diff --git a/bin/pixi.js b/bin/pixi.js index b57ad10..40862ec 100644 --- a/bin/pixi.js +++ b/bin/pixi.js @@ -1,7 +1,7 @@ /** * @license * pixi.js - v3.0.10-dev - * Compiled 2016-01-17T18:07:22.522Z + * Compiled 2016-01-17T18:16:46.120Z * * pixi.js is licensed under the MIT License. * http://www.opensource.org/licenses/mit-license.php @@ -10864,15 +10864,15 @@ ObjectRenderer = require('../../renderers/webgl/utils/ObjectRenderer'), WebGLRenderer = require('../../renderers/webgl/WebGLRenderer'), WebGLGraphicsData = require('./WebGLGraphicsData'), - PrimitiveShader = require('./PrimitiveShader'), + PrimitiveShader = require('./shaders/PrimitiveShader'), // some drawing functions.. - buildLine = require('./buildLine'); - buildPoly = require('./buildPoly'); - buildComplexPoly = require('./buildComplexPoly'); - buildRectangle = require('./buildRectangle'); - buildRoundedRectangle = require('./buildRoundedRectangle'); - buildCircle = require('./buildCircle'); + buildLine = require('./utils/buildLine'); + buildPoly = require('./utils/buildPoly'); + buildComplexPoly = require('./utils/buildComplexPoly'); + buildRectangle = require('./utils/buildRectangle'); + buildRoundedRectangle = require('./utils/buildRoundedRectangle'); + buildCircle = require('./utils/buildCircle'); earcut = require('earcut'); @@ -11177,59 +11177,7 @@ }; -},{"../../const":38,"../../math":55,"../../renderers/webgl/WebGLRenderer":72,"../../renderers/webgl/utils/ObjectRenderer":87,"../../utils":105,"./PrimitiveShader":44,"./WebGLGraphicsData":45,"./buildCircle":46,"./buildComplexPoly":47,"./buildLine":48,"./buildPoly":49,"./buildRectangle":50,"./buildRoundedRectangle":51,"earcut":24}],44:[function(require,module,exports){ -var Shader = require('pixi-gl-core').GLShader; - -/** - * This shader is used to draw simple primitive shapes for {@link PIXI.Graphics}. - * - * @class - * @memberof PIXI - * @extends PIXI.Shader - * @param shaderManager {ShaderManager} The webgl shader manager this shader works for. - */ -function PrimitiveShader(gl) -{ - Shader.call(this, - gl, - // vertex shader - [ - 'attribute vec2 aVertexPosition;', - 'attribute vec4 aColor;', - - 'uniform mat3 translationMatrix;', - 'uniform mat3 projectionMatrix;', - - 'uniform float alpha;', - 'uniform float flipY;', - 'uniform vec3 tint;', - - 'varying vec4 vColor;', - - 'void main(void){', - ' gl_Position = vec4((projectionMatrix * translationMatrix * vec3(aVertexPosition, 1.0)).xy, 0.0, 1.0);', - ' vColor = aColor * vec4(tint * alpha, alpha);', - '}' - ].join('\n'), - // fragment shader - [ - 'precision mediump float;', - - 'varying vec4 vColor;', - - 'void main(void){', - ' gl_FragColor = vColor;', - '}' - ].join('\n') - ); -} - -PrimitiveShader.prototype = Object.create(Shader.prototype); -PrimitiveShader.prototype.constructor = PrimitiveShader; - -module.exports = PrimitiveShader; - -},{"pixi-gl-core":1}],45:[function(require,module,exports){ +},{"../../const":38,"../../math":55,"../../renderers/webgl/WebGLRenderer":72,"../../renderers/webgl/utils/ObjectRenderer":87,"../../utils":105,"./WebGLGraphicsData":44,"./shaders/PrimitiveShader":45,"./utils/buildCircle":46,"./utils/buildComplexPoly":47,"./utils/buildLine":48,"./utils/buildPoly":49,"./utils/buildRectangle":50,"./utils/buildRoundedRectangle":51,"earcut":24}],44:[function(require,module,exports){ /** * An object containing WebGL specific properties to be used by the WebGL renderer * @@ -11347,9 +11295,61 @@ this.glIndices = null; }; -},{}],46:[function(require,module,exports){ +},{}],45:[function(require,module,exports){ +var Shader = require('pixi-gl-core').GLShader; + +/** + * This shader is used to draw simple primitive shapes for {@link PIXI.Graphics}. + * + * @class + * @memberof PIXI + * @extends PIXI.Shader + * @param shaderManager {ShaderManager} The webgl shader manager this shader works for. + */ +function PrimitiveShader(gl) +{ + Shader.call(this, + gl, + // vertex shader + [ + 'attribute vec2 aVertexPosition;', + 'attribute vec4 aColor;', + + 'uniform mat3 translationMatrix;', + 'uniform mat3 projectionMatrix;', + + 'uniform float alpha;', + 'uniform float flipY;', + 'uniform vec3 tint;', + + 'varying vec4 vColor;', + + 'void main(void){', + ' gl_Position = vec4((projectionMatrix * translationMatrix * vec3(aVertexPosition, 1.0)).xy, 0.0, 1.0);', + ' vColor = aColor * vec4(tint * alpha, alpha);', + '}' + ].join('\n'), + // fragment shader + [ + 'precision mediump float;', + + 'varying vec4 vColor;', + + 'void main(void){', + ' gl_FragColor = vColor;', + '}' + ].join('\n') + ); +} + +PrimitiveShader.prototype = Object.create(Shader.prototype); +PrimitiveShader.prototype.constructor = PrimitiveShader; + +module.exports = PrimitiveShader; + +},{"pixi-gl-core":1}],46:[function(require,module,exports){ var buildLine = require('./buildLine'), - utils = require('../../utils'); + utils = require('../../../utils'); /** * Builds a circle to draw @@ -11426,7 +11426,7 @@ y + Math.cos(seg * i) * height); } - this.buildLine(graphicsData, webGLData); + buildLine(graphicsData, webGLData); graphicsData.points = tempPoints; } @@ -11434,9 +11434,9 @@ module.exports = buildCircle; -},{"../../utils":105,"./buildLine":48}],47:[function(require,module,exports){ +},{"../../../utils":105,"./buildLine":48}],47:[function(require,module,exports){ var buildLine = require('./buildLine'), - utils = require('../../utils'); + utils = require('../../../utils'); @@ -11505,9 +11505,9 @@ module.exports = buildComplexPoly; -},{"../../utils":105,"./buildLine":48}],48:[function(require,module,exports){ -var math = require('../../math'), - utils = require('../../utils'); +},{"../../../utils":105,"./buildLine":48}],48:[function(require,module,exports){ +var math = require('../../../math'), + utils = require('../../../utils'); /** * Builds a line to draw @@ -11725,8 +11725,8 @@ }; module.exports = buildLine; -},{"../../math":55,"../../utils":105}],49:[function(require,module,exports){ -var utils = require('../../utils'); +},{"../../../math":55,"../../../utils":105}],49:[function(require,module,exports){ +var utils = require('../../../utils'); /** * Builds a polygon to draw @@ -11788,9 +11788,9 @@ module.exports = buildPoly; -},{"../../utils":105}],50:[function(require,module,exports){ +},{"../../../utils":105}],50:[function(require,module,exports){ var buildLine = require('./buildLine'), - utils = require('../../utils'); + utils = require('../../../utils'); /** * Builds a rectangle to draw @@ -11859,9 +11859,9 @@ }; module.exports = buildRectangle; -},{"../../utils":105,"./buildLine":48}],51:[function(require,module,exports){ +},{"../../../utils":105,"./buildLine":48}],51:[function(require,module,exports){ var buildLine = require('./buildLine'), - utils = require('../../utils'); + utils = require('../../../utils'); /** * Builds a rounded rectangle to draw @@ -11987,7 +11987,7 @@ module.exports = buildRoundedRectangle; -},{"../../utils":105,"./buildLine":48}],52:[function(require,module,exports){ +},{"../../../utils":105,"./buildLine":48}],52:[function(require,module,exports){ /** * @file Main export of the PIXI core library * @author Mat Groves @@ -30075,6 +30075,6 @@ },{}]},{},[143])(143) }); -//# sourceMappingURL=data:application/json;charset:utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIm5vZGVfbW9kdWxlcy9icm93c2VyaWZ5L25vZGVfbW9kdWxlcy9icm93c2VyLXBhY2svX3ByZWx1ZGUuanMiLCIuLi9waXhpLWdsLWNvcmUvaW5kZXguanMiLCIuLi9waXhpLWdsLWNvcmUvbGliL0dMQnVmZmVyLmpzIiwiLi4vcGl4aS1nbC1jb3JlL2xpYi9HTEZyYW1lYnVmZmVyLmpzIiwiLi4vcGl4aS1nbC1jb3JlL2xpYi9HTFNoYWRlci5qcyIsIi4uL3BpeGktZ2wtY29yZS9saWIvR0xUZXh0dXJlLmpzIiwiLi4vcGl4aS1nbC1jb3JlL2xpYi9WZXJ0ZXhBcnJheU9iamVjdC5qcyIsIi4uL3BpeGktZ2wtY29yZS9saWIvY3JlYXRlQ29udGV4dC5qcyIsIi4uL3BpeGktZ2wtY29yZS9saWIvc2V0VmVydGV4QXR0cmliQXJyYXlzLmpzIiwiLi4vcGl4aS1nbC1jb3JlL2xpYi9zaGFkZXIvY29tcGlsZVByb2dyYW0uanMiLCIuLi9waXhpLWdsLWNvcmUvbGliL3NoYWRlci9kZWZhdWx0VmFsdWUuanMiLCIuLi9waXhpLWdsLWNvcmUvbGliL3NoYWRlci9leHRyYWN0QXR0cmlidXRlcy5qcyIsIi4uL3BpeGktZ2wtY29yZS9saWIvc2hhZGVyL2V4dHJhY3RVbmlmb3Jtcy5qcyIsIi4uL3BpeGktZ2wtY29yZS9saWIvc2hhZGVyL2dlbmVyYXRlVW5pZm9ybUFjY2Vzc09iamVjdC5qcyIsIi4uL3BpeGktZ2wtY29yZS9saWIvc2hhZGVyL21hcFNpemUuanMiLCIuLi9waXhpLWdsLWNvcmUvbGliL3NoYWRlci9tYXBUeXBlLmpzIiwibm9kZV9tb2R1bGVzL2FzeW5jL2xpYi9hc3luYy5qcyIsIm5vZGVfbW9kdWxlcy9icm93c2VyaWZ5L25vZGVfbW9kdWxlcy9wYXRoLWJyb3dzZXJpZnkvaW5kZXguanMiLCJub2RlX21vZHVsZXMvYnJvd3NlcmlmeS9ub2RlX21vZHVsZXMvcHJvY2Vzcy9icm93c2VyLmpzIiwibm9kZV9tb2R1bGVzL2Jyb3dzZXJpZnkvbm9kZV9tb2R1bGVzL3B1bnljb2RlL3B1bnljb2RlLmpzIiwibm9kZV9tb2R1bGVzL2Jyb3dzZXJpZnkvbm9kZV9tb2R1bGVzL3F1ZXJ5c3RyaW5nLWVzMy9kZWNvZGUuanMiLCJub2RlX21vZHVsZXMvYnJvd3NlcmlmeS9ub2RlX21vZHVsZXMvcXVlcnlzdHJpbmctZXMzL2VuY29kZS5qcyIsIm5vZGVfbW9kdWxlcy9icm93c2VyaWZ5L25vZGVfbW9kdWxlcy9xdWVyeXN0cmluZy1lczMvaW5kZXguanMiLCJub2RlX21vZHVsZXMvYnJvd3NlcmlmeS9ub2RlX21vZHVsZXMvdXJsL3VybC5qcyIsIm5vZGVfbW9kdWxlcy9lYXJjdXQvc3JjL2VhcmN1dC5qcyIsIm5vZGVfbW9kdWxlcy9ldmVudGVtaXR0ZXIzL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL29iamVjdC1hc3NpZ24vaW5kZXguanMiLCJub2RlX21vZHVsZXMvcmVzb3VyY2UtbG9hZGVyL25vZGVfbW9kdWxlcy9hc3luYy9saWIvYXN5bmMuanMiLCJub2RlX21vZHVsZXMvcmVzb3VyY2UtbG9hZGVyL3NyYy9Mb2FkZXIuanMiLCJub2RlX21vZHVsZXMvcmVzb3VyY2UtbG9hZGVyL3NyYy9SZXNvdXJjZS5qcyIsIm5vZGVfbW9kdWxlcy9yZXNvdXJjZS1sb2FkZXIvc3JjL2I2NC5qcyIsIm5vZGVfbW9kdWxlcy9yZXNvdXJjZS1sb2FkZXIvc3JjL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL3Jlc291cmNlLWxvYWRlci9zcmMvbWlkZGxld2FyZXMvY2FjaGluZy9tZW1vcnkuanMiLCJub2RlX21vZHVsZXMvcmVzb3VyY2UtbG9hZGVyL3NyYy9taWRkbGV3YXJlcy9wYXJzaW5nL2Jsb2IuanMiLCJwYWNrYWdlLmpzb24iLCJzcmMvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5TWFuYWdlci5qcyIsInNyYy9hY2Nlc3NpYmlsaXR5L2FjY2Vzc2libGVUYXJnZXQuanMiLCJzcmMvYWNjZXNzaWJpbGl0eS9pbmRleC5qcyIsInNyYy9jb3JlL2NvbnN0LmpzIiwic3JjL2NvcmUvZGlzcGxheS9Db250YWluZXIuanMiLCJzcmMvY29yZS9kaXNwbGF5L0Rpc3BsYXlPYmplY3QuanMiLCJzcmMvY29yZS9ncmFwaGljcy9HcmFwaGljcy5qcyIsInNyYy9jb3JlL2dyYXBoaWNzL0dyYXBoaWNzRGF0YS5qcyIsInNyYy9jb3JlL2dyYXBoaWNzL3dlYmdsL0dyYXBoaWNzUmVuZGVyZXIuanMiLCJzcmMvY29yZS9ncmFwaGljcy93ZWJnbC9QcmltaXRpdmVTaGFkZXIuanMiLCJzcmMvY29yZS9ncmFwaGljcy93ZWJnbC9XZWJHTEdyYXBoaWNzRGF0YS5qcyIsInNyYy9jb3JlL2dyYXBoaWNzL3dlYmdsL2J1aWxkQ2lyY2xlLmpzIiwic3JjL2NvcmUvZ3JhcGhpY3Mvd2ViZ2wvYnVpbGRDb21wbGV4UG9seS5qcyIsInNyYy9jb3JlL2dyYXBoaWNzL3dlYmdsL2J1aWxkTGluZS5qcyIsInNyYy9jb3JlL2dyYXBoaWNzL3dlYmdsL2J1aWxkUG9seS5qcyIsInNyYy9jb3JlL2dyYXBoaWNzL3dlYmdsL2J1aWxkUmVjdGFuZ2xlLmpzIiwic3JjL2NvcmUvZ3JhcGhpY3Mvd2ViZ2wvYnVpbGRSb3VuZGVkUmVjdGFuZ2xlLmpzIiwic3JjL2NvcmUvaW5kZXguanMiLCJzcmMvY29yZS9tYXRoL01hdHJpeC5qcyIsInNyYy9jb3JlL21hdGgvUG9pbnQuanMiLCJzcmMvY29yZS9tYXRoL2luZGV4LmpzIiwic3JjL2NvcmUvbWF0aC9zaGFwZXMvQ2lyY2xlLmpzIiwic3JjL2NvcmUvbWF0aC9zaGFwZXMvRWxsaXBzZS5qcyIsInNyYy9jb3JlL21hdGgvc2hhcGVzL1BvbHlnb24uanMiLCJzcmMvY29yZS9tYXRoL3NoYXBlcy9SZWN0YW5nbGUuanMiLCJzcmMvY29yZS9tYXRoL3NoYXBlcy9Sb3VuZGVkUmVjdGFuZ2xlLmpzIiwic3JjL2NvcmUvcGFydGljbGVzL1BhcnRpY2xlQ29udGFpbmVyLmpzIiwic3JjL2NvcmUvcGFydGljbGVzL3dlYmdsL1BhcnRpY2xlQnVmZmVyLmpzIiwic3JjL2NvcmUvcGFydGljbGVzL3dlYmdsL1BhcnRpY2xlUmVuZGVyZXIuanMiLCJzcmMvY29yZS9wYXJ0aWNsZXMvd2ViZ2wvUGFydGljbGVTaGFkZXIuanMiLCJzcmMvY29yZS9yZW5kZXJlcnMvU3lzdGVtUmVuZGVyZXIuanMiLCJzcmMvY29yZS9yZW5kZXJlcnMvY2FudmFzL0NhbnZhc1JlbmRlcmVyLmpzIiwic3JjL2NvcmUvcmVuZGVyZXJzL2NhbnZhcy91dGlscy9DYW52YXNCdWZmZXIuanMiLCJzcmMvY29yZS9yZW5kZXJlcnMvY2FudmFzL3V0aWxzL0NhbnZhc0dyYXBoaWNzLmpzIiwic3JjL2NvcmUvcmVuZGVyZXJzL2NhbnZhcy91dGlscy9DYW52YXNNYXNrTWFuYWdlci5qcyIsInNyYy9jb3JlL3JlbmRlcmVycy9jYW52YXMvdXRpbHMvQ2FudmFzVGludGVyLmpzIiwic3JjL2NvcmUvcmVuZGVyZXJzL3dlYmdsL1RleHR1cmVNYW5hZ2VyLmpzIiwic3JjL2NvcmUvcmVuZGVyZXJzL3dlYmdsL1dlYkdMUmVuZGVyZXIuanMiLCJzcmMvY29yZS9yZW5kZXJlcnMvd2ViZ2wvZmlsdGVycy9BYnN0cmFjdEZpbHRlci5qcyIsInNyYy9jb3JlL3JlbmRlcmVycy93ZWJnbC9maWx0ZXJzL0ZYQUFGaWx0ZXIuanMiLCJzcmMvY29yZS9yZW5kZXJlcnMvd2ViZ2wvZmlsdGVycy9TcHJpdGVNYXNrRmlsdGVyLmpzIiwic3JjL2NvcmUvcmVuZGVyZXJzL3dlYmdsL21hbmFnZXJzL0JsZW5kTW9kZU1hbmFnZXIuanMiLCJzcmMvY29yZS9yZW5kZXJlcnMvd2ViZ2wvbWFuYWdlcnMvRmlsdGVyTWFuYWdlci5qcyIsInNyYy9jb3JlL3JlbmRlcmVycy93ZWJnbC9tYW5hZ2Vycy9NYXNrTWFuYWdlci5qcyIsInNyYy9jb3JlL3JlbmRlcmVycy93ZWJnbC9tYW5hZ2Vycy9TaGFkZXJNYW5hZ2VyLmpzIiwic3JjL2NvcmUvcmVuZGVyZXJzL3dlYmdsL21hbmFnZXJzL1N0ZW5jaWxNYW5hZ2VyLmpzIiwic3JjL2NvcmUvcmVuZGVyZXJzL3dlYmdsL21hbmFnZXJzL1dlYkdMTWFuYWdlci5qcyIsInNyYy9jb3JlL3JlbmRlcmVycy93ZWJnbC9zaGFkZXJzL0NvbXBsZXhQcmltaXRpdmVTaGFkZXIuanMiLCJzcmMvY29yZS9yZW5kZXJlcnMvd2ViZ2wvc2hhZGVycy9QcmltaXRpdmVTaGFkZXIuanMiLCJzcmMvY29yZS9yZW5kZXJlcnMvd2ViZ2wvc2hhZGVycy9TaGFkZXIuanMiLCJzcmMvY29yZS9yZW5kZXJlcnMvd2ViZ2wvc2hhZGVycy9UZXh0dXJlU2hhZGVyLmpzIiwic3JjL2NvcmUvcmVuZGVyZXJzL3dlYmdsL3NoYWRlcnMvX1RleHR1cmVTaGFkZXIuanMiLCJzcmMvY29yZS9yZW5kZXJlcnMvd2ViZ2wvdXRpbHMvT2JqZWN0UmVuZGVyZXIuanMiLCJzcmMvY29yZS9yZW5kZXJlcnMvd2ViZ2wvdXRpbHMvUXVhZC5qcyIsInNyYy9jb3JlL3JlbmRlcmVycy93ZWJnbC91dGlscy9SZW5kZXJUYXJnZXQuanMiLCJzcmMvY29yZS9yZW5kZXJlcnMvd2ViZ2wvdXRpbHMvU3RlbmNpbE1hc2tTdGFjay5qcyIsInNyYy9jb3JlL3JlbmRlcmVycy93ZWJnbC91dGlscy9tYXBXZWJHTEJsZW5kTW9kZXNUb1BpeGkuanMiLCJzcmMvY29yZS9yZW5kZXJlcnMvd2ViZ2wvdXRpbHMvbWFwV2ViR0xEcmF3TW9kZXNUb1BpeGkuanMiLCJzcmMvY29yZS9zcHJpdGVzL1Nwcml0ZS5qcyIsInNyYy9jb3JlL3Nwcml0ZXMvd2ViZ2wvU3ByaXRlUmVuZGVyZXIuanMiLCJzcmMvY29yZS9zcHJpdGVzL3dlYmdsL2dlbmVyYXRlTXVsdGlUZXh0dXJlU2hhZGVyLmpzIiwic3JjL2NvcmUvdGV4dC9UZXh0LmpzIiwic3JjL2NvcmUvdGV4dHVyZXMvQmFzZVRleHR1cmUuanMiLCJzcmMvY29yZS90ZXh0dXJlcy9SZW5kZXJUZXh0dXJlLmpzIiwic3JjL2NvcmUvdGV4dHVyZXMvVGV4dHVyZS5qcyIsInNyYy9jb3JlL3RleHR1cmVzL1RleHR1cmVVdnMuanMiLCJzcmMvY29yZS90ZXh0dXJlcy9WaWRlb0Jhc2VUZXh0dXJlLmpzIiwic3JjL2NvcmUvdGlja2VyL1RpY2tlci5qcyIsInNyYy9jb3JlL3RpY2tlci9pbmRleC5qcyIsInNyYy9jb3JlL3V0aWxzL2NyZWF0ZUluZGljZXNGb3JRdWFkcy5qcyIsInNyYy9jb3JlL3V0aWxzL2luZGV4LmpzIiwic3JjL2NvcmUvdXRpbHMvcGx1Z2luVGFyZ2V0LmpzIiwic3JjL2RlcHJlY2F0aW9uLmpzIiwic3JjL2V4dHJhcy9CaXRtYXBUZXh0LmpzIiwic3JjL2V4dHJhcy9Nb3ZpZUNsaXAuanMiLCJzcmMvZXh0cmFzL1RpbGluZ1Nwcml0ZS5qcyIsInNyYy9leHRyYXMvY2FjaGVBc0JpdG1hcC5qcyIsInNyYy9leHRyYXMvZ2V0Q2hpbGRCeU5hbWUuanMiLCJzcmMvZXh0cmFzL2dldEdsb2JhbFBvc2l0aW9uLmpzIiwic3JjL2V4dHJhcy9pbmRleC5qcyIsInNyYy9maWx0ZXJzL2FzY2lpL0FzY2lpRmlsdGVyLmpzIiwic3JjL2ZpbHRlcnMvYmxvb20vQmxvb21GaWx0ZXIuanMiLCJzcmMvZmlsdGVycy9ibHVyL0JsdXJEaXJGaWx0ZXIuanMiLCJzcmMvZmlsdGVycy9ibHVyL0JsdXJGaWx0ZXIuanMiLCJzcmMvZmlsdGVycy9ibHVyL0JsdXJYRmlsdGVyLmpzIiwic3JjL2ZpbHRlcnMvYmx1ci9CbHVyWUZpbHRlci5qcyIsInNyYy9maWx0ZXJzL2JsdXIvU21hcnRCbHVyRmlsdGVyLmpzIiwic3JjL2ZpbHRlcnMvY29sb3IvQ29sb3JNYXRyaXhGaWx0ZXIuanMiLCJzcmMvZmlsdGVycy9jb2xvci9Db2xvclN0ZXBGaWx0ZXIuanMiLCJzcmMvZmlsdGVycy9jb252b2x1dGlvbi9Db252b2x1dGlvbkZpbHRlci5qcyIsInNyYy9maWx0ZXJzL2Nyb3NzaGF0Y2gvQ3Jvc3NIYXRjaEZpbHRlci5qcyIsInNyYy9maWx0ZXJzL2Rpc3BsYWNlbWVudC9EaXNwbGFjZW1lbnRGaWx0ZXIuanMiLCJzcmMvZmlsdGVycy9kb3QvRG90U2NyZWVuRmlsdGVyLmpzIiwic3JjL2ZpbHRlcnMvZHJvcHNoYWRvdy9CbHVyWVRpbnRGaWx0ZXIuanMiLCJzcmMvZmlsdGVycy9kcm9wc2hhZG93L0Ryb3BTaGFkb3dGaWx0ZXIuanMiLCJzcmMvZmlsdGVycy9ncmF5L0dyYXlGaWx0ZXIuanMiLCJzcmMvZmlsdGVycy9pbmRleC5qcyIsInNyYy9maWx0ZXJzL2ludmVydC9JbnZlcnRGaWx0ZXIuanMiLCJzcmMvZmlsdGVycy9ub2lzZS9Ob2lzZUZpbHRlci5qcyIsInNyYy9maWx0ZXJzL3BpeGVsYXRlL1BpeGVsYXRlRmlsdGVyLmpzIiwic3JjL2ZpbHRlcnMvcmdiL1JHQlNwbGl0RmlsdGVyLmpzIiwic3JjL2ZpbHRlcnMvc2VwaWEvU2VwaWFGaWx0ZXIuanMiLCJzcmMvZmlsdGVycy9zaG9ja3dhdmUvU2hvY2t3YXZlRmlsdGVyLmpzIiwic3JjL2ZpbHRlcnMvdGlsdHNoaWZ0L1RpbHRTaGlmdEF4aXNGaWx0ZXIuanMiLCJzcmMvZmlsdGVycy90aWx0c2hpZnQvVGlsdFNoaWZ0RmlsdGVyLmpzIiwic3JjL2ZpbHRlcnMvdGlsdHNoaWZ0L1RpbHRTaGlmdFhGaWx0ZXIuanMiLCJzcmMvZmlsdGVycy90aWx0c2hpZnQvVGlsdFNoaWZ0WUZpbHRlci5qcyIsInNyYy9maWx0ZXJzL3R3aXN0L1R3aXN0RmlsdGVyLmpzIiwic3JjL3NyYy9pbmRleC5qcyIsInNyYy9pbnRlcmFjdGlvbi9JbnRlcmFjdGlvbkRhdGEuanMiLCJzcmMvaW50ZXJhY3Rpb24vSW50ZXJhY3Rpb25NYW5hZ2VyLmpzIiwic3JjL2ludGVyYWN0aW9uL2luZGV4LmpzIiwic3JjL2ludGVyYWN0aW9uL2ludGVyYWN0aXZlVGFyZ2V0LmpzIiwic3JjL2xvYWRlcnMvYml0bWFwRm9udFBhcnNlci5qcyIsInNyYy9sb2FkZXJzL2luZGV4LmpzIiwic3JjL2xvYWRlcnMvbG9hZGVyLmpzIiwic3JjL2xvYWRlcnMvc3ByaXRlc2hlZXRQYXJzZXIuanMiLCJzcmMvbG9hZGVycy90ZXh0dXJlUGFyc2VyLmpzIiwic3JjL21lc2gvTWVzaC5qcyIsInNyYy9tZXNoL1BsYW5lLmpzIiwic3JjL21lc2gvUm9wZS5qcyIsInNyYy9tZXNoL2luZGV4LmpzIiwic3JjL21lc2gvd2ViZ2wvTWVzaFJlbmRlcmVyLmpzIiwic3JjL21lc2gvd2ViZ2wvTWVzaFNoYWRlci5qcyIsInNyYy9wb2x5ZmlsbC9NYXRoLnNpZ24uanMiLCJzcmMvcG9seWZpbGwvT2JqZWN0LmFzc2lnbi5qcyIsInNyYy9wb2x5ZmlsbC9pbmRleC5qcyIsInNyYy9wb2x5ZmlsbC9yZXF1ZXN0QW5pbWF0aW9uRnJhbWUuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUNBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbklBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDeENBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdk1BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNqSEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDOUJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3REQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN6REE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2xDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDN0JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0SUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2hDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUM5Q0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7O0FDNXVDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7QUNoT0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FDM0ZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7OztBQ3JoQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDcEZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDckZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDSkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ25zQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdGtCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3RRQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FDdkNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7QUNubUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3hjQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDaHlCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2hFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNaQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDcEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDMURBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMxRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuWkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzVDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzdOQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNyb0JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3ZtQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdG9DQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzNGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM5VEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2xEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDcEhBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDckZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3JFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDMU5BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDN0RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3JFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM5SEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDN0ZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3RiQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDcEVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNwQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3RGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM3RkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3JHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNUZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzFGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDN1RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMxTkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDMWRBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDblFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMxUUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2xHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2hXQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM1REE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMxUEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDMUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMzWUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzlHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDckRBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMvRkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDMUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2xjQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDakhBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3hLQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDN1dBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3ZDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM1REE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM3REE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM5Z0JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDN0dBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDL0VBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN4REE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDekpBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDalNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDL0JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3ptQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3ZXQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzdEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzNtQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbmJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzdkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3hhQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQy9FQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzNPQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDaldBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3REQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQy9CQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDblJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNwRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM3VkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2xZQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM5VEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbGNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzlRQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzVCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzVCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ25CQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3ZEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzVJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM1R0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMzRkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDcEZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNUJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3RoQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQy9DQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDekZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3hCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2xGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3RFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDekZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMvTEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQy9DQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3JDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNoREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3JEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2pEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNwRkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDaERBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0RkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDM0hBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzVHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNwQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDcENBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FDbkZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7QUM1QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQy9DQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzEyQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQy9DQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdkhBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbkJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzVEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2xGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDcEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzFkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzVIQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ25OQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDakJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuT0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzNEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ1JBO0FBQ0E7QUFDQTtBQUNBOzs7QUNIQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsImZpbGUiOiJnZW5lcmF0ZWQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlc0NvbnRlbnQiOlsiKGZ1bmN0aW9uIGUodCxuLHIpe2Z1bmN0aW9uIHMobyx1KXtpZighbltvXSl7aWYoIXRbb10pe3ZhciBhPXR5cGVvZiByZXF1aXJlPT1cImZ1bmN0aW9uXCImJnJlcXVpcmU7aWYoIXUmJmEpcmV0dXJuIGEobywhMCk7aWYoaSlyZXR1cm4gaShvLCEwKTt2YXIgZj1uZXcgRXJyb3IoXCJDYW5ub3QgZmluZCBtb2R1bGUgJ1wiK28rXCInXCIpO3Rocm93IGYuY29kZT1cIk1PRFVMRV9OT1RfRk9VTkRcIixmfXZhciBsPW5bb109e2V4cG9ydHM6e319O3Rbb11bMF0uY2FsbChsLmV4cG9ydHMsZnVuY3Rpb24oZSl7dmFyIG49dFtvXVsxXVtlXTtyZXR1cm4gcyhuP246ZSl9LGwsbC5leHBvcnRzLGUsdCxuLHIpfXJldHVybiBuW29dLmV4cG9ydHN9dmFyIGk9dHlwZW9mIHJlcXVpcmU9PVwiZnVuY3Rpb25cIiYmcmVxdWlyZTtmb3IodmFyIG89MDtvPHIubGVuZ3RoO28rKylzKHJbb10pO3JldHVybiBzfSkiLCJcblxubW9kdWxlLmV4cG9ydHMgPSB7XG5cbiAgICBjcmVhdGVDb250ZXh0OiBcdFx0XHRyZXF1aXJlKCcuL2xpYi9jcmVhdGVDb250ZXh0JyksXG4gICAgc2V0VmVydGV4QXR0cmliQXJyYXlzOiBcdHJlcXVpcmUoJy4vbGliL3NldFZlcnRleEF0dHJpYkFycmF5cycpLFxuICAgIFxuICAgIEdMQnVmZmVyOiBcdFx0XHRcdHJlcXVpcmUoJy4vbGliL0dMQnVmZmVyJyksXG4gICAgR0xGcmFtZWJ1ZmZlcjogXHRcdFx0cmVxdWlyZSgnLi9saWIvR0xGcmFtZWJ1ZmZlcicpLFxuICAgIEdMU2hhZGVyOiBcdFx0XHRcdHJlcXVpcmUoJy4vbGliL0dMU2hhZGVyJyksXG4gICAgR0xUZXh0dXJlOiBcdFx0XHRcdHJlcXVpcmUoJy4vbGliL0dMVGV4dHVyZScpLFxuICAgIFxuICAgIFZlcnRleEFycmF5T2JqZWN0OiBcdFx0cmVxdWlyZSgnLi9saWIvVmVydGV4QXJyYXlPYmplY3QnKVxuXG59OyIsIlxuLyoqXG4gKiBIZWxwZXIgY2xhc3MgdG8gY3JlYXRlIGEgd2ViR0wgYnVmZmVyXG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIGdsIHtXZWJHTFJlbmRlcmluZ0NvbnRleHR9XG4gKi9cblxudmFyIEVNUFRZX0FSUkFZX0JVRkZFUiA9IG5ldyBBcnJheUJ1ZmZlcigwKTtcblxudmFyIEJ1ZmZlciA9IGZ1bmN0aW9uKGdsLCB0eXBlLCBkYXRhLCBkcmF3VHlwZSlcbntcblx0dGhpcy5nbCA9IGdsO1xuXG5cdHRoaXMuYnVmZmVyID0gZ2wuY3JlYXRlQnVmZmVyKCk7XG5cdHRoaXMudHlwZSA9IHR5cGUgfHwgZ2wuQVJSQVlfQlVGRkVSO1xuXHR0aGlzLmRyYXdUeXBlID0gZHJhd1R5cGUgfHwgZ2wuU1RBVElDX0RSQVc7XG5cdHRoaXMuZGF0YSA9IEVNUFRZX0FSUkFZX0JVRkZFUjtcblxuXHRpZihkYXRhKVxuXHR7XG5cdFx0dGhpcy51cGxvYWQoZGF0YSk7XG5cdH1cbn1cblxuQnVmZmVyLnByb3RvdHlwZS51cGxvYWQgPSBmdW5jdGlvbihkYXRhLCBvZmZzZXQsIGRvbnRCaW5kKVxue1xuXHQvLyB0b2RvIC0gbmVlZGVkP1xuXHQvL2lmKCFkb250QmluZClcblx0dGhpcy5iaW5kKCk7XG5cblx0dmFyIGdsID0gdGhpcy5nbDtcblx0XG5cdGRhdGEgPSBkYXRhIHx8IHRoaXMuZGF0YTtcblx0b2Zmc2V0ID0gb2Zmc2V0IHx8IDA7XG5cblx0aWYodGhpcy5kYXRhLmJ5dGVMZW5ndGggPj0gZGF0YS5ieXRlTGVuZ3RoKVxuXHR7XHRcblx0XHRnbC5idWZmZXJTdWJEYXRhKHRoaXMudHlwZSwgb2Zmc2V0LCBkYXRhKTtcblx0fVxuXHRlbHNlXG5cdHtcblx0XHRnbC5idWZmZXJEYXRhKHRoaXMudHlwZSwgZGF0YSwgdGhpcy5kcmF3VHlwZSk7XG5cdH1cblxuXHR0aGlzLmRhdGEgPSBkYXRhO1xufVxuXG5CdWZmZXIucHJvdG90eXBlLmJpbmQgPSBmdW5jdGlvbigpXG57XG5cdHZhciBnbCA9IHRoaXMuZ2w7XG5cdGdsLmJpbmRCdWZmZXIodGhpcy50eXBlLCB0aGlzLmJ1ZmZlcik7XG59XG5cbkJ1ZmZlci5jcmVhdGVWZXJ0ZXhCdWZmZXIgPSBmdW5jdGlvbihnbCwgZGF0YSwgZHJhd1R5cGUpXG57XG5cdHJldHVybiBuZXcgQnVmZmVyKGdsLCBnbC5BUlJBWV9CVUZGRVIsIGRhdGEsIGRyYXdUeXBlKTtcbn1cblxuQnVmZmVyLmNyZWF0ZUluZGV4QnVmZmVyID0gZnVuY3Rpb24oZ2wsIGRhdGEsIGRyYXdUeXBlKVxue1xuXHRyZXR1cm4gbmV3IEJ1ZmZlcihnbCwgZ2wuRUxFTUVOVF9BUlJBWV9CVUZGRVIsIGRhdGEsIGRyYXdUeXBlKTtcbn1cblxuQnVmZmVyLmNyZWF0ZSA9IGZ1bmN0aW9uKGdsLCB0eXBlLCBkYXRhLCBkcmF3VHlwZSlcbntcblx0cmV0dXJuIG5ldyBCdWZmZXIoZ2wsIHR5cGUsIGRyYXdUeXBlKTtcbn1cblxuLy9UT0RPIERlc3Ryb3kuLlxuXG5tb2R1bGUuZXhwb3J0cyA9IEJ1ZmZlcjtcblxuIiwiXG52YXIgVGV4dHVyZSA9IHJlcXVpcmUoJy4vR0xUZXh0dXJlJyk7XG5cbi8qKlxuICogSGVscGVyIGNsYXNzIHRvIGNyZWF0ZSBhIHdlYkdMIEZyYW1lYnVmZmVyXG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIGdsIHtXZWJHTFJlbmRlcmluZ0NvbnRleHR9XG4gKi9cblxudmFyIEZyYW1lYnVmZmVyID0gZnVuY3Rpb24oZ2wsIHdpZHRoLCBoZWlnaHQpXG57XG5cdHRoaXMuZ2wgPSBnbDtcblxuXHR0aGlzLmZyYW1lYnVmZmVyID0gZ2wuY3JlYXRlRnJhbWVidWZmZXIoKTtcblx0XG5cdHRoaXMuc3RlbmNpbCA9IG51bGw7XG5cdHRoaXMudGV4dHVyZSA9IG51bGw7XG5cblx0dGhpcy53aWR0aCA9IHdpZHRoIHx8IDEwMDtcblx0dGhpcy5oZWlnaHQgPSBoZWlnaHQgfHwgMTAwO1xufVxuXG5GcmFtZWJ1ZmZlci5wcm90b3R5cGUuZW5hYmxlVGV4dHVyZSA9IGZ1bmN0aW9uKHRleHR1cmUpXG57XG5cdHZhciBnbCA9IHRoaXMuZ2w7XG5cblx0dGhpcy50ZXh0dXJlID0gdGV4dHVyZSB8fCBuZXcgVGV4dHVyZShnbCk7XG5cblx0dGhpcy50ZXh0dXJlLmJpbmQoKTtcblxuXHQvL2dsLnRleEltYWdlMkQoZ2wuVEVYVFVSRV8yRCwgMCwgZ2wuUkdCQSwgIHRoaXMud2lkdGgsIHRoaXMuaGVpZ2h0LCAwLCBnbC5SR0JBLCBnbC5VTlNJR05FRF9CWVRFLCBudWxsKTtcblxuXHR0aGlzLmJpbmQoKTtcblxuXHRnbC5mcmFtZWJ1ZmZlclRleHR1cmUyRChnbC5GUkFNRUJVRkZFUiwgZ2wuQ09MT1JfQVRUQUNITUVOVDAsIGdsLlRFWFRVUkVfMkQsIHRoaXMudGV4dHVyZS50ZXh0dXJlLCAwKTtcbn1cblxuRnJhbWVidWZmZXIucHJvdG90eXBlLmVuYWJsZVN0ZW5jaWwgPSBmdW5jdGlvbigpXG57XG5cdGlmKHRoaXMuc3RlbmNpbClyZXR1cm47XG5cblx0dmFyIGdsID0gdGhpcy5nbDtcblxuXHR0aGlzLnN0ZW5jaWwgPSBnbC5jcmVhdGVSZW5kZXJidWZmZXIoKTtcbiAgICBcbiAgICBnbC5iaW5kUmVuZGVyYnVmZmVyKGdsLlJFTkRFUkJVRkZFUiwgdGhpcy5zdGVuY2lsKTtcbiAgICBcbiAgICAvLyBUT0RPLi4gdGhpcyBpcyBkZXB0aCBBTkQgc3RlbmNpbD9cbiAgICBnbC5mcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcihnbC5GUkFNRUJVRkZFUiwgZ2wuREVQVEhfU1RFTkNJTF9BVFRBQ0hNRU5ULCBnbC5SRU5ERVJCVUZGRVIsIHRoaXMuc3RlbmNpbCk7XG4gICAgZ2wucmVuZGVyYnVmZmVyU3RvcmFnZShnbC5SRU5ERVJCVUZGRVIsIGdsLkRFUFRIX1NURU5DSUwsICB0aGlzLndpZHRoICAsIHRoaXMuaGVpZ2h0ICk7XG59XG5cbkZyYW1lYnVmZmVyLnByb3RvdHlwZS5jbGVhciA9IGZ1bmN0aW9uKCByLCBnLCBiLCBhIClcbntcblx0dGhpcy5iaW5kKCk7XG5cblx0dmFyIGdsID0gdGhpcy5nbDtcbiAgICBcbiAgICBnbC5jbGVhckNvbG9yKHIsIGcsIGIsIGEpO1xuICAgIGdsLmNsZWFyKGdsLkNPTE9SX0JVRkZFUl9CSVQpO1xufVxuXG5GcmFtZWJ1ZmZlci5wcm90b3R5cGUuYmluZCA9IGZ1bmN0aW9uKClcbntcblx0dmFyIGdsID0gdGhpcy5nbDtcblx0Z2wuYmluZEZyYW1lYnVmZmVyKGdsLkZSQU1FQlVGRkVSLCB0aGlzLmZyYW1lYnVmZmVyICk7XHRcbn1cblxuRnJhbWVidWZmZXIucHJvdG90eXBlLnVuYmluZCA9IGZ1bmN0aW9uKClcbntcblx0Z2wuYmluZEZyYW1lYnVmZmVyKGdsLkZSQU1FQlVGRkVSLCBudWxsICk7XHRcbn1cblxuRnJhbWVidWZmZXIucHJvdG90eXBlLnJlc2l6ZSA9IGZ1bmN0aW9uKHdpZHRoLCBoZWlnaHQpXG57XG5cdHZhciBnbCA9IHRoaXMuZ2w7XG5cblx0dGhpcy53aWR0aCA9IHdpZHRoO1xuXHR0aGlzLmhlaWdodCA9IGhlaWdodDtcblxuXHRpZiAoIHRoaXMudGV4dHVyZSApXG4gICAge1xuICAgIFx0dGhpcy50ZXh0dXJlLnVwbG9hZERhdGEobnVsbCwgd2lkdGgsIGhlaWdodCk7XG5cdH1cblxuXHRpZiAoIHRoaXMuc3RlbmNpbCApXG4gICAge1xuICAgICAgICAvLyB1cGRhdGUgdGhlIHN0ZW5jaWwgYnVmZmVyIHdpZHRoIGFuZCBoZWlnaHRcbiAgICAgICAgZ2wuYmluZFJlbmRlcmJ1ZmZlcihnbC5SRU5ERVJCVUZGRVIsIHRoaXMuc3RlbmNpbCk7XG4gICAgICAgIGdsLnJlbmRlcmJ1ZmZlclN0b3JhZ2UoZ2wuUkVOREVSQlVGRkVSLCBnbC5ERVBUSF9TVEVOQ0lMLCB3aWR0aCwgaGVpZ2h0KTtcbiAgICB9XG59XG5cbkZyYW1lYnVmZmVyLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24oKVxue1xuXHR2YXIgZ2wgPSB0aGlzLmdsO1xuXHQvL1RPRE9cblx0Z2wuZGVsZXRlRnJhbWVidWZmZXIodGhpcy5mcmFtZWJ1ZmZlcik7XG59XG5cbkZyYW1lYnVmZmVyLmNyZWF0ZVJHQkEgPSBmdW5jdGlvbihnbCwgd2lkdGgsIGhlaWdodCwgZGF0YSlcbntcblx0dmFyIHRleHR1cmUgPSBUZXh0dXJlLmZyb21EYXRhKGdsLCBudWxsLCB3aWR0aCwgaGVpZ2h0KTtcblx0dGV4dHVyZS5lbmFibGVOZWFyZXN0U2NhbGluZygpO1xuICAgIHRleHR1cmUuZW5hYmxlV3JhcENsYW1wKCk7XG5cbiAgICAvL25vdyBjcmVhdGUgdGhlIGZyYW1lYnVmZmVyIG9iamVjdCBhbmQgYXR0YWNoIHRoZSB0ZXh0dXJlIHRvIGl0LlxuICAgIHZhciBmYm8gPSBuZXcgRnJhbWVidWZmZXIoZ2wsIHdpZHRoLCBoZWlnaHQpO1xuICAgIGZiby5lbmFibGVUZXh0dXJlKHRleHR1cmUpO1xuXG4gICAgcmV0dXJuIGZibztcbn1cblxuRnJhbWVidWZmZXIuY3JlYXRlRmxvYXQzMiA9IGZ1bmN0aW9uKGdsLCB3aWR0aCwgaGVpZ2h0LCBkYXRhKVxue1xuXHQvLyBjcmVhdGUgYSBuZXcgdGV4dHVyZS4uXG4gICAgdmFyIHRleHR1cmUgPSBuZXcgVGV4dHVyZS5mcm9tRGF0YShnbCwgZGF0YSwgd2lkdGgsIGhlaWdodCk7XG4gICAgdGV4dHVyZS5lbmFibGVOZWFyZXN0U2NhbGluZygpO1xuICAgIHRleHR1cmUuZW5hYmxlV3JhcENsYW1wKCk7XG5cbiAgICAvL25vdyBjcmVhdGUgdGhlIGZyYW1lYnVmZmVyIG9iamVjdCBhbmQgYXR0YWNoIHRoZSB0ZXh0dXJlIHRvIGl0LlxuICAgIHZhciBmYm8gPSBuZXcgRnJhbWVidWZmZXIoZ2wsIHdpZHRoLCBoZWlnaHQpO1xuICAgIGZiby5lbmFibGVUZXh0dXJlKHRleHR1cmUpXG5cbiAgICByZXR1cm4gZmJvO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IEZyYW1lYnVmZmVyO1xuXG4iLCJcbnZhciBjb21waWxlUHJvZ3JhbSA9IHJlcXVpcmUoJy4vc2hhZGVyL2NvbXBpbGVQcm9ncmFtJyksXG5cdGV4dHJhY3RBdHRyaWJ1dGVzID0gcmVxdWlyZSgnLi9zaGFkZXIvZXh0cmFjdEF0dHJpYnV0ZXMnKSxcblx0ZXh0cmFjdFVuaWZvcm1zID0gcmVxdWlyZSgnLi9zaGFkZXIvZXh0cmFjdFVuaWZvcm1zJyksXG5cdGdlbmVyYXRlVW5pZm9ybUFjY2Vzc09iamVjdCA9IHJlcXVpcmUoJy4vc2hhZGVyL2dlbmVyYXRlVW5pZm9ybUFjY2Vzc09iamVjdCcpO1xuXG4vKipcbiAqIEhlbHBlciBjbGFzcyB0byBjcmVhdGUgYSB3ZWJHTCBTaGFkZXJcbiAqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gZ2wge1dlYkdMUmVuZGVyaW5nQ29udGV4dH1cbiAqL1xudmFyIFNoYWRlciA9IGZ1bmN0aW9uKGdsLCB2ZXJ0ZXhTcmMsIGZyYWdtZW50U3JjKVxue1xuXHR0aGlzLmdsID0gZ2w7XG5cblx0Ly8gRmlyc3QgY29tcGlsZSB0aGUgcHJvZ3JhbS4uXG5cdHRoaXMucHJvZ3JhbSA9IGNvbXBpbGVQcm9ncmFtKGdsLCB2ZXJ0ZXhTcmMsIGZyYWdtZW50U3JjKTtcblxuXHQvLyBuZXh0IGV4dHJhY3QgdGhlIGF0dHJpYnV0ZXNcblx0dGhpcy5hdHRyaWJ1dGVzID0gZXh0cmFjdEF0dHJpYnV0ZXMoZ2wsIHRoaXMucHJvZ3JhbSk7IFxuXG4gICAgdmFyIHVuaWZvcm1EYXRhID0gZXh0cmFjdFVuaWZvcm1zKGdsLCB0aGlzLnByb2dyYW0pO1xuXG4gICAgdGhpcy51bmlmb3JtcyA9IGdlbmVyYXRlVW5pZm9ybUFjY2Vzc09iamVjdCggZ2wsIHVuaWZvcm1EYXRhICk7XG59XG5cblNoYWRlci5wcm90b3R5cGUuYmluZCA9IGZ1bmN0aW9uKClcbntcblx0dGhpcy5nbC51c2VQcm9ncmFtKHRoaXMucHJvZ3JhbSk7XG59XG5cblNoYWRlci5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uKClcbntcblx0dmFyIGdsID0gdGhpcy5nbDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBTaGFkZXI7XG5cbiIsIlxuLyoqXG4gKiBIZWxwZXIgY2xhc3MgdG8gY3JlYXRlIGEgd2ViR0wgVGV4dHVyZVxuICpcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqIEBwYXJhbSBnbCB7V2ViR0xSZW5kZXJpbmdDb250ZXh0fSBhIFdlYkdMIGNvbnRleHRcbiAqIEBwYXJhbSB3aWR0aCB7bnVtYmVyfSB0aGUgd2lkdGggb2YgdGhlIHRleHR1cmUgXG4gKiBAcGFyYW0gaGVpZ2h0IHtudW1iZXJ9IHRoZSBoZWlnaHQgb2YgdGhlIHRleHR1cmUgXG4gKiBAcGFyYW0gZm9ybWF0IHtudW1iZXJ9IHRoZSBwaXhlbCBmb3JtYXQgb2YgdGhlIHRleHR1cmUuIGRlZmF1bHRzIHRvIGdsLlJHQkFcbiAqIEBwYXJhbSB0eXBlIHtudW1iZXJ9IHRoZSBnbCB0eXBlIG9mIHRoZSB0ZXh0dXJlLiBkZWZhdWx0cyB0byBnbC5VTlNJR05FRF9CWVRFXG4gKi9cbnZhciBUZXh0dXJlID0gZnVuY3Rpb24oZ2wsIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgdHlwZSlcbntcblx0dGhpcy5nbCA9IGdsO1xuXG5cdHRoaXMudGV4dHVyZSA9IGdsLmNyZWF0ZVRleHR1cmUoKTtcblxuXHQvLyBzb21lIHNldHRpbmdzLi5cblx0dGhpcy5taXBtYXAgPSBmYWxzZTtcblxuXHR0aGlzLnByZW11bHRpcGx5QWxwaGEgPSBmYWxzZTtcblxuXHR0aGlzLndpZHRoID0gd2lkdGggfHwgMDtcblx0dGhpcy5oZWlnaHQgPSBoZWlnaHQgfHwgMDtcblxuXHR0aGlzLmZvcm1hdCA9IGZvcm1hdCB8fCBnbC5SR0JBO1xuXHR0aGlzLnR5cGUgPSB0eXBlIHx8IGdsLlVOU0lHTkVEX0JZVEU7XG5cblxufVxuXG4vKipcbiAqIEBwYXJhbSB7UElYSS5nbENvcmUuVGV4dHVyZX0gW3Zhcm5hbWVdIFtkZXNjcmlwdGlvbl1cbiAqL1xuVGV4dHVyZS5wcm90b3R5cGUudXBsb2FkID0gZnVuY3Rpb24oc291cmNlKVxue1xuXHR0aGlzLmJpbmQoKTtcblxuXHR2YXIgZ2wgPSB0aGlzLmdsO1xuXG5cdHRoaXMud2lkdGggPSBzb3VyY2Uud2lkdGg7XG5cdHRoaXMuaGVpZ2h0ID0gc291cmNlLmhlaWdodDtcblxuXHRnbC5waXhlbFN0b3JlaShnbC5VTlBBQ0tfUFJFTVVMVElQTFlfQUxQSEFfV0VCR0wsIHRoaXMucHJlbXVsdGlwbHlBbHBoYSk7XG4gICAgZ2wudGV4SW1hZ2UyRChnbC5URVhUVVJFXzJELCAwLCB0aGlzLmZvcm1hdCwgdGhpcy5mb3JtYXQsIHRoaXMudHlwZSwgc291cmNlKTtcbn1cblxudmFyIEZMT0FUSU5HX1BPSU5UX0FWQUlMQUJMRSA9IGZhbHNlO1xuXG5UZXh0dXJlLnByb3RvdHlwZS51cGxvYWREYXRhID0gZnVuY3Rpb24oZGF0YSwgd2lkdGgsIGhlaWdodClcbntcblx0dGhpcy5iaW5kKCk7XG5cdFxuXHR0aGlzLndpZHRoID0gd2lkdGggfHwgdGhpcy53aWR0aDtcblx0dGhpcy5oZWlnaHQgPSBoZWlnaHQgfHwgdGhpcy5oZWlnaHQ7XG5cblx0aWYoZGF0YSBpbnN0YW5jZW9mIEZsb2F0MzJBcnJheSlcblx0e1xuXHRcdGlmKCFGTE9BVElOR19QT0lOVF9BVkFJTEFCTEUpXG5cdFx0e1xuXHRcdFx0dmFyIGV4dCA9IGdsLmdldEV4dGVuc2lvbihcIk9FU190ZXh0dXJlX2Zsb2F0XCIpO1xuXHRcdFx0XG5cdFx0XHRpZihleHQpXG5cdFx0XHR7XG5cdFx0XHRcdEZMT0FUSU5HX1BPSU5UX0FWQUlMQUJMRSA9IHRydWU7XG5cdFx0XHR9XG5cdFx0XHRlbHNlXG5cdFx0XHR7XG5cdFx0XHRcdHRocm93IG5ldyBFcnJvcignZmxvYXRpbmcgcG9pbnQgdGV4dHVyZXMgbm90IGF2YWlsYWJsZScpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHRoaXMudHlwZSA9IGdsLkZMT0FUO1xuXHR9XG5cdGVsc2Vcblx0e1xuXHRcdC8vIFRPRE8gc3VwcG9ydCBmb3Igb3RoZXIgdHlwZXNcblx0XHR0aGlzLnR5cGUgPSBnbC5VTlNJR05FRF9CWVRFO1xuXHR9XG5cblx0Ly8gd2hhdCB0eXBlIG9mIGRhdGE/XG5cdGdsLnBpeGVsU3RvcmVpKGdsLlVOUEFDS19QUkVNVUxUSVBMWV9BTFBIQV9XRUJHTCwgdGhpcy5wcmVtdWx0aXBseUFscGhhKTtcblx0Z2wudGV4SW1hZ2UyRChnbC5URVhUVVJFXzJELCAwLCB0aGlzLmZvcm1hdCwgIHRoaXMud2lkdGgsIHRoaXMuaGVpZ2h0LCAwLCB0aGlzLmZvcm1hdCwgdGhpcy50eXBlLCBkYXRhIHx8IG51bGwpO1xuXG59XG5cblRleHR1cmUucHJvdG90eXBlLmJpbmQgPSBmdW5jdGlvbihsb2NhdGlvbilcbntcblx0dmFyIGdsID0gdGhpcy5nbDtcblxuXHRpZihsb2NhdGlvbiAhPT0gdW5kZWZpbmVkKVxuXHR7XG5cdFx0Z2wuYWN0aXZlVGV4dHVyZShnbC5URVhUVVJFMCArIGxvY2F0aW9uKTtcblx0fVxuXG5cdGdsLmJpbmRUZXh0dXJlKGdsLlRFWFRVUkVfMkQsIHRoaXMudGV4dHVyZSk7XG59XG5cblRleHR1cmUucHJvdG90eXBlLnVuYmluZCA9IGZ1bmN0aW9uKClcbntcblx0dmFyIGdsID0gdGhpcy5nbDtcblx0Z2wuYmluZFRleHR1cmUoZ2wuVEVYVFVSRV8yRCwgbnVsbCk7XG59XG5cblRleHR1cmUucHJvdG90eXBlLm1pbkZpbHRlciA9IGZ1bmN0aW9uKCBsaW5lYXIgKVxue1xuXHR2YXIgZ2wgPSB0aGlzLmdsO1xuXG5cdHRoaXMuYmluZCgpO1xuXG5cdGlmKHRoaXMubWlwbWFwKVxuXHR7XG5cdFx0Z2wudGV4UGFyYW1ldGVyaShnbC5URVhUVVJFXzJELCBnbC5URVhUVVJFX01JTl9GSUxURVIsIGxpbmVhciA/IGdsLkxJTkVBUl9NSVBNQVBfTElORUFSIDogZ2wuTkVBUkVTVF9NSVBNQVBfTkVBUkVTVCk7XG5cdH1cblx0ZWxzZVxuXHR7XG5cdFx0Z2wudGV4UGFyYW1ldGVyaShnbC5URVhUVVJFXzJELCBnbC5URVhUVVJFX01JTl9GSUxURVIsIGxpbmVhciA/IGdsLkxJTkVBUiA6IGdsLk5FQVJFU1QpO1xuXHR9XHRcbn1cblxuVGV4dHVyZS5wcm90b3R5cGUubWFnRmlsdGVyID0gZnVuY3Rpb24oIGxpbmVhciApXG57XG5cdHZhciBnbCA9IHRoaXMuZ2w7XG5cblx0dGhpcy5iaW5kKCk7XG5cblx0Z2wudGV4UGFyYW1ldGVyaShnbC5URVhUVVJFXzJELCBnbC5URVhUVVJFX01BR19GSUxURVIsIGxpbmVhciA/IGdsLkxJTkVBUiA6IGdsLk5FQVJFU1QpO1xufVxuXG5UZXh0dXJlLnByb3RvdHlwZS5lbmFibGVNaXBtYXAgPSBmdW5jdGlvbigpXG57XG5cdHRoaXMuYmluZCgpO1xuXG5cdHRoaXMubWlwbWFwID0gdHJ1ZTtcblx0Z2wuZ2VuZXJhdGVNaXBtYXAoZ2wuVEVYVFVSRV8yRCk7XG59XG5cblRleHR1cmUucHJvdG90eXBlLmVuYWJsZUxpbmVhclNjYWxpbmcgPSBmdW5jdGlvbigpXG57XG5cdHRoaXMubWluRmlsdGVyKHRydWUpO1xuXHR0aGlzLm1hZ0ZpbHRlcih0cnVlKTtcbn1cblxuVGV4dHVyZS5wcm90b3R5cGUuZW5hYmxlTmVhcmVzdFNjYWxpbmcgPSBmdW5jdGlvbigpXG57XG5cdHRoaXMubWluRmlsdGVyKGZhbHNlKTtcblx0dGhpcy5tYWdGaWx0ZXIoZmFsc2UpO1xufVxuXG5UZXh0dXJlLnByb3RvdHlwZS5lbmFibGVXcmFwQ2xhbXAgPSBmdW5jdGlvbigpXG57XG5cdHZhciBnbCA9IHRoaXMuZ2w7XG5cblx0dGhpcy5iaW5kKCk7XG5cblx0Z2wudGV4UGFyYW1ldGVyaShnbC5URVhUVVJFXzJELCBnbC5URVhUVVJFX1dSQVBfUywgZ2wuQ0xBTVBfVE9fRURHRSk7XG4gICAgZ2wudGV4UGFyYW1ldGVyaShnbC5URVhUVVJFXzJELCBnbC5URVhUVVJFX1dSQVBfVCwgZ2wuQ0xBTVBfVE9fRURHRSk7XG59XG5cblRleHR1cmUucHJvdG90eXBlLmVuYWJsZVdyYXBSZXBlYXQgPSBmdW5jdGlvbigpXG57XG5cdHZhciBnbCA9IHRoaXMuZ2w7XG5cblx0dGhpcy5iaW5kKCk7XG5cdFxuXHRnbC50ZXhQYXJhbWV0ZXJpKGdsLlRFWFRVUkVfMkQsIGdsLlRFWFRVUkVfV1JBUF9TLCBnbC5SRVBFQVQpO1xuICAgIGdsLnRleFBhcmFtZXRlcmkoZ2wuVEVYVFVSRV8yRCwgZ2wuVEVYVFVSRV9XUkFQX1QsIGdsLlJFUEVBVCk7XG59XG5cblRleHR1cmUucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbigpXG57XG5cdHZhciBnbCA9IHRoaXMuZ2w7XG5cdC8vVE9ET1xuXHRnbC5kZWxldGVUZXh0dXJlKHRoaXMudGV4dHVyZSk7XG59XG5cbi8vVGV4dHVyZS5cblRleHR1cmUuZnJvbVNvdXJjZSA9IGZ1bmN0aW9uKGdsLCBzb3VyY2UsIHByZW11bHRpcGx5QWxwaGEpXG57XG5cdHZhciB0ZXh0dXJlID0gbmV3IFRleHR1cmUoZ2wpO1xuXHR0ZXh0dXJlLnByZW11bHRpcGx5QWxwaGEgPSBwcmVtdWx0aXBseUFscGhhIHx8IGZhbHNlO1xuXHR0ZXh0dXJlLnVwbG9hZChzb3VyY2UpO1xuXG5cdHJldHVybiB0ZXh0dXJlO1xufVxuXG5UZXh0dXJlLmZyb21EYXRhID0gZnVuY3Rpb24oZ2wsIGRhdGEsIHdpZHRoLCBoZWlnaHQpXG57XG5cdC8vY29uc29sZS5sb2coZGF0YSwgd2lkdGgsIGhlaWdodCk7XG5cdHZhciB0ZXh0dXJlID0gbmV3IFRleHR1cmUoZ2wpO1xuXHR0ZXh0dXJlLnVwbG9hZERhdGEoZGF0YSwgd2lkdGgsIGhlaWdodCk7XG5cblx0cmV0dXJuIHRleHR1cmU7XG59XG5cblxubW9kdWxlLmV4cG9ydHMgPSBUZXh0dXJlO1xuXG4iLCJcbi8qKlxuICogR2VuZXJpYyBNYXNrIFN0YWNrIGRhdGEgc3RydWN0dXJlXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKi9cblxuLy8gc3RhdGUgb2JqZWN0Ly9cblxuXG5mdW5jdGlvbiBWZXJ0ZXhBcnJheU9iamVjdChnbClcbntcblx0XG5cdHRoaXMubmF0aXZlVmFvRXh0ZW5zaW9uID0gKFxuICAgICAgZ2wuZ2V0RXh0ZW5zaW9uKCdPRVNfdmVydGV4X2FycmF5X29iamVjdCcpIHx8XG4gICAgICBnbC5nZXRFeHRlbnNpb24oJ01PWl9PRVNfdmVydGV4X2FycmF5X29iamVjdCcpIHx8XG4gICAgICBnbC5nZXRFeHRlbnNpb24oJ1dFQktJVF9PRVNfdmVydGV4X2FycmF5X29iamVjdCcpXG4gICAgKTtcblxuLy9cdHRoaXMubmF0aXZlVmFvRXh0ZW5zaW9uID0gbnVsbDtcblxuXHRpZih0aGlzLm5hdGl2ZVZhb0V4dGVuc2lvbilcblx0e1xuXHRcdHRoaXMubmF0aXZlVmFvID0gdGhpcy5uYXRpdmVWYW9FeHRlbnNpb24uY3JlYXRlVmVydGV4QXJyYXlPRVMoKTsgIFxuXHR9XG5cblx0dGhpcy5nbCA9IGdsO1xuXG5cdHRoaXMuYXR0cmlidXRlcyA9IFtdO1xuXG5cdHRoaXMuaW5kZXhCdWZmZXIgPSBudWxsO1xuXG5cdHRoaXMuZGlydHkgPSBmYWxzZTtcblxuXHRcbn1cblxuVmVydGV4QXJyYXlPYmplY3QucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gVmVydGV4QXJyYXlPYmplY3Q7XG5tb2R1bGUuZXhwb3J0cyA9IFZlcnRleEFycmF5T2JqZWN0O1xuXG5WZXJ0ZXhBcnJheU9iamVjdC5wcm90b3R5cGUuYmluZCA9IGZ1bmN0aW9uKClcbntcblx0aWYodGhpcy5uYXRpdmVWYW8pXG5cdHtcblx0XHR0aGlzLm5hdGl2ZVZhb0V4dGVuc2lvbi5iaW5kVmVydGV4QXJyYXlPRVModGhpcy5uYXRpdmVWYW8pOyAgXG5cblx0XHRpZih0aGlzLmRpcnR5KVxuXHRcdHtcblx0XHRcdHRoaXMuZGlydHkgPSBmYWxzZTtcblx0XHRcdHRoaXMuYWN0aXZhdGUoKTtcblx0XHR9XG5cdH1cblx0ZWxzZVxuXHR7XG5cdFx0dGhpcy5hY3RpdmF0ZSgpO1xuXHR9XG59XG5cblZlcnRleEFycmF5T2JqZWN0LnByb3RvdHlwZS51bmJpbmQgPSBmdW5jdGlvbigpXG57XG5cdGlmKHRoaXMubmF0aXZlVmFvKVxuXHR7XG5cdFx0dGhpcy5uYXRpdmVWYW9FeHRlbnNpb24uYmluZFZlcnRleEFycmF5T0VTKG51bGwpO1xuXHR9XG59XG5cblZlcnRleEFycmF5T2JqZWN0LnByb3RvdHlwZS5hY3RpdmF0ZSA9IGZ1bmN0aW9uKClcbntcblx0dmFyIGdsID0gdGhpcy5nbDtcblxuXHRmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuYXR0cmlidXRlcy5sZW5ndGg7IGkrKykgXG5cdHtcblx0XHR2YXIgYXR0cmliID0gdGhpcy5hdHRyaWJ1dGVzW2ldO1xuXHRcdGF0dHJpYi5idWZmZXIuYmluZCgpO1x0XG5cblx0XHRhdHRyaWIuYXR0cmlidXRlLnBvaW50ZXIoYXR0cmliLnR5cGUsIGF0dHJpYi5ub3JtYWxpemVkLCBhdHRyaWIuc3RyaWRlLCBhdHRyaWIuc3RhcnQpOyBcblx0XHRcblx0XHRnbC5lbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShhdHRyaWIuYXR0cmlidXRlLmxvY2F0aW9uKTtcblx0fTtcblxuXHR0aGlzLmluZGV4QnVmZmVyLmJpbmQoKTtcbn1cblxuVmVydGV4QXJyYXlPYmplY3QucHJvdG90eXBlLmFkZEF0dHJpYnV0ZSA9IGZ1bmN0aW9uKGJ1ZmZlciwgYXR0cmlidXRlLCB0eXBlLCBub3JtYWxpemVkLCBzdHJpZGUsIHN0YXJ0KVxue1xuICAgIHRoaXMuYXR0cmlidXRlcy5wdXNoKHtcbiAgICBcdGJ1ZmZlcjogXHRidWZmZXIsXG4gICAgXHRhdHRyaWJ1dGU6IFx0YXR0cmlidXRlLFxuXG4gICAgXHRsb2NhdGlvbjogXHRhdHRyaWJ1dGUubG9jYXRpb24sXG5cdCBcdHR5cGU6IFx0XHR0eXBlIHx8IHRoaXMuZ2wuRkxPQVQsXG5cdCBcdG5vcm1hbGl6ZWQ6IG5vcm1hbGl6ZWQgfHwgZmFsc2UsXG5cdCBcdHN0cmlkZTogXHRzdHJpZGUgfHwgMCxcblx0IFx0c3RhcnQ6IFx0XHRzdGFydCB8fCAwXG5cdH0pXG5cblx0dGhpcy5kaXJ0eSA9IHRydWU7XG59XG5cblxuVmVydGV4QXJyYXlPYmplY3QucHJvdG90eXBlLmFkZEluZGV4ID0gZnVuY3Rpb24oYnVmZmVyLCBvcHRpb25zKVxue1xuICAgIHRoaXMuaW5kZXhCdWZmZXIgPSBidWZmZXI7XG5cbiAgICB0aGlzLmRpcnR5ID0gdHJ1ZTtcbn1cblxuVmVydGV4QXJyYXlPYmplY3QucHJvdG90eXBlLmRyYXcgPSBmdW5jdGlvbih0eXBlLCBzaXplLCBzdGFydClcbntcblx0dmFyIGdsID0gdGhpcy5nbDtcblx0Z2wuZHJhd0VsZW1lbnRzKHR5cGUsIHNpemUsIGdsLlVOU0lHTkVEX1NIT1JULCBzdGFydCk7XG59XG5cbiIsIlxuLyoqXG4gKiBIZWxwZXIgY2xhc3MgdG8gY3JlYXRlIGEgd2ViR0wgQ29udGV4dFxuICpcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqIEBwYXJhbSBnbCB7V2ViR0xSZW5kZXJpbmdDb250ZXh0fVxuICovXG5cbnZhciBDT05URVhUX1VJRCA9IDA7XG5cbnZhciBjcmVhdGVDb250ZXh0ID0gZnVuY3Rpb24oY2FudmFzLCBvcHRpb25zKVxue1xuICAgIGdsID0gY2FudmFzLmdldENvbnRleHQoJ3dlYmdsJywgb3B0aW9ucykgfHwgXG4gICAgXHQgY2FudmFzLmdldENvbnRleHQoJ2V4cGVyaW1lbnRhbC13ZWJnbCcsIG9wdGlvbnMpO1xuXG4gICAgaWYgKCFnbClcbiAgICB7XG4gICAgICAgIC8vIGZhaWwsIG5vdCBhYmxlIHRvIGdldCBhIGNvbnRleHRcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdUaGlzIGJyb3dzZXIgZG9lcyBub3Qgc3VwcG9ydCB3ZWJHTC4gVHJ5IHVzaW5nIHRoZSBjYW52YXMgcmVuZGVyZXInKTtcbiAgICB9XG5cbiAgICAvLyBtaWdodCB3YW50IHRvIHBoYXNlIHRoaXMgb3V0P1xuICAgIGdsLmlkID0gQ09OVEVYVF9VSUQrKztcblxuICAgIHJldHVybiBnbDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBjcmVhdGVDb250ZXh0O1xuXG4iLCIvKipcbiAqIEdlbmVyaWMgTWFzayBTdGFjayBkYXRhIHN0cnVjdHVyZVxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICovXG5cbnZhciBHTF9NQVAgPSB7fTtcblxuXG52YXIgc2V0VmVydGV4QXR0cmliQXJyYXlzID0gZnVuY3Rpb24gKGdsLCBhdHRyaWJzKVxue1x0XG4gICAvLyBjb25zb2xlLmxvZyhnbC5pZClcbiAgICB2YXIgZGF0YSA9IEdMX01BUFtnbC5pZF07XG5cbiAgICBpZighZGF0YSlcbiAgICB7XG5cdCAgIHZhciBtYXhBdHRyaWJzID0gZ2wuZ2V0UGFyYW1ldGVyKGdsLk1BWF9WRVJURVhfQVRUUklCUyk7XG5cdFx0ZGF0YSA9IEdMX01BUFtnbC5pZF0gPSB7dGVtcEF0dHJpYlN0YXRlOm5ldyBBcnJheShtYXhBdHRyaWJzKVxuXHRcdFx0XHQgXHQgXHRcdCAgICxhdHRyaWJTdGF0ZTpuZXcgQXJyYXkobWF4QXR0cmlicyl9O1xuXHR9XG5cdFxuICAgIHZhciBpLFxuICAgIFx0dGVtcEF0dHJpYlN0YXRlID0gZGF0YS50ZW1wQXR0cmliU3RhdGUsXG4gICAgXHRhdHRyaWJTdGF0ZSA9IGRhdGEuYXR0cmliU3RhdGU7XG5cbiAgICBmb3IgKGkgPSAwOyBpIDwgdGVtcEF0dHJpYlN0YXRlLmxlbmd0aDsgaSsrKVxuICAgIHtcbiAgICAgICAgdGVtcEF0dHJpYlN0YXRlW2ldID0gZmFsc2U7XG4gICAgfVxuXG4gICAgLy8gc2V0IHRoZSBuZXcgYXR0cmlic1xuICAgIGZvciAoaSBpbiBhdHRyaWJzKVxuICAgIHtcbiAgICAgICAgdGVtcEF0dHJpYlN0YXRlW2F0dHJpYnNbaV0ubG9jYXRpb25dID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBmb3IgKGkgPSAxOyBpIDwgYXR0cmliU3RhdGUubGVuZ3RoOyBpKyspXG4gICAge1xuICAgICAgICBpZiAoYXR0cmliU3RhdGVbaV0gIT09IHRlbXBBdHRyaWJTdGF0ZVtpXSlcbiAgICAgICAge1xuICAgICAgICAgICAgYXR0cmliU3RhdGVbaV0gPSB0ZW1wQXR0cmliU3RhdGVbaV07XG5cbiAgICAgICAgICAgIGlmIChkYXRhLmF0dHJpYlN0YXRlW2ldKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGdsLmVuYWJsZVZlcnRleEF0dHJpYkFycmF5KGkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGdsLmRpc2FibGVWZXJ0ZXhBdHRyaWJBcnJheShpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn07XG5cbm1vZHVsZS5leHBvcnRzID0gc2V0VmVydGV4QXR0cmliQXJyYXlzOyIsIlxuXG5cblxuY29tcGlsZVByb2dyYW0gPSBmdW5jdGlvbihnbCwgdmVydGV4U3JjLCBmcmFnbWVudFNyYylcbntcbiAgICB2YXIgZ2xWZXJ0U2hhZGVyID0gY29tcGlsZVNoYWRlcihnbCwgZ2wuVkVSVEVYX1NIQURFUiwgdmVydGV4U3JjKTtcbiAgICB2YXIgZ2xGcmFnU2hhZGVyID0gY29tcGlsZVNoYWRlcihnbCwgZ2wuRlJBR01FTlRfU0hBREVSLCBmcmFnbWVudFNyYyk7XG5cbiAgICB2YXIgcHJvZ3JhbSA9IGdsLmNyZWF0ZVByb2dyYW0oKTtcblxuICAgIGdsLmF0dGFjaFNoYWRlcihwcm9ncmFtLCBnbFZlcnRTaGFkZXIpO1xuICAgIGdsLmF0dGFjaFNoYWRlcihwcm9ncmFtLCBnbEZyYWdTaGFkZXIpO1xuICAgIGdsLmxpbmtQcm9ncmFtKHByb2dyYW0pO1xuXG4gICAgLy8gaWYgbGlua2luZyBmYWlscywgdGhlbiBsb2cgYW5kIGNsZWFudXBcbiAgICBpZiAoIWdsLmdldFByb2dyYW1QYXJhbWV0ZXIocHJvZ3JhbSwgZ2wuTElOS19TVEFUVVMpKVxuICAgIHtcbiAgICAgICAgY29uc29sZS5lcnJvcignUGl4aS5qcyBFcnJvcjogQ291bGQgbm90IGluaXRpYWxpemUgc2hhZGVyLicpO1xuICAgICAgICBjb25zb2xlLmVycm9yKCdnbC5WQUxJREFURV9TVEFUVVMnLCBnbC5nZXRQcm9ncmFtUGFyYW1ldGVyKHByb2dyYW0sIGdsLlZBTElEQVRFX1NUQVRVUykpO1xuICAgICAgICBjb25zb2xlLmVycm9yKCdnbC5nZXRFcnJvcigpJywgZ2wuZ2V0RXJyb3IoKSk7XG5cbiAgICAgICAgLy8gaWYgdGhlcmUgaXMgYSBwcm9ncmFtIGluZm8gbG9nLCBsb2cgaXRcbiAgICAgICAgaWYgKGdsLmdldFByb2dyYW1JbmZvTG9nKHByb2dyYW0pICE9PSAnJylcbiAgICAgICAge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKCdQaXhpLmpzIFdhcm5pbmc6IGdsLmdldFByb2dyYW1JbmZvTG9nKCknLCBnbC5nZXRQcm9ncmFtSW5mb0xvZyhwcm9ncmFtKSk7XG4gICAgICAgIH1cblxuICAgICAgICBnbC5kZWxldGVQcm9ncmFtKHByb2dyYW0pO1xuICAgICAgICBwcm9ncmFtID0gbnVsbDtcbiAgICB9XG5cbiAgICAvLyBjbGVhbiB1cCBzb21lIHNoYWRlcnNcbiAgICBnbC5kZWxldGVTaGFkZXIoZ2xWZXJ0U2hhZGVyKTtcbiAgICBnbC5kZWxldGVTaGFkZXIoZ2xGcmFnU2hhZGVyKTtcblxuICAgIHJldHVybiBwcm9ncmFtO1xufVxuXG52YXIgY29tcGlsZVNoYWRlciA9IGZ1bmN0aW9uIChnbCwgdHlwZSwgc3JjKVxue1xuICAgIHZhciBzaGFkZXIgPSBnbC5jcmVhdGVTaGFkZXIodHlwZSk7XG5cbiAgICBnbC5zaGFkZXJTb3VyY2Uoc2hhZGVyLCBzcmMpO1xuICAgIGdsLmNvbXBpbGVTaGFkZXIoc2hhZGVyKTtcblxuICAgIGlmICghZ2wuZ2V0U2hhZGVyUGFyYW1ldGVyKHNoYWRlciwgZ2wuQ09NUElMRV9TVEFUVVMpKVxuICAgIHtcbiAgICAgICAgY29uc29sZS5sb2coZ2wuZ2V0U2hhZGVySW5mb0xvZyhzaGFkZXIpKTtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgcmV0dXJuIHNoYWRlcjtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gY29tcGlsZVByb2dyYW07XG5cbiIsIlxuXG52YXIgZGVmYXVsdFZhbHVlID0gZnVuY3Rpb24odHlwZSwgc2l6ZSkgXG57XG4gICAgc3dpdGNoICh0eXBlKVxuICAgIHtcbiAgICAgICAgY2FzZSAnZmxvYXQnOlxuICAgICAgICAgICAgcmV0dXJuIDA7XG5cbiAgICAgICAgY2FzZSAndmVjMic6IFxuICAgICAgICAgICAgcmV0dXJuIG5ldyBGbG9hdDMyQXJyYXkoMiAqIHNpemUpO1xuXG4gICAgICAgIGNhc2UgJ3ZlYzMnOlxuICAgICAgICAgICAgcmV0dXJuIG5ldyBGbG9hdDMyQXJyYXkoMyAqIHNpemUpO1xuXG4gICAgICAgIGNhc2UgJ3ZlYzQnOiAgICAgXG4gICAgICAgICAgICByZXR1cm4gbmV3IEZsb2F0MzJBcnJheSg0ICogc2l6ZSk7XG4gICAgICAgICAgICBcbiAgICAgICAgY2FzZSAnaW50JzpcbiAgICAgICAgY2FzZSAnc2FtcGxlcjJEJzpcbiAgICAgICAgICAgIHJldHVybiAwO1xuXG4gICAgICAgIGNhc2UgJ2l2ZWMyJzogICBcbiAgICAgICAgICAgIHJldHVybiBuZXcgSW50MzJBcnJheSgyICogc2l6ZSk7XG5cbiAgICAgICAgY2FzZSAnaXZlYzMnOlxuICAgICAgICAgICAgcmV0dXJuIG5ldyBJbnQzMkFycmF5KDMgKiBzaXplKTtcblxuICAgICAgICBjYXNlICdpdmVjNCc6IFxuICAgICAgICAgICAgcmV0dXJuIG5ldyBJbnQzMkFycmF5KDQgKiBzaXplKTtcblxuICAgICAgICBjYXNlICdib29sJzogICAgIFxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuXG4gICAgICAgIGNhc2UgJ2J2ZWMyJzpcblxuICAgICAgICAgICAgcmV0dXJuIGJvb2xlYW5BcnJheSggMiAqIHNpemUpO1xuXG4gICAgICAgIGNhc2UgJ2J2ZWMzJzpcbiAgICAgICAgICAgIHJldHVybiBib29sZWFuQXJyYXkoMyAqIHNpemUpO1xuXG4gICAgICAgIGNhc2UgJ2J2ZWM0JzpcbiAgICAgICAgICAgIHJldHVybiBib29sZWFuQXJyYXkoNCAqIHNpemUpO1xuXG4gICAgICAgIGNhc2UgJ21hdDInOlxuICAgICAgICAgICAgcmV0dXJuIG5ldyBGbG9hdDMyQXJyYXkoWzEsIDBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwwLCAxXSk7XG5cbiAgICAgICAgY2FzZSAnbWF0Myc6IFxuICAgICAgICAgICAgcmV0dXJuIG5ldyBGbG9hdDMyQXJyYXkoWzEsIDAsIDBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwwLCAxLCAwXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsMCwgMCwgMV0pO1xuXG4gICAgICAgIGNhc2UgJ21hdDQnOlxuICAgICAgICAgICAgcmV0dXJuIG5ldyBGbG9hdDMyQXJyYXkoWzEsIDAsIDAsIDBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwwLCAxLCAwLCAwXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsMCwgMCwgMSwgMFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLDAsIDAsIDAsIDFdKTtcbiAgICB9XG59XG5cbnZhciBib29sZWFuQXJyYXkgPSBmdW5jdGlvbihzaXplKVxue1xuICAgIHZhciBhcnJheSA9IG5ldyBBcnJheShzaXplKTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXJyYXkubGVuZ3RoOyBpKyspIFxuICAgIHtcbiAgICAgICAgYXJyYXlbaV0gPSBmYWxzZTtcbiAgICB9O1xuXG4gICAgcmV0dXJuIGFycmF5O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGRlZmF1bHRWYWx1ZTtcbiIsIlxudmFyIG1hcFR5cGUgPSByZXF1aXJlKCcuL21hcFR5cGUnKTtcbnZhciBtYXBTaXplID0gcmVxdWlyZSgnLi9tYXBTaXplJyk7XG5cbnZhciBleHRyYWN0QXR0cmlidXRlcyA9IGZ1bmN0aW9uKGdsLCBwcm9ncmFtKVxue1xuICAgIHZhciBhdHRyaWJ1dGVzID0ge307XG5cbiAgICB2YXIgdG90YWxBdHRyaWJ1dGVzID0gZ2wuZ2V0UHJvZ3JhbVBhcmFtZXRlcihwcm9ncmFtLCBnbC5BQ1RJVkVfQVRUUklCVVRFUylcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdG90YWxBdHRyaWJ1dGVzOyBpKyspIFxuICAgIHtcbiAgICAgICAgdmFyIGF0dHJpYkRhdGEgPSBnbC5nZXRBY3RpdmVBdHRyaWIocHJvZ3JhbSwgaSk7XG4gICAgICAgIHZhciB0eXBlID0gbWFwVHlwZShnbCwgYXR0cmliRGF0YS50eXBlKTtcblxuICAgICAgICBhdHRyaWJ1dGVzW2F0dHJpYkRhdGEubmFtZV0gPSB7XG4gICAgICAgICAgICB0eXBlOnR5cGUsXG4gICAgICAgICAgICBzaXplOm1hcFNpemUodHlwZSksXG4gICAgICAgICAgICBsb2NhdGlvbjpnbC5nZXRBdHRyaWJMb2NhdGlvbihwcm9ncmFtLCBhdHRyaWJEYXRhLm5hbWUpLFxuICAgICAgICAgICAgLy9UT0RPIC0gbWFrZSBhbiBhdHRyaWJ1dGUgb2JqZWN0XG4gICAgICAgICAgICBwb2ludGVyOmZ1bmN0aW9uKHR5cGUsIG5vcm1hbGl6ZWQsIHN0cmlkZSwgc3RhcnQpe1xuXG4gICAgICAgICAgICAgLy8gICBjb25zb2xlLmxvZyh0aGlzLmxvY2F0aW9uKVxuICAgICAgICAgICAgICAgIGdsLnZlcnRleEF0dHJpYlBvaW50ZXIodGhpcy5sb2NhdGlvbix0aGlzLnNpemUsIHR5cGUgfHwgZ2wuRkxPQVQsIG5vcm1hbGl6ZWQgfHwgZmFsc2UsIHN0cmlkZSB8fCAwLCBzdGFydCB8fCAwKTsgXG5cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH07XG5cbiAgICByZXR1cm4gYXR0cmlidXRlczsgIFxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGV4dHJhY3RBdHRyaWJ1dGVzO1xuXG4iLCJ2YXIgbWFwVHlwZSA9IHJlcXVpcmUoJy4vbWFwVHlwZScpO1xudmFyIGRlZmF1bHRWYWx1ZSA9IHJlcXVpcmUoJy4vZGVmYXVsdFZhbHVlJyk7XG5cblxudmFyIGV4dHJhY3RVbmlmb3JtcyA9IGZ1bmN0aW9uKGdsLCBwcm9ncmFtKVxue1xuXHR2YXIgdW5pZm9ybXMgPSB7fTtcblx0XG4gICAgdmFyIHRvdGFsVW5pZm9ybXMgPSBnbC5nZXRQcm9ncmFtUGFyYW1ldGVyKHByb2dyYW0sIGdsLkFDVElWRV9VTklGT1JNUylcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdG90YWxVbmlmb3JtczsgaSsrKSBcbiAgICB7XG4gICAgXHR2YXIgdW5pZm9ybURhdGEgPSBnbC5nZXRBY3RpdmVVbmlmb3JtKHByb2dyYW0sIGkpO1xuICAgIFx0dmFyIG5hbWUgPSB1bmlmb3JtRGF0YS5uYW1lLnJlcGxhY2UoL1xcWy4qP1xcXS8sIFwiXCIpO1xuICAgICAgICB2YXIgdHlwZSA9IG1hcFR5cGUoZ2wsIHVuaWZvcm1EYXRhLnR5cGUgKTtcblxuICAgIFx0dW5pZm9ybXNbbmFtZV0gPSB7XG4gICAgXHRcdHR5cGU6dHlwZSxcbiAgICBcdFx0c2l6ZTp1bmlmb3JtRGF0YS5zaXplLFxuICAgIFx0XHRsb2NhdGlvbjpnbC5nZXRVbmlmb3JtTG9jYXRpb24ocHJvZ3JhbSwgbmFtZSksXG4gICAgXHRcdHZhbHVlOmRlZmF1bHRWYWx1ZSh0eXBlLCB1bmlmb3JtRGF0YS5zaXplKVxuICAgIFx0fVxuICAgIH07XG5cdFxuXHRyZXR1cm4gdW5pZm9ybXM7XHRcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBleHRyYWN0VW5pZm9ybXM7XG5cbiIsIlxudmFyIGdlbmVyYXRlVW5pZm9ybUFjY2Vzc09iamVjdCA9IGZ1bmN0aW9uKGdsLCB1bmlmb3JtRGF0YSlcbntcbiAgICAvLyB0aGlzIGlzIHRoZSBvYmplY3Qgd2Ugd2lsbCBiZSBzZW5kaW5nIGJhY2suXG4gICAgLy8gYW4gb2JqZWN0IGhpZXJhY2h5IHdpbGwgYmUgY3JlYXRlZCBmb3Igc3RydWN0c1xuICAgIHZhciB1bmlmb3JtcyA9IHtkYXRhOnt9fTtcblxuICAgIHVuaWZvcm1zLmdsID0gZ2w7XG4gICAgXG4gICAgdmFyIHVuaWZvcm1LZXlzPSBPYmplY3Qua2V5cyh1bmlmb3JtRGF0YSk7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHVuaWZvcm1LZXlzLmxlbmd0aDsgaSsrKSBcbiAgICB7XG4gICAgICAgIHZhciBmdWxsTmFtZSA9IHVuaWZvcm1LZXlzW2ldXG5cbiAgICAgICAgdmFyIG5hbWVUb2tlbnMgPSBmdWxsTmFtZS5zcGxpdCgnLicpO1xuICAgICAgICB2YXIgbmFtZSA9IG5hbWVUb2tlbnNbbmFtZVRva2Vucy5sZW5ndGggLSAxXTtcblxuICAgICAgICB2YXIgdW5pZm9ybUdyb3VwID0gZ2V0VW5pZm9ybUdyb3VwKG5hbWVUb2tlbnMsIHVuaWZvcm1zKTtcblxuICAgICAgICB2YXIgdW5pZm9ybSA9ICB1bmlmb3JtRGF0YVtmdWxsTmFtZV07XG4gICAgICAgIHVuaWZvcm1Hcm91cC5kYXRhW25hbWVdID0gdW5pZm9ybTtcblxuICAgICAgICB1bmlmb3JtR3JvdXAuZ2wgPSBnbDtcblxuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodW5pZm9ybUdyb3VwLCBuYW1lLCB7XG4gICAgICAgICAgICBnZXQ6IGdlbmVyYXRlR2V0dGVyKG5hbWUpLFxuICAgICAgICAgICAgc2V0OiBnZW5lcmF0ZVNldHRlcihuYW1lLCB1bmlmb3JtKVxuICAgICAgICB9KVxuICAgIH07XG5cbiAgICByZXR1cm4gdW5pZm9ybXM7XG59XG5cbnZhciBnZW5lcmF0ZUdldHRlciA9IGZ1bmN0aW9uKG5hbWUpXG57XG5cdHZhciB0ZW1wbGF0ZSA9IGdldHRlclRlbXBsYXRlLnJlcGxhY2UoJyUlJywgbmFtZSk7XG5cdHJldHVybiBuZXcgRnVuY3Rpb24odGVtcGxhdGUpO1xufVxuXG52YXIgZ2VuZXJhdGVTZXR0ZXIgPSBmdW5jdGlvbihuYW1lLCB1bmlmb3JtKVxue1xuICAgIHZhciB0ZW1wbGF0ZSA9IHNldHRlclRlbXBsYXRlLnJlcGxhY2UoLyUlL2csIG5hbWUpO1xuICAgIHZhciBzZXRUZW1wbGF0ZVxuICAgIFxuICAgIGlmKHVuaWZvcm0uc2l6ZSA9PT0gMSlcbiAgICB7XG4gICAgICAgIHNldFRlbXBsYXRlID0gR0xTTF9UT19TSU5HTEVfU0VUVEVSU1t1bmlmb3JtLnR5cGVdO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICBzZXRUZW1wbGF0ZSA9IEdMU0xfVE9fQVJSQVlfU0VUVEVSU1t1bmlmb3JtLnR5cGVdO1xuICAgIH1cblxuICAgIGlmKHNldFRlbXBsYXRlKVxuICAgIHtcbiAgICAgICAgdGVtcGxhdGUgKz0gXCJcXG50aGlzLmdsLlwiICsgc2V0VGVtcGxhdGUgKyBcIjtcIjtcbiAgICB9XG5cbiAgXHRyZXR1cm4gbmV3IEZ1bmN0aW9uKCd2YWx1ZScsIHRlbXBsYXRlKTtcbn1cblxudmFyIGdldFVuaWZvcm1Hcm91cCA9IGZ1bmN0aW9uKG5hbWVUb2tlbnMsIHVuaWZvcm0pXG57XG4gICAgdmFyIGN1ciA9IHVuaWZvcm07XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG5hbWVUb2tlbnMubGVuZ3RoIC0gMTsgaSsrKSBcbiAgICB7XG4gICAgICAgIHZhciBvID0gY3VyW25hbWVUb2tlbnNbaV1dIHx8IHtkYXRhOnt9fTtcbiAgICAgICAgY3VyW25hbWVUb2tlbnNbaV1dID0gbztcbiAgICAgICAgY3VyID0gbztcbiAgICB9O1xuXG4gICAgcmV0dXJuIGN1clxufVxuXG52YXIgZ2V0dGVyVGVtcGxhdGUgPSBbXG4gICAgJ3JldHVybiB0aGlzLmRhdGEuJSUudmFsdWU7Jyxcbl0uam9pbignXFxuJyk7XG5cbnZhciBzZXR0ZXJUZW1wbGF0ZSA9IFtcbiAgICAndGhpcy5kYXRhLiUlLnZhbHVlID0gdmFsdWU7JyxcbiAgICAndmFyIGxvY2F0aW9uID0gdGhpcy5kYXRhLiUlLmxvY2F0aW9uOydcbl0uam9pbignXFxuJyk7XG5cblxudmFyIEdMU0xfVE9fU0lOR0xFX1NFVFRFUlMgPSB7XG5cbiAgICAnZmxvYXQnOiAgICAndW5pZm9ybTFmKGxvY2F0aW9uLCB2YWx1ZSknLFxuXG4gICAgJ3ZlYzInOiAgICAgJ3VuaWZvcm0yZihsb2NhdGlvbiwgdmFsdWVbMF0sIHZhbHVlWzFdKScsXG4gICAgJ3ZlYzMnOiAgICAgJ3VuaWZvcm0zZihsb2NhdGlvbiwgdmFsdWVbMF0sIHZhbHVlWzFdLCB2YWx1ZVsyXSknLFxuICAgICd2ZWM0JzogICAgICd1bmlmb3JtNGYobG9jYXRpb24sIHZhbHVlWzBdLCB2YWx1ZVsxXSwgdmFsdWVbMl0sIHZhbHVlWzNdKScsXG4gICAgXHRcbiAgICAnaW50JzogICAgICAndW5pZm9ybTFpKGxvY2F0aW9uLCB2YWx1ZSknLFxuICAgICdpdmVjMic6ICAgICd1bmlmb3JtMmkobG9jYXRpb24sIHZhbHVlWzBdLCB2YWx1ZVsxXSknLFxuICAgICdpdmVjMyc6ICAgICd1bmlmb3JtM2kobG9jYXRpb24sIHZhbHVlWzBdLCB2YWx1ZVsxXSwgdmFsdWVbMl0pJyxcbiAgICAnaXZlYzQnOiAgICAndW5pZm9ybTRpKGxvY2F0aW9uLCB2YWx1ZVswXSwgdmFsdWVbMV0sIHZhbHVlWzJdLCB2YWx1ZVszXSknLFxuXG4gICAgJ2Jvb2wnOiAgICAgJ3VuaWZvcm0xaShsb2NhdGlvbiwgdmFsdWUpJyxcbiAgICAnYnZlYzInOiAgICAndW5pZm9ybTJpKGxvY2F0aW9uLCB2YWx1ZVswXSwgdmFsdWVbMV0pJyxcbiAgICAnYnZlYzMnOiAgICAndW5pZm9ybTNpKGxvY2F0aW9uLCB2YWx1ZVswXSwgdmFsdWVbMV0sIHZhbHVlWzJdKScsXG4gICAgJ2J2ZWM0JzogICAgJ3VuaWZvcm00aShsb2NhdGlvbiwgdmFsdWVbMF0sIHZhbHVlWzFdLCB2YWx1ZVsyXSwgdmFsdWVbM10pJyxcblxuICAgICdtYXQyJzogICAgICd1bmlmb3JtTWF0cml4MmZ2KGxvY2F0aW9uLCBmYWxzZSwgdmFsdWUpJyxcbiAgICAnbWF0Myc6ICAgICAndW5pZm9ybU1hdHJpeDNmdihsb2NhdGlvbiwgZmFsc2UsIHZhbHVlKScsXG4gICAgJ21hdDQnOiAgICAgJ3VuaWZvcm1NYXRyaXg0ZnYobG9jYXRpb24sIGZhbHNlLCB2YWx1ZSknLFxuXG4gICAgJ3NhbXBsZXIyRCc6J3VuaWZvcm0xaShsb2NhdGlvbiwgdmFsdWUpJ1xufVxuXG52YXIgR0xTTF9UT19BUlJBWV9TRVRURVJTID0ge1xuXG4gICAgJ2Zsb2F0JzogICAgJ3VuaWZvcm0xZnYobG9jYXRpb24sIHZhbHVlKScsXG5cbiAgICAndmVjMic6ICAgICAndW5pZm9ybTJmdihsb2NhdGlvbiwgdmFsdWUpJyxcbiAgICAndmVjMyc6ICAgICAndW5pZm9ybTNmdihsb2NhdGlvbiwgdmFsdWUpJyxcbiAgICAndmVjNCc6ICAgICAndW5pZm9ybTRmdihsb2NhdGlvbiwgdmFsdWUpJyxcbiAgICBcdFxuICAgICdpbnQnOiAgICAgICd1bmlmb3JtMWl2KGxvY2F0aW9uLCB2YWx1ZSknLFxuICAgICdpdmVjMic6ICAgICd1bmlmb3JtMml2KGxvY2F0aW9uLCB2YWx1ZSknLFxuICAgICdpdmVjMyc6ICAgICd1bmlmb3JtM2l2KGxvY2F0aW9uLCB2YWx1ZSknLFxuICAgICdpdmVjNCc6ICAgICd1bmlmb3JtNGl2KGxvY2F0aW9uLCB2YWx1ZSknLFxuXG4gICAgJ2Jvb2wnOiAgICAgJ3VuaWZvcm0xaXYobG9jYXRpb24sIHZhbHVlKScsXG4gICAgJ2J2ZWMyJzogICAgJ3VuaWZvcm0yaXYobG9jYXRpb24sIHZhbHVlKScsXG4gICAgJ2J2ZWMzJzogICAgJ3VuaWZvcm0zaXYobG9jYXRpb24sIHZhbHVlKScsXG4gICAgJ2J2ZWM0JzogICAgJ3VuaWZvcm00aXYobG9jYXRpb24sIHZhbHVlKScsXG4gICBcbiAgICAnc2FtcGxlcjJEJzondW5pZm9ybTFpdihsb2NhdGlvbiwgdmFsdWUpJ1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGdlbmVyYXRlVW5pZm9ybUFjY2Vzc09iamVjdDtcblxuIiwiXG5cbnZhciBtYXBTaXplID0gZnVuY3Rpb24odHlwZSkgXG57IFxuICAgIHJldHVybiBHTFNMX1RPX1NJWkVbdHlwZV07XG59XG5cblxudmFyIEdMU0xfVE9fU0laRSA9IHtcbiAgICAnZmxvYXQnOiAgICAxLFxuICAgICd2ZWMyJzogICAgIDIsXG4gICAgJ3ZlYzMnOiAgICAgMyxcbiAgICAndmVjNCc6ICAgICA0LFxuXG4gICAgJ2ludCc6ICAgICAgMSxcbiAgICAnaXZlYzInOiAgICAyLFxuICAgICdpdmVjMyc6ICAgIDMsXG4gICAgJ2l2ZWM0JzogICAgNCxcblxuICAgICdib29sJzogICAgIDEsXG4gICAgJ2J2ZWMyJzogICAgMixcbiAgICAnYnZlYzMnOiAgICAzLFxuICAgICdidmVjNCc6ICAgIDQsXG5cbiAgICAnbWF0Mic6ICAgICA0LFxuICAgICdtYXQzJzogICAgIDksXG4gICAgJ21hdDQnOiAgICAgMTYsXG5cbiAgICAnc2FtcGxlcjJEJzogIDFcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBtYXBTaXplO1xuIiwiXG5cbnZhciBtYXBTaXplID0gZnVuY3Rpb24oZ2wsIHR5cGUpIFxue1xuICAgIGlmKCFHTF9UQUJMRSkgXG4gICAge1xuICAgICAgICB2YXIgdHlwZU5hbWVzID0gT2JqZWN0LmtleXMoR0xfVE9fR0xTTF9UWVBFUyk7XG5cbiAgICAgICAgR0xfVEFCTEUgPSB7fTtcblxuICAgICAgICBmb3IodmFyIGkgPSAwOyBpIDwgdHlwZU5hbWVzLmxlbmd0aDsgKytpKSBcbiAgICAgICAge1xuICAgICAgICAgICAgdmFyIHRuID0gdHlwZU5hbWVzW2ldO1xuICAgICAgICAgICAgR0xfVEFCTEVbIGdsW3RuXSBdID0gR0xfVE9fR0xTTF9UWVBFU1t0bl07XG4gICAgICAgIH1cbiAgICB9XG5cbiAgcmV0dXJuIEdMX1RBQkxFW3R5cGVdO1xufVxuXG52YXIgR0xfVEFCTEUgPSBudWxsO1xuXG52YXIgR0xfVE9fR0xTTF9UWVBFUyA9IHtcbiAgJ0ZMT0FUJzogICAgICAgJ2Zsb2F0JyxcbiAgJ0ZMT0FUX1ZFQzInOiAgJ3ZlYzInLFxuICAnRkxPQVRfVkVDMyc6ICAndmVjMycsXG4gICdGTE9BVF9WRUM0JzogICd2ZWM0JyxcblxuICAnSU5UJzogICAgICAgICAnaW50JyxcbiAgJ0lOVF9WRUMyJzogICAgJ2l2ZWMyJyxcbiAgJ0lOVF9WRUMzJzogICAgJ2l2ZWMzJyxcbiAgJ0lOVF9WRUM0JzogICAgJ2l2ZWM0JyxcbiAgXG4gICdCT09MJzogICAgICAgICdib29sJyxcbiAgJ0JPT0xfVkVDMic6ICAgJ2J2ZWMyJyxcbiAgJ0JPT0xfVkVDMyc6ICAgJ2J2ZWMzJyxcbiAgJ0JPT0xfVkVDNCc6ICAgJ2J2ZWM0JyxcbiAgXG4gICdGTE9BVF9NQVQyJzogICdtYXQyJyxcbiAgJ0ZMT0FUX01BVDMnOiAgJ21hdDMnLFxuICAnRkxPQVRfTUFUNCc6ICAnbWF0NCcsXG4gIFxuICAnU0FNUExFUl8yRCc6ICAnc2FtcGxlcjJEJyAgXG59XG5cbm1vZHVsZS5leHBvcnRzID0gbWFwU2l6ZTtcbiIsIi8qIVxuICogYXN5bmNcbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS9jYW9sYW4vYXN5bmNcbiAqXG4gKiBDb3B5cmlnaHQgMjAxMC0yMDE0IENhb2xhbiBNY01haG9uXG4gKiBSZWxlYXNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2VcbiAqL1xuKGZ1bmN0aW9uICgpIHtcblxuICAgIHZhciBhc3luYyA9IHt9O1xuICAgIGZ1bmN0aW9uIG5vb3AoKSB7fVxuICAgIGZ1bmN0aW9uIGlkZW50aXR5KHYpIHtcbiAgICAgICAgcmV0dXJuIHY7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHRvQm9vbCh2KSB7XG4gICAgICAgIHJldHVybiAhIXY7XG4gICAgfVxuICAgIGZ1bmN0aW9uIG5vdElkKHYpIHtcbiAgICAgICAgcmV0dXJuICF2O1xuICAgIH1cblxuICAgIC8vIGdsb2JhbCBvbiB0aGUgc2VydmVyLCB3aW5kb3cgaW4gdGhlIGJyb3dzZXJcbiAgICB2YXIgcHJldmlvdXNfYXN5bmM7XG5cbiAgICAvLyBFc3RhYmxpc2ggdGhlIHJvb3Qgb2JqZWN0LCBgd2luZG93YCAoYHNlbGZgKSBpbiB0aGUgYnJvd3NlciwgYGdsb2JhbGBcbiAgICAvLyBvbiB0aGUgc2VydmVyLCBvciBgdGhpc2AgaW4gc29tZSB2aXJ0dWFsIG1hY2hpbmVzLiBXZSB1c2UgYHNlbGZgXG4gICAgLy8gaW5zdGVhZCBvZiBgd2luZG93YCBmb3IgYFdlYldvcmtlcmAgc3VwcG9ydC5cbiAgICB2YXIgcm9vdCA9IHR5cGVvZiBzZWxmID09PSAnb2JqZWN0JyAmJiBzZWxmLnNlbGYgPT09IHNlbGYgJiYgc2VsZiB8fFxuICAgICAgICAgICAgdHlwZW9mIGdsb2JhbCA9PT0gJ29iamVjdCcgJiYgZ2xvYmFsLmdsb2JhbCA9PT0gZ2xvYmFsICYmIGdsb2JhbCB8fFxuICAgICAgICAgICAgdGhpcztcblxuICAgIGlmIChyb290ICE9IG51bGwpIHtcbiAgICAgICAgcHJldmlvdXNfYXN5bmMgPSByb290LmFzeW5jO1xuICAgIH1cblxuICAgIGFzeW5jLm5vQ29uZmxpY3QgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJvb3QuYXN5bmMgPSBwcmV2aW91c19hc3luYztcbiAgICAgICAgcmV0dXJuIGFzeW5jO1xuICAgIH07XG5cbiAgICBmdW5jdGlvbiBvbmx5X29uY2UoZm4pIHtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgaWYgKGZuID09PSBudWxsKSB0aHJvdyBuZXcgRXJyb3IoXCJDYWxsYmFjayB3YXMgYWxyZWFkeSBjYWxsZWQuXCIpO1xuICAgICAgICAgICAgZm4uYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICAgICAgICAgIGZuID0gbnVsbDtcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBfb25jZShmbikge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICBpZiAoZm4gPT09IG51bGwpIHJldHVybjtcbiAgICAgICAgICAgIGZuLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgICAgICAgICBmbiA9IG51bGw7XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgLy8vLyBjcm9zcy1icm93c2VyIGNvbXBhdGlibGl0eSBmdW5jdGlvbnMgLy8vL1xuXG4gICAgdmFyIF90b1N0cmluZyA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7XG5cbiAgICB2YXIgX2lzQXJyYXkgPSBBcnJheS5pc0FycmF5IHx8IGZ1bmN0aW9uIChvYmopIHtcbiAgICAgICAgcmV0dXJuIF90b1N0cmluZy5jYWxsKG9iaikgPT09ICdbb2JqZWN0IEFycmF5XSc7XG4gICAgfTtcblxuICAgIC8vIFBvcnRlZCBmcm9tIHVuZGVyc2NvcmUuanMgaXNPYmplY3RcbiAgICB2YXIgX2lzT2JqZWN0ID0gZnVuY3Rpb24ob2JqKSB7XG4gICAgICAgIHZhciB0eXBlID0gdHlwZW9mIG9iajtcbiAgICAgICAgcmV0dXJuIHR5cGUgPT09ICdmdW5jdGlvbicgfHwgdHlwZSA9PT0gJ29iamVjdCcgJiYgISFvYmo7XG4gICAgfTtcblxuICAgIGZ1bmN0aW9uIF9pc0FycmF5TGlrZShhcnIpIHtcbiAgICAgICAgcmV0dXJuIF9pc0FycmF5KGFycikgfHwgKFxuICAgICAgICAgICAgLy8gaGFzIGEgcG9zaXRpdmUgaW50ZWdlciBsZW5ndGggcHJvcGVydHlcbiAgICAgICAgICAgIHR5cGVvZiBhcnIubGVuZ3RoID09PSBcIm51bWJlclwiICYmXG4gICAgICAgICAgICBhcnIubGVuZ3RoID49IDAgJiZcbiAgICAgICAgICAgIGFyci5sZW5ndGggJSAxID09PSAwXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gX2FycmF5RWFjaChhcnIsIGl0ZXJhdG9yKSB7XG4gICAgICAgIHZhciBpbmRleCA9IC0xLFxuICAgICAgICAgICAgbGVuZ3RoID0gYXJyLmxlbmd0aDtcblxuICAgICAgICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgICAgICAgICAgaXRlcmF0b3IoYXJyW2luZGV4XSwgaW5kZXgsIGFycik7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBfbWFwKGFyciwgaXRlcmF0b3IpIHtcbiAgICAgICAgdmFyIGluZGV4ID0gLTEsXG4gICAgICAgICAgICBsZW5ndGggPSBhcnIubGVuZ3RoLFxuICAgICAgICAgICAgcmVzdWx0ID0gQXJyYXkobGVuZ3RoKTtcblxuICAgICAgICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgICAgICAgICAgcmVzdWx0W2luZGV4XSA9IGl0ZXJhdG9yKGFycltpbmRleF0sIGluZGV4LCBhcnIpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gX3JhbmdlKGNvdW50KSB7XG4gICAgICAgIHJldHVybiBfbWFwKEFycmF5KGNvdW50KSwgZnVuY3Rpb24gKHYsIGkpIHsgcmV0dXJuIGk7IH0pO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIF9yZWR1Y2UoYXJyLCBpdGVyYXRvciwgbWVtbykge1xuICAgICAgICBfYXJyYXlFYWNoKGFyciwgZnVuY3Rpb24gKHgsIGksIGEpIHtcbiAgICAgICAgICAgIG1lbW8gPSBpdGVyYXRvcihtZW1vLCB4LCBpLCBhKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBtZW1vO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIF9mb3JFYWNoT2Yob2JqZWN0LCBpdGVyYXRvcikge1xuICAgICAgICBfYXJyYXlFYWNoKF9rZXlzKG9iamVjdCksIGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgICAgIGl0ZXJhdG9yKG9iamVjdFtrZXldLCBrZXkpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBfaW5kZXhPZihhcnIsIGl0ZW0pIHtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcnIubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGlmIChhcnJbaV0gPT09IGl0ZW0pIHJldHVybiBpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiAtMTtcbiAgICB9XG5cbiAgICB2YXIgX2tleXMgPSBPYmplY3Qua2V5cyB8fCBmdW5jdGlvbiAob2JqKSB7XG4gICAgICAgIHZhciBrZXlzID0gW107XG4gICAgICAgIGZvciAodmFyIGsgaW4gb2JqKSB7XG4gICAgICAgICAgICBpZiAob2JqLmhhc093blByb3BlcnR5KGspKSB7XG4gICAgICAgICAgICAgICAga2V5cy5wdXNoKGspO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBrZXlzO1xuICAgIH07XG5cbiAgICBmdW5jdGlvbiBfa2V5SXRlcmF0b3IoY29sbCkge1xuICAgICAgICB2YXIgaSA9IC0xO1xuICAgICAgICB2YXIgbGVuO1xuICAgICAgICB2YXIga2V5cztcbiAgICAgICAgaWYgKF9pc0FycmF5TGlrZShjb2xsKSkge1xuICAgICAgICAgICAgbGVuID0gY29sbC5sZW5ndGg7XG4gICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24gbmV4dCgpIHtcbiAgICAgICAgICAgICAgICBpKys7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGkgPCBsZW4gPyBpIDogbnVsbDtcbiAgICAgICAgICAgIH07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBrZXlzID0gX2tleXMoY29sbCk7XG4gICAgICAgICAgICBsZW4gPSBrZXlzLmxlbmd0aDtcbiAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbiBuZXh0KCkge1xuICAgICAgICAgICAgICAgIGkrKztcbiAgICAgICAgICAgICAgICByZXR1cm4gaSA8IGxlbiA/IGtleXNbaV0gOiBudWxsO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIFNpbWlsYXIgdG8gRVM2J3MgcmVzdCBwYXJhbSAoaHR0cDovL2FyaXlhLm9maWxhYnMuY29tLzIwMTMvMDMvZXM2LWFuZC1yZXN0LXBhcmFtZXRlci5odG1sKVxuICAgIC8vIFRoaXMgYWNjdW11bGF0ZXMgdGhlIGFyZ3VtZW50cyBwYXNzZWQgaW50byBhbiBhcnJheSwgYWZ0ZXIgYSBnaXZlbiBpbmRleC5cbiAgICAvLyBGcm9tIHVuZGVyc2NvcmUuanMgKGh0dHBzOi8vZ2l0aHViLmNvbS9qYXNoa2VuYXMvdW5kZXJzY29yZS9wdWxsLzIxNDApLlxuICAgIGZ1bmN0aW9uIF9yZXN0UGFyYW0oZnVuYywgc3RhcnRJbmRleCkge1xuICAgICAgICBzdGFydEluZGV4ID0gc3RhcnRJbmRleCA9PSBudWxsID8gZnVuYy5sZW5ndGggLSAxIDogK3N0YXJ0SW5kZXg7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIHZhciBsZW5ndGggPSBNYXRoLm1heChhcmd1bWVudHMubGVuZ3RoIC0gc3RhcnRJbmRleCwgMCk7XG4gICAgICAgICAgICB2YXIgcmVzdCA9IEFycmF5KGxlbmd0aCk7XG4gICAgICAgICAgICBmb3IgKHZhciBpbmRleCA9IDA7IGluZGV4IDwgbGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgICAgICAgICAgICAgcmVzdFtpbmRleF0gPSBhcmd1bWVudHNbaW5kZXggKyBzdGFydEluZGV4XTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHN3aXRjaCAoc3RhcnRJbmRleCkge1xuICAgICAgICAgICAgICAgIGNhc2UgMDogcmV0dXJuIGZ1bmMuY2FsbCh0aGlzLCByZXN0KTtcbiAgICAgICAgICAgICAgICBjYXNlIDE6IHJldHVybiBmdW5jLmNhbGwodGhpcywgYXJndW1lbnRzWzBdLCByZXN0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIEN1cnJlbnRseSB1bnVzZWQgYnV0IGhhbmRsZSBjYXNlcyBvdXRzaWRlIG9mIHRoZSBzd2l0Y2ggc3RhdGVtZW50OlxuICAgICAgICAgICAgLy8gdmFyIGFyZ3MgPSBBcnJheShzdGFydEluZGV4ICsgMSk7XG4gICAgICAgICAgICAvLyBmb3IgKGluZGV4ID0gMDsgaW5kZXggPCBzdGFydEluZGV4OyBpbmRleCsrKSB7XG4gICAgICAgICAgICAvLyAgICAgYXJnc1tpbmRleF0gPSBhcmd1bWVudHNbaW5kZXhdO1xuICAgICAgICAgICAgLy8gfVxuICAgICAgICAgICAgLy8gYXJnc1tzdGFydEluZGV4XSA9IHJlc3Q7XG4gICAgICAgICAgICAvLyByZXR1cm4gZnVuYy5hcHBseSh0aGlzLCBhcmdzKTtcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBfd2l0aG91dEluZGV4KGl0ZXJhdG9yKSB7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAodmFsdWUsIGluZGV4LCBjYWxsYmFjaykge1xuICAgICAgICAgICAgcmV0dXJuIGl0ZXJhdG9yKHZhbHVlLCBjYWxsYmFjayk7XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgLy8vLyBleHBvcnRlZCBhc3luYyBtb2R1bGUgZnVuY3Rpb25zIC8vLy9cblxuICAgIC8vLy8gbmV4dFRpY2sgaW1wbGVtZW50YXRpb24gd2l0aCBicm93c2VyLWNvbXBhdGlibGUgZmFsbGJhY2sgLy8vL1xuXG4gICAgLy8gY2FwdHVyZSB0aGUgZ2xvYmFsIHJlZmVyZW5jZSB0byBndWFyZCBhZ2FpbnN0IGZha2VUaW1lciBtb2Nrc1xuICAgIHZhciBfc2V0SW1tZWRpYXRlID0gdHlwZW9mIHNldEltbWVkaWF0ZSA9PT0gJ2Z1bmN0aW9uJyAmJiBzZXRJbW1lZGlhdGU7XG5cbiAgICB2YXIgX2RlbGF5ID0gX3NldEltbWVkaWF0ZSA/IGZ1bmN0aW9uKGZuKSB7XG4gICAgICAgIC8vIG5vdCBhIGRpcmVjdCBhbGlhcyBmb3IgSUUxMCBjb21wYXRpYmlsaXR5XG4gICAgICAgIF9zZXRJbW1lZGlhdGUoZm4pO1xuICAgIH0gOiBmdW5jdGlvbihmbikge1xuICAgICAgICBzZXRUaW1lb3V0KGZuLCAwKTtcbiAgICB9O1xuXG4gICAgaWYgKHR5cGVvZiBwcm9jZXNzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgcHJvY2Vzcy5uZXh0VGljayA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBhc3luYy5uZXh0VGljayA9IHByb2Nlc3MubmV4dFRpY2s7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgYXN5bmMubmV4dFRpY2sgPSBfZGVsYXk7XG4gICAgfVxuICAgIGFzeW5jLnNldEltbWVkaWF0ZSA9IF9zZXRJbW1lZGlhdGUgPyBfZGVsYXkgOiBhc3luYy5uZXh0VGljaztcblxuXG4gICAgYXN5bmMuZm9yRWFjaCA9XG4gICAgYXN5bmMuZWFjaCA9IGZ1bmN0aW9uIChhcnIsIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICByZXR1cm4gYXN5bmMuZWFjaE9mKGFyciwgX3dpdGhvdXRJbmRleChpdGVyYXRvciksIGNhbGxiYWNrKTtcbiAgICB9O1xuXG4gICAgYXN5bmMuZm9yRWFjaFNlcmllcyA9XG4gICAgYXN5bmMuZWFjaFNlcmllcyA9IGZ1bmN0aW9uIChhcnIsIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICByZXR1cm4gYXN5bmMuZWFjaE9mU2VyaWVzKGFyciwgX3dpdGhvdXRJbmRleChpdGVyYXRvciksIGNhbGxiYWNrKTtcbiAgICB9O1xuXG5cbiAgICBhc3luYy5mb3JFYWNoTGltaXQgPVxuICAgIGFzeW5jLmVhY2hMaW1pdCA9IGZ1bmN0aW9uIChhcnIsIGxpbWl0LCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgcmV0dXJuIF9lYWNoT2ZMaW1pdChsaW1pdCkoYXJyLCBfd2l0aG91dEluZGV4KGl0ZXJhdG9yKSwgY2FsbGJhY2spO1xuICAgIH07XG5cbiAgICBhc3luYy5mb3JFYWNoT2YgPVxuICAgIGFzeW5jLmVhY2hPZiA9IGZ1bmN0aW9uIChvYmplY3QsIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICBjYWxsYmFjayA9IF9vbmNlKGNhbGxiYWNrIHx8IG5vb3ApO1xuICAgICAgICBvYmplY3QgPSBvYmplY3QgfHwgW107XG5cbiAgICAgICAgdmFyIGl0ZXIgPSBfa2V5SXRlcmF0b3Iob2JqZWN0KTtcbiAgICAgICAgdmFyIGtleSwgY29tcGxldGVkID0gMDtcblxuICAgICAgICB3aGlsZSAoKGtleSA9IGl0ZXIoKSkgIT0gbnVsbCkge1xuICAgICAgICAgICAgY29tcGxldGVkICs9IDE7XG4gICAgICAgICAgICBpdGVyYXRvcihvYmplY3Rba2V5XSwga2V5LCBvbmx5X29uY2UoZG9uZSkpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGNvbXBsZXRlZCA9PT0gMCkgY2FsbGJhY2sobnVsbCk7XG5cbiAgICAgICAgZnVuY3Rpb24gZG9uZShlcnIpIHtcbiAgICAgICAgICAgIGNvbXBsZXRlZC0tO1xuICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBDaGVjayBrZXkgaXMgbnVsbCBpbiBjYXNlIGl0ZXJhdG9yIGlzbid0IGV4aGF1c3RlZFxuICAgICAgICAgICAgLy8gYW5kIGRvbmUgcmVzb2x2ZWQgc3luY2hyb25vdXNseS5cbiAgICAgICAgICAgIGVsc2UgaWYgKGtleSA9PT0gbnVsbCAmJiBjb21wbGV0ZWQgPD0gMCkge1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrKG51bGwpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfTtcblxuICAgIGFzeW5jLmZvckVhY2hPZlNlcmllcyA9XG4gICAgYXN5bmMuZWFjaE9mU2VyaWVzID0gZnVuY3Rpb24gKG9iaiwgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgIGNhbGxiYWNrID0gX29uY2UoY2FsbGJhY2sgfHwgbm9vcCk7XG4gICAgICAgIG9iaiA9IG9iaiB8fCBbXTtcbiAgICAgICAgdmFyIG5leHRLZXkgPSBfa2V5SXRlcmF0b3Iob2JqKTtcbiAgICAgICAgdmFyIGtleSA9IG5leHRLZXkoKTtcbiAgICAgICAgZnVuY3Rpb24gaXRlcmF0ZSgpIHtcbiAgICAgICAgICAgIHZhciBzeW5jID0gdHJ1ZTtcbiAgICAgICAgICAgIGlmIChrZXkgPT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gY2FsbGJhY2sobnVsbCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpdGVyYXRvcihvYmpba2V5XSwga2V5LCBvbmx5X29uY2UoZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGtleSA9IG5leHRLZXkoKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGtleSA9PT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKG51bGwpO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN5bmMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhc3luYy5zZXRJbW1lZGlhdGUoaXRlcmF0ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZXJhdGUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgIHN5bmMgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBpdGVyYXRlKCk7XG4gICAgfTtcblxuXG5cbiAgICBhc3luYy5mb3JFYWNoT2ZMaW1pdCA9XG4gICAgYXN5bmMuZWFjaE9mTGltaXQgPSBmdW5jdGlvbiAob2JqLCBsaW1pdCwgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgIF9lYWNoT2ZMaW1pdChsaW1pdCkob2JqLCBpdGVyYXRvciwgY2FsbGJhY2spO1xuICAgIH07XG5cbiAgICBmdW5jdGlvbiBfZWFjaE9mTGltaXQobGltaXQpIHtcblxuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKG9iaiwgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICBjYWxsYmFjayA9IF9vbmNlKGNhbGxiYWNrIHx8IG5vb3ApO1xuICAgICAgICAgICAgb2JqID0gb2JqIHx8IFtdO1xuICAgICAgICAgICAgdmFyIG5leHRLZXkgPSBfa2V5SXRlcmF0b3Iob2JqKTtcbiAgICAgICAgICAgIGlmIChsaW1pdCA8PSAwKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKG51bGwpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdmFyIGRvbmUgPSBmYWxzZTtcbiAgICAgICAgICAgIHZhciBydW5uaW5nID0gMDtcbiAgICAgICAgICAgIHZhciBlcnJvcmVkID0gZmFsc2U7XG5cbiAgICAgICAgICAgIChmdW5jdGlvbiByZXBsZW5pc2ggKCkge1xuICAgICAgICAgICAgICAgIGlmIChkb25lICYmIHJ1bm5pbmcgPD0gMCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gY2FsbGJhY2sobnVsbCk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgd2hpbGUgKHJ1bm5pbmcgPCBsaW1pdCAmJiAhZXJyb3JlZCkge1xuICAgICAgICAgICAgICAgICAgICB2YXIga2V5ID0gbmV4dEtleSgpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoa2V5ID09PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBkb25lID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChydW5uaW5nIDw9IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhudWxsKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBydW5uaW5nICs9IDE7XG4gICAgICAgICAgICAgICAgICAgIGl0ZXJhdG9yKG9ialtrZXldLCBrZXksIG9ubHlfb25jZShmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBydW5uaW5nIC09IDE7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvcmVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcGxlbmlzaCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSkoKTtcbiAgICAgICAgfTtcbiAgICB9XG5cblxuICAgIGZ1bmN0aW9uIGRvUGFyYWxsZWwoZm4pIHtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChvYmosIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICAgICAgcmV0dXJuIGZuKGFzeW5jLmVhY2hPZiwgb2JqLCBpdGVyYXRvciwgY2FsbGJhY2spO1xuICAgICAgICB9O1xuICAgIH1cbiAgICBmdW5jdGlvbiBkb1BhcmFsbGVsTGltaXQoZm4pIHtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChvYmosIGxpbWl0LCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIHJldHVybiBmbihfZWFjaE9mTGltaXQobGltaXQpLCBvYmosIGl0ZXJhdG9yLCBjYWxsYmFjayk7XG4gICAgICAgIH07XG4gICAgfVxuICAgIGZ1bmN0aW9uIGRvU2VyaWVzKGZuKSB7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAob2JqLCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIHJldHVybiBmbihhc3luYy5lYWNoT2ZTZXJpZXMsIG9iaiwgaXRlcmF0b3IsIGNhbGxiYWNrKTtcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBfYXN5bmNNYXAoZWFjaGZuLCBhcnIsIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICBjYWxsYmFjayA9IF9vbmNlKGNhbGxiYWNrIHx8IG5vb3ApO1xuICAgICAgICBhcnIgPSBhcnIgfHwgW107XG4gICAgICAgIHZhciByZXN1bHRzID0gX2lzQXJyYXlMaWtlKGFycikgPyBbXSA6IHt9O1xuICAgICAgICBlYWNoZm4oYXJyLCBmdW5jdGlvbiAodmFsdWUsIGluZGV4LCBjYWxsYmFjaykge1xuICAgICAgICAgICAgaXRlcmF0b3IodmFsdWUsIGZ1bmN0aW9uIChlcnIsIHYpIHtcbiAgICAgICAgICAgICAgICByZXN1bHRzW2luZGV4XSA9IHY7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICBjYWxsYmFjayhlcnIsIHJlc3VsdHMpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBhc3luYy5tYXAgPSBkb1BhcmFsbGVsKF9hc3luY01hcCk7XG4gICAgYXN5bmMubWFwU2VyaWVzID0gZG9TZXJpZXMoX2FzeW5jTWFwKTtcbiAgICBhc3luYy5tYXBMaW1pdCA9IGRvUGFyYWxsZWxMaW1pdChfYXN5bmNNYXApO1xuXG4gICAgLy8gcmVkdWNlIG9ubHkgaGFzIGEgc2VyaWVzIHZlcnNpb24sIGFzIGRvaW5nIHJlZHVjZSBpbiBwYXJhbGxlbCB3b24ndFxuICAgIC8vIHdvcmsgaW4gbWFueSBzaXR1YXRpb25zLlxuICAgIGFzeW5jLmluamVjdCA9XG4gICAgYXN5bmMuZm9sZGwgPVxuICAgIGFzeW5jLnJlZHVjZSA9IGZ1bmN0aW9uIChhcnIsIG1lbW8sIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICBhc3luYy5lYWNoT2ZTZXJpZXMoYXJyLCBmdW5jdGlvbiAoeCwgaSwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIGl0ZXJhdG9yKG1lbW8sIHgsIGZ1bmN0aW9uIChlcnIsIHYpIHtcbiAgICAgICAgICAgICAgICBtZW1vID0gdjtcbiAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgIGNhbGxiYWNrKGVyciwgbWVtbyk7XG4gICAgICAgIH0pO1xuICAgIH07XG5cbiAgICBhc3luYy5mb2xkciA9XG4gICAgYXN5bmMucmVkdWNlUmlnaHQgPSBmdW5jdGlvbiAoYXJyLCBtZW1vLCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgdmFyIHJldmVyc2VkID0gX21hcChhcnIsIGlkZW50aXR5KS5yZXZlcnNlKCk7XG4gICAgICAgIGFzeW5jLnJlZHVjZShyZXZlcnNlZCwgbWVtbywgaXRlcmF0b3IsIGNhbGxiYWNrKTtcbiAgICB9O1xuXG4gICAgYXN5bmMudHJhbnNmb3JtID0gZnVuY3Rpb24gKGFyciwgbWVtbywgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAzKSB7XG4gICAgICAgICAgICBjYWxsYmFjayA9IGl0ZXJhdG9yO1xuICAgICAgICAgICAgaXRlcmF0b3IgPSBtZW1vO1xuICAgICAgICAgICAgbWVtbyA9IF9pc0FycmF5KGFycikgPyBbXSA6IHt9O1xuICAgICAgICB9XG5cbiAgICAgICAgYXN5bmMuZWFjaE9mKGFyciwgZnVuY3Rpb24odiwgaywgY2IpIHtcbiAgICAgICAgICAgIGl0ZXJhdG9yKG1lbW8sIHYsIGssIGNiKTtcbiAgICAgICAgfSwgZnVuY3Rpb24oZXJyKSB7XG4gICAgICAgICAgICBjYWxsYmFjayhlcnIsIG1lbW8pO1xuICAgICAgICB9KTtcbiAgICB9O1xuXG4gICAgZnVuY3Rpb24gX2ZpbHRlcihlYWNoZm4sIGFyciwgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgIHZhciByZXN1bHRzID0gW107XG4gICAgICAgIGVhY2hmbihhcnIsIGZ1bmN0aW9uICh4LCBpbmRleCwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIGl0ZXJhdG9yKHgsIGZ1bmN0aW9uICh2KSB7XG4gICAgICAgICAgICAgICAgaWYgKHYpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0cy5wdXNoKHtpbmRleDogaW5kZXgsIHZhbHVlOiB4fSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhbGxiYWNrKCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgY2FsbGJhY2soX21hcChyZXN1bHRzLnNvcnQoZnVuY3Rpb24gKGEsIGIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gYS5pbmRleCAtIGIuaW5kZXg7XG4gICAgICAgICAgICB9KSwgZnVuY3Rpb24gKHgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4geC52YWx1ZTtcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgYXN5bmMuc2VsZWN0ID1cbiAgICBhc3luYy5maWx0ZXIgPSBkb1BhcmFsbGVsKF9maWx0ZXIpO1xuXG4gICAgYXN5bmMuc2VsZWN0TGltaXQgPVxuICAgIGFzeW5jLmZpbHRlckxpbWl0ID0gZG9QYXJhbGxlbExpbWl0KF9maWx0ZXIpO1xuXG4gICAgYXN5bmMuc2VsZWN0U2VyaWVzID1cbiAgICBhc3luYy5maWx0ZXJTZXJpZXMgPSBkb1NlcmllcyhfZmlsdGVyKTtcblxuICAgIGZ1bmN0aW9uIF9yZWplY3QoZWFjaGZuLCBhcnIsIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICBfZmlsdGVyKGVhY2hmbiwgYXJyLCBmdW5jdGlvbih2YWx1ZSwgY2IpIHtcbiAgICAgICAgICAgIGl0ZXJhdG9yKHZhbHVlLCBmdW5jdGlvbih2KSB7XG4gICAgICAgICAgICAgICAgY2IoIXYpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sIGNhbGxiYWNrKTtcbiAgICB9XG4gICAgYXN5bmMucmVqZWN0ID0gZG9QYXJhbGxlbChfcmVqZWN0KTtcbiAgICBhc3luYy5yZWplY3RMaW1pdCA9IGRvUGFyYWxsZWxMaW1pdChfcmVqZWN0KTtcbiAgICBhc3luYy5yZWplY3RTZXJpZXMgPSBkb1NlcmllcyhfcmVqZWN0KTtcblxuICAgIGZ1bmN0aW9uIF9jcmVhdGVUZXN0ZXIoZWFjaGZuLCBjaGVjaywgZ2V0UmVzdWx0KSB7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbihhcnIsIGxpbWl0LCBpdGVyYXRvciwgY2IpIHtcbiAgICAgICAgICAgIGZ1bmN0aW9uIGRvbmUoKSB7XG4gICAgICAgICAgICAgICAgaWYgKGNiKSBjYihnZXRSZXN1bHQoZmFsc2UsIHZvaWQgMCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZnVuY3Rpb24gaXRlcmF0ZWUoeCwgXywgY2FsbGJhY2spIHtcbiAgICAgICAgICAgICAgICBpZiAoIWNiKSByZXR1cm4gY2FsbGJhY2soKTtcbiAgICAgICAgICAgICAgICBpdGVyYXRvcih4LCBmdW5jdGlvbiAodikge1xuICAgICAgICAgICAgICAgICAgICBpZiAoY2IgJiYgY2hlY2sodikpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNiKGdldFJlc3VsdCh0cnVlLCB4KSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBjYiA9IGl0ZXJhdG9yID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID4gMykge1xuICAgICAgICAgICAgICAgIGVhY2hmbihhcnIsIGxpbWl0LCBpdGVyYXRlZSwgZG9uZSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGNiID0gaXRlcmF0b3I7XG4gICAgICAgICAgICAgICAgaXRlcmF0b3IgPSBsaW1pdDtcbiAgICAgICAgICAgICAgICBlYWNoZm4oYXJyLCBpdGVyYXRlZSwgZG9uZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgYXN5bmMuYW55ID1cbiAgICBhc3luYy5zb21lID0gX2NyZWF0ZVRlc3Rlcihhc3luYy5lYWNoT2YsIHRvQm9vbCwgaWRlbnRpdHkpO1xuXG4gICAgYXN5bmMuc29tZUxpbWl0ID0gX2NyZWF0ZVRlc3Rlcihhc3luYy5lYWNoT2ZMaW1pdCwgdG9Cb29sLCBpZGVudGl0eSk7XG5cbiAgICBhc3luYy5hbGwgPVxuICAgIGFzeW5jLmV2ZXJ5ID0gX2NyZWF0ZVRlc3Rlcihhc3luYy5lYWNoT2YsIG5vdElkLCBub3RJZCk7XG5cbiAgICBhc3luYy5ldmVyeUxpbWl0ID0gX2NyZWF0ZVRlc3Rlcihhc3luYy5lYWNoT2ZMaW1pdCwgbm90SWQsIG5vdElkKTtcblxuICAgIGZ1bmN0aW9uIF9maW5kR2V0UmVzdWx0KHYsIHgpIHtcbiAgICAgICAgcmV0dXJuIHg7XG4gICAgfVxuICAgIGFzeW5jLmRldGVjdCA9IF9jcmVhdGVUZXN0ZXIoYXN5bmMuZWFjaE9mLCBpZGVudGl0eSwgX2ZpbmRHZXRSZXN1bHQpO1xuICAgIGFzeW5jLmRldGVjdFNlcmllcyA9IF9jcmVhdGVUZXN0ZXIoYXN5bmMuZWFjaE9mU2VyaWVzLCBpZGVudGl0eSwgX2ZpbmRHZXRSZXN1bHQpO1xuICAgIGFzeW5jLmRldGVjdExpbWl0ID0gX2NyZWF0ZVRlc3Rlcihhc3luYy5lYWNoT2ZMaW1pdCwgaWRlbnRpdHksIF9maW5kR2V0UmVzdWx0KTtcblxuICAgIGFzeW5jLnNvcnRCeSA9IGZ1bmN0aW9uIChhcnIsIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICBhc3luYy5tYXAoYXJyLCBmdW5jdGlvbiAoeCwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIGl0ZXJhdG9yKHgsIGZ1bmN0aW9uIChlcnIsIGNyaXRlcmlhKSB7XG4gICAgICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2sobnVsbCwge3ZhbHVlOiB4LCBjcml0ZXJpYTogY3JpdGVyaWF9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSwgZnVuY3Rpb24gKGVyciwgcmVzdWx0cykge1xuICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAgIHJldHVybiBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2sobnVsbCwgX21hcChyZXN1bHRzLnNvcnQoY29tcGFyYXRvciksIGZ1bmN0aW9uICh4KSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB4LnZhbHVlO1xuICAgICAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICB9KTtcblxuICAgICAgICBmdW5jdGlvbiBjb21wYXJhdG9yKGxlZnQsIHJpZ2h0KSB7XG4gICAgICAgICAgICB2YXIgYSA9IGxlZnQuY3JpdGVyaWEsIGIgPSByaWdodC5jcml0ZXJpYTtcbiAgICAgICAgICAgIHJldHVybiBhIDwgYiA/IC0xIDogYSA+IGIgPyAxIDogMDtcbiAgICAgICAgfVxuICAgIH07XG5cbiAgICBhc3luYy5hdXRvID0gZnVuY3Rpb24gKHRhc2tzLCBjb25jdXJyZW5jeSwgY2FsbGJhY2spIHtcbiAgICAgICAgaWYgKCFjYWxsYmFjaykge1xuICAgICAgICAgICAgLy8gY29uY3VycmVuY3kgaXMgb3B0aW9uYWwsIHNoaWZ0IHRoZSBhcmdzLlxuICAgICAgICAgICAgY2FsbGJhY2sgPSBjb25jdXJyZW5jeTtcbiAgICAgICAgICAgIGNvbmN1cnJlbmN5ID0gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBjYWxsYmFjayA9IF9vbmNlKGNhbGxiYWNrIHx8IG5vb3ApO1xuICAgICAgICB2YXIga2V5cyA9IF9rZXlzKHRhc2tzKTtcbiAgICAgICAgdmFyIHJlbWFpbmluZ1Rhc2tzID0ga2V5cy5sZW5ndGg7XG4gICAgICAgIGlmICghcmVtYWluaW5nVGFza3MpIHtcbiAgICAgICAgICAgIHJldHVybiBjYWxsYmFjayhudWxsKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWNvbmN1cnJlbmN5KSB7XG4gICAgICAgICAgICBjb25jdXJyZW5jeSA9IHJlbWFpbmluZ1Rhc2tzO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIHJlc3VsdHMgPSB7fTtcbiAgICAgICAgdmFyIHJ1bm5pbmdUYXNrcyA9IDA7XG5cbiAgICAgICAgdmFyIGxpc3RlbmVycyA9IFtdO1xuICAgICAgICBmdW5jdGlvbiBhZGRMaXN0ZW5lcihmbikge1xuICAgICAgICAgICAgbGlzdGVuZXJzLnVuc2hpZnQoZm4pO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIHJlbW92ZUxpc3RlbmVyKGZuKSB7XG4gICAgICAgICAgICB2YXIgaWR4ID0gX2luZGV4T2YobGlzdGVuZXJzLCBmbik7XG4gICAgICAgICAgICBpZiAoaWR4ID49IDApIGxpc3RlbmVycy5zcGxpY2UoaWR4LCAxKTtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiB0YXNrQ29tcGxldGUoKSB7XG4gICAgICAgICAgICByZW1haW5pbmdUYXNrcy0tO1xuICAgICAgICAgICAgX2FycmF5RWFjaChsaXN0ZW5lcnMuc2xpY2UoMCksIGZ1bmN0aW9uIChmbikge1xuICAgICAgICAgICAgICAgIGZuKCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGFkZExpc3RlbmVyKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGlmICghcmVtYWluaW5nVGFza3MpIHtcbiAgICAgICAgICAgICAgICBjYWxsYmFjayhudWxsLCByZXN1bHRzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgX2FycmF5RWFjaChrZXlzLCBmdW5jdGlvbiAoaykge1xuICAgICAgICAgICAgdmFyIHRhc2sgPSBfaXNBcnJheSh0YXNrc1trXSkgPyB0YXNrc1trXTogW3Rhc2tzW2tdXTtcbiAgICAgICAgICAgIHZhciB0YXNrQ2FsbGJhY2sgPSBfcmVzdFBhcmFtKGZ1bmN0aW9uKGVyciwgYXJncykge1xuICAgICAgICAgICAgICAgIHJ1bm5pbmdUYXNrcy0tO1xuICAgICAgICAgICAgICAgIGlmIChhcmdzLmxlbmd0aCA8PSAxKSB7XG4gICAgICAgICAgICAgICAgICAgIGFyZ3MgPSBhcmdzWzBdO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBzYWZlUmVzdWx0cyA9IHt9O1xuICAgICAgICAgICAgICAgICAgICBfZm9yRWFjaE9mKHJlc3VsdHMsIGZ1bmN0aW9uKHZhbCwgcmtleSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgc2FmZVJlc3VsdHNbcmtleV0gPSB2YWw7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICBzYWZlUmVzdWx0c1trXSA9IGFyZ3M7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKGVyciwgc2FmZVJlc3VsdHMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0c1trXSA9IGFyZ3M7XG4gICAgICAgICAgICAgICAgICAgIGFzeW5jLnNldEltbWVkaWF0ZSh0YXNrQ29tcGxldGUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdmFyIHJlcXVpcmVzID0gdGFzay5zbGljZSgwLCB0YXNrLmxlbmd0aCAtIDEpO1xuICAgICAgICAgICAgLy8gcHJldmVudCBkZWFkLWxvY2tzXG4gICAgICAgICAgICB2YXIgbGVuID0gcmVxdWlyZXMubGVuZ3RoO1xuICAgICAgICAgICAgdmFyIGRlcDtcbiAgICAgICAgICAgIHdoaWxlIChsZW4tLSkge1xuICAgICAgICAgICAgICAgIGlmICghKGRlcCA9IHRhc2tzW3JlcXVpcmVzW2xlbl1dKSkge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0hhcyBpbmV4aXN0YW50IGRlcGVuZGVuY3knKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKF9pc0FycmF5KGRlcCkgJiYgX2luZGV4T2YoZGVwLCBrKSA+PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignSGFzIGN5Y2xpYyBkZXBlbmRlbmNpZXMnKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmdW5jdGlvbiByZWFkeSgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcnVubmluZ1Rhc2tzIDwgY29uY3VycmVuY3kgJiYgX3JlZHVjZShyZXF1aXJlcywgZnVuY3Rpb24gKGEsIHgpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChhICYmIHJlc3VsdHMuaGFzT3duUHJvcGVydHkoeCkpO1xuICAgICAgICAgICAgICAgIH0sIHRydWUpICYmICFyZXN1bHRzLmhhc093blByb3BlcnR5KGspO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHJlYWR5KCkpIHtcbiAgICAgICAgICAgICAgICBydW5uaW5nVGFza3MrKztcbiAgICAgICAgICAgICAgICB0YXNrW3Rhc2subGVuZ3RoIC0gMV0odGFza0NhbGxiYWNrLCByZXN1bHRzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGFkZExpc3RlbmVyKGxpc3RlbmVyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZ1bmN0aW9uIGxpc3RlbmVyKCkge1xuICAgICAgICAgICAgICAgIGlmIChyZWFkeSgpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJ1bm5pbmdUYXNrcysrO1xuICAgICAgICAgICAgICAgICAgICByZW1vdmVMaXN0ZW5lcihsaXN0ZW5lcik7XG4gICAgICAgICAgICAgICAgICAgIHRhc2tbdGFzay5sZW5ndGggLSAxXSh0YXNrQ2FsbGJhY2ssIHJlc3VsdHMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfTtcblxuXG5cbiAgICBhc3luYy5yZXRyeSA9IGZ1bmN0aW9uKHRpbWVzLCB0YXNrLCBjYWxsYmFjaykge1xuICAgICAgICB2YXIgREVGQVVMVF9USU1FUyA9IDU7XG4gICAgICAgIHZhciBERUZBVUxUX0lOVEVSVkFMID0gMDtcblxuICAgICAgICB2YXIgYXR0ZW1wdHMgPSBbXTtcblxuICAgICAgICB2YXIgb3B0cyA9IHtcbiAgICAgICAgICAgIHRpbWVzOiBERUZBVUxUX1RJTUVTLFxuICAgICAgICAgICAgaW50ZXJ2YWw6IERFRkFVTFRfSU5URVJWQUxcbiAgICAgICAgfTtcblxuICAgICAgICBmdW5jdGlvbiBwYXJzZVRpbWVzKGFjYywgdCl7XG4gICAgICAgICAgICBpZih0eXBlb2YgdCA9PT0gJ251bWJlcicpe1xuICAgICAgICAgICAgICAgIGFjYy50aW1lcyA9IHBhcnNlSW50KHQsIDEwKSB8fCBERUZBVUxUX1RJTUVTO1xuICAgICAgICAgICAgfSBlbHNlIGlmKHR5cGVvZiB0ID09PSAnb2JqZWN0Jyl7XG4gICAgICAgICAgICAgICAgYWNjLnRpbWVzID0gcGFyc2VJbnQodC50aW1lcywgMTApIHx8IERFRkFVTFRfVElNRVM7XG4gICAgICAgICAgICAgICAgYWNjLmludGVydmFsID0gcGFyc2VJbnQodC5pbnRlcnZhbCwgMTApIHx8IERFRkFVTFRfSU5URVJWQUw7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignVW5zdXBwb3J0ZWQgYXJndW1lbnQgdHlwZSBmb3IgXFwndGltZXNcXCc6ICcgKyB0eXBlb2YgdCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgbGVuZ3RoID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgICAgICAgaWYgKGxlbmd0aCA8IDEgfHwgbGVuZ3RoID4gMykge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIGFyZ3VtZW50cyAtIG11c3QgYmUgZWl0aGVyICh0YXNrKSwgKHRhc2ssIGNhbGxiYWNrKSwgKHRpbWVzLCB0YXNrKSBvciAodGltZXMsIHRhc2ssIGNhbGxiYWNrKScpO1xuICAgICAgICB9IGVsc2UgaWYgKGxlbmd0aCA8PSAyICYmIHR5cGVvZiB0aW1lcyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgY2FsbGJhY2sgPSB0YXNrO1xuICAgICAgICAgICAgdGFzayA9IHRpbWVzO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0eXBlb2YgdGltZXMgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIHBhcnNlVGltZXMob3B0cywgdGltZXMpO1xuICAgICAgICB9XG4gICAgICAgIG9wdHMuY2FsbGJhY2sgPSBjYWxsYmFjaztcbiAgICAgICAgb3B0cy50YXNrID0gdGFzaztcblxuICAgICAgICBmdW5jdGlvbiB3cmFwcGVkVGFzayh3cmFwcGVkQ2FsbGJhY2ssIHdyYXBwZWRSZXN1bHRzKSB7XG4gICAgICAgICAgICBmdW5jdGlvbiByZXRyeUF0dGVtcHQodGFzaywgZmluYWxBdHRlbXB0KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKHNlcmllc0NhbGxiYWNrKSB7XG4gICAgICAgICAgICAgICAgICAgIHRhc2soZnVuY3Rpb24oZXJyLCByZXN1bHQpe1xuICAgICAgICAgICAgICAgICAgICAgICAgc2VyaWVzQ2FsbGJhY2soIWVyciB8fCBmaW5hbEF0dGVtcHQsIHtlcnI6IGVyciwgcmVzdWx0OiByZXN1bHR9KTtcbiAgICAgICAgICAgICAgICAgICAgfSwgd3JhcHBlZFJlc3VsdHMpO1xuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGZ1bmN0aW9uIHJldHJ5SW50ZXJ2YWwoaW50ZXJ2YWwpe1xuICAgICAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbihzZXJpZXNDYWxsYmFjayl7XG4gICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKXtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlcmllc0NhbGxiYWNrKG51bGwpO1xuICAgICAgICAgICAgICAgICAgICB9LCBpbnRlcnZhbCk7XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgd2hpbGUgKG9wdHMudGltZXMpIHtcblxuICAgICAgICAgICAgICAgIHZhciBmaW5hbEF0dGVtcHQgPSAhKG9wdHMudGltZXMtPTEpO1xuICAgICAgICAgICAgICAgIGF0dGVtcHRzLnB1c2gocmV0cnlBdHRlbXB0KG9wdHMudGFzaywgZmluYWxBdHRlbXB0KSk7XG4gICAgICAgICAgICAgICAgaWYoIWZpbmFsQXR0ZW1wdCAmJiBvcHRzLmludGVydmFsID4gMCl7XG4gICAgICAgICAgICAgICAgICAgIGF0dGVtcHRzLnB1c2gocmV0cnlJbnRlcnZhbChvcHRzLmludGVydmFsKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBhc3luYy5zZXJpZXMoYXR0ZW1wdHMsIGZ1bmN0aW9uKGRvbmUsIGRhdGEpe1xuICAgICAgICAgICAgICAgIGRhdGEgPSBkYXRhW2RhdGEubGVuZ3RoIC0gMV07XG4gICAgICAgICAgICAgICAgKHdyYXBwZWRDYWxsYmFjayB8fCBvcHRzLmNhbGxiYWNrKShkYXRhLmVyciwgZGF0YS5yZXN1bHQpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBJZiBhIGNhbGxiYWNrIGlzIHBhc3NlZCwgcnVuIHRoaXMgYXMgYSBjb250cm9sbCBmbG93XG4gICAgICAgIHJldHVybiBvcHRzLmNhbGxiYWNrID8gd3JhcHBlZFRhc2soKSA6IHdyYXBwZWRUYXNrO1xuICAgIH07XG5cbiAgICBhc3luYy53YXRlcmZhbGwgPSBmdW5jdGlvbiAodGFza3MsIGNhbGxiYWNrKSB7XG4gICAgICAgIGNhbGxiYWNrID0gX29uY2UoY2FsbGJhY2sgfHwgbm9vcCk7XG4gICAgICAgIGlmICghX2lzQXJyYXkodGFza3MpKSB7XG4gICAgICAgICAgICB2YXIgZXJyID0gbmV3IEVycm9yKCdGaXJzdCBhcmd1bWVudCB0byB3YXRlcmZhbGwgbXVzdCBiZSBhbiBhcnJheSBvZiBmdW5jdGlvbnMnKTtcbiAgICAgICAgICAgIHJldHVybiBjYWxsYmFjayhlcnIpO1xuICAgICAgICB9XG4gICAgICAgIGlmICghdGFza3MubGVuZ3RoKSB7XG4gICAgICAgICAgICByZXR1cm4gY2FsbGJhY2soKTtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiB3cmFwSXRlcmF0b3IoaXRlcmF0b3IpIHtcbiAgICAgICAgICAgIHJldHVybiBfcmVzdFBhcmFtKGZ1bmN0aW9uIChlcnIsIGFyZ3MpIHtcbiAgICAgICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrLmFwcGx5KG51bGwsIFtlcnJdLmNvbmNhdChhcmdzKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB2YXIgbmV4dCA9IGl0ZXJhdG9yLm5leHQoKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKG5leHQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3MucHVzaCh3cmFwSXRlcmF0b3IobmV4dCkpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgYXJncy5wdXNoKGNhbGxiYWNrKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbnN1cmVBc3luYyhpdGVyYXRvcikuYXBwbHkobnVsbCwgYXJncyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgd3JhcEl0ZXJhdG9yKGFzeW5jLml0ZXJhdG9yKHRhc2tzKSkoKTtcbiAgICB9O1xuXG4gICAgZnVuY3Rpb24gX3BhcmFsbGVsKGVhY2hmbiwgdGFza3MsIGNhbGxiYWNrKSB7XG4gICAgICAgIGNhbGxiYWNrID0gY2FsbGJhY2sgfHwgbm9vcDtcbiAgICAgICAgdmFyIHJlc3VsdHMgPSBfaXNBcnJheUxpa2UodGFza3MpID8gW10gOiB7fTtcblxuICAgICAgICBlYWNoZm4odGFza3MsIGZ1bmN0aW9uICh0YXNrLCBrZXksIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICB0YXNrKF9yZXN0UGFyYW0oZnVuY3Rpb24gKGVyciwgYXJncykge1xuICAgICAgICAgICAgICAgIGlmIChhcmdzLmxlbmd0aCA8PSAxKSB7XG4gICAgICAgICAgICAgICAgICAgIGFyZ3MgPSBhcmdzWzBdO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXN1bHRzW2tleV0gPSBhcmdzO1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgICB9KSk7XG4gICAgICAgIH0sIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgIGNhbGxiYWNrKGVyciwgcmVzdWx0cyk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGFzeW5jLnBhcmFsbGVsID0gZnVuY3Rpb24gKHRhc2tzLCBjYWxsYmFjaykge1xuICAgICAgICBfcGFyYWxsZWwoYXN5bmMuZWFjaE9mLCB0YXNrcywgY2FsbGJhY2spO1xuICAgIH07XG5cbiAgICBhc3luYy5wYXJhbGxlbExpbWl0ID0gZnVuY3Rpb24odGFza3MsIGxpbWl0LCBjYWxsYmFjaykge1xuICAgICAgICBfcGFyYWxsZWwoX2VhY2hPZkxpbWl0KGxpbWl0KSwgdGFza3MsIGNhbGxiYWNrKTtcbiAgICB9O1xuXG4gICAgYXN5bmMuc2VyaWVzID0gZnVuY3Rpb24odGFza3MsIGNhbGxiYWNrKSB7XG4gICAgICAgIF9wYXJhbGxlbChhc3luYy5lYWNoT2ZTZXJpZXMsIHRhc2tzLCBjYWxsYmFjayk7XG4gICAgfTtcblxuICAgIGFzeW5jLml0ZXJhdG9yID0gZnVuY3Rpb24gKHRhc2tzKSB7XG4gICAgICAgIGZ1bmN0aW9uIG1ha2VDYWxsYmFjayhpbmRleCkge1xuICAgICAgICAgICAgZnVuY3Rpb24gZm4oKSB7XG4gICAgICAgICAgICAgICAgaWYgKHRhc2tzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICB0YXNrc1tpbmRleF0uYXBwbHkobnVsbCwgYXJndW1lbnRzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZuLm5leHQoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZuLm5leHQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIChpbmRleCA8IHRhc2tzLmxlbmd0aCAtIDEpID8gbWFrZUNhbGxiYWNrKGluZGV4ICsgMSk6IG51bGw7XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgcmV0dXJuIGZuO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBtYWtlQ2FsbGJhY2soMCk7XG4gICAgfTtcblxuICAgIGFzeW5jLmFwcGx5ID0gX3Jlc3RQYXJhbShmdW5jdGlvbiAoZm4sIGFyZ3MpIHtcbiAgICAgICAgcmV0dXJuIF9yZXN0UGFyYW0oZnVuY3Rpb24gKGNhbGxBcmdzKSB7XG4gICAgICAgICAgICByZXR1cm4gZm4uYXBwbHkoXG4gICAgICAgICAgICAgICAgbnVsbCwgYXJncy5jb25jYXQoY2FsbEFyZ3MpXG4gICAgICAgICAgICApO1xuICAgICAgICB9KTtcbiAgICB9KTtcblxuICAgIGZ1bmN0aW9uIF9jb25jYXQoZWFjaGZuLCBhcnIsIGZuLCBjYWxsYmFjaykge1xuICAgICAgICB2YXIgcmVzdWx0ID0gW107XG4gICAgICAgIGVhY2hmbihhcnIsIGZ1bmN0aW9uICh4LCBpbmRleCwgY2IpIHtcbiAgICAgICAgICAgIGZuKHgsIGZ1bmN0aW9uIChlcnIsIHkpIHtcbiAgICAgICAgICAgICAgICByZXN1bHQgPSByZXN1bHQuY29uY2F0KHkgfHwgW10pO1xuICAgICAgICAgICAgICAgIGNiKGVycik7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSwgZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgY2FsbGJhY2soZXJyLCByZXN1bHQpO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgYXN5bmMuY29uY2F0ID0gZG9QYXJhbGxlbChfY29uY2F0KTtcbiAgICBhc3luYy5jb25jYXRTZXJpZXMgPSBkb1NlcmllcyhfY29uY2F0KTtcblxuICAgIGFzeW5jLndoaWxzdCA9IGZ1bmN0aW9uICh0ZXN0LCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgY2FsbGJhY2sgPSBjYWxsYmFjayB8fCBub29wO1xuICAgICAgICBpZiAodGVzdCgpKSB7XG4gICAgICAgICAgICB2YXIgbmV4dCA9IF9yZXN0UGFyYW0oZnVuY3Rpb24oZXJyLCBhcmdzKSB7XG4gICAgICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodGVzdC5hcHBseSh0aGlzLCBhcmdzKSkge1xuICAgICAgICAgICAgICAgICAgICBpdGVyYXRvcihuZXh0KTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhudWxsKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGl0ZXJhdG9yKG5leHQpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY2FsbGJhY2sobnVsbCk7XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgYXN5bmMuZG9XaGlsc3QgPSBmdW5jdGlvbiAoaXRlcmF0b3IsIHRlc3QsIGNhbGxiYWNrKSB7XG4gICAgICAgIHZhciBjYWxscyA9IDA7XG4gICAgICAgIHJldHVybiBhc3luYy53aGlsc3QoZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICByZXR1cm4gKytjYWxscyA8PSAxIHx8IHRlc3QuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICAgICAgfSwgaXRlcmF0b3IsIGNhbGxiYWNrKTtcbiAgICB9O1xuXG4gICAgYXN5bmMudW50aWwgPSBmdW5jdGlvbiAodGVzdCwgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgIHJldHVybiBhc3luYy53aGlsc3QoZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICByZXR1cm4gIXRlc3QuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICAgICAgfSwgaXRlcmF0b3IsIGNhbGxiYWNrKTtcbiAgICB9O1xuXG4gICAgYXN5bmMuZG9VbnRpbCA9IGZ1bmN0aW9uIChpdGVyYXRvciwgdGVzdCwgY2FsbGJhY2spIHtcbiAgICAgICAgcmV0dXJuIGFzeW5jLmRvV2hpbHN0KGl0ZXJhdG9yLCBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIHJldHVybiAhdGVzdC5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgICAgICB9LCBjYWxsYmFjayk7XG4gICAgfTtcblxuICAgIGFzeW5jLmR1cmluZyA9IGZ1bmN0aW9uICh0ZXN0LCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgY2FsbGJhY2sgPSBjYWxsYmFjayB8fCBub29wO1xuXG4gICAgICAgIHZhciBuZXh0ID0gX3Jlc3RQYXJhbShmdW5jdGlvbihlcnIsIGFyZ3MpIHtcbiAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBhcmdzLnB1c2goY2hlY2spO1xuICAgICAgICAgICAgICAgIHRlc3QuYXBwbHkodGhpcywgYXJncyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHZhciBjaGVjayA9IGZ1bmN0aW9uKGVyciwgdHJ1dGgpIHtcbiAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh0cnV0aCkge1xuICAgICAgICAgICAgICAgIGl0ZXJhdG9yKG5leHQpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBjYWxsYmFjayhudWxsKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcblxuICAgICAgICB0ZXN0KGNoZWNrKTtcbiAgICB9O1xuXG4gICAgYXN5bmMuZG9EdXJpbmcgPSBmdW5jdGlvbiAoaXRlcmF0b3IsIHRlc3QsIGNhbGxiYWNrKSB7XG4gICAgICAgIHZhciBjYWxscyA9IDA7XG4gICAgICAgIGFzeW5jLmR1cmluZyhmdW5jdGlvbihuZXh0KSB7XG4gICAgICAgICAgICBpZiAoY2FsbHMrKyA8IDEpIHtcbiAgICAgICAgICAgICAgICBuZXh0KG51bGwsIHRydWUpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0ZXN0LmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sIGl0ZXJhdG9yLCBjYWxsYmFjayk7XG4gICAgfTtcblxuICAgIGZ1bmN0aW9uIF9xdWV1ZSh3b3JrZXIsIGNvbmN1cnJlbmN5LCBwYXlsb2FkKSB7XG4gICAgICAgIGlmIChjb25jdXJyZW5jeSA9PSBudWxsKSB7XG4gICAgICAgICAgICBjb25jdXJyZW5jeSA9IDE7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZihjb25jdXJyZW5jeSA9PT0gMCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdDb25jdXJyZW5jeSBtdXN0IG5vdCBiZSB6ZXJvJyk7XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gX2luc2VydChxLCBkYXRhLCBwb3MsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICBpZiAoY2FsbGJhY2sgIT0gbnVsbCAmJiB0eXBlb2YgY2FsbGJhY2sgIT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcInRhc2sgY2FsbGJhY2sgbXVzdCBiZSBhIGZ1bmN0aW9uXCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcS5zdGFydGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIGlmICghX2lzQXJyYXkoZGF0YSkpIHtcbiAgICAgICAgICAgICAgICBkYXRhID0gW2RhdGFdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYoZGF0YS5sZW5ndGggPT09IDAgJiYgcS5pZGxlKCkpIHtcbiAgICAgICAgICAgICAgICAvLyBjYWxsIGRyYWluIGltbWVkaWF0ZWx5IGlmIHRoZXJlIGFyZSBubyB0YXNrc1xuICAgICAgICAgICAgICAgIHJldHVybiBhc3luYy5zZXRJbW1lZGlhdGUoZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgICAgIHEuZHJhaW4oKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIF9hcnJheUVhY2goZGF0YSwgZnVuY3Rpb24odGFzaykge1xuICAgICAgICAgICAgICAgIHZhciBpdGVtID0ge1xuICAgICAgICAgICAgICAgICAgICBkYXRhOiB0YXNrLFxuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjazogY2FsbGJhY2sgfHwgbm9vcFxuICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICBpZiAocG9zKSB7XG4gICAgICAgICAgICAgICAgICAgIHEudGFza3MudW5zaGlmdChpdGVtKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBxLnRhc2tzLnB1c2goaXRlbSk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKHEudGFza3MubGVuZ3RoID09PSBxLmNvbmN1cnJlbmN5KSB7XG4gICAgICAgICAgICAgICAgICAgIHEuc2F0dXJhdGVkKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBhc3luYy5zZXRJbW1lZGlhdGUocS5wcm9jZXNzKTtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBfbmV4dChxLCB0YXNrcykge1xuICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKCl7XG4gICAgICAgICAgICAgICAgd29ya2VycyAtPSAxO1xuXG4gICAgICAgICAgICAgICAgdmFyIHJlbW92ZWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB2YXIgYXJncyA9IGFyZ3VtZW50cztcbiAgICAgICAgICAgICAgICBfYXJyYXlFYWNoKHRhc2tzLCBmdW5jdGlvbiAodGFzaykge1xuICAgICAgICAgICAgICAgICAgICBfYXJyYXlFYWNoKHdvcmtlcnNMaXN0LCBmdW5jdGlvbiAod29ya2VyLCBpbmRleCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHdvcmtlciA9PT0gdGFzayAmJiAhcmVtb3ZlZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdvcmtlcnNMaXN0LnNwbGljZShpbmRleCwgMSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVtb3ZlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgICAgIHRhc2suY2FsbGJhY2suYXBwbHkodGFzaywgYXJncyk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgaWYgKHEudGFza3MubGVuZ3RoICsgd29ya2VycyA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICBxLmRyYWluKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHEucHJvY2VzcygpO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciB3b3JrZXJzID0gMDtcbiAgICAgICAgdmFyIHdvcmtlcnNMaXN0ID0gW107XG4gICAgICAgIHZhciBxID0ge1xuICAgICAgICAgICAgdGFza3M6IFtdLFxuICAgICAgICAgICAgY29uY3VycmVuY3k6IGNvbmN1cnJlbmN5LFxuICAgICAgICAgICAgcGF5bG9hZDogcGF5bG9hZCxcbiAgICAgICAgICAgIHNhdHVyYXRlZDogbm9vcCxcbiAgICAgICAgICAgIGVtcHR5OiBub29wLFxuICAgICAgICAgICAgZHJhaW46IG5vb3AsXG4gICAgICAgICAgICBzdGFydGVkOiBmYWxzZSxcbiAgICAgICAgICAgIHBhdXNlZDogZmFsc2UsXG4gICAgICAgICAgICBwdXNoOiBmdW5jdGlvbiAoZGF0YSwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgICAgICBfaW5zZXJ0KHEsIGRhdGEsIGZhbHNlLCBjYWxsYmFjayk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAga2lsbDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHEuZHJhaW4gPSBub29wO1xuICAgICAgICAgICAgICAgIHEudGFza3MgPSBbXTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB1bnNoaWZ0OiBmdW5jdGlvbiAoZGF0YSwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgICAgICBfaW5zZXJ0KHEsIGRhdGEsIHRydWUsIGNhbGxiYWNrKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBwcm9jZXNzOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgaWYgKCFxLnBhdXNlZCAmJiB3b3JrZXJzIDwgcS5jb25jdXJyZW5jeSAmJiBxLnRhc2tzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICB3aGlsZSh3b3JrZXJzIDwgcS5jb25jdXJyZW5jeSAmJiBxLnRhc2tzLmxlbmd0aCl7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgdGFza3MgPSBxLnBheWxvYWQgP1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHEudGFza3Muc3BsaWNlKDAsIHEucGF5bG9hZCkgOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHEudGFza3Muc3BsaWNlKDAsIHEudGFza3MubGVuZ3RoKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGRhdGEgPSBfbWFwKHRhc2tzLCBmdW5jdGlvbiAodGFzaykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0YXNrLmRhdGE7XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHEudGFza3MubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcS5lbXB0eSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgd29ya2VycyArPSAxO1xuICAgICAgICAgICAgICAgICAgICAgICAgd29ya2Vyc0xpc3QucHVzaCh0YXNrc1swXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgY2IgPSBvbmx5X29uY2UoX25leHQocSwgdGFza3MpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHdvcmtlcihkYXRhLCBjYik7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbGVuZ3RoOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHEudGFza3MubGVuZ3RoO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHJ1bm5pbmc6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gd29ya2VycztcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB3b3JrZXJzTGlzdDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB3b3JrZXJzTGlzdDtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBpZGxlOiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcS50YXNrcy5sZW5ndGggKyB3b3JrZXJzID09PSAwO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHBhdXNlOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgcS5wYXVzZWQgPSB0cnVlO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHJlc3VtZTogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGlmIChxLnBhdXNlZCA9PT0gZmFsc2UpIHsgcmV0dXJuOyB9XG4gICAgICAgICAgICAgICAgcS5wYXVzZWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB2YXIgcmVzdW1lQ291bnQgPSBNYXRoLm1pbihxLmNvbmN1cnJlbmN5LCBxLnRhc2tzLmxlbmd0aCk7XG4gICAgICAgICAgICAgICAgLy8gTmVlZCB0byBjYWxsIHEucHJvY2VzcyBvbmNlIHBlciBjb25jdXJyZW50XG4gICAgICAgICAgICAgICAgLy8gd29ya2VyIHRvIHByZXNlcnZlIGZ1bGwgY29uY3VycmVuY3kgYWZ0ZXIgcGF1c2VcbiAgICAgICAgICAgICAgICBmb3IgKHZhciB3ID0gMTsgdyA8PSByZXN1bWVDb3VudDsgdysrKSB7XG4gICAgICAgICAgICAgICAgICAgIGFzeW5jLnNldEltbWVkaWF0ZShxLnByb2Nlc3MpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIHE7XG4gICAgfVxuXG4gICAgYXN5bmMucXVldWUgPSBmdW5jdGlvbiAod29ya2VyLCBjb25jdXJyZW5jeSkge1xuICAgICAgICB2YXIgcSA9IF9xdWV1ZShmdW5jdGlvbiAoaXRlbXMsIGNiKSB7XG4gICAgICAgICAgICB3b3JrZXIoaXRlbXNbMF0sIGNiKTtcbiAgICAgICAgfSwgY29uY3VycmVuY3ksIDEpO1xuXG4gICAgICAgIHJldHVybiBxO1xuICAgIH07XG5cbiAgICBhc3luYy5wcmlvcml0eVF1ZXVlID0gZnVuY3Rpb24gKHdvcmtlciwgY29uY3VycmVuY3kpIHtcblxuICAgICAgICBmdW5jdGlvbiBfY29tcGFyZVRhc2tzKGEsIGIpe1xuICAgICAgICAgICAgcmV0dXJuIGEucHJpb3JpdHkgLSBiLnByaW9yaXR5O1xuICAgICAgICB9XG5cbiAgICAgICAgZnVuY3Rpb24gX2JpbmFyeVNlYXJjaChzZXF1ZW5jZSwgaXRlbSwgY29tcGFyZSkge1xuICAgICAgICAgICAgdmFyIGJlZyA9IC0xLFxuICAgICAgICAgICAgICAgIGVuZCA9IHNlcXVlbmNlLmxlbmd0aCAtIDE7XG4gICAgICAgICAgICB3aGlsZSAoYmVnIDwgZW5kKSB7XG4gICAgICAgICAgICAgICAgdmFyIG1pZCA9IGJlZyArICgoZW5kIC0gYmVnICsgMSkgPj4+IDEpO1xuICAgICAgICAgICAgICAgIGlmIChjb21wYXJlKGl0ZW0sIHNlcXVlbmNlW21pZF0pID49IDApIHtcbiAgICAgICAgICAgICAgICAgICAgYmVnID0gbWlkO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGVuZCA9IG1pZCAtIDE7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGJlZztcbiAgICAgICAgfVxuXG4gICAgICAgIGZ1bmN0aW9uIF9pbnNlcnQocSwgZGF0YSwgcHJpb3JpdHksIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICBpZiAoY2FsbGJhY2sgIT0gbnVsbCAmJiB0eXBlb2YgY2FsbGJhY2sgIT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcInRhc2sgY2FsbGJhY2sgbXVzdCBiZSBhIGZ1bmN0aW9uXCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcS5zdGFydGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIGlmICghX2lzQXJyYXkoZGF0YSkpIHtcbiAgICAgICAgICAgICAgICBkYXRhID0gW2RhdGFdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYoZGF0YS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgICAvLyBjYWxsIGRyYWluIGltbWVkaWF0ZWx5IGlmIHRoZXJlIGFyZSBubyB0YXNrc1xuICAgICAgICAgICAgICAgIHJldHVybiBhc3luYy5zZXRJbW1lZGlhdGUoZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgICAgIHEuZHJhaW4oKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIF9hcnJheUVhY2goZGF0YSwgZnVuY3Rpb24odGFzaykge1xuICAgICAgICAgICAgICAgIHZhciBpdGVtID0ge1xuICAgICAgICAgICAgICAgICAgICBkYXRhOiB0YXNrLFxuICAgICAgICAgICAgICAgICAgICBwcmlvcml0eTogcHJpb3JpdHksXG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrOiB0eXBlb2YgY2FsbGJhY2sgPT09ICdmdW5jdGlvbicgPyBjYWxsYmFjayA6IG5vb3BcbiAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgcS50YXNrcy5zcGxpY2UoX2JpbmFyeVNlYXJjaChxLnRhc2tzLCBpdGVtLCBfY29tcGFyZVRhc2tzKSArIDEsIDAsIGl0ZW0pO1xuXG4gICAgICAgICAgICAgICAgaWYgKHEudGFza3MubGVuZ3RoID09PSBxLmNvbmN1cnJlbmN5KSB7XG4gICAgICAgICAgICAgICAgICAgIHEuc2F0dXJhdGVkKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGFzeW5jLnNldEltbWVkaWF0ZShxLnByb2Nlc3MpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBTdGFydCB3aXRoIGEgbm9ybWFsIHF1ZXVlXG4gICAgICAgIHZhciBxID0gYXN5bmMucXVldWUod29ya2VyLCBjb25jdXJyZW5jeSk7XG5cbiAgICAgICAgLy8gT3ZlcnJpZGUgcHVzaCB0byBhY2NlcHQgc2Vjb25kIHBhcmFtZXRlciByZXByZXNlbnRpbmcgcHJpb3JpdHlcbiAgICAgICAgcS5wdXNoID0gZnVuY3Rpb24gKGRhdGEsIHByaW9yaXR5LCBjYWxsYmFjaykge1xuICAgICAgICAgICAgX2luc2VydChxLCBkYXRhLCBwcmlvcml0eSwgY2FsbGJhY2spO1xuICAgICAgICB9O1xuXG4gICAgICAgIC8vIFJlbW92ZSB1bnNoaWZ0IGZ1bmN0aW9uXG4gICAgICAgIGRlbGV0ZSBxLnVuc2hpZnQ7XG5cbiAgICAgICAgcmV0dXJuIHE7XG4gICAgfTtcblxuICAgIGFzeW5jLmNhcmdvID0gZnVuY3Rpb24gKHdvcmtlciwgcGF5bG9hZCkge1xuICAgICAgICByZXR1cm4gX3F1ZXVlKHdvcmtlciwgMSwgcGF5bG9hZCk7XG4gICAgfTtcblxuICAgIGZ1bmN0aW9uIF9jb25zb2xlX2ZuKG5hbWUpIHtcbiAgICAgICAgcmV0dXJuIF9yZXN0UGFyYW0oZnVuY3Rpb24gKGZuLCBhcmdzKSB7XG4gICAgICAgICAgICBmbi5hcHBseShudWxsLCBhcmdzLmNvbmNhdChbX3Jlc3RQYXJhbShmdW5jdGlvbiAoZXJyLCBhcmdzKSB7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBjb25zb2xlID09PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoY29uc29sZS5lcnJvcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChjb25zb2xlW25hbWVdKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBfYXJyYXlFYWNoKGFyZ3MsIGZ1bmN0aW9uICh4KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZVtuYW1lXSh4KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSldKSk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBhc3luYy5sb2cgPSBfY29uc29sZV9mbignbG9nJyk7XG4gICAgYXN5bmMuZGlyID0gX2NvbnNvbGVfZm4oJ2RpcicpO1xuICAgIC8qYXN5bmMuaW5mbyA9IF9jb25zb2xlX2ZuKCdpbmZvJyk7XG4gICAgYXN5bmMud2FybiA9IF9jb25zb2xlX2ZuKCd3YXJuJyk7XG4gICAgYXN5bmMuZXJyb3IgPSBfY29uc29sZV9mbignZXJyb3InKTsqL1xuXG4gICAgYXN5bmMubWVtb2l6ZSA9IGZ1bmN0aW9uIChmbiwgaGFzaGVyKSB7XG4gICAgICAgIHZhciBtZW1vID0ge307XG4gICAgICAgIHZhciBxdWV1ZXMgPSB7fTtcbiAgICAgICAgaGFzaGVyID0gaGFzaGVyIHx8IGlkZW50aXR5O1xuICAgICAgICB2YXIgbWVtb2l6ZWQgPSBfcmVzdFBhcmFtKGZ1bmN0aW9uIG1lbW9pemVkKGFyZ3MpIHtcbiAgICAgICAgICAgIHZhciBjYWxsYmFjayA9IGFyZ3MucG9wKCk7XG4gICAgICAgICAgICB2YXIga2V5ID0gaGFzaGVyLmFwcGx5KG51bGwsIGFyZ3MpO1xuICAgICAgICAgICAgaWYgKGtleSBpbiBtZW1vKSB7XG4gICAgICAgICAgICAgICAgYXN5bmMuc2V0SW1tZWRpYXRlKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2suYXBwbHkobnVsbCwgbWVtb1trZXldKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGtleSBpbiBxdWV1ZXMpIHtcbiAgICAgICAgICAgICAgICBxdWV1ZXNba2V5XS5wdXNoKGNhbGxiYWNrKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHF1ZXVlc1trZXldID0gW2NhbGxiYWNrXTtcbiAgICAgICAgICAgICAgICBmbi5hcHBseShudWxsLCBhcmdzLmNvbmNhdChbX3Jlc3RQYXJhbShmdW5jdGlvbiAoYXJncykge1xuICAgICAgICAgICAgICAgICAgICBtZW1vW2tleV0gPSBhcmdzO1xuICAgICAgICAgICAgICAgICAgICB2YXIgcSA9IHF1ZXVlc1trZXldO1xuICAgICAgICAgICAgICAgICAgICBkZWxldGUgcXVldWVzW2tleV07XG4gICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwLCBsID0gcS5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHFbaV0uYXBwbHkobnVsbCwgYXJncyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KV0pKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIG1lbW9pemVkLm1lbW8gPSBtZW1vO1xuICAgICAgICBtZW1vaXplZC51bm1lbW9pemVkID0gZm47XG4gICAgICAgIHJldHVybiBtZW1vaXplZDtcbiAgICB9O1xuXG4gICAgYXN5bmMudW5tZW1vaXplID0gZnVuY3Rpb24gKGZuKSB7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gKGZuLnVubWVtb2l6ZWQgfHwgZm4pLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7XG4gICAgICAgIH07XG4gICAgfTtcblxuICAgIGZ1bmN0aW9uIF90aW1lcyhtYXBwZXIpIHtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChjb3VudCwgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICBtYXBwZXIoX3JhbmdlKGNvdW50KSwgaXRlcmF0b3IsIGNhbGxiYWNrKTtcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBhc3luYy50aW1lcyA9IF90aW1lcyhhc3luYy5tYXApO1xuICAgIGFzeW5jLnRpbWVzU2VyaWVzID0gX3RpbWVzKGFzeW5jLm1hcFNlcmllcyk7XG4gICAgYXN5bmMudGltZXNMaW1pdCA9IGZ1bmN0aW9uIChjb3VudCwgbGltaXQsIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICByZXR1cm4gYXN5bmMubWFwTGltaXQoX3JhbmdlKGNvdW50KSwgbGltaXQsIGl0ZXJhdG9yLCBjYWxsYmFjayk7XG4gICAgfTtcblxuICAgIGFzeW5jLnNlcSA9IGZ1bmN0aW9uICgvKiBmdW5jdGlvbnMuLi4gKi8pIHtcbiAgICAgICAgdmFyIGZucyA9IGFyZ3VtZW50cztcbiAgICAgICAgcmV0dXJuIF9yZXN0UGFyYW0oZnVuY3Rpb24gKGFyZ3MpIHtcbiAgICAgICAgICAgIHZhciB0aGF0ID0gdGhpcztcblxuICAgICAgICAgICAgdmFyIGNhbGxiYWNrID0gYXJnc1thcmdzLmxlbmd0aCAtIDFdO1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBjYWxsYmFjayA9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgYXJncy5wb3AoKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2sgPSBub29wO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBhc3luYy5yZWR1Y2UoZm5zLCBhcmdzLCBmdW5jdGlvbiAobmV3YXJncywgZm4sIGNiKSB7XG4gICAgICAgICAgICAgICAgZm4uYXBwbHkodGhhdCwgbmV3YXJncy5jb25jYXQoW19yZXN0UGFyYW0oZnVuY3Rpb24gKGVyciwgbmV4dGFyZ3MpIHtcbiAgICAgICAgICAgICAgICAgICAgY2IoZXJyLCBuZXh0YXJncyk7XG4gICAgICAgICAgICAgICAgfSldKSk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZnVuY3Rpb24gKGVyciwgcmVzdWx0cykge1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrLmFwcGx5KHRoYXQsIFtlcnJdLmNvbmNhdChyZXN1bHRzKSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfTtcblxuICAgIGFzeW5jLmNvbXBvc2UgPSBmdW5jdGlvbiAoLyogZnVuY3Rpb25zLi4uICovKSB7XG4gICAgICAgIHJldHVybiBhc3luYy5zZXEuYXBwbHkobnVsbCwgQXJyYXkucHJvdG90eXBlLnJldmVyc2UuY2FsbChhcmd1bWVudHMpKTtcbiAgICB9O1xuXG5cbiAgICBmdW5jdGlvbiBfYXBwbHlFYWNoKGVhY2hmbikge1xuICAgICAgICByZXR1cm4gX3Jlc3RQYXJhbShmdW5jdGlvbihmbnMsIGFyZ3MpIHtcbiAgICAgICAgICAgIHZhciBnbyA9IF9yZXN0UGFyYW0oZnVuY3Rpb24oYXJncykge1xuICAgICAgICAgICAgICAgIHZhciB0aGF0ID0gdGhpcztcbiAgICAgICAgICAgICAgICB2YXIgY2FsbGJhY2sgPSBhcmdzLnBvcCgpO1xuICAgICAgICAgICAgICAgIHJldHVybiBlYWNoZm4oZm5zLCBmdW5jdGlvbiAoZm4sIF8sIGNiKSB7XG4gICAgICAgICAgICAgICAgICAgIGZuLmFwcGx5KHRoYXQsIGFyZ3MuY29uY2F0KFtjYl0pKTtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIGNhbGxiYWNrKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgaWYgKGFyZ3MubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGdvLmFwcGx5KHRoaXMsIGFyZ3MpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGdvO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBhc3luYy5hcHBseUVhY2ggPSBfYXBwbHlFYWNoKGFzeW5jLmVhY2hPZik7XG4gICAgYXN5bmMuYXBwbHlFYWNoU2VyaWVzID0gX2FwcGx5RWFjaChhc3luYy5lYWNoT2ZTZXJpZXMpO1xuXG5cbiAgICBhc3luYy5mb3JldmVyID0gZnVuY3Rpb24gKGZuLCBjYWxsYmFjaykge1xuICAgICAgICB2YXIgZG9uZSA9IG9ubHlfb25jZShjYWxsYmFjayB8fCBub29wKTtcbiAgICAgICAgdmFyIHRhc2sgPSBlbnN1cmVBc3luYyhmbik7XG4gICAgICAgIGZ1bmN0aW9uIG5leHQoZXJyKSB7XG4gICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGRvbmUoZXJyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRhc2sobmV4dCk7XG4gICAgICAgIH1cbiAgICAgICAgbmV4dCgpO1xuICAgIH07XG5cbiAgICBmdW5jdGlvbiBlbnN1cmVBc3luYyhmbikge1xuICAgICAgICByZXR1cm4gX3Jlc3RQYXJhbShmdW5jdGlvbiAoYXJncykge1xuICAgICAgICAgICAgdmFyIGNhbGxiYWNrID0gYXJncy5wb3AoKTtcbiAgICAgICAgICAgIGFyZ3MucHVzaChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgdmFyIGlubmVyQXJncyA9IGFyZ3VtZW50cztcbiAgICAgICAgICAgICAgICBpZiAoc3luYykge1xuICAgICAgICAgICAgICAgICAgICBhc3luYy5zZXRJbW1lZGlhdGUoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2suYXBwbHkobnVsbCwgaW5uZXJBcmdzKTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2suYXBwbHkobnVsbCwgaW5uZXJBcmdzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHZhciBzeW5jID0gdHJ1ZTtcbiAgICAgICAgICAgIGZuLmFwcGx5KHRoaXMsIGFyZ3MpO1xuICAgICAgICAgICAgc3luYyA9IGZhbHNlO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBhc3luYy5lbnN1cmVBc3luYyA9IGVuc3VyZUFzeW5jO1xuXG4gICAgYXN5bmMuY29uc3RhbnQgPSBfcmVzdFBhcmFtKGZ1bmN0aW9uKHZhbHVlcykge1xuICAgICAgICB2YXIgYXJncyA9IFtudWxsXS5jb25jYXQodmFsdWVzKTtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChjYWxsYmFjaykge1xuICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrLmFwcGx5KHRoaXMsIGFyZ3MpO1xuICAgICAgICB9O1xuICAgIH0pO1xuXG4gICAgYXN5bmMud3JhcFN5bmMgPVxuICAgIGFzeW5jLmFzeW5jaWZ5ID0gZnVuY3Rpb24gYXN5bmNpZnkoZnVuYykge1xuICAgICAgICByZXR1cm4gX3Jlc3RQYXJhbShmdW5jdGlvbiAoYXJncykge1xuICAgICAgICAgICAgdmFyIGNhbGxiYWNrID0gYXJncy5wb3AoKTtcbiAgICAgICAgICAgIHZhciByZXN1bHQ7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIHJlc3VsdCA9IGZ1bmMuYXBwbHkodGhpcywgYXJncyk7XG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gaWYgcmVzdWx0IGlzIFByb21pc2Ugb2JqZWN0XG4gICAgICAgICAgICBpZiAoX2lzT2JqZWN0KHJlc3VsdCkgJiYgdHlwZW9mIHJlc3VsdC50aGVuID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgICAgICAgICByZXN1bHQudGhlbihmdW5jdGlvbih2YWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhudWxsLCB2YWx1ZSk7XG4gICAgICAgICAgICAgICAgfSlbXCJjYXRjaFwiXShmdW5jdGlvbihlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soZXJyLm1lc3NhZ2UgPyBlcnIgOiBuZXcgRXJyb3IoZXJyKSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrKG51bGwsIHJlc3VsdCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH07XG5cbiAgICAvLyBOb2RlLmpzXG4gICAgaWYgKHR5cGVvZiBtb2R1bGUgPT09ICdvYmplY3QnICYmIG1vZHVsZS5leHBvcnRzKSB7XG4gICAgICAgIG1vZHVsZS5leHBvcnRzID0gYXN5bmM7XG4gICAgfVxuICAgIC8vIEFNRCAvIFJlcXVpcmVKU1xuICAgIGVsc2UgaWYgKHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCkge1xuICAgICAgICBkZWZpbmUoW10sIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiBhc3luYztcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8vIGluY2x1ZGVkIGRpcmVjdGx5IHZpYSA8c2NyaXB0PiB0YWdcbiAgICBlbHNlIHtcbiAgICAgICAgcm9vdC5hc3luYyA9IGFzeW5jO1xuICAgIH1cblxufSgpKTtcbiIsIi8vIENvcHlyaWdodCBKb3llbnQsIEluYy4gYW5kIG90aGVyIE5vZGUgY29udHJpYnV0b3JzLlxuLy9cbi8vIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhXG4vLyBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlXG4vLyBcIlNvZnR3YXJlXCIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmdcbi8vIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCxcbi8vIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXRcbi8vIHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZVxuLy8gZm9sbG93aW5nIGNvbmRpdGlvbnM6XG4vL1xuLy8gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWRcbi8vIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuLy9cbi8vIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1Ncbi8vIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0Zcbi8vIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU5cbi8vIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLFxuLy8gREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SXG4vLyBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFXG4vLyBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLlxuXG4vLyByZXNvbHZlcyAuIGFuZCAuLiBlbGVtZW50cyBpbiBhIHBhdGggYXJyYXkgd2l0aCBkaXJlY3RvcnkgbmFtZXMgdGhlcmVcbi8vIG11c3QgYmUgbm8gc2xhc2hlcywgZW1wdHkgZWxlbWVudHMsIG9yIGRldmljZSBuYW1lcyAoYzpcXCkgaW4gdGhlIGFycmF5XG4vLyAoc28gYWxzbyBubyBsZWFkaW5nIGFuZCB0cmFpbGluZyBzbGFzaGVzIC0gaXQgZG9lcyBub3QgZGlzdGluZ3Vpc2hcbi8vIHJlbGF0aXZlIGFuZCBhYnNvbHV0ZSBwYXRocylcbmZ1bmN0aW9uIG5vcm1hbGl6ZUFycmF5KHBhcnRzLCBhbGxvd0Fib3ZlUm9vdCkge1xuICAvLyBpZiB0aGUgcGF0aCB0cmllcyB0byBnbyBhYm92ZSB0aGUgcm9vdCwgYHVwYCBlbmRzIHVwID4gMFxuICB2YXIgdXAgPSAwO1xuICBmb3IgKHZhciBpID0gcGFydHMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICB2YXIgbGFzdCA9IHBhcnRzW2ldO1xuICAgIGlmIChsYXN0ID09PSAnLicpIHtcbiAgICAgIHBhcnRzLnNwbGljZShpLCAxKTtcbiAgICB9IGVsc2UgaWYgKGxhc3QgPT09ICcuLicpIHtcbiAgICAgIHBhcnRzLnNwbGljZShpLCAxKTtcbiAgICAgIHVwKys7XG4gICAgfSBlbHNlIGlmICh1cCkge1xuICAgICAgcGFydHMuc3BsaWNlKGksIDEpO1xuICAgICAgdXAtLTtcbiAgICB9XG4gIH1cblxuICAvLyBpZiB0aGUgcGF0aCBpcyBhbGxvd2VkIHRvIGdvIGFib3ZlIHRoZSByb290LCByZXN0b3JlIGxlYWRpbmcgLi5zXG4gIGlmIChhbGxvd0Fib3ZlUm9vdCkge1xuICAgIGZvciAoOyB1cC0tOyB1cCkge1xuICAgICAgcGFydHMudW5zaGlmdCgnLi4nKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gcGFydHM7XG59XG5cbi8vIFNwbGl0IGEgZmlsZW5hbWUgaW50byBbcm9vdCwgZGlyLCBiYXNlbmFtZSwgZXh0XSwgdW5peCB2ZXJzaW9uXG4vLyAncm9vdCcgaXMganVzdCBhIHNsYXNoLCBvciBub3RoaW5nLlxudmFyIHNwbGl0UGF0aFJlID1cbiAgICAvXihcXC8/fCkoW1xcc1xcU10qPykoKD86XFwuezEsMn18W15cXC9dKz98KShcXC5bXi5cXC9dKnwpKSg/OltcXC9dKikkLztcbnZhciBzcGxpdFBhdGggPSBmdW5jdGlvbihmaWxlbmFtZSkge1xuICByZXR1cm4gc3BsaXRQYXRoUmUuZXhlYyhmaWxlbmFtZSkuc2xpY2UoMSk7XG59O1xuXG4vLyBwYXRoLnJlc29sdmUoW2Zyb20gLi4uXSwgdG8pXG4vLyBwb3NpeCB2ZXJzaW9uXG5leHBvcnRzLnJlc29sdmUgPSBmdW5jdGlvbigpIHtcbiAgdmFyIHJlc29sdmVkUGF0aCA9ICcnLFxuICAgICAgcmVzb2x2ZWRBYnNvbHV0ZSA9IGZhbHNlO1xuXG4gIGZvciAodmFyIGkgPSBhcmd1bWVudHMubGVuZ3RoIC0gMTsgaSA+PSAtMSAmJiAhcmVzb2x2ZWRBYnNvbHV0ZTsgaS0tKSB7XG4gICAgdmFyIHBhdGggPSAoaSA+PSAwKSA/IGFyZ3VtZW50c1tpXSA6IHByb2Nlc3MuY3dkKCk7XG5cbiAgICAvLyBTa2lwIGVtcHR5IGFuZCBpbnZhbGlkIGVudHJpZXNcbiAgICBpZiAodHlwZW9mIHBhdGggIT09ICdzdHJpbmcnKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdBcmd1bWVudHMgdG8gcGF0aC5yZXNvbHZlIG11c3QgYmUgc3RyaW5ncycpO1xuICAgIH0gZWxzZSBpZiAoIXBhdGgpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIHJlc29sdmVkUGF0aCA9IHBhdGggKyAnLycgKyByZXNvbHZlZFBhdGg7XG4gICAgcmVzb2x2ZWRBYnNvbHV0ZSA9IHBhdGguY2hhckF0KDApID09PSAnLyc7XG4gIH1cblxuICAvLyBBdCB0aGlzIHBvaW50IHRoZSBwYXRoIHNob3VsZCBiZSByZXNvbHZlZCB0byBhIGZ1bGwgYWJzb2x1dGUgcGF0aCwgYnV0XG4gIC8vIGhhbmRsZSByZWxhdGl2ZSBwYXRocyB0byBiZSBzYWZlIChtaWdodCBoYXBwZW4gd2hlbiBwcm9jZXNzLmN3ZCgpIGZhaWxzKVxuXG4gIC8vIE5vcm1hbGl6ZSB0aGUgcGF0aFxuICByZXNvbHZlZFBhdGggPSBub3JtYWxpemVBcnJheShmaWx0ZXIocmVzb2x2ZWRQYXRoLnNwbGl0KCcvJyksIGZ1bmN0aW9uKHApIHtcbiAgICByZXR1cm4gISFwO1xuICB9KSwgIXJlc29sdmVkQWJzb2x1dGUpLmpvaW4oJy8nKTtcblxuICByZXR1cm4gKChyZXNvbHZlZEFic29sdXRlID8gJy8nIDogJycpICsgcmVzb2x2ZWRQYXRoKSB8fCAnLic7XG59O1xuXG4vLyBwYXRoLm5vcm1hbGl6ZShwYXRoKVxuLy8gcG9zaXggdmVyc2lvblxuZXhwb3J0cy5ub3JtYWxpemUgPSBmdW5jdGlvbihwYXRoKSB7XG4gIHZhciBpc0Fic29sdXRlID0gZXhwb3J0cy5pc0Fic29sdXRlKHBhdGgpLFxuICAgICAgdHJhaWxpbmdTbGFzaCA9IHN1YnN0cihwYXRoLCAtMSkgPT09ICcvJztcblxuICAvLyBOb3JtYWxpemUgdGhlIHBhdGhcbiAgcGF0aCA9IG5vcm1hbGl6ZUFycmF5KGZpbHRlcihwYXRoLnNwbGl0KCcvJyksIGZ1bmN0aW9uKHApIHtcbiAgICByZXR1cm4gISFwO1xuICB9KSwgIWlzQWJzb2x1dGUpLmpvaW4oJy8nKTtcblxuICBpZiAoIXBhdGggJiYgIWlzQWJzb2x1dGUpIHtcbiAgICBwYXRoID0gJy4nO1xuICB9XG4gIGlmIChwYXRoICYmIHRyYWlsaW5nU2xhc2gpIHtcbiAgICBwYXRoICs9ICcvJztcbiAgfVxuXG4gIHJldHVybiAoaXNBYnNvbHV0ZSA/ICcvJyA6ICcnKSArIHBhdGg7XG59O1xuXG4vLyBwb3NpeCB2ZXJzaW9uXG5leHBvcnRzLmlzQWJzb2x1dGUgPSBmdW5jdGlvbihwYXRoKSB7XG4gIHJldHVybiBwYXRoLmNoYXJBdCgwKSA9PT0gJy8nO1xufTtcblxuLy8gcG9zaXggdmVyc2lvblxuZXhwb3J0cy5qb2luID0gZnVuY3Rpb24oKSB7XG4gIHZhciBwYXRocyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMCk7XG4gIHJldHVybiBleHBvcnRzLm5vcm1hbGl6ZShmaWx0ZXIocGF0aHMsIGZ1bmN0aW9uKHAsIGluZGV4KSB7XG4gICAgaWYgKHR5cGVvZiBwICE9PSAnc3RyaW5nJykge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignQXJndW1lbnRzIHRvIHBhdGguam9pbiBtdXN0IGJlIHN0cmluZ3MnKTtcbiAgICB9XG4gICAgcmV0dXJuIHA7XG4gIH0pLmpvaW4oJy8nKSk7XG59O1xuXG5cbi8vIHBhdGgucmVsYXRpdmUoZnJvbSwgdG8pXG4vLyBwb3NpeCB2ZXJzaW9uXG5leHBvcnRzLnJlbGF0aXZlID0gZnVuY3Rpb24oZnJvbSwgdG8pIHtcbiAgZnJvbSA9IGV4cG9ydHMucmVzb2x2ZShmcm9tKS5zdWJzdHIoMSk7XG4gIHRvID0gZXhwb3J0cy5yZXNvbHZlKHRvKS5zdWJzdHIoMSk7XG5cbiAgZnVuY3Rpb24gdHJpbShhcnIpIHtcbiAgICB2YXIgc3RhcnQgPSAwO1xuICAgIGZvciAoOyBzdGFydCA8IGFyci5sZW5ndGg7IHN0YXJ0KyspIHtcbiAgICAgIGlmIChhcnJbc3RhcnRdICE9PSAnJykgYnJlYWs7XG4gICAgfVxuXG4gICAgdmFyIGVuZCA9IGFyci5sZW5ndGggLSAxO1xuICAgIGZvciAoOyBlbmQgPj0gMDsgZW5kLS0pIHtcbiAgICAgIGlmIChhcnJbZW5kXSAhPT0gJycpIGJyZWFrO1xuICAgIH1cblxuICAgIGlmIChzdGFydCA+IGVuZCkgcmV0dXJuIFtdO1xuICAgIHJldHVybiBhcnIuc2xpY2Uoc3RhcnQsIGVuZCAtIHN0YXJ0ICsgMSk7XG4gIH1cblxuICB2YXIgZnJvbVBhcnRzID0gdHJpbShmcm9tLnNwbGl0KCcvJykpO1xuICB2YXIgdG9QYXJ0cyA9IHRyaW0odG8uc3BsaXQoJy8nKSk7XG5cbiAgdmFyIGxlbmd0aCA9IE1hdGgubWluKGZyb21QYXJ0cy5sZW5ndGgsIHRvUGFydHMubGVuZ3RoKTtcbiAgdmFyIHNhbWVQYXJ0c0xlbmd0aCA9IGxlbmd0aDtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgIGlmIChmcm9tUGFydHNbaV0gIT09IHRvUGFydHNbaV0pIHtcbiAgICAgIHNhbWVQYXJ0c0xlbmd0aCA9IGk7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICB2YXIgb3V0cHV0UGFydHMgPSBbXTtcbiAgZm9yICh2YXIgaSA9IHNhbWVQYXJ0c0xlbmd0aDsgaSA8IGZyb21QYXJ0cy5sZW5ndGg7IGkrKykge1xuICAgIG91dHB1dFBhcnRzLnB1c2goJy4uJyk7XG4gIH1cblxuICBvdXRwdXRQYXJ0cyA9IG91dHB1dFBhcnRzLmNvbmNhdCh0b1BhcnRzLnNsaWNlKHNhbWVQYXJ0c0xlbmd0aCkpO1xuXG4gIHJldHVybiBvdXRwdXRQYXJ0cy5qb2luKCcvJyk7XG59O1xuXG5leHBvcnRzLnNlcCA9ICcvJztcbmV4cG9ydHMuZGVsaW1pdGVyID0gJzonO1xuXG5leHBvcnRzLmRpcm5hbWUgPSBmdW5jdGlvbihwYXRoKSB7XG4gIHZhciByZXN1bHQgPSBzcGxpdFBhdGgocGF0aCksXG4gICAgICByb290ID0gcmVzdWx0WzBdLFxuICAgICAgZGlyID0gcmVzdWx0WzFdO1xuXG4gIGlmICghcm9vdCAmJiAhZGlyKSB7XG4gICAgLy8gTm8gZGlybmFtZSB3aGF0c29ldmVyXG4gICAgcmV0dXJuICcuJztcbiAgfVxuXG4gIGlmIChkaXIpIHtcbiAgICAvLyBJdCBoYXMgYSBkaXJuYW1lLCBzdHJpcCB0cmFpbGluZyBzbGFzaFxuICAgIGRpciA9IGRpci5zdWJzdHIoMCwgZGlyLmxlbmd0aCAtIDEpO1xuICB9XG5cbiAgcmV0dXJuIHJvb3QgKyBkaXI7XG59O1xuXG5cbmV4cG9ydHMuYmFzZW5hbWUgPSBmdW5jdGlvbihwYXRoLCBleHQpIHtcbiAgdmFyIGYgPSBzcGxpdFBhdGgocGF0aClbMl07XG4gIC8vIFRPRE86IG1ha2UgdGhpcyBjb21wYXJpc29uIGNhc2UtaW5zZW5zaXRpdmUgb24gd2luZG93cz9cbiAgaWYgKGV4dCAmJiBmLnN1YnN0cigtMSAqIGV4dC5sZW5ndGgpID09PSBleHQpIHtcbiAgICBmID0gZi5zdWJzdHIoMCwgZi5sZW5ndGggLSBleHQubGVuZ3RoKTtcbiAgfVxuICByZXR1cm4gZjtcbn07XG5cblxuZXhwb3J0cy5leHRuYW1lID0gZnVuY3Rpb24ocGF0aCkge1xuICByZXR1cm4gc3BsaXRQYXRoKHBhdGgpWzNdO1xufTtcblxuZnVuY3Rpb24gZmlsdGVyICh4cywgZikge1xuICAgIGlmICh4cy5maWx0ZXIpIHJldHVybiB4cy5maWx0ZXIoZik7XG4gICAgdmFyIHJlcyA9IFtdO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgeHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgaWYgKGYoeHNbaV0sIGksIHhzKSkgcmVzLnB1c2goeHNbaV0pO1xuICAgIH1cbiAgICByZXR1cm4gcmVzO1xufVxuXG4vLyBTdHJpbmcucHJvdG90eXBlLnN1YnN0ciAtIG5lZ2F0aXZlIGluZGV4IGRvbid0IHdvcmsgaW4gSUU4XG52YXIgc3Vic3RyID0gJ2FiJy5zdWJzdHIoLTEpID09PSAnYidcbiAgICA/IGZ1bmN0aW9uIChzdHIsIHN0YXJ0LCBsZW4pIHsgcmV0dXJuIHN0ci5zdWJzdHIoc3RhcnQsIGxlbikgfVxuICAgIDogZnVuY3Rpb24gKHN0ciwgc3RhcnQsIGxlbikge1xuICAgICAgICBpZiAoc3RhcnQgPCAwKSBzdGFydCA9IHN0ci5sZW5ndGggKyBzdGFydDtcbiAgICAgICAgcmV0dXJuIHN0ci5zdWJzdHIoc3RhcnQsIGxlbik7XG4gICAgfVxuO1xuIiwiLy8gc2hpbSBmb3IgdXNpbmcgcHJvY2VzcyBpbiBicm93c2VyXG5cbnZhciBwcm9jZXNzID0gbW9kdWxlLmV4cG9ydHMgPSB7fTtcbnZhciBxdWV1ZSA9IFtdO1xudmFyIGRyYWluaW5nID0gZmFsc2U7XG52YXIgY3VycmVudFF1ZXVlO1xudmFyIHF1ZXVlSW5kZXggPSAtMTtcblxuZnVuY3Rpb24gY2xlYW5VcE5leHRUaWNrKCkge1xuICAgIGRyYWluaW5nID0gZmFsc2U7XG4gICAgaWYgKGN1cnJlbnRRdWV1ZS5sZW5ndGgpIHtcbiAgICAgICAgcXVldWUgPSBjdXJyZW50UXVldWUuY29uY2F0KHF1ZXVlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICBxdWV1ZUluZGV4ID0gLTE7XG4gICAgfVxuICAgIGlmIChxdWV1ZS5sZW5ndGgpIHtcbiAgICAgICAgZHJhaW5RdWV1ZSgpO1xuICAgIH1cbn1cblxuZnVuY3Rpb24gZHJhaW5RdWV1ZSgpIHtcbiAgICBpZiAoZHJhaW5pbmcpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB2YXIgdGltZW91dCA9IHNldFRpbWVvdXQoY2xlYW5VcE5leHRUaWNrKTtcbiAgICBkcmFpbmluZyA9IHRydWU7XG5cbiAgICB2YXIgbGVuID0gcXVldWUubGVuZ3RoO1xuICAgIHdoaWxlKGxlbikge1xuICAgICAgICBjdXJyZW50UXVldWUgPSBxdWV1ZTtcbiAgICAgICAgcXVldWUgPSBbXTtcbiAgICAgICAgd2hpbGUgKCsrcXVldWVJbmRleCA8IGxlbikge1xuICAgICAgICAgICAgaWYgKGN1cnJlbnRRdWV1ZSkge1xuICAgICAgICAgICAgICAgIGN1cnJlbnRRdWV1ZVtxdWV1ZUluZGV4XS5ydW4oKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBxdWV1ZUluZGV4ID0gLTE7XG4gICAgICAgIGxlbiA9IHF1ZXVlLmxlbmd0aDtcbiAgICB9XG4gICAgY3VycmVudFF1ZXVlID0gbnVsbDtcbiAgICBkcmFpbmluZyA9IGZhbHNlO1xuICAgIGNsZWFyVGltZW91dCh0aW1lb3V0KTtcbn1cblxucHJvY2Vzcy5uZXh0VGljayA9IGZ1bmN0aW9uIChmdW4pIHtcbiAgICB2YXIgYXJncyA9IG5ldyBBcnJheShhcmd1bWVudHMubGVuZ3RoIC0gMSk7XG4gICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPiAxKSB7XG4gICAgICAgIGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBhcmdzW2kgLSAxXSA9IGFyZ3VtZW50c1tpXTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBxdWV1ZS5wdXNoKG5ldyBJdGVtKGZ1biwgYXJncykpO1xuICAgIGlmIChxdWV1ZS5sZW5ndGggPT09IDEgJiYgIWRyYWluaW5nKSB7XG4gICAgICAgIHNldFRpbWVvdXQoZHJhaW5RdWV1ZSwgMCk7XG4gICAgfVxufTtcblxuLy8gdjggbGlrZXMgcHJlZGljdGlibGUgb2JqZWN0c1xuZnVuY3Rpb24gSXRlbShmdW4sIGFycmF5KSB7XG4gICAgdGhpcy5mdW4gPSBmdW47XG4gICAgdGhpcy5hcnJheSA9IGFycmF5O1xufVxuSXRlbS5wcm90b3R5cGUucnVuID0gZnVuY3Rpb24gKCkge1xuICAgIHRoaXMuZnVuLmFwcGx5KG51bGwsIHRoaXMuYXJyYXkpO1xufTtcbnByb2Nlc3MudGl0bGUgPSAnYnJvd3Nlcic7XG5wcm9jZXNzLmJyb3dzZXIgPSB0cnVlO1xucHJvY2Vzcy5lbnYgPSB7fTtcbnByb2Nlc3MuYXJndiA9IFtdO1xucHJvY2Vzcy52ZXJzaW9uID0gJyc7IC8vIGVtcHR5IHN0cmluZyB0byBhdm9pZCByZWdleHAgaXNzdWVzXG5wcm9jZXNzLnZlcnNpb25zID0ge307XG5cbmZ1bmN0aW9uIG5vb3AoKSB7fVxuXG5wcm9jZXNzLm9uID0gbm9vcDtcbnByb2Nlc3MuYWRkTGlzdGVuZXIgPSBub29wO1xucHJvY2Vzcy5vbmNlID0gbm9vcDtcbnByb2Nlc3Mub2ZmID0gbm9vcDtcbnByb2Nlc3MucmVtb3ZlTGlzdGVuZXIgPSBub29wO1xucHJvY2Vzcy5yZW1vdmVBbGxMaXN0ZW5lcnMgPSBub29wO1xucHJvY2Vzcy5lbWl0ID0gbm9vcDtcblxucHJvY2Vzcy5iaW5kaW5nID0gZnVuY3Rpb24gKG5hbWUpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3Byb2Nlc3MuYmluZGluZyBpcyBub3Qgc3VwcG9ydGVkJyk7XG59O1xuXG5wcm9jZXNzLmN3ZCA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuICcvJyB9O1xucHJvY2Vzcy5jaGRpciA9IGZ1bmN0aW9uIChkaXIpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3Byb2Nlc3MuY2hkaXIgaXMgbm90IHN1cHBvcnRlZCcpO1xufTtcbnByb2Nlc3MudW1hc2sgPSBmdW5jdGlvbigpIHsgcmV0dXJuIDA7IH07XG4iLCIvKiEgaHR0cHM6Ly9tdGhzLmJlL3B1bnljb2RlIHYxLjQuMCBieSBAbWF0aGlhcyAqL1xuOyhmdW5jdGlvbihyb290KSB7XG5cblx0LyoqIERldGVjdCBmcmVlIHZhcmlhYmxlcyAqL1xuXHR2YXIgZnJlZUV4cG9ydHMgPSB0eXBlb2YgZXhwb3J0cyA9PSAnb2JqZWN0JyAmJiBleHBvcnRzICYmXG5cdFx0IWV4cG9ydHMubm9kZVR5cGUgJiYgZXhwb3J0cztcblx0dmFyIGZyZWVNb2R1bGUgPSB0eXBlb2YgbW9kdWxlID09ICdvYmplY3QnICYmIG1vZHVsZSAmJlxuXHRcdCFtb2R1bGUubm9kZVR5cGUgJiYgbW9kdWxlO1xuXHR2YXIgZnJlZUdsb2JhbCA9IHR5cGVvZiBnbG9iYWwgPT0gJ29iamVjdCcgJiYgZ2xvYmFsO1xuXHRpZiAoXG5cdFx0ZnJlZUdsb2JhbC5nbG9iYWwgPT09IGZyZWVHbG9iYWwgfHxcblx0XHRmcmVlR2xvYmFsLndpbmRvdyA9PT0gZnJlZUdsb2JhbCB8fFxuXHRcdGZyZWVHbG9iYWwuc2VsZiA9PT0gZnJlZUdsb2JhbFxuXHQpIHtcblx0XHRyb290ID0gZnJlZUdsb2JhbDtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGUgYHB1bnljb2RlYCBvYmplY3QuXG5cdCAqIEBuYW1lIHB1bnljb2RlXG5cdCAqIEB0eXBlIE9iamVjdFxuXHQgKi9cblx0dmFyIHB1bnljb2RlLFxuXG5cdC8qKiBIaWdoZXN0IHBvc2l0aXZlIHNpZ25lZCAzMi1iaXQgZmxvYXQgdmFsdWUgKi9cblx0bWF4SW50ID0gMjE0NzQ4MzY0NywgLy8gYWthLiAweDdGRkZGRkZGIG9yIDJeMzEtMVxuXG5cdC8qKiBCb290c3RyaW5nIHBhcmFtZXRlcnMgKi9cblx0YmFzZSA9IDM2LFxuXHR0TWluID0gMSxcblx0dE1heCA9IDI2LFxuXHRza2V3ID0gMzgsXG5cdGRhbXAgPSA3MDAsXG5cdGluaXRpYWxCaWFzID0gNzIsXG5cdGluaXRpYWxOID0gMTI4LCAvLyAweDgwXG5cdGRlbGltaXRlciA9ICctJywgLy8gJ1xceDJEJ1xuXG5cdC8qKiBSZWd1bGFyIGV4cHJlc3Npb25zICovXG5cdHJlZ2V4UHVueWNvZGUgPSAvXnhuLS0vLFxuXHRyZWdleE5vbkFTQ0lJID0gL1teXFx4MjAtXFx4N0VdLywgLy8gdW5wcmludGFibGUgQVNDSUkgY2hhcnMgKyBub24tQVNDSUkgY2hhcnNcblx0cmVnZXhTZXBhcmF0b3JzID0gL1tcXHgyRVxcdTMwMDJcXHVGRjBFXFx1RkY2MV0vZywgLy8gUkZDIDM0OTAgc2VwYXJhdG9yc1xuXG5cdC8qKiBFcnJvciBtZXNzYWdlcyAqL1xuXHRlcnJvcnMgPSB7XG5cdFx0J292ZXJmbG93JzogJ092ZXJmbG93OiBpbnB1dCBuZWVkcyB3aWRlciBpbnRlZ2VycyB0byBwcm9jZXNzJyxcblx0XHQnbm90LWJhc2ljJzogJ0lsbGVnYWwgaW5wdXQgPj0gMHg4MCAobm90IGEgYmFzaWMgY29kZSBwb2ludCknLFxuXHRcdCdpbnZhbGlkLWlucHV0JzogJ0ludmFsaWQgaW5wdXQnXG5cdH0sXG5cblx0LyoqIENvbnZlbmllbmNlIHNob3J0Y3V0cyAqL1xuXHRiYXNlTWludXNUTWluID0gYmFzZSAtIHRNaW4sXG5cdGZsb29yID0gTWF0aC5mbG9vcixcblx0c3RyaW5nRnJvbUNoYXJDb2RlID0gU3RyaW5nLmZyb21DaGFyQ29kZSxcblxuXHQvKiogVGVtcG9yYXJ5IHZhcmlhYmxlICovXG5cdGtleTtcblxuXHQvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cblxuXHQvKipcblx0ICogQSBnZW5lcmljIGVycm9yIHV0aWxpdHkgZnVuY3Rpb24uXG5cdCAqIEBwcml2YXRlXG5cdCAqIEBwYXJhbSB7U3RyaW5nfSB0eXBlIFRoZSBlcnJvciB0eXBlLlxuXHQgKiBAcmV0dXJucyB7RXJyb3J9IFRocm93cyBhIGBSYW5nZUVycm9yYCB3aXRoIHRoZSBhcHBsaWNhYmxlIGVycm9yIG1lc3NhZ2UuXG5cdCAqL1xuXHRmdW5jdGlvbiBlcnJvcih0eXBlKSB7XG5cdFx0dGhyb3cgbmV3IFJhbmdlRXJyb3IoZXJyb3JzW3R5cGVdKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBBIGdlbmVyaWMgYEFycmF5I21hcGAgdXRpbGl0eSBmdW5jdGlvbi5cblx0ICogQHByaXZhdGVcblx0ICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIGl0ZXJhdGUgb3Zlci5cblx0ICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2sgVGhlIGZ1bmN0aW9uIHRoYXQgZ2V0cyBjYWxsZWQgZm9yIGV2ZXJ5IGFycmF5XG5cdCAqIGl0ZW0uXG5cdCAqIEByZXR1cm5zIHtBcnJheX0gQSBuZXcgYXJyYXkgb2YgdmFsdWVzIHJldHVybmVkIGJ5IHRoZSBjYWxsYmFjayBmdW5jdGlvbi5cblx0ICovXG5cdGZ1bmN0aW9uIG1hcChhcnJheSwgZm4pIHtcblx0XHR2YXIgbGVuZ3RoID0gYXJyYXkubGVuZ3RoO1xuXHRcdHZhciByZXN1bHQgPSBbXTtcblx0XHR3aGlsZSAobGVuZ3RoLS0pIHtcblx0XHRcdHJlc3VsdFtsZW5ndGhdID0gZm4oYXJyYXlbbGVuZ3RoXSk7XG5cdFx0fVxuXHRcdHJldHVybiByZXN1bHQ7XG5cdH1cblxuXHQvKipcblx0ICogQSBzaW1wbGUgYEFycmF5I21hcGAtbGlrZSB3cmFwcGVyIHRvIHdvcmsgd2l0aCBkb21haW4gbmFtZSBzdHJpbmdzIG9yIGVtYWlsXG5cdCAqIGFkZHJlc3Nlcy5cblx0ICogQHByaXZhdGVcblx0ICogQHBhcmFtIHtTdHJpbmd9IGRvbWFpbiBUaGUgZG9tYWluIG5hbWUgb3IgZW1haWwgYWRkcmVzcy5cblx0ICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2sgVGhlIGZ1bmN0aW9uIHRoYXQgZ2V0cyBjYWxsZWQgZm9yIGV2ZXJ5XG5cdCAqIGNoYXJhY3Rlci5cblx0ICogQHJldHVybnMge0FycmF5fSBBIG5ldyBzdHJpbmcgb2YgY2hhcmFjdGVycyByZXR1cm5lZCBieSB0aGUgY2FsbGJhY2tcblx0ICogZnVuY3Rpb24uXG5cdCAqL1xuXHRmdW5jdGlvbiBtYXBEb21haW4oc3RyaW5nLCBmbikge1xuXHRcdHZhciBwYXJ0cyA9IHN0cmluZy5zcGxpdCgnQCcpO1xuXHRcdHZhciByZXN1bHQgPSAnJztcblx0XHRpZiAocGFydHMubGVuZ3RoID4gMSkge1xuXHRcdFx0Ly8gSW4gZW1haWwgYWRkcmVzc2VzLCBvbmx5IHRoZSBkb21haW4gbmFtZSBzaG91bGQgYmUgcHVueWNvZGVkLiBMZWF2ZVxuXHRcdFx0Ly8gdGhlIGxvY2FsIHBhcnQgKGkuZS4gZXZlcnl0aGluZyB1cCB0byBgQGApIGludGFjdC5cblx0XHRcdHJlc3VsdCA9IHBhcnRzWzBdICsgJ0AnO1xuXHRcdFx0c3RyaW5nID0gcGFydHNbMV07XG5cdFx0fVxuXHRcdC8vIEF2b2lkIGBzcGxpdChyZWdleClgIGZvciBJRTggY29tcGF0aWJpbGl0eS4gU2VlICMxNy5cblx0XHRzdHJpbmcgPSBzdHJpbmcucmVwbGFjZShyZWdleFNlcGFyYXRvcnMsICdcXHgyRScpO1xuXHRcdHZhciBsYWJlbHMgPSBzdHJpbmcuc3BsaXQoJy4nKTtcblx0XHR2YXIgZW5jb2RlZCA9IG1hcChsYWJlbHMsIGZuKS5qb2luKCcuJyk7XG5cdFx0cmV0dXJuIHJlc3VsdCArIGVuY29kZWQ7XG5cdH1cblxuXHQvKipcblx0ICogQ3JlYXRlcyBhbiBhcnJheSBjb250YWluaW5nIHRoZSBudW1lcmljIGNvZGUgcG9pbnRzIG9mIGVhY2ggVW5pY29kZVxuXHQgKiBjaGFyYWN0ZXIgaW4gdGhlIHN0cmluZy4gV2hpbGUgSmF2YVNjcmlwdCB1c2VzIFVDUy0yIGludGVybmFsbHksXG5cdCAqIHRoaXMgZnVuY3Rpb24gd2lsbCBjb252ZXJ0IGEgcGFpciBvZiBzdXJyb2dhdGUgaGFsdmVzIChlYWNoIG9mIHdoaWNoXG5cdCAqIFVDUy0yIGV4cG9zZXMgYXMgc2VwYXJhdGUgY2hhcmFjdGVycykgaW50byBhIHNpbmdsZSBjb2RlIHBvaW50LFxuXHQgKiBtYXRjaGluZyBVVEYtMTYuXG5cdCAqIEBzZWUgYHB1bnljb2RlLnVjczIuZW5jb2RlYFxuXHQgKiBAc2VlIDxodHRwczovL21hdGhpYXNieW5lbnMuYmUvbm90ZXMvamF2YXNjcmlwdC1lbmNvZGluZz5cblx0ICogQG1lbWJlck9mIHB1bnljb2RlLnVjczJcblx0ICogQG5hbWUgZGVjb2RlXG5cdCAqIEBwYXJhbSB7U3RyaW5nfSBzdHJpbmcgVGhlIFVuaWNvZGUgaW5wdXQgc3RyaW5nIChVQ1MtMikuXG5cdCAqIEByZXR1cm5zIHtBcnJheX0gVGhlIG5ldyBhcnJheSBvZiBjb2RlIHBvaW50cy5cblx0ICovXG5cdGZ1bmN0aW9uIHVjczJkZWNvZGUoc3RyaW5nKSB7XG5cdFx0dmFyIG91dHB1dCA9IFtdLFxuXHRcdCAgICBjb3VudGVyID0gMCxcblx0XHQgICAgbGVuZ3RoID0gc3RyaW5nLmxlbmd0aCxcblx0XHQgICAgdmFsdWUsXG5cdFx0ICAgIGV4dHJhO1xuXHRcdHdoaWxlIChjb3VudGVyIDwgbGVuZ3RoKSB7XG5cdFx0XHR2YWx1ZSA9IHN0cmluZy5jaGFyQ29kZUF0KGNvdW50ZXIrKyk7XG5cdFx0XHRpZiAodmFsdWUgPj0gMHhEODAwICYmIHZhbHVlIDw9IDB4REJGRiAmJiBjb3VudGVyIDwgbGVuZ3RoKSB7XG5cdFx0XHRcdC8vIGhpZ2ggc3Vycm9nYXRlLCBhbmQgdGhlcmUgaXMgYSBuZXh0IGNoYXJhY3RlclxuXHRcdFx0XHRleHRyYSA9IHN0cmluZy5jaGFyQ29kZUF0KGNvdW50ZXIrKyk7XG5cdFx0XHRcdGlmICgoZXh0cmEgJiAweEZDMDApID09IDB4REMwMCkgeyAvLyBsb3cgc3Vycm9nYXRlXG5cdFx0XHRcdFx0b3V0cHV0LnB1c2goKCh2YWx1ZSAmIDB4M0ZGKSA8PCAxMCkgKyAoZXh0cmEgJiAweDNGRikgKyAweDEwMDAwKTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHQvLyB1bm1hdGNoZWQgc3Vycm9nYXRlOyBvbmx5IGFwcGVuZCB0aGlzIGNvZGUgdW5pdCwgaW4gY2FzZSB0aGUgbmV4dFxuXHRcdFx0XHRcdC8vIGNvZGUgdW5pdCBpcyB0aGUgaGlnaCBzdXJyb2dhdGUgb2YgYSBzdXJyb2dhdGUgcGFpclxuXHRcdFx0XHRcdG91dHB1dC5wdXNoKHZhbHVlKTtcblx0XHRcdFx0XHRjb3VudGVyLS07XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdG91dHB1dC5wdXNoKHZhbHVlKTtcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIG91dHB1dDtcblx0fVxuXG5cdC8qKlxuXHQgKiBDcmVhdGVzIGEgc3RyaW5nIGJhc2VkIG9uIGFuIGFycmF5IG9mIG51bWVyaWMgY29kZSBwb2ludHMuXG5cdCAqIEBzZWUgYHB1bnljb2RlLnVjczIuZGVjb2RlYFxuXHQgKiBAbWVtYmVyT2YgcHVueWNvZGUudWNzMlxuXHQgKiBAbmFtZSBlbmNvZGVcblx0ICogQHBhcmFtIHtBcnJheX0gY29kZVBvaW50cyBUaGUgYXJyYXkgb2YgbnVtZXJpYyBjb2RlIHBvaW50cy5cblx0ICogQHJldHVybnMge1N0cmluZ30gVGhlIG5ldyBVbmljb2RlIHN0cmluZyAoVUNTLTIpLlxuXHQgKi9cblx0ZnVuY3Rpb24gdWNzMmVuY29kZShhcnJheSkge1xuXHRcdHJldHVybiBtYXAoYXJyYXksIGZ1bmN0aW9uKHZhbHVlKSB7XG5cdFx0XHR2YXIgb3V0cHV0ID0gJyc7XG5cdFx0XHRpZiAodmFsdWUgPiAweEZGRkYpIHtcblx0XHRcdFx0dmFsdWUgLT0gMHgxMDAwMDtcblx0XHRcdFx0b3V0cHV0ICs9IHN0cmluZ0Zyb21DaGFyQ29kZSh2YWx1ZSA+Pj4gMTAgJiAweDNGRiB8IDB4RDgwMCk7XG5cdFx0XHRcdHZhbHVlID0gMHhEQzAwIHwgdmFsdWUgJiAweDNGRjtcblx0XHRcdH1cblx0XHRcdG91dHB1dCArPSBzdHJpbmdGcm9tQ2hhckNvZGUodmFsdWUpO1xuXHRcdFx0cmV0dXJuIG91dHB1dDtcblx0XHR9KS5qb2luKCcnKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBDb252ZXJ0cyBhIGJhc2ljIGNvZGUgcG9pbnQgaW50byBhIGRpZ2l0L2ludGVnZXIuXG5cdCAqIEBzZWUgYGRpZ2l0VG9CYXNpYygpYFxuXHQgKiBAcHJpdmF0ZVxuXHQgKiBAcGFyYW0ge051bWJlcn0gY29kZVBvaW50IFRoZSBiYXNpYyBudW1lcmljIGNvZGUgcG9pbnQgdmFsdWUuXG5cdCAqIEByZXR1cm5zIHtOdW1iZXJ9IFRoZSBudW1lcmljIHZhbHVlIG9mIGEgYmFzaWMgY29kZSBwb2ludCAoZm9yIHVzZSBpblxuXHQgKiByZXByZXNlbnRpbmcgaW50ZWdlcnMpIGluIHRoZSByYW5nZSBgMGAgdG8gYGJhc2UgLSAxYCwgb3IgYGJhc2VgIGlmXG5cdCAqIHRoZSBjb2RlIHBvaW50IGRvZXMgbm90IHJlcHJlc2VudCBhIHZhbHVlLlxuXHQgKi9cblx0ZnVuY3Rpb24gYmFzaWNUb0RpZ2l0KGNvZGVQb2ludCkge1xuXHRcdGlmIChjb2RlUG9pbnQgLSA0OCA8IDEwKSB7XG5cdFx0XHRyZXR1cm4gY29kZVBvaW50IC0gMjI7XG5cdFx0fVxuXHRcdGlmIChjb2RlUG9pbnQgLSA2NSA8IDI2KSB7XG5cdFx0XHRyZXR1cm4gY29kZVBvaW50IC0gNjU7XG5cdFx0fVxuXHRcdGlmIChjb2RlUG9pbnQgLSA5NyA8IDI2KSB7XG5cdFx0XHRyZXR1cm4gY29kZVBvaW50IC0gOTc7XG5cdFx0fVxuXHRcdHJldHVybiBiYXNlO1xuXHR9XG5cblx0LyoqXG5cdCAqIENvbnZlcnRzIGEgZGlnaXQvaW50ZWdlciBpbnRvIGEgYmFzaWMgY29kZSBwb2ludC5cblx0ICogQHNlZSBgYmFzaWNUb0RpZ2l0KClgXG5cdCAqIEBwcml2YXRlXG5cdCAqIEBwYXJhbSB7TnVtYmVyfSBkaWdpdCBUaGUgbnVtZXJpYyB2YWx1ZSBvZiBhIGJhc2ljIGNvZGUgcG9pbnQuXG5cdCAqIEByZXR1cm5zIHtOdW1iZXJ9IFRoZSBiYXNpYyBjb2RlIHBvaW50IHdob3NlIHZhbHVlICh3aGVuIHVzZWQgZm9yXG5cdCAqIHJlcHJlc2VudGluZyBpbnRlZ2VycykgaXMgYGRpZ2l0YCwgd2hpY2ggbmVlZHMgdG8gYmUgaW4gdGhlIHJhbmdlXG5cdCAqIGAwYCB0byBgYmFzZSAtIDFgLiBJZiBgZmxhZ2AgaXMgbm9uLXplcm8sIHRoZSB1cHBlcmNhc2UgZm9ybSBpc1xuXHQgKiB1c2VkOyBlbHNlLCB0aGUgbG93ZXJjYXNlIGZvcm0gaXMgdXNlZC4gVGhlIGJlaGF2aW9yIGlzIHVuZGVmaW5lZFxuXHQgKiBpZiBgZmxhZ2AgaXMgbm9uLXplcm8gYW5kIGBkaWdpdGAgaGFzIG5vIHVwcGVyY2FzZSBmb3JtLlxuXHQgKi9cblx0ZnVuY3Rpb24gZGlnaXRUb0Jhc2ljKGRpZ2l0LCBmbGFnKSB7XG5cdFx0Ly8gIDAuLjI1IG1hcCB0byBBU0NJSSBhLi56IG9yIEEuLlpcblx0XHQvLyAyNi4uMzUgbWFwIHRvIEFTQ0lJIDAuLjlcblx0XHRyZXR1cm4gZGlnaXQgKyAyMiArIDc1ICogKGRpZ2l0IDwgMjYpIC0gKChmbGFnICE9IDApIDw8IDUpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEJpYXMgYWRhcHRhdGlvbiBmdW5jdGlvbiBhcyBwZXIgc2VjdGlvbiAzLjQgb2YgUkZDIDM0OTIuXG5cdCAqIGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmMzNDkyI3NlY3Rpb24tMy40XG5cdCAqIEBwcml2YXRlXG5cdCAqL1xuXHRmdW5jdGlvbiBhZGFwdChkZWx0YSwgbnVtUG9pbnRzLCBmaXJzdFRpbWUpIHtcblx0XHR2YXIgayA9IDA7XG5cdFx0ZGVsdGEgPSBmaXJzdFRpbWUgPyBmbG9vcihkZWx0YSAvIGRhbXApIDogZGVsdGEgPj4gMTtcblx0XHRkZWx0YSArPSBmbG9vcihkZWx0YSAvIG51bVBvaW50cyk7XG5cdFx0Zm9yICgvKiBubyBpbml0aWFsaXphdGlvbiAqLzsgZGVsdGEgPiBiYXNlTWludXNUTWluICogdE1heCA+PiAxOyBrICs9IGJhc2UpIHtcblx0XHRcdGRlbHRhID0gZmxvb3IoZGVsdGEgLyBiYXNlTWludXNUTWluKTtcblx0XHR9XG5cdFx0cmV0dXJuIGZsb29yKGsgKyAoYmFzZU1pbnVzVE1pbiArIDEpICogZGVsdGEgLyAoZGVsdGEgKyBza2V3KSk7XG5cdH1cblxuXHQvKipcblx0ICogQ29udmVydHMgYSBQdW55Y29kZSBzdHJpbmcgb2YgQVNDSUktb25seSBzeW1ib2xzIHRvIGEgc3RyaW5nIG9mIFVuaWNvZGVcblx0ICogc3ltYm9scy5cblx0ICogQG1lbWJlck9mIHB1bnljb2RlXG5cdCAqIEBwYXJhbSB7U3RyaW5nfSBpbnB1dCBUaGUgUHVueWNvZGUgc3RyaW5nIG9mIEFTQ0lJLW9ubHkgc3ltYm9scy5cblx0ICogQHJldHVybnMge1N0cmluZ30gVGhlIHJlc3VsdGluZyBzdHJpbmcgb2YgVW5pY29kZSBzeW1ib2xzLlxuXHQgKi9cblx0ZnVuY3Rpb24gZGVjb2RlKGlucHV0KSB7XG5cdFx0Ly8gRG9uJ3QgdXNlIFVDUy0yXG5cdFx0dmFyIG91dHB1dCA9IFtdLFxuXHRcdCAgICBpbnB1dExlbmd0aCA9IGlucHV0Lmxlbmd0aCxcblx0XHQgICAgb3V0LFxuXHRcdCAgICBpID0gMCxcblx0XHQgICAgbiA9IGluaXRpYWxOLFxuXHRcdCAgICBiaWFzID0gaW5pdGlhbEJpYXMsXG5cdFx0ICAgIGJhc2ljLFxuXHRcdCAgICBqLFxuXHRcdCAgICBpbmRleCxcblx0XHQgICAgb2xkaSxcblx0XHQgICAgdyxcblx0XHQgICAgayxcblx0XHQgICAgZGlnaXQsXG5cdFx0ICAgIHQsXG5cdFx0ICAgIC8qKiBDYWNoZWQgY2FsY3VsYXRpb24gcmVzdWx0cyAqL1xuXHRcdCAgICBiYXNlTWludXNUO1xuXG5cdFx0Ly8gSGFuZGxlIHRoZSBiYXNpYyBjb2RlIHBvaW50czogbGV0IGBiYXNpY2AgYmUgdGhlIG51bWJlciBvZiBpbnB1dCBjb2RlXG5cdFx0Ly8gcG9pbnRzIGJlZm9yZSB0aGUgbGFzdCBkZWxpbWl0ZXIsIG9yIGAwYCBpZiB0aGVyZSBpcyBub25lLCB0aGVuIGNvcHlcblx0XHQvLyB0aGUgZmlyc3QgYmFzaWMgY29kZSBwb2ludHMgdG8gdGhlIG91dHB1dC5cblxuXHRcdGJhc2ljID0gaW5wdXQubGFzdEluZGV4T2YoZGVsaW1pdGVyKTtcblx0XHRpZiAoYmFzaWMgPCAwKSB7XG5cdFx0XHRiYXNpYyA9IDA7XG5cdFx0fVxuXG5cdFx0Zm9yIChqID0gMDsgaiA8IGJhc2ljOyArK2opIHtcblx0XHRcdC8vIGlmIGl0J3Mgbm90IGEgYmFzaWMgY29kZSBwb2ludFxuXHRcdFx0aWYgKGlucHV0LmNoYXJDb2RlQXQoaikgPj0gMHg4MCkge1xuXHRcdFx0XHRlcnJvcignbm90LWJhc2ljJyk7XG5cdFx0XHR9XG5cdFx0XHRvdXRwdXQucHVzaChpbnB1dC5jaGFyQ29kZUF0KGopKTtcblx0XHR9XG5cblx0XHQvLyBNYWluIGRlY29kaW5nIGxvb3A6IHN0YXJ0IGp1c3QgYWZ0ZXIgdGhlIGxhc3QgZGVsaW1pdGVyIGlmIGFueSBiYXNpYyBjb2RlXG5cdFx0Ly8gcG9pbnRzIHdlcmUgY29waWVkOyBzdGFydCBhdCB0aGUgYmVnaW5uaW5nIG90aGVyd2lzZS5cblxuXHRcdGZvciAoaW5kZXggPSBiYXNpYyA+IDAgPyBiYXNpYyArIDEgOiAwOyBpbmRleCA8IGlucHV0TGVuZ3RoOyAvKiBubyBmaW5hbCBleHByZXNzaW9uICovKSB7XG5cblx0XHRcdC8vIGBpbmRleGAgaXMgdGhlIGluZGV4IG9mIHRoZSBuZXh0IGNoYXJhY3RlciB0byBiZSBjb25zdW1lZC5cblx0XHRcdC8vIERlY29kZSBhIGdlbmVyYWxpemVkIHZhcmlhYmxlLWxlbmd0aCBpbnRlZ2VyIGludG8gYGRlbHRhYCxcblx0XHRcdC8vIHdoaWNoIGdldHMgYWRkZWQgdG8gYGlgLiBUaGUgb3ZlcmZsb3cgY2hlY2tpbmcgaXMgZWFzaWVyXG5cdFx0XHQvLyBpZiB3ZSBpbmNyZWFzZSBgaWAgYXMgd2UgZ28sIHRoZW4gc3VidHJhY3Qgb2ZmIGl0cyBzdGFydGluZ1xuXHRcdFx0Ly8gdmFsdWUgYXQgdGhlIGVuZCB0byBvYnRhaW4gYGRlbHRhYC5cblx0XHRcdGZvciAob2xkaSA9IGksIHcgPSAxLCBrID0gYmFzZTsgLyogbm8gY29uZGl0aW9uICovOyBrICs9IGJhc2UpIHtcblxuXHRcdFx0XHRpZiAoaW5kZXggPj0gaW5wdXRMZW5ndGgpIHtcblx0XHRcdFx0XHRlcnJvcignaW52YWxpZC1pbnB1dCcpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0ZGlnaXQgPSBiYXNpY1RvRGlnaXQoaW5wdXQuY2hhckNvZGVBdChpbmRleCsrKSk7XG5cblx0XHRcdFx0aWYgKGRpZ2l0ID49IGJhc2UgfHwgZGlnaXQgPiBmbG9vcigobWF4SW50IC0gaSkgLyB3KSkge1xuXHRcdFx0XHRcdGVycm9yKCdvdmVyZmxvdycpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0aSArPSBkaWdpdCAqIHc7XG5cdFx0XHRcdHQgPSBrIDw9IGJpYXMgPyB0TWluIDogKGsgPj0gYmlhcyArIHRNYXggPyB0TWF4IDogayAtIGJpYXMpO1xuXG5cdFx0XHRcdGlmIChkaWdpdCA8IHQpIHtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGJhc2VNaW51c1QgPSBiYXNlIC0gdDtcblx0XHRcdFx0aWYgKHcgPiBmbG9vcihtYXhJbnQgLyBiYXNlTWludXNUKSkge1xuXHRcdFx0XHRcdGVycm9yKCdvdmVyZmxvdycpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0dyAqPSBiYXNlTWludXNUO1xuXG5cdFx0XHR9XG5cblx0XHRcdG91dCA9IG91dHB1dC5sZW5ndGggKyAxO1xuXHRcdFx0YmlhcyA9IGFkYXB0KGkgLSBvbGRpLCBvdXQsIG9sZGkgPT0gMCk7XG5cblx0XHRcdC8vIGBpYCB3YXMgc3VwcG9zZWQgdG8gd3JhcCBhcm91bmQgZnJvbSBgb3V0YCB0byBgMGAsXG5cdFx0XHQvLyBpbmNyZW1lbnRpbmcgYG5gIGVhY2ggdGltZSwgc28gd2UnbGwgZml4IHRoYXQgbm93OlxuXHRcdFx0aWYgKGZsb29yKGkgLyBvdXQpID4gbWF4SW50IC0gbikge1xuXHRcdFx0XHRlcnJvcignb3ZlcmZsb3cnKTtcblx0XHRcdH1cblxuXHRcdFx0biArPSBmbG9vcihpIC8gb3V0KTtcblx0XHRcdGkgJT0gb3V0O1xuXG5cdFx0XHQvLyBJbnNlcnQgYG5gIGF0IHBvc2l0aW9uIGBpYCBvZiB0aGUgb3V0cHV0XG5cdFx0XHRvdXRwdXQuc3BsaWNlKGkrKywgMCwgbik7XG5cblx0XHR9XG5cblx0XHRyZXR1cm4gdWNzMmVuY29kZShvdXRwdXQpO1xuXHR9XG5cblx0LyoqXG5cdCAqIENvbnZlcnRzIGEgc3RyaW5nIG9mIFVuaWNvZGUgc3ltYm9scyAoZS5nLiBhIGRvbWFpbiBuYW1lIGxhYmVsKSB0byBhXG5cdCAqIFB1bnljb2RlIHN0cmluZyBvZiBBU0NJSS1vbmx5IHN5bWJvbHMuXG5cdCAqIEBtZW1iZXJPZiBwdW55Y29kZVxuXHQgKiBAcGFyYW0ge1N0cmluZ30gaW5wdXQgVGhlIHN0cmluZyBvZiBVbmljb2RlIHN5bWJvbHMuXG5cdCAqIEByZXR1cm5zIHtTdHJpbmd9IFRoZSByZXN1bHRpbmcgUHVueWNvZGUgc3RyaW5nIG9mIEFTQ0lJLW9ubHkgc3ltYm9scy5cblx0ICovXG5cdGZ1bmN0aW9uIGVuY29kZShpbnB1dCkge1xuXHRcdHZhciBuLFxuXHRcdCAgICBkZWx0YSxcblx0XHQgICAgaGFuZGxlZENQQ291bnQsXG5cdFx0ICAgIGJhc2ljTGVuZ3RoLFxuXHRcdCAgICBiaWFzLFxuXHRcdCAgICBqLFxuXHRcdCAgICBtLFxuXHRcdCAgICBxLFxuXHRcdCAgICBrLFxuXHRcdCAgICB0LFxuXHRcdCAgICBjdXJyZW50VmFsdWUsXG5cdFx0ICAgIG91dHB1dCA9IFtdLFxuXHRcdCAgICAvKiogYGlucHV0TGVuZ3RoYCB3aWxsIGhvbGQgdGhlIG51bWJlciBvZiBjb2RlIHBvaW50cyBpbiBgaW5wdXRgLiAqL1xuXHRcdCAgICBpbnB1dExlbmd0aCxcblx0XHQgICAgLyoqIENhY2hlZCBjYWxjdWxhdGlvbiByZXN1bHRzICovXG5cdFx0ICAgIGhhbmRsZWRDUENvdW50UGx1c09uZSxcblx0XHQgICAgYmFzZU1pbnVzVCxcblx0XHQgICAgcU1pbnVzVDtcblxuXHRcdC8vIENvbnZlcnQgdGhlIGlucHV0IGluIFVDUy0yIHRvIFVuaWNvZGVcblx0XHRpbnB1dCA9IHVjczJkZWNvZGUoaW5wdXQpO1xuXG5cdFx0Ly8gQ2FjaGUgdGhlIGxlbmd0aFxuXHRcdGlucHV0TGVuZ3RoID0gaW5wdXQubGVuZ3RoO1xuXG5cdFx0Ly8gSW5pdGlhbGl6ZSB0aGUgc3RhdGVcblx0XHRuID0gaW5pdGlhbE47XG5cdFx0ZGVsdGEgPSAwO1xuXHRcdGJpYXMgPSBpbml0aWFsQmlhcztcblxuXHRcdC8vIEhhbmRsZSB0aGUgYmFzaWMgY29kZSBwb2ludHNcblx0XHRmb3IgKGogPSAwOyBqIDwgaW5wdXRMZW5ndGg7ICsraikge1xuXHRcdFx0Y3VycmVudFZhbHVlID0gaW5wdXRbal07XG5cdFx0XHRpZiAoY3VycmVudFZhbHVlIDwgMHg4MCkge1xuXHRcdFx0XHRvdXRwdXQucHVzaChzdHJpbmdGcm9tQ2hhckNvZGUoY3VycmVudFZhbHVlKSk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0aGFuZGxlZENQQ291bnQgPSBiYXNpY0xlbmd0aCA9IG91dHB1dC5sZW5ndGg7XG5cblx0XHQvLyBgaGFuZGxlZENQQ291bnRgIGlzIHRoZSBudW1iZXIgb2YgY29kZSBwb2ludHMgdGhhdCBoYXZlIGJlZW4gaGFuZGxlZDtcblx0XHQvLyBgYmFzaWNMZW5ndGhgIGlzIHRoZSBudW1iZXIgb2YgYmFzaWMgY29kZSBwb2ludHMuXG5cblx0XHQvLyBGaW5pc2ggdGhlIGJhc2ljIHN0cmluZyAtIGlmIGl0IGlzIG5vdCBlbXB0eSAtIHdpdGggYSBkZWxpbWl0ZXJcblx0XHRpZiAoYmFzaWNMZW5ndGgpIHtcblx0XHRcdG91dHB1dC5wdXNoKGRlbGltaXRlcik7XG5cdFx0fVxuXG5cdFx0Ly8gTWFpbiBlbmNvZGluZyBsb29wOlxuXHRcdHdoaWxlIChoYW5kbGVkQ1BDb3VudCA8IGlucHV0TGVuZ3RoKSB7XG5cblx0XHRcdC8vIEFsbCBub24tYmFzaWMgY29kZSBwb2ludHMgPCBuIGhhdmUgYmVlbiBoYW5kbGVkIGFscmVhZHkuIEZpbmQgdGhlIG5leHRcblx0XHRcdC8vIGxhcmdlciBvbmU6XG5cdFx0XHRmb3IgKG0gPSBtYXhJbnQsIGogPSAwOyBqIDwgaW5wdXRMZW5ndGg7ICsraikge1xuXHRcdFx0XHRjdXJyZW50VmFsdWUgPSBpbnB1dFtqXTtcblx0XHRcdFx0aWYgKGN1cnJlbnRWYWx1ZSA+PSBuICYmIGN1cnJlbnRWYWx1ZSA8IG0pIHtcblx0XHRcdFx0XHRtID0gY3VycmVudFZhbHVlO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdC8vIEluY3JlYXNlIGBkZWx0YWAgZW5vdWdoIHRvIGFkdmFuY2UgdGhlIGRlY29kZXIncyA8bixpPiBzdGF0ZSB0byA8bSwwPixcblx0XHRcdC8vIGJ1dCBndWFyZCBhZ2FpbnN0IG92ZXJmbG93XG5cdFx0XHRoYW5kbGVkQ1BDb3VudFBsdXNPbmUgPSBoYW5kbGVkQ1BDb3VudCArIDE7XG5cdFx0XHRpZiAobSAtIG4gPiBmbG9vcigobWF4SW50IC0gZGVsdGEpIC8gaGFuZGxlZENQQ291bnRQbHVzT25lKSkge1xuXHRcdFx0XHRlcnJvcignb3ZlcmZsb3cnKTtcblx0XHRcdH1cblxuXHRcdFx0ZGVsdGEgKz0gKG0gLSBuKSAqIGhhbmRsZWRDUENvdW50UGx1c09uZTtcblx0XHRcdG4gPSBtO1xuXG5cdFx0XHRmb3IgKGogPSAwOyBqIDwgaW5wdXRMZW5ndGg7ICsraikge1xuXHRcdFx0XHRjdXJyZW50VmFsdWUgPSBpbnB1dFtqXTtcblxuXHRcdFx0XHRpZiAoY3VycmVudFZhbHVlIDwgbiAmJiArK2RlbHRhID4gbWF4SW50KSB7XG5cdFx0XHRcdFx0ZXJyb3IoJ292ZXJmbG93Jyk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZiAoY3VycmVudFZhbHVlID09IG4pIHtcblx0XHRcdFx0XHQvLyBSZXByZXNlbnQgZGVsdGEgYXMgYSBnZW5lcmFsaXplZCB2YXJpYWJsZS1sZW5ndGggaW50ZWdlclxuXHRcdFx0XHRcdGZvciAocSA9IGRlbHRhLCBrID0gYmFzZTsgLyogbm8gY29uZGl0aW9uICovOyBrICs9IGJhc2UpIHtcblx0XHRcdFx0XHRcdHQgPSBrIDw9IGJpYXMgPyB0TWluIDogKGsgPj0gYmlhcyArIHRNYXggPyB0TWF4IDogayAtIGJpYXMpO1xuXHRcdFx0XHRcdFx0aWYgKHEgPCB0KSB7XG5cdFx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0cU1pbnVzVCA9IHEgLSB0O1xuXHRcdFx0XHRcdFx0YmFzZU1pbnVzVCA9IGJhc2UgLSB0O1xuXHRcdFx0XHRcdFx0b3V0cHV0LnB1c2goXG5cdFx0XHRcdFx0XHRcdHN0cmluZ0Zyb21DaGFyQ29kZShkaWdpdFRvQmFzaWModCArIHFNaW51c1QgJSBiYXNlTWludXNULCAwKSlcblx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0XHRxID0gZmxvb3IocU1pbnVzVCAvIGJhc2VNaW51c1QpO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdG91dHB1dC5wdXNoKHN0cmluZ0Zyb21DaGFyQ29kZShkaWdpdFRvQmFzaWMocSwgMCkpKTtcblx0XHRcdFx0XHRiaWFzID0gYWRhcHQoZGVsdGEsIGhhbmRsZWRDUENvdW50UGx1c09uZSwgaGFuZGxlZENQQ291bnQgPT0gYmFzaWNMZW5ndGgpO1xuXHRcdFx0XHRcdGRlbHRhID0gMDtcblx0XHRcdFx0XHQrK2hhbmRsZWRDUENvdW50O1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdCsrZGVsdGE7XG5cdFx0XHQrK247XG5cblx0XHR9XG5cdFx0cmV0dXJuIG91dHB1dC5qb2luKCcnKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBDb252ZXJ0cyBhIFB1bnljb2RlIHN0cmluZyByZXByZXNlbnRpbmcgYSBkb21haW4gbmFtZSBvciBhbiBlbWFpbCBhZGRyZXNzXG5cdCAqIHRvIFVuaWNvZGUuIE9ubHkgdGhlIFB1bnljb2RlZCBwYXJ0cyBvZiB0aGUgaW5wdXQgd2lsbCBiZSBjb252ZXJ0ZWQsIGkuZS5cblx0ICogaXQgZG9lc24ndCBtYXR0ZXIgaWYgeW91IGNhbGwgaXQgb24gYSBzdHJpbmcgdGhhdCBoYXMgYWxyZWFkeSBiZWVuXG5cdCAqIGNvbnZlcnRlZCB0byBVbmljb2RlLlxuXHQgKiBAbWVtYmVyT2YgcHVueWNvZGVcblx0ICogQHBhcmFtIHtTdHJpbmd9IGlucHV0IFRoZSBQdW55Y29kZWQgZG9tYWluIG5hbWUgb3IgZW1haWwgYWRkcmVzcyB0b1xuXHQgKiBjb252ZXJ0IHRvIFVuaWNvZGUuXG5cdCAqIEByZXR1cm5zIHtTdHJpbmd9IFRoZSBVbmljb2RlIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBnaXZlbiBQdW55Y29kZVxuXHQgKiBzdHJpbmcuXG5cdCAqL1xuXHRmdW5jdGlvbiB0b1VuaWNvZGUoaW5wdXQpIHtcblx0XHRyZXR1cm4gbWFwRG9tYWluKGlucHV0LCBmdW5jdGlvbihzdHJpbmcpIHtcblx0XHRcdHJldHVybiByZWdleFB1bnljb2RlLnRlc3Qoc3RyaW5nKVxuXHRcdFx0XHQ/IGRlY29kZShzdHJpbmcuc2xpY2UoNCkudG9Mb3dlckNhc2UoKSlcblx0XHRcdFx0OiBzdHJpbmc7XG5cdFx0fSk7XG5cdH1cblxuXHQvKipcblx0ICogQ29udmVydHMgYSBVbmljb2RlIHN0cmluZyByZXByZXNlbnRpbmcgYSBkb21haW4gbmFtZSBvciBhbiBlbWFpbCBhZGRyZXNzIHRvXG5cdCAqIFB1bnljb2RlLiBPbmx5IHRoZSBub24tQVNDSUkgcGFydHMgb2YgdGhlIGRvbWFpbiBuYW1lIHdpbGwgYmUgY29udmVydGVkLFxuXHQgKiBpLmUuIGl0IGRvZXNuJ3QgbWF0dGVyIGlmIHlvdSBjYWxsIGl0IHdpdGggYSBkb21haW4gdGhhdCdzIGFscmVhZHkgaW5cblx0ICogQVNDSUkuXG5cdCAqIEBtZW1iZXJPZiBwdW55Y29kZVxuXHQgKiBAcGFyYW0ge1N0cmluZ30gaW5wdXQgVGhlIGRvbWFpbiBuYW1lIG9yIGVtYWlsIGFkZHJlc3MgdG8gY29udmVydCwgYXMgYVxuXHQgKiBVbmljb2RlIHN0cmluZy5cblx0ICogQHJldHVybnMge1N0cmluZ30gVGhlIFB1bnljb2RlIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBnaXZlbiBkb21haW4gbmFtZSBvclxuXHQgKiBlbWFpbCBhZGRyZXNzLlxuXHQgKi9cblx0ZnVuY3Rpb24gdG9BU0NJSShpbnB1dCkge1xuXHRcdHJldHVybiBtYXBEb21haW4oaW5wdXQsIGZ1bmN0aW9uKHN0cmluZykge1xuXHRcdFx0cmV0dXJuIHJlZ2V4Tm9uQVNDSUkudGVzdChzdHJpbmcpXG5cdFx0XHRcdD8gJ3huLS0nICsgZW5jb2RlKHN0cmluZylcblx0XHRcdFx0OiBzdHJpbmc7XG5cdFx0fSk7XG5cdH1cblxuXHQvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cblxuXHQvKiogRGVmaW5lIHRoZSBwdWJsaWMgQVBJICovXG5cdHB1bnljb2RlID0ge1xuXHRcdC8qKlxuXHRcdCAqIEEgc3RyaW5nIHJlcHJlc2VudGluZyB0aGUgY3VycmVudCBQdW55Y29kZS5qcyB2ZXJzaW9uIG51bWJlci5cblx0XHQgKiBAbWVtYmVyT2YgcHVueWNvZGVcblx0XHQgKiBAdHlwZSBTdHJpbmdcblx0XHQgKi9cblx0XHQndmVyc2lvbic6ICcxLjMuMicsXG5cdFx0LyoqXG5cdFx0ICogQW4gb2JqZWN0IG9mIG1ldGhvZHMgdG8gY29udmVydCBmcm9tIEphdmFTY3JpcHQncyBpbnRlcm5hbCBjaGFyYWN0ZXJcblx0XHQgKiByZXByZXNlbnRhdGlvbiAoVUNTLTIpIHRvIFVuaWNvZGUgY29kZSBwb2ludHMsIGFuZCBiYWNrLlxuXHRcdCAqIEBzZWUgPGh0dHBzOi8vbWF0aGlhc2J5bmVucy5iZS9ub3Rlcy9qYXZhc2NyaXB0LWVuY29kaW5nPlxuXHRcdCAqIEBtZW1iZXJPZiBwdW55Y29kZVxuXHRcdCAqIEB0eXBlIE9iamVjdFxuXHRcdCAqL1xuXHRcdCd1Y3MyJzoge1xuXHRcdFx0J2RlY29kZSc6IHVjczJkZWNvZGUsXG5cdFx0XHQnZW5jb2RlJzogdWNzMmVuY29kZVxuXHRcdH0sXG5cdFx0J2RlY29kZSc6IGRlY29kZSxcblx0XHQnZW5jb2RlJzogZW5jb2RlLFxuXHRcdCd0b0FTQ0lJJzogdG9BU0NJSSxcblx0XHQndG9Vbmljb2RlJzogdG9Vbmljb2RlXG5cdH07XG5cblx0LyoqIEV4cG9zZSBgcHVueWNvZGVgICovXG5cdC8vIFNvbWUgQU1EIGJ1aWxkIG9wdGltaXplcnMsIGxpa2Ugci5qcywgY2hlY2sgZm9yIHNwZWNpZmljIGNvbmRpdGlvbiBwYXR0ZXJuc1xuXHQvLyBsaWtlIHRoZSBmb2xsb3dpbmc6XG5cdGlmIChcblx0XHR0eXBlb2YgZGVmaW5lID09ICdmdW5jdGlvbicgJiZcblx0XHR0eXBlb2YgZGVmaW5lLmFtZCA9PSAnb2JqZWN0JyAmJlxuXHRcdGRlZmluZS5hbWRcblx0KSB7XG5cdFx0ZGVmaW5lKCdwdW55Y29kZScsIGZ1bmN0aW9uKCkge1xuXHRcdFx0cmV0dXJuIHB1bnljb2RlO1xuXHRcdH0pO1xuXHR9IGVsc2UgaWYgKGZyZWVFeHBvcnRzICYmIGZyZWVNb2R1bGUpIHtcblx0XHRpZiAobW9kdWxlLmV4cG9ydHMgPT0gZnJlZUV4cG9ydHMpIHtcblx0XHRcdC8vIGluIE5vZGUuanMsIGlvLmpzLCBvciBSaW5nb0pTIHYwLjguMCtcblx0XHRcdGZyZWVNb2R1bGUuZXhwb3J0cyA9IHB1bnljb2RlO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHQvLyBpbiBOYXJ3aGFsIG9yIFJpbmdvSlMgdjAuNy4wLVxuXHRcdFx0Zm9yIChrZXkgaW4gcHVueWNvZGUpIHtcblx0XHRcdFx0cHVueWNvZGUuaGFzT3duUHJvcGVydHkoa2V5KSAmJiAoZnJlZUV4cG9ydHNba2V5XSA9IHB1bnljb2RlW2tleV0pO1xuXHRcdFx0fVxuXHRcdH1cblx0fSBlbHNlIHtcblx0XHQvLyBpbiBSaGlubyBvciBhIHdlYiBicm93c2VyXG5cdFx0cm9vdC5wdW55Y29kZSA9IHB1bnljb2RlO1xuXHR9XG5cbn0odGhpcykpO1xuIiwiLy8gQ29weXJpZ2h0IEpveWVudCwgSW5jLiBhbmQgb3RoZXIgTm9kZSBjb250cmlidXRvcnMuXG4vL1xuLy8gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGFcbi8vIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGVcbi8vIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZ1xuLy8gd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLFxuLy8gZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdFxuLy8gcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlXG4vLyBmb2xsb3dpbmcgY29uZGl0aW9uczpcbi8vXG4vLyBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZFxuLy8gaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4vL1xuLy8gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTU1xuLy8gT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRlxuLy8gTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTlxuLy8gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sXG4vLyBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1Jcbi8vIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEVcbi8vIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG5cbid1c2Ugc3RyaWN0JztcblxuLy8gSWYgb2JqLmhhc093blByb3BlcnR5IGhhcyBiZWVuIG92ZXJyaWRkZW4sIHRoZW4gY2FsbGluZ1xuLy8gb2JqLmhhc093blByb3BlcnR5KHByb3ApIHdpbGwgYnJlYWsuXG4vLyBTZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9qb3llbnQvbm9kZS9pc3N1ZXMvMTcwN1xuZnVuY3Rpb24gaGFzT3duUHJvcGVydHkob2JqLCBwcm9wKSB7XG4gIHJldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqLCBwcm9wKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihxcywgc2VwLCBlcSwgb3B0aW9ucykge1xuICBzZXAgPSBzZXAgfHwgJyYnO1xuICBlcSA9IGVxIHx8ICc9JztcbiAgdmFyIG9iaiA9IHt9O1xuXG4gIGlmICh0eXBlb2YgcXMgIT09ICdzdHJpbmcnIHx8IHFzLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiBvYmo7XG4gIH1cblxuICB2YXIgcmVnZXhwID0gL1xcKy9nO1xuICBxcyA9IHFzLnNwbGl0KHNlcCk7XG5cbiAgdmFyIG1heEtleXMgPSAxMDAwO1xuICBpZiAob3B0aW9ucyAmJiB0eXBlb2Ygb3B0aW9ucy5tYXhLZXlzID09PSAnbnVtYmVyJykge1xuICAgIG1heEtleXMgPSBvcHRpb25zLm1heEtleXM7XG4gIH1cblxuICB2YXIgbGVuID0gcXMubGVuZ3RoO1xuICAvLyBtYXhLZXlzIDw9IDAgbWVhbnMgdGhhdCB3ZSBzaG91bGQgbm90IGxpbWl0IGtleXMgY291bnRcbiAgaWYgKG1heEtleXMgPiAwICYmIGxlbiA+IG1heEtleXMpIHtcbiAgICBsZW4gPSBtYXhLZXlzO1xuICB9XG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47ICsraSkge1xuICAgIHZhciB4ID0gcXNbaV0ucmVwbGFjZShyZWdleHAsICclMjAnKSxcbiAgICAgICAgaWR4ID0geC5pbmRleE9mKGVxKSxcbiAgICAgICAga3N0ciwgdnN0ciwgaywgdjtcblxuICAgIGlmIChpZHggPj0gMCkge1xuICAgICAga3N0ciA9IHguc3Vic3RyKDAsIGlkeCk7XG4gICAgICB2c3RyID0geC5zdWJzdHIoaWR4ICsgMSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGtzdHIgPSB4O1xuICAgICAgdnN0ciA9ICcnO1xuICAgIH1cblxuICAgIGsgPSBkZWNvZGVVUklDb21wb25lbnQoa3N0cik7XG4gICAgdiA9IGRlY29kZVVSSUNvbXBvbmVudCh2c3RyKTtcblxuICAgIGlmICghaGFzT3duUHJvcGVydHkob2JqLCBrKSkge1xuICAgICAgb2JqW2tdID0gdjtcbiAgICB9IGVsc2UgaWYgKGlzQXJyYXkob2JqW2tdKSkge1xuICAgICAgb2JqW2tdLnB1c2godik7XG4gICAgfSBlbHNlIHtcbiAgICAgIG9ialtrXSA9IFtvYmpba10sIHZdO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBvYmo7XG59O1xuXG52YXIgaXNBcnJheSA9IEFycmF5LmlzQXJyYXkgfHwgZnVuY3Rpb24gKHhzKSB7XG4gIHJldHVybiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoeHMpID09PSAnW29iamVjdCBBcnJheV0nO1xufTtcbiIsIi8vIENvcHlyaWdodCBKb3llbnQsIEluYy4gYW5kIG90aGVyIE5vZGUgY29udHJpYnV0b3JzLlxuLy9cbi8vIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhXG4vLyBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlXG4vLyBcIlNvZnR3YXJlXCIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmdcbi8vIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCxcbi8vIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXRcbi8vIHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZVxuLy8gZm9sbG93aW5nIGNvbmRpdGlvbnM6XG4vL1xuLy8gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWRcbi8vIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuLy9cbi8vIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1Ncbi8vIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0Zcbi8vIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU5cbi8vIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLFxuLy8gREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SXG4vLyBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFXG4vLyBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLlxuXG4ndXNlIHN0cmljdCc7XG5cbnZhciBzdHJpbmdpZnlQcmltaXRpdmUgPSBmdW5jdGlvbih2KSB7XG4gIHN3aXRjaCAodHlwZW9mIHYpIHtcbiAgICBjYXNlICdzdHJpbmcnOlxuICAgICAgcmV0dXJuIHY7XG5cbiAgICBjYXNlICdib29sZWFuJzpcbiAgICAgIHJldHVybiB2ID8gJ3RydWUnIDogJ2ZhbHNlJztcblxuICAgIGNhc2UgJ251bWJlcic6XG4gICAgICByZXR1cm4gaXNGaW5pdGUodikgPyB2IDogJyc7XG5cbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuICcnO1xuICB9XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKG9iaiwgc2VwLCBlcSwgbmFtZSkge1xuICBzZXAgPSBzZXAgfHwgJyYnO1xuICBlcSA9IGVxIHx8ICc9JztcbiAgaWYgKG9iaiA9PT0gbnVsbCkge1xuICAgIG9iaiA9IHVuZGVmaW5lZDtcbiAgfVxuXG4gIGlmICh0eXBlb2Ygb2JqID09PSAnb2JqZWN0Jykge1xuICAgIHJldHVybiBtYXAob2JqZWN0S2V5cyhvYmopLCBmdW5jdGlvbihrKSB7XG4gICAgICB2YXIga3MgPSBlbmNvZGVVUklDb21wb25lbnQoc3RyaW5naWZ5UHJpbWl0aXZlKGspKSArIGVxO1xuICAgICAgaWYgKGlzQXJyYXkob2JqW2tdKSkge1xuICAgICAgICByZXR1cm4gbWFwKG9ialtrXSwgZnVuY3Rpb24odikge1xuICAgICAgICAgIHJldHVybiBrcyArIGVuY29kZVVSSUNvbXBvbmVudChzdHJpbmdpZnlQcmltaXRpdmUodikpO1xuICAgICAgICB9KS5qb2luKHNlcCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4ga3MgKyBlbmNvZGVVUklDb21wb25lbnQoc3RyaW5naWZ5UHJpbWl0aXZlKG9ialtrXSkpO1xuICAgICAgfVxuICAgIH0pLmpvaW4oc2VwKTtcblxuICB9XG5cbiAgaWYgKCFuYW1lKSByZXR1cm4gJyc7XG4gIHJldHVybiBlbmNvZGVVUklDb21wb25lbnQoc3RyaW5naWZ5UHJpbWl0aXZlKG5hbWUpKSArIGVxICtcbiAgICAgICAgIGVuY29kZVVSSUNvbXBvbmVudChzdHJpbmdpZnlQcmltaXRpdmUob2JqKSk7XG59O1xuXG52YXIgaXNBcnJheSA9IEFycmF5LmlzQXJyYXkgfHwgZnVuY3Rpb24gKHhzKSB7XG4gIHJldHVybiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoeHMpID09PSAnW29iamVjdCBBcnJheV0nO1xufTtcblxuZnVuY3Rpb24gbWFwICh4cywgZikge1xuICBpZiAoeHMubWFwKSByZXR1cm4geHMubWFwKGYpO1xuICB2YXIgcmVzID0gW107XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgeHMubGVuZ3RoOyBpKyspIHtcbiAgICByZXMucHVzaChmKHhzW2ldLCBpKSk7XG4gIH1cbiAgcmV0dXJuIHJlcztcbn1cblxudmFyIG9iamVjdEtleXMgPSBPYmplY3Qua2V5cyB8fCBmdW5jdGlvbiAob2JqKSB7XG4gIHZhciByZXMgPSBbXTtcbiAgZm9yICh2YXIga2V5IGluIG9iaikge1xuICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqLCBrZXkpKSByZXMucHVzaChrZXkpO1xuICB9XG4gIHJldHVybiByZXM7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG5leHBvcnRzLmRlY29kZSA9IGV4cG9ydHMucGFyc2UgPSByZXF1aXJlKCcuL2RlY29kZScpO1xuZXhwb3J0cy5lbmNvZGUgPSBleHBvcnRzLnN0cmluZ2lmeSA9IHJlcXVpcmUoJy4vZW5jb2RlJyk7XG4iLCIvLyBDb3B5cmlnaHQgSm95ZW50LCBJbmMuIGFuZCBvdGhlciBOb2RlIGNvbnRyaWJ1dG9ycy5cbi8vXG4vLyBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYVxuLy8gY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZVxuLy8gXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nXG4vLyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsXG4vLyBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0XG4vLyBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGVcbi8vIGZvbGxvd2luZyBjb25kaXRpb25zOlxuLy9cbi8vIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkXG4vLyBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbi8vXG4vLyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTXG4vLyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GXG4vLyBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOXG4vLyBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSxcbi8vIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUlxuLy8gT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRVxuLy8gVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cblxudmFyIHB1bnljb2RlID0gcmVxdWlyZSgncHVueWNvZGUnKTtcblxuZXhwb3J0cy5wYXJzZSA9IHVybFBhcnNlO1xuZXhwb3J0cy5yZXNvbHZlID0gdXJsUmVzb2x2ZTtcbmV4cG9ydHMucmVzb2x2ZU9iamVjdCA9IHVybFJlc29sdmVPYmplY3Q7XG5leHBvcnRzLmZvcm1hdCA9IHVybEZvcm1hdDtcblxuZXhwb3J0cy5VcmwgPSBVcmw7XG5cbmZ1bmN0aW9uIFVybCgpIHtcbiAgdGhpcy5wcm90b2NvbCA9IG51bGw7XG4gIHRoaXMuc2xhc2hlcyA9IG51bGw7XG4gIHRoaXMuYXV0aCA9IG51bGw7XG4gIHRoaXMuaG9zdCA9IG51bGw7XG4gIHRoaXMucG9ydCA9IG51bGw7XG4gIHRoaXMuaG9zdG5hbWUgPSBudWxsO1xuICB0aGlzLmhhc2ggPSBudWxsO1xuICB0aGlzLnNlYXJjaCA9IG51bGw7XG4gIHRoaXMucXVlcnkgPSBudWxsO1xuICB0aGlzLnBhdGhuYW1lID0gbnVsbDtcbiAgdGhpcy5wYXRoID0gbnVsbDtcbiAgdGhpcy5ocmVmID0gbnVsbDtcbn1cblxuLy8gUmVmZXJlbmNlOiBSRkMgMzk4NiwgUkZDIDE4MDgsIFJGQyAyMzk2XG5cbi8vIGRlZmluZSB0aGVzZSBoZXJlIHNvIGF0IGxlYXN0IHRoZXkgb25seSBoYXZlIHRvIGJlXG4vLyBjb21waWxlZCBvbmNlIG9uIHRoZSBmaXJzdCBtb2R1bGUgbG9hZC5cbnZhciBwcm90b2NvbFBhdHRlcm4gPSAvXihbYS16MC05ListXSs6KS9pLFxuICAgIHBvcnRQYXR0ZXJuID0gLzpbMC05XSokLyxcblxuICAgIC8vIFJGQyAyMzk2OiBjaGFyYWN0ZXJzIHJlc2VydmVkIGZvciBkZWxpbWl0aW5nIFVSTHMuXG4gICAgLy8gV2UgYWN0dWFsbHkganVzdCBhdXRvLWVzY2FwZSB0aGVzZS5cbiAgICBkZWxpbXMgPSBbJzwnLCAnPicsICdcIicsICdgJywgJyAnLCAnXFxyJywgJ1xcbicsICdcXHQnXSxcblxuICAgIC8vIFJGQyAyMzk2OiBjaGFyYWN0ZXJzIG5vdCBhbGxvd2VkIGZvciB2YXJpb3VzIHJlYXNvbnMuXG4gICAgdW53aXNlID0gWyd7JywgJ30nLCAnfCcsICdcXFxcJywgJ14nLCAnYCddLmNvbmNhdChkZWxpbXMpLFxuXG4gICAgLy8gQWxsb3dlZCBieSBSRkNzLCBidXQgY2F1c2Ugb2YgWFNTIGF0dGFja3MuICBBbHdheXMgZXNjYXBlIHRoZXNlLlxuICAgIGF1dG9Fc2NhcGUgPSBbJ1xcJyddLmNvbmNhdCh1bndpc2UpLFxuICAgIC8vIENoYXJhY3RlcnMgdGhhdCBhcmUgbmV2ZXIgZXZlciBhbGxvd2VkIGluIGEgaG9zdG5hbWUuXG4gICAgLy8gTm90ZSB0aGF0IGFueSBpbnZhbGlkIGNoYXJzIGFyZSBhbHNvIGhhbmRsZWQsIGJ1dCB0aGVzZVxuICAgIC8vIGFyZSB0aGUgb25lcyB0aGF0IGFyZSAqZXhwZWN0ZWQqIHRvIGJlIHNlZW4sIHNvIHdlIGZhc3QtcGF0aFxuICAgIC8vIHRoZW0uXG4gICAgbm9uSG9zdENoYXJzID0gWyclJywgJy8nLCAnPycsICc7JywgJyMnXS5jb25jYXQoYXV0b0VzY2FwZSksXG4gICAgaG9zdEVuZGluZ0NoYXJzID0gWycvJywgJz8nLCAnIyddLFxuICAgIGhvc3RuYW1lTWF4TGVuID0gMjU1LFxuICAgIGhvc3RuYW1lUGFydFBhdHRlcm4gPSAvXlthLXowLTlBLVpfLV17MCw2M30kLyxcbiAgICBob3N0bmFtZVBhcnRTdGFydCA9IC9eKFthLXowLTlBLVpfLV17MCw2M30pKC4qKSQvLFxuICAgIC8vIHByb3RvY29scyB0aGF0IGNhbiBhbGxvdyBcInVuc2FmZVwiIGFuZCBcInVud2lzZVwiIGNoYXJzLlxuICAgIHVuc2FmZVByb3RvY29sID0ge1xuICAgICAgJ2phdmFzY3JpcHQnOiB0cnVlLFxuICAgICAgJ2phdmFzY3JpcHQ6JzogdHJ1ZVxuICAgIH0sXG4gICAgLy8gcHJvdG9jb2xzIHRoYXQgbmV2ZXIgaGF2ZSBhIGhvc3RuYW1lLlxuICAgIGhvc3RsZXNzUHJvdG9jb2wgPSB7XG4gICAgICAnamF2YXNjcmlwdCc6IHRydWUsXG4gICAgICAnamF2YXNjcmlwdDonOiB0cnVlXG4gICAgfSxcbiAgICAvLyBwcm90b2NvbHMgdGhhdCBhbHdheXMgY29udGFpbiBhIC8vIGJpdC5cbiAgICBzbGFzaGVkUHJvdG9jb2wgPSB7XG4gICAgICAnaHR0cCc6IHRydWUsXG4gICAgICAnaHR0cHMnOiB0cnVlLFxuICAgICAgJ2Z0cCc6IHRydWUsXG4gICAgICAnZ29waGVyJzogdHJ1ZSxcbiAgICAgICdmaWxlJzogdHJ1ZSxcbiAgICAgICdodHRwOic6IHRydWUsXG4gICAgICAnaHR0cHM6JzogdHJ1ZSxcbiAgICAgICdmdHA6JzogdHJ1ZSxcbiAgICAgICdnb3BoZXI6JzogdHJ1ZSxcbiAgICAgICdmaWxlOic6IHRydWVcbiAgICB9LFxuICAgIHF1ZXJ5c3RyaW5nID0gcmVxdWlyZSgncXVlcnlzdHJpbmcnKTtcblxuZnVuY3Rpb24gdXJsUGFyc2UodXJsLCBwYXJzZVF1ZXJ5U3RyaW5nLCBzbGFzaGVzRGVub3RlSG9zdCkge1xuICBpZiAodXJsICYmIGlzT2JqZWN0KHVybCkgJiYgdXJsIGluc3RhbmNlb2YgVXJsKSByZXR1cm4gdXJsO1xuXG4gIHZhciB1ID0gbmV3IFVybDtcbiAgdS5wYXJzZSh1cmwsIHBhcnNlUXVlcnlTdHJpbmcsIHNsYXNoZXNEZW5vdGVIb3N0KTtcbiAgcmV0dXJuIHU7XG59XG5cblVybC5wcm90b3R5cGUucGFyc2UgPSBmdW5jdGlvbih1cmwsIHBhcnNlUXVlcnlTdHJpbmcsIHNsYXNoZXNEZW5vdGVIb3N0KSB7XG4gIGlmICghaXNTdHJpbmcodXJsKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJQYXJhbWV0ZXIgJ3VybCcgbXVzdCBiZSBhIHN0cmluZywgbm90IFwiICsgdHlwZW9mIHVybCk7XG4gIH1cblxuICB2YXIgcmVzdCA9IHVybDtcblxuICAvLyB0cmltIGJlZm9yZSBwcm9jZWVkaW5nLlxuICAvLyBUaGlzIGlzIHRvIHN1cHBvcnQgcGFyc2Ugc3R1ZmYgbGlrZSBcIiAgaHR0cDovL2Zvby5jb20gIFxcblwiXG4gIHJlc3QgPSByZXN0LnRyaW0oKTtcblxuICB2YXIgcHJvdG8gPSBwcm90b2NvbFBhdHRlcm4uZXhlYyhyZXN0KTtcbiAgaWYgKHByb3RvKSB7XG4gICAgcHJvdG8gPSBwcm90b1swXTtcbiAgICB2YXIgbG93ZXJQcm90byA9IHByb3RvLnRvTG93ZXJDYXNlKCk7XG4gICAgdGhpcy5wcm90b2NvbCA9IGxvd2VyUHJvdG87XG4gICAgcmVzdCA9IHJlc3Quc3Vic3RyKHByb3RvLmxlbmd0aCk7XG4gIH1cblxuICAvLyBmaWd1cmUgb3V0IGlmIGl0J3MgZ290IGEgaG9zdFxuICAvLyB1c2VyQHNlcnZlciBpcyAqYWx3YXlzKiBpbnRlcnByZXRlZCBhcyBhIGhvc3RuYW1lLCBhbmQgdXJsXG4gIC8vIHJlc29sdXRpb24gd2lsbCB0cmVhdCAvL2Zvby9iYXIgYXMgaG9zdD1mb28scGF0aD1iYXIgYmVjYXVzZSB0aGF0J3NcbiAgLy8gaG93IHRoZSBicm93c2VyIHJlc29sdmVzIHJlbGF0aXZlIFVSTHMuXG4gIGlmIChzbGFzaGVzRGVub3RlSG9zdCB8fCBwcm90byB8fCByZXN0Lm1hdGNoKC9eXFwvXFwvW15AXFwvXStAW15AXFwvXSsvKSkge1xuICAgIHZhciBzbGFzaGVzID0gcmVzdC5zdWJzdHIoMCwgMikgPT09ICcvLyc7XG4gICAgaWYgKHNsYXNoZXMgJiYgIShwcm90byAmJiBob3N0bGVzc1Byb3RvY29sW3Byb3RvXSkpIHtcbiAgICAgIHJlc3QgPSByZXN0LnN1YnN0cigyKTtcbiAgICAgIHRoaXMuc2xhc2hlcyA9IHRydWU7XG4gICAgfVxuICB9XG5cbiAgaWYgKCFob3N0bGVzc1Byb3RvY29sW3Byb3RvXSAmJlxuICAgICAgKHNsYXNoZXMgfHwgKHByb3RvICYmICFzbGFzaGVkUHJvdG9jb2xbcHJvdG9dKSkpIHtcblxuICAgIC8vIHRoZXJlJ3MgYSBob3N0bmFtZS5cbiAgICAvLyB0aGUgZmlyc3QgaW5zdGFuY2Ugb2YgLywgPywgOywgb3IgIyBlbmRzIHRoZSBob3N0LlxuICAgIC8vXG4gICAgLy8gSWYgdGhlcmUgaXMgYW4gQCBpbiB0aGUgaG9zdG5hbWUsIHRoZW4gbm9uLWhvc3QgY2hhcnMgKmFyZSogYWxsb3dlZFxuICAgIC8vIHRvIHRoZSBsZWZ0IG9mIHRoZSBsYXN0IEAgc2lnbiwgdW5sZXNzIHNvbWUgaG9zdC1lbmRpbmcgY2hhcmFjdGVyXG4gICAgLy8gY29tZXMgKmJlZm9yZSogdGhlIEAtc2lnbi5cbiAgICAvLyBVUkxzIGFyZSBvYm5veGlvdXMuXG4gICAgLy9cbiAgICAvLyBleDpcbiAgICAvLyBodHRwOi8vYUBiQGMvID0+IHVzZXI6YUBiIGhvc3Q6Y1xuICAgIC8vIGh0dHA6Ly9hQGI/QGMgPT4gdXNlcjphIGhvc3Q6YyBwYXRoOi8/QGNcblxuICAgIC8vIHYwLjEyIFRPRE8oaXNhYWNzKTogVGhpcyBpcyBub3QgcXVpdGUgaG93IENocm9tZSBkb2VzIHRoaW5ncy5cbiAgICAvLyBSZXZpZXcgb3VyIHRlc3QgY2FzZSBhZ2FpbnN0IGJyb3dzZXJzIG1vcmUgY29tcHJlaGVuc2l2ZWx5LlxuXG4gICAgLy8gZmluZCB0aGUgZmlyc3QgaW5zdGFuY2Ugb2YgYW55IGhvc3RFbmRpbmdDaGFyc1xuICAgIHZhciBob3N0RW5kID0gLTE7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBob3N0RW5kaW5nQ2hhcnMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBoZWMgPSByZXN0LmluZGV4T2YoaG9zdEVuZGluZ0NoYXJzW2ldKTtcbiAgICAgIGlmIChoZWMgIT09IC0xICYmIChob3N0RW5kID09PSAtMSB8fCBoZWMgPCBob3N0RW5kKSlcbiAgICAgICAgaG9zdEVuZCA9IGhlYztcbiAgICB9XG5cbiAgICAvLyBhdCB0aGlzIHBvaW50LCBlaXRoZXIgd2UgaGF2ZSBhbiBleHBsaWNpdCBwb2ludCB3aGVyZSB0aGVcbiAgICAvLyBhdXRoIHBvcnRpb24gY2Fubm90IGdvIHBhc3QsIG9yIHRoZSBsYXN0IEAgY2hhciBpcyB0aGUgZGVjaWRlci5cbiAgICB2YXIgYXV0aCwgYXRTaWduO1xuICAgIGlmIChob3N0RW5kID09PSAtMSkge1xuICAgICAgLy8gYXRTaWduIGNhbiBiZSBhbnl3aGVyZS5cbiAgICAgIGF0U2lnbiA9IHJlc3QubGFzdEluZGV4T2YoJ0AnKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gYXRTaWduIG11c3QgYmUgaW4gYXV0aCBwb3J0aW9uLlxuICAgICAgLy8gaHR0cDovL2FAYi9jQGQgPT4gaG9zdDpiIGF1dGg6YSBwYXRoOi9jQGRcbiAgICAgIGF0U2lnbiA9IHJlc3QubGFzdEluZGV4T2YoJ0AnLCBob3N0RW5kKTtcbiAgICB9XG5cbiAgICAvLyBOb3cgd2UgaGF2ZSBhIHBvcnRpb24gd2hpY2ggaXMgZGVmaW5pdGVseSB0aGUgYXV0aC5cbiAgICAvLyBQdWxsIHRoYXQgb2ZmLlxuICAgIGlmIChhdFNpZ24gIT09IC0xKSB7XG4gICAgICBhdXRoID0gcmVzdC5zbGljZSgwLCBhdFNpZ24pO1xuICAgICAgcmVzdCA9IHJlc3Quc2xpY2UoYXRTaWduICsgMSk7XG4gICAgICB0aGlzLmF1dGggPSBkZWNvZGVVUklDb21wb25lbnQoYXV0aCk7XG4gICAgfVxuXG4gICAgLy8gdGhlIGhvc3QgaXMgdGhlIHJlbWFpbmluZyB0byB0aGUgbGVmdCBvZiB0aGUgZmlyc3Qgbm9uLWhvc3QgY2hhclxuICAgIGhvc3RFbmQgPSAtMTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG5vbkhvc3RDaGFycy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGhlYyA9IHJlc3QuaW5kZXhPZihub25Ib3N0Q2hhcnNbaV0pO1xuICAgICAgaWYgKGhlYyAhPT0gLTEgJiYgKGhvc3RFbmQgPT09IC0xIHx8IGhlYyA8IGhvc3RFbmQpKVxuICAgICAgICBob3N0RW5kID0gaGVjO1xuICAgIH1cbiAgICAvLyBpZiB3ZSBzdGlsbCBoYXZlIG5vdCBoaXQgaXQsIHRoZW4gdGhlIGVudGlyZSB0aGluZyBpcyBhIGhvc3QuXG4gICAgaWYgKGhvc3RFbmQgPT09IC0xKVxuICAgICAgaG9zdEVuZCA9IHJlc3QubGVuZ3RoO1xuXG4gICAgdGhpcy5ob3N0ID0gcmVzdC5zbGljZSgwLCBob3N0RW5kKTtcbiAgICByZXN0ID0gcmVzdC5zbGljZShob3N0RW5kKTtcblxuICAgIC8vIHB1bGwgb3V0IHBvcnQuXG4gICAgdGhpcy5wYXJzZUhvc3QoKTtcblxuICAgIC8vIHdlJ3ZlIGluZGljYXRlZCB0aGF0IHRoZXJlIGlzIGEgaG9zdG5hbWUsXG4gICAgLy8gc28gZXZlbiBpZiBpdCdzIGVtcHR5LCBpdCBoYXMgdG8gYmUgcHJlc2VudC5cbiAgICB0aGlzLmhvc3RuYW1lID0gdGhpcy5ob3N0bmFtZSB8fCAnJztcblxuICAgIC8vIGlmIGhvc3RuYW1lIGJlZ2lucyB3aXRoIFsgYW5kIGVuZHMgd2l0aCBdXG4gICAgLy8gYXNzdW1lIHRoYXQgaXQncyBhbiBJUHY2IGFkZHJlc3MuXG4gICAgdmFyIGlwdjZIb3N0bmFtZSA9IHRoaXMuaG9zdG5hbWVbMF0gPT09ICdbJyAmJlxuICAgICAgICB0aGlzLmhvc3RuYW1lW3RoaXMuaG9zdG5hbWUubGVuZ3RoIC0gMV0gPT09ICddJztcblxuICAgIC8vIHZhbGlkYXRlIGEgbGl0dGxlLlxuICAgIGlmICghaXB2Nkhvc3RuYW1lKSB7XG4gICAgICB2YXIgaG9zdHBhcnRzID0gdGhpcy5ob3N0bmFtZS5zcGxpdCgvXFwuLyk7XG4gICAgICBmb3IgKHZhciBpID0gMCwgbCA9IGhvc3RwYXJ0cy5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICAgICAgdmFyIHBhcnQgPSBob3N0cGFydHNbaV07XG4gICAgICAgIGlmICghcGFydCkgY29udGludWU7XG4gICAgICAgIGlmICghcGFydC5tYXRjaChob3N0bmFtZVBhcnRQYXR0ZXJuKSkge1xuICAgICAgICAgIHZhciBuZXdwYXJ0ID0gJyc7XG4gICAgICAgICAgZm9yICh2YXIgaiA9IDAsIGsgPSBwYXJ0Lmxlbmd0aDsgaiA8IGs7IGorKykge1xuICAgICAgICAgICAgaWYgKHBhcnQuY2hhckNvZGVBdChqKSA+IDEyNykge1xuICAgICAgICAgICAgICAvLyB3ZSByZXBsYWNlIG5vbi1BU0NJSSBjaGFyIHdpdGggYSB0ZW1wb3JhcnkgcGxhY2Vob2xkZXJcbiAgICAgICAgICAgICAgLy8gd2UgbmVlZCB0aGlzIHRvIG1ha2Ugc3VyZSBzaXplIG9mIGhvc3RuYW1lIGlzIG5vdFxuICAgICAgICAgICAgICAvLyBicm9rZW4gYnkgcmVwbGFjaW5nIG5vbi1BU0NJSSBieSBub3RoaW5nXG4gICAgICAgICAgICAgIG5ld3BhcnQgKz0gJ3gnO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgbmV3cGFydCArPSBwYXJ0W2pdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICAvLyB3ZSB0ZXN0IGFnYWluIHdpdGggQVNDSUkgY2hhciBvbmx5XG4gICAgICAgICAgaWYgKCFuZXdwYXJ0Lm1hdGNoKGhvc3RuYW1lUGFydFBhdHRlcm4pKSB7XG4gICAgICAgICAgICB2YXIgdmFsaWRQYXJ0cyA9IGhvc3RwYXJ0cy5zbGljZSgwLCBpKTtcbiAgICAgICAgICAgIHZhciBub3RIb3N0ID0gaG9zdHBhcnRzLnNsaWNlKGkgKyAxKTtcbiAgICAgICAgICAgIHZhciBiaXQgPSBwYXJ0Lm1hdGNoKGhvc3RuYW1lUGFydFN0YXJ0KTtcbiAgICAgICAgICAgIGlmIChiaXQpIHtcbiAgICAgICAgICAgICAgdmFsaWRQYXJ0cy5wdXNoKGJpdFsxXSk7XG4gICAgICAgICAgICAgIG5vdEhvc3QudW5zaGlmdChiaXRbMl0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKG5vdEhvc3QubGVuZ3RoKSB7XG4gICAgICAgICAgICAgIHJlc3QgPSAnLycgKyBub3RIb3N0LmpvaW4oJy4nKSArIHJlc3Q7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmhvc3RuYW1lID0gdmFsaWRQYXJ0cy5qb2luKCcuJyk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodGhpcy5ob3N0bmFtZS5sZW5ndGggPiBob3N0bmFtZU1heExlbikge1xuICAgICAgdGhpcy5ob3N0bmFtZSA9ICcnO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBob3N0bmFtZXMgYXJlIGFsd2F5cyBsb3dlciBjYXNlLlxuICAgICAgdGhpcy5ob3N0bmFtZSA9IHRoaXMuaG9zdG5hbWUudG9Mb3dlckNhc2UoKTtcbiAgICB9XG5cbiAgICBpZiAoIWlwdjZIb3N0bmFtZSkge1xuICAgICAgLy8gSUROQSBTdXBwb3J0OiBSZXR1cm5zIGEgcHVueSBjb2RlZCByZXByZXNlbnRhdGlvbiBvZiBcImRvbWFpblwiLlxuICAgICAgLy8gSXQgb25seSBjb252ZXJ0cyB0aGUgcGFydCBvZiB0aGUgZG9tYWluIG5hbWUgdGhhdFxuICAgICAgLy8gaGFzIG5vbiBBU0NJSSBjaGFyYWN0ZXJzLiBJLmUuIGl0IGRvc2VudCBtYXR0ZXIgaWZcbiAgICAgIC8vIHlvdSBjYWxsIGl0IHdpdGggYSBkb21haW4gdGhhdCBhbHJlYWR5IGlzIGluIEFTQ0lJLlxuICAgICAgdmFyIGRvbWFpbkFycmF5ID0gdGhpcy5ob3N0bmFtZS5zcGxpdCgnLicpO1xuICAgICAgdmFyIG5ld091dCA9IFtdO1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBkb21haW5BcnJheS5sZW5ndGg7ICsraSkge1xuICAgICAgICB2YXIgcyA9IGRvbWFpbkFycmF5W2ldO1xuICAgICAgICBuZXdPdXQucHVzaChzLm1hdGNoKC9bXkEtWmEtejAtOV8tXS8pID9cbiAgICAgICAgICAgICd4bi0tJyArIHB1bnljb2RlLmVuY29kZShzKSA6IHMpO1xuICAgICAgfVxuICAgICAgdGhpcy5ob3N0bmFtZSA9IG5ld091dC5qb2luKCcuJyk7XG4gICAgfVxuXG4gICAgdmFyIHAgPSB0aGlzLnBvcnQgPyAnOicgKyB0aGlzLnBvcnQgOiAnJztcbiAgICB2YXIgaCA9IHRoaXMuaG9zdG5hbWUgfHwgJyc7XG4gICAgdGhpcy5ob3N0ID0gaCArIHA7XG4gICAgdGhpcy5ocmVmICs9IHRoaXMuaG9zdDtcblxuICAgIC8vIHN0cmlwIFsgYW5kIF0gZnJvbSB0aGUgaG9zdG5hbWVcbiAgICAvLyB0aGUgaG9zdCBmaWVsZCBzdGlsbCByZXRhaW5zIHRoZW0sIHRob3VnaFxuICAgIGlmIChpcHY2SG9zdG5hbWUpIHtcbiAgICAgIHRoaXMuaG9zdG5hbWUgPSB0aGlzLmhvc3RuYW1lLnN1YnN0cigxLCB0aGlzLmhvc3RuYW1lLmxlbmd0aCAtIDIpO1xuICAgICAgaWYgKHJlc3RbMF0gIT09ICcvJykge1xuICAgICAgICByZXN0ID0gJy8nICsgcmVzdDtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyBub3cgcmVzdCBpcyBzZXQgdG8gdGhlIHBvc3QtaG9zdCBzdHVmZi5cbiAgLy8gY2hvcCBvZmYgYW55IGRlbGltIGNoYXJzLlxuICBpZiAoIXVuc2FmZVByb3RvY29sW2xvd2VyUHJvdG9dKSB7XG5cbiAgICAvLyBGaXJzdCwgbWFrZSAxMDAlIHN1cmUgdGhhdCBhbnkgXCJhdXRvRXNjYXBlXCIgY2hhcnMgZ2V0XG4gICAgLy8gZXNjYXBlZCwgZXZlbiBpZiBlbmNvZGVVUklDb21wb25lbnQgZG9lc24ndCB0aGluayB0aGV5XG4gICAgLy8gbmVlZCB0byBiZS5cbiAgICBmb3IgKHZhciBpID0gMCwgbCA9IGF1dG9Fc2NhcGUubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgICB2YXIgYWUgPSBhdXRvRXNjYXBlW2ldO1xuICAgICAgdmFyIGVzYyA9IGVuY29kZVVSSUNvbXBvbmVudChhZSk7XG4gICAgICBpZiAoZXNjID09PSBhZSkge1xuICAgICAgICBlc2MgPSBlc2NhcGUoYWUpO1xuICAgICAgfVxuICAgICAgcmVzdCA9IHJlc3Quc3BsaXQoYWUpLmpvaW4oZXNjKTtcbiAgICB9XG4gIH1cblxuXG4gIC8vIGNob3Agb2ZmIGZyb20gdGhlIHRhaWwgZmlyc3QuXG4gIHZhciBoYXNoID0gcmVzdC5pbmRleE9mKCcjJyk7XG4gIGlmIChoYXNoICE9PSAtMSkge1xuICAgIC8vIGdvdCBhIGZyYWdtZW50IHN0cmluZy5cbiAgICB0aGlzLmhhc2ggPSByZXN0LnN1YnN0cihoYXNoKTtcbiAgICByZXN0ID0gcmVzdC5zbGljZSgwLCBoYXNoKTtcbiAgfVxuICB2YXIgcW0gPSByZXN0LmluZGV4T2YoJz8nKTtcbiAgaWYgKHFtICE9PSAtMSkge1xuICAgIHRoaXMuc2VhcmNoID0gcmVzdC5zdWJzdHIocW0pO1xuICAgIHRoaXMucXVlcnkgPSByZXN0LnN1YnN0cihxbSArIDEpO1xuICAgIGlmIChwYXJzZVF1ZXJ5U3RyaW5nKSB7XG4gICAgICB0aGlzLnF1ZXJ5ID0gcXVlcnlzdHJpbmcucGFyc2UodGhpcy5xdWVyeSk7XG4gICAgfVxuICAgIHJlc3QgPSByZXN0LnNsaWNlKDAsIHFtKTtcbiAgfSBlbHNlIGlmIChwYXJzZVF1ZXJ5U3RyaW5nKSB7XG4gICAgLy8gbm8gcXVlcnkgc3RyaW5nLCBidXQgcGFyc2VRdWVyeVN0cmluZyBzdGlsbCByZXF1ZXN0ZWRcbiAgICB0aGlzLnNlYXJjaCA9ICcnO1xuICAgIHRoaXMucXVlcnkgPSB7fTtcbiAgfVxuICBpZiAocmVzdCkgdGhpcy5wYXRobmFtZSA9IHJlc3Q7XG4gIGlmIChzbGFzaGVkUHJvdG9jb2xbbG93ZXJQcm90b10gJiZcbiAgICAgIHRoaXMuaG9zdG5hbWUgJiYgIXRoaXMucGF0aG5hbWUpIHtcbiAgICB0aGlzLnBhdGhuYW1lID0gJy8nO1xuICB9XG5cbiAgLy90byBzdXBwb3J0IGh0dHAucmVxdWVzdFxuICBpZiAodGhpcy5wYXRobmFtZSB8fCB0aGlzLnNlYXJjaCkge1xuICAgIHZhciBwID0gdGhpcy5wYXRobmFtZSB8fCAnJztcbiAgICB2YXIgcyA9IHRoaXMuc2VhcmNoIHx8ICcnO1xuICAgIHRoaXMucGF0aCA9IHAgKyBzO1xuICB9XG5cbiAgLy8gZmluYWxseSwgcmVjb25zdHJ1Y3QgdGhlIGhyZWYgYmFzZWQgb24gd2hhdCBoYXMgYmVlbiB2YWxpZGF0ZWQuXG4gIHRoaXMuaHJlZiA9IHRoaXMuZm9ybWF0KCk7XG4gIHJldHVybiB0aGlzO1xufTtcblxuLy8gZm9ybWF0IGEgcGFyc2VkIG9iamVjdCBpbnRvIGEgdXJsIHN0cmluZ1xuZnVuY3Rpb24gdXJsRm9ybWF0KG9iaikge1xuICAvLyBlbnN1cmUgaXQncyBhbiBvYmplY3QsIGFuZCBub3QgYSBzdHJpbmcgdXJsLlxuICAvLyBJZiBpdCdzIGFuIG9iaiwgdGhpcyBpcyBhIG5vLW9wLlxuICAvLyB0aGlzIHdheSwgeW91IGNhbiBjYWxsIHVybF9mb3JtYXQoKSBvbiBzdHJpbmdzXG4gIC8vIHRvIGNsZWFuIHVwIHBvdGVudGlhbGx5IHdvbmt5IHVybHMuXG4gIGlmIChpc1N0cmluZyhvYmopKSBvYmogPSB1cmxQYXJzZShvYmopO1xuICBpZiAoIShvYmogaW5zdGFuY2VvZiBVcmwpKSByZXR1cm4gVXJsLnByb3RvdHlwZS5mb3JtYXQuY2FsbChvYmopO1xuICByZXR1cm4gb2JqLmZvcm1hdCgpO1xufVxuXG5VcmwucHJvdG90eXBlLmZvcm1hdCA9IGZ1bmN0aW9uKCkge1xuICB2YXIgYXV0aCA9IHRoaXMuYXV0aCB8fCAnJztcbiAgaWYgKGF1dGgpIHtcbiAgICBhdXRoID0gZW5jb2RlVVJJQ29tcG9uZW50KGF1dGgpO1xuICAgIGF1dGggPSBhdXRoLnJlcGxhY2UoLyUzQS9pLCAnOicpO1xuICAgIGF1dGggKz0gJ0AnO1xuICB9XG5cbiAgdmFyIHByb3RvY29sID0gdGhpcy5wcm90b2NvbCB8fCAnJyxcbiAgICAgIHBhdGhuYW1lID0gdGhpcy5wYXRobmFtZSB8fCAnJyxcbiAgICAgIGhhc2ggPSB0aGlzLmhhc2ggfHwgJycsXG4gICAgICBob3N0ID0gZmFsc2UsXG4gICAgICBxdWVyeSA9ICcnO1xuXG4gIGlmICh0aGlzLmhvc3QpIHtcbiAgICBob3N0ID0gYXV0aCArIHRoaXMuaG9zdDtcbiAgfSBlbHNlIGlmICh0aGlzLmhvc3RuYW1lKSB7XG4gICAgaG9zdCA9IGF1dGggKyAodGhpcy5ob3N0bmFtZS5pbmRleE9mKCc6JykgPT09IC0xID9cbiAgICAgICAgdGhpcy5ob3N0bmFtZSA6XG4gICAgICAgICdbJyArIHRoaXMuaG9zdG5hbWUgKyAnXScpO1xuICAgIGlmICh0aGlzLnBvcnQpIHtcbiAgICAgIGhvc3QgKz0gJzonICsgdGhpcy5wb3J0O1xuICAgIH1cbiAgfVxuXG4gIGlmICh0aGlzLnF1ZXJ5ICYmXG4gICAgICBpc09iamVjdCh0aGlzLnF1ZXJ5KSAmJlxuICAgICAgT2JqZWN0LmtleXModGhpcy5xdWVyeSkubGVuZ3RoKSB7XG4gICAgcXVlcnkgPSBxdWVyeXN0cmluZy5zdHJpbmdpZnkodGhpcy5xdWVyeSk7XG4gIH1cblxuICB2YXIgc2VhcmNoID0gdGhpcy5zZWFyY2ggfHwgKHF1ZXJ5ICYmICgnPycgKyBxdWVyeSkpIHx8ICcnO1xuXG4gIGlmIChwcm90b2NvbCAmJiBwcm90b2NvbC5zdWJzdHIoLTEpICE9PSAnOicpIHByb3RvY29sICs9ICc6JztcblxuICAvLyBvbmx5IHRoZSBzbGFzaGVkUHJvdG9jb2xzIGdldCB0aGUgLy8uICBOb3QgbWFpbHRvOiwgeG1wcDosIGV0Yy5cbiAgLy8gdW5sZXNzIHRoZXkgaGFkIHRoZW0gdG8gYmVnaW4gd2l0aC5cbiAgaWYgKHRoaXMuc2xhc2hlcyB8fFxuICAgICAgKCFwcm90b2NvbCB8fCBzbGFzaGVkUHJvdG9jb2xbcHJvdG9jb2xdKSAmJiBob3N0ICE9PSBmYWxzZSkge1xuICAgIGhvc3QgPSAnLy8nICsgKGhvc3QgfHwgJycpO1xuICAgIGlmIChwYXRobmFtZSAmJiBwYXRobmFtZS5jaGFyQXQoMCkgIT09ICcvJykgcGF0aG5hbWUgPSAnLycgKyBwYXRobmFtZTtcbiAgfSBlbHNlIGlmICghaG9zdCkge1xuICAgIGhvc3QgPSAnJztcbiAgfVxuXG4gIGlmIChoYXNoICYmIGhhc2guY2hhckF0KDApICE9PSAnIycpIGhhc2ggPSAnIycgKyBoYXNoO1xuICBpZiAoc2VhcmNoICYmIHNlYXJjaC5jaGFyQXQoMCkgIT09ICc/Jykgc2VhcmNoID0gJz8nICsgc2VhcmNoO1xuXG4gIHBhdGhuYW1lID0gcGF0aG5hbWUucmVwbGFjZSgvWz8jXS9nLCBmdW5jdGlvbihtYXRjaCkge1xuICAgIHJldHVybiBlbmNvZGVVUklDb21wb25lbnQobWF0Y2gpO1xuICB9KTtcbiAgc2VhcmNoID0gc2VhcmNoLnJlcGxhY2UoJyMnLCAnJTIzJyk7XG5cbiAgcmV0dXJuIHByb3RvY29sICsgaG9zdCArIHBhdGhuYW1lICsgc2VhcmNoICsgaGFzaDtcbn07XG5cbmZ1bmN0aW9uIHVybFJlc29sdmUoc291cmNlLCByZWxhdGl2ZSkge1xuICByZXR1cm4gdXJsUGFyc2Uoc291cmNlLCBmYWxzZSwgdHJ1ZSkucmVzb2x2ZShyZWxhdGl2ZSk7XG59XG5cblVybC5wcm90b3R5cGUucmVzb2x2ZSA9IGZ1bmN0aW9uKHJlbGF0aXZlKSB7XG4gIHJldHVybiB0aGlzLnJlc29sdmVPYmplY3QodXJsUGFyc2UocmVsYXRpdmUsIGZhbHNlLCB0cnVlKSkuZm9ybWF0KCk7XG59O1xuXG5mdW5jdGlvbiB1cmxSZXNvbHZlT2JqZWN0KHNvdXJjZSwgcmVsYXRpdmUpIHtcbiAgaWYgKCFzb3VyY2UpIHJldHVybiByZWxhdGl2ZTtcbiAgcmV0dXJuIHVybFBhcnNlKHNvdXJjZSwgZmFsc2UsIHRydWUpLnJlc29sdmVPYmplY3QocmVsYXRpdmUpO1xufVxuXG5VcmwucHJvdG90eXBlLnJlc29sdmVPYmplY3QgPSBmdW5jdGlvbihyZWxhdGl2ZSkge1xuICBpZiAoaXNTdHJpbmcocmVsYXRpdmUpKSB7XG4gICAgdmFyIHJlbCA9IG5ldyBVcmwoKTtcbiAgICByZWwucGFyc2UocmVsYXRpdmUsIGZhbHNlLCB0cnVlKTtcbiAgICByZWxhdGl2ZSA9IHJlbDtcbiAgfVxuXG4gIHZhciByZXN1bHQgPSBuZXcgVXJsKCk7XG4gIE9iamVjdC5rZXlzKHRoaXMpLmZvckVhY2goZnVuY3Rpb24oaykge1xuICAgIHJlc3VsdFtrXSA9IHRoaXNba107XG4gIH0sIHRoaXMpO1xuXG4gIC8vIGhhc2ggaXMgYWx3YXlzIG92ZXJyaWRkZW4sIG5vIG1hdHRlciB3aGF0LlxuICAvLyBldmVuIGhyZWY9XCJcIiB3aWxsIHJlbW92ZSBpdC5cbiAgcmVzdWx0Lmhhc2ggPSByZWxhdGl2ZS5oYXNoO1xuXG4gIC8vIGlmIHRoZSByZWxhdGl2ZSB1cmwgaXMgZW1wdHksIHRoZW4gdGhlcmUncyBub3RoaW5nIGxlZnQgdG8gZG8gaGVyZS5cbiAgaWYgKHJlbGF0aXZlLmhyZWYgPT09ICcnKSB7XG4gICAgcmVzdWx0LmhyZWYgPSByZXN1bHQuZm9ybWF0KCk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIC8vIGhyZWZzIGxpa2UgLy9mb28vYmFyIGFsd2F5cyBjdXQgdG8gdGhlIHByb3RvY29sLlxuICBpZiAocmVsYXRpdmUuc2xhc2hlcyAmJiAhcmVsYXRpdmUucHJvdG9jb2wpIHtcbiAgICAvLyB0YWtlIGV2ZXJ5dGhpbmcgZXhjZXB0IHRoZSBwcm90b2NvbCBmcm9tIHJlbGF0aXZlXG4gICAgT2JqZWN0LmtleXMocmVsYXRpdmUpLmZvckVhY2goZnVuY3Rpb24oaykge1xuICAgICAgaWYgKGsgIT09ICdwcm90b2NvbCcpXG4gICAgICAgIHJlc3VsdFtrXSA9IHJlbGF0aXZlW2tdO1xuICAgIH0pO1xuXG4gICAgLy91cmxQYXJzZSBhcHBlbmRzIHRyYWlsaW5nIC8gdG8gdXJscyBsaWtlIGh0dHA6Ly93d3cuZXhhbXBsZS5jb21cbiAgICBpZiAoc2xhc2hlZFByb3RvY29sW3Jlc3VsdC5wcm90b2NvbF0gJiZcbiAgICAgICAgcmVzdWx0Lmhvc3RuYW1lICYmICFyZXN1bHQucGF0aG5hbWUpIHtcbiAgICAgIHJlc3VsdC5wYXRoID0gcmVzdWx0LnBhdGhuYW1lID0gJy8nO1xuICAgIH1cblxuICAgIHJlc3VsdC5ocmVmID0gcmVzdWx0LmZvcm1hdCgpO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICBpZiAocmVsYXRpdmUucHJvdG9jb2wgJiYgcmVsYXRpdmUucHJvdG9jb2wgIT09IHJlc3VsdC5wcm90b2NvbCkge1xuICAgIC8vIGlmIGl0J3MgYSBrbm93biB1cmwgcHJvdG9jb2wsIHRoZW4gY2hhbmdpbmdcbiAgICAvLyB0aGUgcHJvdG9jb2wgZG9lcyB3ZWlyZCB0aGluZ3NcbiAgICAvLyBmaXJzdCwgaWYgaXQncyBub3QgZmlsZTosIHRoZW4gd2UgTVVTVCBoYXZlIGEgaG9zdCxcbiAgICAvLyBhbmQgaWYgdGhlcmUgd2FzIGEgcGF0aFxuICAgIC8vIHRvIGJlZ2luIHdpdGgsIHRoZW4gd2UgTVVTVCBoYXZlIGEgcGF0aC5cbiAgICAvLyBpZiBpdCBpcyBmaWxlOiwgdGhlbiB0aGUgaG9zdCBpcyBkcm9wcGVkLFxuICAgIC8vIGJlY2F1c2UgdGhhdCdzIGtub3duIHRvIGJlIGhvc3RsZXNzLlxuICAgIC8vIGFueXRoaW5nIGVsc2UgaXMgYXNzdW1lZCB0byBiZSBhYnNvbHV0ZS5cbiAgICBpZiAoIXNsYXNoZWRQcm90b2NvbFtyZWxhdGl2ZS5wcm90b2NvbF0pIHtcbiAgICAgIE9iamVjdC5rZXlzKHJlbGF0aXZlKS5mb3JFYWNoKGZ1bmN0aW9uKGspIHtcbiAgICAgICAgcmVzdWx0W2tdID0gcmVsYXRpdmVba107XG4gICAgICB9KTtcbiAgICAgIHJlc3VsdC5ocmVmID0gcmVzdWx0LmZvcm1hdCgpO1xuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICByZXN1bHQucHJvdG9jb2wgPSByZWxhdGl2ZS5wcm90b2NvbDtcbiAgICBpZiAoIXJlbGF0aXZlLmhvc3QgJiYgIWhvc3RsZXNzUHJvdG9jb2xbcmVsYXRpdmUucHJvdG9jb2xdKSB7XG4gICAgICB2YXIgcmVsUGF0aCA9IChyZWxhdGl2ZS5wYXRobmFtZSB8fCAnJykuc3BsaXQoJy8nKTtcbiAgICAgIHdoaWxlIChyZWxQYXRoLmxlbmd0aCAmJiAhKHJlbGF0aXZlLmhvc3QgPSByZWxQYXRoLnNoaWZ0KCkpKTtcbiAgICAgIGlmICghcmVsYXRpdmUuaG9zdCkgcmVsYXRpdmUuaG9zdCA9ICcnO1xuICAgICAgaWYgKCFyZWxhdGl2ZS5ob3N0bmFtZSkgcmVsYXRpdmUuaG9zdG5hbWUgPSAnJztcbiAgICAgIGlmIChyZWxQYXRoWzBdICE9PSAnJykgcmVsUGF0aC51bnNoaWZ0KCcnKTtcbiAgICAgIGlmIChyZWxQYXRoLmxlbmd0aCA8IDIpIHJlbFBhdGgudW5zaGlmdCgnJyk7XG4gICAgICByZXN1bHQucGF0aG5hbWUgPSByZWxQYXRoLmpvaW4oJy8nKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmVzdWx0LnBhdGhuYW1lID0gcmVsYXRpdmUucGF0aG5hbWU7XG4gICAgfVxuICAgIHJlc3VsdC5zZWFyY2ggPSByZWxhdGl2ZS5zZWFyY2g7XG4gICAgcmVzdWx0LnF1ZXJ5ID0gcmVsYXRpdmUucXVlcnk7XG4gICAgcmVzdWx0Lmhvc3QgPSByZWxhdGl2ZS5ob3N0IHx8ICcnO1xuICAgIHJlc3VsdC5hdXRoID0gcmVsYXRpdmUuYXV0aDtcbiAgICByZXN1bHQuaG9zdG5hbWUgPSByZWxhdGl2ZS5ob3N0bmFtZSB8fCByZWxhdGl2ZS5ob3N0O1xuICAgIHJlc3VsdC5wb3J0ID0gcmVsYXRpdmUucG9ydDtcbiAgICAvLyB0byBzdXBwb3J0IGh0dHAucmVxdWVzdFxuICAgIGlmIChyZXN1bHQucGF0aG5hbWUgfHwgcmVzdWx0LnNlYXJjaCkge1xuICAgICAgdmFyIHAgPSByZXN1bHQucGF0aG5hbWUgfHwgJyc7XG4gICAgICB2YXIgcyA9IHJlc3VsdC5zZWFyY2ggfHwgJyc7XG4gICAgICByZXN1bHQucGF0aCA9IHAgKyBzO1xuICAgIH1cbiAgICByZXN1bHQuc2xhc2hlcyA9IHJlc3VsdC5zbGFzaGVzIHx8IHJlbGF0aXZlLnNsYXNoZXM7XG4gICAgcmVzdWx0LmhyZWYgPSByZXN1bHQuZm9ybWF0KCk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIHZhciBpc1NvdXJjZUFicyA9IChyZXN1bHQucGF0aG5hbWUgJiYgcmVzdWx0LnBhdGhuYW1lLmNoYXJBdCgwKSA9PT0gJy8nKSxcbiAgICAgIGlzUmVsQWJzID0gKFxuICAgICAgICAgIHJlbGF0aXZlLmhvc3QgfHxcbiAgICAgICAgICByZWxhdGl2ZS5wYXRobmFtZSAmJiByZWxhdGl2ZS5wYXRobmFtZS5jaGFyQXQoMCkgPT09ICcvJ1xuICAgICAgKSxcbiAgICAgIG11c3RFbmRBYnMgPSAoaXNSZWxBYnMgfHwgaXNTb3VyY2VBYnMgfHxcbiAgICAgICAgICAgICAgICAgICAgKHJlc3VsdC5ob3N0ICYmIHJlbGF0aXZlLnBhdGhuYW1lKSksXG4gICAgICByZW1vdmVBbGxEb3RzID0gbXVzdEVuZEFicyxcbiAgICAgIHNyY1BhdGggPSByZXN1bHQucGF0aG5hbWUgJiYgcmVzdWx0LnBhdGhuYW1lLnNwbGl0KCcvJykgfHwgW10sXG4gICAgICByZWxQYXRoID0gcmVsYXRpdmUucGF0aG5hbWUgJiYgcmVsYXRpdmUucGF0aG5hbWUuc3BsaXQoJy8nKSB8fCBbXSxcbiAgICAgIHBzeWNob3RpYyA9IHJlc3VsdC5wcm90b2NvbCAmJiAhc2xhc2hlZFByb3RvY29sW3Jlc3VsdC5wcm90b2NvbF07XG5cbiAgLy8gaWYgdGhlIHVybCBpcyBhIG5vbi1zbGFzaGVkIHVybCwgdGhlbiByZWxhdGl2ZVxuICAvLyBsaW5rcyBsaWtlIC4uLy4uIHNob3VsZCBiZSBhYmxlXG4gIC8vIHRvIGNyYXdsIHVwIHRvIHRoZSBob3N0bmFtZSwgYXMgd2VsbC4gIFRoaXMgaXMgc3RyYW5nZS5cbiAgLy8gcmVzdWx0LnByb3RvY29sIGhhcyBhbHJlYWR5IGJlZW4gc2V0IGJ5IG5vdy5cbiAgLy8gTGF0ZXIgb24sIHB1dCB0aGUgZmlyc3QgcGF0aCBwYXJ0IGludG8gdGhlIGhvc3QgZmllbGQuXG4gIGlmIChwc3ljaG90aWMpIHtcbiAgICByZXN1bHQuaG9zdG5hbWUgPSAnJztcbiAgICByZXN1bHQucG9ydCA9IG51bGw7XG4gICAgaWYgKHJlc3VsdC5ob3N0KSB7XG4gICAgICBpZiAoc3JjUGF0aFswXSA9PT0gJycpIHNyY1BhdGhbMF0gPSByZXN1bHQuaG9zdDtcbiAgICAgIGVsc2Ugc3JjUGF0aC51bnNoaWZ0KHJlc3VsdC5ob3N0KTtcbiAgICB9XG4gICAgcmVzdWx0Lmhvc3QgPSAnJztcbiAgICBpZiAocmVsYXRpdmUucHJvdG9jb2wpIHtcbiAgICAgIHJlbGF0aXZlLmhvc3RuYW1lID0gbnVsbDtcbiAgICAgIHJlbGF0aXZlLnBvcnQgPSBudWxsO1xuICAgICAgaWYgKHJlbGF0aXZlLmhvc3QpIHtcbiAgICAgICAgaWYgKHJlbFBhdGhbMF0gPT09ICcnKSByZWxQYXRoWzBdID0gcmVsYXRpdmUuaG9zdDtcbiAgICAgICAgZWxzZSByZWxQYXRoLnVuc2hpZnQocmVsYXRpdmUuaG9zdCk7XG4gICAgICB9XG4gICAgICByZWxhdGl2ZS5ob3N0ID0gbnVsbDtcbiAgICB9XG4gICAgbXVzdEVuZEFicyA9IG11c3RFbmRBYnMgJiYgKHJlbFBhdGhbMF0gPT09ICcnIHx8IHNyY1BhdGhbMF0gPT09ICcnKTtcbiAgfVxuXG4gIGlmIChpc1JlbEFicykge1xuICAgIC8vIGl0J3MgYWJzb2x1dGUuXG4gICAgcmVzdWx0Lmhvc3QgPSAocmVsYXRpdmUuaG9zdCB8fCByZWxhdGl2ZS5ob3N0ID09PSAnJykgP1xuICAgICAgICAgICAgICAgICAgcmVsYXRpdmUuaG9zdCA6IHJlc3VsdC5ob3N0O1xuICAgIHJlc3VsdC5ob3N0bmFtZSA9IChyZWxhdGl2ZS5ob3N0bmFtZSB8fCByZWxhdGl2ZS5ob3N0bmFtZSA9PT0gJycpID9cbiAgICAgICAgICAgICAgICAgICAgICByZWxhdGl2ZS5ob3N0bmFtZSA6IHJlc3VsdC5ob3N0bmFtZTtcbiAgICByZXN1bHQuc2VhcmNoID0gcmVsYXRpdmUuc2VhcmNoO1xuICAgIHJlc3VsdC5xdWVyeSA9IHJlbGF0aXZlLnF1ZXJ5O1xuICAgIHNyY1BhdGggPSByZWxQYXRoO1xuICAgIC8vIGZhbGwgdGhyb3VnaCB0byB0aGUgZG90LWhhbmRsaW5nIGJlbG93LlxuICB9IGVsc2UgaWYgKHJlbFBhdGgubGVuZ3RoKSB7XG4gICAgLy8gaXQncyByZWxhdGl2ZVxuICAgIC8vIHRocm93IGF3YXkgdGhlIGV4aXN0aW5nIGZpbGUsIGFuZCB0YWtlIHRoZSBuZXcgcGF0aCBpbnN0ZWFkLlxuICAgIGlmICghc3JjUGF0aCkgc3JjUGF0aCA9IFtdO1xuICAgIHNyY1BhdGgucG9wKCk7XG4gICAgc3JjUGF0aCA9IHNyY1BhdGguY29uY2F0KHJlbFBhdGgpO1xuICAgIHJlc3VsdC5zZWFyY2ggPSByZWxhdGl2ZS5zZWFyY2g7XG4gICAgcmVzdWx0LnF1ZXJ5ID0gcmVsYXRpdmUucXVlcnk7XG4gIH0gZWxzZSBpZiAoIWlzTnVsbE9yVW5kZWZpbmVkKHJlbGF0aXZlLnNlYXJjaCkpIHtcbiAgICAvLyBqdXN0IHB1bGwgb3V0IHRoZSBzZWFyY2guXG4gICAgLy8gbGlrZSBocmVmPSc/Zm9vJy5cbiAgICAvLyBQdXQgdGhpcyBhZnRlciB0aGUgb3RoZXIgdHdvIGNhc2VzIGJlY2F1c2UgaXQgc2ltcGxpZmllcyB0aGUgYm9vbGVhbnNcbiAgICBpZiAocHN5Y2hvdGljKSB7XG4gICAgICByZXN1bHQuaG9zdG5hbWUgPSByZXN1bHQuaG9zdCA9IHNyY1BhdGguc2hpZnQoKTtcbiAgICAgIC8vb2NjYXRpb25hbHkgdGhlIGF1dGggY2FuIGdldCBzdHVjayBvbmx5IGluIGhvc3RcbiAgICAgIC8vdGhpcyBlc3BlY2lhbHkgaGFwcGVucyBpbiBjYXNlcyBsaWtlXG4gICAgICAvL3VybC5yZXNvbHZlT2JqZWN0KCdtYWlsdG86bG9jYWwxQGRvbWFpbjEnLCAnbG9jYWwyQGRvbWFpbjInKVxuICAgICAgdmFyIGF1dGhJbkhvc3QgPSByZXN1bHQuaG9zdCAmJiByZXN1bHQuaG9zdC5pbmRleE9mKCdAJykgPiAwID9cbiAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0Lmhvc3Quc3BsaXQoJ0AnKSA6IGZhbHNlO1xuICAgICAgaWYgKGF1dGhJbkhvc3QpIHtcbiAgICAgICAgcmVzdWx0LmF1dGggPSBhdXRoSW5Ib3N0LnNoaWZ0KCk7XG4gICAgICAgIHJlc3VsdC5ob3N0ID0gcmVzdWx0Lmhvc3RuYW1lID0gYXV0aEluSG9zdC5zaGlmdCgpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXN1bHQuc2VhcmNoID0gcmVsYXRpdmUuc2VhcmNoO1xuICAgIHJlc3VsdC5xdWVyeSA9IHJlbGF0aXZlLnF1ZXJ5O1xuICAgIC8vdG8gc3VwcG9ydCBodHRwLnJlcXVlc3RcbiAgICBpZiAoIWlzTnVsbChyZXN1bHQucGF0aG5hbWUpIHx8ICFpc051bGwocmVzdWx0LnNlYXJjaCkpIHtcbiAgICAgIHJlc3VsdC5wYXRoID0gKHJlc3VsdC5wYXRobmFtZSA/IHJlc3VsdC5wYXRobmFtZSA6ICcnKSArXG4gICAgICAgICAgICAgICAgICAgIChyZXN1bHQuc2VhcmNoID8gcmVzdWx0LnNlYXJjaCA6ICcnKTtcbiAgICB9XG4gICAgcmVzdWx0LmhyZWYgPSByZXN1bHQuZm9ybWF0KCk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIGlmICghc3JjUGF0aC5sZW5ndGgpIHtcbiAgICAvLyBubyBwYXRoIGF0IGFsbC4gIGVhc3kuXG4gICAgLy8gd2UndmUgYWxyZWFkeSBoYW5kbGVkIHRoZSBvdGhlciBzdHVmZiBhYm92ZS5cbiAgICByZXN1bHQucGF0aG5hbWUgPSBudWxsO1xuICAgIC8vdG8gc3VwcG9ydCBodHRwLnJlcXVlc3RcbiAgICBpZiAocmVzdWx0LnNlYXJjaCkge1xuICAgICAgcmVzdWx0LnBhdGggPSAnLycgKyByZXN1bHQuc2VhcmNoO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXN1bHQucGF0aCA9IG51bGw7XG4gICAgfVxuICAgIHJlc3VsdC5ocmVmID0gcmVzdWx0LmZvcm1hdCgpO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICAvLyBpZiBhIHVybCBFTkRzIGluIC4gb3IgLi4sIHRoZW4gaXQgbXVzdCBnZXQgYSB0cmFpbGluZyBzbGFzaC5cbiAgLy8gaG93ZXZlciwgaWYgaXQgZW5kcyBpbiBhbnl0aGluZyBlbHNlIG5vbi1zbGFzaHksXG4gIC8vIHRoZW4gaXQgbXVzdCBOT1QgZ2V0IGEgdHJhaWxpbmcgc2xhc2guXG4gIHZhciBsYXN0ID0gc3JjUGF0aC5zbGljZSgtMSlbMF07XG4gIHZhciBoYXNUcmFpbGluZ1NsYXNoID0gKFxuICAgICAgKHJlc3VsdC5ob3N0IHx8IHJlbGF0aXZlLmhvc3QpICYmIChsYXN0ID09PSAnLicgfHwgbGFzdCA9PT0gJy4uJykgfHxcbiAgICAgIGxhc3QgPT09ICcnKTtcblxuICAvLyBzdHJpcCBzaW5nbGUgZG90cywgcmVzb2x2ZSBkb3VibGUgZG90cyB0byBwYXJlbnQgZGlyXG4gIC8vIGlmIHRoZSBwYXRoIHRyaWVzIHRvIGdvIGFib3ZlIHRoZSByb290LCBgdXBgIGVuZHMgdXAgPiAwXG4gIHZhciB1cCA9IDA7XG4gIGZvciAodmFyIGkgPSBzcmNQYXRoLmxlbmd0aDsgaSA+PSAwOyBpLS0pIHtcbiAgICBsYXN0ID0gc3JjUGF0aFtpXTtcbiAgICBpZiAobGFzdCA9PSAnLicpIHtcbiAgICAgIHNyY1BhdGguc3BsaWNlKGksIDEpO1xuICAgIH0gZWxzZSBpZiAobGFzdCA9PT0gJy4uJykge1xuICAgICAgc3JjUGF0aC5zcGxpY2UoaSwgMSk7XG4gICAgICB1cCsrO1xuICAgIH0gZWxzZSBpZiAodXApIHtcbiAgICAgIHNyY1BhdGguc3BsaWNlKGksIDEpO1xuICAgICAgdXAtLTtcbiAgICB9XG4gIH1cblxuICAvLyBpZiB0aGUgcGF0aCBpcyBhbGxvd2VkIHRvIGdvIGFib3ZlIHRoZSByb290LCByZXN0b3JlIGxlYWRpbmcgLi5zXG4gIGlmICghbXVzdEVuZEFicyAmJiAhcmVtb3ZlQWxsRG90cykge1xuICAgIGZvciAoOyB1cC0tOyB1cCkge1xuICAgICAgc3JjUGF0aC51bnNoaWZ0KCcuLicpO1xuICAgIH1cbiAgfVxuXG4gIGlmIChtdXN0RW5kQWJzICYmIHNyY1BhdGhbMF0gIT09ICcnICYmXG4gICAgICAoIXNyY1BhdGhbMF0gfHwgc3JjUGF0aFswXS5jaGFyQXQoMCkgIT09ICcvJykpIHtcbiAgICBzcmNQYXRoLnVuc2hpZnQoJycpO1xuICB9XG5cbiAgaWYgKGhhc1RyYWlsaW5nU2xhc2ggJiYgKHNyY1BhdGguam9pbignLycpLnN1YnN0cigtMSkgIT09ICcvJykpIHtcbiAgICBzcmNQYXRoLnB1c2goJycpO1xuICB9XG5cbiAgdmFyIGlzQWJzb2x1dGUgPSBzcmNQYXRoWzBdID09PSAnJyB8fFxuICAgICAgKHNyY1BhdGhbMF0gJiYgc3JjUGF0aFswXS5jaGFyQXQoMCkgPT09ICcvJyk7XG5cbiAgLy8gcHV0IHRoZSBob3N0IGJhY2tcbiAgaWYgKHBzeWNob3RpYykge1xuICAgIHJlc3VsdC5ob3N0bmFtZSA9IHJlc3VsdC5ob3N0ID0gaXNBYnNvbHV0ZSA/ICcnIDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyY1BhdGgubGVuZ3RoID8gc3JjUGF0aC5zaGlmdCgpIDogJyc7XG4gICAgLy9vY2NhdGlvbmFseSB0aGUgYXV0aCBjYW4gZ2V0IHN0dWNrIG9ubHkgaW4gaG9zdFxuICAgIC8vdGhpcyBlc3BlY2lhbHkgaGFwcGVucyBpbiBjYXNlcyBsaWtlXG4gICAgLy91cmwucmVzb2x2ZU9iamVjdCgnbWFpbHRvOmxvY2FsMUBkb21haW4xJywgJ2xvY2FsMkBkb21haW4yJylcbiAgICB2YXIgYXV0aEluSG9zdCA9IHJlc3VsdC5ob3N0ICYmIHJlc3VsdC5ob3N0LmluZGV4T2YoJ0AnKSA+IDAgP1xuICAgICAgICAgICAgICAgICAgICAgcmVzdWx0Lmhvc3Quc3BsaXQoJ0AnKSA6IGZhbHNlO1xuICAgIGlmIChhdXRoSW5Ib3N0KSB7XG4gICAgICByZXN1bHQuYXV0aCA9IGF1dGhJbkhvc3Quc2hpZnQoKTtcbiAgICAgIHJlc3VsdC5ob3N0ID0gcmVzdWx0Lmhvc3RuYW1lID0gYXV0aEluSG9zdC5zaGlmdCgpO1xuICAgIH1cbiAgfVxuXG4gIG11c3RFbmRBYnMgPSBtdXN0RW5kQWJzIHx8IChyZXN1bHQuaG9zdCAmJiBzcmNQYXRoLmxlbmd0aCk7XG5cbiAgaWYgKG11c3RFbmRBYnMgJiYgIWlzQWJzb2x1dGUpIHtcbiAgICBzcmNQYXRoLnVuc2hpZnQoJycpO1xuICB9XG5cbiAgaWYgKCFzcmNQYXRoLmxlbmd0aCkge1xuICAgIHJlc3VsdC5wYXRobmFtZSA9IG51bGw7XG4gICAgcmVzdWx0LnBhdGggPSBudWxsO1xuICB9IGVsc2Uge1xuICAgIHJlc3VsdC5wYXRobmFtZSA9IHNyY1BhdGguam9pbignLycpO1xuICB9XG5cbiAgLy90byBzdXBwb3J0IHJlcXVlc3QuaHR0cFxuICBpZiAoIWlzTnVsbChyZXN1bHQucGF0aG5hbWUpIHx8ICFpc051bGwocmVzdWx0LnNlYXJjaCkpIHtcbiAgICByZXN1bHQucGF0aCA9IChyZXN1bHQucGF0aG5hbWUgPyByZXN1bHQucGF0aG5hbWUgOiAnJykgK1xuICAgICAgICAgICAgICAgICAgKHJlc3VsdC5zZWFyY2ggPyByZXN1bHQuc2VhcmNoIDogJycpO1xuICB9XG4gIHJlc3VsdC5hdXRoID0gcmVsYXRpdmUuYXV0aCB8fCByZXN1bHQuYXV0aDtcbiAgcmVzdWx0LnNsYXNoZXMgPSByZXN1bHQuc2xhc2hlcyB8fCByZWxhdGl2ZS5zbGFzaGVzO1xuICByZXN1bHQuaHJlZiA9IHJlc3VsdC5mb3JtYXQoKTtcbiAgcmV0dXJuIHJlc3VsdDtcbn07XG5cblVybC5wcm90b3R5cGUucGFyc2VIb3N0ID0gZnVuY3Rpb24oKSB7XG4gIHZhciBob3N0ID0gdGhpcy5ob3N0O1xuICB2YXIgcG9ydCA9IHBvcnRQYXR0ZXJuLmV4ZWMoaG9zdCk7XG4gIGlmIChwb3J0KSB7XG4gICAgcG9ydCA9IHBvcnRbMF07XG4gICAgaWYgKHBvcnQgIT09ICc6Jykge1xuICAgICAgdGhpcy5wb3J0ID0gcG9ydC5zdWJzdHIoMSk7XG4gICAgfVxuICAgIGhvc3QgPSBob3N0LnN1YnN0cigwLCBob3N0Lmxlbmd0aCAtIHBvcnQubGVuZ3RoKTtcbiAgfVxuICBpZiAoaG9zdCkgdGhpcy5ob3N0bmFtZSA9IGhvc3Q7XG59O1xuXG5mdW5jdGlvbiBpc1N0cmluZyhhcmcpIHtcbiAgcmV0dXJuIHR5cGVvZiBhcmcgPT09IFwic3RyaW5nXCI7XG59XG5cbmZ1bmN0aW9uIGlzT2JqZWN0KGFyZykge1xuICByZXR1cm4gdHlwZW9mIGFyZyA9PT0gJ29iamVjdCcgJiYgYXJnICE9PSBudWxsO1xufVxuXG5mdW5jdGlvbiBpc051bGwoYXJnKSB7XG4gIHJldHVybiBhcmcgPT09IG51bGw7XG59XG5mdW5jdGlvbiBpc051bGxPclVuZGVmaW5lZChhcmcpIHtcbiAgcmV0dXJuICBhcmcgPT0gbnVsbDtcbn1cbiIsIid1c2Ugc3RyaWN0JztcblxubW9kdWxlLmV4cG9ydHMgPSBlYXJjdXQ7XG5cbmZ1bmN0aW9uIGVhcmN1dChkYXRhLCBob2xlSW5kaWNlcywgZGltKSB7XG5cbiAgICBkaW0gPSBkaW0gfHwgMjtcblxuICAgIHZhciBoYXNIb2xlcyA9IGhvbGVJbmRpY2VzICYmIGhvbGVJbmRpY2VzLmxlbmd0aCxcbiAgICAgICAgb3V0ZXJMZW4gPSBoYXNIb2xlcyA/IGhvbGVJbmRpY2VzWzBdICogZGltIDogZGF0YS5sZW5ndGgsXG4gICAgICAgIG91dGVyTm9kZSA9IGxpbmtlZExpc3QoZGF0YSwgMCwgb3V0ZXJMZW4sIGRpbSwgdHJ1ZSksXG4gICAgICAgIHRyaWFuZ2xlcyA9IFtdO1xuXG4gICAgaWYgKCFvdXRlck5vZGUpIHJldHVybiB0cmlhbmdsZXM7XG5cbiAgICB2YXIgbWluWCwgbWluWSwgbWF4WCwgbWF4WSwgeCwgeSwgc2l6ZTtcblxuICAgIGlmIChoYXNIb2xlcykgb3V0ZXJOb2RlID0gZWxpbWluYXRlSG9sZXMoZGF0YSwgaG9sZUluZGljZXMsIG91dGVyTm9kZSwgZGltKTtcblxuICAgIC8vIGlmIHRoZSBzaGFwZSBpcyBub3QgdG9vIHNpbXBsZSwgd2UnbGwgdXNlIHotb3JkZXIgY3VydmUgaGFzaCBsYXRlcjsgY2FsY3VsYXRlIHBvbHlnb24gYmJveFxuICAgIGlmIChkYXRhLmxlbmd0aCA+IDgwICogZGltKSB7XG4gICAgICAgIG1pblggPSBtYXhYID0gZGF0YVswXTtcbiAgICAgICAgbWluWSA9IG1heFkgPSBkYXRhWzFdO1xuXG4gICAgICAgIGZvciAodmFyIGkgPSBkaW07IGkgPCBvdXRlckxlbjsgaSArPSBkaW0pIHtcbiAgICAgICAgICAgIHggPSBkYXRhW2ldO1xuICAgICAgICAgICAgeSA9IGRhdGFbaSArIDFdO1xuICAgICAgICAgICAgaWYgKHggPCBtaW5YKSBtaW5YID0geDtcbiAgICAgICAgICAgIGlmICh5IDwgbWluWSkgbWluWSA9IHk7XG4gICAgICAgICAgICBpZiAoeCA+IG1heFgpIG1heFggPSB4O1xuICAgICAgICAgICAgaWYgKHkgPiBtYXhZKSBtYXhZID0geTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIG1pblgsIG1pblkgYW5kIHNpemUgYXJlIGxhdGVyIHVzZWQgdG8gdHJhbnNmb3JtIGNvb3JkcyBpbnRvIGludGVnZXJzIGZvciB6LW9yZGVyIGNhbGN1bGF0aW9uXG4gICAgICAgIHNpemUgPSBNYXRoLm1heChtYXhYIC0gbWluWCwgbWF4WSAtIG1pblkpO1xuICAgIH1cblxuICAgIGVhcmN1dExpbmtlZChvdXRlck5vZGUsIHRyaWFuZ2xlcywgZGltLCBtaW5YLCBtaW5ZLCBzaXplKTtcblxuICAgIHJldHVybiB0cmlhbmdsZXM7XG59XG5cbi8vIGNyZWF0ZSBhIGNpcmN1bGFyIGRvdWJseSBsaW5rZWQgbGlzdCBmcm9tIHBvbHlnb24gcG9pbnRzIGluIHRoZSBzcGVjaWZpZWQgd2luZGluZyBvcmRlclxuZnVuY3Rpb24gbGlua2VkTGlzdChkYXRhLCBzdGFydCwgZW5kLCBkaW0sIGNsb2Nrd2lzZSkge1xuICAgIHZhciBzdW0gPSAwLFxuICAgICAgICBpLCBqLCBsYXN0O1xuXG4gICAgLy8gY2FsY3VsYXRlIG9yaWdpbmFsIHdpbmRpbmcgb3JkZXIgb2YgYSBwb2x5Z29uIHJpbmdcbiAgICBmb3IgKGkgPSBzdGFydCwgaiA9IGVuZCAtIGRpbTsgaSA8IGVuZDsgaSArPSBkaW0pIHtcbiAgICAgICAgc3VtICs9IChkYXRhW2pdIC0gZGF0YVtpXSkgKiAoZGF0YVtpICsgMV0gKyBkYXRhW2ogKyAxXSk7XG4gICAgICAgIGogPSBpO1xuICAgIH1cblxuICAgIC8vIGxpbmsgcG9pbnRzIGludG8gY2lyY3VsYXIgZG91Ymx5LWxpbmtlZCBsaXN0IGluIHRoZSBzcGVjaWZpZWQgd2luZGluZyBvcmRlclxuICAgIGlmIChjbG9ja3dpc2UgPT09IChzdW0gPiAwKSkge1xuICAgICAgICBmb3IgKGkgPSBzdGFydDsgaSA8IGVuZDsgaSArPSBkaW0pIGxhc3QgPSBpbnNlcnROb2RlKGksIGRhdGFbaV0sIGRhdGFbaSArIDFdLCBsYXN0KTtcbiAgICB9IGVsc2Uge1xuICAgICAgICBmb3IgKGkgPSBlbmQgLSBkaW07IGkgPj0gc3RhcnQ7IGkgLT0gZGltKSBsYXN0ID0gaW5zZXJ0Tm9kZShpLCBkYXRhW2ldLCBkYXRhW2kgKyAxXSwgbGFzdCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGxhc3Q7XG59XG5cbi8vIGVsaW1pbmF0ZSBjb2xpbmVhciBvciBkdXBsaWNhdGUgcG9pbnRzXG5mdW5jdGlvbiBmaWx0ZXJQb2ludHMoc3RhcnQsIGVuZCkge1xuICAgIGlmICghc3RhcnQpIHJldHVybiBzdGFydDtcbiAgICBpZiAoIWVuZCkgZW5kID0gc3RhcnQ7XG5cbiAgICB2YXIgcCA9IHN0YXJ0LFxuICAgICAgICBhZ2FpbjtcbiAgICBkbyB7XG4gICAgICAgIGFnYWluID0gZmFsc2U7XG5cbiAgICAgICAgaWYgKCFwLnN0ZWluZXIgJiYgKGVxdWFscyhwLCBwLm5leHQpIHx8IGFyZWEocC5wcmV2LCBwLCBwLm5leHQpID09PSAwKSkge1xuICAgICAgICAgICAgcmVtb3ZlTm9kZShwKTtcbiAgICAgICAgICAgIHAgPSBlbmQgPSBwLnByZXY7XG4gICAgICAgICAgICBpZiAocCA9PT0gcC5uZXh0KSByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIGFnYWluID0gdHJ1ZTtcblxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcCA9IHAubmV4dDtcbiAgICAgICAgfVxuICAgIH0gd2hpbGUgKGFnYWluIHx8IHAgIT09IGVuZCk7XG5cbiAgICByZXR1cm4gZW5kO1xufVxuXG4vLyBtYWluIGVhciBzbGljaW5nIGxvb3Agd2hpY2ggdHJpYW5ndWxhdGVzIGEgcG9seWdvbiAoZ2l2ZW4gYXMgYSBsaW5rZWQgbGlzdClcbmZ1bmN0aW9uIGVhcmN1dExpbmtlZChlYXIsIHRyaWFuZ2xlcywgZGltLCBtaW5YLCBtaW5ZLCBzaXplLCBwYXNzKSB7XG4gICAgaWYgKCFlYXIpIHJldHVybjtcblxuICAgIC8vIGludGVybGluayBwb2x5Z29uIG5vZGVzIGluIHotb3JkZXJcbiAgICBpZiAoIXBhc3MgJiYgc2l6ZSkgaW5kZXhDdXJ2ZShlYXIsIG1pblgsIG1pblksIHNpemUpO1xuXG4gICAgdmFyIHN0b3AgPSBlYXIsXG4gICAgICAgIHByZXYsIG5leHQ7XG5cbiAgICAvLyBpdGVyYXRlIHRocm91Z2ggZWFycywgc2xpY2luZyB0aGVtIG9uZSBieSBvbmVcbiAgICB3aGlsZSAoZWFyLnByZXYgIT09IGVhci5uZXh0KSB7XG4gICAgICAgIHByZXYgPSBlYXIucHJldjtcbiAgICAgICAgbmV4dCA9IGVhci5uZXh0O1xuXG4gICAgICAgIGlmIChzaXplID8gaXNFYXJIYXNoZWQoZWFyLCBtaW5YLCBtaW5ZLCBzaXplKSA6IGlzRWFyKGVhcikpIHtcbiAgICAgICAgICAgIC8vIGN1dCBvZmYgdGhlIHRyaWFuZ2xlXG4gICAgICAgICAgICB0cmlhbmdsZXMucHVzaChwcmV2LmkgLyBkaW0pO1xuICAgICAgICAgICAgdHJpYW5nbGVzLnB1c2goZWFyLmkgLyBkaW0pO1xuICAgICAgICAgICAgdHJpYW5nbGVzLnB1c2gobmV4dC5pIC8gZGltKTtcblxuICAgICAgICAgICAgcmVtb3ZlTm9kZShlYXIpO1xuXG4gICAgICAgICAgICAvLyBza2lwcGluZyB0aGUgbmV4dCB2ZXJ0aWNlIGxlYWRzIHRvIGxlc3Mgc2xpdmVyIHRyaWFuZ2xlc1xuICAgICAgICAgICAgZWFyID0gbmV4dC5uZXh0O1xuICAgICAgICAgICAgc3RvcCA9IG5leHQubmV4dDtcblxuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICBlYXIgPSBuZXh0O1xuXG4gICAgICAgIC8vIGlmIHdlIGxvb3BlZCB0aHJvdWdoIHRoZSB3aG9sZSByZW1haW5pbmcgcG9seWdvbiBhbmQgY2FuJ3QgZmluZCBhbnkgbW9yZSBlYXJzXG4gICAgICAgIGlmIChlYXIgPT09IHN0b3ApIHtcbiAgICAgICAgICAgIC8vIHRyeSBmaWx0ZXJpbmcgcG9pbnRzIGFuZCBzbGljaW5nIGFnYWluXG4gICAgICAgICAgICBpZiAoIXBhc3MpIHtcbiAgICAgICAgICAgICAgICBlYXJjdXRMaW5rZWQoZmlsdGVyUG9pbnRzKGVhciksIHRyaWFuZ2xlcywgZGltLCBtaW5YLCBtaW5ZLCBzaXplLCAxKTtcblxuICAgICAgICAgICAgLy8gaWYgdGhpcyBkaWRuJ3Qgd29yaywgdHJ5IGN1cmluZyBhbGwgc21hbGwgc2VsZi1pbnRlcnNlY3Rpb25zIGxvY2FsbHlcbiAgICAgICAgICAgIH0gZWxzZSBpZiAocGFzcyA9PT0gMSkge1xuICAgICAgICAgICAgICAgIGVhciA9IGN1cmVMb2NhbEludGVyc2VjdGlvbnMoZWFyLCB0cmlhbmdsZXMsIGRpbSk7XG4gICAgICAgICAgICAgICAgZWFyY3V0TGlua2VkKGVhciwgdHJpYW5nbGVzLCBkaW0sIG1pblgsIG1pblksIHNpemUsIDIpO1xuXG4gICAgICAgICAgICAvLyBhcyBhIGxhc3QgcmVzb3J0LCB0cnkgc3BsaXR0aW5nIHRoZSByZW1haW5pbmcgcG9seWdvbiBpbnRvIHR3b1xuICAgICAgICAgICAgfSBlbHNlIGlmIChwYXNzID09PSAyKSB7XG4gICAgICAgICAgICAgICAgc3BsaXRFYXJjdXQoZWFyLCB0cmlhbmdsZXMsIGRpbSwgbWluWCwgbWluWSwgc2l6ZSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgfVxufVxuXG4vLyBjaGVjayB3aGV0aGVyIGEgcG9seWdvbiBub2RlIGZvcm1zIGEgdmFsaWQgZWFyIHdpdGggYWRqYWNlbnQgbm9kZXNcbmZ1bmN0aW9uIGlzRWFyKGVhcikge1xuICAgIHZhciBhID0gZWFyLnByZXYsXG4gICAgICAgIGIgPSBlYXIsXG4gICAgICAgIGMgPSBlYXIubmV4dDtcblxuICAgIGlmIChhcmVhKGEsIGIsIGMpID49IDApIHJldHVybiBmYWxzZTsgLy8gcmVmbGV4LCBjYW4ndCBiZSBhbiBlYXJcblxuICAgIC8vIG5vdyBtYWtlIHN1cmUgd2UgZG9uJ3QgaGF2ZSBvdGhlciBwb2ludHMgaW5zaWRlIHRoZSBwb3RlbnRpYWwgZWFyXG4gICAgdmFyIHAgPSBlYXIubmV4dC5uZXh0O1xuXG4gICAgd2hpbGUgKHAgIT09IGVhci5wcmV2KSB7XG4gICAgICAgIGlmIChwb2ludEluVHJpYW5nbGUoYS54LCBhLnksIGIueCwgYi55LCBjLngsIGMueSwgcC54LCBwLnkpICYmXG4gICAgICAgICAgICBhcmVhKHAucHJldiwgcCwgcC5uZXh0KSA+PSAwKSByZXR1cm4gZmFsc2U7XG4gICAgICAgIHAgPSBwLm5leHQ7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRydWU7XG59XG5cbmZ1bmN0aW9uIGlzRWFySGFzaGVkKGVhciwgbWluWCwgbWluWSwgc2l6ZSkge1xuICAgIHZhciBhID0gZWFyLnByZXYsXG4gICAgICAgIGIgPSBlYXIsXG4gICAgICAgIGMgPSBlYXIubmV4dDtcblxuICAgIGlmIChhcmVhKGEsIGIsIGMpID49IDApIHJldHVybiBmYWxzZTsgLy8gcmVmbGV4LCBjYW4ndCBiZSBhbiBlYXJcblxuICAgIC8vIHRyaWFuZ2xlIGJib3g7IG1pbiAmIG1heCBhcmUgY2FsY3VsYXRlZCBsaWtlIHRoaXMgZm9yIHNwZWVkXG4gICAgdmFyIG1pblRYID0gYS54IDwgYi54ID8gKGEueCA8IGMueCA/IGEueCA6IGMueCkgOiAoYi54IDwgYy54ID8gYi54IDogYy54KSxcbiAgICAgICAgbWluVFkgPSBhLnkgPCBiLnkgPyAoYS55IDwgYy55ID8gYS55IDogYy55KSA6IChiLnkgPCBjLnkgPyBiLnkgOiBjLnkpLFxuICAgICAgICBtYXhUWCA9IGEueCA+IGIueCA/IChhLnggPiBjLnggPyBhLnggOiBjLngpIDogKGIueCA+IGMueCA/IGIueCA6IGMueCksXG4gICAgICAgIG1heFRZID0gYS55ID4gYi55ID8gKGEueSA+IGMueSA/IGEueSA6IGMueSkgOiAoYi55ID4gYy55ID8gYi55IDogYy55KTtcblxuICAgIC8vIHotb3JkZXIgcmFuZ2UgZm9yIHRoZSBjdXJyZW50IHRyaWFuZ2xlIGJib3g7XG4gICAgdmFyIG1pblogPSB6T3JkZXIobWluVFgsIG1pblRZLCBtaW5YLCBtaW5ZLCBzaXplKSxcbiAgICAgICAgbWF4WiA9IHpPcmRlcihtYXhUWCwgbWF4VFksIG1pblgsIG1pblksIHNpemUpO1xuXG4gICAgLy8gZmlyc3QgbG9vayBmb3IgcG9pbnRzIGluc2lkZSB0aGUgdHJpYW5nbGUgaW4gaW5jcmVhc2luZyB6LW9yZGVyXG4gICAgdmFyIHAgPSBlYXIubmV4dFo7XG5cbiAgICB3aGlsZSAocCAmJiBwLnogPD0gbWF4Wikge1xuICAgICAgICBpZiAocCAhPT0gZWFyLnByZXYgJiYgcCAhPT0gZWFyLm5leHQgJiZcbiAgICAgICAgICAgIHBvaW50SW5UcmlhbmdsZShhLngsIGEueSwgYi54LCBiLnksIGMueCwgYy55LCBwLngsIHAueSkgJiZcbiAgICAgICAgICAgIGFyZWEocC5wcmV2LCBwLCBwLm5leHQpID49IDApIHJldHVybiBmYWxzZTtcbiAgICAgICAgcCA9IHAubmV4dFo7XG4gICAgfVxuXG4gICAgLy8gdGhlbiBsb29rIGZvciBwb2ludHMgaW4gZGVjcmVhc2luZyB6LW9yZGVyXG4gICAgcCA9IGVhci5wcmV2WjtcblxuICAgIHdoaWxlIChwICYmIHAueiA+PSBtaW5aKSB7XG4gICAgICAgIGlmIChwICE9PSBlYXIucHJldiAmJiBwICE9PSBlYXIubmV4dCAmJlxuICAgICAgICAgICAgcG9pbnRJblRyaWFuZ2xlKGEueCwgYS55LCBiLngsIGIueSwgYy54LCBjLnksIHAueCwgcC55KSAmJlxuICAgICAgICAgICAgYXJlYShwLnByZXYsIHAsIHAubmV4dCkgPj0gMCkgcmV0dXJuIGZhbHNlO1xuICAgICAgICBwID0gcC5wcmV2WjtcbiAgICB9XG5cbiAgICByZXR1cm4gdHJ1ZTtcbn1cblxuLy8gZ28gdGhyb3VnaCBhbGwgcG9seWdvbiBub2RlcyBhbmQgY3VyZSBzbWFsbCBsb2NhbCBzZWxmLWludGVyc2VjdGlvbnNcbmZ1bmN0aW9uIGN1cmVMb2NhbEludGVyc2VjdGlvbnMoc3RhcnQsIHRyaWFuZ2xlcywgZGltKSB7XG4gICAgdmFyIHAgPSBzdGFydDtcbiAgICBkbyB7XG4gICAgICAgIHZhciBhID0gcC5wcmV2LFxuICAgICAgICAgICAgYiA9IHAubmV4dC5uZXh0O1xuXG4gICAgICAgIC8vIGEgc2VsZi1pbnRlcnNlY3Rpb24gd2hlcmUgZWRnZSAodltpLTFdLHZbaV0pIGludGVyc2VjdHMgKHZbaSsxXSx2W2krMl0pXG4gICAgICAgIGlmIChpbnRlcnNlY3RzKGEsIHAsIHAubmV4dCwgYikgJiYgbG9jYWxseUluc2lkZShhLCBiKSAmJiBsb2NhbGx5SW5zaWRlKGIsIGEpKSB7XG5cbiAgICAgICAgICAgIHRyaWFuZ2xlcy5wdXNoKGEuaSAvIGRpbSk7XG4gICAgICAgICAgICB0cmlhbmdsZXMucHVzaChwLmkgLyBkaW0pO1xuICAgICAgICAgICAgdHJpYW5nbGVzLnB1c2goYi5pIC8gZGltKTtcblxuICAgICAgICAgICAgLy8gcmVtb3ZlIHR3byBub2RlcyBpbnZvbHZlZFxuICAgICAgICAgICAgcmVtb3ZlTm9kZShwKTtcbiAgICAgICAgICAgIHJlbW92ZU5vZGUocC5uZXh0KTtcblxuICAgICAgICAgICAgcCA9IHN0YXJ0ID0gYjtcbiAgICAgICAgfVxuICAgICAgICBwID0gcC5uZXh0O1xuICAgIH0gd2hpbGUgKHAgIT09IHN0YXJ0KTtcblxuICAgIHJldHVybiBwO1xufVxuXG4vLyB0cnkgc3BsaXR0aW5nIHBvbHlnb24gaW50byB0d28gYW5kIHRyaWFuZ3VsYXRlIHRoZW0gaW5kZXBlbmRlbnRseVxuZnVuY3Rpb24gc3BsaXRFYXJjdXQoc3RhcnQsIHRyaWFuZ2xlcywgZGltLCBtaW5YLCBtaW5ZLCBzaXplKSB7XG4gICAgLy8gbG9vayBmb3IgYSB2YWxpZCBkaWFnb25hbCB0aGF0IGRpdmlkZXMgdGhlIHBvbHlnb24gaW50byB0d29cbiAgICB2YXIgYSA9IHN0YXJ0O1xuICAgIGRvIHtcbiAgICAgICAgdmFyIGIgPSBhLm5leHQubmV4dDtcbiAgICAgICAgd2hpbGUgKGIgIT09IGEucHJldikge1xuICAgICAgICAgICAgaWYgKGEuaSAhPT0gYi5pICYmIGlzVmFsaWREaWFnb25hbChhLCBiKSkge1xuICAgICAgICAgICAgICAgIC8vIHNwbGl0IHRoZSBwb2x5Z29uIGluIHR3byBieSB0aGUgZGlhZ29uYWxcbiAgICAgICAgICAgICAgICB2YXIgYyA9IHNwbGl0UG9seWdvbihhLCBiKTtcblxuICAgICAgICAgICAgICAgIC8vIGZpbHRlciBjb2xpbmVhciBwb2ludHMgYXJvdW5kIHRoZSBjdXRzXG4gICAgICAgICAgICAgICAgYSA9IGZpbHRlclBvaW50cyhhLCBhLm5leHQpO1xuICAgICAgICAgICAgICAgIGMgPSBmaWx0ZXJQb2ludHMoYywgYy5uZXh0KTtcblxuICAgICAgICAgICAgICAgIC8vIHJ1biBlYXJjdXQgb24gZWFjaCBoYWxmXG4gICAgICAgICAgICAgICAgZWFyY3V0TGlua2VkKGEsIHRyaWFuZ2xlcywgZGltLCBtaW5YLCBtaW5ZLCBzaXplKTtcbiAgICAgICAgICAgICAgICBlYXJjdXRMaW5rZWQoYywgdHJpYW5nbGVzLCBkaW0sIG1pblgsIG1pblksIHNpemUpO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGIgPSBiLm5leHQ7XG4gICAgICAgIH1cbiAgICAgICAgYSA9IGEubmV4dDtcbiAgICB9IHdoaWxlIChhICE9PSBzdGFydCk7XG59XG5cbi8vIGxpbmsgZXZlcnkgaG9sZSBpbnRvIHRoZSBvdXRlciBsb29wLCBwcm9kdWNpbmcgYSBzaW5nbGUtcmluZyBwb2x5Z29uIHdpdGhvdXQgaG9sZXNcbmZ1bmN0aW9uIGVsaW1pbmF0ZUhvbGVzKGRhdGEsIGhvbGVJbmRpY2VzLCBvdXRlck5vZGUsIGRpbSkge1xuICAgIHZhciBxdWV1ZSA9IFtdLFxuICAgICAgICBpLCBsZW4sIHN0YXJ0LCBlbmQsIGxpc3Q7XG5cbiAgICBmb3IgKGkgPSAwLCBsZW4gPSBob2xlSW5kaWNlcy5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuICAgICAgICBzdGFydCA9IGhvbGVJbmRpY2VzW2ldICogZGltO1xuICAgICAgICBlbmQgPSBpIDwgbGVuIC0gMSA/IGhvbGVJbmRpY2VzW2kgKyAxXSAqIGRpbSA6IGRhdGEubGVuZ3RoO1xuICAgICAgICBsaXN0ID0gbGlua2VkTGlzdChkYXRhLCBzdGFydCwgZW5kLCBkaW0sIGZhbHNlKTtcbiAgICAgICAgaWYgKGxpc3QgPT09IGxpc3QubmV4dCkgbGlzdC5zdGVpbmVyID0gdHJ1ZTtcbiAgICAgICAgcXVldWUucHVzaChnZXRMZWZ0bW9zdChsaXN0KSk7XG4gICAgfVxuXG4gICAgcXVldWUuc29ydChjb21wYXJlWCk7XG5cbiAgICAvLyBwcm9jZXNzIGhvbGVzIGZyb20gbGVmdCB0byByaWdodFxuICAgIGZvciAoaSA9IDA7IGkgPCBxdWV1ZS5sZW5ndGg7IGkrKykge1xuICAgICAgICBlbGltaW5hdGVIb2xlKHF1ZXVlW2ldLCBvdXRlck5vZGUpO1xuICAgICAgICBvdXRlck5vZGUgPSBmaWx0ZXJQb2ludHMob3V0ZXJOb2RlLCBvdXRlck5vZGUubmV4dCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG91dGVyTm9kZTtcbn1cblxuZnVuY3Rpb24gY29tcGFyZVgoYSwgYikge1xuICAgIHJldHVybiBhLnggLSBiLng7XG59XG5cbi8vIGZpbmQgYSBicmlkZ2UgYmV0d2VlbiB2ZXJ0aWNlcyB0aGF0IGNvbm5lY3RzIGhvbGUgd2l0aCBhbiBvdXRlciByaW5nIGFuZCBhbmQgbGluayBpdFxuZnVuY3Rpb24gZWxpbWluYXRlSG9sZShob2xlLCBvdXRlck5vZGUpIHtcbiAgICBvdXRlck5vZGUgPSBmaW5kSG9sZUJyaWRnZShob2xlLCBvdXRlck5vZGUpO1xuICAgIGlmIChvdXRlck5vZGUpIHtcbiAgICAgICAgdmFyIGIgPSBzcGxpdFBvbHlnb24ob3V0ZXJOb2RlLCBob2xlKTtcbiAgICAgICAgZmlsdGVyUG9pbnRzKGIsIGIubmV4dCk7XG4gICAgfVxufVxuXG4vLyBEYXZpZCBFYmVybHkncyBhbGdvcml0aG0gZm9yIGZpbmRpbmcgYSBicmlkZ2UgYmV0d2VlbiBob2xlIGFuZCBvdXRlciBwb2x5Z29uXG5mdW5jdGlvbiBmaW5kSG9sZUJyaWRnZShob2xlLCBvdXRlck5vZGUpIHtcbiAgICB2YXIgcCA9IG91dGVyTm9kZSxcbiAgICAgICAgaHggPSBob2xlLngsXG4gICAgICAgIGh5ID0gaG9sZS55LFxuICAgICAgICBxeCA9IC1JbmZpbml0eSxcbiAgICAgICAgbTtcblxuICAgIC8vIGZpbmQgYSBzZWdtZW50IGludGVyc2VjdGVkIGJ5IGEgcmF5IGZyb20gdGhlIGhvbGUncyBsZWZ0bW9zdCBwb2ludCB0byB0aGUgbGVmdDtcbiAgICAvLyBzZWdtZW50J3MgZW5kcG9pbnQgd2l0aCBsZXNzZXIgeCB3aWxsIGJlIHBvdGVudGlhbCBjb25uZWN0aW9uIHBvaW50XG4gICAgZG8ge1xuICAgICAgICBpZiAoaHkgPD0gcC55ICYmIGh5ID49IHAubmV4dC55KSB7XG4gICAgICAgICAgICB2YXIgeCA9IHAueCArIChoeSAtIHAueSkgKiAocC5uZXh0LnggLSBwLngpIC8gKHAubmV4dC55IC0gcC55KTtcbiAgICAgICAgICAgIGlmICh4IDw9IGh4ICYmIHggPiBxeCkge1xuICAgICAgICAgICAgICAgIHF4ID0geDtcbiAgICAgICAgICAgICAgICBtID0gcC54IDwgcC5uZXh0LnggPyBwIDogcC5uZXh0O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHAgPSBwLm5leHQ7XG4gICAgfSB3aGlsZSAocCAhPT0gb3V0ZXJOb2RlKTtcblxuICAgIGlmICghbSkgcmV0dXJuIG51bGw7XG5cbiAgICAvLyBsb29rIGZvciBwb2ludHMgaW5zaWRlIHRoZSB0cmlhbmdsZSBvZiBob2xlIHBvaW50LCBzZWdtZW50IGludGVyc2VjdGlvbiBhbmQgZW5kcG9pbnQ7XG4gICAgLy8gaWYgdGhlcmUgYXJlIG5vIHBvaW50cyBmb3VuZCwgd2UgaGF2ZSBhIHZhbGlkIGNvbm5lY3Rpb247XG4gICAgLy8gb3RoZXJ3aXNlIGNob29zZSB0aGUgcG9pbnQgb2YgdGhlIG1pbmltdW0gYW5nbGUgd2l0aCB0aGUgcmF5IGFzIGNvbm5lY3Rpb24gcG9pbnRcblxuICAgIHZhciBzdG9wID0gbSxcbiAgICAgICAgdGFuTWluID0gSW5maW5pdHksXG4gICAgICAgIHRhbjtcblxuICAgIHAgPSBtLm5leHQ7XG5cbiAgICB3aGlsZSAocCAhPT0gc3RvcCkge1xuICAgICAgICBpZiAoaHggPj0gcC54ICYmIHAueCA+PSBtLnggJiZcbiAgICAgICAgICAgICAgICBwb2ludEluVHJpYW5nbGUoaHkgPCBtLnkgPyBoeCA6IHF4LCBoeSwgbS54LCBtLnksIGh5IDwgbS55ID8gcXggOiBoeCwgaHksIHAueCwgcC55KSkge1xuXG4gICAgICAgICAgICB0YW4gPSBNYXRoLmFicyhoeSAtIHAueSkgLyAoaHggLSBwLngpOyAvLyB0YW5nZW50aWFsXG5cbiAgICAgICAgICAgIGlmICgodGFuIDwgdGFuTWluIHx8ICh0YW4gPT09IHRhbk1pbiAmJiBwLnggPiBtLngpKSAmJiBsb2NhbGx5SW5zaWRlKHAsIGhvbGUpKSB7XG4gICAgICAgICAgICAgICAgbSA9IHA7XG4gICAgICAgICAgICAgICAgdGFuTWluID0gdGFuO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcCA9IHAubmV4dDtcbiAgICB9XG5cbiAgICByZXR1cm4gbTtcbn1cblxuLy8gaW50ZXJsaW5rIHBvbHlnb24gbm9kZXMgaW4gei1vcmRlclxuZnVuY3Rpb24gaW5kZXhDdXJ2ZShzdGFydCwgbWluWCwgbWluWSwgc2l6ZSkge1xuICAgIHZhciBwID0gc3RhcnQ7XG4gICAgZG8ge1xuICAgICAgICBpZiAocC56ID09PSBudWxsKSBwLnogPSB6T3JkZXIocC54LCBwLnksIG1pblgsIG1pblksIHNpemUpO1xuICAgICAgICBwLnByZXZaID0gcC5wcmV2O1xuICAgICAgICBwLm5leHRaID0gcC5uZXh0O1xuICAgICAgICBwID0gcC5uZXh0O1xuICAgIH0gd2hpbGUgKHAgIT09IHN0YXJ0KTtcblxuICAgIHAucHJldloubmV4dFogPSBudWxsO1xuICAgIHAucHJldlogPSBudWxsO1xuXG4gICAgc29ydExpbmtlZChwKTtcbn1cblxuLy8gU2ltb24gVGF0aGFtJ3MgbGlua2VkIGxpc3QgbWVyZ2Ugc29ydCBhbGdvcml0aG1cbi8vIGh0dHA6Ly93d3cuY2hpYXJrLmdyZWVuZW5kLm9yZy51ay9+c2d0YXRoYW0vYWxnb3JpdGhtcy9saXN0c29ydC5odG1sXG5mdW5jdGlvbiBzb3J0TGlua2VkKGxpc3QpIHtcbiAgICB2YXIgaSwgcCwgcSwgZSwgdGFpbCwgbnVtTWVyZ2VzLCBwU2l6ZSwgcVNpemUsXG4gICAgICAgIGluU2l6ZSA9IDE7XG5cbiAgICBkbyB7XG4gICAgICAgIHAgPSBsaXN0O1xuICAgICAgICBsaXN0ID0gbnVsbDtcbiAgICAgICAgdGFpbCA9IG51bGw7XG4gICAgICAgIG51bU1lcmdlcyA9IDA7XG5cbiAgICAgICAgd2hpbGUgKHApIHtcbiAgICAgICAgICAgIG51bU1lcmdlcysrO1xuICAgICAgICAgICAgcSA9IHA7XG4gICAgICAgICAgICBwU2l6ZSA9IDA7XG4gICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgaW5TaXplOyBpKyspIHtcbiAgICAgICAgICAgICAgICBwU2l6ZSsrO1xuICAgICAgICAgICAgICAgIHEgPSBxLm5leHRaO1xuICAgICAgICAgICAgICAgIGlmICghcSkgYnJlYWs7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHFTaXplID0gaW5TaXplO1xuXG4gICAgICAgICAgICB3aGlsZSAocFNpemUgPiAwIHx8IChxU2l6ZSA+IDAgJiYgcSkpIHtcblxuICAgICAgICAgICAgICAgIGlmIChwU2l6ZSA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICBlID0gcTtcbiAgICAgICAgICAgICAgICAgICAgcSA9IHEubmV4dFo7XG4gICAgICAgICAgICAgICAgICAgIHFTaXplLS07XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChxU2l6ZSA9PT0gMCB8fCAhcSkge1xuICAgICAgICAgICAgICAgICAgICBlID0gcDtcbiAgICAgICAgICAgICAgICAgICAgcCA9IHAubmV4dFo7XG4gICAgICAgICAgICAgICAgICAgIHBTaXplLS07XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChwLnogPD0gcS56KSB7XG4gICAgICAgICAgICAgICAgICAgIGUgPSBwO1xuICAgICAgICAgICAgICAgICAgICBwID0gcC5uZXh0WjtcbiAgICAgICAgICAgICAgICAgICAgcFNpemUtLTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBlID0gcTtcbiAgICAgICAgICAgICAgICAgICAgcSA9IHEubmV4dFo7XG4gICAgICAgICAgICAgICAgICAgIHFTaXplLS07XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKHRhaWwpIHRhaWwubmV4dFogPSBlO1xuICAgICAgICAgICAgICAgIGVsc2UgbGlzdCA9IGU7XG5cbiAgICAgICAgICAgICAgICBlLnByZXZaID0gdGFpbDtcbiAgICAgICAgICAgICAgICB0YWlsID0gZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcCA9IHE7XG4gICAgICAgIH1cblxuICAgICAgICB0YWlsLm5leHRaID0gbnVsbDtcbiAgICAgICAgaW5TaXplICo9IDI7XG5cbiAgICB9IHdoaWxlIChudW1NZXJnZXMgPiAxKTtcblxuICAgIHJldHVybiBsaXN0O1xufVxuXG4vLyB6LW9yZGVyIG9mIGEgcG9pbnQgZ2l2ZW4gY29vcmRzIGFuZCBzaXplIG9mIHRoZSBkYXRhIGJvdW5kaW5nIGJveFxuZnVuY3Rpb24gek9yZGVyKHgsIHksIG1pblgsIG1pblksIHNpemUpIHtcbiAgICAvLyBjb29yZHMgYXJlIHRyYW5zZm9ybWVkIGludG8gbm9uLW5lZ2F0aXZlIDE1LWJpdCBpbnRlZ2VyIHJhbmdlXG4gICAgeCA9IDMyNzY3ICogKHggLSBtaW5YKSAvIHNpemU7XG4gICAgeSA9IDMyNzY3ICogKHkgLSBtaW5ZKSAvIHNpemU7XG5cbiAgICB4ID0gKHggfCAoeCA8PCA4KSkgJiAweDAwRkYwMEZGO1xuICAgIHggPSAoeCB8ICh4IDw8IDQpKSAmIDB4MEYwRjBGMEY7XG4gICAgeCA9ICh4IHwgKHggPDwgMikpICYgMHgzMzMzMzMzMztcbiAgICB4ID0gKHggfCAoeCA8PCAxKSkgJiAweDU1NTU1NTU1O1xuXG4gICAgeSA9ICh5IHwgKHkgPDwgOCkpICYgMHgwMEZGMDBGRjtcbiAgICB5ID0gKHkgfCAoeSA8PCA0KSkgJiAweDBGMEYwRjBGO1xuICAgIHkgPSAoeSB8ICh5IDw8IDIpKSAmIDB4MzMzMzMzMzM7XG4gICAgeSA9ICh5IHwgKHkgPDwgMSkpICYgMHg1NTU1NTU1NTtcblxuICAgIHJldHVybiB4IHwgKHkgPDwgMSk7XG59XG5cbi8vIGZpbmQgdGhlIGxlZnRtb3N0IG5vZGUgb2YgYSBwb2x5Z29uIHJpbmdcbmZ1bmN0aW9uIGdldExlZnRtb3N0KHN0YXJ0KSB7XG4gICAgdmFyIHAgPSBzdGFydCxcbiAgICAgICAgbGVmdG1vc3QgPSBzdGFydDtcbiAgICBkbyB7XG4gICAgICAgIGlmIChwLnggPCBsZWZ0bW9zdC54KSBsZWZ0bW9zdCA9IHA7XG4gICAgICAgIHAgPSBwLm5leHQ7XG4gICAgfSB3aGlsZSAocCAhPT0gc3RhcnQpO1xuXG4gICAgcmV0dXJuIGxlZnRtb3N0O1xufVxuXG4vLyBjaGVjayBpZiBhIHBvaW50IGxpZXMgd2l0aGluIGEgY29udmV4IHRyaWFuZ2xlXG5mdW5jdGlvbiBwb2ludEluVHJpYW5nbGUoYXgsIGF5LCBieCwgYnksIGN4LCBjeSwgcHgsIHB5KSB7XG4gICAgcmV0dXJuIChjeCAtIHB4KSAqIChheSAtIHB5KSAtIChheCAtIHB4KSAqIChjeSAtIHB5KSA+PSAwICYmXG4gICAgICAgICAgIChheCAtIHB4KSAqIChieSAtIHB5KSAtIChieCAtIHB4KSAqIChheSAtIHB5KSA+PSAwICYmXG4gICAgICAgICAgIChieCAtIHB4KSAqIChjeSAtIHB5KSAtIChjeCAtIHB4KSAqIChieSAtIHB5KSA+PSAwO1xufVxuXG4vLyBjaGVjayBpZiBhIGRpYWdvbmFsIGJldHdlZW4gdHdvIHBvbHlnb24gbm9kZXMgaXMgdmFsaWQgKGxpZXMgaW4gcG9seWdvbiBpbnRlcmlvcilcbmZ1bmN0aW9uIGlzVmFsaWREaWFnb25hbChhLCBiKSB7XG4gICAgcmV0dXJuIGVxdWFscyhhLCBiKSB8fCBhLm5leHQuaSAhPT0gYi5pICYmIGEucHJldi5pICE9PSBiLmkgJiYgIWludGVyc2VjdHNQb2x5Z29uKGEsIGIpICYmXG4gICAgICAgICAgIGxvY2FsbHlJbnNpZGUoYSwgYikgJiYgbG9jYWxseUluc2lkZShiLCBhKSAmJiBtaWRkbGVJbnNpZGUoYSwgYik7XG59XG5cbi8vIHNpZ25lZCBhcmVhIG9mIGEgdHJpYW5nbGVcbmZ1bmN0aW9uIGFyZWEocCwgcSwgcikge1xuICAgIHJldHVybiAocS55IC0gcC55KSAqIChyLnggLSBxLngpIC0gKHEueCAtIHAueCkgKiAoci55IC0gcS55KTtcbn1cblxuLy8gY2hlY2sgaWYgdHdvIHBvaW50cyBhcmUgZXF1YWxcbmZ1bmN0aW9uIGVxdWFscyhwMSwgcDIpIHtcbiAgICByZXR1cm4gcDEueCA9PT0gcDIueCAmJiBwMS55ID09PSBwMi55O1xufVxuXG4vLyBjaGVjayBpZiB0d28gc2VnbWVudHMgaW50ZXJzZWN0XG5mdW5jdGlvbiBpbnRlcnNlY3RzKHAxLCBxMSwgcDIsIHEyKSB7XG4gICAgcmV0dXJuIGFyZWEocDEsIHExLCBwMikgPiAwICE9PSBhcmVhKHAxLCBxMSwgcTIpID4gMCAmJlxuICAgICAgICAgICBhcmVhKHAyLCBxMiwgcDEpID4gMCAhPT0gYXJlYShwMiwgcTIsIHExKSA+IDA7XG59XG5cbi8vIGNoZWNrIGlmIGEgcG9seWdvbiBkaWFnb25hbCBpbnRlcnNlY3RzIGFueSBwb2x5Z29uIHNlZ21lbnRzXG5mdW5jdGlvbiBpbnRlcnNlY3RzUG9seWdvbihhLCBiKSB7XG4gICAgdmFyIHAgPSBhO1xuICAgIGRvIHtcbiAgICAgICAgaWYgKHAuaSAhPT0gYS5pICYmIHAubmV4dC5pICE9PSBhLmkgJiYgcC5pICE9PSBiLmkgJiYgcC5uZXh0LmkgIT09IGIuaSAmJlxuICAgICAgICAgICAgICAgIGludGVyc2VjdHMocCwgcC5uZXh0LCBhLCBiKSkgcmV0dXJuIHRydWU7XG4gICAgICAgIHAgPSBwLm5leHQ7XG4gICAgfSB3aGlsZSAocCAhPT0gYSk7XG5cbiAgICByZXR1cm4gZmFsc2U7XG59XG5cbi8vIGNoZWNrIGlmIGEgcG9seWdvbiBkaWFnb25hbCBpcyBsb2NhbGx5IGluc2lkZSB0aGUgcG9seWdvblxuZnVuY3Rpb24gbG9jYWxseUluc2lkZShhLCBiKSB7XG4gICAgcmV0dXJuIGFyZWEoYS5wcmV2LCBhLCBhLm5leHQpIDwgMCA/XG4gICAgICAgIGFyZWEoYSwgYiwgYS5uZXh0KSA+PSAwICYmIGFyZWEoYSwgYS5wcmV2LCBiKSA+PSAwIDpcbiAgICAgICAgYXJlYShhLCBiLCBhLnByZXYpIDwgMCB8fCBhcmVhKGEsIGEubmV4dCwgYikgPCAwO1xufVxuXG4vLyBjaGVjayBpZiB0aGUgbWlkZGxlIHBvaW50IG9mIGEgcG9seWdvbiBkaWFnb25hbCBpcyBpbnNpZGUgdGhlIHBvbHlnb25cbmZ1bmN0aW9uIG1pZGRsZUluc2lkZShhLCBiKSB7XG4gICAgdmFyIHAgPSBhLFxuICAgICAgICBpbnNpZGUgPSBmYWxzZSxcbiAgICAgICAgcHggPSAoYS54ICsgYi54KSAvIDIsXG4gICAgICAgIHB5ID0gKGEueSArIGIueSkgLyAyO1xuICAgIGRvIHtcbiAgICAgICAgaWYgKCgocC55ID4gcHkpICE9PSAocC5uZXh0LnkgPiBweSkpICYmIChweCA8IChwLm5leHQueCAtIHAueCkgKiAocHkgLSBwLnkpIC8gKHAubmV4dC55IC0gcC55KSArIHAueCkpXG4gICAgICAgICAgICBpbnNpZGUgPSAhaW5zaWRlO1xuICAgICAgICBwID0gcC5uZXh0O1xuICAgIH0gd2hpbGUgKHAgIT09IGEpO1xuXG4gICAgcmV0dXJuIGluc2lkZTtcbn1cblxuLy8gbGluayB0d28gcG9seWdvbiB2ZXJ0aWNlcyB3aXRoIGEgYnJpZGdlOyBpZiB0aGUgdmVydGljZXMgYmVsb25nIHRvIHRoZSBzYW1lIHJpbmcsIGl0IHNwbGl0cyBwb2x5Z29uIGludG8gdHdvO1xuLy8gaWYgb25lIGJlbG9uZ3MgdG8gdGhlIG91dGVyIHJpbmcgYW5kIGFub3RoZXIgdG8gYSBob2xlLCBpdCBtZXJnZXMgaXQgaW50byBhIHNpbmdsZSByaW5nXG5mdW5jdGlvbiBzcGxpdFBvbHlnb24oYSwgYikge1xuICAgIHZhciBhMiA9IG5ldyBOb2RlKGEuaSwgYS54LCBhLnkpLFxuICAgICAgICBiMiA9IG5ldyBOb2RlKGIuaSwgYi54LCBiLnkpLFxuICAgICAgICBhbiA9IGEubmV4dCxcbiAgICAgICAgYnAgPSBiLnByZXY7XG5cbiAgICBhLm5leHQgPSBiO1xuICAgIGIucHJldiA9IGE7XG5cbiAgICBhMi5uZXh0ID0gYW47XG4gICAgYW4ucHJldiA9IGEyO1xuXG4gICAgYjIubmV4dCA9IGEyO1xuICAgIGEyLnByZXYgPSBiMjtcblxuICAgIGJwLm5leHQgPSBiMjtcbiAgICBiMi5wcmV2ID0gYnA7XG5cbiAgICByZXR1cm4gYjI7XG59XG5cbi8vIGNyZWF0ZSBhIG5vZGUgYW5kIG9wdGlvbmFsbHkgbGluayBpdCB3aXRoIHByZXZpb3VzIG9uZSAoaW4gYSBjaXJjdWxhciBkb3VibHkgbGlua2VkIGxpc3QpXG5mdW5jdGlvbiBpbnNlcnROb2RlKGksIHgsIHksIGxhc3QpIHtcbiAgICB2YXIgcCA9IG5ldyBOb2RlKGksIHgsIHkpO1xuXG4gICAgaWYgKCFsYXN0KSB7XG4gICAgICAgIHAucHJldiA9IHA7XG4gICAgICAgIHAubmV4dCA9IHA7XG5cbiAgICB9IGVsc2Uge1xuICAgICAgICBwLm5leHQgPSBsYXN0Lm5leHQ7XG4gICAgICAgIHAucHJldiA9IGxhc3Q7XG4gICAgICAgIGxhc3QubmV4dC5wcmV2ID0gcDtcbiAgICAgICAgbGFzdC5uZXh0ID0gcDtcbiAgICB9XG4gICAgcmV0dXJuIHA7XG59XG5cbmZ1bmN0aW9uIHJlbW92ZU5vZGUocCkge1xuICAgIHAubmV4dC5wcmV2ID0gcC5wcmV2O1xuICAgIHAucHJldi5uZXh0ID0gcC5uZXh0O1xuXG4gICAgaWYgKHAucHJldlopIHAucHJldloubmV4dFogPSBwLm5leHRaO1xuICAgIGlmIChwLm5leHRaKSBwLm5leHRaLnByZXZaID0gcC5wcmV2Wjtcbn1cblxuZnVuY3Rpb24gTm9kZShpLCB4LCB5KSB7XG4gICAgLy8gdmVydGljZSBpbmRleCBpbiBjb29yZGluYXRlcyBhcnJheVxuICAgIHRoaXMuaSA9IGk7XG5cbiAgICAvLyB2ZXJ0ZXggY29vcmRpbmF0ZXNcbiAgICB0aGlzLnggPSB4O1xuICAgIHRoaXMueSA9IHk7XG5cbiAgICAvLyBwcmV2aW91cyBhbmQgbmV4dCB2ZXJ0aWNlIG5vZGVzIGluIGEgcG9seWdvbiByaW5nXG4gICAgdGhpcy5wcmV2ID0gbnVsbDtcbiAgICB0aGlzLm5leHQgPSBudWxsO1xuXG4gICAgLy8gei1vcmRlciBjdXJ2ZSB2YWx1ZVxuICAgIHRoaXMueiA9IG51bGw7XG5cbiAgICAvLyBwcmV2aW91cyBhbmQgbmV4dCBub2RlcyBpbiB6LW9yZGVyXG4gICAgdGhpcy5wcmV2WiA9IG51bGw7XG4gICAgdGhpcy5uZXh0WiA9IG51bGw7XG5cbiAgICAvLyBpbmRpY2F0ZXMgd2hldGhlciB0aGlzIGlzIGEgc3RlaW5lciBwb2ludFxuICAgIHRoaXMuc3RlaW5lciA9IGZhbHNlO1xufVxuIiwiJ3VzZSBzdHJpY3QnO1xuXG4vL1xuLy8gV2Ugc3RvcmUgb3VyIEVFIG9iamVjdHMgaW4gYSBwbGFpbiBvYmplY3Qgd2hvc2UgcHJvcGVydGllcyBhcmUgZXZlbnQgbmFtZXMuXG4vLyBJZiBgT2JqZWN0LmNyZWF0ZShudWxsKWAgaXMgbm90IHN1cHBvcnRlZCB3ZSBwcmVmaXggdGhlIGV2ZW50IG5hbWVzIHdpdGggYVxuLy8gYH5gIHRvIG1ha2Ugc3VyZSB0aGF0IHRoZSBidWlsdC1pbiBvYmplY3QgcHJvcGVydGllcyBhcmUgbm90IG92ZXJyaWRkZW4gb3Jcbi8vIHVzZWQgYXMgYW4gYXR0YWNrIHZlY3Rvci5cbi8vIFdlIGFsc28gYXNzdW1lIHRoYXQgYE9iamVjdC5jcmVhdGUobnVsbClgIGlzIGF2YWlsYWJsZSB3aGVuIHRoZSBldmVudCBuYW1lXG4vLyBpcyBhbiBFUzYgU3ltYm9sLlxuLy9cbnZhciBwcmVmaXggPSB0eXBlb2YgT2JqZWN0LmNyZWF0ZSAhPT0gJ2Z1bmN0aW9uJyA/ICd+JyA6IGZhbHNlO1xuXG4vKipcbiAqIFJlcHJlc2VudGF0aW9uIG9mIGEgc2luZ2xlIEV2ZW50RW1pdHRlciBmdW5jdGlvbi5cbiAqXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmbiBFdmVudCBoYW5kbGVyIHRvIGJlIGNhbGxlZC5cbiAqIEBwYXJhbSB7TWl4ZWR9IGNvbnRleHQgQ29udGV4dCBmb3IgZnVuY3Rpb24gZXhlY3V0aW9uLlxuICogQHBhcmFtIHtCb29sZWFufSBvbmNlIE9ubHkgZW1pdCBvbmNlXG4gKiBAYXBpIHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gRUUoZm4sIGNvbnRleHQsIG9uY2UpIHtcbiAgdGhpcy5mbiA9IGZuO1xuICB0aGlzLmNvbnRleHQgPSBjb250ZXh0O1xuICB0aGlzLm9uY2UgPSBvbmNlIHx8IGZhbHNlO1xufVxuXG4vKipcbiAqIE1pbmltYWwgRXZlbnRFbWl0dGVyIGludGVyZmFjZSB0aGF0IGlzIG1vbGRlZCBhZ2FpbnN0IHRoZSBOb2RlLmpzXG4gKiBFdmVudEVtaXR0ZXIgaW50ZXJmYWNlLlxuICpcbiAqIEBjb25zdHJ1Y3RvclxuICogQGFwaSBwdWJsaWNcbiAqL1xuZnVuY3Rpb24gRXZlbnRFbWl0dGVyKCkgeyAvKiBOb3RoaW5nIHRvIHNldCAqLyB9XG5cbi8qKlxuICogSG9sZHMgdGhlIGFzc2lnbmVkIEV2ZW50RW1pdHRlcnMgYnkgbmFtZS5cbiAqXG4gKiBAdHlwZSB7T2JqZWN0fVxuICogQHByaXZhdGVcbiAqL1xuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5fZXZlbnRzID0gdW5kZWZpbmVkO1xuXG4vKipcbiAqIFJldHVybiBhIGxpc3Qgb2YgYXNzaWduZWQgZXZlbnQgbGlzdGVuZXJzLlxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBldmVudCBUaGUgZXZlbnRzIHRoYXQgc2hvdWxkIGJlIGxpc3RlZC5cbiAqIEBwYXJhbSB7Qm9vbGVhbn0gZXhpc3RzIFdlIG9ubHkgbmVlZCB0byBrbm93IGlmIHRoZXJlIGFyZSBsaXN0ZW5lcnMuXG4gKiBAcmV0dXJucyB7QXJyYXl8Qm9vbGVhbn1cbiAqIEBhcGkgcHVibGljXG4gKi9cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUubGlzdGVuZXJzID0gZnVuY3Rpb24gbGlzdGVuZXJzKGV2ZW50LCBleGlzdHMpIHtcbiAgdmFyIGV2dCA9IHByZWZpeCA/IHByZWZpeCArIGV2ZW50IDogZXZlbnRcbiAgICAsIGF2YWlsYWJsZSA9IHRoaXMuX2V2ZW50cyAmJiB0aGlzLl9ldmVudHNbZXZ0XTtcblxuICBpZiAoZXhpc3RzKSByZXR1cm4gISFhdmFpbGFibGU7XG4gIGlmICghYXZhaWxhYmxlKSByZXR1cm4gW107XG4gIGlmIChhdmFpbGFibGUuZm4pIHJldHVybiBbYXZhaWxhYmxlLmZuXTtcblxuICBmb3IgKHZhciBpID0gMCwgbCA9IGF2YWlsYWJsZS5sZW5ndGgsIGVlID0gbmV3IEFycmF5KGwpOyBpIDwgbDsgaSsrKSB7XG4gICAgZWVbaV0gPSBhdmFpbGFibGVbaV0uZm47XG4gIH1cblxuICByZXR1cm4gZWU7XG59O1xuXG4vKipcbiAqIEVtaXQgYW4gZXZlbnQgdG8gYWxsIHJlZ2lzdGVyZWQgZXZlbnQgbGlzdGVuZXJzLlxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBldmVudCBUaGUgbmFtZSBvZiB0aGUgZXZlbnQuXG4gKiBAcmV0dXJucyB7Qm9vbGVhbn0gSW5kaWNhdGlvbiBpZiB3ZSd2ZSBlbWl0dGVkIGFuIGV2ZW50LlxuICogQGFwaSBwdWJsaWNcbiAqL1xuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5lbWl0ID0gZnVuY3Rpb24gZW1pdChldmVudCwgYTEsIGEyLCBhMywgYTQsIGE1KSB7XG4gIHZhciBldnQgPSBwcmVmaXggPyBwcmVmaXggKyBldmVudCA6IGV2ZW50O1xuXG4gIGlmICghdGhpcy5fZXZlbnRzIHx8ICF0aGlzLl9ldmVudHNbZXZ0XSkgcmV0dXJuIGZhbHNlO1xuXG4gIHZhciBsaXN0ZW5lcnMgPSB0aGlzLl9ldmVudHNbZXZ0XVxuICAgICwgbGVuID0gYXJndW1lbnRzLmxlbmd0aFxuICAgICwgYXJnc1xuICAgICwgaTtcblxuICBpZiAoJ2Z1bmN0aW9uJyA9PT0gdHlwZW9mIGxpc3RlbmVycy5mbikge1xuICAgIGlmIChsaXN0ZW5lcnMub25jZSkgdGhpcy5yZW1vdmVMaXN0ZW5lcihldmVudCwgbGlzdGVuZXJzLmZuLCB1bmRlZmluZWQsIHRydWUpO1xuXG4gICAgc3dpdGNoIChsZW4pIHtcbiAgICAgIGNhc2UgMTogcmV0dXJuIGxpc3RlbmVycy5mbi5jYWxsKGxpc3RlbmVycy5jb250ZXh0KSwgdHJ1ZTtcbiAgICAgIGNhc2UgMjogcmV0dXJuIGxpc3RlbmVycy5mbi5jYWxsKGxpc3RlbmVycy5jb250ZXh0LCBhMSksIHRydWU7XG4gICAgICBjYXNlIDM6IHJldHVybiBsaXN0ZW5lcnMuZm4uY2FsbChsaXN0ZW5lcnMuY29udGV4dCwgYTEsIGEyKSwgdHJ1ZTtcbiAgICAgIGNhc2UgNDogcmV0dXJuIGxpc3RlbmVycy5mbi5jYWxsKGxpc3RlbmVycy5jb250ZXh0LCBhMSwgYTIsIGEzKSwgdHJ1ZTtcbiAgICAgIGNhc2UgNTogcmV0dXJuIGxpc3RlbmVycy5mbi5jYWxsKGxpc3RlbmVycy5jb250ZXh0LCBhMSwgYTIsIGEzLCBhNCksIHRydWU7XG4gICAgICBjYXNlIDY6IHJldHVybiBsaXN0ZW5lcnMuZm4uY2FsbChsaXN0ZW5lcnMuY29udGV4dCwgYTEsIGEyLCBhMywgYTQsIGE1KSwgdHJ1ZTtcbiAgICB9XG5cbiAgICBmb3IgKGkgPSAxLCBhcmdzID0gbmV3IEFycmF5KGxlbiAtMSk7IGkgPCBsZW47IGkrKykge1xuICAgICAgYXJnc1tpIC0gMV0gPSBhcmd1bWVudHNbaV07XG4gICAgfVxuXG4gICAgbGlzdGVuZXJzLmZuLmFwcGx5KGxpc3RlbmVycy5jb250ZXh0LCBhcmdzKTtcbiAgfSBlbHNlIHtcbiAgICB2YXIgbGVuZ3RoID0gbGlzdGVuZXJzLmxlbmd0aFxuICAgICAgLCBqO1xuXG4gICAgZm9yIChpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAobGlzdGVuZXJzW2ldLm9uY2UpIHRoaXMucmVtb3ZlTGlzdGVuZXIoZXZlbnQsIGxpc3RlbmVyc1tpXS5mbiwgdW5kZWZpbmVkLCB0cnVlKTtcblxuICAgICAgc3dpdGNoIChsZW4pIHtcbiAgICAgICAgY2FzZSAxOiBsaXN0ZW5lcnNbaV0uZm4uY2FsbChsaXN0ZW5lcnNbaV0uY29udGV4dCk7IGJyZWFrO1xuICAgICAgICBjYXNlIDI6IGxpc3RlbmVyc1tpXS5mbi5jYWxsKGxpc3RlbmVyc1tpXS5jb250ZXh0LCBhMSk7IGJyZWFrO1xuICAgICAgICBjYXNlIDM6IGxpc3RlbmVyc1tpXS5mbi5jYWxsKGxpc3RlbmVyc1tpXS5jb250ZXh0LCBhMSwgYTIpOyBicmVhaztcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICBpZiAoIWFyZ3MpIGZvciAoaiA9IDEsIGFyZ3MgPSBuZXcgQXJyYXkobGVuIC0xKTsgaiA8IGxlbjsgaisrKSB7XG4gICAgICAgICAgICBhcmdzW2ogLSAxXSA9IGFyZ3VtZW50c1tqXTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBsaXN0ZW5lcnNbaV0uZm4uYXBwbHkobGlzdGVuZXJzW2ldLmNvbnRleHQsIGFyZ3MpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiB0cnVlO1xufTtcblxuLyoqXG4gKiBSZWdpc3RlciBhIG5ldyBFdmVudExpc3RlbmVyIGZvciB0aGUgZ2l2ZW4gZXZlbnQuXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IGV2ZW50IE5hbWUgb2YgdGhlIGV2ZW50LlxuICogQHBhcmFtIHtGdW5jdG9ufSBmbiBDYWxsYmFjayBmdW5jdGlvbi5cbiAqIEBwYXJhbSB7TWl4ZWR9IGNvbnRleHQgVGhlIGNvbnRleHQgb2YgdGhlIGZ1bmN0aW9uLlxuICogQGFwaSBwdWJsaWNcbiAqL1xuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5vbiA9IGZ1bmN0aW9uIG9uKGV2ZW50LCBmbiwgY29udGV4dCkge1xuICB2YXIgbGlzdGVuZXIgPSBuZXcgRUUoZm4sIGNvbnRleHQgfHwgdGhpcylcbiAgICAsIGV2dCA9IHByZWZpeCA/IHByZWZpeCArIGV2ZW50IDogZXZlbnQ7XG5cbiAgaWYgKCF0aGlzLl9ldmVudHMpIHRoaXMuX2V2ZW50cyA9IHByZWZpeCA/IHt9IDogT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgaWYgKCF0aGlzLl9ldmVudHNbZXZ0XSkgdGhpcy5fZXZlbnRzW2V2dF0gPSBsaXN0ZW5lcjtcbiAgZWxzZSB7XG4gICAgaWYgKCF0aGlzLl9ldmVudHNbZXZ0XS5mbikgdGhpcy5fZXZlbnRzW2V2dF0ucHVzaChsaXN0ZW5lcik7XG4gICAgZWxzZSB0aGlzLl9ldmVudHNbZXZ0XSA9IFtcbiAgICAgIHRoaXMuX2V2ZW50c1tldnRdLCBsaXN0ZW5lclxuICAgIF07XG4gIH1cblxuICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogQWRkIGFuIEV2ZW50TGlzdGVuZXIgdGhhdCdzIG9ubHkgY2FsbGVkIG9uY2UuXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IGV2ZW50IE5hbWUgb2YgdGhlIGV2ZW50LlxuICogQHBhcmFtIHtGdW5jdGlvbn0gZm4gQ2FsbGJhY2sgZnVuY3Rpb24uXG4gKiBAcGFyYW0ge01peGVkfSBjb250ZXh0IFRoZSBjb250ZXh0IG9mIHRoZSBmdW5jdGlvbi5cbiAqIEBhcGkgcHVibGljXG4gKi9cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUub25jZSA9IGZ1bmN0aW9uIG9uY2UoZXZlbnQsIGZuLCBjb250ZXh0KSB7XG4gIHZhciBsaXN0ZW5lciA9IG5ldyBFRShmbiwgY29udGV4dCB8fCB0aGlzLCB0cnVlKVxuICAgICwgZXZ0ID0gcHJlZml4ID8gcHJlZml4ICsgZXZlbnQgOiBldmVudDtcblxuICBpZiAoIXRoaXMuX2V2ZW50cykgdGhpcy5fZXZlbnRzID0gcHJlZml4ID8ge30gOiBPYmplY3QuY3JlYXRlKG51bGwpO1xuICBpZiAoIXRoaXMuX2V2ZW50c1tldnRdKSB0aGlzLl9ldmVudHNbZXZ0XSA9IGxpc3RlbmVyO1xuICBlbHNlIHtcbiAgICBpZiAoIXRoaXMuX2V2ZW50c1tldnRdLmZuKSB0aGlzLl9ldmVudHNbZXZ0XS5wdXNoKGxpc3RlbmVyKTtcbiAgICBlbHNlIHRoaXMuX2V2ZW50c1tldnRdID0gW1xuICAgICAgdGhpcy5fZXZlbnRzW2V2dF0sIGxpc3RlbmVyXG4gICAgXTtcbiAgfVxuXG4gIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBSZW1vdmUgZXZlbnQgbGlzdGVuZXJzLlxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBldmVudCBUaGUgZXZlbnQgd2Ugd2FudCB0byByZW1vdmUuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmbiBUaGUgbGlzdGVuZXIgdGhhdCB3ZSBuZWVkIHRvIGZpbmQuXG4gKiBAcGFyYW0ge01peGVkfSBjb250ZXh0IE9ubHkgcmVtb3ZlIGxpc3RlbmVycyBtYXRjaGluZyB0aGlzIGNvbnRleHQuXG4gKiBAcGFyYW0ge0Jvb2xlYW59IG9uY2UgT25seSByZW1vdmUgb25jZSBsaXN0ZW5lcnMuXG4gKiBAYXBpIHB1YmxpY1xuICovXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLnJlbW92ZUxpc3RlbmVyID0gZnVuY3Rpb24gcmVtb3ZlTGlzdGVuZXIoZXZlbnQsIGZuLCBjb250ZXh0LCBvbmNlKSB7XG4gIHZhciBldnQgPSBwcmVmaXggPyBwcmVmaXggKyBldmVudCA6IGV2ZW50O1xuXG4gIGlmICghdGhpcy5fZXZlbnRzIHx8ICF0aGlzLl9ldmVudHNbZXZ0XSkgcmV0dXJuIHRoaXM7XG5cbiAgdmFyIGxpc3RlbmVycyA9IHRoaXMuX2V2ZW50c1tldnRdXG4gICAgLCBldmVudHMgPSBbXTtcblxuICBpZiAoZm4pIHtcbiAgICBpZiAobGlzdGVuZXJzLmZuKSB7XG4gICAgICBpZiAoXG4gICAgICAgICAgIGxpc3RlbmVycy5mbiAhPT0gZm5cbiAgICAgICAgfHwgKG9uY2UgJiYgIWxpc3RlbmVycy5vbmNlKVxuICAgICAgICB8fCAoY29udGV4dCAmJiBsaXN0ZW5lcnMuY29udGV4dCAhPT0gY29udGV4dClcbiAgICAgICkge1xuICAgICAgICBldmVudHMucHVzaChsaXN0ZW5lcnMpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBmb3IgKHZhciBpID0gMCwgbGVuZ3RoID0gbGlzdGVuZXJzLmxlbmd0aDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICAgICBsaXN0ZW5lcnNbaV0uZm4gIT09IGZuXG4gICAgICAgICAgfHwgKG9uY2UgJiYgIWxpc3RlbmVyc1tpXS5vbmNlKVxuICAgICAgICAgIHx8IChjb250ZXh0ICYmIGxpc3RlbmVyc1tpXS5jb250ZXh0ICE9PSBjb250ZXh0KVxuICAgICAgICApIHtcbiAgICAgICAgICBldmVudHMucHVzaChsaXN0ZW5lcnNbaV0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLy9cbiAgLy8gUmVzZXQgdGhlIGFycmF5LCBvciByZW1vdmUgaXQgY29tcGxldGVseSBpZiB3ZSBoYXZlIG5vIG1vcmUgbGlzdGVuZXJzLlxuICAvL1xuICBpZiAoZXZlbnRzLmxlbmd0aCkge1xuICAgIHRoaXMuX2V2ZW50c1tldnRdID0gZXZlbnRzLmxlbmd0aCA9PT0gMSA/IGV2ZW50c1swXSA6IGV2ZW50cztcbiAgfSBlbHNlIHtcbiAgICBkZWxldGUgdGhpcy5fZXZlbnRzW2V2dF07XG4gIH1cblxuICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogUmVtb3ZlIGFsbCBsaXN0ZW5lcnMgb3Igb25seSB0aGUgbGlzdGVuZXJzIGZvciB0aGUgc3BlY2lmaWVkIGV2ZW50LlxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBldmVudCBUaGUgZXZlbnQgd2FudCB0byByZW1vdmUgYWxsIGxpc3RlbmVycyBmb3IuXG4gKiBAYXBpIHB1YmxpY1xuICovXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLnJlbW92ZUFsbExpc3RlbmVycyA9IGZ1bmN0aW9uIHJlbW92ZUFsbExpc3RlbmVycyhldmVudCkge1xuICBpZiAoIXRoaXMuX2V2ZW50cykgcmV0dXJuIHRoaXM7XG5cbiAgaWYgKGV2ZW50KSBkZWxldGUgdGhpcy5fZXZlbnRzW3ByZWZpeCA/IHByZWZpeCArIGV2ZW50IDogZXZlbnRdO1xuICBlbHNlIHRoaXMuX2V2ZW50cyA9IHByZWZpeCA/IHt9IDogT2JqZWN0LmNyZWF0ZShudWxsKTtcblxuICByZXR1cm4gdGhpcztcbn07XG5cbi8vXG4vLyBBbGlhcyBtZXRob2RzIG5hbWVzIGJlY2F1c2UgcGVvcGxlIHJvbGwgbGlrZSB0aGF0LlxuLy9cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUub2ZmID0gRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5yZW1vdmVMaXN0ZW5lcjtcbkV2ZW50RW1pdHRlci5wcm90b3R5cGUuYWRkTGlzdGVuZXIgPSBFdmVudEVtaXR0ZXIucHJvdG90eXBlLm9uO1xuXG4vL1xuLy8gVGhpcyBmdW5jdGlvbiBkb2Vzbid0IGFwcGx5IGFueW1vcmUuXG4vL1xuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5zZXRNYXhMaXN0ZW5lcnMgPSBmdW5jdGlvbiBzZXRNYXhMaXN0ZW5lcnMoKSB7XG4gIHJldHVybiB0aGlzO1xufTtcblxuLy9cbi8vIEV4cG9zZSB0aGUgcHJlZml4LlxuLy9cbkV2ZW50RW1pdHRlci5wcmVmaXhlZCA9IHByZWZpeDtcblxuLy9cbi8vIEV4cG9zZSB0aGUgbW9kdWxlLlxuLy9cbmlmICgndW5kZWZpbmVkJyAhPT0gdHlwZW9mIG1vZHVsZSkge1xuICBtb2R1bGUuZXhwb3J0cyA9IEV2ZW50RW1pdHRlcjtcbn1cbiIsIi8qIGVzbGludC1kaXNhYmxlIG5vLXVudXNlZC12YXJzICovXG4ndXNlIHN0cmljdCc7XG52YXIgaGFzT3duUHJvcGVydHkgPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O1xudmFyIHByb3BJc0VudW1lcmFibGUgPSBPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlO1xuXG5mdW5jdGlvbiB0b09iamVjdCh2YWwpIHtcblx0aWYgKHZhbCA9PT0gbnVsbCB8fCB2YWwgPT09IHVuZGVmaW5lZCkge1xuXHRcdHRocm93IG5ldyBUeXBlRXJyb3IoJ09iamVjdC5hc3NpZ24gY2Fubm90IGJlIGNhbGxlZCB3aXRoIG51bGwgb3IgdW5kZWZpbmVkJyk7XG5cdH1cblxuXHRyZXR1cm4gT2JqZWN0KHZhbCk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0LCBzb3VyY2UpIHtcblx0dmFyIGZyb207XG5cdHZhciB0byA9IHRvT2JqZWN0KHRhcmdldCk7XG5cdHZhciBzeW1ib2xzO1xuXG5cdGZvciAodmFyIHMgPSAxOyBzIDwgYXJndW1lbnRzLmxlbmd0aDsgcysrKSB7XG5cdFx0ZnJvbSA9IE9iamVjdChhcmd1bWVudHNbc10pO1xuXG5cdFx0Zm9yICh2YXIga2V5IGluIGZyb20pIHtcblx0XHRcdGlmIChoYXNPd25Qcm9wZXJ0eS5jYWxsKGZyb20sIGtleSkpIHtcblx0XHRcdFx0dG9ba2V5XSA9IGZyb21ba2V5XTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykge1xuXHRcdFx0c3ltYm9scyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZnJvbSk7XG5cdFx0XHRmb3IgKHZhciBpID0gMDsgaSA8IHN5bWJvbHMubGVuZ3RoOyBpKyspIHtcblx0XHRcdFx0aWYgKHByb3BJc0VudW1lcmFibGUuY2FsbChmcm9tLCBzeW1ib2xzW2ldKSkge1xuXHRcdFx0XHRcdHRvW3N5bWJvbHNbaV1dID0gZnJvbVtzeW1ib2xzW2ldXTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdHJldHVybiB0bztcbn07XG4iLCIvKiFcbiAqIGFzeW5jXG4gKiBodHRwczovL2dpdGh1Yi5jb20vY2FvbGFuL2FzeW5jXG4gKlxuICogQ29weXJpZ2h0IDIwMTAtMjAxNCBDYW9sYW4gTWNNYWhvblxuICogUmVsZWFzZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlXG4gKi9cbi8qanNoaW50IG9uZXZhcjogZmFsc2UsIGluZGVudDo0ICovXG4vKmdsb2JhbCBzZXRJbW1lZGlhdGU6IGZhbHNlLCBzZXRUaW1lb3V0OiBmYWxzZSwgY29uc29sZTogZmFsc2UgKi9cbihmdW5jdGlvbiAoKSB7XG5cbiAgICB2YXIgYXN5bmMgPSB7fTtcblxuICAgIC8vIGdsb2JhbCBvbiB0aGUgc2VydmVyLCB3aW5kb3cgaW4gdGhlIGJyb3dzZXJcbiAgICB2YXIgcm9vdCwgcHJldmlvdXNfYXN5bmM7XG5cbiAgICByb290ID0gdGhpcztcbiAgICBpZiAocm9vdCAhPSBudWxsKSB7XG4gICAgICBwcmV2aW91c19hc3luYyA9IHJvb3QuYXN5bmM7XG4gICAgfVxuXG4gICAgYXN5bmMubm9Db25mbGljdCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcm9vdC5hc3luYyA9IHByZXZpb3VzX2FzeW5jO1xuICAgICAgICByZXR1cm4gYXN5bmM7XG4gICAgfTtcblxuICAgIGZ1bmN0aW9uIG9ubHlfb25jZShmbikge1xuICAgICAgICB2YXIgY2FsbGVkID0gZmFsc2U7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIGlmIChjYWxsZWQpIHRocm93IG5ldyBFcnJvcihcIkNhbGxiYWNrIHdhcyBhbHJlYWR5IGNhbGxlZC5cIik7XG4gICAgICAgICAgICBjYWxsZWQgPSB0cnVlO1xuICAgICAgICAgICAgZm4uYXBwbHkocm9vdCwgYXJndW1lbnRzKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vLy8gY3Jvc3MtYnJvd3NlciBjb21wYXRpYmxpdHkgZnVuY3Rpb25zIC8vLy9cblxuICAgIHZhciBfdG9TdHJpbmcgPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nO1xuXG4gICAgdmFyIF9pc0FycmF5ID0gQXJyYXkuaXNBcnJheSB8fCBmdW5jdGlvbiAob2JqKSB7XG4gICAgICAgIHJldHVybiBfdG9TdHJpbmcuY2FsbChvYmopID09PSAnW29iamVjdCBBcnJheV0nO1xuICAgIH07XG5cbiAgICB2YXIgX2VhY2ggPSBmdW5jdGlvbiAoYXJyLCBpdGVyYXRvcikge1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFyci5sZW5ndGg7IGkgKz0gMSkge1xuICAgICAgICAgICAgaXRlcmF0b3IoYXJyW2ldLCBpLCBhcnIpO1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIHZhciBfbWFwID0gZnVuY3Rpb24gKGFyciwgaXRlcmF0b3IpIHtcbiAgICAgICAgaWYgKGFyci5tYXApIHtcbiAgICAgICAgICAgIHJldHVybiBhcnIubWFwKGl0ZXJhdG9yKTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgcmVzdWx0cyA9IFtdO1xuICAgICAgICBfZWFjaChhcnIsIGZ1bmN0aW9uICh4LCBpLCBhKSB7XG4gICAgICAgICAgICByZXN1bHRzLnB1c2goaXRlcmF0b3IoeCwgaSwgYSkpO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdHM7XG4gICAgfTtcblxuICAgIHZhciBfcmVkdWNlID0gZnVuY3Rpb24gKGFyciwgaXRlcmF0b3IsIG1lbW8pIHtcbiAgICAgICAgaWYgKGFyci5yZWR1Y2UpIHtcbiAgICAgICAgICAgIHJldHVybiBhcnIucmVkdWNlKGl0ZXJhdG9yLCBtZW1vKTtcbiAgICAgICAgfVxuICAgICAgICBfZWFjaChhcnIsIGZ1bmN0aW9uICh4LCBpLCBhKSB7XG4gICAgICAgICAgICBtZW1vID0gaXRlcmF0b3IobWVtbywgeCwgaSwgYSk7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gbWVtbztcbiAgICB9O1xuXG4gICAgdmFyIF9rZXlzID0gZnVuY3Rpb24gKG9iaikge1xuICAgICAgICBpZiAoT2JqZWN0LmtleXMpIHtcbiAgICAgICAgICAgIHJldHVybiBPYmplY3Qua2V5cyhvYmopO1xuICAgICAgICB9XG4gICAgICAgIHZhciBrZXlzID0gW107XG4gICAgICAgIGZvciAodmFyIGsgaW4gb2JqKSB7XG4gICAgICAgICAgICBpZiAob2JqLmhhc093blByb3BlcnR5KGspKSB7XG4gICAgICAgICAgICAgICAga2V5cy5wdXNoKGspO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBrZXlzO1xuICAgIH07XG5cbiAgICAvLy8vIGV4cG9ydGVkIGFzeW5jIG1vZHVsZSBmdW5jdGlvbnMgLy8vL1xuXG4gICAgLy8vLyBuZXh0VGljayBpbXBsZW1lbnRhdGlvbiB3aXRoIGJyb3dzZXItY29tcGF0aWJsZSBmYWxsYmFjayAvLy8vXG4gICAgaWYgKHR5cGVvZiBwcm9jZXNzID09PSAndW5kZWZpbmVkJyB8fCAhKHByb2Nlc3MubmV4dFRpY2spKSB7XG4gICAgICAgIGlmICh0eXBlb2Ygc2V0SW1tZWRpYXRlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICBhc3luYy5uZXh0VGljayA9IGZ1bmN0aW9uIChmbikge1xuICAgICAgICAgICAgICAgIC8vIG5vdCBhIGRpcmVjdCBhbGlhcyBmb3IgSUUxMCBjb21wYXRpYmlsaXR5XG4gICAgICAgICAgICAgICAgc2V0SW1tZWRpYXRlKGZuKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBhc3luYy5zZXRJbW1lZGlhdGUgPSBhc3luYy5uZXh0VGljaztcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGFzeW5jLm5leHRUaWNrID0gZnVuY3Rpb24gKGZuKSB7XG4gICAgICAgICAgICAgICAgc2V0VGltZW91dChmbiwgMCk7XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgYXN5bmMuc2V0SW1tZWRpYXRlID0gYXN5bmMubmV4dFRpY2s7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIGFzeW5jLm5leHRUaWNrID0gcHJvY2Vzcy5uZXh0VGljaztcbiAgICAgICAgaWYgKHR5cGVvZiBzZXRJbW1lZGlhdGUgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICBhc3luYy5zZXRJbW1lZGlhdGUgPSBmdW5jdGlvbiAoZm4pIHtcbiAgICAgICAgICAgICAgLy8gbm90IGEgZGlyZWN0IGFsaWFzIGZvciBJRTEwIGNvbXBhdGliaWxpdHlcbiAgICAgICAgICAgICAgc2V0SW1tZWRpYXRlKGZuKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBhc3luYy5zZXRJbW1lZGlhdGUgPSBhc3luYy5uZXh0VGljaztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGFzeW5jLmVhY2ggPSBmdW5jdGlvbiAoYXJyLCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgY2FsbGJhY2sgPSBjYWxsYmFjayB8fCBmdW5jdGlvbiAoKSB7fTtcbiAgICAgICAgaWYgKCFhcnIubGVuZ3RoKSB7XG4gICAgICAgICAgICByZXR1cm4gY2FsbGJhY2soKTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgY29tcGxldGVkID0gMDtcbiAgICAgICAgX2VhY2goYXJyLCBmdW5jdGlvbiAoeCkge1xuICAgICAgICAgICAgaXRlcmF0b3IoeCwgb25seV9vbmNlKGRvbmUpICk7XG4gICAgICAgIH0pO1xuICAgICAgICBmdW5jdGlvbiBkb25lKGVycikge1xuICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgICAgY2FsbGJhY2sgPSBmdW5jdGlvbiAoKSB7fTtcbiAgICAgICAgICB9XG4gICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgIGNvbXBsZXRlZCArPSAxO1xuICAgICAgICAgICAgICBpZiAoY29tcGxldGVkID49IGFyci5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9O1xuICAgIGFzeW5jLmZvckVhY2ggPSBhc3luYy5lYWNoO1xuXG4gICAgYXN5bmMuZWFjaFNlcmllcyA9IGZ1bmN0aW9uIChhcnIsIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICBjYWxsYmFjayA9IGNhbGxiYWNrIHx8IGZ1bmN0aW9uICgpIHt9O1xuICAgICAgICBpZiAoIWFyci5sZW5ndGgpIHtcbiAgICAgICAgICAgIHJldHVybiBjYWxsYmFjaygpO1xuICAgICAgICB9XG4gICAgICAgIHZhciBjb21wbGV0ZWQgPSAwO1xuICAgICAgICB2YXIgaXRlcmF0ZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGl0ZXJhdG9yKGFycltjb21wbGV0ZWRdLCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayA9IGZ1bmN0aW9uICgpIHt9O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgY29tcGxldGVkICs9IDE7XG4gICAgICAgICAgICAgICAgICAgIGlmIChjb21wbGV0ZWQgPj0gYXJyLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGl0ZXJhdGUoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9O1xuICAgICAgICBpdGVyYXRlKCk7XG4gICAgfTtcbiAgICBhc3luYy5mb3JFYWNoU2VyaWVzID0gYXN5bmMuZWFjaFNlcmllcztcblxuICAgIGFzeW5jLmVhY2hMaW1pdCA9IGZ1bmN0aW9uIChhcnIsIGxpbWl0LCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgdmFyIGZuID0gX2VhY2hMaW1pdChsaW1pdCk7XG4gICAgICAgIGZuLmFwcGx5KG51bGwsIFthcnIsIGl0ZXJhdG9yLCBjYWxsYmFja10pO1xuICAgIH07XG4gICAgYXN5bmMuZm9yRWFjaExpbWl0ID0gYXN5bmMuZWFjaExpbWl0O1xuXG4gICAgdmFyIF9lYWNoTGltaXQgPSBmdW5jdGlvbiAobGltaXQpIHtcblxuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKGFyciwgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICBjYWxsYmFjayA9IGNhbGxiYWNrIHx8IGZ1bmN0aW9uICgpIHt9O1xuICAgICAgICAgICAgaWYgKCFhcnIubGVuZ3RoIHx8IGxpbWl0IDw9IDApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gY2FsbGJhY2soKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHZhciBjb21wbGV0ZWQgPSAwO1xuICAgICAgICAgICAgdmFyIHN0YXJ0ZWQgPSAwO1xuICAgICAgICAgICAgdmFyIHJ1bm5pbmcgPSAwO1xuXG4gICAgICAgICAgICAoZnVuY3Rpb24gcmVwbGVuaXNoICgpIHtcbiAgICAgICAgICAgICAgICBpZiAoY29tcGxldGVkID49IGFyci5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKCk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgd2hpbGUgKHJ1bm5pbmcgPCBsaW1pdCAmJiBzdGFydGVkIDwgYXJyLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICBzdGFydGVkICs9IDE7XG4gICAgICAgICAgICAgICAgICAgIHJ1bm5pbmcgKz0gMTtcbiAgICAgICAgICAgICAgICAgICAgaXRlcmF0b3IoYXJyW3N0YXJ0ZWQgLSAxXSwgZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2sgPSBmdW5jdGlvbiAoKSB7fTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBsZXRlZCArPSAxO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJ1bm5pbmcgLT0gMTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY29tcGxldGVkID49IGFyci5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcGxlbmlzaCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSkoKTtcbiAgICAgICAgfTtcbiAgICB9O1xuXG5cbiAgICB2YXIgZG9QYXJhbGxlbCA9IGZ1bmN0aW9uIChmbikge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIGFyZ3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMpO1xuICAgICAgICAgICAgcmV0dXJuIGZuLmFwcGx5KG51bGwsIFthc3luYy5lYWNoXS5jb25jYXQoYXJncykpO1xuICAgICAgICB9O1xuICAgIH07XG4gICAgdmFyIGRvUGFyYWxsZWxMaW1pdCA9IGZ1bmN0aW9uKGxpbWl0LCBmbikge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIGFyZ3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMpO1xuICAgICAgICAgICAgcmV0dXJuIGZuLmFwcGx5KG51bGwsIFtfZWFjaExpbWl0KGxpbWl0KV0uY29uY2F0KGFyZ3MpKTtcbiAgICAgICAgfTtcbiAgICB9O1xuICAgIHZhciBkb1NlcmllcyA9IGZ1bmN0aW9uIChmbikge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIGFyZ3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMpO1xuICAgICAgICAgICAgcmV0dXJuIGZuLmFwcGx5KG51bGwsIFthc3luYy5lYWNoU2VyaWVzXS5jb25jYXQoYXJncykpO1xuICAgICAgICB9O1xuICAgIH07XG5cblxuICAgIHZhciBfYXN5bmNNYXAgPSBmdW5jdGlvbiAoZWFjaGZuLCBhcnIsIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICBhcnIgPSBfbWFwKGFyciwgZnVuY3Rpb24gKHgsIGkpIHtcbiAgICAgICAgICAgIHJldHVybiB7aW5kZXg6IGksIHZhbHVlOiB4fTtcbiAgICAgICAgfSk7XG4gICAgICAgIGlmICghY2FsbGJhY2spIHtcbiAgICAgICAgICAgIGVhY2hmbihhcnIsIGZ1bmN0aW9uICh4LCBjYWxsYmFjaykge1xuICAgICAgICAgICAgICAgIGl0ZXJhdG9yKHgudmFsdWUsIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdmFyIHJlc3VsdHMgPSBbXTtcbiAgICAgICAgICAgIGVhY2hmbihhcnIsIGZ1bmN0aW9uICh4LCBjYWxsYmFjaykge1xuICAgICAgICAgICAgICAgIGl0ZXJhdG9yKHgudmFsdWUsIGZ1bmN0aW9uIChlcnIsIHYpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0c1t4LmluZGV4XSA9IHY7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9LCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2soZXJyLCByZXN1bHRzKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBhc3luYy5tYXAgPSBkb1BhcmFsbGVsKF9hc3luY01hcCk7XG4gICAgYXN5bmMubWFwU2VyaWVzID0gZG9TZXJpZXMoX2FzeW5jTWFwKTtcbiAgICBhc3luYy5tYXBMaW1pdCA9IGZ1bmN0aW9uIChhcnIsIGxpbWl0LCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgcmV0dXJuIF9tYXBMaW1pdChsaW1pdCkoYXJyLCBpdGVyYXRvciwgY2FsbGJhY2spO1xuICAgIH07XG5cbiAgICB2YXIgX21hcExpbWl0ID0gZnVuY3Rpb24obGltaXQpIHtcbiAgICAgICAgcmV0dXJuIGRvUGFyYWxsZWxMaW1pdChsaW1pdCwgX2FzeW5jTWFwKTtcbiAgICB9O1xuXG4gICAgLy8gcmVkdWNlIG9ubHkgaGFzIGEgc2VyaWVzIHZlcnNpb24sIGFzIGRvaW5nIHJlZHVjZSBpbiBwYXJhbGxlbCB3b24ndFxuICAgIC8vIHdvcmsgaW4gbWFueSBzaXR1YXRpb25zLlxuICAgIGFzeW5jLnJlZHVjZSA9IGZ1bmN0aW9uIChhcnIsIG1lbW8sIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICBhc3luYy5lYWNoU2VyaWVzKGFyciwgZnVuY3Rpb24gKHgsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICBpdGVyYXRvcihtZW1vLCB4LCBmdW5jdGlvbiAoZXJyLCB2KSB7XG4gICAgICAgICAgICAgICAgbWVtbyA9IHY7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICBjYWxsYmFjayhlcnIsIG1lbW8pO1xuICAgICAgICB9KTtcbiAgICB9O1xuICAgIC8vIGluamVjdCBhbGlhc1xuICAgIGFzeW5jLmluamVjdCA9IGFzeW5jLnJlZHVjZTtcbiAgICAvLyBmb2xkbCBhbGlhc1xuICAgIGFzeW5jLmZvbGRsID0gYXN5bmMucmVkdWNlO1xuXG4gICAgYXN5bmMucmVkdWNlUmlnaHQgPSBmdW5jdGlvbiAoYXJyLCBtZW1vLCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgdmFyIHJldmVyc2VkID0gX21hcChhcnIsIGZ1bmN0aW9uICh4KSB7XG4gICAgICAgICAgICByZXR1cm4geDtcbiAgICAgICAgfSkucmV2ZXJzZSgpO1xuICAgICAgICBhc3luYy5yZWR1Y2UocmV2ZXJzZWQsIG1lbW8sIGl0ZXJhdG9yLCBjYWxsYmFjayk7XG4gICAgfTtcbiAgICAvLyBmb2xkciBhbGlhc1xuICAgIGFzeW5jLmZvbGRyID0gYXN5bmMucmVkdWNlUmlnaHQ7XG5cbiAgICB2YXIgX2ZpbHRlciA9IGZ1bmN0aW9uIChlYWNoZm4sIGFyciwgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgIHZhciByZXN1bHRzID0gW107XG4gICAgICAgIGFyciA9IF9tYXAoYXJyLCBmdW5jdGlvbiAoeCwgaSkge1xuICAgICAgICAgICAgcmV0dXJuIHtpbmRleDogaSwgdmFsdWU6IHh9O1xuICAgICAgICB9KTtcbiAgICAgICAgZWFjaGZuKGFyciwgZnVuY3Rpb24gKHgsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICBpdGVyYXRvcih4LnZhbHVlLCBmdW5jdGlvbiAodikge1xuICAgICAgICAgICAgICAgIGlmICh2KSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdHMucHVzaCh4KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2FsbGJhY2soKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICBjYWxsYmFjayhfbWFwKHJlc3VsdHMuc29ydChmdW5jdGlvbiAoYSwgYikge1xuICAgICAgICAgICAgICAgIHJldHVybiBhLmluZGV4IC0gYi5pbmRleDtcbiAgICAgICAgICAgIH0pLCBmdW5jdGlvbiAoeCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB4LnZhbHVlO1xuICAgICAgICAgICAgfSkpO1xuICAgICAgICB9KTtcbiAgICB9O1xuICAgIGFzeW5jLmZpbHRlciA9IGRvUGFyYWxsZWwoX2ZpbHRlcik7XG4gICAgYXN5bmMuZmlsdGVyU2VyaWVzID0gZG9TZXJpZXMoX2ZpbHRlcik7XG4gICAgLy8gc2VsZWN0IGFsaWFzXG4gICAgYXN5bmMuc2VsZWN0ID0gYXN5bmMuZmlsdGVyO1xuICAgIGFzeW5jLnNlbGVjdFNlcmllcyA9IGFzeW5jLmZpbHRlclNlcmllcztcblxuICAgIHZhciBfcmVqZWN0ID0gZnVuY3Rpb24gKGVhY2hmbiwgYXJyLCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgdmFyIHJlc3VsdHMgPSBbXTtcbiAgICAgICAgYXJyID0gX21hcChhcnIsIGZ1bmN0aW9uICh4LCBpKSB7XG4gICAgICAgICAgICByZXR1cm4ge2luZGV4OiBpLCB2YWx1ZTogeH07XG4gICAgICAgIH0pO1xuICAgICAgICBlYWNoZm4oYXJyLCBmdW5jdGlvbiAoeCwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIGl0ZXJhdG9yKHgudmFsdWUsIGZ1bmN0aW9uICh2KSB7XG4gICAgICAgICAgICAgICAgaWYgKCF2KSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdHMucHVzaCh4KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2FsbGJhY2soKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICBjYWxsYmFjayhfbWFwKHJlc3VsdHMuc29ydChmdW5jdGlvbiAoYSwgYikge1xuICAgICAgICAgICAgICAgIHJldHVybiBhLmluZGV4IC0gYi5pbmRleDtcbiAgICAgICAgICAgIH0pLCBmdW5jdGlvbiAoeCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB4LnZhbHVlO1xuICAgICAgICAgICAgfSkpO1xuICAgICAgICB9KTtcbiAgICB9O1xuICAgIGFzeW5jLnJlamVjdCA9IGRvUGFyYWxsZWwoX3JlamVjdCk7XG4gICAgYXN5bmMucmVqZWN0U2VyaWVzID0gZG9TZXJpZXMoX3JlamVjdCk7XG5cbiAgICB2YXIgX2RldGVjdCA9IGZ1bmN0aW9uIChlYWNoZm4sIGFyciwgaXRlcmF0b3IsIG1haW5fY2FsbGJhY2spIHtcbiAgICAgICAgZWFjaGZuKGFyciwgZnVuY3Rpb24gKHgsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICBpdGVyYXRvcih4LCBmdW5jdGlvbiAocmVzdWx0KSB7XG4gICAgICAgICAgICAgICAgaWYgKHJlc3VsdCkge1xuICAgICAgICAgICAgICAgICAgICBtYWluX2NhbGxiYWNrKHgpO1xuICAgICAgICAgICAgICAgICAgICBtYWluX2NhbGxiYWNrID0gZnVuY3Rpb24gKCkge307XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICBtYWluX2NhbGxiYWNrKCk7XG4gICAgICAgIH0pO1xuICAgIH07XG4gICAgYXN5bmMuZGV0ZWN0ID0gZG9QYXJhbGxlbChfZGV0ZWN0KTtcbiAgICBhc3luYy5kZXRlY3RTZXJpZXMgPSBkb1NlcmllcyhfZGV0ZWN0KTtcblxuICAgIGFzeW5jLnNvbWUgPSBmdW5jdGlvbiAoYXJyLCBpdGVyYXRvciwgbWFpbl9jYWxsYmFjaykge1xuICAgICAgICBhc3luYy5lYWNoKGFyciwgZnVuY3Rpb24gKHgsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICBpdGVyYXRvcih4LCBmdW5jdGlvbiAodikge1xuICAgICAgICAgICAgICAgIGlmICh2KSB7XG4gICAgICAgICAgICAgICAgICAgIG1haW5fY2FsbGJhY2sodHJ1ZSk7XG4gICAgICAgICAgICAgICAgICAgIG1haW5fY2FsbGJhY2sgPSBmdW5jdGlvbiAoKSB7fTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2FsbGJhY2soKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICBtYWluX2NhbGxiYWNrKGZhbHNlKTtcbiAgICAgICAgfSk7XG4gICAgfTtcbiAgICAvLyBhbnkgYWxpYXNcbiAgICBhc3luYy5hbnkgPSBhc3luYy5zb21lO1xuXG4gICAgYXN5bmMuZXZlcnkgPSBmdW5jdGlvbiAoYXJyLCBpdGVyYXRvciwgbWFpbl9jYWxsYmFjaykge1xuICAgICAgICBhc3luYy5lYWNoKGFyciwgZnVuY3Rpb24gKHgsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICBpdGVyYXRvcih4LCBmdW5jdGlvbiAodikge1xuICAgICAgICAgICAgICAgIGlmICghdikge1xuICAgICAgICAgICAgICAgICAgICBtYWluX2NhbGxiYWNrKGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgICAgbWFpbl9jYWxsYmFjayA9IGZ1bmN0aW9uICgpIHt9O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgIG1haW5fY2FsbGJhY2sodHJ1ZSk7XG4gICAgICAgIH0pO1xuICAgIH07XG4gICAgLy8gYWxsIGFsaWFzXG4gICAgYXN5bmMuYWxsID0gYXN5bmMuZXZlcnk7XG5cbiAgICBhc3luYy5zb3J0QnkgPSBmdW5jdGlvbiAoYXJyLCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgYXN5bmMubWFwKGFyciwgZnVuY3Rpb24gKHgsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICBpdGVyYXRvcih4LCBmdW5jdGlvbiAoZXJyLCBjcml0ZXJpYSkge1xuICAgICAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKG51bGwsIHt2YWx1ZTogeCwgY3JpdGVyaWE6IGNyaXRlcmlhfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sIGZ1bmN0aW9uIChlcnIsIHJlc3VsdHMpIHtcbiAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHZhciBmbiA9IGZ1bmN0aW9uIChsZWZ0LCByaWdodCkge1xuICAgICAgICAgICAgICAgICAgICB2YXIgYSA9IGxlZnQuY3JpdGVyaWEsIGIgPSByaWdodC5jcml0ZXJpYTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGEgPCBiID8gLTEgOiBhID4gYiA/IDEgOiAwO1xuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgY2FsbGJhY2sobnVsbCwgX21hcChyZXN1bHRzLnNvcnQoZm4pLCBmdW5jdGlvbiAoeCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4geC52YWx1ZTtcbiAgICAgICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH07XG5cbiAgICBhc3luYy5hdXRvID0gZnVuY3Rpb24gKHRhc2tzLCBjYWxsYmFjaykge1xuICAgICAgICBjYWxsYmFjayA9IGNhbGxiYWNrIHx8IGZ1bmN0aW9uICgpIHt9O1xuICAgICAgICB2YXIga2V5cyA9IF9rZXlzKHRhc2tzKTtcbiAgICAgICAgdmFyIHJlbWFpbmluZ1Rhc2tzID0ga2V5cy5sZW5ndGhcbiAgICAgICAgaWYgKCFyZW1haW5pbmdUYXNrcykge1xuICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKCk7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgcmVzdWx0cyA9IHt9O1xuXG4gICAgICAgIHZhciBsaXN0ZW5lcnMgPSBbXTtcbiAgICAgICAgdmFyIGFkZExpc3RlbmVyID0gZnVuY3Rpb24gKGZuKSB7XG4gICAgICAgICAgICBsaXN0ZW5lcnMudW5zaGlmdChmbik7XG4gICAgICAgIH07XG4gICAgICAgIHZhciByZW1vdmVMaXN0ZW5lciA9IGZ1bmN0aW9uIChmbikge1xuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsaXN0ZW5lcnMubGVuZ3RoOyBpICs9IDEpIHtcbiAgICAgICAgICAgICAgICBpZiAobGlzdGVuZXJzW2ldID09PSBmbikge1xuICAgICAgICAgICAgICAgICAgICBsaXN0ZW5lcnMuc3BsaWNlKGksIDEpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICB2YXIgdGFza0NvbXBsZXRlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmVtYWluaW5nVGFza3MtLVxuICAgICAgICAgICAgX2VhY2gobGlzdGVuZXJzLnNsaWNlKDApLCBmdW5jdGlvbiAoZm4pIHtcbiAgICAgICAgICAgICAgICBmbigpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH07XG5cbiAgICAgICAgYWRkTGlzdGVuZXIoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgaWYgKCFyZW1haW5pbmdUYXNrcykge1xuICAgICAgICAgICAgICAgIHZhciB0aGVDYWxsYmFjayA9IGNhbGxiYWNrO1xuICAgICAgICAgICAgICAgIC8vIHByZXZlbnQgZmluYWwgY2FsbGJhY2sgZnJvbSBjYWxsaW5nIGl0c2VsZiBpZiBpdCBlcnJvcnNcbiAgICAgICAgICAgICAgICBjYWxsYmFjayA9IGZ1bmN0aW9uICgpIHt9O1xuXG4gICAgICAgICAgICAgICAgdGhlQ2FsbGJhY2sobnVsbCwgcmVzdWx0cyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIF9lYWNoKGtleXMsIGZ1bmN0aW9uIChrKSB7XG4gICAgICAgICAgICB2YXIgdGFzayA9IF9pc0FycmF5KHRhc2tzW2tdKSA/IHRhc2tzW2tdOiBbdGFza3Nba11dO1xuICAgICAgICAgICAgdmFyIHRhc2tDYWxsYmFjayA9IGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgICAgICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMSk7XG4gICAgICAgICAgICAgICAgaWYgKGFyZ3MubGVuZ3RoIDw9IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgYXJncyA9IGFyZ3NbMF07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHNhZmVSZXN1bHRzID0ge307XG4gICAgICAgICAgICAgICAgICAgIF9lYWNoKF9rZXlzKHJlc3VsdHMpLCBmdW5jdGlvbihya2V5KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzYWZlUmVzdWx0c1tya2V5XSA9IHJlc3VsdHNbcmtleV07XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICBzYWZlUmVzdWx0c1trXSA9IGFyZ3M7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKGVyciwgc2FmZVJlc3VsdHMpO1xuICAgICAgICAgICAgICAgICAgICAvLyBzdG9wIHN1YnNlcXVlbnQgZXJyb3JzIGhpdHRpbmcgY2FsbGJhY2sgbXVsdGlwbGUgdGltZXNcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2sgPSBmdW5jdGlvbiAoKSB7fTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdHNba10gPSBhcmdzO1xuICAgICAgICAgICAgICAgICAgICBhc3luYy5zZXRJbW1lZGlhdGUodGFza0NvbXBsZXRlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgdmFyIHJlcXVpcmVzID0gdGFzay5zbGljZSgwLCBNYXRoLmFicyh0YXNrLmxlbmd0aCAtIDEpKSB8fCBbXTtcbiAgICAgICAgICAgIHZhciByZWFkeSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gX3JlZHVjZShyZXF1aXJlcywgZnVuY3Rpb24gKGEsIHgpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChhICYmIHJlc3VsdHMuaGFzT3duUHJvcGVydHkoeCkpO1xuICAgICAgICAgICAgICAgIH0sIHRydWUpICYmICFyZXN1bHRzLmhhc093blByb3BlcnR5KGspO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGlmIChyZWFkeSgpKSB7XG4gICAgICAgICAgICAgICAgdGFza1t0YXNrLmxlbmd0aCAtIDFdKHRhc2tDYWxsYmFjaywgcmVzdWx0cyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICB2YXIgbGlzdGVuZXIgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChyZWFkeSgpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZW1vdmVMaXN0ZW5lcihsaXN0ZW5lcik7XG4gICAgICAgICAgICAgICAgICAgICAgICB0YXNrW3Rhc2subGVuZ3RoIC0gMV0odGFza0NhbGxiYWNrLCByZXN1bHRzKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgYWRkTGlzdGVuZXIobGlzdGVuZXIpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9O1xuXG4gICAgYXN5bmMucmV0cnkgPSBmdW5jdGlvbih0aW1lcywgdGFzaywgY2FsbGJhY2spIHtcbiAgICAgICAgdmFyIERFRkFVTFRfVElNRVMgPSA1O1xuICAgICAgICB2YXIgYXR0ZW1wdHMgPSBbXTtcbiAgICAgICAgLy8gVXNlIGRlZmF1bHRzIGlmIHRpbWVzIG5vdCBwYXNzZWRcbiAgICAgICAgaWYgKHR5cGVvZiB0aW1lcyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgY2FsbGJhY2sgPSB0YXNrO1xuICAgICAgICAgICAgdGFzayA9IHRpbWVzO1xuICAgICAgICAgICAgdGltZXMgPSBERUZBVUxUX1RJTUVTO1xuICAgICAgICB9XG4gICAgICAgIC8vIE1ha2Ugc3VyZSB0aW1lcyBpcyBhIG51bWJlclxuICAgICAgICB0aW1lcyA9IHBhcnNlSW50KHRpbWVzLCAxMCkgfHwgREVGQVVMVF9USU1FUztcbiAgICAgICAgdmFyIHdyYXBwZWRUYXNrID0gZnVuY3Rpb24od3JhcHBlZENhbGxiYWNrLCB3cmFwcGVkUmVzdWx0cykge1xuICAgICAgICAgICAgdmFyIHJldHJ5QXR0ZW1wdCA9IGZ1bmN0aW9uKHRhc2ssIGZpbmFsQXR0ZW1wdCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbihzZXJpZXNDYWxsYmFjaykge1xuICAgICAgICAgICAgICAgICAgICB0YXNrKGZ1bmN0aW9uKGVyciwgcmVzdWx0KXtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlcmllc0NhbGxiYWNrKCFlcnIgfHwgZmluYWxBdHRlbXB0LCB7ZXJyOiBlcnIsIHJlc3VsdDogcmVzdWx0fSk7XG4gICAgICAgICAgICAgICAgICAgIH0sIHdyYXBwZWRSZXN1bHRzKTtcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIHdoaWxlICh0aW1lcykge1xuICAgICAgICAgICAgICAgIGF0dGVtcHRzLnB1c2gocmV0cnlBdHRlbXB0KHRhc2ssICEodGltZXMtPTEpKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBhc3luYy5zZXJpZXMoYXR0ZW1wdHMsIGZ1bmN0aW9uKGRvbmUsIGRhdGEpe1xuICAgICAgICAgICAgICAgIGRhdGEgPSBkYXRhW2RhdGEubGVuZ3RoIC0gMV07XG4gICAgICAgICAgICAgICAgKHdyYXBwZWRDYWxsYmFjayB8fCBjYWxsYmFjaykoZGF0YS5lcnIsIGRhdGEucmVzdWx0KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIC8vIElmIGEgY2FsbGJhY2sgaXMgcGFzc2VkLCBydW4gdGhpcyBhcyBhIGNvbnRyb2xsIGZsb3dcbiAgICAgICAgcmV0dXJuIGNhbGxiYWNrID8gd3JhcHBlZFRhc2soKSA6IHdyYXBwZWRUYXNrXG4gICAgfTtcblxuICAgIGFzeW5jLndhdGVyZmFsbCA9IGZ1bmN0aW9uICh0YXNrcywgY2FsbGJhY2spIHtcbiAgICAgICAgY2FsbGJhY2sgPSBjYWxsYmFjayB8fCBmdW5jdGlvbiAoKSB7fTtcbiAgICAgICAgaWYgKCFfaXNBcnJheSh0YXNrcykpIHtcbiAgICAgICAgICB2YXIgZXJyID0gbmV3IEVycm9yKCdGaXJzdCBhcmd1bWVudCB0byB3YXRlcmZhbGwgbXVzdCBiZSBhbiBhcnJheSBvZiBmdW5jdGlvbnMnKTtcbiAgICAgICAgICByZXR1cm4gY2FsbGJhY2soZXJyKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIXRhc2tzLmxlbmd0aCkge1xuICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKCk7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIHdyYXBJdGVyYXRvciA9IGZ1bmN0aW9uIChpdGVyYXRvcikge1xuICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrID0gZnVuY3Rpb24gKCkge307XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMSk7XG4gICAgICAgICAgICAgICAgICAgIHZhciBuZXh0ID0gaXRlcmF0b3IubmV4dCgpO1xuICAgICAgICAgICAgICAgICAgICBpZiAobmV4dCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgYXJncy5wdXNoKHdyYXBJdGVyYXRvcihuZXh0KSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhcmdzLnB1c2goY2FsbGJhY2spO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGFzeW5jLnNldEltbWVkaWF0ZShmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpdGVyYXRvci5hcHBseShudWxsLCBhcmdzKTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfTtcbiAgICAgICAgfTtcbiAgICAgICAgd3JhcEl0ZXJhdG9yKGFzeW5jLml0ZXJhdG9yKHRhc2tzKSkoKTtcbiAgICB9O1xuXG4gICAgdmFyIF9wYXJhbGxlbCA9IGZ1bmN0aW9uKGVhY2hmbiwgdGFza3MsIGNhbGxiYWNrKSB7XG4gICAgICAgIGNhbGxiYWNrID0gY2FsbGJhY2sgfHwgZnVuY3Rpb24gKCkge307XG4gICAgICAgIGlmIChfaXNBcnJheSh0YXNrcykpIHtcbiAgICAgICAgICAgIGVhY2hmbi5tYXAodGFza3MsIGZ1bmN0aW9uIChmbiwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgICAgICBpZiAoZm4pIHtcbiAgICAgICAgICAgICAgICAgICAgZm4oZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGFyZ3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsIDEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFyZ3MubGVuZ3RoIDw9IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmdzID0gYXJnc1swXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrLmNhbGwobnVsbCwgZXJyLCBhcmdzKTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSwgY2FsbGJhY2spO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdmFyIHJlc3VsdHMgPSB7fTtcbiAgICAgICAgICAgIGVhY2hmbi5lYWNoKF9rZXlzKHRhc2tzKSwgZnVuY3Rpb24gKGssIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICAgICAgdGFza3Nba10oZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgICAgICAgICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMSk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChhcmdzLmxlbmd0aCA8PSAxKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhcmdzID0gYXJnc1swXTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICByZXN1bHRzW2tdID0gYXJncztcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0sIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnIsIHJlc3VsdHMpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgYXN5bmMucGFyYWxsZWwgPSBmdW5jdGlvbiAodGFza3MsIGNhbGxiYWNrKSB7XG4gICAgICAgIF9wYXJhbGxlbCh7IG1hcDogYXN5bmMubWFwLCBlYWNoOiBhc3luYy5lYWNoIH0sIHRhc2tzLCBjYWxsYmFjayk7XG4gICAgfTtcblxuICAgIGFzeW5jLnBhcmFsbGVsTGltaXQgPSBmdW5jdGlvbih0YXNrcywgbGltaXQsIGNhbGxiYWNrKSB7XG4gICAgICAgIF9wYXJhbGxlbCh7IG1hcDogX21hcExpbWl0KGxpbWl0KSwgZWFjaDogX2VhY2hMaW1pdChsaW1pdCkgfSwgdGFza3MsIGNhbGxiYWNrKTtcbiAgICB9O1xuXG4gICAgYXN5bmMuc2VyaWVzID0gZnVuY3Rpb24gKHRhc2tzLCBjYWxsYmFjaykge1xuICAgICAgICBjYWxsYmFjayA9IGNhbGxiYWNrIHx8IGZ1bmN0aW9uICgpIHt9O1xuICAgICAgICBpZiAoX2lzQXJyYXkodGFza3MpKSB7XG4gICAgICAgICAgICBhc3luYy5tYXBTZXJpZXModGFza3MsIGZ1bmN0aW9uIChmbiwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgICAgICBpZiAoZm4pIHtcbiAgICAgICAgICAgICAgICAgICAgZm4oZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGFyZ3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsIDEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFyZ3MubGVuZ3RoIDw9IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmdzID0gYXJnc1swXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrLmNhbGwobnVsbCwgZXJyLCBhcmdzKTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSwgY2FsbGJhY2spO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdmFyIHJlc3VsdHMgPSB7fTtcbiAgICAgICAgICAgIGFzeW5jLmVhY2hTZXJpZXMoX2tleXModGFza3MpLCBmdW5jdGlvbiAoaywgY2FsbGJhY2spIHtcbiAgICAgICAgICAgICAgICB0YXNrc1trXShmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBhcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGFyZ3MubGVuZ3RoIDw9IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3MgPSBhcmdzWzBdO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdHNba10gPSBhcmdzO1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSwgZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrKGVyciwgcmVzdWx0cyk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH07XG5cbiAgICBhc3luYy5pdGVyYXRvciA9IGZ1bmN0aW9uICh0YXNrcykge1xuICAgICAgICB2YXIgbWFrZUNhbGxiYWNrID0gZnVuY3Rpb24gKGluZGV4KSB7XG4gICAgICAgICAgICB2YXIgZm4gPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgaWYgKHRhc2tzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICB0YXNrc1tpbmRleF0uYXBwbHkobnVsbCwgYXJndW1lbnRzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZuLm5leHQoKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBmbi5uZXh0ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiAoaW5kZXggPCB0YXNrcy5sZW5ndGggLSAxKSA/IG1ha2VDYWxsYmFjayhpbmRleCArIDEpOiBudWxsO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIHJldHVybiBmbjtcbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIG1ha2VDYWxsYmFjaygwKTtcbiAgICB9O1xuXG4gICAgYXN5bmMuYXBwbHkgPSBmdW5jdGlvbiAoZm4pIHtcbiAgICAgICAgdmFyIGFyZ3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsIDEpO1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIGZuLmFwcGx5KFxuICAgICAgICAgICAgICAgIG51bGwsIGFyZ3MuY29uY2F0KEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cykpXG4gICAgICAgICAgICApO1xuICAgICAgICB9O1xuICAgIH07XG5cbiAgICB2YXIgX2NvbmNhdCA9IGZ1bmN0aW9uIChlYWNoZm4sIGFyciwgZm4sIGNhbGxiYWNrKSB7XG4gICAgICAgIHZhciByID0gW107XG4gICAgICAgIGVhY2hmbihhcnIsIGZ1bmN0aW9uICh4LCBjYikge1xuICAgICAgICAgICAgZm4oeCwgZnVuY3Rpb24gKGVyciwgeSkge1xuICAgICAgICAgICAgICAgIHIgPSByLmNvbmNhdCh5IHx8IFtdKTtcbiAgICAgICAgICAgICAgICBjYihlcnIpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgIGNhbGxiYWNrKGVyciwgcik7XG4gICAgICAgIH0pO1xuICAgIH07XG4gICAgYXN5bmMuY29uY2F0ID0gZG9QYXJhbGxlbChfY29uY2F0KTtcbiAgICBhc3luYy5jb25jYXRTZXJpZXMgPSBkb1NlcmllcyhfY29uY2F0KTtcblxuICAgIGFzeW5jLndoaWxzdCA9IGZ1bmN0aW9uICh0ZXN0LCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgaWYgKHRlc3QoKSkge1xuICAgICAgICAgICAgaXRlcmF0b3IoZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGFzeW5jLndoaWxzdCh0ZXN0LCBpdGVyYXRvciwgY2FsbGJhY2spO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIGFzeW5jLmRvV2hpbHN0ID0gZnVuY3Rpb24gKGl0ZXJhdG9yLCB0ZXN0LCBjYWxsYmFjaykge1xuICAgICAgICBpdGVyYXRvcihmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMSk7XG4gICAgICAgICAgICBpZiAodGVzdC5hcHBseShudWxsLCBhcmdzKSkge1xuICAgICAgICAgICAgICAgIGFzeW5jLmRvV2hpbHN0KGl0ZXJhdG9yLCB0ZXN0LCBjYWxsYmFjayk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9O1xuXG4gICAgYXN5bmMudW50aWwgPSBmdW5jdGlvbiAodGVzdCwgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgIGlmICghdGVzdCgpKSB7XG4gICAgICAgICAgICBpdGVyYXRvcihmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYXN5bmMudW50aWwodGVzdCwgaXRlcmF0b3IsIGNhbGxiYWNrKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgY2FsbGJhY2soKTtcbiAgICAgICAgfVxuICAgIH07XG5cbiAgICBhc3luYy5kb1VudGlsID0gZnVuY3Rpb24gKGl0ZXJhdG9yLCB0ZXN0LCBjYWxsYmFjaykge1xuICAgICAgICBpdGVyYXRvcihmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMSk7XG4gICAgICAgICAgICBpZiAoIXRlc3QuYXBwbHkobnVsbCwgYXJncykpIHtcbiAgICAgICAgICAgICAgICBhc3luYy5kb1VudGlsKGl0ZXJhdG9yLCB0ZXN0LCBjYWxsYmFjayk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9O1xuXG4gICAgYXN5bmMucXVldWUgPSBmdW5jdGlvbiAod29ya2VyLCBjb25jdXJyZW5jeSkge1xuICAgICAgICBpZiAoY29uY3VycmVuY3kgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgY29uY3VycmVuY3kgPSAxO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIF9pbnNlcnQocSwgZGF0YSwgcG9zLCBjYWxsYmFjaykge1xuICAgICAgICAgIGlmICghcS5zdGFydGVkKXtcbiAgICAgICAgICAgIHEuc3RhcnRlZCA9IHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICghX2lzQXJyYXkoZGF0YSkpIHtcbiAgICAgICAgICAgICAgZGF0YSA9IFtkYXRhXTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYoZGF0YS5sZW5ndGggPT0gMCkge1xuICAgICAgICAgICAgIC8vIGNhbGwgZHJhaW4gaW1tZWRpYXRlbHkgaWYgdGhlcmUgYXJlIG5vIHRhc2tzXG4gICAgICAgICAgICAgcmV0dXJuIGFzeW5jLnNldEltbWVkaWF0ZShmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgaWYgKHEuZHJhaW4pIHtcbiAgICAgICAgICAgICAgICAgICAgIHEuZHJhaW4oKTtcbiAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgICBfZWFjaChkYXRhLCBmdW5jdGlvbih0YXNrKSB7XG4gICAgICAgICAgICAgIHZhciBpdGVtID0ge1xuICAgICAgICAgICAgICAgICAgZGF0YTogdGFzayxcbiAgICAgICAgICAgICAgICAgIGNhbGxiYWNrOiB0eXBlb2YgY2FsbGJhY2sgPT09ICdmdW5jdGlvbicgPyBjYWxsYmFjayA6IG51bGxcbiAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICBpZiAocG9zKSB7XG4gICAgICAgICAgICAgICAgcS50YXNrcy51bnNoaWZ0KGl0ZW0pO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHEudGFza3MucHVzaChpdGVtKTtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGlmIChxLnNhdHVyYXRlZCAmJiBxLnRhc2tzLmxlbmd0aCA9PT0gcS5jb25jdXJyZW5jeSkge1xuICAgICAgICAgICAgICAgICAgcS5zYXR1cmF0ZWQoKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBhc3luYy5zZXRJbW1lZGlhdGUocS5wcm9jZXNzKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciB3b3JrZXJzID0gMDtcbiAgICAgICAgdmFyIHEgPSB7XG4gICAgICAgICAgICB0YXNrczogW10sXG4gICAgICAgICAgICBjb25jdXJyZW5jeTogY29uY3VycmVuY3ksXG4gICAgICAgICAgICBzYXR1cmF0ZWQ6IG51bGwsXG4gICAgICAgICAgICBlbXB0eTogbnVsbCxcbiAgICAgICAgICAgIGRyYWluOiBudWxsLFxuICAgICAgICAgICAgc3RhcnRlZDogZmFsc2UsXG4gICAgICAgICAgICBwYXVzZWQ6IGZhbHNlLFxuICAgICAgICAgICAgcHVzaDogZnVuY3Rpb24gKGRhdGEsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICAgIF9pbnNlcnQocSwgZGF0YSwgZmFsc2UsIGNhbGxiYWNrKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBraWxsOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgIHEuZHJhaW4gPSBudWxsO1xuICAgICAgICAgICAgICBxLnRhc2tzID0gW107XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdW5zaGlmdDogZnVuY3Rpb24gKGRhdGEsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICAgIF9pbnNlcnQocSwgZGF0YSwgdHJ1ZSwgY2FsbGJhY2spO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHByb2Nlc3M6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBpZiAoIXEucGF1c2VkICYmIHdvcmtlcnMgPCBxLmNvbmN1cnJlbmN5ICYmIHEudGFza3MubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciB0YXNrID0gcS50YXNrcy5zaGlmdCgpO1xuICAgICAgICAgICAgICAgICAgICBpZiAocS5lbXB0eSAmJiBxLnRhc2tzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcS5lbXB0eSgpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHdvcmtlcnMgKz0gMTtcbiAgICAgICAgICAgICAgICAgICAgdmFyIG5leHQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB3b3JrZXJzIC09IDE7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodGFzay5jYWxsYmFjaykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhc2suY2FsbGJhY2suYXBwbHkodGFzaywgYXJndW1lbnRzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChxLmRyYWluICYmIHEudGFza3MubGVuZ3RoICsgd29ya2VycyA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHEuZHJhaW4oKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHEucHJvY2VzcygpO1xuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICB2YXIgY2IgPSBvbmx5X29uY2UobmV4dCk7XG4gICAgICAgICAgICAgICAgICAgIHdvcmtlcih0YXNrLmRhdGEsIGNiKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbGVuZ3RoOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHEudGFza3MubGVuZ3RoO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHJ1bm5pbmc6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gd29ya2VycztcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBpZGxlOiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcS50YXNrcy5sZW5ndGggKyB3b3JrZXJzID09PSAwO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHBhdXNlOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgaWYgKHEucGF1c2VkID09PSB0cnVlKSB7IHJldHVybjsgfVxuICAgICAgICAgICAgICAgIHEucGF1c2VkID0gdHJ1ZTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICByZXN1bWU6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBpZiAocS5wYXVzZWQgPT09IGZhbHNlKSB7IHJldHVybjsgfVxuICAgICAgICAgICAgICAgIHEucGF1c2VkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgLy8gTmVlZCB0byBjYWxsIHEucHJvY2VzcyBvbmNlIHBlciBjb25jdXJyZW50XG4gICAgICAgICAgICAgICAgLy8gd29ya2VyIHRvIHByZXNlcnZlIGZ1bGwgY29uY3VycmVuY3kgYWZ0ZXIgcGF1c2VcbiAgICAgICAgICAgICAgICBmb3IgKHZhciB3ID0gMTsgdyA8PSBxLmNvbmN1cnJlbmN5OyB3KyspIHtcbiAgICAgICAgICAgICAgICAgICAgYXN5bmMuc2V0SW1tZWRpYXRlKHEucHJvY2Vzcyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gcTtcbiAgICB9O1xuXG4gICAgYXN5bmMucHJpb3JpdHlRdWV1ZSA9IGZ1bmN0aW9uICh3b3JrZXIsIGNvbmN1cnJlbmN5KSB7XG5cbiAgICAgICAgZnVuY3Rpb24gX2NvbXBhcmVUYXNrcyhhLCBiKXtcbiAgICAgICAgICByZXR1cm4gYS5wcmlvcml0eSAtIGIucHJpb3JpdHk7XG4gICAgICAgIH07XG5cbiAgICAgICAgZnVuY3Rpb24gX2JpbmFyeVNlYXJjaChzZXF1ZW5jZSwgaXRlbSwgY29tcGFyZSkge1xuICAgICAgICAgIHZhciBiZWcgPSAtMSxcbiAgICAgICAgICAgICAgZW5kID0gc2VxdWVuY2UubGVuZ3RoIC0gMTtcbiAgICAgICAgICB3aGlsZSAoYmVnIDwgZW5kKSB7XG4gICAgICAgICAgICB2YXIgbWlkID0gYmVnICsgKChlbmQgLSBiZWcgKyAxKSA+Pj4gMSk7XG4gICAgICAgICAgICBpZiAoY29tcGFyZShpdGVtLCBzZXF1ZW5jZVttaWRdKSA+PSAwKSB7XG4gICAgICAgICAgICAgIGJlZyA9IG1pZDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGVuZCA9IG1pZCAtIDE7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBiZWc7XG4gICAgICAgIH1cblxuICAgICAgICBmdW5jdGlvbiBfaW5zZXJ0KHEsIGRhdGEsIHByaW9yaXR5LCBjYWxsYmFjaykge1xuICAgICAgICAgIGlmICghcS5zdGFydGVkKXtcbiAgICAgICAgICAgIHEuc3RhcnRlZCA9IHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICghX2lzQXJyYXkoZGF0YSkpIHtcbiAgICAgICAgICAgICAgZGF0YSA9IFtkYXRhXTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYoZGF0YS5sZW5ndGggPT0gMCkge1xuICAgICAgICAgICAgIC8vIGNhbGwgZHJhaW4gaW1tZWRpYXRlbHkgaWYgdGhlcmUgYXJlIG5vIHRhc2tzXG4gICAgICAgICAgICAgcmV0dXJuIGFzeW5jLnNldEltbWVkaWF0ZShmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgaWYgKHEuZHJhaW4pIHtcbiAgICAgICAgICAgICAgICAgICAgIHEuZHJhaW4oKTtcbiAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgICBfZWFjaChkYXRhLCBmdW5jdGlvbih0YXNrKSB7XG4gICAgICAgICAgICAgIHZhciBpdGVtID0ge1xuICAgICAgICAgICAgICAgICAgZGF0YTogdGFzayxcbiAgICAgICAgICAgICAgICAgIHByaW9yaXR5OiBwcmlvcml0eSxcbiAgICAgICAgICAgICAgICAgIGNhbGxiYWNrOiB0eXBlb2YgY2FsbGJhY2sgPT09ICdmdW5jdGlvbicgPyBjYWxsYmFjayA6IG51bGxcbiAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICBxLnRhc2tzLnNwbGljZShfYmluYXJ5U2VhcmNoKHEudGFza3MsIGl0ZW0sIF9jb21wYXJlVGFza3MpICsgMSwgMCwgaXRlbSk7XG5cbiAgICAgICAgICAgICAgaWYgKHEuc2F0dXJhdGVkICYmIHEudGFza3MubGVuZ3RoID09PSBxLmNvbmN1cnJlbmN5KSB7XG4gICAgICAgICAgICAgICAgICBxLnNhdHVyYXRlZCgpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGFzeW5jLnNldEltbWVkaWF0ZShxLnByb2Nlc3MpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gU3RhcnQgd2l0aCBhIG5vcm1hbCBxdWV1ZVxuICAgICAgICB2YXIgcSA9IGFzeW5jLnF1ZXVlKHdvcmtlciwgY29uY3VycmVuY3kpO1xuXG4gICAgICAgIC8vIE92ZXJyaWRlIHB1c2ggdG8gYWNjZXB0IHNlY29uZCBwYXJhbWV0ZXIgcmVwcmVzZW50aW5nIHByaW9yaXR5XG4gICAgICAgIHEucHVzaCA9IGZ1bmN0aW9uIChkYXRhLCBwcmlvcml0eSwgY2FsbGJhY2spIHtcbiAgICAgICAgICBfaW5zZXJ0KHEsIGRhdGEsIHByaW9yaXR5LCBjYWxsYmFjayk7XG4gICAgICAgIH07XG5cbiAgICAgICAgLy8gUmVtb3ZlIHVuc2hpZnQgZnVuY3Rpb25cbiAgICAgICAgZGVsZXRlIHEudW5zaGlmdDtcblxuICAgICAgICByZXR1cm4gcTtcbiAgICB9O1xuXG4gICAgYXN5bmMuY2FyZ28gPSBmdW5jdGlvbiAod29ya2VyLCBwYXlsb2FkKSB7XG4gICAgICAgIHZhciB3b3JraW5nICAgICA9IGZhbHNlLFxuICAgICAgICAgICAgdGFza3MgICAgICAgPSBbXTtcblxuICAgICAgICB2YXIgY2FyZ28gPSB7XG4gICAgICAgICAgICB0YXNrczogdGFza3MsXG4gICAgICAgICAgICBwYXlsb2FkOiBwYXlsb2FkLFxuICAgICAgICAgICAgc2F0dXJhdGVkOiBudWxsLFxuICAgICAgICAgICAgZW1wdHk6IG51bGwsXG4gICAgICAgICAgICBkcmFpbjogbnVsbCxcbiAgICAgICAgICAgIGRyYWluZWQ6IHRydWUsXG4gICAgICAgICAgICBwdXNoOiBmdW5jdGlvbiAoZGF0YSwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgICAgICBpZiAoIV9pc0FycmF5KGRhdGEpKSB7XG4gICAgICAgICAgICAgICAgICAgIGRhdGEgPSBbZGF0YV07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIF9lYWNoKGRhdGEsIGZ1bmN0aW9uKHRhc2spIHtcbiAgICAgICAgICAgICAgICAgICAgdGFza3MucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgICAgICBkYXRhOiB0YXNrLFxuICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2s6IHR5cGVvZiBjYWxsYmFjayA9PT0gJ2Z1bmN0aW9uJyA/IGNhbGxiYWNrIDogbnVsbFxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgY2FyZ28uZHJhaW5lZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICBpZiAoY2FyZ28uc2F0dXJhdGVkICYmIHRhc2tzLmxlbmd0aCA9PT0gcGF5bG9hZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY2FyZ28uc2F0dXJhdGVkKCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBhc3luYy5zZXRJbW1lZGlhdGUoY2FyZ28ucHJvY2Vzcyk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcHJvY2VzczogZnVuY3Rpb24gcHJvY2VzcygpIHtcbiAgICAgICAgICAgICAgICBpZiAod29ya2luZykgcmV0dXJuO1xuICAgICAgICAgICAgICAgIGlmICh0YXNrcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgaWYoY2FyZ28uZHJhaW4gJiYgIWNhcmdvLmRyYWluZWQpIGNhcmdvLmRyYWluKCk7XG4gICAgICAgICAgICAgICAgICAgIGNhcmdvLmRyYWluZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgdmFyIHRzID0gdHlwZW9mIHBheWxvYWQgPT09ICdudW1iZXInXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPyB0YXNrcy5zcGxpY2UoMCwgcGF5bG9hZClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IHRhc2tzLnNwbGljZSgwLCB0YXNrcy5sZW5ndGgpO1xuXG4gICAgICAgICAgICAgICAgdmFyIGRzID0gX21hcCh0cywgZnVuY3Rpb24gKHRhc2spIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRhc2suZGF0YTtcbiAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgIGlmKGNhcmdvLmVtcHR5KSBjYXJnby5lbXB0eSgpO1xuICAgICAgICAgICAgICAgIHdvcmtpbmcgPSB0cnVlO1xuICAgICAgICAgICAgICAgIHdvcmtlcihkcywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICB3b3JraW5nID0gZmFsc2U7XG5cbiAgICAgICAgICAgICAgICAgICAgdmFyIGFyZ3MgPSBhcmd1bWVudHM7XG4gICAgICAgICAgICAgICAgICAgIF9lYWNoKHRzLCBmdW5jdGlvbiAoZGF0YSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRhdGEuY2FsbGJhY2spIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLmNhbGxiYWNrLmFwcGx5KG51bGwsIGFyZ3MpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgICAgICBwcm9jZXNzKCk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbGVuZ3RoOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRhc2tzLmxlbmd0aDtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBydW5uaW5nOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHdvcmtpbmc7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiBjYXJnbztcbiAgICB9O1xuXG4gICAgdmFyIF9jb25zb2xlX2ZuID0gZnVuY3Rpb24gKG5hbWUpIHtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChmbikge1xuICAgICAgICAgICAgdmFyIGFyZ3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsIDEpO1xuICAgICAgICAgICAgZm4uYXBwbHkobnVsbCwgYXJncy5jb25jYXQoW2Z1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgICAgICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMSk7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBjb25zb2xlICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoY29uc29sZS5lcnJvcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChjb25zb2xlW25hbWVdKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBfZWFjaChhcmdzLCBmdW5jdGlvbiAoeCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGVbbmFtZV0oeCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1dKSk7XG4gICAgICAgIH07XG4gICAgfTtcbiAgICBhc3luYy5sb2cgPSBfY29uc29sZV9mbignbG9nJyk7XG4gICAgYXN5bmMuZGlyID0gX2NvbnNvbGVfZm4oJ2RpcicpO1xuICAgIC8qYXN5bmMuaW5mbyA9IF9jb25zb2xlX2ZuKCdpbmZvJyk7XG4gICAgYXN5bmMud2FybiA9IF9jb25zb2xlX2ZuKCd3YXJuJyk7XG4gICAgYXN5bmMuZXJyb3IgPSBfY29uc29sZV9mbignZXJyb3InKTsqL1xuXG4gICAgYXN5bmMubWVtb2l6ZSA9IGZ1bmN0aW9uIChmbiwgaGFzaGVyKSB7XG4gICAgICAgIHZhciBtZW1vID0ge307XG4gICAgICAgIHZhciBxdWV1ZXMgPSB7fTtcbiAgICAgICAgaGFzaGVyID0gaGFzaGVyIHx8IGZ1bmN0aW9uICh4KSB7XG4gICAgICAgICAgICByZXR1cm4geDtcbiAgICAgICAgfTtcbiAgICAgICAgdmFyIG1lbW9pemVkID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIGFyZ3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMpO1xuICAgICAgICAgICAgdmFyIGNhbGxiYWNrID0gYXJncy5wb3AoKTtcbiAgICAgICAgICAgIHZhciBrZXkgPSBoYXNoZXIuYXBwbHkobnVsbCwgYXJncyk7XG4gICAgICAgICAgICBpZiAoa2V5IGluIG1lbW8pIHtcbiAgICAgICAgICAgICAgICBhc3luYy5uZXh0VGljayhmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrLmFwcGx5KG51bGwsIG1lbW9ba2V5XSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChrZXkgaW4gcXVldWVzKSB7XG4gICAgICAgICAgICAgICAgcXVldWVzW2tleV0ucHVzaChjYWxsYmFjayk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBxdWV1ZXNba2V5XSA9IFtjYWxsYmFja107XG4gICAgICAgICAgICAgICAgZm4uYXBwbHkobnVsbCwgYXJncy5jb25jYXQoW2Z1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgbWVtb1trZXldID0gYXJndW1lbnRzO1xuICAgICAgICAgICAgICAgICAgICB2YXIgcSA9IHF1ZXVlc1trZXldO1xuICAgICAgICAgICAgICAgICAgICBkZWxldGUgcXVldWVzW2tleV07XG4gICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwLCBsID0gcS5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICBxW2ldLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICBtZW1vaXplZC5tZW1vID0gbWVtbztcbiAgICAgICAgbWVtb2l6ZWQudW5tZW1vaXplZCA9IGZuO1xuICAgICAgICByZXR1cm4gbWVtb2l6ZWQ7XG4gICAgfTtcblxuICAgIGFzeW5jLnVubWVtb2l6ZSA9IGZ1bmN0aW9uIChmbikge1xuICAgICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIChmbi51bm1lbW9pemVkIHx8IGZuKS5hcHBseShudWxsLCBhcmd1bWVudHMpO1xuICAgICAgfTtcbiAgICB9O1xuXG4gICAgYXN5bmMudGltZXMgPSBmdW5jdGlvbiAoY291bnQsIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICB2YXIgY291bnRlciA9IFtdO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNvdW50OyBpKyspIHtcbiAgICAgICAgICAgIGNvdW50ZXIucHVzaChpKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYXN5bmMubWFwKGNvdW50ZXIsIGl0ZXJhdG9yLCBjYWxsYmFjayk7XG4gICAgfTtcblxuICAgIGFzeW5jLnRpbWVzU2VyaWVzID0gZnVuY3Rpb24gKGNvdW50LCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgdmFyIGNvdW50ZXIgPSBbXTtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7XG4gICAgICAgICAgICBjb3VudGVyLnB1c2goaSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGFzeW5jLm1hcFNlcmllcyhjb3VudGVyLCBpdGVyYXRvciwgY2FsbGJhY2spO1xuICAgIH07XG5cbiAgICBhc3luYy5zZXEgPSBmdW5jdGlvbiAoLyogZnVuY3Rpb25zLi4uICovKSB7XG4gICAgICAgIHZhciBmbnMgPSBhcmd1bWVudHM7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgdGhhdCA9IHRoaXM7XG4gICAgICAgICAgICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7XG4gICAgICAgICAgICB2YXIgY2FsbGJhY2sgPSBhcmdzLnBvcCgpO1xuICAgICAgICAgICAgYXN5bmMucmVkdWNlKGZucywgYXJncywgZnVuY3Rpb24gKG5ld2FyZ3MsIGZuLCBjYikge1xuICAgICAgICAgICAgICAgIGZuLmFwcGx5KHRoYXQsIG5ld2FyZ3MuY29uY2F0KFtmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBlcnIgPSBhcmd1bWVudHNbMF07XG4gICAgICAgICAgICAgICAgICAgIHZhciBuZXh0YXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMSk7XG4gICAgICAgICAgICAgICAgICAgIGNiKGVyciwgbmV4dGFyZ3MpO1xuICAgICAgICAgICAgICAgIH1dKSlcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBmdW5jdGlvbiAoZXJyLCByZXN1bHRzKSB7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2suYXBwbHkodGhhdCwgW2Vycl0uY29uY2F0KHJlc3VsdHMpKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9O1xuICAgIH07XG5cbiAgICBhc3luYy5jb21wb3NlID0gZnVuY3Rpb24gKC8qIGZ1bmN0aW9ucy4uLiAqLykge1xuICAgICAgcmV0dXJuIGFzeW5jLnNlcS5hcHBseShudWxsLCBBcnJheS5wcm90b3R5cGUucmV2ZXJzZS5jYWxsKGFyZ3VtZW50cykpO1xuICAgIH07XG5cbiAgICB2YXIgX2FwcGx5RWFjaCA9IGZ1bmN0aW9uIChlYWNoZm4sIGZucyAvKmFyZ3MuLi4qLykge1xuICAgICAgICB2YXIgZ28gPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgdGhhdCA9IHRoaXM7XG4gICAgICAgICAgICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7XG4gICAgICAgICAgICB2YXIgY2FsbGJhY2sgPSBhcmdzLnBvcCgpO1xuICAgICAgICAgICAgcmV0dXJuIGVhY2hmbihmbnMsIGZ1bmN0aW9uIChmbiwgY2IpIHtcbiAgICAgICAgICAgICAgICBmbi5hcHBseSh0aGF0LCBhcmdzLmNvbmNhdChbY2JdKSk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY2FsbGJhY2spO1xuICAgICAgICB9O1xuICAgICAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA+IDIpIHtcbiAgICAgICAgICAgIHZhciBhcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAyKTtcbiAgICAgICAgICAgIHJldHVybiBnby5hcHBseSh0aGlzLCBhcmdzKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBnbztcbiAgICAgICAgfVxuICAgIH07XG4gICAgYXN5bmMuYXBwbHlFYWNoID0gZG9QYXJhbGxlbChfYXBwbHlFYWNoKTtcbiAgICBhc3luYy5hcHBseUVhY2hTZXJpZXMgPSBkb1NlcmllcyhfYXBwbHlFYWNoKTtcblxuICAgIGFzeW5jLmZvcmV2ZXIgPSBmdW5jdGlvbiAoZm4sIGNhbGxiYWNrKSB7XG4gICAgICAgIGZ1bmN0aW9uIG5leHQoZXJyKSB7XG4gICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgaWYgKGNhbGxiYWNrKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aHJvdyBlcnI7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmbihuZXh0KTtcbiAgICAgICAgfVxuICAgICAgICBuZXh0KCk7XG4gICAgfTtcblxuICAgIC8vIE5vZGUuanNcbiAgICBpZiAodHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCcgJiYgbW9kdWxlLmV4cG9ydHMpIHtcbiAgICAgICAgbW9kdWxlLmV4cG9ydHMgPSBhc3luYztcbiAgICB9XG4gICAgLy8gQU1EIC8gUmVxdWlyZUpTXG4gICAgZWxzZSBpZiAodHlwZW9mIGRlZmluZSAhPT0gJ3VuZGVmaW5lZCcgJiYgZGVmaW5lLmFtZCkge1xuICAgICAgICBkZWZpbmUoW10sIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiBhc3luYztcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8vIGluY2x1ZGVkIGRpcmVjdGx5IHZpYSA8c2NyaXB0PiB0YWdcbiAgICBlbHNlIHtcbiAgICAgICAgcm9vdC5hc3luYyA9IGFzeW5jO1xuICAgIH1cblxufSgpKTtcbiIsInZhciBhc3luYyAgICAgICA9IHJlcXVpcmUoJ2FzeW5jJyksXG4gICAgdXJsUGFyc2VyICAgPSByZXF1aXJlKCd1cmwnKSxcbiAgICBSZXNvdXJjZSAgICA9IHJlcXVpcmUoJy4vUmVzb3VyY2UnKSxcbiAgICBFdmVudEVtaXR0ZXIgPSByZXF1aXJlKCdldmVudGVtaXR0ZXIzJyk7XG5cbi8qKlxuICogTWFuYWdlcyB0aGUgc3RhdGUgYW5kIGxvYWRpbmcgb2YgbXVsdGlwbGUgcmVzb3VyY2VzIHRvIGxvYWQuXG4gKlxuICogQGNsYXNzXG4gKiBAcGFyYW0gW2Jhc2VVcmw9JyddIHtzdHJpbmd9IFRoZSBiYXNlIHVybCBmb3IgYWxsIHJlc291cmNlcyBsb2FkZWQgYnkgdGhpcyBsb2FkZXIuXG4gKiBAcGFyYW0gW2NvbmN1cnJlbmN5PTEwXSB7bnVtYmVyfSBUaGUgbnVtYmVyIG9mIHJlc291cmNlcyB0byBsb2FkIGNvbmN1cnJlbnRseS5cbiAqL1xuZnVuY3Rpb24gTG9hZGVyKGJhc2VVcmwsIGNvbmN1cnJlbmN5KSB7XG4gICAgRXZlbnRFbWl0dGVyLmNhbGwodGhpcyk7XG5cbiAgICBjb25jdXJyZW5jeSA9IGNvbmN1cnJlbmN5IHx8IDEwO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGJhc2UgdXJsIGZvciBhbGwgcmVzb3VyY2VzIGxvYWRlZCBieSB0aGlzIGxvYWRlci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge3N0cmluZ31cbiAgICAgKi9cbiAgICB0aGlzLmJhc2VVcmwgPSBiYXNlVXJsIHx8ICcnO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHByb2dyZXNzIHBlcmNlbnQgb2YgdGhlIGxvYWRlciBnb2luZyB0aHJvdWdoIHRoZSBxdWV1ZS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLnByb2dyZXNzID0gMDtcblxuICAgIC8qKlxuICAgICAqIExvYWRpbmcgc3RhdGUgb2YgdGhlIGxvYWRlciwgdHJ1ZSBpZiBpdCBpcyBjdXJyZW50bHkgbG9hZGluZyByZXNvdXJjZXMuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqL1xuICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHBlcmNlbnRhZ2Ugb2YgdG90YWwgcHJvZ3Jlc3MgdGhhdCBhIHNpbmdsZSByZXNvdXJjZSByZXByZXNlbnRzLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMuX3Byb2dyZXNzQ2h1bmsgPSAwO1xuXG4gICAgLyoqXG4gICAgICogVGhlIG1pZGRsZXdhcmUgdG8gcnVuIGJlZm9yZSBsb2FkaW5nIGVhY2ggcmVzb3VyY2UuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtmdW5jdGlvbltdfVxuICAgICAqL1xuICAgIHRoaXMuX2JlZm9yZU1pZGRsZXdhcmUgPSBbXTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBtaWRkbGV3YXJlIHRvIHJ1biBhZnRlciBsb2FkaW5nIGVhY2ggcmVzb3VyY2UuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtmdW5jdGlvbltdfVxuICAgICAqL1xuICAgIHRoaXMuX2FmdGVyTWlkZGxld2FyZSA9IFtdO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGBfbG9hZFJlc291cmNlYCBmdW5jdGlvbiBib3VuZCB3aXRoIHRoaXMgb2JqZWN0IGNvbnRleHQuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBtZW1iZXIge2Z1bmN0aW9ufVxuICAgICAqL1xuICAgIHRoaXMuX2JvdW5kTG9hZFJlc291cmNlID0gdGhpcy5fbG9hZFJlc291cmNlLmJpbmQodGhpcyk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYF9vbkxvYWRgIGZ1bmN0aW9uIGJvdW5kIHdpdGggdGhpcyBvYmplY3QgY29udGV4dC5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQG1lbWJlciB7ZnVuY3Rpb259XG4gICAgICovXG4gICAgdGhpcy5fYm91bmRPbkxvYWQgPSB0aGlzLl9vbkxvYWQuYmluZCh0aGlzKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSByZXNvdXJjZSBidWZmZXIgdGhhdCBmaWxscyB1bnRpbCBgbG9hZGAgaXMgY2FsbGVkIHRvIHN0YXJ0IGxvYWRpbmcgcmVzb3VyY2VzLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAbWVtYmVyIHtSZXNvdXJjZVtdfVxuICAgICAqL1xuICAgIHRoaXMuX2J1ZmZlciA9IFtdO1xuXG4gICAgLyoqXG4gICAgICogVXNlZCB0byB0cmFjayBsb2FkIGNvbXBsZXRpb24uXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLl9udW1Ub0xvYWQgPSAwO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHJlc291cmNlcyB3YWl0aW5nIHRvIGJlIGxvYWRlZC5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQG1lbWJlciB7UmVzb3VyY2VbXX1cbiAgICAgKi9cbiAgICB0aGlzLl9xdWV1ZSA9IGFzeW5jLnF1ZXVlKHRoaXMuX2JvdW5kTG9hZFJlc291cmNlLCBjb25jdXJyZW5jeSk7XG5cbiAgICAvKipcbiAgICAgKiBBbGwgdGhlIHJlc291cmNlcyBmb3IgdGhpcyBsb2FkZXIga2V5ZWQgYnkgbmFtZS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge29iamVjdDxzdHJpbmcsIFJlc291cmNlPn1cbiAgICAgKi9cbiAgICB0aGlzLnJlc291cmNlcyA9IHt9O1xuXG4gICAgLyoqXG4gICAgICogRW1pdHRlZCBvbmNlIHBlciBsb2FkZWQgb3IgZXJyb3JlZCByZXNvdXJjZS5cbiAgICAgKlxuICAgICAqIEBldmVudCBwcm9ncmVzc1xuICAgICAqIEBtZW1iZXJvZiBMb2FkZXIjXG4gICAgICovXG5cbiAgICAvKipcbiAgICAgKiBFbWl0dGVkIG9uY2UgcGVyIGVycm9yZWQgcmVzb3VyY2UuXG4gICAgICpcbiAgICAgKiBAZXZlbnQgZXJyb3JcbiAgICAgKiBAbWVtYmVyb2YgTG9hZGVyI1xuICAgICAqL1xuXG4gICAgLyoqXG4gICAgICogRW1pdHRlZCBvbmNlIHBlciBsb2FkZWQgcmVzb3VyY2UuXG4gICAgICpcbiAgICAgKiBAZXZlbnQgbG9hZFxuICAgICAqIEBtZW1iZXJvZiBMb2FkZXIjXG4gICAgICovXG5cbiAgICAvKipcbiAgICAgKiBFbWl0dGVkIHdoZW4gdGhlIGxvYWRlciBiZWdpbnMgdG8gcHJvY2VzcyB0aGUgcXVldWUuXG4gICAgICpcbiAgICAgKiBAZXZlbnQgc3RhcnRcbiAgICAgKiBAbWVtYmVyb2YgTG9hZGVyI1xuICAgICAqL1xuXG4gICAgLyoqXG4gICAgICogRW1pdHRlZCB3aGVuIHRoZSBxdWV1ZWQgcmVzb3VyY2VzIGFsbCBsb2FkLlxuICAgICAqXG4gICAgICogQGV2ZW50IGNvbXBsZXRlXG4gICAgICogQG1lbWJlcm9mIExvYWRlciNcbiAgICAgKi9cbn1cblxuTG9hZGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoRXZlbnRFbWl0dGVyLnByb3RvdHlwZSk7XG5Mb2FkZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gTG9hZGVyO1xubW9kdWxlLmV4cG9ydHMgPSBMb2FkZXI7XG5cbi8qKlxuICogQWRkcyBhIHJlc291cmNlIChvciBtdWx0aXBsZSByZXNvdXJjZXMpIHRvIHRoZSBsb2FkZXIgcXVldWUuXG4gKlxuICogVGhpcyBmdW5jdGlvbiBjYW4gdGFrZSBhIHdpZGUgdmFyaWV0eSBvZiBkaWZmZXJlbnQgcGFyYW1ldGVycy4gVGhlIG9ubHkgdGhpbmcgdGhhdCBpcyBhbHdheXNcbiAqIHJlcXVpcmVkIHRoZSB1cmwgdG8gbG9hZC4gQWxsIHRoZSBmb2xsb3dpbmcgd2lsbCB3b3JrOlxuICpcbiAqIGBgYGpzXG4gKiBsb2FkZXJcbiAqICAgICAvLyBub3JtYWwgcGFyYW0gc3ludGF4XG4gKiAgICAgLmFkZCgna2V5JywgJ2h0dHA6Ly8uLi4nLCBmdW5jdGlvbiAoKSB7fSlcbiAqICAgICAuYWRkKCdodHRwOi8vLi4uJywgZnVuY3Rpb24gKCkge30pXG4gKiAgICAgLmFkZCgnaHR0cDovLy4uLicpXG4gKlxuICogICAgIC8vIG9iamVjdCBzeW50YXhcbiAqICAgICAuYWRkKHtcbiAqICAgICAgICAgbmFtZTogJ2tleTInLFxuICogICAgICAgICB1cmw6ICdodHRwOi8vLi4uJ1xuICogICAgIH0sIGZ1bmN0aW9uICgpIHt9KVxuICogICAgIC5hZGQoe1xuICogICAgICAgICB1cmw6ICdodHRwOi8vLi4uJ1xuICogICAgIH0sIGZ1bmN0aW9uICgpIHt9KVxuICogICAgIC5hZGQoe1xuICogICAgICAgICBuYW1lOiAna2V5MycsXG4gKiAgICAgICAgIHVybDogJ2h0dHA6Ly8uLi4nXG4gKiAgICAgICAgIG9uQ29tcGxldGU6IGZ1bmN0aW9uICgpIHt9XG4gKiAgICAgfSlcbiAqICAgICAuYWRkKHtcbiAqICAgICAgICAgdXJsOiAnaHR0cHM6Ly8uLi4nLFxuICogICAgICAgICBvbkNvbXBsZXRlOiBmdW5jdGlvbiAoKSB7fSxcbiAqICAgICAgICAgY3Jvc3NPcmlnaW46IHRydWVcbiAqICAgICB9KVxuICpcbiAqICAgICAvLyB5b3UgY2FuIGFsc28gcGFzcyBhbiBhcnJheSBvZiBvYmplY3RzIG9yIHVybHMgb3IgYm90aFxuICogICAgIC5hZGQoW1xuICogICAgICAgICB7IG5hbWU6ICdrZXk0JywgdXJsOiAnaHR0cDovLy4uLicsIG9uQ29tcGxldGU6IGZ1bmN0aW9uICgpIHt9IH0sXG4gKiAgICAgICAgIHsgdXJsOiAnaHR0cDovLy4uLicsIG9uQ29tcGxldGU6IGZ1bmN0aW9uICgpIHt9IH0sXG4gKiAgICAgICAgICdodHRwOi8vLi4uJ1xuICogICAgIF0pO1xuICogYGBgXG4gKlxuICogQGFsaWFzIGVucXVldWVcbiAqIEBwYXJhbSBbbmFtZV0ge3N0cmluZ30gVGhlIG5hbWUgb2YgdGhlIHJlc291cmNlIHRvIGxvYWQsIGlmIG5vdCBwYXNzZWQgdGhlIHVybCBpcyB1c2VkLlxuICogQHBhcmFtIHVybCB7c3RyaW5nfSBUaGUgdXJsIGZvciB0aGlzIHJlc291cmNlLCByZWxhdGl2ZSB0byB0aGUgYmFzZVVybCBvZiB0aGlzIGxvYWRlci5cbiAqIEBwYXJhbSBbb3B0aW9uc10ge29iamVjdH0gVGhlIG9wdGlvbnMgZm9yIHRoZSBsb2FkLlxuICogQHBhcmFtIFtvcHRpb25zLmNyb3NzT3JpZ2luXSB7Ym9vbGVhbn0gSXMgdGhpcyByZXF1ZXN0IGNyb3NzLW9yaWdpbj8gRGVmYXVsdCBpcyB0byBkZXRlcm1pbmUgYXV0b21hdGljYWxseS5cbiAqIEBwYXJhbSBbb3B0aW9ucy5sb2FkVHlwZT1SZXNvdXJjZS5MT0FEX1RZUEUuWEhSXSB7UmVzb3VyY2UuWEhSX0xPQURfVFlQRX0gSG93IHNob3VsZCB0aGlzIHJlc291cmNlIGJlIGxvYWRlZD9cbiAqIEBwYXJhbSBbb3B0aW9ucy54aHJUeXBlPVJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkRFRkFVTFRdIHtSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRX0gSG93IHNob3VsZCB0aGUgZGF0YSBiZWluZ1xuICogICAgICBsb2FkZWQgYmUgaW50ZXJwcmV0ZWQgd2hlbiB1c2luZyBYSFI/XG4gKiBAcGFyYW0gW2NhbGxiYWNrXSB7ZnVuY3Rpb259IEZ1bmN0aW9uIHRvIGNhbGwgd2hlbiB0aGlzIHNwZWNpZmljIHJlc291cmNlIGNvbXBsZXRlcyBsb2FkaW5nLlxuICogQHJldHVybiB7TG9hZGVyfVxuICovXG5Mb2FkZXIucHJvdG90eXBlLmFkZCA9IExvYWRlci5wcm90b3R5cGUuZW5xdWV1ZSA9IGZ1bmN0aW9uIChuYW1lLCB1cmwsIG9wdGlvbnMsIGNiKSB7XG4gICAgLy8gc3BlY2lhbCBjYXNlIG9mIGFuIGFycmF5IG9mIG9iamVjdHMgb3IgdXJsc1xuICAgIGlmIChBcnJheS5pc0FycmF5KG5hbWUpKSB7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbmFtZS5sZW5ndGg7ICsraSkge1xuICAgICAgICAgICAgdGhpcy5hZGQobmFtZVtpXSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICAvLyBpZiBhbiBvYmplY3QgaXMgcGFzc2VkIGluc3RlYWQgb2YgcGFyYW1zXG4gICAgaWYgKHR5cGVvZiBuYW1lID09PSAnb2JqZWN0Jykge1xuICAgICAgICBjYiA9IHVybCB8fCBuYW1lLmNhbGxiYWNrIHx8IG5hbWUub25Db21wbGV0ZTtcbiAgICAgICAgb3B0aW9ucyA9IG5hbWU7XG4gICAgICAgIHVybCA9IG5hbWUudXJsO1xuICAgICAgICBuYW1lID0gbmFtZS5uYW1lIHx8IG5hbWUua2V5IHx8IG5hbWUudXJsO1xuICAgIH1cblxuICAgIC8vIGNhc2Ugd2hlcmUgbm8gbmFtZSBpcyBwYXNzZWQgc2hpZnQgYWxsIGFyZ3Mgb3ZlciBieSBvbmUuXG4gICAgaWYgKHR5cGVvZiB1cmwgIT09ICdzdHJpbmcnKSB7XG4gICAgICAgIGNiID0gb3B0aW9ucztcbiAgICAgICAgb3B0aW9ucyA9IHVybDtcbiAgICAgICAgdXJsID0gbmFtZTtcbiAgICB9XG5cbiAgICAvLyBub3cgdGhhdCB3ZSBzaGlmdGVkIG1ha2Ugc3VyZSB3ZSBoYXZlIGEgcHJvcGVyIHVybC5cbiAgICBpZiAodHlwZW9mIHVybCAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdObyB1cmwgcGFzc2VkIHRvIGFkZCByZXNvdXJjZSB0byBsb2FkZXIuJyk7XG4gICAgfVxuXG4gICAgLy8gb3B0aW9ucyBhcmUgb3B0aW9uYWwgc28gcGVvcGxlIG1pZ2h0IHBhc3MgYSBmdW5jdGlvbiBhbmQgbm8gb3B0aW9uc1xuICAgIGlmICh0eXBlb2Ygb3B0aW9ucyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBjYiA9IG9wdGlvbnM7XG4gICAgICAgIG9wdGlvbnMgPSBudWxsO1xuICAgIH1cblxuICAgIC8vIGNoZWNrIGlmIHJlc291cmNlIGFscmVhZHkgZXhpc3RzLlxuICAgIGlmICh0aGlzLnJlc291cmNlc1tuYW1lXSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1Jlc291cmNlIHdpdGggbmFtZSBcIicgKyBuYW1lICsgJ1wiIGFscmVhZHkgZXhpc3RzLicpO1xuICAgIH1cblxuICAgIC8vIGFkZCBiYXNlIHVybCBpZiB0aGlzIGlzbid0IGFuIGFic29sdXRlIHVybFxuICAgIHVybCA9IHRoaXMuX2hhbmRsZUJhc2VVcmwodXJsKTtcblxuICAgIC8vIGNyZWF0ZSB0aGUgc3RvcmUgdGhlIHJlc291cmNlXG4gICAgdGhpcy5yZXNvdXJjZXNbbmFtZV0gPSBuZXcgUmVzb3VyY2UobmFtZSwgdXJsLCBvcHRpb25zKTtcblxuICAgIGlmICh0eXBlb2YgY2IgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgdGhpcy5yZXNvdXJjZXNbbmFtZV0ub25jZSgnYWZ0ZXJNaWRkbGV3YXJlJywgY2IpO1xuICAgIH1cblxuICAgIHRoaXMuX251bVRvTG9hZCsrO1xuXG4gICAgLy8gaWYgYWxyZWFkeSBsb2FkaW5nIGFkZCBpdCB0byB0aGUgd29ya2VyIHF1ZXVlXG4gICAgaWYgKHRoaXMuX3F1ZXVlLnN0YXJ0ZWQpIHtcbiAgICAgICAgdGhpcy5fcXVldWUucHVzaCh0aGlzLnJlc291cmNlc1tuYW1lXSk7XG4gICAgICAgIHRoaXMuX3Byb2dyZXNzQ2h1bmsgPSAoMTAwIC0gdGhpcy5wcm9ncmVzcykgLyAodGhpcy5fcXVldWUubGVuZ3RoKCkgKyB0aGlzLl9xdWV1ZS5ydW5uaW5nKCkpO1xuICAgIH1cbiAgICAvLyBvdGhlcndpc2UgYnVmZmVyIGl0IHRvIGJlIGFkZGVkIHRvIHRoZSBxdWV1ZSBsYXRlclxuICAgIGVsc2Uge1xuICAgICAgICB0aGlzLl9idWZmZXIucHVzaCh0aGlzLnJlc291cmNlc1tuYW1lXSk7XG4gICAgICAgIHRoaXMuX3Byb2dyZXNzQ2h1bmsgPSAxMDAgLyB0aGlzLl9idWZmZXIubGVuZ3RoO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzO1xufTtcblxuTG9hZGVyLnByb3RvdHlwZS5faGFuZGxlQmFzZVVybCA9IGZ1bmN0aW9uICh1cmwpIHtcbiAgICB2YXIgcGFyc2VkVXJsID0gdXJsUGFyc2VyLnBhcnNlKHVybCk7XG5cbiAgICAvLyBhYnNvbHV0ZSB1cmwsIGp1c3QgdXNlIGl0IGFzIGlzLlxuICAgIGlmIChwYXJzZWRVcmwucHJvdG9jb2wgfHwgcGFyc2VkVXJsLnBhdGhuYW1lLmluZGV4T2YoJy8vJykgPT09IDApIHtcbiAgICAgICAgcmV0dXJuIHVybDtcbiAgICB9XG5cbiAgICAvLyBpZiBiYXNlVXJsIGRvZXNuJ3QgZW5kIGluIHNsYXNoIGFuZCB1cmwgZG9lc24ndCBzdGFydCB3aXRoIHNsYXNoLCB0aGVuIGFkZCBhIHNsYXNoIGluYmV0d2VlblxuICAgIGlmIChcbiAgICAgICAgdGhpcy5iYXNlVXJsLmxlbmd0aCAmJlxuICAgICAgICB0aGlzLmJhc2VVcmwubGFzdEluZGV4T2YoJy8nKSAhPT0gdGhpcy5iYXNlVXJsLmxlbmd0aCAtIDEgJiZcbiAgICAgICAgdXJsLmNoYXJBdCgwKSAhPT0gJy8nXG4gICAgKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmJhc2VVcmwgKyAnLycgKyB1cmw7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICByZXR1cm4gdGhpcy5iYXNlVXJsICsgdXJsO1xuICAgIH1cbn07XG5cblxuLyoqXG4gKiBTZXRzIHVwIGEgbWlkZGxld2FyZSBmdW5jdGlvbiB0aGF0IHdpbGwgcnVuICpiZWZvcmUqIHRoZVxuICogcmVzb3VyY2UgaXMgbG9hZGVkLlxuICpcbiAqIEBhbGlhcyBwcmVcbiAqIEBwYXJhbSBtaWRkbGV3YXJlIHtmdW5jdGlvbn0gVGhlIG1pZGRsZXdhcmUgZnVuY3Rpb24gdG8gcmVnaXN0ZXIuXG4gKiBAcmV0dXJuIHtMb2FkZXJ9XG4gKi9cbkxvYWRlci5wcm90b3R5cGUuYmVmb3JlID0gTG9hZGVyLnByb3RvdHlwZS5wcmUgPSBmdW5jdGlvbiAoZm4pIHtcbiAgICB0aGlzLl9iZWZvcmVNaWRkbGV3YXJlLnB1c2goZm4pO1xuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIFNldHMgdXAgYSBtaWRkbGV3YXJlIGZ1bmN0aW9uIHRoYXQgd2lsbCBydW4gKmFmdGVyKiB0aGVcbiAqIHJlc291cmNlIGlzIGxvYWRlZC5cbiAqXG4gKiBAYWxpYXMgdXNlXG4gKiBAcGFyYW0gbWlkZGxld2FyZSB7ZnVuY3Rpb259IFRoZSBtaWRkbGV3YXJlIGZ1bmN0aW9uIHRvIHJlZ2lzdGVyLlxuICogQHJldHVybiB7TG9hZGVyfVxuICovXG5Mb2FkZXIucHJvdG90eXBlLmFmdGVyID0gTG9hZGVyLnByb3RvdHlwZS51c2UgPSBmdW5jdGlvbiAoZm4pIHtcbiAgICB0aGlzLl9hZnRlck1pZGRsZXdhcmUucHVzaChmbik7XG5cbiAgICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogUmVzZXRzIHRoZSBxdWV1ZSBvZiB0aGUgbG9hZGVyIHRvIHByZXBhcmUgZm9yIGEgbmV3IGxvYWQuXG4gKlxuICogQHJldHVybiB7TG9hZGVyfVxuICovXG5Mb2FkZXIucHJvdG90eXBlLnJlc2V0ID0gZnVuY3Rpb24gKCkge1xuICAgIC8vIHRoaXMuYmFzZVVybCA9IGJhc2VVcmwgfHwgJyc7XG5cbiAgICB0aGlzLnByb2dyZXNzID0gMDtcblxuICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xuXG4gICAgdGhpcy5fcHJvZ3Jlc3NDaHVuayA9IDA7XG5cbiAgICAvLyB0aGlzLl9iZWZvcmVNaWRkbGV3YXJlLmxlbmd0aCA9IDA7XG4gICAgLy8gdGhpcy5fYWZ0ZXJNaWRkbGV3YXJlLmxlbmd0aCA9IDA7XG5cbiAgICB0aGlzLl9idWZmZXIubGVuZ3RoID0gMDtcblxuICAgIHRoaXMuX251bVRvTG9hZCA9IDA7XG5cbiAgICB0aGlzLl9xdWV1ZS5raWxsKCk7XG4gICAgdGhpcy5fcXVldWUuc3RhcnRlZCA9IGZhbHNlO1xuXG4gICAgdGhpcy5yZXNvdXJjZXMgPSB7fTtcbn07XG5cbi8qKlxuICogU3RhcnRzIGxvYWRpbmcgdGhlIHF1ZXVlZCByZXNvdXJjZXMuXG4gKlxuICogQGZpcmVzIHN0YXJ0XG4gKiBAcGFyYW0gW2NhbGxiYWNrXSB7ZnVuY3Rpb259IE9wdGlvbmFsIGNhbGxiYWNrIHRoYXQgd2lsbCBiZSBib3VuZCB0byB0aGUgYGNvbXBsZXRlYCBldmVudC5cbiAqIEByZXR1cm4ge0xvYWRlcn1cbiAqL1xuTG9hZGVyLnByb3RvdHlwZS5sb2FkID0gZnVuY3Rpb24gKGNiKSB7XG4gICAgLy8gcmVnaXN0ZXIgY29tcGxldGUgY2FsbGJhY2sgaWYgdGhleSBwYXNzIG9uZVxuICAgIGlmICh0eXBlb2YgY2IgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgdGhpcy5vbmNlKCdjb21wbGV0ZScsIGNiKTtcbiAgICB9XG5cbiAgICAvLyBpZiB0aGUgcXVldWUgaGFzIGFscmVhZHkgc3RhcnRlZCB3ZSBhcmUgZG9uZSBoZXJlXG4gICAgaWYgKHRoaXMuX3F1ZXVlLnN0YXJ0ZWQpIHtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLy8gbm90aWZ5IG9mIHN0YXJ0XG4gICAgdGhpcy5lbWl0KCdzdGFydCcsIHRoaXMpO1xuXG4gICAgLy8gc3RhcnQgdGhlIGludGVybmFsIHF1ZXVlXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLl9idWZmZXIubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgdGhpcy5fcXVldWUucHVzaCh0aGlzLl9idWZmZXJbaV0pO1xuICAgIH1cblxuICAgIC8vIGVtcHR5IHRoZSBidWZmZXJcbiAgICB0aGlzLl9idWZmZXIubGVuZ3RoID0gMDtcblxuICAgIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBMb2FkcyBhIHNpbmdsZSByZXNvdXJjZS5cbiAqXG4gKiBAZmlyZXMgcHJvZ3Jlc3NcbiAqIEBwcml2YXRlXG4gKi9cbkxvYWRlci5wcm90b3R5cGUuX2xvYWRSZXNvdXJjZSA9IGZ1bmN0aW9uIChyZXNvdXJjZSwgZGVxdWV1ZSkge1xuICAgIHZhciBzZWxmID0gdGhpcztcblxuICAgIHJlc291cmNlLl9kZXF1ZXVlID0gZGVxdWV1ZTtcblxuICAgIHRoaXMuX3J1bk1pZGRsZXdhcmUocmVzb3VyY2UsIHRoaXMuX2JlZm9yZU1pZGRsZXdhcmUsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgLy8gcmVzb3VyY2Uub24oJ3Byb2dyZXNzJywgc2VsZi5lbWl0LmJpbmQoc2VsZiwgJ3Byb2dyZXNzJykpO1xuXG4gICAgICAgIHJlc291cmNlLmxvYWQoc2VsZi5fYm91bmRPbkxvYWQpO1xuICAgIH0pO1xufTtcblxuLyoqXG4gKiBDYWxsZWQgb25jZSBlYWNoIHJlc291cmNlIGhhcyBsb2FkZWQuXG4gKlxuICogQGZpcmVzIGNvbXBsZXRlXG4gKiBAcHJpdmF0ZVxuICovXG5Mb2FkZXIucHJvdG90eXBlLl9vbkNvbXBsZXRlID0gZnVuY3Rpb24gKCkge1xuICAgIHRoaXMuZW1pdCgnY29tcGxldGUnLCB0aGlzLCB0aGlzLnJlc291cmNlcyk7XG59O1xuXG4vKipcbiAqIENhbGxlZCBlYWNoIHRpbWUgYSByZXNvdXJjZXMgaXMgbG9hZGVkLlxuICpcbiAqIEBmaXJlcyBwcm9ncmVzc1xuICogQGZpcmVzIGVycm9yXG4gKiBAZmlyZXMgbG9hZFxuICogQHByaXZhdGVcbiAqL1xuTG9hZGVyLnByb3RvdHlwZS5fb25Mb2FkID0gZnVuY3Rpb24gKHJlc291cmNlKSB7XG4gICAgdGhpcy5wcm9ncmVzcyArPSB0aGlzLl9wcm9ncmVzc0NodW5rO1xuXG4gICAgdGhpcy5lbWl0KCdwcm9ncmVzcycsIHRoaXMsIHJlc291cmNlKTtcblxuICAgIC8vIHJ1biBtaWRkbGV3YXJlLCB0aGlzICptdXN0KiBoYXBwZW4gYmVmb3JlIGRlcXVldWUgc28gc3ViLWFzc2V0cyBnZXQgYWRkZWQgcHJvcGVybHlcbiAgICB0aGlzLl9ydW5NaWRkbGV3YXJlKHJlc291cmNlLCB0aGlzLl9hZnRlck1pZGRsZXdhcmUsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmVzb3VyY2UuZW1pdCgnYWZ0ZXJNaWRkbGV3YXJlJywgcmVzb3VyY2UpO1xuXG4gICAgICAgIHRoaXMuX251bVRvTG9hZC0tO1xuXG4gICAgICAgIC8vIGRvIGNvbXBsZXRpb24gY2hlY2tcbiAgICAgICAgaWYgKHRoaXMuX251bVRvTG9hZCA9PT0gMCkge1xuICAgICAgICAgICAgdGhpcy5wcm9ncmVzcyA9IDEwMDtcbiAgICAgICAgICAgIHRoaXMuX29uQ29tcGxldGUoKTtcbiAgICAgICAgfVxuICAgICAgICBcbiAgICAgICAgaWYgKHJlc291cmNlLmVycm9yKSB7XG4gICAgICAgICAgICB0aGlzLmVtaXQoJ2Vycm9yJywgcmVzb3VyY2UuZXJyb3IsIHRoaXMsIHJlc291cmNlKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuZW1pdCgnbG9hZCcsIHRoaXMsIHJlc291cmNlKTtcbiAgICAgICAgfVxuICAgIH0pO1xuICAgIFxuXG5cbiAgICAvLyByZW1vdmUgdGhpcyByZXNvdXJjZSBmcm9tIHRoZSBhc3luYyBxdWV1ZVxuICAgIHJlc291cmNlLl9kZXF1ZXVlKCk7XG59O1xuXG4vKipcbiAqIFJ1biBtaWRkbGV3YXJlIGZ1bmN0aW9ucyBvbiBhIHJlc291cmNlLlxuICpcbiAqIEBwcml2YXRlXG4gKi9cbkxvYWRlci5wcm90b3R5cGUuX3J1bk1pZGRsZXdhcmUgPSBmdW5jdGlvbiAocmVzb3VyY2UsIGZucywgY2IpIHtcbiAgICB2YXIgc2VsZiA9IHRoaXM7XG5cbiAgICBhc3luYy5lYWNoU2VyaWVzKGZucywgZnVuY3Rpb24gKGZuLCBuZXh0KSB7XG4gICAgICAgIGZuLmNhbGwoc2VsZiwgcmVzb3VyY2UsIG5leHQpO1xuICAgIH0sIGNiLmJpbmQodGhpcywgcmVzb3VyY2UpKTtcbn07XG5cbkxvYWRlci5MT0FEX1RZUEUgPSBSZXNvdXJjZS5MT0FEX1RZUEU7XG5Mb2FkZXIuWEhSX1JFQURZX1NUQVRFID0gUmVzb3VyY2UuWEhSX1JFQURZX1NUQVRFO1xuTG9hZGVyLlhIUl9SRVNQT05TRV9UWVBFID0gUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEU7XG4iLCJ2YXIgRXZlbnRFbWl0dGVyID0gcmVxdWlyZSgnZXZlbnRlbWl0dGVyMycpLFxuICAgIF91cmwgPSByZXF1aXJlKCd1cmwnKSxcbiAgICAvLyB0ZXN0cyBpcyBDT1JTIGlzIHN1cHBvcnRlZCBpbiBYSFIsIGlmIG5vdCB3ZSBuZWVkIHRvIHVzZSBYRFJcbiAgICB1c2VYZHIgPSAhISh3aW5kb3cuWERvbWFpblJlcXVlc3QgJiYgISgnd2l0aENyZWRlbnRpYWxzJyBpbiAobmV3IFhNTEh0dHBSZXF1ZXN0KCkpKSksXG4gICAgdGVtcEFuY2hvciA9IG51bGw7XG5cbi8qKlxuICogTWFuYWdlcyB0aGUgc3RhdGUgYW5kIGxvYWRpbmcgb2YgYSBzaW5nbGUgcmVzb3VyY2UgcmVwcmVzZW50ZWQgYnlcbiAqIGEgc2luZ2xlIFVSTC5cbiAqXG4gKiBAY2xhc3NcbiAqIEBwYXJhbSBuYW1lIHtzdHJpbmd9IFRoZSBuYW1lIG9mIHRoZSByZXNvdXJjZSB0byBsb2FkLlxuICogQHBhcmFtIHVybCB7c3RyaW5nfHN0cmluZ1tdfSBUaGUgdXJsIGZvciB0aGlzIHJlc291cmNlLCBmb3IgYXVkaW8vdmlkZW8gbG9hZHMgeW91IGNhbiBwYXNzIGFuIGFycmF5IG9mIHNvdXJjZXMuXG4gKiBAcGFyYW0gW29wdGlvbnNdIHtvYmplY3R9IFRoZSBvcHRpb25zIGZvciB0aGUgbG9hZC5cbiAqIEBwYXJhbSBbb3B0aW9ucy5jcm9zc09yaWdpbl0ge3N0cmluZ3xib29sZWFufSBJcyB0aGlzIHJlcXVlc3QgY3Jvc3Mtb3JpZ2luPyBEZWZhdWx0IGlzIHRvIGRldGVybWluZSBhdXRvbWF0aWNhbGx5LlxuICogQHBhcmFtIFtvcHRpb25zLmxvYWRUeXBlPVJlc291cmNlLkxPQURfVFlQRS5YSFJdIHtSZXNvdXJjZS5MT0FEX1RZUEV9IEhvdyBzaG91bGQgdGhpcyByZXNvdXJjZSBiZSBsb2FkZWQ/XG4gKiBAcGFyYW0gW29wdGlvbnMueGhyVHlwZT1SZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRS5ERUZBVUxUXSB7UmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEV9IEhvdyBzaG91bGQgdGhlIGRhdGEgYmVpbmdcbiAqICAgICAgbG9hZGVkIGJlIGludGVycHJldGVkIHdoZW4gdXNpbmcgWEhSP1xuICogQHBhcmFtIFtvcHRpb25zLm1ldGFkYXRhXSB7b2JqZWN0fSBFeHRyYSBpbmZvIGZvciBtaWRkbGV3YXJlLlxuICovXG5mdW5jdGlvbiBSZXNvdXJjZShuYW1lLCB1cmwsIG9wdGlvbnMpIHtcbiAgICBFdmVudEVtaXR0ZXIuY2FsbCh0aGlzKTtcblxuICAgIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuXG4gICAgaWYgKHR5cGVvZiBuYW1lICE9PSAnc3RyaW5nJyB8fCB0eXBlb2YgdXJsICE9PSAnc3RyaW5nJykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0JvdGggbmFtZSBhbmQgdXJsIGFyZSByZXF1aXJlZCBmb3IgY29uc3RydWN0aW5nIGEgcmVzb3VyY2UuJyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhlIG5hbWUgb2YgdGhpcyByZXNvdXJjZS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge3N0cmluZ31cbiAgICAgKiBAcmVhZG9ubHlcbiAgICAgKi9cbiAgICB0aGlzLm5hbWUgPSBuYW1lO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHVybCB1c2VkIHRvIGxvYWQgdGhpcyByZXNvdXJjZS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge3N0cmluZ31cbiAgICAgKiBAcmVhZG9ubHlcbiAgICAgKi9cbiAgICB0aGlzLnVybCA9IHVybDtcblxuICAgIC8qKlxuICAgICAqIFN0b3JlcyB3aGV0aGVyIG9yIG5vdCB0aGlzIHVybCBpcyBhIGRhdGEgdXJsLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKiBAcmVhZG9ubHlcbiAgICAgKi9cbiAgICB0aGlzLmlzRGF0YVVybCA9IHRoaXMudXJsLmluZGV4T2YoJ2RhdGE6JykgPT09IDA7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgZGF0YSB0aGF0IHdhcyBsb2FkZWQgYnkgdGhlIHJlc291cmNlLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7YW55fVxuICAgICAqL1xuICAgIHRoaXMuZGF0YSA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBJcyB0aGlzIHJlcXVlc3QgY3Jvc3Mtb3JpZ2luPyBJZiB1bnNldCwgZGV0ZXJtaW5lZCBhdXRvbWF0aWNhbGx5LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7c3RyaW5nfVxuICAgICAqL1xuICAgIHRoaXMuY3Jvc3NPcmlnaW4gPSBvcHRpb25zLmNyb3NzT3JpZ2luID09PSB0cnVlID8gJ2Fub255bW91cycgOiBvcHRpb25zLmNyb3NzT3JpZ2luO1xuXG4gICAgLyoqXG4gICAgICogVGhlIG1ldGhvZCBvZiBsb2FkaW5nIHRvIHVzZSBmb3IgdGhpcyByZXNvdXJjZS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1Jlc291cmNlLkxPQURfVFlQRX1cbiAgICAgKi9cbiAgICB0aGlzLmxvYWRUeXBlID0gb3B0aW9ucy5sb2FkVHlwZSB8fCB0aGlzLl9kZXRlcm1pbmVMb2FkVHlwZSgpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHR5cGUgdXNlZCB0byBsb2FkIHRoZSByZXNvdXJjZSB2aWEgWEhSLiBJZiB1bnNldCwgZGV0ZXJtaW5lZCBhdXRvbWF0aWNhbGx5LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7c3RyaW5nfVxuICAgICAqL1xuICAgIHRoaXMueGhyVHlwZSA9IG9wdGlvbnMueGhyVHlwZTtcblxuICAgIC8qKlxuICAgICAqIEV4dHJhIGluZm8gZm9yIG1pZGRsZXdhcmVcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge29iamVjdH1cbiAgICAgKi9cbiAgICB0aGlzLm1ldGFkYXRhID0gb3B0aW9ucy5tZXRhZGF0YSB8fCB7fTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBlcnJvciB0aGF0IG9jY3VycmVkIHdoaWxlIGxvYWRpbmcgKGlmIGFueSkuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtFcnJvcn1cbiAgICAgKiBAcmVhZG9ubHlcbiAgICAgKi9cbiAgICB0aGlzLmVycm9yID0gbnVsbDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBYSFIgb2JqZWN0IHRoYXQgd2FzIHVzZWQgdG8gbG9hZCB0aGlzIHJlc291cmNlLiBUaGlzIGlzIG9ubHkgc2V0XG4gICAgICogd2hlbiBgbG9hZFR5cGVgIGlzIGBSZXNvdXJjZS5MT0FEX1RZUEUuWEhSYC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1hNTEh0dHBSZXF1ZXN0fVxuICAgICAqL1xuICAgIHRoaXMueGhyID0gbnVsbDtcblxuICAgIC8qKlxuICAgICAqIERlc2NyaWJlcyBpZiB0aGlzIHJlc291cmNlIHdhcyBsb2FkZWQgYXMganNvbi4gT25seSB2YWxpZCBhZnRlciB0aGUgcmVzb3VyY2VcbiAgICAgKiBoYXMgY29tcGxldGVseSBsb2FkZWQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqL1xuICAgIHRoaXMuaXNKc29uID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBEZXNjcmliZXMgaWYgdGhpcyByZXNvdXJjZSB3YXMgbG9hZGVkIGFzIHhtbC4gT25seSB2YWxpZCBhZnRlciB0aGUgcmVzb3VyY2VcbiAgICAgKiBoYXMgY29tcGxldGVseSBsb2FkZWQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqL1xuICAgIHRoaXMuaXNYbWwgPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIERlc2NyaWJlcyBpZiB0aGlzIHJlc291cmNlIHdhcyBsb2FkZWQgYXMgYW4gaW1hZ2UgdGFnLiBPbmx5IHZhbGlkIGFmdGVyIHRoZSByZXNvdXJjZVxuICAgICAqIGhhcyBjb21wbGV0ZWx5IGxvYWRlZC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICovXG4gICAgdGhpcy5pc0ltYWdlID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBEZXNjcmliZXMgaWYgdGhpcyByZXNvdXJjZSB3YXMgbG9hZGVkIGFzIGFuIGF1ZGlvIHRhZy4gT25seSB2YWxpZCBhZnRlciB0aGUgcmVzb3VyY2VcbiAgICAgKiBoYXMgY29tcGxldGVseSBsb2FkZWQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqL1xuICAgIHRoaXMuaXNBdWRpbyA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogRGVzY3JpYmVzIGlmIHRoaXMgcmVzb3VyY2Ugd2FzIGxvYWRlZCBhcyBhIHZpZGVvIHRhZy4gT25seSB2YWxpZCBhZnRlciB0aGUgcmVzb3VyY2VcbiAgICAgKiBoYXMgY29tcGxldGVseSBsb2FkZWQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqL1xuICAgIHRoaXMuaXNWaWRlbyA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGBkZXF1ZXVlYCBtZXRob2QgdGhhdCB3aWxsIGJlIHVzZWQgYSBzdG9yYWdlIHBsYWNlIGZvciB0aGUgYXN5bmMgcXVldWUgZGVxdWV1ZSBtZXRob2RcbiAgICAgKiB1c2VkIHByaXZhdGVseSBieSB0aGUgbG9hZGVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7ZnVuY3Rpb259XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9kZXF1ZXVlID0gbnVsbDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBgY29tcGxldGVgIGZ1bmN0aW9uIGJvdW5kIHRvIHRoaXMgcmVzb3VyY2UncyBjb250ZXh0LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7ZnVuY3Rpb259XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9ib3VuZENvbXBsZXRlID0gdGhpcy5jb21wbGV0ZS5iaW5kKHRoaXMpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGBfb25FcnJvcmAgZnVuY3Rpb24gYm91bmQgdG8gdGhpcyByZXNvdXJjZSdzIGNvbnRleHQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtmdW5jdGlvbn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX2JvdW5kT25FcnJvciA9IHRoaXMuX29uRXJyb3IuYmluZCh0aGlzKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBgX29uUHJvZ3Jlc3NgIGZ1bmN0aW9uIGJvdW5kIHRvIHRoaXMgcmVzb3VyY2UncyBjb250ZXh0LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7ZnVuY3Rpb259XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9ib3VuZE9uUHJvZ3Jlc3MgPSB0aGlzLl9vblByb2dyZXNzLmJpbmQodGhpcyk7XG5cbiAgICAvLyB4aHIgY2FsbGJhY2tzXG4gICAgdGhpcy5fYm91bmRYaHJPbkVycm9yID0gdGhpcy5feGhyT25FcnJvci5iaW5kKHRoaXMpO1xuICAgIHRoaXMuX2JvdW5kWGhyT25BYm9ydCA9IHRoaXMuX3hock9uQWJvcnQuYmluZCh0aGlzKTtcbiAgICB0aGlzLl9ib3VuZFhock9uTG9hZCA9IHRoaXMuX3hock9uTG9hZC5iaW5kKHRoaXMpO1xuICAgIHRoaXMuX2JvdW5kWGRyT25UaW1lb3V0ID0gdGhpcy5feGRyT25UaW1lb3V0LmJpbmQodGhpcyk7XG5cbiAgICAvKipcbiAgICAgKiBFbWl0dGVkIHdoZW4gdGhlIHJlc291cmNlIGJlaW5ncyB0byBsb2FkLlxuICAgICAqXG4gICAgICogQGV2ZW50IHN0YXJ0XG4gICAgICogQG1lbWJlcm9mIFJlc291cmNlI1xuICAgICAqL1xuXG4gICAgLyoqXG4gICAgICogRW1pdHRlZCBlYWNoIHRpbWUgcHJvZ3Jlc3Mgb2YgdGhpcyByZXNvdXJjZSBsb2FkIHVwZGF0ZXMuXG4gICAgICogTm90IGFsbCByZXNvdXJjZXMgdHlwZXMgYW5kIGxvYWRlciBzeXN0ZW1zIGNhbiBzdXBwb3J0IHRoaXMgZXZlbnRcbiAgICAgKiBzbyBzb21ldGltZXMgaXQgbWF5IG5vdCBiZSBhdmFpbGFibGUuIElmIHRoZSByZXNvdXJjZVxuICAgICAqIGlzIGJlaW5nIGxvYWRlZCBvbiBhIG1vZGVybiBicm93c2VyLCB1c2luZyBYSFIsIGFuZCB0aGUgcmVtb3RlIHNlcnZlclxuICAgICAqIHByb3Blcmx5IHNldHMgQ29udGVudC1MZW5ndGggaGVhZGVycywgdGhlbiB0aGlzIHdpbGwgYmUgYXZhaWxhYmxlLlxuICAgICAqXG4gICAgICogQGV2ZW50IHByb2dyZXNzXG4gICAgICogQG1lbWJlcm9mIFJlc291cmNlI1xuICAgICAqL1xuXG4gICAgLyoqXG4gICAgICogRW1pdHRlZCBvbmNlIHRoaXMgcmVzb3VyY2UgaGFzIGxvYWRlZCwgaWYgdGhlcmUgd2FzIGFuIGVycm9yIGl0IHdpbGxcbiAgICAgKiBiZSBpbiB0aGUgYGVycm9yYCBwcm9wZXJ0eS5cbiAgICAgKlxuICAgICAqIEBldmVudCBjb21wbGV0ZVxuICAgICAqIEBtZW1iZXJvZiBSZXNvdXJjZSNcbiAgICAgKi9cbn1cblxuUmVzb3VyY2UucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShFdmVudEVtaXR0ZXIucHJvdG90eXBlKTtcblJlc291cmNlLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFJlc291cmNlO1xubW9kdWxlLmV4cG9ydHMgPSBSZXNvdXJjZTtcblxuLyoqXG4gKiBNYXJrcyB0aGUgcmVzb3VyY2UgYXMgY29tcGxldGUuXG4gKlxuICogQGZpcmVzIGNvbXBsZXRlXG4gKi9cblJlc291cmNlLnByb3RvdHlwZS5jb21wbGV0ZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAvLyBUT0RPOiBDbGVhbiB0aGlzIHVwIGluIGEgd3JhcHBlciBvciBzb21ldGhpbmcuLi5ncm9zcy4uLi5cbiAgICBpZiAodGhpcy5kYXRhICYmIHRoaXMuZGF0YS5yZW1vdmVFdmVudExpc3RlbmVyKSB7XG4gICAgICAgIHRoaXMuZGF0YS5yZW1vdmVFdmVudExpc3RlbmVyKCdlcnJvcicsIHRoaXMuX2JvdW5kT25FcnJvcik7XG4gICAgICAgIHRoaXMuZGF0YS5yZW1vdmVFdmVudExpc3RlbmVyKCdsb2FkJywgdGhpcy5fYm91bmRDb21wbGV0ZSk7XG4gICAgICAgIHRoaXMuZGF0YS5yZW1vdmVFdmVudExpc3RlbmVyKCdwcm9ncmVzcycsIHRoaXMuX2JvdW5kT25Qcm9ncmVzcyk7XG4gICAgICAgIHRoaXMuZGF0YS5yZW1vdmVFdmVudExpc3RlbmVyKCdjYW5wbGF5dGhyb3VnaCcsIHRoaXMuX2JvdW5kQ29tcGxldGUpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnhocikge1xuICAgICAgICBpZiAodGhpcy54aHIucmVtb3ZlRXZlbnRMaXN0ZW5lcikge1xuICAgICAgICAgICAgdGhpcy54aHIucmVtb3ZlRXZlbnRMaXN0ZW5lcignZXJyb3InLCB0aGlzLl9ib3VuZFhock9uRXJyb3IpO1xuICAgICAgICAgICAgdGhpcy54aHIucmVtb3ZlRXZlbnRMaXN0ZW5lcignYWJvcnQnLCB0aGlzLl9ib3VuZFhock9uQWJvcnQpO1xuICAgICAgICAgICAgdGhpcy54aHIucmVtb3ZlRXZlbnRMaXN0ZW5lcigncHJvZ3Jlc3MnLCB0aGlzLl9ib3VuZE9uUHJvZ3Jlc3MpO1xuICAgICAgICAgICAgdGhpcy54aHIucmVtb3ZlRXZlbnRMaXN0ZW5lcignbG9hZCcsIHRoaXMuX2JvdW5kWGhyT25Mb2FkKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMueGhyLm9uZXJyb3IgPSBudWxsO1xuICAgICAgICAgICAgdGhpcy54aHIub250aW1lb3V0ID0gbnVsbDtcbiAgICAgICAgICAgIHRoaXMueGhyLm9ucHJvZ3Jlc3MgPSBudWxsO1xuICAgICAgICAgICAgdGhpcy54aHIub25sb2FkID0gbnVsbDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMuZW1pdCgnY29tcGxldGUnLCB0aGlzKTtcbn07XG5cbi8qKlxuICogS2lja3Mgb2ZmIGxvYWRpbmcgb2YgdGhpcyByZXNvdXJjZS5cbiAqXG4gKiBAZmlyZXMgc3RhcnRcbiAqIEBwYXJhbSBbY2FsbGJhY2tdIHtmdW5jdGlvbn0gT3B0aW9uYWwgY2FsbGJhY2sgdG8gY2FsbCBvbmNlIHRoZSByZXNvdXJjZSBpcyBsb2FkZWQuXG4gKi9cblJlc291cmNlLnByb3RvdHlwZS5sb2FkID0gZnVuY3Rpb24gKGNiKSB7XG4gICAgdGhpcy5lbWl0KCdzdGFydCcsIHRoaXMpO1xuXG4gICAgLy8gaWYgYSBjYWxsYmFjayBpcyBzZXQsIGxpc3RlbiBmb3IgY29tcGxldGUgZXZlbnRcbiAgICBpZiAoY2IpIHtcbiAgICAgICAgdGhpcy5vbmNlKCdjb21wbGV0ZScsIGNiKTtcbiAgICB9XG5cbiAgICAvLyBpZiB1bnNldCwgZGV0ZXJtaW5lIHRoZSB2YWx1ZVxuICAgIGlmICh0aGlzLmNyb3NzT3JpZ2luID09PSBmYWxzZSB8fCB0eXBlb2YgdGhpcy5jcm9zc09yaWdpbiAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgdGhpcy5jcm9zc09yaWdpbiA9IHRoaXMuX2RldGVybWluZUNyb3NzT3JpZ2luKHRoaXMudXJsKTtcbiAgICB9XG5cbiAgICBzd2l0Y2godGhpcy5sb2FkVHlwZSkge1xuICAgICAgICBjYXNlIFJlc291cmNlLkxPQURfVFlQRS5JTUFHRTpcbiAgICAgICAgICAgIHRoaXMuX2xvYWRJbWFnZSgpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSBSZXNvdXJjZS5MT0FEX1RZUEUuQVVESU86XG4gICAgICAgICAgICB0aGlzLl9sb2FkRWxlbWVudCgnYXVkaW8nKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgUmVzb3VyY2UuTE9BRF9UWVBFLlZJREVPOlxuICAgICAgICAgICAgdGhpcy5fbG9hZEVsZW1lbnQoJ3ZpZGVvJyk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIFJlc291cmNlLkxPQURfVFlQRS5YSFI6XG4gICAgICAgICAgICAvKiBmYWxscyB0aHJvdWdoICovXG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICBpZiAodXNlWGRyICYmIHRoaXMuY3Jvc3NPcmlnaW4pIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9sb2FkWGRyKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9sb2FkWGhyKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBicmVhaztcbiAgICB9XG59O1xuXG4vKipcbiAqIExvYWRzIHRoaXMgcmVzb3VyY2VzIHVzaW5nIGFuIEltYWdlIG9iamVjdC5cbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5SZXNvdXJjZS5wcm90b3R5cGUuX2xvYWRJbWFnZSA9IGZ1bmN0aW9uICgpIHtcbiAgICB0aGlzLmRhdGEgPSBuZXcgSW1hZ2UoKTtcblxuICAgIGlmICh0aGlzLmNyb3NzT3JpZ2luKSB7XG4gICAgICAgIHRoaXMuZGF0YS5jcm9zc09yaWdpbiA9IHRoaXMuY3Jvc3NPcmlnaW47XG4gICAgfVxuXG4gICAgdGhpcy5kYXRhLnNyYyA9IHRoaXMudXJsO1xuXG4gICAgdGhpcy5pc0ltYWdlID0gdHJ1ZTtcblxuICAgIHRoaXMuZGF0YS5hZGRFdmVudExpc3RlbmVyKCdlcnJvcicsIHRoaXMuX2JvdW5kT25FcnJvciwgZmFsc2UpO1xuICAgIHRoaXMuZGF0YS5hZGRFdmVudExpc3RlbmVyKCdsb2FkJywgdGhpcy5fYm91bmRDb21wbGV0ZSwgZmFsc2UpO1xuICAgIHRoaXMuZGF0YS5hZGRFdmVudExpc3RlbmVyKCdwcm9ncmVzcycsIHRoaXMuX2JvdW5kT25Qcm9ncmVzcywgZmFsc2UpO1xufTtcblxuLyoqXG4gKiBMb2FkcyB0aGlzIHJlc291cmNlcyB1c2luZyBhbiBIVE1MQXVkaW9FbGVtZW50IG9yIEhUTUxWaWRlb0VsZW1lbnQuXG4gKlxuICogQHByaXZhdGVcbiAqL1xuUmVzb3VyY2UucHJvdG90eXBlLl9sb2FkRWxlbWVudCA9IGZ1bmN0aW9uICh0eXBlKSB7XG4gICAgaWYgKHR5cGUgPT09ICdhdWRpbycgJiYgdHlwZW9mIEF1ZGlvICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICB0aGlzLmRhdGEgPSBuZXcgQXVkaW8oKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHRoaXMuZGF0YSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQodHlwZSk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuZGF0YSA9PT0gbnVsbCkge1xuICAgICAgICB0aGlzLmVycm9yID0gbmV3IEVycm9yKCdVbnN1cHBvcnRlZCBlbGVtZW50ICcgKyB0eXBlKTtcbiAgICAgICAgdGhpcy5jb21wbGV0ZSgpO1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gc3VwcG9ydCBmb3IgQ29jb29uSlMgQ2FudmFzKyBydW50aW1lLCBsYWNrcyBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzb3VyY2UnKVxuICAgIGlmIChuYXZpZ2F0b3IuaXNDb2Nvb25KUykge1xuICAgICAgICB0aGlzLmRhdGEuc3JjID0gQXJyYXkuaXNBcnJheSh0aGlzLnVybCkgPyB0aGlzLnVybFswXSA6IHRoaXMudXJsO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkodGhpcy51cmwpKSB7XG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMudXJsLmxlbmd0aDsgKytpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5kYXRhLmFwcGVuZENoaWxkKHRoaXMuX2NyZWF0ZVNvdXJjZSh0eXBlLCB0aGlzLnVybFtpXSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5kYXRhLmFwcGVuZENoaWxkKHRoaXMuX2NyZWF0ZVNvdXJjZSh0eXBlLCB0aGlzLnVybCkpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgdGhpc1snaXMnICsgdHlwZVswXS50b1VwcGVyQ2FzZSgpICsgdHlwZS5zdWJzdHJpbmcoMSldID0gdHJ1ZTtcblxuICAgIHRoaXMuZGF0YS5hZGRFdmVudExpc3RlbmVyKCdlcnJvcicsIHRoaXMuX2JvdW5kT25FcnJvciwgZmFsc2UpO1xuICAgIHRoaXMuZGF0YS5hZGRFdmVudExpc3RlbmVyKCdsb2FkJywgdGhpcy5fYm91bmRDb21wbGV0ZSwgZmFsc2UpO1xuICAgIHRoaXMuZGF0YS5hZGRFdmVudExpc3RlbmVyKCdwcm9ncmVzcycsIHRoaXMuX2JvdW5kT25Qcm9ncmVzcywgZmFsc2UpO1xuICAgIHRoaXMuZGF0YS5hZGRFdmVudExpc3RlbmVyKCdjYW5wbGF5dGhyb3VnaCcsIHRoaXMuX2JvdW5kQ29tcGxldGUsIGZhbHNlKTtcblxuICAgIHRoaXMuZGF0YS5sb2FkKCk7XG59O1xuXG4vKipcbiAqIExvYWRzIHRoaXMgcmVzb3VyY2VzIHVzaW5nIGFuIFhNTEh0dHBSZXF1ZXN0LlxuICpcbiAqIEBwcml2YXRlXG4gKi9cblJlc291cmNlLnByb3RvdHlwZS5fbG9hZFhociA9IGZ1bmN0aW9uICgpIHtcbiAgICAvLyBpZiB1bnNldCwgZGV0ZXJtaW5lIHRoZSB2YWx1ZVxuICAgIGlmICh0eXBlb2YgdGhpcy54aHJUeXBlICE9PSAnc3RyaW5nJykge1xuICAgICAgICB0aGlzLnhoclR5cGUgPSB0aGlzLl9kZXRlcm1pbmVYaHJUeXBlKCk7XG4gICAgfVxuXG4gICAgdmFyIHhociA9IHRoaXMueGhyID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7XG5cbiAgICAvLyBzZXQgdGhlIHJlcXVlc3QgdHlwZSBhbmQgdXJsXG4gICAgeGhyLm9wZW4oJ0dFVCcsIHRoaXMudXJsLCB0cnVlKTtcblxuICAgIC8vIGxvYWQganNvbiBhcyB0ZXh0IGFuZCBwYXJzZSBpdCBvdXJzZWx2ZXMuIFdlIGRvIHRoaXMgYmVjYXVzZSBzb21lIGJyb3dzZXJzXG4gICAgLy8gKmNvdWdoKiBzYWZhcmkgKmNvdWdoKiBjYW4ndCBkZWFsIHdpdGggaXQuXG4gICAgaWYgKHRoaXMueGhyVHlwZSA9PT0gUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuSlNPTiB8fCB0aGlzLnhoclR5cGUgPT09IFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkRPQ1VNRU5UKSB7XG4gICAgICAgIHhoci5yZXNwb25zZVR5cGUgPSBSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRS5URVhUO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgeGhyLnJlc3BvbnNlVHlwZSA9IHRoaXMueGhyVHlwZTtcbiAgICB9XG5cbiAgICB4aHIuYWRkRXZlbnRMaXN0ZW5lcignZXJyb3InLCB0aGlzLl9ib3VuZFhock9uRXJyb3IsIGZhbHNlKTtcbiAgICB4aHIuYWRkRXZlbnRMaXN0ZW5lcignYWJvcnQnLCB0aGlzLl9ib3VuZFhock9uQWJvcnQsIGZhbHNlKTtcbiAgICB4aHIuYWRkRXZlbnRMaXN0ZW5lcigncHJvZ3Jlc3MnLCB0aGlzLl9ib3VuZE9uUHJvZ3Jlc3MsIGZhbHNlKTtcbiAgICB4aHIuYWRkRXZlbnRMaXN0ZW5lcignbG9hZCcsIHRoaXMuX2JvdW5kWGhyT25Mb2FkLCBmYWxzZSk7XG5cbiAgICB4aHIuc2VuZCgpO1xufTtcblxuLyoqXG4gKiBMb2FkcyB0aGlzIHJlc291cmNlcyB1c2luZyBhbiBYRG9tYWluUmVxdWVzdC4gVGhpcyBpcyBoZXJlIGJlY2F1c2Ugd2UgbmVlZCB0byBzdXBwb3J0IElFOSAoZ3Jvc3MpLlxuICpcbiAqIEBwcml2YXRlXG4gKi9cblJlc291cmNlLnByb3RvdHlwZS5fbG9hZFhkciA9IGZ1bmN0aW9uICgpIHtcbiAgICAvLyBpZiB1bnNldCwgZGV0ZXJtaW5lIHRoZSB2YWx1ZVxuICAgIGlmICh0eXBlb2YgdGhpcy54aHJUeXBlICE9PSAnc3RyaW5nJykge1xuICAgICAgICB0aGlzLnhoclR5cGUgPSB0aGlzLl9kZXRlcm1pbmVYaHJUeXBlKCk7XG4gICAgfVxuXG4gICAgdmFyIHhkciA9IHRoaXMueGhyID0gbmV3IFhEb21haW5SZXF1ZXN0KCk7XG5cbiAgICAvLyBYRG9tYWluUmVxdWVzdCBoYXMgYSBmZXcgcXVpcmtzLiBPY2Nhc2lvbmFsbHkgaXQgd2lsbCBhYm9ydCByZXF1ZXN0c1xuICAgIC8vIEEgd2F5IHRvIGF2b2lkIHRoaXMgaXMgdG8gbWFrZSBzdXJlIEFMTCBjYWxsYmFja3MgYXJlIHNldCBldmVuIGlmIG5vdCB1c2VkXG4gICAgLy8gTW9yZSBpbmZvIGhlcmU6IGh0dHA6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvMTU3ODY5NjYveGRvbWFpbnJlcXVlc3QtYWJvcnRzLXBvc3Qtb24taWUtOVxuICAgIHhkci50aW1lb3V0ID0gNTAwMDtcblxuICAgIHhkci5vbmVycm9yID0gdGhpcy5fYm91bmRYaHJPbkVycm9yO1xuICAgIHhkci5vbnRpbWVvdXQgPSB0aGlzLl9ib3VuZFhkck9uVGltZW91dDtcbiAgICB4ZHIub25wcm9ncmVzcyA9IHRoaXMuX2JvdW5kT25Qcm9ncmVzcztcbiAgICB4ZHIub25sb2FkID0gdGhpcy5fYm91bmRYaHJPbkxvYWQ7XG5cbiAgICB4ZHIub3BlbignR0VUJywgdGhpcy51cmwsIHRydWUpO1xuXG4gICAgLy8gIE5vdGU6IFRoZSB4ZHIuc2VuZCgpIGNhbGwgaXMgd3JhcHBlZCBpbiBhIHRpbWVvdXQgdG8gcHJldmVudCBhbiBpc3N1ZSB3aXRoIHRoZSBpbnRlcmZhY2Ugd2hlcmUgc29tZSByZXF1ZXN0cyBhcmUgbG9zdFxuICAgIC8vICBpZiBtdWx0aXBsZSBYRG9tYWluUmVxdWVzdHMgYXJlIGJlaW5nIHNlbnQgYXQgdGhlIHNhbWUgdGltZS5cbiAgICAvLyBTb21lIGluZm8gaGVyZTogaHR0cHM6Ly9naXRodWIuY29tL3Bob3RvbnN0b3JtL3BoYXNlci9pc3N1ZXMvMTI0OFxuICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgICB4ZHIuc2VuZCgpO1xuICAgIH0sIDApO1xufTtcblxuLyoqXG4gKiBDcmVhdGVzIGEgc291cmNlIHVzZWQgaW4gbG9hZGluZyB2aWEgYW4gZWxlbWVudC5cbiAqXG4gKiBAcGFyYW0gdHlwZSB7c3RyaW5nfSBUaGUgZWxlbWVudCB0eXBlICh2aWRlbyBvciBhdWRpbykuXG4gKiBAcGFyYW0gdXJsIHtzdHJpbmd9IFRoZSBzb3VyY2UgVVJMIHRvIGxvYWQgZnJvbS5cbiAqIEBwYXJhbSBbbWltZV0ge3N0cmluZ30gVGhlIG1pbWUgdHlwZSBvZiB0aGUgdmlkZW9cbiAqIEBwcml2YXRlXG4gKi9cblJlc291cmNlLnByb3RvdHlwZS5fY3JlYXRlU291cmNlID0gZnVuY3Rpb24gKHR5cGUsIHVybCwgbWltZSkge1xuICAgIGlmICghbWltZSkge1xuICAgICAgICBtaW1lID0gdHlwZSArICcvJyArIHVybC5zdWJzdHIodXJsLmxhc3RJbmRleE9mKCcuJykgKyAxKTtcbiAgICB9XG5cbiAgICB2YXIgc291cmNlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc291cmNlJyk7XG5cbiAgICBzb3VyY2Uuc3JjID0gdXJsO1xuICAgIHNvdXJjZS50eXBlID0gbWltZTtcblxuICAgIHJldHVybiBzb3VyY2U7XG59O1xuXG4vKipcbiAqIENhbGxlZCBpZiBhIGxvYWQgZXJyb3JzIG91dC5cbiAqXG4gKiBAcGFyYW0gZXZlbnQge0V2ZW50fSBUaGUgZXJyb3IgZXZlbnQgZnJvbSB0aGUgZWxlbWVudCB0aGF0IGVtaXRzIGl0LlxuICogQHByaXZhdGVcbiAqL1xuUmVzb3VyY2UucHJvdG90eXBlLl9vbkVycm9yID0gZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgdGhpcy5lcnJvciA9IG5ldyBFcnJvcignRmFpbGVkIHRvIGxvYWQgZWxlbWVudCB1c2luZyAnICsgZXZlbnQudGFyZ2V0Lm5vZGVOYW1lKTtcbiAgICB0aGlzLmNvbXBsZXRlKCk7XG59O1xuXG4vKipcbiAqIENhbGxlZCBpZiBhIGxvYWQgcHJvZ3Jlc3MgZXZlbnQgZmlyZXMgZm9yIHhoci94ZHIuXG4gKlxuICogQGZpcmVzIHByb2dyZXNzXG4gKiBAcGFyYW0gZXZlbnQge1hNTEh0dHBSZXF1ZXN0UHJvZ3Jlc3NFdmVudHxFdmVudH1cbiAqIEBwcml2YXRlXG4gKi9cblJlc291cmNlLnByb3RvdHlwZS5fb25Qcm9ncmVzcyA9ICBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICBpZiAoZXZlbnQgJiYgZXZlbnQubGVuZ3RoQ29tcHV0YWJsZSkge1xuICAgICAgICB0aGlzLmVtaXQoJ3Byb2dyZXNzJywgdGhpcywgZXZlbnQubG9hZGVkIC8gZXZlbnQudG90YWwpO1xuICAgIH1cbn07XG5cbi8qKlxuICogQ2FsbGVkIGlmIGFuIGVycm9yIGV2ZW50IGZpcmVzIGZvciB4aHIveGRyLlxuICpcbiAqIEBwYXJhbSBldmVudCB7WE1MSHR0cFJlcXVlc3RFcnJvckV2ZW50fEV2ZW50fVxuICogQHByaXZhdGVcbiAqL1xuUmVzb3VyY2UucHJvdG90eXBlLl94aHJPbkVycm9yID0gZnVuY3Rpb24gKCkge1xuICAgIHRoaXMuZXJyb3IgPSBuZXcgRXJyb3IoXG4gICAgICAgIHJlcVR5cGUodGhpcy54aHIpICsgJyBSZXF1ZXN0IGZhaWxlZC4gJyArXG4gICAgICAgICdTdGF0dXM6ICcgKyB0aGlzLnhoci5zdGF0dXMgKyAnLCB0ZXh0OiBcIicgKyB0aGlzLnhoci5zdGF0dXNUZXh0ICsgJ1wiJ1xuICAgICk7XG5cbiAgICB0aGlzLmNvbXBsZXRlKCk7XG59O1xuXG4vKipcbiAqIENhbGxlZCBpZiBhbiBhYm9ydCBldmVudCBmaXJlcyBmb3IgeGhyLlxuICpcbiAqIEBwYXJhbSBldmVudCB7WE1MSHR0cFJlcXVlc3RBYm9ydEV2ZW50fVxuICogQHByaXZhdGVcbiAqL1xuUmVzb3VyY2UucHJvdG90eXBlLl94aHJPbkFib3J0ID0gZnVuY3Rpb24gKCkge1xuICAgIHRoaXMuZXJyb3IgPSBuZXcgRXJyb3IocmVxVHlwZSh0aGlzLnhocikgKyAnIFJlcXVlc3Qgd2FzIGFib3J0ZWQgYnkgdGhlIHVzZXIuJyk7XG4gICAgdGhpcy5jb21wbGV0ZSgpO1xufTtcblxuLyoqXG4gKiBDYWxsZWQgaWYgYSB0aW1lb3V0IGV2ZW50IGZpcmVzIGZvciB4ZHIuXG4gKlxuICogQHBhcmFtIGV2ZW50IHtFdmVudH1cbiAqIEBwcml2YXRlXG4gKi9cblJlc291cmNlLnByb3RvdHlwZS5feGRyT25UaW1lb3V0ID0gZnVuY3Rpb24gKCkge1xuICAgIHRoaXMuZXJyb3IgPSBuZXcgRXJyb3IocmVxVHlwZSh0aGlzLnhocikgKyAnIFJlcXVlc3QgdGltZWQgb3V0LicpO1xuICAgIHRoaXMuY29tcGxldGUoKTtcbn07XG5cbi8qKlxuICogQ2FsbGVkIHdoZW4gZGF0YSBzdWNjZXNzZnVsbHkgbG9hZHMgZnJvbSBhbiB4aHIveGRyIHJlcXVlc3QuXG4gKlxuICogQHBhcmFtIGV2ZW50IHtYTUxIdHRwUmVxdWVzdExvYWRFdmVudHxFdmVudH1cbiAqIEBwcml2YXRlXG4gKi9cblJlc291cmNlLnByb3RvdHlwZS5feGhyT25Mb2FkID0gZnVuY3Rpb24gKCkge1xuICAgIHZhciB4aHIgPSB0aGlzLnhocixcbiAgICAgICAgc3RhdHVzID0geGhyLnN0YXR1cyAhPT0gdW5kZWZpbmVkID8geGhyLnN0YXR1cyA6IDIwMDsgLy9YRFIgaGFzIG5vIGAuc3RhdHVzYCwgYXNzdW1lIDIwMC5cblxuICAgIC8vIHN0YXR1cyBjYW4gYmUgMCB3aGVuIHVzaW5nIHRoZSBmaWxlOi8vIHByb3RvY29sLCBhbHNvIGNoZWNrIGlmIGEgcmVzcG9uc2Ugd2FzIGZvdW5kXG4gICAgaWYgKHN0YXR1cyA9PT0gMjAwIHx8IHN0YXR1cyA9PT0gMjA0IHx8IChzdGF0dXMgPT09IDAgJiYgeGhyLnJlc3BvbnNlVGV4dC5sZW5ndGggPiAwKSkge1xuICAgICAgICAvLyBpZiB0ZXh0LCBqdXN0IHJldHVybiBpdFxuICAgICAgICBpZiAodGhpcy54aHJUeXBlID09PSBSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRS5URVhUKSB7XG4gICAgICAgICAgICB0aGlzLmRhdGEgPSB4aHIucmVzcG9uc2VUZXh0O1xuICAgICAgICB9XG4gICAgICAgIC8vIGlmIGpzb24sIHBhcnNlIGludG8ganNvbiBvYmplY3RcbiAgICAgICAgZWxzZSBpZiAodGhpcy54aHJUeXBlID09PSBSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRS5KU09OKSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIHRoaXMuZGF0YSA9IEpTT04ucGFyc2UoeGhyLnJlc3BvbnNlVGV4dCk7XG4gICAgICAgICAgICAgICAgdGhpcy5pc0pzb24gPSB0cnVlO1xuICAgICAgICAgICAgfSBjYXRjaChlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5lcnJvciA9IG5ldyBFcnJvcignRXJyb3IgdHJ5aW5nIHRvIHBhcnNlIGxvYWRlZCBqc29uOicsIGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIGlmIHhtbCwgcGFyc2UgaW50byBhbiB4bWwgZG9jdW1lbnQgb3IgZGl2IGVsZW1lbnRcbiAgICAgICAgZWxzZSBpZiAodGhpcy54aHJUeXBlID09PSBSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRS5ET0NVTUVOVCkge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBpZiAod2luZG93LkRPTVBhcnNlcikge1xuICAgICAgICAgICAgICAgICAgICB2YXIgZG9tcGFyc2VyID0gbmV3IERPTVBhcnNlcigpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmRhdGEgPSBkb21wYXJzZXIucGFyc2VGcm9tU3RyaW5nKHhoci5yZXNwb25zZVRleHQsICd0ZXh0L3htbCcpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICAgICAgICAgICAgICBkaXYuaW5uZXJIVE1MID0geGhyLnJlc3BvbnNlVGV4dDtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kYXRhID0gZGl2O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzLmlzWG1sID0gdHJ1ZTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmVycm9yID0gbmV3IEVycm9yKCdFcnJvciB0cnlpbmcgdG8gcGFyc2UgbG9hZGVkIHhtbDonLCBlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvLyBvdGhlciB0eXBlcyBqdXN0IHJldHVybiB0aGUgcmVzcG9uc2VcbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmRhdGEgPSB4aHIucmVzcG9uc2UgfHwgeGhyLnJlc3BvbnNlVGV4dDtcbiAgICAgICAgfVxuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgdGhpcy5lcnJvciA9IG5ldyBFcnJvcignWycgKyB4aHIuc3RhdHVzICsgJ10nICsgeGhyLnN0YXR1c1RleHQgKyAnOicgKyB4aHIucmVzcG9uc2VVUkwpO1xuICAgIH1cblxuICAgIHRoaXMuY29tcGxldGUoKTtcbn07XG5cbmZ1bmN0aW9uIHJlcVR5cGUoeGhyKSB7XG4gICAgcmV0dXJuIHhoci50b1N0cmluZygpLnJlcGxhY2UoJ29iamVjdCAnLCAnJyk7XG59XG5cbi8qKlxuICogU2V0cyB0aGUgYGNyb3NzT3JpZ2luYCBwcm9wZXJ0eSBmb3IgdGhpcyByZXNvdXJjZSBiYXNlZCBvbiBpZiB0aGUgdXJsXG4gKiBmb3IgdGhpcyByZXNvdXJjZSBpcyBjcm9zcy1vcmlnaW4uIElmIGNyb3NzT3JpZ2luIHdhcyBtYW51YWxseSBzZXQsIHRoaXNcbiAqIGZ1bmN0aW9uIGRvZXMgbm90aGluZy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHVybCB7c3RyaW5nfSBUaGUgdXJsIHRvIHRlc3QuXG4gKiBAcGFyYW0gW2xvY2F0aW9uPXdpbmRvdy5sb2NhdGlvbl0ge29iamVjdH0gVGhlIGxvY2F0aW9uIG9iamVjdCB0byB0ZXN0IGFnYWluc3QuXG4gKiBAcmV0dXJuIHtzdHJpbmd9IFRoZSBjcm9zc09yaWdpbiB2YWx1ZSB0byB1c2UgKG9yIGVtcHR5IHN0cmluZyBmb3Igbm9uZSkuXG4gKi9cblJlc291cmNlLnByb3RvdHlwZS5fZGV0ZXJtaW5lQ3Jvc3NPcmlnaW4gPSBmdW5jdGlvbiAodXJsLCBsb2MpIHtcbiAgICAvLyBkYXRhOiBhbmQgamF2YXNjcmlwdDogdXJscyBhcmUgY29uc2lkZXJlZCBzYW1lLW9yaWdpblxuICAgIGlmICh1cmwuaW5kZXhPZignZGF0YTonKSA9PT0gMCkge1xuICAgICAgICByZXR1cm4gJyc7XG4gICAgfVxuXG4gICAgLy8gZGVmYXVsdCBpcyB3aW5kb3cubG9jYXRpb25cbiAgICBsb2MgPSBsb2MgfHwgd2luZG93LmxvY2F0aW9uO1xuXG4gICAgaWYgKCF0ZW1wQW5jaG9yKSB7XG4gICAgICAgIHRlbXBBbmNob3IgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdhJyk7XG4gICAgfVxuXG4gICAgLy8gbGV0IHRoZSBicm93c2VyIGRldGVybWluZSB0aGUgZnVsbCBocmVmIGZvciB0aGUgdXJsIG9mIHRoaXMgcmVzb3VyY2UgYW5kIHRoZW5cbiAgICAvLyBwYXJzZSB3aXRoIHRoZSBub2RlIHVybCBsaWIsIHdlIGNhbid0IHVzZSB0aGUgcHJvcGVydGllcyBvZiB0aGUgYW5jaG9yIGVsZW1lbnRcbiAgICAvLyBiZWNhdXNlIHRoZXkgZG9uJ3Qgd29yayBpbiBJRTkgOihcbiAgICB0ZW1wQW5jaG9yLmhyZWYgPSB1cmw7XG4gICAgdXJsID0gX3VybC5wYXJzZSh0ZW1wQW5jaG9yLmhyZWYpO1xuXG4gICAgdmFyIHNhbWVQb3J0ID0gKCF1cmwucG9ydCAmJiBsb2MucG9ydCA9PT0gJycpIHx8ICh1cmwucG9ydCA9PT0gbG9jLnBvcnQpO1xuXG4gICAgLy8gaWYgY3Jvc3Mgb3JpZ2luXG4gICAgaWYgKHVybC5ob3N0bmFtZSAhPT0gbG9jLmhvc3RuYW1lIHx8ICFzYW1lUG9ydCB8fCB1cmwucHJvdG9jb2wgIT09IGxvYy5wcm90b2NvbCkge1xuICAgICAgICByZXR1cm4gJ2Fub255bW91cyc7XG4gICAgfVxuXG4gICAgcmV0dXJuICcnO1xufTtcblxuLyoqXG4gKiBEZXRlcm1pbmVzIHRoZSByZXNwb25zZVR5cGUgb2YgYW4gWEhSIHJlcXVlc3QgYmFzZWQgb24gdGhlIGV4dGVuc2lvbiBvZiB0aGVcbiAqIHJlc291cmNlIGJlaW5nIGxvYWRlZC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHJldHVybiB7UmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEV9IFRoZSByZXNwb25zZVR5cGUgdG8gdXNlLlxuICovXG5SZXNvdXJjZS5wcm90b3R5cGUuX2RldGVybWluZVhoclR5cGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIFJlc291cmNlLl94aHJUeXBlTWFwW3RoaXMuX2dldEV4dGVuc2lvbigpXSB8fCBSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRS5URVhUO1xufTtcblxuUmVzb3VyY2UucHJvdG90eXBlLl9kZXRlcm1pbmVMb2FkVHlwZSA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gUmVzb3VyY2UuX2xvYWRUeXBlTWFwW3RoaXMuX2dldEV4dGVuc2lvbigpXSB8fCBSZXNvdXJjZS5MT0FEX1RZUEUuWEhSO1xufTtcblxuUmVzb3VyY2UucHJvdG90eXBlLl9nZXRFeHRlbnNpb24gPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHVybCA9IHRoaXMudXJsLFxuICAgICAgICBleHQ7XG5cbiAgICBpZiAodGhpcy5pc0RhdGFVcmwpIHtcbiAgICAgICAgdmFyIHNsYXNoSW5kZXggPSB1cmwuaW5kZXhPZignLycpO1xuICAgICAgICBleHQgPSB1cmwuc3Vic3RyaW5nKHNsYXNoSW5kZXggKyAxLCB1cmwuaW5kZXhPZignOycsIHNsYXNoSW5kZXgpKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHZhciBxdWVyeVN0YXJ0ID0gdXJsLmluZGV4T2YoJz8nKTtcbiAgICAgICAgaWYgKHF1ZXJ5U3RhcnQgIT09IC0xKSB7XG4gICAgICAgICAgICB1cmwgPSB1cmwuc3Vic3RyaW5nKDAsIHF1ZXJ5U3RhcnQpO1xuICAgICAgICB9XG5cbiAgICAgICAgZXh0ID0gdXJsLnN1YnN0cmluZyh1cmwubGFzdEluZGV4T2YoJy4nKSArIDEpO1xuICAgIH1cblxuICAgIHJldHVybiBleHQ7XG59O1xuXG4vKipcbiAqIERldGVybWluZXMgdGhlIG1pbWUgdHlwZSBvZiBhbiBYSFIgcmVxdWVzdCBiYXNlZCBvbiB0aGUgcmVzcG9uc2VUeXBlIG9mXG4gKiByZXNvdXJjZSBiZWluZyBsb2FkZWQuXG4gKlxuICogQHByaXZhdGVcbiAqIEByZXR1cm4ge3N0cmluZ30gVGhlIG1pbWUgdHlwZSB0byB1c2UuXG4gKi9cblJlc291cmNlLnByb3RvdHlwZS5fZ2V0TWltZUZyb21YaHJUeXBlID0gZnVuY3Rpb24gKHR5cGUpIHtcbiAgICBzd2l0Y2godHlwZSkge1xuICAgICAgICBjYXNlIFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkJVRkZFUjpcbiAgICAgICAgICAgIHJldHVybiAnYXBwbGljYXRpb24vb2N0ZXQtYmluYXJ5JztcblxuICAgICAgICBjYXNlIFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkJMT0I6XG4gICAgICAgICAgICByZXR1cm4gJ2FwcGxpY2F0aW9uL2Jsb2InO1xuXG4gICAgICAgIGNhc2UgUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuRE9DVU1FTlQ6XG4gICAgICAgICAgICByZXR1cm4gJ2FwcGxpY2F0aW9uL3htbCc7XG5cbiAgICAgICAgY2FzZSBSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRS5KU09OOlxuICAgICAgICAgICAgcmV0dXJuICdhcHBsaWNhdGlvbi9qc29uJztcblxuICAgICAgICBjYXNlIFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkRFRkFVTFQ6XG4gICAgICAgIGNhc2UgUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuVEVYVDpcbiAgICAgICAgICAgIC8qIGZhbGxzIHRocm91Z2ggKi9cbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIHJldHVybiAndGV4dC9wbGFpbic7XG5cbiAgICB9XG59O1xuXG4vKipcbiAqIFRoZSB0eXBlcyBvZiBsb2FkaW5nIGEgcmVzb3VyY2UgY2FuIHVzZS5cbiAqXG4gKiBAc3RhdGljXG4gKiBAY29uc3RhbnRcbiAqIEBwcm9wZXJ0eSB7b2JqZWN0fSBMT0FEX1RZUEVcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBMT0FEX1RZUEUuWEhSIC0gVXNlcyBYTUxIdHRwUmVxdWVzdCB0byBsb2FkIHRoZSByZXNvdXJjZS5cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBMT0FEX1RZUEUuSU1BR0UgLSBVc2VzIGFuIGBJbWFnZWAgb2JqZWN0IHRvIGxvYWQgdGhlIHJlc291cmNlLlxuICogQHByb3BlcnR5IHtudW1iZXJ9IExPQURfVFlQRS5BVURJTyAtIFVzZXMgYW4gYEF1ZGlvYCBvYmplY3QgdG8gbG9hZCB0aGUgcmVzb3VyY2UuXG4gKiBAcHJvcGVydHkge251bWJlcn0gTE9BRF9UWVBFLlZJREVPIC0gVXNlcyBhIGBWaWRlb2Agb2JqZWN0IHRvIGxvYWQgdGhlIHJlc291cmNlLlxuICovXG5SZXNvdXJjZS5MT0FEX1RZUEUgPSB7XG4gICAgWEhSOiAgICAxLFxuICAgIElNQUdFOiAgMixcbiAgICBBVURJTzogIDMsXG4gICAgVklERU86ICA0XG59O1xuXG4vKipcbiAqIFRoZSBYSFIgcmVhZHkgc3RhdGVzLCB1c2VkIGludGVybmFsbHkuXG4gKlxuICogQHN0YXRpY1xuICogQGNvbnN0YW50XG4gKiBAcHJvcGVydHkge29iamVjdH0gWEhSX1JFQURZX1NUQVRFXG4gKiBAcHJvcGVydHkge251bWJlcn0gWEhSX1JFQURZX1NUQVRFLlVOU0VOVCAtIG9wZW4oKWhhcyBub3QgYmVlbiBjYWxsZWQgeWV0LlxuICogQHByb3BlcnR5IHtudW1iZXJ9IFhIUl9SRUFEWV9TVEFURS5PUEVORUQgLSBzZW5kKCloYXMgbm90IGJlZW4gY2FsbGVkIHlldC5cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBYSFJfUkVBRFlfU1RBVEUuSEVBREVSU19SRUNFSVZFRCAtIHNlbmQoKSBoYXMgYmVlbiBjYWxsZWQsIGFuZCBoZWFkZXJzIGFuZCBzdGF0dXMgYXJlIGF2YWlsYWJsZS5cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBYSFJfUkVBRFlfU1RBVEUuTE9BRElORyAtIERvd25sb2FkaW5nOyByZXNwb25zZVRleHQgaG9sZHMgcGFydGlhbCBkYXRhLlxuICogQHByb3BlcnR5IHtudW1iZXJ9IFhIUl9SRUFEWV9TVEFURS5ET05FIC0gVGhlIG9wZXJhdGlvbiBpcyBjb21wbGV0ZS5cbiAqL1xuUmVzb3VyY2UuWEhSX1JFQURZX1NUQVRFID0ge1xuICAgIFVOU0VOVDogMCxcbiAgICBPUEVORUQ6IDEsXG4gICAgSEVBREVSU19SRUNFSVZFRDogMixcbiAgICBMT0FESU5HOiAzLFxuICAgIERPTkU6IDRcbn07XG5cbi8qKlxuICogVGhlIFhIUiByZWFkeSBzdGF0ZXMsIHVzZWQgaW50ZXJuYWxseS5cbiAqXG4gKiBAc3RhdGljXG4gKiBAY29uc3RhbnRcbiAqIEBwcm9wZXJ0eSB7b2JqZWN0fSBYSFJfUkVTUE9OU0VfVFlQRVxuICogQHByb3BlcnR5IHtzdHJpbmd9IFhIUl9SRVNQT05TRV9UWVBFLkRFRkFVTFQgLSBkZWZhdWx0cyB0byB0ZXh0XG4gKiBAcHJvcGVydHkge3N0cmluZ30gWEhSX1JFU1BPTlNFX1RZUEUuQlVGRkVSIC0gQXJyYXlCdWZmZXJcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBYSFJfUkVTUE9OU0VfVFlQRS5CTE9CIC0gQmxvYlxuICogQHByb3BlcnR5IHtzdHJpbmd9IFhIUl9SRVNQT05TRV9UWVBFLkRPQ1VNRU5UIC0gRG9jdW1lbnRcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBYSFJfUkVTUE9OU0VfVFlQRS5KU09OIC0gT2JqZWN0XG4gKiBAcHJvcGVydHkge3N0cmluZ30gWEhSX1JFU1BPTlNFX1RZUEUuVEVYVCAtIFN0cmluZ1xuICovXG5SZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRSA9IHtcbiAgICBERUZBVUxUOiAgICAndGV4dCcsXG4gICAgQlVGRkVSOiAgICAgJ2FycmF5YnVmZmVyJyxcbiAgICBCTE9COiAgICAgICAnYmxvYicsXG4gICAgRE9DVU1FTlQ6ICAgJ2RvY3VtZW50JyxcbiAgICBKU09OOiAgICAgICAnanNvbicsXG4gICAgVEVYVDogICAgICAgJ3RleHQnXG59O1xuXG5SZXNvdXJjZS5fbG9hZFR5cGVNYXAgPSB7XG4gICAgJ2dpZic6ICAgICAgUmVzb3VyY2UuTE9BRF9UWVBFLklNQUdFLFxuICAgICdwbmcnOiAgICAgIFJlc291cmNlLkxPQURfVFlQRS5JTUFHRSxcbiAgICAnYm1wJzogICAgICBSZXNvdXJjZS5MT0FEX1RZUEUuSU1BR0UsXG4gICAgJ2pwZyc6ICAgICAgUmVzb3VyY2UuTE9BRF9UWVBFLklNQUdFLFxuICAgICdqcGVnJzogICAgIFJlc291cmNlLkxPQURfVFlQRS5JTUFHRSxcbiAgICAndGlmJzogICAgICBSZXNvdXJjZS5MT0FEX1RZUEUuSU1BR0UsXG4gICAgJ3RpZmYnOiAgICAgUmVzb3VyY2UuTE9BRF9UWVBFLklNQUdFLFxuICAgICd3ZWJwJzogICAgIFJlc291cmNlLkxPQURfVFlQRS5JTUFHRSxcbiAgICAndGdhJzogICAgICBSZXNvdXJjZS5MT0FEX1RZUEUuSU1BR0Vcbn07XG5cblJlc291cmNlLl94aHJUeXBlTWFwID0ge1xuICAgIC8vIHhtbFxuICAgICd4aHRtbCc6ICAgIFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkRPQ1VNRU5ULFxuICAgICdodG1sJzogICAgIFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkRPQ1VNRU5ULFxuICAgICdodG0nOiAgICAgIFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkRPQ1VNRU5ULFxuICAgICd4bWwnOiAgICAgIFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkRPQ1VNRU5ULFxuICAgICd0bXgnOiAgICAgIFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkRPQ1VNRU5ULFxuICAgICd0c3gnOiAgICAgIFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkRPQ1VNRU5ULFxuICAgICdzdmcnOiAgICAgIFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkRPQ1VNRU5ULFxuXG4gICAgLy8gaW1hZ2VzXG4gICAgJ2dpZic6ICAgICAgUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuQkxPQixcbiAgICAncG5nJzogICAgICBSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRS5CTE9CLFxuICAgICdibXAnOiAgICAgIFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkJMT0IsXG4gICAgJ2pwZyc6ICAgICAgUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuQkxPQixcbiAgICAnanBlZyc6ICAgICBSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRS5CTE9CLFxuICAgICd0aWYnOiAgICAgIFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkJMT0IsXG4gICAgJ3RpZmYnOiAgICAgUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuQkxPQixcbiAgICAnd2VicCc6ICAgICBSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRS5CTE9CLFxuICAgICd0Z2EnOiAgICAgIFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkJMT0IsXG5cbiAgICAvLyBqc29uXG4gICAgJ2pzb24nOiAgICAgUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuSlNPTixcblxuICAgIC8vIHRleHRcbiAgICAndGV4dCc6ICAgICBSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRS5URVhULFxuICAgICd0eHQnOiAgICAgIFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLlRFWFRcbn07XG5cbi8qKlxuICogU2V0cyB0aGUgbG9hZCB0eXBlIHRvIGJlIHVzZWQgZm9yIGEgc3BlY2lmaWMgZXh0ZW5zaW9uLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBwYXJhbSBleHRuYW1lIHtzdHJpbmd9IFRoZSBleHRlbnNpb24gdG8gc2V0IHRoZSB0eXBlIGZvciwgZS5nLiBcInBuZ1wiIG9yIFwiZm50XCJcbiAqIEBwYXJhbSBsb2FkVHlwZSB7UmVzb3VyY2UuTE9BRF9UWVBFfSBUaGUgbG9hZCB0eXBlIHRvIHNldCBpdCB0by5cbiAqL1xuUmVzb3VyY2Uuc2V0RXh0ZW5zaW9uTG9hZFR5cGUgPSBmdW5jdGlvbiAoZXh0bmFtZSwgbG9hZFR5cGUpIHtcbiAgICBzZXRFeHRNYXAoUmVzb3VyY2UuX2xvYWRUeXBlTWFwLCBleHRuYW1lLCBsb2FkVHlwZSk7XG59O1xuXG4vKipcbiAqIFNldHMgdGhlIGxvYWQgdHlwZSB0byBiZSB1c2VkIGZvciBhIHNwZWNpZmljIGV4dGVuc2lvbi5cbiAqXG4gKiBAc3RhdGljXG4gKiBAcGFyYW0gZXh0bmFtZSB7c3RyaW5nfSBUaGUgZXh0ZW5zaW9uIHRvIHNldCB0aGUgdHlwZSBmb3IsIGUuZy4gXCJwbmdcIiBvciBcImZudFwiXG4gKiBAcGFyYW0geGhyVHlwZSB7UmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEV9IFRoZSB4aHIgdHlwZSB0byBzZXQgaXQgdG8uXG4gKi9cblJlc291cmNlLnNldEV4dGVuc2lvblhoclR5cGUgPSBmdW5jdGlvbiAoZXh0bmFtZSwgeGhyVHlwZSkge1xuICAgIHNldEV4dE1hcChSZXNvdXJjZS5feGhyVHlwZU1hcCwgZXh0bmFtZSwgeGhyVHlwZSk7XG59O1xuXG5mdW5jdGlvbiBzZXRFeHRNYXAobWFwLCBleHRuYW1lLCB2YWwpIHtcbiAgICBpZiAoZXh0bmFtZSAmJiBleHRuYW1lLmluZGV4T2YoJy4nKSA9PT0gMCkge1xuICAgICAgICBleHRuYW1lID0gZXh0bmFtZS5zdWJzdHJpbmcoMSk7XG4gICAgfVxuXG4gICAgaWYgKCFleHRuYW1lKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBtYXBbZXh0bmFtZV0gPSB2YWw7XG59XG4iLCJtb2R1bGUuZXhwb3J0cyA9IHtcblxuICAgIC8vIHByaXZhdGUgcHJvcGVydHlcbiAgICBfa2V5U3RyOiBcIkFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5Ky89XCIsXG5cbiAgICBlbmNvZGVCaW5hcnk6IGZ1bmN0aW9uIChpbnB1dCkge1xuICAgICAgICB2YXIgb3V0cHV0ID0gXCJcIjtcbiAgICAgICAgdmFyIGJ5dGVidWZmZXI7XG4gICAgICAgIHZhciBlbmNvZGVkQ2hhckluZGV4ZXMgPSBuZXcgQXJyYXkoNCk7XG4gICAgICAgIHZhciBpbnggPSAwO1xuICAgICAgICB2YXIgam54ID0gMDtcbiAgICAgICAgdmFyIHBhZGRpbmdCeXRlcyA9IDA7XG5cbiAgICAgICAgd2hpbGUgKGlueCA8IGlucHV0Lmxlbmd0aCkge1xuICAgICAgICAgICAgLy8gRmlsbCBieXRlIGJ1ZmZlciBhcnJheVxuICAgICAgICAgICAgYnl0ZWJ1ZmZlciA9IG5ldyBBcnJheSgzKTtcbiAgICAgICAgICAgIGZvciAoam54ID0gMDsgam54IDwgYnl0ZWJ1ZmZlci5sZW5ndGg7IGpueCsrKSB7XG4gICAgICAgICAgICAgICAgaWYgKGlueCA8IGlucHV0Lmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICAvLyB0aHJvdyBhd2F5IGhpZ2gtb3JkZXIgYnl0ZSwgYXMgZG9jdW1lbnRlZCBhdDpcbiAgICAgICAgICAgICAgICAgICAgLy8gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvRW4vVXNpbmdfWE1MSHR0cFJlcXVlc3QjSGFuZGxpbmdfYmluYXJ5X2RhdGFcbiAgICAgICAgICAgICAgICAgICAgYnl0ZWJ1ZmZlcltqbnhdID0gaW5wdXQuY2hhckNvZGVBdChpbngrKykgJiAweGZmO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgYnl0ZWJ1ZmZlcltqbnhdID0gMDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIEdldCBlYWNoIGVuY29kZWQgY2hhcmFjdGVyLCA2IGJpdHMgYXQgYSB0aW1lXG4gICAgICAgICAgICAvLyBpbmRleCAxOiBmaXJzdCA2IGJpdHNcbiAgICAgICAgICAgIGVuY29kZWRDaGFySW5kZXhlc1swXSA9IGJ5dGVidWZmZXJbMF0gPj4gMjtcbiAgICAgICAgICAgIC8vIGluZGV4IDI6IHNlY29uZCA2IGJpdHMgKDIgbGVhc3Qgc2lnbmlmaWNhbnQgYml0cyBmcm9tIGlucHV0IGJ5dGUgMSArIDQgbW9zdCBzaWduaWZpY2FudCBiaXRzIGZyb20gYnl0ZSAyKVxuICAgICAgICAgICAgZW5jb2RlZENoYXJJbmRleGVzWzFdID0gKChieXRlYnVmZmVyWzBdICYgMHgzKSA8PCA0KSB8IChieXRlYnVmZmVyWzFdID4+IDQpO1xuICAgICAgICAgICAgLy8gaW5kZXggMzogdGhpcmQgNiBiaXRzICg0IGxlYXN0IHNpZ25pZmljYW50IGJpdHMgZnJvbSBpbnB1dCBieXRlIDIgKyAyIG1vc3Qgc2lnbmlmaWNhbnQgYml0cyBmcm9tIGJ5dGUgMylcbiAgICAgICAgICAgIGVuY29kZWRDaGFySW5kZXhlc1syXSA9ICgoYnl0ZWJ1ZmZlclsxXSAmIDB4MGYpIDw8IDIpIHwgKGJ5dGVidWZmZXJbMl0gPj4gNik7XG4gICAgICAgICAgICAvLyBpbmRleCAzOiBmb3J0aCA2IGJpdHMgKDYgbGVhc3Qgc2lnbmlmaWNhbnQgYml0cyBmcm9tIGlucHV0IGJ5dGUgMylcbiAgICAgICAgICAgIGVuY29kZWRDaGFySW5kZXhlc1szXSA9IGJ5dGVidWZmZXJbMl0gJiAweDNmO1xuXG4gICAgICAgICAgICAvLyBEZXRlcm1pbmUgd2hldGhlciBwYWRkaW5nIGhhcHBlbmVkLCBhbmQgYWRqdXN0IGFjY29yZGluZ2x5XG4gICAgICAgICAgICBwYWRkaW5nQnl0ZXMgPSBpbnggLSAoaW5wdXQubGVuZ3RoIC0gMSk7XG4gICAgICAgICAgICBzd2l0Y2ggKHBhZGRpbmdCeXRlcykge1xuICAgICAgICAgICAgICAgIGNhc2UgMjpcbiAgICAgICAgICAgICAgICAgICAgLy8gU2V0IGxhc3QgMiBjaGFyYWN0ZXJzIHRvIHBhZGRpbmcgY2hhclxuICAgICAgICAgICAgICAgICAgICBlbmNvZGVkQ2hhckluZGV4ZXNbM10gPSA2NDtcbiAgICAgICAgICAgICAgICAgICAgZW5jb2RlZENoYXJJbmRleGVzWzJdID0gNjQ7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgY2FzZSAxOlxuICAgICAgICAgICAgICAgICAgICAvLyBTZXQgbGFzdCBjaGFyYWN0ZXIgdG8gcGFkZGluZyBjaGFyXG4gICAgICAgICAgICAgICAgICAgIGVuY29kZWRDaGFySW5kZXhlc1szXSA9IDY0O1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrOyAvLyBObyBwYWRkaW5nIC0gcHJvY2VlZFxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBOb3cgd2Ugd2lsbCBncmFiIGVhY2ggYXBwcm9wcmlhdGUgY2hhcmFjdGVyIG91dCBvZiBvdXIga2V5c3RyaW5nXG4gICAgICAgICAgICAvLyBiYXNlZCBvbiBvdXIgaW5kZXggYXJyYXkgYW5kIGFwcGVuZCBpdCB0byB0aGUgb3V0cHV0IHN0cmluZ1xuICAgICAgICAgICAgZm9yIChqbnggPSAwOyBqbnggPCBlbmNvZGVkQ2hhckluZGV4ZXMubGVuZ3RoOyBqbngrKykge1xuICAgICAgICAgICAgICAgIG91dHB1dCArPSB0aGlzLl9rZXlTdHIuY2hhckF0KGVuY29kZWRDaGFySW5kZXhlc1tqbnhdKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gb3V0cHV0O1xuICAgIH1cbn07XG4iLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vTG9hZGVyJyk7XG5cbm1vZHVsZS5leHBvcnRzLlJlc291cmNlID0gcmVxdWlyZSgnLi9SZXNvdXJjZScpO1xuXG5tb2R1bGUuZXhwb3J0cy5taWRkbGV3YXJlID0ge1xuICAgIGNhY2hpbmc6IHtcbiAgICAgICAgbWVtb3J5OiByZXF1aXJlKCcuL21pZGRsZXdhcmVzL2NhY2hpbmcvbWVtb3J5JylcbiAgICB9LFxuICAgIHBhcnNpbmc6IHtcbiAgICAgICAgYmxvYjogcmVxdWlyZSgnLi9taWRkbGV3YXJlcy9wYXJzaW5nL2Jsb2InKVxuICAgIH1cbn07XG4iLCIvLyBhIHNpbXBsZSBpbi1tZW1vcnkgY2FjaGUgZm9yIHJlc291cmNlc1xudmFyIGNhY2hlID0ge307XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBmdW5jdGlvbiAocmVzb3VyY2UsIG5leHQpIHtcbiAgICAgICAgLy8gaWYgY2FjaGVkLCB0aGVuIHNldCBkYXRhIGFuZCBjb21wbGV0ZSB0aGUgcmVzb3VyY2VcbiAgICAgICAgaWYgKGNhY2hlW3Jlc291cmNlLnVybF0pIHtcbiAgICAgICAgICAgIHJlc291cmNlLmRhdGEgPSBjYWNoZVtyZXNvdXJjZS51cmxdO1xuICAgICAgICAgICAgcmVzb3VyY2UuY29tcGxldGUoKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBpZiBub3QgY2FjaGVkLCB3YWl0IGZvciBjb21wbGV0ZSBhbmQgc3RvcmUgaXQgaW4gdGhlIGNhY2hlLlxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJlc291cmNlLm9uY2UoJ2NvbXBsZXRlJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgY2FjaGVbdGhpcy51cmxdID0gdGhpcy5kYXRhO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgXG4gICAgICAgIG5leHQoKTtcbiAgICB9O1xufTtcbiIsInZhciBSZXNvdXJjZSA9IHJlcXVpcmUoJy4uLy4uL1Jlc291cmNlJyksXG4gICAgYjY0ID0gcmVxdWlyZSgnLi4vLi4vYjY0Jyk7XG5cbndpbmRvdy5VUkwgPSB3aW5kb3cuVVJMIHx8IHdpbmRvdy53ZWJraXRVUkw7XG5cbi8vIGEgbWlkZGxld2FyZSBmb3IgdHJhbnNmb3JtaW5nIFhIUiBsb2FkZWQgQmxvYnMgaW50byBtb3JlIHVzZWZ1bCBvYmplY3RzXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBmdW5jdGlvbiAocmVzb3VyY2UsIG5leHQpIHtcbiAgICAgICAgaWYgKCFyZXNvdXJjZS5kYXRhKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV4dCgpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gaWYgdGhpcyB3YXMgYW4gWEhSIGxvYWQgb2YgYSBibG9iXG4gICAgICAgIGlmIChyZXNvdXJjZS54aHIgJiYgcmVzb3VyY2UueGhyVHlwZSA9PT0gUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuQkxPQikge1xuICAgICAgICAgICAgLy8gaWYgdGhlcmUgaXMgbm8gYmxvYiBzdXBwb3J0IHdlIHByb2JhYmx5IGdvdCBhIGJpbmFyeSBzdHJpbmcgYmFja1xuICAgICAgICAgICAgaWYgKCF3aW5kb3cuQmxvYiB8fCB0eXBlb2YgcmVzb3VyY2UuZGF0YSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgICAgICB2YXIgdHlwZSA9IHJlc291cmNlLnhoci5nZXRSZXNwb25zZUhlYWRlcignY29udGVudC10eXBlJyk7XG5cbiAgICAgICAgICAgICAgICAvLyB0aGlzIGlzIGFuIGltYWdlLCBjb252ZXJ0IHRoZSBiaW5hcnkgc3RyaW5nIGludG8gYSBkYXRhIHVybFxuICAgICAgICAgICAgICAgIGlmICh0eXBlICYmIHR5cGUuaW5kZXhPZignaW1hZ2UnKSA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICByZXNvdXJjZS5kYXRhID0gbmV3IEltYWdlKCk7XG4gICAgICAgICAgICAgICAgICAgIHJlc291cmNlLmRhdGEuc3JjID0gJ2RhdGE6JyArIHR5cGUgKyAnO2Jhc2U2NCwnICsgYjY0LmVuY29kZUJpbmFyeShyZXNvdXJjZS54aHIucmVzcG9uc2VUZXh0KTtcblxuICAgICAgICAgICAgICAgICAgICByZXNvdXJjZS5pc0ltYWdlID0gdHJ1ZTtcblxuICAgICAgICAgICAgICAgICAgICAvLyB3YWl0IHVudGlsIHRoZSBpbWFnZSBsb2FkcyBhbmQgdGhlbiBjYWxsYmFja1xuICAgICAgICAgICAgICAgICAgICByZXNvdXJjZS5kYXRhLm9ubG9hZCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc291cmNlLmRhdGEub25sb2FkID0gbnVsbDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgbmV4dCgpO1xuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIGlmIGNvbnRlbnQgdHlwZSBzYXlzIHRoaXMgaXMgYW4gaW1hZ2UsIHRoZW4gd2Ugc2hvdWxkIHRyYW5zZm9ybSB0aGUgYmxvYiBpbnRvIGFuIEltYWdlIG9iamVjdFxuICAgICAgICAgICAgZWxzZSBpZiAocmVzb3VyY2UuZGF0YS50eXBlLmluZGV4T2YoJ2ltYWdlJykgPT09IDApIHtcbiAgICAgICAgICAgICAgICB2YXIgc3JjID0gVVJMLmNyZWF0ZU9iamVjdFVSTChyZXNvdXJjZS5kYXRhKTtcblxuICAgICAgICAgICAgICAgIHJlc291cmNlLmJsb2IgPSByZXNvdXJjZS5kYXRhO1xuICAgICAgICAgICAgICAgIHJlc291cmNlLmRhdGEgPSBuZXcgSW1hZ2UoKTtcbiAgICAgICAgICAgICAgICByZXNvdXJjZS5kYXRhLnNyYyA9IHNyYztcblxuICAgICAgICAgICAgICAgIHJlc291cmNlLmlzSW1hZ2UgPSB0cnVlO1xuXG4gICAgICAgICAgICAgICAgLy8gY2xlYW51cCB0aGUgbm8gbG9uZ2VyIHVzZWQgYmxvYiBhZnRlciB0aGUgaW1hZ2UgbG9hZHNcbiAgICAgICAgICAgICAgICByZXNvdXJjZS5kYXRhLm9ubG9hZCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgVVJMLnJldm9rZU9iamVjdFVSTChzcmMpO1xuICAgICAgICAgICAgICAgICAgICByZXNvdXJjZS5kYXRhLm9ubG9hZCA9IG51bGw7XG5cbiAgICAgICAgICAgICAgICAgICAgbmV4dCgpO1xuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBuZXh0KCk7XG4gICAgICAgIH1cbiAgICB9O1xufTtcbiIsIm1vZHVsZS5leHBvcnRzPXtcbiAgXCJuYW1lXCI6IFwicGl4aS5qc1wiLFxuICBcInZlcnNpb25cIjogXCIzLjAuMTAtZGV2XCIsXG4gIFwiZGVzY3JpcHRpb25cIjogXCJQaXhpLmpzIGlzIGEgZmFzdCBsaWdodHdlaWdodCAyRCBsaWJyYXJ5IHRoYXQgd29ya3MgYWNyb3NzIGFsbCBkZXZpY2VzLlwiLFxuICBcImF1dGhvclwiOiBcIk1hdCBHcm92ZXNcIixcbiAgXCJjb250cmlidXRvcnNcIjogW1xuICAgIFwiQ2hhZCBFbmdsZXIgPGNoYWRAcGFudGhlcmRldi5jb20+XCIsXG4gICAgXCJSaWNoYXJkIERhdmV5IDxyZGF2ZXlAZ21haWwuY29tPlwiXG4gIF0sXG4gIFwibWFpblwiOiBcIi4vc3JjL2luZGV4LmpzXCIsXG4gIFwiaG9tZXBhZ2VcIjogXCJodHRwOi8vZ29vZGJveWRpZ2l0YWwuY29tL1wiLFxuICBcImJ1Z3NcIjogXCJodHRwczovL2dpdGh1Yi5jb20vcGl4aWpzL3BpeGkuanMvaXNzdWVzXCIsXG4gIFwibGljZW5zZVwiOiBcIk1JVFwiLFxuICBcInJlcG9zaXRvcnlcIjoge1xuICAgIFwidHlwZVwiOiBcImdpdFwiLFxuICAgIFwidXJsXCI6IFwiaHR0cHM6Ly9naXRodWIuY29tL3BpeGlqcy9waXhpLmpzLmdpdFwiXG4gIH0sXG4gIFwic2NyaXB0c1wiOiB7XG4gICAgXCJzdGFydFwiOiBcImd1bHAgJiYgZ3VscCB3YXRjaFwiLFxuICAgIFwidGVzdFwiOiBcImd1bHAgJiYgdGVzdGVtIGNpXCIsXG4gICAgXCJidWlsZFwiOiBcImd1bHBcIixcbiAgICBcImRvY3NcIjogXCJqc2RvYyAtYyAuL2d1bHAvdXRpbC9qc2RvYy5jb25mLmpzb24gLVIgUkVBRE1FLm1kXCJcbiAgfSxcbiAgXCJmaWxlc1wiOiBbXG4gICAgXCJiaW4vXCIsXG4gICAgXCJzcmMvXCIsXG4gICAgXCJDT05UUklCVVRJTkcubWRcIixcbiAgICBcIkxJQ0VOU0VcIixcbiAgICBcInBhY2thZ2UuanNvblwiLFxuICAgIFwiUkVBRE1FLm1kXCJcbiAgXSxcbiAgXCJkZXBlbmRlbmNpZXNcIjoge1xuICAgIFwiYXN5bmNcIjogXCJeMS41LjBcIixcbiAgICBcImJyZnNcIjogXCJeMS40LjFcIixcbiAgICBcImVhcmN1dFwiOiBcIl4yLjAuN1wiLFxuICAgIFwiZXZlbnRlbWl0dGVyM1wiOiBcIl4xLjEuMVwiLFxuICAgIFwib2JqZWN0LWFzc2lnblwiOiBcIl40LjAuMVwiLFxuICAgIFwicGl4aS1nbC1jb3JlXCI6IFwiZ2l0K2h0dHBzOi8vZ2l0aHViLmNvbS9Hb29kQm95RGlnaXRhbC9waXhpLWdsLWNvcmUuZ2l0XCIsXG4gICAgXCJyZXNvdXJjZS1sb2FkZXJcIjogXCJeMS42LjRcIlxuICB9LFxuICBcImRldkRlcGVuZGVuY2llc1wiOiB7XG4gICAgXCJicm93c2VyaWZ5XCI6IFwiXjExLjEuMFwiLFxuICAgIFwiY2hhaVwiOiBcIl4zLjIuMFwiLFxuICAgIFwiZGVsXCI6IFwiXjIuMC4yXCIsXG4gICAgXCJndWxwXCI6IFwiXjMuOS4wXCIsXG4gICAgXCJndWxwLWNhY2hlZFwiOiBcIl4xLjEuMFwiLFxuICAgIFwiZ3VscC1jb25jYXRcIjogXCJeMi42LjBcIixcbiAgICBcImd1bHAtZGVidWdcIjogXCJeMi4xLjBcIixcbiAgICBcImd1bHAtaGVhZGVyXCI6IFwiXjEuNy4xXCIsXG4gICAgXCJndWxwLWpzaGludFwiOiBcIl4xLjExLjJcIixcbiAgICBcImd1bHAtbWlycm9yXCI6IFwiXjAuNC4wXCIsXG4gICAgXCJndWxwLXBsdW1iZXJcIjogXCJeMS4wLjFcIixcbiAgICBcImd1bHAtcmVuYW1lXCI6IFwiXjEuMi4yXCIsXG4gICAgXCJndWxwLXNvdXJjZW1hcHNcIjogXCJeMS41LjJcIixcbiAgICBcImd1bHAtdWdsaWZ5XCI6IFwiXjEuNC4xXCIsXG4gICAgXCJndWxwLXV0aWxcIjogXCJeMy4wLjZcIixcbiAgICBcImphZ3VhcmpzLWpzZG9jXCI6IFwiZ2l0K2h0dHBzOi8vZ2l0aHViLmNvbS9kYXZpZHNoaW1qcy9qYWd1YXJqcy1qc2RvYy5naXRcIixcbiAgICBcImpzZG9jXCI6IFwiXjMuMy4yXCIsXG4gICAgXCJqc2hpbnQtc3VtbWFyeVwiOiBcIl4wLjQuMFwiLFxuICAgIFwibWluaW1pc3RcIjogXCJeMS4yLjBcIixcbiAgICBcIm1vY2hhXCI6IFwiXjIuMy4yXCIsXG4gICAgXCJyZXF1aXJlLWRpclwiOiBcIl4wLjMuMFwiLFxuICAgIFwicnVuLXNlcXVlbmNlXCI6IFwiXjEuMS4yXCIsXG4gICAgXCJ0ZXN0ZW1cIjogXCJeMC45LjRcIixcbiAgICBcInZpbnlsLWJ1ZmZlclwiOiBcIl4xLjAuMFwiLFxuICAgIFwidmlueWwtc291cmNlLXN0cmVhbVwiOiBcIl4xLjEuMFwiLFxuICAgIFwid2F0Y2hpZnlcIjogXCJeMy40LjBcIlxuICB9LFxuICBcImJyb3dzZXJpZnlcIjoge1xuICAgIFwidHJhbnNmb3JtXCI6IFtcbiAgICAgIFwiYnJmc1wiXG4gICAgXVxuICB9XG59XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uL2NvcmUnKTtcblxuLy8gYWRkIHNvbWUgZXh0cmEgdmFyaWFibGVzIHRvIHRoZSBjb250YWluZXIuLlxuT2JqZWN0LmFzc2lnbihcbiAgICBjb3JlLkRpc3BsYXlPYmplY3QucHJvdG90eXBlLFxuICAgIHJlcXVpcmUoJy4vYWNjZXNzaWJsZVRhcmdldCcpXG4pO1xuXG5cbi8qKlxuICogVGhlIEFjY2Vzc2liaWxpdHkgbWFuYWdlciByZWFjcmVhdGVzIHRoZSBhYmlsaXR5IHRvIHRhYiBhbmQgYW5kIGhhdmUgY29udGVudCByZWFkIGJ5IHNjcmVlbiByZWFkZXJzLiBUaGlzIGlzIHZlcnkgaW1wb3J0YW50IGFzIGl0IGNhbiBwb3NzaWJseSBoZWxwIHBlb3BsZSB3aXRoIGRpc2FiaWxpdGllcyBhY2Nlc3MgcGl4aSBjb250ZW50LlxuICogTXVjaCBsaWtlIGludGVyYWN0aW9uIGFueSBEaXNwbGF5T2JqZWN0IGNhbiBiZSBtYWRlIGFjY2Vzc2libGUuIFRoaXMgbWFuYWdlciB3aWxsIG1hcCB0aGUgZXZlbnRzIGFzIGlmIHRoZSBtb3VzZSB3YXMgYmVpbmcgdXNlZCwgbWluaW1pemluZyB0aGUgZWZmZXJvdCByZXF1aXJlZCB0byBpbXBsZW1lbnQuXG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLkNhbnZhc1JlbmRlcmVyfFBJWEkuV2ViR0xSZW5kZXJlcn0gQSByZWZlcmVuY2UgdG8gdGhlIGN1cnJlbnQgcmVuZGVyZXJcbiAqL1xuZnVuY3Rpb24gQWNjZXNzaWJpbGl0eU1hbmFnZXIocmVuZGVyZXIpXG57XG5cdC8vIGZpcnN0IHdlIGNyZWF0ZSBhIGRpdiB0aGF0IHdpbGwgc2l0IG92ZXIgdGhlIHBpeGkgZWxlbWVudC4gVGhpcyBpcyB3aGVyZSB0aGUgZGl2IG92ZXJsYXlzIHdpbGwgZ28uXG4gICAgdmFyIGRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgIFxuICAgIGRpdi5zdHlsZS53aWR0aCA9IDEwMCArICdweCc7XG4gICAgZGl2LnN0eWxlLmhlaWdodCA9IDEwMCArICdweCc7XG4gICAgZGl2LnN0eWxlLnBvc2l0aW9uID0gJ2Fic29sdXRlJztcbiAgICBkaXYuc3R5bGUudG9wID0gMDtcbiAgICBkaXYuc3R5bGUubGVmdCA9IDA7XG4gICAvL1xuICAgIGRpdi5zdHlsZS56SW5kZXggPSAyO1xuICAgXHRcbiAgIFx0LyoqXG4gICBcdCAqIFRoaXMgaXMgdGhlIGRvbSBlbGVtZW50IHRoYXQgd2lsbCBzaXQgb3ZlciB0aGUgcGl4aSBlbGVtZW50LiBUaGlzIGlzIHdoZXJlIHRoZSBkaXYgb3ZlcmxheXMgd2lsbCBnby5cbiAgIFx0ICogXG4gICBcdCAqIEB0eXBlIHtIVE1MRWxlbWVudH1cbiAgIFx0ICogQHByaXZhdGVcbiAgIFx0ICovXG4gICBcdHRoaXMuZGl2ID0gZGl2O1xuXG4gICBcdC8qKlxuICAgXHQgKiBBIHNpbXBsZSBwb29sIGZvciBzdG9yaW5nIGRpdnMuXG4gICBcdCAqIFxuICAgXHQgKiBAdHlwZSB7QXJyYXl9XG4gICBcdCAqIEBwcml2YXRlXG4gICBcdCAqL1xuIFx0dGhpcy5wb29sID0gW107XG5cbiBcdC8qKlxuIFx0ICogVGhpcyBpcyBhIHRpY2sgdXNlZCB0byBjaGVjayBpZiBhbiBvYmplY3QgaXMgbm8gbG9uZ2VyIGJlaW5nIHJlbmRlcmVkLlxuIFx0ICogXG4gXHQgKiBAdHlwZSB7TnVtYmVyfVxuIFx0ICogQHByaXZhdGVcbiBcdCAqL1xuICAgXHR0aGlzLnJlbmRlcklkID0gMDtcblxuICAgXHQvKipcbiAgIFx0ICogU2V0dGluZyB0aGlzIHRvIHRydWUgd2lsbCB2aXN1YWxseSBzaG93IHRoZSBkaXZzXG4gICBcdCAqIFxuICAgXHQgKiBAdHlwZSB7Qm9vbGVhbn1cbiAgIFx0ICovXG4gICBcdHRoaXMuZGVidWcgPSBmYWxzZTtcblxuICBcdC8qKlxuICAgICAqIFRoZSByZW5kZXJlciB0aGlzIGFjY2Vzc2liaWxpdHkgbWFuYWdlciB3b3JrcyBmb3IuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlN5c3RlbVJlbmRlcmVyfVxuICAgICAqL1xuICAgXHR0aGlzLnJlbmRlcmVyID0gcmVuZGVyZXI7XG5cbiAgIFx0LyoqXG4gICAgICogVGhlIGFycmF5IG9mIGN1cnJlbnRseSBhY3RpdmUgYWNjZXNzaWJsZSBpdGVtcy5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge0FycmF5fVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICBcdHRoaXMuY2hpbGRyZW4gPSBbXTtcbiAgIFx0XG4gICBcdC8qKlxuICAgICAqIHByZSBiaW5kIHRoZSBmdW5jdGlvbnMuLlxuICAgICAqL1xuICAgXHR0aGlzLl9vbktleURvd24gPSB0aGlzLl9vbktleURvd24uYmluZCh0aGlzKTtcbiAgIFx0dGhpcy5fb25Nb3VzZU1vdmUgPSB0aGlzLl9vbk1vdXNlTW92ZS5iaW5kKHRoaXMpO1xuICAgXHRcbiAgIFx0LyoqXG4gICAgICogc3RvcmVzIHRoZSBzdGF0ZSBvZiB0aGUgbWFuYWdlci4gSWYgdGhlcmUgYXJlIG5vIGFjY2Vzc2libGUgb2JqZWN0cyBvciB0aGUgbW91c2UgaXMgbW92aW5nIHRoZSB3aWxsIGJlIGZhbHNlLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7QXJyYXl9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgIFx0dGhpcy5pc0FjdGl2ZSA9IGZhbHNlO1xuXG5cbiAgIFx0Ly8gbGV0IGxpc3RlbiBmb3IgdGFiLi4gb25jZSBwcmVzc2VkIHdlIGNhbiBmaXJlIHVwIGFuZCBzaG93IHRoZSBhY2Nlc3NpYmlsaXR5IGxheWVyXG4gICBcdHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdrZXlkb3duJywgdGhpcy5fb25LZXlEb3duLCBmYWxzZSk7XG59XG5cblxuQWNjZXNzaWJpbGl0eU1hbmFnZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gQWNjZXNzaWJpbGl0eU1hbmFnZXI7XG5tb2R1bGUuZXhwb3J0cyA9IEFjY2Vzc2liaWxpdHlNYW5hZ2VyO1xuXG4vKipcbiAqIEFjdGl2YXRpbmcgd2lsbCBjYXVzZSB0aGUgQWNjZXNzaWJpbGl0eSBsYXllciB0byBiZSBzaG93bi4gVGhpcyBpcyBjYWxsZWQgd2hlbiBhIHVzZXIgcHJlc2VzIHRoZSB0YWIga2V5XG4gKiBAcHJpdmF0ZVxuICovXG5BY2Nlc3NpYmlsaXR5TWFuYWdlci5wcm90b3R5cGUuYWN0aXZhdGUgPSBmdW5jdGlvbigpXG57XG5cdGlmKHRoaXMuaXNBY3RpdmUpXG5cdHtcblx0XHRyZXR1cm47XG5cdH1cblxuXHR0aGlzLmlzQWN0aXZlID0gdHJ1ZTtcblxuXHR3aW5kb3cuZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignbW91c2Vtb3ZlJywgdGhpcy5fb25Nb3VzZU1vdmUsIHRydWUpO1xuXHR3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsIHRoaXMuX29uS2V5RG93biwgZmFsc2UpO1xuXG5cdHRoaXMucmVuZGVyZXIub24oJ3Bvc3RyZW5kZXInLCB0aGlzLnVwZGF0ZSwgdGhpcyk7XG5cblx0dGhpcy5yZW5kZXJlci52aWV3LnBhcmVudE5vZGUuYXBwZW5kQ2hpbGQodGhpcy5kaXYpO1x0XG59O1xuXG4vKipcbiAqIERlYWN0aXZhdGluZyB3aWxsIGNhdXNlIHRoZSBBY2Nlc3NpYmlsaXR5IGxheWVyIHRvIGJlIGhpZGRlbi4gVGhpcyBpcyBjYWxsZWQgd2hlbiBhIHVzZXIgbW92ZXMgdGhlIG1vdXNlXG4gKiBAcHJpdmF0ZVxuICovXG5BY2Nlc3NpYmlsaXR5TWFuYWdlci5wcm90b3R5cGUuZGVhY3RpdmF0ZSA9IGZ1bmN0aW9uKClcbntcblx0aWYoIXRoaXMuaXNBY3RpdmUpXG5cdHtcblx0XHRyZXR1cm47XG5cdH1cblxuXHR0aGlzLmlzQWN0aXZlID0gZmFsc2U7XG5cblx0d2luZG93LmRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21vdXNlbW92ZScsIHRoaXMuX29uTW91c2VNb3ZlKTtcblx0d2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLCB0aGlzLl9vbktleURvd24sIGZhbHNlKTtcblxuXHR0aGlzLnJlbmRlcmVyLm9mZigncG9zdHJlbmRlcicsIHRoaXMudXBkYXRlKTtcblxuXHR0aGlzLmRpdi5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHRoaXMuZGl2KTtcblxufTtcblxuLyoqXG4gKiBUaGlzIHJlY3Vyc2l2ZSBmdW5jdGlvbiB3aWxsIHJ1biB0aHJvdWdodCBoZSBzY2VuZSBncmFwaCBhbmQgYWRkIGFueSBuZXcgYWNjZXNzaWJsZSBvYmplY3RzIHRvIHRoZSBET00gbGF5ZXIuXG4gKiBAcGFyYW0gZWxlbWVudCB7UElYSS5Db250YWluZXJ8UElYSS5TcHJpdGV8UElYSS5leHRyYXMuVGlsaW5nU3ByaXRlfSB0aGUgRGlzcGxheU9iamVjdCB0byBjaGVjay5cbiAqIEBwcml2YXRlXG4gKi9cbkFjY2Vzc2liaWxpdHlNYW5hZ2VyLnByb3RvdHlwZS51cGRhdGVBY2Nlc3NpYmxlT2JqZWN0cyA9IGZ1bmN0aW9uKGRpc3BsYXlPYmplY3QpXG57XG5cdGlmKCFkaXNwbGF5T2JqZWN0LnZpc2libGUpXG5cdHtcblx0XHRyZXR1cm47XG5cdH1cblxuXHRpZihkaXNwbGF5T2JqZWN0LmFjY2Vzc2libGUgJiYgZGlzcGxheU9iamVjdC5pbnRlcmFjdGl2ZSlcblx0e1xuXHRcdGlmKCFkaXNwbGF5T2JqZWN0Ll9hY2Nlc3NpYmxlQWN0aXZlKVxuXHRcdHtcblx0XHRcdHRoaXMuYWRkQ2hpbGQoZGlzcGxheU9iamVjdCk7XG5cdFx0fVxuXHQgICBcdFxuXHQgICBcdGRpc3BsYXlPYmplY3QucmVuZGVySWQgPSB0aGlzLnJlbmRlcklkO1xuXHR9XG5cblx0dmFyIGNoaWxkcmVuID0gZGlzcGxheU9iamVjdC5jaGlsZHJlbjtcblxuXHRmb3IgKHZhciBpID0gY2hpbGRyZW4ubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcblx0XHRcblx0XHR0aGlzLnVwZGF0ZUFjY2Vzc2libGVPYmplY3RzKGNoaWxkcmVuW2ldKTtcblx0fVxufTtcblxuXG4vKipcbiAqIEJlZm9yZSBlYWNoIHJlbmRlciB0aGlzIGZ1bmN0aW9uIHdpbGwgZW5zdXJlIHRoYXQgYWxsIGRpdnMgYXJlIG1hcHBlZCBjb3JyZWN0bHkgdG8gdGhlaXIgRGlzcGxheU9iamVjdHNcbiAqIEBwcml2YXRlXG4gKi9cbkFjY2Vzc2liaWxpdHlNYW5hZ2VyLnByb3RvdHlwZS51cGRhdGUgPSBmdW5jdGlvbigpXG57XG5cblx0Ly8gdXBkYXRlIGNoaWxkcmVuLi4uXG5cdHRoaXMudXBkYXRlQWNjZXNzaWJsZU9iamVjdHModGhpcy5yZW5kZXJlci5fbGFzdE9iamVjdFJlbmRlcmVkKTtcblxuXHR2YXIgcmVjdCA9IHRoaXMucmVuZGVyZXIudmlldy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcblx0dmFyIHN4ID0gcmVjdC53aWR0aCAgLyB0aGlzLnJlbmRlcmVyLndpZHRoO1xuXHR2YXIgc3kgPSByZWN0LmhlaWdodCAvIHRoaXMucmVuZGVyZXIuaGVpZ2h0O1xuXG5cdHZhciBkaXYgPSB0aGlzLmRpdjtcblxuXHRkaXYuc3R5bGUubGVmdCA9IHJlY3QubGVmdCArICdweCc7XG5cdGRpdi5zdHlsZS50b3AgPSByZWN0LnRvcCArICdweCc7XG5cdGRpdi5zdHlsZS53aWR0aCA9IHRoaXMucmVuZGVyZXIud2lkdGggKyAncHgnO1xuXHRkaXYuc3R5bGUuaGVpZ2h0ID0gdGhpcy5yZW5kZXJlci5oZWlnaHQgKyAncHgnO1xuXG5cdGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5jaGlsZHJlbi5sZW5ndGg7IGkrKylcblx0e1xuXG5cdFx0dmFyIGNoaWxkID0gdGhpcy5jaGlsZHJlbltpXTtcblxuXHRcdGlmKGNoaWxkLnJlbmRlcklkICE9PSB0aGlzLnJlbmRlcklkKVxuXHRcdHtcblx0XHRcdGNoaWxkLl9hY2Nlc3NpYmxlQWN0aXZlID0gZmFsc2U7XG5cbiAgICAgICAgICAgIGNvcmUudXRpbHMucmVtb3ZlSXRlbXModGhpcy5jaGlsZHJlbiwgaSwgMSk7XG5cdFx0XHR0aGlzLmRpdi5yZW1vdmVDaGlsZCggY2hpbGQuX2FjY2Vzc2libGVEaXYgKTtcblx0XHRcdHRoaXMucG9vbC5wdXNoKGNoaWxkLl9hY2Nlc3NpYmxlRGl2KTtcblx0XHRcdGNoaWxkLl9hY2Nlc3NpYmxlRGl2ID0gbnVsbDtcblxuXHRcdFx0aS0tO1xuXG5cdFx0XHRpZih0aGlzLmNoaWxkcmVuLmxlbmd0aCA9PT0gMClcblx0XHRcdHtcblx0XHRcdFx0dGhpcy5kZWFjdGl2YXRlKCk7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdGVsc2Vcblx0XHR7XG5cdFx0XHQvLyBtYXAgZGl2IHRvIGRpc3BsYXkuLlxuXHRcdFx0ZGl2ID0gY2hpbGQuX2FjY2Vzc2libGVEaXY7XG5cdFx0XHR2YXIgaGl0QXJlYSA9IGNoaWxkLmhpdEFyZWE7XG5cdFx0XHR2YXIgd3QgPSBjaGlsZC53b3JsZFRyYW5zZm9ybTtcblxuXHRcdFx0aWYoY2hpbGQuaGl0QXJlYSlcblx0XHRcdHtcblx0XHRcdFx0ZGl2LnN0eWxlLmxlZnQgPSAoKHd0LnR4ICsgKGhpdEFyZWEueCAqIHd0LmEpKSAqIHN4KSArICdweCc7XG5cdFx0XHRcdGRpdi5zdHlsZS50b3AgPSAgKCh3dC50eSArIChoaXRBcmVhLnkgKiB3dC5kKSkgKiBzeSkgKyAgJ3B4JztcblxuXHRcdFx0XHRkaXYuc3R5bGUud2lkdGggPSAoaGl0QXJlYS53aWR0aCAqIHd0LmEgKiBzeCkgKyAncHgnO1xuXHRcdFx0XHRkaXYuc3R5bGUuaGVpZ2h0ID0gKGhpdEFyZWEuaGVpZ2h0ICogd3QuZCAqIHN5KSArICdweCc7XG5cdFx0XHRcblx0XHRcdH1cblx0XHRcdGVsc2Vcblx0XHRcdHtcblx0XHRcdFx0aGl0QXJlYSA9IGNoaWxkLmdldEJvdW5kcygpO1xuXG5cdFx0XHRcdHRoaXMuY2FwSGl0QXJlYShoaXRBcmVhKTtcblxuXHRcdFx0XHRkaXYuc3R5bGUubGVmdCA9IChoaXRBcmVhLnggKiBzeCkgKyAncHgnO1xuXHRcdFx0XHRkaXYuc3R5bGUudG9wID0gIChoaXRBcmVhLnkgKiBzeSkgKyAgJ3B4JztcblxuXHRcdFx0XHRkaXYuc3R5bGUud2lkdGggPSAoaGl0QXJlYS53aWR0aCAqIHN4KSArICdweCc7XG5cdFx0XHRcdGRpdi5zdHlsZS5oZWlnaHQgPSAoaGl0QXJlYS5oZWlnaHQgKiBzeSkgKyAncHgnO1xuXHRcdFx0fVx0XHRcblx0XHR9XG5cdH1cblxuXHQvLyBpbmNyZW1lbnQgdGhlIHJlbmRlciBpZC4uXG5cdHRoaXMucmVuZGVySWQrKztcbn07XG5cbkFjY2Vzc2liaWxpdHlNYW5hZ2VyLnByb3RvdHlwZS5jYXBIaXRBcmVhID0gZnVuY3Rpb24gKGhpdEFyZWEpXG57XG4gICAgaWYgKGhpdEFyZWEueCA8IDApXG4gICAge1xuICAgICAgICBoaXRBcmVhLndpZHRoICs9IGhpdEFyZWEueDtcbiAgICAgICAgaGl0QXJlYS54ID0gMDtcbiAgICB9XG5cbiAgICBpZiAoaGl0QXJlYS55IDwgMClcbiAgICB7XG4gICAgICAgIGhpdEFyZWEuaGVpZ2h0ICs9IGhpdEFyZWEueTtcbiAgICAgICAgaGl0QXJlYS55ID0gMDtcbiAgICB9XG5cbiAgICBpZiAoIGhpdEFyZWEueCArIGhpdEFyZWEud2lkdGggPiB0aGlzLnJlbmRlcmVyLndpZHRoIClcbiAgICB7XG4gICAgICAgIGhpdEFyZWEud2lkdGggPSB0aGlzLnJlbmRlcmVyLndpZHRoIC0gaGl0QXJlYS54O1xuICAgIH1cblxuICAgIGlmICggaGl0QXJlYS55ICsgaGl0QXJlYS5oZWlnaHQgPiB0aGlzLnJlbmRlcmVyLmhlaWdodCApXG4gICAge1xuICAgICAgICBoaXRBcmVhLmhlaWdodCA9IHRoaXMucmVuZGVyZXIuaGVpZ2h0IC0gaGl0QXJlYS55O1xuICAgIH1cbn07XG5cblxuLyoqXG4gKiBBZGRzIGEgRGlzcGxheU9iamVjdCB0byB0aGUgYWNjZXNzaWJpbGl0eSBtYW5hZ2VyXG4gKiBAcHJpdmF0ZVxuICovXG5BY2Nlc3NpYmlsaXR5TWFuYWdlci5wcm90b3R5cGUuYWRkQ2hpbGQgPSBmdW5jdGlvbihkaXNwbGF5T2JqZWN0KVxue1xuLy9cdHRoaXMuYWN0aXZhdGUoKTtcblx0XG5cdHZhciBkaXYgPSB0aGlzLnBvb2wucG9wKCk7XG5cblx0aWYoIWRpdilcblx0e1xuXHRcdGRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2J1dHRvbicpOyBcblxuXHQgICAgZGl2LnN0eWxlLndpZHRoID0gMTAwICsgJ3B4Jztcblx0ICAgIGRpdi5zdHlsZS5oZWlnaHQgPSAxMDAgKyAncHgnO1xuXHQgICAgZGl2LnN0eWxlLmJhY2tncm91bmRDb2xvciA9IHRoaXMuZGVidWcgPyAncmdiYSgyNTUsMCwwLDAuNSknIDogJ3RyYW5zcGFyZW50Jztcblx0ICAgIGRpdi5zdHlsZS5wb3NpdGlvbiA9ICdhYnNvbHV0ZSc7XG5cdCAgICBkaXYuc3R5bGUuekluZGV4ID0gMjtcblx0ICAgIGRpdi5zdHlsZS5ib3JkZXJTdHlsZSA9ICdub25lJztcblxuXHQgICAgXG5cdCAgICBkaXYuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCB0aGlzLl9vbkNsaWNrLmJpbmQodGhpcykpO1xuXHQgICAgZGl2LmFkZEV2ZW50TGlzdGVuZXIoJ2ZvY3VzJywgdGhpcy5fb25Gb2N1cy5iaW5kKHRoaXMpKTtcblx0ICAgIGRpdi5hZGRFdmVudExpc3RlbmVyKCdmb2N1c291dCcsIHRoaXMuX29uRm9jdXNPdXQuYmluZCh0aGlzKSk7XG5cdH1cblx0ICAgXHRcblxuXG5cblx0ZGl2LnRpdGxlID0gZGlzcGxheU9iamVjdC5hY2Nlc3NpYmxlVGl0bGUgfHwgJ2Rpc3BsYXlPYmplY3QgJyArIHRoaXMudGFiSW5kZXg7XG5cblx0Ly9cblx0XG5cdGRpc3BsYXlPYmplY3QuX2FjY2Vzc2libGVBY3RpdmUgPSB0cnVlO1xuXHRkaXNwbGF5T2JqZWN0Ll9hY2Nlc3NpYmxlRGl2ID0gZGl2O1xuXHRkaXYuZGlzcGxheU9iamVjdCA9IGRpc3BsYXlPYmplY3Q7XG5cblxuXHR0aGlzLmNoaWxkcmVuLnB1c2goZGlzcGxheU9iamVjdCk7XG5cdHRoaXMuZGl2LmFwcGVuZENoaWxkKCBkaXNwbGF5T2JqZWN0Ll9hY2Nlc3NpYmxlRGl2ICk7XG5cdGRpc3BsYXlPYmplY3QuX2FjY2Vzc2libGVEaXYudGFiSW5kZXggPSBkaXNwbGF5T2JqZWN0LnRhYkluZGV4O1xufTtcblxuXG4vKipcbiAqIE1hcHMgdGhlIGRpdiBidXR0b24gcHJlc3MgdG8gcGl4aSdzIEludGVyYWN0aW9uTWFuYWdlciAoY2xpY2spXG4gKiBAcHJpdmF0ZVxuICovXG5BY2Nlc3NpYmlsaXR5TWFuYWdlci5wcm90b3R5cGUuX29uQ2xpY2sgPSBmdW5jdGlvbihlKVxue1xuXHR2YXIgaW50ZXJhY3Rpb25NYW5hZ2VyID0gdGhpcy5yZW5kZXJlci5wbHVnaW5zLmludGVyYWN0aW9uO1xuXHRpbnRlcmFjdGlvbk1hbmFnZXIuZGlzcGF0Y2hFdmVudChlLnRhcmdldC5kaXNwbGF5T2JqZWN0LCAnY2xpY2snLCBpbnRlcmFjdGlvbk1hbmFnZXIuZXZlbnREYXRhKTtcbn07XG5cbi8qKlxuICogTWFwcyB0aGUgZGl2IGZvY3VzIGV2ZW50cyB0byBwaXhpcyBJbnRlcmFjdGlvbk1hbmFnZXIgKG1vdXNlb3ZlcilcbiAqIEBwcml2YXRlXG4gKi9cbkFjY2Vzc2liaWxpdHlNYW5hZ2VyLnByb3RvdHlwZS5fb25Gb2N1cyA9IGZ1bmN0aW9uKGUpXG57XG5cdHZhciBpbnRlcmFjdGlvbk1hbmFnZXIgPSB0aGlzLnJlbmRlcmVyLnBsdWdpbnMuaW50ZXJhY3Rpb247XG5cdGludGVyYWN0aW9uTWFuYWdlci5kaXNwYXRjaEV2ZW50KGUudGFyZ2V0LmRpc3BsYXlPYmplY3QsICdtb3VzZW92ZXInLCBpbnRlcmFjdGlvbk1hbmFnZXIuZXZlbnREYXRhKTtcbn07XG5cbi8qKlxuICogTWFwcyB0aGUgZGl2IGZvY3VzIGV2ZW50cyB0byBwaXhpcyBJbnRlcmFjdGlvbk1hbmFnZXIgKG1vdXNlb3V0KVxuICogQHByaXZhdGVcbiAqL1xuQWNjZXNzaWJpbGl0eU1hbmFnZXIucHJvdG90eXBlLl9vbkZvY3VzT3V0ID0gZnVuY3Rpb24oZSlcbntcblx0dmFyIGludGVyYWN0aW9uTWFuYWdlciA9IHRoaXMucmVuZGVyZXIucGx1Z2lucy5pbnRlcmFjdGlvbjtcblx0aW50ZXJhY3Rpb25NYW5hZ2VyLmRpc3BhdGNoRXZlbnQoZS50YXJnZXQuZGlzcGxheU9iamVjdCwgJ21vdXNlb3V0JywgaW50ZXJhY3Rpb25NYW5hZ2VyLmV2ZW50RGF0YSk7XG59O1xuXG4vKipcbiAqIElzIGNhbGxlZCB3aGVuIGEga2V5IGlzIHByZXNzZWRcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5BY2Nlc3NpYmlsaXR5TWFuYWdlci5wcm90b3R5cGUuX29uS2V5RG93biA9IGZ1bmN0aW9uKGUpXG57XG5cdGlmKGUua2V5Q29kZSAhPT0gOSlcblx0e1xuXHRcdHJldHVybjtcblx0fVxuXG5cdHRoaXMuYWN0aXZhdGUoKTtcbn07XG5cbi8qKlxuICogSXMgY2FsbGVkIHdoZW4gdGhlIG1vdXNlIG1vdmVzIGFjcm9zcyB0aGUgcmVuZGVyZXIgZWxlbWVudFxuICpcbiAqIEBwcml2YXRlXG4gKi9cbkFjY2Vzc2liaWxpdHlNYW5hZ2VyLnByb3RvdHlwZS5fb25Nb3VzZU1vdmUgPSBmdW5jdGlvbigpXG57XG5cdHRoaXMuZGVhY3RpdmF0ZSgpO1xufTtcblxuXG4vKipcbiAqIERlc3Ryb3lzIHRoZSBhY2Nlc3NpYmlsaXR5IG1hbmFnZXJcbiAqXG4gKi9cbkFjY2Vzc2liaWxpdHlNYW5hZ2VyLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKCkgXG57XG5cdHRoaXMuZGl2ID0gbnVsbDtcblxuXHRmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuY2hpbGRyZW4ubGVuZ3RoOyBpKyspXG5cdHtcblx0XHR0aGlzLmNoaWxkcmVuW2ldLmRpdiA9IG51bGw7XG5cdH1cblxuXHRcblx0d2luZG93LmRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21vdXNlbW92ZScsIHRoaXMuX29uTW91c2VNb3ZlKTtcblx0d2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLCB0aGlzLl9vbktleURvd24pO1xuXHRcdFxuXHR0aGlzLnBvb2wgPSBudWxsO1xuXHR0aGlzLmNoaWxkcmVuID0gbnVsbDtcblx0dGhpcy5yZW5kZXJlciA9IG51bGw7XG5cbn07XG5cbmNvcmUuV2ViR0xSZW5kZXJlci5yZWdpc3RlclBsdWdpbignYWNjZXNzaWJpbGl0eScsIEFjY2Vzc2liaWxpdHlNYW5hZ2VyKTtcbmNvcmUuQ2FudmFzUmVuZGVyZXIucmVnaXN0ZXJQbHVnaW4oJ2FjY2Vzc2liaWxpdHknLCBBY2Nlc3NpYmlsaXR5TWFuYWdlcik7XG5cbiIsIi8qKlxuICogRGVmYXVsdCBwcm9wZXJ0eSB2YWx1ZXMgb2YgYWNjZXNzaWJsZSBvYmplY3RzXG4gKiB1c2VkIGJ5IHtAbGluayBQSVhJLmFjY2Vzc2liaWxpdHkuQWNjZXNzaWJpbGl0eU1hbmFnZXJ9LlxuICpcbiAqIEBtaXhpblxuICogQG1lbWJlcm9mIFBJWElcbiAqIEBleGFtcGxlXG4gKiAgICAgIGZ1bmN0aW9uIE15T2JqZWN0KCkge31cbiAqXG4gKiAgICAgIE9iamVjdC5hc3NpZ24oXG4gKiAgICAgICAgICBNeU9iamVjdC5wcm90b3R5cGUsXG4gKiAgICAgICAgICBQSVhJLmFjY2Vzc2liaWxpdHkuYWNjZXNzaWJsZVRhcmdldFxuICogICAgICApO1xuICovXG52YXIgYWNjZXNzaWJsZVRhcmdldCA9IHtcbiAgICBcbiAgICAvKipcbiAgICAgKiBAdG9kbyBOZWVkcyBkb2NzLlxuICAgICAqL1xuICAgIGFjY2Vzc2libGU6ZmFsc2UsXG5cbiAgICAvKipcbiAgICAgKiBAdG9kbyBOZWVkcyBkb2NzLlxuICAgICAqL1xuICAgIGFjY2Vzc2libGVUaXRsZTpudWxsLFxuXG4gICAgLyoqXG4gICAgICogQHRvZG8gTmVlZHMgZG9jcy5cbiAgICAgKi9cbiAgICB0YWJJbmRleDowLFxuXG4gICAgLyoqXG4gICAgICogQHRvZG8gTmVlZHMgZG9jcy5cbiAgICAgKi9cbiAgICBfYWNjZXNzaWJsZUFjdGl2ZTpmYWxzZSxcblxuICAgIC8qKlxuICAgICAqIEB0b2RvIE5lZWRzIGRvY3MuXG4gICAgICovXG4gICAgX2FjY2Vzc2libGVEaXY6ZmFsc2VcblxufTtcblxubW9kdWxlLmV4cG9ydHMgPSBhY2Nlc3NpYmxlVGFyZ2V0O1xuIiwiLyoqXG4gKiBAZmlsZSAgICAgICAgTWFpbiBleHBvcnQgb2YgdGhlIFBJWEkgYWNjZXNzaWJpbGl0eSBsaWJyYXJ5XG4gKiBAYXV0aG9yICAgICAgTWF0IEdyb3ZlcyA8bWF0QGdvb2Rib3lkaWdpdGFsLmNvbT5cbiAqIEBjb3B5cmlnaHQgICAyMDEzLTIwMTUgR29vZEJveURpZ2l0YWxcbiAqIEBsaWNlbnNlICAgICB7QGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL3BpeGlqcy9waXhpLmpzL2Jsb2IvbWFzdGVyL0xJQ0VOU0V8TUlUIExpY2Vuc2V9XG4gKi9cblxuLyoqXG4gKiBAbmFtZXNwYWNlIFBJWEkuaW50ZXJhY3Rpb25cbiAqL1xubW9kdWxlLmV4cG9ydHMgPSB7XG4gICAgYWNjZXNzaWJsZVRhcmdldDogICAgIHJlcXVpcmUoJy4vYWNjZXNzaWJsZVRhcmdldCcpLFxuICAgIEFjY2Vzc2liaWxpdHlNYW5hZ2VyOiByZXF1aXJlKCcuL0FjY2Vzc2liaWxpdHlNYW5hZ2VyJylcbn07XG4iLCIvKipcbiAqIENvbnN0YW50IHZhbHVlcyB1c2VkIGluIHBpeGlcbiAqXG4gKiBAbGVuZHMgUElYSVxuICovXG52YXIgQ09OU1QgPSB7XG4gICAgLyoqXG4gICAgICogU3RyaW5nIG9mIHRoZSBjdXJyZW50IFBJWEkgdmVyc2lvblxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBjb25zdGFudFxuICAgICAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBWRVJTSU9OXG4gICAgICovXG4gICAgVkVSU0lPTjogcmVxdWlyZSgnLi4vLi4vcGFja2FnZS5qc29uJykudmVyc2lvbixcblxuICAgIC8qKlxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBQSV8yIC0gVHdvIFBpXG4gICAgICogQGNvbnN0YW50XG4gICAgICogQHN0YXRpY1xuICAgICAqL1xuICAgIFBJXzI6IE1hdGguUEkgKiAyLFxuXG4gICAgLyoqXG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IFJBRF9UT19ERUcgLSBDb25zdGFudCBjb252ZXJzaW9uIGZhY3RvciBmb3IgY29udmVydGluZyByYWRpYW5zIHRvIGRlZ3JlZXNcbiAgICAgKiBAY29uc3RhbnRcbiAgICAgKiBAc3RhdGljXG4gICAgICovXG4gICAgUkFEX1RPX0RFRzogMTgwIC8gTWF0aC5QSSxcblxuICAgIC8qKlxuICAgICAqIEBwcm9wZXJ0eSB7TnVtYmVyfSBERUdfVE9fUkFEIC0gQ29uc3RhbnQgY29udmVyc2lvbiBmYWN0b3IgZm9yIGNvbnZlcnRpbmcgZGVncmVlcyB0byByYWRpYW5zXG4gICAgICogQGNvbnN0YW50XG4gICAgICogQHN0YXRpY1xuICAgICAqL1xuICAgIERFR19UT19SQUQ6IE1hdGguUEkgLyAxODAsXG5cbiAgICAvKipcbiAgICAgKiBUYXJnZXQgZnJhbWVzIHBlciBtaWxsaXNlY29uZC5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAY29uc3RhbnRcbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gVEFSR0VUX0ZQTVM9MC4wNlxuICAgICAqL1xuICAgIFRBUkdFVF9GUE1TOiAwLjA2LFxuXG4gICAgLyoqXG4gICAgICogQ29uc3RhbnQgdG8gaWRlbnRpZnkgdGhlIFJlbmRlcmVyIFR5cGUuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQGNvbnN0YW50XG4gICAgICogQHByb3BlcnR5IHtvYmplY3R9IFJFTkRFUkVSX1RZUEVcbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gUkVOREVSRVJfVFlQRS5VTktOT1dOXG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IFJFTkRFUkVSX1RZUEUuV0VCR0xcbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gUkVOREVSRVJfVFlQRS5DQU5WQVNcbiAgICAgKi9cbiAgICBSRU5ERVJFUl9UWVBFOiB7XG4gICAgICAgIFVOS05PV046ICAgIDAsXG4gICAgICAgIFdFQkdMOiAgICAgIDEsXG4gICAgICAgIENBTlZBUzogICAgIDJcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVmFyaW91cyBibGVuZCBtb2RlcyBzdXBwb3J0ZWQgYnkgUElYSS4gSU1QT1JUQU5UIC0gVGhlIFdlYkdMIHJlbmRlcmVyIG9ubHkgc3VwcG9ydHNcbiAgICAgKiB0aGUgTk9STUFMLCBBREQsIE1VTFRJUExZIGFuZCBTQ1JFRU4gYmxlbmQgbW9kZXMuIEFueXRoaW5nIGVsc2Ugd2lsbCBzaWxlbnRseSBhY3QgbGlrZVxuICAgICAqIE5PUk1BTC5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAY29uc3RhbnRcbiAgICAgKiBAcHJvcGVydHkge29iamVjdH0gQkxFTkRfTU9ERVNcbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gQkxFTkRfTU9ERVMuTk9STUFMXG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IEJMRU5EX01PREVTLkFERFxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBCTEVORF9NT0RFUy5NVUxUSVBMWVxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBCTEVORF9NT0RFUy5TQ1JFRU5cbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gQkxFTkRfTU9ERVMuT1ZFUkxBWVxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBCTEVORF9NT0RFUy5EQVJLRU5cbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gQkxFTkRfTU9ERVMuTElHSFRFTlxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBCTEVORF9NT0RFUy5DT0xPUl9ET0RHRVxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBCTEVORF9NT0RFUy5DT0xPUl9CVVJOXG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IEJMRU5EX01PREVTLkhBUkRfTElHSFRcbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gQkxFTkRfTU9ERVMuU09GVF9MSUdIVFxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBCTEVORF9NT0RFUy5ESUZGRVJFTkNFXG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IEJMRU5EX01PREVTLkVYQ0xVU0lPTlxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBCTEVORF9NT0RFUy5IVUVcbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gQkxFTkRfTU9ERVMuU0FUVVJBVElPTlxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBCTEVORF9NT0RFUy5DT0xPUlxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBCTEVORF9NT0RFUy5MVU1JTk9TSVRZXG4gICAgICovXG4gICAgQkxFTkRfTU9ERVM6IHtcbiAgICAgICAgTk9STUFMOiAgICAgICAgIDAsXG4gICAgICAgIEFERDogICAgICAgICAgICAxLFxuICAgICAgICBNVUxUSVBMWTogICAgICAgMixcbiAgICAgICAgU0NSRUVOOiAgICAgICAgIDMsXG4gICAgICAgIE9WRVJMQVk6ICAgICAgICA0LFxuICAgICAgICBEQVJLRU46ICAgICAgICAgNSxcbiAgICAgICAgTElHSFRFTjogICAgICAgIDYsXG4gICAgICAgIENPTE9SX0RPREdFOiAgICA3LFxuICAgICAgICBDT0xPUl9CVVJOOiAgICAgOCxcbiAgICAgICAgSEFSRF9MSUdIVDogICAgIDksXG4gICAgICAgIFNPRlRfTElHSFQ6ICAgICAxMCxcbiAgICAgICAgRElGRkVSRU5DRTogICAgIDExLFxuICAgICAgICBFWENMVVNJT046ICAgICAgMTIsXG4gICAgICAgIEhVRTogICAgICAgICAgICAxMyxcbiAgICAgICAgU0FUVVJBVElPTjogICAgIDE0LFxuICAgICAgICBDT0xPUjogICAgICAgICAgMTUsXG4gICAgICAgIExVTUlOT1NJVFk6ICAgICAxNlxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBWYXJpb3VzIHdlYmdsIGRyYXcgbW9kZXMuIFRoZXNlIGNhbiBiZSB1c2VkIHRvIHNwZWNpZnkgd2hpY2ggR0wgZHJhd01vZGUgdG8gdXNlXG4gICAgICogdW5kZXIgY2VydGFpbiBzaXR1YXRpb25zIGFuZCByZW5kZXJlcnMuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQGNvbnN0YW50XG4gICAgICogQHByb3BlcnR5IHtvYmplY3R9IERSQVdfTU9ERVNcbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gRFJBV19NT0RFUy5QT0lOVFNcbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gRFJBV19NT0RFUy5MSU5FU1xuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBEUkFXX01PREVTLkxJTkVfTE9PUFxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBEUkFXX01PREVTLkxJTkVfU1RSSVBcbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gRFJBV19NT0RFUy5UUklBTkdMRVNcbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gRFJBV19NT0RFUy5UUklBTkdMRV9TVFJJUFxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBEUkFXX01PREVTLlRSSUFOR0xFX0ZBTlxuICAgICAqL1xuICAgIERSQVdfTU9ERVM6IHtcbiAgICAgICAgUE9JTlRTOiAgICAgICAgIDAsXG4gICAgICAgIExJTkVTOiAgICAgICAgICAxLFxuICAgICAgICBMSU5FX0xPT1A6ICAgICAgMixcbiAgICAgICAgTElORV9TVFJJUDogICAgIDMsXG4gICAgICAgIFRSSUFOR0xFUzogICAgICA0LFxuICAgICAgICBUUklBTkdMRV9TVFJJUDogNSxcbiAgICAgICAgVFJJQU5HTEVfRkFOOiAgIDZcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVGhlIHNjYWxlIG1vZGVzIHRoYXQgYXJlIHN1cHBvcnRlZCBieSBwaXhpLlxuICAgICAqXG4gICAgICogVGhlIERFRkFVTFQgc2NhbGUgbW9kZSBhZmZlY3RzIHRoZSBkZWZhdWx0IHNjYWxpbmcgbW9kZSBvZiBmdXR1cmUgb3BlcmF0aW9ucy5cbiAgICAgKiBJdCBjYW4gYmUgcmUtYXNzaWduZWQgdG8gZWl0aGVyIExJTkVBUiBvciBORUFSRVNULCBkZXBlbmRpbmcgdXBvbiBzdWl0YWJpbGl0eS5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAY29uc3RhbnRcbiAgICAgKiBAcHJvcGVydHkge29iamVjdH0gU0NBTEVfTU9ERVNcbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gU0NBTEVfTU9ERVMuREVGQVVMVD1MSU5FQVJcbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gU0NBTEVfTU9ERVMuTElORUFSIFNtb290aCBzY2FsaW5nXG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IFNDQUxFX01PREVTLk5FQVJFU1QgUGl4ZWxhdGluZyBzY2FsaW5nXG4gICAgICovXG4gICAgU0NBTEVfTU9ERVM6IHtcbiAgICAgICAgREVGQVVMVDogICAgMCxcbiAgICAgICAgTElORUFSOiAgICAgMCxcbiAgICAgICAgTkVBUkVTVDogICAgMVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBUaGUgcHJlZml4IHRoYXQgZGVub3RlcyBhIFVSTCBpcyBmb3IgYSByZXRpbmEgYXNzZXRcbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAY29uc3RhbnRcbiAgICAgKiBAcHJvcGVydHkge3N0cmluZ30gUkVUSU5BX1BSRUZJWFxuICAgICAqL1xuICAgIC8vZXhhbXBsZTogJ0AyeCcsXG4gICAgUkVUSU5BX1BSRUZJWDogL0AoLispeC8sXG5cbiAgICBSRVNPTFVUSU9OOjEsXG5cbiAgICBGSUxURVJfUkVTT0xVVElPTjoxLFxuXG4gICAgLyoqXG4gICAgICogVGhlIGRlZmF1bHQgcmVuZGVyIG9wdGlvbnMgaWYgbm9uZSBhcmUgc3VwcGxpZWQgdG8ge0BsaW5rIFBJWEkuV2ViR0xSZW5kZXJlcn1cbiAgICAgKiBvciB7QGxpbmsgUElYSS5DYW52YXNSZW5kZXJlcn0uXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQGNvbnN0YW50XG4gICAgICogQHByb3BlcnR5IHtvYmplY3R9IERFRkFVTFRfUkVOREVSX09QVElPTlNcbiAgICAgKiBAcHJvcGVydHkge0hUTUxDYW52YXNFbGVtZW50fSBERUZBVUxUX1JFTkRFUl9PUFRJT05TLnZpZXc9bnVsbFxuICAgICAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gREVGQVVMVF9SRU5ERVJfT1BUSU9OUy50cmFuc3BhcmVudD1mYWxzZVxuICAgICAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gREVGQVVMVF9SRU5ERVJfT1BUSU9OUy5hbnRpYWxpYXM9ZmFsc2VcbiAgICAgKiBAcHJvcGVydHkge2Jvb2xlYW59IERFRkFVTFRfUkVOREVSX09QVElPTlMuZm9yY2VGWEFBPWZhbHNlXG4gICAgICogQHByb3BlcnR5IHtib29sZWFufSBERUZBVUxUX1JFTkRFUl9PUFRJT05TLnByZXNlcnZlRHJhd2luZ0J1ZmZlcj1mYWxzZVxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBERUZBVUxUX1JFTkRFUl9PUFRJT05TLnJlc29sdXRpb249MVxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBERUZBVUxUX1JFTkRFUl9PUFRJT05TLmJhY2tncm91bmRDb2xvcj0weDAwMDAwMFxuICAgICAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gREVGQVVMVF9SRU5ERVJfT1BUSU9OUy5jbGVhckJlZm9yZVJlbmRlcj10cnVlXG4gICAgICogQHByb3BlcnR5IHtib29sZWFufSBERUZBVUxUX1JFTkRFUl9PUFRJT05TLmF1dG9SZXNpemU9ZmFsc2VcbiAgICAgKi9cbiAgICBERUZBVUxUX1JFTkRFUl9PUFRJT05TOiB7XG4gICAgICAgIHZpZXc6IG51bGwsXG4gICAgICAgIHJlc29sdXRpb246IDEsXG4gICAgICAgIGFudGlhbGlhczogZmFsc2UsXG4gICAgICAgIGZvcmNlRlhBQTogZmFsc2UsXG4gICAgICAgIGF1dG9SZXNpemU6IGZhbHNlLFxuICAgICAgICB0cmFuc3BhcmVudDogZmFsc2UsXG4gICAgICAgIGJhY2tncm91bmRDb2xvcjogMHgwMDAwMDAsXG4gICAgICAgIGNsZWFyQmVmb3JlUmVuZGVyOiB0cnVlLFxuICAgICAgICBwcmVzZXJ2ZURyYXdpbmdCdWZmZXI6IGZhbHNlLFxuICAgICAgICByb3VuZFBpeGVsczogZmFsc2VcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQ29uc3RhbnRzIHRoYXQgaWRlbnRpZnkgc2hhcGVzLCBtYWlubHkgdG8gcHJldmVudCBgaW5zdGFuY2VvZmAgY2FsbHMuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQGNvbnN0YW50XG4gICAgICogQHByb3BlcnR5IHtvYmplY3R9IFNIQVBFU1xuICAgICAqIEBwcm9wZXJ0eSB7b2JqZWN0fSBTSEFQRVMuUE9MWT0wXG4gICAgICogQHByb3BlcnR5IHtvYmplY3R9IFNIQVBFUy5SRUNUPTFcbiAgICAgKiBAcHJvcGVydHkge29iamVjdH0gU0hBUEVTLkNJUkM9MlxuICAgICAqIEBwcm9wZXJ0eSB7b2JqZWN0fSBTSEFQRVMuRUxJUD0zXG4gICAgICogQHByb3BlcnR5IHtvYmplY3R9IFNIQVBFUy5SUkVDPTRcbiAgICAgKi9cbiAgICBTSEFQRVM6IHtcbiAgICAgICAgUE9MWTogMCxcbiAgICAgICAgUkVDVDogMSxcbiAgICAgICAgQ0lSQzogMixcbiAgICAgICAgRUxJUDogMyxcbiAgICAgICAgUlJFQzogNFxuICAgIH0sXG5cbiAgICAvLyBUT0RPOiBtYXliZSBjaGFuZ2UgdG8gU1BSSVRFLkJBVENIX1NJWkU6IDIwMDBcbiAgICAvLyBUT0RPOiBtYXliZSBhZGQgUEFSVElDTEUuQkFUQ0hfU0laRTogMTUwMDBcbiAgICBTUFJJVEVfQkFUQ0hfU0laRTogMjAwMCAvL25pY2UgYmFsYW5jZSBiZXR3ZWVuIG1vYmlsZSBhbmQgZGVza3RvcCBtYWNoaW5lc1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBDT05TVDtcbiIsInZhciBtYXRoID0gcmVxdWlyZSgnLi4vbWF0aCcpLFxuICAgIHV0aWxzID0gcmVxdWlyZSgnLi4vdXRpbHMnKSxcbiAgICBEaXNwbGF5T2JqZWN0ID0gcmVxdWlyZSgnLi9EaXNwbGF5T2JqZWN0JyksXG4gICAgUmVuZGVyVGV4dHVyZSA9IHJlcXVpcmUoJy4uL3RleHR1cmVzL1JlbmRlclRleHR1cmUnKSxcbiAgICBfdGVtcE1hdHJpeCA9IG5ldyBtYXRoLk1hdHJpeCgpO1xuXG4vKipcbiAqIEEgQ29udGFpbmVyIHJlcHJlc2VudHMgYSBjb2xsZWN0aW9uIG9mIGRpc3BsYXkgb2JqZWN0cy5cbiAqIEl0IGlzIHRoZSBiYXNlIGNsYXNzIG9mIGFsbCBkaXNwbGF5IG9iamVjdHMgdGhhdCBhY3QgYXMgYSBjb250YWluZXIgZm9yIG90aGVyIG9iamVjdHMuXG4gKlxuICpgYGBqc1xuICogdmFyIGNvbnRhaW5lciA9IG5ldyBQSVhJLkNvbnRhaW5lcigpO1xuICogY29udGFpbmVyLmFkZENoaWxkKHNwcml0ZSk7XG4gKiBgYGBcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5EaXNwbGF5T2JqZWN0XG4gKiBAbWVtYmVyb2YgUElYSVxuICovXG5mdW5jdGlvbiBDb250YWluZXIoKVxue1xuICAgIERpc3BsYXlPYmplY3QuY2FsbCh0aGlzKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBhcnJheSBvZiBjaGlsZHJlbiBvZiB0aGlzIGNvbnRhaW5lci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuRGlzcGxheU9iamVjdFtdfVxuICAgICAqIEByZWFkb25seVxuICAgICAqL1xuICAgIHRoaXMuY2hpbGRyZW4gPSBbXTtcbn1cblxuLy8gY29uc3RydWN0b3JcbkNvbnRhaW5lci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKERpc3BsYXlPYmplY3QucHJvdG90eXBlKTtcbkNvbnRhaW5lci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBDb250YWluZXI7XG5tb2R1bGUuZXhwb3J0cyA9IENvbnRhaW5lcjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoQ29udGFpbmVyLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFRoZSB3aWR0aCBvZiB0aGUgQ29udGFpbmVyLCBzZXR0aW5nIHRoaXMgd2lsbCBhY3R1YWxseSBtb2RpZnkgdGhlIHNjYWxlIHRvIGFjaGlldmUgdGhlIHZhbHVlIHNldFxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLkNvbnRhaW5lciNcbiAgICAgKi9cbiAgICB3aWR0aDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnNjYWxlLnggKiB0aGlzLmdldExvY2FsQm91bmRzKCkud2lkdGg7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG5cbiAgICAgICAgICAgIHZhciB3aWR0aCA9IHRoaXMuZ2V0TG9jYWxCb3VuZHMoKS53aWR0aDtcblxuICAgICAgICAgICAgaWYgKHdpZHRoICE9PSAwKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHRoaXMuc2NhbGUueCA9IHZhbHVlIC8gd2lkdGg7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdGhpcy5zY2FsZS54ID0gMTtcbiAgICAgICAgICAgIH1cblxuXG4gICAgICAgICAgICB0aGlzLl93aWR0aCA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFRoZSBoZWlnaHQgb2YgdGhlIENvbnRhaW5lciwgc2V0dGluZyB0aGlzIHdpbGwgYWN0dWFsbHkgbW9kaWZ5IHRoZSBzY2FsZSB0byBhY2hpZXZlIHRoZSB2YWx1ZSBzZXRcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5Db250YWluZXIjXG4gICAgICovXG4gICAgaGVpZ2h0OiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuICB0aGlzLnNjYWxlLnkgKiB0aGlzLmdldExvY2FsQm91bmRzKCkuaGVpZ2h0O1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuXG4gICAgICAgICAgICB2YXIgaGVpZ2h0ID0gdGhpcy5nZXRMb2NhbEJvdW5kcygpLmhlaWdodDtcblxuICAgICAgICAgICAgaWYgKGhlaWdodCAhPT0gMClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNjYWxlLnkgPSB2YWx1ZSAvIGhlaWdodCA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdGhpcy5zY2FsZS55ID0gMTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5faGVpZ2h0ID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG59KTtcblxuLyoqXG4gKiBPdmVycmlkYWJsZSBtZXRob2QgdGhhdCBjYW4gYmUgdXNlZCBieSBDb250YWluZXIgc3ViY2xhc3NlcyB3aGVuZXZlciB0aGUgY2hpbGRyZW4gYXJyYXkgaXMgbW9kaWZpZWRcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5Db250YWluZXIucHJvdG90eXBlLm9uQ2hpbGRyZW5DaGFuZ2UgPSBmdW5jdGlvbiAoKSB7fTtcblxuLyoqXG4gKiBBZGRzIGEgY2hpbGQgdG8gdGhlIGNvbnRhaW5lci5cbiAqIFxuICogWW91IGNhbiBhbHNvIGFkZCBtdWx0cGxlIGl0ZW1zIGxpa2Ugc286IG15Q29udGFpbmVyLmFkZENoaWxkKHRoaW5rT25lLCB0aGluZ1R3bywgdGhpbmdUaHJlZSlcbiAqIEBwYXJhbSBjaGlsZCB7UElYSS5EaXNwbGF5T2JqZWN0fSBUaGUgRGlzcGxheU9iamVjdCB0byBhZGQgdG8gdGhlIGNvbnRhaW5lclxuICogQHJldHVybiB7UElYSS5EaXNwbGF5T2JqZWN0fSBUaGUgY2hpbGQgdGhhdCB3YXMgYWRkZWQuXG4gKi9cbkNvbnRhaW5lci5wcm90b3R5cGUuYWRkQ2hpbGQgPSBmdW5jdGlvbiAoY2hpbGQpXG57IFxuICAgIHZhciBhcmd1bWVudHNMZW5ndGggPSBhcmd1bWVudHMubGVuZ3RoO1xuXG4gICAgLy8gaWYgdGhlcmUgaXMgb25seSBvbmUgYXJndW1lbnQgd2UgY2FuIGJ5cGFzcyBsb29waW5nIHRocm91Z2ggdGhlIHRoZW1cbiAgICBpZihhcmd1bWVudHNMZW5ndGggPiAxKVxuICAgIHtcbiAgICAgICAgLy8gbG9vcCB0aHJvdWdoIHRoZSBhcmd1bWVudHMgcHJvcGVydHkgYW5kIGFkZCBhbGwgY2hpbGRyZW5cbiAgICAgICAgLy8gdXNlIGl0IHRoZSByaWdodCB3YXkgKC5sZW5ndGggYW5kIFtpXSkgc28gdGhhdCB0aGlzIGZ1bmN0aW9uIGNhbiBzdGlsbCBiZSBvcHRpbWlzZWQgYnkgSlMgcnVudGltZXNcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcmd1bWVudHNMZW5ndGg7IGkrKylcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5hZGRDaGlsZCggYXJndW1lbnRzW2ldICk7XG4gICAgICAgIH1cbiAgICB9ICAgICBcbiAgICBlbHNlXG4gICAge1xuICAgICAgICAvLyBpZiB0aGUgY2hpbGQgaGFzIGEgcGFyZW50IHRoZW4gbGV0cyByZW1vdmUgaXQgYXMgUGl4aSBvYmplY3RzIGNhbiBvbmx5IGV4aXN0IGluIG9uZSBwbGFjZVxuICAgICAgICBpZiAoY2hpbGQucGFyZW50KVxuICAgICAgICB7XG4gICAgICAgICAgICBjaGlsZC5wYXJlbnQucmVtb3ZlQ2hpbGQoY2hpbGQpO1xuICAgICAgICB9XG5cbiAgICAgICAgY2hpbGQucGFyZW50ID0gdGhpcztcbiAgICAgICAgXG4gICAgICAgIHRoaXMuY2hpbGRyZW4ucHVzaChjaGlsZCk7XG5cbiAgICAgICAgLy8gVE9ETyAtIGxldHMgZWl0aGVyIGRvIGFsbCBjYWxsYmFja3Mgb3IgYWxsIGV2ZW50cy4uIG5vdCBib3RoIVxuICAgICAgICB0aGlzLm9uQ2hpbGRyZW5DaGFuZ2UodGhpcy5jaGlsZHJlbi5sZW5ndGgtMSk7XG4gICAgICAgIGNoaWxkLmVtaXQoJ2FkZGVkJywgdGhpcyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGNoaWxkO1xufTtcblxuLyoqXG4gKiBBZGRzIGEgY2hpbGQgdG8gdGhlIGNvbnRhaW5lciBhdCBhIHNwZWNpZmllZCBpbmRleC4gSWYgdGhlIGluZGV4IGlzIG91dCBvZiBib3VuZHMgYW4gZXJyb3Igd2lsbCBiZSB0aHJvd25cbiAqXG4gKiBAcGFyYW0gY2hpbGQge1BJWEkuRGlzcGxheU9iamVjdH0gVGhlIGNoaWxkIHRvIGFkZFxuICogQHBhcmFtIGluZGV4IHtudW1iZXJ9IFRoZSBpbmRleCB0byBwbGFjZSB0aGUgY2hpbGQgaW5cbiAqIEByZXR1cm4ge1BJWEkuRGlzcGxheU9iamVjdH0gVGhlIGNoaWxkIHRoYXQgd2FzIGFkZGVkLlxuICovXG5Db250YWluZXIucHJvdG90eXBlLmFkZENoaWxkQXQgPSBmdW5jdGlvbiAoY2hpbGQsIGluZGV4KVxue1xuICAgIGlmIChpbmRleCA+PSAwICYmIGluZGV4IDw9IHRoaXMuY2hpbGRyZW4ubGVuZ3RoKVxuICAgIHtcbiAgICAgICAgaWYgKGNoaWxkLnBhcmVudClcbiAgICAgICAge1xuICAgICAgICAgICAgY2hpbGQucGFyZW50LnJlbW92ZUNoaWxkKGNoaWxkKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNoaWxkLnBhcmVudCA9IHRoaXM7XG5cbiAgICAgICAgdGhpcy5jaGlsZHJlbi5zcGxpY2UoaW5kZXgsIDAsIGNoaWxkKTtcblxuICAgICAgICAvLyBUT0RPIC0gbGV0cyBlaXRoZXIgZG8gYWxsIGNhbGxiYWNrcyBvciBhbGwgZXZlbnRzLi4gbm90IGJvdGghXG4gICAgICAgIHRoaXMub25DaGlsZHJlbkNoYW5nZShpbmRleCk7XG4gICAgICAgIGNoaWxkLmVtaXQoJ2FkZGVkJywgdGhpcyk7XG5cbiAgICAgICAgcmV0dXJuIGNoaWxkO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoY2hpbGQgKyAnYWRkQ2hpbGRBdDogVGhlIGluZGV4ICcrIGluZGV4ICsnIHN1cHBsaWVkIGlzIG91dCBvZiBib3VuZHMgJyArIHRoaXMuY2hpbGRyZW4ubGVuZ3RoKTtcbiAgICB9XG59O1xuXG4vKipcbiAqIFN3YXBzIHRoZSBwb3NpdGlvbiBvZiAyIERpc3BsYXkgT2JqZWN0cyB3aXRoaW4gdGhpcyBjb250YWluZXIuXG4gKlxuICogQHBhcmFtIGNoaWxkIHtQSVhJLkRpc3BsYXlPYmplY3R9XG4gKiBAcGFyYW0gY2hpbGQyIHtQSVhJLkRpc3BsYXlPYmplY3R9XG4gKi9cbkNvbnRhaW5lci5wcm90b3R5cGUuc3dhcENoaWxkcmVuID0gZnVuY3Rpb24gKGNoaWxkLCBjaGlsZDIpXG57XG4gICAgaWYgKGNoaWxkID09PSBjaGlsZDIpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFyIGluZGV4MSA9IHRoaXMuZ2V0Q2hpbGRJbmRleChjaGlsZCk7XG4gICAgdmFyIGluZGV4MiA9IHRoaXMuZ2V0Q2hpbGRJbmRleChjaGlsZDIpO1xuXG4gICAgaWYgKGluZGV4MSA8IDAgfHwgaW5kZXgyIDwgMClcbiAgICB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignc3dhcENoaWxkcmVuOiBCb3RoIHRoZSBzdXBwbGllZCBEaXNwbGF5T2JqZWN0cyBtdXN0IGJlIGNoaWxkcmVuIG9mIHRoZSBjYWxsZXIuJyk7XG4gICAgfVxuXG4gICAgdGhpcy5jaGlsZHJlbltpbmRleDFdID0gY2hpbGQyO1xuICAgIHRoaXMuY2hpbGRyZW5baW5kZXgyXSA9IGNoaWxkO1xuICAgIHRoaXMub25DaGlsZHJlbkNoYW5nZShpbmRleDEgPCBpbmRleDIgPyBpbmRleDEgOiBpbmRleDIpO1xufTtcblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBpbmRleCBwb3NpdGlvbiBvZiBhIGNoaWxkIERpc3BsYXlPYmplY3QgaW5zdGFuY2VcbiAqXG4gKiBAcGFyYW0gY2hpbGQge1BJWEkuRGlzcGxheU9iamVjdH0gVGhlIERpc3BsYXlPYmplY3QgaW5zdGFuY2UgdG8gaWRlbnRpZnlcbiAqIEByZXR1cm4ge251bWJlcn0gVGhlIGluZGV4IHBvc2l0aW9uIG9mIHRoZSBjaGlsZCBkaXNwbGF5IG9iamVjdCB0byBpZGVudGlmeVxuICovXG5Db250YWluZXIucHJvdG90eXBlLmdldENoaWxkSW5kZXggPSBmdW5jdGlvbiAoY2hpbGQpXG57XG4gICAgdmFyIGluZGV4ID0gdGhpcy5jaGlsZHJlbi5pbmRleE9mKGNoaWxkKTtcblxuICAgIGlmIChpbmRleCA9PT0gLTEpXG4gICAge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RoZSBzdXBwbGllZCBEaXNwbGF5T2JqZWN0IG11c3QgYmUgYSBjaGlsZCBvZiB0aGUgY2FsbGVyJyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGluZGV4O1xufTtcblxuLyoqXG4gKiBDaGFuZ2VzIHRoZSBwb3NpdGlvbiBvZiBhbiBleGlzdGluZyBjaGlsZCBpbiB0aGUgZGlzcGxheSBvYmplY3QgY29udGFpbmVyXG4gKlxuICogQHBhcmFtIGNoaWxkIHtQSVhJLkRpc3BsYXlPYmplY3R9IFRoZSBjaGlsZCBEaXNwbGF5T2JqZWN0IGluc3RhbmNlIGZvciB3aGljaCB5b3Ugd2FudCB0byBjaGFuZ2UgdGhlIGluZGV4IG51bWJlclxuICogQHBhcmFtIGluZGV4IHtudW1iZXJ9IFRoZSByZXN1bHRpbmcgaW5kZXggbnVtYmVyIGZvciB0aGUgY2hpbGQgZGlzcGxheSBvYmplY3RcbiAqL1xuQ29udGFpbmVyLnByb3RvdHlwZS5zZXRDaGlsZEluZGV4ID0gZnVuY3Rpb24gKGNoaWxkLCBpbmRleClcbntcbiAgICBpZiAoaW5kZXggPCAwIHx8IGluZGV4ID49IHRoaXMuY2hpbGRyZW4ubGVuZ3RoKVxuICAgIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdUaGUgc3VwcGxpZWQgaW5kZXggaXMgb3V0IG9mIGJvdW5kcycpO1xuICAgIH1cblxuICAgIHZhciBjdXJyZW50SW5kZXggPSB0aGlzLmdldENoaWxkSW5kZXgoY2hpbGQpO1xuXG4gICAgdXRpbHMucmVtb3ZlSXRlbXModGhpcy5jaGlsZHJlbiwgY3VycmVudEluZGV4LCAxKTsgLy8gcmVtb3ZlIGZyb20gb2xkIHBvc2l0aW9uXG4gICAgdGhpcy5jaGlsZHJlbi5zcGxpY2UoaW5kZXgsIDAsIGNoaWxkKTsgLy9hZGQgYXQgbmV3IHBvc2l0aW9uXG4gICAgdGhpcy5vbkNoaWxkcmVuQ2hhbmdlKGluZGV4KTtcbn07XG5cbi8qKlxuICogUmV0dXJucyB0aGUgY2hpbGQgYXQgdGhlIHNwZWNpZmllZCBpbmRleFxuICpcbiAqIEBwYXJhbSBpbmRleCB7bnVtYmVyfSBUaGUgaW5kZXggdG8gZ2V0IHRoZSBjaGlsZCBhdFxuICogQHJldHVybiB7UElYSS5EaXNwbGF5T2JqZWN0fSBUaGUgY2hpbGQgYXQgdGhlIGdpdmVuIGluZGV4LCBpZiBhbnkuXG4gKi9cbkNvbnRhaW5lci5wcm90b3R5cGUuZ2V0Q2hpbGRBdCA9IGZ1bmN0aW9uIChpbmRleClcbntcbiAgICBpZiAoaW5kZXggPCAwIHx8IGluZGV4ID49IHRoaXMuY2hpbGRyZW4ubGVuZ3RoKVxuICAgIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdnZXRDaGlsZEF0OiBTdXBwbGllZCBpbmRleCAnICsgaW5kZXggKyAnIGRvZXMgbm90IGV4aXN0IGluIHRoZSBjaGlsZCBsaXN0LCBvciB0aGUgc3VwcGxpZWQgRGlzcGxheU9iamVjdCBpcyBub3QgYSBjaGlsZCBvZiB0aGUgY2FsbGVyJyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuY2hpbGRyZW5baW5kZXhdO1xufTtcblxuLyoqXG4gKiBSZW1vdmVzIGEgY2hpbGQgZnJvbSB0aGUgY29udGFpbmVyLlxuICpcbiAqIEBwYXJhbSBjaGlsZCB7UElYSS5EaXNwbGF5T2JqZWN0fSBUaGUgRGlzcGxheU9iamVjdCB0byByZW1vdmVcbiAqIEByZXR1cm4ge1BJWEkuRGlzcGxheU9iamVjdH0gVGhlIGNoaWxkIHRoYXQgd2FzIHJlbW92ZWQuXG4gKi9cbkNvbnRhaW5lci5wcm90b3R5cGUucmVtb3ZlQ2hpbGQgPSBmdW5jdGlvbiAoY2hpbGQpXG57XG4gICAgdmFyIGFyZ3VtZW50c0xlbmd0aCA9IGFyZ3VtZW50cy5sZW5ndGg7XG5cbiAgICAvLyBpZiB0aGVyZSBpcyBvbmx5IG9uZSBhcmd1bWVudCB3ZSBjYW4gYnlwYXNzIGxvb3BpbmcgdGhyb3VnaCB0aGUgdGhlbVxuICAgIGlmKGFyZ3VtZW50c0xlbmd0aCA+IDEpXG4gICAge1xuICAgICAgICAvLyBsb29wIHRocm91Z2ggdGhlIGFyZ3VtZW50cyBwcm9wZXJ0eSBhbmQgYWRkIGFsbCBjaGlsZHJlblxuICAgICAgICAvLyB1c2UgaXQgdGhlIHJpZ2h0IHdheSAoLmxlbmd0aCBhbmQgW2ldKSBzbyB0aGF0IHRoaXMgZnVuY3Rpb24gY2FuIHN0aWxsIGJlIG9wdGltaXNlZCBieSBKUyBydW50aW1lc1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFyZ3VtZW50c0xlbmd0aDsgaSsrKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnJlbW92ZUNoaWxkKCBhcmd1bWVudHNbaV0gKTtcbiAgICAgICAgfVxuICAgIH0gICAgIFxuICAgIGVsc2VcbiAgICB7ICAgXG4gICAgICAgIHZhciBpbmRleCA9IHRoaXMuY2hpbGRyZW4uaW5kZXhPZihjaGlsZCk7XG5cbiAgICAgICAgaWYgKGluZGV4ID09PSAtMSlcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY2hpbGQucGFyZW50ID0gbnVsbDtcbiAgICAgICAgdXRpbHMucmVtb3ZlSXRlbXModGhpcy5jaGlsZHJlbiwgaW5kZXgsIDEpO1xuXG4gICAgICAgIC8vIFRPRE8gLSBsZXRzIGVpdGhlciBkbyBhbGwgY2FsbGJhY2tzIG9yIGFsbCBldmVudHMuLiBub3QgYm90aCFcbiAgICAgICAgdGhpcy5vbkNoaWxkcmVuQ2hhbmdlKGluZGV4KTtcbiAgICAgICAgY2hpbGQuZW1pdCgncmVtb3ZlZCcsIHRoaXMpO1xuICAgIH1cblxuICAgIHJldHVybiBjaGlsZDtcbn07XG5cbi8qKlxuICogUmVtb3ZlcyBhIGNoaWxkIGZyb20gdGhlIHNwZWNpZmllZCBpbmRleCBwb3NpdGlvbi5cbiAqXG4gKiBAcGFyYW0gaW5kZXgge251bWJlcn0gVGhlIGluZGV4IHRvIGdldCB0aGUgY2hpbGQgZnJvbVxuICogQHJldHVybiB7UElYSS5EaXNwbGF5T2JqZWN0fSBUaGUgY2hpbGQgdGhhdCB3YXMgcmVtb3ZlZC5cbiAqL1xuQ29udGFpbmVyLnByb3RvdHlwZS5yZW1vdmVDaGlsZEF0ID0gZnVuY3Rpb24gKGluZGV4KVxue1xuICAgIHZhciBjaGlsZCA9IHRoaXMuZ2V0Q2hpbGRBdChpbmRleCk7XG5cbiAgICBjaGlsZC5wYXJlbnQgPSBudWxsO1xuICAgIHV0aWxzLnJlbW92ZUl0ZW1zKHRoaXMuY2hpbGRyZW4sIGluZGV4LCAxKTtcblxuICAgIC8vIFRPRE8gLSBsZXRzIGVpdGhlciBkbyBhbGwgY2FsbGJhY2tzIG9yIGFsbCBldmVudHMuLiBub3QgYm90aCFcbiAgICB0aGlzLm9uQ2hpbGRyZW5DaGFuZ2UoaW5kZXgpO1xuICAgIGNoaWxkLmVtaXQoJ3JlbW92ZWQnLCB0aGlzKTtcblxuICAgIHJldHVybiBjaGlsZDtcbn07XG5cbi8qKlxuICogUmVtb3ZlcyBhbGwgY2hpbGRyZW4gZnJvbSB0aGlzIGNvbnRhaW5lciB0aGF0IGFyZSB3aXRoaW4gdGhlIGJlZ2luIGFuZCBlbmQgaW5kZXhlcy5cbiAqXG4gKiBAcGFyYW0gYmVnaW5JbmRleCB7bnVtYmVyfSBUaGUgYmVnaW5uaW5nIHBvc2l0aW9uLiBEZWZhdWx0IHZhbHVlIGlzIDAuXG4gKiBAcGFyYW0gZW5kSW5kZXgge251bWJlcn0gVGhlIGVuZGluZyBwb3NpdGlvbi4gRGVmYXVsdCB2YWx1ZSBpcyBzaXplIG9mIHRoZSBjb250YWluZXIuXG4gKi9cbkNvbnRhaW5lci5wcm90b3R5cGUucmVtb3ZlQ2hpbGRyZW4gPSBmdW5jdGlvbiAoYmVnaW5JbmRleCwgZW5kSW5kZXgpXG57XG4gICAgdmFyIGJlZ2luID0gYmVnaW5JbmRleCB8fCAwO1xuICAgIHZhciBlbmQgPSB0eXBlb2YgZW5kSW5kZXggPT09ICdudW1iZXInID8gZW5kSW5kZXggOiB0aGlzLmNoaWxkcmVuLmxlbmd0aDtcbiAgICB2YXIgcmFuZ2UgPSBlbmQgLSBiZWdpbjtcbiAgICB2YXIgcmVtb3ZlZCwgaTtcblxuICAgIGlmIChyYW5nZSA+IDAgJiYgcmFuZ2UgPD0gZW5kKVxuICAgIHtcbiAgICAgICAgcmVtb3ZlZCA9IHRoaXMuY2hpbGRyZW4uc3BsaWNlKGJlZ2luLCByYW5nZSk7XG5cbiAgICAgICAgZm9yIChpID0gMDsgaSA8IHJlbW92ZWQubGVuZ3RoOyArK2kpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJlbW92ZWRbaV0ucGFyZW50ID0gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMub25DaGlsZHJlbkNoYW5nZShiZWdpbkluZGV4KTtcblxuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgcmVtb3ZlZC5sZW5ndGg7ICsraSlcbiAgICAgICAge1xuICAgICAgICAgICAgcmVtb3ZlZFtpXS5lbWl0KCdyZW1vdmVkJywgdGhpcyk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gcmVtb3ZlZDtcbiAgICB9XG4gICAgZWxzZSBpZiAocmFuZ2UgPT09IDAgJiYgdGhpcy5jaGlsZHJlbi5sZW5ndGggPT09IDApXG4gICAge1xuICAgICAgICByZXR1cm4gW107XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdyZW1vdmVDaGlsZHJlbjogbnVtZXJpYyB2YWx1ZXMgYXJlIG91dHNpZGUgdGhlIGFjY2VwdGFibGUgcmFuZ2UuJyk7XG4gICAgfVxufTtcblxuLyoqXG4gKiBVc2VmdWwgZnVuY3Rpb24gdGhhdCByZXR1cm5zIGEgdGV4dHVyZSBvZiB0aGUgZGlzcGxheSBvYmplY3QgdGhhdCBjYW4gdGhlbiBiZSB1c2VkIHRvIGNyZWF0ZSBzcHJpdGVzXG4gKiBUaGlzIGNhbiBiZSBxdWl0ZSB1c2VmdWwgaWYgeW91ciBkaXNwbGF5T2JqZWN0IGlzIHN0YXRpYyAvIGNvbXBsaWNhdGVkIGFuZCBuZWVkcyB0byBiZSByZXVzZWQgbXVsdGlwbGUgdGltZXMuXG4gKlxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLkNhbnZhc1JlbmRlcmVyfFBJWEkuV2ViR0xSZW5kZXJlcn0gVGhlIHJlbmRlcmVyIHVzZWQgdG8gZ2VuZXJhdGUgdGhlIHRleHR1cmUuXG4gKiBAcGFyYW0gcmVzb2x1dGlvbiB7bnVtYmVyfSBUaGUgcmVzb2x1dGlvbiBvZiB0aGUgdGV4dHVyZSBiZWluZyBnZW5lcmF0ZWRcbiAqIEBwYXJhbSBzY2FsZU1vZGUge251bWJlcn0gU2VlIHtAbGluayBQSVhJLlNDQUxFX01PREVTfSBmb3IgcG9zc2libGUgdmFsdWVzXG4gKiBAcmV0dXJuIHtQSVhJLlRleHR1cmV9IGEgdGV4dHVyZSBvZiB0aGUgZGlzcGxheSBvYmplY3RcbiAqL1xuQ29udGFpbmVyLnByb3RvdHlwZS5nZW5lcmF0ZVRleHR1cmUgPSBmdW5jdGlvbiAocmVuZGVyZXIsIHJlc29sdXRpb24sIHNjYWxlTW9kZSlcbntcbiAgICB2YXIgYm91bmRzID0gdGhpcy5nZXRMb2NhbEJvdW5kcygpO1xuXG4gICAgdmFyIHJlbmRlclRleHR1cmUgPSBuZXcgUmVuZGVyVGV4dHVyZShyZW5kZXJlciwgYm91bmRzLndpZHRoIHwgMCwgYm91bmRzLmhlaWdodCB8IDAsIHNjYWxlTW9kZSwgcmVzb2x1dGlvbik7XG5cbiAgICBfdGVtcE1hdHJpeC50eCA9IC1ib3VuZHMueDtcbiAgICBfdGVtcE1hdHJpeC50eSA9IC1ib3VuZHMueTtcblxuICAgIHJlbmRlclRleHR1cmUucmVuZGVyKHRoaXMsIF90ZW1wTWF0cml4KTtcblxuICAgIHJldHVybiByZW5kZXJUZXh0dXJlO1xufTtcblxuLypcbiAqIFVwZGF0ZXMgdGhlIHRyYW5zZm9ybSBvbiBhbGwgY2hpbGRyZW4gb2YgdGhpcyBjb250YWluZXIgZm9yIHJlbmRlcmluZ1xuICpcbiAqIEBwcml2YXRlXG4gKi9cbkNvbnRhaW5lci5wcm90b3R5cGUudXBkYXRlVHJhbnNmb3JtID0gZnVuY3Rpb24gKClcbntcbiAgICBpZiAoIXRoaXMudmlzaWJsZSlcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLmRpc3BsYXlPYmplY3RVcGRhdGVUcmFuc2Zvcm0oKTtcblxuICAgIGZvciAodmFyIGkgPSAwLCBqID0gdGhpcy5jaGlsZHJlbi5sZW5ndGg7IGkgPCBqOyArK2kpXG4gICAge1xuICAgICAgICB0aGlzLmNoaWxkcmVuW2ldLnVwZGF0ZVRyYW5zZm9ybSgpO1xuICAgIH1cblxuICAgIHRoaXMuZGlydHlUcmFuc2Zvcm0gPSBmYWxzZTtcbn07XG5cbi8vIHBlcmZvcm1hbmNlIGluY3JlYXNlIHRvIGF2b2lkIHVzaW5nIGNhbGwuLiAoMTB4IGZhc3RlcilcbkNvbnRhaW5lci5wcm90b3R5cGUuY29udGFpbmVyVXBkYXRlVHJhbnNmb3JtID0gQ29udGFpbmVyLnByb3RvdHlwZS51cGRhdGVUcmFuc2Zvcm07XG5cbi8qKlxuICogUmV0cmlldmVzIHRoZSBib3VuZHMgb2YgdGhlIENvbnRhaW5lciBhcyBhIHJlY3RhbmdsZS4gVGhlIGJvdW5kcyBjYWxjdWxhdGlvbiB0YWtlcyBhbGwgdmlzaWJsZSBjaGlsZHJlbiBpbnRvIGNvbnNpZGVyYXRpb24uXG4gKlxuICogQHJldHVybiB7UElYSS5SZWN0YW5nbGV9IFRoZSByZWN0YW5ndWxhciBib3VuZGluZyBhcmVhXG4gKi9cbkNvbnRhaW5lci5wcm90b3R5cGUuZ2V0Qm91bmRzID0gZnVuY3Rpb24gKClcbntcbiAgICBpZighdGhpcy5fY3VycmVudEJvdW5kcylcbiAgICB7XG5cbiAgICAgICAgaWYgKHRoaXMuY2hpbGRyZW4ubGVuZ3RoID09PSAwKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gbWF0aC5SZWN0YW5nbGUuRU1QVFk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBUT0RPIHRoZSBib3VuZHMgaGF2ZSBhbHJlYWR5IGJlZW4gY2FsY3VsYXRlZCB0aGlzIHJlbmRlciBzZXNzaW9uIHNvIHJldHVybiB3aGF0IHdlIGhhdmVcblxuICAgICAgICB2YXIgbWluWCA9IEluZmluaXR5O1xuICAgICAgICB2YXIgbWluWSA9IEluZmluaXR5O1xuXG4gICAgICAgIHZhciBtYXhYID0gLUluZmluaXR5O1xuICAgICAgICB2YXIgbWF4WSA9IC1JbmZpbml0eTtcblxuICAgICAgICB2YXIgY2hpbGRCb3VuZHM7XG4gICAgICAgIHZhciBjaGlsZE1heFg7XG4gICAgICAgIHZhciBjaGlsZE1heFk7XG5cbiAgICAgICAgdmFyIGNoaWxkVmlzaWJsZSA9IGZhbHNlO1xuXG4gICAgICAgIGZvciAodmFyIGkgPSAwLCBqID0gdGhpcy5jaGlsZHJlbi5sZW5ndGg7IGkgPCBqOyArK2kpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHZhciBjaGlsZCA9IHRoaXMuY2hpbGRyZW5baV07XG5cbiAgICAgICAgICAgIGlmICghY2hpbGQudmlzaWJsZSlcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY2hpbGRWaXNpYmxlID0gdHJ1ZTtcblxuICAgICAgICAgICAgY2hpbGRCb3VuZHMgPSB0aGlzLmNoaWxkcmVuW2ldLmdldEJvdW5kcygpO1xuXG4gICAgICAgICAgICBtaW5YID0gbWluWCA8IGNoaWxkQm91bmRzLnggPyBtaW5YIDogY2hpbGRCb3VuZHMueDtcbiAgICAgICAgICAgIG1pblkgPSBtaW5ZIDwgY2hpbGRCb3VuZHMueSA/IG1pblkgOiBjaGlsZEJvdW5kcy55O1xuXG4gICAgICAgICAgICBjaGlsZE1heFggPSBjaGlsZEJvdW5kcy53aWR0aCArIGNoaWxkQm91bmRzLng7XG4gICAgICAgICAgICBjaGlsZE1heFkgPSBjaGlsZEJvdW5kcy5oZWlnaHQgKyBjaGlsZEJvdW5kcy55O1xuXG4gICAgICAgICAgICBtYXhYID0gbWF4WCA+IGNoaWxkTWF4WCA/IG1heFggOiBjaGlsZE1heFg7XG4gICAgICAgICAgICBtYXhZID0gbWF4WSA+IGNoaWxkTWF4WSA/IG1heFkgOiBjaGlsZE1heFk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIWNoaWxkVmlzaWJsZSlcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIG1hdGguUmVjdGFuZ2xlLkVNUFRZO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGJvdW5kcyA9IHRoaXMuX2JvdW5kcztcblxuICAgICAgICBib3VuZHMueCA9IG1pblg7XG4gICAgICAgIGJvdW5kcy55ID0gbWluWTtcbiAgICAgICAgYm91bmRzLndpZHRoID0gbWF4WCAtIG1pblg7XG4gICAgICAgIGJvdW5kcy5oZWlnaHQgPSBtYXhZIC0gbWluWTtcblxuICAgICAgICB0aGlzLl9jdXJyZW50Qm91bmRzID0gYm91bmRzO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLl9jdXJyZW50Qm91bmRzO1xufTtcblxuQ29udGFpbmVyLnByb3RvdHlwZS5jb250YWluZXJHZXRCb3VuZHMgPSBDb250YWluZXIucHJvdG90eXBlLmdldEJvdW5kcztcblxuLyoqXG4gKiBSZXRyaWV2ZXMgdGhlIG5vbi1nbG9iYWwgbG9jYWwgYm91bmRzIG9mIHRoZSBDb250YWluZXIgYXMgYSByZWN0YW5nbGUuXG4gKiBUaGUgY2FsY3VsYXRpb24gdGFrZXMgYWxsIHZpc2libGUgY2hpbGRyZW4gaW50byBjb25zaWRlcmF0aW9uLlxuICpcbiAqIEByZXR1cm4ge1BJWEkuUmVjdGFuZ2xlfSBUaGUgcmVjdGFuZ3VsYXIgYm91bmRpbmcgYXJlYVxuICovXG5Db250YWluZXIucHJvdG90eXBlLmdldExvY2FsQm91bmRzID0gZnVuY3Rpb24gKClcbntcbiAgICB2YXIgbWF0cml4Q2FjaGUgPSB0aGlzLndvcmxkVHJhbnNmb3JtO1xuXG4gICAgdGhpcy53b3JsZFRyYW5zZm9ybSA9IG1hdGguTWF0cml4LklERU5USVRZO1xuXG4gICAgZm9yICh2YXIgaSA9IDAsIGogPSB0aGlzLmNoaWxkcmVuLmxlbmd0aDsgaSA8IGo7ICsraSlcbiAgICB7XG4gICAgICAgIHRoaXMuY2hpbGRyZW5baV0udXBkYXRlVHJhbnNmb3JtKCk7XG4gICAgfVxuXG4gICAgdGhpcy53b3JsZFRyYW5zZm9ybSA9IG1hdHJpeENhY2hlO1xuXG4gICAgdGhpcy5fY3VycmVudEJvdW5kcyA9IG51bGw7XG5cbiAgICByZXR1cm4gdGhpcy5nZXRCb3VuZHMoIG1hdGguTWF0cml4LklERU5USVRZICk7XG59O1xuXG4vKipcbiAqIFJlbmRlcnMgdGhlIG9iamVjdCB1c2luZyB0aGUgV2ViR0wgcmVuZGVyZXJcbiAqXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcn0gVGhlIHJlbmRlcmVyXG4gKi9cbkNvbnRhaW5lci5wcm90b3R5cGUucmVuZGVyV2ViR0wgPSBmdW5jdGlvbiAocmVuZGVyZXIpXG57XG5cbiAgICAvLyBpZiB0aGUgb2JqZWN0IGlzIG5vdCB2aXNpYmxlIG9yIHRoZSBhbHBoYSBpcyAwIHRoZW4gbm8gbmVlZCB0byByZW5kZXIgdGhpcyBlbGVtZW50XG4gICAgaWYgKCF0aGlzLnZpc2libGUgfHwgdGhpcy53b3JsZEFscGhhIDw9IDAgfHwgIXRoaXMucmVuZGVyYWJsZSlcbiAgICB7XG4gICAgICBcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHZhciBpLCBqO1xuXG4gICAgLy8gZG8gYSBxdWljayBjaGVjayB0byBzZWUgaWYgdGhpcyBlbGVtZW50IGhhcyBhIG1hc2sgb3IgYSBmaWx0ZXIuXG4gICAgaWYgKHRoaXMuX21hc2sgfHwgdGhpcy5fZmlsdGVycylcbiAgICB7XG4gICAgICAgIHJlbmRlcmVyLmN1cnJlbnRSZW5kZXJlci5mbHVzaCgpO1xuXG4gICAgICAgIC8vIHB1c2ggZmlsdGVyIGZpcnN0IGFzIHdlIG5lZWQgdG8gZW5zdXJlIHRoZSBzdGVuY2lsIGJ1ZmZlciBpcyBjb3JyZWN0IGZvciBhbnkgbWFza2luZ1xuICAgICAgICBpZiAodGhpcy5fZmlsdGVycyAmJiB0aGlzLl9maWx0ZXJzLmxlbmd0aClcbiAgICAgICAge1xuICAgICAgICAgICAgcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5wdXNoRmlsdGVyKHRoaXMsIHRoaXMuX2ZpbHRlcnMpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuX21hc2spXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJlbmRlcmVyLm1hc2tNYW5hZ2VyLnB1c2hNYXNrKHRoaXMsIHRoaXMuX21hc2spO1xuICAgICAgICB9XG5cbiAgICAgICAgcmVuZGVyZXIuY3VycmVudFJlbmRlcmVyLnN0YXJ0KCk7XG5cbiAgICAgICAgLy8gYWRkIHRoaXMgb2JqZWN0IHRvIHRoZSBiYXRjaCwgb25seSByZW5kZXJlZCBpZiBpdCBoYXMgYSB0ZXh0dXJlLlxuICAgICAgICB0aGlzLl9yZW5kZXJXZWJHTChyZW5kZXJlcik7XG5cbiAgICAgICAgLy8gbm93IGxvb3AgdGhyb3VnaCB0aGUgY2hpbGRyZW4gYW5kIG1ha2Ugc3VyZSB0aGV5IGdldCByZW5kZXJlZFxuICAgICAgICBmb3IgKGkgPSAwLCBqID0gdGhpcy5jaGlsZHJlbi5sZW5ndGg7IGkgPCBqOyBpKyspXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuY2hpbGRyZW5baV0ucmVuZGVyV2ViR0wocmVuZGVyZXIpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmVuZGVyZXIuY3VycmVudFJlbmRlcmVyLmZsdXNoKCk7XG5cbiAgICAgICAgaWYgKHRoaXMuX21hc2spXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJlbmRlcmVyLm1hc2tNYW5hZ2VyLnBvcE1hc2sodGhpcywgdGhpcy5fbWFzayk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5fZmlsdGVycylcbiAgICAgICAge1xuICAgICAgICAgICAgcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5wb3BGaWx0ZXIoKTtcblxuICAgICAgICB9XG4gICAgICAgIHJlbmRlcmVyLmN1cnJlbnRSZW5kZXJlci5zdGFydCgpO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICB0aGlzLl9yZW5kZXJXZWJHTChyZW5kZXJlcik7XG5cbiAgICAgICAgLy8gc2ltcGxlIHJlbmRlciBjaGlsZHJlbiFcbiAgICAgICAgZm9yIChpID0gMCwgaiA9IHRoaXMuY2hpbGRyZW4ubGVuZ3RoOyBpIDwgajsgKytpKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmNoaWxkcmVuW2ldLnJlbmRlcldlYkdMKHJlbmRlcmVyKTtcbiAgICAgICAgfVxuICAgIH1cbn07XG5cbi8qKlxuICogVG8gYmUgb3ZlcnJpZGRlbiBieSB0aGUgc3ViY2xhc3NcbiAqXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcn0gVGhlIHJlbmRlcmVyXG4gKiBAcHJpdmF0ZVxuICovXG5Db250YWluZXIucHJvdG90eXBlLl9yZW5kZXJXZWJHTCA9IGZ1bmN0aW9uIChyZW5kZXJlcikgLy8ganNoaW50IHVudXNlZDpmYWxzZVxue1xuICAgIC8vIHRoaXMgaXMgd2hlcmUgY29udGVudCBpdHNlbGYgZ2V0cyByZW5kZXJlZC4uLlxufTtcblxuLyoqXG4gKiBUbyBiZSBvdmVycmlkZGVuIGJ5IHRoZSBzdWJjbGFzc1xuICpcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5DYW52YXNSZW5kZXJlcn0gVGhlIHJlbmRlcmVyXG4gKiBAcHJpdmF0ZVxuICovXG5Db250YWluZXIucHJvdG90eXBlLl9yZW5kZXJDYW52YXMgPSBmdW5jdGlvbiAocmVuZGVyZXIpIC8vIGpzaGludCB1bnVzZWQ6ZmFsc2VcbntcbiAgICAvLyB0aGlzIGlzIHdoZXJlIGNvbnRlbnQgaXRzZWxmIGdldHMgcmVuZGVyZWQuLi5cbn07XG5cblxuLyoqXG4gKiBSZW5kZXJzIHRoZSBvYmplY3QgdXNpbmcgdGhlIENhbnZhcyByZW5kZXJlclxuICpcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5DYW52YXNSZW5kZXJlcn0gVGhlIHJlbmRlcmVyXG4gKi9cbkNvbnRhaW5lci5wcm90b3R5cGUucmVuZGVyQ2FudmFzID0gZnVuY3Rpb24gKHJlbmRlcmVyKVxue1xuICAgIC8vIGlmIG5vdCB2aXNpYmxlIG9yIHRoZSBhbHBoYSBpcyAwIHRoZW4gbm8gbmVlZCB0byByZW5kZXIgdGhpc1xuICAgIGlmICghdGhpcy52aXNpYmxlIHx8IHRoaXMuYWxwaGEgPD0gMCB8fCAhdGhpcy5yZW5kZXJhYmxlKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICh0aGlzLl9tYXNrKVxuICAgIHtcbiAgICAgICAgcmVuZGVyZXIubWFza01hbmFnZXIucHVzaE1hc2sodGhpcy5fbWFzaywgcmVuZGVyZXIpO1xuICAgIH1cblxuICAgIHRoaXMuX3JlbmRlckNhbnZhcyhyZW5kZXJlcik7XG4gICAgZm9yICh2YXIgaSA9IDAsIGogPSB0aGlzLmNoaWxkcmVuLmxlbmd0aDsgaSA8IGo7ICsraSlcbiAgICB7XG4gICAgICAgIHRoaXMuY2hpbGRyZW5baV0ucmVuZGVyQ2FudmFzKHJlbmRlcmVyKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5fbWFzaylcbiAgICB7XG4gICAgICAgIHJlbmRlcmVyLm1hc2tNYW5hZ2VyLnBvcE1hc2socmVuZGVyZXIpO1xuICAgIH1cbn07XG5cbi8qKlxuICogRGVzdHJveXMgdGhlIGNvbnRhaW5lclxuICogQHBhcmFtIFtkZXN0cm95Q2hpbGRyZW49ZmFsc2VdIHtib29sZWFufSBpZiBzZXQgdG8gdHJ1ZSwgYWxsIHRoZSBjaGlsZHJlbiB3aWxsIGhhdmUgdGhlaXIgZGVzdHJveSBtZXRob2QgY2FsbGVkIGFzIHdlbGxcbiAqL1xuQ29udGFpbmVyLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKGRlc3Ryb3lDaGlsZHJlbilcbntcbiAgICBEaXNwbGF5T2JqZWN0LnByb3RvdHlwZS5kZXN0cm95LmNhbGwodGhpcyk7XG5cbiAgICBpZiAoZGVzdHJveUNoaWxkcmVuKVxuICAgIHtcbiAgICAgICAgZm9yICh2YXIgaSA9IDAsIGogPSB0aGlzLmNoaWxkcmVuLmxlbmd0aDsgaSA8IGo7ICsraSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5jaGlsZHJlbltpXS5kZXN0cm95KGRlc3Ryb3lDaGlsZHJlbik7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLnJlbW92ZUNoaWxkcmVuKCk7XG5cbiAgICB0aGlzLmNoaWxkcmVuID0gbnVsbDtcbn07XG4iLCJ2YXIgbWF0aCA9IHJlcXVpcmUoJy4uL21hdGgnKSxcbiAgICBSZW5kZXJUZXh0dXJlID0gcmVxdWlyZSgnLi4vdGV4dHVyZXMvUmVuZGVyVGV4dHVyZScpLFxuICAgIEV2ZW50RW1pdHRlciA9IHJlcXVpcmUoJ2V2ZW50ZW1pdHRlcjMnKSxcbiAgICBDT05TVCA9IHJlcXVpcmUoJy4uL2NvbnN0JyksXG4gICAgX3RlbXBNYXRyaXggPSBuZXcgbWF0aC5NYXRyaXgoKSxcbiAgICBfdGVtcERpc3BsYXlPYmplY3RQYXJlbnQgPSB7d29ybGRUcmFuc2Zvcm06bmV3IG1hdGguTWF0cml4KCksIHdvcmxkQWxwaGE6MSwgY2hpbGRyZW46W119O1xuXG5cbi8qKlxuICogVGhlIGJhc2UgY2xhc3MgZm9yIGFsbCBvYmplY3RzIHRoYXQgYXJlIHJlbmRlcmVkIG9uIHRoZSBzY3JlZW4uXG4gKiBUaGlzIGlzIGFuIGFic3RyYWN0IGNsYXNzIGFuZCBzaG91bGQgbm90IGJlIHVzZWQgb24gaXRzIG93biByYXRoZXIgaXQgc2hvdWxkIGJlIGV4dGVuZGVkLlxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgRXZlbnRFbWl0dGVyXG4gKiBAbWVtYmVyb2YgUElYSVxuICovXG5mdW5jdGlvbiBEaXNwbGF5T2JqZWN0KClcbntcbiAgICBFdmVudEVtaXR0ZXIuY2FsbCh0aGlzKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBjb29yZGluYXRlIG9mIHRoZSBvYmplY3QgcmVsYXRpdmUgdG8gdGhlIGxvY2FsIGNvb3JkaW5hdGVzIG9mIHRoZSBwYXJlbnQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlBvaW50fVxuICAgICAqL1xuICAgIHRoaXMucG9zaXRpb24gPSBuZXcgbWF0aC5Qb2ludCgpO1xuICAgIHRoaXMuX3Bvc2l0aW9uID0gbmV3IENhY2hlUG9pbnQodGhpcyk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgc2NhbGUgZmFjdG9yIG9mIHRoZSBvYmplY3QuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlBvaW50fVxuICAgICAqL1xuICAgIHRoaXMuc2NhbGUgPSBuZXcgbWF0aC5Qb2ludCgxLCAxKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBwaXZvdCBwb2ludCBvZiB0aGUgZGlzcGxheU9iamVjdCB0aGF0IGl0IHJvdGF0ZXMgYXJvdW5kXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlBvaW50fVxuICAgICAqL1xuICAgIHRoaXMucGl2b3QgPSBuZXcgbWF0aC5Qb2ludCgwLCAwKTtcblxuXG4gICAgLyoqXG4gICAgICogVGhlIHNrZXcgZmFjdG9yIGZvciB0aGUgb2JqZWN0IGluIHJhZGlhbnMuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlBvaW50fVxuICAgICAqL1xuICAgIHRoaXMuc2tldyA9IG5ldyBtYXRoLlBvaW50KDAsIDApO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHJvdGF0aW9uIG9mIHRoZSBvYmplY3QgaW4gcmFkaWFucy5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLl9yb3RhdGlvbiA9IDA7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgb3BhY2l0eSBvZiB0aGUgb2JqZWN0LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMuYWxwaGEgPSAxO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHZpc2liaWxpdHkgb2YgdGhlIG9iamVjdC4gSWYgZmFsc2UgdGhlIG9iamVjdCB3aWxsIG5vdCBiZSBkcmF3biwgYW5kXG4gICAgICogdGhlIHVwZGF0ZVRyYW5zZm9ybSBmdW5jdGlvbiB3aWxsIG5vdCBiZSBjYWxsZWQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqL1xuICAgIHRoaXMudmlzaWJsZSA9IHRydWU7XG5cbiAgICAvKipcbiAgICAgKiBDYW4gdGhpcyBvYmplY3QgYmUgcmVuZGVyZWQsIGlmIGZhbHNlIHRoZSBvYmplY3Qgd2lsbCBub3QgYmUgZHJhd24gYnV0IHRoZSB1cGRhdGVUcmFuc2Zvcm1cbiAgICAgKiBtZXRob2RzIHdpbGwgc3RpbGwgYmUgY2FsbGVkLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKi9cbiAgICB0aGlzLnJlbmRlcmFibGUgPSB0cnVlO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGRpc3BsYXkgb2JqZWN0IGNvbnRhaW5lciB0aGF0IGNvbnRhaW5zIHRoaXMgZGlzcGxheSBvYmplY3QuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLkNvbnRhaW5lcn1cbiAgICAgKiBAcmVhZE9ubHlcbiAgICAgKi9cbiAgICB0aGlzLnBhcmVudCA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgbXVsdGlwbGllZCBhbHBoYSBvZiB0aGUgZGlzcGxheU9iamVjdFxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEByZWFkT25seVxuICAgICAqL1xuICAgIHRoaXMud29ybGRBbHBoYSA9IDE7XG5cbiAgICAvKipcbiAgICAgKiBDdXJyZW50IHRyYW5zZm9ybSBvZiB0aGUgb2JqZWN0IGJhc2VkIG9uIHdvcmxkIChwYXJlbnQpIGZhY3RvcnNcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuTWF0cml4fVxuICAgICAqIEByZWFkT25seVxuICAgICAqL1xuICAgIHRoaXMud29ybGRUcmFuc2Zvcm0gPSBuZXcgbWF0aC5NYXRyaXgoKTtcbiAgICB0aGlzLmxvY2FsVHJhbnNmb3JtID0gbmV3IG1hdGguTWF0cml4KCk7XG5cblxuICAgIC8qKlxuICAgICAqIFRoZSBhcmVhIHRoZSBmaWx0ZXIgaXMgYXBwbGllZCB0by4gVGhpcyBpcyB1c2VkIGFzIG1vcmUgb2YgYW4gb3B0aW1pc2F0aW9uXG4gICAgICogcmF0aGVyIHRoYW4gZmlndXJpbmcgb3V0IHRoZSBkaW1lbnNpb25zIG9mIHRoZSBkaXNwbGF5T2JqZWN0IGVhY2ggZnJhbWUgeW91IGNhbiBzZXQgdGhpcyByZWN0YW5nbGVcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuUmVjdGFuZ2xlfVxuICAgICAqL1xuICAgIHRoaXMuZmlsdGVyQXJlYSA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBjYWNoZWQgc2luIHJvdGF0aW9uXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9zciA9IDA7XG5cbiAgICAvKipcbiAgICAgKiBjYWNoZWQgY29zIHJvdGF0aW9uXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9jciA9IDE7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgb3JpZ2luYWwsIGNhY2hlZCBib3VuZHMgb2YgdGhlIG9iamVjdFxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5SZWN0YW5nbGV9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9ib3VuZHMgPSBuZXcgbWF0aC5SZWN0YW5nbGUoMCwgMCwgMSwgMSk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgbW9zdCB1cC10by1kYXRlIGJvdW5kcyBvZiB0aGUgb2JqZWN0XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlJlY3RhbmdsZX1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX2N1cnJlbnRCb3VuZHMgPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogVGhlIG9yaWdpbmFsLCBjYWNoZWQgbWFzayBvZiB0aGUgb2JqZWN0XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlJlY3RhbmdsZX1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX21hc2sgPSBudWxsO1xuXG4gICAgdGhpcy5kaXJ0eVRyYW5zZm9ybSA9IHRydWU7XG59XG5cbi8vIGNvbnN0cnVjdG9yXG5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoRXZlbnRFbWl0dGVyLnByb3RvdHlwZSk7XG5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IERpc3BsYXlPYmplY3Q7XG5tb2R1bGUuZXhwb3J0cyA9IERpc3BsYXlPYmplY3Q7XG5cbnZhciBDYWNoZVBvaW50ID0gZnVuY3Rpb24oZG9jKXtcbiAgICBcbiAgICB0aGlzLmRvYyA9IGRvYztcblxuICAgIHRoaXMueCA9IDA7XG4gICAgdGhpcy55ID0gMDtcbn1cblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoQ2FjaGVQb2ludC5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBUaGUgcG9zaXRpb24gb2YgdGhlIGRpc3BsYXlPYmplY3Qgb24gdGhlIHggYXhpcyByZWxhdGl2ZSB0byB0aGUgbG9jYWwgY29vcmRpbmF0ZXMgb2YgdGhlIHBhcmVudC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5EaXNwbGF5T2JqZWN0I1xuICAgICAqL1xuICAgIHg6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5kb2MucG9zaXRpb24ueDtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuZG9jLnBvc2l0aW9uLnggPSB2YWx1ZTtcbiAgICAgICAgICAgIHRoaXMuZG9jLmRpcnR5VHJhbnNmb3JtID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICB5OiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZG9jLnBvc2lpdG9uLnk7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmRvYy5wb3NpdGlvbi55ID0gdmFsdWU7XG4gICAgICAgICAgICB0aGlzLmRvYy5kaXJ0eVRyYW5zZm9ybSA9IHRydWU7XG4gICAgICAgIH1cbiAgICB9XG59KTtcblxuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhEaXNwbGF5T2JqZWN0LnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFRoZSBwb3NpdGlvbiBvZiB0aGUgZGlzcGxheU9iamVjdCBvbiB0aGUgeCBheGlzIHJlbGF0aXZlIHRvIHRoZSBsb2NhbCBjb29yZGluYXRlcyBvZiB0aGUgcGFyZW50LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLkRpc3BsYXlPYmplY3QjXG4gICAgICovXG4gICAgeDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnBvc2l0aW9uLng7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnBvc2l0aW9uLnggPSB2YWx1ZTtcbiAgICAgICAgICAgIHRoaXMuZGlydHlUcmFuc2Zvcm0gPSB0cnVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFRoZSBwb3NpdGlvbiBvZiB0aGUgZGlzcGxheU9iamVjdCBvbiB0aGUgeSBheGlzIHJlbGF0aXZlIHRvIHRoZSBsb2NhbCBjb29yZGluYXRlcyBvZiB0aGUgcGFyZW50LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLkRpc3BsYXlPYmplY3QjXG4gICAgICovXG4gICAgeToge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnBvc2l0aW9uLnk7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnBvc2l0aW9uLnkgPSB2YWx1ZTtcbiAgICAgICAgICAgIHRoaXMuZGlydHlUcmFuc2Zvcm0gPSB0cnVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIHNjYWxlWDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnNjYWxlLng7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnNjYWxlLnggPSB2YWx1ZTtcbiAgICAgICAgICAgIHRoaXMuZGlydHlUcmFuc2Zvcm0gPSB0cnVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFRoZSBwb3NpdGlvbiBvZiB0aGUgZGlzcGxheU9iamVjdCBvbiB0aGUgeSBheGlzIHJlbGF0aXZlIHRvIHRoZSBsb2NhbCBjb29yZGluYXRlcyBvZiB0aGUgcGFyZW50LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLkRpc3BsYXlPYmplY3QjXG4gICAgICovXG4gICAgc2NhbGVZOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuc2NhbGUueTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuc2NhbGUueSA9IHZhbHVlO1xuICAgICAgICAgICAgdGhpcy5kaXJ0eVRyYW5zZm9ybSA9IHRydWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgcm90YXRpb246IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fcm90YXRpb247XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLl9yb3RhdGlvbiA9IHZhbHVlO1xuICAgICAgICAgICAgdGhpcy5kaXJ0eVRyYW5zZm9ybSA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLl9zciA9IE1hdGguc2luKHZhbHVlKTtcbiAgICAgICAgICAgIHRoaXMuX2NyID0gTWF0aC5jb3ModmFsdWUpO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFRoZSBwb3NpdGlvbiBvZiB0aGUgZGlzcGxheU9iamVjdCBvbiB0aGUgeSBheGlzIHJlbGF0aXZlIHRvIHRoZSBsb2NhbCBjb29yZGluYXRlcyBvZiB0aGUgcGFyZW50LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLkRpc3BsYXlPYmplY3QjXG4gICAgICovXG4gICAgc2NhbGVZOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuc2NhbGUueTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuc2NhbGUueSA9IHZhbHVlO1xuICAgICAgICAgICAgdGhpcy5kaXJ0eVRyYW5zZm9ybSA9IHRydWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogSW5kaWNhdGVzIGlmIHRoZSBzcHJpdGUgaXMgZ2xvYmFsbHkgdmlzaWJsZS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICogQG1lbWJlcm9mIFBJWEkuRGlzcGxheU9iamVjdCNcbiAgICAgKiBAcmVhZG9ubHlcbiAgICAgKi9cbiAgICB3b3JsZFZpc2libGU6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICB2YXIgaXRlbSA9IHRoaXM7XG5cbiAgICAgICAgICAgIGRvIHtcbiAgICAgICAgICAgICAgICBpZiAoIWl0ZW0udmlzaWJsZSlcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpdGVtID0gaXRlbS5wYXJlbnQ7XG4gICAgICAgICAgICB9IHdoaWxlIChpdGVtKTtcblxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogU2V0cyBhIG1hc2sgZm9yIHRoZSBkaXNwbGF5T2JqZWN0LiBBIG1hc2sgaXMgYW4gb2JqZWN0IHRoYXQgbGltaXRzIHRoZSB2aXNpYmlsaXR5IG9mIGFuIG9iamVjdCB0byB0aGUgc2hhcGUgb2YgdGhlIG1hc2sgYXBwbGllZCB0byBpdC5cbiAgICAgKiBJbiBQSVhJIGEgcmVndWxhciBtYXNrIG11c3QgYmUgYSBQSVhJLkdyYXBoaWNzIG9yIGEgUElYSS5TcHJpdGUgb2JqZWN0LiBUaGlzIGFsbG93cyBmb3IgbXVjaCBmYXN0ZXIgbWFza2luZyBpbiBjYW52YXMgYXMgaXQgdXRpbGlzZXMgc2hhcGUgY2xpcHBpbmcuXG4gICAgICogVG8gcmVtb3ZlIGEgbWFzaywgc2V0IHRoaXMgcHJvcGVydHkgdG8gbnVsbC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuR3JhcGhpY3N8UElYSS5TcHJpdGV9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuRGlzcGxheU9iamVjdCNcbiAgICAgKi9cbiAgICBtYXNrOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX21hc2s7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICBpZiAodGhpcy5fbWFzaylcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9tYXNrLnJlbmRlcmFibGUgPSB0cnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLl9tYXNrID0gdmFsdWU7XG5cbiAgICAgICAgICAgIGlmICh0aGlzLl9tYXNrKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHRoaXMuX21hc2sucmVuZGVyYWJsZSA9IGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIGZpbHRlcnMgZm9yIHRoZSBkaXNwbGF5T2JqZWN0LlxuICAgICAqICogSU1QT1JUQU5UOiBUaGlzIGlzIGEgd2ViR0wgb25seSBmZWF0dXJlIGFuZCB3aWxsIGJlIGlnbm9yZWQgYnkgdGhlIGNhbnZhcyByZW5kZXJlci5cbiAgICAgKiBUbyByZW1vdmUgZmlsdGVycyBzaW1wbHkgc2V0IHRoaXMgcHJvcGVydHkgdG8gJ251bGwnXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLkFic3RyYWN0RmlsdGVyW119XG4gICAgICogQG1lbWJlcm9mIFBJWEkuRGlzcGxheU9iamVjdCNcbiAgICAgKi9cbiAgICBmaWx0ZXJzOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2ZpbHRlcnMgJiYgdGhpcy5fZmlsdGVycy5zbGljZSgpO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5fZmlsdGVycyA9IHZhbHVlICYmIHZhbHVlLnNsaWNlKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbn0pO1xuXG4vKlxuICogVXBkYXRlcyB0aGUgb2JqZWN0IHRyYW5zZm9ybSBmb3IgcmVuZGVyaW5nXG4gKlxuICogVE9ETyAtIE9wdGltaXphdGlvbiBwYXNzIVxuICovXG5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS51cGRhdGVUcmFuc2Zvcm0gPSBmdW5jdGlvbiAoKVxue1xuICAgIHZhciBwdCA9IHRoaXMucGFyZW50LndvcmxkVHJhbnNmb3JtO1xuICAgIHZhciB3dCA9IHRoaXMud29ybGRUcmFuc2Zvcm07XG4gICAgdmFyIGx0ID0gdGhpcy5sb2NhbFRyYW5zZm9ybTtcblxuICAgIGlmKHRoaXMuZGlydHlUcmFuc2Zvcm0pXG4gICAge1xuICAgICAgICAvLyBnZXQgdGhlIG1hdHJpeCB2YWx1ZXMgb2YgdGhlIGRpc3BsYXlvYmplY3QgYmFzZWQgb24gaXRzIHRyYW5zZm9ybSBwcm9wZXJ0aWVzLi5cbiAgICAgICAgbHQuYSAgPSAgdGhpcy5fY3IgKiB0aGlzLnNjYWxlLng7XG4gICAgICAgIGx0LmIgID0gIHRoaXMuX3NyICogdGhpcy5zY2FsZS54O1xuICAgICAgICBsdC5jICA9IC10aGlzLl9zciAqIHRoaXMuc2NhbGUueTtcbiAgICAgICAgbHQuZCAgPSAgdGhpcy5fY3IgKiB0aGlzLnNjYWxlLnk7XG4gICAgICAgIGx0LnR4ID0gIHRoaXMucG9zaXRpb24ueCAtICh0aGlzLnBpdm90LnggKiBsdC5hICsgdGhpcy5waXZvdC55ICogbHQuYyk7XG4gICAgICAgIGx0LnR5ID0gIHRoaXMucG9zaXRpb24ueSAtICh0aGlzLnBpdm90LnggKiBsdC5iICsgdGhpcy5waXZvdC55ICogbHQuZCk7XG4gICAgfVxuXG4gICAgaWYodGhpcy5kaXJ0eVRyYW5zZm9ybSB8fCB0aGlzLnBhcmVudC5kaXJ0eVRyYW5zZm9ybSlcbiAgICB7ICAgICAgXG4gICAgICAgIC8vIGNvbmNhdCB0aGUgcGFyZW50IG1hdHJpeCB3aXRoIHRoZSBvYmplY3RzIHRyYW5zZm9ybS5cbiAgICAgICAgd3QuYSAgPSBsdC5hICAqIHB0LmEgKyBsdC5iICAqIHB0LmM7XG4gICAgICAgIHd0LmIgID0gbHQuYSAgKiBwdC5iICsgbHQuYiAgKiBwdC5kO1xuICAgICAgICB3dC5jICA9IGx0LmMgICogcHQuYSArIGx0LmQgICogcHQuYztcbiAgICAgICAgd3QuZCAgPSBsdC5jICAqIHB0LmIgKyBsdC5kICAqIHB0LmQ7XG4gICAgICAgIHd0LnR4ID0gbHQudHggKiBwdC5hICsgbHQudHkgKiBwdC5jICsgcHQudHg7XG4gICAgICAgIHd0LnR5ID0gbHQudHggKiBwdC5iICsgbHQudHkgKiBwdC5kICsgcHQudHk7ICAgICAgIFxuICAgIFxuICAgICAgICB0aGlzLl9jdXJyZW50Qm91bmRzID0gbnVsbDtcbiAgICB9XG5cbiAgICAvLyBtdWx0aXBseSB0aGUgYWxwaGFzLi5cbiAgICB0aGlzLndvcmxkQWxwaGEgPSB0aGlzLmFscGhhICogdGhpcy5wYXJlbnQud29ybGRBbHBoYTtcblxuICAgIC8vIHJlc2V0IHRoZSBib3VuZHMgZWFjaCB0aW1lIHRoaXMgaXMgY2FsbGVkIVxuICAgIFxufTtcblxuLy8gcGVyZm9ybWFuY2UgaW5jcmVhc2UgdG8gYXZvaWQgdXNpbmcgY2FsbC4uICgxMHggZmFzdGVyKVxuRGlzcGxheU9iamVjdC5wcm90b3R5cGUuZGlzcGxheU9iamVjdFVwZGF0ZVRyYW5zZm9ybSA9IERpc3BsYXlPYmplY3QucHJvdG90eXBlLnVwZGF0ZVRyYW5zZm9ybTtcblxuLyoqXG4gKlxuICpcbiAqIFJldHJpZXZlcyB0aGUgYm91bmRzIG9mIHRoZSBkaXNwbGF5T2JqZWN0IGFzIGEgcmVjdGFuZ2xlIG9iamVjdFxuICpcbiAqIEBwYXJhbSBtYXRyaXgge1BJWEkuTWF0cml4fVxuICogQHJldHVybiB7UElYSS5SZWN0YW5nbGV9IHRoZSByZWN0YW5ndWxhciBib3VuZGluZyBhcmVhXG4gKi9cbkRpc3BsYXlPYmplY3QucHJvdG90eXBlLmdldEJvdW5kcyA9IGZ1bmN0aW9uIChtYXRyaXgpIC8vIGpzaGludCB1bnVzZWQ6ZmFsc2VcbntcbiAgICByZXR1cm4gbWF0aC5SZWN0YW5nbGUuRU1QVFk7XG59O1xuXG4vKipcbiAqIFJldHJpZXZlcyB0aGUgbG9jYWwgYm91bmRzIG9mIHRoZSBkaXNwbGF5T2JqZWN0IGFzIGEgcmVjdGFuZ2xlIG9iamVjdFxuICpcbiAqIEByZXR1cm4ge1BJWEkuUmVjdGFuZ2xlfSB0aGUgcmVjdGFuZ3VsYXIgYm91bmRpbmcgYXJlYVxuICovXG5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS5nZXRMb2NhbEJvdW5kcyA9IGZ1bmN0aW9uICgpXG57XG4gICAgcmV0dXJuIHRoaXMuZ2V0Qm91bmRzKG1hdGguTWF0cml4LklERU5USVRZKTtcbn07XG5cbi8qKlxuICogQ2FsY3VsYXRlcyB0aGUgZ2xvYmFsIHBvc2l0aW9uIG9mIHRoZSBkaXNwbGF5IG9iamVjdFxuICpcbiAqIEBwYXJhbSBwb3NpdGlvbiB7UElYSS5Qb2ludH0gVGhlIHdvcmxkIG9yaWdpbiB0byBjYWxjdWxhdGUgZnJvbVxuICogQHJldHVybiB7UElYSS5Qb2ludH0gQSBwb2ludCBvYmplY3QgcmVwcmVzZW50aW5nIHRoZSBwb3NpdGlvbiBvZiB0aGlzIG9iamVjdFxuICovXG5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS50b0dsb2JhbCA9IGZ1bmN0aW9uIChwb3NpdGlvbilcbntcbiAgICAvLyB0aGlzIHBhcmVudCBjaGVjayBpcyBmb3IganVzdCBpbiBjYXNlIHRoZSBpdGVtIGlzIGEgcm9vdCBvYmplY3QuXG4gICAgLy8gSWYgaXQgaXMgd2UgbmVlZCB0byBnaXZlIGl0IGEgdGVtcG9yYXJ5IHBhcmVudCBzbyB0aGF0IGRpc3BsYXlPYmplY3RVcGRhdGVUcmFuc2Zvcm0gd29ya3MgY29ycmVjdGx5XG4gICAgLy8gdGhpcyBpcyBtYWlubHkgdG8gYXZvaWQgYSBwYXJlbnQgY2hlY2sgaW4gdGhlIG1haW4gbG9vcC4gRXZlcnkgbGl0dGxlIGhlbHBzIGZvciBwZXJmb3JtYW5jZSA6KVxuICAgIGlmKCF0aGlzLnBhcmVudClcbiAgICB7XG4gICAgICAgIHRoaXMucGFyZW50ID0gX3RlbXBEaXNwbGF5T2JqZWN0UGFyZW50O1xuICAgICAgICB0aGlzLmRpc3BsYXlPYmplY3RVcGRhdGVUcmFuc2Zvcm0oKTtcbiAgICAgICAgdGhpcy5wYXJlbnQgPSBudWxsO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICB0aGlzLmRpc3BsYXlPYmplY3RVcGRhdGVUcmFuc2Zvcm0oKTtcbiAgICB9XG5cbiAgICAvLyBkb24ndCBuZWVkIHRvIHVwZGF0ZSB0aGUgbG90XG4gICAgcmV0dXJuIHRoaXMud29ybGRUcmFuc2Zvcm0uYXBwbHkocG9zaXRpb24pO1xufTtcblxuLyoqXG4gKiBDYWxjdWxhdGVzIHRoZSBsb2NhbCBwb3NpdGlvbiBvZiB0aGUgZGlzcGxheSBvYmplY3QgcmVsYXRpdmUgdG8gYW5vdGhlciBwb2ludFxuICpcbiAqIEBwYXJhbSBwb3NpdGlvbiB7UElYSS5Qb2ludH0gVGhlIHdvcmxkIG9yaWdpbiB0byBjYWxjdWxhdGUgZnJvbVxuICogQHBhcmFtIFtmcm9tXSB7UElYSS5EaXNwbGF5T2JqZWN0fSBUaGUgRGlzcGxheU9iamVjdCB0byBjYWxjdWxhdGUgdGhlIGdsb2JhbCBwb3NpdGlvbiBmcm9tXG4gKiBAcGFyYW0gW3BvaW50XSB7UElYSS5Qb2ludH0gQSBQb2ludCBvYmplY3QgaW4gd2hpY2ggdG8gc3RvcmUgdGhlIHZhbHVlLCBvcHRpb25hbCAob3RoZXJ3aXNlIHdpbGwgY3JlYXRlIGEgbmV3IFBvaW50KVxuICogQHJldHVybiB7UElYSS5Qb2ludH0gQSBwb2ludCBvYmplY3QgcmVwcmVzZW50aW5nIHRoZSBwb3NpdGlvbiBvZiB0aGlzIG9iamVjdFxuICovXG5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS50b0xvY2FsID0gZnVuY3Rpb24gKHBvc2l0aW9uLCBmcm9tLCBwb2ludClcbntcbiAgICBpZiAoZnJvbSlcbiAgICB7XG4gICAgICAgIHBvc2l0aW9uID0gZnJvbS50b0dsb2JhbChwb3NpdGlvbik7XG4gICAgfVxuXG4gICAgLy8gdGhpcyBwYXJlbnQgY2hlY2sgaXMgZm9yIGp1c3QgaW4gY2FzZSB0aGUgaXRlbSBpcyBhIHJvb3Qgb2JqZWN0LlxuICAgIC8vIElmIGl0IGlzIHdlIG5lZWQgdG8gZ2l2ZSBpdCBhIHRlbXBvcmFyeSBwYXJlbnQgc28gdGhhdCBkaXNwbGF5T2JqZWN0VXBkYXRlVHJhbnNmb3JtIHdvcmtzIGNvcnJlY3RseVxuICAgIC8vIHRoaXMgaXMgbWFpbmx5IHRvIGF2b2lkIGEgcGFyZW50IGNoZWNrIGluIHRoZSBtYWluIGxvb3AuIEV2ZXJ5IGxpdHRsZSBoZWxwcyBmb3IgcGVyZm9ybWFuY2UgOilcbiAgICBpZighdGhpcy5wYXJlbnQpXG4gICAge1xuICAgICAgICB0aGlzLnBhcmVudCA9IF90ZW1wRGlzcGxheU9iamVjdFBhcmVudDtcbiAgICAgICAgdGhpcy5kaXNwbGF5T2JqZWN0VXBkYXRlVHJhbnNmb3JtKCk7XG4gICAgICAgIHRoaXMucGFyZW50ID0gbnVsbDtcbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgdGhpcy5kaXNwbGF5T2JqZWN0VXBkYXRlVHJhbnNmb3JtKCk7XG4gICAgfVxuXG4gICAgLy8gc2ltcGx5IGFwcGx5IHRoZSBtYXRyaXguLlxuICAgIHJldHVybiB0aGlzLndvcmxkVHJhbnNmb3JtLmFwcGx5SW52ZXJzZShwb3NpdGlvbiwgcG9pbnQpO1xufTtcblxuLyoqXG4gKiBSZW5kZXJzIHRoZSBvYmplY3QgdXNpbmcgdGhlIFdlYkdMIHJlbmRlcmVyXG4gKlxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLldlYkdMUmVuZGVyZXJ9IFRoZSByZW5kZXJlclxuICogQHByaXZhdGVcbiAqL1xuRGlzcGxheU9iamVjdC5wcm90b3R5cGUucmVuZGVyV2ViR0wgPSBmdW5jdGlvbiAocmVuZGVyZXIpIC8vIGpzaGludCB1bnVzZWQ6ZmFsc2VcbntcbiAgICAvLyBPVkVSV1JJVEU7XG59O1xuXG4vKipcbiAqIFJlbmRlcnMgdGhlIG9iamVjdCB1c2luZyB0aGUgQ2FudmFzIHJlbmRlcmVyXG4gKlxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLkNhbnZhc1JlbmRlcmVyfSBUaGUgcmVuZGVyZXJcbiAqIEBwcml2YXRlXG4gKi9cbkRpc3BsYXlPYmplY3QucHJvdG90eXBlLnJlbmRlckNhbnZhcyA9IGZ1bmN0aW9uIChyZW5kZXJlcikgLy8ganNoaW50IHVudXNlZDpmYWxzZVxue1xuICAgIC8vIE9WRVJXUklURTtcbn07XG4vKipcbiAqIFVzZWZ1bCBmdW5jdGlvbiB0aGF0IHJldHVybnMgYSB0ZXh0dXJlIG9mIHRoZSBkaXNwbGF5IG9iamVjdCB0aGF0IGNhbiB0aGVuIGJlIHVzZWQgdG8gY3JlYXRlIHNwcml0ZXNcbiAqIFRoaXMgY2FuIGJlIHF1aXRlIHVzZWZ1bCBpZiB5b3VyIGRpc3BsYXlPYmplY3QgaXMgc3RhdGljIC8gY29tcGxpY2F0ZWQgYW5kIG5lZWRzIHRvIGJlIHJldXNlZCBtdWx0aXBsZSB0aW1lcy5cbiAqXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuQ2FudmFzUmVuZGVyZXJ8UElYSS5XZWJHTFJlbmRlcmVyfSBUaGUgcmVuZGVyZXIgdXNlZCB0byBnZW5lcmF0ZSB0aGUgdGV4dHVyZS5cbiAqIEBwYXJhbSBzY2FsZU1vZGUge251bWJlcn0gU2VlIHtAbGluayBQSVhJLlNDQUxFX01PREVTfSBmb3IgcG9zc2libGUgdmFsdWVzXG4gKiBAcGFyYW0gcmVzb2x1dGlvbiB7bnVtYmVyfSBUaGUgcmVzb2x1dGlvbiBvZiB0aGUgdGV4dHVyZSBiZWluZyBnZW5lcmF0ZWRcbiAqIEByZXR1cm4ge1BJWEkuVGV4dHVyZX0gYSB0ZXh0dXJlIG9mIHRoZSBkaXNwbGF5IG9iamVjdFxuICovXG5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS5nZW5lcmF0ZVRleHR1cmUgPSBmdW5jdGlvbiAocmVuZGVyZXIsIHNjYWxlTW9kZSwgcmVzb2x1dGlvbilcbntcbiAgICB2YXIgYm91bmRzID0gdGhpcy5nZXRMb2NhbEJvdW5kcygpO1xuXG4gICAgdmFyIHJlbmRlclRleHR1cmUgPSBuZXcgUmVuZGVyVGV4dHVyZShyZW5kZXJlciwgYm91bmRzLndpZHRoIHwgMCwgYm91bmRzLmhlaWdodCB8IDAsIHNjYWxlTW9kZSwgcmVzb2x1dGlvbik7XG5cbiAgICBfdGVtcE1hdHJpeC50eCA9IC1ib3VuZHMueDtcbiAgICBfdGVtcE1hdHJpeC50eSA9IC1ib3VuZHMueTtcblxuICAgIHJlbmRlclRleHR1cmUucmVuZGVyKHRoaXMsIF90ZW1wTWF0cml4KTtcblxuICAgIHJldHVybiByZW5kZXJUZXh0dXJlO1xufTtcblxuLyoqXG4gKiBTZXQgdGhlIHBhcmVudCBDb250YWluZXIgb2YgdGhpcyBEaXNwbGF5T2JqZWN0XG4gKlxuICogQHBhcmFtIGNvbnRhaW5lciB7Q29udGFpbmVyfSBUaGUgQ29udGFpbmVyIHRvIGFkZCB0aGlzIERpc3BsYXlPYmplY3QgdG9cbiAqIEByZXR1cm4ge0NvbnRhaW5lcn0gVGhlIENvbnRhaW5lciB0aGF0IHRoaXMgRGlzcGxheU9iamVjdCB3YXMgYWRkZWQgdG9cbiAqL1xuRGlzcGxheU9iamVjdC5wcm90b3R5cGUuc2V0UGFyZW50ID0gZnVuY3Rpb24gKGNvbnRhaW5lcilcbntcbiAgICBpZiAoIWNvbnRhaW5lciB8fCAhY29udGFpbmVyLmFkZENoaWxkKVxuICAgIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdzZXRQYXJlbnQ6IEFyZ3VtZW50IG11c3QgYmUgYSBDb250YWluZXInKTtcbiAgICB9XG5cbiAgICBjb250YWluZXIuYWRkQ2hpbGQodGhpcyk7XG4gICAgcmV0dXJuIGNvbnRhaW5lcjtcbn07XG5cbi8qKlxuICogQ29udmVuaWVuY2UgZnVuY3Rpb24gdG8gc2V0IHRoZSBwb3N0aW9uLCBzY2FsZSwgc2tldyBhbmQgcGl2b3QgYXQgb25jZS5cbiAqXG4gKiBAcGFyYW0gW3g9MF0ge251bWJlcn0gVGhlIFggcG9zaXRpb25cbiAqIEBwYXJhbSBbeT0wXSB7bnVtYmVyfSBUaGUgWSBwb3NpdGlvblxuICogQHBhcmFtIFtzY2FsZVg9MV0ge251bWJlcn0gVGhlIFggc2NhbGUgdmFsdWVcbiAqIEBwYXJhbSBbc2NhbGVZPTFdIHtudW1iZXJ9IFRoZSBZIHNjYWxlIHZhbHVlXG4gKiBAcGFyYW0gW3JvdGF0aW9uPTBdIHtudW1iZXJ9IFRoZSByb3RhdGlvblxuICogQHBhcmFtIFtza2V3WD0wXSB7bnVtYmVyfSBUaGUgWCBza2V3IHZhbHVlXG4gKiBAcGFyYW0gW3NrZXdZPTBdIHtudW1iZXJ9IFRoZSBZIHNrZXcgdmFsdWVcbiAqIEBwYXJhbSBbcGl2b3RYPTBdIHtudW1iZXJ9IFRoZSBYIHBpdm90IHZhbHVlXG4gKiBAcGFyYW0gW3Bpdm90WT0wXSB7bnVtYmVyfSBUaGUgWSBwaXZvdCB2YWx1ZVxuICogQHJldHVybiB7UElYSS5EaXNwbGF5T2JqZWN0fVxuICovXG5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS5zZXRUcmFuc2Zvcm0gPSBmdW5jdGlvbih4LCB5LCBzY2FsZVgsIHNjYWxlWSwgcm90YXRpb24sIHNrZXdYLCBza2V3WSwgcGl2b3RYLCBwaXZvdFkpIC8vanNoaW50IGlnbm9yZTpsaW5lXG57XG4gICAgdGhpcy5wb3NpdGlvbi54ID0geCB8fCAwO1xuICAgIHRoaXMucG9zaXRpb24ueSA9IHkgfHwgMDtcbiAgICB0aGlzLnNjYWxlLnggPSAhc2NhbGVYID8gMSA6IHNjYWxlWDtcbiAgICB0aGlzLnNjYWxlLnkgPSAhc2NhbGVZID8gMSA6IHNjYWxlWTtcbiAgICB0aGlzLnJvdGF0aW9uID0gcm90YXRpb24gfHwgMDtcbiAgICB0aGlzLnNrZXcueCA9IHNrZXdYIHx8IDA7XG4gICAgdGhpcy5za2V3LnkgPSBza2V3WSB8fCAwO1xuICAgIHRoaXMucGl2b3QueCA9IHBpdm90WCB8fCAwO1xuICAgIHRoaXMucGl2b3QueSA9IHBpdm90WSB8fCAwO1xuICAgIHRoaXMuZGlydHlUcmFuc2Zvcm0gPSB0cnVlO1xuICAgIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBCYXNlIGRlc3Ryb3kgbWV0aG9kIGZvciBnZW5lcmljIGRpc3BsYXkgb2JqZWN0c1xuICpcbiAqL1xuRGlzcGxheU9iamVjdC5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uICgpXG57XG5cbiAgICB0aGlzLnBvc2l0aW9uID0gbnVsbDtcbiAgICB0aGlzLnNjYWxlID0gbnVsbDtcbiAgICB0aGlzLnBpdm90ID0gbnVsbDtcbiAgICB0aGlzLnNrZXcgPSBudWxsO1xuXG4gICAgdGhpcy5wYXJlbnQgPSBudWxsO1xuXG4gICAgdGhpcy5fYm91bmRzID0gbnVsbDtcbiAgICB0aGlzLl9jdXJyZW50Qm91bmRzID0gbnVsbDtcbiAgICB0aGlzLl9tYXNrID0gbnVsbDtcblxuICAgIHRoaXMud29ybGRUcmFuc2Zvcm0gPSBudWxsO1xuICAgIHRoaXMuZmlsdGVyQXJlYSA9IG51bGw7XG59O1xuIiwidmFyIENvbnRhaW5lciA9IHJlcXVpcmUoJy4uL2Rpc3BsYXkvQ29udGFpbmVyJyksXG4gICAgVGV4dHVyZSA9IHJlcXVpcmUoJy4uL3RleHR1cmVzL1RleHR1cmUnKSxcbiAgICBDYW52YXNCdWZmZXIgPSByZXF1aXJlKCcuLi9yZW5kZXJlcnMvY2FudmFzL3V0aWxzL0NhbnZhc0J1ZmZlcicpLFxuICAgIENhbnZhc0dyYXBoaWNzID0gcmVxdWlyZSgnLi4vcmVuZGVyZXJzL2NhbnZhcy91dGlscy9DYW52YXNHcmFwaGljcycpLFxuICAgIEdyYXBoaWNzRGF0YSA9IHJlcXVpcmUoJy4vR3JhcGhpY3NEYXRhJyksXG4gICAgbWF0aCA9IHJlcXVpcmUoJy4uL21hdGgnKSxcbiAgICBDT05TVCA9IHJlcXVpcmUoJy4uL2NvbnN0JyksXG4gICAgdGVtcFBvaW50ID0gbmV3IG1hdGguUG9pbnQoKTtcblxuLyoqXG4gKiBUaGUgR3JhcGhpY3MgY2xhc3MgY29udGFpbnMgbWV0aG9kcyB1c2VkIHRvIGRyYXcgcHJpbWl0aXZlIHNoYXBlcyBzdWNoIGFzIGxpbmVzLCBjaXJjbGVzIGFuZFxuICogcmVjdGFuZ2xlcyB0byB0aGUgZGlzcGxheSwgYW5kIHRvIGNvbG9yIGFuZCBmaWxsIHRoZW0uXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLkNvbnRhaW5lclxuICogQG1lbWJlcm9mIFBJWElcbiAqL1xuZnVuY3Rpb24gR3JhcGhpY3MoKVxue1xuICAgIENvbnRhaW5lci5jYWxsKHRoaXMpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGFscGhhIHZhbHVlIHVzZWQgd2hlbiBmaWxsaW5nIHRoZSBHcmFwaGljcyBvYmplY3QuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMVxuICAgICAqL1xuICAgIHRoaXMuZmlsbEFscGhhID0gMTtcblxuICAgIC8qKlxuICAgICAqIFRoZSB3aWR0aCAodGhpY2tuZXNzKSBvZiBhbnkgbGluZXMgZHJhd24uXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMFxuICAgICAqL1xuICAgIHRoaXMubGluZVdpZHRoID0gMDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBjb2xvciBvZiBhbnkgbGluZXMgZHJhd24uXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtzdHJpbmd9XG4gICAgICogQGRlZmF1bHQgMFxuICAgICAqL1xuICAgIHRoaXMubGluZUNvbG9yID0gMDtcblxuICAgIC8qKlxuICAgICAqIEdyYXBoaWNzIGRhdGFcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuR3JhcGhpY3NEYXRhW119XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLmdyYXBoaWNzRGF0YSA9IFtdO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHRpbnQgYXBwbGllZCB0byB0aGUgZ3JhcGhpYyBzaGFwZS4gVGhpcyBpcyBhIGhleCB2YWx1ZS4gQXBwbHkgYSB2YWx1ZSBvZiAweEZGRkZGRiB0byByZXNldCB0aGUgdGludC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAweEZGRkZGRlxuICAgICAqL1xuICAgIHRoaXMudGludCA9IDB4RkZGRkZGO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHByZXZpb3VzIHRpbnQgYXBwbGllZCB0byB0aGUgZ3JhcGhpYyBzaGFwZS4gVXNlZCB0byBjb21wYXJlIHRvIHRoZSBjdXJyZW50IHRpbnQgYW5kIGNoZWNrIGlmIHRoZXJlcyBjaGFuZ2UuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAZGVmYXVsdCAweEZGRkZGRlxuICAgICAqL1xuICAgIHRoaXMuX3ByZXZUaW50ID0gMHhGRkZGRkY7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYmxlbmQgbW9kZSB0byBiZSBhcHBsaWVkIHRvIHRoZSBncmFwaGljIHNoYXBlLiBBcHBseSBhIHZhbHVlIG9mIGBQSVhJLkJMRU5EX01PREVTLk5PUk1BTGAgdG8gcmVzZXQgdGhlIGJsZW5kIG1vZGUuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgUElYSS5CTEVORF9NT0RFUy5OT1JNQUw7XG4gICAgICogQHNlZSBQSVhJLkJMRU5EX01PREVTXG4gICAgICovXG4gICAgdGhpcy5ibGVuZE1vZGUgPSBDT05TVC5CTEVORF9NT0RFUy5OT1JNQUw7XG5cbiAgICAvKipcbiAgICAgKiBDdXJyZW50IHBhdGhcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuR3JhcGhpY3NEYXRhfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5jdXJyZW50UGF0aCA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBBcnJheSBjb250YWluaW5nIHNvbWUgV2ViR0wtcmVsYXRlZCBwcm9wZXJ0aWVzIHVzZWQgYnkgdGhlIFdlYkdMIHJlbmRlcmVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7b2JqZWN0PG51bWJlciwgb2JqZWN0Pn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIC8vIFRPRE8gLSBfd2ViZ2wgc2hvdWxkIHVzZSBhIHByb3RvdHlwZSBvYmplY3QsIG5vdCBhIHJhbmRvbSB1bmRvY3VtZW50ZWQgb2JqZWN0Li4uXG4gICAgdGhpcy5fd2ViR0wgPSB7fTtcblxuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgdGhpcyBzaGFwZSBpcyBiZWluZyB1c2VkIGFzIGEgbWFzay5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICovXG4gICAgdGhpcy5pc01hc2sgPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBib3VuZHMnIHBhZGRpbmcgdXNlZCBmb3IgYm91bmRzIGNhbGN1bGF0aW9uLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMuYm91bmRzUGFkZGluZyA9IDA7XG5cbiAgICAvKipcbiAgICAgKiBBIGNhY2hlIG9mIHRoZSBsb2NhbCBib3VuZHMgdG8gcHJldmVudCByZWNhbGN1bGF0aW9uLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5SZWN0YW5nbGV9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9sb2NhbEJvdW5kcyA9IG5ldyBtYXRoLlJlY3RhbmdsZSgwLDAsMSwxKTtcblxuICAgIC8qKlxuICAgICAqIFVzZWQgdG8gZGV0ZWN0IGlmIHRoZSBncmFwaGljcyBvYmplY3QgaGFzIGNoYW5nZWQuIElmIHRoaXMgaXMgc2V0IHRvIHRydWUgdGhlbiB0aGUgZ3JhcGhpY3NcbiAgICAgKiBvYmplY3Qgd2lsbCBiZSByZWNhbGN1bGF0ZWQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5kaXJ0eSA9IHRydWU7XG5cbiAgICAvKipcbiAgICAgKiBVc2VkIHRvIGRldGVjdCBpZiB0aGUgV2ViR0wgZ3JhcGhpY3Mgb2JqZWN0IGhhcyBjaGFuZ2VkLiBJZiB0aGlzIGlzIHNldCB0byB0cnVlIHRoZW4gdGhlXG4gICAgICogZ3JhcGhpY3Mgb2JqZWN0IHdpbGwgYmUgcmVjYWxjdWxhdGVkLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuZ2xEaXJ0eSA9IGZhbHNlO1xuXG4gICAgdGhpcy5ib3VuZHNEaXJ0eSA9IHRydWU7XG5cbiAgICAvKipcbiAgICAgKiBVc2VkIHRvIGRldGVjdCBpZiB0aGUgY2FjaGVkIHNwcml0ZSBvYmplY3QgbmVlZHMgdG8gYmUgdXBkYXRlZC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLmNhY2hlZFNwcml0ZURpcnR5ID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBXaGVuIGNhY2hlQXNCaXRtYXAgaXMgc2V0IHRvIHRydWUgdGhlIGdyYXBoaWNzIG9iamVjdCB3aWxsIGJlIHJlbmRlcmVkIGFzIGlmIGl0IHdhcyBhIHNwcml0ZS5cbiAgICAgKiBUaGlzIGlzIHVzZWZ1bCBpZiB5b3VyIGdyYXBoaWNzIGVsZW1lbnQgZG9lcyBub3QgY2hhbmdlIG9mdGVuLCBhcyBpdCB3aWxsIHNwZWVkIHVwIHRoZSByZW5kZXJpbmdcbiAgICAgKiBvZiB0aGUgb2JqZWN0IGluIGV4Y2hhbmdlIGZvciB0YWtpbmcgdXAgdGV4dHVyZSBtZW1vcnkuIEl0IGlzIGFsc28gdXNlZnVsIGlmIHlvdSBuZWVkIHRoZSBncmFwaGljc1xuICAgICAqIG9iamVjdCB0byBiZSBhbnRpLWFsaWFzZWQsIGJlY2F1c2UgaXQgd2lsbCBiZSByZW5kZXJlZCB1c2luZyBjYW52YXMuIFRoaXMgaXMgbm90IHJlY29tbWVuZGVkIGlmXG4gICAgICogeW91IGFyZSBjb25zdGFudGx5IHJlZHJhd2luZyB0aGUgZ3JhcGhpY3MgZWxlbWVudC5cbiAgICAgKlxuICAgICAqIEBuYW1lIGNhY2hlQXNCaXRtYXBcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLkdyYXBoaWNzI1xuICAgICAqIEBkZWZhdWx0IGZhbHNlXG4gICAgICovXG59XG5cbi8vIGNvbnN0cnVjdG9yXG5HcmFwaGljcy5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKENvbnRhaW5lci5wcm90b3R5cGUpO1xuR3JhcGhpY3MucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gR3JhcGhpY3M7XG5tb2R1bGUuZXhwb3J0cyA9IEdyYXBoaWNzO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBuZXcgR3JhcGhpY3Mgb2JqZWN0IHdpdGggdGhlIHNhbWUgdmFsdWVzIGFzIHRoaXMgb25lLlxuICogTm90ZSB0aGF0IHRoZSBvbmx5IHRoZSBwcm9wZXJ0aWVzIG9mIHRoZSBvYmplY3QgYXJlIGNsb25lZCwgbm90IGl0cyB0cmFuc2Zvcm0gKHBvc2l0aW9uLHNjYWxlLGV0YylcbiAqXG4gKiBAcmV0dXJuIHtQSVhJLkdyYXBoaWNzfVxuICovXG5HcmFwaGljcy5wcm90b3R5cGUuY2xvbmUgPSBmdW5jdGlvbiAoKVxue1xuICAgIHZhciBjbG9uZSA9IG5ldyBHcmFwaGljcygpO1xuXG4gICAgY2xvbmUucmVuZGVyYWJsZSAgICA9IHRoaXMucmVuZGVyYWJsZTtcbiAgICBjbG9uZS5maWxsQWxwaGEgICAgID0gdGhpcy5maWxsQWxwaGE7XG4gICAgY2xvbmUubGluZVdpZHRoICAgICA9IHRoaXMubGluZVdpZHRoO1xuICAgIGNsb25lLmxpbmVDb2xvciAgICAgPSB0aGlzLmxpbmVDb2xvcjtcbiAgICBjbG9uZS50aW50ICAgICAgICAgID0gdGhpcy50aW50O1xuICAgIGNsb25lLmJsZW5kTW9kZSAgICAgPSB0aGlzLmJsZW5kTW9kZTtcbiAgICBjbG9uZS5pc01hc2sgICAgICAgID0gdGhpcy5pc01hc2s7XG4gICAgY2xvbmUuYm91bmRzUGFkZGluZyA9IHRoaXMuYm91bmRzUGFkZGluZztcbiAgICBjbG9uZS5kaXJ0eSAgICAgICAgID0gdHJ1ZTtcbiAgICBjbG9uZS5nbERpcnR5ICAgICAgID0gdHJ1ZTtcbiAgICBjbG9uZS5jYWNoZWRTcHJpdGVEaXJ0eSA9IHRoaXMuY2FjaGVkU3ByaXRlRGlydHk7XG5cbiAgICAvLyBjb3B5IGdyYXBoaWNzIGRhdGFcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuZ3JhcGhpY3NEYXRhLmxlbmd0aDsgKytpKVxuICAgIHtcbiAgICAgICAgY2xvbmUuZ3JhcGhpY3NEYXRhLnB1c2godGhpcy5ncmFwaGljc0RhdGFbaV0uY2xvbmUoKSk7XG4gICAgfVxuXG4gICAgY2xvbmUuY3VycmVudFBhdGggPSBjbG9uZS5ncmFwaGljc0RhdGFbY2xvbmUuZ3JhcGhpY3NEYXRhLmxlbmd0aCAtIDFdO1xuXG4gICAgY2xvbmUudXBkYXRlTG9jYWxCb3VuZHMoKTtcblxuICAgIHJldHVybiBjbG9uZTtcbn07XG5cbi8qKlxuICogU3BlY2lmaWVzIHRoZSBsaW5lIHN0eWxlIHVzZWQgZm9yIHN1YnNlcXVlbnQgY2FsbHMgdG8gR3JhcGhpY3MgbWV0aG9kcyBzdWNoIGFzIHRoZSBsaW5lVG8oKSBtZXRob2Qgb3IgdGhlIGRyYXdDaXJjbGUoKSBtZXRob2QuXG4gKlxuICogQHBhcmFtIGxpbmVXaWR0aCB7bnVtYmVyfSB3aWR0aCBvZiB0aGUgbGluZSB0byBkcmF3LCB3aWxsIHVwZGF0ZSB0aGUgb2JqZWN0cyBzdG9yZWQgc3R5bGVcbiAqIEBwYXJhbSBjb2xvciB7bnVtYmVyfSBjb2xvciBvZiB0aGUgbGluZSB0byBkcmF3LCB3aWxsIHVwZGF0ZSB0aGUgb2JqZWN0cyBzdG9yZWQgc3R5bGVcbiAqIEBwYXJhbSBhbHBoYSB7bnVtYmVyfSBhbHBoYSBvZiB0aGUgbGluZSB0byBkcmF3LCB3aWxsIHVwZGF0ZSB0aGUgb2JqZWN0cyBzdG9yZWQgc3R5bGVcbiAqIEByZXR1cm4ge1BJWEkuR3JhcGhpY3N9XG4gKi9cbkdyYXBoaWNzLnByb3RvdHlwZS5saW5lU3R5bGUgPSBmdW5jdGlvbiAobGluZVdpZHRoLCBjb2xvciwgYWxwaGEpXG57XG4gICAgdGhpcy5saW5lV2lkdGggPSBsaW5lV2lkdGggfHwgMDtcbiAgICB0aGlzLmxpbmVDb2xvciA9IGNvbG9yIHx8IDA7XG4gICAgdGhpcy5saW5lQWxwaGEgPSAoYWxwaGEgPT09IHVuZGVmaW5lZCkgPyAxIDogYWxwaGE7XG5cbiAgICBpZiAodGhpcy5jdXJyZW50UGF0aClcbiAgICB7XG4gICAgICAgIGlmICh0aGlzLmN1cnJlbnRQYXRoLnNoYXBlLnBvaW50cy5sZW5ndGgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIC8vIGhhbGZ3YXkgdGhyb3VnaCBhIGxpbmU/IHN0YXJ0IGEgbmV3IG9uZSFcbiAgICAgICAgICAgIHZhciBzaGFwZSA9IG5ldyBtYXRoLlBvbHlnb24odGhpcy5jdXJyZW50UGF0aC5zaGFwZS5wb2ludHMuc2xpY2UoLTIpKTtcbiAgICAgICAgICAgIHNoYXBlLmNsb3NlZCA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5kcmF3U2hhcGUoc2hhcGUpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2VcbiAgICAgICAge1xuICAgICAgICAgICAgLy8gb3RoZXJ3aXNlIGl0cyBlbXB0eSBzbyBsZXRzIGp1c3Qgc2V0IHRoZSBsaW5lIHByb3BlcnRpZXNcbiAgICAgICAgICAgIHRoaXMuY3VycmVudFBhdGgubGluZVdpZHRoID0gdGhpcy5saW5lV2lkdGg7XG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRQYXRoLmxpbmVDb2xvciA9IHRoaXMubGluZUNvbG9yO1xuICAgICAgICAgICAgdGhpcy5jdXJyZW50UGF0aC5saW5lQWxwaGEgPSB0aGlzLmxpbmVBbHBoYTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBNb3ZlcyB0aGUgY3VycmVudCBkcmF3aW5nIHBvc2l0aW9uIHRvIHgsIHkuXG4gKlxuICogQHBhcmFtIHgge251bWJlcn0gdGhlIFggY29vcmRpbmF0ZSB0byBtb3ZlIHRvXG4gKiBAcGFyYW0geSB7bnVtYmVyfSB0aGUgWSBjb29yZGluYXRlIHRvIG1vdmUgdG9cbiAqIEByZXR1cm4ge1BJWEkuR3JhcGhpY3N9XG4gICovXG5HcmFwaGljcy5wcm90b3R5cGUubW92ZVRvID0gZnVuY3Rpb24gKHgsIHkpXG57XG4gICAgdmFyIHNoYXBlID0gbmV3IG1hdGguUG9seWdvbihbeCx5XSk7XG4gICAgc2hhcGUuY2xvc2VkID0gZmFsc2U7XG4gICAgdGhpcy5kcmF3U2hhcGUoc2hhcGUpO1xuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIERyYXdzIGEgbGluZSB1c2luZyB0aGUgY3VycmVudCBsaW5lIHN0eWxlIGZyb20gdGhlIGN1cnJlbnQgZHJhd2luZyBwb3NpdGlvbiB0byAoeCwgeSk7XG4gKiBUaGUgY3VycmVudCBkcmF3aW5nIHBvc2l0aW9uIGlzIHRoZW4gc2V0IHRvICh4LCB5KS5cbiAqXG4gKiBAcGFyYW0geCB7bnVtYmVyfSB0aGUgWCBjb29yZGluYXRlIHRvIGRyYXcgdG9cbiAqIEBwYXJhbSB5IHtudW1iZXJ9IHRoZSBZIGNvb3JkaW5hdGUgdG8gZHJhdyB0b1xuICogQHJldHVybiB7UElYSS5HcmFwaGljc31cbiAqL1xuR3JhcGhpY3MucHJvdG90eXBlLmxpbmVUbyA9IGZ1bmN0aW9uICh4LCB5KVxue1xuICAgIHRoaXMuY3VycmVudFBhdGguc2hhcGUucG9pbnRzLnB1c2goeCwgeSk7XG4gICAgdGhpcy5kaXJ0eSA9IHRydWU7XG5cbiAgICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogQ2FsY3VsYXRlIHRoZSBwb2ludHMgZm9yIGEgcXVhZHJhdGljIGJlemllciBjdXJ2ZSBhbmQgdGhlbiBkcmF3cyBpdC5cbiAqIEJhc2VkIG9uOiBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy83ODUwOTcvaG93LWRvLWktaW1wbGVtZW50LWEtYmV6aWVyLWN1cnZlLWluLWNcbiAqXG4gKiBAcGFyYW0gY3BYIHtudW1iZXJ9IENvbnRyb2wgcG9pbnQgeFxuICogQHBhcmFtIGNwWSB7bnVtYmVyfSBDb250cm9sIHBvaW50IHlcbiAqIEBwYXJhbSB0b1gge251bWJlcn0gRGVzdGluYXRpb24gcG9pbnQgeFxuICogQHBhcmFtIHRvWSB7bnVtYmVyfSBEZXN0aW5hdGlvbiBwb2ludCB5XG4gKiBAcmV0dXJuIHtQSVhJLkdyYXBoaWNzfVxuICovXG5HcmFwaGljcy5wcm90b3R5cGUucXVhZHJhdGljQ3VydmVUbyA9IGZ1bmN0aW9uIChjcFgsIGNwWSwgdG9YLCB0b1kpXG57XG4gICAgaWYgKHRoaXMuY3VycmVudFBhdGgpXG4gICAge1xuICAgICAgICBpZiAodGhpcy5jdXJyZW50UGF0aC5zaGFwZS5wb2ludHMubGVuZ3RoID09PSAwKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRQYXRoLnNoYXBlLnBvaW50cyA9IFswLCAwXTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICB0aGlzLm1vdmVUbygwLDApO1xuICAgIH1cblxuICAgIHZhciB4YSxcbiAgICAgICAgeWEsXG4gICAgICAgIG4gPSAyMCxcbiAgICAgICAgcG9pbnRzID0gdGhpcy5jdXJyZW50UGF0aC5zaGFwZS5wb2ludHM7XG5cbiAgICBpZiAocG9pbnRzLmxlbmd0aCA9PT0gMClcbiAgICB7XG4gICAgICAgIHRoaXMubW92ZVRvKDAsIDApO1xuICAgIH1cblxuICAgIHZhciBmcm9tWCA9IHBvaW50c1twb2ludHMubGVuZ3RoLTJdO1xuICAgIHZhciBmcm9tWSA9IHBvaW50c1twb2ludHMubGVuZ3RoLTFdO1xuXG4gICAgdmFyIGogPSAwO1xuICAgIGZvciAodmFyIGkgPSAxOyBpIDw9IG47ICsraSlcbiAgICB7XG4gICAgICAgIGogPSBpIC8gbjtcblxuICAgICAgICB4YSA9IGZyb21YICsgKCAoY3BYIC0gZnJvbVgpICogaiApO1xuICAgICAgICB5YSA9IGZyb21ZICsgKCAoY3BZIC0gZnJvbVkpICogaiApO1xuXG4gICAgICAgIHBvaW50cy5wdXNoKCB4YSArICggKChjcFggKyAoICh0b1ggLSBjcFgpICogaiApKSAtIHhhKSAqIGogKSxcbiAgICAgICAgICAgICAgICAgICAgIHlhICsgKCAoKGNwWSArICggKHRvWSAtIGNwWSkgKiBqICkpIC0geWEpICogaiApICk7XG4gICAgfVxuXG4gICAgdGhpcy5kaXJ0eSA9IHRoaXMuYm91bmRzRGlydHkgPSB0cnVlO1xuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIENhbGN1bGF0ZSB0aGUgcG9pbnRzIGZvciBhIGJlemllciBjdXJ2ZSBhbmQgdGhlbiBkcmF3cyBpdC5cbiAqXG4gKiBAcGFyYW0gY3BYIHtudW1iZXJ9IENvbnRyb2wgcG9pbnQgeFxuICogQHBhcmFtIGNwWSB7bnVtYmVyfSBDb250cm9sIHBvaW50IHlcbiAqIEBwYXJhbSBjcFgyIHtudW1iZXJ9IFNlY29uZCBDb250cm9sIHBvaW50IHhcbiAqIEBwYXJhbSBjcFkyIHtudW1iZXJ9IFNlY29uZCBDb250cm9sIHBvaW50IHlcbiAqIEBwYXJhbSB0b1gge251bWJlcn0gRGVzdGluYXRpb24gcG9pbnQgeFxuICogQHBhcmFtIHRvWSB7bnVtYmVyfSBEZXN0aW5hdGlvbiBwb2ludCB5XG4gKiBAcmV0dXJuIHtQSVhJLkdyYXBoaWNzfVxuICovXG5HcmFwaGljcy5wcm90b3R5cGUuYmV6aWVyQ3VydmVUbyA9IGZ1bmN0aW9uIChjcFgsIGNwWSwgY3BYMiwgY3BZMiwgdG9YLCB0b1kpXG57XG4gICAgaWYgKHRoaXMuY3VycmVudFBhdGgpXG4gICAge1xuICAgICAgICBpZiAodGhpcy5jdXJyZW50UGF0aC5zaGFwZS5wb2ludHMubGVuZ3RoID09PSAwKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRQYXRoLnNoYXBlLnBvaW50cyA9IFswLCAwXTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICB0aGlzLm1vdmVUbygwLDApO1xuICAgIH1cblxuICAgIHZhciBuID0gMjAsXG4gICAgICAgIGR0LFxuICAgICAgICBkdDIsXG4gICAgICAgIGR0MyxcbiAgICAgICAgdDIsXG4gICAgICAgIHQzLFxuICAgICAgICBwb2ludHMgPSB0aGlzLmN1cnJlbnRQYXRoLnNoYXBlLnBvaW50cztcblxuICAgIHZhciBmcm9tWCA9IHBvaW50c1twb2ludHMubGVuZ3RoLTJdO1xuICAgIHZhciBmcm9tWSA9IHBvaW50c1twb2ludHMubGVuZ3RoLTFdO1xuXG4gICAgdmFyIGogPSAwO1xuXG4gICAgZm9yICh2YXIgaSA9IDE7IGkgPD0gbjsgKytpKVxuICAgIHtcbiAgICAgICAgaiA9IGkgLyBuO1xuXG4gICAgICAgIGR0ID0gKDEgLSBqKTtcbiAgICAgICAgZHQyID0gZHQgKiBkdDtcbiAgICAgICAgZHQzID0gZHQyICogZHQ7XG5cbiAgICAgICAgdDIgPSBqICogajtcbiAgICAgICAgdDMgPSB0MiAqIGo7XG5cbiAgICAgICAgcG9pbnRzLnB1c2goIGR0MyAqIGZyb21YICsgMyAqIGR0MiAqIGogKiBjcFggKyAzICogZHQgKiB0MiAqIGNwWDIgKyB0MyAqIHRvWCxcbiAgICAgICAgICAgICAgICAgICAgIGR0MyAqIGZyb21ZICsgMyAqIGR0MiAqIGogKiBjcFkgKyAzICogZHQgKiB0MiAqIGNwWTIgKyB0MyAqIHRvWSk7XG4gICAgfVxuXG4gICAgdGhpcy5kaXJ0eSA9IHRoaXMuYm91bmRzRGlydHkgPSB0cnVlO1xuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIFRoZSBhcmNUbygpIG1ldGhvZCBjcmVhdGVzIGFuIGFyYy9jdXJ2ZSBiZXR3ZWVuIHR3byB0YW5nZW50cyBvbiB0aGUgY2FudmFzLlxuICpcbiAqIFwiYm9ycm93ZWRcIiBmcm9tIGh0dHBzOi8vY29kZS5nb29nbGUuY29tL3AvZnhjYW52YXMvIC0gdGhhbmtzIGdvb2dsZSFcbiAqXG4gKiBAcGFyYW0geDEge251bWJlcn0gVGhlIHgtY29vcmRpbmF0ZSBvZiB0aGUgYmVnaW5uaW5nIG9mIHRoZSBhcmNcbiAqIEBwYXJhbSB5MSB7bnVtYmVyfSBUaGUgeS1jb29yZGluYXRlIG9mIHRoZSBiZWdpbm5pbmcgb2YgdGhlIGFyY1xuICogQHBhcmFtIHgyIHtudW1iZXJ9IFRoZSB4LWNvb3JkaW5hdGUgb2YgdGhlIGVuZCBvZiB0aGUgYXJjXG4gKiBAcGFyYW0geTIge251bWJlcn0gVGhlIHktY29vcmRpbmF0ZSBvZiB0aGUgZW5kIG9mIHRoZSBhcmNcbiAqIEBwYXJhbSByYWRpdXMge251bWJlcn0gVGhlIHJhZGl1cyBvZiB0aGUgYXJjXG4gKiBAcmV0dXJuIHtQSVhJLkdyYXBoaWNzfVxuICovXG5HcmFwaGljcy5wcm90b3R5cGUuYXJjVG8gPSBmdW5jdGlvbiAoeDEsIHkxLCB4MiwgeTIsIHJhZGl1cylcbntcbiAgICBpZiAodGhpcy5jdXJyZW50UGF0aClcbiAgICB7XG4gICAgICAgIGlmICh0aGlzLmN1cnJlbnRQYXRoLnNoYXBlLnBvaW50cy5sZW5ndGggPT09IDApXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuY3VycmVudFBhdGguc2hhcGUucG9pbnRzLnB1c2goeDEsIHkxKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICB0aGlzLm1vdmVUbyh4MSwgeTEpO1xuICAgIH1cblxuICAgIHZhciBwb2ludHMgPSB0aGlzLmN1cnJlbnRQYXRoLnNoYXBlLnBvaW50cyxcbiAgICAgICAgZnJvbVggPSBwb2ludHNbcG9pbnRzLmxlbmd0aC0yXSxcbiAgICAgICAgZnJvbVkgPSBwb2ludHNbcG9pbnRzLmxlbmd0aC0xXSxcbiAgICAgICAgYTEgPSBmcm9tWSAtIHkxLFxuICAgICAgICBiMSA9IGZyb21YIC0geDEsXG4gICAgICAgIGEyID0geTIgICAtIHkxLFxuICAgICAgICBiMiA9IHgyICAgLSB4MSxcbiAgICAgICAgbW0gPSBNYXRoLmFicyhhMSAqIGIyIC0gYjEgKiBhMik7XG5cbiAgICBpZiAobW0gPCAxLjBlLTggfHwgcmFkaXVzID09PSAwKVxuICAgIHtcbiAgICAgICAgaWYgKHBvaW50c1twb2ludHMubGVuZ3RoLTJdICE9PSB4MSB8fCBwb2ludHNbcG9pbnRzLmxlbmd0aC0xXSAhPT0geTEpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHBvaW50cy5wdXNoKHgxLCB5MSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgdmFyIGRkID0gYTEgKiBhMSArIGIxICogYjEsXG4gICAgICAgICAgICBjYyA9IGEyICogYTIgKyBiMiAqIGIyLFxuICAgICAgICAgICAgdHQgPSBhMSAqIGEyICsgYjEgKiBiMixcbiAgICAgICAgICAgIGsxID0gcmFkaXVzICogTWF0aC5zcXJ0KGRkKSAvIG1tLFxuICAgICAgICAgICAgazIgPSByYWRpdXMgKiBNYXRoLnNxcnQoY2MpIC8gbW0sXG4gICAgICAgICAgICBqMSA9IGsxICogdHQgLyBkZCxcbiAgICAgICAgICAgIGoyID0gazIgKiB0dCAvIGNjLFxuICAgICAgICAgICAgY3ggPSBrMSAqIGIyICsgazIgKiBiMSxcbiAgICAgICAgICAgIGN5ID0gazEgKiBhMiArIGsyICogYTEsXG4gICAgICAgICAgICBweCA9IGIxICogKGsyICsgajEpLFxuICAgICAgICAgICAgcHkgPSBhMSAqIChrMiArIGoxKSxcbiAgICAgICAgICAgIHF4ID0gYjIgKiAoazEgKyBqMiksXG4gICAgICAgICAgICBxeSA9IGEyICogKGsxICsgajIpLFxuICAgICAgICAgICAgc3RhcnRBbmdsZSA9IE1hdGguYXRhbjIocHkgLSBjeSwgcHggLSBjeCksXG4gICAgICAgICAgICBlbmRBbmdsZSAgID0gTWF0aC5hdGFuMihxeSAtIGN5LCBxeCAtIGN4KTtcblxuICAgICAgICB0aGlzLmFyYyhjeCArIHgxLCBjeSArIHkxLCByYWRpdXMsIHN0YXJ0QW5nbGUsIGVuZEFuZ2xlLCBiMSAqIGEyID4gYjIgKiBhMSk7XG4gICAgfVxuXG4gICAgdGhpcy5kaXJ0eSA9IHRoaXMuYm91bmRzRGlydHkgPSB0cnVlO1xuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIFRoZSBhcmMgbWV0aG9kIGNyZWF0ZXMgYW4gYXJjL2N1cnZlICh1c2VkIHRvIGNyZWF0ZSBjaXJjbGVzLCBvciBwYXJ0cyBvZiBjaXJjbGVzKS5cbiAqXG4gKiBAcGFyYW0gY3gge251bWJlcn0gVGhlIHgtY29vcmRpbmF0ZSBvZiB0aGUgY2VudGVyIG9mIHRoZSBjaXJjbGVcbiAqIEBwYXJhbSBjeSB7bnVtYmVyfSBUaGUgeS1jb29yZGluYXRlIG9mIHRoZSBjZW50ZXIgb2YgdGhlIGNpcmNsZVxuICogQHBhcmFtIHJhZGl1cyB7bnVtYmVyfSBUaGUgcmFkaXVzIG9mIHRoZSBjaXJjbGVcbiAqIEBwYXJhbSBzdGFydEFuZ2xlIHtudW1iZXJ9IFRoZSBzdGFydGluZyBhbmdsZSwgaW4gcmFkaWFucyAoMCBpcyBhdCB0aGUgMyBvJ2Nsb2NrIHBvc2l0aW9uIG9mIHRoZSBhcmMncyBjaXJjbGUpXG4gKiBAcGFyYW0gZW5kQW5nbGUge251bWJlcn0gVGhlIGVuZGluZyBhbmdsZSwgaW4gcmFkaWFuc1xuICogQHBhcmFtIGFudGljbG9ja3dpc2Uge2Jvb2xlYW59IE9wdGlvbmFsLiBTcGVjaWZpZXMgd2hldGhlciB0aGUgZHJhd2luZyBzaG91bGQgYmUgY291bnRlcmNsb2Nrd2lzZSBvciBjbG9ja3dpc2UuIEZhbHNlIGlzIGRlZmF1bHQsIGFuZCBpbmRpY2F0ZXMgY2xvY2t3aXNlLCB3aGlsZSB0cnVlIGluZGljYXRlcyBjb3VudGVyLWNsb2Nrd2lzZS5cbiAqIEByZXR1cm4ge1BJWEkuR3JhcGhpY3N9XG4gKi9cbkdyYXBoaWNzLnByb3RvdHlwZS5hcmMgPSBmdW5jdGlvbihjeCwgY3ksIHJhZGl1cywgc3RhcnRBbmdsZSwgZW5kQW5nbGUsIGFudGljbG9ja3dpc2UpXG57XG4gICAgYW50aWNsb2Nrd2lzZSA9IGFudGljbG9ja3dpc2UgfHwgZmFsc2U7XG5cbiAgICBpZiAoc3RhcnRBbmdsZSA9PT0gZW5kQW5nbGUpXG4gICAge1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBpZiggIWFudGljbG9ja3dpc2UgJiYgZW5kQW5nbGUgPD0gc3RhcnRBbmdsZSApXG4gICAge1xuICAgICAgICBlbmRBbmdsZSArPSBNYXRoLlBJICogMjtcbiAgICB9XG4gICAgZWxzZSBpZiggYW50aWNsb2Nrd2lzZSAmJiBzdGFydEFuZ2xlIDw9IGVuZEFuZ2xlIClcbiAgICB7XG4gICAgICAgIHN0YXJ0QW5nbGUgKz0gTWF0aC5QSSAqIDI7XG4gICAgfVxuXG4gICAgdmFyIHN3ZWVwID0gYW50aWNsb2Nrd2lzZSA/IChzdGFydEFuZ2xlIC0gZW5kQW5nbGUpICogLTEgOiAoZW5kQW5nbGUgLSBzdGFydEFuZ2xlKTtcbiAgICB2YXIgc2VncyA9ICBNYXRoLmNlaWwoTWF0aC5hYnMoc3dlZXApIC8gKE1hdGguUEkgKiAyKSkgKiA0MDtcblxuICAgIGlmKHN3ZWVwID09PSAwKVxuICAgIHtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgdmFyIHN0YXJ0WCA9IGN4ICsgTWF0aC5jb3Moc3RhcnRBbmdsZSkgKiByYWRpdXM7XG4gICAgdmFyIHN0YXJ0WSA9IGN5ICsgTWF0aC5zaW4oc3RhcnRBbmdsZSkgKiByYWRpdXM7XG5cbiAgICBpZiAodGhpcy5jdXJyZW50UGF0aClcbiAgICB7XG4gICAgICAgIHRoaXMuY3VycmVudFBhdGguc2hhcGUucG9pbnRzLnB1c2goc3RhcnRYLCBzdGFydFkpO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICB0aGlzLm1vdmVUbyhzdGFydFgsIHN0YXJ0WSk7XG4gICAgfVxuXG4gICAgdmFyIHBvaW50cyA9IHRoaXMuY3VycmVudFBhdGguc2hhcGUucG9pbnRzO1xuXG4gICAgdmFyIHRoZXRhID0gc3dlZXAvKHNlZ3MqMik7XG4gICAgdmFyIHRoZXRhMiA9IHRoZXRhKjI7XG5cbiAgICB2YXIgY1RoZXRhID0gTWF0aC5jb3ModGhldGEpO1xuICAgIHZhciBzVGhldGEgPSBNYXRoLnNpbih0aGV0YSk7XG5cbiAgICB2YXIgc2VnTWludXMgPSBzZWdzIC0gMTtcblxuICAgIHZhciByZW1haW5kZXIgPSAoIHNlZ01pbnVzICUgMSApIC8gc2VnTWludXM7XG5cbiAgICBmb3IodmFyIGk9MDsgaTw9c2VnTWludXM7IGkrKylcbiAgICB7XG4gICAgICAgIHZhciByZWFsID0gIGkgKyByZW1haW5kZXIgKiBpO1xuXG5cbiAgICAgICAgdmFyIGFuZ2xlID0gKCh0aGV0YSkgKyBzdGFydEFuZ2xlICsgKHRoZXRhMiAqIHJlYWwpKTtcblxuICAgICAgICB2YXIgYyA9IE1hdGguY29zKGFuZ2xlKTtcbiAgICAgICAgdmFyIHMgPSAtTWF0aC5zaW4oYW5nbGUpO1xuXG4gICAgICAgIHBvaW50cy5wdXNoKCggKGNUaGV0YSAqICBjKSArIChzVGhldGEgKiBzKSApICogcmFkaXVzICsgY3gsXG4gICAgICAgICAgICAgICAgICAgICggKGNUaGV0YSAqIC1zKSArIChzVGhldGEgKiBjKSApICogcmFkaXVzICsgY3kpO1xuICAgIH1cblxuICAgIHRoaXMuZGlydHkgPSB0aGlzLmJvdW5kc0RpcnR5ID0gdHJ1ZTtcblxuICAgIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBTcGVjaWZpZXMgYSBzaW1wbGUgb25lLWNvbG9yIGZpbGwgdGhhdCBzdWJzZXF1ZW50IGNhbGxzIHRvIG90aGVyIEdyYXBoaWNzIG1ldGhvZHNcbiAqIChzdWNoIGFzIGxpbmVUbygpIG9yIGRyYXdDaXJjbGUoKSkgdXNlIHdoZW4gZHJhd2luZy5cbiAqXG4gKiBAcGFyYW0gY29sb3Ige251bWJlcn0gdGhlIGNvbG9yIG9mIHRoZSBmaWxsXG4gKiBAcGFyYW0gYWxwaGEge251bWJlcn0gdGhlIGFscGhhIG9mIHRoZSBmaWxsXG4gKiBAcmV0dXJuIHtQSVhJLkdyYXBoaWNzfVxuICovXG5HcmFwaGljcy5wcm90b3R5cGUuYmVnaW5GaWxsID0gZnVuY3Rpb24gKGNvbG9yLCBhbHBoYSlcbntcbiAgICB0aGlzLmZpbGxpbmcgPSB0cnVlO1xuICAgIHRoaXMuZmlsbENvbG9yID0gY29sb3IgfHwgMDtcbiAgICB0aGlzLmZpbGxBbHBoYSA9IChhbHBoYSA9PT0gdW5kZWZpbmVkKSA/IDEgOiBhbHBoYTtcblxuICAgIGlmICh0aGlzLmN1cnJlbnRQYXRoKVxuICAgIHtcbiAgICAgICAgaWYgKHRoaXMuY3VycmVudFBhdGguc2hhcGUucG9pbnRzLmxlbmd0aCA8PSAyKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRQYXRoLmZpbGwgPSB0aGlzLmZpbGxpbmc7XG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRQYXRoLmZpbGxDb2xvciA9IHRoaXMuZmlsbENvbG9yO1xuICAgICAgICAgICAgdGhpcy5jdXJyZW50UGF0aC5maWxsQWxwaGEgPSB0aGlzLmZpbGxBbHBoYTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogQXBwbGllcyBhIGZpbGwgdG8gdGhlIGxpbmVzIGFuZCBzaGFwZXMgdGhhdCB3ZXJlIGFkZGVkIHNpbmNlIHRoZSBsYXN0IGNhbGwgdG8gdGhlIGJlZ2luRmlsbCgpIG1ldGhvZC5cbiAqXG4gKiBAcmV0dXJuIHtHcmFwaGljc31cbiAqL1xuR3JhcGhpY3MucHJvdG90eXBlLmVuZEZpbGwgPSBmdW5jdGlvbiAoKVxue1xuICAgIHRoaXMuZmlsbGluZyA9IGZhbHNlO1xuICAgIHRoaXMuZmlsbENvbG9yID0gbnVsbDtcbiAgICB0aGlzLmZpbGxBbHBoYSA9IDE7XG5cbiAgICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICpcbiAqIEBwYXJhbSB4IHtudW1iZXJ9IFRoZSBYIGNvb3JkIG9mIHRoZSB0b3AtbGVmdCBvZiB0aGUgcmVjdGFuZ2xlXG4gKiBAcGFyYW0geSB7bnVtYmVyfSBUaGUgWSBjb29yZCBvZiB0aGUgdG9wLWxlZnQgb2YgdGhlIHJlY3RhbmdsZVxuICogQHBhcmFtIHdpZHRoIHtudW1iZXJ9IFRoZSB3aWR0aCBvZiB0aGUgcmVjdGFuZ2xlXG4gKiBAcGFyYW0gaGVpZ2h0IHtudW1iZXJ9IFRoZSBoZWlnaHQgb2YgdGhlIHJlY3RhbmdsZVxuICogQHJldHVybiB7UElYSS5HcmFwaGljc31cbiAqL1xuR3JhcGhpY3MucHJvdG90eXBlLmRyYXdSZWN0ID0gZnVuY3Rpb24gKCB4LCB5LCB3aWR0aCwgaGVpZ2h0IClcbntcbiAgICB0aGlzLmRyYXdTaGFwZShuZXcgbWF0aC5SZWN0YW5nbGUoeCx5LCB3aWR0aCwgaGVpZ2h0KSk7XG5cbiAgICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICpcbiAqIEBwYXJhbSB4IHtudW1iZXJ9IFRoZSBYIGNvb3JkIG9mIHRoZSB0b3AtbGVmdCBvZiB0aGUgcmVjdGFuZ2xlXG4gKiBAcGFyYW0geSB7bnVtYmVyfSBUaGUgWSBjb29yZCBvZiB0aGUgdG9wLWxlZnQgb2YgdGhlIHJlY3RhbmdsZVxuICogQHBhcmFtIHdpZHRoIHtudW1iZXJ9IFRoZSB3aWR0aCBvZiB0aGUgcmVjdGFuZ2xlXG4gKiBAcGFyYW0gaGVpZ2h0IHtudW1iZXJ9IFRoZSBoZWlnaHQgb2YgdGhlIHJlY3RhbmdsZVxuICogQHBhcmFtIHJhZGl1cyB7bnVtYmVyfSBSYWRpdXMgb2YgdGhlIHJlY3RhbmdsZSBjb3JuZXJzXG4gKiBAcmV0dXJuIHtQSVhJLkdyYXBoaWNzfVxuICovXG5HcmFwaGljcy5wcm90b3R5cGUuZHJhd1JvdW5kZWRSZWN0ID0gZnVuY3Rpb24gKCB4LCB5LCB3aWR0aCwgaGVpZ2h0LCByYWRpdXMgKVxue1xuICAgIHRoaXMuZHJhd1NoYXBlKG5ldyBtYXRoLlJvdW5kZWRSZWN0YW5nbGUoeCwgeSwgd2lkdGgsIGhlaWdodCwgcmFkaXVzKSk7XG5cbiAgICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogRHJhd3MgYSBjaXJjbGUuXG4gKlxuICogQHBhcmFtIHgge251bWJlcn0gVGhlIFggY29vcmRpbmF0ZSBvZiB0aGUgY2VudGVyIG9mIHRoZSBjaXJjbGVcbiAqIEBwYXJhbSB5IHtudW1iZXJ9IFRoZSBZIGNvb3JkaW5hdGUgb2YgdGhlIGNlbnRlciBvZiB0aGUgY2lyY2xlXG4gKiBAcGFyYW0gcmFkaXVzIHtudW1iZXJ9IFRoZSByYWRpdXMgb2YgdGhlIGNpcmNsZVxuICogQHJldHVybiB7UElYSS5HcmFwaGljc31cbiAqL1xuR3JhcGhpY3MucHJvdG90eXBlLmRyYXdDaXJjbGUgPSBmdW5jdGlvbiAoeCwgeSwgcmFkaXVzKVxue1xuICAgIHRoaXMuZHJhd1NoYXBlKG5ldyBtYXRoLkNpcmNsZSh4LHksIHJhZGl1cykpO1xuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIERyYXdzIGFuIGVsbGlwc2UuXG4gKlxuICogQHBhcmFtIHgge251bWJlcn0gVGhlIFggY29vcmRpbmF0ZSBvZiB0aGUgY2VudGVyIG9mIHRoZSBlbGxpcHNlXG4gKiBAcGFyYW0geSB7bnVtYmVyfSBUaGUgWSBjb29yZGluYXRlIG9mIHRoZSBjZW50ZXIgb2YgdGhlIGVsbGlwc2VcbiAqIEBwYXJhbSB3aWR0aCB7bnVtYmVyfSBUaGUgaGFsZiB3aWR0aCBvZiB0aGUgZWxsaXBzZVxuICogQHBhcmFtIGhlaWdodCB7bnVtYmVyfSBUaGUgaGFsZiBoZWlnaHQgb2YgdGhlIGVsbGlwc2VcbiAqIEByZXR1cm4ge1BJWEkuR3JhcGhpY3N9XG4gKi9cbkdyYXBoaWNzLnByb3RvdHlwZS5kcmF3RWxsaXBzZSA9IGZ1bmN0aW9uICh4LCB5LCB3aWR0aCwgaGVpZ2h0KVxue1xuICAgIHRoaXMuZHJhd1NoYXBlKG5ldyBtYXRoLkVsbGlwc2UoeCwgeSwgd2lkdGgsIGhlaWdodCkpO1xuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIERyYXdzIGEgcG9seWdvbiB1c2luZyB0aGUgZ2l2ZW4gcGF0aC5cbiAqXG4gKiBAcGFyYW0gcGF0aCB7bnVtYmVyW118UElYSS5Qb2ludFtdfSBUaGUgcGF0aCBkYXRhIHVzZWQgdG8gY29uc3RydWN0IHRoZSBwb2x5Z29uLlxuICogQHJldHVybiB7UElYSS5HcmFwaGljc31cbiAqL1xuR3JhcGhpY3MucHJvdG90eXBlLmRyYXdQb2x5Z29uID0gZnVuY3Rpb24gKHBhdGgpXG57XG4gICAgLy8gcHJldmVudHMgYW4gYXJndW1lbnQgYXNzaWdubWVudCBkZW9wdFxuICAgIC8vIHNlZSBzZWN0aW9uIDMuMTogaHR0cHM6Ly9naXRodWIuY29tL3BldGthYW50b25vdi9ibHVlYmlyZC93aWtpL09wdGltaXphdGlvbi1raWxsZXJzIzMtbWFuYWdpbmctYXJndW1lbnRzXG4gICAgdmFyIHBvaW50cyA9IHBhdGg7XG5cbiAgICB2YXIgY2xvc2VkID0gdHJ1ZTtcblxuICAgIGlmIChwb2ludHMgaW5zdGFuY2VvZiBtYXRoLlBvbHlnb24pXG4gICAge1xuICAgICAgICBjbG9zZWQgPSBwb2ludHMuY2xvc2VkO1xuICAgICAgICBwb2ludHMgPSBwb2ludHMucG9pbnRzO1xuICAgIH1cblxuICAgIGlmICghQXJyYXkuaXNBcnJheShwb2ludHMpKVxuICAgIHtcbiAgICAgICAgLy8gcHJldmVudHMgYW4gYXJndW1lbnQgbGVhayBkZW9wdFxuICAgICAgICAvLyBzZWUgc2VjdGlvbiAzLjI6IGh0dHBzOi8vZ2l0aHViLmNvbS9wZXRrYWFudG9ub3YvYmx1ZWJpcmQvd2lraS9PcHRpbWl6YXRpb24ta2lsbGVycyMzLW1hbmFnaW5nLWFyZ3VtZW50c1xuICAgICAgICBwb2ludHMgPSBuZXcgQXJyYXkoYXJndW1lbnRzLmxlbmd0aCk7XG5cbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwb2ludHMubGVuZ3RoOyArK2kpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHBvaW50c1tpXSA9IGFyZ3VtZW50c1tpXTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHZhciBzaGFwZSA9IG5ldyBtYXRoLlBvbHlnb24ocG9pbnRzKTtcbiAgICBzaGFwZS5jbG9zZWQgPSBjbG9zZWQ7XG5cbiAgICB0aGlzLmRyYXdTaGFwZShzaGFwZSk7XG5cbiAgICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogQ2xlYXJzIHRoZSBncmFwaGljcyB0aGF0IHdlcmUgZHJhd24gdG8gdGhpcyBHcmFwaGljcyBvYmplY3QsIGFuZCByZXNldHMgZmlsbCBhbmQgbGluZSBzdHlsZSBzZXR0aW5ncy5cbiAqXG4gKiBAcmV0dXJuIHtQSVhJLkdyYXBoaWNzfVxuICovXG5HcmFwaGljcy5wcm90b3R5cGUuY2xlYXIgPSBmdW5jdGlvbiAoKVxue1xuICAgIHRoaXMubGluZVdpZHRoID0gMDtcbiAgICB0aGlzLmZpbGxpbmcgPSBmYWxzZTtcblxuICAgIHRoaXMuZGlydHkgPSB0cnVlO1xuICAgIHRoaXMuY2xlYXJEaXJ0eSA9IHRydWU7XG4gICAgdGhpcy5ncmFwaGljc0RhdGEgPSBbXTtcblxuICAgIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBVc2VmdWwgZnVuY3Rpb24gdGhhdCByZXR1cm5zIGEgdGV4dHVyZSBvZiB0aGUgZ3JhcGhpY3Mgb2JqZWN0IHRoYXQgY2FuIHRoZW4gYmUgdXNlZCB0byBjcmVhdGUgc3ByaXRlc1xuICogVGhpcyBjYW4gYmUgcXVpdGUgdXNlZnVsIGlmIHlvdXIgZ2VvbWV0cnkgaXMgY29tcGxpY2F0ZWQgYW5kIG5lZWRzIHRvIGJlIHJldXNlZCBtdWx0aXBsZSB0aW1lcy5cbiAqXG4gKiBAcGFyYW0gcmVzb2x1dGlvbiB7bnVtYmVyfSBUaGUgcmVzb2x1dGlvbiBvZiB0aGUgdGV4dHVyZSBiZWluZyBnZW5lcmF0ZWRcbiAqIEBwYXJhbSBzY2FsZU1vZGUge251bWJlcn0gU2hvdWxkIGJlIG9uZSBvZiB0aGUgc2NhbGVNb2RlIGNvbnN0c1xuICogQHJldHVybiB7UElYSS5UZXh0dXJlfSBhIHRleHR1cmUgb2YgdGhlIGdyYXBoaWNzIG9iamVjdFxuICovXG5HcmFwaGljcy5wcm90b3R5cGUuZ2VuZXJhdGVUZXh0dXJlID0gZnVuY3Rpb24gKHJlbmRlcmVyLCByZXNvbHV0aW9uLCBzY2FsZU1vZGUpXG57XG5cbiAgICByZXNvbHV0aW9uID0gcmVzb2x1dGlvbiB8fCAxO1xuXG4gICAgdmFyIGJvdW5kcyA9IHRoaXMuZ2V0TG9jYWxCb3VuZHMoKTtcblxuICAgIHZhciBjYW52YXNCdWZmZXIgPSBuZXcgQ2FudmFzQnVmZmVyKGJvdW5kcy53aWR0aCAqIHJlc29sdXRpb24sIGJvdW5kcy5oZWlnaHQgKiByZXNvbHV0aW9uKTtcblxuICAgIHZhciB0ZXh0dXJlID0gVGV4dHVyZS5mcm9tQ2FudmFzKGNhbnZhc0J1ZmZlci5jYW52YXMsIHNjYWxlTW9kZSk7XG4gICAgdGV4dHVyZS5iYXNlVGV4dHVyZS5yZXNvbHV0aW9uID0gcmVzb2x1dGlvbjtcblxuICAgIGNhbnZhc0J1ZmZlci5jb250ZXh0LnNjYWxlKHJlc29sdXRpb24sIHJlc29sdXRpb24pO1xuXG4gICAgY2FudmFzQnVmZmVyLmNvbnRleHQudHJhbnNsYXRlKC1ib3VuZHMueCwtYm91bmRzLnkpO1xuXG4gICAgQ2FudmFzR3JhcGhpY3MucmVuZGVyR3JhcGhpY3ModGhpcywgY2FudmFzQnVmZmVyLmNvbnRleHQpO1xuXG4gICAgcmV0dXJuIHRleHR1cmU7XG59O1xuXG4vKipcbiAqIFJlbmRlcnMgdGhlIG9iamVjdCB1c2luZyB0aGUgV2ViR0wgcmVuZGVyZXJcbiAqXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcn1cbiAqIEBwcml2YXRlXG4gKi9cbkdyYXBoaWNzLnByb3RvdHlwZS5fcmVuZGVyV2ViR0wgPSBmdW5jdGlvbiAocmVuZGVyZXIpXG57XG4gICAgLy8gaWYgdGhlIHNwcml0ZSBpcyBub3QgdmlzaWJsZSBvciB0aGUgYWxwaGEgaXMgMCB0aGVuIG5vIG5lZWQgdG8gcmVuZGVyIHRoaXMgZWxlbWVudFxuXG4gICAgaWYgKHRoaXMuZ2xEaXJ0eSlcbiAgICB7XG4gICAgICAgIHRoaXMuZGlydHkgPSB0cnVlO1xuICAgICAgICB0aGlzLmdsRGlydHkgPSBmYWxzZTtcbiAgICB9XG5cbiAgICByZW5kZXJlci5zZXRPYmplY3RSZW5kZXJlcihyZW5kZXJlci5wbHVnaW5zLmdyYXBoaWNzKTtcbiAgICByZW5kZXJlci5wbHVnaW5zLmdyYXBoaWNzLnJlbmRlcih0aGlzKTtcblxufTtcblxuLyoqXG4gKiBSZW5kZXJzIHRoZSBvYmplY3QgdXNpbmcgdGhlIENhbnZhcyByZW5kZXJlclxuICpcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5DYW52YXNSZW5kZXJlcn1cbiAqIEBwcml2YXRlXG4gKi9cbkdyYXBoaWNzLnByb3RvdHlwZS5fcmVuZGVyQ2FudmFzID0gZnVuY3Rpb24gKHJlbmRlcmVyKVxue1xuICAgIGlmICh0aGlzLmlzTWFzayA9PT0gdHJ1ZSlcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBpZiB0aGUgdGludCBoYXMgY2hhbmdlZCwgc2V0IHRoZSBncmFwaGljcyBvYmplY3QgdG8gZGlydHkuXG4gICAgaWYgKHRoaXMuX3ByZXZUaW50ICE9PSB0aGlzLnRpbnQpIHtcbiAgICAgICAgdGhpcy5kaXJ0eSA9IHRydWU7XG4gICAgfVxuXG4gICAgLy8gdGhpcyBjb2RlIG1heSBzdGlsbCBiZSBuZWVkZWQgc28gbGVhdmluZyBmb3Igbm93Li5cbiAgICAvL1xuICAgIC8qXG4gICAgaWYgKHRoaXMuX2NhY2hlQXNCaXRtYXApXG4gICAge1xuICAgICAgICBpZiAodGhpcy5kaXJ0eSB8fCB0aGlzLmNhY2hlZFNwcml0ZURpcnR5KVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLl9nZW5lcmF0ZUNhY2hlZFNwcml0ZSgpO1xuXG4gICAgICAgICAgICAvLyB3ZSB3aWxsIGFsc28gbmVlZCB0byB1cGRhdGUgdGhlIHRleHR1cmVcbiAgICAgICAgICAgIHRoaXMudXBkYXRlQ2FjaGVkU3ByaXRlVGV4dHVyZSgpO1xuXG4gICAgICAgICAgICB0aGlzLmNhY2hlZFNwcml0ZURpcnR5ID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLmRpcnR5ID0gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9jYWNoZWRTcHJpdGUuYWxwaGEgPSB0aGlzLmFscGhhO1xuXG4gICAgICAgIFNwcml0ZS5wcm90b3R5cGUuX3JlbmRlckNhbnZhcy5jYWxsKHRoaXMuX2NhY2hlZFNwcml0ZSwgcmVuZGVyZXIpO1xuXG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgKi9cbiAgICB2YXIgY29udGV4dCA9IHJlbmRlcmVyLmNvbnRleHQ7XG4gICAgdmFyIHRyYW5zZm9ybSA9IHRoaXMud29ybGRUcmFuc2Zvcm07XG5cbiAgICB2YXIgY29tcG9zaXRlT3BlcmF0aW9uID0gcmVuZGVyZXIuYmxlbmRNb2Rlc1t0aGlzLmJsZW5kTW9kZV07XG4gICAgaWYgKGNvbXBvc2l0ZU9wZXJhdGlvbiAhPT0gY29udGV4dC5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb24pXG4gICAge1xuICAgICAgICBjb250ZXh0Lmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbiA9IGNvbXBvc2l0ZU9wZXJhdGlvbjtcbiAgICB9XG5cbiAgICB2YXIgcmVzb2x1dGlvbiA9IHJlbmRlcmVyLnJlc29sdXRpb247XG4gICAgY29udGV4dC5zZXRUcmFuc2Zvcm0oXG4gICAgICAgIHRyYW5zZm9ybS5hICogcmVzb2x1dGlvbixcbiAgICAgICAgdHJhbnNmb3JtLmIgKiByZXNvbHV0aW9uLFxuICAgICAgICB0cmFuc2Zvcm0uYyAqIHJlc29sdXRpb24sXG4gICAgICAgIHRyYW5zZm9ybS5kICogcmVzb2x1dGlvbixcbiAgICAgICAgdHJhbnNmb3JtLnR4ICogcmVzb2x1dGlvbixcbiAgICAgICAgdHJhbnNmb3JtLnR5ICogcmVzb2x1dGlvblxuICAgICk7XG5cbiAgICBDYW52YXNHcmFwaGljcy5yZW5kZXJHcmFwaGljcyh0aGlzLCBjb250ZXh0KTtcbn07XG5cbi8qKlxuICogUmV0cmlldmVzIHRoZSBib3VuZHMgb2YgdGhlIGdyYXBoaWMgc2hhcGUgYXMgYSByZWN0YW5nbGUgb2JqZWN0XG4gKlxuICogQHBhcmFtIFttYXRyaXhdIHtQSVhJLk1hdHJpeH0gVGhlIHdvcmxkIHRyYW5zZm9ybSBtYXRyaXggdG8gdXNlLCBkZWZhdWx0cyB0byB0aGlzXG4gKiAgb2JqZWN0J3Mgd29ybGRUcmFuc2Zvcm0uXG4gKiBAcmV0dXJuIHtQSVhJLlJlY3RhbmdsZX0gdGhlIHJlY3Rhbmd1bGFyIGJvdW5kaW5nIGFyZWFcbiAqL1xuR3JhcGhpY3MucHJvdG90eXBlLmdldEJvdW5kcyA9IGZ1bmN0aW9uIChtYXRyaXgpXG57XG4gICAgaWYoIXRoaXMuX2N1cnJlbnRCb3VuZHMpXG4gICAge1xuXG4gICAgICAgIC8vIHJldHVybiBhbiBlbXB0eSBvYmplY3QgaWYgdGhlIGl0ZW0gaXMgYSBtYXNrIVxuICAgICAgICBpZiAoIXRoaXMucmVuZGVyYWJsZSlcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIG1hdGguUmVjdGFuZ2xlLkVNUFRZO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuYm91bmRzRGlydHkpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlTG9jYWxCb3VuZHMoKTtcblxuICAgICAgICAgICAgdGhpcy5nbERpcnR5ID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMuY2FjaGVkU3ByaXRlRGlydHkgPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy5ib3VuZHNEaXJ0eSA9IGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGJvdW5kcyA9IHRoaXMuX2xvY2FsQm91bmRzO1xuXG4gICAgICAgIHZhciB3MCA9IGJvdW5kcy54O1xuICAgICAgICB2YXIgdzEgPSBib3VuZHMud2lkdGggKyBib3VuZHMueDtcblxuICAgICAgICB2YXIgaDAgPSBib3VuZHMueTtcbiAgICAgICAgdmFyIGgxID0gYm91bmRzLmhlaWdodCArIGJvdW5kcy55O1xuXG4gICAgICAgIHZhciB3b3JsZFRyYW5zZm9ybSA9IG1hdHJpeCB8fCB0aGlzLndvcmxkVHJhbnNmb3JtO1xuXG4gICAgICAgIHZhciBhID0gd29ybGRUcmFuc2Zvcm0uYTtcbiAgICAgICAgdmFyIGIgPSB3b3JsZFRyYW5zZm9ybS5iO1xuICAgICAgICB2YXIgYyA9IHdvcmxkVHJhbnNmb3JtLmM7XG4gICAgICAgIHZhciBkID0gd29ybGRUcmFuc2Zvcm0uZDtcbiAgICAgICAgdmFyIHR4ID0gd29ybGRUcmFuc2Zvcm0udHg7XG4gICAgICAgIHZhciB0eSA9IHdvcmxkVHJhbnNmb3JtLnR5O1xuXG4gICAgICAgIHZhciB4MSA9IGEgKiB3MSArIGMgKiBoMSArIHR4O1xuICAgICAgICB2YXIgeTEgPSBkICogaDEgKyBiICogdzEgKyB0eTtcblxuICAgICAgICB2YXIgeDIgPSBhICogdzAgKyBjICogaDEgKyB0eDtcbiAgICAgICAgdmFyIHkyID0gZCAqIGgxICsgYiAqIHcwICsgdHk7XG5cbiAgICAgICAgdmFyIHgzID0gYSAqIHcwICsgYyAqIGgwICsgdHg7XG4gICAgICAgIHZhciB5MyA9IGQgKiBoMCArIGIgKiB3MCArIHR5O1xuXG4gICAgICAgIHZhciB4NCA9ICBhICogdzEgKyBjICogaDAgKyB0eDtcbiAgICAgICAgdmFyIHk0ID0gIGQgKiBoMCArIGIgKiB3MSArIHR5O1xuXG4gICAgICAgIHZhciBtYXhYID0geDE7XG4gICAgICAgIHZhciBtYXhZID0geTE7XG5cbiAgICAgICAgdmFyIG1pblggPSB4MTtcbiAgICAgICAgdmFyIG1pblkgPSB5MTtcblxuICAgICAgICBtaW5YID0geDIgPCBtaW5YID8geDIgOiBtaW5YO1xuICAgICAgICBtaW5YID0geDMgPCBtaW5YID8geDMgOiBtaW5YO1xuICAgICAgICBtaW5YID0geDQgPCBtaW5YID8geDQgOiBtaW5YO1xuXG4gICAgICAgIG1pblkgPSB5MiA8IG1pblkgPyB5MiA6IG1pblk7XG4gICAgICAgIG1pblkgPSB5MyA8IG1pblkgPyB5MyA6IG1pblk7XG4gICAgICAgIG1pblkgPSB5NCA8IG1pblkgPyB5NCA6IG1pblk7XG5cbiAgICAgICAgbWF4WCA9IHgyID4gbWF4WCA/IHgyIDogbWF4WDtcbiAgICAgICAgbWF4WCA9IHgzID4gbWF4WCA/IHgzIDogbWF4WDtcbiAgICAgICAgbWF4WCA9IHg0ID4gbWF4WCA/IHg0IDogbWF4WDtcblxuICAgICAgICBtYXhZID0geTIgPiBtYXhZID8geTIgOiBtYXhZO1xuICAgICAgICBtYXhZID0geTMgPiBtYXhZID8geTMgOiBtYXhZO1xuICAgICAgICBtYXhZID0geTQgPiBtYXhZID8geTQgOiBtYXhZO1xuXG4gICAgICAgIHRoaXMuX2JvdW5kcy54ID0gbWluWDtcbiAgICAgICAgdGhpcy5fYm91bmRzLndpZHRoID0gbWF4WCAtIG1pblg7XG5cbiAgICAgICAgdGhpcy5fYm91bmRzLnkgPSBtaW5ZO1xuICAgICAgICB0aGlzLl9ib3VuZHMuaGVpZ2h0ID0gbWF4WSAtIG1pblk7XG5cbiAgICAgICAgdGhpcy5fY3VycmVudEJvdW5kcyA9IHRoaXMuX2JvdW5kcztcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5fY3VycmVudEJvdW5kcztcbn07XG5cbi8qKlxuKiBUZXN0cyBpZiBhIHBvaW50IGlzIGluc2lkZSB0aGlzIGdyYXBoaWNzIG9iamVjdFxuKlxuKiBAcGFyYW0gcG9pbnQge1BJWEkuUG9pbnR9IHRoZSBwb2ludCB0byB0ZXN0XG4qIEByZXR1cm4ge2Jvb2xlYW59IHRoZSByZXN1bHQgb2YgdGhlIHRlc3RcbiovXG5HcmFwaGljcy5wcm90b3R5cGUuY29udGFpbnNQb2ludCA9IGZ1bmN0aW9uKCBwb2ludCApXG57XG4gICAgdGhpcy53b3JsZFRyYW5zZm9ybS5hcHBseUludmVyc2UocG9pbnQsICB0ZW1wUG9pbnQpO1xuXG4gICAgdmFyIGdyYXBoaWNzRGF0YSA9IHRoaXMuZ3JhcGhpY3NEYXRhO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBncmFwaGljc0RhdGEubGVuZ3RoOyBpKyspXG4gICAge1xuICAgICAgICB2YXIgZGF0YSA9IGdyYXBoaWNzRGF0YVtpXTtcblxuICAgICAgICBpZiAoIWRhdGEuZmlsbClcbiAgICAgICAge1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBvbmx5IGRlYWwgd2l0aCBmaWxscy4uXG4gICAgICAgIGlmIChkYXRhLnNoYXBlKVxuICAgICAgICB7XG4gICAgICAgICAgICBpZiAoIGRhdGEuc2hhcGUuY29udGFpbnMoIHRlbXBQb2ludC54LCB0ZW1wUG9pbnQueSApIClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBmYWxzZTtcbn07XG5cbi8qKlxuICogVXBkYXRlIHRoZSBib3VuZHMgb2YgdGhlIG9iamVjdFxuICpcbiAqL1xuR3JhcGhpY3MucHJvdG90eXBlLnVwZGF0ZUxvY2FsQm91bmRzID0gZnVuY3Rpb24gKClcbntcbiAgICB2YXIgbWluWCA9IEluZmluaXR5O1xuICAgIHZhciBtYXhYID0gLUluZmluaXR5O1xuXG4gICAgdmFyIG1pblkgPSBJbmZpbml0eTtcbiAgICB2YXIgbWF4WSA9IC1JbmZpbml0eTtcblxuICAgIGlmICh0aGlzLmdyYXBoaWNzRGF0YS5sZW5ndGgpXG4gICAge1xuICAgICAgICB2YXIgc2hhcGUsIHBvaW50cywgeCwgeSwgdywgaDtcblxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuZ3JhcGhpY3NEYXRhLmxlbmd0aDsgaSsrKVxuICAgICAgICB7XG4gICAgICAgICAgICB2YXIgZGF0YSA9IHRoaXMuZ3JhcGhpY3NEYXRhW2ldO1xuICAgICAgICAgICAgdmFyIHR5cGUgPSBkYXRhLnR5cGU7XG4gICAgICAgICAgICB2YXIgbGluZVdpZHRoID0gZGF0YS5saW5lV2lkdGg7XG4gICAgICAgICAgICBzaGFwZSA9IGRhdGEuc2hhcGU7XG5cbiAgICAgICAgICAgIGlmICh0eXBlID09PSBDT05TVC5TSEFQRVMuUkVDVCB8fCB0eXBlID09PSBDT05TVC5TSEFQRVMuUlJFQylcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB4ID0gc2hhcGUueCAtIGxpbmVXaWR0aC8yO1xuICAgICAgICAgICAgICAgIHkgPSBzaGFwZS55IC0gbGluZVdpZHRoLzI7XG4gICAgICAgICAgICAgICAgdyA9IHNoYXBlLndpZHRoICsgbGluZVdpZHRoO1xuICAgICAgICAgICAgICAgIGggPSBzaGFwZS5oZWlnaHQgKyBsaW5lV2lkdGg7XG5cbiAgICAgICAgICAgICAgICBtaW5YID0geCA8IG1pblggPyB4IDogbWluWDtcbiAgICAgICAgICAgICAgICBtYXhYID0geCArIHcgPiBtYXhYID8geCArIHcgOiBtYXhYO1xuXG4gICAgICAgICAgICAgICAgbWluWSA9IHkgPCBtaW5ZID8geSA6IG1pblk7XG4gICAgICAgICAgICAgICAgbWF4WSA9IHkgKyBoID4gbWF4WSA/IHkgKyBoIDogbWF4WTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKHR5cGUgPT09IENPTlNULlNIQVBFUy5DSVJDKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHggPSBzaGFwZS54O1xuICAgICAgICAgICAgICAgIHkgPSBzaGFwZS55O1xuICAgICAgICAgICAgICAgIHcgPSBzaGFwZS5yYWRpdXMgKyBsaW5lV2lkdGgvMjtcbiAgICAgICAgICAgICAgICBoID0gc2hhcGUucmFkaXVzICsgbGluZVdpZHRoLzI7XG5cbiAgICAgICAgICAgICAgICBtaW5YID0geCAtIHcgPCBtaW5YID8geCAtIHcgOiBtaW5YO1xuICAgICAgICAgICAgICAgIG1heFggPSB4ICsgdyA+IG1heFggPyB4ICsgdyA6IG1heFg7XG5cbiAgICAgICAgICAgICAgICBtaW5ZID0geSAtIGggPCBtaW5ZID8geSAtIGggOiBtaW5ZO1xuICAgICAgICAgICAgICAgIG1heFkgPSB5ICsgaCA+IG1heFkgPyB5ICsgaCA6IG1heFk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmICh0eXBlID09PSBDT05TVC5TSEFQRVMuRUxJUClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB4ID0gc2hhcGUueDtcbiAgICAgICAgICAgICAgICB5ID0gc2hhcGUueTtcbiAgICAgICAgICAgICAgICB3ID0gc2hhcGUud2lkdGggKyBsaW5lV2lkdGgvMjtcbiAgICAgICAgICAgICAgICBoID0gc2hhcGUuaGVpZ2h0ICsgbGluZVdpZHRoLzI7XG5cbiAgICAgICAgICAgICAgICBtaW5YID0geCAtIHcgPCBtaW5YID8geCAtIHcgOiBtaW5YO1xuICAgICAgICAgICAgICAgIG1heFggPSB4ICsgdyA+IG1heFggPyB4ICsgdyA6IG1heFg7XG5cbiAgICAgICAgICAgICAgICBtaW5ZID0geSAtIGggPCBtaW5ZID8geSAtIGggOiBtaW5ZO1xuICAgICAgICAgICAgICAgIG1heFkgPSB5ICsgaCA+IG1heFkgPyB5ICsgaCA6IG1heFk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgLy8gUE9MWVxuICAgICAgICAgICAgICAgIHBvaW50cyA9IHNoYXBlLnBvaW50cztcblxuICAgICAgICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgcG9pbnRzLmxlbmd0aDsgaiArPSAyKVxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgeCA9IHBvaW50c1tqXTtcbiAgICAgICAgICAgICAgICAgICAgeSA9IHBvaW50c1tqKzFdO1xuXG4gICAgICAgICAgICAgICAgICAgIG1pblggPSB4LWxpbmVXaWR0aCA8IG1pblggPyB4LWxpbmVXaWR0aCA6IG1pblg7XG4gICAgICAgICAgICAgICAgICAgIG1heFggPSB4K2xpbmVXaWR0aCA+IG1heFggPyB4K2xpbmVXaWR0aCA6IG1heFg7XG5cbiAgICAgICAgICAgICAgICAgICAgbWluWSA9IHktbGluZVdpZHRoIDwgbWluWSA/IHktbGluZVdpZHRoIDogbWluWTtcbiAgICAgICAgICAgICAgICAgICAgbWF4WSA9IHkrbGluZVdpZHRoID4gbWF4WSA/IHkrbGluZVdpZHRoIDogbWF4WTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgbWluWCA9IDA7XG4gICAgICAgIG1heFggPSAwO1xuICAgICAgICBtaW5ZID0gMDtcbiAgICAgICAgbWF4WSA9IDA7XG4gICAgfVxuXG4gICAgdmFyIHBhZGRpbmcgPSB0aGlzLmJvdW5kc1BhZGRpbmc7XG5cbiAgICB0aGlzLl9sb2NhbEJvdW5kcy54ID0gbWluWCAtIHBhZGRpbmc7XG4gICAgdGhpcy5fbG9jYWxCb3VuZHMud2lkdGggPSAobWF4WCAtIG1pblgpICsgcGFkZGluZyAqIDI7XG5cbiAgICB0aGlzLl9sb2NhbEJvdW5kcy55ID0gbWluWSAtIHBhZGRpbmc7XG4gICAgdGhpcy5fbG9jYWxCb3VuZHMuaGVpZ2h0ID0gKG1heFkgLSBtaW5ZKSArIHBhZGRpbmcgKiAyO1xufTtcblxuLyoqXG4gKiBHZW5lcmF0ZXMgdGhlIGNhY2hlZCBzcHJpdGUgd2hlbiB0aGUgc3ByaXRlIGhhcyBjYWNoZUFzQml0bWFwID0gdHJ1ZVxuICpcbiAqIEBwcml2YXRlXG4gKi9cbi8qXG5HcmFwaGljcy5wcm90b3R5cGUuX2dlbmVyYXRlQ2FjaGVkU3ByaXRlID0gZnVuY3Rpb24gKClcbntcbiAgICB2YXIgYm91bmRzID0gdGhpcy5nZXRMb2NhbEJvdW5kcygpO1xuXG4gICAgaWYgKCF0aGlzLl9jYWNoZWRTcHJpdGUpXG4gICAge1xuICAgICAgICB2YXIgY2FudmFzQnVmZmVyID0gbmV3IENhbnZhc0J1ZmZlcihib3VuZHMud2lkdGgsIGJvdW5kcy5oZWlnaHQpO1xuICAgICAgICB2YXIgdGV4dHVyZSA9IFRleHR1cmUuZnJvbUNhbnZhcyhjYW52YXNCdWZmZXIuY2FudmFzKTtcblxuICAgICAgICB0aGlzLl9jYWNoZWRTcHJpdGUgPSBuZXcgU3ByaXRlKHRleHR1cmUpO1xuICAgICAgICB0aGlzLl9jYWNoZWRTcHJpdGUuYnVmZmVyID0gY2FudmFzQnVmZmVyO1xuXG4gICAgICAgIHRoaXMuX2NhY2hlZFNwcml0ZS53b3JsZFRyYW5zZm9ybSA9IHRoaXMud29ybGRUcmFuc2Zvcm07XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHRoaXMuX2NhY2hlZFNwcml0ZS5idWZmZXIucmVzaXplKGJvdW5kcy53aWR0aCwgYm91bmRzLmhlaWdodCk7XG4gICAgfVxuXG4gICAgLy8gbGV2ZXJhZ2UgdGhlIGFuY2hvciB0byBhY2NvdW50IGZvciB0aGUgb2Zmc2V0IG9mIHRoZSBlbGVtZW50XG4gICAgdGhpcy5fY2FjaGVkU3ByaXRlLmFuY2hvci54ID0gLSggYm91bmRzLnggLyBib3VuZHMud2lkdGggKTtcbiAgICB0aGlzLl9jYWNoZWRTcHJpdGUuYW5jaG9yLnkgPSAtKCBib3VuZHMueSAvIGJvdW5kcy5oZWlnaHQgKTtcblxuICAgIC8vIHRoaXMuX2NhY2hlZFNwcml0ZS5idWZmZXIuY29udGV4dC5zYXZlKCk7XG4gICAgdGhpcy5fY2FjaGVkU3ByaXRlLmJ1ZmZlci5jb250ZXh0LnRyYW5zbGF0ZSgtYm91bmRzLngsLWJvdW5kcy55KTtcblxuICAgIC8vIG1ha2Ugc3VyZSB3ZSBzZXQgdGhlIGFscGhhIG9mIHRoZSBncmFwaGljcyB0byAxIGZvciB0aGUgcmVuZGVyLi5cbiAgICB0aGlzLndvcmxkQWxwaGEgPSAxO1xuXG4gICAgLy8gbm93IHJlbmRlciB0aGUgZ3JhcGhpYy4uXG4gICAgQ2FudmFzR3JhcGhpY3MucmVuZGVyR3JhcGhpY3ModGhpcywgdGhpcy5fY2FjaGVkU3ByaXRlLmJ1ZmZlci5jb250ZXh0KTtcblxuICAgIHRoaXMuX2NhY2hlZFNwcml0ZS5hbHBoYSA9IHRoaXMuYWxwaGE7XG59O1xuKi9cbi8qKlxuICogVXBkYXRlcyB0ZXh0dXJlIHNpemUgYmFzZWQgb24gY2FudmFzIHNpemVcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG4vKlxuR3JhcGhpY3MucHJvdG90eXBlLnVwZGF0ZUNhY2hlZFNwcml0ZVRleHR1cmUgPSBmdW5jdGlvbiAoKVxue1xuICAgIHZhciBjYWNoZWRTcHJpdGUgPSB0aGlzLl9jYWNoZWRTcHJpdGU7XG4gICAgdmFyIHRleHR1cmUgPSBjYWNoZWRTcHJpdGUudGV4dHVyZTtcbiAgICB2YXIgY2FudmFzID0gY2FjaGVkU3ByaXRlLmJ1ZmZlci5jYW52YXM7XG5cbiAgICB0ZXh0dXJlLmJhc2VUZXh0dXJlLndpZHRoID0gY2FudmFzLndpZHRoO1xuICAgIHRleHR1cmUuYmFzZVRleHR1cmUuaGVpZ2h0ID0gY2FudmFzLmhlaWdodDtcbiAgICB0ZXh0dXJlLmNyb3Aud2lkdGggPSB0ZXh0dXJlLmZyYW1lLndpZHRoID0gY2FudmFzLndpZHRoO1xuICAgIHRleHR1cmUuY3JvcC5oZWlnaHQgPSB0ZXh0dXJlLmZyYW1lLmhlaWdodCA9IGNhbnZhcy5oZWlnaHQ7XG5cbiAgICBjYWNoZWRTcHJpdGUuX3dpZHRoID0gY2FudmFzLndpZHRoO1xuICAgIGNhY2hlZFNwcml0ZS5faGVpZ2h0ID0gY2FudmFzLmhlaWdodDtcblxuICAgIC8vIHVwZGF0ZSB0aGUgZGlydHkgYmFzZSB0ZXh0dXJlc1xuICAgIHRleHR1cmUuYmFzZVRleHR1cmUuZGlydHkoKTtcbn07Ki9cblxuLyoqXG4gKiBEZXN0cm95cyBhIHByZXZpb3VzIGNhY2hlZCBzcHJpdGUuXG4gKlxuICovXG4vKlxuR3JhcGhpY3MucHJvdG90eXBlLmRlc3Ryb3lDYWNoZWRTcHJpdGUgPSBmdW5jdGlvbiAoKVxue1xuICAgIHRoaXMuX2NhY2hlZFNwcml0ZS50ZXh0dXJlLmRlc3Ryb3kodHJ1ZSk7XG5cbiAgICAvLyBsZXQgdGhlIGdjIGNvbGxlY3QgdGhlIHVudXNlZCBzcHJpdGVcbiAgICAvLyBUT0RPIGNvdWxkIGJlIG9iamVjdCBwb29sZWQhXG4gICAgdGhpcy5fY2FjaGVkU3ByaXRlID0gbnVsbDtcbn07Ki9cblxuLyoqXG4gKiBEcmF3cyB0aGUgZ2l2ZW4gc2hhcGUgdG8gdGhpcyBHcmFwaGljcyBvYmplY3QuIENhbiBiZSBhbnkgb2YgQ2lyY2xlLCBSZWN0YW5nbGUsIEVsbGlwc2UsIExpbmUgb3IgUG9seWdvbi5cbiAqXG4gKiBAcGFyYW0gc2hhcGUge1BJWEkuQ2lyY2xlfFBJWEkuUmVjdGFuZ2xlfFBJWEkuRWxsaXBzZXxQSVhJLkxpbmV8UElYSS5Qb2x5Z29ufSBUaGUgc2hhcGUgb2JqZWN0IHRvIGRyYXcuXG4gKiBAcmV0dXJuIHtQSVhJLkdyYXBoaWNzRGF0YX0gVGhlIGdlbmVyYXRlZCBHcmFwaGljc0RhdGEgb2JqZWN0LlxuICovXG5HcmFwaGljcy5wcm90b3R5cGUuZHJhd1NoYXBlID0gZnVuY3Rpb24gKHNoYXBlKVxue1xuICAgIGlmICh0aGlzLmN1cnJlbnRQYXRoKVxuICAgIHtcbiAgICAgICAgLy8gY2hlY2sgY3VycmVudCBwYXRoIVxuICAgICAgICBpZiAodGhpcy5jdXJyZW50UGF0aC5zaGFwZS5wb2ludHMubGVuZ3RoIDw9IDIpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuZ3JhcGhpY3NEYXRhLnBvcCgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5jdXJyZW50UGF0aCA9IG51bGw7XG5cbiAgICB2YXIgZGF0YSA9IG5ldyBHcmFwaGljc0RhdGEodGhpcy5saW5lV2lkdGgsIHRoaXMubGluZUNvbG9yLCB0aGlzLmxpbmVBbHBoYSwgdGhpcy5maWxsQ29sb3IsIHRoaXMuZmlsbEFscGhhLCB0aGlzLmZpbGxpbmcsIHNoYXBlKTtcblxuICAgIHRoaXMuZ3JhcGhpY3NEYXRhLnB1c2goZGF0YSk7XG5cbiAgICBpZiAoZGF0YS50eXBlID09PSBDT05TVC5TSEFQRVMuUE9MWSlcbiAgICB7XG4gICAgICAgIGRhdGEuc2hhcGUuY2xvc2VkID0gZGF0YS5zaGFwZS5jbG9zZWQgfHwgdGhpcy5maWxsaW5nO1xuICAgICAgICB0aGlzLmN1cnJlbnRQYXRoID0gZGF0YTtcbiAgICB9XG5cbiAgICB0aGlzLmRpcnR5ID0gdGhpcy5ib3VuZHNEaXJ0eSA9IHRydWU7XG5cbiAgICByZXR1cm4gZGF0YTtcbn07XG5cbi8qKlxuICogRGVzdHJveXMgdGhlIEdyYXBoaWNzIG9iamVjdC5cbiAqL1xuR3JhcGhpY3MucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoKSB7XG4gICAgQ29udGFpbmVyLnByb3RvdHlwZS5kZXN0cm95LmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG5cbiAgICAvLyBkZXN0cm95IGVhY2ggb2YgdGhlIEdyYXBoaWNzRGF0YSBvYmplY3RzXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmdyYXBoaWNzRGF0YS5sZW5ndGg7ICsraSkge1xuICAgICAgICB0aGlzLmdyYXBoaWNzRGF0YVtpXS5kZXN0cm95KCk7XG4gICAgfVxuXG4gICAgLy8gZm9yIGVhY2ggd2ViZ2wgZGF0YSBlbnRyeSwgZGVzdHJveSB0aGUgV2ViR0xHcmFwaGljc0RhdGFcbiAgICBmb3IgKHZhciBpZCBpbiB0aGlzLl93ZWJnbCkge1xuICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IHRoaXMuX3dlYmdsW2lkXS5kYXRhLmxlbmd0aDsgKytqKSB7XG4gICAgICAgICAgICB0aGlzLl93ZWJnbFtpZF0uZGF0YVtqXS5kZXN0cm95KCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLmdyYXBoaWNzRGF0YSA9IG51bGw7XG5cbiAgICB0aGlzLmN1cnJlbnRQYXRoID0gbnVsbDtcbiAgICB0aGlzLl93ZWJnbCA9IG51bGw7XG4gICAgdGhpcy5fbG9jYWxCb3VuZHMgPSBudWxsO1xufTtcbiIsIi8qKlxuICogQSBHcmFwaGljc0RhdGEgb2JqZWN0LlxuICpcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqIEBwYXJhbSBsaW5lV2lkdGgge251bWJlcn0gdGhlIHdpZHRoIG9mIHRoZSBsaW5lIHRvIGRyYXdcbiAqIEBwYXJhbSBsaW5lQ29sb3Ige251bWJlcn0gdGhlIGNvbG9yIG9mIHRoZSBsaW5lIHRvIGRyYXdcbiAqIEBwYXJhbSBsaW5lQWxwaGEge251bWJlcn0gdGhlIGFscGhhIG9mIHRoZSBsaW5lIHRvIGRyYXdcbiAqIEBwYXJhbSBmaWxsQ29sb3Ige251bWJlcn0gdGhlIGNvbG9yIG9mIHRoZSBmaWxsXG4gKiBAcGFyYW0gZmlsbEFscGhhIHtudW1iZXJ9IHRoZSBhbHBoYSBvZiB0aGUgZmlsbFxuICogQHBhcmFtIGZpbGwgICAgICB7Ym9vbGVhbn0gd2hldGhlciBvciBub3QgdGhlIHNoYXBlIGlzIGZpbGxlZCB3aXRoIGEgY29sb3VyXG4gKiBAcGFyYW0gc2hhcGUgICAgIHtDaXJjbGV8UmVjdGFuZ2xlfEVsbGlwc2V8TGluZXxQb2x5Z29ufSBUaGUgc2hhcGUgb2JqZWN0IHRvIGRyYXcuXG4gKi9cbmZ1bmN0aW9uIEdyYXBoaWNzRGF0YShsaW5lV2lkdGgsIGxpbmVDb2xvciwgbGluZUFscGhhLCBmaWxsQ29sb3IsIGZpbGxBbHBoYSwgZmlsbCwgc2hhcGUpXG57XG4gICAgLypcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9IHRoZSB3aWR0aCBvZiB0aGUgbGluZSB0byBkcmF3XG4gICAgICovXG4gICAgdGhpcy5saW5lV2lkdGggPSBsaW5lV2lkdGg7XG5cbiAgICAvKlxuICAgICAqIEBtZW1iZXIge251bWJlcn0gdGhlIGNvbG9yIG9mIHRoZSBsaW5lIHRvIGRyYXdcbiAgICAgKi9cbiAgICB0aGlzLmxpbmVDb2xvciA9IGxpbmVDb2xvcjtcbiAgICAvKlxuICAgICAqIEBtZW1iZXIge251bWJlcn0gdGhlIGFscGhhIG9mIHRoZSBsaW5lIHRvIGRyYXdcbiAgICAgKi9cbiAgICB0aGlzLmxpbmVBbHBoYSA9IGxpbmVBbHBoYTtcbiAgICAvKlxuICAgICAqIEBtZW1iZXIge251bWJlcn0gY2FjaGVkIHRpbnQgb2YgdGhlIGxpbmUgdG8gZHJhd1xuICAgICAqL1xuICAgIHRoaXMuX2xpbmVUaW50ID0gbGluZUNvbG9yO1xuXG4gICAgLypcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9IHRoZSBjb2xvciBvZiB0aGUgZmlsbFxuICAgICAqL1xuICAgIHRoaXMuZmlsbENvbG9yID0gZmlsbENvbG9yO1xuXG4gICAgLypcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9IHRoZSBhbHBoYSBvZiB0aGUgZmlsbFxuICAgICAqL1xuICAgIHRoaXMuZmlsbEFscGhhID0gZmlsbEFscGhhO1xuXG4gICAgLypcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9IGNhY2hlZCB0aW50IG9mIHRoZSBmaWxsXG4gICAgICovXG4gICAgdGhpcy5fZmlsbFRpbnQgPSBmaWxsQ29sb3I7XG5cbiAgICAvKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59IHdoZXRoZXIgb3Igbm90IHRoZSBzaGFwZSBpcyBmaWxsZWQgd2l0aCBhIGNvbG91clxuICAgICAqL1xuICAgIHRoaXMuZmlsbCA9IGZpbGw7XG5cbiAgICAvKlxuICAgICAqIEBtZW1iZXIge1BJWEkuQ2lyY2xlfFBJWEkuUmVjdGFuZ2xlfFBJWEkuRWxsaXBzZXxQSVhJLkxpbmV8UElYSS5Qb2x5Z29ufSBUaGUgc2hhcGUgb2JqZWN0IHRvIGRyYXcuXG4gICAgICovXG4gICAgdGhpcy5zaGFwZSA9IHNoYXBlO1xuXG4gICAgLypcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9IFRoZSB0eXBlIG9mIHRoZSBzaGFwZSwgc2VlIHRoZSBDb25zdC5TaGFwZXMgZmlsZSBmb3IgYWxsIHRoZSBleGlzdGluZyB0eXBlcyxcbiAgICAgKi9cbiAgICB0aGlzLnR5cGUgPSBzaGFwZS50eXBlO1xufVxuXG5HcmFwaGljc0RhdGEucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gR3JhcGhpY3NEYXRhO1xubW9kdWxlLmV4cG9ydHMgPSBHcmFwaGljc0RhdGE7XG5cbi8qKlxuICogQ3JlYXRlcyBhIG5ldyBHcmFwaGljc0RhdGEgb2JqZWN0IHdpdGggdGhlIHNhbWUgdmFsdWVzIGFzIHRoaXMgb25lLlxuICpcbiAqIEByZXR1cm4ge1BJWEkuR3JhcGhpY3NEYXRhfVxuICovXG5HcmFwaGljc0RhdGEucHJvdG90eXBlLmNsb25lID0gZnVuY3Rpb24gKClcbntcbiAgICByZXR1cm4gbmV3IEdyYXBoaWNzRGF0YShcbiAgICAgICAgdGhpcy5saW5lV2lkdGgsXG4gICAgICAgIHRoaXMubGluZUNvbG9yLFxuICAgICAgICB0aGlzLmxpbmVBbHBoYSxcbiAgICAgICAgdGhpcy5maWxsQ29sb3IsXG4gICAgICAgIHRoaXMuZmlsbEFscGhhLFxuICAgICAgICB0aGlzLmZpbGwsXG4gICAgICAgIHRoaXMuc2hhcGVcbiAgICApO1xufTtcblxuLyoqXG4gKiBEZXN0cm95cyB0aGUgR3JhcGhpY3MgZGF0YS5cbiAqL1xuR3JhcGhpY3NEYXRhLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKCkge1xuICAgIHRoaXMuc2hhcGUgPSBudWxsO1xufTtcbiIsInZhciB1dGlscyA9IHJlcXVpcmUoJy4uLy4uL3V0aWxzJyksXG4gICAgbWF0aCA9IHJlcXVpcmUoJy4uLy4uL21hdGgnKSxcbiAgICBDT05TVCA9IHJlcXVpcmUoJy4uLy4uL2NvbnN0JyksXG4gICAgT2JqZWN0UmVuZGVyZXIgPSByZXF1aXJlKCcuLi8uLi9yZW5kZXJlcnMvd2ViZ2wvdXRpbHMvT2JqZWN0UmVuZGVyZXInKSxcbiAgICBXZWJHTFJlbmRlcmVyID0gcmVxdWlyZSgnLi4vLi4vcmVuZGVyZXJzL3dlYmdsL1dlYkdMUmVuZGVyZXInKSxcbiAgICBXZWJHTEdyYXBoaWNzRGF0YSA9IHJlcXVpcmUoJy4vV2ViR0xHcmFwaGljc0RhdGEnKSxcbiAgICBQcmltaXRpdmVTaGFkZXIgPSByZXF1aXJlKCcuL1ByaW1pdGl2ZVNoYWRlcicpLFxuXG4gICAgLy8gc29tZSBkcmF3aW5nIGZ1bmN0aW9ucy4uXG4gICAgYnVpbGRMaW5lID0gcmVxdWlyZSgnLi9idWlsZExpbmUnKTtcbiAgICBidWlsZFBvbHkgPSByZXF1aXJlKCcuL2J1aWxkUG9seScpO1xuICAgIGJ1aWxkQ29tcGxleFBvbHkgPSByZXF1aXJlKCcuL2J1aWxkQ29tcGxleFBvbHknKTtcbiAgICBidWlsZFJlY3RhbmdsZSA9IHJlcXVpcmUoJy4vYnVpbGRSZWN0YW5nbGUnKTtcbiAgICBidWlsZFJvdW5kZWRSZWN0YW5nbGUgPSByZXF1aXJlKCcuL2J1aWxkUm91bmRlZFJlY3RhbmdsZScpO1xuICAgIGJ1aWxkQ2lyY2xlID0gcmVxdWlyZSgnLi9idWlsZENpcmNsZScpO1xuXG4gICAgZWFyY3V0ID0gcmVxdWlyZSgnZWFyY3V0Jyk7XG5cbi8qKlxuICogUmVuZGVycyB0aGUgZ3JhcGhpY3Mgb2JqZWN0LlxuICpcbiAqIEBjbGFzc1xuICogQHByaXZhdGVcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAZXh0ZW5kcyBQSVhJLk9iamVjdFJlbmRlcmVyXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcn0gVGhlIHJlbmRlcmVyIHRoaXMgb2JqZWN0IHJlbmRlcmVyIHdvcmtzIGZvci5cbiAqL1xuZnVuY3Rpb24gR3JhcGhpY3NSZW5kZXJlcihyZW5kZXJlcilcbntcbiAgICBPYmplY3RSZW5kZXJlci5jYWxsKHRoaXMsIHJlbmRlcmVyKTtcblxuICAgIHRoaXMuZ3JhcGhpY3NEYXRhUG9vbCA9IFtdO1xuXG4gICAgdGhpcy5wcmltaXRpdmVTaGFkZXIgPSBudWxsO1xuICAgIHRoaXMuY29tcGxleFByaW1pdGl2ZVNoYWRlciA9IG51bGw7XG5cbiAgICB0aGlzLmdsID0gcmVuZGVyZXIuZ2w7XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIGlzIHRoZSBtYXhpbXVtIG51bWJlciBvZiBwb2ludHMgYSBwb2x5IGNhbiBjb250YWluIGJlZm9yZSBpdCBpcyByZW5kZXJlZCBhcyBhIGNvbXBsZXggcG9seWdvbiAodXNpbmcgdGhlIHN0ZW5jaWwgYnVmZmVyKVxuICAgICAqIEB0eXBlIHtOdW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy5tYXhpbXVtU2ltcGxlUG9seVNpemUgPSAyMDA7XG59XG5cbkdyYXBoaWNzUmVuZGVyZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShPYmplY3RSZW5kZXJlci5wcm90b3R5cGUpO1xuR3JhcGhpY3NSZW5kZXJlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBHcmFwaGljc1JlbmRlcmVyO1xubW9kdWxlLmV4cG9ydHMgPSBHcmFwaGljc1JlbmRlcmVyO1xuXG5XZWJHTFJlbmRlcmVyLnJlZ2lzdGVyUGx1Z2luKCdncmFwaGljcycsIEdyYXBoaWNzUmVuZGVyZXIpO1xuXG4vKipcbiAqIENhbGxlZCB3aGVuIHRoZXJlIGlzIGEgV2ViR0wgY29udGV4dCBjaGFuZ2VcbiAqXG4gKiBAcHJpdmF0ZVxuICpcbiAqL1xuR3JhcGhpY3NSZW5kZXJlci5wcm90b3R5cGUub25Db250ZXh0Q2hhbmdlID0gZnVuY3Rpb24oKVxue1xuICAgIHRoaXMuZ2wgPSB0aGlzLnJlbmRlcmVyLmdsO1xuICAgIHRoaXMucHJpbWl0aXZlU2hhZGVyID0gbmV3IFByaW1pdGl2ZVNoYWRlcih0aGlzLmdsKVxufTtcblxuLyoqXG4gKiBEZXN0cm95cyB0aGlzIHJlbmRlcmVyLlxuICpcbiAqL1xuR3JhcGhpY3NSZW5kZXJlci5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uICgpIHtcbiAgICBPYmplY3RSZW5kZXJlci5wcm90b3R5cGUuZGVzdHJveS5jYWxsKHRoaXMpO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmdyYXBoaWNzRGF0YVBvb2wubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgdGhpcy5ncmFwaGljc0RhdGFQb29sW2ldLmRlc3Ryb3koKTtcbiAgICB9XG5cbiAgICB0aGlzLmdyYXBoaWNzRGF0YVBvb2wgPSBudWxsO1xufTtcblxuLyoqXG4gKiBSZW5kZXJzIGEgZ3JhcGhpY3Mgb2JqZWN0LlxuICpcbiAqIEBwYXJhbSBncmFwaGljcyB7UElYSS5HcmFwaGljc30gVGhlIGdyYXBoaWNzIG9iamVjdCB0byByZW5kZXIuXG4gKi9cbkdyYXBoaWNzUmVuZGVyZXIucHJvdG90eXBlLnJlbmRlciA9IGZ1bmN0aW9uKGdyYXBoaWNzKVxue1xuICAgIHZhciByZW5kZXJlciA9IHRoaXMucmVuZGVyZXI7XG4gICAgdmFyIGdsID0gcmVuZGVyZXIuZ2w7XG5cbiAgICB2YXIgd2ViR0xEYXRhO1xuICAvLyAgY29uc29sZS5sb2coZ3JhcGhpY3MpXG4gICAgaWYgKGdyYXBoaWNzLmRpcnR5IHx8ICFncmFwaGljcy5fd2ViR0xbZ2wuaWRdKVxuICAgIHtcbiAgICAgICAgdGhpcy51cGRhdGVHcmFwaGljcyhncmFwaGljcyk7XG4gICAgfVxuXG4gICAgdmFyIHdlYkdMID0gZ3JhcGhpY3MuX3dlYkdMW2dsLmlkXTtcblxuICAgIC8vIFRoaXMgIGNvdWxkIGJlIHNwZWVkZWQgdXAgZm9yIHN1cmUhXG5cbiAgICByZW5kZXJlci5ibGVuZE1vZGVNYW5hZ2VyLnNldEJsZW5kTW9kZSggZ3JhcGhpY3MuYmxlbmRNb2RlICk7XG5cbi8vICAgIHZhciBtYXRyaXggPSAgZ3JhcGhpY3Mud29ybGRUcmFuc2Zvcm0uY2xvbmUoKTtcbi8vICAgIHZhciBtYXRyaXggPSAgcmVuZGVyZXIuY3VycmVudFJlbmRlclRhcmdldC5wcm9qZWN0aW9uTWF0cml4LmNsb25lKCk7XG4vLyAgICBtYXRyaXguYXBwZW5kKGdyYXBoaWNzLndvcmxkVHJhbnNmb3JtKTtcblxuICAgIGZvciAodmFyIGkgPSAwLCBuID0gd2ViR0wuZGF0YS5sZW5ndGg7IGkgPCBuOyBpKyspXG4gICAge1xuICAgICAgICB3ZWJHTERhdGEgPSB3ZWJHTC5kYXRhW2ldO1xuXG4gICAgICAgIGlmICh3ZWJHTC5kYXRhW2ldLm1vZGUgPT09IDEpXG4gICAgICAgIHtcbiAgICAgICAgICAgIC8vVE9ETyBmaXggdGhpcyBvbmUhXG4gICAgICAgICAgICBcbiAgICAgICAgICAgIC8qXG4gICAgICAgICAgICByZW5kZXJlci5zdGVuY2lsTWFuYWdlci5wdXNoU3RlbmNpbChncmFwaGljcywgd2ViR0xEYXRhKTtcblxuICAgICAgICAgICAgZ2wudW5pZm9ybTFmKHJlbmRlcmVyLnNoYWRlck1hbmFnZXIuY29tcGxleFByaW1pdGl2ZVNoYWRlci51bmlmb3Jtcy5hbHBoYS5fbG9jYXRpb24sIGdyYXBoaWNzLndvcmxkQWxwaGEgKiB3ZWJHTERhdGEuYWxwaGEpO1xuXG4gICAgICAgICAgICAvLyByZW5kZXIgcXVhZC4uXG4gICAgICAgICAgICBnbC5kcmF3RWxlbWVudHMoZ2wuVFJJQU5HTEVfRkFOLCA0LCBnbC5VTlNJR05FRF9TSE9SVCwgKCB3ZWJHTERhdGEuaW5kaWNlcy5sZW5ndGggLSA0ICkgKiAyICk7XG5cbiAgICAgICAgICAgIHJlbmRlcmVyLnN0ZW5jaWxNYW5hZ2VyLnBvcFN0ZW5jaWwoZ3JhcGhpY3MsIHdlYkdMRGF0YSk7XG4gICAgICAgICAgICAqL1xuICAgICAgICB9XG4gICAgICAgIGVsc2VcbiAgICAgICAge1xuXG4gICAgICAgICAgICBzaGFkZXIgPSB0aGlzLnByaW1pdGl2ZVNoYWRlcjtcblxuICAgICAgICAgICAgcmVuZGVyZXIuYmluZFNoYWRlcihzaGFkZXIpXG5cbiAgICAgICAgICAgIHNoYWRlci51bmlmb3Jtcy50cmFuc2xhdGlvbk1hdHJpeCA9IGdyYXBoaWNzLndvcmxkVHJhbnNmb3JtLnRvQXJyYXkodHJ1ZSk7XG4gICAgICAgICAgICBzaGFkZXIudW5pZm9ybXMudGludCA9IHV0aWxzLmhleDJyZ2IoZ3JhcGhpY3MudGludCk7XG4gICAgICAgICAgICBzaGFkZXIudW5pZm9ybXMuYWxwaGEgPSBncmFwaGljcy53b3JsZEFscGhhO1xuXG5cbiAgICAgICAgICAgIGdsLmJpbmRCdWZmZXIoZ2wuQVJSQVlfQlVGRkVSLCB3ZWJHTERhdGEuYnVmZmVyKTtcblxuICAgICAgICAgICAgc2hhZGVyID0gdGhpcy5wcmltaXRpdmVTaGFkZXI7XG5cbiAgICAgICAgICAgIHNoYWRlci5hdHRyaWJ1dGVzLmFWZXJ0ZXhQb3NpdGlvbi5wb2ludGVyKGdsLkZMT0FULCBmYWxzZSwgNCAqIDYsIDApO1xuICAgICAgICAgICAgc2hhZGVyLmF0dHJpYnV0ZXMuYUNvbG9yLnBvaW50ZXIoZ2wuRkxPQVQsIGZhbHNlLCA0ICogNiwgMiAqIDQpO1xuXG4gICAgICAgICAgICBnbC5lbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShzaGFkZXIuYXR0cmlidXRlcy5hVmVydGV4UG9zaXRpb24ubG9jYXRpb24pO1xuICAgICAgICAgICAgZ2wuZW5hYmxlVmVydGV4QXR0cmliQXJyYXkoc2hhZGVyLmF0dHJpYnV0ZXMuYUNvbG9yLmxvY2F0aW9uKTtcblxuICAgICAgICAgICAgLy8gc2V0IHRoZSBpbmRleCBidWZmZXIhXG4gICAgICAgICAgICBnbC5iaW5kQnVmZmVyKGdsLkVMRU1FTlRfQVJSQVlfQlVGRkVSLCB3ZWJHTERhdGEuaW5kZXhCdWZmZXIpO1xuICAgICAgICAgICAgZ2wuZHJhd0VsZW1lbnRzKGdsLlRSSUFOR0xFX1NUUklQLCAgd2ViR0xEYXRhLmluZGljZXMubGVuZ3RoLCBnbC5VTlNJR05FRF9TSE9SVCwgMCApO1xuICAgICAgICB9XG5cbiAgICAgICAgcmVuZGVyZXIuZHJhd0NvdW50Kys7XG4gICAgfVxufTtcblxuLyoqXG4gKiBVcGRhdGVzIHRoZSBncmFwaGljcyBvYmplY3RcbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIGdyYXBoaWNzIHtQSVhJLkdyYXBoaWNzfSBUaGUgZ3JhcGhpY3Mgb2JqZWN0IHRvIHVwZGF0ZVxuICovXG5HcmFwaGljc1JlbmRlcmVyLnByb3RvdHlwZS51cGRhdGVHcmFwaGljcyA9IGZ1bmN0aW9uKGdyYXBoaWNzKVxue1xuICAgIHZhciBnbCA9IHRoaXMucmVuZGVyZXIuZ2w7XG5cbiAgICAgLy8gZ2V0IHRoZSBjb250ZXh0cyBncmFwaGljcyBvYmplY3RcbiAgICB2YXIgd2ViR0wgPSBncmFwaGljcy5fd2ViR0xbZ2wuaWRdO1xuXG4gICAgLy8gaWYgdGhlIGdyYXBoaWNzIG9iamVjdCBkb2VzIG5vdCBleGlzdCBpbiB0aGUgd2ViR0wgY29udGV4dCB0aW1lIHRvIGNyZWF0ZSBpdCFcbiAgICBpZiAoIXdlYkdMKVxuICAgIHtcbiAgICAgICAgd2ViR0wgPSBncmFwaGljcy5fd2ViR0xbZ2wuaWRdID0ge2xhc3RJbmRleDowLCBkYXRhOltdLCBnbDpnbH07XG4gICAgfVxuXG4gICBcbiAgICAvLyBmbGFnIHRoZSBncmFwaGljcyBhcyBub3QgZGlydHkgYXMgd2UgYXJlIGFib3V0IHRvIHVwZGF0ZSBpdC4uLlxuICAgIGdyYXBoaWNzLmRpcnR5ID0gZmFsc2U7XG5cbiAgICB2YXIgaTtcblxuICAgIC8vIGlmIHRoZSB1c2VyIGNsZWFyZWQgdGhlIGdyYXBoaWNzIG9iamVjdCB3ZSB3aWxsIG5lZWQgdG8gY2xlYXIgZXZlcnkgb2JqZWN0XG4gICAgaWYgKGdyYXBoaWNzLmNsZWFyRGlydHkpXG4gICAge1xuICAgICAgICBncmFwaGljcy5jbGVhckRpcnR5ID0gZmFsc2U7XG5cbiAgICAgICAgLy8gbG9vcCB0aHJvdWdoIGFuZCByZXR1cm4gYWxsIHRoZSB3ZWJHTERhdGFzIHRvIHRoZSBvYmplY3QgcG9vbCBzbyB0aGFuIGNhbiBiZSByZXVzZWQgbGF0ZXIgb25cbiAgICAgICAgZm9yIChpID0gMDsgaSA8IHdlYkdMLmRhdGEubGVuZ3RoOyBpKyspXG4gICAgICAgIHtcbiAgICAgICAgICAgIHZhciBncmFwaGljc0RhdGEgPSB3ZWJHTC5kYXRhW2ldO1xuICAgICAgICAgICAgZ3JhcGhpY3NEYXRhLnJlc2V0KCk7XG4gICAgICAgICAgICB0aGlzLmdyYXBoaWNzRGF0YVBvb2wucHVzaCggZ3JhcGhpY3NEYXRhICk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBjbGVhciB0aGUgYXJyYXkgYW5kIHJlc2V0IHRoZSBpbmRleC4uXG4gICAgICAgIHdlYkdMLmRhdGEgPSBbXTtcbiAgICAgICAgd2ViR0wubGFzdEluZGV4ID0gMDtcbiAgICB9XG5cbiAgICB2YXIgd2ViR0xEYXRhO1xuXG4gICAgLy8gbG9vcCB0aHJvdWdoIHRoZSBncmFwaGljcyBkYXRhcyBhbmQgY29uc3RydWN0IGVhY2ggb25lLi5cbiAgICAvLyBpZiB0aGUgb2JqZWN0IGlzIGEgY29tcGxleCBmaWxsIHRoZW4gdGhlIG5ldyBzdGVuY2lsIGJ1ZmZlciB0ZWNobmlxdWUgd2lsbCBiZSB1c2VkXG4gICAgLy8gb3RoZXIgd2lzZSBncmFwaGljcyBvYmplY3RzIHdpbGwgYmUgcHVzaGVkIGludG8gYSBiYXRjaC4uXG4gICAgZm9yIChpID0gd2ViR0wubGFzdEluZGV4OyBpIDwgZ3JhcGhpY3MuZ3JhcGhpY3NEYXRhLmxlbmd0aDsgaSsrKVxuICAgIHtcbiAgICAgICAgdmFyIGRhdGEgPSBncmFwaGljcy5ncmFwaGljc0RhdGFbaV07XG5cbiAgICAgICAgaWYgKGRhdGEudHlwZSA9PT0gQ09OU1QuU0hBUEVTLlBPTFkpXG4gICAgICAgIHtcbiAgICAgICAgICAgIC8vIG5lZWQgdG8gYWRkIHRoZSBwb2ludHMgdGhlIHRoZSBncmFwaGljcyBvYmplY3QuLlxuICAgICAgICAgICAgZGF0YS5wb2ludHMgPSBkYXRhLnNoYXBlLnBvaW50cy5zbGljZSgpO1xuICAgICAgICAgICAgaWYgKGRhdGEuc2hhcGUuY2xvc2VkKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIC8vIGNsb3NlIHRoZSBwb2x5IGlmIHRoZSB2YWx1ZSBpcyB0cnVlIVxuICAgICAgICAgICAgICAgIGlmIChkYXRhLnBvaW50c1swXSAhPT0gZGF0YS5wb2ludHNbZGF0YS5wb2ludHMubGVuZ3RoLTJdIHx8IGRhdGEucG9pbnRzWzFdICE9PSBkYXRhLnBvaW50c1tkYXRhLnBvaW50cy5sZW5ndGgtMV0pXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBkYXRhLnBvaW50cy5wdXNoKGRhdGEucG9pbnRzWzBdLCBkYXRhLnBvaW50c1sxXSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBNQUtFIFNVUkUgV0UgSEFWRSBUSEUgQ09SUkVDVCBUWVBFLi5cbiAgICAgICAgICAgIGlmIChkYXRhLmZpbGwpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgaWYgKGRhdGEucG9pbnRzLmxlbmd0aCA+PSA2KVxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGRhdGEucG9pbnRzLmxlbmd0aCA8IHRoaXMubWF4aW11bVNpbXBsZVBvbHlTaXplICogMilcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgd2ViR0xEYXRhID0gdGhpcy5zd2l0Y2hNb2RlKHdlYkdMLCAwKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNhbkRyYXdVc2luZ1NpbXBsZSA9IGJ1aWxkUG9seShkYXRhLCB3ZWJHTERhdGEpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWNhbkRyYXdVc2luZ1NpbXBsZSlcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3ZWJHTERhdGEgPSB0aGlzLnN3aXRjaE1vZGUod2ViR0wsIDEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1aWxkQ29tcGxleFBvbHkoZGF0YSwgd2ViR0xEYXRhKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgd2ViR0xEYXRhID0gdGhpcy5zd2l0Y2hNb2RlKHdlYkdMLCAxKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJ1aWxkQ29tcGxleFBvbHkoZGF0YSwgd2ViR0xEYXRhKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGRhdGEubGluZVdpZHRoID4gMClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB3ZWJHTERhdGEgPSB0aGlzLnN3aXRjaE1vZGUod2ViR0wsIDApO1xuICAgICAgICAgICAgICAgIGJ1aWxkTGluZShkYXRhLCB3ZWJHTERhdGEpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2VcbiAgICAgICAge1xuICAgICAgICAgICAgd2ViR0xEYXRhID0gdGhpcy5zd2l0Y2hNb2RlKHdlYkdMLCAwKTtcblxuICAgICAgICAgICAgaWYgKGRhdGEudHlwZSA9PT0gQ09OU1QuU0hBUEVTLlJFQ1QpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgYnVpbGRSZWN0YW5nbGUoZGF0YSwgd2ViR0xEYXRhKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGRhdGEudHlwZSA9PT0gQ09OU1QuU0hBUEVTLkNJUkMgfHwgZGF0YS50eXBlID09PSBDT05TVC5TSEFQRVMuRUxJUClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBidWlsZENpcmNsZShkYXRhLCB3ZWJHTERhdGEpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoZGF0YS50eXBlID09PSBDT05TVC5TSEFQRVMuUlJFQylcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBidWlsZFJvdW5kZWRSZWN0YW5nbGUoZGF0YSwgd2ViR0xEYXRhKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHdlYkdMLmxhc3RJbmRleCsrO1xuICAgIH1cblxuICAgIC8vIHVwbG9hZCBhbGwgdGhlIGRpcnR5IGRhdGEuLi5cbiAgICBmb3IgKGkgPSAwOyBpIDwgd2ViR0wuZGF0YS5sZW5ndGg7IGkrKylcbiAgICB7XG4gICAgICAgIHdlYkdMRGF0YSA9IHdlYkdMLmRhdGFbaV07XG5cbiAgICAgICAgaWYgKHdlYkdMRGF0YS5kaXJ0eSlcbiAgICAgICAge1xuICAgICAgICAgICAgd2ViR0xEYXRhLnVwbG9hZCgpO1xuICAgICAgICB9XG4gICAgfVxufTtcblxuLyoqXG4gKlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0gd2ViR0wge1dlYkdMUmVuZGVyaW5nQ29udGV4dH0gdGhlIGN1cnJlbnQgV2ViR0wgZHJhd2luZyBjb250ZXh0XG4gKiBAcGFyYW0gdHlwZSB7bnVtYmVyfSBUT0RPIEBBbHZpblxuICovXG5HcmFwaGljc1JlbmRlcmVyLnByb3RvdHlwZS5zd2l0Y2hNb2RlID0gZnVuY3Rpb24gKHdlYkdMLCB0eXBlKVxue1xuICAgIHZhciB3ZWJHTERhdGE7XG5cbiAgICBpZiAoIXdlYkdMLmRhdGEubGVuZ3RoKVxuICAgIHtcbiAgICAgICAgd2ViR0xEYXRhID0gdGhpcy5ncmFwaGljc0RhdGFQb29sLnBvcCgpIHx8IG5ldyBXZWJHTEdyYXBoaWNzRGF0YSh3ZWJHTC5nbCk7XG4gICAgICAgIHdlYkdMRGF0YS5tb2RlID0gdHlwZTtcbiAgICAgICAgd2ViR0wuZGF0YS5wdXNoKHdlYkdMRGF0YSk7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHdlYkdMRGF0YSA9IHdlYkdMLmRhdGFbd2ViR0wuZGF0YS5sZW5ndGgtMV07XG5cbiAgICAgICAgaWYgKCh3ZWJHTERhdGEucG9pbnRzLmxlbmd0aCA+IDMyMDAwMCkgfHwgd2ViR0xEYXRhLm1vZGUgIT09IHR5cGUgfHwgdHlwZSA9PT0gMSlcbiAgICAgICAge1xuICAgICAgICAgICAgd2ViR0xEYXRhID0gdGhpcy5ncmFwaGljc0RhdGFQb29sLnBvcCgpIHx8IG5ldyBXZWJHTEdyYXBoaWNzRGF0YSh3ZWJHTC5nbCk7XG4gICAgICAgICAgICB3ZWJHTERhdGEubW9kZSA9IHR5cGU7XG4gICAgICAgICAgICB3ZWJHTC5kYXRhLnB1c2god2ViR0xEYXRhKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHdlYkdMRGF0YS5kaXJ0eSA9IHRydWU7XG5cbiAgICByZXR1cm4gd2ViR0xEYXRhO1xufTtcblxuIiwidmFyIFNoYWRlciA9IHJlcXVpcmUoJ3BpeGktZ2wtY29yZScpLkdMU2hhZGVyO1xuXG4vKipcbiAqIFRoaXMgc2hhZGVyIGlzIHVzZWQgdG8gZHJhdyBzaW1wbGUgcHJpbWl0aXZlIHNoYXBlcyBmb3Ige0BsaW5rIFBJWEkuR3JhcGhpY3N9LlxuICpcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqIEBleHRlbmRzIFBJWEkuU2hhZGVyXG4gKiBAcGFyYW0gc2hhZGVyTWFuYWdlciB7U2hhZGVyTWFuYWdlcn0gVGhlIHdlYmdsIHNoYWRlciBtYW5hZ2VyIHRoaXMgc2hhZGVyIHdvcmtzIGZvci5cbiAqL1xuZnVuY3Rpb24gUHJpbWl0aXZlU2hhZGVyKGdsKVxue1xuICAgIFNoYWRlci5jYWxsKHRoaXMsXG4gICAgICAgIGdsLFxuICAgICAgICAvLyB2ZXJ0ZXggc2hhZGVyXG4gICAgICAgIFtcbiAgICAgICAgICAgICdhdHRyaWJ1dGUgdmVjMiBhVmVydGV4UG9zaXRpb247JyxcbiAgICAgICAgICAgICdhdHRyaWJ1dGUgdmVjNCBhQ29sb3I7JyxcblxuICAgICAgICAgICAgJ3VuaWZvcm0gbWF0MyB0cmFuc2xhdGlvbk1hdHJpeDsnLFxuICAgICAgICAgICAgJ3VuaWZvcm0gbWF0MyBwcm9qZWN0aW9uTWF0cml4OycsXG5cbiAgICAgICAgICAgICd1bmlmb3JtIGZsb2F0IGFscGhhOycsXG4gICAgICAgICAgICAndW5pZm9ybSBmbG9hdCBmbGlwWTsnLFxuICAgICAgICAgICAgJ3VuaWZvcm0gdmVjMyB0aW50OycsXG5cbiAgICAgICAgICAgICd2YXJ5aW5nIHZlYzQgdkNvbG9yOycsXG5cbiAgICAgICAgICAgICd2b2lkIG1haW4odm9pZCl7JyxcbiAgICAgICAgICAgICcgICBnbF9Qb3NpdGlvbiA9IHZlYzQoKHByb2plY3Rpb25NYXRyaXggKiB0cmFuc2xhdGlvbk1hdHJpeCAqIHZlYzMoYVZlcnRleFBvc2l0aW9uLCAxLjApKS54eSwgMC4wLCAxLjApOycsXG4gICAgICAgICAgICAnICAgdkNvbG9yID0gYUNvbG9yICogdmVjNCh0aW50ICogYWxwaGEsIGFscGhhKTsnLFxuICAgICAgICAgICAgJ30nXG4gICAgICAgIF0uam9pbignXFxuJyksXG4gICAgICAgIC8vIGZyYWdtZW50IHNoYWRlclxuICAgICAgICBbXG4gICAgICAgICAgICAncHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7JyxcblxuICAgICAgICAgICAgJ3ZhcnlpbmcgdmVjNCB2Q29sb3I7JyxcblxuICAgICAgICAgICAgJ3ZvaWQgbWFpbih2b2lkKXsnLFxuICAgICAgICAgICAgJyAgIGdsX0ZyYWdDb2xvciA9IHZDb2xvcjsnLFxuICAgICAgICAgICAgJ30nXG4gICAgICAgIF0uam9pbignXFxuJylcbiAgICApO1xufVxuXG5QcmltaXRpdmVTaGFkZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShTaGFkZXIucHJvdG90eXBlKTtcblByaW1pdGl2ZVNoYWRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBQcmltaXRpdmVTaGFkZXI7XG5cbm1vZHVsZS5leHBvcnRzID0gUHJpbWl0aXZlU2hhZGVyO1xuIiwiLyoqXG4gKiBBbiBvYmplY3QgY29udGFpbmluZyBXZWJHTCBzcGVjaWZpYyBwcm9wZXJ0aWVzIHRvIGJlIHVzZWQgYnkgdGhlIFdlYkdMIHJlbmRlcmVyXG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIGdsIHtXZWJHTFJlbmRlcmluZ0NvbnRleHR9IHRoZSBjdXJyZW50IFdlYkdMIGRyYXdpbmcgY29udGV4dFxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gV2ViR0xHcmFwaGljc0RhdGEoZ2wpIHtcblxuICAgIC8qKlxuICAgICAqIFRoZSBjdXJyZW50IFdlYkdMIGRyYXdpbmcgY29udGV4dFxuICAgICAqXG4gICAgICogQG1lbWJlciB7V2ViR0xSZW5kZXJpbmdDb250ZXh0fVxuICAgICAqL1xuICAgIHRoaXMuZ2wgPSBnbDtcblxuICAgIC8vVE9ETyBkb2VzIHRoaXMgbmVlZCB0byBiZSBzcGxpdCBiZWZvcmUgdXBsb2Rpbmc/P1xuICAgIC8qKlxuICAgICAqIEFuIGFycmF5IG9mIGNvbG9yIGNvbXBvbmVudHMgKHIsZyxiKVxuICAgICAqIEBtZW1iZXIge251bWJlcltdfVxuICAgICAqL1xuICAgIHRoaXMuY29sb3IgPSBbMCwwLDBdOyAvLyBjb2xvciBzcGxpdCFcblxuICAgIC8qKlxuICAgICAqIEFuIGFycmF5IG9mIHBvaW50cyB0byBkcmF3XG4gICAgICogQG1lbWJlciB7UElYSS5Qb2ludFtdfVxuICAgICAqL1xuICAgIHRoaXMucG9pbnRzID0gW107XG5cbiAgICAvKipcbiAgICAgKiBUaGUgaW5kaWNlcyBvZiB0aGUgdmVydGljZXNcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJbXX1cbiAgICAgKi9cbiAgICB0aGlzLmluZGljZXMgPSBbXTtcbiAgICAvKipcbiAgICAgKiBUaGUgbWFpbiBidWZmZXJcbiAgICAgKiBAbWVtYmVyIHtXZWJHTEJ1ZmZlcn1cbiAgICAgKi9cbiAgICB0aGlzLmJ1ZmZlciA9IGdsLmNyZWF0ZUJ1ZmZlcigpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGluZGV4IGJ1ZmZlclxuICAgICAqIEBtZW1iZXIge1dlYkdMQnVmZmVyfVxuICAgICAqL1xuICAgIHRoaXMuaW5kZXhCdWZmZXIgPSBnbC5jcmVhdGVCdWZmZXIoKTtcblxuICAgIC8qKlxuICAgICAqIHRvZG8gQGFsdmluXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMubW9kZSA9IDE7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYWxwaGEgb2YgdGhlIGdyYXBoaWNzXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMuYWxwaGEgPSAxO1xuXG4gICAgLyoqXG4gICAgICogV2hldGhlciB0aGlzIGdyYXBoaWNzIGlzIGRpcnR5IG9yIG5vdFxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICovXG4gICAgdGhpcy5kaXJ0eSA9IHRydWU7XG5cbiAgICB0aGlzLmdsUG9pbnRzID0gbnVsbDtcbiAgICB0aGlzLmdsSW5kaWNlcyA9IG51bGw7XG59XG5cbldlYkdMR3JhcGhpY3NEYXRhLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFdlYkdMR3JhcGhpY3NEYXRhO1xubW9kdWxlLmV4cG9ydHMgPSBXZWJHTEdyYXBoaWNzRGF0YTtcblxuLyoqXG4gKiBSZXNldHMgdGhlIHZlcnRpY2VzIGFuZCB0aGUgaW5kaWNlc1xuICovXG5XZWJHTEdyYXBoaWNzRGF0YS5wcm90b3R5cGUucmVzZXQgPSBmdW5jdGlvbiAoKSB7XG4gICAgdGhpcy5wb2ludHMubGVuZ3RoID0gMDtcbiAgICB0aGlzLmluZGljZXMubGVuZ3RoID0gMDtcbn07XG5cbi8qKlxuICogQmluZHMgdGhlIGJ1ZmZlcnMgYW5kIHVwbG9hZHMgdGhlIGRhdGFcbiAqL1xuV2ViR0xHcmFwaGljc0RhdGEucHJvdG90eXBlLnVwbG9hZCA9IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgZ2wgPSB0aGlzLmdsO1xuXG4vLyAgICB0aGlzLmxhc3RJbmRleCA9IGdyYXBoaWNzLmdyYXBoaWNzRGF0YS5sZW5ndGg7XG4gICAgdGhpcy5nbFBvaW50cyA9IG5ldyBGbG9hdDMyQXJyYXkodGhpcy5wb2ludHMpO1xuXG4gICAgZ2wuYmluZEJ1ZmZlcihnbC5BUlJBWV9CVUZGRVIsIHRoaXMuYnVmZmVyKTtcbiAgICBnbC5idWZmZXJEYXRhKGdsLkFSUkFZX0JVRkZFUiwgdGhpcy5nbFBvaW50cywgZ2wuU1RBVElDX0RSQVcpO1xuXG4gICAgdGhpcy5nbEluZGljZXMgPSBuZXcgVWludDE2QXJyYXkodGhpcy5pbmRpY2VzKTtcblxuICAgIGdsLmJpbmRCdWZmZXIoZ2wuRUxFTUVOVF9BUlJBWV9CVUZGRVIsIHRoaXMuaW5kZXhCdWZmZXIpO1xuICAgIGdsLmJ1ZmZlckRhdGEoZ2wuRUxFTUVOVF9BUlJBWV9CVUZGRVIsIHRoaXMuZ2xJbmRpY2VzLCBnbC5TVEFUSUNfRFJBVyk7XG5cbiAgICB0aGlzLmRpcnR5ID0gZmFsc2U7XG59O1xuXG5XZWJHTEdyYXBoaWNzRGF0YS5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uICgpIHtcbiAgICB0aGlzLmNvbG9yID0gbnVsbDtcbiAgICB0aGlzLnBvaW50cyA9IG51bGw7XG4gICAgdGhpcy5pbmRpY2VzID0gbnVsbDtcblxuICAgIHRoaXMuZ2wuZGVsZXRlQnVmZmVyKHRoaXMuYnVmZmVyKTtcbiAgICB0aGlzLmdsLmRlbGV0ZUJ1ZmZlcih0aGlzLmluZGV4QnVmZmVyKTtcbiAgICBcbiAgICB0aGlzLmdsID0gbnVsbDtcblxuICAgIHRoaXMuYnVmZmVyID0gbnVsbDtcbiAgICB0aGlzLmluZGV4QnVmZmVyID0gbnVsbDtcblxuICAgIHRoaXMuZ2xQb2ludHMgPSBudWxsO1xuICAgIHRoaXMuZ2xJbmRpY2VzID0gbnVsbDtcbn07XG4iLCJ2YXIgYnVpbGRMaW5lID0gcmVxdWlyZSgnLi9idWlsZExpbmUnKSxcbiAgICB1dGlscyA9IHJlcXVpcmUoJy4uLy4uL3V0aWxzJyk7XG5cbi8qKlxuICogQnVpbGRzIGEgY2lyY2xlIHRvIGRyYXdcbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIGdyYXBoaWNzRGF0YSB7UElYSS5HcmFwaGljc30gVGhlIGdyYXBoaWNzIG9iamVjdCB0byBkcmF3XG4gKiBAcGFyYW0gd2ViR0xEYXRhIHtvYmplY3R9IGFuIG9iamVjdCBjb250YWluaW5nIGFsbCB0aGUgd2ViR0wtc3BlY2lmaWMgaW5mb3JtYXRpb24gdG8gY3JlYXRlIHRoaXMgc2hhcGVcbiAqL1xudmFyIGJ1aWxkQ2lyY2xlID0gZnVuY3Rpb24gKGdyYXBoaWNzRGF0YSwgd2ViR0xEYXRhKVxue1xuICAgIC8vIG5lZWQgdG8gY29udmVydCBwb2ludHMgdG8gYSBuaWNlIHJlZ3VsYXIgZGF0YVxuICAgIHZhciBjaXJjbGVEYXRhID0gZ3JhcGhpY3NEYXRhLnNoYXBlO1xuICAgIHZhciB4ID0gY2lyY2xlRGF0YS54O1xuICAgIHZhciB5ID0gY2lyY2xlRGF0YS55O1xuICAgIHZhciB3aWR0aDtcbiAgICB2YXIgaGVpZ2h0O1xuXG4gICAgLy8gVE9ETyAtIGJpdCBoYWNreT8/XG4gICAgaWYgKGdyYXBoaWNzRGF0YS50eXBlID09PSBDT05TVC5TSEFQRVMuQ0lSQylcbiAgICB7XG4gICAgICAgIHdpZHRoID0gY2lyY2xlRGF0YS5yYWRpdXM7XG4gICAgICAgIGhlaWdodCA9IGNpcmNsZURhdGEucmFkaXVzO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICB3aWR0aCA9IGNpcmNsZURhdGEud2lkdGg7XG4gICAgICAgIGhlaWdodCA9IGNpcmNsZURhdGEuaGVpZ2h0O1xuICAgIH1cblxuICAgIHZhciB0b3RhbFNlZ3MgPSBNYXRoLmZsb29yKDMwICogTWF0aC5zcXJ0KGNpcmNsZURhdGEucmFkaXVzKSkgfHwgTWF0aC5mbG9vcigxNSAqIE1hdGguc3FydChjaXJjbGVEYXRhLndpZHRoICsgY2lyY2xlRGF0YS5oZWlnaHQpKTtcbiAgICB2YXIgc2VnID0gKE1hdGguUEkgKiAyKSAvIHRvdGFsU2VncyA7XG5cbiAgICB2YXIgaSA9IDA7XG5cbiAgICBpZiAoZ3JhcGhpY3NEYXRhLmZpbGwpXG4gICAge1xuICAgICAgICB2YXIgY29sb3IgPSB1dGlscy5oZXgycmdiKGdyYXBoaWNzRGF0YS5maWxsQ29sb3IpO1xuICAgICAgICB2YXIgYWxwaGEgPSBncmFwaGljc0RhdGEuZmlsbEFscGhhO1xuXG4gICAgICAgIHZhciByID0gY29sb3JbMF0gKiBhbHBoYTtcbiAgICAgICAgdmFyIGcgPSBjb2xvclsxXSAqIGFscGhhO1xuICAgICAgICB2YXIgYiA9IGNvbG9yWzJdICogYWxwaGE7XG5cbiAgICAgICAgdmFyIHZlcnRzID0gd2ViR0xEYXRhLnBvaW50cztcbiAgICAgICAgdmFyIGluZGljZXMgPSB3ZWJHTERhdGEuaW5kaWNlcztcblxuICAgICAgICB2YXIgdmVjUG9zID0gdmVydHMubGVuZ3RoLzY7XG5cbiAgICAgICAgaW5kaWNlcy5wdXNoKHZlY1Bvcyk7XG5cbiAgICAgICAgZm9yIChpID0gMDsgaSA8IHRvdGFsU2VncyArIDEgOyBpKyspXG4gICAgICAgIHtcbiAgICAgICAgICAgIHZlcnRzLnB1c2goeCx5LCByLCBnLCBiLCBhbHBoYSk7XG5cbiAgICAgICAgICAgIHZlcnRzLnB1c2goeCArIE1hdGguc2luKHNlZyAqIGkpICogd2lkdGgsXG4gICAgICAgICAgICAgICAgICAgICAgIHkgKyBNYXRoLmNvcyhzZWcgKiBpKSAqIGhlaWdodCxcbiAgICAgICAgICAgICAgICAgICAgICAgciwgZywgYiwgYWxwaGEpO1xuXG4gICAgICAgICAgICBpbmRpY2VzLnB1c2godmVjUG9zKyssIHZlY1BvcysrKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGluZGljZXMucHVzaCh2ZWNQb3MtMSk7XG4gICAgfVxuXG4gICAgaWYgKGdyYXBoaWNzRGF0YS5saW5lV2lkdGgpXG4gICAge1xuICAgICAgICB2YXIgdGVtcFBvaW50cyA9IGdyYXBoaWNzRGF0YS5wb2ludHM7XG5cbiAgICAgICAgZ3JhcGhpY3NEYXRhLnBvaW50cyA9IFtdO1xuXG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCB0b3RhbFNlZ3MgKyAxOyBpKyspXG4gICAgICAgIHtcbiAgICAgICAgICAgIGdyYXBoaWNzRGF0YS5wb2ludHMucHVzaCh4ICsgTWF0aC5zaW4oc2VnICogaSkgKiB3aWR0aCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB5ICsgTWF0aC5jb3Moc2VnICogaSkgKiBoZWlnaHQpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5idWlsZExpbmUoZ3JhcGhpY3NEYXRhLCB3ZWJHTERhdGEpO1xuXG4gICAgICAgIGdyYXBoaWNzRGF0YS5wb2ludHMgPSB0ZW1wUG9pbnRzO1xuICAgIH1cbn07XG5cblxubW9kdWxlLmV4cG9ydHMgPSBidWlsZENpcmNsZTsiLCJ2YXIgYnVpbGRMaW5lID0gcmVxdWlyZSgnLi9idWlsZExpbmUnKSxcbiAgICB1dGlscyA9IHJlcXVpcmUoJy4uLy4uL3V0aWxzJyk7XG4gICAgXG5cblxuLyoqXG4gKiBCdWlsZHMgYSBjb21wbGV4IHBvbHlnb24gdG8gZHJhd1xuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0gZ3JhcGhpY3NEYXRhIHtQSVhJLkdyYXBoaWNzfSBUaGUgZ3JhcGhpY3Mgb2JqZWN0IGNvbnRhaW5pbmcgYWxsIHRoZSBuZWNlc3NhcnkgcHJvcGVydGllc1xuICogQHBhcmFtIHdlYkdMRGF0YSB7b2JqZWN0fSBhbiBvYmplY3QgY29udGFpbmluZyBhbGwgdGhlIHdlYkdMLXNwZWNpZmljIGluZm9ybWF0aW9uIHRvIGNyZWF0ZSB0aGlzIHNoYXBlXG4gKi9cbnZhciBidWlsZENvbXBsZXhQb2x5ID0gZnVuY3Rpb24gKGdyYXBoaWNzRGF0YSwgd2ViR0xEYXRhKVxue1xuICAgIC8vVE9ETyAtIG5vIG5lZWQgdG8gY29weSB0aGlzIGFzIGl0IGdldHMgdHVybmVkIGludG8gYSBGTG9hdDMyQXJyYXkgYW55d2F5cy4uXG4gICAgdmFyIHBvaW50cyA9IGdyYXBoaWNzRGF0YS5wb2ludHMuc2xpY2UoKTtcblxuICAgIGlmIChwb2ludHMubGVuZ3RoIDwgNilcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBnZXQgZmlyc3QgYW5kIGxhc3QgcG9pbnQuLiBmaWd1cmUgb3V0IHRoZSBtaWRkbGUhXG4gICAgdmFyIGluZGljZXMgPSB3ZWJHTERhdGEuaW5kaWNlcztcbiAgICB3ZWJHTERhdGEucG9pbnRzID0gcG9pbnRzO1xuICAgIHdlYkdMRGF0YS5hbHBoYSA9IGdyYXBoaWNzRGF0YS5maWxsQWxwaGE7XG4gICAgd2ViR0xEYXRhLmNvbG9yID0gdXRpbHMuaGV4MnJnYihncmFwaGljc0RhdGEuZmlsbENvbG9yKTtcblxuICAgIC8vIGNhbGNsYXRlIHRoZSBib3VuZHMuLlxuICAgIHZhciBtaW5YID0gSW5maW5pdHk7XG4gICAgdmFyIG1heFggPSAtSW5maW5pdHk7XG5cbiAgICB2YXIgbWluWSA9IEluZmluaXR5O1xuICAgIHZhciBtYXhZID0gLUluZmluaXR5O1xuXG4gICAgdmFyIHgseTtcblxuICAgIC8vIGdldCBzaXplLi5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHBvaW50cy5sZW5ndGg7IGkrPTIpXG4gICAge1xuICAgICAgICB4ID0gcG9pbnRzW2ldO1xuICAgICAgICB5ID0gcG9pbnRzW2krMV07XG5cbiAgICAgICAgbWluWCA9IHggPCBtaW5YID8geCA6IG1pblg7XG4gICAgICAgIG1heFggPSB4ID4gbWF4WCA/IHggOiBtYXhYO1xuXG4gICAgICAgIG1pblkgPSB5IDwgbWluWSA/IHkgOiBtaW5ZO1xuICAgICAgICBtYXhZID0geSA+IG1heFkgPyB5IDogbWF4WTtcbiAgICB9XG5cbiAgICAvLyBhZGQgYSBxdWFkIHRvIHRoZSBlbmQgY29zIHRoZXJlIGlzIG5vIHBvaW50IG1ha2luZyBhbm90aGVyIGJ1ZmZlciFcbiAgICBwb2ludHMucHVzaChtaW5YLCBtaW5ZLFxuICAgICAgICAgICAgICAgIG1heFgsIG1pblksXG4gICAgICAgICAgICAgICAgbWF4WCwgbWF4WSxcbiAgICAgICAgICAgICAgICBtaW5YLCBtYXhZKTtcblxuICAgIC8vIHB1c2ggYSBxdWFkIG9udG8gdGhlIGVuZC4uXG5cbiAgICAvL1RPRE8gLSB0aGlzIGFpbnQgbmVlZGVkIVxuICAgIHZhciBsZW5ndGggPSBwb2ludHMubGVuZ3RoIC8gMjtcbiAgICBmb3IgKGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspXG4gICAge1xuICAgICAgICBpbmRpY2VzLnB1c2goIGkgKTtcbiAgICB9XG5cbn07XG5cblxuXG5tb2R1bGUuZXhwb3J0cyA9IGJ1aWxkQ29tcGxleFBvbHk7IiwidmFyIG1hdGggPSByZXF1aXJlKCcuLi8uLi9tYXRoJyksXG4gICAgdXRpbHMgPSByZXF1aXJlKCcuLi8uLi91dGlscycpO1xuXG4vKipcbiAqIEJ1aWxkcyBhIGxpbmUgdG8gZHJhd1xuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0gZ3JhcGhpY3NEYXRhIHtQSVhJLkdyYXBoaWNzfSBUaGUgZ3JhcGhpY3Mgb2JqZWN0IGNvbnRhaW5pbmcgYWxsIHRoZSBuZWNlc3NhcnkgcHJvcGVydGllc1xuICogQHBhcmFtIHdlYkdMRGF0YSB7b2JqZWN0fSBhbiBvYmplY3QgY29udGFpbmluZyBhbGwgdGhlIHdlYkdMLXNwZWNpZmljIGluZm9ybWF0aW9uIHRvIGNyZWF0ZSB0aGlzIHNoYXBlXG4gKi9cbnZhciBidWlsZExpbmUgPSBmdW5jdGlvbiAoZ3JhcGhpY3NEYXRhLCB3ZWJHTERhdGEpXG57XG4gICAgLy8gVE9ETyBPUFRJTUlTRSFcbiAgICB2YXIgaSA9IDA7XG4gICAgdmFyIHBvaW50cyA9IGdyYXBoaWNzRGF0YS5wb2ludHM7XG5cbiAgICBpZiAocG9pbnRzLmxlbmd0aCA9PT0gMClcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgLy8gaWYgdGhlIGxpbmUgd2lkdGggaXMgYW4gb2RkIG51bWJlciBhZGQgMC41IHRvIGFsaWduIHRvIGEgd2hvbGUgcGl4ZWxcbiAgICAvLyBjb21tZW50aW5nIHRoaXMgb3V0IGZpeGVzICM3MTEgYW5kICMxNjIwXG4gICAgLy8gaWYgKGdyYXBoaWNzRGF0YS5saW5lV2lkdGglMilcbiAgICAvLyB7XG4gICAgLy8gICAgIGZvciAoaSA9IDA7IGkgPCBwb2ludHMubGVuZ3RoOyBpKyspXG4gICAgLy8gICAgIHtcbiAgICAvLyAgICAgICAgIHBvaW50c1tpXSArPSAwLjU7XG4gICAgLy8gICAgIH1cbiAgICAvLyB9XG5cbiAgICAvLyBnZXQgZmlyc3QgYW5kIGxhc3QgcG9pbnQuLiBmaWd1cmUgb3V0IHRoZSBtaWRkbGUhXG4gICAgdmFyIGZpcnN0UG9pbnQgPSBuZXcgbWF0aC5Qb2ludChwb2ludHNbMF0sIHBvaW50c1sxXSk7XG4gICAgdmFyIGxhc3RQb2ludCA9IG5ldyBtYXRoLlBvaW50KHBvaW50c1twb2ludHMubGVuZ3RoIC0gMl0sIHBvaW50c1twb2ludHMubGVuZ3RoIC0gMV0pO1xuXG4gICAgLy8gaWYgdGhlIGZpcnN0IHBvaW50IGlzIHRoZSBsYXN0IHBvaW50IC0gZ29ubmEgaGF2ZSBpc3N1ZXMgOilcbiAgICBpZiAoZmlyc3RQb2ludC54ID09PSBsYXN0UG9pbnQueCAmJiBmaXJzdFBvaW50LnkgPT09IGxhc3RQb2ludC55KVxuICAgIHtcbiAgICAgICAgLy8gbmVlZCB0byBjbG9uZSBhcyB3ZSBhcmUgZ29pbmcgdG8gc2xpZ2h0bHkgbW9kaWZ5IHRoZSBzaGFwZS4uXG4gICAgICAgIHBvaW50cyA9IHBvaW50cy5zbGljZSgpO1xuXG4gICAgICAgIHBvaW50cy5wb3AoKTtcbiAgICAgICAgcG9pbnRzLnBvcCgpO1xuXG4gICAgICAgIGxhc3RQb2ludCA9IG5ldyBtYXRoLlBvaW50KHBvaW50c1twb2ludHMubGVuZ3RoIC0gMl0sIHBvaW50c1twb2ludHMubGVuZ3RoIC0gMV0pO1xuXG4gICAgICAgIHZhciBtaWRQb2ludFggPSBsYXN0UG9pbnQueCArIChmaXJzdFBvaW50LnggLSBsYXN0UG9pbnQueCkgKjAuNTtcbiAgICAgICAgdmFyIG1pZFBvaW50WSA9IGxhc3RQb2ludC55ICsgKGZpcnN0UG9pbnQueSAtIGxhc3RQb2ludC55KSAqMC41O1xuXG4gICAgICAgIHBvaW50cy51bnNoaWZ0KG1pZFBvaW50WCwgbWlkUG9pbnRZKTtcbiAgICAgICAgcG9pbnRzLnB1c2gobWlkUG9pbnRYLCBtaWRQb2ludFkpO1xuICAgIH1cblxuICAgIHZhciB2ZXJ0cyA9IHdlYkdMRGF0YS5wb2ludHM7XG4gICAgdmFyIGluZGljZXMgPSB3ZWJHTERhdGEuaW5kaWNlcztcbiAgICB2YXIgbGVuZ3RoID0gcG9pbnRzLmxlbmd0aCAvIDI7XG4gICAgdmFyIGluZGV4Q291bnQgPSBwb2ludHMubGVuZ3RoO1xuICAgIHZhciBpbmRleFN0YXJ0ID0gdmVydHMubGVuZ3RoLzY7XG5cbiAgICAvLyBEUkFXIHRoZSBMaW5lXG4gICAgdmFyIHdpZHRoID0gZ3JhcGhpY3NEYXRhLmxpbmVXaWR0aCAvIDI7XG5cbiAgICAvLyBzb3J0IGNvbG9yXG4gICAgdmFyIGNvbG9yID0gdXRpbHMuaGV4MnJnYihncmFwaGljc0RhdGEubGluZUNvbG9yKTtcbiAgICB2YXIgYWxwaGEgPSBncmFwaGljc0RhdGEubGluZUFscGhhO1xuICAgIHZhciByID0gY29sb3JbMF0gKiBhbHBoYTtcbiAgICB2YXIgZyA9IGNvbG9yWzFdICogYWxwaGE7XG4gICAgdmFyIGIgPSBjb2xvclsyXSAqIGFscGhhO1xuXG4gICAgdmFyIHB4LCBweSwgcDF4LCBwMXksIHAyeCwgcDJ5LCBwM3gsIHAzeTtcbiAgICB2YXIgcGVycHgsIHBlcnB5LCBwZXJwMngsIHBlcnAyeSwgcGVycDN4LCBwZXJwM3k7XG4gICAgdmFyIGExLCBiMSwgYzEsIGEyLCBiMiwgYzI7XG4gICAgdmFyIGRlbm9tLCBwZGlzdCwgZGlzdDtcblxuICAgIHAxeCA9IHBvaW50c1swXTtcbiAgICBwMXkgPSBwb2ludHNbMV07XG5cbiAgICBwMnggPSBwb2ludHNbMl07XG4gICAgcDJ5ID0gcG9pbnRzWzNdO1xuXG4gICAgcGVycHggPSAtKHAxeSAtIHAyeSk7XG4gICAgcGVycHkgPSAgcDF4IC0gcDJ4O1xuXG4gICAgZGlzdCA9IE1hdGguc3FydChwZXJweCpwZXJweCArIHBlcnB5KnBlcnB5KTtcblxuICAgIHBlcnB4IC89IGRpc3Q7XG4gICAgcGVycHkgLz0gZGlzdDtcbiAgICBwZXJweCAqPSB3aWR0aDtcbiAgICBwZXJweSAqPSB3aWR0aDtcblxuICAgIC8vIHN0YXJ0XG4gICAgdmVydHMucHVzaChwMXggLSBwZXJweCAsIHAxeSAtIHBlcnB5LFxuICAgICAgICAgICAgICAgIHIsIGcsIGIsIGFscGhhKTtcblxuICAgIHZlcnRzLnB1c2gocDF4ICsgcGVycHggLCBwMXkgKyBwZXJweSxcbiAgICAgICAgICAgICAgICByLCBnLCBiLCBhbHBoYSk7XG5cbiAgICBmb3IgKGkgPSAxOyBpIDwgbGVuZ3RoLTE7IGkrKylcbiAgICB7XG4gICAgICAgIHAxeCA9IHBvaW50c1soaS0xKSoyXTtcbiAgICAgICAgcDF5ID0gcG9pbnRzWyhpLTEpKjIgKyAxXTtcblxuICAgICAgICBwMnggPSBwb2ludHNbKGkpKjJdO1xuICAgICAgICBwMnkgPSBwb2ludHNbKGkpKjIgKyAxXTtcblxuICAgICAgICBwM3ggPSBwb2ludHNbKGkrMSkqMl07XG4gICAgICAgIHAzeSA9IHBvaW50c1soaSsxKSoyICsgMV07XG5cbiAgICAgICAgcGVycHggPSAtKHAxeSAtIHAyeSk7XG4gICAgICAgIHBlcnB5ID0gcDF4IC0gcDJ4O1xuXG4gICAgICAgIGRpc3QgPSBNYXRoLnNxcnQocGVycHgqcGVycHggKyBwZXJweSpwZXJweSk7XG4gICAgICAgIHBlcnB4IC89IGRpc3Q7XG4gICAgICAgIHBlcnB5IC89IGRpc3Q7XG4gICAgICAgIHBlcnB4ICo9IHdpZHRoO1xuICAgICAgICBwZXJweSAqPSB3aWR0aDtcblxuICAgICAgICBwZXJwMnggPSAtKHAyeSAtIHAzeSk7XG4gICAgICAgIHBlcnAyeSA9IHAyeCAtIHAzeDtcblxuICAgICAgICBkaXN0ID0gTWF0aC5zcXJ0KHBlcnAyeCpwZXJwMnggKyBwZXJwMnkqcGVycDJ5KTtcbiAgICAgICAgcGVycDJ4IC89IGRpc3Q7XG4gICAgICAgIHBlcnAyeSAvPSBkaXN0O1xuICAgICAgICBwZXJwMnggKj0gd2lkdGg7XG4gICAgICAgIHBlcnAyeSAqPSB3aWR0aDtcblxuICAgICAgICBhMSA9ICgtcGVycHkgKyBwMXkpIC0gKC1wZXJweSArIHAyeSk7XG4gICAgICAgIGIxID0gKC1wZXJweCArIHAyeCkgLSAoLXBlcnB4ICsgcDF4KTtcbiAgICAgICAgYzEgPSAoLXBlcnB4ICsgcDF4KSAqICgtcGVycHkgKyBwMnkpIC0gKC1wZXJweCArIHAyeCkgKiAoLXBlcnB5ICsgcDF5KTtcbiAgICAgICAgYTIgPSAoLXBlcnAyeSArIHAzeSkgLSAoLXBlcnAyeSArIHAyeSk7XG4gICAgICAgIGIyID0gKC1wZXJwMnggKyBwMngpIC0gKC1wZXJwMnggKyBwM3gpO1xuICAgICAgICBjMiA9ICgtcGVycDJ4ICsgcDN4KSAqICgtcGVycDJ5ICsgcDJ5KSAtICgtcGVycDJ4ICsgcDJ4KSAqICgtcGVycDJ5ICsgcDN5KTtcblxuICAgICAgICBkZW5vbSA9IGExKmIyIC0gYTIqYjE7XG5cbiAgICAgICAgaWYgKE1hdGguYWJzKGRlbm9tKSA8IDAuMSApXG4gICAgICAgIHtcblxuICAgICAgICAgICAgZGVub20rPTEwLjE7XG4gICAgICAgICAgICB2ZXJ0cy5wdXNoKHAyeCAtIHBlcnB4ICwgcDJ5IC0gcGVycHksXG4gICAgICAgICAgICAgICAgciwgZywgYiwgYWxwaGEpO1xuXG4gICAgICAgICAgICB2ZXJ0cy5wdXNoKHAyeCArIHBlcnB4ICwgcDJ5ICsgcGVycHksXG4gICAgICAgICAgICAgICAgciwgZywgYiwgYWxwaGEpO1xuXG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHB4ID0gKGIxKmMyIC0gYjIqYzEpL2Rlbm9tO1xuICAgICAgICBweSA9IChhMipjMSAtIGExKmMyKS9kZW5vbTtcblxuXG4gICAgICAgIHBkaXN0ID0gKHB4IC1wMngpICogKHB4IC1wMngpICsgKHB5IC1wMnkpICogKHB5IC1wMnkpO1xuXG5cbiAgICAgICAgaWYgKHBkaXN0ID4gMTQwICogMTQwKVxuICAgICAgICB7XG4gICAgICAgICAgICBwZXJwM3ggPSBwZXJweCAtIHBlcnAyeDtcbiAgICAgICAgICAgIHBlcnAzeSA9IHBlcnB5IC0gcGVycDJ5O1xuXG4gICAgICAgICAgICBkaXN0ID0gTWF0aC5zcXJ0KHBlcnAzeCpwZXJwM3ggKyBwZXJwM3kqcGVycDN5KTtcbiAgICAgICAgICAgIHBlcnAzeCAvPSBkaXN0O1xuICAgICAgICAgICAgcGVycDN5IC89IGRpc3Q7XG4gICAgICAgICAgICBwZXJwM3ggKj0gd2lkdGg7XG4gICAgICAgICAgICBwZXJwM3kgKj0gd2lkdGg7XG5cbiAgICAgICAgICAgIHZlcnRzLnB1c2gocDJ4IC0gcGVycDN4LCBwMnkgLXBlcnAzeSk7XG4gICAgICAgICAgICB2ZXJ0cy5wdXNoKHIsIGcsIGIsIGFscGhhKTtcblxuICAgICAgICAgICAgdmVydHMucHVzaChwMnggKyBwZXJwM3gsIHAyeSArcGVycDN5KTtcbiAgICAgICAgICAgIHZlcnRzLnB1c2gociwgZywgYiwgYWxwaGEpO1xuXG4gICAgICAgICAgICB2ZXJ0cy5wdXNoKHAyeCAtIHBlcnAzeCwgcDJ5IC1wZXJwM3kpO1xuICAgICAgICAgICAgdmVydHMucHVzaChyLCBnLCBiLCBhbHBoYSk7XG5cbiAgICAgICAgICAgIGluZGV4Q291bnQrKztcbiAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgIHtcblxuICAgICAgICAgICAgdmVydHMucHVzaChweCAsIHB5KTtcbiAgICAgICAgICAgIHZlcnRzLnB1c2gociwgZywgYiwgYWxwaGEpO1xuXG4gICAgICAgICAgICB2ZXJ0cy5wdXNoKHAyeCAtIChweC1wMngpLCBwMnkgLSAocHkgLSBwMnkpKTtcbiAgICAgICAgICAgIHZlcnRzLnB1c2gociwgZywgYiwgYWxwaGEpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcDF4ID0gcG9pbnRzWyhsZW5ndGgtMikqMl07XG4gICAgcDF5ID0gcG9pbnRzWyhsZW5ndGgtMikqMiArIDFdO1xuXG4gICAgcDJ4ID0gcG9pbnRzWyhsZW5ndGgtMSkqMl07XG4gICAgcDJ5ID0gcG9pbnRzWyhsZW5ndGgtMSkqMiArIDFdO1xuXG4gICAgcGVycHggPSAtKHAxeSAtIHAyeSk7XG4gICAgcGVycHkgPSBwMXggLSBwMng7XG5cbiAgICBkaXN0ID0gTWF0aC5zcXJ0KHBlcnB4KnBlcnB4ICsgcGVycHkqcGVycHkpO1xuICAgIHBlcnB4IC89IGRpc3Q7XG4gICAgcGVycHkgLz0gZGlzdDtcbiAgICBwZXJweCAqPSB3aWR0aDtcbiAgICBwZXJweSAqPSB3aWR0aDtcblxuICAgIHZlcnRzLnB1c2gocDJ4IC0gcGVycHggLCBwMnkgLSBwZXJweSk7XG4gICAgdmVydHMucHVzaChyLCBnLCBiLCBhbHBoYSk7XG5cbiAgICB2ZXJ0cy5wdXNoKHAyeCArIHBlcnB4ICwgcDJ5ICsgcGVycHkpO1xuICAgIHZlcnRzLnB1c2gociwgZywgYiwgYWxwaGEpO1xuXG4gICAgaW5kaWNlcy5wdXNoKGluZGV4U3RhcnQpO1xuXG4gICAgZm9yIChpID0gMDsgaSA8IGluZGV4Q291bnQ7IGkrKylcbiAgICB7XG4gICAgICAgIGluZGljZXMucHVzaChpbmRleFN0YXJ0KyspO1xuICAgIH1cblxuICAgIGluZGljZXMucHVzaChpbmRleFN0YXJ0LTEpO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBidWlsZExpbmU7IiwidmFyIHV0aWxzID0gcmVxdWlyZSgnLi4vLi4vdXRpbHMnKTtcblxuLyoqXG4gKiBCdWlsZHMgYSBwb2x5Z29uIHRvIGRyYXdcbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIGdyYXBoaWNzRGF0YSB7UElYSS5XZWJHTEdyYXBoaWNzRGF0YX0gVGhlIGdyYXBoaWNzIG9iamVjdCBjb250YWluaW5nIGFsbCB0aGUgbmVjZXNzYXJ5IHByb3BlcnRpZXNcbiAqIEBwYXJhbSB3ZWJHTERhdGEge29iamVjdH0gYW4gb2JqZWN0IGNvbnRhaW5pbmcgYWxsIHRoZSB3ZWJHTC1zcGVjaWZpYyBpbmZvcm1hdGlvbiB0byBjcmVhdGUgdGhpcyBzaGFwZVxuICovXG52YXIgYnVpbGRQb2x5ID0gZnVuY3Rpb24gKGdyYXBoaWNzRGF0YSwgd2ViR0xEYXRhKVxue1xuICAgIHZhciBwb2ludHMgPSBncmFwaGljc0RhdGEucG9pbnRzO1xuXG4gICAgaWYgKHBvaW50cy5sZW5ndGggPCA2KVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIGdldCBmaXJzdCBhbmQgbGFzdCBwb2ludC4uIGZpZ3VyZSBvdXQgdGhlIG1pZGRsZSFcbiAgICB2YXIgdmVydHMgPSB3ZWJHTERhdGEucG9pbnRzO1xuICAgIHZhciBpbmRpY2VzID0gd2ViR0xEYXRhLmluZGljZXM7XG5cbiAgICB2YXIgbGVuZ3RoID0gcG9pbnRzLmxlbmd0aCAvIDI7XG5cbiAgICAvLyBzb3J0IGNvbG9yXG4gICAgdmFyIGNvbG9yID0gdXRpbHMuaGV4MnJnYihncmFwaGljc0RhdGEuZmlsbENvbG9yKTtcbiAgICB2YXIgYWxwaGEgPSBncmFwaGljc0RhdGEuZmlsbEFscGhhO1xuICAgIHZhciByID0gY29sb3JbMF0gKiBhbHBoYTtcbiAgICB2YXIgZyA9IGNvbG9yWzFdICogYWxwaGE7XG4gICAgdmFyIGIgPSBjb2xvclsyXSAqIGFscGhhO1xuXG4gICAgdmFyIHRyaWFuZ2xlcyA9IGVhcmN1dChwb2ludHMsIG51bGwsIDIpO1xuXG4gICAgaWYgKCF0cmlhbmdsZXMpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHZhciB2ZXJ0UG9zID0gdmVydHMubGVuZ3RoIC8gNjtcblxuICAgIHZhciBpID0gMDtcblxuICAgIGZvciAoaSA9IDA7IGkgPCB0cmlhbmdsZXMubGVuZ3RoOyBpKz0zKVxuICAgIHtcbiAgICAgICAgaW5kaWNlcy5wdXNoKHRyaWFuZ2xlc1tpXSArIHZlcnRQb3MpO1xuICAgICAgICBpbmRpY2VzLnB1c2godHJpYW5nbGVzW2ldICsgdmVydFBvcyk7XG4gICAgICAgIGluZGljZXMucHVzaCh0cmlhbmdsZXNbaSsxXSArIHZlcnRQb3MpO1xuICAgICAgICBpbmRpY2VzLnB1c2godHJpYW5nbGVzW2krMl0gK3ZlcnRQb3MpO1xuICAgICAgICBpbmRpY2VzLnB1c2godHJpYW5nbGVzW2krMl0gKyB2ZXJ0UG9zKTtcbiAgICB9XG5cbiAgICBmb3IgKGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspXG4gICAge1xuICAgICAgICB2ZXJ0cy5wdXNoKHBvaW50c1tpICogMl0sIHBvaW50c1tpICogMiArIDFdLFxuICAgICAgICAgICAgICAgICAgIHIsIGcsIGIsIGFscGhhKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdHJ1ZTtcbn07XG5cblxubW9kdWxlLmV4cG9ydHMgPSBidWlsZFBvbHk7XG4iLCJ2YXIgYnVpbGRMaW5lID0gcmVxdWlyZSgnLi9idWlsZExpbmUnKSxcbiAgICB1dGlscyA9IHJlcXVpcmUoJy4uLy4uL3V0aWxzJyk7XG5cbi8qKlxuICogQnVpbGRzIGEgcmVjdGFuZ2xlIHRvIGRyYXdcbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIGdyYXBoaWNzRGF0YSB7UElYSS5HcmFwaGljc30gVGhlIGdyYXBoaWNzIG9iamVjdCBjb250YWluaW5nIGFsbCB0aGUgbmVjZXNzYXJ5IHByb3BlcnRpZXNcbiAqIEBwYXJhbSB3ZWJHTERhdGEge29iamVjdH0gYW4gb2JqZWN0IGNvbnRhaW5pbmcgYWxsIHRoZSB3ZWJHTC1zcGVjaWZpYyBpbmZvcm1hdGlvbiB0byBjcmVhdGUgdGhpcyBzaGFwZVxuICovXG52YXIgYnVpbGRSZWN0YW5nbGUgPSBmdW5jdGlvbiAoZ3JhcGhpY3NEYXRhLCB3ZWJHTERhdGEpXG57XG4gICAgLy8gLS0tIC8vXG4gICAgLy8gbmVlZCB0byBjb252ZXJ0IHBvaW50cyB0byBhIG5pY2UgcmVndWxhciBkYXRhXG4gICAgLy9cbiAgICB2YXIgcmVjdERhdGEgPSBncmFwaGljc0RhdGEuc2hhcGU7XG4gICAgdmFyIHggPSByZWN0RGF0YS54O1xuICAgIHZhciB5ID0gcmVjdERhdGEueTtcbiAgICB2YXIgd2lkdGggPSByZWN0RGF0YS53aWR0aDtcbiAgICB2YXIgaGVpZ2h0ID0gcmVjdERhdGEuaGVpZ2h0O1xuXG4gICAgaWYgKGdyYXBoaWNzRGF0YS5maWxsKVxuICAgIHtcbiAgICAgICAgdmFyIGNvbG9yID0gdXRpbHMuaGV4MnJnYihncmFwaGljc0RhdGEuZmlsbENvbG9yKTtcbiAgICAgICAgdmFyIGFscGhhID0gZ3JhcGhpY3NEYXRhLmZpbGxBbHBoYTtcblxuICAgICAgICB2YXIgciA9IGNvbG9yWzBdICogYWxwaGE7XG4gICAgICAgIHZhciBnID0gY29sb3JbMV0gKiBhbHBoYTtcbiAgICAgICAgdmFyIGIgPSBjb2xvclsyXSAqIGFscGhhO1xuXG4gICAgICAgIHZhciB2ZXJ0cyA9IHdlYkdMRGF0YS5wb2ludHM7XG4gICAgICAgIHZhciBpbmRpY2VzID0gd2ViR0xEYXRhLmluZGljZXM7XG5cbiAgICAgICAgdmFyIHZlcnRQb3MgPSB2ZXJ0cy5sZW5ndGgvNjtcblxuICAgICAgICAvLyBzdGFydFxuICAgICAgICB2ZXJ0cy5wdXNoKHgsIHkpO1xuICAgICAgICB2ZXJ0cy5wdXNoKHIsIGcsIGIsIGFscGhhKTtcblxuICAgICAgICB2ZXJ0cy5wdXNoKHggKyB3aWR0aCwgeSk7XG4gICAgICAgIHZlcnRzLnB1c2gociwgZywgYiwgYWxwaGEpO1xuXG4gICAgICAgIHZlcnRzLnB1c2goeCAsIHkgKyBoZWlnaHQpO1xuICAgICAgICB2ZXJ0cy5wdXNoKHIsIGcsIGIsIGFscGhhKTtcblxuICAgICAgICB2ZXJ0cy5wdXNoKHggKyB3aWR0aCwgeSArIGhlaWdodCk7XG4gICAgICAgIHZlcnRzLnB1c2gociwgZywgYiwgYWxwaGEpO1xuXG4gICAgICAgIC8vIGluc2VydCAyIGRlYWQgdHJpYW5nbGVzLi5cbiAgICAgICAgaW5kaWNlcy5wdXNoKHZlcnRQb3MsIHZlcnRQb3MsIHZlcnRQb3MrMSwgdmVydFBvcysyLCB2ZXJ0UG9zKzMsIHZlcnRQb3MrMyk7XG4gICAgfVxuXG4gICAgaWYgKGdyYXBoaWNzRGF0YS5saW5lV2lkdGgpXG4gICAge1xuICAgICAgICB2YXIgdGVtcFBvaW50cyA9IGdyYXBoaWNzRGF0YS5wb2ludHM7XG5cbiAgICAgICAgZ3JhcGhpY3NEYXRhLnBvaW50cyA9IFt4LCB5LFxuICAgICAgICAgICAgICAgICAgeCArIHdpZHRoLCB5LFxuICAgICAgICAgICAgICAgICAgeCArIHdpZHRoLCB5ICsgaGVpZ2h0LFxuICAgICAgICAgICAgICAgICAgeCwgeSArIGhlaWdodCxcbiAgICAgICAgICAgICAgICAgIHgsIHldO1xuXG5cbiAgICAgICAgYnVpbGRMaW5lKGdyYXBoaWNzRGF0YSwgd2ViR0xEYXRhKTtcblxuICAgICAgICBncmFwaGljc0RhdGEucG9pbnRzID0gdGVtcFBvaW50cztcbiAgICB9XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGJ1aWxkUmVjdGFuZ2xlOyIsInZhciBidWlsZExpbmUgPSByZXF1aXJlKCcuL2J1aWxkTGluZScpLFxuICAgIHV0aWxzID0gcmVxdWlyZSgnLi4vLi4vdXRpbHMnKTtcbiAgICBcbi8qKlxuICogQnVpbGRzIGEgcm91bmRlZCByZWN0YW5nbGUgdG8gZHJhd1xuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0gZ3JhcGhpY3NEYXRhIHtQSVhJLkdyYXBoaWNzfSBUaGUgZ3JhcGhpY3Mgb2JqZWN0IGNvbnRhaW5pbmcgYWxsIHRoZSBuZWNlc3NhcnkgcHJvcGVydGllc1xuICogQHBhcmFtIHdlYkdMRGF0YSB7b2JqZWN0fSBhbiBvYmplY3QgY29udGFpbmluZyBhbGwgdGhlIHdlYkdMLXNwZWNpZmljIGluZm9ybWF0aW9uIHRvIGNyZWF0ZSB0aGlzIHNoYXBlXG4gKi9cbmJ1aWxkUm91bmRlZFJlY3RhbmdsZSA9IGZ1bmN0aW9uIChncmFwaGljc0RhdGEsIHdlYkdMRGF0YSlcbntcbiAgICB2YXIgcnJlY3REYXRhID0gZ3JhcGhpY3NEYXRhLnNoYXBlO1xuICAgIHZhciB4ID0gcnJlY3REYXRhLng7XG4gICAgdmFyIHkgPSBycmVjdERhdGEueTtcbiAgICB2YXIgd2lkdGggPSBycmVjdERhdGEud2lkdGg7XG4gICAgdmFyIGhlaWdodCA9IHJyZWN0RGF0YS5oZWlnaHQ7XG5cbiAgICB2YXIgcmFkaXVzID0gcnJlY3REYXRhLnJhZGl1cztcblxuICAgIHZhciByZWNQb2ludHMgPSBbXTtcbiAgICByZWNQb2ludHMucHVzaCh4LCB5ICsgcmFkaXVzKTtcbiAgICB0aGlzLnF1YWRyYXRpY0JlemllckN1cnZlKHgsIHkgKyBoZWlnaHQgLSByYWRpdXMsIHgsIHkgKyBoZWlnaHQsIHggKyByYWRpdXMsIHkgKyBoZWlnaHQsIHJlY1BvaW50cyk7XG4gICAgdGhpcy5xdWFkcmF0aWNCZXppZXJDdXJ2ZSh4ICsgd2lkdGggLSByYWRpdXMsIHkgKyBoZWlnaHQsIHggKyB3aWR0aCwgeSArIGhlaWdodCwgeCArIHdpZHRoLCB5ICsgaGVpZ2h0IC0gcmFkaXVzLCByZWNQb2ludHMpO1xuICAgIHRoaXMucXVhZHJhdGljQmV6aWVyQ3VydmUoeCArIHdpZHRoLCB5ICsgcmFkaXVzLCB4ICsgd2lkdGgsIHksIHggKyB3aWR0aCAtIHJhZGl1cywgeSwgcmVjUG9pbnRzKTtcbiAgICB0aGlzLnF1YWRyYXRpY0JlemllckN1cnZlKHggKyByYWRpdXMsIHksIHgsIHksIHgsIHkgKyByYWRpdXMgKyAwLjAwMDAwMDAwMDEsIHJlY1BvaW50cyk7XG5cbiAgICAvLyB0aGlzIHRpbnkgbnVtYmVyIGRlYWxzIHdpdGggdGhlIGlzc3VlIHRoYXQgb2NjdXJzIHdoZW4gcG9pbnRzIG92ZXJsYXAgYW5kIGVhcmN1dCBmYWlscyB0byB0cmlhbmd1bGF0ZSB0aGUgaXRlbS5cbiAgICAvLyBUT0RPIC0gZml4IHRoaXMgcHJvcGVybHksIHRoaXMgaXMgbm90IHZlcnkgZWxlZ2FudC4uIGJ1dCBpdCB3b3JrcyBmb3Igbm93LlxuXG4gICAgaWYgKGdyYXBoaWNzRGF0YS5maWxsKVxuICAgIHtcbiAgICAgICAgdmFyIGNvbG9yID0gdXRpbHMuaGV4MnJnYihncmFwaGljc0RhdGEuZmlsbENvbG9yKTtcbiAgICAgICAgdmFyIGFscGhhID0gZ3JhcGhpY3NEYXRhLmZpbGxBbHBoYTtcblxuICAgICAgICB2YXIgciA9IGNvbG9yWzBdICogYWxwaGE7XG4gICAgICAgIHZhciBnID0gY29sb3JbMV0gKiBhbHBoYTtcbiAgICAgICAgdmFyIGIgPSBjb2xvclsyXSAqIGFscGhhO1xuXG4gICAgICAgIHZhciB2ZXJ0cyA9IHdlYkdMRGF0YS5wb2ludHM7XG4gICAgICAgIHZhciBpbmRpY2VzID0gd2ViR0xEYXRhLmluZGljZXM7XG5cbiAgICAgICAgdmFyIHZlY1BvcyA9IHZlcnRzLmxlbmd0aC82O1xuXG4gICAgICAgIHZhciB0cmlhbmdsZXMgPSBlYXJjdXQocmVjUG9pbnRzLCBudWxsLCAyKTtcblxuICAgICAgICB2YXIgaSA9IDA7XG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCB0cmlhbmdsZXMubGVuZ3RoOyBpKz0zKVxuICAgICAgICB7XG4gICAgICAgICAgICBpbmRpY2VzLnB1c2godHJpYW5nbGVzW2ldICsgdmVjUG9zKTtcbiAgICAgICAgICAgIGluZGljZXMucHVzaCh0cmlhbmdsZXNbaV0gKyB2ZWNQb3MpO1xuICAgICAgICAgICAgaW5kaWNlcy5wdXNoKHRyaWFuZ2xlc1tpKzFdICsgdmVjUG9zKTtcbiAgICAgICAgICAgIGluZGljZXMucHVzaCh0cmlhbmdsZXNbaSsyXSArIHZlY1Bvcyk7XG4gICAgICAgICAgICBpbmRpY2VzLnB1c2godHJpYW5nbGVzW2krMl0gKyB2ZWNQb3MpO1xuICAgICAgICB9XG5cbiAgICAgICAgZm9yIChpID0gMDsgaSA8IHJlY1BvaW50cy5sZW5ndGg7IGkrKylcbiAgICAgICAge1xuICAgICAgICAgICAgdmVydHMucHVzaChyZWNQb2ludHNbaV0sIHJlY1BvaW50c1srK2ldLCByLCBnLCBiLCBhbHBoYSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoZ3JhcGhpY3NEYXRhLmxpbmVXaWR0aClcbiAgICB7XG4gICAgICAgIHZhciB0ZW1wUG9pbnRzID0gZ3JhcGhpY3NEYXRhLnBvaW50cztcblxuICAgICAgICBncmFwaGljc0RhdGEucG9pbnRzID0gcmVjUG9pbnRzO1xuXG4gICAgICAgIHRoaXMuYnVpbGRMaW5lKGdyYXBoaWNzRGF0YSwgd2ViR0xEYXRhKTtcblxuICAgICAgICBncmFwaGljc0RhdGEucG9pbnRzID0gdGVtcFBvaW50cztcbiAgICB9XG59O1xuXG4vKipcbiAqIENhbGN1bGF0ZSB0aGUgcG9pbnRzIGZvciBhIHF1YWRyYXRpYyBiZXppZXIgY3VydmUuIChoZWxwZXIgZnVuY3Rpb24uLilcbiAqIEJhc2VkIG9uOiBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy83ODUwOTcvaG93LWRvLWktaW1wbGVtZW50LWEtYmV6aWVyLWN1cnZlLWluLWNcbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIGZyb21YIHtudW1iZXJ9IE9yaWdpbiBwb2ludCB4XG4gKiBAcGFyYW0gZnJvbVkge251bWJlcn0gT3JpZ2luIHBvaW50IHhcbiAqIEBwYXJhbSBjcFgge251bWJlcn0gQ29udHJvbCBwb2ludCB4XG4gKiBAcGFyYW0gY3BZIHtudW1iZXJ9IENvbnRyb2wgcG9pbnQgeVxuICogQHBhcmFtIHRvWCB7bnVtYmVyfSBEZXN0aW5hdGlvbiBwb2ludCB4XG4gKiBAcGFyYW0gdG9ZIHtudW1iZXJ9IERlc3RpbmF0aW9uIHBvaW50IHlcbiAqIEBwYXJhbSBbb3V0XSB7bnVtYmVyW119IFRoZSBvdXRwdXQgYXJyYXkgdG8gYWRkIHBvaW50cyBpbnRvLiBJZiBub3QgcGFzc2VkLCBhIG5ldyBhcnJheSBpcyBjcmVhdGVkLlxuICogQHJldHVybiB7bnVtYmVyW119IGFuIGFycmF5IG9mIHBvaW50c1xuICovXG5xdWFkcmF0aWNCZXppZXJDdXJ2ZSA9IGZ1bmN0aW9uIChmcm9tWCwgZnJvbVksIGNwWCwgY3BZLCB0b1gsIHRvWSwgb3V0KVxue1xuICAgIHZhciB4YSxcbiAgICAgICAgeWEsXG4gICAgICAgIHhiLFxuICAgICAgICB5YixcbiAgICAgICAgeCxcbiAgICAgICAgeSxcbiAgICAgICAgbiA9IDIwLFxuICAgICAgICBwb2ludHMgPSBvdXQgfHwgW107XG5cbiAgICBmdW5jdGlvbiBnZXRQdChuMSAsIG4yLCBwZXJjKSB7XG4gICAgICAgIHZhciBkaWZmID0gbjIgLSBuMTtcblxuICAgICAgICByZXR1cm4gbjEgKyAoIGRpZmYgKiBwZXJjICk7XG4gICAgfVxuXG4gICAgdmFyIGogPSAwO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDw9IG47IGkrKyApIHtcbiAgICAgICAgaiA9IGkgLyBuO1xuXG4gICAgICAgIC8vIFRoZSBHcmVlbiBMaW5lXG4gICAgICAgIHhhID0gZ2V0UHQoIGZyb21YICwgY3BYICwgaiApO1xuICAgICAgICB5YSA9IGdldFB0KCBmcm9tWSAsIGNwWSAsIGogKTtcbiAgICAgICAgeGIgPSBnZXRQdCggY3BYICwgdG9YICwgaiApO1xuICAgICAgICB5YiA9IGdldFB0KCBjcFkgLCB0b1kgLCBqICk7XG5cbiAgICAgICAgLy8gVGhlIEJsYWNrIERvdFxuICAgICAgICB4ID0gZ2V0UHQoIHhhICwgeGIgLCBqICk7XG4gICAgICAgIHkgPSBnZXRQdCggeWEgLCB5YiAsIGogKTtcblxuICAgICAgICBwb2ludHMucHVzaCh4LCB5KTtcbiAgICB9XG5cbiAgICByZXR1cm4gcG9pbnRzO1xufTtcblxuXG5tb2R1bGUuZXhwb3J0cyA9IGJ1aWxkUm91bmRlZFJlY3RhbmdsZTsiLCIvKipcbiAqIEBmaWxlICAgICAgICBNYWluIGV4cG9ydCBvZiB0aGUgUElYSSBjb3JlIGxpYnJhcnlcbiAqIEBhdXRob3IgICAgICBNYXQgR3JvdmVzIDxtYXRAZ29vZGJveWRpZ2l0YWwuY29tPlxuICogQGNvcHlyaWdodCAgIDIwMTMtMjAxNSBHb29kQm95RGlnaXRhbFxuICogQGxpY2Vuc2UgICAgIHtAbGluayBodHRwczovL2dpdGh1Yi5jb20vcGl4aWpzL3BpeGkuanMvYmxvYi9tYXN0ZXIvTElDRU5TRXxNSVQgTGljZW5zZX1cbiAqL1xuXG4vKipcbiAqIEBuYW1lc3BhY2UgUElYSVxuICovXG4vLyBleHBvcnQgY29yZSBhbmQgY29uc3QuIFdlIGFzc2lnbiBjb3JlIHRvIGNvbnN0IHNvIHRoYXQgdGhlIG5vbi1yZWZlcmVuY2UgdHlwZXMgaW4gY29uc3QgcmVtYWluIGluLXRhY3RcbnZhciBjb3JlID0gbW9kdWxlLmV4cG9ydHMgPSBPYmplY3QuYXNzaWduKHJlcXVpcmUoJy4vY29uc3QnKSwgcmVxdWlyZSgnLi9tYXRoJyksIHtcbiAgICAvLyB1dGlsc1xuICAgIHV0aWxzOiByZXF1aXJlKCcuL3V0aWxzJyksXG4gICAgdGlja2VyOiByZXF1aXJlKCcuL3RpY2tlcicpLFxuXG4gICAgLy8gZGlzcGxheVxuICAgIERpc3BsYXlPYmplY3Q6ICAgICAgICAgIHJlcXVpcmUoJy4vZGlzcGxheS9EaXNwbGF5T2JqZWN0JyksXG4gICAgQ29udGFpbmVyOiAgICAgICAgICAgICAgcmVxdWlyZSgnLi9kaXNwbGF5L0NvbnRhaW5lcicpLFxuXG4gICAgLy8gc3ByaXRlc1xuICAgIFNwcml0ZTogICAgICAgICAgICAgICAgIHJlcXVpcmUoJy4vc3ByaXRlcy9TcHJpdGUnKSxcbiAgICBQYXJ0aWNsZUNvbnRhaW5lcjogICAgICByZXF1aXJlKCcuL3BhcnRpY2xlcy9QYXJ0aWNsZUNvbnRhaW5lcicpLFxuICAgIFNwcml0ZVJlbmRlcmVyOiAgICAgICAgIHJlcXVpcmUoJy4vc3ByaXRlcy93ZWJnbC9TcHJpdGVSZW5kZXJlcicpLFxuICAgIFBhcnRpY2xlUmVuZGVyZXI6ICAgICAgIHJlcXVpcmUoJy4vcGFydGljbGVzL3dlYmdsL1BhcnRpY2xlUmVuZGVyZXInKSxcblxuICAgIC8vIHRleHRcbiAgICBUZXh0OiAgICAgICAgICAgICAgICAgICByZXF1aXJlKCcuL3RleHQvVGV4dCcpLFxuXG4gICAgLy8gcHJpbWl0aXZlc1xuICAgIEdyYXBoaWNzOiAgICAgICAgICAgICAgIHJlcXVpcmUoJy4vZ3JhcGhpY3MvR3JhcGhpY3MnKSxcbiAgICBHcmFwaGljc0RhdGE6ICAgICAgICAgICByZXF1aXJlKCcuL2dyYXBoaWNzL0dyYXBoaWNzRGF0YScpLFxuICAgIEdyYXBoaWNzUmVuZGVyZXI6ICAgICAgIHJlcXVpcmUoJy4vZ3JhcGhpY3Mvd2ViZ2wvR3JhcGhpY3NSZW5kZXJlcicpLFxuXG4gICAgLy8gdGV4dHVyZXNcbiAgICBUZXh0dXJlOiAgICAgICAgICAgICAgICByZXF1aXJlKCcuL3RleHR1cmVzL1RleHR1cmUnKSxcbiAgICBCYXNlVGV4dHVyZTogICAgICAgICAgICByZXF1aXJlKCcuL3RleHR1cmVzL0Jhc2VUZXh0dXJlJyksXG4gICAgUmVuZGVyVGV4dHVyZTogICAgICAgICAgcmVxdWlyZSgnLi90ZXh0dXJlcy9SZW5kZXJUZXh0dXJlJyksXG4gICAgVmlkZW9CYXNlVGV4dHVyZTogICAgICAgcmVxdWlyZSgnLi90ZXh0dXJlcy9WaWRlb0Jhc2VUZXh0dXJlJyksXG4gICAgVGV4dHVyZVV2czogICAgICAgICAgICAgcmVxdWlyZSgnLi90ZXh0dXJlcy9UZXh0dXJlVXZzJyksXG5cbiAgICAvLyByZW5kZXJlcnMgLSBjYW52YXNcbiAgICBDYW52YXNSZW5kZXJlcjogICAgICAgICByZXF1aXJlKCcuL3JlbmRlcmVycy9jYW52YXMvQ2FudmFzUmVuZGVyZXInKSxcbiAgICBDYW52YXNHcmFwaGljczogICAgICAgICByZXF1aXJlKCcuL3JlbmRlcmVycy9jYW52YXMvdXRpbHMvQ2FudmFzR3JhcGhpY3MnKSxcbiAgICBDYW52YXNCdWZmZXI6ICAgICAgICAgICByZXF1aXJlKCcuL3JlbmRlcmVycy9jYW52YXMvdXRpbHMvQ2FudmFzQnVmZmVyJyksXG5cbiAgICAvLyByZW5kZXJlcnMgLSB3ZWJnbFxuICAgIFdlYkdMUmVuZGVyZXI6ICAgICAgICAgIHJlcXVpcmUoJy4vcmVuZGVyZXJzL3dlYmdsL1dlYkdMUmVuZGVyZXInKSxcbiAgICBXZWJHTE1hbmFnZXI6ICAgICAgICAgIHJlcXVpcmUoJy4vcmVuZGVyZXJzL3dlYmdsL21hbmFnZXJzL1dlYkdMTWFuYWdlcicpLFxuICAgIFNoYWRlck1hbmFnZXI6ICAgICAgICAgIHJlcXVpcmUoJy4vcmVuZGVyZXJzL3dlYmdsL21hbmFnZXJzL1NoYWRlck1hbmFnZXInKSxcbiAgICBTaGFkZXI6ICAgICAgICAgICAgICAgICByZXF1aXJlKCcuL3JlbmRlcmVycy93ZWJnbC9zaGFkZXJzL1NoYWRlcicpLFxuICAgIE9iamVjdFJlbmRlcmVyOiAgICAgICAgIHJlcXVpcmUoJy4vcmVuZGVyZXJzL3dlYmdsL3V0aWxzL09iamVjdFJlbmRlcmVyJyksXG4gICAgUmVuZGVyVGFyZ2V0OiAgICAgICAgICAgcmVxdWlyZSgnLi9yZW5kZXJlcnMvd2ViZ2wvdXRpbHMvUmVuZGVyVGFyZ2V0JyksXG5cbiAgICAvLyBmaWx0ZXJzIC0gd2ViZ2xcbiAgICBBYnN0cmFjdEZpbHRlcjogICAgICAgICByZXF1aXJlKCcuL3JlbmRlcmVycy93ZWJnbC9maWx0ZXJzL0Fic3RyYWN0RmlsdGVyJyksXG4gICAgRlhBQUZpbHRlcjogICAgICAgICAgICAgcmVxdWlyZSgnLi9yZW5kZXJlcnMvd2ViZ2wvZmlsdGVycy9GWEFBRmlsdGVyJyksXG4gICAgU3ByaXRlTWFza0ZpbHRlcjogICAgICAgcmVxdWlyZSgnLi9yZW5kZXJlcnMvd2ViZ2wvZmlsdGVycy9TcHJpdGVNYXNrRmlsdGVyJyksXG5cbiAgICBnbENvcmU6ICAgICAgICAgICAgICAgICAgIHJlcXVpcmUoJ3BpeGktZ2wtY29yZScpLFxuXG4gICAgLyoqXG4gICAgICogVGhpcyBoZWxwZXIgZnVuY3Rpb24gd2lsbCBhdXRvbWF0aWNhbGx5IGRldGVjdCB3aGljaCByZW5kZXJlciB5b3Ugc2hvdWxkIGJlIHVzaW5nLlxuICAgICAqIFdlYkdMIGlzIHRoZSBwcmVmZXJyZWQgcmVuZGVyZXIgYXMgaXQgaXMgYSBsb3QgZmFzdGVyLiBJZiB3ZWJHTCBpcyBub3Qgc3VwcG9ydGVkIGJ5XG4gICAgICogdGhlIGJyb3dzZXIgdGhlbiB0aGlzIGZ1bmN0aW9uIHdpbGwgcmV0dXJuIGEgY2FudmFzIHJlbmRlcmVyXG4gICAgICpcbiAgICAgKiBAbWVtYmVyb2YgUElYSVxuICAgICAqIEBwYXJhbSB3aWR0aD04MDAge251bWJlcn0gdGhlIHdpZHRoIG9mIHRoZSByZW5kZXJlcnMgdmlld1xuICAgICAqIEBwYXJhbSBoZWlnaHQ9NjAwIHtudW1iZXJ9IHRoZSBoZWlnaHQgb2YgdGhlIHJlbmRlcmVycyB2aWV3XG4gICAgICogQHBhcmFtIFtvcHRpb25zXSB7b2JqZWN0fSBUaGUgb3B0aW9uYWwgcmVuZGVyZXIgcGFyYW1ldGVyc1xuICAgICAqIEBwYXJhbSBbb3B0aW9ucy52aWV3XSB7SFRNTENhbnZhc0VsZW1lbnR9IHRoZSBjYW52YXMgdG8gdXNlIGFzIGEgdmlldywgb3B0aW9uYWxcbiAgICAgKiBAcGFyYW0gW29wdGlvbnMudHJhbnNwYXJlbnQ9ZmFsc2VdIHtib29sZWFufSBJZiB0aGUgcmVuZGVyIHZpZXcgaXMgdHJhbnNwYXJlbnQsIGRlZmF1bHQgZmFsc2VcbiAgICAgKiBAcGFyYW0gW29wdGlvbnMuYW50aWFsaWFzPWZhbHNlXSB7Ym9vbGVhbn0gc2V0cyBhbnRpYWxpYXMgKG9ubHkgYXBwbGljYWJsZSBpbiBjaHJvbWUgYXQgdGhlIG1vbWVudClcbiAgICAgKiBAcGFyYW0gW29wdGlvbnMucHJlc2VydmVEcmF3aW5nQnVmZmVyPWZhbHNlXSB7Ym9vbGVhbn0gZW5hYmxlcyBkcmF3aW5nIGJ1ZmZlciBwcmVzZXJ2YXRpb24sIGVuYWJsZSB0aGlzIGlmIHlvdVxuICAgICAqICAgICAgbmVlZCB0byBjYWxsIHRvRGF0YVVybCBvbiB0aGUgd2ViZ2wgY29udGV4dFxuICAgICAqIEBwYXJhbSBbb3B0aW9ucy5yZXNvbHV0aW9uPTFdIHtudW1iZXJ9IHRoZSByZXNvbHV0aW9uIG9mIHRoZSByZW5kZXJlciwgcmV0aW5hIHdvdWxkIGJlIDJcbiAgICAgKiBAcGFyYW0gW25vV2ViR0w9ZmFsc2VdIHtib29sZWFufSBwcmV2ZW50cyBzZWxlY3Rpb24gb2YgV2ViR0wgcmVuZGVyZXIsIGV2ZW4gaWYgc3VjaCBpcyBwcmVzZW50XG4gICAgICpcbiAgICAgKiBAcmV0dXJuIHtXZWJHTFJlbmRlcmVyfENhbnZhc1JlbmRlcmVyfSBSZXR1cm5zIFdlYkdMIHJlbmRlcmVyIGlmIGF2YWlsYWJsZSwgb3RoZXJ3aXNlIENhbnZhc1JlbmRlcmVyXG4gICAgICovXG4gICAgYXV0b0RldGVjdFJlbmRlcmVyOiBmdW5jdGlvbiAod2lkdGgsIGhlaWdodCwgb3B0aW9ucywgbm9XZWJHTClcbiAgICB7XG4gICAgICAgIHdpZHRoID0gd2lkdGggfHwgODAwO1xuICAgICAgICBoZWlnaHQgPSBoZWlnaHQgfHwgNjAwO1xuXG4gICAgICAgIGlmICghbm9XZWJHTCAmJiBjb3JlLnV0aWxzLmlzV2ViR0xTdXBwb3J0ZWQoKSlcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBjb3JlLldlYkdMUmVuZGVyZXIod2lkdGgsIGhlaWdodCwgb3B0aW9ucyk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbmV3IGNvcmUuQ2FudmFzUmVuZGVyZXIod2lkdGgsIGhlaWdodCwgb3B0aW9ucyk7XG4gICAgfVxufSk7XG4iLCIvLyBAdG9kbyAtIGlnbm9yZSB0aGUgdG9vIG1hbnkgcGFyYW1ldGVycyB3YXJuaW5nIGZvciBub3dcbi8vIHNob3VsZCBlaXRoZXIgZml4IGl0IG9yIGNoYW5nZSB0aGUganNoaW50IGNvbmZpZ1xuLy8ganNoaW50IC1XMDcyXG5cbnZhciBQb2ludCA9IHJlcXVpcmUoJy4vUG9pbnQnKTtcblxuLyoqXG4gKiBUaGUgcGl4aSBNYXRyaXggY2xhc3MgYXMgYW4gb2JqZWN0LCB3aGljaCBtYWtlcyBpdCBhIGxvdCBmYXN0ZXIsXG4gKiBoZXJlIGlzIGEgcmVwcmVzZW50YXRpb24gb2YgaXQgOlxuICogfCBhIHwgYiB8IHR4fFxuICogfCBjIHwgZCB8IHR5fFxuICogfCAwIHwgMCB8IDEgfFxuICpcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqL1xuZnVuY3Rpb24gTWF0cml4KClcbntcbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMVxuICAgICAqL1xuICAgIHRoaXMuYSA9IDE7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMFxuICAgICAqL1xuICAgIHRoaXMuYiA9IDA7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMFxuICAgICAqL1xuICAgIHRoaXMuYyA9IDA7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMVxuICAgICAqL1xuICAgIHRoaXMuZCA9IDE7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMFxuICAgICAqL1xuICAgIHRoaXMudHggPSAwO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDBcbiAgICAgKi9cbiAgICB0aGlzLnR5ID0gMDtcbn1cblxuTWF0cml4LnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IE1hdHJpeDtcbm1vZHVsZS5leHBvcnRzID0gTWF0cml4O1xuXG4vKipcbiAqIENyZWF0ZXMgYSBNYXRyaXggb2JqZWN0IGJhc2VkIG9uIHRoZSBnaXZlbiBhcnJheS4gVGhlIEVsZW1lbnQgdG8gTWF0cml4IG1hcHBpbmcgb3JkZXIgaXMgYXMgZm9sbG93czpcbiAqXG4gKiBhID0gYXJyYXlbMF1cbiAqIGIgPSBhcnJheVsxXVxuICogYyA9IGFycmF5WzNdXG4gKiBkID0gYXJyYXlbNF1cbiAqIHR4ID0gYXJyYXlbMl1cbiAqIHR5ID0gYXJyYXlbNV1cbiAqXG4gKiBAcGFyYW0gYXJyYXkge251bWJlcltdfSBUaGUgYXJyYXkgdGhhdCB0aGUgbWF0cml4IHdpbGwgYmUgcG9wdWxhdGVkIGZyb20uXG4gKi9cbk1hdHJpeC5wcm90b3R5cGUuZnJvbUFycmF5ID0gZnVuY3Rpb24gKGFycmF5KVxue1xuICAgIHRoaXMuYSA9IGFycmF5WzBdO1xuICAgIHRoaXMuYiA9IGFycmF5WzFdO1xuICAgIHRoaXMuYyA9IGFycmF5WzNdO1xuICAgIHRoaXMuZCA9IGFycmF5WzRdO1xuICAgIHRoaXMudHggPSBhcnJheVsyXTtcbiAgICB0aGlzLnR5ID0gYXJyYXlbNV07XG59O1xuXG5cbi8qKlxuICogc2V0cyB0aGUgbWF0cml4IHByb3BlcnRpZXNcbiAqXG4gKiBAcGFyYW0ge251bWJlcn0gYVxuICogQHBhcmFtIHtudW1iZXJ9IGJcbiAqIEBwYXJhbSB7bnVtYmVyfSBjXG4gKiBAcGFyYW0ge251bWJlcn0gZFxuICogQHBhcmFtIHtudW1iZXJ9IHR4XG4gKiBAcGFyYW0ge251bWJlcn0gdHlcbiAqXG4gKiBAcmV0dXJuIHtQSVhJLk1hdHJpeH0gVGhpcyBtYXRyaXguIEdvb2QgZm9yIGNoYWluaW5nIG1ldGhvZCBjYWxscy5cbiAqL1xuTWF0cml4LnByb3RvdHlwZS5zZXQgPSBmdW5jdGlvbiAoYSwgYiwgYywgZCwgdHgsIHR5KVxue1xuICAgIHRoaXMuYSA9IGE7XG4gICAgdGhpcy5iID0gYjtcbiAgICB0aGlzLmMgPSBjO1xuICAgIHRoaXMuZCA9IGQ7XG4gICAgdGhpcy50eCA9IHR4O1xuICAgIHRoaXMudHkgPSB0eTtcblxuICAgIHJldHVybiB0aGlzO1xufTtcblxuXG4vKipcbiAqIENyZWF0ZXMgYW4gYXJyYXkgZnJvbSB0aGUgY3VycmVudCBNYXRyaXggb2JqZWN0LlxuICpcbiAqIEBwYXJhbSB0cmFuc3Bvc2Uge2Jvb2xlYW59IFdoZXRoZXIgd2UgbmVlZCB0byB0cmFuc3Bvc2UgdGhlIG1hdHJpeCBvciBub3RcbiAqIEBwYXJhbSBbb3V0XSB7QXJyYXl9IElmIHByb3ZpZGVkIHRoZSBhcnJheSB3aWxsIGJlIGFzc2lnbmVkIHRvIG91dFxuICogQHJldHVybiB7bnVtYmVyW119IHRoZSBuZXdseSBjcmVhdGVkIGFycmF5IHdoaWNoIGNvbnRhaW5zIHRoZSBtYXRyaXhcbiAqL1xuTWF0cml4LnByb3RvdHlwZS50b0FycmF5ID0gZnVuY3Rpb24gKHRyYW5zcG9zZSwgb3V0KVxue1xuICAgIGlmICghdGhpcy5hcnJheSlcbiAgICB7XG4gICAgICAgIHRoaXMuYXJyYXkgPSBuZXcgRmxvYXQzMkFycmF5KDkpO1xuICAgIH1cblxuICAgIHZhciBhcnJheSA9IG91dCB8fCB0aGlzLmFycmF5O1xuXG4gICAgaWYgKHRyYW5zcG9zZSlcbiAgICB7XG4gICAgICAgIGFycmF5WzBdID0gdGhpcy5hO1xuICAgICAgICBhcnJheVsxXSA9IHRoaXMuYjtcbiAgICAgICAgYXJyYXlbMl0gPSAwO1xuICAgICAgICBhcnJheVszXSA9IHRoaXMuYztcbiAgICAgICAgYXJyYXlbNF0gPSB0aGlzLmQ7XG4gICAgICAgIGFycmF5WzVdID0gMDtcbiAgICAgICAgYXJyYXlbNl0gPSB0aGlzLnR4O1xuICAgICAgICBhcnJheVs3XSA9IHRoaXMudHk7XG4gICAgICAgIGFycmF5WzhdID0gMTtcbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgYXJyYXlbMF0gPSB0aGlzLmE7XG4gICAgICAgIGFycmF5WzFdID0gdGhpcy5jO1xuICAgICAgICBhcnJheVsyXSA9IHRoaXMudHg7XG4gICAgICAgIGFycmF5WzNdID0gdGhpcy5iO1xuICAgICAgICBhcnJheVs0XSA9IHRoaXMuZDtcbiAgICAgICAgYXJyYXlbNV0gPSB0aGlzLnR5O1xuICAgICAgICBhcnJheVs2XSA9IDA7XG4gICAgICAgIGFycmF5WzddID0gMDtcbiAgICAgICAgYXJyYXlbOF0gPSAxO1xuICAgIH1cblxuICAgIHJldHVybiBhcnJheTtcbn07XG5cbi8qKlxuICogR2V0IGEgbmV3IHBvc2l0aW9uIHdpdGggdGhlIGN1cnJlbnQgdHJhbnNmb3JtYXRpb24gYXBwbGllZC5cbiAqIENhbiBiZSB1c2VkIHRvIGdvIGZyb20gYSBjaGlsZCdzIGNvb3JkaW5hdGUgc3BhY2UgdG8gdGhlIHdvcmxkIGNvb3JkaW5hdGUgc3BhY2UuIChlLmcuIHJlbmRlcmluZylcbiAqXG4gKiBAcGFyYW0gcG9zIHtQSVhJLlBvaW50fSBUaGUgb3JpZ2luXG4gKiBAcGFyYW0gW25ld1Bvc10ge1BJWEkuUG9pbnR9IFRoZSBwb2ludCB0aGF0IHRoZSBuZXcgcG9zaXRpb24gaXMgYXNzaWduZWQgdG8gKGFsbG93ZWQgdG8gYmUgc2FtZSBhcyBpbnB1dClcbiAqIEByZXR1cm4ge1BJWEkuUG9pbnR9IFRoZSBuZXcgcG9pbnQsIHRyYW5zZm9ybWVkIHRocm91Z2ggdGhpcyBtYXRyaXhcbiAqL1xuTWF0cml4LnByb3RvdHlwZS5hcHBseSA9IGZ1bmN0aW9uIChwb3MsIG5ld1BvcylcbntcbiAgICBuZXdQb3MgPSBuZXdQb3MgfHwgbmV3IFBvaW50KCk7XG5cbiAgICB2YXIgeCA9IHBvcy54O1xuICAgIHZhciB5ID0gcG9zLnk7XG5cbiAgICBuZXdQb3MueCA9IHRoaXMuYSAqIHggKyB0aGlzLmMgKiB5ICsgdGhpcy50eDtcbiAgICBuZXdQb3MueSA9IHRoaXMuYiAqIHggKyB0aGlzLmQgKiB5ICsgdGhpcy50eTtcblxuICAgIHJldHVybiBuZXdQb3M7XG59O1xuXG4vKipcbiAqIEdldCBhIG5ldyBwb3NpdGlvbiB3aXRoIHRoZSBpbnZlcnNlIG9mIHRoZSBjdXJyZW50IHRyYW5zZm9ybWF0aW9uIGFwcGxpZWQuXG4gKiBDYW4gYmUgdXNlZCB0byBnbyBmcm9tIHRoZSB3b3JsZCBjb29yZGluYXRlIHNwYWNlIHRvIGEgY2hpbGQncyBjb29yZGluYXRlIHNwYWNlLiAoZS5nLiBpbnB1dClcbiAqXG4gKiBAcGFyYW0gcG9zIHtQSVhJLlBvaW50fSBUaGUgb3JpZ2luXG4gKiBAcGFyYW0gW25ld1Bvc10ge1BJWEkuUG9pbnR9IFRoZSBwb2ludCB0aGF0IHRoZSBuZXcgcG9zaXRpb24gaXMgYXNzaWduZWQgdG8gKGFsbG93ZWQgdG8gYmUgc2FtZSBhcyBpbnB1dClcbiAqIEByZXR1cm4ge1BJWEkuUG9pbnR9IFRoZSBuZXcgcG9pbnQsIGludmVyc2UtdHJhbnNmb3JtZWQgdGhyb3VnaCB0aGlzIG1hdHJpeFxuICovXG5NYXRyaXgucHJvdG90eXBlLmFwcGx5SW52ZXJzZSA9IGZ1bmN0aW9uIChwb3MsIG5ld1BvcylcbntcbiAgICBuZXdQb3MgPSBuZXdQb3MgfHwgbmV3IFBvaW50KCk7XG5cbiAgICB2YXIgaWQgPSAxIC8gKHRoaXMuYSAqIHRoaXMuZCArIHRoaXMuYyAqIC10aGlzLmIpO1xuXG4gICAgdmFyIHggPSBwb3MueDtcbiAgICB2YXIgeSA9IHBvcy55O1xuXG4gICAgbmV3UG9zLnggPSB0aGlzLmQgKiBpZCAqIHggKyAtdGhpcy5jICogaWQgKiB5ICsgKHRoaXMudHkgKiB0aGlzLmMgLSB0aGlzLnR4ICogdGhpcy5kKSAqIGlkO1xuICAgIG5ld1Bvcy55ID0gdGhpcy5hICogaWQgKiB5ICsgLXRoaXMuYiAqIGlkICogeCArICgtdGhpcy50eSAqIHRoaXMuYSArIHRoaXMudHggKiB0aGlzLmIpICogaWQ7XG5cbiAgICByZXR1cm4gbmV3UG9zO1xufTtcblxuLyoqXG4gKiBUcmFuc2xhdGVzIHRoZSBtYXRyaXggb24gdGhlIHggYW5kIHkuXG4gKlxuICogQHBhcmFtIHtudW1iZXJ9IHhcbiAqIEBwYXJhbSB7bnVtYmVyfSB5XG4gKiBAcmV0dXJuIHtQSVhJLk1hdHJpeH0gVGhpcyBtYXRyaXguIEdvb2QgZm9yIGNoYWluaW5nIG1ldGhvZCBjYWxscy5cbiAqL1xuTWF0cml4LnByb3RvdHlwZS50cmFuc2xhdGUgPSBmdW5jdGlvbiAoeCwgeSlcbntcbiAgICB0aGlzLnR4ICs9IHg7XG4gICAgdGhpcy50eSArPSB5O1xuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIEFwcGxpZXMgYSBzY2FsZSB0cmFuc2Zvcm1hdGlvbiB0byB0aGUgbWF0cml4LlxuICpcbiAqIEBwYXJhbSB7bnVtYmVyfSB4IFRoZSBhbW91bnQgdG8gc2NhbGUgaG9yaXpvbnRhbGx5XG4gKiBAcGFyYW0ge251bWJlcn0geSBUaGUgYW1vdW50IHRvIHNjYWxlIHZlcnRpY2FsbHlcbiAqIEByZXR1cm4ge1BJWEkuTWF0cml4fSBUaGlzIG1hdHJpeC4gR29vZCBmb3IgY2hhaW5pbmcgbWV0aG9kIGNhbGxzLlxuICovXG5NYXRyaXgucHJvdG90eXBlLnNjYWxlID0gZnVuY3Rpb24gKHgsIHkpXG57XG4gICAgdGhpcy5hICo9IHg7XG4gICAgdGhpcy5kICo9IHk7XG4gICAgdGhpcy5jICo9IHg7XG4gICAgdGhpcy5iICo9IHk7XG4gICAgdGhpcy50eCAqPSB4O1xuICAgIHRoaXMudHkgKj0geTtcblxuICAgIHJldHVybiB0aGlzO1xufTtcblxuXG4vKipcbiAqIEFwcGxpZXMgYSByb3RhdGlvbiB0cmFuc2Zvcm1hdGlvbiB0byB0aGUgbWF0cml4LlxuICpcbiAqIEBwYXJhbSB7bnVtYmVyfSBhbmdsZSAtIFRoZSBhbmdsZSBpbiByYWRpYW5zLlxuICogQHJldHVybiB7UElYSS5NYXRyaXh9IFRoaXMgbWF0cml4LiBHb29kIGZvciBjaGFpbmluZyBtZXRob2QgY2FsbHMuXG4gKi9cbk1hdHJpeC5wcm90b3R5cGUucm90YXRlID0gZnVuY3Rpb24gKGFuZ2xlKVxue1xuICAgIHZhciBjb3MgPSBNYXRoLmNvcyggYW5nbGUgKTtcbiAgICB2YXIgc2luID0gTWF0aC5zaW4oIGFuZ2xlICk7XG5cbiAgICB2YXIgYTEgPSB0aGlzLmE7XG4gICAgdmFyIGMxID0gdGhpcy5jO1xuICAgIHZhciB0eDEgPSB0aGlzLnR4O1xuXG4gICAgdGhpcy5hID0gYTEgKiBjb3MtdGhpcy5iICogc2luO1xuICAgIHRoaXMuYiA9IGExICogc2luK3RoaXMuYiAqIGNvcztcbiAgICB0aGlzLmMgPSBjMSAqIGNvcy10aGlzLmQgKiBzaW47XG4gICAgdGhpcy5kID0gYzEgKiBzaW4rdGhpcy5kICogY29zO1xuICAgIHRoaXMudHggPSB0eDEgKiBjb3MgLSB0aGlzLnR5ICogc2luO1xuICAgIHRoaXMudHkgPSB0eDEgKiBzaW4gKyB0aGlzLnR5ICogY29zO1xuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIEFwcGVuZHMgdGhlIGdpdmVuIE1hdHJpeCB0byB0aGlzIE1hdHJpeC5cbiAqXG4gKiBAcGFyYW0ge1BJWEkuTWF0cml4fSBtYXRyaXhcbiAqIEByZXR1cm4ge1BJWEkuTWF0cml4fSBUaGlzIG1hdHJpeC4gR29vZCBmb3IgY2hhaW5pbmcgbWV0aG9kIGNhbGxzLlxuICovXG5NYXRyaXgucHJvdG90eXBlLmFwcGVuZCA9IGZ1bmN0aW9uIChtYXRyaXgpXG57XG4gICAgdmFyIGExID0gdGhpcy5hO1xuICAgIHZhciBiMSA9IHRoaXMuYjtcbiAgICB2YXIgYzEgPSB0aGlzLmM7XG4gICAgdmFyIGQxID0gdGhpcy5kO1xuXG4gICAgdGhpcy5hICA9IG1hdHJpeC5hICogYTEgKyBtYXRyaXguYiAqIGMxO1xuICAgIHRoaXMuYiAgPSBtYXRyaXguYSAqIGIxICsgbWF0cml4LmIgKiBkMTtcbiAgICB0aGlzLmMgID0gbWF0cml4LmMgKiBhMSArIG1hdHJpeC5kICogYzE7XG4gICAgdGhpcy5kICA9IG1hdHJpeC5jICogYjEgKyBtYXRyaXguZCAqIGQxO1xuXG4gICAgdGhpcy50eCA9IG1hdHJpeC50eCAqIGExICsgbWF0cml4LnR5ICogYzEgKyB0aGlzLnR4O1xuICAgIHRoaXMudHkgPSBtYXRyaXgudHggKiBiMSArIG1hdHJpeC50eSAqIGQxICsgdGhpcy50eTtcblxuICAgIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBTZXRzIHRoZSBtYXRyaXggYmFzZWQgb24gYWxsIHRoZSBhdmFpbGFibGUgcHJvcGVydGllc1xuICpcbiAqIEBwYXJhbSB7bnVtYmVyfSB4XG4gKiBAcGFyYW0ge251bWJlcn0geVxuICogQHBhcmFtIHtudW1iZXJ9IHBpdm90WFxuICogQHBhcmFtIHtudW1iZXJ9IHBpdm90WVxuICogQHBhcmFtIHtudW1iZXJ9IHNjYWxlWFxuICogQHBhcmFtIHtudW1iZXJ9IHNjYWxlWVxuICogQHBhcmFtIHtudW1iZXJ9IHJvdGF0aW9uXG4gKiBAcGFyYW0ge251bWJlcn0gc2tld1hcbiAqIEBwYXJhbSB7bnVtYmVyfSBza2V3WVxuICpcbiAqIEByZXR1cm4ge1BJWEkuTWF0cml4fSBUaGlzIG1hdHJpeC4gR29vZCBmb3IgY2hhaW5pbmcgbWV0aG9kIGNhbGxzLlxuICovXG5NYXRyaXgucHJvdG90eXBlLnNldFRyYW5zZm9ybSA9IGZ1bmN0aW9uICh4LCB5LCBwaXZvdFgsIHBpdm90WSwgc2NhbGVYLCBzY2FsZVksIHJvdGF0aW9uLCBza2V3WCwgc2tld1kpXG57XG4gICAgdmFyIGEsIGIsIGMsIGQsIHNyLCBjciwgY3ksIHN5LCBuc3gsIGN4O1xuXG4gICAgc3IgID0gTWF0aC5zaW4ocm90YXRpb24pO1xuICAgIGNyICA9IE1hdGguY29zKHJvdGF0aW9uKTtcbiAgICBjeSAgPSBNYXRoLmNvcyhza2V3WSk7XG4gICAgc3kgID0gTWF0aC5zaW4oc2tld1kpO1xuICAgIG5zeCA9IC1NYXRoLnNpbihza2V3WCk7XG4gICAgY3ggID0gIE1hdGguY29zKHNrZXdYKTtcblxuICAgIGEgID0gIGNyICogc2NhbGVYO1xuICAgIGIgID0gIHNyICogc2NhbGVYO1xuICAgIGMgID0gLXNyICogc2NhbGVZO1xuICAgIGQgID0gIGNyICogc2NhbGVZO1xuXG4gICAgdGhpcy5hICA9IGN5ICogYSArIHN5ICogYztcbiAgICB0aGlzLmIgID0gY3kgKiBiICsgc3kgKiBkO1xuICAgIHRoaXMuYyAgPSBuc3ggKiBhICsgY3ggKiBjO1xuICAgIHRoaXMuZCAgPSBuc3ggKiBiICsgY3ggKiBkO1xuXG4gICAgdGhpcy50eCA9IHggKyAoIHBpdm90WCAqIGEgKyBwaXZvdFkgKiBjICk7XG4gICAgdGhpcy50eSA9IHkgKyAoIHBpdm90WCAqIGIgKyBwaXZvdFkgKiBkICk7XG5cbiAgICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogUHJlcGVuZHMgdGhlIGdpdmVuIE1hdHJpeCB0byB0aGlzIE1hdHJpeC5cbiAqXG4gKiBAcGFyYW0ge1BJWEkuTWF0cml4fSBtYXRyaXhcbiAqIEByZXR1cm4ge1BJWEkuTWF0cml4fSBUaGlzIG1hdHJpeC4gR29vZCBmb3IgY2hhaW5pbmcgbWV0aG9kIGNhbGxzLlxuICovXG5NYXRyaXgucHJvdG90eXBlLnByZXBlbmQgPSBmdW5jdGlvbihtYXRyaXgpXG57XG4gICAgdmFyIHR4MSA9IHRoaXMudHg7XG5cbiAgICBpZiAobWF0cml4LmEgIT09IDEgfHwgbWF0cml4LmIgIT09IDAgfHwgbWF0cml4LmMgIT09IDAgfHwgbWF0cml4LmQgIT09IDEpXG4gICAge1xuICAgICAgICB2YXIgYTEgPSB0aGlzLmE7XG4gICAgICAgIHZhciBjMSA9IHRoaXMuYztcbiAgICAgICAgdGhpcy5hICA9IGExKm1hdHJpeC5hK3RoaXMuYiptYXRyaXguYztcbiAgICAgICAgdGhpcy5iICA9IGExKm1hdHJpeC5iK3RoaXMuYiptYXRyaXguZDtcbiAgICAgICAgdGhpcy5jICA9IGMxKm1hdHJpeC5hK3RoaXMuZCptYXRyaXguYztcbiAgICAgICAgdGhpcy5kICA9IGMxKm1hdHJpeC5iK3RoaXMuZCptYXRyaXguZDtcbiAgICB9XG5cbiAgICB0aGlzLnR4ID0gdHgxKm1hdHJpeC5hK3RoaXMudHkqbWF0cml4LmMrbWF0cml4LnR4O1xuICAgIHRoaXMudHkgPSB0eDEqbWF0cml4LmIrdGhpcy50eSptYXRyaXguZCttYXRyaXgudHk7XG5cbiAgICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogSW52ZXJ0cyB0aGlzIG1hdHJpeFxuICpcbiAqIEByZXR1cm4ge1BJWEkuTWF0cml4fSBUaGlzIG1hdHJpeC4gR29vZCBmb3IgY2hhaW5pbmcgbWV0aG9kIGNhbGxzLlxuICovXG5NYXRyaXgucHJvdG90eXBlLmludmVydCA9IGZ1bmN0aW9uKClcbntcbiAgICB2YXIgYTEgPSB0aGlzLmE7XG4gICAgdmFyIGIxID0gdGhpcy5iO1xuICAgIHZhciBjMSA9IHRoaXMuYztcbiAgICB2YXIgZDEgPSB0aGlzLmQ7XG4gICAgdmFyIHR4MSA9IHRoaXMudHg7XG4gICAgdmFyIG4gPSBhMSpkMS1iMSpjMTtcblxuICAgIHRoaXMuYSA9IGQxL247XG4gICAgdGhpcy5iID0gLWIxL247XG4gICAgdGhpcy5jID0gLWMxL247XG4gICAgdGhpcy5kID0gYTEvbjtcbiAgICB0aGlzLnR4ID0gKGMxKnRoaXMudHktZDEqdHgxKS9uO1xuICAgIHRoaXMudHkgPSAtKGExKnRoaXMudHktYjEqdHgxKS9uO1xuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG5cbi8qKlxuICogUmVzZXRzIHRoaXMgTWF0aXggdG8gYW4gaWRlbnRpdHkgKGRlZmF1bHQpIG1hdHJpeC5cbiAqXG4gKiBAcmV0dXJuIHtQSVhJLk1hdHJpeH0gVGhpcyBtYXRyaXguIEdvb2QgZm9yIGNoYWluaW5nIG1ldGhvZCBjYWxscy5cbiAqL1xuTWF0cml4LnByb3RvdHlwZS5pZGVudGl0eSA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy5hID0gMTtcbiAgICB0aGlzLmIgPSAwO1xuICAgIHRoaXMuYyA9IDA7XG4gICAgdGhpcy5kID0gMTtcbiAgICB0aGlzLnR4ID0gMDtcbiAgICB0aGlzLnR5ID0gMDtcblxuICAgIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBDcmVhdGVzIGEgbmV3IE1hdHJpeCBvYmplY3Qgd2l0aCB0aGUgc2FtZSB2YWx1ZXMgYXMgdGhpcyBvbmUuXG4gKlxuICogQHJldHVybiB7UElYSS5NYXRyaXh9IEEgY29weSBvZiB0aGlzIG1hdHJpeC4gR29vZCBmb3IgY2hhaW5pbmcgbWV0aG9kIGNhbGxzLlxuICovXG5NYXRyaXgucHJvdG90eXBlLmNsb25lID0gZnVuY3Rpb24gKClcbntcbiAgICB2YXIgbWF0cml4ID0gbmV3IE1hdHJpeCgpO1xuICAgIG1hdHJpeC5hID0gdGhpcy5hO1xuICAgIG1hdHJpeC5iID0gdGhpcy5iO1xuICAgIG1hdHJpeC5jID0gdGhpcy5jO1xuICAgIG1hdHJpeC5kID0gdGhpcy5kO1xuICAgIG1hdHJpeC50eCA9IHRoaXMudHg7XG4gICAgbWF0cml4LnR5ID0gdGhpcy50eTtcblxuICAgIHJldHVybiBtYXRyaXg7XG59O1xuXG4vKipcbiAqIENoYW5nZXMgdGhlIHZhbHVlcyBvZiB0aGUgZ2l2ZW4gbWF0cml4IHRvIGJlIHRoZSBzYW1lIGFzIHRoZSBvbmVzIGluIHRoaXMgbWF0cml4XG4gKlxuICogQHJldHVybiB7UElYSS5NYXRyaXh9IFRoZSBtYXRyaXggZ2l2ZW4gaW4gcGFyYW1ldGVyIHdpdGggaXRzIHZhbHVlcyB1cGRhdGVkLlxuICovXG5NYXRyaXgucHJvdG90eXBlLmNvcHkgPSBmdW5jdGlvbiAobWF0cml4KVxue1xuICAgIG1hdHJpeC5hID0gdGhpcy5hO1xuICAgIG1hdHJpeC5iID0gdGhpcy5iO1xuICAgIG1hdHJpeC5jID0gdGhpcy5jO1xuICAgIG1hdHJpeC5kID0gdGhpcy5kO1xuICAgIG1hdHJpeC50eCA9IHRoaXMudHg7XG4gICAgbWF0cml4LnR5ID0gdGhpcy50eTtcblxuICAgIHJldHVybiBtYXRyaXg7XG59O1xuXG4vKipcbiAqIEEgZGVmYXVsdCAoaWRlbnRpdHkpIG1hdHJpeFxuICpcbiAqIEBzdGF0aWNcbiAqIEBjb25zdFxuICovXG5NYXRyaXguSURFTlRJVFkgPSBuZXcgTWF0cml4KCk7XG5cbi8qKlxuICogQSB0ZW1wIG1hdHJpeFxuICpcbiAqIEBzdGF0aWNcbiAqIEBjb25zdFxuICovXG5NYXRyaXguVEVNUF9NQVRSSVggPSBuZXcgTWF0cml4KCk7XG4iLCIvKipcbiAqIFRoZSBQb2ludCBvYmplY3QgcmVwcmVzZW50cyBhIGxvY2F0aW9uIGluIGEgdHdvLWRpbWVuc2lvbmFsIGNvb3JkaW5hdGUgc3lzdGVtLCB3aGVyZSB4IHJlcHJlc2VudHNcbiAqIHRoZSBob3Jpem9udGFsIGF4aXMgYW5kIHkgcmVwcmVzZW50cyB0aGUgdmVydGljYWwgYXhpcy5cbiAqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gW3g9MF0ge251bWJlcn0gcG9zaXRpb24gb2YgdGhlIHBvaW50IG9uIHRoZSB4IGF4aXNcbiAqIEBwYXJhbSBbeT0wXSB7bnVtYmVyfSBwb3NpdGlvbiBvZiB0aGUgcG9pbnQgb24gdGhlIHkgYXhpc1xuICovXG5mdW5jdGlvbiBQb2ludCh4LCB5KVxue1xuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAwXG4gICAgICovXG4gICAgdGhpcy54ID0geCB8fCAwO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDBcbiAgICAgKi9cbiAgICB0aGlzLnkgPSB5IHx8IDA7XG59XG5cblBvaW50LnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFBvaW50O1xubW9kdWxlLmV4cG9ydHMgPSBQb2ludDtcblxuLyoqXG4gKiBDcmVhdGVzIGEgY2xvbmUgb2YgdGhpcyBwb2ludFxuICpcbiAqIEByZXR1cm4ge1BJWEkuUG9pbnR9IGEgY29weSBvZiB0aGUgcG9pbnRcbiAqL1xuUG9pbnQucHJvdG90eXBlLmNsb25lID0gZnVuY3Rpb24gKClcbntcbiAgICByZXR1cm4gbmV3IFBvaW50KHRoaXMueCwgdGhpcy55KTtcbn07XG5cbi8qKlxuICogQ29waWVzIHggYW5kIHkgZnJvbSB0aGUgZ2l2ZW4gcG9pbnRcbiAqXG4gKiBAcGFyYW0gcCB7UElYSS5Qb2ludH1cbiAqL1xuUG9pbnQucHJvdG90eXBlLmNvcHkgPSBmdW5jdGlvbiAocCkge1xuICAgIHRoaXMuc2V0KHAueCwgcC55KTtcbn07XG5cbi8qKlxuICogUmV0dXJucyB0cnVlIGlmIHRoZSBnaXZlbiBwb2ludCBpcyBlcXVhbCB0byB0aGlzIHBvaW50XG4gKlxuICogQHBhcmFtIHAge1BJWEkuUG9pbnR9XG4gKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAqL1xuUG9pbnQucHJvdG90eXBlLmVxdWFscyA9IGZ1bmN0aW9uIChwKSB7XG4gICAgcmV0dXJuIChwLnggPT09IHRoaXMueCkgJiYgKHAueSA9PT0gdGhpcy55KTtcbn07XG5cbi8qKlxuICogU2V0cyB0aGUgcG9pbnQgdG8gYSBuZXcgeCBhbmQgeSBwb3NpdGlvbi5cbiAqIElmIHkgaXMgb21pdHRlZCwgYm90aCB4IGFuZCB5IHdpbGwgYmUgc2V0IHRvIHguXG4gKlxuICogQHBhcmFtIFt4PTBdIHtudW1iZXJ9IHBvc2l0aW9uIG9mIHRoZSBwb2ludCBvbiB0aGUgeCBheGlzXG4gKiBAcGFyYW0gW3k9MF0ge251bWJlcn0gcG9zaXRpb24gb2YgdGhlIHBvaW50IG9uIHRoZSB5IGF4aXNcbiAqL1xuUG9pbnQucHJvdG90eXBlLnNldCA9IGZ1bmN0aW9uICh4LCB5KVxue1xuICAgIHRoaXMueCA9IHggfHwgMDtcbiAgICB0aGlzLnkgPSB5IHx8ICggKHkgIT09IDApID8gdGhpcy54IDogMCApIDtcbn07XG4iLCIvKipcbiAqIE1hdGggY2xhc3NlcyBhbmQgdXRpbGl0aWVzIG1peGVkIGludG8gUElYSSBuYW1lc3BhY2UuXG4gKlxuICogQGxlbmRzIFBJWElcbiAqL1xubW9kdWxlLmV4cG9ydHMgPSB7XG4gICAgLy8gVGhlc2Ugd2lsbCBiZSBtaXhlZCB0byBiZSBtYWRlIHB1YmxpY2x5IGF2YWlsYWJsZSxcbiAgICAvLyB3aGlsZSB0aGlzIG1vZHVsZSBpcyB1c2VkIGludGVybmFsbHkgaW4gY29yZVxuICAgIC8vIHRvIGF2b2lkIGNpcmN1bGFyIGRlcGVuZGVuY2llcyBhbmQgY3V0IGRvd24gb25cbiAgICAvLyBpbnRlcm5hbCBtb2R1bGUgcmVxdWlyZXMuXG5cbiAgICBQb2ludDogICAgICByZXF1aXJlKCcuL1BvaW50JyksXG4gICAgTWF0cml4OiAgICAgcmVxdWlyZSgnLi9NYXRyaXgnKSxcblxuICAgIENpcmNsZTogICAgIHJlcXVpcmUoJy4vc2hhcGVzL0NpcmNsZScpLFxuICAgIEVsbGlwc2U6ICAgIHJlcXVpcmUoJy4vc2hhcGVzL0VsbGlwc2UnKSxcbiAgICBQb2x5Z29uOiAgICByZXF1aXJlKCcuL3NoYXBlcy9Qb2x5Z29uJyksXG4gICAgUmVjdGFuZ2xlOiAgcmVxdWlyZSgnLi9zaGFwZXMvUmVjdGFuZ2xlJyksXG4gICAgUm91bmRlZFJlY3RhbmdsZTogcmVxdWlyZSgnLi9zaGFwZXMvUm91bmRlZFJlY3RhbmdsZScpXG59O1xuIiwidmFyIFJlY3RhbmdsZSA9IHJlcXVpcmUoJy4vUmVjdGFuZ2xlJyksXG4gICAgQ09OU1QgPSByZXF1aXJlKCcuLi8uLi9jb25zdCcpO1xuXG4vKipcbiAqIFRoZSBDaXJjbGUgb2JqZWN0IGNhbiBiZSB1c2VkIHRvIHNwZWNpZnkgYSBoaXQgYXJlYSBmb3IgZGlzcGxheU9iamVjdHNcbiAqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0geCB7bnVtYmVyfSBUaGUgWCBjb29yZGluYXRlIG9mIHRoZSBjZW50ZXIgb2YgdGhpcyBjaXJjbGVcbiAqIEBwYXJhbSB5IHtudW1iZXJ9IFRoZSBZIGNvb3JkaW5hdGUgb2YgdGhlIGNlbnRlciBvZiB0aGlzIGNpcmNsZVxuICogQHBhcmFtIHJhZGl1cyB7bnVtYmVyfSBUaGUgcmFkaXVzIG9mIHRoZSBjaXJjbGVcbiAqL1xuZnVuY3Rpb24gQ2lyY2xlKHgsIHksIHJhZGl1cylcbntcbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMFxuICAgICAqL1xuICAgIHRoaXMueCA9IHggfHwgMDtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAwXG4gICAgICovXG4gICAgdGhpcy55ID0geSB8fCAwO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDBcbiAgICAgKi9cbiAgICB0aGlzLnJhZGl1cyA9IHJhZGl1cyB8fCAwO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHR5cGUgb2YgdGhlIG9iamVjdCwgbWFpbmx5IHVzZWQgdG8gYXZvaWQgYGluc3RhbmNlb2ZgIGNoZWNrc1xuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMudHlwZSA9IENPTlNULlNIQVBFUy5DSVJDO1xufVxuXG5DaXJjbGUucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gQ2lyY2xlO1xubW9kdWxlLmV4cG9ydHMgPSBDaXJjbGU7XG5cbi8qKlxuICogQ3JlYXRlcyBhIGNsb25lIG9mIHRoaXMgQ2lyY2xlIGluc3RhbmNlXG4gKlxuICogQHJldHVybiB7UElYSS5DaXJjbGV9IGEgY29weSBvZiB0aGUgQ2lyY2xlXG4gKi9cbkNpcmNsZS5wcm90b3R5cGUuY2xvbmUgPSBmdW5jdGlvbiAoKVxue1xuICAgIHJldHVybiBuZXcgQ2lyY2xlKHRoaXMueCwgdGhpcy55LCB0aGlzLnJhZGl1cyk7XG59O1xuXG4vKipcbiAqIENoZWNrcyB3aGV0aGVyIHRoZSB4IGFuZCB5IGNvb3JkaW5hdGVzIGdpdmVuIGFyZSBjb250YWluZWQgd2l0aGluIHRoaXMgY2lyY2xlXG4gKlxuICogQHBhcmFtIHgge251bWJlcn0gVGhlIFggY29vcmRpbmF0ZSBvZiB0aGUgcG9pbnQgdG8gdGVzdFxuICogQHBhcmFtIHkge251bWJlcn0gVGhlIFkgY29vcmRpbmF0ZSBvZiB0aGUgcG9pbnQgdG8gdGVzdFxuICogQHJldHVybiB7Ym9vbGVhbn0gV2hldGhlciB0aGUgeC95IGNvb3JkaW5hdGVzIGFyZSB3aXRoaW4gdGhpcyBDaXJjbGVcbiAqL1xuQ2lyY2xlLnByb3RvdHlwZS5jb250YWlucyA9IGZ1bmN0aW9uICh4LCB5KVxue1xuICAgIGlmICh0aGlzLnJhZGl1cyA8PSAwKVxuICAgIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHZhciBkeCA9ICh0aGlzLnggLSB4KSxcbiAgICAgICAgZHkgPSAodGhpcy55IC0geSksXG4gICAgICAgIHIyID0gdGhpcy5yYWRpdXMgKiB0aGlzLnJhZGl1cztcblxuICAgIGR4ICo9IGR4O1xuICAgIGR5ICo9IGR5O1xuXG4gICAgcmV0dXJuIChkeCArIGR5IDw9IHIyKTtcbn07XG5cbi8qKlxuKiBSZXR1cm5zIHRoZSBmcmFtaW5nIHJlY3RhbmdsZSBvZiB0aGUgY2lyY2xlIGFzIGEgUmVjdGFuZ2xlIG9iamVjdFxuKlxuKiBAcmV0dXJuIHtQSVhJLlJlY3RhbmdsZX0gdGhlIGZyYW1pbmcgcmVjdGFuZ2xlXG4qL1xuQ2lyY2xlLnByb3RvdHlwZS5nZXRCb3VuZHMgPSBmdW5jdGlvbiAoKVxue1xuICAgIHJldHVybiBuZXcgUmVjdGFuZ2xlKHRoaXMueCAtIHRoaXMucmFkaXVzLCB0aGlzLnkgLSB0aGlzLnJhZGl1cywgdGhpcy5yYWRpdXMgKiAyLCB0aGlzLnJhZGl1cyAqIDIpO1xufTtcbiIsInZhciBSZWN0YW5nbGUgPSByZXF1aXJlKCcuL1JlY3RhbmdsZScpLFxuICAgIENPTlNUID0gcmVxdWlyZSgnLi4vLi4vY29uc3QnKTtcblxuLyoqXG4gKiBUaGUgRWxsaXBzZSBvYmplY3QgY2FuIGJlIHVzZWQgdG8gc3BlY2lmeSBhIGhpdCBhcmVhIGZvciBkaXNwbGF5T2JqZWN0c1xuICpcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqIEBwYXJhbSB4IHtudW1iZXJ9IFRoZSBYIGNvb3JkaW5hdGUgb2YgdGhlIGNlbnRlciBvZiB0aGUgZWxsaXBzZVxuICogQHBhcmFtIHkge251bWJlcn0gVGhlIFkgY29vcmRpbmF0ZSBvZiB0aGUgY2VudGVyIG9mIHRoZSBlbGxpcHNlXG4gKiBAcGFyYW0gd2lkdGgge251bWJlcn0gVGhlIGhhbGYgd2lkdGggb2YgdGhpcyBlbGxpcHNlXG4gKiBAcGFyYW0gaGVpZ2h0IHtudW1iZXJ9IFRoZSBoYWxmIGhlaWdodCBvZiB0aGlzIGVsbGlwc2VcbiAqL1xuZnVuY3Rpb24gRWxsaXBzZSh4LCB5LCB3aWR0aCwgaGVpZ2h0KVxue1xuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAwXG4gICAgICovXG4gICAgdGhpcy54ID0geCB8fCAwO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDBcbiAgICAgKi9cbiAgICB0aGlzLnkgPSB5IHx8IDA7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMFxuICAgICAqL1xuICAgIHRoaXMud2lkdGggPSB3aWR0aCB8fCAwO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDBcbiAgICAgKi9cbiAgICB0aGlzLmhlaWdodCA9IGhlaWdodCB8fCAwO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHR5cGUgb2YgdGhlIG9iamVjdCwgbWFpbmx5IHVzZWQgdG8gYXZvaWQgYGluc3RhbmNlb2ZgIGNoZWNrc1xuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMudHlwZSA9IENPTlNULlNIQVBFUy5FTElQO1xufVxuXG5FbGxpcHNlLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IEVsbGlwc2U7XG5tb2R1bGUuZXhwb3J0cyA9IEVsbGlwc2U7XG5cbi8qKlxuICogQ3JlYXRlcyBhIGNsb25lIG9mIHRoaXMgRWxsaXBzZSBpbnN0YW5jZVxuICpcbiAqIEByZXR1cm4ge1BJWEkuRWxsaXBzZX0gYSBjb3B5IG9mIHRoZSBlbGxpcHNlXG4gKi9cbkVsbGlwc2UucHJvdG90eXBlLmNsb25lID0gZnVuY3Rpb24gKClcbntcbiAgICByZXR1cm4gbmV3IEVsbGlwc2UodGhpcy54LCB0aGlzLnksIHRoaXMud2lkdGgsIHRoaXMuaGVpZ2h0KTtcbn07XG5cbi8qKlxuICogQ2hlY2tzIHdoZXRoZXIgdGhlIHggYW5kIHkgY29vcmRpbmF0ZXMgZ2l2ZW4gYXJlIGNvbnRhaW5lZCB3aXRoaW4gdGhpcyBlbGxpcHNlXG4gKlxuICogQHBhcmFtIHgge251bWJlcn0gVGhlIFggY29vcmRpbmF0ZSBvZiB0aGUgcG9pbnQgdG8gdGVzdFxuICogQHBhcmFtIHkge251bWJlcn0gVGhlIFkgY29vcmRpbmF0ZSBvZiB0aGUgcG9pbnQgdG8gdGVzdFxuICogQHJldHVybiB7Ym9vbGVhbn0gV2hldGhlciB0aGUgeC95IGNvb3JkcyBhcmUgd2l0aGluIHRoaXMgZWxsaXBzZVxuICovXG5FbGxpcHNlLnByb3RvdHlwZS5jb250YWlucyA9IGZ1bmN0aW9uICh4LCB5KVxue1xuICAgIGlmICh0aGlzLndpZHRoIDw9IDAgfHwgdGhpcy5oZWlnaHQgPD0gMClcbiAgICB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICAvL25vcm1hbGl6ZSB0aGUgY29vcmRzIHRvIGFuIGVsbGlwc2Ugd2l0aCBjZW50ZXIgMCwwXG4gICAgdmFyIG5vcm14ID0gKCh4IC0gdGhpcy54KSAvIHRoaXMud2lkdGgpLFxuICAgICAgICBub3JteSA9ICgoeSAtIHRoaXMueSkgLyB0aGlzLmhlaWdodCk7XG5cbiAgICBub3JteCAqPSBub3JteDtcbiAgICBub3JteSAqPSBub3JteTtcblxuICAgIHJldHVybiAobm9ybXggKyBub3JteSA8PSAxKTtcbn07XG5cbi8qKlxuICogUmV0dXJucyB0aGUgZnJhbWluZyByZWN0YW5nbGUgb2YgdGhlIGVsbGlwc2UgYXMgYSBSZWN0YW5nbGUgb2JqZWN0XG4gKlxuICogQHJldHVybiB7UElYSS5SZWN0YW5nbGV9IHRoZSBmcmFtaW5nIHJlY3RhbmdsZVxuICovXG5FbGxpcHNlLnByb3RvdHlwZS5nZXRCb3VuZHMgPSBmdW5jdGlvbiAoKVxue1xuICAgIHJldHVybiBuZXcgUmVjdGFuZ2xlKHRoaXMueCAtIHRoaXMud2lkdGgsIHRoaXMueSAtIHRoaXMuaGVpZ2h0LCB0aGlzLndpZHRoLCB0aGlzLmhlaWdodCk7XG59O1xuIiwidmFyIFBvaW50ID0gcmVxdWlyZSgnLi4vUG9pbnQnKSxcbiAgICBDT05TVCA9IHJlcXVpcmUoJy4uLy4uL2NvbnN0Jyk7XG5cbi8qKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIHBvaW50cyB7UElYSS5Qb2ludFtdfG51bWJlcltdfC4uLlBJWEkuUG9pbnR8Li4ubnVtYmVyfSBUaGlzIGNhbiBiZSBhbiBhcnJheSBvZiBQb2ludHMgdGhhdCBmb3JtIHRoZSBwb2x5Z29uLFxuICogICAgICBhIGZsYXQgYXJyYXkgb2YgbnVtYmVycyB0aGF0IHdpbGwgYmUgaW50ZXJwcmV0ZWQgYXMgW3gseSwgeCx5LCAuLi5dLCBvciB0aGUgYXJndW1lbnRzIHBhc3NlZCBjYW4gYmVcbiAqICAgICAgYWxsIHRoZSBwb2ludHMgb2YgdGhlIHBvbHlnb24gZS5nLiBgbmV3IFBJWEkuUG9seWdvbihuZXcgUElYSS5Qb2ludCgpLCBuZXcgUElYSS5Qb2ludCgpLCAuLi4pYCwgb3IgdGhlXG4gKiAgICAgIGFyZ3VtZW50cyBwYXNzZWQgY2FuIGJlIGZsYXQgeCx5IHZhbHVlcyBlLmcuIGBuZXcgUG9seWdvbih4LHksIHgseSwgeCx5LCAuLi4pYCB3aGVyZSBgeGAgYW5kIGB5YCBhcmVcbiAqICAgICAgTnVtYmVycy5cbiAqL1xuZnVuY3Rpb24gUG9seWdvbihwb2ludHNfKVxue1xuICAgIC8vIHByZXZlbnRzIGFuIGFyZ3VtZW50IGFzc2lnbm1lbnQgZGVvcHRcbiAgICAvLyBzZWUgc2VjdGlvbiAzLjE6IGh0dHBzOi8vZ2l0aHViLmNvbS9wZXRrYWFudG9ub3YvYmx1ZWJpcmQvd2lraS9PcHRpbWl6YXRpb24ta2lsbGVycyMzLW1hbmFnaW5nLWFyZ3VtZW50c1xuICAgIHZhciBwb2ludHMgPSBwb2ludHNfO1xuXG4gICAgLy9pZiBwb2ludHMgaXNuJ3QgYW4gYXJyYXksIHVzZSBhcmd1bWVudHMgYXMgdGhlIGFycmF5XG4gICAgaWYgKCFBcnJheS5pc0FycmF5KHBvaW50cykpXG4gICAge1xuICAgICAgICAvLyBwcmV2ZW50cyBhbiBhcmd1bWVudCBsZWFrIGRlb3B0XG4gICAgICAgIC8vIHNlZSBzZWN0aW9uIDMuMjogaHR0cHM6Ly9naXRodWIuY29tL3BldGthYW50b25vdi9ibHVlYmlyZC93aWtpL09wdGltaXphdGlvbi1raWxsZXJzIzMtbWFuYWdpbmctYXJndW1lbnRzXG4gICAgICAgIHBvaW50cyA9IG5ldyBBcnJheShhcmd1bWVudHMubGVuZ3RoKTtcblxuICAgICAgICBmb3IgKHZhciBhID0gMDsgYSA8IHBvaW50cy5sZW5ndGg7ICsrYSkge1xuICAgICAgICAgICAgcG9pbnRzW2FdID0gYXJndW1lbnRzW2FdO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gaWYgdGhpcyBpcyBhbiBhcnJheSBvZiBwb2ludHMsIGNvbnZlcnQgaXQgdG8gYSBmbGF0IGFycmF5IG9mIG51bWJlcnNcbiAgICBpZiAocG9pbnRzWzBdIGluc3RhbmNlb2YgUG9pbnQpXG4gICAge1xuICAgICAgICB2YXIgcCA9IFtdO1xuICAgICAgICBmb3IgKHZhciBpID0gMCwgaWwgPSBwb2ludHMubGVuZ3RoOyBpIDwgaWw7IGkrKylcbiAgICAgICAge1xuICAgICAgICAgICAgcC5wdXNoKHBvaW50c1tpXS54LCBwb2ludHNbaV0ueSk7XG4gICAgICAgIH1cblxuICAgICAgICBwb2ludHMgPSBwO1xuICAgIH1cblxuICAgIHRoaXMuY2xvc2VkID0gdHJ1ZTtcblxuICAgIC8qKlxuICAgICAqIEFuIGFycmF5IG9mIHRoZSBwb2ludHMgb2YgdGhpcyBwb2x5Z29uXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJbXX1cbiAgICAgKi9cbiAgICB0aGlzLnBvaW50cyA9IHBvaW50cztcblxuICAgIC8qKlxuICAgICAqIFRoZSB0eXBlIG9mIHRoZSBvYmplY3QsIG1haW5seSB1c2VkIHRvIGF2b2lkIGBpbnN0YW5jZW9mYCBjaGVja3NcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLnR5cGUgPSBDT05TVC5TSEFQRVMuUE9MWTtcbn1cblxuUG9seWdvbi5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBQb2x5Z29uO1xubW9kdWxlLmV4cG9ydHMgPSBQb2x5Z29uO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBjbG9uZSBvZiB0aGlzIHBvbHlnb25cbiAqXG4gKiBAcmV0dXJuIHtQSVhJLlBvbHlnb259IGEgY29weSBvZiB0aGUgcG9seWdvblxuICovXG5Qb2x5Z29uLnByb3RvdHlwZS5jbG9uZSA9IGZ1bmN0aW9uICgpXG57XG4gICAgcmV0dXJuIG5ldyBQb2x5Z29uKHRoaXMucG9pbnRzLnNsaWNlKCkpO1xufTtcblxuLyoqXG4gKiBDaGVja3Mgd2hldGhlciB0aGUgeCBhbmQgeSBjb29yZGluYXRlcyBwYXNzZWQgdG8gdGhpcyBmdW5jdGlvbiBhcmUgY29udGFpbmVkIHdpdGhpbiB0aGlzIHBvbHlnb25cbiAqXG4gKiBAcGFyYW0geCB7bnVtYmVyfSBUaGUgWCBjb29yZGluYXRlIG9mIHRoZSBwb2ludCB0byB0ZXN0XG4gKiBAcGFyYW0geSB7bnVtYmVyfSBUaGUgWSBjb29yZGluYXRlIG9mIHRoZSBwb2ludCB0byB0ZXN0XG4gKiBAcmV0dXJuIHtib29sZWFufSBXaGV0aGVyIHRoZSB4L3kgY29vcmRpbmF0ZXMgYXJlIHdpdGhpbiB0aGlzIHBvbHlnb25cbiAqL1xuUG9seWdvbi5wcm90b3R5cGUuY29udGFpbnMgPSBmdW5jdGlvbiAoeCwgeSlcbntcbiAgICB2YXIgaW5zaWRlID0gZmFsc2U7XG5cbiAgICAvLyB1c2Ugc29tZSByYXljYXN0aW5nIHRvIHRlc3QgaGl0c1xuICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9zdWJzdGFjay9wb2ludC1pbi1wb2x5Z29uL2Jsb2IvbWFzdGVyL2luZGV4LmpzXG4gICAgdmFyIGxlbmd0aCA9IHRoaXMucG9pbnRzLmxlbmd0aCAvIDI7XG5cbiAgICBmb3IgKHZhciBpID0gMCwgaiA9IGxlbmd0aCAtIDE7IGkgPCBsZW5ndGg7IGogPSBpKyspXG4gICAge1xuICAgICAgICB2YXIgeGkgPSB0aGlzLnBvaW50c1tpICogMl0sIHlpID0gdGhpcy5wb2ludHNbaSAqIDIgKyAxXSxcbiAgICAgICAgICAgIHhqID0gdGhpcy5wb2ludHNbaiAqIDJdLCB5aiA9IHRoaXMucG9pbnRzW2ogKiAyICsgMV0sXG4gICAgICAgICAgICBpbnRlcnNlY3QgPSAoKHlpID4geSkgIT09ICh5aiA+IHkpKSAmJiAoeCA8ICh4aiAtIHhpKSAqICh5IC0geWkpIC8gKHlqIC0geWkpICsgeGkpO1xuXG4gICAgICAgIGlmIChpbnRlcnNlY3QpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGluc2lkZSA9ICFpbnNpZGU7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gaW5zaWRlO1xufTtcbiIsInZhciBDT05TVCA9IHJlcXVpcmUoJy4uLy4uL2NvbnN0Jyk7XG5cbi8qKlxuICogdGhlIFJlY3RhbmdsZSBvYmplY3QgaXMgYW4gYXJlYSBkZWZpbmVkIGJ5IGl0cyBwb3NpdGlvbiwgYXMgaW5kaWNhdGVkIGJ5IGl0cyB0b3AtbGVmdCBjb3JuZXIgcG9pbnQgKHgsIHkpIGFuZCBieSBpdHMgd2lkdGggYW5kIGl0cyBoZWlnaHQuXG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIHgge251bWJlcn0gVGhlIFggY29vcmRpbmF0ZSBvZiB0aGUgdXBwZXItbGVmdCBjb3JuZXIgb2YgdGhlIHJlY3RhbmdsZVxuICogQHBhcmFtIHkge251bWJlcn0gVGhlIFkgY29vcmRpbmF0ZSBvZiB0aGUgdXBwZXItbGVmdCBjb3JuZXIgb2YgdGhlIHJlY3RhbmdsZVxuICogQHBhcmFtIHdpZHRoIHtudW1iZXJ9IFRoZSBvdmVyYWxsIHdpZHRoIG9mIHRoaXMgcmVjdGFuZ2xlXG4gKiBAcGFyYW0gaGVpZ2h0IHtudW1iZXJ9IFRoZSBvdmVyYWxsIGhlaWdodCBvZiB0aGlzIHJlY3RhbmdsZVxuICovXG5mdW5jdGlvbiBSZWN0YW5nbGUoeCwgeSwgd2lkdGgsIGhlaWdodClcbntcbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMFxuICAgICAqL1xuICAgIHRoaXMueCA9IHggfHwgMDtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAwXG4gICAgICovXG4gICAgdGhpcy55ID0geSB8fCAwO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDBcbiAgICAgKi9cbiAgICB0aGlzLndpZHRoID0gd2lkdGggfHwgMDtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAwXG4gICAgICovXG4gICAgdGhpcy5oZWlnaHQgPSBoZWlnaHQgfHwgMDtcblxuICAgIC8qKlxuICAgICAqIFRoZSB0eXBlIG9mIHRoZSBvYmplY3QsIG1haW5seSB1c2VkIHRvIGF2b2lkIGBpbnN0YW5jZW9mYCBjaGVja3NcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLnR5cGUgPSBDT05TVC5TSEFQRVMuUkVDVDtcbn1cblxuUmVjdGFuZ2xlLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFJlY3RhbmdsZTtcbm1vZHVsZS5leHBvcnRzID0gUmVjdGFuZ2xlO1xuXG4vKipcbiAqIEEgY29uc3RhbnQgZW1wdHkgcmVjdGFuZ2xlLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBjb25zdGFudFxuICovXG5SZWN0YW5nbGUuRU1QVFkgPSBuZXcgUmVjdGFuZ2xlKDAsIDAsIDAsIDApO1xuXG5cbi8qKlxuICogQ3JlYXRlcyBhIGNsb25lIG9mIHRoaXMgUmVjdGFuZ2xlXG4gKlxuICogQHJldHVybiB7UElYSS5SZWN0YW5nbGV9IGEgY29weSBvZiB0aGUgcmVjdGFuZ2xlXG4gKi9cblJlY3RhbmdsZS5wcm90b3R5cGUuY2xvbmUgPSBmdW5jdGlvbiAoKVxue1xuICAgIHJldHVybiBuZXcgUmVjdGFuZ2xlKHRoaXMueCwgdGhpcy55LCB0aGlzLndpZHRoLCB0aGlzLmhlaWdodCk7XG59O1xuXG4vKipcbiAqIENoZWNrcyB3aGV0aGVyIHRoZSB4IGFuZCB5IGNvb3JkaW5hdGVzIGdpdmVuIGFyZSBjb250YWluZWQgd2l0aGluIHRoaXMgUmVjdGFuZ2xlXG4gKlxuICogQHBhcmFtIHgge251bWJlcn0gVGhlIFggY29vcmRpbmF0ZSBvZiB0aGUgcG9pbnQgdG8gdGVzdFxuICogQHBhcmFtIHkge251bWJlcn0gVGhlIFkgY29vcmRpbmF0ZSBvZiB0aGUgcG9pbnQgdG8gdGVzdFxuICogQHJldHVybiB7Ym9vbGVhbn0gV2hldGhlciB0aGUgeC95IGNvb3JkaW5hdGVzIGFyZSB3aXRoaW4gdGhpcyBSZWN0YW5nbGVcbiAqL1xuUmVjdGFuZ2xlLnByb3RvdHlwZS5jb250YWlucyA9IGZ1bmN0aW9uICh4LCB5KVxue1xuICAgIGlmICh0aGlzLndpZHRoIDw9IDAgfHwgdGhpcy5oZWlnaHQgPD0gMClcbiAgICB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBpZiAoeCA+PSB0aGlzLnggJiYgeCA8IHRoaXMueCArIHRoaXMud2lkdGgpXG4gICAge1xuICAgICAgICBpZiAoeSA+PSB0aGlzLnkgJiYgeSA8IHRoaXMueSArIHRoaXMuaGVpZ2h0KVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBmYWxzZTtcbn07XG4iLCJ2YXIgQ09OU1QgPSByZXF1aXJlKCcuLi8uLi9jb25zdCcpO1xuXG4vKipcbiAqIFRoZSBSb3VuZGVkIFJlY3RhbmdsZSBvYmplY3QgaXMgYW4gYXJlYSB0aGF0IGhhcyBuaWNlIHJvdW5kZWQgY29ybmVycywgYXMgaW5kaWNhdGVkIGJ5IGl0cyB0b3AtbGVmdCBjb3JuZXIgcG9pbnQgKHgsIHkpIGFuZCBieSBpdHMgd2lkdGggYW5kIGl0cyBoZWlnaHQgYW5kIGl0cyByYWRpdXMuXG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIHgge251bWJlcn0gVGhlIFggY29vcmRpbmF0ZSBvZiB0aGUgdXBwZXItbGVmdCBjb3JuZXIgb2YgdGhlIHJvdW5kZWQgcmVjdGFuZ2xlXG4gKiBAcGFyYW0geSB7bnVtYmVyfSBUaGUgWSBjb29yZGluYXRlIG9mIHRoZSB1cHBlci1sZWZ0IGNvcm5lciBvZiB0aGUgcm91bmRlZCByZWN0YW5nbGVcbiAqIEBwYXJhbSB3aWR0aCB7bnVtYmVyfSBUaGUgb3ZlcmFsbCB3aWR0aCBvZiB0aGlzIHJvdW5kZWQgcmVjdGFuZ2xlXG4gKiBAcGFyYW0gaGVpZ2h0IHtudW1iZXJ9IFRoZSBvdmVyYWxsIGhlaWdodCBvZiB0aGlzIHJvdW5kZWQgcmVjdGFuZ2xlXG4gKiBAcGFyYW0gcmFkaXVzIHtudW1iZXJ9IENvbnRyb2xzIHRoZSByYWRpdXMgb2YgdGhlIHJvdW5kZWQgY29ybmVyc1xuICovXG5mdW5jdGlvbiBSb3VuZGVkUmVjdGFuZ2xlKHgsIHksIHdpZHRoLCBoZWlnaHQsIHJhZGl1cylcbntcbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMFxuICAgICAqL1xuICAgIHRoaXMueCA9IHggfHwgMDtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAwXG4gICAgICovXG4gICAgdGhpcy55ID0geSB8fCAwO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDBcbiAgICAgKi9cbiAgICB0aGlzLndpZHRoID0gd2lkdGggfHwgMDtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAwXG4gICAgICovXG4gICAgdGhpcy5oZWlnaHQgPSBoZWlnaHQgfHwgMDtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAyMFxuICAgICAqL1xuICAgIHRoaXMucmFkaXVzID0gcmFkaXVzIHx8IDIwO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHR5cGUgb2YgdGhlIG9iamVjdCwgbWFpbmx5IHVzZWQgdG8gYXZvaWQgYGluc3RhbmNlb2ZgIGNoZWNrc1xuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMudHlwZSA9IENPTlNULlNIQVBFUy5SUkVDO1xufVxuXG5Sb3VuZGVkUmVjdGFuZ2xlLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFJvdW5kZWRSZWN0YW5nbGU7XG5tb2R1bGUuZXhwb3J0cyA9IFJvdW5kZWRSZWN0YW5nbGU7XG5cbi8qKlxuICogQ3JlYXRlcyBhIGNsb25lIG9mIHRoaXMgUm91bmRlZCBSZWN0YW5nbGVcbiAqXG4gKiBAcmV0dXJuIHtQSVhJLlJvdW5kZWRSZWN0YW5nbGV9IGEgY29weSBvZiB0aGUgcm91bmRlZCByZWN0YW5nbGVcbiAqL1xuUm91bmRlZFJlY3RhbmdsZS5wcm90b3R5cGUuY2xvbmUgPSBmdW5jdGlvbiAoKVxue1xuICAgIHJldHVybiBuZXcgUm91bmRlZFJlY3RhbmdsZSh0aGlzLngsIHRoaXMueSwgdGhpcy53aWR0aCwgdGhpcy5oZWlnaHQsIHRoaXMucmFkaXVzKTtcbn07XG5cbi8qKlxuICogQ2hlY2tzIHdoZXRoZXIgdGhlIHggYW5kIHkgY29vcmRpbmF0ZXMgZ2l2ZW4gYXJlIGNvbnRhaW5lZCB3aXRoaW4gdGhpcyBSb3VuZGVkIFJlY3RhbmdsZVxuICpcbiAqIEBwYXJhbSB4IHtudW1iZXJ9IFRoZSBYIGNvb3JkaW5hdGUgb2YgdGhlIHBvaW50IHRvIHRlc3RcbiAqIEBwYXJhbSB5IHtudW1iZXJ9IFRoZSBZIGNvb3JkaW5hdGUgb2YgdGhlIHBvaW50IHRvIHRlc3RcbiAqIEByZXR1cm4ge2Jvb2xlYW59IFdoZXRoZXIgdGhlIHgveSBjb29yZGluYXRlcyBhcmUgd2l0aGluIHRoaXMgUm91bmRlZCBSZWN0YW5nbGVcbiAqL1xuUm91bmRlZFJlY3RhbmdsZS5wcm90b3R5cGUuY29udGFpbnMgPSBmdW5jdGlvbiAoeCwgeSlcbntcbiAgICBpZiAodGhpcy53aWR0aCA8PSAwIHx8IHRoaXMuaGVpZ2h0IDw9IDApXG4gICAge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgaWYgKHggPj0gdGhpcy54ICYmIHggPD0gdGhpcy54ICsgdGhpcy53aWR0aClcbiAgICB7XG4gICAgICAgIGlmICh5ID49IHRoaXMueSAmJiB5IDw9IHRoaXMueSArIHRoaXMuaGVpZ2h0KVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBmYWxzZTtcbn07XG4iLCJ2YXIgQ29udGFpbmVyID0gcmVxdWlyZSgnLi4vZGlzcGxheS9Db250YWluZXInKSxcbiAgICBDT05TVCA9IHJlcXVpcmUoJy4uL2NvbnN0Jyk7XG5cbi8qKlxuICogVGhlIFBhcnRpY2xlQ29udGFpbmVyIGNsYXNzIGlzIGEgcmVhbGx5IGZhc3QgdmVyc2lvbiBvZiB0aGUgQ29udGFpbmVyIGJ1aWx0IHNvbGVseSBmb3Igc3BlZWQsXG4gKiBzbyB1c2Ugd2hlbiB5b3UgbmVlZCBhIGxvdCBvZiBzcHJpdGVzIG9yIHBhcnRpY2xlcy4gVGhlIHRyYWRlb2ZmIG9mIHRoZSBQYXJ0aWNsZUNvbnRhaW5lciBpcyB0aGF0IGFkdmFuY2VkXG4gKiBmdW5jdGlvbmFsaXR5IHdpbGwgbm90IHdvcmsuIFBhcnRpY2xlQ29udGFpbmVyIGltcGxlbWVudHMgb25seSB0aGUgYmFzaWMgb2JqZWN0IHRyYW5zZm9ybSAocG9zaXRpb24sIHNjYWxlLCByb3RhdGlvbikuXG4gKiBBbnkgb3RoZXIgZnVuY3Rpb25hbGl0eSBsaWtlIHRpbnRpbmcsIG1hc2tpbmcsIGV0YyB3aWxsIG5vdCB3b3JrIG9uIHNwcml0ZXMgaW4gdGhpcyBiYXRjaC5cbiAqXG4gKiBJdCdzIGV4dHJlbWVseSBlYXN5IHRvIHVzZSA6XG4gKlxuICogYGBganNcbiAqIHZhciBjb250YWluZXIgPSBuZXcgUGFydGljbGVDb250YWluZXIoKTtcbiAqXG4gKiBmb3IgKHZhciBpID0gMDsgaSA8IDEwMDsgKytpKVxuICoge1xuICogICAgIHZhciBzcHJpdGUgPSBuZXcgUElYSS5TcHJpdGUuZnJvbUltYWdlKFwibXlJbWFnZS5wbmdcIik7XG4gKiAgICAgY29udGFpbmVyLmFkZENoaWxkKHNwcml0ZSk7XG4gKiB9XG4gKiBgYGBcbiAqXG4gKiBBbmQgaGVyZSB5b3UgaGF2ZSBhIGh1bmRyZWQgc3ByaXRlcyB0aGF0IHdpbGwgYmUgcmVuZGVyZXIgYXQgdGhlIHNwZWVkIG9mIGxpZ2h0LlxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5Db250YWluZXJcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gW21heFNpemU9MTUwMDBdIHtudW1iZXJ9IFRoZSBtYXhpbXVtIG51bWJlciBvZiBwYXJ0aWNsZXMgdGhhdCBjYW4gYmUgcmVuZGVyZXIgYnkgdGhlIGNvbnRhaW5lci5cbiAqIEBwYXJhbSBbcHJvcGVydGllc10ge29iamVjdH0gVGhlIHByb3BlcnRpZXMgb2YgY2hpbGRyZW4gdGhhdCBzaG91bGQgYmUgdXBsb2FkZWQgdG8gdGhlIGdwdSBhbmQgYXBwbGllZC5cbiAqIEBwYXJhbSBbcHJvcGVydGllcy5zY2FsZT1mYWxzZV0ge2Jvb2xlYW59IFdoZW4gdHJ1ZSwgc2NhbGUgYmUgdXBsb2FkZWQgYW5kIGFwcGxpZWQuXG4gKiBAcGFyYW0gW3Byb3BlcnRpZXMucG9zaXRpb249dHJ1ZV0ge2Jvb2xlYW59IFdoZW4gdHJ1ZSwgcG9zaXRpb24gYmUgdXBsb2FkZWQgYW5kIGFwcGxpZWQuXG4gKiBAcGFyYW0gW3Byb3BlcnRpZXMucm90YXRpb249ZmFsc2VdIHtib29sZWFufSBXaGVuIHRydWUsIHJvdGF0aW9uIGJlIHVwbG9hZGVkIGFuZCBhcHBsaWVkLlxuICogQHBhcmFtIFtwcm9wZXJ0aWVzLnV2cz1mYWxzZV0ge2Jvb2xlYW59IFdoZW4gdHJ1ZSwgdXZzIGJlIHVwbG9hZGVkIGFuZCBhcHBsaWVkLlxuICogQHBhcmFtIFtwcm9wZXJ0aWVzLmFscGhhPWZhbHNlXSB7Ym9vbGVhbn0gV2hlbiB0cnVlLCBhbHBoYSBiZSB1cGxvYWRlZCBhbmQgYXBwbGllZC5cbiAqIEBwYXJhbSBbYmF0Y2hTaXplPTE1MDAwXSB7bnVtYmVyfSBOdW1iZXIgb2YgcGFydGljbGVzIHBlciBiYXRjaC5cbiAqL1xuZnVuY3Rpb24gUGFydGljbGVDb250YWluZXIobWF4U2l6ZSwgcHJvcGVydGllcywgYmF0Y2hTaXplKVxue1xuICAgIENvbnRhaW5lci5jYWxsKHRoaXMpO1xuXG4gICAgYmF0Y2hTaXplID0gYmF0Y2hTaXplIHx8IDE1MDAwOyAvL0NPTlNULlNQUklURV9CQVRDSF9TSVpFOyAvLyAyMDAwIGlzIGEgbmljZSBiYWxhbmNlIGJldHdlZW4gbW9iaWxlIC8gZGVza3RvcFxuICAgIG1heFNpemUgPSBtYXhTaXplIHx8IDE1MDAwO1xuXG4gICAgLy8gTWFraW5nIHN1cmUgdGhlIGJhdGNoIHNpemUgaXMgdmFsaWRcbiAgICAvLyA2NTUzNSBpcyBtYXggdmVydGV4IGluZGV4IGluIHRoZSBpbmRleCBidWZmZXIgKHNlZSBQYXJ0aWNsZVJlbmRlcmVyKVxuICAgIC8vIHNvIG1heCBudW1iZXIgb2YgcGFydGljbGVzIGlzIDY1NTM2IC8gNCA9IDE2Mzg0XG4gICAgdmFyIG1heEJhdGNoU2l6ZSA9IDE2Mzg0O1xuICAgIGlmIChiYXRjaFNpemUgPiBtYXhCYXRjaFNpemUpIHtcbiAgICAgICAgYmF0Y2hTaXplID0gbWF4QmF0Y2hTaXplO1xuICAgIH1cblxuICAgIGlmIChiYXRjaFNpemUgPiBtYXhTaXplKSB7XG4gICAgICAgIGJhdGNoU2l6ZSA9IG1heFNpemU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2V0IHByb3BlcnRpZXMgdG8gYmUgZHluYW1pYyAodHJ1ZSkgLyBzdGF0aWMgKGZhbHNlKVxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbltdfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fcHJvcGVydGllcyA9IFtmYWxzZSwgdHJ1ZSwgZmFsc2UsIGZhbHNlLCBmYWxzZV07XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9tYXhTaXplID0gbWF4U2l6ZTtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX2JhdGNoU2l6ZSA9IGJhdGNoU2l6ZTtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge1dlYkdMQnVmZmVyfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fYnVmZmVycyA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9idWZmZXJUb1VwZGF0ZSA9IDA7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqXG4gICAgICovXG4gICAgdGhpcy5pbnRlcmFjdGl2ZUNoaWxkcmVuID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYmxlbmQgbW9kZSB0byBiZSBhcHBsaWVkIHRvIHRoZSBzcHJpdGUuIEFwcGx5IGEgdmFsdWUgb2YgYFBJWEkuQkxFTkRfTU9ERVMuTk9STUFMYCB0byByZXNldCB0aGUgYmxlbmQgbW9kZS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCBQSVhJLkJMRU5EX01PREVTLk5PUk1BTFxuICAgICAqIEBzZWUgUElYSS5CTEVORF9NT0RFU1xuICAgICAqL1xuICAgIHRoaXMuYmxlbmRNb2RlID0gQ09OU1QuQkxFTkRfTU9ERVMuTk9STUFMO1xuXG4gICAgLyoqXG4gICAgICogVXNlZCBmb3IgY2FudmFzIHJlbmRlcmVyaW5nLiBJZiB0cnVlIHRoZW4gdGhlIGVsZW1lbnRzIHdpbGwgYmUgcG9zaXRpb25lZCBhdCB0aGUgbmVhcmVzdCBwaXhlbC4gVGhpcyBwcm92aWRlcyBhIG5pY2Ugc3BlZWQgYm9vc3QuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqIEBkZWZhdWx0IHRydWU7XG4gICAgICovXG4gICAgdGhpcy5yb3VuZFBpeGVscyA9IHRydWU7XG5cbiAgICB0aGlzLnNldFByb3BlcnRpZXMocHJvcGVydGllcyk7XG59XG5cblBhcnRpY2xlQ29udGFpbmVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoQ29udGFpbmVyLnByb3RvdHlwZSk7XG5QYXJ0aWNsZUNvbnRhaW5lci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBQYXJ0aWNsZUNvbnRhaW5lcjtcbm1vZHVsZS5leHBvcnRzID0gUGFydGljbGVDb250YWluZXI7XG5cbi8qKlxuICogU2V0cyB0aGUgcHJpdmF0ZSBwcm9wZXJ0aWVzIGFycmF5IHRvIGR5bmFtaWMgLyBzdGF0aWMgYmFzZWQgb24gdGhlIHBhc3NlZCBwcm9wZXJ0aWVzIG9iamVjdFxuICpcbiAqIEBwYXJhbSBwcm9wZXJ0aWVzIHtvYmplY3R9IFRoZSBwcm9wZXJ0aWVzIHRvIGJlIHVwbG9hZGVkXG4gKi9cblBhcnRpY2xlQ29udGFpbmVyLnByb3RvdHlwZS5zZXRQcm9wZXJ0aWVzID0gZnVuY3Rpb24ocHJvcGVydGllcylcbntcbiAgICBpZiAoIHByb3BlcnRpZXMgKSB7XG4gICAgICAgIHRoaXMuX3Byb3BlcnRpZXNbMF0gPSAnc2NhbGUnIGluIHByb3BlcnRpZXMgPyAhIXByb3BlcnRpZXMuc2NhbGUgOiB0aGlzLl9wcm9wZXJ0aWVzWzBdO1xuICAgICAgICB0aGlzLl9wcm9wZXJ0aWVzWzFdID0gJ3Bvc2l0aW9uJyBpbiBwcm9wZXJ0aWVzID8gISFwcm9wZXJ0aWVzLnBvc2l0aW9uIDogdGhpcy5fcHJvcGVydGllc1sxXTtcbiAgICAgICAgdGhpcy5fcHJvcGVydGllc1syXSA9ICdyb3RhdGlvbicgaW4gcHJvcGVydGllcyA/ICEhcHJvcGVydGllcy5yb3RhdGlvbiA6IHRoaXMuX3Byb3BlcnRpZXNbMl07XG4gICAgICAgIHRoaXMuX3Byb3BlcnRpZXNbM10gPSAndXZzJyBpbiBwcm9wZXJ0aWVzID8gISFwcm9wZXJ0aWVzLnV2cyA6IHRoaXMuX3Byb3BlcnRpZXNbM107XG4gICAgICAgIHRoaXMuX3Byb3BlcnRpZXNbNF0gPSAnYWxwaGEnIGluIHByb3BlcnRpZXMgPyAhIXByb3BlcnRpZXMuYWxwaGEgOiB0aGlzLl9wcm9wZXJ0aWVzWzRdO1xuICAgIH1cbn07XG5cbi8qKlxuICogVXBkYXRlcyB0aGUgb2JqZWN0IHRyYW5zZm9ybSBmb3IgcmVuZGVyaW5nXG4gKlxuICogQHByaXZhdGVcbiAqL1xuUGFydGljbGVDb250YWluZXIucHJvdG90eXBlLnVwZGF0ZVRyYW5zZm9ybSA9IGZ1bmN0aW9uICgpXG57XG5cbiAgICAvLyBUT0RPIGRvbid0IG5lZWQgdG8hXG4gICAgdGhpcy5kaXNwbGF5T2JqZWN0VXBkYXRlVHJhbnNmb3JtKCk7XG4gICAgLy8gIFBJWEkuQ29udGFpbmVyLnByb3RvdHlwZS51cGRhdGVUcmFuc2Zvcm0uY2FsbCggdGhpcyApO1xufTtcblxuLyoqXG4gKiBSZW5kZXJzIHRoZSBjb250YWluZXIgdXNpbmcgdGhlIFdlYkdMIHJlbmRlcmVyXG4gKlxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLldlYkdMUmVuZGVyZXJ9IFRoZSB3ZWJnbCByZW5kZXJlclxuICogQHByaXZhdGVcbiAqL1xuUGFydGljbGVDb250YWluZXIucHJvdG90eXBlLnJlbmRlcldlYkdMID0gZnVuY3Rpb24gKHJlbmRlcmVyKVxue1xuICAgIGlmICghdGhpcy52aXNpYmxlIHx8IHRoaXMud29ybGRBbHBoYSA8PSAwIHx8ICF0aGlzLmNoaWxkcmVuLmxlbmd0aCB8fCAhdGhpcy5yZW5kZXJhYmxlKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHJlbmRlcmVyLnNldE9iamVjdFJlbmRlcmVyKCByZW5kZXJlci5wbHVnaW5zLnBhcnRpY2xlICk7XG4gICAgcmVuZGVyZXIucGx1Z2lucy5wYXJ0aWNsZS5yZW5kZXIoIHRoaXMgKTtcbn07XG5cbi8qKlxuICogU2V0IHRoZSBmbGFnIHRoYXQgc3RhdGljIGRhdGEgc2hvdWxkIGJlIHVwZGF0ZWQgdG8gdHJ1ZVxuICpcbiAqIEBwcml2YXRlXG4gKi9cblBhcnRpY2xlQ29udGFpbmVyLnByb3RvdHlwZS5vbkNoaWxkcmVuQ2hhbmdlID0gZnVuY3Rpb24gKHNtYWxsZXN0Q2hpbGRJbmRleClcbntcbiAgICB2YXIgYnVmZmVySW5kZXggPSBNYXRoLmZsb29yKHNtYWxsZXN0Q2hpbGRJbmRleCAvIHRoaXMuX2JhdGNoU2l6ZSk7XG4gICAgaWYgKGJ1ZmZlckluZGV4IDwgdGhpcy5fYnVmZmVyVG9VcGRhdGUpIHtcbiAgICAgICAgdGhpcy5fYnVmZmVyVG9VcGRhdGUgPSBidWZmZXJJbmRleDtcbiAgICB9XG59O1xuXG4vKipcbiAqIFJlbmRlcnMgdGhlIG9iamVjdCB1c2luZyB0aGUgQ2FudmFzIHJlbmRlcmVyXG4gKlxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLkNhbnZhc1JlbmRlcmVyfSBUaGUgY2FudmFzIHJlbmRlcmVyXG4gKiBAcHJpdmF0ZVxuICovXG5QYXJ0aWNsZUNvbnRhaW5lci5wcm90b3R5cGUucmVuZGVyQ2FudmFzID0gZnVuY3Rpb24gKHJlbmRlcmVyKVxue1xuICAgIGlmICghdGhpcy52aXNpYmxlIHx8IHRoaXMud29ybGRBbHBoYSA8PSAwIHx8ICF0aGlzLmNoaWxkcmVuLmxlbmd0aCB8fCAhdGhpcy5yZW5kZXJhYmxlKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHZhciBjb250ZXh0ID0gcmVuZGVyZXIuY29udGV4dDtcbiAgICB2YXIgdHJhbnNmb3JtID0gdGhpcy53b3JsZFRyYW5zZm9ybTtcbiAgICB2YXIgaXNSb3RhdGVkID0gdHJ1ZTtcblxuICAgIHZhciBwb3NpdGlvblggPSAwO1xuICAgIHZhciBwb3NpdGlvblkgPSAwO1xuXG4gICAgdmFyIGZpbmFsV2lkdGggPSAwO1xuICAgIHZhciBmaW5hbEhlaWdodCA9IDA7XG5cbiAgICB2YXIgY29tcG9zaXRlT3BlcmF0aW9uID0gcmVuZGVyZXIuYmxlbmRNb2Rlc1t0aGlzLmJsZW5kTW9kZV07XG4gICAgaWYgKGNvbXBvc2l0ZU9wZXJhdGlvbiAhPT0gY29udGV4dC5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb24pXG4gICAge1xuICAgICAgICBjb250ZXh0Lmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbiA9IGNvbXBvc2l0ZU9wZXJhdGlvbjtcbiAgICB9XG5cbiAgICBjb250ZXh0Lmdsb2JhbEFscGhhID0gdGhpcy53b3JsZEFscGhhO1xuXG4gICAgdGhpcy5kaXNwbGF5T2JqZWN0VXBkYXRlVHJhbnNmb3JtKCk7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuY2hpbGRyZW4ubGVuZ3RoOyArK2kpXG4gICAge1xuICAgICAgICB2YXIgY2hpbGQgPSB0aGlzLmNoaWxkcmVuW2ldO1xuXG4gICAgICAgIGlmICghY2hpbGQudmlzaWJsZSlcbiAgICAgICAge1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgZnJhbWUgPSBjaGlsZC50ZXh0dXJlLmZyYW1lO1xuXG4gICAgICAgIGNvbnRleHQuZ2xvYmFsQWxwaGEgPSB0aGlzLndvcmxkQWxwaGEgKiBjaGlsZC5hbHBoYTtcblxuICAgICAgICBpZiAoY2hpbGQucm90YXRpb24gJSAoTWF0aC5QSSAqIDIpID09PSAwKVxuICAgICAgICB7XG4gICAgICAgICAgICAvLyB0aGlzIGlzIHRoZSBmYXN0ZXN0ICB3YXkgdG8gb3B0aW1pc2UhIC0gaWYgcm90YXRpb24gaXMgMCB0aGVuIHdlIGNhbiBhdm9pZCBhbnkga2luZCBvZiBzZXRUcmFuc2Zvcm0gY2FsbFxuICAgICAgICAgICAgaWYgKGlzUm90YXRlZClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb250ZXh0LnNldFRyYW5zZm9ybShcbiAgICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtLmEsXG4gICAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybS5iLFxuICAgICAgICAgICAgICAgICAgICB0cmFuc2Zvcm0uYyxcbiAgICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtLmQsXG4gICAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybS50eCxcbiAgICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtLnR5XG4gICAgICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgICAgIGlzUm90YXRlZCA9IGZhbHNlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBwb3NpdGlvblggPSAoKGNoaWxkLmFuY2hvci54KSAqICgtZnJhbWUud2lkdGggKiBjaGlsZC5zY2FsZS54KSArIGNoaWxkLnBvc2l0aW9uLnggICsgMC41KTtcbiAgICAgICAgICAgIHBvc2l0aW9uWSA9ICgoY2hpbGQuYW5jaG9yLnkpICogKC1mcmFtZS5oZWlnaHQgKiBjaGlsZC5zY2FsZS55KSArIGNoaWxkLnBvc2l0aW9uLnkgICsgMC41KTtcblxuICAgICAgICAgICAgZmluYWxXaWR0aCA9IGZyYW1lLndpZHRoICogY2hpbGQuc2NhbGUueDtcbiAgICAgICAgICAgIGZpbmFsSGVpZ2h0ID0gZnJhbWUuaGVpZ2h0ICogY2hpbGQuc2NhbGUueTtcblxuICAgICAgICB9XG4gICAgICAgIGVsc2VcbiAgICAgICAge1xuICAgICAgICAgICAgaWYgKCFpc1JvdGF0ZWQpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgaXNSb3RhdGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY2hpbGQuZGlzcGxheU9iamVjdFVwZGF0ZVRyYW5zZm9ybSgpO1xuXG4gICAgICAgICAgICB2YXIgY2hpbGRUcmFuc2Zvcm0gPSBjaGlsZC53b3JsZFRyYW5zZm9ybTtcblxuICAgICAgICAgICAgaWYgKHJlbmRlcmVyLnJvdW5kUGl4ZWxzKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGNvbnRleHQuc2V0VHJhbnNmb3JtKFxuICAgICAgICAgICAgICAgICAgICBjaGlsZFRyYW5zZm9ybS5hLFxuICAgICAgICAgICAgICAgICAgICBjaGlsZFRyYW5zZm9ybS5iLFxuICAgICAgICAgICAgICAgICAgICBjaGlsZFRyYW5zZm9ybS5jLFxuICAgICAgICAgICAgICAgICAgICBjaGlsZFRyYW5zZm9ybS5kLFxuICAgICAgICAgICAgICAgICAgICBjaGlsZFRyYW5zZm9ybS50eCB8IDAsXG4gICAgICAgICAgICAgICAgICAgIGNoaWxkVHJhbnNmb3JtLnR5IHwgMFxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29udGV4dC5zZXRUcmFuc2Zvcm0oXG4gICAgICAgICAgICAgICAgICAgIGNoaWxkVHJhbnNmb3JtLmEsXG4gICAgICAgICAgICAgICAgICAgIGNoaWxkVHJhbnNmb3JtLmIsXG4gICAgICAgICAgICAgICAgICAgIGNoaWxkVHJhbnNmb3JtLmMsXG4gICAgICAgICAgICAgICAgICAgIGNoaWxkVHJhbnNmb3JtLmQsXG4gICAgICAgICAgICAgICAgICAgIGNoaWxkVHJhbnNmb3JtLnR4LFxuICAgICAgICAgICAgICAgICAgICBjaGlsZFRyYW5zZm9ybS50eVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHBvc2l0aW9uWCA9ICgoY2hpbGQuYW5jaG9yLngpICogKC1mcmFtZS53aWR0aCkgKyAwLjUpO1xuICAgICAgICAgICAgcG9zaXRpb25ZID0gKChjaGlsZC5hbmNob3IueSkgKiAoLWZyYW1lLmhlaWdodCkgKyAwLjUpO1xuXG4gICAgICAgICAgICBmaW5hbFdpZHRoID0gZnJhbWUud2lkdGg7XG4gICAgICAgICAgICBmaW5hbEhlaWdodCA9IGZyYW1lLmhlaWdodDtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnRleHQuZHJhd0ltYWdlKFxuICAgICAgICAgICAgY2hpbGQudGV4dHVyZS5iYXNlVGV4dHVyZS5zb3VyY2UsXG4gICAgICAgICAgICBmcmFtZS54LFxuICAgICAgICAgICAgZnJhbWUueSxcbiAgICAgICAgICAgIGZyYW1lLndpZHRoLFxuICAgICAgICAgICAgZnJhbWUuaGVpZ2h0LFxuICAgICAgICAgICAgcG9zaXRpb25YLFxuICAgICAgICAgICAgcG9zaXRpb25ZLFxuICAgICAgICAgICAgZmluYWxXaWR0aCxcbiAgICAgICAgICAgIGZpbmFsSGVpZ2h0XG4gICAgICAgICk7XG4gICAgfVxufTtcblxuLyoqXG4gKiBEZXN0cm95cyB0aGUgY29udGFpbmVyXG4gKlxuICogQHBhcmFtIFtkZXN0cm95Q2hpbGRyZW49ZmFsc2VdIHtib29sZWFufSBpZiBzZXQgdG8gdHJ1ZSwgYWxsIHRoZSBjaGlsZHJlbiB3aWxsIGhhdmUgdGhlaXIgZGVzdHJveSBtZXRob2QgY2FsbGVkIGFzIHdlbGxcbiAqL1xuUGFydGljbGVDb250YWluZXIucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoKSB7XG4gICAgQ29udGFpbmVyLnByb3RvdHlwZS5kZXN0cm95LmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG5cbiAgICBpZiAodGhpcy5fYnVmZmVycykge1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuX2J1ZmZlcnMubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgICAgIHRoaXMuX2J1ZmZlcnNbaV0uZGVzdHJveSgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5fcHJvcGVydGllcyA9IG51bGw7XG4gICAgdGhpcy5fYnVmZmVycyA9IG51bGw7XG59O1xuIiwiXG4vKipcbiAqIEBhdXRob3IgTWF0IEdyb3Zlc1xuICpcbiAqIEJpZyB0aGFua3MgdG8gdGhlIHZlcnkgY2xldmVyIE1hdHQgRGVzTGF1cmllcnMgPG1hdHRkZXNsPiBodHRwczovL2dpdGh1Yi5jb20vbWF0dGRlc2wvXG4gKiBmb3IgY3JlYXRpbmcgdGhlIG9yaWdpbmFsIHBpeGkgdmVyc2lvbiFcbiAqIEFsc28gYSB0aGFua3MgdG8gaHR0cHM6Ly9naXRodWIuY29tL2JjaGV2YWxpZXIgZm9yIHR3ZWFraW5nIHRoZSB0aW50IGFuZCBhbHBoYSBzbyB0aGF0IHRoZXkgbm93IHNoYXJlIDQgYnl0ZXMgb24gdGhlIHZlcnRleCBidWZmZXJcbiAqXG4gKiBIZWF2aWx5IGluc3BpcmVkIGJ5IExpYkdEWCdzIFBhcnRpY2xlQnVmZmVyOlxuICogaHR0cHM6Ly9naXRodWIuY29tL2xpYmdkeC9saWJnZHgvYmxvYi9tYXN0ZXIvZ2R4L3NyYy9jb20vYmFkbG9naWMvZ2R4L2dyYXBoaWNzL2cyZC9QYXJ0aWNsZUJ1ZmZlci5qYXZhXG4gKi9cblxuLyoqXG4gKiBUaGUgcGFydGljbGUgYnVmZmVyIG1hbmFnZXMgdGhlIHN0YXRpYyBhbmQgZHluYW1pYyBidWZmZXJzIGZvciBhIHBhcnRpY2xlIGNvbnRhaW5lci5cbiAqXG4gKiBAY2xhc3NcbiAqIEBwcml2YXRlXG4gKiBAbWVtYmVyb2YgUElYSVxuICovXG5mdW5jdGlvbiBQYXJ0aWNsZUJ1ZmZlcihnbCwgcHJvcGVydGllcywgZHluYW1pY1Byb3BlcnR5RmxhZ3MsIHNpemUpXG57XG4gICAgLyoqXG4gICAgICogVGhlIGN1cnJlbnQgV2ViR0wgZHJhd2luZyBjb250ZXh0LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7V2ViR0xSZW5kZXJpbmdDb250ZXh0fVxuICAgICAqL1xuICAgIHRoaXMuZ2wgPSBnbDtcblxuICAgIC8qKlxuICAgICAqIFNpemUgb2YgYSBzaW5nbGUgdmVydGV4LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMudmVydFNpemUgPSAyO1xuXG4gICAgLyoqXG4gICAgICogU2l6ZSBvZiBhIHNpbmdsZSB2ZXJ0ZXggaW4gYnl0ZXMuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy52ZXJ0Qnl0ZVNpemUgPSB0aGlzLnZlcnRTaXplICogNDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBudW1iZXIgb2YgcGFydGljbGVzIHRoZSBidWZmZXIgY2FuIGhvbGRcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLnNpemUgPSBzaXplO1xuXG4gICAgLyoqXG4gICAgICogQSBsaXN0IG9mIHRoZSBwcm9wZXJ0aWVzIHRoYXQgYXJlIGR5bmFtaWMuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtvYmplY3RbXX1cbiAgICAgKi9cbiAgICB0aGlzLmR5bmFtaWNQcm9wZXJ0aWVzID0gW107XG5cbiAgICAvKipcbiAgICAgKiBBIGxpc3Qgb2YgdGhlIHByb3BlcnRpZXMgdGhhdCBhcmUgc3RhdGljLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7b2JqZWN0W119XG4gICAgICovXG4gICAgdGhpcy5zdGF0aWNQcm9wZXJ0aWVzID0gW107XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BlcnRpZXMubGVuZ3RoOyBpKyspXG4gICAge1xuICAgICAgICB2YXIgcHJvcGVydHkgPSBwcm9wZXJ0aWVzW2ldO1xuXG4gICAgICAgIGlmKGR5bmFtaWNQcm9wZXJ0eUZsYWdzW2ldKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmR5bmFtaWNQcm9wZXJ0aWVzLnB1c2gocHJvcGVydHkpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2VcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5zdGF0aWNQcm9wZXJ0aWVzLnB1c2gocHJvcGVydHkpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5zdGF0aWNTdHJpZGUgPSAwO1xuICAgIHRoaXMuc3RhdGljQnVmZmVyID0gbnVsbDtcbiAgICB0aGlzLnN0YXRpY0RhdGEgPSBudWxsO1xuXG4gICAgdGhpcy5keW5hbWljU3RyaWRlID0gMDtcbiAgICB0aGlzLmR5bmFtaWNCdWZmZXIgPSBudWxsO1xuICAgIHRoaXMuZHluYW1pY0RhdGEgPSBudWxsO1xuXG4gICAgdGhpcy5pbml0QnVmZmVycygpO1xuXG59XG5cblBhcnRpY2xlQnVmZmVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFBhcnRpY2xlQnVmZmVyO1xubW9kdWxlLmV4cG9ydHMgPSBQYXJ0aWNsZUJ1ZmZlcjtcblxuLyoqXG4gKiBTZXRzIHVwIHRoZSByZW5kZXJlciBjb250ZXh0IGFuZCBuZWNlc3NhcnkgYnVmZmVycy5cbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5QYXJ0aWNsZUJ1ZmZlci5wcm90b3R5cGUuaW5pdEJ1ZmZlcnMgPSBmdW5jdGlvbiAoKVxue1xuICAgIHZhciBnbCA9IHRoaXMuZ2w7XG4gICAgdmFyIGk7XG4gICAgdmFyIHByb3BlcnR5O1xuXG4gICAgdmFyIGR5bmFtaWNPZmZzZXQgPSAwO1xuICAgIHRoaXMuZHluYW1pY1N0cmlkZSA9IDA7XG5cbiAgICBmb3IgKGkgPSAwOyBpIDwgdGhpcy5keW5hbWljUHJvcGVydGllcy5sZW5ndGg7IGkrKylcbiAgICB7XG4gICAgICAgIHByb3BlcnR5ID0gdGhpcy5keW5hbWljUHJvcGVydGllc1tpXTtcblxuICAgICAgICBwcm9wZXJ0eS5vZmZzZXQgPSBkeW5hbWljT2Zmc2V0O1xuICAgICAgICBkeW5hbWljT2Zmc2V0ICs9IHByb3BlcnR5LnNpemU7XG4gICAgICAgIHRoaXMuZHluYW1pY1N0cmlkZSArPSBwcm9wZXJ0eS5zaXplO1xuICAgIH1cblxuICAgIHRoaXMuZHluYW1pY0RhdGEgPSBuZXcgRmxvYXQzMkFycmF5KCB0aGlzLnNpemUgKiB0aGlzLmR5bmFtaWNTdHJpZGUgKiA0KTtcbiAgICB0aGlzLmR5bmFtaWNCdWZmZXIgPSBnbC5jcmVhdGVCdWZmZXIoKTtcblxuICAgIGdsLmJpbmRCdWZmZXIoZ2wuQVJSQVlfQlVGRkVSLCB0aGlzLmR5bmFtaWNCdWZmZXIpO1xuICAgIGdsLmJ1ZmZlckRhdGEoZ2wuQVJSQVlfQlVGRkVSLCB0aGlzLmR5bmFtaWNEYXRhLCBnbC5EWU5BTUlDX0RSQVcpO1xuXG5cbiAgICAvLyBzdGF0aWMgLy9cbiAgICB2YXIgc3RhdGljT2Zmc2V0ID0gMDtcbiAgICB0aGlzLnN0YXRpY1N0cmlkZSA9IDA7XG5cbiAgICBmb3IgKGkgPSAwOyBpIDwgdGhpcy5zdGF0aWNQcm9wZXJ0aWVzLmxlbmd0aDsgaSsrKVxuICAgIHtcbiAgICAgICAgcHJvcGVydHkgPSB0aGlzLnN0YXRpY1Byb3BlcnRpZXNbaV07XG5cbiAgICAgICAgcHJvcGVydHkub2Zmc2V0ID0gc3RhdGljT2Zmc2V0O1xuICAgICAgICBzdGF0aWNPZmZzZXQgKz0gcHJvcGVydHkuc2l6ZTtcbiAgICAgICAgdGhpcy5zdGF0aWNTdHJpZGUgKz0gcHJvcGVydHkuc2l6ZTtcbiAgICB9XG5cbiAgICB0aGlzLnN0YXRpY0RhdGEgPSBuZXcgRmxvYXQzMkFycmF5KCB0aGlzLnNpemUgKiB0aGlzLnN0YXRpY1N0cmlkZSAqIDQpO1xuICAgIHRoaXMuc3RhdGljQnVmZmVyID0gZ2wuY3JlYXRlQnVmZmVyKCk7XG5cbiAgICBnbC5iaW5kQnVmZmVyKGdsLkFSUkFZX0JVRkZFUiwgdGhpcy5zdGF0aWNCdWZmZXIpO1xuICAgIGdsLmJ1ZmZlckRhdGEoZ2wuQVJSQVlfQlVGRkVSLCB0aGlzLnN0YXRpY0RhdGEsIGdsLkRZTkFNSUNfRFJBVyk7XG59O1xuXG4vKipcbiAqIFVwbG9hZHMgdGhlIGR5bmFtaWMgcHJvcGVydGllcy5cbiAqXG4gKi9cblBhcnRpY2xlQnVmZmVyLnByb3RvdHlwZS51cGxvYWREeW5hbWljID0gZnVuY3Rpb24oY2hpbGRyZW4sIHN0YXJ0SW5kZXgsIGFtb3VudClcbntcbiAgICB2YXIgZ2wgPSB0aGlzLmdsO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmR5bmFtaWNQcm9wZXJ0aWVzLmxlbmd0aDsgaSsrKVxuICAgIHtcbiAgICAgICAgdmFyIHByb3BlcnR5ID0gdGhpcy5keW5hbWljUHJvcGVydGllc1tpXTtcbiAgICAgICAgcHJvcGVydHkudXBsb2FkRnVuY3Rpb24oY2hpbGRyZW4sIHN0YXJ0SW5kZXgsIGFtb3VudCwgdGhpcy5keW5hbWljRGF0YSwgdGhpcy5keW5hbWljU3RyaWRlLCBwcm9wZXJ0eS5vZmZzZXQpO1xuICAgIH1cblxuICAgIGdsLmJpbmRCdWZmZXIoZ2wuQVJSQVlfQlVGRkVSLCB0aGlzLmR5bmFtaWNCdWZmZXIpO1xuICAgIGdsLmJ1ZmZlclN1YkRhdGEoZ2wuQVJSQVlfQlVGRkVSLCAwLCB0aGlzLmR5bmFtaWNEYXRhKTtcbn07XG5cbi8qKlxuICogVXBsb2FkcyB0aGUgc3RhdGljIHByb3BlcnRpZXMuXG4gKlxuICovXG5QYXJ0aWNsZUJ1ZmZlci5wcm90b3R5cGUudXBsb2FkU3RhdGljID0gZnVuY3Rpb24oY2hpbGRyZW4sIHN0YXJ0SW5kZXgsIGFtb3VudClcbntcbiAgICB2YXIgZ2wgPSB0aGlzLmdsO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLnN0YXRpY1Byb3BlcnRpZXMubGVuZ3RoOyBpKyspXG4gICAge1xuICAgICAgICB2YXIgcHJvcGVydHkgPSB0aGlzLnN0YXRpY1Byb3BlcnRpZXNbaV07XG4gICAgICAgIHByb3BlcnR5LnVwbG9hZEZ1bmN0aW9uKGNoaWxkcmVuLCBzdGFydEluZGV4LCBhbW91bnQsIHRoaXMuc3RhdGljRGF0YSwgdGhpcy5zdGF0aWNTdHJpZGUsIHByb3BlcnR5Lm9mZnNldCk7XG4gICAgfVxuXG4gICAgZ2wuYmluZEJ1ZmZlcihnbC5BUlJBWV9CVUZGRVIsIHRoaXMuc3RhdGljQnVmZmVyKTtcbiAgICBnbC5idWZmZXJTdWJEYXRhKGdsLkFSUkFZX0JVRkZFUiwgMCwgdGhpcy5zdGF0aWNEYXRhKTtcbn07XG5cbi8qKlxuICogQmluZHMgdGhlIGJ1ZmZlcnMgdG8gdGhlIEdQVVxuICpcbiAqL1xuUGFydGljbGVCdWZmZXIucHJvdG90eXBlLmJpbmQgPSBmdW5jdGlvbiAoKVxue1xuICAgIHZhciBnbCA9IHRoaXMuZ2w7XG4gICAgdmFyIGksIHByb3BlcnR5O1xuXG4gICAgZ2wuYmluZEJ1ZmZlcihnbC5BUlJBWV9CVUZGRVIsIHRoaXMuZHluYW1pY0J1ZmZlcik7XG5cbiAgICBmb3IgKGkgPSAwOyBpIDwgdGhpcy5keW5hbWljUHJvcGVydGllcy5sZW5ndGg7IGkrKylcbiAgICB7XG4gICAgICAgIHByb3BlcnR5ID0gdGhpcy5keW5hbWljUHJvcGVydGllc1tpXTtcbiAgICAgICAgZ2wudmVydGV4QXR0cmliUG9pbnRlcihwcm9wZXJ0eS5hdHRyaWJ1dGUsIHByb3BlcnR5LnNpemUsIGdsLkZMT0FULCBmYWxzZSwgdGhpcy5keW5hbWljU3RyaWRlICogNCwgcHJvcGVydHkub2Zmc2V0ICogNCk7XG4gICAgfVxuXG4gICAgZ2wuYmluZEJ1ZmZlcihnbC5BUlJBWV9CVUZGRVIsIHRoaXMuc3RhdGljQnVmZmVyKTtcblxuICAgIGZvciAoaSA9IDA7IGkgPCB0aGlzLnN0YXRpY1Byb3BlcnRpZXMubGVuZ3RoOyBpKyspXG4gICAge1xuICAgICAgICBwcm9wZXJ0eSA9IHRoaXMuc3RhdGljUHJvcGVydGllc1tpXTtcbiAgICAgICAgZ2wudmVydGV4QXR0cmliUG9pbnRlcihwcm9wZXJ0eS5hdHRyaWJ1dGUsIHByb3BlcnR5LnNpemUsIGdsLkZMT0FULCBmYWxzZSwgdGhpcy5zdGF0aWNTdHJpZGUgKiA0LCBwcm9wZXJ0eS5vZmZzZXQgKiA0KTtcbiAgICB9XG59O1xuXG4vKipcbiAqIERlc3Ryb3lzIHRoZSBQYXJ0aWNsZUJ1ZmZlci5cbiAqXG4gKi9cblBhcnRpY2xlQnVmZmVyLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLmR5bmFtaWNQcm9wZXJ0aWVzID0gbnVsbDtcbiAgICB0aGlzLmR5bmFtaWNEYXRhID0gbnVsbDtcbiAgICB0aGlzLmdsLmRlbGV0ZUJ1ZmZlcih0aGlzLmR5bmFtaWNCdWZmZXIpO1xuXG4gICAgdGhpcy5zdGF0aWNQcm9wZXJ0aWVzID0gbnVsbDtcbiAgICB0aGlzLnN0YXRpY0RhdGEgPSBudWxsO1xuICAgIHRoaXMuZ2wuZGVsZXRlQnVmZmVyKHRoaXMuc3RhdGljQnVmZmVyKTtcbn07XG4iLCJ2YXIgT2JqZWN0UmVuZGVyZXIgPSByZXF1aXJlKCcuLi8uLi9yZW5kZXJlcnMvd2ViZ2wvdXRpbHMvT2JqZWN0UmVuZGVyZXInKSxcbiAgICBXZWJHTFJlbmRlcmVyID0gcmVxdWlyZSgnLi4vLi4vcmVuZGVyZXJzL3dlYmdsL1dlYkdMUmVuZGVyZXInKSxcbiAgICBQYXJ0aWNsZVNoYWRlciA9IHJlcXVpcmUoJy4vUGFydGljbGVTaGFkZXInKSxcbiAgICBQYXJ0aWNsZUJ1ZmZlciA9IHJlcXVpcmUoJy4vUGFydGljbGVCdWZmZXInKSxcbiAgICBtYXRoICAgICAgICAgICAgPSByZXF1aXJlKCcuLi8uLi9tYXRoJyk7XG5cbi8qKlxuICogQGF1dGhvciBNYXQgR3JvdmVzXG4gKlxuICogQmlnIHRoYW5rcyB0byB0aGUgdmVyeSBjbGV2ZXIgTWF0dCBEZXNMYXVyaWVycyA8bWF0dGRlc2w+IGh0dHBzOi8vZ2l0aHViLmNvbS9tYXR0ZGVzbC9cbiAqIGZvciBjcmVhdGluZyB0aGUgb3JpZ2luYWwgcGl4aSB2ZXJzaW9uIVxuICogQWxzbyBhIHRoYW5rcyB0byBodHRwczovL2dpdGh1Yi5jb20vYmNoZXZhbGllciBmb3IgdHdlYWtpbmcgdGhlIHRpbnQgYW5kIGFscGhhIHNvIHRoYXQgdGhleSBub3cgc2hhcmUgNCBieXRlcyBvbiB0aGUgdmVydGV4IGJ1ZmZlclxuICpcbiAqIEhlYXZpbHkgaW5zcGlyZWQgYnkgTGliR0RYJ3MgUGFydGljbGVSZW5kZXJlcjpcbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS9saWJnZHgvbGliZ2R4L2Jsb2IvbWFzdGVyL2dkeC9zcmMvY29tL2JhZGxvZ2ljL2dkeC9ncmFwaGljcy9nMmQvUGFydGljbGVSZW5kZXJlci5qYXZhXG4gKi9cblxuLyoqXG4gKlxuICogQGNsYXNzXG4gKiBAcHJpdmF0ZVxuICogQG1lbWJlcm9mIFBJWElcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5XZWJHTFJlbmRlcmVyfSBUaGUgcmVuZGVyZXIgdGhpcyBzcHJpdGUgYmF0Y2ggd29ya3MgZm9yLlxuICovXG5mdW5jdGlvbiBQYXJ0aWNsZVJlbmRlcmVyKHJlbmRlcmVyKVxue1xuICAgIE9iamVjdFJlbmRlcmVyLmNhbGwodGhpcywgcmVuZGVyZXIpO1xuXG4gICAgLy8gNjU1MzUgaXMgbWF4IHZlcnRleCBpbmRleCBpbiB0aGUgaW5kZXggYnVmZmVyIChzZWUgUGFydGljbGVSZW5kZXJlcilcbiAgICAvLyBzbyBtYXggbnVtYmVyIG9mIHBhcnRpY2xlcyBpcyA2NTUzNiAvIDQgPSAxNjM4NFxuICAgIC8vIGFuZCBtYXggbnVtYmVyIG9mIGVsZW1lbnQgaW4gdGhlIGluZGV4IGJ1ZmZlciBpcyAxNjM4NCAqIDYgPSA5ODMwNFxuICAgIC8vIENyZWF0aW5nIGEgZnVsbCBpbmRleCBidWZmZXIsIG92ZXJoZWFkIGlzIDk4MzA0ICogMiA9IDE5NktvXG4gICAgdmFyIG51bUluZGljZXMgPSA5ODMwNDtcblxuICAgIC8qKlxuICAgICAqIEhvbGRzIHRoZSBpbmRpY2VzXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtVaW50MTZBcnJheX1cbiAgICAgKi9cbiAgICB0aGlzLmluZGljZXMgPSBuZXcgVWludDE2QXJyYXkobnVtSW5kaWNlcyk7XG5cbiAgICBmb3IgKHZhciBpPTAsIGo9MDsgaSA8IG51bUluZGljZXM7IGkgKz0gNiwgaiArPSA0KVxuICAgIHtcbiAgICAgICAgdGhpcy5pbmRpY2VzW2kgKyAwXSA9IGogKyAwO1xuICAgICAgICB0aGlzLmluZGljZXNbaSArIDFdID0gaiArIDE7XG4gICAgICAgIHRoaXMuaW5kaWNlc1tpICsgMl0gPSBqICsgMjtcbiAgICAgICAgdGhpcy5pbmRpY2VzW2kgKyAzXSA9IGogKyAwO1xuICAgICAgICB0aGlzLmluZGljZXNbaSArIDRdID0gaiArIDI7XG4gICAgICAgIHRoaXMuaW5kaWNlc1tpICsgNV0gPSBqICsgMztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGUgZGVmYXVsdCBzaGFkZXIgdGhhdCBpcyB1c2VkIGlmIGEgc3ByaXRlIGRvZXNuJ3QgaGF2ZSBhIG1vcmUgc3BlY2lmaWMgb25lLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5TaGFkZXJ9XG4gICAgICovXG4gICAgdGhpcy5zaGFkZXIgPSBudWxsO1xuXG4gICAgdGhpcy5pbmRleEJ1ZmZlciA9IG51bGw7XG5cbiAgICB0aGlzLnByb3BlcnRpZXMgPSBudWxsO1xuXG4gICAgdGhpcy50ZW1wTWF0cml4ID0gbmV3IG1hdGguTWF0cml4KCk7XG59XG5cblBhcnRpY2xlUmVuZGVyZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShPYmplY3RSZW5kZXJlci5wcm90b3R5cGUpO1xuUGFydGljbGVSZW5kZXJlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBQYXJ0aWNsZVJlbmRlcmVyO1xubW9kdWxlLmV4cG9ydHMgPSBQYXJ0aWNsZVJlbmRlcmVyO1xuXG5XZWJHTFJlbmRlcmVyLnJlZ2lzdGVyUGx1Z2luKCdwYXJ0aWNsZScsIFBhcnRpY2xlUmVuZGVyZXIpO1xuXG4vKipcbiAqIFdoZW4gdGhlcmUgaXMgYSBXZWJHTCBjb250ZXh0IGNoYW5nZVxuICpcbiAqIEBwcml2YXRlXG4gKi9cblBhcnRpY2xlUmVuZGVyZXIucHJvdG90eXBlLm9uQ29udGV4dENoYW5nZSA9IGZ1bmN0aW9uICgpXG57XG4gICAgdmFyIGdsID0gdGhpcy5yZW5kZXJlci5nbDtcblxuICAgIC8vIHNldHVwIGRlZmF1bHQgc2hhZGVyXG4gICAgdGhpcy5zaGFkZXIgPSBuZXcgUGFydGljbGVTaGFkZXIodGhpcy5yZW5kZXJlci5zaGFkZXJNYW5hZ2VyKTtcblxuICAgIHRoaXMuaW5kZXhCdWZmZXIgPSBnbC5jcmVhdGVCdWZmZXIoKTtcblxuICAgIC8vIDY1NTM1IGlzIG1heCBpbmRleCwgc28gNjU1MzUgLyA2ID0gMTA5MjIuXG5cbiAgICAvL3VwbG9hZCB0aGUgaW5kZXggZGF0YVxuICAgIGdsLmJpbmRCdWZmZXIoZ2wuRUxFTUVOVF9BUlJBWV9CVUZGRVIsIHRoaXMuaW5kZXhCdWZmZXIpO1xuICAgIGdsLmJ1ZmZlckRhdGEoZ2wuRUxFTUVOVF9BUlJBWV9CVUZGRVIsIHRoaXMuaW5kaWNlcywgZ2wuU1RBVElDX0RSQVcpO1xuXG4gICAgdGhpcy5wcm9wZXJ0aWVzID0gW1xuICAgICAgICAvLyB2ZXJ0aWNlc0RhdGFcbiAgICAgICAge1xuICAgICAgICAgICAgYXR0cmlidXRlOnRoaXMuc2hhZGVyLmF0dHJpYnV0ZXMuYVZlcnRleFBvc2l0aW9uLFxuICAgICAgICAgICAgc2l6ZToyLFxuICAgICAgICAgICAgdXBsb2FkRnVuY3Rpb246dGhpcy51cGxvYWRWZXJ0aWNlcyxcbiAgICAgICAgICAgIG9mZnNldDowXG4gICAgICAgIH0sXG4gICAgICAgIC8vIHBvc2l0aW9uRGF0YVxuICAgICAgICB7XG4gICAgICAgICAgICBhdHRyaWJ1dGU6dGhpcy5zaGFkZXIuYXR0cmlidXRlcy5hUG9zaXRpb25Db29yZCxcbiAgICAgICAgICAgIHNpemU6MixcbiAgICAgICAgICAgIHVwbG9hZEZ1bmN0aW9uOnRoaXMudXBsb2FkUG9zaXRpb24sXG4gICAgICAgICAgICBvZmZzZXQ6MFxuICAgICAgICB9LFxuICAgICAgICAvLyByb3RhdGlvbkRhdGFcbiAgICAgICAge1xuICAgICAgICAgICAgYXR0cmlidXRlOnRoaXMuc2hhZGVyLmF0dHJpYnV0ZXMuYVJvdGF0aW9uLFxuICAgICAgICAgICAgc2l6ZToxLFxuICAgICAgICAgICAgdXBsb2FkRnVuY3Rpb246dGhpcy51cGxvYWRSb3RhdGlvbixcbiAgICAgICAgICAgIG9mZnNldDowXG4gICAgICAgIH0sXG4gICAgICAgIC8vIHV2c0RhdGFcbiAgICAgICAge1xuICAgICAgICAgICAgYXR0cmlidXRlOnRoaXMuc2hhZGVyLmF0dHJpYnV0ZXMuYVRleHR1cmVDb29yZCxcbiAgICAgICAgICAgIHNpemU6MixcbiAgICAgICAgICAgIHVwbG9hZEZ1bmN0aW9uOnRoaXMudXBsb2FkVXZzLFxuICAgICAgICAgICAgb2Zmc2V0OjBcbiAgICAgICAgfSxcbiAgICAgICAgLy8gYWxwaGFEYXRhXG4gICAgICAgIHtcbiAgICAgICAgICAgIGF0dHJpYnV0ZTp0aGlzLnNoYWRlci5hdHRyaWJ1dGVzLmFDb2xvcixcbiAgICAgICAgICAgIHNpemU6MSxcbiAgICAgICAgICAgIHVwbG9hZEZ1bmN0aW9uOnRoaXMudXBsb2FkQWxwaGEsXG4gICAgICAgICAgICBvZmZzZXQ6MFxuICAgICAgICB9XG4gICAgXTtcbn07XG5cbi8qKlxuICogU3RhcnRzIGEgbmV3IHBhcnRpY2xlIGJhdGNoLlxuICpcbiAqL1xuUGFydGljbGVSZW5kZXJlci5wcm90b3R5cGUuc3RhcnQgPSBmdW5jdGlvbiAoKVxue1xuICAgIHZhciBnbCA9IHRoaXMucmVuZGVyZXIuZ2w7XG5cbiAgICAvLyBiaW5kIHRoZSBtYWluIHRleHR1cmVcbiAgICBnbC5hY3RpdmVUZXh0dXJlKGdsLlRFWFRVUkUwKTtcblxuICAgIC8vIGJpbmQgdGhlIGJ1ZmZlcnNcblxuICAgIGdsLmJpbmRCdWZmZXIoZ2wuRUxFTUVOVF9BUlJBWV9CVUZGRVIsIHRoaXMuaW5kZXhCdWZmZXIpO1xuXG4gICAgdmFyIHNoYWRlciA9IHRoaXMuc2hhZGVyO1xuXG4gICAgdGhpcy5yZW5kZXJlci5zaGFkZXJNYW5hZ2VyLnNldFNoYWRlcihzaGFkZXIpO1xufTtcblxuXG4vKipcbiAqIFJlbmRlcnMgdGhlIHBhcnRpY2xlIGNvbnRhaW5lciBvYmplY3QuXG4gKlxuICogQHBhcmFtIGNvbnRhaW5lciB7UElYSS5QYXJ0aWNsZUNvbnRhaW5lcn0gVGhlIGNvbnRhaW5lciB0byByZW5kZXIgdXNpbmcgdGhpcyBQYXJ0aWNsZVJlbmRlcmVyXG4gKi9cblBhcnRpY2xlUmVuZGVyZXIucHJvdG90eXBlLnJlbmRlciA9IGZ1bmN0aW9uIChjb250YWluZXIpXG57XG4gICAgdmFyIGNoaWxkcmVuID0gY29udGFpbmVyLmNoaWxkcmVuLFxuICAgICAgICB0b3RhbENoaWxkcmVuID0gY2hpbGRyZW4ubGVuZ3RoLFxuICAgICAgICBtYXhTaXplID0gY29udGFpbmVyLl9tYXhTaXplLFxuICAgICAgICBiYXRjaFNpemUgPSBjb250YWluZXIuX2JhdGNoU2l6ZTtcblxuICAgIGlmKHRvdGFsQ2hpbGRyZW4gPT09IDApXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIGVsc2UgaWYodG90YWxDaGlsZHJlbiA+IG1heFNpemUpXG4gICAge1xuICAgICAgICB0b3RhbENoaWxkcmVuID0gbWF4U2l6ZTtcbiAgICB9XG5cbiAgICBpZighY29udGFpbmVyLl9idWZmZXJzKVxuICAgIHtcbiAgICAgICAgY29udGFpbmVyLl9idWZmZXJzID0gdGhpcy5nZW5lcmF0ZUJ1ZmZlcnMoIGNvbnRhaW5lciApO1xuICAgIH1cblxuICAgIC8vIGlmIHRoZSB1dnMgaGF2ZSBub3QgdXBkYXRlZCB0aGVuIG5vIHBvaW50IHJlbmRlcmluZyBqdXN0IHlldCFcbiAgICB0aGlzLnJlbmRlcmVyLmJsZW5kTW9kZU1hbmFnZXIuc2V0QmxlbmRNb2RlKGNvbnRhaW5lci5ibGVuZE1vZGUpO1xuXG4gICAgdmFyIGdsID0gdGhpcy5yZW5kZXJlci5nbDtcblxuICAgIHZhciBtID0gIGNvbnRhaW5lci53b3JsZFRyYW5zZm9ybS5jb3B5KCB0aGlzLnRlbXBNYXRyaXggKTtcbiAgICBtLnByZXBlbmQoIHRoaXMucmVuZGVyZXIuY3VycmVudFJlbmRlclRhcmdldC5wcm9qZWN0aW9uTWF0cml4ICk7XG4gICAgZ2wudW5pZm9ybU1hdHJpeDNmdih0aGlzLnNoYWRlci51bmlmb3Jtcy5wcm9qZWN0aW9uTWF0cml4Ll9sb2NhdGlvbiwgZmFsc2UsIG0udG9BcnJheSh0cnVlKSk7XG4gICAgZ2wudW5pZm9ybTFmKHRoaXMuc2hhZGVyLnVuaWZvcm1zLnVBbHBoYS5fbG9jYXRpb24sIGNvbnRhaW5lci53b3JsZEFscGhhKTtcblxuXG4gICAgLy8gbWFrZSBzdXJlIHRoZSB0ZXh0dXJlIGlzIGJvdW5kLi5cbiAgICB2YXIgYmFzZVRleHR1cmUgPSBjaGlsZHJlblswXS5fdGV4dHVyZS5iYXNlVGV4dHVyZTtcblxuICAgIGlmICghYmFzZVRleHR1cmUuX2dsVGV4dHVyZXNbZ2wuaWRdKVxuICAgIHtcbiAgICAgICAgLy8gaWYgdGhlIHRleHR1cmUgaGFzIG5vdCB1cGRhdGVkIHRoZW4gbGV0cyBub3QgdXBsb2FkIGFueSBzdGF0aWMgcHJvcGVydGllc1xuICAgICAgICBpZighdGhpcy5yZW5kZXJlci51cGRhdGVUZXh0dXJlKGJhc2VUZXh0dXJlKSlcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYoIWNvbnRhaW5lci5fcHJvcGVydGllc1swXSB8fCAhY29udGFpbmVyLl9wcm9wZXJ0aWVzWzNdKVxuICAgICAgICB7XG4gICAgICAgICAgICBjb250YWluZXIuX2J1ZmZlclRvVXBkYXRlID0gMDtcbiAgICAgICAgfVxuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICBnbC5iaW5kVGV4dHVyZShnbC5URVhUVVJFXzJELCBiYXNlVGV4dHVyZS5fZ2xUZXh0dXJlc1tnbC5pZF0pO1xuICAgIH1cblxuICAgIC8vIG5vdyBsZXRzIHVwbG9hZCBhbmQgcmVuZGVyIHRoZSBidWZmZXJzLi5cbiAgICBmb3IgKHZhciBpID0gMCwgaiA9IDA7IGkgPCB0b3RhbENoaWxkcmVuOyBpICs9IGJhdGNoU2l6ZSwgaiArPSAxKVxuICAgIHtcbiAgICAgICAgdmFyIGFtb3VudCA9ICggdG90YWxDaGlsZHJlbiAtIGkpO1xuICAgICAgICBpZihhbW91bnQgPiBiYXRjaFNpemUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGFtb3VudCA9IGJhdGNoU2l6ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBidWZmZXIgPSBjb250YWluZXIuX2J1ZmZlcnNbal07XG5cbiAgICAgICAgLy8gd2UgYWx3YXlzIHVwbG9hZCB0aGUgZHluYW1pY1xuICAgICAgICBidWZmZXIudXBsb2FkRHluYW1pYyhjaGlsZHJlbiwgaSwgYW1vdW50KTtcblxuICAgICAgICAvLyB3ZSBvbmx5IHVwbG9hZCB0aGUgc3RhdGljIGNvbnRlbnQgd2hlbiB3ZSBoYXZlIHRvIVxuICAgICAgICBpZihjb250YWluZXIuX2J1ZmZlclRvVXBkYXRlID09PSBqKVxuICAgICAgICB7XG4gICAgICAgICAgICBidWZmZXIudXBsb2FkU3RhdGljKGNoaWxkcmVuLCBpLCBhbW91bnQpO1xuICAgICAgICAgICAgY29udGFpbmVyLl9idWZmZXJUb1VwZGF0ZSA9IGogKyAxO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gYmluZCB0aGUgYnVmZmVyXG4gICAgICAgIGJ1ZmZlci5iaW5kKCB0aGlzLnNoYWRlciApO1xuXG4gICAgICAgICAvLyBub3cgZHJhdyB0aG9zZSBzdWNrYXMhXG4gICAgICAgIGdsLmRyYXdFbGVtZW50cyhnbC5UUklBTkdMRVMsIGFtb3VudCAqIDYsIGdsLlVOU0lHTkVEX1NIT1JULCAwKTtcbiAgICAgICAgdGhpcy5yZW5kZXJlci5kcmF3Q291bnQrKztcbiAgICB9XG59O1xuXG4vKipcbiAqIENyZWF0ZXMgb25lIHBhcnRpY2xlIGJ1ZmZlciBmb3IgZWFjaCBjaGlsZCBpbiB0aGUgY29udGFpbmVyIHdlIHdhbnQgdG8gcmVuZGVyIGFuZCB1cGRhdGVzIGludGVybmFsIHByb3BlcnRpZXNcbiAqXG4gKiBAcGFyYW0gY29udGFpbmVyIHtQSVhJLlBhcnRpY2xlQ29udGFpbmVyfSBUaGUgY29udGFpbmVyIHRvIHJlbmRlciB1c2luZyB0aGlzIFBhcnRpY2xlUmVuZGVyZXJcbiAqL1xuUGFydGljbGVSZW5kZXJlci5wcm90b3R5cGUuZ2VuZXJhdGVCdWZmZXJzID0gZnVuY3Rpb24gKGNvbnRhaW5lcilcbntcbiAgICB2YXIgZ2wgPSB0aGlzLnJlbmRlcmVyLmdsLFxuICAgICAgICBidWZmZXJzID0gW10sXG4gICAgICAgIHNpemUgPSBjb250YWluZXIuX21heFNpemUsXG4gICAgICAgIGJhdGNoU2l6ZSA9IGNvbnRhaW5lci5fYmF0Y2hTaXplLFxuICAgICAgICBkeW5hbWljUHJvcGVydHlGbGFncyA9IGNvbnRhaW5lci5fcHJvcGVydGllcyxcbiAgICAgICAgaTtcblxuICAgIGZvciAoaSA9IDA7IGkgPCBzaXplOyBpICs9IGJhdGNoU2l6ZSlcbiAgICB7XG4gICAgICAgIGJ1ZmZlcnMucHVzaChuZXcgUGFydGljbGVCdWZmZXIoZ2wsIHRoaXMucHJvcGVydGllcywgZHluYW1pY1Byb3BlcnR5RmxhZ3MsIGJhdGNoU2l6ZSkpO1xuICAgIH1cblxuICAgIHJldHVybiBidWZmZXJzO1xufTtcblxuLyoqXG4gKiBVcGxvYWRzIHRoZSB2ZXJ0aWNpZXMuXG4gKlxuICogQHBhcmFtIGNoaWxkcmVuIHtQSVhJLkRpc3BsYXlPYmplY3RbXX0gdGhlIGFycmF5IG9mIGRpc3BsYXkgb2JqZWN0cyB0byByZW5kZXJcbiAqIEBwYXJhbSBzdGFydEluZGV4IHtudW1iZXJ9IHRoZSBpbmRleCB0byBzdGFydCBmcm9tIGluIHRoZSBjaGlsZHJlbiBhcnJheVxuICogQHBhcmFtIGFtb3VudCB7bnVtYmVyfSB0aGUgYW1vdW50IG9mIGNoaWxkcmVuIHRoYXQgd2lsbCBoYXZlIHRoZWlyIHZlcnRpY2VzIHVwbG9hZGVkXG4gKiBAcGFyYW0gYXJyYXkge251bWJlcltdfVxuICogQHBhcmFtIHN0cmlkZSB7bnVtYmVyfVxuICogQHBhcmFtIG9mZnNldCB7bnVtYmVyfVxuICovXG5QYXJ0aWNsZVJlbmRlcmVyLnByb3RvdHlwZS51cGxvYWRWZXJ0aWNlcyA9IGZ1bmN0aW9uIChjaGlsZHJlbiwgc3RhcnRJbmRleCwgYW1vdW50LCBhcnJheSwgc3RyaWRlLCBvZmZzZXQpXG57XG4gICAgdmFyIHNwcml0ZSxcbiAgICAgICAgdGV4dHVyZSxcbiAgICAgICAgdHJpbSxcbiAgICAgICAgc3gsXG4gICAgICAgIHN5LFxuICAgICAgICB3MCwgdzEsIGgwLCBoMTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYW1vdW50OyBpKyspIHtcblxuICAgICAgICBzcHJpdGUgPSBjaGlsZHJlbltzdGFydEluZGV4ICsgaV07XG4gICAgICAgIHRleHR1cmUgPSBzcHJpdGUuX3RleHR1cmU7XG4gICAgICAgIHN4ID0gc3ByaXRlLnNjYWxlLng7XG4gICAgICAgIHN5ID0gc3ByaXRlLnNjYWxlLnk7XG5cbiAgICAgICAgaWYgKHRleHR1cmUudHJpbSlcbiAgICAgICAge1xuICAgICAgICAgICAgLy8gaWYgdGhlIHNwcml0ZSBpcyB0cmltbWVkIHRoZW4gd2UgbmVlZCB0byBhZGQgdGhlIGV4dHJhIHNwYWNlIGJlZm9yZSB0cmFuc2Zvcm1pbmcgdGhlIHNwcml0ZSBjb29yZHMuLlxuICAgICAgICAgICAgdHJpbSA9IHRleHR1cmUudHJpbTtcblxuICAgICAgICAgICAgdzEgPSB0cmltLnggLSBzcHJpdGUuYW5jaG9yLnggKiB0cmltLndpZHRoO1xuICAgICAgICAgICAgdzAgPSB3MSArIHRleHR1cmUuY3JvcC53aWR0aDtcblxuICAgICAgICAgICAgaDEgPSB0cmltLnkgLSBzcHJpdGUuYW5jaG9yLnkgKiB0cmltLmhlaWdodDtcbiAgICAgICAgICAgIGgwID0gaDEgKyB0ZXh0dXJlLmNyb3AuaGVpZ2h0O1xuICAgICAgICB9XG4gICAgICAgIGVsc2VcbiAgICAgICAge1xuICAgICAgICAgICAgdzAgPSAodGV4dHVyZS5fZnJhbWUud2lkdGggKSAqICgxLXNwcml0ZS5hbmNob3IueCk7XG4gICAgICAgICAgICB3MSA9ICh0ZXh0dXJlLl9mcmFtZS53aWR0aCApICogLXNwcml0ZS5hbmNob3IueDtcblxuICAgICAgICAgICAgaDAgPSB0ZXh0dXJlLl9mcmFtZS5oZWlnaHQgKiAoMS1zcHJpdGUuYW5jaG9yLnkpO1xuICAgICAgICAgICAgaDEgPSB0ZXh0dXJlLl9mcmFtZS5oZWlnaHQgKiAtc3ByaXRlLmFuY2hvci55O1xuICAgICAgICB9XG5cbiAgICAgICAgYXJyYXlbb2Zmc2V0XSA9IHcxICogc3g7XG4gICAgICAgIGFycmF5W29mZnNldCArIDFdID0gaDEgKiBzeTtcblxuICAgICAgICBhcnJheVtvZmZzZXQgKyBzdHJpZGVdID0gdzAgKiBzeDtcbiAgICAgICAgYXJyYXlbb2Zmc2V0ICsgc3RyaWRlICsgMV0gPSBoMSAqIHN5O1xuXG4gICAgICAgIGFycmF5W29mZnNldCArIHN0cmlkZSAqIDJdID0gdzAgKiBzeDtcbiAgICAgICAgYXJyYXlbb2Zmc2V0ICsgc3RyaWRlICogMiArIDFdID0gaDAgKiBzeTtcblxuICAgICAgICBhcnJheVtvZmZzZXQgKyBzdHJpZGUgKiAzXSA9IHcxICogc3g7XG4gICAgICAgIGFycmF5W29mZnNldCArIHN0cmlkZSAqIDMgKyAxXSA9IGgwICogc3k7XG5cbiAgICAgICAgb2Zmc2V0ICs9IHN0cmlkZSAqIDQ7XG4gICAgfVxuXG59O1xuXG4vKipcbiAqXG4gKiBAcGFyYW0gY2hpbGRyZW4ge1BJWEkuRGlzcGxheU9iamVjdFtdfSB0aGUgYXJyYXkgb2YgZGlzcGxheSBvYmplY3RzIHRvIHJlbmRlclxuICogQHBhcmFtIHN0YXJ0SW5kZXgge251bWJlcn0gdGhlIGluZGV4IHRvIHN0YXJ0IGZyb20gaW4gdGhlIGNoaWxkcmVuIGFycmF5XG4gKiBAcGFyYW0gYW1vdW50IHtudW1iZXJ9IHRoZSBhbW91bnQgb2YgY2hpbGRyZW4gdGhhdCB3aWxsIGhhdmUgdGhlaXIgcG9zaXRpb25zIHVwbG9hZGVkXG4gKiBAcGFyYW0gYXJyYXkge251bWJlcltdfVxuICogQHBhcmFtIHN0cmlkZSB7bnVtYmVyfVxuICogQHBhcmFtIG9mZnNldCB7bnVtYmVyfVxuICovXG5QYXJ0aWNsZVJlbmRlcmVyLnByb3RvdHlwZS51cGxvYWRQb3NpdGlvbiA9IGZ1bmN0aW9uIChjaGlsZHJlbixzdGFydEluZGV4LCBhbW91bnQsIGFycmF5LCBzdHJpZGUsIG9mZnNldClcbntcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFtb3VudDsgaSsrKVxuICAgIHtcbiAgICAgICAgdmFyIHNwcml0ZVBvc2l0aW9uID0gY2hpbGRyZW5bc3RhcnRJbmRleCArIGldLnBvc2l0aW9uO1xuXG4gICAgICAgIGFycmF5W29mZnNldF0gPSBzcHJpdGVQb3NpdGlvbi54O1xuICAgICAgICBhcnJheVtvZmZzZXQgKyAxXSA9IHNwcml0ZVBvc2l0aW9uLnk7XG5cbiAgICAgICAgYXJyYXlbb2Zmc2V0ICsgc3RyaWRlXSA9IHNwcml0ZVBvc2l0aW9uLng7XG4gICAgICAgIGFycmF5W29mZnNldCArIHN0cmlkZSArIDFdID0gc3ByaXRlUG9zaXRpb24ueTtcblxuICAgICAgICBhcnJheVtvZmZzZXQgKyBzdHJpZGUgKiAyXSA9IHNwcml0ZVBvc2l0aW9uLng7XG4gICAgICAgIGFycmF5W29mZnNldCArIHN0cmlkZSAqIDIgKyAxXSA9IHNwcml0ZVBvc2l0aW9uLnk7XG5cbiAgICAgICAgYXJyYXlbb2Zmc2V0ICsgc3RyaWRlICogM10gPSBzcHJpdGVQb3NpdGlvbi54O1xuICAgICAgICBhcnJheVtvZmZzZXQgKyBzdHJpZGUgKiAzICsgMV0gPSBzcHJpdGVQb3NpdGlvbi55O1xuXG4gICAgICAgIG9mZnNldCArPSBzdHJpZGUgKiA0O1xuICAgIH1cblxufTtcblxuLyoqXG4gKlxuICogQHBhcmFtIGNoaWxkcmVuIHtQSVhJLkRpc3BsYXlPYmplY3RbXX0gdGhlIGFycmF5IG9mIGRpc3BsYXkgb2JqZWN0cyB0byByZW5kZXJcbiAqIEBwYXJhbSBzdGFydEluZGV4IHtudW1iZXJ9IHRoZSBpbmRleCB0byBzdGFydCBmcm9tIGluIHRoZSBjaGlsZHJlbiBhcnJheVxuICogQHBhcmFtIGFtb3VudCB7bnVtYmVyfSB0aGUgYW1vdW50IG9mIGNoaWxkcmVuIHRoYXQgd2lsbCBoYXZlIHRoZWlyIHJvdGF0aW9uIHVwbG9hZGVkXG4gKiBAcGFyYW0gYXJyYXkge251bWJlcltdfVxuICogQHBhcmFtIHN0cmlkZSB7bnVtYmVyfVxuICogQHBhcmFtIG9mZnNldCB7bnVtYmVyfVxuICovXG5QYXJ0aWNsZVJlbmRlcmVyLnByb3RvdHlwZS51cGxvYWRSb3RhdGlvbiA9IGZ1bmN0aW9uIChjaGlsZHJlbixzdGFydEluZGV4LCBhbW91bnQsIGFycmF5LCBzdHJpZGUsIG9mZnNldClcbntcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFtb3VudDsgaSsrKVxuICAgIHtcbiAgICAgICAgdmFyIHNwcml0ZVJvdGF0aW9uID0gY2hpbGRyZW5bc3RhcnRJbmRleCArIGldLnJvdGF0aW9uO1xuXG5cbiAgICAgICAgYXJyYXlbb2Zmc2V0XSA9IHNwcml0ZVJvdGF0aW9uO1xuICAgICAgICBhcnJheVtvZmZzZXQgKyBzdHJpZGVdID0gc3ByaXRlUm90YXRpb247XG4gICAgICAgIGFycmF5W29mZnNldCArIHN0cmlkZSAqIDJdID0gc3ByaXRlUm90YXRpb247XG4gICAgICAgIGFycmF5W29mZnNldCArIHN0cmlkZSAqIDNdID0gc3ByaXRlUm90YXRpb247XG5cbiAgICAgICAgb2Zmc2V0ICs9IHN0cmlkZSAqIDQ7XG4gICAgfVxufTtcblxuLyoqXG4gKlxuICogQHBhcmFtIGNoaWxkcmVuIHtQSVhJLkRpc3BsYXlPYmplY3RbXX0gdGhlIGFycmF5IG9mIGRpc3BsYXkgb2JqZWN0cyB0byByZW5kZXJcbiAqIEBwYXJhbSBzdGFydEluZGV4IHtudW1iZXJ9IHRoZSBpbmRleCB0byBzdGFydCBmcm9tIGluIHRoZSBjaGlsZHJlbiBhcnJheVxuICogQHBhcmFtIGFtb3VudCB7bnVtYmVyfSB0aGUgYW1vdW50IG9mIGNoaWxkcmVuIHRoYXQgd2lsbCBoYXZlIHRoZWlyIFV2cyB1cGxvYWRlZFxuICogQHBhcmFtIGFycmF5IHtudW1iZXJbXX1cbiAqIEBwYXJhbSBzdHJpZGUge251bWJlcn1cbiAqIEBwYXJhbSBvZmZzZXQge251bWJlcn1cbiAqL1xuUGFydGljbGVSZW5kZXJlci5wcm90b3R5cGUudXBsb2FkVXZzID0gZnVuY3Rpb24gKGNoaWxkcmVuLHN0YXJ0SW5kZXgsIGFtb3VudCwgYXJyYXksIHN0cmlkZSwgb2Zmc2V0KVxue1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYW1vdW50OyBpKyspXG4gICAge1xuICAgICAgICB2YXIgdGV4dHVyZVV2cyA9IGNoaWxkcmVuW3N0YXJ0SW5kZXggKyBpXS5fdGV4dHVyZS5fdXZzO1xuXG4gICAgICAgIGlmICh0ZXh0dXJlVXZzKVxuICAgICAgICB7XG4gICAgICAgICAgICBhcnJheVtvZmZzZXRdID0gdGV4dHVyZVV2cy54MDtcbiAgICAgICAgICAgIGFycmF5W29mZnNldCArIDFdID0gdGV4dHVyZVV2cy55MDtcblxuICAgICAgICAgICAgYXJyYXlbb2Zmc2V0ICsgc3RyaWRlXSA9IHRleHR1cmVVdnMueDE7XG4gICAgICAgICAgICBhcnJheVtvZmZzZXQgKyBzdHJpZGUgKyAxXSA9IHRleHR1cmVVdnMueTE7XG5cbiAgICAgICAgICAgIGFycmF5W29mZnNldCArIHN0cmlkZSAqIDJdID0gdGV4dHVyZVV2cy54MjtcbiAgICAgICAgICAgIGFycmF5W29mZnNldCArIHN0cmlkZSAqIDIgKyAxXSA9IHRleHR1cmVVdnMueTI7XG5cbiAgICAgICAgICAgIGFycmF5W29mZnNldCArIHN0cmlkZSAqIDNdID0gdGV4dHVyZVV2cy54MztcbiAgICAgICAgICAgIGFycmF5W29mZnNldCArIHN0cmlkZSAqIDMgKyAxXSA9IHRleHR1cmVVdnMueTM7XG5cbiAgICAgICAgICAgIG9mZnNldCArPSBzdHJpZGUgKiA0O1xuICAgICAgICB9XG4gICAgICAgIGVsc2VcbiAgICAgICAge1xuICAgICAgICAgICAgLy9UT0RPIHlvdSBrbm93IHRoaXMgY2FuIGJlIGVhc2llciFcbiAgICAgICAgICAgIGFycmF5W29mZnNldF0gPSAwO1xuICAgICAgICAgICAgYXJyYXlbb2Zmc2V0ICsgMV0gPSAwO1xuXG4gICAgICAgICAgICBhcnJheVtvZmZzZXQgKyBzdHJpZGVdID0gMDtcbiAgICAgICAgICAgIGFycmF5W29mZnNldCArIHN0cmlkZSArIDFdID0gMDtcblxuICAgICAgICAgICAgYXJyYXlbb2Zmc2V0ICsgc3RyaWRlICogMl0gPSAwO1xuICAgICAgICAgICAgYXJyYXlbb2Zmc2V0ICsgc3RyaWRlICogMiArIDFdID0gMDtcblxuICAgICAgICAgICAgYXJyYXlbb2Zmc2V0ICsgc3RyaWRlICogM10gPSAwO1xuICAgICAgICAgICAgYXJyYXlbb2Zmc2V0ICsgc3RyaWRlICogMyArIDFdID0gMDtcblxuICAgICAgICAgICAgb2Zmc2V0ICs9IHN0cmlkZSAqIDQ7XG4gICAgICAgIH1cbiAgICB9XG59O1xuXG4vKipcbiAqXG4gKiBAcGFyYW0gY2hpbGRyZW4ge1BJWEkuRGlzcGxheU9iamVjdFtdfSB0aGUgYXJyYXkgb2YgZGlzcGxheSBvYmplY3RzIHRvIHJlbmRlclxuICogQHBhcmFtIHN0YXJ0SW5kZXgge251bWJlcn0gdGhlIGluZGV4IHRvIHN0YXJ0IGZyb20gaW4gdGhlIGNoaWxkcmVuIGFycmF5XG4gKiBAcGFyYW0gYW1vdW50IHtudW1iZXJ9IHRoZSBhbW91bnQgb2YgY2hpbGRyZW4gdGhhdCB3aWxsIGhhdmUgdGhlaXIgYWxwaGEgdXBsb2FkZWRcbiAqIEBwYXJhbSBhcnJheSB7bnVtYmVyW119XG4gKiBAcGFyYW0gc3RyaWRlIHtudW1iZXJ9XG4gKiBAcGFyYW0gb2Zmc2V0IHtudW1iZXJ9XG4gKi9cblBhcnRpY2xlUmVuZGVyZXIucHJvdG90eXBlLnVwbG9hZEFscGhhID0gZnVuY3Rpb24gKGNoaWxkcmVuLHN0YXJ0SW5kZXgsIGFtb3VudCwgYXJyYXksIHN0cmlkZSwgb2Zmc2V0KVxue1xuICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFtb3VudDsgaSsrKVxuICAgICB7XG4gICAgICAgIHZhciBzcHJpdGVBbHBoYSA9IGNoaWxkcmVuW3N0YXJ0SW5kZXggKyBpXS5hbHBoYTtcblxuICAgICAgICBhcnJheVtvZmZzZXRdID0gc3ByaXRlQWxwaGE7XG4gICAgICAgIGFycmF5W29mZnNldCArIHN0cmlkZV0gPSBzcHJpdGVBbHBoYTtcbiAgICAgICAgYXJyYXlbb2Zmc2V0ICsgc3RyaWRlICogMl0gPSBzcHJpdGVBbHBoYTtcbiAgICAgICAgYXJyYXlbb2Zmc2V0ICsgc3RyaWRlICogM10gPSBzcHJpdGVBbHBoYTtcblxuICAgICAgICBvZmZzZXQgKz0gc3RyaWRlICogNDtcbiAgICB9XG59O1xuXG5cbi8qKlxuICogRGVzdHJveXMgdGhlIFBhcnRpY2xlUmVuZGVyZXIuXG4gKlxuICovXG5QYXJ0aWNsZVJlbmRlcmVyLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKClcbntcbiAgICBpZiAodGhpcy5yZW5kZXJlci5nbCkge1xuICAgICAgICB0aGlzLnJlbmRlcmVyLmdsLmRlbGV0ZUJ1ZmZlcih0aGlzLmluZGV4QnVmZmVyKTtcbiAgICB9XG5cbiAgICBPYmplY3RSZW5kZXJlci5wcm90b3R5cGUuZGVzdHJveS5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuXG4gICAgdGhpcy5zaGFkZXIuZGVzdHJveSgpO1xuXG4gICAgdGhpcy5pbmRpY2VzID0gbnVsbDtcbiAgICB0aGlzLnRlbXBNYXRyaXggPSBudWxsO1xufTtcbiIsInZhciBUZXh0dXJlU2hhZGVyID0gcmVxdWlyZSgnLi4vLi4vcmVuZGVyZXJzL3dlYmdsL3NoYWRlcnMvVGV4dHVyZVNoYWRlcicpO1xuXG4vKipcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5UZXh0dXJlU2hhZGVyXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIHNoYWRlck1hbmFnZXIge1NoYWRlck1hbmFnZXJ9IFRoZSB3ZWJnbCBzaGFkZXIgbWFuYWdlciB0aGlzIHNoYWRlciB3b3JrcyBmb3IuXG4gKi9cbmZ1bmN0aW9uIFBhcnRpY2xlU2hhZGVyKHNoYWRlck1hbmFnZXIpXG57XG4gICAgVGV4dHVyZVNoYWRlci5jYWxsKHRoaXMsXG4gICAgICAgIHNoYWRlck1hbmFnZXIsXG4gICAgICAgIC8vIHZlcnRleCBzaGFkZXJcbiAgICAgICAgW1xuICAgICAgICAgICAgJ2F0dHJpYnV0ZSB2ZWMyIGFWZXJ0ZXhQb3NpdGlvbjsnLFxuICAgICAgICAgICAgJ2F0dHJpYnV0ZSB2ZWMyIGFUZXh0dXJlQ29vcmQ7JyxcbiAgICAgICAgICAgICdhdHRyaWJ1dGUgZmxvYXQgYUNvbG9yOycsXG5cbiAgICAgICAgICAgICdhdHRyaWJ1dGUgdmVjMiBhUG9zaXRpb25Db29yZDsnLFxuICAgICAgICAgICAgJ2F0dHJpYnV0ZSB2ZWMyIGFTY2FsZTsnLFxuICAgICAgICAgICAgJ2F0dHJpYnV0ZSBmbG9hdCBhUm90YXRpb247JyxcblxuICAgICAgICAgICAgJ3VuaWZvcm0gbWF0MyBwcm9qZWN0aW9uTWF0cml4OycsXG5cbiAgICAgICAgICAgICd2YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDsnLFxuICAgICAgICAgICAgJ3ZhcnlpbmcgZmxvYXQgdkNvbG9yOycsXG5cbiAgICAgICAgICAgICd2b2lkIG1haW4odm9pZCl7JyxcbiAgICAgICAgICAgICcgICB2ZWMyIHYgPSBhVmVydGV4UG9zaXRpb247JyxcblxuICAgICAgICAgICAgJyAgIHYueCA9IChhVmVydGV4UG9zaXRpb24ueCkgKiBjb3MoYVJvdGF0aW9uKSAtIChhVmVydGV4UG9zaXRpb24ueSkgKiBzaW4oYVJvdGF0aW9uKTsnLFxuICAgICAgICAgICAgJyAgIHYueSA9IChhVmVydGV4UG9zaXRpb24ueCkgKiBzaW4oYVJvdGF0aW9uKSArIChhVmVydGV4UG9zaXRpb24ueSkgKiBjb3MoYVJvdGF0aW9uKTsnLFxuICAgICAgICAgICAgJyAgIHYgPSB2ICsgYVBvc2l0aW9uQ29vcmQ7JyxcblxuICAgICAgICAgICAgJyAgIGdsX1Bvc2l0aW9uID0gdmVjNCgocHJvamVjdGlvbk1hdHJpeCAqIHZlYzModiwgMS4wKSkueHksIDAuMCwgMS4wKTsnLFxuXG4gICAgICAgICAgICAnICAgdlRleHR1cmVDb29yZCA9IGFUZXh0dXJlQ29vcmQ7JyxcbiAgICAgICAgICAgICcgICB2Q29sb3IgPSBhQ29sb3I7JyxcbiAgICAgICAgICAgICd9J1xuICAgICAgICBdLmpvaW4oJ1xcbicpLFxuICAgICAgICAvLyBoZWxsb1xuICAgICAgICAgW1xuICAgICAgICAgICAgJ3ByZWNpc2lvbiBsb3dwIGZsb2F0OycsXG5cbiAgICAgICAgICAgICd2YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDsnLFxuICAgICAgICAgICAgJ3ZhcnlpbmcgZmxvYXQgdkNvbG9yOycsXG5cbiAgICAgICAgICAgICd1bmlmb3JtIHNhbXBsZXIyRCB1U2FtcGxlcjsnLFxuICAgICAgICAgICAgJ3VuaWZvcm0gZmxvYXQgdUFscGhhOycsXG5cbiAgICAgICAgICAgICd2b2lkIG1haW4odm9pZCl7JyxcbiAgICAgICAgICAgICcgIHZlYzQgY29sb3IgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZUZXh0dXJlQ29vcmQpICogdkNvbG9yICogdUFscGhhOycsXG4gICAgICAgICAgICAnICBpZiAoY29sb3IuYSA9PSAwLjApIGRpc2NhcmQ7JyxcbiAgICAgICAgICAgICcgIGdsX0ZyYWdDb2xvciA9IGNvbG9yOycsXG4gICAgICAgICAgICAnfSdcbiAgICAgICAgXS5qb2luKCdcXG4nKSxcbiAgICAgICAgLy8gY3VzdG9tIHVuaWZvcm1zXG4gICAgICAgIHtcbiAgICAgICAgICAgIHVBbHBoYTogIHsgdHlwZTogJzFmJywgdmFsdWU6IDEgfVxuICAgICAgICB9LFxuICAgICAgICAvLyBjdXN0b20gYXR0cmlidXRlc1xuICAgICAgICB7XG4gICAgICAgICAgICBhUG9zaXRpb25Db29yZDogMCxcbiAgICAgICAgICAgLy8gYVNjYWxlOiAgICAgICAgIDAsXG4gICAgICAgICAgICBhUm90YXRpb246ICAgICAgMFxuICAgICAgICB9XG4gICAgKTtcblxuICAgIC8vIFRFTVAgSEFDS1xuXG59XG5cblBhcnRpY2xlU2hhZGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoVGV4dHVyZVNoYWRlci5wcm90b3R5cGUpO1xuUGFydGljbGVTaGFkZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gUGFydGljbGVTaGFkZXI7XG5cbm1vZHVsZS5leHBvcnRzID0gUGFydGljbGVTaGFkZXI7XG4iLCJ2YXIgdXRpbHMgPSByZXF1aXJlKCcuLi91dGlscycpLFxuICAgIG1hdGggPSByZXF1aXJlKCcuLi9tYXRoJyksXG4gICAgQ09OU1QgPSByZXF1aXJlKCcuLi9jb25zdCcpLFxuICAgIEV2ZW50RW1pdHRlciA9IHJlcXVpcmUoJ2V2ZW50ZW1pdHRlcjMnKTtcblxuLyoqXG4gKiBUaGUgQ2FudmFzUmVuZGVyZXIgZHJhd3MgdGhlIHNjZW5lIGFuZCBhbGwgaXRzIGNvbnRlbnQgb250byBhIDJkIGNhbnZhcy4gVGhpcyByZW5kZXJlciBzaG91bGQgYmUgdXNlZCBmb3IgYnJvd3NlcnMgdGhhdCBkbyBub3Qgc3VwcG9ydCB3ZWJHTC5cbiAqIERvbid0IGZvcmdldCB0byBhZGQgdGhlIENhbnZhc1JlbmRlcmVyLnZpZXcgdG8geW91ciBET00gb3IgeW91IHdpbGwgbm90IHNlZSBhbnl0aGluZyA6KVxuICpcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqIEBwYXJhbSBzeXN0ZW0ge3N0cmluZ30gVGhlIG5hbWUgb2YgdGhlIHN5c3RlbSB0aGlzIHJlbmRlcmVyIGlzIGZvci5cbiAqIEBwYXJhbSBbd2lkdGg9ODAwXSB7bnVtYmVyfSB0aGUgd2lkdGggb2YgdGhlIGNhbnZhcyB2aWV3XG4gKiBAcGFyYW0gW2hlaWdodD02MDBdIHtudW1iZXJ9IHRoZSBoZWlnaHQgb2YgdGhlIGNhbnZhcyB2aWV3XG4gKiBAcGFyYW0gW29wdGlvbnNdIHtvYmplY3R9IFRoZSBvcHRpb25hbCByZW5kZXJlciBwYXJhbWV0ZXJzXG4gKiBAcGFyYW0gW29wdGlvbnMudmlld10ge0hUTUxDYW52YXNFbGVtZW50fSB0aGUgY2FudmFzIHRvIHVzZSBhcyBhIHZpZXcsIG9wdGlvbmFsXG4gKiBAcGFyYW0gW29wdGlvbnMudHJhbnNwYXJlbnQ9ZmFsc2VdIHtib29sZWFufSBJZiB0aGUgcmVuZGVyIHZpZXcgaXMgdHJhbnNwYXJlbnQsIGRlZmF1bHQgZmFsc2VcbiAqIEBwYXJhbSBbb3B0aW9ucy5hdXRvUmVzaXplPWZhbHNlXSB7Ym9vbGVhbn0gSWYgdGhlIHJlbmRlciB2aWV3IGlzIGF1dG9tYXRpY2FsbHkgcmVzaXplZCwgZGVmYXVsdCBmYWxzZVxuICogQHBhcmFtIFtvcHRpb25zLmFudGlhbGlhcz1mYWxzZV0ge2Jvb2xlYW59IHNldHMgYW50aWFsaWFzIChvbmx5IGFwcGxpY2FibGUgaW4gY2hyb21lIGF0IHRoZSBtb21lbnQpXG4gKiBAcGFyYW0gW29wdGlvbnMucmVzb2x1dGlvbj0xXSB7bnVtYmVyfSB0aGUgcmVzb2x1dGlvbiBvZiB0aGUgcmVuZGVyZXIgcmV0aW5hIHdvdWxkIGJlIDJcbiAqIEBwYXJhbSBbb3B0aW9ucy5jbGVhckJlZm9yZVJlbmRlcj10cnVlXSB7Ym9vbGVhbn0gVGhpcyBzZXRzIGlmIHRoZSBDYW52YXNSZW5kZXJlciB3aWxsIGNsZWFyIHRoZSBjYW52YXMgb3JcbiAqICAgICAgbm90IGJlZm9yZSB0aGUgbmV3IHJlbmRlciBwYXNzLlxuICogQHBhcmFtIFtvcHRpb25zLmJhY2tncm91bmRDb2xvcj0weDAwMDAwMF0ge251bWJlcn0gVGhlIGJhY2tncm91bmQgY29sb3Igb2YgdGhlIHJlbmRlcmVkIGFyZWEgKHNob3duIGlmIG5vdCB0cmFuc3BhcmVudCkuXG4gKiBAcGFyYW0gW29wdGlvbnMucm91bmRQaXhlbHM9ZmFsc2VdIHtib29sZWFufSBJZiB0cnVlIFBpeGkgd2lsbCBNYXRoLmZsb29yKCkgeC95IHZhbHVlcyB3aGVuIHJlbmRlcmluZywgc3RvcHBpbmcgcGl4ZWwgaW50ZXJwb2xhdGlvbi5cbiAqL1xuZnVuY3Rpb24gU3lzdGVtUmVuZGVyZXIoc3lzdGVtLCB3aWR0aCwgaGVpZ2h0LCBvcHRpb25zKVxue1xuICAgIEV2ZW50RW1pdHRlci5jYWxsKHRoaXMpO1xuXG4gICAgdXRpbHMuc2F5SGVsbG8oc3lzdGVtKTtcblxuICAgIC8vIHByZXBhcmUgb3B0aW9uc1xuICAgIGlmIChvcHRpb25zKVxuICAgIHtcbiAgICAgICAgZm9yICh2YXIgaSBpbiBDT05TVC5ERUZBVUxUX1JFTkRFUl9PUFRJT05TKVxuICAgICAgICB7XG4gICAgICAgICAgICBpZiAodHlwZW9mIG9wdGlvbnNbaV0gPT09ICd1bmRlZmluZWQnKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIG9wdGlvbnNbaV0gPSBDT05TVC5ERUZBVUxUX1JFTkRFUl9PUFRJT05TW2ldO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIG9wdGlvbnMgPSBDT05TVC5ERUZBVUxUX1JFTkRFUl9PUFRJT05TO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoZSB0eXBlIG9mIHRoZSByZW5kZXJlci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCBQSVhJLlJFTkRFUkVSX1RZUEUuVU5LTk9XTlxuICAgICAqIEBzZWUgUElYSS5SRU5ERVJFUl9UWVBFXG4gICAgICovXG4gICAgdGhpcy50eXBlID0gQ09OU1QuUkVOREVSRVJfVFlQRS5VTktOT1dOO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHdpZHRoIG9mIHRoZSBjYW52YXMgdmlld1xuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDgwMFxuICAgICAqL1xuICAgIHRoaXMud2lkdGggPSB3aWR0aCB8fCA4MDA7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgaGVpZ2h0IG9mIHRoZSBjYW52YXMgdmlld1xuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDYwMFxuICAgICAqL1xuICAgIHRoaXMuaGVpZ2h0ID0gaGVpZ2h0IHx8IDYwMDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBjYW52YXMgZWxlbWVudCB0aGF0IGV2ZXJ5dGhpbmcgaXMgZHJhd24gdG9cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge0hUTUxDYW52YXNFbGVtZW50fVxuICAgICAqL1xuICAgIHRoaXMudmlldyA9IG9wdGlvbnMudmlldyB8fCBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdjYW52YXMnKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSByZXNvbHV0aW9uIG9mIHRoZSByZW5kZXJlclxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDFcbiAgICAgKi9cbiAgICB0aGlzLnJlc29sdXRpb24gPSBvcHRpb25zLnJlc29sdXRpb247XG5cbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIHRoZSByZW5kZXIgdmlldyBpcyB0cmFuc3BhcmVudFxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKi9cbiAgICB0aGlzLnRyYW5zcGFyZW50ID0gb3B0aW9ucy50cmFuc3BhcmVudDtcblxuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgdGhlIHJlbmRlciB2aWV3IHNob3VsZCBiZSByZXNpemVkIGF1dG9tYXRpY2FsbHlcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICovXG4gICAgdGhpcy5hdXRvUmVzaXplID0gb3B0aW9ucy5hdXRvUmVzaXplIHx8IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogVHJhY2tzIHRoZSBibGVuZCBtb2RlcyB1c2VmdWwgZm9yIHRoaXMgcmVuZGVyZXIuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtvYmplY3Q8c3RyaW5nLCBtaXhlZD59XG4gICAgICovXG4gICAgdGhpcy5ibGVuZE1vZGVzID0gbnVsbDtcblxuICAgIC8qKlxuICAgICAqIFRoZSB2YWx1ZSBvZiB0aGUgcHJlc2VydmVEcmF3aW5nQnVmZmVyIGZsYWcgYWZmZWN0cyB3aGV0aGVyIG9yIG5vdCB0aGUgY29udGVudHMgb2YgdGhlIHN0ZW5jaWwgYnVmZmVyIGlzIHJldGFpbmVkIGFmdGVyIHJlbmRlcmluZy5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICovXG4gICAgdGhpcy5wcmVzZXJ2ZURyYXdpbmdCdWZmZXIgPSBvcHRpb25zLnByZXNlcnZlRHJhd2luZ0J1ZmZlcjtcblxuICAgIC8qKlxuICAgICAqIFRoaXMgc2V0cyBpZiB0aGUgQ2FudmFzUmVuZGVyZXIgd2lsbCBjbGVhciB0aGUgY2FudmFzIG9yIG5vdCBiZWZvcmUgdGhlIG5ldyByZW5kZXIgcGFzcy5cbiAgICAgKiBJZiB0aGUgc2NlbmUgaXMgTk9UIHRyYW5zcGFyZW50IFBpeGkgd2lsbCB1c2UgYSBjYW52YXMgc2l6ZWQgZmlsbFJlY3Qgb3BlcmF0aW9uIGV2ZXJ5IGZyYW1lIHRvIHNldCB0aGUgY2FudmFzIGJhY2tncm91bmQgY29sb3IuXG4gICAgICogSWYgdGhlIHNjZW5lIGlzIHRyYW5zcGFyZW50IFBpeGkgd2lsbCB1c2UgY2xlYXJSZWN0IHRvIGNsZWFyIHRoZSBjYW52YXMgZXZlcnkgZnJhbWUuXG4gICAgICogRGlzYWJsZSB0aGlzIGJ5IHNldHRpbmcgdGhpcyB0byBmYWxzZS4gRm9yIGV4YW1wbGUgaWYgeW91ciBnYW1lIGhhcyBhIGNhbnZhcyBmaWxsaW5nIGJhY2tncm91bmQgaW1hZ2UgeW91IG9mdGVuIGRvbid0IG5lZWQgdGhpcyBzZXQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqIEBkZWZhdWx0XG4gICAgICovXG4gICAgdGhpcy5jbGVhckJlZm9yZVJlbmRlciA9IG9wdGlvbnMuY2xlYXJCZWZvcmVSZW5kZXI7XG5cbiAgICAvKipcbiAgICAgKiBJZiB0cnVlIFBpeGkgd2lsbCBNYXRoLmZsb29yKCkgeC95IHZhbHVlcyB3aGVuIHJlbmRlcmluZywgc3RvcHBpbmcgcGl4ZWwgaW50ZXJwb2xhdGlvbi5cbiAgICAgKiBIYW5keSBmb3IgY3Jpc3AgcGl4ZWwgYXJ0IGFuZCBzcGVlZCBvbiBsZWdhY3kgZGV2aWNlcy5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICovXG4gICAgdGhpcy5yb3VuZFBpeGVscyA9IG9wdGlvbnMucm91bmRQaXhlbHM7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYmFja2dyb3VuZCBjb2xvciBhcyBhIG51bWJlci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX2JhY2tncm91bmRDb2xvciA9IDB4MDAwMDAwO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGJhY2tncm91bmQgY29sb3IgYXMgYW4gW1IsIEcsIEJdIGFycmF5LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyW119XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9iYWNrZ3JvdW5kQ29sb3JSZ2JhID0gWzAsIDAsIDAsIDBdO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGJhY2tncm91bmQgY29sb3IgYXMgYSBzdHJpbmcuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtzdHJpbmd9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9iYWNrZ3JvdW5kQ29sb3JTdHJpbmcgPSAnIzAwMDAwMCc7XG5cbiAgICB0aGlzLmJhY2tncm91bmRDb2xvciA9IG9wdGlvbnMuYmFja2dyb3VuZENvbG9yIHx8IHRoaXMuX2JhY2tncm91bmRDb2xvcjsgLy8gcnVuIGJnIGNvbG9yIHNldHRlclxuXG4gICAgLyoqXG4gICAgICogVGhpcyB0ZW1wb3JhcnkgZGlzcGxheSBvYmplY3QgdXNlZCBhcyB0aGUgcGFyZW50IG9mIHRoZSBjdXJyZW50bHkgYmVpbmcgcmVuZGVyZWQgaXRlbVxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5EaXNwbGF5T2JqZWN0fVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fdGVtcERpc3BsYXlPYmplY3RQYXJlbnQgPSB7d29ybGRUcmFuc2Zvcm06bmV3IG1hdGguTWF0cml4KCksIHdvcmxkQWxwaGE6MSwgY2hpbGRyZW46W119O1xuXG4gICAgLyoqXG4gICAgICogVGhlIGxhc3Qgcm9vdCBvYmplY3QgdGhhdCB0aGUgcmVuZGVyZXIgdHJpZWQgdG8gcmVuZGVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5EaXNwbGF5T2JqZWN0fVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fbGFzdE9iamVjdFJlbmRlcmVkID0gdGhpcy5fdGVtcERpc3BsYXlPYmplY3RQYXJlbnQ7XG59XG5cbi8vIGNvbnN0cnVjdG9yXG5TeXN0ZW1SZW5kZXJlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKEV2ZW50RW1pdHRlci5wcm90b3R5cGUpO1xuU3lzdGVtUmVuZGVyZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gU3lzdGVtUmVuZGVyZXI7XG5tb2R1bGUuZXhwb3J0cyA9IFN5c3RlbVJlbmRlcmVyO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhTeXN0ZW1SZW5kZXJlci5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBUaGUgYmFja2dyb3VuZCBjb2xvciB0byBmaWxsIGlmIG5vdCB0cmFuc3BhcmVudFxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLlN5c3RlbVJlbmRlcmVyI1xuICAgICAqL1xuICAgIGJhY2tncm91bmRDb2xvcjpcbiAgICB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2JhY2tncm91bmRDb2xvcjtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLl9iYWNrZ3JvdW5kQ29sb3IgPSB2YWw7XG4gICAgICAgICAgICB0aGlzLl9iYWNrZ3JvdW5kQ29sb3JTdHJpbmcgPSB1dGlscy5oZXgyc3RyaW5nKHZhbCk7XG4gICAgICAgICAgICB1dGlscy5oZXgycmdiKHZhbCwgdGhpcy5fYmFja2dyb3VuZENvbG9yUmdiYSk7XG4gICAgICAgIH1cbiAgICB9XG59KTtcblxuLyoqXG4gKiBSZXNpemVzIHRoZSBjYW52YXMgdmlldyB0byB0aGUgc3BlY2lmaWVkIHdpZHRoIGFuZCBoZWlnaHRcbiAqXG4gKiBAcGFyYW0gd2lkdGgge251bWJlcn0gdGhlIG5ldyB3aWR0aCBvZiB0aGUgY2FudmFzIHZpZXdcbiAqIEBwYXJhbSBoZWlnaHQge251bWJlcn0gdGhlIG5ldyBoZWlnaHQgb2YgdGhlIGNhbnZhcyB2aWV3XG4gKi9cblN5c3RlbVJlbmRlcmVyLnByb3RvdHlwZS5yZXNpemUgPSBmdW5jdGlvbiAod2lkdGgsIGhlaWdodCkge1xuICAgIHRoaXMud2lkdGggPSB3aWR0aCAqIHRoaXMucmVzb2x1dGlvbjtcbiAgICB0aGlzLmhlaWdodCA9IGhlaWdodCAqIHRoaXMucmVzb2x1dGlvbjtcblxuICAgIHRoaXMudmlldy53aWR0aCA9IHRoaXMud2lkdGg7XG4gICAgdGhpcy52aWV3LmhlaWdodCA9IHRoaXMuaGVpZ2h0O1xuXG4gICAgaWYgKHRoaXMuYXV0b1Jlc2l6ZSlcbiAgICB7XG4gICAgICAgIHRoaXMudmlldy5zdHlsZS53aWR0aCA9IHRoaXMud2lkdGggLyB0aGlzLnJlc29sdXRpb24gKyAncHgnO1xuICAgICAgICB0aGlzLnZpZXcuc3R5bGUuaGVpZ2h0ID0gdGhpcy5oZWlnaHQgLyB0aGlzLnJlc29sdXRpb24gKyAncHgnO1xuICAgIH1cbn07XG5cbi8qKlxuICogUmVtb3ZlcyBldmVyeXRoaW5nIGZyb20gdGhlIHJlbmRlcmVyIGFuZCBvcHRpb25hbGx5IHJlbW92ZXMgdGhlIENhbnZhcyBET00gZWxlbWVudC5cbiAqXG4gKiBAcGFyYW0gW3JlbW92ZVZpZXc9ZmFsc2VdIHtib29sZWFufSBSZW1vdmVzIHRoZSBDYW52YXMgZWxlbWVudCBmcm9tIHRoZSBET00uXG4gKi9cblN5c3RlbVJlbmRlcmVyLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKHJlbW92ZVZpZXcpIHtcbiAgICBpZiAocmVtb3ZlVmlldyAmJiB0aGlzLnZpZXcucGFyZW50Tm9kZSlcbiAgICB7XG4gICAgICAgIHRoaXMudmlldy5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHRoaXMudmlldyk7XG4gICAgfVxuXG4gICAgdGhpcy50eXBlID0gQ09OU1QuUkVOREVSRVJfVFlQRS5VTktOT1dOO1xuXG4gICAgdGhpcy53aWR0aCA9IDA7XG4gICAgdGhpcy5oZWlnaHQgPSAwO1xuXG4gICAgdGhpcy52aWV3ID0gbnVsbDtcblxuICAgIHRoaXMucmVzb2x1dGlvbiA9IDA7XG5cbiAgICB0aGlzLnRyYW5zcGFyZW50ID0gZmFsc2U7XG5cbiAgICB0aGlzLmF1dG9SZXNpemUgPSBmYWxzZTtcblxuICAgIHRoaXMuYmxlbmRNb2RlcyA9IG51bGw7XG5cbiAgICB0aGlzLnByZXNlcnZlRHJhd2luZ0J1ZmZlciA9IGZhbHNlO1xuICAgIHRoaXMuY2xlYXJCZWZvcmVSZW5kZXIgPSBmYWxzZTtcblxuICAgIHRoaXMucm91bmRQaXhlbHMgPSBmYWxzZTtcblxuICAgIHRoaXMuX2JhY2tncm91bmRDb2xvciA9IDA7XG4gICAgdGhpcy5fYmFja2dyb3VuZENvbG9yUmdiYSA9IG51bGw7XG4gICAgdGhpcy5fYmFja2dyb3VuZENvbG9yU3RyaW5nID0gbnVsbDtcbn07XG4iLCJ2YXIgU3lzdGVtUmVuZGVyZXIgPSByZXF1aXJlKCcuLi9TeXN0ZW1SZW5kZXJlcicpLFxuICAgIENhbnZhc01hc2tNYW5hZ2VyID0gcmVxdWlyZSgnLi91dGlscy9DYW52YXNNYXNrTWFuYWdlcicpLFxuICAgIHV0aWxzID0gcmVxdWlyZSgnLi4vLi4vdXRpbHMnKSxcbiAgICBtYXRoID0gcmVxdWlyZSgnLi4vLi4vbWF0aCcpLFxuICAgIENPTlNUID0gcmVxdWlyZSgnLi4vLi4vY29uc3QnKTtcblxuLyoqXG4gKiBUaGUgQ2FudmFzUmVuZGVyZXIgZHJhd3MgdGhlIHNjZW5lIGFuZCBhbGwgaXRzIGNvbnRlbnQgb250byBhIDJkIGNhbnZhcy4gVGhpcyByZW5kZXJlciBzaG91bGQgYmUgdXNlZCBmb3IgYnJvd3NlcnMgdGhhdCBkbyBub3Qgc3VwcG9ydCB3ZWJHTC5cbiAqIERvbid0IGZvcmdldCB0byBhZGQgdGhlIENhbnZhc1JlbmRlcmVyLnZpZXcgdG8geW91ciBET00gb3IgeW91IHdpbGwgbm90IHNlZSBhbnl0aGluZyA6KVxuICpcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqIEBleHRlbmRzIFBJWEkuU3lzdGVtUmVuZGVyZXJcbiAqIEBwYXJhbSBbd2lkdGg9ODAwXSB7bnVtYmVyfSB0aGUgd2lkdGggb2YgdGhlIGNhbnZhcyB2aWV3XG4gKiBAcGFyYW0gW2hlaWdodD02MDBdIHtudW1iZXJ9IHRoZSBoZWlnaHQgb2YgdGhlIGNhbnZhcyB2aWV3XG4gKiBAcGFyYW0gW29wdGlvbnNdIHtvYmplY3R9IFRoZSBvcHRpb25hbCByZW5kZXJlciBwYXJhbWV0ZXJzXG4gKiBAcGFyYW0gW29wdGlvbnMudmlld10ge0hUTUxDYW52YXNFbGVtZW50fSB0aGUgY2FudmFzIHRvIHVzZSBhcyBhIHZpZXcsIG9wdGlvbmFsXG4gKiBAcGFyYW0gW29wdGlvbnMudHJhbnNwYXJlbnQ9ZmFsc2VdIHtib29sZWFufSBJZiB0aGUgcmVuZGVyIHZpZXcgaXMgdHJhbnNwYXJlbnQsIGRlZmF1bHQgZmFsc2VcbiAqIEBwYXJhbSBbb3B0aW9ucy5hdXRvUmVzaXplPWZhbHNlXSB7Ym9vbGVhbn0gSWYgdGhlIHJlbmRlciB2aWV3IGlzIGF1dG9tYXRpY2FsbHkgcmVzaXplZCwgZGVmYXVsdCBmYWxzZVxuICogQHBhcmFtIFtvcHRpb25zLmFudGlhbGlhcz1mYWxzZV0ge2Jvb2xlYW59IHNldHMgYW50aWFsaWFzIChvbmx5IGFwcGxpY2FibGUgaW4gY2hyb21lIGF0IHRoZSBtb21lbnQpXG4gKiBAcGFyYW0gW29wdGlvbnMucmVzb2x1dGlvbj0xXSB7bnVtYmVyfSB0aGUgcmVzb2x1dGlvbiBvZiB0aGUgcmVuZGVyZXIgcmV0aW5hIHdvdWxkIGJlIDJcbiAqIEBwYXJhbSBbb3B0aW9ucy5jbGVhckJlZm9yZVJlbmRlcj10cnVlXSB7Ym9vbGVhbn0gVGhpcyBzZXRzIGlmIHRoZSBDYW52YXNSZW5kZXJlciB3aWxsIGNsZWFyIHRoZSBjYW52YXMgb3JcbiAqICAgICAgbm90IGJlZm9yZSB0aGUgbmV3IHJlbmRlciBwYXNzLlxuICogQHBhcmFtIFtvcHRpb25zLnJvdW5kUGl4ZWxzPWZhbHNlXSB7Ym9vbGVhbn0gSWYgdHJ1ZSBQaXhpIHdpbGwgTWF0aC5mbG9vcigpIHgveSB2YWx1ZXMgd2hlbiByZW5kZXJpbmcsIHN0b3BwaW5nIHBpeGVsIGludGVycG9sYXRpb24uXG4gKi9cbmZ1bmN0aW9uIENhbnZhc1JlbmRlcmVyKHdpZHRoLCBoZWlnaHQsIG9wdGlvbnMpXG57XG4gICAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG5cbiAgICBTeXN0ZW1SZW5kZXJlci5jYWxsKHRoaXMsICdDYW52YXMnLCB3aWR0aCwgaGVpZ2h0LCBvcHRpb25zKTtcblxuICAgIHRoaXMudHlwZSA9IENPTlNULlJFTkRFUkVSX1RZUEUuQ0FOVkFTO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGNhbnZhcyAyZCBjb250ZXh0IHRoYXQgZXZlcnl0aGluZyBpcyBkcmF3biB3aXRoLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEfVxuICAgICAqL1xuICAgIHRoaXMuY29udGV4dCA9IHRoaXMudmlldy5nZXRDb250ZXh0KCcyZCcsIHsgYWxwaGE6IHRoaXMudHJhbnNwYXJlbnQgfSk7XG5cbiAgICAvKipcbiAgICAgKiBCb29sZWFuIGZsYWcgY29udHJvbGxpbmcgY2FudmFzIHJlZnJlc2guXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqL1xuICAgIHRoaXMucmVmcmVzaCA9IHRydWU7XG5cbiAgICAvKipcbiAgICAgKiBJbnN0YW5jZSBvZiBhIENhbnZhc01hc2tNYW5hZ2VyLCBoYW5kbGVzIG1hc2tpbmcgd2hlbiB1c2luZyB0aGUgY2FudmFzIHJlbmRlcmVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5DYW52YXNNYXNrTWFuYWdlcn1cbiAgICAgKi9cbiAgICB0aGlzLm1hc2tNYW5hZ2VyID0gbmV3IENhbnZhc01hc2tNYW5hZ2VyKCk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgY2FudmFzIHByb3BlcnR5IHVzZWQgdG8gc2V0IHRoZSBjYW52YXMgc21vb3RoaW5nIHByb3BlcnR5LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7c3RyaW5nfVxuICAgICAqL1xuICAgIHRoaXMuc21vb3RoUHJvcGVydHkgPSAnaW1hZ2VTbW9vdGhpbmdFbmFibGVkJztcblxuICAgIGlmICghdGhpcy5jb250ZXh0LmltYWdlU21vb3RoaW5nRW5hYmxlZClcbiAgICB7XG4gICAgICAgIGlmICh0aGlzLmNvbnRleHQud2Via2l0SW1hZ2VTbW9vdGhpbmdFbmFibGVkKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnNtb290aFByb3BlcnR5ID0gJ3dlYmtpdEltYWdlU21vb3RoaW5nRW5hYmxlZCc7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodGhpcy5jb250ZXh0Lm1vekltYWdlU21vb3RoaW5nRW5hYmxlZClcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5zbW9vdGhQcm9wZXJ0eSA9ICdtb3pJbWFnZVNtb290aGluZ0VuYWJsZWQnO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHRoaXMuY29udGV4dC5vSW1hZ2VTbW9vdGhpbmdFbmFibGVkKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnNtb290aFByb3BlcnR5ID0gJ29JbWFnZVNtb290aGluZ0VuYWJsZWQnO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHRoaXMuY29udGV4dC5tc0ltYWdlU21vb3RoaW5nRW5hYmxlZClcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5zbW9vdGhQcm9wZXJ0eSA9ICdtc0ltYWdlU21vb3RoaW5nRW5hYmxlZCc7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLmluaXRQbHVnaW5zKCk7XG5cbiAgICB0aGlzLl9tYXBCbGVuZE1vZGVzKCk7XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIHRlbXBvcmFyeSBkaXNwbGF5IG9iamVjdCB1c2VkIGFzIHRoZSBwYXJlbnQgb2YgdGhlIGN1cnJlbnRseSBiZWluZyByZW5kZXJlZCBpdGVtXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLkRpc3BsYXlPYmplY3R9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl90ZW1wRGlzcGxheU9iamVjdFBhcmVudCA9IHtcbiAgICAgICAgd29ybGRUcmFuc2Zvcm06IG5ldyBtYXRoLk1hdHJpeCgpLFxuICAgICAgICB3b3JsZEFscGhhOiAxXG4gICAgfTtcblxuXG4gICAgdGhpcy5yZXNpemUod2lkdGgsIGhlaWdodCk7XG59XG5cbi8vIGNvbnN0cnVjdG9yXG5DYW52YXNSZW5kZXJlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFN5c3RlbVJlbmRlcmVyLnByb3RvdHlwZSk7XG5DYW52YXNSZW5kZXJlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBDYW52YXNSZW5kZXJlcjtcbm1vZHVsZS5leHBvcnRzID0gQ2FudmFzUmVuZGVyZXI7XG51dGlscy5wbHVnaW5UYXJnZXQubWl4aW4oQ2FudmFzUmVuZGVyZXIpO1xuXG4vKipcbiAqIFJlbmRlcnMgdGhlIG9iamVjdCB0byB0aGlzIGNhbnZhcyB2aWV3XG4gKlxuICogQHBhcmFtIG9iamVjdCB7UElYSS5EaXNwbGF5T2JqZWN0fSB0aGUgb2JqZWN0IHRvIGJlIHJlbmRlcmVkXG4gKi9cbkNhbnZhc1JlbmRlcmVyLnByb3RvdHlwZS5yZW5kZXIgPSBmdW5jdGlvbiAob2JqZWN0KVxue1xuICAgIHRoaXMuZW1pdCgncHJlcmVuZGVyJyk7XG5cbiAgICB2YXIgY2FjaGVQYXJlbnQgPSBvYmplY3QucGFyZW50O1xuXG4gICAgdGhpcy5fbGFzdE9iamVjdFJlbmRlcmVkID0gb2JqZWN0O1xuXG4gICAgb2JqZWN0LnBhcmVudCA9IHRoaXMuX3RlbXBEaXNwbGF5T2JqZWN0UGFyZW50O1xuXG4gICAgLy8gdXBkYXRlIHRoZSBzY2VuZSBncmFwaFxuICAgIG9iamVjdC51cGRhdGVUcmFuc2Zvcm0oKTtcblxuICAgIG9iamVjdC5wYXJlbnQgPSBjYWNoZVBhcmVudDtcblxuICAgIHRoaXMuY29udGV4dC5zZXRUcmFuc2Zvcm0oMSwgMCwgMCwgMSwgMCwgMCk7XG5cbiAgICB0aGlzLmNvbnRleHQuZ2xvYmFsQWxwaGEgPSAxO1xuXG4gICAgdGhpcy5jb250ZXh0Lmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbiA9IHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5OT1JNQUxdO1xuXG4gICAgaWYgKG5hdmlnYXRvci5pc0NvY29vbkpTICYmIHRoaXMudmlldy5zY3JlZW5jYW52YXMpXG4gICAge1xuICAgICAgICB0aGlzLmNvbnRleHQuZmlsbFN0eWxlID0gJ2JsYWNrJztcbiAgICAgICAgdGhpcy5jb250ZXh0LmNsZWFyKCk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuY2xlYXJCZWZvcmVSZW5kZXIpXG4gICAge1xuICAgICAgICBpZiAodGhpcy50cmFuc3BhcmVudClcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5jb250ZXh0LmNsZWFyUmVjdCgwLCAwLCB0aGlzLndpZHRoLCB0aGlzLmhlaWdodCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmNvbnRleHQuZmlsbFN0eWxlID0gdGhpcy5fYmFja2dyb3VuZENvbG9yU3RyaW5nO1xuICAgICAgICAgICAgdGhpcy5jb250ZXh0LmZpbGxSZWN0KDAsIDAsIHRoaXMud2lkdGggLCB0aGlzLmhlaWdodCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLnJlbmRlckRpc3BsYXlPYmplY3Qob2JqZWN0LCB0aGlzLmNvbnRleHQpO1xuXG4gICAgdGhpcy5lbWl0KCdwb3N0cmVuZGVyJyk7XG59O1xuXG4vKipcbiAqIFJlbW92ZXMgZXZlcnl0aGluZyBmcm9tIHRoZSByZW5kZXJlciBhbmQgb3B0aW9uYWxseSByZW1vdmVzIHRoZSBDYW52YXMgRE9NIGVsZW1lbnQuXG4gKlxuICogQHBhcmFtIFtyZW1vdmVWaWV3PWZhbHNlXSB7Ym9vbGVhbn0gUmVtb3ZlcyB0aGUgQ2FudmFzIGVsZW1lbnQgZnJvbSB0aGUgRE9NLlxuICovXG5DYW52YXNSZW5kZXJlci5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uIChyZW1vdmVWaWV3KVxue1xuICAgIHRoaXMuZGVzdHJveVBsdWdpbnMoKTtcblxuICAgIC8vIGNhbGwgdGhlIGJhc2UgZGVzdHJveVxuICAgIFN5c3RlbVJlbmRlcmVyLnByb3RvdHlwZS5kZXN0cm95LmNhbGwodGhpcywgcmVtb3ZlVmlldyk7XG5cbiAgICB0aGlzLmNvbnRleHQgPSBudWxsO1xuXG4gICAgdGhpcy5yZWZyZXNoID0gdHJ1ZTtcblxuICAgIHRoaXMubWFza01hbmFnZXIuZGVzdHJveSgpO1xuICAgIHRoaXMubWFza01hbmFnZXIgPSBudWxsO1xuXG4gICAgdGhpcy5zbW9vdGhQcm9wZXJ0eSA9IG51bGw7XG59O1xuXG4vKipcbiAqIFJlbmRlcnMgYSBkaXNwbGF5IG9iamVjdFxuICpcbiAqIEBwYXJhbSBkaXNwbGF5T2JqZWN0IHtQSVhJLkRpc3BsYXlPYmplY3R9IFRoZSBkaXNwbGF5T2JqZWN0IHRvIHJlbmRlclxuICogQHByaXZhdGVcbiAqL1xuQ2FudmFzUmVuZGVyZXIucHJvdG90eXBlLnJlbmRlckRpc3BsYXlPYmplY3QgPSBmdW5jdGlvbiAoZGlzcGxheU9iamVjdCwgY29udGV4dClcbntcbiAgICB2YXIgdGVtcENvbnRleHQgPSB0aGlzLmNvbnRleHQ7XG5cbiAgICB0aGlzLmNvbnRleHQgPSBjb250ZXh0O1xuICAgIGRpc3BsYXlPYmplY3QucmVuZGVyQ2FudmFzKHRoaXMpO1xuICAgIHRoaXMuY29udGV4dCA9IHRlbXBDb250ZXh0O1xufTtcblxuLyoqXG4gKiBAZXh0ZW5kcyBQSVhJLlN5c3RlbVJlbmRlcmVyI3Jlc2l6ZVxuICpcbiAqIEBwYXJhbSB7bnVtYmVyfSB3XG4gKiBAcGFyYW0ge251bWJlcn0gaFxuICovXG5DYW52YXNSZW5kZXJlci5wcm90b3R5cGUucmVzaXplID0gZnVuY3Rpb24gKHcsIGgpXG57XG4gICAgU3lzdGVtUmVuZGVyZXIucHJvdG90eXBlLnJlc2l6ZS5jYWxsKHRoaXMsIHcsIGgpO1xuXG4gICAgLy9yZXNldCB0aGUgc2NhbGUgbW9kZS4uIG9kZGx5IHRoaXMgc2VlbXMgdG8gYmUgcmVzZXQgd2hlbiB0aGUgY2FudmFzIGlzIHJlc2l6ZWQuXG4gICAgLy9zdXJlbHkgYSBicm93c2VyIGJ1Zz8/IExldCBwaXhpIGZpeCB0aGF0IGZvciB5b3UuLlxuICAgIGlmKHRoaXMuc21vb3RoUHJvcGVydHkpXG4gICAge1xuICAgICAgICB0aGlzLmNvbnRleHRbdGhpcy5zbW9vdGhQcm9wZXJ0eV0gPSAoQ09OU1QuU0NBTEVfTU9ERVMuREVGQVVMVCA9PT0gQ09OU1QuU0NBTEVfTU9ERVMuTElORUFSKTtcbiAgICB9XG5cbn07XG5cbi8qKlxuICogTWFwcyBQaXhpIGJsZW5kIG1vZGVzIHRvIGNhbnZhcyBibGVuZCBtb2Rlcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5DYW52YXNSZW5kZXJlci5wcm90b3R5cGUuX21hcEJsZW5kTW9kZXMgPSBmdW5jdGlvbiAoKVxue1xuICAgIGlmICghdGhpcy5ibGVuZE1vZGVzKVxuICAgIHtcbiAgICAgICAgdGhpcy5ibGVuZE1vZGVzID0ge307XG5cbiAgICAgICAgaWYgKHV0aWxzLmNhblVzZU5ld0NhbnZhc0JsZW5kTW9kZXMoKSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5ibGVuZE1vZGVzW0NPTlNULkJMRU5EX01PREVTLk5PUk1BTF0gICAgICAgID0gJ3NvdXJjZS1vdmVyJztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5BRERdICAgICAgICAgICA9ICdsaWdodGVyJzsgLy9JUyBUSElTIE9LPz8/XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuTVVMVElQTFldICAgICAgPSAnbXVsdGlwbHknO1xuICAgICAgICAgICAgdGhpcy5ibGVuZE1vZGVzW0NPTlNULkJMRU5EX01PREVTLlNDUkVFTl0gICAgICAgID0gJ3NjcmVlbic7XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuT1ZFUkxBWV0gICAgICAgPSAnb3ZlcmxheSc7XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuREFSS0VOXSAgICAgICAgPSAnZGFya2VuJztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5MSUdIVEVOXSAgICAgICA9ICdsaWdodGVuJztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5DT0xPUl9ET0RHRV0gICA9ICdjb2xvci1kb2RnZSc7XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuQ09MT1JfQlVSTl0gICAgPSAnY29sb3ItYnVybic7XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuSEFSRF9MSUdIVF0gICAgPSAnaGFyZC1saWdodCc7XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuU09GVF9MSUdIVF0gICAgPSAnc29mdC1saWdodCc7XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuRElGRkVSRU5DRV0gICAgPSAnZGlmZmVyZW5jZSc7XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuRVhDTFVTSU9OXSAgICAgPSAnZXhjbHVzaW9uJztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5IVUVdICAgICAgICAgICA9ICdodWUnO1xuICAgICAgICAgICAgdGhpcy5ibGVuZE1vZGVzW0NPTlNULkJMRU5EX01PREVTLlNBVFVSQVRJT05dICAgID0gJ3NhdHVyYXRlJztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5DT0xPUl0gICAgICAgICA9ICdjb2xvcic7XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuTFVNSU5PU0lUWV0gICAgPSAnbHVtaW5vc2l0eSc7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgICAvLyB0aGlzIG1lYW5zIHRoYXQgdGhlIGJyb3dzZXIgZG9lcyBub3Qgc3VwcG9ydCB0aGUgY29vbCBuZXcgYmxlbmQgbW9kZXMgaW4gY2FudmFzICdjb3VnaCcgaWUgJ2NvdWdoJ1xuICAgICAgICAgICAgdGhpcy5ibGVuZE1vZGVzW0NPTlNULkJMRU5EX01PREVTLk5PUk1BTF0gICAgICAgID0gJ3NvdXJjZS1vdmVyJztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5BRERdICAgICAgICAgICA9ICdsaWdodGVyJzsgLy9JUyBUSElTIE9LPz8/XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuTVVMVElQTFldICAgICAgPSAnc291cmNlLW92ZXInO1xuICAgICAgICAgICAgdGhpcy5ibGVuZE1vZGVzW0NPTlNULkJMRU5EX01PREVTLlNDUkVFTl0gICAgICAgID0gJ3NvdXJjZS1vdmVyJztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5PVkVSTEFZXSAgICAgICA9ICdzb3VyY2Utb3Zlcic7XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuREFSS0VOXSAgICAgICAgPSAnc291cmNlLW92ZXInO1xuICAgICAgICAgICAgdGhpcy5ibGVuZE1vZGVzW0NPTlNULkJMRU5EX01PREVTLkxJR0hURU5dICAgICAgID0gJ3NvdXJjZS1vdmVyJztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5DT0xPUl9ET0RHRV0gICA9ICdzb3VyY2Utb3Zlcic7XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuQ09MT1JfQlVSTl0gICAgPSAnc291cmNlLW92ZXInO1xuICAgICAgICAgICAgdGhpcy5ibGVuZE1vZGVzW0NPTlNULkJMRU5EX01PREVTLkhBUkRfTElHSFRdICAgID0gJ3NvdXJjZS1vdmVyJztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5TT0ZUX0xJR0hUXSAgICA9ICdzb3VyY2Utb3Zlcic7XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuRElGRkVSRU5DRV0gICAgPSAnc291cmNlLW92ZXInO1xuICAgICAgICAgICAgdGhpcy5ibGVuZE1vZGVzW0NPTlNULkJMRU5EX01PREVTLkVYQ0xVU0lPTl0gICAgID0gJ3NvdXJjZS1vdmVyJztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5IVUVdICAgICAgICAgICA9ICdzb3VyY2Utb3Zlcic7XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuU0FUVVJBVElPTl0gICAgPSAnc291cmNlLW92ZXInO1xuICAgICAgICAgICAgdGhpcy5ibGVuZE1vZGVzW0NPTlNULkJMRU5EX01PREVTLkNPTE9SXSAgICAgICAgID0gJ3NvdXJjZS1vdmVyJztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5MVU1JTk9TSVRZXSAgICA9ICdzb3VyY2Utb3Zlcic7XG4gICAgICAgIH1cbiAgICB9XG59O1xuIiwiLyoqXG4gKiBDcmVhdGVzIGEgQ2FudmFzIGVsZW1lbnQgb2YgdGhlIGdpdmVuIHNpemUuXG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIHdpZHRoIHtudW1iZXJ9IHRoZSB3aWR0aCBmb3IgdGhlIG5ld2x5IGNyZWF0ZWQgY2FudmFzXG4gKiBAcGFyYW0gaGVpZ2h0IHtudW1iZXJ9IHRoZSBoZWlnaHQgZm9yIHRoZSBuZXdseSBjcmVhdGVkIGNhbnZhc1xuICovXG5mdW5jdGlvbiBDYW52YXNCdWZmZXIod2lkdGgsIGhlaWdodClcbntcbiAgICAvKipcbiAgICAgKiBUaGUgQ2FudmFzIG9iamVjdCB0aGF0IGJlbG9uZ3MgdG8gdGhpcyBDYW52YXNCdWZmZXIuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtIVE1MQ2FudmFzRWxlbWVudH1cbiAgICAgKi9cbiAgICB0aGlzLmNhbnZhcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NhbnZhcycpO1xuXG4gICAgLyoqXG4gICAgICogQSBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQgb2JqZWN0IHJlcHJlc2VudGluZyBhIHR3by1kaW1lbnNpb25hbCByZW5kZXJpbmcgY29udGV4dC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRH1cbiAgICAgKi9cbiAgICB0aGlzLmNvbnRleHQgPSB0aGlzLmNhbnZhcy5nZXRDb250ZXh0KCcyZCcpO1xuXG4gICAgdGhpcy5jYW52YXMud2lkdGggPSB3aWR0aDtcbiAgICB0aGlzLmNhbnZhcy5oZWlnaHQgPSBoZWlnaHQ7XG59XG5cbkNhbnZhc0J1ZmZlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBDYW52YXNCdWZmZXI7XG5tb2R1bGUuZXhwb3J0cyA9IENhbnZhc0J1ZmZlcjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoQ2FudmFzQnVmZmVyLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFRoZSB3aWR0aCBvZiB0aGUgY2FudmFzIGJ1ZmZlciBpbiBwaXhlbHMuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuQ2FudmFzQnVmZmVyI1xuICAgICAqL1xuICAgIHdpZHRoOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY2FudmFzLndpZHRoO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWwpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuY2FudmFzLndpZHRoID0gdmFsO1xuICAgICAgICB9XG4gICAgfSxcbiAgICAvKipcbiAgICAgKiBUaGUgaGVpZ2h0IG9mIHRoZSBjYW52YXMgYnVmZmVyIGluIHBpeGVscy5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5DYW52YXNCdWZmZXIjXG4gICAgICovXG4gICAgaGVpZ2h0OiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY2FudmFzLmhlaWdodDtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmNhbnZhcy5oZWlnaHQgPSB2YWw7XG4gICAgICAgIH1cbiAgICB9XG59KTtcblxuLyoqXG4gKiBDbGVhcnMgdGhlIGNhbnZhcyB0aGF0IHdhcyBjcmVhdGVkIGJ5IHRoZSBDYW52YXNCdWZmZXIgY2xhc3MuXG4gKlxuICogQHByaXZhdGVcbiAqL1xuQ2FudmFzQnVmZmVyLnByb3RvdHlwZS5jbGVhciA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy5jb250ZXh0LnNldFRyYW5zZm9ybSgxLCAwLCAwLCAxLCAwLCAwKTtcbiAgICB0aGlzLmNvbnRleHQuY2xlYXJSZWN0KDAsMCwgdGhpcy5jYW52YXMud2lkdGgsIHRoaXMuY2FudmFzLmhlaWdodCk7XG59O1xuXG4vKipcbiAqIFJlc2l6ZXMgdGhlIGNhbnZhcyB0byB0aGUgc3BlY2lmaWVkIHdpZHRoIGFuZCBoZWlnaHQuXG4gKlxuICogQHBhcmFtIHdpZHRoIHtudW1iZXJ9IHRoZSBuZXcgd2lkdGggb2YgdGhlIGNhbnZhc1xuICogQHBhcmFtIGhlaWdodCB7bnVtYmVyfSB0aGUgbmV3IGhlaWdodCBvZiB0aGUgY2FudmFzXG4gKi9cbkNhbnZhc0J1ZmZlci5wcm90b3R5cGUucmVzaXplID0gZnVuY3Rpb24gKHdpZHRoLCBoZWlnaHQpXG57XG4gICAgdGhpcy5jYW52YXMud2lkdGggPSB3aWR0aDtcbiAgICB0aGlzLmNhbnZhcy5oZWlnaHQgPSBoZWlnaHQ7XG59O1xuXG4vKipcbiAqIERlc3Ryb3lzIHRoaXMgY2FudmFzLlxuICpcbiAqL1xuQ2FudmFzQnVmZmVyLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLmNvbnRleHQgPSBudWxsO1xuICAgIHRoaXMuY2FudmFzID0gbnVsbDtcbn07XG4iLCJ2YXIgQ09OU1QgPSByZXF1aXJlKCcuLi8uLi8uLi9jb25zdCcpO1xuXG4vKipcbiAqIEEgc2V0IG9mIGZ1bmN0aW9ucyB1c2VkIGJ5IHRoZSBjYW52YXMgcmVuZGVyZXIgdG8gZHJhdyB0aGUgcHJpbWl0aXZlIGdyYXBoaWNzIGRhdGEuXG4gKiBAc3RhdGljXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKi9cbnZhciBDYW52YXNHcmFwaGljcyA9IHt9O1xubW9kdWxlLmV4cG9ydHMgPSBDYW52YXNHcmFwaGljcztcblxuLypcbiAqIFJlbmRlcnMgYSBHcmFwaGljcyBvYmplY3QgdG8gYSBjYW52YXMuXG4gKlxuICogQHBhcmFtIGdyYXBoaWNzIHtQSVhJLkdyYXBoaWNzfSB0aGUgYWN0dWFsIGdyYXBoaWNzIG9iamVjdCB0byByZW5kZXJcbiAqIEBwYXJhbSBjb250ZXh0IHtDYW52YXNSZW5kZXJpbmdDb250ZXh0MkR9IHRoZSAyZCBkcmF3aW5nIG1ldGhvZCBvZiB0aGUgY2FudmFzXG4gKi9cbkNhbnZhc0dyYXBoaWNzLnJlbmRlckdyYXBoaWNzID0gZnVuY3Rpb24gKGdyYXBoaWNzLCBjb250ZXh0KVxue1xuICAgIHZhciB3b3JsZEFscGhhID0gZ3JhcGhpY3Mud29ybGRBbHBoYTtcblxuICAgIGlmIChncmFwaGljcy5kaXJ0eSlcbiAgICB7XG4gICAgICAgIHRoaXMudXBkYXRlR3JhcGhpY3NUaW50KGdyYXBoaWNzKTtcbiAgICAgICAgZ3JhcGhpY3MuZGlydHkgPSBmYWxzZTtcbiAgICB9XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGdyYXBoaWNzLmdyYXBoaWNzRGF0YS5sZW5ndGg7IGkrKylcbiAgICB7XG4gICAgICAgIHZhciBkYXRhID0gZ3JhcGhpY3MuZ3JhcGhpY3NEYXRhW2ldO1xuICAgICAgICB2YXIgc2hhcGUgPSBkYXRhLnNoYXBlO1xuXG4gICAgICAgIHZhciBmaWxsQ29sb3IgPSBkYXRhLl9maWxsVGludDtcbiAgICAgICAgdmFyIGxpbmVDb2xvciA9IGRhdGEuX2xpbmVUaW50O1xuXG4gICAgICAgIGNvbnRleHQubGluZVdpZHRoID0gZGF0YS5saW5lV2lkdGg7XG5cbiAgICAgICAgaWYgKGRhdGEudHlwZSA9PT0gQ09OU1QuU0hBUEVTLlBPTFkpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNvbnRleHQuYmVnaW5QYXRoKCk7XG5cbiAgICAgICAgICAgIHZhciBwb2ludHMgPSBzaGFwZS5wb2ludHM7XG5cbiAgICAgICAgICAgIGNvbnRleHQubW92ZVRvKHBvaW50c1swXSwgcG9pbnRzWzFdKTtcblxuICAgICAgICAgICAgZm9yICh2YXIgaj0xOyBqIDwgcG9pbnRzLmxlbmd0aC8yOyBqKyspXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29udGV4dC5saW5lVG8ocG9pbnRzW2ogKiAyXSwgcG9pbnRzW2ogKiAyICsgMV0pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoc2hhcGUuY2xvc2VkKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGNvbnRleHQubGluZVRvKHBvaW50c1swXSwgcG9pbnRzWzFdKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gaWYgdGhlIGZpcnN0IGFuZCBsYXN0IHBvaW50IGFyZSB0aGUgc2FtZSBjbG9zZSB0aGUgcGF0aCAtIG11Y2ggbmVhdGVyIDopXG4gICAgICAgICAgICBpZiAocG9pbnRzWzBdID09PSBwb2ludHNbcG9pbnRzLmxlbmd0aC0yXSAmJiBwb2ludHNbMV0gPT09IHBvaW50c1twb2ludHMubGVuZ3RoLTFdKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGNvbnRleHQuY2xvc2VQYXRoKCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChkYXRhLmZpbGwpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29udGV4dC5nbG9iYWxBbHBoYSA9IGRhdGEuZmlsbEFscGhhICogd29ybGRBbHBoYTtcbiAgICAgICAgICAgICAgICBjb250ZXh0LmZpbGxTdHlsZSA9ICcjJyArICgnMDAwMDAnICsgKCBmaWxsQ29sb3IgfCAwKS50b1N0cmluZygxNikpLnN1YnN0cigtNik7XG4gICAgICAgICAgICAgICAgY29udGV4dC5maWxsKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZGF0YS5saW5lV2lkdGgpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29udGV4dC5nbG9iYWxBbHBoYSA9IGRhdGEubGluZUFscGhhICogd29ybGRBbHBoYTtcbiAgICAgICAgICAgICAgICBjb250ZXh0LnN0cm9rZVN0eWxlID0gJyMnICsgKCcwMDAwMCcgKyAoIGxpbmVDb2xvciB8IDApLnRvU3RyaW5nKDE2KSkuc3Vic3RyKC02KTtcbiAgICAgICAgICAgICAgICBjb250ZXh0LnN0cm9rZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGRhdGEudHlwZSA9PT0gQ09OU1QuU0hBUEVTLlJFQ1QpXG4gICAgICAgIHtcblxuICAgICAgICAgICAgaWYgKGRhdGEuZmlsbENvbG9yIHx8IGRhdGEuZmlsbENvbG9yID09PSAwKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGNvbnRleHQuZ2xvYmFsQWxwaGEgPSBkYXRhLmZpbGxBbHBoYSAqIHdvcmxkQWxwaGE7XG4gICAgICAgICAgICAgICAgY29udGV4dC5maWxsU3R5bGUgPSAnIycgKyAoJzAwMDAwJyArICggZmlsbENvbG9yIHwgMCkudG9TdHJpbmcoMTYpKS5zdWJzdHIoLTYpO1xuICAgICAgICAgICAgICAgIGNvbnRleHQuZmlsbFJlY3Qoc2hhcGUueCwgc2hhcGUueSwgc2hhcGUud2lkdGgsIHNoYXBlLmhlaWdodCk7XG5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChkYXRhLmxpbmVXaWR0aClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb250ZXh0Lmdsb2JhbEFscGhhID0gZGF0YS5saW5lQWxwaGEgKiB3b3JsZEFscGhhO1xuICAgICAgICAgICAgICAgIGNvbnRleHQuc3Ryb2tlU3R5bGUgPSAnIycgKyAoJzAwMDAwJyArICggbGluZUNvbG9yIHwgMCkudG9TdHJpbmcoMTYpKS5zdWJzdHIoLTYpO1xuICAgICAgICAgICAgICAgIGNvbnRleHQuc3Ryb2tlUmVjdChzaGFwZS54LCBzaGFwZS55LCBzaGFwZS53aWR0aCwgc2hhcGUuaGVpZ2h0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChkYXRhLnR5cGUgPT09IENPTlNULlNIQVBFUy5DSVJDKVxuICAgICAgICB7XG4gICAgICAgICAgICAvLyBUT0RPIC0gbmVlZCB0byBiZSBVbmRlZmluZWQhXG4gICAgICAgICAgICBjb250ZXh0LmJlZ2luUGF0aCgpO1xuICAgICAgICAgICAgY29udGV4dC5hcmMoc2hhcGUueCwgc2hhcGUueSwgc2hhcGUucmFkaXVzLDAsMipNYXRoLlBJKTtcbiAgICAgICAgICAgIGNvbnRleHQuY2xvc2VQYXRoKCk7XG5cbiAgICAgICAgICAgIGlmIChkYXRhLmZpbGwpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29udGV4dC5nbG9iYWxBbHBoYSA9IGRhdGEuZmlsbEFscGhhICogd29ybGRBbHBoYTtcbiAgICAgICAgICAgICAgICBjb250ZXh0LmZpbGxTdHlsZSA9ICcjJyArICgnMDAwMDAnICsgKCBmaWxsQ29sb3IgfCAwKS50b1N0cmluZygxNikpLnN1YnN0cigtNik7XG4gICAgICAgICAgICAgICAgY29udGV4dC5maWxsKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZGF0YS5saW5lV2lkdGgpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29udGV4dC5nbG9iYWxBbHBoYSA9IGRhdGEubGluZUFscGhhICogd29ybGRBbHBoYTtcbiAgICAgICAgICAgICAgICBjb250ZXh0LnN0cm9rZVN0eWxlID0gJyMnICsgKCcwMDAwMCcgKyAoIGxpbmVDb2xvciB8IDApLnRvU3RyaW5nKDE2KSkuc3Vic3RyKC02KTtcbiAgICAgICAgICAgICAgICBjb250ZXh0LnN0cm9rZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGRhdGEudHlwZSA9PT0gQ09OU1QuU0hBUEVTLkVMSVApXG4gICAgICAgIHtcbiAgICAgICAgICAgIC8vIGVsbGlwc2UgY29kZSB0YWtlbiBmcm9tOiBodHRwOi8vc3RhY2tvdmVyZmxvdy5jb20vcXVlc3Rpb25zLzIxNzI3OTgvaG93LXRvLWRyYXctYW4tb3ZhbC1pbi1odG1sNS1jYW52YXNcblxuICAgICAgICAgICAgdmFyIHcgPSBzaGFwZS53aWR0aCAqIDI7XG4gICAgICAgICAgICB2YXIgaCA9IHNoYXBlLmhlaWdodCAqIDI7XG5cbiAgICAgICAgICAgIHZhciB4ID0gc2hhcGUueCAtIHcvMjtcbiAgICAgICAgICAgIHZhciB5ID0gc2hhcGUueSAtIGgvMjtcblxuICAgICAgICAgICAgY29udGV4dC5iZWdpblBhdGgoKTtcblxuICAgICAgICAgICAgdmFyIGthcHBhID0gMC41NTIyODQ4LFxuICAgICAgICAgICAgICAgIG94ID0gKHcgLyAyKSAqIGthcHBhLCAvLyBjb250cm9sIHBvaW50IG9mZnNldCBob3Jpem9udGFsXG4gICAgICAgICAgICAgICAgb3kgPSAoaCAvIDIpICoga2FwcGEsIC8vIGNvbnRyb2wgcG9pbnQgb2Zmc2V0IHZlcnRpY2FsXG4gICAgICAgICAgICAgICAgeGUgPSB4ICsgdywgICAgICAgICAgIC8vIHgtZW5kXG4gICAgICAgICAgICAgICAgeWUgPSB5ICsgaCwgICAgICAgICAgIC8vIHktZW5kXG4gICAgICAgICAgICAgICAgeG0gPSB4ICsgdyAvIDIsICAgICAgIC8vIHgtbWlkZGxlXG4gICAgICAgICAgICAgICAgeW0gPSB5ICsgaCAvIDI7ICAgICAgIC8vIHktbWlkZGxlXG5cbiAgICAgICAgICAgIGNvbnRleHQubW92ZVRvKHgsIHltKTtcbiAgICAgICAgICAgIGNvbnRleHQuYmV6aWVyQ3VydmVUbyh4LCB5bSAtIG95LCB4bSAtIG94LCB5LCB4bSwgeSk7XG4gICAgICAgICAgICBjb250ZXh0LmJlemllckN1cnZlVG8oeG0gKyBveCwgeSwgeGUsIHltIC0gb3ksIHhlLCB5bSk7XG4gICAgICAgICAgICBjb250ZXh0LmJlemllckN1cnZlVG8oeGUsIHltICsgb3ksIHhtICsgb3gsIHllLCB4bSwgeWUpO1xuICAgICAgICAgICAgY29udGV4dC5iZXppZXJDdXJ2ZVRvKHhtIC0gb3gsIHllLCB4LCB5bSArIG95LCB4LCB5bSk7XG5cbiAgICAgICAgICAgIGNvbnRleHQuY2xvc2VQYXRoKCk7XG5cbiAgICAgICAgICAgIGlmIChkYXRhLmZpbGwpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29udGV4dC5nbG9iYWxBbHBoYSA9IGRhdGEuZmlsbEFscGhhICogd29ybGRBbHBoYTtcbiAgICAgICAgICAgICAgICBjb250ZXh0LmZpbGxTdHlsZSA9ICcjJyArICgnMDAwMDAnICsgKCBmaWxsQ29sb3IgfCAwKS50b1N0cmluZygxNikpLnN1YnN0cigtNik7XG4gICAgICAgICAgICAgICAgY29udGV4dC5maWxsKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZGF0YS5saW5lV2lkdGgpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29udGV4dC5nbG9iYWxBbHBoYSA9IGRhdGEubGluZUFscGhhICogd29ybGRBbHBoYTtcbiAgICAgICAgICAgICAgICBjb250ZXh0LnN0cm9rZVN0eWxlID0gJyMnICsgKCcwMDAwMCcgKyAoIGxpbmVDb2xvciB8IDApLnRvU3RyaW5nKDE2KSkuc3Vic3RyKC02KTtcbiAgICAgICAgICAgICAgICBjb250ZXh0LnN0cm9rZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGRhdGEudHlwZSA9PT0gQ09OU1QuU0hBUEVTLlJSRUMpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHZhciByeCA9IHNoYXBlLng7XG4gICAgICAgICAgICB2YXIgcnkgPSBzaGFwZS55O1xuICAgICAgICAgICAgdmFyIHdpZHRoID0gc2hhcGUud2lkdGg7XG4gICAgICAgICAgICB2YXIgaGVpZ2h0ID0gc2hhcGUuaGVpZ2h0O1xuICAgICAgICAgICAgdmFyIHJhZGl1cyA9IHNoYXBlLnJhZGl1cztcblxuICAgICAgICAgICAgdmFyIG1heFJhZGl1cyA9IE1hdGgubWluKHdpZHRoLCBoZWlnaHQpIC8gMiB8IDA7XG4gICAgICAgICAgICByYWRpdXMgPSByYWRpdXMgPiBtYXhSYWRpdXMgPyBtYXhSYWRpdXMgOiByYWRpdXM7XG5cbiAgICAgICAgICAgIGNvbnRleHQuYmVnaW5QYXRoKCk7XG4gICAgICAgICAgICBjb250ZXh0Lm1vdmVUbyhyeCwgcnkgKyByYWRpdXMpO1xuICAgICAgICAgICAgY29udGV4dC5saW5lVG8ocngsIHJ5ICsgaGVpZ2h0IC0gcmFkaXVzKTtcbiAgICAgICAgICAgIGNvbnRleHQucXVhZHJhdGljQ3VydmVUbyhyeCwgcnkgKyBoZWlnaHQsIHJ4ICsgcmFkaXVzLCByeSArIGhlaWdodCk7XG4gICAgICAgICAgICBjb250ZXh0LmxpbmVUbyhyeCArIHdpZHRoIC0gcmFkaXVzLCByeSArIGhlaWdodCk7XG4gICAgICAgICAgICBjb250ZXh0LnF1YWRyYXRpY0N1cnZlVG8ocnggKyB3aWR0aCwgcnkgKyBoZWlnaHQsIHJ4ICsgd2lkdGgsIHJ5ICsgaGVpZ2h0IC0gcmFkaXVzKTtcbiAgICAgICAgICAgIGNvbnRleHQubGluZVRvKHJ4ICsgd2lkdGgsIHJ5ICsgcmFkaXVzKTtcbiAgICAgICAgICAgIGNvbnRleHQucXVhZHJhdGljQ3VydmVUbyhyeCArIHdpZHRoLCByeSwgcnggKyB3aWR0aCAtIHJhZGl1cywgcnkpO1xuICAgICAgICAgICAgY29udGV4dC5saW5lVG8ocnggKyByYWRpdXMsIHJ5KTtcbiAgICAgICAgICAgIGNvbnRleHQucXVhZHJhdGljQ3VydmVUbyhyeCwgcnksIHJ4LCByeSArIHJhZGl1cyk7XG4gICAgICAgICAgICBjb250ZXh0LmNsb3NlUGF0aCgpO1xuXG4gICAgICAgICAgICBpZiAoZGF0YS5maWxsQ29sb3IgfHwgZGF0YS5maWxsQ29sb3IgPT09IDApXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29udGV4dC5nbG9iYWxBbHBoYSA9IGRhdGEuZmlsbEFscGhhICogd29ybGRBbHBoYTtcbiAgICAgICAgICAgICAgICBjb250ZXh0LmZpbGxTdHlsZSA9ICcjJyArICgnMDAwMDAnICsgKCBmaWxsQ29sb3IgfCAwKS50b1N0cmluZygxNikpLnN1YnN0cigtNik7XG4gICAgICAgICAgICAgICAgY29udGV4dC5maWxsKCk7XG5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChkYXRhLmxpbmVXaWR0aClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb250ZXh0Lmdsb2JhbEFscGhhID0gZGF0YS5saW5lQWxwaGEgKiB3b3JsZEFscGhhO1xuICAgICAgICAgICAgICAgIGNvbnRleHQuc3Ryb2tlU3R5bGUgPSAnIycgKyAoJzAwMDAwJyArICggbGluZUNvbG9yIHwgMCkudG9TdHJpbmcoMTYpKS5zdWJzdHIoLTYpO1xuICAgICAgICAgICAgICAgIGNvbnRleHQuc3Ryb2tlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG59O1xuXG4vKlxuICogUmVuZGVycyBhIGdyYXBoaWNzIG1hc2tcbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIGdyYXBoaWNzIHtQSVhJLkdyYXBoaWNzfSB0aGUgZ3JhcGhpY3Mgd2hpY2ggd2lsbCBiZSB1c2VkIGFzIGEgbWFza1xuICogQHBhcmFtIGNvbnRleHQge0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRH0gdGhlIGNvbnRleHQgMmQgbWV0aG9kIG9mIHRoZSBjYW52YXNcbiAqL1xuQ2FudmFzR3JhcGhpY3MucmVuZGVyR3JhcGhpY3NNYXNrID0gZnVuY3Rpb24gKGdyYXBoaWNzLCBjb250ZXh0KVxue1xuICAgIHZhciBsZW4gPSBncmFwaGljcy5ncmFwaGljc0RhdGEubGVuZ3RoO1xuXG4gICAgaWYgKGxlbiA9PT0gMClcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb250ZXh0LmJlZ2luUGF0aCgpO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47IGkrKylcbiAgICB7XG4gICAgICAgIHZhciBkYXRhID0gZ3JhcGhpY3MuZ3JhcGhpY3NEYXRhW2ldO1xuICAgICAgICB2YXIgc2hhcGUgPSBkYXRhLnNoYXBlO1xuXG4gICAgICAgIGlmIChkYXRhLnR5cGUgPT09IENPTlNULlNIQVBFUy5QT0xZKVxuICAgICAgICB7XG5cbiAgICAgICAgICAgIHZhciBwb2ludHMgPSBzaGFwZS5wb2ludHM7XG5cbiAgICAgICAgICAgIGNvbnRleHQubW92ZVRvKHBvaW50c1swXSwgcG9pbnRzWzFdKTtcblxuICAgICAgICAgICAgZm9yICh2YXIgaj0xOyBqIDwgcG9pbnRzLmxlbmd0aC8yOyBqKyspXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29udGV4dC5saW5lVG8ocG9pbnRzW2ogKiAyXSwgcG9pbnRzW2ogKiAyICsgMV0pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBpZiB0aGUgZmlyc3QgYW5kIGxhc3QgcG9pbnQgYXJlIHRoZSBzYW1lIGNsb3NlIHRoZSBwYXRoIC0gbXVjaCBuZWF0ZXIgOilcbiAgICAgICAgICAgIGlmIChwb2ludHNbMF0gPT09IHBvaW50c1twb2ludHMubGVuZ3RoLTJdICYmIHBvaW50c1sxXSA9PT0gcG9pbnRzW3BvaW50cy5sZW5ndGgtMV0pXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29udGV4dC5jbG9zZVBhdGgoKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGRhdGEudHlwZSA9PT0gQ09OU1QuU0hBUEVTLlJFQ1QpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNvbnRleHQucmVjdChzaGFwZS54LCBzaGFwZS55LCBzaGFwZS53aWR0aCwgc2hhcGUuaGVpZ2h0KTtcbiAgICAgICAgICAgIGNvbnRleHQuY2xvc2VQYXRoKCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoZGF0YS50eXBlID09PSBDT05TVC5TSEFQRVMuQ0lSQylcbiAgICAgICAge1xuICAgICAgICAgICAgLy8gVE9ETyAtIG5lZWQgdG8gYmUgVW5kZWZpbmVkIVxuICAgICAgICAgICAgY29udGV4dC5hcmMoc2hhcGUueCwgc2hhcGUueSwgc2hhcGUucmFkaXVzLCAwLCAyICogTWF0aC5QSSk7XG4gICAgICAgICAgICBjb250ZXh0LmNsb3NlUGF0aCgpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGRhdGEudHlwZSA9PT0gQ09OU1QuU0hBUEVTLkVMSVApXG4gICAgICAgIHtcblxuICAgICAgICAgICAgLy8gZWxsaXBzZSBjb2RlIHRha2VuIGZyb206IGh0dHA6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvMjE3Mjc5OC9ob3ctdG8tZHJhdy1hbi1vdmFsLWluLWh0bWw1LWNhbnZhc1xuXG4gICAgICAgICAgICB2YXIgdyA9IHNoYXBlLndpZHRoICogMjtcbiAgICAgICAgICAgIHZhciBoID0gc2hhcGUuaGVpZ2h0ICogMjtcblxuICAgICAgICAgICAgdmFyIHggPSBzaGFwZS54IC0gdy8yO1xuICAgICAgICAgICAgdmFyIHkgPSBzaGFwZS55IC0gaC8yO1xuXG4gICAgICAgICAgICB2YXIga2FwcGEgPSAwLjU1MjI4NDgsXG4gICAgICAgICAgICAgICAgb3ggPSAodyAvIDIpICoga2FwcGEsIC8vIGNvbnRyb2wgcG9pbnQgb2Zmc2V0IGhvcml6b250YWxcbiAgICAgICAgICAgICAgICBveSA9IChoIC8gMikgKiBrYXBwYSwgLy8gY29udHJvbCBwb2ludCBvZmZzZXQgdmVydGljYWxcbiAgICAgICAgICAgICAgICB4ZSA9IHggKyB3LCAgICAgICAgICAgLy8geC1lbmRcbiAgICAgICAgICAgICAgICB5ZSA9IHkgKyBoLCAgICAgICAgICAgLy8geS1lbmRcbiAgICAgICAgICAgICAgICB4bSA9IHggKyB3IC8gMiwgICAgICAgLy8geC1taWRkbGVcbiAgICAgICAgICAgICAgICB5bSA9IHkgKyBoIC8gMjsgICAgICAgLy8geS1taWRkbGVcblxuICAgICAgICAgICAgY29udGV4dC5tb3ZlVG8oeCwgeW0pO1xuICAgICAgICAgICAgY29udGV4dC5iZXppZXJDdXJ2ZVRvKHgsIHltIC0gb3ksIHhtIC0gb3gsIHksIHhtLCB5KTtcbiAgICAgICAgICAgIGNvbnRleHQuYmV6aWVyQ3VydmVUbyh4bSArIG94LCB5LCB4ZSwgeW0gLSBveSwgeGUsIHltKTtcbiAgICAgICAgICAgIGNvbnRleHQuYmV6aWVyQ3VydmVUbyh4ZSwgeW0gKyBveSwgeG0gKyBveCwgeWUsIHhtLCB5ZSk7XG4gICAgICAgICAgICBjb250ZXh0LmJlemllckN1cnZlVG8oeG0gLSBveCwgeWUsIHgsIHltICsgb3ksIHgsIHltKTtcbiAgICAgICAgICAgIGNvbnRleHQuY2xvc2VQYXRoKCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoZGF0YS50eXBlID09PSBDT05TVC5TSEFQRVMuUlJFQylcbiAgICAgICAge1xuXG4gICAgICAgICAgICB2YXIgcnggPSBzaGFwZS54O1xuICAgICAgICAgICAgdmFyIHJ5ID0gc2hhcGUueTtcbiAgICAgICAgICAgIHZhciB3aWR0aCA9IHNoYXBlLndpZHRoO1xuICAgICAgICAgICAgdmFyIGhlaWdodCA9IHNoYXBlLmhlaWdodDtcbiAgICAgICAgICAgIHZhciByYWRpdXMgPSBzaGFwZS5yYWRpdXM7XG5cbiAgICAgICAgICAgIHZhciBtYXhSYWRpdXMgPSBNYXRoLm1pbih3aWR0aCwgaGVpZ2h0KSAvIDIgfCAwO1xuICAgICAgICAgICAgcmFkaXVzID0gcmFkaXVzID4gbWF4UmFkaXVzID8gbWF4UmFkaXVzIDogcmFkaXVzO1xuXG4gICAgICAgICAgICBjb250ZXh0Lm1vdmVUbyhyeCwgcnkgKyByYWRpdXMpO1xuICAgICAgICAgICAgY29udGV4dC5saW5lVG8ocngsIHJ5ICsgaGVpZ2h0IC0gcmFkaXVzKTtcbiAgICAgICAgICAgIGNvbnRleHQucXVhZHJhdGljQ3VydmVUbyhyeCwgcnkgKyBoZWlnaHQsIHJ4ICsgcmFkaXVzLCByeSArIGhlaWdodCk7XG4gICAgICAgICAgICBjb250ZXh0LmxpbmVUbyhyeCArIHdpZHRoIC0gcmFkaXVzLCByeSArIGhlaWdodCk7XG4gICAgICAgICAgICBjb250ZXh0LnF1YWRyYXRpY0N1cnZlVG8ocnggKyB3aWR0aCwgcnkgKyBoZWlnaHQsIHJ4ICsgd2lkdGgsIHJ5ICsgaGVpZ2h0IC0gcmFkaXVzKTtcbiAgICAgICAgICAgIGNvbnRleHQubGluZVRvKHJ4ICsgd2lkdGgsIHJ5ICsgcmFkaXVzKTtcbiAgICAgICAgICAgIGNvbnRleHQucXVhZHJhdGljQ3VydmVUbyhyeCArIHdpZHRoLCByeSwgcnggKyB3aWR0aCAtIHJhZGl1cywgcnkpO1xuICAgICAgICAgICAgY29udGV4dC5saW5lVG8ocnggKyByYWRpdXMsIHJ5KTtcbiAgICAgICAgICAgIGNvbnRleHQucXVhZHJhdGljQ3VydmVUbyhyeCwgcnksIHJ4LCByeSArIHJhZGl1cyk7XG4gICAgICAgICAgICBjb250ZXh0LmNsb3NlUGF0aCgpO1xuICAgICAgICB9XG4gICAgfVxufTtcblxuLypcbiAqIFVwZGF0ZXMgdGhlIHRpbnQgb2YgYSBncmFwaGljcyBvYmplY3RcbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIGdyYXBoaWNzIHtQSVhJLkdyYXBoaWNzfSB0aGUgZ3JhcGhpY3MgdGhhdCB3aWxsIGhhdmUgaXRzIHRpbnQgdXBkYXRlZFxuICpcbiAqL1xuQ2FudmFzR3JhcGhpY3MudXBkYXRlR3JhcGhpY3NUaW50ID0gZnVuY3Rpb24gKGdyYXBoaWNzKVxue1xuICAgIGlmIChncmFwaGljcy50aW50ID09PSAweEZGRkZGRiAmJiBncmFwaGljcy5fcHJldlRpbnQgPT09IGdyYXBoaWNzLnRpbnQpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIGdyYXBoaWNzLl9wcmV2VGludCA9IGdyYXBoaWNzLnRpbnQ7XG5cbiAgICB2YXIgdGludFIgPSAoZ3JhcGhpY3MudGludCA+PiAxNiAmIDB4RkYpIC8gMjU1O1xuICAgIHZhciB0aW50RyA9IChncmFwaGljcy50aW50ID4+IDggJiAweEZGKSAvIDI1NTtcbiAgICB2YXIgdGludEIgPSAoZ3JhcGhpY3MudGludCAmIDB4RkYpLyAyNTU7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGdyYXBoaWNzLmdyYXBoaWNzRGF0YS5sZW5ndGg7IGkrKylcbiAgICB7XG4gICAgICAgIHZhciBkYXRhID0gZ3JhcGhpY3MuZ3JhcGhpY3NEYXRhW2ldO1xuXG4gICAgICAgIHZhciBmaWxsQ29sb3IgPSBkYXRhLmZpbGxDb2xvciB8IDA7XG4gICAgICAgIHZhciBsaW5lQ29sb3IgPSBkYXRhLmxpbmVDb2xvciB8IDA7XG5cbiAgICAgICAgLypcbiAgICAgICAgdmFyIGNvbG9yUiA9IChmaWxsQ29sb3IgPj4gMTYgJiAweEZGKSAvIDI1NTtcbiAgICAgICAgdmFyIGNvbG9yRyA9IChmaWxsQ29sb3IgPj4gOCAmIDB4RkYpIC8gMjU1O1xuICAgICAgICB2YXIgY29sb3JCID0gKGZpbGxDb2xvciAmIDB4RkYpIC8gMjU1O1xuXG4gICAgICAgIGNvbG9yUiAqPSB0aW50UjtcbiAgICAgICAgY29sb3JHICo9IHRpbnRHO1xuICAgICAgICBjb2xvckIgKj0gdGludEI7XG5cbiAgICAgICAgZmlsbENvbG9yID0gKChjb2xvclIqMjU1IDw8IDE2KSArIChjb2xvckcqMjU1IDw8IDgpICsgY29sb3JCKjI1NSk7XG5cbiAgICAgICAgY29sb3JSID0gKGxpbmVDb2xvciA+PiAxNiAmIDB4RkYpIC8gMjU1O1xuICAgICAgICBjb2xvckcgPSAobGluZUNvbG9yID4+IDggJiAweEZGKSAvIDI1NTtcbiAgICAgICAgY29sb3JCID0gKGxpbmVDb2xvciAmIDB4RkYpIC8gMjU1O1xuXG4gICAgICAgIGNvbG9yUiAqPSB0aW50UjtcbiAgICAgICAgY29sb3JHICo9IHRpbnRHO1xuICAgICAgICBjb2xvckIgKj0gdGludEI7XG5cbiAgICAgICAgbGluZUNvbG9yID0gKChjb2xvclIqMjU1IDw8IDE2KSArIChjb2xvckcqMjU1IDw8IDgpICsgY29sb3JCKjI1NSk7XG4gICAgICAgICovXG5cbiAgICAgICAgLy8gc3VwZXIgaW5saW5lIGNvcyBpbSBhbiBvcHRpbWl6YXRpb24gTkFaSSA6KVxuICAgICAgICBkYXRhLl9maWxsVGludCA9ICgoKGZpbGxDb2xvciA+PiAxNiAmIDB4RkYpIC8gMjU1ICogdGludFIqMjU1IDw8IDE2KSArICgoZmlsbENvbG9yID4+IDggJiAweEZGKSAvIDI1NSAqIHRpbnRHKjI1NSA8PCA4KSArICAoZmlsbENvbG9yICYgMHhGRikgLyAyNTUgKiB0aW50QioyNTUpO1xuICAgICAgICBkYXRhLl9saW5lVGludCA9ICgoKGxpbmVDb2xvciA+PiAxNiAmIDB4RkYpIC8gMjU1ICogdGludFIqMjU1IDw8IDE2KSArICgobGluZUNvbG9yID4+IDggJiAweEZGKSAvIDI1NSAqIHRpbnRHKjI1NSA8PCA4KSArICAobGluZUNvbG9yICYgMHhGRikgLyAyNTUgKiB0aW50QioyNTUpO1xuXG4gICAgfVxufTtcblxuIiwidmFyIENhbnZhc0dyYXBoaWNzID0gcmVxdWlyZSgnLi9DYW52YXNHcmFwaGljcycpO1xuXG4vKipcbiAqIEEgc2V0IG9mIGZ1bmN0aW9ucyB1c2VkIHRvIGhhbmRsZSBtYXNraW5nLlxuICpcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqL1xuZnVuY3Rpb24gQ2FudmFzTWFza01hbmFnZXIoKVxue31cblxuQ2FudmFzTWFza01hbmFnZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gQ2FudmFzTWFza01hbmFnZXI7XG5tb2R1bGUuZXhwb3J0cyA9IENhbnZhc01hc2tNYW5hZ2VyO1xuXG4vKipcbiAqIFRoaXMgbWV0aG9kIGFkZHMgaXQgdG8gdGhlIGN1cnJlbnQgc3RhY2sgb2YgbWFza3MuXG4gKlxuICogQHBhcmFtIG1hc2tEYXRhIHtvYmplY3R9IHRoZSBtYXNrRGF0YSB0aGF0IHdpbGwgYmUgcHVzaGVkXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcnxQSVhJLkNhbnZhc1JlbmRlcmVyfSBUaGUgcmVuZGVyZXIgY29udGV4dCB0byB1c2UuXG4gKi9cbkNhbnZhc01hc2tNYW5hZ2VyLnByb3RvdHlwZS5wdXNoTWFzayA9IGZ1bmN0aW9uIChtYXNrRGF0YSwgcmVuZGVyZXIpXG57XG5cbiAgICByZW5kZXJlci5jb250ZXh0LnNhdmUoKTtcblxuICAgIHZhciBjYWNoZUFscGhhID0gbWFza0RhdGEuYWxwaGE7XG4gICAgdmFyIHRyYW5zZm9ybSA9IG1hc2tEYXRhLndvcmxkVHJhbnNmb3JtO1xuICAgIHZhciByZXNvbHV0aW9uID0gcmVuZGVyZXIucmVzb2x1dGlvbjtcblxuICAgIHJlbmRlcmVyLmNvbnRleHQuc2V0VHJhbnNmb3JtKFxuICAgICAgICB0cmFuc2Zvcm0uYSAqIHJlc29sdXRpb24sXG4gICAgICAgIHRyYW5zZm9ybS5iICogcmVzb2x1dGlvbixcbiAgICAgICAgdHJhbnNmb3JtLmMgKiByZXNvbHV0aW9uLFxuICAgICAgICB0cmFuc2Zvcm0uZCAqIHJlc29sdXRpb24sXG4gICAgICAgIHRyYW5zZm9ybS50eCAqIHJlc29sdXRpb24sXG4gICAgICAgIHRyYW5zZm9ybS50eSAqIHJlc29sdXRpb25cbiAgICApO1xuXG4gICAgLy9UT0RPIHN1cG9ydCBzcHJpdGUgYWxwaGEgbWFza3M/P1xuICAgIC8vbG90cyBvZiBlZmZvcnQgcmVxdWlyZWQuIElmIGRlbWFuZCBpcyBncmVhdCBlbm91Z2guLlxuICAgIGlmKCFtYXNrRGF0YS50ZXh0dXJlKVxuICAgIHtcbiAgICAgICAgQ2FudmFzR3JhcGhpY3MucmVuZGVyR3JhcGhpY3NNYXNrKG1hc2tEYXRhLCByZW5kZXJlci5jb250ZXh0KTtcbiAgICAgICAgcmVuZGVyZXIuY29udGV4dC5jbGlwKCk7XG4gICAgfVxuXG4gICAgbWFza0RhdGEud29ybGRBbHBoYSA9IGNhY2hlQWxwaGE7XG59O1xuXG4vKipcbiAqIFJlc3RvcmVzIHRoZSBjdXJyZW50IGRyYXdpbmcgY29udGV4dCB0byB0aGUgc3RhdGUgaXQgd2FzIGJlZm9yZSB0aGUgbWFzayB3YXMgYXBwbGllZC5cbiAqXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcnxQSVhJLkNhbnZhc1JlbmRlcmVyfSBUaGUgcmVuZGVyZXIgY29udGV4dCB0byB1c2UuXG4gKi9cbkNhbnZhc01hc2tNYW5hZ2VyLnByb3RvdHlwZS5wb3BNYXNrID0gZnVuY3Rpb24gKHJlbmRlcmVyKVxue1xuICAgIHJlbmRlcmVyLmNvbnRleHQucmVzdG9yZSgpO1xufTtcblxuQ2FudmFzTWFza01hbmFnZXIucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoKSB7fTtcbiIsInZhciB1dGlscyA9IHJlcXVpcmUoJy4uLy4uLy4uL3V0aWxzJyk7XG5cbi8qKlxuICogVXRpbGl0eSBtZXRob2RzIGZvciBTcHJpdGUvVGV4dHVyZSB0aW50aW5nLlxuICogQHN0YXRpY1xuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICovXG52YXIgQ2FudmFzVGludGVyID0ge307XG5tb2R1bGUuZXhwb3J0cyA9IENhbnZhc1RpbnRlcjtcblxuLyoqXG4gKiBCYXNpY2FsbHkgdGhpcyBtZXRob2QganVzdCBuZWVkcyBhIHNwcml0ZSBhbmQgYSBjb2xvciBhbmQgdGludHMgdGhlIHNwcml0ZSB3aXRoIHRoZSBnaXZlbiBjb2xvci5cbiAqXG4gKiBAcGFyYW0gc3ByaXRlIHtQSVhJLlNwcml0ZX0gdGhlIHNwcml0ZSB0byB0aW50XG4gKiBAcGFyYW0gY29sb3Ige251bWJlcn0gdGhlIGNvbG9yIHRvIHVzZSB0byB0aW50IHRoZSBzcHJpdGUgd2l0aFxuICogQHJldHVybiB7SFRNTENhbnZhc0VsZW1lbnR9IFRoZSB0aW50ZWQgY2FudmFzXG4gKi9cbkNhbnZhc1RpbnRlci5nZXRUaW50ZWRUZXh0dXJlID0gZnVuY3Rpb24gKHNwcml0ZSwgY29sb3IpXG57XG4gICAgdmFyIHRleHR1cmUgPSBzcHJpdGUudGV4dHVyZTtcblxuICAgIGNvbG9yID0gQ2FudmFzVGludGVyLnJvdW5kQ29sb3IoY29sb3IpO1xuXG4gICAgdmFyIHN0cmluZ0NvbG9yID0gJyMnICsgKCcwMDAwMCcgKyAoIGNvbG9yIHwgMCkudG9TdHJpbmcoMTYpKS5zdWJzdHIoLTYpO1xuXG4gICAgdGV4dHVyZS50aW50Q2FjaGUgPSB0ZXh0dXJlLnRpbnRDYWNoZSB8fCB7fTtcblxuICAgIGlmICh0ZXh0dXJlLnRpbnRDYWNoZVtzdHJpbmdDb2xvcl0pXG4gICAge1xuICAgICAgICByZXR1cm4gdGV4dHVyZS50aW50Q2FjaGVbc3RyaW5nQ29sb3JdO1xuICAgIH1cblxuICAgICAvLyBjbG9uZSB0ZXh0dXJlLi5cbiAgICB2YXIgY2FudmFzID0gQ2FudmFzVGludGVyLmNhbnZhcyB8fCBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdjYW52YXMnKTtcblxuICAgIC8vQ2FudmFzVGludGVyLnRpbnRXaXRoUGVyUGl4ZWwodGV4dHVyZSwgc3RyaW5nQ29sb3IsIGNhbnZhcyk7XG4gICAgQ2FudmFzVGludGVyLnRpbnRNZXRob2QodGV4dHVyZSwgY29sb3IsIGNhbnZhcyk7XG5cbiAgICBpZiAoQ2FudmFzVGludGVyLmNvbnZlcnRUaW50VG9JbWFnZSlcbiAgICB7XG4gICAgICAgIC8vIGlzIHRoaXMgYmV0dGVyP1xuICAgICAgICB2YXIgdGludEltYWdlID0gbmV3IEltYWdlKCk7XG4gICAgICAgIHRpbnRJbWFnZS5zcmMgPSBjYW52YXMudG9EYXRhVVJMKCk7XG5cbiAgICAgICAgdGV4dHVyZS50aW50Q2FjaGVbc3RyaW5nQ29sb3JdID0gdGludEltYWdlO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICB0ZXh0dXJlLnRpbnRDYWNoZVtzdHJpbmdDb2xvcl0gPSBjYW52YXM7XG4gICAgICAgIC8vIGlmIHdlIGFyZSBub3QgY29udmVydGluZyB0aGUgdGV4dHVyZSB0byBhbiBpbWFnZSB0aGVuIHdlIG5lZWQgdG8gbG9zZSB0aGUgcmVmZXJlbmNlIHRvIHRoZSBjYW52YXNcbiAgICAgICAgQ2FudmFzVGludGVyLmNhbnZhcyA9IG51bGw7XG4gICAgfVxuXG4gICAgcmV0dXJuIGNhbnZhcztcbn07XG5cbi8qKlxuICogVGludCBhIHRleHR1cmUgdXNpbmcgdGhlICdtdWx0aXBseScgb3BlcmF0aW9uLlxuICpcbiAqIEBwYXJhbSB0ZXh0dXJlIHtQSVhJLlRleHR1cmV9IHRoZSB0ZXh0dXJlIHRvIHRpbnRcbiAqIEBwYXJhbSBjb2xvciB7bnVtYmVyfSB0aGUgY29sb3IgdG8gdXNlIHRvIHRpbnQgdGhlIHNwcml0ZSB3aXRoXG4gKiBAcGFyYW0gY2FudmFzIHtIVE1MQ2FudmFzRWxlbWVudH0gdGhlIGN1cnJlbnQgY2FudmFzXG4gKi9cbkNhbnZhc1RpbnRlci50aW50V2l0aE11bHRpcGx5ID0gZnVuY3Rpb24gKHRleHR1cmUsIGNvbG9yLCBjYW52YXMpXG57XG4gICAgdmFyIGNvbnRleHQgPSBjYW52YXMuZ2V0Q29udGV4dCggJzJkJyApO1xuXG4gICAgdmFyIHJlc29sdXRpb24gPSB0ZXh0dXJlLmJhc2VUZXh0dXJlLnJlc29sdXRpb247XG5cbiAgICB2YXIgY3JvcCA9IHRleHR1cmUuY3JvcC5jbG9uZSgpO1xuICAgIGNyb3AueCAqPSByZXNvbHV0aW9uO1xuICAgIGNyb3AueSAqPSByZXNvbHV0aW9uO1xuICAgIGNyb3Aud2lkdGggKj0gcmVzb2x1dGlvbjtcbiAgICBjcm9wLmhlaWdodCAqPSByZXNvbHV0aW9uO1xuXG4gICAgY2FudmFzLndpZHRoID0gY3JvcC53aWR0aDtcbiAgICBjYW52YXMuaGVpZ2h0ID0gY3JvcC5oZWlnaHQ7XG5cbiAgICBjb250ZXh0LmZpbGxTdHlsZSA9ICcjJyArICgnMDAwMDAnICsgKCBjb2xvciB8IDApLnRvU3RyaW5nKDE2KSkuc3Vic3RyKC02KTtcblxuICAgIGNvbnRleHQuZmlsbFJlY3QoMCwgMCwgY3JvcC53aWR0aCwgY3JvcC5oZWlnaHQpO1xuXG4gICAgY29udGV4dC5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb24gPSAnbXVsdGlwbHknO1xuXG4gICAgY29udGV4dC5kcmF3SW1hZ2UoXG4gICAgICAgIHRleHR1cmUuYmFzZVRleHR1cmUuc291cmNlLFxuICAgICAgICBjcm9wLngsXG4gICAgICAgIGNyb3AueSxcbiAgICAgICAgY3JvcC53aWR0aCxcbiAgICAgICAgY3JvcC5oZWlnaHQsXG4gICAgICAgIDAsXG4gICAgICAgIDAsXG4gICAgICAgIGNyb3Aud2lkdGgsXG4gICAgICAgIGNyb3AuaGVpZ2h0XG4gICAgKTtcblxuICAgIGNvbnRleHQuZ2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uID0gJ2Rlc3RpbmF0aW9uLWF0b3AnO1xuXG4gICAgY29udGV4dC5kcmF3SW1hZ2UoXG4gICAgICAgIHRleHR1cmUuYmFzZVRleHR1cmUuc291cmNlLFxuICAgICAgICBjcm9wLngsXG4gICAgICAgIGNyb3AueSxcbiAgICAgICAgY3JvcC53aWR0aCxcbiAgICAgICAgY3JvcC5oZWlnaHQsXG4gICAgICAgIDAsXG4gICAgICAgIDAsXG4gICAgICAgIGNyb3Aud2lkdGgsXG4gICAgICAgIGNyb3AuaGVpZ2h0XG4gICAgKTtcbn07XG5cbi8qKlxuICogVGludCBhIHRleHR1cmUgdXNpbmcgdGhlICdvdmVybGF5JyBvcGVyYXRpb24uXG4gKlxuICogQHBhcmFtIHRleHR1cmUge1BJWEkuVGV4dHVyZX0gdGhlIHRleHR1cmUgdG8gdGludFxuICogQHBhcmFtIGNvbG9yIHtudW1iZXJ9IHRoZSBjb2xvciB0byB1c2UgdG8gdGludCB0aGUgc3ByaXRlIHdpdGhcbiAqIEBwYXJhbSBjYW52YXMge0hUTUxDYW52YXNFbGVtZW50fSB0aGUgY3VycmVudCBjYW52YXNcbiAqL1xuQ2FudmFzVGludGVyLnRpbnRXaXRoT3ZlcmxheSA9IGZ1bmN0aW9uICh0ZXh0dXJlLCBjb2xvciwgY2FudmFzKVxue1xuICAgIHZhciBjb250ZXh0ID0gY2FudmFzLmdldENvbnRleHQoICcyZCcgKTtcblxuICAgIHZhciByZXNvbHV0aW9uID0gdGV4dHVyZS5iYXNlVGV4dHVyZS5yZXNvbHV0aW9uO1xuXG4gICAgdmFyIGNyb3AgPSB0ZXh0dXJlLmNyb3AuY2xvbmUoKTtcbiAgICBjcm9wLnggKj0gcmVzb2x1dGlvbjtcbiAgICBjcm9wLnkgKj0gcmVzb2x1dGlvbjtcbiAgICBjcm9wLndpZHRoICo9IHJlc29sdXRpb247XG4gICAgY3JvcC5oZWlnaHQgKj0gcmVzb2x1dGlvbjtcblxuICAgIGNhbnZhcy53aWR0aCA9IGNyb3Aud2lkdGg7XG4gICAgY2FudmFzLmhlaWdodCA9IGNyb3AuaGVpZ2h0O1xuXG4gICAgY29udGV4dC5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb24gPSAnY29weSc7XG4gICAgY29udGV4dC5maWxsU3R5bGUgPSAnIycgKyAoJzAwMDAwJyArICggY29sb3IgfCAwKS50b1N0cmluZygxNikpLnN1YnN0cigtNik7XG4gICAgY29udGV4dC5maWxsUmVjdCgwLCAwLCBjcm9wLndpZHRoLCBjcm9wLmhlaWdodCk7XG5cbiAgICBjb250ZXh0Lmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbiA9ICdkZXN0aW5hdGlvbi1hdG9wJztcbiAgICBjb250ZXh0LmRyYXdJbWFnZShcbiAgICAgICAgdGV4dHVyZS5iYXNlVGV4dHVyZS5zb3VyY2UsXG4gICAgICAgIGNyb3AueCxcbiAgICAgICAgY3JvcC55LFxuICAgICAgICBjcm9wLndpZHRoLFxuICAgICAgICBjcm9wLmhlaWdodCxcbiAgICAgICAgMCxcbiAgICAgICAgMCxcbiAgICAgICAgY3JvcC53aWR0aCxcbiAgICAgICAgY3JvcC5oZWlnaHRcbiAgICApO1xuXG4gICAgLy8gY29udGV4dC5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb24gPSAnY29weSc7XG59O1xuXG4vKipcbiAqIFRpbnQgYSB0ZXh0dXJlIHBpeGVsIHBlciBwaXhlbC5cbiAqXG4gKiBAcGFyYW0gdGV4dHVyZSB7UElYSS5UZXh0dXJlfSB0aGUgdGV4dHVyZSB0byB0aW50XG4gKiBAcGFyYW0gY29sb3Ige251bWJlcn0gdGhlIGNvbG9yIHRvIHVzZSB0byB0aW50IHRoZSBzcHJpdGUgd2l0aFxuICogQHBhcmFtIGNhbnZhcyB7SFRNTENhbnZhc0VsZW1lbnR9IHRoZSBjdXJyZW50IGNhbnZhc1xuICovXG5DYW52YXNUaW50ZXIudGludFdpdGhQZXJQaXhlbCA9IGZ1bmN0aW9uICh0ZXh0dXJlLCBjb2xvciwgY2FudmFzKVxue1xuICAgIHZhciBjb250ZXh0ID0gY2FudmFzLmdldENvbnRleHQoICcyZCcgKTtcblxuICAgIHZhciByZXNvbHV0aW9uID0gdGV4dHVyZS5iYXNlVGV4dHVyZS5yZXNvbHV0aW9uO1xuXG4gICAgdmFyIGNyb3AgPSB0ZXh0dXJlLmNyb3AuY2xvbmUoKTtcbiAgICBjcm9wLnggKj0gcmVzb2x1dGlvbjtcbiAgICBjcm9wLnkgKj0gcmVzb2x1dGlvbjtcbiAgICBjcm9wLndpZHRoICo9IHJlc29sdXRpb247XG4gICAgY3JvcC5oZWlnaHQgKj0gcmVzb2x1dGlvbjtcblxuICAgIGNhbnZhcy53aWR0aCA9IGNyb3Aud2lkdGg7XG4gICAgY2FudmFzLmhlaWdodCA9IGNyb3AuaGVpZ2h0O1xuXG4gICAgY29udGV4dC5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb24gPSAnY29weSc7XG4gICAgY29udGV4dC5kcmF3SW1hZ2UoXG4gICAgICAgIHRleHR1cmUuYmFzZVRleHR1cmUuc291cmNlLFxuICAgICAgICBjcm9wLngsXG4gICAgICAgIGNyb3AueSxcbiAgICAgICAgY3JvcC53aWR0aCxcbiAgICAgICAgY3JvcC5oZWlnaHQsXG4gICAgICAgIDAsXG4gICAgICAgIDAsXG4gICAgICAgIGNyb3Aud2lkdGgsXG4gICAgICAgIGNyb3AuaGVpZ2h0XG4gICAgKTtcblxuICAgIHZhciByZ2JWYWx1ZXMgPSB1dGlscy5oZXgycmdiKGNvbG9yKTtcbiAgICB2YXIgciA9IHJnYlZhbHVlc1swXSwgZyA9IHJnYlZhbHVlc1sxXSwgYiA9IHJnYlZhbHVlc1syXTtcblxuICAgIHZhciBwaXhlbERhdGEgPSBjb250ZXh0LmdldEltYWdlRGF0YSgwLCAwLCBjcm9wLndpZHRoLCBjcm9wLmhlaWdodCk7XG5cbiAgICB2YXIgcGl4ZWxzID0gcGl4ZWxEYXRhLmRhdGE7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHBpeGVscy5sZW5ndGg7IGkgKz0gNClcbiAgICB7XG4gICAgICAgIHBpeGVsc1tpKzBdICo9IHI7XG4gICAgICAgIHBpeGVsc1tpKzFdICo9IGc7XG4gICAgICAgIHBpeGVsc1tpKzJdICo9IGI7XG4gICAgfVxuXG4gICAgY29udGV4dC5wdXRJbWFnZURhdGEocGl4ZWxEYXRhLCAwLCAwKTtcbn07XG5cbi8qKlxuICogUm91bmRzIHRoZSBzcGVjaWZpZWQgY29sb3IgYWNjb3JkaW5nIHRvIHRoZSBDYW52YXNUaW50ZXIuY2FjaGVTdGVwc1BlckNvbG9yQ2hhbm5lbC5cbiAqXG4gKiBAcGFyYW0gY29sb3Ige251bWJlcn0gdGhlIGNvbG9yIHRvIHJvdW5kLCBzaG91bGQgYmUgYSBoZXggY29sb3JcbiAqL1xuQ2FudmFzVGludGVyLnJvdW5kQ29sb3IgPSBmdW5jdGlvbiAoY29sb3IpXG57XG4gICAgdmFyIHN0ZXAgPSBDYW52YXNUaW50ZXIuY2FjaGVTdGVwc1BlckNvbG9yQ2hhbm5lbDtcblxuICAgIHZhciByZ2JWYWx1ZXMgPSB1dGlscy5oZXgycmdiKGNvbG9yKTtcblxuICAgIHJnYlZhbHVlc1swXSA9IE1hdGgubWluKDI1NSwgKHJnYlZhbHVlc1swXSAvIHN0ZXApICogc3RlcCk7XG4gICAgcmdiVmFsdWVzWzFdID0gTWF0aC5taW4oMjU1LCAocmdiVmFsdWVzWzFdIC8gc3RlcCkgKiBzdGVwKTtcbiAgICByZ2JWYWx1ZXNbMl0gPSBNYXRoLm1pbigyNTUsIChyZ2JWYWx1ZXNbMl0gLyBzdGVwKSAqIHN0ZXApO1xuXG4gICAgcmV0dXJuIHV0aWxzLnJnYjJoZXgocmdiVmFsdWVzKTtcbn07XG5cbi8qKlxuICogTnVtYmVyIG9mIHN0ZXBzIHdoaWNoIHdpbGwgYmUgdXNlZCBhcyBhIGNhcCB3aGVuIHJvdW5kaW5nIGNvbG9ycy5cbiAqXG4gKiBAbWVtYmVyXG4gKi9cbkNhbnZhc1RpbnRlci5jYWNoZVN0ZXBzUGVyQ29sb3JDaGFubmVsID0gODtcblxuLyoqXG4gKiBUaW50IGNhY2hlIGJvb2xlYW4gZmxhZy5cbiAqXG4gKiBAbWVtYmVyXG4gKi9cbkNhbnZhc1RpbnRlci5jb252ZXJ0VGludFRvSW1hZ2UgPSBmYWxzZTtcblxuLyoqXG4gKiBXaGV0aGVyIG9yIG5vdCB0aGUgQ2FudmFzIEJsZW5kTW9kZXMgYXJlIHN1cHBvcnRlZCwgY29uc2VxdWVudGx5IHRoZSBhYmlsaXR5IHRvIHRpbnQgdXNpbmcgdGhlIG11bHRpcGx5IG1ldGhvZC5cbiAqXG4gKiBAbWVtYmVyXG4gKi9cbkNhbnZhc1RpbnRlci5jYW5Vc2VNdWx0aXBseSA9IHV0aWxzLmNhblVzZU5ld0NhbnZhc0JsZW5kTW9kZXMoKTtcblxuLyoqXG4gKiBUaGUgdGludGluZyBtZXRob2QgdGhhdCB3aWxsIGJlIHVzZWQuXG4gKlxuICovXG5DYW52YXNUaW50ZXIudGludE1ldGhvZCA9IENhbnZhc1RpbnRlci5jYW5Vc2VNdWx0aXBseSA/IENhbnZhc1RpbnRlci50aW50V2l0aE11bHRpcGx5IDogIENhbnZhc1RpbnRlci50aW50V2l0aFBlclBpeGVsO1xuIiwidmFyIEdMVGV4dHVyZSA9IHJlcXVpcmUoJ3BpeGktZ2wtY29yZScpLkdMVGV4dHVyZSxcblx0dXRpbHMgPSByZXF1aXJlKCcuLi8uLi91dGlscycpO1xuXG4vKipcbiAqIEhlbHBlciBjbGFzcyB0byBjcmVhdGUgYSB3ZWJHTCBUZXh0dXJlXG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIGdsIHtXZWJHTFJlbmRlcmluZ0NvbnRleHR9XG4gKi9cblxudmFyIFRleHR1cmVNYW5hZ2VyID0gZnVuY3Rpb24oZ2wpXG57XG5cdHRoaXMuZ2wgPSBnbDtcblxuXHQvLyB0cmFjayB0ZXh0dXJlcyBpbiB0aGUgcmVuZGVyZXIgc28gd2UgY2FuIG5vIGxvbmdlciBsaXN0ZW4gdG8gdGhlbSBvbiBkZXN0cnVjdGlvbi5cblx0dGhpcy5fbWFuYWdlZFRleHR1cmVzID0gW107XG4gICAgdGhpcy5nbFRleHR1cmVzID0ge307XG5cbn1cblxuVGV4dHVyZU1hbmFnZXIucHJvdG90eXBlLmJpbmRUZXh0dXJlID0gZnVuY3Rpb24odGV4dHVyZSlcbntcblxufVxuXG5cblRleHR1cmVNYW5hZ2VyLnByb3RvdHlwZS5nZXRUZXh0dXJlID0gZnVuY3Rpb24odGV4dHVyZSlcbntcblxufVxuXG4vKipcbiAqIFVwZGF0ZXMgYW5kL29yIENyZWF0ZXMgYSBXZWJHTCB0ZXh0dXJlIGZvciB0aGUgcmVuZGVyZXIncyBjb250ZXh0LlxuICpcbiAqIEBwYXJhbSB0ZXh0dXJlIHtQSVhJLkJhc2VUZXh0dXJlfFBJWEkuVGV4dHVyZX0gdGhlIHRleHR1cmUgdG8gdXBkYXRlXG4gKi9cblRleHR1cmVNYW5hZ2VyLnByb3RvdHlwZS51cGRhdGVUZXh0dXJlID0gZnVuY3Rpb24odGV4dHVyZSlcbntcblx0dGV4dHVyZSA9IHRleHR1cmUuYmFzZVRleHR1cmUgfHwgdGV4dHVyZTtcblxuXHRpZiAoIXRleHR1cmUuaGFzTG9hZGVkKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIFxuICAgIHZhciBnbCA9IHRoaXMuZ2w7XG4gICAgdmFyIGdsVGV4dHVyZSA9IHRoaXMuZ2xUZXh0dXJlc1t0ZXh0dXJlLnVpZF0vL3RleHR1cmUuX2dsVGV4dHVyZXNbZ2wuaWRdO1xuXG4gICAgaWYgKCFnbFRleHR1cmUpXG4gICAge1xuICAgICAgICBnbFRleHR1cmUgPSBuZXcgR0xUZXh0dXJlKGdsKTtcbiAgICAgICAgZ2xUZXh0dXJlLnByZW11bHRpcGx5QWxwaGEgPSB0cnVlXG4gICAgICAgIHRleHR1cmUuX2dsVGV4dHVyZXNbZ2wuaWRdID0gZ2xUZXh0dXJlO1xuXG4gICAgICAgLy8gdGhpcy5nbFRleHR1cmVzW3RleHR1cmUudWlkXSA9IGdsVGV4dHVyZTtcblxuICAgICAgICB0ZXh0dXJlLm9uKCd1cGRhdGUnLCB0aGlzLnVwZGF0ZVRleHR1cmUsIHRoaXMpO1xuICAgICAgICB0ZXh0dXJlLm9uKCdkaXNwb3NlJywgdGhpcy5kZXN0cm95VGV4dHVyZSwgdGhpcyk7XG4gICAgICAgIFxuICAgICAgICB0aGlzLl9tYW5hZ2VkVGV4dHVyZXMucHVzaCh0ZXh0dXJlKTtcbiAgICB9XG5cbiAgICBnbFRleHR1cmUudXBsb2FkKHRleHR1cmUuc291cmNlKTtcbiAgICBcbiAgICAvL1RPRE8gY2hlY2sgaXMgcG93ZXIgb2YgdHdvLi5cbiAgICBnbFRleHR1cmUuZW5hYmxlV3JhcENsYW1wKCk7XG5cblxuICAgIC8vIFRPRE8gY2hlY2sgZm9yIHNjYWxpbmcgdHlwZVxuICAgIGdsVGV4dHVyZS5lbmFibGVMaW5lYXJTY2FsaW5nKCk7XG5cbiAgICByZXR1cm4gIHRleHR1cmUuX2dsVGV4dHVyZXNbZ2wuaWRdO1xufVxuXG4vKipcbiAqIERlbGV0ZXMgdGhlIHRleHR1cmUgZnJvbSBXZWJHTFxuICpcbiAqIEBwYXJhbSB0ZXh0dXJlIHtQSVhJLkJhc2VUZXh0dXJlfFBJWEkuVGV4dHVyZX0gdGhlIHRleHR1cmUgdG8gZGVzdHJveVxuICovXG5UZXh0dXJlTWFuYWdlci5wcm90b3R5cGUuZGVzdHJveVRleHR1cmUgPSBmdW5jdGlvbih0ZXh0dXJlLCBfc2tpcFJlbW92ZSlcbntcblx0dGV4dHVyZSA9IHRleHR1cmUuYmFzZVRleHR1cmUgfHwgdGV4dHVyZTtcblxuICAgIGlmICghdGV4dHVyZS5oYXNMb2FkZWQpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHRleHR1cmUuX2dsVGV4dHVyZXNbdGhpcy5nbC5pZF0pXG4gICAge1xuICAgICAgICB0ZXh0dXJlLl9nbFRleHR1cmVzW3RoaXMuZ2wuaWRdLmRlc3Ryb3koKTtcbiAgICAgICAgdGV4dHVyZS5vZmYoJ3VwZGF0ZScsIHRoaXMudXBkYXRlVGV4dHVyZSwgdGhpcyk7XG4gICAgICAgIHRleHR1cmUub2ZmKCdkaXNwb3NlJywgdGhpcy5kZXN0cm95VGV4dHVyZSwgdGhpcyk7XG5cblxuICAgICAgICBkZWxldGUgdGV4dHVyZS5fZ2xUZXh0dXJlc1t0aGlzLmdsLmlkXTtcblxuICAgICAgICBpZiAoIV9za2lwUmVtb3ZlKVxuICAgICAgICB7XG4gICAgICAgICAgICB2YXIgaSA9IHRoaXMuX21hbmFnZWRUZXh0dXJlcy5pbmRleE9mKHRleHR1cmUpO1xuICAgICAgICAgICAgaWYgKGkgIT09IC0xKSB7XG4gICAgICAgICAgICAgICAgdXRpbHMucmVtb3ZlSXRlbXModGhpcy5fbWFuYWdlZFRleHR1cmVzLCBpLCAxKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn1cblxuVGV4dHVyZU1hbmFnZXIucHJvdG90eXBlLnJlbW92ZUFsbCA9IGZ1bmN0aW9uKClcbntcblx0Ly8gZW1wdHkgYWxsIHRoZSBvbGQgZ2wgdGV4dHVyZXMgYXMgdGhleSBhcmUgdXNlbGVzcyBub3dcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuX21hbmFnZWRUZXh0dXJlcy5sZW5ndGg7ICsraSlcbiAgICB7XG4gICAgICAgIHZhciB0ZXh0dXJlID0gdGhpcy5fbWFuYWdlZFRleHR1cmVzW2ldO1xuICAgICAgICBpZiAodGV4dHVyZS5fZ2xUZXh0dXJlc1t0aGlzLmdsLmlkXSlcbiAgICAgICAge1xuICAgICAgICAgICAgZGVsZXRlIHRleHR1cmUuX2dsVGV4dHVyZXNbdGhpcy5nbC5pZF07XG4gICAgICAgIH1cbiAgICB9XG59XG5cblRleHR1cmVNYW5hZ2VyLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24oKVxue1xuICAgIC8vIGRlc3Ryb3kgbWFuYWdlZCB0ZXh0dXJlc1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5fbWFuYWdlZFRleHR1cmVzLmxlbmd0aDsgKytpKVxuICAgIHtcbiAgICAgICAgdmFyIHRleHR1cmUgPSB0aGlzLl9tYW5hZ2VkVGV4dHVyZXNbaV07XG4gICAgICAgIHRoaXMuZGVzdHJveVRleHR1cmUodGV4dHVyZSwgdHJ1ZSk7XG4gICAgICAgIHRleHR1cmUub2ZmKCd1cGRhdGUnLCB0aGlzLnVwZGF0ZVRleHR1cmUsIHRoaXMpO1xuICAgICAgICB0ZXh0dXJlLm9mZignZGlzcG9zZScsIHRoaXMuZGVzdHJveVRleHR1cmUsIHRoaXMpO1xuICAgIH1cblxuICAgIHRoaXMuX21hbmFnZWRUZXh0dXJlcyA9IG51bGw7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gVGV4dHVyZU1hbmFnZXI7XG5cbiIsInZhciBTeXN0ZW1SZW5kZXJlciA9IHJlcXVpcmUoJy4uL1N5c3RlbVJlbmRlcmVyJyksXG4gICAgU2hhZGVyTWFuYWdlciA9IHJlcXVpcmUoJy4vbWFuYWdlcnMvU2hhZGVyTWFuYWdlcicpLFxuICAgIE1hc2tNYW5hZ2VyID0gcmVxdWlyZSgnLi9tYW5hZ2Vycy9NYXNrTWFuYWdlcicpLFxuICAgIFN0ZW5jaWxNYW5hZ2VyID0gcmVxdWlyZSgnLi9tYW5hZ2Vycy9TdGVuY2lsTWFuYWdlcicpLFxuICAgIEZpbHRlck1hbmFnZXIgPSByZXF1aXJlKCcuL21hbmFnZXJzL0ZpbHRlck1hbmFnZXInKSxcbiAgICBCbGVuZE1vZGVNYW5hZ2VyID0gcmVxdWlyZSgnLi9tYW5hZ2Vycy9CbGVuZE1vZGVNYW5hZ2VyJyksXG4gICAgUmVuZGVyVGFyZ2V0ID0gcmVxdWlyZSgnLi91dGlscy9SZW5kZXJUYXJnZXQnKSxcbiAgICBPYmplY3RSZW5kZXJlciA9IHJlcXVpcmUoJy4vdXRpbHMvT2JqZWN0UmVuZGVyZXInKSxcbiAgICBGWEFBRmlsdGVyID0gcmVxdWlyZSgnLi9maWx0ZXJzL0ZYQUFGaWx0ZXInKSxcbiAgICBUZXh0dXJlTWFuYWdlciA9IHJlcXVpcmUoJy4vVGV4dHVyZU1hbmFnZXInKSxcbiAgICBjcmVhdGVDb250ZXh0ID0gcmVxdWlyZSgncGl4aS1nbC1jb3JlJykuY3JlYXRlQ29udGV4dCxcbiAgICBtYXBXZWJHTEJsZW5kTW9kZXNUb1BpeGkgPSByZXF1aXJlKCcuL3V0aWxzL21hcFdlYkdMQmxlbmRNb2Rlc1RvUGl4aScpLFxuICAgIG1hcFdlYkdMRHJhd01vZGVzVG9QaXhpID0gcmVxdWlyZSgnLi91dGlscy9tYXBXZWJHTERyYXdNb2Rlc1RvUGl4aScpLFxuICAgIHV0aWxzID0gcmVxdWlyZSgnLi4vLi4vdXRpbHMnKSxcbiAgICBDT05TVCA9IHJlcXVpcmUoJy4uLy4uL2NvbnN0Jyk7XG5cbi8qKlxuICogVGhlIFdlYkdMUmVuZGVyZXIgZHJhd3MgdGhlIHNjZW5lIGFuZCBhbGwgaXRzIGNvbnRlbnQgb250byBhIHdlYkdMIGVuYWJsZWQgY2FudmFzLiBUaGlzIHJlbmRlcmVyXG4gKiBzaG91bGQgYmUgdXNlZCBmb3IgYnJvd3NlcnMgdGhhdCBzdXBwb3J0IHdlYkdMLiBUaGlzIFJlbmRlciB3b3JrcyBieSBhdXRvbWF0aWNhbGx5IG1hbmFnaW5nIHdlYkdMQmF0Y2hzLlxuICogU28gbm8gbmVlZCBmb3IgU3ByaXRlIEJhdGNoZXMgb3IgU3ByaXRlIENsb3Vkcy5cbiAqIERvbid0IGZvcmdldCB0byBhZGQgdGhlIHZpZXcgdG8geW91ciBET00gb3IgeW91IHdpbGwgbm90IHNlZSBhbnl0aGluZyA6KVxuICpcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqIEBleHRlbmRzIFBJWEkuU3lzdGVtUmVuZGVyZXJcbiAqIEBwYXJhbSBbd2lkdGg9MF0ge251bWJlcn0gdGhlIHdpZHRoIG9mIHRoZSBjYW52YXMgdmlld1xuICogQHBhcmFtIFtoZWlnaHQ9MF0ge251bWJlcn0gdGhlIGhlaWdodCBvZiB0aGUgY2FudmFzIHZpZXdcbiAqIEBwYXJhbSBbb3B0aW9uc10ge29iamVjdH0gVGhlIG9wdGlvbmFsIHJlbmRlcmVyIHBhcmFtZXRlcnNcbiAqIEBwYXJhbSBbb3B0aW9ucy52aWV3XSB7SFRNTENhbnZhc0VsZW1lbnR9IHRoZSBjYW52YXMgdG8gdXNlIGFzIGEgdmlldywgb3B0aW9uYWxcbiAqIEBwYXJhbSBbb3B0aW9ucy50cmFuc3BhcmVudD1mYWxzZV0ge2Jvb2xlYW59IElmIHRoZSByZW5kZXIgdmlldyBpcyB0cmFuc3BhcmVudCwgZGVmYXVsdCBmYWxzZVxuICogQHBhcmFtIFtvcHRpb25zLmF1dG9SZXNpemU9ZmFsc2VdIHtib29sZWFufSBJZiB0aGUgcmVuZGVyIHZpZXcgaXMgYXV0b21hdGljYWxseSByZXNpemVkLCBkZWZhdWx0IGZhbHNlXG4gKiBAcGFyYW0gW29wdGlvbnMuYW50aWFsaWFzPWZhbHNlXSB7Ym9vbGVhbn0gc2V0cyBhbnRpYWxpYXMuIElmIG5vdCBhdmFpbGFibGUgbmF0aXZlbHkgdGhlbiBGWEFBIGFudGlhbGlhc2luZyBpcyB1c2VkXG4gKiBAcGFyYW0gW29wdGlvbnMuZm9yY2VGWEFBPWZhbHNlXSB7Ym9vbGVhbn0gZm9yY2VzIEZYQUEgYW50aWFsaWFzaW5nIHRvIGJlIHVzZWQgb3ZlciBuYXRpdmUuIEZYQUEgaXMgZmFzdGVyLCBidXQgbWF5IG5vdCBhbHdheXMgbG9vayBhcyBncmVhdFxuICogQHBhcmFtIFtvcHRpb25zLnJlc29sdXRpb249MV0ge251bWJlcn0gdGhlIHJlc29sdXRpb24gb2YgdGhlIHJlbmRlcmVyIHJldGluYSB3b3VsZCBiZSAyXG4gKiBAcGFyYW0gW29wdGlvbnMuY2xlYXJCZWZvcmVSZW5kZXI9dHJ1ZV0ge2Jvb2xlYW59IFRoaXMgc2V0cyBpZiB0aGUgQ2FudmFzUmVuZGVyZXIgd2lsbCBjbGVhciB0aGUgY2FudmFzIG9yXG4gKiAgICAgIG5vdCBiZWZvcmUgdGhlIG5ldyByZW5kZXIgcGFzcy4gSWYgeW91IHdpc2ggdG8gc2V0IHRoaXMgdG8gZmFsc2UsIHlvdSAqbXVzdCogc2V0IHByZXNlcnZlRHJhd2luZ0J1ZmZlciB0byBgdHJ1ZWAuXG4gKiBAcGFyYW0gW29wdGlvbnMucHJlc2VydmVEcmF3aW5nQnVmZmVyPWZhbHNlXSB7Ym9vbGVhbn0gZW5hYmxlcyBkcmF3aW5nIGJ1ZmZlciBwcmVzZXJ2YXRpb24sIGVuYWJsZSB0aGlzIGlmXG4gKiAgICAgIHlvdSBuZWVkIHRvIGNhbGwgdG9EYXRhVXJsIG9uIHRoZSB3ZWJnbCBjb250ZXh0LlxuICogQHBhcmFtIFtvcHRpb25zLnJvdW5kUGl4ZWxzPWZhbHNlXSB7Ym9vbGVhbn0gSWYgdHJ1ZSBQaXhpIHdpbGwgTWF0aC5mbG9vcigpIHgveSB2YWx1ZXMgd2hlbiByZW5kZXJpbmcsIHN0b3BwaW5nIHBpeGVsIGludGVycG9sYXRpb24uXG4gKi9cbmZ1bmN0aW9uIFdlYkdMUmVuZGVyZXIod2lkdGgsIGhlaWdodCwgb3B0aW9ucylcbntcbiAgICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcblxuICAgIFN5c3RlbVJlbmRlcmVyLmNhbGwodGhpcywgJ1dlYkdMJywgd2lkdGgsIGhlaWdodCwgb3B0aW9ucyk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgdHlwZSBvZiB0aGlzIHJlbmRlcmVyIGFzIGEgc3RhbmRhcmRpc2VkIGNvbnN0XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9Ly9cbiAgICAgKlxuICAgICAqL1xuICAgIHRoaXMudHlwZSA9IENPTlNULlJFTkRFUkVSX1RZUEUuV0VCR0w7XG5cbiAgICB0aGlzLmhhbmRsZUNvbnRleHRMb3N0ID0gdGhpcy5oYW5kbGVDb250ZXh0TG9zdC5iaW5kKHRoaXMpO1xuICAgIHRoaXMuaGFuZGxlQ29udGV4dFJlc3RvcmVkID0gdGhpcy5oYW5kbGVDb250ZXh0UmVzdG9yZWQuYmluZCh0aGlzKTtcblxuICAgIHRoaXMudmlldy5hZGRFdmVudExpc3RlbmVyKCd3ZWJnbGNvbnRleHRsb3N0JywgdGhpcy5oYW5kbGVDb250ZXh0TG9zdCwgZmFsc2UpO1xuICAgIHRoaXMudmlldy5hZGRFdmVudExpc3RlbmVyKCd3ZWJnbGNvbnRleHRyZXN0b3JlZCcsIHRoaXMuaGFuZGxlQ29udGV4dFJlc3RvcmVkLCBmYWxzZSk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgb3B0aW9ucyBwYXNzZWQgaW4gdG8gY3JlYXRlIGEgbmV3IHdlYmdsIGNvbnRleHQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtvYmplY3R9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9jb250ZXh0T3B0aW9ucyA9IHtcbiAgICAgICAgYWxwaGE6IHRoaXMudHJhbnNwYXJlbnQsXG4gICAgICAgIGFudGlhbGlhczogb3B0aW9ucy5hbnRpYWxpYXMsXG4gICAgICAgIHByZW11bHRpcGxpZWRBbHBoYTogdGhpcy50cmFuc3BhcmVudCAmJiB0aGlzLnRyYW5zcGFyZW50ICE9PSAnbm90TXVsdGlwbGllZCcsXG4gICAgICAgIHN0ZW5jaWw6IHRydWUsXG4gICAgICAgIHByZXNlcnZlRHJhd2luZ0J1ZmZlcjogb3B0aW9ucy5wcmVzZXJ2ZURyYXdpbmdCdWZmZXJcbiAgICB9O1xuXG4gICAgdGhpcy5fYmFja2dyb3VuZENvbG9yUmdiYVszXSA9IHRoaXMudHJhbnNwYXJlbnQgPyAwIDogMTtcblxuICAgIC8qKlxuICAgICAqIERlYWxzIHdpdGggbWFuYWdpbmcgdGhlIHNoYWRlciBwcm9ncmFtcyBhbmQgdGhlaXIgYXR0cmlicy5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuU2hhZGVyTWFuYWdlcn1cbiAgICAgKi9cbiAgICB0aGlzLnNoYWRlck1hbmFnZXIgPSBuZXcgU2hhZGVyTWFuYWdlcih0aGlzKTtcblxuICAgIC8qKlxuICAgICAqIE1hbmFnZXMgdGhlIG1hc2tzIHVzaW5nIHRoZSBzdGVuY2lsIGJ1ZmZlci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuTWFza01hbmFnZXJ9XG4gICAgICovXG4gICAgdGhpcy5tYXNrTWFuYWdlciA9IG5ldyBNYXNrTWFuYWdlcih0aGlzKTtcblxuICAgIC8qKlxuICAgICAqIE1hbmFnZXMgdGhlIHN0ZW5jaWwgYnVmZmVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5TdGVuY2lsTWFuYWdlcn1cbiAgICAgKi9cbiAgICB0aGlzLnN0ZW5jaWxNYW5hZ2VyID0gbmV3IFN0ZW5jaWxNYW5hZ2VyKHRoaXMpO1xuXG4gICAgLyoqXG4gICAgICogTWFuYWdlcyB0aGUgZmlsdGVycy5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuRmlsdGVyTWFuYWdlcn1cbiAgICAgKi9cbiAgICB0aGlzLmZpbHRlck1hbmFnZXIgPSBuZXcgRmlsdGVyTWFuYWdlcih0aGlzKTtcblxuICAgIC8qKlxuICAgICAqIE1hbmFnZXMgdGhlIGJsZW5kTW9kZXNcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuQmxlbmRNb2RlTWFuYWdlcn1cbiAgICAgKi9cbiAgICB0aGlzLmJsZW5kTW9kZU1hbmFnZXIgPSBuZXcgQmxlbmRNb2RlTWFuYWdlcih0aGlzKTtcblxuICAgIFxuICAgIC8qKlxuICAgICAqIFRoZSBjdXJyZW50bHkgYWN0aXZlIE9iamVjdFJlbmRlcmVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5PYmplY3RSZW5kZXJlcn1cbiAgICAgKi9cbiAgICB0aGlzLmN1cnJlbnRSZW5kZXJlciA9IG5ldyBPYmplY3RSZW5kZXJlcih0aGlzKTtcblxuICAgIHRoaXMuaW5pdFBsdWdpbnMoKTtcblxuICAgIC8vIGluaXRpYWxpemUgdGhlIGNvbnRleHQgc28gaXQgaXMgcmVhZHkgZm9yIHRoZSBtYW5hZ2Vycy5cbiAgICB0aGlzLmdsID0gY3JlYXRlQ29udGV4dCh0aGlzLnZpZXcsIHRoaXMuX2NvbnRleHRPcHRpb25zKTtcblxuICAgIHRoaXMuX2luaXRDb250ZXh0KCk7XG5cbiAgICAvLyBtYXAgc29tZSB3ZWJHTCBibGVuZCBhbmQgZHJhd21vZGVzLi5cbiAgICB0aGlzLmJsZW5kTW9kZXMgPSBtYXBXZWJHTEJsZW5kTW9kZXNUb1BpeGkoZ2wpO1xuICAgIHRoaXMuZHJhd01vZGVzID0gbWFwV2ViR0xEcmF3TW9kZXNUb1BpeGkoZ2wpXG5cbiAgICB0aGlzLl9hY3RpdmVTaGFkZXIgPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogSG9sZHMgdGhlIGN1cnJlbnQgcmVuZGVyIHRhcmdldFxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5SZW5kZXJUYXJnZXR9XG4gICAgICovXG4gICAgdGhpcy5fYWN0aXZlUmVuZGVyVGFyZ2V0ID0gbnVsbDtcbiAgICB0aGlzLl9hY3RpdmVUZXh0dXJlTG9jYXRpb24gPSBudWxsO1xuICAgIHRoaXMuX2FjdGl2ZVRleHR1cmUgPSBudWxsO1xufVxuXG4vLyBjb25zdHJ1Y3RvclxuV2ViR0xSZW5kZXJlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFN5c3RlbVJlbmRlcmVyLnByb3RvdHlwZSk7XG5XZWJHTFJlbmRlcmVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFdlYkdMUmVuZGVyZXI7XG5tb2R1bGUuZXhwb3J0cyA9IFdlYkdMUmVuZGVyZXI7XG51dGlscy5wbHVnaW5UYXJnZXQubWl4aW4oV2ViR0xSZW5kZXJlcik7XG5cbi8qKlxuICogQ3JlYXRlcyB0aGUgV2ViR0wgY29udGV4dFxuICpcbiAqIEBwcml2YXRlXG4gKi9cbldlYkdMUmVuZGVyZXIucHJvdG90eXBlLl9pbml0Q29udGV4dCA9IGZ1bmN0aW9uICgpXG57XG4gICAgdmFyIGdsID0gdGhpcy5nbDtcblxuICAgIC8vIGNyZWF0ZSBhIHRleHR1cmUgbWFuYWdlci4uLlxuICAgIHRoaXMudGV4dHVyZU1hbmFnZXIgPSBuZXcgVGV4dHVyZU1hbmFnZXIoZ2wpO1xuXG4gICAgLy8gc2V0IHVwIHRoZSBkZWZhdWx0IHBpeGkgc2V0dGluZ3MuLlxuICAgIGdsLmRpc2FibGUoZ2wuREVQVEhfVEVTVCk7XG4gICAgZ2wuZGlzYWJsZShnbC5DVUxMX0ZBQ0UpO1xuICAgIGdsLmVuYWJsZShnbC5CTEVORCk7XG5cblxuICAgIHRoaXMucm9vdFJlbmRlclRhcmdldCA9IG5ldyBSZW5kZXJUYXJnZXQoZ2wsIHRoaXMud2lkdGgsIHRoaXMuaGVpZ2h0LCBudWxsLCB0aGlzLnJlc29sdXRpb24sIHRydWUpO1xuICAgIHRoaXMucm9vdFJlbmRlclRhcmdldC5jbGVhckNvbG9yID0gdGhpcy5fYmFja2dyb3VuZENvbG9yUmdiYTtcbiAgICBcbiAgICB0aGlzLmJpbmRSZW5kZXJUYXJnZXQodGhpcy5yb290UmVuZGVyVGFyZ2V0KTtcblxuICAgIHRoaXMuZW1pdCgnY29udGV4dCcsIGdsKTtcblxuICAgIC8vIHNldHVwIHRoZSB3aWR0aC9oZWlnaHQgcHJvcGVydGllcyBhbmQgZ2wgdmlld3BvcnRcbiAgICB0aGlzLnJlc2l6ZSh0aGlzLndpZHRoLCB0aGlzLmhlaWdodCk7ICAgIFxufTtcblxuLyoqXG4gKiBSZW5kZXJzIHRoZSBvYmplY3QgdG8gaXRzIHdlYkdMIHZpZXdcbiAqXG4gKiBAcGFyYW0gb2JqZWN0IHtQSVhJLkRpc3BsYXlPYmplY3R9IHRoZSBvYmplY3QgdG8gYmUgcmVuZGVyZWRcbiAqL1xuV2ViR0xSZW5kZXJlci5wcm90b3R5cGUucmVuZGVyID0gZnVuY3Rpb24gKGRpc3BsYXlPYmplY3QpXG57XG4gICAgdGhpcy5lbWl0KCdwcmVyZW5kZXInKTtcblxuICAgIC8vIG5vIHBvaW50IHJlbmRlcmluZyBpZiBvdXIgY29udGV4dCBoYXMgYmVlbiBibG93biB1cCFcbiAgICBpZiAodGhpcy5nbC5pc0NvbnRleHRMb3N0KCkpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5fbGFzdE9iamVjdFJlbmRlcmVkID0gZGlzcGxheU9iamVjdDtcblxuICAgIHZhciBjYWNoZVBhcmVudCA9IGRpc3BsYXlPYmplY3QucGFyZW50O1xuICAgIGRpc3BsYXlPYmplY3QucGFyZW50ID0gdGhpcy5fdGVtcERpc3BsYXlPYmplY3RQYXJlbnQ7XG4gICAgLy8gdXBkYXRlIHRoZSBzY2VuZSBncmFwaFxuICAgIGRpc3BsYXlPYmplY3QudXBkYXRlVHJhbnNmb3JtKCk7XG4gICAgZGlzcGxheU9iamVjdC5wYXJlbnQgPSBjYWNoZVBhcmVudDtcblxuICAgIHRoaXMucmVuZGVyRGlzcGxheU9iamVjdChkaXNwbGF5T2JqZWN0LCB0aGlzLnJvb3RSZW5kZXJUYXJnZXQsIHRoaXMuY2xlYXJCZWZvcmVSZW5kZXIpOy8vdGhpcy5wcm9qZWN0aW9uKTtcblxuICAgIHRoaXMuZW1pdCgncG9zdHJlbmRlcicpO1xufTtcblxuLyoqXG4gKiBSZW5kZXJzIGEgRGlzcGxheSBPYmplY3QuXG4gKlxuICogQHBhcmFtIGRpc3BsYXlPYmplY3Qge1BJWEkuRGlzcGxheU9iamVjdH0gVGhlIERpc3BsYXlPYmplY3QgdG8gcmVuZGVyXG4gKiBAcGFyYW0gcmVuZGVyVGFyZ2V0IHtQSVhJLlJlbmRlclRhcmdldH0gVGhlIHJlbmRlciB0YXJnZXQgdG8gdXNlIHRvIHJlbmRlciB0aGlzIGRpc3BsYXkgb2JqZWN0XG4gKlxuICovXG5XZWJHTFJlbmRlcmVyLnByb3RvdHlwZS5yZW5kZXJEaXNwbGF5T2JqZWN0ID0gZnVuY3Rpb24gKGRpc3BsYXlPYmplY3QsIHJlbmRlclRhcmdldCwgY2xlYXIpLy9wcm9qZWN0aW9uLCBidWZmZXIpXG57XG4gICAgdGhpcy5iaW5kUmVuZGVyVGFyZ2V0KHJlbmRlclRhcmdldCk7XG5cbiAgICBpZihjbGVhcilcbiAgICB7XG4gICAgICAgIHJlbmRlclRhcmdldC5jbGVhcigpO1xuICAgIH1cblxuICAgIC8vIHN0YXJ0IHRoZSBmaWx0ZXIgbWFuYWdlclxuICAgIHRoaXMuZmlsdGVyTWFuYWdlci5zZXRGaWx0ZXJTdGFjayggcmVuZGVyVGFyZ2V0LmZpbHRlclN0YWNrICk7XG5cbiAgICAvLyByZW5kZXIgdGhlIHNjZW5lIVxuICAgIGRpc3BsYXlPYmplY3QucmVuZGVyV2ViR0wodGhpcyk7XG5cbiAgICAvLyBmaW5pc2ggdGhlIGN1cnJlbnQgcmVuZGVyZXIuLlxuICAgIHRoaXMuY3VycmVudFJlbmRlcmVyLmZsdXNoKCk7XG59O1xuXG4vKipcbiAqIENoYW5nZXMgdGhlIGN1cnJlbnQgcmVuZGVyZXIgdG8gdGhlIG9uZSBnaXZlbiBpbiBwYXJhbWV0ZXJcbiAqXG4gKiBAcGFyYW0gb2JqZWN0UmVuZGVyZXIge1BJWEkuT2JqZWN0UmVuZGVyZXJ9IFRoZSBvYmplY3QgcmVuZGVyZXIgdG8gdXNlLlxuICovXG5XZWJHTFJlbmRlcmVyLnByb3RvdHlwZS5zZXRPYmplY3RSZW5kZXJlciA9IGZ1bmN0aW9uIChvYmplY3RSZW5kZXJlcilcbntcbiAgICBpZiAodGhpcy5jdXJyZW50UmVuZGVyZXIgPT09IG9iamVjdFJlbmRlcmVyKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuY3VycmVudFJlbmRlcmVyLnN0b3AoKTtcbiAgICB0aGlzLmN1cnJlbnRSZW5kZXJlciA9IG9iamVjdFJlbmRlcmVyO1xuICAgIHRoaXMuY3VycmVudFJlbmRlcmVyLnN0YXJ0KCk7XG59O1xuXG4vKipcbiAqIFJlc2l6ZXMgdGhlIHdlYkdMIHZpZXcgdG8gdGhlIHNwZWNpZmllZCB3aWR0aCBhbmQgaGVpZ2h0LlxuICpcbiAqIEBwYXJhbSB3aWR0aCB7bnVtYmVyfSB0aGUgbmV3IHdpZHRoIG9mIHRoZSB3ZWJHTCB2aWV3XG4gKiBAcGFyYW0gaGVpZ2h0IHtudW1iZXJ9IHRoZSBuZXcgaGVpZ2h0IG9mIHRoZSB3ZWJHTCB2aWV3XG4gKi9cbldlYkdMUmVuZGVyZXIucHJvdG90eXBlLnJlc2l6ZSA9IGZ1bmN0aW9uICh3aWR0aCwgaGVpZ2h0KVxue1xuICAgIFN5c3RlbVJlbmRlcmVyLnByb3RvdHlwZS5yZXNpemUuY2FsbCh0aGlzLCB3aWR0aCwgaGVpZ2h0KTtcblxuICAgIHRoaXMuZmlsdGVyTWFuYWdlci5yZXNpemUod2lkdGgsIGhlaWdodCk7XG4gICAgdGhpcy5yb290UmVuZGVyVGFyZ2V0LnJlc2l6ZSh3aWR0aCwgaGVpZ2h0KTtcblxuICAgIGlmKHRoaXMuY3VycmVudFJlbmRlclRhcmdldCA9PT0gdGhpcy5yZW5kZXJUYXJnZXQpXG4gICAge1xuICAgICAgICB0aGlzLnJvb3RSZW5kZXJUYXJnZXQuYWN0aXZhdGUoKTtcbiAgICB9XG59O1xuXG4vKipcbiAqIENoYW5nZXMgdGhlIGN1cnJlbnQgcmVuZGVyIHRhcmdldCB0byB0aGUgb25lIGdpdmVuIGluIHBhcmFtZXRlclxuICpcbiAqIEBwYXJhbSByZW5kZXJUYXJnZXQge1BJWEkuUmVuZGVyVGFyZ2V0fSB0aGUgbmV3IHJlbmRlciB0YXJnZXRcbiAqL1xuV2ViR0xSZW5kZXJlci5wcm90b3R5cGUuYmluZFJlbmRlclRhcmdldCA9IGZ1bmN0aW9uIChyZW5kZXJUYXJnZXQpLy9wcm9qZWN0aW9uLCBidWZmZXIpXG57XG4gICAgaWYocmVuZGVyVGFyZ2V0ICE9PSB0aGlzLl9hY3RpdmVSZW5kZXJUYXJnZXQpXG4gICAge1xuICAgICAgICB0aGlzLl9hY3RpdmVSZW5kZXJUYXJnZXQgPSByZW5kZXJUYXJnZXQ7XG5cbiAgICAgICAgaWYodGhpcy5fYWN0aXZlU2hhZGVyKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLl9hY3RpdmVTaGFkZXIudW5pZm9ybXMucHJvamVjdGlvbk1hdHJpeCA9IHJlbmRlclRhcmdldC5wcm9qZWN0aW9uTWF0cml4LnRvQXJyYXkodHJ1ZSk7XG4gICAgICAgIH1cblxuICAgICAgICByZW5kZXJUYXJnZXQuYWN0aXZhdGUoKTtcblxuICAgICAgICB0aGlzLnN0ZW5jaWxNYW5hZ2VyLnNldE1hc2tTdGFjayggcmVuZGVyVGFyZ2V0LnN0ZW5jaWxNYXNrU3RhY2sgKTtcbiAgICB9XG59XG5cbldlYkdMUmVuZGVyZXIucHJvdG90eXBlLmJpbmRTaGFkZXIgPSBmdW5jdGlvbiAoc2hhZGVyKS8vcHJvamVjdGlvbiwgYnVmZmVyKVxue1xuICAgIC8vVE9ETyBjYWNoZVxuICAgIGlmKHRoaXMuX2FjdGl2ZVNoYWRlciAhPT0gc2hhZGVyKVxuICAgIHtcbiAgICAgICAgdGhpcy5fYWN0aXZlU2hhZGVyID0gc2hhZGVyO1xuICAgICAgICBzaGFkZXIuYmluZCgpO1xuXG4gICAgICAgIC8vIGF1dG9tYXRpY2FsbHkgc2V0IHRoZSBwcm9qZWN0aW9uIG1hdHJpeFxuICAgICAgICBzaGFkZXIudW5pZm9ybXMucHJvamVjdGlvbk1hdHJpeCA9IHRoaXMuX2FjdGl2ZVJlbmRlclRhcmdldC5wcm9qZWN0aW9uTWF0cml4LnRvQXJyYXkodHJ1ZSk7XG4gICAgfVxufVxuXG5cbldlYkdMUmVuZGVyZXIucHJvdG90eXBlLmJpbmRUZXh0dXJlID0gZnVuY3Rpb24gKHRleHR1cmUsIGxvY2F0aW9uKVxue1xuICAgIHZhciBnbCA9IHRoaXMuZ2w7XG5cbiAgICAvL1RPRE8gdGVzdCBwZXJmIG9mIGNhY2hlP1xuICAgIGxvY2F0aW9uID0gbG9jYXRpb24gfHwgMDtcblxuICAgIGlmKHRoaXMuX2FjdGl2ZVRleHR1cmVMb2NhdGlvbiAhPT0gbG9jYXRpb24pLy9cbiAgICB7XG4gICAgICAgIHRoaXMuX2FjdGl2ZVRleHR1cmVMb2NhdGlvbiA9IGxvY2F0aW9uXG4gICAgICAgIGdsLmFjdGl2ZVRleHR1cmUoZ2wuVEVYVFVSRTAgKyBsb2NhdGlvbiApO1xuICAgIH1cblxuICAgIC8vVE9ETyAtIGNhbiB3ZSBjYWNoZSB0aGlzIHRleHR1cmUgdG9vP1xuICAgIHRoaXMuX2FjdGl2ZVRleHR1cmUgPSB0ZXh0dXJlOyAgICAgIFxuICAgIFxuICAgIGlmICghdGV4dHVyZS5fZ2xUZXh0dXJlc1tnbC5pZF0pXG4gICAge1xuICAgICAgICAvLyB0aGlzIHdpbGwgYWxzbyBiaW5kIHRoZSB0ZXh0dXJlLi5cbiAgICAgICAgdGhpcy50ZXh0dXJlTWFuYWdlci51cGRhdGVUZXh0dXJlKHRleHR1cmUpO1xuICAgIH1cbiAgICBlbHNlXG4gICAgeyAgIFxuICAgICAgICAvLyBiaW5kIHRoZSBjdXJyZW50IHRleHR1cmVcbiAgICAgICAgdGV4dHVyZS5fZ2xUZXh0dXJlc1tnbC5pZF0uYmluZCgpO1xuICAgIH1cbn1cblxuXG4vKipcbiAqIEhhbmRsZXMgYSBsb3N0IHdlYmdsIGNvbnRleHRcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5XZWJHTFJlbmRlcmVyLnByb3RvdHlwZS5oYW5kbGVDb250ZXh0TG9zdCA9IGZ1bmN0aW9uIChldmVudClcbntcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xufTtcblxuLyoqXG4gKiBIYW5kbGVzIGEgcmVzdG9yZWQgd2ViZ2wgY29udGV4dFxuICpcbiAqIEBwcml2YXRlXG4gKi9cbldlYkdMUmVuZGVyZXIucHJvdG90eXBlLmhhbmRsZUNvbnRleHRSZXN0b3JlZCA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy5faW5pdENvbnRleHQoKTtcbiAgICB0aGlzLnRleHR1cmVNYW5hZ2VyLnJlbW92ZUFsbCgpO1xufTtcblxuLyoqXG4gKiBSZW1vdmVzIGV2ZXJ5dGhpbmcgZnJvbSB0aGUgcmVuZGVyZXIgKGV2ZW50IGxpc3RlbmVycywgc3ByaXRlYmF0Y2gsIGV0Yy4uLilcbiAqXG4gKiBAcGFyYW0gW3JlbW92ZVZpZXc9ZmFsc2VdIHtib29sZWFufSBSZW1vdmVzIHRoZSBDYW52YXMgZWxlbWVudCBmcm9tIHRoZSBET00uXG4gKi9cbldlYkdMUmVuZGVyZXIucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAocmVtb3ZlVmlldylcbntcbiAgICB0aGlzLmRlc3Ryb3lQbHVnaW5zKCk7XG5cbiAgICAvLyByZW1vdmUgbGlzdGVuZXJzXG4gICAgdGhpcy52aWV3LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3dlYmdsY29udGV4dGxvc3QnLCB0aGlzLmhhbmRsZUNvbnRleHRMb3N0KTtcbiAgICB0aGlzLnZpZXcucmVtb3ZlRXZlbnRMaXN0ZW5lcignd2ViZ2xjb250ZXh0cmVzdG9yZWQnLCB0aGlzLmhhbmRsZUNvbnRleHRSZXN0b3JlZCk7XG5cbiAgICB0aGlzLnRleHR1cmVNYW5hZ2VyLmRlc3Ryb3lBbGwoKTtcblxuICAgIC8vIGNhbGwgYmFzZSBkZXN0cm95XG4gICAgU3lzdGVtUmVuZGVyZXIucHJvdG90eXBlLmRlc3Ryb3kuY2FsbCh0aGlzLCByZW1vdmVWaWV3KTtcblxuICAgIHRoaXMudWlkID0gMDtcblxuICAgIC8vIGRlc3Ryb3kgdGhlIG1hbmFnZXJzXG4gICAgdGhpcy5zaGFkZXJNYW5hZ2VyLmRlc3Ryb3koKTtcbiAgICB0aGlzLm1hc2tNYW5hZ2VyLmRlc3Ryb3koKTtcbiAgICB0aGlzLnN0ZW5jaWxNYW5hZ2VyLmRlc3Ryb3koKTtcbiAgICB0aGlzLmZpbHRlck1hbmFnZXIuZGVzdHJveSgpO1xuICAgIHRoaXMuYmxlbmRNb2RlTWFuYWdlci5kZXN0cm95KCk7XG5cbiAgICB0aGlzLnNoYWRlck1hbmFnZXIgPSBudWxsO1xuICAgIHRoaXMubWFza01hbmFnZXIgPSBudWxsO1xuICAgIHRoaXMuZmlsdGVyTWFuYWdlciA9IG51bGw7XG4gICAgdGhpcy5ibGVuZE1vZGVNYW5hZ2VyID0gbnVsbDtcbiAgICB0aGlzLmN1cnJlbnRSZW5kZXJlciA9IG51bGw7XG5cbiAgICB0aGlzLmhhbmRsZUNvbnRleHRMb3N0ID0gbnVsbDtcbiAgICB0aGlzLmhhbmRsZUNvbnRleHRSZXN0b3JlZCA9IG51bGw7XG5cbiAgICB0aGlzLl9jb250ZXh0T3B0aW9ucyA9IG51bGw7XG5cbiAgICB0aGlzLmdsLnVzZVByb2dyYW0obnVsbCk7XG4gICAgdGhpcy5nbCA9IG51bGw7XG59O1xuXG4iLCJ2YXIgRGVmYXVsdFNoYWRlciA9IHJlcXVpcmUoJy4uL3NoYWRlcnMvVGV4dHVyZVNoYWRlcicpO1xuXG4vKipcbiAqIFRoaXMgaXMgdGhlIGJhc2UgY2xhc3MgZm9yIGNyZWF0aW5nIGEgUElYSSBmaWx0ZXIuIEN1cnJlbnRseSBvbmx5IFdlYkdMIHN1cHBvcnRzIGZpbHRlcnMuXG4gKiBJZiB5b3Ugd2FudCB0byBtYWtlIGEgY3VzdG9tIGZpbHRlciB0aGlzIHNob3VsZCBiZSB5b3VyIGJhc2UgY2xhc3MuXG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIHZlcnRleFNyYyB7c3RyaW5nfHN0cmluZ1tdfSBUaGUgdmVydGV4IHNoYWRlciBzb3VyY2UgYXMgYW4gYXJyYXkgb2Ygc3RyaW5ncy5cbiAqIEBwYXJhbSBmcmFnbWVudFNyYyB7c3RyaW5nfHN0cmluZ1tdfSBUaGUgZnJhZ21lbnQgc2hhZGVyIHNvdXJjZSBhcyBhbiBhcnJheSBvZiBzdHJpbmdzLlxuICogQHBhcmFtIHVuaWZvcm1zIHtvYmplY3R9IEFuIG9iamVjdCBjb250YWluaW5nIHRoZSB1bmlmb3JtcyBmb3IgdGhpcyBmaWx0ZXIuXG4gKi9cbmZ1bmN0aW9uIEFic3RyYWN0RmlsdGVyKHZlcnRleFNyYywgZnJhZ21lbnRTcmMsIHVuaWZvcm1zKVxue1xuXG4gICAgLyoqXG4gICAgICogQW4gYXJyYXkgb2Ygc2hhZGVyc1xuICAgICAqIEBtZW1iZXIge1BJWEkuU2hhZGVyW119XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLnNoYWRlcnMgPSBbXTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBleHRyYSBwYWRkaW5nIHRoYXQgdGhlIGZpbHRlciBtaWdodCBuZWVkXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMucGFkZGluZyA9IDA7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgdW5pZm9ybXMgYXMgYW4gb2JqZWN0XG4gICAgICogQG1lbWJlciB7b2JqZWN0fVxuICAgICAqL1xuICAgIHRoaXMudW5pZm9ybXMgPSB1bmlmb3JtcyB8fCB7fTtcblxuXG4gICAgLyoqXG4gICAgICogVGhlIGNvZGUgb2YgdGhlIHZlcnRleCBzaGFkZXJcbiAgICAgKiBAbWVtYmVyIHtzdHJpbmdbXX1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMudmVydGV4U3JjID0gdmVydGV4U3JjIHx8IERlZmF1bHRTaGFkZXIuZGVmYXVsdFZlcnRleFNyYztcblxuICAgIC8qKlxuICAgICAqIFRoZSBjb2RlIG9mIHRoZSBmcmFtZW50IHNoYWRlclxuICAgICAqIEBtZW1iZXIge3N0cmluZ1tdfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5mcmFnbWVudFNyYyA9IGZyYWdtZW50U3JjIHx8IERlZmF1bHRTaGFkZXIuZGVmYXVsdEZyYWdtZW50U3JjO1xuXG4gICAgLy9UT0RPIGEgcmVtaW5kZXIgLSB3b3VsZCBiZSBjb29sIHRvIGhhdmUgbG93ZXIgcmVzIGZpbHRlcnMgYXMgdGhpcyB3b3VsZCBnaXZlIGJldHRlciBwZXJmb3JtYW5jZS5cblxuICAgIC8vdHlwZW9mIGZyYWdtZW50U3JjID09PSAnc3RyaW5nJyA/IGZyYWdtZW50U3JjLnNwbGl0KCcnKSA6IChmcmFnbWVudFNyYyB8fCBbXSk7XG5cbn1cblxuQWJzdHJhY3RGaWx0ZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gQWJzdHJhY3RGaWx0ZXI7XG5tb2R1bGUuZXhwb3J0cyA9IEFic3RyYWN0RmlsdGVyO1xuXG4vKipcbiAqIEdyYWJzIGEgc2hhZGVyIGZyb20gdGhlIGN1cnJlbnQgcmVuZGVyZXJcbiAqXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcn0gVGhlIHJlbmRlcmVyIHRvIHJldHJpZXZlIHRoZSBzaGFkZXIgZnJvbVxuICovXG5BYnN0cmFjdEZpbHRlci5wcm90b3R5cGUuZ2V0U2hhZGVyID0gZnVuY3Rpb24gKHJlbmRlcmVyKVxue1xuICAgIHZhciBnbCA9IHJlbmRlcmVyLmdsO1xuXG4gICAgdmFyIHNoYWRlciA9IHRoaXMuc2hhZGVyc1tnbC5pZF07XG5cbiAgICBpZiAoIXNoYWRlcilcbiAgICB7XG4gICAgICAgIHNoYWRlciA9IG5ldyBEZWZhdWx0U2hhZGVyKHJlbmRlcmVyLnNoYWRlck1hbmFnZXIsXG4gICAgICAgICAgICB0aGlzLnZlcnRleFNyYyxcbiAgICAgICAgICAgIHRoaXMuZnJhZ21lbnRTcmMsXG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLFxuICAgICAgICAgICAgdGhpcy5hdHRyaWJ1dGVzXG4gICAgICAgICk7XG5cbiAgICAgICAgdGhpcy5zaGFkZXJzW2dsLmlkXSA9IHNoYWRlcjtcbiAgICB9XG5cbiAgICByZXR1cm4gc2hhZGVyO1xufTtcblxuLyoqXG4gKiBBcHBsaWVzIHRoZSBmaWx0ZXJcbiAqXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcn0gVGhlIHJlbmRlcmVyIHRvIHJldHJpZXZlIHRoZSBmaWx0ZXIgZnJvbVxuICogQHBhcmFtIGlucHV0IHtQSVhJLlJlbmRlclRhcmdldH1cbiAqIEBwYXJhbSBvdXRwdXQge1BJWEkuUmVuZGVyVGFyZ2V0fVxuICogQHBhcmFtIGNsZWFyIHtib29sZWFufSBXaGV0aGVyIG9yIG5vdCB3ZSB3YW50IHRvIGNsZWFyIHRoZSBvdXRwdXRUYXJnZXRcbiAqL1xuQWJzdHJhY3RGaWx0ZXIucHJvdG90eXBlLmFwcGx5RmlsdGVyID0gZnVuY3Rpb24gKHJlbmRlcmVyLCBpbnB1dCwgb3V0cHV0LCBjbGVhcilcbntcbiAgICB2YXIgc2hhZGVyID0gdGhpcy5nZXRTaGFkZXIocmVuZGVyZXIpO1xuXG4gICAgcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5hcHBseUZpbHRlcihzaGFkZXIsIGlucHV0LCBvdXRwdXQsIGNsZWFyKTtcbn07XG5cbi8qKlxuICogU3luY3MgYSB1bmlmb3JtIGJldHdlZW4gdGhlIGNsYXNzIG9iamVjdCBhbmQgdGhlIHNoYWRlcnMuXG4gKlxuICovXG5BYnN0cmFjdEZpbHRlci5wcm90b3R5cGUuc3luY1VuaWZvcm0gPSBmdW5jdGlvbiAodW5pZm9ybSlcbntcbiAgICBmb3IgKHZhciBpID0gMCwgaiA9IHRoaXMuc2hhZGVycy5sZW5ndGg7IGkgPCBqOyArK2kpXG4gICAge1xuICAgICAgICB0aGlzLnNoYWRlcnNbaV0uc3luY1VuaWZvcm0odW5pZm9ybSk7XG4gICAgfVxufTtcbiIsInZhciBBYnN0cmFjdEZpbHRlciA9IHJlcXVpcmUoJy4vQWJzdHJhY3RGaWx0ZXInKTtcbi8vIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL3N1YnN0YWNrL2JyZnMvaXNzdWVzLzI1XG5cblxuLyoqXG4gKlxuICogQmFzaWMgRlhBQSBpbXBsZW1lbnRhdGlvbiBiYXNlZCBvbiB0aGUgY29kZSBvbiBnZWVrczNkLmNvbSB3aXRoIHRoZVxuICogbW9kaWZpY2F0aW9uIHRoYXQgdGhlIHRleHR1cmUyRExvZCBzdHVmZiB3YXMgcmVtb3ZlZCBzaW5jZSBpdCdzXG4gKiB1bnN1cHBvcnRlZCBieSBXZWJHTC5cbiAqXG4gKiAtLVxuICogRnJvbTpcbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS9taXRzdWhpa28vd2ViZ2wtbWVpbmNyYWZ0XG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLkFic3RyYWN0RmlsdGVyXG4gKiBAbWVtYmVyb2YgUElYSVxuICpcbiAqL1xuZnVuY3Rpb24gRlhBQUZpbHRlcigpXG57XG4gICAgQWJzdHJhY3RGaWx0ZXIuY2FsbCh0aGlzLFxuICAgICAgICAvLyB2ZXJ0ZXggc2hhZGVyXG4gICAgICAgIFwiXFxucHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XFxuXFxuYXR0cmlidXRlIHZlYzIgYVZlcnRleFBvc2l0aW9uO1xcbmF0dHJpYnV0ZSB2ZWMyIGFUZXh0dXJlQ29vcmQ7XFxuYXR0cmlidXRlIHZlYzQgYUNvbG9yO1xcblxcbnVuaWZvcm0gbWF0MyBwcm9qZWN0aW9uTWF0cml4O1xcbnVuaWZvcm0gdmVjMiByZXNvbHV0aW9uO1xcblxcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xcbnZhcnlpbmcgdmVjNCB2Q29sb3I7XFxuXFxudmFyeWluZyB2ZWMyIHZSZXNvbHV0aW9uO1xcblxcbi8vdGV4Y29vcmRzIGNvbXB1dGVkIGluIHZlcnRleCBzdGVwXFxuLy90byBhdm9pZCBkZXBlbmRlbnQgdGV4dHVyZSByZWFkc1xcbnZhcnlpbmcgdmVjMiB2X3JnYk5XO1xcbnZhcnlpbmcgdmVjMiB2X3JnYk5FO1xcbnZhcnlpbmcgdmVjMiB2X3JnYlNXO1xcbnZhcnlpbmcgdmVjMiB2X3JnYlNFO1xcbnZhcnlpbmcgdmVjMiB2X3JnYk07XFxuXFxuXFxudm9pZCB0ZXhjb29yZHModmVjMiBmcmFnQ29vcmQsIHZlYzIgcmVzb2x1dGlvbixcXG4gICAgICAgICAgICBvdXQgdmVjMiB2X3JnYk5XLCBvdXQgdmVjMiB2X3JnYk5FLFxcbiAgICAgICAgICAgIG91dCB2ZWMyIHZfcmdiU1csIG91dCB2ZWMyIHZfcmdiU0UsXFxuICAgICAgICAgICAgb3V0IHZlYzIgdl9yZ2JNKSB7XFxuICAgIHZlYzIgaW52ZXJzZVZQID0gMS4wIC8gcmVzb2x1dGlvbi54eTtcXG4gICAgdl9yZ2JOVyA9IChmcmFnQ29vcmQgKyB2ZWMyKC0xLjAsIC0xLjApKSAqIGludmVyc2VWUDtcXG4gICAgdl9yZ2JORSA9IChmcmFnQ29vcmQgKyB2ZWMyKDEuMCwgLTEuMCkpICogaW52ZXJzZVZQO1xcbiAgICB2X3JnYlNXID0gKGZyYWdDb29yZCArIHZlYzIoLTEuMCwgMS4wKSkgKiBpbnZlcnNlVlA7XFxuICAgIHZfcmdiU0UgPSAoZnJhZ0Nvb3JkICsgdmVjMigxLjAsIDEuMCkpICogaW52ZXJzZVZQO1xcbiAgICB2X3JnYk0gPSB2ZWMyKGZyYWdDb29yZCAqIGludmVyc2VWUCk7XFxufVxcblxcbnZvaWQgbWFpbih2b2lkKXtcXG4gICBnbF9Qb3NpdGlvbiA9IHZlYzQoKHByb2plY3Rpb25NYXRyaXggKiB2ZWMzKGFWZXJ0ZXhQb3NpdGlvbiwgMS4wKSkueHksIDAuMCwgMS4wKTtcXG4gICB2VGV4dHVyZUNvb3JkID0gYVRleHR1cmVDb29yZDtcXG4gICB2Q29sb3IgPSB2ZWM0KGFDb2xvci5yZ2IgKiBhQ29sb3IuYSwgYUNvbG9yLmEpO1xcbiAgIHZSZXNvbHV0aW9uID0gcmVzb2x1dGlvbjtcXG5cXG4gICAvL2NvbXB1dGUgdGhlIHRleHR1cmUgY29vcmRzIGFuZCBzZW5kIHRoZW0gdG8gdmFyeWluZ3NcXG4gICB0ZXhjb29yZHMoYVRleHR1cmVDb29yZCAqIHJlc29sdXRpb24sIHJlc29sdXRpb24sIHZfcmdiTlcsIHZfcmdiTkUsIHZfcmdiU1csIHZfcmdiU0UsIHZfcmdiTSk7XFxufVxcblwiLFxuICAgICAgICAvLyBmcmFnbWVudCBzaGFkZXJcbiAgICAgICAgXCJwcmVjaXNpb24gbG93cCBmbG9hdDtcXG5cXG5cXG4vKipcXG5CYXNpYyBGWEFBIGltcGxlbWVudGF0aW9uIGJhc2VkIG9uIHRoZSBjb2RlIG9uIGdlZWtzM2QuY29tIHdpdGggdGhlXFxubW9kaWZpY2F0aW9uIHRoYXQgdGhlIHRleHR1cmUyRExvZCBzdHVmZiB3YXMgcmVtb3ZlZCBzaW5jZSBpdCdzXFxudW5zdXBwb3J0ZWQgYnkgV2ViR0wuXFxuXFxuLS1cXG5cXG5Gcm9tOlxcbmh0dHBzOi8vZ2l0aHViLmNvbS9taXRzdWhpa28vd2ViZ2wtbWVpbmNyYWZ0XFxuXFxuQ29weXJpZ2h0IChjKSAyMDExIGJ5IEFybWluIFJvbmFjaGVyLlxcblxcblNvbWUgcmlnaHRzIHJlc2VydmVkLlxcblxcblJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dFxcbm1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmVcXG5tZXQ6XFxuXFxuICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHRcXG4gICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuXFxuXFxuICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZVxcbiAgICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nXFxuICAgICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkXFxuICAgICAgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLlxcblxcbiAgICAqIFRoZSBuYW1lcyBvZiB0aGUgY29udHJpYnV0b3JzIG1heSBub3QgYmUgdXNlZCB0byBlbmRvcnNlIG9yXFxuICAgICAgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljXFxuICAgICAgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLlxcblxcblRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlNcXG5cXFwiQVMgSVNcXFwiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVFxcbkxJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUlxcbkEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUXFxuT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsXFxuU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVFxcbkxJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLFxcbkRBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWVxcblRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlRcXG4oSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0VcXG5PRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLlxcbiovXFxuXFxuI2lmbmRlZiBGWEFBX1JFRFVDRV9NSU5cXG4gICAgI2RlZmluZSBGWEFBX1JFRFVDRV9NSU4gICAoMS4wLyAxMjguMClcXG4jZW5kaWZcXG4jaWZuZGVmIEZYQUFfUkVEVUNFX01VTFxcbiAgICAjZGVmaW5lIEZYQUFfUkVEVUNFX01VTCAgICgxLjAgLyA4LjApXFxuI2VuZGlmXFxuI2lmbmRlZiBGWEFBX1NQQU5fTUFYXFxuICAgICNkZWZpbmUgRlhBQV9TUEFOX01BWCAgICAgOC4wXFxuI2VuZGlmXFxuXFxuLy9vcHRpbWl6ZWQgdmVyc2lvbiBmb3IgbW9iaWxlLCB3aGVyZSBkZXBlbmRlbnRcXG4vL3RleHR1cmUgcmVhZHMgY2FuIGJlIGEgYm90dGxlbmVja1xcbnZlYzQgZnhhYShzYW1wbGVyMkQgdGV4LCB2ZWMyIGZyYWdDb29yZCwgdmVjMiByZXNvbHV0aW9uLFxcbiAgICAgICAgICAgIHZlYzIgdl9yZ2JOVywgdmVjMiB2X3JnYk5FLFxcbiAgICAgICAgICAgIHZlYzIgdl9yZ2JTVywgdmVjMiB2X3JnYlNFLFxcbiAgICAgICAgICAgIHZlYzIgdl9yZ2JNKSB7XFxuICAgIHZlYzQgY29sb3I7XFxuICAgIG1lZGl1bXAgdmVjMiBpbnZlcnNlVlAgPSB2ZWMyKDEuMCAvIHJlc29sdXRpb24ueCwgMS4wIC8gcmVzb2x1dGlvbi55KTtcXG4gICAgdmVjMyByZ2JOVyA9IHRleHR1cmUyRCh0ZXgsIHZfcmdiTlcpLnh5ejtcXG4gICAgdmVjMyByZ2JORSA9IHRleHR1cmUyRCh0ZXgsIHZfcmdiTkUpLnh5ejtcXG4gICAgdmVjMyByZ2JTVyA9IHRleHR1cmUyRCh0ZXgsIHZfcmdiU1cpLnh5ejtcXG4gICAgdmVjMyByZ2JTRSA9IHRleHR1cmUyRCh0ZXgsIHZfcmdiU0UpLnh5ejtcXG4gICAgdmVjNCB0ZXhDb2xvciA9IHRleHR1cmUyRCh0ZXgsIHZfcmdiTSk7XFxuICAgIHZlYzMgcmdiTSAgPSB0ZXhDb2xvci54eXo7XFxuICAgIHZlYzMgbHVtYSA9IHZlYzMoMC4yOTksIDAuNTg3LCAwLjExNCk7XFxuICAgIGZsb2F0IGx1bWFOVyA9IGRvdChyZ2JOVywgbHVtYSk7XFxuICAgIGZsb2F0IGx1bWFORSA9IGRvdChyZ2JORSwgbHVtYSk7XFxuICAgIGZsb2F0IGx1bWFTVyA9IGRvdChyZ2JTVywgbHVtYSk7XFxuICAgIGZsb2F0IGx1bWFTRSA9IGRvdChyZ2JTRSwgbHVtYSk7XFxuICAgIGZsb2F0IGx1bWFNICA9IGRvdChyZ2JNLCAgbHVtYSk7XFxuICAgIGZsb2F0IGx1bWFNaW4gPSBtaW4obHVtYU0sIG1pbihtaW4obHVtYU5XLCBsdW1hTkUpLCBtaW4obHVtYVNXLCBsdW1hU0UpKSk7XFxuICAgIGZsb2F0IGx1bWFNYXggPSBtYXgobHVtYU0sIG1heChtYXgobHVtYU5XLCBsdW1hTkUpLCBtYXgobHVtYVNXLCBsdW1hU0UpKSk7XFxuXFxuICAgIG1lZGl1bXAgdmVjMiBkaXI7XFxuICAgIGRpci54ID0gLSgobHVtYU5XICsgbHVtYU5FKSAtIChsdW1hU1cgKyBsdW1hU0UpKTtcXG4gICAgZGlyLnkgPSAgKChsdW1hTlcgKyBsdW1hU1cpIC0gKGx1bWFORSArIGx1bWFTRSkpO1xcblxcbiAgICBmbG9hdCBkaXJSZWR1Y2UgPSBtYXgoKGx1bWFOVyArIGx1bWFORSArIGx1bWFTVyArIGx1bWFTRSkgKlxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKDAuMjUgKiBGWEFBX1JFRFVDRV9NVUwpLCBGWEFBX1JFRFVDRV9NSU4pO1xcblxcbiAgICBmbG9hdCByY3BEaXJNaW4gPSAxLjAgLyAobWluKGFicyhkaXIueCksIGFicyhkaXIueSkpICsgZGlyUmVkdWNlKTtcXG4gICAgZGlyID0gbWluKHZlYzIoRlhBQV9TUEFOX01BWCwgRlhBQV9TUEFOX01BWCksXFxuICAgICAgICAgICAgICBtYXgodmVjMigtRlhBQV9TUEFOX01BWCwgLUZYQUFfU1BBTl9NQVgpLFxcbiAgICAgICAgICAgICAgZGlyICogcmNwRGlyTWluKSkgKiBpbnZlcnNlVlA7XFxuXFxuICAgIHZlYzMgcmdiQSA9IDAuNSAqIChcXG4gICAgICAgIHRleHR1cmUyRCh0ZXgsIGZyYWdDb29yZCAqIGludmVyc2VWUCArIGRpciAqICgxLjAgLyAzLjAgLSAwLjUpKS54eXogK1xcbiAgICAgICAgdGV4dHVyZTJEKHRleCwgZnJhZ0Nvb3JkICogaW52ZXJzZVZQICsgZGlyICogKDIuMCAvIDMuMCAtIDAuNSkpLnh5eik7XFxuICAgIHZlYzMgcmdiQiA9IHJnYkEgKiAwLjUgKyAwLjI1ICogKFxcbiAgICAgICAgdGV4dHVyZTJEKHRleCwgZnJhZ0Nvb3JkICogaW52ZXJzZVZQICsgZGlyICogLTAuNSkueHl6ICtcXG4gICAgICAgIHRleHR1cmUyRCh0ZXgsIGZyYWdDb29yZCAqIGludmVyc2VWUCArIGRpciAqIDAuNSkueHl6KTtcXG5cXG4gICAgZmxvYXQgbHVtYUIgPSBkb3QocmdiQiwgbHVtYSk7XFxuICAgIGlmICgobHVtYUIgPCBsdW1hTWluKSB8fCAobHVtYUIgPiBsdW1hTWF4KSlcXG4gICAgICAgIGNvbG9yID0gdmVjNChyZ2JBLCB0ZXhDb2xvci5hKTtcXG4gICAgZWxzZVxcbiAgICAgICAgY29sb3IgPSB2ZWM0KHJnYkIsIHRleENvbG9yLmEpO1xcbiAgICByZXR1cm4gY29sb3I7XFxufVxcblxcblxcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xcbnZhcnlpbmcgdmVjNCB2Q29sb3I7XFxudmFyeWluZyB2ZWMyIHZSZXNvbHV0aW9uO1xcblxcbi8vdGV4Y29vcmRzIGNvbXB1dGVkIGluIHZlcnRleCBzdGVwXFxuLy90byBhdm9pZCBkZXBlbmRlbnQgdGV4dHVyZSByZWFkc1xcbnZhcnlpbmcgdmVjMiB2X3JnYk5XO1xcbnZhcnlpbmcgdmVjMiB2X3JnYk5FO1xcbnZhcnlpbmcgdmVjMiB2X3JnYlNXO1xcbnZhcnlpbmcgdmVjMiB2X3JnYlNFO1xcbnZhcnlpbmcgdmVjMiB2X3JnYk07XFxuXFxudW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXI7XFxuXFxuXFxudm9pZCBtYWluKHZvaWQpe1xcblxcbiAgICBnbF9GcmFnQ29sb3IgPSBmeGFhKHVTYW1wbGVyLCB2VGV4dHVyZUNvb3JkICogdlJlc29sdXRpb24sIHZSZXNvbHV0aW9uLCB2X3JnYk5XLCB2X3JnYk5FLCB2X3JnYlNXLCB2X3JnYlNFLCB2X3JnYk0pO1xcblxcbn1cXG5cIixcbiAgICAgICAgLy8gdW5pZm9ybXNcbiAgICAgICAge1xuICAgICAgICAgICAgcmVzb2x1dGlvbjogeyB0eXBlOiAndjInLCB2YWx1ZTogeyB4OiAxLCB5OiAxIH0gfVxuICAgICAgICB9XG4gICAgKTtcblxufVxuXG5GWEFBRmlsdGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoQWJzdHJhY3RGaWx0ZXIucHJvdG90eXBlKTtcbkZYQUFGaWx0ZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gRlhBQUZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gRlhBQUZpbHRlcjtcblxuLyoqXG4gKiBBcHBsaWVzIHRoZSBmaWx0ZXJcbiAqXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcn0gVGhlIHJlbmRlcmVyIHRvIHJldHJpZXZlIHRoZSBmaWx0ZXIgZnJvbVxuICogQHBhcmFtIGlucHV0IHtQSVhJLlJlbmRlclRhcmdldH1cbiAqIEBwYXJhbSBvdXRwdXQge1BJWEkuUmVuZGVyVGFyZ2V0fVxuICovXG5GWEFBRmlsdGVyLnByb3RvdHlwZS5hcHBseUZpbHRlciA9IGZ1bmN0aW9uIChyZW5kZXJlciwgaW5wdXQsIG91dHB1dClcbntcbiAgICB2YXIgZmlsdGVyTWFuYWdlciA9IHJlbmRlcmVyLmZpbHRlck1hbmFnZXI7XG5cbiAgICB2YXIgc2hhZGVyID0gdGhpcy5nZXRTaGFkZXIoIHJlbmRlcmVyICk7XG4gICAgIC8vIGRyYXcgdGhlIGZpbHRlci4uLlxuICAgIGZpbHRlck1hbmFnZXIuYXBwbHlGaWx0ZXIoc2hhZGVyLCBpbnB1dCwgb3V0cHV0KTtcbn07XG4iLCJ2YXIgQWJzdHJhY3RGaWx0ZXIgPSByZXF1aXJlKCcuL0Fic3RyYWN0RmlsdGVyJyksXG4gICAgbWF0aCA9ICByZXF1aXJlKCcuLi8uLi8uLi9tYXRoJyk7XG5cbi8vIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL3N1YnN0YWNrL2JyZnMvaXNzdWVzLzI1XG5cblxuLyoqXG4gKiBUaGUgU3ByaXRlTWFza0ZpbHRlciBjbGFzc1xuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5BYnN0cmFjdEZpbHRlclxuICogQG1lbWJlcm9mIFBJWElcbiAqIEBwYXJhbSBzcHJpdGUge1BJWEkuU3ByaXRlfSB0aGUgdGFyZ2V0IHNwcml0ZVxuICovXG5mdW5jdGlvbiBTcHJpdGVNYXNrRmlsdGVyKHNwcml0ZSlcbntcbiAgICB2YXIgbWFza01hdHJpeCA9IG5ldyBtYXRoLk1hdHJpeCgpO1xuXG4gICAgQWJzdHJhY3RGaWx0ZXIuY2FsbCh0aGlzLFxuICAgICAgICBcImF0dHJpYnV0ZSB2ZWMyIGFWZXJ0ZXhQb3NpdGlvbjtcXG5hdHRyaWJ1dGUgdmVjMiBhVGV4dHVyZUNvb3JkO1xcbmF0dHJpYnV0ZSB2ZWM0IGFDb2xvcjtcXG5cXG51bmlmb3JtIG1hdDMgcHJvamVjdGlvbk1hdHJpeDtcXG51bmlmb3JtIG1hdDMgb3RoZXJNYXRyaXg7XFxuXFxudmFyeWluZyB2ZWMyIHZNYXNrQ29vcmQ7XFxudmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7XFxudmFyeWluZyB2ZWM0IHZDb2xvcjtcXG5cXG52b2lkIG1haW4odm9pZClcXG57XFxuICAgIGdsX1Bvc2l0aW9uID0gdmVjNCgocHJvamVjdGlvbk1hdHJpeCAqIHZlYzMoYVZlcnRleFBvc2l0aW9uLCAxLjApKS54eSwgMC4wLCAxLjApO1xcbiAgICB2VGV4dHVyZUNvb3JkID0gYVRleHR1cmVDb29yZDtcXG4gICAgdk1hc2tDb29yZCA9ICggb3RoZXJNYXRyaXggKiB2ZWMzKCBhVGV4dHVyZUNvb3JkLCAxLjApICApLnh5O1xcbiAgICB2Q29sb3IgPSB2ZWM0KGFDb2xvci5yZ2IgKiBhQ29sb3IuYSwgYUNvbG9yLmEpO1xcbn1cXG5cIixcbiAgICAgICAgXCJwcmVjaXNpb24gbG93cCBmbG9hdDtcXG5cXG52YXJ5aW5nIHZlYzIgdk1hc2tDb29yZDtcXG52YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDtcXG52YXJ5aW5nIHZlYzQgdkNvbG9yO1xcblxcbnVuaWZvcm0gc2FtcGxlcjJEIHVTYW1wbGVyO1xcbnVuaWZvcm0gZmxvYXQgYWxwaGE7XFxudW5pZm9ybSBzYW1wbGVyMkQgbWFzaztcXG5cXG52b2lkIG1haW4odm9pZClcXG57XFxuICAgIC8vIGNoZWNrIGNsaXAhIHRoaXMgd2lsbCBzdG9wIHRoZSBtYXNrIGJsZWVkaW5nIG91dCBmcm9tIHRoZSBlZGdlc1xcbiAgICB2ZWMyIHRleHQgPSBhYnMoIHZNYXNrQ29vcmQgLSAwLjUgKTtcXG4gICAgdGV4dCA9IHN0ZXAoMC41LCB0ZXh0KTtcXG4gICAgZmxvYXQgY2xpcCA9IDEuMCAtIG1heCh0ZXh0LnksIHRleHQueCk7XFxuICAgIHZlYzQgb3JpZ2luYWwgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZUZXh0dXJlQ29vcmQpO1xcbiAgICB2ZWM0IG1hc2t5ID0gdGV4dHVyZTJEKG1hc2ssIHZNYXNrQ29vcmQpO1xcbiAgICBvcmlnaW5hbCAqPSAobWFza3kuciAqIG1hc2t5LmEgKiBhbHBoYSAqIGNsaXApO1xcbiAgICBnbF9GcmFnQ29sb3IgPSBvcmlnaW5hbDtcXG59XFxuXCIsXG4gICAgICAgIHtcbiAgICAgICAgICAgIG1hc2s6ICAgICAgICAgICB7IHR5cGU6ICdzYW1wbGVyMkQnLCB2YWx1ZTogc3ByaXRlLl90ZXh0dXJlIH0sXG4gICAgICAgICAgICBhbHBoYTogICAgICAgICAgeyB0eXBlOiAnZicsIHZhbHVlOiAxfSxcbiAgICAgICAgICAgIG90aGVyTWF0cml4OiAgICB7IHR5cGU6ICdtYXQzJywgdmFsdWU6IG1hc2tNYXRyaXgudG9BcnJheSh0cnVlKSB9XG4gICAgICAgIH1cbiAgICApO1xuXG4gICAgdGhpcy5tYXNrU3ByaXRlID0gc3ByaXRlO1xuICAgIHRoaXMubWFza01hdHJpeCA9IG1hc2tNYXRyaXg7XG59XG5cblNwcml0ZU1hc2tGaWx0ZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShBYnN0cmFjdEZpbHRlci5wcm90b3R5cGUpO1xuU3ByaXRlTWFza0ZpbHRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBTcHJpdGVNYXNrRmlsdGVyO1xubW9kdWxlLmV4cG9ydHMgPSBTcHJpdGVNYXNrRmlsdGVyO1xuXG4vKipcbiAqIEFwcGxpZXMgdGhlIGZpbHRlclxuICpcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5XZWJHTFJlbmRlcmVyfSBUaGUgcmVuZGVyZXIgdG8gcmV0cmlldmUgdGhlIGZpbHRlciBmcm9tXG4gKiBAcGFyYW0gaW5wdXQge1BJWEkuUmVuZGVyVGFyZ2V0fVxuICogQHBhcmFtIG91dHB1dCB7UElYSS5SZW5kZXJUYXJnZXR9XG4gKi9cblNwcml0ZU1hc2tGaWx0ZXIucHJvdG90eXBlLmFwcGx5RmlsdGVyID0gZnVuY3Rpb24gKHJlbmRlcmVyLCBpbnB1dCwgb3V0cHV0KVxue1xuICAgIHZhciBmaWx0ZXJNYW5hZ2VyID0gcmVuZGVyZXIuZmlsdGVyTWFuYWdlcjtcblxuICAgIHRoaXMudW5pZm9ybXMubWFzay52YWx1ZSA9IHRoaXMubWFza1Nwcml0ZS5fdGV4dHVyZTtcblxuICAgIGZpbHRlck1hbmFnZXIuY2FsY3VsYXRlTWFwcGVkTWF0cml4KGlucHV0LmZyYW1lLCB0aGlzLm1hc2tTcHJpdGUsIHRoaXMubWFza01hdHJpeCk7XG5cbiAgICB0aGlzLnVuaWZvcm1zLm90aGVyTWF0cml4LnZhbHVlID0gdGhpcy5tYXNrTWF0cml4LnRvQXJyYXkodHJ1ZSk7XG4gICAgdGhpcy51bmlmb3Jtcy5hbHBoYS52YWx1ZSA9IHRoaXMubWFza1Nwcml0ZS53b3JsZEFscGhhO1xuXG4gICAgdmFyIHNoYWRlciA9IHRoaXMuZ2V0U2hhZGVyKHJlbmRlcmVyKTtcbiAgICAgLy8gZHJhdyB0aGUgZmlsdGVyLi4uXG4gICAgZmlsdGVyTWFuYWdlci5hcHBseUZpbHRlcihzaGFkZXIsIGlucHV0LCBvdXRwdXQpO1xufTtcblxuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhTcHJpdGVNYXNrRmlsdGVyLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFRoZSB0ZXh0dXJlIHVzZWQgZm9yIHRoZSBkaXNwbGFjZW1lbnQgbWFwLiBNdXN0IGJlIHBvd2VyIG9mIDIgc2l6ZWQgdGV4dHVyZS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuVGV4dHVyZX1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5TcHJpdGVNYXNrRmlsdGVyI1xuICAgICAqL1xuICAgIG1hcDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVuaWZvcm1zLm1hc2sudmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLm1hc2sudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBUaGUgb2Zmc2V0IHVzZWQgdG8gbW92ZSB0aGUgZGlzcGxhY2VtZW50IG1hcC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuUG9pbnR9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuU3ByaXRlTWFza0ZpbHRlciNcbiAgICAgKi9cbiAgICBvZmZzZXQ6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbigpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVuaWZvcm1zLm9mZnNldC52YWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbih2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy5vZmZzZXQudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuIiwidmFyIFdlYkdMTWFuYWdlciA9IHJlcXVpcmUoJy4vV2ViR0xNYW5hZ2VyJyk7XG5cbi8qKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQGV4dGVuZHMgUElYSS5XZWJHbE1hbmFnZXJcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5XZWJHTFJlbmRlcmVyfSBUaGUgcmVuZGVyZXIgdGhpcyBtYW5hZ2VyIHdvcmtzIGZvci5cbiAqL1xuZnVuY3Rpb24gQmxlbmRNb2RlTWFuYWdlcihyZW5kZXJlcilcbntcbiAgICBXZWJHTE1hbmFnZXIuY2FsbCh0aGlzLCByZW5kZXJlcik7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy5jdXJyZW50QmxlbmRNb2RlID0gOTk5OTk7XG59XG5cbkJsZW5kTW9kZU1hbmFnZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShXZWJHTE1hbmFnZXIucHJvdG90eXBlKTtcbkJsZW5kTW9kZU1hbmFnZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gQmxlbmRNb2RlTWFuYWdlcjtcbm1vZHVsZS5leHBvcnRzID0gQmxlbmRNb2RlTWFuYWdlcjtcblxuLyoqXG4gKiBTZXRzLXVwIHRoZSBnaXZlbiBibGVuZE1vZGUgZnJvbSBXZWJHTCdzIHBvaW50IG9mIHZpZXcuXG4gKlxuICogQHBhcmFtIGJsZW5kTW9kZSB7bnVtYmVyfSB0aGUgYmxlbmRNb2RlLCBzaG91bGQgYmUgYSBQaXhpIGNvbnN0LCBzdWNoIGFzIGBQSVhJLkJMRU5EX01PREVTLkFERGAuIFNlZVxuICogIHtAbGluayBQSVhJLkJMRU5EX01PREVTfSBmb3IgcG9zc2libGUgdmFsdWVzLlxuICovXG5CbGVuZE1vZGVNYW5hZ2VyLnByb3RvdHlwZS5zZXRCbGVuZE1vZGUgPSBmdW5jdGlvbiAoYmxlbmRNb2RlKVxue1xuICAgIGlmICh0aGlzLmN1cnJlbnRCbGVuZE1vZGUgPT09IGJsZW5kTW9kZSlcbiAgICB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICB0aGlzLmN1cnJlbnRCbGVuZE1vZGUgPSBibGVuZE1vZGU7XG5cbiAgICB2YXIgbW9kZSA9IHRoaXMucmVuZGVyZXIuYmxlbmRNb2Rlc1t0aGlzLmN1cnJlbnRCbGVuZE1vZGVdO1xuICAgIHRoaXMucmVuZGVyZXIuZ2wuYmxlbmRGdW5jKG1vZGVbMF0sIG1vZGVbMV0pO1xuXG4gICAgcmV0dXJuIHRydWU7XG59O1xuIiwidmFyIFdlYkdMTWFuYWdlciA9IHJlcXVpcmUoJy4vV2ViR0xNYW5hZ2VyJyksXG4gICAgUmVuZGVyVGFyZ2V0ID0gcmVxdWlyZSgnLi4vdXRpbHMvUmVuZGVyVGFyZ2V0JyksXG4gICAgQ09OU1QgPSByZXF1aXJlKCcuLi8uLi8uLi9jb25zdCcpLFxuICAgIFF1YWQgPSByZXF1aXJlKCcuLi91dGlscy9RdWFkJyksXG4gICAgbWF0aCA9ICByZXF1aXJlKCcuLi8uLi8uLi9tYXRoJyk7XG5cbi8qKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQGV4dGVuZHMgUElYSS5XZWJHTE1hbmFnZXJcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5XZWJHTFJlbmRlcmVyfSBUaGUgcmVuZGVyZXIgdGhpcyBtYW5hZ2VyIHdvcmtzIGZvci5cbiAqL1xuZnVuY3Rpb24gRmlsdGVyTWFuYWdlcihyZW5kZXJlcilcbntcbiAgICBXZWJHTE1hbmFnZXIuY2FsbCh0aGlzLCByZW5kZXJlcik7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtvYmplY3RbXX1cbiAgICAgKi9cbiAgICB0aGlzLmZpbHRlclN0YWNrID0gW107XG5cbiAgICB0aGlzLmZpbHRlclN0YWNrLnB1c2goe1xuICAgICAgICByZW5kZXJUYXJnZXQ6cmVuZGVyZXIuY3VycmVudFJlbmRlclRhcmdldCxcbiAgICAgICAgZmlsdGVyOltdLFxuICAgICAgICBib3VuZHM6bnVsbFxuICAgIH0pO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7UElYSS5SZW5kZXJUYXJnZXRbXX1cbiAgICAgKi9cbiAgICB0aGlzLnRleHR1cmVQb29sID0gW107XG5cbiAgICAvKipcbiAgICAgKiBUaGUgc2l6ZSBvZiB0aGUgdGV4dHVyZVxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5SZWN0YW5nbGV9XG4gICAgICovXG4gICAgLy8gbGlzdGVuIGZvciBjb250ZXh0IGFuZCB1cGRhdGUgbmVjZXNzYXJ5IGJ1ZmZlcnNcbiAgICAvL1RPRE8gbWFrZSB0aGlzIGR5bmFtaWMhXG4gICAgLy9UT0RPIHRlc3QgdGhpcyBvdXQgYnkgZm9yY2VzIHBvd2VyIG9mIHR3bz9cbiAgICB0aGlzLnRleHR1cmVTaXplID0gbmV3IG1hdGguUmVjdGFuZ2xlKDAsIDAsIHJlbmRlcmVyLndpZHRoLCByZW5kZXJlci5oZWlnaHQpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGN1cnJlbnQgZnJhbWVcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuUmVjdGFuZ2xlfVxuICAgICAqL1xuICAgIHRoaXMuY3VycmVudEZyYW1lID0gbnVsbDtcbn1cblxuRmlsdGVyTWFuYWdlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFdlYkdMTWFuYWdlci5wcm90b3R5cGUpO1xuRmlsdGVyTWFuYWdlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBGaWx0ZXJNYW5hZ2VyO1xubW9kdWxlLmV4cG9ydHMgPSBGaWx0ZXJNYW5hZ2VyO1xuXG5cbi8qKlxuICogQ2FsbGVkIHdoZW4gdGhlcmUgaXMgYSBXZWJHTCBjb250ZXh0IGNoYW5nZS5cbiAqXG4gKi9cbkZpbHRlck1hbmFnZXIucHJvdG90eXBlLm9uQ29udGV4dENoYW5nZSA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy50ZXh0dXJlUG9vbC5sZW5ndGggPSAwO1xuXG4gICAgdmFyIGdsID0gdGhpcy5yZW5kZXJlci5nbDtcbiAgICB0aGlzLnF1YWQgPSBuZXcgUXVhZChnbCk7XG59O1xuXG4vKipcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5XZWJHTFJlbmRlcmVyfVxuICogQHBhcmFtIGJ1ZmZlciB7QXJyYXlCdWZmZXJ9XG4gKi9cbkZpbHRlck1hbmFnZXIucHJvdG90eXBlLnNldEZpbHRlclN0YWNrID0gZnVuY3Rpb24gKCBmaWx0ZXJTdGFjayApXG57XG4gICAgdGhpcy5maWx0ZXJTdGFjayA9IGZpbHRlclN0YWNrO1xufTtcblxuLyoqXG4gKiBBcHBsaWVzIHRoZSBmaWx0ZXIgYW5kIGFkZHMgaXQgdG8gdGhlIGN1cnJlbnQgZmlsdGVyIHN0YWNrLlxuICpcbiAqIEBwYXJhbSB0YXJnZXQge1BJWEkuRGlzcGxheU9iamVjdH1cbiAqIEBwYXJhbSBmaWx0ZXJzIHtQSVhJLkFic3RyYWN0RmlsZXJbXX0gdGhlIGZpbHRlcnMgdGhhdCB3aWxsIGJlIHB1c2hlZCB0byB0aGUgY3VycmVudCBmaWx0ZXIgc3RhY2tcbiAqL1xuRmlsdGVyTWFuYWdlci5wcm90b3R5cGUucHVzaEZpbHRlciA9IGZ1bmN0aW9uICh0YXJnZXQsIGZpbHRlcnMpXG57XG4gICAgLy8gZ2V0IHRoZSBib3VuZHMgb2YgdGhlIG9iamVjdC4uXG4gICAgLy8gVE9ETyByZXBsYWNlIGNsb25lIHdpdGggYSBjb3B5IHRvIHNhdmUgb2JqZWN0IGNyZWF0aW9uXG4gICAgdmFyIGJvdW5kcyA9IHRhcmdldC5maWx0ZXJBcmVhID8gdGFyZ2V0LmZpbHRlckFyZWEuY2xvbmUoKSA6IHRhcmdldC5nZXRCb3VuZHMoKTtcblxuICAgIC8vYm91bmRzID0gYm91bmRzLmNsb25lKCk7XG5cbiAgICAvLyByb3VuZCBvZmYgdGhlIHJlY3RhbmdsZSB0byBnZXQgYSBuaWNlIHNtb29vb29vb3RoIGZpbHRlciA6KVxuICAgIGJvdW5kcy54ID0gYm91bmRzLnggfCAwO1xuICAgIGJvdW5kcy55ID0gYm91bmRzLnkgfCAwO1xuICAgIGJvdW5kcy53aWR0aCA9IGJvdW5kcy53aWR0aCB8IDA7XG4gICAgYm91bmRzLmhlaWdodCA9IGJvdW5kcy5oZWlnaHQgfCAwO1xuXG5cbiAgICAvLyBwYWRkaW5nIVxuICAgIHZhciBwYWRkaW5nID0gZmlsdGVyc1swXS5wYWRkaW5nIHwgMDtcbiAgICBib3VuZHMueCAtPSBwYWRkaW5nO1xuICAgIGJvdW5kcy55IC09IHBhZGRpbmc7XG4gICAgYm91bmRzLndpZHRoICs9IHBhZGRpbmcgKiAyO1xuICAgIGJvdW5kcy5oZWlnaHQgKz0gcGFkZGluZyAqIDI7XG5cblxuICAgIGlmKHRoaXMucmVuZGVyZXIuY3VycmVudFJlbmRlclRhcmdldC50cmFuc2Zvcm0pXG4gICAge1xuICAgICAgICAvL1RPRE8gdGhpcyB3aWxsIGJyZWFrIGlmIHRoZSByZW5kZXJUZXh0dXJlIHRyYW5zZm9ybSBpcyBhbnl0aGluZyBvdGhlciB0aGFuIGEgdHJhbnNsYXRpb24uXG4gICAgICAgIC8vV2lsbCBuZWVkIHRvIHRha2UgdGhlIGZ1bGwgbWF0cml4IHRyYW5zZm9ybSBpbnRvIGFjb3VudC4uXG4gICAgICAgIHZhciB0cmFuc2Zvcm0gPSB0aGlzLnJlbmRlcmVyLmN1cnJlbnRSZW5kZXJUYXJnZXQudHJhbnNmb3JtO1xuXG4gICAgICAgIGJvdW5kcy54ICs9IHRyYW5zZm9ybS50eDtcbiAgICAgICAgYm91bmRzLnkgKz0gdHJhbnNmb3JtLnR5O1xuXG4gICAgICAgIHRoaXMuY2FwRmlsdGVyQXJlYSggYm91bmRzICk7XG5cbiAgICAgICAgYm91bmRzLnggLT0gdHJhbnNmb3JtLnR4O1xuICAgICAgICBib3VuZHMueSAtPSB0cmFuc2Zvcm0udHk7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgICB0aGlzLmNhcEZpbHRlckFyZWEoIGJvdW5kcyApO1xuICAgIH1cblxuICAgIGlmKGJvdW5kcy53aWR0aCA+IDAgJiYgYm91bmRzLmhlaWdodCA+IDApXG4gICAge1xuICAgICAgICB0aGlzLmN1cnJlbnRGcmFtZSA9IGJvdW5kcztcblxuICAgICAgICB2YXIgdGV4dHVyZSA9IHRoaXMuZ2V0UmVuZGVyVGFyZ2V0KCk7XG5cbiAgICAgICAgdGhpcy5yZW5kZXJlci5zZXRSZW5kZXJUYXJnZXQodGV4dHVyZSk7XG5cbiAgICAgICAgLy8gY2xlYXIgdGhlIHRleHR1cmUuLlxuICAgICAgICB0ZXh0dXJlLmNsZWFyKCk7XG5cbiAgICAgICAgLy8gVE9ETyBnZXQgcmlkIG9mIG9iamVjdCBjcmVhdGlvbiFcbiAgICAgICAgdGhpcy5maWx0ZXJTdGFjay5wdXNoKHtcbiAgICAgICAgICAgIHJlbmRlclRhcmdldDogdGV4dHVyZSxcbiAgICAgICAgICAgIGZpbHRlcjogZmlsdGVyc1xuICAgICAgICB9KTtcblxuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICAvLyBwdXNoIHNvbXRoaW5nIG9uIHRvIHRoZSBzdGFjayB0aGF0IGlzIGVtcHR5XG4gICAgICAgIHRoaXMuZmlsdGVyU3RhY2sucHVzaCh7XG4gICAgICAgICAgICByZW5kZXJUYXJnZXQ6IG51bGwsXG4gICAgICAgICAgICBmaWx0ZXI6IGZpbHRlcnNcbiAgICAgICAgfSk7XG4gICAgfVxufTtcblxuXG4vKipcbiAqIFJlbW92ZXMgdGhlIGxhc3QgZmlsdGVyIGZyb20gdGhlIGZpbHRlciBzdGFjayBhbmQgcmV0dXJucyBpdC5cbiAqXG4gKi9cbkZpbHRlck1hbmFnZXIucHJvdG90eXBlLnBvcEZpbHRlciA9IGZ1bmN0aW9uICgpXG57XG4gICAgdmFyIGZpbHRlckRhdGEgPSB0aGlzLmZpbHRlclN0YWNrLnBvcCgpO1xuICAgIHZhciBwcmV2aW91c0ZpbHRlckRhdGEgPSB0aGlzLmZpbHRlclN0YWNrW3RoaXMuZmlsdGVyU3RhY2subGVuZ3RoLTFdO1xuXG4gICAgdmFyIGlucHV0ID0gZmlsdGVyRGF0YS5yZW5kZXJUYXJnZXQ7XG5cbiAgICAvLyBpZiB0aGUgcmVuZGVyVGFyZ2V0IGlzIG51bGwgdGhlbiB3ZSBkb24ndCBhcHBseSB0aGUgZmlsdGVyIGFzIGl0cyBvZmZzY3JlZW5cbiAgICBpZighZmlsdGVyRGF0YS5yZW5kZXJUYXJnZXQpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFyIG91dHB1dCA9IHByZXZpb3VzRmlsdGVyRGF0YS5yZW5kZXJUYXJnZXQ7XG5cbiAgICAvLyB1c2UgcHJvZ3JhbVxuICAgIHZhciBnbCA9IHRoaXMucmVuZGVyZXIuZ2w7XG5cblxuICAgIHRoaXMuY3VycmVudEZyYW1lID0gaW5wdXQuZnJhbWU7XG5cbiAgICB0aGlzLnF1YWQubWFwKHRoaXMudGV4dHVyZVNpemUsIGlucHV0LmZyYW1lKTtcblxuXG4gICAgLy8gVE9ETy4uIHRoaXMgcHJvYmFibHkgb25seSBuZWVkcyB0byBiZSBkb25lIG9uY2UhXG4gICAgZ2wuYmluZEJ1ZmZlcihnbC5BUlJBWV9CVUZGRVIsIHRoaXMucXVhZC52ZXJ0ZXhCdWZmZXIpO1xuICAgIGdsLmJpbmRCdWZmZXIoZ2wuRUxFTUVOVF9BUlJBWV9CVUZGRVIsIHRoaXMucXVhZC5pbmRleEJ1ZmZlcik7XG5cbiAgICB2YXIgZmlsdGVycyA9IGZpbHRlckRhdGEuZmlsdGVyO1xuXG4gICAgLy8gYXNzdW1pbmcgYWxsIGZpbHRlcnMgZm9sbG93IHRoZSBjb3JyZWN0IGZvcm1hdD8/XG4gICAgZ2wudmVydGV4QXR0cmliUG9pbnRlcih0aGlzLnJlbmRlcmVyLnNoYWRlck1hbmFnZXIuZGVmYXVsdFNoYWRlci5hdHRyaWJ1dGVzLmFWZXJ0ZXhQb3NpdGlvbiwgMiwgZ2wuRkxPQVQsIGZhbHNlLCAwLCAwKTtcbiAgICBnbC52ZXJ0ZXhBdHRyaWJQb2ludGVyKHRoaXMucmVuZGVyZXIuc2hhZGVyTWFuYWdlci5kZWZhdWx0U2hhZGVyLmF0dHJpYnV0ZXMuYVRleHR1cmVDb29yZCwgMiwgZ2wuRkxPQVQsIGZhbHNlLCAwLCAyICogNCAqIDQpO1xuICAgIGdsLnZlcnRleEF0dHJpYlBvaW50ZXIodGhpcy5yZW5kZXJlci5zaGFkZXJNYW5hZ2VyLmRlZmF1bHRTaGFkZXIuYXR0cmlidXRlcy5hQ29sb3IsIDQsIGdsLkZMT0FULCBmYWxzZSwgMCwgNCAqIDQgKiA0KTtcblxuICAgIC8vIHJlc3RvcmUgdGhlIG5vcm1hbCBibGVuZG1vZGUhXG4gICAgdGhpcy5yZW5kZXJlci5ibGVuZE1vZGVNYW5hZ2VyLnNldEJsZW5kTW9kZShDT05TVC5CTEVORF9NT0RFUy5OT1JNQUwpO1xuXG4gICAgaWYgKGZpbHRlcnMubGVuZ3RoID09PSAxKVxuICAgIHtcbiAgICAgICAgLy8gVE9ETyAoY2VuZ2xlcikgLSBUaGVyZSBoYXMgdG8gYmUgYSBiZXR0ZXIgd2F5IHRoZW4gc2V0dGluZyB0aGlzIGVhY2ggdGltZT9cbiAgICAgICAgaWYgKGZpbHRlcnNbMF0udW5pZm9ybXMuZGltZW5zaW9ucylcbiAgICAgICAge1xuICAgICAgICAgICAgZmlsdGVyc1swXS51bmlmb3Jtcy5kaW1lbnNpb25zLnZhbHVlWzBdID0gdGhpcy5yZW5kZXJlci53aWR0aDtcbiAgICAgICAgICAgIGZpbHRlcnNbMF0udW5pZm9ybXMuZGltZW5zaW9ucy52YWx1ZVsxXSA9IHRoaXMucmVuZGVyZXIuaGVpZ2h0O1xuICAgICAgICAgICAgZmlsdGVyc1swXS51bmlmb3Jtcy5kaW1lbnNpb25zLnZhbHVlWzJdID0gdGhpcy5xdWFkLnZlcnRpY2VzWzBdO1xuICAgICAgICAgICAgZmlsdGVyc1swXS51bmlmb3Jtcy5kaW1lbnNpb25zLnZhbHVlWzNdID0gdGhpcy5xdWFkLnZlcnRpY2VzWzVdO1xuICAgICAgICB9XG5cbiAgICAgICAgZmlsdGVyc1swXS5hcHBseUZpbHRlciggdGhpcy5yZW5kZXJlciwgaW5wdXQsIG91dHB1dCApO1xuICAgICAgICB0aGlzLnJldHVyblJlbmRlclRhcmdldCggaW5wdXQgKTtcblxuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICB2YXIgZmxpcFRleHR1cmUgPSBpbnB1dDtcbiAgICAgICAgdmFyIGZsb3BUZXh0dXJlID0gdGhpcy5nZXRSZW5kZXJUYXJnZXQodHJ1ZSk7XG5cbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBmaWx0ZXJzLmxlbmd0aC0xOyBpKyspXG4gICAgICAgIHtcbiAgICAgICAgICAgIHZhciBmaWx0ZXIgPSBmaWx0ZXJzW2ldO1xuXG4gICAgICAgICAgICAvLyBUT0RPIChjZW5nbGVyKSAtIFRoZXJlIGhhcyB0byBiZSBhIGJldHRlciB3YXkgdGhlbiBzZXR0aW5nIHRoaXMgZWFjaCB0aW1lP1xuICAgICAgICAgICAgaWYgKGZpbHRlci51bmlmb3Jtcy5kaW1lbnNpb25zKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGZpbHRlci51bmlmb3Jtcy5kaW1lbnNpb25zLnZhbHVlWzBdID0gdGhpcy5yZW5kZXJlci53aWR0aDtcbiAgICAgICAgICAgICAgICBmaWx0ZXIudW5pZm9ybXMuZGltZW5zaW9ucy52YWx1ZVsxXSA9IHRoaXMucmVuZGVyZXIuaGVpZ2h0O1xuICAgICAgICAgICAgICAgIGZpbHRlci51bmlmb3Jtcy5kaW1lbnNpb25zLnZhbHVlWzJdID0gdGhpcy5xdWFkLnZlcnRpY2VzWzBdO1xuICAgICAgICAgICAgICAgIGZpbHRlci51bmlmb3Jtcy5kaW1lbnNpb25zLnZhbHVlWzNdID0gdGhpcy5xdWFkLnZlcnRpY2VzWzVdO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBmaWx0ZXIuYXBwbHlGaWx0ZXIoIHRoaXMucmVuZGVyZXIsIGZsaXBUZXh0dXJlLCBmbG9wVGV4dHVyZSApO1xuXG4gICAgICAgICAgICB2YXIgdGVtcCA9IGZsaXBUZXh0dXJlO1xuICAgICAgICAgICAgZmxpcFRleHR1cmUgPSBmbG9wVGV4dHVyZTtcbiAgICAgICAgICAgIGZsb3BUZXh0dXJlID0gdGVtcDtcbiAgICAgICAgfVxuXG4gICAgICAgIGZpbHRlcnNbZmlsdGVycy5sZW5ndGgtMV0uYXBwbHlGaWx0ZXIoIHRoaXMucmVuZGVyZXIsIGZsaXBUZXh0dXJlLCBvdXRwdXQgKTtcblxuICAgICAgICB0aGlzLnJldHVyblJlbmRlclRhcmdldCggZmxpcFRleHR1cmUgKTtcbiAgICAgICAgdGhpcy5yZXR1cm5SZW5kZXJUYXJnZXQoIGZsb3BUZXh0dXJlICk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZpbHRlckRhdGEuZmlsdGVyO1xufTtcblxuLyoqXG4gKiBHcmFicyBhbiByZW5kZXIgdGFyZ2V0IGZyb20gdGhlIGludGVybmFsIHBvb2xcbiAqXG4gKiBAcGFyYW0gY2xlYXIge2Jvb2xlYW59IFdoZXRoZXIgb3Igbm90IHdlIG5lZWQgdG8gY2xlYXIgdGhlIFJlbmRlclRhcmdldFxuICogQHJldHVybiB7UmVuZGVyVGFyZ2V0fVxuICovXG5GaWx0ZXJNYW5hZ2VyLnByb3RvdHlwZS5nZXRSZW5kZXJUYXJnZXQgPSBmdW5jdGlvbiAoIGNsZWFyIClcbntcbiAgICB2YXIgcmVuZGVyVGFyZ2V0ID0gdGhpcy50ZXh0dXJlUG9vbC5wb3AoKSB8fCBuZXcgUmVuZGVyVGFyZ2V0KHRoaXMucmVuZGVyZXIuZ2wsIHRoaXMudGV4dHVyZVNpemUud2lkdGgsIHRoaXMudGV4dHVyZVNpemUuaGVpZ2h0LCBDT05TVC5TQ0FMRV9NT0RFUy5MSU5FQVIsIHRoaXMucmVuZGVyZXIucmVzb2x1dGlvbiAqIENPTlNULkZJTFRFUl9SRVNPTFVUSU9OKTtcbiAgICByZW5kZXJUYXJnZXQuZnJhbWUgPSB0aGlzLmN1cnJlbnRGcmFtZTtcblxuICAgIGlmIChjbGVhcilcbiAgICB7XG4gICAgICAgIHJlbmRlclRhcmdldC5jbGVhcih0cnVlKTtcbiAgICB9XG5cbiAgICByZXR1cm4gcmVuZGVyVGFyZ2V0O1xufTtcblxuLypcbiAqIFJldHVybnMgYSBSZW5kZXJUYXJnZXQgdG8gdGhlIGludGVybmFsIHBvb2xcbiAqIEBwYXJhbSByZW5kZXJUYXJnZXQge1JlbmRlclRhcmdldH0gVGhlIFJlbmRlclRhcmdldCB3ZSB3YW50IHRvIHJldHVybiB0byB0aGUgcG9vbFxuICovXG5GaWx0ZXJNYW5hZ2VyLnByb3RvdHlwZS5yZXR1cm5SZW5kZXJUYXJnZXQgPSBmdW5jdGlvbiAocmVuZGVyVGFyZ2V0KVxue1xuICAgIHRoaXMudGV4dHVyZVBvb2wucHVzaCggcmVuZGVyVGFyZ2V0ICk7XG59O1xuXG4vKlxuICogQXBwbGllcyB0aGUgZmlsdGVyXG4gKiBAcGFyYW0gc2hhZGVyIHtTaGFkZXJ9IFRoZSBzaGFkZXIgdG8gdXBsb2FkXG4gKiBAcGFyYW0gaW5wdXRUYXJnZXQge1JlbmRlclRhcmdldH1cbiAqIEBwYXJhbSBvdXRwdXRUYXJnZXQge1JlbmRlclRhcmdldH1cbiAqIEBwYXJhbSBjbGVhciB7Ym9vbGVhbn0gV2hldGhlciBvciBub3Qgd2Ugd2FudCB0byBjbGVhciB0aGUgb3V0cHV0VGFyZ2V0XG4gKi9cbkZpbHRlck1hbmFnZXIucHJvdG90eXBlLmFwcGx5RmlsdGVyID0gZnVuY3Rpb24gKHNoYWRlciwgaW5wdXRUYXJnZXQsIG91dHB1dFRhcmdldCwgY2xlYXIpXG57XG4gICAgdmFyIGdsID0gdGhpcy5yZW5kZXJlci5nbDtcblxuICAgIHRoaXMucmVuZGVyZXIuc2V0UmVuZGVyVGFyZ2V0KG91dHB1dFRhcmdldCk7XG5cbiAgICBpZiAoY2xlYXIpXG4gICAge1xuICAgICAgICBvdXRwdXRUYXJnZXQuY2xlYXIoKTtcbiAgICB9XG5cbiAgICAvLyBzZXQgdGhlIHNoYWRlclxuICAgIHRoaXMucmVuZGVyZXIuc2hhZGVyTWFuYWdlci5zZXRTaGFkZXIoc2hhZGVyKTtcblxuICAgIC8vIFRPRE8gKGNlbmdsZXIpIC0gQ2FuIHRoaXMgYmUgY2FjaGVkIGFuZCBub3QgYHRvQXJyYXlgZWQgZWFjaCBmcmFtZT9cbiAgICBzaGFkZXIudW5pZm9ybXMucHJvamVjdGlvbk1hdHJpeC52YWx1ZSA9IHRoaXMucmVuZGVyZXIuY3VycmVudFJlbmRlclRhcmdldC5wcm9qZWN0aW9uTWF0cml4LnRvQXJyYXkodHJ1ZSk7XG5cbiAgICAvL1RPRE8gY2FuIHRoaXMgYmUgb3B0aW1pc2VkP1xuICAgIHNoYWRlci5zeW5jVW5pZm9ybXMoKTtcbi8qXG4gICAgZ2wudmVydGV4QXR0cmliUG9pbnRlcihzaGFkZXIuYXR0cmlidXRlcy5hVmVydGV4UG9zaXRpb24sIDIsIGdsLkZMT0FULCBmYWxzZSwgMCwgMCk7XG4gICAgZ2wudmVydGV4QXR0cmliUG9pbnRlcihzaGFkZXIuYXR0cmlidXRlcy5hVGV4dHVyZUNvb3JkLCAyLCBnbC5GTE9BVCwgZmFsc2UsIDAsIDIgKiA0ICogNCk7XG4gICAgZ2wudmVydGV4QXR0cmliUG9pbnRlcihzaGFkZXIuYXR0cmlidXRlcy5hQ29sb3IsIDQsIGdsLkZMT0FULCBmYWxzZSwgMCwgNCAqIDQgKiA0KTtcbiovXG5cbiAgICBnbC5hY3RpdmVUZXh0dXJlKGdsLlRFWFRVUkUwKTtcbiAgICBnbC5iaW5kVGV4dHVyZShnbC5URVhUVVJFXzJELCBpbnB1dFRhcmdldC50ZXh0dXJlKTtcblxuICAgIGdsLmRyYXdFbGVtZW50cyhnbC5UUklBTkdMRVMsIDYsIGdsLlVOU0lHTkVEX1NIT1JULCAwICk7XG4gICAgdGhpcy5yZW5kZXJlci5kcmF3Q291bnQrKztcbn07XG5cbi8qXG4gKiBDYWxjdWxhdGVzIHRoZSBtYXBwZWQgbWF0cml4XG4gKiBAcGFyYW0gZmlsdGVyQXJlYSB7UmVjdGFuZ2xlfSBUaGUgZmlsdGVyIGFyZWFcbiAqIEBwYXJhbSBzcHJpdGUge1Nwcml0ZX0gdGhlIHRhcmdldCBzcHJpdGVcbiAqIEBwYXJhbSBvdXRwdXRNYXRyaXgge01hdHJpeH0gQGFsdmluXG4gKi9cbi8vIFRPRE8gcGxheWluZyBhcm91bmQgaGVyZS4uIHRoaXMgaXMgdGVtcG9yYXJ5IC0gKHdpbGwgZW5kIHVwIGluIHRoZSBzaGFkZXIpXG5GaWx0ZXJNYW5hZ2VyLnByb3RvdHlwZS5jYWxjdWxhdGVNYXBwZWRNYXRyaXggPSBmdW5jdGlvbiAoZmlsdGVyQXJlYSwgc3ByaXRlLCBvdXRwdXRNYXRyaXgpXG57XG4gICAgdmFyIHdvcmxkVHJhbnNmb3JtID0gc3ByaXRlLndvcmxkVHJhbnNmb3JtLmNvcHkobWF0aC5NYXRyaXguVEVNUF9NQVRSSVgpLFxuICAgIHRleHR1cmUgPSBzcHJpdGUuX3RleHR1cmUuYmFzZVRleHR1cmU7XG5cbiAgICB2YXIgbWFwcGVkTWF0cml4ID0gb3V0cHV0TWF0cml4LmlkZW50aXR5KCk7XG5cbiAgICAvLyBzY2FsZS4uXG4gICAgdmFyIHJhdGlvID0gdGhpcy50ZXh0dXJlU2l6ZS5oZWlnaHQgLyB0aGlzLnRleHR1cmVTaXplLndpZHRoO1xuXG4gICAgbWFwcGVkTWF0cml4LnRyYW5zbGF0ZShmaWx0ZXJBcmVhLnggLyB0aGlzLnRleHR1cmVTaXplLndpZHRoLCBmaWx0ZXJBcmVhLnkgLyB0aGlzLnRleHR1cmVTaXplLmhlaWdodCApO1xuXG4gICAgbWFwcGVkTWF0cml4LnNjYWxlKDEgLCByYXRpbyk7XG5cbiAgICB2YXIgdHJhbnNsYXRlU2NhbGVYID0gKHRoaXMudGV4dHVyZVNpemUud2lkdGggLyB0ZXh0dXJlLndpZHRoKTtcbiAgICB2YXIgdHJhbnNsYXRlU2NhbGVZID0gKHRoaXMudGV4dHVyZVNpemUuaGVpZ2h0IC8gdGV4dHVyZS5oZWlnaHQpO1xuXG4gICAgd29ybGRUcmFuc2Zvcm0udHggLz0gdGV4dHVyZS53aWR0aCAqIHRyYW5zbGF0ZVNjYWxlWDtcbiAgICB3b3JsZFRyYW5zZm9ybS50eSAvPSB0ZXh0dXJlLndpZHRoICogdHJhbnNsYXRlU2NhbGVYO1xuXG4gICAgd29ybGRUcmFuc2Zvcm0uaW52ZXJ0KCk7XG5cbiAgICBtYXBwZWRNYXRyaXgucHJlcGVuZCh3b3JsZFRyYW5zZm9ybSk7XG5cbiAgICAvLyBhcHBseSBpbnZlcnNlIHNjYWxlLi5cbiAgICBtYXBwZWRNYXRyaXguc2NhbGUoMSAsIDEvcmF0aW8pO1xuXG4gICAgbWFwcGVkTWF0cml4LnNjYWxlKCB0cmFuc2xhdGVTY2FsZVggLCB0cmFuc2xhdGVTY2FsZVkgKTtcblxuICAgIG1hcHBlZE1hdHJpeC50cmFuc2xhdGUoc3ByaXRlLmFuY2hvci54LCBzcHJpdGUuYW5jaG9yLnkpO1xuXG4gICAgcmV0dXJuIG1hcHBlZE1hdHJpeDtcblxuICAgIC8vIEtlZXBpbmcgdGhlIG9yZ2luYWwgYXMgYSByZW1pbmRlciB0byBtZSBvbiBob3cgdGhpcyB3b3JrcyFcbiAgICAvL1xuICAgIC8vIHZhciBtID0gbmV3IG1hdGguTWF0cml4KCk7XG5cbiAgICAvLyAvLyBzY2FsZS4uXG4gICAgLy8gdmFyIHJhdGlvID0gdGhpcy50ZXh0dXJlU2l6ZS5oZWlnaHQgLyB0aGlzLnRleHR1cmVTaXplLndpZHRoO1xuXG4gICAgLy8gbS50cmFuc2xhdGUoZmlsdGVyQXJlYS54IC8gdGhpcy50ZXh0dXJlU2l6ZS53aWR0aCwgZmlsdGVyQXJlYS55IC8gdGhpcy50ZXh0dXJlU2l6ZS5oZWlnaHQpO1xuXG5cbiAgICAvLyBtLnNjYWxlKDEgLCByYXRpbyk7XG5cblxuICAgIC8vIHZhciB0cmFuc2Zvcm0gPSB3dC5jbG9uZSgpO1xuXG4gICAgLy8gdmFyIHRyYW5zbGF0ZVNjYWxlWCA9ICh0aGlzLnRleHR1cmVTaXplLndpZHRoIC8gNjIwKTtcbiAgICAvLyB2YXIgdHJhbnNsYXRlU2NhbGVZID0gKHRoaXMudGV4dHVyZVNpemUuaGVpZ2h0IC8gMzgwKTtcblxuICAgIC8vIHRyYW5zZm9ybS50eCAvPSA2MjAgKiB0cmFuc2xhdGVTY2FsZVg7XG4gICAgLy8gdHJhbnNmb3JtLnR5IC89IDYyMCAqIHRyYW5zbGF0ZVNjYWxlWDtcblxuICAgIC8vIHRyYW5zZm9ybS5pbnZlcnQoKTtcblxuICAgIC8vIHRyYW5zZm9ybS5hcHBlbmQobSk7XG5cbiAgICAvLyAvLyBhcHBseSBpbnZlcnNlIHNjYWxlLi5cbiAgICAvLyB0cmFuc2Zvcm0uc2NhbGUoMSAsIDEvcmF0aW8pO1xuXG4gICAgLy8gdHJhbnNmb3JtLnNjYWxlKCB0cmFuc2xhdGVTY2FsZVggLCB0cmFuc2xhdGVTY2FsZVkgKTtcblxuICAgIC8vIHJldHVybiB0cmFuc2Zvcm07XG59O1xuXG4vKlxuICogQ29uc3RyYWlucyB0aGUgZmlsdGVyIGFyZWEgdG8gdGhlIHRleHR1cmUgc2l6ZVxuICogQHBhcmFtIGZpbHRlckFyZWEge1JlY3RhbmdsZX0gVGhlIGZpbHRlciBhcmVhIHdlIHdhbnQgdG8gY2FwXG4gKi9cbkZpbHRlck1hbmFnZXIucHJvdG90eXBlLmNhcEZpbHRlckFyZWEgPSBmdW5jdGlvbiAoZmlsdGVyQXJlYSlcbntcbiAgICBpZiAoZmlsdGVyQXJlYS54IDwgMClcbiAgICB7XG4gICAgICAgIGZpbHRlckFyZWEud2lkdGggKz0gZmlsdGVyQXJlYS54O1xuICAgICAgICBmaWx0ZXJBcmVhLnggPSAwO1xuICAgIH1cblxuICAgIGlmIChmaWx0ZXJBcmVhLnkgPCAwKVxuICAgIHtcbiAgICAgICAgZmlsdGVyQXJlYS5oZWlnaHQgKz0gZmlsdGVyQXJlYS55O1xuICAgICAgICBmaWx0ZXJBcmVhLnkgPSAwO1xuICAgIH1cblxuICAgIGlmICggZmlsdGVyQXJlYS54ICsgZmlsdGVyQXJlYS53aWR0aCA+IHRoaXMudGV4dHVyZVNpemUud2lkdGggKVxuICAgIHtcbiAgICAgICAgZmlsdGVyQXJlYS53aWR0aCA9IHRoaXMudGV4dHVyZVNpemUud2lkdGggLSBmaWx0ZXJBcmVhLng7XG4gICAgfVxuXG4gICAgaWYgKCBmaWx0ZXJBcmVhLnkgKyBmaWx0ZXJBcmVhLmhlaWdodCA+IHRoaXMudGV4dHVyZVNpemUuaGVpZ2h0IClcbiAgICB7XG4gICAgICAgIGZpbHRlckFyZWEuaGVpZ2h0ID0gdGhpcy50ZXh0dXJlU2l6ZS5oZWlnaHQgLSBmaWx0ZXJBcmVhLnk7XG4gICAgfVxufTtcblxuLypcbiAqIFJlc2l6ZXMgYWxsIHRoZSByZW5kZXIgdGFyZ2V0cyBpbiB0aGUgcG9vbFxuICogQHBhcmFtIHdpZHRoIHtudW1iZXJ9IHRoZSBuZXcgd2lkdGhcbiAqIEBwYXJhbSBoZWlnaHQge251bWJlcn0gdGhlIG5ldyBoZWlnaHRcbiAqL1xuRmlsdGVyTWFuYWdlci5wcm90b3R5cGUucmVzaXplID0gZnVuY3Rpb24gKCB3aWR0aCwgaGVpZ2h0IClcbntcbiAgICB0aGlzLnRleHR1cmVTaXplLndpZHRoID0gd2lkdGg7XG4gICAgdGhpcy50ZXh0dXJlU2l6ZS5oZWlnaHQgPSBoZWlnaHQ7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMudGV4dHVyZVBvb2wubGVuZ3RoOyBpKyspXG4gICAge1xuICAgICAgICB0aGlzLnRleHR1cmVQb29sW2ldLnJlc2l6ZSggd2lkdGgsIGhlaWdodCApO1xuICAgIH1cbn07XG5cbi8qKlxuICogRGVzdHJveXMgdGhlIGZpbHRlciBhbmQgcmVtb3ZlcyBpdCBmcm9tIHRoZSBmaWx0ZXIgc3RhY2suXG4gKlxuICovXG5GaWx0ZXJNYW5hZ2VyLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLnF1YWQuZGVzdHJveSgpO1xuICAgIFxuICAgIFdlYkdMTWFuYWdlci5wcm90b3R5cGUuZGVzdHJveS5jYWxsKHRoaXMpO1xuICAgIFxuICAgIHRoaXMuZmlsdGVyU3RhY2sgPSBudWxsO1xuICAgIHRoaXMub2Zmc2V0WSA9IDA7XG5cbiAgICAvLyBkZXN0cm95IHRleHR1cmVzXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLnRleHR1cmVQb29sLmxlbmd0aDsgaSsrKVxuICAgIHtcbiAgICAgICAgdGhpcy50ZXh0dXJlUG9vbFtpXS5kZXN0cm95KCk7XG4gICAgfVxuXG4gICAgdGhpcy50ZXh0dXJlUG9vbCA9IG51bGw7XG59O1xuIiwidmFyIFdlYkdMTWFuYWdlciA9IHJlcXVpcmUoJy4vV2ViR0xNYW5hZ2VyJyksXG4gICAgQWxwaGFNYXNrRmlsdGVyID0gcmVxdWlyZSgnLi4vZmlsdGVycy9TcHJpdGVNYXNrRmlsdGVyJyk7XG5cbi8qKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLldlYkdMUmVuZGVyZXJ9IFRoZSByZW5kZXJlciB0aGlzIG1hbmFnZXIgd29ya3MgZm9yLlxuICovXG5mdW5jdGlvbiBNYXNrTWFuYWdlcihyZW5kZXJlcilcbntcbiAgICBXZWJHTE1hbmFnZXIuY2FsbCh0aGlzLCByZW5kZXJlcik7XG5cbiAgICB0aGlzLnN0ZW5jaWxTdGFjayA9IFtdO1xuICAgIHRoaXMucmV2ZXJzZSA9IHRydWU7XG4gICAgdGhpcy5jb3VudCA9IDA7XG5cbiAgICB0aGlzLmFscGhhTWFza1Bvb2wgPSBbXTtcbn1cblxuTWFza01hbmFnZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShXZWJHTE1hbmFnZXIucHJvdG90eXBlKTtcbk1hc2tNYW5hZ2VyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IE1hc2tNYW5hZ2VyO1xubW9kdWxlLmV4cG9ydHMgPSBNYXNrTWFuYWdlcjtcblxuLyoqXG4gKiBBcHBsaWVzIHRoZSBNYXNrIGFuZCBhZGRzIGl0IHRvIHRoZSBjdXJyZW50IGZpbHRlciBzdGFjay5cbiAqXG4gKiBAcGFyYW0gZ3JhcGhpY3Mge1BJWEkuR3JhcGhpY3N9XG4gKiBAcGFyYW0gd2ViR0xEYXRhIHthbnlbXX1cbiAqL1xuTWFza01hbmFnZXIucHJvdG90eXBlLnB1c2hNYXNrID0gZnVuY3Rpb24gKHRhcmdldCwgbWFza0RhdGEpXG57XG4gICAgaWYgKG1hc2tEYXRhLnRleHR1cmUpXG4gICAge1xuICAgICAgICB0aGlzLnB1c2hTcHJpdGVNYXNrKHRhcmdldCwgbWFza0RhdGEpO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICB0aGlzLnB1c2hTdGVuY2lsTWFzayh0YXJnZXQsIG1hc2tEYXRhKTtcbiAgICB9XG5cbn07XG5cbi8qKlxuICogUmVtb3ZlcyB0aGUgbGFzdCBtYXNrIGZyb20gdGhlIG1hc2sgc3RhY2sgYW5kIGRvZXNuJ3QgcmV0dXJuIGl0LlxuICpcbiAqIEBwYXJhbSB0YXJnZXQge1BJWEkuUmVuZGVyVGFyZ2V0fVxuICogQHBhcmFtIG1hc2tEYXRhIHthbnlbXX1cbiAqL1xuTWFza01hbmFnZXIucHJvdG90eXBlLnBvcE1hc2sgPSBmdW5jdGlvbiAodGFyZ2V0LCBtYXNrRGF0YSlcbntcbiAgICBpZiAobWFza0RhdGEudGV4dHVyZSlcbiAgICB7XG4gICAgICAgIHRoaXMucG9wU3ByaXRlTWFzayh0YXJnZXQsIG1hc2tEYXRhKTtcbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgdGhpcy5wb3BTdGVuY2lsTWFzayh0YXJnZXQsIG1hc2tEYXRhKTtcbiAgICB9XG59O1xuXG4vKipcbiAqIEFwcGxpZXMgdGhlIE1hc2sgYW5kIGFkZHMgaXQgdG8gdGhlIGN1cnJlbnQgZmlsdGVyIHN0YWNrLlxuICpcbiAqIEBwYXJhbSB0YXJnZXQge1BJWEkuUmVuZGVyVGFyZ2V0fVxuICogQHBhcmFtIG1hc2tEYXRhIHthbnlbXX1cbiAqL1xuTWFza01hbmFnZXIucHJvdG90eXBlLnB1c2hTcHJpdGVNYXNrID0gZnVuY3Rpb24gKHRhcmdldCwgbWFza0RhdGEpXG57XG4gICAgdmFyIGFscGhhTWFza0ZpbHRlciA9IHRoaXMuYWxwaGFNYXNrUG9vbC5wb3AoKTtcblxuICAgIGlmICghYWxwaGFNYXNrRmlsdGVyKVxuICAgIHtcbiAgICAgICAgYWxwaGFNYXNrRmlsdGVyID0gW25ldyBBbHBoYU1hc2tGaWx0ZXIobWFza0RhdGEpXTtcbiAgICB9XG5cbiAgICBhbHBoYU1hc2tGaWx0ZXJbMF0ubWFza1Nwcml0ZSA9IG1hc2tEYXRhO1xuICAgIHRoaXMucmVuZGVyZXIuZmlsdGVyTWFuYWdlci5wdXNoRmlsdGVyKHRhcmdldCwgYWxwaGFNYXNrRmlsdGVyKTtcbn07XG5cbi8qKlxuICogUmVtb3ZlcyB0aGUgbGFzdCBmaWx0ZXIgZnJvbSB0aGUgZmlsdGVyIHN0YWNrIGFuZCBkb2Vzbid0IHJldHVybiBpdC5cbiAqXG4gKi9cbk1hc2tNYW5hZ2VyLnByb3RvdHlwZS5wb3BTcHJpdGVNYXNrID0gZnVuY3Rpb24gKClcbntcbiAgICB2YXIgZmlsdGVycyA9IHRoaXMucmVuZGVyZXIuZmlsdGVyTWFuYWdlci5wb3BGaWx0ZXIoKTtcblxuICAgIHRoaXMuYWxwaGFNYXNrUG9vbC5wdXNoKGZpbHRlcnMpO1xufTtcblxuXG4vKipcbiAqIEFwcGxpZXMgdGhlIE1hc2sgYW5kIGFkZHMgaXQgdG8gdGhlIGN1cnJlbnQgZmlsdGVyIHN0YWNrLlxuICpcbiAqIEBwYXJhbSB0YXJnZXQge1BJWEkuUmVuZGVyVGFyZ2V0fVxuICogQHBhcmFtIG1hc2tEYXRhIHthbnlbXX1cbiAqL1xuTWFza01hbmFnZXIucHJvdG90eXBlLnB1c2hTdGVuY2lsTWFzayA9IGZ1bmN0aW9uICh0YXJnZXQsIG1hc2tEYXRhKVxue1xuICAgIHRoaXMucmVuZGVyZXIuc3RlbmNpbE1hbmFnZXIucHVzaE1hc2sobWFza0RhdGEpO1xufTtcblxuLyoqXG4gKiBSZW1vdmVzIHRoZSBsYXN0IGZpbHRlciBmcm9tIHRoZSBmaWx0ZXIgc3RhY2sgYW5kIGRvZXNuJ3QgcmV0dXJuIGl0LlxuICpcbiAqIEBwYXJhbSB0YXJnZXQge1BJWEkuUmVuZGVyVGFyZ2V0fVxuICogQHBhcmFtIG1hc2tEYXRhIHthbnlbXX1cbiAqL1xuTWFza01hbmFnZXIucHJvdG90eXBlLnBvcFN0ZW5jaWxNYXNrID0gZnVuY3Rpb24gKHRhcmdldCwgbWFza0RhdGEpXG57XG4gICAgdGhpcy5yZW5kZXJlci5zdGVuY2lsTWFuYWdlci5wb3BNYXNrKG1hc2tEYXRhKTtcbn07XG5cbiIsInZhciBXZWJHTE1hbmFnZXIgPSByZXF1aXJlKCcuL1dlYkdMTWFuYWdlcicpLFxuICAgIFRleHR1cmVTaGFkZXIgPSByZXF1aXJlKCcuLi9zaGFkZXJzL1RleHR1cmVTaGFkZXInKSxcbiAgICBDb21wbGV4UHJpbWl0aXZlU2hhZGVyID0gcmVxdWlyZSgnLi4vc2hhZGVycy9Db21wbGV4UHJpbWl0aXZlU2hhZGVyJyksXG4gICAgUHJpbWl0aXZlU2hhZGVyID0gcmVxdWlyZSgnLi4vc2hhZGVycy9QcmltaXRpdmVTaGFkZXInKSxcbiAgICB1dGlscyA9IHJlcXVpcmUoJy4uLy4uLy4uL3V0aWxzJyk7XG5cbi8qKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQGV4dGVuZHMgUElYSS5XZWJHTE1hbmFnZXJcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5XZWJHTFJlbmRlcmVyfSBUaGUgcmVuZGVyZXIgdGhpcyBtYW5hZ2VyIHdvcmtzIGZvci5cbiAqL1xuZnVuY3Rpb24gU2hhZGVyTWFuYWdlcihyZW5kZXJlcilcbntcbiAgICBXZWJHTE1hbmFnZXIuY2FsbCh0aGlzLCByZW5kZXJlcik7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy5tYXhBdHRpYnMgPSAxMDtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge2FueVtdfVxuICAgICAqL1xuICAgIHRoaXMuYXR0cmliU3RhdGUgPSBbXTtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge2FueVtdfVxuICAgICAqL1xuICAgIHRoaXMudGVtcEF0dHJpYlN0YXRlID0gW107XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMubWF4QXR0aWJzOyBpKyspXG4gICAge1xuICAgICAgICB0aGlzLmF0dHJpYlN0YXRlW2ldID0gZmFsc2U7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7YW55W119XG4gICAgICovXG4gICAgdGhpcy5zdGFjayA9IFtdO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fY3VycmVudElkID0gLTE7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlNoYWRlcn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuY3VycmVudFNoYWRlciA9IG51bGw7XG5cbi8vICAgIHRoaXMuaW5pdFBsdWdpbnMoKTtcbn1cblxuU2hhZGVyTWFuYWdlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFdlYkdMTWFuYWdlci5wcm90b3R5cGUpO1xuU2hhZGVyTWFuYWdlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBTaGFkZXJNYW5hZ2VyO1xudXRpbHMucGx1Z2luVGFyZ2V0Lm1peGluKFNoYWRlck1hbmFnZXIpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IFNoYWRlck1hbmFnZXI7XG5cbi8qKlxuICogQ2FsbGVkIHdoZW4gdGhlcmUgaXMgYSBXZWJHTCBjb250ZXh0IGNoYW5nZS5cbiAqXG4gKi9cblNoYWRlck1hbmFnZXIucHJvdG90eXBlLm9uQ29udGV4dENoYW5nZSA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy5pbml0UGx1Z2lucygpO1xuXG4gICAgdmFyIGdsID0gdGhpcy5yZW5kZXJlci5nbDtcblxuICAgIC8vIGdldCB0aGUgbWF4aW11bSBudW1iZXIgb2YgYXR0cmlidXRlIGNvcnJlY3RseSBhcyB0aGlzIHRlbmRzIHRvIHZhcnlcbiAgICB0aGlzLm1heEF0dGlicyA9IGdsLmdldFBhcmFtZXRlcihnbC5NQVhfVkVSVEVYX0FUVFJJQlMpO1xuXG4gICAgdGhpcy5hdHRyaWJTdGF0ZSA9IFtdO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLm1heEF0dGliczsgaSsrKVxuICAgIHtcbiAgICAgICAgdGhpcy5hdHRyaWJTdGF0ZVtpXSA9IGZhbHNlO1xuICAgIH1cblxuICAgIC8vIFRPRE8gLSBXaHkgYXJlIHRoZXNlIG5vdCBwbHVnaW5zPyBXZSBjYW4ndCBkZWNvdXBsZSBwcmltaXRpdmVzIHVubGVzcyB0aGV5IGFyZS4uLi5cbiAgICB0aGlzLmRlZmF1bHRTaGFkZXIgPSBuZXcgVGV4dHVyZVNoYWRlcih0aGlzKTtcbiAgICB0aGlzLnByaW1pdGl2ZVNoYWRlciA9IG5ldyBQcmltaXRpdmVTaGFkZXIodGhpcyk7XG4gICAgdGhpcy5jb21wbGV4UHJpbWl0aXZlU2hhZGVyID0gbmV3IENvbXBsZXhQcmltaXRpdmVTaGFkZXIodGhpcyk7XG59O1xuXG4vKipcbiAqIFRha2VzIHRoZSBhdHRyaWJ1dGVzIGdpdmVuIGluIHBhcmFtZXRlcnMgYW5kIHVwbG9hZHMgdGhlbS5cbiAqXG4gKiBAcGFyYW0gYXR0cmlicyB7YW55W119IGF0dHJpYnNcbiAqL1xuU2hhZGVyTWFuYWdlci5wcm90b3R5cGUuc2V0QXR0cmlicyA9IGZ1bmN0aW9uIChhdHRyaWJzKVxue1xuICAgIC8vIHJlc2V0IHRlbXAgc3RhdGVcbiAgICB2YXIgaTtcblxuICAgIGZvciAoaSA9IDA7IGkgPCB0aGlzLnRlbXBBdHRyaWJTdGF0ZS5sZW5ndGg7IGkrKylcbiAgICB7XG4gICAgICAgIHRoaXMudGVtcEF0dHJpYlN0YXRlW2ldID0gZmFsc2U7XG4gICAgfVxuXG4gICAgLy8gc2V0IHRoZSBuZXcgYXR0cmlic1xuICAgIGZvciAodmFyIGEgaW4gYXR0cmlicylcbiAgICB7XG4gICAgICAgIHRoaXMudGVtcEF0dHJpYlN0YXRlW2F0dHJpYnNbYV1dID0gdHJ1ZTtcbiAgICB9XG5cbiAgICB2YXIgZ2wgPSB0aGlzLnJlbmRlcmVyLmdsO1xuXG4gICAgZm9yIChpID0gMDsgaSA8IHRoaXMuYXR0cmliU3RhdGUubGVuZ3RoOyBpKyspXG4gICAge1xuICAgICAgICBpZiAodGhpcy5hdHRyaWJTdGF0ZVtpXSAhPT0gdGhpcy50ZW1wQXR0cmliU3RhdGVbaV0pXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuYXR0cmliU3RhdGVbaV0gPSB0aGlzLnRlbXBBdHRyaWJTdGF0ZVtpXTtcblxuICAgICAgICAgICAgaWYgKHRoaXMuYXR0cmliU3RhdGVbaV0pXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgZ2wuZW5hYmxlVmVydGV4QXR0cmliQXJyYXkoaSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgZ2wuZGlzYWJsZVZlcnRleEF0dHJpYkFycmF5KGkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxufTtcblxuLyoqXG4gKiBTZXRzIHRoZSBjdXJyZW50IHNoYWRlci5cbiAqXG4gKiBAcGFyYW0gc2hhZGVyIHtQSVhJLlNoYWRlcn0gdGhlIHNoYWRlciB0byB1cGxvYWRcbiAqL1xuU2hhZGVyTWFuYWdlci5wcm90b3R5cGUuc2V0U2hhZGVyID0gZnVuY3Rpb24gKHNoYWRlcilcbntcbiAgICByZXR1cm47XG4gICAgaWYgKHRoaXMuX2N1cnJlbnRJZCA9PT0gc2hhZGVyLnVpZClcbiAgICB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICB0aGlzLl9jdXJyZW50SWQgPSBzaGFkZXIudWlkO1xuXG4gICAgdGhpcy5jdXJyZW50U2hhZGVyID0gc2hhZGVyO1xuXG4gICAgdGhpcy5yZW5kZXJlci5nbC51c2VQcm9ncmFtKHNoYWRlci5wcm9ncmFtKTtcbiAgICB0aGlzLnNldEF0dHJpYnMoc2hhZGVyLmF0dHJpYnV0ZXMpO1xuXG4gICAgcmV0dXJuIHRydWU7XG59O1xuXG4vKipcbiAqIERlc3Ryb3lzIHRoaXMgb2JqZWN0LlxuICpcbiAqL1xuU2hhZGVyTWFuYWdlci5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy5wcmltaXRpdmVTaGFkZXIuZGVzdHJveSgpO1xuICAgIHRoaXMuY29tcGxleFByaW1pdGl2ZVNoYWRlci5kZXN0cm95KCk7XG4gICAgV2ViR0xNYW5hZ2VyLnByb3RvdHlwZS5kZXN0cm95LmNhbGwodGhpcyk7XG5cbiAgICB0aGlzLmRlc3Ryb3lQbHVnaW5zKCk7XG5cbiAgICB0aGlzLmF0dHJpYlN0YXRlID0gbnVsbDtcblxuICAgIHRoaXMudGVtcEF0dHJpYlN0YXRlID0gbnVsbDtcbn07XG4iLCJ2YXIgV2ViR0xNYW5hZ2VyID0gcmVxdWlyZSgnLi9XZWJHTE1hbmFnZXInKSxcbiAgICB1dGlscyA9IHJlcXVpcmUoJy4uLy4uLy4uL3V0aWxzJyk7XG5cbi8qKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLldlYkdMUmVuZGVyZXJ9IFRoZSByZW5kZXJlciB0aGlzIG1hbmFnZXIgd29ya3MgZm9yLlxuICovXG5mdW5jdGlvbiBXZWJHTE1hc2tNYW5hZ2VyKHJlbmRlcmVyKVxue1xuICAgIFdlYkdMTWFuYWdlci5jYWxsKHRoaXMsIHJlbmRlcmVyKTtcbiAgICB0aGlzLnN0ZW5jaWxNYXNrU3RhY2sgPSBudWxsO1xufVxuXG5XZWJHTE1hc2tNYW5hZ2VyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoV2ViR0xNYW5hZ2VyLnByb3RvdHlwZSk7XG5XZWJHTE1hc2tNYW5hZ2VyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFdlYkdMTWFza01hbmFnZXI7XG5tb2R1bGUuZXhwb3J0cyA9IFdlYkdMTWFza01hbmFnZXI7XG5cbi8qKlxuICogQ2hhbmdlcyB0aGUgbWFzayBzdGFjayB0aGF0IGlzIHVzZWQgYnkgdGhpcyBtYW5hZ2VyLlxuICpcbiAqIEBwYXJhbSBzdGVuY2lsTWFza1N0YWNrIHtQSVhJLlN0ZW5jaWxNYXNrU3RhY2t9IFRoZSBtYXNrIHN0YWNrXG4gKi9cbldlYkdMTWFza01hbmFnZXIucHJvdG90eXBlLnNldE1hc2tTdGFjayA9IGZ1bmN0aW9uICggc3RlbmNpbE1hc2tTdGFjayApXG57XG4gICAgdGhpcy5zdGVuY2lsTWFza1N0YWNrID0gc3RlbmNpbE1hc2tTdGFjaztcblxuICAgIHZhciBnbCA9IHRoaXMucmVuZGVyZXIuZ2w7XG5cbiAgICBpZiAoc3RlbmNpbE1hc2tTdGFjay5zdGVuY2lsU3RhY2subGVuZ3RoID09PSAwKVxuICAgIHtcbiAgICAgICAgZ2wuZGlzYWJsZShnbC5TVEVOQ0lMX1RFU1QpO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICBnbC5lbmFibGUoZ2wuU1RFTkNJTF9URVNUKTtcbiAgICB9XG59O1xuXG4vKipcbiAqIEFwcGxpZXMgdGhlIE1hc2sgYW5kIGFkZHMgaXQgdG8gdGhlIGN1cnJlbnQgZmlsdGVyIHN0YWNrLiBAYWx2aW5cbiAqXG4gKiBAcGFyYW0gZ3JhcGhpY3Mge1BJWEkuR3JhcGhpY3N9XG4gKiBAcGFyYW0gd2ViR0xEYXRhIHthbnlbXX1cbiAqL1xuV2ViR0xNYXNrTWFuYWdlci5wcm90b3R5cGUucHVzaFN0ZW5jaWwgPSBmdW5jdGlvbiAoZ3JhcGhpY3MsIHdlYkdMRGF0YSlcbntcbiAgICB0aGlzLnJlbmRlcmVyLl9hY3RpdmVSZW5kZXJUYXJnZXQuYXR0YWNoU3RlbmNpbEJ1ZmZlcigpO1xuXG4gICAgdmFyIGdsID0gdGhpcy5yZW5kZXJlci5nbCxcbiAgICAgICAgc21zID0gdGhpcy5zdGVuY2lsTWFza1N0YWNrO1xuXG4gICAgdGhpcy5iaW5kR3JhcGhpY3MoZ3JhcGhpY3MsIHdlYkdMRGF0YSk7XG5cbiAgICBpZiAoc21zLnN0ZW5jaWxTdGFjay5sZW5ndGggPT09IDApXG4gICAge1xuICAgICAgICBnbC5lbmFibGUoZ2wuU1RFTkNJTF9URVNUKTtcbiAgICAgICAgZ2wuY2xlYXIoZ2wuU1RFTkNJTF9CVUZGRVJfQklUKTtcbiAgICAgICAgc21zLnJldmVyc2UgPSB0cnVlO1xuICAgICAgICBzbXMuY291bnQgPSAwO1xuICAgIH1cblxuICAgIHNtcy5zdGVuY2lsU3RhY2sucHVzaCh3ZWJHTERhdGEpO1xuXG4gICAgdmFyIGxldmVsID0gc21zLmNvdW50O1xuXG4gICAgZ2wuY29sb3JNYXNrKGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlKTtcblxuICAgIGdsLnN0ZW5jaWxGdW5jKGdsLkFMV0FZUywwLDB4RkYpO1xuICAgIGdsLnN0ZW5jaWxPcChnbC5LRUVQLGdsLktFRVAsZ2wuSU5WRVJUKTtcblxuICAgIC8vIGRyYXcgdGhlIHRyaWFuZ2xlIHN0cmlwIVxuXG4gICAgaWYgKHdlYkdMRGF0YS5tb2RlID09PSAxKVxuICAgIHtcbiAgICAgICAgZ2wuZHJhd0VsZW1lbnRzKGdsLlRSSUFOR0xFX0ZBTiwgIHdlYkdMRGF0YS5pbmRpY2VzLmxlbmd0aCAtIDQsIGdsLlVOU0lHTkVEX1NIT1JULCAwICk7XG5cbiAgICAgICAgaWYgKHNtcy5yZXZlcnNlKVxuICAgICAgICB7XG4gICAgICAgICAgICBnbC5zdGVuY2lsRnVuYyhnbC5FUVVBTCwgMHhGRiAtIGxldmVsLCAweEZGKTtcbiAgICAgICAgICAgIGdsLnN0ZW5jaWxPcChnbC5LRUVQLGdsLktFRVAsZ2wuREVDUik7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgICBnbC5zdGVuY2lsRnVuYyhnbC5FUVVBTCxsZXZlbCwgMHhGRik7XG4gICAgICAgICAgICBnbC5zdGVuY2lsT3AoZ2wuS0VFUCxnbC5LRUVQLGdsLklOQ1IpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gZHJhdyBhIHF1YWQgdG8gaW5jcmVtZW50Li5cbiAgICAgICAgZ2wuZHJhd0VsZW1lbnRzKGdsLlRSSUFOR0xFX0ZBTiwgNCwgZ2wuVU5TSUdORURfU0hPUlQsICggd2ViR0xEYXRhLmluZGljZXMubGVuZ3RoIC0gNCApICogMiApO1xuXG4gICAgICAgIGlmIChzbXMucmV2ZXJzZSlcbiAgICAgICAge1xuICAgICAgICAgICAgZ2wuc3RlbmNpbEZ1bmMoZ2wuRVFVQUwsMHhGRi0obGV2ZWwrMSksIDB4RkYpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2VcbiAgICAgICAge1xuICAgICAgICAgICAgZ2wuc3RlbmNpbEZ1bmMoZ2wuRVFVQUwsbGV2ZWwrMSwgMHhGRik7XG4gICAgICAgIH1cblxuICAgICAgICBzbXMucmV2ZXJzZSA9ICFzbXMucmV2ZXJzZTtcbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgaWYgKCFzbXMucmV2ZXJzZSlcbiAgICAgICAge1xuICAgICAgICAgICAgZ2wuc3RlbmNpbEZ1bmMoZ2wuRVFVQUwsIDB4RkYgLSBsZXZlbCwgMHhGRik7XG4gICAgICAgICAgICBnbC5zdGVuY2lsT3AoZ2wuS0VFUCxnbC5LRUVQLGdsLkRFQ1IpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2VcbiAgICAgICAge1xuICAgICAgICAgICAgZ2wuc3RlbmNpbEZ1bmMoZ2wuRVFVQUwsbGV2ZWwsIDB4RkYpO1xuICAgICAgICAgICAgZ2wuc3RlbmNpbE9wKGdsLktFRVAsZ2wuS0VFUCxnbC5JTkNSKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGdsLmRyYXdFbGVtZW50cyhnbC5UUklBTkdMRV9TVFJJUCwgIHdlYkdMRGF0YS5pbmRpY2VzLmxlbmd0aCwgZ2wuVU5TSUdORURfU0hPUlQsIDAgKTtcblxuICAgICAgICBpZiAoIXNtcy5yZXZlcnNlKVxuICAgICAgICB7XG4gICAgICAgICAgICBnbC5zdGVuY2lsRnVuYyhnbC5FUVVBTCwweEZGLShsZXZlbCsxKSwgMHhGRik7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgICBnbC5zdGVuY2lsRnVuYyhnbC5FUVVBTCxsZXZlbCsxLCAweEZGKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGdsLmNvbG9yTWFzayh0cnVlLCB0cnVlLCB0cnVlLCB0cnVlKTtcbiAgICBnbC5zdGVuY2lsT3AoZ2wuS0VFUCxnbC5LRUVQLGdsLktFRVApO1xuXG4gICAgc21zLmNvdW50Kys7XG59O1xuXG4vKipcbiAqIFRPRE8gdGhpcyBkb2VzIG5vdCBiZWxvbmcgaGVyZSFcbiAqXG4gKiBAcGFyYW0gZ3JhcGhpY3Mge1BJWEkuR3JhcGhpY3N9XG4gKiBAcGFyYW0gd2ViR0xEYXRhIHthbnlbXX1cbiAqL1xuV2ViR0xNYXNrTWFuYWdlci5wcm90b3R5cGUuYmluZEdyYXBoaWNzID0gZnVuY3Rpb24gKGdyYXBoaWNzLCB3ZWJHTERhdGEpXG57XG4gICAgLy9pZiAodGhpcy5fY3VycmVudEdyYXBoaWNzID09PSBncmFwaGljcylyZXR1cm47XG4gICAgdmFyIGdsID0gdGhpcy5yZW5kZXJlci5nbDtcblxuICAgICAvLyBiaW5kIHRoZSBncmFwaGljcyBvYmplY3QuLlxuICAgIHZhciBzaGFkZXIgPSB0aGlzLnJlbmRlcmVyLnBsdWdpbnMuZ3JhcGhpY3MucHJpbWl0aXZlU2hhZGVyO1xuXG4gICAgaWYgKHdlYkdMRGF0YS5tb2RlID09PSAxKVxuICAgIHtcbiAgICAgICAgLypcbiAgICAgICAgc2hhZGVyID0gdGhpcy5yZW5kZXJlci5zaGFkZXJNYW5hZ2VyLmNvbXBsZXhQcmltaXRpdmVTaGFkZXI7XG5cbiAgICAgICAgdGhpcy5yZW5kZXJlci5zaGFkZXJNYW5hZ2VyLnNldFNoYWRlcihzaGFkZXIpO1xuXG4gICAgICAgIGdsLnVuaWZvcm1NYXRyaXgzZnYoc2hhZGVyLnVuaWZvcm1zLnRyYW5zbGF0aW9uTWF0cml4Ll9sb2NhdGlvbiwgZmFsc2UsIGdyYXBoaWNzLndvcmxkVHJhbnNmb3JtLnRvQXJyYXkodHJ1ZSkpO1xuXG4gICAgICAgIGdsLnVuaWZvcm1NYXRyaXgzZnYoc2hhZGVyLnVuaWZvcm1zLnByb2plY3Rpb25NYXRyaXguX2xvY2F0aW9uLCBmYWxzZSwgdGhpcy5yZW5kZXJlci5jdXJyZW50UmVuZGVyVGFyZ2V0LnByb2plY3Rpb25NYXRyaXgudG9BcnJheSh0cnVlKSk7XG5cbiAgICAgICAgZ2wudW5pZm9ybTNmdihzaGFkZXIudW5pZm9ybXMudGludC5fbG9jYXRpb24sIHV0aWxzLmhleDJyZ2IoZ3JhcGhpY3MudGludCkpO1xuXG4gICAgICAgIGdsLnVuaWZvcm0zZnYoc2hhZGVyLnVuaWZvcm1zLmNvbG9yLl9sb2NhdGlvbiwgd2ViR0xEYXRhLmNvbG9yKTtcblxuICAgICAgICBnbC51bmlmb3JtMWYoc2hhZGVyLnVuaWZvcm1zLmFscGhhLl9sb2NhdGlvbiwgZ3JhcGhpY3Mud29ybGRBbHBoYSk7XG5cbiAgICAgICAgZ2wuYmluZEJ1ZmZlcihnbC5BUlJBWV9CVUZGRVIsIHdlYkdMRGF0YS5idWZmZXIpO1xuXG4gICAgICAgIGdsLnZlcnRleEF0dHJpYlBvaW50ZXIoc2hhZGVyLmF0dHJpYnV0ZXMuYVZlcnRleFBvc2l0aW9uLCAyLCBnbC5GTE9BVCwgZmFsc2UsIDQgKiAyLCAwKTtcblxuICAgICAgICAvLyBub3cgZG8gdGhlIHJlc3QuLlxuICAgICAgICAvLyBzZXQgdGhlIGluZGV4IGJ1ZmZlciFcbiAgICAgICAgZ2wuYmluZEJ1ZmZlcihnbC5FTEVNRU5UX0FSUkFZX0JVRkZFUiwgd2ViR0xEYXRhLmluZGV4QnVmZmVyKTtcbiAgICAqL1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICAvL3RoaXMucmVuZGVyZXIuc2hhZGVyTWFuYWdlci5hY3RpdmF0ZVByaW1pdGl2ZVNoYWRlcigpO1xuLy8gICAgICAgIHNoYWRlciA9IHRoaXMucmVuZGVyZXIuc2hhZGVyTWFuYWdlci5wcmltaXRpdmVTaGFkZXI7XG4gICAgICAgXG4gICAgICAgIHRoaXMucmVuZGVyZXIuYmluZFNoYWRlcihzaGFkZXIpXG5cbiAgICAgICAgc2hhZGVyLnVuaWZvcm1zLnRyYW5zbGF0aW9uTWF0cml4ID0gZ3JhcGhpY3Mud29ybGRUcmFuc2Zvcm0udG9BcnJheSh0cnVlKTtcbiAgICAgICAgc2hhZGVyLnVuaWZvcm1zLnRpbnQgPSB1dGlscy5oZXgycmdiKGdyYXBoaWNzLnRpbnQpO1xuICAgICAgICBzaGFkZXIudW5pZm9ybXMuYWxwaGEgPSBncmFwaGljcy53b3JsZEFscGhhO1xuXG5cbiAgICAgICAgZ2wuYmluZEJ1ZmZlcihnbC5BUlJBWV9CVUZGRVIsIHdlYkdMRGF0YS5idWZmZXIpO1xuXG5cbiAgICAgICAgc2hhZGVyLmF0dHJpYnV0ZXMuYVZlcnRleFBvc2l0aW9uLnBvaW50ZXIoZ2wuRkxPQVQsIGZhbHNlLCA0ICogNiwgMCk7XG4gICAgICAgIHNoYWRlci5hdHRyaWJ1dGVzLmFDb2xvci5wb2ludGVyKGdsLkZMT0FULCBmYWxzZSwgNCAqIDYsIDIgKiA0KTtcblxuICAgICAgICBnbC5lbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShzaGFkZXIuYXR0cmlidXRlcy5hVmVydGV4UG9zaXRpb24ubG9jYXRpb24pO1xuICAgICAgICBnbC5lbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShzaGFkZXIuYXR0cmlidXRlcy5hQ29sb3IubG9jYXRpb24pO1xuXG4gICAgICAgIC8vIHNldCB0aGUgaW5kZXggYnVmZmVyIVxuICAgICAgICBnbC5iaW5kQnVmZmVyKGdsLkVMRU1FTlRfQVJSQVlfQlVGRkVSLCB3ZWJHTERhdGEuaW5kZXhCdWZmZXIpO1xuLy8gICAgICAgIGdsLmRyYXdFbGVtZW50cyhnbC5UUklBTkdMRV9TVFJJUCwgIHdlYkdMRGF0YS5pbmRpY2VzLmxlbmd0aCwgZ2wuVU5TSUdORURfU0hPUlQsIDAgKTtcblxuXG4gICAgICAvKiAgdGhpcy5yZW5kZXJlci5zaGFkZXJNYW5hZ2VyLnNldFNoYWRlcihzaGFkZXIpO1xuXG4gICAgICAgIGdsLnVuaWZvcm1NYXRyaXgzZnYoc2hhZGVyLnVuaWZvcm1zLnRyYW5zbGF0aW9uTWF0cml4Ll9sb2NhdGlvbiwgZmFsc2UsIGdyYXBoaWNzLndvcmxkVHJhbnNmb3JtLnRvQXJyYXkodHJ1ZSkpO1xuXG4gICAgICAgIGdsLnVuaWZvcm1NYXRyaXgzZnYoc2hhZGVyLnVuaWZvcm1zLnByb2plY3Rpb25NYXRyaXguX2xvY2F0aW9uLCBmYWxzZSwgdGhpcy5yZW5kZXJlci5jdXJyZW50UmVuZGVyVGFyZ2V0LnByb2plY3Rpb25NYXRyaXgudG9BcnJheSh0cnVlKSk7XG5cbiAgICAgICAgZ2wudW5pZm9ybTNmdihzaGFkZXIudW5pZm9ybXMudGludC5fbG9jYXRpb24sIHV0aWxzLmhleDJyZ2IoZ3JhcGhpY3MudGludCkpO1xuXG4gICAgICAgIGdsLnVuaWZvcm0xZihzaGFkZXIudW5pZm9ybXMuYWxwaGEuX2xvY2F0aW9uLCBncmFwaGljcy53b3JsZEFscGhhKTtcblxuICAgICAgICBnbC5iaW5kQnVmZmVyKGdsLkFSUkFZX0JVRkZFUiwgd2ViR0xEYXRhLmJ1ZmZlcik7XG5cbiAgICAgICAgZ2wudmVydGV4QXR0cmliUG9pbnRlcihzaGFkZXIuYXR0cmlidXRlcy5hVmVydGV4UG9zaXRpb24sIDIsIGdsLkZMT0FULCBmYWxzZSwgNCAqIDYsIDApO1xuICAgICAgICBnbC52ZXJ0ZXhBdHRyaWJQb2ludGVyKHNoYWRlci5hdHRyaWJ1dGVzLmFDb2xvciwgNCwgZ2wuRkxPQVQsIGZhbHNlLDQgKiA2LCAyICogNCk7XG5cbiAgICAgICAgLy8gc2V0IHRoZSBpbmRleCBidWZmZXIhXG4gICAgICAgIGdsLmJpbmRCdWZmZXIoZ2wuRUxFTUVOVF9BUlJBWV9CVUZGRVIsIHdlYkdMRGF0YS5pbmRleEJ1ZmZlcik7Ki9cbiAgICB9XG59O1xuXG4vKipcbiAqIFRPRE8gQGFsdmluXG4gKiBAcGFyYW0gZ3JhcGhpY3Mge1BJWEkuR3JhcGhpY3N9XG4gKiBAcGFyYW0gd2ViR0xEYXRhIHthbnlbXX1cbiAqL1xuV2ViR0xNYXNrTWFuYWdlci5wcm90b3R5cGUucG9wU3RlbmNpbCA9IGZ1bmN0aW9uIChncmFwaGljcywgd2ViR0xEYXRhKVxue1xuICAgIHZhciBnbCA9IHRoaXMucmVuZGVyZXIuZ2wsXG4gICAgICAgIHNtcyA9IHRoaXMuc3RlbmNpbE1hc2tTdGFjaztcblxuICAgIHNtcy5zdGVuY2lsU3RhY2sucG9wKCk7XG5cbiAgICBzbXMuY291bnQtLTtcblxuICAgIGlmIChzbXMuc3RlbmNpbFN0YWNrLmxlbmd0aCA9PT0gMClcbiAgICB7XG4gICAgICAgIC8vIHRoZSBzdGFjayBpcyBlbXB0eSFcbiAgICAgICAgZ2wuZGlzYWJsZShnbC5TVEVOQ0lMX1RFU1QpO1xuXG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG5cbiAgICAgICAgdmFyIGxldmVsID0gc21zLmNvdW50O1xuXG4gICAgICAgIHRoaXMuYmluZEdyYXBoaWNzKGdyYXBoaWNzLCB3ZWJHTERhdGEpO1xuXG4gICAgICAgIGdsLmNvbG9yTWFzayhmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSk7XG5cbiAgICAgICAgaWYgKHdlYkdMRGF0YS5tb2RlID09PSAxKVxuICAgICAgICB7XG4gICAgICAgICAgICBzbXMucmV2ZXJzZSA9ICFzbXMucmV2ZXJzZTtcblxuICAgICAgICAgICAgaWYgKHNtcy5yZXZlcnNlKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGdsLnN0ZW5jaWxGdW5jKGdsLkVRVUFMLCAweEZGIC0gKGxldmVsKzEpLCAweEZGKTtcbiAgICAgICAgICAgICAgICBnbC5zdGVuY2lsT3AoZ2wuS0VFUCxnbC5LRUVQLGdsLklOQ1IpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGdsLnN0ZW5jaWxGdW5jKGdsLkVRVUFMLGxldmVsKzEsIDB4RkYpO1xuICAgICAgICAgICAgICAgIGdsLnN0ZW5jaWxPcChnbC5LRUVQLGdsLktFRVAsZ2wuREVDUik7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIGRyYXcgYSBxdWFkIHRvIGluY3JlbWVudC4uXG4gICAgICAgICAgICBnbC5kcmF3RWxlbWVudHMoZ2wuVFJJQU5HTEVfRkFOLCA0LCBnbC5VTlNJR05FRF9TSE9SVCwgKCB3ZWJHTERhdGEuaW5kaWNlcy5sZW5ndGggLSA0ICkgKiAyICk7XG5cbiAgICAgICAgICAgIGdsLnN0ZW5jaWxGdW5jKGdsLkFMV0FZUywwLDB4RkYpO1xuICAgICAgICAgICAgZ2wuc3RlbmNpbE9wKGdsLktFRVAsZ2wuS0VFUCxnbC5JTlZFUlQpO1xuXG4gICAgICAgICAgICAvLyBkcmF3IHRoZSB0cmlhbmdsZSBzdHJpcCFcbiAgICAgICAgICAgIGdsLmRyYXdFbGVtZW50cyhnbC5UUklBTkdMRV9GQU4sICB3ZWJHTERhdGEuaW5kaWNlcy5sZW5ndGggLSA0LCBnbC5VTlNJR05FRF9TSE9SVCwgMCApO1xuXG4gICAgICAgICAgICB0aGlzLnJlbmRlcmVyLmRyYXdDb3VudCArPSAyO1xuXG4gICAgICAgICAgICBpZiAoIXNtcy5yZXZlcnNlKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGdsLnN0ZW5jaWxGdW5jKGdsLkVRVUFMLDB4RkYtKGxldmVsKSwgMHhGRik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgZ2wuc3RlbmNpbEZ1bmMoZ2wuRVFVQUwsbGV2ZWwsIDB4RkYpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgLy8gIGNvbnNvbGUubG9nKFwiPDw+PlwiKVxuICAgICAgICAgICAgaWYgKCFzbXMucmV2ZXJzZSlcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBnbC5zdGVuY2lsRnVuYyhnbC5FUVVBTCwgMHhGRiAtIChsZXZlbCsxKSwgMHhGRik7XG4gICAgICAgICAgICAgICAgZ2wuc3RlbmNpbE9wKGdsLktFRVAsZ2wuS0VFUCxnbC5JTkNSKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBnbC5zdGVuY2lsRnVuYyhnbC5FUVVBTCxsZXZlbCsxLCAweEZGKTtcbiAgICAgICAgICAgICAgICBnbC5zdGVuY2lsT3AoZ2wuS0VFUCxnbC5LRUVQLGdsLkRFQ1IpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBnbC5kcmF3RWxlbWVudHMoZ2wuVFJJQU5HTEVfU1RSSVAsICB3ZWJHTERhdGEuaW5kaWNlcy5sZW5ndGgsIGdsLlVOU0lHTkVEX1NIT1JULCAwICk7XG5cbiAgICAgICAgICAgIHRoaXMucmVuZGVyZXIuZHJhd0NvdW50Kys7XG5cbiAgICAgICAgICAgIGlmICghc21zLnJldmVyc2UpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgZ2wuc3RlbmNpbEZ1bmMoZ2wuRVFVQUwsMHhGRi0obGV2ZWwpLCAweEZGKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBnbC5zdGVuY2lsRnVuYyhnbC5FUVVBTCxsZXZlbCwgMHhGRik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBnbC5jb2xvck1hc2sodHJ1ZSwgdHJ1ZSwgdHJ1ZSwgdHJ1ZSk7XG4gICAgICAgIGdsLnN0ZW5jaWxPcChnbC5LRUVQLGdsLktFRVAsZ2wuS0VFUCk7XG5cblxuICAgIH1cbn07XG5cbi8qKlxuICogRGVzdHJveXMgdGhlIG1hc2sgc3RhY2suXG4gKlxuICovXG5XZWJHTE1hc2tNYW5hZ2VyLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKClcbntcbiAgICBXZWJHTE1hbmFnZXIucHJvdG90eXBlLmRlc3Ryb3kuY2FsbCh0aGlzKTtcblxuICAgIHRoaXMuc3RlbmNpbE1hc2tTdGFjay5zdGVuY2lsU3RhY2sgPSBudWxsO1xufTtcblxuLyoqXG4gKiBBcHBsaWVzIHRoZSBNYXNrIGFuZCBhZGRzIGl0IHRvIHRoZSBjdXJyZW50IGZpbHRlciBzdGFjay5cbiAqXG4gKiBAcGFyYW0gbWFza0RhdGEge2FueVtdfSBUaGUgbWFzayBkYXRhIHN0cnVjdHVyZSB0byB1c2VcbiAqL1xuV2ViR0xNYXNrTWFuYWdlci5wcm90b3R5cGUucHVzaE1hc2sgPSBmdW5jdGlvbiAobWFza0RhdGEpXG57XG4gICAgdGhpcy5yZW5kZXJlci5zZXRPYmplY3RSZW5kZXJlcih0aGlzLnJlbmRlcmVyLnBsdWdpbnMuZ3JhcGhpY3MpO1xuICAgIFxuICAgIC8vVE9ETyBGSVhcbiAgICBpZiAobWFza0RhdGEuZGlydHkpXG4gICAge1xuICAgICAgICB0aGlzLnJlbmRlcmVyLnBsdWdpbnMuZ3JhcGhpY3MudXBkYXRlR3JhcGhpY3MobWFza0RhdGEsIHRoaXMucmVuZGVyZXIuZ2wpO1xuICAgIH1cblxuICAgIGlmICghbWFza0RhdGEuX3dlYkdMW3RoaXMucmVuZGVyZXIuZ2wuaWRdLmRhdGEubGVuZ3RoKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMucHVzaFN0ZW5jaWwobWFza0RhdGEsIG1hc2tEYXRhLl93ZWJHTFt0aGlzLnJlbmRlcmVyLmdsLmlkXS5kYXRhWzBdKTtcbn07XG5cbi8qKlxuICogUmVtb3ZlcyB0aGUgbGFzdCBmaWx0ZXIgZnJvbSB0aGUgZmlsdGVyIHN0YWNrIGFuZCBkb2Vzbid0IHJldHVybiBpdC5cbiAqXG4gKiBAcGFyYW0gbWFza0RhdGEge2FueVtdfVxuICovXG5XZWJHTE1hc2tNYW5hZ2VyLnByb3RvdHlwZS5wb3BNYXNrID0gZnVuY3Rpb24gKG1hc2tEYXRhKVxue1xuICAgIHRoaXMucmVuZGVyZXIuc2V0T2JqZWN0UmVuZGVyZXIodGhpcy5yZW5kZXJlci5wbHVnaW5zLmdyYXBoaWNzKTtcblxuICAgIHRoaXMucG9wU3RlbmNpbChtYXNrRGF0YSwgbWFza0RhdGEuX3dlYkdMW3RoaXMucmVuZGVyZXIuZ2wuaWRdLmRhdGFbMF0pO1xufTtcblxuIiwiLyoqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcn0gVGhlIHJlbmRlcmVyIHRoaXMgbWFuYWdlciB3b3JrcyBmb3IuXG4gKi9cbmZ1bmN0aW9uIFdlYkdMTWFuYWdlcihyZW5kZXJlcilcbntcbiAgICAvKipcbiAgICAgKiBUaGUgcmVuZGVyZXIgdGhpcyBtYW5hZ2VyIHdvcmtzIGZvci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuV2ViR0xSZW5kZXJlcn1cbiAgICAgKi9cbiAgICB0aGlzLnJlbmRlcmVyID0gcmVuZGVyZXI7XG5cbiAgICB0aGlzLnJlbmRlcmVyLm9uKCdjb250ZXh0JywgdGhpcy5vbkNvbnRleHRDaGFuZ2UsIHRoaXMpO1xufVxuXG5XZWJHTE1hbmFnZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gV2ViR0xNYW5hZ2VyO1xubW9kdWxlLmV4cG9ydHMgPSBXZWJHTE1hbmFnZXI7XG5cbi8qKlxuICogR2VuZXJpYyBtZXRob2QgY2FsbGVkIHdoZW4gdGhlcmUgaXMgYSBXZWJHTCBjb250ZXh0IGNoYW5nZS5cbiAqXG4gKi9cbldlYkdMTWFuYWdlci5wcm90b3R5cGUub25Db250ZXh0Q2hhbmdlID0gZnVuY3Rpb24gKClcbntcblx0Ly8gZG8gc29tZSBjb2RlcyBpbml0IVxufTtcblxuLyoqXG4gKiBHZW5lcmljIGRlc3Ryb3kgbWV0aG9kcyB0byBiZSBvdmVycmlkZGVuIGJ5IHRoZSBzdWJjbGFzc1xuICpcbiAqL1xuV2ViR0xNYW5hZ2VyLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLnJlbmRlcmVyLm9mZignY29udGV4dCcsIHRoaXMub25Db250ZXh0Q2hhbmdlLCB0aGlzKTtcblxuICAgIHRoaXMucmVuZGVyZXIgPSBudWxsO1xufTtcbiIsInZhciBTaGFkZXIgPSByZXF1aXJlKCcuL1NoYWRlcicpO1xuXG4vKipcbiAqIFRoaXMgc2hhZGVyIGlzIHVzZWQgdG8gZHJhdyBjb21wbGV4IHByaW1pdGl2ZSBzaGFwZXMgZm9yIHtAbGluayBQSVhJLkdyYXBoaWNzfS5cbiAqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAZXh0ZW5kcyBQSVhJLlNoYWRlclxuICogQHBhcmFtIHNoYWRlck1hbmFnZXIge1BJWEkuU2hhZGVyTWFuYWdlcn0gVGhlIHdlYmdsIHNoYWRlciBtYW5hZ2VyIHRoaXMgc2hhZGVyIHdvcmtzIGZvci5cbiAqL1xuZnVuY3Rpb24gQ29tcGxleFByaW1pdGl2ZVNoYWRlcihzaGFkZXJNYW5hZ2VyKVxue1xuICAgIFNoYWRlci5jYWxsKHRoaXMsXG4gICAgICAgIHNoYWRlck1hbmFnZXIsXG4gICAgICAgIC8vIHZlcnRleCBzaGFkZXJcbiAgICAgICAgW1xuICAgICAgICAgICAgJ2F0dHJpYnV0ZSB2ZWMyIGFWZXJ0ZXhQb3NpdGlvbjsnLFxuXG4gICAgICAgICAgICAndW5pZm9ybSBtYXQzIHRyYW5zbGF0aW9uTWF0cml4OycsXG4gICAgICAgICAgICAndW5pZm9ybSBtYXQzIHByb2plY3Rpb25NYXRyaXg7JyxcblxuICAgICAgICAgICAgJ3VuaWZvcm0gdmVjMyB0aW50OycsXG4gICAgICAgICAgICAndW5pZm9ybSBmbG9hdCBhbHBoYTsnLFxuICAgICAgICAgICAgJ3VuaWZvcm0gdmVjMyBjb2xvcjsnLFxuXG4gICAgICAgICAgICAndmFyeWluZyB2ZWM0IHZDb2xvcjsnLFxuXG4gICAgICAgICAgICAndm9pZCBtYWluKHZvaWQpeycsXG4gICAgICAgICAgICAnICAgZ2xfUG9zaXRpb24gPSB2ZWM0KChwcm9qZWN0aW9uTWF0cml4ICogdHJhbnNsYXRpb25NYXRyaXggKiB2ZWMzKGFWZXJ0ZXhQb3NpdGlvbiwgMS4wKSkueHksIDAuMCwgMS4wKTsnLFxuICAgICAgICAgICAgJyAgIHZDb2xvciA9IHZlYzQoY29sb3IgKiBhbHBoYSAqIHRpbnQsIGFscGhhKTsnLC8vXCIgKiB2ZWM0KHRpbnQgKiBhbHBoYSwgYWxwaGEpOycsXG4gICAgICAgICAgICAnfSdcbiAgICAgICAgXS5qb2luKCdcXG4nKSxcbiAgICAgICAgLy8gZnJhZ21lbnQgc2hhZGVyXG4gICAgICAgIFtcbiAgICAgICAgICAgICdwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDsnLFxuXG4gICAgICAgICAgICAndmFyeWluZyB2ZWM0IHZDb2xvcjsnLFxuXG4gICAgICAgICAgICAndm9pZCBtYWluKHZvaWQpeycsXG4gICAgICAgICAgICAnICAgZ2xfRnJhZ0NvbG9yID0gdkNvbG9yOycsXG4gICAgICAgICAgICAnfSdcbiAgICAgICAgXS5qb2luKCdcXG4nKSxcbiAgICAgICAgLy8gY3VzdG9tIHVuaWZvcm1zXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRpbnQ6ICAgeyB0eXBlOiAnM2YnLCB2YWx1ZTogWzAsIDAsIDBdIH0sXG4gICAgICAgICAgICBhbHBoYTogIHsgdHlwZTogJzFmJywgdmFsdWU6IDAgfSxcbiAgICAgICAgICAgIGNvbG9yOiAgeyB0eXBlOiAnM2YnLCB2YWx1ZTogWzAsMCwwXSB9LFxuICAgICAgICAgICAgdHJhbnNsYXRpb25NYXRyaXg6IHsgdHlwZTogJ21hdDMnLCB2YWx1ZTogbmV3IEZsb2F0MzJBcnJheSg5KSB9LFxuICAgICAgICAgICAgcHJvamVjdGlvbk1hdHJpeDogeyB0eXBlOiAnbWF0MycsIHZhbHVlOiBuZXcgRmxvYXQzMkFycmF5KDkpIH1cbiAgICAgICAgfSxcbiAgICAgICAgLy8gYXR0cmlidXRlc1xuICAgICAgICB7XG4gICAgICAgICAgICBhVmVydGV4UG9zaXRpb246MFxuICAgICAgICB9XG4gICAgKTtcbn1cblxuQ29tcGxleFByaW1pdGl2ZVNoYWRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFNoYWRlci5wcm90b3R5cGUpO1xuQ29tcGxleFByaW1pdGl2ZVNoYWRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBDb21wbGV4UHJpbWl0aXZlU2hhZGVyO1xubW9kdWxlLmV4cG9ydHMgPSBDb21wbGV4UHJpbWl0aXZlU2hhZGVyO1xuIiwidmFyIFNoYWRlciA9IHJlcXVpcmUoJy4vU2hhZGVyJyk7XG5cbi8qKlxuICogVGhpcyBzaGFkZXIgaXMgdXNlZCB0byBkcmF3IHNpbXBsZSBwcmltaXRpdmUgc2hhcGVzIGZvciB7QGxpbmsgUElYSS5HcmFwaGljc30uXG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQGV4dGVuZHMgUElYSS5TaGFkZXJcbiAqIEBwYXJhbSBzaGFkZXJNYW5hZ2VyIHtTaGFkZXJNYW5hZ2VyfSBUaGUgd2ViZ2wgc2hhZGVyIG1hbmFnZXIgdGhpcyBzaGFkZXIgd29ya3MgZm9yLlxuICovXG5mdW5jdGlvbiBQcmltaXRpdmVTaGFkZXIoc2hhZGVyTWFuYWdlcilcbntcbiAgICBTaGFkZXIuY2FsbCh0aGlzLFxuICAgICAgICBzaGFkZXJNYW5hZ2VyLFxuICAgICAgICAvLyB2ZXJ0ZXggc2hhZGVyXG4gICAgICAgIFtcbiAgICAgICAgICAgICdhdHRyaWJ1dGUgdmVjMiBhVmVydGV4UG9zaXRpb247JyxcbiAgICAgICAgICAgICdhdHRyaWJ1dGUgdmVjNCBhQ29sb3I7JyxcblxuICAgICAgICAgICAgJ3VuaWZvcm0gbWF0MyB0cmFuc2xhdGlvbk1hdHJpeDsnLFxuICAgICAgICAgICAgJ3VuaWZvcm0gbWF0MyBwcm9qZWN0aW9uTWF0cml4OycsXG5cbiAgICAgICAgICAgICd1bmlmb3JtIGZsb2F0IGFscGhhOycsXG4gICAgICAgICAgICAndW5pZm9ybSBmbG9hdCBmbGlwWTsnLFxuICAgICAgICAgICAgJ3VuaWZvcm0gdmVjMyB0aW50OycsXG5cbiAgICAgICAgICAgICd2YXJ5aW5nIHZlYzQgdkNvbG9yOycsXG5cbiAgICAgICAgICAgICd2b2lkIG1haW4odm9pZCl7JyxcbiAgICAgICAgICAgICcgICBnbF9Qb3NpdGlvbiA9IHZlYzQoKHByb2plY3Rpb25NYXRyaXggKiB0cmFuc2xhdGlvbk1hdHJpeCAqIHZlYzMoYVZlcnRleFBvc2l0aW9uLCAxLjApKS54eSwgMC4wLCAxLjApOycsXG4gICAgICAgICAgICAnICAgdkNvbG9yID0gYUNvbG9yICogdmVjNCh0aW50ICogYWxwaGEsIGFscGhhKTsnLFxuICAgICAgICAgICAgJ30nXG4gICAgICAgIF0uam9pbignXFxuJyksXG4gICAgICAgIC8vIGZyYWdtZW50IHNoYWRlclxuICAgICAgICBbXG4gICAgICAgICAgICAncHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7JyxcblxuICAgICAgICAgICAgJ3ZhcnlpbmcgdmVjNCB2Q29sb3I7JyxcblxuICAgICAgICAgICAgJ3ZvaWQgbWFpbih2b2lkKXsnLFxuICAgICAgICAgICAgJyAgIGdsX0ZyYWdDb2xvciA9IHZDb2xvcjsnLFxuICAgICAgICAgICAgJ30nXG4gICAgICAgIF0uam9pbignXFxuJyksXG4gICAgICAgIC8vIGN1c3RvbSB1bmlmb3Jtc1xuICAgICAgICB7XG4gICAgICAgICAgICB0aW50OiAgIHsgdHlwZTogJzNmJywgdmFsdWU6IFswLCAwLCAwXSB9LFxuICAgICAgICAgICAgYWxwaGE6ICB7IHR5cGU6ICcxZicsIHZhbHVlOiAwIH0sXG4gICAgICAgICAgICB0cmFuc2xhdGlvbk1hdHJpeDogeyB0eXBlOiAnbWF0MycsIHZhbHVlOiBuZXcgRmxvYXQzMkFycmF5KDkpIH0sXG4gICAgICAgICAgICBwcm9qZWN0aW9uTWF0cml4OiB7IHR5cGU6ICdtYXQzJywgdmFsdWU6IG5ldyBGbG9hdDMyQXJyYXkoOSkgfVxuICAgICAgICB9LFxuICAgICAgICAvLyBjdXN0b20gYXR0cmlidXRlc1xuICAgICAgICB7XG4gICAgICAgICAgICBhVmVydGV4UG9zaXRpb246MCxcbiAgICAgICAgICAgIGFDb2xvcjowXG4gICAgICAgIH1cbiAgICApO1xufVxuXG5QcmltaXRpdmVTaGFkZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShTaGFkZXIucHJvdG90eXBlKTtcblByaW1pdGl2ZVNoYWRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBQcmltaXRpdmVTaGFkZXI7XG5tb2R1bGUuZXhwb3J0cyA9IFByaW1pdGl2ZVNoYWRlcjtcbiIsIi8qZ2xvYmFsIGNvbnNvbGUgKi9cbnZhciB1dGlscyA9IHJlcXVpcmUoJy4uLy4uLy4uL3V0aWxzJyk7XG5cbi8qKlxuICogQmFzZSBzaGFkZXIgY2xhc3MgZm9yIFBJWEkgbWFuYWdlZCBzaGFkZXJzLlxuICpcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqIEBwYXJhbSBzaGFkZXJNYW5hZ2VyIHtQSVhJLlNoYWRlck1hbmFnZXJ9IFRoZSB3ZWJnbCBzaGFkZXIgbWFuYWdlciB0aGlzIHNoYWRlciB3b3JrcyBmb3IuXG4gKiBAcGFyYW0gW3ZlcnRleFNyY10ge3N0cmluZ30gVGhlIHNvdXJjZSBvZiB0aGUgdmVydGV4IHNoYWRlci5cbiAqIEBwYXJhbSBbZnJhZ21lbnRTcmNdIHtzdHJpbmd9IFRoZSBzb3VyY2Ugb2YgdGhlIGZyYWdtZW50IHNoYWRlci5cbiAqIEBwYXJhbSBbdW5pZm9ybXNdIHtvYmplY3R9IFVuaWZvcm1zIGZvciB0aGlzIHNoYWRlci5cbiAqIEBwYXJhbSBbYXR0cmlidXRlc10ge29iamVjdH0gQXR0cmlidXRlcyBmb3IgdGhpcyBzaGFkZXIuXG4gKi9cbmZ1bmN0aW9uIFNoYWRlcihzaGFkZXJNYW5hZ2VyLCB2ZXJ0ZXhTcmMsIGZyYWdtZW50U3JjLCB1bmlmb3JtcywgYXR0cmlidXRlcylcbntcbiAgICBpZiAoIXZlcnRleFNyYyB8fCAhZnJhZ21lbnRTcmMpXG4gICAge1xuICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdQaXhpLmpzIEVycm9yLiBTaGFkZXIgcmVxdWlyZXMgdmVydGV4U3JjIGFuZCBmcmFnbWVudFNyYycpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEEgdW5pcXVlIGlkXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEByZWFkb25seVxuICAgICAqL1xuICAgIHRoaXMudWlkID0gdXRpbHMudWlkKCk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgY3VycmVudCBXZWJHTCBkcmF3aW5nIGNvbnRleHRcbiAgICAgKiBAbWVtYmVyIHtXZWJHTFJlbmRlcmluZ0NvbnRleHR9XG4gICAgICogQHJlYWRvbmx5XG4gICAgICovXG4gICAgdGhpcy5nbCA9IHNoYWRlck1hbmFnZXIucmVuZGVyZXIuZ2w7XG5cbiAgICAvL1RPRE8gbWF5YmUgd2Ugc2hvdWxkIHBhc3MgcmVuZGVyZXIgcmF0aGVyIHRoYW4gc2hhZGVyIG1hbmdlcj8/IGZvb2QgZm9yIHRob3VnaHQuLlxuICAgIHRoaXMuc2hhZGVyTWFuYWdlciA9IHNoYWRlck1hbmFnZXI7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgV2ViR0wgcHJvZ3JhbS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1dlYkdMUHJvZ3JhbX1cbiAgICAgKiBAcmVhZG9ubHlcbiAgICAgKi9cbiAgICB0aGlzLnByb2dyYW0gPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHVuaWZvcm1zIGFzIGFuIG9iamVjdFxuICAgICAqIEBtZW1iZXIge29iamVjdH1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMudW5pZm9ybXMgPSB1bmlmb3JtcyB8fCB7fTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBhdHRyaWJ1dGVzIGFzIGFuIG9iamVjdFxuICAgICAqIEBtZW1iZXIge29iamVjdH1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuYXR0cmlidXRlcyA9IGF0dHJpYnV0ZXMgfHwge307XG5cbiAgICAvKipcbiAgICAgKiBJbnRlcm5hbCB0ZXh0dXJlIGNvdW50ZXJcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLnRleHR1cmVDb3VudCA9IDE7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgdmVydGV4IHNoYWRlciBhcyBhbiBhcnJheSBvZiBzdHJpbmdzXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtzdHJpbmd9XG4gICAgICovXG4gICAgdGhpcy52ZXJ0ZXhTcmMgPSB2ZXJ0ZXhTcmM7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgZnJhZ21lbnQgc2hhZGVyIGFzIGFuIGFycmF5IG9mIHN0cmluZ3NcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge3N0cmluZ31cbiAgICAgKi9cbiAgICB0aGlzLmZyYWdtZW50U3JjID0gZnJhZ21lbnRTcmM7XG5cbiAgICB0aGlzLmluaXQoKTtcbn1cblxuU2hhZGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFNoYWRlcjtcbm1vZHVsZS5leHBvcnRzID0gU2hhZGVyO1xuXG4vKipcbiAqIENyZWF0ZXMgdGhlIHNoYWRlciBhbmQgdXNlcyBpdFxuICpcbiAqL1xuU2hhZGVyLnByb3RvdHlwZS5pbml0ID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLmNvbXBpbGUoKTtcblxuICAgIHRoaXMuZ2wudXNlUHJvZ3JhbSh0aGlzLnByb2dyYW0pO1xuXG4gICAgdGhpcy5jYWNoZVVuaWZvcm1Mb2NhdGlvbnMoT2JqZWN0LmtleXModGhpcy51bmlmb3JtcykpO1xuICAgIHRoaXMuY2FjaGVBdHRyaWJ1dGVMb2NhdGlvbnMoT2JqZWN0LmtleXModGhpcy5hdHRyaWJ1dGVzKSk7XG59O1xuXG4vKipcbiAqIENhY2hlcyB0aGUgbG9jYXRpb25zIG9mIHRoZSB1bmlmb3JtIGZvciByZXVzZS5cbiAqXG4gKiBAcGFyYW0ga2V5cyB7c3RyaW5nfSB0aGUgdW5pZm9ybXMgdG8gY2FjaGVcbiAqL1xuU2hhZGVyLnByb3RvdHlwZS5jYWNoZVVuaWZvcm1Mb2NhdGlvbnMgPSBmdW5jdGlvbiAoa2V5cylcbntcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyArK2kpXG4gICAge1xuICAgICAgICB0aGlzLnVuaWZvcm1zW2tleXNbaV1dLl9sb2NhdGlvbiA9IHRoaXMuZ2wuZ2V0VW5pZm9ybUxvY2F0aW9uKHRoaXMucHJvZ3JhbSwga2V5c1tpXSk7XG4gICAgfVxufTtcblxuLyoqXG4gKiBDYWNoZXMgdGhlIGxvY2F0aW9ucyBvZiB0aGUgYXR0cmlidXRlIGZvciByZXVzZS5cbiAqXG4gKiBAcGFyYW0ga2V5cyB7c3RyaW5nfSB0aGUgYXR0cmlidXRlcyB0byBjYWNoZVxuICovXG5TaGFkZXIucHJvdG90eXBlLmNhY2hlQXR0cmlidXRlTG9jYXRpb25zID0gZnVuY3Rpb24gKGtleXMpXG57XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgKytpKVxuICAgIHtcbiAgICAgICAgdGhpcy5hdHRyaWJ1dGVzW2tleXNbaV1dID0gdGhpcy5nbC5nZXRBdHRyaWJMb2NhdGlvbih0aGlzLnByb2dyYW0sIGtleXNbaV0pO1xuICAgIH1cblxuICAgIC8vIFRPRE86IENoZWNrIGlmIHRoaXMgaXMgbmVlZGVkIGFueW1vcmUuLi5cblxuICAgIC8vIEJlZ2luIHdvcnN0IGhhY2sgZXZhIC8vXG5cbiAgICAvLyBXSFk/Pz8gT05MWSBvbiBteSBjaHJvbWUgcGl4ZWwgdGhlIGxpbmUgYWJvdmUgcmV0dXJucyAtMSB3aGVuIHVzaW5nIGZpbHRlcnM/XG4gICAgLy8gbWF5YmUgaXRzIHNvbWV0aGluZyB0byBkbyB3aXRoIHRoZSBjdXJyZW50IHN0YXRlIG9mIHRoZSBnbCBjb250ZXh0LlxuICAgIC8vIEknbSBjb252aW5jZWQgdGhpcyBpcyBhIGJ1ZyBpbiB0aGUgY2hyb21lIGJyb3dzZXIgYXMgdGhlcmUgaXMgTk8gcmVhc29uIHdoeSB0aGlzIHNob3VsZCBiZSByZXR1cm5pbmcgLTEgZXNwZWNpYWxseSBhcyBpdCBvbmx5IG1hbmlmZXN0cyBvbiBteSBjaHJvbWUgcGl4ZWxcbiAgICAvLyBJZiB0aGVyZXMgYW55IHdlYkdMIHBlb3BsZSB0aGF0IGtub3cgd2h5IGNvdWxkIGhhcHBlbiBwbGVhc2UgaGVscCA6KVxuICAgIC8vIGlmICh0aGlzLmF0dHJpYnV0ZXMuYUNvbG9yID09PSAtMSl7XG4gICAgLy8gICAgIHRoaXMuYXR0cmlidXRlcy5hQ29sb3IgPSAyO1xuICAgIC8vIH1cblxuICAgIC8vIEVuZCB3b3JzdCBoYWNrIGV2YSAvL1xufTtcblxuLyoqXG4gKiBBdHRhY2hlcyB0aGUgc2hhZGVycyBhbmQgY3JlYXRlcyB0aGUgcHJvZ3JhbS5cbiAqXG4gKiBAcmV0dXJuIHtXZWJHTFByb2dyYW19XG4gKi9cblNoYWRlci5wcm90b3R5cGUuY29tcGlsZSA9IGZ1bmN0aW9uICgpXG57XG4gICAgdmFyIGdsID0gdGhpcy5nbDtcblxuICAgIHZhciBnbFZlcnRTaGFkZXIgPSB0aGlzLl9nbENvbXBpbGUoZ2wuVkVSVEVYX1NIQURFUiwgdGhpcy52ZXJ0ZXhTcmMpO1xuICAgIHZhciBnbEZyYWdTaGFkZXIgPSB0aGlzLl9nbENvbXBpbGUoZ2wuRlJBR01FTlRfU0hBREVSLCB0aGlzLmZyYWdtZW50U3JjKTtcblxuICAgIHZhciBwcm9ncmFtID0gZ2wuY3JlYXRlUHJvZ3JhbSgpO1xuXG4gICAgZ2wuYXR0YWNoU2hhZGVyKHByb2dyYW0sIGdsVmVydFNoYWRlcik7XG4gICAgZ2wuYXR0YWNoU2hhZGVyKHByb2dyYW0sIGdsRnJhZ1NoYWRlcik7XG4gICAgZ2wubGlua1Byb2dyYW0ocHJvZ3JhbSk7XG5cbiAgICAvLyBpZiBsaW5raW5nIGZhaWxzLCB0aGVuIGxvZyBhbmQgY2xlYW51cFxuICAgIGlmICghZ2wuZ2V0UHJvZ3JhbVBhcmFtZXRlcihwcm9ncmFtLCBnbC5MSU5LX1NUQVRVUykpXG4gICAge1xuICAgICAgICBjb25zb2xlLmVycm9yKCdQaXhpLmpzIEVycm9yOiBDb3VsZCBub3QgaW5pdGlhbGl6ZSBzaGFkZXIuJyk7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ2dsLlZBTElEQVRFX1NUQVRVUycsIGdsLmdldFByb2dyYW1QYXJhbWV0ZXIocHJvZ3JhbSwgZ2wuVkFMSURBVEVfU1RBVFVTKSk7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ2dsLmdldEVycm9yKCknLCBnbC5nZXRFcnJvcigpKTtcblxuICAgICAgICAvLyBpZiB0aGVyZSBpcyBhIHByb2dyYW0gaW5mbyBsb2csIGxvZyBpdFxuICAgICAgICBpZiAoZ2wuZ2V0UHJvZ3JhbUluZm9Mb2cocHJvZ3JhbSkgIT09ICcnKVxuICAgICAgICB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ1BpeGkuanMgV2FybmluZzogZ2wuZ2V0UHJvZ3JhbUluZm9Mb2coKScsIGdsLmdldFByb2dyYW1JbmZvTG9nKHByb2dyYW0pKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGdsLmRlbGV0ZVByb2dyYW0ocHJvZ3JhbSk7XG4gICAgICAgIHByb2dyYW0gPSBudWxsO1xuICAgIH1cblxuICAgIC8vIGNsZWFuIHVwIHNvbWUgc2hhZGVyc1xuICAgIGdsLmRlbGV0ZVNoYWRlcihnbFZlcnRTaGFkZXIpO1xuICAgIGdsLmRlbGV0ZVNoYWRlcihnbEZyYWdTaGFkZXIpO1xuXG4gICAgcmV0dXJuICh0aGlzLnByb2dyYW0gPSBwcm9ncmFtKTtcbn07XG5cbi8qKlxuKiBBZGRzIGEgbmV3IHVuaWZvcm1cbipcbiogQHBhcmFtIHVuaWZvcm0ge29iamVjdH0gdGhlIG5ldyB1bmlmb3JtIHRvIGF0dGFjaFxuKi9cblNoYWRlci5wcm90b3R5cGUuc3luY1VuaWZvcm0gPSBmdW5jdGlvbiAodW5pZm9ybSlcbntcbiAgICB2YXIgbG9jYXRpb24gPSB1bmlmb3JtLl9sb2NhdGlvbixcbiAgICAgICAgdmFsdWUgPSB1bmlmb3JtLnZhbHVlLFxuICAgICAgICBnbCA9IHRoaXMuZ2wsXG4gICAgICAgIGksIGlsO1xuXG4gICAgc3dpdGNoICh1bmlmb3JtLnR5cGUpXG4gICAge1xuICAgICAgICBjYXNlICdiJzpcbiAgICAgICAgY2FzZSAnYm9vbCc6XG4gICAgICAgIGNhc2UgJ2Jvb2xlYW4nOlxuICAgICAgICAgICAgZ2wudW5pZm9ybTFpKGxvY2F0aW9uLCB2YWx1ZSA/IDEgOiAwKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIC8vIHNpbmdsZSBpbnQgdmFsdWVcbiAgICAgICAgY2FzZSAnaSc6XG4gICAgICAgIGNhc2UgJzFpJzpcbiAgICAgICAgICAgIGdsLnVuaWZvcm0xaShsb2NhdGlvbiwgdmFsdWUpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLy8gc2luZ2xlIGZsb2F0IHZhbHVlXG4gICAgICAgIGNhc2UgJ2YnOlxuICAgICAgICBjYXNlICcxZic6XG4gICAgICAgICAgICBnbC51bmlmb3JtMWYobG9jYXRpb24sIHZhbHVlKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIC8vIEZsb2F0MzJBcnJheSgyKSBvciBKUyBBcnJyYXlcbiAgICAgICAgY2FzZSAnMmYnOlxuICAgICAgICAgICAgZ2wudW5pZm9ybTJmKGxvY2F0aW9uLCB2YWx1ZVswXSwgdmFsdWVbMV0pO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLy8gRmxvYXQzMkFycmF5KDMpIG9yIEpTIEFycnJheVxuICAgICAgICBjYXNlICczZic6XG4gICAgICAgICAgICBnbC51bmlmb3JtM2YobG9jYXRpb24sIHZhbHVlWzBdLCB2YWx1ZVsxXSwgdmFsdWVbMl0pO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLy8gRmxvYXQzMkFycmF5KDQpIG9yIEpTIEFycnJheVxuICAgICAgICBjYXNlICc0Zic6XG4gICAgICAgICAgICBnbC51bmlmb3JtNGYobG9jYXRpb24sIHZhbHVlWzBdLCB2YWx1ZVsxXSwgdmFsdWVbMl0sIHZhbHVlWzNdKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIC8vIGEgMkQgUG9pbnQgb2JqZWN0XG4gICAgICAgIGNhc2UgJ3YyJzpcbiAgICAgICAgICAgIGdsLnVuaWZvcm0yZihsb2NhdGlvbiwgdmFsdWUueCwgdmFsdWUueSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAvLyBhIDNEIFBvaW50IG9iamVjdFxuICAgICAgICBjYXNlICd2Myc6XG4gICAgICAgICAgICBnbC51bmlmb3JtM2YobG9jYXRpb24sIHZhbHVlLngsIHZhbHVlLnksIHZhbHVlLnopO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLy8gYSA0RCBQb2ludCBvYmplY3RcbiAgICAgICAgY2FzZSAndjQnOlxuICAgICAgICAgICAgZ2wudW5pZm9ybTRmKGxvY2F0aW9uLCB2YWx1ZS54LCB2YWx1ZS55LCB2YWx1ZS56LCB2YWx1ZS53KTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIC8vIEludDMyQXJyYXkgb3IgSlMgQXJyYXlcbiAgICAgICAgY2FzZSAnMWl2JzpcbiAgICAgICAgICAgIGdsLnVuaWZvcm0xaXYobG9jYXRpb24sIHZhbHVlKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIC8vIEludDMyQXJyYXkgb3IgSlMgQXJyYXlcbiAgICAgICAgY2FzZSAnMml2JzpcbiAgICAgICAgICAgIGdsLnVuaWZvcm0yaXYobG9jYXRpb24sIHZhbHVlKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIC8vIEludDMyQXJyYXkgb3IgSlMgQXJyYXlcbiAgICAgICAgY2FzZSAnM2l2JzpcbiAgICAgICAgICAgIGdsLnVuaWZvcm0zaXYobG9jYXRpb24sIHZhbHVlKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIC8vIEludDMyQXJyYXkgb3IgSlMgQXJyYXlcbiAgICAgICAgY2FzZSAnNGl2JzpcbiAgICAgICAgICAgIGdsLnVuaWZvcm00aXYobG9jYXRpb24sIHZhbHVlKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIC8vIEZsb2F0MzJBcnJheSBvciBKUyBBcnJheVxuICAgICAgICBjYXNlICcxZnYnOlxuICAgICAgICAgICAgZ2wudW5pZm9ybTFmdihsb2NhdGlvbiwgdmFsdWUpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLy8gRmxvYXQzMkFycmF5IG9yIEpTIEFycmF5XG4gICAgICAgIGNhc2UgJzJmdic6XG4gICAgICAgICAgICBnbC51bmlmb3JtMmZ2KGxvY2F0aW9uLCB2YWx1ZSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAvLyBGbG9hdDMyQXJyYXkgb3IgSlMgQXJyYXlcbiAgICAgICAgY2FzZSAnM2Z2JzpcbiAgICAgICAgICAgIGdsLnVuaWZvcm0zZnYobG9jYXRpb24sIHZhbHVlKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIC8vIEZsb2F0MzJBcnJheSBvciBKUyBBcnJheVxuICAgICAgICBjYXNlICc0ZnYnOlxuICAgICAgICAgICAgZ2wudW5pZm9ybTRmdihsb2NhdGlvbiwgdmFsdWUpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLy8gRmxvYXQzMkFycmF5IG9yIEpTIEFycmF5XG4gICAgICAgIGNhc2UgJ20yJzpcbiAgICAgICAgY2FzZSAnbWF0Mic6XG4gICAgICAgIGNhc2UgJ01hdHJpeDJmdic6XG4gICAgICAgICAgICBnbC51bmlmb3JtTWF0cml4MmZ2KGxvY2F0aW9uLCB1bmlmb3JtLnRyYW5zcG9zZSwgdmFsdWUpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLy8gRmxvYXQzMkFycmF5IG9yIEpTIEFycmF5XG4gICAgICAgIGNhc2UgJ20zJzpcbiAgICAgICAgY2FzZSAnbWF0Myc6XG4gICAgICAgIGNhc2UgJ01hdHJpeDNmdic6XG5cbiAgICAgICAgICAgIGdsLnVuaWZvcm1NYXRyaXgzZnYobG9jYXRpb24sIHVuaWZvcm0udHJhbnNwb3NlLCB2YWx1ZSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAvLyBGbG9hdDMyQXJyYXkgb3IgSlMgQXJyYXlcbiAgICAgICAgY2FzZSAnbTQnOlxuICAgICAgICBjYXNlICdtYXQ0JzpcbiAgICAgICAgY2FzZSAnTWF0cml4NGZ2JzpcbiAgICAgICAgICAgIGdsLnVuaWZvcm1NYXRyaXg0ZnYobG9jYXRpb24sIHVuaWZvcm0udHJhbnNwb3NlLCB2YWx1ZSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAvLyBhIENvbG9yIFZhbHVlXG4gICAgICAgIGNhc2UgJ2MnOlxuICAgICAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdmFsdWUgPSB1dGlscy5oZXgycmdiKHZhbHVlKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZ2wudW5pZm9ybTNmKGxvY2F0aW9uLCB2YWx1ZVswXSwgdmFsdWVbMV0sIHZhbHVlWzJdKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIC8vIGZsYXQgYXJyYXkgb2YgaW50ZWdlcnMgKEpTIG9yIHR5cGVkIGFycmF5KVxuICAgICAgICBjYXNlICdpdjEnOlxuICAgICAgICAgICAgZ2wudW5pZm9ybTFpdihsb2NhdGlvbiwgdmFsdWUpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLy8gZmxhdCBhcnJheSBvZiBpbnRlZ2VycyB3aXRoIDMgeCBOIHNpemUgKEpTIG9yIHR5cGVkIGFycmF5KVxuICAgICAgICBjYXNlICdpdic6XG4gICAgICAgICAgICBnbC51bmlmb3JtM2l2KGxvY2F0aW9uLCB2YWx1ZSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAvLyBmbGF0IGFycmF5IG9mIGZsb2F0cyAoSlMgb3IgdHlwZWQgYXJyYXkpXG4gICAgICAgIGNhc2UgJ2Z2MSc6XG4gICAgICAgICAgICBnbC51bmlmb3JtMWZ2KGxvY2F0aW9uLCB2YWx1ZSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAvLyBmbGF0IGFycmF5IG9mIGZsb2F0cyB3aXRoIDMgeCBOIHNpemUgKEpTIG9yIHR5cGVkIGFycmF5KVxuICAgICAgICBjYXNlICdmdic6XG4gICAgICAgICAgICBnbC51bmlmb3JtM2Z2KGxvY2F0aW9uLCB2YWx1ZSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAvLyBhcnJheSBvZiAyRCBQb2ludCBvYmplY3RzXG4gICAgICAgIGNhc2UgJ3Yydic6XG4gICAgICAgICAgICBpZiAoIXVuaWZvcm0uX2FycmF5KVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHVuaWZvcm0uX2FycmF5ID0gbmV3IEZsb2F0MzJBcnJheSgyICogdmFsdWUubGVuZ3RoKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZm9yIChpID0gMCwgaWwgPSB2YWx1ZS5sZW5ndGg7IGkgPCBpbDsgKytpKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHVuaWZvcm0uX2FycmF5W2kgKiAyXSAgICAgICA9IHZhbHVlW2ldLng7XG4gICAgICAgICAgICAgICAgdW5pZm9ybS5fYXJyYXlbaSAqIDIgKyAxXSAgID0gdmFsdWVbaV0ueTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZ2wudW5pZm9ybTJmdihsb2NhdGlvbiwgdW5pZm9ybS5fYXJyYXkpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLy8gYXJyYXkgb2YgM0QgUG9pbnQgb2JqZWN0c1xuICAgICAgICBjYXNlICd2M3YnOlxuICAgICAgICAgICAgaWYgKCF1bmlmb3JtLl9hcnJheSlcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB1bmlmb3JtLl9hcnJheSA9IG5ldyBGbG9hdDMyQXJyYXkoMyAqIHZhbHVlLmxlbmd0aCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGZvciAoaSA9IDAsIGlsID0gdmFsdWUubGVuZ3RoOyBpIDwgaWw7ICsraSlcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB1bmlmb3JtLl9hcnJheVtpICogM10gICAgICAgPSB2YWx1ZVtpXS54O1xuICAgICAgICAgICAgICAgIHVuaWZvcm0uX2FycmF5W2kgKiAzICsgMV0gICA9IHZhbHVlW2ldLnk7XG4gICAgICAgICAgICAgICAgdW5pZm9ybS5fYXJyYXlbaSAqIDMgKyAyXSAgID0gdmFsdWVbaV0uejtcblxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBnbC51bmlmb3JtM2Z2KGxvY2F0aW9uLCB1bmlmb3JtLl9hcnJheSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAvLyBhcnJheSBvZiA0RCBQb2ludCBvYmplY3RzXG4gICAgICAgIGNhc2UgJ3Y0dic6XG4gICAgICAgICAgICBpZiAoIXVuaWZvcm0uX2FycmF5KVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHVuaWZvcm0uX2FycmF5ID0gbmV3IEZsb2F0MzJBcnJheSg0ICogdmFsdWUubGVuZ3RoKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZm9yIChpID0gMCwgaWwgPSB2YWx1ZS5sZW5ndGg7IGkgPCBpbDsgKytpKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHVuaWZvcm0uX2FycmF5W2kgKiA0XSAgICAgICA9IHZhbHVlW2ldLng7XG4gICAgICAgICAgICAgICAgdW5pZm9ybS5fYXJyYXlbaSAqIDQgKyAxXSAgID0gdmFsdWVbaV0ueTtcbiAgICAgICAgICAgICAgICB1bmlmb3JtLl9hcnJheVtpICogNCArIDJdICAgPSB2YWx1ZVtpXS56O1xuICAgICAgICAgICAgICAgIHVuaWZvcm0uX2FycmF5W2kgKiA0ICsgM10gICA9IHZhbHVlW2ldLnc7XG5cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZ2wudW5pZm9ybTRmdihsb2NhdGlvbiwgdW5pZm9ybS5fYXJyYXkpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLy8gUElYSS5UZXh0dXJlXG4gICAgICAgIGNhc2UgJ3QnOlxuICAgICAgICBjYXNlICdzYW1wbGVyMkQnOlxuXG4gICAgICAgICAgICBpZiAoIXVuaWZvcm0udmFsdWUgfHwgIXVuaWZvcm0udmFsdWUuYmFzZVRleHR1cmUuaGFzTG9hZGVkKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBhY3RpdmF0ZSB0aGlzIHRleHR1cmVcbiAgICAgICAgICAgIGdsLmFjdGl2ZVRleHR1cmUoZ2xbJ1RFWFRVUkUnICsgdGhpcy50ZXh0dXJlQ291bnRdKTtcblxuICAgICAgICAgICAgdmFyIHRleHR1cmUgPSB1bmlmb3JtLnZhbHVlLmJhc2VUZXh0dXJlLl9nbFRleHR1cmVzW2dsLmlkXTtcblxuICAgICAgICAgICAgaWYgKCF0ZXh0dXJlKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHRoaXMuaW5pdFNhbXBsZXIyRCh1bmlmb3JtKTtcblxuICAgICAgICAgICAgICAgIC8vIHNldCB0aGUgdGV4dHVyIHRvIHRoZSBuZXdseSBjcmVhdGVkIG9uZS4uXG4gICAgICAgICAgICAgICAgdGV4dHVyZSA9IHVuaWZvcm0udmFsdWUuYmFzZVRleHR1cmUuX2dsVGV4dHVyZXNbZ2wuaWRdO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBiaW5kIHRoZSB0ZXh0dXJlXG4gICAgICAgICAgICBnbC5iaW5kVGV4dHVyZShnbC5URVhUVVJFXzJELCB0ZXh0dXJlKTtcblxuICAgICAgICAgICAgLy8gc2V0IHVuaWZvcm0gdG8gdGV4dHVyZSBpbmRleFxuICAgICAgICAgICAgZ2wudW5pZm9ybTFpKHVuaWZvcm0uX2xvY2F0aW9uLCB0aGlzLnRleHR1cmVDb3VudCk7XG5cbiAgICAgICAgICAgIC8vIGluY3JlbWVudCBuZXh0IHRleHR1cmUgaWRcbiAgICAgICAgICAgIHRoaXMudGV4dHVyZUNvdW50Kys7XG5cbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ1BpeGkuanMgU2hhZGVyIFdhcm5pbmc6IFVua25vd24gdW5pZm9ybSB0eXBlOiAnICsgdW5pZm9ybS50eXBlKTtcbiAgICB9XG59O1xuXG4vKipcbiAqIFVwZGF0ZXMgdGhlIHNoYWRlciB1bmlmb3JtIHZhbHVlcy5cbiAqXG4gKi9cblNoYWRlci5wcm90b3R5cGUuc3luY1VuaWZvcm1zID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLnRleHR1cmVDb3VudCA9IDE7XG5cbiAgICBmb3IgKHZhciBrZXkgaW4gdGhpcy51bmlmb3JtcylcbiAgICB7XG4gICAgICAgIHRoaXMuc3luY1VuaWZvcm0odGhpcy51bmlmb3Jtc1trZXldKTtcbiAgICB9XG59O1xuXG5cbi8qKlxuICogSW5pdGlhbGlzZXMgYSBTYW1wbGVyMkQgdW5pZm9ybSAod2hpY2ggbWF5IG9ubHkgYmUgYXZhaWxhYmxlIGxhdGVyIG9uIGFmdGVyIGluaXRVbmlmb3JtcyBvbmNlIHRoZSB0ZXh0dXJlIGhhcyBsb2FkZWQpXG4gKlxuICovXG5TaGFkZXIucHJvdG90eXBlLmluaXRTYW1wbGVyMkQgPSBmdW5jdGlvbiAodW5pZm9ybSlcbntcbiAgICB2YXIgZ2wgPSB0aGlzLmdsO1xuXG4gICAgdmFyIHRleHR1cmUgPSB1bmlmb3JtLnZhbHVlLmJhc2VUZXh0dXJlO1xuXG4gICAgaWYoIXRleHR1cmUuaGFzTG9hZGVkKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuXG5cbiAgICBpZiAodW5pZm9ybS50ZXh0dXJlRGF0YSlcbiAgICB7XG5cbiAgICAgICAgLy9UT0RPIG1vdmUgdGhpcy4uLlxuICAgICAgICB2YXIgZGF0YSA9IHVuaWZvcm0udGV4dHVyZURhdGE7XG5cbiAgICAgICAgdGV4dHVyZS5fZ2xUZXh0dXJlc1tnbC5pZF0gPSBnbC5jcmVhdGVUZXh0dXJlKCk7XG5cbiAgICAgICAgZ2wuYmluZFRleHR1cmUoZ2wuVEVYVFVSRV8yRCwgdGV4dHVyZS5fZ2xUZXh0dXJlc1tnbC5pZF0pO1xuXG4gICAgICAgIGdsLnBpeGVsU3RvcmVpKGdsLlVOUEFDS19QUkVNVUxUSVBMWV9BTFBIQV9XRUJHTCwgdGV4dHVyZS5wcmVtdWx0aXBsaWVkQWxwaGEpO1xuICAgICAgICAvLyBHTFRleHR1cmUgPSBtYWcgbGluZWFyLCBtaW4gbGluZWFyX21pcG1hcF9saW5lYXIsIHdyYXAgcmVwZWF0ICsgZ2wuZ2VuZXJhdGVNaXBtYXAoZ2wuVEVYVFVSRV8yRCk7XG4gICAgICAgIC8vIEdMVGV4dHVyZUxpbmVhciA9IG1hZy9taW4gbGluZWFyLCB3cmFwIGNsYW1wXG4gICAgICAgIC8vIEdMVGV4dHVyZU5lYXJlc3RSZXBlYXQgPSBtYWcvbWluIE5FQVJFU1QsIHdyYXAgcmVwZWF0XG4gICAgICAgIC8vIEdMVGV4dHVyZU5lYXJlc3QgPSBtYWcvbWluIG5lYXJlc3QsIHdyYXAgY2xhbXBcbiAgICAgICAgLy8gQXVkaW9UZXh0dXJlID0gd2hhdGV2ZXIgKyBsdW1pbmFuY2UgKyB3aWR0aCA1MTIsIGhlaWdodCAyLCBib3JkZXIgMFxuICAgICAgICAvLyBLZXlUZXh0dXJlID0gd2hhdGV2ZXIgKyBsdW1pbmFuY2UgKyB3aWR0aCAyNTYsIGhlaWdodCAyLCBib3JkZXIgMFxuXG4gICAgICAgIC8vICBtYWdGaWx0ZXIgY2FuIGJlOiBnbC5MSU5FQVIsIGdsLkxJTkVBUl9NSVBNQVBfTElORUFSIG9yIGdsLk5FQVJFU1RcbiAgICAgICAgLy8gIHdyYXBTL1QgY2FuIGJlOiBnbC5DTEFNUF9UT19FREdFIG9yIGdsLlJFUEVBVFxuXG4gICAgICAgIGdsLnRleEltYWdlMkQoZ2wuVEVYVFVSRV8yRCwgMCwgZGF0YS5sdW1pbmFuY2UgPyBnbC5MVU1JTkFOQ0UgOiBnbC5SR0JBLCBnbC5SR0JBLCBnbC5VTlNJR05FRF9CWVRFLCB0ZXh0dXJlLnNvdXJjZSk7XG5cbiAgICAgICAgZ2wudGV4UGFyYW1ldGVyaShnbC5URVhUVVJFXzJELCBnbC5URVhUVVJFX01BR19GSUxURVIsIGRhdGEubWFnRmlsdGVyID8gZGF0YS5tYWdGaWx0ZXIgOiBnbC5MSU5FQVIgKTtcbiAgICAgICAgZ2wudGV4UGFyYW1ldGVyaShnbC5URVhUVVJFXzJELCBnbC5URVhUVVJFX01JTl9GSUxURVIsIGRhdGEud3JhcFMgPyBkYXRhLndyYXBTIDogZ2wuQ0xBTVBfVE9fRURHRSApO1xuXG4gICAgICAgIGdsLnRleFBhcmFtZXRlcmkoZ2wuVEVYVFVSRV8yRCwgZ2wuVEVYVFVSRV9XUkFQX1QsIGRhdGEud3JhcFMgPyBkYXRhLndyYXBTIDogZ2wuQ0xBTVBfVE9fRURHRSk7XG4gICAgICAgIGdsLnRleFBhcmFtZXRlcmkoZ2wuVEVYVFVSRV8yRCwgZ2wuVEVYVFVSRV9XUkFQX1MsIGRhdGEud3JhcFQgPyBkYXRhLndyYXBUIDogZ2wuQ0xBTVBfVE9fRURHRSk7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHRoaXMuc2hhZGVyTWFuYWdlci5yZW5kZXJlci51cGRhdGVUZXh0dXJlKHRleHR1cmUpO1xuICAgIH1cbn07XG5cbi8qKlxuICogRGVzdHJveXMgdGhlIHNoYWRlci5cbiAqXG4gKi9cblNoYWRlci5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy5nbC5kZWxldGVQcm9ncmFtKHRoaXMucHJvZ3JhbSk7XG5cbiAgICB0aGlzLmdsID0gbnVsbDtcbiAgICB0aGlzLnVuaWZvcm1zID0gbnVsbDtcbiAgICB0aGlzLmF0dHJpYnV0ZXMgPSBudWxsO1xuXG4gICAgdGhpcy52ZXJ0ZXhTcmMgPSBudWxsO1xuICAgIHRoaXMuZnJhZ21lbnRTcmMgPSBudWxsO1xufTtcblxuU2hhZGVyLnByb3RvdHlwZS5fZ2xDb21waWxlID0gZnVuY3Rpb24gKHR5cGUsIHNyYylcbntcbiAgICB2YXIgc2hhZGVyID0gdGhpcy5nbC5jcmVhdGVTaGFkZXIodHlwZSk7XG5cbiAgICB0aGlzLmdsLnNoYWRlclNvdXJjZShzaGFkZXIsIHNyYyk7XG4gICAgdGhpcy5nbC5jb21waWxlU2hhZGVyKHNoYWRlcik7XG5cbiAgICBpZiAoIXRoaXMuZ2wuZ2V0U2hhZGVyUGFyYW1ldGVyKHNoYWRlciwgdGhpcy5nbC5DT01QSUxFX1NUQVRVUykpXG4gICAge1xuICAgICAgICBjb25zb2xlLmxvZyh0aGlzLmdsLmdldFNoYWRlckluZm9Mb2coc2hhZGVyKSk7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHJldHVybiBzaGFkZXI7XG59O1xuIiwidmFyIFNoYWRlciA9IHJlcXVpcmUoJy4vU2hhZGVyJyk7XG5cbi8qKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQGV4dGVuZHMgUElYSS5TaGFkZXJcbiAqIEBwYXJhbSBzaGFkZXJNYW5hZ2VyIHtQSVhJLlNoYWRlck1hbmFnZXJ9IFRoZSB3ZWJnbCBzaGFkZXIgbWFuYWdlciB0aGlzIHNoYWRlciB3b3JrcyBmb3IuXG4gKiBAcGFyYW0gW3ZlcnRleFNyY10ge3N0cmluZ30gVGhlIHNvdXJjZSBvZiB0aGUgdmVydGV4IHNoYWRlci5cbiAqIEBwYXJhbSBbZnJhZ21lbnRTcmNdIHtzdHJpbmd9IFRoZSBzb3VyY2Ugb2YgdGhlIGZyYWdtZW50IHNoYWRlci5cbiAqIEBwYXJhbSBbY3VzdG9tVW5pZm9ybXNdIHtvYmplY3R9IEN1c3RvbSB1bmlmb3JtcyB0byB1c2UgdG8gYXVnbWVudCB0aGUgYnVpbHQtaW4gb25lcy5cbiAqIEBwYXJhbSBbZnJhZ21lbnRTcmNdIHtzdHJpbmd9IFRoZSBzb3VyY2Ugb2YgdGhlIGZyYWdtZW50IHNoYWRlci5cbiAqL1xuZnVuY3Rpb24gVGV4dHVyZVNoYWRlcihzaGFkZXJNYW5hZ2VyLCB2ZXJ0ZXhTcmMsIGZyYWdtZW50U3JjLCBjdXN0b21Vbmlmb3JtcywgY3VzdG9tQXR0cmlidXRlcylcbntcbiAgICB2YXIgdW5pZm9ybXMgPSB7XG5cbiAgICAgICAgdVNhbXBsZXI6ICAgICAgICAgICB7IHR5cGU6ICdzYW1wbGVyMkQnLCB2YWx1ZTogMCB9LFxuICAgICAgICBwcm9qZWN0aW9uTWF0cml4OiAgIHsgdHlwZTogJ21hdDMnLCB2YWx1ZTogbmV3IEZsb2F0MzJBcnJheShbMSwgMCwgMCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsIDEsIDAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLCAwLCAxXSkgfVxuICAgIH07XG5cbiAgICBpZiAoY3VzdG9tVW5pZm9ybXMpXG4gICAge1xuICAgICAgICBmb3IgKHZhciB1IGluIGN1c3RvbVVuaWZvcm1zKVxuICAgICAgICB7XG4gICAgICAgICAgICB1bmlmb3Jtc1t1XSA9IGN1c3RvbVVuaWZvcm1zW3VdO1xuICAgICAgICB9XG4gICAgfVxuXG5cbiAgICB2YXIgYXR0cmlidXRlcyA9IHtcbiAgICAgICAgYVZlcnRleFBvc2l0aW9uOiAgICAwLFxuICAgICAgICBhVGV4dHVyZUNvb3JkOiAgICAgIDAsXG4gICAgICAgIGFDb2xvcjogICAgICAgICAgICAgMFxuICAgIH07XG5cbiAgICBpZiAoY3VzdG9tQXR0cmlidXRlcylcbiAgICB7XG4gICAgICAgIGZvciAodmFyIGEgaW4gY3VzdG9tQXR0cmlidXRlcylcbiAgICAgICAge1xuICAgICAgICAgICAgYXR0cmlidXRlc1thXSA9IGN1c3RvbUF0dHJpYnV0ZXNbYV07XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGUgdmVydGV4IHNoYWRlci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge3N0cmluZ31cbiAgICAgKi9cbiAgICB2ZXJ0ZXhTcmMgPSB2ZXJ0ZXhTcmMgfHwgVGV4dHVyZVNoYWRlci5kZWZhdWx0VmVydGV4U3JjO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGZyYWdtZW50IHNoYWRlci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge3N0cmluZ31cbiAgICAgKi9cbiAgICBmcmFnbWVudFNyYyA9IGZyYWdtZW50U3JjIHx8IFRleHR1cmVTaGFkZXIuZGVmYXVsdEZyYWdtZW50U3JjO1xuXG4gICAgU2hhZGVyLmNhbGwodGhpcywgc2hhZGVyTWFuYWdlciwgdmVydGV4U3JjLCBmcmFnbWVudFNyYywgdW5pZm9ybXMsIGF0dHJpYnV0ZXMpO1xufVxuXG4vLyBjb25zdHJ1Y3RvclxuVGV4dHVyZVNoYWRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFNoYWRlci5wcm90b3R5cGUpO1xuVGV4dHVyZVNoYWRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBUZXh0dXJlU2hhZGVyO1xubW9kdWxlLmV4cG9ydHMgPSBUZXh0dXJlU2hhZGVyO1xuXG4vKipcbiAqIFRoZSBkZWZhdWx0IHZlcnRleCBzaGFkZXIgc291cmNlXG4gKlxuICogQHN0YXRpY1xuICogQGNvbnN0YW50XG4gKi9cblRleHR1cmVTaGFkZXIuZGVmYXVsdFZlcnRleFNyYyA9IFtcbiAgICAncHJlY2lzaW9uIGxvd3AgZmxvYXQ7JyxcbiAgICAnYXR0cmlidXRlIHZlYzIgYVZlcnRleFBvc2l0aW9uOycsXG4gICAgJ2F0dHJpYnV0ZSB2ZWMyIGFUZXh0dXJlQ29vcmQ7JyxcbiAgICAnYXR0cmlidXRlIHZlYzQgYUNvbG9yOycsXG5cbiAgICAndW5pZm9ybSBtYXQzIHByb2plY3Rpb25NYXRyaXg7JyxcblxuICAgICd2YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDsnLFxuICAgICd2YXJ5aW5nIHZlYzQgdkNvbG9yOycsXG5cbiAgICAndm9pZCBtYWluKHZvaWQpeycsXG4gICAgJyAgIGdsX1Bvc2l0aW9uID0gdmVjNCgocHJvamVjdGlvbk1hdHJpeCAqIHZlYzMoYVZlcnRleFBvc2l0aW9uLCAxLjApKS54eSwgMC4wLCAxLjApOycsXG4gICAgJyAgIHZUZXh0dXJlQ29vcmQgPSBhVGV4dHVyZUNvb3JkOycsXG4gICAgJyAgIHZDb2xvciA9IHZlYzQoYUNvbG9yLnJnYiAqIGFDb2xvci5hLCBhQ29sb3IuYSk7JyxcbiAgICAnfSdcbl0uam9pbignXFxuJyk7XG5cbi8qKlxuICogVGhlIGRlZmF1bHQgZnJhZ21lbnQgc2hhZGVyIHNvdXJjZVxuICpcbiAqIEBzdGF0aWNcbiAqIEBjb25zdGFudFxuICovXG5UZXh0dXJlU2hhZGVyLmRlZmF1bHRGcmFnbWVudFNyYyA9IFtcbiAgICAncHJlY2lzaW9uIGxvd3AgZmxvYXQ7JyxcblxuICAgICd2YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDsnLFxuICAgICd2YXJ5aW5nIHZlYzQgdkNvbG9yOycsXG5cbiAgICAndW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXI7JyxcblxuICAgICd2b2lkIG1haW4odm9pZCl7JyxcbiAgICAnICAgZ2xfRnJhZ0NvbG9yID0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2VGV4dHVyZUNvb3JkKSAqIHZDb2xvciA7JyxcbiAgICAnfSdcbl0uam9pbignXFxuJyk7XG4iLCJ2YXIgU2hhZGVyID0gcmVxdWlyZSgncGl4aS1nbC1jb3JlJykuR0xTaGFkZXI7XG5cbi8qKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQGV4dGVuZHMgUElYSS5TaGFkZXJcbiAqIEBwYXJhbSBzaGFkZXJNYW5hZ2VyIHtQSVhJLlNoYWRlck1hbmFnZXJ9IFRoZSB3ZWJnbCBzaGFkZXIgbWFuYWdlciB0aGlzIHNoYWRlciB3b3JrcyBmb3IuXG4gKiBAcGFyYW0gW3ZlcnRleFNyY10ge3N0cmluZ30gVGhlIHNvdXJjZSBvZiB0aGUgdmVydGV4IHNoYWRlci5cbiAqIEBwYXJhbSBbZnJhZ21lbnRTcmNdIHtzdHJpbmd9IFRoZSBzb3VyY2Ugb2YgdGhlIGZyYWdtZW50IHNoYWRlci5cbiAqIEBwYXJhbSBbY3VzdG9tVW5pZm9ybXNdIHtvYmplY3R9IEN1c3RvbSB1bmlmb3JtcyB0byB1c2UgdG8gYXVnbWVudCB0aGUgYnVpbHQtaW4gb25lcy5cbiAqIEBwYXJhbSBbZnJhZ21lbnRTcmNdIHtzdHJpbmd9IFRoZSBzb3VyY2Ugb2YgdGhlIGZyYWdtZW50IHNoYWRlci5cbiAqL1xuZnVuY3Rpb24gVGV4dHVyZVNoYWRlcihnbClcbntcbiAgICAvKipcbiAgICAgKiBUaGUgdmVydGV4IHNoYWRlci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge3N0cmluZ31cbiAgICAgKi9cbiAgICB2ZXJ0ZXhTcmMgPSBUZXh0dXJlU2hhZGVyLmRlZmF1bHRWZXJ0ZXhTcmM7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgZnJhZ21lbnQgc2hhZGVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7c3RyaW5nfVxuICAgICAqL1xuICAgIGZyYWdtZW50U3JjID0gVGV4dHVyZVNoYWRlci5kZWZhdWx0RnJhZ21lbnRTcmM7XG5cbiAgICBTaGFkZXIuY2FsbCh0aGlzLCBnbCwgdmVydGV4U3JjLCBmcmFnbWVudFNyYyk7Ly8sIHVuaWZvcm1zLCBhdHRyaWJ1dGVzKTtcblxufVxuXG4vLyBjb25zdHJ1Y3RvclxuVGV4dHVyZVNoYWRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFNoYWRlci5wcm90b3R5cGUpO1xuVGV4dHVyZVNoYWRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBUZXh0dXJlU2hhZGVyO1xubW9kdWxlLmV4cG9ydHMgPSBUZXh0dXJlU2hhZGVyO1xuXG4vKipcbiAqIFRoZSBkZWZhdWx0IHZlcnRleCBzaGFkZXIgc291cmNlXG4gKlxuICogQHN0YXRpY1xuICogQGNvbnN0YW50XG4gKi9cblRleHR1cmVTaGFkZXIuZGVmYXVsdFZlcnRleFNyYyA9IFtcbiAgICAncHJlY2lzaW9uIGxvd3AgZmxvYXQ7JyxcbiAgICAnYXR0cmlidXRlIHZlYzIgYVZlcnRleFBvc2l0aW9uOycsXG4gICAgJ2F0dHJpYnV0ZSB2ZWMyIGFUZXh0dXJlQ29vcmQ7JyxcbiAgICAnYXR0cmlidXRlIHZlYzQgYUNvbG9yOycsXG5cbiAgICAndW5pZm9ybSBtYXQzIHByb2plY3Rpb25NYXRyaXg7JyxcblxuICAgICd2YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDsnLFxuICAgICd2YXJ5aW5nIHZlYzQgdkNvbG9yOycsXG5cbiAgICAndm9pZCBtYWluKHZvaWQpeycsXG4gICAgJyAgIGdsX1Bvc2l0aW9uID0gdmVjNCgocHJvamVjdGlvbk1hdHJpeCAqIHZlYzMoYVZlcnRleFBvc2l0aW9uLCAxLjApKS54eSwgMC4wLCAxLjApOycsXG4gICAgJyAgIHZUZXh0dXJlQ29vcmQgPSBhVGV4dHVyZUNvb3JkOycsXG4gICAgJyAgIHZDb2xvciA9IHZlYzQoYUNvbG9yLnJnYiAqIGFDb2xvci5hLCBhQ29sb3IuYSk7JyxcbiAgICAnfSdcbl0uam9pbignXFxuJyk7XG5cbi8qKlxuICogVGhlIGRlZmF1bHQgZnJhZ21lbnQgc2hhZGVyIHNvdXJjZVxuICpcbiAqIEBzdGF0aWNcbiAqIEBjb25zdGFudFxuICovXG5UZXh0dXJlU2hhZGVyLmRlZmF1bHRGcmFnbWVudFNyYyA9IFtcbiAgICAncHJlY2lzaW9uIGxvd3AgZmxvYXQ7JyxcblxuICAgICd2YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDsnLFxuICAgICd2YXJ5aW5nIHZlYzQgdkNvbG9yOycsXG5cbiAgICAndW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXI7JyxcblxuICAgICd2b2lkIG1haW4odm9pZCl7JyxcbiAgICAnICAgZ2xfRnJhZ0NvbG9yID0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2VGV4dHVyZUNvb3JkKSAqIHZDb2xvciA7JyxcbiAgICAnfSdcbl0uam9pbignXFxuJyk7XG4iLCJ2YXIgV2ViR0xNYW5hZ2VyID0gcmVxdWlyZSgnLi4vbWFuYWdlcnMvV2ViR0xNYW5hZ2VyJyk7XG5cbi8qKlxuICogQmFzZSBmb3IgYSBjb21tb24gb2JqZWN0IHJlbmRlcmVyIHRoYXQgY2FuIGJlIHVzZWQgYXMgYSBzeXN0ZW0gcmVuZGVyZXIgcGx1Z2luLlxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5XZWJHTE1hbmFnZXJcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcn0gVGhlIHJlbmRlcmVyIHRoaXMgb2JqZWN0IHJlbmRlcmVyIHdvcmtzIGZvci5cbiAqL1xuZnVuY3Rpb24gT2JqZWN0UmVuZGVyZXIocmVuZGVyZXIpXG57XG4gICAgV2ViR0xNYW5hZ2VyLmNhbGwodGhpcywgcmVuZGVyZXIpO1xufVxuXG5cbk9iamVjdFJlbmRlcmVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoV2ViR0xNYW5hZ2VyLnByb3RvdHlwZSk7XG5PYmplY3RSZW5kZXJlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBPYmplY3RSZW5kZXJlcjtcbm1vZHVsZS5leHBvcnRzID0gT2JqZWN0UmVuZGVyZXI7XG5cbi8qKlxuICogU3RhcnRzIHRoZSByZW5kZXJlciBhbmQgc2V0cyB0aGUgc2hhZGVyXG4gKlxuICovXG5PYmplY3RSZW5kZXJlci5wcm90b3R5cGUuc3RhcnQgPSBmdW5jdGlvbiAoKVxue1xuICAgIC8vIHNldCB0aGUgc2hhZGVyLi5cbn07XG5cbi8qKlxuICogU3RvcHMgdGhlIHJlbmRlcmVyXG4gKlxuICovXG5PYmplY3RSZW5kZXJlci5wcm90b3R5cGUuc3RvcCA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy5mbHVzaCgpO1xufTtcblxuLyoqXG4gKiBmbHVzaGVzXG4gKlxuICovXG5PYmplY3RSZW5kZXJlci5wcm90b3R5cGUuZmx1c2ggPSBmdW5jdGlvbiAoKVxue1xuICAgIC8vIGZsdXNoIVxufTtcblxuLyoqXG4gKiBSZW5kZXJzIGFuIG9iamVjdFxuICpcbiAqIEBwYXJhbSBvYmplY3Qge1BJWEkuRGlzcGxheU9iamVjdH0gVGhlIG9iamVjdCB0byByZW5kZXIuXG4gKi9cbk9iamVjdFJlbmRlcmVyLnByb3RvdHlwZS5yZW5kZXIgPSBmdW5jdGlvbiAob2JqZWN0KSAvLyBqc2hpbnQgdW51c2VkOmZhbHNlXG57XG4gICAgLy8gcmVuZGVyIHRoZSBvYmplY3Rcbn07XG4iLCIvKipcbiAqIEhlbHBlciBjbGFzcyB0byBjcmVhdGUgYSBxdWFkXG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIGdsIHtXZWJHTFJlbmRlcmluZ0NvbnRleHR9IFRoZSBnbCBjb250ZXh0IGZvciB0aGlzIHF1YWQgdG8gdXNlLlxuICovXG5mdW5jdGlvbiBRdWFkKGdsKVxue1xuICAgIC8qXG4gICAgICogdGhlIGN1cnJlbnQgV2ViR0wgZHJhd2luZyBjb250ZXh0XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtXZWJHTFJlbmRlcmluZ0NvbnRleHR9XG4gICAgICovXG4gICAgdGhpcy5nbCA9IGdsO1xuXG4vLyAgICB0aGlzLnRleHR1cmVzID0gbmV3IFRleHR1cmVVdnMoKTtcblxuICAgIC8qKlxuICAgICAqIEFuIGFycmF5IG9mIHZlcnRpY2VzXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtGbG9hdDMyQXJyYXl9XG4gICAgICovXG4gICAgdGhpcy52ZXJ0aWNlcyA9IG5ldyBGbG9hdDMyQXJyYXkoW1xuICAgICAgICAwLDAsXG4gICAgICAgIDIwMCwwLFxuICAgICAgICAyMDAsMjAwLFxuICAgICAgICAwLDIwMFxuICAgIF0pO1xuXG4gICAgLyoqXG4gICAgICogVGhlIFV2cyBvZiB0aGUgcXVhZFxuICAgICAqXG4gICAgICogQG1lbWJlciB7RmxvYXQzMkFycmF5fVxuICAgICAqL1xuICAgIHRoaXMudXZzID0gbmV3IEZsb2F0MzJBcnJheShbXG4gICAgICAgIDAsMCxcbiAgICAgICAgMSwwLFxuICAgICAgICAxLDEsXG4gICAgICAgIDAsMVxuICAgIF0pO1xuXG4vLyAgICB2YXIgd2hpdGUgPSAoMHhGRkZGRkYgPj4gMTYpICsgKDB4RkZGRkZGICYgMHhmZjAwKSArICgoMHhGRkZGRkYgJiAweGZmKSA8PCAxNikgKyAoMSAqIDI1NSA8PCAyNCk7XG4gICAgLy9UT0RPIGNvbnZlcnQgdGhpcyB0byBhIDMyIHVuc2lnbmVkIGludCBhcnJheVxuICAgIC8qKlxuICAgICAqIFRoZSBjb2xvciBjb21wb25lbnRzIG9mIHRoZSB0cmlhbmdsZXNcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge0Zsb2F0MzJBcnJheX1cbiAgICAgKi9cbiAgICB0aGlzLmNvbG9ycyA9IG5ldyBGbG9hdDMyQXJyYXkoW1xuICAgICAgICAxLDEsMSwxLFxuICAgICAgICAxLDEsMSwxLFxuICAgICAgICAxLDEsMSwxLFxuICAgICAgICAxLDEsMSwxXG4gICAgXSk7XG5cbiAgICAvKlxuICAgICAqIEBtZW1iZXIge1VpbnQxNkFycmF5fSBBbiBhcnJheSBjb250YWluaW5nIHRoZSBpbmRpY2VzIG9mIHRoZSB2ZXJ0aWNlc1xuICAgICAqL1xuICAgIHRoaXMuaW5kaWNlcyA9IG5ldyBVaW50MTZBcnJheShbXG4gICAgICAgIDAsIDEsIDIsIDAsIDMsIDJcbiAgICBdKTtcblxuICAgIC8qXG4gICAgICogQG1lbWJlciB7V2ViR0xCdWZmZXJ9IFRoZSB2ZXJ0ZXggYnVmZmVyXG4gICAgICovXG4gICAgdGhpcy52ZXJ0ZXhCdWZmZXIgPSBnbC5jcmVhdGVCdWZmZXIoKTtcblxuICAgIC8qXG4gICAgICogQG1lbWJlciB7V2ViR0xCdWZmZXJ9IFRoZSBpbmRleCBidWZmZXJcbiAgICAgKi9cbiAgICB0aGlzLmluZGV4QnVmZmVyID0gZ2wuY3JlYXRlQnVmZmVyKCk7XG5cbiAgICBnbC5iaW5kQnVmZmVyKGdsLkFSUkFZX0JVRkZFUiwgdGhpcy52ZXJ0ZXhCdWZmZXIpO1xuICAgIGdsLmJ1ZmZlckRhdGEoZ2wuQVJSQVlfQlVGRkVSLCAoOCArIDggKyAxNikgKiA0LCBnbC5EWU5BTUlDX0RSQVcpO1xuXG4gICAgZ2wuYmluZEJ1ZmZlcihnbC5FTEVNRU5UX0FSUkFZX0JVRkZFUiwgdGhpcy5pbmRleEJ1ZmZlcik7XG4gICAgZ2wuYnVmZmVyRGF0YShnbC5FTEVNRU5UX0FSUkFZX0JVRkZFUiwgdGhpcy5pbmRpY2VzLCBnbC5TVEFUSUNfRFJBVyk7XG5cbiAgICB0aGlzLnVwbG9hZCgpO1xufVxuXG5RdWFkLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFF1YWQ7XG5cbi8qKlxuICogTWFwcyB0d28gUmVjdGFuZ2xlIHRvIHRoZSBxdWFkXG4gKiBAcGFyYW0gcmVjdCB7UElYSS5SZWN0YW5nbGV9IHRoZSBmaXJzdCByZWN0YW5nbGVcbiAqIEBwYXJhbSByZWN0MiB7UElYSS5SZWN0YW5nbGV9IHRoZSBzZWNvbmQgcmVjdGFuZ2xlXG4gKi9cblF1YWQucHJvdG90eXBlLm1hcCA9IGZ1bmN0aW9uKHJlY3QsIHJlY3QyKVxue1xuICAgIHZhciB4ID0gMDsgLy9yZWN0Mi54IC8gcmVjdC53aWR0aDtcbiAgICB2YXIgeSA9IDA7IC8vcmVjdDIueSAvIHJlY3QuaGVpZ2h0O1xuXG4gICAgdGhpcy51dnNbMF0gPSB4O1xuICAgIHRoaXMudXZzWzFdID0geTtcblxuICAgIHRoaXMudXZzWzJdID0geCArIHJlY3QyLndpZHRoIC8gcmVjdC53aWR0aDtcbiAgICB0aGlzLnV2c1szXSA9IHk7XG5cbiAgICB0aGlzLnV2c1s0XSA9IHggKyByZWN0Mi53aWR0aCAvIHJlY3Qud2lkdGg7XG4gICAgdGhpcy51dnNbNV0gPSB5ICsgcmVjdDIuaGVpZ2h0IC8gcmVjdC5oZWlnaHQ7XG5cbiAgICB0aGlzLnV2c1s2XSA9IHg7XG4gICAgdGhpcy51dnNbN10gPSB5ICsgcmVjdDIuaGVpZ2h0IC8gcmVjdC5oZWlnaHQ7XG5cbiAgICAvLy8gLS0tLS1cbiAgICB4ID0gcmVjdDIueDtcbiAgICB5ID0gcmVjdDIueTtcblxuICAgIHRoaXMudmVydGljZXNbMF0gPSB4O1xuICAgIHRoaXMudmVydGljZXNbMV0gPSB5O1xuXG4gICAgdGhpcy52ZXJ0aWNlc1syXSA9IHggKyByZWN0Mi53aWR0aDtcbiAgICB0aGlzLnZlcnRpY2VzWzNdID0geTtcblxuICAgIHRoaXMudmVydGljZXNbNF0gPSB4ICsgcmVjdDIud2lkdGg7XG4gICAgdGhpcy52ZXJ0aWNlc1s1XSA9IHkgKyByZWN0Mi5oZWlnaHQ7XG5cbiAgICB0aGlzLnZlcnRpY2VzWzZdID0geDtcbiAgICB0aGlzLnZlcnRpY2VzWzddID0geSArIHJlY3QyLmhlaWdodDtcblxuICAgIHRoaXMudXBsb2FkKCk7XG59O1xuXG4vKipcbiAqIEJpbmRzIHRoZSBidWZmZXIgYW5kIHVwbG9hZHMgdGhlIGRhdGFcbiAqL1xuUXVhZC5wcm90b3R5cGUudXBsb2FkID0gZnVuY3Rpb24oKVxue1xuICAgIHZhciBnbCA9IHRoaXMuZ2w7XG5cbiAgICAvLyBUT0RPIGNvdWxkIHByb2JhYmx5IGJlIHB1c2hlZCBpbnRvIG9uZSB1cGxvYWQhXG4gICAgZ2wuYmluZEJ1ZmZlciggZ2wuQVJSQVlfQlVGRkVSLCB0aGlzLnZlcnRleEJ1ZmZlciApO1xuXG4gICAgZ2wuYnVmZmVyU3ViRGF0YShnbC5BUlJBWV9CVUZGRVIsIDAsIHRoaXMudmVydGljZXMpO1xuXG4gICAgZ2wuYnVmZmVyU3ViRGF0YShnbC5BUlJBWV9CVUZGRVIsIDggKiA0LCB0aGlzLnV2cyk7XG5cbiAgICBnbC5idWZmZXJTdWJEYXRhKGdsLkFSUkFZX0JVRkZFUiwgKDggKyA4KSAqIDQsIHRoaXMuY29sb3JzKTtcbn07XG5cblF1YWQucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbigpXG57XG4gICAgdmFyIGdsID0gdGhpcy5nbDtcbiAgICBcbiAgICAgZ2wuZGVsZXRlQnVmZmVyKHRoaXMudmVydGV4QnVmZmVyKTtcbiAgICAgZ2wuZGVsZXRlQnVmZmVyKHRoaXMuaW5kZXhCdWZmZXIpO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBRdWFkO1xuXG5cbiIsInZhciBtYXRoID0gcmVxdWlyZSgnLi4vLi4vLi4vbWF0aCcpLFxuICAgIHV0aWxzID0gcmVxdWlyZSgnLi4vLi4vLi4vdXRpbHMnKSxcbiAgICBDT05TVCA9IHJlcXVpcmUoJy4uLy4uLy4uL2NvbnN0JyksXG4gICAgICAgIFxuICAgIEdMVGV4dHVyZSA9IHJlcXVpcmUoJ3BpeGktZ2wtY29yZScpLkdMVGV4dHVyZSxcbiAgICBHTEZyYW1lYnVmZmVyID0gcmVxdWlyZSgncGl4aS1nbC1jb3JlJykuR0xGcmFtZWJ1ZmZlcixcbiAgICBcbiAgICBTdGVuY2lsTWFza1N0YWNrID0gcmVxdWlyZSgnLi9TdGVuY2lsTWFza1N0YWNrJyk7XG5cbi8qKlxuICogQGF1dGhvciBNYXQgR3JvdmVzIGh0dHA6Ly9tYXRncm92ZXMuY29tLyBARG9vcm1hdDIzXG4gKi9cblxuLyoqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gZ2wge1dlYkdMUmVuZGVyaW5nQ29udGV4dH0gdGhlIGN1cnJlbnQgV2ViR0wgZHJhd2luZyBjb250ZXh0XG4gKiBAcGFyYW0gd2lkdGgge251bWJlcn0gdGhlIGhvcml6b250YWwgcmFuZ2Ugb2YgdGhlIGZpbHRlclxuICogQHBhcmFtIGhlaWdodCB7bnVtYmVyfSB0aGUgdmVydGljYWwgcmFuZ2Ugb2YgdGhlIGZpbHRlclxuICogQHBhcmFtIHNjYWxlTW9kZSB7bnVtYmVyfSBTZWUge0BsaW5rIFBJWEkuU0NBTEVfTU9ERVN9IGZvciBwb3NzaWJsZSB2YWx1ZXNcbiAqIEBwYXJhbSByZXNvbHV0aW9uIHtudW1iZXJ9IHRoZSBjdXJyZW50IHJlc29sdXRpb25cbiAqIEBwYXJhbSByb290IHtib29sZWFufSBXaGV0aGVyIHRoaXMgb2JqZWN0IGlzIHRoZSByb290IGVsZW1lbnQgb3Igbm90XG4gKi9cbnZhciBSZW5kZXJUYXJnZXQgPSBmdW5jdGlvbihnbCwgd2lkdGgsIGhlaWdodCwgc2NhbGVNb2RlLCByZXNvbHV0aW9uLCByb290KVxue1xuICAgIC8vVE9ETyBSZXNvbHV0aW9uIGNvdWxkIGdvIGhlcmUgKCBlZyBsb3cgcmVzIGJsdXJzIClcblxuICAgIC8qKlxuICAgICAqIFRoZSBjdXJyZW50IFdlYkdMIGRyYXdpbmcgY29udGV4dC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1dlYkdMUmVuZGVyaW5nQ29udGV4dH1cbiAgICAgKi9cbiAgICB0aGlzLmdsID0gZ2w7XG5cbiAgICAvLyBuZXh0IHRpbWUgdG8gY3JlYXRlIGEgZnJhbWUgYnVmZmVyIGFuZCB0ZXh0dXJlXG5cbiAgICAvKipcbiAgICAgKiBBIGZyYW1lIGJ1ZmZlclxuICAgICAqXG4gICAgICogQG1lbWJlciB7V2ViR0xGcmFtZUJ1ZmZlcn1cbiAgICAgKi9cbiAgICB0aGlzLmZyYW1lQnVmZmVyID0gbnVsbDtcblxuICAgIC8qKlxuICAgICAqIFRoZSB0ZXh0dXJlXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlRleHR1cmV9XG4gICAgICovXG4gICAgdGhpcy50ZXh0dXJlID0gbnVsbDtcblxuICAgIHRoaXMuY2xlYXJDb2xvciA9IFswLCAwLCAwLCAwXTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBzaXplIG9mIHRoZSBvYmplY3QgYXMgYSByZWN0YW5nbGVcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuUmVjdGFuZ2xlfVxuICAgICAqL1xuICAgIHRoaXMuc2l6ZSA9IG5ldyBtYXRoLlJlY3RhbmdsZSgwLCAwLCAxLCAxKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBjdXJyZW50IHJlc29sdXRpb25cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLnJlc29sdXRpb24gPSByZXNvbHV0aW9uIHx8IENPTlNULlJFU09MVVRJT047XG5cbiAgICAvKipcbiAgICAgKiBUaGUgcHJvamVjdGlvbiBtYXRyaXhcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuTWF0cml4fVxuICAgICAqL1xuICAgIHRoaXMucHJvamVjdGlvbk1hdHJpeCA9IG5ldyBtYXRoLk1hdHJpeCgpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIG9iamVjdCdzIHRyYW5zZm9ybVxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5NYXRyaXh9XG4gICAgICovXG4gICAgdGhpcy50cmFuc2Zvcm0gPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGZyYW1lLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5SZWN0YW5nbGV9XG4gICAgICovXG4gICAgdGhpcy5mcmFtZSA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgc3RlbmNpbCBidWZmZXIgc3RvcmVzIG1hc2tpbmcgZGF0YSBmb3IgdGhlIHJlbmRlciB0YXJnZXRcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1dlYkdMUmVuZGVyQnVmZmVyfVxuICAgICAqL1xuICAgIHRoaXMuc3RlbmNpbEJ1ZmZlciA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgZGF0YSBzdHJ1Y3R1cmUgZm9yIHRoZSBzdGVuY2lsIG1hc2tzXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlN0ZW5jaWxNYXNrU3RhY2t9XG4gICAgICovXG4gICAgdGhpcy5zdGVuY2lsTWFza1N0YWNrID0gbmV3IFN0ZW5jaWxNYXNrU3RhY2soKTtcblxuICAgIC8qKlxuICAgICAqIFN0b3JlcyBmaWx0ZXIgZGF0YSBmb3IgdGhlIHJlbmRlciB0YXJnZXRcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge29iamVjdFtdfVxuICAgICAqL1xuICAgIHRoaXMuZmlsdGVyU3RhY2sgPSBbXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJlbmRlclRhcmdldDp0aGlzLFxuICAgICAgICAgICAgZmlsdGVyOltdLFxuICAgICAgICAgICAgYm91bmRzOnRoaXMuc2l6ZVxuICAgICAgICB9XG4gICAgXTtcblxuXG4gICAgLyoqXG4gICAgICogVGhlIHNjYWxlIG1vZGUuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgUElYSS5TQ0FMRV9NT0RFUy5ERUZBVUxUXG4gICAgICogQHNlZSBQSVhJLlNDQUxFX01PREVTXG4gICAgICovXG4gICAgdGhpcy5zY2FsZU1vZGUgPSBzY2FsZU1vZGUgfHwgQ09OU1QuU0NBTEVfTU9ERVMuREVGQVVMVDtcblxuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgdGhpcyBvYmplY3QgaXMgdGhlIHJvb3QgZWxlbWVudCBvciBub3RcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICovXG4gICAgdGhpcy5yb290ID0gcm9vdDtcblxuICAgIHRoaXMuZnJhbWVCdWZmZXIgPSBHTEZyYW1lYnVmZmVyLmNyZWF0ZVJHQkEoZ2wsIDEwMCwgMTAwKTtcbiAgICBpZih0aGlzLmZyYW1lQnVmZmVyKXRoaXMuZnJhbWVCdWZmZXIudW5iaW5kKCk7XG5cbiAgIC8vIHRoaXMuZnJhbWVCdWZmZXIgPSB7ZnJhbWVidWZmZXI6bnVsbCwgYmluZDpmdW5jdGlvbigpe30sIGNsZWFyOmZ1bmN0aW9uKCl7fSwgcmVzaXplOmZ1bmN0aW9uKCl7fX0vL25ldyBHTEZyYW1lYnVmZmVyLmNyZWF0ZVJHQkEoZ2wsIDEwMCwgMTAwKTtcblxuXG5cbiAgICBpZiAoIXRoaXMucm9vdClcbiAgICB7XG4gICAgICAgIC8qXG4gICAgICAgICAgICBBIGZyYW1lIGJ1ZmZlciBuZWVkcyBhIHRhcmdldCB0byByZW5kZXIgdG8uLlxuICAgICAgICAgICAgY3JlYXRlIGEgdGV4dHVyZSBhbmQgYmluZCBpdCBhdHRhY2ggaXQgdG8gdGhlIGZyYW1lYnVmZmVyLi5cbiAgICAgICAgICovXG4gICAgICAgIFxuICAgICAgICAvLyBjcmVhdGUgYSB0ZXh0dXJlIHRvIGJpbmQgYXR0YWNoIHRvIHRoZSBmcmFtZUJ1ZmZlci4uXG4gICAgICAgIHZhciB0ZXh0dXJlID0gbmV3IEdMVGV4dHVyZShnbCk7XG5cbiAgICAgICAgdGV4dHVyZS5lbmFibGVMaW5lYXJTY2FsaW5nKClcbiAgICAgICAgdGV4dHVyZS5lbmFibGVXcmFwQ2xhbXAoKVxuXG4gICAgICAgIHRoaXMuZnJhbWVCdWZmZXIuZW5hYmxlVGV4dHVyZSh0ZXh0dXJlKTtcblxuICAgICAgICAvLyBUT0RPIGNoYW5nZSFcbiAgICAgICAgLy8gdGhpcyBpcyB1c2VkIGJ5IHRoZSBiYXNlIHRleHR1cmVcbiAgICAgICAgdGhpcy50ZXh0dXJlID0gdGV4dHVyZS50ZXh0dXJlO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICAvLyBtYWtlIGl0IGEgbnVsbCBmcmFtZWJ1ZmZlci4uXG4gICAgICAgIHRoaXMuZnJhbWVCdWZmZXIuZnJhbWVidWZmZXIgPSBudWxsO1xuICAgIH1cblxuICAgIHRoaXMucmVzaXplKHdpZHRoLCBoZWlnaHQpO1xufTtcblxuUmVuZGVyVGFyZ2V0LnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFJlbmRlclRhcmdldDtcbm1vZHVsZS5leHBvcnRzID0gUmVuZGVyVGFyZ2V0O1xuXG4vKipcbiAqIENsZWFycyB0aGUgZmlsdGVyIHRleHR1cmUuXG4gKlxuICogQHBhcmFtIFtiaW5kPWZhbHNlXSB7Ym9vbGVhbn0gU2hvdWxkIHdlIGJpbmQgb3VyIGZyYW1lYnVmZmVyIGJlZm9yZSBjbGVhcmluZz9cbiAqL1xuUmVuZGVyVGFyZ2V0LnByb3RvdHlwZS5jbGVhciA9IGZ1bmN0aW9uKGNsZWFyQ29sb3IpXG57XG4gICAgdmFyIGNjID0gY2xlYXJDb2xvciB8fCB0aGlzLmNsZWFyQ29sb3JcbiAgICB0aGlzLmZyYW1lQnVmZmVyLmNsZWFyKGNjWzBdLGNjWzFdLGNjWzJdLGNjWzNdKS8vcixnLGIsYSk7XG59O1xuXG4vKipcbiAqIEJpbmRzIHRoZSBzdGVuY2lsIGJ1ZmZlci5cbiAqXG4gKi9cblJlbmRlclRhcmdldC5wcm90b3R5cGUuYXR0YWNoU3RlbmNpbEJ1ZmZlciA9IGZ1bmN0aW9uKClcbntcbiAgICAvL1RPRE8gY2hlY2sgaWYgc3RlbmNpbCBpcyBkb25lP1xuICAgIC8qKlxuICAgICAqIFRoZSBzdGVuY2lsIGJ1ZmZlciBpcyB1c2VkIGZvciBtYXNraW5nIGluIHBpeGlcbiAgICAgKiBsZXRzIGNyZWF0ZSBvbmUgYW5kIHRoZW4gYWRkIGF0dGFjaCBpdCB0byB0aGUgZnJhbWVidWZmZXIuLlxuICAgICAqL1xuICAgIGlmICghdGhpcy5yb290KVxuICAgIHtcbiAgICAgICAgdGhpcy5mcmFtZUJ1ZmZlci5lbmFibGVTdGVuY2lsKCk7XG4gICAgfVxufTtcblxuLyoqXG4gKiBCaW5kcyB0aGUgYnVmZmVycyBhbmQgaW5pdGlhbGlzZXMgdGhlIHZpZXdwb3J0LlxuICpcbiAqL1xuUmVuZGVyVGFyZ2V0LnByb3RvdHlwZS5hY3RpdmF0ZSA9IGZ1bmN0aW9uKClcbntcbiAgICAvL1RPT0QgcmVmYWN0b3IgdXNhZ2Ugb2YgZnJhbWUuLlxuICAgIHZhciBnbCA9IHRoaXMuZ2w7XG5cbiAgICB0aGlzLmZyYW1lQnVmZmVyLmJpbmQoKTtcblxuXG4gICAgdmFyIHByb2plY3Rpb25GcmFtZSA9IHRoaXMuZnJhbWUgfHwgdGhpcy5zaXplO1xuXG4gICAgLy8gVE9ETyBhZGQgYSBkaXJ0eSBmbGFnIHRvIHRoaXMgb2YgYSBzZXR0ZXIgZm9yIHRoZSBmcmFtZT9cbiAgICB0aGlzLmNhbGN1bGF0ZVByb2plY3Rpb24oIHByb2plY3Rpb25GcmFtZSApO1xuXG4gICAgaWYodGhpcy50cmFuc2Zvcm0pXG4gICAge1xuICAgICAgICB0aGlzLnByb2plY3Rpb25NYXRyaXguYXBwZW5kKHRoaXMudHJhbnNmb3JtKTtcbiAgICB9XG5cbiAgICBnbC52aWV3cG9ydCgwLDAsIHByb2plY3Rpb25GcmFtZS53aWR0aCAqIHRoaXMucmVzb2x1dGlvbiwgcHJvamVjdGlvbkZyYW1lLmhlaWdodCAqIHRoaXMucmVzb2x1dGlvbik7XG59O1xuXG4vKipcbiAqIFVwZGF0ZXMgdGhlIHByb2plY3Rpb24gbWF0cml4IGJhc2VkIG9uIGEgcHJvamVjdGlvbiBmcmFtZSAod2hpY2ggaXMgYSByZWN0YW5nbGUpXG4gKlxuICovXG5SZW5kZXJUYXJnZXQucHJvdG90eXBlLmNhbGN1bGF0ZVByb2plY3Rpb24gPSBmdW5jdGlvbiAocHJvamVjdGlvbkZyYW1lKVxue1xuICAgIHZhciBwbSA9IHRoaXMucHJvamVjdGlvbk1hdHJpeDtcblxuICAgIHBtLmlkZW50aXR5KCk7XG5cbiAgICBpZiAoIXRoaXMucm9vdClcbiAgICB7XG4gICAgICAgIHBtLmEgPSAxIC8gcHJvamVjdGlvbkZyYW1lLndpZHRoKjI7XG4gICAgICAgIHBtLmQgPSAxIC8gcHJvamVjdGlvbkZyYW1lLmhlaWdodCoyO1xuXG4gICAgICAgIHBtLnR4ID0gLTEgLSBwcm9qZWN0aW9uRnJhbWUueCAqIHBtLmE7XG4gICAgICAgIHBtLnR5ID0gLTEgLSBwcm9qZWN0aW9uRnJhbWUueSAqIHBtLmQ7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHBtLmEgPSAxIC8gcHJvamVjdGlvbkZyYW1lLndpZHRoKjI7XG4gICAgICAgIHBtLmQgPSAtMSAvIHByb2plY3Rpb25GcmFtZS5oZWlnaHQqMjtcblxuICAgICAgICBwbS50eCA9IC0xIC0gcHJvamVjdGlvbkZyYW1lLnggKiBwbS5hO1xuICAgICAgICBwbS50eSA9IDEgLSBwcm9qZWN0aW9uRnJhbWUueSAqIHBtLmQ7XG4gICAgfVxufTtcblxuLyoqXG4gKiBSZXNpemVzIHRoZSB0ZXh0dXJlIHRvIHRoZSBzcGVjaWZpZWQgd2lkdGggYW5kIGhlaWdodFxuICpcbiAqIEBwYXJhbSB3aWR0aCB7TnVtYmVyfSB0aGUgbmV3IHdpZHRoIG9mIHRoZSB0ZXh0dXJlXG4gKiBAcGFyYW0gaGVpZ2h0IHtOdW1iZXJ9IHRoZSBuZXcgaGVpZ2h0IG9mIHRoZSB0ZXh0dXJlXG4gKi9cblJlbmRlclRhcmdldC5wcm90b3R5cGUucmVzaXplID0gZnVuY3Rpb24gKHdpZHRoLCBoZWlnaHQpXG57XG4gICAgd2lkdGggPSB3aWR0aCB8IDA7XG4gICAgaGVpZ2h0ID0gaGVpZ2h0IHwgMDtcblxuICAgIGlmICh0aGlzLnNpemUud2lkdGggPT09IHdpZHRoICYmIHRoaXMuc2l6ZS5oZWlnaHQgPT09IGhlaWdodCkgXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5zaXplLndpZHRoID0gd2lkdGg7XG4gICAgdGhpcy5zaXplLmhlaWdodCA9IGhlaWdodDtcblxuICAgIHRoaXMuZnJhbWVCdWZmZXIucmVzaXplKHdpZHRoICogdGhpcy5yZXNvbHV0aW9uLCBoZWlnaHQgKiB0aGlzLnJlc29sdXRpb24pO1xuICAgIFxuICAgIHZhciBwcm9qZWN0aW9uRnJhbWUgPSB0aGlzLmZyYW1lIHx8IHRoaXMuc2l6ZTtcblxuICAgIHRoaXMuY2FsY3VsYXRlUHJvamVjdGlvbiggcHJvamVjdGlvbkZyYW1lICk7XG59O1xuXG4vKipcbiAqIERlc3Ryb3lzIHRoZSByZW5kZXIgdGFyZ2V0LlxuICpcbiAqL1xuUmVuZGVyVGFyZ2V0LnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKClcbntcbiAgICB2YXIgZ2wgPSB0aGlzLmdsO1xuICAgIFxuICAgIHRoaXMuZnJhbWVCdWZmZXIuZGVzdHJveSgpO1xuXG4gICAgdGhpcy5mcmFtZUJ1ZmZlciA9IG51bGw7XG4gICAgdGhpcy50ZXh0dXJlID0gbnVsbDtcbn07XG4iLCIvKipcbiAqIEdlbmVyaWMgTWFzayBTdGFjayBkYXRhIHN0cnVjdHVyZVxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICovXG5mdW5jdGlvbiBTdGVuY2lsTWFza1N0YWNrKClcbntcblx0LyoqXG4gICAgICogVGhlIGFjdHVhbCBzdGFja1xuICAgICAqXG4gICAgICogQG1lbWJlciB7YW55W119XG4gICAgICovXG4gICAgdGhpcy5zdGVuY2lsU3RhY2sgPSBbXTtcblxuICAgIC8qKlxuICAgICAqIFRPRE8gQGFsdmluXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqL1xuICAgIHRoaXMucmV2ZXJzZSA9IHRydWU7XG5cbiAgICAvKipcbiAgICAgKiBJbnRlcm5hbCBjb3VudFxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMuY291bnQgPSAwO1xufVxuXG5TdGVuY2lsTWFza1N0YWNrLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFN0ZW5jaWxNYXNrU3RhY2s7XG5tb2R1bGUuZXhwb3J0cyA9IFN0ZW5jaWxNYXNrU3RhY2s7XG4iLCJDT05TVCA9IHJlcXVpcmUoJy4uLy4uLy4uL2NvbnN0Jyk7XG5cbi8qKlxuICogTWFwcyBnbCBibGVuZCBjb21iaW5hdGlvbnMgdG8gV2ViR0xcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqL1xuZnVuY3Rpb24gbWFwV2ViR0xCbGVuZE1vZGVzVG9QaXhpKGdsLCBvYmplY3QpXG57XG4gICAgb2JqZWN0ID0gb2JqZWN0IHx8IHt9O1xuXG4gICAgLy9UT0RPIC0gcHJlbXVsdGlwbHkgYWxwaGEgd291bGQgYmUgZGlmZmVyZW50LlxuICAgIC8vYWRkIGEgYm9vbGVhbiBmb3IgdGhhdCFcbiAgICBvYmplY3RbQ09OU1QuQkxFTkRfTU9ERVMuTk9STUFMXSAgICAgICAgPSBbZ2wuT05FLCAgICAgICBnbC5PTkVfTUlOVVNfU1JDX0FMUEhBXTtcbiAgICBvYmplY3RbQ09OU1QuQkxFTkRfTU9ERVMuQUREXSAgICAgICAgICAgPSBbZ2wuU1JDX0FMUEhBLCBnbC5EU1RfQUxQSEFdO1xuICAgIG9iamVjdFtDT05TVC5CTEVORF9NT0RFUy5NVUxUSVBMWV0gICAgICA9IFtnbC5EU1RfQ09MT1IsIGdsLk9ORV9NSU5VU19TUkNfQUxQSEFdO1xuICAgIG9iamVjdFtDT05TVC5CTEVORF9NT0RFUy5TQ1JFRU5dICAgICAgICA9IFtnbC5TUkNfQUxQSEEsIGdsLk9ORV07XG4gICAgb2JqZWN0W0NPTlNULkJMRU5EX01PREVTLk9WRVJMQVldICAgICAgID0gW2dsLk9ORSwgICAgICAgZ2wuT05FX01JTlVTX1NSQ19BTFBIQV07XG4gICAgb2JqZWN0W0NPTlNULkJMRU5EX01PREVTLkRBUktFTl0gICAgICAgID0gW2dsLk9ORSwgICAgICAgZ2wuT05FX01JTlVTX1NSQ19BTFBIQV07XG4gICAgb2JqZWN0W0NPTlNULkJMRU5EX01PREVTLkxJR0hURU5dICAgICAgID0gW2dsLk9ORSwgICAgICAgZ2wuT05FX01JTlVTX1NSQ19BTFBIQV07XG4gICAgb2JqZWN0W0NPTlNULkJMRU5EX01PREVTLkNPTE9SX0RPREdFXSAgID0gW2dsLk9ORSwgICAgICAgZ2wuT05FX01JTlVTX1NSQ19BTFBIQV07XG4gICAgb2JqZWN0W0NPTlNULkJMRU5EX01PREVTLkNPTE9SX0JVUk5dICAgID0gW2dsLk9ORSwgICAgICAgZ2wuT05FX01JTlVTX1NSQ19BTFBIQV07XG4gICAgb2JqZWN0W0NPTlNULkJMRU5EX01PREVTLkhBUkRfTElHSFRdICAgID0gW2dsLk9ORSwgICAgICAgZ2wuT05FX01JTlVTX1NSQ19BTFBIQV07XG4gICAgb2JqZWN0W0NPTlNULkJMRU5EX01PREVTLlNPRlRfTElHSFRdICAgID0gW2dsLk9ORSwgICAgICAgZ2wuT05FX01JTlVTX1NSQ19BTFBIQV07XG4gICAgb2JqZWN0W0NPTlNULkJMRU5EX01PREVTLkRJRkZFUkVOQ0VdICAgID0gW2dsLk9ORSwgICAgICAgZ2wuT05FX01JTlVTX1NSQ19BTFBIQV07XG4gICAgb2JqZWN0W0NPTlNULkJMRU5EX01PREVTLkVYQ0xVU0lPTl0gICAgID0gW2dsLk9ORSwgICAgICAgZ2wuT05FX01JTlVTX1NSQ19BTFBIQV07XG4gICAgb2JqZWN0W0NPTlNULkJMRU5EX01PREVTLkhVRV0gICAgICAgICAgID0gW2dsLk9ORSwgICAgICAgZ2wuT05FX01JTlVTX1NSQ19BTFBIQV07XG4gICAgb2JqZWN0W0NPTlNULkJMRU5EX01PREVTLlNBVFVSQVRJT05dICAgID0gW2dsLk9ORSwgICAgICAgZ2wuT05FX01JTlVTX1NSQ19BTFBIQV07XG4gICAgb2JqZWN0W0NPTlNULkJMRU5EX01PREVTLkNPTE9SXSAgICAgICAgID0gW2dsLk9ORSwgICAgICAgZ2wuT05FX01JTlVTX1NSQ19BTFBIQV07XG4gICAgb2JqZWN0W0NPTlNULkJMRU5EX01PREVTLkxVTUlOT1NJVFldICAgID0gW2dsLk9ORSwgICAgICAgZ2wuT05FX01JTlVTX1NSQ19BTFBIQV07XG5cbiAgICByZXR1cm4gb2JqZWN0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IG1hcFdlYkdMQmxlbmRNb2Rlc1RvUGl4aTtcbiIsIkNPTlNUID0gcmVxdWlyZSgnLi4vLi4vLi4vY29uc3QnKTtcblxuLyoqXG4gKiBHZW5lcmljIE1hc2sgU3RhY2sgZGF0YSBzdHJ1Y3R1cmVcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqL1xuZnVuY3Rpb24gbWFwV2ViR0xEcmF3TW9kZXNUb1BpeGkoZ2wsIG9iamVjdClcbntcblx0b2JqZWN0PSBvYmplY3QgfHwge307XG5cbiAgICBvYmplY3RbQ09OU1QuRFJBV19NT0RFUy5QT0lOVFNdICAgICAgICAgPSBnbC5QT0lOVFM7XG4gICAgb2JqZWN0W0NPTlNULkRSQVdfTU9ERVMuTElORVNdICAgICAgICAgID0gZ2wuTElORVM7XG4gICAgb2JqZWN0W0NPTlNULkRSQVdfTU9ERVMuTElORV9MT09QXSAgICAgID0gZ2wuTElORV9MT09QO1xuICAgIG9iamVjdFtDT05TVC5EUkFXX01PREVTLkxJTkVfU1RSSVBdICAgICA9IGdsLkxJTkVfU1RSSVA7XG4gICAgb2JqZWN0W0NPTlNULkRSQVdfTU9ERVMuVFJJQU5HTEVTXSAgICAgID0gZ2wuVFJJQU5HTEVTO1xuICAgIG9iamVjdFtDT05TVC5EUkFXX01PREVTLlRSSUFOR0xFX1NUUklQXSA9IGdsLlRSSUFOR0xFX1NUUklQO1xuICAgIG9iamVjdFtDT05TVC5EUkFXX01PREVTLlRSSUFOR0xFX0ZBTl0gICA9IGdsLlRSSUFOR0xFX0ZBTjtcblxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IG1hcFdlYkdMRHJhd01vZGVzVG9QaXhpO1xuIiwidmFyIG1hdGggPSByZXF1aXJlKCcuLi9tYXRoJyksXG4gICAgVGV4dHVyZSA9IHJlcXVpcmUoJy4uL3RleHR1cmVzL1RleHR1cmUnKSxcbiAgICBDb250YWluZXIgPSByZXF1aXJlKCcuLi9kaXNwbGF5L0NvbnRhaW5lcicpLFxuICAgIENhbnZhc1RpbnRlciA9IHJlcXVpcmUoJy4uL3JlbmRlcmVycy9jYW52YXMvdXRpbHMvQ2FudmFzVGludGVyJyksXG4gICAgdXRpbHMgPSByZXF1aXJlKCcuLi91dGlscycpLFxuICAgIENPTlNUID0gcmVxdWlyZSgnLi4vY29uc3QnKSxcbiAgICB0ZW1wUG9pbnQgPSBuZXcgbWF0aC5Qb2ludCgpO1xuXG4vKipcbiAqIFRoZSBTcHJpdGUgb2JqZWN0IGlzIHRoZSBiYXNlIGZvciBhbGwgdGV4dHVyZWQgb2JqZWN0cyB0aGF0IGFyZSByZW5kZXJlZCB0byB0aGUgc2NyZWVuXG4gKlxuICogQSBzcHJpdGUgY2FuIGJlIGNyZWF0ZWQgZGlyZWN0bHkgZnJvbSBhbiBpbWFnZSBsaWtlIHRoaXM6XG4gKlxuICogYGBganNcbiAqIHZhciBzcHJpdGUgPSBuZXcgUElYSS5TcHJpdGUuZnJvbUltYWdlKCdhc3NldHMvaW1hZ2UucG5nJyk7XG4gKiBgYGBcbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQ29udGFpbmVyXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIHRleHR1cmUge1BJWEkuVGV4dHVyZX0gVGhlIHRleHR1cmUgZm9yIHRoaXMgc3ByaXRlXG4gKi9cbmZ1bmN0aW9uIFNwcml0ZSh0ZXh0dXJlKVxue1xuICAgIENvbnRhaW5lci5jYWxsKHRoaXMpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGFuY2hvciBzZXRzIHRoZSBvcmlnaW4gcG9pbnQgb2YgdGhlIHRleHR1cmUuXG4gICAgICogVGhlIGRlZmF1bHQgaXMgMCwwIHRoaXMgbWVhbnMgdGhlIHRleHR1cmUncyBvcmlnaW4gaXMgdGhlIHRvcCBsZWZ0XG4gICAgICogU2V0dGluZyB0aGUgYW5jaG9yIHRvIDAuNSwwLjUgbWVhbnMgdGhlIHRleHR1cmUncyBvcmlnaW4gaXMgY2VudGVyZWRcbiAgICAgKiBTZXR0aW5nIHRoZSBhbmNob3IgdG8gMSwxIHdvdWxkIG1lYW4gdGhlIHRleHR1cmUncyBvcmlnaW4gcG9pbnQgd2lsbCBiZSB0aGUgYm90dG9tIHJpZ2h0IGNvcm5lclxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5Qb2ludH1cbiAgICAgKi9cbiAgICB0aGlzLmFuY2hvciA9IG5ldyBtYXRoLlBvaW50KCk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgdGV4dHVyZSB0aGF0IHRoZSBzcHJpdGUgaXMgdXNpbmdcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuVGV4dHVyZX1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX3RleHR1cmUgPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHdpZHRoIG9mIHRoZSBzcHJpdGUgKHRoaXMgaXMgaW5pdGlhbGx5IHNldCBieSB0aGUgdGV4dHVyZSlcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX3dpZHRoID0gMDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBoZWlnaHQgb2YgdGhlIHNwcml0ZSAodGhpcyBpcyBpbml0aWFsbHkgc2V0IGJ5IHRoZSB0ZXh0dXJlKVxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5faGVpZ2h0ID0gMDtcblxuICAgIC8qKlxuICAgICAqIFRoZSB0aW50IGFwcGxpZWQgdG8gdGhlIHNwcml0ZS4gVGhpcyBpcyBhIGhleCB2YWx1ZS4gQSB2YWx1ZSBvZiAweEZGRkZGRiB3aWxsIHJlbW92ZSBhbnkgdGludCBlZmZlY3QuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMHhGRkZGRkZcbiAgICAgKi9cbiAgICB0aGlzLnRpbnQgPSAweEZGRkZGRjtcblxuICAgIC8qKlxuICAgICAqIFRoZSBibGVuZCBtb2RlIHRvIGJlIGFwcGxpZWQgdG8gdGhlIHNwcml0ZS4gQXBwbHkgYSB2YWx1ZSBvZiBgUElYSS5CTEVORF9NT0RFUy5OT1JNQUxgIHRvIHJlc2V0IHRoZSBibGVuZCBtb2RlLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IFBJWEkuQkxFTkRfTU9ERVMuTk9STUFMXG4gICAgICogQHNlZSBQSVhJLkJMRU5EX01PREVTXG4gICAgICovXG4gICAgdGhpcy5ibGVuZE1vZGUgPSBDT05TVC5CTEVORF9NT0RFUy5OT1JNQUw7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgc2hhZGVyIHRoYXQgd2lsbCBiZSB1c2VkIHRvIHJlbmRlciB0aGUgc3ByaXRlLiBTZXQgdG8gbnVsbCB0byByZW1vdmUgYSBjdXJyZW50IHNoYWRlci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuQWJzdHJhY3RGaWx0ZXJ8UElYSS5TaGFkZXJ9XG4gICAgICovXG4gICAgdGhpcy5zaGFkZXIgPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogQW4gaW50ZXJuYWwgY2FjaGVkIHZhbHVlIG9mIHRoZSB0aW50LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDB4RkZGRkZGXG4gICAgICovXG4gICAgdGhpcy5jYWNoZWRUaW50ID0gMHhGRkZGRkY7XG5cbiAgICAvLyBjYWxsIHRleHR1cmUgc2V0dGVyXG4gICAgdGhpcy50ZXh0dXJlID0gdGV4dHVyZSB8fCBUZXh0dXJlLkVNUFRZO1xuICAgIHRoaXMudGV4dHVyZURpcnR5ID0gdHJ1ZVxuICAgIHRoaXMudmVydGV4RGlydHkgPSB0cnVlO1xuICAgIHRoaXMudmVydGV4RGF0YSA9IG5ldyBGbG9hdDMyQXJyYXkoOCk7XG59XG5cbi8vIGNvbnN0cnVjdG9yXG5TcHJpdGUucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShDb250YWluZXIucHJvdG90eXBlKTtcblNwcml0ZS5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBTcHJpdGU7XG5tb2R1bGUuZXhwb3J0cyA9IFNwcml0ZTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoU3ByaXRlLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFRoZSB3aWR0aCBvZiB0aGUgc3ByaXRlLCBzZXR0aW5nIHRoaXMgd2lsbCBhY3R1YWxseSBtb2RpZnkgdGhlIHNjYWxlIHRvIGFjaGlldmUgdGhlIHZhbHVlIHNldFxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLlNwcml0ZSNcbiAgICAgKi9cbiAgICB3aWR0aDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiBNYXRoLmFicyh0aGlzLnNjYWxlLngpICogdGhpcy50ZXh0dXJlLl9mcmFtZS53aWR0aDtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHZhciBzaWduID0gdXRpbHMuc2lnbih0aGlzLnNjYWxlLngpIHx8IDE7XG4gICAgICAgICAgICB0aGlzLnNjYWxlLnggPSBzaWduICogdmFsdWUgLyB0aGlzLnRleHR1cmUuX2ZyYW1lLndpZHRoO1xuICAgICAgICAgICAgdGhpcy5fd2lkdGggPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBUaGUgaGVpZ2h0IG9mIHRoZSBzcHJpdGUsIHNldHRpbmcgdGhpcyB3aWxsIGFjdHVhbGx5IG1vZGlmeSB0aGUgc2NhbGUgdG8gYWNoaWV2ZSB0aGUgdmFsdWUgc2V0XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuU3ByaXRlI1xuICAgICAqL1xuICAgIGhlaWdodDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiAgTWF0aC5hYnModGhpcy5zY2FsZS55KSAqIHRoaXMudGV4dHVyZS5fZnJhbWUuaGVpZ2h0O1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdmFyIHNpZ24gPSB1dGlscy5zaWduKHRoaXMuc2NhbGUueSkgfHwgMTtcbiAgICAgICAgICAgIHRoaXMuc2NhbGUueSA9IHNpZ24gKiB2YWx1ZSAvIHRoaXMudGV4dHVyZS5fZnJhbWUuaGVpZ2h0O1xuICAgICAgICAgICAgdGhpcy5faGVpZ2h0ID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVGhlIHRleHR1cmUgdGhhdCB0aGUgc3ByaXRlIGlzIHVzaW5nXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlRleHR1cmV9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuU3ByaXRlI1xuICAgICAqL1xuICAgIHRleHR1cmU6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gIHRoaXMuX3RleHR1cmU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICBpZiAodGhpcy5fdGV4dHVyZSA9PT0gdmFsdWUpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLl90ZXh0dXJlID0gdmFsdWU7XG4gICAgICAgICAgICB0aGlzLmNhY2hlZFRpbnQgPSAweEZGRkZGRjtcblxuICAgICAgICAgICAgdGhpcy50ZXh0dXJlRGlydHkgPSB0cnVlO1xuXG4gICAgICAgICAgICBpZiAodmFsdWUpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgLy8gd2FpdCBmb3IgdGhlIHRleHR1cmUgdG8gbG9hZFxuICAgICAgICAgICAgICAgIGlmICh2YWx1ZS5iYXNlVGV4dHVyZS5oYXNMb2FkZWQpXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9vblRleHR1cmVVcGRhdGUoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgdmFsdWUub25jZSgndXBkYXRlJywgdGhpcy5fb25UZXh0dXJlVXBkYXRlLCB0aGlzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG59KTtcblxuLyoqXG4gKiBXaGVuIHRoZSB0ZXh0dXJlIGlzIHVwZGF0ZWQsIHRoaXMgZXZlbnQgd2lsbCBmaXJlIHRvIHVwZGF0ZSB0aGUgc2NhbGUgYW5kIGZyYW1lXG4gKlxuICogQHByaXZhdGVcbiAqL1xuU3ByaXRlLnByb3RvdHlwZS5fb25UZXh0dXJlVXBkYXRlID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLnRleHR1cmVEaXJ0eSA9IHRydWU7XG5cbiAgICAvLyBzbyBpZiBfd2lkdGggaXMgMCB0aGVuIHdpZHRoIHdhcyBub3Qgc2V0Li5cbiAgICBpZiAodGhpcy5fd2lkdGgpXG4gICAge1xuICAgICAgICB0aGlzLnNjYWxlLnggPSB1dGlscy5zaWduKHRoaXMuc2NhbGUueCkgKiB0aGlzLl93aWR0aCAvIHRoaXMudGV4dHVyZS5mcmFtZS53aWR0aDtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5faGVpZ2h0KVxuICAgIHtcbiAgICAgICAgdGhpcy5zY2FsZS55ID0gdXRpbHMuc2lnbih0aGlzLnNjYWxlLnkpICogdGhpcy5faGVpZ2h0IC8gdGhpcy50ZXh0dXJlLmZyYW1lLmhlaWdodDtcbiAgICB9XG59O1xuXG5TcHJpdGUucHJvdG90eXBlLmNhY2x1bGF0ZVZlcnRpY2VzID0gZnVuY3Rpb24gKClcbntcblxuICAgIHZhciB0ZXh0dXJlID0gdGhpcy5fdGV4dHVyZSxcbiAgICAgICAgd3QgPSB0aGlzLndvcmxkVHJhbnNmb3JtLFxuICAgICAgICBhID0gd3QuYSwgYiA9IHd0LmIsIGMgPSB3dC5jLCBkID0gd3QuZCwgdHggPSB3dC50eCwgdHkgPSB3dC50eSxcbiAgICAgICAgdmVydGV4RGF0YSA9IHRoaXMudmVydGV4RGF0YSxcbiAgICAgICAgdzAsIHcxLCBoMCwgaDEsXG4gICAgICAgIHRyaW0gPSB0ZXh0dXJlLnRyaW07XG4gICAgXG4gICAgaWYgKHRyaW0pXG4gICAge1xuICAgICAgICAvLyBpZiB0aGUgc3ByaXRlIGlzIHRyaW1tZWQgYW5kIGlzIG5vdCBhIHRpbGluZ3Nwcml0ZSB0aGVuIHdlIG5lZWQgdG8gYWRkIHRoZSBleHRyYSBzcGFjZSBiZWZvcmUgdHJhbnNmb3JtaW5nIHRoZSBzcHJpdGUgY29vcmRzLi5cbiAgICAgICAgdzEgPSB0cmltLnggLSB0aGlzLmFuY2hvci54ICogdHJpbS53aWR0aDtcbiAgICAgICAgdzAgPSB3MSArIHRleHR1cmUuY3JvcC53aWR0aDtcblxuICAgICAgICBoMSA9IHRyaW0ueSAtIHRoaXMuYW5jaG9yLnkgKiB0cmltLmhlaWdodDtcbiAgICAgICAgaDAgPSBoMSArIHRleHR1cmUuY3JvcC5oZWlnaHQ7XG5cbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgdzAgPSAodGV4dHVyZS5fZnJhbWUud2lkdGggKSAqICgxLXRoaXMuYW5jaG9yLngpO1xuICAgICAgICB3MSA9ICh0ZXh0dXJlLl9mcmFtZS53aWR0aCApICogLXRoaXMuYW5jaG9yLng7XG5cbiAgICAgICAgaDAgPSB0ZXh0dXJlLl9mcmFtZS5oZWlnaHQgKiAoMS10aGlzLmFuY2hvci55KTtcbiAgICAgICAgaDEgPSB0ZXh0dXJlLl9mcmFtZS5oZWlnaHQgKiAtdGhpcy5hbmNob3IueTtcbiAgICB9XG5cbiAgICAvLyB4eVxuICAgIHZlcnRleERhdGFbMF0gPSBhICogdzEgKyBjICogaDEgKyB0eDtcbiAgICB2ZXJ0ZXhEYXRhWzFdID0gZCAqIGgxICsgYiAqIHcxICsgdHk7XG5cbiAgICAvLyB4eVxuICAgIHZlcnRleERhdGFbMl0gPSBhICogdzAgKyBjICogaDEgKyB0eDtcbiAgICB2ZXJ0ZXhEYXRhWzNdID0gZCAqIGgxICsgYiAqIHcwICsgdHk7XG5cbiAgICAgLy8geHlcbiAgICB2ZXJ0ZXhEYXRhWzRdID0gYSAqIHcwICsgYyAqIGgwICsgdHg7XG4gICAgdmVydGV4RGF0YVs1XSA9IGQgKiBoMCArIGIgKiB3MCArIHR5O1xuXG4gICAgLy8geHlcbiAgICB2ZXJ0ZXhEYXRhWzZdID0gYSAqIHcxICsgYyAqIGgwICsgdHg7XG4gICAgdmVydGV4RGF0YVs3XSA9IGQgKiBoMCArIGIgKiB3MSArIHR5O1xuXG5cbn1cblxuLyoqXG4qXG4qIFJlbmRlcnMgdGhlIG9iamVjdCB1c2luZyB0aGUgV2ViR0wgcmVuZGVyZXJcbipcbiogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLldlYkdMUmVuZGVyZXJ9XG4qIEBwcml2YXRlXG4qL1xuU3ByaXRlLnByb3RvdHlwZS5fcmVuZGVyV2ViR0wgPSBmdW5jdGlvbiAocmVuZGVyZXIpXG57XG4gICAgaWYodGhpcy50ZXh0dXJlRGlydHkpXG4gICAge1xuICAgICAgICB0aGlzLnRleHR1cmVEaXJ0eSA9IGZhbHNlO1xuXG4gICAgICAgIHRoaXMuX29uVGV4dHVyZVVwZGF0ZSgpO1xuICAgICAgICBcbiAgICAgICAgdGhpcy52ZXJ0ZXhEaXJ0eSA9IHRydWU7XG4gICAgfVxuXG4gICAgaWYodGhpcy52ZXJ0ZXhEaXJ0eSlcbiAgICB7XG4gICAgICAgIHRoaXMudmVydGV4RGlydHkgPSBmYWxzZTtcblxuICAgICAgICAvLyBzZXQgdGhlIHZlcnRleCBkYXRhXG4gICAgICAgIHRoaXMuY2FjbHVsYXRlVmVydGljZXMoKTtcblxuICAgIH1cbiAgICBcbiAgICByZW5kZXJlci5zZXRPYmplY3RSZW5kZXJlcihyZW5kZXJlci5wbHVnaW5zLnNwcml0ZSk7XG4gICAgcmVuZGVyZXIucGx1Z2lucy5zcHJpdGUucmVuZGVyKHRoaXMpO1xufTtcblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBib3VuZHMgb2YgdGhlIFNwcml0ZSBhcyBhIHJlY3RhbmdsZS4gVGhlIGJvdW5kcyBjYWxjdWxhdGlvbiB0YWtlcyB0aGUgd29ybGRUcmFuc2Zvcm0gaW50byBhY2NvdW50LlxuICpcbiAqIEBwYXJhbSBtYXRyaXgge1BJWEkuTWF0cml4fSB0aGUgdHJhbnNmb3JtYXRpb24gbWF0cml4IG9mIHRoZSBzcHJpdGVcbiAqIEByZXR1cm4ge1BJWEkuUmVjdGFuZ2xlfSB0aGUgZnJhbWluZyByZWN0YW5nbGVcbiAqL1xuU3ByaXRlLnByb3RvdHlwZS5nZXRCb3VuZHMgPSBmdW5jdGlvbiAobWF0cml4KVxue1xuICAgIGlmKCF0aGlzLl9jdXJyZW50Qm91bmRzKVxuICAgIHtcbiAgICAgICAgaWYodGhpcy52ZXJ0ZXhEaXJ0eSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy52ZXJ0ZXhEaXJ0eSA9IGZhbHNlO1xuXG4gICAgICAgICAgICAvLyBzZXQgdGhlIHZlcnRleCBkYXRhXG4gICAgICAgICAgICB0aGlzLmNhY2x1bGF0ZVZlcnRpY2VzKCk7XG5cbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBtaW5YLFxuICAgICAgICAgICAgbWF4WCxcbiAgICAgICAgICAgIG1pblksXG4gICAgICAgICAgICBtYXhZLFxuICAgICAgICAgICAgdmVydGV4RGF0YSA9IHRoaXMudmVydGV4RGF0YTtcblxuICAgICAgICB2YXIgeDEgPSB2ZXJ0ZXhEYXRhWzBdXG4gICAgICAgIHZhciB5MSA9IHZlcnRleERhdGFbMV1cblxuICAgICAgICB2YXIgeDIgPSB2ZXJ0ZXhEYXRhWzJdXG4gICAgICAgIHZhciB5MiA9IHZlcnRleERhdGFbM11cblxuICAgICAgICB2YXIgeDMgPSB2ZXJ0ZXhEYXRhWzRdXG4gICAgICAgIHZhciB5MyA9IHZlcnRleERhdGFbNV1cblxuICAgICAgICB2YXIgeDQgPSB2ZXJ0ZXhEYXRhWzZdXG4gICAgICAgIHZhciB5NCA9IHZlcnRleERhdGFbN11cblxuICAgICAgICBtaW5YID0geDE7XG4gICAgICAgIG1pblggPSB4MiA8IG1pblggPyB4MiA6IG1pblg7XG4gICAgICAgIG1pblggPSB4MyA8IG1pblggPyB4MyA6IG1pblg7XG4gICAgICAgIG1pblggPSB4NCA8IG1pblggPyB4NCA6IG1pblg7XG5cbiAgICAgICAgbWluWSA9IHkxO1xuICAgICAgICBtaW5ZID0geTIgPCBtaW5ZID8geTIgOiBtaW5ZO1xuICAgICAgICBtaW5ZID0geTMgPCBtaW5ZID8geTMgOiBtaW5ZO1xuICAgICAgICBtaW5ZID0geTQgPCBtaW5ZID8geTQgOiBtaW5ZO1xuXG4gICAgICAgIG1heFggPSB4MTtcbiAgICAgICAgbWF4WCA9IHgyID4gbWF4WCA/IHgyIDogbWF4WDtcbiAgICAgICAgbWF4WCA9IHgzID4gbWF4WCA/IHgzIDogbWF4WDtcbiAgICAgICAgbWF4WCA9IHg0ID4gbWF4WCA/IHg0IDogbWF4WDtcblxuICAgICAgICBtYXhZID0geTE7XG4gICAgICAgIG1heFkgPSB5MiA+IG1heFkgPyB5MiA6IG1heFk7XG4gICAgICAgIG1heFkgPSB5MyA+IG1heFkgPyB5MyA6IG1heFk7XG4gICAgICAgIG1heFkgPSB5NCA+IG1heFkgPyB5NCA6IG1heFk7XG5cbiAgICAgICAgLy8gY2hlY2sgZm9yIGNoaWxkcmVuXG4gICAgICAgIGlmKHRoaXMuY2hpbGRyZW4ubGVuZ3RoKVxuICAgICAgICB7XG4gICAgICAgICAgICB2YXIgY2hpbGRCb3VuZHMgPSB0aGlzLmNvbnRhaW5lckdldEJvdW5kcygpO1xuXG4gICAgICAgICAgICB3MCA9IGNoaWxkQm91bmRzLng7XG4gICAgICAgICAgICB3MSA9IGNoaWxkQm91bmRzLnggKyBjaGlsZEJvdW5kcy53aWR0aDtcbiAgICAgICAgICAgIGgwID0gY2hpbGRCb3VuZHMueTtcbiAgICAgICAgICAgIGgxID0gY2hpbGRCb3VuZHMueSArIGNoaWxkQm91bmRzLmhlaWdodDtcblxuICAgICAgICAgICAgbWluWCA9IChtaW5YIDwgdzApID8gbWluWCA6IHcwO1xuICAgICAgICAgICAgbWluWSA9IChtaW5ZIDwgaDApID8gbWluWSA6IGgwO1xuXG4gICAgICAgICAgICBtYXhYID0gKG1heFggPiB3MSkgPyBtYXhYIDogdzE7XG4gICAgICAgICAgICBtYXhZID0gKG1heFkgPiBoMSkgPyBtYXhZIDogaDE7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgYm91bmRzID0gdGhpcy5fYm91bmRzO1xuXG4gICAgICAgIGJvdW5kcy54ID0gbWluWDtcbiAgICAgICAgYm91bmRzLndpZHRoID0gbWF4WCAtIG1pblg7XG5cbiAgICAgICAgYm91bmRzLnkgPSBtaW5ZO1xuICAgICAgICBib3VuZHMuaGVpZ2h0ID0gbWF4WSAtIG1pblk7XG5cbiAgICAgICAgLy8gc3RvcmUgYSByZWZlcmVuY2Ugc28gdGhhdCBpZiB0aGlzIGZ1bmN0aW9uIGdldHMgY2FsbGVkIGFnYWluIGluIHRoZSByZW5kZXIgY3ljbGUgd2UgZG8gbm90IGhhdmUgdG8gcmVjYWxjdWxhdGVcbiAgICAgICAgdGhpcy5fY3VycmVudEJvdW5kcyA9IGJvdW5kcztcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5fY3VycmVudEJvdW5kcztcbn07XG5cbi8qKlxuICogR2V0cyB0aGUgbG9jYWwgYm91bmRzIG9mIHRoZSBzcHJpdGUgb2JqZWN0LlxuICpcbiAqL1xuU3ByaXRlLnByb3RvdHlwZS5nZXRMb2NhbEJvdW5kcyA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy5fYm91bmRzLnggPSAtdGhpcy5fdGV4dHVyZS5fZnJhbWUud2lkdGggKiB0aGlzLmFuY2hvci54O1xuICAgIHRoaXMuX2JvdW5kcy55ID0gLXRoaXMuX3RleHR1cmUuX2ZyYW1lLmhlaWdodCAqIHRoaXMuYW5jaG9yLnk7XG4gICAgdGhpcy5fYm91bmRzLndpZHRoID0gdGhpcy5fdGV4dHVyZS5fZnJhbWUud2lkdGg7XG4gICAgdGhpcy5fYm91bmRzLmhlaWdodCA9IHRoaXMuX3RleHR1cmUuX2ZyYW1lLmhlaWdodDtcbiAgICByZXR1cm4gdGhpcy5fYm91bmRzO1xufTtcblxuLyoqXG4qIFRlc3RzIGlmIGEgcG9pbnQgaXMgaW5zaWRlIHRoaXMgc3ByaXRlXG4qXG4qIEBwYXJhbSBwb2ludCB7UElYSS5Qb2ludH0gdGhlIHBvaW50IHRvIHRlc3RcbiogQHJldHVybiB7Ym9vbGVhbn0gdGhlIHJlc3VsdCBvZiB0aGUgdGVzdFxuKi9cblNwcml0ZS5wcm90b3R5cGUuY29udGFpbnNQb2ludCA9IGZ1bmN0aW9uKCBwb2ludCApXG57XG4gICAgdGhpcy53b3JsZFRyYW5zZm9ybS5hcHBseUludmVyc2UocG9pbnQsICB0ZW1wUG9pbnQpO1xuXG4gICAgdmFyIHdpZHRoID0gdGhpcy5fdGV4dHVyZS5fZnJhbWUud2lkdGg7XG4gICAgdmFyIGhlaWdodCA9IHRoaXMuX3RleHR1cmUuX2ZyYW1lLmhlaWdodDtcbiAgICB2YXIgeDEgPSAtd2lkdGggKiB0aGlzLmFuY2hvci54O1xuICAgIHZhciB5MTtcblxuICAgIGlmICggdGVtcFBvaW50LnggPiB4MSAmJiB0ZW1wUG9pbnQueCA8IHgxICsgd2lkdGggKVxuICAgIHtcbiAgICAgICAgeTEgPSAtaGVpZ2h0ICogdGhpcy5hbmNob3IueTtcblxuICAgICAgICBpZiAoIHRlbXBQb2ludC55ID4geTEgJiYgdGVtcFBvaW50LnkgPCB5MSArIGhlaWdodCApXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xufTtcblxuLyoqXG4qIFJlbmRlcnMgdGhlIG9iamVjdCB1c2luZyB0aGUgQ2FudmFzIHJlbmRlcmVyXG4qXG4qIEBwYXJhbSByZW5kZXJlciB7UElYSS5DYW52YXNSZW5kZXJlcn0gVGhlIHJlbmRlcmVyXG4qIEBwcml2YXRlXG4qL1xuU3ByaXRlLnByb3RvdHlwZS5fcmVuZGVyQ2FudmFzID0gZnVuY3Rpb24gKHJlbmRlcmVyKVxue1xuICAgIGlmICh0aGlzLnRleHR1cmUuY3JvcC53aWR0aCA8PSAwIHx8IHRoaXMudGV4dHVyZS5jcm9wLmhlaWdodCA8PSAwKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHZhciBjb21wb3NpdGVPcGVyYXRpb24gPSByZW5kZXJlci5ibGVuZE1vZGVzW3RoaXMuYmxlbmRNb2RlXTtcbiAgICBpZiAoY29tcG9zaXRlT3BlcmF0aW9uICE9PSByZW5kZXJlci5jb250ZXh0Lmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbilcbiAgICB7XG4gICAgICAgIHJlbmRlcmVyLmNvbnRleHQuZ2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uID0gY29tcG9zaXRlT3BlcmF0aW9uO1xuICAgIH1cblxuICAgIC8vICBJZ25vcmUgbnVsbCBzb3VyY2VzXG4gICAgaWYgKHRoaXMudGV4dHVyZS52YWxpZClcbiAgICB7XG4gICAgICAgIHZhciB0ZXh0dXJlID0gdGhpcy5fdGV4dHVyZSxcbiAgICAgICAgICAgIHd0ID0gdGhpcy53b3JsZFRyYW5zZm9ybSxcbiAgICAgICAgICAgIGR4LFxuICAgICAgICAgICAgZHksXG4gICAgICAgICAgICB3aWR0aCxcbiAgICAgICAgICAgIGhlaWdodDtcblxuICAgICAgICByZW5kZXJlci5jb250ZXh0Lmdsb2JhbEFscGhhID0gdGhpcy53b3JsZEFscGhhO1xuXG4gICAgICAgIC8vIElmIHNtb290aGluZ0VuYWJsZWQgaXMgc3VwcG9ydGVkIGFuZCB3ZSBuZWVkIHRvIGNoYW5nZSB0aGUgc21vb3RoaW5nIHByb3BlcnR5IGZvciB0aGlzIHRleHR1cmVcbiAgICAgICAgdmFyIHNtb290aGluZ0VuYWJsZWQgPSB0ZXh0dXJlLmJhc2VUZXh0dXJlLnNjYWxlTW9kZSA9PT0gQ09OU1QuU0NBTEVfTU9ERVMuTElORUFSO1xuICAgICAgICBpZiAocmVuZGVyZXIuc21vb3RoUHJvcGVydHkgJiYgcmVuZGVyZXIuY29udGV4dFtyZW5kZXJlci5zbW9vdGhQcm9wZXJ0eV0gIT09IHNtb290aGluZ0VuYWJsZWQpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJlbmRlcmVyLmNvbnRleHRbcmVuZGVyZXIuc21vb3RoUHJvcGVydHldID0gc21vb3RoaW5nRW5hYmxlZDtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIElmIHRoZSB0ZXh0dXJlIGlzIHRyaW1tZWQgd2Ugb2Zmc2V0IGJ5IHRoZSB0cmltIHgveSwgb3RoZXJ3aXNlIHdlIHVzZSB0aGUgZnJhbWUgZGltZW5zaW9uc1xuXG4gICAgICAgIGlmKHRleHR1cmUucm90YXRlKVxuICAgICAgICB7XG4gICAgICAgICAgICB3aWR0aCA9IHRleHR1cmUuY3JvcC5oZWlnaHQ7XG4gICAgICAgICAgICBoZWlnaHQgPSB0ZXh0dXJlLmNyb3Aud2lkdGg7XG5cbiAgICAgICAgICAgIGR4ID0gKHRleHR1cmUudHJpbSkgPyB0ZXh0dXJlLnRyaW0ueSAtIHRoaXMuYW5jaG9yLnkgKiB0ZXh0dXJlLnRyaW0uaGVpZ2h0IDogdGhpcy5hbmNob3IueSAqIC10ZXh0dXJlLl9mcmFtZS5oZWlnaHQ7XG4gICAgICAgICAgICBkeSA9ICh0ZXh0dXJlLnRyaW0pID8gdGV4dHVyZS50cmltLnggLSB0aGlzLmFuY2hvci54ICogdGV4dHVyZS50cmltLndpZHRoIDogdGhpcy5hbmNob3IueCAqIC10ZXh0dXJlLl9mcmFtZS53aWR0aDtcbiAgICAgICBcbiAgICAgICAgICAgIGR4ICs9IHdpZHRoO1xuXG4gICAgICAgICAgICB3dC50eCA9IGR5ICogd3QuYSArIGR4ICogd3QuYyArIHd0LnR4O1xuICAgICAgICAgICAgd3QudHkgPSBkeSAqIHd0LmIgKyBkeCAqIHd0LmQgKyB3dC50eTtcblxuICAgICAgICAgICAgdmFyIHRlbXAgPSB3dC5hO1xuICAgICAgICAgICAgd3QuYSAgPSAtd3QuYztcbiAgICAgICAgICAgIHd0LmMgID0gIHRlbXA7XG5cbiAgICAgICAgICAgIHRlbXAgPSB3dC5iO1xuICAgICAgICAgICAgd3QuYiAgPSAtd3QuZDtcbiAgICAgICAgICAgIHd0LmQgID0gIHRlbXA7XG5cbiAgICAgICAgICAgIC8vIHRoZSBhbmNob3IgaGFzIGFscmVhZHkgYmVlbiBhcHBsaWVkIGFib3ZlLCBzbyBsZXRzIHNldCBpdCB0byB6ZXJvXG4gICAgICAgICAgICBkeCA9IDA7XG4gICAgICAgICAgICBkeSA9IDA7XG5cbiAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgIHtcbiAgICAgICAgICAgIHdpZHRoID0gdGV4dHVyZS5jcm9wLndpZHRoO1xuICAgICAgICAgICAgaGVpZ2h0ID0gdGV4dHVyZS5jcm9wLmhlaWdodDtcblxuICAgICAgICAgICAgZHggPSAodGV4dHVyZS50cmltKSA/IHRleHR1cmUudHJpbS54IC0gdGhpcy5hbmNob3IueCAqIHRleHR1cmUudHJpbS53aWR0aCA6IHRoaXMuYW5jaG9yLnggKiAtdGV4dHVyZS5fZnJhbWUud2lkdGg7XG4gICAgICAgICAgICBkeSA9ICh0ZXh0dXJlLnRyaW0pID8gdGV4dHVyZS50cmltLnkgLSB0aGlzLmFuY2hvci55ICogdGV4dHVyZS50cmltLmhlaWdodCA6IHRoaXMuYW5jaG9yLnkgKiAtdGV4dHVyZS5fZnJhbWUuaGVpZ2h0O1xuICAgICAgICB9XG5cblxuXG4gICAgICAgIC8vIEFsbG93IGZvciBwaXhlbCByb3VuZGluZ1xuICAgICAgICBpZiAocmVuZGVyZXIucm91bmRQaXhlbHMpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJlbmRlcmVyLmNvbnRleHQuc2V0VHJhbnNmb3JtKFxuICAgICAgICAgICAgICAgIHd0LmEsXG4gICAgICAgICAgICAgICAgd3QuYixcbiAgICAgICAgICAgICAgICB3dC5jLFxuICAgICAgICAgICAgICAgIHd0LmQsXG4gICAgICAgICAgICAgICAgKHd0LnR4ICogcmVuZGVyZXIucmVzb2x1dGlvbikgfCAwLFxuICAgICAgICAgICAgICAgICh3dC50eSAqIHJlbmRlcmVyLnJlc29sdXRpb24pIHwgMFxuICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgZHggPSBkeCB8IDA7XG4gICAgICAgICAgICBkeSA9IGR5IHwgMDtcbiAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgIHtcblxuICAgICAgICAgICAgcmVuZGVyZXIuY29udGV4dC5zZXRUcmFuc2Zvcm0oXG4gICAgICAgICAgICAgICAgd3QuYSxcbiAgICAgICAgICAgICAgICB3dC5iLFxuICAgICAgICAgICAgICAgIHd0LmMsXG4gICAgICAgICAgICAgICAgd3QuZCxcbiAgICAgICAgICAgICAgICB3dC50eCAqIHJlbmRlcmVyLnJlc29sdXRpb24sXG4gICAgICAgICAgICAgICAgd3QudHkgKiByZW5kZXJlci5yZXNvbHV0aW9uXG4gICAgICAgICAgICApO1xuXG5cbiAgICAgICAgfVxuXG4gICAgICAgIHZhciByZXNvbHV0aW9uID0gdGV4dHVyZS5iYXNlVGV4dHVyZS5yZXNvbHV0aW9uO1xuXG4gICAgICAgIGlmICh0aGlzLnRpbnQgIT09IDB4RkZGRkZGKVxuICAgICAgICB7XG4gICAgICAgICAgICBpZiAodGhpcy5jYWNoZWRUaW50ICE9PSB0aGlzLnRpbnQpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdGhpcy5jYWNoZWRUaW50ID0gdGhpcy50aW50O1xuXG4gICAgICAgICAgICAgICAgLy8gVE9ETyBjbGVhbiB1cCBjYWNoaW5nIC0gaG93IHRvIGNsZWFuIHVwIHRoZSBjYWNoZXM/XG4gICAgICAgICAgICAgICAgdGhpcy50aW50ZWRUZXh0dXJlID0gQ2FudmFzVGludGVyLmdldFRpbnRlZFRleHR1cmUodGhpcywgdGhpcy50aW50KTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmVuZGVyZXIuY29udGV4dC5kcmF3SW1hZ2UoXG4gICAgICAgICAgICAgICAgdGhpcy50aW50ZWRUZXh0dXJlLFxuICAgICAgICAgICAgICAgIDAsXG4gICAgICAgICAgICAgICAgMCxcbiAgICAgICAgICAgICAgICB3aWR0aCAqIHJlc29sdXRpb24sXG4gICAgICAgICAgICAgICAgaGVpZ2h0ICogcmVzb2x1dGlvbixcbiAgICAgICAgICAgICAgICBkeCAqIHJlbmRlcmVyLnJlc29sdXRpb24sXG4gICAgICAgICAgICAgICAgZHkgKiByZW5kZXJlci5yZXNvbHV0aW9uLFxuICAgICAgICAgICAgICAgIHdpZHRoICogcmVuZGVyZXIucmVzb2x1dGlvbixcbiAgICAgICAgICAgICAgICBoZWlnaHQgKiByZW5kZXJlci5yZXNvbHV0aW9uXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIGVsc2VcbiAgICAgICAge1xuICAgICAgICAgICAgcmVuZGVyZXIuY29udGV4dC5kcmF3SW1hZ2UoXG4gICAgICAgICAgICAgICAgdGV4dHVyZS5iYXNlVGV4dHVyZS5zb3VyY2UsXG4gICAgICAgICAgICAgICAgdGV4dHVyZS5jcm9wLnggKiByZXNvbHV0aW9uLFxuICAgICAgICAgICAgICAgIHRleHR1cmUuY3JvcC55ICogcmVzb2x1dGlvbixcbiAgICAgICAgICAgICAgICB3aWR0aCAqIHJlc29sdXRpb24sXG4gICAgICAgICAgICAgICAgaGVpZ2h0ICogcmVzb2x1dGlvbixcbiAgICAgICAgICAgICAgICBkeCAgKiByZW5kZXJlci5yZXNvbHV0aW9uLFxuICAgICAgICAgICAgICAgIGR5ICAqIHJlbmRlcmVyLnJlc29sdXRpb24sXG4gICAgICAgICAgICAgICAgd2lkdGggKiByZW5kZXJlci5yZXNvbHV0aW9uLFxuICAgICAgICAgICAgICAgIGhlaWdodCAqIHJlbmRlcmVyLnJlc29sdXRpb25cbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICB9XG59O1xuXG4vKipcbiAqIERlc3Ryb3lzIHRoaXMgc3ByaXRlIGFuZCBvcHRpb25hbGx5IGl0cyB0ZXh0dXJlXG4gKlxuICogQHBhcmFtIFtkZXN0cm95VGV4dHVyZT1mYWxzZV0ge2Jvb2xlYW59IFNob3VsZCBpdCBkZXN0cm95IHRoZSBjdXJyZW50IHRleHR1cmUgb2YgdGhlIHNwcml0ZSBhcyB3ZWxsXG4gKiBAcGFyYW0gW2Rlc3Ryb3lCYXNlVGV4dHVyZT1mYWxzZV0ge2Jvb2xlYW59IFNob3VsZCBpdCBkZXN0cm95IHRoZSBiYXNlIHRleHR1cmUgb2YgdGhlIHNwcml0ZSBhcyB3ZWxsXG4gKi9cblNwcml0ZS5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uIChkZXN0cm95VGV4dHVyZSwgZGVzdHJveUJhc2VUZXh0dXJlKVxue1xuICAgIENvbnRhaW5lci5wcm90b3R5cGUuZGVzdHJveS5jYWxsKHRoaXMpO1xuXG4gICAgdGhpcy5hbmNob3IgPSBudWxsO1xuXG4gICAgaWYgKGRlc3Ryb3lUZXh0dXJlKVxuICAgIHtcbiAgICAgICAgdGhpcy5fdGV4dHVyZS5kZXN0cm95KGRlc3Ryb3lCYXNlVGV4dHVyZSk7XG4gICAgfVxuXG4gICAgdGhpcy5fdGV4dHVyZSA9IG51bGw7XG4gICAgdGhpcy5zaGFkZXIgPSBudWxsO1xufTtcblxuLy8gc29tZSBoZWxwZXIgZnVuY3Rpb25zLi5cblxuLyoqXG4gKiBIZWxwZXIgZnVuY3Rpb24gdGhhdCBjcmVhdGVzIGEgc3ByaXRlIHRoYXQgd2lsbCBjb250YWluIGEgdGV4dHVyZSBmcm9tIHRoZSBUZXh0dXJlQ2FjaGUgYmFzZWQgb24gdGhlIGZyYW1lSWRcbiAqIFRoZSBmcmFtZSBpZHMgYXJlIGNyZWF0ZWQgd2hlbiBhIFRleHR1cmUgcGFja2VyIGZpbGUgaGFzIGJlZW4gbG9hZGVkXG4gKlxuICogQHN0YXRpY1xuICogQHBhcmFtIGZyYW1lSWQge3N0cmluZ30gVGhlIGZyYW1lIElkIG9mIHRoZSB0ZXh0dXJlIGluIHRoZSBjYWNoZVxuICogQHBhcmFtIFtjcm9zc29yaWdpbj0oYXV0byldIHtib29sZWFufSBpZiB5b3Ugd2FudCB0byBzcGVjaWZ5IHRoZSBjcm9zcy1vcmlnaW4gcGFyYW1ldGVyXG4gKiBAcGFyYW0gW3NjYWxlTW9kZT1QSVhJLlNDQUxFX01PREVTLkRFRkFVTFRdIHtudW1iZXJ9IGlmIHlvdSB3YW50IHRvIHNwZWNpZnkgdGhlIHNjYWxlIG1vZGUsIHNlZSB7QGxpbmsgUElYSS5TQ0FMRV9NT0RFU30gZm9yIHBvc3NpYmxlIHZhbHVlc1xuICogQHJldHVybiB7UElYSS5TcHJpdGV9IEEgbmV3IFNwcml0ZSB1c2luZyBhIHRleHR1cmUgZnJvbSB0aGUgdGV4dHVyZSBjYWNoZSBtYXRjaGluZyB0aGUgZnJhbWVJZFxuICovXG5TcHJpdGUuZnJvbUZyYW1lID0gZnVuY3Rpb24gKGZyYW1lSWQpXG57XG4gICAgdmFyIHRleHR1cmUgPSB1dGlscy5UZXh0dXJlQ2FjaGVbZnJhbWVJZF07XG5cbiAgICBpZiAoIXRleHR1cmUpXG4gICAge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RoZSBmcmFtZUlkIFwiJyArIGZyYW1lSWQgKyAnXCIgZG9lcyBub3QgZXhpc3QgaW4gdGhlIHRleHR1cmUgY2FjaGUnKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IFNwcml0ZSh0ZXh0dXJlKTtcbn07XG5cbi8qKlxuICogSGVscGVyIGZ1bmN0aW9uIHRoYXQgY3JlYXRlcyBhIHNwcml0ZSB0aGF0IHdpbGwgY29udGFpbiBhIHRleHR1cmUgYmFzZWQgb24gYW4gaW1hZ2UgdXJsXG4gKiBJZiB0aGUgaW1hZ2UgaXMgbm90IGluIHRoZSB0ZXh0dXJlIGNhY2hlIGl0IHdpbGwgYmUgbG9hZGVkXG4gKlxuICogQHN0YXRpY1xuICogQHBhcmFtIGltYWdlSWQge3N0cmluZ30gVGhlIGltYWdlIHVybCBvZiB0aGUgdGV4dHVyZVxuICogQHJldHVybiB7UElYSS5TcHJpdGV9IEEgbmV3IFNwcml0ZSB1c2luZyBhIHRleHR1cmUgZnJvbSB0aGUgdGV4dHVyZSBjYWNoZSBtYXRjaGluZyB0aGUgaW1hZ2UgaWRcbiAqL1xuU3ByaXRlLmZyb21JbWFnZSA9IGZ1bmN0aW9uIChpbWFnZUlkLCBjcm9zc29yaWdpbiwgc2NhbGVNb2RlKVxue1xuICAgIHJldHVybiBuZXcgU3ByaXRlKFRleHR1cmUuZnJvbUltYWdlKGltYWdlSWQsIGNyb3Nzb3JpZ2luLCBzY2FsZU1vZGUpKTtcbn07XG4iLCJ2YXIgT2JqZWN0UmVuZGVyZXIgPSByZXF1aXJlKCcuLi8uLi9yZW5kZXJlcnMvd2ViZ2wvdXRpbHMvT2JqZWN0UmVuZGVyZXInKSxcbiAgICBXZWJHTFJlbmRlcmVyID0gcmVxdWlyZSgnLi4vLi4vcmVuZGVyZXJzL3dlYmdsL1dlYkdMUmVuZGVyZXInKSxcbiAgICBUZXh0dXJlU2hhZGVyID0gcmVxdWlyZSgnLi4vLi4vcmVuZGVyZXJzL3dlYmdsL3NoYWRlcnMvX1RleHR1cmVTaGFkZXInKSxcbiAgICBjcmVhdGVJbmRpY2VzRm9yUXVhZHMgPSByZXF1aXJlKCcuLi8uLi91dGlscy9jcmVhdGVJbmRpY2VzRm9yUXVhZHMnKSxcbiAgICBnZW5lcmF0ZU11bHRpVGV4dHVyZVNoYWRlciA9IHJlcXVpcmUoJy4vZ2VuZXJhdGVNdWx0aVRleHR1cmVTaGFkZXInKSxcbiAgICBDT05TVCA9IHJlcXVpcmUoJy4uLy4uL2NvbnN0JyksXG4gICAgZ2xDb3JlID0gcmVxdWlyZSgncGl4aS1nbC1jb3JlJyk7XG5cbi8qKlxuICogQGF1dGhvciBNYXQgR3JvdmVzXG4gKlxuICogQmlnIHRoYW5rcyB0byB0aGUgdmVyeSBjbGV2ZXIgTWF0dCBEZXNMYXVyaWVycyA8bWF0dGRlc2w+IGh0dHBzOi8vZ2l0aHViLmNvbS9tYXR0ZGVzbC9cbiAqIGZvciBjcmVhdGluZyB0aGUgb3JpZ2luYWwgcGl4aSB2ZXJzaW9uIVxuICogQWxzbyBhIHRoYW5rcyB0byBodHRwczovL2dpdGh1Yi5jb20vYmNoZXZhbGllciBmb3IgdHdlYWtpbmcgdGhlIHRpbnQgYW5kIGFscGhhIHNvIHRoYXQgdGhleSBub3cgc2hhcmUgNCBieXRlcyBvbiB0aGUgdmVydGV4IGJ1ZmZlclxuICpcbiAqIEhlYXZpbHkgaW5zcGlyZWQgYnkgTGliR0RYJ3MgU3ByaXRlUmVuZGVyZXI6XG4gKiBodHRwczovL2dpdGh1Yi5jb20vbGliZ2R4L2xpYmdkeC9ibG9iL21hc3Rlci9nZHgvc3JjL2NvbS9iYWRsb2dpYy9nZHgvZ3JhcGhpY3MvZzJkL1Nwcml0ZVJlbmRlcmVyLmphdmFcbiAqL1xuXG4vKipcbiAqIFJlbmRlcmVyIGRlZGljYXRlZCB0byBkcmF3aW5nIGFuZCBiYXRjaGluZyBzcHJpdGVzLlxuICpcbiAqIEBjbGFzc1xuICogQHByaXZhdGVcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAZXh0ZW5kcyBQSVhJLk9iamVjdFJlbmRlcmVyXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcn0gVGhlIHJlbmRlcmVyIHRoaXMgc3ByaXRlIGJhdGNoIHdvcmtzIGZvci5cbiAqL1xuZnVuY3Rpb24gU3ByaXRlUmVuZGVyZXIocmVuZGVyZXIpXG57XG4gICAgT2JqZWN0UmVuZGVyZXIuY2FsbCh0aGlzLCByZW5kZXJlcik7XG5cbiAgICAvKipcbiAgICAgKiBOdW1iZXIgb2YgdmFsdWVzIHNlbnQgaW4gdGhlIHZlcnRleCBidWZmZXIuXG4gICAgICogcG9zaXRpb25YLCBwb3NpdGlvblksIGNvbG9yUiwgY29sb3JHLCBjb2xvckIgPSA1XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy52ZXJ0U2l6ZSA9IDU7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgc2l6ZSBvZiB0aGUgdmVydGV4IGluZm9ybWF0aW9uIGluIGJ5dGVzLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMudmVydEJ5dGVTaXplID0gdGhpcy52ZXJ0U2l6ZSAqIDQ7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgbnVtYmVyIG9mIGltYWdlcyBpbiB0aGUgU3ByaXRlQmF0Y2ggYmVmb3JlIGl0IGZsdXNoZXMuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy5zaXplID0gQ09OU1QuU1BSSVRFX0JBVENIX1NJWkU7IC8vIDIwMDAgaXMgYSBuaWNlIGJhbGFuY2UgYmV0d2VlbiBtb2JpbGUgLyBkZXNrdG9wXG5cbiAgICAvLyB0aGUgdG90YWwgbnVtYmVyIG9mIGJ5dGVzIGluIG91ciBiYXRjaFxuICAgIHZhciBudW1WZXJ0cyA9ICh0aGlzLnNpemUgKiA0KSAqIHRoaXMudmVydEJ5dGVTaXplO1xuXG4gICAgLy8gdGhlIHRvdGFsIG51bWJlciBvZiBpbmRpY2VzIGluIG91ciBiYXRjaCwgdGhlcmUgYXJlIDYgcG9pbnRzIHBlciBxdWFkLlxuICAgIHZhciBudW1JbmRpY2VzID0gdGhpcy5zaXplICogNjtcblxuICAgIC8qKlxuICAgICAqIEhvbGRzIHRoZSB2ZXJ0ZXggZGF0YSB0aGF0IHdpbGwgYmUgc2VudCB0byB0aGUgdmVydGV4IHNoYWRlci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge0FycmF5QnVmZmVyfVxuICAgICAqL1xuICAgIHRoaXMudmVydGljZXMgPSBuZXcgQXJyYXlCdWZmZXIobnVtVmVydHMpO1xuXG4gICAgLyoqXG4gICAgICogVmlldyBvbiB0aGUgdmVydGljZXMgYXMgYSBGbG9hdDMyQXJyYXkgZm9yIHBvc2l0aW9uc1xuICAgICAqXG4gICAgICogQG1lbWJlciB7RmxvYXQzMkFycmF5fVxuICAgICAqL1xuICAgIHRoaXMucG9zaXRpb25zID0gbmV3IEZsb2F0MzJBcnJheSh0aGlzLnZlcnRpY2VzKTtcbiAgICBcbiAgICAvKipcbiAgICAgKiBWaWV3IG9uIHRoZSB2ZXJ0aWNlcyBhcyBhIFVpbnQzMkFycmF5IGZvciB1dnNcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge0Zsb2F0MzJBcnJheX1cbiAgICAgKi9cbiAgICB0aGlzLnV2cyA9IG5ldyBVaW50MzJBcnJheSh0aGlzLnZlcnRpY2VzKTtcblxuICAgIC8qKlxuICAgICAqIFZpZXcgb24gdGhlIHZlcnRpY2VzIGFzIGEgVWludDMyQXJyYXkgZm9yIGNvbG9yc1xuICAgICAqXG4gICAgICogQG1lbWJlciB7VWludDMyQXJyYXl9XG4gICAgICovXG4gICAgdGhpcy5jb2xvcnMgPSBuZXcgVWludDMyQXJyYXkodGhpcy52ZXJ0aWNlcyk7XG5cbiAgICAvKipcbiAgICAgKiBIb2xkcyB0aGUgaW5kaWNlcyBvZiB0aGUgZ2VvbWV0cnkgKHF1YWRzKSB0byBkcmF3XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtVaW50MTZBcnJheX1cbiAgICAgKi9cbiAgICB0aGlzLmluZGljZXMgPSBjcmVhdGVJbmRpY2VzRm9yUXVhZHModGhpcy5zaXplKVxuXG4gICAgLyoqXG4gICAgICogVGhlIGRlZmF1bHQgc2hhZGVyIHRoYXQgaXMgdXNlZCBpZiBhIHNwcml0ZSBkb2Vzbid0IGhhdmUgYSBtb3JlIHNwZWNpZmljIG9uZS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuU2hhZGVyfVxuICAgICAqL1xuICAgIHRoaXMuc2hhZGVyID0gbnVsbDtcblxuICAgIHRoaXMudGV4dHVyZUNvdW50ID0gMDtcbiAgICB0aGlzLmN1cnJlbnRJbmRleCA9IDA7XG4gIFxuICAgIHRoaXMuZ3JvdXBDb3VudCA9IDA7XG4gICAgdGhpcy5ncm91cHMgPSBbXTtcbiAgICBcbiAgICAvL1RPRE8gLSAzMDAgaXMgYSBiaXQgbWFnaWMsIGZpZ3VyZSBvdXQgYSBuaWNlciBhbW91bnQhXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLnNpemU7IGkrKykgXG4gICAge1xuICAgICAgICB0aGlzLmdyb3Vwc1tpXSA9IHt0ZXh0dXJlczpbXSwgdGV4dHVyZUNvdW50OjAsIGlkczpbXSwgc2l6ZTowLCBzdGFydDowLCBibGVuZDowfTsgXG4gICAgfTtcbiAgICBcbiAgICB0aGlzLmN1cnJlbnRHcm91cCA9IHRoaXMuZ3JvdXBzW3RoaXMuZ3JvdXBDb3VudCsrXTtcblxuICAgIHRoaXMuY3VycmVudFRleHR1cmUgPSBudWxsOyAgICBcbn1cblxuXG5TcHJpdGVSZW5kZXJlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKE9iamVjdFJlbmRlcmVyLnByb3RvdHlwZSk7XG5TcHJpdGVSZW5kZXJlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBTcHJpdGVSZW5kZXJlcjtcbm1vZHVsZS5leHBvcnRzID0gU3ByaXRlUmVuZGVyZXI7XG5cbldlYkdMUmVuZGVyZXIucmVnaXN0ZXJQbHVnaW4oJ3Nwcml0ZScsIFNwcml0ZVJlbmRlcmVyKTtcblxuLyoqXG4gKiBTZXRzIHVwIHRoZSByZW5kZXJlciBjb250ZXh0IGFuZCBuZWNlc3NhcnkgYnVmZmVycy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIGdsIHtXZWJHTFJlbmRlcmluZ0NvbnRleHR9IHRoZSBjdXJyZW50IFdlYkdMIGRyYXdpbmcgY29udGV4dFxuICovXG5TcHJpdGVSZW5kZXJlci5wcm90b3R5cGUub25Db250ZXh0Q2hhbmdlID0gZnVuY3Rpb24gKClcbntcbiAgICB2YXIgZ2wgPSB0aGlzLnJlbmRlcmVyLmdsO1xuXG4gICAgdGhpcy5NQVhfVEVYVFVFUyA9IGdsLmdldFBhcmFtZXRlcihnbC5NQVhfVEVYVFVSRV9JTUFHRV9VTklUUyk7XG5cbiAgICB0aGlzLl9zaGFkZXIgPSBnZW5lcmF0ZU11bHRpVGV4dHVyZVNoYWRlcihnbCwgdGhpcy5NQVhfVEVYVFVFUykvL25ldyBUZXh0dXJlU2hhZGVyKGdsKTtcblxuICAgIC8vIHNldHVwIGRlZmF1bHQgc2hhZGVyXG4gICAgdGhpcy5zaGFkZXIgPSB0aGlzLnJlbmRlcmVyLnNoYWRlck1hbmFnZXIuZGVmYXVsdFNoYWRlcjtcblxuICAgIC8vIGNyZWF0ZSBhIGNvdXBsZSBvZiBidWZmZXJzXG4gICAgdGhpcy52ZXJ0ZXhCdWZmZXIgPSBnbENvcmUuR0xCdWZmZXIuY3JlYXRlVmVydGV4QnVmZmVyKGdsLCBudWxsLCBnbC5EWU5BTUlDX0RSQVcpO1xuICAgIHRoaXMuaW5kZXhCdWZmZXIgPSBnbENvcmUuR0xCdWZmZXIuY3JlYXRlSW5kZXhCdWZmZXIoZ2wsIHRoaXMuaW5kaWNlcywgZ2wuU1RBVElDX0RSQVcpO1xuXG4gICAgLy8gYnVpbGQgdGhlIHZhbyBvYmplY3QgdGhhdCB3aWxsIHJlbmRlci4uXG4gICAgdGhpcy52YW8gPSBuZXcgZ2xDb3JlLlZlcnRleEFycmF5T2JqZWN0KGdsKTtcblxuICAgIHRoaXMudmFvLmFkZEluZGV4KHRoaXMuaW5kZXhCdWZmZXIpO1xuICAgIHRoaXMudmFvLmFkZEF0dHJpYnV0ZSh0aGlzLnZlcnRleEJ1ZmZlciwgdGhpcy5fc2hhZGVyLmF0dHJpYnV0ZXMuYVZlcnRleFBvc2l0aW9uLCBnbC5GTE9BVCwgZmFsc2UsIHRoaXMudmVydEJ5dGVTaXplLCAwKTtcbiAgICB0aGlzLnZhby5hZGRBdHRyaWJ1dGUodGhpcy52ZXJ0ZXhCdWZmZXIsIHRoaXMuX3NoYWRlci5hdHRyaWJ1dGVzLmFUZXh0dXJlQ29vcmQsIGdsLlVOU0lHTkVEX1NIT1JULCB0cnVlLCB0aGlzLnZlcnRCeXRlU2l6ZSwgMiAqIDQpO1xuICAgIHRoaXMudmFvLmFkZEF0dHJpYnV0ZSh0aGlzLnZlcnRleEJ1ZmZlciwgdGhpcy5fc2hhZGVyLmF0dHJpYnV0ZXMuYUNvbG9yLCBnbC5VTlNJR05FRF9CWVRFLCB0cnVlLCB0aGlzLnZlcnRCeXRlU2l6ZSwgMyAqIDQpO1xuICAgIHRoaXMudmFvLmFkZEF0dHJpYnV0ZSh0aGlzLnZlcnRleEJ1ZmZlciwgdGhpcy5fc2hhZGVyLmF0dHJpYnV0ZXMuYVRleHR1cmVJZCwgZ2wuRkxPQVQsIGZhbHNlLCB0aGlzLnZlcnRCeXRlU2l6ZSwgNCAqIDQpO1xuXG4gICAgdGhpcy5jdXJyZW50QmxlbmRNb2RlID0gOTk5OTk7XG59O1xuXG4vKipcbiAqIFJlbmRlcnMgdGhlIHNwcml0ZSBvYmplY3QuXG4gKlxuICogQHBhcmFtIHNwcml0ZSB7UElYSS5TcHJpdGV9IHRoZSBzcHJpdGUgdG8gcmVuZGVyIHdoZW4gdXNpbmcgdGhpcyBzcHJpdGViYXRjaFxuICovXG5TcHJpdGVSZW5kZXJlci5wcm90b3R5cGUucmVuZGVyID0gZnVuY3Rpb24gKHNwcml0ZSlcbntcbiAgICAvL1RPRE8gc2V0IGJsZW5kIG1vZGVzLi5cbiAgICAvLyBjaGVjayB0ZXh0dXJlLi5cbiAgICBpZiAodGhpcy5jdXJyZW50SW5kZXggPj0gdGhpcy5zaXplKVxuICAgIHtcbiAgICAgICAgdGhpcy5mbHVzaCgpO1xuICAgIH1cblxuICBcbiAgICAvLyBnZXQgdGhlIHV2cyBmb3IgdGhlIHRleHR1cmVcbiAgIFxuXG4gICAgLy8gaWYgdGhlIHV2cyBoYXZlIG5vdCB1cGRhdGVkIHRoZW4gbm8gcG9pbnQgcmVuZGVyaW5nIGp1c3QgeWV0IVxuICAgIGlmICghc3ByaXRlLnRleHR1cmUuX3V2cylcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAgLy8gcHVzaCBhIHRleHR1cmUuXG4gICAgLy8gaW5jcmVtZW50IHRoZSBiYXRjaHNpemVcbiAgICB2YXIgbmV4dFRleHR1cmUgPSAgc3ByaXRlLnRleHR1cmUuYmFzZVRleHR1cmU7XG4gICAgdmFyIGN1cnJlbnRHcm91cCA9IHRoaXMuY3VycmVudEdyb3VwO1xuICAgIHZhciBpO1xuXG4gICAgaWYodGhpcy5jdXJyZW50VGV4dHVyZSAhPT0gbmV4dFRleHR1cmUpXG4gICAge1xuICAgICAgICB0aGlzLmN1cnJlbnRUZXh0dXJlID0gbmV4dFRleHR1cmU7XG4gICAgICAgIFxuICAgICAgICBpZighbmV4dFRleHR1cmUuX2VuYWJsZWQpXG4gICAgICAgIHtcbiAgICAgICAgICAgIG5leHRUZXh0dXJlLl9lbmFibGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIG5leHRUZXh0dXJlLl9pZCA9IHRoaXMudGV4dHVyZUNvdW50O1xuICAgICAgICAgICAgXG4gICAgICAgICAgICBpZih0aGlzLnRleHR1cmVDb3VudCA9PT0gdGhpcy5NQVhfVEVYVFVFUylcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBmb3IgKCBpID0gMDsgaSA8IGN1cnJlbnRHcm91cC50ZXh0dXJlQ291bnQ7IGkrKykgXG4gICAgICAgICAgICAgICAgeyAgICAgXG4gICAgICAgICAgICAgICAgICAgIGN1cnJlbnRHcm91cC50ZXh0dXJlc1tpXS5fZW5hYmxlZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICB0aGlzLnRleHR1cmVDb3VudCA9IDA7XG5cbiAgICAgICAgICAgICAgICBjdXJyZW50R3JvdXAuc2l6ZSA9IHRoaXMuY3VycmVudEluZGV4IC0gY3VycmVudEdyb3VwLnN0YXJ0O1xuICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgY3VycmVudEdyb3VwID0gdGhpcy5jdXJyZW50R3JvdXAgPSB0aGlzLmdyb3Vwc1t0aGlzLmdyb3VwQ291bnQrK107XG4gICAgICAgICAgICAgICAgY3VycmVudEdyb3VwLnRleHR1cmVDb3VudCA9IDA7XG4gICAgICAgICAgICAgICAgY3VycmVudEdyb3VwLnN0YXJ0ID0gdGhpcy5jdXJyZW50SW5kZXg7XG4gICAgICAgICAgICAgICAgXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGN1cnJlbnRHcm91cC50ZXh0dXJlc1tjdXJyZW50R3JvdXAudGV4dHVyZUNvdW50KytdID0gbmV4dFRleHR1cmU7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnRleHR1cmVDb3VudCsrO1xuICAgIH1cblxuICAgIC8vIFRPRE8gdHJpbT8/XG4gICAgdmFyIGluZGV4ID0gdGhpcy5jdXJyZW50SW5kZXggKiB0aGlzLnZlcnRCeXRlU2l6ZTtcblxuICAgIHRoaXMuY3VycmVudEluZGV4Kys7XG5cbiAgICAvLyB1cGxvYWQgdGhlIHNwcml0ZSBlbGVtZXRucy4uLlxuICAgIC8vIHRoZXkgaGF2ZSBhbGwgcmVhZHkgYmVlbiBjYWxjdWxhdGVkIHNvIHdlIGp1c3QgbmVlZCB0byBwdXNoIHRoZW0gaW50byB0aGUgYnVmZmVyLlxuICAgIHZhciBjb2xvcnMgPSB0aGlzLmNvbG9ycztcbiAgICB2YXIgcG9zaXRpb25zID0gdGhpcy5wb3NpdGlvbnM7XG4gICAgdmFyIHZlcnRleERhdGEgPSBzcHJpdGUudmVydGV4RGF0YVxuICAgIHZhciB0aW50ID0gKHNwcml0ZS50aW50ID4+IDE2KSArIChzcHJpdGUudGludCAmIDB4ZmYwMCkgKyAoKHNwcml0ZS50aW50ICYgMHhmZikgPDwgMTYpICsgKHNwcml0ZS53b3JsZEFscGhhICogMjU1IDw8IDI0KTtcbiAgICB2YXIgdXZzID0gc3ByaXRlLnRleHR1cmUuX3V2cy51dnNfdWludDMyO1xuICAgIC8veHlcbiAgICBwb3NpdGlvbnNbaW5kZXgrK10gPSB2ZXJ0ZXhEYXRhWzBdO1xuICAgIHBvc2l0aW9uc1tpbmRleCsrXSA9IHZlcnRleERhdGFbMV07XG4gICAgdGhpcy51dnNbaW5kZXgrK10gPSB1dnNbMF07XG4gICAgY29sb3JzW2luZGV4KytdID0gdGludDtcbiAgICBwb3NpdGlvbnNbaW5kZXgrK10gPSBuZXh0VGV4dHVyZS5faWQ7IFxuICAgIFxuICAgIC8vIHh5XG4gICAgcG9zaXRpb25zW2luZGV4KytdID0gdmVydGV4RGF0YVsyXTtcbiAgICBwb3NpdGlvbnNbaW5kZXgrK10gPSB2ZXJ0ZXhEYXRhWzNdO1xuICAgIHRoaXMudXZzW2luZGV4KytdID0gdXZzWzFdO1xuICAgIGNvbG9yc1tpbmRleCsrXSA9IHRpbnQ7XG4gICAgcG9zaXRpb25zW2luZGV4KytdID0gbmV4dFRleHR1cmUuX2lkO1xuXG4gICAgIC8vIHh5XG4gICAgcG9zaXRpb25zW2luZGV4KytdID0gdmVydGV4RGF0YVs0XTtcbiAgICBwb3NpdGlvbnNbaW5kZXgrK10gPSB2ZXJ0ZXhEYXRhWzVdO1xuICAgIHRoaXMudXZzW2luZGV4KytdID0gdXZzWzJdO1xuICAgIGNvbG9yc1tpbmRleCsrXSA9IHRpbnQ7XG4gICAgcG9zaXRpb25zW2luZGV4KytdID0gbmV4dFRleHR1cmUuX2lkO1xuXG4gICAgLy8geHlcbiAgICBwb3NpdGlvbnNbaW5kZXgrK10gPSB2ZXJ0ZXhEYXRhWzZdO1xuICAgIHBvc2l0aW9uc1tpbmRleCsrXSA9IHZlcnRleERhdGFbN107XG4gICAgdGhpcy51dnNbaW5kZXgrK10gPSB1dnNbM107XG4gICAgY29sb3JzW2luZGV4KytdID0gdGludDtcbiAgICBwb3NpdGlvbnNbaW5kZXgrK10gPSBuZXh0VGV4dHVyZS5faWQ7XG59O1xuXG4vKipcbiAqIFJlbmRlcnMgdGhlIGNvbnRlbnQgYW5kIGVtcHRpZXMgdGhlIGN1cnJlbnQgYmF0Y2guXG4gKlxuICovXG5TcHJpdGVSZW5kZXJlci5wcm90b3R5cGUuZmx1c2ggPSBmdW5jdGlvbiAoKVxue1xuICAgIGlmICh0aGlzLmN1cnJlbnRJbmRleCA9PT0gMClyZXR1cm47XG5cbiAgICB2YXIgZ2wgPSB0aGlzLnJlbmRlcmVyLmdsO1xuXG5cbiAgICB0aGlzLmN1cnJlbnRHcm91cC5zaXplID0gdGhpcy5jdXJyZW50SW5kZXggLSB0aGlzLmN1cnJlbnRHcm91cC5zdGFydDtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuY3VycmVudEdyb3VwLnRleHR1cmVDb3VudDsgaSsrKSBcbiAgICB7ICAgICBcbiAgICAgICAgdGhpcy5jdXJyZW50R3JvdXAudGV4dHVyZXNbaV0uX2VuYWJsZWQgPSBmYWxzZTtcbiAgICB9O1xuICAgXG4gICAgLy8gZG8gc29tZSBzbWFydCBhcnJheSBzdHVmZi4uXG4gICAgLy8gZG91YmxlIHNpemUgc28gd2UgZG9udCBhbHdheSBzdWJhcnJheSB0aGUgZWxlbWVudHMuLlxuICAgIC8vIHVwbG9hZCB0aGUgdmVydHMgdG8gdGhlIGJ1ZmZlclxuICAgIGlmICh0aGlzLmN1cnJlbnRCYXRjaFNpemUgPiAoIHRoaXMuc2l6ZSAqIDAuNSApIClcbiAgICB7XG4gICAgICAgIHRoaXMudmVydGV4QnVmZmVyLnVwbG9hZCh0aGlzLnZlcnRpY2VzLCAwLCB0cnVlKTtcbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgLy8gbyBrIC4uIHN1YiBhcnJheSBpcyBTTE9XPj9cbiAgICAgICAgdmFyIHZpZXcgPSB0aGlzLnBvc2l0aW9ucy5zdWJhcnJheSgwLCB0aGlzLmN1cnJlbnRJbmRleCAqIHRoaXMudmVydEJ5dGVTaXplKTtcbiAgICAgICAgdGhpcy52ZXJ0ZXhCdWZmZXIudXBsb2FkKHZpZXcsIDAsIHRydWUpO1xuICAgIH1cblxuICAgIC8vIGJpbmQgc2hhZGVyLi5cbiAgICB0aGlzLnJlbmRlcmVyLmJpbmRTaGFkZXIodGhpcy5fc2hhZGVyKTtcbiAgICB0aGlzLnJlbmRlcmVyLmJsZW5kTW9kZU1hbmFnZXIuc2V0QmxlbmRNb2RlKCAwICk7XG5cbiAgICAvLy8gcmVuZGVyIHRoZSBncm91cHMuLlxuICAgIGZvciAoaSA9IDA7IGkgPCB0aGlzLmdyb3VwQ291bnQ7IGkrKykge1xuICAgICAgICBcbiAgICAgICAgdmFyIGdyb3VwID0gdGhpcy5ncm91cHNbaV07XG5cbiAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBncm91cC50ZXh0dXJlQ291bnQ7IGorKykge1xuICAgICAgICAgICAgdGhpcy5yZW5kZXJlci5iaW5kVGV4dHVyZShncm91cC50ZXh0dXJlc1tqXSwgaik7XG4gICAgICAgIH07XG5cbiAgICAgICAgZ2wuZHJhd0VsZW1lbnRzKGdsLlRSSUFOR0xFUywgZ3JvdXAuc2l6ZSAqIDYsIGdsLlVOU0lHTkVEX1NIT1JULCBncm91cC5zdGFydCAqIDYgKiAyKTtcbiAgICB9O1xuXG4gICAgLy8gcmVzZXQgZWxlbWVudHMgZm9yIHRoZSBuZXh0IGZsdXNoXG4gICAgdGhpcy5jdXJyZW50VGV4dHVyZSA9IG51bGw7XG4gICAgdGhpcy5jdXJyZW50SW5kZXggPSAwO1xuICAgIHRoaXMudGV4dHVyZUNvdW50ID0gMDtcbiAgICB0aGlzLmdyb3VwQ291bnQgPSAwO1xuICAgIFxuICAgIHRoaXMuY3VycmVudEdyb3VwID0gdGhpcy5ncm91cHNbdGhpcy5ncm91cENvdW50KytdO1xuICAgIHRoaXMuY3VycmVudEdyb3VwLnRleHR1cmVDb3VudCA9IDA7XG59O1xuXG4vKipcbiAqIFN0YXJ0cyBhIG5ldyBzcHJpdGUgYmF0Y2guXG4gKlxuICovXG5TcHJpdGVSZW5kZXJlci5wcm90b3R5cGUuc3RhcnQgPSBmdW5jdGlvbiAoKVxue1xuICAgIHRoaXMudmFvLmJpbmQoKTtcbn07XG5cblNwcml0ZVJlbmRlcmVyLnByb3RvdHlwZS5zdG9wID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLmZsdXNoKCk7XG4gICAgdGhpcy52YW8udW5iaW5kKCk7XG59O1xuLyoqXG4gKiBEZXN0cm95cyB0aGUgU3ByaXRlQmF0Y2guXG4gKlxuICovXG5TcHJpdGVSZW5kZXJlci5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy52ZXJ0ZXhCdWZmZXIuZGVzdHJveSgpO1xuICAgIHRoaXMuaW5kZXhCdWZmZXIuZGVzdHJveSgpO1xuXG4gICAgT2JqZWN0UmVuZGVyZXIucHJvdG90eXBlLmRlc3Ryb3kuY2FsbCh0aGlzKTtcblxuICAgIHRoaXMuc2hhZGVyLmRlc3Ryb3koKTtcblxuICAgIHRoaXMucmVuZGVyZXIgPSBudWxsO1xuXG4gICAgdGhpcy52ZXJ0aWNlcyA9IG51bGw7XG4gICAgdGhpcy5wb3NpdGlvbnMgPSBudWxsO1xuICAgIHRoaXMuY29sb3JzID0gbnVsbDtcbiAgICB0aGlzLmluZGljZXMgPSBudWxsO1xuXG4gICAgdGhpcy52ZXJ0ZXhCdWZmZXIgPSBudWxsO1xuICAgIHRoaXMuaW5kZXhCdWZmZXIgPSBudWxsO1xuXG4gICAgdGhpcy5zcHJpdGVzID0gbnVsbDtcbiAgICB0aGlzLnNoYWRlciA9IG51bGw7XG59O1xuIiwidmFyIFNoYWRlciA9IHJlcXVpcmUoJ3BpeGktZ2wtY29yZScpLkdMU2hhZGVyO1xuXG5cbmZ1bmN0aW9uIGdlbmVyYXRlTXVsdGlUZXh0dXJlU2hhZGVyKGdsLCBtYXhUZXh0dXJlcylcbntcbiAgICB2YXIgdmVydGV4U3JjID0gXCJwcmVjaXNpb24gbG93cCBmbG9hdDtcXG5hdHRyaWJ1dGUgdmVjMiBhVmVydGV4UG9zaXRpb247XFxuYXR0cmlidXRlIHZlYzIgYVRleHR1cmVDb29yZDtcXG5hdHRyaWJ1dGUgdmVjNCBhQ29sb3I7XFxuYXR0cmlidXRlIGZsb2F0IGFUZXh0dXJlSWQ7XFxuXFxudW5pZm9ybSBtYXQzIHByb2plY3Rpb25NYXRyaXg7XFxuXFxudmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7XFxudmFyeWluZyB2ZWM0IHZDb2xvcjtcXG52YXJ5aW5nIGZsb2F0IHZUZXh0dXJlSWQ7XFxuXFxudm9pZCBtYWluKHZvaWQpe1xcbiAgIGdsX1Bvc2l0aW9uID0gdmVjNCgocHJvamVjdGlvbk1hdHJpeCAqIHZlYzMoYVZlcnRleFBvc2l0aW9uLCAxLjApKS54eSwgMC4wLCAxLjApO1xcbiAgIHZUZXh0dXJlQ29vcmQgPSBhVGV4dHVyZUNvb3JkO1xcbiAgIHZUZXh0dXJlSWQgPSBhVGV4dHVyZUlkO1xcbiAgIHZDb2xvciA9IHZlYzQoYUNvbG9yLnJnYiAqIGFDb2xvci5hLCBhQ29sb3IuYSk7XFxufVwiO1xuICAgIHZhciBmcmFnbWVudFNyYyA9ICdwcmVjaXNpb24gbG93cCBmbG9hdDtcXG5cXG4nICsgZ2VuZXJhdGVTYW1wbGVTcmMobWF4VGV4dHVyZXMpICsgXCJcXG5cXG5cIiArIGZyYWdUZW1wbGF0ZVxuXG4gICAgZnJhZ21lbnRTcmMgPSBmcmFnbWVudFNyYy5yZXBsYWNlKC9cXCVcXCUvZ2ksICcxNicpO1xuXG4gICAgdmFyIHNoYWRlciA9IG5ldyBTaGFkZXIoZ2wsIHZlcnRleFNyYywgZnJhZ21lbnRTcmMpO1xuXG5cbiAgICB2YXIgc2FtcGxlVmFsdWVzID0gW107XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBtYXhUZXh0dXJlczsgaSsrKSB7XG4gICAgICAgIHNhbXBsZVZhbHVlc1tpXSA9IGk7XG4gICAgfTtcblxuICAgIHNoYWRlci5iaW5kKCk7XG4gICAgc2hhZGVyLnVuaWZvcm1zLnVTYW1wbGVycyA9IHNhbXBsZVZhbHVlcztcblxuICAgIHJldHVybiBzaGFkZXI7XG59XG5cbmZ1bmN0aW9uIGdlbmVyYXRlU2FtcGxlU3JjKG1heFRleHR1cmVzKVxue1xuICAgIHZhciBzcmMgPSAndmVjNCBnZXRTYW1wbGVGcm9tQXJyYXkoc2FtcGxlcjJEIHRleHR1cmVzWyUlXSwgaW50IG5keCwgdmVjMiB1dikge1xcblxcbnZlYzQgY29sb3I7J1xuXG4gICAgc3JjICs9ICdcXG4nO1xuICAgIHNyYyArPSAnXFxuJztcbiAgICBcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG1heFRleHR1cmVzOyBpKyspIFxuICAgIHtcbiAgICAgICAgaWYoaSA+IDApc3JjICs9ICdcXG5lbHNlICc7XG4gICAgICAgIGlmKGkgPCBtYXhUZXh0dXJlcy0xKXNyYyArPSAnaWYobmR4ID09ICcgKyBpICsgJyknO1xuICAgICAgICBzcmMgKz0gJ1xcbnsnO1xuICAgICAgICBzcmMgKz0gJ1xcblxcdGNvbG9yID0gdGV4dHVyZTJEKHRleHR1cmVzWycraSsnXSwgdXYpOyc7XG4gICAgICAgIHNyYyArPSAnXFxufSc7XG4gICAgfTtcblxuICAgIHNyYyArPSAnXFxuJztcbiAgICBzcmMgKz0gJ1xcbic7XG4gICAgc3JjICs9ICdyZXR1cm4gY29sb3I7JztcbiAgICBzcmMgKz0gJ1xcbn0nO1xuXG4gICAgcmV0dXJuIHNyYztcbn1cblxudmFyIGZyYWdUZW1wbGF0ZSA9IFtcblxuICAgICd2YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDsnLFxuICAgICd2YXJ5aW5nIHZlYzQgdkNvbG9yOycsXG4gICAgJ3ZhcnlpbmcgZmxvYXQgdlRleHR1cmVJZDsnLFxuICAgICd1bmlmb3JtIHNhbXBsZXIyRCB1U2FtcGxlcnNbJSVdOycsXG5cbiAgICAndm9pZCBtYWluKHZvaWQpeycsXG4gICAgICAgICdnbF9GcmFnQ29sb3IgPSBnZXRTYW1wbGVGcm9tQXJyYXkodVNhbXBsZXJzLCBpbnQodlRleHR1cmVJZCksIHZUZXh0dXJlQ29vcmQpICogdkNvbG9yOycsXG4gICAgJ30nXG5dLmpvaW4oJ1xcbicpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGdlbmVyYXRlTXVsdGlUZXh0dXJlU2hhZGVyO1xuIiwidmFyIFNwcml0ZSA9IHJlcXVpcmUoJy4uL3Nwcml0ZXMvU3ByaXRlJyksXG4gICAgVGV4dHVyZSA9IHJlcXVpcmUoJy4uL3RleHR1cmVzL1RleHR1cmUnKSxcbiAgICBtYXRoID0gcmVxdWlyZSgnLi4vbWF0aCcpLFxuICAgIHV0aWxzID0gcmVxdWlyZSgnLi4vdXRpbHMnKSxcbiAgICBDT05TVCA9IHJlcXVpcmUoJy4uL2NvbnN0Jyk7XG5cbi8qKlxuICogQSBUZXh0IE9iamVjdCB3aWxsIGNyZWF0ZSBhIGxpbmUgb3IgbXVsdGlwbGUgbGluZXMgb2YgdGV4dC4gVG8gc3BsaXQgYSBsaW5lIHlvdSBjYW4gdXNlICdcXG4nIGluIHlvdXIgdGV4dCBzdHJpbmcsXG4gKiBvciBhZGQgYSB3b3JkV3JhcCBwcm9wZXJ0eSBzZXQgdG8gdHJ1ZSBhbmQgYW5kIHdvcmRXcmFwV2lkdGggcHJvcGVydHkgd2l0aCBhIHZhbHVlIGluIHRoZSBzdHlsZSBvYmplY3QuXG4gKlxuICogQSBUZXh0IGNhbiBiZSBjcmVhdGVkIGRpcmVjdGx5IGZyb20gYSBzdHJpbmcgYW5kIGEgc3R5bGUgb2JqZWN0XG4gKlxuICogYGBganNcbiAqIHZhciB0ZXh0ID0gbmV3IFBJWEkuVGV4dCgnVGhpcyBpcyBhIHBpeGkgdGV4dCcse2ZvbnQgOiAnMjRweCBBcmlhbCcsIGZpbGwgOiAweGZmMTAxMCwgYWxpZ24gOiAnY2VudGVyJ30pO1xuICogYGBgXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLlNwcml0ZVxuICogQG1lbWJlcm9mIFBJWElcbiAqIEBwYXJhbSB0ZXh0IHtzdHJpbmd9IFRoZSBjb3B5IHRoYXQgeW91IHdvdWxkIGxpa2UgdGhlIHRleHQgdG8gZGlzcGxheVxuICogQHBhcmFtIFtzdHlsZV0ge29iamVjdH0gVGhlIHN0eWxlIHBhcmFtZXRlcnNcbiAqIEBwYXJhbSBbc3R5bGUuZm9udF0ge3N0cmluZ30gZGVmYXVsdCAnYm9sZCAyMHB4IEFyaWFsJyBUaGUgc3R5bGUgYW5kIHNpemUgb2YgdGhlIGZvbnRcbiAqIEBwYXJhbSBbc3R5bGUuZmlsbD0nYmxhY2snXSB7U3RyaW5nfE51bWJlcn0gQSBjYW52YXMgZmlsbHN0eWxlIHRoYXQgd2lsbCBiZSB1c2VkIG9uIHRoZSB0ZXh0IGUuZyAncmVkJywgJyMwMEZGMDAnXG4gKiBAcGFyYW0gW3N0eWxlLmFsaWduPSdsZWZ0J10ge3N0cmluZ30gQWxpZ25tZW50IGZvciBtdWx0aWxpbmUgdGV4dCAoJ2xlZnQnLCAnY2VudGVyJyBvciAncmlnaHQnKSwgZG9lcyBub3QgYWZmZWN0IHNpbmdsZSBsaW5lIHRleHRcbiAqIEBwYXJhbSBbc3R5bGUuc3Ryb2tlXSB7U3RyaW5nfE51bWJlcn0gQSBjYW52YXMgZmlsbHN0eWxlIHRoYXQgd2lsbCBiZSB1c2VkIG9uIHRoZSB0ZXh0IHN0cm9rZSBlLmcgJ2JsdWUnLCAnI0ZDRkYwMCdcbiAqIEBwYXJhbSBbc3R5bGUuc3Ryb2tlVGhpY2tuZXNzPTBdIHtudW1iZXJ9IEEgbnVtYmVyIHRoYXQgcmVwcmVzZW50cyB0aGUgdGhpY2tuZXNzIG9mIHRoZSBzdHJva2UuIERlZmF1bHQgaXMgMCAobm8gc3Ryb2tlKVxuICogQHBhcmFtIFtzdHlsZS53b3JkV3JhcD1mYWxzZV0ge2Jvb2xlYW59IEluZGljYXRlcyBpZiB3b3JkIHdyYXAgc2hvdWxkIGJlIHVzZWRcbiAqIEBwYXJhbSBbc3R5bGUud29yZFdyYXBXaWR0aD0xMDBdIHtudW1iZXJ9IFRoZSB3aWR0aCBhdCB3aGljaCB0ZXh0IHdpbGwgd3JhcCwgaXQgbmVlZHMgd29yZFdyYXAgdG8gYmUgc2V0IHRvIHRydWVcbiAqIEBwYXJhbSBbc3R5bGUubGluZUhlaWdodF0ge251bWJlcn0gVGhlIGxpbmUgaGVpZ2h0LCBhIG51bWJlciB0aGF0IHJlcHJlc2VudHMgdGhlIHZlcnRpY2FsIHNwYWNlIHRoYXQgYSBsZXR0ZXIgdXNlc1xuICogQHBhcmFtIFtzdHlsZS5kcm9wU2hhZG93PWZhbHNlXSB7Ym9vbGVhbn0gU2V0IGEgZHJvcCBzaGFkb3cgZm9yIHRoZSB0ZXh0XG4gKiBAcGFyYW0gW3N0eWxlLmRyb3BTaGFkb3dDb2xvcj0nIzAwMDAwMCddIHtzdHJpbmd9IEEgZmlsbCBzdHlsZSB0byBiZSB1c2VkIG9uIHRoZSBkcm9wc2hhZG93IGUuZyAncmVkJywgJyMwMEZGMDAnXG4gKiBAcGFyYW0gW3N0eWxlLmRyb3BTaGFkb3dBbmdsZT1NYXRoLlBJLzRdIHtudW1iZXJ9IFNldCBhIGFuZ2xlIG9mIHRoZSBkcm9wIHNoYWRvd1xuICogQHBhcmFtIFtzdHlsZS5kcm9wU2hhZG93RGlzdGFuY2U9NV0ge251bWJlcn0gU2V0IGEgZGlzdGFuY2Ugb2YgdGhlIGRyb3Agc2hhZG93XG4gKiBAcGFyYW0gW3N0eWxlLmRyb3BTaGFkb3dCbHVyPTBdIHtudW1iZXJ9IFNldCBhIHNoYWRvdyBibHVyIHJhZGl1c1xuICogQHBhcmFtIFtzdHlsZS5wYWRkaW5nPTBdIHtudW1iZXJ9IE9jY2FzaW9uYWxseSBzb21lIGZvbnRzIGFyZSBjcm9wcGVkIG9uIHRvcCBvciBib3R0b20uIEFkZGluZyBzb21lIHBhZGRpbmcgd2lsbFxuICogICAgICBwcmV2ZW50IHRoaXMgZnJvbSBoYXBwZW5pbmcgYnkgYWRkaW5nIHBhZGRpbmcgdG8gdGhlIHRvcCBhbmQgYm90dG9tIG9mIHRleHQgaGVpZ2h0LlxuICogQHBhcmFtIFtzdHlsZS50ZXh0QmFzZWxpbmU9J2FscGhhYmV0aWMnXSB7c3RyaW5nfSBUaGUgYmFzZWxpbmUgb2YgdGhlIHRleHQgdGhhdCBpcyByZW5kZXJlZC5cbiAqIEBwYXJhbSBbc3R5bGUubGluZUpvaW49J21pdGVyJ10ge3N0cmluZ30gVGhlIGxpbmVKb2luIHByb3BlcnR5IHNldHMgdGhlIHR5cGUgb2YgY29ybmVyIGNyZWF0ZWQsIGl0IGNhbiByZXNvbHZlXG4gKiAgICAgIHNwaWtlZCB0ZXh0IGlzc3Vlcy4gRGVmYXVsdCBpcyAnbWl0ZXInIChjcmVhdGVzIGEgc2hhcnAgY29ybmVyKS5cbiAqIEBwYXJhbSBbc3R5bGUubWl0ZXJMaW1pdD0xMF0ge251bWJlcn0gVGhlIG1pdGVyIGxpbWl0IHRvIHVzZSB3aGVuIHVzaW5nIHRoZSAnbWl0ZXInIGxpbmVKb2luIG1vZGUuIFRoaXMgY2FuIHJlZHVjZVxuICogICAgICBvciBpbmNyZWFzZSB0aGUgc3Bpa2luZXNzIG9mIHJlbmRlcmVkIHRleHQuXG4gKi9cbmZ1bmN0aW9uIFRleHQodGV4dCwgc3R5bGUsIHJlc29sdXRpb24pXG57XG4gICAgLyoqXG4gICAgICogVGhlIGNhbnZhcyBlbGVtZW50IHRoYXQgZXZlcnl0aGluZyBpcyBkcmF3biB0b1xuICAgICAqXG4gICAgICogQG1lbWJlciB7SFRNTENhbnZhc0VsZW1lbnR9XG4gICAgICovXG4gICAgdGhpcy5jYW52YXMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdjYW52YXMnKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBjYW52YXMgMmQgY29udGV4dCB0aGF0IGV2ZXJ5dGhpbmcgaXMgZHJhd24gd2l0aFxuICAgICAqIEBtZW1iZXIge0hUTUxDYW52YXNFbGVtZW50fVxuICAgICAqL1xuICAgIHRoaXMuY29udGV4dCA9IHRoaXMuY2FudmFzLmdldENvbnRleHQoJzJkJyk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgcmVzb2x1dGlvbiBvZiB0aGUgY2FudmFzLlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLnJlc29sdXRpb24gPSByZXNvbHV0aW9uIHx8IENPTlNULlJFU09MVVRJT047XG5cbiAgICAvKipcbiAgICAgKiBQcml2YXRlIHRyYWNrZXIgZm9yIHRoZSBjdXJyZW50IHRleHQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtzdHJpbmd9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl90ZXh0ID0gbnVsbDtcblxuICAgIC8qKlxuICAgICAqIFByaXZhdGUgdHJhY2tlciBmb3IgdGhlIGN1cnJlbnQgc3R5bGUuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtvYmplY3R9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9zdHlsZSA9IG51bGw7XG5cbiAgICB2YXIgdGV4dHVyZSA9IFRleHR1cmUuZnJvbUNhbnZhcyh0aGlzLmNhbnZhcyk7XG4gICAgdGV4dHVyZS50cmltID0gbmV3IG1hdGguUmVjdGFuZ2xlKCk7XG4gICAgU3ByaXRlLmNhbGwodGhpcywgdGV4dHVyZSk7XG5cbiAgICB0aGlzLnRleHQgPSB0ZXh0O1xuICAgIHRoaXMuc3R5bGUgPSBzdHlsZTtcbn1cblxuLy8gY29uc3RydWN0b3JcblRleHQucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShTcHJpdGUucHJvdG90eXBlKTtcblRleHQucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gVGV4dDtcbm1vZHVsZS5leHBvcnRzID0gVGV4dDtcblxuVGV4dC5mb250UHJvcGVydGllc0NhY2hlID0ge307XG5UZXh0LmZvbnRQcm9wZXJ0aWVzQ2FudmFzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnY2FudmFzJyk7XG5UZXh0LmZvbnRQcm9wZXJ0aWVzQ29udGV4dCA9IFRleHQuZm9udFByb3BlcnRpZXNDYW52YXMuZ2V0Q29udGV4dCgnMmQnKTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoVGV4dC5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBUaGUgd2lkdGggb2YgdGhlIFRleHQsIHNldHRpbmcgdGhpcyB3aWxsIGFjdHVhbGx5IG1vZGlmeSB0aGUgc2NhbGUgdG8gYWNoaWV2ZSB0aGUgdmFsdWUgc2V0XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuVGV4dCNcbiAgICAgKi9cbiAgICB3aWR0aDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmRpcnR5KVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlVGV4dCgpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5zY2FsZS54ICogdGhpcy5fdGV4dHVyZS5fZnJhbWUud2lkdGg7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnNjYWxlLnggPSB2YWx1ZSAvIHRoaXMuX3RleHR1cmUuX2ZyYW1lLndpZHRoO1xuICAgICAgICAgICAgdGhpcy5fd2lkdGggPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBUaGUgaGVpZ2h0IG9mIHRoZSBUZXh0LCBzZXR0aW5nIHRoaXMgd2lsbCBhY3R1YWxseSBtb2RpZnkgdGhlIHNjYWxlIHRvIGFjaGlldmUgdGhlIHZhbHVlIHNldFxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLlRleHQjXG4gICAgICovXG4gICAgaGVpZ2h0OiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgaWYgKHRoaXMuZGlydHkpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdGhpcy51cGRhdGVUZXh0KCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiAgdGhpcy5zY2FsZS55ICogdGhpcy5fdGV4dHVyZS5fZnJhbWUuaGVpZ2h0O1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5zY2FsZS55ID0gdmFsdWUgLyB0aGlzLl90ZXh0dXJlLl9mcmFtZS5oZWlnaHQ7XG4gICAgICAgICAgICB0aGlzLl9oZWlnaHQgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBTZXQgdGhlIHN0eWxlIG9mIHRoZSB0ZXh0XG4gICAgICpcbiAgICAgKiBAcGFyYW0gW3N0eWxlXSB7b2JqZWN0fSBUaGUgc3R5bGUgcGFyYW1ldGVyc1xuICAgICAqIEBwYXJhbSBbc3R5bGUuZm9udD0nYm9sZCAyMHB0IEFyaWFsJ10ge3N0cmluZ30gVGhlIHN0eWxlIGFuZCBzaXplIG9mIHRoZSBmb250XG4gICAgICogQHBhcmFtIFtzdHlsZS5maWxsPSdibGFjayddIHtzdHJpbmd8bnVtYmVyfSBBIGNhbnZhcyBmaWxsc3R5bGUgdGhhdCB3aWxsIGJlIHVzZWQgb24gdGhlIHRleHQgZWcgJ3JlZCcsICcjMDBGRjAwJ1xuICAgICAqIEBwYXJhbSBbc3R5bGUuYWxpZ249J2xlZnQnXSB7c3RyaW5nfSBBbGlnbm1lbnQgZm9yIG11bHRpbGluZSB0ZXh0ICgnbGVmdCcsICdjZW50ZXInIG9yICdyaWdodCcpLCBkb2VzIG5vdCBhZmZlY3Qgc2luZ2xlIGxpbmUgdGV4dFxuICAgICAqIEBwYXJhbSBbc3R5bGUuc3Ryb2tlPSdibGFjayddIHtzdHJpbmd8bnVtYmVyfSBBIGNhbnZhcyBmaWxsc3R5bGUgdGhhdCB3aWxsIGJlIHVzZWQgb24gdGhlIHRleHQgc3Ryb2tlIGVnICdibHVlJywgJyNGQ0ZGMDAnXG4gICAgICogQHBhcmFtIFtzdHlsZS5zdHJva2VUaGlja25lc3M9MF0ge251bWJlcn0gQSBudW1iZXIgdGhhdCByZXByZXNlbnRzIHRoZSB0aGlja25lc3Mgb2YgdGhlIHN0cm9rZS4gRGVmYXVsdCBpcyAwIChubyBzdHJva2UpXG4gICAgICogQHBhcmFtIFtzdHlsZS53b3JkV3JhcD1mYWxzZV0ge2Jvb2xlYW59IEluZGljYXRlcyBpZiB3b3JkIHdyYXAgc2hvdWxkIGJlIHVzZWRcbiAgICAgKiBAcGFyYW0gW3N0eWxlLndvcmRXcmFwV2lkdGg9MTAwXSB7bnVtYmVyfSBUaGUgd2lkdGggYXQgd2hpY2ggdGV4dCB3aWxsIHdyYXBcbiAgICAgKiBAcGFyYW0gW3N0eWxlLmxpbmVIZWlnaHRdIHtudW1iZXJ9IFRoZSBsaW5lIGhlaWdodCwgYSBudW1iZXIgdGhhdCByZXByZXNlbnRzIHRoZSB2ZXJ0aWNhbCBzcGFjZSB0aGF0IGEgbGV0dGVyIHVzZXNcbiAgICAgKiBAcGFyYW0gW3N0eWxlLmRyb3BTaGFkb3c9ZmFsc2VdIHtib29sZWFufSBTZXQgYSBkcm9wIHNoYWRvdyBmb3IgdGhlIHRleHRcbiAgICAgKiBAcGFyYW0gW3N0eWxlLmRyb3BTaGFkb3dDb2xvcj0nIzAwMDAwMCddIHtzdHJpbmd8bnVtYmVyfSBBIGZpbGwgc3R5bGUgdG8gYmUgdXNlZCBvbiB0aGUgZHJvcHNoYWRvdyBlLmcgJ3JlZCcsICcjMDBGRjAwJ1xuICAgICAqIEBwYXJhbSBbc3R5bGUuZHJvcFNoYWRvd0FuZ2xlPU1hdGguUEkvNl0ge251bWJlcn0gU2V0IGEgYW5nbGUgb2YgdGhlIGRyb3Agc2hhZG93XG4gICAgICogQHBhcmFtIFtzdHlsZS5kcm9wU2hhZG93RGlzdGFuY2U9NV0ge251bWJlcn0gU2V0IGEgZGlzdGFuY2Ugb2YgdGhlIGRyb3Agc2hhZG93XG4gICAgICogQHBhcmFtIFtzdHlsZS5kcm9wU2hhZG93Qmx1cj0wXSB7bnVtYmVyfSBTZXQgYSBzaGFkb3cgYmx1ciByYWRpdXNcbiAgICAgKiBAcGFyYW0gW3N0eWxlLnBhZGRpbmc9MF0ge251bWJlcn0gT2NjYXNpb25hbGx5IHNvbWUgZm9udHMgYXJlIGNyb3BwZWQgb24gdG9wIG9yIGJvdHRvbS4gQWRkaW5nIHNvbWUgcGFkZGluZyB3aWxsXG4gICAgICogICAgICBwcmV2ZW50IHRoaXMgZnJvbSBoYXBwZW5pbmcgYnkgYWRkaW5nIHBhZGRpbmcgdG8gdGhlIHRvcCBhbmQgYm90dG9tIG9mIHRleHQgaGVpZ2h0LlxuICAgICAqIEBwYXJhbSBbc3R5bGUudGV4dEJhc2VsaW5lPSdhbHBoYWJldGljJ10ge3N0cmluZ30gVGhlIGJhc2VsaW5lIG9mIHRoZSB0ZXh0IHRoYXQgaXMgcmVuZGVyZWQuXG4gICAgICogQHBhcmFtIFtzdHlsZS5saW5lSm9pbj0nbWl0ZXInXSB7c3RyaW5nfSBUaGUgbGluZUpvaW4gcHJvcGVydHkgc2V0cyB0aGUgdHlwZSBvZiBjb3JuZXIgY3JlYXRlZCwgaXQgY2FuIHJlc29sdmVcbiAgICAgKiAgICAgIHNwaWtlZCB0ZXh0IGlzc3Vlcy4gRGVmYXVsdCBpcyAnbWl0ZXInIChjcmVhdGVzIGEgc2hhcnAgY29ybmVyKS5cbiAgICAgKiBAcGFyYW0gW3N0eWxlLm1pdGVyTGltaXQ9MTBdIHtudW1iZXJ9IFRoZSBtaXRlciBsaW1pdCB0byB1c2Ugd2hlbiB1c2luZyB0aGUgJ21pdGVyJyBsaW5lSm9pbiBtb2RlLiBUaGlzIGNhbiByZWR1Y2VcbiAgICAgKiAgICAgIG9yIGluY3JlYXNlIHRoZSBzcGlraW5lc3Mgb2YgcmVuZGVyZWQgdGV4dC5cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5UZXh0I1xuICAgICAqL1xuICAgIHN0eWxlOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3N0eWxlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uIChzdHlsZSlcbiAgICAgICAge1xuICAgICAgICAgICAgc3R5bGUgPSBzdHlsZSB8fCB7fTtcblxuICAgICAgICAgICAgaWYgKHR5cGVvZiBzdHlsZS5maWxsID09PSAnbnVtYmVyJykge1xuICAgICAgICAgICAgICAgIHN0eWxlLmZpbGwgPSB1dGlscy5oZXgyc3RyaW5nKHN0eWxlLmZpbGwpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAodHlwZW9mIHN0eWxlLnN0cm9rZSA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgICAgICAgICBzdHlsZS5zdHJva2UgPSB1dGlscy5oZXgyc3RyaW5nKHN0eWxlLnN0cm9rZSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICh0eXBlb2Ygc3R5bGUuZHJvcFNoYWRvd0NvbG9yID09PSAnbnVtYmVyJykge1xuICAgICAgICAgICAgICAgIHN0eWxlLmRyb3BTaGFkb3dDb2xvciA9IHV0aWxzLmhleDJzdHJpbmcoc3R5bGUuZHJvcFNoYWRvd0NvbG9yKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgc3R5bGUuZm9udCA9IHN0eWxlLmZvbnQgfHwgJ2JvbGQgMjBwdCBBcmlhbCc7XG4gICAgICAgICAgICBzdHlsZS5maWxsID0gc3R5bGUuZmlsbCB8fCAnYmxhY2snO1xuICAgICAgICAgICAgc3R5bGUuYWxpZ24gPSBzdHlsZS5hbGlnbiB8fCAnbGVmdCc7XG4gICAgICAgICAgICBzdHlsZS5zdHJva2UgPSBzdHlsZS5zdHJva2UgfHwgJ2JsYWNrJzsgLy9wcm92aWRlIGEgZGVmYXVsdCwgc2VlOiBodHRwczovL2dpdGh1Yi5jb20vcGl4aWpzL3BpeGkuanMvaXNzdWVzLzEzNlxuICAgICAgICAgICAgc3R5bGUuc3Ryb2tlVGhpY2tuZXNzID0gc3R5bGUuc3Ryb2tlVGhpY2tuZXNzIHx8IDA7XG4gICAgICAgICAgICBzdHlsZS53b3JkV3JhcCA9IHN0eWxlLndvcmRXcmFwIHx8IGZhbHNlO1xuICAgICAgICAgICAgc3R5bGUud29yZFdyYXBXaWR0aCA9IHN0eWxlLndvcmRXcmFwV2lkdGggfHwgMTAwO1xuXG4gICAgICAgICAgICBzdHlsZS5kcm9wU2hhZG93ID0gc3R5bGUuZHJvcFNoYWRvdyB8fCBmYWxzZTtcbiAgICAgICAgICAgIHN0eWxlLmRyb3BTaGFkb3dDb2xvciA9IHN0eWxlLmRyb3BTaGFkb3dDb2xvciB8fCAnIzAwMDAwMCc7XG4gICAgICAgICAgICBzdHlsZS5kcm9wU2hhZG93QW5nbGUgPSBzdHlsZS5kcm9wU2hhZG93QW5nbGUgIT09IHVuZGVmaW5lZCA/IHN0eWxlLmRyb3BTaGFkb3dBbmdsZSA6IE1hdGguUEkgLyA2O1xuICAgICAgICAgICAgc3R5bGUuZHJvcFNoYWRvd0Rpc3RhbmNlID0gc3R5bGUuZHJvcFNoYWRvd0Rpc3RhbmNlICE9PSB1bmRlZmluZWQgPyBzdHlsZS5kcm9wU2hhZG93RGlzdGFuY2UgOiA1O1xuICAgICAgICAgICAgc3R5bGUuZHJvcFNoYWRvd0JsdXIgPSBzdHlsZS5kcm9wU2hhZG93Qmx1ciAhPT0gdW5kZWZpbmVkID8gc3R5bGUuZHJvcFNoYWRvd0JsdXIgOiAwOyAvL3NoYWRvd0JsdXIgaXMgJzAnIGJ5IGRlZmF1bHQgYWNjb3JkaW5nIHRvIEhUTUxcblxuICAgICAgICAgICAgc3R5bGUucGFkZGluZyA9IHN0eWxlLnBhZGRpbmcgfHwgMDtcblxuICAgICAgICAgICAgc3R5bGUudGV4dEJhc2VsaW5lID0gc3R5bGUudGV4dEJhc2VsaW5lIHx8ICdhbHBoYWJldGljJztcblxuICAgICAgICAgICAgc3R5bGUubGluZUpvaW4gPSBzdHlsZS5saW5lSm9pbiB8fCAnbWl0ZXInO1xuICAgICAgICAgICAgc3R5bGUubWl0ZXJMaW1pdCA9IHN0eWxlLm1pdGVyTGltaXQgfHwgMTA7XG5cbiAgICAgICAgICAgIHRoaXMuX3N0eWxlID0gc3R5bGU7XG4gICAgICAgICAgICB0aGlzLmRpcnR5ID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBTZXQgdGhlIGNvcHkgZm9yIHRoZSB0ZXh0IG9iamVjdC4gVG8gc3BsaXQgYSBsaW5lIHlvdSBjYW4gdXNlICdcXG4nLlxuICAgICAqXG4gICAgICogQHBhcmFtIHRleHQge3N0cmluZ30gVGhlIGNvcHkgdGhhdCB5b3Ugd291bGQgbGlrZSB0aGUgdGV4dCB0byBkaXNwbGF5XG4gICAgICogQG1lbWJlcm9mIFBJWEkuVGV4dCNcbiAgICAgKi9cbiAgICB0ZXh0OiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24oKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fdGV4dDtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodGV4dCl7XG4gICAgICAgICAgICB0ZXh0ID0gdGV4dC50b1N0cmluZygpIHx8ICcgJztcbiAgICAgICAgICAgIGlmICh0aGlzLl90ZXh0ID09PSB0ZXh0KVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuX3RleHQgPSB0ZXh0O1xuICAgICAgICAgICAgdGhpcy5kaXJ0eSA9IHRydWU7XG4gICAgICAgIH1cbiAgICB9XG59KTtcblxuLyoqXG4gKiBSZW5kZXJzIHRleHQgYW5kIHVwZGF0ZXMgaXQgd2hlbiBuZWVkZWRcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5UZXh0LnByb3RvdHlwZS51cGRhdGVUZXh0ID0gZnVuY3Rpb24gKClcbntcbiAgICB2YXIgc3R5bGUgPSB0aGlzLl9zdHlsZTtcbiAgICB0aGlzLmNvbnRleHQuZm9udCA9IHN0eWxlLmZvbnQ7XG5cbiAgICAvLyB3b3JkIHdyYXBcbiAgICAvLyBwcmVzZXJ2ZSBvcmlnaW5hbCB0ZXh0XG4gICAgdmFyIG91dHB1dFRleHQgPSBzdHlsZS53b3JkV3JhcCA/IHRoaXMud29yZFdyYXAodGhpcy5fdGV4dCkgOiB0aGlzLl90ZXh0O1xuXG4gICAgLy8gc3BsaXQgdGV4dCBpbnRvIGxpbmVzXG4gICAgdmFyIGxpbmVzID0gb3V0cHV0VGV4dC5zcGxpdCgvKD86XFxyXFxufFxccnxcXG4pLyk7XG5cbiAgICAvLyBjYWxjdWxhdGUgdGV4dCB3aWR0aFxuICAgIHZhciBsaW5lV2lkdGhzID0gbmV3IEFycmF5KGxpbmVzLmxlbmd0aCk7XG4gICAgdmFyIG1heExpbmVXaWR0aCA9IDA7XG4gICAgdmFyIGZvbnRQcm9wZXJ0aWVzID0gdGhpcy5kZXRlcm1pbmVGb250UHJvcGVydGllcyhzdHlsZS5mb250KTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxpbmVzLmxlbmd0aDsgaSsrKVxuICAgIHtcbiAgICAgICAgdmFyIGxpbmVXaWR0aCA9IHRoaXMuY29udGV4dC5tZWFzdXJlVGV4dChsaW5lc1tpXSkud2lkdGg7XG4gICAgICAgIGxpbmVXaWR0aHNbaV0gPSBsaW5lV2lkdGg7XG4gICAgICAgIG1heExpbmVXaWR0aCA9IE1hdGgubWF4KG1heExpbmVXaWR0aCwgbGluZVdpZHRoKTtcbiAgICB9XG5cbiAgICB2YXIgd2lkdGggPSBtYXhMaW5lV2lkdGggKyBzdHlsZS5zdHJva2VUaGlja25lc3M7XG4gICAgaWYgKHN0eWxlLmRyb3BTaGFkb3cpXG4gICAge1xuICAgICAgICB3aWR0aCArPSBzdHlsZS5kcm9wU2hhZG93RGlzdGFuY2U7XG4gICAgfVxuXG4gICAgdGhpcy5jYW52YXMud2lkdGggPSAoIHdpZHRoICsgdGhpcy5jb250ZXh0LmxpbmVXaWR0aCApICogdGhpcy5yZXNvbHV0aW9uO1xuXG4gICAgLy8gY2FsY3VsYXRlIHRleHQgaGVpZ2h0XG4gICAgdmFyIGxpbmVIZWlnaHQgPSB0aGlzLnN0eWxlLmxpbmVIZWlnaHQgfHwgZm9udFByb3BlcnRpZXMuZm9udFNpemUgKyBzdHlsZS5zdHJva2VUaGlja25lc3M7XG5cbiAgICB2YXIgaGVpZ2h0ID0gbGluZUhlaWdodCAqIGxpbmVzLmxlbmd0aDtcbiAgICBpZiAoc3R5bGUuZHJvcFNoYWRvdylcbiAgICB7XG4gICAgICAgIGhlaWdodCArPSBzdHlsZS5kcm9wU2hhZG93RGlzdGFuY2U7XG4gICAgfVxuXG4gICAgdGhpcy5jYW52YXMuaGVpZ2h0ID0gKCBoZWlnaHQgKyB0aGlzLl9zdHlsZS5wYWRkaW5nICogMiApICogdGhpcy5yZXNvbHV0aW9uO1xuXG4gICAgdGhpcy5jb250ZXh0LnNjYWxlKCB0aGlzLnJlc29sdXRpb24sIHRoaXMucmVzb2x1dGlvbik7XG5cbiAgICBpZiAobmF2aWdhdG9yLmlzQ29jb29uSlMpXG4gICAge1xuICAgICAgICB0aGlzLmNvbnRleHQuY2xlYXJSZWN0KDAsIDAsIHRoaXMuY2FudmFzLndpZHRoLCB0aGlzLmNhbnZhcy5oZWlnaHQpO1xuXG4gICAgfVxuXG4gICAgLy90aGlzLmNvbnRleHQuZmlsbFN0eWxlPVwiI0ZGMDAwMFwiO1xuICAgIC8vdGhpcy5jb250ZXh0LmZpbGxSZWN0KDAsIDAsIHRoaXMuY2FudmFzLndpZHRoLCB0aGlzLmNhbnZhcy5oZWlnaHQpO1xuXG4gICAgdGhpcy5jb250ZXh0LmZvbnQgPSBzdHlsZS5mb250O1xuICAgIHRoaXMuY29udGV4dC5zdHJva2VTdHlsZSA9IHN0eWxlLnN0cm9rZTtcbiAgICB0aGlzLmNvbnRleHQubGluZVdpZHRoID0gc3R5bGUuc3Ryb2tlVGhpY2tuZXNzO1xuICAgIHRoaXMuY29udGV4dC50ZXh0QmFzZWxpbmUgPSBzdHlsZS50ZXh0QmFzZWxpbmU7XG4gICAgdGhpcy5jb250ZXh0LmxpbmVKb2luID0gc3R5bGUubGluZUpvaW47XG4gICAgdGhpcy5jb250ZXh0Lm1pdGVyTGltaXQgPSBzdHlsZS5taXRlckxpbWl0O1xuXG4gICAgdmFyIGxpbmVQb3NpdGlvblg7XG4gICAgdmFyIGxpbmVQb3NpdGlvblk7XG5cbiAgICBpZiAoc3R5bGUuZHJvcFNoYWRvdylcbiAgICB7XG4gICAgICAgIGlmIChzdHlsZS5kcm9wU2hhZG93Qmx1ciA+IDApIHtcbiAgICAgICAgICAgIHRoaXMuY29udGV4dC5zaGFkb3dDb2xvciA9IHN0eWxlLmRyb3BTaGFkb3dDb2xvcjtcbiAgICAgICAgICAgIHRoaXMuY29udGV4dC5zaGFkb3dCbHVyID0gc3R5bGUuZHJvcFNoYWRvd0JsdXI7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmNvbnRleHQuZmlsbFN0eWxlID0gc3R5bGUuZHJvcFNoYWRvd0NvbG9yO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIHhTaGFkb3dPZmZzZXQgPSBNYXRoLmNvcyhzdHlsZS5kcm9wU2hhZG93QW5nbGUpICogc3R5bGUuZHJvcFNoYWRvd0Rpc3RhbmNlO1xuICAgICAgICB2YXIgeVNoYWRvd09mZnNldCA9IE1hdGguc2luKHN0eWxlLmRyb3BTaGFkb3dBbmdsZSkgKiBzdHlsZS5kcm9wU2hhZG93RGlzdGFuY2U7XG5cbiAgICAgICAgZm9yIChpID0gMDsgaSA8IGxpbmVzLmxlbmd0aDsgaSsrKVxuICAgICAgICB7XG4gICAgICAgICAgICBsaW5lUG9zaXRpb25YID0gc3R5bGUuc3Ryb2tlVGhpY2tuZXNzIC8gMjtcbiAgICAgICAgICAgIGxpbmVQb3NpdGlvblkgPSAoc3R5bGUuc3Ryb2tlVGhpY2tuZXNzIC8gMiArIGkgKiBsaW5lSGVpZ2h0KSArIGZvbnRQcm9wZXJ0aWVzLmFzY2VudDtcblxuICAgICAgICAgICAgaWYgKHN0eWxlLmFsaWduID09PSAncmlnaHQnKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGxpbmVQb3NpdGlvblggKz0gbWF4TGluZVdpZHRoIC0gbGluZVdpZHRoc1tpXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKHN0eWxlLmFsaWduID09PSAnY2VudGVyJylcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBsaW5lUG9zaXRpb25YICs9IChtYXhMaW5lV2lkdGggLSBsaW5lV2lkdGhzW2ldKSAvIDI7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChzdHlsZS5maWxsKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHRoaXMuY29udGV4dC5maWxsVGV4dChsaW5lc1tpXSwgbGluZVBvc2l0aW9uWCArIHhTaGFkb3dPZmZzZXQsIGxpbmVQb3NpdGlvblkgKyB5U2hhZG93T2Zmc2V0ICsgdGhpcy5fc3R5bGUucGFkZGluZyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvL3NldCBjYW52YXMgdGV4dCBzdHlsZXNcbiAgICB0aGlzLmNvbnRleHQuZmlsbFN0eWxlID0gc3R5bGUuZmlsbDtcblxuICAgIC8vZHJhdyBsaW5lcyBsaW5lIGJ5IGxpbmVcbiAgICBmb3IgKGkgPSAwOyBpIDwgbGluZXMubGVuZ3RoOyBpKyspXG4gICAge1xuICAgICAgICBsaW5lUG9zaXRpb25YID0gc3R5bGUuc3Ryb2tlVGhpY2tuZXNzIC8gMjtcbiAgICAgICAgbGluZVBvc2l0aW9uWSA9IChzdHlsZS5zdHJva2VUaGlja25lc3MgLyAyICsgaSAqIGxpbmVIZWlnaHQpICsgZm9udFByb3BlcnRpZXMuYXNjZW50O1xuXG4gICAgICAgIGlmIChzdHlsZS5hbGlnbiA9PT0gJ3JpZ2h0JylcbiAgICAgICAge1xuICAgICAgICAgICAgbGluZVBvc2l0aW9uWCArPSBtYXhMaW5lV2lkdGggLSBsaW5lV2lkdGhzW2ldO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHN0eWxlLmFsaWduID09PSAnY2VudGVyJylcbiAgICAgICAge1xuICAgICAgICAgICAgbGluZVBvc2l0aW9uWCArPSAobWF4TGluZVdpZHRoIC0gbGluZVdpZHRoc1tpXSkgLyAyO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHN0eWxlLnN0cm9rZSAmJiBzdHlsZS5zdHJva2VUaGlja25lc3MpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuY29udGV4dC5zdHJva2VUZXh0KGxpbmVzW2ldLCBsaW5lUG9zaXRpb25YLCBsaW5lUG9zaXRpb25ZICsgdGhpcy5fc3R5bGUucGFkZGluZyk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoc3R5bGUuZmlsbClcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5jb250ZXh0LmZpbGxUZXh0KGxpbmVzW2ldLCBsaW5lUG9zaXRpb25YLCBsaW5lUG9zaXRpb25ZICsgdGhpcy5fc3R5bGUucGFkZGluZyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLnVwZGF0ZVRleHR1cmUoKTtcbn07XG5cbi8qKlxuICogVXBkYXRlcyB0ZXh0dXJlIHNpemUgYmFzZWQgb24gY2FudmFzIHNpemVcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5UZXh0LnByb3RvdHlwZS51cGRhdGVUZXh0dXJlID0gZnVuY3Rpb24gKClcbntcbiAgICB2YXIgdGV4dHVyZSA9IHRoaXMuX3RleHR1cmU7XG5cbiAgICB0ZXh0dXJlLmJhc2VUZXh0dXJlLmhhc0xvYWRlZCA9IHRydWU7XG4gICAgdGV4dHVyZS5iYXNlVGV4dHVyZS5yZXNvbHV0aW9uID0gdGhpcy5yZXNvbHV0aW9uO1xuXG4gICAgdGV4dHVyZS5iYXNlVGV4dHVyZS53aWR0aCA9IHRoaXMuY2FudmFzLndpZHRoIC8gdGhpcy5yZXNvbHV0aW9uO1xuICAgIHRleHR1cmUuYmFzZVRleHR1cmUuaGVpZ2h0ID0gdGhpcy5jYW52YXMuaGVpZ2h0IC8gdGhpcy5yZXNvbHV0aW9uO1xuICAgIHRleHR1cmUuY3JvcC53aWR0aCA9IHRleHR1cmUuX2ZyYW1lLndpZHRoID0gdGhpcy5jYW52YXMud2lkdGggLyB0aGlzLnJlc29sdXRpb247XG4gICAgdGV4dHVyZS5jcm9wLmhlaWdodCA9IHRleHR1cmUuX2ZyYW1lLmhlaWdodCA9IHRoaXMuY2FudmFzLmhlaWdodCAvIHRoaXMucmVzb2x1dGlvbjtcblxuICAgIHRleHR1cmUudHJpbS54ID0gMDtcbiAgICB0ZXh0dXJlLnRyaW0ueSA9IC10aGlzLl9zdHlsZS5wYWRkaW5nO1xuXG4gICAgdGV4dHVyZS50cmltLndpZHRoID0gdGV4dHVyZS5fZnJhbWUud2lkdGg7XG4gICAgdGV4dHVyZS50cmltLmhlaWdodCA9IHRleHR1cmUuX2ZyYW1lLmhlaWdodCAtIHRoaXMuX3N0eWxlLnBhZGRpbmcqMjtcblxuICAgIHRoaXMuX3dpZHRoID0gdGhpcy5jYW52YXMud2lkdGggLyB0aGlzLnJlc29sdXRpb247XG4gICAgdGhpcy5faGVpZ2h0ID0gdGhpcy5jYW52YXMuaGVpZ2h0IC8gdGhpcy5yZXNvbHV0aW9uO1xuXG4gICAgdGV4dHVyZS5iYXNlVGV4dHVyZS5lbWl0KCd1cGRhdGUnLCAgdGV4dHVyZS5iYXNlVGV4dHVyZSk7XG5cbiAgICB0aGlzLmRpcnR5ID0gZmFsc2U7XG59O1xuXG4vKipcbiAqIFJlbmRlcnMgdGhlIG9iamVjdCB1c2luZyB0aGUgV2ViR0wgcmVuZGVyZXJcbiAqXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcn1cbiAqL1xuVGV4dC5wcm90b3R5cGUucmVuZGVyV2ViR0wgPSBmdW5jdGlvbiAocmVuZGVyZXIpXG57XG4gICAgaWYgKHRoaXMuZGlydHkpXG4gICAge1xuICAgICAgICAvL3RoaXMucmVzb2x1dGlvbiA9IDEvL3JlbmRlcmVyLnJlc29sdXRpb247XG5cbiAgICAgICAgdGhpcy51cGRhdGVUZXh0KCk7XG4gICAgfVxuXG4gICAgU3ByaXRlLnByb3RvdHlwZS5yZW5kZXJXZWJHTC5jYWxsKHRoaXMsIHJlbmRlcmVyKTtcbn07XG5cbi8qKlxuICogUmVuZGVycyB0aGUgb2JqZWN0IHVzaW5nIHRoZSBDYW52YXMgcmVuZGVyZXJcbiAqXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuQ2FudmFzUmVuZGVyZXJ9XG4gKiBAcHJpdmF0ZVxuICovXG5UZXh0LnByb3RvdHlwZS5fcmVuZGVyQ2FudmFzID0gZnVuY3Rpb24gKHJlbmRlcmVyKVxue1xuICAgIGlmICh0aGlzLmRpcnR5KVxuICAgIHtcbiAgICAgLy8gICB0aGlzLnJlc29sdXRpb24gPSAxLy9yZW5kZXJlci5yZXNvbHV0aW9uO1xuXG4gICAgICAgIHRoaXMudXBkYXRlVGV4dCgpO1xuICAgIH1cblxuICAgIFNwcml0ZS5wcm90b3R5cGUuX3JlbmRlckNhbnZhcy5jYWxsKHRoaXMsIHJlbmRlcmVyKTtcbn07XG5cbi8qKlxuICogQ2FsY3VsYXRlcyB0aGUgYXNjZW50LCBkZXNjZW50IGFuZCBmb250U2l6ZSBvZiBhIGdpdmVuIGZvbnRTdHlsZVxuICpcbiAqIEBwYXJhbSBmb250U3R5bGUge29iamVjdH1cbiAqIEBwcml2YXRlXG4gKi9cblRleHQucHJvdG90eXBlLmRldGVybWluZUZvbnRQcm9wZXJ0aWVzID0gZnVuY3Rpb24gKGZvbnRTdHlsZSlcbntcbiAgICB2YXIgcHJvcGVydGllcyA9IFRleHQuZm9udFByb3BlcnRpZXNDYWNoZVtmb250U3R5bGVdO1xuXG4gICAgaWYgKCFwcm9wZXJ0aWVzKVxuICAgIHtcbiAgICAgICAgcHJvcGVydGllcyA9IHt9O1xuXG4gICAgICAgIHZhciBjYW52YXMgPSBUZXh0LmZvbnRQcm9wZXJ0aWVzQ2FudmFzO1xuICAgICAgICB2YXIgY29udGV4dCA9IFRleHQuZm9udFByb3BlcnRpZXNDb250ZXh0O1xuXG4gICAgICAgIGNvbnRleHQuZm9udCA9IGZvbnRTdHlsZTtcblxuICAgICAgICB2YXIgd2lkdGggPSBNYXRoLmNlaWwoY29udGV4dC5tZWFzdXJlVGV4dCgnfE3DiXEnKS53aWR0aCk7XG4gICAgICAgIHZhciBiYXNlbGluZSA9IE1hdGguY2VpbChjb250ZXh0Lm1lYXN1cmVUZXh0KCdNJykud2lkdGgpO1xuICAgICAgICB2YXIgaGVpZ2h0ID0gMiAqIGJhc2VsaW5lO1xuXG4gICAgICAgIGJhc2VsaW5lID0gYmFzZWxpbmUgKiAxLjQgfCAwO1xuXG4gICAgICAgIGNhbnZhcy53aWR0aCA9IHdpZHRoO1xuICAgICAgICBjYW52YXMuaGVpZ2h0ID0gaGVpZ2h0O1xuXG4gICAgICAgIGNvbnRleHQuZmlsbFN0eWxlID0gJyNmMDAnO1xuICAgICAgICBjb250ZXh0LmZpbGxSZWN0KDAsIDAsIHdpZHRoLCBoZWlnaHQpO1xuXG4gICAgICAgIGNvbnRleHQuZm9udCA9IGZvbnRTdHlsZTtcblxuICAgICAgICBjb250ZXh0LnRleHRCYXNlbGluZSA9ICdhbHBoYWJldGljJztcbiAgICAgICAgY29udGV4dC5maWxsU3R5bGUgPSAnIzAwMCc7XG4gICAgICAgIGNvbnRleHQuZmlsbFRleHQoJ3xNw4lxJywgMCwgYmFzZWxpbmUpO1xuXG4gICAgICAgIHZhciBpbWFnZWRhdGEgPSBjb250ZXh0LmdldEltYWdlRGF0YSgwLCAwLCB3aWR0aCwgaGVpZ2h0KS5kYXRhO1xuICAgICAgICB2YXIgcGl4ZWxzID0gaW1hZ2VkYXRhLmxlbmd0aDtcbiAgICAgICAgdmFyIGxpbmUgPSB3aWR0aCAqIDQ7XG5cbiAgICAgICAgdmFyIGksIGo7XG5cbiAgICAgICAgdmFyIGlkeCA9IDA7XG4gICAgICAgIHZhciBzdG9wID0gZmFsc2U7XG5cbiAgICAgICAgLy8gYXNjZW50LiBzY2FuIGZyb20gdG9wIHRvIGJvdHRvbSB1bnRpbCB3ZSBmaW5kIGEgbm9uIHJlZCBwaXhlbFxuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgYmFzZWxpbmU7IGkrKylcbiAgICAgICAge1xuICAgICAgICAgICAgZm9yIChqID0gMDsgaiA8IGxpbmU7IGogKz0gNClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBpZiAoaW1hZ2VkYXRhW2lkeCArIGpdICE9PSAyNTUpXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBzdG9wID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCFzdG9wKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGlkeCArPSBsaW5lO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcHJvcGVydGllcy5hc2NlbnQgPSBiYXNlbGluZSAtIGk7XG5cbiAgICAgICAgaWR4ID0gcGl4ZWxzIC0gbGluZTtcbiAgICAgICAgc3RvcCA9IGZhbHNlO1xuXG4gICAgICAgIC8vIGRlc2NlbnQuIHNjYW4gZnJvbSBib3R0b20gdG8gdG9wIHVudGlsIHdlIGZpbmQgYSBub24gcmVkIHBpeGVsXG4gICAgICAgIGZvciAoaSA9IGhlaWdodDsgaSA+IGJhc2VsaW5lOyBpLS0pXG4gICAgICAgIHtcbiAgICAgICAgICAgIGZvciAoaiA9IDA7IGogPCBsaW5lOyBqICs9IDQpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgaWYgKGltYWdlZGF0YVtpZHggKyBqXSAhPT0gMjU1KVxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgc3RvcCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghc3RvcClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBpZHggLT0gbGluZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHByb3BlcnRpZXMuZGVzY2VudCA9IGkgLSBiYXNlbGluZTtcbiAgICAgICAgcHJvcGVydGllcy5mb250U2l6ZSA9IHByb3BlcnRpZXMuYXNjZW50ICsgcHJvcGVydGllcy5kZXNjZW50O1xuXG4gICAgICAgIFRleHQuZm9udFByb3BlcnRpZXNDYWNoZVtmb250U3R5bGVdID0gcHJvcGVydGllcztcbiAgICB9XG5cbiAgICByZXR1cm4gcHJvcGVydGllcztcbn07XG5cbi8qKlxuICogQXBwbGllcyBuZXdsaW5lcyB0byBhIHN0cmluZyB0byBoYXZlIGl0IG9wdGltYWxseSBmaXQgaW50byB0aGUgaG9yaXpvbnRhbFxuICogYm91bmRzIHNldCBieSB0aGUgVGV4dCBvYmplY3QncyB3b3JkV3JhcFdpZHRoIHByb3BlcnR5LlxuICpcbiAqIEBwYXJhbSB0ZXh0IHtzdHJpbmd9XG4gKiBAcHJpdmF0ZVxuICovXG5UZXh0LnByb3RvdHlwZS53b3JkV3JhcCA9IGZ1bmN0aW9uICh0ZXh0KVxue1xuICAgIC8vIEdyZWVkeSB3cmFwcGluZyBhbGdvcml0aG0gdGhhdCB3aWxsIHdyYXAgd29yZHMgYXMgdGhlIGxpbmUgZ3Jvd3MgbG9uZ2VyXG4gICAgLy8gdGhhbiBpdHMgaG9yaXpvbnRhbCBib3VuZHMuXG4gICAgdmFyIHJlc3VsdCA9ICcnO1xuICAgIHZhciBsaW5lcyA9IHRleHQuc3BsaXQoJ1xcbicpO1xuICAgIHZhciB3b3JkV3JhcFdpZHRoID0gdGhpcy5fc3R5bGUud29yZFdyYXBXaWR0aDtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxpbmVzLmxlbmd0aDsgaSsrKVxuICAgIHtcbiAgICAgICAgdmFyIHNwYWNlTGVmdCA9IHdvcmRXcmFwV2lkdGg7XG4gICAgICAgIHZhciB3b3JkcyA9IGxpbmVzW2ldLnNwbGl0KCcgJyk7XG4gICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgd29yZHMubGVuZ3RoOyBqKyspXG4gICAgICAgIHtcbiAgICAgICAgICAgIHZhciB3b3JkV2lkdGggPSB0aGlzLmNvbnRleHQubWVhc3VyZVRleHQod29yZHNbal0pLndpZHRoO1xuICAgICAgICAgICAgdmFyIHdvcmRXaWR0aFdpdGhTcGFjZSA9IHdvcmRXaWR0aCArIHRoaXMuY29udGV4dC5tZWFzdXJlVGV4dCgnICcpLndpZHRoO1xuICAgICAgICAgICAgaWYgKGogPT09IDAgfHwgd29yZFdpZHRoV2l0aFNwYWNlID4gc3BhY2VMZWZ0KVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIC8vIFNraXAgcHJpbnRpbmcgdGhlIG5ld2xpbmUgaWYgaXQncyB0aGUgZmlyc3Qgd29yZCBvZiB0aGUgbGluZSB0aGF0IGlzXG4gICAgICAgICAgICAgICAgLy8gZ3JlYXRlciB0aGFuIHRoZSB3b3JkIHdyYXAgd2lkdGguXG4gICAgICAgICAgICAgICAgaWYgKGogPiAwKVxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0ICs9ICdcXG4nO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXN1bHQgKz0gd29yZHNbal07XG4gICAgICAgICAgICAgICAgc3BhY2VMZWZ0ID0gd29yZFdyYXBXaWR0aCAtIHdvcmRXaWR0aDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBzcGFjZUxlZnQgLT0gd29yZFdpZHRoV2l0aFNwYWNlO1xuICAgICAgICAgICAgICAgIHJlc3VsdCArPSAnICcgKyB3b3Jkc1tqXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChpIDwgbGluZXMubGVuZ3RoLTEpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJlc3VsdCArPSAnXFxuJztcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xufTtcblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBib3VuZHMgb2YgdGhlIFRleHQgYXMgYSByZWN0YW5nbGUuIFRoZSBib3VuZHMgY2FsY3VsYXRpb24gdGFrZXMgdGhlIHdvcmxkVHJhbnNmb3JtIGludG8gYWNjb3VudC5cbiAqXG4gKiBAcGFyYW0gbWF0cml4IHtQSVhJLk1hdHJpeH0gdGhlIHRyYW5zZm9ybWF0aW9uIG1hdHJpeCBvZiB0aGUgVGV4dFxuICogQHJldHVybiB7UElYSS5SZWN0YW5nbGV9IHRoZSBmcmFtaW5nIHJlY3RhbmdsZVxuICovXG5UZXh0LnByb3RvdHlwZS5nZXRCb3VuZHMgPSBmdW5jdGlvbiAobWF0cml4KVxue1xuICAgIGlmICh0aGlzLmRpcnR5KVxuICAgIHtcbiAgICAgICAgdGhpcy51cGRhdGVUZXh0KCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIFNwcml0ZS5wcm90b3R5cGUuZ2V0Qm91bmRzLmNhbGwodGhpcywgbWF0cml4KTtcbn07XG5cbi8qKlxuICogRGVzdHJveXMgdGhpcyB0ZXh0IG9iamVjdC5cbiAqXG4gKiBAcGFyYW0gW2Rlc3Ryb3lCYXNlVGV4dHVyZT10cnVlXSB7Ym9vbGVhbn0gd2hldGhlciB0byBkZXN0cm95IHRoZSBiYXNlIHRleHR1cmUgYXMgd2VsbFxuICovXG5UZXh0LnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKGRlc3Ryb3lCYXNlVGV4dHVyZSlcbntcbiAgICAvLyBtYWtlIHN1cmUgdG8gcmVzZXQgdGhlIHRoZSBjb250ZXh0IGFuZCBjYW52YXMuLiBkb250IHdhbnQgdGhpcyBoYW5naW5nIGFyb3VuZCBpbiBtZW1vcnkhXG4gICAgdGhpcy5jb250ZXh0ID0gbnVsbDtcbiAgICB0aGlzLmNhbnZhcyA9IG51bGw7XG5cbiAgICB0aGlzLl9zdHlsZSA9IG51bGw7XG5cbiAgICB0aGlzLl90ZXh0dXJlLmRlc3Ryb3koZGVzdHJveUJhc2VUZXh0dXJlID09PSB1bmRlZmluZWQgPyB0cnVlIDogZGVzdHJveUJhc2VUZXh0dXJlKTtcbn07XG4iLCJ2YXIgdXRpbHMgPSByZXF1aXJlKCcuLi91dGlscycpLFxuICAgIENPTlNUID0gcmVxdWlyZSgnLi4vY29uc3QnKSxcbiAgICBFdmVudEVtaXR0ZXIgPSByZXF1aXJlKCdldmVudGVtaXR0ZXIzJyk7XG5cbi8qKlxuICogQSB0ZXh0dXJlIHN0b3JlcyB0aGUgaW5mb3JtYXRpb24gdGhhdCByZXByZXNlbnRzIGFuIGltYWdlLiBBbGwgdGV4dHVyZXMgaGF2ZSBhIGJhc2UgdGV4dHVyZS5cbiAqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gc291cmNlIHtJbWFnZXxDYW52YXN9IHRoZSBzb3VyY2Ugb2JqZWN0IG9mIHRoZSB0ZXh0dXJlLlxuICogQHBhcmFtIFtzY2FsZU1vZGU9UElYSS5TQ0FMRV9NT0RFUy5ERUZBVUxUXSB7bnVtYmVyfSBTZWUge0BsaW5rIFBJWEkuU0NBTEVfTU9ERVN9IGZvciBwb3NzaWJsZSB2YWx1ZXNcbiAqIEBwYXJhbSByZXNvbHV0aW9uIHtudW1iZXJ9IHRoZSByZXNvbHV0aW9uIG9mIHRoZSB0ZXh0dXJlIGZvciBkZXZpY2VzIHdpdGggZGlmZmVyZW50IHBpeGVsIHJhdGlvc1xuICovXG5mdW5jdGlvbiBCYXNlVGV4dHVyZShzb3VyY2UsIHNjYWxlTW9kZSwgcmVzb2x1dGlvbilcbntcbiAgICBFdmVudEVtaXR0ZXIuY2FsbCh0aGlzKTtcblxuICAgIHRoaXMudWlkID0gdXRpbHMudWlkKCk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgUmVzb2x1dGlvbiBvZiB0aGUgdGV4dHVyZS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLnJlc29sdXRpb24gPSByZXNvbHV0aW9uIHx8IDE7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgd2lkdGggb2YgdGhlIGJhc2UgdGV4dHVyZSBzZXQgd2hlbiB0aGUgaW1hZ2UgaGFzIGxvYWRlZFxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEByZWFkT25seVxuICAgICAqL1xuICAgIHRoaXMud2lkdGggPSAxMDA7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgaGVpZ2h0IG9mIHRoZSBiYXNlIHRleHR1cmUgc2V0IHdoZW4gdGhlIGltYWdlIGhhcyBsb2FkZWRcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAcmVhZE9ubHlcbiAgICAgKi9cbiAgICB0aGlzLmhlaWdodCA9IDEwMDtcblxuICAgIC8vIFRPRE8gZG9jc1xuICAgIC8vIHVzZWQgdG8gc3RvcmUgdGhlIGFjdHVhbCBkaW1lbnNpb25zIG9mIHRoZSBzb3VyY2VcbiAgICAvKipcbiAgICAgKiBVc2VkIHRvIHN0b3JlIHRoZSBhY3R1YWwgd2lkdGggb2YgdGhlIHNvdXJjZSBvZiB0aGlzIHRleHR1cmVcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAcmVhZE9ubHlcbiAgICAgKi9cbiAgICB0aGlzLnJlYWxXaWR0aCA9IDEwMDtcbiAgICAvKipcbiAgICAgKiBVc2VkIHRvIHN0b3JlIHRoZSBhY3R1YWwgaGVpZ2h0IG9mIHRoZSBzb3VyY2Ugb2YgdGhpcyB0ZXh0dXJlXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQHJlYWRPbmx5XG4gICAgICovXG4gICAgdGhpcy5yZWFsSGVpZ2h0ID0gMTAwO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHNjYWxlIG1vZGUgdG8gYXBwbHkgd2hlbiBzY2FsaW5nIHRoaXMgdGV4dHVyZVxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IFBJWEkuU0NBTEVfTU9ERVMuTElORUFSXG4gICAgICogQHNlZSBQSVhJLlNDQUxFX01PREVTXG4gICAgICovXG4gICAgdGhpcy5zY2FsZU1vZGUgPSBzY2FsZU1vZGUgfHwgQ09OU1QuU0NBTEVfTU9ERVMuREVGQVVMVDtcblxuICAgIC8qKlxuICAgICAqIFNldCB0byB0cnVlIG9uY2UgdGhlIGJhc2UgdGV4dHVyZSBoYXMgc3VjY2Vzc2Z1bGx5IGxvYWRlZC5cbiAgICAgKlxuICAgICAqIFRoaXMgaXMgbmV2ZXIgdHJ1ZSBpZiB0aGUgdW5kZXJseWluZyBzb3VyY2UgZmFpbHMgdG8gbG9hZCBvciBoYXMgbm8gdGV4dHVyZSBkYXRhLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKiBAcmVhZE9ubHlcbiAgICAgKi9cbiAgICB0aGlzLmhhc0xvYWRlZCA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogU2V0IHRvIHRydWUgaWYgdGhlIHNvdXJjZSBpcyBjdXJyZW50bHkgbG9hZGluZy5cbiAgICAgKlxuICAgICAqIElmIGFuIEltYWdlIHNvdXJjZSBpcyBsb2FkaW5nIHRoZSAnbG9hZGVkJyBvciAnZXJyb3InIGV2ZW50IHdpbGwgYmVcbiAgICAgKiBkaXNwYXRjaGVkIHdoZW4gdGhlIG9wZXJhdGlvbiBlbmRzLiBBbiB1bmRlcnlsaW5nIHNvdXJjZSB0aGF0IGlzXG4gICAgICogaW1tZWRpYXRlbHktYXZhaWxhYmxlIGJ5cGFzc2VzIGxvYWRpbmcgZW50aXJlbHkuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqIEByZWFkb25seVxuICAgICAqL1xuICAgIHRoaXMuaXNMb2FkaW5nID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgaW1hZ2Ugc291cmNlIHRoYXQgaXMgdXNlZCB0byBjcmVhdGUgdGhlIHRleHR1cmUuXG4gICAgICpcbiAgICAgKiBUT0RPOiBNYWtlIHRoaXMgYSBzZXR0ZXIgdGhhdCBjYWxscyBsb2FkU291cmNlKCk7XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtJbWFnZXxDYW52YXN9XG4gICAgICogQHJlYWRvbmx5XG4gICAgICovXG4gICAgdGhpcy5zb3VyY2UgPSBudWxsOyAvLyBzZXQgaW4gbG9hZFNvdXJjZSwgaWYgYXQgYWxsXG5cbiAgICAvKipcbiAgICAgKiBDb250cm9scyBpZiBSR0IgY2hhbm5lbHMgc2hvdWxkIGJlIHByZS1tdWx0aXBsaWVkIGJ5IEFscGhhICAoV2ViR0wgb25seSlcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICogQGRlZmF1bHQgdHJ1ZVxuICAgICAqL1xuICAgIHRoaXMucHJlbXVsdGlwbGllZEFscGhhID0gdHJ1ZTtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge3N0cmluZ31cbiAgICAgKi9cbiAgICB0aGlzLmltYWdlVXJsID0gbnVsbDtcblxuICAgIC8qKlxuICAgICAqIFdldGhlciBvciBub3QgdGhlIHRleHR1cmUgaXMgYSBwb3dlciBvZiB0d28sIHRyeSB0byB1c2UgcG93ZXIgb2YgdHdvIHRleHR1cmVzIGFzIG11Y2ggYXMgeW91IGNhblxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLmlzUG93ZXJPZlR3byA9IGZhbHNlO1xuXG4gICAgLy8gdXNlZCBmb3Igd2ViR0xcblxuICAgIC8qKlxuICAgICAqXG4gICAgICogU2V0IHRoaXMgdG8gdHJ1ZSBpZiBhIG1pcG1hcCBvZiB0aGlzIHRleHR1cmUgbmVlZHMgdG8gYmUgZ2VuZXJhdGVkLiBUaGlzIHZhbHVlIG5lZWRzIHRvIGJlIHNldCBiZWZvcmUgdGhlIHRleHR1cmUgaXMgdXNlZFxuICAgICAqIEFsc28gdGhlIHRleHR1cmUgbXVzdCBiZSBhIHBvd2VyIG9mIHR3byBzaXplIHRvIHdvcmtcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICovXG4gICAgdGhpcy5taXBtYXAgPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIEEgbWFwIG9mIHJlbmRlcmVyIElEcyB0byB3ZWJnbCB0ZXh0dXJlc1xuICAgICAqXG4gICAgICogQG1lbWJlciB7b2JqZWN0PG51bWJlciwgV2ViR0xUZXh0dXJlPn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX2dsVGV4dHVyZXMgPSB7fTtcbiAgICB0aGlzLl9hY3RpdmUgPSBmYWxzZTtcbiAgICB0aGlzLl9pZCA9IDA7XG4gICAgXG4gICAgLy8gaWYgbm8gc291cmNlIHBhc3NlZCBkb24ndCB0cnkgdG8gbG9hZFxuICAgIGlmIChzb3VyY2UpXG4gICAge1xuICAgICAgICB0aGlzLmxvYWRTb3VyY2Uoc291cmNlKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBGaXJlZCB3aGVuIGEgbm90LWltbWVkaWF0ZWx5LWF2YWlsYWJsZSBzb3VyY2UgZmluaXNoZXMgbG9hZGluZy5cbiAgICAgKlxuICAgICAqIEBldmVudCBsb2FkZWRcbiAgICAgKiBAbWVtYmVyb2YgUElYSS5CYXNlVGV4dHVyZSNcbiAgICAgKiBAcHJvdGVjdGVkXG4gICAgICovXG5cbiAgICAvKipcbiAgICAgKiBGaXJlZCB3aGVuIGEgbm90LWltbWVkaWF0ZWx5LWF2YWlsYWJsZSBzb3VyY2UgZmFpbHMgdG8gbG9hZC5cbiAgICAgKlxuICAgICAqIEBldmVudCBlcnJvclxuICAgICAqIEBtZW1iZXJvZiBQSVhJLkJhc2VUZXh0dXJlI1xuICAgICAqIEBwcm90ZWN0ZWRcbiAgICAgKi9cbn1cblxuQmFzZVRleHR1cmUucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShFdmVudEVtaXR0ZXIucHJvdG90eXBlKTtcbkJhc2VUZXh0dXJlLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IEJhc2VUZXh0dXJlO1xubW9kdWxlLmV4cG9ydHMgPSBCYXNlVGV4dHVyZTtcblxuLyoqXG4gKiBVcGRhdGVzIHRoZSB0ZXh0dXJlIG9uIGFsbCB0aGUgd2ViZ2wgcmVuZGVyZXJzLCB0aGlzIGFsc28gYXNzdW1lcyB0aGUgc3JjIGhhcyBjaGFuZ2VkLlxuICpcbiAqIEBmaXJlcyB1cGRhdGVcbiAqL1xuQmFzZVRleHR1cmUucHJvdG90eXBlLnVwZGF0ZSA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy5yZWFsV2lkdGggPSB0aGlzLnNvdXJjZS5uYXR1cmFsV2lkdGggfHwgdGhpcy5zb3VyY2Uud2lkdGg7XG4gICAgdGhpcy5yZWFsSGVpZ2h0ID0gdGhpcy5zb3VyY2UubmF0dXJhbEhlaWdodCB8fCB0aGlzLnNvdXJjZS5oZWlnaHQ7XG5cbiAgICB0aGlzLndpZHRoID0gdGhpcy5yZWFsV2lkdGggLyB0aGlzLnJlc29sdXRpb247XG4gICAgdGhpcy5oZWlnaHQgPSB0aGlzLnJlYWxIZWlnaHQgLyB0aGlzLnJlc29sdXRpb247XG5cbiAgICB0aGlzLmlzUG93ZXJPZlR3byA9IHV0aWxzLmlzUG93ZXJPZlR3byh0aGlzLnJlYWxXaWR0aCwgdGhpcy5yZWFsSGVpZ2h0KTtcblxuICAgIHRoaXMuZW1pdCgndXBkYXRlJywgdGhpcyk7XG59O1xuXG4vKipcbiAqIExvYWQgYSBzb3VyY2UuXG4gKlxuICogSWYgdGhlIHNvdXJjZSBpcyBub3QtaW1tZWRpYXRlbHktYXZhaWxhYmxlLCBzdWNoIGFzIGFuIGltYWdlIHRoYXQgbmVlZHMgdG8gYmVcbiAqIGRvd25sb2FkZWQsIHRoZW4gdGhlICdsb2FkZWQnIG9yICdlcnJvcicgZXZlbnQgd2lsbCBiZSBkaXNwYXRjaGVkIGluIHRoZSBmdXR1cmVcbiAqIGFuZCBgaGFzTG9hZGVkYCB3aWxsIHJlbWFpbiBmYWxzZSBhZnRlciB0aGlzIGNhbGwuXG4gKlxuICogVGhlIGxvZ2ljIHN0YXRlIGFmdGVyIGNhbGxpbmcgYGxvYWRTb3VyY2VgIGRpcmVjdGx5IG9yIGluZGlyZWN0bHkgKGVnLiBgZnJvbUltYWdlYCwgYG5ldyBCYXNlVGV4dHVyZWApIGlzOlxuICpcbiAqICAgICBpZiAodGV4dHVyZS5oYXNMb2FkZWQpXG4ge1xuICogICAgICAgIC8vIHRleHR1cmUgcmVhZHkgZm9yIHVzZVxuICogICAgIH0gZWxzZSBpZiAodGV4dHVyZS5pc0xvYWRpbmcpXG4ge1xuICogICAgICAgIC8vIGxpc3RlbiB0byAnbG9hZGVkJyBhbmQvb3IgJ2Vycm9yJyBldmVudHMgb24gdGV4dHVyZVxuICogICAgIH0gZWxzZSB7XG4gKiAgICAgICAgLy8gbm90IGxvYWRpbmcsIG5vdCBnb2luZyB0byBsb2FkIFVOTEVTUyB0aGUgc291cmNlIGlzIHJlbG9hZGVkXG4gKiAgICAgICAgLy8gKGl0IG1heSBzdGlsbCBtYWtlIHNlbnNlIHRvIGxpc3RlbiB0byB0aGUgZXZlbnRzKVxuICogICAgIH1cbiAqXG4gKiBAcHJvdGVjdGVkXG4gKiBAcGFyYW0gc291cmNlIHtJbWFnZXxDYW52YXN9IHRoZSBzb3VyY2Ugb2JqZWN0IG9mIHRoZSB0ZXh0dXJlLlxuICovXG5CYXNlVGV4dHVyZS5wcm90b3R5cGUubG9hZFNvdXJjZSA9IGZ1bmN0aW9uIChzb3VyY2UpXG57XG4gICAgdmFyIHdhc0xvYWRpbmcgPSB0aGlzLmlzTG9hZGluZztcbiAgICB0aGlzLmhhc0xvYWRlZCA9IGZhbHNlO1xuICAgIHRoaXMuaXNMb2FkaW5nID0gZmFsc2U7XG5cbiAgICBpZiAod2FzTG9hZGluZyAmJiB0aGlzLnNvdXJjZSlcbiAgICB7XG4gICAgICAgIHRoaXMuc291cmNlLm9ubG9hZCA9IG51bGw7XG4gICAgICAgIHRoaXMuc291cmNlLm9uZXJyb3IgPSBudWxsO1xuICAgIH1cblxuICAgIHRoaXMuc291cmNlID0gc291cmNlO1xuXG4gICAgLy8gQXBwbHkgc291cmNlIGlmIGxvYWRlZC4gT3RoZXJ3aXNlIHNldHVwIGFwcHJvcHJpYXRlIGxvYWRpbmcgbW9uaXRvcnMuXG4gICAgaWYgKCh0aGlzLnNvdXJjZS5jb21wbGV0ZSB8fCB0aGlzLnNvdXJjZS5nZXRDb250ZXh0KSAmJiB0aGlzLnNvdXJjZS53aWR0aCAmJiB0aGlzLnNvdXJjZS5oZWlnaHQpXG4gICAge1xuICAgICAgICB0aGlzLl9zb3VyY2VMb2FkZWQoKTtcbiAgICB9XG4gICAgZWxzZSBpZiAoIXNvdXJjZS5nZXRDb250ZXh0KVxuICAgIHtcblxuICAgICAgICAvLyBJbWFnZSBmYWlsIC8gbm90IHJlYWR5XG4gICAgICAgIHRoaXMuaXNMb2FkaW5nID0gdHJ1ZTtcblxuICAgICAgICB2YXIgc2NvcGUgPSB0aGlzO1xuXG4gICAgICAgIHNvdXJjZS5vbmxvYWQgPSBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICBzb3VyY2Uub25sb2FkID0gbnVsbDtcbiAgICAgICAgICAgIHNvdXJjZS5vbmVycm9yID0gbnVsbDtcblxuICAgICAgICAgICAgaWYgKCFzY29wZS5pc0xvYWRpbmcpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBzY29wZS5pc0xvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgICAgIHNjb3BlLl9zb3VyY2VMb2FkZWQoKTtcblxuICAgICAgICAgICAgc2NvcGUuZW1pdCgnbG9hZGVkJywgc2NvcGUpO1xuICAgICAgICB9O1xuXG4gICAgICAgIHNvdXJjZS5vbmVycm9yID0gZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgc291cmNlLm9ubG9hZCA9IG51bGw7XG4gICAgICAgICAgICBzb3VyY2Uub25lcnJvciA9IG51bGw7XG5cbiAgICAgICAgICAgIGlmICghc2NvcGUuaXNMb2FkaW5nKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgc2NvcGUuaXNMb2FkaW5nID0gZmFsc2U7XG4gICAgICAgICAgICBzY29wZS5lbWl0KCdlcnJvcicsIHNjb3BlKTtcbiAgICAgICAgfTtcblxuICAgICAgICAvLyBQZXIgaHR0cDovL3d3dy53My5vcmcvVFIvaHRtbDUvZW1iZWRkZWQtY29udGVudC0wLmh0bWwjdGhlLWltZy1lbGVtZW50XG4gICAgICAgIC8vICAgXCJUaGUgdmFsdWUgb2YgYGNvbXBsZXRlYCBjYW4gdGh1cyBjaGFuZ2Ugd2hpbGUgYSBzY3JpcHQgaXMgZXhlY3V0aW5nLlwiXG4gICAgICAgIC8vIFNvIGNvbXBsZXRlIG5lZWRzIHRvIGJlIHJlLWNoZWNrZWQgYWZ0ZXIgdGhlIGNhbGxiYWNrcyBoYXZlIGJlZW4gYWRkZWQuLlxuICAgICAgICAvLyBOT1RFOiBjb21wbGV0ZSB3aWxsIGJlIHRydWUgaWYgdGhlIGltYWdlIGhhcyBubyBzcmMgc28gYmVzdCB0byBjaGVjayBpZiB0aGUgc3JjIGlzIHNldC5cbiAgICAgICAgaWYgKHNvdXJjZS5jb21wbGV0ZSAmJiBzb3VyY2Uuc3JjKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmlzTG9hZGluZyA9IGZhbHNlO1xuXG4gICAgICAgICAgICAvLyAuLmFuZCBpZiB3ZSdyZSBjb21wbGV0ZSBub3csIG5vIG5lZWQgZm9yIGNhbGxiYWNrc1xuICAgICAgICAgICAgc291cmNlLm9ubG9hZCA9IG51bGw7XG4gICAgICAgICAgICBzb3VyY2Uub25lcnJvciA9IG51bGw7XG5cbiAgICAgICAgICAgIGlmIChzb3VyY2Uud2lkdGggJiYgc291cmNlLmhlaWdodClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9zb3VyY2VMb2FkZWQoKTtcblxuICAgICAgICAgICAgICAgIC8vIElmIGFueSBwcmV2aW91cyBzdWJzY3JpYmVycyBwb3NzaWJsZVxuICAgICAgICAgICAgICAgIGlmICh3YXNMb2FkaW5nKVxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5lbWl0KCdsb2FkZWQnLCB0aGlzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgLy8gSWYgYW55IHByZXZpb3VzIHN1YnNjcmliZXJzIHBvc3NpYmxlXG4gICAgICAgICAgICAgICAgaWYgKHdhc0xvYWRpbmcpXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmVtaXQoJ2Vycm9yJywgdGhpcyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxufTtcblxuLyoqXG4gKiBVc2VkIGludGVybmFsbHkgdG8gdXBkYXRlIHRoZSB3aWR0aCwgaGVpZ2h0LCBhbmQgc29tZSBvdGhlciB0cmFja2luZyB2YXJzIG9uY2VcbiAqIGEgc291cmNlIGhhcyBzdWNjZXNzZnVsbHkgbG9hZGVkLlxuICpcbiAqIEBwcml2YXRlXG4gKi9cbkJhc2VUZXh0dXJlLnByb3RvdHlwZS5fc291cmNlTG9hZGVkID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLmhhc0xvYWRlZCA9IHRydWU7XG4gICAgdGhpcy51cGRhdGUoKTtcbn07XG5cbi8qKlxuICogRGVzdHJveXMgdGhpcyBiYXNlIHRleHR1cmVcbiAqXG4gKi9cbkJhc2VUZXh0dXJlLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKClcbntcbiAgICBpZiAodGhpcy5pbWFnZVVybClcbiAgICB7XG4gICAgICAgIGRlbGV0ZSB1dGlscy5CYXNlVGV4dHVyZUNhY2hlW3RoaXMuaW1hZ2VVcmxdO1xuICAgICAgICBkZWxldGUgdXRpbHMuVGV4dHVyZUNhY2hlW3RoaXMuaW1hZ2VVcmxdO1xuXG4gICAgICAgIHRoaXMuaW1hZ2VVcmwgPSBudWxsO1xuXG4gICAgICAgIGlmICghbmF2aWdhdG9yLmlzQ29jb29uSlMpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuc291cmNlLnNyYyA9ICcnO1xuICAgICAgICB9XG4gICAgfVxuICAgIGVsc2UgaWYgKHRoaXMuc291cmNlICYmIHRoaXMuc291cmNlLl9waXhpSWQpXG4gICAge1xuICAgICAgICBkZWxldGUgdXRpbHMuQmFzZVRleHR1cmVDYWNoZVt0aGlzLnNvdXJjZS5fcGl4aUlkXTtcbiAgICB9XG5cbiAgICB0aGlzLnNvdXJjZSA9IG51bGw7XG5cbiAgICB0aGlzLmRpc3Bvc2UoKTtcbn07XG5cbi8qKlxuICogRnJlZXMgdGhlIHRleHR1cmUgZnJvbSBXZWJHTCBtZW1vcnkgd2l0aG91dCBkZXN0cm95aW5nIHRoaXMgdGV4dHVyZSBvYmplY3QuXG4gKiBUaGlzIG1lYW5zIHlvdSBjYW4gc3RpbGwgdXNlIHRoZSB0ZXh0dXJlIGxhdGVyIHdoaWNoIHdpbGwgdXBsb2FkIGl0IHRvIEdQVVxuICogbWVtb3J5IGFnYWluLlxuICpcbiAqL1xuQmFzZVRleHR1cmUucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKVxue1xuICAgIHRoaXMuZW1pdCgnZGlzcG9zZScsIHRoaXMpO1xuXG4gICAgLy8gdGhpcyBzaG91bGQgbm8gbG9uZ2VyIGJlIG5lZWRlZCwgdGhlIHJlbmRlcmVycyBzaG91bGQgY2xlYW51cCBhbGwgdGhlIGdsIHRleHR1cmVzLlxuICAgIC8vIHRoaXMuX2dsVGV4dHVyZXMgPSB7fTtcbn07XG5cbi8qKlxuICogQ2hhbmdlcyB0aGUgc291cmNlIGltYWdlIG9mIHRoZSB0ZXh0dXJlLlxuICogVGhlIG9yaWdpbmFsIHNvdXJjZSBtdXN0IGJlIGFuIEltYWdlIGVsZW1lbnQuXG4gKlxuICogQHBhcmFtIG5ld1NyYyB7c3RyaW5nfSB0aGUgcGF0aCBvZiB0aGUgaW1hZ2VcbiAqL1xuQmFzZVRleHR1cmUucHJvdG90eXBlLnVwZGF0ZVNvdXJjZUltYWdlID0gZnVuY3Rpb24gKG5ld1NyYylcbntcbiAgICB0aGlzLnNvdXJjZS5zcmMgPSBuZXdTcmM7XG5cbiAgICB0aGlzLmxvYWRTb3VyY2UodGhpcy5zb3VyY2UpO1xufTtcblxuLyoqXG4gKiBIZWxwZXIgZnVuY3Rpb24gdGhhdCBjcmVhdGVzIGEgYmFzZSB0ZXh0dXJlIGZyb20gdGhlIGdpdmVuIGltYWdlIHVybC5cbiAqIElmIHRoZSBpbWFnZSBpcyBub3QgaW4gdGhlIGJhc2UgdGV4dHVyZSBjYWNoZSBpdCB3aWxsIGJlIGNyZWF0ZWQgYW5kIGxvYWRlZC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAcGFyYW0gaW1hZ2VVcmwge3N0cmluZ30gVGhlIGltYWdlIHVybCBvZiB0aGUgdGV4dHVyZVxuICogQHBhcmFtIFtjcm9zc29yaWdpbj0oYXV0byldIHtib29sZWFufSBTaG91bGQgdXNlIGFub255bW91cyBDT1JTPyBEZWZhdWx0cyB0byB0cnVlIGlmIHRoZSBVUkwgaXMgbm90IGEgZGF0YS1VUkkuXG4gKiBAcGFyYW0gW3NjYWxlTW9kZT1QSVhJLlNDQUxFX01PREVTLkRFRkFVTFRdIHtudW1iZXJ9IFNlZSB7QGxpbmsgUElYSS5TQ0FMRV9NT0RFU30gZm9yIHBvc3NpYmxlIHZhbHVlc1xuICogQHJldHVybiBQSVhJLkJhc2VUZXh0dXJlXG4gKi9cbkJhc2VUZXh0dXJlLmZyb21JbWFnZSA9IGZ1bmN0aW9uIChpbWFnZVVybCwgY3Jvc3NvcmlnaW4sIHNjYWxlTW9kZSlcbntcbiAgICB2YXIgYmFzZVRleHR1cmUgPSB1dGlscy5CYXNlVGV4dHVyZUNhY2hlW2ltYWdlVXJsXTtcblxuICAgIGlmIChjcm9zc29yaWdpbiA9PT0gdW5kZWZpbmVkICYmIGltYWdlVXJsLmluZGV4T2YoJ2RhdGE6JykgIT09IDApXG4gICAge1xuICAgICAgICBjcm9zc29yaWdpbiA9IHRydWU7XG4gICAgfVxuXG4gICAgaWYgKCFiYXNlVGV4dHVyZSlcbiAgICB7XG4gICAgICAgIC8vIG5ldyBJbWFnZSgpIGJyZWFrcyB0ZXggbG9hZGluZyBpbiBzb21lIHZlcnNpb25zIG9mIENocm9tZS5cbiAgICAgICAgLy8gU2VlIGh0dHBzOi8vY29kZS5nb29nbGUuY29tL3AvY2hyb21pdW0vaXNzdWVzL2RldGFpbD9pZD0yMzgwNzFcbiAgICAgICAgdmFyIGltYWdlID0gbmV3IEltYWdlKCk7Ly9kb2N1bWVudC5jcmVhdGVFbGVtZW50KCdpbWcnKTtcbiAgICAgICAgaWYgKGNyb3Nzb3JpZ2luKVxuICAgICAgICB7XG4gICAgICAgICAgICBpbWFnZS5jcm9zc09yaWdpbiA9ICcnO1xuICAgICAgICB9XG5cbiAgICAgICAgYmFzZVRleHR1cmUgPSBuZXcgQmFzZVRleHR1cmUoaW1hZ2UsIHNjYWxlTW9kZSk7XG4gICAgICAgIGJhc2VUZXh0dXJlLmltYWdlVXJsID0gaW1hZ2VVcmw7XG5cbiAgICAgICAgaW1hZ2Uuc3JjID0gaW1hZ2VVcmw7XG5cbiAgICAgICAgdXRpbHMuQmFzZVRleHR1cmVDYWNoZVtpbWFnZVVybF0gPSBiYXNlVGV4dHVyZTtcblxuICAgICAgICAvLyBpZiB0aGVyZSBpcyBhbiBAMnggYXQgdGhlIGVuZCBvZiB0aGUgdXJsIHdlIGFyZSBnb2luZyB0byBhc3N1bWUgaXRzIGEgaGlnaHJlcyBpbWFnZVxuICAgICAgICBiYXNlVGV4dHVyZS5yZXNvbHV0aW9uID0gdXRpbHMuZ2V0UmVzb2x1dGlvbk9mVXJsKGltYWdlVXJsKTtcbiAgICB9XG5cbiAgICByZXR1cm4gYmFzZVRleHR1cmU7XG59O1xuXG4vKipcbiAqIEhlbHBlciBmdW5jdGlvbiB0aGF0IGNyZWF0ZXMgYSBiYXNlIHRleHR1cmUgZnJvbSB0aGUgZ2l2ZW4gY2FudmFzIGVsZW1lbnQuXG4gKlxuICogQHN0YXRpY1xuICogQHBhcmFtIGNhbnZhcyB7Q2FudmFzfSBUaGUgY2FudmFzIGVsZW1lbnQgc291cmNlIG9mIHRoZSB0ZXh0dXJlXG4gKiBAcGFyYW0gc2NhbGVNb2RlIHtudW1iZXJ9IFNlZSB7QGxpbmsgUElYSS5TQ0FMRV9NT0RFU30gZm9yIHBvc3NpYmxlIHZhbHVlc1xuICogQHJldHVybiBQSVhJLkJhc2VUZXh0dXJlXG4gKi9cbkJhc2VUZXh0dXJlLmZyb21DYW52YXMgPSBmdW5jdGlvbiAoY2FudmFzLCBzY2FsZU1vZGUpXG57XG4gICAgaWYgKCFjYW52YXMuX3BpeGlJZClcbiAgICB7XG4gICAgICAgIGNhbnZhcy5fcGl4aUlkID0gJ2NhbnZhc18nICsgdXRpbHMudWlkKCk7XG4gICAgfVxuXG4gICAgdmFyIGJhc2VUZXh0dXJlID0gdXRpbHMuQmFzZVRleHR1cmVDYWNoZVtjYW52YXMuX3BpeGlJZF07XG5cbiAgICBpZiAoIWJhc2VUZXh0dXJlKVxuICAgIHtcbiAgICAgICAgYmFzZVRleHR1cmUgPSBuZXcgQmFzZVRleHR1cmUoY2FudmFzLCBzY2FsZU1vZGUpO1xuICAgICAgICB1dGlscy5CYXNlVGV4dHVyZUNhY2hlW2NhbnZhcy5fcGl4aUlkXSA9IGJhc2VUZXh0dXJlO1xuICAgIH1cblxuICAgIHJldHVybiBiYXNlVGV4dHVyZTtcbn07XG4iLCJ2YXIgQmFzZVRleHR1cmUgPSByZXF1aXJlKCcuL0Jhc2VUZXh0dXJlJyksXG4gICAgVGV4dHVyZSA9IHJlcXVpcmUoJy4vVGV4dHVyZScpLFxuICAgIFJlbmRlclRhcmdldCA9IHJlcXVpcmUoJy4uL3JlbmRlcmVycy93ZWJnbC91dGlscy9SZW5kZXJUYXJnZXQnKSxcbiAgICBGaWx0ZXJNYW5hZ2VyID0gcmVxdWlyZSgnLi4vcmVuZGVyZXJzL3dlYmdsL21hbmFnZXJzL0ZpbHRlck1hbmFnZXInKSxcbiAgICBDYW52YXNCdWZmZXIgPSByZXF1aXJlKCcuLi9yZW5kZXJlcnMvY2FudmFzL3V0aWxzL0NhbnZhc0J1ZmZlcicpLFxuICAgIG1hdGggPSByZXF1aXJlKCcuLi9tYXRoJyksXG4gICAgQ09OU1QgPSByZXF1aXJlKCcuLi9jb25zdCcpLFxuICAgIHRlbXBNYXRyaXggPSBuZXcgbWF0aC5NYXRyaXgoKTtcblxuLyoqXG4gKiBBIFJlbmRlclRleHR1cmUgaXMgYSBzcGVjaWFsIHRleHR1cmUgdGhhdCBhbGxvd3MgYW55IFBpeGkgZGlzcGxheSBvYmplY3QgdG8gYmUgcmVuZGVyZWQgdG8gaXQuXG4gKlxuICogX19IaW50X186IEFsbCBEaXNwbGF5T2JqZWN0cyAoaS5lLiBTcHJpdGVzKSB0aGF0IHJlbmRlciB0byBhIFJlbmRlclRleHR1cmUgc2hvdWxkIGJlIHByZWxvYWRlZFxuICogb3RoZXJ3aXNlIGJsYWNrIHJlY3RhbmdsZXMgd2lsbCBiZSBkcmF3biBpbnN0ZWFkLlxuICpcbiAqIEEgUmVuZGVyVGV4dHVyZSB0YWtlcyBhIHNuYXBzaG90IG9mIGFueSBEaXNwbGF5IE9iamVjdCBnaXZlbiB0byBpdHMgcmVuZGVyIG1ldGhvZC4gVGhlIHBvc2l0aW9uXG4gKiBhbmQgcm90YXRpb24gb2YgdGhlIGdpdmVuIERpc3BsYXkgT2JqZWN0cyBpcyBpZ25vcmVkLiBGb3IgZXhhbXBsZTpcbiAqXG4gKiBgYGBqc1xuICogdmFyIHJlbmRlcmVyID0gUElYSS5hdXRvRGV0ZWN0UmVuZGVyZXIoMTAyNCwgMTAyNCwgeyB2aWV3OiBjYW52YXMsIHJhdGlvOiAxIH0pO1xuICogdmFyIHJlbmRlclRleHR1cmUgPSBuZXcgUElYSS5SZW5kZXJUZXh0dXJlKHJlbmRlcmVyLCA4MDAsIDYwMCk7XG4gKiB2YXIgc3ByaXRlID0gUElYSS5TcHJpdGUuZnJvbUltYWdlKFwic3Bpbk9ial8wMS5wbmdcIik7XG4gKlxuICogc3ByaXRlLnBvc2l0aW9uLnggPSA4MDAvMjtcbiAqIHNwcml0ZS5wb3NpdGlvbi55ID0gNjAwLzI7XG4gKiBzcHJpdGUuYW5jaG9yLnggPSAwLjU7XG4gKiBzcHJpdGUuYW5jaG9yLnkgPSAwLjU7XG4gKlxuICogcmVuZGVyVGV4dHVyZS5yZW5kZXIoc3ByaXRlKTtcbiAqIGBgYFxuICpcbiAqIFRoZSBTcHJpdGUgaW4gdGhpcyBjYXNlIHdpbGwgYmUgcmVuZGVyZWQgdG8gYSBwb3NpdGlvbiBvZiAwLDAuIFRvIHJlbmRlciB0aGlzIHNwcml0ZSBhdCBpdHMgYWN0dWFsXG4gKiBwb3NpdGlvbiBhIENvbnRhaW5lciBzaG91bGQgYmUgdXNlZDpcbiAqXG4gKiBgYGBqc1xuICogdmFyIGRvYyA9IG5ldyBQSVhJLkNvbnRhaW5lcigpO1xuICpcbiAqIGRvYy5hZGRDaGlsZChzcHJpdGUpO1xuICpcbiAqIHJlbmRlclRleHR1cmUucmVuZGVyKGRvYyk7ICAvLyBSZW5kZXJzIHRvIGNlbnRlciBvZiByZW5kZXJUZXh0dXJlXG4gKiBgYGBcbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuVGV4dHVyZVxuICogQG1lbWJlcm9mIFBJWElcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5DYW52YXNSZW5kZXJlcnxQSVhJLldlYkdMUmVuZGVyZXJ9IFRoZSByZW5kZXJlciB1c2VkIGZvciB0aGlzIFJlbmRlclRleHR1cmVcbiAqIEBwYXJhbSBbd2lkdGg9MTAwXSB7bnVtYmVyfSBUaGUgd2lkdGggb2YgdGhlIHJlbmRlciB0ZXh0dXJlXG4gKiBAcGFyYW0gW2hlaWdodD0xMDBdIHtudW1iZXJ9IFRoZSBoZWlnaHQgb2YgdGhlIHJlbmRlciB0ZXh0dXJlXG4gKiBAcGFyYW0gW3NjYWxlTW9kZV0ge251bWJlcn0gU2VlIHtAbGluayBQSVhJLlNDQUxFX01PREVTfSBmb3IgcG9zc2libGUgdmFsdWVzXG4gKiBAcGFyYW0gW3Jlc29sdXRpb249MV0ge251bWJlcn0gVGhlIHJlc29sdXRpb24gb2YgdGhlIHRleHR1cmUgYmVpbmcgZ2VuZXJhdGVkXG4gKi9cbmZ1bmN0aW9uIFJlbmRlclRleHR1cmUocmVuZGVyZXIsIHdpZHRoLCBoZWlnaHQsIHNjYWxlTW9kZSwgcmVzb2x1dGlvbilcbntcbiAgICBpZiAoIXJlbmRlcmVyKVxuICAgIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdVbmFibGUgdG8gY3JlYXRlIFJlbmRlclRleHR1cmUsIHlvdSBtdXN0IHBhc3MgYSByZW5kZXJlciBpbnRvIHRoZSBjb25zdHJ1Y3Rvci4nKTtcbiAgICB9XG5cbiAgICB3aWR0aCA9IHdpZHRoIHx8IDEwMDtcbiAgICBoZWlnaHQgPSBoZWlnaHQgfHwgMTAwO1xuICAgIHJlc29sdXRpb24gPSByZXNvbHV0aW9uIHx8IENPTlNULlJFU09MVVRJT047XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYmFzZSB0ZXh0dXJlIG9iamVjdCB0aGF0IHRoaXMgdGV4dHVyZSB1c2VzXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtCYXNlVGV4dHVyZX1cbiAgICAgKi9cbiAgICB2YXIgYmFzZVRleHR1cmUgPSBuZXcgQmFzZVRleHR1cmUoKTtcbiAgICBiYXNlVGV4dHVyZS53aWR0aCA9IHdpZHRoO1xuICAgIGJhc2VUZXh0dXJlLmhlaWdodCA9IGhlaWdodDtcbiAgICBiYXNlVGV4dHVyZS5yZXNvbHV0aW9uID0gcmVzb2x1dGlvbjtcbiAgICBiYXNlVGV4dHVyZS5zY2FsZU1vZGUgPSBzY2FsZU1vZGUgfHwgQ09OU1QuU0NBTEVfTU9ERVMuREVGQVVMVDtcbiAgICBiYXNlVGV4dHVyZS5oYXNMb2FkZWQgPSB0cnVlO1xuXG5cbiAgICBUZXh0dXJlLmNhbGwodGhpcyxcbiAgICAgICAgYmFzZVRleHR1cmUsXG4gICAgICAgIG5ldyBtYXRoLlJlY3RhbmdsZSgwLCAwLCB3aWR0aCwgaGVpZ2h0KVxuICAgICk7XG5cblxuICAgIC8qKlxuICAgICAqIFRoZSB3aXRoIG9mIHRoZSByZW5kZXIgdGV4dHVyZVxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMud2lkdGggPSB3aWR0aDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBoZWlnaHQgb2YgdGhlIHJlbmRlciB0ZXh0dXJlXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy5oZWlnaHQgPSBoZWlnaHQ7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgUmVzb2x1dGlvbiBvZiB0aGUgdGV4dHVyZS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLnJlc29sdXRpb24gPSByZXNvbHV0aW9uO1xuXG4gICAgLyoqXG4gICAgICogRHJhdy9yZW5kZXIgdGhlIGdpdmVuIERpc3BsYXlPYmplY3Qgb250byB0aGUgdGV4dHVyZS5cbiAgICAgKlxuICAgICAqIFRoZSBkaXNwbGF5T2JqZWN0IGFuZCBkZXNjZW5kZW50cyBhcmUgdHJhbnNmb3JtZWQgZHVyaW5nIHRoaXMgb3BlcmF0aW9uLlxuICAgICAqIElmIGB1cGRhdGVUcmFuc2Zvcm1gIGlzIHRydWUgdGhlbiB0aGUgdHJhbnNmb3JtYXRpb25zIHdpbGwgYmUgcmVzdG9yZWQgYmVmb3JlIHRoZVxuICAgICAqIG1ldGhvZCByZXR1cm5zLiBPdGhlcndpc2UgaXQgaXMgdXAgdG8gdGhlIGNhbGxpbmcgY29kZSB0byBjb3JyZWN0bHkgdXNlIG9yIHJlc2V0XG4gICAgICogdGhlIHRyYW5zZm9ybWVkIGRpc3BsYXkgb2JqZWN0cy5cbiAgICAgKlxuICAgICAqIFRoZSBkaXNwbGF5IG9iamVjdCBpcyBhbHdheXMgcmVuZGVyZWQgd2l0aCBhIHdvcmxkQWxwaGEgdmFsdWUgb2YgMS5cbiAgICAgKlxuICAgICAqIEBtZXRob2RcbiAgICAgKiBAcGFyYW0gZGlzcGxheU9iamVjdCB7UElYSS5EaXNwbGF5T2JqZWN0fSBUaGUgZGlzcGxheSBvYmplY3QgdG8gcmVuZGVyIHRoaXMgdGV4dHVyZSBvblxuICAgICAqIEBwYXJhbSBbbWF0cml4XSB7UElYSS5NYXRyaXh9IE9wdGlvbmFsIG1hdHJpeCB0byBhcHBseSB0byB0aGUgZGlzcGxheSBvYmplY3QgYmVmb3JlIHJlbmRlcmluZy5cbiAgICAgKiBAcGFyYW0gW2NsZWFyPWZhbHNlXSB7Ym9vbGVhbn0gSWYgdHJ1ZSB0aGUgdGV4dHVyZSB3aWxsIGJlIGNsZWFyZWQgYmVmb3JlIHRoZSBkaXNwbGF5T2JqZWN0IGlzIGRyYXduXG4gICAgICogQHBhcmFtIFt1cGRhdGVUcmFuc2Zvcm09dHJ1ZV0ge2Jvb2xlYW59IElmIHRydWUgdGhlIGRpc3BsYXlPYmplY3QncyB3b3JsZFRyYW5zZm9ybS93b3JsZEFscGhhIGFuZCBhbGwgY2hpbGRyZW5cbiAgICAgKiAgdHJhbnNmb3JtYXRpb25zIHdpbGwgYmUgcmVzdG9yZWQuIE5vdCByZXN0b3JpbmcgdGhpcyBpbmZvcm1hdGlvbiB3aWxsIGJlIGEgbGl0dGxlIGZhc3Rlci5cbiAgICAgKi9cbiAgICB0aGlzLnJlbmRlciA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgcmVuZGVyZXIgdGhpcyBSZW5kZXJUZXh0dXJlIHVzZXMuIEEgUmVuZGVyVGV4dHVyZSBjYW4gb25seSBiZWxvbmcgdG8gb25lIHJlbmRlcmVyIGF0IHRoZSBtb21lbnQgaWYgaXRzIHdlYkdMLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5DYW52YXNSZW5kZXJlcnxQSVhJLldlYkdMUmVuZGVyZXJ9XG4gICAgICovXG4gICAgdGhpcy5yZW5kZXJlciA9IHJlbmRlcmVyO1xuXG4gICAgaWYgKHRoaXMucmVuZGVyZXIudHlwZSA9PT0gQ09OU1QuUkVOREVSRVJfVFlQRS5XRUJHTClcbiAgICB7XG4gICAgICAgIHZhciBnbCA9IHRoaXMucmVuZGVyZXIuZ2w7XG5cbiAgICAgICAgdGhpcy50ZXh0dXJlQnVmZmVyID0gbmV3IFJlbmRlclRhcmdldChnbCwgdGhpcy53aWR0aCwgdGhpcy5oZWlnaHQsIGJhc2VUZXh0dXJlLnNjYWxlTW9kZSwgdGhpcy5yZXNvbHV0aW9uKTsvLywgdGhpcy5iYXNlVGV4dHVyZS5zY2FsZU1vZGUpO1xuICAgICAgICB0aGlzLmJhc2VUZXh0dXJlLl9nbFRleHR1cmVzW2dsLmlkXSA9IHRoaXMudGV4dHVyZUJ1ZmZlci50ZXh0dXJlO1xuXG4gICAgICAgIC8vVE9ETyByZWZhY3RvciBmaWx0ZXIgbWFuYWdlci4uIGFzIHJlYWxseSBpdHMgbm8gbG9uZ2VyIGEgbWFuYWdlciBpZiB3ZSB1c2UgaXQgaGVyZS4uXG4gICAgICAgIHRoaXMuZmlsdGVyTWFuYWdlciA9IG5ldyBGaWx0ZXJNYW5hZ2VyKHRoaXMucmVuZGVyZXIpO1xuICAgICAgICB0aGlzLmZpbHRlck1hbmFnZXIub25Db250ZXh0Q2hhbmdlKCk7XG4gICAgICAgIHRoaXMuZmlsdGVyTWFuYWdlci5yZXNpemUod2lkdGgsIGhlaWdodCk7XG4gICAgICAgIHRoaXMucmVuZGVyID0gdGhpcy5yZW5kZXJXZWJHTDtcblxuICAgICAgICAvLyB0aGUgY3JlYXRpb24gb2YgYSBmaWx0ZXIgbWFuYWdlciB1bmJpbmRzIHRoZSBidWZmZXJzLi5cbiAgICAgICAgdGhpcy5yZW5kZXJlci5jdXJyZW50UmVuZGVyZXIuc3RhcnQoKTtcbiAgICAgICAgdGhpcy5yZW5kZXJlci5jdXJyZW50UmVuZGVyVGFyZ2V0LmFjdGl2YXRlKCk7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG5cbiAgICAgICAgdGhpcy5yZW5kZXIgPSB0aGlzLnJlbmRlckNhbnZhcztcbiAgICAgICAgdGhpcy50ZXh0dXJlQnVmZmVyID0gbmV3IENhbnZhc0J1ZmZlcih0aGlzLndpZHRoKiB0aGlzLnJlc29sdXRpb24sIHRoaXMuaGVpZ2h0KiB0aGlzLnJlc29sdXRpb24pO1xuICAgICAgICB0aGlzLmJhc2VUZXh0dXJlLnNvdXJjZSA9IHRoaXMudGV4dHVyZUJ1ZmZlci5jYW52YXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKi9cbiAgICB0aGlzLnZhbGlkID0gdHJ1ZTtcblxuICAgIHRoaXMuX3VwZGF0ZVV2cygpO1xufVxuXG5SZW5kZXJUZXh0dXJlLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoVGV4dHVyZS5wcm90b3R5cGUpO1xuUmVuZGVyVGV4dHVyZS5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBSZW5kZXJUZXh0dXJlO1xubW9kdWxlLmV4cG9ydHMgPSBSZW5kZXJUZXh0dXJlO1xuXG4vKipcbiAqIFJlc2l6ZXMgdGhlIFJlbmRlclRleHR1cmUuXG4gKlxuICogQHBhcmFtIHdpZHRoIHtudW1iZXJ9IFRoZSB3aWR0aCB0byByZXNpemUgdG8uXG4gKiBAcGFyYW0gaGVpZ2h0IHtudW1iZXJ9IFRoZSBoZWlnaHQgdG8gcmVzaXplIHRvLlxuICogQHBhcmFtIHVwZGF0ZUJhc2Uge2Jvb2xlYW59IFNob3VsZCB0aGUgYmFzZVRleHR1cmUud2lkdGggYW5kIGhlaWdodCB2YWx1ZXMgYmUgcmVzaXplZCBhcyB3ZWxsP1xuICovXG5SZW5kZXJUZXh0dXJlLnByb3RvdHlwZS5yZXNpemUgPSBmdW5jdGlvbiAod2lkdGgsIGhlaWdodCwgdXBkYXRlQmFzZSlcbntcbiAgICBpZiAod2lkdGggPT09IHRoaXMud2lkdGggJiYgaGVpZ2h0ID09PSB0aGlzLmhlaWdodClcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLnZhbGlkID0gKHdpZHRoID4gMCAmJiBoZWlnaHQgPiAwKTtcblxuICAgIHRoaXMud2lkdGggPSB0aGlzLl9mcmFtZS53aWR0aCA9IHRoaXMuY3JvcC53aWR0aCA9IHdpZHRoO1xuICAgIHRoaXMuaGVpZ2h0ID0gIHRoaXMuX2ZyYW1lLmhlaWdodCA9IHRoaXMuY3JvcC5oZWlnaHQgPSBoZWlnaHQ7XG5cbiAgICBpZiAodXBkYXRlQmFzZSlcbiAgICB7XG4gICAgICAgIHRoaXMuYmFzZVRleHR1cmUud2lkdGggPSB0aGlzLndpZHRoO1xuICAgICAgICB0aGlzLmJhc2VUZXh0dXJlLmhlaWdodCA9IHRoaXMuaGVpZ2h0O1xuICAgIH1cblxuICAgIGlmICghdGhpcy52YWxpZClcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLnRleHR1cmVCdWZmZXIucmVzaXplKHRoaXMud2lkdGgsIHRoaXMuaGVpZ2h0KTtcblxuICAgIGlmKHRoaXMuZmlsdGVyTWFuYWdlcilcbiAgICB7XG4gICAgICAgIHRoaXMuZmlsdGVyTWFuYWdlci5yZXNpemUodGhpcy53aWR0aCwgdGhpcy5oZWlnaHQpO1xuICAgIH1cbn07XG5cbi8qKlxuICogQ2xlYXJzIHRoZSBSZW5kZXJUZXh0dXJlLlxuICpcbiAqL1xuUmVuZGVyVGV4dHVyZS5wcm90b3R5cGUuY2xlYXIgPSBmdW5jdGlvbiAoKVxue1xuICAgIGlmICghdGhpcy52YWxpZClcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5yZW5kZXJlci50eXBlID09PSBDT05TVC5SRU5ERVJFUl9UWVBFLldFQkdMKVxuICAgIHtcbiAgICAgICAgdGhpcy5yZW5kZXJlci5nbC5iaW5kRnJhbWVidWZmZXIodGhpcy5yZW5kZXJlci5nbC5GUkFNRUJVRkZFUiwgdGhpcy50ZXh0dXJlQnVmZmVyLmZyYW1lQnVmZmVyKTtcbiAgICB9XG5cbiAgICB0aGlzLnRleHR1cmVCdWZmZXIuY2xlYXIoKTtcbn07XG5cbi8qKlxuICogSW50ZXJuYWwgbWV0aG9kIGFzc2lnbmVkIHRvIHRoZSBgcmVuZGVyYCBwcm9wZXJ0eSBpZiB1c2luZyBhIENhbnZhc1JlbmRlcmVyLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0gZGlzcGxheU9iamVjdCB7UElYSS5EaXNwbGF5T2JqZWN0fSBUaGUgZGlzcGxheSBvYmplY3QgdG8gcmVuZGVyIHRoaXMgdGV4dHVyZSBvblxuICogQHBhcmFtIFttYXRyaXhdIHtQSVhJLk1hdHJpeH0gT3B0aW9uYWwgbWF0cml4IHRvIGFwcGx5IHRvIHRoZSBkaXNwbGF5IG9iamVjdCBiZWZvcmUgcmVuZGVyaW5nLlxuICogQHBhcmFtIFtjbGVhcj1mYWxzZV0ge2Jvb2xlYW59IElmIHRydWUgdGhlIHRleHR1cmUgd2lsbCBiZSBjbGVhcmVkIGJlZm9yZSB0aGUgZGlzcGxheU9iamVjdCBpcyBkcmF3blxuICogQHBhcmFtIFt1cGRhdGVUcmFuc2Zvcm09dHJ1ZV0ge2Jvb2xlYW59IElmIHRydWUgdGhlIGRpc3BsYXlPYmplY3QncyB3b3JsZFRyYW5zZm9ybS93b3JsZEFscGhhIGFuZCBhbGwgY2hpbGRyZW5cbiAqICB0cmFuc2Zvcm1hdGlvbnMgd2lsbCBiZSByZXN0b3JlZC4gTm90IHJlc3RvcmluZyB0aGlzIGluZm9ybWF0aW9uIHdpbGwgYmUgYSBsaXR0bGUgZmFzdGVyLlxuICovXG5SZW5kZXJUZXh0dXJlLnByb3RvdHlwZS5yZW5kZXJXZWJHTCA9IGZ1bmN0aW9uIChkaXNwbGF5T2JqZWN0LCBtYXRyaXgsIGNsZWFyLCB1cGRhdGVUcmFuc2Zvcm0pXG57XG4gICAgaWYgKCF0aGlzLnZhbGlkKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuXG4gICAgdXBkYXRlVHJhbnNmb3JtID0gKHVwZGF0ZVRyYW5zZm9ybSAhPT0gdW5kZWZpbmVkKSA/IHVwZGF0ZVRyYW5zZm9ybSA6IHRydWU7Ly8hdXBkYXRlVHJhbnNmb3JtO1xuXG4gICAgdGhpcy50ZXh0dXJlQnVmZmVyLnRyYW5zZm9ybSA9IG1hdHJpeDtcblxuICAgIC8vVE9ETyBub3QgYSBmYW4gdGhhdCB0aGlzIGlzIGhlcmUuLi4gaXQgd2lsbCBtb3ZlIVxuICAgIHRoaXMudGV4dHVyZUJ1ZmZlci5hY3RpdmF0ZSgpO1xuXG4gICAgLy8gc2V0V29ybGQgQWxwaGEgdG8gZW5zdXJlIHRoYXQgdGhlIG9iamVjdCBpcyByZW5kZXJlciBhdCBmdWxsIG9wYWNpdHlcbiAgICBkaXNwbGF5T2JqZWN0LndvcmxkQWxwaGEgPSAxO1xuXG4gICAgaWYgKHVwZGF0ZVRyYW5zZm9ybSlcbiAgICB7XG5cbiAgICAgICAgLy8gcmVzZXQgdGhlIG1hdHJpeCBvZiB0aGUgZGlzcGxhdHlPYmplY3QuLlxuICAgICAgICBkaXNwbGF5T2JqZWN0LndvcmxkVHJhbnNmb3JtLmlkZW50aXR5KCk7XG5cbiAgICAgICAgZGlzcGxheU9iamVjdC5jdXJyZW50Qm91bmRzID0gbnVsbDtcblxuICAgICAgICAvLyBUaW1lIHRvIHVwZGF0ZSBhbGwgdGhlIGNoaWxkcmVuIG9mIHRoZSBkaXNwbGF5T2JqZWN0IHdpdGggdGhlIG5ldyBtYXRyaXguLlxuICAgICAgICB2YXIgY2hpbGRyZW4gPSBkaXNwbGF5T2JqZWN0LmNoaWxkcmVuO1xuICAgICAgICB2YXIgaSwgajtcblxuICAgICAgICBmb3IgKGkgPSAwLCBqID0gY2hpbGRyZW4ubGVuZ3RoOyBpIDwgajsgKytpKVxuICAgICAgICB7XG4gICAgICAgICAgICBjaGlsZHJlbltpXS51cGRhdGVUcmFuc2Zvcm0oKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vVE9ETyByZW5hbWUgdGV4dHVyZUJ1ZmZlciB0byByZW5kZXJUYXJnZXQuLlxuICAgIHZhciB0ZW1wID0gIHRoaXMucmVuZGVyZXIuZmlsdGVyTWFuYWdlcjtcblxuICAgIHRoaXMucmVuZGVyZXIuZmlsdGVyTWFuYWdlciA9IHRoaXMuZmlsdGVyTWFuYWdlcjtcbiAgICB0aGlzLnJlbmRlcmVyLnJlbmRlckRpc3BsYXlPYmplY3QoZGlzcGxheU9iamVjdCwgdGhpcy50ZXh0dXJlQnVmZmVyLCBjbGVhcik7XG5cbiAgICB0aGlzLnJlbmRlcmVyLmZpbHRlck1hbmFnZXIgPSB0ZW1wO1xufTtcblxuXG4vKipcbiAqIEludGVybmFsIG1ldGhvZCBhc3NpZ25lZCB0byB0aGUgYHJlbmRlcmAgcHJvcGVydHkgaWYgdXNpbmcgYSBDYW52YXNSZW5kZXJlci5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIGRpc3BsYXlPYmplY3Qge1BJWEkuRGlzcGxheU9iamVjdH0gVGhlIGRpc3BsYXkgb2JqZWN0IHRvIHJlbmRlciB0aGlzIHRleHR1cmUgb25cbiAqIEBwYXJhbSBbbWF0cml4XSB7UElYSS5NYXRyaXh9IE9wdGlvbmFsIG1hdHJpeCB0byBhcHBseSB0byB0aGUgZGlzcGxheSBvYmplY3QgYmVmb3JlIHJlbmRlcmluZy5cbiAqIEBwYXJhbSBbY2xlYXJdIHtib29sZWFufSBJZiB0cnVlIHRoZSB0ZXh0dXJlIHdpbGwgYmUgY2xlYXJlZCBiZWZvcmUgdGhlIGRpc3BsYXlPYmplY3QgaXMgZHJhd25cbiAqL1xuUmVuZGVyVGV4dHVyZS5wcm90b3R5cGUucmVuZGVyQ2FudmFzID0gZnVuY3Rpb24gKGRpc3BsYXlPYmplY3QsIG1hdHJpeCwgY2xlYXIsIHVwZGF0ZVRyYW5zZm9ybSlcbntcbiAgICBpZiAoIXRoaXMudmFsaWQpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdXBkYXRlVHJhbnNmb3JtID0gISF1cGRhdGVUcmFuc2Zvcm07XG5cbiAgICB2YXIgd3QgPSB0ZW1wTWF0cml4O1xuXG4gICAgd3QuaWRlbnRpdHkoKTtcblxuICAgIGlmIChtYXRyaXgpXG4gICAge1xuICAgICAgICB3dC5hcHBlbmQobWF0cml4KTtcbiAgICB9XG5cbiAgICB2YXIgY2FjaGVkV3QgPSBkaXNwbGF5T2JqZWN0LndvcmxkVHJhbnNmb3JtO1xuICAgIGRpc3BsYXlPYmplY3Qud29ybGRUcmFuc2Zvcm0gPSB3dDtcblxuICAgIC8vIHNldFdvcmxkIEFscGhhIHRvIGVuc3VyZSB0aGF0IHRoZSBvYmplY3QgaXMgcmVuZGVyZXIgYXQgZnVsbCBvcGFjaXR5XG4gICAgZGlzcGxheU9iamVjdC53b3JsZEFscGhhID0gMTtcblxuICAgIC8vIFRpbWUgdG8gdXBkYXRlIGFsbCB0aGUgY2hpbGRyZW4gb2YgdGhlIGRpc3BsYXlPYmplY3Qgd2l0aCB0aGUgbmV3IG1hdHJpeC4uXG4gICAgdmFyIGNoaWxkcmVuID0gZGlzcGxheU9iamVjdC5jaGlsZHJlbjtcbiAgICB2YXIgaSwgajtcblxuICAgIGZvciAoaSA9IDAsIGogPSBjaGlsZHJlbi5sZW5ndGg7IGkgPCBqOyArK2kpXG4gICAge1xuICAgICAgICBjaGlsZHJlbltpXS51cGRhdGVUcmFuc2Zvcm0oKTtcbiAgICB9XG5cbiAgICBpZiAoY2xlYXIpXG4gICAge1xuICAgICAgICB0aGlzLnRleHR1cmVCdWZmZXIuY2xlYXIoKTtcbiAgICB9XG5cblxuLy8gICAgdGhpcy50ZXh0dXJlQnVmZmVyLlxuICAgIHZhciBjb250ZXh0ID0gdGhpcy50ZXh0dXJlQnVmZmVyLmNvbnRleHQ7XG5cbiAgICB2YXIgcmVhbFJlc29sdXRpb24gPSB0aGlzLnJlbmRlcmVyLnJlc29sdXRpb247XG5cbiAgICB0aGlzLnJlbmRlcmVyLnJlc29sdXRpb24gPSB0aGlzLnJlc29sdXRpb247XG5cbiAgICB0aGlzLnJlbmRlcmVyLnJlbmRlckRpc3BsYXlPYmplY3QoZGlzcGxheU9iamVjdCwgY29udGV4dCk7XG5cbiAgICB0aGlzLnJlbmRlcmVyLnJlc29sdXRpb24gPSByZWFsUmVzb2x1dGlvbjtcblxuICAgIGlmKGRpc3BsYXlPYmplY3Qud29ybGRUcmFuc2Zvcm0gPT09IHd0KVxuICAgIHtcbiAgICAgICAgLy8gZml4ZXMgY2FjaGVBc0JpdG1hcCBIYXBwZW5pbmcgZHVyaW5nIHRoZSBhYm92ZS4uXG4gICAgICAgIGRpc3BsYXlPYmplY3Qud29ybGRUcmFuc2Zvcm0gPSBjYWNoZWRXdDtcbiAgICB9XG5cbn07XG5cbi8qKlxuICogRGVzdHJveXMgdGhpcyB0ZXh0dXJlXG4gKlxuICogQHBhcmFtIGRlc3Ryb3lCYXNlIHtib29sZWFufSBXaGV0aGVyIHRvIGRlc3Ryb3kgdGhlIGJhc2UgdGV4dHVyZSBhcyB3ZWxsXG4gKi9cblJlbmRlclRleHR1cmUucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoKVxue1xuICAgIFRleHR1cmUucHJvdG90eXBlLmRlc3Ryb3kuY2FsbCh0aGlzLCB0cnVlKTtcblxuICAgIHRoaXMudGV4dHVyZUJ1ZmZlci5kZXN0cm95KCk7XG5cbiAgICAvLyBkZXN0cm95IHRoZSBmaWx0ZXJtYW5hZ2VyLi5cbiAgICBpZih0aGlzLmZpbHRlck1hbmFnZXIpXG4gICAge1xuICAgICAgICB0aGlzLmZpbHRlck1hbmFnZXIuZGVzdHJveSgpO1xuICAgIH1cblxuICAgIHRoaXMucmVuZGVyZXIgPSBudWxsO1xufTtcblxuLyoqXG4gKiBXaWxsIHJldHVybiBhIEhUTUwgSW1hZ2Ugb2YgdGhlIHRleHR1cmVcbiAqXG4gKiBAcmV0dXJuIHtJbWFnZX1cbiAqL1xuUmVuZGVyVGV4dHVyZS5wcm90b3R5cGUuZ2V0SW1hZ2UgPSBmdW5jdGlvbiAoKVxue1xuICAgIHZhciBpbWFnZSA9IG5ldyBJbWFnZSgpO1xuICAgIGltYWdlLnNyYyA9IHRoaXMuZ2V0QmFzZTY0KCk7XG4gICAgcmV0dXJuIGltYWdlO1xufTtcblxuLyoqXG4gKiBXaWxsIHJldHVybiBhIGEgYmFzZTY0IGVuY29kZWQgc3RyaW5nIG9mIHRoaXMgdGV4dHVyZS4gSXQgd29ya3MgYnkgY2FsbGluZyBSZW5kZXJUZXh0dXJlLmdldENhbnZhcyBhbmQgdGhlbiBydW5uaW5nIHRvRGF0YVVSTCBvbiB0aGF0LlxuICpcbiAqIEByZXR1cm4ge3N0cmluZ30gQSBiYXNlNjQgZW5jb2RlZCBzdHJpbmcgb2YgdGhlIHRleHR1cmUuXG4gKi9cblJlbmRlclRleHR1cmUucHJvdG90eXBlLmdldEJhc2U2NCA9IGZ1bmN0aW9uICgpXG57XG4gICAgcmV0dXJuIHRoaXMuZ2V0Q2FudmFzKCkudG9EYXRhVVJMKCk7XG59O1xuXG4vKipcbiAqIENyZWF0ZXMgYSBDYW52YXMgZWxlbWVudCwgcmVuZGVycyB0aGlzIFJlbmRlclRleHR1cmUgdG8gaXQgYW5kIHRoZW4gcmV0dXJucyBpdC5cbiAqXG4gKiBAcmV0dXJuIHtIVE1MQ2FudmFzRWxlbWVudH0gQSBDYW52YXMgZWxlbWVudCB3aXRoIHRoZSB0ZXh0dXJlIHJlbmRlcmVkIG9uLlxuICovXG5SZW5kZXJUZXh0dXJlLnByb3RvdHlwZS5nZXRDYW52YXMgPSBmdW5jdGlvbiAoKVxue1xuICAgIGlmICh0aGlzLnJlbmRlcmVyLnR5cGUgPT09IENPTlNULlJFTkRFUkVSX1RZUEUuV0VCR0wpXG4gICAge1xuICAgICAgICB2YXIgZ2wgPSB0aGlzLnJlbmRlcmVyLmdsO1xuICAgICAgICB2YXIgd2lkdGggPSB0aGlzLnRleHR1cmVCdWZmZXIuc2l6ZS53aWR0aDtcbiAgICAgICAgdmFyIGhlaWdodCA9IHRoaXMudGV4dHVyZUJ1ZmZlci5zaXplLmhlaWdodDtcblxuICAgICAgICB2YXIgd2ViR0xQaXhlbHMgPSBuZXcgVWludDhBcnJheSg0ICogd2lkdGggKiBoZWlnaHQpO1xuXG4gICAgICAgIGdsLmJpbmRGcmFtZWJ1ZmZlcihnbC5GUkFNRUJVRkZFUiwgdGhpcy50ZXh0dXJlQnVmZmVyLmZyYW1lQnVmZmVyKTtcbiAgICAgICAgZ2wucmVhZFBpeGVscygwLCAwLCB3aWR0aCwgaGVpZ2h0LCBnbC5SR0JBLCBnbC5VTlNJR05FRF9CWVRFLCB3ZWJHTFBpeGVscyk7XG4gICAgICAgIGdsLmJpbmRGcmFtZWJ1ZmZlcihnbC5GUkFNRUJVRkZFUiwgbnVsbCk7XG5cbiAgICAgICAgdmFyIHRlbXBDYW52YXMgPSBuZXcgQ2FudmFzQnVmZmVyKHdpZHRoLCBoZWlnaHQpO1xuICAgICAgICB2YXIgY2FudmFzRGF0YSA9IHRlbXBDYW52YXMuY29udGV4dC5nZXRJbWFnZURhdGEoMCwgMCwgd2lkdGgsIGhlaWdodCk7XG4gICAgICAgIGNhbnZhc0RhdGEuZGF0YS5zZXQod2ViR0xQaXhlbHMpO1xuXG4gICAgICAgIHRlbXBDYW52YXMuY29udGV4dC5wdXRJbWFnZURhdGEoY2FudmFzRGF0YSwgMCwgMCk7XG5cbiAgICAgICAgcmV0dXJuIHRlbXBDYW52YXMuY2FudmFzO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICByZXR1cm4gdGhpcy50ZXh0dXJlQnVmZmVyLmNhbnZhcztcbiAgICB9XG59O1xuXG4vKipcbiAqIFdpbGwgcmV0dXJuIGEgb25lLWRpbWVuc2lvbmFsIGFycmF5IGNvbnRhaW5pbmcgdGhlIHBpeGVsIGRhdGEgb2YgdGhlIGVudGlyZSB0ZXh0dXJlIGluIFJHQkEgb3JkZXIsIHdpdGggaW50ZWdlciB2YWx1ZXMgYmV0d2VlbiAwIGFuZCAyNTUgKGluY2x1ZGVkKS5cbiAqXG4gKiBAcmV0dXJuIHtVaW50OENsYW1wZWRBcnJheX1cbiAqL1xuUmVuZGVyVGV4dHVyZS5wcm90b3R5cGUuZ2V0UGl4ZWxzID0gZnVuY3Rpb24gKClcbntcbiAgICB2YXIgd2lkdGgsIGhlaWdodDtcblxuICAgIGlmICh0aGlzLnJlbmRlcmVyLnR5cGUgPT09IENPTlNULlJFTkRFUkVSX1RZUEUuV0VCR0wpXG4gICAge1xuICAgICAgICB2YXIgZ2wgPSB0aGlzLnJlbmRlcmVyLmdsO1xuICAgICAgICB3aWR0aCA9IHRoaXMudGV4dHVyZUJ1ZmZlci5zaXplLndpZHRoO1xuICAgICAgICBoZWlnaHQgPSB0aGlzLnRleHR1cmVCdWZmZXIuc2l6ZS5oZWlnaHQ7XG5cbiAgICAgICAgdmFyIHdlYkdMUGl4ZWxzID0gbmV3IFVpbnQ4QXJyYXkoNCAqIHdpZHRoICogaGVpZ2h0KTtcblxuICAgICAgICBnbC5iaW5kRnJhbWVidWZmZXIoZ2wuRlJBTUVCVUZGRVIsIHRoaXMudGV4dHVyZUJ1ZmZlci5mcmFtZUJ1ZmZlcik7XG4gICAgICAgIGdsLnJlYWRQaXhlbHMoMCwgMCwgd2lkdGgsIGhlaWdodCwgZ2wuUkdCQSwgZ2wuVU5TSUdORURfQllURSwgd2ViR0xQaXhlbHMpO1xuICAgICAgICBnbC5iaW5kRnJhbWVidWZmZXIoZ2wuRlJBTUVCVUZGRVIsIG51bGwpO1xuXG4gICAgICAgIHJldHVybiB3ZWJHTFBpeGVscztcbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgd2lkdGggPSB0aGlzLnRleHR1cmVCdWZmZXIuY2FudmFzLndpZHRoO1xuICAgICAgICBoZWlnaHQgPSB0aGlzLnRleHR1cmVCdWZmZXIuY2FudmFzLmhlaWdodDtcblxuICAgICAgICByZXR1cm4gdGhpcy50ZXh0dXJlQnVmZmVyLmNhbnZhcy5nZXRDb250ZXh0KCcyZCcpLmdldEltYWdlRGF0YSgwLCAwLCB3aWR0aCwgaGVpZ2h0KS5kYXRhO1xuICAgIH1cbn07XG5cbi8qKlxuICogV2lsbCByZXR1cm4gYSBvbmUtZGltZW5zaW9uYWwgYXJyYXkgY29udGFpbmluZyB0aGUgcGl4ZWwgZGF0YSBvZiBhIHBpeGVsIHdpdGhpbiB0aGUgdGV4dHVyZSBpbiBSR0JBIG9yZGVyLCB3aXRoIGludGVnZXIgdmFsdWVzIGJldHdlZW4gMCBhbmQgMjU1IChpbmNsdWRlZCkuXG4gKlxuICogQHBhcmFtIHgge251bWJlcn0gVGhlIHggY29vcmRpbmF0ZSBvZiB0aGUgcGl4ZWwgdG8gcmV0cmlldmUuXG4gKiBAcGFyYW0geSB7bnVtYmVyfSBUaGUgeSBjb29yZGluYXRlIG9mIHRoZSBwaXhlbCB0byByZXRyaWV2ZS5cbiAqIEByZXR1cm4ge1VpbnQ4Q2xhbXBlZEFycmF5fVxuICovXG5SZW5kZXJUZXh0dXJlLnByb3RvdHlwZS5nZXRQaXhlbCA9IGZ1bmN0aW9uICh4LCB5KVxue1xuICAgIGlmICh0aGlzLnJlbmRlcmVyLnR5cGUgPT09IENPTlNULlJFTkRFUkVSX1RZUEUuV0VCR0wpXG4gICAge1xuICAgICAgICB2YXIgZ2wgPSB0aGlzLnJlbmRlcmVyLmdsO1xuXG4gICAgICAgIHZhciB3ZWJHTFBpeGVscyA9IG5ldyBVaW50OEFycmF5KDQpO1xuXG4gICAgICAgIGdsLmJpbmRGcmFtZWJ1ZmZlcihnbC5GUkFNRUJVRkZFUiwgdGhpcy50ZXh0dXJlQnVmZmVyLmZyYW1lQnVmZmVyKTtcbiAgICAgICAgZ2wucmVhZFBpeGVscyh4LCB5LCAxLCAxLCBnbC5SR0JBLCBnbC5VTlNJR05FRF9CWVRFLCB3ZWJHTFBpeGVscyk7XG4gICAgICAgIGdsLmJpbmRGcmFtZWJ1ZmZlcihnbC5GUkFNRUJVRkZFUiwgbnVsbCk7XG5cbiAgICAgICAgcmV0dXJuIHdlYkdMUGl4ZWxzO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICByZXR1cm4gdGhpcy50ZXh0dXJlQnVmZmVyLmNhbnZhcy5nZXRDb250ZXh0KCcyZCcpLmdldEltYWdlRGF0YSh4LCB5LCAxLCAxKS5kYXRhO1xuICAgIH1cbn07XG4iLCJ2YXIgQmFzZVRleHR1cmUgPSByZXF1aXJlKCcuL0Jhc2VUZXh0dXJlJyksXG4gICAgVmlkZW9CYXNlVGV4dHVyZSA9IHJlcXVpcmUoJy4vVmlkZW9CYXNlVGV4dHVyZScpLFxuICAgIFRleHR1cmVVdnMgPSByZXF1aXJlKCcuL1RleHR1cmVVdnMnKSxcbiAgICBFdmVudEVtaXR0ZXIgPSByZXF1aXJlKCdldmVudGVtaXR0ZXIzJyksXG4gICAgbWF0aCA9IHJlcXVpcmUoJy4uL21hdGgnKSxcbiAgICB1dGlscyA9IHJlcXVpcmUoJy4uL3V0aWxzJyk7XG5cbi8qKlxuICogQSB0ZXh0dXJlIHN0b3JlcyB0aGUgaW5mb3JtYXRpb24gdGhhdCByZXByZXNlbnRzIGFuIGltYWdlIG9yIHBhcnQgb2YgYW4gaW1hZ2UuIEl0IGNhbm5vdCBiZSBhZGRlZFxuICogdG8gdGhlIGRpc3BsYXkgbGlzdCBkaXJlY3RseS4gSW5zdGVhZCB1c2UgaXQgYXMgdGhlIHRleHR1cmUgZm9yIGEgU3ByaXRlLiBJZiBubyBmcmFtZSBpcyBwcm92aWRlZCB0aGVuIHRoZSB3aG9sZSBpbWFnZSBpcyB1c2VkLlxuICpcbiAqIFlvdSBjYW4gZGlyZWN0bHkgY3JlYXRlIGEgdGV4dHVyZSBmcm9tIGFuIGltYWdlIGFuZCB0aGVuIHJldXNlIGl0IG11bHRpcGxlIHRpbWVzIGxpa2UgdGhpcyA6XG4gKlxuICogYGBganNcbiAqIHZhciB0ZXh0dXJlID0gUElYSS5UZXh0dXJlLmZyb21JbWFnZSgnYXNzZXRzL2ltYWdlLnBuZycpO1xuICogdmFyIHNwcml0ZTEgPSBuZXcgUElYSS5TcHJpdGUodGV4dHVyZSk7XG4gKiB2YXIgc3ByaXRlMiA9IG5ldyBQSVhJLlNwcml0ZSh0ZXh0dXJlKTtcbiAqIGBgYFxuICpcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqIEBwYXJhbSBiYXNlVGV4dHVyZSB7UElYSS5CYXNlVGV4dHVyZX0gVGhlIGJhc2UgdGV4dHVyZSBzb3VyY2UgdG8gY3JlYXRlIHRoZSB0ZXh0dXJlIGZyb21cbiAqIEBwYXJhbSBbZnJhbWVdIHtQSVhJLlJlY3RhbmdsZX0gVGhlIHJlY3RhbmdsZSBmcmFtZSBvZiB0aGUgdGV4dHVyZSB0byBzaG93XG4gKiBAcGFyYW0gW2Nyb3BdIHtQSVhJLlJlY3RhbmdsZX0gVGhlIGFyZWEgb2Ygb3JpZ2luYWwgdGV4dHVyZVxuICogQHBhcmFtIFt0cmltXSB7UElYSS5SZWN0YW5nbGV9IFRyaW1tZWQgdGV4dHVyZSByZWN0YW5nbGVcbiAqIEBwYXJhbSBbcm90YXRlXSB7Ym9vbGVhbn0gaW5kaWNhdGVzIHdoZXRoZXIgdGhlIHRleHR1cmUgc2hvdWxkIGJlIHJvdGF0ZWQgYnkgOTAgZGVncmVlcyAoIHVzZWQgYnkgdGV4dHVyZSBwYWNrZXIgKVxuICovXG5mdW5jdGlvbiBUZXh0dXJlKGJhc2VUZXh0dXJlLCBmcmFtZSwgY3JvcCwgdHJpbSwgcm90YXRlKVxue1xuICAgIEV2ZW50RW1pdHRlci5jYWxsKHRoaXMpO1xuXG4gICAgLyoqXG4gICAgICogRG9lcyB0aGlzIFRleHR1cmUgaGF2ZSBhbnkgZnJhbWUgZGF0YSBhc3NpZ25lZCB0byBpdD9cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICovXG4gICAgdGhpcy5ub0ZyYW1lID0gZmFsc2U7XG5cbiAgICBpZiAoIWZyYW1lKVxuICAgIHtcbiAgICAgICAgdGhpcy5ub0ZyYW1lID0gdHJ1ZTtcbiAgICAgICAgZnJhbWUgPSBuZXcgbWF0aC5SZWN0YW5nbGUoMCwgMCwgMSwgMSk7XG4gICAgfVxuXG4gICAgaWYgKGJhc2VUZXh0dXJlIGluc3RhbmNlb2YgVGV4dHVyZSlcbiAgICB7XG4gICAgICAgIGJhc2VUZXh0dXJlID0gYmFzZVRleHR1cmUuYmFzZVRleHR1cmU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhlIGJhc2UgdGV4dHVyZSB0aGF0IHRoaXMgdGV4dHVyZSB1c2VzLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5CYXNlVGV4dHVyZX1cbiAgICAgKi9cbiAgICB0aGlzLmJhc2VUZXh0dXJlID0gYmFzZVRleHR1cmU7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgZnJhbWUgc3BlY2lmaWVzIHRoZSByZWdpb24gb2YgdGhlIGJhc2UgdGV4dHVyZSB0aGF0IHRoaXMgdGV4dHVyZSB1c2VzXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlJlY3RhbmdsZX1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX2ZyYW1lID0gZnJhbWU7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgdGV4dHVyZSB0cmltIGRhdGEuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlJlY3RhbmdsZX1cbiAgICAgKi9cbiAgICB0aGlzLnRyaW0gPSB0cmltO1xuXG4gICAgLyoqXG4gICAgICogVGhpcyB3aWxsIGxldCB0aGUgcmVuZGVyZXIga25vdyBpZiB0aGUgdGV4dHVyZSBpcyB2YWxpZC4gSWYgaXQncyBub3QgdGhlbiBpdCBjYW5ub3QgYmUgcmVuZGVyZWQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqL1xuICAgIHRoaXMudmFsaWQgPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIFRoaXMgd2lsbCBsZXQgYSByZW5kZXJlciBrbm93IHRoYXQgYSB0ZXh0dXJlIGhhcyBiZWVuIHVwZGF0ZWQgKHVzZWQgbWFpbmx5IGZvciB3ZWJHTCB1diB1cGRhdGVzKVxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKi9cbiAgICB0aGlzLnJlcXVpcmVzVXBkYXRlID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgV2ViR0wgVVYgZGF0YSBjYWNoZS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuVGV4dHVyZVV2c31cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX3V2cyA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgd2lkdGggb2YgdGhlIFRleHR1cmUgaW4gcGl4ZWxzLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMud2lkdGggPSAwO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGhlaWdodCBvZiB0aGUgVGV4dHVyZSBpbiBwaXhlbHMuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy5oZWlnaHQgPSAwO1xuXG4gICAgLyoqXG4gICAgICogVGhpcyBpcyB0aGUgYXJlYSBvZiB0aGUgQmFzZVRleHR1cmUgaW1hZ2UgdG8gYWN0dWFsbHkgY29weSB0byB0aGUgQ2FudmFzIC8gV2ViR0wgd2hlbiByZW5kZXJpbmcsXG4gICAgICogaXJyZXNwZWN0aXZlIG9mIHRoZSBhY3R1YWwgZnJhbWUgc2l6ZSBvciBwbGFjZW1lbnQgKHdoaWNoIGNhbiBiZSBpbmZsdWVuY2VkIGJ5IHRyaW1tZWQgdGV4dHVyZSBhdGxhc2VzKVxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5SZWN0YW5nbGV9XG4gICAgICovXG4gICAgdGhpcy5jcm9wID0gY3JvcCB8fCBmcmFtZTsvL25ldyBtYXRoLlJlY3RhbmdsZSgwLCAwLCAxLCAxKTtcblxuICAgIC8qKlxuICAgICAqIEluZGljYXRlcyB3aGV0aGVyIHRoZSB0ZXh0dXJlIHNob3VsZCBiZSByb3RhdGVkIGJ5IDkwIGRlZ3JlZXNcbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKi9cbiAgICB0aGlzLnJvdGF0ZSA9ICEhcm90YXRlO1xuXG4gICAgaWYgKGJhc2VUZXh0dXJlLmhhc0xvYWRlZClcbiAgICB7XG4gICAgICAgIGlmICh0aGlzLm5vRnJhbWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGZyYW1lID0gbmV3IG1hdGguUmVjdGFuZ2xlKDAsIDAsIGJhc2VUZXh0dXJlLndpZHRoLCBiYXNlVGV4dHVyZS5oZWlnaHQpO1xuXG4gICAgICAgICAgICAvLyBpZiB0aGVyZSBpcyBubyBmcmFtZSB3ZSBzaG91bGQgbW9uaXRvciBmb3IgYW55IGJhc2UgdGV4dHVyZSBjaGFuZ2VzLi5cbiAgICAgICAgICAgIGJhc2VUZXh0dXJlLm9uKCd1cGRhdGUnLCB0aGlzLm9uQmFzZVRleHR1cmVVcGRhdGVkLCB0aGlzKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmZyYW1lID0gZnJhbWU7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIGJhc2VUZXh0dXJlLm9uY2UoJ2xvYWRlZCcsIHRoaXMub25CYXNlVGV4dHVyZUxvYWRlZCwgdGhpcyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRmlyZWQgd2hlbiB0aGUgdGV4dHVyZSBpcyB1cGRhdGVkLiBUaGlzIGhhcHBlbnMgaWYgdGhlIGZyYW1lIG9yIHRoZSBiYXNlVGV4dHVyZSBpcyB1cGRhdGVkLlxuICAgICAqXG4gICAgICogQGV2ZW50IHVwZGF0ZVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLlRleHR1cmUjXG4gICAgICogQHByb3RlY3RlZFxuICAgICAqL1xufVxuXG5UZXh0dXJlLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoRXZlbnRFbWl0dGVyLnByb3RvdHlwZSk7XG5UZXh0dXJlLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFRleHR1cmU7XG5tb2R1bGUuZXhwb3J0cyA9IFRleHR1cmU7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKFRleHR1cmUucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogVGhlIGZyYW1lIHNwZWNpZmllcyB0aGUgcmVnaW9uIG9mIHRoZSBiYXNlIHRleHR1cmUgdGhhdCB0aGlzIHRleHR1cmUgdXNlcy5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuUmVjdGFuZ2xlfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLlRleHR1cmUjXG4gICAgICovXG4gICAgZnJhbWU6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fZnJhbWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKGZyYW1lKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLl9mcmFtZSA9IGZyYW1lO1xuXG4gICAgICAgICAgICB0aGlzLm5vRnJhbWUgPSBmYWxzZTtcblxuICAgICAgICAgICAgdGhpcy53aWR0aCA9IGZyYW1lLndpZHRoO1xuICAgICAgICAgICAgdGhpcy5oZWlnaHQgPSBmcmFtZS5oZWlnaHQ7XG5cbiAgICAgICAgICAgIGlmICghdGhpcy50cmltICYmICF0aGlzLnJvdGF0ZSAmJiAoZnJhbWUueCArIGZyYW1lLndpZHRoID4gdGhpcy5iYXNlVGV4dHVyZS53aWR0aCB8fCBmcmFtZS55ICsgZnJhbWUuaGVpZ2h0ID4gdGhpcy5iYXNlVGV4dHVyZS5oZWlnaHQpKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignVGV4dHVyZSBFcnJvcjogZnJhbWUgZG9lcyBub3QgZml0IGluc2lkZSB0aGUgYmFzZSBUZXh0dXJlIGRpbWVuc2lvbnMgJyArIHRoaXMpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvL3RoaXMudmFsaWQgPSBmcmFtZSAmJiBmcmFtZS53aWR0aCAmJiBmcmFtZS5oZWlnaHQgJiYgdGhpcy5iYXNlVGV4dHVyZS5zb3VyY2UgJiYgdGhpcy5iYXNlVGV4dHVyZS5oYXNMb2FkZWQ7XG4gICAgICAgICAgICB0aGlzLnZhbGlkID0gZnJhbWUgJiYgZnJhbWUud2lkdGggJiYgZnJhbWUuaGVpZ2h0ICYmIHRoaXMuYmFzZVRleHR1cmUuaGFzTG9hZGVkO1xuXG4gICAgICAgICAgICBpZiAodGhpcy50cmltKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHRoaXMud2lkdGggPSB0aGlzLnRyaW0ud2lkdGg7XG4gICAgICAgICAgICAgICAgdGhpcy5oZWlnaHQgPSB0aGlzLnRyaW0uaGVpZ2h0O1xuICAgICAgICAgICAgICAgIHRoaXMuX2ZyYW1lLndpZHRoID0gdGhpcy50cmltLndpZHRoO1xuICAgICAgICAgICAgICAgIHRoaXMuX2ZyYW1lLmhlaWdodCA9IHRoaXMudHJpbS5oZWlnaHQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdGhpcy5jcm9wID0gZnJhbWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICh0aGlzLnZhbGlkKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHRoaXMuX3VwZGF0ZVV2cygpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxufSk7XG5cbi8qKlxuICogVXBkYXRlcyB0aGlzIHRleHR1cmUgb24gdGhlIGdwdS5cbiAqXG4gKi9cblRleHR1cmUucHJvdG90eXBlLnVwZGF0ZSA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy5iYXNlVGV4dHVyZS51cGRhdGUoKTtcbn07XG5cbi8qKlxuICogQ2FsbGVkIHdoZW4gdGhlIGJhc2UgdGV4dHVyZSBpcyBsb2FkZWRcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5UZXh0dXJlLnByb3RvdHlwZS5vbkJhc2VUZXh0dXJlTG9hZGVkID0gZnVuY3Rpb24gKGJhc2VUZXh0dXJlKVxue1xuICAgIC8vIFRPRE8gdGhpcyBjb2RlIGxvb2tzIGNvbmZ1c2luZy4uIGJvbyB0byBhYnVzaW5nIGdldHRlcnMgYW5kIHNldHRlcnNzIVxuICAgIGlmICh0aGlzLm5vRnJhbWUpXG4gICAge1xuICAgICAgICB0aGlzLmZyYW1lID0gbmV3IG1hdGguUmVjdGFuZ2xlKDAsIDAsIGJhc2VUZXh0dXJlLndpZHRoLCBiYXNlVGV4dHVyZS5oZWlnaHQpO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICB0aGlzLmZyYW1lID0gdGhpcy5fZnJhbWU7XG4gICAgfVxuXG4gICAgdGhpcy5lbWl0KCd1cGRhdGUnLCB0aGlzKTtcbn07XG5cbi8qKlxuICogQ2FsbGVkIHdoZW4gdGhlIGJhc2UgdGV4dHVyZSBpcyB1cGRhdGVkXG4gKlxuICogQHByaXZhdGVcbiAqL1xuVGV4dHVyZS5wcm90b3R5cGUub25CYXNlVGV4dHVyZVVwZGF0ZWQgPSBmdW5jdGlvbiAoYmFzZVRleHR1cmUpXG57XG4gICAgdGhpcy5fZnJhbWUud2lkdGggPSBiYXNlVGV4dHVyZS53aWR0aDtcbiAgICB0aGlzLl9mcmFtZS5oZWlnaHQgPSBiYXNlVGV4dHVyZS5oZWlnaHQ7XG5cbiAgICB0aGlzLmVtaXQoJ3VwZGF0ZScsIHRoaXMpO1xufTtcblxuLyoqXG4gKiBEZXN0cm95cyB0aGlzIHRleHR1cmVcbiAqXG4gKiBAcGFyYW0gW2Rlc3Ryb3lCYXNlPWZhbHNlXSB7Ym9vbGVhbn0gV2hldGhlciB0byBkZXN0cm95IHRoZSBiYXNlIHRleHR1cmUgYXMgd2VsbFxuICovXG5UZXh0dXJlLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKGRlc3Ryb3lCYXNlKVxue1xuICAgIGlmICh0aGlzLmJhc2VUZXh0dXJlKVxuICAgIHtcbiAgICAgICAgaWYgKGRlc3Ryb3lCYXNlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmJhc2VUZXh0dXJlLmRlc3Ryb3koKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuYmFzZVRleHR1cmUub2ZmKCd1cGRhdGUnLCB0aGlzLm9uQmFzZVRleHR1cmVVcGRhdGVkLCB0aGlzKTtcbiAgICAgICAgdGhpcy5iYXNlVGV4dHVyZS5vZmYoJ2xvYWRlZCcsIHRoaXMub25CYXNlVGV4dHVyZUxvYWRlZCwgdGhpcyk7XG5cbiAgICAgICAgdGhpcy5iYXNlVGV4dHVyZSA9IG51bGw7XG4gICAgfVxuXG4gICAgdGhpcy5fZnJhbWUgPSBudWxsO1xuICAgIHRoaXMuX3V2cyA9IG51bGw7XG4gICAgdGhpcy50cmltID0gbnVsbDtcbiAgICB0aGlzLmNyb3AgPSBudWxsO1xuXG4gICAgdGhpcy52YWxpZCA9IGZhbHNlO1xuXG4gICAgdGhpcy5vZmYoJ2Rpc3Bvc2UnLCB0aGlzLmRpc3Bvc2UsIHRoaXMpO1xuICAgIHRoaXMub2ZmKCd1cGRhdGUnLCB0aGlzLnVwZGF0ZSwgdGhpcyk7XG59O1xuXG4vKipcbiAqIENyZWF0ZXMgYSBuZXcgdGV4dHVyZSBvYmplY3QgdGhhdCBhY3RzIHRoZSBzYW1lIGFzIHRoaXMgb25lLlxuICpcbiAqIEByZXR1cm4ge1BJWEkuVGV4dHVyZX1cbiAqL1xuVGV4dHVyZS5wcm90b3R5cGUuY2xvbmUgPSBmdW5jdGlvbiAoKVxue1xuICAgIHJldHVybiBuZXcgVGV4dHVyZSh0aGlzLmJhc2VUZXh0dXJlLCB0aGlzLmZyYW1lLCB0aGlzLmNyb3AsIHRoaXMudHJpbSwgdGhpcy5yb3RhdGUpO1xufTtcblxuLyoqXG4gKiBVcGRhdGVzIHRoZSBpbnRlcm5hbCBXZWJHTCBVViBjYWNoZS5cbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5UZXh0dXJlLnByb3RvdHlwZS5fdXBkYXRlVXZzID0gZnVuY3Rpb24gKClcbntcbiAgICBpZiAoIXRoaXMuX3V2cylcbiAgICB7XG4gICAgICAgIHRoaXMuX3V2cyA9IG5ldyBUZXh0dXJlVXZzKCk7XG4gICAgfVxuXG4gICAgdGhpcy5fdXZzLnNldCh0aGlzLmNyb3AsIHRoaXMuYmFzZVRleHR1cmUsIHRoaXMucm90YXRlKTtcbn07XG5cbi8qKlxuICogSGVscGVyIGZ1bmN0aW9uIHRoYXQgY3JlYXRlcyBhIFRleHR1cmUgb2JqZWN0IGZyb20gdGhlIGdpdmVuIGltYWdlIHVybC5cbiAqIElmIHRoZSBpbWFnZSBpcyBub3QgaW4gdGhlIHRleHR1cmUgY2FjaGUgaXQgd2lsbCBiZSAgY3JlYXRlZCBhbmQgbG9hZGVkLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBwYXJhbSBpbWFnZVVybCB7c3RyaW5nfSBUaGUgaW1hZ2UgdXJsIG9mIHRoZSB0ZXh0dXJlXG4gKiBAcGFyYW0gY3Jvc3NvcmlnaW4ge2Jvb2xlYW59IFdoZXRoZXIgcmVxdWVzdHMgc2hvdWxkIGJlIHRyZWF0ZWQgYXMgY3Jvc3NvcmlnaW5cbiAqIEBwYXJhbSBzY2FsZU1vZGUge251bWJlcn0gU2VlIHtAbGluayBQSVhJLlNDQUxFX01PREVTfSBmb3IgcG9zc2libGUgdmFsdWVzXG4gKiBAcmV0dXJuIHtQSVhJLlRleHR1cmV9IFRoZSBuZXdseSBjcmVhdGVkIHRleHR1cmVcbiAqL1xuVGV4dHVyZS5mcm9tSW1hZ2UgPSBmdW5jdGlvbiAoaW1hZ2VVcmwsIGNyb3Nzb3JpZ2luLCBzY2FsZU1vZGUpXG57XG4gICAgdmFyIHRleHR1cmUgPSB1dGlscy5UZXh0dXJlQ2FjaGVbaW1hZ2VVcmxdO1xuXG4gICAgaWYgKCF0ZXh0dXJlKVxuICAgIHtcbiAgICAgICAgdGV4dHVyZSA9IG5ldyBUZXh0dXJlKEJhc2VUZXh0dXJlLmZyb21JbWFnZShpbWFnZVVybCwgY3Jvc3NvcmlnaW4sIHNjYWxlTW9kZSkpO1xuICAgICAgICB1dGlscy5UZXh0dXJlQ2FjaGVbaW1hZ2VVcmxdID0gdGV4dHVyZTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGV4dHVyZTtcbn07XG5cbi8qKlxuICogSGVscGVyIGZ1bmN0aW9uIHRoYXQgY3JlYXRlcyBhIHNwcml0ZSB0aGF0IHdpbGwgY29udGFpbiBhIHRleHR1cmUgZnJvbSB0aGUgVGV4dHVyZUNhY2hlIGJhc2VkIG9uIHRoZSBmcmFtZUlkXG4gKiBUaGUgZnJhbWUgaWRzIGFyZSBjcmVhdGVkIHdoZW4gYSBUZXh0dXJlIHBhY2tlciBmaWxlIGhhcyBiZWVuIGxvYWRlZFxuICpcbiAqIEBzdGF0aWNcbiAqIEBwYXJhbSBmcmFtZUlkIHtzdHJpbmd9IFRoZSBmcmFtZSBJZCBvZiB0aGUgdGV4dHVyZSBpbiB0aGUgY2FjaGVcbiAqIEByZXR1cm4ge1BJWEkuVGV4dHVyZX0gVGhlIG5ld2x5IGNyZWF0ZWQgdGV4dHVyZVxuICovXG5UZXh0dXJlLmZyb21GcmFtZSA9IGZ1bmN0aW9uIChmcmFtZUlkKVxue1xuICAgIHZhciB0ZXh0dXJlID0gdXRpbHMuVGV4dHVyZUNhY2hlW2ZyYW1lSWRdO1xuXG4gICAgaWYgKCF0ZXh0dXJlKVxuICAgIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdUaGUgZnJhbWVJZCBcIicgKyBmcmFtZUlkICsgJ1wiIGRvZXMgbm90IGV4aXN0IGluIHRoZSB0ZXh0dXJlIGNhY2hlJyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRleHR1cmU7XG59O1xuXG4vKipcbiAqIEhlbHBlciBmdW5jdGlvbiB0aGF0IGNyZWF0ZXMgYSBuZXcgVGV4dHVyZSBiYXNlZCBvbiB0aGUgZ2l2ZW4gY2FudmFzIGVsZW1lbnQuXG4gKlxuICogQHN0YXRpY1xuICogQHBhcmFtIGNhbnZhcyB7Q2FudmFzfSBUaGUgY2FudmFzIGVsZW1lbnQgc291cmNlIG9mIHRoZSB0ZXh0dXJlXG4gKiBAcGFyYW0gc2NhbGVNb2RlIHtudW1iZXJ9IFNlZSB7QGxpbmsgUElYSS5TQ0FMRV9NT0RFU30gZm9yIHBvc3NpYmxlIHZhbHVlc1xuICogQHJldHVybiB7UElYSS5UZXh0dXJlfVxuICovXG5UZXh0dXJlLmZyb21DYW52YXMgPSBmdW5jdGlvbiAoY2FudmFzLCBzY2FsZU1vZGUpXG57XG4gICAgcmV0dXJuIG5ldyBUZXh0dXJlKEJhc2VUZXh0dXJlLmZyb21DYW52YXMoY2FudmFzLCBzY2FsZU1vZGUpKTtcbn07XG5cbi8qKlxuICogSGVscGVyIGZ1bmN0aW9uIHRoYXQgY3JlYXRlcyBhIG5ldyBUZXh0dXJlIGJhc2VkIG9uIHRoZSBnaXZlbiB2aWRlbyBlbGVtZW50LlxuICpcbiAqIEBzdGF0aWNcbiAqIEBwYXJhbSB2aWRlbyB7SFRNTFZpZGVvRWxlbWVudH1cbiAqIEBwYXJhbSBzY2FsZU1vZGUge251bWJlcn0gU2VlIHtAbGluayBQSVhJLlNDQUxFX01PREVTfSBmb3IgcG9zc2libGUgdmFsdWVzXG4gKiBAcmV0dXJuIHtQSVhJLlRleHR1cmV9IEEgVGV4dHVyZVxuICovXG5UZXh0dXJlLmZyb21WaWRlbyA9IGZ1bmN0aW9uICh2aWRlbywgc2NhbGVNb2RlKVxue1xuICAgIGlmICh0eXBlb2YgdmlkZW8gPT09ICdzdHJpbmcnKVxuICAgIHtcbiAgICAgICAgcmV0dXJuIFRleHR1cmUuZnJvbVZpZGVvVXJsKHZpZGVvLCBzY2FsZU1vZGUpO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICByZXR1cm4gbmV3IFRleHR1cmUoVmlkZW9CYXNlVGV4dHVyZS5mcm9tVmlkZW8odmlkZW8sIHNjYWxlTW9kZSkpO1xuICAgIH1cbn07XG5cbi8qKlxuICogSGVscGVyIGZ1bmN0aW9uIHRoYXQgY3JlYXRlcyBhIG5ldyBUZXh0dXJlIGJhc2VkIG9uIHRoZSB2aWRlbyB1cmwuXG4gKlxuICogQHN0YXRpY1xuICogQHBhcmFtIHZpZGVvVXJsIHtzdHJpbmd9XG4gKiBAcGFyYW0gc2NhbGVNb2RlIHtudW1iZXJ9IFNlZSB7QGxpbmsgUElYSS5TQ0FMRV9NT0RFU30gZm9yIHBvc3NpYmxlIHZhbHVlc1xuICogQHJldHVybiB7UElYSS5UZXh0dXJlfSBBIFRleHR1cmVcbiAqL1xuVGV4dHVyZS5mcm9tVmlkZW9VcmwgPSBmdW5jdGlvbiAodmlkZW9VcmwsIHNjYWxlTW9kZSlcbntcbiAgICByZXR1cm4gbmV3IFRleHR1cmUoVmlkZW9CYXNlVGV4dHVyZS5mcm9tVXJsKHZpZGVvVXJsLCBzY2FsZU1vZGUpKTtcbn07XG5cbi8qKlxuICogQWRkcyBhIHRleHR1cmUgdG8gdGhlIGdsb2JhbCB1dGlscy5UZXh0dXJlQ2FjaGUuIFRoaXMgY2FjaGUgaXMgc2hhcmVkIGFjcm9zcyB0aGUgd2hvbGUgUElYSSBvYmplY3QuXG4gKlxuICogQHN0YXRpY1xuICogQHBhcmFtIHRleHR1cmUge1BJWEkuVGV4dHVyZX0gVGhlIFRleHR1cmUgdG8gYWRkIHRvIHRoZSBjYWNoZS5cbiAqIEBwYXJhbSBpZCB7c3RyaW5nfSBUaGUgaWQgdGhhdCB0aGUgdGV4dHVyZSB3aWxsIGJlIHN0b3JlZCBhZ2FpbnN0LlxuICovXG5UZXh0dXJlLmFkZFRleHR1cmVUb0NhY2hlID0gZnVuY3Rpb24gKHRleHR1cmUsIGlkKVxue1xuICAgIHV0aWxzLlRleHR1cmVDYWNoZVtpZF0gPSB0ZXh0dXJlO1xufTtcblxuLyoqXG4gKiBSZW1vdmUgYSB0ZXh0dXJlIGZyb20gdGhlIGdsb2JhbCB1dGlscy5UZXh0dXJlQ2FjaGUuXG4gKlxuICogQHN0YXRpY1xuICogQHBhcmFtIGlkIHtzdHJpbmd9IFRoZSBpZCBvZiB0aGUgdGV4dHVyZSB0byBiZSByZW1vdmVkXG4gKiBAcmV0dXJuIHtQSVhJLlRleHR1cmV9IFRoZSB0ZXh0dXJlIHRoYXQgd2FzIHJlbW92ZWRcbiAqL1xuVGV4dHVyZS5yZW1vdmVUZXh0dXJlRnJvbUNhY2hlID0gZnVuY3Rpb24gKGlkKVxue1xuICAgIHZhciB0ZXh0dXJlID0gdXRpbHMuVGV4dHVyZUNhY2hlW2lkXTtcblxuICAgIGRlbGV0ZSB1dGlscy5UZXh0dXJlQ2FjaGVbaWRdO1xuICAgIGRlbGV0ZSB1dGlscy5CYXNlVGV4dHVyZUNhY2hlW2lkXTtcblxuICAgIHJldHVybiB0ZXh0dXJlO1xufTtcblxuLyoqXG4gKiBBbiBlbXB0eSB0ZXh0dXJlLCB1c2VkIG9mdGVuIHRvIG5vdCBoYXZlIHRvIGNyZWF0ZSBtdWx0aXBsZSBlbXB0eSB0ZXh0dXJlcy5cbiAqXG4gKiBAc3RhdGljXG4gKiBAY29uc3RhbnRcbiAqL1xuVGV4dHVyZS5FTVBUWSA9IG5ldyBUZXh0dXJlKG5ldyBCYXNlVGV4dHVyZSgpKTtcbiIsIlxuLyoqXG4gKiBBIHN0YW5kYXJkIG9iamVjdCB0byBzdG9yZSB0aGUgVXZzIG9mIGEgdGV4dHVyZVxuICpcbiAqIEBjbGFzc1xuICogQHByaXZhdGVcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKi9cbmZ1bmN0aW9uIFRleHR1cmVVdnMoKVxue1xuICAgIHRoaXMueDAgPSAwO1xuICAgIHRoaXMueTAgPSAwO1xuXG4gICAgdGhpcy54MSA9IDE7XG4gICAgdGhpcy55MSA9IDA7XG5cbiAgICB0aGlzLngyID0gMTtcbiAgICB0aGlzLnkyID0gMTtcblxuICAgIHRoaXMueDMgPSAwO1xuICAgIHRoaXMueTMgPSAxO1xuXG4gICAgdGhpcy54eTBfdWludDMyID0gMDtcbiAgICB0aGlzLnh5MV91aW50MzIgPSAwO1xuICAgIHRoaXMueHkyX3VpbnQzMiA9IDA7XG4gICAgdGhpcy54eTNfdWludDMyID0gMDtcblxuICAgIHRoaXMudXZzX3VpbnQzMiA9IG5ldyBVaW50MzJBcnJheSg0KVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IFRleHR1cmVVdnM7XG5cbi8qKlxuICogU2V0cyB0aGUgdGV4dHVyZSBVdnMgYmFzZWQgb24gdGhlIGdpdmVuIGZyYW1lIGluZm9ybWF0aW9uXG4gKiBAcGFyYW0gZnJhbWUge1BJWEkuUmVjdGFuZ2xlfVxuICogQHBhcmFtIGJhc2VGcmFtZSB7UElYSS5SZWN0YW5nbGV9XG4gKiBAcGFyYW0gcm90YXRlIHtib29sZWFufSBXaGV0aGVyIG9yIG5vdCB0aGUgZnJhbWUgaXMgcm90YXRlZFxuICogQHByaXZhdGVcbiAqL1xuVGV4dHVyZVV2cy5wcm90b3R5cGUuc2V0ID0gZnVuY3Rpb24gKGZyYW1lLCBiYXNlRnJhbWUsIHJvdGF0ZSlcbntcbiAgICB2YXIgdHcgPSBiYXNlRnJhbWUud2lkdGg7XG4gICAgdmFyIHRoID0gYmFzZUZyYW1lLmhlaWdodDtcblxuICAgIGlmKHJvdGF0ZSlcbiAgICB7XG4gICAgICAgIHRoaXMueDAgPSAoZnJhbWUueCArIGZyYW1lLmhlaWdodCkgLyB0dztcbiAgICAgICAgdGhpcy55MCA9IGZyYW1lLnkgLyB0aDtcblxuICAgICAgICB0aGlzLngxID0gKGZyYW1lLnggKyBmcmFtZS5oZWlnaHQpIC8gdHc7XG4gICAgICAgIHRoaXMueTEgPSAoZnJhbWUueSArIGZyYW1lLndpZHRoKSAvIHRoO1xuXG4gICAgICAgIHRoaXMueDIgPSBmcmFtZS54IC8gdHc7XG4gICAgICAgIHRoaXMueTIgPSAoZnJhbWUueSArIGZyYW1lLndpZHRoKSAvIHRoO1xuXG4gICAgICAgIHRoaXMueDMgPSBmcmFtZS54IC8gdHc7XG4gICAgICAgIHRoaXMueTMgPSBmcmFtZS55IC8gdGg7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG5cbiAgICAgICAgdGhpcy54MCA9IGZyYW1lLnggLyB0dztcbiAgICAgICAgdGhpcy55MCA9IGZyYW1lLnkgLyB0aDtcblxuICAgICAgICB0aGlzLngxID0gKGZyYW1lLnggKyBmcmFtZS53aWR0aCkgLyB0dztcbiAgICAgICAgdGhpcy55MSA9IGZyYW1lLnkgLyB0aDtcblxuICAgICAgICB0aGlzLngyID0gKGZyYW1lLnggKyBmcmFtZS53aWR0aCkgLyB0dztcbiAgICAgICAgdGhpcy55MiA9IChmcmFtZS55ICsgZnJhbWUuaGVpZ2h0KSAvIHRoO1xuXG4gICAgICAgIHRoaXMueDMgPSBmcmFtZS54IC8gdHc7XG4gICAgICAgIHRoaXMueTMgPSAoZnJhbWUueSArIGZyYW1lLmhlaWdodCkgLyB0aDtcbiAgICB9XG5cbiAgICB0aGlzLnV2c191aW50MzJbMF0gPSAoKCh0aGlzLnkwICogNjU1MzUpICYgMHhGRkZGKSA8PCAxNikgfCAoKHRoaXMueDAgKiA2NTUzNSkgJiAweEZGRkYpO1xuICAgIHRoaXMudXZzX3VpbnQzMlsxXSA9ICgoKHRoaXMueTEgKiA2NTUzNSkgJiAweEZGRkYpIDw8IDE2KSB8ICgodGhpcy54MSAqIDY1NTM1KSAmIDB4RkZGRik7XG4gICAgdGhpcy51dnNfdWludDMyWzJdID0gKCgodGhpcy55MiAqIDY1NTM1KSAmIDB4RkZGRikgPDwgMTYpIHwgKCh0aGlzLngyICogNjU1MzUpICYgMHhGRkZGKTtcbiAgICB0aGlzLnV2c191aW50MzJbM10gPSAoKCh0aGlzLnkzICogNjU1MzUpICYgMHhGRkZGKSA8PCAxNikgfCAoKHRoaXMueDMgKiA2NTUzNSkgJiAweEZGRkYpO1xufTtcbiIsInZhciBCYXNlVGV4dHVyZSA9IHJlcXVpcmUoJy4vQmFzZVRleHR1cmUnKSxcbiAgICB1dGlscyA9IHJlcXVpcmUoJy4uL3V0aWxzJyk7XG5cbi8qKlxuICogQSB0ZXh0dXJlIG9mIGEgW3BsYXlpbmddIFZpZGVvLlxuICpcbiAqIFZpZGVvIGJhc2UgdGV4dHVyZXMgbWltaWMgUGl4aSBCYXNlVGV4dHVyZS5mcm9tLi4uLiBtZXRob2QgaW4gdGhlaXIgY3JlYXRpb24gcHJvY2Vzcy5cbiAqXG4gKiBUaGlzIGNhbiBiZSB1c2VkIGluIHNldmVyYWwgd2F5cywgc3VjaCBhczpcbiAqXG4gKiBgYGBqc1xuICogdmFyIHRleHR1cmUgPSBQSVhJLlZpZGVvQmFzZVRleHR1cmUuZnJvbVVybCgnaHR0cDovL215ZG9tYWluLmNvbS92aWRlby5tcDQnKTtcbiAqXG4gKiB2YXIgdGV4dHVyZSA9IFBJWEkuVmlkZW9CYXNlVGV4dHVyZS5mcm9tVXJsKHsgc3JjOiAnaHR0cDovL215ZG9tYWluLmNvbS92aWRlby5tcDQnLCBtaW1lOiAndmlkZW8vbXA0JyB9KTtcbiAqXG4gKiB2YXIgdGV4dHVyZSA9IFBJWEkuVmlkZW9CYXNlVGV4dHVyZS5mcm9tVXJscyhbJy92aWRlby53ZWJtJywgJy92aWRlby5tcDQnXSk7XG4gKlxuICogdmFyIHRleHR1cmUgPSBQSVhJLlZpZGVvQmFzZVRleHR1cmUuZnJvbVVybHMoW1xuICogICAgIHsgc3JjOiAnL3ZpZGVvLndlYm0nLCBtaW1lOiAndmlkZW8vd2VibScgfSxcbiAqICAgICB7IHNyYzogJy92aWRlby5tcDQnLCBtaW1lOiAndmlkZW8vbXA0JyB9XG4gKiBdKTtcbiAqIGBgYFxuICpcbiAqIFNlZSB0aGUgW1wiZGV1c1wiIGRlbW9dKGh0dHA6Ly93d3cuZ29vZGJveWRpZ2l0YWwuY29tL3BpeGlqcy9leGFtcGxlcy9kZXVzLykuXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLkJhc2VUZXh0dXJlXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIHNvdXJjZSB7SFRNTFZpZGVvRWxlbWVudH1cbiAqIEBwYXJhbSBbc2NhbGVNb2RlXSB7bnVtYmVyfSBTZWUge0BsaW5rIFBJWEkuU0NBTEVfTU9ERVN9IGZvciBwb3NzaWJsZSB2YWx1ZXNcbiAqL1xuZnVuY3Rpb24gVmlkZW9CYXNlVGV4dHVyZShzb3VyY2UsIHNjYWxlTW9kZSlcbntcbiAgICBpZiAoIXNvdXJjZSlcbiAgICB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignTm8gdmlkZW8gc291cmNlIGVsZW1lbnQgc3BlY2lmaWVkLicpO1xuICAgIH1cblxuICAgIC8vIGhvb2sgaW4gaGVyZSB0byBjaGVjayBpZiB2aWRlbyBpcyBhbHJlYWR5IGF2YWlsYWJsZS5cbiAgICAvLyBCYXNlVGV4dHVyZSBsb29rcyBmb3IgYSBzb3VyY2UuY29tcGxldGUgYm9vbGVhbiwgcGx1cyB3aWR0aCAmIGhlaWdodC5cblxuICAgIGlmICgoc291cmNlLnJlYWR5U3RhdGUgPT09IHNvdXJjZS5IQVZFX0VOT1VHSF9EQVRBIHx8IHNvdXJjZS5yZWFkeVN0YXRlID09PSBzb3VyY2UuSEFWRV9GVVRVUkVfREFUQSkgJiYgc291cmNlLndpZHRoICYmIHNvdXJjZS5oZWlnaHQpXG4gICAge1xuICAgICAgICBzb3VyY2UuY29tcGxldGUgPSB0cnVlO1xuICAgIH1cblxuICAgIEJhc2VUZXh0dXJlLmNhbGwodGhpcywgc291cmNlLCBzY2FsZU1vZGUpO1xuXG4gICAgLyoqXG4gICAgICogU2hvdWxkIHRoZSBiYXNlIHRleHR1cmUgYXV0b21hdGljYWxseSB1cGRhdGUgaXRzZWxmLCBzZXQgdG8gdHJ1ZSBieSBkZWZhdWx0XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqIEBkZWZhdWx0IHRydWVcbiAgICAgKi9cbiAgICB0aGlzLmF1dG9VcGRhdGUgPSBmYWxzZTtcblxuICAgIHRoaXMuX29uVXBkYXRlID0gdGhpcy5fb25VcGRhdGUuYmluZCh0aGlzKTtcbiAgICB0aGlzLl9vbkNhblBsYXkgPSB0aGlzLl9vbkNhblBsYXkuYmluZCh0aGlzKTtcblxuICAgIGlmICghc291cmNlLmNvbXBsZXRlKVxuICAgIHtcbiAgICAgICAgc291cmNlLmFkZEV2ZW50TGlzdGVuZXIoJ2NhbnBsYXknLCB0aGlzLl9vbkNhblBsYXkpO1xuICAgICAgICBzb3VyY2UuYWRkRXZlbnRMaXN0ZW5lcignY2FucGxheXRocm91Z2gnLCB0aGlzLl9vbkNhblBsYXkpO1xuXG4gICAgICAgIC8vIHN0YXJ0ZWQgcGxheWluZy4uXG4gICAgICAgIHNvdXJjZS5hZGRFdmVudExpc3RlbmVyKCdwbGF5JywgdGhpcy5fb25QbGF5U3RhcnQuYmluZCh0aGlzKSk7XG4gICAgICAgIHNvdXJjZS5hZGRFdmVudExpc3RlbmVyKCdwYXVzZScsIHRoaXMuX29uUGxheVN0b3AuYmluZCh0aGlzKSk7XG4gICAgfVxuXG4gICAgdGhpcy5fX2xvYWRlZCA9IGZhbHNlO1xufVxuXG5WaWRlb0Jhc2VUZXh0dXJlLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoQmFzZVRleHR1cmUucHJvdG90eXBlKTtcblZpZGVvQmFzZVRleHR1cmUucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gVmlkZW9CYXNlVGV4dHVyZTtcbm1vZHVsZS5leHBvcnRzID0gVmlkZW9CYXNlVGV4dHVyZTtcblxuLyoqXG4gKiBUaGUgaW50ZXJuYWwgdXBkYXRlIGxvb3Agb2YgdGhlIHZpZGVvIGJhc2UgdGV4dHVyZSwgb25seSBydW5zIHdoZW4gYXV0b1VwZGF0ZSBpcyBzZXQgdG8gdHJ1ZVxuICpcbiAqIEBwcml2YXRlXG4gKi9cblZpZGVvQmFzZVRleHR1cmUucHJvdG90eXBlLl9vblVwZGF0ZSA9IGZ1bmN0aW9uICgpXG57XG4gICAgaWYgKHRoaXMuYXV0b1VwZGF0ZSlcbiAgICB7XG4gICAgICAgIHdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUodGhpcy5fb25VcGRhdGUpO1xuICAgICAgICB0aGlzLnVwZGF0ZSgpO1xuICAgIH1cbn07XG5cbi8qKlxuICogUnVucyB0aGUgdXBkYXRlIGxvb3Agd2hlbiB0aGUgdmlkZW8gaXMgcmVhZHkgdG8gcGxheVxuICpcbiAqIEBwcml2YXRlXG4gKi9cblZpZGVvQmFzZVRleHR1cmUucHJvdG90eXBlLl9vblBsYXlTdGFydCA9IGZ1bmN0aW9uICgpXG57XG4gICAgaWYgKCF0aGlzLmF1dG9VcGRhdGUpXG4gICAge1xuICAgICAgICB3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lKHRoaXMuX29uVXBkYXRlKTtcbiAgICAgICAgdGhpcy5hdXRvVXBkYXRlID0gdHJ1ZTtcbiAgICB9XG59O1xuXG4vKipcbiAqIEZpcmVkIHdoZW4gYSBwYXVzZSBldmVudCBpcyB0cmlnZ2VyZWQsIHN0b3BzIHRoZSB1cGRhdGUgbG9vcFxuICpcbiAqIEBwcml2YXRlXG4gKi9cblZpZGVvQmFzZVRleHR1cmUucHJvdG90eXBlLl9vblBsYXlTdG9wID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLmF1dG9VcGRhdGUgPSBmYWxzZTtcbn07XG5cbi8qKlxuICogRmlyZWQgd2hlbiB0aGUgdmlkZW8gaXMgbG9hZGVkIGFuZCByZWFkeSB0byBwbGF5XG4gKlxuICogQHByaXZhdGVcbiAqL1xuVmlkZW9CYXNlVGV4dHVyZS5wcm90b3R5cGUuX29uQ2FuUGxheSA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy5oYXNMb2FkZWQgPSB0cnVlO1xuXG4gICAgaWYgKHRoaXMuc291cmNlKVxuICAgIHtcbiAgICAgICAgdGhpcy5zb3VyY2UucmVtb3ZlRXZlbnRMaXN0ZW5lcignY2FucGxheScsIHRoaXMuX29uQ2FuUGxheSk7XG4gICAgICAgIHRoaXMuc291cmNlLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2NhbnBsYXl0aHJvdWdoJywgdGhpcy5fb25DYW5QbGF5KTtcblxuICAgICAgICB0aGlzLndpZHRoID0gdGhpcy5zb3VyY2UudmlkZW9XaWR0aDtcbiAgICAgICAgdGhpcy5oZWlnaHQgPSB0aGlzLnNvdXJjZS52aWRlb0hlaWdodDtcblxuICAgICAgICB0aGlzLnNvdXJjZS5wbGF5KCk7XG5cbiAgICAgICAgLy8gcHJldmVudCBtdWx0aXBsZSBsb2FkZWQgZGlzcGF0Y2hlcy4uXG4gICAgICAgIGlmICghdGhpcy5fX2xvYWRlZClcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5fX2xvYWRlZCA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLmVtaXQoJ2xvYWRlZCcsIHRoaXMpO1xuICAgICAgICB9XG4gICAgfVxufTtcblxuLyoqXG4gKiBEZXN0cm95cyB0aGlzIHRleHR1cmVcbiAqXG4gKi9cblZpZGVvQmFzZVRleHR1cmUucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoKVxue1xuICAgIGlmICh0aGlzLnNvdXJjZSAmJiB0aGlzLnNvdXJjZS5fcGl4aUlkKVxuICAgIHtcbiAgICAgICAgZGVsZXRlIHV0aWxzLkJhc2VUZXh0dXJlQ2FjaGVbIHRoaXMuc291cmNlLl9waXhpSWQgXTtcbiAgICAgICAgZGVsZXRlIHRoaXMuc291cmNlLl9waXhpSWQ7XG4gICAgfVxuXG4gICAgQmFzZVRleHR1cmUucHJvdG90eXBlLmRlc3Ryb3kuY2FsbCh0aGlzKTtcbn07XG5cbi8qKlxuICogTWltaWMgUGl4aSBCYXNlVGV4dHVyZS5mcm9tLi4uLiBtZXRob2QuXG4gKlxuICogQHN0YXRpY1xuICogQHBhcmFtIHZpZGVvIHtIVE1MVmlkZW9FbGVtZW50fVxuICogQHBhcmFtIHNjYWxlTW9kZSB7bnVtYmVyfSBTZWUge0BsaW5rIFBJWEkuU0NBTEVfTU9ERVN9IGZvciBwb3NzaWJsZSB2YWx1ZXNcbiAqIEByZXR1cm4ge1BJWEkuVmlkZW9CYXNlVGV4dHVyZX1cbiAqL1xuVmlkZW9CYXNlVGV4dHVyZS5mcm9tVmlkZW8gPSBmdW5jdGlvbiAodmlkZW8sIHNjYWxlTW9kZSlcbntcbiAgICBpZiAoIXZpZGVvLl9waXhpSWQpXG4gICAge1xuICAgICAgICB2aWRlby5fcGl4aUlkID0gJ3ZpZGVvXycgKyB1dGlscy51aWQoKTtcbiAgICB9XG5cbiAgICB2YXIgYmFzZVRleHR1cmUgPSB1dGlscy5CYXNlVGV4dHVyZUNhY2hlW3ZpZGVvLl9waXhpSWRdO1xuXG4gICAgaWYgKCFiYXNlVGV4dHVyZSlcbiAgICB7XG4gICAgICAgIGJhc2VUZXh0dXJlID0gbmV3IFZpZGVvQmFzZVRleHR1cmUodmlkZW8sIHNjYWxlTW9kZSk7XG4gICAgICAgIHV0aWxzLkJhc2VUZXh0dXJlQ2FjaGVbIHZpZGVvLl9waXhpSWQgXSA9IGJhc2VUZXh0dXJlO1xuICAgIH1cblxuICAgIHJldHVybiBiYXNlVGV4dHVyZTtcbn07XG5cbi8qKlxuICogSGVscGVyIGZ1bmN0aW9uIHRoYXQgY3JlYXRlcyBhIG5ldyBCYXNlVGV4dHVyZSBiYXNlZCBvbiB0aGUgZ2l2ZW4gdmlkZW8gZWxlbWVudC5cbiAqIFRoaXMgQmFzZVRleHR1cmUgY2FuIHRoZW4gYmUgdXNlZCB0byBjcmVhdGUgYSB0ZXh0dXJlXG4gKlxuICogQHN0YXRpY1xuICogQHBhcmFtIHZpZGVvU3JjIHtzdHJpbmd8b2JqZWN0fHN0cmluZ1tdfG9iamVjdFtdfSBUaGUgVVJMKHMpIGZvciB0aGUgdmlkZW8uXG4gKiBAcGFyYW0gW3ZpZGVvU3JjLnNyY10ge3N0cmluZ30gT25lIG9mIHRoZSBzb3VyY2UgdXJscyBmb3IgdGhlIHZpZGVvXG4gKiBAcGFyYW0gW3ZpZGVvU3JjLm1pbWVdIHtzdHJpbmd9IFRoZSBtaW1ldHlwZSBvZiB0aGUgdmlkZW8gKGUuZy4gJ3ZpZGVvL21wNCcpLiBJZiBub3Qgc3BlY2lmaWVkXG4gKiAgdGhlIHVybCdzIGV4dGVuc2lvbiB3aWxsIGJlIHVzZWQgYXMgdGhlIHNlY29uZCBwYXJ0IG9mIHRoZSBtaW1lIHR5cGUuXG4gKiBAcGFyYW0gc2NhbGVNb2RlIHtudW1iZXJ9IFNlZSB7QGxpbmsgUElYSS5TQ0FMRV9NT0RFU30gZm9yIHBvc3NpYmxlIHZhbHVlc1xuICogQHJldHVybiB7UElYSS5WaWRlb0Jhc2VUZXh0dXJlfVxuICovXG5WaWRlb0Jhc2VUZXh0dXJlLmZyb21VcmwgPSBmdW5jdGlvbiAodmlkZW9TcmMsIHNjYWxlTW9kZSlcbntcbiAgICB2YXIgdmlkZW8gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd2aWRlbycpO1xuXG4gICAgLy8gYXJyYXkgb2Ygb2JqZWN0cyBvciBzdHJpbmdzXG4gICAgaWYgKEFycmF5LmlzQXJyYXkodmlkZW9TcmMpKVxuICAgIHtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB2aWRlb1NyYy5sZW5ndGg7ICsraSlcbiAgICAgICAge1xuICAgICAgICAgICAgdmlkZW8uYXBwZW5kQ2hpbGQoY3JlYXRlU291cmNlKHZpZGVvU3JjW2ldLnNyYyB8fCB2aWRlb1NyY1tpXSwgdmlkZW9TcmNbaV0ubWltZSkpO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8vIHNpbmdsZSBvYmplY3Qgb3Igc3RyaW5nXG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgdmlkZW8uYXBwZW5kQ2hpbGQoY3JlYXRlU291cmNlKHZpZGVvU3JjLnNyYyB8fCB2aWRlb1NyYywgdmlkZW9TcmMubWltZSkpO1xuICAgIH1cblxuICAgIHZpZGVvLmxvYWQoKTtcbiAgICB2aWRlby5wbGF5KCk7XG5cbiAgICByZXR1cm4gVmlkZW9CYXNlVGV4dHVyZS5mcm9tVmlkZW8odmlkZW8sIHNjYWxlTW9kZSk7XG59O1xuXG5WaWRlb0Jhc2VUZXh0dXJlLmZyb21VcmxzID0gVmlkZW9CYXNlVGV4dHVyZS5mcm9tVXJsO1xuXG5mdW5jdGlvbiBjcmVhdGVTb3VyY2UocGF0aCwgdHlwZSlcbntcbiAgICBpZiAoIXR5cGUpXG4gICAge1xuICAgICAgICB0eXBlID0gJ3ZpZGVvLycgKyBwYXRoLnN1YnN0cihwYXRoLmxhc3RJbmRleE9mKCcuJykgKyAxKTtcbiAgICB9XG5cbiAgICB2YXIgc291cmNlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc291cmNlJyk7XG5cbiAgICBzb3VyY2Uuc3JjID0gcGF0aDtcbiAgICBzb3VyY2UudHlwZSA9IHR5cGU7XG5cbiAgICByZXR1cm4gc291cmNlO1xufVxuIiwidmFyIENPTlNUID0gcmVxdWlyZSgnLi4vY29uc3QnKSxcbiAgICBFdmVudEVtaXR0ZXIgPSByZXF1aXJlKCdldmVudGVtaXR0ZXIzJyksXG4gICAgLy8gSW50ZXJuYWwgZXZlbnQgdXNlZCBieSBjb21wb3NlZCBlbWl0dGVyXG4gICAgVElDSyA9ICd0aWNrJztcblxuLyoqXG4gKiBBIFRpY2tlciBjbGFzcyB0aGF0IHJ1bnMgYW4gdXBkYXRlIGxvb3AgdGhhdCBvdGhlciBvYmplY3RzIGxpc3RlbiB0by5cbiAqIFRoaXMgY2xhc3MgaXMgY29tcG9zZWQgYXJvdW5kIGFuIEV2ZW50RW1pdHRlciBvYmplY3QgdG8gYWRkIGxpc3RlbmVyc1xuICogbWVhbnQgZm9yIGV4ZWN1dGlvbiBvbiB0aGUgbmV4dCByZXF1ZXN0ZWQgYW5pbWF0aW9uIGZyYW1lLlxuICogQW5pbWF0aW9uIGZyYW1lcyBhcmUgcmVxdWVzdGVkIG9ubHkgd2hlbiBuZWNlc3NhcnksXG4gKiBlLmcuIFdoZW4gdGhlIHRpY2tlciBpcyBzdGFydGVkIGFuZCB0aGUgZW1pdHRlciBoYXMgbGlzdGVuZXJzLlxuICpcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWEkudGlja2VyXG4gKi9cbmZ1bmN0aW9uIFRpY2tlcigpXG57XG4gICAgdmFyIF90aGlzID0gdGhpcztcblxuICAgIC8qKlxuICAgICAqIEludGVybmFsIHRpY2sgbWV0aG9kIGJvdW5kIHRvIHRpY2tlciBpbnN0YW5jZS5cbiAgICAgKiBUaGlzIGlzIGJlY2F1c2UgaW4gZWFybHkgMjAxNSwgRnVuY3Rpb24uYmluZFxuICAgICAqIGlzIHN0aWxsIDYwJSBzbG93ZXIgaW4gaGlnaCBwZXJmb3JtYW5jZSBzY2VuYXJpb3MuXG4gICAgICogQWxzbyBzZXBhcmF0aW5nIGZyYW1lIHJlcXVlc3RzIGZyb20gdXBkYXRlIG1ldGhvZFxuICAgICAqIHNvIGxpc3RlbmVycyBtYXkgYmUgY2FsbGVkIGF0IGFueSB0aW1lIGFuZCB3aXRoXG4gICAgICogYW55IGFuaW1hdGlvbiBBUEksIGp1c3QgaW52b2tlIHRpY2tlci51cGRhdGUodGltZSkuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX3RpY2sgPSBmdW5jdGlvbiBfdGljayh0aW1lKSB7XG5cbiAgICAgICAgX3RoaXMuX3JlcXVlc3RJZCA9IG51bGw7XG5cbiAgICAgICAgaWYgKF90aGlzLnN0YXJ0ZWQpXG4gICAgICAgIHtcbiAgICAgICAgICAgIC8vIEludm9rZSBsaXN0ZW5lcnMgbm93XG4gICAgICAgICAgICBfdGhpcy51cGRhdGUodGltZSk7XG4gICAgICAgICAgICAvLyBMaXN0ZW5lciBzaWRlIGVmZmVjdHMgbWF5IGhhdmUgbW9kaWZpZWQgdGlja2VyIHN0YXRlLlxuICAgICAgICAgICAgaWYgKF90aGlzLnN0YXJ0ZWQgJiYgX3RoaXMuX3JlcXVlc3RJZCA9PT0gbnVsbCAmJiBfdGhpcy5fZW1pdHRlci5saXN0ZW5lcnMoVElDSywgdHJ1ZSkpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgX3RoaXMuX3JlcXVlc3RJZCA9IHJlcXVlc3RBbmltYXRpb25GcmFtZShfdGhpcy5fdGljayk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgLyoqXG4gICAgICogSW50ZXJuYWwgZW1pdHRlciB1c2VkIHRvIGZpcmUgJ3RpY2snIGV2ZW50XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9lbWl0dGVyID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gICAgLyoqXG4gICAgICogSW50ZXJuYWwgY3VycmVudCBmcmFtZSByZXF1ZXN0IElEXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9yZXF1ZXN0SWQgPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogSW50ZXJuYWwgdmFsdWUgbWFuYWdlZCBieSBtaW5GUFMgcHJvcGVydHkgc2V0dGVyIGFuZCBnZXR0ZXIuXG4gICAgICogVGhpcyBpcyB0aGUgbWF4aW11bSBhbGxvd2VkIG1pbGxpc2Vjb25kcyBiZXR3ZWVuIHVwZGF0ZXMuXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9tYXhFbGFwc2VkTVMgPSAxMDA7XG5cbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIG9yIG5vdCB0aGlzIHRpY2tlciBzaG91bGQgaW52b2tlIHRoZSBtZXRob2RcbiAgICAgKiB7QGxpbmsgUElYSS50aWNrZXIuVGlja2VyI3N0YXJ0fSBhdXRvbWF0aWNhbGx5XG4gICAgICogd2hlbiBhIGxpc3RlbmVyIGlzIGFkZGVkLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgICAqL1xuICAgIHRoaXMuYXV0b1N0YXJ0ID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBTY2FsYXIgdGltZSB2YWx1ZSBmcm9tIGxhc3QgZnJhbWUgdG8gdGhpcyBmcmFtZS5cbiAgICAgKiBUaGlzIHZhbHVlIGlzIGNhcHBlZCBieSBzZXR0aW5nIHtAbGluayBQSVhJLnRpY2tlci5UaWNrZXIjbWluRlBTfVxuICAgICAqIGFuZCBpcyBzY2FsZWQgd2l0aCB7QGxpbmsgUElYSS50aWNrZXIuVGlja2VyI3NwZWVkfS5cbiAgICAgKiAqKk5vdGU6KiogVGhlIGNhcCBtYXkgYmUgZXhjZWVkZWQgYnkgc2NhbGluZy5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAxXG4gICAgICovXG4gICAgdGhpcy5kZWx0YVRpbWUgPSAxO1xuXG4gICAgLyoqXG4gICAgICogVGltZSBlbGFwc2VkIGluIG1pbGxpc2Vjb25kcyBmcm9tIGxhc3QgZnJhbWUgdG8gdGhpcyBmcmFtZS5cbiAgICAgKiBPcHBvc2VkIHRvIHdoYXQgdGhlIHNjYWxhciB7QGxpbmsgUElYSS50aWNrZXIuVGlja2VyI2RlbHRhVGltZX1cbiAgICAgKiBpcyBiYXNlZCwgdGhpcyB2YWx1ZSBpcyBuZWl0aGVyIGNhcHBlZCBub3Igc2NhbGVkLlxuICAgICAqIElmIHRoZSBwbGF0Zm9ybSBzdXBwb3J0cyBET01IaWdoUmVzVGltZVN0YW1wLFxuICAgICAqIHRoaXMgdmFsdWUgd2lsbCBoYXZlIGEgcHJlY2lzaW9uIG9mIDEgwrVzLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7RE9NSGlnaFJlc1RpbWVTdGFtcHxudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMSAvIFRBUkdFVF9GUE1TXG4gICAgICovXG4gICAgdGhpcy5lbGFwc2VkTVMgPSAxIC8gQ09OU1QuVEFSR0VUX0ZQTVM7IC8vIGRlZmF1bHQgdG8gdGFyZ2V0IGZyYW1lIHRpbWVcblxuICAgIC8qKlxuICAgICAqIFRoZSBsYXN0IHRpbWUge0BsaW5rIFBJWEkudGlja2VyLlRpY2tlciN1cGRhdGV9IHdhcyBpbnZva2VkLlxuICAgICAqIFRoaXMgdmFsdWUgaXMgYWxzbyByZXNldCBpbnRlcm5hbGx5IG91dHNpZGUgb2YgaW52b2tpbmdcbiAgICAgKiB1cGRhdGUsIGJ1dCBvbmx5IHdoZW4gYSBuZXcgYW5pbWF0aW9uIGZyYW1lIGlzIHJlcXVlc3RlZC5cbiAgICAgKiBJZiB0aGUgcGxhdGZvcm0gc3VwcG9ydHMgRE9NSGlnaFJlc1RpbWVTdGFtcCxcbiAgICAgKiB0aGlzIHZhbHVlIHdpbGwgaGF2ZSBhIHByZWNpc2lvbiBvZiAxIMK1cy5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge0RPTUhpZ2hSZXNUaW1lU3RhbXB8bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDBcbiAgICAgKi9cbiAgICB0aGlzLmxhc3RUaW1lID0gMDtcblxuICAgIC8qKlxuICAgICAqIEZhY3RvciBvZiBjdXJyZW50IHtAbGluayBQSVhJLnRpY2tlci5UaWNrZXIjZGVsdGFUaW1lfS5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIC8vIFNjYWxlcyB0aWNrZXIuZGVsdGFUaW1lIHRvIHdoYXQgd291bGQgYmVcbiAgICAgKiAvLyB0aGUgZXF1aXZhbGVudCBvZiBhcHByb3hpbWF0ZWx5IDEyMCBGUFNcbiAgICAgKiB0aWNrZXIuc3BlZWQgPSAyO1xuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDFcbiAgICAgKi9cbiAgICB0aGlzLnNwZWVkID0gMTtcblxuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgb3Igbm90IHRoaXMgdGlja2VyIGhhcyBiZWVuIHN0YXJ0ZWQuXG4gICAgICogYHRydWVgIGlmIHtAbGluayBQSVhJLnRpY2tlci5UaWNrZXIjc3RhcnR9IGhhcyBiZWVuIGNhbGxlZC5cbiAgICAgKiBgZmFsc2VgIGlmIHtAbGluayBQSVhJLnRpY2tlci5UaWNrZXIjc3RvcH0gaGFzIGJlZW4gY2FsbGVkLlxuICAgICAqIFdoaWxlIGBmYWxzZWAsIHRoaXMgdmFsdWUgbWF5IGNoYW5nZSB0byBgdHJ1ZWAgaW4gdGhlXG4gICAgICogZXZlbnQgb2Yge0BsaW5rIFBJWEkudGlja2VyLlRpY2tlciNhdXRvU3RhcnR9IGJlaW5nIGB0cnVlYFxuICAgICAqIGFuZCBhIGxpc3RlbmVyIGlzIGFkZGVkLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgICAqL1xuICAgIHRoaXMuc3RhcnRlZCA9IGZhbHNlO1xufVxuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhUaWNrZXIucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogVGhlIGZyYW1lcyBwZXIgc2Vjb25kIGF0IHdoaWNoIHRoaXMgdGlja2VyIGlzIHJ1bm5pbmcuXG4gICAgICogVGhlIGRlZmF1bHQgaXMgYXBwcm94aW1hdGVseSA2MCBpbiBtb3N0IG1vZGVybiBicm93c2Vycy5cbiAgICAgKiAqKk5vdGU6KiogVGhpcyBkb2VzIG5vdCBmYWN0b3IgaW4gdGhlIHZhbHVlIG9mXG4gICAgICoge0BsaW5rIFBJWEkudGlja2VyLlRpY2tlciNzcGVlZH0sIHdoaWNoIGlzIHNwZWNpZmljXG4gICAgICogdG8gc2NhbGluZyB7QGxpbmsgUElYSS50aWNrZXIuVGlja2VyI2RlbHRhVGltZX0uXG4gICAgICpcbiAgICAgKiBAbWVtYmVyXG4gICAgICogQG1lbWJlcm9mIFBJWEkudGlja2VyLlRpY2tlciNcbiAgICAgKiBAcmVhZG9ubHlcbiAgICAgKi9cbiAgICBGUFM6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbigpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiAxMDAwIC8gdGhpcy5lbGFwc2VkTVM7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogTWFuYWdlcyB0aGUgbWF4aW11bSBhbW91bnQgb2YgbWlsbGlzZWNvbmRzIGFsbG93ZWQgdG9cbiAgICAgKiBlbGFwc2UgYmV0d2VlbiBpbnZva2luZyB7QGxpbmsgUElYSS50aWNrZXIuVGlja2VyI3VwZGF0ZX0uXG4gICAgICogVGhpcyB2YWx1ZSBpcyB1c2VkIHRvIGNhcCB7QGxpbmsgUElYSS50aWNrZXIuVGlja2VyI2RlbHRhVGltZX0sXG4gICAgICogYnV0IGRvZXMgbm90IGVmZmVjdCB0aGUgbWVhc3VyZWQgdmFsdWUgb2Yge0BsaW5rIFBJWEkudGlja2VyLlRpY2tlciNGUFN9LlxuICAgICAqIFdoZW4gc2V0dGluZyB0aGlzIHByb3BlcnR5IGl0IGlzIGNsYW1wZWQgdG8gYSB2YWx1ZSBiZXR3ZWVuXG4gICAgICogYDBgIGFuZCBgUElYSS5UQVJHRVRfRlBNUyAqIDEwMDBgLlxuICAgICAqXG4gICAgICogQG1lbWJlclxuICAgICAqIEBtZW1iZXJvZiBQSVhJLnRpY2tlci5UaWNrZXIjXG4gICAgICogQGRlZmF1bHQgMTBcbiAgICAgKi9cbiAgICBtaW5GUFM6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbigpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiAxMDAwIC8gdGhpcy5fbWF4RWxhcHNlZE1TO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uKGZwcylcbiAgICAgICAge1xuICAgICAgICAgICAgLy8gQ2xhbXA6IDAgdG8gVEFSR0VUX0ZQTVNcbiAgICAgICAgICAgIHZhciBtaW5GUE1TID0gTWF0aC5taW4oTWF0aC5tYXgoMCwgZnBzKSAvIDEwMDAsIENPTlNULlRBUkdFVF9GUE1TKTtcbiAgICAgICAgICAgIHRoaXMuX21heEVsYXBzZWRNUyA9IDEgLyBtaW5GUE1TO1xuICAgICAgICB9XG4gICAgfVxufSk7XG5cbi8qKlxuICogQ29uZGl0aW9uYWxseSByZXF1ZXN0cyBhIG5ldyBhbmltYXRpb24gZnJhbWUuXG4gKiBJZiBhIGZyYW1lIGhhcyBub3QgYWxyZWFkeSBiZWVuIHJlcXVlc3RlZCwgYW5kIGlmIHRoZSBpbnRlcm5hbFxuICogZW1pdHRlciBoYXMgbGlzdGVuZXJzLCBhIG5ldyBmcmFtZSBpcyByZXF1ZXN0ZWQuXG4gKlxuICogQHByaXZhdGVcbiAqL1xuVGlja2VyLnByb3RvdHlwZS5fcmVxdWVzdElmTmVlZGVkID0gZnVuY3Rpb24gX3JlcXVlc3RJZk5lZWRlZCgpXG57XG4gICAgaWYgKHRoaXMuX3JlcXVlc3RJZCA9PT0gbnVsbCAmJiB0aGlzLl9lbWl0dGVyLmxpc3RlbmVycyhUSUNLLCB0cnVlKSlcbiAgICB7XG4gICAgICAgIC8vIGVuc3VyZSBjYWxsYmFja3MgZ2V0IGNvcnJlY3QgZGVsdGFcbiAgICAgICAgdGhpcy5sYXN0VGltZSA9IHBlcmZvcm1hbmNlLm5vdygpO1xuICAgICAgICB0aGlzLl9yZXF1ZXN0SWQgPSByZXF1ZXN0QW5pbWF0aW9uRnJhbWUodGhpcy5fdGljayk7XG4gICAgfVxufTtcblxuLyoqXG4gKiBDb25kaXRpb25hbGx5IGNhbmNlbHMgYSBwZW5kaW5nIGFuaW1hdGlvbiBmcmFtZS5cbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5UaWNrZXIucHJvdG90eXBlLl9jYW5jZWxJZk5lZWRlZCA9IGZ1bmN0aW9uIF9jYW5jZWxJZk5lZWRlZCgpXG57XG4gICAgaWYgKHRoaXMuX3JlcXVlc3RJZCAhPT0gbnVsbClcbiAgICB7XG4gICAgICAgIGNhbmNlbEFuaW1hdGlvbkZyYW1lKHRoaXMuX3JlcXVlc3RJZCk7XG4gICAgICAgIHRoaXMuX3JlcXVlc3RJZCA9IG51bGw7XG4gICAgfVxufTtcblxuLyoqXG4gKiBDb25kaXRpb25hbGx5IHJlcXVlc3RzIGEgbmV3IGFuaW1hdGlvbiBmcmFtZS5cbiAqIElmIHRoZSB0aWNrZXIgaGFzIGJlZW4gc3RhcnRlZCBpdCBjaGVja3MgaWYgYSBmcmFtZSBoYXMgbm90IGFscmVhZHlcbiAqIGJlZW4gcmVxdWVzdGVkLCBhbmQgaWYgdGhlIGludGVybmFsIGVtaXR0ZXIgaGFzIGxpc3RlbmVycy4gSWYgdGhlc2VcbiAqIGNvbmRpdGlvbnMgYXJlIG1ldCwgYSBuZXcgZnJhbWUgaXMgcmVxdWVzdGVkLiBJZiB0aGUgdGlja2VyIGhhcyBub3RcbiAqIGJlZW4gc3RhcnRlZCwgYnV0IGF1dG9TdGFydCBpcyBgdHJ1ZWAsIHRoZW4gdGhlIHRpY2tlciBzdGFydHMgbm93LFxuICogYW5kIGNvbnRpbnVlcyB3aXRoIHRoZSBwcmV2aW91cyBjb25kaXRpb25zIHRvIHJlcXVlc3QgYSBuZXcgZnJhbWUuXG4gKlxuICogQHByaXZhdGVcbiAqL1xuVGlja2VyLnByb3RvdHlwZS5fc3RhcnRJZlBvc3NpYmxlID0gZnVuY3Rpb24gX3N0YXJ0SWZQb3NzaWJsZSgpXG57XG4gICAgaWYgKHRoaXMuc3RhcnRlZClcbiAgICB7XG4gICAgICAgIHRoaXMuX3JlcXVlc3RJZk5lZWRlZCgpO1xuICAgIH1cbiAgICBlbHNlIGlmICh0aGlzLmF1dG9TdGFydClcbiAgICB7XG4gICAgICAgIHRoaXMuc3RhcnQoKTtcbiAgICB9XG59O1xuXG4vKipcbiAqIENhbGxzIHtAbGluayBtb2R1bGU6ZXZlbnRlbWl0dGVyMy5FdmVudEVtaXR0ZXIjb259IGludGVybmFsbHkgZm9yIHRoZVxuICogaW50ZXJuYWwgJ3RpY2snIGV2ZW50LiBJdCBjaGVja3MgaWYgdGhlIGVtaXR0ZXIgaGFzIGxpc3RlbmVycyxcbiAqIGFuZCBpZiBzbyBpdCByZXF1ZXN0cyBhIG5ldyBhbmltYXRpb24gZnJhbWUgYXQgdGhpcyBwb2ludC5cbiAqXG4gKiBAcGFyYW0gZm4ge0Z1bmN0aW9ufSBUaGUgbGlzdGVuZXIgZnVuY3Rpb24gdG8gYmUgYWRkZWQgZm9yIHVwZGF0ZXNcbiAqIEBwYXJhbSBbY29udGV4dF0ge0Z1bmN0aW9ufSBUaGUgbGlzdGVuZXIgY29udGV4dFxuICogQHJldHVybnMge1BJWEkudGlja2VyLlRpY2tlcn0gdGhpc1xuICovXG5UaWNrZXIucHJvdG90eXBlLmFkZCA9IGZ1bmN0aW9uIGFkZChmbiwgY29udGV4dClcbntcbiAgICB0aGlzLl9lbWl0dGVyLm9uKFRJQ0ssIGZuLCBjb250ZXh0KTtcblxuICAgIHRoaXMuX3N0YXJ0SWZQb3NzaWJsZSgpO1xuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIENhbGxzIHtAbGluayBtb2R1bGU6ZXZlbnRlbWl0dGVyMy5FdmVudEVtaXR0ZXIjb25jZX0gaW50ZXJuYWxseSBmb3IgdGhlXG4gKiBpbnRlcm5hbCAndGljaycgZXZlbnQuIEl0IGNoZWNrcyBpZiB0aGUgZW1pdHRlciBoYXMgbGlzdGVuZXJzLFxuICogYW5kIGlmIHNvIGl0IHJlcXVlc3RzIGEgbmV3IGFuaW1hdGlvbiBmcmFtZSBhdCB0aGlzIHBvaW50LlxuICpcbiAqIEBwYXJhbSBmbiB7RnVuY3Rpb259IFRoZSBsaXN0ZW5lciBmdW5jdGlvbiB0byBiZSBhZGRlZCBmb3Igb25lIHVwZGF0ZVxuICogQHBhcmFtIFtjb250ZXh0XSB7RnVuY3Rpb259IFRoZSBsaXN0ZW5lciBjb250ZXh0XG4gKiBAcmV0dXJucyB7UElYSS50aWNrZXIuVGlja2VyfSB0aGlzXG4gKi9cblRpY2tlci5wcm90b3R5cGUuYWRkT25jZSA9IGZ1bmN0aW9uIGFkZE9uY2UoZm4sIGNvbnRleHQpXG57XG4gICAgdGhpcy5fZW1pdHRlci5vbmNlKFRJQ0ssIGZuLCBjb250ZXh0KTtcblxuICAgIHRoaXMuX3N0YXJ0SWZQb3NzaWJsZSgpO1xuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIENhbGxzIHtAbGluayBtb2R1bGU6ZXZlbnRlbWl0dGVyMy5FdmVudEVtaXR0ZXIjb2ZmfSBpbnRlcm5hbGx5IGZvciAndGljaycgZXZlbnQuXG4gKiBJdCBjaGVja3MgaWYgdGhlIGVtaXR0ZXIgaGFzIGxpc3RlbmVycyBmb3IgJ3RpY2snIGV2ZW50LlxuICogSWYgaXQgZG9lcywgdGhlbiBpdCBjYW5jZWxzIHRoZSBhbmltYXRpb24gZnJhbWUuXG4gKlxuICogQHBhcmFtIFtmbl0ge0Z1bmN0aW9ufSBUaGUgbGlzdGVuZXIgZnVuY3Rpb24gdG8gYmUgcmVtb3ZlZFxuICogQHBhcmFtIFtjb250ZXh0XSB7RnVuY3Rpb259IFRoZSBsaXN0ZW5lciBjb250ZXh0IHRvIGJlIHJlbW92ZWRcbiAqIEByZXR1cm5zIHtQSVhJLnRpY2tlci5UaWNrZXJ9IHRoaXNcbiAqL1xuVGlja2VyLnByb3RvdHlwZS5yZW1vdmUgPSBmdW5jdGlvbiByZW1vdmUoZm4sIGNvbnRleHQpXG57XG4gICAgdGhpcy5fZW1pdHRlci5vZmYoVElDSywgZm4sIGNvbnRleHQpO1xuXG4gICAgaWYgKCF0aGlzLl9lbWl0dGVyLmxpc3RlbmVycyhUSUNLLCB0cnVlKSlcbiAgICB7XG4gICAgICAgIHRoaXMuX2NhbmNlbElmTmVlZGVkKCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIFN0YXJ0cyB0aGUgdGlja2VyLiBJZiB0aGUgdGlja2VyIGhhcyBsaXN0ZW5lcnNcbiAqIGEgbmV3IGFuaW1hdGlvbiBmcmFtZSBpcyByZXF1ZXN0ZWQgYXQgdGhpcyBwb2ludC5cbiAqL1xuVGlja2VyLnByb3RvdHlwZS5zdGFydCA9IGZ1bmN0aW9uIHN0YXJ0KClcbntcbiAgICBpZiAoIXRoaXMuc3RhcnRlZClcbiAgICB7XG4gICAgICAgIHRoaXMuc3RhcnRlZCA9IHRydWU7XG4gICAgICAgIHRoaXMuX3JlcXVlc3RJZk5lZWRlZCgpO1xuICAgIH1cbn07XG5cbi8qKlxuICogU3RvcHMgdGhlIHRpY2tlci4gSWYgdGhlIHRpY2tlciBoYXMgcmVxdWVzdGVkXG4gKiBhbiBhbmltYXRpb24gZnJhbWUgaXQgaXMgY2FuY2VsZWQgYXQgdGhpcyBwb2ludC5cbiAqL1xuVGlja2VyLnByb3RvdHlwZS5zdG9wID0gZnVuY3Rpb24gc3RvcCgpXG57XG4gICAgaWYgKHRoaXMuc3RhcnRlZClcbiAgICB7XG4gICAgICAgIHRoaXMuc3RhcnRlZCA9IGZhbHNlO1xuICAgICAgICB0aGlzLl9jYW5jZWxJZk5lZWRlZCgpO1xuICAgIH1cbn07XG5cbi8qKlxuICogVHJpZ2dlcnMgYW4gdXBkYXRlLiBBbiB1cGRhdGUgZW50YWlscyBzZXR0aW5nIHRoZVxuICogY3VycmVudCB7QGxpbmsgUElYSS50aWNrZXIuVGlja2VyI2VsYXBzZWRNU30sXG4gKiB0aGUgY3VycmVudCB7QGxpbmsgUElYSS50aWNrZXIuVGlja2VyI2RlbHRhVGltZX0sXG4gKiBpbnZva2luZyBhbGwgbGlzdGVuZXJzIHdpdGggY3VycmVudCBkZWx0YVRpbWUsXG4gKiBhbmQgdGhlbiBmaW5hbGx5IHNldHRpbmcge0BsaW5rIFBJWEkudGlja2VyLlRpY2tlciNsYXN0VGltZX1cbiAqIHdpdGggdGhlIHZhbHVlIG9mIGN1cnJlbnRUaW1lIHRoYXQgd2FzIHByb3ZpZGVkLlxuICogVGhpcyBtZXRob2Qgd2lsbCBiZSBjYWxsZWQgYXV0b21hdGljYWxseSBieSBhbmltYXRpb25cbiAqIGZyYW1lIGNhbGxiYWNrcyBpZiB0aGUgdGlja2VyIGluc3RhbmNlIGhhcyBiZWVuIHN0YXJ0ZWRcbiAqIGFuZCBsaXN0ZW5lcnMgYXJlIGFkZGVkLlxuICpcbiAqIEBwYXJhbSBbY3VycmVudFRpbWU9cGVyZm9ybWFuY2Uubm93KCldIHtET01IaWdoUmVzVGltZVN0YW1wfG51bWJlcn0gdGhlIGN1cnJlbnQgdGltZSBvZiBleGVjdXRpb25cbiAqL1xuVGlja2VyLnByb3RvdHlwZS51cGRhdGUgPSBmdW5jdGlvbiB1cGRhdGUoY3VycmVudFRpbWUpXG57XG4gICAgdmFyIGVsYXBzZWRNUztcblxuICAgIC8vIEFsbG93IGNhbGxpbmcgdXBkYXRlIGRpcmVjdGx5IHdpdGggZGVmYXVsdCBjdXJyZW50VGltZS5cbiAgICBjdXJyZW50VGltZSA9IGN1cnJlbnRUaW1lIHx8IHBlcmZvcm1hbmNlLm5vdygpO1xuICAgIC8vIFNhdmUgdW5jYXBwZWQgZWxhcHNlZE1TIGZvciBtZWFzdXJlbWVudFxuICAgIGVsYXBzZWRNUyA9IHRoaXMuZWxhcHNlZE1TID0gY3VycmVudFRpbWUgLSB0aGlzLmxhc3RUaW1lO1xuXG4gICAgLy8gY2FwIHRoZSBtaWxsaXNlY29uZHMgZWxhcHNlZCB1c2VkIGZvciBkZWx0YVRpbWVcbiAgICBpZiAoZWxhcHNlZE1TID4gdGhpcy5fbWF4RWxhcHNlZE1TKVxuICAgIHtcbiAgICAgICAgZWxhcHNlZE1TID0gdGhpcy5fbWF4RWxhcHNlZE1TO1xuICAgIH1cblxuICAgIHRoaXMuZGVsdGFUaW1lID0gZWxhcHNlZE1TICogQ09OU1QuVEFSR0VUX0ZQTVMgKiB0aGlzLnNwZWVkO1xuXG4gICAgLy8gSW52b2tlIGxpc3RlbmVycyBhZGRlZCB0byBpbnRlcm5hbCBlbWl0dGVyXG4gICAgdGhpcy5fZW1pdHRlci5lbWl0KFRJQ0ssIHRoaXMuZGVsdGFUaW1lKTtcblxuICAgIHRoaXMubGFzdFRpbWUgPSBjdXJyZW50VGltZTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gVGlja2VyO1xuIiwidmFyIFRpY2tlciA9IHJlcXVpcmUoJy4vVGlja2VyJyk7XG5cbi8qKlxuICogVGhlIHNoYXJlZCB0aWNrZXIgaW5zdGFuY2UgdXNlZCBieSB7QGxpbmsgUElYSS5leHRyYXMuTW92aWVDbGlwfS5cbiAqIGFuZCBieSB7QGxpbmsgUElYSS5pbnRlcmFjdGlvbi5JbnRlcmFjdGlvbk1hbmFnZXJ9LlxuICogVGhlIHByb3BlcnR5IHtAbGluayBQSVhJLnRpY2tlci5UaWNrZXIjYXV0b1N0YXJ0fSBpcyBzZXQgdG8gYHRydWVgXG4gKiBmb3IgdGhpcyBpbnN0YW5jZS4gUGxlYXNlIGZvbGxvdyB0aGUgZXhhbXBsZXMgZm9yIHVzYWdlLCBpbmNsdWRpbmdcbiAqIGhvdyB0byBvcHQtb3V0IG9mIGF1dG8tc3RhcnRpbmcgdGhlIHNoYXJlZCB0aWNrZXIuXG4gKlxuICogQGV4YW1wbGVcbiAqIHZhciB0aWNrZXIgPSBQSVhJLnRpY2tlci5zaGFyZWQ7XG4gKiAvLyBTZXQgdGhpcyB0byBwcmV2ZW50IHN0YXJ0aW5nIHRoaXMgdGlja2VyIHdoZW4gbGlzdGVuZXJzIGFyZSBhZGRlZC5cbiAqIC8vIEJ5IGRlZmF1bHQgdGhpcyBpcyB0cnVlIG9ubHkgZm9yIHRoZSBQSVhJLnRpY2tlci5zaGFyZWQgaW5zdGFuY2UuXG4gKiB0aWNrZXIuYXV0b1N0YXJ0ID0gZmFsc2U7XG4gKiAvLyBGWUksIGNhbGwgdGhpcyB0byBlbnN1cmUgdGhlIHRpY2tlciBpcyBzdG9wcGVkLiBJdCBzaG91bGQgYmUgc3RvcHBlZFxuICogLy8gaWYgeW91IGhhdmUgbm90IGF0dGVtcHRlZCB0byByZW5kZXIgYW55dGhpbmcgeWV0LlxuICogdGlja2VyLnN0b3AoKTtcbiAqIC8vIENhbGwgdGhpcyB3aGVuIHlvdSBhcmUgcmVhZHkgZm9yIGEgcnVubmluZyBzaGFyZWQgdGlja2VyLlxuICogdGlja2VyLnN0YXJ0KCk7XG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIFlvdSBtYXkgdXNlIHRoZSBzaGFyZWQgdGlja2VyIHRvIHJlbmRlci4uLlxuICogdmFyIHJlbmRlcmVyID0gUElYSS5hdXRvRGV0ZWN0UmVuZGVyZXIoODAwLCA2MDApO1xuICogdmFyIHN0YWdlID0gbmV3IFBJWEkuQ29udGFpbmVyKCk7XG4gKiB2YXIgaW50ZXJhY3Rpb25NYW5hZ2VyID0gUElYSS5pbnRlcmFjdGlvbi5JbnRlcmFjdGlvbk1hbmFnZXIocmVuZGVyZXIpO1xuICogZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChyZW5kZXJlci52aWV3KTtcbiAqIHRpY2tlci5hZGQoZnVuY3Rpb24gKHRpbWUpIHtcbiAqICAgICByZW5kZXJlci5yZW5kZXIoc3RhZ2UpO1xuICogfSk7XG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIE9yIHlvdSBjYW4ganVzdCB1cGRhdGUgaXQgbWFudWFsbHkuXG4gKiB0aWNrZXIuYXV0b1N0YXJ0ID0gZmFsc2U7XG4gKiB0aWNrZXIuc3RvcCgpO1xuICogZnVuY3Rpb24gYW5pbWF0ZSh0aW1lKSB7XG4gKiAgICAgdGlja2VyLnVwZGF0ZSh0aW1lKTtcbiAqICAgICByZW5kZXJlci5yZW5kZXIoc3RhZ2UpO1xuICogICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZShhbmltYXRlKTtcbiAqIH1cbiAqIGFuaW1hdGUocGVyZm9ybWFuY2Uubm93KCkpO1xuICpcbiAqIEB0eXBlIHtQSVhJLnRpY2tlci5UaWNrZXJ9XG4gKiBAbWVtYmVyb2YgUElYSS50aWNrZXJcbiAqL1xudmFyIHNoYXJlZCA9IG5ldyBUaWNrZXIoKTtcbnNoYXJlZC5hdXRvU3RhcnQgPSB0cnVlO1xuXG4vKipcbiAqIEBuYW1lc3BhY2UgUElYSS50aWNrZXJcbiAqL1xubW9kdWxlLmV4cG9ydHMgPSB7XG4gICAgc2hhcmVkOiBzaGFyZWQsXG4gICAgVGlja2VyOiBUaWNrZXJcbn07XG4iLCIvKipcbiAqIEdlbmVyaWMgTWFzayBTdGFjayBkYXRhIHN0cnVjdHVyZVxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICovXG5cbnZhciBHTF9NQVAgPSB7fTtcblxuXG52YXIgY3JlYXRlSW5kaWNlc0ZvclF1YWRzID0gZnVuY3Rpb24gKHNpemUpXG57XG4gICAgLy8gdGhlIHRvdGFsIG51bWJlciBvZiBpbmRpY2VzIGluIG91ciBhcnJheSwgdGhlcmUgYXJlIDYgcG9pbnRzIHBlciBxdWFkLlxuICAgXG4gICAgdmFyIHRvdGFsSW5kaWNlcyA9IHNpemUgKiA2O1xuXG4gICAgdmFyIGluZGljZXMgPSBuZXcgVWludDE2QXJyYXkodG90YWxJbmRpY2VzKTtcblxuXHQvLyBmaWxsIHRoZSBpbmRpY2VzIHdpdGggdGhlIHF1YWRzIHRvIGRyYXdcbiAgICBmb3IgKHZhciBpPTAsIGo9MDsgaSA8IHRvdGFsSW5kaWNlczsgaSArPSA2LCBqICs9IDQpXG4gICAge1xuICAgICAgICBpbmRpY2VzW2kgKyAwXSA9IGogKyAwO1xuICAgICAgICBpbmRpY2VzW2kgKyAxXSA9IGogKyAxO1xuICAgICAgICBpbmRpY2VzW2kgKyAyXSA9IGogKyAyO1xuICAgICAgICBpbmRpY2VzW2kgKyAzXSA9IGogKyAwO1xuICAgICAgICBpbmRpY2VzW2kgKyA0XSA9IGogKyAyO1xuICAgICAgICBpbmRpY2VzW2kgKyA1XSA9IGogKyAzO1xuICAgIH1cblxuICAgIHJldHVybiBpbmRpY2VzO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBjcmVhdGVJbmRpY2VzRm9yUXVhZHM7IiwidmFyIENPTlNUID0gcmVxdWlyZSgnLi4vY29uc3QnKTtcblxuLyoqXG4gKiBAbmFtZXNwYWNlIFBJWEkudXRpbHNcbiAqL1xudmFyIHV0aWxzID0gbW9kdWxlLmV4cG9ydHMgPSB7XG4gICAgX3VpZDogMCxcbiAgICBfc2FpZEhlbGxvOiBmYWxzZSxcblxuICAgIEV2ZW50RW1pdHRlcjogICByZXF1aXJlKCdldmVudGVtaXR0ZXIzJyksXG4gICAgcGx1Z2luVGFyZ2V0OiAgIHJlcXVpcmUoJy4vcGx1Z2luVGFyZ2V0JyksXG4gICAgYXN5bmM6ICAgICAgICAgIHJlcXVpcmUoJ2FzeW5jJyksXG5cbiAgICAvKipcbiAgICAgKiBHZXRzIHRoZSBuZXh0IHVuaXF1ZSBpZGVudGlmaWVyXG4gICAgICpcbiAgICAgKiBAcmV0dXJuIHtudW1iZXJ9IFRoZSBuZXh0IHVuaXF1ZSBpZGVudGlmaWVyIHRvIHVzZS5cbiAgICAgKi9cbiAgICB1aWQ6IGZ1bmN0aW9uICgpXG4gICAge1xuICAgICAgICByZXR1cm4gKyt1dGlscy5fdWlkO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBDb252ZXJ0cyBhIGhleCBjb2xvciBudW1iZXIgdG8gYW4gW1IsIEcsIEJdIGFycmF5XG4gICAgICpcbiAgICAgKiBAcGFyYW0gaGV4IHtudW1iZXJ9XG4gICAgICogQHBhcmFtICB7bnVtYmVyW119IFtvdXQ9W11dXG4gICAgICogQHJldHVybiB7bnVtYmVyW119IEFuIGFycmF5IHJlcHJlc2VudGluZyB0aGUgW1IsIEcsIEJdIG9mIHRoZSBjb2xvci5cbiAgICAgKi9cbiAgICBoZXgycmdiOiBmdW5jdGlvbiAoaGV4LCBvdXQpXG4gICAge1xuICAgICAgICBvdXQgPSBvdXQgfHwgW107XG5cbiAgICAgICAgb3V0WzBdID0gKGhleCA+PiAxNiAmIDB4RkYpIC8gMjU1O1xuICAgICAgICBvdXRbMV0gPSAoaGV4ID4+IDggJiAweEZGKSAvIDI1NTtcbiAgICAgICAgb3V0WzJdID0gKGhleCAmIDB4RkYpIC8gMjU1O1xuXG4gICAgICAgIHJldHVybiBvdXQ7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIENvbnZlcnRzIGEgaGV4IGNvbG9yIG51bWJlciB0byBhIHN0cmluZy5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBoZXgge251bWJlcn1cbiAgICAgKiBAcmV0dXJuIHtzdHJpbmd9IFRoZSBzdHJpbmcgY29sb3IuXG4gICAgICovXG4gICAgaGV4MnN0cmluZzogZnVuY3Rpb24gKGhleClcbiAgICB7XG4gICAgICAgIGhleCA9IGhleC50b1N0cmluZygxNik7XG4gICAgICAgIGhleCA9ICcwMDAwMDAnLnN1YnN0cigwLCA2IC0gaGV4Lmxlbmd0aCkgKyBoZXg7XG5cbiAgICAgICAgcmV0dXJuICcjJyArIGhleDtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQ29udmVydHMgYSBjb2xvciBhcyBhbiBbUiwgRywgQl0gYXJyYXkgdG8gYSBoZXggbnVtYmVyXG4gICAgICpcbiAgICAgKiBAcGFyYW0gcmdiIHtudW1iZXJbXX1cbiAgICAgKiBAcmV0dXJuIHtudW1iZXJ9IFRoZSBjb2xvciBudW1iZXJcbiAgICAgKi9cbiAgICByZ2IyaGV4OiBmdW5jdGlvbiAocmdiKVxuICAgIHtcbiAgICAgICAgcmV0dXJuICgocmdiWzBdKjI1NSA8PCAxNikgKyAocmdiWzFdKjI1NSA8PCA4KSArIHJnYlsyXSoyNTUpO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBDaGVja3Mgd2hldGhlciB0aGUgQ2FudmFzIEJsZW5kTW9kZXMgYXJlIHN1cHBvcnRlZCBieSB0aGUgY3VycmVudCBicm93c2VyXG4gICAgICpcbiAgICAgKiBAcmV0dXJuIHtib29sZWFufSB3aGV0aGVyIHRoZXkgYXJlIHN1cHBvcnRlZFxuICAgICAqL1xuICAgIGNhblVzZU5ld0NhbnZhc0JsZW5kTW9kZXM6IGZ1bmN0aW9uICgpXG4gICAge1xuICAgICAgICBpZiAodHlwZW9mIGRvY3VtZW50ID09PSAndW5kZWZpbmVkJylcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIHBuZ0hlYWQgPSAnZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFBUUFBQUFCQVFNQUFBREQ4cDJPQUFBQUExQk1WRVgvJztcbiAgICAgICAgdmFyIHBuZ0VuZCA9ICdBQUFBQ2tsRVFWUUkxMk5nQUFBQUFnQUI0aUc4TXdBQUFBQkpSVTVFcmtKZ2dnPT0nO1xuXG4gICAgICAgIHZhciBtYWdlbnRhID0gbmV3IEltYWdlKCk7XG4gICAgICAgIG1hZ2VudGEuc3JjID0gcG5nSGVhZCArICdBUDgwNE9hNicgKyBwbmdFbmQ7XG5cbiAgICAgICAgdmFyIHllbGxvdyA9IG5ldyBJbWFnZSgpO1xuICAgICAgICB5ZWxsb3cuc3JjID0gcG5nSGVhZCArICcvd0NLeHZSRicgKyBwbmdFbmQ7XG5cbiAgICAgICAgdmFyIGNhbnZhcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NhbnZhcycpO1xuICAgICAgICBjYW52YXMud2lkdGggPSA2O1xuICAgICAgICBjYW52YXMuaGVpZ2h0ID0gMTtcblxuICAgICAgICB2YXIgY29udGV4dCA9IGNhbnZhcy5nZXRDb250ZXh0KCcyZCcpO1xuICAgICAgICBjb250ZXh0Lmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbiA9ICdtdWx0aXBseSc7XG4gICAgICAgIGNvbnRleHQuZHJhd0ltYWdlKG1hZ2VudGEsIDAsIDApO1xuICAgICAgICBjb250ZXh0LmRyYXdJbWFnZSh5ZWxsb3csIDIsIDApO1xuXG4gICAgICAgIHZhciBkYXRhID0gY29udGV4dC5nZXRJbWFnZURhdGEoMiwwLDEsMSkuZGF0YTtcblxuICAgICAgICByZXR1cm4gKGRhdGFbMF0gPT09IDI1NSAmJiBkYXRhWzFdID09PSAwICYmIGRhdGFbMl0gPT09IDApO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBHaXZlbiBhIG51bWJlciwgdGhpcyBmdW5jdGlvbiByZXR1cm5zIHRoZSBjbG9zZXN0IG51bWJlciB0aGF0IGlzIGEgcG93ZXIgb2YgdHdvXG4gICAgICogdGhpcyBmdW5jdGlvbiBpcyB0YWtlbiBmcm9tIFN0YXJsaW5nIEZyYW1ld29yayBhcyBpdHMgcHJldHR5IG5lYXQgOylcbiAgICAgKlxuICAgICAqIEBwYXJhbSBudW1iZXIge251bWJlcn1cbiAgICAgKiBAcmV0dXJuIHtudW1iZXJ9IHRoZSBjbG9zZXN0IG51bWJlciB0aGF0IGlzIGEgcG93ZXIgb2YgdHdvXG4gICAgICovXG4gICAgZ2V0TmV4dFBvd2VyT2ZUd286IGZ1bmN0aW9uIChudW1iZXIpXG4gICAge1xuICAgICAgICAvLyBzZWU6IGh0dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvUG93ZXJfb2ZfdHdvI0Zhc3RfYWxnb3JpdGhtX3RvX2NoZWNrX2lmX2FfcG9zaXRpdmVfbnVtYmVyX2lzX2FfcG93ZXJfb2ZfdHdvXG4gICAgICAgIGlmIChudW1iZXIgPiAwICYmIChudW1iZXIgJiAobnVtYmVyIC0gMSkpID09PSAwKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gbnVtYmVyO1xuICAgICAgICB9XG4gICAgICAgIGVsc2VcbiAgICAgICAge1xuICAgICAgICAgICAgdmFyIHJlc3VsdCA9IDE7XG5cbiAgICAgICAgICAgIHdoaWxlIChyZXN1bHQgPCBudW1iZXIpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgcmVzdWx0IDw8PSAxO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIGNoZWNrcyBpZiB0aGUgZ2l2ZW4gd2lkdGggYW5kIGhlaWdodCBtYWtlIGEgcG93ZXIgb2YgdHdvIHJlY3RhbmdsZVxuICAgICAqXG4gICAgICogQHBhcmFtIHdpZHRoIHtudW1iZXJ9XG4gICAgICogQHBhcmFtIGhlaWdodCB7bnVtYmVyfVxuICAgICAqIEByZXR1cm4ge2Jvb2xlYW59XG4gICAgICovXG4gICAgaXNQb3dlck9mVHdvOiBmdW5jdGlvbiAod2lkdGgsIGhlaWdodClcbiAgICB7XG4gICAgICAgIHJldHVybiAod2lkdGggPiAwICYmICh3aWR0aCAmICh3aWR0aCAtIDEpKSA9PT0gMCAmJiBoZWlnaHQgPiAwICYmIChoZWlnaHQgJiAoaGVpZ2h0IC0gMSkpID09PSAwKTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogZ2V0IHRoZSByZXNvbHV0aW9uIG9mIGFuIGFzc2V0IGJ5IGxvb2tpbmcgZm9yIHRoZSBwcmVmaXhcbiAgICAgKiB1c2VkIGJ5IHNwcml0ZXNoZWV0cyBhbmQgaW1hZ2UgdXJsc1xuICAgICAqXG4gICAgICogQHBhcmFtIHVybCB7c3RyaW5nfSB0aGUgaW1hZ2UgcGF0aFxuICAgICAqIEByZXR1cm4ge251bWJlcn1cbiAgICAgKi9cbiAgICBnZXRSZXNvbHV0aW9uT2ZVcmw6IGZ1bmN0aW9uICh1cmwpXG4gICAge1xuICAgICAgICB2YXIgcmVzb2x1dGlvbiA9IENPTlNULlJFVElOQV9QUkVGSVguZXhlYyh1cmwpO1xuXG4gICAgICAgIGlmIChyZXNvbHV0aW9uKVxuICAgICAgICB7XG4gICAgICAgICAgIHJldHVybiBwYXJzZUZsb2F0KHJlc29sdXRpb25bMV0pO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIDE7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIExvZ3Mgb3V0IHRoZSB2ZXJzaW9uIGFuZCByZW5kZXJlciBpbmZvcm1hdGlvbiBmb3IgdGhpcyBydW5uaW5nIGluc3RhbmNlIG9mIFBJWEkuXG4gICAgICogSWYgeW91IGRvbid0IHdhbnQgdG8gc2VlIHRoaXMgbWVzc2FnZSB5b3UgY2FuIHNldCBgUElYSS51dGlscy5fc2FpZEhlbGxvID0gdHJ1ZTtgXG4gICAgICogc28gdGhlIGxpYnJhcnkgdGhpbmtzIGl0IGFscmVhZHkgc2FpZCBpdC4gS2VlcCBpbiBtaW5kIHRoYXQgZG9pbmcgdGhhdCB3aWxsIGZvcmV2ZXJcbiAgICAgKiBtYWtlcyB5b3UgYSBqZXJrIGZhY2UuXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gdHlwZSAtIFRoZSBzdHJpbmcgcmVuZGVyZXIgdHlwZSB0byBsb2cuXG4gICAgICogQGNvbnN0YW50XG4gICAgICogQHN0YXRpY1xuICAgICAqL1xuICAgIHNheUhlbGxvOiBmdW5jdGlvbiAodHlwZSlcbiAgICB7XG4gICAgICAgIGlmICh1dGlscy5fc2FpZEhlbGxvKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAobmF2aWdhdG9yLnVzZXJBZ2VudC50b0xvd2VyQ2FzZSgpLmluZGV4T2YoJ2Nocm9tZScpID4gLTEpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHZhciBhcmdzID0gW1xuICAgICAgICAgICAgICAgICdcXG4gJWMgJWMgJWMgUGl4aS5qcyAnICsgQ09OU1QuVkVSU0lPTiArICcgLSDinLAgJyArIHR5cGUgKyAnIOKcsCAgJWMgJyArICcgJWMgJyArICcgaHR0cDovL3d3dy5waXhpanMuY29tLyAgJWMgJWMg4pmlJWPimaUlY+KZpSBcXG5cXG4nLFxuICAgICAgICAgICAgICAgICdiYWNrZ3JvdW5kOiAjZmY2NmE1OyBwYWRkaW5nOjVweCAwOycsXG4gICAgICAgICAgICAgICAgJ2JhY2tncm91bmQ6ICNmZjY2YTU7IHBhZGRpbmc6NXB4IDA7JyxcbiAgICAgICAgICAgICAgICAnY29sb3I6ICNmZjY2YTU7IGJhY2tncm91bmQ6ICMwMzAzMDc7IHBhZGRpbmc6NXB4IDA7JyxcbiAgICAgICAgICAgICAgICAnYmFja2dyb3VuZDogI2ZmNjZhNTsgcGFkZGluZzo1cHggMDsnLFxuICAgICAgICAgICAgICAgICdiYWNrZ3JvdW5kOiAjZmZjM2RjOyBwYWRkaW5nOjVweCAwOycsXG4gICAgICAgICAgICAgICAgJ2JhY2tncm91bmQ6ICNmZjY2YTU7IHBhZGRpbmc6NXB4IDA7JyxcbiAgICAgICAgICAgICAgICAnY29sb3I6ICNmZjI0MjQ7IGJhY2tncm91bmQ6ICNmZmY7IHBhZGRpbmc6NXB4IDA7JyxcbiAgICAgICAgICAgICAgICAnY29sb3I6ICNmZjI0MjQ7IGJhY2tncm91bmQ6ICNmZmY7IHBhZGRpbmc6NXB4IDA7JyxcbiAgICAgICAgICAgICAgICAnY29sb3I6ICNmZjI0MjQ7IGJhY2tncm91bmQ6ICNmZmY7IHBhZGRpbmc6NXB4IDA7J1xuICAgICAgICAgICAgXTtcblxuICAgICAgICAgICAgd2luZG93LmNvbnNvbGUubG9nLmFwcGx5KGNvbnNvbGUsIGFyZ3MpOyAvL2pzaGludCBpZ25vcmU6bGluZVxuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHdpbmRvdy5jb25zb2xlKVxuICAgICAgICB7XG4gICAgICAgICAgICB3aW5kb3cuY29uc29sZS5sb2coJ1BpeGkuanMgJyArIENPTlNULlZFUlNJT04gKyAnIC0gJyArIHR5cGUgKyAnIC0gaHR0cDovL3d3dy5waXhpanMuY29tLycpOyAvL2pzaGludCBpZ25vcmU6bGluZVxuICAgICAgICB9XG5cbiAgICAgICAgdXRpbHMuX3NhaWRIZWxsbyA9IHRydWU7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIEhlbHBlciBmb3IgY2hlY2tpbmcgZm9yIHdlYmdsIHN1cHBvcnRcbiAgICAgKlxuICAgICAqIEByZXR1cm4ge2Jvb2xlYW59XG4gICAgICovXG4gICAgaXNXZWJHTFN1cHBvcnRlZDogZnVuY3Rpb24gKClcbiAgICB7XG4gICAgICAgIHZhciBjb250ZXh0T3B0aW9ucyA9IHsgc3RlbmNpbDogdHJ1ZSB9O1xuICAgICAgICB0cnlcbiAgICAgICAge1xuICAgICAgICAgICAgaWYgKCF3aW5kb3cuV2ViR0xSZW5kZXJpbmdDb250ZXh0KVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdmFyIGNhbnZhcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NhbnZhcycpLFxuICAgICAgICAgICAgICAgIGdsID0gY2FudmFzLmdldENvbnRleHQoJ3dlYmdsJywgY29udGV4dE9wdGlvbnMpIHx8IGNhbnZhcy5nZXRDb250ZXh0KCdleHBlcmltZW50YWwtd2ViZ2wnLCBjb250ZXh0T3B0aW9ucyk7XG5cbiAgICAgICAgICAgIHJldHVybiAhIShnbCAmJiBnbC5nZXRDb250ZXh0QXR0cmlidXRlcygpLnN0ZW5jaWwpO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyBzaWduIG9mIG51bWJlclxuICAgICAqXG4gICAgICogQHBhcmFtIG4ge251bWJlcn1cbiAgICAgKiBAcmV0dXJucyB7bnVtYmVyfSAwIGlmIG4gaXMgMCwgLTEgaWYgbiBpcyBuZWdhdGl2ZSwgMSBpZiBuIGkgcG9zaXRpdmVcbiAgICAgKi9cbiAgICBzaWduOiBmdW5jdGlvbiAobilcbiAgICB7XG4gICAgICAgIHJldHVybiBuID8gKG4gPCAwID8gLTEgOiAxKSA6IDA7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIHJlbW92ZUl0ZW1zXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge2FycmF5fSBhcnIgVGhlIHRhcmdldCBhcnJheVxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBzdGFydElkeCBUaGUgaW5kZXggdG8gYmVnaW4gcmVtb3ZpbmcgZnJvbSAoaW5jbHVzaXZlKVxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSByZW1vdmVDb3VudCBIb3cgbWFueSBpdGVtcyB0byByZW1vdmVcbiAgICAgKi9cbiAgICByZW1vdmVJdGVtczogZnVuY3Rpb24gKGFyciwgc3RhcnRJZHgsIHJlbW92ZUNvdW50KVxuICAgIHtcbiAgICAgICAgdmFyIGxlbmd0aCA9IGFyci5sZW5ndGg7XG5cbiAgICAgICAgaWYgKHN0YXJ0SWR4ID49IGxlbmd0aCB8fCByZW1vdmVDb3VudCA9PT0gMClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgcmVtb3ZlQ291bnQgPSAoc3RhcnRJZHgrcmVtb3ZlQ291bnQgPiBsZW5ndGggPyBsZW5ndGgtc3RhcnRJZHggOiByZW1vdmVDb3VudCk7XG4gICAgICAgIGZvciAodmFyIGkgPSBzdGFydElkeCwgbGVuID0gbGVuZ3RoLXJlbW92ZUNvdW50OyBpIDwgbGVuOyArK2kpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGFycltpXSA9IGFycltpICsgcmVtb3ZlQ291bnRdO1xuICAgICAgICB9XG5cbiAgICAgICAgYXJyLmxlbmd0aCA9IGxlbjtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQHRvZG8gRGVzY3JpYmUgcHJvcGVydHkgdXNhZ2VcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIFRleHR1cmVDYWNoZToge30sXG5cbiAgICAvKipcbiAgICAgKiBAdG9kbyBEZXNjcmliZSBwcm9wZXJ0eSB1c2FnZVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgQmFzZVRleHR1cmVDYWNoZToge31cbn07XG4iLCIvKipcbiAqIE1peGlucyBmdW5jdGlvbmFsaXR5IHRvIG1ha2UgYW4gb2JqZWN0IGhhdmUgXCJwbHVnaW5zXCIuXG4gKlxuICogQG1peGluXG4gKiBAbWVtYmVyb2YgUElYSS51dGlsc1xuICogQHBhcmFtIG9iaiB7b2JqZWN0fSBUaGUgb2JqZWN0IHRvIG1peCBpbnRvLlxuICogQGV4YW1wbGVcbiAqICAgICAgZnVuY3Rpb24gTXlPYmplY3QoKSB7fVxuICpcbiAqICAgICAgcGx1Z2luVGFyZ2V0Lm1peGluKE15T2JqZWN0KTtcbiAqL1xuZnVuY3Rpb24gcGx1Z2luVGFyZ2V0KG9iailcbntcbiAgICBvYmouX19wbHVnaW5zID0ge307XG5cbiAgICAvKipcbiAgICAgKiBBZGRzIGEgcGx1Z2luIHRvIGFuIG9iamVjdFxuICAgICAqXG4gICAgICogQHBhcmFtIHBsdWdpbk5hbWUge3N0cmluZ30gVGhlIGV2ZW50cyB0aGF0IHNob3VsZCBiZSBsaXN0ZWQuXG4gICAgICogQHBhcmFtIGN0b3Ige0Z1bmN0aW9ufSBUaGUgY29uc3RydWN0b3IgZnVuY3Rpb24gZm9yIHRoZSBwbHVnaW4uXG4gICAgICovXG4gICAgb2JqLnJlZ2lzdGVyUGx1Z2luID0gZnVuY3Rpb24gKHBsdWdpbk5hbWUsIGN0b3IpXG4gICAge1xuICAgICAgICBvYmouX19wbHVnaW5zW3BsdWdpbk5hbWVdID0gY3RvcjtcbiAgICB9O1xuXG4gICAgLyoqXG4gICAgICogSW5zdGFudGlhdGVzIGFsbCB0aGUgcGx1Z2lucyBvZiB0aGlzIG9iamVjdFxuICAgICAqXG4gICAgICovXG4gICAgb2JqLnByb3RvdHlwZS5pbml0UGx1Z2lucyA9IGZ1bmN0aW9uICgpXG4gICAge1xuICAgICAgICB0aGlzLnBsdWdpbnMgPSB0aGlzLnBsdWdpbnMgfHwge307XG5cbiAgICAgICAgZm9yICh2YXIgbyBpbiBvYmouX19wbHVnaW5zKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnBsdWdpbnNbb10gPSBuZXcgKG9iai5fX3BsdWdpbnNbb10pKHRoaXMpO1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIC8qKlxuICAgICAqIFJlbW92ZXMgYWxsIHRoZSBwbHVnaW5zIG9mIHRoaXMgb2JqZWN0XG4gICAgICpcbiAgICAgKi9cbiAgICBvYmoucHJvdG90eXBlLmRlc3Ryb3lQbHVnaW5zID0gZnVuY3Rpb24gKClcbiAgICB7XG4gICAgICAgIGZvciAodmFyIG8gaW4gdGhpcy5wbHVnaW5zKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnBsdWdpbnNbb10uZGVzdHJveSgpO1xuICAgICAgICAgICAgdGhpcy5wbHVnaW5zW29dID0gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMucGx1Z2lucyA9IG51bGw7XG4gICAgfTtcbn1cblxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgICAvKipcbiAgICAgKiBNaXhlcyBpbiB0aGUgcHJvcGVydGllcyBvZiB0aGUgcGx1Z2luVGFyZ2V0IGludG8gYW5vdGhlciBvYmplY3RcbiAgICAgKlxuICAgICAqIEBwYXJhbSBvYmplY3Qge29iamVjdH0gVGhlIG9iaiB0byBtaXggaW50b1xuICAgICAqL1xuICAgIG1peGluOiBmdW5jdGlvbiBtaXhpbihvYmopXG4gICAge1xuICAgICAgICBwbHVnaW5UYXJnZXQob2JqKTtcbiAgICB9XG59O1xuIiwiLypnbG9iYWwgY29uc29sZSAqL1xudmFyIGNvcmUgPSByZXF1aXJlKCcuL2NvcmUnKSxcbiAgICBtZXNoID0gcmVxdWlyZSgnLi9tZXNoJyksXG4gICAgZXh0cmFzID0gcmVxdWlyZSgnLi9leHRyYXMnKSxcbiAgICBmaWx0ZXJzID0gcmVxdWlyZSgnLi9maWx0ZXJzJyk7XG5cbi8qKlxuICogQGNsYXNzXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgU3ByaXRlQmF0Y2hcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAc2VlIFBJWEkuUGFydGljbGVDb250YWluZXJcbiAqIEB0aHJvd3Mge1JlZmVyZW5jZUVycm9yfSBTcHJpdGVCYXRjaCBkb2VzIG5vdCBleGlzdCBhbnkgbW9yZSwgcGxlYXNlIHVzZSB0aGUgbmV3IFBhcnRpY2xlQ29udGFpbmVyIGluc3RlYWQuXG4gKiBAZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDMuMC4wXG4gKi9cbmNvcmUuU3ByaXRlQmF0Y2ggPSBmdW5jdGlvbigpXG57XG4gICAgdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKCdTcHJpdGVCYXRjaCBkb2VzIG5vdCBleGlzdCBhbnkgbW9yZSwgcGxlYXNlIHVzZSB0aGUgbmV3IFBhcnRpY2xlQ29udGFpbmVyIGluc3RlYWQuJyk7XG59O1xuXG4vKipcbiAqIEBjbGFzc1xuICogQHByaXZhdGVcbiAqIEBuYW1lIEFzc2V0TG9hZGVyXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHNlZSBQSVhJLmxvYWRlcnMuTG9hZGVyXG4gKiBAdGhyb3dzIHtSZWZlcmVuY2VFcnJvcn0gVGhlIGxvYWRlciBzeXN0ZW0gd2FzIG92ZXJoYXVsZWQgaW4gcGl4aSB2MywgcGxlYXNlIHNlZSB0aGUgbmV3IFBJWEkubG9hZGVycy5Mb2FkZXIgY2xhc3MuXG4gKiBAZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDMuMC4wXG4gKi9cbmNvcmUuQXNzZXRMb2FkZXIgPSBmdW5jdGlvbigpXG57XG4gICAgdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKCdUaGUgbG9hZGVyIHN5c3RlbSB3YXMgb3ZlcmhhdWxlZCBpbiBwaXhpIHYzLCBwbGVhc2Ugc2VlIHRoZSBuZXcgUElYSS5sb2FkZXJzLkxvYWRlciBjbGFzcy4nKTtcbn07XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGNvcmUsIHtcblxuICAgIC8qKlxuICAgICAqIEBjbGFzc1xuICAgICAqIEBwcml2YXRlXG4gICAgICogQG5hbWUgU3RhZ2VcbiAgICAgKiBAbWVtYmVyb2YgUElYSVxuICAgICAqIEBzZWUgUElYSS5Db250YWluZXJcbiAgICAgKiBAZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDMuMC4wXG4gICAgICovXG4gICAgU3RhZ2U6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbigpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignWW91IGRvIG5vdCBuZWVkIHRvIHVzZSBhIFBJWEkgU3RhZ2UgYW55IG1vcmUsIHlvdSBjYW4gc2ltcGx5IHJlbmRlciBhbnkgY29udGFpbmVyLicpO1xuICAgICAgICAgICAgcmV0dXJuIGNvcmUuQ29udGFpbmVyO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIEBjbGFzc1xuICAgICAqIEBwcml2YXRlXG4gICAgICogQG5hbWUgRGlzcGxheU9iamVjdENvbnRhaW5lclxuICAgICAqIEBtZW1iZXJvZiBQSVhJXG4gICAgICogQHNlZSBQSVhJLkNvbnRhaW5lclxuICAgICAqIEBkZXByZWNhdGVkIHNpbmNlIHZlcnNpb24gMy4wLjBcbiAgICAgKi9cbiAgICBEaXNwbGF5T2JqZWN0Q29udGFpbmVyOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24oKVxuICAgICAgICB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ0Rpc3BsYXlPYmplY3RDb250YWluZXIgaGFzIGJlZW4gc2hvcnRlbmVkIHRvIENvbnRhaW5lciwgcGxlYXNlIHVzZSBDb250YWluZXIgZnJvbSBub3cgb24uJyk7XG4gICAgICAgICAgICByZXR1cm4gY29yZS5Db250YWluZXI7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQGNsYXNzXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAbmFtZSBTdHJpcFxuICAgICAqIEBtZW1iZXJvZiBQSVhJXG4gICAgICogQHNlZSBQSVhJLm1lc2guTWVzaFxuICAgICAqIEBkZXByZWNhdGVkIHNpbmNlIHZlcnNpb24gMy4wLjBcbiAgICAgKi9cbiAgICBTdHJpcDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uKClcbiAgICAgICAge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKCdUaGUgU3RyaXAgY2xhc3MgaGFzIGJlZW4gcmVuYW1lZCB0byBNZXNoIGFuZCBtb3ZlZCB0byBtZXNoLk1lc2gsIHBsZWFzZSB1c2UgbWVzaC5NZXNoIGZyb20gbm93IG9uLicpO1xuICAgICAgICAgICAgcmV0dXJuIG1lc2guTWVzaDtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBAY2xhc3NcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBuYW1lIFJvcGVcbiAgICAgKiBAbWVtYmVyb2YgUElYSVxuICAgICAqIEBzZWUgUElYSS5tZXNoLlJvcGVcbiAgICAgKiBAZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDMuMC4wXG4gICAgICovXG4gICAgUm9wZToge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uKClcbiAgICAgICAge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKCdUaGUgUm9wZSBjbGFzcyBoYXMgYmVlbiBtb3ZlZCB0byBtZXNoLlJvcGUsIHBsZWFzZSB1c2UgbWVzaC5Sb3BlIGZyb20gbm93IG9uLicpO1xuICAgICAgICAgICAgcmV0dXJuIG1lc2guUm9wZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBAY2xhc3NcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBuYW1lIE1vdmllQ2xpcFxuICAgICAqIEBtZW1iZXJvZiBQSVhJXG4gICAgICogQHNlZSBQSVhJLmV4dHJhcy5Nb3ZpZUNsaXBcbiAgICAgKiBAZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDMuMC4wXG4gICAgICovXG4gICAgTW92aWVDbGlwOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24oKVxuICAgICAgICB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ1RoZSBNb3ZpZUNsaXAgY2xhc3MgaGFzIGJlZW4gbW92ZWQgdG8gZXh0cmFzLk1vdmllQ2xpcCwgcGxlYXNlIHVzZSBleHRyYXMuTW92aWVDbGlwIGZyb20gbm93IG9uLicpO1xuICAgICAgICAgICAgcmV0dXJuIGV4dHJhcy5Nb3ZpZUNsaXA7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQGNsYXNzXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAbmFtZSBUaWxpbmdTcHJpdGVcbiAgICAgKiBAbWVtYmVyb2YgUElYSVxuICAgICAqIEBzZWUgUElYSS5leHRyYXMuVGlsaW5nU3ByaXRlXG4gICAgICogQGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiAzLjAuMFxuICAgICAqL1xuICAgIFRpbGluZ1Nwcml0ZToge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uKClcbiAgICAgICAge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKCdUaGUgVGlsaW5nU3ByaXRlIGNsYXNzIGhhcyBiZWVuIG1vdmVkIHRvIGV4dHJhcy5UaWxpbmdTcHJpdGUsIHBsZWFzZSB1c2UgZXh0cmFzLlRpbGluZ1Nwcml0ZSBmcm9tIG5vdyBvbi4nKTtcbiAgICAgICAgICAgIHJldHVybiBleHRyYXMuVGlsaW5nU3ByaXRlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIEBjbGFzc1xuICAgICAqIEBwcml2YXRlXG4gICAgICogQG5hbWUgQml0bWFwVGV4dFxuICAgICAqIEBtZW1iZXJvZiBQSVhJXG4gICAgICogQHNlZSBQSVhJLmV4dHJhcy5CaXRtYXBUZXh0XG4gICAgICogQGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiAzLjAuMFxuICAgICAqL1xuICAgIEJpdG1hcFRleHQ6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbigpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignVGhlIEJpdG1hcFRleHQgY2xhc3MgaGFzIGJlZW4gbW92ZWQgdG8gZXh0cmFzLkJpdG1hcFRleHQsIHBsZWFzZSB1c2UgZXh0cmFzLkJpdG1hcFRleHQgZnJvbSBub3cgb24uJyk7XG4gICAgICAgICAgICByZXR1cm4gZXh0cmFzLkJpdG1hcFRleHQ7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQGNsYXNzXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAbmFtZSBibGVuZE1vZGVzXG4gICAgICogQG1lbWJlcm9mIFBJWElcbiAgICAgKiBAc2VlIFBJWEkuQkxFTkRfTU9ERVNcbiAgICAgKiBAZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDMuMC4wXG4gICAgICovXG4gICAgYmxlbmRNb2Rlczoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uKClcbiAgICAgICAge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKCdUaGUgYmxlbmRNb2RlcyBoYXMgYmVlbiBtb3ZlZCB0byBCTEVORF9NT0RFUywgcGxlYXNlIHVzZSBCTEVORF9NT0RFUyBmcm9tIG5vdyBvbi4nKTtcbiAgICAgICAgICAgIHJldHVybiBjb3JlLkJMRU5EX01PREVTO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIEBjbGFzc1xuICAgICAqIEBwcml2YXRlXG4gICAgICogQG5hbWUgc2NhbGVNb2Rlc1xuICAgICAqIEBtZW1iZXJvZiBQSVhJXG4gICAgICogQHNlZSBQSVhJLlNDQUxFX01PREVTXG4gICAgICogQGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiAzLjAuMFxuICAgICAqL1xuICAgIHNjYWxlTW9kZXM6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbigpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignVGhlIHNjYWxlTW9kZXMgaGFzIGJlZW4gbW92ZWQgdG8gU0NBTEVfTU9ERVMsIHBsZWFzZSB1c2UgU0NBTEVfTU9ERVMgZnJvbSBub3cgb24uJyk7XG4gICAgICAgICAgICByZXR1cm4gY29yZS5TQ0FMRV9NT0RFUztcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBAY2xhc3NcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBuYW1lIEJhc2VUZXh0dXJlQ2FjaGVcbiAgICAgKiBAbWVtYmVyb2YgUElYSVxuICAgICAqIEBzZWUgUElYSS51dGlscy5CYXNlVGV4dHVyZUNhY2hlXG4gICAgICogQGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiAzLjAuMFxuICAgICAqL1xuICAgIEJhc2VUZXh0dXJlQ2FjaGU6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ1RoZSBCYXNlVGV4dHVyZUNhY2hlIGNsYXNzIGhhcyBiZWVuIG1vdmVkIHRvIHV0aWxzLkJhc2VUZXh0dXJlQ2FjaGUsIHBsZWFzZSB1c2UgdXRpbHMuQmFzZVRleHR1cmVDYWNoZSBmcm9tIG5vdyBvbi4nKTtcbiAgICAgICAgICAgIHJldHVybiBjb3JlLnV0aWxzLkJhc2VUZXh0dXJlQ2FjaGU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQGNsYXNzXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAbmFtZSBUZXh0dXJlQ2FjaGVcbiAgICAgKiBAbWVtYmVyb2YgUElYSVxuICAgICAqIEBzZWUgUElYSS51dGlscy5UZXh0dXJlQ2FjaGVcbiAgICAgKiBAZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDMuMC4wXG4gICAgICovXG4gICAgVGV4dHVyZUNhY2hlOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKCdUaGUgVGV4dHVyZUNhY2hlIGNsYXNzIGhhcyBiZWVuIG1vdmVkIHRvIHV0aWxzLlRleHR1cmVDYWNoZSwgcGxlYXNlIHVzZSB1dGlscy5UZXh0dXJlQ2FjaGUgZnJvbSBub3cgb24uJyk7XG4gICAgICAgICAgICByZXR1cm4gY29yZS51dGlscy5UZXh0dXJlQ2FjaGU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQG5hbWVzcGFjZVxuICAgICAqIEBwcml2YXRlXG4gICAgICogQG5hbWUgbWF0aFxuICAgICAqIEBtZW1iZXJvZiBQSVhJXG4gICAgICogQHNlZSBQSVhJXG4gICAgICogQGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiAzLjAuNlxuICAgICAqL1xuICAgIG1hdGg6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ1RoZSBtYXRoIG5hbWVzcGFjZSBpcyBkZXByZWNhdGVkLCBwbGVhc2UgYWNjZXNzIG1lbWJlcnMgYWxyZWFkeSBhY2Nlc3NpYmxlIG9uIFBJWEkuJyk7XG4gICAgICAgICAgICByZXR1cm4gY29yZTtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuXG4vKipcbiAqIEBtZXRob2RcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBQSVhJLlNwcml0ZSNzZXRUZXh0dXJlXG4gKiBAc2VlIFBJWEkuU3ByaXRlI3RleHR1cmVcbiAqIEBkZXByZWNhdGVkIHNpbmNlIHZlcnNpb24gMy4wLjBcbiAqL1xuY29yZS5TcHJpdGUucHJvdG90eXBlLnNldFRleHR1cmUgPSBmdW5jdGlvbih0ZXh0dXJlKVxue1xuICAgIHRoaXMudGV4dHVyZSA9IHRleHR1cmU7XG4gICAgY29uc29sZS53YXJuKCdzZXRUZXh0dXJlIGlzIG5vdyBkZXByZWNhdGVkLCBwbGVhc2UgdXNlIHRoZSB0ZXh0dXJlIHByb3BlcnR5LCBlLmcgOiBzcHJpdGUudGV4dHVyZSA9IHRleHR1cmU7Jyk7XG59O1xuXG4vKipcbiAqIEBtZXRob2RcbiAqIEBuYW1lIFBJWEkuZXh0cmFzLkJpdG1hcFRleHQjc2V0VGV4dFxuICogQHNlZSBQSVhJLmV4dHJhcy5CaXRtYXBUZXh0I3RleHRcbiAqIEBkZXByZWNhdGVkIHNpbmNlIHZlcnNpb24gMy4wLjBcbiAqL1xuZXh0cmFzLkJpdG1hcFRleHQucHJvdG90eXBlLnNldFRleHQgPSBmdW5jdGlvbih0ZXh0KVxue1xuICAgIHRoaXMudGV4dCA9IHRleHQ7XG4gICAgY29uc29sZS53YXJuKCdzZXRUZXh0IGlzIG5vdyBkZXByZWNhdGVkLCBwbGVhc2UgdXNlIHRoZSB0ZXh0IHByb3BlcnR5LCBlLmcgOiBteUJpdG1hcFRleHQudGV4dCA9IFxcJ215IHRleHRcXCc7Jyk7XG59O1xuXG4vKipcbiAqIEBtZXRob2RcbiAqIEBuYW1lIFBJWEkuVGV4dCNzZXRUZXh0XG4gKiBAc2VlIFBJWEkuVGV4dCN0ZXh0XG4gKiBAZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDMuMC4wXG4gKi9cbmNvcmUuVGV4dC5wcm90b3R5cGUuc2V0VGV4dCA9IGZ1bmN0aW9uKHRleHQpXG57XG4gICAgdGhpcy50ZXh0ID0gdGV4dDtcbiAgICBjb25zb2xlLndhcm4oJ3NldFRleHQgaXMgbm93IGRlcHJlY2F0ZWQsIHBsZWFzZSB1c2UgdGhlIHRleHQgcHJvcGVydHksIGUuZyA6IG15VGV4dC50ZXh0ID0gXFwnbXkgdGV4dFxcJzsnKTtcbn07XG5cbi8qKlxuICogQG1ldGhvZFxuICogQG5hbWUgUElYSS5UZXh0I3NldFN0eWxlXG4gKiBAc2VlIFBJWEkuVGV4dCNzdHlsZVxuICogQGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiAzLjAuMFxuICovXG5jb3JlLlRleHQucHJvdG90eXBlLnNldFN0eWxlID0gZnVuY3Rpb24oc3R5bGUpXG57XG4gICAgdGhpcy5zdHlsZSA9IHN0eWxlO1xuICAgIGNvbnNvbGUud2Fybignc2V0U3R5bGUgaXMgbm93IGRlcHJlY2F0ZWQsIHBsZWFzZSB1c2UgdGhlIHN0eWxlIHByb3BlcnR5LCBlLmcgOiBteVRleHQuc3R5bGUgPSBzdHlsZTsnKTtcbn07XG5cbi8qKlxuICogQG1ldGhvZFxuICogQG5hbWUgUElYSS5UZXh0dXJlI3NldEZyYW1lXG4gKiBAc2VlIFBJWEkuVGV4dHVyZSNzZXRGcmFtZVxuICogQGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiAzLjAuMFxuICovXG5jb3JlLlRleHR1cmUucHJvdG90eXBlLnNldEZyYW1lID0gZnVuY3Rpb24oZnJhbWUpXG57XG4gICAgdGhpcy5mcmFtZSA9IGZyYW1lO1xuICAgIGNvbnNvbGUud2Fybignc2V0RnJhbWUgaXMgbm93IGRlcHJlY2F0ZWQsIHBsZWFzZSB1c2UgdGhlIGZyYW1lIHByb3BlcnR5LCBlLmcgOiBteVRleHR1cmUuZnJhbWUgPSBmcmFtZTsnKTtcbn07XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGZpbHRlcnMsIHtcblxuICAgIC8qKlxuICAgICAqIEBjbGFzc1xuICAgICAqIEBwcml2YXRlXG4gICAgICogQG5hbWUgUElYSS5maWx0ZXJzLkFic3RyYWN0RmlsdGVyXG4gICAgICogQHNlZSBQSVhJLkFic3RyYWN0RmlsdGVyXG4gICAgICogQGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiAzLjAuNlxuICAgICAqL1xuICAgIEFic3RyYWN0RmlsdGVyOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24oKVxuICAgICAgICB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ2ZpbHRlcnMuQWJzdHJhY3RGaWx0ZXIgaXMgYW4gdW5kb2N1bWVudGVkIGFsaWFzLCBwbGVhc2UgdXNlIEFic3RyYWN0RmlsdGVyIGZyb20gbm93IG9uLicpO1xuICAgICAgICAgICAgcmV0dXJuIGNvcmUuQWJzdHJhY3RGaWx0ZXI7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQGNsYXNzXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAbmFtZSBQSVhJLmZpbHRlcnMuRlhBQUZpbHRlclxuICAgICAqIEBzZWUgUElYSS5GWEFBRmlsdGVyXG4gICAgICogQGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiAzLjAuNlxuICAgICAqL1xuICAgIEZYQUFGaWx0ZXI6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbigpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignZmlsdGVycy5GWEFBRmlsdGVyIGlzIGFuIHVuZG9jdW1lbnRlZCBhbGlhcywgcGxlYXNlIHVzZSBGWEFBRmlsdGVyIGZyb20gbm93IG9uLicpO1xuICAgICAgICAgICAgcmV0dXJuIGNvcmUuRlhBQUZpbHRlcjtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBAY2xhc3NcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBuYW1lIFBJWEkuZmlsdGVycy5TcHJpdGVNYXNrRmlsdGVyXG4gICAgICogQHNlZSBQSVhJLlNwcml0ZU1hc2tGaWx0ZXJcbiAgICAgKiBAZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDMuMC42XG4gICAgICovXG4gICAgU3ByaXRlTWFza0ZpbHRlcjoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uKClcbiAgICAgICAge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKCdmaWx0ZXJzLlNwcml0ZU1hc2tGaWx0ZXIgaXMgYW4gdW5kb2N1bWVudGVkIGFsaWFzLCBwbGVhc2UgdXNlIFNwcml0ZU1hc2tGaWx0ZXIgZnJvbSBub3cgb24uJyk7XG4gICAgICAgICAgICByZXR1cm4gY29yZS5TcHJpdGVNYXNrRmlsdGVyO1xuICAgICAgICB9XG4gICAgfVxufSk7XG5cbi8qKlxuICogQG1ldGhvZFxuICogQG5hbWUgUElYSS51dGlscy51dWlkXG4gKiBAc2VlIFBJWEkudXRpbHMudWlkXG4gKiBAZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDMuMC42XG4gKi9cbmNvcmUudXRpbHMudXVpZCA9IGZ1bmN0aW9uICgpXG57XG4gICAgY29uc29sZS53YXJuKCd1dGlscy51dWlkKCkgaXMgZGVwcmVjYXRlZCwgcGxlYXNlIHVzZSB1dGlscy51aWQoKSBmcm9tIG5vdyBvbi4nKTtcbiAgICByZXR1cm4gY29yZS51dGlscy51aWQoKTtcbn07XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uL2NvcmUnKTtcblxuLyoqXG4gKiBBIEJpdG1hcFRleHQgb2JqZWN0IHdpbGwgY3JlYXRlIGEgbGluZSBvciBtdWx0aXBsZSBsaW5lcyBvZiB0ZXh0IHVzaW5nIGJpdG1hcCBmb250LiBUb1xuICogc3BsaXQgYSBsaW5lIHlvdSBjYW4gdXNlICdcXG4nLCAnXFxyJyBvciAnXFxyXFxuJyBpbiB5b3VyIHN0cmluZy4gWW91IGNhbiBnZW5lcmF0ZSB0aGUgZm50IGZpbGVzIHVzaW5nOlxuICpcbiAqIEEgQml0bWFwVGV4dCBjYW4gb25seSBiZSBjcmVhdGVkIHdoZW4gdGhlIGZvbnQgaXMgbG9hZGVkXG4gKlxuICogYGBganNcbiAqIC8vIGluIHRoaXMgY2FzZSB0aGUgZm9udCBpcyBpbiBhIGZpbGUgY2FsbGVkICdkZXN5cmVsLmZudCdcbiAqIHZhciBiaXRtYXBUZXh0ID0gbmV3IFBJWEkuZXh0cmFzLkJpdG1hcFRleHQoXCJ0ZXh0IHVzaW5nIGEgZmFuY3kgZm9udCFcIiwge2ZvbnQ6IFwiMzVweCBEZXN5cmVsXCIsIGFsaWduOiBcInJpZ2h0XCJ9KTtcbiAqIGBgYFxuICpcbiAqXG4gKiBodHRwOi8vd3d3LmFuZ2VsY29kZS5jb20vcHJvZHVjdHMvYm1mb250LyBmb3Igd2luZG93cyBvclxuICogaHR0cDovL3d3dy5ibWdseXBoLmNvbS8gZm9yIG1hYy5cbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQ29udGFpbmVyXG4gKiBAbWVtYmVyb2YgUElYSS5leHRyYXNcbiAqIEBwYXJhbSB0ZXh0IHtzdHJpbmd9IFRoZSBjb3B5IHRoYXQgeW91IHdvdWxkIGxpa2UgdGhlIHRleHQgdG8gZGlzcGxheVxuICogQHBhcmFtIHN0eWxlIHtvYmplY3R9IFRoZSBzdHlsZSBwYXJhbWV0ZXJzXG4gKiBAcGFyYW0gc3R5bGUuZm9udCB7c3RyaW5nfG9iamVjdH0gVGhlIGZvbnQgZGVzY3JpcHRvciBmb3IgdGhlIG9iamVjdCwgY2FuIGJlIHBhc3NlZCBhcyBhIHN0cmluZyBvZiBmb3JtXG4gKiAgICAgIFwiMjRweCBGb250TmFtZVwiIG9yIFwiRm9udE5hbWVcIiBvciBhcyBhbiBvYmplY3Qgd2l0aCBleHBsaWNpdCBuYW1lL3NpemUgcHJvcGVydGllcy5cbiAqIEBwYXJhbSBbc3R5bGUuZm9udC5uYW1lXSB7c3RyaW5nfSBUaGUgYml0bWFwIGZvbnQgaWRcbiAqIEBwYXJhbSBbc3R5bGUuZm9udC5zaXplXSB7bnVtYmVyfSBUaGUgc2l6ZSBvZiB0aGUgZm9udCBpbiBwaXhlbHMsIGUuZy4gMjRcbiAqIEBwYXJhbSBbc3R5bGUuYWxpZ249J2xlZnQnXSB7c3RyaW5nfSBBbGlnbm1lbnQgZm9yIG11bHRpbGluZSB0ZXh0ICgnbGVmdCcsICdjZW50ZXInIG9yICdyaWdodCcpLCBkb2VzIG5vdCBhZmZlY3RcbiAqICAgICAgc2luZ2xlIGxpbmUgdGV4dFxuICogQHBhcmFtIFtzdHlsZS50aW50PTB4RkZGRkZGXSB7bnVtYmVyfSBUaGUgdGludCBjb2xvclxuICovXG5mdW5jdGlvbiBCaXRtYXBUZXh0KHRleHQsIHN0eWxlKVxue1xuICAgIGNvcmUuQ29udGFpbmVyLmNhbGwodGhpcyk7XG5cbiAgICBzdHlsZSA9IHN0eWxlIHx8IHt9O1xuXG4gICAgLyoqXG4gICAgICogVGhlIHdpZHRoIG9mIHRoZSBvdmVyYWxsIHRleHQsIGRpZmZlcmVudCBmcm9tIGZvbnRTaXplLFxuICAgICAqIHdoaWNoIGlzIGRlZmluZWQgaW4gdGhlIHN0eWxlIG9iamVjdFxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEByZWFkT25seVxuICAgICAqL1xuICAgIHRoaXMudGV4dFdpZHRoID0gMDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBoZWlnaHQgb2YgdGhlIG92ZXJhbGwgdGV4dCwgZGlmZmVyZW50IGZyb20gZm9udFNpemUsXG4gICAgICogd2hpY2ggaXMgZGVmaW5lZCBpbiB0aGUgc3R5bGUgb2JqZWN0XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQHJlYWRPbmx5XG4gICAgICovXG4gICAgdGhpcy50ZXh0SGVpZ2h0ID0gMDtcblxuICAgIC8qKlxuICAgICAqIFByaXZhdGUgdHJhY2tlciBmb3IgdGhlIGxldHRlciBzcHJpdGUgcG9vbC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuU3ByaXRlW119XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9nbHlwaHMgPSBbXTtcblxuICAgIC8qKlxuICAgICAqIFByaXZhdGUgdHJhY2tlciBmb3IgdGhlIGN1cnJlbnQgc3R5bGUuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtvYmplY3R9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9mb250ID0ge1xuICAgICAgICB0aW50OiBzdHlsZS50aW50ICE9PSB1bmRlZmluZWQgPyBzdHlsZS50aW50IDogMHhGRkZGRkYsXG4gICAgICAgIGFsaWduOiBzdHlsZS5hbGlnbiB8fCAnbGVmdCcsXG4gICAgICAgIG5hbWU6IG51bGwsXG4gICAgICAgIHNpemU6IDBcbiAgICB9O1xuXG4gICAgLyoqXG4gICAgICogUHJpdmF0ZSB0cmFja2VyIGZvciB0aGUgY3VycmVudCBmb250LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7b2JqZWN0fVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5mb250ID0gc3R5bGUuZm9udDsgLy8gcnVuIGZvbnQgc2V0dGVyXG5cbiAgICAvKipcbiAgICAgKiBQcml2YXRlIHRyYWNrZXIgZm9yIHRoZSBjdXJyZW50IHRleHQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtzdHJpbmd9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl90ZXh0ID0gdGV4dDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBtYXggd2lkdGggb2YgdGhpcyBiaXRtYXAgdGV4dCBpbiBwaXhlbHMuIElmIHRoZSB0ZXh0IHByb3ZpZGVkIGlzIGxvbmdlciB0aGFuIHRoZSB2YWx1ZSBwcm92aWRlZCwgbGluZSBicmVha3Mgd2lsbCBiZSBhdXRvbWF0aWNhbGx5IGluc2VydGVkIGluIHRoZSBsYXN0IHdoaXRlc3BhY2UuXG4gICAgICogRGlzYWJsZSBieSBzZXR0aW5nIHZhbHVlIHRvIDBcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLm1heFdpZHRoID0gMDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBtYXggbGluZSBoZWlnaHQuIFRoaXMgaXMgdXNlZnVsIHdoZW4gdHJ5aW5nIHRvIHVzZSB0aGUgdG90YWwgaGVpZ2h0IG9mIHRoZSBUZXh0LCBpZTogd2hlbiB0cnlpbmcgdG8gdmVydGljYWxseSBhbGlnbi5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLm1heExpbmVIZWlnaHQgPSAwO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGRpcnR5IHN0YXRlIG9mIHRoaXMgb2JqZWN0LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKi9cbiAgICB0aGlzLmRpcnR5ID0gZmFsc2U7XG5cbiAgICB0aGlzLnVwZGF0ZVRleHQoKTtcbn1cblxuLy8gY29uc3RydWN0b3JcbkJpdG1hcFRleHQucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShjb3JlLkNvbnRhaW5lci5wcm90b3R5cGUpO1xuQml0bWFwVGV4dC5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBCaXRtYXBUZXh0O1xubW9kdWxlLmV4cG9ydHMgPSBCaXRtYXBUZXh0O1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhCaXRtYXBUZXh0LnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFRoZSB0aW50IG9mIHRoZSBCaXRtYXBUZXh0IG9iamVjdFxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmV4dHJhcy5CaXRtYXBUZXh0I1xuICAgICAqL1xuICAgIHRpbnQ6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fZm9udC50aW50O1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5fZm9udC50aW50ID0gKHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicgJiYgdmFsdWUgPj0gMCkgPyB2YWx1ZSA6IDB4RkZGRkZGO1xuXG4gICAgICAgICAgICB0aGlzLmRpcnR5ID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBUaGUgYWxpZ25tZW50IG9mIHRoZSBCaXRtYXBUZXh0IG9iamVjdFxuICAgICAqXG4gICAgICogQG1lbWJlciB7c3RyaW5nfVxuICAgICAqIEBkZWZhdWx0ICdsZWZ0J1xuICAgICAqIEBtZW1iZXJvZiBQSVhJLmV4dHJhcy5CaXRtYXBUZXh0I1xuICAgICAqL1xuICAgIGFsaWduOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2ZvbnQuYWxpZ247XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLl9mb250LmFsaWduID0gdmFsdWUgfHwgJ2xlZnQnO1xuXG4gICAgICAgICAgICB0aGlzLmRpcnR5ID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBUaGUgZm9udCBkZXNjcmlwdG9yIG9mIHRoZSBCaXRtYXBUZXh0IG9iamVjdFxuICAgICAqXG4gICAgICogQG1lbWJlciB7Rm9udH1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5leHRyYXMuQml0bWFwVGV4dCNcbiAgICAgKi9cbiAgICBmb250OiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2ZvbnQ7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICBpZiAoIXZhbHVlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgICAgIHZhbHVlID0gdmFsdWUuc3BsaXQoJyAnKTtcblxuICAgICAgICAgICAgICAgIHRoaXMuX2ZvbnQubmFtZSA9IHZhbHVlLmxlbmd0aCA9PT0gMSA/IHZhbHVlWzBdIDogdmFsdWUuc2xpY2UoMSkuam9pbignICcpO1xuICAgICAgICAgICAgICAgIHRoaXMuX2ZvbnQuc2l6ZSA9IHZhbHVlLmxlbmd0aCA+PSAyID8gcGFyc2VJbnQodmFsdWVbMF0sIDEwKSA6IEJpdG1hcFRleHQuZm9udHNbdGhpcy5fZm9udC5uYW1lXS5zaXplO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fZm9udC5uYW1lID0gdmFsdWUubmFtZTtcbiAgICAgICAgICAgICAgICB0aGlzLl9mb250LnNpemUgPSB0eXBlb2YgdmFsdWUuc2l6ZSA9PT0gJ251bWJlcicgPyB2YWx1ZS5zaXplIDogcGFyc2VJbnQodmFsdWUuc2l6ZSwgMTApO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLmRpcnR5ID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBUaGUgdGV4dCBvZiB0aGUgQml0bWFwVGV4dCBvYmplY3RcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge3N0cmluZ31cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5leHRyYXMuQml0bWFwVGV4dCNcbiAgICAgKi9cbiAgICB0ZXh0OiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3RleHQ7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB2YWx1ZSA9IHZhbHVlLnRvU3RyaW5nKCkgfHwgJyAnO1xuICAgICAgICAgICAgaWYgKHRoaXMuX3RleHQgPT09IHZhbHVlKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuX3RleHQgPSB2YWx1ZTtcbiAgICAgICAgICAgIHRoaXMuZGlydHkgPSB0cnVlO1xuICAgICAgICB9XG4gICAgfVxufSk7XG5cbi8qKlxuICogUmVuZGVycyB0ZXh0IGFuZCB1cGRhdGVzIGl0IHdoZW4gbmVlZGVkXG4gKlxuICogQHByaXZhdGVcbiAqL1xuQml0bWFwVGV4dC5wcm90b3R5cGUudXBkYXRlVGV4dCA9IGZ1bmN0aW9uICgpXG57XG4gICAgdmFyIGRhdGEgPSBCaXRtYXBUZXh0LmZvbnRzW3RoaXMuX2ZvbnQubmFtZV07XG4gICAgdmFyIHBvcyA9IG5ldyBjb3JlLlBvaW50KCk7XG4gICAgdmFyIHByZXZDaGFyQ29kZSA9IG51bGw7XG4gICAgdmFyIGNoYXJzID0gW107XG4gICAgdmFyIGxhc3RMaW5lV2lkdGggPSAwO1xuICAgIHZhciBtYXhMaW5lV2lkdGggPSAwO1xuICAgIHZhciBsaW5lV2lkdGhzID0gW107XG4gICAgdmFyIGxpbmUgPSAwO1xuICAgIHZhciBzY2FsZSA9IHRoaXMuX2ZvbnQuc2l6ZSAvIGRhdGEuc2l6ZTtcbiAgICB2YXIgbGFzdFNwYWNlID0gLTE7XG4gICAgdmFyIG1heExpbmVIZWlnaHQgPSAwO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLnRleHQubGVuZ3RoOyBpKyspXG4gICAge1xuICAgICAgICB2YXIgY2hhckNvZGUgPSB0aGlzLnRleHQuY2hhckNvZGVBdChpKTtcbiAgICAgICAgbGFzdFNwYWNlID0gLyhcXHMpLy50ZXN0KHRoaXMudGV4dC5jaGFyQXQoaSkpID8gaSA6IGxhc3RTcGFjZTtcblxuICAgICAgICBpZiAoLyg/OlxcclxcbnxcXHJ8XFxuKS8udGVzdCh0aGlzLnRleHQuY2hhckF0KGkpKSlcbiAgICAgICAge1xuICAgICAgICAgICAgbGluZVdpZHRocy5wdXNoKGxhc3RMaW5lV2lkdGgpO1xuICAgICAgICAgICAgbWF4TGluZVdpZHRoID0gTWF0aC5tYXgobWF4TGluZVdpZHRoLCBsYXN0TGluZVdpZHRoKTtcbiAgICAgICAgICAgIGxpbmUrKztcblxuICAgICAgICAgICAgcG9zLnggPSAwO1xuICAgICAgICAgICAgcG9zLnkgKz0gZGF0YS5saW5lSGVpZ2h0O1xuICAgICAgICAgICAgcHJldkNoYXJDb2RlID0gbnVsbDtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGxhc3RTcGFjZSAhPT0gLTEgJiYgdGhpcy5tYXhXaWR0aCA+IDAgJiYgcG9zLnggKiBzY2FsZSA+IHRoaXMubWF4V2lkdGgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNvcmUudXRpbHMucmVtb3ZlSXRlbXMoY2hhcnMsIGxhc3RTcGFjZSwgaSAtIGxhc3RTcGFjZSk7XG4gICAgICAgICAgICBpID0gbGFzdFNwYWNlO1xuICAgICAgICAgICAgbGFzdFNwYWNlID0gLTE7XG5cbiAgICAgICAgICAgIGxpbmVXaWR0aHMucHVzaChsYXN0TGluZVdpZHRoKTtcbiAgICAgICAgICAgIG1heExpbmVXaWR0aCA9IE1hdGgubWF4KG1heExpbmVXaWR0aCwgbGFzdExpbmVXaWR0aCk7XG4gICAgICAgICAgICBsaW5lKys7XG5cbiAgICAgICAgICAgIHBvcy54ID0gMDtcbiAgICAgICAgICAgIHBvcy55ICs9IGRhdGEubGluZUhlaWdodDtcbiAgICAgICAgICAgIHByZXZDaGFyQ29kZSA9IG51bGw7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBjaGFyRGF0YSA9IGRhdGEuY2hhcnNbY2hhckNvZGVdO1xuXG4gICAgICAgIGlmICghY2hhckRhdGEpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHByZXZDaGFyQ29kZSAmJiBjaGFyRGF0YS5rZXJuaW5nW3ByZXZDaGFyQ29kZV0pXG4gICAgICAgIHtcbiAgICAgICAgICAgIHBvcy54ICs9IGNoYXJEYXRhLmtlcm5pbmdbcHJldkNoYXJDb2RlXTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNoYXJzLnB1c2goe3RleHR1cmU6Y2hhckRhdGEudGV4dHVyZSwgbGluZTogbGluZSwgY2hhckNvZGU6IGNoYXJDb2RlLCBwb3NpdGlvbjogbmV3IGNvcmUuUG9pbnQocG9zLnggKyBjaGFyRGF0YS54T2Zmc2V0LCBwb3MueSArIGNoYXJEYXRhLnlPZmZzZXQpfSk7XG4gICAgICAgIGxhc3RMaW5lV2lkdGggPSBwb3MueCArIChjaGFyRGF0YS50ZXh0dXJlLndpZHRoICsgY2hhckRhdGEueE9mZnNldCk7XG4gICAgICAgIHBvcy54ICs9IGNoYXJEYXRhLnhBZHZhbmNlO1xuICAgICAgICBtYXhMaW5lSGVpZ2h0ID0gTWF0aC5tYXgobWF4TGluZUhlaWdodCwgKGNoYXJEYXRhLnlPZmZzZXQgKyBjaGFyRGF0YS50ZXh0dXJlLmhlaWdodCkpO1xuICAgICAgICBwcmV2Q2hhckNvZGUgPSBjaGFyQ29kZTtcbiAgICB9XG5cbiAgICBsaW5lV2lkdGhzLnB1c2gobGFzdExpbmVXaWR0aCk7XG4gICAgbWF4TGluZVdpZHRoID0gTWF0aC5tYXgobWF4TGluZVdpZHRoLCBsYXN0TGluZVdpZHRoKTtcblxuICAgIHZhciBsaW5lQWxpZ25PZmZzZXRzID0gW107XG5cbiAgICBmb3IgKGkgPSAwOyBpIDw9IGxpbmU7IGkrKylcbiAgICB7XG4gICAgICAgIHZhciBhbGlnbk9mZnNldCA9IDA7XG5cbiAgICAgICAgaWYgKHRoaXMuX2ZvbnQuYWxpZ24gPT09ICdyaWdodCcpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGFsaWduT2Zmc2V0ID0gbWF4TGluZVdpZHRoIC0gbGluZVdpZHRoc1tpXTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh0aGlzLl9mb250LmFsaWduID09PSAnY2VudGVyJylcbiAgICAgICAge1xuICAgICAgICAgICAgYWxpZ25PZmZzZXQgPSAobWF4TGluZVdpZHRoIC0gbGluZVdpZHRoc1tpXSkgLyAyO1xuICAgICAgICB9XG5cbiAgICAgICAgbGluZUFsaWduT2Zmc2V0cy5wdXNoKGFsaWduT2Zmc2V0KTtcbiAgICB9XG5cbiAgICB2YXIgbGVuQ2hhcnMgPSBjaGFycy5sZW5ndGg7XG4gICAgdmFyIHRpbnQgPSB0aGlzLnRpbnQ7XG5cbiAgICBmb3IgKGkgPSAwOyBpIDwgbGVuQ2hhcnM7IGkrKylcbiAgICB7XG4gICAgICAgIHZhciBjID0gdGhpcy5fZ2x5cGhzW2ldOyAvLyBnZXQgdGhlIG5leHQgZ2x5cGggc3ByaXRlXG5cbiAgICAgICAgaWYgKGMpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGMudGV4dHVyZSA9IGNoYXJzW2ldLnRleHR1cmU7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgICBjID0gbmV3IGNvcmUuU3ByaXRlKGNoYXJzW2ldLnRleHR1cmUpO1xuICAgICAgICAgICAgdGhpcy5fZ2x5cGhzLnB1c2goYyk7XG4gICAgICAgIH1cblxuICAgICAgICBjLnBvc2l0aW9uLnggPSAoY2hhcnNbaV0ucG9zaXRpb24ueCArIGxpbmVBbGlnbk9mZnNldHNbY2hhcnNbaV0ubGluZV0pICogc2NhbGU7XG4gICAgICAgIGMucG9zaXRpb24ueSA9IGNoYXJzW2ldLnBvc2l0aW9uLnkgKiBzY2FsZTtcbiAgICAgICAgYy5zY2FsZS54ID0gYy5zY2FsZS55ID0gc2NhbGU7XG4gICAgICAgIGMudGludCA9IHRpbnQ7XG5cbiAgICAgICAgaWYgKCFjLnBhcmVudClcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5hZGRDaGlsZChjKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIHJlbW92ZSB1bm5lY2Vzc2FyeSBjaGlsZHJlbi5cbiAgICBmb3IgKGkgPSBsZW5DaGFyczsgaSA8IHRoaXMuX2dseXBocy5sZW5ndGg7ICsraSlcbiAgICB7XG4gICAgICAgIHRoaXMucmVtb3ZlQ2hpbGQodGhpcy5fZ2x5cGhzW2ldKTtcbiAgICB9XG5cbiAgICB0aGlzLnRleHRXaWR0aCA9IG1heExpbmVXaWR0aCAqIHNjYWxlO1xuICAgIHRoaXMudGV4dEhlaWdodCA9IChwb3MueSArIGRhdGEubGluZUhlaWdodCkgKiBzY2FsZTtcbiAgICB0aGlzLm1heExpbmVIZWlnaHQgPSBtYXhMaW5lSGVpZ2h0ICogc2NhbGU7XG59O1xuXG4vKipcbiAqIFVwZGF0ZXMgdGhlIHRyYW5zZm9ybSBvZiB0aGlzIG9iamVjdFxuICpcbiAqIEBwcml2YXRlXG4gKi9cbkJpdG1hcFRleHQucHJvdG90eXBlLnVwZGF0ZVRyYW5zZm9ybSA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy52YWxpZGF0ZSgpO1xuICAgIHRoaXMuY29udGFpbmVyVXBkYXRlVHJhbnNmb3JtKCk7XG59O1xuXG4vKipcbiAqIFZhbGlkYXRlcyB0ZXh0IGJlZm9yZSBjYWxsaW5nIHBhcmVudCdzIGdldExvY2FsQm91bmRzXG4gKlxuICogQHJldHVybiB7UElYSS5SZWN0YW5nbGV9IFRoZSByZWN0YW5ndWxhciBib3VuZGluZyBhcmVhXG4gKi9cblxuQml0bWFwVGV4dC5wcm90b3R5cGUuZ2V0TG9jYWxCb3VuZHMgPSBmdW5jdGlvbigpXG57XG4gICAgdGhpcy52YWxpZGF0ZSgpO1xuICAgIHJldHVybiBjb3JlLkNvbnRhaW5lci5wcm90b3R5cGUuZ2V0TG9jYWxCb3VuZHMuY2FsbCh0aGlzKTtcbn07XG5cbi8qKlxuICogVXBkYXRlcyB0ZXh0IHdoZW4gbmVlZGVkXG4gKlxuICogQHByaXZhdGVcbiAqL1xuQml0bWFwVGV4dC5wcm90b3R5cGUudmFsaWRhdGUgPSBmdW5jdGlvbigpXG57XG4gICAgaWYgKHRoaXMuZGlydHkpXG4gICAge1xuICAgICAgICB0aGlzLnVwZGF0ZVRleHQoKTtcbiAgICAgICAgdGhpcy5kaXJ0eSA9IGZhbHNlO1xuICAgIH1cbn07XG5cbkJpdG1hcFRleHQuZm9udHMgPSB7fTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vY29yZScpO1xuXG4vKipcbiAqIEEgTW92aWVDbGlwIGlzIGEgc2ltcGxlIHdheSB0byBkaXNwbGF5IGFuIGFuaW1hdGlvbiBkZXBpY3RlZCBieSBhIGxpc3Qgb2YgdGV4dHVyZXMuXG4gKlxuICogYGBganNcbiAqIHZhciBhbGllbkltYWdlcyA9IFtcImltYWdlX3NlcXVlbmNlXzAxLnBuZ1wiLFwiaW1hZ2Vfc2VxdWVuY2VfMDIucG5nXCIsXCJpbWFnZV9zZXF1ZW5jZV8wMy5wbmdcIixcImltYWdlX3NlcXVlbmNlXzA0LnBuZ1wiXTtcbiAqIHZhciB0ZXh0dXJlQXJyYXkgPSBbXTtcbiAqXG4gKiBmb3IgKHZhciBpPTA7IGkgPCA0OyBpKyspXG4gKiB7XG4gKiAgICAgIHZhciB0ZXh0dXJlID0gUElYSS5UZXh0dXJlLmZyb21JbWFnZShhbGllbkltYWdlc1tpXSk7XG4gKiAgICAgIHRleHR1cmVBcnJheS5wdXNoKHRleHR1cmUpO1xuICogfTtcbiAqXG4gKiB2YXIgbWMgPSBuZXcgUElYSS5Nb3ZpZUNsaXAodGV4dHVyZUFycmF5KTtcbiAqIGBgYFxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5TcHJpdGVcbiAqIEBtZW1iZXJvZiBQSVhJLmV4dHJhc1xuICogQHBhcmFtIHRleHR1cmVzIHtQSVhJLlRleHR1cmVbXXxPYmplY3RbXX0gYW4gYXJyYXkgb2Yge0BsaW5rIFBJWEkuVGV4dHVyZX0gb3IgZnJhbWUgb2JqZWN0cyB0aGF0IG1ha2UgdXAgdGhlIGFuaW1hdGlvblxuICogQHBhcmFtIHRleHR1cmVzW10udGV4dHVyZSB7UElYSS5UZXh0dXJlfSB0aGUge0BsaW5rIFBJWEkuVGV4dHVyZX0gb2YgdGhlIGZyYW1lXG4gKiBAcGFyYW0gdGV4dHVyZXNbXS50aW1lIHtudW1iZXJ9IHRoZSBkdXJhdGlvbiBvZiB0aGUgZnJhbWUgaW4gbXNcbiAqL1xuZnVuY3Rpb24gTW92aWVDbGlwKHRleHR1cmVzKVxue1xuICAgIGNvcmUuU3ByaXRlLmNhbGwodGhpcywgdGV4dHVyZXNbMF0gaW5zdGFuY2VvZiBjb3JlLlRleHR1cmUgPyB0ZXh0dXJlc1swXSA6IHRleHR1cmVzWzBdLnRleHR1cmUpO1xuXG4gICAgLyoqXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl90ZXh0dXJlcyA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX2R1cmF0aW9ucyA9IG51bGw7XG5cbiAgICB0aGlzLnRleHR1cmVzID0gdGV4dHVyZXM7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgc3BlZWQgdGhhdCB0aGUgTW92aWVDbGlwIHdpbGwgcGxheSBhdC4gSGlnaGVyIGlzIGZhc3RlciwgbG93ZXIgaXMgc2xvd2VyXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMVxuICAgICAqL1xuICAgIHRoaXMuYW5pbWF0aW9uU3BlZWQgPSAxO1xuXG4gICAgLyoqXG4gICAgICogV2hldGhlciBvciBub3QgdGhlIG1vdmllIGNsaXAgcmVwZWF0cyBhZnRlciBwbGF5aW5nLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKiBAZGVmYXVsdCB0cnVlXG4gICAgICovXG4gICAgdGhpcy5sb29wID0gdHJ1ZTtcblxuICAgIC8qKlxuICAgICAqIEZ1bmN0aW9uIHRvIGNhbGwgd2hlbiBhIE1vdmllQ2xpcCBmaW5pc2hlcyBwbGF5aW5nXG4gICAgICpcbiAgICAgKiBAbWV0aG9kXG4gICAgICogQG1lbWJlcm9mIFBJWEkuZXh0cmFzLk1vdmllQ2xpcCNcbiAgICAgKi9cbiAgICB0aGlzLm9uQ29tcGxldGUgPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogRWxhcHNlZCB0aW1lIHNpbmNlIGFuaW1hdGlvbiBoYXMgYmVlbiBzdGFydGVkLCB1c2VkIGludGVybmFsbHkgdG8gZGlzcGxheSBjdXJyZW50IHRleHR1cmVcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX2N1cnJlbnRUaW1lID0gMDtcblxuICAgIC8qKlxuICAgICAqIEluZGljYXRlcyBpZiB0aGUgTW92aWVDbGlwIGlzIGN1cnJlbnRseSBwbGF5aW5nXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqIEByZWFkb25seVxuICAgICAqL1xuICAgIHRoaXMucGxheWluZyA9IGZhbHNlO1xufVxuXG4vLyBjb25zdHJ1Y3RvclxuTW92aWVDbGlwLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoY29yZS5TcHJpdGUucHJvdG90eXBlKTtcbk1vdmllQ2xpcC5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBNb3ZpZUNsaXA7XG5tb2R1bGUuZXhwb3J0cyA9IE1vdmllQ2xpcDtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoTW92aWVDbGlwLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIHRvdGFsRnJhbWVzIGlzIHRoZSB0b3RhbCBudW1iZXIgb2YgZnJhbWVzIGluIHRoZSBNb3ZpZUNsaXAuIFRoaXMgaXMgdGhlIHNhbWUgYXMgbnVtYmVyIG9mIHRleHR1cmVzXG4gICAgICogYXNzaWduZWQgdG8gdGhlIE1vdmllQ2xpcC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5leHRyYXMuTW92aWVDbGlwI1xuICAgICAqIEBkZWZhdWx0IDBcbiAgICAgKiBAcmVhZG9ubHlcbiAgICAgKi9cbiAgICB0b3RhbEZyYW1lczoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3RleHR1cmVzLmxlbmd0aDtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBUaGUgYXJyYXkgb2YgdGV4dHVyZXMgdXNlZCBmb3IgdGhpcyBNb3ZpZUNsaXBcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuVGV4dHVyZVtdfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmV4dHJhcy5Nb3ZpZUNsaXAjXG4gICAgICpcbiAgICAgKi9cbiAgICB0ZXh0dXJlczoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl90ZXh0dXJlcztcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGlmKHZhbHVlWzBdIGluc3RhbmNlb2YgY29yZS5UZXh0dXJlKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHRoaXMuX3RleHR1cmVzID0gdmFsdWU7XG4gICAgICAgICAgICAgICAgdGhpcy5fZHVyYXRpb25zID0gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB0aGlzLl90ZXh0dXJlcyA9IFtdO1xuICAgICAgICAgICAgICAgIHRoaXMuX2R1cmF0aW9ucyA9IFtdO1xuICAgICAgICAgICAgICAgIGZvcih2YXIgaSA9IDA7IGkgPCB2YWx1ZS5sZW5ndGg7IGkrKylcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3RleHR1cmVzLnB1c2godmFsdWVbaV0udGV4dHVyZSk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2R1cmF0aW9ucy5wdXNoKHZhbHVlW2ldLnRpbWUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAqIFRoZSBNb3ZpZUNsaXBzIGN1cnJlbnQgZnJhbWUgaW5kZXhcbiAgICAqXG4gICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgKiBAbWVtYmVyb2YgUElYSS5leHRyYXMuTW92aWVDbGlwI1xuICAgICogQHJlYWRvbmx5XG4gICAgKi9cbiAgICBjdXJyZW50RnJhbWU6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICB2YXIgY3VycmVudEZyYW1lID0gTWF0aC5mbG9vcih0aGlzLl9jdXJyZW50VGltZSkgJSB0aGlzLl90ZXh0dXJlcy5sZW5ndGg7XG4gICAgICAgICAgICBpZiAoY3VycmVudEZyYW1lIDwgMClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjdXJyZW50RnJhbWUgKz0gdGhpcy5fdGV4dHVyZXMubGVuZ3RoO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGN1cnJlbnRGcmFtZTtcbiAgICAgICAgfVxuICAgIH1cblxufSk7XG5cbi8qKlxuICogU3RvcHMgdGhlIE1vdmllQ2xpcFxuICpcbiAqL1xuTW92aWVDbGlwLnByb3RvdHlwZS5zdG9wID0gZnVuY3Rpb24gKClcbntcbiAgICBpZighdGhpcy5wbGF5aW5nKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMucGxheWluZyA9IGZhbHNlO1xuICAgIGNvcmUudGlja2VyLnNoYXJlZC5yZW1vdmUodGhpcy51cGRhdGUsIHRoaXMpO1xufTtcblxuLyoqXG4gKiBQbGF5cyB0aGUgTW92aWVDbGlwXG4gKlxuICovXG5Nb3ZpZUNsaXAucHJvdG90eXBlLnBsYXkgPSBmdW5jdGlvbiAoKVxue1xuICAgIGlmKHRoaXMucGxheWluZylcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLnBsYXlpbmcgPSB0cnVlO1xuICAgIGNvcmUudGlja2VyLnNoYXJlZC5hZGQodGhpcy51cGRhdGUsIHRoaXMpO1xufTtcblxuLyoqXG4gKiBTdG9wcyB0aGUgTW92aWVDbGlwIGFuZCBnb2VzIHRvIGEgc3BlY2lmaWMgZnJhbWVcbiAqXG4gKiBAcGFyYW0gZnJhbWVOdW1iZXIge251bWJlcn0gZnJhbWUgaW5kZXggdG8gc3RvcCBhdFxuICovXG5Nb3ZpZUNsaXAucHJvdG90eXBlLmdvdG9BbmRTdG9wID0gZnVuY3Rpb24gKGZyYW1lTnVtYmVyKVxue1xuICAgIHRoaXMuc3RvcCgpO1xuXG4gICAgdGhpcy5fY3VycmVudFRpbWUgPSBmcmFtZU51bWJlcjtcblxuICAgIHRoaXMuX3RleHR1cmUgPSB0aGlzLl90ZXh0dXJlc1t0aGlzLmN1cnJlbnRGcmFtZV07XG59O1xuXG4vKipcbiAqIEdvZXMgdG8gYSBzcGVjaWZpYyBmcmFtZSBhbmQgYmVnaW5zIHBsYXlpbmcgdGhlIE1vdmllQ2xpcFxuICpcbiAqIEBwYXJhbSBmcmFtZU51bWJlciB7bnVtYmVyfSBmcmFtZSBpbmRleCB0byBzdGFydCBhdFxuICovXG5Nb3ZpZUNsaXAucHJvdG90eXBlLmdvdG9BbmRQbGF5ID0gZnVuY3Rpb24gKGZyYW1lTnVtYmVyKVxue1xuICAgIHRoaXMuX2N1cnJlbnRUaW1lID0gZnJhbWVOdW1iZXI7XG5cbiAgICB0aGlzLnBsYXkoKTtcbn07XG5cbi8qXG4gKiBVcGRhdGVzIHRoZSBvYmplY3QgdHJhbnNmb3JtIGZvciByZW5kZXJpbmdcbiAqIEBwcml2YXRlXG4gKi9cbk1vdmllQ2xpcC5wcm90b3R5cGUudXBkYXRlID0gZnVuY3Rpb24gKGRlbHRhVGltZSlcbntcbiAgICB2YXIgZWxhcHNlZCA9IHRoaXMuYW5pbWF0aW9uU3BlZWQgKiBkZWx0YVRpbWU7XG5cbiAgICBpZiAodGhpcy5fZHVyYXRpb25zICE9PSBudWxsKVxuICAgIHtcbiAgICAgICAgdmFyIGxhZyA9IHRoaXMuX2N1cnJlbnRUaW1lICUgMSAqIHRoaXMuX2R1cmF0aW9uc1t0aGlzLmN1cnJlbnRGcmFtZV07XG5cbiAgICAgICAgbGFnICs9IGVsYXBzZWQgLyA2MCAqIDEwMDA7XG5cbiAgICAgICAgd2hpbGUgKGxhZyA8IDApXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuX2N1cnJlbnRUaW1lLS07XG4gICAgICAgICAgICBsYWcgKz0gdGhpcy5fZHVyYXRpb25zW3RoaXMuY3VycmVudEZyYW1lXTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBzaWduID0gTWF0aC5zaWduKHRoaXMuYW5pbWF0aW9uU3BlZWQgKiBkZWx0YVRpbWUpO1xuICAgICAgICB0aGlzLl9jdXJyZW50VGltZSA9IE1hdGguZmxvb3IodGhpcy5fY3VycmVudFRpbWUpO1xuXG4gICAgICAgIHdoaWxlIChsYWcgPj0gdGhpcy5fZHVyYXRpb25zW3RoaXMuY3VycmVudEZyYW1lXSlcbiAgICAgICAge1xuICAgICAgICAgICAgbGFnIC09IHRoaXMuX2R1cmF0aW9uc1t0aGlzLmN1cnJlbnRGcmFtZV0gKiBzaWduO1xuICAgICAgICAgICAgdGhpcy5fY3VycmVudFRpbWUgKz0gc2lnbjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX2N1cnJlbnRUaW1lICs9IGxhZyAvIHRoaXMuX2R1cmF0aW9uc1t0aGlzLmN1cnJlbnRGcmFtZV07XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHRoaXMuX2N1cnJlbnRUaW1lICs9IGVsYXBzZWQ7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX2N1cnJlbnRUaW1lIDwgMCAmJiAhdGhpcy5sb29wKVxuICAgIHtcbiAgICAgICAgdGhpcy5nb3RvQW5kU3RvcCgwKTtcblxuICAgICAgICBpZiAodGhpcy5vbkNvbXBsZXRlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLm9uQ29tcGxldGUoKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBlbHNlIGlmICh0aGlzLl9jdXJyZW50VGltZSA+PSB0aGlzLl90ZXh0dXJlcy5sZW5ndGggJiYgIXRoaXMubG9vcClcbiAgICB7XG4gICAgICAgIHRoaXMuZ290b0FuZFN0b3AodGhpcy5fdGV4dHVyZXMubGVuZ3RoIC0gMSk7XG5cbiAgICAgICAgaWYgKHRoaXMub25Db21wbGV0ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5vbkNvbXBsZXRlKCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgdGhpcy5fdGV4dHVyZSA9IHRoaXMuX3RleHR1cmVzW3RoaXMuY3VycmVudEZyYW1lXTtcbiAgICB9XG5cbn07XG5cbi8qXG4gKiBTdG9wcyB0aGUgTW92aWVDbGlwIGFuZCBkZXN0cm95cyBpdFxuICpcbiAqL1xuTW92aWVDbGlwLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKCApXG57XG4gICAgdGhpcy5zdG9wKCk7XG4gICAgY29yZS5TcHJpdGUucHJvdG90eXBlLmRlc3Ryb3kuY2FsbCh0aGlzKTtcbn07XG5cbi8qKlxuICogQSBzaG9ydCBoYW5kIHdheSBvZiBjcmVhdGluZyBhIG1vdmllY2xpcCBmcm9tIGFuIGFycmF5IG9mIGZyYW1lIGlkc1xuICpcbiAqIEBzdGF0aWNcbiAqIEBwYXJhbSBmcmFtZXMge3N0cmluZ1tdfSB0aGUgYXJyYXkgb2YgZnJhbWVzIGlkcyB0aGUgbW92aWVjbGlwIHdpbGwgdXNlIGFzIGl0cyB0ZXh0dXJlIGZyYW1lc1xuICovXG5Nb3ZpZUNsaXAuZnJvbUZyYW1lcyA9IGZ1bmN0aW9uIChmcmFtZXMpXG57XG4gICAgdmFyIHRleHR1cmVzID0gW107XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGZyYW1lcy5sZW5ndGg7ICsraSlcbiAgICB7XG4gICAgICAgIHRleHR1cmVzLnB1c2gobmV3IGNvcmUuVGV4dHVyZS5mcm9tRnJhbWUoZnJhbWVzW2ldKSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBNb3ZpZUNsaXAodGV4dHVyZXMpO1xufTtcblxuLyoqXG4gKiBBIHNob3J0IGhhbmQgd2F5IG9mIGNyZWF0aW5nIGEgbW92aWVjbGlwIGZyb20gYW4gYXJyYXkgb2YgaW1hZ2UgaWRzXG4gKlxuICogQHN0YXRpY1xuICogQHBhcmFtIGltYWdlcyB7c3RyaW5nW119IHRoZSBhcnJheSBvZiBpbWFnZSB1cmxzIHRoZSBtb3ZpZWNsaXAgd2lsbCB1c2UgYXMgaXRzIHRleHR1cmUgZnJhbWVzXG4gKi9cbk1vdmllQ2xpcC5mcm9tSW1hZ2VzID0gZnVuY3Rpb24gKGltYWdlcylcbntcbiAgICB2YXIgdGV4dHVyZXMgPSBbXTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgaW1hZ2VzLmxlbmd0aDsgKytpKVxuICAgIHtcbiAgICAgICAgdGV4dHVyZXMucHVzaChuZXcgY29yZS5UZXh0dXJlLmZyb21JbWFnZShpbWFnZXNbaV0pKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IE1vdmllQ2xpcCh0ZXh0dXJlcyk7XG59OyIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vY29yZScpLFxuICAgIC8vIGEgc3ByaXRlIHVzZSBkZm9yIHJlbmRlcmluZyB0ZXh0dXJlcy4uXG4gICAgdGVtcFBvaW50ID0gbmV3IGNvcmUuUG9pbnQoKSxcbiAgICBDYW52YXNUaW50ZXIgPSByZXF1aXJlKCcuLi9jb3JlL3JlbmRlcmVycy9jYW52YXMvdXRpbHMvQ2FudmFzVGludGVyJyk7XG5cbi8qKlxuICogQSB0aWxpbmcgc3ByaXRlIGlzIGEgZmFzdCB3YXkgb2YgcmVuZGVyaW5nIGEgdGlsaW5nIGltYWdlXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLlNwcml0ZVxuICogQG1lbWJlcm9mIFBJWEkuZXh0cmFzXG4gKiBAcGFyYW0gdGV4dHVyZSB7VGV4dHVyZX0gdGhlIHRleHR1cmUgb2YgdGhlIHRpbGluZyBzcHJpdGVcbiAqIEBwYXJhbSB3aWR0aCB7bnVtYmVyfSAgdGhlIHdpZHRoIG9mIHRoZSB0aWxpbmcgc3ByaXRlXG4gKiBAcGFyYW0gaGVpZ2h0IHtudW1iZXJ9IHRoZSBoZWlnaHQgb2YgdGhlIHRpbGluZyBzcHJpdGVcbiAqL1xuZnVuY3Rpb24gVGlsaW5nU3ByaXRlKHRleHR1cmUsIHdpZHRoLCBoZWlnaHQpXG57XG4gICAgY29yZS5TcHJpdGUuY2FsbCh0aGlzLCB0ZXh0dXJlKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBzY2FsaW5nIG9mIHRoZSBpbWFnZSB0aGF0IGlzIGJlaW5nIHRpbGVkXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlBvaW50fVxuICAgICAqL1xuICAgIHRoaXMudGlsZVNjYWxlID0gbmV3IGNvcmUuUG9pbnQoMSwxKTtcblxuXG4gICAgLyoqXG4gICAgICogVGhlIG9mZnNldCBwb3NpdGlvbiBvZiB0aGUgaW1hZ2UgdGhhdCBpcyBiZWluZyB0aWxlZFxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5Qb2ludH1cbiAgICAgKi9cbiAgICB0aGlzLnRpbGVQb3NpdGlvbiA9IG5ldyBjb3JlLlBvaW50KDAsMCk7XG5cbiAgICAvLy8vLyBwcml2YXRlXG5cbiAgICAvKipcbiAgICAgKiBUaGUgd2l0aCBvZiB0aGUgdGlsaW5nIHNwcml0ZVxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fd2lkdGggPSB3aWR0aCB8fCAxMDA7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgaGVpZ2h0IG9mIHRoZSB0aWxpbmcgc3ByaXRlXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9oZWlnaHQgPSBoZWlnaHQgfHwgMTAwO1xuXG4gICAgLyoqXG4gICAgICogQW4gaW50ZXJuYWwgV2ViR0wgVVYgY2FjaGUuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlRleHR1cmVVdnN9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl91dnMgPSBuZXcgY29yZS5UZXh0dXJlVXZzKCk7XG5cbiAgICB0aGlzLl9jYW52YXNQYXR0ZXJuID0gbnVsbDtcblxuICAgIC8vVE9ETyBtb3ZlLi5cbiAgICB0aGlzLnNoYWRlciA9IG5ldyBjb3JlLkFic3RyYWN0RmlsdGVyKFxuXG4gICAgICBbXG4gICAgICAgICdwcmVjaXNpb24gbG93cCBmbG9hdDsnLFxuICAgICAgICAnYXR0cmlidXRlIHZlYzIgYVZlcnRleFBvc2l0aW9uOycsXG4gICAgICAgICdhdHRyaWJ1dGUgdmVjMiBhVGV4dHVyZUNvb3JkOycsXG4gICAgICAgICdhdHRyaWJ1dGUgdmVjNCBhQ29sb3I7JyxcblxuICAgICAgICAndW5pZm9ybSBtYXQzIHByb2plY3Rpb25NYXRyaXg7JyxcblxuICAgICAgICAndW5pZm9ybSB2ZWM0IHVGcmFtZTsnLFxuICAgICAgICAndW5pZm9ybSB2ZWM0IHVUcmFuc2Zvcm07JyxcblxuICAgICAgICAndmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7JyxcbiAgICAgICAgJ3ZhcnlpbmcgdmVjNCB2Q29sb3I7JyxcblxuICAgICAgICAndm9pZCBtYWluKHZvaWQpeycsXG4gICAgICAgICcgICBnbF9Qb3NpdGlvbiA9IHZlYzQoKHByb2plY3Rpb25NYXRyaXggKiB2ZWMzKGFWZXJ0ZXhQb3NpdGlvbiwgMS4wKSkueHksIDAuMCwgMS4wKTsnLFxuXG4gICAgICAgICcgICB2ZWMyIGNvb3JkID0gYVRleHR1cmVDb29yZDsnLFxuICAgICAgICAnICAgY29vcmQgLT0gdVRyYW5zZm9ybS54eTsnLFxuICAgICAgICAnICAgY29vcmQgLz0gdVRyYW5zZm9ybS56dzsnLFxuICAgICAgICAnICAgdlRleHR1cmVDb29yZCA9IGNvb3JkOycsXG5cbiAgICAgICAgJyAgIHZDb2xvciA9IHZlYzQoYUNvbG9yLnJnYiAqIGFDb2xvci5hLCBhQ29sb3IuYSk7JyxcbiAgICAgICAgJ30nXG4gICAgICBdLmpvaW4oJ1xcbicpLFxuICAgICAgW1xuICAgICAgICAncHJlY2lzaW9uIGxvd3AgZmxvYXQ7JyxcblxuICAgICAgICAndmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7JyxcbiAgICAgICAgJ3ZhcnlpbmcgdmVjNCB2Q29sb3I7JyxcblxuICAgICAgICAndW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXI7JyxcbiAgICAgICAgJ3VuaWZvcm0gdmVjNCB1RnJhbWU7JyxcbiAgICAgICAgJ3VuaWZvcm0gdmVjMiB1UGl4ZWxTaXplOycsXG5cbiAgICAgICAgJ3ZvaWQgbWFpbih2b2lkKXsnLFxuXG4gICAgICAgICcgICB2ZWMyIGNvb3JkID0gbW9kKHZUZXh0dXJlQ29vcmQsIHVGcmFtZS56dyk7JyxcbiAgICAgICAgJyAgIGNvb3JkID0gY2xhbXAoY29vcmQsIHVQaXhlbFNpemUsIHVGcmFtZS56dyAtIHVQaXhlbFNpemUpOycsXG4gICAgICAgICcgICBjb29yZCArPSB1RnJhbWUueHk7JyxcblxuICAgICAgICAnICAgZ2xfRnJhZ0NvbG9yID0gIHRleHR1cmUyRCh1U2FtcGxlciwgY29vcmQpICogdkNvbG9yIDsnLFxuICAgICAgICAnfSdcbiAgICAgIF0uam9pbignXFxuJyksXG5cbiAgICAgICAgICAgIC8vIHNldCB0aGUgdW5pZm9ybXNcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB1RnJhbWU6IHsgdHlwZTogJzRmdicsIHZhbHVlOiBbMCwwLDEsMV0gfSxcbiAgICAgICAgICAgICAgICB1VHJhbnNmb3JtOiB7IHR5cGU6ICc0ZnYnLCB2YWx1ZTogWzAsMCwxLDFdIH0sXG4gICAgICAgICAgICAgICAgdVBpeGVsU2l6ZSA6IHsgdHlwZSA6ICcyZnYnLCB2YWx1ZTogWzEsIDFdfVxuICAgICAgICAgICAgfVxuICAgICAgKTtcbn1cblxuVGlsaW5nU3ByaXRlLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoY29yZS5TcHJpdGUucHJvdG90eXBlKTtcblRpbGluZ1Nwcml0ZS5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBUaWxpbmdTcHJpdGU7XG5tb2R1bGUuZXhwb3J0cyA9IFRpbGluZ1Nwcml0ZTtcblxuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhUaWxpbmdTcHJpdGUucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogVGhlIHdpZHRoIG9mIHRoZSBzcHJpdGUsIHNldHRpbmcgdGhpcyB3aWxsIGFjdHVhbGx5IG1vZGlmeSB0aGUgc2NhbGUgdG8gYWNoaWV2ZSB0aGUgdmFsdWUgc2V0XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZXh0cmFzLlRpbGluZ1Nwcml0ZSNcbiAgICAgKi9cbiAgICB3aWR0aDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl93aWR0aDtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuX3dpZHRoID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVGhlIGhlaWdodCBvZiB0aGUgVGlsaW5nU3ByaXRlLCBzZXR0aW5nIHRoaXMgd2lsbCBhY3R1YWxseSBtb2RpZnkgdGhlIHNjYWxlIHRvIGFjaGlldmUgdGhlIHZhbHVlIHNldFxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmV4dHJhcy5UaWxpbmdTcHJpdGUjXG4gICAgICovXG4gICAgaGVpZ2h0OiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2hlaWdodDtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuX2hlaWdodCA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfVxufSk7XG5cblRpbGluZ1Nwcml0ZS5wcm90b3R5cGUuX29uVGV4dHVyZVVwZGF0ZSA9IGZ1bmN0aW9uICgpXG57XG4gICAgcmV0dXJuO1xufTtcblxuXG4vKipcbiAqIFJlbmRlcnMgdGhlIG9iamVjdCB1c2luZyB0aGUgV2ViR0wgcmVuZGVyZXJcbiAqXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcn1cbiAqIEBwcml2YXRlXG4gKi9cblRpbGluZ1Nwcml0ZS5wcm90b3R5cGUuX3JlbmRlcldlYkdMID0gZnVuY3Rpb24gKHJlbmRlcmVyKVxue1xuICAgIC8vIHR3ZWFrIG91ciB0ZXh0dXJlIHRlbXBvcmFyaWx5Li5cbiAgICB2YXIgdGV4dHVyZSA9IHRoaXMuX3RleHR1cmU7XG5cbiAgICBpZighdGV4dHVyZSB8fCAhdGV4dHVyZS5fdXZzKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHZhciB0ZW1wVXZzID0gdGV4dHVyZS5fdXZzLFxuICAgICAgICB0ZW1wV2lkdGggPSB0ZXh0dXJlLl9mcmFtZS53aWR0aCxcbiAgICAgICAgdGVtcEhlaWdodCA9IHRleHR1cmUuX2ZyYW1lLmhlaWdodCxcbiAgICAgICAgdHcgPSB0ZXh0dXJlLmJhc2VUZXh0dXJlLndpZHRoLFxuICAgICAgICB0aCA9IHRleHR1cmUuYmFzZVRleHR1cmUuaGVpZ2h0O1xuXG4gICAgdGV4dHVyZS5fdXZzID0gdGhpcy5fdXZzO1xuICAgIHRleHR1cmUuX2ZyYW1lLndpZHRoID0gdGhpcy53aWR0aDtcbiAgICB0ZXh0dXJlLl9mcmFtZS5oZWlnaHQgPSB0aGlzLmhlaWdodDtcblxuICAgIHRoaXMuc2hhZGVyLnVuaWZvcm1zLnVQaXhlbFNpemUudmFsdWVbMF0gPSAxLjAvdHc7XG4gICAgdGhpcy5zaGFkZXIudW5pZm9ybXMudVBpeGVsU2l6ZS52YWx1ZVsxXSA9IDEuMC90aDtcblxuICAgIHRoaXMuc2hhZGVyLnVuaWZvcm1zLnVGcmFtZS52YWx1ZVswXSA9IHRlbXBVdnMueDA7XG4gICAgdGhpcy5zaGFkZXIudW5pZm9ybXMudUZyYW1lLnZhbHVlWzFdID0gdGVtcFV2cy55MDtcbiAgICB0aGlzLnNoYWRlci51bmlmb3Jtcy51RnJhbWUudmFsdWVbMl0gPSB0ZW1wVXZzLngxIC0gdGVtcFV2cy54MDtcbiAgICB0aGlzLnNoYWRlci51bmlmb3Jtcy51RnJhbWUudmFsdWVbM10gPSB0ZW1wVXZzLnkyIC0gdGVtcFV2cy55MDtcblxuICAgIHRoaXMuc2hhZGVyLnVuaWZvcm1zLnVUcmFuc2Zvcm0udmFsdWVbMF0gPSAodGhpcy50aWxlUG9zaXRpb24ueCAlICh0ZW1wV2lkdGggKiB0aGlzLnRpbGVTY2FsZS54KSkgLyB0aGlzLl93aWR0aDtcbiAgICB0aGlzLnNoYWRlci51bmlmb3Jtcy51VHJhbnNmb3JtLnZhbHVlWzFdID0gKHRoaXMudGlsZVBvc2l0aW9uLnkgJSAodGVtcEhlaWdodCAqIHRoaXMudGlsZVNjYWxlLnkpKSAvIHRoaXMuX2hlaWdodDtcbiAgICB0aGlzLnNoYWRlci51bmlmb3Jtcy51VHJhbnNmb3JtLnZhbHVlWzJdID0gKCB0dyAvIHRoaXMuX3dpZHRoICkgKiB0aGlzLnRpbGVTY2FsZS54O1xuICAgIHRoaXMuc2hhZGVyLnVuaWZvcm1zLnVUcmFuc2Zvcm0udmFsdWVbM10gPSAoIHRoIC8gdGhpcy5faGVpZ2h0ICkgKiB0aGlzLnRpbGVTY2FsZS55O1xuXG4gICAgcmVuZGVyZXIuc2V0T2JqZWN0UmVuZGVyZXIocmVuZGVyZXIucGx1Z2lucy5zcHJpdGUpO1xuICAgIHJlbmRlcmVyLnBsdWdpbnMuc3ByaXRlLnJlbmRlcih0aGlzKTtcblxuICAgIHRleHR1cmUuX3V2cyA9IHRlbXBVdnM7XG4gICAgdGV4dHVyZS5fZnJhbWUud2lkdGggPSB0ZW1wV2lkdGg7XG4gICAgdGV4dHVyZS5fZnJhbWUuaGVpZ2h0ID0gdGVtcEhlaWdodDtcbn07XG5cbi8qKlxuICogUmVuZGVycyB0aGUgb2JqZWN0IHVzaW5nIHRoZSBDYW52YXMgcmVuZGVyZXJcbiAqXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuQ2FudmFzUmVuZGVyZXJ9IGEgcmVmZXJlbmNlIHRvIHRoZSBjYW52YXMgcmVuZGVyZXJcbiAqIEBwcml2YXRlXG4gKi9cblRpbGluZ1Nwcml0ZS5wcm90b3R5cGUuX3JlbmRlckNhbnZhcyA9IGZ1bmN0aW9uIChyZW5kZXJlcilcbntcbiAgICB2YXIgdGV4dHVyZSA9IHRoaXMuX3RleHR1cmU7XG5cbiAgICBpZiAoIXRleHR1cmUuYmFzZVRleHR1cmUuaGFzTG9hZGVkKVxuICAgIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB2YXIgY29udGV4dCA9IHJlbmRlcmVyLmNvbnRleHQsXG4gICAgICAgIHRyYW5zZm9ybSA9IHRoaXMud29ybGRUcmFuc2Zvcm0sXG4gICAgICAgIHJlc29sdXRpb24gPSByZW5kZXJlci5yZXNvbHV0aW9uLFxuICAgICAgICBiYXNlVGV4dHVyZSA9IHRleHR1cmUuYmFzZVRleHR1cmUsXG4gICAgICAgIG1vZFggPSAodGhpcy50aWxlUG9zaXRpb24ueCAvIHRoaXMudGlsZVNjYWxlLngpICUgdGV4dHVyZS5fZnJhbWUud2lkdGgsXG4gICAgICAgIG1vZFkgPSAodGhpcy50aWxlUG9zaXRpb24ueSAvIHRoaXMudGlsZVNjYWxlLnkpICUgdGV4dHVyZS5fZnJhbWUuaGVpZ2h0O1xuXG4gICAgLy8gY3JlYXRlIGEgbmljZSBzaGlueSBwYXR0ZXJuIVxuICAgIC8vIFRPRE8gdGhpcyBuZWVkcyB0byBiZSByZWZyZXNoZWQgaWYgdGV4dHVyZSBjaGFuZ2VzLi5cbiAgICBpZighdGhpcy5fY2FudmFzUGF0dGVybilcbiAgICB7XG4gICAgICAgIC8vIGN1dCBhbiBvYmplY3QgZnJvbSBhIHNwcml0ZXNoZWV0Li5cbiAgICAgICAgdmFyIHRlbXBDYW52YXMgPSBuZXcgY29yZS5DYW52YXNCdWZmZXIodGV4dHVyZS5fZnJhbWUud2lkdGgsIHRleHR1cmUuX2ZyYW1lLmhlaWdodCk7XG5cbiAgICAgICAgLy8gVGludCB0aGUgdGlsaW5nIHNwcml0ZVxuICAgICAgICBpZiAodGhpcy50aW50ICE9PSAweEZGRkZGRilcbiAgICAgICAge1xuICAgICAgICAgICAgaWYgKHRoaXMuY2FjaGVkVGludCAhPT0gdGhpcy50aW50KVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHRoaXMuY2FjaGVkVGludCA9IHRoaXMudGludDtcblxuICAgICAgICAgICAgICAgIHRoaXMudGludGVkVGV4dHVyZSA9IENhbnZhc1RpbnRlci5nZXRUaW50ZWRUZXh0dXJlKHRoaXMsIHRoaXMudGludCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0ZW1wQ2FudmFzLmNvbnRleHQuZHJhd0ltYWdlKHRoaXMudGludGVkVGV4dHVyZSwgMCwgMCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgICB0ZW1wQ2FudmFzLmNvbnRleHQuZHJhd0ltYWdlKGJhc2VUZXh0dXJlLnNvdXJjZSwgLXRleHR1cmUuX2ZyYW1lLngsIC10ZXh0dXJlLl9mcmFtZS55KTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9jYW52YXNQYXR0ZXJuID0gdGVtcENhbnZhcy5jb250ZXh0LmNyZWF0ZVBhdHRlcm4oIHRlbXBDYW52YXMuY2FudmFzLCAncmVwZWF0JyApO1xuICAgIH1cblxuICAgIC8vIHNldCBjb250ZXh0IHN0YXRlLi5cbiAgICBjb250ZXh0Lmdsb2JhbEFscGhhID0gdGhpcy53b3JsZEFscGhhO1xuICAgIGNvbnRleHQuc2V0VHJhbnNmb3JtKHRyYW5zZm9ybS5hICogcmVzb2x1dGlvbixcbiAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtLmIgKiByZXNvbHV0aW9uLFxuICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2Zvcm0uYyAqIHJlc29sdXRpb24sXG4gICAgICAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybS5kICogcmVzb2x1dGlvbixcbiAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtLnR4ICogcmVzb2x1dGlvbixcbiAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtLnR5ICogcmVzb2x1dGlvbik7XG5cbiAgICAvLyBUT0RPIC0gdGhpcyBzaG91bGQgYmUgcm9sbGVkIGludG8gdGhlIHNldFRyYW5zZm9ybSBhYm92ZS4uXG4gICAgY29udGV4dC5zY2FsZSh0aGlzLnRpbGVTY2FsZS54LHRoaXMudGlsZVNjYWxlLnkpO1xuXG4gICAgY29udGV4dC50cmFuc2xhdGUobW9kWCArICh0aGlzLmFuY2hvci54ICogLXRoaXMuX3dpZHRoICksXG4gICAgICAgICAgICAgICAgICAgICAgbW9kWSArICh0aGlzLmFuY2hvci55ICogLXRoaXMuX2hlaWdodCkpO1xuXG4gICAgLy8gY2hlY2sgYmxlbmQgbW9kZVxuICAgIHZhciBjb21wb3NpdGVPcGVyYXRpb24gPSByZW5kZXJlci5ibGVuZE1vZGVzW3RoaXMuYmxlbmRNb2RlXTtcbiAgICBpZiAoY29tcG9zaXRlT3BlcmF0aW9uICE9PSByZW5kZXJlci5jb250ZXh0Lmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbilcbiAgICB7XG4gICAgICAgIGNvbnRleHQuZ2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uID0gY29tcG9zaXRlT3BlcmF0aW9uO1xuICAgIH1cblxuICAgIC8vIGZpbGwgdGhlIHBhdHRlcm4hXG4gICAgY29udGV4dC5maWxsU3R5bGUgPSB0aGlzLl9jYW52YXNQYXR0ZXJuO1xuICAgIGNvbnRleHQuZmlsbFJlY3QoLW1vZFgsXG4gICAgICAgICAgICAgICAgICAgICAtbW9kWSxcbiAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3dpZHRoIC8gdGhpcy50aWxlU2NhbGUueCxcbiAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2hlaWdodCAvIHRoaXMudGlsZVNjYWxlLnkpO1xuXG5cbiAgICAvL1RPRE8gLSBwcmV0dHkgc3VyZSB0aGlzIGNhbiBiZSBkZWxldGVkLi4uXG4gICAgLy9jb250ZXh0LnRyYW5zbGF0ZSgtdGhpcy50aWxlUG9zaXRpb24ueCArICh0aGlzLmFuY2hvci54ICogdGhpcy5fd2lkdGgpLCAtdGhpcy50aWxlUG9zaXRpb24ueSArICh0aGlzLmFuY2hvci55ICogdGhpcy5faGVpZ2h0KSk7XG4gICAgLy9jb250ZXh0LnNjYWxlKDEgLyB0aGlzLnRpbGVTY2FsZS54LCAxIC8gdGhpcy50aWxlU2NhbGUueSk7XG59O1xuXG5cbi8qKlxuICogUmV0dXJucyB0aGUgZnJhbWluZyByZWN0YW5nbGUgb2YgdGhlIHNwcml0ZSBhcyBhIFJlY3RhbmdsZSBvYmplY3RcbipcbiAqIEByZXR1cm4ge1BJWEkuUmVjdGFuZ2xlfSB0aGUgZnJhbWluZyByZWN0YW5nbGVcbiAqL1xuVGlsaW5nU3ByaXRlLnByb3RvdHlwZS5nZXRCb3VuZHMgPSBmdW5jdGlvbiAoKVxue1xuICAgIHZhciB3aWR0aCA9IHRoaXMuX3dpZHRoO1xuICAgIHZhciBoZWlnaHQgPSB0aGlzLl9oZWlnaHQ7XG5cbiAgICB2YXIgdzAgPSB3aWR0aCAqICgxLXRoaXMuYW5jaG9yLngpO1xuICAgIHZhciB3MSA9IHdpZHRoICogLXRoaXMuYW5jaG9yLng7XG5cbiAgICB2YXIgaDAgPSBoZWlnaHQgKiAoMS10aGlzLmFuY2hvci55KTtcbiAgICB2YXIgaDEgPSBoZWlnaHQgKiAtdGhpcy5hbmNob3IueTtcblxuICAgIHZhciB3b3JsZFRyYW5zZm9ybSA9IHRoaXMud29ybGRUcmFuc2Zvcm07XG5cbiAgICB2YXIgYSA9IHdvcmxkVHJhbnNmb3JtLmE7XG4gICAgdmFyIGIgPSB3b3JsZFRyYW5zZm9ybS5iO1xuICAgIHZhciBjID0gd29ybGRUcmFuc2Zvcm0uYztcbiAgICB2YXIgZCA9IHdvcmxkVHJhbnNmb3JtLmQ7XG4gICAgdmFyIHR4ID0gd29ybGRUcmFuc2Zvcm0udHg7XG4gICAgdmFyIHR5ID0gd29ybGRUcmFuc2Zvcm0udHk7XG5cbiAgICB2YXIgeDEgPSBhICogdzEgKyBjICogaDEgKyB0eDtcbiAgICB2YXIgeTEgPSBkICogaDEgKyBiICogdzEgKyB0eTtcblxuICAgIHZhciB4MiA9IGEgKiB3MCArIGMgKiBoMSArIHR4O1xuICAgIHZhciB5MiA9IGQgKiBoMSArIGIgKiB3MCArIHR5O1xuXG4gICAgdmFyIHgzID0gYSAqIHcwICsgYyAqIGgwICsgdHg7XG4gICAgdmFyIHkzID0gZCAqIGgwICsgYiAqIHcwICsgdHk7XG5cbiAgICB2YXIgeDQgPSAgYSAqIHcxICsgYyAqIGgwICsgdHg7XG4gICAgdmFyIHk0ID0gIGQgKiBoMCArIGIgKiB3MSArIHR5O1xuXG4gICAgdmFyIG1pblgsXG4gICAgICAgIG1heFgsXG4gICAgICAgIG1pblksXG4gICAgICAgIG1heFk7XG5cbiAgICBtaW5YID0geDE7XG4gICAgbWluWCA9IHgyIDwgbWluWCA/IHgyIDogbWluWDtcbiAgICBtaW5YID0geDMgPCBtaW5YID8geDMgOiBtaW5YO1xuICAgIG1pblggPSB4NCA8IG1pblggPyB4NCA6IG1pblg7XG5cbiAgICBtaW5ZID0geTE7XG4gICAgbWluWSA9IHkyIDwgbWluWSA/IHkyIDogbWluWTtcbiAgICBtaW5ZID0geTMgPCBtaW5ZID8geTMgOiBtaW5ZO1xuICAgIG1pblkgPSB5NCA8IG1pblkgPyB5NCA6IG1pblk7XG5cbiAgICBtYXhYID0geDE7XG4gICAgbWF4WCA9IHgyID4gbWF4WCA/IHgyIDogbWF4WDtcbiAgICBtYXhYID0geDMgPiBtYXhYID8geDMgOiBtYXhYO1xuICAgIG1heFggPSB4NCA+IG1heFggPyB4NCA6IG1heFg7XG5cbiAgICBtYXhZID0geTE7XG4gICAgbWF4WSA9IHkyID4gbWF4WSA/IHkyIDogbWF4WTtcbiAgICBtYXhZID0geTMgPiBtYXhZID8geTMgOiBtYXhZO1xuICAgIG1heFkgPSB5NCA+IG1heFkgPyB5NCA6IG1heFk7XG5cbiAgICB2YXIgYm91bmRzID0gdGhpcy5fYm91bmRzO1xuXG4gICAgYm91bmRzLnggPSBtaW5YO1xuICAgIGJvdW5kcy53aWR0aCA9IG1heFggLSBtaW5YO1xuXG4gICAgYm91bmRzLnkgPSBtaW5ZO1xuICAgIGJvdW5kcy5oZWlnaHQgPSBtYXhZIC0gbWluWTtcblxuICAgIC8vIHN0b3JlIGEgcmVmZXJlbmNlIHNvIHRoYXQgaWYgdGhpcyBmdW5jdGlvbiBnZXRzIGNhbGxlZCBhZ2FpbiBpbiB0aGUgcmVuZGVyIGN5Y2xlIHdlIGRvIG5vdCBoYXZlIHRvIHJlY2FsY3VsYXRlXG4gICAgdGhpcy5fY3VycmVudEJvdW5kcyA9IGJvdW5kcztcblxuICAgIHJldHVybiBib3VuZHM7XG59O1xuXG4vKipcbiAqIENoZWNrcyBpZiBhIHBvaW50IGlzIGluc2lkZSB0aGlzIHRpbGluZyBzcHJpdGVcbiAqIEBwYXJhbSBwb2ludCB7UElYSS5Qb2ludH0gdGhlIHBvaW50IHRvIGNoZWNrXG4gKi9cblRpbGluZ1Nwcml0ZS5wcm90b3R5cGUuY29udGFpbnNQb2ludCA9IGZ1bmN0aW9uKCBwb2ludCApXG57XG4gICAgdGhpcy53b3JsZFRyYW5zZm9ybS5hcHBseUludmVyc2UocG9pbnQsICB0ZW1wUG9pbnQpO1xuXG4gICAgdmFyIHdpZHRoID0gdGhpcy5fd2lkdGg7XG4gICAgdmFyIGhlaWdodCA9IHRoaXMuX2hlaWdodDtcbiAgICB2YXIgeDEgPSAtd2lkdGggKiB0aGlzLmFuY2hvci54O1xuICAgIHZhciB5MTtcblxuICAgIGlmICggdGVtcFBvaW50LnggPiB4MSAmJiB0ZW1wUG9pbnQueCA8IHgxICsgd2lkdGggKVxuICAgIHtcbiAgICAgICAgeTEgPSAtaGVpZ2h0ICogdGhpcy5hbmNob3IueTtcblxuICAgICAgICBpZiAoIHRlbXBQb2ludC55ID4geTEgJiYgdGVtcFBvaW50LnkgPCB5MSArIGhlaWdodCApXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xufTtcblxuLyoqXG4gKiBEZXN0cm95cyB0aGlzIHRpbGluZyBzcHJpdGVcbiAqXG4gKi9cblRpbGluZ1Nwcml0ZS5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uICgpIHtcbiAgICBjb3JlLlNwcml0ZS5wcm90b3R5cGUuZGVzdHJveS5jYWxsKHRoaXMpO1xuXG4gICAgdGhpcy50aWxlU2NhbGUgPSBudWxsO1xuICAgIHRoaXMuX3RpbGVTY2FsZU9mZnNldCA9IG51bGw7XG4gICAgdGhpcy50aWxlUG9zaXRpb24gPSBudWxsO1xuXG4gICAgdGhpcy5fdXZzID0gbnVsbDtcbn07XG5cbi8qKlxuICogSGVscGVyIGZ1bmN0aW9uIHRoYXQgY3JlYXRlcyBhIHRpbGluZyBzcHJpdGUgdGhhdCB3aWxsIHVzZSBhIHRleHR1cmUgZnJvbSB0aGUgVGV4dHVyZUNhY2hlIGJhc2VkIG9uIHRoZSBmcmFtZUlkXG4gKiBUaGUgZnJhbWUgaWRzIGFyZSBjcmVhdGVkIHdoZW4gYSBUZXh0dXJlIHBhY2tlciBmaWxlIGhhcyBiZWVuIGxvYWRlZFxuICpcbiAqIEBzdGF0aWNcbiAqIEBwYXJhbSBmcmFtZUlkIHtzdHJpbmd9IFRoZSBmcmFtZSBJZCBvZiB0aGUgdGV4dHVyZSBpbiB0aGUgY2FjaGVcbiAqIEByZXR1cm4ge1BJWEkuZXh0cmFzLlRpbGluZ1Nwcml0ZX0gQSBuZXcgVGlsaW5nU3ByaXRlIHVzaW5nIGEgdGV4dHVyZSBmcm9tIHRoZSB0ZXh0dXJlIGNhY2hlIG1hdGNoaW5nIHRoZSBmcmFtZUlkXG4gKiBAcGFyYW0gd2lkdGgge251bWJlcn0gIHRoZSB3aWR0aCBvZiB0aGUgdGlsaW5nIHNwcml0ZVxuICogQHBhcmFtIGhlaWdodCB7bnVtYmVyfSB0aGUgaGVpZ2h0IG9mIHRoZSB0aWxpbmcgc3ByaXRlXG4gKi9cblRpbGluZ1Nwcml0ZS5mcm9tRnJhbWUgPSBmdW5jdGlvbiAoZnJhbWVJZCx3aWR0aCxoZWlnaHQpXG57XG4gICAgdmFyIHRleHR1cmUgPSBjb3JlLnV0aWxzLlRleHR1cmVDYWNoZVtmcmFtZUlkXTtcblxuICAgIGlmICghdGV4dHVyZSlcbiAgICB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignVGhlIGZyYW1lSWQgXCInICsgZnJhbWVJZCArICdcIiBkb2VzIG5vdCBleGlzdCBpbiB0aGUgdGV4dHVyZSBjYWNoZSAnICsgdGhpcyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBUaWxpbmdTcHJpdGUodGV4dHVyZSx3aWR0aCxoZWlnaHQpO1xufTtcblxuLyoqXG4gKiBIZWxwZXIgZnVuY3Rpb24gdGhhdCBjcmVhdGVzIGEgc3ByaXRlIHRoYXQgd2lsbCBjb250YWluIGEgdGV4dHVyZSBiYXNlZCBvbiBhbiBpbWFnZSB1cmxcbiAqIElmIHRoZSBpbWFnZSBpcyBub3QgaW4gdGhlIHRleHR1cmUgY2FjaGUgaXQgd2lsbCBiZSBsb2FkZWRcbiAqXG4gKiBAc3RhdGljXG4gKiBAcGFyYW0gaW1hZ2VJZCB7c3RyaW5nfSBUaGUgaW1hZ2UgdXJsIG9mIHRoZSB0ZXh0dXJlXG4gKiBAcGFyYW0gd2lkdGgge251bWJlcn0gIHRoZSB3aWR0aCBvZiB0aGUgdGlsaW5nIHNwcml0ZVxuICogQHBhcmFtIGhlaWdodCB7bnVtYmVyfSB0aGUgaGVpZ2h0IG9mIHRoZSB0aWxpbmcgc3ByaXRlXG4gKiBAcGFyYW0gW2Nyb3Nzb3JpZ2luPShhdXRvKV0ge2Jvb2xlYW59IGlmIHlvdSB3YW50IHRvIHNwZWNpZnkgdGhlIGNyb3NzLW9yaWdpbiBwYXJhbWV0ZXJcbiAqIEBwYXJhbSBbc2NhbGVNb2RlPVBJWEkuU0NBTEVfTU9ERVMuREVGQVVMVF0ge251bWJlcn0gaWYgeW91IHdhbnQgdG8gc3BlY2lmeSB0aGUgc2NhbGUgbW9kZSwgc2VlIHtAbGluayBQSVhJLlNDQUxFX01PREVTfSBmb3IgcG9zc2libGUgdmFsdWVzXG4gKiBAcmV0dXJuIHtQSVhJLmV4dHJhcy5UaWxpbmdTcHJpdGV9IEEgbmV3IFRpbGluZ1Nwcml0ZSB1c2luZyBhIHRleHR1cmUgZnJvbSB0aGUgdGV4dHVyZSBjYWNoZSBtYXRjaGluZyB0aGUgaW1hZ2UgaWRcbiAqL1xuVGlsaW5nU3ByaXRlLmZyb21JbWFnZSA9IGZ1bmN0aW9uIChpbWFnZUlkLCB3aWR0aCwgaGVpZ2h0LCBjcm9zc29yaWdpbiwgc2NhbGVNb2RlKVxue1xuICAgIHJldHVybiBuZXcgVGlsaW5nU3ByaXRlKGNvcmUuVGV4dHVyZS5mcm9tSW1hZ2UoaW1hZ2VJZCwgY3Jvc3NvcmlnaW4sIHNjYWxlTW9kZSksd2lkdGgsaGVpZ2h0KTtcbn07XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uL2NvcmUnKSxcbiAgICBEaXNwbGF5T2JqZWN0ID0gY29yZS5EaXNwbGF5T2JqZWN0LFxuICAgIF90ZW1wTWF0cml4ID0gbmV3IGNvcmUuTWF0cml4KCk7XG5cbkRpc3BsYXlPYmplY3QucHJvdG90eXBlLl9jYWNoZUFzQml0bWFwID0gZmFsc2U7XG5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS5fb3JpZ2luYWxSZW5kZXJXZWJHTCA9IG51bGw7XG5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS5fb3JpZ2luYWxSZW5kZXJDYW52YXMgPSBudWxsO1xuXG5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS5fb3JpZ2luYWxVcGRhdGVUcmFuc2Zvcm0gPSBudWxsO1xuRGlzcGxheU9iamVjdC5wcm90b3R5cGUuX29yaWdpbmFsSGl0VGVzdCA9IG51bGw7XG5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS5fb3JpZ2luYWxEZXN0cm95ID0gbnVsbDtcbkRpc3BsYXlPYmplY3QucHJvdG90eXBlLl9jYWNoZWRTcHJpdGUgPSBudWxsO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhEaXNwbGF5T2JqZWN0LnByb3RvdHlwZSwge1xuXG4gICAgLyoqXG4gICAgICogU2V0IHRoaXMgdG8gdHJ1ZSBpZiB5b3Ugd2FudCB0aGlzIGRpc3BsYXkgb2JqZWN0IHRvIGJlIGNhY2hlZCBhcyBhIGJpdG1hcC5cbiAgICAgKiBUaGlzIGJhc2ljYWxseSB0YWtlcyBhIHNuYXAgc2hvdCBvZiB0aGUgZGlzcGxheSBvYmplY3QgYXMgaXQgaXMgYXQgdGhhdCBtb21lbnQuIEl0IGNhbiBwcm92aWRlIGEgcGVyZm9ybWFuY2UgYmVuZWZpdCBmb3IgY29tcGxleCBzdGF0aWMgZGlzcGxheU9iamVjdHMuXG4gICAgICogVG8gcmVtb3ZlIHNpbXBseSBzZXQgdGhpcyBwcm9wZXJ0eSB0byAnZmFsc2UnXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLkRpc3BsYXlPYmplY3QjXG4gICAgICovXG4gICAgY2FjaGVBc0JpdG1hcDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9jYWNoZUFzQml0bWFwO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgaWYgKHRoaXMuX2NhY2hlQXNCaXRtYXAgPT09IHZhbHVlKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5fY2FjaGVBc0JpdG1hcCA9IHZhbHVlO1xuXG4gICAgICAgICAgICBpZiAodmFsdWUpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdGhpcy5fb3JpZ2luYWxSZW5kZXJXZWJHTCA9IHRoaXMucmVuZGVyV2ViR0w7XG4gICAgICAgICAgICAgICAgdGhpcy5fb3JpZ2luYWxSZW5kZXJDYW52YXMgPSB0aGlzLnJlbmRlckNhbnZhcztcblxuICAgICAgICAgICAgICAgIHRoaXMuX29yaWdpbmFsVXBkYXRlVHJhbnNmb3JtID0gdGhpcy51cGRhdGVUcmFuc2Zvcm07XG4gICAgICAgICAgICAgICAgdGhpcy5fb3JpZ2luYWxHZXRCb3VuZHMgPSB0aGlzLmdldEJvdW5kcztcblxuICAgICAgICAgICAgICAgIHRoaXMuX29yaWdpbmFsRGVzdHJveSA9IHRoaXMuZGVzdHJveTtcblxuICAgICAgICAgICAgICAgIHRoaXMuX29yaWdpbmFsQ29udGFpbnNQb2ludCA9IHRoaXMuY29udGFpbnNQb2ludDtcblxuICAgICAgICAgICAgICAgIHRoaXMucmVuZGVyV2ViR0wgPSB0aGlzLl9yZW5kZXJDYWNoZWRXZWJHTDtcbiAgICAgICAgICAgICAgICB0aGlzLnJlbmRlckNhbnZhcyA9IHRoaXMuX3JlbmRlckNhY2hlZENhbnZhcztcblxuICAgICAgICAgICAgICAgIHRoaXMuZGVzdHJveSA9IHRoaXMuX2NhY2hlQXNCaXRtYXBEZXN0cm95O1xuXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuX2NhY2hlZFNwcml0ZSlcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2Rlc3Ryb3lDYWNoZWREaXNwbGF5T2JqZWN0KCk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgdGhpcy5yZW5kZXJXZWJHTCA9IHRoaXMuX29yaWdpbmFsUmVuZGVyV2ViR0w7XG4gICAgICAgICAgICAgICAgdGhpcy5yZW5kZXJDYW52YXMgPSB0aGlzLl9vcmlnaW5hbFJlbmRlckNhbnZhcztcbiAgICAgICAgICAgICAgICB0aGlzLmdldEJvdW5kcyA9IHRoaXMuX29yaWdpbmFsR2V0Qm91bmRzO1xuXG4gICAgICAgICAgICAgICAgdGhpcy5kZXN0cm95ID0gdGhpcy5fb3JpZ2luYWxEZXN0cm95O1xuXG4gICAgICAgICAgICAgICAgdGhpcy51cGRhdGVUcmFuc2Zvcm0gPSB0aGlzLl9vcmlnaW5hbFVwZGF0ZVRyYW5zZm9ybTtcbiAgICAgICAgICAgICAgICB0aGlzLmNvbnRhaW5zUG9pbnQgPSB0aGlzLl9vcmlnaW5hbENvbnRhaW5zUG9pbnQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG59KTtcbi8qKlxuKiBSZW5kZXJzIGEgY2FjaGVkIHZlcnNpb24gb2YgdGhlIHNwcml0ZSB3aXRoIFdlYkdMXG4qXG4qIEBwYXJhbSByZW5kZXJlciB7UElYSS5XZWJHTFJlbmRlcmVyfSB0aGUgV2ViR0wgcmVuZGVyZXJcbiogQHByaXZhdGVcbiovXG5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS5fcmVuZGVyQ2FjaGVkV2ViR0wgPSBmdW5jdGlvbiAocmVuZGVyZXIpXG57XG4gICAgaWYgKCF0aGlzLnZpc2libGUgfHwgdGhpcy53b3JsZEFscGhhIDw9IDAgfHwgIXRoaXMucmVuZGVyYWJsZSlcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLl9pbml0Q2FjaGVkRGlzcGxheU9iamVjdCggcmVuZGVyZXIgKTtcblxuICAgIHRoaXMuX2NhY2hlZFNwcml0ZS53b3JsZEFscGhhID0gdGhpcy53b3JsZEFscGhhO1xuXG4gICAgcmVuZGVyZXIuc2V0T2JqZWN0UmVuZGVyZXIocmVuZGVyZXIucGx1Z2lucy5zcHJpdGUpO1xuICAgIHJlbmRlcmVyLnBsdWdpbnMuc3ByaXRlLnJlbmRlciggdGhpcy5fY2FjaGVkU3ByaXRlICk7XG59O1xuXG4vKipcbiogUHJlcGFyZXMgdGhlIFdlYkdMIHJlbmRlcmVyIHRvIGNhY2hlIHRoZSBzcHJpdGVcbipcbiogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLldlYkdMUmVuZGVyZXJ9IHRoZSBXZWJHTCByZW5kZXJlclxuKiBAcHJpdmF0ZVxuKi9cbkRpc3BsYXlPYmplY3QucHJvdG90eXBlLl9pbml0Q2FjaGVkRGlzcGxheU9iamVjdCA9IGZ1bmN0aW9uIChyZW5kZXJlcilcbntcbiAgICBpZih0aGlzLl9jYWNoZWRTcHJpdGUpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gZmlyc3Qgd2UgZmx1c2ggYW55dGhpbmcgbGVmdCBpbiB0aGUgcmVuZGVyZXIgKG90aGVyd2lzZSBpdCB3b3VsZCBnZXQgcmVuZGVyZWQgdG8gdGhlIGNhY2hlZCB0ZXh0dXJlKVxuICAgIHJlbmRlcmVyLmN1cnJlbnRSZW5kZXJlci5mbHVzaCgpO1xuICAgIC8vdGhpcy5maWx0ZXJzPSBbXTtcbiAgICAvLyBuZXh0IHdlIGZpbmQgdGhlIGRpbWVuc2lvbnMgb2YgdGhlIHVudHJhbnNmb3JtZWQgb2JqZWN0XG4gICAgLy8gdGhpcyBmdW5jdGlvbiBhbHNvIGNhbGxzIHVwZGF0ZXRyYW5zZm9ybSBvbiBhbGwgaXRzIGNoaWxkcmVuIGFzIHBhcnQgb2YgdGhlIG1lYXN1cmluZy4gVGhpcyBtZWFucyB3ZSBkb24ndCBuZWVkIHRvIHVwZGF0ZSB0aGUgdHJhbnNmb3JtIGFnYWluIGluIHRoaXMgZnVuY3Rpb25cbiAgICAvLyBUT0RPIHBhc3MgYW4gb2JqZWN0IHRvIGNsb25lIHRvbz8gc2F2ZXMgaGF2aW5nIHRvIGNyZWF0ZSBhIG5ldyBvbmUgZWFjaCB0aW1lIVxuICAgIHZhciBib3VuZHMgPSB0aGlzLmdldExvY2FsQm91bmRzKCkuY2xvbmUoKTtcblxuICAgIC8vIGFkZCBzb21lIHBhZGRpbmchXG4gICAgaWYodGhpcy5fZmlsdGVycylcbiAgICB7XG4gICAgICAgIHZhciBwYWRkaW5nID0gdGhpcy5fZmlsdGVyc1swXS5wYWRkaW5nO1xuICAgICAgICBib3VuZHMueCAtPSBwYWRkaW5nO1xuICAgICAgICBib3VuZHMueSAtPSBwYWRkaW5nO1xuXG4gICAgICAgIGJvdW5kcy53aWR0aCArPSBwYWRkaW5nICogMjtcbiAgICAgICAgYm91bmRzLmhlaWdodCArPSBwYWRkaW5nICogMjtcbiAgICB9XG5cbiAgICAvLyBmb3Igbm93IHdlIGNhY2hlIHRoZSBjdXJyZW50IHJlbmRlclRhcmdldCB0aGF0IHRoZSB3ZWJHTCByZW5kZXJlciBpcyBjdXJyZW50bHkgdXNpbmcuXG4gICAgLy8gdGhpcyBjb3VsZCBiZSBtb3JlIGVsZWdlbnQuLlxuICAgIHZhciBjYWNoZWRSZW5kZXJUYXJnZXQgPSByZW5kZXJlci5jdXJyZW50UmVuZGVyVGFyZ2V0O1xuICAgIC8vIFdlIGFsc28gc3RvcmUgdGhlIGZpbHRlciBzdGFjayAtIEkgd2lsbCBkZWZpbml0ZWx5IGxvb2sgdG8gY2hhbmdlIGhvdyB0aGlzIHdvcmtzIGEgbGl0dGxlIGxhdGVyIGRvd24gdGhlIGxpbmUuXG4gICAgdmFyIHN0YWNrID0gcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5maWx0ZXJTdGFjaztcblxuICAgIC8vIHRoaXMgcmVuZGVyVGV4dHVyZSB3aWxsIGJlIHVzZWQgdG8gc3RvcmUgdGhlIGNhY2hlZCBEaXNwbGF5T2JqZWN0XG4gICAgdmFyIHJlbmRlclRleHR1cmUgPSBuZXcgY29yZS5SZW5kZXJUZXh0dXJlKHJlbmRlcmVyLCBib3VuZHMud2lkdGggfCAwLCBib3VuZHMuaGVpZ2h0IHwgMCk7XG5cbiAgICAvLyBuZWVkIHRvIHNldCAvL1xuICAgIHZhciBtID0gX3RlbXBNYXRyaXg7XG5cbiAgICBtLnR4ID0gLWJvdW5kcy54O1xuICAgIG0udHkgPSAtYm91bmRzLnk7XG5cblxuXG4gICAgLy8gc2V0IGFsbCBwcm9wZXJ0aWVzIHRvIHRoZXJlIG9yaWdpbmFsIHNvIHdlIGNhbiByZW5kZXIgdG8gYSB0ZXh0dXJlXG4gICAgdGhpcy5yZW5kZXJXZWJHTCA9IHRoaXMuX29yaWdpbmFsUmVuZGVyV2ViR0w7XG5cbiAgICByZW5kZXJUZXh0dXJlLnJlbmRlcih0aGlzLCBtLCB0cnVlLCB0cnVlKTtcblxuICAgIC8vIG5vdyByZXN0b3JlIHRoZSBzdGF0ZSBiZSBzZXR0aW5nIHRoZSBuZXcgcHJvcGVydGllc1xuICAgIHJlbmRlcmVyLnNldFJlbmRlclRhcmdldChjYWNoZWRSZW5kZXJUYXJnZXQpO1xuICAgIHJlbmRlcmVyLmZpbHRlck1hbmFnZXIuZmlsdGVyU3RhY2sgPSBzdGFjaztcblxuICAgIHRoaXMucmVuZGVyV2ViR0wgICAgID0gdGhpcy5fcmVuZGVyQ2FjaGVkV2ViR0w7XG4gICAgdGhpcy51cGRhdGVUcmFuc2Zvcm0gPSB0aGlzLmRpc3BsYXlPYmplY3RVcGRhdGVUcmFuc2Zvcm07XG4gICAgdGhpcy5nZXRCb3VuZHMgICAgICAgPSB0aGlzLl9nZXRDYWNoZWRCb3VuZHM7XG5cblxuICAgIC8vIGNyZWF0ZSBvdXIgY2FjaGVkIHNwcml0ZVxuICAgIHRoaXMuX2NhY2hlZFNwcml0ZSA9IG5ldyBjb3JlLlNwcml0ZShyZW5kZXJUZXh0dXJlKTtcbiAgICB0aGlzLl9jYWNoZWRTcHJpdGUud29ybGRUcmFuc2Zvcm0gPSB0aGlzLndvcmxkVHJhbnNmb3JtO1xuICAgIHRoaXMuX2NhY2hlZFNwcml0ZS5hbmNob3IueCA9IC0oIGJvdW5kcy54IC8gYm91bmRzLndpZHRoICk7XG4gICAgdGhpcy5fY2FjaGVkU3ByaXRlLmFuY2hvci55ID0gLSggYm91bmRzLnkgLyBib3VuZHMuaGVpZ2h0ICk7XG5cbiAgICAvLyByZXN0b3JlIHRoZSB0cmFuc2Zvcm0gb2YgdGhlIGNhY2hlZCBzcHJpdGUgdG8gYXZvaWQgdGhlIG5hc3R5IGZsaWNrZXIuLlxuICAgIHRoaXMudXBkYXRlVHJhbnNmb3JtKCk7XG5cbiAgICAvLyBtYXAgdGhlIGhpdCB0ZXN0Li5cbiAgICB0aGlzLmNvbnRhaW5zUG9pbnQgPSB0aGlzLl9jYWNoZWRTcHJpdGUuY29udGFpbnNQb2ludC5iaW5kKHRoaXMuX2NhY2hlZFNwcml0ZSk7XG59O1xuXG4vKipcbiogUmVuZGVycyBhIGNhY2hlZCB2ZXJzaW9uIG9mIHRoZSBzcHJpdGUgd2l0aCBjYW52YXNcbipcbiogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLkNhbnZhc1JlbmRlcmVyfSB0aGUgQ2FudmFzIHJlbmRlcmVyXG4qIEBwcml2YXRlXG4qL1xuRGlzcGxheU9iamVjdC5wcm90b3R5cGUuX3JlbmRlckNhY2hlZENhbnZhcyA9IGZ1bmN0aW9uIChyZW5kZXJlcilcbntcbiAgICBpZiAoIXRoaXMudmlzaWJsZSB8fCB0aGlzLndvcmxkQWxwaGEgPD0gMCB8fCAhdGhpcy5yZW5kZXJhYmxlKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuX2luaXRDYWNoZWREaXNwbGF5T2JqZWN0Q2FudmFzKCByZW5kZXJlciApO1xuXG4gICAgdGhpcy5fY2FjaGVkU3ByaXRlLndvcmxkQWxwaGEgPSB0aGlzLndvcmxkQWxwaGE7XG5cbiAgICB0aGlzLl9jYWNoZWRTcHJpdGUucmVuZGVyQ2FudmFzKHJlbmRlcmVyKTtcbn07XG5cbi8vVE9ETyB0aGlzIGNhbiBiZSB0aGUgc2FtZSBhcyB0aGUgd2ViR0wgdmVyaXNvbi4uIHdpbGwgbmVlZCB0byBkbyBhIGxpdHRsZSB0d2Vha2luZyBmaXJzdCB0aG91Z2guLlxuLyoqXG4qIFByZXBhcmVzIHRoZSBDYW52YXMgcmVuZGVyZXIgdG8gY2FjaGUgdGhlIHNwcml0ZVxuKlxuKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuQ2FudmFzUmVuZGVyZXJ9IHRoZSBDYW52YXMgcmVuZGVyZXJcbiogQHByaXZhdGVcbiovXG5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS5faW5pdENhY2hlZERpc3BsYXlPYmplY3RDYW52YXMgPSBmdW5jdGlvbiAocmVuZGVyZXIpXG57XG4gICAgaWYodGhpcy5fY2FjaGVkU3ByaXRlKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vZ2V0IGJvdW5kcyBhY3R1YWxseSB0cmFuc2Zvcm1zIHRoZSBvYmplY3QgZm9yIHVzIGFscmVhZHkhXG4gICAgdmFyIGJvdW5kcyA9IHRoaXMuZ2V0TG9jYWxCb3VuZHMoKTtcblxuICAgIHZhciBjYWNoZWRSZW5kZXJUYXJnZXQgPSByZW5kZXJlci5jb250ZXh0O1xuXG4gICAgdmFyIHJlbmRlclRleHR1cmUgPSBuZXcgY29yZS5SZW5kZXJUZXh0dXJlKHJlbmRlcmVyLCBib3VuZHMud2lkdGggfCAwLCBib3VuZHMuaGVpZ2h0IHwgMCk7XG5cbiAgICAvLyBuZWVkIHRvIHNldCAvL1xuICAgIHZhciBtID0gX3RlbXBNYXRyaXg7XG5cbiAgICBtLnR4ID0gLWJvdW5kcy54O1xuICAgIG0udHkgPSAtYm91bmRzLnk7XG5cbiAgICAvLyBzZXQgYWxsIHByb3BlcnRpZXMgdG8gdGhlcmUgb3JpZ2luYWwgc28gd2UgY2FuIHJlbmRlciB0byBhIHRleHR1cmVcbiAgICB0aGlzLnJlbmRlckNhbnZhcyA9IHRoaXMuX29yaWdpbmFsUmVuZGVyQ2FudmFzO1xuXG4gICAgcmVuZGVyVGV4dHVyZS5yZW5kZXIodGhpcywgbSwgdHJ1ZSk7XG5cbiAgICAvLyBub3cgcmVzdG9yZSB0aGUgc3RhdGUgYmUgc2V0dGluZyB0aGUgbmV3IHByb3BlcnRpZXNcbiAgICByZW5kZXJlci5jb250ZXh0ID0gY2FjaGVkUmVuZGVyVGFyZ2V0O1xuXG4gICAgdGhpcy5yZW5kZXJDYW52YXMgPSB0aGlzLl9yZW5kZXJDYWNoZWRDYW52YXM7XG4gICAgdGhpcy51cGRhdGVUcmFuc2Zvcm0gPSB0aGlzLmRpc3BsYXlPYmplY3RVcGRhdGVUcmFuc2Zvcm07XG4gICAgdGhpcy5nZXRCb3VuZHMgID0gdGhpcy5fZ2V0Q2FjaGVkQm91bmRzO1xuXG5cbiAgICAvLyBjcmVhdGUgb3VyIGNhY2hlZCBzcHJpdGVcbiAgICB0aGlzLl9jYWNoZWRTcHJpdGUgPSBuZXcgY29yZS5TcHJpdGUocmVuZGVyVGV4dHVyZSk7XG4gICAgdGhpcy5fY2FjaGVkU3ByaXRlLndvcmxkVHJhbnNmb3JtID0gdGhpcy53b3JsZFRyYW5zZm9ybTtcbiAgICB0aGlzLl9jYWNoZWRTcHJpdGUuYW5jaG9yLnggPSAtKCBib3VuZHMueCAvIGJvdW5kcy53aWR0aCApO1xuICAgIHRoaXMuX2NhY2hlZFNwcml0ZS5hbmNob3IueSA9IC0oIGJvdW5kcy55IC8gYm91bmRzLmhlaWdodCApO1xuXG4gICAgdGhpcy51cGRhdGVUcmFuc2Zvcm0oKTtcblxuICAgIHRoaXMuY29udGFpbnNQb2ludCA9IHRoaXMuX2NhY2hlZFNwcml0ZS5jb250YWluc1BvaW50LmJpbmQodGhpcy5fY2FjaGVkU3ByaXRlKTtcbn07XG5cbi8qKlxuKiBDYWxjdWxhdGVzIHRoZSBib3VuZHMgb2YgdGhlIGNhY2hlZCBzcHJpdGVcbipcbiogQHByaXZhdGVcbiovXG5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS5fZ2V0Q2FjaGVkQm91bmRzID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLl9jYWNoZWRTcHJpdGUuX2N1cnJlbnRCb3VuZHMgPSBudWxsO1xuXG4gICAgcmV0dXJuIHRoaXMuX2NhY2hlZFNwcml0ZS5nZXRCb3VuZHMoKTtcbn07XG5cbi8qKlxuKiBEZXN0cm95cyB0aGUgY2FjaGVkIHNwcml0ZS5cbipcbiogQHByaXZhdGVcbiovXG5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS5fZGVzdHJveUNhY2hlZERpc3BsYXlPYmplY3QgPSBmdW5jdGlvbiAoKVxue1xuICAgIHRoaXMuX2NhY2hlZFNwcml0ZS5fdGV4dHVyZS5kZXN0cm95KCk7XG4gICAgdGhpcy5fY2FjaGVkU3ByaXRlID0gbnVsbDtcbn07XG5cbkRpc3BsYXlPYmplY3QucHJvdG90eXBlLl9jYWNoZUFzQml0bWFwRGVzdHJveSA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy5jYWNoZUFzQml0bWFwID0gZmFsc2U7XG4gICAgdGhpcy5fb3JpZ2luYWxEZXN0cm95KCk7XG59O1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi9jb3JlJyk7XG5cbi8qKlxuICogVGhlIGluc3RhbmNlIG5hbWUgb2YgdGhlIG9iamVjdC5cbiAqXG4gKiBAbWVtYmVyb2YgUElYSS5EaXNwbGF5T2JqZWN0I1xuICogQG1lbWJlciB7c3RyaW5nfVxuICovXG5jb3JlLkRpc3BsYXlPYmplY3QucHJvdG90eXBlLm5hbWUgPSBudWxsO1xuXG4vKipcbiogUmV0dXJucyB0aGUgZGlzcGxheSBvYmplY3QgaW4gdGhlIGNvbnRhaW5lclxuKlxuKiBAbWVtYmVyb2YgUElYSS5Db250YWluZXIjXG4qIEBwYXJhbSBuYW1lIHtzdHJpbmd9IGluc3RhbmNlIG5hbWVcbiogQHJldHVybiB7UElYSS5EaXNwbGF5T2JqZWN0fVxuKi9cbmNvcmUuQ29udGFpbmVyLnByb3RvdHlwZS5nZXRDaGlsZEJ5TmFtZSA9IGZ1bmN0aW9uIChuYW1lKVxue1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5jaGlsZHJlbi5sZW5ndGg7IGkrKylcbiAgICB7XG4gICAgICAgIGlmICh0aGlzLmNoaWxkcmVuW2ldLm5hbWUgPT09IG5hbWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmNoaWxkcmVuW2ldO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xufTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vY29yZScpO1xuXG4vKipcbiogUmV0dXJucyB0aGUgZ2xvYmFsIHBvc2l0aW9uIG9mIHRoZSBkaXNwbGF5T2JqZWN0XG4qXG4qIEBtZW1iZXJvZiBQSVhJLkRpc3BsYXlPYmplY3QjXG4qIEBwYXJhbSBwb2ludCB7UG9pbnR9IHRoZSBwb2ludCB0byB3cml0ZSB0aGUgZ2xvYmFsIHZhbHVlIHRvLiBJZiBudWxsIGEgbmV3IHBvaW50IHdpbGwgYmUgcmV0dXJuZWRcbiogQHJldHVybiB7UG9pbnR9XG4qL1xuY29yZS5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS5nZXRHbG9iYWxQb3NpdGlvbiA9IGZ1bmN0aW9uIChwb2ludClcbntcbiAgICBwb2ludCA9IHBvaW50IHx8IG5ldyBjb3JlLlBvaW50KCk7XG5cbiAgICBpZih0aGlzLnBhcmVudClcbiAgICB7XG4gICAgICAgIHRoaXMuZGlzcGxheU9iamVjdFVwZGF0ZVRyYW5zZm9ybSgpO1xuXG4gICAgICAgIHBvaW50LnggPSB0aGlzLndvcmxkVHJhbnNmb3JtLnR4O1xuICAgICAgICBwb2ludC55ID0gdGhpcy53b3JsZFRyYW5zZm9ybS50eTtcbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgcG9pbnQueCA9IHRoaXMucG9zaXRpb24ueDtcbiAgICAgICAgcG9pbnQueSA9IHRoaXMucG9zaXRpb24ueTtcbiAgICB9XG5cbiAgICByZXR1cm4gcG9pbnQ7XG59O1xuIiwiLyoqXG4gKiBAZmlsZSAgICAgICAgTWFpbiBleHBvcnQgb2YgdGhlIFBJWEkgZXh0cmFzIGxpYnJhcnlcbiAqIEBhdXRob3IgICAgICBNYXQgR3JvdmVzIDxtYXRAZ29vZGJveWRpZ2l0YWwuY29tPlxuICogQGNvcHlyaWdodCAgIDIwMTMtMjAxNSBHb29kQm95RGlnaXRhbFxuICogQGxpY2Vuc2UgICAgIHtAbGluayBodHRwczovL2dpdGh1Yi5jb20vcGl4aWpzL3BpeGkuanMvYmxvYi9tYXN0ZXIvTElDRU5TRXxNSVQgTGljZW5zZX1cbiAqL1xuXG5yZXF1aXJlKCcuL2NhY2hlQXNCaXRtYXAnKTtcbnJlcXVpcmUoJy4vZ2V0Q2hpbGRCeU5hbWUnKTtcbnJlcXVpcmUoJy4vZ2V0R2xvYmFsUG9zaXRpb24nKTtcblxuLyoqXG4gKiBAbmFtZXNwYWNlIFBJWEkuZXh0cmFzXG4gKi9cbm1vZHVsZS5leHBvcnRzID0ge1xuICAgIE1vdmllQ2xpcDogICAgICByZXF1aXJlKCcuL01vdmllQ2xpcCcpLFxuICAgIFRpbGluZ1Nwcml0ZTogICByZXF1aXJlKCcuL1RpbGluZ1Nwcml0ZScpLFxuICAgIEJpdG1hcFRleHQ6ICAgICByZXF1aXJlKCcuL0JpdG1hcFRleHQnKVxufTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vLi4vY29yZScpO1xuLy8gQHNlZSBodHRwczovL2dpdGh1Yi5jb20vc3Vic3RhY2svYnJmcy9pc3N1ZXMvMjVcblxuXG4vLyBUT0RPIChjZW5nbGVyKSAtIFRoZSBZIGlzIGZsaXBwZWQgaW4gdGhpcyBzaGFkZXIgZm9yIHNvbWUgcmVhc29uLlxuXG4vKipcbiAqIEBhdXRob3IgVmljbyBAdmljb2NvdGVhXG4gKiBvcmlnaW5hbCBzaGFkZXIgOiBodHRwczovL3d3dy5zaGFkZXJ0b3kuY29tL3ZpZXcvbHNzR0RqIGJ5IEBtb3ZBWDEzaFxuICovXG5cbi8qKlxuICogQW4gQVNDSUkgZmlsdGVyLlxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5BYnN0cmFjdEZpbHRlclxuICogQG1lbWJlcm9mIFBJWEkuZmlsdGVyc1xuICovXG5mdW5jdGlvbiBBc2NpaUZpbHRlcigpXG57XG4gICAgY29yZS5BYnN0cmFjdEZpbHRlci5jYWxsKHRoaXMsXG4gICAgICAgIC8vIHZlcnRleCBzaGFkZXJcbiAgICAgICAgbnVsbCxcbiAgICAgICAgLy8gZnJhZ21lbnQgc2hhZGVyXG4gICAgICAgIFwicHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XFxuXFxudW5pZm9ybSB2ZWM0IGRpbWVuc2lvbnM7XFxudW5pZm9ybSBmbG9hdCBwaXhlbFNpemU7XFxudW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXI7XFxuXFxuZmxvYXQgY2hhcmFjdGVyKGZsb2F0IG4sIHZlYzIgcClcXG57XFxuICAgIHAgPSBmbG9vcihwKnZlYzIoNC4wLCAtNC4wKSArIDIuNSk7XFxuICAgIGlmIChjbGFtcChwLngsIDAuMCwgNC4wKSA9PSBwLnggJiYgY2xhbXAocC55LCAwLjAsIDQuMCkgPT0gcC55KVxcbiAgICB7XFxuICAgICAgICBpZiAoaW50KG1vZChuL2V4cDIocC54ICsgNS4wKnAueSksIDIuMCkpID09IDEpIHJldHVybiAxLjA7XFxuICAgIH1cXG4gICAgcmV0dXJuIDAuMDtcXG59XFxuXFxudm9pZCBtYWluKClcXG57XFxuICAgIHZlYzIgdXYgPSBnbF9GcmFnQ29vcmQueHk7XFxuXFxuICAgIHZlYzMgY29sID0gdGV4dHVyZTJEKHVTYW1wbGVyLCBmbG9vciggdXYgLyBwaXhlbFNpemUgKSAqIHBpeGVsU2l6ZSAvIGRpbWVuc2lvbnMueHkpLnJnYjtcXG5cXG4gICAgZmxvYXQgZ3JheSA9IChjb2wuciArIGNvbC5nICsgY29sLmIpIC8gMy4wO1xcblxcbiAgICBmbG9hdCBuID0gIDY1NTM2LjA7ICAgICAgICAgICAgIC8vIC5cXG4gICAgaWYgKGdyYXkgPiAwLjIpIG4gPSA2NTYwMC4wOyAgICAvLyA6XFxuICAgIGlmIChncmF5ID4gMC4zKSBuID0gMzMyNzcyLjA7ICAgLy8gKlxcbiAgICBpZiAoZ3JheSA+IDAuNCkgbiA9IDE1MjU1MDg2LjA7IC8vIG9cXG4gICAgaWYgKGdyYXkgPiAwLjUpIG4gPSAyMzM4NTE2NC4wOyAvLyAmXFxuICAgIGlmIChncmF5ID4gMC42KSBuID0gMTUyNTIwMTQuMDsgLy8gOFxcbiAgICBpZiAoZ3JheSA+IDAuNykgbiA9IDEzMTk5NDUyLjA7IC8vIEBcXG4gICAgaWYgKGdyYXkgPiAwLjgpIG4gPSAxMTUxMjgxMC4wOyAvLyAjXFxuXFxuICAgIHZlYzIgcCA9IG1vZCggdXYgLyAoIHBpeGVsU2l6ZSAqIDAuNSApLCAyLjApIC0gdmVjMigxLjApO1xcbiAgICBjb2wgPSBjb2wgKiBjaGFyYWN0ZXIobiwgcCk7XFxuXFxuICAgIGdsX0ZyYWdDb2xvciA9IHZlYzQoY29sLCAxLjApO1xcbn1cXG5cIixcbiAgICAgICAgLy8gY3VzdG9tIHVuaWZvcm1zXG4gICAgICAgIHtcbiAgICAgICAgICAgIGRpbWVuc2lvbnM6IHsgdHlwZTogJzRmdicsIHZhbHVlOiBuZXcgRmxvYXQzMkFycmF5KFswLCAwLCAwLCAwXSkgfSxcbiAgICAgICAgICAgIHBpeGVsU2l6ZTogIHsgdHlwZTogJzFmJywgdmFsdWU6IDggfVxuICAgICAgICB9XG4gICAgKTtcbn1cblxuQXNjaWlGaWx0ZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShjb3JlLkFic3RyYWN0RmlsdGVyLnByb3RvdHlwZSk7XG5Bc2NpaUZpbHRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBBc2NpaUZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gQXNjaWlGaWx0ZXI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKEFzY2lpRmlsdGVyLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFRoZSBwaXhlbCBzaXplIHVzZWQgYnkgdGhlIGZpbHRlci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLkFzY2lpRmlsdGVyI1xuICAgICAqL1xuICAgIHNpemU6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy51bmlmb3Jtcy5waXhlbFNpemUudmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLnBpeGVsU2l6ZS52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfVxufSk7XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uLy4uL2NvcmUnKSxcbiAgICBCbHVyWEZpbHRlciA9IHJlcXVpcmUoJy4uL2JsdXIvQmx1clhGaWx0ZXInKSxcbiAgICBCbHVyWUZpbHRlciA9IHJlcXVpcmUoJy4uL2JsdXIvQmx1cllGaWx0ZXInKTtcblxuLyoqXG4gKiBUaGUgQmxvb21GaWx0ZXIgYXBwbGllcyBhIEdhdXNzaWFuIGJsdXIgdG8gYW4gb2JqZWN0LlxuICogVGhlIHN0cmVuZ3RoIG9mIHRoZSBibHVyIGNhbiBiZSBzZXQgZm9yIHgtIGFuZCB5LWF4aXMgc2VwYXJhdGVseS5cbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQWJzdHJhY3RGaWx0ZXJcbiAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnNcbiAqL1xuZnVuY3Rpb24gQmxvb21GaWx0ZXIoKVxue1xuICAgIGNvcmUuQWJzdHJhY3RGaWx0ZXIuY2FsbCh0aGlzKTtcblxuICAgIHRoaXMuYmx1clhGaWx0ZXIgPSBuZXcgQmx1clhGaWx0ZXIoKTtcbiAgICB0aGlzLmJsdXJZRmlsdGVyID0gbmV3IEJsdXJZRmlsdGVyKCk7XG5cbiAgICB0aGlzLmRlZmF1bHRGaWx0ZXIgPSBuZXcgY29yZS5BYnN0cmFjdEZpbHRlcigpO1xufVxuXG5CbG9vbUZpbHRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuQWJzdHJhY3RGaWx0ZXIucHJvdG90eXBlKTtcbkJsb29tRmlsdGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IEJsb29tRmlsdGVyO1xubW9kdWxlLmV4cG9ydHMgPSBCbG9vbUZpbHRlcjtcblxuQmxvb21GaWx0ZXIucHJvdG90eXBlLmFwcGx5RmlsdGVyID0gZnVuY3Rpb24gKHJlbmRlcmVyLCBpbnB1dCwgb3V0cHV0KVxue1xuICAgIHZhciByZW5kZXJUYXJnZXQgPSByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLmdldFJlbmRlclRhcmdldCh0cnVlKTtcblxuICAgIC8vVE9ETyAtIGNvcHlUZXhTdWJJbWFnZTJEIGNvdWxkIGJlIHVzZWQgaGVyZT9cbiAgICB0aGlzLmRlZmF1bHRGaWx0ZXIuYXBwbHlGaWx0ZXIocmVuZGVyZXIsIGlucHV0LCBvdXRwdXQpO1xuXG4gICAgdGhpcy5ibHVyWEZpbHRlci5hcHBseUZpbHRlcihyZW5kZXJlciwgaW5wdXQsIHJlbmRlclRhcmdldCk7XG5cbiAgICByZW5kZXJlci5ibGVuZE1vZGVNYW5hZ2VyLnNldEJsZW5kTW9kZShjb3JlLkJMRU5EX01PREVTLlNDUkVFTik7XG5cbiAgICB0aGlzLmJsdXJZRmlsdGVyLmFwcGx5RmlsdGVyKHJlbmRlcmVyLCByZW5kZXJUYXJnZXQsIG91dHB1dCk7XG5cbiAgICByZW5kZXJlci5ibGVuZE1vZGVNYW5hZ2VyLnNldEJsZW5kTW9kZShjb3JlLkJMRU5EX01PREVTLk5PUk1BTCk7XG5cbiAgICByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLnJldHVyblJlbmRlclRhcmdldChyZW5kZXJUYXJnZXQpO1xufTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoQmxvb21GaWx0ZXIucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgc3RyZW5ndGggb2YgYm90aCB0aGUgYmx1clggYW5kIGJsdXJZIHByb3BlcnRpZXMgc2ltdWx0YW5lb3VzbHlcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyT2YgUElYSS5maWx0ZXJzLkJsb29tRmlsdGVyI1xuICAgICAqIEBkZWZhdWx0IDJcbiAgICAgKi9cbiAgICBibHVyOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuYmx1clhGaWx0ZXIuYmx1cjtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuYmx1clhGaWx0ZXIuYmx1ciA9IHRoaXMuYmx1cllGaWx0ZXIuYmx1ciA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIHN0cmVuZ3RoIG9mIHRoZSBibHVyWCBwcm9wZXJ0eVxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJPZiBQSVhJLmZpbHRlcnMuQmxvb21GaWx0ZXIjXG4gICAgICogQGRlZmF1bHQgMlxuICAgICAqL1xuICAgIGJsdXJYOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuYmx1clhGaWx0ZXIuYmx1cjtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuYmx1clhGaWx0ZXIuYmx1ciA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIHN0cmVuZ3RoIG9mIHRoZSBibHVyWSBwcm9wZXJ0eVxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJPZiBQSVhJLmZpbHRlcnMuQmxvb21GaWx0ZXIjXG4gICAgICogQGRlZmF1bHQgMlxuICAgICAqL1xuICAgIGJsdXJZOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuYmx1cllGaWx0ZXIuYmx1cjtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuYmx1cllGaWx0ZXIuYmx1ciA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfVxufSk7XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uLy4uL2NvcmUnKTtcblxuXG4vKipcbiAqIFRoZSBCbHVyRGlyRmlsdGVyIGFwcGxpZXMgYSBHYXVzc2lhbiBibHVyIHRvd2FyZCBhIGRpcmVjdGlvbiB0byBhbiBvYmplY3QuXG4gKlxuICogQGNsYXNzXG4gKiBAcGFyYW0ge251bWJlcn0gZGlyWFxuICogQHBhcmFtIHtudW1iZXJ9IGRpcllcbiAqIEBleHRlbmRzIFBJWEkuQWJzdHJhY3RGaWx0ZXJcbiAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnNcbiAqL1xuZnVuY3Rpb24gQmx1ckRpckZpbHRlcihkaXJYLCBkaXJZKVxue1xuICAgIGNvcmUuQWJzdHJhY3RGaWx0ZXIuY2FsbCh0aGlzLFxuICAgICAgICAvLyB2ZXJ0ZXggc2hhZGVyXG4gICAgICAgIFwiYXR0cmlidXRlIHZlYzIgYVZlcnRleFBvc2l0aW9uO1xcbmF0dHJpYnV0ZSB2ZWMyIGFUZXh0dXJlQ29vcmQ7XFxuYXR0cmlidXRlIHZlYzQgYUNvbG9yO1xcblxcbnVuaWZvcm0gZmxvYXQgc3RyZW5ndGg7XFxudW5pZm9ybSBmbG9hdCBkaXJYO1xcbnVuaWZvcm0gZmxvYXQgZGlyWTtcXG51bmlmb3JtIG1hdDMgcHJvamVjdGlvbk1hdHJpeDtcXG5cXG52YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDtcXG52YXJ5aW5nIHZlYzQgdkNvbG9yO1xcbnZhcnlpbmcgdmVjMiB2Qmx1clRleENvb3Jkc1szXTtcXG5cXG52b2lkIG1haW4odm9pZClcXG57XFxuICAgIGdsX1Bvc2l0aW9uID0gdmVjNCgocHJvamVjdGlvbk1hdHJpeCAqIHZlYzMoKGFWZXJ0ZXhQb3NpdGlvbiksIDEuMCkpLnh5LCAwLjAsIDEuMCk7XFxuICAgIHZUZXh0dXJlQ29vcmQgPSBhVGV4dHVyZUNvb3JkO1xcblxcbiAgICB2Qmx1clRleENvb3Jkc1swXSA9IGFUZXh0dXJlQ29vcmQgKyB2ZWMyKCAoMC4wMDQgKiBzdHJlbmd0aCkgKiBkaXJYLCAoMC4wMDQgKiBzdHJlbmd0aCkgKiBkaXJZICk7XFxuICAgIHZCbHVyVGV4Q29vcmRzWzFdID0gYVRleHR1cmVDb29yZCArIHZlYzIoICgwLjAwOCAqIHN0cmVuZ3RoKSAqIGRpclgsICgwLjAwOCAqIHN0cmVuZ3RoKSAqIGRpclkgKTtcXG4gICAgdkJsdXJUZXhDb29yZHNbMl0gPSBhVGV4dHVyZUNvb3JkICsgdmVjMiggKDAuMDEyICogc3RyZW5ndGgpICogZGlyWCwgKDAuMDEyICogc3RyZW5ndGgpICogZGlyWSApO1xcblxcbiAgICB2Q29sb3IgPSB2ZWM0KGFDb2xvci5yZ2IgKiBhQ29sb3IuYSwgYUNvbG9yLmEpO1xcbn1cXG5cIixcbiAgICAgICAgLy8gZnJhZ21lbnQgc2hhZGVyXG4gICAgICAgIFwicHJlY2lzaW9uIGxvd3AgZmxvYXQ7XFxuXFxudmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7XFxudmFyeWluZyB2ZWMyIHZCbHVyVGV4Q29vcmRzWzNdO1xcbnZhcnlpbmcgdmVjNCB2Q29sb3I7XFxuXFxudW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXI7XFxuXFxudm9pZCBtYWluKHZvaWQpXFxue1xcbiAgICBnbF9GcmFnQ29sb3IgPSB2ZWM0KDAuMCk7XFxuXFxuICAgIGdsX0ZyYWdDb2xvciArPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZUZXh0dXJlQ29vcmQgICAgICkgKiAwLjM5ODk0MjI4MDQwMTQzMjc7XFxuICAgIGdsX0ZyYWdDb2xvciArPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZCbHVyVGV4Q29vcmRzWyAwXSkgKiAwLjI0MTk3MDcyNDUxOTE0NTQ7XFxuICAgIGdsX0ZyYWdDb2xvciArPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZCbHVyVGV4Q29vcmRzWyAxXSkgKiAwLjA1Mzk5MDk2NjUxMzE4OTg1O1xcbiAgICBnbF9GcmFnQ29sb3IgKz0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2Qmx1clRleENvb3Jkc1sgMl0pICogMC4wMDQ0MzE4NDg0MTE5MzgzNDE7XFxufVxcblwiLFxuICAgICAgICAvLyBzZXQgdGhlIHVuaWZvcm1zXG4gICAgICAgIHtcbiAgICAgICAgICAgIHN0cmVuZ3RoOiB7IHR5cGU6ICcxZicsIHZhbHVlOiAxIH0sXG4gICAgICAgICAgICBkaXJYOiB7IHR5cGU6ICcxZicsIHZhbHVlOiBkaXJYIHx8IDAgfSxcbiAgICAgICAgICAgIGRpclk6IHsgdHlwZTogJzFmJywgdmFsdWU6IGRpclkgfHwgMCB9XG4gICAgICAgIH1cbiAgICApO1xuXG4gICAgdGhpcy5kZWZhdWx0RmlsdGVyID0gbmV3IGNvcmUuQWJzdHJhY3RGaWx0ZXIoKTtcblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIG51bWJlciBvZiBwYXNzZXMgZm9yIGJsdXIuIE1vcmUgcGFzc2VzIG1lYW5zIGhpZ2hlciBxdWFpbGl0eSBibHVyaW5nLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDFcbiAgICAgKi9cbiAgICB0aGlzLnBhc3NlcyA9IDE7XG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBYIGRpcmVjdGlvbiBvZiB0aGUgYmx1clxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDBcbiAgICAgKi9cbiAgICB0aGlzLmRpclggPSBkaXJYIHx8IDA7XG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBZIGRpcmVjdGlvbiBvZiB0aGUgYmx1clxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDBcbiAgICAgKi9cbiAgICB0aGlzLmRpclkgPSBkaXJZIHx8IDA7XG5cbiAgICB0aGlzLnN0cmVuZ3RoID0gNDtcbn1cblxuQmx1ckRpckZpbHRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuQWJzdHJhY3RGaWx0ZXIucHJvdG90eXBlKTtcbkJsdXJEaXJGaWx0ZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gQmx1ckRpckZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gQmx1ckRpckZpbHRlcjtcblxuQmx1ckRpckZpbHRlci5wcm90b3R5cGUuYXBwbHlGaWx0ZXIgPSBmdW5jdGlvbiAocmVuZGVyZXIsIGlucHV0LCBvdXRwdXQsIGNsZWFyKSB7XG5cbiAgICB2YXIgc2hhZGVyID0gdGhpcy5nZXRTaGFkZXIocmVuZGVyZXIpO1xuXG4gICAgdGhpcy51bmlmb3Jtcy5zdHJlbmd0aC52YWx1ZSA9IHRoaXMuc3RyZW5ndGggLyA0IC8gdGhpcy5wYXNzZXMgKiAoaW5wdXQuZnJhbWUud2lkdGggLyBpbnB1dC5zaXplLndpZHRoKTtcblxuICAgIGlmICh0aGlzLnBhc3NlcyA9PT0gMSkge1xuICAgICAgICByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLmFwcGx5RmlsdGVyKHNoYWRlciwgaW5wdXQsIG91dHB1dCwgY2xlYXIpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHZhciByZW5kZXJUYXJnZXQgPSByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLmdldFJlbmRlclRhcmdldCh0cnVlKTtcblxuICAgICAgICByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLmFwcGx5RmlsdGVyKHNoYWRlciwgaW5wdXQsIHJlbmRlclRhcmdldCwgY2xlYXIpO1xuXG4gICAgICAgIGZvcih2YXIgaSA9IDA7IGkgPCB0aGlzLnBhc3Nlcy0yOyBpKyspXG4gICAgICAgIHtcbiAgICAgICAgICAgIC8vdGhpcy51bmlmb3Jtcy5zdHJlbmd0aC52YWx1ZSA9IHRoaXMuc3RyZW5ndGggLyA0IC8gKHRoaXMucGFzc2VzKyhpKjIpKSAqIChpbnB1dC5mcmFtZS53aWR0aCAvIGlucHV0LnNpemUud2lkdGgpO1xuICAgICAgICAgICAgcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5hcHBseUZpbHRlcihzaGFkZXIsIHJlbmRlclRhcmdldCwgcmVuZGVyVGFyZ2V0LCBjbGVhcik7XG4gICAgICAgIH1cblxuICAgICAgICByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLmFwcGx5RmlsdGVyKHNoYWRlciwgcmVuZGVyVGFyZ2V0LCBvdXRwdXQsIGNsZWFyKTtcblxuICAgICAgICByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLnJldHVyblJlbmRlclRhcmdldChyZW5kZXJUYXJnZXQpO1xuICAgIH1cbn07XG5cblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoQmx1ckRpckZpbHRlci5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBzdHJlbmd0aCBvZiBib3RoIHRoZSBibHVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuQmx1ckRpckZpbHRlciNcbiAgICAgKiBAZGVmYXVsdCAyXG4gICAgICovXG4gICAgYmx1cjoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnN0cmVuZ3RoO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5wYWRkaW5nID0gdmFsdWUgKiAwLjU7XG4gICAgICAgICAgICB0aGlzLnN0cmVuZ3RoID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9LFxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIFggZGlyZWN0aW9uIG9mIHRoZSBibHVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuQmx1cllGaWx0ZXIjXG4gICAgICogQGRlZmF1bHQgMFxuICAgICAqL1xuICAgIGRpclg6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5kaXJYO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy5kaXJYLnZhbHVlID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9LFxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIFkgZGlyZWN0aW9uIG9mIHRoZSBibHVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuQmx1ckRpckZpbHRlciNcbiAgICAgKiBAZGVmYXVsdCAwXG4gICAgICovXG4gICAgZGlyWToge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmRpclk7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLmRpclkudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi8uLi9jb3JlJyksXG4gICAgQmx1clhGaWx0ZXIgPSByZXF1aXJlKCcuL0JsdXJYRmlsdGVyJyksXG4gICAgQmx1cllGaWx0ZXIgPSByZXF1aXJlKCcuL0JsdXJZRmlsdGVyJyk7XG5cbi8qKlxuICogVGhlIEJsdXJGaWx0ZXIgYXBwbGllcyBhIEdhdXNzaWFuIGJsdXIgdG8gYW4gb2JqZWN0LlxuICogVGhlIHN0cmVuZ3RoIG9mIHRoZSBibHVyIGNhbiBiZSBzZXQgZm9yIHgtIGFuZCB5LWF4aXMgc2VwYXJhdGVseS5cbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQWJzdHJhY3RGaWx0ZXJcbiAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnNcbiAqL1xuZnVuY3Rpb24gQmx1ckZpbHRlcigpXG57XG4gICAgY29yZS5BYnN0cmFjdEZpbHRlci5jYWxsKHRoaXMpO1xuXG4gICAgdGhpcy5ibHVyWEZpbHRlciA9IG5ldyBCbHVyWEZpbHRlcigpO1xuICAgIHRoaXMuYmx1cllGaWx0ZXIgPSBuZXcgQmx1cllGaWx0ZXIoKTtcbn1cblxuQmx1ckZpbHRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuQWJzdHJhY3RGaWx0ZXIucHJvdG90eXBlKTtcbkJsdXJGaWx0ZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gQmx1ckZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gQmx1ckZpbHRlcjtcblxuQmx1ckZpbHRlci5wcm90b3R5cGUuYXBwbHlGaWx0ZXIgPSBmdW5jdGlvbiAocmVuZGVyZXIsIGlucHV0LCBvdXRwdXQpXG57XG4gICAgdmFyIHJlbmRlclRhcmdldCA9IHJlbmRlcmVyLmZpbHRlck1hbmFnZXIuZ2V0UmVuZGVyVGFyZ2V0KHRydWUpO1xuXG4gICAgdGhpcy5ibHVyWEZpbHRlci5hcHBseUZpbHRlcihyZW5kZXJlciwgaW5wdXQsIHJlbmRlclRhcmdldCk7XG4gICAgdGhpcy5ibHVyWUZpbHRlci5hcHBseUZpbHRlcihyZW5kZXJlciwgcmVuZGVyVGFyZ2V0LCBvdXRwdXQpO1xuXG4gICAgcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5yZXR1cm5SZW5kZXJUYXJnZXQocmVuZGVyVGFyZ2V0KTtcbn07XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKEJsdXJGaWx0ZXIucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgc3RyZW5ndGggb2YgYm90aCB0aGUgYmx1clggYW5kIGJsdXJZIHByb3BlcnRpZXMgc2ltdWx0YW5lb3VzbHlcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyT2YgUElYSS5maWx0ZXJzLkJsdXJGaWx0ZXIjXG4gICAgICogQGRlZmF1bHQgMlxuICAgICAqL1xuICAgIGJsdXI6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5ibHVyWEZpbHRlci5ibHVyO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5wYWRkaW5nID0gTWF0aC5hYnModmFsdWUpICogMC41O1xuICAgICAgICAgICAgdGhpcy5ibHVyWEZpbHRlci5ibHVyID0gdGhpcy5ibHVyWUZpbHRlci5ibHVyID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgbnVtYmVyIG9mIHBhc3NlcyBmb3IgYmx1ci4gTW9yZSBwYXNzZXMgbWVhbnMgaGlnaGVyIHF1YWlsaXR5IGJsdXJpbmcuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5CbHVyWUZpbHRlciNcbiAgICAgKiBAZGVmYXVsdCAxXG4gICAgICovXG4gICAgcGFzc2VzOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuICB0aGlzLmJsdXJYRmlsdGVyLnBhc3NlcztcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuYmx1clhGaWx0ZXIucGFzc2VzID0gdGhpcy5ibHVyWUZpbHRlci5wYXNzZXMgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBzdHJlbmd0aCBvZiB0aGUgYmx1clggcHJvcGVydHlcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyT2YgUElYSS5maWx0ZXJzLkJsdXJGaWx0ZXIjXG4gICAgICogQGRlZmF1bHQgMlxuICAgICAqL1xuICAgIGJsdXJYOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuYmx1clhGaWx0ZXIuYmx1cjtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuYmx1clhGaWx0ZXIuYmx1ciA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIHN0cmVuZ3RoIG9mIHRoZSBibHVyWSBwcm9wZXJ0eVxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJPZiBQSVhJLmZpbHRlcnMuQmx1ckZpbHRlciNcbiAgICAgKiBAZGVmYXVsdCAyXG4gICAgICovXG4gICAgYmx1clk6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5ibHVyWUZpbHRlci5ibHVyO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5ibHVyWUZpbHRlci5ibHVyID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG59KTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vLi4vY29yZScpO1xuLy8gQHNlZSBodHRwczovL2dpdGh1Yi5jb20vc3Vic3RhY2svYnJmcy9pc3N1ZXMvMjVcblxuXG4vKipcbiAqIFRoZSBCbHVyWEZpbHRlciBhcHBsaWVzIGEgaG9yaXpvbnRhbCBHYXVzc2lhbiBibHVyIHRvIGFuIG9iamVjdC5cbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQWJzdHJhY3RGaWx0ZXJcbiAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnNcbiAqL1xuZnVuY3Rpb24gQmx1clhGaWx0ZXIoKVxue1xuICAgIGNvcmUuQWJzdHJhY3RGaWx0ZXIuY2FsbCh0aGlzLFxuICAgICAgICAvLyB2ZXJ0ZXggc2hhZGVyXG4gICAgICAgIFwiYXR0cmlidXRlIHZlYzIgYVZlcnRleFBvc2l0aW9uO1xcbmF0dHJpYnV0ZSB2ZWMyIGFUZXh0dXJlQ29vcmQ7XFxuYXR0cmlidXRlIHZlYzQgYUNvbG9yO1xcblxcbnVuaWZvcm0gZmxvYXQgc3RyZW5ndGg7XFxudW5pZm9ybSBtYXQzIHByb2plY3Rpb25NYXRyaXg7XFxuXFxudmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7XFxudmFyeWluZyB2ZWM0IHZDb2xvcjtcXG52YXJ5aW5nIHZlYzIgdkJsdXJUZXhDb29yZHNbNl07XFxuXFxudm9pZCBtYWluKHZvaWQpXFxue1xcbiAgICBnbF9Qb3NpdGlvbiA9IHZlYzQoKHByb2plY3Rpb25NYXRyaXggKiB2ZWMzKChhVmVydGV4UG9zaXRpb24pLCAxLjApKS54eSwgMC4wLCAxLjApO1xcbiAgICB2VGV4dHVyZUNvb3JkID0gYVRleHR1cmVDb29yZDtcXG5cXG4gICAgdkJsdXJUZXhDb29yZHNbIDBdID0gYVRleHR1cmVDb29yZCArIHZlYzIoLTAuMDEyICogc3RyZW5ndGgsIDAuMCk7XFxuICAgIHZCbHVyVGV4Q29vcmRzWyAxXSA9IGFUZXh0dXJlQ29vcmQgKyB2ZWMyKC0wLjAwOCAqIHN0cmVuZ3RoLCAwLjApO1xcbiAgICB2Qmx1clRleENvb3Jkc1sgMl0gPSBhVGV4dHVyZUNvb3JkICsgdmVjMigtMC4wMDQgKiBzdHJlbmd0aCwgMC4wKTtcXG4gICAgdkJsdXJUZXhDb29yZHNbIDNdID0gYVRleHR1cmVDb29yZCArIHZlYzIoIDAuMDA0ICogc3RyZW5ndGgsIDAuMCk7XFxuICAgIHZCbHVyVGV4Q29vcmRzWyA0XSA9IGFUZXh0dXJlQ29vcmQgKyB2ZWMyKCAwLjAwOCAqIHN0cmVuZ3RoLCAwLjApO1xcbiAgICB2Qmx1clRleENvb3Jkc1sgNV0gPSBhVGV4dHVyZUNvb3JkICsgdmVjMiggMC4wMTIgKiBzdHJlbmd0aCwgMC4wKTtcXG5cXG4gICAgdkNvbG9yID0gdmVjNChhQ29sb3IucmdiICogYUNvbG9yLmEsIGFDb2xvci5hKTtcXG59XFxuXCIsXG4gICAgICAgIC8vIGZyYWdtZW50IHNoYWRlclxuICAgICAgICBcInByZWNpc2lvbiBsb3dwIGZsb2F0O1xcblxcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xcbnZhcnlpbmcgdmVjMiB2Qmx1clRleENvb3Jkc1s2XTtcXG52YXJ5aW5nIHZlYzQgdkNvbG9yO1xcblxcbnVuaWZvcm0gc2FtcGxlcjJEIHVTYW1wbGVyO1xcblxcbnZvaWQgbWFpbih2b2lkKVxcbntcXG4gICAgZ2xfRnJhZ0NvbG9yID0gdmVjNCgwLjApO1xcblxcbiAgICBnbF9GcmFnQ29sb3IgKz0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2Qmx1clRleENvb3Jkc1sgMF0pKjAuMDA0NDMxODQ4NDExOTM4MzQxO1xcbiAgICBnbF9GcmFnQ29sb3IgKz0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2Qmx1clRleENvb3Jkc1sgMV0pKjAuMDUzOTkwOTY2NTEzMTg5ODU7XFxuICAgIGdsX0ZyYWdDb2xvciArPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZCbHVyVGV4Q29vcmRzWyAyXSkqMC4yNDE5NzA3MjQ1MTkxNDU0O1xcbiAgICBnbF9GcmFnQ29sb3IgKz0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2VGV4dHVyZUNvb3JkICAgICApKjAuMzk4OTQyMjgwNDAxNDMyNztcXG4gICAgZ2xfRnJhZ0NvbG9yICs9IHRleHR1cmUyRCh1U2FtcGxlciwgdkJsdXJUZXhDb29yZHNbIDNdKSowLjI0MTk3MDcyNDUxOTE0NTQ7XFxuICAgIGdsX0ZyYWdDb2xvciArPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZCbHVyVGV4Q29vcmRzWyA0XSkqMC4wNTM5OTA5NjY1MTMxODk4NTtcXG4gICAgZ2xfRnJhZ0NvbG9yICs9IHRleHR1cmUyRCh1U2FtcGxlciwgdkJsdXJUZXhDb29yZHNbIDVdKSowLjAwNDQzMTg0ODQxMTkzODM0MTtcXG59XFxuXCIsXG4gICAgICAgIC8vIHNldCB0aGUgdW5pZm9ybXNcbiAgICAgICAge1xuICAgICAgICAgICAgc3RyZW5ndGg6IHsgdHlwZTogJzFmJywgdmFsdWU6IDEgfVxuICAgICAgICB9XG4gICAgKTtcblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIG51bWJlciBvZiBwYXNzZXMgZm9yIGJsdXIuIE1vcmUgcGFzc2VzIG1lYW5zIGhpZ2hlciBxdWFpbGl0eSBibHVyaW5nLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDFcbiAgICAgKi9cbiAgICB0aGlzLnBhc3NlcyA9IDE7XG5cbiAgICB0aGlzLnN0cmVuZ3RoID0gNDtcbn1cblxuQmx1clhGaWx0ZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShjb3JlLkFic3RyYWN0RmlsdGVyLnByb3RvdHlwZSk7XG5CbHVyWEZpbHRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBCbHVyWEZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gQmx1clhGaWx0ZXI7XG5cbkJsdXJYRmlsdGVyLnByb3RvdHlwZS5hcHBseUZpbHRlciA9IGZ1bmN0aW9uIChyZW5kZXJlciwgaW5wdXQsIG91dHB1dCwgY2xlYXIpXG57XG4gICAgdmFyIHNoYWRlciA9IHRoaXMuZ2V0U2hhZGVyKHJlbmRlcmVyKTtcblxuICAgIHRoaXMudW5pZm9ybXMuc3RyZW5ndGgudmFsdWUgPSB0aGlzLnN0cmVuZ3RoIC8gNCAvIHRoaXMucGFzc2VzICogKGlucHV0LmZyYW1lLndpZHRoIC8gaW5wdXQuc2l6ZS53aWR0aCk7XG5cbiAgICBpZih0aGlzLnBhc3NlcyA9PT0gMSlcbiAgICB7XG4gICAgICAgIHJlbmRlcmVyLmZpbHRlck1hbmFnZXIuYXBwbHlGaWx0ZXIoc2hhZGVyLCBpbnB1dCwgb3V0cHV0LCBjbGVhcik7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHZhciByZW5kZXJUYXJnZXQgPSByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLmdldFJlbmRlclRhcmdldCh0cnVlKTtcbiAgICAgICAgdmFyIGZsaXAgPSBpbnB1dDtcbiAgICAgICAgdmFyIGZsb3AgPSByZW5kZXJUYXJnZXQ7XG5cbiAgICAgICAgZm9yKHZhciBpID0gMDsgaSA8IHRoaXMucGFzc2VzLTE7IGkrKylcbiAgICAgICAge1xuICAgICAgICAgICAgcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5hcHBseUZpbHRlcihzaGFkZXIsIGZsaXAsIGZsb3AsIHRydWUpO1xuXG4gICAgICAgICAgIHZhciB0ZW1wID0gZmxvcDtcbiAgICAgICAgICAgZmxvcCA9IGZsaXA7XG4gICAgICAgICAgIGZsaXAgPSB0ZW1wO1xuICAgICAgICB9XG5cbiAgICAgICAgcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5hcHBseUZpbHRlcihzaGFkZXIsIGZsaXAsIG91dHB1dCwgY2xlYXIpO1xuXG4gICAgICAgIHJlbmRlcmVyLmZpbHRlck1hbmFnZXIucmV0dXJuUmVuZGVyVGFyZ2V0KHJlbmRlclRhcmdldCk7XG4gICAgfVxufTtcblxuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhCbHVyWEZpbHRlci5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBzdHJlbmd0aCBvZiBib3RoIHRoZSBibHVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuQmx1clhGaWx0ZXIjXG4gICAgICogQGRlZmF1bHQgMlxuICAgICAqL1xuICAgIGJsdXI6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gIHRoaXMuc3RyZW5ndGg7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnBhZGRpbmcgPSAgTWF0aC5hYnModmFsdWUpICogMC41O1xuICAgICAgICAgICAgdGhpcy5zdHJlbmd0aCA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfVxufSk7XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uLy4uL2NvcmUnKTtcbi8vIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL3N1YnN0YWNrL2JyZnMvaXNzdWVzLzI1XG5cblxuLyoqXG4gKiBUaGUgQmx1cllGaWx0ZXIgYXBwbGllcyBhIGhvcml6b250YWwgR2F1c3NpYW4gYmx1ciB0byBhbiBvYmplY3QuXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLkFic3RyYWN0RmlsdGVyXG4gKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzXG4gKi9cbmZ1bmN0aW9uIEJsdXJZRmlsdGVyKClcbntcbiAgICBjb3JlLkFic3RyYWN0RmlsdGVyLmNhbGwodGhpcyxcbiAgICAgICAgLy8gdmVydGV4IHNoYWRlclxuICAgICAgICBcImF0dHJpYnV0ZSB2ZWMyIGFWZXJ0ZXhQb3NpdGlvbjtcXG5hdHRyaWJ1dGUgdmVjMiBhVGV4dHVyZUNvb3JkO1xcbmF0dHJpYnV0ZSB2ZWM0IGFDb2xvcjtcXG5cXG51bmlmb3JtIGZsb2F0IHN0cmVuZ3RoO1xcbnVuaWZvcm0gbWF0MyBwcm9qZWN0aW9uTWF0cml4O1xcblxcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xcbnZhcnlpbmcgdmVjNCB2Q29sb3I7XFxudmFyeWluZyB2ZWMyIHZCbHVyVGV4Q29vcmRzWzZdO1xcblxcbnZvaWQgbWFpbih2b2lkKVxcbntcXG4gICAgZ2xfUG9zaXRpb24gPSB2ZWM0KChwcm9qZWN0aW9uTWF0cml4ICogdmVjMygoYVZlcnRleFBvc2l0aW9uKSwgMS4wKSkueHksIDAuMCwgMS4wKTtcXG4gICAgdlRleHR1cmVDb29yZCA9IGFUZXh0dXJlQ29vcmQ7XFxuXFxuICAgIHZCbHVyVGV4Q29vcmRzWyAwXSA9IGFUZXh0dXJlQ29vcmQgKyB2ZWMyKDAuMCwgLTAuMDEyICogc3RyZW5ndGgpO1xcbiAgICB2Qmx1clRleENvb3Jkc1sgMV0gPSBhVGV4dHVyZUNvb3JkICsgdmVjMigwLjAsIC0wLjAwOCAqIHN0cmVuZ3RoKTtcXG4gICAgdkJsdXJUZXhDb29yZHNbIDJdID0gYVRleHR1cmVDb29yZCArIHZlYzIoMC4wLCAtMC4wMDQgKiBzdHJlbmd0aCk7XFxuICAgIHZCbHVyVGV4Q29vcmRzWyAzXSA9IGFUZXh0dXJlQ29vcmQgKyB2ZWMyKDAuMCwgIDAuMDA0ICogc3RyZW5ndGgpO1xcbiAgICB2Qmx1clRleENvb3Jkc1sgNF0gPSBhVGV4dHVyZUNvb3JkICsgdmVjMigwLjAsICAwLjAwOCAqIHN0cmVuZ3RoKTtcXG4gICAgdkJsdXJUZXhDb29yZHNbIDVdID0gYVRleHR1cmVDb29yZCArIHZlYzIoMC4wLCAgMC4wMTIgKiBzdHJlbmd0aCk7XFxuXFxuICAgdkNvbG9yID0gdmVjNChhQ29sb3IucmdiICogYUNvbG9yLmEsIGFDb2xvci5hKTtcXG59XFxuXCIsXG4gICAgICAgIC8vIGZyYWdtZW50IHNoYWRlclxuICAgICAgICBcInByZWNpc2lvbiBsb3dwIGZsb2F0O1xcblxcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xcbnZhcnlpbmcgdmVjMiB2Qmx1clRleENvb3Jkc1s2XTtcXG52YXJ5aW5nIHZlYzQgdkNvbG9yO1xcblxcbnVuaWZvcm0gc2FtcGxlcjJEIHVTYW1wbGVyO1xcblxcbnZvaWQgbWFpbih2b2lkKVxcbntcXG4gICAgZ2xfRnJhZ0NvbG9yID0gdmVjNCgwLjApO1xcblxcbiAgICBnbF9GcmFnQ29sb3IgKz0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2Qmx1clRleENvb3Jkc1sgMF0pKjAuMDA0NDMxODQ4NDExOTM4MzQxO1xcbiAgICBnbF9GcmFnQ29sb3IgKz0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2Qmx1clRleENvb3Jkc1sgMV0pKjAuMDUzOTkwOTY2NTEzMTg5ODU7XFxuICAgIGdsX0ZyYWdDb2xvciArPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZCbHVyVGV4Q29vcmRzWyAyXSkqMC4yNDE5NzA3MjQ1MTkxNDU0O1xcbiAgICBnbF9GcmFnQ29sb3IgKz0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2VGV4dHVyZUNvb3JkICAgICApKjAuMzk4OTQyMjgwNDAxNDMyNztcXG4gICAgZ2xfRnJhZ0NvbG9yICs9IHRleHR1cmUyRCh1U2FtcGxlciwgdkJsdXJUZXhDb29yZHNbIDNdKSowLjI0MTk3MDcyNDUxOTE0NTQ7XFxuICAgIGdsX0ZyYWdDb2xvciArPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZCbHVyVGV4Q29vcmRzWyA0XSkqMC4wNTM5OTA5NjY1MTMxODk4NTtcXG4gICAgZ2xfRnJhZ0NvbG9yICs9IHRleHR1cmUyRCh1U2FtcGxlciwgdkJsdXJUZXhDb29yZHNbIDVdKSowLjAwNDQzMTg0ODQxMTkzODM0MTtcXG59XFxuXCIsXG4gICAgICAgIC8vIHNldCB0aGUgdW5pZm9ybXNcbiAgICAgICAge1xuICAgICAgICAgICAgc3RyZW5ndGg6IHsgdHlwZTogJzFmJywgdmFsdWU6IDEgfVxuICAgICAgICB9XG4gICAgKTtcblxuICAgIHRoaXMucGFzc2VzID0gMTtcbiAgICB0aGlzLnN0cmVuZ3RoID0gNDtcbn1cblxuQmx1cllGaWx0ZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShjb3JlLkFic3RyYWN0RmlsdGVyLnByb3RvdHlwZSk7XG5CbHVyWUZpbHRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBCbHVyWUZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gQmx1cllGaWx0ZXI7XG5cbkJsdXJZRmlsdGVyLnByb3RvdHlwZS5hcHBseUZpbHRlciA9IGZ1bmN0aW9uIChyZW5kZXJlciwgaW5wdXQsIG91dHB1dCwgY2xlYXIpXG57XG4gICAgdmFyIHNoYWRlciA9IHRoaXMuZ2V0U2hhZGVyKHJlbmRlcmVyKTtcblxuICAgIHRoaXMudW5pZm9ybXMuc3RyZW5ndGgudmFsdWUgPSBNYXRoLmFicyh0aGlzLnN0cmVuZ3RoKSAvIDQgLyB0aGlzLnBhc3NlcyAqIChpbnB1dC5mcmFtZS5oZWlnaHQgLyBpbnB1dC5zaXplLmhlaWdodCk7XG5cbiAgICBpZih0aGlzLnBhc3NlcyA9PT0gMSlcbiAgICB7XG4gICAgICAgIHJlbmRlcmVyLmZpbHRlck1hbmFnZXIuYXBwbHlGaWx0ZXIoc2hhZGVyLCBpbnB1dCwgb3V0cHV0LCBjbGVhcik7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHZhciByZW5kZXJUYXJnZXQgPSByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLmdldFJlbmRlclRhcmdldCh0cnVlKTtcbiAgICAgICAgdmFyIGZsaXAgPSBpbnB1dDtcbiAgICAgICAgdmFyIGZsb3AgPSByZW5kZXJUYXJnZXQ7XG5cbiAgICAgICAgZm9yKHZhciBpID0gMDsgaSA8IHRoaXMucGFzc2VzLTE7IGkrKylcbiAgICAgICAge1xuICAgICAgICAgICAgcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5hcHBseUZpbHRlcihzaGFkZXIsIGZsaXAsIGZsb3AsIHRydWUpO1xuXG4gICAgICAgICAgIHZhciB0ZW1wID0gZmxvcDtcbiAgICAgICAgICAgZmxvcCA9IGZsaXA7XG4gICAgICAgICAgIGZsaXAgPSB0ZW1wO1xuICAgICAgICB9XG5cbiAgICAgICAgcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5hcHBseUZpbHRlcihzaGFkZXIsIGZsaXAsIG91dHB1dCwgY2xlYXIpO1xuXG4gICAgICAgIHJlbmRlcmVyLmZpbHRlck1hbmFnZXIucmV0dXJuUmVuZGVyVGFyZ2V0KHJlbmRlclRhcmdldCk7XG4gICAgfVxufTtcblxuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhCbHVyWUZpbHRlci5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBzdHJlbmd0aCBvZiBib3RoIHRoZSBibHVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuQmx1cllGaWx0ZXIjXG4gICAgICogQGRlZmF1bHQgMlxuICAgICAqL1xuICAgIGJsdXI6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gIHRoaXMuc3RyZW5ndGg7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnBhZGRpbmcgPSBNYXRoLmFicyh2YWx1ZSkgKiAwLjU7XG4gICAgICAgICAgICB0aGlzLnN0cmVuZ3RoID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG59KTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vLi4vY29yZScpO1xuLy8gQHNlZSBodHRwczovL2dpdGh1Yi5jb20vc3Vic3RhY2svYnJmcy9pc3N1ZXMvMjVcblxuXG4vKipcbiAqIEEgU21hcnQgQmx1ciBGaWx0ZXIuXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLkFic3RyYWN0RmlsdGVyXG4gKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzXG4gKi9cbmZ1bmN0aW9uIFNtYXJ0Qmx1ckZpbHRlcigpXG57XG4gICAgY29yZS5BYnN0cmFjdEZpbHRlci5jYWxsKHRoaXMsXG4gICAgICAgIC8vIHZlcnRleCBzaGFkZXJcbiAgICAgICAgbnVsbCxcbiAgICAgICAgLy8gZnJhZ21lbnQgc2hhZGVyXG4gICAgICAgIFwicHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XFxuXFxudmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7XFxuXFxudW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXI7XFxudW5pZm9ybSB2ZWMyIGRlbHRhO1xcblxcbmZsb2F0IHJhbmRvbSh2ZWMzIHNjYWxlLCBmbG9hdCBzZWVkKVxcbntcXG4gICAgcmV0dXJuIGZyYWN0KHNpbihkb3QoZ2xfRnJhZ0Nvb3JkLnh5eiArIHNlZWQsIHNjYWxlKSkgKiA0Mzc1OC41NDUzICsgc2VlZCk7XFxufVxcblxcbnZvaWQgbWFpbih2b2lkKVxcbntcXG4gICAgdmVjNCBjb2xvciA9IHZlYzQoMC4wKTtcXG4gICAgZmxvYXQgdG90YWwgPSAwLjA7XFxuXFxuICAgIGZsb2F0IG9mZnNldCA9IHJhbmRvbSh2ZWMzKDEyLjk4OTgsIDc4LjIzMywgMTUxLjcxODIpLCAwLjApO1xcblxcbiAgICBmb3IgKGZsb2F0IHQgPSAtMzAuMDsgdCA8PSAzMC4wOyB0KyspXFxuICAgIHtcXG4gICAgICAgIGZsb2F0IHBlcmNlbnQgPSAodCArIG9mZnNldCAtIDAuNSkgLyAzMC4wO1xcbiAgICAgICAgZmxvYXQgd2VpZ2h0ID0gMS4wIC0gYWJzKHBlcmNlbnQpO1xcbiAgICAgICAgdmVjNCBzYW1wbGUgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZUZXh0dXJlQ29vcmQgKyBkZWx0YSAqIHBlcmNlbnQpO1xcbiAgICAgICAgc2FtcGxlLnJnYiAqPSBzYW1wbGUuYTtcXG4gICAgICAgIGNvbG9yICs9IHNhbXBsZSAqIHdlaWdodDtcXG4gICAgICAgIHRvdGFsICs9IHdlaWdodDtcXG4gICAgfVxcblxcbiAgICBnbF9GcmFnQ29sb3IgPSBjb2xvciAvIHRvdGFsO1xcbiAgICBnbF9GcmFnQ29sb3IucmdiIC89IGdsX0ZyYWdDb2xvci5hICsgMC4wMDAwMTtcXG59XFxuXCIsXG4gICAgICAgIC8vIHVuaWZvcm1zXG4gICAgICAgIHtcbiAgICAgICAgICBkZWx0YTogeyB0eXBlOiAndjInLCB2YWx1ZTogeyB4OiAwLjEsIHk6IDAuMCB9IH1cbiAgICAgICAgfVxuICAgICk7XG59XG5cblNtYXJ0Qmx1ckZpbHRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuQWJzdHJhY3RGaWx0ZXIucHJvdG90eXBlKTtcblNtYXJ0Qmx1ckZpbHRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBTbWFydEJsdXJGaWx0ZXI7XG5tb2R1bGUuZXhwb3J0cyA9IFNtYXJ0Qmx1ckZpbHRlcjtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vLi4vY29yZScpO1xuLy8gQHNlZSBodHRwczovL2dpdGh1Yi5jb20vc3Vic3RhY2svYnJmcy9pc3N1ZXMvMjVcblxuXG4vKipcbiAqIFRoZSBDb2xvck1hdHJpeEZpbHRlciBjbGFzcyBsZXRzIHlvdSBhcHBseSBhIDV4NCBtYXRyaXggdHJhbnNmb3JtYXRpb24gb24gdGhlIFJHQkFcbiAqIGNvbG9yIGFuZCBhbHBoYSB2YWx1ZXMgb2YgZXZlcnkgcGl4ZWwgb24geW91ciBkaXNwbGF5T2JqZWN0IHRvIHByb2R1Y2UgYSByZXN1bHRcbiAqIHdpdGggYSBuZXcgc2V0IG9mIFJHQkEgY29sb3IgYW5kIGFscGhhIHZhbHVlcy4gSXQncyBwcmV0dHkgcG93ZXJmdWwhXG4gKlxuICogYGBganNcbiAqICB2YXIgY29sb3JNYXRyaXggPSBuZXcgUElYSS5Db2xvck1hdHJpeEZpbHRlcigpO1xuICogIGNvbnRhaW5lci5maWx0ZXJzID0gW2NvbG9yTWF0cml4XTtcbiAqICBjb2xvck1hdHJpeC5jb250cmFzdCgyKTtcbiAqIGBgYFxuICogQGF1dGhvciBDbMOpbWVudCBDaGVuZWJhdWx0IDxjbGVtZW50QGdvb2Rib3lkaWdpdGFsLmNvbT5cbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5BYnN0cmFjdEZpbHRlclxuICogQG1lbWJlcm9mIFBJWEkuZmlsdGVyc1xuICovXG5mdW5jdGlvbiBDb2xvck1hdHJpeEZpbHRlcigpXG57XG4gICAgY29yZS5BYnN0cmFjdEZpbHRlci5jYWxsKHRoaXMsXG4gICAgICAgIC8vIHZlcnRleCBzaGFkZXJcbiAgICAgICAgbnVsbCxcbiAgICAgICAgLy8gZnJhZ21lbnQgc2hhZGVyXG4gICAgICAgIFwicHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XFxuXFxudmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7XFxudW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXI7XFxudW5pZm9ybSBmbG9hdCBtWzI1XTtcXG5cXG52b2lkIG1haW4odm9pZClcXG57XFxuXFxuICAgIHZlYzQgYyA9IHRleHR1cmUyRCh1U2FtcGxlciwgdlRleHR1cmVDb29yZCk7XFxuXFxuICAgIGdsX0ZyYWdDb2xvci5yID0gKG1bMF0gKiBjLnIpO1xcbiAgICAgICAgZ2xfRnJhZ0NvbG9yLnIgKz0gKG1bMV0gKiBjLmcpO1xcbiAgICAgICAgZ2xfRnJhZ0NvbG9yLnIgKz0gKG1bMl0gKiBjLmIpO1xcbiAgICAgICAgZ2xfRnJhZ0NvbG9yLnIgKz0gKG1bM10gKiBjLmEpO1xcbiAgICAgICAgZ2xfRnJhZ0NvbG9yLnIgKz0gbVs0XTtcXG5cXG4gICAgZ2xfRnJhZ0NvbG9yLmcgPSAobVs1XSAqIGMucik7XFxuICAgICAgICBnbF9GcmFnQ29sb3IuZyArPSAobVs2XSAqIGMuZyk7XFxuICAgICAgICBnbF9GcmFnQ29sb3IuZyArPSAobVs3XSAqIGMuYik7XFxuICAgICAgICBnbF9GcmFnQ29sb3IuZyArPSAobVs4XSAqIGMuYSk7XFxuICAgICAgICBnbF9GcmFnQ29sb3IuZyArPSBtWzldO1xcblxcbiAgICAgZ2xfRnJhZ0NvbG9yLmIgPSAobVsxMF0gKiBjLnIpO1xcbiAgICAgICAgZ2xfRnJhZ0NvbG9yLmIgKz0gKG1bMTFdICogYy5nKTtcXG4gICAgICAgIGdsX0ZyYWdDb2xvci5iICs9IChtWzEyXSAqIGMuYik7XFxuICAgICAgICBnbF9GcmFnQ29sb3IuYiArPSAobVsxM10gKiBjLmEpO1xcbiAgICAgICAgZ2xfRnJhZ0NvbG9yLmIgKz0gbVsxNF07XFxuXFxuICAgICBnbF9GcmFnQ29sb3IuYSA9IChtWzE1XSAqIGMucik7XFxuICAgICAgICBnbF9GcmFnQ29sb3IuYSArPSAobVsxNl0gKiBjLmcpO1xcbiAgICAgICAgZ2xfRnJhZ0NvbG9yLmEgKz0gKG1bMTddICogYy5iKTtcXG4gICAgICAgIGdsX0ZyYWdDb2xvci5hICs9IChtWzE4XSAqIGMuYSk7XFxuICAgICAgICBnbF9GcmFnQ29sb3IuYSArPSBtWzE5XTtcXG5cXG59XFxuXCIsXG4gICAgICAgIC8vIGN1c3RvbSB1bmlmb3Jtc1xuICAgICAgICB7XG4gICAgICAgICAgICBtOiB7XG4gICAgICAgICAgICAgICAgdHlwZTogJzFmdicsIHZhbHVlOiBbXG4gICAgICAgICAgICAgICAgICAgIDEsIDAsIDAsIDAsIDAsXG4gICAgICAgICAgICAgICAgICAgIDAsIDEsIDAsIDAsIDAsXG4gICAgICAgICAgICAgICAgICAgIDAsIDAsIDEsIDAsIDAsXG4gICAgICAgICAgICAgICAgICAgIDAsIDAsIDAsIDEsIDBcbiAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICApO1xufVxuXG5Db2xvck1hdHJpeEZpbHRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuQWJzdHJhY3RGaWx0ZXIucHJvdG90eXBlKTtcbkNvbG9yTWF0cml4RmlsdGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IENvbG9yTWF0cml4RmlsdGVyO1xubW9kdWxlLmV4cG9ydHMgPSBDb2xvck1hdHJpeEZpbHRlcjtcblxuXG4vKipcbiAqIFRyYW5zZm9ybXMgY3VycmVudCBtYXRyaXggYW5kIHNldCB0aGUgbmV3IG9uZVxuICpcbiAqIEBwYXJhbSBtYXRyaXgge251bWJlcltdfSAobWF0IDV4NClcbiAqIEBwYXJhbSBtdWx0aXBseSB7Ym9vbGVhbn0gaWYgdHJ1ZSwgY3VycmVudCBtYXRyaXggYW5kIG1hdHJpeCBhcmUgbXVsdGlwbGllZC4gSWYgZmFsc2UsIGp1c3Qgc2V0IHRoZSBjdXJyZW50IG1hdHJpeCB3aXRoIEBwYXJhbSBtYXRyaXhcbiAqL1xuQ29sb3JNYXRyaXhGaWx0ZXIucHJvdG90eXBlLl9sb2FkTWF0cml4ID0gZnVuY3Rpb24gKG1hdHJpeCwgbXVsdGlwbHkpXG57XG4gICAgbXVsdGlwbHkgPSAhIW11bHRpcGx5O1xuXG4gICAgdmFyIG5ld01hdHJpeCA9IG1hdHJpeDtcblxuICAgIGlmIChtdWx0aXBseSkge1xuICAgICAgICB0aGlzLl9tdWx0aXBseShuZXdNYXRyaXgsIHRoaXMudW5pZm9ybXMubS52YWx1ZSwgbWF0cml4KTtcbiAgICAgICAgbmV3TWF0cml4ID0gdGhpcy5fY29sb3JNYXRyaXgobmV3TWF0cml4KTtcbiAgICB9XG5cbiAgICAvLyBzZXQgdGhlIG5ldyBtYXRyaXhcbiAgICB0aGlzLnVuaWZvcm1zLm0udmFsdWUgPSBuZXdNYXRyaXg7XG59O1xuXG4vKipcbiAqIE11bHRpcGxpZXMgdHdvIG1hdDUnc1xuICpcbiAqIEBwYXJhbSBvdXQge251bWJlcltdfSAobWF0IDV4NCkgdGhlIHJlY2VpdmluZyBtYXRyaXhcbiAqIEBwYXJhbSBhIHtudW1iZXJbXX0gKG1hdCA1eDQpIHRoZSBmaXJzdCBvcGVyYW5kXG4gKiBAcGFyYW0gYiB7bnVtYmVyW119IChtYXQgNXg0KSB0aGUgc2Vjb25kIG9wZXJhbmRcbiAqIEByZXR1cm5zIG91dCB7bnVtYmVyW119IChtYXQgNXg0KVxuICovXG5Db2xvck1hdHJpeEZpbHRlci5wcm90b3R5cGUuX211bHRpcGx5ID0gZnVuY3Rpb24gKG91dCwgYSwgYilcbntcblxuICAgIC8vIFJlZCBDaGFubmVsXG4gICAgb3V0WzBdID0gKGFbMF0gKiBiWzBdKSArIChhWzFdICogYls1XSkgKyAoYVsyXSAqIGJbMTBdKSArIChhWzNdICogYlsxNV0pO1xuICAgIG91dFsxXSA9IChhWzBdICogYlsxXSkgKyAoYVsxXSAqIGJbNl0pICsgKGFbMl0gKiBiWzExXSkgKyAoYVszXSAqIGJbMTZdKTtcbiAgICBvdXRbMl0gPSAoYVswXSAqIGJbMl0pICsgKGFbMV0gKiBiWzddKSArIChhWzJdICogYlsxMl0pICsgKGFbM10gKiBiWzE3XSk7XG4gICAgb3V0WzNdID0gKGFbMF0gKiBiWzNdKSArIChhWzFdICogYls4XSkgKyAoYVsyXSAqIGJbMTNdKSArIChhWzNdICogYlsxOF0pO1xuICAgIG91dFs0XSA9IChhWzBdICogYls0XSkgKyAoYVsxXSAqIGJbOV0pICsgKGFbMl0gKiBiWzE0XSkgKyAoYVszXSAqIGJbMTldKTtcblxuICAgIC8vIEdyZWVuIENoYW5uZWxcbiAgICBvdXRbNV0gPSAoYVs1XSAqIGJbMF0pICsgKGFbNl0gKiBiWzVdKSArIChhWzddICogYlsxMF0pICsgKGFbOF0gKiBiWzE1XSk7XG4gICAgb3V0WzZdID0gKGFbNV0gKiBiWzFdKSArIChhWzZdICogYls2XSkgKyAoYVs3XSAqIGJbMTFdKSArIChhWzhdICogYlsxNl0pO1xuICAgIG91dFs3XSA9IChhWzVdICogYlsyXSkgKyAoYVs2XSAqIGJbN10pICsgKGFbN10gKiBiWzEyXSkgKyAoYVs4XSAqIGJbMTddKTtcbiAgICBvdXRbOF0gPSAoYVs1XSAqIGJbM10pICsgKGFbNl0gKiBiWzhdKSArIChhWzddICogYlsxM10pICsgKGFbOF0gKiBiWzE4XSk7XG4gICAgb3V0WzldID0gKGFbNV0gKiBiWzRdKSArIChhWzZdICogYls5XSkgKyAoYVs3XSAqIGJbMTRdKSArIChhWzhdICogYlsxOV0pO1xuXG4gICAgLy8gQmx1ZSBDaGFubmVsXG4gICAgb3V0WzEwXSA9IChhWzEwXSAqIGJbMF0pICsgKGFbMTFdICogYls1XSkgKyAoYVsxMl0gKiBiWzEwXSkgKyAoYVsxM10gKiBiWzE1XSk7XG4gICAgb3V0WzExXSA9IChhWzEwXSAqIGJbMV0pICsgKGFbMTFdICogYls2XSkgKyAoYVsxMl0gKiBiWzExXSkgKyAoYVsxM10gKiBiWzE2XSk7XG4gICAgb3V0WzEyXSA9IChhWzEwXSAqIGJbMl0pICsgKGFbMTFdICogYls3XSkgKyAoYVsxMl0gKiBiWzEyXSkgKyAoYVsxM10gKiBiWzE3XSk7XG4gICAgb3V0WzEzXSA9IChhWzEwXSAqIGJbM10pICsgKGFbMTFdICogYls4XSkgKyAoYVsxMl0gKiBiWzEzXSkgKyAoYVsxM10gKiBiWzE4XSk7XG4gICAgb3V0WzE0XSA9IChhWzEwXSAqIGJbNF0pICsgKGFbMTFdICogYls5XSkgKyAoYVsxMl0gKiBiWzE0XSkgKyAoYVsxM10gKiBiWzE5XSk7XG5cbiAgICAvLyBBbHBoYSBDaGFubmVsXG4gICAgb3V0WzE1XSA9IChhWzE1XSAqIGJbMF0pICsgKGFbMTZdICogYls1XSkgKyAoYVsxN10gKiBiWzEwXSkgKyAoYVsxOF0gKiBiWzE1XSk7XG4gICAgb3V0WzE2XSA9IChhWzE1XSAqIGJbMV0pICsgKGFbMTZdICogYls2XSkgKyAoYVsxN10gKiBiWzExXSkgKyAoYVsxOF0gKiBiWzE2XSk7XG4gICAgb3V0WzE3XSA9IChhWzE1XSAqIGJbMl0pICsgKGFbMTZdICogYls3XSkgKyAoYVsxN10gKiBiWzEyXSkgKyAoYVsxOF0gKiBiWzE3XSk7XG4gICAgb3V0WzE4XSA9IChhWzE1XSAqIGJbM10pICsgKGFbMTZdICogYls4XSkgKyAoYVsxN10gKiBiWzEzXSkgKyAoYVsxOF0gKiBiWzE4XSk7XG4gICAgb3V0WzE5XSA9IChhWzE1XSAqIGJbNF0pICsgKGFbMTZdICogYls5XSkgKyAoYVsxN10gKiBiWzE0XSkgKyAoYVsxOF0gKiBiWzE5XSk7XG5cbiAgICByZXR1cm4gb3V0O1xufTtcblxuLyoqXG4gKiBDcmVhdGUgYSBGbG9hdDMyIEFycmF5IGFuZCBub3JtYWxpemUgdGhlIG9mZnNldCBjb21wb25lbnQgdG8gMC0xXG4gKlxuICogQHBhcmFtIG1hdHJpeCB7bnVtYmVyW119IChtYXQgNXg0KVxuICogQHJldHVybiBtIHtudW1iZXJbXX0gKG1hdCA1eDQpIHdpdGggYWxsIHZhbHVlcyBiZXR3ZWVuIDAtMVxuICovXG5Db2xvck1hdHJpeEZpbHRlci5wcm90b3R5cGUuX2NvbG9yTWF0cml4ID0gZnVuY3Rpb24gKG1hdHJpeClcbntcbiAgICAvLyBDcmVhdGUgYSBGbG9hdDMyIEFycmF5IGFuZCBub3JtYWxpemUgdGhlIG9mZnNldCBjb21wb25lbnQgdG8gMC0xXG4gICAgdmFyIG0gPSBuZXcgRmxvYXQzMkFycmF5KG1hdHJpeCk7XG4gICAgbVs0XSAvPSAyNTU7XG4gICAgbVs5XSAvPSAyNTU7XG4gICAgbVsxNF0gLz0gMjU1O1xuICAgIG1bMTldIC89IDI1NTtcblxuICAgIHJldHVybiBtO1xufTtcblxuLyoqXG4gKiBBZGp1c3RzIGJyaWdodG5lc3NcbiAqXG4gKiBAcGFyYW0gYiB7bnVtYmVyfSB2YWx1ZSBvZiB0aGUgYnJpZ3RobmVzcyAoMCBpcyBibGFjaylcbiAqIEBwYXJhbSBtdWx0aXBseSB7Ym9vbGVhbn0gcmVmZXIgdG8gLl9sb2FkTWF0cml4KCkgbWV0aG9kXG4gKi9cbkNvbG9yTWF0cml4RmlsdGVyLnByb3RvdHlwZS5icmlnaHRuZXNzID0gZnVuY3Rpb24gKGIsIG11bHRpcGx5KVxue1xuICAgIHZhciBtYXRyaXggPSBbXG4gICAgICAgIGIsIDAsIDAsIDAsIDAsXG4gICAgICAgIDAsIGIsIDAsIDAsIDAsXG4gICAgICAgIDAsIDAsIGIsIDAsIDAsXG4gICAgICAgIDAsIDAsIDAsIDEsIDBcbiAgICBdO1xuXG4gICAgdGhpcy5fbG9hZE1hdHJpeChtYXRyaXgsIG11bHRpcGx5KTtcbn07XG5cbi8qKlxuICogU2V0IHRoZSBtYXRyaWNlcyBpbiBncmV5IHNjYWxlc1xuICpcbiAqIEBwYXJhbSBzY2FsZSB7bnVtYmVyfSB2YWx1ZSBvZiB0aGUgZ3JleSAoMCBpcyBibGFjaylcbiAqIEBwYXJhbSBtdWx0aXBseSB7Ym9vbGVhbn0gcmVmZXIgdG8gLl9sb2FkTWF0cml4KCkgbWV0aG9kXG4gKi9cbkNvbG9yTWF0cml4RmlsdGVyLnByb3RvdHlwZS5ncmV5c2NhbGUgPSBmdW5jdGlvbiAoc2NhbGUsIG11bHRpcGx5KVxue1xuICAgIHZhciBtYXRyaXggPSBbXG4gICAgICAgIHNjYWxlLCBzY2FsZSwgc2NhbGUsIDAsIDAsXG4gICAgICAgIHNjYWxlLCBzY2FsZSwgc2NhbGUsIDAsIDAsXG4gICAgICAgIHNjYWxlLCBzY2FsZSwgc2NhbGUsIDAsIDAsXG4gICAgICAgIDAsIDAsIDAsIDEsIDBcbiAgICBdO1xuXG4gICAgdGhpcy5fbG9hZE1hdHJpeChtYXRyaXgsIG11bHRpcGx5KTtcbn07XG4vL0FtZXJpY2FuaXplZCBhbGlhc1xuQ29sb3JNYXRyaXhGaWx0ZXIucHJvdG90eXBlLmdyYXlzY2FsZSA9IENvbG9yTWF0cml4RmlsdGVyLnByb3RvdHlwZS5ncmV5c2NhbGU7XG5cbi8qKlxuICogU2V0IHRoZSBibGFjayBhbmQgd2hpdGUgbWF0cmljZVxuICogTXVsdGlwbHkgdGhlIGN1cnJlbnQgbWF0cml4XG4gKlxuICogQHBhcmFtIG11bHRpcGx5IHtib29sZWFufSByZWZlciB0byAuX2xvYWRNYXRyaXgoKSBtZXRob2RcbiAqL1xuQ29sb3JNYXRyaXhGaWx0ZXIucHJvdG90eXBlLmJsYWNrQW5kV2hpdGUgPSBmdW5jdGlvbiAobXVsdGlwbHkpXG57XG4gICAgdmFyIG1hdHJpeCA9IFtcbiAgICAgICAgMC4zLCAwLjYsIDAuMSwgMCwgMCxcbiAgICAgICAgMC4zLCAwLjYsIDAuMSwgMCwgMCxcbiAgICAgICAgMC4zLCAwLjYsIDAuMSwgMCwgMCxcbiAgICAgICAgMCwgMCwgMCwgMSwgMFxuICAgIF07XG5cbiAgICB0aGlzLl9sb2FkTWF0cml4KG1hdHJpeCwgbXVsdGlwbHkpO1xufTtcblxuLyoqXG4gKiBTZXQgdGhlIGh1ZSBwcm9wZXJ0eSBvZiB0aGUgY29sb3JcbiAqXG4gKiBAcGFyYW0gcm90YXRpb24ge251bWJlcn0gaW4gZGVncmVlc1xuICogQHBhcmFtIG11bHRpcGx5IHtib29sZWFufSByZWZlciB0byAuX2xvYWRNYXRyaXgoKSBtZXRob2RcbiAqL1xuQ29sb3JNYXRyaXhGaWx0ZXIucHJvdG90eXBlLmh1ZSA9IGZ1bmN0aW9uIChyb3RhdGlvbiwgbXVsdGlwbHkpXG57XG4gICAgcm90YXRpb24gPSAocm90YXRpb24gfHwgMCkgLyAxODAgKiBNYXRoLlBJO1xuICAgIHZhciBjb3MgPSBNYXRoLmNvcyhyb3RhdGlvbiksXG4gICAgICAgIHNpbiA9IE1hdGguc2luKHJvdGF0aW9uKTtcblxuICAgIC8vIGx1bWluYW5jZVJlZCwgbHVtaW5hbmNlR3JlZW4sIGx1bWluYW5jZUJsdWVcbiAgICB2YXIgbHVtUiA9IDAuMjEzLCAvLyBvciAwLjMwODZcbiAgICAgICAgbHVtRyA9IDAuNzE1LCAvLyBvciAwLjYwOTRcbiAgICAgICAgbHVtQiA9IDAuMDcyOyAvLyBvciAwLjA4MjBcblxuICAgIHZhciBtYXRyaXggPSBbXG4gICAgICAgIGx1bVIgKyBjb3MgKiAoMSAtIGx1bVIpICsgc2luICogKC1sdW1SKSwgbHVtRyArIGNvcyAqICgtbHVtRykgKyBzaW4gKiAoLWx1bUcpLCBsdW1CICsgY29zICogKC1sdW1CKSArIHNpbiAqICgxIC0gbHVtQiksIDAsIDAsXG4gICAgICAgIGx1bVIgKyBjb3MgKiAoLWx1bVIpICsgc2luICogKDAuMTQzKSwgbHVtRyArIGNvcyAqICgxIC0gbHVtRykgKyBzaW4gKiAoMC4xNDApLCBsdW1CICsgY29zICogKC1sdW1CKSArIHNpbiAqICgtMC4yODMpLCAwLCAwLFxuICAgICAgICBsdW1SICsgY29zICogKC1sdW1SKSArIHNpbiAqICgtKDEgLSBsdW1SKSksIGx1bUcgKyBjb3MgKiAoLWx1bUcpICsgc2luICogKGx1bUcpLCBsdW1CICsgY29zICogKDEgLSBsdW1CKSArIHNpbiAqIChsdW1CKSwgMCwgMCxcbiAgICAgICAgMCwgMCwgMCwgMSwgMFxuICAgIF07XG5cbiAgICB0aGlzLl9sb2FkTWF0cml4KG1hdHJpeCwgbXVsdGlwbHkpO1xufTtcblxuXG4vKipcbiAqIFNldCB0aGUgY29udHJhc3QgbWF0cml4LCBpbmNyZWFzZSB0aGUgc2VwYXJhdGlvbiBiZXR3ZWVuIGRhcmsgYW5kIGJyaWdodFxuICogSW5jcmVhc2UgY29udHJhc3QgOiBzaGFkb3dzIGRhcmtlciBhbmQgaGlnaGxpZ2h0cyBicmlnaHRlclxuICogRGVjcmVhc2UgY29udHJhc3QgOiBicmluZyB0aGUgc2hhZG93cyB1cCBhbmQgdGhlIGhpZ2hsaWdodHMgZG93blxuICpcbiAqIEBwYXJhbSBhbW91bnQge251bWJlcn0gdmFsdWUgb2YgdGhlIGNvbnRyYXN0XG4gKiBAcGFyYW0gbXVsdGlwbHkge2Jvb2xlYW59IHJlZmVyIHRvIC5fbG9hZE1hdHJpeCgpIG1ldGhvZFxuICovXG5Db2xvck1hdHJpeEZpbHRlci5wcm90b3R5cGUuY29udHJhc3QgPSBmdW5jdGlvbiAoYW1vdW50LCBtdWx0aXBseSlcbntcbiAgICB2YXIgdiA9IChhbW91bnQgfHwgMCkgKyAxO1xuICAgIHZhciBvID0gLTEyOCAqICh2IC0gMSk7XG5cbiAgICB2YXIgbWF0cml4ID0gW1xuICAgICAgICB2LCAwLCAwLCAwLCBvLFxuICAgICAgICAwLCB2LCAwLCAwLCBvLFxuICAgICAgICAwLCAwLCB2LCAwLCBvLFxuICAgICAgICAwLCAwLCAwLCAxLCAwXG4gICAgXTtcblxuICAgIHRoaXMuX2xvYWRNYXRyaXgobWF0cml4LCBtdWx0aXBseSk7XG59O1xuXG4vKipcbiAqIFNldCB0aGUgc2F0dXJhdGlvbiBtYXRyaXgsIGluY3JlYXNlIHRoZSBzZXBhcmF0aW9uIGJldHdlZW4gY29sb3JzXG4gKiBJbmNyZWFzZSBzYXR1cmF0aW9uIDogaW5jcmVhc2UgY29udHJhc3QsIGJyaWdodG5lc3MsIGFuZCBzaGFycG5lc3NcbiAqXG4gKiBAcGFyYW0gYW1vdW50IHtudW1iZXJ9XG4gKiBAcGFyYW0gbXVsdGlwbHkge2Jvb2xlYW59IHJlZmVyIHRvIC5fbG9hZE1hdHJpeCgpIG1ldGhvZFxuICovXG5Db2xvck1hdHJpeEZpbHRlci5wcm90b3R5cGUuc2F0dXJhdGUgPSBmdW5jdGlvbiAoYW1vdW50LCBtdWx0aXBseSlcbntcbiAgICB2YXIgeCA9IChhbW91bnQgfHwgMCkgKiAyIC8gMyArIDE7XG4gICAgdmFyIHkgPSAoKHggLSAxKSAqIC0wLjUpO1xuXG4gICAgdmFyIG1hdHJpeCA9IFtcbiAgICAgICAgeCwgeSwgeSwgMCwgMCxcbiAgICAgICAgeSwgeCwgeSwgMCwgMCxcbiAgICAgICAgeSwgeSwgeCwgMCwgMCxcbiAgICAgICAgMCwgMCwgMCwgMSwgMFxuICAgIF07XG5cbiAgICB0aGlzLl9sb2FkTWF0cml4KG1hdHJpeCwgbXVsdGlwbHkpO1xufTtcblxuLyoqXG4gKiBEZXNhdHVyYXRlIGltYWdlIChyZW1vdmUgY29sb3IpXG4gKlxuICogQ2FsbCB0aGUgc2F0dXJhdGUgZnVuY3Rpb25cbiAqXG4gKiBAcGFyYW0gbXVsdGlwbHkge2Jvb2xlYW59IHJlZmVyIHRvIC5fbG9hZE1hdHJpeCgpIG1ldGhvZFxuICovXG5Db2xvck1hdHJpeEZpbHRlci5wcm90b3R5cGUuZGVzYXR1cmF0ZSA9IGZ1bmN0aW9uIChtdWx0aXBseSkgLy8ganNoaW50IHVudXNlZDpmYWxzZVxue1xuICAgIHRoaXMuc2F0dXJhdGUoLTEpO1xufTtcblxuLyoqXG4gKiBOZWdhdGl2ZSBpbWFnZSAoaW52ZXJzZSBvZiBjbGFzc2ljIHJnYiBtYXRyaXgpXG4gKlxuICogQHBhcmFtIG11bHRpcGx5IHtib29sZWFufSByZWZlciB0byAuX2xvYWRNYXRyaXgoKSBtZXRob2RcbiAqL1xuQ29sb3JNYXRyaXhGaWx0ZXIucHJvdG90eXBlLm5lZ2F0aXZlID0gZnVuY3Rpb24gKG11bHRpcGx5KVxue1xuICAgIHZhciBtYXRyaXggPSBbXG4gICAgICAgIDAsIDEsIDEsIDAsIDAsXG4gICAgICAgIDEsIDAsIDEsIDAsIDAsXG4gICAgICAgIDEsIDEsIDAsIDAsIDAsXG4gICAgICAgIDAsIDAsIDAsIDEsIDBcbiAgICBdO1xuXG4gICAgdGhpcy5fbG9hZE1hdHJpeChtYXRyaXgsIG11bHRpcGx5KTtcbn07XG5cbi8qKlxuICogU2VwaWEgaW1hZ2VcbiAqXG4gKiBAcGFyYW0gbXVsdGlwbHkge2Jvb2xlYW59IHJlZmVyIHRvIC5fbG9hZE1hdHJpeCgpIG1ldGhvZFxuICovXG5Db2xvck1hdHJpeEZpbHRlci5wcm90b3R5cGUuc2VwaWEgPSBmdW5jdGlvbiAobXVsdGlwbHkpXG57XG4gICAgdmFyIG1hdHJpeCA9IFtcbiAgICAgICAgMC4zOTMsIDAuNzY4OTk5OSwgMC4xODg5OTk5OSwgMCwgMCxcbiAgICAgICAgMC4zNDksIDAuNjg1OTk5OSwgMC4xNjc5OTk5OSwgMCwgMCxcbiAgICAgICAgMC4yNzIsIDAuNTMzOTk5OSwgMC4xMzA5OTk5OSwgMCwgMCxcbiAgICAgICAgMCwgMCwgMCwgMSwgMFxuICAgIF07XG5cbiAgICB0aGlzLl9sb2FkTWF0cml4KG1hdHJpeCwgbXVsdGlwbHkpO1xufTtcblxuLyoqXG4gKiBDb2xvciBtb3Rpb24gcGljdHVyZSBwcm9jZXNzIGludmVudGVkIGluIDE5MTYgKHRoYW5rcyBEb21pbmljIFN6YWJsZXdza2kpXG4gKlxuICogQHBhcmFtIG11bHRpcGx5IHtib29sZWFufSByZWZlciB0byAuX2xvYWRNYXRyaXgoKSBtZXRob2RcbiAqL1xuQ29sb3JNYXRyaXhGaWx0ZXIucHJvdG90eXBlLnRlY2huaWNvbG9yID0gZnVuY3Rpb24gKG11bHRpcGx5KVxue1xuICAgIHZhciBtYXRyaXggPSBbXG4gICAgICAgIDEuOTEyNTI3Nzg5MTQ1NjA4MywgLTAuODU0NTM0NDk3Njk1MTY0NSwgLTAuMDkxNTU1MDg0ODI3NTU1ODUsIDAsIDExLjc5MzYwMzQzNDM3NzMzNyxcbiAgICAgICAgLTAuMzA4NzgzMzM4NTkyODA5NywgMS43NjU4OTA4NTU1NDU4NDI4LCAtMC4xMDYwMTc0MzA3NDcyMjI0NSwgMCwgLTcwLjM1MjA1MTYxNDYxMzk4LFxuICAgICAgICAtMC4yMzExMDMzNzc1NDg2MTYsIC0wLjc1MDE4OTkxOTc0NDAyMTIsIDEuODQ3NTk3ODE2MTA4MTg5LCAwLCAzMC45NTA5NDA4Njk0OTExMzgsXG4gICAgICAgIDAsIDAsIDAsIDEsIDBcbiAgICBdO1xuXG4gICAgdGhpcy5fbG9hZE1hdHJpeChtYXRyaXgsIG11bHRpcGx5KTtcbn07XG5cbi8qKlxuICogUG9sYXJvaWQgZmlsdGVyXG4gKlxuICogQHBhcmFtIG11bHRpcGx5IHtib29sZWFufSByZWZlciB0byAuX2xvYWRNYXRyaXgoKSBtZXRob2RcbiAqL1xuQ29sb3JNYXRyaXhGaWx0ZXIucHJvdG90eXBlLnBvbGFyb2lkID0gZnVuY3Rpb24gKG11bHRpcGx5KVxue1xuICAgIHZhciBtYXRyaXggPSBbXG4gICAgICAgIDEuNDM4LCAtMC4wNjIsIC0wLjA2MiwgMCwgMCxcbiAgICAgICAgLTAuMTIyLCAxLjM3OCwgLTAuMTIyLCAwLCAwLFxuICAgICAgICAtMC4wMTYsIC0wLjAxNiwgMS40ODMsIDAsIDAsXG4gICAgICAgIDAsIDAsIDAsIDEsIDBcbiAgICBdO1xuXG4gICAgdGhpcy5fbG9hZE1hdHJpeChtYXRyaXgsIG11bHRpcGx5KTtcbn07XG5cbi8qKlxuICogRmlsdGVyIHdobyB0cmFuc2Zvcm1zIDogUmVkIC0+IEJsdWUgYW5kIEJsdWUgLT4gUmVkXG4gKlxuICogQHBhcmFtIG11bHRpcGx5IHtib29sZWFufSByZWZlciB0byAuX2xvYWRNYXRyaXgoKSBtZXRob2RcbiAqL1xuQ29sb3JNYXRyaXhGaWx0ZXIucHJvdG90eXBlLnRvQkdSID0gZnVuY3Rpb24gKG11bHRpcGx5KVxue1xuICAgIHZhciBtYXRyaXggPSBbXG4gICAgICAgIDAsIDAsIDEsIDAsIDAsXG4gICAgICAgIDAsIDEsIDAsIDAsIDAsXG4gICAgICAgIDEsIDAsIDAsIDAsIDAsXG4gICAgICAgIDAsIDAsIDAsIDEsIDBcbiAgICBdO1xuXG4gICAgdGhpcy5fbG9hZE1hdHJpeChtYXRyaXgsIG11bHRpcGx5KTtcbn07XG5cbi8qKlxuICogQ29sb3IgcmV2ZXJzYWwgZmlsbSBpbnRyb2R1Y2VkIGJ5IEVhc3RtYW4gS29kYWsgaW4gMTkzNS4gKHRoYW5rcyBEb21pbmljIFN6YWJsZXdza2kpXG4gKlxuICogQHBhcmFtIG11bHRpcGx5IHtib29sZWFufSByZWZlciB0byAuX2xvYWRNYXRyaXgoKSBtZXRob2RcbiAqL1xuQ29sb3JNYXRyaXhGaWx0ZXIucHJvdG90eXBlLmtvZGFjaHJvbWUgPSBmdW5jdGlvbiAobXVsdGlwbHkpXG57XG4gICAgdmFyIG1hdHJpeCA9IFtcbiAgICAgICAgMS4xMjg1NTgyMzk2NTkzNTI1LCAtMC4zOTY3MzgyMjgzNjAxMzQ4LCAtMC4wMzk5MjU1OTE3MjkyMTc5MywgMCwgNjMuNzI5NTg3NjIxOTY1MDIsXG4gICAgICAgIC0wLjE2NDA0MzM5OTYyMjQ0NjE2LCAxLjA4MzUyNTE1NjYyOTEzMDQsIC0wLjA1NDk4ODA1MTE1NjMzMTMyLCAwLCAyNC43MzI0MDc4OTY3MDYyMDMsXG4gICAgICAgIC0wLjE2Nzg2MDEwNzA2MTU1NzYzLCAtMC41NjAzNDE2Mjc3Njk1MjQ4LCAxLjYwMTQ4NTA3NjE5NjQ5NDMsIDAsIDM1LjYyOTgyODA3NDYwOTQ2LFxuICAgICAgICAwLCAwLCAwLCAxLCAwXG4gICAgXTtcblxuICAgIHRoaXMuX2xvYWRNYXRyaXgobWF0cml4LCBtdWx0aXBseSk7XG59O1xuXG4vKipcbiAqIEJyb3duIGRlbGljaW91cyBicm93bmkgZmlsdGVyICh0aGFua3MgRG9taW5pYyBTemFibGV3c2tpKVxuICpcbiAqIEBwYXJhbSBtdWx0aXBseSB7Ym9vbGVhbn0gcmVmZXIgdG8gLl9sb2FkTWF0cml4KCkgbWV0aG9kXG4gKi9cbkNvbG9yTWF0cml4RmlsdGVyLnByb3RvdHlwZS5icm93bmkgPSBmdW5jdGlvbiAobXVsdGlwbHkpXG57XG4gICAgdmFyIG1hdHJpeCA9IFtcbiAgICAgICAgMC41OTk3MDIzNDk4MTU5NzE1LCAwLjM0NTUzMjQzMDQ4MzkxMjYzLCAtMC4yNzA4Mjk4Njc0NTM4MDQyLCAwLCA0Ny40MzE5Mjg1NTYwMDg3MyxcbiAgICAgICAgLTAuMDM3NzAzMjQ5ODM3NzgzMTU3LCAwLjg2MDk1Nzc1ODc5OTI2NDEsIDAuMTUwNTk1NTIzODg0NTk5MTMsIDAsIC0zNi45Njg0MTQ5ODMxOTEyNyxcbiAgICAgICAgMC4yNDExMzYzNTEyODE1MzMzNSwgLTAuMDc0NDEwMzc5MDg0MjI0OTIsIDAuNDQ5NzIxODIwNjQ4NzcxNTMsIDAsIC03LjU2MjA3NTI3NzU5MTI4MyxcbiAgICAgICAgMCwgMCwgMCwgMSwgMFxuICAgIF07XG5cbiAgICB0aGlzLl9sb2FkTWF0cml4KG1hdHJpeCwgbXVsdGlwbHkpO1xufTtcblxuLypcbiAqIFZpbnRhZ2UgZmlsdGVyICh0aGFua3MgRG9taW5pYyBTemFibGV3c2tpKVxuICpcbiAqIEBwYXJhbSBtdWx0aXBseSB7Ym9vbGVhbn0gcmVmZXIgdG8gLl9sb2FkTWF0cml4KCkgbWV0aG9kXG4gKi9cbkNvbG9yTWF0cml4RmlsdGVyLnByb3RvdHlwZS52aW50YWdlID0gZnVuY3Rpb24gKG11bHRpcGx5KVxue1xuICAgIHZhciBtYXRyaXggPSBbXG4gICAgICAgIDAuNjI3OTM0NTYzNTYwNTk5NCwgMC4zMjAyMTgzNDIwODE5MzY3LCAtMC4wMzk2NTQwODIxMTMxMjQ1MywgMCwgOS42NTEyODU4MzUyOTQxMjMsXG4gICAgICAgIDAuMDI1NzgzOTc3MDQ4MDg4NjgsIDAuNjQ0MTE4ODY0NDM3NDc3MSwgMC4wMzI1OTEyNzYxNjE0OTI5NCwgMCwgNy40NjI4MjkxNzY0NzA1OTEsXG4gICAgICAgIDAuMDQ2NjA1NTU1Njc4MjcxOSwgLTAuMDg1MTIzMjk4NzI0Nzg5MSwgMC41MjQxNjQ4MDE4NzAwNDY1LCAwLCA1LjE1OTE5MDU4ODIzNTI5NixcbiAgICAgICAgMCwgMCwgMCwgMSwgMFxuICAgIF07XG5cbiAgICB0aGlzLl9sb2FkTWF0cml4KG1hdHJpeCwgbXVsdGlwbHkpO1xufTtcblxuLypcbiAqIFdlIGRvbid0IGtub3cgZXhhY3RseSB3aGF0IGl0IGRvZXMsIGtpbmQgb2YgZ3JhZGllbnQgbWFwLCBidXQgZnVubnkgdG8gcGxheSB3aXRoIVxuICpcbiAqIEBwYXJhbSBkZXNhdHVyYXRpb24ge251bWJlcn1cbiAqIEBwYXJhbSB0b25lZCB7bnVtYmVyfVxuICogQHBhcmFtIGxpZ2h0Q29sb3Ige3N0cmluZ30gKGV4YW1wbGUgOiBcIjB4RkZFNTgwXCIpXG4gKiBAcGFyYW0gZGFya0NvbG9yIHtzdHJpbmd9ICAoZXhhbXBsZSA6IFwiMHhGRkU1ODBcIilcbiAqXG4gKiBAcGFyYW0gbXVsdGlwbHkge2Jvb2xlYW59IHJlZmVyIHRvIC5fbG9hZE1hdHJpeCgpIG1ldGhvZFxuICovXG5Db2xvck1hdHJpeEZpbHRlci5wcm90b3R5cGUuY29sb3JUb25lID0gZnVuY3Rpb24gKGRlc2F0dXJhdGlvbiwgdG9uZWQsIGxpZ2h0Q29sb3IsIGRhcmtDb2xvciwgbXVsdGlwbHkpXG57XG4gICAgZGVzYXR1cmF0aW9uID0gZGVzYXR1cmF0aW9uIHx8IDAuMjtcbiAgICB0b25lZCA9IHRvbmVkIHx8IDAuMTU7XG4gICAgbGlnaHRDb2xvciA9IGxpZ2h0Q29sb3IgfHwgMHhGRkU1ODA7XG4gICAgZGFya0NvbG9yID0gZGFya0NvbG9yIHx8IDB4MzM4MDAwO1xuXG4gICAgdmFyIGxSID0gKChsaWdodENvbG9yID4+IDE2KSAmIDB4RkYpIC8gMjU1O1xuICAgIHZhciBsRyA9ICgobGlnaHRDb2xvciA+PiA4KSAmIDB4RkYpIC8gMjU1O1xuICAgIHZhciBsQiA9IChsaWdodENvbG9yICYgMHhGRikgLyAyNTU7XG5cbiAgICB2YXIgZFIgPSAoKGRhcmtDb2xvciA+PiAxNikgJiAweEZGKSAvIDI1NTtcbiAgICB2YXIgZEcgPSAoKGRhcmtDb2xvciA+PiA4KSAmIDB4RkYpIC8gMjU1O1xuICAgIHZhciBkQiA9IChkYXJrQ29sb3IgJiAweEZGKSAvIDI1NTtcblxuICAgIHZhciBtYXRyaXggPSBbXG4gICAgICAgIDAuMywgMC41OSwgMC4xMSwgMCwgMCxcbiAgICAgICAgbFIsIGxHLCBsQiwgZGVzYXR1cmF0aW9uLCAwLFxuICAgICAgICBkUiwgZEcsIGRCLCB0b25lZCwgMCxcbiAgICAgICAgbFIgLSBkUiwgbEcgLSBkRywgbEIgLSBkQiwgMCwgMFxuICAgIF07XG5cbiAgICB0aGlzLl9sb2FkTWF0cml4KG1hdHJpeCwgbXVsdGlwbHkpO1xufTtcblxuLypcbiAqIE5pZ2h0IGVmZmVjdFxuICpcbiAqIEBwYXJhbSBpbnRlbnNpdHkge251bWJlcn1cbiAqIEBwYXJhbSBtdWx0aXBseSB7Ym9vbGVhbn0gcmVmZXIgdG8gLl9sb2FkTWF0cml4KCkgbWV0aG9kXG4gKi9cbkNvbG9yTWF0cml4RmlsdGVyLnByb3RvdHlwZS5uaWdodCA9IGZ1bmN0aW9uIChpbnRlbnNpdHksIG11bHRpcGx5KVxue1xuICAgIGludGVuc2l0eSA9IGludGVuc2l0eSB8fCAwLjE7XG4gICAgdmFyIG1hdHJpeCA9IFtcbiAgICAgICAgaW50ZW5zaXR5ICogKCAtMi4wKSwgLWludGVuc2l0eSwgMCwgMCwgMCxcbiAgICAgICAgLWludGVuc2l0eSwgMCwgaW50ZW5zaXR5LCAwLCAwLFxuICAgICAgICAwLCBpbnRlbnNpdHksIGludGVuc2l0eSAqIDIuMCwgMCwgMCxcbiAgICAgICAgMCwgMCwgMCwgMSwgMFxuICAgIF07XG5cbiAgICB0aGlzLl9sb2FkTWF0cml4KG1hdHJpeCwgbXVsdGlwbHkpO1xufTtcblxuXG4vKlxuICogUHJlZGF0b3IgZWZmZWN0XG4gKlxuICogRXJhc2UgdGhlIGN1cnJlbnQgbWF0cml4IGJ5IHNldHRpbmcgYSBuZXcgaW5kZXBlbnQgb25lXG4gKlxuICogQHBhcmFtIGFtb3VudCB7bnVtYmVyfSBob3cgbXVjaCB0aGUgcHJlZGF0b3IgZmVlbHMgaGlzIGZ1dHVyZSB2aWN0aW1cbiAqIEBwYXJhbSBtdWx0aXBseSB7Ym9vbGVhbn0gcmVmZXIgdG8gLl9sb2FkTWF0cml4KCkgbWV0aG9kXG4gKi9cbkNvbG9yTWF0cml4RmlsdGVyLnByb3RvdHlwZS5wcmVkYXRvciA9IGZ1bmN0aW9uIChhbW91bnQsIG11bHRpcGx5KVxue1xuICAgIHZhciBtYXRyaXggPSBbXG4gICAgICAgIDExLjIyNDEzMDYzMDQ5MzE2NCAqIGFtb3VudCwgLTQuNzk0NDg2OTk5NTExNzE5ICogYW1vdW50LCAtMi44NzQ2MTE4NTQ1NTMyMjI3ICogYW1vdW50LCAwICogYW1vdW50LCAwLjQwMzQyNDM4MjIwOTc3NzgzICogYW1vdW50LFxuICAgICAgICAtMy42MzMwNjk3NTM2NDY4NTA2ICogYW1vdW50LCA5LjE5MzE1NzE5NjA0NDkyMiAqIGFtb3VudCwgLTIuOTUxODEwODM2NzkxOTkyICogYW1vdW50LCAwICogYW1vdW50LCAtMS4zMTYxMzUwNDg4NjYyNzIgKiBhbW91bnQsXG4gICAgICAgIC0zLjIxODQxOTc5MDI2Nzk0NDMgKiBhbW91bnQsIC00LjIzNzUwMzA1MTc1NzgxMjUgKiBhbW91bnQsIDcuNDc2NDQ4MDU5MDgyMDMxICogYW1vdW50LCAwICogYW1vdW50LCAwLjgwNDQ0NTkyMjM3NDcyNTMgKiBhbW91bnQsXG4gICAgICAgIDAsIDAsIDAsIDEsIDBcbiAgICBdO1xuXG4gICAgdGhpcy5fbG9hZE1hdHJpeChtYXRyaXgsIG11bHRpcGx5KTtcbn07XG5cbi8qXG4gKiBMU0QgZWZmZWN0XG4gKlxuICogTXVsdGlwbHkgdGhlIGN1cnJlbnQgbWF0cml4XG4gKlxuICogQHBhcmFtIGFtb3VudCB7bnVtYmVyfSBIb3cgY3JhenkgaXMgeW91ciBlZmZlY3RcbiAqIEBwYXJhbSBtdWx0aXBseSB7Ym9vbGVhbn0gcmVmZXIgdG8gLl9sb2FkTWF0cml4KCkgbWV0aG9kXG4gKi9cbkNvbG9yTWF0cml4RmlsdGVyLnByb3RvdHlwZS5sc2QgPSBmdW5jdGlvbiAobXVsdGlwbHkpXG57XG4gICAgdmFyIG1hdHJpeCA9IFtcbiAgICAgICAgMiwgLTAuNCwgMC41LCAwLCAwLFxuICAgICAgICAtMC41LCAyLCAtMC40LCAwLCAwLFxuICAgICAgICAtMC40LCAtMC41LCAzLCAwLCAwLFxuICAgICAgICAwLCAwLCAwLCAxLCAwXG4gICAgXTtcblxuICAgIHRoaXMuX2xvYWRNYXRyaXgobWF0cml4LCBtdWx0aXBseSk7XG59O1xuXG4vKlxuICogRXJhc2UgdGhlIGN1cnJlbnQgbWF0cml4IGJ5IHNldHRpbmcgdGhlIGRlZmF1bHQgb25lXG4gKlxuICovXG5Db2xvck1hdHJpeEZpbHRlci5wcm90b3R5cGUucmVzZXQgPSBmdW5jdGlvbiAoKVxue1xuICAgIHZhciBtYXRyaXggPSBbXG4gICAgICAgIDEsIDAsIDAsIDAsIDAsXG4gICAgICAgIDAsIDEsIDAsIDAsIDAsXG4gICAgICAgIDAsIDAsIDEsIDAsIDAsXG4gICAgICAgIDAsIDAsIDAsIDEsIDBcbiAgICBdO1xuXG4gICAgdGhpcy5fbG9hZE1hdHJpeChtYXRyaXgsIGZhbHNlKTtcbn07XG5cblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoQ29sb3JNYXRyaXhGaWx0ZXIucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgbWF0cml4IG9mIHRoZSBjb2xvciBtYXRyaXggZmlsdGVyXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJbXX1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLkNvbG9yTWF0cml4RmlsdGVyI1xuICAgICAqIEBkZWZhdWx0IFsxLCAwLCAwLCAwLCAwLCAwLCAxLCAwLCAwLCAwLCAwLCAwLCAxLCAwLCAwLCAwLCAwLCAwLCAxLCAwXVxuICAgICAqL1xuICAgIG1hdHJpeDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVuaWZvcm1zLm0udmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLm0udmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi8uLi9jb3JlJyk7XG4vLyBAc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9zdWJzdGFjay9icmZzL2lzc3Vlcy8yNVxuXG5cbi8qKlxuICogVGhpcyBsb3dlcnMgdGhlIGNvbG9yIGRlcHRoIG9mIHlvdXIgaW1hZ2UgYnkgdGhlIGdpdmVuIGFtb3VudCwgcHJvZHVjaW5nIGFuIGltYWdlIHdpdGggYSBzbWFsbGVyIHBhbGV0dGUuXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLkFic3RyYWN0RmlsdGVyXG4gKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzXG4gKi9cbmZ1bmN0aW9uIENvbG9yU3RlcEZpbHRlcigpXG57XG4gICAgY29yZS5BYnN0cmFjdEZpbHRlci5jYWxsKHRoaXMsXG4gICAgICAgIC8vIHZlcnRleCBzaGFkZXJcbiAgICAgICAgbnVsbCxcbiAgICAgICAgLy8gZnJhZ21lbnQgc2hhZGVyXG4gICAgICAgIFwicHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XFxuXFxudmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7XFxuXFxudW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXI7XFxudW5pZm9ybSBmbG9hdCBzdGVwO1xcblxcbnZvaWQgbWFpbih2b2lkKVxcbntcXG4gICAgdmVjNCBjb2xvciA9IHRleHR1cmUyRCh1U2FtcGxlciwgdlRleHR1cmVDb29yZCk7XFxuXFxuICAgIGNvbG9yID0gZmxvb3IoY29sb3IgKiBzdGVwKSAvIHN0ZXA7XFxuXFxuICAgIGdsX0ZyYWdDb2xvciA9IGNvbG9yO1xcbn1cXG5cIixcbiAgICAgICAgLy8gY3VzdG9tIHVuaWZvcm1zXG4gICAgICAgIHtcbiAgICAgICAgICAgIHN0ZXA6IHsgdHlwZTogJzFmJywgdmFsdWU6IDUgfVxuICAgICAgICB9XG4gICAgKTtcbn1cblxuQ29sb3JTdGVwRmlsdGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoY29yZS5BYnN0cmFjdEZpbHRlci5wcm90b3R5cGUpO1xuQ29sb3JTdGVwRmlsdGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IENvbG9yU3RlcEZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gQ29sb3JTdGVwRmlsdGVyO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhDb2xvclN0ZXBGaWx0ZXIucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogVGhlIG51bWJlciBvZiBzdGVwcyB0byByZWR1Y2UgdGhlIHBhbGV0dGUgYnkuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5Db2xvclN0ZXBGaWx0ZXIjXG4gICAgICovXG4gICAgc3RlcDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVuaWZvcm1zLnN0ZXAudmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLnN0ZXAudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi8uLi9jb3JlJyk7XG4vLyBAc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9zdWJzdGFjay9icmZzL2lzc3Vlcy8yNVxuXG5cbi8qKlxuICogVGhlIENvbnZvbHV0aW9uRmlsdGVyIGNsYXNzIGFwcGxpZXMgYSBtYXRyaXggY29udm9sdXRpb24gZmlsdGVyIGVmZmVjdC5cbiAqIEEgY29udm9sdXRpb24gY29tYmluZXMgcGl4ZWxzIGluIHRoZSBpbnB1dCBpbWFnZSB3aXRoIG5laWdoYm9yaW5nIHBpeGVscyB0byBwcm9kdWNlIGEgbmV3IGltYWdlLlxuICogQSB3aWRlIHZhcmlldHkgb2YgaW1hZ2UgZWZmZWN0cyBjYW4gYmUgYWNoaWV2ZWQgdGhyb3VnaCBjb252b2x1dGlvbnMsIGluY2x1ZGluZyBibHVycmluZywgZWRnZVxuICogZGV0ZWN0aW9uLCBzaGFycGVuaW5nLCBlbWJvc3NpbmcsIGFuZCBiZXZlbGluZy4gVGhlIG1hdHJpeCBzaG91bGQgYmUgc3BlY2lmaWVkIGFzIGEgOSBwb2ludCBBcnJheS5cbiAqIFNlZSBodHRwOi8vZG9jcy5naW1wLm9yZy9lbi9wbHVnLWluLWNvbnZtYXRyaXguaHRtbCBmb3IgbW9yZSBpbmZvLlxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5BYnN0cmFjdEZpbHRlclxuICogQG1lbWJlcm9mIFBJWEkuZmlsdGVyc1xuICogQHBhcmFtIG1hdHJpeCB7bnVtYmVyW119IEFuIGFycmF5IG9mIHZhbHVlcyB1c2VkIGZvciBtYXRyaXggdHJhbnNmb3JtYXRpb24uIFNwZWNpZmllZCBhcyBhIDkgcG9pbnQgQXJyYXkuXG4gKiBAcGFyYW0gd2lkdGgge251bWJlcn0gV2lkdGggb2YgdGhlIG9iamVjdCB5b3UgYXJlIHRyYW5zZm9ybWluZ1xuICogQHBhcmFtIGhlaWdodCB7bnVtYmVyfSBIZWlnaHQgb2YgdGhlIG9iamVjdCB5b3UgYXJlIHRyYW5zZm9ybWluZ1xuICovXG5mdW5jdGlvbiBDb252b2x1dGlvbkZpbHRlcihtYXRyaXgsIHdpZHRoLCBoZWlnaHQpXG57XG4gICAgY29yZS5BYnN0cmFjdEZpbHRlci5jYWxsKHRoaXMsXG4gICAgICAgIC8vIHZlcnRleCBzaGFkZXJcbiAgICAgICAgbnVsbCxcbiAgICAgICAgLy8gZnJhZ21lbnQgc2hhZGVyXG4gICAgICAgIFwicHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XFxuXFxudmFyeWluZyBtZWRpdW1wIHZlYzIgdlRleHR1cmVDb29yZDtcXG5cXG51bmlmb3JtIHNhbXBsZXIyRCB1U2FtcGxlcjtcXG51bmlmb3JtIHZlYzIgdGV4ZWxTaXplO1xcbnVuaWZvcm0gZmxvYXQgbWF0cml4WzldO1xcblxcbnZvaWQgbWFpbih2b2lkKVxcbntcXG4gICB2ZWM0IGMxMSA9IHRleHR1cmUyRCh1U2FtcGxlciwgdlRleHR1cmVDb29yZCAtIHRleGVsU2l6ZSk7IC8vIHRvcCBsZWZ0XFxuICAgdmVjNCBjMTIgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZlYzIodlRleHR1cmVDb29yZC54LCB2VGV4dHVyZUNvb3JkLnkgLSB0ZXhlbFNpemUueSkpOyAvLyB0b3AgY2VudGVyXFxuICAgdmVjNCBjMTMgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZlYzIodlRleHR1cmVDb29yZC54ICsgdGV4ZWxTaXplLngsIHZUZXh0dXJlQ29vcmQueSAtIHRleGVsU2l6ZS55KSk7IC8vIHRvcCByaWdodFxcblxcbiAgIHZlYzQgYzIxID0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2ZWMyKHZUZXh0dXJlQ29vcmQueCAtIHRleGVsU2l6ZS54LCB2VGV4dHVyZUNvb3JkLnkpKTsgLy8gbWlkIGxlZnRcXG4gICB2ZWM0IGMyMiA9IHRleHR1cmUyRCh1U2FtcGxlciwgdlRleHR1cmVDb29yZCk7IC8vIG1pZCBjZW50ZXJcXG4gICB2ZWM0IGMyMyA9IHRleHR1cmUyRCh1U2FtcGxlciwgdmVjMih2VGV4dHVyZUNvb3JkLnggKyB0ZXhlbFNpemUueCwgdlRleHR1cmVDb29yZC55KSk7IC8vIG1pZCByaWdodFxcblxcbiAgIHZlYzQgYzMxID0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2ZWMyKHZUZXh0dXJlQ29vcmQueCAtIHRleGVsU2l6ZS54LCB2VGV4dHVyZUNvb3JkLnkgKyB0ZXhlbFNpemUueSkpOyAvLyBib3R0b20gbGVmdFxcbiAgIHZlYzQgYzMyID0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2ZWMyKHZUZXh0dXJlQ29vcmQueCwgdlRleHR1cmVDb29yZC55ICsgdGV4ZWxTaXplLnkpKTsgLy8gYm90dG9tIGNlbnRlclxcbiAgIHZlYzQgYzMzID0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2VGV4dHVyZUNvb3JkICsgdGV4ZWxTaXplKTsgLy8gYm90dG9tIHJpZ2h0XFxuXFxuICAgZ2xfRnJhZ0NvbG9yID1cXG4gICAgICAgYzExICogbWF0cml4WzBdICsgYzEyICogbWF0cml4WzFdICsgYzEzICogbWF0cml4WzJdICtcXG4gICAgICAgYzIxICogbWF0cml4WzNdICsgYzIyICogbWF0cml4WzRdICsgYzIzICogbWF0cml4WzVdICtcXG4gICAgICAgYzMxICogbWF0cml4WzZdICsgYzMyICogbWF0cml4WzddICsgYzMzICogbWF0cml4WzhdO1xcblxcbiAgIGdsX0ZyYWdDb2xvci5hID0gYzIyLmE7XFxufVxcblwiLFxuICAgICAgICAvLyBjdXN0b20gdW5pZm9ybXNcbiAgICAgICAge1xuICAgICAgICAgICAgbWF0cml4OiAgICAgeyB0eXBlOiAnMWZ2JywgdmFsdWU6IG5ldyBGbG9hdDMyQXJyYXkobWF0cml4KSB9LFxuICAgICAgICAgICAgdGV4ZWxTaXplOiAgeyB0eXBlOiAndjInLCB2YWx1ZTogeyB4OiAxIC8gd2lkdGgsIHk6IDEgLyBoZWlnaHQgfSB9XG4gICAgICAgIH1cbiAgICApO1xufVxuXG5Db252b2x1dGlvbkZpbHRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuQWJzdHJhY3RGaWx0ZXIucHJvdG90eXBlKTtcbkNvbnZvbHV0aW9uRmlsdGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IENvbnZvbHV0aW9uRmlsdGVyO1xubW9kdWxlLmV4cG9ydHMgPSBDb252b2x1dGlvbkZpbHRlcjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoQ29udm9sdXRpb25GaWx0ZXIucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogQW4gYXJyYXkgb2YgdmFsdWVzIHVzZWQgZm9yIG1hdHJpeCB0cmFuc2Zvcm1hdGlvbi4gU3BlY2lmaWVkIGFzIGEgOSBwb2ludCBBcnJheS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcltdfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuQ29udm9sdXRpb25GaWx0ZXIjXG4gICAgICovXG4gICAgbWF0cml4OiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudW5pZm9ybXMubWF0cml4LnZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy5tYXRyaXgudmFsdWUgPSBuZXcgRmxvYXQzMkFycmF5KHZhbHVlKTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBXaWR0aCBvZiB0aGUgb2JqZWN0IHlvdSBhcmUgdHJhbnNmb3JtaW5nXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5Db252b2x1dGlvbkZpbHRlciNcbiAgICAgKi9cbiAgICB3aWR0aDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiAxL3RoaXMudW5pZm9ybXMudGV4ZWxTaXplLnZhbHVlLng7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLnRleGVsU2l6ZS52YWx1ZS54ID0gMS92YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBIZWlnaHQgb2YgdGhlIG9iamVjdCB5b3UgYXJlIHRyYW5zZm9ybWluZ1xuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuQ29udm9sdXRpb25GaWx0ZXIjXG4gICAgICovXG4gICAgaGVpZ2h0OiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIDEvdGhpcy51bmlmb3Jtcy50ZXhlbFNpemUudmFsdWUueTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudW5pZm9ybXMudGV4ZWxTaXplLnZhbHVlLnkgPSAxL3ZhbHVlO1xuICAgICAgICB9XG4gICAgfVxufSk7XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uLy4uL2NvcmUnKTtcbi8vIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL3N1YnN0YWNrL2JyZnMvaXNzdWVzLzI1XG5cblxuLyoqXG4gKiBBIENyb3NzIEhhdGNoIGVmZmVjdCBmaWx0ZXIuXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLkFic3RyYWN0RmlsdGVyXG4gKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzXG4gKi9cbmZ1bmN0aW9uIENyb3NzSGF0Y2hGaWx0ZXIoKVxue1xuICAgIGNvcmUuQWJzdHJhY3RGaWx0ZXIuY2FsbCh0aGlzLFxuICAgICAgICAvLyB2ZXJ0ZXggc2hhZGVyXG4gICAgICAgIG51bGwsXG4gICAgICAgIC8vIGZyYWdtZW50IHNoYWRlclxuICAgICAgICBcInByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xcblxcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xcblxcbnVuaWZvcm0gc2FtcGxlcjJEIHVTYW1wbGVyO1xcblxcbnZvaWQgbWFpbih2b2lkKVxcbntcXG4gICAgZmxvYXQgbHVtID0gbGVuZ3RoKHRleHR1cmUyRCh1U2FtcGxlciwgdlRleHR1cmVDb29yZC54eSkucmdiKTtcXG5cXG4gICAgZ2xfRnJhZ0NvbG9yID0gdmVjNCgxLjAsIDEuMCwgMS4wLCAxLjApO1xcblxcbiAgICBpZiAobHVtIDwgMS4wMClcXG4gICAge1xcbiAgICAgICAgaWYgKG1vZChnbF9GcmFnQ29vcmQueCArIGdsX0ZyYWdDb29yZC55LCAxMC4wKSA9PSAwLjApXFxuICAgICAgICB7XFxuICAgICAgICAgICAgZ2xfRnJhZ0NvbG9yID0gdmVjNCgwLjAsIDAuMCwgMC4wLCAxLjApO1xcbiAgICAgICAgfVxcbiAgICB9XFxuXFxuICAgIGlmIChsdW0gPCAwLjc1KVxcbiAgICB7XFxuICAgICAgICBpZiAobW9kKGdsX0ZyYWdDb29yZC54IC0gZ2xfRnJhZ0Nvb3JkLnksIDEwLjApID09IDAuMClcXG4gICAgICAgIHtcXG4gICAgICAgICAgICBnbF9GcmFnQ29sb3IgPSB2ZWM0KDAuMCwgMC4wLCAwLjAsIDEuMCk7XFxuICAgICAgICB9XFxuICAgIH1cXG5cXG4gICAgaWYgKGx1bSA8IDAuNTApXFxuICAgIHtcXG4gICAgICAgIGlmIChtb2QoZ2xfRnJhZ0Nvb3JkLnggKyBnbF9GcmFnQ29vcmQueSAtIDUuMCwgMTAuMCkgPT0gMC4wKVxcbiAgICAgICAge1xcbiAgICAgICAgICAgIGdsX0ZyYWdDb2xvciA9IHZlYzQoMC4wLCAwLjAsIDAuMCwgMS4wKTtcXG4gICAgICAgIH1cXG4gICAgfVxcblxcbiAgICBpZiAobHVtIDwgMC4zKVxcbiAgICB7XFxuICAgICAgICBpZiAobW9kKGdsX0ZyYWdDb29yZC54IC0gZ2xfRnJhZ0Nvb3JkLnkgLSA1LjAsIDEwLjApID09IDAuMClcXG4gICAgICAgIHtcXG4gICAgICAgICAgICBnbF9GcmFnQ29sb3IgPSB2ZWM0KDAuMCwgMC4wLCAwLjAsIDEuMCk7XFxuICAgICAgICB9XFxuICAgIH1cXG59XFxuXCJcbiAgICApO1xufVxuXG5Dcm9zc0hhdGNoRmlsdGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoY29yZS5BYnN0cmFjdEZpbHRlci5wcm90b3R5cGUpO1xuQ3Jvc3NIYXRjaEZpbHRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBDcm9zc0hhdGNoRmlsdGVyO1xubW9kdWxlLmV4cG9ydHMgPSBDcm9zc0hhdGNoRmlsdGVyO1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi8uLi9jb3JlJyk7XG4vLyBAc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9zdWJzdGFjay9icmZzL2lzc3Vlcy8yNVxuXG5cbi8qKlxuICogVGhlIERpc3BsYWNlbWVudEZpbHRlciBjbGFzcyB1c2VzIHRoZSBwaXhlbCB2YWx1ZXMgZnJvbSB0aGUgc3BlY2lmaWVkIHRleHR1cmUgKGNhbGxlZCB0aGUgZGlzcGxhY2VtZW50IG1hcCkgdG8gcGVyZm9ybSBhIGRpc3BsYWNlbWVudCBvZiBhbiBvYmplY3QuXG4gKiBZb3UgY2FuIHVzZSB0aGlzIGZpbHRlciB0byBhcHBseSBhbGwgbWFub3Igb2YgY3Jhenkgd2FycGluZyBlZmZlY3RzXG4gKiBDdXJyZW50bHkgdGhlIHIgcHJvcGVydHkgb2YgdGhlIHRleHR1cmUgaXMgdXNlZCB0byBvZmZzZXQgdGhlIHggYW5kIHRoZSBnIHByb3BlcnR5IG9mIHRoZSB0ZXh0dXJlIGlzIHVzZWQgdG8gb2Zmc2V0IHRoZSB5LlxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5BYnN0cmFjdEZpbHRlclxuICogQG1lbWJlcm9mIFBJWEkuZmlsdGVyc1xuICogQHBhcmFtIHNwcml0ZSB7UElYSS5TcHJpdGV9IHRoZSBzcHJpdGUgdXNlZCBmb3IgdGhlIGRpc3BsYWNlbWVudCBtYXAuIChtYWtlIHN1cmUgaXRzIGFkZGVkIHRvIHRoZSBzY2VuZSEpXG4gKi9cbmZ1bmN0aW9uIERpc3BsYWNlbWVudEZpbHRlcihzcHJpdGUsIHNjYWxlKVxue1xuICAgIHZhciBtYXNrTWF0cml4ID0gbmV3IGNvcmUuTWF0cml4KCk7XG4gICAgc3ByaXRlLnJlbmRlcmFibGUgPSBmYWxzZTtcblxuICAgIGNvcmUuQWJzdHJhY3RGaWx0ZXIuY2FsbCh0aGlzLFxuICAgICAgICAvLyB2ZXJ0ZXggc2hhZGVyXG4gICAgICAgIFwiYXR0cmlidXRlIHZlYzIgYVZlcnRleFBvc2l0aW9uO1xcbmF0dHJpYnV0ZSB2ZWMyIGFUZXh0dXJlQ29vcmQ7XFxuYXR0cmlidXRlIHZlYzQgYUNvbG9yO1xcblxcbnVuaWZvcm0gbWF0MyBwcm9qZWN0aW9uTWF0cml4O1xcbnVuaWZvcm0gbWF0MyBvdGhlck1hdHJpeDtcXG5cXG52YXJ5aW5nIHZlYzIgdk1hcENvb3JkO1xcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xcbnZhcnlpbmcgdmVjNCB2Q29sb3I7XFxuXFxudm9pZCBtYWluKHZvaWQpXFxue1xcbiAgIGdsX1Bvc2l0aW9uID0gdmVjNCgocHJvamVjdGlvbk1hdHJpeCAqIHZlYzMoYVZlcnRleFBvc2l0aW9uLCAxLjApKS54eSwgMC4wLCAxLjApO1xcbiAgIHZUZXh0dXJlQ29vcmQgPSBhVGV4dHVyZUNvb3JkO1xcbiAgIHZNYXBDb29yZCA9ICggb3RoZXJNYXRyaXggKiB2ZWMzKCBhVGV4dHVyZUNvb3JkLCAxLjApICApLnh5O1xcbiAgIHZDb2xvciA9IHZlYzQoYUNvbG9yLnJnYiAqIGFDb2xvci5hLCBhQ29sb3IuYSk7XFxufVxcblwiLFxuICAgICAgICAvLyBmcmFnbWVudCBzaGFkZXJcbiAgICAgICAgXCJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcXG5cXG52YXJ5aW5nIHZlYzIgdk1hcENvb3JkO1xcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xcbnZhcnlpbmcgdmVjNCB2Q29sb3I7XFxuXFxudW5pZm9ybSB2ZWMyIHNjYWxlO1xcblxcbnVuaWZvcm0gc2FtcGxlcjJEIHVTYW1wbGVyO1xcbnVuaWZvcm0gc2FtcGxlcjJEIG1hcFNhbXBsZXI7XFxuXFxudm9pZCBtYWluKHZvaWQpXFxue1xcbiAgIHZlYzQgbWFwID0gIHRleHR1cmUyRChtYXBTYW1wbGVyLCB2TWFwQ29vcmQpO1xcblxcbiAgIG1hcCAtPSAwLjU7XFxuICAgbWFwLnh5ICo9IHNjYWxlO1xcblxcbiAgIGdsX0ZyYWdDb2xvciA9IHRleHR1cmUyRCh1U2FtcGxlciwgdmVjMih2VGV4dHVyZUNvb3JkLnggKyBtYXAueCwgdlRleHR1cmVDb29yZC55ICsgbWFwLnkpKTtcXG59XFxuXCIsXG4gICAgICAgIC8vIHVuaWZvcm1zXG4gICAgICAgIHtcbiAgICAgICAgICAgIG1hcFNhbXBsZXI6ICAgICB7IHR5cGU6ICdzYW1wbGVyMkQnLCB2YWx1ZTogc3ByaXRlLnRleHR1cmUgfSxcbiAgICAgICAgICAgIG90aGVyTWF0cml4OiAgICB7IHR5cGU6ICdtYXQzJywgdmFsdWU6IG1hc2tNYXRyaXgudG9BcnJheSh0cnVlKSB9LFxuICAgICAgICAgICAgc2NhbGU6ICAgICAgICAgIHsgdHlwZTogJ3YyJywgdmFsdWU6IHsgeDogMSwgeTogMSB9IH1cbiAgICAgICAgfVxuICAgICk7XG5cbiAgICB0aGlzLm1hc2tTcHJpdGUgPSBzcHJpdGU7XG4gICAgdGhpcy5tYXNrTWF0cml4ID0gbWFza01hdHJpeDtcblxuICAgIGlmIChzY2FsZSA9PT0gbnVsbCB8fCBzY2FsZSA9PT0gdW5kZWZpbmVkKVxuICAgIHtcbiAgICAgICAgc2NhbGUgPSAyMDtcbiAgICB9XG5cbiAgICB0aGlzLnNjYWxlID0gbmV3IGNvcmUuUG9pbnQoc2NhbGUsIHNjYWxlKTtcbn1cblxuRGlzcGxhY2VtZW50RmlsdGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoY29yZS5BYnN0cmFjdEZpbHRlci5wcm90b3R5cGUpO1xuRGlzcGxhY2VtZW50RmlsdGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IERpc3BsYWNlbWVudEZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gRGlzcGxhY2VtZW50RmlsdGVyO1xuXG5EaXNwbGFjZW1lbnRGaWx0ZXIucHJvdG90eXBlLmFwcGx5RmlsdGVyID0gZnVuY3Rpb24gKHJlbmRlcmVyLCBpbnB1dCwgb3V0cHV0KVxue1xuICAgIHZhciBmaWx0ZXJNYW5hZ2VyID0gcmVuZGVyZXIuZmlsdGVyTWFuYWdlcjtcblxuICAgIGZpbHRlck1hbmFnZXIuY2FsY3VsYXRlTWFwcGVkTWF0cml4KGlucHV0LmZyYW1lLCB0aGlzLm1hc2tTcHJpdGUsIHRoaXMubWFza01hdHJpeCk7XG5cbiAgICB0aGlzLnVuaWZvcm1zLm90aGVyTWF0cml4LnZhbHVlID0gdGhpcy5tYXNrTWF0cml4LnRvQXJyYXkodHJ1ZSk7XG4gICAgdGhpcy51bmlmb3Jtcy5zY2FsZS52YWx1ZS54ID0gdGhpcy5zY2FsZS54ICogKDEvaW5wdXQuZnJhbWUud2lkdGgpO1xuICAgIHRoaXMudW5pZm9ybXMuc2NhbGUudmFsdWUueSA9IHRoaXMuc2NhbGUueSAqICgxL2lucHV0LmZyYW1lLmhlaWdodCk7XG5cbiAgICB2YXIgc2hhZGVyID0gdGhpcy5nZXRTaGFkZXIocmVuZGVyZXIpO1xuICAgICAvLyBkcmF3IHRoZSBmaWx0ZXIuLi5cbiAgICBmaWx0ZXJNYW5hZ2VyLmFwcGx5RmlsdGVyKHNoYWRlciwgaW5wdXQsIG91dHB1dCk7XG59O1xuXG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKERpc3BsYWNlbWVudEZpbHRlci5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBUaGUgdGV4dHVyZSB1c2VkIGZvciB0aGUgZGlzcGxhY2VtZW50IG1hcC4gTXVzdCBiZSBwb3dlciBvZiAyIHNpemVkIHRleHR1cmUuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlRleHR1cmV9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5EaXNwbGFjZW1lbnRGaWx0ZXIjXG4gICAgICovXG4gICAgbWFwOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudW5pZm9ybXMubWFwU2FtcGxlci52YWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudW5pZm9ybXMubWFwU2FtcGxlci52YWx1ZSA9IHZhbHVlO1xuXG4gICAgICAgIH1cbiAgICB9XG59KTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vLi4vY29yZScpO1xuLy8gQHNlZSBodHRwczovL2dpdGh1Yi5jb20vc3Vic3RhY2svYnJmcy9pc3N1ZXMvMjVcblxuXG4vKipcbiAqIEBhdXRob3IgTWF0IEdyb3ZlcyBodHRwOi8vbWF0Z3JvdmVzLmNvbS8gQERvb3JtYXQyM1xuICogb3JpZ2luYWwgZmlsdGVyOiBodHRwczovL2dpdGh1Yi5jb20vZXZhbncvZ2xmeC5qcy9ibG9iL21hc3Rlci9zcmMvZmlsdGVycy9mdW4vZG90c2NyZWVuLmpzXG4gKi9cblxuLyoqXG4gKiBUaGlzIGZpbHRlciBhcHBsaWVzIGEgZG90c2NyZWVuIGVmZmVjdCBtYWtpbmcgZGlzcGxheSBvYmplY3RzIGFwcGVhciB0byBiZSBtYWRlIG91dCBvZlxuICogYmxhY2sgYW5kIHdoaXRlIGhhbGZ0b25lIGRvdHMgbGlrZSBhbiBvbGQgcHJpbnRlci5cbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQWJzdHJhY3RGaWx0ZXJcbiAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnNcbiAqL1xuZnVuY3Rpb24gRG90U2NyZWVuRmlsdGVyKClcbntcbiAgICBjb3JlLkFic3RyYWN0RmlsdGVyLmNhbGwodGhpcyxcbiAgICAgICAgLy8gdmVydGV4IHNoYWRlclxuICAgICAgICBudWxsLFxuICAgICAgICAvLyBmcmFnbWVudCBzaGFkZXJcbiAgICAgICAgXCJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcXG5cXG52YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDtcXG52YXJ5aW5nIHZlYzQgdkNvbG9yO1xcblxcbnVuaWZvcm0gdmVjNCBkaW1lbnNpb25zO1xcbnVuaWZvcm0gc2FtcGxlcjJEIHVTYW1wbGVyO1xcblxcbnVuaWZvcm0gZmxvYXQgYW5nbGU7XFxudW5pZm9ybSBmbG9hdCBzY2FsZTtcXG5cXG5mbG9hdCBwYXR0ZXJuKClcXG57XFxuICAgZmxvYXQgcyA9IHNpbihhbmdsZSksIGMgPSBjb3MoYW5nbGUpO1xcbiAgIHZlYzIgdGV4ID0gdlRleHR1cmVDb29yZCAqIGRpbWVuc2lvbnMueHk7XFxuICAgdmVjMiBwb2ludCA9IHZlYzIoXFxuICAgICAgIGMgKiB0ZXgueCAtIHMgKiB0ZXgueSxcXG4gICAgICAgcyAqIHRleC54ICsgYyAqIHRleC55XFxuICAgKSAqIHNjYWxlO1xcbiAgIHJldHVybiAoc2luKHBvaW50LngpICogc2luKHBvaW50LnkpKSAqIDQuMDtcXG59XFxuXFxudm9pZCBtYWluKClcXG57XFxuICAgdmVjNCBjb2xvciA9IHRleHR1cmUyRCh1U2FtcGxlciwgdlRleHR1cmVDb29yZCk7XFxuICAgZmxvYXQgYXZlcmFnZSA9IChjb2xvci5yICsgY29sb3IuZyArIGNvbG9yLmIpIC8gMy4wO1xcbiAgIGdsX0ZyYWdDb2xvciA9IHZlYzQodmVjMyhhdmVyYWdlICogMTAuMCAtIDUuMCArIHBhdHRlcm4oKSksIGNvbG9yLmEpO1xcbn1cXG5cIixcbiAgICAgICAgLy8gY3VzdG9tIHVuaWZvcm1zXG4gICAgICAgIHtcbiAgICAgICAgICAgIHNjYWxlOiAgICAgIHsgdHlwZTogJzFmJywgdmFsdWU6IDEgfSxcbiAgICAgICAgICAgIGFuZ2xlOiAgICAgIHsgdHlwZTogJzFmJywgdmFsdWU6IDUgfSxcbiAgICAgICAgICAgIGRpbWVuc2lvbnM6IHsgdHlwZTogJzRmdicsIHZhbHVlOiBbMCwgMCwgMCwgMF0gfVxuICAgICAgICB9XG4gICAgKTtcbn1cblxuRG90U2NyZWVuRmlsdGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoY29yZS5BYnN0cmFjdEZpbHRlci5wcm90b3R5cGUpO1xuRG90U2NyZWVuRmlsdGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IERvdFNjcmVlbkZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gRG90U2NyZWVuRmlsdGVyO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhEb3RTY3JlZW5GaWx0ZXIucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogVGhlIHNjYWxlIG9mIHRoZSBlZmZlY3QuXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuRG90U2NyZWVuRmlsdGVyI1xuICAgICAqL1xuICAgIHNjYWxlOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudW5pZm9ybXMuc2NhbGUudmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLnNjYWxlLnZhbHVlID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVGhlIHJhZGl1cyBvZiB0aGUgZWZmZWN0LlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLkRvdFNjcmVlbkZpbHRlciNcbiAgICAgKi9cbiAgICBhbmdsZToge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVuaWZvcm1zLmFuZ2xlLnZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy5hbmdsZS52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfVxufSk7XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uLy4uL2NvcmUnKTtcblxuLy8gQHNlZSBodHRwczovL2dpdGh1Yi5jb20vc3Vic3RhY2svYnJmcy9pc3N1ZXMvMjVcblxuXG4vKipcbiAqIFRoZSBCbHVyWVRpbnRGaWx0ZXIgYXBwbGllcyBhIHZlcnRpY2FsIEdhdXNzaWFuIGJsdXIgdG8gYW4gb2JqZWN0LlxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5BYnN0cmFjdEZpbHRlclxuICogQG1lbWJlcm9mIFBJWEkuZmlsdGVyc1xuICovXG5mdW5jdGlvbiBCbHVyWVRpbnRGaWx0ZXIoKVxue1xuICAgIGNvcmUuQWJzdHJhY3RGaWx0ZXIuY2FsbCh0aGlzLFxuICAgICAgICAvLyB2ZXJ0ZXggc2hhZGVyXG4gICAgICAgIFwiYXR0cmlidXRlIHZlYzIgYVZlcnRleFBvc2l0aW9uO1xcbmF0dHJpYnV0ZSB2ZWMyIGFUZXh0dXJlQ29vcmQ7XFxuYXR0cmlidXRlIHZlYzQgYUNvbG9yO1xcblxcbnVuaWZvcm0gZmxvYXQgc3RyZW5ndGg7XFxudW5pZm9ybSB2ZWMyIG9mZnNldDtcXG5cXG51bmlmb3JtIG1hdDMgcHJvamVjdGlvbk1hdHJpeDtcXG5cXG52YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDtcXG52YXJ5aW5nIHZlYzQgdkNvbG9yO1xcbnZhcnlpbmcgdmVjMiB2Qmx1clRleENvb3Jkc1s2XTtcXG5cXG52b2lkIG1haW4odm9pZClcXG57XFxuICAgIGdsX1Bvc2l0aW9uID0gdmVjNCgocHJvamVjdGlvbk1hdHJpeCAqIHZlYzMoKGFWZXJ0ZXhQb3NpdGlvbitvZmZzZXQpLCAxLjApKS54eSwgMC4wLCAxLjApO1xcbiAgICB2VGV4dHVyZUNvb3JkID0gYVRleHR1cmVDb29yZDtcXG5cXG4gICAgdkJsdXJUZXhDb29yZHNbIDBdID0gYVRleHR1cmVDb29yZCArIHZlYzIoMC4wLCAtMC4wMTIgKiBzdHJlbmd0aCk7XFxuICAgIHZCbHVyVGV4Q29vcmRzWyAxXSA9IGFUZXh0dXJlQ29vcmQgKyB2ZWMyKDAuMCwgLTAuMDA4ICogc3RyZW5ndGgpO1xcbiAgICB2Qmx1clRleENvb3Jkc1sgMl0gPSBhVGV4dHVyZUNvb3JkICsgdmVjMigwLjAsIC0wLjAwNCAqIHN0cmVuZ3RoKTtcXG4gICAgdkJsdXJUZXhDb29yZHNbIDNdID0gYVRleHR1cmVDb29yZCArIHZlYzIoMC4wLCAgMC4wMDQgKiBzdHJlbmd0aCk7XFxuICAgIHZCbHVyVGV4Q29vcmRzWyA0XSA9IGFUZXh0dXJlQ29vcmQgKyB2ZWMyKDAuMCwgIDAuMDA4ICogc3RyZW5ndGgpO1xcbiAgICB2Qmx1clRleENvb3Jkc1sgNV0gPSBhVGV4dHVyZUNvb3JkICsgdmVjMigwLjAsICAwLjAxMiAqIHN0cmVuZ3RoKTtcXG5cXG4gICB2Q29sb3IgPSB2ZWM0KGFDb2xvci5yZ2IgKiBhQ29sb3IuYSwgYUNvbG9yLmEpO1xcbn1cXG5cIixcbiAgICAgICAgLy8gZnJhZ21lbnQgc2hhZGVyXG4gICAgICAgIFwicHJlY2lzaW9uIGxvd3AgZmxvYXQ7XFxuXFxudmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7XFxudmFyeWluZyB2ZWMyIHZCbHVyVGV4Q29vcmRzWzZdO1xcbnZhcnlpbmcgdmVjNCB2Q29sb3I7XFxuXFxudW5pZm9ybSB2ZWMzIGNvbG9yO1xcbnVuaWZvcm0gZmxvYXQgYWxwaGE7XFxuXFxudW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXI7XFxuXFxudm9pZCBtYWluKHZvaWQpXFxue1xcbiAgICB2ZWM0IHN1bSA9IHZlYzQoMC4wKTtcXG5cXG4gICAgc3VtICs9IHRleHR1cmUyRCh1U2FtcGxlciwgdkJsdXJUZXhDb29yZHNbIDBdKSowLjAwNDQzMTg0ODQxMTkzODM0MTtcXG4gICAgc3VtICs9IHRleHR1cmUyRCh1U2FtcGxlciwgdkJsdXJUZXhDb29yZHNbIDFdKSowLjA1Mzk5MDk2NjUxMzE4OTg1O1xcbiAgICBzdW0gKz0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2Qmx1clRleENvb3Jkc1sgMl0pKjAuMjQxOTcwNzI0NTE5MTQ1NDtcXG4gICAgc3VtICs9IHRleHR1cmUyRCh1U2FtcGxlciwgdlRleHR1cmVDb29yZCAgICAgKSowLjM5ODk0MjI4MDQwMTQzMjc7XFxuICAgIHN1bSArPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZCbHVyVGV4Q29vcmRzWyAzXSkqMC4yNDE5NzA3MjQ1MTkxNDU0O1xcbiAgICBzdW0gKz0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2Qmx1clRleENvb3Jkc1sgNF0pKjAuMDUzOTkwOTY2NTEzMTg5ODU7XFxuICAgIHN1bSArPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZCbHVyVGV4Q29vcmRzWyA1XSkqMC4wMDQ0MzE4NDg0MTE5MzgzNDE7XFxuXFxuICAgIGdsX0ZyYWdDb2xvciA9IHZlYzQoIGNvbG9yLnJnYiAqIHN1bS5hICogYWxwaGEsIHN1bS5hICogYWxwaGEgKTtcXG59XFxuXCIsXG4gICAgICAgIC8vIHNldCB0aGUgdW5pZm9ybXNcbiAgICAgICAge1xuICAgICAgICAgICAgYmx1cjogeyB0eXBlOiAnMWYnLCB2YWx1ZTogMSAvIDUxMiB9LFxuICAgICAgICAgICAgY29sb3I6IHsgdHlwZTogJ2MnLCB2YWx1ZTogWzAsMCwwXX0sXG4gICAgICAgICAgICBhbHBoYTogeyB0eXBlOiAnMWYnLCB2YWx1ZTogMC43IH0sXG4gICAgICAgICAgICBvZmZzZXQ6IHsgdHlwZTogJzJmJywgdmFsdWU6WzUsIDVdfSxcbiAgICAgICAgICAgIHN0cmVuZ3RoOiB7IHR5cGU6ICcxZicsIHZhbHVlOjF9XG4gICAgICAgIH1cbiAgICApO1xuXG4gICAgdGhpcy5wYXNzZXMgPSAxO1xuICAgIHRoaXMuc3RyZW5ndGggPSA0O1xufVxuXG5CbHVyWVRpbnRGaWx0ZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShjb3JlLkFic3RyYWN0RmlsdGVyLnByb3RvdHlwZSk7XG5CbHVyWVRpbnRGaWx0ZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gQmx1cllUaW50RmlsdGVyO1xubW9kdWxlLmV4cG9ydHMgPSBCbHVyWVRpbnRGaWx0ZXI7XG5cbkJsdXJZVGludEZpbHRlci5wcm90b3R5cGUuYXBwbHlGaWx0ZXIgPSBmdW5jdGlvbiAocmVuZGVyZXIsIGlucHV0LCBvdXRwdXQsIGNsZWFyKVxue1xuICAgIHZhciBzaGFkZXIgPSB0aGlzLmdldFNoYWRlcihyZW5kZXJlcik7XG5cbiAgICB0aGlzLnVuaWZvcm1zLnN0cmVuZ3RoLnZhbHVlID0gdGhpcy5zdHJlbmd0aCAvIDQgLyB0aGlzLnBhc3NlcyAqIChpbnB1dC5mcmFtZS5oZWlnaHQgLyBpbnB1dC5zaXplLmhlaWdodCk7XG5cbiAgICBpZih0aGlzLnBhc3NlcyA9PT0gMSlcbiAgICB7XG4gICAgICAgIHJlbmRlcmVyLmZpbHRlck1hbmFnZXIuYXBwbHlGaWx0ZXIoc2hhZGVyLCBpbnB1dCwgb3V0cHV0LCBjbGVhcik7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHZhciByZW5kZXJUYXJnZXQgPSByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLmdldFJlbmRlclRhcmdldCh0cnVlKTtcbiAgICAgICAgdmFyIGZsaXAgPSBpbnB1dDtcbiAgICAgICAgdmFyIGZsb3AgPSByZW5kZXJUYXJnZXQ7XG5cbiAgICAgICAgZm9yKHZhciBpID0gMDsgaSA8IHRoaXMucGFzc2VzLTE7IGkrKylcbiAgICAgICAge1xuICAgICAgICAgICAgcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5hcHBseUZpbHRlcihzaGFkZXIsIGZsaXAsIGZsb3AsIGNsZWFyKTtcblxuICAgICAgICAgICB2YXIgdGVtcCA9IGZsb3A7XG4gICAgICAgICAgIGZsb3AgPSBmbGlwO1xuICAgICAgICAgICBmbGlwID0gdGVtcDtcbiAgICAgICAgfVxuXG4gICAgICAgIHJlbmRlcmVyLmZpbHRlck1hbmFnZXIuYXBwbHlGaWx0ZXIoc2hhZGVyLCBmbGlwLCBvdXRwdXQsIGNsZWFyKTtcblxuICAgICAgICByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLnJldHVyblJlbmRlclRhcmdldChyZW5kZXJUYXJnZXQpO1xuICAgIH1cbn07XG5cblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoQmx1cllUaW50RmlsdGVyLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIHN0cmVuZ3RoIG9mIGJvdGggdGhlIGJsdXIuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5CbHVyWVRpbnRGaWx0ZXIjXG4gICAgICogQGRlZmF1bHQgMlxuICAgICAqL1xuICAgIGJsdXI6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gIHRoaXMuc3RyZW5ndGg7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnBhZGRpbmcgPSB2YWx1ZSAqIDAuNTtcbiAgICAgICAgICAgIHRoaXMuc3RyZW5ndGggPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi8uLi9jb3JlJyksXG4gICAgQmx1clhGaWx0ZXIgPSByZXF1aXJlKCcuLi9ibHVyL0JsdXJYRmlsdGVyJyksXG4gICAgQmx1cllUaW50RmlsdGVyID0gcmVxdWlyZSgnLi9CbHVyWVRpbnRGaWx0ZXInKTtcblxuLyoqXG4gKiBUaGUgRHJvcFNoYWRvd0ZpbHRlciBhcHBsaWVzIGEgR2F1c3NpYW4gYmx1ciB0byBhbiBvYmplY3QuXG4gKiBUaGUgc3RyZW5ndGggb2YgdGhlIGJsdXIgY2FuIGJlIHNldCBmb3IgeC0gYW5kIHktYXhpcyBzZXBhcmF0ZWx5LlxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5BYnN0cmFjdEZpbHRlclxuICogQG1lbWJlcm9mIFBJWEkuZmlsdGVyc1xuICovXG5mdW5jdGlvbiBEcm9wU2hhZG93RmlsdGVyKClcbntcbiAgICBjb3JlLkFic3RyYWN0RmlsdGVyLmNhbGwodGhpcyk7XG5cbiAgICB0aGlzLmJsdXJYRmlsdGVyID0gbmV3IEJsdXJYRmlsdGVyKCk7XG4gICAgdGhpcy5ibHVyWVRpbnRGaWx0ZXIgPSBuZXcgQmx1cllUaW50RmlsdGVyKCk7XG5cbiAgICB0aGlzLmRlZmF1bHRGaWx0ZXIgPSBuZXcgY29yZS5BYnN0cmFjdEZpbHRlcigpO1xuXG4gICAgdGhpcy5wYWRkaW5nID0gMzA7XG5cbiAgICB0aGlzLl9kaXJ0eVBvc2l0aW9uID0gdHJ1ZTtcbiAgICB0aGlzLl9hbmdsZSA9IDQ1ICogTWF0aC5QSSAvIDE4MDtcbiAgICB0aGlzLl9kaXN0YW5jZSA9IDEwO1xuICAgIHRoaXMuYWxwaGEgPSAwLjc1O1xuICAgIHRoaXMuaGlkZU9iamVjdCA9IGZhbHNlO1xuICAgIHRoaXMuYmxlbmRNb2RlID0gY29yZS5CTEVORF9NT0RFUy5NVUxUSVBMWTtcbn1cblxuRHJvcFNoYWRvd0ZpbHRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuQWJzdHJhY3RGaWx0ZXIucHJvdG90eXBlKTtcbkRyb3BTaGFkb3dGaWx0ZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gRHJvcFNoYWRvd0ZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gRHJvcFNoYWRvd0ZpbHRlcjtcblxuRHJvcFNoYWRvd0ZpbHRlci5wcm90b3R5cGUuYXBwbHlGaWx0ZXIgPSBmdW5jdGlvbiAocmVuZGVyZXIsIGlucHV0LCBvdXRwdXQpXG57XG4gICAgdmFyIHJlbmRlclRhcmdldCA9IHJlbmRlcmVyLmZpbHRlck1hbmFnZXIuZ2V0UmVuZGVyVGFyZ2V0KHRydWUpO1xuXG4gICAgLy9UT0RPIC0gY29weVRleFN1YkltYWdlMkQgY291bGQgYmUgdXNlZCBoZXJlP1xuICAgIGlmKHRoaXMuX2RpcnR5UG9zaXRpb24pXG4gICAge1xuICAgICAgICB0aGlzLl9kaXJ0eVBvc2l0aW9uID0gZmFsc2U7XG5cbiAgICAgICAgdGhpcy5ibHVyWVRpbnRGaWx0ZXIudW5pZm9ybXMub2Zmc2V0LnZhbHVlWzBdID0gTWF0aC5zaW4odGhpcy5fYW5nbGUpICogdGhpcy5fZGlzdGFuY2U7XG4gICAgICAgIHRoaXMuYmx1cllUaW50RmlsdGVyLnVuaWZvcm1zLm9mZnNldC52YWx1ZVsxXSA9IE1hdGguY29zKHRoaXMuX2FuZ2xlKSAqIHRoaXMuX2Rpc3RhbmNlO1xuICAgIH1cblxuICAgIHRoaXMuYmx1clhGaWx0ZXIuYXBwbHlGaWx0ZXIocmVuZGVyZXIsIGlucHV0LCByZW5kZXJUYXJnZXQpO1xuXG4gICAgcmVuZGVyZXIuYmxlbmRNb2RlTWFuYWdlci5zZXRCbGVuZE1vZGUodGhpcy5ibGVuZE1vZGUpO1xuXG4gICAgdGhpcy5ibHVyWVRpbnRGaWx0ZXIuYXBwbHlGaWx0ZXIocmVuZGVyZXIsIHJlbmRlclRhcmdldCwgb3V0cHV0KTtcblxuICAgIHJlbmRlcmVyLmJsZW5kTW9kZU1hbmFnZXIuc2V0QmxlbmRNb2RlKGNvcmUuQkxFTkRfTU9ERVMuTk9STUFMKTtcblxuICAgIGlmKCF0aGlzLmhpZGVPYmplY3QpXG4gICAge1xuXG4gICAgICAgIHRoaXMuZGVmYXVsdEZpbHRlci5hcHBseUZpbHRlcihyZW5kZXJlciwgaW5wdXQsIG91dHB1dCk7XG4gICAgfVxuXG5cbiAgICByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLnJldHVyblJlbmRlclRhcmdldChyZW5kZXJUYXJnZXQpO1xufTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoRHJvcFNoYWRvd0ZpbHRlci5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBzdHJlbmd0aCBvZiBib3RoIHRoZSBibHVyWCBhbmQgYmx1clkgcHJvcGVydGllcyBzaW11bHRhbmVvdXNseVxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJPZiBQSVhJLmZpbHRlcnMuRHJvcFNoYWRvd0ZpbHRlciNcbiAgICAgKiBAZGVmYXVsdCAyXG4gICAgICovXG4gICAgYmx1cjoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmJsdXJYRmlsdGVyLmJsdXI7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmJsdXJYRmlsdGVyLmJsdXIgPSB0aGlzLmJsdXJZVGludEZpbHRlci5ibHVyID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgc3RyZW5ndGggb2YgdGhlIGJsdXJYIHByb3BlcnR5XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlck9mIFBJWEkuZmlsdGVycy5Ecm9wU2hhZG93RmlsdGVyI1xuICAgICAqIEBkZWZhdWx0IDJcbiAgICAgKi9cbiAgICBibHVyWDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmJsdXJYRmlsdGVyLmJsdXI7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmJsdXJYRmlsdGVyLmJsdXIgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBzdHJlbmd0aCBvZiB0aGUgYmx1clkgcHJvcGVydHlcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyT2YgUElYSS5maWx0ZXJzLkRyb3BTaGFkb3dGaWx0ZXIjXG4gICAgICogQGRlZmF1bHQgMlxuICAgICAqL1xuICAgIGJsdXJZOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuYmx1cllUaW50RmlsdGVyLmJsdXI7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmJsdXJZVGludEZpbHRlci5ibHVyID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgY29sb3Igb2YgdGhlIHNoYWRvd1xuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJPZiBQSVhJLmZpbHRlcnMuRHJvcFNoYWRvd0ZpbHRlciNcbiAgICAgKi9cbiAgICBjb2xvcjoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiAgY29yZS51dGlscy5yZ2IyaGV4KCB0aGlzLmJsdXJZVGludEZpbHRlci51bmlmb3Jtcy5jb2xvci52YWx1ZSApO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5ibHVyWVRpbnRGaWx0ZXIudW5pZm9ybXMuY29sb3IudmFsdWUgPSBjb3JlLnV0aWxzLmhleDJyZ2IodmFsdWUpO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIGFscGhhIG9mIHRoZSBzaGFkb3dcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyT2YgUElYSS5maWx0ZXJzLkRyb3BTaGFkb3dGaWx0ZXIjXG4gICAgICovXG4gICAgYWxwaGE6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gIHRoaXMuYmx1cllUaW50RmlsdGVyLnVuaWZvcm1zLmFscGhhLnZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5ibHVyWVRpbnRGaWx0ZXIudW5pZm9ybXMuYWxwaGEudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBkaXN0YW5jZSBvZiB0aGUgc2hhZG93XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlck9mIFBJWEkuZmlsdGVycy5Ecm9wU2hhZG93RmlsdGVyI1xuICAgICAqL1xuICAgIGRpc3RhbmNlOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuICB0aGlzLl9kaXN0YW5jZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuX2RpcnR5UG9zaXRpb24gPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy5fZGlzdGFuY2UgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBhbmdsZSBvZiB0aGUgc2hhZG93XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlck9mIFBJWEkuZmlsdGVycy5Ecm9wU2hhZG93RmlsdGVyI1xuICAgICAqL1xuICAgIGFuZ2xlOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuICB0aGlzLl9hbmdsZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuX2RpcnR5UG9zaXRpb24gPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy5fYW5nbGUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi8uLi9jb3JlJyk7XG4vLyBAc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9zdWJzdGFjay9icmZzL2lzc3Vlcy8yNVxuXG5cbi8qKlxuICogVGhpcyBncmV5c2NhbGVzIHRoZSBwYWxldHRlIG9mIHlvdXIgRGlzcGxheSBPYmplY3RzLlxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5BYnN0cmFjdEZpbHRlclxuICogQG1lbWJlcm9mIFBJWEkuZmlsdGVyc1xuICovXG5mdW5jdGlvbiBHcmF5RmlsdGVyKClcbntcbiAgICBjb3JlLkFic3RyYWN0RmlsdGVyLmNhbGwodGhpcyxcbiAgICAgICAgLy8gdmVydGV4IHNoYWRlclxuICAgICAgICBudWxsLFxuICAgICAgICAvLyBmcmFnbWVudCBzaGFkZXJcbiAgICAgICAgXCJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcXG5cXG52YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDtcXG52YXJ5aW5nIHZlYzQgdkNvbG9yO1xcblxcbnVuaWZvcm0gc2FtcGxlcjJEIHVTYW1wbGVyO1xcbnVuaWZvcm0gZmxvYXQgZ3JheTtcXG5cXG52b2lkIG1haW4odm9pZClcXG57XFxuICAgZ2xfRnJhZ0NvbG9yID0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2VGV4dHVyZUNvb3JkKTtcXG4gICBnbF9GcmFnQ29sb3IucmdiID0gbWl4KGdsX0ZyYWdDb2xvci5yZ2IsIHZlYzMoMC4yMTI2KmdsX0ZyYWdDb2xvci5yICsgMC43MTUyKmdsX0ZyYWdDb2xvci5nICsgMC4wNzIyKmdsX0ZyYWdDb2xvci5iKSwgZ3JheSk7XFxufVxcblwiLFxuICAgICAgICAvLyBzZXQgdGhlIHVuaWZvcm1zXG4gICAgICAgIHtcbiAgICAgICAgICAgIGdyYXk6IHsgdHlwZTogJzFmJywgdmFsdWU6IDEgfVxuICAgICAgICB9XG4gICAgKTtcbn1cblxuR3JheUZpbHRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuQWJzdHJhY3RGaWx0ZXIucHJvdG90eXBlKTtcbkdyYXlGaWx0ZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gR3JheUZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gR3JheUZpbHRlcjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoR3JheUZpbHRlci5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBUaGUgc3RyZW5ndGggb2YgdGhlIGdyYXkuIDEgd2lsbCBtYWtlIHRoZSBvYmplY3QgYmxhY2sgYW5kIHdoaXRlLCAwIHdpbGwgbWFrZSB0aGUgb2JqZWN0IGl0cyBub3JtYWwgY29sb3IuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5HcmF5RmlsdGVyI1xuICAgICAqL1xuICAgIGdyYXk6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy51bmlmb3Jtcy5ncmF5LnZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy5ncmF5LnZhbHVlID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG59KTtcbiIsIi8qKlxuICogQGZpbGUgICAgICAgIE1haW4gZXhwb3J0IG9mIHRoZSBQSVhJIGZpbHRlcnMgbGlicmFyeVxuICogQGF1dGhvciAgICAgIE1hdCBHcm92ZXMgPG1hdEBnb29kYm95ZGlnaXRhbC5jb20+XG4gKiBAY29weXJpZ2h0ICAgMjAxMy0yMDE1IEdvb2RCb3lEaWdpdGFsXG4gKiBAbGljZW5zZSAgICAge0BsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9waXhpanMvcGl4aS5qcy9ibG9iL21hc3Rlci9MSUNFTlNFfE1JVCBMaWNlbnNlfVxuICovXG5cbi8qKlxuICogQG5hbWVzcGFjZSBQSVhJLmZpbHRlcnNcbiAqL1xubW9kdWxlLmV4cG9ydHMgPSB7XG4gICAgQXNjaWlGaWx0ZXI6ICAgICAgICByZXF1aXJlKCcuL2FzY2lpL0FzY2lpRmlsdGVyJyksXG4gICAgQmxvb21GaWx0ZXI6ICAgICAgICByZXF1aXJlKCcuL2Jsb29tL0Jsb29tRmlsdGVyJyksXG4gICAgQmx1ckZpbHRlcjogICAgICAgICByZXF1aXJlKCcuL2JsdXIvQmx1ckZpbHRlcicpLFxuICAgIEJsdXJYRmlsdGVyOiAgICAgICAgcmVxdWlyZSgnLi9ibHVyL0JsdXJYRmlsdGVyJyksXG4gICAgQmx1cllGaWx0ZXI6ICAgICAgICByZXF1aXJlKCcuL2JsdXIvQmx1cllGaWx0ZXInKSxcbiAgICBCbHVyRGlyRmlsdGVyOiAgICAgIHJlcXVpcmUoJy4vYmx1ci9CbHVyRGlyRmlsdGVyJyksXG4gICAgQ29sb3JNYXRyaXhGaWx0ZXI6ICByZXF1aXJlKCcuL2NvbG9yL0NvbG9yTWF0cml4RmlsdGVyJyksXG4gICAgQ29sb3JTdGVwRmlsdGVyOiAgICByZXF1aXJlKCcuL2NvbG9yL0NvbG9yU3RlcEZpbHRlcicpLFxuICAgIENvbnZvbHV0aW9uRmlsdGVyOiAgcmVxdWlyZSgnLi9jb252b2x1dGlvbi9Db252b2x1dGlvbkZpbHRlcicpLFxuICAgIENyb3NzSGF0Y2hGaWx0ZXI6ICAgcmVxdWlyZSgnLi9jcm9zc2hhdGNoL0Nyb3NzSGF0Y2hGaWx0ZXInKSxcbiAgICBEaXNwbGFjZW1lbnRGaWx0ZXI6IHJlcXVpcmUoJy4vZGlzcGxhY2VtZW50L0Rpc3BsYWNlbWVudEZpbHRlcicpLFxuICAgIERvdFNjcmVlbkZpbHRlcjogICAgcmVxdWlyZSgnLi9kb3QvRG90U2NyZWVuRmlsdGVyJyksXG4gICAgR3JheUZpbHRlcjogICAgICAgICByZXF1aXJlKCcuL2dyYXkvR3JheUZpbHRlcicpLFxuICAgIERyb3BTaGFkb3dGaWx0ZXI6ICAgcmVxdWlyZSgnLi9kcm9wc2hhZG93L0Ryb3BTaGFkb3dGaWx0ZXInKSxcbiAgICBJbnZlcnRGaWx0ZXI6ICAgICAgIHJlcXVpcmUoJy4vaW52ZXJ0L0ludmVydEZpbHRlcicpLFxuICAgIE5vaXNlRmlsdGVyOiAgICAgICAgcmVxdWlyZSgnLi9ub2lzZS9Ob2lzZUZpbHRlcicpLFxuICAgIFBpeGVsYXRlRmlsdGVyOiAgICAgcmVxdWlyZSgnLi9waXhlbGF0ZS9QaXhlbGF0ZUZpbHRlcicpLFxuICAgIFJHQlNwbGl0RmlsdGVyOiAgICAgcmVxdWlyZSgnLi9yZ2IvUkdCU3BsaXRGaWx0ZXInKSxcbiAgICBTaG9ja3dhdmVGaWx0ZXI6ICAgIHJlcXVpcmUoJy4vc2hvY2t3YXZlL1Nob2Nrd2F2ZUZpbHRlcicpLFxuICAgIFNlcGlhRmlsdGVyOiAgICAgICAgcmVxdWlyZSgnLi9zZXBpYS9TZXBpYUZpbHRlcicpLFxuICAgIFNtYXJ0Qmx1ckZpbHRlcjogICAgcmVxdWlyZSgnLi9ibHVyL1NtYXJ0Qmx1ckZpbHRlcicpLFxuICAgIFRpbHRTaGlmdEZpbHRlcjogICAgcmVxdWlyZSgnLi90aWx0c2hpZnQvVGlsdFNoaWZ0RmlsdGVyJyksXG4gICAgVGlsdFNoaWZ0WEZpbHRlcjogICByZXF1aXJlKCcuL3RpbHRzaGlmdC9UaWx0U2hpZnRYRmlsdGVyJyksXG4gICAgVGlsdFNoaWZ0WUZpbHRlcjogICByZXF1aXJlKCcuL3RpbHRzaGlmdC9UaWx0U2hpZnRZRmlsdGVyJyksXG4gICAgVHdpc3RGaWx0ZXI6ICAgICAgICByZXF1aXJlKCcuL3R3aXN0L1R3aXN0RmlsdGVyJylcbn07XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uLy4uL2NvcmUnKTtcbi8vIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL3N1YnN0YWNrL2JyZnMvaXNzdWVzLzI1XG5cblxuLyoqXG4gKiBUaGlzIGludmVydHMgeW91ciBEaXNwbGF5IE9iamVjdHMgY29sb3JzLlxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5BYnN0cmFjdEZpbHRlclxuICogQG1lbWJlcm9mIFBJWEkuZmlsdGVyc1xuICovXG5mdW5jdGlvbiBJbnZlcnRGaWx0ZXIoKVxue1xuICAgIGNvcmUuQWJzdHJhY3RGaWx0ZXIuY2FsbCh0aGlzLFxuICAgICAgICAvLyB2ZXJ0ZXggc2hhZGVyXG4gICAgICAgIG51bGwsXG4gICAgICAgIC8vIGZyYWdtZW50IHNoYWRlclxuICAgICAgICBcInByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xcblxcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xcblxcbnVuaWZvcm0gZmxvYXQgaW52ZXJ0O1xcbnVuaWZvcm0gc2FtcGxlcjJEIHVTYW1wbGVyO1xcblxcbnZvaWQgbWFpbih2b2lkKVxcbntcXG4gICAgZ2xfRnJhZ0NvbG9yID0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2VGV4dHVyZUNvb3JkKTtcXG5cXG4gICAgZ2xfRnJhZ0NvbG9yLnJnYiA9IG1peCggKHZlYzMoMSktZ2xfRnJhZ0NvbG9yLnJnYikgKiBnbF9GcmFnQ29sb3IuYSwgZ2xfRnJhZ0NvbG9yLnJnYiwgMS4wIC0gaW52ZXJ0KTtcXG59XFxuXCIsXG4gICAgICAgIC8vIGN1c3RvbSB1bmlmb3Jtc1xuICAgICAgICB7XG4gICAgICAgICAgICBpbnZlcnQ6IHsgdHlwZTogJzFmJywgdmFsdWU6IDEgfVxuICAgICAgICB9XG4gICAgKTtcbn1cblxuSW52ZXJ0RmlsdGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoY29yZS5BYnN0cmFjdEZpbHRlci5wcm90b3R5cGUpO1xuSW52ZXJ0RmlsdGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IEludmVydEZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gSW52ZXJ0RmlsdGVyO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhJbnZlcnRGaWx0ZXIucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogVGhlIHN0cmVuZ3RoIG9mIHRoZSBpbnZlcnQuIGAxYCB3aWxsIGZ1bGx5IGludmVydCB0aGUgY29sb3JzLCBhbmRcbiAgICAgKiBgMGAgd2lsbCBtYWtlIHRoZSBvYmplY3QgaXRzIG5vcm1hbCBjb2xvci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLkludmVydEZpbHRlciNcbiAgICAgKi9cbiAgICBpbnZlcnQ6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy51bmlmb3Jtcy5pbnZlcnQudmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLmludmVydC52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfVxufSk7XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uLy4uL2NvcmUnKTtcbi8vIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL3N1YnN0YWNrL2JyZnMvaXNzdWVzLzI1XG5cblxuLyoqXG4gKiBAYXV0aG9yIFZpY28gQHZpY29jb3RlYVxuICogb3JpZ2luYWwgZmlsdGVyOiBodHRwczovL2dpdGh1Yi5jb20vZXZhbncvZ2xmeC5qcy9ibG9iL21hc3Rlci9zcmMvZmlsdGVycy9hZGp1c3Qvbm9pc2UuanNcbiAqL1xuXG4vKipcbiAqIEEgTm9pc2UgZWZmZWN0IGZpbHRlci5cbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQWJzdHJhY3RGaWx0ZXJcbiAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnNcbiAqL1xuZnVuY3Rpb24gTm9pc2VGaWx0ZXIoKVxue1xuICAgIGNvcmUuQWJzdHJhY3RGaWx0ZXIuY2FsbCh0aGlzLFxuICAgICAgICAvLyB2ZXJ0ZXggc2hhZGVyXG4gICAgICAgIG51bGwsXG4gICAgICAgIC8vIGZyYWdtZW50IHNoYWRlclxuICAgICAgICBcInByZWNpc2lvbiBoaWdocCBmbG9hdDtcXG5cXG52YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDtcXG52YXJ5aW5nIHZlYzQgdkNvbG9yO1xcblxcbnVuaWZvcm0gZmxvYXQgbm9pc2U7XFxudW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXI7XFxuXFxuZmxvYXQgcmFuZCh2ZWMyIGNvKVxcbntcXG4gICAgcmV0dXJuIGZyYWN0KHNpbihkb3QoY28ueHksIHZlYzIoMTIuOTg5OCwgNzguMjMzKSkpICogNDM3NTguNTQ1Myk7XFxufVxcblxcbnZvaWQgbWFpbigpXFxue1xcbiAgICB2ZWM0IGNvbG9yID0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2VGV4dHVyZUNvb3JkKTtcXG5cXG4gICAgZmxvYXQgZGlmZiA9IChyYW5kKHZUZXh0dXJlQ29vcmQpIC0gMC41KSAqIG5vaXNlO1xcblxcbiAgICBjb2xvci5yICs9IGRpZmY7XFxuICAgIGNvbG9yLmcgKz0gZGlmZjtcXG4gICAgY29sb3IuYiArPSBkaWZmO1xcblxcbiAgICBnbF9GcmFnQ29sb3IgPSBjb2xvcjtcXG59XFxuXCIsXG4gICAgICAgIC8vIGN1c3RvbSB1bmlmb3Jtc1xuICAgICAgICB7XG4gICAgICAgICAgICBub2lzZTogeyB0eXBlOiAnMWYnLCB2YWx1ZTogMC41IH1cbiAgICAgICAgfVxuICAgICk7XG59XG5cbk5vaXNlRmlsdGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoY29yZS5BYnN0cmFjdEZpbHRlci5wcm90b3R5cGUpO1xuTm9pc2VGaWx0ZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gTm9pc2VGaWx0ZXI7XG5tb2R1bGUuZXhwb3J0cyA9IE5vaXNlRmlsdGVyO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhOb2lzZUZpbHRlci5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBUaGUgYW1vdW50IG9mIG5vaXNlIHRvIGFwcGx5LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuTm9pc2VGaWx0ZXIjXG4gICAgICogQGRlZmF1bHQgMC41XG4gICAgICovXG4gICAgbm9pc2U6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy51bmlmb3Jtcy5ub2lzZS52YWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudW5pZm9ybXMubm9pc2UudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi8uLi9jb3JlJyk7XG4vLyBAc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9zdWJzdGFjay9icmZzL2lzc3Vlcy8yNVxuXG5cbi8qKlxuICogVGhpcyBmaWx0ZXIgYXBwbGllcyBhIHBpeGVsYXRlIGVmZmVjdCBtYWtpbmcgZGlzcGxheSBvYmplY3RzIGFwcGVhciAnYmxvY2t5Jy5cbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQWJzdHJhY3RGaWx0ZXJcbiAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnNcbiAqL1xuZnVuY3Rpb24gUGl4ZWxhdGVGaWx0ZXIoKVxue1xuICAgIGNvcmUuQWJzdHJhY3RGaWx0ZXIuY2FsbCh0aGlzLFxuICAgICAgICAvLyB2ZXJ0ZXggc2hhZGVyXG4gICAgICAgIG51bGwsXG4gICAgICAgIC8vIGZyYWdtZW50IHNoYWRlclxuICAgICAgICBcInByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xcblxcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xcblxcbnVuaWZvcm0gdmVjNCBkaW1lbnNpb25zO1xcbnVuaWZvcm0gdmVjMiBwaXhlbFNpemU7XFxudW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXI7XFxuXFxudm9pZCBtYWluKHZvaWQpXFxue1xcbiAgICB2ZWMyIGNvb3JkID0gdlRleHR1cmVDb29yZDtcXG5cXG4gICAgdmVjMiBzaXplID0gZGltZW5zaW9ucy54eSAvIHBpeGVsU2l6ZTtcXG5cXG4gICAgdmVjMiBjb2xvciA9IGZsb29yKCAoIHZUZXh0dXJlQ29vcmQgKiBzaXplICkgKSAvIHNpemUgKyBwaXhlbFNpemUvZGltZW5zaW9ucy54eSAqIDAuNTtcXG5cXG4gICAgZ2xfRnJhZ0NvbG9yID0gdGV4dHVyZTJEKHVTYW1wbGVyLCBjb2xvcik7XFxufVxcblwiLFxuICAgICAgICAvLyBjdXN0b20gdW5pZm9ybXNcbiAgICAgICAge1xuICAgICAgICAgICAgZGltZW5zaW9uczogeyB0eXBlOiAnNGZ2JywgIHZhbHVlOiBuZXcgRmxvYXQzMkFycmF5KFswLCAwLCAwLCAwXSkgfSxcbiAgICAgICAgICAgIHBpeGVsU2l6ZTogIHsgdHlwZTogJ3YyJywgICB2YWx1ZTogeyB4OiAxMCwgeTogMTAgfSB9XG4gICAgICAgIH1cbiAgICApO1xufVxuXG5QaXhlbGF0ZUZpbHRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuQWJzdHJhY3RGaWx0ZXIucHJvdG90eXBlKTtcblBpeGVsYXRlRmlsdGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFBpeGVsYXRlRmlsdGVyO1xubW9kdWxlLmV4cG9ydHMgPSBQaXhlbGF0ZUZpbHRlcjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoUGl4ZWxhdGVGaWx0ZXIucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogVGhpcyBhIHBvaW50IHRoYXQgZGVzY3JpYmVzIHRoZSBzaXplIG9mIHRoZSBibG9ja3MuXG4gICAgICogeCBpcyB0aGUgd2lkdGggb2YgdGhlIGJsb2NrIGFuZCB5IGlzIHRoZSBoZWlnaHQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlBvaW50fVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuUGl4ZWxhdGVGaWx0ZXIjXG4gICAgICovXG4gICAgc2l6ZToge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVuaWZvcm1zLnBpeGVsU2l6ZS52YWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudW5pZm9ybXMucGl4ZWxTaXplLnZhbHVlID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG59KTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vLi4vY29yZScpO1xuLy8gQHNlZSBodHRwczovL2dpdGh1Yi5jb20vc3Vic3RhY2svYnJmcy9pc3N1ZXMvMjVcblxuXG4vKipcbiAqIEFuIFJHQiBTcGxpdCBGaWx0ZXIuXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLkFic3RyYWN0RmlsdGVyXG4gKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzXG4gKi9cbmZ1bmN0aW9uIFJHQlNwbGl0RmlsdGVyKClcbntcbiAgICBjb3JlLkFic3RyYWN0RmlsdGVyLmNhbGwodGhpcyxcbiAgICAgICAgLy8gdmVydGV4IHNoYWRlclxuICAgICAgICBudWxsLFxuICAgICAgICAvLyBmcmFnbWVudCBzaGFkZXJcbiAgICAgICAgXCJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcXG5cXG52YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDtcXG5cXG51bmlmb3JtIHNhbXBsZXIyRCB1U2FtcGxlcjtcXG51bmlmb3JtIHZlYzQgZGltZW5zaW9ucztcXG51bmlmb3JtIHZlYzIgcmVkO1xcbnVuaWZvcm0gdmVjMiBncmVlbjtcXG51bmlmb3JtIHZlYzIgYmx1ZTtcXG5cXG52b2lkIG1haW4odm9pZClcXG57XFxuICAgZ2xfRnJhZ0NvbG9yLnIgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZUZXh0dXJlQ29vcmQgKyByZWQvZGltZW5zaW9ucy54eSkucjtcXG4gICBnbF9GcmFnQ29sb3IuZyA9IHRleHR1cmUyRCh1U2FtcGxlciwgdlRleHR1cmVDb29yZCArIGdyZWVuL2RpbWVuc2lvbnMueHkpLmc7XFxuICAgZ2xfRnJhZ0NvbG9yLmIgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZUZXh0dXJlQ29vcmQgKyBibHVlL2RpbWVuc2lvbnMueHkpLmI7XFxuICAgZ2xfRnJhZ0NvbG9yLmEgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZUZXh0dXJlQ29vcmQpLmE7XFxufVxcblwiLFxuICAgICAgICAvLyBjdXN0b20gdW5pZm9ybXNcbiAgICAgICAge1xuICAgICAgICAgICAgcmVkOiAgICAgICAgeyB0eXBlOiAndjInLCB2YWx1ZTogeyB4OiAyMCwgeTogMjAgfSB9LFxuICAgICAgICAgICAgZ3JlZW46ICAgICAgeyB0eXBlOiAndjInLCB2YWx1ZTogeyB4OiAtMjAsIHk6IDIwIH0gfSxcbiAgICAgICAgICAgIGJsdWU6ICAgICAgIHsgdHlwZTogJ3YyJywgdmFsdWU6IHsgeDogMjAsIHk6IC0yMCB9IH0sXG4gICAgICAgICAgICBkaW1lbnNpb25zOiB7IHR5cGU6ICc0ZnYnLCB2YWx1ZTogWzAsIDAsIDAsIDBdIH1cbiAgICAgICAgfVxuICAgICk7XG59XG5cblJHQlNwbGl0RmlsdGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoY29yZS5BYnN0cmFjdEZpbHRlci5wcm90b3R5cGUpO1xuUkdCU3BsaXRGaWx0ZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gUkdCU3BsaXRGaWx0ZXI7XG5tb2R1bGUuZXhwb3J0cyA9IFJHQlNwbGl0RmlsdGVyO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhSR0JTcGxpdEZpbHRlci5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBSZWQgY2hhbm5lbCBvZmZzZXQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlBvaW50fVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuUkdCU3BsaXRGaWx0ZXIjXG4gICAgICovXG4gICAgcmVkOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudW5pZm9ybXMucmVkLnZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy5yZWQudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBHcmVlbiBjaGFubmVsIG9mZnNldC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuUG9pbnR9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5SR0JTcGxpdEZpbHRlciNcbiAgICAgKi9cbiAgICBncmVlbjoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVuaWZvcm1zLmdyZWVuLnZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy5ncmVlbi52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIEJsdWUgb2Zmc2V0LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5Qb2ludH1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLlJHQlNwbGl0RmlsdGVyI1xuICAgICAqL1xuICAgIGJsdWU6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy51bmlmb3Jtcy5ibHVlLnZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy5ibHVlLnZhbHVlID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG59KTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vLi4vY29yZScpO1xuLy8gQHNlZSBodHRwczovL2dpdGh1Yi5jb20vc3Vic3RhY2svYnJmcy9pc3N1ZXMvMjVcblxuXG4vKipcbiAqIFRoaXMgYXBwbGllcyBhIHNlcGlhIGVmZmVjdCB0byB5b3VyIERpc3BsYXkgT2JqZWN0cy5cbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQWJzdHJhY3RGaWx0ZXJcbiAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnNcbiAqL1xuZnVuY3Rpb24gU2VwaWFGaWx0ZXIoKVxue1xuICAgIGNvcmUuQWJzdHJhY3RGaWx0ZXIuY2FsbCh0aGlzLFxuICAgICAgICAvLyB2ZXJ0ZXggc2hhZGVyXG4gICAgICAgIG51bGwsXG4gICAgICAgIC8vIGZyYWdtZW50IHNoYWRlclxuICAgICAgICBcInByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xcblxcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xcblxcbnVuaWZvcm0gc2FtcGxlcjJEIHVTYW1wbGVyO1xcbnVuaWZvcm0gZmxvYXQgc2VwaWE7XFxuXFxuY29uc3QgbWF0MyBzZXBpYU1hdHJpeCA9IG1hdDMoMC4zNTg4LCAwLjcwNDQsIDAuMTM2OCwgMC4yOTkwLCAwLjU4NzAsIDAuMTE0MCwgMC4yMzkyLCAwLjQ2OTYsIDAuMDkxMik7XFxuXFxudm9pZCBtYWluKHZvaWQpXFxue1xcbiAgIGdsX0ZyYWdDb2xvciA9IHRleHR1cmUyRCh1U2FtcGxlciwgdlRleHR1cmVDb29yZCk7XFxuICAgZ2xfRnJhZ0NvbG9yLnJnYiA9IG1peCggZ2xfRnJhZ0NvbG9yLnJnYiwgZ2xfRnJhZ0NvbG9yLnJnYiAqIHNlcGlhTWF0cml4LCBzZXBpYSk7XFxufVxcblwiLFxuICAgICAgICAvLyBjdXN0b20gdW5pZm9ybXNcbiAgICAgICAge1xuICAgICAgICAgICAgc2VwaWE6IHsgdHlwZTogJzFmJywgdmFsdWU6IDEgfVxuICAgICAgICB9XG4gICAgKTtcbn1cblxuU2VwaWFGaWx0ZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShjb3JlLkFic3RyYWN0RmlsdGVyLnByb3RvdHlwZSk7XG5TZXBpYUZpbHRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBTZXBpYUZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gU2VwaWFGaWx0ZXI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKFNlcGlhRmlsdGVyLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFRoZSBzdHJlbmd0aCBvZiB0aGUgc2VwaWEuIGAxYCB3aWxsIGFwcGx5IHRoZSBmdWxsIHNlcGlhIGVmZmVjdCwgYW5kXG4gICAgICogYDBgIHdpbGwgbWFrZSB0aGUgb2JqZWN0IGl0cyBub3JtYWwgY29sb3IuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5TZXBpYUZpbHRlciNcbiAgICAgKi9cbiAgICBzZXBpYToge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVuaWZvcm1zLnNlcGlhLnZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy5zZXBpYS52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfVxufSk7XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uLy4uL2NvcmUnKTtcbi8vIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL3N1YnN0YWNrL2JyZnMvaXNzdWVzLzI1XG5cblxuLyoqXG4gKiBUaGUgQ29sb3JNYXRyaXhGaWx0ZXIgY2xhc3MgbGV0cyB5b3UgYXBwbHkgYSA0eDQgbWF0cml4IHRyYW5zZm9ybWF0aW9uIG9uIHRoZSBSR0JBXG4gKiBjb2xvciBhbmQgYWxwaGEgdmFsdWVzIG9mIGV2ZXJ5IHBpeGVsIG9uIHlvdXIgZGlzcGxheU9iamVjdCB0byBwcm9kdWNlIGEgcmVzdWx0XG4gKiB3aXRoIGEgbmV3IHNldCBvZiBSR0JBIGNvbG9yIGFuZCBhbHBoYSB2YWx1ZXMuIEl0J3MgcHJldHR5IHBvd2VyZnVsIVxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5BYnN0cmFjdEZpbHRlclxuICogQG1lbWJlcm9mIFBJWEkuZmlsdGVyc1xuICovXG5mdW5jdGlvbiBTaG9ja3dhdmVGaWx0ZXIoKVxue1xuICAgIGNvcmUuQWJzdHJhY3RGaWx0ZXIuY2FsbCh0aGlzLFxuICAgICAgICAvLyB2ZXJ0ZXggc2hhZGVyXG4gICAgICAgIG51bGwsXG4gICAgICAgIC8vIGZyYWdtZW50IHNoYWRlclxuICAgICAgICBcInByZWNpc2lvbiBsb3dwIGZsb2F0O1xcblxcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xcblxcbnVuaWZvcm0gc2FtcGxlcjJEIHVTYW1wbGVyO1xcblxcbnVuaWZvcm0gdmVjMiBjZW50ZXI7XFxudW5pZm9ybSB2ZWMzIHBhcmFtczsgLy8gMTAuMCwgMC44LCAwLjFcXG51bmlmb3JtIGZsb2F0IHRpbWU7XFxuXFxudm9pZCBtYWluKClcXG57XFxuICAgIHZlYzIgdXYgPSB2VGV4dHVyZUNvb3JkO1xcbiAgICB2ZWMyIHRleENvb3JkID0gdXY7XFxuXFxuICAgIGZsb2F0IGRpc3QgPSBkaXN0YW5jZSh1diwgY2VudGVyKTtcXG5cXG4gICAgaWYgKCAoZGlzdCA8PSAodGltZSArIHBhcmFtcy56KSkgJiYgKGRpc3QgPj0gKHRpbWUgLSBwYXJhbXMueikpIClcXG4gICAge1xcbiAgICAgICAgZmxvYXQgZGlmZiA9IChkaXN0IC0gdGltZSk7XFxuICAgICAgICBmbG9hdCBwb3dEaWZmID0gMS4wIC0gcG93KGFicyhkaWZmKnBhcmFtcy54KSwgcGFyYW1zLnkpO1xcblxcbiAgICAgICAgZmxvYXQgZGlmZlRpbWUgPSBkaWZmICAqIHBvd0RpZmY7XFxuICAgICAgICB2ZWMyIGRpZmZVViA9IG5vcm1hbGl6ZSh1diAtIGNlbnRlcik7XFxuICAgICAgICB0ZXhDb29yZCA9IHV2ICsgKGRpZmZVViAqIGRpZmZUaW1lKTtcXG4gICAgfVxcblxcbiAgICBnbF9GcmFnQ29sb3IgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHRleENvb3JkKTtcXG59XFxuXCIsXG4gICAgICAgIC8vIGN1c3RvbSB1bmlmb3Jtc1xuICAgICAgICB7XG4gICAgICAgICAgICBjZW50ZXI6IHsgdHlwZTogJ3YyJywgdmFsdWU6IHsgeDogMC41LCB5OiAwLjUgfSB9LFxuICAgICAgICAgICAgcGFyYW1zOiB7IHR5cGU6ICd2MycsIHZhbHVlOiB7IHg6IDEwLCB5OiAwLjgsIHo6IDAuMSB9IH0sXG4gICAgICAgICAgICB0aW1lOiB7IHR5cGU6ICcxZicsIHZhbHVlOiAwIH1cbiAgICAgICAgfVxuICAgICk7XG59XG5cblNob2Nrd2F2ZUZpbHRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuQWJzdHJhY3RGaWx0ZXIucHJvdG90eXBlKTtcblNob2Nrd2F2ZUZpbHRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBTaG9ja3dhdmVGaWx0ZXI7XG5tb2R1bGUuZXhwb3J0cyA9IFNob2Nrd2F2ZUZpbHRlcjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoU2hvY2t3YXZlRmlsdGVyLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIGNlbnRlciBvZiB0aGUgc2hvY2t3YXZlIGluIG5vcm1hbGl6ZWQgc2NyZWVuIGNvb3Jkcy4gVGhhdCBpc1xuICAgICAqICgwLDApIGlzIHRoZSB0b3AtbGVmdCBhbmQgKDEsMSkgaXMgdGhlIGJvdHRvbSByaWdodC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge29iamVjdDxzdHJpbmcsIG51bWJlcj59XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5TaG9ja3dhdmVGaWx0ZXIjXG4gICAgICovXG4gICAgY2VudGVyOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudW5pZm9ybXMuY2VudGVyLnZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy5jZW50ZXIudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgcGFyYW1zIG9mIHRoZSBzaG9ja3dhdmUuIFRoZXNlIG1vZGlmeSB0aGUgbG9vayBhbmQgYmVoYXZpb3Igb2ZcbiAgICAgKiB0aGUgc2hvY2t3YXZlIGFzIGl0IHJpcHBsZXMgb3V0LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7b2JqZWN0PHN0cmluZywgbnVtYmVyPn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLlNob2Nrd2F2ZUZpbHRlciNcbiAgICAgKi9cbiAgICBwYXJhbXM6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy51bmlmb3Jtcy5wYXJhbXMudmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLnBhcmFtcy52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfSxcbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBlbGFwc2VkIHRpbWUgb2YgdGhlIHNob2Nrd2F2ZS4gVGhpcyBjb250cm9scyB0aGUgc3BlZWQgYXQgd2hpY2hcbiAgICAgKiB0aGUgc2hvY2t3YXZlIHJpcHBsZXMgb3V0LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuU2hvY2t3YXZlRmlsdGVyI1xuICAgICAqL1xuICAgIHRpbWU6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy51bmlmb3Jtcy50aW1lLnZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy50aW1lLnZhbHVlID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG59KTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vLi4vY29yZScpO1xuLy8gQHNlZSBodHRwczovL2dpdGh1Yi5jb20vc3Vic3RhY2svYnJmcy9pc3N1ZXMvMjVcblxuXG4vKipcbiAqIEBhdXRob3IgVmljbyBAdmljb2NvdGVhXG4gKiBvcmlnaW5hbCBmaWx0ZXIgaHR0cHM6Ly9naXRodWIuY29tL2V2YW53L2dsZnguanMvYmxvYi9tYXN0ZXIvc3JjL2ZpbHRlcnMvYmx1ci90aWx0c2hpZnQuanMgYnkgRXZhbiBXYWxsYWNlIDogaHR0cDovL21hZGVieWV2YW4uY29tL1xuICovXG5cbi8qKlxuICogQSBUaWx0U2hpZnRBeGlzRmlsdGVyLlxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5BYnN0cmFjdEZpbHRlclxuICogQG1lbWJlcm9mIFBJWEkuZmlsdGVyc1xuICovXG5mdW5jdGlvbiBUaWx0U2hpZnRBeGlzRmlsdGVyKClcbntcbiAgICBjb3JlLkFic3RyYWN0RmlsdGVyLmNhbGwodGhpcyxcbiAgICAgICAgLy8gdmVydGV4IHNoYWRlclxuICAgICAgICBudWxsLFxuICAgICAgICAvLyBmcmFnbWVudCBzaGFkZXJcbiAgICAgICAgXCJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcXG5cXG52YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDtcXG5cXG51bmlmb3JtIHNhbXBsZXIyRCB1U2FtcGxlcjtcXG51bmlmb3JtIGZsb2F0IGJsdXI7XFxudW5pZm9ybSBmbG9hdCBncmFkaWVudEJsdXI7XFxudW5pZm9ybSB2ZWMyIHN0YXJ0O1xcbnVuaWZvcm0gdmVjMiBlbmQ7XFxudW5pZm9ybSB2ZWMyIGRlbHRhO1xcbnVuaWZvcm0gdmVjMiB0ZXhTaXplO1xcblxcbmZsb2F0IHJhbmRvbSh2ZWMzIHNjYWxlLCBmbG9hdCBzZWVkKVxcbntcXG4gICAgcmV0dXJuIGZyYWN0KHNpbihkb3QoZ2xfRnJhZ0Nvb3JkLnh5eiArIHNlZWQsIHNjYWxlKSkgKiA0Mzc1OC41NDUzICsgc2VlZCk7XFxufVxcblxcbnZvaWQgbWFpbih2b2lkKVxcbntcXG4gICAgdmVjNCBjb2xvciA9IHZlYzQoMC4wKTtcXG4gICAgZmxvYXQgdG90YWwgPSAwLjA7XFxuXFxuICAgIGZsb2F0IG9mZnNldCA9IHJhbmRvbSh2ZWMzKDEyLjk4OTgsIDc4LjIzMywgMTUxLjcxODIpLCAwLjApO1xcbiAgICB2ZWMyIG5vcm1hbCA9IG5vcm1hbGl6ZSh2ZWMyKHN0YXJ0LnkgLSBlbmQueSwgZW5kLnggLSBzdGFydC54KSk7XFxuICAgIGZsb2F0IHJhZGl1cyA9IHNtb290aHN0ZXAoMC4wLCAxLjAsIGFicyhkb3QodlRleHR1cmVDb29yZCAqIHRleFNpemUgLSBzdGFydCwgbm9ybWFsKSkgLyBncmFkaWVudEJsdXIpICogYmx1cjtcXG5cXG4gICAgZm9yIChmbG9hdCB0ID0gLTMwLjA7IHQgPD0gMzAuMDsgdCsrKVxcbiAgICB7XFxuICAgICAgICBmbG9hdCBwZXJjZW50ID0gKHQgKyBvZmZzZXQgLSAwLjUpIC8gMzAuMDtcXG4gICAgICAgIGZsb2F0IHdlaWdodCA9IDEuMCAtIGFicyhwZXJjZW50KTtcXG4gICAgICAgIHZlYzQgc2FtcGxlID0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2VGV4dHVyZUNvb3JkICsgZGVsdGEgLyB0ZXhTaXplICogcGVyY2VudCAqIHJhZGl1cyk7XFxuICAgICAgICBzYW1wbGUucmdiICo9IHNhbXBsZS5hO1xcbiAgICAgICAgY29sb3IgKz0gc2FtcGxlICogd2VpZ2h0O1xcbiAgICAgICAgdG90YWwgKz0gd2VpZ2h0O1xcbiAgICB9XFxuXFxuICAgIGdsX0ZyYWdDb2xvciA9IGNvbG9yIC8gdG90YWw7XFxuICAgIGdsX0ZyYWdDb2xvci5yZ2IgLz0gZ2xfRnJhZ0NvbG9yLmEgKyAwLjAwMDAxO1xcbn1cXG5cIixcbiAgICAgICAgLy8gY3VzdG9tIHVuaWZvcm1zXG4gICAgICAgIHtcbiAgICAgICAgICAgIGJsdXI6ICAgICAgICAgICB7IHR5cGU6ICcxZicsIHZhbHVlOiAxMDAgfSxcbiAgICAgICAgICAgIGdyYWRpZW50Qmx1cjogICB7IHR5cGU6ICcxZicsIHZhbHVlOiA2MDAgfSxcbiAgICAgICAgICAgIHN0YXJ0OiAgICAgICAgICB7IHR5cGU6ICd2MicsIHZhbHVlOiB7IHg6IDAsICAgIHk6IHdpbmRvdy5pbm5lckhlaWdodCAvIDIgfSB9LFxuICAgICAgICAgICAgZW5kOiAgICAgICAgICAgIHsgdHlwZTogJ3YyJywgdmFsdWU6IHsgeDogNjAwLCAgeTogd2luZG93LmlubmVySGVpZ2h0IC8gMiB9IH0sXG4gICAgICAgICAgICBkZWx0YTogICAgICAgICAgeyB0eXBlOiAndjInLCB2YWx1ZTogeyB4OiAzMCwgICB5OiAzMCB9IH0sXG4gICAgICAgICAgICB0ZXhTaXplOiAgICAgICAgeyB0eXBlOiAndjInLCB2YWx1ZTogeyB4OiB3aW5kb3cuaW5uZXJXaWR0aCwgeTogd2luZG93LmlubmVySGVpZ2h0IH0gfVxuICAgICAgICB9XG4gICAgKTtcblxuICAgIHRoaXMudXBkYXRlRGVsdGEoKTtcbn1cblxuVGlsdFNoaWZ0QXhpc0ZpbHRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuQWJzdHJhY3RGaWx0ZXIucHJvdG90eXBlKTtcblRpbHRTaGlmdEF4aXNGaWx0ZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gVGlsdFNoaWZ0QXhpc0ZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gVGlsdFNoaWZ0QXhpc0ZpbHRlcjtcblxuLyoqXG4gKiBVcGRhdGVzIHRoZSBmaWx0ZXIgZGVsdGEgdmFsdWVzLlxuICogVGhpcyBpcyBvdmVycmlkZGVuIGluIHRoZSBYIGFuZCBZIGZpbHRlcnMsIGRvZXMgbm90aGluZyBmb3IgdGhpcyBjbGFzcy5cbiAqXG4gKi9cblRpbHRTaGlmdEF4aXNGaWx0ZXIucHJvdG90eXBlLnVwZGF0ZURlbHRhID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLnVuaWZvcm1zLmRlbHRhLnZhbHVlLnggPSAwO1xuICAgIHRoaXMudW5pZm9ybXMuZGVsdGEudmFsdWUueSA9IDA7XG59O1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhUaWx0U2hpZnRBeGlzRmlsdGVyLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFRoZSBzdHJlbmd0aCBvZiB0aGUgYmx1ci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLlRpbHRTaGlmdEF4aXNGaWx0ZXIjXG4gICAgICovXG4gICAgYmx1cjoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVuaWZvcm1zLmJsdXIudmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLmJsdXIudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBUaGUgc3RyZW5ndGggb2YgdGhlIGdyYWRpZW50IGJsdXIuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5UaWx0U2hpZnRBeGlzRmlsdGVyI1xuICAgICAqL1xuICAgIGdyYWRpZW50Qmx1cjoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVuaWZvcm1zLmdyYWRpZW50Qmx1ci52YWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudW5pZm9ybXMuZ3JhZGllbnRCbHVyLnZhbHVlID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVGhlIFggdmFsdWUgdG8gc3RhcnQgdGhlIGVmZmVjdCBhdC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuUG9pbnR9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5UaWx0U2hpZnRBeGlzRmlsdGVyI1xuICAgICAqL1xuICAgIHN0YXJ0OiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudW5pZm9ybXMuc3RhcnQudmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLnN0YXJ0LnZhbHVlID0gdmFsdWU7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZURlbHRhKCk7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVGhlIFggdmFsdWUgdG8gZW5kIHRoZSBlZmZlY3QgYXQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlBvaW50fVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuVGlsdFNoaWZ0QXhpc0ZpbHRlciNcbiAgICAgKi9cbiAgICBlbmQ6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy51bmlmb3Jtcy5lbmQudmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLmVuZC52YWx1ZSA9IHZhbHVlO1xuICAgICAgICAgICAgdGhpcy51cGRhdGVEZWx0YSgpO1xuICAgICAgICB9XG4gICAgfVxufSk7XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uLy4uL2NvcmUnKSxcbiAgICBUaWx0U2hpZnRYRmlsdGVyID0gcmVxdWlyZSgnLi9UaWx0U2hpZnRYRmlsdGVyJyksXG4gICAgVGlsdFNoaWZ0WUZpbHRlciA9IHJlcXVpcmUoJy4vVGlsdFNoaWZ0WUZpbHRlcicpO1xuXG4vKipcbiAqIEBhdXRob3IgVmljbyBAdmljb2NvdGVhXG4gKiBvcmlnaW5hbCBmaWx0ZXIgaHR0cHM6Ly9naXRodWIuY29tL2V2YW53L2dsZnguanMvYmxvYi9tYXN0ZXIvc3JjL2ZpbHRlcnMvYmx1ci90aWx0c2hpZnQuanMgYnkgRXZhbiBXYWxsYWNlIDogaHR0cDovL21hZGVieWV2YW4uY29tL1xuICovXG5cbi8qKlxuICogQSBUaWx0U2hpZnQgRmlsdGVyLiBNYW5hZ2VzIHRoZSBwYXNzIG9mIGJvdGggYSBUaWx0U2hpZnRYRmlsdGVyIGFuZCBUaWx0U2hpZnRZRmlsdGVyLlxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5BYnN0cmFjdEZpbHRlclxuICogQG1lbWJlcm9mIFBJWEkuZmlsdGVyc1xuICovXG5mdW5jdGlvbiBUaWx0U2hpZnRGaWx0ZXIoKVxue1xuICAgIGNvcmUuQWJzdHJhY3RGaWx0ZXIuY2FsbCh0aGlzKTtcblxuICAgIHRoaXMudGlsdFNoaWZ0WEZpbHRlciA9IG5ldyBUaWx0U2hpZnRYRmlsdGVyKCk7XG4gICAgdGhpcy50aWx0U2hpZnRZRmlsdGVyID0gbmV3IFRpbHRTaGlmdFlGaWx0ZXIoKTtcbn1cblxuVGlsdFNoaWZ0RmlsdGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoY29yZS5BYnN0cmFjdEZpbHRlci5wcm90b3R5cGUpO1xuVGlsdFNoaWZ0RmlsdGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFRpbHRTaGlmdEZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gVGlsdFNoaWZ0RmlsdGVyO1xuXG5UaWx0U2hpZnRGaWx0ZXIucHJvdG90eXBlLmFwcGx5RmlsdGVyID0gZnVuY3Rpb24gKHJlbmRlcmVyLCBpbnB1dCwgb3V0cHV0KVxue1xuICAgIHZhciByZW5kZXJUYXJnZXQgPSByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLmdldFJlbmRlclRhcmdldCh0cnVlKTtcblxuICAgIHRoaXMudGlsdFNoaWZ0WEZpbHRlci5hcHBseUZpbHRlcihyZW5kZXJlciwgaW5wdXQsIHJlbmRlclRhcmdldCk7XG5cbiAgICB0aGlzLnRpbHRTaGlmdFlGaWx0ZXIuYXBwbHlGaWx0ZXIocmVuZGVyZXIsIHJlbmRlclRhcmdldCwgb3V0cHV0KTtcblxuICAgIHJlbmRlcmVyLmZpbHRlck1hbmFnZXIucmV0dXJuUmVuZGVyVGFyZ2V0KHJlbmRlclRhcmdldCk7XG59O1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhUaWx0U2hpZnRGaWx0ZXIucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogVGhlIHN0cmVuZ3RoIG9mIHRoZSBibHVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuVGlsdFNoaWZ0RmlsdGVyI1xuICAgICAqL1xuICAgIGJsdXI6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy50aWx0U2hpZnRYRmlsdGVyLmJsdXI7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnRpbHRTaGlmdFhGaWx0ZXIuYmx1ciA9IHRoaXMudGlsdFNoaWZ0WUZpbHRlci5ibHVyID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVGhlIHN0cmVuZ3RoIG9mIHRoZSBncmFkaWVudCBibHVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuVGlsdFNoaWZ0RmlsdGVyI1xuICAgICAqL1xuICAgIGdyYWRpZW50Qmx1cjoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnRpbHRTaGlmdFhGaWx0ZXIuZ3JhZGllbnRCbHVyO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy50aWx0U2hpZnRYRmlsdGVyLmdyYWRpZW50Qmx1ciA9IHRoaXMudGlsdFNoaWZ0WUZpbHRlci5ncmFkaWVudEJsdXIgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBUaGUgWSB2YWx1ZSB0byBzdGFydCB0aGUgZWZmZWN0IGF0LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuVGlsdFNoaWZ0RmlsdGVyI1xuICAgICAqL1xuICAgIHN0YXJ0OiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudGlsdFNoaWZ0WEZpbHRlci5zdGFydDtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudGlsdFNoaWZ0WEZpbHRlci5zdGFydCA9IHRoaXMudGlsdFNoaWZ0WUZpbHRlci5zdGFydCA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFRoZSBZIHZhbHVlIHRvIGVuZCB0aGUgZWZmZWN0IGF0LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuVGlsdFNoaWZ0RmlsdGVyI1xuICAgICAqL1xuICAgIGVuZDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnRpbHRTaGlmdFhGaWx0ZXIuZW5kO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy50aWx0U2hpZnRYRmlsdGVyLmVuZCA9IHRoaXMudGlsdFNoaWZ0WUZpbHRlci5lbmQgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuIiwidmFyIFRpbHRTaGlmdEF4aXNGaWx0ZXIgPSByZXF1aXJlKCcuL1RpbHRTaGlmdEF4aXNGaWx0ZXInKTtcblxuLyoqXG4gKiBAYXV0aG9yIFZpY28gQHZpY29jb3RlYVxuICogb3JpZ2luYWwgZmlsdGVyIGh0dHBzOi8vZ2l0aHViLmNvbS9ldmFudy9nbGZ4LmpzL2Jsb2IvbWFzdGVyL3NyYy9maWx0ZXJzL2JsdXIvdGlsdHNoaWZ0LmpzIGJ5IEV2YW4gV2FsbGFjZSA6IGh0dHA6Ly9tYWRlYnlldmFuLmNvbS9cbiAqL1xuXG4vKipcbiAqIEEgVGlsdFNoaWZ0WEZpbHRlci5cbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuVGlsdFNoaWZ0QXhpc0ZpbHRlclxuICogQG1lbWJlcm9mIFBJWEkuZmlsdGVyc1xuICovXG5mdW5jdGlvbiBUaWx0U2hpZnRYRmlsdGVyKClcbntcbiAgICBUaWx0U2hpZnRBeGlzRmlsdGVyLmNhbGwodGhpcyk7XG59XG5cblRpbHRTaGlmdFhGaWx0ZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShUaWx0U2hpZnRBeGlzRmlsdGVyLnByb3RvdHlwZSk7XG5UaWx0U2hpZnRYRmlsdGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFRpbHRTaGlmdFhGaWx0ZXI7XG5tb2R1bGUuZXhwb3J0cyA9IFRpbHRTaGlmdFhGaWx0ZXI7XG5cbi8qKlxuICogVXBkYXRlcyB0aGUgZmlsdGVyIGRlbHRhIHZhbHVlcy5cbiAqXG4gKi9cblRpbHRTaGlmdFhGaWx0ZXIucHJvdG90eXBlLnVwZGF0ZURlbHRhID0gZnVuY3Rpb24gKClcbntcbiAgICB2YXIgZHggPSB0aGlzLnVuaWZvcm1zLmVuZC52YWx1ZS54IC0gdGhpcy51bmlmb3Jtcy5zdGFydC52YWx1ZS54O1xuICAgIHZhciBkeSA9IHRoaXMudW5pZm9ybXMuZW5kLnZhbHVlLnkgLSB0aGlzLnVuaWZvcm1zLnN0YXJ0LnZhbHVlLnk7XG4gICAgdmFyIGQgPSBNYXRoLnNxcnQoZHggKiBkeCArIGR5ICogZHkpO1xuXG4gICAgdGhpcy51bmlmb3Jtcy5kZWx0YS52YWx1ZS54ID0gZHggLyBkO1xuICAgIHRoaXMudW5pZm9ybXMuZGVsdGEudmFsdWUueSA9IGR5IC8gZDtcbn07XG4iLCJ2YXIgVGlsdFNoaWZ0QXhpc0ZpbHRlciA9IHJlcXVpcmUoJy4vVGlsdFNoaWZ0QXhpc0ZpbHRlcicpO1xuXG4vKipcbiAqIEBhdXRob3IgVmljbyBAdmljb2NvdGVhXG4gKiBvcmlnaW5hbCBmaWx0ZXIgaHR0cHM6Ly9naXRodWIuY29tL2V2YW53L2dsZnguanMvYmxvYi9tYXN0ZXIvc3JjL2ZpbHRlcnMvYmx1ci90aWx0c2hpZnQuanMgYnkgRXZhbiBXYWxsYWNlIDogaHR0cDovL21hZGVieWV2YW4uY29tL1xuICovXG5cbi8qKlxuICogQSBUaWx0U2hpZnRZRmlsdGVyLlxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5UaWx0U2hpZnRBeGlzRmlsdGVyXG4gKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzXG4gKi9cbmZ1bmN0aW9uIFRpbHRTaGlmdFlGaWx0ZXIoKVxue1xuICAgIFRpbHRTaGlmdEF4aXNGaWx0ZXIuY2FsbCh0aGlzKTtcbn1cblxuVGlsdFNoaWZ0WUZpbHRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFRpbHRTaGlmdEF4aXNGaWx0ZXIucHJvdG90eXBlKTtcblRpbHRTaGlmdFlGaWx0ZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gVGlsdFNoaWZ0WUZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gVGlsdFNoaWZ0WUZpbHRlcjtcblxuLyoqXG4gKiBVcGRhdGVzIHRoZSBmaWx0ZXIgZGVsdGEgdmFsdWVzLlxuICpcbiAqL1xuVGlsdFNoaWZ0WUZpbHRlci5wcm90b3R5cGUudXBkYXRlRGVsdGEgPSBmdW5jdGlvbiAoKVxue1xuICAgIHZhciBkeCA9IHRoaXMudW5pZm9ybXMuZW5kLnZhbHVlLnggLSB0aGlzLnVuaWZvcm1zLnN0YXJ0LnZhbHVlLng7XG4gICAgdmFyIGR5ID0gdGhpcy51bmlmb3Jtcy5lbmQudmFsdWUueSAtIHRoaXMudW5pZm9ybXMuc3RhcnQudmFsdWUueTtcbiAgICB2YXIgZCA9IE1hdGguc3FydChkeCAqIGR4ICsgZHkgKiBkeSk7XG5cbiAgICB0aGlzLnVuaWZvcm1zLmRlbHRhLnZhbHVlLnggPSAtZHkgLyBkO1xuICAgIHRoaXMudW5pZm9ybXMuZGVsdGEudmFsdWUueSA9IGR4IC8gZDtcbn07XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uLy4uL2NvcmUnKTtcbi8vIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL3N1YnN0YWNrL2JyZnMvaXNzdWVzLzI1XG5cblxuLyoqXG4gKiBUaGlzIGZpbHRlciBhcHBsaWVzIGEgdHdpc3QgZWZmZWN0IG1ha2luZyBkaXNwbGF5IG9iamVjdHMgYXBwZWFyIHR3aXN0ZWQgaW4gdGhlIGdpdmVuIGRpcmVjdGlvbi5cbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQWJzdHJhY3RGaWx0ZXJcbiAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnNcbiAqL1xuZnVuY3Rpb24gVHdpc3RGaWx0ZXIoKVxue1xuICAgIGNvcmUuQWJzdHJhY3RGaWx0ZXIuY2FsbCh0aGlzLFxuICAgICAgICAvLyB2ZXJ0ZXggc2hhZGVyXG4gICAgICAgIG51bGwsXG4gICAgICAgIC8vIGZyYWdtZW50IHNoYWRlclxuICAgICAgICBcInByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xcblxcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xcblxcbnVuaWZvcm0gc2FtcGxlcjJEIHVTYW1wbGVyO1xcbnVuaWZvcm0gZmxvYXQgcmFkaXVzO1xcbnVuaWZvcm0gZmxvYXQgYW5nbGU7XFxudW5pZm9ybSB2ZWMyIG9mZnNldDtcXG5cXG52b2lkIG1haW4odm9pZClcXG57XFxuICAgdmVjMiBjb29yZCA9IHZUZXh0dXJlQ29vcmQgLSBvZmZzZXQ7XFxuICAgZmxvYXQgZGlzdCA9IGxlbmd0aChjb29yZCk7XFxuXFxuICAgaWYgKGRpc3QgPCByYWRpdXMpXFxuICAge1xcbiAgICAgICBmbG9hdCByYXRpbyA9IChyYWRpdXMgLSBkaXN0KSAvIHJhZGl1cztcXG4gICAgICAgZmxvYXQgYW5nbGVNb2QgPSByYXRpbyAqIHJhdGlvICogYW5nbGU7XFxuICAgICAgIGZsb2F0IHMgPSBzaW4oYW5nbGVNb2QpO1xcbiAgICAgICBmbG9hdCBjID0gY29zKGFuZ2xlTW9kKTtcXG4gICAgICAgY29vcmQgPSB2ZWMyKGNvb3JkLnggKiBjIC0gY29vcmQueSAqIHMsIGNvb3JkLnggKiBzICsgY29vcmQueSAqIGMpO1xcbiAgIH1cXG5cXG4gICBnbF9GcmFnQ29sb3IgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIGNvb3JkK29mZnNldCk7XFxufVxcblwiLFxuICAgICAgICAvLyBjdXN0b20gdW5pZm9ybXNcbiAgICAgICAge1xuICAgICAgICAgICAgcmFkaXVzOiAgICAgeyB0eXBlOiAnMWYnLCB2YWx1ZTogMC41IH0sXG4gICAgICAgICAgICBhbmdsZTogICAgICB7IHR5cGU6ICcxZicsIHZhbHVlOiA1IH0sXG4gICAgICAgICAgICBvZmZzZXQ6ICAgICB7IHR5cGU6ICd2MicsIHZhbHVlOiB7IHg6IDAuNSwgeTogMC41IH0gfVxuICAgICAgICB9XG4gICAgKTtcbn1cblxuVHdpc3RGaWx0ZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShjb3JlLkFic3RyYWN0RmlsdGVyLnByb3RvdHlwZSk7XG5Ud2lzdEZpbHRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBUd2lzdEZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gVHdpc3RGaWx0ZXI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKFR3aXN0RmlsdGVyLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFRoaXMgcG9pbnQgZGVzY3JpYmVzIHRoZSB0aGUgb2Zmc2V0IG9mIHRoZSB0d2lzdC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuUG9pbnR9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5Ud2lzdEZpbHRlciNcbiAgICAgKi9cbiAgICBvZmZzZXQ6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy51bmlmb3Jtcy5vZmZzZXQudmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLm9mZnNldC52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFRoaXMgcmFkaXVzIG9mIHRoZSB0d2lzdC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLlR3aXN0RmlsdGVyI1xuICAgICAqL1xuICAgIHJhZGl1czoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVuaWZvcm1zLnJhZGl1cy52YWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudW5pZm9ybXMucmFkaXVzLnZhbHVlID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVGhpcyBhbmdsZSBvZiB0aGUgdHdpc3QuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5Ud2lzdEZpbHRlciNcbiAgICAgKi9cbiAgICBhbmdsZToge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVuaWZvcm1zLmFuZ2xlLnZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy5hbmdsZS52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfVxufSk7XG4iLCIvLyBydW4gdGhlIHBvbHlmaWxsc1xucmVxdWlyZSgnLi9wb2x5ZmlsbCcpO1xuXG52YXIgY29yZSA9IG1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9jb3JlJyk7XG5cbi8vIGFkZCBjb3JlIHBsdWdpbnMuXG5jb3JlLmV4dHJhcyAgICAgICAgID0gcmVxdWlyZSgnLi9leHRyYXMnKTtcbmNvcmUuZmlsdGVycyAgICAgICAgPSByZXF1aXJlKCcuL2ZpbHRlcnMnKTtcbmNvcmUuaW50ZXJhY3Rpb24gICAgPSByZXF1aXJlKCcuL2ludGVyYWN0aW9uJyk7XG5jb3JlLmxvYWRlcnMgICAgICAgID0gcmVxdWlyZSgnLi9sb2FkZXJzJyk7XG5jb3JlLm1lc2ggICAgICAgICAgID0gcmVxdWlyZSgnLi9tZXNoJyk7XG5jb3JlLmFjY2Vzc2liaWxpdHkgID0gcmVxdWlyZSgnLi9hY2Nlc3NpYmlsaXR5Jyk7XG5cbi8vIGV4cG9ydCBhIHByZW1hZGUgbG9hZGVyIGluc3RhbmNlXG4vKipcbiAqIEEgcHJlbWFkZSBpbnN0YW5jZSBvZiB0aGUgbG9hZGVyIHRoYXQgY2FuIGJlIHVzZWQgdG8gbG9hZGVyIHJlc291cmNlcy5cbiAqXG4gKiBAbmFtZSBsb2FkZXJcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcHJvcGVydHkge1BJWEkubG9hZGVycy5Mb2FkZXJ9XG4gKi9cbmNvcmUubG9hZGVyID0gbmV3IGNvcmUubG9hZGVycy5Mb2FkZXIoKTtcblxuLy8gbWl4aW4gdGhlIGRlcHJlY2F0aW9uIGZlYXR1cmVzLlxuT2JqZWN0LmFzc2lnbihjb3JlLCByZXF1aXJlKCcuL2RlcHJlY2F0aW9uJykpO1xuXG4vLyBBbHdheXMgZXhwb3J0IHBpeGkgZ2xvYmFsbHkuXG5nbG9iYWwuUElYSSA9IGNvcmU7XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uL2NvcmUnKTtcblxuLyoqXG4gKiBIb2xkcyBhbGwgaW5mb3JtYXRpb24gcmVsYXRlZCB0byBhbiBJbnRlcmFjdGlvbiBldmVudFxuICpcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWEkuaW50ZXJhY3Rpb25cbiAqL1xuZnVuY3Rpb24gSW50ZXJhY3Rpb25EYXRhKClcbntcbiAgICAvKipcbiAgICAgKiBUaGlzIHBvaW50IHN0b3JlcyB0aGUgZ2xvYmFsIGNvb3JkcyBvZiB3aGVyZSB0aGUgdG91Y2gvbW91c2UgZXZlbnQgaGFwcGVuZWRcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuUG9pbnR9XG4gICAgICovXG4gICAgdGhpcy5nbG9iYWwgPSBuZXcgY29yZS5Qb2ludCgpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHRhcmdldCBTcHJpdGUgdGhhdCB3YXMgaW50ZXJhY3RlZCB3aXRoXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlNwcml0ZX1cbiAgICAgKi9cbiAgICB0aGlzLnRhcmdldCA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBXaGVuIHBhc3NlZCB0byBhbiBldmVudCBoYW5kbGVyLCB0aGlzIHdpbGwgYmUgdGhlIG9yaWdpbmFsIERPTSBFdmVudCB0aGF0IHdhcyBjYXB0dXJlZFxuICAgICAqXG4gICAgICogQG1lbWJlciB7RXZlbnR9XG4gICAgICovXG4gICAgdGhpcy5vcmlnaW5hbEV2ZW50ID0gbnVsbDtcbn1cblxuSW50ZXJhY3Rpb25EYXRhLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IEludGVyYWN0aW9uRGF0YTtcbm1vZHVsZS5leHBvcnRzID0gSW50ZXJhY3Rpb25EYXRhO1xuXG4vKipcbiAqIFRoaXMgd2lsbCByZXR1cm4gdGhlIGxvY2FsIGNvb3JkaW5hdGVzIG9mIHRoZSBzcGVjaWZpZWQgZGlzcGxheU9iamVjdCBmb3IgdGhpcyBJbnRlcmFjdGlvbkRhdGFcbiAqXG4gKiBAcGFyYW0gZGlzcGxheU9iamVjdCB7UElYSS5EaXNwbGF5T2JqZWN0fSBUaGUgRGlzcGxheU9iamVjdCB0aGF0IHlvdSB3b3VsZCBsaWtlIHRoZSBsb2NhbCBjb29yZHMgb2ZmXG4gKiBAcGFyYW0gW3BvaW50XSB7UElYSS5Qb2ludH0gQSBQb2ludCBvYmplY3QgaW4gd2hpY2ggdG8gc3RvcmUgdGhlIHZhbHVlLCBvcHRpb25hbCAob3RoZXJ3aXNlIHdpbGwgY3JlYXRlIGEgbmV3IHBvaW50KVxuICogQHBhcmFtIFtnbG9iYWxQb3NdIHtQSVhJLlBvaW50fSBBIFBvaW50IG9iamVjdCBjb250YWluaW5nIHlvdXIgY3VzdG9tIGdsb2JhbCBjb29yZHMsIG9wdGlvbmFsIChvdGhlcndpc2Ugd2lsbCB1c2UgdGhlIGN1cnJlbnQgZ2xvYmFsIGNvb3JkcylcbiAqIEByZXR1cm4ge1BJWEkuUG9pbnR9IEEgcG9pbnQgY29udGFpbmluZyB0aGUgY29vcmRpbmF0ZXMgb2YgdGhlIEludGVyYWN0aW9uRGF0YSBwb3NpdGlvbiByZWxhdGl2ZSB0byB0aGUgRGlzcGxheU9iamVjdFxuICovXG5JbnRlcmFjdGlvbkRhdGEucHJvdG90eXBlLmdldExvY2FsUG9zaXRpb24gPSBmdW5jdGlvbiAoZGlzcGxheU9iamVjdCwgcG9pbnQsIGdsb2JhbFBvcylcbntcbiAgICByZXR1cm4gZGlzcGxheU9iamVjdC53b3JsZFRyYW5zZm9ybS5hcHBseUludmVyc2UoZ2xvYmFsUG9zIHx8IHRoaXMuZ2xvYmFsLCBwb2ludCk7XG59O1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi9jb3JlJyksXG4gICAgSW50ZXJhY3Rpb25EYXRhID0gcmVxdWlyZSgnLi9JbnRlcmFjdGlvbkRhdGEnKTtcblxuLy8gTWl4IGludGVyYWN0aXZlVGFyZ2V0IGludG8gY29yZS5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZVxuT2JqZWN0LmFzc2lnbihcbiAgICBjb3JlLkRpc3BsYXlPYmplY3QucHJvdG90eXBlLFxuICAgIHJlcXVpcmUoJy4vaW50ZXJhY3RpdmVUYXJnZXQnKVxuKTtcblxuLyoqXG4gKiBUaGUgaW50ZXJhY3Rpb24gbWFuYWdlciBkZWFscyB3aXRoIG1vdXNlIGFuZCB0b3VjaCBldmVudHMuIEFueSBEaXNwbGF5T2JqZWN0IGNhbiBiZSBpbnRlcmFjdGl2ZVxuICogaWYgaXRzIGludGVyYWN0aXZlIHBhcmFtZXRlciBpcyBzZXQgdG8gdHJ1ZVxuICogVGhpcyBtYW5hZ2VyIGFsc28gc3VwcG9ydHMgbXVsdGl0b3VjaC5cbiAqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJLmludGVyYWN0aW9uXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuQ2FudmFzUmVuZGVyZXJ8UElYSS5XZWJHTFJlbmRlcmVyfSBBIHJlZmVyZW5jZSB0byB0aGUgY3VycmVudCByZW5kZXJlclxuICogQHBhcmFtIFtvcHRpb25zXSB7b2JqZWN0fVxuICogQHBhcmFtIFtvcHRpb25zLmF1dG9QcmV2ZW50RGVmYXVsdD10cnVlXSB7Ym9vbGVhbn0gU2hvdWxkIHRoZSBtYW5hZ2VyIGF1dG9tYXRpY2FsbHkgcHJldmVudCBkZWZhdWx0IGJyb3dzZXIgYWN0aW9ucy5cbiAqIEBwYXJhbSBbb3B0aW9ucy5pbnRlcmFjdGlvbkZyZXF1ZW5jeT0xMF0ge251bWJlcn0gRnJlcXVlbmN5IGluY3JlYXNlcyB0aGUgaW50ZXJhY3Rpb24gZXZlbnRzIHdpbGwgYmUgY2hlY2tlZC5cbiAqL1xuZnVuY3Rpb24gSW50ZXJhY3Rpb25NYW5hZ2VyKHJlbmRlcmVyLCBvcHRpb25zKVxue1xuICAgIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuXG4gICAgLyoqXG4gICAgICogVGhlIHJlbmRlcmVyIHRoaXMgaW50ZXJhY3Rpb24gbWFuYWdlciB3b3JrcyBmb3IuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlN5c3RlbVJlbmRlcmVyfVxuICAgICAqL1xuICAgIHRoaXMucmVuZGVyZXIgPSByZW5kZXJlcjtcblxuICAgIC8qKlxuICAgICAqIFNob3VsZCBkZWZhdWx0IGJyb3dzZXIgYWN0aW9ucyBhdXRvbWF0aWNhbGx5IGJlIHByZXZlbnRlZC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICogQGRlZmF1bHQgdHJ1ZVxuICAgICAqL1xuICAgIHRoaXMuYXV0b1ByZXZlbnREZWZhdWx0ID0gb3B0aW9ucy5hdXRvUHJldmVudERlZmF1bHQgIT09IHVuZGVmaW5lZCA/IG9wdGlvbnMuYXV0b1ByZXZlbnREZWZhdWx0IDogdHJ1ZTtcblxuICAgIC8qKlxuICAgICAqIEFzIHRoaXMgZnJlcXVlbmN5IGluY3JlYXNlcyB0aGUgaW50ZXJhY3Rpb24gZXZlbnRzIHdpbGwgYmUgY2hlY2tlZCBtb3JlIG9mdGVuLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDEwXG4gICAgICovXG4gICAgdGhpcy5pbnRlcmFjdGlvbkZyZXF1ZW5jeSA9IG9wdGlvbnMuaW50ZXJhY3Rpb25GcmVxdWVuY3kgfHwgMTA7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgbW91c2UgZGF0YVxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5pbnRlcmFjdGlvbi5JbnRlcmFjdGlvbkRhdGF9XG4gICAgICovXG4gICAgdGhpcy5tb3VzZSA9IG5ldyBJbnRlcmFjdGlvbkRhdGEoKTtcblxuICAgIC8qKlxuICAgICAqIEFuIGV2ZW50IGRhdGEgb2JqZWN0IHRvIGhhbmRsZSBhbGwgdGhlIGV2ZW50IHRyYWNraW5nL2Rpc3BhdGNoaW5nXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtvYmplY3R9XG4gICAgICovXG4gICAgdGhpcy5ldmVudERhdGEgPSB7XG4gICAgICAgIHN0b3BwZWQ6IGZhbHNlLFxuICAgICAgICB0YXJnZXQ6IG51bGwsXG4gICAgICAgIHR5cGU6IG51bGwsXG4gICAgICAgIGRhdGE6IHRoaXMubW91c2UsXG4gICAgICAgIHN0b3BQcm9wYWdhdGlvbjpmdW5jdGlvbigpe1xuICAgICAgICAgICAgdGhpcy5zdG9wcGVkID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH07XG5cbiAgICAvKipcbiAgICAgKiBUaW55IGxpdHRsZSBpbnRlcmFjdGl2ZURhdGEgcG9vbCAhXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLmludGVyYWN0aW9uLkludGVyYWN0aW9uRGF0YVtdfVxuICAgICAqL1xuICAgIHRoaXMuaW50ZXJhY3RpdmVEYXRhUG9vbCA9IFtdO1xuXG4gICAgLyoqXG4gICAgICogVGhlIERPTSBlbGVtZW50IHRvIGJpbmQgdG8uXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtIVE1MRWxlbWVudH1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuaW50ZXJhY3Rpb25ET01FbGVtZW50ID0gbnVsbDtcblxuICAgIC8qKlxuICAgICAqIEhhdmUgZXZlbnRzIGJlZW4gYXR0YWNoZWQgdG8gdGhlIGRvbSBlbGVtZW50P1xuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuZXZlbnRzQWRkZWQgPSBmYWxzZTtcblxuICAgIC8vdGhpcyB3aWxsIG1ha2UgaXQgc28gdGhhdCB5b3UgZG9uJ3QgaGF2ZSB0byBjYWxsIGJpbmQgYWxsIHRoZSB0aW1lXG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtGdW5jdGlvbn1cbiAgICAgKi9cbiAgICB0aGlzLm9uTW91c2VVcCA9IHRoaXMub25Nb3VzZVVwLmJpbmQodGhpcyk7XG4gICAgdGhpcy5wcm9jZXNzTW91c2VVcCA9IHRoaXMucHJvY2Vzc01vdXNlVXAuYmluZCggdGhpcyApO1xuXG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtGdW5jdGlvbn1cbiAgICAgKi9cbiAgICB0aGlzLm9uTW91c2VEb3duID0gdGhpcy5vbk1vdXNlRG93bi5iaW5kKHRoaXMpO1xuICAgIHRoaXMucHJvY2Vzc01vdXNlRG93biA9IHRoaXMucHJvY2Vzc01vdXNlRG93bi5iaW5kKCB0aGlzICk7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtGdW5jdGlvbn1cbiAgICAgKi9cbiAgICB0aGlzLm9uTW91c2VNb3ZlID0gdGhpcy5vbk1vdXNlTW92ZS5iaW5kKCB0aGlzICk7XG4gICAgdGhpcy5wcm9jZXNzTW91c2VNb3ZlID0gdGhpcy5wcm9jZXNzTW91c2VNb3ZlLmJpbmQoIHRoaXMgKTtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge0Z1bmN0aW9ufVxuICAgICAqL1xuICAgIHRoaXMub25Nb3VzZU91dCA9IHRoaXMub25Nb3VzZU91dC5iaW5kKHRoaXMpO1xuICAgIHRoaXMucHJvY2Vzc01vdXNlT3Zlck91dCA9IHRoaXMucHJvY2Vzc01vdXNlT3Zlck91dC5iaW5kKCB0aGlzICk7XG5cblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge0Z1bmN0aW9ufVxuICAgICAqL1xuICAgIHRoaXMub25Ub3VjaFN0YXJ0ID0gdGhpcy5vblRvdWNoU3RhcnQuYmluZCh0aGlzKTtcbiAgICB0aGlzLnByb2Nlc3NUb3VjaFN0YXJ0ID0gdGhpcy5wcm9jZXNzVG91Y2hTdGFydC5iaW5kKHRoaXMpO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7RnVuY3Rpb259XG4gICAgICovXG4gICAgdGhpcy5vblRvdWNoRW5kID0gdGhpcy5vblRvdWNoRW5kLmJpbmQodGhpcyk7XG4gICAgdGhpcy5wcm9jZXNzVG91Y2hFbmQgPSB0aGlzLnByb2Nlc3NUb3VjaEVuZC5iaW5kKHRoaXMpO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7RnVuY3Rpb259XG4gICAgICovXG4gICAgdGhpcy5vblRvdWNoTW92ZSA9IHRoaXMub25Ub3VjaE1vdmUuYmluZCh0aGlzKTtcbiAgICB0aGlzLnByb2Nlc3NUb3VjaE1vdmUgPSB0aGlzLnByb2Nlc3NUb3VjaE1vdmUuYmluZCh0aGlzKTtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLmxhc3QgPSAwO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGNzcyBzdHlsZSBvZiB0aGUgY3Vyc29yIHRoYXQgaXMgYmVpbmcgdXNlZFxuICAgICAqIEBtZW1iZXIge3N0cmluZ31cbiAgICAgKi9cbiAgICB0aGlzLmN1cnJlbnRDdXJzb3JTdHlsZSA9ICdpbmhlcml0JztcblxuICAgIC8qKlxuICAgICAqIEludGVybmFsIGNhY2hlZCB2YXJcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlBvaW50fVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fdGVtcFBvaW50ID0gbmV3IGNvcmUuUG9pbnQoKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBjdXJyZW50IHJlc29sdXRpb25cbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy5yZXNvbHV0aW9uID0gMTtcblxuICAgIHRoaXMuc2V0VGFyZ2V0RWxlbWVudCh0aGlzLnJlbmRlcmVyLnZpZXcsIHRoaXMucmVuZGVyZXIucmVzb2x1dGlvbik7XG59XG5cbkludGVyYWN0aW9uTWFuYWdlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBJbnRlcmFjdGlvbk1hbmFnZXI7XG5tb2R1bGUuZXhwb3J0cyA9IEludGVyYWN0aW9uTWFuYWdlcjtcblxuLyoqXG4gKiBTZXRzIHRoZSBET00gZWxlbWVudCB3aGljaCB3aWxsIHJlY2VpdmUgbW91c2UvdG91Y2ggZXZlbnRzLiBUaGlzIGlzIHVzZWZ1bCBmb3Igd2hlbiB5b3UgaGF2ZVxuICogb3RoZXIgRE9NIGVsZW1lbnRzIG9uIHRvcCBvZiB0aGUgcmVuZGVyZXJzIENhbnZhcyBlbGVtZW50LiBXaXRoIHRoaXMgeW91J2xsIGJlIGJhbGUgdG8gZGVsZXRlZ2F0ZVxuICogYW5vdGhlciBET00gZWxlbWVudCB0byByZWNlaXZlIHRob3NlIGV2ZW50cy5cbiAqXG4gKiBAcGFyYW0gZWxlbWVudCB7SFRNTEVsZW1lbnR9IHRoZSBET00gZWxlbWVudCB3aGljaCB3aWxsIHJlY2VpdmUgbW91c2UgYW5kIHRvdWNoIGV2ZW50cy5cbiAqIEBwYXJhbSBbcmVzb2x1dGlvbj0xXSB7bnVtYmVyfSBUSGUgcmVzb2x1dGlvbiBvZiB0aGUgbmV3IGVsZW1lbnQgKHJlbGF0aXZlIHRvIHRoZSBjYW52YXMpLlxuICogQHByaXZhdGVcbiAqL1xuSW50ZXJhY3Rpb25NYW5hZ2VyLnByb3RvdHlwZS5zZXRUYXJnZXRFbGVtZW50ID0gZnVuY3Rpb24gKGVsZW1lbnQsIHJlc29sdXRpb24pXG57XG4gICAgdGhpcy5yZW1vdmVFdmVudHMoKTtcblxuICAgIHRoaXMuaW50ZXJhY3Rpb25ET01FbGVtZW50ID0gZWxlbWVudDtcblxuICAgIHRoaXMucmVzb2x1dGlvbiA9IHJlc29sdXRpb24gfHwgMTtcblxuICAgIHRoaXMuYWRkRXZlbnRzKCk7XG59O1xuXG4vKipcbiAqIFJlZ2lzdGVycyBhbGwgdGhlIERPTSBldmVudHNcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5JbnRlcmFjdGlvbk1hbmFnZXIucHJvdG90eXBlLmFkZEV2ZW50cyA9IGZ1bmN0aW9uICgpXG57XG4gICAgaWYgKCF0aGlzLmludGVyYWN0aW9uRE9NRWxlbWVudClcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb3JlLnRpY2tlci5zaGFyZWQuYWRkKHRoaXMudXBkYXRlLCB0aGlzKTtcblxuICAgIGlmICh3aW5kb3cubmF2aWdhdG9yLm1zUG9pbnRlckVuYWJsZWQpXG4gICAge1xuICAgICAgICB0aGlzLmludGVyYWN0aW9uRE9NRWxlbWVudC5zdHlsZVsnLW1zLWNvbnRlbnQtem9vbWluZyddID0gJ25vbmUnO1xuICAgICAgICB0aGlzLmludGVyYWN0aW9uRE9NRWxlbWVudC5zdHlsZVsnLW1zLXRvdWNoLWFjdGlvbiddID0gJ25vbmUnO1xuICAgIH1cblxuICAgIHdpbmRvdy5kb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdtb3VzZW1vdmUnLCAgICB0aGlzLm9uTW91c2VNb3ZlLCB0cnVlKTtcbiAgICB0aGlzLmludGVyYWN0aW9uRE9NRWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCdtb3VzZWRvd24nLCAgICB0aGlzLm9uTW91c2VEb3duLCB0cnVlKTtcbiAgICB0aGlzLmludGVyYWN0aW9uRE9NRWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCdtb3VzZW91dCcsICAgICB0aGlzLm9uTW91c2VPdXQsIHRydWUpO1xuXG4gICAgdGhpcy5pbnRlcmFjdGlvbkRPTUVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigndG91Y2hzdGFydCcsICAgdGhpcy5vblRvdWNoU3RhcnQsIHRydWUpO1xuICAgIHRoaXMuaW50ZXJhY3Rpb25ET01FbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ3RvdWNoZW5kJywgICAgIHRoaXMub25Ub3VjaEVuZCwgdHJ1ZSk7XG4gICAgdGhpcy5pbnRlcmFjdGlvbkRPTUVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigndG91Y2htb3ZlJywgICAgdGhpcy5vblRvdWNoTW92ZSwgdHJ1ZSk7XG5cbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignbW91c2V1cCcsICB0aGlzLm9uTW91c2VVcCwgdHJ1ZSk7XG5cbiAgICB0aGlzLmV2ZW50c0FkZGVkID0gdHJ1ZTtcbn07XG5cbi8qKlxuICogUmVtb3ZlcyBhbGwgdGhlIERPTSBldmVudHMgdGhhdCB3ZXJlIHByZXZpb3VzbHkgcmVnaXN0ZXJlZFxuICpcbiAqIEBwcml2YXRlXG4gKi9cbkludGVyYWN0aW9uTWFuYWdlci5wcm90b3R5cGUucmVtb3ZlRXZlbnRzID0gZnVuY3Rpb24gKClcbntcbiAgICBpZiAoIXRoaXMuaW50ZXJhY3Rpb25ET01FbGVtZW50KVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvcmUudGlja2VyLnNoYXJlZC5yZW1vdmUodGhpcy51cGRhdGUpO1xuXG4gICAgaWYgKHdpbmRvdy5uYXZpZ2F0b3IubXNQb2ludGVyRW5hYmxlZClcbiAgICB7XG4gICAgICAgIHRoaXMuaW50ZXJhY3Rpb25ET01FbGVtZW50LnN0eWxlWyctbXMtY29udGVudC16b29taW5nJ10gPSAnJztcbiAgICAgICAgdGhpcy5pbnRlcmFjdGlvbkRPTUVsZW1lbnQuc3R5bGVbJy1tcy10b3VjaC1hY3Rpb24nXSA9ICcnO1xuICAgIH1cblxuICAgIHdpbmRvdy5kb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdtb3VzZW1vdmUnLCB0aGlzLm9uTW91c2VNb3ZlLCB0cnVlKTtcbiAgICB0aGlzLmludGVyYWN0aW9uRE9NRWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdtb3VzZWRvd24nLCB0aGlzLm9uTW91c2VEb3duLCB0cnVlKTtcbiAgICB0aGlzLmludGVyYWN0aW9uRE9NRWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdtb3VzZW91dCcsICB0aGlzLm9uTW91c2VPdXQsIHRydWUpO1xuXG4gICAgdGhpcy5pbnRlcmFjdGlvbkRPTUVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigndG91Y2hzdGFydCcsIHRoaXMub25Ub3VjaFN0YXJ0LCB0cnVlKTtcbiAgICB0aGlzLmludGVyYWN0aW9uRE9NRWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCd0b3VjaGVuZCcsICB0aGlzLm9uVG91Y2hFbmQsIHRydWUpO1xuICAgIHRoaXMuaW50ZXJhY3Rpb25ET01FbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3RvdWNobW92ZScsIHRoaXMub25Ub3VjaE1vdmUsIHRydWUpO1xuXG4gICAgdGhpcy5pbnRlcmFjdGlvbkRPTUVsZW1lbnQgPSBudWxsO1xuXG4gICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21vdXNldXAnLCAgdGhpcy5vbk1vdXNlVXAsIHRydWUpO1xuXG4gICAgdGhpcy5ldmVudHNBZGRlZCA9IGZhbHNlO1xufTtcblxuLyoqXG4gKiBVcGRhdGVzIHRoZSBzdGF0ZSBvZiBpbnRlcmFjdGl2ZSBvYmplY3RzLlxuICogSW52b2tlZCBieSBhIHRocm90dGxlZCB0aWNrZXIgdXBkYXRlIGZyb21cbiAqIHtAbGluayBQSVhJLnRpY2tlci5zaGFyZWR9LlxuICpcbiAqIEBwYXJhbSBkZWx0YVRpbWUge251bWJlcn1cbiAqL1xuSW50ZXJhY3Rpb25NYW5hZ2VyLnByb3RvdHlwZS51cGRhdGUgPSBmdW5jdGlvbiAoZGVsdGFUaW1lKVxue1xuICAgIHRoaXMuX2RlbHRhVGltZSArPSBkZWx0YVRpbWU7XG5cbiAgICBpZiAodGhpcy5fZGVsdGFUaW1lIDwgdGhpcy5pbnRlcmFjdGlvbkZyZXF1ZW5jeSlcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLl9kZWx0YVRpbWUgPSAwO1xuXG4gICAgaWYgKCF0aGlzLmludGVyYWN0aW9uRE9NRWxlbWVudClcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBpZiB0aGUgdXNlciBtb3ZlIHRoZSBtb3VzZSB0aGlzIGNoZWNrIGhhcyBhbHJlYWR5IGJlZW4gZGZvbmUgdXNpbmcgdGhlIG1vdXNlIG1vdmUhXG4gICAgaWYodGhpcy5kaWRNb3ZlKVxuICAgIHtcbiAgICAgICAgdGhpcy5kaWRNb3ZlID0gZmFsc2U7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLmN1cnNvciA9ICdpbmhlcml0JztcblxuICAgIHRoaXMucHJvY2Vzc0ludGVyYWN0aXZlKHRoaXMubW91c2UuZ2xvYmFsLCB0aGlzLnJlbmRlcmVyLl9sYXN0T2JqZWN0UmVuZGVyZWQsIHRoaXMucHJvY2Vzc01vdXNlT3Zlck91dCwgdHJ1ZSApO1xuXG4gICAgaWYgKHRoaXMuY3VycmVudEN1cnNvclN0eWxlICE9PSB0aGlzLmN1cnNvcilcbiAgICB7XG4gICAgICAgIHRoaXMuY3VycmVudEN1cnNvclN0eWxlID0gdGhpcy5jdXJzb3I7XG4gICAgICAgIHRoaXMuaW50ZXJhY3Rpb25ET01FbGVtZW50LnN0eWxlLmN1cnNvciA9IHRoaXMuY3Vyc29yO1xuICAgIH1cblxuICAgIC8vVE9ET1xufTtcblxuLyoqXG4gKiBEaXNwYXRjaGVzIGFuIGV2ZW50IG9uIHRoZSBkaXNwbGF5IG9iamVjdCB0aGF0IHdhcyBpbnRlcmFjdGVkIHdpdGhcbiAqXG4gKiBAcGFyYW0gZGlzcGxheU9iamVjdCB7UElYSS5Db250YWluZXJ8UElYSS5TcHJpdGV8UElYSS5leHRyYXMuVGlsaW5nU3ByaXRlfSB0aGUgZGlzcGxheSBvYmplY3QgaW4gcXVlc3Rpb25cbiAqIEBwYXJhbSBldmVudFN0cmluZyB7c3RyaW5nfSB0aGUgbmFtZSBvZiB0aGUgZXZlbnQgKGUuZywgbW91c2Vkb3duKVxuICogQHBhcmFtIGV2ZW50RGF0YSB7b2JqZWN0fSB0aGUgZXZlbnQgZGF0YSBvYmplY3RcbiAqIEBwcml2YXRlXG4gKi9cbkludGVyYWN0aW9uTWFuYWdlci5wcm90b3R5cGUuZGlzcGF0Y2hFdmVudCA9IGZ1bmN0aW9uICggZGlzcGxheU9iamVjdCwgZXZlbnRTdHJpbmcsIGV2ZW50RGF0YSApXG57XG4gICAgaWYoIWV2ZW50RGF0YS5zdG9wcGVkKVxuICAgIHtcbiAgICAgICAgZXZlbnREYXRhLnRhcmdldCA9IGRpc3BsYXlPYmplY3Q7XG4gICAgICAgIGV2ZW50RGF0YS50eXBlID0gZXZlbnRTdHJpbmc7XG5cbiAgICAgICAgZGlzcGxheU9iamVjdC5lbWl0KCBldmVudFN0cmluZywgZXZlbnREYXRhICk7XG5cbiAgICAgICAgaWYoIGRpc3BsYXlPYmplY3RbZXZlbnRTdHJpbmddIClcbiAgICAgICAge1xuICAgICAgICAgICAgZGlzcGxheU9iamVjdFtldmVudFN0cmluZ10oIGV2ZW50RGF0YSApO1xuICAgICAgICB9XG4gICAgfVxufTtcblxuLyoqXG4gKiBNYXBzIHggYW5kIHkgY29vcmRzIGZyb20gYSBET00gb2JqZWN0IGFuZCBtYXBzIHRoZW0gY29ycmVjdGx5IHRvIHRoZSBwaXhpIHZpZXcuIFRoZSByZXN1bHRpbmcgdmFsdWUgaXMgc3RvcmVkIGluIHRoZSBwb2ludC5cbiAqIFRoaXMgdGFrZXMgaW50byBhY2NvdW50IHRoZSBmYWN0IHRoYXQgdGhlIERPTSBlbGVtZW50IGNvdWxkIGJlIHNjYWxlZCBhbmQgcG9zaXRpb25lZCBhbnl3aGVyZSBvbiB0aGUgc2NyZWVuLlxuICpcbiAqIEBwYXJhbSAge1BJWEkuUG9pbnR9IHBvaW50IHRoZSBwb2ludCB0aGF0IHRoZSByZXN1bHQgd2lsbCBiZSBzdG9yZWQgaW5cbiAqIEBwYXJhbSAge251bWJlcn0geCAgICAgdGhlIHggY29vcmQgb2YgdGhlIHBvc2l0aW9uIHRvIG1hcFxuICogQHBhcmFtICB7bnVtYmVyfSB5ICAgICB0aGUgeSBjb29yZCBvZiB0aGUgcG9zaXRpb24gdG8gbWFwXG4gKi9cbkludGVyYWN0aW9uTWFuYWdlci5wcm90b3R5cGUubWFwUG9zaXRpb25Ub1BvaW50ID0gZnVuY3Rpb24gKCBwb2ludCwgeCwgeSApXG57XG4gICAgdmFyIHJlY3QgPSB0aGlzLmludGVyYWN0aW9uRE9NRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICBwb2ludC54ID0gKCAoIHggLSByZWN0LmxlZnQgKSAqICh0aGlzLmludGVyYWN0aW9uRE9NRWxlbWVudC53aWR0aCAgLyByZWN0LndpZHRoICApICkgLyB0aGlzLnJlc29sdXRpb247XG4gICAgcG9pbnQueSA9ICggKCB5IC0gcmVjdC50b3AgICkgKiAodGhpcy5pbnRlcmFjdGlvbkRPTUVsZW1lbnQuaGVpZ2h0IC8gcmVjdC5oZWlnaHQgKSApIC8gdGhpcy5yZXNvbHV0aW9uO1xufTtcblxuLyoqXG4gKiBUaGlzIGZ1bmN0aW9uIGlzIHByb3ZpZGVzIGEgbmVhdCB3YXkgb2YgY3Jhd2xpbmcgdGhyb3VnaCB0aGUgc2NlbmUgZ3JhcGggYW5kIHJ1bm5pbmcgYSBzcGVjaWZpZWQgZnVuY3Rpb24gb24gYWxsIGludGVyYWN0aXZlIG9iamVjdHMgaXQgZmluZHMuXG4gKiBJdCB3aWxsIGFsc28gdGFrZSBjYXJlIG9mIGhpdCB0ZXN0aW5nIHRoZSBpbnRlcmFjdGl2ZSBvYmplY3RzIGFuZCBwYXNzZXMgdGhlIGhpdCBhY3Jvc3MgaW4gdGhlIGZ1bmN0aW9uLlxuICpcbiAqIEBwYXJhbSAge1BJWEkuUG9pbnR9IHBvaW50IHRoZSBwb2ludCB0aGF0IGlzIHRlc3RlZCBmb3IgY29sbGlzaW9uXG4gKiBAcGFyYW0gIHtQSVhJLkNvbnRhaW5lcnxQSVhJLlNwcml0ZXxQSVhJLmV4dHJhcy5UaWxpbmdTcHJpdGV9IGRpc3BsYXlPYmplY3QgdGhlIGRpc3BsYXlPYmplY3QgdGhhdCB3aWxsIGJlIGhpdCB0ZXN0IChyZWN1cmNzaXZseSBjcmF3bHMgaXRzIGNoaWxkcmVuKVxuICogQHBhcmFtICB7RnVuY3Rpb259IGZ1bmMgdGhlIGZ1bmN0aW9uIHRoYXQgd2lsbCBiZSBjYWxsZWQgb24gZWFjaCBpbnRlcmFjdGl2ZSBvYmplY3QuIFRoZSBkaXNwbGF5T2JqZWN0IGFuZCBoaXQgd2lsbCBiZSBwYXNzZWQgdG8gdGhlIGZ1bmN0aW9uXG4gKiBAcGFyYW0gIHtib29sZWFufSBoaXRUZXN0IHRoaXMgaW5kaWNhdGVzIGlmIHRoZSBvYmplY3RzIGluc2lkZSBzaG91bGQgYmUgaGl0IHRlc3QgYWdhaW5zdCB0aGUgcG9pbnRcbiAqIEByZXR1cm4ge2Jvb2xlYW59IHJldHVybnMgdHJ1ZSBpZiB0aGUgZGlzcGxheU9iamVjdCBoaXQgdGhlIHBvaW50XG4gKi9cbkludGVyYWN0aW9uTWFuYWdlci5wcm90b3R5cGUucHJvY2Vzc0ludGVyYWN0aXZlID0gZnVuY3Rpb24gKHBvaW50LCBkaXNwbGF5T2JqZWN0LCBmdW5jLCBoaXRUZXN0LCBpbnRlcmFjdGl2ZSlcbntcbiAgICBpZighZGlzcGxheU9iamVjdCB8fCAhZGlzcGxheU9iamVjdC52aXNpYmxlKVxuICAgIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIC8vIFRvb2sgYSBsaXR0bGUgd2hpbGUgdG8gcmV3b3JrIHRoaXMgZnVuY3Rpb24gY29ycmVjdGx5ISBCdXQgbm93IGl0IGlzIGRvbmUgYW5kIG5pY2UgYW5kIG9wdGltaXNlZC4gXl9eXG4gICAgLy8gXG4gICAgLy8gVGhpcyBmdW5jdGlvbiB3aWxsIG5vdyBsb29wIHRocm91Z2ggYWxsIG9iamVjdHMgYW5kIHRoZW4gb25seSBoaXQgdGVzdCB0aGUgb2JqZWN0cyBpdCBIQVMgdG8sIG5vdCBhbGwgb2YgdGhlbS4gTVVDSCBmYXN0ZXIuLlxuICAgIC8vIEFuIG9iamVjdCB3aWxsIGJlIGhpdCB0ZXN0IGlmIHRoZSBmb2xsb3dpbmcgaXMgdHJ1ZTpcbiAgICAvLyBcbiAgICAvLyAxOiBJdCBpcyBpbnRlcmFjdGl2ZS5cbiAgICAvLyAyOiBJdCBiZWxvbmdzIHRvIGEgcGFyZW50IHRoYXQgaXMgaW50ZXJhY3RpdmUgQU5EIG9uZSBvZiB0aGUgcGFyZW50cyBjaGlsZHJlbiBoYXZlIG5vdCBhbHJlYWR5IGJlZW4gaGl0LlxuICAgIC8vIFxuICAgIC8vIEFzIGFub3RoZXIgbGl0dGxlIG9wdGltaXNhdGlvbiBvbmNlIGFuIGludGVyYWN0aXZlIG9iamVjdCBoYXMgYmVlbiBoaXQgd2UgY2FuIGNhcnJ5IG9uIHRocm91Z2ggdGhlIHNjZW5lZ3JhcGgsIGJ1dCB3ZSBrbm93IHRoYXQgdGhlcmUgd2lsbCBiZSBubyBtb3JlIGhpdHMhIFNvIHdlIGNhbiBhdm9pZCBleHRyYSBoaXQgdGVzdHNcbiAgICAvLyBBIGZpbmFsIG9wdGltaXNhdGlvbiBpcyB0aGF0IGFuIG9iamVjdCBpcyBub3QgaGl0IHRlc3QgZGlyZWN0bHkgaWYgYSBjaGlsZCBoYXMgYWxyZWFkeSBiZWVuIGhpdC5cbiAgICBcbiAgICB2YXIgaGl0ID0gZmFsc2UsXG4gICAgICAgIGludGVyYWN0aXZlUGFyZW50ID0gaW50ZXJhY3RpdmUgPSBkaXNwbGF5T2JqZWN0LmludGVyYWN0aXZlIHx8IGludGVyYWN0aXZlO1xuXG4gICAgLy8gaWYgdGhlIGRpc3BsYXlvYmplY3QgaGFzIGEgaGl0QXJlYSwgdGhlbiBpdCBkb2VzIG5vdCBuZWVkIHRvIGhpdFRlc3QgY2hpbGRyZW4uXG4gICAgaWYoZGlzcGxheU9iamVjdC5oaXRBcmVhKVxuICAgIHtcbiAgICAgICAgaW50ZXJhY3RpdmVQYXJlbnQgPSBmYWxzZTtcbiAgICB9XG5cbiAgICAvLyAqKiBGUkVFIFRJUCAqKiEgSWYgYW4gb2JqZWN0IGlzIG5vdCBpbnRlcmFjdHRpdmUgb3IgaGFzIG5vIGJ1dHRvbnMgaW4gaXQgKHN1Y2ggYXMgYSBnYW1lIHNjZW5lISkgc2V0IGludGVyYWN0aXZlQ2hpbGRyZW4gdG8gZmFsc2UgZm9yIHRoYXQgZGlzcGxheU9iamVjdC5cbiAgICAvLyBUaGlzIHdpbGwgYWxsb3cgcGl4aSB0byBjb21wbGV0bHkgaWdub3JlIGFuZCBieXBhc3MgY2hlY2tpbmcgdGhlIGRpc3BsYXlPYmplY3RzIGNoaWxkcmVuLlxuICAgIGlmKGRpc3BsYXlPYmplY3QuaW50ZXJhY3RpdmVDaGlsZHJlbilcbiAgICB7ICAgICAgIFxuICAgICAgICB2YXIgY2hpbGRyZW4gPSBkaXNwbGF5T2JqZWN0LmNoaWxkcmVuO1xuICAgICAgICBcbiAgICAgICAgZm9yICh2YXIgaSA9IGNoaWxkcmVuLmxlbmd0aC0xOyBpID49IDA7IGktLSlcbiAgICAgICAge1xuICAgICAgICAgICAgLy8gdGltZSB0byBnZXQgcmVjdXJzaXZlLi4gaWYgdGhpcyBmdW5jdGlvbiB3aWxsIHJldHVybiBpZiBzb210aGluZyBpcyBoaXQuLlxuICAgICAgICAgICAgaWYoIHRoaXMucHJvY2Vzc0ludGVyYWN0aXZlKHBvaW50LCBjaGlsZHJlbltpXSwgZnVuYywgaGl0VGVzdCwgaW50ZXJhY3RpdmVQYXJlbnQpIClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBoaXQgPSB0cnVlO1xuXG4gICAgICAgICAgICAgICAgLy8gd2Ugbm8gbG9uZ2VyIG5lZWQgdG8gaGl0IHRlc3QgYW55IG1vcmUgb2JqZWN0cyBpbiB0aGlzIGNvbnRhaW5lciBhcyB3ZSB3ZSBub3cga25vdyB0aGUgcGFyZW50IGhhcyBiZWVuIGhpdFxuICAgICAgICAgICAgICAgIGludGVyYWN0aXZlUGFyZW50ID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgLy8gSWYgdGhlIGNoaWxkIGlzIGludGVyYWN0aXZlICwgdGhhdCBtZWFucyB0aGF0IHRoZSBvYmplY3QgaGl0IHdhcyBhY3R1YWxseSBpbnRlcmFjdGl2ZSBhbmQgbm90IGp1c3QgdGhlIGNoaWxkIG9mIGFuIGludGVyYWN0aXZlIG9iamVjdC4gXG4gICAgICAgICAgICAgICAgLy8gVGhpcyBtZWFucyB3ZSBubyBsb25nZXIgbmVlZCB0byBoaXQgdGVzdCBhbnl0aGluZyBlbHNlLiBXZSBzdGlsbCBuZWVkIHRvIHJ1biB0aHJvdWdoIGFsbCBvYmplY3RzLCBidXQgd2UgZG9uJ3QgbmVlZCB0byBwZXJmb3JtIGFueSBoaXQgdGVzdHMuXG4gICAgICAgICAgICAgICAgaWYoY2hpbGRyZW5baV0uaW50ZXJhY3RpdmUpXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBoaXRUZXN0ID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gbm8gcG9pbnQgcnVubmluZyB0aGlzIGlmIHRoZSBpdGVtIGlzIG5vdCBpbnRlcmFjdGl2ZSBvciBkb2VzIG5vdCBoYXZlIGFuIGludGVyYWN0aXZlIHBhcmVudC5cbiAgICBpZihpbnRlcmFjdGl2ZSlcbiAgICB7XG4gICAgICAgIC8vIGlmIHdlIGFyZSBoaXQgdGVzdGluZyAoYXMgaW4gd2UgaGF2ZSBubyBoaXQgYW55IG9iamVjdHMgeWV0KVxuICAgICAgICAvLyBXZSBhbHNvIGRvbid0IG5lZWQgdG8gd29ycnkgYWJvdXQgaGl0IHRlc3RpbmcgaWYgb25jZSBvZiB0aGUgZGlzcGxheU9iamVjdHMgY2hpbGRyZW4gaGFzIGFscmVhZHkgYmVlbiBoaXQhXG4gICAgICAgIGlmKGhpdFRlc3QgJiYgIWhpdClcbiAgICAgICAgeyAgXG4gICAgICAgICAgICBpZihkaXNwbGF5T2JqZWN0LmhpdEFyZWEpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgZGlzcGxheU9iamVjdC53b3JsZFRyYW5zZm9ybS5hcHBseUludmVyc2UocG9pbnQsICB0aGlzLl90ZW1wUG9pbnQpO1xuICAgICAgICAgICAgICAgIGhpdCA9IGRpc3BsYXlPYmplY3QuaGl0QXJlYS5jb250YWlucyggdGhpcy5fdGVtcFBvaW50LngsIHRoaXMuX3RlbXBQb2ludC55ICk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmKGRpc3BsYXlPYmplY3QuY29udGFpbnNQb2ludClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBoaXQgPSBkaXNwbGF5T2JqZWN0LmNvbnRhaW5zUG9pbnQocG9pbnQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYoZGlzcGxheU9iamVjdC5pbnRlcmFjdGl2ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgZnVuYyhkaXNwbGF5T2JqZWN0LCBoaXQpOyBcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBoaXQ7XG4gIFxufTtcblxuXG4vKipcbiAqIElzIGNhbGxlZCB3aGVuIHRoZSBtb3VzZSBidXR0b24gaXMgcHJlc3NlZCBkb3duIG9uIHRoZSByZW5kZXJlciBlbGVtZW50XG4gKlxuICogQHBhcmFtIGV2ZW50IHtFdmVudH0gVGhlIERPTSBldmVudCBvZiBhIG1vdXNlIGJ1dHRvbiBiZWluZyBwcmVzc2VkIGRvd25cbiAqIEBwcml2YXRlXG4gKi9cbkludGVyYWN0aW9uTWFuYWdlci5wcm90b3R5cGUub25Nb3VzZURvd24gPSBmdW5jdGlvbiAoZXZlbnQpXG57XG4gICAgdGhpcy5tb3VzZS5vcmlnaW5hbEV2ZW50ID0gZXZlbnQ7XG4gICAgdGhpcy5ldmVudERhdGEuZGF0YSA9IHRoaXMubW91c2U7XG4gICAgdGhpcy5ldmVudERhdGEuc3RvcHBlZCA9IGZhbHNlO1xuXG4gICAgLy8gVXBkYXRlIGludGVybmFsIG1vdXNlIHJlZmVyZW5jZVxuICAgIHRoaXMubWFwUG9zaXRpb25Ub1BvaW50KCB0aGlzLm1vdXNlLmdsb2JhbCwgZXZlbnQuY2xpZW50WCwgZXZlbnQuY2xpZW50WSk7XG5cbiAgICBpZiAodGhpcy5hdXRvUHJldmVudERlZmF1bHQpXG4gICAge1xuICAgICAgICB0aGlzLm1vdXNlLm9yaWdpbmFsRXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICB9XG5cbiAgICB0aGlzLnByb2Nlc3NJbnRlcmFjdGl2ZSh0aGlzLm1vdXNlLmdsb2JhbCwgdGhpcy5yZW5kZXJlci5fbGFzdE9iamVjdFJlbmRlcmVkLCB0aGlzLnByb2Nlc3NNb3VzZURvd24sIHRydWUgKTtcbn07XG5cbi8qKlxuICogUHJvY2Vzc2VzIHRoZSByZXN1bHQgb2YgdGhlIG1vdXNlIGRvd24gY2hlY2sgYW5kIGRpc3BhdGNoZXMgdGhlIGV2ZW50IGlmIG5lZWQgYmVcbiAqXG4gKiBAcGFyYW0gZGlzcGxheU9iamVjdCB7UElYSS5Db250YWluZXJ8UElYSS5TcHJpdGV8UElYSS5leHRyYXMuVGlsaW5nU3ByaXRlfSBUaGUgZGlzcGxheSBvYmplY3QgdGhhdCB3YXMgdGVzdGVkXG4gKiBAcGFyYW0gaGl0IHtib29sZWFufSB0aGUgcmVzdWx0IG9mIHRoZSBoaXQgdGVzdCBvbiB0aGUgZGlzcGF5IG9iamVjdFxuICogQHByaXZhdGVcbiAqL1xuSW50ZXJhY3Rpb25NYW5hZ2VyLnByb3RvdHlwZS5wcm9jZXNzTW91c2VEb3duID0gZnVuY3Rpb24gKCBkaXNwbGF5T2JqZWN0LCBoaXQgKVxue1xuICAgIHZhciBlID0gdGhpcy5tb3VzZS5vcmlnaW5hbEV2ZW50O1xuICAgIFxuICAgIHZhciBpc1JpZ2h0QnV0dG9uID0gZS5idXR0b24gPT09IDIgfHwgZS53aGljaCA9PT0gMztcblxuICAgIGlmKGhpdClcbiAgICB7XG4gICAgICAgIGRpc3BsYXlPYmplY3RbIGlzUmlnaHRCdXR0b24gPyAnX2lzUmlnaHREb3duJyA6ICdfaXNMZWZ0RG93bicgXSA9IHRydWU7XG4gICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudCggZGlzcGxheU9iamVjdCwgaXNSaWdodEJ1dHRvbiA/ICdyaWdodGRvd24nIDogJ21vdXNlZG93bicsIHRoaXMuZXZlbnREYXRhICk7XG4gICAgfVxufTtcblxuXG5cbi8qKlxuICogSXMgY2FsbGVkIHdoZW4gdGhlIG1vdXNlIGJ1dHRvbiBpcyByZWxlYXNlZCBvbiB0aGUgcmVuZGVyZXIgZWxlbWVudFxuICpcbiAqIEBwYXJhbSBldmVudCB7RXZlbnR9IFRoZSBET00gZXZlbnQgb2YgYSBtb3VzZSBidXR0b24gYmVpbmcgcmVsZWFzZWRcbiAqIEBwcml2YXRlXG4gKi9cbkludGVyYWN0aW9uTWFuYWdlci5wcm90b3R5cGUub25Nb3VzZVVwID0gZnVuY3Rpb24gKGV2ZW50KVxue1xuICAgIHRoaXMubW91c2Uub3JpZ2luYWxFdmVudCA9IGV2ZW50O1xuICAgIHRoaXMuZXZlbnREYXRhLmRhdGEgPSB0aGlzLm1vdXNlO1xuICAgIHRoaXMuZXZlbnREYXRhLnN0b3BwZWQgPSBmYWxzZTtcblxuICAgIC8vIFVwZGF0ZSBpbnRlcm5hbCBtb3VzZSByZWZlcmVuY2VcbiAgICB0aGlzLm1hcFBvc2l0aW9uVG9Qb2ludCggdGhpcy5tb3VzZS5nbG9iYWwsIGV2ZW50LmNsaWVudFgsIGV2ZW50LmNsaWVudFkpO1xuXG4gICAgdGhpcy5wcm9jZXNzSW50ZXJhY3RpdmUodGhpcy5tb3VzZS5nbG9iYWwsIHRoaXMucmVuZGVyZXIuX2xhc3RPYmplY3RSZW5kZXJlZCwgdGhpcy5wcm9jZXNzTW91c2VVcCwgdHJ1ZSApO1xufTtcblxuLyoqXG4gKiBQcm9jZXNzZXMgdGhlIHJlc3VsdCBvZiB0aGUgbW91c2UgdXAgY2hlY2sgYW5kIGRpc3BhdGNoZXMgdGhlIGV2ZW50IGlmIG5lZWQgYmVcbiAqXG4gKiBAcGFyYW0gZGlzcGxheU9iamVjdCB7UElYSS5Db250YWluZXJ8UElYSS5TcHJpdGV8UElYSS5leHRyYXMuVGlsaW5nU3ByaXRlfSBUaGUgZGlzcGxheSBvYmplY3QgdGhhdCB3YXMgdGVzdGVkXG4gKiBAcGFyYW0gaGl0IHtib29sZWFufSB0aGUgcmVzdWx0IG9mIHRoZSBoaXQgdGVzdCBvbiB0aGUgZGlzcGxheSBvYmplY3RcbiAqIEBwcml2YXRlXG4gKi9cbkludGVyYWN0aW9uTWFuYWdlci5wcm90b3R5cGUucHJvY2Vzc01vdXNlVXAgPSBmdW5jdGlvbiAoIGRpc3BsYXlPYmplY3QsIGhpdCApXG57XG4gICAgdmFyIGUgPSB0aGlzLm1vdXNlLm9yaWdpbmFsRXZlbnQ7XG5cbiAgICB2YXIgaXNSaWdodEJ1dHRvbiA9IGUuYnV0dG9uID09PSAyIHx8IGUud2hpY2ggPT09IDM7XG4gICAgdmFyIGlzRG93biA9ICBpc1JpZ2h0QnV0dG9uID8gJ19pc1JpZ2h0RG93bicgOiAnX2lzTGVmdERvd24nO1xuXG4gICAgaWYoaGl0KVxuICAgIHtcbiAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50KCBkaXNwbGF5T2JqZWN0LCBpc1JpZ2h0QnV0dG9uID8gJ3JpZ2h0dXAnIDogJ21vdXNldXAnLCB0aGlzLmV2ZW50RGF0YSApO1xuXG4gICAgICAgIGlmKCBkaXNwbGF5T2JqZWN0WyBpc0Rvd24gXSApXG4gICAgICAgIHtcbiAgICAgICAgICAgIGRpc3BsYXlPYmplY3RbIGlzRG93biBdID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLmRpc3BhdGNoRXZlbnQoIGRpc3BsYXlPYmplY3QsIGlzUmlnaHRCdXR0b24gPyAncmlnaHRjbGljaycgOiAnY2xpY2snLCB0aGlzLmV2ZW50RGF0YSApO1xuICAgICAgICB9XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIGlmKCBkaXNwbGF5T2JqZWN0WyBpc0Rvd24gXSApXG4gICAgICAgIHtcbiAgICAgICAgICAgIGRpc3BsYXlPYmplY3RbIGlzRG93biBdID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLmRpc3BhdGNoRXZlbnQoIGRpc3BsYXlPYmplY3QsIGlzUmlnaHRCdXR0b24gPyAncmlnaHR1cG91dHNpZGUnIDogJ21vdXNldXBvdXRzaWRlJywgdGhpcy5ldmVudERhdGEgKTtcbiAgICAgICAgfVxuICAgIH1cbn07XG5cblxuLyoqXG4gKiBJcyBjYWxsZWQgd2hlbiB0aGUgbW91c2UgbW92ZXMgYWNyb3NzIHRoZSByZW5kZXJlciBlbGVtZW50XG4gKlxuICogQHBhcmFtIGV2ZW50IHtFdmVudH0gVGhlIERPTSBldmVudCBvZiB0aGUgbW91c2UgbW92aW5nXG4gKiBAcHJpdmF0ZVxuICovXG5JbnRlcmFjdGlvbk1hbmFnZXIucHJvdG90eXBlLm9uTW91c2VNb3ZlID0gZnVuY3Rpb24gKGV2ZW50KVxue1xuICAgIHRoaXMubW91c2Uub3JpZ2luYWxFdmVudCA9IGV2ZW50O1xuICAgIHRoaXMuZXZlbnREYXRhLmRhdGEgPSB0aGlzLm1vdXNlO1xuICAgIHRoaXMuZXZlbnREYXRhLnN0b3BwZWQgPSBmYWxzZTtcblxuICAgIHRoaXMubWFwUG9zaXRpb25Ub1BvaW50KCB0aGlzLm1vdXNlLmdsb2JhbCwgZXZlbnQuY2xpZW50WCwgZXZlbnQuY2xpZW50WSk7XG5cbiAgICB0aGlzLmRpZE1vdmUgPSB0cnVlO1xuXG4gICAgdGhpcy5jdXJzb3IgPSAnaW5oZXJpdCc7XG5cbiAgICB0aGlzLnByb2Nlc3NJbnRlcmFjdGl2ZSh0aGlzLm1vdXNlLmdsb2JhbCwgdGhpcy5yZW5kZXJlci5fbGFzdE9iamVjdFJlbmRlcmVkLCB0aGlzLnByb2Nlc3NNb3VzZU1vdmUsIHRydWUgKTtcblxuICAgIGlmICh0aGlzLmN1cnJlbnRDdXJzb3JTdHlsZSAhPT0gdGhpcy5jdXJzb3IpXG4gICAge1xuICAgICAgICB0aGlzLmN1cnJlbnRDdXJzb3JTdHlsZSA9IHRoaXMuY3Vyc29yO1xuICAgICAgICB0aGlzLmludGVyYWN0aW9uRE9NRWxlbWVudC5zdHlsZS5jdXJzb3IgPSB0aGlzLmN1cnNvcjtcbiAgICB9XG5cbiAgICAvL1RPRE8gQlVHIGZvciBwYXJlbnRzIGluZXJhY3RpdmUgb2JqZWN0IChib3JkZXIgb3JkZXIgaXNzdWUpXG59O1xuXG4vKipcbiAqIFByb2Nlc3NlcyB0aGUgcmVzdWx0IG9mIHRoZSBtb3VzZSBtb3ZlIGNoZWNrIGFuZCBkaXNwYXRjaGVzIHRoZSBldmVudCBpZiBuZWVkIGJlXG4gKlxuICogQHBhcmFtIGRpc3BsYXlPYmplY3Qge1BJWEkuQ29udGFpbmVyfFBJWEkuU3ByaXRlfFBJWEkuZXh0cmFzLlRpbGluZ1Nwcml0ZX0gVGhlIGRpc3BsYXkgb2JqZWN0IHRoYXQgd2FzIHRlc3RlZFxuICogQHBhcmFtIGhpdCB7Ym9vbGVhbn0gdGhlIHJlc3VsdCBvZiB0aGUgaGl0IHRlc3Qgb24gdGhlIGRpc3BsYXkgb2JqZWN0XG4gKiBAcHJpdmF0ZVxuICovXG5JbnRlcmFjdGlvbk1hbmFnZXIucHJvdG90eXBlLnByb2Nlc3NNb3VzZU1vdmUgPSBmdW5jdGlvbiAoIGRpc3BsYXlPYmplY3QsIGhpdCApXG57XG4gICAgdGhpcy5kaXNwYXRjaEV2ZW50KCBkaXNwbGF5T2JqZWN0LCAnbW91c2Vtb3ZlJywgdGhpcy5ldmVudERhdGEpO1xuICAgIHRoaXMucHJvY2Vzc01vdXNlT3Zlck91dChkaXNwbGF5T2JqZWN0LCBoaXQpO1xufTtcblxuXG4vKipcbiAqIElzIGNhbGxlZCB3aGVuIHRoZSBtb3VzZSBpcyBtb3ZlZCBvdXQgb2YgdGhlIHJlbmRlcmVyIGVsZW1lbnRcbiAqXG4gKiBAcGFyYW0gZXZlbnQge0V2ZW50fSBUaGUgRE9NIGV2ZW50IG9mIGEgbW91c2UgYmVpbmcgbW92ZWQgb3V0XG4gKiBAcHJpdmF0ZVxuICovXG5JbnRlcmFjdGlvbk1hbmFnZXIucHJvdG90eXBlLm9uTW91c2VPdXQgPSBmdW5jdGlvbiAoZXZlbnQpXG57XG4gICAgdGhpcy5tb3VzZS5vcmlnaW5hbEV2ZW50ID0gZXZlbnQ7XG4gICAgdGhpcy5ldmVudERhdGEuc3RvcHBlZCA9IGZhbHNlO1xuXG4gICAgLy8gVXBkYXRlIGludGVybmFsIG1vdXNlIHJlZmVyZW5jZVxuICAgIHRoaXMubWFwUG9zaXRpb25Ub1BvaW50KCB0aGlzLm1vdXNlLmdsb2JhbCwgZXZlbnQuY2xpZW50WCwgZXZlbnQuY2xpZW50WSk7XG5cbiAgICB0aGlzLmludGVyYWN0aW9uRE9NRWxlbWVudC5zdHlsZS5jdXJzb3IgPSAnaW5oZXJpdCc7XG5cbiAgICAvLyBUT0RPIG9wdGltaXplIGJ5IG5vdCBjaGVjayBFVkVSWSBUSU1FISBtYXliZSBoYWxmIGFzIG9mdGVuPyAvL1xuICAgIHRoaXMubWFwUG9zaXRpb25Ub1BvaW50KCB0aGlzLm1vdXNlLmdsb2JhbCwgZXZlbnQuY2xpZW50WCwgZXZlbnQuY2xpZW50WSApO1xuXG4gICAgdGhpcy5wcm9jZXNzSW50ZXJhY3RpdmUoIHRoaXMubW91c2UuZ2xvYmFsLCB0aGlzLnJlbmRlcmVyLl9sYXN0T2JqZWN0UmVuZGVyZWQsIHRoaXMucHJvY2Vzc01vdXNlT3Zlck91dCwgZmFsc2UgKTtcbn07XG5cbi8qKlxuICogUHJvY2Vzc2VzIHRoZSByZXN1bHQgb2YgdGhlIG1vdXNlIG92ZXIvb3V0IGNoZWNrIGFuZCBkaXNwYXRjaGVzIHRoZSBldmVudCBpZiBuZWVkIGJlXG4gKlxuICogQHBhcmFtIGRpc3BsYXlPYmplY3Qge1BJWEkuQ29udGFpbmVyfFBJWEkuU3ByaXRlfFBJWEkuZXh0cmFzLlRpbGluZ1Nwcml0ZX0gVGhlIGRpc3BsYXkgb2JqZWN0IHRoYXQgd2FzIHRlc3RlZFxuICogQHBhcmFtIGhpdCB7Ym9vbGVhbn0gdGhlIHJlc3VsdCBvZiB0aGUgaGl0IHRlc3Qgb24gdGhlIGRpc3BsYXkgb2JqZWN0XG4gKiBAcHJpdmF0ZVxuICovXG5JbnRlcmFjdGlvbk1hbmFnZXIucHJvdG90eXBlLnByb2Nlc3NNb3VzZU92ZXJPdXQgPSBmdW5jdGlvbiAoIGRpc3BsYXlPYmplY3QsIGhpdCApXG57XG4gICAgaWYoaGl0KVxuICAgIHtcbiAgICAgICAgaWYoIWRpc3BsYXlPYmplY3QuX292ZXIpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGRpc3BsYXlPYmplY3QuX292ZXIgPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50KCBkaXNwbGF5T2JqZWN0LCAnbW91c2VvdmVyJywgdGhpcy5ldmVudERhdGEgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChkaXNwbGF5T2JqZWN0LmJ1dHRvbk1vZGUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuY3Vyc29yID0gZGlzcGxheU9iamVjdC5kZWZhdWx0Q3Vyc29yO1xuICAgICAgICB9XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIGlmKGRpc3BsYXlPYmplY3QuX292ZXIpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGRpc3BsYXlPYmplY3QuX292ZXIgPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudCggZGlzcGxheU9iamVjdCwgJ21vdXNlb3V0JywgdGhpcy5ldmVudERhdGEpO1xuICAgICAgICB9XG4gICAgfVxufTtcblxuXG4vKipcbiAqIElzIGNhbGxlZCB3aGVuIGEgdG91Y2ggaXMgc3RhcnRlZCBvbiB0aGUgcmVuZGVyZXIgZWxlbWVudFxuICpcbiAqIEBwYXJhbSBldmVudCB7RXZlbnR9IFRoZSBET00gZXZlbnQgb2YgYSB0b3VjaCBzdGFydGluZyBvbiB0aGUgcmVuZGVyZXIgdmlld1xuICogQHByaXZhdGVcbiAqL1xuSW50ZXJhY3Rpb25NYW5hZ2VyLnByb3RvdHlwZS5vblRvdWNoU3RhcnQgPSBmdW5jdGlvbiAoZXZlbnQpXG57XG4gICAgaWYgKHRoaXMuYXV0b1ByZXZlbnREZWZhdWx0KVxuICAgIHtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICB9XG5cbiAgICB2YXIgY2hhbmdlZFRvdWNoZXMgPSBldmVudC5jaGFuZ2VkVG91Y2hlcztcbiAgICB2YXIgY0xlbmd0aCA9IGNoYW5nZWRUb3VjaGVzLmxlbmd0aDtcblxuICAgIGZvciAodmFyIGk9MDsgaSA8IGNMZW5ndGg7IGkrKylcbiAgICB7XG4gICAgICAgIHZhciB0b3VjaEV2ZW50ID0gY2hhbmdlZFRvdWNoZXNbaV07XG4gICAgICAgIC8vVE9ETyBQT09MXG4gICAgICAgIHZhciB0b3VjaERhdGEgPSB0aGlzLmdldFRvdWNoRGF0YSggdG91Y2hFdmVudCApO1xuXG4gICAgICAgIHRvdWNoRGF0YS5vcmlnaW5hbEV2ZW50ID0gZXZlbnQ7XG5cbiAgICAgICAgdGhpcy5ldmVudERhdGEuZGF0YSA9IHRvdWNoRGF0YTtcbiAgICAgICAgdGhpcy5ldmVudERhdGEuc3RvcHBlZCA9IGZhbHNlO1xuXG4gICAgICAgIHRoaXMucHJvY2Vzc0ludGVyYWN0aXZlKCB0b3VjaERhdGEuZ2xvYmFsLCB0aGlzLnJlbmRlcmVyLl9sYXN0T2JqZWN0UmVuZGVyZWQsIHRoaXMucHJvY2Vzc1RvdWNoU3RhcnQsIHRydWUgKTtcblxuICAgICAgICB0aGlzLnJldHVyblRvdWNoRGF0YSggdG91Y2hEYXRhICk7XG4gICAgfVxufTtcblxuLyoqXG4gKiBQcm9jZXNzZXMgdGhlIHJlc3VsdCBvZiBhIHRvdWNoIGNoZWNrIGFuZCBkaXNwYXRjaGVzIHRoZSBldmVudCBpZiBuZWVkIGJlXG4gKlxuICogQHBhcmFtIGRpc3BsYXlPYmplY3Qge1BJWEkuQ29udGFpbmVyfFBJWEkuU3ByaXRlfFBJWEkuZXh0cmFzLlRpbGluZ1Nwcml0ZX0gVGhlIGRpc3BsYXkgb2JqZWN0IHRoYXQgd2FzIHRlc3RlZFxuICogQHBhcmFtIGhpdCB7Ym9vbGVhbn0gdGhlIHJlc3VsdCBvZiB0aGUgaGl0IHRlc3Qgb24gdGhlIGRpc3BsYXkgb2JqZWN0XG4gKiBAcHJpdmF0ZVxuICovXG5JbnRlcmFjdGlvbk1hbmFnZXIucHJvdG90eXBlLnByb2Nlc3NUb3VjaFN0YXJ0ID0gZnVuY3Rpb24gKCBkaXNwbGF5T2JqZWN0LCBoaXQgKVxue1xuICAgIGlmKGhpdClcbiAgICB7XG4gICAgICAgIGRpc3BsYXlPYmplY3QuX3RvdWNoRG93biA9IHRydWU7XG4gICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudCggZGlzcGxheU9iamVjdCwgJ3RvdWNoc3RhcnQnLCB0aGlzLmV2ZW50RGF0YSApO1xuICAgIH1cbn07XG5cblxuLyoqXG4gKiBJcyBjYWxsZWQgd2hlbiBhIHRvdWNoIGVuZHMgb24gdGhlIHJlbmRlcmVyIGVsZW1lbnRcbiAqXG4gKiBAcGFyYW0gZXZlbnQge0V2ZW50fSBUaGUgRE9NIGV2ZW50IG9mIGEgdG91Y2ggZW5kaW5nIG9uIHRoZSByZW5kZXJlciB2aWV3XG4gKi9cbkludGVyYWN0aW9uTWFuYWdlci5wcm90b3R5cGUub25Ub3VjaEVuZCA9IGZ1bmN0aW9uIChldmVudClcbntcbiAgICBpZiAodGhpcy5hdXRvUHJldmVudERlZmF1bHQpXG4gICAge1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIH1cblxuICAgIHZhciBjaGFuZ2VkVG91Y2hlcyA9IGV2ZW50LmNoYW5nZWRUb3VjaGVzO1xuICAgIHZhciBjTGVuZ3RoID0gY2hhbmdlZFRvdWNoZXMubGVuZ3RoO1xuXG4gICAgZm9yICh2YXIgaT0wOyBpIDwgY0xlbmd0aDsgaSsrKVxuICAgIHtcbiAgICAgICAgdmFyIHRvdWNoRXZlbnQgPSBjaGFuZ2VkVG91Y2hlc1tpXTtcblxuICAgICAgICB2YXIgdG91Y2hEYXRhID0gdGhpcy5nZXRUb3VjaERhdGEoIHRvdWNoRXZlbnQgKTtcblxuICAgICAgICB0b3VjaERhdGEub3JpZ2luYWxFdmVudCA9IGV2ZW50O1xuXG4gICAgICAgIC8vVE9ETyB0aGlzIHNob3VsZCBiZSBwYXNzZWQgYWxvbmcuLiBubyBzZXRcbiAgICAgICAgdGhpcy5ldmVudERhdGEuZGF0YSA9IHRvdWNoRGF0YTtcbiAgICAgICAgdGhpcy5ldmVudERhdGEuc3RvcHBlZCA9IGZhbHNlO1xuXG5cbiAgICAgICAgdGhpcy5wcm9jZXNzSW50ZXJhY3RpdmUoIHRvdWNoRGF0YS5nbG9iYWwsIHRoaXMucmVuZGVyZXIuX2xhc3RPYmplY3RSZW5kZXJlZCwgdGhpcy5wcm9jZXNzVG91Y2hFbmQsIHRydWUgKTtcblxuICAgICAgICB0aGlzLnJldHVyblRvdWNoRGF0YSggdG91Y2hEYXRhICk7XG4gICAgfVxufTtcblxuLyoqXG4gKiBQcm9jZXNzZXMgdGhlIHJlc3VsdCBvZiB0aGUgZW5kIG9mIGEgdG91Y2ggYW5kIGRpc3BhdGNoZXMgdGhlIGV2ZW50IGlmIG5lZWQgYmVcbiAqXG4gKiBAcGFyYW0gZGlzcGxheU9iamVjdCB7UElYSS5Db250YWluZXJ8UElYSS5TcHJpdGV8UElYSS5leHRyYXMuVGlsaW5nU3ByaXRlfSBUaGUgZGlzcGxheSBvYmplY3QgdGhhdCB3YXMgdGVzdGVkXG4gKiBAcGFyYW0gaGl0IHtib29sZWFufSB0aGUgcmVzdWx0IG9mIHRoZSBoaXQgdGVzdCBvbiB0aGUgZGlzcGxheSBvYmplY3RcbiAqIEBwcml2YXRlXG4gKi9cbkludGVyYWN0aW9uTWFuYWdlci5wcm90b3R5cGUucHJvY2Vzc1RvdWNoRW5kID0gZnVuY3Rpb24gKCBkaXNwbGF5T2JqZWN0LCBoaXQgKVxue1xuICAgIGlmKGhpdClcbiAgICB7XG4gICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudCggZGlzcGxheU9iamVjdCwgJ3RvdWNoZW5kJywgdGhpcy5ldmVudERhdGEgKTtcblxuICAgICAgICBpZiggZGlzcGxheU9iamVjdC5fdG91Y2hEb3duIClcbiAgICAgICAge1xuICAgICAgICAgICAgZGlzcGxheU9iamVjdC5fdG91Y2hEb3duID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLmRpc3BhdGNoRXZlbnQoIGRpc3BsYXlPYmplY3QsICd0YXAnLCB0aGlzLmV2ZW50RGF0YSApO1xuICAgICAgICB9XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIGlmKCBkaXNwbGF5T2JqZWN0Ll90b3VjaERvd24gKVxuICAgICAgICB7XG4gICAgICAgICAgICBkaXNwbGF5T2JqZWN0Ll90b3VjaERvd24gPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudCggZGlzcGxheU9iamVjdCwgJ3RvdWNoZW5kb3V0c2lkZScsIHRoaXMuZXZlbnREYXRhICk7XG4gICAgICAgIH1cbiAgICB9XG59O1xuXG4vKipcbiAqIElzIGNhbGxlZCB3aGVuIGEgdG91Y2ggaXMgbW92ZWQgYWNyb3NzIHRoZSByZW5kZXJlciBlbGVtZW50XG4gKlxuICogQHBhcmFtIGV2ZW50IHtFdmVudH0gVGhlIERPTSBldmVudCBvZiBhIHRvdWNoIG1vdmluZyBhY3Jvc3MgdGhlIHJlbmRlcmVyIHZpZXdcbiAqIEBwcml2YXRlXG4gKi9cbkludGVyYWN0aW9uTWFuYWdlci5wcm90b3R5cGUub25Ub3VjaE1vdmUgPSBmdW5jdGlvbiAoZXZlbnQpXG57XG4gICAgaWYgKHRoaXMuYXV0b1ByZXZlbnREZWZhdWx0KVxuICAgIHtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICB9XG5cbiAgICB2YXIgY2hhbmdlZFRvdWNoZXMgPSBldmVudC5jaGFuZ2VkVG91Y2hlcztcbiAgICB2YXIgY0xlbmd0aCA9IGNoYW5nZWRUb3VjaGVzLmxlbmd0aDtcblxuICAgIGZvciAodmFyIGk9MDsgaSA8IGNMZW5ndGg7IGkrKylcbiAgICB7XG4gICAgICAgIHZhciB0b3VjaEV2ZW50ID0gY2hhbmdlZFRvdWNoZXNbaV07XG5cbiAgICAgICAgdmFyIHRvdWNoRGF0YSA9IHRoaXMuZ2V0VG91Y2hEYXRhKCB0b3VjaEV2ZW50ICk7XG5cbiAgICAgICAgdG91Y2hEYXRhLm9yaWdpbmFsRXZlbnQgPSBldmVudDtcblxuICAgICAgICB0aGlzLmV2ZW50RGF0YS5kYXRhID0gdG91Y2hEYXRhO1xuICAgICAgICB0aGlzLmV2ZW50RGF0YS5zdG9wcGVkID0gZmFsc2U7XG5cbiAgICAgICAgdGhpcy5wcm9jZXNzSW50ZXJhY3RpdmUoIHRvdWNoRGF0YS5nbG9iYWwsIHRoaXMucmVuZGVyZXIuX2xhc3RPYmplY3RSZW5kZXJlZCwgdGhpcy5wcm9jZXNzVG91Y2hNb3ZlLCB0cnVlICk7XG5cbiAgICAgICAgdGhpcy5yZXR1cm5Ub3VjaERhdGEoIHRvdWNoRGF0YSApO1xuICAgIH1cbn07XG5cbi8qKlxuICogUHJvY2Vzc2VzIHRoZSByZXN1bHQgb2YgYSB0b3VjaCBtb3ZlIGNoZWNrIGFuZCBkaXNwYXRjaGVzIHRoZSBldmVudCBpZiBuZWVkIGJlXG4gKlxuICogQHBhcmFtIGRpc3BsYXlPYmplY3Qge1BJWEkuQ29udGFpbmVyfFBJWEkuU3ByaXRlfFBJWEkuZXh0cmFzLlRpbGluZ1Nwcml0ZX0gVGhlIGRpc3BsYXkgb2JqZWN0IHRoYXQgd2FzIHRlc3RlZFxuICogQHBhcmFtIGhpdCB7Ym9vbGVhbn0gdGhlIHJlc3VsdCBvZiB0aGUgaGl0IHRlc3Qgb24gdGhlIGRpc3BsYXkgb2JqZWN0XG4gKiBAcHJpdmF0ZVxuICovXG5JbnRlcmFjdGlvbk1hbmFnZXIucHJvdG90eXBlLnByb2Nlc3NUb3VjaE1vdmUgPSBmdW5jdGlvbiAoIGRpc3BsYXlPYmplY3QsIGhpdCApXG57XG4gICAgaGl0ID0gaGl0O1xuICAgIHRoaXMuZGlzcGF0Y2hFdmVudCggZGlzcGxheU9iamVjdCwgJ3RvdWNobW92ZScsIHRoaXMuZXZlbnREYXRhKTtcbn07XG5cbi8qKlxuICogR3JhYnMgYW4gaW50ZXJhY3Rpb24gZGF0YSBvYmplY3QgZnJvbSB0aGUgaW50ZXJuYWwgcG9vbFxuICpcbiAqIEBwYXJhbSB0b3VjaEV2ZW50IHtFdmVudERhdGF9IFRoZSB0b3VjaCBldmVudCB3ZSBuZWVkIHRvIHBhaXIgd2l0aCBhbiBpbnRlcmFjdGlvbkRhdGEgb2JqZWN0XG4gKlxuICogQHByaXZhdGVcbiAqL1xuSW50ZXJhY3Rpb25NYW5hZ2VyLnByb3RvdHlwZS5nZXRUb3VjaERhdGEgPSBmdW5jdGlvbiAodG91Y2hFdmVudClcbntcbiAgICB2YXIgdG91Y2hEYXRhID0gdGhpcy5pbnRlcmFjdGl2ZURhdGFQb29sLnBvcCgpO1xuXG4gICAgaWYoIXRvdWNoRGF0YSlcbiAgICB7XG4gICAgICAgIHRvdWNoRGF0YSA9IG5ldyBJbnRlcmFjdGlvbkRhdGEoKTtcbiAgICB9XG5cbiAgICB0b3VjaERhdGEuaWRlbnRpZmllciA9IHRvdWNoRXZlbnQuaWRlbnRpZmllcjtcbiAgICB0aGlzLm1hcFBvc2l0aW9uVG9Qb2ludCggdG91Y2hEYXRhLmdsb2JhbCwgdG91Y2hFdmVudC5jbGllbnRYLCB0b3VjaEV2ZW50LmNsaWVudFkgKTtcblxuICAgIGlmKG5hdmlnYXRvci5pc0NvY29vbkpTKVxuICAgIHtcbiAgICAgICAgdG91Y2hEYXRhLmdsb2JhbC54ID0gdG91Y2hEYXRhLmdsb2JhbC54IC8gdGhpcy5yZXNvbHV0aW9uO1xuICAgICAgICB0b3VjaERhdGEuZ2xvYmFsLnkgPSB0b3VjaERhdGEuZ2xvYmFsLnkgLyB0aGlzLnJlc29sdXRpb247XG4gICAgfVxuXG4gICAgdG91Y2hFdmVudC5nbG9iYWxYID0gdG91Y2hEYXRhLmdsb2JhbC54O1xuICAgIHRvdWNoRXZlbnQuZ2xvYmFsWSA9IHRvdWNoRGF0YS5nbG9iYWwueTtcblxuICAgIHJldHVybiB0b3VjaERhdGE7XG59O1xuXG4vKipcbiAqIFJldHVybnMgYW4gaW50ZXJhY3Rpb24gZGF0YSBvYmplY3QgdG8gdGhlIGludGVybmFsIHBvb2xcbiAqXG4gKiBAcGFyYW0gdG91Y2hEYXRhIHtQSVhJLmludGVyYWN0aW9uLkludGVyYWN0aW9uRGF0YX0gVGhlIHRvdWNoIGRhdGEgb2JqZWN0IHdlIHdhbnQgdG8gcmV0dXJuIHRvIHRoZSBwb29sXG4gKlxuICogQHByaXZhdGVcbiAqL1xuSW50ZXJhY3Rpb25NYW5hZ2VyLnByb3RvdHlwZS5yZXR1cm5Ub3VjaERhdGEgPSBmdW5jdGlvbiAoIHRvdWNoRGF0YSApXG57XG4gICAgdGhpcy5pbnRlcmFjdGl2ZURhdGFQb29sLnB1c2goIHRvdWNoRGF0YSApO1xufTtcblxuLyoqXG4gKiBEZXN0cm95cyB0aGUgaW50ZXJhY3Rpb24gbWFuYWdlclxuICpcbiAqL1xuSW50ZXJhY3Rpb25NYW5hZ2VyLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKCkge1xuICAgIHRoaXMucmVtb3ZlRXZlbnRzKCk7XG5cbiAgICB0aGlzLnJlbmRlcmVyID0gbnVsbDtcblxuICAgIHRoaXMubW91c2UgPSBudWxsO1xuXG4gICAgdGhpcy5ldmVudERhdGEgPSBudWxsO1xuXG4gICAgdGhpcy5pbnRlcmFjdGl2ZURhdGFQb29sID0gbnVsbDtcblxuICAgIHRoaXMuaW50ZXJhY3Rpb25ET01FbGVtZW50ID0gbnVsbDtcblxuICAgIHRoaXMub25Nb3VzZVVwID0gbnVsbDtcbiAgICB0aGlzLnByb2Nlc3NNb3VzZVVwID0gbnVsbDtcblxuXG4gICAgdGhpcy5vbk1vdXNlRG93biA9IG51bGw7XG4gICAgdGhpcy5wcm9jZXNzTW91c2VEb3duID0gbnVsbDtcblxuICAgIHRoaXMub25Nb3VzZU1vdmUgPSBudWxsO1xuICAgIHRoaXMucHJvY2Vzc01vdXNlTW92ZSA9IG51bGw7XG5cbiAgICB0aGlzLm9uTW91c2VPdXQgPSBudWxsO1xuICAgIHRoaXMucHJvY2Vzc01vdXNlT3Zlck91dCA9IG51bGw7XG5cblxuICAgIHRoaXMub25Ub3VjaFN0YXJ0ID0gbnVsbDtcbiAgICB0aGlzLnByb2Nlc3NUb3VjaFN0YXJ0ID0gbnVsbDtcblxuICAgIHRoaXMub25Ub3VjaEVuZCA9IG51bGw7XG4gICAgdGhpcy5wcm9jZXNzVG91Y2hFbmQgPSBudWxsO1xuXG4gICAgdGhpcy5vblRvdWNoTW92ZSA9IG51bGw7XG4gICAgdGhpcy5wcm9jZXNzVG91Y2hNb3ZlID0gbnVsbDtcblxuICAgIHRoaXMuX3RlbXBQb2ludCA9IG51bGw7XG59O1xuXG5jb3JlLldlYkdMUmVuZGVyZXIucmVnaXN0ZXJQbHVnaW4oJ2ludGVyYWN0aW9uJywgSW50ZXJhY3Rpb25NYW5hZ2VyKTtcbmNvcmUuQ2FudmFzUmVuZGVyZXIucmVnaXN0ZXJQbHVnaW4oJ2ludGVyYWN0aW9uJywgSW50ZXJhY3Rpb25NYW5hZ2VyKTtcbiIsIi8qKlxuICogQGZpbGUgICAgICAgIE1haW4gZXhwb3J0IG9mIHRoZSBQSVhJIGludGVyYWN0aW9ucyBsaWJyYXJ5XG4gKiBAYXV0aG9yICAgICAgTWF0IEdyb3ZlcyA8bWF0QGdvb2Rib3lkaWdpdGFsLmNvbT5cbiAqIEBjb3B5cmlnaHQgICAyMDEzLTIwMTUgR29vZEJveURpZ2l0YWxcbiAqIEBsaWNlbnNlICAgICB7QGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL3BpeGlqcy9waXhpLmpzL2Jsb2IvbWFzdGVyL0xJQ0VOU0V8TUlUIExpY2Vuc2V9XG4gKi9cblxuLyoqXG4gKiBAbmFtZXNwYWNlIFBJWEkuaW50ZXJhY3Rpb25cbiAqL1xubW9kdWxlLmV4cG9ydHMgPSB7XG4gICAgSW50ZXJhY3Rpb25EYXRhOiAgICByZXF1aXJlKCcuL0ludGVyYWN0aW9uRGF0YScpLFxuICAgIEludGVyYWN0aW9uTWFuYWdlcjogcmVxdWlyZSgnLi9JbnRlcmFjdGlvbk1hbmFnZXInKSxcbiAgICBpbnRlcmFjdGl2ZVRhcmdldDogIHJlcXVpcmUoJy4vaW50ZXJhY3RpdmVUYXJnZXQnKVxufTtcbiIsIi8qKlxuICogRGVmYXVsdCBwcm9wZXJ0eSB2YWx1ZXMgb2YgaW50ZXJhY3RpdmUgb2JqZWN0c1xuICogdXNlZCBieSB7QGxpbmsgUElYSS5pbnRlcmFjdGlvbi5JbnRlcmFjdGlvbk1hbmFnZXJ9LlxuICpcbiAqIEBtaXhpblxuICogQG1lbWJlcm9mIFBJWEkuaW50ZXJhY3Rpb25cbiAqIEBleGFtcGxlXG4gKiAgICAgIGZ1bmN0aW9uIE15T2JqZWN0KCkge31cbiAqXG4gKiAgICAgIE9iamVjdC5hc3NpZ24oXG4gKiAgICAgICAgICBNeU9iamVjdC5wcm90b3R5cGUsXG4gKiAgICAgICAgICBQSVhJLmludGVyYWN0aW9uLmludGVyYWN0aXZlVGFyZ2V0XG4gKiAgICAgICk7XG4gKi9cbnZhciBpbnRlcmFjdGl2ZVRhcmdldCA9IHtcbiAgICAvKipcbiAgICAgKiBAdG9kbyBOZWVkcyBkb2NzLlxuICAgICAqL1xuICAgIGludGVyYWN0aXZlOiBmYWxzZSxcbiAgICAvKipcbiAgICAgKiBAdG9kbyBOZWVkcyBkb2NzLlxuICAgICAqL1xuICAgIGJ1dHRvbk1vZGU6IGZhbHNlLFxuICAgIC8qKlxuICAgICAqIEB0b2RvIE5lZWRzIGRvY3MuXG4gICAgICovXG4gICAgaW50ZXJhY3RpdmVDaGlsZHJlbjogdHJ1ZSxcbiAgICAvKipcbiAgICAgKiBAdG9kbyBOZWVkcyBkb2NzLlxuICAgICAqL1xuICAgIGRlZmF1bHRDdXJzb3I6ICdwb2ludGVyJyxcblxuICAgIC8vIHNvbWUgaW50ZXJuYWwgY2hlY2tzLi5cblxuICAgIC8qKlxuICAgICAqIEB0b2RvIE5lZWRzIGRvY3MuXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICBfb3ZlcjogZmFsc2UsXG4gICAgLyoqXG4gICAgICogQHRvZG8gTmVlZHMgZG9jcy5cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIF90b3VjaERvd246IGZhbHNlXG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGludGVyYWN0aXZlVGFyZ2V0O1xuIiwidmFyIFJlc291cmNlID0gcmVxdWlyZSgncmVzb3VyY2UtbG9hZGVyJykuUmVzb3VyY2UsXG4gICAgY29yZSA9IHJlcXVpcmUoJy4uL2NvcmUnKSxcbiAgICBleHRyYXMgPSByZXF1aXJlKCcuLi9leHRyYXMnKSxcbiAgICBwYXRoID0gcmVxdWlyZSgncGF0aCcpO1xuXG5cbmZ1bmN0aW9uIHBhcnNlKHJlc291cmNlLCB0ZXh0dXJlKSB7XG4gICAgdmFyIGRhdGEgPSB7fTtcbiAgICB2YXIgaW5mbyA9IHJlc291cmNlLmRhdGEuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2luZm8nKVswXTtcbiAgICB2YXIgY29tbW9uID0gcmVzb3VyY2UuZGF0YS5nZXRFbGVtZW50c0J5VGFnTmFtZSgnY29tbW9uJylbMF07XG5cbiAgICBkYXRhLmZvbnQgPSBpbmZvLmdldEF0dHJpYnV0ZSgnZmFjZScpO1xuICAgIGRhdGEuc2l6ZSA9IHBhcnNlSW50KGluZm8uZ2V0QXR0cmlidXRlKCdzaXplJyksIDEwKTtcbiAgICBkYXRhLmxpbmVIZWlnaHQgPSBwYXJzZUludChjb21tb24uZ2V0QXR0cmlidXRlKCdsaW5lSGVpZ2h0JyksIDEwKTtcbiAgICBkYXRhLmNoYXJzID0ge307XG5cbiAgICAvL3BhcnNlIGxldHRlcnNcbiAgICB2YXIgbGV0dGVycyA9IHJlc291cmNlLmRhdGEuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2NoYXInKTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGV0dGVycy5sZW5ndGg7IGkrKylcbiAgICB7XG4gICAgICAgIHZhciBjaGFyQ29kZSA9IHBhcnNlSW50KGxldHRlcnNbaV0uZ2V0QXR0cmlidXRlKCdpZCcpLCAxMCk7XG5cbiAgICAgICAgdmFyIHRleHR1cmVSZWN0ID0gbmV3IGNvcmUuUmVjdGFuZ2xlKFxuICAgICAgICAgICAgcGFyc2VJbnQobGV0dGVyc1tpXS5nZXRBdHRyaWJ1dGUoJ3gnKSwgMTApICsgdGV4dHVyZS5mcmFtZS54LFxuICAgICAgICAgICAgcGFyc2VJbnQobGV0dGVyc1tpXS5nZXRBdHRyaWJ1dGUoJ3knKSwgMTApICsgdGV4dHVyZS5mcmFtZS55LFxuICAgICAgICAgICAgcGFyc2VJbnQobGV0dGVyc1tpXS5nZXRBdHRyaWJ1dGUoJ3dpZHRoJyksIDEwKSxcbiAgICAgICAgICAgIHBhcnNlSW50KGxldHRlcnNbaV0uZ2V0QXR0cmlidXRlKCdoZWlnaHQnKSwgMTApXG4gICAgICAgICk7XG5cbiAgICAgICAgZGF0YS5jaGFyc1tjaGFyQ29kZV0gPSB7XG4gICAgICAgICAgICB4T2Zmc2V0OiBwYXJzZUludChsZXR0ZXJzW2ldLmdldEF0dHJpYnV0ZSgneG9mZnNldCcpLCAxMCksXG4gICAgICAgICAgICB5T2Zmc2V0OiBwYXJzZUludChsZXR0ZXJzW2ldLmdldEF0dHJpYnV0ZSgneW9mZnNldCcpLCAxMCksXG4gICAgICAgICAgICB4QWR2YW5jZTogcGFyc2VJbnQobGV0dGVyc1tpXS5nZXRBdHRyaWJ1dGUoJ3hhZHZhbmNlJyksIDEwKSxcbiAgICAgICAgICAgIGtlcm5pbmc6IHt9LFxuICAgICAgICAgICAgdGV4dHVyZTogbmV3IGNvcmUuVGV4dHVyZSh0ZXh0dXJlLmJhc2VUZXh0dXJlLCB0ZXh0dXJlUmVjdClcblxuICAgICAgICB9O1xuICAgIH1cblxuICAgIC8vcGFyc2Uga2VybmluZ3NcbiAgICB2YXIga2VybmluZ3MgPSByZXNvdXJjZS5kYXRhLmdldEVsZW1lbnRzQnlUYWdOYW1lKCdrZXJuaW5nJyk7XG4gICAgZm9yIChpID0gMDsgaSA8IGtlcm5pbmdzLmxlbmd0aDsgaSsrKVxuICAgIHtcbiAgICAgICAgdmFyIGZpcnN0ID0gcGFyc2VJbnQoa2VybmluZ3NbaV0uZ2V0QXR0cmlidXRlKCdmaXJzdCcpLCAxMCk7XG4gICAgICAgIHZhciBzZWNvbmQgPSBwYXJzZUludChrZXJuaW5nc1tpXS5nZXRBdHRyaWJ1dGUoJ3NlY29uZCcpLCAxMCk7XG4gICAgICAgIHZhciBhbW91bnQgPSBwYXJzZUludChrZXJuaW5nc1tpXS5nZXRBdHRyaWJ1dGUoJ2Ftb3VudCcpLCAxMCk7XG5cbiAgICAgICAgZGF0YS5jaGFyc1tzZWNvbmRdLmtlcm5pbmdbZmlyc3RdID0gYW1vdW50O1xuICAgIH1cblxuICAgIHJlc291cmNlLmJpdG1hcEZvbnQgPSBkYXRhO1xuXG4gICAgLy8gSSdtIGxlYXZpbmcgdGhpcyBhcyBhIHRlbXBvcmFyeSBmaXggc28gd2UgY2FuIHRlc3QgdGhlIGJpdG1hcCBmb250cyBpbiB2M1xuICAgIC8vIGJ1dCBpdCdzIHZlcnkgbGlrZWx5IHRvIGNoYW5nZVxuICAgIGV4dHJhcy5CaXRtYXBUZXh0LmZvbnRzW2RhdGEuZm9udF0gPSBkYXRhO1xufVxuXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKClcbntcbiAgICByZXR1cm4gZnVuY3Rpb24gKHJlc291cmNlLCBuZXh0KVxuICAgIHtcbiAgICAgICAgLy8gc2tpcCBpZiBubyBkYXRhIG9yIG5vdCB4bWwgZGF0YVxuICAgICAgICBpZiAoIXJlc291cmNlLmRhdGEgfHwgIXJlc291cmNlLmlzWG1sKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gbmV4dCgpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gc2tpcCBpZiBub3QgYml0bWFwIGZvbnQgZGF0YSwgdXNpbmcgc29tZSBzaWxseSBkdWNrLXR5cGluZ1xuICAgICAgICBpZiAoXG4gICAgICAgICAgICByZXNvdXJjZS5kYXRhLmdldEVsZW1lbnRzQnlUYWdOYW1lKCdwYWdlJykubGVuZ3RoID09PSAwIHx8XG4gICAgICAgICAgICByZXNvdXJjZS5kYXRhLmdldEVsZW1lbnRzQnlUYWdOYW1lKCdpbmZvJykubGVuZ3RoID09PSAwIHx8XG4gICAgICAgICAgICByZXNvdXJjZS5kYXRhLmdldEVsZW1lbnRzQnlUYWdOYW1lKCdpbmZvJylbMF0uZ2V0QXR0cmlidXRlKCdmYWNlJykgPT09IG51bGxcbiAgICAgICAgICAgIClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIG5leHQoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciB4bWxVcmwgPSBwYXRoLmRpcm5hbWUocmVzb3VyY2UudXJsKTtcblxuICAgICAgICBpZiAoeG1sVXJsID09PSAnLicpIHtcbiAgICAgICAgICAgIHhtbFVybCA9ICcnO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuYmFzZVVybCAmJiB4bWxVcmwpIHtcbiAgICAgICAgICAgIC8vIGlmIGJhc2V1cmwgaGFzIGEgdHJhaWxpbmcgc2xhc2ggdGhlbiBhZGQgb25lIHRvIHhtbFVybCBzbyB0aGUgcmVwbGFjZSB3b3JrcyBiZWxvd1xuICAgICAgICAgICAgaWYgKHRoaXMuYmFzZVVybC5jaGFyQXQodGhpcy5iYXNlVXJsLmxlbmd0aCAtIDEpID09PSAnLycpIHtcbiAgICAgICAgICAgICAgICB4bWxVcmwgKz0gJy8nO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyByZW1vdmUgYmFzZVVybCBmcm9tIHhtbFVybFxuICAgICAgICAgICAgeG1sVXJsID0geG1sVXJsLnJlcGxhY2UodGhpcy5iYXNlVXJsLCAnJyk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBpZiB0aGVyZSBpcyBhbiB4bWxVcmwgbm93LCBpdCBuZWVkcyBhIHRyYWlsaW5nIHNsYXNoLiBFbnN1cmUgdGhhdCBpdCBkb2VzIGlmIHRoZSBzdHJpbmcgaXNuJ3QgZW1wdHkuXG4gICAgICAgIGlmICh4bWxVcmwgJiYgeG1sVXJsLmNoYXJBdCh4bWxVcmwubGVuZ3RoIC0gMSkgIT09ICcvJykge1xuICAgICAgICAgICAgeG1sVXJsICs9ICcvJztcbiAgICAgICAgfVxuICAgICAgICB2YXIgdGV4dHVyZVVybCA9IHhtbFVybCArIHJlc291cmNlLmRhdGEuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ3BhZ2UnKVswXS5nZXRBdHRyaWJ1dGUoJ2ZpbGUnKTtcbiAgICAgICAgaWYgKGNvcmUudXRpbHMuVGV4dHVyZUNhY2hlW3RleHR1cmVVcmxdKSB7XG4gICAgICAgICAgICAvL3JldXNlIGV4aXN0aW5nIHRleHR1cmVcbiAgICAgICAgICAgIHBhcnNlKHJlc291cmNlLCBjb3JlLnV0aWxzLlRleHR1cmVDYWNoZVt0ZXh0dXJlVXJsXSk7XG4gICAgICAgICAgICBuZXh0KCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB2YXIgbG9hZE9wdGlvbnMgPSB7XG4gICAgICAgICAgICAgICAgY3Jvc3NPcmlnaW46IHJlc291cmNlLmNyb3NzT3JpZ2luLFxuICAgICAgICAgICAgICAgIGxvYWRUeXBlOiBSZXNvdXJjZS5MT0FEX1RZUEUuSU1BR0UsXG4gICAgICAgICAgICAgICAgbWV0YWRhdGE6IHJlc291cmNlLm1ldGFkYXRhLmltYWdlTWV0YWRhdGFcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICAvLyBsb2FkIHRoZSB0ZXh0dXJlIGZvciB0aGUgZm9udFxuICAgICAgICAgICAgdGhpcy5hZGQocmVzb3VyY2UubmFtZSArICdfaW1hZ2UnLCB0ZXh0dXJlVXJsLCBsb2FkT3B0aW9ucywgZnVuY3Rpb24gKHJlcykge1xuICAgICAgICAgICAgICAgIHBhcnNlKHJlc291cmNlLCByZXMudGV4dHVyZSk7XG4gICAgICAgICAgICAgICAgbmV4dCgpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9O1xufTtcbiIsIi8qKlxuICogQGZpbGUgICAgICAgIE1haW4gZXhwb3J0IG9mIHRoZSBQSVhJIGxvYWRlcnMgbGlicmFyeVxuICogQGF1dGhvciAgICAgIE1hdCBHcm92ZXMgPG1hdEBnb29kYm95ZGlnaXRhbC5jb20+XG4gKiBAY29weXJpZ2h0ICAgMjAxMy0yMDE1IEdvb2RCb3lEaWdpdGFsXG4gKiBAbGljZW5zZSAgICAge0BsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9waXhpanMvcGl4aS5qcy9ibG9iL21hc3Rlci9MSUNFTlNFfE1JVCBMaWNlbnNlfVxuICovXG5cbi8qKlxuICogQG5hbWVzcGFjZSBQSVhJLmxvYWRlcnNcbiAqL1xubW9kdWxlLmV4cG9ydHMgPSB7XG4gICAgTG9hZGVyOiAgICAgICAgICAgICByZXF1aXJlKCcuL2xvYWRlcicpLFxuXG4gICAgLy8gcGFyc2Vyc1xuICAgIGJpdG1hcEZvbnRQYXJzZXI6ICAgcmVxdWlyZSgnLi9iaXRtYXBGb250UGFyc2VyJyksXG4gICAgc3ByaXRlc2hlZXRQYXJzZXI6ICByZXF1aXJlKCcuL3Nwcml0ZXNoZWV0UGFyc2VyJyksXG4gICAgdGV4dHVyZVBhcnNlcjogICAgICByZXF1aXJlKCcuL3RleHR1cmVQYXJzZXInKSxcbiAgICBSZXNvdXJjZTogICAgICAgICAgIHJlcXVpcmUoJ3Jlc291cmNlLWxvYWRlcicpLlJlc291cmNlXG59O1xuIiwidmFyIFJlc291cmNlTG9hZGVyID0gcmVxdWlyZSgncmVzb3VyY2UtbG9hZGVyJyksXG4gICAgdGV4dHVyZVBhcnNlciA9IHJlcXVpcmUoJy4vdGV4dHVyZVBhcnNlcicpLFxuICAgIHNwcml0ZXNoZWV0UGFyc2VyID0gcmVxdWlyZSgnLi9zcHJpdGVzaGVldFBhcnNlcicpLFxuICAgIGJpdG1hcEZvbnRQYXJzZXIgPSByZXF1aXJlKCcuL2JpdG1hcEZvbnRQYXJzZXInKTtcblxuLyoqXG4gKlxuICogVGhlIG5ldyBsb2FkZXIsIGV4dGVuZHMgUmVzb3VyY2UgTG9hZGVyIGJ5IENoYWQgRW5nbGVyIDogaHR0cHM6Ly9naXRodWIuY29tL2VuZ2xlcmNqL3Jlc291cmNlLWxvYWRlclxuICpcbiAqIGBgYGpzXG4gKiB2YXIgbG9hZGVyID0gUElYSS5sb2FkZXI7IC8vIHBpeGkgZXhwb3NlcyBhIHByZW1hZGUgaW5zdGFuY2UgZm9yIHlvdSB0byB1c2UuXG4gKiAvL29yXG4gKiB2YXIgbG9hZGVyID0gbmV3IFBJWEkubG9hZGVycy5Mb2FkZXIoKTsgLy8geW91IGNhbiBhbHNvIGNyZWF0ZSB5b3VyIG93biBpZiB5b3Ugd2FudFxuICpcbiAqIGxvYWRlci5hZGQoJ2J1bm55JyxcImRhdGEvYnVubnkucG5nXCIpO1xuICpcbiAqIGxvYWRlci5vbmNlKCdjb21wbGV0ZScsb25Bc3NldHNMb2FkZWQpO1xuICpcbiAqIGxvYWRlci5sb2FkKCk7XG4gKiBgYGBcbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuUmVzb3VyY2VMb2FkZXJcbiAqIEBtZW1iZXJvZiBQSVhJLmxvYWRlcnNcbiAqIEBwYXJhbSBbYmFzZVVybD0nJ10ge3N0cmluZ30gVGhlIGJhc2UgdXJsIGZvciBhbGwgcmVzb3VyY2VzIGxvYWRlZCBieSB0aGlzIGxvYWRlci5cbiAqIEBwYXJhbSBbY29uY3VycmVuY3k9MTBdIHtudW1iZXJ9IFRoZSBudW1iZXIgb2YgcmVzb3VyY2VzIHRvIGxvYWQgY29uY3VycmVudGx5LlxuICovXG5mdW5jdGlvbiBMb2FkZXIoYmFzZVVybCwgY29uY3VycmVuY3kpXG57XG4gICAgUmVzb3VyY2VMb2FkZXIuY2FsbCh0aGlzLCBiYXNlVXJsLCBjb25jdXJyZW5jeSk7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IExvYWRlci5fcGl4aU1pZGRsZXdhcmUubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgdGhpcy51c2UoTG9hZGVyLl9waXhpTWlkZGxld2FyZVtpXSgpKTtcbiAgICB9XG59XG5cbkxvYWRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFJlc291cmNlTG9hZGVyLnByb3RvdHlwZSk7XG5Mb2FkZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gTG9hZGVyO1xuXG5tb2R1bGUuZXhwb3J0cyA9IExvYWRlcjtcblxuTG9hZGVyLl9waXhpTWlkZGxld2FyZSA9IFtcbiAgICAvLyBwYXJzZSBhbnkgYmxvYiBpbnRvIG1vcmUgdXNhYmxlIG9iamVjdHMgKGUuZy4gSW1hZ2UpXG4gICAgUmVzb3VyY2VMb2FkZXIubWlkZGxld2FyZS5wYXJzaW5nLmJsb2IsXG4gICAgLy8gcGFyc2UgYW55IEltYWdlIG9iamVjdHMgaW50byB0ZXh0dXJlc1xuICAgIHRleHR1cmVQYXJzZXIsXG4gICAgLy8gcGFyc2UgYW55IHNwcml0ZXNoZWV0IGRhdGEgaW50byBtdWx0aXBsZSB0ZXh0dXJlc1xuICAgIHNwcml0ZXNoZWV0UGFyc2VyLFxuICAgIC8vIHBhcnNlIGFueSBzcHJpdGVzaGVldCBkYXRhIGludG8gbXVsdGlwbGUgdGV4dHVyZXNcbiAgICBiaXRtYXBGb250UGFyc2VyXG5dO1xuXG5Mb2FkZXIuYWRkUGl4aU1pZGRsZXdhcmUgPSBmdW5jdGlvbiAoZm4pIHtcbiAgICBMb2FkZXIuX3BpeGlNaWRkbGV3YXJlLnB1c2goZm4pO1xufTtcblxuLy8gQWRkIGN1c3RvbSBleHRlbnRpb25zXG52YXIgUmVzb3VyY2UgPSBSZXNvdXJjZUxvYWRlci5SZXNvdXJjZTtcblxuUmVzb3VyY2Uuc2V0RXh0ZW5zaW9uWGhyVHlwZSgnZm50JywgUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuRE9DVU1FTlQpO1xuIiwidmFyIFJlc291cmNlID0gcmVxdWlyZSgncmVzb3VyY2UtbG9hZGVyJykuUmVzb3VyY2UsXG4gICAgcGF0aCA9IHJlcXVpcmUoJ3BhdGgnKSxcbiAgICBjb3JlID0gcmVxdWlyZSgnLi4vY29yZScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICgpXG57XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChyZXNvdXJjZSwgbmV4dClcbiAgICB7XG4gICAgICAgIC8vIHNraXAgaWYgbm8gZGF0YSwgaXRzIG5vdCBqc29uLCBvciBpdCBpc24ndCBzcHJpdGVzaGVldCBkYXRhXG4gICAgICAgIGlmICghcmVzb3VyY2UuZGF0YSB8fCAhcmVzb3VyY2UuaXNKc29uIHx8ICFyZXNvdXJjZS5kYXRhLmZyYW1lcylcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIG5leHQoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBsb2FkT3B0aW9ucyA9IHtcbiAgICAgICAgICAgIGNyb3NzT3JpZ2luOiByZXNvdXJjZS5jcm9zc09yaWdpbixcbiAgICAgICAgICAgIGxvYWRUeXBlOiBSZXNvdXJjZS5MT0FEX1RZUEUuSU1BR0UsXG4gICAgICAgICAgICBtZXRhZGF0YTogcmVzb3VyY2UubWV0YWRhdGEuaW1hZ2VNZXRhZGF0YVxuICAgICAgICB9O1xuXG4gICAgICAgIHZhciByb3V0ZSA9IHBhdGguZGlybmFtZShyZXNvdXJjZS51cmwucmVwbGFjZSh0aGlzLmJhc2VVcmwsICcnKSk7XG5cbiAgICAgICAgdmFyIHJlc29sdXRpb24gPSBjb3JlLnV0aWxzLmdldFJlc29sdXRpb25PZlVybCggcmVzb3VyY2UudXJsICk7XG5cbiAgICAgICAgLy8gbG9hZCB0aGUgaW1hZ2UgZm9yIHRoaXMgc2hlZXRcbiAgICAgICAgdGhpcy5hZGQocmVzb3VyY2UubmFtZSArICdfaW1hZ2UnLCByb3V0ZSArICcvJyArIHJlc291cmNlLmRhdGEubWV0YS5pbWFnZSwgbG9hZE9wdGlvbnMsIGZ1bmN0aW9uIChyZXMpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJlc291cmNlLnRleHR1cmVzID0ge307XG5cbiAgICAgICAgICAgIHZhciBmcmFtZXMgPSByZXNvdXJjZS5kYXRhLmZyYW1lcztcblxuICAgICAgICAgICAgZm9yICh2YXIgaSBpbiBmcmFtZXMpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdmFyIHJlY3QgPSBmcmFtZXNbaV0uZnJhbWU7XG5cbiAgICAgICAgICAgICAgICBpZiAocmVjdClcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBzaXplID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHRyaW0gPSBudWxsO1xuXG4gICAgICAgICAgICAgICAgICAgIGlmIChmcmFtZXNbaV0ucm90YXRlZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZSA9IG5ldyBjb3JlLlJlY3RhbmdsZShyZWN0LngsIHJlY3QueSwgcmVjdC5oLCByZWN0LncpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZSA9IG5ldyBjb3JlLlJlY3RhbmdsZShyZWN0LngsIHJlY3QueSwgcmVjdC53LCByZWN0LmgpO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgLy8gIENoZWNrIHRvIHNlZSBpZiB0aGUgc3ByaXRlIGlzIHRyaW1tZWRcbiAgICAgICAgICAgICAgICAgICAgaWYgKGZyYW1lc1tpXS50cmltbWVkKVxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0cmltID0gbmV3IGNvcmUuUmVjdGFuZ2xlKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyYW1lc1tpXS5zcHJpdGVTb3VyY2VTaXplLnggLyByZXNvbHV0aW9uLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyYW1lc1tpXS5zcHJpdGVTb3VyY2VTaXplLnkgLyByZXNvbHV0aW9uLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyYW1lc1tpXS5zb3VyY2VTaXplLncgLyByZXNvbHV0aW9uLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyYW1lc1tpXS5zb3VyY2VTaXplLmggLyByZXNvbHV0aW9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIC8vIGZsaXAgdGhlIHdpZHRoIGFuZCBoZWlnaHQhXG4gICAgICAgICAgICAgICAgICAgIGlmIChmcmFtZXNbaV0ucm90YXRlZClcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHRlbXAgPSBzaXplLndpZHRoO1xuICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZS53aWR0aCA9IHNpemUuaGVpZ2h0O1xuICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZS5oZWlnaHQgPSB0ZW1wO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgc2l6ZS54IC89IHJlc29sdXRpb247XG4gICAgICAgICAgICAgICAgICAgIHNpemUueSAvPSByZXNvbHV0aW9uO1xuICAgICAgICAgICAgICAgICAgICBzaXplLndpZHRoIC89IHJlc29sdXRpb247XG4gICAgICAgICAgICAgICAgICAgIHNpemUuaGVpZ2h0IC89IHJlc29sdXRpb247XG5cbiAgICAgICAgICAgICAgICAgICAgcmVzb3VyY2UudGV4dHVyZXNbaV0gPSBuZXcgY29yZS5UZXh0dXJlKHJlcy50ZXh0dXJlLmJhc2VUZXh0dXJlLCBzaXplLCBzaXplLmNsb25lKCksIHRyaW0sIGZyYW1lc1tpXS5yb3RhdGVkKTtcblxuICAgICAgICAgICAgICAgICAgICAvLyBsZXRzIGFsc28gYWRkIHRoZSBmcmFtZSB0byBwaXhpJ3MgZ2xvYmFsIGNhY2hlIGZvciBmcm9tRnJhbWUgYW5kIGZyb21JbWFnZSBmdW5jdGlvbnNcbiAgICAgICAgICAgICAgICAgICAgY29yZS51dGlscy5UZXh0dXJlQ2FjaGVbaV0gPSByZXNvdXJjZS50ZXh0dXJlc1tpXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIG5leHQoKTtcbiAgICAgICAgfSk7XG4gICAgfTtcbn07XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uL2NvcmUnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoKVxue1xuICAgIHJldHVybiBmdW5jdGlvbiAocmVzb3VyY2UsIG5leHQpXG4gICAge1xuICAgICAgICAvLyBjcmVhdGUgYSBuZXcgdGV4dHVyZSBpZiB0aGUgZGF0YSBpcyBhbiBJbWFnZSBvYmplY3RcbiAgICAgICAgaWYgKHJlc291cmNlLmRhdGEgJiYgcmVzb3VyY2UuaXNJbWFnZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdmFyIGJhc2VUZXh0dXJlID0gbmV3IGNvcmUuQmFzZVRleHR1cmUocmVzb3VyY2UuZGF0YSwgbnVsbCwgY29yZS51dGlscy5nZXRSZXNvbHV0aW9uT2ZVcmwocmVzb3VyY2UudXJsKSk7XG4gICAgICAgICAgICBiYXNlVGV4dHVyZS5pbWFnZVVybCA9IHJlc291cmNlLnVybDtcbiAgICAgICAgICAgIHJlc291cmNlLnRleHR1cmUgPSBuZXcgY29yZS5UZXh0dXJlKGJhc2VUZXh0dXJlKTtcbiAgICAgICAgICAgIC8vIGxldHMgYWxzbyBhZGQgdGhlIGZyYW1lIHRvIHBpeGkncyBnbG9iYWwgY2FjaGUgZm9yIGZyb21GcmFtZSBhbmQgZnJvbUltYWdlIGZ1Y250aW9uc1xuICAgICAgICAgICAgY29yZS51dGlscy5CYXNlVGV4dHVyZUNhY2hlW3Jlc291cmNlLnVybF0gPSBiYXNlVGV4dHVyZTtcbiAgICAgICAgICAgIGNvcmUudXRpbHMuVGV4dHVyZUNhY2hlW3Jlc291cmNlLnVybF0gPSByZXNvdXJjZS50ZXh0dXJlO1xuICAgICAgICB9XG5cbiAgICAgICAgbmV4dCgpO1xuICAgIH07XG59O1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi9jb3JlJyksXG4gICAgdGVtcFBvaW50ID0gbmV3IGNvcmUuUG9pbnQoKSxcbiAgICB0ZW1wUG9seWdvbiA9IG5ldyBjb3JlLlBvbHlnb24oKTtcblxuLyoqXG4gKiBCYXNlIG1lc2ggY2xhc3NcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5Db250YWluZXJcbiAqIEBtZW1iZXJvZiBQSVhJLm1lc2hcbiAqIEBwYXJhbSB0ZXh0dXJlIHtQSVhJLlRleHR1cmV9IFRoZSB0ZXh0dXJlIHRvIHVzZVxuICogQHBhcmFtIFt2ZXJ0aWNlc10ge0Zsb2F0MzJBcnJheX0gaWYgeW91IHdhbnQgdG8gc3BlY2lmeSB0aGUgdmVydGljZXNcbiAqIEBwYXJhbSBbdXZzXSB7RmxvYXQzMkFycmF5fSBpZiB5b3Ugd2FudCB0byBzcGVjaWZ5IHRoZSB1dnNcbiAqIEBwYXJhbSBbaW5kaWNlc10ge1VpbnQxNkFycmF5fSBpZiB5b3Ugd2FudCB0byBzcGVjaWZ5IHRoZSBpbmRpY2VzXG4gKiBAcGFyYW0gW2RyYXdNb2RlXSB7bnVtYmVyfSB0aGUgZHJhd01vZGUsIGNhbiBiZSBhbnkgb2YgdGhlIE1lc2guRFJBV19NT0RFUyBjb25zdHNcbiAqL1xuZnVuY3Rpb24gTWVzaCh0ZXh0dXJlLCB2ZXJ0aWNlcywgdXZzLCBpbmRpY2VzLCBkcmF3TW9kZSlcbntcbiAgICBjb3JlLkNvbnRhaW5lci5jYWxsKHRoaXMpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHRleHR1cmUgb2YgdGhlIE1lc2hcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuVGV4dHVyZX1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX3RleHR1cmUgPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogVGhlIFV2cyBvZiB0aGUgTWVzaFxuICAgICAqXG4gICAgICogQG1lbWJlciB7RmxvYXQzMkFycmF5fVxuICAgICAqL1xuICAgIHRoaXMudXZzID0gdXZzIHx8IG5ldyBGbG9hdDMyQXJyYXkoWzAsIDAsXG4gICAgICAgIDEsIDAsXG4gICAgICAgIDEsIDEsXG4gICAgICAgIDAsIDFdKTtcblxuICAgIC8qKlxuICAgICAqIEFuIGFycmF5IG9mIHZlcnRpY2VzXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtGbG9hdDMyQXJyYXl9XG4gICAgICovXG4gICAgdGhpcy52ZXJ0aWNlcyA9IHZlcnRpY2VzIHx8IG5ldyBGbG9hdDMyQXJyYXkoWzAsIDAsXG4gICAgICAgIDEwMCwgMCxcbiAgICAgICAgMTAwLCAxMDAsXG4gICAgICAgIDAsIDEwMF0pO1xuXG4gICAgLypcbiAgICAgKiBAbWVtYmVyIHtVaW50MTZBcnJheX0gQW4gYXJyYXkgY29udGFpbmluZyB0aGUgaW5kaWNlcyBvZiB0aGUgdmVydGljZXNcbiAgICAgKi9cbiAgICAvLyAgVE9ETyBhdXRvIGdlbmVyYXRlIHRoaXMgYmFzZWQgb24gZHJhdyBtb2RlIVxuICAgIHRoaXMuaW5kaWNlcyA9IGluZGljZXMgfHwgbmV3IFVpbnQxNkFycmF5KFswLCAxLCAzLCAyXSk7XG5cbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIHRoZSBNZXNoIGlzIGRpcnR5IG9yIG5vdFxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKi9cbiAgICB0aGlzLmRpcnR5ID0gdHJ1ZTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBibGVuZCBtb2RlIHRvIGJlIGFwcGxpZWQgdG8gdGhlIHNwcml0ZS4gU2V0IHRvIGBQSVhJLkJMRU5EX01PREVTLk5PUk1BTGAgdG8gcmVtb3ZlIGFueSBibGVuZCBtb2RlLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IFBJWEkuQkxFTkRfTU9ERVMuTk9STUFMXG4gICAgICogQHNlZSBQSVhJLkJMRU5EX01PREVTXG4gICAgICovXG4gICAgdGhpcy5ibGVuZE1vZGUgPSBjb3JlLkJMRU5EX01PREVTLk5PUk1BTDtcblxuICAgIC8qKlxuICAgICAqIFRyaWFuZ2xlcyBpbiBjYW52YXMgbW9kZSBhcmUgYXV0b21hdGljYWxseSBhbnRpYWxpYXNlZCwgdXNlIHRoaXMgdmFsdWUgdG8gZm9yY2UgdHJpYW5nbGVzIHRvIG92ZXJsYXAgYSBiaXQgd2l0aCBlYWNoIG90aGVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMuY2FudmFzUGFkZGluZyA9IDA7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgd2F5IHRoZSBNZXNoIHNob3VsZCBiZSBkcmF3biwgY2FuIGJlIGFueSBvZiB0aGUge0BsaW5rIFBJWEkubWVzaC5NZXNoLkRSQVdfTU9ERVN9IGNvbnN0c1xuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBzZWUgUElYSS5tZXNoLk1lc2guRFJBV19NT0RFU1xuICAgICAqL1xuICAgIHRoaXMuZHJhd01vZGUgPSBkcmF3TW9kZSB8fCBNZXNoLkRSQVdfTU9ERVMuVFJJQU5HTEVfTUVTSDtcblxuICAgIC8vIHJ1biB0ZXh0dXJlIHNldHRlcjtcbiAgICB0aGlzLnRleHR1cmUgPSB0ZXh0dXJlO1xuXG4gICAgIC8qKlxuICAgICAqIFRoZSBkZWZhdWx0IHNoYWRlciB0aGF0IGlzIHVzZWQgaWYgYSBtZXNoIGRvZXNuJ3QgaGF2ZSBhIG1vcmUgc3BlY2lmaWMgb25lLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5TaGFkZXJ9XG4gICAgICovXG4gICAgdGhpcy5zaGFkZXIgPSBudWxsO1xufVxuXG4vLyBjb25zdHJ1Y3RvclxuTWVzaC5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuQ29udGFpbmVyLnByb3RvdHlwZSk7XG5NZXNoLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IE1lc2g7XG5tb2R1bGUuZXhwb3J0cyA9IE1lc2g7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKE1lc2gucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogVGhlIHRleHR1cmUgdGhhdCB0aGUgc3ByaXRlIGlzIHVzaW5nXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlRleHR1cmV9XG4gICAgICogQG1lbWJlcm9mIFBJWEkubWVzaC5NZXNoI1xuICAgICAqL1xuICAgIHRleHR1cmU6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gIHRoaXMuX3RleHR1cmU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICBpZiAodGhpcy5fdGV4dHVyZSA9PT0gdmFsdWUpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLl90ZXh0dXJlID0gdmFsdWU7XG5cbiAgICAgICAgICAgIGlmICh2YWx1ZSlcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAvLyB3YWl0IGZvciB0aGUgdGV4dHVyZSB0byBsb2FkXG4gICAgICAgICAgICAgICAgaWYgKHZhbHVlLmJhc2VUZXh0dXJlLmhhc0xvYWRlZClcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX29uVGV4dHVyZVVwZGF0ZSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICB2YWx1ZS5vbmNlKCd1cGRhdGUnLCB0aGlzLl9vblRleHR1cmVVcGRhdGUsIHRoaXMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn0pO1xuXG4vKipcbiAqIFJlbmRlcnMgdGhlIG9iamVjdCB1c2luZyB0aGUgV2ViR0wgcmVuZGVyZXJcbiAqXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcn0gYSByZWZlcmVuY2UgdG8gdGhlIFdlYkdMIHJlbmRlcmVyXG4gKiBAcHJpdmF0ZVxuICovXG5NZXNoLnByb3RvdHlwZS5fcmVuZGVyV2ViR0wgPSBmdW5jdGlvbiAocmVuZGVyZXIpXG57XG4gICAgcmVuZGVyZXIuc2V0T2JqZWN0UmVuZGVyZXIocmVuZGVyZXIucGx1Z2lucy5tZXNoKTtcbiAgICByZW5kZXJlci5wbHVnaW5zLm1lc2gucmVuZGVyKHRoaXMpO1xufTtcblxuLyoqXG4gKiBSZW5kZXJzIHRoZSBvYmplY3QgdXNpbmcgdGhlIENhbnZhcyByZW5kZXJlclxuICpcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5DYW52YXNSZW5kZXJlcn1cbiAqIEBwcml2YXRlXG4gKi9cbk1lc2gucHJvdG90eXBlLl9yZW5kZXJDYW52YXMgPSBmdW5jdGlvbiAocmVuZGVyZXIpXG57XG4gICAgdmFyIGNvbnRleHQgPSByZW5kZXJlci5jb250ZXh0O1xuXG4gICAgdmFyIHRyYW5zZm9ybSA9IHRoaXMud29ybGRUcmFuc2Zvcm07XG5cbiAgICBpZiAocmVuZGVyZXIucm91bmRQaXhlbHMpXG4gICAge1xuICAgICAgICBjb250ZXh0LnNldFRyYW5zZm9ybSh0cmFuc2Zvcm0uYSwgdHJhbnNmb3JtLmIsIHRyYW5zZm9ybS5jLCB0cmFuc2Zvcm0uZCwgdHJhbnNmb3JtLnR4IHwgMCwgdHJhbnNmb3JtLnR5IHwgMCk7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIGNvbnRleHQuc2V0VHJhbnNmb3JtKHRyYW5zZm9ybS5hLCB0cmFuc2Zvcm0uYiwgdHJhbnNmb3JtLmMsIHRyYW5zZm9ybS5kLCB0cmFuc2Zvcm0udHgsIHRyYW5zZm9ybS50eSk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuZHJhd01vZGUgPT09IE1lc2guRFJBV19NT0RFUy5UUklBTkdMRV9NRVNIKVxuICAgIHtcbiAgICAgICAgdGhpcy5fcmVuZGVyQ2FudmFzVHJpYW5nbGVNZXNoKGNvbnRleHQpO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICB0aGlzLl9yZW5kZXJDYW52YXNUcmlhbmdsZXMoY29udGV4dCk7XG4gICAgfVxufTtcblxuLyoqXG4gKiBEcmF3cyB0aGUgb2JqZWN0IGluIFRyaWFuZ2xlIE1lc2ggbW9kZSB1c2luZyBjYW52YXNcbiAqXG4gKiBAcGFyYW0gY29udGV4dCB7Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEfSB0aGUgY3VycmVudCBkcmF3aW5nIGNvbnRleHRcbiAqIEBwcml2YXRlXG4gKi9cbk1lc2gucHJvdG90eXBlLl9yZW5kZXJDYW52YXNUcmlhbmdsZU1lc2ggPSBmdW5jdGlvbiAoY29udGV4dClcbntcbiAgICAvLyBkcmF3IHRyaWFuZ2xlcyEhXG4gICAgdmFyIHZlcnRpY2VzID0gdGhpcy52ZXJ0aWNlcztcbiAgICB2YXIgdXZzID0gdGhpcy51dnM7XG5cbiAgICB2YXIgbGVuZ3RoID0gdmVydGljZXMubGVuZ3RoIC8gMjtcbiAgICAvLyB0aGlzLmNvdW50Kys7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aCAtIDI7IGkrKylcbiAgICB7XG4gICAgICAgIC8vIGRyYXcgc29tZSB0cmlhbmdsZXMhXG4gICAgICAgIHZhciBpbmRleCA9IGkgKiAyO1xuICAgICAgICB0aGlzLl9yZW5kZXJDYW52YXNEcmF3VHJpYW5nbGUoY29udGV4dCwgdmVydGljZXMsIHV2cywgaW5kZXgsIChpbmRleCArIDIpLCAoaW5kZXggKyA0KSk7XG4gICAgfVxufTtcblxuLyoqXG4gKiBEcmF3cyB0aGUgb2JqZWN0IGluIHRyaWFuZ2xlIG1vZGUgdXNpbmcgY2FudmFzXG4gKlxuICogQHBhcmFtIGNvbnRleHQge0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRH0gdGhlIGN1cnJlbnQgZHJhd2luZyBjb250ZXh0XG4gKiBAcHJpdmF0ZVxuICovXG5NZXNoLnByb3RvdHlwZS5fcmVuZGVyQ2FudmFzVHJpYW5nbGVzID0gZnVuY3Rpb24gKGNvbnRleHQpXG57XG4gICAgLy8gZHJhdyB0cmlhbmdsZXMhIVxuICAgIHZhciB2ZXJ0aWNlcyA9IHRoaXMudmVydGljZXM7XG4gICAgdmFyIHV2cyA9IHRoaXMudXZzO1xuICAgIHZhciBpbmRpY2VzID0gdGhpcy5pbmRpY2VzO1xuXG4gICAgdmFyIGxlbmd0aCA9IGluZGljZXMubGVuZ3RoO1xuICAgIC8vIHRoaXMuY291bnQrKztcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyBpICs9IDMpXG4gICAge1xuICAgICAgICAvLyBkcmF3IHNvbWUgdHJpYW5nbGVzIVxuICAgICAgICB2YXIgaW5kZXgwID0gaW5kaWNlc1tpXSAqIDIsIGluZGV4MSA9IGluZGljZXNbaSArIDFdICogMiwgaW5kZXgyID0gaW5kaWNlc1tpICsgMl0gKiAyO1xuICAgICAgICB0aGlzLl9yZW5kZXJDYW52YXNEcmF3VHJpYW5nbGUoY29udGV4dCwgdmVydGljZXMsIHV2cywgaW5kZXgwLCBpbmRleDEsIGluZGV4Mik7XG4gICAgfVxufTtcblxuLyoqXG4gKiBEcmF3cyBvbmUgb2YgdGhlIHRyaWFuZ2xlcyB0aGF0IGZvcm0gdGhpcyBNZXNoXG4gKlxuICogQHBhcmFtIGNvbnRleHQge0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRH0gdGhlIGN1cnJlbnQgZHJhd2luZyBjb250ZXh0XG4gKiBAcGFyYW0gdmVydGljZXMge0Zsb2F0MzJBcnJheX0gYSByZWZlcmVuY2UgdG8gdGhlIHZlcnRpY2VzIG9mIHRoZSBNZXNoXG4gKiBAcGFyYW0gdXZzIHtGbG9hdDMyQXJyYXl9IGEgcmVmZXJlbmNlIHRvIHRoZSB1dnMgb2YgdGhlIE1lc2hcbiAqIEBwYXJhbSBpbmRleDAge251bWJlcn0gdGhlIGluZGV4IG9mIHRoZSBmaXJzdCB2ZXJ0ZXhcbiAqIEBwYXJhbSBpbmRleDEge251bWJlcn0gdGhlIGluZGV4IG9mIHRoZSBzZWNvbmQgdmVydGV4XG4gKiBAcGFyYW0gaW5kZXgyIHtudW1iZXJ9IHRoZSBpbmRleCBvZiB0aGUgdGhpcmQgdmVydGV4XG4gKiBAcHJpdmF0ZVxuICovXG5NZXNoLnByb3RvdHlwZS5fcmVuZGVyQ2FudmFzRHJhd1RyaWFuZ2xlID0gZnVuY3Rpb24gKGNvbnRleHQsIHZlcnRpY2VzLCB1dnMsIGluZGV4MCwgaW5kZXgxLCBpbmRleDIpXG57XG4gICAgdmFyIHRleHR1cmVTb3VyY2UgPSB0aGlzLl90ZXh0dXJlLmJhc2VUZXh0dXJlLnNvdXJjZTtcbiAgICB2YXIgdGV4dHVyZVdpZHRoID0gdGhpcy5fdGV4dHVyZS5iYXNlVGV4dHVyZS53aWR0aDtcbiAgICB2YXIgdGV4dHVyZUhlaWdodCA9IHRoaXMuX3RleHR1cmUuYmFzZVRleHR1cmUuaGVpZ2h0O1xuXG4gICAgdmFyIHgwID0gdmVydGljZXNbaW5kZXgwXSwgeDEgPSB2ZXJ0aWNlc1tpbmRleDFdLCB4MiA9IHZlcnRpY2VzW2luZGV4Ml07XG4gICAgdmFyIHkwID0gdmVydGljZXNbaW5kZXgwICsgMV0sIHkxID0gdmVydGljZXNbaW5kZXgxICsgMV0sIHkyID0gdmVydGljZXNbaW5kZXgyICsgMV07XG5cbiAgICB2YXIgdTAgPSB1dnNbaW5kZXgwXSAqIHRleHR1cmVXaWR0aCwgdTEgPSB1dnNbaW5kZXgxXSAqIHRleHR1cmVXaWR0aCwgdTIgPSB1dnNbaW5kZXgyXSAqIHRleHR1cmVXaWR0aDtcbiAgICB2YXIgdjAgPSB1dnNbaW5kZXgwICsgMV0gKiB0ZXh0dXJlSGVpZ2h0LCB2MSA9IHV2c1tpbmRleDEgKyAxXSAqIHRleHR1cmVIZWlnaHQsIHYyID0gdXZzW2luZGV4MiArIDFdICogdGV4dHVyZUhlaWdodDtcblxuICAgIGlmICh0aGlzLmNhbnZhc1BhZGRpbmcgPiAwKVxuICAgIHtcbiAgICAgICAgdmFyIHBhZGRpbmdYID0gdGhpcy5jYW52YXNQYWRkaW5nIC8gdGhpcy53b3JsZFRyYW5zZm9ybS5hO1xuICAgICAgICB2YXIgcGFkZGluZ1kgPSB0aGlzLmNhbnZhc1BhZGRpbmcgLyB0aGlzLndvcmxkVHJhbnNmb3JtLmQ7XG4gICAgICAgIHZhciBjZW50ZXJYID0gKHgwICsgeDEgKyB4MikgLyAzO1xuICAgICAgICB2YXIgY2VudGVyWSA9ICh5MCArIHkxICsgeTIpIC8gMztcblxuICAgICAgICB2YXIgbm9ybVggPSB4MCAtIGNlbnRlclg7XG4gICAgICAgIHZhciBub3JtWSA9IHkwIC0gY2VudGVyWTtcblxuICAgICAgICB2YXIgZGlzdCA9IE1hdGguc3FydChub3JtWCAqIG5vcm1YICsgbm9ybVkgKiBub3JtWSk7XG4gICAgICAgIHgwID0gY2VudGVyWCArIChub3JtWCAvIGRpc3QpICogKGRpc3QgKyBwYWRkaW5nWCk7XG4gICAgICAgIHkwID0gY2VudGVyWSArIChub3JtWSAvIGRpc3QpICogKGRpc3QgKyBwYWRkaW5nWSk7XG5cbiAgICAgICAgLy9cblxuICAgICAgICBub3JtWCA9IHgxIC0gY2VudGVyWDtcbiAgICAgICAgbm9ybVkgPSB5MSAtIGNlbnRlclk7XG5cbiAgICAgICAgZGlzdCA9IE1hdGguc3FydChub3JtWCAqIG5vcm1YICsgbm9ybVkgKiBub3JtWSk7XG4gICAgICAgIHgxID0gY2VudGVyWCArIChub3JtWCAvIGRpc3QpICogKGRpc3QgKyBwYWRkaW5nWCk7XG4gICAgICAgIHkxID0gY2VudGVyWSArIChub3JtWSAvIGRpc3QpICogKGRpc3QgKyBwYWRkaW5nWSk7XG5cbiAgICAgICAgbm9ybVggPSB4MiAtIGNlbnRlclg7XG4gICAgICAgIG5vcm1ZID0geTIgLSBjZW50ZXJZO1xuXG4gICAgICAgIGRpc3QgPSBNYXRoLnNxcnQobm9ybVggKiBub3JtWCArIG5vcm1ZICogbm9ybVkpO1xuICAgICAgICB4MiA9IGNlbnRlclggKyAobm9ybVggLyBkaXN0KSAqIChkaXN0ICsgcGFkZGluZ1gpO1xuICAgICAgICB5MiA9IGNlbnRlclkgKyAobm9ybVkgLyBkaXN0KSAqIChkaXN0ICsgcGFkZGluZ1kpO1xuICAgIH1cblxuICAgIGNvbnRleHQuc2F2ZSgpO1xuICAgIGNvbnRleHQuYmVnaW5QYXRoKCk7XG5cblxuICAgIGNvbnRleHQubW92ZVRvKHgwLCB5MCk7XG4gICAgY29udGV4dC5saW5lVG8oeDEsIHkxKTtcbiAgICBjb250ZXh0LmxpbmVUbyh4MiwgeTIpO1xuXG4gICAgY29udGV4dC5jbG9zZVBhdGgoKTtcblxuICAgIGNvbnRleHQuY2xpcCgpO1xuXG4gICAgLy8gQ29tcHV0ZSBtYXRyaXggdHJhbnNmb3JtXG4gICAgdmFyIGRlbHRhID0gICh1MCAqIHYxKSAgICAgICsgKHYwICogdTIpICAgICAgKyAodTEgKiB2MikgICAgICAtICh2MSAqIHUyKSAgICAgIC0gKHYwICogdTEpICAgICAgLSAodTAgKiB2Mik7XG4gICAgdmFyIGRlbHRhQSA9ICh4MCAqIHYxKSAgICAgICsgKHYwICogeDIpICAgICAgKyAoeDEgKiB2MikgICAgICAtICh2MSAqIHgyKSAgICAgIC0gKHYwICogeDEpICAgICAgLSAoeDAgKiB2Mik7XG4gICAgdmFyIGRlbHRhQiA9ICh1MCAqIHgxKSAgICAgICsgKHgwICogdTIpICAgICAgKyAodTEgKiB4MikgICAgICAtICh4MSAqIHUyKSAgICAgIC0gKHgwICogdTEpICAgICAgLSAodTAgKiB4Mik7XG4gICAgdmFyIGRlbHRhQyA9ICh1MCAqIHYxICogeDIpICsgKHYwICogeDEgKiB1MikgKyAoeDAgKiB1MSAqIHYyKSAtICh4MCAqIHYxICogdTIpIC0gKHYwICogdTEgKiB4MikgLSAodTAgKiB4MSAqIHYyKTtcbiAgICB2YXIgZGVsdGFEID0gKHkwICogdjEpICAgICAgKyAodjAgKiB5MikgICAgICArICh5MSAqIHYyKSAgICAgIC0gKHYxICogeTIpICAgICAgLSAodjAgKiB5MSkgICAgICAtICh5MCAqIHYyKTtcbiAgICB2YXIgZGVsdGFFID0gKHUwICogeTEpICAgICAgKyAoeTAgKiB1MikgICAgICArICh1MSAqIHkyKSAgICAgIC0gKHkxICogdTIpICAgICAgLSAoeTAgKiB1MSkgICAgICAtICh1MCAqIHkyKTtcbiAgICB2YXIgZGVsdGFGID0gKHUwICogdjEgKiB5MikgKyAodjAgKiB5MSAqIHUyKSArICh5MCAqIHUxICogdjIpIC0gKHkwICogdjEgKiB1MikgLSAodjAgKiB1MSAqIHkyKSAtICh1MCAqIHkxICogdjIpO1xuXG4gICAgY29udGV4dC50cmFuc2Zvcm0oZGVsdGFBIC8gZGVsdGEsIGRlbHRhRCAvIGRlbHRhLFxuICAgICAgICBkZWx0YUIgLyBkZWx0YSwgZGVsdGFFIC8gZGVsdGEsXG4gICAgICAgIGRlbHRhQyAvIGRlbHRhLCBkZWx0YUYgLyBkZWx0YSk7XG5cbiAgICBjb250ZXh0LmRyYXdJbWFnZSh0ZXh0dXJlU291cmNlLCAwLCAwKTtcbiAgICBjb250ZXh0LnJlc3RvcmUoKTtcbn07XG5cblxuXG4vKipcbiAqIFJlbmRlcnMgYSBmbGF0IE1lc2hcbiAqXG4gKiBAcGFyYW0gTWVzaCB7UElYSS5tZXNoLk1lc2h9IFRoZSBNZXNoIHRvIHJlbmRlclxuICogQHByaXZhdGVcbiAqL1xuTWVzaC5wcm90b3R5cGUucmVuZGVyTWVzaEZsYXQgPSBmdW5jdGlvbiAoTWVzaClcbntcbiAgICB2YXIgY29udGV4dCA9IHRoaXMuY29udGV4dDtcbiAgICB2YXIgdmVydGljZXMgPSBNZXNoLnZlcnRpY2VzO1xuXG4gICAgdmFyIGxlbmd0aCA9IHZlcnRpY2VzLmxlbmd0aC8yO1xuICAgIC8vIHRoaXMuY291bnQrKztcblxuICAgIGNvbnRleHQuYmVnaW5QYXRoKCk7XG4gICAgZm9yICh2YXIgaT0xOyBpIDwgbGVuZ3RoLTI7IGkrKylcbiAgICB7XG4gICAgICAgIC8vIGRyYXcgc29tZSB0cmlhbmdsZXMhXG4gICAgICAgIHZhciBpbmRleCA9IGkqMjtcblxuICAgICAgICB2YXIgeDAgPSB2ZXJ0aWNlc1tpbmRleF0sICAgeDEgPSB2ZXJ0aWNlc1tpbmRleCsyXSwgeDIgPSB2ZXJ0aWNlc1tpbmRleCs0XTtcbiAgICAgICAgdmFyIHkwID0gdmVydGljZXNbaW5kZXgrMV0sIHkxID0gdmVydGljZXNbaW5kZXgrM10sIHkyID0gdmVydGljZXNbaW5kZXgrNV07XG5cbiAgICAgICAgY29udGV4dC5tb3ZlVG8oeDAsIHkwKTtcbiAgICAgICAgY29udGV4dC5saW5lVG8oeDEsIHkxKTtcbiAgICAgICAgY29udGV4dC5saW5lVG8oeDIsIHkyKTtcbiAgICB9XG5cbiAgICBjb250ZXh0LmZpbGxTdHlsZSA9ICcjRkYwMDAwJztcbiAgICBjb250ZXh0LmZpbGwoKTtcbiAgICBjb250ZXh0LmNsb3NlUGF0aCgpO1xufTtcblxuLyoqXG4gKiBXaGVuIHRoZSB0ZXh0dXJlIGlzIHVwZGF0ZWQsIHRoaXMgZXZlbnQgd2lsbCBmaXJlIHRvIHVwZGF0ZSB0aGUgc2NhbGUgYW5kIGZyYW1lXG4gKlxuICogQHBhcmFtIGV2ZW50XG4gKiBAcHJpdmF0ZVxuICovXG5NZXNoLnByb3RvdHlwZS5fb25UZXh0dXJlVXBkYXRlID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLnVwZGF0ZUZyYW1lID0gdHJ1ZTtcbn07XG5cbi8qKlxuICogUmV0dXJucyB0aGUgYm91bmRzIG9mIHRoZSBtZXNoIGFzIGEgcmVjdGFuZ2xlLiBUaGUgYm91bmRzIGNhbGN1bGF0aW9uIHRha2VzIHRoZSB3b3JsZFRyYW5zZm9ybSBpbnRvIGFjY291bnQuXG4gKlxuICogQHBhcmFtIG1hdHJpeCB7UElYSS5NYXRyaXh9IHRoZSB0cmFuc2Zvcm1hdGlvbiBtYXRyaXggb2YgdGhlIHNwcml0ZVxuICogQHJldHVybiB7UElYSS5SZWN0YW5nbGV9IHRoZSBmcmFtaW5nIHJlY3RhbmdsZVxuICovXG5NZXNoLnByb3RvdHlwZS5nZXRCb3VuZHMgPSBmdW5jdGlvbiAobWF0cml4KVxue1xuICAgIGlmICghdGhpcy5fY3VycmVudEJvdW5kcykge1xuICAgICAgICB2YXIgd29ybGRUcmFuc2Zvcm0gPSBtYXRyaXggfHwgdGhpcy53b3JsZFRyYW5zZm9ybTtcblxuICAgICAgICB2YXIgYSA9IHdvcmxkVHJhbnNmb3JtLmE7XG4gICAgICAgIHZhciBiID0gd29ybGRUcmFuc2Zvcm0uYjtcbiAgICAgICAgdmFyIGMgPSB3b3JsZFRyYW5zZm9ybS5jO1xuICAgICAgICB2YXIgZCA9IHdvcmxkVHJhbnNmb3JtLmQ7XG4gICAgICAgIHZhciB0eCA9IHdvcmxkVHJhbnNmb3JtLnR4O1xuICAgICAgICB2YXIgdHkgPSB3b3JsZFRyYW5zZm9ybS50eTtcblxuICAgICAgICB2YXIgbWF4WCA9IC1JbmZpbml0eTtcbiAgICAgICAgdmFyIG1heFkgPSAtSW5maW5pdHk7XG5cbiAgICAgICAgdmFyIG1pblggPSBJbmZpbml0eTtcbiAgICAgICAgdmFyIG1pblkgPSBJbmZpbml0eTtcblxuICAgICAgICB2YXIgdmVydGljZXMgPSB0aGlzLnZlcnRpY2VzO1xuICAgICAgICBmb3IgKHZhciBpID0gMCwgbiA9IHZlcnRpY2VzLmxlbmd0aDsgaSA8IG47IGkgKz0gMikge1xuICAgICAgICAgICAgdmFyIHJhd1ggPSB2ZXJ0aWNlc1tpXSwgcmF3WSA9IHZlcnRpY2VzW2kgKyAxXTtcbiAgICAgICAgICAgIHZhciB4ID0gKGEgKiByYXdYKSArIChjICogcmF3WSkgKyB0eDtcbiAgICAgICAgICAgIHZhciB5ID0gKGQgKiByYXdZKSArIChiICogcmF3WCkgKyB0eTtcblxuICAgICAgICAgICAgbWluWCA9IHggPCBtaW5YID8geCA6IG1pblg7XG4gICAgICAgICAgICBtaW5ZID0geSA8IG1pblkgPyB5IDogbWluWTtcblxuICAgICAgICAgICAgbWF4WCA9IHggPiBtYXhYID8geCA6IG1heFg7XG4gICAgICAgICAgICBtYXhZID0geSA+IG1heFkgPyB5IDogbWF4WTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChtaW5YID09PSAtSW5maW5pdHkgfHwgbWF4WSA9PT0gSW5maW5pdHkpIHtcbiAgICAgICAgICAgIHJldHVybiBjb3JlLlJlY3RhbmdsZS5FTVBUWTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBib3VuZHMgPSB0aGlzLl9ib3VuZHM7XG5cbiAgICAgICAgYm91bmRzLnggPSBtaW5YO1xuICAgICAgICBib3VuZHMud2lkdGggPSBtYXhYIC0gbWluWDtcblxuICAgICAgICBib3VuZHMueSA9IG1pblk7XG4gICAgICAgIGJvdW5kcy5oZWlnaHQgPSBtYXhZIC0gbWluWTtcblxuICAgICAgICAvLyBzdG9yZSBhIHJlZmVyZW5jZSBzbyB0aGF0IGlmIHRoaXMgZnVuY3Rpb24gZ2V0cyBjYWxsZWQgYWdhaW4gaW4gdGhlIHJlbmRlciBjeWNsZSB3ZSBkbyBub3QgaGF2ZSB0byByZWNhbGN1bGF0ZVxuICAgICAgICB0aGlzLl9jdXJyZW50Qm91bmRzID0gYm91bmRzO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLl9jdXJyZW50Qm91bmRzO1xufTtcblxuLyoqXG4gKiBUZXN0cyBpZiBhIHBvaW50IGlzIGluc2lkZSB0aGlzIG1lc2guIFdvcmtzIG9ubHkgZm9yIFRSSUFOR0xFX01FU0hcbiAqXG4gKiBAcGFyYW0gcG9pbnQge1BJWEkuUG9pbnR9IHRoZSBwb2ludCB0byB0ZXN0XG4gKiBAcmV0dXJuIHtib29sZWFufSB0aGUgcmVzdWx0IG9mIHRoZSB0ZXN0XG4gKi9cbk1lc2gucHJvdG90eXBlLmNvbnRhaW5zUG9pbnQgPSBmdW5jdGlvbiggcG9pbnQgKSB7XG4gICAgaWYgKCF0aGlzLmdldEJvdW5kcygpLmNvbnRhaW5zKHBvaW50LngsIHBvaW50LnkpKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgdGhpcy53b3JsZFRyYW5zZm9ybS5hcHBseUludmVyc2UocG9pbnQsICB0ZW1wUG9pbnQpO1xuXG4gICAgdmFyIHZlcnRpY2VzID0gdGhpcy52ZXJ0aWNlcztcbiAgICB2YXIgcG9pbnRzID0gdGVtcFBvbHlnb24ucG9pbnRzO1xuICAgIHZhciBpLCBsZW47XG5cbiAgICBpZiAodGhpcy5kcmF3TW9kZSA9PT0gTWVzaC5EUkFXX01PREVTLlRSSUFOR0xFUykge1xuICAgICAgICB2YXIgaW5kaWNlcyA9IHRoaXMuaW5kaWNlcztcbiAgICAgICAgbGVuID0gdGhpcy5pbmRpY2VzLmxlbmd0aDtcbiAgICAgICAgLy9UT0RPOiBpbmxpbmUgdGhpcy5cbiAgICAgICAgZm9yIChpPTA7aTxsZW47aSs9Mykge1xuICAgICAgICAgICAgdmFyIGluZDAgPSBpbmRpY2VzW2ldKjIsIGluZDEgPSBpbmRpY2VzW2krMV0qMiwgaW5kMiA9IGluZGljZXNbaSsyXSoyO1xuICAgICAgICAgICAgcG9pbnRzWzBdID0gdmVydGljZXNbaW5kMF07XG4gICAgICAgICAgICBwb2ludHNbMV0gPSB2ZXJ0aWNlc1tpbmQwKzFdO1xuICAgICAgICAgICAgcG9pbnRzWzJdID0gdmVydGljZXNbaW5kMV07XG4gICAgICAgICAgICBwb2ludHNbM10gPSB2ZXJ0aWNlc1tpbmQxKzFdO1xuICAgICAgICAgICAgcG9pbnRzWzRdID0gdmVydGljZXNbaW5kMl07XG4gICAgICAgICAgICBwb2ludHNbNV0gPSB2ZXJ0aWNlc1tpbmQyKzFdO1xuICAgICAgICAgICAgaWYgKHRlbXBQb2x5Z29uLmNvbnRhaW5zKHRlbXBQb2ludC54LCB0ZW1wUG9pbnQueSkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAgIGxlbiA9IHZlcnRpY2VzLmxlbmd0aDtcbiAgICAgICAgZm9yIChpPTA7aTxsZW47aSs9Nikge1xuICAgICAgICAgICAgcG9pbnRzWzBdID0gdmVydGljZXNbaV07XG4gICAgICAgICAgICBwb2ludHNbMV0gPSB2ZXJ0aWNlc1tpKzFdO1xuICAgICAgICAgICAgcG9pbnRzWzJdID0gdmVydGljZXNbaSsyXTtcbiAgICAgICAgICAgIHBvaW50c1szXSA9IHZlcnRpY2VzW2krM107XG4gICAgICAgICAgICBwb2ludHNbNF0gPSB2ZXJ0aWNlc1tpKzRdO1xuICAgICAgICAgICAgcG9pbnRzWzVdID0gdmVydGljZXNbaSs1XTtcbiAgICAgICAgICAgIGlmICh0ZW1wUG9seWdvbi5jb250YWlucyh0ZW1wUG9pbnQueCwgdGVtcFBvaW50LnkpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xufTtcblxuLyoqXG4gKiBEaWZmZXJlbnQgZHJhd2luZyBidWZmZXIgbW9kZXMgc3VwcG9ydGVkXG4gKlxuICogQHN0YXRpY1xuICogQGNvbnN0YW50XG4gKiBAcHJvcGVydHkge29iamVjdH0gRFJBV19NT0RFU1xuICogQHByb3BlcnR5IHtudW1iZXJ9IERSQVdfTU9ERVMuVFJJQU5HTEVfTUVTSFxuICogQHByb3BlcnR5IHtudW1iZXJ9IERSQVdfTU9ERVMuVFJJQU5HTEVTXG4gKi9cbk1lc2guRFJBV19NT0RFUyA9IHtcbiAgICBUUklBTkdMRV9NRVNIOiAwLFxuICAgIFRSSUFOR0xFUzogMVxufTtcbiIsInZhciBNZXNoID0gcmVxdWlyZSgnLi9NZXNoJyk7XG5cbi8qKlxuICogVGhlIFBsYW5lIGFsbG93cyB5b3UgdG8gZHJhdyBhIHRleHR1cmUgYWNyb3NzIHNldmVyYWwgcG9pbnRzIGFuZCB0aGVtIG1hbmlwdWxhdGUgdGhlc2UgcG9pbnRzXG4gKlxuICpgYGBqc1xuICogZm9yICh2YXIgaSA9IDA7IGkgPCAyMDsgaSsrKSB7XG4gKiAgICAgcG9pbnRzLnB1c2gobmV3IFBJWEkuUG9pbnQoaSAqIDUwLCAwKSk7XG4gKiB9O1xuICogdmFyIFBsYW5lID0gbmV3IFBJWEkuUGxhbmUoUElYSS5UZXh0dXJlLmZyb21JbWFnZShcInNuYWtlLnBuZ1wiKSwgcG9pbnRzKTtcbiAqICBgYGBcbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkubWVzaC5NZXNoXG4gKiBAbWVtYmVyb2YgUElYSS5tZXNoXG4gKiBAcGFyYW0ge1BJWEkuVGV4dHVyZX0gdGV4dHVyZSAtIFRoZSB0ZXh0dXJlIHRvIHVzZSBvbiB0aGUgUGxhbmUuXG4gKiBAcGFyYW0ge2ludH0gc2VnbWVudHNYIC0gVGhlIG51bWJlciBveCB4IHNlZ21lbnRzXG4gKiBAcGFyYW0ge2ludH0gc2VnbWVudHNZIC0gVGhlIG51bWJlciBvZiB5IHNlZ21lbnRzXG4gKlxuICovXG5mdW5jdGlvbiBQbGFuZSh0ZXh0dXJlLCBzZWdtZW50c1gsIHNlZ21lbnRzWSlcbntcbiAgICBNZXNoLmNhbGwodGhpcywgdGV4dHVyZSk7XG5cbiAgICAvKipcbiAgICAgKiBUcmFja2VyIGZvciBpZiB0aGUgUGxhbmUgaXMgcmVhZHkgdG8gYmUgZHJhd24uIE5lZWRlZCBiZWNhdXNlIE1lc2ggY3RvciBjYW5cbiAgICAgKiBjYWxsIF9vblRleHR1cmVVcGRhdGVkIHdoaWNoIGNvdWxkIGNhbGwgcmVmcmVzaCB0b28gZWFybHkuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fcmVhZHkgPSB0cnVlO1xuXG4gICAgdGhpcy5zZWdtZW50c1ggPSAgc2VnbWVudHNYIHx8IDEwO1xuICAgIHRoaXMuc2VnbWVudHNZID0gc2VnbWVudHNZIHx8IDEwO1xuXG4gICAgdGhpcy5kcmF3TW9kZSA9IE1lc2guRFJBV19NT0RFUy5UUklBTkdMRVM7XG4gICAgdGhpcy5yZWZyZXNoKCk7XG5cbn1cblxuXG4vLyBjb25zdHJ1Y3RvclxuUGxhbmUucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZSggTWVzaC5wcm90b3R5cGUgKTtcblBsYW5lLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFBsYW5lO1xubW9kdWxlLmV4cG9ydHMgPSBQbGFuZTtcblxuLyoqXG4gKiBSZWZyZXNoZXNcbiAqXG4gKi9cblBsYW5lLnByb3RvdHlwZS5yZWZyZXNoID0gZnVuY3Rpb24oKVxue1xuICAgIHZhciB0b3RhbCA9IHRoaXMuc2VnbWVudHNYICogdGhpcy5zZWdtZW50c1k7XG4gICAgdmFyIHZlcnRzID0gW107XG4gICAgdmFyIGNvbG9ycyA9IFtdO1xuICAgIHZhciB1dnMgPSBbXTtcbiAgICB2YXIgaW5kaWNlcyA9IFtdO1xuICAgIHZhciB0ZXh0dXJlID0gdGhpcy50ZXh0dXJlO1xuXG4gIC8vICB0ZXh0dXJlLndpZHRoID0gODAwIHRleHR1cmUud2lkdGggfHwgODAwO1xuIC8vICAgdGV4dHVyZS5oZWlnaHQgPSA4MDAvL3RleHR1cmUuaGVpZ2h0IHx8IDgwMDtcblxuICAgIHZhciBzZWdtZW50c1hTdWIgPSB0aGlzLnNlZ21lbnRzWCAtIDE7XG4gICAgdmFyIHNlZ21lbnRzWVN1YiA9IHRoaXMuc2VnbWVudHNZIC0gMTtcbiAgICB2YXIgaSA9IDA7XG5cbiAgICB2YXIgc2l6ZVggPSB0ZXh0dXJlLndpZHRoIC8gc2VnbWVudHNYU3ViO1xuICAgIHZhciBzaXplWSA9IHRleHR1cmUuaGVpZ2h0IC8gc2VnbWVudHNZU3ViO1xuXG4gICAgZm9yIChpID0gMDsgaSA8IHRvdGFsOyBpKyspIHtcblxuICAgICAgICB2YXIgeCA9IChpICUgdGhpcy5zZWdtZW50c1gpO1xuICAgICAgICB2YXIgeSA9ICggKGkgLyB0aGlzLnNlZ21lbnRzWCApIHwgMCApO1xuXG5cbiAgICAgICAgdmVydHMucHVzaCgoeCAqIHNpemVYKSxcbiAgICAgICAgICAgICAgICAgICAoeSAqIHNpemVZKSk7XG5cbiAgICAgICAgLy8gdGhpcyB3b3JrcyBmb3IgcmVjdGFuZ3VsYXIgdGV4dHVyZXMuIFxuICAgICAgICB1dnMucHVzaCh0ZXh0dXJlLl91dnMueDAgKyAodGV4dHVyZS5fdXZzLngxIC0gdGV4dHVyZS5fdXZzLngwKSAqICh4IC8gKHRoaXMuc2VnbWVudHNYLTEpKSwgdGV4dHVyZS5fdXZzLnkwICsgKHRleHR1cmUuX3V2cy55My10ZXh0dXJlLl91dnMueTApICogKHkvICh0aGlzLnNlZ21lbnRzWS0xKSkpO1xuICAgICAgfVxuXG4gICAgLy8gIGNvbnNcblxuICAgIHZhciB0b3RhbFN1YiA9IHNlZ21lbnRzWFN1YiAqIHNlZ21lbnRzWVN1YjtcblxuICAgIGZvciAoaSA9IDA7IGkgPCB0b3RhbFN1YjsgaSsrKSB7XG5cbiAgICAgICAgdmFyIHhwb3MgPSBpICUgc2VnbWVudHNYU3ViO1xuICAgICAgICB2YXIgeXBvcyA9IChpIC8gc2VnbWVudHNYU3ViICkgfCAwO1xuXG5cbiAgICAgICAgdmFyICB2YWx1ZSA9ICh5cG9zICogdGhpcy5zZWdtZW50c1gpICsgeHBvcztcbiAgICAgICAgdmFyICB2YWx1ZTIgPSAoeXBvcyAqIHRoaXMuc2VnbWVudHNYKSArIHhwb3MgKyAxO1xuICAgICAgICB2YXIgIHZhbHVlMyA9ICgoeXBvcysxKSAqIHRoaXMuc2VnbWVudHNYKSArIHhwb3M7XG4gICAgICAgIHZhciAgdmFsdWU0ID0gKCh5cG9zKzEpICogdGhpcy5zZWdtZW50c1gpICsgeHBvcyArIDE7XG5cbiAgICAgICAgaW5kaWNlcy5wdXNoKHZhbHVlLCB2YWx1ZTIsIHZhbHVlMyk7XG4gICAgICAgIGluZGljZXMucHVzaCh2YWx1ZTIsIHZhbHVlNCwgdmFsdWUzKTtcbiAgICB9XG5cblxuICAgIC8vY29uc29sZS5sb2coaW5kaWNlcylcbiAgICB0aGlzLnZlcnRpY2VzID0gbmV3IEZsb2F0MzJBcnJheSh2ZXJ0cyk7XG4gICAgdGhpcy51dnMgPSBuZXcgRmxvYXQzMkFycmF5KHV2cyk7XG4gICAgdGhpcy5jb2xvcnMgPSBuZXcgRmxvYXQzMkFycmF5KGNvbG9ycyk7XG4gICAgdGhpcy5pbmRpY2VzID0gbmV3IFVpbnQxNkFycmF5KGluZGljZXMpO1xufTtcblxuLyoqXG4gKiBDbGVhciB0ZXh0dXJlIFVWcyB3aGVuIG5ldyB0ZXh0dXJlIGlzIHNldFxuICpcbiAqIEBwcml2YXRlXG4gKi9cblBsYW5lLnByb3RvdHlwZS5fb25UZXh0dXJlVXBkYXRlID0gZnVuY3Rpb24gKClcbntcbiAgICBNZXNoLnByb3RvdHlwZS5fb25UZXh0dXJlVXBkYXRlLmNhbGwodGhpcyk7XG5cbiAgICAvLyB3YWl0IGZvciB0aGUgUGxhbmUgY3RvciB0byBmaW5pc2ggYmVmb3JlIGNhbGxpbmcgcmVmcmVzaFxuICAgIGlmICh0aGlzLl9yZWFkeSkge1xuICAgICAgICB0aGlzLnJlZnJlc2goKTtcbiAgICB9XG59O1xuIiwidmFyIE1lc2ggPSByZXF1aXJlKCcuL01lc2gnKTtcbnZhciBjb3JlID0gcmVxdWlyZSgnLi4vY29yZScpO1xuXG4vKipcbiAqIFRoZSByb3BlIGFsbG93cyB5b3UgdG8gZHJhdyBhIHRleHR1cmUgYWNyb3NzIHNldmVyYWwgcG9pbnRzIGFuZCB0aGVtIG1hbmlwdWxhdGUgdGhlc2UgcG9pbnRzXG4gKlxuICpgYGBqc1xuICogZm9yICh2YXIgaSA9IDA7IGkgPCAyMDsgaSsrKSB7XG4gKiAgICAgcG9pbnRzLnB1c2gobmV3IFBJWEkuUG9pbnQoaSAqIDUwLCAwKSk7XG4gKiB9O1xuICogdmFyIHJvcGUgPSBuZXcgUElYSS5Sb3BlKFBJWEkuVGV4dHVyZS5mcm9tSW1hZ2UoXCJzbmFrZS5wbmdcIiksIHBvaW50cyk7XG4gKiAgYGBgXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLm1lc2guTWVzaFxuICogQG1lbWJlcm9mIFBJWEkubWVzaFxuICogQHBhcmFtIHtQSVhJLlRleHR1cmV9IHRleHR1cmUgLSBUaGUgdGV4dHVyZSB0byB1c2Ugb24gdGhlIHJvcGUuXG4gKiBAcGFyYW0ge1BJWEkuUG9pbnRbXX0gcG9pbnRzIC0gQW4gYXJyYXkgb2Yge0BsaW5rIFBJWEkuUG9pbnR9IG9iamVjdHMgdG8gY29uc3RydWN0IHRoaXMgcm9wZS5cbiAqXG4gKi9cbmZ1bmN0aW9uIFJvcGUodGV4dHVyZSwgcG9pbnRzKVxue1xuICAgIE1lc2guY2FsbCh0aGlzLCB0ZXh0dXJlKTtcblxuICAgIC8qXG4gICAgICogQG1lbWJlciB7UElYSS5Qb2ludFtdfSBBbiBhcnJheSBvZiBwb2ludHMgdGhhdCBkZXRlcm1pbmUgdGhlIHJvcGVcbiAgICAgKi9cbiAgICB0aGlzLnBvaW50cyA9IHBvaW50cztcblxuICAgIC8qXG4gICAgICogQG1lbWJlciB7RmxvYXQzMkFycmF5fSBBbiBhcnJheSBvZiB2ZXJ0aWNlcyB1c2VkIHRvIGNvbnN0cnVjdCB0aGlzIHJvcGUuXG4gICAgICovXG4gICAgdGhpcy52ZXJ0aWNlcyA9IG5ldyBGbG9hdDMyQXJyYXkocG9pbnRzLmxlbmd0aCAqIDQpO1xuXG4gICAgLypcbiAgICAgKiBAbWVtYmVyIHtGbG9hdDMyQXJyYXl9IFRoZSBXZWJHTCBVdnMgb2YgdGhlIHJvcGUuXG4gICAgICovXG4gICAgdGhpcy51dnMgPSBuZXcgRmxvYXQzMkFycmF5KHBvaW50cy5sZW5ndGggKiA0KTtcblxuICAgIC8qXG4gICAgICogQG1lbWJlciB7RmxvYXQzMkFycmF5fSBBbiBhcnJheSBjb250YWluaW5nIHRoZSBjb2xvciBjb21wb25lbnRzXG4gICAgICovXG4gICAgdGhpcy5jb2xvcnMgPSBuZXcgRmxvYXQzMkFycmF5KHBvaW50cy5sZW5ndGggKiAyKTtcblxuICAgIC8qXG4gICAgICogQG1lbWJlciB7VWludDE2QXJyYXl9IEFuIGFycmF5IGNvbnRhaW5pbmcgdGhlIGluZGljZXMgb2YgdGhlIHZlcnRpY2VzXG4gICAgICovXG4gICAgdGhpcy5pbmRpY2VzID0gbmV3IFVpbnQxNkFycmF5KHBvaW50cy5sZW5ndGggKiAyKTtcblxuICAgIC8qKlxuICAgICAqIFRyYWNrZXIgZm9yIGlmIHRoZSByb3BlIGlzIHJlYWR5IHRvIGJlIGRyYXduLiBOZWVkZWQgYmVjYXVzZSBNZXNoIGN0b3IgY2FuXG4gICAgICogY2FsbCBfb25UZXh0dXJlVXBkYXRlZCB3aGljaCBjb3VsZCBjYWxsIHJlZnJlc2ggdG9vIGVhcmx5LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgICB0aGlzLl9yZWFkeSA9IHRydWU7XG5cbiAgICAgdGhpcy5yZWZyZXNoKCk7XG59XG5cblxuLy8gY29uc3RydWN0b3JcblJvcGUucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShNZXNoLnByb3RvdHlwZSk7XG5Sb3BlLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFJvcGU7XG5tb2R1bGUuZXhwb3J0cyA9IFJvcGU7XG5cbi8qKlxuICogUmVmcmVzaGVzXG4gKlxuICovXG5Sb3BlLnByb3RvdHlwZS5yZWZyZXNoID0gZnVuY3Rpb24gKClcbntcbiAgICB2YXIgcG9pbnRzID0gdGhpcy5wb2ludHM7XG5cbiAgICAvLyBpZiB0b28gbGl0dGxlIHBvaW50cywgb3IgdGV4dHVyZSBoYXNuJ3QgZ290IFVWcyBzZXQgeWV0IGp1c3QgbW92ZSBvbi5cbiAgICBpZiAocG9pbnRzLmxlbmd0aCA8IDEgfHwgIXRoaXMuX3RleHR1cmUuX3V2cylcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB2YXIgdXZzID0gdGhpcy51dnM7XG5cbiAgICB2YXIgaW5kaWNlcyA9IHRoaXMuaW5kaWNlcztcbiAgICB2YXIgY29sb3JzID0gdGhpcy5jb2xvcnM7XG5cbiAgICB2YXIgdGV4dHVyZVV2cyA9IHRoaXMuX3RleHR1cmUuX3V2cztcbiAgICB2YXIgb2Zmc2V0ID0gbmV3IGNvcmUuUG9pbnQodGV4dHVyZVV2cy54MCwgdGV4dHVyZVV2cy55MCk7XG4gICAgdmFyIGZhY3RvciA9IG5ldyBjb3JlLlBvaW50KHRleHR1cmVVdnMueDIgLSB0ZXh0dXJlVXZzLngwLCB0ZXh0dXJlVXZzLnkyIC0gdGV4dHVyZVV2cy55MCk7XG5cbiAgICB1dnNbMF0gPSAwICsgb2Zmc2V0Lng7XG4gICAgdXZzWzFdID0gMCArIG9mZnNldC55O1xuICAgIHV2c1syXSA9IDAgKyBvZmZzZXQueDtcbiAgICB1dnNbM10gPSAxICogZmFjdG9yLnkgKyBvZmZzZXQueTtcblxuICAgIGNvbG9yc1swXSA9IDE7XG4gICAgY29sb3JzWzFdID0gMTtcblxuICAgIGluZGljZXNbMF0gPSAwO1xuICAgIGluZGljZXNbMV0gPSAxO1xuXG4gICAgdmFyIHRvdGFsID0gcG9pbnRzLmxlbmd0aCxcbiAgICAgICAgcG9pbnQsIGluZGV4LCBhbW91bnQ7XG5cbiAgICBmb3IgKHZhciBpID0gMTsgaSA8IHRvdGFsOyBpKyspXG4gICAge1xuICAgICAgICBwb2ludCA9IHBvaW50c1tpXTtcbiAgICAgICAgaW5kZXggPSBpICogNDtcbiAgICAgICAgLy8gdGltZSB0byBkbyBzb21lIHNtYXJ0IGRyYXdpbmchXG4gICAgICAgIGFtb3VudCA9IGkgLyAodG90YWwtMSk7XG5cbiAgICAgICAgdXZzW2luZGV4XSA9IGFtb3VudCAqIGZhY3Rvci54ICsgb2Zmc2V0Lng7XG4gICAgICAgIHV2c1tpbmRleCsxXSA9IDAgKyBvZmZzZXQueTtcblxuICAgICAgICB1dnNbaW5kZXgrMl0gPSBhbW91bnQgKiBmYWN0b3IueCArIG9mZnNldC54O1xuICAgICAgICB1dnNbaW5kZXgrM10gPSAxICogZmFjdG9yLnkgKyBvZmZzZXQueTtcblxuICAgICAgICBpbmRleCA9IGkgKiAyO1xuICAgICAgICBjb2xvcnNbaW5kZXhdID0gMTtcbiAgICAgICAgY29sb3JzW2luZGV4KzFdID0gMTtcblxuICAgICAgICBpbmRleCA9IGkgKiAyO1xuICAgICAgICBpbmRpY2VzW2luZGV4XSA9IGluZGV4O1xuICAgICAgICBpbmRpY2VzW2luZGV4ICsgMV0gPSBpbmRleCArIDE7XG4gICAgfVxuXG4gICAgdGhpcy5kaXJ0eSA9IHRydWU7XG59O1xuXG4vKipcbiAqIENsZWFyIHRleHR1cmUgVVZzIHdoZW4gbmV3IHRleHR1cmUgaXMgc2V0XG4gKlxuICogQHByaXZhdGVcbiAqL1xuUm9wZS5wcm90b3R5cGUuX29uVGV4dHVyZVVwZGF0ZSA9IGZ1bmN0aW9uICgpXG57XG4gICAgTWVzaC5wcm90b3R5cGUuX29uVGV4dHVyZVVwZGF0ZS5jYWxsKHRoaXMpO1xuXG4gICAgLy8gd2FpdCBmb3IgdGhlIFJvcGUgY3RvciB0byBmaW5pc2ggYmVmb3JlIGNhbGxpbmcgcmVmcmVzaFxuICAgIGlmICh0aGlzLl9yZWFkeSkge1xuICAgICAgICB0aGlzLnJlZnJlc2goKTtcbiAgICB9XG59O1xuXG4vKipcbiAqIFVwZGF0ZXMgdGhlIG9iamVjdCB0cmFuc2Zvcm0gZm9yIHJlbmRlcmluZ1xuICpcbiAqIEBwcml2YXRlXG4gKi9cblJvcGUucHJvdG90eXBlLnVwZGF0ZVRyYW5zZm9ybSA9IGZ1bmN0aW9uICgpXG57XG4gICAgdmFyIHBvaW50cyA9IHRoaXMucG9pbnRzO1xuXG4gICAgaWYgKHBvaW50cy5sZW5ndGggPCAxKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHZhciBsYXN0UG9pbnQgPSBwb2ludHNbMF07XG4gICAgdmFyIG5leHRQb2ludDtcbiAgICB2YXIgcGVycFggPSAwO1xuICAgIHZhciBwZXJwWSA9IDA7XG5cbiAgICAvLyB0aGlzLmNvdW50IC09IDAuMjtcblxuICAgIHZhciB2ZXJ0aWNlcyA9IHRoaXMudmVydGljZXM7XG4gICAgdmFyIHRvdGFsID0gcG9pbnRzLmxlbmd0aCxcbiAgICAgICAgcG9pbnQsIGluZGV4LCByYXRpbywgcGVycExlbmd0aCwgbnVtO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0b3RhbDsgaSsrKVxuICAgIHtcbiAgICAgICAgcG9pbnQgPSBwb2ludHNbaV07XG4gICAgICAgIGluZGV4ID0gaSAqIDQ7XG5cbiAgICAgICAgaWYgKGkgPCBwb2ludHMubGVuZ3RoLTEpXG4gICAgICAgIHtcbiAgICAgICAgICAgIG5leHRQb2ludCA9IHBvaW50c1tpKzFdO1xuICAgICAgICB9XG4gICAgICAgIGVsc2VcbiAgICAgICAge1xuICAgICAgICAgICAgbmV4dFBvaW50ID0gcG9pbnQ7XG4gICAgICAgIH1cblxuICAgICAgICBwZXJwWSA9IC0obmV4dFBvaW50LnggLSBsYXN0UG9pbnQueCk7XG4gICAgICAgIHBlcnBYID0gbmV4dFBvaW50LnkgLSBsYXN0UG9pbnQueTtcblxuICAgICAgICByYXRpbyA9ICgxIC0gKGkgLyAodG90YWwtMSkpKSAqIDEwO1xuXG4gICAgICAgIGlmIChyYXRpbyA+IDEpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJhdGlvID0gMTtcbiAgICAgICAgfVxuXG4gICAgICAgIHBlcnBMZW5ndGggPSBNYXRoLnNxcnQocGVycFggKiBwZXJwWCArIHBlcnBZICogcGVycFkpO1xuICAgICAgICBudW0gPSB0aGlzLl90ZXh0dXJlLmhlaWdodCAvIDI7IC8vKDIwICsgTWF0aC5hYnMoTWF0aC5zaW4oKGkgKyB0aGlzLmNvdW50KSAqIDAuMykgKiA1MCkgKSogcmF0aW87XG4gICAgICAgIHBlcnBYIC89IHBlcnBMZW5ndGg7XG4gICAgICAgIHBlcnBZIC89IHBlcnBMZW5ndGg7XG5cbiAgICAgICAgcGVycFggKj0gbnVtO1xuICAgICAgICBwZXJwWSAqPSBudW07XG5cbiAgICAgICAgdmVydGljZXNbaW5kZXhdID0gcG9pbnQueCArIHBlcnBYO1xuICAgICAgICB2ZXJ0aWNlc1tpbmRleCsxXSA9IHBvaW50LnkgKyBwZXJwWTtcbiAgICAgICAgdmVydGljZXNbaW5kZXgrMl0gPSBwb2ludC54IC0gcGVycFg7XG4gICAgICAgIHZlcnRpY2VzW2luZGV4KzNdID0gcG9pbnQueSAtIHBlcnBZO1xuXG4gICAgICAgIGxhc3RQb2ludCA9IHBvaW50O1xuICAgIH1cblxuICAgIHRoaXMuY29udGFpbmVyVXBkYXRlVHJhbnNmb3JtKCk7XG59O1xuIiwiLyoqXG4gKiBAZmlsZSAgICAgICAgTWFpbiBleHBvcnQgb2YgdGhlIFBJWEkgZXh0cmFzIGxpYnJhcnlcbiAqIEBhdXRob3IgICAgICBNYXQgR3JvdmVzIDxtYXRAZ29vZGJveWRpZ2l0YWwuY29tPlxuICogQGNvcHlyaWdodCAgIDIwMTMtMjAxNSBHb29kQm95RGlnaXRhbFxuICogQGxpY2Vuc2UgICAgIHtAbGluayBodHRwczovL2dpdGh1Yi5jb20vcGl4aWpzL3BpeGkuanMvYmxvYi9tYXN0ZXIvTElDRU5TRXxNSVQgTGljZW5zZX1cbiAqL1xuXG4vKipcbiAqIEBuYW1lc3BhY2UgUElYSS5tZXNoXG4gKi9cbm1vZHVsZS5leHBvcnRzID0ge1xuICAgIE1lc2g6ICAgICAgICAgICByZXF1aXJlKCcuL01lc2gnKSxcbiAgICBQbGFuZTogICAgICAgICAgIHJlcXVpcmUoJy4vUGxhbmUnKSxcbiAgICBSb3BlOiAgICAgICAgICAgcmVxdWlyZSgnLi9Sb3BlJyksXG4gICAgTWVzaFJlbmRlcmVyOiAgIHJlcXVpcmUoJy4vd2ViZ2wvTWVzaFJlbmRlcmVyJyksXG4gICAgTWVzaFNoYWRlcjogICAgIHJlcXVpcmUoJy4vd2ViZ2wvTWVzaFNoYWRlcicpXG59O1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi8uLi9jb3JlJyksXG4gICAgTWVzaCA9IHJlcXVpcmUoJy4uL01lc2gnKTtcblxuLyoqXG4gKiBAYXV0aG9yIE1hdCBHcm92ZXNcbiAqXG4gKiBCaWcgdGhhbmtzIHRvIHRoZSB2ZXJ5IGNsZXZlciBNYXR0IERlc0xhdXJpZXJzIDxtYXR0ZGVzbD4gaHR0cHM6Ly9naXRodWIuY29tL21hdHRkZXNsL1xuICogZm9yIGNyZWF0aW5nIHRoZSBvcmlnaW5hbCBwaXhpIHZlcnNpb24hXG4gKiBBbHNvIGEgdGhhbmtzIHRvIGh0dHBzOi8vZ2l0aHViLmNvbS9iY2hldmFsaWVyIGZvciB0d2Vha2luZyB0aGUgdGludCBhbmQgYWxwaGEgc28gdGhhdCB0aGV5IG5vdyBzaGFyZSA0IGJ5dGVzIG9uIHRoZSB2ZXJ0ZXggYnVmZmVyXG4gKlxuICogSGVhdmlseSBpbnNwaXJlZCBieSBMaWJHRFgncyBNZXNoUmVuZGVyZXI6XG4gKiBodHRwczovL2dpdGh1Yi5jb20vbGliZ2R4L2xpYmdkeC9ibG9iL21hc3Rlci9nZHgvc3JjL2NvbS9iYWRsb2dpYy9nZHgvZ3JhcGhpY3MvZzJkL01lc2hSZW5kZXJlci5qYXZhXG4gKi9cblxuLyoqXG4gKlxuICogQGNsYXNzXG4gKiBAcHJpdmF0ZVxuICogQG1lbWJlcm9mIFBJWEkubWVzaFxuICogQGV4dGVuZHMgUElYSS5PYmplY3RSZW5kZXJlclxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLldlYkdMUmVuZGVyZXJ9IFRoZSByZW5kZXJlciB0aGlzIHNwcml0ZSBiYXRjaCB3b3JrcyBmb3IuXG4gKi9cbmZ1bmN0aW9uIE1lc2hSZW5kZXJlcihyZW5kZXJlcilcbntcbiAgICBjb3JlLk9iamVjdFJlbmRlcmVyLmNhbGwodGhpcywgcmVuZGVyZXIpO1xuXG5cbiAgICAvKipcbiAgICAgKiBIb2xkcyB0aGUgaW5kaWNlc1xuICAgICAqXG4gICAgICogQG1lbWJlciB7VWludDE2QXJyYXl9XG4gICAgICovXG4gICAgXG4gICAgdGhpcy5pbmRpY2VzID0gbmV3IFVpbnQxNkFycmF5KDE1MDAwKTtcblxuICAgIC8vVE9ETyB0aGlzIGNvdWxkIGJlIGEgc2luZ2xlIGJ1ZmZlciBzaGFyZWQgYW1vbmdzdCBhbGwgcmVuZGVyZXJzIGFzIHdlIHJldXNlIHRoaXMgc2V0IHVwIGluIG1vc3QgcmVuZGVyZXJzXG4gICAgZm9yICh2YXIgaT0wLCBqPTA7IGkgPCAxNTAwMDsgaSArPSA2LCBqICs9IDQpXG4gICAge1xuICAgICAgICB0aGlzLmluZGljZXNbaSArIDBdID0gaiArIDA7XG4gICAgICAgIHRoaXMuaW5kaWNlc1tpICsgMV0gPSBqICsgMTtcbiAgICAgICAgdGhpcy5pbmRpY2VzW2kgKyAyXSA9IGogKyAyO1xuICAgICAgICB0aGlzLmluZGljZXNbaSArIDNdID0gaiArIDA7XG4gICAgICAgIHRoaXMuaW5kaWNlc1tpICsgNF0gPSBqICsgMjtcbiAgICAgICAgdGhpcy5pbmRpY2VzW2kgKyA1XSA9IGogKyAzO1xuICAgIH1cblxuICAgIHRoaXMuY3VycmVudFNoYWRlciA9IG51bGw7XG59XG5cbk1lc2hSZW5kZXJlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuT2JqZWN0UmVuZGVyZXIucHJvdG90eXBlKTtcbk1lc2hSZW5kZXJlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBNZXNoUmVuZGVyZXI7XG5tb2R1bGUuZXhwb3J0cyA9IE1lc2hSZW5kZXJlcjtcblxuY29yZS5XZWJHTFJlbmRlcmVyLnJlZ2lzdGVyUGx1Z2luKCdtZXNoJywgTWVzaFJlbmRlcmVyKTtcblxuLyoqXG4gKiBTZXRzIHVwIHRoZSByZW5kZXJlciBjb250ZXh0IGFuZCBuZWNlc3NhcnkgYnVmZmVycy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIGdsIHtXZWJHTFJlbmRlcmluZ0NvbnRleHR9IHRoZSBjdXJyZW50IFdlYkdMIGRyYXdpbmcgY29udGV4dFxuICovXG5NZXNoUmVuZGVyZXIucHJvdG90eXBlLm9uQ29udGV4dENoYW5nZSA9IGZ1bmN0aW9uICgpXG57XG5cbn07XG5cbi8qKlxuICogUmVuZGVycyB0aGUgc3ByaXRlIG9iamVjdC5cbiAqXG4gKiBAcGFyYW0gbWVzaCB7UElYSS5tZXNoLk1lc2h9IHRoZSBtZXNoIHRvIHJlbmRlclxuICovXG5NZXNoUmVuZGVyZXIucHJvdG90eXBlLnJlbmRlciA9IGZ1bmN0aW9uIChtZXNoKVxue1xuICAgIGlmKCFtZXNoLl92ZXJ0ZXhCdWZmZXIpXG4gICAge1xuICAgICAgICB0aGlzLl9pbml0V2ViR0wobWVzaCk7XG4gICAgfVxuXG4gICAgdmFyIHJlbmRlcmVyID0gdGhpcy5yZW5kZXJlcixcbiAgICAgICAgZ2wgPSByZW5kZXJlci5nbCxcbiAgICAgICAgdGV4dHVyZSA9IG1lc2guX3RleHR1cmUuYmFzZVRleHR1cmUsXG4gICAgICAgIHNoYWRlciA9IG1lc2guc2hhZGVyOy8vIHx8IHJlbmRlcmVyLnNoYWRlck1hbmFnZXIucGx1Z2lucy5tZXNoU2hhZGVyO1xuXG4gICAgdmFyIGRyYXdNb2RlID0gbWVzaC5kcmF3TW9kZSA9PT0gTWVzaC5EUkFXX01PREVTLlRSSUFOR0xFX01FU0ggPyBnbC5UUklBTkdMRV9TVFJJUCA6IGdsLlRSSUFOR0xFUztcblxuICAgIHJlbmRlcmVyLmJsZW5kTW9kZU1hbmFnZXIuc2V0QmxlbmRNb2RlKG1lc2guYmxlbmRNb2RlKTtcblxuICAgIC8vVE9ETyBjYWNoZSBjdXN0b20gc3RhdGUuLlxuICAgIGlmICghc2hhZGVyKVxuICAgIHtcbiAgICAgICAgc2hhZGVyID0gcmVuZGVyZXIuc2hhZGVyTWFuYWdlci5wbHVnaW5zLm1lc2hTaGFkZXI7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHNoYWRlciA9IHNoYWRlci5zaGFkZXJzW2dsLmlkXSB8fCBzaGFkZXIuZ2V0U2hhZGVyKHJlbmRlcmVyKTsvLyA6IHNoYWRlcjtcbiAgICB9XG5cbiAgICB0aGlzLnJlbmRlcmVyLnNoYWRlck1hbmFnZXIuc2V0U2hhZGVyKHNoYWRlcik7XG5cbiAgICBzaGFkZXIudW5pZm9ybXMudHJhbnNsYXRpb25NYXRyaXgudmFsdWUgPSBtZXNoLndvcmxkVHJhbnNmb3JtLnRvQXJyYXkodHJ1ZSk7XG4gICAgc2hhZGVyLnVuaWZvcm1zLnByb2plY3Rpb25NYXRyaXgudmFsdWUgPSByZW5kZXJlci5jdXJyZW50UmVuZGVyVGFyZ2V0LnByb2plY3Rpb25NYXRyaXgudG9BcnJheSh0cnVlKTtcbiAgICBzaGFkZXIudW5pZm9ybXMuYWxwaGEudmFsdWUgPSBtZXNoLndvcmxkQWxwaGE7XG5cbiAgICBzaGFkZXIuc3luY1VuaWZvcm1zKCk7XG5cbiAgICBpZiAoIW1lc2guZGlydHkpXG4gICAge1xuXG4gICAgICAgIGdsLmJpbmRCdWZmZXIoZ2wuQVJSQVlfQlVGRkVSLCBtZXNoLl92ZXJ0ZXhCdWZmZXIpO1xuICAgICAgICBnbC5idWZmZXJTdWJEYXRhKGdsLkFSUkFZX0JVRkZFUiwgMCwgbWVzaC52ZXJ0aWNlcyk7XG4gICAgICAgIGdsLnZlcnRleEF0dHJpYlBvaW50ZXIoc2hhZGVyLmF0dHJpYnV0ZXMuYVZlcnRleFBvc2l0aW9uLCAyLCBnbC5GTE9BVCwgZmFsc2UsIDAsIDApO1xuXG4gICAgICAgIC8vIHVwZGF0ZSB0aGUgdXZzXG4gICAgICAgIGdsLmJpbmRCdWZmZXIoZ2wuQVJSQVlfQlVGRkVSLCBtZXNoLl91dkJ1ZmZlcik7XG4gICAgICAgIGdsLnZlcnRleEF0dHJpYlBvaW50ZXIoc2hhZGVyLmF0dHJpYnV0ZXMuYVRleHR1cmVDb29yZCwgMiwgZ2wuRkxPQVQsIGZhbHNlLCAwLCAwKTtcblxuXG4gICAgICAgIGdsLmFjdGl2ZVRleHR1cmUoZ2wuVEVYVFVSRTApO1xuXG4gICAgICAgaWYgKCF0ZXh0dXJlLl9nbFRleHR1cmVzW2dsLmlkXSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5yZW5kZXJlci51cGRhdGVUZXh0dXJlKHRleHR1cmUpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2VcbiAgICAgICAge1xuICAgICAgICAgICAgLy8gYmluZCB0aGUgY3VycmVudCB0ZXh0dXJlXG4gICAgICAgICAgICBnbC5iaW5kVGV4dHVyZShnbC5URVhUVVJFXzJELCB0ZXh0dXJlLl9nbFRleHR1cmVzW2dsLmlkXSk7XG4gICAgICAgIH1cblxuICAgICAgICBnbC5iaW5kQnVmZmVyKGdsLkVMRU1FTlRfQVJSQVlfQlVGRkVSLCBtZXNoLl9pbmRleEJ1ZmZlcik7XG4gICAgICAgIGdsLmJ1ZmZlclN1YkRhdGEoZ2wuRUxFTUVOVF9BUlJBWV9CVUZGRVIsIDAsIG1lc2guaW5kaWNlcyk7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG5cbiAgICAgICAgbWVzaC5kaXJ0eSA9IGZhbHNlO1xuICAgICAgICBnbC5iaW5kQnVmZmVyKGdsLkFSUkFZX0JVRkZFUiwgbWVzaC5fdmVydGV4QnVmZmVyKTtcbiAgICAgICAgZ2wuYnVmZmVyRGF0YShnbC5BUlJBWV9CVUZGRVIsIG1lc2gudmVydGljZXMsIGdsLlNUQVRJQ19EUkFXKTtcbiAgICAgICAgZ2wudmVydGV4QXR0cmliUG9pbnRlcihzaGFkZXIuYXR0cmlidXRlcy5hVmVydGV4UG9zaXRpb24sIDIsIGdsLkZMT0FULCBmYWxzZSwgMCwgMCk7XG5cbiAgICAgICAgLy8gdXBkYXRlIHRoZSB1dnNcbiAgICAgICAgZ2wuYmluZEJ1ZmZlcihnbC5BUlJBWV9CVUZGRVIsIG1lc2guX3V2QnVmZmVyKTtcbiAgICAgICAgZ2wuYnVmZmVyRGF0YShnbC5BUlJBWV9CVUZGRVIsIG1lc2gudXZzLCBnbC5TVEFUSUNfRFJBVyk7XG4gICAgICAgIGdsLnZlcnRleEF0dHJpYlBvaW50ZXIoc2hhZGVyLmF0dHJpYnV0ZXMuYVRleHR1cmVDb29yZCwgMiwgZ2wuRkxPQVQsIGZhbHNlLCAwLCAwKTtcblxuICAgICAgICAgZ2wuYWN0aXZlVGV4dHVyZShnbC5URVhUVVJFMCk7XG5cbiAgICAgICAgaWYgKCF0ZXh0dXJlLl9nbFRleHR1cmVzW2dsLmlkXSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5yZW5kZXJlci51cGRhdGVUZXh0dXJlKHRleHR1cmUpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2VcbiAgICAgICAge1xuICAgICAgICAgICAgLy8gYmluZCB0aGUgY3VycmVudCB0ZXh0dXJlXG4gICAgICAgICAgICBnbC5iaW5kVGV4dHVyZShnbC5URVhUVVJFXzJELCB0ZXh0dXJlLl9nbFRleHR1cmVzW2dsLmlkXSk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBkb250IG5lZWQgdG8gdXBsb2FkIVxuICAgICAgICBnbC5iaW5kQnVmZmVyKGdsLkVMRU1FTlRfQVJSQVlfQlVGRkVSLCBtZXNoLl9pbmRleEJ1ZmZlcik7XG4gICAgICAgIGdsLmJ1ZmZlckRhdGEoZ2wuRUxFTUVOVF9BUlJBWV9CVUZGRVIsIG1lc2guaW5kaWNlcywgZ2wuU1RBVElDX0RSQVcpO1xuXG4gICAgfVxuXG4gICAgZ2wuZHJhd0VsZW1lbnRzKGRyYXdNb2RlLCBtZXNoLmluZGljZXMubGVuZ3RoLCBnbC5VTlNJR05FRF9TSE9SVCwgMCk7XG5cbn07XG5cbi8qKlxuICogUHJlcGFyZXMgYWxsIHRoZSBidWZmZXJzIHRvIHJlbmRlciB0aGlzIG1lc2hcbiAqIEBwYXJhbSBtZXNoIHtQSVhJLm1lc2guTWVzaH0gdGhlIG1lc2ggdG8gcmVuZGVyXG4gKi9cbk1lc2hSZW5kZXJlci5wcm90b3R5cGUuX2luaXRXZWJHTCA9IGZ1bmN0aW9uIChtZXNoKVxue1xuICAgIC8vIGJ1aWxkIHRoZSBzdHJpcCFcbiAgICB2YXIgZ2wgPSB0aGlzLnJlbmRlcmVyLmdsO1xuXG4gICAgbWVzaC5fdmVydGV4QnVmZmVyID0gZ2wuY3JlYXRlQnVmZmVyKCk7XG4gICAgbWVzaC5faW5kZXhCdWZmZXIgPSBnbC5jcmVhdGVCdWZmZXIoKTtcbiAgICBtZXNoLl91dkJ1ZmZlciA9IGdsLmNyZWF0ZUJ1ZmZlcigpO1xuXG5cblxuICAgIGdsLmJpbmRCdWZmZXIoZ2wuQVJSQVlfQlVGRkVSLCBtZXNoLl92ZXJ0ZXhCdWZmZXIpO1xuICAgIGdsLmJ1ZmZlckRhdGEoZ2wuQVJSQVlfQlVGRkVSLCBtZXNoLnZlcnRpY2VzLCBnbC5EWU5BTUlDX0RSQVcpO1xuXG4gICAgZ2wuYmluZEJ1ZmZlcihnbC5BUlJBWV9CVUZGRVIsIG1lc2guX3V2QnVmZmVyKTtcbiAgICBnbC5idWZmZXJEYXRhKGdsLkFSUkFZX0JVRkZFUiwgIG1lc2gudXZzLCBnbC5TVEFUSUNfRFJBVyk7XG5cbiAgICBpZihtZXNoLmNvbG9ycyl7XG4gICAgICAgIG1lc2guX2NvbG9yQnVmZmVyID0gZ2wuY3JlYXRlQnVmZmVyKCk7XG4gICAgICAgIGdsLmJpbmRCdWZmZXIoZ2wuQVJSQVlfQlVGRkVSLCBtZXNoLl9jb2xvckJ1ZmZlcik7XG4gICAgICAgIGdsLmJ1ZmZlckRhdGEoZ2wuQVJSQVlfQlVGRkVSLCBtZXNoLmNvbG9ycywgZ2wuU1RBVElDX0RSQVcpO1xuICAgIH1cblxuICAgIGdsLmJpbmRCdWZmZXIoZ2wuRUxFTUVOVF9BUlJBWV9CVUZGRVIsIG1lc2guX2luZGV4QnVmZmVyKTtcbiAgICBnbC5idWZmZXJEYXRhKGdsLkVMRU1FTlRfQVJSQVlfQlVGRkVSLCBtZXNoLmluZGljZXMsIGdsLlNUQVRJQ19EUkFXKTtcbn07XG5cblxuLyoqXG4gKiBFbXB0aWVzIHRoZSBjdXJyZW50IGJhdGNoLlxuICpcbiAqL1xuTWVzaFJlbmRlcmVyLnByb3RvdHlwZS5mbHVzaCA9IGZ1bmN0aW9uICgpXG57XG5cbn07XG5cbi8qKlxuICogU3RhcnRzIGEgbmV3IG1lc2ggcmVuZGVyZXIuXG4gKlxuICovXG5NZXNoUmVuZGVyZXIucHJvdG90eXBlLnN0YXJ0ID0gZnVuY3Rpb24gKClcbntcbiAgICBcblxuICAgIHRoaXMuY3VycmVudFNoYWRlciA9IG51bGw7XG59O1xuXG4vKipcbiAqIERlc3Ryb3lzIHRoZSBNZXNoIHJlbmRlcmVyXG4gKlxuICovXG5NZXNoUmVuZGVyZXIucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoKVxue1xuICAgIGNvcmUuT2JqZWN0UmVuZGVyZXIucHJvdG90eXBlLmRlc3Ryb3kuY2FsbCh0aGlzKTtcbn07XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uLy4uL2NvcmUnKTtcblxuLyoqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuU2hhZGVyXG4gKiBAbWVtYmVyb2YgUElYSS5tZXNoXG4gKiBAcGFyYW0gc2hhZGVyTWFuYWdlciB7UElYSS5TaGFkZXJNYW5hZ2VyfSBUaGUgV2ViR0wgc2hhZGVyIG1hbmFnZXIgdGhpcyBzaGFkZXIgd29ya3MgZm9yLlxuICovXG5mdW5jdGlvbiBNZXNoU2hhZGVyKHNoYWRlck1hbmFnZXIpXG57XG4gICAgY29yZS5TaGFkZXIuY2FsbCh0aGlzLFxuICAgICAgICBzaGFkZXJNYW5hZ2VyLFxuICAgICAgICAvLyB2ZXJ0ZXggc2hhZGVyXG4gICAgICAgIFtcbiAgICAgICAgICAgICdwcmVjaXNpb24gbG93cCBmbG9hdDsnLFxuICAgICAgICAgICAgJ2F0dHJpYnV0ZSB2ZWMyIGFWZXJ0ZXhQb3NpdGlvbjsnLFxuICAgICAgICAgICAgJ2F0dHJpYnV0ZSB2ZWMyIGFUZXh0dXJlQ29vcmQ7JyxcblxuICAgICAgICAgICAgJ3VuaWZvcm0gbWF0MyB0cmFuc2xhdGlvbk1hdHJpeDsnLFxuICAgICAgICAgICAgJ3VuaWZvcm0gbWF0MyBwcm9qZWN0aW9uTWF0cml4OycsXG5cbiAgICAgICAgICAgICd2YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDsnLFxuXG4gICAgICAgICAgICAndm9pZCBtYWluKHZvaWQpeycsXG4gICAgICAgICAgICAnICAgZ2xfUG9zaXRpb24gPSB2ZWM0KChwcm9qZWN0aW9uTWF0cml4ICogdHJhbnNsYXRpb25NYXRyaXggKiB2ZWMzKGFWZXJ0ZXhQb3NpdGlvbiwgMS4wKSkueHksIDAuMCwgMS4wKTsnLFxuICAgICAgICAgICAgJyAgIHZUZXh0dXJlQ29vcmQgPSBhVGV4dHVyZUNvb3JkOycsXG4gICAgICAgICAgICAnfSdcbiAgICAgICAgXS5qb2luKCdcXG4nKSxcbiAgICAgICAgW1xuICAgICAgICAgICAgJ3ByZWNpc2lvbiBsb3dwIGZsb2F0OycsXG5cbiAgICAgICAgICAgICd2YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDsnLFxuICAgICAgICAgICAgJ3VuaWZvcm0gZmxvYXQgYWxwaGE7JyxcblxuICAgICAgICAgICAgJ3VuaWZvcm0gc2FtcGxlcjJEIHVTYW1wbGVyOycsXG5cbiAgICAgICAgICAgICd2b2lkIG1haW4odm9pZCl7JyxcbiAgICAgICAgICAgICcgICBnbF9GcmFnQ29sb3IgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZUZXh0dXJlQ29vcmQpICogYWxwaGEgOycsXG4gICAgICAgICAgICAnfSdcbiAgICAgICAgXS5qb2luKCdcXG4nKSxcbiAgICAgICAgLy8gY3VzdG9tIHVuaWZvcm1zXG4gICAgICAgIHtcbiAgICAgICAgICAgIGFscGhhOiAgeyB0eXBlOiAnMWYnLCB2YWx1ZTogMCB9LFxuICAgICAgICAgICAgdHJhbnNsYXRpb25NYXRyaXg6IHsgdHlwZTogJ21hdDMnLCB2YWx1ZTogbmV3IEZsb2F0MzJBcnJheSg5KSB9LFxuICAgICAgICAgICAgcHJvamVjdGlvbk1hdHJpeDogeyB0eXBlOiAnbWF0MycsIHZhbHVlOiBuZXcgRmxvYXQzMkFycmF5KDkpIH1cbiAgICAgICAgfSxcbiAgICAgICAgLy8gY3VzdG9tIGF0dHJpYnV0ZXNcbiAgICAgICAge1xuICAgICAgICAgICAgYVZlcnRleFBvc2l0aW9uOjAsXG4gICAgICAgICAgICBhVGV4dHVyZUNvb3JkOjBcbiAgICAgICAgfVxuICAgICk7XG59XG5cbk1lc2hTaGFkZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShjb3JlLlNoYWRlci5wcm90b3R5cGUpO1xuTWVzaFNoYWRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBNZXNoU2hhZGVyO1xubW9kdWxlLmV4cG9ydHMgPSBNZXNoU2hhZGVyO1xuXG5jb3JlLlNoYWRlck1hbmFnZXIucmVnaXN0ZXJQbHVnaW4oJ21lc2hTaGFkZXInLCBNZXNoU2hhZGVyKTtcbiIsIi8vIFJlZmVyZW5jZXM6XG4vLyBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9KYXZhU2NyaXB0L1JlZmVyZW5jZS9HbG9iYWxfT2JqZWN0cy9NYXRoL3NpZ25cblxuaWYgKCFNYXRoLnNpZ24pXG57XG4gICAgTWF0aC5zaWduID0gZnVuY3Rpb24gKHgpIHtcbiAgICAgICAgeCA9ICt4O1xuICAgICAgICBpZiAoeCA9PT0gMCB8fCBpc05hTih4KSlcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHg7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHggPiAwID8gMSA6IC0xO1xuICAgIH07XG59XG4iLCIvLyBSZWZlcmVuY2VzOlxuLy8gaHR0cHM6Ly9naXRodWIuY29tL3NpbmRyZXNvcmh1cy9vYmplY3QtYXNzaWduXG4vLyBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9KYXZhU2NyaXB0L1JlZmVyZW5jZS9HbG9iYWxfT2JqZWN0cy9PYmplY3QvYXNzaWduXG5cbmlmICghT2JqZWN0LmFzc2lnbilcbntcbiAgICBPYmplY3QuYXNzaWduID0gcmVxdWlyZSgnb2JqZWN0LWFzc2lnbicpO1xufVxuIiwicmVxdWlyZSgnLi9PYmplY3QuYXNzaWduJyk7XG5yZXF1aXJlKCcuL3JlcXVlc3RBbmltYXRpb25GcmFtZScpO1xucmVxdWlyZSgnLi9NYXRoLnNpZ24nKTtcbiIsIi8vIFJlZmVyZW5jZXM6XG4vLyBodHRwOi8vcGF1bGlyaXNoLmNvbS8yMDExL3JlcXVlc3RhbmltYXRpb25mcmFtZS1mb3Itc21hcnQtYW5pbWF0aW5nL1xuLy8gaHR0cHM6Ly9naXN0LmdpdGh1Yi5jb20vMTU3OTY3MVxuLy8gaHR0cDovL3VwZGF0ZXMuaHRtbDVyb2Nrcy5jb20vMjAxMi8wNS9yZXF1ZXN0QW5pbWF0aW9uRnJhbWUtQVBJLW5vdy13aXRoLXN1Yi1taWxsaXNlY29uZC1wcmVjaXNpb25cbi8vIGh0dHBzOi8vZ2lzdC5naXRodWIuY29tL3RpbWhhbGwvNDA3ODYxNFxuLy8gaHR0cHM6Ly9naXRodWIuY29tL0ZpbmFuY2lhbC1UaW1lcy9wb2x5ZmlsbC1zZXJ2aWNlL3RyZWUvbWFzdGVyL3BvbHlmaWxscy9yZXF1ZXN0QW5pbWF0aW9uRnJhbWVcblxuLy8gRXhwZWN0ZWQgdG8gYmUgdXNlZCB3aXRoIEJyb3dzZXJmaXlcbi8vIEJyb3dzZXJpZnkgYXV0b21hdGljYWxseSBkZXRlY3RzIHRoZSB1c2Ugb2YgYGdsb2JhbGAgYW5kIHBhc3NlcyB0aGVcbi8vIGNvcnJlY3QgcmVmZXJlbmNlIG9mIGBnbG9iYWxgLCBgc2VsZmAsIGFuZCBmaW5hbGx5IGB3aW5kb3dgXG5cbi8vIERhdGUubm93XG5pZiAoIShEYXRlLm5vdyAmJiBEYXRlLnByb3RvdHlwZS5nZXRUaW1lKSkge1xuICAgIERhdGUubm93ID0gZnVuY3Rpb24gbm93KCkge1xuICAgICAgICByZXR1cm4gbmV3IERhdGUoKS5nZXRUaW1lKCk7XG4gICAgfTtcbn1cblxuLy8gcGVyZm9ybWFuY2Uubm93XG5pZiAoIShnbG9iYWwucGVyZm9ybWFuY2UgJiYgZ2xvYmFsLnBlcmZvcm1hbmNlLm5vdykpIHtcbiAgICB2YXIgc3RhcnRUaW1lID0gRGF0ZS5ub3coKTtcbiAgICBpZiAoIWdsb2JhbC5wZXJmb3JtYW5jZSkge1xuICAgICAgICBnbG9iYWwucGVyZm9ybWFuY2UgPSB7fTtcbiAgICB9XG4gICAgZ2xvYmFsLnBlcmZvcm1hbmNlLm5vdyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIERhdGUubm93KCkgLSBzdGFydFRpbWU7XG4gICAgfTtcbn1cblxuLy8gcmVxdWVzdEFuaW1hdGlvbkZyYW1lXG52YXIgbGFzdFRpbWUgPSBEYXRlLm5vdygpO1xudmFyIHZlbmRvcnMgPSBbJ21zJywgJ21veicsICd3ZWJraXQnLCAnbyddO1xuXG5mb3IodmFyIHggPSAwOyB4IDwgdmVuZG9ycy5sZW5ndGggJiYgIWdsb2JhbC5yZXF1ZXN0QW5pbWF0aW9uRnJhbWU7ICsreCkge1xuICAgIGdsb2JhbC5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUgPSBnbG9iYWxbdmVuZG9yc1t4XSArICdSZXF1ZXN0QW5pbWF0aW9uRnJhbWUnXTtcbiAgICBnbG9iYWwuY2FuY2VsQW5pbWF0aW9uRnJhbWUgPSBnbG9iYWxbdmVuZG9yc1t4XSArICdDYW5jZWxBbmltYXRpb25GcmFtZSddIHx8XG4gICAgICAgIGdsb2JhbFt2ZW5kb3JzW3hdICsgJ0NhbmNlbFJlcXVlc3RBbmltYXRpb25GcmFtZSddO1xufVxuXG5pZiAoIWdsb2JhbC5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUpIHtcbiAgICBnbG9iYWwucmVxdWVzdEFuaW1hdGlvbkZyYW1lID0gZnVuY3Rpb24gKGNhbGxiYWNrKSB7XG4gICAgICAgIGlmICh0eXBlb2YgY2FsbGJhY2sgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoY2FsbGJhY2sgKyAnaXMgbm90IGEgZnVuY3Rpb24nKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBjdXJyZW50VGltZSA9IERhdGUubm93KCksXG4gICAgICAgICAgICBkZWxheSA9IDE2ICsgbGFzdFRpbWUgLSBjdXJyZW50VGltZTtcblxuICAgICAgICBpZiAoZGVsYXkgPCAwKSB7XG4gICAgICAgICAgICBkZWxheSA9IDA7XG4gICAgICAgIH1cblxuICAgICAgICBsYXN0VGltZSA9IGN1cnJlbnRUaW1lO1xuXG4gICAgICAgIHJldHVybiBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGxhc3RUaW1lID0gRGF0ZS5ub3coKTtcbiAgICAgICAgICAgIGNhbGxiYWNrKHBlcmZvcm1hbmNlLm5vdygpKTtcbiAgICAgICAgfSwgZGVsYXkpO1xuICAgIH07XG59XG5cbmlmICghZ2xvYmFsLmNhbmNlbEFuaW1hdGlvbkZyYW1lKSB7XG4gICAgZ2xvYmFsLmNhbmNlbEFuaW1hdGlvbkZyYW1lID0gZnVuY3Rpb24oaWQpIHtcbiAgICAgICAgY2xlYXJUaW1lb3V0KGlkKTtcbiAgICB9O1xufVxuIl19 +//# sourceMappingURL=data:application/json;charset:utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIm5vZGVfbW9kdWxlcy9icm93c2VyaWZ5L25vZGVfbW9kdWxlcy9icm93c2VyLXBhY2svX3ByZWx1ZGUuanMiLCIuLi9waXhpLWdsLWNvcmUvaW5kZXguanMiLCIuLi9waXhpLWdsLWNvcmUvbGliL0dMQnVmZmVyLmpzIiwiLi4vcGl4aS1nbC1jb3JlL2xpYi9HTEZyYW1lYnVmZmVyLmpzIiwiLi4vcGl4aS1nbC1jb3JlL2xpYi9HTFNoYWRlci5qcyIsIi4uL3BpeGktZ2wtY29yZS9saWIvR0xUZXh0dXJlLmpzIiwiLi4vcGl4aS1nbC1jb3JlL2xpYi9WZXJ0ZXhBcnJheU9iamVjdC5qcyIsIi4uL3BpeGktZ2wtY29yZS9saWIvY3JlYXRlQ29udGV4dC5qcyIsIi4uL3BpeGktZ2wtY29yZS9saWIvc2V0VmVydGV4QXR0cmliQXJyYXlzLmpzIiwiLi4vcGl4aS1nbC1jb3JlL2xpYi9zaGFkZXIvY29tcGlsZVByb2dyYW0uanMiLCIuLi9waXhpLWdsLWNvcmUvbGliL3NoYWRlci9kZWZhdWx0VmFsdWUuanMiLCIuLi9waXhpLWdsLWNvcmUvbGliL3NoYWRlci9leHRyYWN0QXR0cmlidXRlcy5qcyIsIi4uL3BpeGktZ2wtY29yZS9saWIvc2hhZGVyL2V4dHJhY3RVbmlmb3Jtcy5qcyIsIi4uL3BpeGktZ2wtY29yZS9saWIvc2hhZGVyL2dlbmVyYXRlVW5pZm9ybUFjY2Vzc09iamVjdC5qcyIsIi4uL3BpeGktZ2wtY29yZS9saWIvc2hhZGVyL21hcFNpemUuanMiLCIuLi9waXhpLWdsLWNvcmUvbGliL3NoYWRlci9tYXBUeXBlLmpzIiwibm9kZV9tb2R1bGVzL2FzeW5jL2xpYi9hc3luYy5qcyIsIm5vZGVfbW9kdWxlcy9icm93c2VyaWZ5L25vZGVfbW9kdWxlcy9wYXRoLWJyb3dzZXJpZnkvaW5kZXguanMiLCJub2RlX21vZHVsZXMvYnJvd3NlcmlmeS9ub2RlX21vZHVsZXMvcHJvY2Vzcy9icm93c2VyLmpzIiwibm9kZV9tb2R1bGVzL2Jyb3dzZXJpZnkvbm9kZV9tb2R1bGVzL3B1bnljb2RlL3B1bnljb2RlLmpzIiwibm9kZV9tb2R1bGVzL2Jyb3dzZXJpZnkvbm9kZV9tb2R1bGVzL3F1ZXJ5c3RyaW5nLWVzMy9kZWNvZGUuanMiLCJub2RlX21vZHVsZXMvYnJvd3NlcmlmeS9ub2RlX21vZHVsZXMvcXVlcnlzdHJpbmctZXMzL2VuY29kZS5qcyIsIm5vZGVfbW9kdWxlcy9icm93c2VyaWZ5L25vZGVfbW9kdWxlcy9xdWVyeXN0cmluZy1lczMvaW5kZXguanMiLCJub2RlX21vZHVsZXMvYnJvd3NlcmlmeS9ub2RlX21vZHVsZXMvdXJsL3VybC5qcyIsIm5vZGVfbW9kdWxlcy9lYXJjdXQvc3JjL2VhcmN1dC5qcyIsIm5vZGVfbW9kdWxlcy9ldmVudGVtaXR0ZXIzL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL29iamVjdC1hc3NpZ24vaW5kZXguanMiLCJub2RlX21vZHVsZXMvcmVzb3VyY2UtbG9hZGVyL25vZGVfbW9kdWxlcy9hc3luYy9saWIvYXN5bmMuanMiLCJub2RlX21vZHVsZXMvcmVzb3VyY2UtbG9hZGVyL3NyYy9Mb2FkZXIuanMiLCJub2RlX21vZHVsZXMvcmVzb3VyY2UtbG9hZGVyL3NyYy9SZXNvdXJjZS5qcyIsIm5vZGVfbW9kdWxlcy9yZXNvdXJjZS1sb2FkZXIvc3JjL2I2NC5qcyIsIm5vZGVfbW9kdWxlcy9yZXNvdXJjZS1sb2FkZXIvc3JjL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL3Jlc291cmNlLWxvYWRlci9zcmMvbWlkZGxld2FyZXMvY2FjaGluZy9tZW1vcnkuanMiLCJub2RlX21vZHVsZXMvcmVzb3VyY2UtbG9hZGVyL3NyYy9taWRkbGV3YXJlcy9wYXJzaW5nL2Jsb2IuanMiLCJwYWNrYWdlLmpzb24iLCJzcmMvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5TWFuYWdlci5qcyIsInNyYy9hY2Nlc3NpYmlsaXR5L2FjY2Vzc2libGVUYXJnZXQuanMiLCJzcmMvYWNjZXNzaWJpbGl0eS9pbmRleC5qcyIsInNyYy9jb3JlL2NvbnN0LmpzIiwic3JjL2NvcmUvZGlzcGxheS9Db250YWluZXIuanMiLCJzcmMvY29yZS9kaXNwbGF5L0Rpc3BsYXlPYmplY3QuanMiLCJzcmMvY29yZS9ncmFwaGljcy9HcmFwaGljcy5qcyIsInNyYy9jb3JlL2dyYXBoaWNzL0dyYXBoaWNzRGF0YS5qcyIsInNyYy9jb3JlL2dyYXBoaWNzL3dlYmdsL0dyYXBoaWNzUmVuZGVyZXIuanMiLCJzcmMvY29yZS9ncmFwaGljcy93ZWJnbC9XZWJHTEdyYXBoaWNzRGF0YS5qcyIsInNyYy9jb3JlL2dyYXBoaWNzL3dlYmdsL3NoYWRlcnMvUHJpbWl0aXZlU2hhZGVyLmpzIiwic3JjL2NvcmUvZ3JhcGhpY3Mvd2ViZ2wvdXRpbHMvYnVpbGRDaXJjbGUuanMiLCJzcmMvY29yZS9ncmFwaGljcy93ZWJnbC91dGlscy9idWlsZENvbXBsZXhQb2x5LmpzIiwic3JjL2NvcmUvZ3JhcGhpY3Mvd2ViZ2wvdXRpbHMvYnVpbGRMaW5lLmpzIiwic3JjL2NvcmUvZ3JhcGhpY3Mvd2ViZ2wvdXRpbHMvYnVpbGRQb2x5LmpzIiwic3JjL2NvcmUvZ3JhcGhpY3Mvd2ViZ2wvdXRpbHMvYnVpbGRSZWN0YW5nbGUuanMiLCJzcmMvY29yZS9ncmFwaGljcy93ZWJnbC91dGlscy9idWlsZFJvdW5kZWRSZWN0YW5nbGUuanMiLCJzcmMvY29yZS9pbmRleC5qcyIsInNyYy9jb3JlL21hdGgvTWF0cml4LmpzIiwic3JjL2NvcmUvbWF0aC9Qb2ludC5qcyIsInNyYy9jb3JlL21hdGgvaW5kZXguanMiLCJzcmMvY29yZS9tYXRoL3NoYXBlcy9DaXJjbGUuanMiLCJzcmMvY29yZS9tYXRoL3NoYXBlcy9FbGxpcHNlLmpzIiwic3JjL2NvcmUvbWF0aC9zaGFwZXMvUG9seWdvbi5qcyIsInNyYy9jb3JlL21hdGgvc2hhcGVzL1JlY3RhbmdsZS5qcyIsInNyYy9jb3JlL21hdGgvc2hhcGVzL1JvdW5kZWRSZWN0YW5nbGUuanMiLCJzcmMvY29yZS9wYXJ0aWNsZXMvUGFydGljbGVDb250YWluZXIuanMiLCJzcmMvY29yZS9wYXJ0aWNsZXMvd2ViZ2wvUGFydGljbGVCdWZmZXIuanMiLCJzcmMvY29yZS9wYXJ0aWNsZXMvd2ViZ2wvUGFydGljbGVSZW5kZXJlci5qcyIsInNyYy9jb3JlL3BhcnRpY2xlcy93ZWJnbC9QYXJ0aWNsZVNoYWRlci5qcyIsInNyYy9jb3JlL3JlbmRlcmVycy9TeXN0ZW1SZW5kZXJlci5qcyIsInNyYy9jb3JlL3JlbmRlcmVycy9jYW52YXMvQ2FudmFzUmVuZGVyZXIuanMiLCJzcmMvY29yZS9yZW5kZXJlcnMvY2FudmFzL3V0aWxzL0NhbnZhc0J1ZmZlci5qcyIsInNyYy9jb3JlL3JlbmRlcmVycy9jYW52YXMvdXRpbHMvQ2FudmFzR3JhcGhpY3MuanMiLCJzcmMvY29yZS9yZW5kZXJlcnMvY2FudmFzL3V0aWxzL0NhbnZhc01hc2tNYW5hZ2VyLmpzIiwic3JjL2NvcmUvcmVuZGVyZXJzL2NhbnZhcy91dGlscy9DYW52YXNUaW50ZXIuanMiLCJzcmMvY29yZS9yZW5kZXJlcnMvd2ViZ2wvVGV4dHVyZU1hbmFnZXIuanMiLCJzcmMvY29yZS9yZW5kZXJlcnMvd2ViZ2wvV2ViR0xSZW5kZXJlci5qcyIsInNyYy9jb3JlL3JlbmRlcmVycy93ZWJnbC9maWx0ZXJzL0Fic3RyYWN0RmlsdGVyLmpzIiwic3JjL2NvcmUvcmVuZGVyZXJzL3dlYmdsL2ZpbHRlcnMvRlhBQUZpbHRlci5qcyIsInNyYy9jb3JlL3JlbmRlcmVycy93ZWJnbC9maWx0ZXJzL1Nwcml0ZU1hc2tGaWx0ZXIuanMiLCJzcmMvY29yZS9yZW5kZXJlcnMvd2ViZ2wvbWFuYWdlcnMvQmxlbmRNb2RlTWFuYWdlci5qcyIsInNyYy9jb3JlL3JlbmRlcmVycy93ZWJnbC9tYW5hZ2Vycy9GaWx0ZXJNYW5hZ2VyLmpzIiwic3JjL2NvcmUvcmVuZGVyZXJzL3dlYmdsL21hbmFnZXJzL01hc2tNYW5hZ2VyLmpzIiwic3JjL2NvcmUvcmVuZGVyZXJzL3dlYmdsL21hbmFnZXJzL1NoYWRlck1hbmFnZXIuanMiLCJzcmMvY29yZS9yZW5kZXJlcnMvd2ViZ2wvbWFuYWdlcnMvU3RlbmNpbE1hbmFnZXIuanMiLCJzcmMvY29yZS9yZW5kZXJlcnMvd2ViZ2wvbWFuYWdlcnMvV2ViR0xNYW5hZ2VyLmpzIiwic3JjL2NvcmUvcmVuZGVyZXJzL3dlYmdsL3NoYWRlcnMvQ29tcGxleFByaW1pdGl2ZVNoYWRlci5qcyIsInNyYy9jb3JlL3JlbmRlcmVycy93ZWJnbC9zaGFkZXJzL1ByaW1pdGl2ZVNoYWRlci5qcyIsInNyYy9jb3JlL3JlbmRlcmVycy93ZWJnbC9zaGFkZXJzL1NoYWRlci5qcyIsInNyYy9jb3JlL3JlbmRlcmVycy93ZWJnbC9zaGFkZXJzL1RleHR1cmVTaGFkZXIuanMiLCJzcmMvY29yZS9yZW5kZXJlcnMvd2ViZ2wvc2hhZGVycy9fVGV4dHVyZVNoYWRlci5qcyIsInNyYy9jb3JlL3JlbmRlcmVycy93ZWJnbC91dGlscy9PYmplY3RSZW5kZXJlci5qcyIsInNyYy9jb3JlL3JlbmRlcmVycy93ZWJnbC91dGlscy9RdWFkLmpzIiwic3JjL2NvcmUvcmVuZGVyZXJzL3dlYmdsL3V0aWxzL1JlbmRlclRhcmdldC5qcyIsInNyYy9jb3JlL3JlbmRlcmVycy93ZWJnbC91dGlscy9TdGVuY2lsTWFza1N0YWNrLmpzIiwic3JjL2NvcmUvcmVuZGVyZXJzL3dlYmdsL3V0aWxzL21hcFdlYkdMQmxlbmRNb2Rlc1RvUGl4aS5qcyIsInNyYy9jb3JlL3JlbmRlcmVycy93ZWJnbC91dGlscy9tYXBXZWJHTERyYXdNb2Rlc1RvUGl4aS5qcyIsInNyYy9jb3JlL3Nwcml0ZXMvU3ByaXRlLmpzIiwic3JjL2NvcmUvc3ByaXRlcy93ZWJnbC9TcHJpdGVSZW5kZXJlci5qcyIsInNyYy9jb3JlL3Nwcml0ZXMvd2ViZ2wvZ2VuZXJhdGVNdWx0aVRleHR1cmVTaGFkZXIuanMiLCJzcmMvY29yZS90ZXh0L1RleHQuanMiLCJzcmMvY29yZS90ZXh0dXJlcy9CYXNlVGV4dHVyZS5qcyIsInNyYy9jb3JlL3RleHR1cmVzL1JlbmRlclRleHR1cmUuanMiLCJzcmMvY29yZS90ZXh0dXJlcy9UZXh0dXJlLmpzIiwic3JjL2NvcmUvdGV4dHVyZXMvVGV4dHVyZVV2cy5qcyIsInNyYy9jb3JlL3RleHR1cmVzL1ZpZGVvQmFzZVRleHR1cmUuanMiLCJzcmMvY29yZS90aWNrZXIvVGlja2VyLmpzIiwic3JjL2NvcmUvdGlja2VyL2luZGV4LmpzIiwic3JjL2NvcmUvdXRpbHMvY3JlYXRlSW5kaWNlc0ZvclF1YWRzLmpzIiwic3JjL2NvcmUvdXRpbHMvaW5kZXguanMiLCJzcmMvY29yZS91dGlscy9wbHVnaW5UYXJnZXQuanMiLCJzcmMvZGVwcmVjYXRpb24uanMiLCJzcmMvZXh0cmFzL0JpdG1hcFRleHQuanMiLCJzcmMvZXh0cmFzL01vdmllQ2xpcC5qcyIsInNyYy9leHRyYXMvVGlsaW5nU3ByaXRlLmpzIiwic3JjL2V4dHJhcy9jYWNoZUFzQml0bWFwLmpzIiwic3JjL2V4dHJhcy9nZXRDaGlsZEJ5TmFtZS5qcyIsInNyYy9leHRyYXMvZ2V0R2xvYmFsUG9zaXRpb24uanMiLCJzcmMvZXh0cmFzL2luZGV4LmpzIiwic3JjL2ZpbHRlcnMvYXNjaWkvQXNjaWlGaWx0ZXIuanMiLCJzcmMvZmlsdGVycy9ibG9vbS9CbG9vbUZpbHRlci5qcyIsInNyYy9maWx0ZXJzL2JsdXIvQmx1ckRpckZpbHRlci5qcyIsInNyYy9maWx0ZXJzL2JsdXIvQmx1ckZpbHRlci5qcyIsInNyYy9maWx0ZXJzL2JsdXIvQmx1clhGaWx0ZXIuanMiLCJzcmMvZmlsdGVycy9ibHVyL0JsdXJZRmlsdGVyLmpzIiwic3JjL2ZpbHRlcnMvYmx1ci9TbWFydEJsdXJGaWx0ZXIuanMiLCJzcmMvZmlsdGVycy9jb2xvci9Db2xvck1hdHJpeEZpbHRlci5qcyIsInNyYy9maWx0ZXJzL2NvbG9yL0NvbG9yU3RlcEZpbHRlci5qcyIsInNyYy9maWx0ZXJzL2NvbnZvbHV0aW9uL0NvbnZvbHV0aW9uRmlsdGVyLmpzIiwic3JjL2ZpbHRlcnMvY3Jvc3NoYXRjaC9Dcm9zc0hhdGNoRmlsdGVyLmpzIiwic3JjL2ZpbHRlcnMvZGlzcGxhY2VtZW50L0Rpc3BsYWNlbWVudEZpbHRlci5qcyIsInNyYy9maWx0ZXJzL2RvdC9Eb3RTY3JlZW5GaWx0ZXIuanMiLCJzcmMvZmlsdGVycy9kcm9wc2hhZG93L0JsdXJZVGludEZpbHRlci5qcyIsInNyYy9maWx0ZXJzL2Ryb3BzaGFkb3cvRHJvcFNoYWRvd0ZpbHRlci5qcyIsInNyYy9maWx0ZXJzL2dyYXkvR3JheUZpbHRlci5qcyIsInNyYy9maWx0ZXJzL2luZGV4LmpzIiwic3JjL2ZpbHRlcnMvaW52ZXJ0L0ludmVydEZpbHRlci5qcyIsInNyYy9maWx0ZXJzL25vaXNlL05vaXNlRmlsdGVyLmpzIiwic3JjL2ZpbHRlcnMvcGl4ZWxhdGUvUGl4ZWxhdGVGaWx0ZXIuanMiLCJzcmMvZmlsdGVycy9yZ2IvUkdCU3BsaXRGaWx0ZXIuanMiLCJzcmMvZmlsdGVycy9zZXBpYS9TZXBpYUZpbHRlci5qcyIsInNyYy9maWx0ZXJzL3Nob2Nrd2F2ZS9TaG9ja3dhdmVGaWx0ZXIuanMiLCJzcmMvZmlsdGVycy90aWx0c2hpZnQvVGlsdFNoaWZ0QXhpc0ZpbHRlci5qcyIsInNyYy9maWx0ZXJzL3RpbHRzaGlmdC9UaWx0U2hpZnRGaWx0ZXIuanMiLCJzcmMvZmlsdGVycy90aWx0c2hpZnQvVGlsdFNoaWZ0WEZpbHRlci5qcyIsInNyYy9maWx0ZXJzL3RpbHRzaGlmdC9UaWx0U2hpZnRZRmlsdGVyLmpzIiwic3JjL2ZpbHRlcnMvdHdpc3QvVHdpc3RGaWx0ZXIuanMiLCJzcmMvc3JjL2luZGV4LmpzIiwic3JjL2ludGVyYWN0aW9uL0ludGVyYWN0aW9uRGF0YS5qcyIsInNyYy9pbnRlcmFjdGlvbi9JbnRlcmFjdGlvbk1hbmFnZXIuanMiLCJzcmMvaW50ZXJhY3Rpb24vaW5kZXguanMiLCJzcmMvaW50ZXJhY3Rpb24vaW50ZXJhY3RpdmVUYXJnZXQuanMiLCJzcmMvbG9hZGVycy9iaXRtYXBGb250UGFyc2VyLmpzIiwic3JjL2xvYWRlcnMvaW5kZXguanMiLCJzcmMvbG9hZGVycy9sb2FkZXIuanMiLCJzcmMvbG9hZGVycy9zcHJpdGVzaGVldFBhcnNlci5qcyIsInNyYy9sb2FkZXJzL3RleHR1cmVQYXJzZXIuanMiLCJzcmMvbWVzaC9NZXNoLmpzIiwic3JjL21lc2gvUGxhbmUuanMiLCJzcmMvbWVzaC9Sb3BlLmpzIiwic3JjL21lc2gvaW5kZXguanMiLCJzcmMvbWVzaC93ZWJnbC9NZXNoUmVuZGVyZXIuanMiLCJzcmMvbWVzaC93ZWJnbC9NZXNoU2hhZGVyLmpzIiwic3JjL3BvbHlmaWxsL01hdGguc2lnbi5qcyIsInNyYy9wb2x5ZmlsbC9PYmplY3QuYXNzaWduLmpzIiwic3JjL3BvbHlmaWxsL2luZGV4LmpzIiwic3JjL3BvbHlmaWxsL3JlcXVlc3RBbmltYXRpb25GcmFtZS5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQ0FBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDMUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN4Q0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN2TUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2pIQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM5QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdERBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3pEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDMUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbENBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM3QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3RJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDaENBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQzlDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7QUM1dUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7OztBQ2hPQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUMzRkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7O0FDcmhCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNwRkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNyRkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNKQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbnNCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0a0JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdFFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUN2Q0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7OztBQ25tQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDeGNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNoeUJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDaEVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ1pBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNwQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMxREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ25aQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDN05BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3JvQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdm1CQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0b0NBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDM0ZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzlUQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDcEhBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNsREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNyRkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDckVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMxTkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM3REE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDckVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzlIQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM3RkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdGJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNwRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3BCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdEZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzdGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDckdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM1RkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDMUZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM3VEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzFOQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMxZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM1RUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuUUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzFRQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbEdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDaFdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzVEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzFQQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMxSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzNZQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDOUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNyREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQy9GQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMxQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbGNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNqSEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDeEtBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM3V0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdkNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzVEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzdEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzlnQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM3R0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMvRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3hEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN6SkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNqU0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMvQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ25DQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3RCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDem1CQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdldBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDN0RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDM21CQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuYkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDN2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDeGFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDL0VBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDM09BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNqV0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdERBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDL0JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuUkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3BFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzdWQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbFlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzlUQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNsY0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDOVFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNUJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNUJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbkJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdkRBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ25HQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzVHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzNGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNwRkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM1QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdGhCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDL0NBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN6RkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDeEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbEZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdEVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN6RkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQy9MQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDL0NBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDckNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2hEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDckRBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDakRBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3BGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNoREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3RGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMzSEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3BDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNwQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUNuRkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7OztBQzVCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDL0NBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDMTJCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNmQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDL0NBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN2SEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNURBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbEZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNwQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDMWRBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNUhBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbk5BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNqQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ25PQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDM0RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDUkE7QUFDQTtBQUNBO0FBQ0E7OztBQ0hBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6ImdlbmVyYXRlZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzQ29udGVudCI6WyIoZnVuY3Rpb24gZSh0LG4scil7ZnVuY3Rpb24gcyhvLHUpe2lmKCFuW29dKXtpZighdFtvXSl7dmFyIGE9dHlwZW9mIHJlcXVpcmU9PVwiZnVuY3Rpb25cIiYmcmVxdWlyZTtpZighdSYmYSlyZXR1cm4gYShvLCEwKTtpZihpKXJldHVybiBpKG8sITApO3ZhciBmPW5ldyBFcnJvcihcIkNhbm5vdCBmaW5kIG1vZHVsZSAnXCIrbytcIidcIik7dGhyb3cgZi5jb2RlPVwiTU9EVUxFX05PVF9GT1VORFwiLGZ9dmFyIGw9bltvXT17ZXhwb3J0czp7fX07dFtvXVswXS5jYWxsKGwuZXhwb3J0cyxmdW5jdGlvbihlKXt2YXIgbj10W29dWzFdW2VdO3JldHVybiBzKG4/bjplKX0sbCxsLmV4cG9ydHMsZSx0LG4scil9cmV0dXJuIG5bb10uZXhwb3J0c312YXIgaT10eXBlb2YgcmVxdWlyZT09XCJmdW5jdGlvblwiJiZyZXF1aXJlO2Zvcih2YXIgbz0wO288ci5sZW5ndGg7bysrKXMocltvXSk7cmV0dXJuIHN9KSIsIlxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcblxuICAgIGNyZWF0ZUNvbnRleHQ6IFx0XHRcdHJlcXVpcmUoJy4vbGliL2NyZWF0ZUNvbnRleHQnKSxcbiAgICBzZXRWZXJ0ZXhBdHRyaWJBcnJheXM6IFx0cmVxdWlyZSgnLi9saWIvc2V0VmVydGV4QXR0cmliQXJyYXlzJyksXG4gICAgXG4gICAgR0xCdWZmZXI6IFx0XHRcdFx0cmVxdWlyZSgnLi9saWIvR0xCdWZmZXInKSxcbiAgICBHTEZyYW1lYnVmZmVyOiBcdFx0XHRyZXF1aXJlKCcuL2xpYi9HTEZyYW1lYnVmZmVyJyksXG4gICAgR0xTaGFkZXI6IFx0XHRcdFx0cmVxdWlyZSgnLi9saWIvR0xTaGFkZXInKSxcbiAgICBHTFRleHR1cmU6IFx0XHRcdFx0cmVxdWlyZSgnLi9saWIvR0xUZXh0dXJlJyksXG4gICAgXG4gICAgVmVydGV4QXJyYXlPYmplY3Q6IFx0XHRyZXF1aXJlKCcuL2xpYi9WZXJ0ZXhBcnJheU9iamVjdCcpXG5cbn07IiwiXG4vKipcbiAqIEhlbHBlciBjbGFzcyB0byBjcmVhdGUgYSB3ZWJHTCBidWZmZXJcbiAqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gZ2wge1dlYkdMUmVuZGVyaW5nQ29udGV4dH1cbiAqL1xuXG52YXIgRU1QVFlfQVJSQVlfQlVGRkVSID0gbmV3IEFycmF5QnVmZmVyKDApO1xuXG52YXIgQnVmZmVyID0gZnVuY3Rpb24oZ2wsIHR5cGUsIGRhdGEsIGRyYXdUeXBlKVxue1xuXHR0aGlzLmdsID0gZ2w7XG5cblx0dGhpcy5idWZmZXIgPSBnbC5jcmVhdGVCdWZmZXIoKTtcblx0dGhpcy50eXBlID0gdHlwZSB8fCBnbC5BUlJBWV9CVUZGRVI7XG5cdHRoaXMuZHJhd1R5cGUgPSBkcmF3VHlwZSB8fCBnbC5TVEFUSUNfRFJBVztcblx0dGhpcy5kYXRhID0gRU1QVFlfQVJSQVlfQlVGRkVSO1xuXG5cdGlmKGRhdGEpXG5cdHtcblx0XHR0aGlzLnVwbG9hZChkYXRhKTtcblx0fVxufVxuXG5CdWZmZXIucHJvdG90eXBlLnVwbG9hZCA9IGZ1bmN0aW9uKGRhdGEsIG9mZnNldCwgZG9udEJpbmQpXG57XG5cdC8vIHRvZG8gLSBuZWVkZWQ/XG5cdC8vaWYoIWRvbnRCaW5kKVxuXHR0aGlzLmJpbmQoKTtcblxuXHR2YXIgZ2wgPSB0aGlzLmdsO1xuXHRcblx0ZGF0YSA9IGRhdGEgfHwgdGhpcy5kYXRhO1xuXHRvZmZzZXQgPSBvZmZzZXQgfHwgMDtcblxuXHRpZih0aGlzLmRhdGEuYnl0ZUxlbmd0aCA+PSBkYXRhLmJ5dGVMZW5ndGgpXG5cdHtcdFxuXHRcdGdsLmJ1ZmZlclN1YkRhdGEodGhpcy50eXBlLCBvZmZzZXQsIGRhdGEpO1xuXHR9XG5cdGVsc2Vcblx0e1xuXHRcdGdsLmJ1ZmZlckRhdGEodGhpcy50eXBlLCBkYXRhLCB0aGlzLmRyYXdUeXBlKTtcblx0fVxuXG5cdHRoaXMuZGF0YSA9IGRhdGE7XG59XG5cbkJ1ZmZlci5wcm90b3R5cGUuYmluZCA9IGZ1bmN0aW9uKClcbntcblx0dmFyIGdsID0gdGhpcy5nbDtcblx0Z2wuYmluZEJ1ZmZlcih0aGlzLnR5cGUsIHRoaXMuYnVmZmVyKTtcbn1cblxuQnVmZmVyLmNyZWF0ZVZlcnRleEJ1ZmZlciA9IGZ1bmN0aW9uKGdsLCBkYXRhLCBkcmF3VHlwZSlcbntcblx0cmV0dXJuIG5ldyBCdWZmZXIoZ2wsIGdsLkFSUkFZX0JVRkZFUiwgZGF0YSwgZHJhd1R5cGUpO1xufVxuXG5CdWZmZXIuY3JlYXRlSW5kZXhCdWZmZXIgPSBmdW5jdGlvbihnbCwgZGF0YSwgZHJhd1R5cGUpXG57XG5cdHJldHVybiBuZXcgQnVmZmVyKGdsLCBnbC5FTEVNRU5UX0FSUkFZX0JVRkZFUiwgZGF0YSwgZHJhd1R5cGUpO1xufVxuXG5CdWZmZXIuY3JlYXRlID0gZnVuY3Rpb24oZ2wsIHR5cGUsIGRhdGEsIGRyYXdUeXBlKVxue1xuXHRyZXR1cm4gbmV3IEJ1ZmZlcihnbCwgdHlwZSwgZHJhd1R5cGUpO1xufVxuXG4vL1RPRE8gRGVzdHJveS4uXG5cbm1vZHVsZS5leHBvcnRzID0gQnVmZmVyO1xuXG4iLCJcbnZhciBUZXh0dXJlID0gcmVxdWlyZSgnLi9HTFRleHR1cmUnKTtcblxuLyoqXG4gKiBIZWxwZXIgY2xhc3MgdG8gY3JlYXRlIGEgd2ViR0wgRnJhbWVidWZmZXJcbiAqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gZ2wge1dlYkdMUmVuZGVyaW5nQ29udGV4dH1cbiAqL1xuXG52YXIgRnJhbWVidWZmZXIgPSBmdW5jdGlvbihnbCwgd2lkdGgsIGhlaWdodClcbntcblx0dGhpcy5nbCA9IGdsO1xuXG5cdHRoaXMuZnJhbWVidWZmZXIgPSBnbC5jcmVhdGVGcmFtZWJ1ZmZlcigpO1xuXHRcblx0dGhpcy5zdGVuY2lsID0gbnVsbDtcblx0dGhpcy50ZXh0dXJlID0gbnVsbDtcblxuXHR0aGlzLndpZHRoID0gd2lkdGggfHwgMTAwO1xuXHR0aGlzLmhlaWdodCA9IGhlaWdodCB8fCAxMDA7XG59XG5cbkZyYW1lYnVmZmVyLnByb3RvdHlwZS5lbmFibGVUZXh0dXJlID0gZnVuY3Rpb24odGV4dHVyZSlcbntcblx0dmFyIGdsID0gdGhpcy5nbDtcblxuXHR0aGlzLnRleHR1cmUgPSB0ZXh0dXJlIHx8IG5ldyBUZXh0dXJlKGdsKTtcblxuXHR0aGlzLnRleHR1cmUuYmluZCgpO1xuXG5cdC8vZ2wudGV4SW1hZ2UyRChnbC5URVhUVVJFXzJELCAwLCBnbC5SR0JBLCAgdGhpcy53aWR0aCwgdGhpcy5oZWlnaHQsIDAsIGdsLlJHQkEsIGdsLlVOU0lHTkVEX0JZVEUsIG51bGwpO1xuXG5cdHRoaXMuYmluZCgpO1xuXG5cdGdsLmZyYW1lYnVmZmVyVGV4dHVyZTJEKGdsLkZSQU1FQlVGRkVSLCBnbC5DT0xPUl9BVFRBQ0hNRU5UMCwgZ2wuVEVYVFVSRV8yRCwgdGhpcy50ZXh0dXJlLnRleHR1cmUsIDApO1xufVxuXG5GcmFtZWJ1ZmZlci5wcm90b3R5cGUuZW5hYmxlU3RlbmNpbCA9IGZ1bmN0aW9uKClcbntcblx0aWYodGhpcy5zdGVuY2lsKXJldHVybjtcblxuXHR2YXIgZ2wgPSB0aGlzLmdsO1xuXG5cdHRoaXMuc3RlbmNpbCA9IGdsLmNyZWF0ZVJlbmRlcmJ1ZmZlcigpO1xuICAgIFxuICAgIGdsLmJpbmRSZW5kZXJidWZmZXIoZ2wuUkVOREVSQlVGRkVSLCB0aGlzLnN0ZW5jaWwpO1xuICAgIFxuICAgIC8vIFRPRE8uLiB0aGlzIGlzIGRlcHRoIEFORCBzdGVuY2lsP1xuICAgIGdsLmZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyKGdsLkZSQU1FQlVGRkVSLCBnbC5ERVBUSF9TVEVOQ0lMX0FUVEFDSE1FTlQsIGdsLlJFTkRFUkJVRkZFUiwgdGhpcy5zdGVuY2lsKTtcbiAgICBnbC5yZW5kZXJidWZmZXJTdG9yYWdlKGdsLlJFTkRFUkJVRkZFUiwgZ2wuREVQVEhfU1RFTkNJTCwgIHRoaXMud2lkdGggICwgdGhpcy5oZWlnaHQgKTtcbn1cblxuRnJhbWVidWZmZXIucHJvdG90eXBlLmNsZWFyID0gZnVuY3Rpb24oIHIsIGcsIGIsIGEgKVxue1xuXHR0aGlzLmJpbmQoKTtcblxuXHR2YXIgZ2wgPSB0aGlzLmdsO1xuICAgIFxuICAgIGdsLmNsZWFyQ29sb3IociwgZywgYiwgYSk7XG4gICAgZ2wuY2xlYXIoZ2wuQ09MT1JfQlVGRkVSX0JJVCk7XG59XG5cbkZyYW1lYnVmZmVyLnByb3RvdHlwZS5iaW5kID0gZnVuY3Rpb24oKVxue1xuXHR2YXIgZ2wgPSB0aGlzLmdsO1xuXHRnbC5iaW5kRnJhbWVidWZmZXIoZ2wuRlJBTUVCVUZGRVIsIHRoaXMuZnJhbWVidWZmZXIgKTtcdFxufVxuXG5GcmFtZWJ1ZmZlci5wcm90b3R5cGUudW5iaW5kID0gZnVuY3Rpb24oKVxue1xuXHRnbC5iaW5kRnJhbWVidWZmZXIoZ2wuRlJBTUVCVUZGRVIsIG51bGwgKTtcdFxufVxuXG5GcmFtZWJ1ZmZlci5wcm90b3R5cGUucmVzaXplID0gZnVuY3Rpb24od2lkdGgsIGhlaWdodClcbntcblx0dmFyIGdsID0gdGhpcy5nbDtcblxuXHR0aGlzLndpZHRoID0gd2lkdGg7XG5cdHRoaXMuaGVpZ2h0ID0gaGVpZ2h0O1xuXG5cdGlmICggdGhpcy50ZXh0dXJlIClcbiAgICB7XG4gICAgXHR0aGlzLnRleHR1cmUudXBsb2FkRGF0YShudWxsLCB3aWR0aCwgaGVpZ2h0KTtcblx0fVxuXG5cdGlmICggdGhpcy5zdGVuY2lsIClcbiAgICB7XG4gICAgICAgIC8vIHVwZGF0ZSB0aGUgc3RlbmNpbCBidWZmZXIgd2lkdGggYW5kIGhlaWdodFxuICAgICAgICBnbC5iaW5kUmVuZGVyYnVmZmVyKGdsLlJFTkRFUkJVRkZFUiwgdGhpcy5zdGVuY2lsKTtcbiAgICAgICAgZ2wucmVuZGVyYnVmZmVyU3RvcmFnZShnbC5SRU5ERVJCVUZGRVIsIGdsLkRFUFRIX1NURU5DSUwsIHdpZHRoLCBoZWlnaHQpO1xuICAgIH1cbn1cblxuRnJhbWVidWZmZXIucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbigpXG57XG5cdHZhciBnbCA9IHRoaXMuZ2w7XG5cdC8vVE9ET1xuXHRnbC5kZWxldGVGcmFtZWJ1ZmZlcih0aGlzLmZyYW1lYnVmZmVyKTtcbn1cblxuRnJhbWVidWZmZXIuY3JlYXRlUkdCQSA9IGZ1bmN0aW9uKGdsLCB3aWR0aCwgaGVpZ2h0LCBkYXRhKVxue1xuXHR2YXIgdGV4dHVyZSA9IFRleHR1cmUuZnJvbURhdGEoZ2wsIG51bGwsIHdpZHRoLCBoZWlnaHQpO1xuXHR0ZXh0dXJlLmVuYWJsZU5lYXJlc3RTY2FsaW5nKCk7XG4gICAgdGV4dHVyZS5lbmFibGVXcmFwQ2xhbXAoKTtcblxuICAgIC8vbm93IGNyZWF0ZSB0aGUgZnJhbWVidWZmZXIgb2JqZWN0IGFuZCBhdHRhY2ggdGhlIHRleHR1cmUgdG8gaXQuXG4gICAgdmFyIGZibyA9IG5ldyBGcmFtZWJ1ZmZlcihnbCwgd2lkdGgsIGhlaWdodCk7XG4gICAgZmJvLmVuYWJsZVRleHR1cmUodGV4dHVyZSk7XG5cbiAgICByZXR1cm4gZmJvO1xufVxuXG5GcmFtZWJ1ZmZlci5jcmVhdGVGbG9hdDMyID0gZnVuY3Rpb24oZ2wsIHdpZHRoLCBoZWlnaHQsIGRhdGEpXG57XG5cdC8vIGNyZWF0ZSBhIG5ldyB0ZXh0dXJlLi5cbiAgICB2YXIgdGV4dHVyZSA9IG5ldyBUZXh0dXJlLmZyb21EYXRhKGdsLCBkYXRhLCB3aWR0aCwgaGVpZ2h0KTtcbiAgICB0ZXh0dXJlLmVuYWJsZU5lYXJlc3RTY2FsaW5nKCk7XG4gICAgdGV4dHVyZS5lbmFibGVXcmFwQ2xhbXAoKTtcblxuICAgIC8vbm93IGNyZWF0ZSB0aGUgZnJhbWVidWZmZXIgb2JqZWN0IGFuZCBhdHRhY2ggdGhlIHRleHR1cmUgdG8gaXQuXG4gICAgdmFyIGZibyA9IG5ldyBGcmFtZWJ1ZmZlcihnbCwgd2lkdGgsIGhlaWdodCk7XG4gICAgZmJvLmVuYWJsZVRleHR1cmUodGV4dHVyZSlcblxuICAgIHJldHVybiBmYm87XG59XG5cbm1vZHVsZS5leHBvcnRzID0gRnJhbWVidWZmZXI7XG5cbiIsIlxudmFyIGNvbXBpbGVQcm9ncmFtID0gcmVxdWlyZSgnLi9zaGFkZXIvY29tcGlsZVByb2dyYW0nKSxcblx0ZXh0cmFjdEF0dHJpYnV0ZXMgPSByZXF1aXJlKCcuL3NoYWRlci9leHRyYWN0QXR0cmlidXRlcycpLFxuXHRleHRyYWN0VW5pZm9ybXMgPSByZXF1aXJlKCcuL3NoYWRlci9leHRyYWN0VW5pZm9ybXMnKSxcblx0Z2VuZXJhdGVVbmlmb3JtQWNjZXNzT2JqZWN0ID0gcmVxdWlyZSgnLi9zaGFkZXIvZ2VuZXJhdGVVbmlmb3JtQWNjZXNzT2JqZWN0Jyk7XG5cbi8qKlxuICogSGVscGVyIGNsYXNzIHRvIGNyZWF0ZSBhIHdlYkdMIFNoYWRlclxuICpcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqIEBwYXJhbSBnbCB7V2ViR0xSZW5kZXJpbmdDb250ZXh0fVxuICovXG52YXIgU2hhZGVyID0gZnVuY3Rpb24oZ2wsIHZlcnRleFNyYywgZnJhZ21lbnRTcmMpXG57XG5cdHRoaXMuZ2wgPSBnbDtcblxuXHQvLyBGaXJzdCBjb21waWxlIHRoZSBwcm9ncmFtLi5cblx0dGhpcy5wcm9ncmFtID0gY29tcGlsZVByb2dyYW0oZ2wsIHZlcnRleFNyYywgZnJhZ21lbnRTcmMpO1xuXG5cdC8vIG5leHQgZXh0cmFjdCB0aGUgYXR0cmlidXRlc1xuXHR0aGlzLmF0dHJpYnV0ZXMgPSBleHRyYWN0QXR0cmlidXRlcyhnbCwgdGhpcy5wcm9ncmFtKTsgXG5cbiAgICB2YXIgdW5pZm9ybURhdGEgPSBleHRyYWN0VW5pZm9ybXMoZ2wsIHRoaXMucHJvZ3JhbSk7XG5cbiAgICB0aGlzLnVuaWZvcm1zID0gZ2VuZXJhdGVVbmlmb3JtQWNjZXNzT2JqZWN0KCBnbCwgdW5pZm9ybURhdGEgKTtcbn1cblxuU2hhZGVyLnByb3RvdHlwZS5iaW5kID0gZnVuY3Rpb24oKVxue1xuXHR0aGlzLmdsLnVzZVByb2dyYW0odGhpcy5wcm9ncmFtKTtcbn1cblxuU2hhZGVyLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24oKVxue1xuXHR2YXIgZ2wgPSB0aGlzLmdsO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IFNoYWRlcjtcblxuIiwiXG4vKipcbiAqIEhlbHBlciBjbGFzcyB0byBjcmVhdGUgYSB3ZWJHTCBUZXh0dXJlXG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIGdsIHtXZWJHTFJlbmRlcmluZ0NvbnRleHR9IGEgV2ViR0wgY29udGV4dFxuICogQHBhcmFtIHdpZHRoIHtudW1iZXJ9IHRoZSB3aWR0aCBvZiB0aGUgdGV4dHVyZSBcbiAqIEBwYXJhbSBoZWlnaHQge251bWJlcn0gdGhlIGhlaWdodCBvZiB0aGUgdGV4dHVyZSBcbiAqIEBwYXJhbSBmb3JtYXQge251bWJlcn0gdGhlIHBpeGVsIGZvcm1hdCBvZiB0aGUgdGV4dHVyZS4gZGVmYXVsdHMgdG8gZ2wuUkdCQVxuICogQHBhcmFtIHR5cGUge251bWJlcn0gdGhlIGdsIHR5cGUgb2YgdGhlIHRleHR1cmUuIGRlZmF1bHRzIHRvIGdsLlVOU0lHTkVEX0JZVEVcbiAqL1xudmFyIFRleHR1cmUgPSBmdW5jdGlvbihnbCwgd2lkdGgsIGhlaWdodCwgZm9ybWF0LCB0eXBlKVxue1xuXHR0aGlzLmdsID0gZ2w7XG5cblx0dGhpcy50ZXh0dXJlID0gZ2wuY3JlYXRlVGV4dHVyZSgpO1xuXG5cdC8vIHNvbWUgc2V0dGluZ3MuLlxuXHR0aGlzLm1pcG1hcCA9IGZhbHNlO1xuXG5cdHRoaXMucHJlbXVsdGlwbHlBbHBoYSA9IGZhbHNlO1xuXG5cdHRoaXMud2lkdGggPSB3aWR0aCB8fCAwO1xuXHR0aGlzLmhlaWdodCA9IGhlaWdodCB8fCAwO1xuXG5cdHRoaXMuZm9ybWF0ID0gZm9ybWF0IHx8IGdsLlJHQkE7XG5cdHRoaXMudHlwZSA9IHR5cGUgfHwgZ2wuVU5TSUdORURfQllURTtcblxuXG59XG5cbi8qKlxuICogQHBhcmFtIHtQSVhJLmdsQ29yZS5UZXh0dXJlfSBbdmFybmFtZV0gW2Rlc2NyaXB0aW9uXVxuICovXG5UZXh0dXJlLnByb3RvdHlwZS51cGxvYWQgPSBmdW5jdGlvbihzb3VyY2UpXG57XG5cdHRoaXMuYmluZCgpO1xuXG5cdHZhciBnbCA9IHRoaXMuZ2w7XG5cblx0dGhpcy53aWR0aCA9IHNvdXJjZS53aWR0aDtcblx0dGhpcy5oZWlnaHQgPSBzb3VyY2UuaGVpZ2h0O1xuXG5cdGdsLnBpeGVsU3RvcmVpKGdsLlVOUEFDS19QUkVNVUxUSVBMWV9BTFBIQV9XRUJHTCwgdGhpcy5wcmVtdWx0aXBseUFscGhhKTtcbiAgICBnbC50ZXhJbWFnZTJEKGdsLlRFWFRVUkVfMkQsIDAsIHRoaXMuZm9ybWF0LCB0aGlzLmZvcm1hdCwgdGhpcy50eXBlLCBzb3VyY2UpO1xufVxuXG52YXIgRkxPQVRJTkdfUE9JTlRfQVZBSUxBQkxFID0gZmFsc2U7XG5cblRleHR1cmUucHJvdG90eXBlLnVwbG9hZERhdGEgPSBmdW5jdGlvbihkYXRhLCB3aWR0aCwgaGVpZ2h0KVxue1xuXHR0aGlzLmJpbmQoKTtcblx0XG5cdHRoaXMud2lkdGggPSB3aWR0aCB8fCB0aGlzLndpZHRoO1xuXHR0aGlzLmhlaWdodCA9IGhlaWdodCB8fCB0aGlzLmhlaWdodDtcblxuXHRpZihkYXRhIGluc3RhbmNlb2YgRmxvYXQzMkFycmF5KVxuXHR7XG5cdFx0aWYoIUZMT0FUSU5HX1BPSU5UX0FWQUlMQUJMRSlcblx0XHR7XG5cdFx0XHR2YXIgZXh0ID0gZ2wuZ2V0RXh0ZW5zaW9uKFwiT0VTX3RleHR1cmVfZmxvYXRcIik7XG5cdFx0XHRcblx0XHRcdGlmKGV4dClcblx0XHRcdHtcblx0XHRcdFx0RkxPQVRJTkdfUE9JTlRfQVZBSUxBQkxFID0gdHJ1ZTtcblx0XHRcdH1cblx0XHRcdGVsc2Vcblx0XHRcdHtcblx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKCdmbG9hdGluZyBwb2ludCB0ZXh0dXJlcyBub3QgYXZhaWxhYmxlJyk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0dGhpcy50eXBlID0gZ2wuRkxPQVQ7XG5cdH1cblx0ZWxzZVxuXHR7XG5cdFx0Ly8gVE9ETyBzdXBwb3J0IGZvciBvdGhlciB0eXBlc1xuXHRcdHRoaXMudHlwZSA9IGdsLlVOU0lHTkVEX0JZVEU7XG5cdH1cblxuXHQvLyB3aGF0IHR5cGUgb2YgZGF0YT9cblx0Z2wucGl4ZWxTdG9yZWkoZ2wuVU5QQUNLX1BSRU1VTFRJUExZX0FMUEhBX1dFQkdMLCB0aGlzLnByZW11bHRpcGx5QWxwaGEpO1xuXHRnbC50ZXhJbWFnZTJEKGdsLlRFWFRVUkVfMkQsIDAsIHRoaXMuZm9ybWF0LCAgdGhpcy53aWR0aCwgdGhpcy5oZWlnaHQsIDAsIHRoaXMuZm9ybWF0LCB0aGlzLnR5cGUsIGRhdGEgfHwgbnVsbCk7XG5cbn1cblxuVGV4dHVyZS5wcm90b3R5cGUuYmluZCA9IGZ1bmN0aW9uKGxvY2F0aW9uKVxue1xuXHR2YXIgZ2wgPSB0aGlzLmdsO1xuXG5cdGlmKGxvY2F0aW9uICE9PSB1bmRlZmluZWQpXG5cdHtcblx0XHRnbC5hY3RpdmVUZXh0dXJlKGdsLlRFWFRVUkUwICsgbG9jYXRpb24pO1xuXHR9XG5cblx0Z2wuYmluZFRleHR1cmUoZ2wuVEVYVFVSRV8yRCwgdGhpcy50ZXh0dXJlKTtcbn1cblxuVGV4dHVyZS5wcm90b3R5cGUudW5iaW5kID0gZnVuY3Rpb24oKVxue1xuXHR2YXIgZ2wgPSB0aGlzLmdsO1xuXHRnbC5iaW5kVGV4dHVyZShnbC5URVhUVVJFXzJELCBudWxsKTtcbn1cblxuVGV4dHVyZS5wcm90b3R5cGUubWluRmlsdGVyID0gZnVuY3Rpb24oIGxpbmVhciApXG57XG5cdHZhciBnbCA9IHRoaXMuZ2w7XG5cblx0dGhpcy5iaW5kKCk7XG5cblx0aWYodGhpcy5taXBtYXApXG5cdHtcblx0XHRnbC50ZXhQYXJhbWV0ZXJpKGdsLlRFWFRVUkVfMkQsIGdsLlRFWFRVUkVfTUlOX0ZJTFRFUiwgbGluZWFyID8gZ2wuTElORUFSX01JUE1BUF9MSU5FQVIgOiBnbC5ORUFSRVNUX01JUE1BUF9ORUFSRVNUKTtcblx0fVxuXHRlbHNlXG5cdHtcblx0XHRnbC50ZXhQYXJhbWV0ZXJpKGdsLlRFWFRVUkVfMkQsIGdsLlRFWFRVUkVfTUlOX0ZJTFRFUiwgbGluZWFyID8gZ2wuTElORUFSIDogZ2wuTkVBUkVTVCk7XG5cdH1cdFxufVxuXG5UZXh0dXJlLnByb3RvdHlwZS5tYWdGaWx0ZXIgPSBmdW5jdGlvbiggbGluZWFyIClcbntcblx0dmFyIGdsID0gdGhpcy5nbDtcblxuXHR0aGlzLmJpbmQoKTtcblxuXHRnbC50ZXhQYXJhbWV0ZXJpKGdsLlRFWFRVUkVfMkQsIGdsLlRFWFRVUkVfTUFHX0ZJTFRFUiwgbGluZWFyID8gZ2wuTElORUFSIDogZ2wuTkVBUkVTVCk7XG59XG5cblRleHR1cmUucHJvdG90eXBlLmVuYWJsZU1pcG1hcCA9IGZ1bmN0aW9uKClcbntcblx0dGhpcy5iaW5kKCk7XG5cblx0dGhpcy5taXBtYXAgPSB0cnVlO1xuXHRnbC5nZW5lcmF0ZU1pcG1hcChnbC5URVhUVVJFXzJEKTtcbn1cblxuVGV4dHVyZS5wcm90b3R5cGUuZW5hYmxlTGluZWFyU2NhbGluZyA9IGZ1bmN0aW9uKClcbntcblx0dGhpcy5taW5GaWx0ZXIodHJ1ZSk7XG5cdHRoaXMubWFnRmlsdGVyKHRydWUpO1xufVxuXG5UZXh0dXJlLnByb3RvdHlwZS5lbmFibGVOZWFyZXN0U2NhbGluZyA9IGZ1bmN0aW9uKClcbntcblx0dGhpcy5taW5GaWx0ZXIoZmFsc2UpO1xuXHR0aGlzLm1hZ0ZpbHRlcihmYWxzZSk7XG59XG5cblRleHR1cmUucHJvdG90eXBlLmVuYWJsZVdyYXBDbGFtcCA9IGZ1bmN0aW9uKClcbntcblx0dmFyIGdsID0gdGhpcy5nbDtcblxuXHR0aGlzLmJpbmQoKTtcblxuXHRnbC50ZXhQYXJhbWV0ZXJpKGdsLlRFWFRVUkVfMkQsIGdsLlRFWFRVUkVfV1JBUF9TLCBnbC5DTEFNUF9UT19FREdFKTtcbiAgICBnbC50ZXhQYXJhbWV0ZXJpKGdsLlRFWFRVUkVfMkQsIGdsLlRFWFRVUkVfV1JBUF9ULCBnbC5DTEFNUF9UT19FREdFKTtcbn1cblxuVGV4dHVyZS5wcm90b3R5cGUuZW5hYmxlV3JhcFJlcGVhdCA9IGZ1bmN0aW9uKClcbntcblx0dmFyIGdsID0gdGhpcy5nbDtcblxuXHR0aGlzLmJpbmQoKTtcblx0XG5cdGdsLnRleFBhcmFtZXRlcmkoZ2wuVEVYVFVSRV8yRCwgZ2wuVEVYVFVSRV9XUkFQX1MsIGdsLlJFUEVBVCk7XG4gICAgZ2wudGV4UGFyYW1ldGVyaShnbC5URVhUVVJFXzJELCBnbC5URVhUVVJFX1dSQVBfVCwgZ2wuUkVQRUFUKTtcbn1cblxuVGV4dHVyZS5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uKClcbntcblx0dmFyIGdsID0gdGhpcy5nbDtcblx0Ly9UT0RPXG5cdGdsLmRlbGV0ZVRleHR1cmUodGhpcy50ZXh0dXJlKTtcbn1cblxuLy9UZXh0dXJlLlxuVGV4dHVyZS5mcm9tU291cmNlID0gZnVuY3Rpb24oZ2wsIHNvdXJjZSwgcHJlbXVsdGlwbHlBbHBoYSlcbntcblx0dmFyIHRleHR1cmUgPSBuZXcgVGV4dHVyZShnbCk7XG5cdHRleHR1cmUucHJlbXVsdGlwbHlBbHBoYSA9IHByZW11bHRpcGx5QWxwaGEgfHwgZmFsc2U7XG5cdHRleHR1cmUudXBsb2FkKHNvdXJjZSk7XG5cblx0cmV0dXJuIHRleHR1cmU7XG59XG5cblRleHR1cmUuZnJvbURhdGEgPSBmdW5jdGlvbihnbCwgZGF0YSwgd2lkdGgsIGhlaWdodClcbntcblx0Ly9jb25zb2xlLmxvZyhkYXRhLCB3aWR0aCwgaGVpZ2h0KTtcblx0dmFyIHRleHR1cmUgPSBuZXcgVGV4dHVyZShnbCk7XG5cdHRleHR1cmUudXBsb2FkRGF0YShkYXRhLCB3aWR0aCwgaGVpZ2h0KTtcblxuXHRyZXR1cm4gdGV4dHVyZTtcbn1cblxuXG5tb2R1bGUuZXhwb3J0cyA9IFRleHR1cmU7XG5cbiIsIlxuLyoqXG4gKiBHZW5lcmljIE1hc2sgU3RhY2sgZGF0YSBzdHJ1Y3R1cmVcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqL1xuXG4vLyBzdGF0ZSBvYmplY3QvL1xuXG5cbmZ1bmN0aW9uIFZlcnRleEFycmF5T2JqZWN0KGdsKVxue1xuXHRcblx0dGhpcy5uYXRpdmVWYW9FeHRlbnNpb24gPSAoXG4gICAgICBnbC5nZXRFeHRlbnNpb24oJ09FU192ZXJ0ZXhfYXJyYXlfb2JqZWN0JykgfHxcbiAgICAgIGdsLmdldEV4dGVuc2lvbignTU9aX09FU192ZXJ0ZXhfYXJyYXlfb2JqZWN0JykgfHxcbiAgICAgIGdsLmdldEV4dGVuc2lvbignV0VCS0lUX09FU192ZXJ0ZXhfYXJyYXlfb2JqZWN0JylcbiAgICApO1xuXG4vL1x0dGhpcy5uYXRpdmVWYW9FeHRlbnNpb24gPSBudWxsO1xuXG5cdGlmKHRoaXMubmF0aXZlVmFvRXh0ZW5zaW9uKVxuXHR7XG5cdFx0dGhpcy5uYXRpdmVWYW8gPSB0aGlzLm5hdGl2ZVZhb0V4dGVuc2lvbi5jcmVhdGVWZXJ0ZXhBcnJheU9FUygpOyAgXG5cdH1cblxuXHR0aGlzLmdsID0gZ2w7XG5cblx0dGhpcy5hdHRyaWJ1dGVzID0gW107XG5cblx0dGhpcy5pbmRleEJ1ZmZlciA9IG51bGw7XG5cblx0dGhpcy5kaXJ0eSA9IGZhbHNlO1xuXG5cdFxufVxuXG5WZXJ0ZXhBcnJheU9iamVjdC5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBWZXJ0ZXhBcnJheU9iamVjdDtcbm1vZHVsZS5leHBvcnRzID0gVmVydGV4QXJyYXlPYmplY3Q7XG5cblZlcnRleEFycmF5T2JqZWN0LnByb3RvdHlwZS5iaW5kID0gZnVuY3Rpb24oKVxue1xuXHRpZih0aGlzLm5hdGl2ZVZhbylcblx0e1xuXHRcdHRoaXMubmF0aXZlVmFvRXh0ZW5zaW9uLmJpbmRWZXJ0ZXhBcnJheU9FUyh0aGlzLm5hdGl2ZVZhbyk7ICBcblxuXHRcdGlmKHRoaXMuZGlydHkpXG5cdFx0e1xuXHRcdFx0dGhpcy5kaXJ0eSA9IGZhbHNlO1xuXHRcdFx0dGhpcy5hY3RpdmF0ZSgpO1xuXHRcdH1cblx0fVxuXHRlbHNlXG5cdHtcblx0XHR0aGlzLmFjdGl2YXRlKCk7XG5cdH1cbn1cblxuVmVydGV4QXJyYXlPYmplY3QucHJvdG90eXBlLnVuYmluZCA9IGZ1bmN0aW9uKClcbntcblx0aWYodGhpcy5uYXRpdmVWYW8pXG5cdHtcblx0XHR0aGlzLm5hdGl2ZVZhb0V4dGVuc2lvbi5iaW5kVmVydGV4QXJyYXlPRVMobnVsbCk7XG5cdH1cbn1cblxuVmVydGV4QXJyYXlPYmplY3QucHJvdG90eXBlLmFjdGl2YXRlID0gZnVuY3Rpb24oKVxue1xuXHR2YXIgZ2wgPSB0aGlzLmdsO1xuXG5cdGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5hdHRyaWJ1dGVzLmxlbmd0aDsgaSsrKSBcblx0e1xuXHRcdHZhciBhdHRyaWIgPSB0aGlzLmF0dHJpYnV0ZXNbaV07XG5cdFx0YXR0cmliLmJ1ZmZlci5iaW5kKCk7XHRcblxuXHRcdGF0dHJpYi5hdHRyaWJ1dGUucG9pbnRlcihhdHRyaWIudHlwZSwgYXR0cmliLm5vcm1hbGl6ZWQsIGF0dHJpYi5zdHJpZGUsIGF0dHJpYi5zdGFydCk7IFxuXHRcdFxuXHRcdGdsLmVuYWJsZVZlcnRleEF0dHJpYkFycmF5KGF0dHJpYi5hdHRyaWJ1dGUubG9jYXRpb24pO1xuXHR9O1xuXG5cdHRoaXMuaW5kZXhCdWZmZXIuYmluZCgpO1xufVxuXG5WZXJ0ZXhBcnJheU9iamVjdC5wcm90b3R5cGUuYWRkQXR0cmlidXRlID0gZnVuY3Rpb24oYnVmZmVyLCBhdHRyaWJ1dGUsIHR5cGUsIG5vcm1hbGl6ZWQsIHN0cmlkZSwgc3RhcnQpXG57XG4gICAgdGhpcy5hdHRyaWJ1dGVzLnB1c2goe1xuICAgIFx0YnVmZmVyOiBcdGJ1ZmZlcixcbiAgICBcdGF0dHJpYnV0ZTogXHRhdHRyaWJ1dGUsXG5cbiAgICBcdGxvY2F0aW9uOiBcdGF0dHJpYnV0ZS5sb2NhdGlvbixcblx0IFx0dHlwZTogXHRcdHR5cGUgfHwgdGhpcy5nbC5GTE9BVCxcblx0IFx0bm9ybWFsaXplZDogbm9ybWFsaXplZCB8fCBmYWxzZSxcblx0IFx0c3RyaWRlOiBcdHN0cmlkZSB8fCAwLFxuXHQgXHRzdGFydDogXHRcdHN0YXJ0IHx8IDBcblx0fSlcblxuXHR0aGlzLmRpcnR5ID0gdHJ1ZTtcbn1cblxuXG5WZXJ0ZXhBcnJheU9iamVjdC5wcm90b3R5cGUuYWRkSW5kZXggPSBmdW5jdGlvbihidWZmZXIsIG9wdGlvbnMpXG57XG4gICAgdGhpcy5pbmRleEJ1ZmZlciA9IGJ1ZmZlcjtcblxuICAgIHRoaXMuZGlydHkgPSB0cnVlO1xufVxuXG5WZXJ0ZXhBcnJheU9iamVjdC5wcm90b3R5cGUuZHJhdyA9IGZ1bmN0aW9uKHR5cGUsIHNpemUsIHN0YXJ0KVxue1xuXHR2YXIgZ2wgPSB0aGlzLmdsO1xuXHRnbC5kcmF3RWxlbWVudHModHlwZSwgc2l6ZSwgZ2wuVU5TSUdORURfU0hPUlQsIHN0YXJ0KTtcbn1cblxuIiwiXG4vKipcbiAqIEhlbHBlciBjbGFzcyB0byBjcmVhdGUgYSB3ZWJHTCBDb250ZXh0XG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIGdsIHtXZWJHTFJlbmRlcmluZ0NvbnRleHR9XG4gKi9cblxudmFyIENPTlRFWFRfVUlEID0gMDtcblxudmFyIGNyZWF0ZUNvbnRleHQgPSBmdW5jdGlvbihjYW52YXMsIG9wdGlvbnMpXG57XG4gICAgZ2wgPSBjYW52YXMuZ2V0Q29udGV4dCgnd2ViZ2wnLCBvcHRpb25zKSB8fCBcbiAgICBcdCBjYW52YXMuZ2V0Q29udGV4dCgnZXhwZXJpbWVudGFsLXdlYmdsJywgb3B0aW9ucyk7XG5cbiAgICBpZiAoIWdsKVxuICAgIHtcbiAgICAgICAgLy8gZmFpbCwgbm90IGFibGUgdG8gZ2V0IGEgY29udGV4dFxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RoaXMgYnJvd3NlciBkb2VzIG5vdCBzdXBwb3J0IHdlYkdMLiBUcnkgdXNpbmcgdGhlIGNhbnZhcyByZW5kZXJlcicpO1xuICAgIH1cblxuICAgIC8vIG1pZ2h0IHdhbnQgdG8gcGhhc2UgdGhpcyBvdXQ/XG4gICAgZ2wuaWQgPSBDT05URVhUX1VJRCsrO1xuXG4gICAgcmV0dXJuIGdsO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGNyZWF0ZUNvbnRleHQ7XG5cbiIsIi8qKlxuICogR2VuZXJpYyBNYXNrIFN0YWNrIGRhdGEgc3RydWN0dXJlXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKi9cblxudmFyIEdMX01BUCA9IHt9O1xuXG5cbnZhciBzZXRWZXJ0ZXhBdHRyaWJBcnJheXMgPSBmdW5jdGlvbiAoZ2wsIGF0dHJpYnMpXG57XHRcbiAgIC8vIGNvbnNvbGUubG9nKGdsLmlkKVxuICAgIHZhciBkYXRhID0gR0xfTUFQW2dsLmlkXTtcblxuICAgIGlmKCFkYXRhKVxuICAgIHtcblx0ICAgdmFyIG1heEF0dHJpYnMgPSBnbC5nZXRQYXJhbWV0ZXIoZ2wuTUFYX1ZFUlRFWF9BVFRSSUJTKTtcblx0XHRkYXRhID0gR0xfTUFQW2dsLmlkXSA9IHt0ZW1wQXR0cmliU3RhdGU6bmV3IEFycmF5KG1heEF0dHJpYnMpXG5cdFx0XHRcdCBcdCBcdFx0ICAgLGF0dHJpYlN0YXRlOm5ldyBBcnJheShtYXhBdHRyaWJzKX07XG5cdH1cblx0XG4gICAgdmFyIGksXG4gICAgXHR0ZW1wQXR0cmliU3RhdGUgPSBkYXRhLnRlbXBBdHRyaWJTdGF0ZSxcbiAgICBcdGF0dHJpYlN0YXRlID0gZGF0YS5hdHRyaWJTdGF0ZTtcblxuICAgIGZvciAoaSA9IDA7IGkgPCB0ZW1wQXR0cmliU3RhdGUubGVuZ3RoOyBpKyspXG4gICAge1xuICAgICAgICB0ZW1wQXR0cmliU3RhdGVbaV0gPSBmYWxzZTtcbiAgICB9XG5cbiAgICAvLyBzZXQgdGhlIG5ldyBhdHRyaWJzXG4gICAgZm9yIChpIGluIGF0dHJpYnMpXG4gICAge1xuICAgICAgICB0ZW1wQXR0cmliU3RhdGVbYXR0cmlic1tpXS5sb2NhdGlvbl0gPSB0cnVlO1xuICAgIH1cblxuICAgIGZvciAoaSA9IDE7IGkgPCBhdHRyaWJTdGF0ZS5sZW5ndGg7IGkrKylcbiAgICB7XG4gICAgICAgIGlmIChhdHRyaWJTdGF0ZVtpXSAhPT0gdGVtcEF0dHJpYlN0YXRlW2ldKVxuICAgICAgICB7XG4gICAgICAgICAgICBhdHRyaWJTdGF0ZVtpXSA9IHRlbXBBdHRyaWJTdGF0ZVtpXTtcblxuICAgICAgICAgICAgaWYgKGRhdGEuYXR0cmliU3RhdGVbaV0pXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgZ2wuZW5hYmxlVmVydGV4QXR0cmliQXJyYXkoaSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgZ2wuZGlzYWJsZVZlcnRleEF0dHJpYkFycmF5KGkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxufTtcblxubW9kdWxlLmV4cG9ydHMgPSBzZXRWZXJ0ZXhBdHRyaWJBcnJheXM7IiwiXG5cblxuXG5jb21waWxlUHJvZ3JhbSA9IGZ1bmN0aW9uKGdsLCB2ZXJ0ZXhTcmMsIGZyYWdtZW50U3JjKVxue1xuICAgIHZhciBnbFZlcnRTaGFkZXIgPSBjb21waWxlU2hhZGVyKGdsLCBnbC5WRVJURVhfU0hBREVSLCB2ZXJ0ZXhTcmMpO1xuICAgIHZhciBnbEZyYWdTaGFkZXIgPSBjb21waWxlU2hhZGVyKGdsLCBnbC5GUkFHTUVOVF9TSEFERVIsIGZyYWdtZW50U3JjKTtcblxuICAgIHZhciBwcm9ncmFtID0gZ2wuY3JlYXRlUHJvZ3JhbSgpO1xuXG4gICAgZ2wuYXR0YWNoU2hhZGVyKHByb2dyYW0sIGdsVmVydFNoYWRlcik7XG4gICAgZ2wuYXR0YWNoU2hhZGVyKHByb2dyYW0sIGdsRnJhZ1NoYWRlcik7XG4gICAgZ2wubGlua1Byb2dyYW0ocHJvZ3JhbSk7XG5cbiAgICAvLyBpZiBsaW5raW5nIGZhaWxzLCB0aGVuIGxvZyBhbmQgY2xlYW51cFxuICAgIGlmICghZ2wuZ2V0UHJvZ3JhbVBhcmFtZXRlcihwcm9ncmFtLCBnbC5MSU5LX1NUQVRVUykpXG4gICAge1xuICAgICAgICBjb25zb2xlLmVycm9yKCdQaXhpLmpzIEVycm9yOiBDb3VsZCBub3QgaW5pdGlhbGl6ZSBzaGFkZXIuJyk7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ2dsLlZBTElEQVRFX1NUQVRVUycsIGdsLmdldFByb2dyYW1QYXJhbWV0ZXIocHJvZ3JhbSwgZ2wuVkFMSURBVEVfU1RBVFVTKSk7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ2dsLmdldEVycm9yKCknLCBnbC5nZXRFcnJvcigpKTtcblxuICAgICAgICAvLyBpZiB0aGVyZSBpcyBhIHByb2dyYW0gaW5mbyBsb2csIGxvZyBpdFxuICAgICAgICBpZiAoZ2wuZ2V0UHJvZ3JhbUluZm9Mb2cocHJvZ3JhbSkgIT09ICcnKVxuICAgICAgICB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ1BpeGkuanMgV2FybmluZzogZ2wuZ2V0UHJvZ3JhbUluZm9Mb2coKScsIGdsLmdldFByb2dyYW1JbmZvTG9nKHByb2dyYW0pKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGdsLmRlbGV0ZVByb2dyYW0ocHJvZ3JhbSk7XG4gICAgICAgIHByb2dyYW0gPSBudWxsO1xuICAgIH1cblxuICAgIC8vIGNsZWFuIHVwIHNvbWUgc2hhZGVyc1xuICAgIGdsLmRlbGV0ZVNoYWRlcihnbFZlcnRTaGFkZXIpO1xuICAgIGdsLmRlbGV0ZVNoYWRlcihnbEZyYWdTaGFkZXIpO1xuXG4gICAgcmV0dXJuIHByb2dyYW07XG59XG5cbnZhciBjb21waWxlU2hhZGVyID0gZnVuY3Rpb24gKGdsLCB0eXBlLCBzcmMpXG57XG4gICAgdmFyIHNoYWRlciA9IGdsLmNyZWF0ZVNoYWRlcih0eXBlKTtcblxuICAgIGdsLnNoYWRlclNvdXJjZShzaGFkZXIsIHNyYyk7XG4gICAgZ2wuY29tcGlsZVNoYWRlcihzaGFkZXIpO1xuXG4gICAgaWYgKCFnbC5nZXRTaGFkZXJQYXJhbWV0ZXIoc2hhZGVyLCBnbC5DT01QSUxFX1NUQVRVUykpXG4gICAge1xuICAgICAgICBjb25zb2xlLmxvZyhnbC5nZXRTaGFkZXJJbmZvTG9nKHNoYWRlcikpO1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICByZXR1cm4gc2hhZGVyO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBjb21waWxlUHJvZ3JhbTtcblxuIiwiXG5cbnZhciBkZWZhdWx0VmFsdWUgPSBmdW5jdGlvbih0eXBlLCBzaXplKSBcbntcbiAgICBzd2l0Y2ggKHR5cGUpXG4gICAge1xuICAgICAgICBjYXNlICdmbG9hdCc6XG4gICAgICAgICAgICByZXR1cm4gMDtcblxuICAgICAgICBjYXNlICd2ZWMyJzogXG4gICAgICAgICAgICByZXR1cm4gbmV3IEZsb2F0MzJBcnJheSgyICogc2l6ZSk7XG5cbiAgICAgICAgY2FzZSAndmVjMyc6XG4gICAgICAgICAgICByZXR1cm4gbmV3IEZsb2F0MzJBcnJheSgzICogc2l6ZSk7XG5cbiAgICAgICAgY2FzZSAndmVjNCc6ICAgICBcbiAgICAgICAgICAgIHJldHVybiBuZXcgRmxvYXQzMkFycmF5KDQgKiBzaXplKTtcbiAgICAgICAgICAgIFxuICAgICAgICBjYXNlICdpbnQnOlxuICAgICAgICBjYXNlICdzYW1wbGVyMkQnOlxuICAgICAgICAgICAgcmV0dXJuIDA7XG5cbiAgICAgICAgY2FzZSAnaXZlYzInOiAgIFxuICAgICAgICAgICAgcmV0dXJuIG5ldyBJbnQzMkFycmF5KDIgKiBzaXplKTtcblxuICAgICAgICBjYXNlICdpdmVjMyc6XG4gICAgICAgICAgICByZXR1cm4gbmV3IEludDMyQXJyYXkoMyAqIHNpemUpO1xuXG4gICAgICAgIGNhc2UgJ2l2ZWM0JzogXG4gICAgICAgICAgICByZXR1cm4gbmV3IEludDMyQXJyYXkoNCAqIHNpemUpO1xuXG4gICAgICAgIGNhc2UgJ2Jvb2wnOiAgICAgXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG5cbiAgICAgICAgY2FzZSAnYnZlYzInOlxuXG4gICAgICAgICAgICByZXR1cm4gYm9vbGVhbkFycmF5KCAyICogc2l6ZSk7XG5cbiAgICAgICAgY2FzZSAnYnZlYzMnOlxuICAgICAgICAgICAgcmV0dXJuIGJvb2xlYW5BcnJheSgzICogc2l6ZSk7XG5cbiAgICAgICAgY2FzZSAnYnZlYzQnOlxuICAgICAgICAgICAgcmV0dXJuIGJvb2xlYW5BcnJheSg0ICogc2l6ZSk7XG5cbiAgICAgICAgY2FzZSAnbWF0Mic6XG4gICAgICAgICAgICByZXR1cm4gbmV3IEZsb2F0MzJBcnJheShbMSwgMFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLDAsIDFdKTtcblxuICAgICAgICBjYXNlICdtYXQzJzogXG4gICAgICAgICAgICByZXR1cm4gbmV3IEZsb2F0MzJBcnJheShbMSwgMCwgMFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLDAsIDEsIDBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwwLCAwLCAxXSk7XG5cbiAgICAgICAgY2FzZSAnbWF0NCc6XG4gICAgICAgICAgICByZXR1cm4gbmV3IEZsb2F0MzJBcnJheShbMSwgMCwgMCwgMFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLDAsIDEsIDAsIDBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwwLCAwLCAxLCAwXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsMCwgMCwgMCwgMV0pO1xuICAgIH1cbn1cblxudmFyIGJvb2xlYW5BcnJheSA9IGZ1bmN0aW9uKHNpemUpXG57XG4gICAgdmFyIGFycmF5ID0gbmV3IEFycmF5KHNpemUpO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcnJheS5sZW5ndGg7IGkrKykgXG4gICAge1xuICAgICAgICBhcnJheVtpXSA9IGZhbHNlO1xuICAgIH07XG5cbiAgICByZXR1cm4gYXJyYXk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZGVmYXVsdFZhbHVlO1xuIiwiXG52YXIgbWFwVHlwZSA9IHJlcXVpcmUoJy4vbWFwVHlwZScpO1xudmFyIG1hcFNpemUgPSByZXF1aXJlKCcuL21hcFNpemUnKTtcblxudmFyIGV4dHJhY3RBdHRyaWJ1dGVzID0gZnVuY3Rpb24oZ2wsIHByb2dyYW0pXG57XG4gICAgdmFyIGF0dHJpYnV0ZXMgPSB7fTtcblxuICAgIHZhciB0b3RhbEF0dHJpYnV0ZXMgPSBnbC5nZXRQcm9ncmFtUGFyYW1ldGVyKHByb2dyYW0sIGdsLkFDVElWRV9BVFRSSUJVVEVTKVxuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0b3RhbEF0dHJpYnV0ZXM7IGkrKykgXG4gICAge1xuICAgICAgICB2YXIgYXR0cmliRGF0YSA9IGdsLmdldEFjdGl2ZUF0dHJpYihwcm9ncmFtLCBpKTtcbiAgICAgICAgdmFyIHR5cGUgPSBtYXBUeXBlKGdsLCBhdHRyaWJEYXRhLnR5cGUpO1xuXG4gICAgICAgIGF0dHJpYnV0ZXNbYXR0cmliRGF0YS5uYW1lXSA9IHtcbiAgICAgICAgICAgIHR5cGU6dHlwZSxcbiAgICAgICAgICAgIHNpemU6bWFwU2l6ZSh0eXBlKSxcbiAgICAgICAgICAgIGxvY2F0aW9uOmdsLmdldEF0dHJpYkxvY2F0aW9uKHByb2dyYW0sIGF0dHJpYkRhdGEubmFtZSksXG4gICAgICAgICAgICAvL1RPRE8gLSBtYWtlIGFuIGF0dHJpYnV0ZSBvYmplY3RcbiAgICAgICAgICAgIHBvaW50ZXI6ZnVuY3Rpb24odHlwZSwgbm9ybWFsaXplZCwgc3RyaWRlLCBzdGFydCl7XG5cbiAgICAgICAgICAgICAvLyAgIGNvbnNvbGUubG9nKHRoaXMubG9jYXRpb24pXG4gICAgICAgICAgICAgICAgZ2wudmVydGV4QXR0cmliUG9pbnRlcih0aGlzLmxvY2F0aW9uLHRoaXMuc2l6ZSwgdHlwZSB8fCBnbC5GTE9BVCwgbm9ybWFsaXplZCB8fCBmYWxzZSwgc3RyaWRlIHx8IDAsIHN0YXJ0IHx8IDApOyBcblxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfTtcblxuICAgIHJldHVybiBhdHRyaWJ1dGVzOyAgXG59XG5cbm1vZHVsZS5leHBvcnRzID0gZXh0cmFjdEF0dHJpYnV0ZXM7XG5cbiIsInZhciBtYXBUeXBlID0gcmVxdWlyZSgnLi9tYXBUeXBlJyk7XG52YXIgZGVmYXVsdFZhbHVlID0gcmVxdWlyZSgnLi9kZWZhdWx0VmFsdWUnKTtcblxuXG52YXIgZXh0cmFjdFVuaWZvcm1zID0gZnVuY3Rpb24oZ2wsIHByb2dyYW0pXG57XG5cdHZhciB1bmlmb3JtcyA9IHt9O1xuXHRcbiAgICB2YXIgdG90YWxVbmlmb3JtcyA9IGdsLmdldFByb2dyYW1QYXJhbWV0ZXIocHJvZ3JhbSwgZ2wuQUNUSVZFX1VOSUZPUk1TKVxuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0b3RhbFVuaWZvcm1zOyBpKyspIFxuICAgIHtcbiAgICBcdHZhciB1bmlmb3JtRGF0YSA9IGdsLmdldEFjdGl2ZVVuaWZvcm0ocHJvZ3JhbSwgaSk7XG4gICAgXHR2YXIgbmFtZSA9IHVuaWZvcm1EYXRhLm5hbWUucmVwbGFjZSgvXFxbLio/XFxdLywgXCJcIik7XG4gICAgICAgIHZhciB0eXBlID0gbWFwVHlwZShnbCwgdW5pZm9ybURhdGEudHlwZSApO1xuXG4gICAgXHR1bmlmb3Jtc1tuYW1lXSA9IHtcbiAgICBcdFx0dHlwZTp0eXBlLFxuICAgIFx0XHRzaXplOnVuaWZvcm1EYXRhLnNpemUsXG4gICAgXHRcdGxvY2F0aW9uOmdsLmdldFVuaWZvcm1Mb2NhdGlvbihwcm9ncmFtLCBuYW1lKSxcbiAgICBcdFx0dmFsdWU6ZGVmYXVsdFZhbHVlKHR5cGUsIHVuaWZvcm1EYXRhLnNpemUpXG4gICAgXHR9XG4gICAgfTtcblx0XG5cdHJldHVybiB1bmlmb3JtcztcdFxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGV4dHJhY3RVbmlmb3JtcztcblxuIiwiXG52YXIgZ2VuZXJhdGVVbmlmb3JtQWNjZXNzT2JqZWN0ID0gZnVuY3Rpb24oZ2wsIHVuaWZvcm1EYXRhKVxue1xuICAgIC8vIHRoaXMgaXMgdGhlIG9iamVjdCB3ZSB3aWxsIGJlIHNlbmRpbmcgYmFjay5cbiAgICAvLyBhbiBvYmplY3QgaGllcmFjaHkgd2lsbCBiZSBjcmVhdGVkIGZvciBzdHJ1Y3RzXG4gICAgdmFyIHVuaWZvcm1zID0ge2RhdGE6e319O1xuXG4gICAgdW5pZm9ybXMuZ2wgPSBnbDtcbiAgICBcbiAgICB2YXIgdW5pZm9ybUtleXM9IE9iamVjdC5rZXlzKHVuaWZvcm1EYXRhKTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdW5pZm9ybUtleXMubGVuZ3RoOyBpKyspIFxuICAgIHtcbiAgICAgICAgdmFyIGZ1bGxOYW1lID0gdW5pZm9ybUtleXNbaV1cblxuICAgICAgICB2YXIgbmFtZVRva2VucyA9IGZ1bGxOYW1lLnNwbGl0KCcuJyk7XG4gICAgICAgIHZhciBuYW1lID0gbmFtZVRva2Vuc1tuYW1lVG9rZW5zLmxlbmd0aCAtIDFdO1xuXG4gICAgICAgIHZhciB1bmlmb3JtR3JvdXAgPSBnZXRVbmlmb3JtR3JvdXAobmFtZVRva2VucywgdW5pZm9ybXMpO1xuXG4gICAgICAgIHZhciB1bmlmb3JtID0gIHVuaWZvcm1EYXRhW2Z1bGxOYW1lXTtcbiAgICAgICAgdW5pZm9ybUdyb3VwLmRhdGFbbmFtZV0gPSB1bmlmb3JtO1xuXG4gICAgICAgIHVuaWZvcm1Hcm91cC5nbCA9IGdsO1xuXG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh1bmlmb3JtR3JvdXAsIG5hbWUsIHtcbiAgICAgICAgICAgIGdldDogZ2VuZXJhdGVHZXR0ZXIobmFtZSksXG4gICAgICAgICAgICBzZXQ6IGdlbmVyYXRlU2V0dGVyKG5hbWUsIHVuaWZvcm0pXG4gICAgICAgIH0pXG4gICAgfTtcblxuICAgIHJldHVybiB1bmlmb3Jtcztcbn1cblxudmFyIGdlbmVyYXRlR2V0dGVyID0gZnVuY3Rpb24obmFtZSlcbntcblx0dmFyIHRlbXBsYXRlID0gZ2V0dGVyVGVtcGxhdGUucmVwbGFjZSgnJSUnLCBuYW1lKTtcblx0cmV0dXJuIG5ldyBGdW5jdGlvbih0ZW1wbGF0ZSk7XG59XG5cbnZhciBnZW5lcmF0ZVNldHRlciA9IGZ1bmN0aW9uKG5hbWUsIHVuaWZvcm0pXG57XG4gICAgdmFyIHRlbXBsYXRlID0gc2V0dGVyVGVtcGxhdGUucmVwbGFjZSgvJSUvZywgbmFtZSk7XG4gICAgdmFyIHNldFRlbXBsYXRlXG4gICAgXG4gICAgaWYodW5pZm9ybS5zaXplID09PSAxKVxuICAgIHtcbiAgICAgICAgc2V0VGVtcGxhdGUgPSBHTFNMX1RPX1NJTkdMRV9TRVRURVJTW3VuaWZvcm0udHlwZV07XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHNldFRlbXBsYXRlID0gR0xTTF9UT19BUlJBWV9TRVRURVJTW3VuaWZvcm0udHlwZV07XG4gICAgfVxuXG4gICAgaWYoc2V0VGVtcGxhdGUpXG4gICAge1xuICAgICAgICB0ZW1wbGF0ZSArPSBcIlxcbnRoaXMuZ2wuXCIgKyBzZXRUZW1wbGF0ZSArIFwiO1wiO1xuICAgIH1cblxuICBcdHJldHVybiBuZXcgRnVuY3Rpb24oJ3ZhbHVlJywgdGVtcGxhdGUpO1xufVxuXG52YXIgZ2V0VW5pZm9ybUdyb3VwID0gZnVuY3Rpb24obmFtZVRva2VucywgdW5pZm9ybSlcbntcbiAgICB2YXIgY3VyID0gdW5pZm9ybTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbmFtZVRva2Vucy5sZW5ndGggLSAxOyBpKyspIFxuICAgIHtcbiAgICAgICAgdmFyIG8gPSBjdXJbbmFtZVRva2Vuc1tpXV0gfHwge2RhdGE6e319O1xuICAgICAgICBjdXJbbmFtZVRva2Vuc1tpXV0gPSBvO1xuICAgICAgICBjdXIgPSBvO1xuICAgIH07XG5cbiAgICByZXR1cm4gY3VyXG59XG5cbnZhciBnZXR0ZXJUZW1wbGF0ZSA9IFtcbiAgICAncmV0dXJuIHRoaXMuZGF0YS4lJS52YWx1ZTsnLFxuXS5qb2luKCdcXG4nKTtcblxudmFyIHNldHRlclRlbXBsYXRlID0gW1xuICAgICd0aGlzLmRhdGEuJSUudmFsdWUgPSB2YWx1ZTsnLFxuICAgICd2YXIgbG9jYXRpb24gPSB0aGlzLmRhdGEuJSUubG9jYXRpb247J1xuXS5qb2luKCdcXG4nKTtcblxuXG52YXIgR0xTTF9UT19TSU5HTEVfU0VUVEVSUyA9IHtcblxuICAgICdmbG9hdCc6ICAgICd1bmlmb3JtMWYobG9jYXRpb24sIHZhbHVlKScsXG5cbiAgICAndmVjMic6ICAgICAndW5pZm9ybTJmKGxvY2F0aW9uLCB2YWx1ZVswXSwgdmFsdWVbMV0pJyxcbiAgICAndmVjMyc6ICAgICAndW5pZm9ybTNmKGxvY2F0aW9uLCB2YWx1ZVswXSwgdmFsdWVbMV0sIHZhbHVlWzJdKScsXG4gICAgJ3ZlYzQnOiAgICAgJ3VuaWZvcm00Zihsb2NhdGlvbiwgdmFsdWVbMF0sIHZhbHVlWzFdLCB2YWx1ZVsyXSwgdmFsdWVbM10pJyxcbiAgICBcdFxuICAgICdpbnQnOiAgICAgICd1bmlmb3JtMWkobG9jYXRpb24sIHZhbHVlKScsXG4gICAgJ2l2ZWMyJzogICAgJ3VuaWZvcm0yaShsb2NhdGlvbiwgdmFsdWVbMF0sIHZhbHVlWzFdKScsXG4gICAgJ2l2ZWMzJzogICAgJ3VuaWZvcm0zaShsb2NhdGlvbiwgdmFsdWVbMF0sIHZhbHVlWzFdLCB2YWx1ZVsyXSknLFxuICAgICdpdmVjNCc6ICAgICd1bmlmb3JtNGkobG9jYXRpb24sIHZhbHVlWzBdLCB2YWx1ZVsxXSwgdmFsdWVbMl0sIHZhbHVlWzNdKScsXG5cbiAgICAnYm9vbCc6ICAgICAndW5pZm9ybTFpKGxvY2F0aW9uLCB2YWx1ZSknLFxuICAgICdidmVjMic6ICAgICd1bmlmb3JtMmkobG9jYXRpb24sIHZhbHVlWzBdLCB2YWx1ZVsxXSknLFxuICAgICdidmVjMyc6ICAgICd1bmlmb3JtM2kobG9jYXRpb24sIHZhbHVlWzBdLCB2YWx1ZVsxXSwgdmFsdWVbMl0pJyxcbiAgICAnYnZlYzQnOiAgICAndW5pZm9ybTRpKGxvY2F0aW9uLCB2YWx1ZVswXSwgdmFsdWVbMV0sIHZhbHVlWzJdLCB2YWx1ZVszXSknLFxuXG4gICAgJ21hdDInOiAgICAgJ3VuaWZvcm1NYXRyaXgyZnYobG9jYXRpb24sIGZhbHNlLCB2YWx1ZSknLFxuICAgICdtYXQzJzogICAgICd1bmlmb3JtTWF0cml4M2Z2KGxvY2F0aW9uLCBmYWxzZSwgdmFsdWUpJyxcbiAgICAnbWF0NCc6ICAgICAndW5pZm9ybU1hdHJpeDRmdihsb2NhdGlvbiwgZmFsc2UsIHZhbHVlKScsXG5cbiAgICAnc2FtcGxlcjJEJzondW5pZm9ybTFpKGxvY2F0aW9uLCB2YWx1ZSknXG59XG5cbnZhciBHTFNMX1RPX0FSUkFZX1NFVFRFUlMgPSB7XG5cbiAgICAnZmxvYXQnOiAgICAndW5pZm9ybTFmdihsb2NhdGlvbiwgdmFsdWUpJyxcblxuICAgICd2ZWMyJzogICAgICd1bmlmb3JtMmZ2KGxvY2F0aW9uLCB2YWx1ZSknLFxuICAgICd2ZWMzJzogICAgICd1bmlmb3JtM2Z2KGxvY2F0aW9uLCB2YWx1ZSknLFxuICAgICd2ZWM0JzogICAgICd1bmlmb3JtNGZ2KGxvY2F0aW9uLCB2YWx1ZSknLFxuICAgIFx0XG4gICAgJ2ludCc6ICAgICAgJ3VuaWZvcm0xaXYobG9jYXRpb24sIHZhbHVlKScsXG4gICAgJ2l2ZWMyJzogICAgJ3VuaWZvcm0yaXYobG9jYXRpb24sIHZhbHVlKScsXG4gICAgJ2l2ZWMzJzogICAgJ3VuaWZvcm0zaXYobG9jYXRpb24sIHZhbHVlKScsXG4gICAgJ2l2ZWM0JzogICAgJ3VuaWZvcm00aXYobG9jYXRpb24sIHZhbHVlKScsXG5cbiAgICAnYm9vbCc6ICAgICAndW5pZm9ybTFpdihsb2NhdGlvbiwgdmFsdWUpJyxcbiAgICAnYnZlYzInOiAgICAndW5pZm9ybTJpdihsb2NhdGlvbiwgdmFsdWUpJyxcbiAgICAnYnZlYzMnOiAgICAndW5pZm9ybTNpdihsb2NhdGlvbiwgdmFsdWUpJyxcbiAgICAnYnZlYzQnOiAgICAndW5pZm9ybTRpdihsb2NhdGlvbiwgdmFsdWUpJyxcbiAgIFxuICAgICdzYW1wbGVyMkQnOid1bmlmb3JtMWl2KGxvY2F0aW9uLCB2YWx1ZSknXG59XG5cbm1vZHVsZS5leHBvcnRzID0gZ2VuZXJhdGVVbmlmb3JtQWNjZXNzT2JqZWN0O1xuXG4iLCJcblxudmFyIG1hcFNpemUgPSBmdW5jdGlvbih0eXBlKSBcbnsgXG4gICAgcmV0dXJuIEdMU0xfVE9fU0laRVt0eXBlXTtcbn1cblxuXG52YXIgR0xTTF9UT19TSVpFID0ge1xuICAgICdmbG9hdCc6ICAgIDEsXG4gICAgJ3ZlYzInOiAgICAgMixcbiAgICAndmVjMyc6ICAgICAzLFxuICAgICd2ZWM0JzogICAgIDQsXG5cbiAgICAnaW50JzogICAgICAxLFxuICAgICdpdmVjMic6ICAgIDIsXG4gICAgJ2l2ZWMzJzogICAgMyxcbiAgICAnaXZlYzQnOiAgICA0LFxuXG4gICAgJ2Jvb2wnOiAgICAgMSxcbiAgICAnYnZlYzInOiAgICAyLFxuICAgICdidmVjMyc6ICAgIDMsXG4gICAgJ2J2ZWM0JzogICAgNCxcblxuICAgICdtYXQyJzogICAgIDQsXG4gICAgJ21hdDMnOiAgICAgOSxcbiAgICAnbWF0NCc6ICAgICAxNixcblxuICAgICdzYW1wbGVyMkQnOiAgMVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IG1hcFNpemU7XG4iLCJcblxudmFyIG1hcFNpemUgPSBmdW5jdGlvbihnbCwgdHlwZSkgXG57XG4gICAgaWYoIUdMX1RBQkxFKSBcbiAgICB7XG4gICAgICAgIHZhciB0eXBlTmFtZXMgPSBPYmplY3Qua2V5cyhHTF9UT19HTFNMX1RZUEVTKTtcblxuICAgICAgICBHTF9UQUJMRSA9IHt9O1xuXG4gICAgICAgIGZvcih2YXIgaSA9IDA7IGkgPCB0eXBlTmFtZXMubGVuZ3RoOyArK2kpIFxuICAgICAgICB7XG4gICAgICAgICAgICB2YXIgdG4gPSB0eXBlTmFtZXNbaV07XG4gICAgICAgICAgICBHTF9UQUJMRVsgZ2xbdG5dIF0gPSBHTF9UT19HTFNMX1RZUEVTW3RuXTtcbiAgICAgICAgfVxuICAgIH1cblxuICByZXR1cm4gR0xfVEFCTEVbdHlwZV07XG59XG5cbnZhciBHTF9UQUJMRSA9IG51bGw7XG5cbnZhciBHTF9UT19HTFNMX1RZUEVTID0ge1xuICAnRkxPQVQnOiAgICAgICAnZmxvYXQnLFxuICAnRkxPQVRfVkVDMic6ICAndmVjMicsXG4gICdGTE9BVF9WRUMzJzogICd2ZWMzJyxcbiAgJ0ZMT0FUX1ZFQzQnOiAgJ3ZlYzQnLFxuXG4gICdJTlQnOiAgICAgICAgICdpbnQnLFxuICAnSU5UX1ZFQzInOiAgICAnaXZlYzInLFxuICAnSU5UX1ZFQzMnOiAgICAnaXZlYzMnLFxuICAnSU5UX1ZFQzQnOiAgICAnaXZlYzQnLFxuICBcbiAgJ0JPT0wnOiAgICAgICAgJ2Jvb2wnLFxuICAnQk9PTF9WRUMyJzogICAnYnZlYzInLFxuICAnQk9PTF9WRUMzJzogICAnYnZlYzMnLFxuICAnQk9PTF9WRUM0JzogICAnYnZlYzQnLFxuICBcbiAgJ0ZMT0FUX01BVDInOiAgJ21hdDInLFxuICAnRkxPQVRfTUFUMyc6ICAnbWF0MycsXG4gICdGTE9BVF9NQVQ0JzogICdtYXQ0JyxcbiAgXG4gICdTQU1QTEVSXzJEJzogICdzYW1wbGVyMkQnICBcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBtYXBTaXplO1xuIiwiLyohXG4gKiBhc3luY1xuICogaHR0cHM6Ly9naXRodWIuY29tL2Nhb2xhbi9hc3luY1xuICpcbiAqIENvcHlyaWdodCAyMDEwLTIwMTQgQ2FvbGFuIE1jTWFob25cbiAqIFJlbGVhc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZVxuICovXG4oZnVuY3Rpb24gKCkge1xuXG4gICAgdmFyIGFzeW5jID0ge307XG4gICAgZnVuY3Rpb24gbm9vcCgpIHt9XG4gICAgZnVuY3Rpb24gaWRlbnRpdHkodikge1xuICAgICAgICByZXR1cm4gdjtcbiAgICB9XG4gICAgZnVuY3Rpb24gdG9Cb29sKHYpIHtcbiAgICAgICAgcmV0dXJuICEhdjtcbiAgICB9XG4gICAgZnVuY3Rpb24gbm90SWQodikge1xuICAgICAgICByZXR1cm4gIXY7XG4gICAgfVxuXG4gICAgLy8gZ2xvYmFsIG9uIHRoZSBzZXJ2ZXIsIHdpbmRvdyBpbiB0aGUgYnJvd3NlclxuICAgIHZhciBwcmV2aW91c19hc3luYztcblxuICAgIC8vIEVzdGFibGlzaCB0aGUgcm9vdCBvYmplY3QsIGB3aW5kb3dgIChgc2VsZmApIGluIHRoZSBicm93c2VyLCBgZ2xvYmFsYFxuICAgIC8vIG9uIHRoZSBzZXJ2ZXIsIG9yIGB0aGlzYCBpbiBzb21lIHZpcnR1YWwgbWFjaGluZXMuIFdlIHVzZSBgc2VsZmBcbiAgICAvLyBpbnN0ZWFkIG9mIGB3aW5kb3dgIGZvciBgV2ViV29ya2VyYCBzdXBwb3J0LlxuICAgIHZhciByb290ID0gdHlwZW9mIHNlbGYgPT09ICdvYmplY3QnICYmIHNlbGYuc2VsZiA9PT0gc2VsZiAmJiBzZWxmIHx8XG4gICAgICAgICAgICB0eXBlb2YgZ2xvYmFsID09PSAnb2JqZWN0JyAmJiBnbG9iYWwuZ2xvYmFsID09PSBnbG9iYWwgJiYgZ2xvYmFsIHx8XG4gICAgICAgICAgICB0aGlzO1xuXG4gICAgaWYgKHJvb3QgIT0gbnVsbCkge1xuICAgICAgICBwcmV2aW91c19hc3luYyA9IHJvb3QuYXN5bmM7XG4gICAgfVxuXG4gICAgYXN5bmMubm9Db25mbGljdCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcm9vdC5hc3luYyA9IHByZXZpb3VzX2FzeW5jO1xuICAgICAgICByZXR1cm4gYXN5bmM7XG4gICAgfTtcblxuICAgIGZ1bmN0aW9uIG9ubHlfb25jZShmbikge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICBpZiAoZm4gPT09IG51bGwpIHRocm93IG5ldyBFcnJvcihcIkNhbGxiYWNrIHdhcyBhbHJlYWR5IGNhbGxlZC5cIik7XG4gICAgICAgICAgICBmbi5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgICAgICAgICAgZm4gPSBudWxsO1xuICAgICAgICB9O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIF9vbmNlKGZuKSB7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIGlmIChmbiA9PT0gbnVsbCkgcmV0dXJuO1xuICAgICAgICAgICAgZm4uYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICAgICAgICAgIGZuID0gbnVsbDtcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICAvLy8vIGNyb3NzLWJyb3dzZXIgY29tcGF0aWJsaXR5IGZ1bmN0aW9ucyAvLy8vXG5cbiAgICB2YXIgX3RvU3RyaW5nID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZztcblxuICAgIHZhciBfaXNBcnJheSA9IEFycmF5LmlzQXJyYXkgfHwgZnVuY3Rpb24gKG9iaikge1xuICAgICAgICByZXR1cm4gX3RvU3RyaW5nLmNhbGwob2JqKSA9PT0gJ1tvYmplY3QgQXJyYXldJztcbiAgICB9O1xuXG4gICAgLy8gUG9ydGVkIGZyb20gdW5kZXJzY29yZS5qcyBpc09iamVjdFxuICAgIHZhciBfaXNPYmplY3QgPSBmdW5jdGlvbihvYmopIHtcbiAgICAgICAgdmFyIHR5cGUgPSB0eXBlb2Ygb2JqO1xuICAgICAgICByZXR1cm4gdHlwZSA9PT0gJ2Z1bmN0aW9uJyB8fCB0eXBlID09PSAnb2JqZWN0JyAmJiAhIW9iajtcbiAgICB9O1xuXG4gICAgZnVuY3Rpb24gX2lzQXJyYXlMaWtlKGFycikge1xuICAgICAgICByZXR1cm4gX2lzQXJyYXkoYXJyKSB8fCAoXG4gICAgICAgICAgICAvLyBoYXMgYSBwb3NpdGl2ZSBpbnRlZ2VyIGxlbmd0aCBwcm9wZXJ0eVxuICAgICAgICAgICAgdHlwZW9mIGFyci5sZW5ndGggPT09IFwibnVtYmVyXCIgJiZcbiAgICAgICAgICAgIGFyci5sZW5ndGggPj0gMCAmJlxuICAgICAgICAgICAgYXJyLmxlbmd0aCAlIDEgPT09IDBcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBfYXJyYXlFYWNoKGFyciwgaXRlcmF0b3IpIHtcbiAgICAgICAgdmFyIGluZGV4ID0gLTEsXG4gICAgICAgICAgICBsZW5ndGggPSBhcnIubGVuZ3RoO1xuXG4gICAgICAgIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgICAgICAgICBpdGVyYXRvcihhcnJbaW5kZXhdLCBpbmRleCwgYXJyKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIF9tYXAoYXJyLCBpdGVyYXRvcikge1xuICAgICAgICB2YXIgaW5kZXggPSAtMSxcbiAgICAgICAgICAgIGxlbmd0aCA9IGFyci5sZW5ndGgsXG4gICAgICAgICAgICByZXN1bHQgPSBBcnJheShsZW5ndGgpO1xuXG4gICAgICAgIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgICAgICAgICByZXN1bHRbaW5kZXhdID0gaXRlcmF0b3IoYXJyW2luZGV4XSwgaW5kZXgsIGFycik7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBfcmFuZ2UoY291bnQpIHtcbiAgICAgICAgcmV0dXJuIF9tYXAoQXJyYXkoY291bnQpLCBmdW5jdGlvbiAodiwgaSkgeyByZXR1cm4gaTsgfSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gX3JlZHVjZShhcnIsIGl0ZXJhdG9yLCBtZW1vKSB7XG4gICAgICAgIF9hcnJheUVhY2goYXJyLCBmdW5jdGlvbiAoeCwgaSwgYSkge1xuICAgICAgICAgICAgbWVtbyA9IGl0ZXJhdG9yKG1lbW8sIHgsIGksIGEpO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIG1lbW87XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gX2ZvckVhY2hPZihvYmplY3QsIGl0ZXJhdG9yKSB7XG4gICAgICAgIF9hcnJheUVhY2goX2tleXMob2JqZWN0KSwgZnVuY3Rpb24gKGtleSkge1xuICAgICAgICAgICAgaXRlcmF0b3Iob2JqZWN0W2tleV0sIGtleSk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIF9pbmRleE9mKGFyciwgaXRlbSkge1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFyci5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgaWYgKGFycltpXSA9PT0gaXRlbSkgcmV0dXJuIGk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIC0xO1xuICAgIH1cblxuICAgIHZhciBfa2V5cyA9IE9iamVjdC5rZXlzIHx8IGZ1bmN0aW9uIChvYmopIHtcbiAgICAgICAgdmFyIGtleXMgPSBbXTtcbiAgICAgICAgZm9yICh2YXIgayBpbiBvYmopIHtcbiAgICAgICAgICAgIGlmIChvYmouaGFzT3duUHJvcGVydHkoaykpIHtcbiAgICAgICAgICAgICAgICBrZXlzLnB1c2goayk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGtleXM7XG4gICAgfTtcblxuICAgIGZ1bmN0aW9uIF9rZXlJdGVyYXRvcihjb2xsKSB7XG4gICAgICAgIHZhciBpID0gLTE7XG4gICAgICAgIHZhciBsZW47XG4gICAgICAgIHZhciBrZXlzO1xuICAgICAgICBpZiAoX2lzQXJyYXlMaWtlKGNvbGwpKSB7XG4gICAgICAgICAgICBsZW4gPSBjb2xsLmxlbmd0aDtcbiAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbiBuZXh0KCkge1xuICAgICAgICAgICAgICAgIGkrKztcbiAgICAgICAgICAgICAgICByZXR1cm4gaSA8IGxlbiA/IGkgOiBudWxsO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGtleXMgPSBfa2V5cyhjb2xsKTtcbiAgICAgICAgICAgIGxlbiA9IGtleXMubGVuZ3RoO1xuICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIG5leHQoKSB7XG4gICAgICAgICAgICAgICAgaSsrO1xuICAgICAgICAgICAgICAgIHJldHVybiBpIDwgbGVuID8ga2V5c1tpXSA6IG51bGw7XG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gU2ltaWxhciB0byBFUzYncyByZXN0IHBhcmFtIChodHRwOi8vYXJpeWEub2ZpbGFicy5jb20vMjAxMy8wMy9lczYtYW5kLXJlc3QtcGFyYW1ldGVyLmh0bWwpXG4gICAgLy8gVGhpcyBhY2N1bXVsYXRlcyB0aGUgYXJndW1lbnRzIHBhc3NlZCBpbnRvIGFuIGFycmF5LCBhZnRlciBhIGdpdmVuIGluZGV4LlxuICAgIC8vIEZyb20gdW5kZXJzY29yZS5qcyAoaHR0cHM6Ly9naXRodWIuY29tL2phc2hrZW5hcy91bmRlcnNjb3JlL3B1bGwvMjE0MCkuXG4gICAgZnVuY3Rpb24gX3Jlc3RQYXJhbShmdW5jLCBzdGFydEluZGV4KSB7XG4gICAgICAgIHN0YXJ0SW5kZXggPSBzdGFydEluZGV4ID09IG51bGwgPyBmdW5jLmxlbmd0aCAtIDEgOiArc3RhcnRJbmRleDtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgdmFyIGxlbmd0aCA9IE1hdGgubWF4KGFyZ3VtZW50cy5sZW5ndGggLSBzdGFydEluZGV4LCAwKTtcbiAgICAgICAgICAgIHZhciByZXN0ID0gQXJyYXkobGVuZ3RoKTtcbiAgICAgICAgICAgIGZvciAodmFyIGluZGV4ID0gMDsgaW5kZXggPCBsZW5ndGg7IGluZGV4KyspIHtcbiAgICAgICAgICAgICAgICByZXN0W2luZGV4XSA9IGFyZ3VtZW50c1tpbmRleCArIHN0YXJ0SW5kZXhdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgc3dpdGNoIChzdGFydEluZGV4KSB7XG4gICAgICAgICAgICAgICAgY2FzZSAwOiByZXR1cm4gZnVuYy5jYWxsKHRoaXMsIHJlc3QpO1xuICAgICAgICAgICAgICAgIGNhc2UgMTogcmV0dXJuIGZ1bmMuY2FsbCh0aGlzLCBhcmd1bWVudHNbMF0sIHJlc3QpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gQ3VycmVudGx5IHVudXNlZCBidXQgaGFuZGxlIGNhc2VzIG91dHNpZGUgb2YgdGhlIHN3aXRjaCBzdGF0ZW1lbnQ6XG4gICAgICAgICAgICAvLyB2YXIgYXJncyA9IEFycmF5KHN0YXJ0SW5kZXggKyAxKTtcbiAgICAgICAgICAgIC8vIGZvciAoaW5kZXggPSAwOyBpbmRleCA8IHN0YXJ0SW5kZXg7IGluZGV4KyspIHtcbiAgICAgICAgICAgIC8vICAgICBhcmdzW2luZGV4XSA9IGFyZ3VtZW50c1tpbmRleF07XG4gICAgICAgICAgICAvLyB9XG4gICAgICAgICAgICAvLyBhcmdzW3N0YXJ0SW5kZXhdID0gcmVzdDtcbiAgICAgICAgICAgIC8vIHJldHVybiBmdW5jLmFwcGx5KHRoaXMsIGFyZ3MpO1xuICAgICAgICB9O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIF93aXRob3V0SW5kZXgoaXRlcmF0b3IpIHtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICh2YWx1ZSwgaW5kZXgsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICByZXR1cm4gaXRlcmF0b3IodmFsdWUsIGNhbGxiYWNrKTtcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICAvLy8vIGV4cG9ydGVkIGFzeW5jIG1vZHVsZSBmdW5jdGlvbnMgLy8vL1xuXG4gICAgLy8vLyBuZXh0VGljayBpbXBsZW1lbnRhdGlvbiB3aXRoIGJyb3dzZXItY29tcGF0aWJsZSBmYWxsYmFjayAvLy8vXG5cbiAgICAvLyBjYXB0dXJlIHRoZSBnbG9iYWwgcmVmZXJlbmNlIHRvIGd1YXJkIGFnYWluc3QgZmFrZVRpbWVyIG1vY2tzXG4gICAgdmFyIF9zZXRJbW1lZGlhdGUgPSB0eXBlb2Ygc2V0SW1tZWRpYXRlID09PSAnZnVuY3Rpb24nICYmIHNldEltbWVkaWF0ZTtcblxuICAgIHZhciBfZGVsYXkgPSBfc2V0SW1tZWRpYXRlID8gZnVuY3Rpb24oZm4pIHtcbiAgICAgICAgLy8gbm90IGEgZGlyZWN0IGFsaWFzIGZvciBJRTEwIGNvbXBhdGliaWxpdHlcbiAgICAgICAgX3NldEltbWVkaWF0ZShmbik7XG4gICAgfSA6IGZ1bmN0aW9uKGZuKSB7XG4gICAgICAgIHNldFRpbWVvdXQoZm4sIDApO1xuICAgIH07XG5cbiAgICBpZiAodHlwZW9mIHByb2Nlc3MgPT09ICdvYmplY3QnICYmIHR5cGVvZiBwcm9jZXNzLm5leHRUaWNrID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIGFzeW5jLm5leHRUaWNrID0gcHJvY2Vzcy5uZXh0VGljaztcbiAgICB9IGVsc2Uge1xuICAgICAgICBhc3luYy5uZXh0VGljayA9IF9kZWxheTtcbiAgICB9XG4gICAgYXN5bmMuc2V0SW1tZWRpYXRlID0gX3NldEltbWVkaWF0ZSA/IF9kZWxheSA6IGFzeW5jLm5leHRUaWNrO1xuXG5cbiAgICBhc3luYy5mb3JFYWNoID1cbiAgICBhc3luYy5lYWNoID0gZnVuY3Rpb24gKGFyciwgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgIHJldHVybiBhc3luYy5lYWNoT2YoYXJyLCBfd2l0aG91dEluZGV4KGl0ZXJhdG9yKSwgY2FsbGJhY2spO1xuICAgIH07XG5cbiAgICBhc3luYy5mb3JFYWNoU2VyaWVzID1cbiAgICBhc3luYy5lYWNoU2VyaWVzID0gZnVuY3Rpb24gKGFyciwgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgIHJldHVybiBhc3luYy5lYWNoT2ZTZXJpZXMoYXJyLCBfd2l0aG91dEluZGV4KGl0ZXJhdG9yKSwgY2FsbGJhY2spO1xuICAgIH07XG5cblxuICAgIGFzeW5jLmZvckVhY2hMaW1pdCA9XG4gICAgYXN5bmMuZWFjaExpbWl0ID0gZnVuY3Rpb24gKGFyciwgbGltaXQsIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICByZXR1cm4gX2VhY2hPZkxpbWl0KGxpbWl0KShhcnIsIF93aXRob3V0SW5kZXgoaXRlcmF0b3IpLCBjYWxsYmFjayk7XG4gICAgfTtcblxuICAgIGFzeW5jLmZvckVhY2hPZiA9XG4gICAgYXN5bmMuZWFjaE9mID0gZnVuY3Rpb24gKG9iamVjdCwgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgIGNhbGxiYWNrID0gX29uY2UoY2FsbGJhY2sgfHwgbm9vcCk7XG4gICAgICAgIG9iamVjdCA9IG9iamVjdCB8fCBbXTtcblxuICAgICAgICB2YXIgaXRlciA9IF9rZXlJdGVyYXRvcihvYmplY3QpO1xuICAgICAgICB2YXIga2V5LCBjb21wbGV0ZWQgPSAwO1xuXG4gICAgICAgIHdoaWxlICgoa2V5ID0gaXRlcigpKSAhPSBudWxsKSB7XG4gICAgICAgICAgICBjb21wbGV0ZWQgKz0gMTtcbiAgICAgICAgICAgIGl0ZXJhdG9yKG9iamVjdFtrZXldLCBrZXksIG9ubHlfb25jZShkb25lKSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoY29tcGxldGVkID09PSAwKSBjYWxsYmFjayhudWxsKTtcblxuICAgICAgICBmdW5jdGlvbiBkb25lKGVycikge1xuICAgICAgICAgICAgY29tcGxldGVkLS07XG4gICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIENoZWNrIGtleSBpcyBudWxsIGluIGNhc2UgaXRlcmF0b3IgaXNuJ3QgZXhoYXVzdGVkXG4gICAgICAgICAgICAvLyBhbmQgZG9uZSByZXNvbHZlZCBzeW5jaHJvbm91c2x5LlxuICAgICAgICAgICAgZWxzZSBpZiAoa2V5ID09PSBudWxsICYmIGNvbXBsZXRlZCA8PSAwKSB7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2sobnVsbCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgYXN5bmMuZm9yRWFjaE9mU2VyaWVzID1cbiAgICBhc3luYy5lYWNoT2ZTZXJpZXMgPSBmdW5jdGlvbiAob2JqLCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgY2FsbGJhY2sgPSBfb25jZShjYWxsYmFjayB8fCBub29wKTtcbiAgICAgICAgb2JqID0gb2JqIHx8IFtdO1xuICAgICAgICB2YXIgbmV4dEtleSA9IF9rZXlJdGVyYXRvcihvYmopO1xuICAgICAgICB2YXIga2V5ID0gbmV4dEtleSgpO1xuICAgICAgICBmdW5jdGlvbiBpdGVyYXRlKCkge1xuICAgICAgICAgICAgdmFyIHN5bmMgPSB0cnVlO1xuICAgICAgICAgICAgaWYgKGtleSA9PT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBjYWxsYmFjayhudWxsKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGl0ZXJhdG9yKG9ialtrZXldLCBrZXksIG9ubHlfb25jZShmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAga2V5ID0gbmV4dEtleSgpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoa2V5ID09PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gY2FsbGJhY2sobnVsbCk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3luYykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFzeW5jLnNldEltbWVkaWF0ZShpdGVyYXRlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlcmF0ZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSkpO1xuICAgICAgICAgICAgc3luYyA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGl0ZXJhdGUoKTtcbiAgICB9O1xuXG5cblxuICAgIGFzeW5jLmZvckVhY2hPZkxpbWl0ID1cbiAgICBhc3luYy5lYWNoT2ZMaW1pdCA9IGZ1bmN0aW9uIChvYmosIGxpbWl0LCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgX2VhY2hPZkxpbWl0KGxpbWl0KShvYmosIGl0ZXJhdG9yLCBjYWxsYmFjayk7XG4gICAgfTtcblxuICAgIGZ1bmN0aW9uIF9lYWNoT2ZMaW1pdChsaW1pdCkge1xuXG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAob2JqLCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIGNhbGxiYWNrID0gX29uY2UoY2FsbGJhY2sgfHwgbm9vcCk7XG4gICAgICAgICAgICBvYmogPSBvYmogfHwgW107XG4gICAgICAgICAgICB2YXIgbmV4dEtleSA9IF9rZXlJdGVyYXRvcihvYmopO1xuICAgICAgICAgICAgaWYgKGxpbWl0IDw9IDApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gY2FsbGJhY2sobnVsbCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB2YXIgZG9uZSA9IGZhbHNlO1xuICAgICAgICAgICAgdmFyIHJ1bm5pbmcgPSAwO1xuICAgICAgICAgICAgdmFyIGVycm9yZWQgPSBmYWxzZTtcblxuICAgICAgICAgICAgKGZ1bmN0aW9uIHJlcGxlbmlzaCAoKSB7XG4gICAgICAgICAgICAgICAgaWYgKGRvbmUgJiYgcnVubmluZyA8PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBjYWxsYmFjayhudWxsKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB3aGlsZSAocnVubmluZyA8IGxpbWl0ICYmICFlcnJvcmVkKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBrZXkgPSBuZXh0S2V5KCk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChrZXkgPT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRvbmUgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJ1bm5pbmcgPD0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKG51bGwpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJ1bm5pbmcgKz0gMTtcbiAgICAgICAgICAgICAgICAgICAgaXRlcmF0b3Iob2JqW2tleV0sIGtleSwgb25seV9vbmNlKGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJ1bm5pbmcgLT0gMTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVwbGVuaXNoKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KSgpO1xuICAgICAgICB9O1xuICAgIH1cblxuXG4gICAgZnVuY3Rpb24gZG9QYXJhbGxlbChmbikge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKG9iaiwgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICByZXR1cm4gZm4oYXN5bmMuZWFjaE9mLCBvYmosIGl0ZXJhdG9yLCBjYWxsYmFjayk7XG4gICAgICAgIH07XG4gICAgfVxuICAgIGZ1bmN0aW9uIGRvUGFyYWxsZWxMaW1pdChmbikge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKG9iaiwgbGltaXQsIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICAgICAgcmV0dXJuIGZuKF9lYWNoT2ZMaW1pdChsaW1pdCksIG9iaiwgaXRlcmF0b3IsIGNhbGxiYWNrKTtcbiAgICAgICAgfTtcbiAgICB9XG4gICAgZnVuY3Rpb24gZG9TZXJpZXMoZm4pIHtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChvYmosIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICAgICAgcmV0dXJuIGZuKGFzeW5jLmVhY2hPZlNlcmllcywgb2JqLCBpdGVyYXRvciwgY2FsbGJhY2spO1xuICAgICAgICB9O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIF9hc3luY01hcChlYWNoZm4sIGFyciwgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgIGNhbGxiYWNrID0gX29uY2UoY2FsbGJhY2sgfHwgbm9vcCk7XG4gICAgICAgIGFyciA9IGFyciB8fCBbXTtcbiAgICAgICAgdmFyIHJlc3VsdHMgPSBfaXNBcnJheUxpa2UoYXJyKSA/IFtdIDoge307XG4gICAgICAgIGVhY2hmbihhcnIsIGZ1bmN0aW9uICh2YWx1ZSwgaW5kZXgsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICBpdGVyYXRvcih2YWx1ZSwgZnVuY3Rpb24gKGVyciwgdikge1xuICAgICAgICAgICAgICAgIHJlc3VsdHNbaW5kZXhdID0gdjtcbiAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgIGNhbGxiYWNrKGVyciwgcmVzdWx0cyk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGFzeW5jLm1hcCA9IGRvUGFyYWxsZWwoX2FzeW5jTWFwKTtcbiAgICBhc3luYy5tYXBTZXJpZXMgPSBkb1NlcmllcyhfYXN5bmNNYXApO1xuICAgIGFzeW5jLm1hcExpbWl0ID0gZG9QYXJhbGxlbExpbWl0KF9hc3luY01hcCk7XG5cbiAgICAvLyByZWR1Y2Ugb25seSBoYXMgYSBzZXJpZXMgdmVyc2lvbiwgYXMgZG9pbmcgcmVkdWNlIGluIHBhcmFsbGVsIHdvbid0XG4gICAgLy8gd29yayBpbiBtYW55IHNpdHVhdGlvbnMuXG4gICAgYXN5bmMuaW5qZWN0ID1cbiAgICBhc3luYy5mb2xkbCA9XG4gICAgYXN5bmMucmVkdWNlID0gZnVuY3Rpb24gKGFyciwgbWVtbywgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgIGFzeW5jLmVhY2hPZlNlcmllcyhhcnIsIGZ1bmN0aW9uICh4LCBpLCBjYWxsYmFjaykge1xuICAgICAgICAgICAgaXRlcmF0b3IobWVtbywgeCwgZnVuY3Rpb24gKGVyciwgdikge1xuICAgICAgICAgICAgICAgIG1lbW8gPSB2O1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSwgZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgY2FsbGJhY2soZXJyLCBtZW1vKTtcbiAgICAgICAgfSk7XG4gICAgfTtcblxuICAgIGFzeW5jLmZvbGRyID1cbiAgICBhc3luYy5yZWR1Y2VSaWdodCA9IGZ1bmN0aW9uIChhcnIsIG1lbW8sIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICB2YXIgcmV2ZXJzZWQgPSBfbWFwKGFyciwgaWRlbnRpdHkpLnJldmVyc2UoKTtcbiAgICAgICAgYXN5bmMucmVkdWNlKHJldmVyc2VkLCBtZW1vLCBpdGVyYXRvciwgY2FsbGJhY2spO1xuICAgIH07XG5cbiAgICBhc3luYy50cmFuc2Zvcm0gPSBmdW5jdGlvbiAoYXJyLCBtZW1vLCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDMpIHtcbiAgICAgICAgICAgIGNhbGxiYWNrID0gaXRlcmF0b3I7XG4gICAgICAgICAgICBpdGVyYXRvciA9IG1lbW87XG4gICAgICAgICAgICBtZW1vID0gX2lzQXJyYXkoYXJyKSA/IFtdIDoge307XG4gICAgICAgIH1cblxuICAgICAgICBhc3luYy5lYWNoT2YoYXJyLCBmdW5jdGlvbih2LCBrLCBjYikge1xuICAgICAgICAgICAgaXRlcmF0b3IobWVtbywgdiwgaywgY2IpO1xuICAgICAgICB9LCBmdW5jdGlvbihlcnIpIHtcbiAgICAgICAgICAgIGNhbGxiYWNrKGVyciwgbWVtbyk7XG4gICAgICAgIH0pO1xuICAgIH07XG5cbiAgICBmdW5jdGlvbiBfZmlsdGVyKGVhY2hmbiwgYXJyLCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgdmFyIHJlc3VsdHMgPSBbXTtcbiAgICAgICAgZWFjaGZuKGFyciwgZnVuY3Rpb24gKHgsIGluZGV4LCBjYWxsYmFjaykge1xuICAgICAgICAgICAgaXRlcmF0b3IoeCwgZnVuY3Rpb24gKHYpIHtcbiAgICAgICAgICAgICAgICBpZiAodikge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHRzLnB1c2goe2luZGV4OiBpbmRleCwgdmFsdWU6IHh9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2FsbGJhY2soKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBjYWxsYmFjayhfbWFwKHJlc3VsdHMuc29ydChmdW5jdGlvbiAoYSwgYikge1xuICAgICAgICAgICAgICAgIHJldHVybiBhLmluZGV4IC0gYi5pbmRleDtcbiAgICAgICAgICAgIH0pLCBmdW5jdGlvbiAoeCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB4LnZhbHVlO1xuICAgICAgICAgICAgfSkpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBhc3luYy5zZWxlY3QgPVxuICAgIGFzeW5jLmZpbHRlciA9IGRvUGFyYWxsZWwoX2ZpbHRlcik7XG5cbiAgICBhc3luYy5zZWxlY3RMaW1pdCA9XG4gICAgYXN5bmMuZmlsdGVyTGltaXQgPSBkb1BhcmFsbGVsTGltaXQoX2ZpbHRlcik7XG5cbiAgICBhc3luYy5zZWxlY3RTZXJpZXMgPVxuICAgIGFzeW5jLmZpbHRlclNlcmllcyA9IGRvU2VyaWVzKF9maWx0ZXIpO1xuXG4gICAgZnVuY3Rpb24gX3JlamVjdChlYWNoZm4sIGFyciwgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgIF9maWx0ZXIoZWFjaGZuLCBhcnIsIGZ1bmN0aW9uKHZhbHVlLCBjYikge1xuICAgICAgICAgICAgaXRlcmF0b3IodmFsdWUsIGZ1bmN0aW9uKHYpIHtcbiAgICAgICAgICAgICAgICBjYighdik7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSwgY2FsbGJhY2spO1xuICAgIH1cbiAgICBhc3luYy5yZWplY3QgPSBkb1BhcmFsbGVsKF9yZWplY3QpO1xuICAgIGFzeW5jLnJlamVjdExpbWl0ID0gZG9QYXJhbGxlbExpbWl0KF9yZWplY3QpO1xuICAgIGFzeW5jLnJlamVjdFNlcmllcyA9IGRvU2VyaWVzKF9yZWplY3QpO1xuXG4gICAgZnVuY3Rpb24gX2NyZWF0ZVRlc3RlcihlYWNoZm4sIGNoZWNrLCBnZXRSZXN1bHQpIHtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKGFyciwgbGltaXQsIGl0ZXJhdG9yLCBjYikge1xuICAgICAgICAgICAgZnVuY3Rpb24gZG9uZSgpIHtcbiAgICAgICAgICAgICAgICBpZiAoY2IpIGNiKGdldFJlc3VsdChmYWxzZSwgdm9pZCAwKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmdW5jdGlvbiBpdGVyYXRlZSh4LCBfLCBjYWxsYmFjaykge1xuICAgICAgICAgICAgICAgIGlmICghY2IpIHJldHVybiBjYWxsYmFjaygpO1xuICAgICAgICAgICAgICAgIGl0ZXJhdG9yKHgsIGZ1bmN0aW9uICh2KSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChjYiAmJiBjaGVjayh2KSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY2IoZ2V0UmVzdWx0KHRydWUsIHgpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNiID0gaXRlcmF0b3IgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPiAzKSB7XG4gICAgICAgICAgICAgICAgZWFjaGZuKGFyciwgbGltaXQsIGl0ZXJhdGVlLCBkb25lKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgY2IgPSBpdGVyYXRvcjtcbiAgICAgICAgICAgICAgICBpdGVyYXRvciA9IGxpbWl0O1xuICAgICAgICAgICAgICAgIGVhY2hmbihhcnIsIGl0ZXJhdGVlLCBkb25lKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBhc3luYy5hbnkgPVxuICAgIGFzeW5jLnNvbWUgPSBfY3JlYXRlVGVzdGVyKGFzeW5jLmVhY2hPZiwgdG9Cb29sLCBpZGVudGl0eSk7XG5cbiAgICBhc3luYy5zb21lTGltaXQgPSBfY3JlYXRlVGVzdGVyKGFzeW5jLmVhY2hPZkxpbWl0LCB0b0Jvb2wsIGlkZW50aXR5KTtcblxuICAgIGFzeW5jLmFsbCA9XG4gICAgYXN5bmMuZXZlcnkgPSBfY3JlYXRlVGVzdGVyKGFzeW5jLmVhY2hPZiwgbm90SWQsIG5vdElkKTtcblxuICAgIGFzeW5jLmV2ZXJ5TGltaXQgPSBfY3JlYXRlVGVzdGVyKGFzeW5jLmVhY2hPZkxpbWl0LCBub3RJZCwgbm90SWQpO1xuXG4gICAgZnVuY3Rpb24gX2ZpbmRHZXRSZXN1bHQodiwgeCkge1xuICAgICAgICByZXR1cm4geDtcbiAgICB9XG4gICAgYXN5bmMuZGV0ZWN0ID0gX2NyZWF0ZVRlc3Rlcihhc3luYy5lYWNoT2YsIGlkZW50aXR5LCBfZmluZEdldFJlc3VsdCk7XG4gICAgYXN5bmMuZGV0ZWN0U2VyaWVzID0gX2NyZWF0ZVRlc3Rlcihhc3luYy5lYWNoT2ZTZXJpZXMsIGlkZW50aXR5LCBfZmluZEdldFJlc3VsdCk7XG4gICAgYXN5bmMuZGV0ZWN0TGltaXQgPSBfY3JlYXRlVGVzdGVyKGFzeW5jLmVhY2hPZkxpbWl0LCBpZGVudGl0eSwgX2ZpbmRHZXRSZXN1bHQpO1xuXG4gICAgYXN5bmMuc29ydEJ5ID0gZnVuY3Rpb24gKGFyciwgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgIGFzeW5jLm1hcChhcnIsIGZ1bmN0aW9uICh4LCBjYWxsYmFjaykge1xuICAgICAgICAgICAgaXRlcmF0b3IoeCwgZnVuY3Rpb24gKGVyciwgY3JpdGVyaWEpIHtcbiAgICAgICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhudWxsLCB7dmFsdWU6IHgsIGNyaXRlcmlhOiBjcml0ZXJpYX0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LCBmdW5jdGlvbiAoZXJyLCByZXN1bHRzKSB7XG4gICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBjYWxsYmFjayhudWxsLCBfbWFwKHJlc3VsdHMuc29ydChjb21wYXJhdG9yKSwgZnVuY3Rpb24gKHgpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHgudmFsdWU7XG4gICAgICAgICAgICAgICAgfSkpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGZ1bmN0aW9uIGNvbXBhcmF0b3IobGVmdCwgcmlnaHQpIHtcbiAgICAgICAgICAgIHZhciBhID0gbGVmdC5jcml0ZXJpYSwgYiA9IHJpZ2h0LmNyaXRlcmlhO1xuICAgICAgICAgICAgcmV0dXJuIGEgPCBiID8gLTEgOiBhID4gYiA/IDEgOiAwO1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIGFzeW5jLmF1dG8gPSBmdW5jdGlvbiAodGFza3MsIGNvbmN1cnJlbmN5LCBjYWxsYmFjaykge1xuICAgICAgICBpZiAoIWNhbGxiYWNrKSB7XG4gICAgICAgICAgICAvLyBjb25jdXJyZW5jeSBpcyBvcHRpb25hbCwgc2hpZnQgdGhlIGFyZ3MuXG4gICAgICAgICAgICBjYWxsYmFjayA9IGNvbmN1cnJlbmN5O1xuICAgICAgICAgICAgY29uY3VycmVuY3kgPSBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGNhbGxiYWNrID0gX29uY2UoY2FsbGJhY2sgfHwgbm9vcCk7XG4gICAgICAgIHZhciBrZXlzID0gX2tleXModGFza3MpO1xuICAgICAgICB2YXIgcmVtYWluaW5nVGFza3MgPSBrZXlzLmxlbmd0aDtcbiAgICAgICAgaWYgKCFyZW1haW5pbmdUYXNrcykge1xuICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKG51bGwpO1xuICAgICAgICB9XG4gICAgICAgIGlmICghY29uY3VycmVuY3kpIHtcbiAgICAgICAgICAgIGNvbmN1cnJlbmN5ID0gcmVtYWluaW5nVGFza3M7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgcmVzdWx0cyA9IHt9O1xuICAgICAgICB2YXIgcnVubmluZ1Rhc2tzID0gMDtcblxuICAgICAgICB2YXIgbGlzdGVuZXJzID0gW107XG4gICAgICAgIGZ1bmN0aW9uIGFkZExpc3RlbmVyKGZuKSB7XG4gICAgICAgICAgICBsaXN0ZW5lcnMudW5zaGlmdChmbik7XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gcmVtb3ZlTGlzdGVuZXIoZm4pIHtcbiAgICAgICAgICAgIHZhciBpZHggPSBfaW5kZXhPZihsaXN0ZW5lcnMsIGZuKTtcbiAgICAgICAgICAgIGlmIChpZHggPj0gMCkgbGlzdGVuZXJzLnNwbGljZShpZHgsIDEpO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIHRhc2tDb21wbGV0ZSgpIHtcbiAgICAgICAgICAgIHJlbWFpbmluZ1Rhc2tzLS07XG4gICAgICAgICAgICBfYXJyYXlFYWNoKGxpc3RlbmVycy5zbGljZSgwKSwgZnVuY3Rpb24gKGZuKSB7XG4gICAgICAgICAgICAgICAgZm4oKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgYWRkTGlzdGVuZXIoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgaWYgKCFyZW1haW5pbmdUYXNrcykge1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrKG51bGwsIHJlc3VsdHMpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICBfYXJyYXlFYWNoKGtleXMsIGZ1bmN0aW9uIChrKSB7XG4gICAgICAgICAgICB2YXIgdGFzayA9IF9pc0FycmF5KHRhc2tzW2tdKSA/IHRhc2tzW2tdOiBbdGFza3Nba11dO1xuICAgICAgICAgICAgdmFyIHRhc2tDYWxsYmFjayA9IF9yZXN0UGFyYW0oZnVuY3Rpb24oZXJyLCBhcmdzKSB7XG4gICAgICAgICAgICAgICAgcnVubmluZ1Rhc2tzLS07XG4gICAgICAgICAgICAgICAgaWYgKGFyZ3MubGVuZ3RoIDw9IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgYXJncyA9IGFyZ3NbMF07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHNhZmVSZXN1bHRzID0ge307XG4gICAgICAgICAgICAgICAgICAgIF9mb3JFYWNoT2YocmVzdWx0cywgZnVuY3Rpb24odmFsLCBya2V5KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzYWZlUmVzdWx0c1tya2V5XSA9IHZhbDtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIHNhZmVSZXN1bHRzW2tdID0gYXJncztcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soZXJyLCBzYWZlUmVzdWx0cyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHRzW2tdID0gYXJncztcbiAgICAgICAgICAgICAgICAgICAgYXN5bmMuc2V0SW1tZWRpYXRlKHRhc2tDb21wbGV0ZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB2YXIgcmVxdWlyZXMgPSB0YXNrLnNsaWNlKDAsIHRhc2subGVuZ3RoIC0gMSk7XG4gICAgICAgICAgICAvLyBwcmV2ZW50IGRlYWQtbG9ja3NcbiAgICAgICAgICAgIHZhciBsZW4gPSByZXF1aXJlcy5sZW5ndGg7XG4gICAgICAgICAgICB2YXIgZGVwO1xuICAgICAgICAgICAgd2hpbGUgKGxlbi0tKSB7XG4gICAgICAgICAgICAgICAgaWYgKCEoZGVwID0gdGFza3NbcmVxdWlyZXNbbGVuXV0pKSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignSGFzIGluZXhpc3RhbnQgZGVwZW5kZW5jeScpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoX2lzQXJyYXkoZGVwKSAmJiBfaW5kZXhPZihkZXAsIGspID49IDApIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdIYXMgY3ljbGljIGRlcGVuZGVuY2llcycpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZ1bmN0aW9uIHJlYWR5KCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBydW5uaW5nVGFza3MgPCBjb25jdXJyZW5jeSAmJiBfcmVkdWNlKHJlcXVpcmVzLCBmdW5jdGlvbiAoYSwgeCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gKGEgJiYgcmVzdWx0cy5oYXNPd25Qcm9wZXJ0eSh4KSk7XG4gICAgICAgICAgICAgICAgfSwgdHJ1ZSkgJiYgIXJlc3VsdHMuaGFzT3duUHJvcGVydHkoayk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAocmVhZHkoKSkge1xuICAgICAgICAgICAgICAgIHJ1bm5pbmdUYXNrcysrO1xuICAgICAgICAgICAgICAgIHRhc2tbdGFzay5sZW5ndGggLSAxXSh0YXNrQ2FsbGJhY2ssIHJlc3VsdHMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgYWRkTGlzdGVuZXIobGlzdGVuZXIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZnVuY3Rpb24gbGlzdGVuZXIoKSB7XG4gICAgICAgICAgICAgICAgaWYgKHJlYWR5KCkpIHtcbiAgICAgICAgICAgICAgICAgICAgcnVubmluZ1Rhc2tzKys7XG4gICAgICAgICAgICAgICAgICAgIHJlbW92ZUxpc3RlbmVyKGxpc3RlbmVyKTtcbiAgICAgICAgICAgICAgICAgICAgdGFza1t0YXNrLmxlbmd0aCAtIDFdKHRhc2tDYWxsYmFjaywgcmVzdWx0cyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9O1xuXG5cblxuICAgIGFzeW5jLnJldHJ5ID0gZnVuY3Rpb24odGltZXMsIHRhc2ssIGNhbGxiYWNrKSB7XG4gICAgICAgIHZhciBERUZBVUxUX1RJTUVTID0gNTtcbiAgICAgICAgdmFyIERFRkFVTFRfSU5URVJWQUwgPSAwO1xuXG4gICAgICAgIHZhciBhdHRlbXB0cyA9IFtdO1xuXG4gICAgICAgIHZhciBvcHRzID0ge1xuICAgICAgICAgICAgdGltZXM6IERFRkFVTFRfVElNRVMsXG4gICAgICAgICAgICBpbnRlcnZhbDogREVGQVVMVF9JTlRFUlZBTFxuICAgICAgICB9O1xuXG4gICAgICAgIGZ1bmN0aW9uIHBhcnNlVGltZXMoYWNjLCB0KXtcbiAgICAgICAgICAgIGlmKHR5cGVvZiB0ID09PSAnbnVtYmVyJyl7XG4gICAgICAgICAgICAgICAgYWNjLnRpbWVzID0gcGFyc2VJbnQodCwgMTApIHx8IERFRkFVTFRfVElNRVM7XG4gICAgICAgICAgICB9IGVsc2UgaWYodHlwZW9mIHQgPT09ICdvYmplY3QnKXtcbiAgICAgICAgICAgICAgICBhY2MudGltZXMgPSBwYXJzZUludCh0LnRpbWVzLCAxMCkgfHwgREVGQVVMVF9USU1FUztcbiAgICAgICAgICAgICAgICBhY2MuaW50ZXJ2YWwgPSBwYXJzZUludCh0LmludGVydmFsLCAxMCkgfHwgREVGQVVMVF9JTlRFUlZBTDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdVbnN1cHBvcnRlZCBhcmd1bWVudCB0eXBlIGZvciBcXCd0aW1lc1xcJzogJyArIHR5cGVvZiB0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBsZW5ndGggPSBhcmd1bWVudHMubGVuZ3RoO1xuICAgICAgICBpZiAobGVuZ3RoIDwgMSB8fCBsZW5ndGggPiAzKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgYXJndW1lbnRzIC0gbXVzdCBiZSBlaXRoZXIgKHRhc2spLCAodGFzaywgY2FsbGJhY2spLCAodGltZXMsIHRhc2spIG9yICh0aW1lcywgdGFzaywgY2FsbGJhY2spJyk7XG4gICAgICAgIH0gZWxzZSBpZiAobGVuZ3RoIDw9IDIgJiYgdHlwZW9mIHRpbWVzID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICBjYWxsYmFjayA9IHRhc2s7XG4gICAgICAgICAgICB0YXNrID0gdGltZXM7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHR5cGVvZiB0aW1lcyAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgcGFyc2VUaW1lcyhvcHRzLCB0aW1lcyk7XG4gICAgICAgIH1cbiAgICAgICAgb3B0cy5jYWxsYmFjayA9IGNhbGxiYWNrO1xuICAgICAgICBvcHRzLnRhc2sgPSB0YXNrO1xuXG4gICAgICAgIGZ1bmN0aW9uIHdyYXBwZWRUYXNrKHdyYXBwZWRDYWxsYmFjaywgd3JhcHBlZFJlc3VsdHMpIHtcbiAgICAgICAgICAgIGZ1bmN0aW9uIHJldHJ5QXR0ZW1wdCh0YXNrLCBmaW5hbEF0dGVtcHQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24oc2VyaWVzQ2FsbGJhY2spIHtcbiAgICAgICAgICAgICAgICAgICAgdGFzayhmdW5jdGlvbihlcnIsIHJlc3VsdCl7XG4gICAgICAgICAgICAgICAgICAgICAgICBzZXJpZXNDYWxsYmFjayghZXJyIHx8IGZpbmFsQXR0ZW1wdCwge2VycjogZXJyLCByZXN1bHQ6IHJlc3VsdH0pO1xuICAgICAgICAgICAgICAgICAgICB9LCB3cmFwcGVkUmVzdWx0cyk7XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZnVuY3Rpb24gcmV0cnlJbnRlcnZhbChpbnRlcnZhbCl7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKHNlcmllc0NhbGxiYWNrKXtcbiAgICAgICAgICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpe1xuICAgICAgICAgICAgICAgICAgICAgICAgc2VyaWVzQ2FsbGJhY2sobnVsbCk7XG4gICAgICAgICAgICAgICAgICAgIH0sIGludGVydmFsKTtcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB3aGlsZSAob3B0cy50aW1lcykge1xuXG4gICAgICAgICAgICAgICAgdmFyIGZpbmFsQXR0ZW1wdCA9ICEob3B0cy50aW1lcy09MSk7XG4gICAgICAgICAgICAgICAgYXR0ZW1wdHMucHVzaChyZXRyeUF0dGVtcHQob3B0cy50YXNrLCBmaW5hbEF0dGVtcHQpKTtcbiAgICAgICAgICAgICAgICBpZighZmluYWxBdHRlbXB0ICYmIG9wdHMuaW50ZXJ2YWwgPiAwKXtcbiAgICAgICAgICAgICAgICAgICAgYXR0ZW1wdHMucHVzaChyZXRyeUludGVydmFsKG9wdHMuaW50ZXJ2YWwpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGFzeW5jLnNlcmllcyhhdHRlbXB0cywgZnVuY3Rpb24oZG9uZSwgZGF0YSl7XG4gICAgICAgICAgICAgICAgZGF0YSA9IGRhdGFbZGF0YS5sZW5ndGggLSAxXTtcbiAgICAgICAgICAgICAgICAod3JhcHBlZENhbGxiYWNrIHx8IG9wdHMuY2FsbGJhY2spKGRhdGEuZXJyLCBkYXRhLnJlc3VsdCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIElmIGEgY2FsbGJhY2sgaXMgcGFzc2VkLCBydW4gdGhpcyBhcyBhIGNvbnRyb2xsIGZsb3dcbiAgICAgICAgcmV0dXJuIG9wdHMuY2FsbGJhY2sgPyB3cmFwcGVkVGFzaygpIDogd3JhcHBlZFRhc2s7XG4gICAgfTtcblxuICAgIGFzeW5jLndhdGVyZmFsbCA9IGZ1bmN0aW9uICh0YXNrcywgY2FsbGJhY2spIHtcbiAgICAgICAgY2FsbGJhY2sgPSBfb25jZShjYWxsYmFjayB8fCBub29wKTtcbiAgICAgICAgaWYgKCFfaXNBcnJheSh0YXNrcykpIHtcbiAgICAgICAgICAgIHZhciBlcnIgPSBuZXcgRXJyb3IoJ0ZpcnN0IGFyZ3VtZW50IHRvIHdhdGVyZmFsbCBtdXN0IGJlIGFuIGFycmF5IG9mIGZ1bmN0aW9ucycpO1xuICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKGVycik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCF0YXNrcy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHJldHVybiBjYWxsYmFjaygpO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIHdyYXBJdGVyYXRvcihpdGVyYXRvcikge1xuICAgICAgICAgICAgcmV0dXJuIF9yZXN0UGFyYW0oZnVuY3Rpb24gKGVyciwgYXJncykge1xuICAgICAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2suYXBwbHkobnVsbCwgW2Vycl0uY29uY2F0KGFyZ3MpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBuZXh0ID0gaXRlcmF0b3IubmV4dCgpO1xuICAgICAgICAgICAgICAgICAgICBpZiAobmV4dCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgYXJncy5wdXNoKHdyYXBJdGVyYXRvcihuZXh0KSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhcmdzLnB1c2goY2FsbGJhY2spO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVuc3VyZUFzeW5jKGl0ZXJhdG9yKS5hcHBseShudWxsLCBhcmdzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICB3cmFwSXRlcmF0b3IoYXN5bmMuaXRlcmF0b3IodGFza3MpKSgpO1xuICAgIH07XG5cbiAgICBmdW5jdGlvbiBfcGFyYWxsZWwoZWFjaGZuLCB0YXNrcywgY2FsbGJhY2spIHtcbiAgICAgICAgY2FsbGJhY2sgPSBjYWxsYmFjayB8fCBub29wO1xuICAgICAgICB2YXIgcmVzdWx0cyA9IF9pc0FycmF5TGlrZSh0YXNrcykgPyBbXSA6IHt9O1xuXG4gICAgICAgIGVhY2hmbih0YXNrcywgZnVuY3Rpb24gKHRhc2ssIGtleSwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIHRhc2soX3Jlc3RQYXJhbShmdW5jdGlvbiAoZXJyLCBhcmdzKSB7XG4gICAgICAgICAgICAgICAgaWYgKGFyZ3MubGVuZ3RoIDw9IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgYXJncyA9IGFyZ3NbMF07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJlc3VsdHNba2V5XSA9IGFyZ3M7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgfSwgZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgY2FsbGJhY2soZXJyLCByZXN1bHRzKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgYXN5bmMucGFyYWxsZWwgPSBmdW5jdGlvbiAodGFza3MsIGNhbGxiYWNrKSB7XG4gICAgICAgIF9wYXJhbGxlbChhc3luYy5lYWNoT2YsIHRhc2tzLCBjYWxsYmFjayk7XG4gICAgfTtcblxuICAgIGFzeW5jLnBhcmFsbGVsTGltaXQgPSBmdW5jdGlvbih0YXNrcywgbGltaXQsIGNhbGxiYWNrKSB7XG4gICAgICAgIF9wYXJhbGxlbChfZWFjaE9mTGltaXQobGltaXQpLCB0YXNrcywgY2FsbGJhY2spO1xuICAgIH07XG5cbiAgICBhc3luYy5zZXJpZXMgPSBmdW5jdGlvbih0YXNrcywgY2FsbGJhY2spIHtcbiAgICAgICAgX3BhcmFsbGVsKGFzeW5jLmVhY2hPZlNlcmllcywgdGFza3MsIGNhbGxiYWNrKTtcbiAgICB9O1xuXG4gICAgYXN5bmMuaXRlcmF0b3IgPSBmdW5jdGlvbiAodGFza3MpIHtcbiAgICAgICAgZnVuY3Rpb24gbWFrZUNhbGxiYWNrKGluZGV4KSB7XG4gICAgICAgICAgICBmdW5jdGlvbiBmbigpIHtcbiAgICAgICAgICAgICAgICBpZiAodGFza3MubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgIHRhc2tzW2luZGV4XS5hcHBseShudWxsLCBhcmd1bWVudHMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gZm4ubmV4dCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZm4ubmV4dCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gKGluZGV4IDwgdGFza3MubGVuZ3RoIC0gMSkgPyBtYWtlQ2FsbGJhY2soaW5kZXggKyAxKTogbnVsbDtcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICByZXR1cm4gZm47XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG1ha2VDYWxsYmFjaygwKTtcbiAgICB9O1xuXG4gICAgYXN5bmMuYXBwbHkgPSBfcmVzdFBhcmFtKGZ1bmN0aW9uIChmbiwgYXJncykge1xuICAgICAgICByZXR1cm4gX3Jlc3RQYXJhbShmdW5jdGlvbiAoY2FsbEFyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybiBmbi5hcHBseShcbiAgICAgICAgICAgICAgICBudWxsLCBhcmdzLmNvbmNhdChjYWxsQXJncylcbiAgICAgICAgICAgICk7XG4gICAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgZnVuY3Rpb24gX2NvbmNhdChlYWNoZm4sIGFyciwgZm4sIGNhbGxiYWNrKSB7XG4gICAgICAgIHZhciByZXN1bHQgPSBbXTtcbiAgICAgICAgZWFjaGZuKGFyciwgZnVuY3Rpb24gKHgsIGluZGV4LCBjYikge1xuICAgICAgICAgICAgZm4oeCwgZnVuY3Rpb24gKGVyciwgeSkge1xuICAgICAgICAgICAgICAgIHJlc3VsdCA9IHJlc3VsdC5jb25jYXQoeSB8fCBbXSk7XG4gICAgICAgICAgICAgICAgY2IoZXJyKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICBjYWxsYmFjayhlcnIsIHJlc3VsdCk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBhc3luYy5jb25jYXQgPSBkb1BhcmFsbGVsKF9jb25jYXQpO1xuICAgIGFzeW5jLmNvbmNhdFNlcmllcyA9IGRvU2VyaWVzKF9jb25jYXQpO1xuXG4gICAgYXN5bmMud2hpbHN0ID0gZnVuY3Rpb24gKHRlc3QsIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICBjYWxsYmFjayA9IGNhbGxiYWNrIHx8IG5vb3A7XG4gICAgICAgIGlmICh0ZXN0KCkpIHtcbiAgICAgICAgICAgIHZhciBuZXh0ID0gX3Jlc3RQYXJhbShmdW5jdGlvbihlcnIsIGFyZ3MpIHtcbiAgICAgICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0ZXN0LmFwcGx5KHRoaXMsIGFyZ3MpKSB7XG4gICAgICAgICAgICAgICAgICAgIGl0ZXJhdG9yKG5leHQpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKG51bGwpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgaXRlcmF0b3IobmV4dCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjYWxsYmFjayhudWxsKTtcbiAgICAgICAgfVxuICAgIH07XG5cbiAgICBhc3luYy5kb1doaWxzdCA9IGZ1bmN0aW9uIChpdGVyYXRvciwgdGVzdCwgY2FsbGJhY2spIHtcbiAgICAgICAgdmFyIGNhbGxzID0gMDtcbiAgICAgICAgcmV0dXJuIGFzeW5jLndoaWxzdChmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIHJldHVybiArK2NhbGxzIDw9IDEgfHwgdGVzdC5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgICAgICB9LCBpdGVyYXRvciwgY2FsbGJhY2spO1xuICAgIH07XG5cbiAgICBhc3luYy51bnRpbCA9IGZ1bmN0aW9uICh0ZXN0LCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgcmV0dXJuIGFzeW5jLndoaWxzdChmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIHJldHVybiAhdGVzdC5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgICAgICB9LCBpdGVyYXRvciwgY2FsbGJhY2spO1xuICAgIH07XG5cbiAgICBhc3luYy5kb1VudGlsID0gZnVuY3Rpb24gKGl0ZXJhdG9yLCB0ZXN0LCBjYWxsYmFjaykge1xuICAgICAgICByZXR1cm4gYXN5bmMuZG9XaGlsc3QoaXRlcmF0b3IsIGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgcmV0dXJuICF0ZXN0LmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgICAgIH0sIGNhbGxiYWNrKTtcbiAgICB9O1xuXG4gICAgYXN5bmMuZHVyaW5nID0gZnVuY3Rpb24gKHRlc3QsIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICBjYWxsYmFjayA9IGNhbGxiYWNrIHx8IG5vb3A7XG5cbiAgICAgICAgdmFyIG5leHQgPSBfcmVzdFBhcmFtKGZ1bmN0aW9uKGVyciwgYXJncykge1xuICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGFyZ3MucHVzaChjaGVjayk7XG4gICAgICAgICAgICAgICAgdGVzdC5hcHBseSh0aGlzLCBhcmdzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgdmFyIGNoZWNrID0gZnVuY3Rpb24oZXJyLCB0cnV0aCkge1xuICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHRydXRoKSB7XG4gICAgICAgICAgICAgICAgaXRlcmF0b3IobmV4dCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrKG51bGwpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuXG4gICAgICAgIHRlc3QoY2hlY2spO1xuICAgIH07XG5cbiAgICBhc3luYy5kb0R1cmluZyA9IGZ1bmN0aW9uIChpdGVyYXRvciwgdGVzdCwgY2FsbGJhY2spIHtcbiAgICAgICAgdmFyIGNhbGxzID0gMDtcbiAgICAgICAgYXN5bmMuZHVyaW5nKGZ1bmN0aW9uKG5leHQpIHtcbiAgICAgICAgICAgIGlmIChjYWxscysrIDwgMSkge1xuICAgICAgICAgICAgICAgIG5leHQobnVsbCwgdHJ1ZSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRlc3QuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSwgaXRlcmF0b3IsIGNhbGxiYWNrKTtcbiAgICB9O1xuXG4gICAgZnVuY3Rpb24gX3F1ZXVlKHdvcmtlciwgY29uY3VycmVuY3ksIHBheWxvYWQpIHtcbiAgICAgICAgaWYgKGNvbmN1cnJlbmN5ID09IG51bGwpIHtcbiAgICAgICAgICAgIGNvbmN1cnJlbmN5ID0gMTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmKGNvbmN1cnJlbmN5ID09PSAwKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0NvbmN1cnJlbmN5IG11c3Qgbm90IGJlIHplcm8nKTtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBfaW5zZXJ0KHEsIGRhdGEsIHBvcywgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIGlmIChjYWxsYmFjayAhPSBudWxsICYmIHR5cGVvZiBjYWxsYmFjayAhPT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwidGFzayBjYWxsYmFjayBtdXN0IGJlIGEgZnVuY3Rpb25cIik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBxLnN0YXJ0ZWQgPSB0cnVlO1xuICAgICAgICAgICAgaWYgKCFfaXNBcnJheShkYXRhKSkge1xuICAgICAgICAgICAgICAgIGRhdGEgPSBbZGF0YV07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZihkYXRhLmxlbmd0aCA9PT0gMCAmJiBxLmlkbGUoKSkge1xuICAgICAgICAgICAgICAgIC8vIGNhbGwgZHJhaW4gaW1tZWRpYXRlbHkgaWYgdGhlcmUgYXJlIG5vIHRhc2tzXG4gICAgICAgICAgICAgICAgcmV0dXJuIGFzeW5jLnNldEltbWVkaWF0ZShmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgICAgcS5kcmFpbigpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgX2FycmF5RWFjaChkYXRhLCBmdW5jdGlvbih0YXNrKSB7XG4gICAgICAgICAgICAgICAgdmFyIGl0ZW0gPSB7XG4gICAgICAgICAgICAgICAgICAgIGRhdGE6IHRhc2ssXG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrOiBjYWxsYmFjayB8fCBub29wXG4gICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgIGlmIChwb3MpIHtcbiAgICAgICAgICAgICAgICAgICAgcS50YXNrcy51bnNoaWZ0KGl0ZW0pO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHEudGFza3MucHVzaChpdGVtKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAocS50YXNrcy5sZW5ndGggPT09IHEuY29uY3VycmVuY3kpIHtcbiAgICAgICAgICAgICAgICAgICAgcS5zYXR1cmF0ZWQoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGFzeW5jLnNldEltbWVkaWF0ZShxLnByb2Nlc3MpO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIF9uZXh0KHEsIHRhc2tzKSB7XG4gICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24oKXtcbiAgICAgICAgICAgICAgICB3b3JrZXJzIC09IDE7XG5cbiAgICAgICAgICAgICAgICB2YXIgcmVtb3ZlZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHZhciBhcmdzID0gYXJndW1lbnRzO1xuICAgICAgICAgICAgICAgIF9hcnJheUVhY2godGFza3MsIGZ1bmN0aW9uICh0YXNrKSB7XG4gICAgICAgICAgICAgICAgICAgIF9hcnJheUVhY2god29ya2Vyc0xpc3QsIGZ1bmN0aW9uICh3b3JrZXIsIGluZGV4KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAod29ya2VyID09PSB0YXNrICYmICFyZW1vdmVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd29ya2Vyc0xpc3Quc3BsaWNlKGluZGV4LCAxKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZW1vdmVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICAgICAgdGFzay5jYWxsYmFjay5hcHBseSh0YXNrLCBhcmdzKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBpZiAocS50YXNrcy5sZW5ndGggKyB3b3JrZXJzID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIHEuZHJhaW4oKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcS5wcm9jZXNzKCk7XG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIHdvcmtlcnMgPSAwO1xuICAgICAgICB2YXIgd29ya2Vyc0xpc3QgPSBbXTtcbiAgICAgICAgdmFyIHEgPSB7XG4gICAgICAgICAgICB0YXNrczogW10sXG4gICAgICAgICAgICBjb25jdXJyZW5jeTogY29uY3VycmVuY3ksXG4gICAgICAgICAgICBwYXlsb2FkOiBwYXlsb2FkLFxuICAgICAgICAgICAgc2F0dXJhdGVkOiBub29wLFxuICAgICAgICAgICAgZW1wdHk6IG5vb3AsXG4gICAgICAgICAgICBkcmFpbjogbm9vcCxcbiAgICAgICAgICAgIHN0YXJ0ZWQ6IGZhbHNlLFxuICAgICAgICAgICAgcGF1c2VkOiBmYWxzZSxcbiAgICAgICAgICAgIHB1c2g6IGZ1bmN0aW9uIChkYXRhLCBjYWxsYmFjaykge1xuICAgICAgICAgICAgICAgIF9pbnNlcnQocSwgZGF0YSwgZmFsc2UsIGNhbGxiYWNrKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBraWxsOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgcS5kcmFpbiA9IG5vb3A7XG4gICAgICAgICAgICAgICAgcS50YXNrcyA9IFtdO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHVuc2hpZnQ6IGZ1bmN0aW9uIChkYXRhLCBjYWxsYmFjaykge1xuICAgICAgICAgICAgICAgIF9pbnNlcnQocSwgZGF0YSwgdHJ1ZSwgY2FsbGJhY2spO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHByb2Nlc3M6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBpZiAoIXEucGF1c2VkICYmIHdvcmtlcnMgPCBxLmNvbmN1cnJlbmN5ICYmIHEudGFza3MubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgIHdoaWxlKHdvcmtlcnMgPCBxLmNvbmN1cnJlbmN5ICYmIHEudGFza3MubGVuZ3RoKXtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0YXNrcyA9IHEucGF5bG9hZCA/XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcS50YXNrcy5zcGxpY2UoMCwgcS5wYXlsb2FkKSA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcS50YXNrcy5zcGxpY2UoMCwgcS50YXNrcy5sZW5ndGgpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgZGF0YSA9IF9tYXAodGFza3MsIGZ1bmN0aW9uICh0YXNrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRhc2suZGF0YTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocS50YXNrcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBxLmVtcHR5KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB3b3JrZXJzICs9IDE7XG4gICAgICAgICAgICAgICAgICAgICAgICB3b3JrZXJzTGlzdC5wdXNoKHRhc2tzWzBdKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjYiA9IG9ubHlfb25jZShfbmV4dChxLCB0YXNrcykpO1xuICAgICAgICAgICAgICAgICAgICAgICAgd29ya2VyKGRhdGEsIGNiKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBsZW5ndGg6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcS50YXNrcy5sZW5ndGg7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcnVubmluZzogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB3b3JrZXJzO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHdvcmtlcnNMaXN0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHdvcmtlcnNMaXN0O1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGlkbGU6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBxLnRhc2tzLmxlbmd0aCArIHdvcmtlcnMgPT09IDA7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcGF1c2U6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBxLnBhdXNlZCA9IHRydWU7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcmVzdW1lOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgaWYgKHEucGF1c2VkID09PSBmYWxzZSkgeyByZXR1cm47IH1cbiAgICAgICAgICAgICAgICBxLnBhdXNlZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHZhciByZXN1bWVDb3VudCA9IE1hdGgubWluKHEuY29uY3VycmVuY3ksIHEudGFza3MubGVuZ3RoKTtcbiAgICAgICAgICAgICAgICAvLyBOZWVkIHRvIGNhbGwgcS5wcm9jZXNzIG9uY2UgcGVyIGNvbmN1cnJlbnRcbiAgICAgICAgICAgICAgICAvLyB3b3JrZXIgdG8gcHJlc2VydmUgZnVsbCBjb25jdXJyZW5jeSBhZnRlciBwYXVzZVxuICAgICAgICAgICAgICAgIGZvciAodmFyIHcgPSAxOyB3IDw9IHJlc3VtZUNvdW50OyB3KyspIHtcbiAgICAgICAgICAgICAgICAgICAgYXN5bmMuc2V0SW1tZWRpYXRlKHEucHJvY2Vzcyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gcTtcbiAgICB9XG5cbiAgICBhc3luYy5xdWV1ZSA9IGZ1bmN0aW9uICh3b3JrZXIsIGNvbmN1cnJlbmN5KSB7XG4gICAgICAgIHZhciBxID0gX3F1ZXVlKGZ1bmN0aW9uIChpdGVtcywgY2IpIHtcbiAgICAgICAgICAgIHdvcmtlcihpdGVtc1swXSwgY2IpO1xuICAgICAgICB9LCBjb25jdXJyZW5jeSwgMSk7XG5cbiAgICAgICAgcmV0dXJuIHE7XG4gICAgfTtcblxuICAgIGFzeW5jLnByaW9yaXR5UXVldWUgPSBmdW5jdGlvbiAod29ya2VyLCBjb25jdXJyZW5jeSkge1xuXG4gICAgICAgIGZ1bmN0aW9uIF9jb21wYXJlVGFza3MoYSwgYil7XG4gICAgICAgICAgICByZXR1cm4gYS5wcmlvcml0eSAtIGIucHJpb3JpdHk7XG4gICAgICAgIH1cblxuICAgICAgICBmdW5jdGlvbiBfYmluYXJ5U2VhcmNoKHNlcXVlbmNlLCBpdGVtLCBjb21wYXJlKSB7XG4gICAgICAgICAgICB2YXIgYmVnID0gLTEsXG4gICAgICAgICAgICAgICAgZW5kID0gc2VxdWVuY2UubGVuZ3RoIC0gMTtcbiAgICAgICAgICAgIHdoaWxlIChiZWcgPCBlbmQpIHtcbiAgICAgICAgICAgICAgICB2YXIgbWlkID0gYmVnICsgKChlbmQgLSBiZWcgKyAxKSA+Pj4gMSk7XG4gICAgICAgICAgICAgICAgaWYgKGNvbXBhcmUoaXRlbSwgc2VxdWVuY2VbbWlkXSkgPj0gMCkge1xuICAgICAgICAgICAgICAgICAgICBiZWcgPSBtaWQ7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgZW5kID0gbWlkIC0gMTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gYmVnO1xuICAgICAgICB9XG5cbiAgICAgICAgZnVuY3Rpb24gX2luc2VydChxLCBkYXRhLCBwcmlvcml0eSwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIGlmIChjYWxsYmFjayAhPSBudWxsICYmIHR5cGVvZiBjYWxsYmFjayAhPT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwidGFzayBjYWxsYmFjayBtdXN0IGJlIGEgZnVuY3Rpb25cIik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBxLnN0YXJ0ZWQgPSB0cnVlO1xuICAgICAgICAgICAgaWYgKCFfaXNBcnJheShkYXRhKSkge1xuICAgICAgICAgICAgICAgIGRhdGEgPSBbZGF0YV07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZihkYXRhLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICAgIC8vIGNhbGwgZHJhaW4gaW1tZWRpYXRlbHkgaWYgdGhlcmUgYXJlIG5vIHRhc2tzXG4gICAgICAgICAgICAgICAgcmV0dXJuIGFzeW5jLnNldEltbWVkaWF0ZShmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgICAgcS5kcmFpbigpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgX2FycmF5RWFjaChkYXRhLCBmdW5jdGlvbih0YXNrKSB7XG4gICAgICAgICAgICAgICAgdmFyIGl0ZW0gPSB7XG4gICAgICAgICAgICAgICAgICAgIGRhdGE6IHRhc2ssXG4gICAgICAgICAgICAgICAgICAgIHByaW9yaXR5OiBwcmlvcml0eSxcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2s6IHR5cGVvZiBjYWxsYmFjayA9PT0gJ2Z1bmN0aW9uJyA/IGNhbGxiYWNrIDogbm9vcFxuICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICBxLnRhc2tzLnNwbGljZShfYmluYXJ5U2VhcmNoKHEudGFza3MsIGl0ZW0sIF9jb21wYXJlVGFza3MpICsgMSwgMCwgaXRlbSk7XG5cbiAgICAgICAgICAgICAgICBpZiAocS50YXNrcy5sZW5ndGggPT09IHEuY29uY3VycmVuY3kpIHtcbiAgICAgICAgICAgICAgICAgICAgcS5zYXR1cmF0ZWQoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYXN5bmMuc2V0SW1tZWRpYXRlKHEucHJvY2Vzcyk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFN0YXJ0IHdpdGggYSBub3JtYWwgcXVldWVcbiAgICAgICAgdmFyIHEgPSBhc3luYy5xdWV1ZSh3b3JrZXIsIGNvbmN1cnJlbmN5KTtcblxuICAgICAgICAvLyBPdmVycmlkZSBwdXNoIHRvIGFjY2VwdCBzZWNvbmQgcGFyYW1ldGVyIHJlcHJlc2VudGluZyBwcmlvcml0eVxuICAgICAgICBxLnB1c2ggPSBmdW5jdGlvbiAoZGF0YSwgcHJpb3JpdHksIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICBfaW5zZXJ0KHEsIGRhdGEsIHByaW9yaXR5LCBjYWxsYmFjayk7XG4gICAgICAgIH07XG5cbiAgICAgICAgLy8gUmVtb3ZlIHVuc2hpZnQgZnVuY3Rpb25cbiAgICAgICAgZGVsZXRlIHEudW5zaGlmdDtcblxuICAgICAgICByZXR1cm4gcTtcbiAgICB9O1xuXG4gICAgYXN5bmMuY2FyZ28gPSBmdW5jdGlvbiAod29ya2VyLCBwYXlsb2FkKSB7XG4gICAgICAgIHJldHVybiBfcXVldWUod29ya2VyLCAxLCBwYXlsb2FkKTtcbiAgICB9O1xuXG4gICAgZnVuY3Rpb24gX2NvbnNvbGVfZm4obmFtZSkge1xuICAgICAgICByZXR1cm4gX3Jlc3RQYXJhbShmdW5jdGlvbiAoZm4sIGFyZ3MpIHtcbiAgICAgICAgICAgIGZuLmFwcGx5KG51bGwsIGFyZ3MuY29uY2F0KFtfcmVzdFBhcmFtKGZ1bmN0aW9uIChlcnIsIGFyZ3MpIHtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGNvbnNvbGUgPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb25zb2xlLmVycm9yKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihlcnIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKGNvbnNvbGVbbmFtZV0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIF9hcnJheUVhY2goYXJncywgZnVuY3Rpb24gKHgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlW25hbWVdKHgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KV0pKTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGFzeW5jLmxvZyA9IF9jb25zb2xlX2ZuKCdsb2cnKTtcbiAgICBhc3luYy5kaXIgPSBfY29uc29sZV9mbignZGlyJyk7XG4gICAgLyphc3luYy5pbmZvID0gX2NvbnNvbGVfZm4oJ2luZm8nKTtcbiAgICBhc3luYy53YXJuID0gX2NvbnNvbGVfZm4oJ3dhcm4nKTtcbiAgICBhc3luYy5lcnJvciA9IF9jb25zb2xlX2ZuKCdlcnJvcicpOyovXG5cbiAgICBhc3luYy5tZW1vaXplID0gZnVuY3Rpb24gKGZuLCBoYXNoZXIpIHtcbiAgICAgICAgdmFyIG1lbW8gPSB7fTtcbiAgICAgICAgdmFyIHF1ZXVlcyA9IHt9O1xuICAgICAgICBoYXNoZXIgPSBoYXNoZXIgfHwgaWRlbnRpdHk7XG4gICAgICAgIHZhciBtZW1vaXplZCA9IF9yZXN0UGFyYW0oZnVuY3Rpb24gbWVtb2l6ZWQoYXJncykge1xuICAgICAgICAgICAgdmFyIGNhbGxiYWNrID0gYXJncy5wb3AoKTtcbiAgICAgICAgICAgIHZhciBrZXkgPSBoYXNoZXIuYXBwbHkobnVsbCwgYXJncyk7XG4gICAgICAgICAgICBpZiAoa2V5IGluIG1lbW8pIHtcbiAgICAgICAgICAgICAgICBhc3luYy5zZXRJbW1lZGlhdGUoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjay5hcHBseShudWxsLCBtZW1vW2tleV0pO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoa2V5IGluIHF1ZXVlcykge1xuICAgICAgICAgICAgICAgIHF1ZXVlc1trZXldLnB1c2goY2FsbGJhY2spO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgcXVldWVzW2tleV0gPSBbY2FsbGJhY2tdO1xuICAgICAgICAgICAgICAgIGZuLmFwcGx5KG51bGwsIGFyZ3MuY29uY2F0KFtfcmVzdFBhcmFtKGZ1bmN0aW9uIChhcmdzKSB7XG4gICAgICAgICAgICAgICAgICAgIG1lbW9ba2V5XSA9IGFyZ3M7XG4gICAgICAgICAgICAgICAgICAgIHZhciBxID0gcXVldWVzW2tleV07XG4gICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBxdWV1ZXNba2V5XTtcbiAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDAsIGwgPSBxLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgcVtpXS5hcHBseShudWxsLCBhcmdzKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pXSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgbWVtb2l6ZWQubWVtbyA9IG1lbW87XG4gICAgICAgIG1lbW9pemVkLnVubWVtb2l6ZWQgPSBmbjtcbiAgICAgICAgcmV0dXJuIG1lbW9pemVkO1xuICAgIH07XG5cbiAgICBhc3luYy51bm1lbW9pemUgPSBmdW5jdGlvbiAoZm4pIHtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiAoZm4udW5tZW1vaXplZCB8fCBmbikuYXBwbHkobnVsbCwgYXJndW1lbnRzKTtcbiAgICAgICAgfTtcbiAgICB9O1xuXG4gICAgZnVuY3Rpb24gX3RpbWVzKG1hcHBlcikge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKGNvdW50LCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIG1hcHBlcihfcmFuZ2UoY291bnQpLCBpdGVyYXRvciwgY2FsbGJhY2spO1xuICAgICAgICB9O1xuICAgIH1cblxuICAgIGFzeW5jLnRpbWVzID0gX3RpbWVzKGFzeW5jLm1hcCk7XG4gICAgYXN5bmMudGltZXNTZXJpZXMgPSBfdGltZXMoYXN5bmMubWFwU2VyaWVzKTtcbiAgICBhc3luYy50aW1lc0xpbWl0ID0gZnVuY3Rpb24gKGNvdW50LCBsaW1pdCwgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgIHJldHVybiBhc3luYy5tYXBMaW1pdChfcmFuZ2UoY291bnQpLCBsaW1pdCwgaXRlcmF0b3IsIGNhbGxiYWNrKTtcbiAgICB9O1xuXG4gICAgYXN5bmMuc2VxID0gZnVuY3Rpb24gKC8qIGZ1bmN0aW9ucy4uLiAqLykge1xuICAgICAgICB2YXIgZm5zID0gYXJndW1lbnRzO1xuICAgICAgICByZXR1cm4gX3Jlc3RQYXJhbShmdW5jdGlvbiAoYXJncykge1xuICAgICAgICAgICAgdmFyIHRoYXQgPSB0aGlzO1xuXG4gICAgICAgICAgICB2YXIgY2FsbGJhY2sgPSBhcmdzW2FyZ3MubGVuZ3RoIC0gMV07XG4gICAgICAgICAgICBpZiAodHlwZW9mIGNhbGxiYWNrID09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICBhcmdzLnBvcCgpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBjYWxsYmFjayA9IG5vb3A7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGFzeW5jLnJlZHVjZShmbnMsIGFyZ3MsIGZ1bmN0aW9uIChuZXdhcmdzLCBmbiwgY2IpIHtcbiAgICAgICAgICAgICAgICBmbi5hcHBseSh0aGF0LCBuZXdhcmdzLmNvbmNhdChbX3Jlc3RQYXJhbShmdW5jdGlvbiAoZXJyLCBuZXh0YXJncykge1xuICAgICAgICAgICAgICAgICAgICBjYihlcnIsIG5leHRhcmdzKTtcbiAgICAgICAgICAgICAgICB9KV0pKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBmdW5jdGlvbiAoZXJyLCByZXN1bHRzKSB7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2suYXBwbHkodGhhdCwgW2Vycl0uY29uY2F0KHJlc3VsdHMpKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9O1xuXG4gICAgYXN5bmMuY29tcG9zZSA9IGZ1bmN0aW9uICgvKiBmdW5jdGlvbnMuLi4gKi8pIHtcbiAgICAgICAgcmV0dXJuIGFzeW5jLnNlcS5hcHBseShudWxsLCBBcnJheS5wcm90b3R5cGUucmV2ZXJzZS5jYWxsKGFyZ3VtZW50cykpO1xuICAgIH07XG5cblxuICAgIGZ1bmN0aW9uIF9hcHBseUVhY2goZWFjaGZuKSB7XG4gICAgICAgIHJldHVybiBfcmVzdFBhcmFtKGZ1bmN0aW9uKGZucywgYXJncykge1xuICAgICAgICAgICAgdmFyIGdvID0gX3Jlc3RQYXJhbShmdW5jdGlvbihhcmdzKSB7XG4gICAgICAgICAgICAgICAgdmFyIHRoYXQgPSB0aGlzO1xuICAgICAgICAgICAgICAgIHZhciBjYWxsYmFjayA9IGFyZ3MucG9wKCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGVhY2hmbihmbnMsIGZ1bmN0aW9uIChmbiwgXywgY2IpIHtcbiAgICAgICAgICAgICAgICAgICAgZm4uYXBwbHkodGhhdCwgYXJncy5jb25jYXQoW2NiXSkpO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgY2FsbGJhY2spO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBpZiAoYXJncy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZ28uYXBwbHkodGhpcywgYXJncyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZ287XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGFzeW5jLmFwcGx5RWFjaCA9IF9hcHBseUVhY2goYXN5bmMuZWFjaE9mKTtcbiAgICBhc3luYy5hcHBseUVhY2hTZXJpZXMgPSBfYXBwbHlFYWNoKGFzeW5jLmVhY2hPZlNlcmllcyk7XG5cblxuICAgIGFzeW5jLmZvcmV2ZXIgPSBmdW5jdGlvbiAoZm4sIGNhbGxiYWNrKSB7XG4gICAgICAgIHZhciBkb25lID0gb25seV9vbmNlKGNhbGxiYWNrIHx8IG5vb3ApO1xuICAgICAgICB2YXIgdGFzayA9IGVuc3VyZUFzeW5jKGZuKTtcbiAgICAgICAgZnVuY3Rpb24gbmV4dChlcnIpIHtcbiAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZG9uZShlcnIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGFzayhuZXh0KTtcbiAgICAgICAgfVxuICAgICAgICBuZXh0KCk7XG4gICAgfTtcblxuICAgIGZ1bmN0aW9uIGVuc3VyZUFzeW5jKGZuKSB7XG4gICAgICAgIHJldHVybiBfcmVzdFBhcmFtKGZ1bmN0aW9uIChhcmdzKSB7XG4gICAgICAgICAgICB2YXIgY2FsbGJhY2sgPSBhcmdzLnBvcCgpO1xuICAgICAgICAgICAgYXJncy5wdXNoKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICB2YXIgaW5uZXJBcmdzID0gYXJndW1lbnRzO1xuICAgICAgICAgICAgICAgIGlmIChzeW5jKSB7XG4gICAgICAgICAgICAgICAgICAgIGFzeW5jLnNldEltbWVkaWF0ZShmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjYWxsYmFjay5hcHBseShudWxsLCBpbm5lckFyZ3MpO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjay5hcHBseShudWxsLCBpbm5lckFyZ3MpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdmFyIHN5bmMgPSB0cnVlO1xuICAgICAgICAgICAgZm4uYXBwbHkodGhpcywgYXJncyk7XG4gICAgICAgICAgICBzeW5jID0gZmFsc2U7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGFzeW5jLmVuc3VyZUFzeW5jID0gZW5zdXJlQXN5bmM7XG5cbiAgICBhc3luYy5jb25zdGFudCA9IF9yZXN0UGFyYW0oZnVuY3Rpb24odmFsdWVzKSB7XG4gICAgICAgIHZhciBhcmdzID0gW251bGxdLmNvbmNhdCh2YWx1ZXMpO1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKGNhbGxiYWNrKSB7XG4gICAgICAgICAgICByZXR1cm4gY2FsbGJhY2suYXBwbHkodGhpcywgYXJncyk7XG4gICAgICAgIH07XG4gICAgfSk7XG5cbiAgICBhc3luYy53cmFwU3luYyA9XG4gICAgYXN5bmMuYXN5bmNpZnkgPSBmdW5jdGlvbiBhc3luY2lmeShmdW5jKSB7XG4gICAgICAgIHJldHVybiBfcmVzdFBhcmFtKGZ1bmN0aW9uIChhcmdzKSB7XG4gICAgICAgICAgICB2YXIgY2FsbGJhY2sgPSBhcmdzLnBvcCgpO1xuICAgICAgICAgICAgdmFyIHJlc3VsdDtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0ID0gZnVuYy5hcHBseSh0aGlzLCBhcmdzKTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gY2FsbGJhY2soZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBpZiByZXN1bHQgaXMgUHJvbWlzZSBvYmplY3RcbiAgICAgICAgICAgIGlmIChfaXNPYmplY3QocmVzdWx0KSAmJiB0eXBlb2YgcmVzdWx0LnRoZW4gPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICAgICAgICAgIHJlc3VsdC50aGVuKGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKG51bGwsIHZhbHVlKTtcbiAgICAgICAgICAgICAgICB9KVtcImNhdGNoXCJdKGZ1bmN0aW9uKGVycikge1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnIubWVzc2FnZSA/IGVyciA6IG5ldyBFcnJvcihlcnIpKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2sobnVsbCwgcmVzdWx0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfTtcblxuICAgIC8vIE5vZGUuanNcbiAgICBpZiAodHlwZW9mIG1vZHVsZSA9PT0gJ29iamVjdCcgJiYgbW9kdWxlLmV4cG9ydHMpIHtcbiAgICAgICAgbW9kdWxlLmV4cG9ydHMgPSBhc3luYztcbiAgICB9XG4gICAgLy8gQU1EIC8gUmVxdWlyZUpTXG4gICAgZWxzZSBpZiAodHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kKSB7XG4gICAgICAgIGRlZmluZShbXSwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIGFzeW5jO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgLy8gaW5jbHVkZWQgZGlyZWN0bHkgdmlhIDxzY3JpcHQ+IHRhZ1xuICAgIGVsc2Uge1xuICAgICAgICByb290LmFzeW5jID0gYXN5bmM7XG4gICAgfVxuXG59KCkpO1xuIiwiLy8gQ29weXJpZ2h0IEpveWVudCwgSW5jLiBhbmQgb3RoZXIgTm9kZSBjb250cmlidXRvcnMuXG4vL1xuLy8gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGFcbi8vIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGVcbi8vIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZ1xuLy8gd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLFxuLy8gZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdFxuLy8gcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlXG4vLyBmb2xsb3dpbmcgY29uZGl0aW9uczpcbi8vXG4vLyBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZFxuLy8gaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4vL1xuLy8gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTU1xuLy8gT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRlxuLy8gTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTlxuLy8gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sXG4vLyBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1Jcbi8vIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEVcbi8vIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG5cbi8vIHJlc29sdmVzIC4gYW5kIC4uIGVsZW1lbnRzIGluIGEgcGF0aCBhcnJheSB3aXRoIGRpcmVjdG9yeSBuYW1lcyB0aGVyZVxuLy8gbXVzdCBiZSBubyBzbGFzaGVzLCBlbXB0eSBlbGVtZW50cywgb3IgZGV2aWNlIG5hbWVzIChjOlxcKSBpbiB0aGUgYXJyYXlcbi8vIChzbyBhbHNvIG5vIGxlYWRpbmcgYW5kIHRyYWlsaW5nIHNsYXNoZXMgLSBpdCBkb2VzIG5vdCBkaXN0aW5ndWlzaFxuLy8gcmVsYXRpdmUgYW5kIGFic29sdXRlIHBhdGhzKVxuZnVuY3Rpb24gbm9ybWFsaXplQXJyYXkocGFydHMsIGFsbG93QWJvdmVSb290KSB7XG4gIC8vIGlmIHRoZSBwYXRoIHRyaWVzIHRvIGdvIGFib3ZlIHRoZSByb290LCBgdXBgIGVuZHMgdXAgPiAwXG4gIHZhciB1cCA9IDA7XG4gIGZvciAodmFyIGkgPSBwYXJ0cy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgIHZhciBsYXN0ID0gcGFydHNbaV07XG4gICAgaWYgKGxhc3QgPT09ICcuJykge1xuICAgICAgcGFydHMuc3BsaWNlKGksIDEpO1xuICAgIH0gZWxzZSBpZiAobGFzdCA9PT0gJy4uJykge1xuICAgICAgcGFydHMuc3BsaWNlKGksIDEpO1xuICAgICAgdXArKztcbiAgICB9IGVsc2UgaWYgKHVwKSB7XG4gICAgICBwYXJ0cy5zcGxpY2UoaSwgMSk7XG4gICAgICB1cC0tO1xuICAgIH1cbiAgfVxuXG4gIC8vIGlmIHRoZSBwYXRoIGlzIGFsbG93ZWQgdG8gZ28gYWJvdmUgdGhlIHJvb3QsIHJlc3RvcmUgbGVhZGluZyAuLnNcbiAgaWYgKGFsbG93QWJvdmVSb290KSB7XG4gICAgZm9yICg7IHVwLS07IHVwKSB7XG4gICAgICBwYXJ0cy51bnNoaWZ0KCcuLicpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBwYXJ0cztcbn1cblxuLy8gU3BsaXQgYSBmaWxlbmFtZSBpbnRvIFtyb290LCBkaXIsIGJhc2VuYW1lLCBleHRdLCB1bml4IHZlcnNpb25cbi8vICdyb290JyBpcyBqdXN0IGEgc2xhc2gsIG9yIG5vdGhpbmcuXG52YXIgc3BsaXRQYXRoUmUgPVxuICAgIC9eKFxcLz98KShbXFxzXFxTXSo/KSgoPzpcXC57MSwyfXxbXlxcL10rP3wpKFxcLlteLlxcL10qfCkpKD86W1xcL10qKSQvO1xudmFyIHNwbGl0UGF0aCA9IGZ1bmN0aW9uKGZpbGVuYW1lKSB7XG4gIHJldHVybiBzcGxpdFBhdGhSZS5leGVjKGZpbGVuYW1lKS5zbGljZSgxKTtcbn07XG5cbi8vIHBhdGgucmVzb2x2ZShbZnJvbSAuLi5dLCB0bylcbi8vIHBvc2l4IHZlcnNpb25cbmV4cG9ydHMucmVzb2x2ZSA9IGZ1bmN0aW9uKCkge1xuICB2YXIgcmVzb2x2ZWRQYXRoID0gJycsXG4gICAgICByZXNvbHZlZEFic29sdXRlID0gZmFsc2U7XG5cbiAgZm9yICh2YXIgaSA9IGFyZ3VtZW50cy5sZW5ndGggLSAxOyBpID49IC0xICYmICFyZXNvbHZlZEFic29sdXRlOyBpLS0pIHtcbiAgICB2YXIgcGF0aCA9IChpID49IDApID8gYXJndW1lbnRzW2ldIDogcHJvY2Vzcy5jd2QoKTtcblxuICAgIC8vIFNraXAgZW1wdHkgYW5kIGludmFsaWQgZW50cmllc1xuICAgIGlmICh0eXBlb2YgcGF0aCAhPT0gJ3N0cmluZycpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0FyZ3VtZW50cyB0byBwYXRoLnJlc29sdmUgbXVzdCBiZSBzdHJpbmdzJyk7XG4gICAgfSBlbHNlIGlmICghcGF0aCkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgcmVzb2x2ZWRQYXRoID0gcGF0aCArICcvJyArIHJlc29sdmVkUGF0aDtcbiAgICByZXNvbHZlZEFic29sdXRlID0gcGF0aC5jaGFyQXQoMCkgPT09ICcvJztcbiAgfVxuXG4gIC8vIEF0IHRoaXMgcG9pbnQgdGhlIHBhdGggc2hvdWxkIGJlIHJlc29sdmVkIHRvIGEgZnVsbCBhYnNvbHV0ZSBwYXRoLCBidXRcbiAgLy8gaGFuZGxlIHJlbGF0aXZlIHBhdGhzIHRvIGJlIHNhZmUgKG1pZ2h0IGhhcHBlbiB3aGVuIHByb2Nlc3MuY3dkKCkgZmFpbHMpXG5cbiAgLy8gTm9ybWFsaXplIHRoZSBwYXRoXG4gIHJlc29sdmVkUGF0aCA9IG5vcm1hbGl6ZUFycmF5KGZpbHRlcihyZXNvbHZlZFBhdGguc3BsaXQoJy8nKSwgZnVuY3Rpb24ocCkge1xuICAgIHJldHVybiAhIXA7XG4gIH0pLCAhcmVzb2x2ZWRBYnNvbHV0ZSkuam9pbignLycpO1xuXG4gIHJldHVybiAoKHJlc29sdmVkQWJzb2x1dGUgPyAnLycgOiAnJykgKyByZXNvbHZlZFBhdGgpIHx8ICcuJztcbn07XG5cbi8vIHBhdGgubm9ybWFsaXplKHBhdGgpXG4vLyBwb3NpeCB2ZXJzaW9uXG5leHBvcnRzLm5vcm1hbGl6ZSA9IGZ1bmN0aW9uKHBhdGgpIHtcbiAgdmFyIGlzQWJzb2x1dGUgPSBleHBvcnRzLmlzQWJzb2x1dGUocGF0aCksXG4gICAgICB0cmFpbGluZ1NsYXNoID0gc3Vic3RyKHBhdGgsIC0xKSA9PT0gJy8nO1xuXG4gIC8vIE5vcm1hbGl6ZSB0aGUgcGF0aFxuICBwYXRoID0gbm9ybWFsaXplQXJyYXkoZmlsdGVyKHBhdGguc3BsaXQoJy8nKSwgZnVuY3Rpb24ocCkge1xuICAgIHJldHVybiAhIXA7XG4gIH0pLCAhaXNBYnNvbHV0ZSkuam9pbignLycpO1xuXG4gIGlmICghcGF0aCAmJiAhaXNBYnNvbHV0ZSkge1xuICAgIHBhdGggPSAnLic7XG4gIH1cbiAgaWYgKHBhdGggJiYgdHJhaWxpbmdTbGFzaCkge1xuICAgIHBhdGggKz0gJy8nO1xuICB9XG5cbiAgcmV0dXJuIChpc0Fic29sdXRlID8gJy8nIDogJycpICsgcGF0aDtcbn07XG5cbi8vIHBvc2l4IHZlcnNpb25cbmV4cG9ydHMuaXNBYnNvbHV0ZSA9IGZ1bmN0aW9uKHBhdGgpIHtcbiAgcmV0dXJuIHBhdGguY2hhckF0KDApID09PSAnLyc7XG59O1xuXG4vLyBwb3NpeCB2ZXJzaW9uXG5leHBvcnRzLmpvaW4gPSBmdW5jdGlvbigpIHtcbiAgdmFyIHBhdGhzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAwKTtcbiAgcmV0dXJuIGV4cG9ydHMubm9ybWFsaXplKGZpbHRlcihwYXRocywgZnVuY3Rpb24ocCwgaW5kZXgpIHtcbiAgICBpZiAodHlwZW9mIHAgIT09ICdzdHJpbmcnKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdBcmd1bWVudHMgdG8gcGF0aC5qb2luIG11c3QgYmUgc3RyaW5ncycpO1xuICAgIH1cbiAgICByZXR1cm4gcDtcbiAgfSkuam9pbignLycpKTtcbn07XG5cblxuLy8gcGF0aC5yZWxhdGl2ZShmcm9tLCB0bylcbi8vIHBvc2l4IHZlcnNpb25cbmV4cG9ydHMucmVsYXRpdmUgPSBmdW5jdGlvbihmcm9tLCB0bykge1xuICBmcm9tID0gZXhwb3J0cy5yZXNvbHZlKGZyb20pLnN1YnN0cigxKTtcbiAgdG8gPSBleHBvcnRzLnJlc29sdmUodG8pLnN1YnN0cigxKTtcblxuICBmdW5jdGlvbiB0cmltKGFycikge1xuICAgIHZhciBzdGFydCA9IDA7XG4gICAgZm9yICg7IHN0YXJ0IDwgYXJyLmxlbmd0aDsgc3RhcnQrKykge1xuICAgICAgaWYgKGFycltzdGFydF0gIT09ICcnKSBicmVhaztcbiAgICB9XG5cbiAgICB2YXIgZW5kID0gYXJyLmxlbmd0aCAtIDE7XG4gICAgZm9yICg7IGVuZCA+PSAwOyBlbmQtLSkge1xuICAgICAgaWYgKGFycltlbmRdICE9PSAnJykgYnJlYWs7XG4gICAgfVxuXG4gICAgaWYgKHN0YXJ0ID4gZW5kKSByZXR1cm4gW107XG4gICAgcmV0dXJuIGFyci5zbGljZShzdGFydCwgZW5kIC0gc3RhcnQgKyAxKTtcbiAgfVxuXG4gIHZhciBmcm9tUGFydHMgPSB0cmltKGZyb20uc3BsaXQoJy8nKSk7XG4gIHZhciB0b1BhcnRzID0gdHJpbSh0by5zcGxpdCgnLycpKTtcblxuICB2YXIgbGVuZ3RoID0gTWF0aC5taW4oZnJvbVBhcnRzLmxlbmd0aCwgdG9QYXJ0cy5sZW5ndGgpO1xuICB2YXIgc2FtZVBhcnRzTGVuZ3RoID0gbGVuZ3RoO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgaWYgKGZyb21QYXJ0c1tpXSAhPT0gdG9QYXJ0c1tpXSkge1xuICAgICAgc2FtZVBhcnRzTGVuZ3RoID0gaTtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuXG4gIHZhciBvdXRwdXRQYXJ0cyA9IFtdO1xuICBmb3IgKHZhciBpID0gc2FtZVBhcnRzTGVuZ3RoOyBpIDwgZnJvbVBhcnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgb3V0cHV0UGFydHMucHVzaCgnLi4nKTtcbiAgfVxuXG4gIG91dHB1dFBhcnRzID0gb3V0cHV0UGFydHMuY29uY2F0KHRvUGFydHMuc2xpY2Uoc2FtZVBhcnRzTGVuZ3RoKSk7XG5cbiAgcmV0dXJuIG91dHB1dFBhcnRzLmpvaW4oJy8nKTtcbn07XG5cbmV4cG9ydHMuc2VwID0gJy8nO1xuZXhwb3J0cy5kZWxpbWl0ZXIgPSAnOic7XG5cbmV4cG9ydHMuZGlybmFtZSA9IGZ1bmN0aW9uKHBhdGgpIHtcbiAgdmFyIHJlc3VsdCA9IHNwbGl0UGF0aChwYXRoKSxcbiAgICAgIHJvb3QgPSByZXN1bHRbMF0sXG4gICAgICBkaXIgPSByZXN1bHRbMV07XG5cbiAgaWYgKCFyb290ICYmICFkaXIpIHtcbiAgICAvLyBObyBkaXJuYW1lIHdoYXRzb2V2ZXJcbiAgICByZXR1cm4gJy4nO1xuICB9XG5cbiAgaWYgKGRpcikge1xuICAgIC8vIEl0IGhhcyBhIGRpcm5hbWUsIHN0cmlwIHRyYWlsaW5nIHNsYXNoXG4gICAgZGlyID0gZGlyLnN1YnN0cigwLCBkaXIubGVuZ3RoIC0gMSk7XG4gIH1cblxuICByZXR1cm4gcm9vdCArIGRpcjtcbn07XG5cblxuZXhwb3J0cy5iYXNlbmFtZSA9IGZ1bmN0aW9uKHBhdGgsIGV4dCkge1xuICB2YXIgZiA9IHNwbGl0UGF0aChwYXRoKVsyXTtcbiAgLy8gVE9ETzogbWFrZSB0aGlzIGNvbXBhcmlzb24gY2FzZS1pbnNlbnNpdGl2ZSBvbiB3aW5kb3dzP1xuICBpZiAoZXh0ICYmIGYuc3Vic3RyKC0xICogZXh0Lmxlbmd0aCkgPT09IGV4dCkge1xuICAgIGYgPSBmLnN1YnN0cigwLCBmLmxlbmd0aCAtIGV4dC5sZW5ndGgpO1xuICB9XG4gIHJldHVybiBmO1xufTtcblxuXG5leHBvcnRzLmV4dG5hbWUgPSBmdW5jdGlvbihwYXRoKSB7XG4gIHJldHVybiBzcGxpdFBhdGgocGF0aClbM107XG59O1xuXG5mdW5jdGlvbiBmaWx0ZXIgKHhzLCBmKSB7XG4gICAgaWYgKHhzLmZpbHRlcikgcmV0dXJuIHhzLmZpbHRlcihmKTtcbiAgICB2YXIgcmVzID0gW107XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB4cy5sZW5ndGg7IGkrKykge1xuICAgICAgICBpZiAoZih4c1tpXSwgaSwgeHMpKSByZXMucHVzaCh4c1tpXSk7XG4gICAgfVxuICAgIHJldHVybiByZXM7XG59XG5cbi8vIFN0cmluZy5wcm90b3R5cGUuc3Vic3RyIC0gbmVnYXRpdmUgaW5kZXggZG9uJ3Qgd29yayBpbiBJRThcbnZhciBzdWJzdHIgPSAnYWInLnN1YnN0cigtMSkgPT09ICdiJ1xuICAgID8gZnVuY3Rpb24gKHN0ciwgc3RhcnQsIGxlbikgeyByZXR1cm4gc3RyLnN1YnN0cihzdGFydCwgbGVuKSB9XG4gICAgOiBmdW5jdGlvbiAoc3RyLCBzdGFydCwgbGVuKSB7XG4gICAgICAgIGlmIChzdGFydCA8IDApIHN0YXJ0ID0gc3RyLmxlbmd0aCArIHN0YXJ0O1xuICAgICAgICByZXR1cm4gc3RyLnN1YnN0cihzdGFydCwgbGVuKTtcbiAgICB9XG47XG4iLCIvLyBzaGltIGZvciB1c2luZyBwcm9jZXNzIGluIGJyb3dzZXJcblxudmFyIHByb2Nlc3MgPSBtb2R1bGUuZXhwb3J0cyA9IHt9O1xudmFyIHF1ZXVlID0gW107XG52YXIgZHJhaW5pbmcgPSBmYWxzZTtcbnZhciBjdXJyZW50UXVldWU7XG52YXIgcXVldWVJbmRleCA9IC0xO1xuXG5mdW5jdGlvbiBjbGVhblVwTmV4dFRpY2soKSB7XG4gICAgZHJhaW5pbmcgPSBmYWxzZTtcbiAgICBpZiAoY3VycmVudFF1ZXVlLmxlbmd0aCkge1xuICAgICAgICBxdWV1ZSA9IGN1cnJlbnRRdWV1ZS5jb25jYXQocXVldWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHF1ZXVlSW5kZXggPSAtMTtcbiAgICB9XG4gICAgaWYgKHF1ZXVlLmxlbmd0aCkge1xuICAgICAgICBkcmFpblF1ZXVlKCk7XG4gICAgfVxufVxuXG5mdW5jdGlvbiBkcmFpblF1ZXVlKCkge1xuICAgIGlmIChkcmFpbmluZykge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIHZhciB0aW1lb3V0ID0gc2V0VGltZW91dChjbGVhblVwTmV4dFRpY2spO1xuICAgIGRyYWluaW5nID0gdHJ1ZTtcblxuICAgIHZhciBsZW4gPSBxdWV1ZS5sZW5ndGg7XG4gICAgd2hpbGUobGVuKSB7XG4gICAgICAgIGN1cnJlbnRRdWV1ZSA9IHF1ZXVlO1xuICAgICAgICBxdWV1ZSA9IFtdO1xuICAgICAgICB3aGlsZSAoKytxdWV1ZUluZGV4IDwgbGVuKSB7XG4gICAgICAgICAgICBpZiAoY3VycmVudFF1ZXVlKSB7XG4gICAgICAgICAgICAgICAgY3VycmVudFF1ZXVlW3F1ZXVlSW5kZXhdLnJ1bigpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHF1ZXVlSW5kZXggPSAtMTtcbiAgICAgICAgbGVuID0gcXVldWUubGVuZ3RoO1xuICAgIH1cbiAgICBjdXJyZW50UXVldWUgPSBudWxsO1xuICAgIGRyYWluaW5nID0gZmFsc2U7XG4gICAgY2xlYXJUaW1lb3V0KHRpbWVvdXQpO1xufVxuXG5wcm9jZXNzLm5leHRUaWNrID0gZnVuY3Rpb24gKGZ1bikge1xuICAgIHZhciBhcmdzID0gbmV3IEFycmF5KGFyZ3VtZW50cy5sZW5ndGggLSAxKTtcbiAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGFyZ3NbaSAtIDFdID0gYXJndW1lbnRzW2ldO1xuICAgICAgICB9XG4gICAgfVxuICAgIHF1ZXVlLnB1c2gobmV3IEl0ZW0oZnVuLCBhcmdzKSk7XG4gICAgaWYgKHF1ZXVlLmxlbmd0aCA9PT0gMSAmJiAhZHJhaW5pbmcpIHtcbiAgICAgICAgc2V0VGltZW91dChkcmFpblF1ZXVlLCAwKTtcbiAgICB9XG59O1xuXG4vLyB2OCBsaWtlcyBwcmVkaWN0aWJsZSBvYmplY3RzXG5mdW5jdGlvbiBJdGVtKGZ1biwgYXJyYXkpIHtcbiAgICB0aGlzLmZ1biA9IGZ1bjtcbiAgICB0aGlzLmFycmF5ID0gYXJyYXk7XG59XG5JdGVtLnByb3RvdHlwZS5ydW4gPSBmdW5jdGlvbiAoKSB7XG4gICAgdGhpcy5mdW4uYXBwbHkobnVsbCwgdGhpcy5hcnJheSk7XG59O1xucHJvY2Vzcy50aXRsZSA9ICdicm93c2VyJztcbnByb2Nlc3MuYnJvd3NlciA9IHRydWU7XG5wcm9jZXNzLmVudiA9IHt9O1xucHJvY2Vzcy5hcmd2ID0gW107XG5wcm9jZXNzLnZlcnNpb24gPSAnJzsgLy8gZW1wdHkgc3RyaW5nIHRvIGF2b2lkIHJlZ2V4cCBpc3N1ZXNcbnByb2Nlc3MudmVyc2lvbnMgPSB7fTtcblxuZnVuY3Rpb24gbm9vcCgpIHt9XG5cbnByb2Nlc3Mub24gPSBub29wO1xucHJvY2Vzcy5hZGRMaXN0ZW5lciA9IG5vb3A7XG5wcm9jZXNzLm9uY2UgPSBub29wO1xucHJvY2Vzcy5vZmYgPSBub29wO1xucHJvY2Vzcy5yZW1vdmVMaXN0ZW5lciA9IG5vb3A7XG5wcm9jZXNzLnJlbW92ZUFsbExpc3RlbmVycyA9IG5vb3A7XG5wcm9jZXNzLmVtaXQgPSBub29wO1xuXG5wcm9jZXNzLmJpbmRpbmcgPSBmdW5jdGlvbiAobmFtZSkge1xuICAgIHRocm93IG5ldyBFcnJvcigncHJvY2Vzcy5iaW5kaW5nIGlzIG5vdCBzdXBwb3J0ZWQnKTtcbn07XG5cbnByb2Nlc3MuY3dkID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gJy8nIH07XG5wcm9jZXNzLmNoZGlyID0gZnVuY3Rpb24gKGRpcikge1xuICAgIHRocm93IG5ldyBFcnJvcigncHJvY2Vzcy5jaGRpciBpcyBub3Qgc3VwcG9ydGVkJyk7XG59O1xucHJvY2Vzcy51bWFzayA9IGZ1bmN0aW9uKCkgeyByZXR1cm4gMDsgfTtcbiIsIi8qISBodHRwczovL210aHMuYmUvcHVueWNvZGUgdjEuNC4wIGJ5IEBtYXRoaWFzICovXG47KGZ1bmN0aW9uKHJvb3QpIHtcblxuXHQvKiogRGV0ZWN0IGZyZWUgdmFyaWFibGVzICovXG5cdHZhciBmcmVlRXhwb3J0cyA9IHR5cGVvZiBleHBvcnRzID09ICdvYmplY3QnICYmIGV4cG9ydHMgJiZcblx0XHQhZXhwb3J0cy5ub2RlVHlwZSAmJiBleHBvcnRzO1xuXHR2YXIgZnJlZU1vZHVsZSA9IHR5cGVvZiBtb2R1bGUgPT0gJ29iamVjdCcgJiYgbW9kdWxlICYmXG5cdFx0IW1vZHVsZS5ub2RlVHlwZSAmJiBtb2R1bGU7XG5cdHZhciBmcmVlR2xvYmFsID0gdHlwZW9mIGdsb2JhbCA9PSAnb2JqZWN0JyAmJiBnbG9iYWw7XG5cdGlmIChcblx0XHRmcmVlR2xvYmFsLmdsb2JhbCA9PT0gZnJlZUdsb2JhbCB8fFxuXHRcdGZyZWVHbG9iYWwud2luZG93ID09PSBmcmVlR2xvYmFsIHx8XG5cdFx0ZnJlZUdsb2JhbC5zZWxmID09PSBmcmVlR2xvYmFsXG5cdCkge1xuXHRcdHJvb3QgPSBmcmVlR2xvYmFsO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoZSBgcHVueWNvZGVgIG9iamVjdC5cblx0ICogQG5hbWUgcHVueWNvZGVcblx0ICogQHR5cGUgT2JqZWN0XG5cdCAqL1xuXHR2YXIgcHVueWNvZGUsXG5cblx0LyoqIEhpZ2hlc3QgcG9zaXRpdmUgc2lnbmVkIDMyLWJpdCBmbG9hdCB2YWx1ZSAqL1xuXHRtYXhJbnQgPSAyMTQ3NDgzNjQ3LCAvLyBha2EuIDB4N0ZGRkZGRkYgb3IgMl4zMS0xXG5cblx0LyoqIEJvb3RzdHJpbmcgcGFyYW1ldGVycyAqL1xuXHRiYXNlID0gMzYsXG5cdHRNaW4gPSAxLFxuXHR0TWF4ID0gMjYsXG5cdHNrZXcgPSAzOCxcblx0ZGFtcCA9IDcwMCxcblx0aW5pdGlhbEJpYXMgPSA3Mixcblx0aW5pdGlhbE4gPSAxMjgsIC8vIDB4ODBcblx0ZGVsaW1pdGVyID0gJy0nLCAvLyAnXFx4MkQnXG5cblx0LyoqIFJlZ3VsYXIgZXhwcmVzc2lvbnMgKi9cblx0cmVnZXhQdW55Y29kZSA9IC9eeG4tLS8sXG5cdHJlZ2V4Tm9uQVNDSUkgPSAvW15cXHgyMC1cXHg3RV0vLCAvLyB1bnByaW50YWJsZSBBU0NJSSBjaGFycyArIG5vbi1BU0NJSSBjaGFyc1xuXHRyZWdleFNlcGFyYXRvcnMgPSAvW1xceDJFXFx1MzAwMlxcdUZGMEVcXHVGRjYxXS9nLCAvLyBSRkMgMzQ5MCBzZXBhcmF0b3JzXG5cblx0LyoqIEVycm9yIG1lc3NhZ2VzICovXG5cdGVycm9ycyA9IHtcblx0XHQnb3ZlcmZsb3cnOiAnT3ZlcmZsb3c6IGlucHV0IG5lZWRzIHdpZGVyIGludGVnZXJzIHRvIHByb2Nlc3MnLFxuXHRcdCdub3QtYmFzaWMnOiAnSWxsZWdhbCBpbnB1dCA+PSAweDgwIChub3QgYSBiYXNpYyBjb2RlIHBvaW50KScsXG5cdFx0J2ludmFsaWQtaW5wdXQnOiAnSW52YWxpZCBpbnB1dCdcblx0fSxcblxuXHQvKiogQ29udmVuaWVuY2Ugc2hvcnRjdXRzICovXG5cdGJhc2VNaW51c1RNaW4gPSBiYXNlIC0gdE1pbixcblx0Zmxvb3IgPSBNYXRoLmZsb29yLFxuXHRzdHJpbmdGcm9tQ2hhckNvZGUgPSBTdHJpbmcuZnJvbUNoYXJDb2RlLFxuXG5cdC8qKiBUZW1wb3JhcnkgdmFyaWFibGUgKi9cblx0a2V5O1xuXG5cdC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuXG5cdC8qKlxuXHQgKiBBIGdlbmVyaWMgZXJyb3IgdXRpbGl0eSBmdW5jdGlvbi5cblx0ICogQHByaXZhdGVcblx0ICogQHBhcmFtIHtTdHJpbmd9IHR5cGUgVGhlIGVycm9yIHR5cGUuXG5cdCAqIEByZXR1cm5zIHtFcnJvcn0gVGhyb3dzIGEgYFJhbmdlRXJyb3JgIHdpdGggdGhlIGFwcGxpY2FibGUgZXJyb3IgbWVzc2FnZS5cblx0ICovXG5cdGZ1bmN0aW9uIGVycm9yKHR5cGUpIHtcblx0XHR0aHJvdyBuZXcgUmFuZ2VFcnJvcihlcnJvcnNbdHlwZV0pO1xuXHR9XG5cblx0LyoqXG5cdCAqIEEgZ2VuZXJpYyBgQXJyYXkjbWFwYCB1dGlsaXR5IGZ1bmN0aW9uLlxuXHQgKiBAcHJpdmF0ZVxuXHQgKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gaXRlcmF0ZSBvdmVyLlxuXHQgKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFjayBUaGUgZnVuY3Rpb24gdGhhdCBnZXRzIGNhbGxlZCBmb3IgZXZlcnkgYXJyYXlcblx0ICogaXRlbS5cblx0ICogQHJldHVybnMge0FycmF5fSBBIG5ldyBhcnJheSBvZiB2YWx1ZXMgcmV0dXJuZWQgYnkgdGhlIGNhbGxiYWNrIGZ1bmN0aW9uLlxuXHQgKi9cblx0ZnVuY3Rpb24gbWFwKGFycmF5LCBmbikge1xuXHRcdHZhciBsZW5ndGggPSBhcnJheS5sZW5ndGg7XG5cdFx0dmFyIHJlc3VsdCA9IFtdO1xuXHRcdHdoaWxlIChsZW5ndGgtLSkge1xuXHRcdFx0cmVzdWx0W2xlbmd0aF0gPSBmbihhcnJheVtsZW5ndGhdKTtcblx0XHR9XG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fVxuXG5cdC8qKlxuXHQgKiBBIHNpbXBsZSBgQXJyYXkjbWFwYC1saWtlIHdyYXBwZXIgdG8gd29yayB3aXRoIGRvbWFpbiBuYW1lIHN0cmluZ3Mgb3IgZW1haWxcblx0ICogYWRkcmVzc2VzLlxuXHQgKiBAcHJpdmF0ZVxuXHQgKiBAcGFyYW0ge1N0cmluZ30gZG9tYWluIFRoZSBkb21haW4gbmFtZSBvciBlbWFpbCBhZGRyZXNzLlxuXHQgKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFjayBUaGUgZnVuY3Rpb24gdGhhdCBnZXRzIGNhbGxlZCBmb3IgZXZlcnlcblx0ICogY2hhcmFjdGVyLlxuXHQgKiBAcmV0dXJucyB7QXJyYXl9IEEgbmV3IHN0cmluZyBvZiBjaGFyYWN0ZXJzIHJldHVybmVkIGJ5IHRoZSBjYWxsYmFja1xuXHQgKiBmdW5jdGlvbi5cblx0ICovXG5cdGZ1bmN0aW9uIG1hcERvbWFpbihzdHJpbmcsIGZuKSB7XG5cdFx0dmFyIHBhcnRzID0gc3RyaW5nLnNwbGl0KCdAJyk7XG5cdFx0dmFyIHJlc3VsdCA9ICcnO1xuXHRcdGlmIChwYXJ0cy5sZW5ndGggPiAxKSB7XG5cdFx0XHQvLyBJbiBlbWFpbCBhZGRyZXNzZXMsIG9ubHkgdGhlIGRvbWFpbiBuYW1lIHNob3VsZCBiZSBwdW55Y29kZWQuIExlYXZlXG5cdFx0XHQvLyB0aGUgbG9jYWwgcGFydCAoaS5lLiBldmVyeXRoaW5nIHVwIHRvIGBAYCkgaW50YWN0LlxuXHRcdFx0cmVzdWx0ID0gcGFydHNbMF0gKyAnQCc7XG5cdFx0XHRzdHJpbmcgPSBwYXJ0c1sxXTtcblx0XHR9XG5cdFx0Ly8gQXZvaWQgYHNwbGl0KHJlZ2V4KWAgZm9yIElFOCBjb21wYXRpYmlsaXR5LiBTZWUgIzE3LlxuXHRcdHN0cmluZyA9IHN0cmluZy5yZXBsYWNlKHJlZ2V4U2VwYXJhdG9ycywgJ1xceDJFJyk7XG5cdFx0dmFyIGxhYmVscyA9IHN0cmluZy5zcGxpdCgnLicpO1xuXHRcdHZhciBlbmNvZGVkID0gbWFwKGxhYmVscywgZm4pLmpvaW4oJy4nKTtcblx0XHRyZXR1cm4gcmVzdWx0ICsgZW5jb2RlZDtcblx0fVxuXG5cdC8qKlxuXHQgKiBDcmVhdGVzIGFuIGFycmF5IGNvbnRhaW5pbmcgdGhlIG51bWVyaWMgY29kZSBwb2ludHMgb2YgZWFjaCBVbmljb2RlXG5cdCAqIGNoYXJhY3RlciBpbiB0aGUgc3RyaW5nLiBXaGlsZSBKYXZhU2NyaXB0IHVzZXMgVUNTLTIgaW50ZXJuYWxseSxcblx0ICogdGhpcyBmdW5jdGlvbiB3aWxsIGNvbnZlcnQgYSBwYWlyIG9mIHN1cnJvZ2F0ZSBoYWx2ZXMgKGVhY2ggb2Ygd2hpY2hcblx0ICogVUNTLTIgZXhwb3NlcyBhcyBzZXBhcmF0ZSBjaGFyYWN0ZXJzKSBpbnRvIGEgc2luZ2xlIGNvZGUgcG9pbnQsXG5cdCAqIG1hdGNoaW5nIFVURi0xNi5cblx0ICogQHNlZSBgcHVueWNvZGUudWNzMi5lbmNvZGVgXG5cdCAqIEBzZWUgPGh0dHBzOi8vbWF0aGlhc2J5bmVucy5iZS9ub3Rlcy9qYXZhc2NyaXB0LWVuY29kaW5nPlxuXHQgKiBAbWVtYmVyT2YgcHVueWNvZGUudWNzMlxuXHQgKiBAbmFtZSBkZWNvZGVcblx0ICogQHBhcmFtIHtTdHJpbmd9IHN0cmluZyBUaGUgVW5pY29kZSBpbnB1dCBzdHJpbmcgKFVDUy0yKS5cblx0ICogQHJldHVybnMge0FycmF5fSBUaGUgbmV3IGFycmF5IG9mIGNvZGUgcG9pbnRzLlxuXHQgKi9cblx0ZnVuY3Rpb24gdWNzMmRlY29kZShzdHJpbmcpIHtcblx0XHR2YXIgb3V0cHV0ID0gW10sXG5cdFx0ICAgIGNvdW50ZXIgPSAwLFxuXHRcdCAgICBsZW5ndGggPSBzdHJpbmcubGVuZ3RoLFxuXHRcdCAgICB2YWx1ZSxcblx0XHQgICAgZXh0cmE7XG5cdFx0d2hpbGUgKGNvdW50ZXIgPCBsZW5ndGgpIHtcblx0XHRcdHZhbHVlID0gc3RyaW5nLmNoYXJDb2RlQXQoY291bnRlcisrKTtcblx0XHRcdGlmICh2YWx1ZSA+PSAweEQ4MDAgJiYgdmFsdWUgPD0gMHhEQkZGICYmIGNvdW50ZXIgPCBsZW5ndGgpIHtcblx0XHRcdFx0Ly8gaGlnaCBzdXJyb2dhdGUsIGFuZCB0aGVyZSBpcyBhIG5leHQgY2hhcmFjdGVyXG5cdFx0XHRcdGV4dHJhID0gc3RyaW5nLmNoYXJDb2RlQXQoY291bnRlcisrKTtcblx0XHRcdFx0aWYgKChleHRyYSAmIDB4RkMwMCkgPT0gMHhEQzAwKSB7IC8vIGxvdyBzdXJyb2dhdGVcblx0XHRcdFx0XHRvdXRwdXQucHVzaCgoKHZhbHVlICYgMHgzRkYpIDw8IDEwKSArIChleHRyYSAmIDB4M0ZGKSArIDB4MTAwMDApO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdC8vIHVubWF0Y2hlZCBzdXJyb2dhdGU7IG9ubHkgYXBwZW5kIHRoaXMgY29kZSB1bml0LCBpbiBjYXNlIHRoZSBuZXh0XG5cdFx0XHRcdFx0Ly8gY29kZSB1bml0IGlzIHRoZSBoaWdoIHN1cnJvZ2F0ZSBvZiBhIHN1cnJvZ2F0ZSBwYWlyXG5cdFx0XHRcdFx0b3V0cHV0LnB1c2godmFsdWUpO1xuXHRcdFx0XHRcdGNvdW50ZXItLTtcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0b3V0cHV0LnB1c2godmFsdWUpO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gb3V0cHV0O1xuXHR9XG5cblx0LyoqXG5cdCAqIENyZWF0ZXMgYSBzdHJpbmcgYmFzZWQgb24gYW4gYXJyYXkgb2YgbnVtZXJpYyBjb2RlIHBvaW50cy5cblx0ICogQHNlZSBgcHVueWNvZGUudWNzMi5kZWNvZGVgXG5cdCAqIEBtZW1iZXJPZiBwdW55Y29kZS51Y3MyXG5cdCAqIEBuYW1lIGVuY29kZVxuXHQgKiBAcGFyYW0ge0FycmF5fSBjb2RlUG9pbnRzIFRoZSBhcnJheSBvZiBudW1lcmljIGNvZGUgcG9pbnRzLlxuXHQgKiBAcmV0dXJucyB7U3RyaW5nfSBUaGUgbmV3IFVuaWNvZGUgc3RyaW5nIChVQ1MtMikuXG5cdCAqL1xuXHRmdW5jdGlvbiB1Y3MyZW5jb2RlKGFycmF5KSB7XG5cdFx0cmV0dXJuIG1hcChhcnJheSwgZnVuY3Rpb24odmFsdWUpIHtcblx0XHRcdHZhciBvdXRwdXQgPSAnJztcblx0XHRcdGlmICh2YWx1ZSA+IDB4RkZGRikge1xuXHRcdFx0XHR2YWx1ZSAtPSAweDEwMDAwO1xuXHRcdFx0XHRvdXRwdXQgKz0gc3RyaW5nRnJvbUNoYXJDb2RlKHZhbHVlID4+PiAxMCAmIDB4M0ZGIHwgMHhEODAwKTtcblx0XHRcdFx0dmFsdWUgPSAweERDMDAgfCB2YWx1ZSAmIDB4M0ZGO1xuXHRcdFx0fVxuXHRcdFx0b3V0cHV0ICs9IHN0cmluZ0Zyb21DaGFyQ29kZSh2YWx1ZSk7XG5cdFx0XHRyZXR1cm4gb3V0cHV0O1xuXHRcdH0pLmpvaW4oJycpO1xuXHR9XG5cblx0LyoqXG5cdCAqIENvbnZlcnRzIGEgYmFzaWMgY29kZSBwb2ludCBpbnRvIGEgZGlnaXQvaW50ZWdlci5cblx0ICogQHNlZSBgZGlnaXRUb0Jhc2ljKClgXG5cdCAqIEBwcml2YXRlXG5cdCAqIEBwYXJhbSB7TnVtYmVyfSBjb2RlUG9pbnQgVGhlIGJhc2ljIG51bWVyaWMgY29kZSBwb2ludCB2YWx1ZS5cblx0ICogQHJldHVybnMge051bWJlcn0gVGhlIG51bWVyaWMgdmFsdWUgb2YgYSBiYXNpYyBjb2RlIHBvaW50IChmb3IgdXNlIGluXG5cdCAqIHJlcHJlc2VudGluZyBpbnRlZ2VycykgaW4gdGhlIHJhbmdlIGAwYCB0byBgYmFzZSAtIDFgLCBvciBgYmFzZWAgaWZcblx0ICogdGhlIGNvZGUgcG9pbnQgZG9lcyBub3QgcmVwcmVzZW50IGEgdmFsdWUuXG5cdCAqL1xuXHRmdW5jdGlvbiBiYXNpY1RvRGlnaXQoY29kZVBvaW50KSB7XG5cdFx0aWYgKGNvZGVQb2ludCAtIDQ4IDwgMTApIHtcblx0XHRcdHJldHVybiBjb2RlUG9pbnQgLSAyMjtcblx0XHR9XG5cdFx0aWYgKGNvZGVQb2ludCAtIDY1IDwgMjYpIHtcblx0XHRcdHJldHVybiBjb2RlUG9pbnQgLSA2NTtcblx0XHR9XG5cdFx0aWYgKGNvZGVQb2ludCAtIDk3IDwgMjYpIHtcblx0XHRcdHJldHVybiBjb2RlUG9pbnQgLSA5Nztcblx0XHR9XG5cdFx0cmV0dXJuIGJhc2U7XG5cdH1cblxuXHQvKipcblx0ICogQ29udmVydHMgYSBkaWdpdC9pbnRlZ2VyIGludG8gYSBiYXNpYyBjb2RlIHBvaW50LlxuXHQgKiBAc2VlIGBiYXNpY1RvRGlnaXQoKWBcblx0ICogQHByaXZhdGVcblx0ICogQHBhcmFtIHtOdW1iZXJ9IGRpZ2l0IFRoZSBudW1lcmljIHZhbHVlIG9mIGEgYmFzaWMgY29kZSBwb2ludC5cblx0ICogQHJldHVybnMge051bWJlcn0gVGhlIGJhc2ljIGNvZGUgcG9pbnQgd2hvc2UgdmFsdWUgKHdoZW4gdXNlZCBmb3Jcblx0ICogcmVwcmVzZW50aW5nIGludGVnZXJzKSBpcyBgZGlnaXRgLCB3aGljaCBuZWVkcyB0byBiZSBpbiB0aGUgcmFuZ2Vcblx0ICogYDBgIHRvIGBiYXNlIC0gMWAuIElmIGBmbGFnYCBpcyBub24temVybywgdGhlIHVwcGVyY2FzZSBmb3JtIGlzXG5cdCAqIHVzZWQ7IGVsc2UsIHRoZSBsb3dlcmNhc2UgZm9ybSBpcyB1c2VkLiBUaGUgYmVoYXZpb3IgaXMgdW5kZWZpbmVkXG5cdCAqIGlmIGBmbGFnYCBpcyBub24temVybyBhbmQgYGRpZ2l0YCBoYXMgbm8gdXBwZXJjYXNlIGZvcm0uXG5cdCAqL1xuXHRmdW5jdGlvbiBkaWdpdFRvQmFzaWMoZGlnaXQsIGZsYWcpIHtcblx0XHQvLyAgMC4uMjUgbWFwIHRvIEFTQ0lJIGEuLnogb3IgQS4uWlxuXHRcdC8vIDI2Li4zNSBtYXAgdG8gQVNDSUkgMC4uOVxuXHRcdHJldHVybiBkaWdpdCArIDIyICsgNzUgKiAoZGlnaXQgPCAyNikgLSAoKGZsYWcgIT0gMCkgPDwgNSk7XG5cdH1cblxuXHQvKipcblx0ICogQmlhcyBhZGFwdGF0aW9uIGZ1bmN0aW9uIGFzIHBlciBzZWN0aW9uIDMuNCBvZiBSRkMgMzQ5Mi5cblx0ICogaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzM0OTIjc2VjdGlvbi0zLjRcblx0ICogQHByaXZhdGVcblx0ICovXG5cdGZ1bmN0aW9uIGFkYXB0KGRlbHRhLCBudW1Qb2ludHMsIGZpcnN0VGltZSkge1xuXHRcdHZhciBrID0gMDtcblx0XHRkZWx0YSA9IGZpcnN0VGltZSA/IGZsb29yKGRlbHRhIC8gZGFtcCkgOiBkZWx0YSA+PiAxO1xuXHRcdGRlbHRhICs9IGZsb29yKGRlbHRhIC8gbnVtUG9pbnRzKTtcblx0XHRmb3IgKC8qIG5vIGluaXRpYWxpemF0aW9uICovOyBkZWx0YSA+IGJhc2VNaW51c1RNaW4gKiB0TWF4ID4+IDE7IGsgKz0gYmFzZSkge1xuXHRcdFx0ZGVsdGEgPSBmbG9vcihkZWx0YSAvIGJhc2VNaW51c1RNaW4pO1xuXHRcdH1cblx0XHRyZXR1cm4gZmxvb3IoayArIChiYXNlTWludXNUTWluICsgMSkgKiBkZWx0YSAvIChkZWx0YSArIHNrZXcpKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBDb252ZXJ0cyBhIFB1bnljb2RlIHN0cmluZyBvZiBBU0NJSS1vbmx5IHN5bWJvbHMgdG8gYSBzdHJpbmcgb2YgVW5pY29kZVxuXHQgKiBzeW1ib2xzLlxuXHQgKiBAbWVtYmVyT2YgcHVueWNvZGVcblx0ICogQHBhcmFtIHtTdHJpbmd9IGlucHV0IFRoZSBQdW55Y29kZSBzdHJpbmcgb2YgQVNDSUktb25seSBzeW1ib2xzLlxuXHQgKiBAcmV0dXJucyB7U3RyaW5nfSBUaGUgcmVzdWx0aW5nIHN0cmluZyBvZiBVbmljb2RlIHN5bWJvbHMuXG5cdCAqL1xuXHRmdW5jdGlvbiBkZWNvZGUoaW5wdXQpIHtcblx0XHQvLyBEb24ndCB1c2UgVUNTLTJcblx0XHR2YXIgb3V0cHV0ID0gW10sXG5cdFx0ICAgIGlucHV0TGVuZ3RoID0gaW5wdXQubGVuZ3RoLFxuXHRcdCAgICBvdXQsXG5cdFx0ICAgIGkgPSAwLFxuXHRcdCAgICBuID0gaW5pdGlhbE4sXG5cdFx0ICAgIGJpYXMgPSBpbml0aWFsQmlhcyxcblx0XHQgICAgYmFzaWMsXG5cdFx0ICAgIGosXG5cdFx0ICAgIGluZGV4LFxuXHRcdCAgICBvbGRpLFxuXHRcdCAgICB3LFxuXHRcdCAgICBrLFxuXHRcdCAgICBkaWdpdCxcblx0XHQgICAgdCxcblx0XHQgICAgLyoqIENhY2hlZCBjYWxjdWxhdGlvbiByZXN1bHRzICovXG5cdFx0ICAgIGJhc2VNaW51c1Q7XG5cblx0XHQvLyBIYW5kbGUgdGhlIGJhc2ljIGNvZGUgcG9pbnRzOiBsZXQgYGJhc2ljYCBiZSB0aGUgbnVtYmVyIG9mIGlucHV0IGNvZGVcblx0XHQvLyBwb2ludHMgYmVmb3JlIHRoZSBsYXN0IGRlbGltaXRlciwgb3IgYDBgIGlmIHRoZXJlIGlzIG5vbmUsIHRoZW4gY29weVxuXHRcdC8vIHRoZSBmaXJzdCBiYXNpYyBjb2RlIHBvaW50cyB0byB0aGUgb3V0cHV0LlxuXG5cdFx0YmFzaWMgPSBpbnB1dC5sYXN0SW5kZXhPZihkZWxpbWl0ZXIpO1xuXHRcdGlmIChiYXNpYyA8IDApIHtcblx0XHRcdGJhc2ljID0gMDtcblx0XHR9XG5cblx0XHRmb3IgKGogPSAwOyBqIDwgYmFzaWM7ICsraikge1xuXHRcdFx0Ly8gaWYgaXQncyBub3QgYSBiYXNpYyBjb2RlIHBvaW50XG5cdFx0XHRpZiAoaW5wdXQuY2hhckNvZGVBdChqKSA+PSAweDgwKSB7XG5cdFx0XHRcdGVycm9yKCdub3QtYmFzaWMnKTtcblx0XHRcdH1cblx0XHRcdG91dHB1dC5wdXNoKGlucHV0LmNoYXJDb2RlQXQoaikpO1xuXHRcdH1cblxuXHRcdC8vIE1haW4gZGVjb2RpbmcgbG9vcDogc3RhcnQganVzdCBhZnRlciB0aGUgbGFzdCBkZWxpbWl0ZXIgaWYgYW55IGJhc2ljIGNvZGVcblx0XHQvLyBwb2ludHMgd2VyZSBjb3BpZWQ7IHN0YXJ0IGF0IHRoZSBiZWdpbm5pbmcgb3RoZXJ3aXNlLlxuXG5cdFx0Zm9yIChpbmRleCA9IGJhc2ljID4gMCA/IGJhc2ljICsgMSA6IDA7IGluZGV4IDwgaW5wdXRMZW5ndGg7IC8qIG5vIGZpbmFsIGV4cHJlc3Npb24gKi8pIHtcblxuXHRcdFx0Ly8gYGluZGV4YCBpcyB0aGUgaW5kZXggb2YgdGhlIG5leHQgY2hhcmFjdGVyIHRvIGJlIGNvbnN1bWVkLlxuXHRcdFx0Ly8gRGVjb2RlIGEgZ2VuZXJhbGl6ZWQgdmFyaWFibGUtbGVuZ3RoIGludGVnZXIgaW50byBgZGVsdGFgLFxuXHRcdFx0Ly8gd2hpY2ggZ2V0cyBhZGRlZCB0byBgaWAuIFRoZSBvdmVyZmxvdyBjaGVja2luZyBpcyBlYXNpZXJcblx0XHRcdC8vIGlmIHdlIGluY3JlYXNlIGBpYCBhcyB3ZSBnbywgdGhlbiBzdWJ0cmFjdCBvZmYgaXRzIHN0YXJ0aW5nXG5cdFx0XHQvLyB2YWx1ZSBhdCB0aGUgZW5kIHRvIG9idGFpbiBgZGVsdGFgLlxuXHRcdFx0Zm9yIChvbGRpID0gaSwgdyA9IDEsIGsgPSBiYXNlOyAvKiBubyBjb25kaXRpb24gKi87IGsgKz0gYmFzZSkge1xuXG5cdFx0XHRcdGlmIChpbmRleCA+PSBpbnB1dExlbmd0aCkge1xuXHRcdFx0XHRcdGVycm9yKCdpbnZhbGlkLWlucHV0Jyk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRkaWdpdCA9IGJhc2ljVG9EaWdpdChpbnB1dC5jaGFyQ29kZUF0KGluZGV4KyspKTtcblxuXHRcdFx0XHRpZiAoZGlnaXQgPj0gYmFzZSB8fCBkaWdpdCA+IGZsb29yKChtYXhJbnQgLSBpKSAvIHcpKSB7XG5cdFx0XHRcdFx0ZXJyb3IoJ292ZXJmbG93Jyk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpICs9IGRpZ2l0ICogdztcblx0XHRcdFx0dCA9IGsgPD0gYmlhcyA/IHRNaW4gOiAoayA+PSBiaWFzICsgdE1heCA/IHRNYXggOiBrIC0gYmlhcyk7XG5cblx0XHRcdFx0aWYgKGRpZ2l0IDwgdCkge1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0YmFzZU1pbnVzVCA9IGJhc2UgLSB0O1xuXHRcdFx0XHRpZiAodyA+IGZsb29yKG1heEludCAvIGJhc2VNaW51c1QpKSB7XG5cdFx0XHRcdFx0ZXJyb3IoJ292ZXJmbG93Jyk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHR3ICo9IGJhc2VNaW51c1Q7XG5cblx0XHRcdH1cblxuXHRcdFx0b3V0ID0gb3V0cHV0Lmxlbmd0aCArIDE7XG5cdFx0XHRiaWFzID0gYWRhcHQoaSAtIG9sZGksIG91dCwgb2xkaSA9PSAwKTtcblxuXHRcdFx0Ly8gYGlgIHdhcyBzdXBwb3NlZCB0byB3cmFwIGFyb3VuZCBmcm9tIGBvdXRgIHRvIGAwYCxcblx0XHRcdC8vIGluY3JlbWVudGluZyBgbmAgZWFjaCB0aW1lLCBzbyB3ZSdsbCBmaXggdGhhdCBub3c6XG5cdFx0XHRpZiAoZmxvb3IoaSAvIG91dCkgPiBtYXhJbnQgLSBuKSB7XG5cdFx0XHRcdGVycm9yKCdvdmVyZmxvdycpO1xuXHRcdFx0fVxuXG5cdFx0XHRuICs9IGZsb29yKGkgLyBvdXQpO1xuXHRcdFx0aSAlPSBvdXQ7XG5cblx0XHRcdC8vIEluc2VydCBgbmAgYXQgcG9zaXRpb24gYGlgIG9mIHRoZSBvdXRwdXRcblx0XHRcdG91dHB1dC5zcGxpY2UoaSsrLCAwLCBuKTtcblxuXHRcdH1cblxuXHRcdHJldHVybiB1Y3MyZW5jb2RlKG91dHB1dCk7XG5cdH1cblxuXHQvKipcblx0ICogQ29udmVydHMgYSBzdHJpbmcgb2YgVW5pY29kZSBzeW1ib2xzIChlLmcuIGEgZG9tYWluIG5hbWUgbGFiZWwpIHRvIGFcblx0ICogUHVueWNvZGUgc3RyaW5nIG9mIEFTQ0lJLW9ubHkgc3ltYm9scy5cblx0ICogQG1lbWJlck9mIHB1bnljb2RlXG5cdCAqIEBwYXJhbSB7U3RyaW5nfSBpbnB1dCBUaGUgc3RyaW5nIG9mIFVuaWNvZGUgc3ltYm9scy5cblx0ICogQHJldHVybnMge1N0cmluZ30gVGhlIHJlc3VsdGluZyBQdW55Y29kZSBzdHJpbmcgb2YgQVNDSUktb25seSBzeW1ib2xzLlxuXHQgKi9cblx0ZnVuY3Rpb24gZW5jb2RlKGlucHV0KSB7XG5cdFx0dmFyIG4sXG5cdFx0ICAgIGRlbHRhLFxuXHRcdCAgICBoYW5kbGVkQ1BDb3VudCxcblx0XHQgICAgYmFzaWNMZW5ndGgsXG5cdFx0ICAgIGJpYXMsXG5cdFx0ICAgIGosXG5cdFx0ICAgIG0sXG5cdFx0ICAgIHEsXG5cdFx0ICAgIGssXG5cdFx0ICAgIHQsXG5cdFx0ICAgIGN1cnJlbnRWYWx1ZSxcblx0XHQgICAgb3V0cHV0ID0gW10sXG5cdFx0ICAgIC8qKiBgaW5wdXRMZW5ndGhgIHdpbGwgaG9sZCB0aGUgbnVtYmVyIG9mIGNvZGUgcG9pbnRzIGluIGBpbnB1dGAuICovXG5cdFx0ICAgIGlucHV0TGVuZ3RoLFxuXHRcdCAgICAvKiogQ2FjaGVkIGNhbGN1bGF0aW9uIHJlc3VsdHMgKi9cblx0XHQgICAgaGFuZGxlZENQQ291bnRQbHVzT25lLFxuXHRcdCAgICBiYXNlTWludXNULFxuXHRcdCAgICBxTWludXNUO1xuXG5cdFx0Ly8gQ29udmVydCB0aGUgaW5wdXQgaW4gVUNTLTIgdG8gVW5pY29kZVxuXHRcdGlucHV0ID0gdWNzMmRlY29kZShpbnB1dCk7XG5cblx0XHQvLyBDYWNoZSB0aGUgbGVuZ3RoXG5cdFx0aW5wdXRMZW5ndGggPSBpbnB1dC5sZW5ndGg7XG5cblx0XHQvLyBJbml0aWFsaXplIHRoZSBzdGF0ZVxuXHRcdG4gPSBpbml0aWFsTjtcblx0XHRkZWx0YSA9IDA7XG5cdFx0YmlhcyA9IGluaXRpYWxCaWFzO1xuXG5cdFx0Ly8gSGFuZGxlIHRoZSBiYXNpYyBjb2RlIHBvaW50c1xuXHRcdGZvciAoaiA9IDA7IGogPCBpbnB1dExlbmd0aDsgKytqKSB7XG5cdFx0XHRjdXJyZW50VmFsdWUgPSBpbnB1dFtqXTtcblx0XHRcdGlmIChjdXJyZW50VmFsdWUgPCAweDgwKSB7XG5cdFx0XHRcdG91dHB1dC5wdXNoKHN0cmluZ0Zyb21DaGFyQ29kZShjdXJyZW50VmFsdWUpKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRoYW5kbGVkQ1BDb3VudCA9IGJhc2ljTGVuZ3RoID0gb3V0cHV0Lmxlbmd0aDtcblxuXHRcdC8vIGBoYW5kbGVkQ1BDb3VudGAgaXMgdGhlIG51bWJlciBvZiBjb2RlIHBvaW50cyB0aGF0IGhhdmUgYmVlbiBoYW5kbGVkO1xuXHRcdC8vIGBiYXNpY0xlbmd0aGAgaXMgdGhlIG51bWJlciBvZiBiYXNpYyBjb2RlIHBvaW50cy5cblxuXHRcdC8vIEZpbmlzaCB0aGUgYmFzaWMgc3RyaW5nIC0gaWYgaXQgaXMgbm90IGVtcHR5IC0gd2l0aCBhIGRlbGltaXRlclxuXHRcdGlmIChiYXNpY0xlbmd0aCkge1xuXHRcdFx0b3V0cHV0LnB1c2goZGVsaW1pdGVyKTtcblx0XHR9XG5cblx0XHQvLyBNYWluIGVuY29kaW5nIGxvb3A6XG5cdFx0d2hpbGUgKGhhbmRsZWRDUENvdW50IDwgaW5wdXRMZW5ndGgpIHtcblxuXHRcdFx0Ly8gQWxsIG5vbi1iYXNpYyBjb2RlIHBvaW50cyA8IG4gaGF2ZSBiZWVuIGhhbmRsZWQgYWxyZWFkeS4gRmluZCB0aGUgbmV4dFxuXHRcdFx0Ly8gbGFyZ2VyIG9uZTpcblx0XHRcdGZvciAobSA9IG1heEludCwgaiA9IDA7IGogPCBpbnB1dExlbmd0aDsgKytqKSB7XG5cdFx0XHRcdGN1cnJlbnRWYWx1ZSA9IGlucHV0W2pdO1xuXHRcdFx0XHRpZiAoY3VycmVudFZhbHVlID49IG4gJiYgY3VycmVudFZhbHVlIDwgbSkge1xuXHRcdFx0XHRcdG0gPSBjdXJyZW50VmFsdWU7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0Ly8gSW5jcmVhc2UgYGRlbHRhYCBlbm91Z2ggdG8gYWR2YW5jZSB0aGUgZGVjb2RlcidzIDxuLGk+IHN0YXRlIHRvIDxtLDA+LFxuXHRcdFx0Ly8gYnV0IGd1YXJkIGFnYWluc3Qgb3ZlcmZsb3dcblx0XHRcdGhhbmRsZWRDUENvdW50UGx1c09uZSA9IGhhbmRsZWRDUENvdW50ICsgMTtcblx0XHRcdGlmIChtIC0gbiA+IGZsb29yKChtYXhJbnQgLSBkZWx0YSkgLyBoYW5kbGVkQ1BDb3VudFBsdXNPbmUpKSB7XG5cdFx0XHRcdGVycm9yKCdvdmVyZmxvdycpO1xuXHRcdFx0fVxuXG5cdFx0XHRkZWx0YSArPSAobSAtIG4pICogaGFuZGxlZENQQ291bnRQbHVzT25lO1xuXHRcdFx0biA9IG07XG5cblx0XHRcdGZvciAoaiA9IDA7IGogPCBpbnB1dExlbmd0aDsgKytqKSB7XG5cdFx0XHRcdGN1cnJlbnRWYWx1ZSA9IGlucHV0W2pdO1xuXG5cdFx0XHRcdGlmIChjdXJyZW50VmFsdWUgPCBuICYmICsrZGVsdGEgPiBtYXhJbnQpIHtcblx0XHRcdFx0XHRlcnJvcignb3ZlcmZsb3cnKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGlmIChjdXJyZW50VmFsdWUgPT0gbikge1xuXHRcdFx0XHRcdC8vIFJlcHJlc2VudCBkZWx0YSBhcyBhIGdlbmVyYWxpemVkIHZhcmlhYmxlLWxlbmd0aCBpbnRlZ2VyXG5cdFx0XHRcdFx0Zm9yIChxID0gZGVsdGEsIGsgPSBiYXNlOyAvKiBubyBjb25kaXRpb24gKi87IGsgKz0gYmFzZSkge1xuXHRcdFx0XHRcdFx0dCA9IGsgPD0gYmlhcyA/IHRNaW4gOiAoayA+PSBiaWFzICsgdE1heCA/IHRNYXggOiBrIC0gYmlhcyk7XG5cdFx0XHRcdFx0XHRpZiAocSA8IHQpIHtcblx0XHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRxTWludXNUID0gcSAtIHQ7XG5cdFx0XHRcdFx0XHRiYXNlTWludXNUID0gYmFzZSAtIHQ7XG5cdFx0XHRcdFx0XHRvdXRwdXQucHVzaChcblx0XHRcdFx0XHRcdFx0c3RyaW5nRnJvbUNoYXJDb2RlKGRpZ2l0VG9CYXNpYyh0ICsgcU1pbnVzVCAlIGJhc2VNaW51c1QsIDApKVxuXHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdHEgPSBmbG9vcihxTWludXNUIC8gYmFzZU1pbnVzVCk7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0b3V0cHV0LnB1c2goc3RyaW5nRnJvbUNoYXJDb2RlKGRpZ2l0VG9CYXNpYyhxLCAwKSkpO1xuXHRcdFx0XHRcdGJpYXMgPSBhZGFwdChkZWx0YSwgaGFuZGxlZENQQ291bnRQbHVzT25lLCBoYW5kbGVkQ1BDb3VudCA9PSBiYXNpY0xlbmd0aCk7XG5cdFx0XHRcdFx0ZGVsdGEgPSAwO1xuXHRcdFx0XHRcdCsraGFuZGxlZENQQ291bnQ7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0KytkZWx0YTtcblx0XHRcdCsrbjtcblxuXHRcdH1cblx0XHRyZXR1cm4gb3V0cHV0LmpvaW4oJycpO1xuXHR9XG5cblx0LyoqXG5cdCAqIENvbnZlcnRzIGEgUHVueWNvZGUgc3RyaW5nIHJlcHJlc2VudGluZyBhIGRvbWFpbiBuYW1lIG9yIGFuIGVtYWlsIGFkZHJlc3Ncblx0ICogdG8gVW5pY29kZS4gT25seSB0aGUgUHVueWNvZGVkIHBhcnRzIG9mIHRoZSBpbnB1dCB3aWxsIGJlIGNvbnZlcnRlZCwgaS5lLlxuXHQgKiBpdCBkb2Vzbid0IG1hdHRlciBpZiB5b3UgY2FsbCBpdCBvbiBhIHN0cmluZyB0aGF0IGhhcyBhbHJlYWR5IGJlZW5cblx0ICogY29udmVydGVkIHRvIFVuaWNvZGUuXG5cdCAqIEBtZW1iZXJPZiBwdW55Y29kZVxuXHQgKiBAcGFyYW0ge1N0cmluZ30gaW5wdXQgVGhlIFB1bnljb2RlZCBkb21haW4gbmFtZSBvciBlbWFpbCBhZGRyZXNzIHRvXG5cdCAqIGNvbnZlcnQgdG8gVW5pY29kZS5cblx0ICogQHJldHVybnMge1N0cmluZ30gVGhlIFVuaWNvZGUgcmVwcmVzZW50YXRpb24gb2YgdGhlIGdpdmVuIFB1bnljb2RlXG5cdCAqIHN0cmluZy5cblx0ICovXG5cdGZ1bmN0aW9uIHRvVW5pY29kZShpbnB1dCkge1xuXHRcdHJldHVybiBtYXBEb21haW4oaW5wdXQsIGZ1bmN0aW9uKHN0cmluZykge1xuXHRcdFx0cmV0dXJuIHJlZ2V4UHVueWNvZGUudGVzdChzdHJpbmcpXG5cdFx0XHRcdD8gZGVjb2RlKHN0cmluZy5zbGljZSg0KS50b0xvd2VyQ2FzZSgpKVxuXHRcdFx0XHQ6IHN0cmluZztcblx0XHR9KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBDb252ZXJ0cyBhIFVuaWNvZGUgc3RyaW5nIHJlcHJlc2VudGluZyBhIGRvbWFpbiBuYW1lIG9yIGFuIGVtYWlsIGFkZHJlc3MgdG9cblx0ICogUHVueWNvZGUuIE9ubHkgdGhlIG5vbi1BU0NJSSBwYXJ0cyBvZiB0aGUgZG9tYWluIG5hbWUgd2lsbCBiZSBjb252ZXJ0ZWQsXG5cdCAqIGkuZS4gaXQgZG9lc24ndCBtYXR0ZXIgaWYgeW91IGNhbGwgaXQgd2l0aCBhIGRvbWFpbiB0aGF0J3MgYWxyZWFkeSBpblxuXHQgKiBBU0NJSS5cblx0ICogQG1lbWJlck9mIHB1bnljb2RlXG5cdCAqIEBwYXJhbSB7U3RyaW5nfSBpbnB1dCBUaGUgZG9tYWluIG5hbWUgb3IgZW1haWwgYWRkcmVzcyB0byBjb252ZXJ0LCBhcyBhXG5cdCAqIFVuaWNvZGUgc3RyaW5nLlxuXHQgKiBAcmV0dXJucyB7U3RyaW5nfSBUaGUgUHVueWNvZGUgcmVwcmVzZW50YXRpb24gb2YgdGhlIGdpdmVuIGRvbWFpbiBuYW1lIG9yXG5cdCAqIGVtYWlsIGFkZHJlc3MuXG5cdCAqL1xuXHRmdW5jdGlvbiB0b0FTQ0lJKGlucHV0KSB7XG5cdFx0cmV0dXJuIG1hcERvbWFpbihpbnB1dCwgZnVuY3Rpb24oc3RyaW5nKSB7XG5cdFx0XHRyZXR1cm4gcmVnZXhOb25BU0NJSS50ZXN0KHN0cmluZylcblx0XHRcdFx0PyAneG4tLScgKyBlbmNvZGUoc3RyaW5nKVxuXHRcdFx0XHQ6IHN0cmluZztcblx0XHR9KTtcblx0fVxuXG5cdC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuXG5cdC8qKiBEZWZpbmUgdGhlIHB1YmxpYyBBUEkgKi9cblx0cHVueWNvZGUgPSB7XG5cdFx0LyoqXG5cdFx0ICogQSBzdHJpbmcgcmVwcmVzZW50aW5nIHRoZSBjdXJyZW50IFB1bnljb2RlLmpzIHZlcnNpb24gbnVtYmVyLlxuXHRcdCAqIEBtZW1iZXJPZiBwdW55Y29kZVxuXHRcdCAqIEB0eXBlIFN0cmluZ1xuXHRcdCAqL1xuXHRcdCd2ZXJzaW9uJzogJzEuMy4yJyxcblx0XHQvKipcblx0XHQgKiBBbiBvYmplY3Qgb2YgbWV0aG9kcyB0byBjb252ZXJ0IGZyb20gSmF2YVNjcmlwdCdzIGludGVybmFsIGNoYXJhY3RlclxuXHRcdCAqIHJlcHJlc2VudGF0aW9uIChVQ1MtMikgdG8gVW5pY29kZSBjb2RlIHBvaW50cywgYW5kIGJhY2suXG5cdFx0ICogQHNlZSA8aHR0cHM6Ly9tYXRoaWFzYnluZW5zLmJlL25vdGVzL2phdmFzY3JpcHQtZW5jb2Rpbmc+XG5cdFx0ICogQG1lbWJlck9mIHB1bnljb2RlXG5cdFx0ICogQHR5cGUgT2JqZWN0XG5cdFx0ICovXG5cdFx0J3VjczInOiB7XG5cdFx0XHQnZGVjb2RlJzogdWNzMmRlY29kZSxcblx0XHRcdCdlbmNvZGUnOiB1Y3MyZW5jb2RlXG5cdFx0fSxcblx0XHQnZGVjb2RlJzogZGVjb2RlLFxuXHRcdCdlbmNvZGUnOiBlbmNvZGUsXG5cdFx0J3RvQVNDSUknOiB0b0FTQ0lJLFxuXHRcdCd0b1VuaWNvZGUnOiB0b1VuaWNvZGVcblx0fTtcblxuXHQvKiogRXhwb3NlIGBwdW55Y29kZWAgKi9cblx0Ly8gU29tZSBBTUQgYnVpbGQgb3B0aW1pemVycywgbGlrZSByLmpzLCBjaGVjayBmb3Igc3BlY2lmaWMgY29uZGl0aW9uIHBhdHRlcm5zXG5cdC8vIGxpa2UgdGhlIGZvbGxvd2luZzpcblx0aWYgKFxuXHRcdHR5cGVvZiBkZWZpbmUgPT0gJ2Z1bmN0aW9uJyAmJlxuXHRcdHR5cGVvZiBkZWZpbmUuYW1kID09ICdvYmplY3QnICYmXG5cdFx0ZGVmaW5lLmFtZFxuXHQpIHtcblx0XHRkZWZpbmUoJ3B1bnljb2RlJywgZnVuY3Rpb24oKSB7XG5cdFx0XHRyZXR1cm4gcHVueWNvZGU7XG5cdFx0fSk7XG5cdH0gZWxzZSBpZiAoZnJlZUV4cG9ydHMgJiYgZnJlZU1vZHVsZSkge1xuXHRcdGlmIChtb2R1bGUuZXhwb3J0cyA9PSBmcmVlRXhwb3J0cykge1xuXHRcdFx0Ly8gaW4gTm9kZS5qcywgaW8uanMsIG9yIFJpbmdvSlMgdjAuOC4wK1xuXHRcdFx0ZnJlZU1vZHVsZS5leHBvcnRzID0gcHVueWNvZGU7XG5cdFx0fSBlbHNlIHtcblx0XHRcdC8vIGluIE5hcndoYWwgb3IgUmluZ29KUyB2MC43LjAtXG5cdFx0XHRmb3IgKGtleSBpbiBwdW55Y29kZSkge1xuXHRcdFx0XHRwdW55Y29kZS5oYXNPd25Qcm9wZXJ0eShrZXkpICYmIChmcmVlRXhwb3J0c1trZXldID0gcHVueWNvZGVba2V5XSk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9IGVsc2Uge1xuXHRcdC8vIGluIFJoaW5vIG9yIGEgd2ViIGJyb3dzZXJcblx0XHRyb290LnB1bnljb2RlID0gcHVueWNvZGU7XG5cdH1cblxufSh0aGlzKSk7XG4iLCIvLyBDb3B5cmlnaHQgSm95ZW50LCBJbmMuIGFuZCBvdGhlciBOb2RlIGNvbnRyaWJ1dG9ycy5cbi8vXG4vLyBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYVxuLy8gY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZVxuLy8gXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nXG4vLyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsXG4vLyBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0XG4vLyBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGVcbi8vIGZvbGxvd2luZyBjb25kaXRpb25zOlxuLy9cbi8vIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkXG4vLyBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbi8vXG4vLyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTXG4vLyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GXG4vLyBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOXG4vLyBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSxcbi8vIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUlxuLy8gT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRVxuLy8gVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cblxuJ3VzZSBzdHJpY3QnO1xuXG4vLyBJZiBvYmouaGFzT3duUHJvcGVydHkgaGFzIGJlZW4gb3ZlcnJpZGRlbiwgdGhlbiBjYWxsaW5nXG4vLyBvYmouaGFzT3duUHJvcGVydHkocHJvcCkgd2lsbCBicmVhay5cbi8vIFNlZTogaHR0cHM6Ly9naXRodWIuY29tL2pveWVudC9ub2RlL2lzc3Vlcy8xNzA3XG5mdW5jdGlvbiBoYXNPd25Qcm9wZXJ0eShvYmosIHByb3ApIHtcbiAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmosIHByb3ApO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKHFzLCBzZXAsIGVxLCBvcHRpb25zKSB7XG4gIHNlcCA9IHNlcCB8fCAnJic7XG4gIGVxID0gZXEgfHwgJz0nO1xuICB2YXIgb2JqID0ge307XG5cbiAgaWYgKHR5cGVvZiBxcyAhPT0gJ3N0cmluZycgfHwgcXMubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIG9iajtcbiAgfVxuXG4gIHZhciByZWdleHAgPSAvXFwrL2c7XG4gIHFzID0gcXMuc3BsaXQoc2VwKTtcblxuICB2YXIgbWF4S2V5cyA9IDEwMDA7XG4gIGlmIChvcHRpb25zICYmIHR5cGVvZiBvcHRpb25zLm1heEtleXMgPT09ICdudW1iZXInKSB7XG4gICAgbWF4S2V5cyA9IG9wdGlvbnMubWF4S2V5cztcbiAgfVxuXG4gIHZhciBsZW4gPSBxcy5sZW5ndGg7XG4gIC8vIG1heEtleXMgPD0gMCBtZWFucyB0aGF0IHdlIHNob3VsZCBub3QgbGltaXQga2V5cyBjb3VudFxuICBpZiAobWF4S2V5cyA+IDAgJiYgbGVuID4gbWF4S2V5cykge1xuICAgIGxlbiA9IG1heEtleXM7XG4gIH1cblxuICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgKytpKSB7XG4gICAgdmFyIHggPSBxc1tpXS5yZXBsYWNlKHJlZ2V4cCwgJyUyMCcpLFxuICAgICAgICBpZHggPSB4LmluZGV4T2YoZXEpLFxuICAgICAgICBrc3RyLCB2c3RyLCBrLCB2O1xuXG4gICAgaWYgKGlkeCA+PSAwKSB7XG4gICAgICBrc3RyID0geC5zdWJzdHIoMCwgaWR4KTtcbiAgICAgIHZzdHIgPSB4LnN1YnN0cihpZHggKyAxKTtcbiAgICB9IGVsc2Uge1xuICAgICAga3N0ciA9IHg7XG4gICAgICB2c3RyID0gJyc7XG4gICAgfVxuXG4gICAgayA9IGRlY29kZVVSSUNvbXBvbmVudChrc3RyKTtcbiAgICB2ID0gZGVjb2RlVVJJQ29tcG9uZW50KHZzdHIpO1xuXG4gICAgaWYgKCFoYXNPd25Qcm9wZXJ0eShvYmosIGspKSB7XG4gICAgICBvYmpba10gPSB2O1xuICAgIH0gZWxzZSBpZiAoaXNBcnJheShvYmpba10pKSB7XG4gICAgICBvYmpba10ucHVzaCh2KTtcbiAgICB9IGVsc2Uge1xuICAgICAgb2JqW2tdID0gW29ialtrXSwgdl07XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG9iajtcbn07XG5cbnZhciBpc0FycmF5ID0gQXJyYXkuaXNBcnJheSB8fCBmdW5jdGlvbiAoeHMpIHtcbiAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh4cykgPT09ICdbb2JqZWN0IEFycmF5XSc7XG59O1xuIiwiLy8gQ29weXJpZ2h0IEpveWVudCwgSW5jLiBhbmQgb3RoZXIgTm9kZSBjb250cmlidXRvcnMuXG4vL1xuLy8gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGFcbi8vIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGVcbi8vIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZ1xuLy8gd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLFxuLy8gZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdFxuLy8gcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlXG4vLyBmb2xsb3dpbmcgY29uZGl0aW9uczpcbi8vXG4vLyBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZFxuLy8gaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4vL1xuLy8gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTU1xuLy8gT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRlxuLy8gTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTlxuLy8gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sXG4vLyBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1Jcbi8vIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEVcbi8vIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG5cbid1c2Ugc3RyaWN0JztcblxudmFyIHN0cmluZ2lmeVByaW1pdGl2ZSA9IGZ1bmN0aW9uKHYpIHtcbiAgc3dpdGNoICh0eXBlb2Ygdikge1xuICAgIGNhc2UgJ3N0cmluZyc6XG4gICAgICByZXR1cm4gdjtcblxuICAgIGNhc2UgJ2Jvb2xlYW4nOlxuICAgICAgcmV0dXJuIHYgPyAndHJ1ZScgOiAnZmFsc2UnO1xuXG4gICAgY2FzZSAnbnVtYmVyJzpcbiAgICAgIHJldHVybiBpc0Zpbml0ZSh2KSA/IHYgOiAnJztcblxuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gJyc7XG4gIH1cbn07XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24ob2JqLCBzZXAsIGVxLCBuYW1lKSB7XG4gIHNlcCA9IHNlcCB8fCAnJic7XG4gIGVxID0gZXEgfHwgJz0nO1xuICBpZiAob2JqID09PSBudWxsKSB7XG4gICAgb2JqID0gdW5kZWZpbmVkO1xuICB9XG5cbiAgaWYgKHR5cGVvZiBvYmogPT09ICdvYmplY3QnKSB7XG4gICAgcmV0dXJuIG1hcChvYmplY3RLZXlzKG9iaiksIGZ1bmN0aW9uKGspIHtcbiAgICAgIHZhciBrcyA9IGVuY29kZVVSSUNvbXBvbmVudChzdHJpbmdpZnlQcmltaXRpdmUoaykpICsgZXE7XG4gICAgICBpZiAoaXNBcnJheShvYmpba10pKSB7XG4gICAgICAgIHJldHVybiBtYXAob2JqW2tdLCBmdW5jdGlvbih2KSB7XG4gICAgICAgICAgcmV0dXJuIGtzICsgZW5jb2RlVVJJQ29tcG9uZW50KHN0cmluZ2lmeVByaW1pdGl2ZSh2KSk7XG4gICAgICAgIH0pLmpvaW4oc2VwKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBrcyArIGVuY29kZVVSSUNvbXBvbmVudChzdHJpbmdpZnlQcmltaXRpdmUob2JqW2tdKSk7XG4gICAgICB9XG4gICAgfSkuam9pbihzZXApO1xuXG4gIH1cblxuICBpZiAoIW5hbWUpIHJldHVybiAnJztcbiAgcmV0dXJuIGVuY29kZVVSSUNvbXBvbmVudChzdHJpbmdpZnlQcmltaXRpdmUobmFtZSkpICsgZXEgK1xuICAgICAgICAgZW5jb2RlVVJJQ29tcG9uZW50KHN0cmluZ2lmeVByaW1pdGl2ZShvYmopKTtcbn07XG5cbnZhciBpc0FycmF5ID0gQXJyYXkuaXNBcnJheSB8fCBmdW5jdGlvbiAoeHMpIHtcbiAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh4cykgPT09ICdbb2JqZWN0IEFycmF5XSc7XG59O1xuXG5mdW5jdGlvbiBtYXAgKHhzLCBmKSB7XG4gIGlmICh4cy5tYXApIHJldHVybiB4cy5tYXAoZik7XG4gIHZhciByZXMgPSBbXTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCB4cy5sZW5ndGg7IGkrKykge1xuICAgIHJlcy5wdXNoKGYoeHNbaV0sIGkpKTtcbiAgfVxuICByZXR1cm4gcmVzO1xufVxuXG52YXIgb2JqZWN0S2V5cyA9IE9iamVjdC5rZXlzIHx8IGZ1bmN0aW9uIChvYmopIHtcbiAgdmFyIHJlcyA9IFtdO1xuICBmb3IgKHZhciBrZXkgaW4gb2JqKSB7XG4gICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmosIGtleSkpIHJlcy5wdXNoKGtleSk7XG4gIH1cbiAgcmV0dXJuIHJlcztcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbmV4cG9ydHMuZGVjb2RlID0gZXhwb3J0cy5wYXJzZSA9IHJlcXVpcmUoJy4vZGVjb2RlJyk7XG5leHBvcnRzLmVuY29kZSA9IGV4cG9ydHMuc3RyaW5naWZ5ID0gcmVxdWlyZSgnLi9lbmNvZGUnKTtcbiIsIi8vIENvcHlyaWdodCBKb3llbnQsIEluYy4gYW5kIG90aGVyIE5vZGUgY29udHJpYnV0b3JzLlxuLy9cbi8vIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhXG4vLyBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlXG4vLyBcIlNvZnR3YXJlXCIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmdcbi8vIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCxcbi8vIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXRcbi8vIHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZVxuLy8gZm9sbG93aW5nIGNvbmRpdGlvbnM6XG4vL1xuLy8gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWRcbi8vIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuLy9cbi8vIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1Ncbi8vIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0Zcbi8vIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU5cbi8vIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLFxuLy8gREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SXG4vLyBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFXG4vLyBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLlxuXG52YXIgcHVueWNvZGUgPSByZXF1aXJlKCdwdW55Y29kZScpO1xuXG5leHBvcnRzLnBhcnNlID0gdXJsUGFyc2U7XG5leHBvcnRzLnJlc29sdmUgPSB1cmxSZXNvbHZlO1xuZXhwb3J0cy5yZXNvbHZlT2JqZWN0ID0gdXJsUmVzb2x2ZU9iamVjdDtcbmV4cG9ydHMuZm9ybWF0ID0gdXJsRm9ybWF0O1xuXG5leHBvcnRzLlVybCA9IFVybDtcblxuZnVuY3Rpb24gVXJsKCkge1xuICB0aGlzLnByb3RvY29sID0gbnVsbDtcbiAgdGhpcy5zbGFzaGVzID0gbnVsbDtcbiAgdGhpcy5hdXRoID0gbnVsbDtcbiAgdGhpcy5ob3N0ID0gbnVsbDtcbiAgdGhpcy5wb3J0ID0gbnVsbDtcbiAgdGhpcy5ob3N0bmFtZSA9IG51bGw7XG4gIHRoaXMuaGFzaCA9IG51bGw7XG4gIHRoaXMuc2VhcmNoID0gbnVsbDtcbiAgdGhpcy5xdWVyeSA9IG51bGw7XG4gIHRoaXMucGF0aG5hbWUgPSBudWxsO1xuICB0aGlzLnBhdGggPSBudWxsO1xuICB0aGlzLmhyZWYgPSBudWxsO1xufVxuXG4vLyBSZWZlcmVuY2U6IFJGQyAzOTg2LCBSRkMgMTgwOCwgUkZDIDIzOTZcblxuLy8gZGVmaW5lIHRoZXNlIGhlcmUgc28gYXQgbGVhc3QgdGhleSBvbmx5IGhhdmUgdG8gYmVcbi8vIGNvbXBpbGVkIG9uY2Ugb24gdGhlIGZpcnN0IG1vZHVsZSBsb2FkLlxudmFyIHByb3RvY29sUGF0dGVybiA9IC9eKFthLXowLTkuKy1dKzopL2ksXG4gICAgcG9ydFBhdHRlcm4gPSAvOlswLTldKiQvLFxuXG4gICAgLy8gUkZDIDIzOTY6IGNoYXJhY3RlcnMgcmVzZXJ2ZWQgZm9yIGRlbGltaXRpbmcgVVJMcy5cbiAgICAvLyBXZSBhY3R1YWxseSBqdXN0IGF1dG8tZXNjYXBlIHRoZXNlLlxuICAgIGRlbGltcyA9IFsnPCcsICc+JywgJ1wiJywgJ2AnLCAnICcsICdcXHInLCAnXFxuJywgJ1xcdCddLFxuXG4gICAgLy8gUkZDIDIzOTY6IGNoYXJhY3RlcnMgbm90IGFsbG93ZWQgZm9yIHZhcmlvdXMgcmVhc29ucy5cbiAgICB1bndpc2UgPSBbJ3snLCAnfScsICd8JywgJ1xcXFwnLCAnXicsICdgJ10uY29uY2F0KGRlbGltcyksXG5cbiAgICAvLyBBbGxvd2VkIGJ5IFJGQ3MsIGJ1dCBjYXVzZSBvZiBYU1MgYXR0YWNrcy4gIEFsd2F5cyBlc2NhcGUgdGhlc2UuXG4gICAgYXV0b0VzY2FwZSA9IFsnXFwnJ10uY29uY2F0KHVud2lzZSksXG4gICAgLy8gQ2hhcmFjdGVycyB0aGF0IGFyZSBuZXZlciBldmVyIGFsbG93ZWQgaW4gYSBob3N0bmFtZS5cbiAgICAvLyBOb3RlIHRoYXQgYW55IGludmFsaWQgY2hhcnMgYXJlIGFsc28gaGFuZGxlZCwgYnV0IHRoZXNlXG4gICAgLy8gYXJlIHRoZSBvbmVzIHRoYXQgYXJlICpleHBlY3RlZCogdG8gYmUgc2Vlbiwgc28gd2UgZmFzdC1wYXRoXG4gICAgLy8gdGhlbS5cbiAgICBub25Ib3N0Q2hhcnMgPSBbJyUnLCAnLycsICc/JywgJzsnLCAnIyddLmNvbmNhdChhdXRvRXNjYXBlKSxcbiAgICBob3N0RW5kaW5nQ2hhcnMgPSBbJy8nLCAnPycsICcjJ10sXG4gICAgaG9zdG5hbWVNYXhMZW4gPSAyNTUsXG4gICAgaG9zdG5hbWVQYXJ0UGF0dGVybiA9IC9eW2EtejAtOUEtWl8tXXswLDYzfSQvLFxuICAgIGhvc3RuYW1lUGFydFN0YXJ0ID0gL14oW2EtejAtOUEtWl8tXXswLDYzfSkoLiopJC8sXG4gICAgLy8gcHJvdG9jb2xzIHRoYXQgY2FuIGFsbG93IFwidW5zYWZlXCIgYW5kIFwidW53aXNlXCIgY2hhcnMuXG4gICAgdW5zYWZlUHJvdG9jb2wgPSB7XG4gICAgICAnamF2YXNjcmlwdCc6IHRydWUsXG4gICAgICAnamF2YXNjcmlwdDonOiB0cnVlXG4gICAgfSxcbiAgICAvLyBwcm90b2NvbHMgdGhhdCBuZXZlciBoYXZlIGEgaG9zdG5hbWUuXG4gICAgaG9zdGxlc3NQcm90b2NvbCA9IHtcbiAgICAgICdqYXZhc2NyaXB0JzogdHJ1ZSxcbiAgICAgICdqYXZhc2NyaXB0Oic6IHRydWVcbiAgICB9LFxuICAgIC8vIHByb3RvY29scyB0aGF0IGFsd2F5cyBjb250YWluIGEgLy8gYml0LlxuICAgIHNsYXNoZWRQcm90b2NvbCA9IHtcbiAgICAgICdodHRwJzogdHJ1ZSxcbiAgICAgICdodHRwcyc6IHRydWUsXG4gICAgICAnZnRwJzogdHJ1ZSxcbiAgICAgICdnb3BoZXInOiB0cnVlLFxuICAgICAgJ2ZpbGUnOiB0cnVlLFxuICAgICAgJ2h0dHA6JzogdHJ1ZSxcbiAgICAgICdodHRwczonOiB0cnVlLFxuICAgICAgJ2Z0cDonOiB0cnVlLFxuICAgICAgJ2dvcGhlcjonOiB0cnVlLFxuICAgICAgJ2ZpbGU6JzogdHJ1ZVxuICAgIH0sXG4gICAgcXVlcnlzdHJpbmcgPSByZXF1aXJlKCdxdWVyeXN0cmluZycpO1xuXG5mdW5jdGlvbiB1cmxQYXJzZSh1cmwsIHBhcnNlUXVlcnlTdHJpbmcsIHNsYXNoZXNEZW5vdGVIb3N0KSB7XG4gIGlmICh1cmwgJiYgaXNPYmplY3QodXJsKSAmJiB1cmwgaW5zdGFuY2VvZiBVcmwpIHJldHVybiB1cmw7XG5cbiAgdmFyIHUgPSBuZXcgVXJsO1xuICB1LnBhcnNlKHVybCwgcGFyc2VRdWVyeVN0cmluZywgc2xhc2hlc0Rlbm90ZUhvc3QpO1xuICByZXR1cm4gdTtcbn1cblxuVXJsLnByb3RvdHlwZS5wYXJzZSA9IGZ1bmN0aW9uKHVybCwgcGFyc2VRdWVyeVN0cmluZywgc2xhc2hlc0Rlbm90ZUhvc3QpIHtcbiAgaWYgKCFpc1N0cmluZyh1cmwpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlBhcmFtZXRlciAndXJsJyBtdXN0IGJlIGEgc3RyaW5nLCBub3QgXCIgKyB0eXBlb2YgdXJsKTtcbiAgfVxuXG4gIHZhciByZXN0ID0gdXJsO1xuXG4gIC8vIHRyaW0gYmVmb3JlIHByb2NlZWRpbmcuXG4gIC8vIFRoaXMgaXMgdG8gc3VwcG9ydCBwYXJzZSBzdHVmZiBsaWtlIFwiICBodHRwOi8vZm9vLmNvbSAgXFxuXCJcbiAgcmVzdCA9IHJlc3QudHJpbSgpO1xuXG4gIHZhciBwcm90byA9IHByb3RvY29sUGF0dGVybi5leGVjKHJlc3QpO1xuICBpZiAocHJvdG8pIHtcbiAgICBwcm90byA9IHByb3RvWzBdO1xuICAgIHZhciBsb3dlclByb3RvID0gcHJvdG8udG9Mb3dlckNhc2UoKTtcbiAgICB0aGlzLnByb3RvY29sID0gbG93ZXJQcm90bztcbiAgICByZXN0ID0gcmVzdC5zdWJzdHIocHJvdG8ubGVuZ3RoKTtcbiAgfVxuXG4gIC8vIGZpZ3VyZSBvdXQgaWYgaXQncyBnb3QgYSBob3N0XG4gIC8vIHVzZXJAc2VydmVyIGlzICphbHdheXMqIGludGVycHJldGVkIGFzIGEgaG9zdG5hbWUsIGFuZCB1cmxcbiAgLy8gcmVzb2x1dGlvbiB3aWxsIHRyZWF0IC8vZm9vL2JhciBhcyBob3N0PWZvbyxwYXRoPWJhciBiZWNhdXNlIHRoYXQnc1xuICAvLyBob3cgdGhlIGJyb3dzZXIgcmVzb2x2ZXMgcmVsYXRpdmUgVVJMcy5cbiAgaWYgKHNsYXNoZXNEZW5vdGVIb3N0IHx8IHByb3RvIHx8IHJlc3QubWF0Y2goL15cXC9cXC9bXkBcXC9dK0BbXkBcXC9dKy8pKSB7XG4gICAgdmFyIHNsYXNoZXMgPSByZXN0LnN1YnN0cigwLCAyKSA9PT0gJy8vJztcbiAgICBpZiAoc2xhc2hlcyAmJiAhKHByb3RvICYmIGhvc3RsZXNzUHJvdG9jb2xbcHJvdG9dKSkge1xuICAgICAgcmVzdCA9IHJlc3Quc3Vic3RyKDIpO1xuICAgICAgdGhpcy5zbGFzaGVzID0gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICBpZiAoIWhvc3RsZXNzUHJvdG9jb2xbcHJvdG9dICYmXG4gICAgICAoc2xhc2hlcyB8fCAocHJvdG8gJiYgIXNsYXNoZWRQcm90b2NvbFtwcm90b10pKSkge1xuXG4gICAgLy8gdGhlcmUncyBhIGhvc3RuYW1lLlxuICAgIC8vIHRoZSBmaXJzdCBpbnN0YW5jZSBvZiAvLCA/LCA7LCBvciAjIGVuZHMgdGhlIGhvc3QuXG4gICAgLy9cbiAgICAvLyBJZiB0aGVyZSBpcyBhbiBAIGluIHRoZSBob3N0bmFtZSwgdGhlbiBub24taG9zdCBjaGFycyAqYXJlKiBhbGxvd2VkXG4gICAgLy8gdG8gdGhlIGxlZnQgb2YgdGhlIGxhc3QgQCBzaWduLCB1bmxlc3Mgc29tZSBob3N0LWVuZGluZyBjaGFyYWN0ZXJcbiAgICAvLyBjb21lcyAqYmVmb3JlKiB0aGUgQC1zaWduLlxuICAgIC8vIFVSTHMgYXJlIG9ibm94aW91cy5cbiAgICAvL1xuICAgIC8vIGV4OlxuICAgIC8vIGh0dHA6Ly9hQGJAYy8gPT4gdXNlcjphQGIgaG9zdDpjXG4gICAgLy8gaHR0cDovL2FAYj9AYyA9PiB1c2VyOmEgaG9zdDpjIHBhdGg6Lz9AY1xuXG4gICAgLy8gdjAuMTIgVE9ETyhpc2FhY3MpOiBUaGlzIGlzIG5vdCBxdWl0ZSBob3cgQ2hyb21lIGRvZXMgdGhpbmdzLlxuICAgIC8vIFJldmlldyBvdXIgdGVzdCBjYXNlIGFnYWluc3QgYnJvd3NlcnMgbW9yZSBjb21wcmVoZW5zaXZlbHkuXG5cbiAgICAvLyBmaW5kIHRoZSBmaXJzdCBpbnN0YW5jZSBvZiBhbnkgaG9zdEVuZGluZ0NoYXJzXG4gICAgdmFyIGhvc3RFbmQgPSAtMTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGhvc3RFbmRpbmdDaGFycy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGhlYyA9IHJlc3QuaW5kZXhPZihob3N0RW5kaW5nQ2hhcnNbaV0pO1xuICAgICAgaWYgKGhlYyAhPT0gLTEgJiYgKGhvc3RFbmQgPT09IC0xIHx8IGhlYyA8IGhvc3RFbmQpKVxuICAgICAgICBob3N0RW5kID0gaGVjO1xuICAgIH1cblxuICAgIC8vIGF0IHRoaXMgcG9pbnQsIGVpdGhlciB3ZSBoYXZlIGFuIGV4cGxpY2l0IHBvaW50IHdoZXJlIHRoZVxuICAgIC8vIGF1dGggcG9ydGlvbiBjYW5ub3QgZ28gcGFzdCwgb3IgdGhlIGxhc3QgQCBjaGFyIGlzIHRoZSBkZWNpZGVyLlxuICAgIHZhciBhdXRoLCBhdFNpZ247XG4gICAgaWYgKGhvc3RFbmQgPT09IC0xKSB7XG4gICAgICAvLyBhdFNpZ24gY2FuIGJlIGFueXdoZXJlLlxuICAgICAgYXRTaWduID0gcmVzdC5sYXN0SW5kZXhPZignQCcpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBhdFNpZ24gbXVzdCBiZSBpbiBhdXRoIHBvcnRpb24uXG4gICAgICAvLyBodHRwOi8vYUBiL2NAZCA9PiBob3N0OmIgYXV0aDphIHBhdGg6L2NAZFxuICAgICAgYXRTaWduID0gcmVzdC5sYXN0SW5kZXhPZignQCcsIGhvc3RFbmQpO1xuICAgIH1cblxuICAgIC8vIE5vdyB3ZSBoYXZlIGEgcG9ydGlvbiB3aGljaCBpcyBkZWZpbml0ZWx5IHRoZSBhdXRoLlxuICAgIC8vIFB1bGwgdGhhdCBvZmYuXG4gICAgaWYgKGF0U2lnbiAhPT0gLTEpIHtcbiAgICAgIGF1dGggPSByZXN0LnNsaWNlKDAsIGF0U2lnbik7XG4gICAgICByZXN0ID0gcmVzdC5zbGljZShhdFNpZ24gKyAxKTtcbiAgICAgIHRoaXMuYXV0aCA9IGRlY29kZVVSSUNvbXBvbmVudChhdXRoKTtcbiAgICB9XG5cbiAgICAvLyB0aGUgaG9zdCBpcyB0aGUgcmVtYWluaW5nIHRvIHRoZSBsZWZ0IG9mIHRoZSBmaXJzdCBub24taG9zdCBjaGFyXG4gICAgaG9zdEVuZCA9IC0xO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbm9uSG9zdENoYXJzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgaGVjID0gcmVzdC5pbmRleE9mKG5vbkhvc3RDaGFyc1tpXSk7XG4gICAgICBpZiAoaGVjICE9PSAtMSAmJiAoaG9zdEVuZCA9PT0gLTEgfHwgaGVjIDwgaG9zdEVuZCkpXG4gICAgICAgIGhvc3RFbmQgPSBoZWM7XG4gICAgfVxuICAgIC8vIGlmIHdlIHN0aWxsIGhhdmUgbm90IGhpdCBpdCwgdGhlbiB0aGUgZW50aXJlIHRoaW5nIGlzIGEgaG9zdC5cbiAgICBpZiAoaG9zdEVuZCA9PT0gLTEpXG4gICAgICBob3N0RW5kID0gcmVzdC5sZW5ndGg7XG5cbiAgICB0aGlzLmhvc3QgPSByZXN0LnNsaWNlKDAsIGhvc3RFbmQpO1xuICAgIHJlc3QgPSByZXN0LnNsaWNlKGhvc3RFbmQpO1xuXG4gICAgLy8gcHVsbCBvdXQgcG9ydC5cbiAgICB0aGlzLnBhcnNlSG9zdCgpO1xuXG4gICAgLy8gd2UndmUgaW5kaWNhdGVkIHRoYXQgdGhlcmUgaXMgYSBob3N0bmFtZSxcbiAgICAvLyBzbyBldmVuIGlmIGl0J3MgZW1wdHksIGl0IGhhcyB0byBiZSBwcmVzZW50LlxuICAgIHRoaXMuaG9zdG5hbWUgPSB0aGlzLmhvc3RuYW1lIHx8ICcnO1xuXG4gICAgLy8gaWYgaG9zdG5hbWUgYmVnaW5zIHdpdGggWyBhbmQgZW5kcyB3aXRoIF1cbiAgICAvLyBhc3N1bWUgdGhhdCBpdCdzIGFuIElQdjYgYWRkcmVzcy5cbiAgICB2YXIgaXB2Nkhvc3RuYW1lID0gdGhpcy5ob3N0bmFtZVswXSA9PT0gJ1snICYmXG4gICAgICAgIHRoaXMuaG9zdG5hbWVbdGhpcy5ob3N0bmFtZS5sZW5ndGggLSAxXSA9PT0gJ10nO1xuXG4gICAgLy8gdmFsaWRhdGUgYSBsaXR0bGUuXG4gICAgaWYgKCFpcHY2SG9zdG5hbWUpIHtcbiAgICAgIHZhciBob3N0cGFydHMgPSB0aGlzLmhvc3RuYW1lLnNwbGl0KC9cXC4vKTtcbiAgICAgIGZvciAodmFyIGkgPSAwLCBsID0gaG9zdHBhcnRzLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgICAgICB2YXIgcGFydCA9IGhvc3RwYXJ0c1tpXTtcbiAgICAgICAgaWYgKCFwYXJ0KSBjb250aW51ZTtcbiAgICAgICAgaWYgKCFwYXJ0Lm1hdGNoKGhvc3RuYW1lUGFydFBhdHRlcm4pKSB7XG4gICAgICAgICAgdmFyIG5ld3BhcnQgPSAnJztcbiAgICAgICAgICBmb3IgKHZhciBqID0gMCwgayA9IHBhcnQubGVuZ3RoOyBqIDwgazsgaisrKSB7XG4gICAgICAgICAgICBpZiAocGFydC5jaGFyQ29kZUF0KGopID4gMTI3KSB7XG4gICAgICAgICAgICAgIC8vIHdlIHJlcGxhY2Ugbm9uLUFTQ0lJIGNoYXIgd2l0aCBhIHRlbXBvcmFyeSBwbGFjZWhvbGRlclxuICAgICAgICAgICAgICAvLyB3ZSBuZWVkIHRoaXMgdG8gbWFrZSBzdXJlIHNpemUgb2YgaG9zdG5hbWUgaXMgbm90XG4gICAgICAgICAgICAgIC8vIGJyb2tlbiBieSByZXBsYWNpbmcgbm9uLUFTQ0lJIGJ5IG5vdGhpbmdcbiAgICAgICAgICAgICAgbmV3cGFydCArPSAneCc7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBuZXdwYXJ0ICs9IHBhcnRbal07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIC8vIHdlIHRlc3QgYWdhaW4gd2l0aCBBU0NJSSBjaGFyIG9ubHlcbiAgICAgICAgICBpZiAoIW5ld3BhcnQubWF0Y2goaG9zdG5hbWVQYXJ0UGF0dGVybikpIHtcbiAgICAgICAgICAgIHZhciB2YWxpZFBhcnRzID0gaG9zdHBhcnRzLnNsaWNlKDAsIGkpO1xuICAgICAgICAgICAgdmFyIG5vdEhvc3QgPSBob3N0cGFydHMuc2xpY2UoaSArIDEpO1xuICAgICAgICAgICAgdmFyIGJpdCA9IHBhcnQubWF0Y2goaG9zdG5hbWVQYXJ0U3RhcnQpO1xuICAgICAgICAgICAgaWYgKGJpdCkge1xuICAgICAgICAgICAgICB2YWxpZFBhcnRzLnB1c2goYml0WzFdKTtcbiAgICAgICAgICAgICAgbm90SG9zdC51bnNoaWZ0KGJpdFsyXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAobm90SG9zdC5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgcmVzdCA9ICcvJyArIG5vdEhvc3Quam9pbignLicpICsgcmVzdDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuaG9zdG5hbWUgPSB2YWxpZFBhcnRzLmpvaW4oJy4nKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0aGlzLmhvc3RuYW1lLmxlbmd0aCA+IGhvc3RuYW1lTWF4TGVuKSB7XG4gICAgICB0aGlzLmhvc3RuYW1lID0gJyc7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIGhvc3RuYW1lcyBhcmUgYWx3YXlzIGxvd2VyIGNhc2UuXG4gICAgICB0aGlzLmhvc3RuYW1lID0gdGhpcy5ob3N0bmFtZS50b0xvd2VyQ2FzZSgpO1xuICAgIH1cblxuICAgIGlmICghaXB2Nkhvc3RuYW1lKSB7XG4gICAgICAvLyBJRE5BIFN1cHBvcnQ6IFJldHVybnMgYSBwdW55IGNvZGVkIHJlcHJlc2VudGF0aW9uIG9mIFwiZG9tYWluXCIuXG4gICAgICAvLyBJdCBvbmx5IGNvbnZlcnRzIHRoZSBwYXJ0IG9mIHRoZSBkb21haW4gbmFtZSB0aGF0XG4gICAgICAvLyBoYXMgbm9uIEFTQ0lJIGNoYXJhY3RlcnMuIEkuZS4gaXQgZG9zZW50IG1hdHRlciBpZlxuICAgICAgLy8geW91IGNhbGwgaXQgd2l0aCBhIGRvbWFpbiB0aGF0IGFscmVhZHkgaXMgaW4gQVNDSUkuXG4gICAgICB2YXIgZG9tYWluQXJyYXkgPSB0aGlzLmhvc3RuYW1lLnNwbGl0KCcuJyk7XG4gICAgICB2YXIgbmV3T3V0ID0gW107XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGRvbWFpbkFycmF5Lmxlbmd0aDsgKytpKSB7XG4gICAgICAgIHZhciBzID0gZG9tYWluQXJyYXlbaV07XG4gICAgICAgIG5ld091dC5wdXNoKHMubWF0Y2goL1teQS1aYS16MC05Xy1dLykgP1xuICAgICAgICAgICAgJ3huLS0nICsgcHVueWNvZGUuZW5jb2RlKHMpIDogcyk7XG4gICAgICB9XG4gICAgICB0aGlzLmhvc3RuYW1lID0gbmV3T3V0LmpvaW4oJy4nKTtcbiAgICB9XG5cbiAgICB2YXIgcCA9IHRoaXMucG9ydCA/ICc6JyArIHRoaXMucG9ydCA6ICcnO1xuICAgIHZhciBoID0gdGhpcy5ob3N0bmFtZSB8fCAnJztcbiAgICB0aGlzLmhvc3QgPSBoICsgcDtcbiAgICB0aGlzLmhyZWYgKz0gdGhpcy5ob3N0O1xuXG4gICAgLy8gc3RyaXAgWyBhbmQgXSBmcm9tIHRoZSBob3N0bmFtZVxuICAgIC8vIHRoZSBob3N0IGZpZWxkIHN0aWxsIHJldGFpbnMgdGhlbSwgdGhvdWdoXG4gICAgaWYgKGlwdjZIb3N0bmFtZSkge1xuICAgICAgdGhpcy5ob3N0bmFtZSA9IHRoaXMuaG9zdG5hbWUuc3Vic3RyKDEsIHRoaXMuaG9zdG5hbWUubGVuZ3RoIC0gMik7XG4gICAgICBpZiAocmVzdFswXSAhPT0gJy8nKSB7XG4gICAgICAgIHJlc3QgPSAnLycgKyByZXN0O1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIG5vdyByZXN0IGlzIHNldCB0byB0aGUgcG9zdC1ob3N0IHN0dWZmLlxuICAvLyBjaG9wIG9mZiBhbnkgZGVsaW0gY2hhcnMuXG4gIGlmICghdW5zYWZlUHJvdG9jb2xbbG93ZXJQcm90b10pIHtcblxuICAgIC8vIEZpcnN0LCBtYWtlIDEwMCUgc3VyZSB0aGF0IGFueSBcImF1dG9Fc2NhcGVcIiBjaGFycyBnZXRcbiAgICAvLyBlc2NhcGVkLCBldmVuIGlmIGVuY29kZVVSSUNvbXBvbmVudCBkb2Vzbid0IHRoaW5rIHRoZXlcbiAgICAvLyBuZWVkIHRvIGJlLlxuICAgIGZvciAodmFyIGkgPSAwLCBsID0gYXV0b0VzY2FwZS5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICAgIHZhciBhZSA9IGF1dG9Fc2NhcGVbaV07XG4gICAgICB2YXIgZXNjID0gZW5jb2RlVVJJQ29tcG9uZW50KGFlKTtcbiAgICAgIGlmIChlc2MgPT09IGFlKSB7XG4gICAgICAgIGVzYyA9IGVzY2FwZShhZSk7XG4gICAgICB9XG4gICAgICByZXN0ID0gcmVzdC5zcGxpdChhZSkuam9pbihlc2MpO1xuICAgIH1cbiAgfVxuXG5cbiAgLy8gY2hvcCBvZmYgZnJvbSB0aGUgdGFpbCBmaXJzdC5cbiAgdmFyIGhhc2ggPSByZXN0LmluZGV4T2YoJyMnKTtcbiAgaWYgKGhhc2ggIT09IC0xKSB7XG4gICAgLy8gZ290IGEgZnJhZ21lbnQgc3RyaW5nLlxuICAgIHRoaXMuaGFzaCA9IHJlc3Quc3Vic3RyKGhhc2gpO1xuICAgIHJlc3QgPSByZXN0LnNsaWNlKDAsIGhhc2gpO1xuICB9XG4gIHZhciBxbSA9IHJlc3QuaW5kZXhPZignPycpO1xuICBpZiAocW0gIT09IC0xKSB7XG4gICAgdGhpcy5zZWFyY2ggPSByZXN0LnN1YnN0cihxbSk7XG4gICAgdGhpcy5xdWVyeSA9IHJlc3Quc3Vic3RyKHFtICsgMSk7XG4gICAgaWYgKHBhcnNlUXVlcnlTdHJpbmcpIHtcbiAgICAgIHRoaXMucXVlcnkgPSBxdWVyeXN0cmluZy5wYXJzZSh0aGlzLnF1ZXJ5KTtcbiAgICB9XG4gICAgcmVzdCA9IHJlc3Quc2xpY2UoMCwgcW0pO1xuICB9IGVsc2UgaWYgKHBhcnNlUXVlcnlTdHJpbmcpIHtcbiAgICAvLyBubyBxdWVyeSBzdHJpbmcsIGJ1dCBwYXJzZVF1ZXJ5U3RyaW5nIHN0aWxsIHJlcXVlc3RlZFxuICAgIHRoaXMuc2VhcmNoID0gJyc7XG4gICAgdGhpcy5xdWVyeSA9IHt9O1xuICB9XG4gIGlmIChyZXN0KSB0aGlzLnBhdGhuYW1lID0gcmVzdDtcbiAgaWYgKHNsYXNoZWRQcm90b2NvbFtsb3dlclByb3RvXSAmJlxuICAgICAgdGhpcy5ob3N0bmFtZSAmJiAhdGhpcy5wYXRobmFtZSkge1xuICAgIHRoaXMucGF0aG5hbWUgPSAnLyc7XG4gIH1cblxuICAvL3RvIHN1cHBvcnQgaHR0cC5yZXF1ZXN0XG4gIGlmICh0aGlzLnBhdGhuYW1lIHx8IHRoaXMuc2VhcmNoKSB7XG4gICAgdmFyIHAgPSB0aGlzLnBhdGhuYW1lIHx8ICcnO1xuICAgIHZhciBzID0gdGhpcy5zZWFyY2ggfHwgJyc7XG4gICAgdGhpcy5wYXRoID0gcCArIHM7XG4gIH1cblxuICAvLyBmaW5hbGx5LCByZWNvbnN0cnVjdCB0aGUgaHJlZiBiYXNlZCBvbiB3aGF0IGhhcyBiZWVuIHZhbGlkYXRlZC5cbiAgdGhpcy5ocmVmID0gdGhpcy5mb3JtYXQoKTtcbiAgcmV0dXJuIHRoaXM7XG59O1xuXG4vLyBmb3JtYXQgYSBwYXJzZWQgb2JqZWN0IGludG8gYSB1cmwgc3RyaW5nXG5mdW5jdGlvbiB1cmxGb3JtYXQob2JqKSB7XG4gIC8vIGVuc3VyZSBpdCdzIGFuIG9iamVjdCwgYW5kIG5vdCBhIHN0cmluZyB1cmwuXG4gIC8vIElmIGl0J3MgYW4gb2JqLCB0aGlzIGlzIGEgbm8tb3AuXG4gIC8vIHRoaXMgd2F5LCB5b3UgY2FuIGNhbGwgdXJsX2Zvcm1hdCgpIG9uIHN0cmluZ3NcbiAgLy8gdG8gY2xlYW4gdXAgcG90ZW50aWFsbHkgd29ua3kgdXJscy5cbiAgaWYgKGlzU3RyaW5nKG9iaikpIG9iaiA9IHVybFBhcnNlKG9iaik7XG4gIGlmICghKG9iaiBpbnN0YW5jZW9mIFVybCkpIHJldHVybiBVcmwucHJvdG90eXBlLmZvcm1hdC5jYWxsKG9iaik7XG4gIHJldHVybiBvYmouZm9ybWF0KCk7XG59XG5cblVybC5wcm90b3R5cGUuZm9ybWF0ID0gZnVuY3Rpb24oKSB7XG4gIHZhciBhdXRoID0gdGhpcy5hdXRoIHx8ICcnO1xuICBpZiAoYXV0aCkge1xuICAgIGF1dGggPSBlbmNvZGVVUklDb21wb25lbnQoYXV0aCk7XG4gICAgYXV0aCA9IGF1dGgucmVwbGFjZSgvJTNBL2ksICc6Jyk7XG4gICAgYXV0aCArPSAnQCc7XG4gIH1cblxuICB2YXIgcHJvdG9jb2wgPSB0aGlzLnByb3RvY29sIHx8ICcnLFxuICAgICAgcGF0aG5hbWUgPSB0aGlzLnBhdGhuYW1lIHx8ICcnLFxuICAgICAgaGFzaCA9IHRoaXMuaGFzaCB8fCAnJyxcbiAgICAgIGhvc3QgPSBmYWxzZSxcbiAgICAgIHF1ZXJ5ID0gJyc7XG5cbiAgaWYgKHRoaXMuaG9zdCkge1xuICAgIGhvc3QgPSBhdXRoICsgdGhpcy5ob3N0O1xuICB9IGVsc2UgaWYgKHRoaXMuaG9zdG5hbWUpIHtcbiAgICBob3N0ID0gYXV0aCArICh0aGlzLmhvc3RuYW1lLmluZGV4T2YoJzonKSA9PT0gLTEgP1xuICAgICAgICB0aGlzLmhvc3RuYW1lIDpcbiAgICAgICAgJ1snICsgdGhpcy5ob3N0bmFtZSArICddJyk7XG4gICAgaWYgKHRoaXMucG9ydCkge1xuICAgICAgaG9zdCArPSAnOicgKyB0aGlzLnBvcnQ7XG4gICAgfVxuICB9XG5cbiAgaWYgKHRoaXMucXVlcnkgJiZcbiAgICAgIGlzT2JqZWN0KHRoaXMucXVlcnkpICYmXG4gICAgICBPYmplY3Qua2V5cyh0aGlzLnF1ZXJ5KS5sZW5ndGgpIHtcbiAgICBxdWVyeSA9IHF1ZXJ5c3RyaW5nLnN0cmluZ2lmeSh0aGlzLnF1ZXJ5KTtcbiAgfVxuXG4gIHZhciBzZWFyY2ggPSB0aGlzLnNlYXJjaCB8fCAocXVlcnkgJiYgKCc/JyArIHF1ZXJ5KSkgfHwgJyc7XG5cbiAgaWYgKHByb3RvY29sICYmIHByb3RvY29sLnN1YnN0cigtMSkgIT09ICc6JykgcHJvdG9jb2wgKz0gJzonO1xuXG4gIC8vIG9ubHkgdGhlIHNsYXNoZWRQcm90b2NvbHMgZ2V0IHRoZSAvLy4gIE5vdCBtYWlsdG86LCB4bXBwOiwgZXRjLlxuICAvLyB1bmxlc3MgdGhleSBoYWQgdGhlbSB0byBiZWdpbiB3aXRoLlxuICBpZiAodGhpcy5zbGFzaGVzIHx8XG4gICAgICAoIXByb3RvY29sIHx8IHNsYXNoZWRQcm90b2NvbFtwcm90b2NvbF0pICYmIGhvc3QgIT09IGZhbHNlKSB7XG4gICAgaG9zdCA9ICcvLycgKyAoaG9zdCB8fCAnJyk7XG4gICAgaWYgKHBhdGhuYW1lICYmIHBhdGhuYW1lLmNoYXJBdCgwKSAhPT0gJy8nKSBwYXRobmFtZSA9ICcvJyArIHBhdGhuYW1lO1xuICB9IGVsc2UgaWYgKCFob3N0KSB7XG4gICAgaG9zdCA9ICcnO1xuICB9XG5cbiAgaWYgKGhhc2ggJiYgaGFzaC5jaGFyQXQoMCkgIT09ICcjJykgaGFzaCA9ICcjJyArIGhhc2g7XG4gIGlmIChzZWFyY2ggJiYgc2VhcmNoLmNoYXJBdCgwKSAhPT0gJz8nKSBzZWFyY2ggPSAnPycgKyBzZWFyY2g7XG5cbiAgcGF0aG5hbWUgPSBwYXRobmFtZS5yZXBsYWNlKC9bPyNdL2csIGZ1bmN0aW9uKG1hdGNoKSB7XG4gICAgcmV0dXJuIGVuY29kZVVSSUNvbXBvbmVudChtYXRjaCk7XG4gIH0pO1xuICBzZWFyY2ggPSBzZWFyY2gucmVwbGFjZSgnIycsICclMjMnKTtcblxuICByZXR1cm4gcHJvdG9jb2wgKyBob3N0ICsgcGF0aG5hbWUgKyBzZWFyY2ggKyBoYXNoO1xufTtcblxuZnVuY3Rpb24gdXJsUmVzb2x2ZShzb3VyY2UsIHJlbGF0aXZlKSB7XG4gIHJldHVybiB1cmxQYXJzZShzb3VyY2UsIGZhbHNlLCB0cnVlKS5yZXNvbHZlKHJlbGF0aXZlKTtcbn1cblxuVXJsLnByb3RvdHlwZS5yZXNvbHZlID0gZnVuY3Rpb24ocmVsYXRpdmUpIHtcbiAgcmV0dXJuIHRoaXMucmVzb2x2ZU9iamVjdCh1cmxQYXJzZShyZWxhdGl2ZSwgZmFsc2UsIHRydWUpKS5mb3JtYXQoKTtcbn07XG5cbmZ1bmN0aW9uIHVybFJlc29sdmVPYmplY3Qoc291cmNlLCByZWxhdGl2ZSkge1xuICBpZiAoIXNvdXJjZSkgcmV0dXJuIHJlbGF0aXZlO1xuICByZXR1cm4gdXJsUGFyc2Uoc291cmNlLCBmYWxzZSwgdHJ1ZSkucmVzb2x2ZU9iamVjdChyZWxhdGl2ZSk7XG59XG5cblVybC5wcm90b3R5cGUucmVzb2x2ZU9iamVjdCA9IGZ1bmN0aW9uKHJlbGF0aXZlKSB7XG4gIGlmIChpc1N0cmluZyhyZWxhdGl2ZSkpIHtcbiAgICB2YXIgcmVsID0gbmV3IFVybCgpO1xuICAgIHJlbC5wYXJzZShyZWxhdGl2ZSwgZmFsc2UsIHRydWUpO1xuICAgIHJlbGF0aXZlID0gcmVsO1xuICB9XG5cbiAgdmFyIHJlc3VsdCA9IG5ldyBVcmwoKTtcbiAgT2JqZWN0LmtleXModGhpcykuZm9yRWFjaChmdW5jdGlvbihrKSB7XG4gICAgcmVzdWx0W2tdID0gdGhpc1trXTtcbiAgfSwgdGhpcyk7XG5cbiAgLy8gaGFzaCBpcyBhbHdheXMgb3ZlcnJpZGRlbiwgbm8gbWF0dGVyIHdoYXQuXG4gIC8vIGV2ZW4gaHJlZj1cIlwiIHdpbGwgcmVtb3ZlIGl0LlxuICByZXN1bHQuaGFzaCA9IHJlbGF0aXZlLmhhc2g7XG5cbiAgLy8gaWYgdGhlIHJlbGF0aXZlIHVybCBpcyBlbXB0eSwgdGhlbiB0aGVyZSdzIG5vdGhpbmcgbGVmdCB0byBkbyBoZXJlLlxuICBpZiAocmVsYXRpdmUuaHJlZiA9PT0gJycpIHtcbiAgICByZXN1bHQuaHJlZiA9IHJlc3VsdC5mb3JtYXQoKTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgLy8gaHJlZnMgbGlrZSAvL2Zvby9iYXIgYWx3YXlzIGN1dCB0byB0aGUgcHJvdG9jb2wuXG4gIGlmIChyZWxhdGl2ZS5zbGFzaGVzICYmICFyZWxhdGl2ZS5wcm90b2NvbCkge1xuICAgIC8vIHRha2UgZXZlcnl0aGluZyBleGNlcHQgdGhlIHByb3RvY29sIGZyb20gcmVsYXRpdmVcbiAgICBPYmplY3Qua2V5cyhyZWxhdGl2ZSkuZm9yRWFjaChmdW5jdGlvbihrKSB7XG4gICAgICBpZiAoayAhPT0gJ3Byb3RvY29sJylcbiAgICAgICAgcmVzdWx0W2tdID0gcmVsYXRpdmVba107XG4gICAgfSk7XG5cbiAgICAvL3VybFBhcnNlIGFwcGVuZHMgdHJhaWxpbmcgLyB0byB1cmxzIGxpa2UgaHR0cDovL3d3dy5leGFtcGxlLmNvbVxuICAgIGlmIChzbGFzaGVkUHJvdG9jb2xbcmVzdWx0LnByb3RvY29sXSAmJlxuICAgICAgICByZXN1bHQuaG9zdG5hbWUgJiYgIXJlc3VsdC5wYXRobmFtZSkge1xuICAgICAgcmVzdWx0LnBhdGggPSByZXN1bHQucGF0aG5hbWUgPSAnLyc7XG4gICAgfVxuXG4gICAgcmVzdWx0LmhyZWYgPSByZXN1bHQuZm9ybWF0KCk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIGlmIChyZWxhdGl2ZS5wcm90b2NvbCAmJiByZWxhdGl2ZS5wcm90b2NvbCAhPT0gcmVzdWx0LnByb3RvY29sKSB7XG4gICAgLy8gaWYgaXQncyBhIGtub3duIHVybCBwcm90b2NvbCwgdGhlbiBjaGFuZ2luZ1xuICAgIC8vIHRoZSBwcm90b2NvbCBkb2VzIHdlaXJkIHRoaW5nc1xuICAgIC8vIGZpcnN0LCBpZiBpdCdzIG5vdCBmaWxlOiwgdGhlbiB3ZSBNVVNUIGhhdmUgYSBob3N0LFxuICAgIC8vIGFuZCBpZiB0aGVyZSB3YXMgYSBwYXRoXG4gICAgLy8gdG8gYmVnaW4gd2l0aCwgdGhlbiB3ZSBNVVNUIGhhdmUgYSBwYXRoLlxuICAgIC8vIGlmIGl0IGlzIGZpbGU6LCB0aGVuIHRoZSBob3N0IGlzIGRyb3BwZWQsXG4gICAgLy8gYmVjYXVzZSB0aGF0J3Mga25vd24gdG8gYmUgaG9zdGxlc3MuXG4gICAgLy8gYW55dGhpbmcgZWxzZSBpcyBhc3N1bWVkIHRvIGJlIGFic29sdXRlLlxuICAgIGlmICghc2xhc2hlZFByb3RvY29sW3JlbGF0aXZlLnByb3RvY29sXSkge1xuICAgICAgT2JqZWN0LmtleXMocmVsYXRpdmUpLmZvckVhY2goZnVuY3Rpb24oaykge1xuICAgICAgICByZXN1bHRba10gPSByZWxhdGl2ZVtrXTtcbiAgICAgIH0pO1xuICAgICAgcmVzdWx0LmhyZWYgPSByZXN1bHQuZm9ybWF0KCk7XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIHJlc3VsdC5wcm90b2NvbCA9IHJlbGF0aXZlLnByb3RvY29sO1xuICAgIGlmICghcmVsYXRpdmUuaG9zdCAmJiAhaG9zdGxlc3NQcm90b2NvbFtyZWxhdGl2ZS5wcm90b2NvbF0pIHtcbiAgICAgIHZhciByZWxQYXRoID0gKHJlbGF0aXZlLnBhdGhuYW1lIHx8ICcnKS5zcGxpdCgnLycpO1xuICAgICAgd2hpbGUgKHJlbFBhdGgubGVuZ3RoICYmICEocmVsYXRpdmUuaG9zdCA9IHJlbFBhdGguc2hpZnQoKSkpO1xuICAgICAgaWYgKCFyZWxhdGl2ZS5ob3N0KSByZWxhdGl2ZS5ob3N0ID0gJyc7XG4gICAgICBpZiAoIXJlbGF0aXZlLmhvc3RuYW1lKSByZWxhdGl2ZS5ob3N0bmFtZSA9ICcnO1xuICAgICAgaWYgKHJlbFBhdGhbMF0gIT09ICcnKSByZWxQYXRoLnVuc2hpZnQoJycpO1xuICAgICAgaWYgKHJlbFBhdGgubGVuZ3RoIDwgMikgcmVsUGF0aC51bnNoaWZ0KCcnKTtcbiAgICAgIHJlc3VsdC5wYXRobmFtZSA9IHJlbFBhdGguam9pbignLycpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXN1bHQucGF0aG5hbWUgPSByZWxhdGl2ZS5wYXRobmFtZTtcbiAgICB9XG4gICAgcmVzdWx0LnNlYXJjaCA9IHJlbGF0aXZlLnNlYXJjaDtcbiAgICByZXN1bHQucXVlcnkgPSByZWxhdGl2ZS5xdWVyeTtcbiAgICByZXN1bHQuaG9zdCA9IHJlbGF0aXZlLmhvc3QgfHwgJyc7XG4gICAgcmVzdWx0LmF1dGggPSByZWxhdGl2ZS5hdXRoO1xuICAgIHJlc3VsdC5ob3N0bmFtZSA9IHJlbGF0aXZlLmhvc3RuYW1lIHx8IHJlbGF0aXZlLmhvc3Q7XG4gICAgcmVzdWx0LnBvcnQgPSByZWxhdGl2ZS5wb3J0O1xuICAgIC8vIHRvIHN1cHBvcnQgaHR0cC5yZXF1ZXN0XG4gICAgaWYgKHJlc3VsdC5wYXRobmFtZSB8fCByZXN1bHQuc2VhcmNoKSB7XG4gICAgICB2YXIgcCA9IHJlc3VsdC5wYXRobmFtZSB8fCAnJztcbiAgICAgIHZhciBzID0gcmVzdWx0LnNlYXJjaCB8fCAnJztcbiAgICAgIHJlc3VsdC5wYXRoID0gcCArIHM7XG4gICAgfVxuICAgIHJlc3VsdC5zbGFzaGVzID0gcmVzdWx0LnNsYXNoZXMgfHwgcmVsYXRpdmUuc2xhc2hlcztcbiAgICByZXN1bHQuaHJlZiA9IHJlc3VsdC5mb3JtYXQoKTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgdmFyIGlzU291cmNlQWJzID0gKHJlc3VsdC5wYXRobmFtZSAmJiByZXN1bHQucGF0aG5hbWUuY2hhckF0KDApID09PSAnLycpLFxuICAgICAgaXNSZWxBYnMgPSAoXG4gICAgICAgICAgcmVsYXRpdmUuaG9zdCB8fFxuICAgICAgICAgIHJlbGF0aXZlLnBhdGhuYW1lICYmIHJlbGF0aXZlLnBhdGhuYW1lLmNoYXJBdCgwKSA9PT0gJy8nXG4gICAgICApLFxuICAgICAgbXVzdEVuZEFicyA9IChpc1JlbEFicyB8fCBpc1NvdXJjZUFicyB8fFxuICAgICAgICAgICAgICAgICAgICAocmVzdWx0Lmhvc3QgJiYgcmVsYXRpdmUucGF0aG5hbWUpKSxcbiAgICAgIHJlbW92ZUFsbERvdHMgPSBtdXN0RW5kQWJzLFxuICAgICAgc3JjUGF0aCA9IHJlc3VsdC5wYXRobmFtZSAmJiByZXN1bHQucGF0aG5hbWUuc3BsaXQoJy8nKSB8fCBbXSxcbiAgICAgIHJlbFBhdGggPSByZWxhdGl2ZS5wYXRobmFtZSAmJiByZWxhdGl2ZS5wYXRobmFtZS5zcGxpdCgnLycpIHx8IFtdLFxuICAgICAgcHN5Y2hvdGljID0gcmVzdWx0LnByb3RvY29sICYmICFzbGFzaGVkUHJvdG9jb2xbcmVzdWx0LnByb3RvY29sXTtcblxuICAvLyBpZiB0aGUgdXJsIGlzIGEgbm9uLXNsYXNoZWQgdXJsLCB0aGVuIHJlbGF0aXZlXG4gIC8vIGxpbmtzIGxpa2UgLi4vLi4gc2hvdWxkIGJlIGFibGVcbiAgLy8gdG8gY3Jhd2wgdXAgdG8gdGhlIGhvc3RuYW1lLCBhcyB3ZWxsLiAgVGhpcyBpcyBzdHJhbmdlLlxuICAvLyByZXN1bHQucHJvdG9jb2wgaGFzIGFscmVhZHkgYmVlbiBzZXQgYnkgbm93LlxuICAvLyBMYXRlciBvbiwgcHV0IHRoZSBmaXJzdCBwYXRoIHBhcnQgaW50byB0aGUgaG9zdCBmaWVsZC5cbiAgaWYgKHBzeWNob3RpYykge1xuICAgIHJlc3VsdC5ob3N0bmFtZSA9ICcnO1xuICAgIHJlc3VsdC5wb3J0ID0gbnVsbDtcbiAgICBpZiAocmVzdWx0Lmhvc3QpIHtcbiAgICAgIGlmIChzcmNQYXRoWzBdID09PSAnJykgc3JjUGF0aFswXSA9IHJlc3VsdC5ob3N0O1xuICAgICAgZWxzZSBzcmNQYXRoLnVuc2hpZnQocmVzdWx0Lmhvc3QpO1xuICAgIH1cbiAgICByZXN1bHQuaG9zdCA9ICcnO1xuICAgIGlmIChyZWxhdGl2ZS5wcm90b2NvbCkge1xuICAgICAgcmVsYXRpdmUuaG9zdG5hbWUgPSBudWxsO1xuICAgICAgcmVsYXRpdmUucG9ydCA9IG51bGw7XG4gICAgICBpZiAocmVsYXRpdmUuaG9zdCkge1xuICAgICAgICBpZiAocmVsUGF0aFswXSA9PT0gJycpIHJlbFBhdGhbMF0gPSByZWxhdGl2ZS5ob3N0O1xuICAgICAgICBlbHNlIHJlbFBhdGgudW5zaGlmdChyZWxhdGl2ZS5ob3N0KTtcbiAgICAgIH1cbiAgICAgIHJlbGF0aXZlLmhvc3QgPSBudWxsO1xuICAgIH1cbiAgICBtdXN0RW5kQWJzID0gbXVzdEVuZEFicyAmJiAocmVsUGF0aFswXSA9PT0gJycgfHwgc3JjUGF0aFswXSA9PT0gJycpO1xuICB9XG5cbiAgaWYgKGlzUmVsQWJzKSB7XG4gICAgLy8gaXQncyBhYnNvbHV0ZS5cbiAgICByZXN1bHQuaG9zdCA9IChyZWxhdGl2ZS5ob3N0IHx8IHJlbGF0aXZlLmhvc3QgPT09ICcnKSA/XG4gICAgICAgICAgICAgICAgICByZWxhdGl2ZS5ob3N0IDogcmVzdWx0Lmhvc3Q7XG4gICAgcmVzdWx0Lmhvc3RuYW1lID0gKHJlbGF0aXZlLmhvc3RuYW1lIHx8IHJlbGF0aXZlLmhvc3RuYW1lID09PSAnJykgP1xuICAgICAgICAgICAgICAgICAgICAgIHJlbGF0aXZlLmhvc3RuYW1lIDogcmVzdWx0Lmhvc3RuYW1lO1xuICAgIHJlc3VsdC5zZWFyY2ggPSByZWxhdGl2ZS5zZWFyY2g7XG4gICAgcmVzdWx0LnF1ZXJ5ID0gcmVsYXRpdmUucXVlcnk7XG4gICAgc3JjUGF0aCA9IHJlbFBhdGg7XG4gICAgLy8gZmFsbCB0aHJvdWdoIHRvIHRoZSBkb3QtaGFuZGxpbmcgYmVsb3cuXG4gIH0gZWxzZSBpZiAocmVsUGF0aC5sZW5ndGgpIHtcbiAgICAvLyBpdCdzIHJlbGF0aXZlXG4gICAgLy8gdGhyb3cgYXdheSB0aGUgZXhpc3RpbmcgZmlsZSwgYW5kIHRha2UgdGhlIG5ldyBwYXRoIGluc3RlYWQuXG4gICAgaWYgKCFzcmNQYXRoKSBzcmNQYXRoID0gW107XG4gICAgc3JjUGF0aC5wb3AoKTtcbiAgICBzcmNQYXRoID0gc3JjUGF0aC5jb25jYXQocmVsUGF0aCk7XG4gICAgcmVzdWx0LnNlYXJjaCA9IHJlbGF0aXZlLnNlYXJjaDtcbiAgICByZXN1bHQucXVlcnkgPSByZWxhdGl2ZS5xdWVyeTtcbiAgfSBlbHNlIGlmICghaXNOdWxsT3JVbmRlZmluZWQocmVsYXRpdmUuc2VhcmNoKSkge1xuICAgIC8vIGp1c3QgcHVsbCBvdXQgdGhlIHNlYXJjaC5cbiAgICAvLyBsaWtlIGhyZWY9Jz9mb28nLlxuICAgIC8vIFB1dCB0aGlzIGFmdGVyIHRoZSBvdGhlciB0d28gY2FzZXMgYmVjYXVzZSBpdCBzaW1wbGlmaWVzIHRoZSBib29sZWFuc1xuICAgIGlmIChwc3ljaG90aWMpIHtcbiAgICAgIHJlc3VsdC5ob3N0bmFtZSA9IHJlc3VsdC5ob3N0ID0gc3JjUGF0aC5zaGlmdCgpO1xuICAgICAgLy9vY2NhdGlvbmFseSB0aGUgYXV0aCBjYW4gZ2V0IHN0dWNrIG9ubHkgaW4gaG9zdFxuICAgICAgLy90aGlzIGVzcGVjaWFseSBoYXBwZW5zIGluIGNhc2VzIGxpa2VcbiAgICAgIC8vdXJsLnJlc29sdmVPYmplY3QoJ21haWx0bzpsb2NhbDFAZG9tYWluMScsICdsb2NhbDJAZG9tYWluMicpXG4gICAgICB2YXIgYXV0aEluSG9zdCA9IHJlc3VsdC5ob3N0ICYmIHJlc3VsdC5ob3N0LmluZGV4T2YoJ0AnKSA+IDAgP1xuICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQuaG9zdC5zcGxpdCgnQCcpIDogZmFsc2U7XG4gICAgICBpZiAoYXV0aEluSG9zdCkge1xuICAgICAgICByZXN1bHQuYXV0aCA9IGF1dGhJbkhvc3Quc2hpZnQoKTtcbiAgICAgICAgcmVzdWx0Lmhvc3QgPSByZXN1bHQuaG9zdG5hbWUgPSBhdXRoSW5Ib3N0LnNoaWZ0KCk7XG4gICAgICB9XG4gICAgfVxuICAgIHJlc3VsdC5zZWFyY2ggPSByZWxhdGl2ZS5zZWFyY2g7XG4gICAgcmVzdWx0LnF1ZXJ5ID0gcmVsYXRpdmUucXVlcnk7XG4gICAgLy90byBzdXBwb3J0IGh0dHAucmVxdWVzdFxuICAgIGlmICghaXNOdWxsKHJlc3VsdC5wYXRobmFtZSkgfHwgIWlzTnVsbChyZXN1bHQuc2VhcmNoKSkge1xuICAgICAgcmVzdWx0LnBhdGggPSAocmVzdWx0LnBhdGhuYW1lID8gcmVzdWx0LnBhdGhuYW1lIDogJycpICtcbiAgICAgICAgICAgICAgICAgICAgKHJlc3VsdC5zZWFyY2ggPyByZXN1bHQuc2VhcmNoIDogJycpO1xuICAgIH1cbiAgICByZXN1bHQuaHJlZiA9IHJlc3VsdC5mb3JtYXQoKTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgaWYgKCFzcmNQYXRoLmxlbmd0aCkge1xuICAgIC8vIG5vIHBhdGggYXQgYWxsLiAgZWFzeS5cbiAgICAvLyB3ZSd2ZSBhbHJlYWR5IGhhbmRsZWQgdGhlIG90aGVyIHN0dWZmIGFib3ZlLlxuICAgIHJlc3VsdC5wYXRobmFtZSA9IG51bGw7XG4gICAgLy90byBzdXBwb3J0IGh0dHAucmVxdWVzdFxuICAgIGlmIChyZXN1bHQuc2VhcmNoKSB7XG4gICAgICByZXN1bHQucGF0aCA9ICcvJyArIHJlc3VsdC5zZWFyY2g7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJlc3VsdC5wYXRoID0gbnVsbDtcbiAgICB9XG4gICAgcmVzdWx0LmhyZWYgPSByZXN1bHQuZm9ybWF0KCk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIC8vIGlmIGEgdXJsIEVORHMgaW4gLiBvciAuLiwgdGhlbiBpdCBtdXN0IGdldCBhIHRyYWlsaW5nIHNsYXNoLlxuICAvLyBob3dldmVyLCBpZiBpdCBlbmRzIGluIGFueXRoaW5nIGVsc2Ugbm9uLXNsYXNoeSxcbiAgLy8gdGhlbiBpdCBtdXN0IE5PVCBnZXQgYSB0cmFpbGluZyBzbGFzaC5cbiAgdmFyIGxhc3QgPSBzcmNQYXRoLnNsaWNlKC0xKVswXTtcbiAgdmFyIGhhc1RyYWlsaW5nU2xhc2ggPSAoXG4gICAgICAocmVzdWx0Lmhvc3QgfHwgcmVsYXRpdmUuaG9zdCkgJiYgKGxhc3QgPT09ICcuJyB8fCBsYXN0ID09PSAnLi4nKSB8fFxuICAgICAgbGFzdCA9PT0gJycpO1xuXG4gIC8vIHN0cmlwIHNpbmdsZSBkb3RzLCByZXNvbHZlIGRvdWJsZSBkb3RzIHRvIHBhcmVudCBkaXJcbiAgLy8gaWYgdGhlIHBhdGggdHJpZXMgdG8gZ28gYWJvdmUgdGhlIHJvb3QsIGB1cGAgZW5kcyB1cCA+IDBcbiAgdmFyIHVwID0gMDtcbiAgZm9yICh2YXIgaSA9IHNyY1BhdGgubGVuZ3RoOyBpID49IDA7IGktLSkge1xuICAgIGxhc3QgPSBzcmNQYXRoW2ldO1xuICAgIGlmIChsYXN0ID09ICcuJykge1xuICAgICAgc3JjUGF0aC5zcGxpY2UoaSwgMSk7XG4gICAgfSBlbHNlIGlmIChsYXN0ID09PSAnLi4nKSB7XG4gICAgICBzcmNQYXRoLnNwbGljZShpLCAxKTtcbiAgICAgIHVwKys7XG4gICAgfSBlbHNlIGlmICh1cCkge1xuICAgICAgc3JjUGF0aC5zcGxpY2UoaSwgMSk7XG4gICAgICB1cC0tO1xuICAgIH1cbiAgfVxuXG4gIC8vIGlmIHRoZSBwYXRoIGlzIGFsbG93ZWQgdG8gZ28gYWJvdmUgdGhlIHJvb3QsIHJlc3RvcmUgbGVhZGluZyAuLnNcbiAgaWYgKCFtdXN0RW5kQWJzICYmICFyZW1vdmVBbGxEb3RzKSB7XG4gICAgZm9yICg7IHVwLS07IHVwKSB7XG4gICAgICBzcmNQYXRoLnVuc2hpZnQoJy4uJyk7XG4gICAgfVxuICB9XG5cbiAgaWYgKG11c3RFbmRBYnMgJiYgc3JjUGF0aFswXSAhPT0gJycgJiZcbiAgICAgICghc3JjUGF0aFswXSB8fCBzcmNQYXRoWzBdLmNoYXJBdCgwKSAhPT0gJy8nKSkge1xuICAgIHNyY1BhdGgudW5zaGlmdCgnJyk7XG4gIH1cblxuICBpZiAoaGFzVHJhaWxpbmdTbGFzaCAmJiAoc3JjUGF0aC5qb2luKCcvJykuc3Vic3RyKC0xKSAhPT0gJy8nKSkge1xuICAgIHNyY1BhdGgucHVzaCgnJyk7XG4gIH1cblxuICB2YXIgaXNBYnNvbHV0ZSA9IHNyY1BhdGhbMF0gPT09ICcnIHx8XG4gICAgICAoc3JjUGF0aFswXSAmJiBzcmNQYXRoWzBdLmNoYXJBdCgwKSA9PT0gJy8nKTtcblxuICAvLyBwdXQgdGhlIGhvc3QgYmFja1xuICBpZiAocHN5Y2hvdGljKSB7XG4gICAgcmVzdWx0Lmhvc3RuYW1lID0gcmVzdWx0Lmhvc3QgPSBpc0Fic29sdXRlID8gJycgOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjUGF0aC5sZW5ndGggPyBzcmNQYXRoLnNoaWZ0KCkgOiAnJztcbiAgICAvL29jY2F0aW9uYWx5IHRoZSBhdXRoIGNhbiBnZXQgc3R1Y2sgb25seSBpbiBob3N0XG4gICAgLy90aGlzIGVzcGVjaWFseSBoYXBwZW5zIGluIGNhc2VzIGxpa2VcbiAgICAvL3VybC5yZXNvbHZlT2JqZWN0KCdtYWlsdG86bG9jYWwxQGRvbWFpbjEnLCAnbG9jYWwyQGRvbWFpbjInKVxuICAgIHZhciBhdXRoSW5Ib3N0ID0gcmVzdWx0Lmhvc3QgJiYgcmVzdWx0Lmhvc3QuaW5kZXhPZignQCcpID4gMCA/XG4gICAgICAgICAgICAgICAgICAgICByZXN1bHQuaG9zdC5zcGxpdCgnQCcpIDogZmFsc2U7XG4gICAgaWYgKGF1dGhJbkhvc3QpIHtcbiAgICAgIHJlc3VsdC5hdXRoID0gYXV0aEluSG9zdC5zaGlmdCgpO1xuICAgICAgcmVzdWx0Lmhvc3QgPSByZXN1bHQuaG9zdG5hbWUgPSBhdXRoSW5Ib3N0LnNoaWZ0KCk7XG4gICAgfVxuICB9XG5cbiAgbXVzdEVuZEFicyA9IG11c3RFbmRBYnMgfHwgKHJlc3VsdC5ob3N0ICYmIHNyY1BhdGgubGVuZ3RoKTtcblxuICBpZiAobXVzdEVuZEFicyAmJiAhaXNBYnNvbHV0ZSkge1xuICAgIHNyY1BhdGgudW5zaGlmdCgnJyk7XG4gIH1cblxuICBpZiAoIXNyY1BhdGgubGVuZ3RoKSB7XG4gICAgcmVzdWx0LnBhdGhuYW1lID0gbnVsbDtcbiAgICByZXN1bHQucGF0aCA9IG51bGw7XG4gIH0gZWxzZSB7XG4gICAgcmVzdWx0LnBhdGhuYW1lID0gc3JjUGF0aC5qb2luKCcvJyk7XG4gIH1cblxuICAvL3RvIHN1cHBvcnQgcmVxdWVzdC5odHRwXG4gIGlmICghaXNOdWxsKHJlc3VsdC5wYXRobmFtZSkgfHwgIWlzTnVsbChyZXN1bHQuc2VhcmNoKSkge1xuICAgIHJlc3VsdC5wYXRoID0gKHJlc3VsdC5wYXRobmFtZSA/IHJlc3VsdC5wYXRobmFtZSA6ICcnKSArXG4gICAgICAgICAgICAgICAgICAocmVzdWx0LnNlYXJjaCA/IHJlc3VsdC5zZWFyY2ggOiAnJyk7XG4gIH1cbiAgcmVzdWx0LmF1dGggPSByZWxhdGl2ZS5hdXRoIHx8IHJlc3VsdC5hdXRoO1xuICByZXN1bHQuc2xhc2hlcyA9IHJlc3VsdC5zbGFzaGVzIHx8IHJlbGF0aXZlLnNsYXNoZXM7XG4gIHJlc3VsdC5ocmVmID0gcmVzdWx0LmZvcm1hdCgpO1xuICByZXR1cm4gcmVzdWx0O1xufTtcblxuVXJsLnByb3RvdHlwZS5wYXJzZUhvc3QgPSBmdW5jdGlvbigpIHtcbiAgdmFyIGhvc3QgPSB0aGlzLmhvc3Q7XG4gIHZhciBwb3J0ID0gcG9ydFBhdHRlcm4uZXhlYyhob3N0KTtcbiAgaWYgKHBvcnQpIHtcbiAgICBwb3J0ID0gcG9ydFswXTtcbiAgICBpZiAocG9ydCAhPT0gJzonKSB7XG4gICAgICB0aGlzLnBvcnQgPSBwb3J0LnN1YnN0cigxKTtcbiAgICB9XG4gICAgaG9zdCA9IGhvc3Quc3Vic3RyKDAsIGhvc3QubGVuZ3RoIC0gcG9ydC5sZW5ndGgpO1xuICB9XG4gIGlmIChob3N0KSB0aGlzLmhvc3RuYW1lID0gaG9zdDtcbn07XG5cbmZ1bmN0aW9uIGlzU3RyaW5nKGFyZykge1xuICByZXR1cm4gdHlwZW9mIGFyZyA9PT0gXCJzdHJpbmdcIjtcbn1cblxuZnVuY3Rpb24gaXNPYmplY3QoYXJnKSB7XG4gIHJldHVybiB0eXBlb2YgYXJnID09PSAnb2JqZWN0JyAmJiBhcmcgIT09IG51bGw7XG59XG5cbmZ1bmN0aW9uIGlzTnVsbChhcmcpIHtcbiAgcmV0dXJuIGFyZyA9PT0gbnVsbDtcbn1cbmZ1bmN0aW9uIGlzTnVsbE9yVW5kZWZpbmVkKGFyZykge1xuICByZXR1cm4gIGFyZyA9PSBudWxsO1xufVxuIiwiJ3VzZSBzdHJpY3QnO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGVhcmN1dDtcblxuZnVuY3Rpb24gZWFyY3V0KGRhdGEsIGhvbGVJbmRpY2VzLCBkaW0pIHtcblxuICAgIGRpbSA9IGRpbSB8fCAyO1xuXG4gICAgdmFyIGhhc0hvbGVzID0gaG9sZUluZGljZXMgJiYgaG9sZUluZGljZXMubGVuZ3RoLFxuICAgICAgICBvdXRlckxlbiA9IGhhc0hvbGVzID8gaG9sZUluZGljZXNbMF0gKiBkaW0gOiBkYXRhLmxlbmd0aCxcbiAgICAgICAgb3V0ZXJOb2RlID0gbGlua2VkTGlzdChkYXRhLCAwLCBvdXRlckxlbiwgZGltLCB0cnVlKSxcbiAgICAgICAgdHJpYW5nbGVzID0gW107XG5cbiAgICBpZiAoIW91dGVyTm9kZSkgcmV0dXJuIHRyaWFuZ2xlcztcblxuICAgIHZhciBtaW5YLCBtaW5ZLCBtYXhYLCBtYXhZLCB4LCB5LCBzaXplO1xuXG4gICAgaWYgKGhhc0hvbGVzKSBvdXRlck5vZGUgPSBlbGltaW5hdGVIb2xlcyhkYXRhLCBob2xlSW5kaWNlcywgb3V0ZXJOb2RlLCBkaW0pO1xuXG4gICAgLy8gaWYgdGhlIHNoYXBlIGlzIG5vdCB0b28gc2ltcGxlLCB3ZSdsbCB1c2Ugei1vcmRlciBjdXJ2ZSBoYXNoIGxhdGVyOyBjYWxjdWxhdGUgcG9seWdvbiBiYm94XG4gICAgaWYgKGRhdGEubGVuZ3RoID4gODAgKiBkaW0pIHtcbiAgICAgICAgbWluWCA9IG1heFggPSBkYXRhWzBdO1xuICAgICAgICBtaW5ZID0gbWF4WSA9IGRhdGFbMV07XG5cbiAgICAgICAgZm9yICh2YXIgaSA9IGRpbTsgaSA8IG91dGVyTGVuOyBpICs9IGRpbSkge1xuICAgICAgICAgICAgeCA9IGRhdGFbaV07XG4gICAgICAgICAgICB5ID0gZGF0YVtpICsgMV07XG4gICAgICAgICAgICBpZiAoeCA8IG1pblgpIG1pblggPSB4O1xuICAgICAgICAgICAgaWYgKHkgPCBtaW5ZKSBtaW5ZID0geTtcbiAgICAgICAgICAgIGlmICh4ID4gbWF4WCkgbWF4WCA9IHg7XG4gICAgICAgICAgICBpZiAoeSA+IG1heFkpIG1heFkgPSB5O1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gbWluWCwgbWluWSBhbmQgc2l6ZSBhcmUgbGF0ZXIgdXNlZCB0byB0cmFuc2Zvcm0gY29vcmRzIGludG8gaW50ZWdlcnMgZm9yIHotb3JkZXIgY2FsY3VsYXRpb25cbiAgICAgICAgc2l6ZSA9IE1hdGgubWF4KG1heFggLSBtaW5YLCBtYXhZIC0gbWluWSk7XG4gICAgfVxuXG4gICAgZWFyY3V0TGlua2VkKG91dGVyTm9kZSwgdHJpYW5nbGVzLCBkaW0sIG1pblgsIG1pblksIHNpemUpO1xuXG4gICAgcmV0dXJuIHRyaWFuZ2xlcztcbn1cblxuLy8gY3JlYXRlIGEgY2lyY3VsYXIgZG91Ymx5IGxpbmtlZCBsaXN0IGZyb20gcG9seWdvbiBwb2ludHMgaW4gdGhlIHNwZWNpZmllZCB3aW5kaW5nIG9yZGVyXG5mdW5jdGlvbiBsaW5rZWRMaXN0KGRhdGEsIHN0YXJ0LCBlbmQsIGRpbSwgY2xvY2t3aXNlKSB7XG4gICAgdmFyIHN1bSA9IDAsXG4gICAgICAgIGksIGosIGxhc3Q7XG5cbiAgICAvLyBjYWxjdWxhdGUgb3JpZ2luYWwgd2luZGluZyBvcmRlciBvZiBhIHBvbHlnb24gcmluZ1xuICAgIGZvciAoaSA9IHN0YXJ0LCBqID0gZW5kIC0gZGltOyBpIDwgZW5kOyBpICs9IGRpbSkge1xuICAgICAgICBzdW0gKz0gKGRhdGFbal0gLSBkYXRhW2ldKSAqIChkYXRhW2kgKyAxXSArIGRhdGFbaiArIDFdKTtcbiAgICAgICAgaiA9IGk7XG4gICAgfVxuXG4gICAgLy8gbGluayBwb2ludHMgaW50byBjaXJjdWxhciBkb3VibHktbGlua2VkIGxpc3QgaW4gdGhlIHNwZWNpZmllZCB3aW5kaW5nIG9yZGVyXG4gICAgaWYgKGNsb2Nrd2lzZSA9PT0gKHN1bSA+IDApKSB7XG4gICAgICAgIGZvciAoaSA9IHN0YXJ0OyBpIDwgZW5kOyBpICs9IGRpbSkgbGFzdCA9IGluc2VydE5vZGUoaSwgZGF0YVtpXSwgZGF0YVtpICsgMV0sIGxhc3QpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIGZvciAoaSA9IGVuZCAtIGRpbTsgaSA+PSBzdGFydDsgaSAtPSBkaW0pIGxhc3QgPSBpbnNlcnROb2RlKGksIGRhdGFbaV0sIGRhdGFbaSArIDFdLCBsYXN0KTtcbiAgICB9XG5cbiAgICByZXR1cm4gbGFzdDtcbn1cblxuLy8gZWxpbWluYXRlIGNvbGluZWFyIG9yIGR1cGxpY2F0ZSBwb2ludHNcbmZ1bmN0aW9uIGZpbHRlclBvaW50cyhzdGFydCwgZW5kKSB7XG4gICAgaWYgKCFzdGFydCkgcmV0dXJuIHN0YXJ0O1xuICAgIGlmICghZW5kKSBlbmQgPSBzdGFydDtcblxuICAgIHZhciBwID0gc3RhcnQsXG4gICAgICAgIGFnYWluO1xuICAgIGRvIHtcbiAgICAgICAgYWdhaW4gPSBmYWxzZTtcblxuICAgICAgICBpZiAoIXAuc3RlaW5lciAmJiAoZXF1YWxzKHAsIHAubmV4dCkgfHwgYXJlYShwLnByZXYsIHAsIHAubmV4dCkgPT09IDApKSB7XG4gICAgICAgICAgICByZW1vdmVOb2RlKHApO1xuICAgICAgICAgICAgcCA9IGVuZCA9IHAucHJldjtcbiAgICAgICAgICAgIGlmIChwID09PSBwLm5leHQpIHJldHVybiBudWxsO1xuICAgICAgICAgICAgYWdhaW4gPSB0cnVlO1xuXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBwID0gcC5uZXh0O1xuICAgICAgICB9XG4gICAgfSB3aGlsZSAoYWdhaW4gfHwgcCAhPT0gZW5kKTtcblxuICAgIHJldHVybiBlbmQ7XG59XG5cbi8vIG1haW4gZWFyIHNsaWNpbmcgbG9vcCB3aGljaCB0cmlhbmd1bGF0ZXMgYSBwb2x5Z29uIChnaXZlbiBhcyBhIGxpbmtlZCBsaXN0KVxuZnVuY3Rpb24gZWFyY3V0TGlua2VkKGVhciwgdHJpYW5nbGVzLCBkaW0sIG1pblgsIG1pblksIHNpemUsIHBhc3MpIHtcbiAgICBpZiAoIWVhcikgcmV0dXJuO1xuXG4gICAgLy8gaW50ZXJsaW5rIHBvbHlnb24gbm9kZXMgaW4gei1vcmRlclxuICAgIGlmICghcGFzcyAmJiBzaXplKSBpbmRleEN1cnZlKGVhciwgbWluWCwgbWluWSwgc2l6ZSk7XG5cbiAgICB2YXIgc3RvcCA9IGVhcixcbiAgICAgICAgcHJldiwgbmV4dDtcblxuICAgIC8vIGl0ZXJhdGUgdGhyb3VnaCBlYXJzLCBzbGljaW5nIHRoZW0gb25lIGJ5IG9uZVxuICAgIHdoaWxlIChlYXIucHJldiAhPT0gZWFyLm5leHQpIHtcbiAgICAgICAgcHJldiA9IGVhci5wcmV2O1xuICAgICAgICBuZXh0ID0gZWFyLm5leHQ7XG5cbiAgICAgICAgaWYgKHNpemUgPyBpc0Vhckhhc2hlZChlYXIsIG1pblgsIG1pblksIHNpemUpIDogaXNFYXIoZWFyKSkge1xuICAgICAgICAgICAgLy8gY3V0IG9mZiB0aGUgdHJpYW5nbGVcbiAgICAgICAgICAgIHRyaWFuZ2xlcy5wdXNoKHByZXYuaSAvIGRpbSk7XG4gICAgICAgICAgICB0cmlhbmdsZXMucHVzaChlYXIuaSAvIGRpbSk7XG4gICAgICAgICAgICB0cmlhbmdsZXMucHVzaChuZXh0LmkgLyBkaW0pO1xuXG4gICAgICAgICAgICByZW1vdmVOb2RlKGVhcik7XG5cbiAgICAgICAgICAgIC8vIHNraXBwaW5nIHRoZSBuZXh0IHZlcnRpY2UgbGVhZHMgdG8gbGVzcyBzbGl2ZXIgdHJpYW5nbGVzXG4gICAgICAgICAgICBlYXIgPSBuZXh0Lm5leHQ7XG4gICAgICAgICAgICBzdG9wID0gbmV4dC5uZXh0O1xuXG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGVhciA9IG5leHQ7XG5cbiAgICAgICAgLy8gaWYgd2UgbG9vcGVkIHRocm91Z2ggdGhlIHdob2xlIHJlbWFpbmluZyBwb2x5Z29uIGFuZCBjYW4ndCBmaW5kIGFueSBtb3JlIGVhcnNcbiAgICAgICAgaWYgKGVhciA9PT0gc3RvcCkge1xuICAgICAgICAgICAgLy8gdHJ5IGZpbHRlcmluZyBwb2ludHMgYW5kIHNsaWNpbmcgYWdhaW5cbiAgICAgICAgICAgIGlmICghcGFzcykge1xuICAgICAgICAgICAgICAgIGVhcmN1dExpbmtlZChmaWx0ZXJQb2ludHMoZWFyKSwgdHJpYW5nbGVzLCBkaW0sIG1pblgsIG1pblksIHNpemUsIDEpO1xuXG4gICAgICAgICAgICAvLyBpZiB0aGlzIGRpZG4ndCB3b3JrLCB0cnkgY3VyaW5nIGFsbCBzbWFsbCBzZWxmLWludGVyc2VjdGlvbnMgbG9jYWxseVxuICAgICAgICAgICAgfSBlbHNlIGlmIChwYXNzID09PSAxKSB7XG4gICAgICAgICAgICAgICAgZWFyID0gY3VyZUxvY2FsSW50ZXJzZWN0aW9ucyhlYXIsIHRyaWFuZ2xlcywgZGltKTtcbiAgICAgICAgICAgICAgICBlYXJjdXRMaW5rZWQoZWFyLCB0cmlhbmdsZXMsIGRpbSwgbWluWCwgbWluWSwgc2l6ZSwgMik7XG5cbiAgICAgICAgICAgIC8vIGFzIGEgbGFzdCByZXNvcnQsIHRyeSBzcGxpdHRpbmcgdGhlIHJlbWFpbmluZyBwb2x5Z29uIGludG8gdHdvXG4gICAgICAgICAgICB9IGVsc2UgaWYgKHBhc3MgPT09IDIpIHtcbiAgICAgICAgICAgICAgICBzcGxpdEVhcmN1dChlYXIsIHRyaWFuZ2xlcywgZGltLCBtaW5YLCBtaW5ZLCBzaXplKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbi8vIGNoZWNrIHdoZXRoZXIgYSBwb2x5Z29uIG5vZGUgZm9ybXMgYSB2YWxpZCBlYXIgd2l0aCBhZGphY2VudCBub2Rlc1xuZnVuY3Rpb24gaXNFYXIoZWFyKSB7XG4gICAgdmFyIGEgPSBlYXIucHJldixcbiAgICAgICAgYiA9IGVhcixcbiAgICAgICAgYyA9IGVhci5uZXh0O1xuXG4gICAgaWYgKGFyZWEoYSwgYiwgYykgPj0gMCkgcmV0dXJuIGZhbHNlOyAvLyByZWZsZXgsIGNhbid0IGJlIGFuIGVhclxuXG4gICAgLy8gbm93IG1ha2Ugc3VyZSB3ZSBkb24ndCBoYXZlIG90aGVyIHBvaW50cyBpbnNpZGUgdGhlIHBvdGVudGlhbCBlYXJcbiAgICB2YXIgcCA9IGVhci5uZXh0Lm5leHQ7XG5cbiAgICB3aGlsZSAocCAhPT0gZWFyLnByZXYpIHtcbiAgICAgICAgaWYgKHBvaW50SW5UcmlhbmdsZShhLngsIGEueSwgYi54LCBiLnksIGMueCwgYy55LCBwLngsIHAueSkgJiZcbiAgICAgICAgICAgIGFyZWEocC5wcmV2LCBwLCBwLm5leHQpID49IDApIHJldHVybiBmYWxzZTtcbiAgICAgICAgcCA9IHAubmV4dDtcbiAgICB9XG5cbiAgICByZXR1cm4gdHJ1ZTtcbn1cblxuZnVuY3Rpb24gaXNFYXJIYXNoZWQoZWFyLCBtaW5YLCBtaW5ZLCBzaXplKSB7XG4gICAgdmFyIGEgPSBlYXIucHJldixcbiAgICAgICAgYiA9IGVhcixcbiAgICAgICAgYyA9IGVhci5uZXh0O1xuXG4gICAgaWYgKGFyZWEoYSwgYiwgYykgPj0gMCkgcmV0dXJuIGZhbHNlOyAvLyByZWZsZXgsIGNhbid0IGJlIGFuIGVhclxuXG4gICAgLy8gdHJpYW5nbGUgYmJveDsgbWluICYgbWF4IGFyZSBjYWxjdWxhdGVkIGxpa2UgdGhpcyBmb3Igc3BlZWRcbiAgICB2YXIgbWluVFggPSBhLnggPCBiLnggPyAoYS54IDwgYy54ID8gYS54IDogYy54KSA6IChiLnggPCBjLnggPyBiLnggOiBjLngpLFxuICAgICAgICBtaW5UWSA9IGEueSA8IGIueSA/IChhLnkgPCBjLnkgPyBhLnkgOiBjLnkpIDogKGIueSA8IGMueSA/IGIueSA6IGMueSksXG4gICAgICAgIG1heFRYID0gYS54ID4gYi54ID8gKGEueCA+IGMueCA/IGEueCA6IGMueCkgOiAoYi54ID4gYy54ID8gYi54IDogYy54KSxcbiAgICAgICAgbWF4VFkgPSBhLnkgPiBiLnkgPyAoYS55ID4gYy55ID8gYS55IDogYy55KSA6IChiLnkgPiBjLnkgPyBiLnkgOiBjLnkpO1xuXG4gICAgLy8gei1vcmRlciByYW5nZSBmb3IgdGhlIGN1cnJlbnQgdHJpYW5nbGUgYmJveDtcbiAgICB2YXIgbWluWiA9IHpPcmRlcihtaW5UWCwgbWluVFksIG1pblgsIG1pblksIHNpemUpLFxuICAgICAgICBtYXhaID0gek9yZGVyKG1heFRYLCBtYXhUWSwgbWluWCwgbWluWSwgc2l6ZSk7XG5cbiAgICAvLyBmaXJzdCBsb29rIGZvciBwb2ludHMgaW5zaWRlIHRoZSB0cmlhbmdsZSBpbiBpbmNyZWFzaW5nIHotb3JkZXJcbiAgICB2YXIgcCA9IGVhci5uZXh0WjtcblxuICAgIHdoaWxlIChwICYmIHAueiA8PSBtYXhaKSB7XG4gICAgICAgIGlmIChwICE9PSBlYXIucHJldiAmJiBwICE9PSBlYXIubmV4dCAmJlxuICAgICAgICAgICAgcG9pbnRJblRyaWFuZ2xlKGEueCwgYS55LCBiLngsIGIueSwgYy54LCBjLnksIHAueCwgcC55KSAmJlxuICAgICAgICAgICAgYXJlYShwLnByZXYsIHAsIHAubmV4dCkgPj0gMCkgcmV0dXJuIGZhbHNlO1xuICAgICAgICBwID0gcC5uZXh0WjtcbiAgICB9XG5cbiAgICAvLyB0aGVuIGxvb2sgZm9yIHBvaW50cyBpbiBkZWNyZWFzaW5nIHotb3JkZXJcbiAgICBwID0gZWFyLnByZXZaO1xuXG4gICAgd2hpbGUgKHAgJiYgcC56ID49IG1pblopIHtcbiAgICAgICAgaWYgKHAgIT09IGVhci5wcmV2ICYmIHAgIT09IGVhci5uZXh0ICYmXG4gICAgICAgICAgICBwb2ludEluVHJpYW5nbGUoYS54LCBhLnksIGIueCwgYi55LCBjLngsIGMueSwgcC54LCBwLnkpICYmXG4gICAgICAgICAgICBhcmVhKHAucHJldiwgcCwgcC5uZXh0KSA+PSAwKSByZXR1cm4gZmFsc2U7XG4gICAgICAgIHAgPSBwLnByZXZaO1xuICAgIH1cblxuICAgIHJldHVybiB0cnVlO1xufVxuXG4vLyBnbyB0aHJvdWdoIGFsbCBwb2x5Z29uIG5vZGVzIGFuZCBjdXJlIHNtYWxsIGxvY2FsIHNlbGYtaW50ZXJzZWN0aW9uc1xuZnVuY3Rpb24gY3VyZUxvY2FsSW50ZXJzZWN0aW9ucyhzdGFydCwgdHJpYW5nbGVzLCBkaW0pIHtcbiAgICB2YXIgcCA9IHN0YXJ0O1xuICAgIGRvIHtcbiAgICAgICAgdmFyIGEgPSBwLnByZXYsXG4gICAgICAgICAgICBiID0gcC5uZXh0Lm5leHQ7XG5cbiAgICAgICAgLy8gYSBzZWxmLWludGVyc2VjdGlvbiB3aGVyZSBlZGdlICh2W2ktMV0sdltpXSkgaW50ZXJzZWN0cyAodltpKzFdLHZbaSsyXSlcbiAgICAgICAgaWYgKGludGVyc2VjdHMoYSwgcCwgcC5uZXh0LCBiKSAmJiBsb2NhbGx5SW5zaWRlKGEsIGIpICYmIGxvY2FsbHlJbnNpZGUoYiwgYSkpIHtcblxuICAgICAgICAgICAgdHJpYW5nbGVzLnB1c2goYS5pIC8gZGltKTtcbiAgICAgICAgICAgIHRyaWFuZ2xlcy5wdXNoKHAuaSAvIGRpbSk7XG4gICAgICAgICAgICB0cmlhbmdsZXMucHVzaChiLmkgLyBkaW0pO1xuXG4gICAgICAgICAgICAvLyByZW1vdmUgdHdvIG5vZGVzIGludm9sdmVkXG4gICAgICAgICAgICByZW1vdmVOb2RlKHApO1xuICAgICAgICAgICAgcmVtb3ZlTm9kZShwLm5leHQpO1xuXG4gICAgICAgICAgICBwID0gc3RhcnQgPSBiO1xuICAgICAgICB9XG4gICAgICAgIHAgPSBwLm5leHQ7XG4gICAgfSB3aGlsZSAocCAhPT0gc3RhcnQpO1xuXG4gICAgcmV0dXJuIHA7XG59XG5cbi8vIHRyeSBzcGxpdHRpbmcgcG9seWdvbiBpbnRvIHR3byBhbmQgdHJpYW5ndWxhdGUgdGhlbSBpbmRlcGVuZGVudGx5XG5mdW5jdGlvbiBzcGxpdEVhcmN1dChzdGFydCwgdHJpYW5nbGVzLCBkaW0sIG1pblgsIG1pblksIHNpemUpIHtcbiAgICAvLyBsb29rIGZvciBhIHZhbGlkIGRpYWdvbmFsIHRoYXQgZGl2aWRlcyB0aGUgcG9seWdvbiBpbnRvIHR3b1xuICAgIHZhciBhID0gc3RhcnQ7XG4gICAgZG8ge1xuICAgICAgICB2YXIgYiA9IGEubmV4dC5uZXh0O1xuICAgICAgICB3aGlsZSAoYiAhPT0gYS5wcmV2KSB7XG4gICAgICAgICAgICBpZiAoYS5pICE9PSBiLmkgJiYgaXNWYWxpZERpYWdvbmFsKGEsIGIpKSB7XG4gICAgICAgICAgICAgICAgLy8gc3BsaXQgdGhlIHBvbHlnb24gaW4gdHdvIGJ5IHRoZSBkaWFnb25hbFxuICAgICAgICAgICAgICAgIHZhciBjID0gc3BsaXRQb2x5Z29uKGEsIGIpO1xuXG4gICAgICAgICAgICAgICAgLy8gZmlsdGVyIGNvbGluZWFyIHBvaW50cyBhcm91bmQgdGhlIGN1dHNcbiAgICAgICAgICAgICAgICBhID0gZmlsdGVyUG9pbnRzKGEsIGEubmV4dCk7XG4gICAgICAgICAgICAgICAgYyA9IGZpbHRlclBvaW50cyhjLCBjLm5leHQpO1xuXG4gICAgICAgICAgICAgICAgLy8gcnVuIGVhcmN1dCBvbiBlYWNoIGhhbGZcbiAgICAgICAgICAgICAgICBlYXJjdXRMaW5rZWQoYSwgdHJpYW5nbGVzLCBkaW0sIG1pblgsIG1pblksIHNpemUpO1xuICAgICAgICAgICAgICAgIGVhcmN1dExpbmtlZChjLCB0cmlhbmdsZXMsIGRpbSwgbWluWCwgbWluWSwgc2l6ZSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYiA9IGIubmV4dDtcbiAgICAgICAgfVxuICAgICAgICBhID0gYS5uZXh0O1xuICAgIH0gd2hpbGUgKGEgIT09IHN0YXJ0KTtcbn1cblxuLy8gbGluayBldmVyeSBob2xlIGludG8gdGhlIG91dGVyIGxvb3AsIHByb2R1Y2luZyBhIHNpbmdsZS1yaW5nIHBvbHlnb24gd2l0aG91dCBob2xlc1xuZnVuY3Rpb24gZWxpbWluYXRlSG9sZXMoZGF0YSwgaG9sZUluZGljZXMsIG91dGVyTm9kZSwgZGltKSB7XG4gICAgdmFyIHF1ZXVlID0gW10sXG4gICAgICAgIGksIGxlbiwgc3RhcnQsIGVuZCwgbGlzdDtcblxuICAgIGZvciAoaSA9IDAsIGxlbiA9IGhvbGVJbmRpY2VzLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICAgIHN0YXJ0ID0gaG9sZUluZGljZXNbaV0gKiBkaW07XG4gICAgICAgIGVuZCA9IGkgPCBsZW4gLSAxID8gaG9sZUluZGljZXNbaSArIDFdICogZGltIDogZGF0YS5sZW5ndGg7XG4gICAgICAgIGxpc3QgPSBsaW5rZWRMaXN0KGRhdGEsIHN0YXJ0LCBlbmQsIGRpbSwgZmFsc2UpO1xuICAgICAgICBpZiAobGlzdCA9PT0gbGlzdC5uZXh0KSBsaXN0LnN0ZWluZXIgPSB0cnVlO1xuICAgICAgICBxdWV1ZS5wdXNoKGdldExlZnRtb3N0KGxpc3QpKTtcbiAgICB9XG5cbiAgICBxdWV1ZS5zb3J0KGNvbXBhcmVYKTtcblxuICAgIC8vIHByb2Nlc3MgaG9sZXMgZnJvbSBsZWZ0IHRvIHJpZ2h0XG4gICAgZm9yIChpID0gMDsgaSA8IHF1ZXVlLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGVsaW1pbmF0ZUhvbGUocXVldWVbaV0sIG91dGVyTm9kZSk7XG4gICAgICAgIG91dGVyTm9kZSA9IGZpbHRlclBvaW50cyhvdXRlck5vZGUsIG91dGVyTm9kZS5uZXh0KTtcbiAgICB9XG5cbiAgICByZXR1cm4gb3V0ZXJOb2RlO1xufVxuXG5mdW5jdGlvbiBjb21wYXJlWChhLCBiKSB7XG4gICAgcmV0dXJuIGEueCAtIGIueDtcbn1cblxuLy8gZmluZCBhIGJyaWRnZSBiZXR3ZWVuIHZlcnRpY2VzIHRoYXQgY29ubmVjdHMgaG9sZSB3aXRoIGFuIG91dGVyIHJpbmcgYW5kIGFuZCBsaW5rIGl0XG5mdW5jdGlvbiBlbGltaW5hdGVIb2xlKGhvbGUsIG91dGVyTm9kZSkge1xuICAgIG91dGVyTm9kZSA9IGZpbmRIb2xlQnJpZGdlKGhvbGUsIG91dGVyTm9kZSk7XG4gICAgaWYgKG91dGVyTm9kZSkge1xuICAgICAgICB2YXIgYiA9IHNwbGl0UG9seWdvbihvdXRlck5vZGUsIGhvbGUpO1xuICAgICAgICBmaWx0ZXJQb2ludHMoYiwgYi5uZXh0KTtcbiAgICB9XG59XG5cbi8vIERhdmlkIEViZXJseSdzIGFsZ29yaXRobSBmb3IgZmluZGluZyBhIGJyaWRnZSBiZXR3ZWVuIGhvbGUgYW5kIG91dGVyIHBvbHlnb25cbmZ1bmN0aW9uIGZpbmRIb2xlQnJpZGdlKGhvbGUsIG91dGVyTm9kZSkge1xuICAgIHZhciBwID0gb3V0ZXJOb2RlLFxuICAgICAgICBoeCA9IGhvbGUueCxcbiAgICAgICAgaHkgPSBob2xlLnksXG4gICAgICAgIHF4ID0gLUluZmluaXR5LFxuICAgICAgICBtO1xuXG4gICAgLy8gZmluZCBhIHNlZ21lbnQgaW50ZXJzZWN0ZWQgYnkgYSByYXkgZnJvbSB0aGUgaG9sZSdzIGxlZnRtb3N0IHBvaW50IHRvIHRoZSBsZWZ0O1xuICAgIC8vIHNlZ21lbnQncyBlbmRwb2ludCB3aXRoIGxlc3NlciB4IHdpbGwgYmUgcG90ZW50aWFsIGNvbm5lY3Rpb24gcG9pbnRcbiAgICBkbyB7XG4gICAgICAgIGlmIChoeSA8PSBwLnkgJiYgaHkgPj0gcC5uZXh0LnkpIHtcbiAgICAgICAgICAgIHZhciB4ID0gcC54ICsgKGh5IC0gcC55KSAqIChwLm5leHQueCAtIHAueCkgLyAocC5uZXh0LnkgLSBwLnkpO1xuICAgICAgICAgICAgaWYgKHggPD0gaHggJiYgeCA+IHF4KSB7XG4gICAgICAgICAgICAgICAgcXggPSB4O1xuICAgICAgICAgICAgICAgIG0gPSBwLnggPCBwLm5leHQueCA/IHAgOiBwLm5leHQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcCA9IHAubmV4dDtcbiAgICB9IHdoaWxlIChwICE9PSBvdXRlck5vZGUpO1xuXG4gICAgaWYgKCFtKSByZXR1cm4gbnVsbDtcblxuICAgIC8vIGxvb2sgZm9yIHBvaW50cyBpbnNpZGUgdGhlIHRyaWFuZ2xlIG9mIGhvbGUgcG9pbnQsIHNlZ21lbnQgaW50ZXJzZWN0aW9uIGFuZCBlbmRwb2ludDtcbiAgICAvLyBpZiB0aGVyZSBhcmUgbm8gcG9pbnRzIGZvdW5kLCB3ZSBoYXZlIGEgdmFsaWQgY29ubmVjdGlvbjtcbiAgICAvLyBvdGhlcndpc2UgY2hvb3NlIHRoZSBwb2ludCBvZiB0aGUgbWluaW11bSBhbmdsZSB3aXRoIHRoZSByYXkgYXMgY29ubmVjdGlvbiBwb2ludFxuXG4gICAgdmFyIHN0b3AgPSBtLFxuICAgICAgICB0YW5NaW4gPSBJbmZpbml0eSxcbiAgICAgICAgdGFuO1xuXG4gICAgcCA9IG0ubmV4dDtcblxuICAgIHdoaWxlIChwICE9PSBzdG9wKSB7XG4gICAgICAgIGlmIChoeCA+PSBwLnggJiYgcC54ID49IG0ueCAmJlxuICAgICAgICAgICAgICAgIHBvaW50SW5UcmlhbmdsZShoeSA8IG0ueSA/IGh4IDogcXgsIGh5LCBtLngsIG0ueSwgaHkgPCBtLnkgPyBxeCA6IGh4LCBoeSwgcC54LCBwLnkpKSB7XG5cbiAgICAgICAgICAgIHRhbiA9IE1hdGguYWJzKGh5IC0gcC55KSAvIChoeCAtIHAueCk7IC8vIHRhbmdlbnRpYWxcblxuICAgICAgICAgICAgaWYgKCh0YW4gPCB0YW5NaW4gfHwgKHRhbiA9PT0gdGFuTWluICYmIHAueCA+IG0ueCkpICYmIGxvY2FsbHlJbnNpZGUocCwgaG9sZSkpIHtcbiAgICAgICAgICAgICAgICBtID0gcDtcbiAgICAgICAgICAgICAgICB0YW5NaW4gPSB0YW47XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBwID0gcC5uZXh0O1xuICAgIH1cblxuICAgIHJldHVybiBtO1xufVxuXG4vLyBpbnRlcmxpbmsgcG9seWdvbiBub2RlcyBpbiB6LW9yZGVyXG5mdW5jdGlvbiBpbmRleEN1cnZlKHN0YXJ0LCBtaW5YLCBtaW5ZLCBzaXplKSB7XG4gICAgdmFyIHAgPSBzdGFydDtcbiAgICBkbyB7XG4gICAgICAgIGlmIChwLnogPT09IG51bGwpIHAueiA9IHpPcmRlcihwLngsIHAueSwgbWluWCwgbWluWSwgc2l6ZSk7XG4gICAgICAgIHAucHJldlogPSBwLnByZXY7XG4gICAgICAgIHAubmV4dFogPSBwLm5leHQ7XG4gICAgICAgIHAgPSBwLm5leHQ7XG4gICAgfSB3aGlsZSAocCAhPT0gc3RhcnQpO1xuXG4gICAgcC5wcmV2Wi5uZXh0WiA9IG51bGw7XG4gICAgcC5wcmV2WiA9IG51bGw7XG5cbiAgICBzb3J0TGlua2VkKHApO1xufVxuXG4vLyBTaW1vbiBUYXRoYW0ncyBsaW5rZWQgbGlzdCBtZXJnZSBzb3J0IGFsZ29yaXRobVxuLy8gaHR0cDovL3d3dy5jaGlhcmsuZ3JlZW5lbmQub3JnLnVrL35zZ3RhdGhhbS9hbGdvcml0aG1zL2xpc3Rzb3J0Lmh0bWxcbmZ1bmN0aW9uIHNvcnRMaW5rZWQobGlzdCkge1xuICAgIHZhciBpLCBwLCBxLCBlLCB0YWlsLCBudW1NZXJnZXMsIHBTaXplLCBxU2l6ZSxcbiAgICAgICAgaW5TaXplID0gMTtcblxuICAgIGRvIHtcbiAgICAgICAgcCA9IGxpc3Q7XG4gICAgICAgIGxpc3QgPSBudWxsO1xuICAgICAgICB0YWlsID0gbnVsbDtcbiAgICAgICAgbnVtTWVyZ2VzID0gMDtcblxuICAgICAgICB3aGlsZSAocCkge1xuICAgICAgICAgICAgbnVtTWVyZ2VzKys7XG4gICAgICAgICAgICBxID0gcDtcbiAgICAgICAgICAgIHBTaXplID0gMDtcbiAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBpblNpemU7IGkrKykge1xuICAgICAgICAgICAgICAgIHBTaXplKys7XG4gICAgICAgICAgICAgICAgcSA9IHEubmV4dFo7XG4gICAgICAgICAgICAgICAgaWYgKCFxKSBicmVhaztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcVNpemUgPSBpblNpemU7XG5cbiAgICAgICAgICAgIHdoaWxlIChwU2l6ZSA+IDAgfHwgKHFTaXplID4gMCAmJiBxKSkge1xuXG4gICAgICAgICAgICAgICAgaWYgKHBTaXplID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIGUgPSBxO1xuICAgICAgICAgICAgICAgICAgICBxID0gcS5uZXh0WjtcbiAgICAgICAgICAgICAgICAgICAgcVNpemUtLTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHFTaXplID09PSAwIHx8ICFxKSB7XG4gICAgICAgICAgICAgICAgICAgIGUgPSBwO1xuICAgICAgICAgICAgICAgICAgICBwID0gcC5uZXh0WjtcbiAgICAgICAgICAgICAgICAgICAgcFNpemUtLTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHAueiA8PSBxLnopIHtcbiAgICAgICAgICAgICAgICAgICAgZSA9IHA7XG4gICAgICAgICAgICAgICAgICAgIHAgPSBwLm5leHRaO1xuICAgICAgICAgICAgICAgICAgICBwU2l6ZS0tO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGUgPSBxO1xuICAgICAgICAgICAgICAgICAgICBxID0gcS5uZXh0WjtcbiAgICAgICAgICAgICAgICAgICAgcVNpemUtLTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAodGFpbCkgdGFpbC5uZXh0WiA9IGU7XG4gICAgICAgICAgICAgICAgZWxzZSBsaXN0ID0gZTtcblxuICAgICAgICAgICAgICAgIGUucHJldlogPSB0YWlsO1xuICAgICAgICAgICAgICAgIHRhaWwgPSBlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBwID0gcTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRhaWwubmV4dFogPSBudWxsO1xuICAgICAgICBpblNpemUgKj0gMjtcblxuICAgIH0gd2hpbGUgKG51bU1lcmdlcyA+IDEpO1xuXG4gICAgcmV0dXJuIGxpc3Q7XG59XG5cbi8vIHotb3JkZXIgb2YgYSBwb2ludCBnaXZlbiBjb29yZHMgYW5kIHNpemUgb2YgdGhlIGRhdGEgYm91bmRpbmcgYm94XG5mdW5jdGlvbiB6T3JkZXIoeCwgeSwgbWluWCwgbWluWSwgc2l6ZSkge1xuICAgIC8vIGNvb3JkcyBhcmUgdHJhbnNmb3JtZWQgaW50byBub24tbmVnYXRpdmUgMTUtYml0IGludGVnZXIgcmFuZ2VcbiAgICB4ID0gMzI3NjcgKiAoeCAtIG1pblgpIC8gc2l6ZTtcbiAgICB5ID0gMzI3NjcgKiAoeSAtIG1pblkpIC8gc2l6ZTtcblxuICAgIHggPSAoeCB8ICh4IDw8IDgpKSAmIDB4MDBGRjAwRkY7XG4gICAgeCA9ICh4IHwgKHggPDwgNCkpICYgMHgwRjBGMEYwRjtcbiAgICB4ID0gKHggfCAoeCA8PCAyKSkgJiAweDMzMzMzMzMzO1xuICAgIHggPSAoeCB8ICh4IDw8IDEpKSAmIDB4NTU1NTU1NTU7XG5cbiAgICB5ID0gKHkgfCAoeSA8PCA4KSkgJiAweDAwRkYwMEZGO1xuICAgIHkgPSAoeSB8ICh5IDw8IDQpKSAmIDB4MEYwRjBGMEY7XG4gICAgeSA9ICh5IHwgKHkgPDwgMikpICYgMHgzMzMzMzMzMztcbiAgICB5ID0gKHkgfCAoeSA8PCAxKSkgJiAweDU1NTU1NTU1O1xuXG4gICAgcmV0dXJuIHggfCAoeSA8PCAxKTtcbn1cblxuLy8gZmluZCB0aGUgbGVmdG1vc3Qgbm9kZSBvZiBhIHBvbHlnb24gcmluZ1xuZnVuY3Rpb24gZ2V0TGVmdG1vc3Qoc3RhcnQpIHtcbiAgICB2YXIgcCA9IHN0YXJ0LFxuICAgICAgICBsZWZ0bW9zdCA9IHN0YXJ0O1xuICAgIGRvIHtcbiAgICAgICAgaWYgKHAueCA8IGxlZnRtb3N0LngpIGxlZnRtb3N0ID0gcDtcbiAgICAgICAgcCA9IHAubmV4dDtcbiAgICB9IHdoaWxlIChwICE9PSBzdGFydCk7XG5cbiAgICByZXR1cm4gbGVmdG1vc3Q7XG59XG5cbi8vIGNoZWNrIGlmIGEgcG9pbnQgbGllcyB3aXRoaW4gYSBjb252ZXggdHJpYW5nbGVcbmZ1bmN0aW9uIHBvaW50SW5UcmlhbmdsZShheCwgYXksIGJ4LCBieSwgY3gsIGN5LCBweCwgcHkpIHtcbiAgICByZXR1cm4gKGN4IC0gcHgpICogKGF5IC0gcHkpIC0gKGF4IC0gcHgpICogKGN5IC0gcHkpID49IDAgJiZcbiAgICAgICAgICAgKGF4IC0gcHgpICogKGJ5IC0gcHkpIC0gKGJ4IC0gcHgpICogKGF5IC0gcHkpID49IDAgJiZcbiAgICAgICAgICAgKGJ4IC0gcHgpICogKGN5IC0gcHkpIC0gKGN4IC0gcHgpICogKGJ5IC0gcHkpID49IDA7XG59XG5cbi8vIGNoZWNrIGlmIGEgZGlhZ29uYWwgYmV0d2VlbiB0d28gcG9seWdvbiBub2RlcyBpcyB2YWxpZCAobGllcyBpbiBwb2x5Z29uIGludGVyaW9yKVxuZnVuY3Rpb24gaXNWYWxpZERpYWdvbmFsKGEsIGIpIHtcbiAgICByZXR1cm4gZXF1YWxzKGEsIGIpIHx8IGEubmV4dC5pICE9PSBiLmkgJiYgYS5wcmV2LmkgIT09IGIuaSAmJiAhaW50ZXJzZWN0c1BvbHlnb24oYSwgYikgJiZcbiAgICAgICAgICAgbG9jYWxseUluc2lkZShhLCBiKSAmJiBsb2NhbGx5SW5zaWRlKGIsIGEpICYmIG1pZGRsZUluc2lkZShhLCBiKTtcbn1cblxuLy8gc2lnbmVkIGFyZWEgb2YgYSB0cmlhbmdsZVxuZnVuY3Rpb24gYXJlYShwLCBxLCByKSB7XG4gICAgcmV0dXJuIChxLnkgLSBwLnkpICogKHIueCAtIHEueCkgLSAocS54IC0gcC54KSAqIChyLnkgLSBxLnkpO1xufVxuXG4vLyBjaGVjayBpZiB0d28gcG9pbnRzIGFyZSBlcXVhbFxuZnVuY3Rpb24gZXF1YWxzKHAxLCBwMikge1xuICAgIHJldHVybiBwMS54ID09PSBwMi54ICYmIHAxLnkgPT09IHAyLnk7XG59XG5cbi8vIGNoZWNrIGlmIHR3byBzZWdtZW50cyBpbnRlcnNlY3RcbmZ1bmN0aW9uIGludGVyc2VjdHMocDEsIHExLCBwMiwgcTIpIHtcbiAgICByZXR1cm4gYXJlYShwMSwgcTEsIHAyKSA+IDAgIT09IGFyZWEocDEsIHExLCBxMikgPiAwICYmXG4gICAgICAgICAgIGFyZWEocDIsIHEyLCBwMSkgPiAwICE9PSBhcmVhKHAyLCBxMiwgcTEpID4gMDtcbn1cblxuLy8gY2hlY2sgaWYgYSBwb2x5Z29uIGRpYWdvbmFsIGludGVyc2VjdHMgYW55IHBvbHlnb24gc2VnbWVudHNcbmZ1bmN0aW9uIGludGVyc2VjdHNQb2x5Z29uKGEsIGIpIHtcbiAgICB2YXIgcCA9IGE7XG4gICAgZG8ge1xuICAgICAgICBpZiAocC5pICE9PSBhLmkgJiYgcC5uZXh0LmkgIT09IGEuaSAmJiBwLmkgIT09IGIuaSAmJiBwLm5leHQuaSAhPT0gYi5pICYmXG4gICAgICAgICAgICAgICAgaW50ZXJzZWN0cyhwLCBwLm5leHQsIGEsIGIpKSByZXR1cm4gdHJ1ZTtcbiAgICAgICAgcCA9IHAubmV4dDtcbiAgICB9IHdoaWxlIChwICE9PSBhKTtcblxuICAgIHJldHVybiBmYWxzZTtcbn1cblxuLy8gY2hlY2sgaWYgYSBwb2x5Z29uIGRpYWdvbmFsIGlzIGxvY2FsbHkgaW5zaWRlIHRoZSBwb2x5Z29uXG5mdW5jdGlvbiBsb2NhbGx5SW5zaWRlKGEsIGIpIHtcbiAgICByZXR1cm4gYXJlYShhLnByZXYsIGEsIGEubmV4dCkgPCAwID9cbiAgICAgICAgYXJlYShhLCBiLCBhLm5leHQpID49IDAgJiYgYXJlYShhLCBhLnByZXYsIGIpID49IDAgOlxuICAgICAgICBhcmVhKGEsIGIsIGEucHJldikgPCAwIHx8IGFyZWEoYSwgYS5uZXh0LCBiKSA8IDA7XG59XG5cbi8vIGNoZWNrIGlmIHRoZSBtaWRkbGUgcG9pbnQgb2YgYSBwb2x5Z29uIGRpYWdvbmFsIGlzIGluc2lkZSB0aGUgcG9seWdvblxuZnVuY3Rpb24gbWlkZGxlSW5zaWRlKGEsIGIpIHtcbiAgICB2YXIgcCA9IGEsXG4gICAgICAgIGluc2lkZSA9IGZhbHNlLFxuICAgICAgICBweCA9IChhLnggKyBiLngpIC8gMixcbiAgICAgICAgcHkgPSAoYS55ICsgYi55KSAvIDI7XG4gICAgZG8ge1xuICAgICAgICBpZiAoKChwLnkgPiBweSkgIT09IChwLm5leHQueSA+IHB5KSkgJiYgKHB4IDwgKHAubmV4dC54IC0gcC54KSAqIChweSAtIHAueSkgLyAocC5uZXh0LnkgLSBwLnkpICsgcC54KSlcbiAgICAgICAgICAgIGluc2lkZSA9ICFpbnNpZGU7XG4gICAgICAgIHAgPSBwLm5leHQ7XG4gICAgfSB3aGlsZSAocCAhPT0gYSk7XG5cbiAgICByZXR1cm4gaW5zaWRlO1xufVxuXG4vLyBsaW5rIHR3byBwb2x5Z29uIHZlcnRpY2VzIHdpdGggYSBicmlkZ2U7IGlmIHRoZSB2ZXJ0aWNlcyBiZWxvbmcgdG8gdGhlIHNhbWUgcmluZywgaXQgc3BsaXRzIHBvbHlnb24gaW50byB0d287XG4vLyBpZiBvbmUgYmVsb25ncyB0byB0aGUgb3V0ZXIgcmluZyBhbmQgYW5vdGhlciB0byBhIGhvbGUsIGl0IG1lcmdlcyBpdCBpbnRvIGEgc2luZ2xlIHJpbmdcbmZ1bmN0aW9uIHNwbGl0UG9seWdvbihhLCBiKSB7XG4gICAgdmFyIGEyID0gbmV3IE5vZGUoYS5pLCBhLngsIGEueSksXG4gICAgICAgIGIyID0gbmV3IE5vZGUoYi5pLCBiLngsIGIueSksXG4gICAgICAgIGFuID0gYS5uZXh0LFxuICAgICAgICBicCA9IGIucHJldjtcblxuICAgIGEubmV4dCA9IGI7XG4gICAgYi5wcmV2ID0gYTtcblxuICAgIGEyLm5leHQgPSBhbjtcbiAgICBhbi5wcmV2ID0gYTI7XG5cbiAgICBiMi5uZXh0ID0gYTI7XG4gICAgYTIucHJldiA9IGIyO1xuXG4gICAgYnAubmV4dCA9IGIyO1xuICAgIGIyLnByZXYgPSBicDtcblxuICAgIHJldHVybiBiMjtcbn1cblxuLy8gY3JlYXRlIGEgbm9kZSBhbmQgb3B0aW9uYWxseSBsaW5rIGl0IHdpdGggcHJldmlvdXMgb25lIChpbiBhIGNpcmN1bGFyIGRvdWJseSBsaW5rZWQgbGlzdClcbmZ1bmN0aW9uIGluc2VydE5vZGUoaSwgeCwgeSwgbGFzdCkge1xuICAgIHZhciBwID0gbmV3IE5vZGUoaSwgeCwgeSk7XG5cbiAgICBpZiAoIWxhc3QpIHtcbiAgICAgICAgcC5wcmV2ID0gcDtcbiAgICAgICAgcC5uZXh0ID0gcDtcblxuICAgIH0gZWxzZSB7XG4gICAgICAgIHAubmV4dCA9IGxhc3QubmV4dDtcbiAgICAgICAgcC5wcmV2ID0gbGFzdDtcbiAgICAgICAgbGFzdC5uZXh0LnByZXYgPSBwO1xuICAgICAgICBsYXN0Lm5leHQgPSBwO1xuICAgIH1cbiAgICByZXR1cm4gcDtcbn1cblxuZnVuY3Rpb24gcmVtb3ZlTm9kZShwKSB7XG4gICAgcC5uZXh0LnByZXYgPSBwLnByZXY7XG4gICAgcC5wcmV2Lm5leHQgPSBwLm5leHQ7XG5cbiAgICBpZiAocC5wcmV2WikgcC5wcmV2Wi5uZXh0WiA9IHAubmV4dFo7XG4gICAgaWYgKHAubmV4dFopIHAubmV4dFoucHJldlogPSBwLnByZXZaO1xufVxuXG5mdW5jdGlvbiBOb2RlKGksIHgsIHkpIHtcbiAgICAvLyB2ZXJ0aWNlIGluZGV4IGluIGNvb3JkaW5hdGVzIGFycmF5XG4gICAgdGhpcy5pID0gaTtcblxuICAgIC8vIHZlcnRleCBjb29yZGluYXRlc1xuICAgIHRoaXMueCA9IHg7XG4gICAgdGhpcy55ID0geTtcblxuICAgIC8vIHByZXZpb3VzIGFuZCBuZXh0IHZlcnRpY2Ugbm9kZXMgaW4gYSBwb2x5Z29uIHJpbmdcbiAgICB0aGlzLnByZXYgPSBudWxsO1xuICAgIHRoaXMubmV4dCA9IG51bGw7XG5cbiAgICAvLyB6LW9yZGVyIGN1cnZlIHZhbHVlXG4gICAgdGhpcy56ID0gbnVsbDtcblxuICAgIC8vIHByZXZpb3VzIGFuZCBuZXh0IG5vZGVzIGluIHotb3JkZXJcbiAgICB0aGlzLnByZXZaID0gbnVsbDtcbiAgICB0aGlzLm5leHRaID0gbnVsbDtcblxuICAgIC8vIGluZGljYXRlcyB3aGV0aGVyIHRoaXMgaXMgYSBzdGVpbmVyIHBvaW50XG4gICAgdGhpcy5zdGVpbmVyID0gZmFsc2U7XG59XG4iLCIndXNlIHN0cmljdCc7XG5cbi8vXG4vLyBXZSBzdG9yZSBvdXIgRUUgb2JqZWN0cyBpbiBhIHBsYWluIG9iamVjdCB3aG9zZSBwcm9wZXJ0aWVzIGFyZSBldmVudCBuYW1lcy5cbi8vIElmIGBPYmplY3QuY3JlYXRlKG51bGwpYCBpcyBub3Qgc3VwcG9ydGVkIHdlIHByZWZpeCB0aGUgZXZlbnQgbmFtZXMgd2l0aCBhXG4vLyBgfmAgdG8gbWFrZSBzdXJlIHRoYXQgdGhlIGJ1aWx0LWluIG9iamVjdCBwcm9wZXJ0aWVzIGFyZSBub3Qgb3ZlcnJpZGRlbiBvclxuLy8gdXNlZCBhcyBhbiBhdHRhY2sgdmVjdG9yLlxuLy8gV2UgYWxzbyBhc3N1bWUgdGhhdCBgT2JqZWN0LmNyZWF0ZShudWxsKWAgaXMgYXZhaWxhYmxlIHdoZW4gdGhlIGV2ZW50IG5hbWVcbi8vIGlzIGFuIEVTNiBTeW1ib2wuXG4vL1xudmFyIHByZWZpeCA9IHR5cGVvZiBPYmplY3QuY3JlYXRlICE9PSAnZnVuY3Rpb24nID8gJ34nIDogZmFsc2U7XG5cbi8qKlxuICogUmVwcmVzZW50YXRpb24gb2YgYSBzaW5nbGUgRXZlbnRFbWl0dGVyIGZ1bmN0aW9uLlxuICpcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZuIEV2ZW50IGhhbmRsZXIgdG8gYmUgY2FsbGVkLlxuICogQHBhcmFtIHtNaXhlZH0gY29udGV4dCBDb250ZXh0IGZvciBmdW5jdGlvbiBleGVjdXRpb24uXG4gKiBAcGFyYW0ge0Jvb2xlYW59IG9uY2UgT25seSBlbWl0IG9uY2VcbiAqIEBhcGkgcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBFRShmbiwgY29udGV4dCwgb25jZSkge1xuICB0aGlzLmZuID0gZm47XG4gIHRoaXMuY29udGV4dCA9IGNvbnRleHQ7XG4gIHRoaXMub25jZSA9IG9uY2UgfHwgZmFsc2U7XG59XG5cbi8qKlxuICogTWluaW1hbCBFdmVudEVtaXR0ZXIgaW50ZXJmYWNlIHRoYXQgaXMgbW9sZGVkIGFnYWluc3QgdGhlIE5vZGUuanNcbiAqIEV2ZW50RW1pdHRlciBpbnRlcmZhY2UuXG4gKlxuICogQGNvbnN0cnVjdG9yXG4gKiBAYXBpIHB1YmxpY1xuICovXG5mdW5jdGlvbiBFdmVudEVtaXR0ZXIoKSB7IC8qIE5vdGhpbmcgdG8gc2V0ICovIH1cblxuLyoqXG4gKiBIb2xkcyB0aGUgYXNzaWduZWQgRXZlbnRFbWl0dGVycyBieSBuYW1lLlxuICpcbiAqIEB0eXBlIHtPYmplY3R9XG4gKiBAcHJpdmF0ZVxuICovXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLl9ldmVudHMgPSB1bmRlZmluZWQ7XG5cbi8qKlxuICogUmV0dXJuIGEgbGlzdCBvZiBhc3NpZ25lZCBldmVudCBsaXN0ZW5lcnMuXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IGV2ZW50IFRoZSBldmVudHMgdGhhdCBzaG91bGQgYmUgbGlzdGVkLlxuICogQHBhcmFtIHtCb29sZWFufSBleGlzdHMgV2Ugb25seSBuZWVkIHRvIGtub3cgaWYgdGhlcmUgYXJlIGxpc3RlbmVycy5cbiAqIEByZXR1cm5zIHtBcnJheXxCb29sZWFufVxuICogQGFwaSBwdWJsaWNcbiAqL1xuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5saXN0ZW5lcnMgPSBmdW5jdGlvbiBsaXN0ZW5lcnMoZXZlbnQsIGV4aXN0cykge1xuICB2YXIgZXZ0ID0gcHJlZml4ID8gcHJlZml4ICsgZXZlbnQgOiBldmVudFxuICAgICwgYXZhaWxhYmxlID0gdGhpcy5fZXZlbnRzICYmIHRoaXMuX2V2ZW50c1tldnRdO1xuXG4gIGlmIChleGlzdHMpIHJldHVybiAhIWF2YWlsYWJsZTtcbiAgaWYgKCFhdmFpbGFibGUpIHJldHVybiBbXTtcbiAgaWYgKGF2YWlsYWJsZS5mbikgcmV0dXJuIFthdmFpbGFibGUuZm5dO1xuXG4gIGZvciAodmFyIGkgPSAwLCBsID0gYXZhaWxhYmxlLmxlbmd0aCwgZWUgPSBuZXcgQXJyYXkobCk7IGkgPCBsOyBpKyspIHtcbiAgICBlZVtpXSA9IGF2YWlsYWJsZVtpXS5mbjtcbiAgfVxuXG4gIHJldHVybiBlZTtcbn07XG5cbi8qKlxuICogRW1pdCBhbiBldmVudCB0byBhbGwgcmVnaXN0ZXJlZCBldmVudCBsaXN0ZW5lcnMuXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IGV2ZW50IFRoZSBuYW1lIG9mIHRoZSBldmVudC5cbiAqIEByZXR1cm5zIHtCb29sZWFufSBJbmRpY2F0aW9uIGlmIHdlJ3ZlIGVtaXR0ZWQgYW4gZXZlbnQuXG4gKiBAYXBpIHB1YmxpY1xuICovXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLmVtaXQgPSBmdW5jdGlvbiBlbWl0KGV2ZW50LCBhMSwgYTIsIGEzLCBhNCwgYTUpIHtcbiAgdmFyIGV2dCA9IHByZWZpeCA/IHByZWZpeCArIGV2ZW50IDogZXZlbnQ7XG5cbiAgaWYgKCF0aGlzLl9ldmVudHMgfHwgIXRoaXMuX2V2ZW50c1tldnRdKSByZXR1cm4gZmFsc2U7XG5cbiAgdmFyIGxpc3RlbmVycyA9IHRoaXMuX2V2ZW50c1tldnRdXG4gICAgLCBsZW4gPSBhcmd1bWVudHMubGVuZ3RoXG4gICAgLCBhcmdzXG4gICAgLCBpO1xuXG4gIGlmICgnZnVuY3Rpb24nID09PSB0eXBlb2YgbGlzdGVuZXJzLmZuKSB7XG4gICAgaWYgKGxpc3RlbmVycy5vbmNlKSB0aGlzLnJlbW92ZUxpc3RlbmVyKGV2ZW50LCBsaXN0ZW5lcnMuZm4sIHVuZGVmaW5lZCwgdHJ1ZSk7XG5cbiAgICBzd2l0Y2ggKGxlbikge1xuICAgICAgY2FzZSAxOiByZXR1cm4gbGlzdGVuZXJzLmZuLmNhbGwobGlzdGVuZXJzLmNvbnRleHQpLCB0cnVlO1xuICAgICAgY2FzZSAyOiByZXR1cm4gbGlzdGVuZXJzLmZuLmNhbGwobGlzdGVuZXJzLmNvbnRleHQsIGExKSwgdHJ1ZTtcbiAgICAgIGNhc2UgMzogcmV0dXJuIGxpc3RlbmVycy5mbi5jYWxsKGxpc3RlbmVycy5jb250ZXh0LCBhMSwgYTIpLCB0cnVlO1xuICAgICAgY2FzZSA0OiByZXR1cm4gbGlzdGVuZXJzLmZuLmNhbGwobGlzdGVuZXJzLmNvbnRleHQsIGExLCBhMiwgYTMpLCB0cnVlO1xuICAgICAgY2FzZSA1OiByZXR1cm4gbGlzdGVuZXJzLmZuLmNhbGwobGlzdGVuZXJzLmNvbnRleHQsIGExLCBhMiwgYTMsIGE0KSwgdHJ1ZTtcbiAgICAgIGNhc2UgNjogcmV0dXJuIGxpc3RlbmVycy5mbi5jYWxsKGxpc3RlbmVycy5jb250ZXh0LCBhMSwgYTIsIGEzLCBhNCwgYTUpLCB0cnVlO1xuICAgIH1cblxuICAgIGZvciAoaSA9IDEsIGFyZ3MgPSBuZXcgQXJyYXkobGVuIC0xKTsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICBhcmdzW2kgLSAxXSA9IGFyZ3VtZW50c1tpXTtcbiAgICB9XG5cbiAgICBsaXN0ZW5lcnMuZm4uYXBwbHkobGlzdGVuZXJzLmNvbnRleHQsIGFyZ3MpO1xuICB9IGVsc2Uge1xuICAgIHZhciBsZW5ndGggPSBsaXN0ZW5lcnMubGVuZ3RoXG4gICAgICAsIGo7XG5cbiAgICBmb3IgKGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmIChsaXN0ZW5lcnNbaV0ub25jZSkgdGhpcy5yZW1vdmVMaXN0ZW5lcihldmVudCwgbGlzdGVuZXJzW2ldLmZuLCB1bmRlZmluZWQsIHRydWUpO1xuXG4gICAgICBzd2l0Y2ggKGxlbikge1xuICAgICAgICBjYXNlIDE6IGxpc3RlbmVyc1tpXS5mbi5jYWxsKGxpc3RlbmVyc1tpXS5jb250ZXh0KTsgYnJlYWs7XG4gICAgICAgIGNhc2UgMjogbGlzdGVuZXJzW2ldLmZuLmNhbGwobGlzdGVuZXJzW2ldLmNvbnRleHQsIGExKTsgYnJlYWs7XG4gICAgICAgIGNhc2UgMzogbGlzdGVuZXJzW2ldLmZuLmNhbGwobGlzdGVuZXJzW2ldLmNvbnRleHQsIGExLCBhMik7IGJyZWFrO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIGlmICghYXJncykgZm9yIChqID0gMSwgYXJncyA9IG5ldyBBcnJheShsZW4gLTEpOyBqIDwgbGVuOyBqKyspIHtcbiAgICAgICAgICAgIGFyZ3NbaiAtIDFdID0gYXJndW1lbnRzW2pdO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGxpc3RlbmVyc1tpXS5mbi5hcHBseShsaXN0ZW5lcnNbaV0uY29udGV4dCwgYXJncyk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHRydWU7XG59O1xuXG4vKipcbiAqIFJlZ2lzdGVyIGEgbmV3IEV2ZW50TGlzdGVuZXIgZm9yIHRoZSBnaXZlbiBldmVudC5cbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gZXZlbnQgTmFtZSBvZiB0aGUgZXZlbnQuXG4gKiBAcGFyYW0ge0Z1bmN0b259IGZuIENhbGxiYWNrIGZ1bmN0aW9uLlxuICogQHBhcmFtIHtNaXhlZH0gY29udGV4dCBUaGUgY29udGV4dCBvZiB0aGUgZnVuY3Rpb24uXG4gKiBAYXBpIHB1YmxpY1xuICovXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLm9uID0gZnVuY3Rpb24gb24oZXZlbnQsIGZuLCBjb250ZXh0KSB7XG4gIHZhciBsaXN0ZW5lciA9IG5ldyBFRShmbiwgY29udGV4dCB8fCB0aGlzKVxuICAgICwgZXZ0ID0gcHJlZml4ID8gcHJlZml4ICsgZXZlbnQgOiBldmVudDtcblxuICBpZiAoIXRoaXMuX2V2ZW50cykgdGhpcy5fZXZlbnRzID0gcHJlZml4ID8ge30gOiBPYmplY3QuY3JlYXRlKG51bGwpO1xuICBpZiAoIXRoaXMuX2V2ZW50c1tldnRdKSB0aGlzLl9ldmVudHNbZXZ0XSA9IGxpc3RlbmVyO1xuICBlbHNlIHtcbiAgICBpZiAoIXRoaXMuX2V2ZW50c1tldnRdLmZuKSB0aGlzLl9ldmVudHNbZXZ0XS5wdXNoKGxpc3RlbmVyKTtcbiAgICBlbHNlIHRoaXMuX2V2ZW50c1tldnRdID0gW1xuICAgICAgdGhpcy5fZXZlbnRzW2V2dF0sIGxpc3RlbmVyXG4gICAgXTtcbiAgfVxuXG4gIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBBZGQgYW4gRXZlbnRMaXN0ZW5lciB0aGF0J3Mgb25seSBjYWxsZWQgb25jZS5cbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gZXZlbnQgTmFtZSBvZiB0aGUgZXZlbnQuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmbiBDYWxsYmFjayBmdW5jdGlvbi5cbiAqIEBwYXJhbSB7TWl4ZWR9IGNvbnRleHQgVGhlIGNvbnRleHQgb2YgdGhlIGZ1bmN0aW9uLlxuICogQGFwaSBwdWJsaWNcbiAqL1xuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5vbmNlID0gZnVuY3Rpb24gb25jZShldmVudCwgZm4sIGNvbnRleHQpIHtcbiAgdmFyIGxpc3RlbmVyID0gbmV3IEVFKGZuLCBjb250ZXh0IHx8IHRoaXMsIHRydWUpXG4gICAgLCBldnQgPSBwcmVmaXggPyBwcmVmaXggKyBldmVudCA6IGV2ZW50O1xuXG4gIGlmICghdGhpcy5fZXZlbnRzKSB0aGlzLl9ldmVudHMgPSBwcmVmaXggPyB7fSA6IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gIGlmICghdGhpcy5fZXZlbnRzW2V2dF0pIHRoaXMuX2V2ZW50c1tldnRdID0gbGlzdGVuZXI7XG4gIGVsc2Uge1xuICAgIGlmICghdGhpcy5fZXZlbnRzW2V2dF0uZm4pIHRoaXMuX2V2ZW50c1tldnRdLnB1c2gobGlzdGVuZXIpO1xuICAgIGVsc2UgdGhpcy5fZXZlbnRzW2V2dF0gPSBbXG4gICAgICB0aGlzLl9ldmVudHNbZXZ0XSwgbGlzdGVuZXJcbiAgICBdO1xuICB9XG5cbiAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIFJlbW92ZSBldmVudCBsaXN0ZW5lcnMuXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IGV2ZW50IFRoZSBldmVudCB3ZSB3YW50IHRvIHJlbW92ZS5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZuIFRoZSBsaXN0ZW5lciB0aGF0IHdlIG5lZWQgdG8gZmluZC5cbiAqIEBwYXJhbSB7TWl4ZWR9IGNvbnRleHQgT25seSByZW1vdmUgbGlzdGVuZXJzIG1hdGNoaW5nIHRoaXMgY29udGV4dC5cbiAqIEBwYXJhbSB7Qm9vbGVhbn0gb25jZSBPbmx5IHJlbW92ZSBvbmNlIGxpc3RlbmVycy5cbiAqIEBhcGkgcHVibGljXG4gKi9cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUucmVtb3ZlTGlzdGVuZXIgPSBmdW5jdGlvbiByZW1vdmVMaXN0ZW5lcihldmVudCwgZm4sIGNvbnRleHQsIG9uY2UpIHtcbiAgdmFyIGV2dCA9IHByZWZpeCA/IHByZWZpeCArIGV2ZW50IDogZXZlbnQ7XG5cbiAgaWYgKCF0aGlzLl9ldmVudHMgfHwgIXRoaXMuX2V2ZW50c1tldnRdKSByZXR1cm4gdGhpcztcblxuICB2YXIgbGlzdGVuZXJzID0gdGhpcy5fZXZlbnRzW2V2dF1cbiAgICAsIGV2ZW50cyA9IFtdO1xuXG4gIGlmIChmbikge1xuICAgIGlmIChsaXN0ZW5lcnMuZm4pIHtcbiAgICAgIGlmIChcbiAgICAgICAgICAgbGlzdGVuZXJzLmZuICE9PSBmblxuICAgICAgICB8fCAob25jZSAmJiAhbGlzdGVuZXJzLm9uY2UpXG4gICAgICAgIHx8IChjb250ZXh0ICYmIGxpc3RlbmVycy5jb250ZXh0ICE9PSBjb250ZXh0KVxuICAgICAgKSB7XG4gICAgICAgIGV2ZW50cy5wdXNoKGxpc3RlbmVycyk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGZvciAodmFyIGkgPSAwLCBsZW5ndGggPSBsaXN0ZW5lcnMubGVuZ3RoOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgIGxpc3RlbmVyc1tpXS5mbiAhPT0gZm5cbiAgICAgICAgICB8fCAob25jZSAmJiAhbGlzdGVuZXJzW2ldLm9uY2UpXG4gICAgICAgICAgfHwgKGNvbnRleHQgJiYgbGlzdGVuZXJzW2ldLmNvbnRleHQgIT09IGNvbnRleHQpXG4gICAgICAgICkge1xuICAgICAgICAgIGV2ZW50cy5wdXNoKGxpc3RlbmVyc1tpXSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvL1xuICAvLyBSZXNldCB0aGUgYXJyYXksIG9yIHJlbW92ZSBpdCBjb21wbGV0ZWx5IGlmIHdlIGhhdmUgbm8gbW9yZSBsaXN0ZW5lcnMuXG4gIC8vXG4gIGlmIChldmVudHMubGVuZ3RoKSB7XG4gICAgdGhpcy5fZXZlbnRzW2V2dF0gPSBldmVudHMubGVuZ3RoID09PSAxID8gZXZlbnRzWzBdIDogZXZlbnRzO1xuICB9IGVsc2Uge1xuICAgIGRlbGV0ZSB0aGlzLl9ldmVudHNbZXZ0XTtcbiAgfVxuXG4gIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBSZW1vdmUgYWxsIGxpc3RlbmVycyBvciBvbmx5IHRoZSBsaXN0ZW5lcnMgZm9yIHRoZSBzcGVjaWZpZWQgZXZlbnQuXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IGV2ZW50IFRoZSBldmVudCB3YW50IHRvIHJlbW92ZSBhbGwgbGlzdGVuZXJzIGZvci5cbiAqIEBhcGkgcHVibGljXG4gKi9cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUucmVtb3ZlQWxsTGlzdGVuZXJzID0gZnVuY3Rpb24gcmVtb3ZlQWxsTGlzdGVuZXJzKGV2ZW50KSB7XG4gIGlmICghdGhpcy5fZXZlbnRzKSByZXR1cm4gdGhpcztcblxuICBpZiAoZXZlbnQpIGRlbGV0ZSB0aGlzLl9ldmVudHNbcHJlZml4ID8gcHJlZml4ICsgZXZlbnQgOiBldmVudF07XG4gIGVsc2UgdGhpcy5fZXZlbnRzID0gcHJlZml4ID8ge30gOiBPYmplY3QuY3JlYXRlKG51bGwpO1xuXG4gIHJldHVybiB0aGlzO1xufTtcblxuLy9cbi8vIEFsaWFzIG1ldGhvZHMgbmFtZXMgYmVjYXVzZSBwZW9wbGUgcm9sbCBsaWtlIHRoYXQuXG4vL1xuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5vZmYgPSBFdmVudEVtaXR0ZXIucHJvdG90eXBlLnJlbW92ZUxpc3RlbmVyO1xuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5hZGRMaXN0ZW5lciA9IEV2ZW50RW1pdHRlci5wcm90b3R5cGUub247XG5cbi8vXG4vLyBUaGlzIGZ1bmN0aW9uIGRvZXNuJ3QgYXBwbHkgYW55bW9yZS5cbi8vXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLnNldE1heExpc3RlbmVycyA9IGZ1bmN0aW9uIHNldE1heExpc3RlbmVycygpIHtcbiAgcmV0dXJuIHRoaXM7XG59O1xuXG4vL1xuLy8gRXhwb3NlIHRoZSBwcmVmaXguXG4vL1xuRXZlbnRFbWl0dGVyLnByZWZpeGVkID0gcHJlZml4O1xuXG4vL1xuLy8gRXhwb3NlIHRoZSBtb2R1bGUuXG4vL1xuaWYgKCd1bmRlZmluZWQnICE9PSB0eXBlb2YgbW9kdWxlKSB7XG4gIG1vZHVsZS5leHBvcnRzID0gRXZlbnRFbWl0dGVyO1xufVxuIiwiLyogZXNsaW50LWRpc2FibGUgbm8tdW51c2VkLXZhcnMgKi9cbid1c2Ugc3RyaWN0JztcbnZhciBoYXNPd25Qcm9wZXJ0eSA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7XG52YXIgcHJvcElzRW51bWVyYWJsZSA9IE9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGU7XG5cbmZ1bmN0aW9uIHRvT2JqZWN0KHZhbCkge1xuXHRpZiAodmFsID09PSBudWxsIHx8IHZhbCA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0dGhyb3cgbmV3IFR5cGVFcnJvcignT2JqZWN0LmFzc2lnbiBjYW5ub3QgYmUgY2FsbGVkIHdpdGggbnVsbCBvciB1bmRlZmluZWQnKTtcblx0fVxuXG5cdHJldHVybiBPYmplY3QodmFsKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQsIHNvdXJjZSkge1xuXHR2YXIgZnJvbTtcblx0dmFyIHRvID0gdG9PYmplY3QodGFyZ2V0KTtcblx0dmFyIHN5bWJvbHM7XG5cblx0Zm9yICh2YXIgcyA9IDE7IHMgPCBhcmd1bWVudHMubGVuZ3RoOyBzKyspIHtcblx0XHRmcm9tID0gT2JqZWN0KGFyZ3VtZW50c1tzXSk7XG5cblx0XHRmb3IgKHZhciBrZXkgaW4gZnJvbSkge1xuXHRcdFx0aWYgKGhhc093blByb3BlcnR5LmNhbGwoZnJvbSwga2V5KSkge1xuXHRcdFx0XHR0b1trZXldID0gZnJvbVtrZXldO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7XG5cdFx0XHRzeW1ib2xzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhmcm9tKTtcblx0XHRcdGZvciAodmFyIGkgPSAwOyBpIDwgc3ltYm9scy5sZW5ndGg7IGkrKykge1xuXHRcdFx0XHRpZiAocHJvcElzRW51bWVyYWJsZS5jYWxsKGZyb20sIHN5bWJvbHNbaV0pKSB7XG5cdFx0XHRcdFx0dG9bc3ltYm9sc1tpXV0gPSBmcm9tW3N5bWJvbHNbaV1dO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIHRvO1xufTtcbiIsIi8qIVxuICogYXN5bmNcbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS9jYW9sYW4vYXN5bmNcbiAqXG4gKiBDb3B5cmlnaHQgMjAxMC0yMDE0IENhb2xhbiBNY01haG9uXG4gKiBSZWxlYXNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2VcbiAqL1xuLypqc2hpbnQgb25ldmFyOiBmYWxzZSwgaW5kZW50OjQgKi9cbi8qZ2xvYmFsIHNldEltbWVkaWF0ZTogZmFsc2UsIHNldFRpbWVvdXQ6IGZhbHNlLCBjb25zb2xlOiBmYWxzZSAqL1xuKGZ1bmN0aW9uICgpIHtcblxuICAgIHZhciBhc3luYyA9IHt9O1xuXG4gICAgLy8gZ2xvYmFsIG9uIHRoZSBzZXJ2ZXIsIHdpbmRvdyBpbiB0aGUgYnJvd3NlclxuICAgIHZhciByb290LCBwcmV2aW91c19hc3luYztcblxuICAgIHJvb3QgPSB0aGlzO1xuICAgIGlmIChyb290ICE9IG51bGwpIHtcbiAgICAgIHByZXZpb3VzX2FzeW5jID0gcm9vdC5hc3luYztcbiAgICB9XG5cbiAgICBhc3luYy5ub0NvbmZsaWN0ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByb290LmFzeW5jID0gcHJldmlvdXNfYXN5bmM7XG4gICAgICAgIHJldHVybiBhc3luYztcbiAgICB9O1xuXG4gICAgZnVuY3Rpb24gb25seV9vbmNlKGZuKSB7XG4gICAgICAgIHZhciBjYWxsZWQgPSBmYWxzZTtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgaWYgKGNhbGxlZCkgdGhyb3cgbmV3IEVycm9yKFwiQ2FsbGJhY2sgd2FzIGFscmVhZHkgY2FsbGVkLlwiKTtcbiAgICAgICAgICAgIGNhbGxlZCA9IHRydWU7XG4gICAgICAgICAgICBmbi5hcHBseShyb290LCBhcmd1bWVudHMpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8vLyBjcm9zcy1icm93c2VyIGNvbXBhdGlibGl0eSBmdW5jdGlvbnMgLy8vL1xuXG4gICAgdmFyIF90b1N0cmluZyA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7XG5cbiAgICB2YXIgX2lzQXJyYXkgPSBBcnJheS5pc0FycmF5IHx8IGZ1bmN0aW9uIChvYmopIHtcbiAgICAgICAgcmV0dXJuIF90b1N0cmluZy5jYWxsKG9iaikgPT09ICdbb2JqZWN0IEFycmF5XSc7XG4gICAgfTtcblxuICAgIHZhciBfZWFjaCA9IGZ1bmN0aW9uIChhcnIsIGl0ZXJhdG9yKSB7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXJyLmxlbmd0aDsgaSArPSAxKSB7XG4gICAgICAgICAgICBpdGVyYXRvcihhcnJbaV0sIGksIGFycik7XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgdmFyIF9tYXAgPSBmdW5jdGlvbiAoYXJyLCBpdGVyYXRvcikge1xuICAgICAgICBpZiAoYXJyLm1hcCkge1xuICAgICAgICAgICAgcmV0dXJuIGFyci5tYXAoaXRlcmF0b3IpO1xuICAgICAgICB9XG4gICAgICAgIHZhciByZXN1bHRzID0gW107XG4gICAgICAgIF9lYWNoKGFyciwgZnVuY3Rpb24gKHgsIGksIGEpIHtcbiAgICAgICAgICAgIHJlc3VsdHMucHVzaChpdGVyYXRvcih4LCBpLCBhKSk7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gcmVzdWx0cztcbiAgICB9O1xuXG4gICAgdmFyIF9yZWR1Y2UgPSBmdW5jdGlvbiAoYXJyLCBpdGVyYXRvciwgbWVtbykge1xuICAgICAgICBpZiAoYXJyLnJlZHVjZSkge1xuICAgICAgICAgICAgcmV0dXJuIGFyci5yZWR1Y2UoaXRlcmF0b3IsIG1lbW8pO1xuICAgICAgICB9XG4gICAgICAgIF9lYWNoKGFyciwgZnVuY3Rpb24gKHgsIGksIGEpIHtcbiAgICAgICAgICAgIG1lbW8gPSBpdGVyYXRvcihtZW1vLCB4LCBpLCBhKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBtZW1vO1xuICAgIH07XG5cbiAgICB2YXIgX2tleXMgPSBmdW5jdGlvbiAob2JqKSB7XG4gICAgICAgIGlmIChPYmplY3Qua2V5cykge1xuICAgICAgICAgICAgcmV0dXJuIE9iamVjdC5rZXlzKG9iaik7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIGtleXMgPSBbXTtcbiAgICAgICAgZm9yICh2YXIgayBpbiBvYmopIHtcbiAgICAgICAgICAgIGlmIChvYmouaGFzT3duUHJvcGVydHkoaykpIHtcbiAgICAgICAgICAgICAgICBrZXlzLnB1c2goayk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGtleXM7XG4gICAgfTtcblxuICAgIC8vLy8gZXhwb3J0ZWQgYXN5bmMgbW9kdWxlIGZ1bmN0aW9ucyAvLy8vXG5cbiAgICAvLy8vIG5leHRUaWNrIGltcGxlbWVudGF0aW9uIHdpdGggYnJvd3Nlci1jb21wYXRpYmxlIGZhbGxiYWNrIC8vLy9cbiAgICBpZiAodHlwZW9mIHByb2Nlc3MgPT09ICd1bmRlZmluZWQnIHx8ICEocHJvY2Vzcy5uZXh0VGljaykpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBzZXRJbW1lZGlhdGUgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIGFzeW5jLm5leHRUaWNrID0gZnVuY3Rpb24gKGZuKSB7XG4gICAgICAgICAgICAgICAgLy8gbm90IGEgZGlyZWN0IGFsaWFzIGZvciBJRTEwIGNvbXBhdGliaWxpdHlcbiAgICAgICAgICAgICAgICBzZXRJbW1lZGlhdGUoZm4pO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGFzeW5jLnNldEltbWVkaWF0ZSA9IGFzeW5jLm5leHRUaWNrO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgYXN5bmMubmV4dFRpY2sgPSBmdW5jdGlvbiAoZm4pIHtcbiAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KGZuLCAwKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBhc3luYy5zZXRJbW1lZGlhdGUgPSBhc3luYy5uZXh0VGljaztcbiAgICAgICAgfVxuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgYXN5bmMubmV4dFRpY2sgPSBwcm9jZXNzLm5leHRUaWNrO1xuICAgICAgICBpZiAodHlwZW9mIHNldEltbWVkaWF0ZSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgIGFzeW5jLnNldEltbWVkaWF0ZSA9IGZ1bmN0aW9uIChmbikge1xuICAgICAgICAgICAgICAvLyBub3QgYSBkaXJlY3QgYWxpYXMgZm9yIElFMTAgY29tcGF0aWJpbGl0eVxuICAgICAgICAgICAgICBzZXRJbW1lZGlhdGUoZm4pO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGFzeW5jLnNldEltbWVkaWF0ZSA9IGFzeW5jLm5leHRUaWNrO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgYXN5bmMuZWFjaCA9IGZ1bmN0aW9uIChhcnIsIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICBjYWxsYmFjayA9IGNhbGxiYWNrIHx8IGZ1bmN0aW9uICgpIHt9O1xuICAgICAgICBpZiAoIWFyci5sZW5ndGgpIHtcbiAgICAgICAgICAgIHJldHVybiBjYWxsYmFjaygpO1xuICAgICAgICB9XG4gICAgICAgIHZhciBjb21wbGV0ZWQgPSAwO1xuICAgICAgICBfZWFjaChhcnIsIGZ1bmN0aW9uICh4KSB7XG4gICAgICAgICAgICBpdGVyYXRvcih4LCBvbmx5X29uY2UoZG9uZSkgKTtcbiAgICAgICAgfSk7XG4gICAgICAgIGZ1bmN0aW9uIGRvbmUoZXJyKSB7XG4gICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgICBjYWxsYmFjayA9IGZ1bmN0aW9uICgpIHt9O1xuICAgICAgICAgIH1cbiAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgY29tcGxldGVkICs9IDE7XG4gICAgICAgICAgICAgIGlmIChjb21wbGV0ZWQgPj0gYXJyLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgY2FsbGJhY2soKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH07XG4gICAgYXN5bmMuZm9yRWFjaCA9IGFzeW5jLmVhY2g7XG5cbiAgICBhc3luYy5lYWNoU2VyaWVzID0gZnVuY3Rpb24gKGFyciwgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgIGNhbGxiYWNrID0gY2FsbGJhY2sgfHwgZnVuY3Rpb24gKCkge307XG4gICAgICAgIGlmICghYXJyLmxlbmd0aCkge1xuICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKCk7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIGNvbXBsZXRlZCA9IDA7XG4gICAgICAgIHZhciBpdGVyYXRlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgaXRlcmF0b3IoYXJyW2NvbXBsZXRlZF0sIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrID0gZnVuY3Rpb24gKCkge307XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBjb21wbGV0ZWQgKz0gMTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNvbXBsZXRlZCA+PSBhcnIubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgaXRlcmF0ZSgpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH07XG4gICAgICAgIGl0ZXJhdGUoKTtcbiAgICB9O1xuICAgIGFzeW5jLmZvckVhY2hTZXJpZXMgPSBhc3luYy5lYWNoU2VyaWVzO1xuXG4gICAgYXN5bmMuZWFjaExpbWl0ID0gZnVuY3Rpb24gKGFyciwgbGltaXQsIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICB2YXIgZm4gPSBfZWFjaExpbWl0KGxpbWl0KTtcbiAgICAgICAgZm4uYXBwbHkobnVsbCwgW2FyciwgaXRlcmF0b3IsIGNhbGxiYWNrXSk7XG4gICAgfTtcbiAgICBhc3luYy5mb3JFYWNoTGltaXQgPSBhc3luYy5lYWNoTGltaXQ7XG5cbiAgICB2YXIgX2VhY2hMaW1pdCA9IGZ1bmN0aW9uIChsaW1pdCkge1xuXG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAoYXJyLCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIGNhbGxiYWNrID0gY2FsbGJhY2sgfHwgZnVuY3Rpb24gKCkge307XG4gICAgICAgICAgICBpZiAoIWFyci5sZW5ndGggfHwgbGltaXQgPD0gMCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBjYWxsYmFjaygpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdmFyIGNvbXBsZXRlZCA9IDA7XG4gICAgICAgICAgICB2YXIgc3RhcnRlZCA9IDA7XG4gICAgICAgICAgICB2YXIgcnVubmluZyA9IDA7XG5cbiAgICAgICAgICAgIChmdW5jdGlvbiByZXBsZW5pc2ggKCkge1xuICAgICAgICAgICAgICAgIGlmIChjb21wbGV0ZWQgPj0gYXJyLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gY2FsbGJhY2soKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB3aGlsZSAocnVubmluZyA8IGxpbWl0ICYmIHN0YXJ0ZWQgPCBhcnIubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgIHN0YXJ0ZWQgKz0gMTtcbiAgICAgICAgICAgICAgICAgICAgcnVubmluZyArPSAxO1xuICAgICAgICAgICAgICAgICAgICBpdGVyYXRvcihhcnJbc3RhcnRlZCAtIDFdLCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayA9IGZ1bmN0aW9uICgpIHt9O1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcGxldGVkICs9IDE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcnVubmluZyAtPSAxO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb21wbGV0ZWQgPj0gYXJyLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVwbGVuaXNoKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KSgpO1xuICAgICAgICB9O1xuICAgIH07XG5cblxuICAgIHZhciBkb1BhcmFsbGVsID0gZnVuY3Rpb24gKGZuKSB7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7XG4gICAgICAgICAgICByZXR1cm4gZm4uYXBwbHkobnVsbCwgW2FzeW5jLmVhY2hdLmNvbmNhdChhcmdzKSk7XG4gICAgICAgIH07XG4gICAgfTtcbiAgICB2YXIgZG9QYXJhbGxlbExpbWl0ID0gZnVuY3Rpb24obGltaXQsIGZuKSB7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7XG4gICAgICAgICAgICByZXR1cm4gZm4uYXBwbHkobnVsbCwgW19lYWNoTGltaXQobGltaXQpXS5jb25jYXQoYXJncykpO1xuICAgICAgICB9O1xuICAgIH07XG4gICAgdmFyIGRvU2VyaWVzID0gZnVuY3Rpb24gKGZuKSB7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7XG4gICAgICAgICAgICByZXR1cm4gZm4uYXBwbHkobnVsbCwgW2FzeW5jLmVhY2hTZXJpZXNdLmNvbmNhdChhcmdzKSk7XG4gICAgICAgIH07XG4gICAgfTtcblxuXG4gICAgdmFyIF9hc3luY01hcCA9IGZ1bmN0aW9uIChlYWNoZm4sIGFyciwgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgIGFyciA9IF9tYXAoYXJyLCBmdW5jdGlvbiAoeCwgaSkge1xuICAgICAgICAgICAgcmV0dXJuIHtpbmRleDogaSwgdmFsdWU6IHh9O1xuICAgICAgICB9KTtcbiAgICAgICAgaWYgKCFjYWxsYmFjaykge1xuICAgICAgICAgICAgZWFjaGZuKGFyciwgZnVuY3Rpb24gKHgsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICAgICAgaXRlcmF0b3IoeC52YWx1ZSwgZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB2YXIgcmVzdWx0cyA9IFtdO1xuICAgICAgICAgICAgZWFjaGZuKGFyciwgZnVuY3Rpb24gKHgsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICAgICAgaXRlcmF0b3IoeC52YWx1ZSwgZnVuY3Rpb24gKGVyciwgdikge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHRzW3guaW5kZXhdID0gdjtcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0sIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnIsIHJlc3VsdHMpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIGFzeW5jLm1hcCA9IGRvUGFyYWxsZWwoX2FzeW5jTWFwKTtcbiAgICBhc3luYy5tYXBTZXJpZXMgPSBkb1NlcmllcyhfYXN5bmNNYXApO1xuICAgIGFzeW5jLm1hcExpbWl0ID0gZnVuY3Rpb24gKGFyciwgbGltaXQsIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICByZXR1cm4gX21hcExpbWl0KGxpbWl0KShhcnIsIGl0ZXJhdG9yLCBjYWxsYmFjayk7XG4gICAgfTtcblxuICAgIHZhciBfbWFwTGltaXQgPSBmdW5jdGlvbihsaW1pdCkge1xuICAgICAgICByZXR1cm4gZG9QYXJhbGxlbExpbWl0KGxpbWl0LCBfYXN5bmNNYXApO1xuICAgIH07XG5cbiAgICAvLyByZWR1Y2Ugb25seSBoYXMgYSBzZXJpZXMgdmVyc2lvbiwgYXMgZG9pbmcgcmVkdWNlIGluIHBhcmFsbGVsIHdvbid0XG4gICAgLy8gd29yayBpbiBtYW55IHNpdHVhdGlvbnMuXG4gICAgYXN5bmMucmVkdWNlID0gZnVuY3Rpb24gKGFyciwgbWVtbywgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgIGFzeW5jLmVhY2hTZXJpZXMoYXJyLCBmdW5jdGlvbiAoeCwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIGl0ZXJhdG9yKG1lbW8sIHgsIGZ1bmN0aW9uIChlcnIsIHYpIHtcbiAgICAgICAgICAgICAgICBtZW1vID0gdjtcbiAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgIGNhbGxiYWNrKGVyciwgbWVtbyk7XG4gICAgICAgIH0pO1xuICAgIH07XG4gICAgLy8gaW5qZWN0IGFsaWFzXG4gICAgYXN5bmMuaW5qZWN0ID0gYXN5bmMucmVkdWNlO1xuICAgIC8vIGZvbGRsIGFsaWFzXG4gICAgYXN5bmMuZm9sZGwgPSBhc3luYy5yZWR1Y2U7XG5cbiAgICBhc3luYy5yZWR1Y2VSaWdodCA9IGZ1bmN0aW9uIChhcnIsIG1lbW8sIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICB2YXIgcmV2ZXJzZWQgPSBfbWFwKGFyciwgZnVuY3Rpb24gKHgpIHtcbiAgICAgICAgICAgIHJldHVybiB4O1xuICAgICAgICB9KS5yZXZlcnNlKCk7XG4gICAgICAgIGFzeW5jLnJlZHVjZShyZXZlcnNlZCwgbWVtbywgaXRlcmF0b3IsIGNhbGxiYWNrKTtcbiAgICB9O1xuICAgIC8vIGZvbGRyIGFsaWFzXG4gICAgYXN5bmMuZm9sZHIgPSBhc3luYy5yZWR1Y2VSaWdodDtcblxuICAgIHZhciBfZmlsdGVyID0gZnVuY3Rpb24gKGVhY2hmbiwgYXJyLCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgdmFyIHJlc3VsdHMgPSBbXTtcbiAgICAgICAgYXJyID0gX21hcChhcnIsIGZ1bmN0aW9uICh4LCBpKSB7XG4gICAgICAgICAgICByZXR1cm4ge2luZGV4OiBpLCB2YWx1ZTogeH07XG4gICAgICAgIH0pO1xuICAgICAgICBlYWNoZm4oYXJyLCBmdW5jdGlvbiAoeCwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIGl0ZXJhdG9yKHgudmFsdWUsIGZ1bmN0aW9uICh2KSB7XG4gICAgICAgICAgICAgICAgaWYgKHYpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0cy5wdXNoKHgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgIGNhbGxiYWNrKF9tYXAocmVzdWx0cy5zb3J0KGZ1bmN0aW9uIChhLCBiKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGEuaW5kZXggLSBiLmluZGV4O1xuICAgICAgICAgICAgfSksIGZ1bmN0aW9uICh4KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHgudmFsdWU7XG4gICAgICAgICAgICB9KSk7XG4gICAgICAgIH0pO1xuICAgIH07XG4gICAgYXN5bmMuZmlsdGVyID0gZG9QYXJhbGxlbChfZmlsdGVyKTtcbiAgICBhc3luYy5maWx0ZXJTZXJpZXMgPSBkb1NlcmllcyhfZmlsdGVyKTtcbiAgICAvLyBzZWxlY3QgYWxpYXNcbiAgICBhc3luYy5zZWxlY3QgPSBhc3luYy5maWx0ZXI7XG4gICAgYXN5bmMuc2VsZWN0U2VyaWVzID0gYXN5bmMuZmlsdGVyU2VyaWVzO1xuXG4gICAgdmFyIF9yZWplY3QgPSBmdW5jdGlvbiAoZWFjaGZuLCBhcnIsIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICB2YXIgcmVzdWx0cyA9IFtdO1xuICAgICAgICBhcnIgPSBfbWFwKGFyciwgZnVuY3Rpb24gKHgsIGkpIHtcbiAgICAgICAgICAgIHJldHVybiB7aW5kZXg6IGksIHZhbHVlOiB4fTtcbiAgICAgICAgfSk7XG4gICAgICAgIGVhY2hmbihhcnIsIGZ1bmN0aW9uICh4LCBjYWxsYmFjaykge1xuICAgICAgICAgICAgaXRlcmF0b3IoeC52YWx1ZSwgZnVuY3Rpb24gKHYpIHtcbiAgICAgICAgICAgICAgICBpZiAoIXYpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0cy5wdXNoKHgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgIGNhbGxiYWNrKF9tYXAocmVzdWx0cy5zb3J0KGZ1bmN0aW9uIChhLCBiKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGEuaW5kZXggLSBiLmluZGV4O1xuICAgICAgICAgICAgfSksIGZ1bmN0aW9uICh4KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHgudmFsdWU7XG4gICAgICAgICAgICB9KSk7XG4gICAgICAgIH0pO1xuICAgIH07XG4gICAgYXN5bmMucmVqZWN0ID0gZG9QYXJhbGxlbChfcmVqZWN0KTtcbiAgICBhc3luYy5yZWplY3RTZXJpZXMgPSBkb1NlcmllcyhfcmVqZWN0KTtcblxuICAgIHZhciBfZGV0ZWN0ID0gZnVuY3Rpb24gKGVhY2hmbiwgYXJyLCBpdGVyYXRvciwgbWFpbl9jYWxsYmFjaykge1xuICAgICAgICBlYWNoZm4oYXJyLCBmdW5jdGlvbiAoeCwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIGl0ZXJhdG9yKHgsIGZ1bmN0aW9uIChyZXN1bHQpIHtcbiAgICAgICAgICAgICAgICBpZiAocmVzdWx0KSB7XG4gICAgICAgICAgICAgICAgICAgIG1haW5fY2FsbGJhY2soeCk7XG4gICAgICAgICAgICAgICAgICAgIG1haW5fY2FsbGJhY2sgPSBmdW5jdGlvbiAoKSB7fTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgIG1haW5fY2FsbGJhY2soKTtcbiAgICAgICAgfSk7XG4gICAgfTtcbiAgICBhc3luYy5kZXRlY3QgPSBkb1BhcmFsbGVsKF9kZXRlY3QpO1xuICAgIGFzeW5jLmRldGVjdFNlcmllcyA9IGRvU2VyaWVzKF9kZXRlY3QpO1xuXG4gICAgYXN5bmMuc29tZSA9IGZ1bmN0aW9uIChhcnIsIGl0ZXJhdG9yLCBtYWluX2NhbGxiYWNrKSB7XG4gICAgICAgIGFzeW5jLmVhY2goYXJyLCBmdW5jdGlvbiAoeCwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIGl0ZXJhdG9yKHgsIGZ1bmN0aW9uICh2KSB7XG4gICAgICAgICAgICAgICAgaWYgKHYpIHtcbiAgICAgICAgICAgICAgICAgICAgbWFpbl9jYWxsYmFjayh0cnVlKTtcbiAgICAgICAgICAgICAgICAgICAgbWFpbl9jYWxsYmFjayA9IGZ1bmN0aW9uICgpIHt9O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgIG1haW5fY2FsbGJhY2soZmFsc2UpO1xuICAgICAgICB9KTtcbiAgICB9O1xuICAgIC8vIGFueSBhbGlhc1xuICAgIGFzeW5jLmFueSA9IGFzeW5jLnNvbWU7XG5cbiAgICBhc3luYy5ldmVyeSA9IGZ1bmN0aW9uIChhcnIsIGl0ZXJhdG9yLCBtYWluX2NhbGxiYWNrKSB7XG4gICAgICAgIGFzeW5jLmVhY2goYXJyLCBmdW5jdGlvbiAoeCwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIGl0ZXJhdG9yKHgsIGZ1bmN0aW9uICh2KSB7XG4gICAgICAgICAgICAgICAgaWYgKCF2KSB7XG4gICAgICAgICAgICAgICAgICAgIG1haW5fY2FsbGJhY2soZmFsc2UpO1xuICAgICAgICAgICAgICAgICAgICBtYWluX2NhbGxiYWNrID0gZnVuY3Rpb24gKCkge307XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhbGxiYWNrKCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSwgZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgbWFpbl9jYWxsYmFjayh0cnVlKTtcbiAgICAgICAgfSk7XG4gICAgfTtcbiAgICAvLyBhbGwgYWxpYXNcbiAgICBhc3luYy5hbGwgPSBhc3luYy5ldmVyeTtcblxuICAgIGFzeW5jLnNvcnRCeSA9IGZ1bmN0aW9uIChhcnIsIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICBhc3luYy5tYXAoYXJyLCBmdW5jdGlvbiAoeCwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIGl0ZXJhdG9yKHgsIGZ1bmN0aW9uIChlcnIsIGNyaXRlcmlhKSB7XG4gICAgICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2sobnVsbCwge3ZhbHVlOiB4LCBjcml0ZXJpYTogY3JpdGVyaWF9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSwgZnVuY3Rpb24gKGVyciwgcmVzdWx0cykge1xuICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAgIHJldHVybiBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgdmFyIGZuID0gZnVuY3Rpb24gKGxlZnQsIHJpZ2h0KSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBhID0gbGVmdC5jcml0ZXJpYSwgYiA9IHJpZ2h0LmNyaXRlcmlhO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYSA8IGIgPyAtMSA6IGEgPiBiID8gMSA6IDA7XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICBjYWxsYmFjayhudWxsLCBfbWFwKHJlc3VsdHMuc29ydChmbiksIGZ1bmN0aW9uICh4KSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB4LnZhbHVlO1xuICAgICAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfTtcblxuICAgIGFzeW5jLmF1dG8gPSBmdW5jdGlvbiAodGFza3MsIGNhbGxiYWNrKSB7XG4gICAgICAgIGNhbGxiYWNrID0gY2FsbGJhY2sgfHwgZnVuY3Rpb24gKCkge307XG4gICAgICAgIHZhciBrZXlzID0gX2tleXModGFza3MpO1xuICAgICAgICB2YXIgcmVtYWluaW5nVGFza3MgPSBrZXlzLmxlbmd0aFxuICAgICAgICBpZiAoIXJlbWFpbmluZ1Rhc2tzKSB7XG4gICAgICAgICAgICByZXR1cm4gY2FsbGJhY2soKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciByZXN1bHRzID0ge307XG5cbiAgICAgICAgdmFyIGxpc3RlbmVycyA9IFtdO1xuICAgICAgICB2YXIgYWRkTGlzdGVuZXIgPSBmdW5jdGlvbiAoZm4pIHtcbiAgICAgICAgICAgIGxpc3RlbmVycy51bnNoaWZ0KGZuKTtcbiAgICAgICAgfTtcbiAgICAgICAgdmFyIHJlbW92ZUxpc3RlbmVyID0gZnVuY3Rpb24gKGZuKSB7XG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxpc3RlbmVycy5sZW5ndGg7IGkgKz0gMSkge1xuICAgICAgICAgICAgICAgIGlmIChsaXN0ZW5lcnNbaV0gPT09IGZuKSB7XG4gICAgICAgICAgICAgICAgICAgIGxpc3RlbmVycy5zcGxpY2UoaSwgMSk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIHZhciB0YXNrQ29tcGxldGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZW1haW5pbmdUYXNrcy0tXG4gICAgICAgICAgICBfZWFjaChsaXN0ZW5lcnMuc2xpY2UoMCksIGZ1bmN0aW9uIChmbikge1xuICAgICAgICAgICAgICAgIGZuKCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfTtcblxuICAgICAgICBhZGRMaXN0ZW5lcihmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBpZiAoIXJlbWFpbmluZ1Rhc2tzKSB7XG4gICAgICAgICAgICAgICAgdmFyIHRoZUNhbGxiYWNrID0gY2FsbGJhY2s7XG4gICAgICAgICAgICAgICAgLy8gcHJldmVudCBmaW5hbCBjYWxsYmFjayBmcm9tIGNhbGxpbmcgaXRzZWxmIGlmIGl0IGVycm9yc1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrID0gZnVuY3Rpb24gKCkge307XG5cbiAgICAgICAgICAgICAgICB0aGVDYWxsYmFjayhudWxsLCByZXN1bHRzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgX2VhY2goa2V5cywgZnVuY3Rpb24gKGspIHtcbiAgICAgICAgICAgIHZhciB0YXNrID0gX2lzQXJyYXkodGFza3Nba10pID8gdGFza3Nba106IFt0YXNrc1trXV07XG4gICAgICAgICAgICB2YXIgdGFza0NhbGxiYWNrID0gZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgICAgIHZhciBhcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKTtcbiAgICAgICAgICAgICAgICBpZiAoYXJncy5sZW5ndGggPD0gMSkge1xuICAgICAgICAgICAgICAgICAgICBhcmdzID0gYXJnc1swXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAgICAgICB2YXIgc2FmZVJlc3VsdHMgPSB7fTtcbiAgICAgICAgICAgICAgICAgICAgX2VhY2goX2tleXMocmVzdWx0cyksIGZ1bmN0aW9uKHJrZXkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNhZmVSZXN1bHRzW3JrZXldID0gcmVzdWx0c1tya2V5XTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIHNhZmVSZXN1bHRzW2tdID0gYXJncztcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soZXJyLCBzYWZlUmVzdWx0cyk7XG4gICAgICAgICAgICAgICAgICAgIC8vIHN0b3Agc3Vic2VxdWVudCBlcnJvcnMgaGl0dGluZyBjYWxsYmFjayBtdWx0aXBsZSB0aW1lc1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayA9IGZ1bmN0aW9uICgpIHt9O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0c1trXSA9IGFyZ3M7XG4gICAgICAgICAgICAgICAgICAgIGFzeW5jLnNldEltbWVkaWF0ZSh0YXNrQ29tcGxldGUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICB2YXIgcmVxdWlyZXMgPSB0YXNrLnNsaWNlKDAsIE1hdGguYWJzKHRhc2subGVuZ3RoIC0gMSkpIHx8IFtdO1xuICAgICAgICAgICAgdmFyIHJlYWR5ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBfcmVkdWNlKHJlcXVpcmVzLCBmdW5jdGlvbiAoYSwgeCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gKGEgJiYgcmVzdWx0cy5oYXNPd25Qcm9wZXJ0eSh4KSk7XG4gICAgICAgICAgICAgICAgfSwgdHJ1ZSkgJiYgIXJlc3VsdHMuaGFzT3duUHJvcGVydHkoayk7XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgaWYgKHJlYWR5KCkpIHtcbiAgICAgICAgICAgICAgICB0YXNrW3Rhc2subGVuZ3RoIC0gMV0odGFza0NhbGxiYWNrLCByZXN1bHRzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHZhciBsaXN0ZW5lciA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlYWR5KCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlbW92ZUxpc3RlbmVyKGxpc3RlbmVyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRhc2tbdGFzay5sZW5ndGggLSAxXSh0YXNrQ2FsbGJhY2ssIHJlc3VsdHMpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICBhZGRMaXN0ZW5lcihsaXN0ZW5lcik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH07XG5cbiAgICBhc3luYy5yZXRyeSA9IGZ1bmN0aW9uKHRpbWVzLCB0YXNrLCBjYWxsYmFjaykge1xuICAgICAgICB2YXIgREVGQVVMVF9USU1FUyA9IDU7XG4gICAgICAgIHZhciBhdHRlbXB0cyA9IFtdO1xuICAgICAgICAvLyBVc2UgZGVmYXVsdHMgaWYgdGltZXMgbm90IHBhc3NlZFxuICAgICAgICBpZiAodHlwZW9mIHRpbWVzID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICBjYWxsYmFjayA9IHRhc2s7XG4gICAgICAgICAgICB0YXNrID0gdGltZXM7XG4gICAgICAgICAgICB0aW1lcyA9IERFRkFVTFRfVElNRVM7XG4gICAgICAgIH1cbiAgICAgICAgLy8gTWFrZSBzdXJlIHRpbWVzIGlzIGEgbnVtYmVyXG4gICAgICAgIHRpbWVzID0gcGFyc2VJbnQodGltZXMsIDEwKSB8fCBERUZBVUxUX1RJTUVTO1xuICAgICAgICB2YXIgd3JhcHBlZFRhc2sgPSBmdW5jdGlvbih3cmFwcGVkQ2FsbGJhY2ssIHdyYXBwZWRSZXN1bHRzKSB7XG4gICAgICAgICAgICB2YXIgcmV0cnlBdHRlbXB0ID0gZnVuY3Rpb24odGFzaywgZmluYWxBdHRlbXB0KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKHNlcmllc0NhbGxiYWNrKSB7XG4gICAgICAgICAgICAgICAgICAgIHRhc2soZnVuY3Rpb24oZXJyLCByZXN1bHQpe1xuICAgICAgICAgICAgICAgICAgICAgICAgc2VyaWVzQ2FsbGJhY2soIWVyciB8fCBmaW5hbEF0dGVtcHQsIHtlcnI6IGVyciwgcmVzdWx0OiByZXN1bHR9KTtcbiAgICAgICAgICAgICAgICAgICAgfSwgd3JhcHBlZFJlc3VsdHMpO1xuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgd2hpbGUgKHRpbWVzKSB7XG4gICAgICAgICAgICAgICAgYXR0ZW1wdHMucHVzaChyZXRyeUF0dGVtcHQodGFzaywgISh0aW1lcy09MSkpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGFzeW5jLnNlcmllcyhhdHRlbXB0cywgZnVuY3Rpb24oZG9uZSwgZGF0YSl7XG4gICAgICAgICAgICAgICAgZGF0YSA9IGRhdGFbZGF0YS5sZW5ndGggLSAxXTtcbiAgICAgICAgICAgICAgICAod3JhcHBlZENhbGxiYWNrIHx8IGNhbGxiYWNrKShkYXRhLmVyciwgZGF0YS5yZXN1bHQpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gSWYgYSBjYWxsYmFjayBpcyBwYXNzZWQsIHJ1biB0aGlzIGFzIGEgY29udHJvbGwgZmxvd1xuICAgICAgICByZXR1cm4gY2FsbGJhY2sgPyB3cmFwcGVkVGFzaygpIDogd3JhcHBlZFRhc2tcbiAgICB9O1xuXG4gICAgYXN5bmMud2F0ZXJmYWxsID0gZnVuY3Rpb24gKHRhc2tzLCBjYWxsYmFjaykge1xuICAgICAgICBjYWxsYmFjayA9IGNhbGxiYWNrIHx8IGZ1bmN0aW9uICgpIHt9O1xuICAgICAgICBpZiAoIV9pc0FycmF5KHRhc2tzKSkge1xuICAgICAgICAgIHZhciBlcnIgPSBuZXcgRXJyb3IoJ0ZpcnN0IGFyZ3VtZW50IHRvIHdhdGVyZmFsbCBtdXN0IGJlIGFuIGFycmF5IG9mIGZ1bmN0aW9ucycpO1xuICAgICAgICAgIHJldHVybiBjYWxsYmFjayhlcnIpO1xuICAgICAgICB9XG4gICAgICAgIGlmICghdGFza3MubGVuZ3RoKSB7XG4gICAgICAgICAgICByZXR1cm4gY2FsbGJhY2soKTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgd3JhcEl0ZXJhdG9yID0gZnVuY3Rpb24gKGl0ZXJhdG9yKSB7XG4gICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2suYXBwbHkobnVsbCwgYXJndW1lbnRzKTtcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2sgPSBmdW5jdGlvbiAoKSB7fTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBhcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKTtcbiAgICAgICAgICAgICAgICAgICAgdmFyIG5leHQgPSBpdGVyYXRvci5uZXh0KCk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChuZXh0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhcmdzLnB1c2god3JhcEl0ZXJhdG9yKG5leHQpKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3MucHVzaChjYWxsYmFjayk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgYXN5bmMuc2V0SW1tZWRpYXRlKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGl0ZXJhdG9yLmFwcGx5KG51bGwsIGFyZ3MpO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9O1xuICAgICAgICB9O1xuICAgICAgICB3cmFwSXRlcmF0b3IoYXN5bmMuaXRlcmF0b3IodGFza3MpKSgpO1xuICAgIH07XG5cbiAgICB2YXIgX3BhcmFsbGVsID0gZnVuY3Rpb24oZWFjaGZuLCB0YXNrcywgY2FsbGJhY2spIHtcbiAgICAgICAgY2FsbGJhY2sgPSBjYWxsYmFjayB8fCBmdW5jdGlvbiAoKSB7fTtcbiAgICAgICAgaWYgKF9pc0FycmF5KHRhc2tzKSkge1xuICAgICAgICAgICAgZWFjaGZuLm1hcCh0YXNrcywgZnVuY3Rpb24gKGZuLCBjYWxsYmFjaykge1xuICAgICAgICAgICAgICAgIGlmIChmbikge1xuICAgICAgICAgICAgICAgICAgICBmbihmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoYXJncy5sZW5ndGggPD0gMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3MgPSBhcmdzWzBdO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2suY2FsbChudWxsLCBlcnIsIGFyZ3MpO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LCBjYWxsYmFjayk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB2YXIgcmVzdWx0cyA9IHt9O1xuICAgICAgICAgICAgZWFjaGZuLmVhY2goX2tleXModGFza3MpLCBmdW5jdGlvbiAoaywgY2FsbGJhY2spIHtcbiAgICAgICAgICAgICAgICB0YXNrc1trXShmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBhcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGFyZ3MubGVuZ3RoIDw9IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3MgPSBhcmdzWzBdO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdHNba10gPSBhcmdzO1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSwgZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrKGVyciwgcmVzdWx0cyk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH07XG5cbiAgICBhc3luYy5wYXJhbGxlbCA9IGZ1bmN0aW9uICh0YXNrcywgY2FsbGJhY2spIHtcbiAgICAgICAgX3BhcmFsbGVsKHsgbWFwOiBhc3luYy5tYXAsIGVhY2g6IGFzeW5jLmVhY2ggfSwgdGFza3MsIGNhbGxiYWNrKTtcbiAgICB9O1xuXG4gICAgYXN5bmMucGFyYWxsZWxMaW1pdCA9IGZ1bmN0aW9uKHRhc2tzLCBsaW1pdCwgY2FsbGJhY2spIHtcbiAgICAgICAgX3BhcmFsbGVsKHsgbWFwOiBfbWFwTGltaXQobGltaXQpLCBlYWNoOiBfZWFjaExpbWl0KGxpbWl0KSB9LCB0YXNrcywgY2FsbGJhY2spO1xuICAgIH07XG5cbiAgICBhc3luYy5zZXJpZXMgPSBmdW5jdGlvbiAodGFza3MsIGNhbGxiYWNrKSB7XG4gICAgICAgIGNhbGxiYWNrID0gY2FsbGJhY2sgfHwgZnVuY3Rpb24gKCkge307XG4gICAgICAgIGlmIChfaXNBcnJheSh0YXNrcykpIHtcbiAgICAgICAgICAgIGFzeW5jLm1hcFNlcmllcyh0YXNrcywgZnVuY3Rpb24gKGZuLCBjYWxsYmFjaykge1xuICAgICAgICAgICAgICAgIGlmIChmbikge1xuICAgICAgICAgICAgICAgICAgICBmbihmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoYXJncy5sZW5ndGggPD0gMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3MgPSBhcmdzWzBdO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2suY2FsbChudWxsLCBlcnIsIGFyZ3MpO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LCBjYWxsYmFjayk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB2YXIgcmVzdWx0cyA9IHt9O1xuICAgICAgICAgICAgYXN5bmMuZWFjaFNlcmllcyhfa2V5cyh0YXNrcyksIGZ1bmN0aW9uIChrLCBjYWxsYmFjaykge1xuICAgICAgICAgICAgICAgIHRhc2tzW2tdKGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGFyZ3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsIDEpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoYXJncy5sZW5ndGggPD0gMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgYXJncyA9IGFyZ3NbMF07XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0c1trXSA9IGFyZ3M7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9LCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2soZXJyLCByZXN1bHRzKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIGFzeW5jLml0ZXJhdG9yID0gZnVuY3Rpb24gKHRhc2tzKSB7XG4gICAgICAgIHZhciBtYWtlQ2FsbGJhY2sgPSBmdW5jdGlvbiAoaW5kZXgpIHtcbiAgICAgICAgICAgIHZhciBmbiA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBpZiAodGFza3MubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgIHRhc2tzW2luZGV4XS5hcHBseShudWxsLCBhcmd1bWVudHMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gZm4ubmV4dCgpO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGZuLm5leHQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIChpbmRleCA8IHRhc2tzLmxlbmd0aCAtIDEpID8gbWFrZUNhbGxiYWNrKGluZGV4ICsgMSk6IG51bGw7XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgcmV0dXJuIGZuO1xuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gbWFrZUNhbGxiYWNrKDApO1xuICAgIH07XG5cbiAgICBhc3luYy5hcHBseSA9IGZ1bmN0aW9uIChmbikge1xuICAgICAgICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMSk7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gZm4uYXBwbHkoXG4gICAgICAgICAgICAgICAgbnVsbCwgYXJncy5jb25jYXQoQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKSlcbiAgICAgICAgICAgICk7XG4gICAgICAgIH07XG4gICAgfTtcblxuICAgIHZhciBfY29uY2F0ID0gZnVuY3Rpb24gKGVhY2hmbiwgYXJyLCBmbiwgY2FsbGJhY2spIHtcbiAgICAgICAgdmFyIHIgPSBbXTtcbiAgICAgICAgZWFjaGZuKGFyciwgZnVuY3Rpb24gKHgsIGNiKSB7XG4gICAgICAgICAgICBmbih4LCBmdW5jdGlvbiAoZXJyLCB5KSB7XG4gICAgICAgICAgICAgICAgciA9IHIuY29uY2F0KHkgfHwgW10pO1xuICAgICAgICAgICAgICAgIGNiKGVycik7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSwgZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgY2FsbGJhY2soZXJyLCByKTtcbiAgICAgICAgfSk7XG4gICAgfTtcbiAgICBhc3luYy5jb25jYXQgPSBkb1BhcmFsbGVsKF9jb25jYXQpO1xuICAgIGFzeW5jLmNvbmNhdFNlcmllcyA9IGRvU2VyaWVzKF9jb25jYXQpO1xuXG4gICAgYXN5bmMud2hpbHN0ID0gZnVuY3Rpb24gKHRlc3QsIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICBpZiAodGVzdCgpKSB7XG4gICAgICAgICAgICBpdGVyYXRvcihmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYXN5bmMud2hpbHN0KHRlc3QsIGl0ZXJhdG9yLCBjYWxsYmFjayk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGNhbGxiYWNrKCk7XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgYXN5bmMuZG9XaGlsc3QgPSBmdW5jdGlvbiAoaXRlcmF0b3IsIHRlc3QsIGNhbGxiYWNrKSB7XG4gICAgICAgIGl0ZXJhdG9yKGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHZhciBhcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKTtcbiAgICAgICAgICAgIGlmICh0ZXN0LmFwcGx5KG51bGwsIGFyZ3MpKSB7XG4gICAgICAgICAgICAgICAgYXN5bmMuZG9XaGlsc3QoaXRlcmF0b3IsIHRlc3QsIGNhbGxiYWNrKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH07XG5cbiAgICBhc3luYy51bnRpbCA9IGZ1bmN0aW9uICh0ZXN0LCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgaWYgKCF0ZXN0KCkpIHtcbiAgICAgICAgICAgIGl0ZXJhdG9yKGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBhc3luYy51bnRpbCh0ZXN0LCBpdGVyYXRvciwgY2FsbGJhY2spO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIGFzeW5jLmRvVW50aWwgPSBmdW5jdGlvbiAoaXRlcmF0b3IsIHRlc3QsIGNhbGxiYWNrKSB7XG4gICAgICAgIGl0ZXJhdG9yKGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHZhciBhcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKTtcbiAgICAgICAgICAgIGlmICghdGVzdC5hcHBseShudWxsLCBhcmdzKSkge1xuICAgICAgICAgICAgICAgIGFzeW5jLmRvVW50aWwoaXRlcmF0b3IsIHRlc3QsIGNhbGxiYWNrKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH07XG5cbiAgICBhc3luYy5xdWV1ZSA9IGZ1bmN0aW9uICh3b3JrZXIsIGNvbmN1cnJlbmN5KSB7XG4gICAgICAgIGlmIChjb25jdXJyZW5jeSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBjb25jdXJyZW5jeSA9IDE7XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gX2luc2VydChxLCBkYXRhLCBwb3MsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgaWYgKCFxLnN0YXJ0ZWQpe1xuICAgICAgICAgICAgcS5zdGFydGVkID0gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKCFfaXNBcnJheShkYXRhKSkge1xuICAgICAgICAgICAgICBkYXRhID0gW2RhdGFdO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZihkYXRhLmxlbmd0aCA9PSAwKSB7XG4gICAgICAgICAgICAgLy8gY2FsbCBkcmFpbiBpbW1lZGlhdGVseSBpZiB0aGVyZSBhcmUgbm8gdGFza3NcbiAgICAgICAgICAgICByZXR1cm4gYXN5bmMuc2V0SW1tZWRpYXRlKGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgICBpZiAocS5kcmFpbikge1xuICAgICAgICAgICAgICAgICAgICAgcS5kcmFpbigpO1xuICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIF9lYWNoKGRhdGEsIGZ1bmN0aW9uKHRhc2spIHtcbiAgICAgICAgICAgICAgdmFyIGl0ZW0gPSB7XG4gICAgICAgICAgICAgICAgICBkYXRhOiB0YXNrLFxuICAgICAgICAgICAgICAgICAgY2FsbGJhY2s6IHR5cGVvZiBjYWxsYmFjayA9PT0gJ2Z1bmN0aW9uJyA/IGNhbGxiYWNrIDogbnVsbFxuICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgIGlmIChwb3MpIHtcbiAgICAgICAgICAgICAgICBxLnRhc2tzLnVuc2hpZnQoaXRlbSk7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcS50YXNrcy5wdXNoKGl0ZW0pO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgaWYgKHEuc2F0dXJhdGVkICYmIHEudGFza3MubGVuZ3RoID09PSBxLmNvbmN1cnJlbmN5KSB7XG4gICAgICAgICAgICAgICAgICBxLnNhdHVyYXRlZCgpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGFzeW5jLnNldEltbWVkaWF0ZShxLnByb2Nlc3MpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIHdvcmtlcnMgPSAwO1xuICAgICAgICB2YXIgcSA9IHtcbiAgICAgICAgICAgIHRhc2tzOiBbXSxcbiAgICAgICAgICAgIGNvbmN1cnJlbmN5OiBjb25jdXJyZW5jeSxcbiAgICAgICAgICAgIHNhdHVyYXRlZDogbnVsbCxcbiAgICAgICAgICAgIGVtcHR5OiBudWxsLFxuICAgICAgICAgICAgZHJhaW46IG51bGwsXG4gICAgICAgICAgICBzdGFydGVkOiBmYWxzZSxcbiAgICAgICAgICAgIHBhdXNlZDogZmFsc2UsXG4gICAgICAgICAgICBwdXNoOiBmdW5jdGlvbiAoZGF0YSwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgICAgX2luc2VydChxLCBkYXRhLCBmYWxzZSwgY2FsbGJhY2spO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGtpbGw6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgcS5kcmFpbiA9IG51bGw7XG4gICAgICAgICAgICAgIHEudGFza3MgPSBbXTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB1bnNoaWZ0OiBmdW5jdGlvbiAoZGF0YSwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgICAgX2luc2VydChxLCBkYXRhLCB0cnVlLCBjYWxsYmFjayk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcHJvY2VzczogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGlmICghcS5wYXVzZWQgJiYgd29ya2VycyA8IHEuY29uY3VycmVuY3kgJiYgcS50YXNrcy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHRhc2sgPSBxLnRhc2tzLnNoaWZ0KCk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChxLmVtcHR5ICYmIHEudGFza3MubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBxLmVtcHR5KCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgd29ya2VycyArPSAxO1xuICAgICAgICAgICAgICAgICAgICB2YXIgbmV4dCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHdvcmtlcnMgLT0gMTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0YXNrLmNhbGxiYWNrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFzay5jYWxsYmFjay5hcHBseSh0YXNrLCBhcmd1bWVudHMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHEuZHJhaW4gJiYgcS50YXNrcy5sZW5ndGggKyB3b3JrZXJzID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcS5kcmFpbigpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgcS5wcm9jZXNzKCk7XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIHZhciBjYiA9IG9ubHlfb25jZShuZXh0KTtcbiAgICAgICAgICAgICAgICAgICAgd29ya2VyKHRhc2suZGF0YSwgY2IpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBsZW5ndGg6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcS50YXNrcy5sZW5ndGg7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcnVubmluZzogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB3b3JrZXJzO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGlkbGU6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBxLnRhc2tzLmxlbmd0aCArIHdvcmtlcnMgPT09IDA7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcGF1c2U6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBpZiAocS5wYXVzZWQgPT09IHRydWUpIHsgcmV0dXJuOyB9XG4gICAgICAgICAgICAgICAgcS5wYXVzZWQgPSB0cnVlO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHJlc3VtZTogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGlmIChxLnBhdXNlZCA9PT0gZmFsc2UpIHsgcmV0dXJuOyB9XG4gICAgICAgICAgICAgICAgcS5wYXVzZWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAvLyBOZWVkIHRvIGNhbGwgcS5wcm9jZXNzIG9uY2UgcGVyIGNvbmN1cnJlbnRcbiAgICAgICAgICAgICAgICAvLyB3b3JrZXIgdG8gcHJlc2VydmUgZnVsbCBjb25jdXJyZW5jeSBhZnRlciBwYXVzZVxuICAgICAgICAgICAgICAgIGZvciAodmFyIHcgPSAxOyB3IDw9IHEuY29uY3VycmVuY3k7IHcrKykge1xuICAgICAgICAgICAgICAgICAgICBhc3luYy5zZXRJbW1lZGlhdGUocS5wcm9jZXNzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiBxO1xuICAgIH07XG5cbiAgICBhc3luYy5wcmlvcml0eVF1ZXVlID0gZnVuY3Rpb24gKHdvcmtlciwgY29uY3VycmVuY3kpIHtcblxuICAgICAgICBmdW5jdGlvbiBfY29tcGFyZVRhc2tzKGEsIGIpe1xuICAgICAgICAgIHJldHVybiBhLnByaW9yaXR5IC0gYi5wcmlvcml0eTtcbiAgICAgICAgfTtcblxuICAgICAgICBmdW5jdGlvbiBfYmluYXJ5U2VhcmNoKHNlcXVlbmNlLCBpdGVtLCBjb21wYXJlKSB7XG4gICAgICAgICAgdmFyIGJlZyA9IC0xLFxuICAgICAgICAgICAgICBlbmQgPSBzZXF1ZW5jZS5sZW5ndGggLSAxO1xuICAgICAgICAgIHdoaWxlIChiZWcgPCBlbmQpIHtcbiAgICAgICAgICAgIHZhciBtaWQgPSBiZWcgKyAoKGVuZCAtIGJlZyArIDEpID4+PiAxKTtcbiAgICAgICAgICAgIGlmIChjb21wYXJlKGl0ZW0sIHNlcXVlbmNlW21pZF0pID49IDApIHtcbiAgICAgICAgICAgICAgYmVnID0gbWlkO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgZW5kID0gbWlkIC0gMTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIGJlZztcbiAgICAgICAgfVxuXG4gICAgICAgIGZ1bmN0aW9uIF9pbnNlcnQocSwgZGF0YSwgcHJpb3JpdHksIGNhbGxiYWNrKSB7XG4gICAgICAgICAgaWYgKCFxLnN0YXJ0ZWQpe1xuICAgICAgICAgICAgcS5zdGFydGVkID0gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKCFfaXNBcnJheShkYXRhKSkge1xuICAgICAgICAgICAgICBkYXRhID0gW2RhdGFdO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZihkYXRhLmxlbmd0aCA9PSAwKSB7XG4gICAgICAgICAgICAgLy8gY2FsbCBkcmFpbiBpbW1lZGlhdGVseSBpZiB0aGVyZSBhcmUgbm8gdGFza3NcbiAgICAgICAgICAgICByZXR1cm4gYXN5bmMuc2V0SW1tZWRpYXRlKGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgICBpZiAocS5kcmFpbikge1xuICAgICAgICAgICAgICAgICAgICAgcS5kcmFpbigpO1xuICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIF9lYWNoKGRhdGEsIGZ1bmN0aW9uKHRhc2spIHtcbiAgICAgICAgICAgICAgdmFyIGl0ZW0gPSB7XG4gICAgICAgICAgICAgICAgICBkYXRhOiB0YXNrLFxuICAgICAgICAgICAgICAgICAgcHJpb3JpdHk6IHByaW9yaXR5LFxuICAgICAgICAgICAgICAgICAgY2FsbGJhY2s6IHR5cGVvZiBjYWxsYmFjayA9PT0gJ2Z1bmN0aW9uJyA/IGNhbGxiYWNrIDogbnVsbFxuICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgIHEudGFza3Muc3BsaWNlKF9iaW5hcnlTZWFyY2gocS50YXNrcywgaXRlbSwgX2NvbXBhcmVUYXNrcykgKyAxLCAwLCBpdGVtKTtcblxuICAgICAgICAgICAgICBpZiAocS5zYXR1cmF0ZWQgJiYgcS50YXNrcy5sZW5ndGggPT09IHEuY29uY3VycmVuY3kpIHtcbiAgICAgICAgICAgICAgICAgIHEuc2F0dXJhdGVkKCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgYXN5bmMuc2V0SW1tZWRpYXRlKHEucHJvY2Vzcyk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBTdGFydCB3aXRoIGEgbm9ybWFsIHF1ZXVlXG4gICAgICAgIHZhciBxID0gYXN5bmMucXVldWUod29ya2VyLCBjb25jdXJyZW5jeSk7XG5cbiAgICAgICAgLy8gT3ZlcnJpZGUgcHVzaCB0byBhY2NlcHQgc2Vjb25kIHBhcmFtZXRlciByZXByZXNlbnRpbmcgcHJpb3JpdHlcbiAgICAgICAgcS5wdXNoID0gZnVuY3Rpb24gKGRhdGEsIHByaW9yaXR5LCBjYWxsYmFjaykge1xuICAgICAgICAgIF9pbnNlcnQocSwgZGF0YSwgcHJpb3JpdHksIGNhbGxiYWNrKTtcbiAgICAgICAgfTtcblxuICAgICAgICAvLyBSZW1vdmUgdW5zaGlmdCBmdW5jdGlvblxuICAgICAgICBkZWxldGUgcS51bnNoaWZ0O1xuXG4gICAgICAgIHJldHVybiBxO1xuICAgIH07XG5cbiAgICBhc3luYy5jYXJnbyA9IGZ1bmN0aW9uICh3b3JrZXIsIHBheWxvYWQpIHtcbiAgICAgICAgdmFyIHdvcmtpbmcgICAgID0gZmFsc2UsXG4gICAgICAgICAgICB0YXNrcyAgICAgICA9IFtdO1xuXG4gICAgICAgIHZhciBjYXJnbyA9IHtcbiAgICAgICAgICAgIHRhc2tzOiB0YXNrcyxcbiAgICAgICAgICAgIHBheWxvYWQ6IHBheWxvYWQsXG4gICAgICAgICAgICBzYXR1cmF0ZWQ6IG51bGwsXG4gICAgICAgICAgICBlbXB0eTogbnVsbCxcbiAgICAgICAgICAgIGRyYWluOiBudWxsLFxuICAgICAgICAgICAgZHJhaW5lZDogdHJ1ZSxcbiAgICAgICAgICAgIHB1c2g6IGZ1bmN0aW9uIChkYXRhLCBjYWxsYmFjaykge1xuICAgICAgICAgICAgICAgIGlmICghX2lzQXJyYXkoZGF0YSkpIHtcbiAgICAgICAgICAgICAgICAgICAgZGF0YSA9IFtkYXRhXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgX2VhY2goZGF0YSwgZnVuY3Rpb24odGFzaykge1xuICAgICAgICAgICAgICAgICAgICB0YXNrcy5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGE6IHRhc2ssXG4gICAgICAgICAgICAgICAgICAgICAgICBjYWxsYmFjazogdHlwZW9mIGNhbGxiYWNrID09PSAnZnVuY3Rpb24nID8gY2FsbGJhY2sgOiBudWxsXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICBjYXJnby5kcmFpbmVkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIGlmIChjYXJnby5zYXR1cmF0ZWQgJiYgdGFza3MubGVuZ3RoID09PSBwYXlsb2FkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjYXJnby5zYXR1cmF0ZWQoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGFzeW5jLnNldEltbWVkaWF0ZShjYXJnby5wcm9jZXNzKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBwcm9jZXNzOiBmdW5jdGlvbiBwcm9jZXNzKCkge1xuICAgICAgICAgICAgICAgIGlmICh3b3JraW5nKSByZXR1cm47XG4gICAgICAgICAgICAgICAgaWYgKHRhc2tzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICBpZihjYXJnby5kcmFpbiAmJiAhY2FyZ28uZHJhaW5lZCkgY2FyZ28uZHJhaW4oKTtcbiAgICAgICAgICAgICAgICAgICAgY2FyZ28uZHJhaW5lZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB2YXIgdHMgPSB0eXBlb2YgcGF5bG9hZCA9PT0gJ251bWJlcidcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IHRhc2tzLnNwbGljZSgwLCBwYXlsb2FkKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogdGFza3Muc3BsaWNlKDAsIHRhc2tzLmxlbmd0aCk7XG5cbiAgICAgICAgICAgICAgICB2YXIgZHMgPSBfbWFwKHRzLCBmdW5jdGlvbiAodGFzaykge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGFzay5kYXRhO1xuICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgaWYoY2FyZ28uZW1wdHkpIGNhcmdvLmVtcHR5KCk7XG4gICAgICAgICAgICAgICAgd29ya2luZyA9IHRydWU7XG4gICAgICAgICAgICAgICAgd29ya2VyKGRzLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIHdvcmtpbmcgPSBmYWxzZTtcblxuICAgICAgICAgICAgICAgICAgICB2YXIgYXJncyA9IGFyZ3VtZW50cztcbiAgICAgICAgICAgICAgICAgICAgX2VhY2godHMsIGZ1bmN0aW9uIChkYXRhKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZGF0YS5jYWxsYmFjaykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEuY2FsbGJhY2suYXBwbHkobnVsbCwgYXJncyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgICAgIHByb2Nlc3MoKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBsZW5ndGg6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGFza3MubGVuZ3RoO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHJ1bm5pbmc6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gd29ya2luZztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIGNhcmdvO1xuICAgIH07XG5cbiAgICB2YXIgX2NvbnNvbGVfZm4gPSBmdW5jdGlvbiAobmFtZSkge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKGZuKSB7XG4gICAgICAgICAgICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMSk7XG4gICAgICAgICAgICBmbi5hcHBseShudWxsLCBhcmdzLmNvbmNhdChbZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgICAgIHZhciBhcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKTtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGNvbnNvbGUgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb25zb2xlLmVycm9yKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihlcnIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKGNvbnNvbGVbbmFtZV0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIF9lYWNoKGFyZ3MsIGZ1bmN0aW9uICh4KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZVtuYW1lXSh4KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfV0pKTtcbiAgICAgICAgfTtcbiAgICB9O1xuICAgIGFzeW5jLmxvZyA9IF9jb25zb2xlX2ZuKCdsb2cnKTtcbiAgICBhc3luYy5kaXIgPSBfY29uc29sZV9mbignZGlyJyk7XG4gICAgLyphc3luYy5pbmZvID0gX2NvbnNvbGVfZm4oJ2luZm8nKTtcbiAgICBhc3luYy53YXJuID0gX2NvbnNvbGVfZm4oJ3dhcm4nKTtcbiAgICBhc3luYy5lcnJvciA9IF9jb25zb2xlX2ZuKCdlcnJvcicpOyovXG5cbiAgICBhc3luYy5tZW1vaXplID0gZnVuY3Rpb24gKGZuLCBoYXNoZXIpIHtcbiAgICAgICAgdmFyIG1lbW8gPSB7fTtcbiAgICAgICAgdmFyIHF1ZXVlcyA9IHt9O1xuICAgICAgICBoYXNoZXIgPSBoYXNoZXIgfHwgZnVuY3Rpb24gKHgpIHtcbiAgICAgICAgICAgIHJldHVybiB4O1xuICAgICAgICB9O1xuICAgICAgICB2YXIgbWVtb2l6ZWQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7XG4gICAgICAgICAgICB2YXIgY2FsbGJhY2sgPSBhcmdzLnBvcCgpO1xuICAgICAgICAgICAgdmFyIGtleSA9IGhhc2hlci5hcHBseShudWxsLCBhcmdzKTtcbiAgICAgICAgICAgIGlmIChrZXkgaW4gbWVtbykge1xuICAgICAgICAgICAgICAgIGFzeW5jLm5leHRUaWNrKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2suYXBwbHkobnVsbCwgbWVtb1trZXldKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGtleSBpbiBxdWV1ZXMpIHtcbiAgICAgICAgICAgICAgICBxdWV1ZXNba2V5XS5wdXNoKGNhbGxiYWNrKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHF1ZXVlc1trZXldID0gW2NhbGxiYWNrXTtcbiAgICAgICAgICAgICAgICBmbi5hcHBseShudWxsLCBhcmdzLmNvbmNhdChbZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICBtZW1vW2tleV0gPSBhcmd1bWVudHM7XG4gICAgICAgICAgICAgICAgICAgIHZhciBxID0gcXVldWVzW2tleV07XG4gICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBxdWV1ZXNba2V5XTtcbiAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDAsIGwgPSBxLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICAgIHFbaV0uYXBwbHkobnVsbCwgYXJndW1lbnRzKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1dKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIG1lbW9pemVkLm1lbW8gPSBtZW1vO1xuICAgICAgICBtZW1vaXplZC51bm1lbW9pemVkID0gZm47XG4gICAgICAgIHJldHVybiBtZW1vaXplZDtcbiAgICB9O1xuXG4gICAgYXN5bmMudW5tZW1vaXplID0gZnVuY3Rpb24gKGZuKSB7XG4gICAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gKGZuLnVubWVtb2l6ZWQgfHwgZm4pLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7XG4gICAgICB9O1xuICAgIH07XG5cbiAgICBhc3luYy50aW1lcyA9IGZ1bmN0aW9uIChjb3VudCwgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgIHZhciBjb3VudGVyID0gW107XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY291bnQ7IGkrKykge1xuICAgICAgICAgICAgY291bnRlci5wdXNoKGkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBhc3luYy5tYXAoY291bnRlciwgaXRlcmF0b3IsIGNhbGxiYWNrKTtcbiAgICB9O1xuXG4gICAgYXN5bmMudGltZXNTZXJpZXMgPSBmdW5jdGlvbiAoY291bnQsIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICB2YXIgY291bnRlciA9IFtdO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNvdW50OyBpKyspIHtcbiAgICAgICAgICAgIGNvdW50ZXIucHVzaChpKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYXN5bmMubWFwU2VyaWVzKGNvdW50ZXIsIGl0ZXJhdG9yLCBjYWxsYmFjayk7XG4gICAgfTtcblxuICAgIGFzeW5jLnNlcSA9IGZ1bmN0aW9uICgvKiBmdW5jdGlvbnMuLi4gKi8pIHtcbiAgICAgICAgdmFyIGZucyA9IGFyZ3VtZW50cztcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHZhciB0aGF0ID0gdGhpcztcbiAgICAgICAgICAgIHZhciBhcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKTtcbiAgICAgICAgICAgIHZhciBjYWxsYmFjayA9IGFyZ3MucG9wKCk7XG4gICAgICAgICAgICBhc3luYy5yZWR1Y2UoZm5zLCBhcmdzLCBmdW5jdGlvbiAobmV3YXJncywgZm4sIGNiKSB7XG4gICAgICAgICAgICAgICAgZm4uYXBwbHkodGhhdCwgbmV3YXJncy5jb25jYXQoW2Z1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGVyciA9IGFyZ3VtZW50c1swXTtcbiAgICAgICAgICAgICAgICAgICAgdmFyIG5leHRhcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKTtcbiAgICAgICAgICAgICAgICAgICAgY2IoZXJyLCBuZXh0YXJncyk7XG4gICAgICAgICAgICAgICAgfV0pKVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGZ1bmN0aW9uIChlcnIsIHJlc3VsdHMpIHtcbiAgICAgICAgICAgICAgICBjYWxsYmFjay5hcHBseSh0aGF0LCBbZXJyXS5jb25jYXQocmVzdWx0cykpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH07XG4gICAgfTtcblxuICAgIGFzeW5jLmNvbXBvc2UgPSBmdW5jdGlvbiAoLyogZnVuY3Rpb25zLi4uICovKSB7XG4gICAgICByZXR1cm4gYXN5bmMuc2VxLmFwcGx5KG51bGwsIEFycmF5LnByb3RvdHlwZS5yZXZlcnNlLmNhbGwoYXJndW1lbnRzKSk7XG4gICAgfTtcblxuICAgIHZhciBfYXBwbHlFYWNoID0gZnVuY3Rpb24gKGVhY2hmbiwgZm5zIC8qYXJncy4uLiovKSB7XG4gICAgICAgIHZhciBnbyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHZhciB0aGF0ID0gdGhpcztcbiAgICAgICAgICAgIHZhciBhcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKTtcbiAgICAgICAgICAgIHZhciBjYWxsYmFjayA9IGFyZ3MucG9wKCk7XG4gICAgICAgICAgICByZXR1cm4gZWFjaGZuKGZucywgZnVuY3Rpb24gKGZuLCBjYikge1xuICAgICAgICAgICAgICAgIGZuLmFwcGx5KHRoYXQsIGFyZ3MuY29uY2F0KFtjYl0pKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjYWxsYmFjayk7XG4gICAgICAgIH07XG4gICAgICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID4gMikge1xuICAgICAgICAgICAgdmFyIGFyZ3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsIDIpO1xuICAgICAgICAgICAgcmV0dXJuIGdvLmFwcGx5KHRoaXMsIGFyZ3MpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIGdvO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBhc3luYy5hcHBseUVhY2ggPSBkb1BhcmFsbGVsKF9hcHBseUVhY2gpO1xuICAgIGFzeW5jLmFwcGx5RWFjaFNlcmllcyA9IGRvU2VyaWVzKF9hcHBseUVhY2gpO1xuXG4gICAgYXN5bmMuZm9yZXZlciA9IGZ1bmN0aW9uIChmbiwgY2FsbGJhY2spIHtcbiAgICAgICAgZnVuY3Rpb24gbmV4dChlcnIpIHtcbiAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICBpZiAoY2FsbGJhY2spIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRocm93IGVycjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZuKG5leHQpO1xuICAgICAgICB9XG4gICAgICAgIG5leHQoKTtcbiAgICB9O1xuXG4gICAgLy8gTm9kZS5qc1xuICAgIGlmICh0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJyAmJiBtb2R1bGUuZXhwb3J0cykge1xuICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IGFzeW5jO1xuICAgIH1cbiAgICAvLyBBTUQgLyBSZXF1aXJlSlNcbiAgICBlbHNlIGlmICh0eXBlb2YgZGVmaW5lICE9PSAndW5kZWZpbmVkJyAmJiBkZWZpbmUuYW1kKSB7XG4gICAgICAgIGRlZmluZShbXSwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIGFzeW5jO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgLy8gaW5jbHVkZWQgZGlyZWN0bHkgdmlhIDxzY3JpcHQ+IHRhZ1xuICAgIGVsc2Uge1xuICAgICAgICByb290LmFzeW5jID0gYXN5bmM7XG4gICAgfVxuXG59KCkpO1xuIiwidmFyIGFzeW5jICAgICAgID0gcmVxdWlyZSgnYXN5bmMnKSxcbiAgICB1cmxQYXJzZXIgICA9IHJlcXVpcmUoJ3VybCcpLFxuICAgIFJlc291cmNlICAgID0gcmVxdWlyZSgnLi9SZXNvdXJjZScpLFxuICAgIEV2ZW50RW1pdHRlciA9IHJlcXVpcmUoJ2V2ZW50ZW1pdHRlcjMnKTtcblxuLyoqXG4gKiBNYW5hZ2VzIHRoZSBzdGF0ZSBhbmQgbG9hZGluZyBvZiBtdWx0aXBsZSByZXNvdXJjZXMgdG8gbG9hZC5cbiAqXG4gKiBAY2xhc3NcbiAqIEBwYXJhbSBbYmFzZVVybD0nJ10ge3N0cmluZ30gVGhlIGJhc2UgdXJsIGZvciBhbGwgcmVzb3VyY2VzIGxvYWRlZCBieSB0aGlzIGxvYWRlci5cbiAqIEBwYXJhbSBbY29uY3VycmVuY3k9MTBdIHtudW1iZXJ9IFRoZSBudW1iZXIgb2YgcmVzb3VyY2VzIHRvIGxvYWQgY29uY3VycmVudGx5LlxuICovXG5mdW5jdGlvbiBMb2FkZXIoYmFzZVVybCwgY29uY3VycmVuY3kpIHtcbiAgICBFdmVudEVtaXR0ZXIuY2FsbCh0aGlzKTtcblxuICAgIGNvbmN1cnJlbmN5ID0gY29uY3VycmVuY3kgfHwgMTA7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYmFzZSB1cmwgZm9yIGFsbCByZXNvdXJjZXMgbG9hZGVkIGJ5IHRoaXMgbG9hZGVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7c3RyaW5nfVxuICAgICAqL1xuICAgIHRoaXMuYmFzZVVybCA9IGJhc2VVcmwgfHwgJyc7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgcHJvZ3Jlc3MgcGVyY2VudCBvZiB0aGUgbG9hZGVyIGdvaW5nIHRocm91Z2ggdGhlIHF1ZXVlLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMucHJvZ3Jlc3MgPSAwO1xuXG4gICAgLyoqXG4gICAgICogTG9hZGluZyBzdGF0ZSBvZiB0aGUgbG9hZGVyLCB0cnVlIGlmIGl0IGlzIGN1cnJlbnRseSBsb2FkaW5nIHJlc291cmNlcy5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICovXG4gICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgcGVyY2VudGFnZSBvZiB0b3RhbCBwcm9ncmVzcyB0aGF0IGEgc2luZ2xlIHJlc291cmNlIHJlcHJlc2VudHMuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy5fcHJvZ3Jlc3NDaHVuayA9IDA7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgbWlkZGxld2FyZSB0byBydW4gYmVmb3JlIGxvYWRpbmcgZWFjaCByZXNvdXJjZS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Z1bmN0aW9uW119XG4gICAgICovXG4gICAgdGhpcy5fYmVmb3JlTWlkZGxld2FyZSA9IFtdO1xuXG4gICAgLyoqXG4gICAgICogVGhlIG1pZGRsZXdhcmUgdG8gcnVuIGFmdGVyIGxvYWRpbmcgZWFjaCByZXNvdXJjZS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Z1bmN0aW9uW119XG4gICAgICovXG4gICAgdGhpcy5fYWZ0ZXJNaWRkbGV3YXJlID0gW107XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYF9sb2FkUmVzb3VyY2VgIGZ1bmN0aW9uIGJvdW5kIHdpdGggdGhpcyBvYmplY3QgY29udGV4dC5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQG1lbWJlciB7ZnVuY3Rpb259XG4gICAgICovXG4gICAgdGhpcy5fYm91bmRMb2FkUmVzb3VyY2UgPSB0aGlzLl9sb2FkUmVzb3VyY2UuYmluZCh0aGlzKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBgX29uTG9hZGAgZnVuY3Rpb24gYm91bmQgd2l0aCB0aGlzIG9iamVjdCBjb250ZXh0LlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAbWVtYmVyIHtmdW5jdGlvbn1cbiAgICAgKi9cbiAgICB0aGlzLl9ib3VuZE9uTG9hZCA9IHRoaXMuX29uTG9hZC5iaW5kKHRoaXMpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHJlc291cmNlIGJ1ZmZlciB0aGF0IGZpbGxzIHVudGlsIGBsb2FkYCBpcyBjYWxsZWQgdG8gc3RhcnQgbG9hZGluZyByZXNvdXJjZXMuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBtZW1iZXIge1Jlc291cmNlW119XG4gICAgICovXG4gICAgdGhpcy5fYnVmZmVyID0gW107XG5cbiAgICAvKipcbiAgICAgKiBVc2VkIHRvIHRyYWNrIGxvYWQgY29tcGxldGlvbi5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMuX251bVRvTG9hZCA9IDA7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgcmVzb3VyY2VzIHdhaXRpbmcgdG8gYmUgbG9hZGVkLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAbWVtYmVyIHtSZXNvdXJjZVtdfVxuICAgICAqL1xuICAgIHRoaXMuX3F1ZXVlID0gYXN5bmMucXVldWUodGhpcy5fYm91bmRMb2FkUmVzb3VyY2UsIGNvbmN1cnJlbmN5KTtcblxuICAgIC8qKlxuICAgICAqIEFsbCB0aGUgcmVzb3VyY2VzIGZvciB0aGlzIGxvYWRlciBrZXllZCBieSBuYW1lLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7b2JqZWN0PHN0cmluZywgUmVzb3VyY2U+fVxuICAgICAqL1xuICAgIHRoaXMucmVzb3VyY2VzID0ge307XG5cbiAgICAvKipcbiAgICAgKiBFbWl0dGVkIG9uY2UgcGVyIGxvYWRlZCBvciBlcnJvcmVkIHJlc291cmNlLlxuICAgICAqXG4gICAgICogQGV2ZW50IHByb2dyZXNzXG4gICAgICogQG1lbWJlcm9mIExvYWRlciNcbiAgICAgKi9cblxuICAgIC8qKlxuICAgICAqIEVtaXR0ZWQgb25jZSBwZXIgZXJyb3JlZCByZXNvdXJjZS5cbiAgICAgKlxuICAgICAqIEBldmVudCBlcnJvclxuICAgICAqIEBtZW1iZXJvZiBMb2FkZXIjXG4gICAgICovXG5cbiAgICAvKipcbiAgICAgKiBFbWl0dGVkIG9uY2UgcGVyIGxvYWRlZCByZXNvdXJjZS5cbiAgICAgKlxuICAgICAqIEBldmVudCBsb2FkXG4gICAgICogQG1lbWJlcm9mIExvYWRlciNcbiAgICAgKi9cblxuICAgIC8qKlxuICAgICAqIEVtaXR0ZWQgd2hlbiB0aGUgbG9hZGVyIGJlZ2lucyB0byBwcm9jZXNzIHRoZSBxdWV1ZS5cbiAgICAgKlxuICAgICAqIEBldmVudCBzdGFydFxuICAgICAqIEBtZW1iZXJvZiBMb2FkZXIjXG4gICAgICovXG5cbiAgICAvKipcbiAgICAgKiBFbWl0dGVkIHdoZW4gdGhlIHF1ZXVlZCByZXNvdXJjZXMgYWxsIGxvYWQuXG4gICAgICpcbiAgICAgKiBAZXZlbnQgY29tcGxldGVcbiAgICAgKiBAbWVtYmVyb2YgTG9hZGVyI1xuICAgICAqL1xufVxuXG5Mb2FkZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShFdmVudEVtaXR0ZXIucHJvdG90eXBlKTtcbkxvYWRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBMb2FkZXI7XG5tb2R1bGUuZXhwb3J0cyA9IExvYWRlcjtcblxuLyoqXG4gKiBBZGRzIGEgcmVzb3VyY2UgKG9yIG11bHRpcGxlIHJlc291cmNlcykgdG8gdGhlIGxvYWRlciBxdWV1ZS5cbiAqXG4gKiBUaGlzIGZ1bmN0aW9uIGNhbiB0YWtlIGEgd2lkZSB2YXJpZXR5IG9mIGRpZmZlcmVudCBwYXJhbWV0ZXJzLiBUaGUgb25seSB0aGluZyB0aGF0IGlzIGFsd2F5c1xuICogcmVxdWlyZWQgdGhlIHVybCB0byBsb2FkLiBBbGwgdGhlIGZvbGxvd2luZyB3aWxsIHdvcms6XG4gKlxuICogYGBganNcbiAqIGxvYWRlclxuICogICAgIC8vIG5vcm1hbCBwYXJhbSBzeW50YXhcbiAqICAgICAuYWRkKCdrZXknLCAnaHR0cDovLy4uLicsIGZ1bmN0aW9uICgpIHt9KVxuICogICAgIC5hZGQoJ2h0dHA6Ly8uLi4nLCBmdW5jdGlvbiAoKSB7fSlcbiAqICAgICAuYWRkKCdodHRwOi8vLi4uJylcbiAqXG4gKiAgICAgLy8gb2JqZWN0IHN5bnRheFxuICogICAgIC5hZGQoe1xuICogICAgICAgICBuYW1lOiAna2V5MicsXG4gKiAgICAgICAgIHVybDogJ2h0dHA6Ly8uLi4nXG4gKiAgICAgfSwgZnVuY3Rpb24gKCkge30pXG4gKiAgICAgLmFkZCh7XG4gKiAgICAgICAgIHVybDogJ2h0dHA6Ly8uLi4nXG4gKiAgICAgfSwgZnVuY3Rpb24gKCkge30pXG4gKiAgICAgLmFkZCh7XG4gKiAgICAgICAgIG5hbWU6ICdrZXkzJyxcbiAqICAgICAgICAgdXJsOiAnaHR0cDovLy4uLidcbiAqICAgICAgICAgb25Db21wbGV0ZTogZnVuY3Rpb24gKCkge31cbiAqICAgICB9KVxuICogICAgIC5hZGQoe1xuICogICAgICAgICB1cmw6ICdodHRwczovLy4uLicsXG4gKiAgICAgICAgIG9uQ29tcGxldGU6IGZ1bmN0aW9uICgpIHt9LFxuICogICAgICAgICBjcm9zc09yaWdpbjogdHJ1ZVxuICogICAgIH0pXG4gKlxuICogICAgIC8vIHlvdSBjYW4gYWxzbyBwYXNzIGFuIGFycmF5IG9mIG9iamVjdHMgb3IgdXJscyBvciBib3RoXG4gKiAgICAgLmFkZChbXG4gKiAgICAgICAgIHsgbmFtZTogJ2tleTQnLCB1cmw6ICdodHRwOi8vLi4uJywgb25Db21wbGV0ZTogZnVuY3Rpb24gKCkge30gfSxcbiAqICAgICAgICAgeyB1cmw6ICdodHRwOi8vLi4uJywgb25Db21wbGV0ZTogZnVuY3Rpb24gKCkge30gfSxcbiAqICAgICAgICAgJ2h0dHA6Ly8uLi4nXG4gKiAgICAgXSk7XG4gKiBgYGBcbiAqXG4gKiBAYWxpYXMgZW5xdWV1ZVxuICogQHBhcmFtIFtuYW1lXSB7c3RyaW5nfSBUaGUgbmFtZSBvZiB0aGUgcmVzb3VyY2UgdG8gbG9hZCwgaWYgbm90IHBhc3NlZCB0aGUgdXJsIGlzIHVzZWQuXG4gKiBAcGFyYW0gdXJsIHtzdHJpbmd9IFRoZSB1cmwgZm9yIHRoaXMgcmVzb3VyY2UsIHJlbGF0aXZlIHRvIHRoZSBiYXNlVXJsIG9mIHRoaXMgbG9hZGVyLlxuICogQHBhcmFtIFtvcHRpb25zXSB7b2JqZWN0fSBUaGUgb3B0aW9ucyBmb3IgdGhlIGxvYWQuXG4gKiBAcGFyYW0gW29wdGlvbnMuY3Jvc3NPcmlnaW5dIHtib29sZWFufSBJcyB0aGlzIHJlcXVlc3QgY3Jvc3Mtb3JpZ2luPyBEZWZhdWx0IGlzIHRvIGRldGVybWluZSBhdXRvbWF0aWNhbGx5LlxuICogQHBhcmFtIFtvcHRpb25zLmxvYWRUeXBlPVJlc291cmNlLkxPQURfVFlQRS5YSFJdIHtSZXNvdXJjZS5YSFJfTE9BRF9UWVBFfSBIb3cgc2hvdWxkIHRoaXMgcmVzb3VyY2UgYmUgbG9hZGVkP1xuICogQHBhcmFtIFtvcHRpb25zLnhoclR5cGU9UmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuREVGQVVMVF0ge1Jlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFfSBIb3cgc2hvdWxkIHRoZSBkYXRhIGJlaW5nXG4gKiAgICAgIGxvYWRlZCBiZSBpbnRlcnByZXRlZCB3aGVuIHVzaW5nIFhIUj9cbiAqIEBwYXJhbSBbY2FsbGJhY2tdIHtmdW5jdGlvbn0gRnVuY3Rpb24gdG8gY2FsbCB3aGVuIHRoaXMgc3BlY2lmaWMgcmVzb3VyY2UgY29tcGxldGVzIGxvYWRpbmcuXG4gKiBAcmV0dXJuIHtMb2FkZXJ9XG4gKi9cbkxvYWRlci5wcm90b3R5cGUuYWRkID0gTG9hZGVyLnByb3RvdHlwZS5lbnF1ZXVlID0gZnVuY3Rpb24gKG5hbWUsIHVybCwgb3B0aW9ucywgY2IpIHtcbiAgICAvLyBzcGVjaWFsIGNhc2Ugb2YgYW4gYXJyYXkgb2Ygb2JqZWN0cyBvciB1cmxzXG4gICAgaWYgKEFycmF5LmlzQXJyYXkobmFtZSkpIHtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBuYW1lLmxlbmd0aDsgKytpKSB7XG4gICAgICAgICAgICB0aGlzLmFkZChuYW1lW2ldKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIC8vIGlmIGFuIG9iamVjdCBpcyBwYXNzZWQgaW5zdGVhZCBvZiBwYXJhbXNcbiAgICBpZiAodHlwZW9mIG5hbWUgPT09ICdvYmplY3QnKSB7XG4gICAgICAgIGNiID0gdXJsIHx8IG5hbWUuY2FsbGJhY2sgfHwgbmFtZS5vbkNvbXBsZXRlO1xuICAgICAgICBvcHRpb25zID0gbmFtZTtcbiAgICAgICAgdXJsID0gbmFtZS51cmw7XG4gICAgICAgIG5hbWUgPSBuYW1lLm5hbWUgfHwgbmFtZS5rZXkgfHwgbmFtZS51cmw7XG4gICAgfVxuXG4gICAgLy8gY2FzZSB3aGVyZSBubyBuYW1lIGlzIHBhc3NlZCBzaGlmdCBhbGwgYXJncyBvdmVyIGJ5IG9uZS5cbiAgICBpZiAodHlwZW9mIHVybCAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgY2IgPSBvcHRpb25zO1xuICAgICAgICBvcHRpb25zID0gdXJsO1xuICAgICAgICB1cmwgPSBuYW1lO1xuICAgIH1cblxuICAgIC8vIG5vdyB0aGF0IHdlIHNoaWZ0ZWQgbWFrZSBzdXJlIHdlIGhhdmUgYSBwcm9wZXIgdXJsLlxuICAgIGlmICh0eXBlb2YgdXJsICE9PSAnc3RyaW5nJykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ05vIHVybCBwYXNzZWQgdG8gYWRkIHJlc291cmNlIHRvIGxvYWRlci4nKTtcbiAgICB9XG5cbiAgICAvLyBvcHRpb25zIGFyZSBvcHRpb25hbCBzbyBwZW9wbGUgbWlnaHQgcGFzcyBhIGZ1bmN0aW9uIGFuZCBubyBvcHRpb25zXG4gICAgaWYgKHR5cGVvZiBvcHRpb25zID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIGNiID0gb3B0aW9ucztcbiAgICAgICAgb3B0aW9ucyA9IG51bGw7XG4gICAgfVxuXG4gICAgLy8gY2hlY2sgaWYgcmVzb3VyY2UgYWxyZWFkeSBleGlzdHMuXG4gICAgaWYgKHRoaXMucmVzb3VyY2VzW25hbWVdKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignUmVzb3VyY2Ugd2l0aCBuYW1lIFwiJyArIG5hbWUgKyAnXCIgYWxyZWFkeSBleGlzdHMuJyk7XG4gICAgfVxuXG4gICAgLy8gYWRkIGJhc2UgdXJsIGlmIHRoaXMgaXNuJ3QgYW4gYWJzb2x1dGUgdXJsXG4gICAgdXJsID0gdGhpcy5faGFuZGxlQmFzZVVybCh1cmwpO1xuXG4gICAgLy8gY3JlYXRlIHRoZSBzdG9yZSB0aGUgcmVzb3VyY2VcbiAgICB0aGlzLnJlc291cmNlc1tuYW1lXSA9IG5ldyBSZXNvdXJjZShuYW1lLCB1cmwsIG9wdGlvbnMpO1xuXG4gICAgaWYgKHR5cGVvZiBjYiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB0aGlzLnJlc291cmNlc1tuYW1lXS5vbmNlKCdhZnRlck1pZGRsZXdhcmUnLCBjYik7XG4gICAgfVxuXG4gICAgdGhpcy5fbnVtVG9Mb2FkKys7XG5cbiAgICAvLyBpZiBhbHJlYWR5IGxvYWRpbmcgYWRkIGl0IHRvIHRoZSB3b3JrZXIgcXVldWVcbiAgICBpZiAodGhpcy5fcXVldWUuc3RhcnRlZCkge1xuICAgICAgICB0aGlzLl9xdWV1ZS5wdXNoKHRoaXMucmVzb3VyY2VzW25hbWVdKTtcbiAgICAgICAgdGhpcy5fcHJvZ3Jlc3NDaHVuayA9ICgxMDAgLSB0aGlzLnByb2dyZXNzKSAvICh0aGlzLl9xdWV1ZS5sZW5ndGgoKSArIHRoaXMuX3F1ZXVlLnJ1bm5pbmcoKSk7XG4gICAgfVxuICAgIC8vIG90aGVyd2lzZSBidWZmZXIgaXQgdG8gYmUgYWRkZWQgdG8gdGhlIHF1ZXVlIGxhdGVyXG4gICAgZWxzZSB7XG4gICAgICAgIHRoaXMuX2J1ZmZlci5wdXNoKHRoaXMucmVzb3VyY2VzW25hbWVdKTtcbiAgICAgICAgdGhpcy5fcHJvZ3Jlc3NDaHVuayA9IDEwMCAvIHRoaXMuX2J1ZmZlci5sZW5ndGg7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG5Mb2FkZXIucHJvdG90eXBlLl9oYW5kbGVCYXNlVXJsID0gZnVuY3Rpb24gKHVybCkge1xuICAgIHZhciBwYXJzZWRVcmwgPSB1cmxQYXJzZXIucGFyc2UodXJsKTtcblxuICAgIC8vIGFic29sdXRlIHVybCwganVzdCB1c2UgaXQgYXMgaXMuXG4gICAgaWYgKHBhcnNlZFVybC5wcm90b2NvbCB8fCBwYXJzZWRVcmwucGF0aG5hbWUuaW5kZXhPZignLy8nKSA9PT0gMCkge1xuICAgICAgICByZXR1cm4gdXJsO1xuICAgIH1cblxuICAgIC8vIGlmIGJhc2VVcmwgZG9lc24ndCBlbmQgaW4gc2xhc2ggYW5kIHVybCBkb2Vzbid0IHN0YXJ0IHdpdGggc2xhc2gsIHRoZW4gYWRkIGEgc2xhc2ggaW5iZXR3ZWVuXG4gICAgaWYgKFxuICAgICAgICB0aGlzLmJhc2VVcmwubGVuZ3RoICYmXG4gICAgICAgIHRoaXMuYmFzZVVybC5sYXN0SW5kZXhPZignLycpICE9PSB0aGlzLmJhc2VVcmwubGVuZ3RoIC0gMSAmJlxuICAgICAgICB1cmwuY2hhckF0KDApICE9PSAnLydcbiAgICApIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYmFzZVVybCArICcvJyArIHVybDtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHJldHVybiB0aGlzLmJhc2VVcmwgKyB1cmw7XG4gICAgfVxufTtcblxuXG4vKipcbiAqIFNldHMgdXAgYSBtaWRkbGV3YXJlIGZ1bmN0aW9uIHRoYXQgd2lsbCBydW4gKmJlZm9yZSogdGhlXG4gKiByZXNvdXJjZSBpcyBsb2FkZWQuXG4gKlxuICogQGFsaWFzIHByZVxuICogQHBhcmFtIG1pZGRsZXdhcmUge2Z1bmN0aW9ufSBUaGUgbWlkZGxld2FyZSBmdW5jdGlvbiB0byByZWdpc3Rlci5cbiAqIEByZXR1cm4ge0xvYWRlcn1cbiAqL1xuTG9hZGVyLnByb3RvdHlwZS5iZWZvcmUgPSBMb2FkZXIucHJvdG90eXBlLnByZSA9IGZ1bmN0aW9uIChmbikge1xuICAgIHRoaXMuX2JlZm9yZU1pZGRsZXdhcmUucHVzaChmbik7XG5cbiAgICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogU2V0cyB1cCBhIG1pZGRsZXdhcmUgZnVuY3Rpb24gdGhhdCB3aWxsIHJ1biAqYWZ0ZXIqIHRoZVxuICogcmVzb3VyY2UgaXMgbG9hZGVkLlxuICpcbiAqIEBhbGlhcyB1c2VcbiAqIEBwYXJhbSBtaWRkbGV3YXJlIHtmdW5jdGlvbn0gVGhlIG1pZGRsZXdhcmUgZnVuY3Rpb24gdG8gcmVnaXN0ZXIuXG4gKiBAcmV0dXJuIHtMb2FkZXJ9XG4gKi9cbkxvYWRlci5wcm90b3R5cGUuYWZ0ZXIgPSBMb2FkZXIucHJvdG90eXBlLnVzZSA9IGZ1bmN0aW9uIChmbikge1xuICAgIHRoaXMuX2FmdGVyTWlkZGxld2FyZS5wdXNoKGZuKTtcblxuICAgIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBSZXNldHMgdGhlIHF1ZXVlIG9mIHRoZSBsb2FkZXIgdG8gcHJlcGFyZSBmb3IgYSBuZXcgbG9hZC5cbiAqXG4gKiBAcmV0dXJuIHtMb2FkZXJ9XG4gKi9cbkxvYWRlci5wcm90b3R5cGUucmVzZXQgPSBmdW5jdGlvbiAoKSB7XG4gICAgLy8gdGhpcy5iYXNlVXJsID0gYmFzZVVybCB8fCAnJztcblxuICAgIHRoaXMucHJvZ3Jlc3MgPSAwO1xuXG4gICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XG5cbiAgICB0aGlzLl9wcm9ncmVzc0NodW5rID0gMDtcblxuICAgIC8vIHRoaXMuX2JlZm9yZU1pZGRsZXdhcmUubGVuZ3RoID0gMDtcbiAgICAvLyB0aGlzLl9hZnRlck1pZGRsZXdhcmUubGVuZ3RoID0gMDtcblxuICAgIHRoaXMuX2J1ZmZlci5sZW5ndGggPSAwO1xuXG4gICAgdGhpcy5fbnVtVG9Mb2FkID0gMDtcblxuICAgIHRoaXMuX3F1ZXVlLmtpbGwoKTtcbiAgICB0aGlzLl9xdWV1ZS5zdGFydGVkID0gZmFsc2U7XG5cbiAgICB0aGlzLnJlc291cmNlcyA9IHt9O1xufTtcblxuLyoqXG4gKiBTdGFydHMgbG9hZGluZyB0aGUgcXVldWVkIHJlc291cmNlcy5cbiAqXG4gKiBAZmlyZXMgc3RhcnRcbiAqIEBwYXJhbSBbY2FsbGJhY2tdIHtmdW5jdGlvbn0gT3B0aW9uYWwgY2FsbGJhY2sgdGhhdCB3aWxsIGJlIGJvdW5kIHRvIHRoZSBgY29tcGxldGVgIGV2ZW50LlxuICogQHJldHVybiB7TG9hZGVyfVxuICovXG5Mb2FkZXIucHJvdG90eXBlLmxvYWQgPSBmdW5jdGlvbiAoY2IpIHtcbiAgICAvLyByZWdpc3RlciBjb21wbGV0ZSBjYWxsYmFjayBpZiB0aGV5IHBhc3Mgb25lXG4gICAgaWYgKHR5cGVvZiBjYiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB0aGlzLm9uY2UoJ2NvbXBsZXRlJywgY2IpO1xuICAgIH1cblxuICAgIC8vIGlmIHRoZSBxdWV1ZSBoYXMgYWxyZWFkeSBzdGFydGVkIHdlIGFyZSBkb25lIGhlcmVcbiAgICBpZiAodGhpcy5fcXVldWUuc3RhcnRlZCkge1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICAvLyBub3RpZnkgb2Ygc3RhcnRcbiAgICB0aGlzLmVtaXQoJ3N0YXJ0JywgdGhpcyk7XG5cbiAgICAvLyBzdGFydCB0aGUgaW50ZXJuYWwgcXVldWVcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuX2J1ZmZlci5sZW5ndGg7ICsraSkge1xuICAgICAgICB0aGlzLl9xdWV1ZS5wdXNoKHRoaXMuX2J1ZmZlcltpXSk7XG4gICAgfVxuXG4gICAgLy8gZW1wdHkgdGhlIGJ1ZmZlclxuICAgIHRoaXMuX2J1ZmZlci5sZW5ndGggPSAwO1xuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIExvYWRzIGEgc2luZ2xlIHJlc291cmNlLlxuICpcbiAqIEBmaXJlcyBwcm9ncmVzc1xuICogQHByaXZhdGVcbiAqL1xuTG9hZGVyLnByb3RvdHlwZS5fbG9hZFJlc291cmNlID0gZnVuY3Rpb24gKHJlc291cmNlLCBkZXF1ZXVlKSB7XG4gICAgdmFyIHNlbGYgPSB0aGlzO1xuXG4gICAgcmVzb3VyY2UuX2RlcXVldWUgPSBkZXF1ZXVlO1xuXG4gICAgdGhpcy5fcnVuTWlkZGxld2FyZShyZXNvdXJjZSwgdGhpcy5fYmVmb3JlTWlkZGxld2FyZSwgZnVuY3Rpb24gKCkge1xuICAgICAgICAvLyByZXNvdXJjZS5vbigncHJvZ3Jlc3MnLCBzZWxmLmVtaXQuYmluZChzZWxmLCAncHJvZ3Jlc3MnKSk7XG5cbiAgICAgICAgcmVzb3VyY2UubG9hZChzZWxmLl9ib3VuZE9uTG9hZCk7XG4gICAgfSk7XG59O1xuXG4vKipcbiAqIENhbGxlZCBvbmNlIGVhY2ggcmVzb3VyY2UgaGFzIGxvYWRlZC5cbiAqXG4gKiBAZmlyZXMgY29tcGxldGVcbiAqIEBwcml2YXRlXG4gKi9cbkxvYWRlci5wcm90b3R5cGUuX29uQ29tcGxldGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgdGhpcy5lbWl0KCdjb21wbGV0ZScsIHRoaXMsIHRoaXMucmVzb3VyY2VzKTtcbn07XG5cbi8qKlxuICogQ2FsbGVkIGVhY2ggdGltZSBhIHJlc291cmNlcyBpcyBsb2FkZWQuXG4gKlxuICogQGZpcmVzIHByb2dyZXNzXG4gKiBAZmlyZXMgZXJyb3JcbiAqIEBmaXJlcyBsb2FkXG4gKiBAcHJpdmF0ZVxuICovXG5Mb2FkZXIucHJvdG90eXBlLl9vbkxvYWQgPSBmdW5jdGlvbiAocmVzb3VyY2UpIHtcbiAgICB0aGlzLnByb2dyZXNzICs9IHRoaXMuX3Byb2dyZXNzQ2h1bms7XG5cbiAgICB0aGlzLmVtaXQoJ3Byb2dyZXNzJywgdGhpcywgcmVzb3VyY2UpO1xuXG4gICAgLy8gcnVuIG1pZGRsZXdhcmUsIHRoaXMgKm11c3QqIGhhcHBlbiBiZWZvcmUgZGVxdWV1ZSBzbyBzdWItYXNzZXRzIGdldCBhZGRlZCBwcm9wZXJseVxuICAgIHRoaXMuX3J1bk1pZGRsZXdhcmUocmVzb3VyY2UsIHRoaXMuX2FmdGVyTWlkZGxld2FyZSwgZnVuY3Rpb24gKCkge1xuICAgICAgICByZXNvdXJjZS5lbWl0KCdhZnRlck1pZGRsZXdhcmUnLCByZXNvdXJjZSk7XG5cbiAgICAgICAgdGhpcy5fbnVtVG9Mb2FkLS07XG5cbiAgICAgICAgLy8gZG8gY29tcGxldGlvbiBjaGVja1xuICAgICAgICBpZiAodGhpcy5fbnVtVG9Mb2FkID09PSAwKSB7XG4gICAgICAgICAgICB0aGlzLnByb2dyZXNzID0gMTAwO1xuICAgICAgICAgICAgdGhpcy5fb25Db21wbGV0ZSgpO1xuICAgICAgICB9XG4gICAgICAgIFxuICAgICAgICBpZiAocmVzb3VyY2UuZXJyb3IpIHtcbiAgICAgICAgICAgIHRoaXMuZW1pdCgnZXJyb3InLCByZXNvdXJjZS5lcnJvciwgdGhpcywgcmVzb3VyY2UpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5lbWl0KCdsb2FkJywgdGhpcywgcmVzb3VyY2UpO1xuICAgICAgICB9XG4gICAgfSk7XG4gICAgXG5cblxuICAgIC8vIHJlbW92ZSB0aGlzIHJlc291cmNlIGZyb20gdGhlIGFzeW5jIHF1ZXVlXG4gICAgcmVzb3VyY2UuX2RlcXVldWUoKTtcbn07XG5cbi8qKlxuICogUnVuIG1pZGRsZXdhcmUgZnVuY3Rpb25zIG9uIGEgcmVzb3VyY2UuXG4gKlxuICogQHByaXZhdGVcbiAqL1xuTG9hZGVyLnByb3RvdHlwZS5fcnVuTWlkZGxld2FyZSA9IGZ1bmN0aW9uIChyZXNvdXJjZSwgZm5zLCBjYikge1xuICAgIHZhciBzZWxmID0gdGhpcztcblxuICAgIGFzeW5jLmVhY2hTZXJpZXMoZm5zLCBmdW5jdGlvbiAoZm4sIG5leHQpIHtcbiAgICAgICAgZm4uY2FsbChzZWxmLCByZXNvdXJjZSwgbmV4dCk7XG4gICAgfSwgY2IuYmluZCh0aGlzLCByZXNvdXJjZSkpO1xufTtcblxuTG9hZGVyLkxPQURfVFlQRSA9IFJlc291cmNlLkxPQURfVFlQRTtcbkxvYWRlci5YSFJfUkVBRFlfU1RBVEUgPSBSZXNvdXJjZS5YSFJfUkVBRFlfU1RBVEU7XG5Mb2FkZXIuWEhSX1JFU1BPTlNFX1RZUEUgPSBSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRTtcbiIsInZhciBFdmVudEVtaXR0ZXIgPSByZXF1aXJlKCdldmVudGVtaXR0ZXIzJyksXG4gICAgX3VybCA9IHJlcXVpcmUoJ3VybCcpLFxuICAgIC8vIHRlc3RzIGlzIENPUlMgaXMgc3VwcG9ydGVkIGluIFhIUiwgaWYgbm90IHdlIG5lZWQgdG8gdXNlIFhEUlxuICAgIHVzZVhkciA9ICEhKHdpbmRvdy5YRG9tYWluUmVxdWVzdCAmJiAhKCd3aXRoQ3JlZGVudGlhbHMnIGluIChuZXcgWE1MSHR0cFJlcXVlc3QoKSkpKSxcbiAgICB0ZW1wQW5jaG9yID0gbnVsbDtcblxuLyoqXG4gKiBNYW5hZ2VzIHRoZSBzdGF0ZSBhbmQgbG9hZGluZyBvZiBhIHNpbmdsZSByZXNvdXJjZSByZXByZXNlbnRlZCBieVxuICogYSBzaW5nbGUgVVJMLlxuICpcbiAqIEBjbGFzc1xuICogQHBhcmFtIG5hbWUge3N0cmluZ30gVGhlIG5hbWUgb2YgdGhlIHJlc291cmNlIHRvIGxvYWQuXG4gKiBAcGFyYW0gdXJsIHtzdHJpbmd8c3RyaW5nW119IFRoZSB1cmwgZm9yIHRoaXMgcmVzb3VyY2UsIGZvciBhdWRpby92aWRlbyBsb2FkcyB5b3UgY2FuIHBhc3MgYW4gYXJyYXkgb2Ygc291cmNlcy5cbiAqIEBwYXJhbSBbb3B0aW9uc10ge29iamVjdH0gVGhlIG9wdGlvbnMgZm9yIHRoZSBsb2FkLlxuICogQHBhcmFtIFtvcHRpb25zLmNyb3NzT3JpZ2luXSB7c3RyaW5nfGJvb2xlYW59IElzIHRoaXMgcmVxdWVzdCBjcm9zcy1vcmlnaW4/IERlZmF1bHQgaXMgdG8gZGV0ZXJtaW5lIGF1dG9tYXRpY2FsbHkuXG4gKiBAcGFyYW0gW29wdGlvbnMubG9hZFR5cGU9UmVzb3VyY2UuTE9BRF9UWVBFLlhIUl0ge1Jlc291cmNlLkxPQURfVFlQRX0gSG93IHNob3VsZCB0aGlzIHJlc291cmNlIGJlIGxvYWRlZD9cbiAqIEBwYXJhbSBbb3B0aW9ucy54aHJUeXBlPVJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkRFRkFVTFRdIHtSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRX0gSG93IHNob3VsZCB0aGUgZGF0YSBiZWluZ1xuICogICAgICBsb2FkZWQgYmUgaW50ZXJwcmV0ZWQgd2hlbiB1c2luZyBYSFI/XG4gKiBAcGFyYW0gW29wdGlvbnMubWV0YWRhdGFdIHtvYmplY3R9IEV4dHJhIGluZm8gZm9yIG1pZGRsZXdhcmUuXG4gKi9cbmZ1bmN0aW9uIFJlc291cmNlKG5hbWUsIHVybCwgb3B0aW9ucykge1xuICAgIEV2ZW50RW1pdHRlci5jYWxsKHRoaXMpO1xuXG4gICAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG5cbiAgICBpZiAodHlwZW9mIG5hbWUgIT09ICdzdHJpbmcnIHx8IHR5cGVvZiB1cmwgIT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignQm90aCBuYW1lIGFuZCB1cmwgYXJlIHJlcXVpcmVkIGZvciBjb25zdHJ1Y3RpbmcgYSByZXNvdXJjZS4nKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGUgbmFtZSBvZiB0aGlzIHJlc291cmNlLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7c3RyaW5nfVxuICAgICAqIEByZWFkb25seVxuICAgICAqL1xuICAgIHRoaXMubmFtZSA9IG5hbWU7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgdXJsIHVzZWQgdG8gbG9hZCB0aGlzIHJlc291cmNlLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7c3RyaW5nfVxuICAgICAqIEByZWFkb25seVxuICAgICAqL1xuICAgIHRoaXMudXJsID0gdXJsO1xuXG4gICAgLyoqXG4gICAgICogU3RvcmVzIHdoZXRoZXIgb3Igbm90IHRoaXMgdXJsIGlzIGEgZGF0YSB1cmwuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqIEByZWFkb25seVxuICAgICAqL1xuICAgIHRoaXMuaXNEYXRhVXJsID0gdGhpcy51cmwuaW5kZXhPZignZGF0YTonKSA9PT0gMDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBkYXRhIHRoYXQgd2FzIGxvYWRlZCBieSB0aGUgcmVzb3VyY2UuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHthbnl9XG4gICAgICovXG4gICAgdGhpcy5kYXRhID0gbnVsbDtcblxuICAgIC8qKlxuICAgICAqIElzIHRoaXMgcmVxdWVzdCBjcm9zcy1vcmlnaW4/IElmIHVuc2V0LCBkZXRlcm1pbmVkIGF1dG9tYXRpY2FsbHkuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtzdHJpbmd9XG4gICAgICovXG4gICAgdGhpcy5jcm9zc09yaWdpbiA9IG9wdGlvbnMuY3Jvc3NPcmlnaW4gPT09IHRydWUgPyAnYW5vbnltb3VzJyA6IG9wdGlvbnMuY3Jvc3NPcmlnaW47XG5cbiAgICAvKipcbiAgICAgKiBUaGUgbWV0aG9kIG9mIGxvYWRpbmcgdG8gdXNlIGZvciB0aGlzIHJlc291cmNlLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UmVzb3VyY2UuTE9BRF9UWVBFfVxuICAgICAqL1xuICAgIHRoaXMubG9hZFR5cGUgPSBvcHRpb25zLmxvYWRUeXBlIHx8IHRoaXMuX2RldGVybWluZUxvYWRUeXBlKCk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgdHlwZSB1c2VkIHRvIGxvYWQgdGhlIHJlc291cmNlIHZpYSBYSFIuIElmIHVuc2V0LCBkZXRlcm1pbmVkIGF1dG9tYXRpY2FsbHkuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtzdHJpbmd9XG4gICAgICovXG4gICAgdGhpcy54aHJUeXBlID0gb3B0aW9ucy54aHJUeXBlO1xuXG4gICAgLyoqXG4gICAgICogRXh0cmEgaW5mbyBmb3IgbWlkZGxld2FyZVxuICAgICAqXG4gICAgICogQG1lbWJlciB7b2JqZWN0fVxuICAgICAqL1xuICAgIHRoaXMubWV0YWRhdGEgPSBvcHRpb25zLm1ldGFkYXRhIHx8IHt9O1xuXG4gICAgLyoqXG4gICAgICogVGhlIGVycm9yIHRoYXQgb2NjdXJyZWQgd2hpbGUgbG9hZGluZyAoaWYgYW55KS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge0Vycm9yfVxuICAgICAqIEByZWFkb25seVxuICAgICAqL1xuICAgIHRoaXMuZXJyb3IgPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogVGhlIFhIUiBvYmplY3QgdGhhdCB3YXMgdXNlZCB0byBsb2FkIHRoaXMgcmVzb3VyY2UuIFRoaXMgaXMgb25seSBzZXRcbiAgICAgKiB3aGVuIGBsb2FkVHlwZWAgaXMgYFJlc291cmNlLkxPQURfVFlQRS5YSFJgLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7WE1MSHR0cFJlcXVlc3R9XG4gICAgICovXG4gICAgdGhpcy54aHIgPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogRGVzY3JpYmVzIGlmIHRoaXMgcmVzb3VyY2Ugd2FzIGxvYWRlZCBhcyBqc29uLiBPbmx5IHZhbGlkIGFmdGVyIHRoZSByZXNvdXJjZVxuICAgICAqIGhhcyBjb21wbGV0ZWx5IGxvYWRlZC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICovXG4gICAgdGhpcy5pc0pzb24gPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIERlc2NyaWJlcyBpZiB0aGlzIHJlc291cmNlIHdhcyBsb2FkZWQgYXMgeG1sLiBPbmx5IHZhbGlkIGFmdGVyIHRoZSByZXNvdXJjZVxuICAgICAqIGhhcyBjb21wbGV0ZWx5IGxvYWRlZC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICovXG4gICAgdGhpcy5pc1htbCA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogRGVzY3JpYmVzIGlmIHRoaXMgcmVzb3VyY2Ugd2FzIGxvYWRlZCBhcyBhbiBpbWFnZSB0YWcuIE9ubHkgdmFsaWQgYWZ0ZXIgdGhlIHJlc291cmNlXG4gICAgICogaGFzIGNvbXBsZXRlbHkgbG9hZGVkLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKi9cbiAgICB0aGlzLmlzSW1hZ2UgPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIERlc2NyaWJlcyBpZiB0aGlzIHJlc291cmNlIHdhcyBsb2FkZWQgYXMgYW4gYXVkaW8gdGFnLiBPbmx5IHZhbGlkIGFmdGVyIHRoZSByZXNvdXJjZVxuICAgICAqIGhhcyBjb21wbGV0ZWx5IGxvYWRlZC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICovXG4gICAgdGhpcy5pc0F1ZGlvID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBEZXNjcmliZXMgaWYgdGhpcyByZXNvdXJjZSB3YXMgbG9hZGVkIGFzIGEgdmlkZW8gdGFnLiBPbmx5IHZhbGlkIGFmdGVyIHRoZSByZXNvdXJjZVxuICAgICAqIGhhcyBjb21wbGV0ZWx5IGxvYWRlZC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICovXG4gICAgdGhpcy5pc1ZpZGVvID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYGRlcXVldWVgIG1ldGhvZCB0aGF0IHdpbGwgYmUgdXNlZCBhIHN0b3JhZ2UgcGxhY2UgZm9yIHRoZSBhc3luYyBxdWV1ZSBkZXF1ZXVlIG1ldGhvZFxuICAgICAqIHVzZWQgcHJpdmF0ZWx5IGJ5IHRoZSBsb2FkZXIuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtmdW5jdGlvbn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX2RlcXVldWUgPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGBjb21wbGV0ZWAgZnVuY3Rpb24gYm91bmQgdG8gdGhpcyByZXNvdXJjZSdzIGNvbnRleHQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtmdW5jdGlvbn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX2JvdW5kQ29tcGxldGUgPSB0aGlzLmNvbXBsZXRlLmJpbmQodGhpcyk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYF9vbkVycm9yYCBmdW5jdGlvbiBib3VuZCB0byB0aGlzIHJlc291cmNlJ3MgY29udGV4dC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Z1bmN0aW9ufVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fYm91bmRPbkVycm9yID0gdGhpcy5fb25FcnJvci5iaW5kKHRoaXMpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGBfb25Qcm9ncmVzc2AgZnVuY3Rpb24gYm91bmQgdG8gdGhpcyByZXNvdXJjZSdzIGNvbnRleHQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtmdW5jdGlvbn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX2JvdW5kT25Qcm9ncmVzcyA9IHRoaXMuX29uUHJvZ3Jlc3MuYmluZCh0aGlzKTtcblxuICAgIC8vIHhociBjYWxsYmFja3NcbiAgICB0aGlzLl9ib3VuZFhock9uRXJyb3IgPSB0aGlzLl94aHJPbkVycm9yLmJpbmQodGhpcyk7XG4gICAgdGhpcy5fYm91bmRYaHJPbkFib3J0ID0gdGhpcy5feGhyT25BYm9ydC5iaW5kKHRoaXMpO1xuICAgIHRoaXMuX2JvdW5kWGhyT25Mb2FkID0gdGhpcy5feGhyT25Mb2FkLmJpbmQodGhpcyk7XG4gICAgdGhpcy5fYm91bmRYZHJPblRpbWVvdXQgPSB0aGlzLl94ZHJPblRpbWVvdXQuYmluZCh0aGlzKTtcblxuICAgIC8qKlxuICAgICAqIEVtaXR0ZWQgd2hlbiB0aGUgcmVzb3VyY2UgYmVpbmdzIHRvIGxvYWQuXG4gICAgICpcbiAgICAgKiBAZXZlbnQgc3RhcnRcbiAgICAgKiBAbWVtYmVyb2YgUmVzb3VyY2UjXG4gICAgICovXG5cbiAgICAvKipcbiAgICAgKiBFbWl0dGVkIGVhY2ggdGltZSBwcm9ncmVzcyBvZiB0aGlzIHJlc291cmNlIGxvYWQgdXBkYXRlcy5cbiAgICAgKiBOb3QgYWxsIHJlc291cmNlcyB0eXBlcyBhbmQgbG9hZGVyIHN5c3RlbXMgY2FuIHN1cHBvcnQgdGhpcyBldmVudFxuICAgICAqIHNvIHNvbWV0aW1lcyBpdCBtYXkgbm90IGJlIGF2YWlsYWJsZS4gSWYgdGhlIHJlc291cmNlXG4gICAgICogaXMgYmVpbmcgbG9hZGVkIG9uIGEgbW9kZXJuIGJyb3dzZXIsIHVzaW5nIFhIUiwgYW5kIHRoZSByZW1vdGUgc2VydmVyXG4gICAgICogcHJvcGVybHkgc2V0cyBDb250ZW50LUxlbmd0aCBoZWFkZXJzLCB0aGVuIHRoaXMgd2lsbCBiZSBhdmFpbGFibGUuXG4gICAgICpcbiAgICAgKiBAZXZlbnQgcHJvZ3Jlc3NcbiAgICAgKiBAbWVtYmVyb2YgUmVzb3VyY2UjXG4gICAgICovXG5cbiAgICAvKipcbiAgICAgKiBFbWl0dGVkIG9uY2UgdGhpcyByZXNvdXJjZSBoYXMgbG9hZGVkLCBpZiB0aGVyZSB3YXMgYW4gZXJyb3IgaXQgd2lsbFxuICAgICAqIGJlIGluIHRoZSBgZXJyb3JgIHByb3BlcnR5LlxuICAgICAqXG4gICAgICogQGV2ZW50IGNvbXBsZXRlXG4gICAgICogQG1lbWJlcm9mIFJlc291cmNlI1xuICAgICAqL1xufVxuXG5SZXNvdXJjZS5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKEV2ZW50RW1pdHRlci5wcm90b3R5cGUpO1xuUmVzb3VyY2UucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gUmVzb3VyY2U7XG5tb2R1bGUuZXhwb3J0cyA9IFJlc291cmNlO1xuXG4vKipcbiAqIE1hcmtzIHRoZSByZXNvdXJjZSBhcyBjb21wbGV0ZS5cbiAqXG4gKiBAZmlyZXMgY29tcGxldGVcbiAqL1xuUmVzb3VyY2UucHJvdG90eXBlLmNvbXBsZXRlID0gZnVuY3Rpb24gKCkge1xuICAgIC8vIFRPRE86IENsZWFuIHRoaXMgdXAgaW4gYSB3cmFwcGVyIG9yIHNvbWV0aGluZy4uLmdyb3NzLi4uLlxuICAgIGlmICh0aGlzLmRhdGEgJiYgdGhpcy5kYXRhLnJlbW92ZUV2ZW50TGlzdGVuZXIpIHtcbiAgICAgICAgdGhpcy5kYXRhLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2Vycm9yJywgdGhpcy5fYm91bmRPbkVycm9yKTtcbiAgICAgICAgdGhpcy5kYXRhLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2xvYWQnLCB0aGlzLl9ib3VuZENvbXBsZXRlKTtcbiAgICAgICAgdGhpcy5kYXRhLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3Byb2dyZXNzJywgdGhpcy5fYm91bmRPblByb2dyZXNzKTtcbiAgICAgICAgdGhpcy5kYXRhLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2NhbnBsYXl0aHJvdWdoJywgdGhpcy5fYm91bmRDb21wbGV0ZSk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMueGhyKSB7XG4gICAgICAgIGlmICh0aGlzLnhoci5yZW1vdmVFdmVudExpc3RlbmVyKSB7XG4gICAgICAgICAgICB0aGlzLnhoci5yZW1vdmVFdmVudExpc3RlbmVyKCdlcnJvcicsIHRoaXMuX2JvdW5kWGhyT25FcnJvcik7XG4gICAgICAgICAgICB0aGlzLnhoci5yZW1vdmVFdmVudExpc3RlbmVyKCdhYm9ydCcsIHRoaXMuX2JvdW5kWGhyT25BYm9ydCk7XG4gICAgICAgICAgICB0aGlzLnhoci5yZW1vdmVFdmVudExpc3RlbmVyKCdwcm9ncmVzcycsIHRoaXMuX2JvdW5kT25Qcm9ncmVzcyk7XG4gICAgICAgICAgICB0aGlzLnhoci5yZW1vdmVFdmVudExpc3RlbmVyKCdsb2FkJywgdGhpcy5fYm91bmRYaHJPbkxvYWQpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy54aHIub25lcnJvciA9IG51bGw7XG4gICAgICAgICAgICB0aGlzLnhoci5vbnRpbWVvdXQgPSBudWxsO1xuICAgICAgICAgICAgdGhpcy54aHIub25wcm9ncmVzcyA9IG51bGw7XG4gICAgICAgICAgICB0aGlzLnhoci5vbmxvYWQgPSBudWxsO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5lbWl0KCdjb21wbGV0ZScsIHRoaXMpO1xufTtcblxuLyoqXG4gKiBLaWNrcyBvZmYgbG9hZGluZyBvZiB0aGlzIHJlc291cmNlLlxuICpcbiAqIEBmaXJlcyBzdGFydFxuICogQHBhcmFtIFtjYWxsYmFja10ge2Z1bmN0aW9ufSBPcHRpb25hbCBjYWxsYmFjayB0byBjYWxsIG9uY2UgdGhlIHJlc291cmNlIGlzIGxvYWRlZC5cbiAqL1xuUmVzb3VyY2UucHJvdG90eXBlLmxvYWQgPSBmdW5jdGlvbiAoY2IpIHtcbiAgICB0aGlzLmVtaXQoJ3N0YXJ0JywgdGhpcyk7XG5cbiAgICAvLyBpZiBhIGNhbGxiYWNrIGlzIHNldCwgbGlzdGVuIGZvciBjb21wbGV0ZSBldmVudFxuICAgIGlmIChjYikge1xuICAgICAgICB0aGlzLm9uY2UoJ2NvbXBsZXRlJywgY2IpO1xuICAgIH1cblxuICAgIC8vIGlmIHVuc2V0LCBkZXRlcm1pbmUgdGhlIHZhbHVlXG4gICAgaWYgKHRoaXMuY3Jvc3NPcmlnaW4gPT09IGZhbHNlIHx8IHR5cGVvZiB0aGlzLmNyb3NzT3JpZ2luICE9PSAnc3RyaW5nJykge1xuICAgICAgICB0aGlzLmNyb3NzT3JpZ2luID0gdGhpcy5fZGV0ZXJtaW5lQ3Jvc3NPcmlnaW4odGhpcy51cmwpO1xuICAgIH1cblxuICAgIHN3aXRjaCh0aGlzLmxvYWRUeXBlKSB7XG4gICAgICAgIGNhc2UgUmVzb3VyY2UuTE9BRF9UWVBFLklNQUdFOlxuICAgICAgICAgICAgdGhpcy5fbG9hZEltYWdlKCk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIFJlc291cmNlLkxPQURfVFlQRS5BVURJTzpcbiAgICAgICAgICAgIHRoaXMuX2xvYWRFbGVtZW50KCdhdWRpbycpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSBSZXNvdXJjZS5MT0FEX1RZUEUuVklERU86XG4gICAgICAgICAgICB0aGlzLl9sb2FkRWxlbWVudCgndmlkZW8nKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgUmVzb3VyY2UuTE9BRF9UWVBFLlhIUjpcbiAgICAgICAgICAgIC8qIGZhbGxzIHRocm91Z2ggKi9cbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIGlmICh1c2VYZHIgJiYgdGhpcy5jcm9zc09yaWdpbikge1xuICAgICAgICAgICAgICAgIHRoaXMuX2xvYWRYZHIoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuX2xvYWRYaHIoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGJyZWFrO1xuICAgIH1cbn07XG5cbi8qKlxuICogTG9hZHMgdGhpcyByZXNvdXJjZXMgdXNpbmcgYW4gSW1hZ2Ugb2JqZWN0LlxuICpcbiAqIEBwcml2YXRlXG4gKi9cblJlc291cmNlLnByb3RvdHlwZS5fbG9hZEltYWdlID0gZnVuY3Rpb24gKCkge1xuICAgIHRoaXMuZGF0YSA9IG5ldyBJbWFnZSgpO1xuXG4gICAgaWYgKHRoaXMuY3Jvc3NPcmlnaW4pIHtcbiAgICAgICAgdGhpcy5kYXRhLmNyb3NzT3JpZ2luID0gdGhpcy5jcm9zc09yaWdpbjtcbiAgICB9XG5cbiAgICB0aGlzLmRhdGEuc3JjID0gdGhpcy51cmw7XG5cbiAgICB0aGlzLmlzSW1hZ2UgPSB0cnVlO1xuXG4gICAgdGhpcy5kYXRhLmFkZEV2ZW50TGlzdGVuZXIoJ2Vycm9yJywgdGhpcy5fYm91bmRPbkVycm9yLCBmYWxzZSk7XG4gICAgdGhpcy5kYXRhLmFkZEV2ZW50TGlzdGVuZXIoJ2xvYWQnLCB0aGlzLl9ib3VuZENvbXBsZXRlLCBmYWxzZSk7XG4gICAgdGhpcy5kYXRhLmFkZEV2ZW50TGlzdGVuZXIoJ3Byb2dyZXNzJywgdGhpcy5fYm91bmRPblByb2dyZXNzLCBmYWxzZSk7XG59O1xuXG4vKipcbiAqIExvYWRzIHRoaXMgcmVzb3VyY2VzIHVzaW5nIGFuIEhUTUxBdWRpb0VsZW1lbnQgb3IgSFRNTFZpZGVvRWxlbWVudC5cbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5SZXNvdXJjZS5wcm90b3R5cGUuX2xvYWRFbGVtZW50ID0gZnVuY3Rpb24gKHR5cGUpIHtcbiAgICBpZiAodHlwZSA9PT0gJ2F1ZGlvJyAmJiB0eXBlb2YgQXVkaW8gIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIHRoaXMuZGF0YSA9IG5ldyBBdWRpbygpO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgdGhpcy5kYXRhID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCh0eXBlKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5kYXRhID09PSBudWxsKSB7XG4gICAgICAgIHRoaXMuZXJyb3IgPSBuZXcgRXJyb3IoJ1Vuc3VwcG9ydGVkIGVsZW1lbnQgJyArIHR5cGUpO1xuICAgICAgICB0aGlzLmNvbXBsZXRlKCk7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBzdXBwb3J0IGZvciBDb2Nvb25KUyBDYW52YXMrIHJ1bnRpbWUsIGxhY2tzIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NvdXJjZScpXG4gICAgaWYgKG5hdmlnYXRvci5pc0NvY29vbkpTKSB7XG4gICAgICAgIHRoaXMuZGF0YS5zcmMgPSBBcnJheS5pc0FycmF5KHRoaXMudXJsKSA/IHRoaXMudXJsWzBdIDogdGhpcy51cmw7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSh0aGlzLnVybCkpIHtcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy51cmwubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmRhdGEuYXBwZW5kQ2hpbGQodGhpcy5fY3JlYXRlU291cmNlKHR5cGUsIHRoaXMudXJsW2ldKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmRhdGEuYXBwZW5kQ2hpbGQodGhpcy5fY3JlYXRlU291cmNlKHR5cGUsIHRoaXMudXJsKSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzWydpcycgKyB0eXBlWzBdLnRvVXBwZXJDYXNlKCkgKyB0eXBlLnN1YnN0cmluZygxKV0gPSB0cnVlO1xuXG4gICAgdGhpcy5kYXRhLmFkZEV2ZW50TGlzdGVuZXIoJ2Vycm9yJywgdGhpcy5fYm91bmRPbkVycm9yLCBmYWxzZSk7XG4gICAgdGhpcy5kYXRhLmFkZEV2ZW50TGlzdGVuZXIoJ2xvYWQnLCB0aGlzLl9ib3VuZENvbXBsZXRlLCBmYWxzZSk7XG4gICAgdGhpcy5kYXRhLmFkZEV2ZW50TGlzdGVuZXIoJ3Byb2dyZXNzJywgdGhpcy5fYm91bmRPblByb2dyZXNzLCBmYWxzZSk7XG4gICAgdGhpcy5kYXRhLmFkZEV2ZW50TGlzdGVuZXIoJ2NhbnBsYXl0aHJvdWdoJywgdGhpcy5fYm91bmRDb21wbGV0ZSwgZmFsc2UpO1xuXG4gICAgdGhpcy5kYXRhLmxvYWQoKTtcbn07XG5cbi8qKlxuICogTG9hZHMgdGhpcyByZXNvdXJjZXMgdXNpbmcgYW4gWE1MSHR0cFJlcXVlc3QuXG4gKlxuICogQHByaXZhdGVcbiAqL1xuUmVzb3VyY2UucHJvdG90eXBlLl9sb2FkWGhyID0gZnVuY3Rpb24gKCkge1xuICAgIC8vIGlmIHVuc2V0LCBkZXRlcm1pbmUgdGhlIHZhbHVlXG4gICAgaWYgKHR5cGVvZiB0aGlzLnhoclR5cGUgIT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHRoaXMueGhyVHlwZSA9IHRoaXMuX2RldGVybWluZVhoclR5cGUoKTtcbiAgICB9XG5cbiAgICB2YXIgeGhyID0gdGhpcy54aHIgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTtcblxuICAgIC8vIHNldCB0aGUgcmVxdWVzdCB0eXBlIGFuZCB1cmxcbiAgICB4aHIub3BlbignR0VUJywgdGhpcy51cmwsIHRydWUpO1xuXG4gICAgLy8gbG9hZCBqc29uIGFzIHRleHQgYW5kIHBhcnNlIGl0IG91cnNlbHZlcy4gV2UgZG8gdGhpcyBiZWNhdXNlIHNvbWUgYnJvd3NlcnNcbiAgICAvLyAqY291Z2gqIHNhZmFyaSAqY291Z2gqIGNhbid0IGRlYWwgd2l0aCBpdC5cbiAgICBpZiAodGhpcy54aHJUeXBlID09PSBSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRS5KU09OIHx8IHRoaXMueGhyVHlwZSA9PT0gUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuRE9DVU1FTlQpIHtcbiAgICAgICAgeGhyLnJlc3BvbnNlVHlwZSA9IFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLlRFWFQ7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICB4aHIucmVzcG9uc2VUeXBlID0gdGhpcy54aHJUeXBlO1xuICAgIH1cblxuICAgIHhoci5hZGRFdmVudExpc3RlbmVyKCdlcnJvcicsIHRoaXMuX2JvdW5kWGhyT25FcnJvciwgZmFsc2UpO1xuICAgIHhoci5hZGRFdmVudExpc3RlbmVyKCdhYm9ydCcsIHRoaXMuX2JvdW5kWGhyT25BYm9ydCwgZmFsc2UpO1xuICAgIHhoci5hZGRFdmVudExpc3RlbmVyKCdwcm9ncmVzcycsIHRoaXMuX2JvdW5kT25Qcm9ncmVzcywgZmFsc2UpO1xuICAgIHhoci5hZGRFdmVudExpc3RlbmVyKCdsb2FkJywgdGhpcy5fYm91bmRYaHJPbkxvYWQsIGZhbHNlKTtcblxuICAgIHhoci5zZW5kKCk7XG59O1xuXG4vKipcbiAqIExvYWRzIHRoaXMgcmVzb3VyY2VzIHVzaW5nIGFuIFhEb21haW5SZXF1ZXN0LiBUaGlzIGlzIGhlcmUgYmVjYXVzZSB3ZSBuZWVkIHRvIHN1cHBvcnQgSUU5IChncm9zcykuXG4gKlxuICogQHByaXZhdGVcbiAqL1xuUmVzb3VyY2UucHJvdG90eXBlLl9sb2FkWGRyID0gZnVuY3Rpb24gKCkge1xuICAgIC8vIGlmIHVuc2V0LCBkZXRlcm1pbmUgdGhlIHZhbHVlXG4gICAgaWYgKHR5cGVvZiB0aGlzLnhoclR5cGUgIT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHRoaXMueGhyVHlwZSA9IHRoaXMuX2RldGVybWluZVhoclR5cGUoKTtcbiAgICB9XG5cbiAgICB2YXIgeGRyID0gdGhpcy54aHIgPSBuZXcgWERvbWFpblJlcXVlc3QoKTtcblxuICAgIC8vIFhEb21haW5SZXF1ZXN0IGhhcyBhIGZldyBxdWlya3MuIE9jY2FzaW9uYWxseSBpdCB3aWxsIGFib3J0IHJlcXVlc3RzXG4gICAgLy8gQSB3YXkgdG8gYXZvaWQgdGhpcyBpcyB0byBtYWtlIHN1cmUgQUxMIGNhbGxiYWNrcyBhcmUgc2V0IGV2ZW4gaWYgbm90IHVzZWRcbiAgICAvLyBNb3JlIGluZm8gaGVyZTogaHR0cDovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy8xNTc4Njk2Ni94ZG9tYWlucmVxdWVzdC1hYm9ydHMtcG9zdC1vbi1pZS05XG4gICAgeGRyLnRpbWVvdXQgPSA1MDAwO1xuXG4gICAgeGRyLm9uZXJyb3IgPSB0aGlzLl9ib3VuZFhock9uRXJyb3I7XG4gICAgeGRyLm9udGltZW91dCA9IHRoaXMuX2JvdW5kWGRyT25UaW1lb3V0O1xuICAgIHhkci5vbnByb2dyZXNzID0gdGhpcy5fYm91bmRPblByb2dyZXNzO1xuICAgIHhkci5vbmxvYWQgPSB0aGlzLl9ib3VuZFhock9uTG9hZDtcblxuICAgIHhkci5vcGVuKCdHRVQnLCB0aGlzLnVybCwgdHJ1ZSk7XG5cbiAgICAvLyAgTm90ZTogVGhlIHhkci5zZW5kKCkgY2FsbCBpcyB3cmFwcGVkIGluIGEgdGltZW91dCB0byBwcmV2ZW50IGFuIGlzc3VlIHdpdGggdGhlIGludGVyZmFjZSB3aGVyZSBzb21lIHJlcXVlc3RzIGFyZSBsb3N0XG4gICAgLy8gIGlmIG11bHRpcGxlIFhEb21haW5SZXF1ZXN0cyBhcmUgYmVpbmcgc2VudCBhdCB0aGUgc2FtZSB0aW1lLlxuICAgIC8vIFNvbWUgaW5mbyBoZXJlOiBodHRwczovL2dpdGh1Yi5jb20vcGhvdG9uc3Rvcm0vcGhhc2VyL2lzc3Vlcy8xMjQ4XG4gICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICAgIHhkci5zZW5kKCk7XG4gICAgfSwgMCk7XG59O1xuXG4vKipcbiAqIENyZWF0ZXMgYSBzb3VyY2UgdXNlZCBpbiBsb2FkaW5nIHZpYSBhbiBlbGVtZW50LlxuICpcbiAqIEBwYXJhbSB0eXBlIHtzdHJpbmd9IFRoZSBlbGVtZW50IHR5cGUgKHZpZGVvIG9yIGF1ZGlvKS5cbiAqIEBwYXJhbSB1cmwge3N0cmluZ30gVGhlIHNvdXJjZSBVUkwgdG8gbG9hZCBmcm9tLlxuICogQHBhcmFtIFttaW1lXSB7c3RyaW5nfSBUaGUgbWltZSB0eXBlIG9mIHRoZSB2aWRlb1xuICogQHByaXZhdGVcbiAqL1xuUmVzb3VyY2UucHJvdG90eXBlLl9jcmVhdGVTb3VyY2UgPSBmdW5jdGlvbiAodHlwZSwgdXJsLCBtaW1lKSB7XG4gICAgaWYgKCFtaW1lKSB7XG4gICAgICAgIG1pbWUgPSB0eXBlICsgJy8nICsgdXJsLnN1YnN0cih1cmwubGFzdEluZGV4T2YoJy4nKSArIDEpO1xuICAgIH1cblxuICAgIHZhciBzb3VyY2UgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzb3VyY2UnKTtcblxuICAgIHNvdXJjZS5zcmMgPSB1cmw7XG4gICAgc291cmNlLnR5cGUgPSBtaW1lO1xuXG4gICAgcmV0dXJuIHNvdXJjZTtcbn07XG5cbi8qKlxuICogQ2FsbGVkIGlmIGEgbG9hZCBlcnJvcnMgb3V0LlxuICpcbiAqIEBwYXJhbSBldmVudCB7RXZlbnR9IFRoZSBlcnJvciBldmVudCBmcm9tIHRoZSBlbGVtZW50IHRoYXQgZW1pdHMgaXQuXG4gKiBAcHJpdmF0ZVxuICovXG5SZXNvdXJjZS5wcm90b3R5cGUuX29uRXJyb3IgPSBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICB0aGlzLmVycm9yID0gbmV3IEVycm9yKCdGYWlsZWQgdG8gbG9hZCBlbGVtZW50IHVzaW5nICcgKyBldmVudC50YXJnZXQubm9kZU5hbWUpO1xuICAgIHRoaXMuY29tcGxldGUoKTtcbn07XG5cbi8qKlxuICogQ2FsbGVkIGlmIGEgbG9hZCBwcm9ncmVzcyBldmVudCBmaXJlcyBmb3IgeGhyL3hkci5cbiAqXG4gKiBAZmlyZXMgcHJvZ3Jlc3NcbiAqIEBwYXJhbSBldmVudCB7WE1MSHR0cFJlcXVlc3RQcm9ncmVzc0V2ZW50fEV2ZW50fVxuICogQHByaXZhdGVcbiAqL1xuUmVzb3VyY2UucHJvdG90eXBlLl9vblByb2dyZXNzID0gIGZ1bmN0aW9uIChldmVudCkge1xuICAgIGlmIChldmVudCAmJiBldmVudC5sZW5ndGhDb21wdXRhYmxlKSB7XG4gICAgICAgIHRoaXMuZW1pdCgncHJvZ3Jlc3MnLCB0aGlzLCBldmVudC5sb2FkZWQgLyBldmVudC50b3RhbCk7XG4gICAgfVxufTtcblxuLyoqXG4gKiBDYWxsZWQgaWYgYW4gZXJyb3IgZXZlbnQgZmlyZXMgZm9yIHhoci94ZHIuXG4gKlxuICogQHBhcmFtIGV2ZW50IHtYTUxIdHRwUmVxdWVzdEVycm9yRXZlbnR8RXZlbnR9XG4gKiBAcHJpdmF0ZVxuICovXG5SZXNvdXJjZS5wcm90b3R5cGUuX3hock9uRXJyb3IgPSBmdW5jdGlvbiAoKSB7XG4gICAgdGhpcy5lcnJvciA9IG5ldyBFcnJvcihcbiAgICAgICAgcmVxVHlwZSh0aGlzLnhocikgKyAnIFJlcXVlc3QgZmFpbGVkLiAnICtcbiAgICAgICAgJ1N0YXR1czogJyArIHRoaXMueGhyLnN0YXR1cyArICcsIHRleHQ6IFwiJyArIHRoaXMueGhyLnN0YXR1c1RleHQgKyAnXCInXG4gICAgKTtcblxuICAgIHRoaXMuY29tcGxldGUoKTtcbn07XG5cbi8qKlxuICogQ2FsbGVkIGlmIGFuIGFib3J0IGV2ZW50IGZpcmVzIGZvciB4aHIuXG4gKlxuICogQHBhcmFtIGV2ZW50IHtYTUxIdHRwUmVxdWVzdEFib3J0RXZlbnR9XG4gKiBAcHJpdmF0ZVxuICovXG5SZXNvdXJjZS5wcm90b3R5cGUuX3hock9uQWJvcnQgPSBmdW5jdGlvbiAoKSB7XG4gICAgdGhpcy5lcnJvciA9IG5ldyBFcnJvcihyZXFUeXBlKHRoaXMueGhyKSArICcgUmVxdWVzdCB3YXMgYWJvcnRlZCBieSB0aGUgdXNlci4nKTtcbiAgICB0aGlzLmNvbXBsZXRlKCk7XG59O1xuXG4vKipcbiAqIENhbGxlZCBpZiBhIHRpbWVvdXQgZXZlbnQgZmlyZXMgZm9yIHhkci5cbiAqXG4gKiBAcGFyYW0gZXZlbnQge0V2ZW50fVxuICogQHByaXZhdGVcbiAqL1xuUmVzb3VyY2UucHJvdG90eXBlLl94ZHJPblRpbWVvdXQgPSBmdW5jdGlvbiAoKSB7XG4gICAgdGhpcy5lcnJvciA9IG5ldyBFcnJvcihyZXFUeXBlKHRoaXMueGhyKSArICcgUmVxdWVzdCB0aW1lZCBvdXQuJyk7XG4gICAgdGhpcy5jb21wbGV0ZSgpO1xufTtcblxuLyoqXG4gKiBDYWxsZWQgd2hlbiBkYXRhIHN1Y2Nlc3NmdWxseSBsb2FkcyBmcm9tIGFuIHhoci94ZHIgcmVxdWVzdC5cbiAqXG4gKiBAcGFyYW0gZXZlbnQge1hNTEh0dHBSZXF1ZXN0TG9hZEV2ZW50fEV2ZW50fVxuICogQHByaXZhdGVcbiAqL1xuUmVzb3VyY2UucHJvdG90eXBlLl94aHJPbkxvYWQgPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHhociA9IHRoaXMueGhyLFxuICAgICAgICBzdGF0dXMgPSB4aHIuc3RhdHVzICE9PSB1bmRlZmluZWQgPyB4aHIuc3RhdHVzIDogMjAwOyAvL1hEUiBoYXMgbm8gYC5zdGF0dXNgLCBhc3N1bWUgMjAwLlxuXG4gICAgLy8gc3RhdHVzIGNhbiBiZSAwIHdoZW4gdXNpbmcgdGhlIGZpbGU6Ly8gcHJvdG9jb2wsIGFsc28gY2hlY2sgaWYgYSByZXNwb25zZSB3YXMgZm91bmRcbiAgICBpZiAoc3RhdHVzID09PSAyMDAgfHwgc3RhdHVzID09PSAyMDQgfHwgKHN0YXR1cyA9PT0gMCAmJiB4aHIucmVzcG9uc2VUZXh0Lmxlbmd0aCA+IDApKSB7XG4gICAgICAgIC8vIGlmIHRleHQsIGp1c3QgcmV0dXJuIGl0XG4gICAgICAgIGlmICh0aGlzLnhoclR5cGUgPT09IFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLlRFWFQpIHtcbiAgICAgICAgICAgIHRoaXMuZGF0YSA9IHhoci5yZXNwb25zZVRleHQ7XG4gICAgICAgIH1cbiAgICAgICAgLy8gaWYganNvbiwgcGFyc2UgaW50byBqc29uIG9iamVjdFxuICAgICAgICBlbHNlIGlmICh0aGlzLnhoclR5cGUgPT09IFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkpTT04pIHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgdGhpcy5kYXRhID0gSlNPTi5wYXJzZSh4aHIucmVzcG9uc2VUZXh0KTtcbiAgICAgICAgICAgICAgICB0aGlzLmlzSnNvbiA9IHRydWU7XG4gICAgICAgICAgICB9IGNhdGNoKGUpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmVycm9yID0gbmV3IEVycm9yKCdFcnJvciB0cnlpbmcgdG8gcGFyc2UgbG9hZGVkIGpzb246JywgZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8gaWYgeG1sLCBwYXJzZSBpbnRvIGFuIHhtbCBkb2N1bWVudCBvciBkaXYgZWxlbWVudFxuICAgICAgICBlbHNlIGlmICh0aGlzLnhoclR5cGUgPT09IFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkRPQ1VNRU5UKSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGlmICh3aW5kb3cuRE9NUGFyc2VyKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBkb21wYXJzZXIgPSBuZXcgRE9NUGFyc2VyKCk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGF0YSA9IGRvbXBhcnNlci5wYXJzZUZyb21TdHJpbmcoeGhyLnJlc3BvbnNlVGV4dCwgJ3RleHQveG1sJyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB2YXIgZGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgICAgICAgICAgICAgIGRpdi5pbm5lckhUTUwgPSB4aHIucmVzcG9uc2VUZXh0O1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmRhdGEgPSBkaXY7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXMuaXNYbWwgPSB0cnVlO1xuICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgIHRoaXMuZXJyb3IgPSBuZXcgRXJyb3IoJ0Vycm9yIHRyeWluZyB0byBwYXJzZSBsb2FkZWQgeG1sOicsIGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIG90aGVyIHR5cGVzIGp1c3QgcmV0dXJuIHRoZSByZXNwb25zZVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuZGF0YSA9IHhoci5yZXNwb25zZSB8fCB4aHIucmVzcG9uc2VUZXh0O1xuICAgICAgICB9XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICB0aGlzLmVycm9yID0gbmV3IEVycm9yKCdbJyArIHhoci5zdGF0dXMgKyAnXScgKyB4aHIuc3RhdHVzVGV4dCArICc6JyArIHhoci5yZXNwb25zZVVSTCk7XG4gICAgfVxuXG4gICAgdGhpcy5jb21wbGV0ZSgpO1xufTtcblxuZnVuY3Rpb24gcmVxVHlwZSh4aHIpIHtcbiAgICByZXR1cm4geGhyLnRvU3RyaW5nKCkucmVwbGFjZSgnb2JqZWN0ICcsICcnKTtcbn1cblxuLyoqXG4gKiBTZXRzIHRoZSBgY3Jvc3NPcmlnaW5gIHByb3BlcnR5IGZvciB0aGlzIHJlc291cmNlIGJhc2VkIG9uIGlmIHRoZSB1cmxcbiAqIGZvciB0aGlzIHJlc291cmNlIGlzIGNyb3NzLW9yaWdpbi4gSWYgY3Jvc3NPcmlnaW4gd2FzIG1hbnVhbGx5IHNldCwgdGhpc1xuICogZnVuY3Rpb24gZG9lcyBub3RoaW5nLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0gdXJsIHtzdHJpbmd9IFRoZSB1cmwgdG8gdGVzdC5cbiAqIEBwYXJhbSBbbG9jYXRpb249d2luZG93LmxvY2F0aW9uXSB7b2JqZWN0fSBUaGUgbG9jYXRpb24gb2JqZWN0IHRvIHRlc3QgYWdhaW5zdC5cbiAqIEByZXR1cm4ge3N0cmluZ30gVGhlIGNyb3NzT3JpZ2luIHZhbHVlIHRvIHVzZSAob3IgZW1wdHkgc3RyaW5nIGZvciBub25lKS5cbiAqL1xuUmVzb3VyY2UucHJvdG90eXBlLl9kZXRlcm1pbmVDcm9zc09yaWdpbiA9IGZ1bmN0aW9uICh1cmwsIGxvYykge1xuICAgIC8vIGRhdGE6IGFuZCBqYXZhc2NyaXB0OiB1cmxzIGFyZSBjb25zaWRlcmVkIHNhbWUtb3JpZ2luXG4gICAgaWYgKHVybC5pbmRleE9mKCdkYXRhOicpID09PSAwKSB7XG4gICAgICAgIHJldHVybiAnJztcbiAgICB9XG5cbiAgICAvLyBkZWZhdWx0IGlzIHdpbmRvdy5sb2NhdGlvblxuICAgIGxvYyA9IGxvYyB8fCB3aW5kb3cubG9jYXRpb247XG5cbiAgICBpZiAoIXRlbXBBbmNob3IpIHtcbiAgICAgICAgdGVtcEFuY2hvciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2EnKTtcbiAgICB9XG5cbiAgICAvLyBsZXQgdGhlIGJyb3dzZXIgZGV0ZXJtaW5lIHRoZSBmdWxsIGhyZWYgZm9yIHRoZSB1cmwgb2YgdGhpcyByZXNvdXJjZSBhbmQgdGhlblxuICAgIC8vIHBhcnNlIHdpdGggdGhlIG5vZGUgdXJsIGxpYiwgd2UgY2FuJ3QgdXNlIHRoZSBwcm9wZXJ0aWVzIG9mIHRoZSBhbmNob3IgZWxlbWVudFxuICAgIC8vIGJlY2F1c2UgdGhleSBkb24ndCB3b3JrIGluIElFOSA6KFxuICAgIHRlbXBBbmNob3IuaHJlZiA9IHVybDtcbiAgICB1cmwgPSBfdXJsLnBhcnNlKHRlbXBBbmNob3IuaHJlZik7XG5cbiAgICB2YXIgc2FtZVBvcnQgPSAoIXVybC5wb3J0ICYmIGxvYy5wb3J0ID09PSAnJykgfHwgKHVybC5wb3J0ID09PSBsb2MucG9ydCk7XG5cbiAgICAvLyBpZiBjcm9zcyBvcmlnaW5cbiAgICBpZiAodXJsLmhvc3RuYW1lICE9PSBsb2MuaG9zdG5hbWUgfHwgIXNhbWVQb3J0IHx8IHVybC5wcm90b2NvbCAhPT0gbG9jLnByb3RvY29sKSB7XG4gICAgICAgIHJldHVybiAnYW5vbnltb3VzJztcbiAgICB9XG5cbiAgICByZXR1cm4gJyc7XG59O1xuXG4vKipcbiAqIERldGVybWluZXMgdGhlIHJlc3BvbnNlVHlwZSBvZiBhbiBYSFIgcmVxdWVzdCBiYXNlZCBvbiB0aGUgZXh0ZW5zaW9uIG9mIHRoZVxuICogcmVzb3VyY2UgYmVpbmcgbG9hZGVkLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcmV0dXJuIHtSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRX0gVGhlIHJlc3BvbnNlVHlwZSB0byB1c2UuXG4gKi9cblJlc291cmNlLnByb3RvdHlwZS5fZGV0ZXJtaW5lWGhyVHlwZSA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gUmVzb3VyY2UuX3hoclR5cGVNYXBbdGhpcy5fZ2V0RXh0ZW5zaW9uKCldIHx8IFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLlRFWFQ7XG59O1xuXG5SZXNvdXJjZS5wcm90b3R5cGUuX2RldGVybWluZUxvYWRUeXBlID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBSZXNvdXJjZS5fbG9hZFR5cGVNYXBbdGhpcy5fZ2V0RXh0ZW5zaW9uKCldIHx8IFJlc291cmNlLkxPQURfVFlQRS5YSFI7XG59O1xuXG5SZXNvdXJjZS5wcm90b3R5cGUuX2dldEV4dGVuc2lvbiA9IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgdXJsID0gdGhpcy51cmwsXG4gICAgICAgIGV4dDtcblxuICAgIGlmICh0aGlzLmlzRGF0YVVybCkge1xuICAgICAgICB2YXIgc2xhc2hJbmRleCA9IHVybC5pbmRleE9mKCcvJyk7XG4gICAgICAgIGV4dCA9IHVybC5zdWJzdHJpbmcoc2xhc2hJbmRleCArIDEsIHVybC5pbmRleE9mKCc7Jywgc2xhc2hJbmRleCkpO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgdmFyIHF1ZXJ5U3RhcnQgPSB1cmwuaW5kZXhPZignPycpO1xuICAgICAgICBpZiAocXVlcnlTdGFydCAhPT0gLTEpIHtcbiAgICAgICAgICAgIHVybCA9IHVybC5zdWJzdHJpbmcoMCwgcXVlcnlTdGFydCk7XG4gICAgICAgIH1cblxuICAgICAgICBleHQgPSB1cmwuc3Vic3RyaW5nKHVybC5sYXN0SW5kZXhPZignLicpICsgMSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGV4dDtcbn07XG5cbi8qKlxuICogRGV0ZXJtaW5lcyB0aGUgbWltZSB0eXBlIG9mIGFuIFhIUiByZXF1ZXN0IGJhc2VkIG9uIHRoZSByZXNwb25zZVR5cGUgb2ZcbiAqIHJlc291cmNlIGJlaW5nIGxvYWRlZC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHJldHVybiB7c3RyaW5nfSBUaGUgbWltZSB0eXBlIHRvIHVzZS5cbiAqL1xuUmVzb3VyY2UucHJvdG90eXBlLl9nZXRNaW1lRnJvbVhoclR5cGUgPSBmdW5jdGlvbiAodHlwZSkge1xuICAgIHN3aXRjaCh0eXBlKSB7XG4gICAgICAgIGNhc2UgUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuQlVGRkVSOlxuICAgICAgICAgICAgcmV0dXJuICdhcHBsaWNhdGlvbi9vY3RldC1iaW5hcnknO1xuXG4gICAgICAgIGNhc2UgUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuQkxPQjpcbiAgICAgICAgICAgIHJldHVybiAnYXBwbGljYXRpb24vYmxvYic7XG5cbiAgICAgICAgY2FzZSBSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRS5ET0NVTUVOVDpcbiAgICAgICAgICAgIHJldHVybiAnYXBwbGljYXRpb24veG1sJztcblxuICAgICAgICBjYXNlIFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkpTT046XG4gICAgICAgICAgICByZXR1cm4gJ2FwcGxpY2F0aW9uL2pzb24nO1xuXG4gICAgICAgIGNhc2UgUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuREVGQVVMVDpcbiAgICAgICAgY2FzZSBSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRS5URVhUOlxuICAgICAgICAgICAgLyogZmFsbHMgdGhyb3VnaCAqL1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgcmV0dXJuICd0ZXh0L3BsYWluJztcblxuICAgIH1cbn07XG5cbi8qKlxuICogVGhlIHR5cGVzIG9mIGxvYWRpbmcgYSByZXNvdXJjZSBjYW4gdXNlLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBjb25zdGFudFxuICogQHByb3BlcnR5IHtvYmplY3R9IExPQURfVFlQRVxuICogQHByb3BlcnR5IHtudW1iZXJ9IExPQURfVFlQRS5YSFIgLSBVc2VzIFhNTEh0dHBSZXF1ZXN0IHRvIGxvYWQgdGhlIHJlc291cmNlLlxuICogQHByb3BlcnR5IHtudW1iZXJ9IExPQURfVFlQRS5JTUFHRSAtIFVzZXMgYW4gYEltYWdlYCBvYmplY3QgdG8gbG9hZCB0aGUgcmVzb3VyY2UuXG4gKiBAcHJvcGVydHkge251bWJlcn0gTE9BRF9UWVBFLkFVRElPIC0gVXNlcyBhbiBgQXVkaW9gIG9iamVjdCB0byBsb2FkIHRoZSByZXNvdXJjZS5cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBMT0FEX1RZUEUuVklERU8gLSBVc2VzIGEgYFZpZGVvYCBvYmplY3QgdG8gbG9hZCB0aGUgcmVzb3VyY2UuXG4gKi9cblJlc291cmNlLkxPQURfVFlQRSA9IHtcbiAgICBYSFI6ICAgIDEsXG4gICAgSU1BR0U6ICAyLFxuICAgIEFVRElPOiAgMyxcbiAgICBWSURFTzogIDRcbn07XG5cbi8qKlxuICogVGhlIFhIUiByZWFkeSBzdGF0ZXMsIHVzZWQgaW50ZXJuYWxseS5cbiAqXG4gKiBAc3RhdGljXG4gKiBAY29uc3RhbnRcbiAqIEBwcm9wZXJ0eSB7b2JqZWN0fSBYSFJfUkVBRFlfU1RBVEVcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBYSFJfUkVBRFlfU1RBVEUuVU5TRU5UIC0gb3BlbigpaGFzIG5vdCBiZWVuIGNhbGxlZCB5ZXQuXG4gKiBAcHJvcGVydHkge251bWJlcn0gWEhSX1JFQURZX1NUQVRFLk9QRU5FRCAtIHNlbmQoKWhhcyBub3QgYmVlbiBjYWxsZWQgeWV0LlxuICogQHByb3BlcnR5IHtudW1iZXJ9IFhIUl9SRUFEWV9TVEFURS5IRUFERVJTX1JFQ0VJVkVEIC0gc2VuZCgpIGhhcyBiZWVuIGNhbGxlZCwgYW5kIGhlYWRlcnMgYW5kIHN0YXR1cyBhcmUgYXZhaWxhYmxlLlxuICogQHByb3BlcnR5IHtudW1iZXJ9IFhIUl9SRUFEWV9TVEFURS5MT0FESU5HIC0gRG93bmxvYWRpbmc7IHJlc3BvbnNlVGV4dCBob2xkcyBwYXJ0aWFsIGRhdGEuXG4gKiBAcHJvcGVydHkge251bWJlcn0gWEhSX1JFQURZX1NUQVRFLkRPTkUgLSBUaGUgb3BlcmF0aW9uIGlzIGNvbXBsZXRlLlxuICovXG5SZXNvdXJjZS5YSFJfUkVBRFlfU1RBVEUgPSB7XG4gICAgVU5TRU5UOiAwLFxuICAgIE9QRU5FRDogMSxcbiAgICBIRUFERVJTX1JFQ0VJVkVEOiAyLFxuICAgIExPQURJTkc6IDMsXG4gICAgRE9ORTogNFxufTtcblxuLyoqXG4gKiBUaGUgWEhSIHJlYWR5IHN0YXRlcywgdXNlZCBpbnRlcm5hbGx5LlxuICpcbiAqIEBzdGF0aWNcbiAqIEBjb25zdGFudFxuICogQHByb3BlcnR5IHtvYmplY3R9IFhIUl9SRVNQT05TRV9UWVBFXG4gKiBAcHJvcGVydHkge3N0cmluZ30gWEhSX1JFU1BPTlNFX1RZUEUuREVGQVVMVCAtIGRlZmF1bHRzIHRvIHRleHRcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBYSFJfUkVTUE9OU0VfVFlQRS5CVUZGRVIgLSBBcnJheUJ1ZmZlclxuICogQHByb3BlcnR5IHtzdHJpbmd9IFhIUl9SRVNQT05TRV9UWVBFLkJMT0IgLSBCbG9iXG4gKiBAcHJvcGVydHkge3N0cmluZ30gWEhSX1JFU1BPTlNFX1RZUEUuRE9DVU1FTlQgLSBEb2N1bWVudFxuICogQHByb3BlcnR5IHtzdHJpbmd9IFhIUl9SRVNQT05TRV9UWVBFLkpTT04gLSBPYmplY3RcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBYSFJfUkVTUE9OU0VfVFlQRS5URVhUIC0gU3RyaW5nXG4gKi9cblJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFID0ge1xuICAgIERFRkFVTFQ6ICAgICd0ZXh0JyxcbiAgICBCVUZGRVI6ICAgICAnYXJyYXlidWZmZXInLFxuICAgIEJMT0I6ICAgICAgICdibG9iJyxcbiAgICBET0NVTUVOVDogICAnZG9jdW1lbnQnLFxuICAgIEpTT046ICAgICAgICdqc29uJyxcbiAgICBURVhUOiAgICAgICAndGV4dCdcbn07XG5cblJlc291cmNlLl9sb2FkVHlwZU1hcCA9IHtcbiAgICAnZ2lmJzogICAgICBSZXNvdXJjZS5MT0FEX1RZUEUuSU1BR0UsXG4gICAgJ3BuZyc6ICAgICAgUmVzb3VyY2UuTE9BRF9UWVBFLklNQUdFLFxuICAgICdibXAnOiAgICAgIFJlc291cmNlLkxPQURfVFlQRS5JTUFHRSxcbiAgICAnanBnJzogICAgICBSZXNvdXJjZS5MT0FEX1RZUEUuSU1BR0UsXG4gICAgJ2pwZWcnOiAgICAgUmVzb3VyY2UuTE9BRF9UWVBFLklNQUdFLFxuICAgICd0aWYnOiAgICAgIFJlc291cmNlLkxPQURfVFlQRS5JTUFHRSxcbiAgICAndGlmZic6ICAgICBSZXNvdXJjZS5MT0FEX1RZUEUuSU1BR0UsXG4gICAgJ3dlYnAnOiAgICAgUmVzb3VyY2UuTE9BRF9UWVBFLklNQUdFLFxuICAgICd0Z2EnOiAgICAgIFJlc291cmNlLkxPQURfVFlQRS5JTUFHRVxufTtcblxuUmVzb3VyY2UuX3hoclR5cGVNYXAgPSB7XG4gICAgLy8geG1sXG4gICAgJ3hodG1sJzogICAgUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuRE9DVU1FTlQsXG4gICAgJ2h0bWwnOiAgICAgUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuRE9DVU1FTlQsXG4gICAgJ2h0bSc6ICAgICAgUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuRE9DVU1FTlQsXG4gICAgJ3htbCc6ICAgICAgUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuRE9DVU1FTlQsXG4gICAgJ3RteCc6ICAgICAgUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuRE9DVU1FTlQsXG4gICAgJ3RzeCc6ICAgICAgUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuRE9DVU1FTlQsXG4gICAgJ3N2Zyc6ICAgICAgUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuRE9DVU1FTlQsXG5cbiAgICAvLyBpbWFnZXNcbiAgICAnZ2lmJzogICAgICBSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRS5CTE9CLFxuICAgICdwbmcnOiAgICAgIFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkJMT0IsXG4gICAgJ2JtcCc6ICAgICAgUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuQkxPQixcbiAgICAnanBnJzogICAgICBSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRS5CTE9CLFxuICAgICdqcGVnJzogICAgIFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkJMT0IsXG4gICAgJ3RpZic6ICAgICAgUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuQkxPQixcbiAgICAndGlmZic6ICAgICBSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRS5CTE9CLFxuICAgICd3ZWJwJzogICAgIFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkJMT0IsXG4gICAgJ3RnYSc6ICAgICAgUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuQkxPQixcblxuICAgIC8vIGpzb25cbiAgICAnanNvbic6ICAgICBSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRS5KU09OLFxuXG4gICAgLy8gdGV4dFxuICAgICd0ZXh0JzogICAgIFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLlRFWFQsXG4gICAgJ3R4dCc6ICAgICAgUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuVEVYVFxufTtcblxuLyoqXG4gKiBTZXRzIHRoZSBsb2FkIHR5cGUgdG8gYmUgdXNlZCBmb3IgYSBzcGVjaWZpYyBleHRlbnNpb24uXG4gKlxuICogQHN0YXRpY1xuICogQHBhcmFtIGV4dG5hbWUge3N0cmluZ30gVGhlIGV4dGVuc2lvbiB0byBzZXQgdGhlIHR5cGUgZm9yLCBlLmcuIFwicG5nXCIgb3IgXCJmbnRcIlxuICogQHBhcmFtIGxvYWRUeXBlIHtSZXNvdXJjZS5MT0FEX1RZUEV9IFRoZSBsb2FkIHR5cGUgdG8gc2V0IGl0IHRvLlxuICovXG5SZXNvdXJjZS5zZXRFeHRlbnNpb25Mb2FkVHlwZSA9IGZ1bmN0aW9uIChleHRuYW1lLCBsb2FkVHlwZSkge1xuICAgIHNldEV4dE1hcChSZXNvdXJjZS5fbG9hZFR5cGVNYXAsIGV4dG5hbWUsIGxvYWRUeXBlKTtcbn07XG5cbi8qKlxuICogU2V0cyB0aGUgbG9hZCB0eXBlIHRvIGJlIHVzZWQgZm9yIGEgc3BlY2lmaWMgZXh0ZW5zaW9uLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBwYXJhbSBleHRuYW1lIHtzdHJpbmd9IFRoZSBleHRlbnNpb24gdG8gc2V0IHRoZSB0eXBlIGZvciwgZS5nLiBcInBuZ1wiIG9yIFwiZm50XCJcbiAqIEBwYXJhbSB4aHJUeXBlIHtSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRX0gVGhlIHhociB0eXBlIHRvIHNldCBpdCB0by5cbiAqL1xuUmVzb3VyY2Uuc2V0RXh0ZW5zaW9uWGhyVHlwZSA9IGZ1bmN0aW9uIChleHRuYW1lLCB4aHJUeXBlKSB7XG4gICAgc2V0RXh0TWFwKFJlc291cmNlLl94aHJUeXBlTWFwLCBleHRuYW1lLCB4aHJUeXBlKTtcbn07XG5cbmZ1bmN0aW9uIHNldEV4dE1hcChtYXAsIGV4dG5hbWUsIHZhbCkge1xuICAgIGlmIChleHRuYW1lICYmIGV4dG5hbWUuaW5kZXhPZignLicpID09PSAwKSB7XG4gICAgICAgIGV4dG5hbWUgPSBleHRuYW1lLnN1YnN0cmluZygxKTtcbiAgICB9XG5cbiAgICBpZiAoIWV4dG5hbWUpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIG1hcFtleHRuYW1lXSA9IHZhbDtcbn1cbiIsIm1vZHVsZS5leHBvcnRzID0ge1xuXG4gICAgLy8gcHJpdmF0ZSBwcm9wZXJ0eVxuICAgIF9rZXlTdHI6IFwiQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkrLz1cIixcblxuICAgIGVuY29kZUJpbmFyeTogZnVuY3Rpb24gKGlucHV0KSB7XG4gICAgICAgIHZhciBvdXRwdXQgPSBcIlwiO1xuICAgICAgICB2YXIgYnl0ZWJ1ZmZlcjtcbiAgICAgICAgdmFyIGVuY29kZWRDaGFySW5kZXhlcyA9IG5ldyBBcnJheSg0KTtcbiAgICAgICAgdmFyIGlueCA9IDA7XG4gICAgICAgIHZhciBqbnggPSAwO1xuICAgICAgICB2YXIgcGFkZGluZ0J5dGVzID0gMDtcblxuICAgICAgICB3aGlsZSAoaW54IDwgaW5wdXQubGVuZ3RoKSB7XG4gICAgICAgICAgICAvLyBGaWxsIGJ5dGUgYnVmZmVyIGFycmF5XG4gICAgICAgICAgICBieXRlYnVmZmVyID0gbmV3IEFycmF5KDMpO1xuICAgICAgICAgICAgZm9yIChqbnggPSAwOyBqbnggPCBieXRlYnVmZmVyLmxlbmd0aDsgam54KyspIHtcbiAgICAgICAgICAgICAgICBpZiAoaW54IDwgaW5wdXQubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIHRocm93IGF3YXkgaGlnaC1vcmRlciBieXRlLCBhcyBkb2N1bWVudGVkIGF0OlxuICAgICAgICAgICAgICAgICAgICAvLyBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9Fbi9Vc2luZ19YTUxIdHRwUmVxdWVzdCNIYW5kbGluZ19iaW5hcnlfZGF0YVxuICAgICAgICAgICAgICAgICAgICBieXRlYnVmZmVyW2pueF0gPSBpbnB1dC5jaGFyQ29kZUF0KGlueCsrKSAmIDB4ZmY7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBieXRlYnVmZmVyW2pueF0gPSAwO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gR2V0IGVhY2ggZW5jb2RlZCBjaGFyYWN0ZXIsIDYgYml0cyBhdCBhIHRpbWVcbiAgICAgICAgICAgIC8vIGluZGV4IDE6IGZpcnN0IDYgYml0c1xuICAgICAgICAgICAgZW5jb2RlZENoYXJJbmRleGVzWzBdID0gYnl0ZWJ1ZmZlclswXSA+PiAyO1xuICAgICAgICAgICAgLy8gaW5kZXggMjogc2Vjb25kIDYgYml0cyAoMiBsZWFzdCBzaWduaWZpY2FudCBiaXRzIGZyb20gaW5wdXQgYnl0ZSAxICsgNCBtb3N0IHNpZ25pZmljYW50IGJpdHMgZnJvbSBieXRlIDIpXG4gICAgICAgICAgICBlbmNvZGVkQ2hhckluZGV4ZXNbMV0gPSAoKGJ5dGVidWZmZXJbMF0gJiAweDMpIDw8IDQpIHwgKGJ5dGVidWZmZXJbMV0gPj4gNCk7XG4gICAgICAgICAgICAvLyBpbmRleCAzOiB0aGlyZCA2IGJpdHMgKDQgbGVhc3Qgc2lnbmlmaWNhbnQgYml0cyBmcm9tIGlucHV0IGJ5dGUgMiArIDIgbW9zdCBzaWduaWZpY2FudCBiaXRzIGZyb20gYnl0ZSAzKVxuICAgICAgICAgICAgZW5jb2RlZENoYXJJbmRleGVzWzJdID0gKChieXRlYnVmZmVyWzFdICYgMHgwZikgPDwgMikgfCAoYnl0ZWJ1ZmZlclsyXSA+PiA2KTtcbiAgICAgICAgICAgIC8vIGluZGV4IDM6IGZvcnRoIDYgYml0cyAoNiBsZWFzdCBzaWduaWZpY2FudCBiaXRzIGZyb20gaW5wdXQgYnl0ZSAzKVxuICAgICAgICAgICAgZW5jb2RlZENoYXJJbmRleGVzWzNdID0gYnl0ZWJ1ZmZlclsyXSAmIDB4M2Y7XG5cbiAgICAgICAgICAgIC8vIERldGVybWluZSB3aGV0aGVyIHBhZGRpbmcgaGFwcGVuZWQsIGFuZCBhZGp1c3QgYWNjb3JkaW5nbHlcbiAgICAgICAgICAgIHBhZGRpbmdCeXRlcyA9IGlueCAtIChpbnB1dC5sZW5ndGggLSAxKTtcbiAgICAgICAgICAgIHN3aXRjaCAocGFkZGluZ0J5dGVzKSB7XG4gICAgICAgICAgICAgICAgY2FzZSAyOlxuICAgICAgICAgICAgICAgICAgICAvLyBTZXQgbGFzdCAyIGNoYXJhY3RlcnMgdG8gcGFkZGluZyBjaGFyXG4gICAgICAgICAgICAgICAgICAgIGVuY29kZWRDaGFySW5kZXhlc1szXSA9IDY0O1xuICAgICAgICAgICAgICAgICAgICBlbmNvZGVkQ2hhckluZGV4ZXNbMl0gPSA2NDtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICAgICAgICAgIC8vIFNldCBsYXN0IGNoYXJhY3RlciB0byBwYWRkaW5nIGNoYXJcbiAgICAgICAgICAgICAgICAgICAgZW5jb2RlZENoYXJJbmRleGVzWzNdID0gNjQ7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7IC8vIE5vIHBhZGRpbmcgLSBwcm9jZWVkXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIE5vdyB3ZSB3aWxsIGdyYWIgZWFjaCBhcHByb3ByaWF0ZSBjaGFyYWN0ZXIgb3V0IG9mIG91ciBrZXlzdHJpbmdcbiAgICAgICAgICAgIC8vIGJhc2VkIG9uIG91ciBpbmRleCBhcnJheSBhbmQgYXBwZW5kIGl0IHRvIHRoZSBvdXRwdXQgc3RyaW5nXG4gICAgICAgICAgICBmb3IgKGpueCA9IDA7IGpueCA8IGVuY29kZWRDaGFySW5kZXhlcy5sZW5ndGg7IGpueCsrKSB7XG4gICAgICAgICAgICAgICAgb3V0cHV0ICs9IHRoaXMuX2tleVN0ci5jaGFyQXQoZW5jb2RlZENoYXJJbmRleGVzW2pueF0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBvdXRwdXQ7XG4gICAgfVxufTtcbiIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9Mb2FkZXInKTtcblxubW9kdWxlLmV4cG9ydHMuUmVzb3VyY2UgPSByZXF1aXJlKCcuL1Jlc291cmNlJyk7XG5cbm1vZHVsZS5leHBvcnRzLm1pZGRsZXdhcmUgPSB7XG4gICAgY2FjaGluZzoge1xuICAgICAgICBtZW1vcnk6IHJlcXVpcmUoJy4vbWlkZGxld2FyZXMvY2FjaGluZy9tZW1vcnknKVxuICAgIH0sXG4gICAgcGFyc2luZzoge1xuICAgICAgICBibG9iOiByZXF1aXJlKCcuL21pZGRsZXdhcmVzL3BhcnNpbmcvYmxvYicpXG4gICAgfVxufTtcbiIsIi8vIGEgc2ltcGxlIGluLW1lbW9yeSBjYWNoZSBmb3IgcmVzb3VyY2VzXG52YXIgY2FjaGUgPSB7fTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChyZXNvdXJjZSwgbmV4dCkge1xuICAgICAgICAvLyBpZiBjYWNoZWQsIHRoZW4gc2V0IGRhdGEgYW5kIGNvbXBsZXRlIHRoZSByZXNvdXJjZVxuICAgICAgICBpZiAoY2FjaGVbcmVzb3VyY2UudXJsXSkge1xuICAgICAgICAgICAgcmVzb3VyY2UuZGF0YSA9IGNhY2hlW3Jlc291cmNlLnVybF07XG4gICAgICAgICAgICByZXNvdXJjZS5jb21wbGV0ZSgpO1xuICAgICAgICB9XG4gICAgICAgIC8vIGlmIG5vdCBjYWNoZWQsIHdhaXQgZm9yIGNvbXBsZXRlIGFuZCBzdG9yZSBpdCBpbiB0aGUgY2FjaGUuXG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcmVzb3VyY2Uub25jZSgnY29tcGxldGUnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICBjYWNoZVt0aGlzLnVybF0gPSB0aGlzLmRhdGE7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBcbiAgICAgICAgbmV4dCgpO1xuICAgIH07XG59O1xuIiwidmFyIFJlc291cmNlID0gcmVxdWlyZSgnLi4vLi4vUmVzb3VyY2UnKSxcbiAgICBiNjQgPSByZXF1aXJlKCcuLi8uLi9iNjQnKTtcblxud2luZG93LlVSTCA9IHdpbmRvdy5VUkwgfHwgd2luZG93LndlYmtpdFVSTDtcblxuLy8gYSBtaWRkbGV3YXJlIGZvciB0cmFuc2Zvcm1pbmcgWEhSIGxvYWRlZCBCbG9icyBpbnRvIG1vcmUgdXNlZnVsIG9iamVjdHNcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChyZXNvdXJjZSwgbmV4dCkge1xuICAgICAgICBpZiAoIXJlc291cmNlLmRhdGEpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXh0KCk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBpZiB0aGlzIHdhcyBhbiBYSFIgbG9hZCBvZiBhIGJsb2JcbiAgICAgICAgaWYgKHJlc291cmNlLnhociAmJiByZXNvdXJjZS54aHJUeXBlID09PSBSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRS5CTE9CKSB7XG4gICAgICAgICAgICAvLyBpZiB0aGVyZSBpcyBubyBibG9iIHN1cHBvcnQgd2UgcHJvYmFibHkgZ290IGEgYmluYXJ5IHN0cmluZyBiYWNrXG4gICAgICAgICAgICBpZiAoIXdpbmRvdy5CbG9iIHx8IHR5cGVvZiByZXNvdXJjZS5kYXRhID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgICAgIHZhciB0eXBlID0gcmVzb3VyY2UueGhyLmdldFJlc3BvbnNlSGVhZGVyKCdjb250ZW50LXR5cGUnKTtcblxuICAgICAgICAgICAgICAgIC8vIHRoaXMgaXMgYW4gaW1hZ2UsIGNvbnZlcnQgdGhlIGJpbmFyeSBzdHJpbmcgaW50byBhIGRhdGEgdXJsXG4gICAgICAgICAgICAgICAgaWYgKHR5cGUgJiYgdHlwZS5pbmRleE9mKCdpbWFnZScpID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc291cmNlLmRhdGEgPSBuZXcgSW1hZ2UoKTtcbiAgICAgICAgICAgICAgICAgICAgcmVzb3VyY2UuZGF0YS5zcmMgPSAnZGF0YTonICsgdHlwZSArICc7YmFzZTY0LCcgKyBiNjQuZW5jb2RlQmluYXJ5KHJlc291cmNlLnhoci5yZXNwb25zZVRleHQpO1xuXG4gICAgICAgICAgICAgICAgICAgIHJlc291cmNlLmlzSW1hZ2UgPSB0cnVlO1xuXG4gICAgICAgICAgICAgICAgICAgIC8vIHdhaXQgdW50aWwgdGhlIGltYWdlIGxvYWRzIGFuZCB0aGVuIGNhbGxiYWNrXG4gICAgICAgICAgICAgICAgICAgIHJlc291cmNlLmRhdGEub25sb2FkID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVzb3VyY2UuZGF0YS5vbmxvYWQgPSBudWxsO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBuZXh0KCk7XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gaWYgY29udGVudCB0eXBlIHNheXMgdGhpcyBpcyBhbiBpbWFnZSwgdGhlbiB3ZSBzaG91bGQgdHJhbnNmb3JtIHRoZSBibG9iIGludG8gYW4gSW1hZ2Ugb2JqZWN0XG4gICAgICAgICAgICBlbHNlIGlmIChyZXNvdXJjZS5kYXRhLnR5cGUuaW5kZXhPZignaW1hZ2UnKSA9PT0gMCkge1xuICAgICAgICAgICAgICAgIHZhciBzcmMgPSBVUkwuY3JlYXRlT2JqZWN0VVJMKHJlc291cmNlLmRhdGEpO1xuXG4gICAgICAgICAgICAgICAgcmVzb3VyY2UuYmxvYiA9IHJlc291cmNlLmRhdGE7XG4gICAgICAgICAgICAgICAgcmVzb3VyY2UuZGF0YSA9IG5ldyBJbWFnZSgpO1xuICAgICAgICAgICAgICAgIHJlc291cmNlLmRhdGEuc3JjID0gc3JjO1xuXG4gICAgICAgICAgICAgICAgcmVzb3VyY2UuaXNJbWFnZSA9IHRydWU7XG5cbiAgICAgICAgICAgICAgICAvLyBjbGVhbnVwIHRoZSBubyBsb25nZXIgdXNlZCBibG9iIGFmdGVyIHRoZSBpbWFnZSBsb2Fkc1xuICAgICAgICAgICAgICAgIHJlc291cmNlLmRhdGEub25sb2FkID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICBVUkwucmV2b2tlT2JqZWN0VVJMKHNyYyk7XG4gICAgICAgICAgICAgICAgICAgIHJlc291cmNlLmRhdGEub25sb2FkID0gbnVsbDtcblxuICAgICAgICAgICAgICAgICAgICBuZXh0KCk7XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIG5leHQoKTtcbiAgICAgICAgfVxuICAgIH07XG59O1xuIiwibW9kdWxlLmV4cG9ydHM9e1xuICBcIm5hbWVcIjogXCJwaXhpLmpzXCIsXG4gIFwidmVyc2lvblwiOiBcIjMuMC4xMC1kZXZcIixcbiAgXCJkZXNjcmlwdGlvblwiOiBcIlBpeGkuanMgaXMgYSBmYXN0IGxpZ2h0d2VpZ2h0IDJEIGxpYnJhcnkgdGhhdCB3b3JrcyBhY3Jvc3MgYWxsIGRldmljZXMuXCIsXG4gIFwiYXV0aG9yXCI6IFwiTWF0IEdyb3Zlc1wiLFxuICBcImNvbnRyaWJ1dG9yc1wiOiBbXG4gICAgXCJDaGFkIEVuZ2xlciA8Y2hhZEBwYW50aGVyZGV2LmNvbT5cIixcbiAgICBcIlJpY2hhcmQgRGF2ZXkgPHJkYXZleUBnbWFpbC5jb20+XCJcbiAgXSxcbiAgXCJtYWluXCI6IFwiLi9zcmMvaW5kZXguanNcIixcbiAgXCJob21lcGFnZVwiOiBcImh0dHA6Ly9nb29kYm95ZGlnaXRhbC5jb20vXCIsXG4gIFwiYnVnc1wiOiBcImh0dHBzOi8vZ2l0aHViLmNvbS9waXhpanMvcGl4aS5qcy9pc3N1ZXNcIixcbiAgXCJsaWNlbnNlXCI6IFwiTUlUXCIsXG4gIFwicmVwb3NpdG9yeVwiOiB7XG4gICAgXCJ0eXBlXCI6IFwiZ2l0XCIsXG4gICAgXCJ1cmxcIjogXCJodHRwczovL2dpdGh1Yi5jb20vcGl4aWpzL3BpeGkuanMuZ2l0XCJcbiAgfSxcbiAgXCJzY3JpcHRzXCI6IHtcbiAgICBcInN0YXJ0XCI6IFwiZ3VscCAmJiBndWxwIHdhdGNoXCIsXG4gICAgXCJ0ZXN0XCI6IFwiZ3VscCAmJiB0ZXN0ZW0gY2lcIixcbiAgICBcImJ1aWxkXCI6IFwiZ3VscFwiLFxuICAgIFwiZG9jc1wiOiBcImpzZG9jIC1jIC4vZ3VscC91dGlsL2pzZG9jLmNvbmYuanNvbiAtUiBSRUFETUUubWRcIlxuICB9LFxuICBcImZpbGVzXCI6IFtcbiAgICBcImJpbi9cIixcbiAgICBcInNyYy9cIixcbiAgICBcIkNPTlRSSUJVVElORy5tZFwiLFxuICAgIFwiTElDRU5TRVwiLFxuICAgIFwicGFja2FnZS5qc29uXCIsXG4gICAgXCJSRUFETUUubWRcIlxuICBdLFxuICBcImRlcGVuZGVuY2llc1wiOiB7XG4gICAgXCJhc3luY1wiOiBcIl4xLjUuMFwiLFxuICAgIFwiYnJmc1wiOiBcIl4xLjQuMVwiLFxuICAgIFwiZWFyY3V0XCI6IFwiXjIuMC43XCIsXG4gICAgXCJldmVudGVtaXR0ZXIzXCI6IFwiXjEuMS4xXCIsXG4gICAgXCJvYmplY3QtYXNzaWduXCI6IFwiXjQuMC4xXCIsXG4gICAgXCJwaXhpLWdsLWNvcmVcIjogXCJnaXQraHR0cHM6Ly9naXRodWIuY29tL0dvb2RCb3lEaWdpdGFsL3BpeGktZ2wtY29yZS5naXRcIixcbiAgICBcInJlc291cmNlLWxvYWRlclwiOiBcIl4xLjYuNFwiXG4gIH0sXG4gIFwiZGV2RGVwZW5kZW5jaWVzXCI6IHtcbiAgICBcImJyb3dzZXJpZnlcIjogXCJeMTEuMS4wXCIsXG4gICAgXCJjaGFpXCI6IFwiXjMuMi4wXCIsXG4gICAgXCJkZWxcIjogXCJeMi4wLjJcIixcbiAgICBcImd1bHBcIjogXCJeMy45LjBcIixcbiAgICBcImd1bHAtY2FjaGVkXCI6IFwiXjEuMS4wXCIsXG4gICAgXCJndWxwLWNvbmNhdFwiOiBcIl4yLjYuMFwiLFxuICAgIFwiZ3VscC1kZWJ1Z1wiOiBcIl4yLjEuMFwiLFxuICAgIFwiZ3VscC1oZWFkZXJcIjogXCJeMS43LjFcIixcbiAgICBcImd1bHAtanNoaW50XCI6IFwiXjEuMTEuMlwiLFxuICAgIFwiZ3VscC1taXJyb3JcIjogXCJeMC40LjBcIixcbiAgICBcImd1bHAtcGx1bWJlclwiOiBcIl4xLjAuMVwiLFxuICAgIFwiZ3VscC1yZW5hbWVcIjogXCJeMS4yLjJcIixcbiAgICBcImd1bHAtc291cmNlbWFwc1wiOiBcIl4xLjUuMlwiLFxuICAgIFwiZ3VscC11Z2xpZnlcIjogXCJeMS40LjFcIixcbiAgICBcImd1bHAtdXRpbFwiOiBcIl4zLjAuNlwiLFxuICAgIFwiamFndWFyanMtanNkb2NcIjogXCJnaXQraHR0cHM6Ly9naXRodWIuY29tL2Rhdmlkc2hpbWpzL2phZ3VhcmpzLWpzZG9jLmdpdFwiLFxuICAgIFwianNkb2NcIjogXCJeMy4zLjJcIixcbiAgICBcImpzaGludC1zdW1tYXJ5XCI6IFwiXjAuNC4wXCIsXG4gICAgXCJtaW5pbWlzdFwiOiBcIl4xLjIuMFwiLFxuICAgIFwibW9jaGFcIjogXCJeMi4zLjJcIixcbiAgICBcInJlcXVpcmUtZGlyXCI6IFwiXjAuMy4wXCIsXG4gICAgXCJydW4tc2VxdWVuY2VcIjogXCJeMS4xLjJcIixcbiAgICBcInRlc3RlbVwiOiBcIl4wLjkuNFwiLFxuICAgIFwidmlueWwtYnVmZmVyXCI6IFwiXjEuMC4wXCIsXG4gICAgXCJ2aW55bC1zb3VyY2Utc3RyZWFtXCI6IFwiXjEuMS4wXCIsXG4gICAgXCJ3YXRjaGlmeVwiOiBcIl4zLjQuMFwiXG4gIH0sXG4gIFwiYnJvd3NlcmlmeVwiOiB7XG4gICAgXCJ0cmFuc2Zvcm1cIjogW1xuICAgICAgXCJicmZzXCJcbiAgICBdXG4gIH1cbn1cbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vY29yZScpO1xuXG4vLyBhZGQgc29tZSBleHRyYSB2YXJpYWJsZXMgdG8gdGhlIGNvbnRhaW5lci4uXG5PYmplY3QuYXNzaWduKFxuICAgIGNvcmUuRGlzcGxheU9iamVjdC5wcm90b3R5cGUsXG4gICAgcmVxdWlyZSgnLi9hY2Nlc3NpYmxlVGFyZ2V0Jylcbik7XG5cblxuLyoqXG4gKiBUaGUgQWNjZXNzaWJpbGl0eSBtYW5hZ2VyIHJlYWNyZWF0ZXMgdGhlIGFiaWxpdHkgdG8gdGFiIGFuZCBhbmQgaGF2ZSBjb250ZW50IHJlYWQgYnkgc2NyZWVuIHJlYWRlcnMuIFRoaXMgaXMgdmVyeSBpbXBvcnRhbnQgYXMgaXQgY2FuIHBvc3NpYmx5IGhlbHAgcGVvcGxlIHdpdGggZGlzYWJpbGl0aWVzIGFjY2VzcyBwaXhpIGNvbnRlbnQuXG4gKiBNdWNoIGxpa2UgaW50ZXJhY3Rpb24gYW55IERpc3BsYXlPYmplY3QgY2FuIGJlIG1hZGUgYWNjZXNzaWJsZS4gVGhpcyBtYW5hZ2VyIHdpbGwgbWFwIHRoZSBldmVudHMgYXMgaWYgdGhlIG1vdXNlIHdhcyBiZWluZyB1c2VkLCBtaW5pbWl6aW5nIHRoZSBlZmZlcm90IHJlcXVpcmVkIHRvIGltcGxlbWVudC5cbiAqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuQ2FudmFzUmVuZGVyZXJ8UElYSS5XZWJHTFJlbmRlcmVyfSBBIHJlZmVyZW5jZSB0byB0aGUgY3VycmVudCByZW5kZXJlclxuICovXG5mdW5jdGlvbiBBY2Nlc3NpYmlsaXR5TWFuYWdlcihyZW5kZXJlcilcbntcblx0Ly8gZmlyc3Qgd2UgY3JlYXRlIGEgZGl2IHRoYXQgd2lsbCBzaXQgb3ZlciB0aGUgcGl4aSBlbGVtZW50LiBUaGlzIGlzIHdoZXJlIHRoZSBkaXYgb3ZlcmxheXMgd2lsbCBnby5cbiAgICB2YXIgZGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgXG4gICAgZGl2LnN0eWxlLndpZHRoID0gMTAwICsgJ3B4JztcbiAgICBkaXYuc3R5bGUuaGVpZ2h0ID0gMTAwICsgJ3B4JztcbiAgICBkaXYuc3R5bGUucG9zaXRpb24gPSAnYWJzb2x1dGUnO1xuICAgIGRpdi5zdHlsZS50b3AgPSAwO1xuICAgIGRpdi5zdHlsZS5sZWZ0ID0gMDtcbiAgIC8vXG4gICAgZGl2LnN0eWxlLnpJbmRleCA9IDI7XG4gICBcdFxuICAgXHQvKipcbiAgIFx0ICogVGhpcyBpcyB0aGUgZG9tIGVsZW1lbnQgdGhhdCB3aWxsIHNpdCBvdmVyIHRoZSBwaXhpIGVsZW1lbnQuIFRoaXMgaXMgd2hlcmUgdGhlIGRpdiBvdmVybGF5cyB3aWxsIGdvLlxuICAgXHQgKiBcbiAgIFx0ICogQHR5cGUge0hUTUxFbGVtZW50fVxuICAgXHQgKiBAcHJpdmF0ZVxuICAgXHQgKi9cbiAgIFx0dGhpcy5kaXYgPSBkaXY7XG5cbiAgIFx0LyoqXG4gICBcdCAqIEEgc2ltcGxlIHBvb2wgZm9yIHN0b3JpbmcgZGl2cy5cbiAgIFx0ICogXG4gICBcdCAqIEB0eXBlIHtBcnJheX1cbiAgIFx0ICogQHByaXZhdGVcbiAgIFx0ICovXG4gXHR0aGlzLnBvb2wgPSBbXTtcblxuIFx0LyoqXG4gXHQgKiBUaGlzIGlzIGEgdGljayB1c2VkIHRvIGNoZWNrIGlmIGFuIG9iamVjdCBpcyBubyBsb25nZXIgYmVpbmcgcmVuZGVyZWQuXG4gXHQgKiBcbiBcdCAqIEB0eXBlIHtOdW1iZXJ9XG4gXHQgKiBAcHJpdmF0ZVxuIFx0ICovXG4gICBcdHRoaXMucmVuZGVySWQgPSAwO1xuXG4gICBcdC8qKlxuICAgXHQgKiBTZXR0aW5nIHRoaXMgdG8gdHJ1ZSB3aWxsIHZpc3VhbGx5IHNob3cgdGhlIGRpdnNcbiAgIFx0ICogXG4gICBcdCAqIEB0eXBlIHtCb29sZWFufVxuICAgXHQgKi9cbiAgIFx0dGhpcy5kZWJ1ZyA9IGZhbHNlO1xuXG4gIFx0LyoqXG4gICAgICogVGhlIHJlbmRlcmVyIHRoaXMgYWNjZXNzaWJpbGl0eSBtYW5hZ2VyIHdvcmtzIGZvci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuU3lzdGVtUmVuZGVyZXJ9XG4gICAgICovXG4gICBcdHRoaXMucmVuZGVyZXIgPSByZW5kZXJlcjtcblxuICAgXHQvKipcbiAgICAgKiBUaGUgYXJyYXkgb2YgY3VycmVudGx5IGFjdGl2ZSBhY2Nlc3NpYmxlIGl0ZW1zLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7QXJyYXl9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgIFx0dGhpcy5jaGlsZHJlbiA9IFtdO1xuICAgXHRcbiAgIFx0LyoqXG4gICAgICogcHJlIGJpbmQgdGhlIGZ1bmN0aW9ucy4uXG4gICAgICovXG4gICBcdHRoaXMuX29uS2V5RG93biA9IHRoaXMuX29uS2V5RG93bi5iaW5kKHRoaXMpO1xuICAgXHR0aGlzLl9vbk1vdXNlTW92ZSA9IHRoaXMuX29uTW91c2VNb3ZlLmJpbmQodGhpcyk7XG4gICBcdFxuICAgXHQvKipcbiAgICAgKiBzdG9yZXMgdGhlIHN0YXRlIG9mIHRoZSBtYW5hZ2VyLiBJZiB0aGVyZSBhcmUgbm8gYWNjZXNzaWJsZSBvYmplY3RzIG9yIHRoZSBtb3VzZSBpcyBtb3ZpbmcgdGhlIHdpbGwgYmUgZmFsc2UuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtBcnJheX1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgXHR0aGlzLmlzQWN0aXZlID0gZmFsc2U7XG5cblxuICAgXHQvLyBsZXQgbGlzdGVuIGZvciB0YWIuLiBvbmNlIHByZXNzZWQgd2UgY2FuIGZpcmUgdXAgYW5kIHNob3cgdGhlIGFjY2Vzc2liaWxpdHkgbGF5ZXJcbiAgIFx0d2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLCB0aGlzLl9vbktleURvd24sIGZhbHNlKTtcbn1cblxuXG5BY2Nlc3NpYmlsaXR5TWFuYWdlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBBY2Nlc3NpYmlsaXR5TWFuYWdlcjtcbm1vZHVsZS5leHBvcnRzID0gQWNjZXNzaWJpbGl0eU1hbmFnZXI7XG5cbi8qKlxuICogQWN0aXZhdGluZyB3aWxsIGNhdXNlIHRoZSBBY2Nlc3NpYmlsaXR5IGxheWVyIHRvIGJlIHNob3duLiBUaGlzIGlzIGNhbGxlZCB3aGVuIGEgdXNlciBwcmVzZXMgdGhlIHRhYiBrZXlcbiAqIEBwcml2YXRlXG4gKi9cbkFjY2Vzc2liaWxpdHlNYW5hZ2VyLnByb3RvdHlwZS5hY3RpdmF0ZSA9IGZ1bmN0aW9uKClcbntcblx0aWYodGhpcy5pc0FjdGl2ZSlcblx0e1xuXHRcdHJldHVybjtcblx0fVxuXG5cdHRoaXMuaXNBY3RpdmUgPSB0cnVlO1xuXG5cdHdpbmRvdy5kb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdtb3VzZW1vdmUnLCB0aGlzLl9vbk1vdXNlTW92ZSwgdHJ1ZSk7XG5cdHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdrZXlkb3duJywgdGhpcy5fb25LZXlEb3duLCBmYWxzZSk7XG5cblx0dGhpcy5yZW5kZXJlci5vbigncG9zdHJlbmRlcicsIHRoaXMudXBkYXRlLCB0aGlzKTtcblxuXHR0aGlzLnJlbmRlcmVyLnZpZXcucGFyZW50Tm9kZS5hcHBlbmRDaGlsZCh0aGlzLmRpdik7XHRcbn07XG5cbi8qKlxuICogRGVhY3RpdmF0aW5nIHdpbGwgY2F1c2UgdGhlIEFjY2Vzc2liaWxpdHkgbGF5ZXIgdG8gYmUgaGlkZGVuLiBUaGlzIGlzIGNhbGxlZCB3aGVuIGEgdXNlciBtb3ZlcyB0aGUgbW91c2VcbiAqIEBwcml2YXRlXG4gKi9cbkFjY2Vzc2liaWxpdHlNYW5hZ2VyLnByb3RvdHlwZS5kZWFjdGl2YXRlID0gZnVuY3Rpb24oKVxue1xuXHRpZighdGhpcy5pc0FjdGl2ZSlcblx0e1xuXHRcdHJldHVybjtcblx0fVxuXG5cdHRoaXMuaXNBY3RpdmUgPSBmYWxzZTtcblxuXHR3aW5kb3cuZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignbW91c2Vtb3ZlJywgdGhpcy5fb25Nb3VzZU1vdmUpO1xuXHR3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsIHRoaXMuX29uS2V5RG93biwgZmFsc2UpO1xuXG5cdHRoaXMucmVuZGVyZXIub2ZmKCdwb3N0cmVuZGVyJywgdGhpcy51cGRhdGUpO1xuXG5cdHRoaXMuZGl2LnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodGhpcy5kaXYpO1xuXG59O1xuXG4vKipcbiAqIFRoaXMgcmVjdXJzaXZlIGZ1bmN0aW9uIHdpbGwgcnVuIHRocm91Z2h0IGhlIHNjZW5lIGdyYXBoIGFuZCBhZGQgYW55IG5ldyBhY2Nlc3NpYmxlIG9iamVjdHMgdG8gdGhlIERPTSBsYXllci5cbiAqIEBwYXJhbSBlbGVtZW50IHtQSVhJLkNvbnRhaW5lcnxQSVhJLlNwcml0ZXxQSVhJLmV4dHJhcy5UaWxpbmdTcHJpdGV9IHRoZSBEaXNwbGF5T2JqZWN0IHRvIGNoZWNrLlxuICogQHByaXZhdGVcbiAqL1xuQWNjZXNzaWJpbGl0eU1hbmFnZXIucHJvdG90eXBlLnVwZGF0ZUFjY2Vzc2libGVPYmplY3RzID0gZnVuY3Rpb24oZGlzcGxheU9iamVjdClcbntcblx0aWYoIWRpc3BsYXlPYmplY3QudmlzaWJsZSlcblx0e1xuXHRcdHJldHVybjtcblx0fVxuXG5cdGlmKGRpc3BsYXlPYmplY3QuYWNjZXNzaWJsZSAmJiBkaXNwbGF5T2JqZWN0LmludGVyYWN0aXZlKVxuXHR7XG5cdFx0aWYoIWRpc3BsYXlPYmplY3QuX2FjY2Vzc2libGVBY3RpdmUpXG5cdFx0e1xuXHRcdFx0dGhpcy5hZGRDaGlsZChkaXNwbGF5T2JqZWN0KTtcblx0XHR9XG5cdCAgIFx0XG5cdCAgIFx0ZGlzcGxheU9iamVjdC5yZW5kZXJJZCA9IHRoaXMucmVuZGVySWQ7XG5cdH1cblxuXHR2YXIgY2hpbGRyZW4gPSBkaXNwbGF5T2JqZWN0LmNoaWxkcmVuO1xuXG5cdGZvciAodmFyIGkgPSBjaGlsZHJlbi5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuXHRcdFxuXHRcdHRoaXMudXBkYXRlQWNjZXNzaWJsZU9iamVjdHMoY2hpbGRyZW5baV0pO1xuXHR9XG59O1xuXG5cbi8qKlxuICogQmVmb3JlIGVhY2ggcmVuZGVyIHRoaXMgZnVuY3Rpb24gd2lsbCBlbnN1cmUgdGhhdCBhbGwgZGl2cyBhcmUgbWFwcGVkIGNvcnJlY3RseSB0byB0aGVpciBEaXNwbGF5T2JqZWN0c1xuICogQHByaXZhdGVcbiAqL1xuQWNjZXNzaWJpbGl0eU1hbmFnZXIucHJvdG90eXBlLnVwZGF0ZSA9IGZ1bmN0aW9uKClcbntcblxuXHQvLyB1cGRhdGUgY2hpbGRyZW4uLi5cblx0dGhpcy51cGRhdGVBY2Nlc3NpYmxlT2JqZWN0cyh0aGlzLnJlbmRlcmVyLl9sYXN0T2JqZWN0UmVuZGVyZWQpO1xuXG5cdHZhciByZWN0ID0gdGhpcy5yZW5kZXJlci52aWV3LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuXHR2YXIgc3ggPSByZWN0LndpZHRoICAvIHRoaXMucmVuZGVyZXIud2lkdGg7XG5cdHZhciBzeSA9IHJlY3QuaGVpZ2h0IC8gdGhpcy5yZW5kZXJlci5oZWlnaHQ7XG5cblx0dmFyIGRpdiA9IHRoaXMuZGl2O1xuXG5cdGRpdi5zdHlsZS5sZWZ0ID0gcmVjdC5sZWZ0ICsgJ3B4Jztcblx0ZGl2LnN0eWxlLnRvcCA9IHJlY3QudG9wICsgJ3B4Jztcblx0ZGl2LnN0eWxlLndpZHRoID0gdGhpcy5yZW5kZXJlci53aWR0aCArICdweCc7XG5cdGRpdi5zdHlsZS5oZWlnaHQgPSB0aGlzLnJlbmRlcmVyLmhlaWdodCArICdweCc7XG5cblx0Zm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmNoaWxkcmVuLmxlbmd0aDsgaSsrKVxuXHR7XG5cblx0XHR2YXIgY2hpbGQgPSB0aGlzLmNoaWxkcmVuW2ldO1xuXG5cdFx0aWYoY2hpbGQucmVuZGVySWQgIT09IHRoaXMucmVuZGVySWQpXG5cdFx0e1xuXHRcdFx0Y2hpbGQuX2FjY2Vzc2libGVBY3RpdmUgPSBmYWxzZTtcblxuICAgICAgICAgICAgY29yZS51dGlscy5yZW1vdmVJdGVtcyh0aGlzLmNoaWxkcmVuLCBpLCAxKTtcblx0XHRcdHRoaXMuZGl2LnJlbW92ZUNoaWxkKCBjaGlsZC5fYWNjZXNzaWJsZURpdiApO1xuXHRcdFx0dGhpcy5wb29sLnB1c2goY2hpbGQuX2FjY2Vzc2libGVEaXYpO1xuXHRcdFx0Y2hpbGQuX2FjY2Vzc2libGVEaXYgPSBudWxsO1xuXG5cdFx0XHRpLS07XG5cblx0XHRcdGlmKHRoaXMuY2hpbGRyZW4ubGVuZ3RoID09PSAwKVxuXHRcdFx0e1xuXHRcdFx0XHR0aGlzLmRlYWN0aXZhdGUoKTtcblx0XHRcdH1cblx0XHR9XG5cdFx0ZWxzZVxuXHRcdHtcblx0XHRcdC8vIG1hcCBkaXYgdG8gZGlzcGxheS4uXG5cdFx0XHRkaXYgPSBjaGlsZC5fYWNjZXNzaWJsZURpdjtcblx0XHRcdHZhciBoaXRBcmVhID0gY2hpbGQuaGl0QXJlYTtcblx0XHRcdHZhciB3dCA9IGNoaWxkLndvcmxkVHJhbnNmb3JtO1xuXG5cdFx0XHRpZihjaGlsZC5oaXRBcmVhKVxuXHRcdFx0e1xuXHRcdFx0XHRkaXYuc3R5bGUubGVmdCA9ICgod3QudHggKyAoaGl0QXJlYS54ICogd3QuYSkpICogc3gpICsgJ3B4Jztcblx0XHRcdFx0ZGl2LnN0eWxlLnRvcCA9ICAoKHd0LnR5ICsgKGhpdEFyZWEueSAqIHd0LmQpKSAqIHN5KSArICAncHgnO1xuXG5cdFx0XHRcdGRpdi5zdHlsZS53aWR0aCA9IChoaXRBcmVhLndpZHRoICogd3QuYSAqIHN4KSArICdweCc7XG5cdFx0XHRcdGRpdi5zdHlsZS5oZWlnaHQgPSAoaGl0QXJlYS5oZWlnaHQgKiB3dC5kICogc3kpICsgJ3B4Jztcblx0XHRcdFxuXHRcdFx0fVxuXHRcdFx0ZWxzZVxuXHRcdFx0e1xuXHRcdFx0XHRoaXRBcmVhID0gY2hpbGQuZ2V0Qm91bmRzKCk7XG5cblx0XHRcdFx0dGhpcy5jYXBIaXRBcmVhKGhpdEFyZWEpO1xuXG5cdFx0XHRcdGRpdi5zdHlsZS5sZWZ0ID0gKGhpdEFyZWEueCAqIHN4KSArICdweCc7XG5cdFx0XHRcdGRpdi5zdHlsZS50b3AgPSAgKGhpdEFyZWEueSAqIHN5KSArICAncHgnO1xuXG5cdFx0XHRcdGRpdi5zdHlsZS53aWR0aCA9IChoaXRBcmVhLndpZHRoICogc3gpICsgJ3B4Jztcblx0XHRcdFx0ZGl2LnN0eWxlLmhlaWdodCA9IChoaXRBcmVhLmhlaWdodCAqIHN5KSArICdweCc7XG5cdFx0XHR9XHRcdFxuXHRcdH1cblx0fVxuXG5cdC8vIGluY3JlbWVudCB0aGUgcmVuZGVyIGlkLi5cblx0dGhpcy5yZW5kZXJJZCsrO1xufTtcblxuQWNjZXNzaWJpbGl0eU1hbmFnZXIucHJvdG90eXBlLmNhcEhpdEFyZWEgPSBmdW5jdGlvbiAoaGl0QXJlYSlcbntcbiAgICBpZiAoaGl0QXJlYS54IDwgMClcbiAgICB7XG4gICAgICAgIGhpdEFyZWEud2lkdGggKz0gaGl0QXJlYS54O1xuICAgICAgICBoaXRBcmVhLnggPSAwO1xuICAgIH1cblxuICAgIGlmIChoaXRBcmVhLnkgPCAwKVxuICAgIHtcbiAgICAgICAgaGl0QXJlYS5oZWlnaHQgKz0gaGl0QXJlYS55O1xuICAgICAgICBoaXRBcmVhLnkgPSAwO1xuICAgIH1cblxuICAgIGlmICggaGl0QXJlYS54ICsgaGl0QXJlYS53aWR0aCA+IHRoaXMucmVuZGVyZXIud2lkdGggKVxuICAgIHtcbiAgICAgICAgaGl0QXJlYS53aWR0aCA9IHRoaXMucmVuZGVyZXIud2lkdGggLSBoaXRBcmVhLng7XG4gICAgfVxuXG4gICAgaWYgKCBoaXRBcmVhLnkgKyBoaXRBcmVhLmhlaWdodCA+IHRoaXMucmVuZGVyZXIuaGVpZ2h0IClcbiAgICB7XG4gICAgICAgIGhpdEFyZWEuaGVpZ2h0ID0gdGhpcy5yZW5kZXJlci5oZWlnaHQgLSBoaXRBcmVhLnk7XG4gICAgfVxufTtcblxuXG4vKipcbiAqIEFkZHMgYSBEaXNwbGF5T2JqZWN0IHRvIHRoZSBhY2Nlc3NpYmlsaXR5IG1hbmFnZXJcbiAqIEBwcml2YXRlXG4gKi9cbkFjY2Vzc2liaWxpdHlNYW5hZ2VyLnByb3RvdHlwZS5hZGRDaGlsZCA9IGZ1bmN0aW9uKGRpc3BsYXlPYmplY3QpXG57XG4vL1x0dGhpcy5hY3RpdmF0ZSgpO1xuXHRcblx0dmFyIGRpdiA9IHRoaXMucG9vbC5wb3AoKTtcblxuXHRpZighZGl2KVxuXHR7XG5cdFx0ZGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYnV0dG9uJyk7IFxuXG5cdCAgICBkaXYuc3R5bGUud2lkdGggPSAxMDAgKyAncHgnO1xuXHQgICAgZGl2LnN0eWxlLmhlaWdodCA9IDEwMCArICdweCc7XG5cdCAgICBkaXYuc3R5bGUuYmFja2dyb3VuZENvbG9yID0gdGhpcy5kZWJ1ZyA/ICdyZ2JhKDI1NSwwLDAsMC41KScgOiAndHJhbnNwYXJlbnQnO1xuXHQgICAgZGl2LnN0eWxlLnBvc2l0aW9uID0gJ2Fic29sdXRlJztcblx0ICAgIGRpdi5zdHlsZS56SW5kZXggPSAyO1xuXHQgICAgZGl2LnN0eWxlLmJvcmRlclN0eWxlID0gJ25vbmUnO1xuXG5cdCAgICBcblx0ICAgIGRpdi5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIHRoaXMuX29uQ2xpY2suYmluZCh0aGlzKSk7XG5cdCAgICBkaXYuYWRkRXZlbnRMaXN0ZW5lcignZm9jdXMnLCB0aGlzLl9vbkZvY3VzLmJpbmQodGhpcykpO1xuXHQgICAgZGl2LmFkZEV2ZW50TGlzdGVuZXIoJ2ZvY3Vzb3V0JywgdGhpcy5fb25Gb2N1c091dC5iaW5kKHRoaXMpKTtcblx0fVxuXHQgICBcdFxuXG5cblxuXHRkaXYudGl0bGUgPSBkaXNwbGF5T2JqZWN0LmFjY2Vzc2libGVUaXRsZSB8fCAnZGlzcGxheU9iamVjdCAnICsgdGhpcy50YWJJbmRleDtcblxuXHQvL1xuXHRcblx0ZGlzcGxheU9iamVjdC5fYWNjZXNzaWJsZUFjdGl2ZSA9IHRydWU7XG5cdGRpc3BsYXlPYmplY3QuX2FjY2Vzc2libGVEaXYgPSBkaXY7XG5cdGRpdi5kaXNwbGF5T2JqZWN0ID0gZGlzcGxheU9iamVjdDtcblxuXG5cdHRoaXMuY2hpbGRyZW4ucHVzaChkaXNwbGF5T2JqZWN0KTtcblx0dGhpcy5kaXYuYXBwZW5kQ2hpbGQoIGRpc3BsYXlPYmplY3QuX2FjY2Vzc2libGVEaXYgKTtcblx0ZGlzcGxheU9iamVjdC5fYWNjZXNzaWJsZURpdi50YWJJbmRleCA9IGRpc3BsYXlPYmplY3QudGFiSW5kZXg7XG59O1xuXG5cbi8qKlxuICogTWFwcyB0aGUgZGl2IGJ1dHRvbiBwcmVzcyB0byBwaXhpJ3MgSW50ZXJhY3Rpb25NYW5hZ2VyIChjbGljaylcbiAqIEBwcml2YXRlXG4gKi9cbkFjY2Vzc2liaWxpdHlNYW5hZ2VyLnByb3RvdHlwZS5fb25DbGljayA9IGZ1bmN0aW9uKGUpXG57XG5cdHZhciBpbnRlcmFjdGlvbk1hbmFnZXIgPSB0aGlzLnJlbmRlcmVyLnBsdWdpbnMuaW50ZXJhY3Rpb247XG5cdGludGVyYWN0aW9uTWFuYWdlci5kaXNwYXRjaEV2ZW50KGUudGFyZ2V0LmRpc3BsYXlPYmplY3QsICdjbGljaycsIGludGVyYWN0aW9uTWFuYWdlci5ldmVudERhdGEpO1xufTtcblxuLyoqXG4gKiBNYXBzIHRoZSBkaXYgZm9jdXMgZXZlbnRzIHRvIHBpeGlzIEludGVyYWN0aW9uTWFuYWdlciAobW91c2VvdmVyKVxuICogQHByaXZhdGVcbiAqL1xuQWNjZXNzaWJpbGl0eU1hbmFnZXIucHJvdG90eXBlLl9vbkZvY3VzID0gZnVuY3Rpb24oZSlcbntcblx0dmFyIGludGVyYWN0aW9uTWFuYWdlciA9IHRoaXMucmVuZGVyZXIucGx1Z2lucy5pbnRlcmFjdGlvbjtcblx0aW50ZXJhY3Rpb25NYW5hZ2VyLmRpc3BhdGNoRXZlbnQoZS50YXJnZXQuZGlzcGxheU9iamVjdCwgJ21vdXNlb3ZlcicsIGludGVyYWN0aW9uTWFuYWdlci5ldmVudERhdGEpO1xufTtcblxuLyoqXG4gKiBNYXBzIHRoZSBkaXYgZm9jdXMgZXZlbnRzIHRvIHBpeGlzIEludGVyYWN0aW9uTWFuYWdlciAobW91c2VvdXQpXG4gKiBAcHJpdmF0ZVxuICovXG5BY2Nlc3NpYmlsaXR5TWFuYWdlci5wcm90b3R5cGUuX29uRm9jdXNPdXQgPSBmdW5jdGlvbihlKVxue1xuXHR2YXIgaW50ZXJhY3Rpb25NYW5hZ2VyID0gdGhpcy5yZW5kZXJlci5wbHVnaW5zLmludGVyYWN0aW9uO1xuXHRpbnRlcmFjdGlvbk1hbmFnZXIuZGlzcGF0Y2hFdmVudChlLnRhcmdldC5kaXNwbGF5T2JqZWN0LCAnbW91c2VvdXQnLCBpbnRlcmFjdGlvbk1hbmFnZXIuZXZlbnREYXRhKTtcbn07XG5cbi8qKlxuICogSXMgY2FsbGVkIHdoZW4gYSBrZXkgaXMgcHJlc3NlZFxuICpcbiAqIEBwcml2YXRlXG4gKi9cbkFjY2Vzc2liaWxpdHlNYW5hZ2VyLnByb3RvdHlwZS5fb25LZXlEb3duID0gZnVuY3Rpb24oZSlcbntcblx0aWYoZS5rZXlDb2RlICE9PSA5KVxuXHR7XG5cdFx0cmV0dXJuO1xuXHR9XG5cblx0dGhpcy5hY3RpdmF0ZSgpO1xufTtcblxuLyoqXG4gKiBJcyBjYWxsZWQgd2hlbiB0aGUgbW91c2UgbW92ZXMgYWNyb3NzIHRoZSByZW5kZXJlciBlbGVtZW50XG4gKlxuICogQHByaXZhdGVcbiAqL1xuQWNjZXNzaWJpbGl0eU1hbmFnZXIucHJvdG90eXBlLl9vbk1vdXNlTW92ZSA9IGZ1bmN0aW9uKClcbntcblx0dGhpcy5kZWFjdGl2YXRlKCk7XG59O1xuXG5cbi8qKlxuICogRGVzdHJveXMgdGhlIGFjY2Vzc2liaWxpdHkgbWFuYWdlclxuICpcbiAqL1xuQWNjZXNzaWJpbGl0eU1hbmFnZXIucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoKSBcbntcblx0dGhpcy5kaXYgPSBudWxsO1xuXG5cdGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5jaGlsZHJlbi5sZW5ndGg7IGkrKylcblx0e1xuXHRcdHRoaXMuY2hpbGRyZW5baV0uZGl2ID0gbnVsbDtcblx0fVxuXG5cdFxuXHR3aW5kb3cuZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignbW91c2Vtb3ZlJywgdGhpcy5fb25Nb3VzZU1vdmUpO1xuXHR3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsIHRoaXMuX29uS2V5RG93bik7XG5cdFx0XG5cdHRoaXMucG9vbCA9IG51bGw7XG5cdHRoaXMuY2hpbGRyZW4gPSBudWxsO1xuXHR0aGlzLnJlbmRlcmVyID0gbnVsbDtcblxufTtcblxuY29yZS5XZWJHTFJlbmRlcmVyLnJlZ2lzdGVyUGx1Z2luKCdhY2Nlc3NpYmlsaXR5JywgQWNjZXNzaWJpbGl0eU1hbmFnZXIpO1xuY29yZS5DYW52YXNSZW5kZXJlci5yZWdpc3RlclBsdWdpbignYWNjZXNzaWJpbGl0eScsIEFjY2Vzc2liaWxpdHlNYW5hZ2VyKTtcblxuIiwiLyoqXG4gKiBEZWZhdWx0IHByb3BlcnR5IHZhbHVlcyBvZiBhY2Nlc3NpYmxlIG9iamVjdHNcbiAqIHVzZWQgYnkge0BsaW5rIFBJWEkuYWNjZXNzaWJpbGl0eS5BY2Nlc3NpYmlsaXR5TWFuYWdlcn0uXG4gKlxuICogQG1peGluXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQGV4YW1wbGVcbiAqICAgICAgZnVuY3Rpb24gTXlPYmplY3QoKSB7fVxuICpcbiAqICAgICAgT2JqZWN0LmFzc2lnbihcbiAqICAgICAgICAgIE15T2JqZWN0LnByb3RvdHlwZSxcbiAqICAgICAgICAgIFBJWEkuYWNjZXNzaWJpbGl0eS5hY2Nlc3NpYmxlVGFyZ2V0XG4gKiAgICAgICk7XG4gKi9cbnZhciBhY2Nlc3NpYmxlVGFyZ2V0ID0ge1xuICAgIFxuICAgIC8qKlxuICAgICAqIEB0b2RvIE5lZWRzIGRvY3MuXG4gICAgICovXG4gICAgYWNjZXNzaWJsZTpmYWxzZSxcblxuICAgIC8qKlxuICAgICAqIEB0b2RvIE5lZWRzIGRvY3MuXG4gICAgICovXG4gICAgYWNjZXNzaWJsZVRpdGxlOm51bGwsXG5cbiAgICAvKipcbiAgICAgKiBAdG9kbyBOZWVkcyBkb2NzLlxuICAgICAqL1xuICAgIHRhYkluZGV4OjAsXG5cbiAgICAvKipcbiAgICAgKiBAdG9kbyBOZWVkcyBkb2NzLlxuICAgICAqL1xuICAgIF9hY2Nlc3NpYmxlQWN0aXZlOmZhbHNlLFxuXG4gICAgLyoqXG4gICAgICogQHRvZG8gTmVlZHMgZG9jcy5cbiAgICAgKi9cbiAgICBfYWNjZXNzaWJsZURpdjpmYWxzZVxuXG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGFjY2Vzc2libGVUYXJnZXQ7XG4iLCIvKipcbiAqIEBmaWxlICAgICAgICBNYWluIGV4cG9ydCBvZiB0aGUgUElYSSBhY2Nlc3NpYmlsaXR5IGxpYnJhcnlcbiAqIEBhdXRob3IgICAgICBNYXQgR3JvdmVzIDxtYXRAZ29vZGJveWRpZ2l0YWwuY29tPlxuICogQGNvcHlyaWdodCAgIDIwMTMtMjAxNSBHb29kQm95RGlnaXRhbFxuICogQGxpY2Vuc2UgICAgIHtAbGluayBodHRwczovL2dpdGh1Yi5jb20vcGl4aWpzL3BpeGkuanMvYmxvYi9tYXN0ZXIvTElDRU5TRXxNSVQgTGljZW5zZX1cbiAqL1xuXG4vKipcbiAqIEBuYW1lc3BhY2UgUElYSS5pbnRlcmFjdGlvblxuICovXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgICBhY2Nlc3NpYmxlVGFyZ2V0OiAgICAgcmVxdWlyZSgnLi9hY2Nlc3NpYmxlVGFyZ2V0JyksXG4gICAgQWNjZXNzaWJpbGl0eU1hbmFnZXI6IHJlcXVpcmUoJy4vQWNjZXNzaWJpbGl0eU1hbmFnZXInKVxufTtcbiIsIi8qKlxuICogQ29uc3RhbnQgdmFsdWVzIHVzZWQgaW4gcGl4aVxuICpcbiAqIEBsZW5kcyBQSVhJXG4gKi9cbnZhciBDT05TVCA9IHtcbiAgICAvKipcbiAgICAgKiBTdHJpbmcgb2YgdGhlIGN1cnJlbnQgUElYSSB2ZXJzaW9uXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQGNvbnN0YW50XG4gICAgICogQHByb3BlcnR5IHtzdHJpbmd9IFZFUlNJT05cbiAgICAgKi9cbiAgICBWRVJTSU9OOiByZXF1aXJlKCcuLi8uLi9wYWNrYWdlLmpzb24nKS52ZXJzaW9uLFxuXG4gICAgLyoqXG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IFBJXzIgLSBUd28gUGlcbiAgICAgKiBAY29uc3RhbnRcbiAgICAgKiBAc3RhdGljXG4gICAgICovXG4gICAgUElfMjogTWF0aC5QSSAqIDIsXG5cbiAgICAvKipcbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gUkFEX1RPX0RFRyAtIENvbnN0YW50IGNvbnZlcnNpb24gZmFjdG9yIGZvciBjb252ZXJ0aW5nIHJhZGlhbnMgdG8gZGVncmVlc1xuICAgICAqIEBjb25zdGFudFxuICAgICAqIEBzdGF0aWNcbiAgICAgKi9cbiAgICBSQURfVE9fREVHOiAxODAgLyBNYXRoLlBJLFxuXG4gICAgLyoqXG4gICAgICogQHByb3BlcnR5IHtOdW1iZXJ9IERFR19UT19SQUQgLSBDb25zdGFudCBjb252ZXJzaW9uIGZhY3RvciBmb3IgY29udmVydGluZyBkZWdyZWVzIHRvIHJhZGlhbnNcbiAgICAgKiBAY29uc3RhbnRcbiAgICAgKiBAc3RhdGljXG4gICAgICovXG4gICAgREVHX1RPX1JBRDogTWF0aC5QSSAvIDE4MCxcblxuICAgIC8qKlxuICAgICAqIFRhcmdldCBmcmFtZXMgcGVyIG1pbGxpc2Vjb25kLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBjb25zdGFudFxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBUQVJHRVRfRlBNUz0wLjA2XG4gICAgICovXG4gICAgVEFSR0VUX0ZQTVM6IDAuMDYsXG5cbiAgICAvKipcbiAgICAgKiBDb25zdGFudCB0byBpZGVudGlmeSB0aGUgUmVuZGVyZXIgVHlwZS5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAY29uc3RhbnRcbiAgICAgKiBAcHJvcGVydHkge29iamVjdH0gUkVOREVSRVJfVFlQRVxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBSRU5ERVJFUl9UWVBFLlVOS05PV05cbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gUkVOREVSRVJfVFlQRS5XRUJHTFxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBSRU5ERVJFUl9UWVBFLkNBTlZBU1xuICAgICAqL1xuICAgIFJFTkRFUkVSX1RZUEU6IHtcbiAgICAgICAgVU5LTk9XTjogICAgMCxcbiAgICAgICAgV0VCR0w6ICAgICAgMSxcbiAgICAgICAgQ0FOVkFTOiAgICAgMlxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBWYXJpb3VzIGJsZW5kIG1vZGVzIHN1cHBvcnRlZCBieSBQSVhJLiBJTVBPUlRBTlQgLSBUaGUgV2ViR0wgcmVuZGVyZXIgb25seSBzdXBwb3J0c1xuICAgICAqIHRoZSBOT1JNQUwsIEFERCwgTVVMVElQTFkgYW5kIFNDUkVFTiBibGVuZCBtb2Rlcy4gQW55dGhpbmcgZWxzZSB3aWxsIHNpbGVudGx5IGFjdCBsaWtlXG4gICAgICogTk9STUFMLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBjb25zdGFudFxuICAgICAqIEBwcm9wZXJ0eSB7b2JqZWN0fSBCTEVORF9NT0RFU1xuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBCTEVORF9NT0RFUy5OT1JNQUxcbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gQkxFTkRfTU9ERVMuQUREXG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IEJMRU5EX01PREVTLk1VTFRJUExZXG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IEJMRU5EX01PREVTLlNDUkVFTlxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBCTEVORF9NT0RFUy5PVkVSTEFZXG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IEJMRU5EX01PREVTLkRBUktFTlxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBCTEVORF9NT0RFUy5MSUdIVEVOXG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IEJMRU5EX01PREVTLkNPTE9SX0RPREdFXG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IEJMRU5EX01PREVTLkNPTE9SX0JVUk5cbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gQkxFTkRfTU9ERVMuSEFSRF9MSUdIVFxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBCTEVORF9NT0RFUy5TT0ZUX0xJR0hUXG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IEJMRU5EX01PREVTLkRJRkZFUkVOQ0VcbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gQkxFTkRfTU9ERVMuRVhDTFVTSU9OXG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IEJMRU5EX01PREVTLkhVRVxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBCTEVORF9NT0RFUy5TQVRVUkFUSU9OXG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IEJMRU5EX01PREVTLkNPTE9SXG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IEJMRU5EX01PREVTLkxVTUlOT1NJVFlcbiAgICAgKi9cbiAgICBCTEVORF9NT0RFUzoge1xuICAgICAgICBOT1JNQUw6ICAgICAgICAgMCxcbiAgICAgICAgQUREOiAgICAgICAgICAgIDEsXG4gICAgICAgIE1VTFRJUExZOiAgICAgICAyLFxuICAgICAgICBTQ1JFRU46ICAgICAgICAgMyxcbiAgICAgICAgT1ZFUkxBWTogICAgICAgIDQsXG4gICAgICAgIERBUktFTjogICAgICAgICA1LFxuICAgICAgICBMSUdIVEVOOiAgICAgICAgNixcbiAgICAgICAgQ09MT1JfRE9ER0U6ICAgIDcsXG4gICAgICAgIENPTE9SX0JVUk46ICAgICA4LFxuICAgICAgICBIQVJEX0xJR0hUOiAgICAgOSxcbiAgICAgICAgU09GVF9MSUdIVDogICAgIDEwLFxuICAgICAgICBESUZGRVJFTkNFOiAgICAgMTEsXG4gICAgICAgIEVYQ0xVU0lPTjogICAgICAxMixcbiAgICAgICAgSFVFOiAgICAgICAgICAgIDEzLFxuICAgICAgICBTQVRVUkFUSU9OOiAgICAgMTQsXG4gICAgICAgIENPTE9SOiAgICAgICAgICAxNSxcbiAgICAgICAgTFVNSU5PU0lUWTogICAgIDE2XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFZhcmlvdXMgd2ViZ2wgZHJhdyBtb2Rlcy4gVGhlc2UgY2FuIGJlIHVzZWQgdG8gc3BlY2lmeSB3aGljaCBHTCBkcmF3TW9kZSB0byB1c2VcbiAgICAgKiB1bmRlciBjZXJ0YWluIHNpdHVhdGlvbnMgYW5kIHJlbmRlcmVycy5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAY29uc3RhbnRcbiAgICAgKiBAcHJvcGVydHkge29iamVjdH0gRFJBV19NT0RFU1xuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBEUkFXX01PREVTLlBPSU5UU1xuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBEUkFXX01PREVTLkxJTkVTXG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IERSQVdfTU9ERVMuTElORV9MT09QXG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IERSQVdfTU9ERVMuTElORV9TVFJJUFxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBEUkFXX01PREVTLlRSSUFOR0xFU1xuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBEUkFXX01PREVTLlRSSUFOR0xFX1NUUklQXG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IERSQVdfTU9ERVMuVFJJQU5HTEVfRkFOXG4gICAgICovXG4gICAgRFJBV19NT0RFUzoge1xuICAgICAgICBQT0lOVFM6ICAgICAgICAgMCxcbiAgICAgICAgTElORVM6ICAgICAgICAgIDEsXG4gICAgICAgIExJTkVfTE9PUDogICAgICAyLFxuICAgICAgICBMSU5FX1NUUklQOiAgICAgMyxcbiAgICAgICAgVFJJQU5HTEVTOiAgICAgIDQsXG4gICAgICAgIFRSSUFOR0xFX1NUUklQOiA1LFxuICAgICAgICBUUklBTkdMRV9GQU46ICAgNlxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBUaGUgc2NhbGUgbW9kZXMgdGhhdCBhcmUgc3VwcG9ydGVkIGJ5IHBpeGkuXG4gICAgICpcbiAgICAgKiBUaGUgREVGQVVMVCBzY2FsZSBtb2RlIGFmZmVjdHMgdGhlIGRlZmF1bHQgc2NhbGluZyBtb2RlIG9mIGZ1dHVyZSBvcGVyYXRpb25zLlxuICAgICAqIEl0IGNhbiBiZSByZS1hc3NpZ25lZCB0byBlaXRoZXIgTElORUFSIG9yIE5FQVJFU1QsIGRlcGVuZGluZyB1cG9uIHN1aXRhYmlsaXR5LlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBjb25zdGFudFxuICAgICAqIEBwcm9wZXJ0eSB7b2JqZWN0fSBTQ0FMRV9NT0RFU1xuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBTQ0FMRV9NT0RFUy5ERUZBVUxUPUxJTkVBUlxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBTQ0FMRV9NT0RFUy5MSU5FQVIgU21vb3RoIHNjYWxpbmdcbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gU0NBTEVfTU9ERVMuTkVBUkVTVCBQaXhlbGF0aW5nIHNjYWxpbmdcbiAgICAgKi9cbiAgICBTQ0FMRV9NT0RFUzoge1xuICAgICAgICBERUZBVUxUOiAgICAwLFxuICAgICAgICBMSU5FQVI6ICAgICAwLFxuICAgICAgICBORUFSRVNUOiAgICAxXG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFRoZSBwcmVmaXggdGhhdCBkZW5vdGVzIGEgVVJMIGlzIGZvciBhIHJldGluYSBhc3NldFxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBjb25zdGFudFxuICAgICAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBSRVRJTkFfUFJFRklYXG4gICAgICovXG4gICAgLy9leGFtcGxlOiAnQDJ4JyxcbiAgICBSRVRJTkFfUFJFRklYOiAvQCguKyl4LyxcblxuICAgIFJFU09MVVRJT046MSxcblxuICAgIEZJTFRFUl9SRVNPTFVUSU9OOjEsXG5cbiAgICAvKipcbiAgICAgKiBUaGUgZGVmYXVsdCByZW5kZXIgb3B0aW9ucyBpZiBub25lIGFyZSBzdXBwbGllZCB0byB7QGxpbmsgUElYSS5XZWJHTFJlbmRlcmVyfVxuICAgICAqIG9yIHtAbGluayBQSVhJLkNhbnZhc1JlbmRlcmVyfS5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAY29uc3RhbnRcbiAgICAgKiBAcHJvcGVydHkge29iamVjdH0gREVGQVVMVF9SRU5ERVJfT1BUSU9OU1xuICAgICAqIEBwcm9wZXJ0eSB7SFRNTENhbnZhc0VsZW1lbnR9IERFRkFVTFRfUkVOREVSX09QVElPTlMudmlldz1udWxsXG4gICAgICogQHByb3BlcnR5IHtib29sZWFufSBERUZBVUxUX1JFTkRFUl9PUFRJT05TLnRyYW5zcGFyZW50PWZhbHNlXG4gICAgICogQHByb3BlcnR5IHtib29sZWFufSBERUZBVUxUX1JFTkRFUl9PUFRJT05TLmFudGlhbGlhcz1mYWxzZVxuICAgICAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gREVGQVVMVF9SRU5ERVJfT1BUSU9OUy5mb3JjZUZYQUE9ZmFsc2VcbiAgICAgKiBAcHJvcGVydHkge2Jvb2xlYW59IERFRkFVTFRfUkVOREVSX09QVElPTlMucHJlc2VydmVEcmF3aW5nQnVmZmVyPWZhbHNlXG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IERFRkFVTFRfUkVOREVSX09QVElPTlMucmVzb2x1dGlvbj0xXG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IERFRkFVTFRfUkVOREVSX09QVElPTlMuYmFja2dyb3VuZENvbG9yPTB4MDAwMDAwXG4gICAgICogQHByb3BlcnR5IHtib29sZWFufSBERUZBVUxUX1JFTkRFUl9PUFRJT05TLmNsZWFyQmVmb3JlUmVuZGVyPXRydWVcbiAgICAgKiBAcHJvcGVydHkge2Jvb2xlYW59IERFRkFVTFRfUkVOREVSX09QVElPTlMuYXV0b1Jlc2l6ZT1mYWxzZVxuICAgICAqL1xuICAgIERFRkFVTFRfUkVOREVSX09QVElPTlM6IHtcbiAgICAgICAgdmlldzogbnVsbCxcbiAgICAgICAgcmVzb2x1dGlvbjogMSxcbiAgICAgICAgYW50aWFsaWFzOiBmYWxzZSxcbiAgICAgICAgZm9yY2VGWEFBOiBmYWxzZSxcbiAgICAgICAgYXV0b1Jlc2l6ZTogZmFsc2UsXG4gICAgICAgIHRyYW5zcGFyZW50OiBmYWxzZSxcbiAgICAgICAgYmFja2dyb3VuZENvbG9yOiAweDAwMDAwMCxcbiAgICAgICAgY2xlYXJCZWZvcmVSZW5kZXI6IHRydWUsXG4gICAgICAgIHByZXNlcnZlRHJhd2luZ0J1ZmZlcjogZmFsc2UsXG4gICAgICAgIHJvdW5kUGl4ZWxzOiBmYWxzZVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBDb25zdGFudHMgdGhhdCBpZGVudGlmeSBzaGFwZXMsIG1haW5seSB0byBwcmV2ZW50IGBpbnN0YW5jZW9mYCBjYWxscy5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAY29uc3RhbnRcbiAgICAgKiBAcHJvcGVydHkge29iamVjdH0gU0hBUEVTXG4gICAgICogQHByb3BlcnR5IHtvYmplY3R9IFNIQVBFUy5QT0xZPTBcbiAgICAgKiBAcHJvcGVydHkge29iamVjdH0gU0hBUEVTLlJFQ1Q9MVxuICAgICAqIEBwcm9wZXJ0eSB7b2JqZWN0fSBTSEFQRVMuQ0lSQz0yXG4gICAgICogQHByb3BlcnR5IHtvYmplY3R9IFNIQVBFUy5FTElQPTNcbiAgICAgKiBAcHJvcGVydHkge29iamVjdH0gU0hBUEVTLlJSRUM9NFxuICAgICAqL1xuICAgIFNIQVBFUzoge1xuICAgICAgICBQT0xZOiAwLFxuICAgICAgICBSRUNUOiAxLFxuICAgICAgICBDSVJDOiAyLFxuICAgICAgICBFTElQOiAzLFxuICAgICAgICBSUkVDOiA0XG4gICAgfSxcblxuICAgIC8vIFRPRE86IG1heWJlIGNoYW5nZSB0byBTUFJJVEUuQkFUQ0hfU0laRTogMjAwMFxuICAgIC8vIFRPRE86IG1heWJlIGFkZCBQQVJUSUNMRS5CQVRDSF9TSVpFOiAxNTAwMFxuICAgIFNQUklURV9CQVRDSF9TSVpFOiAyMDAwIC8vbmljZSBiYWxhbmNlIGJldHdlZW4gbW9iaWxlIGFuZCBkZXNrdG9wIG1hY2hpbmVzXG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IENPTlNUO1xuIiwidmFyIG1hdGggPSByZXF1aXJlKCcuLi9tYXRoJyksXG4gICAgdXRpbHMgPSByZXF1aXJlKCcuLi91dGlscycpLFxuICAgIERpc3BsYXlPYmplY3QgPSByZXF1aXJlKCcuL0Rpc3BsYXlPYmplY3QnKSxcbiAgICBSZW5kZXJUZXh0dXJlID0gcmVxdWlyZSgnLi4vdGV4dHVyZXMvUmVuZGVyVGV4dHVyZScpLFxuICAgIF90ZW1wTWF0cml4ID0gbmV3IG1hdGguTWF0cml4KCk7XG5cbi8qKlxuICogQSBDb250YWluZXIgcmVwcmVzZW50cyBhIGNvbGxlY3Rpb24gb2YgZGlzcGxheSBvYmplY3RzLlxuICogSXQgaXMgdGhlIGJhc2UgY2xhc3Mgb2YgYWxsIGRpc3BsYXkgb2JqZWN0cyB0aGF0IGFjdCBhcyBhIGNvbnRhaW5lciBmb3Igb3RoZXIgb2JqZWN0cy5cbiAqXG4gKmBgYGpzXG4gKiB2YXIgY29udGFpbmVyID0gbmV3IFBJWEkuQ29udGFpbmVyKCk7XG4gKiBjb250YWluZXIuYWRkQ2hpbGQoc3ByaXRlKTtcbiAqIGBgYFxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLkRpc3BsYXlPYmplY3RcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKi9cbmZ1bmN0aW9uIENvbnRhaW5lcigpXG57XG4gICAgRGlzcGxheU9iamVjdC5jYWxsKHRoaXMpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGFycmF5IG9mIGNoaWxkcmVuIG9mIHRoaXMgY29udGFpbmVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5EaXNwbGF5T2JqZWN0W119XG4gICAgICogQHJlYWRvbmx5XG4gICAgICovXG4gICAgdGhpcy5jaGlsZHJlbiA9IFtdO1xufVxuXG4vLyBjb25zdHJ1Y3RvclxuQ29udGFpbmVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoRGlzcGxheU9iamVjdC5wcm90b3R5cGUpO1xuQ29udGFpbmVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IENvbnRhaW5lcjtcbm1vZHVsZS5leHBvcnRzID0gQ29udGFpbmVyO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhDb250YWluZXIucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogVGhlIHdpZHRoIG9mIHRoZSBDb250YWluZXIsIHNldHRpbmcgdGhpcyB3aWxsIGFjdHVhbGx5IG1vZGlmeSB0aGUgc2NhbGUgdG8gYWNoaWV2ZSB0aGUgdmFsdWUgc2V0XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuQ29udGFpbmVyI1xuICAgICAqL1xuICAgIHdpZHRoOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuc2NhbGUueCAqIHRoaXMuZ2V0TG9jYWxCb3VuZHMoKS53aWR0aDtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcblxuICAgICAgICAgICAgdmFyIHdpZHRoID0gdGhpcy5nZXRMb2NhbEJvdW5kcygpLndpZHRoO1xuXG4gICAgICAgICAgICBpZiAod2lkdGggIT09IDApXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdGhpcy5zY2FsZS54ID0gdmFsdWUgLyB3aWR0aDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNjYWxlLnggPSAxO1xuICAgICAgICAgICAgfVxuXG5cbiAgICAgICAgICAgIHRoaXMuX3dpZHRoID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVGhlIGhlaWdodCBvZiB0aGUgQ29udGFpbmVyLCBzZXR0aW5nIHRoaXMgd2lsbCBhY3R1YWxseSBtb2RpZnkgdGhlIHNjYWxlIHRvIGFjaGlldmUgdGhlIHZhbHVlIHNldFxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLkNvbnRhaW5lciNcbiAgICAgKi9cbiAgICBoZWlnaHQ6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gIHRoaXMuc2NhbGUueSAqIHRoaXMuZ2V0TG9jYWxCb3VuZHMoKS5oZWlnaHQ7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG5cbiAgICAgICAgICAgIHZhciBoZWlnaHQgPSB0aGlzLmdldExvY2FsQm91bmRzKCkuaGVpZ2h0O1xuXG4gICAgICAgICAgICBpZiAoaGVpZ2h0ICE9PSAwKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHRoaXMuc2NhbGUueSA9IHZhbHVlIC8gaGVpZ2h0IDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNjYWxlLnkgPSAxO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLl9oZWlnaHQgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuXG4vKipcbiAqIE92ZXJyaWRhYmxlIG1ldGhvZCB0aGF0IGNhbiBiZSB1c2VkIGJ5IENvbnRhaW5lciBzdWJjbGFzc2VzIHdoZW5ldmVyIHRoZSBjaGlsZHJlbiBhcnJheSBpcyBtb2RpZmllZFxuICpcbiAqIEBwcml2YXRlXG4gKi9cbkNvbnRhaW5lci5wcm90b3R5cGUub25DaGlsZHJlbkNoYW5nZSA9IGZ1bmN0aW9uICgpIHt9O1xuXG4vKipcbiAqIEFkZHMgYSBjaGlsZCB0byB0aGUgY29udGFpbmVyLlxuICogXG4gKiBZb3UgY2FuIGFsc28gYWRkIG11bHRwbGUgaXRlbXMgbGlrZSBzbzogbXlDb250YWluZXIuYWRkQ2hpbGQodGhpbmtPbmUsIHRoaW5nVHdvLCB0aGluZ1RocmVlKVxuICogQHBhcmFtIGNoaWxkIHtQSVhJLkRpc3BsYXlPYmplY3R9IFRoZSBEaXNwbGF5T2JqZWN0IHRvIGFkZCB0byB0aGUgY29udGFpbmVyXG4gKiBAcmV0dXJuIHtQSVhJLkRpc3BsYXlPYmplY3R9IFRoZSBjaGlsZCB0aGF0IHdhcyBhZGRlZC5cbiAqL1xuQ29udGFpbmVyLnByb3RvdHlwZS5hZGRDaGlsZCA9IGZ1bmN0aW9uIChjaGlsZClcbnsgXG4gICAgdmFyIGFyZ3VtZW50c0xlbmd0aCA9IGFyZ3VtZW50cy5sZW5ndGg7XG5cbiAgICAvLyBpZiB0aGVyZSBpcyBvbmx5IG9uZSBhcmd1bWVudCB3ZSBjYW4gYnlwYXNzIGxvb3BpbmcgdGhyb3VnaCB0aGUgdGhlbVxuICAgIGlmKGFyZ3VtZW50c0xlbmd0aCA+IDEpXG4gICAge1xuICAgICAgICAvLyBsb29wIHRocm91Z2ggdGhlIGFyZ3VtZW50cyBwcm9wZXJ0eSBhbmQgYWRkIGFsbCBjaGlsZHJlblxuICAgICAgICAvLyB1c2UgaXQgdGhlIHJpZ2h0IHdheSAoLmxlbmd0aCBhbmQgW2ldKSBzbyB0aGF0IHRoaXMgZnVuY3Rpb24gY2FuIHN0aWxsIGJlIG9wdGltaXNlZCBieSBKUyBydW50aW1lc1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFyZ3VtZW50c0xlbmd0aDsgaSsrKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmFkZENoaWxkKCBhcmd1bWVudHNbaV0gKTtcbiAgICAgICAgfVxuICAgIH0gICAgIFxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIC8vIGlmIHRoZSBjaGlsZCBoYXMgYSBwYXJlbnQgdGhlbiBsZXRzIHJlbW92ZSBpdCBhcyBQaXhpIG9iamVjdHMgY2FuIG9ubHkgZXhpc3QgaW4gb25lIHBsYWNlXG4gICAgICAgIGlmIChjaGlsZC5wYXJlbnQpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNoaWxkLnBhcmVudC5yZW1vdmVDaGlsZChjaGlsZCk7XG4gICAgICAgIH1cblxuICAgICAgICBjaGlsZC5wYXJlbnQgPSB0aGlzO1xuICAgICAgICBcbiAgICAgICAgdGhpcy5jaGlsZHJlbi5wdXNoKGNoaWxkKTtcblxuICAgICAgICAvLyBUT0RPIC0gbGV0cyBlaXRoZXIgZG8gYWxsIGNhbGxiYWNrcyBvciBhbGwgZXZlbnRzLi4gbm90IGJvdGghXG4gICAgICAgIHRoaXMub25DaGlsZHJlbkNoYW5nZSh0aGlzLmNoaWxkcmVuLmxlbmd0aC0xKTtcbiAgICAgICAgY2hpbGQuZW1pdCgnYWRkZWQnLCB0aGlzKTtcbiAgICB9XG5cbiAgICByZXR1cm4gY2hpbGQ7XG59O1xuXG4vKipcbiAqIEFkZHMgYSBjaGlsZCB0byB0aGUgY29udGFpbmVyIGF0IGEgc3BlY2lmaWVkIGluZGV4LiBJZiB0aGUgaW5kZXggaXMgb3V0IG9mIGJvdW5kcyBhbiBlcnJvciB3aWxsIGJlIHRocm93blxuICpcbiAqIEBwYXJhbSBjaGlsZCB7UElYSS5EaXNwbGF5T2JqZWN0fSBUaGUgY2hpbGQgdG8gYWRkXG4gKiBAcGFyYW0gaW5kZXgge251bWJlcn0gVGhlIGluZGV4IHRvIHBsYWNlIHRoZSBjaGlsZCBpblxuICogQHJldHVybiB7UElYSS5EaXNwbGF5T2JqZWN0fSBUaGUgY2hpbGQgdGhhdCB3YXMgYWRkZWQuXG4gKi9cbkNvbnRhaW5lci5wcm90b3R5cGUuYWRkQ2hpbGRBdCA9IGZ1bmN0aW9uIChjaGlsZCwgaW5kZXgpXG57XG4gICAgaWYgKGluZGV4ID49IDAgJiYgaW5kZXggPD0gdGhpcy5jaGlsZHJlbi5sZW5ndGgpXG4gICAge1xuICAgICAgICBpZiAoY2hpbGQucGFyZW50KVxuICAgICAgICB7XG4gICAgICAgICAgICBjaGlsZC5wYXJlbnQucmVtb3ZlQ2hpbGQoY2hpbGQpO1xuICAgICAgICB9XG5cbiAgICAgICAgY2hpbGQucGFyZW50ID0gdGhpcztcblxuICAgICAgICB0aGlzLmNoaWxkcmVuLnNwbGljZShpbmRleCwgMCwgY2hpbGQpO1xuXG4gICAgICAgIC8vIFRPRE8gLSBsZXRzIGVpdGhlciBkbyBhbGwgY2FsbGJhY2tzIG9yIGFsbCBldmVudHMuLiBub3QgYm90aCFcbiAgICAgICAgdGhpcy5vbkNoaWxkcmVuQ2hhbmdlKGluZGV4KTtcbiAgICAgICAgY2hpbGQuZW1pdCgnYWRkZWQnLCB0aGlzKTtcblxuICAgICAgICByZXR1cm4gY2hpbGQ7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihjaGlsZCArICdhZGRDaGlsZEF0OiBUaGUgaW5kZXggJysgaW5kZXggKycgc3VwcGxpZWQgaXMgb3V0IG9mIGJvdW5kcyAnICsgdGhpcy5jaGlsZHJlbi5sZW5ndGgpO1xuICAgIH1cbn07XG5cbi8qKlxuICogU3dhcHMgdGhlIHBvc2l0aW9uIG9mIDIgRGlzcGxheSBPYmplY3RzIHdpdGhpbiB0aGlzIGNvbnRhaW5lci5cbiAqXG4gKiBAcGFyYW0gY2hpbGQge1BJWEkuRGlzcGxheU9iamVjdH1cbiAqIEBwYXJhbSBjaGlsZDIge1BJWEkuRGlzcGxheU9iamVjdH1cbiAqL1xuQ29udGFpbmVyLnByb3RvdHlwZS5zd2FwQ2hpbGRyZW4gPSBmdW5jdGlvbiAoY2hpbGQsIGNoaWxkMilcbntcbiAgICBpZiAoY2hpbGQgPT09IGNoaWxkMilcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB2YXIgaW5kZXgxID0gdGhpcy5nZXRDaGlsZEluZGV4KGNoaWxkKTtcbiAgICB2YXIgaW5kZXgyID0gdGhpcy5nZXRDaGlsZEluZGV4KGNoaWxkMik7XG5cbiAgICBpZiAoaW5kZXgxIDwgMCB8fCBpbmRleDIgPCAwKVxuICAgIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdzd2FwQ2hpbGRyZW46IEJvdGggdGhlIHN1cHBsaWVkIERpc3BsYXlPYmplY3RzIG11c3QgYmUgY2hpbGRyZW4gb2YgdGhlIGNhbGxlci4nKTtcbiAgICB9XG5cbiAgICB0aGlzLmNoaWxkcmVuW2luZGV4MV0gPSBjaGlsZDI7XG4gICAgdGhpcy5jaGlsZHJlbltpbmRleDJdID0gY2hpbGQ7XG4gICAgdGhpcy5vbkNoaWxkcmVuQ2hhbmdlKGluZGV4MSA8IGluZGV4MiA/IGluZGV4MSA6IGluZGV4Mik7XG59O1xuXG4vKipcbiAqIFJldHVybnMgdGhlIGluZGV4IHBvc2l0aW9uIG9mIGEgY2hpbGQgRGlzcGxheU9iamVjdCBpbnN0YW5jZVxuICpcbiAqIEBwYXJhbSBjaGlsZCB7UElYSS5EaXNwbGF5T2JqZWN0fSBUaGUgRGlzcGxheU9iamVjdCBpbnN0YW5jZSB0byBpZGVudGlmeVxuICogQHJldHVybiB7bnVtYmVyfSBUaGUgaW5kZXggcG9zaXRpb24gb2YgdGhlIGNoaWxkIGRpc3BsYXkgb2JqZWN0IHRvIGlkZW50aWZ5XG4gKi9cbkNvbnRhaW5lci5wcm90b3R5cGUuZ2V0Q2hpbGRJbmRleCA9IGZ1bmN0aW9uIChjaGlsZClcbntcbiAgICB2YXIgaW5kZXggPSB0aGlzLmNoaWxkcmVuLmluZGV4T2YoY2hpbGQpO1xuXG4gICAgaWYgKGluZGV4ID09PSAtMSlcbiAgICB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignVGhlIHN1cHBsaWVkIERpc3BsYXlPYmplY3QgbXVzdCBiZSBhIGNoaWxkIG9mIHRoZSBjYWxsZXInKTtcbiAgICB9XG5cbiAgICByZXR1cm4gaW5kZXg7XG59O1xuXG4vKipcbiAqIENoYW5nZXMgdGhlIHBvc2l0aW9uIG9mIGFuIGV4aXN0aW5nIGNoaWxkIGluIHRoZSBkaXNwbGF5IG9iamVjdCBjb250YWluZXJcbiAqXG4gKiBAcGFyYW0gY2hpbGQge1BJWEkuRGlzcGxheU9iamVjdH0gVGhlIGNoaWxkIERpc3BsYXlPYmplY3QgaW5zdGFuY2UgZm9yIHdoaWNoIHlvdSB3YW50IHRvIGNoYW5nZSB0aGUgaW5kZXggbnVtYmVyXG4gKiBAcGFyYW0gaW5kZXgge251bWJlcn0gVGhlIHJlc3VsdGluZyBpbmRleCBudW1iZXIgZm9yIHRoZSBjaGlsZCBkaXNwbGF5IG9iamVjdFxuICovXG5Db250YWluZXIucHJvdG90eXBlLnNldENoaWxkSW5kZXggPSBmdW5jdGlvbiAoY2hpbGQsIGluZGV4KVxue1xuICAgIGlmIChpbmRleCA8IDAgfHwgaW5kZXggPj0gdGhpcy5jaGlsZHJlbi5sZW5ndGgpXG4gICAge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RoZSBzdXBwbGllZCBpbmRleCBpcyBvdXQgb2YgYm91bmRzJyk7XG4gICAgfVxuXG4gICAgdmFyIGN1cnJlbnRJbmRleCA9IHRoaXMuZ2V0Q2hpbGRJbmRleChjaGlsZCk7XG5cbiAgICB1dGlscy5yZW1vdmVJdGVtcyh0aGlzLmNoaWxkcmVuLCBjdXJyZW50SW5kZXgsIDEpOyAvLyByZW1vdmUgZnJvbSBvbGQgcG9zaXRpb25cbiAgICB0aGlzLmNoaWxkcmVuLnNwbGljZShpbmRleCwgMCwgY2hpbGQpOyAvL2FkZCBhdCBuZXcgcG9zaXRpb25cbiAgICB0aGlzLm9uQ2hpbGRyZW5DaGFuZ2UoaW5kZXgpO1xufTtcblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBjaGlsZCBhdCB0aGUgc3BlY2lmaWVkIGluZGV4XG4gKlxuICogQHBhcmFtIGluZGV4IHtudW1iZXJ9IFRoZSBpbmRleCB0byBnZXQgdGhlIGNoaWxkIGF0XG4gKiBAcmV0dXJuIHtQSVhJLkRpc3BsYXlPYmplY3R9IFRoZSBjaGlsZCBhdCB0aGUgZ2l2ZW4gaW5kZXgsIGlmIGFueS5cbiAqL1xuQ29udGFpbmVyLnByb3RvdHlwZS5nZXRDaGlsZEF0ID0gZnVuY3Rpb24gKGluZGV4KVxue1xuICAgIGlmIChpbmRleCA8IDAgfHwgaW5kZXggPj0gdGhpcy5jaGlsZHJlbi5sZW5ndGgpXG4gICAge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2dldENoaWxkQXQ6IFN1cHBsaWVkIGluZGV4ICcgKyBpbmRleCArICcgZG9lcyBub3QgZXhpc3QgaW4gdGhlIGNoaWxkIGxpc3QsIG9yIHRoZSBzdXBwbGllZCBEaXNwbGF5T2JqZWN0IGlzIG5vdCBhIGNoaWxkIG9mIHRoZSBjYWxsZXInKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5jaGlsZHJlbltpbmRleF07XG59O1xuXG4vKipcbiAqIFJlbW92ZXMgYSBjaGlsZCBmcm9tIHRoZSBjb250YWluZXIuXG4gKlxuICogQHBhcmFtIGNoaWxkIHtQSVhJLkRpc3BsYXlPYmplY3R9IFRoZSBEaXNwbGF5T2JqZWN0IHRvIHJlbW92ZVxuICogQHJldHVybiB7UElYSS5EaXNwbGF5T2JqZWN0fSBUaGUgY2hpbGQgdGhhdCB3YXMgcmVtb3ZlZC5cbiAqL1xuQ29udGFpbmVyLnByb3RvdHlwZS5yZW1vdmVDaGlsZCA9IGZ1bmN0aW9uIChjaGlsZClcbntcbiAgICB2YXIgYXJndW1lbnRzTGVuZ3RoID0gYXJndW1lbnRzLmxlbmd0aDtcblxuICAgIC8vIGlmIHRoZXJlIGlzIG9ubHkgb25lIGFyZ3VtZW50IHdlIGNhbiBieXBhc3MgbG9vcGluZyB0aHJvdWdoIHRoZSB0aGVtXG4gICAgaWYoYXJndW1lbnRzTGVuZ3RoID4gMSlcbiAgICB7XG4gICAgICAgIC8vIGxvb3AgdGhyb3VnaCB0aGUgYXJndW1lbnRzIHByb3BlcnR5IGFuZCBhZGQgYWxsIGNoaWxkcmVuXG4gICAgICAgIC8vIHVzZSBpdCB0aGUgcmlnaHQgd2F5ICgubGVuZ3RoIGFuZCBbaV0pIHNvIHRoYXQgdGhpcyBmdW5jdGlvbiBjYW4gc3RpbGwgYmUgb3B0aW1pc2VkIGJ5IEpTIHJ1bnRpbWVzXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXJndW1lbnRzTGVuZ3RoOyBpKyspXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMucmVtb3ZlQ2hpbGQoIGFyZ3VtZW50c1tpXSApO1xuICAgICAgICB9XG4gICAgfSAgICAgXG4gICAgZWxzZVxuICAgIHsgICBcbiAgICAgICAgdmFyIGluZGV4ID0gdGhpcy5jaGlsZHJlbi5pbmRleE9mKGNoaWxkKTtcblxuICAgICAgICBpZiAoaW5kZXggPT09IC0xKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjaGlsZC5wYXJlbnQgPSBudWxsO1xuICAgICAgICB1dGlscy5yZW1vdmVJdGVtcyh0aGlzLmNoaWxkcmVuLCBpbmRleCwgMSk7XG5cbiAgICAgICAgLy8gVE9ETyAtIGxldHMgZWl0aGVyIGRvIGFsbCBjYWxsYmFja3Mgb3IgYWxsIGV2ZW50cy4uIG5vdCBib3RoIVxuICAgICAgICB0aGlzLm9uQ2hpbGRyZW5DaGFuZ2UoaW5kZXgpO1xuICAgICAgICBjaGlsZC5lbWl0KCdyZW1vdmVkJywgdGhpcyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGNoaWxkO1xufTtcblxuLyoqXG4gKiBSZW1vdmVzIGEgY2hpbGQgZnJvbSB0aGUgc3BlY2lmaWVkIGluZGV4IHBvc2l0aW9uLlxuICpcbiAqIEBwYXJhbSBpbmRleCB7bnVtYmVyfSBUaGUgaW5kZXggdG8gZ2V0IHRoZSBjaGlsZCBmcm9tXG4gKiBAcmV0dXJuIHtQSVhJLkRpc3BsYXlPYmplY3R9IFRoZSBjaGlsZCB0aGF0IHdhcyByZW1vdmVkLlxuICovXG5Db250YWluZXIucHJvdG90eXBlLnJlbW92ZUNoaWxkQXQgPSBmdW5jdGlvbiAoaW5kZXgpXG57XG4gICAgdmFyIGNoaWxkID0gdGhpcy5nZXRDaGlsZEF0KGluZGV4KTtcblxuICAgIGNoaWxkLnBhcmVudCA9IG51bGw7XG4gICAgdXRpbHMucmVtb3ZlSXRlbXModGhpcy5jaGlsZHJlbiwgaW5kZXgsIDEpO1xuXG4gICAgLy8gVE9ETyAtIGxldHMgZWl0aGVyIGRvIGFsbCBjYWxsYmFja3Mgb3IgYWxsIGV2ZW50cy4uIG5vdCBib3RoIVxuICAgIHRoaXMub25DaGlsZHJlbkNoYW5nZShpbmRleCk7XG4gICAgY2hpbGQuZW1pdCgncmVtb3ZlZCcsIHRoaXMpO1xuXG4gICAgcmV0dXJuIGNoaWxkO1xufTtcblxuLyoqXG4gKiBSZW1vdmVzIGFsbCBjaGlsZHJlbiBmcm9tIHRoaXMgY29udGFpbmVyIHRoYXQgYXJlIHdpdGhpbiB0aGUgYmVnaW4gYW5kIGVuZCBpbmRleGVzLlxuICpcbiAqIEBwYXJhbSBiZWdpbkluZGV4IHtudW1iZXJ9IFRoZSBiZWdpbm5pbmcgcG9zaXRpb24uIERlZmF1bHQgdmFsdWUgaXMgMC5cbiAqIEBwYXJhbSBlbmRJbmRleCB7bnVtYmVyfSBUaGUgZW5kaW5nIHBvc2l0aW9uLiBEZWZhdWx0IHZhbHVlIGlzIHNpemUgb2YgdGhlIGNvbnRhaW5lci5cbiAqL1xuQ29udGFpbmVyLnByb3RvdHlwZS5yZW1vdmVDaGlsZHJlbiA9IGZ1bmN0aW9uIChiZWdpbkluZGV4LCBlbmRJbmRleClcbntcbiAgICB2YXIgYmVnaW4gPSBiZWdpbkluZGV4IHx8IDA7XG4gICAgdmFyIGVuZCA9IHR5cGVvZiBlbmRJbmRleCA9PT0gJ251bWJlcicgPyBlbmRJbmRleCA6IHRoaXMuY2hpbGRyZW4ubGVuZ3RoO1xuICAgIHZhciByYW5nZSA9IGVuZCAtIGJlZ2luO1xuICAgIHZhciByZW1vdmVkLCBpO1xuXG4gICAgaWYgKHJhbmdlID4gMCAmJiByYW5nZSA8PSBlbmQpXG4gICAge1xuICAgICAgICByZW1vdmVkID0gdGhpcy5jaGlsZHJlbi5zcGxpY2UoYmVnaW4sIHJhbmdlKTtcblxuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgcmVtb3ZlZC5sZW5ndGg7ICsraSlcbiAgICAgICAge1xuICAgICAgICAgICAgcmVtb3ZlZFtpXS5wYXJlbnQgPSBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5vbkNoaWxkcmVuQ2hhbmdlKGJlZ2luSW5kZXgpO1xuXG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCByZW1vdmVkLmxlbmd0aDsgKytpKVxuICAgICAgICB7XG4gICAgICAgICAgICByZW1vdmVkW2ldLmVtaXQoJ3JlbW92ZWQnLCB0aGlzKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiByZW1vdmVkO1xuICAgIH1cbiAgICBlbHNlIGlmIChyYW5nZSA9PT0gMCAmJiB0aGlzLmNoaWxkcmVuLmxlbmd0aCA9PT0gMClcbiAgICB7XG4gICAgICAgIHJldHVybiBbXTtcbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ3JlbW92ZUNoaWxkcmVuOiBudW1lcmljIHZhbHVlcyBhcmUgb3V0c2lkZSB0aGUgYWNjZXB0YWJsZSByYW5nZS4nKTtcbiAgICB9XG59O1xuXG4vKipcbiAqIFVzZWZ1bCBmdW5jdGlvbiB0aGF0IHJldHVybnMgYSB0ZXh0dXJlIG9mIHRoZSBkaXNwbGF5IG9iamVjdCB0aGF0IGNhbiB0aGVuIGJlIHVzZWQgdG8gY3JlYXRlIHNwcml0ZXNcbiAqIFRoaXMgY2FuIGJlIHF1aXRlIHVzZWZ1bCBpZiB5b3VyIGRpc3BsYXlPYmplY3QgaXMgc3RhdGljIC8gY29tcGxpY2F0ZWQgYW5kIG5lZWRzIHRvIGJlIHJldXNlZCBtdWx0aXBsZSB0aW1lcy5cbiAqXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuQ2FudmFzUmVuZGVyZXJ8UElYSS5XZWJHTFJlbmRlcmVyfSBUaGUgcmVuZGVyZXIgdXNlZCB0byBnZW5lcmF0ZSB0aGUgdGV4dHVyZS5cbiAqIEBwYXJhbSByZXNvbHV0aW9uIHtudW1iZXJ9IFRoZSByZXNvbHV0aW9uIG9mIHRoZSB0ZXh0dXJlIGJlaW5nIGdlbmVyYXRlZFxuICogQHBhcmFtIHNjYWxlTW9kZSB7bnVtYmVyfSBTZWUge0BsaW5rIFBJWEkuU0NBTEVfTU9ERVN9IGZvciBwb3NzaWJsZSB2YWx1ZXNcbiAqIEByZXR1cm4ge1BJWEkuVGV4dHVyZX0gYSB0ZXh0dXJlIG9mIHRoZSBkaXNwbGF5IG9iamVjdFxuICovXG5Db250YWluZXIucHJvdG90eXBlLmdlbmVyYXRlVGV4dHVyZSA9IGZ1bmN0aW9uIChyZW5kZXJlciwgcmVzb2x1dGlvbiwgc2NhbGVNb2RlKVxue1xuICAgIHZhciBib3VuZHMgPSB0aGlzLmdldExvY2FsQm91bmRzKCk7XG5cbiAgICB2YXIgcmVuZGVyVGV4dHVyZSA9IG5ldyBSZW5kZXJUZXh0dXJlKHJlbmRlcmVyLCBib3VuZHMud2lkdGggfCAwLCBib3VuZHMuaGVpZ2h0IHwgMCwgc2NhbGVNb2RlLCByZXNvbHV0aW9uKTtcblxuICAgIF90ZW1wTWF0cml4LnR4ID0gLWJvdW5kcy54O1xuICAgIF90ZW1wTWF0cml4LnR5ID0gLWJvdW5kcy55O1xuXG4gICAgcmVuZGVyVGV4dHVyZS5yZW5kZXIodGhpcywgX3RlbXBNYXRyaXgpO1xuXG4gICAgcmV0dXJuIHJlbmRlclRleHR1cmU7XG59O1xuXG4vKlxuICogVXBkYXRlcyB0aGUgdHJhbnNmb3JtIG9uIGFsbCBjaGlsZHJlbiBvZiB0aGlzIGNvbnRhaW5lciBmb3IgcmVuZGVyaW5nXG4gKlxuICogQHByaXZhdGVcbiAqL1xuQ29udGFpbmVyLnByb3RvdHlwZS51cGRhdGVUcmFuc2Zvcm0gPSBmdW5jdGlvbiAoKVxue1xuICAgIGlmICghdGhpcy52aXNpYmxlKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuZGlzcGxheU9iamVjdFVwZGF0ZVRyYW5zZm9ybSgpO1xuXG4gICAgZm9yICh2YXIgaSA9IDAsIGogPSB0aGlzLmNoaWxkcmVuLmxlbmd0aDsgaSA8IGo7ICsraSlcbiAgICB7XG4gICAgICAgIHRoaXMuY2hpbGRyZW5baV0udXBkYXRlVHJhbnNmb3JtKCk7XG4gICAgfVxuXG4gICAgdGhpcy5kaXJ0eVRyYW5zZm9ybSA9IGZhbHNlO1xufTtcblxuLy8gcGVyZm9ybWFuY2UgaW5jcmVhc2UgdG8gYXZvaWQgdXNpbmcgY2FsbC4uICgxMHggZmFzdGVyKVxuQ29udGFpbmVyLnByb3RvdHlwZS5jb250YWluZXJVcGRhdGVUcmFuc2Zvcm0gPSBDb250YWluZXIucHJvdG90eXBlLnVwZGF0ZVRyYW5zZm9ybTtcblxuLyoqXG4gKiBSZXRyaWV2ZXMgdGhlIGJvdW5kcyBvZiB0aGUgQ29udGFpbmVyIGFzIGEgcmVjdGFuZ2xlLiBUaGUgYm91bmRzIGNhbGN1bGF0aW9uIHRha2VzIGFsbCB2aXNpYmxlIGNoaWxkcmVuIGludG8gY29uc2lkZXJhdGlvbi5cbiAqXG4gKiBAcmV0dXJuIHtQSVhJLlJlY3RhbmdsZX0gVGhlIHJlY3Rhbmd1bGFyIGJvdW5kaW5nIGFyZWFcbiAqL1xuQ29udGFpbmVyLnByb3RvdHlwZS5nZXRCb3VuZHMgPSBmdW5jdGlvbiAoKVxue1xuICAgIGlmKCF0aGlzLl9jdXJyZW50Qm91bmRzKVxuICAgIHtcblxuICAgICAgICBpZiAodGhpcy5jaGlsZHJlbi5sZW5ndGggPT09IDApXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiBtYXRoLlJlY3RhbmdsZS5FTVBUWTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFRPRE8gdGhlIGJvdW5kcyBoYXZlIGFscmVhZHkgYmVlbiBjYWxjdWxhdGVkIHRoaXMgcmVuZGVyIHNlc3Npb24gc28gcmV0dXJuIHdoYXQgd2UgaGF2ZVxuXG4gICAgICAgIHZhciBtaW5YID0gSW5maW5pdHk7XG4gICAgICAgIHZhciBtaW5ZID0gSW5maW5pdHk7XG5cbiAgICAgICAgdmFyIG1heFggPSAtSW5maW5pdHk7XG4gICAgICAgIHZhciBtYXhZID0gLUluZmluaXR5O1xuXG4gICAgICAgIHZhciBjaGlsZEJvdW5kcztcbiAgICAgICAgdmFyIGNoaWxkTWF4WDtcbiAgICAgICAgdmFyIGNoaWxkTWF4WTtcblxuICAgICAgICB2YXIgY2hpbGRWaXNpYmxlID0gZmFsc2U7XG5cbiAgICAgICAgZm9yICh2YXIgaSA9IDAsIGogPSB0aGlzLmNoaWxkcmVuLmxlbmd0aDsgaSA8IGo7ICsraSlcbiAgICAgICAge1xuICAgICAgICAgICAgdmFyIGNoaWxkID0gdGhpcy5jaGlsZHJlbltpXTtcblxuICAgICAgICAgICAgaWYgKCFjaGlsZC52aXNpYmxlKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjaGlsZFZpc2libGUgPSB0cnVlO1xuXG4gICAgICAgICAgICBjaGlsZEJvdW5kcyA9IHRoaXMuY2hpbGRyZW5baV0uZ2V0Qm91bmRzKCk7XG5cbiAgICAgICAgICAgIG1pblggPSBtaW5YIDwgY2hpbGRCb3VuZHMueCA/IG1pblggOiBjaGlsZEJvdW5kcy54O1xuICAgICAgICAgICAgbWluWSA9IG1pblkgPCBjaGlsZEJvdW5kcy55ID8gbWluWSA6IGNoaWxkQm91bmRzLnk7XG5cbiAgICAgICAgICAgIGNoaWxkTWF4WCA9IGNoaWxkQm91bmRzLndpZHRoICsgY2hpbGRCb3VuZHMueDtcbiAgICAgICAgICAgIGNoaWxkTWF4WSA9IGNoaWxkQm91bmRzLmhlaWdodCArIGNoaWxkQm91bmRzLnk7XG5cbiAgICAgICAgICAgIG1heFggPSBtYXhYID4gY2hpbGRNYXhYID8gbWF4WCA6IGNoaWxkTWF4WDtcbiAgICAgICAgICAgIG1heFkgPSBtYXhZID4gY2hpbGRNYXhZID8gbWF4WSA6IGNoaWxkTWF4WTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghY2hpbGRWaXNpYmxlKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gbWF0aC5SZWN0YW5nbGUuRU1QVFk7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgYm91bmRzID0gdGhpcy5fYm91bmRzO1xuXG4gICAgICAgIGJvdW5kcy54ID0gbWluWDtcbiAgICAgICAgYm91bmRzLnkgPSBtaW5ZO1xuICAgICAgICBib3VuZHMud2lkdGggPSBtYXhYIC0gbWluWDtcbiAgICAgICAgYm91bmRzLmhlaWdodCA9IG1heFkgLSBtaW5ZO1xuXG4gICAgICAgIHRoaXMuX2N1cnJlbnRCb3VuZHMgPSBib3VuZHM7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuX2N1cnJlbnRCb3VuZHM7XG59O1xuXG5Db250YWluZXIucHJvdG90eXBlLmNvbnRhaW5lckdldEJvdW5kcyA9IENvbnRhaW5lci5wcm90b3R5cGUuZ2V0Qm91bmRzO1xuXG4vKipcbiAqIFJldHJpZXZlcyB0aGUgbm9uLWdsb2JhbCBsb2NhbCBib3VuZHMgb2YgdGhlIENvbnRhaW5lciBhcyBhIHJlY3RhbmdsZS5cbiAqIFRoZSBjYWxjdWxhdGlvbiB0YWtlcyBhbGwgdmlzaWJsZSBjaGlsZHJlbiBpbnRvIGNvbnNpZGVyYXRpb24uXG4gKlxuICogQHJldHVybiB7UElYSS5SZWN0YW5nbGV9IFRoZSByZWN0YW5ndWxhciBib3VuZGluZyBhcmVhXG4gKi9cbkNvbnRhaW5lci5wcm90b3R5cGUuZ2V0TG9jYWxCb3VuZHMgPSBmdW5jdGlvbiAoKVxue1xuICAgIHZhciBtYXRyaXhDYWNoZSA9IHRoaXMud29ybGRUcmFuc2Zvcm07XG5cbiAgICB0aGlzLndvcmxkVHJhbnNmb3JtID0gbWF0aC5NYXRyaXguSURFTlRJVFk7XG5cbiAgICBmb3IgKHZhciBpID0gMCwgaiA9IHRoaXMuY2hpbGRyZW4ubGVuZ3RoOyBpIDwgajsgKytpKVxuICAgIHtcbiAgICAgICAgdGhpcy5jaGlsZHJlbltpXS51cGRhdGVUcmFuc2Zvcm0oKTtcbiAgICB9XG5cbiAgICB0aGlzLndvcmxkVHJhbnNmb3JtID0gbWF0cml4Q2FjaGU7XG5cbiAgICB0aGlzLl9jdXJyZW50Qm91bmRzID0gbnVsbDtcblxuICAgIHJldHVybiB0aGlzLmdldEJvdW5kcyggbWF0aC5NYXRyaXguSURFTlRJVFkgKTtcbn07XG5cbi8qKlxuICogUmVuZGVycyB0aGUgb2JqZWN0IHVzaW5nIHRoZSBXZWJHTCByZW5kZXJlclxuICpcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5XZWJHTFJlbmRlcmVyfSBUaGUgcmVuZGVyZXJcbiAqL1xuQ29udGFpbmVyLnByb3RvdHlwZS5yZW5kZXJXZWJHTCA9IGZ1bmN0aW9uIChyZW5kZXJlcilcbntcblxuICAgIC8vIGlmIHRoZSBvYmplY3QgaXMgbm90IHZpc2libGUgb3IgdGhlIGFscGhhIGlzIDAgdGhlbiBubyBuZWVkIHRvIHJlbmRlciB0aGlzIGVsZW1lbnRcbiAgICBpZiAoIXRoaXMudmlzaWJsZSB8fCB0aGlzLndvcmxkQWxwaGEgPD0gMCB8fCAhdGhpcy5yZW5kZXJhYmxlKVxuICAgIHtcbiAgICAgIFxuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFyIGksIGo7XG5cbiAgICAvLyBkbyBhIHF1aWNrIGNoZWNrIHRvIHNlZSBpZiB0aGlzIGVsZW1lbnQgaGFzIGEgbWFzayBvciBhIGZpbHRlci5cbiAgICBpZiAodGhpcy5fbWFzayB8fCB0aGlzLl9maWx0ZXJzKVxuICAgIHtcbiAgICAgICAgcmVuZGVyZXIuY3VycmVudFJlbmRlcmVyLmZsdXNoKCk7XG5cbiAgICAgICAgLy8gcHVzaCBmaWx0ZXIgZmlyc3QgYXMgd2UgbmVlZCB0byBlbnN1cmUgdGhlIHN0ZW5jaWwgYnVmZmVyIGlzIGNvcnJlY3QgZm9yIGFueSBtYXNraW5nXG4gICAgICAgIGlmICh0aGlzLl9maWx0ZXJzICYmIHRoaXMuX2ZpbHRlcnMubGVuZ3RoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLnB1c2hGaWx0ZXIodGhpcywgdGhpcy5fZmlsdGVycyk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5fbWFzaylcbiAgICAgICAge1xuICAgICAgICAgICAgcmVuZGVyZXIubWFza01hbmFnZXIucHVzaE1hc2sodGhpcywgdGhpcy5fbWFzayk7XG4gICAgICAgIH1cblxuICAgICAgICByZW5kZXJlci5jdXJyZW50UmVuZGVyZXIuc3RhcnQoKTtcblxuICAgICAgICAvLyBhZGQgdGhpcyBvYmplY3QgdG8gdGhlIGJhdGNoLCBvbmx5IHJlbmRlcmVkIGlmIGl0IGhhcyBhIHRleHR1cmUuXG4gICAgICAgIHRoaXMuX3JlbmRlcldlYkdMKHJlbmRlcmVyKTtcblxuICAgICAgICAvLyBub3cgbG9vcCB0aHJvdWdoIHRoZSBjaGlsZHJlbiBhbmQgbWFrZSBzdXJlIHRoZXkgZ2V0IHJlbmRlcmVkXG4gICAgICAgIGZvciAoaSA9IDAsIGogPSB0aGlzLmNoaWxkcmVuLmxlbmd0aDsgaSA8IGo7IGkrKylcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5jaGlsZHJlbltpXS5yZW5kZXJXZWJHTChyZW5kZXJlcik7XG4gICAgICAgIH1cblxuICAgICAgICByZW5kZXJlci5jdXJyZW50UmVuZGVyZXIuZmx1c2goKTtcblxuICAgICAgICBpZiAodGhpcy5fbWFzaylcbiAgICAgICAge1xuICAgICAgICAgICAgcmVuZGVyZXIubWFza01hbmFnZXIucG9wTWFzayh0aGlzLCB0aGlzLl9tYXNrKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLl9maWx0ZXJzKVxuICAgICAgICB7XG4gICAgICAgICAgICByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLnBvcEZpbHRlcigpO1xuXG4gICAgICAgIH1cbiAgICAgICAgcmVuZGVyZXIuY3VycmVudFJlbmRlcmVyLnN0YXJ0KCk7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHRoaXMuX3JlbmRlcldlYkdMKHJlbmRlcmVyKTtcblxuICAgICAgICAvLyBzaW1wbGUgcmVuZGVyIGNoaWxkcmVuIVxuICAgICAgICBmb3IgKGkgPSAwLCBqID0gdGhpcy5jaGlsZHJlbi5sZW5ndGg7IGkgPCBqOyArK2kpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuY2hpbGRyZW5baV0ucmVuZGVyV2ViR0wocmVuZGVyZXIpO1xuICAgICAgICB9XG4gICAgfVxufTtcblxuLyoqXG4gKiBUbyBiZSBvdmVycmlkZGVuIGJ5IHRoZSBzdWJjbGFzc1xuICpcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5XZWJHTFJlbmRlcmVyfSBUaGUgcmVuZGVyZXJcbiAqIEBwcml2YXRlXG4gKi9cbkNvbnRhaW5lci5wcm90b3R5cGUuX3JlbmRlcldlYkdMID0gZnVuY3Rpb24gKHJlbmRlcmVyKSAvLyBqc2hpbnQgdW51c2VkOmZhbHNlXG57XG4gICAgLy8gdGhpcyBpcyB3aGVyZSBjb250ZW50IGl0c2VsZiBnZXRzIHJlbmRlcmVkLi4uXG59O1xuXG4vKipcbiAqIFRvIGJlIG92ZXJyaWRkZW4gYnkgdGhlIHN1YmNsYXNzXG4gKlxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLkNhbnZhc1JlbmRlcmVyfSBUaGUgcmVuZGVyZXJcbiAqIEBwcml2YXRlXG4gKi9cbkNvbnRhaW5lci5wcm90b3R5cGUuX3JlbmRlckNhbnZhcyA9IGZ1bmN0aW9uIChyZW5kZXJlcikgLy8ganNoaW50IHVudXNlZDpmYWxzZVxue1xuICAgIC8vIHRoaXMgaXMgd2hlcmUgY29udGVudCBpdHNlbGYgZ2V0cyByZW5kZXJlZC4uLlxufTtcblxuXG4vKipcbiAqIFJlbmRlcnMgdGhlIG9iamVjdCB1c2luZyB0aGUgQ2FudmFzIHJlbmRlcmVyXG4gKlxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLkNhbnZhc1JlbmRlcmVyfSBUaGUgcmVuZGVyZXJcbiAqL1xuQ29udGFpbmVyLnByb3RvdHlwZS5yZW5kZXJDYW52YXMgPSBmdW5jdGlvbiAocmVuZGVyZXIpXG57XG4gICAgLy8gaWYgbm90IHZpc2libGUgb3IgdGhlIGFscGhhIGlzIDAgdGhlbiBubyBuZWVkIHRvIHJlbmRlciB0aGlzXG4gICAgaWYgKCF0aGlzLnZpc2libGUgfHwgdGhpcy5hbHBoYSA8PSAwIHx8ICF0aGlzLnJlbmRlcmFibGUpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX21hc2spXG4gICAge1xuICAgICAgICByZW5kZXJlci5tYXNrTWFuYWdlci5wdXNoTWFzayh0aGlzLl9tYXNrLCByZW5kZXJlcik7XG4gICAgfVxuXG4gICAgdGhpcy5fcmVuZGVyQ2FudmFzKHJlbmRlcmVyKTtcbiAgICBmb3IgKHZhciBpID0gMCwgaiA9IHRoaXMuY2hpbGRyZW4ubGVuZ3RoOyBpIDwgajsgKytpKVxuICAgIHtcbiAgICAgICAgdGhpcy5jaGlsZHJlbltpXS5yZW5kZXJDYW52YXMocmVuZGVyZXIpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLl9tYXNrKVxuICAgIHtcbiAgICAgICAgcmVuZGVyZXIubWFza01hbmFnZXIucG9wTWFzayhyZW5kZXJlcik7XG4gICAgfVxufTtcblxuLyoqXG4gKiBEZXN0cm95cyB0aGUgY29udGFpbmVyXG4gKiBAcGFyYW0gW2Rlc3Ryb3lDaGlsZHJlbj1mYWxzZV0ge2Jvb2xlYW59IGlmIHNldCB0byB0cnVlLCBhbGwgdGhlIGNoaWxkcmVuIHdpbGwgaGF2ZSB0aGVpciBkZXN0cm95IG1ldGhvZCBjYWxsZWQgYXMgd2VsbFxuICovXG5Db250YWluZXIucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoZGVzdHJveUNoaWxkcmVuKVxue1xuICAgIERpc3BsYXlPYmplY3QucHJvdG90eXBlLmRlc3Ryb3kuY2FsbCh0aGlzKTtcblxuICAgIGlmIChkZXN0cm95Q2hpbGRyZW4pXG4gICAge1xuICAgICAgICBmb3IgKHZhciBpID0gMCwgaiA9IHRoaXMuY2hpbGRyZW4ubGVuZ3RoOyBpIDwgajsgKytpKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmNoaWxkcmVuW2ldLmRlc3Ryb3koZGVzdHJveUNoaWxkcmVuKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMucmVtb3ZlQ2hpbGRyZW4oKTtcblxuICAgIHRoaXMuY2hpbGRyZW4gPSBudWxsO1xufTtcbiIsInZhciBtYXRoID0gcmVxdWlyZSgnLi4vbWF0aCcpLFxuICAgIFJlbmRlclRleHR1cmUgPSByZXF1aXJlKCcuLi90ZXh0dXJlcy9SZW5kZXJUZXh0dXJlJyksXG4gICAgRXZlbnRFbWl0dGVyID0gcmVxdWlyZSgnZXZlbnRlbWl0dGVyMycpLFxuICAgIENPTlNUID0gcmVxdWlyZSgnLi4vY29uc3QnKSxcbiAgICBfdGVtcE1hdHJpeCA9IG5ldyBtYXRoLk1hdHJpeCgpLFxuICAgIF90ZW1wRGlzcGxheU9iamVjdFBhcmVudCA9IHt3b3JsZFRyYW5zZm9ybTpuZXcgbWF0aC5NYXRyaXgoKSwgd29ybGRBbHBoYToxLCBjaGlsZHJlbjpbXX07XG5cblxuLyoqXG4gKiBUaGUgYmFzZSBjbGFzcyBmb3IgYWxsIG9iamVjdHMgdGhhdCBhcmUgcmVuZGVyZWQgb24gdGhlIHNjcmVlbi5cbiAqIFRoaXMgaXMgYW4gYWJzdHJhY3QgY2xhc3MgYW5kIHNob3VsZCBub3QgYmUgdXNlZCBvbiBpdHMgb3duIHJhdGhlciBpdCBzaG91bGQgYmUgZXh0ZW5kZWQuXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBFdmVudEVtaXR0ZXJcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKi9cbmZ1bmN0aW9uIERpc3BsYXlPYmplY3QoKVxue1xuICAgIEV2ZW50RW1pdHRlci5jYWxsKHRoaXMpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGNvb3JkaW5hdGUgb2YgdGhlIG9iamVjdCByZWxhdGl2ZSB0byB0aGUgbG9jYWwgY29vcmRpbmF0ZXMgb2YgdGhlIHBhcmVudC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuUG9pbnR9XG4gICAgICovXG4gICAgdGhpcy5wb3NpdGlvbiA9IG5ldyBtYXRoLlBvaW50KCk7XG4gICAgdGhpcy5fcG9zaXRpb24gPSBuZXcgQ2FjaGVQb2ludCh0aGlzKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBzY2FsZSBmYWN0b3Igb2YgdGhlIG9iamVjdC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuUG9pbnR9XG4gICAgICovXG4gICAgdGhpcy5zY2FsZSA9IG5ldyBtYXRoLlBvaW50KDEsIDEpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHBpdm90IHBvaW50IG9mIHRoZSBkaXNwbGF5T2JqZWN0IHRoYXQgaXQgcm90YXRlcyBhcm91bmRcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuUG9pbnR9XG4gICAgICovXG4gICAgdGhpcy5waXZvdCA9IG5ldyBtYXRoLlBvaW50KDAsIDApO1xuXG5cbiAgICAvKipcbiAgICAgKiBUaGUgc2tldyBmYWN0b3IgZm9yIHRoZSBvYmplY3QgaW4gcmFkaWFucy5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuUG9pbnR9XG4gICAgICovXG4gICAgdGhpcy5za2V3ID0gbmV3IG1hdGguUG9pbnQoMCwgMCk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgcm90YXRpb24gb2YgdGhlIG9iamVjdCBpbiByYWRpYW5zLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMuX3JvdGF0aW9uID0gMDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBvcGFjaXR5IG9mIHRoZSBvYmplY3QuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy5hbHBoYSA9IDE7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgdmlzaWJpbGl0eSBvZiB0aGUgb2JqZWN0LiBJZiBmYWxzZSB0aGUgb2JqZWN0IHdpbGwgbm90IGJlIGRyYXduLCBhbmRcbiAgICAgKiB0aGUgdXBkYXRlVHJhbnNmb3JtIGZ1bmN0aW9uIHdpbGwgbm90IGJlIGNhbGxlZC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICovXG4gICAgdGhpcy52aXNpYmxlID0gdHJ1ZTtcblxuICAgIC8qKlxuICAgICAqIENhbiB0aGlzIG9iamVjdCBiZSByZW5kZXJlZCwgaWYgZmFsc2UgdGhlIG9iamVjdCB3aWxsIG5vdCBiZSBkcmF3biBidXQgdGhlIHVwZGF0ZVRyYW5zZm9ybVxuICAgICAqIG1ldGhvZHMgd2lsbCBzdGlsbCBiZSBjYWxsZWQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqL1xuICAgIHRoaXMucmVuZGVyYWJsZSA9IHRydWU7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgZGlzcGxheSBvYmplY3QgY29udGFpbmVyIHRoYXQgY29udGFpbnMgdGhpcyBkaXNwbGF5IG9iamVjdC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuQ29udGFpbmVyfVxuICAgICAqIEByZWFkT25seVxuICAgICAqL1xuICAgIHRoaXMucGFyZW50ID0gbnVsbDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBtdWx0aXBsaWVkIGFscGhhIG9mIHRoZSBkaXNwbGF5T2JqZWN0XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQHJlYWRPbmx5XG4gICAgICovXG4gICAgdGhpcy53b3JsZEFscGhhID0gMTtcblxuICAgIC8qKlxuICAgICAqIEN1cnJlbnQgdHJhbnNmb3JtIG9mIHRoZSBvYmplY3QgYmFzZWQgb24gd29ybGQgKHBhcmVudCkgZmFjdG9yc1xuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5NYXRyaXh9XG4gICAgICogQHJlYWRPbmx5XG4gICAgICovXG4gICAgdGhpcy53b3JsZFRyYW5zZm9ybSA9IG5ldyBtYXRoLk1hdHJpeCgpO1xuICAgIHRoaXMubG9jYWxUcmFuc2Zvcm0gPSBuZXcgbWF0aC5NYXRyaXgoKTtcblxuXG4gICAgLyoqXG4gICAgICogVGhlIGFyZWEgdGhlIGZpbHRlciBpcyBhcHBsaWVkIHRvLiBUaGlzIGlzIHVzZWQgYXMgbW9yZSBvZiBhbiBvcHRpbWlzYXRpb25cbiAgICAgKiByYXRoZXIgdGhhbiBmaWd1cmluZyBvdXQgdGhlIGRpbWVuc2lvbnMgb2YgdGhlIGRpc3BsYXlPYmplY3QgZWFjaCBmcmFtZSB5b3UgY2FuIHNldCB0aGlzIHJlY3RhbmdsZVxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5SZWN0YW5nbGV9XG4gICAgICovXG4gICAgdGhpcy5maWx0ZXJBcmVhID0gbnVsbDtcblxuICAgIC8qKlxuICAgICAqIGNhY2hlZCBzaW4gcm90YXRpb25cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX3NyID0gMDtcblxuICAgIC8qKlxuICAgICAqIGNhY2hlZCBjb3Mgcm90YXRpb25cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX2NyID0gMTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBvcmlnaW5hbCwgY2FjaGVkIGJvdW5kcyBvZiB0aGUgb2JqZWN0XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlJlY3RhbmdsZX1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX2JvdW5kcyA9IG5ldyBtYXRoLlJlY3RhbmdsZSgwLCAwLCAxLCAxKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBtb3N0IHVwLXRvLWRhdGUgYm91bmRzIG9mIHRoZSBvYmplY3RcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuUmVjdGFuZ2xlfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fY3VycmVudEJvdW5kcyA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgb3JpZ2luYWwsIGNhY2hlZCBtYXNrIG9mIHRoZSBvYmplY3RcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuUmVjdGFuZ2xlfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fbWFzayA9IG51bGw7XG5cbiAgICB0aGlzLmRpcnR5VHJhbnNmb3JtID0gdHJ1ZTtcbn1cblxuLy8gY29uc3RydWN0b3JcbkRpc3BsYXlPYmplY3QucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShFdmVudEVtaXR0ZXIucHJvdG90eXBlKTtcbkRpc3BsYXlPYmplY3QucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gRGlzcGxheU9iamVjdDtcbm1vZHVsZS5leHBvcnRzID0gRGlzcGxheU9iamVjdDtcblxudmFyIENhY2hlUG9pbnQgPSBmdW5jdGlvbihkb2Mpe1xuICAgIFxuICAgIHRoaXMuZG9jID0gZG9jO1xuXG4gICAgdGhpcy54ID0gMDtcbiAgICB0aGlzLnkgPSAwO1xufVxuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhDYWNoZVBvaW50LnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFRoZSBwb3NpdGlvbiBvZiB0aGUgZGlzcGxheU9iamVjdCBvbiB0aGUgeCBheGlzIHJlbGF0aXZlIHRvIHRoZSBsb2NhbCBjb29yZGluYXRlcyBvZiB0aGUgcGFyZW50LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLkRpc3BsYXlPYmplY3QjXG4gICAgICovXG4gICAgeDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmRvYy5wb3NpdGlvbi54O1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5kb2MucG9zaXRpb24ueCA9IHZhbHVlO1xuICAgICAgICAgICAgdGhpcy5kb2MuZGlydHlUcmFuc2Zvcm0gPSB0cnVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIHk6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5kb2MucG9zaWl0b24ueTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuZG9jLnBvc2l0aW9uLnkgPSB2YWx1ZTtcbiAgICAgICAgICAgIHRoaXMuZG9jLmRpcnR5VHJhbnNmb3JtID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuXG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKERpc3BsYXlPYmplY3QucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogVGhlIHBvc2l0aW9uIG9mIHRoZSBkaXNwbGF5T2JqZWN0IG9uIHRoZSB4IGF4aXMgcmVsYXRpdmUgdG8gdGhlIGxvY2FsIGNvb3JkaW5hdGVzIG9mIHRoZSBwYXJlbnQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuRGlzcGxheU9iamVjdCNcbiAgICAgKi9cbiAgICB4OiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMucG9zaXRpb24ueDtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMucG9zaXRpb24ueCA9IHZhbHVlO1xuICAgICAgICAgICAgdGhpcy5kaXJ0eVRyYW5zZm9ybSA9IHRydWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVGhlIHBvc2l0aW9uIG9mIHRoZSBkaXNwbGF5T2JqZWN0IG9uIHRoZSB5IGF4aXMgcmVsYXRpdmUgdG8gdGhlIGxvY2FsIGNvb3JkaW5hdGVzIG9mIHRoZSBwYXJlbnQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuRGlzcGxheU9iamVjdCNcbiAgICAgKi9cbiAgICB5OiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMucG9zaXRpb24ueTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMucG9zaXRpb24ueSA9IHZhbHVlO1xuICAgICAgICAgICAgdGhpcy5kaXJ0eVRyYW5zZm9ybSA9IHRydWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgc2NhbGVYOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuc2NhbGUueDtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuc2NhbGUueCA9IHZhbHVlO1xuICAgICAgICAgICAgdGhpcy5kaXJ0eVRyYW5zZm9ybSA9IHRydWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVGhlIHBvc2l0aW9uIG9mIHRoZSBkaXNwbGF5T2JqZWN0IG9uIHRoZSB5IGF4aXMgcmVsYXRpdmUgdG8gdGhlIGxvY2FsIGNvb3JkaW5hdGVzIG9mIHRoZSBwYXJlbnQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuRGlzcGxheU9iamVjdCNcbiAgICAgKi9cbiAgICBzY2FsZVk6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5zY2FsZS55O1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5zY2FsZS55ID0gdmFsdWU7XG4gICAgICAgICAgICB0aGlzLmRpcnR5VHJhbnNmb3JtID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICByb3RhdGlvbjoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9yb3RhdGlvbjtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuX3JvdGF0aW9uID0gdmFsdWU7XG4gICAgICAgICAgICB0aGlzLmRpcnR5VHJhbnNmb3JtID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMuX3NyID0gTWF0aC5zaW4odmFsdWUpO1xuICAgICAgICAgICAgdGhpcy5fY3IgPSBNYXRoLmNvcyh2YWx1ZSk7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVGhlIHBvc2l0aW9uIG9mIHRoZSBkaXNwbGF5T2JqZWN0IG9uIHRoZSB5IGF4aXMgcmVsYXRpdmUgdG8gdGhlIGxvY2FsIGNvb3JkaW5hdGVzIG9mIHRoZSBwYXJlbnQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuRGlzcGxheU9iamVjdCNcbiAgICAgKi9cbiAgICBzY2FsZVk6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5zY2FsZS55O1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5zY2FsZS55ID0gdmFsdWU7XG4gICAgICAgICAgICB0aGlzLmRpcnR5VHJhbnNmb3JtID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBJbmRpY2F0ZXMgaWYgdGhlIHNwcml0ZSBpcyBnbG9iYWxseSB2aXNpYmxlLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5EaXNwbGF5T2JqZWN0I1xuICAgICAqIEByZWFkb25seVxuICAgICAqL1xuICAgIHdvcmxkVmlzaWJsZToge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHZhciBpdGVtID0gdGhpcztcblxuICAgICAgICAgICAgZG8ge1xuICAgICAgICAgICAgICAgIGlmICghaXRlbS52aXNpYmxlKVxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGl0ZW0gPSBpdGVtLnBhcmVudDtcbiAgICAgICAgICAgIH0gd2hpbGUgKGl0ZW0pO1xuXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBTZXRzIGEgbWFzayBmb3IgdGhlIGRpc3BsYXlPYmplY3QuIEEgbWFzayBpcyBhbiBvYmplY3QgdGhhdCBsaW1pdHMgdGhlIHZpc2liaWxpdHkgb2YgYW4gb2JqZWN0IHRvIHRoZSBzaGFwZSBvZiB0aGUgbWFzayBhcHBsaWVkIHRvIGl0LlxuICAgICAqIEluIFBJWEkgYSByZWd1bGFyIG1hc2sgbXVzdCBiZSBhIFBJWEkuR3JhcGhpY3Mgb3IgYSBQSVhJLlNwcml0ZSBvYmplY3QuIFRoaXMgYWxsb3dzIGZvciBtdWNoIGZhc3RlciBtYXNraW5nIGluIGNhbnZhcyBhcyBpdCB1dGlsaXNlcyBzaGFwZSBjbGlwcGluZy5cbiAgICAgKiBUbyByZW1vdmUgYSBtYXNrLCBzZXQgdGhpcyBwcm9wZXJ0eSB0byBudWxsLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5HcmFwaGljc3xQSVhJLlNwcml0ZX1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5EaXNwbGF5T2JqZWN0I1xuICAgICAqL1xuICAgIG1hc2s6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fbWFzaztcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGlmICh0aGlzLl9tYXNrKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHRoaXMuX21hc2sucmVuZGVyYWJsZSA9IHRydWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuX21hc2sgPSB2YWx1ZTtcblxuICAgICAgICAgICAgaWYgKHRoaXMuX21hc2spXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdGhpcy5fbWFzay5yZW5kZXJhYmxlID0gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgZmlsdGVycyBmb3IgdGhlIGRpc3BsYXlPYmplY3QuXG4gICAgICogKiBJTVBPUlRBTlQ6IFRoaXMgaXMgYSB3ZWJHTCBvbmx5IGZlYXR1cmUgYW5kIHdpbGwgYmUgaWdub3JlZCBieSB0aGUgY2FudmFzIHJlbmRlcmVyLlxuICAgICAqIFRvIHJlbW92ZSBmaWx0ZXJzIHNpbXBseSBzZXQgdGhpcyBwcm9wZXJ0eSB0byAnbnVsbCdcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuQWJzdHJhY3RGaWx0ZXJbXX1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5EaXNwbGF5T2JqZWN0I1xuICAgICAqL1xuICAgIGZpbHRlcnM6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fZmlsdGVycyAmJiB0aGlzLl9maWx0ZXJzLnNsaWNlKCk7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLl9maWx0ZXJzID0gdmFsdWUgJiYgdmFsdWUuc2xpY2UoKTtcbiAgICAgICAgfVxuICAgIH1cblxufSk7XG5cbi8qXG4gKiBVcGRhdGVzIHRoZSBvYmplY3QgdHJhbnNmb3JtIGZvciByZW5kZXJpbmdcbiAqXG4gKiBUT0RPIC0gT3B0aW1pemF0aW9uIHBhc3MhXG4gKi9cbkRpc3BsYXlPYmplY3QucHJvdG90eXBlLnVwZGF0ZVRyYW5zZm9ybSA9IGZ1bmN0aW9uICgpXG57XG4gICAgdmFyIHB0ID0gdGhpcy5wYXJlbnQud29ybGRUcmFuc2Zvcm07XG4gICAgdmFyIHd0ID0gdGhpcy53b3JsZFRyYW5zZm9ybTtcbiAgICB2YXIgbHQgPSB0aGlzLmxvY2FsVHJhbnNmb3JtO1xuXG4gICAgaWYodGhpcy5kaXJ0eVRyYW5zZm9ybSlcbiAgICB7XG4gICAgICAgIC8vIGdldCB0aGUgbWF0cml4IHZhbHVlcyBvZiB0aGUgZGlzcGxheW9iamVjdCBiYXNlZCBvbiBpdHMgdHJhbnNmb3JtIHByb3BlcnRpZXMuLlxuICAgICAgICBsdC5hICA9ICB0aGlzLl9jciAqIHRoaXMuc2NhbGUueDtcbiAgICAgICAgbHQuYiAgPSAgdGhpcy5fc3IgKiB0aGlzLnNjYWxlLng7XG4gICAgICAgIGx0LmMgID0gLXRoaXMuX3NyICogdGhpcy5zY2FsZS55O1xuICAgICAgICBsdC5kICA9ICB0aGlzLl9jciAqIHRoaXMuc2NhbGUueTtcbiAgICAgICAgbHQudHggPSAgdGhpcy5wb3NpdGlvbi54IC0gKHRoaXMucGl2b3QueCAqIGx0LmEgKyB0aGlzLnBpdm90LnkgKiBsdC5jKTtcbiAgICAgICAgbHQudHkgPSAgdGhpcy5wb3NpdGlvbi55IC0gKHRoaXMucGl2b3QueCAqIGx0LmIgKyB0aGlzLnBpdm90LnkgKiBsdC5kKTtcbiAgICB9XG5cbiAgICBpZih0aGlzLmRpcnR5VHJhbnNmb3JtIHx8IHRoaXMucGFyZW50LmRpcnR5VHJhbnNmb3JtKVxuICAgIHsgICAgICBcbiAgICAgICAgLy8gY29uY2F0IHRoZSBwYXJlbnQgbWF0cml4IHdpdGggdGhlIG9iamVjdHMgdHJhbnNmb3JtLlxuICAgICAgICB3dC5hICA9IGx0LmEgICogcHQuYSArIGx0LmIgICogcHQuYztcbiAgICAgICAgd3QuYiAgPSBsdC5hICAqIHB0LmIgKyBsdC5iICAqIHB0LmQ7XG4gICAgICAgIHd0LmMgID0gbHQuYyAgKiBwdC5hICsgbHQuZCAgKiBwdC5jO1xuICAgICAgICB3dC5kICA9IGx0LmMgICogcHQuYiArIGx0LmQgICogcHQuZDtcbiAgICAgICAgd3QudHggPSBsdC50eCAqIHB0LmEgKyBsdC50eSAqIHB0LmMgKyBwdC50eDtcbiAgICAgICAgd3QudHkgPSBsdC50eCAqIHB0LmIgKyBsdC50eSAqIHB0LmQgKyBwdC50eTsgICAgICAgXG4gICAgXG4gICAgICAgIHRoaXMuX2N1cnJlbnRCb3VuZHMgPSBudWxsO1xuICAgIH1cblxuICAgIC8vIG11bHRpcGx5IHRoZSBhbHBoYXMuLlxuICAgIHRoaXMud29ybGRBbHBoYSA9IHRoaXMuYWxwaGEgKiB0aGlzLnBhcmVudC53b3JsZEFscGhhO1xuXG4gICAgLy8gcmVzZXQgdGhlIGJvdW5kcyBlYWNoIHRpbWUgdGhpcyBpcyBjYWxsZWQhXG4gICAgXG59O1xuXG4vLyBwZXJmb3JtYW5jZSBpbmNyZWFzZSB0byBhdm9pZCB1c2luZyBjYWxsLi4gKDEweCBmYXN0ZXIpXG5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS5kaXNwbGF5T2JqZWN0VXBkYXRlVHJhbnNmb3JtID0gRGlzcGxheU9iamVjdC5wcm90b3R5cGUudXBkYXRlVHJhbnNmb3JtO1xuXG4vKipcbiAqXG4gKlxuICogUmV0cmlldmVzIHRoZSBib3VuZHMgb2YgdGhlIGRpc3BsYXlPYmplY3QgYXMgYSByZWN0YW5nbGUgb2JqZWN0XG4gKlxuICogQHBhcmFtIG1hdHJpeCB7UElYSS5NYXRyaXh9XG4gKiBAcmV0dXJuIHtQSVhJLlJlY3RhbmdsZX0gdGhlIHJlY3Rhbmd1bGFyIGJvdW5kaW5nIGFyZWFcbiAqL1xuRGlzcGxheU9iamVjdC5wcm90b3R5cGUuZ2V0Qm91bmRzID0gZnVuY3Rpb24gKG1hdHJpeCkgLy8ganNoaW50IHVudXNlZDpmYWxzZVxue1xuICAgIHJldHVybiBtYXRoLlJlY3RhbmdsZS5FTVBUWTtcbn07XG5cbi8qKlxuICogUmV0cmlldmVzIHRoZSBsb2NhbCBib3VuZHMgb2YgdGhlIGRpc3BsYXlPYmplY3QgYXMgYSByZWN0YW5nbGUgb2JqZWN0XG4gKlxuICogQHJldHVybiB7UElYSS5SZWN0YW5nbGV9IHRoZSByZWN0YW5ndWxhciBib3VuZGluZyBhcmVhXG4gKi9cbkRpc3BsYXlPYmplY3QucHJvdG90eXBlLmdldExvY2FsQm91bmRzID0gZnVuY3Rpb24gKClcbntcbiAgICByZXR1cm4gdGhpcy5nZXRCb3VuZHMobWF0aC5NYXRyaXguSURFTlRJVFkpO1xufTtcblxuLyoqXG4gKiBDYWxjdWxhdGVzIHRoZSBnbG9iYWwgcG9zaXRpb24gb2YgdGhlIGRpc3BsYXkgb2JqZWN0XG4gKlxuICogQHBhcmFtIHBvc2l0aW9uIHtQSVhJLlBvaW50fSBUaGUgd29ybGQgb3JpZ2luIHRvIGNhbGN1bGF0ZSBmcm9tXG4gKiBAcmV0dXJuIHtQSVhJLlBvaW50fSBBIHBvaW50IG9iamVjdCByZXByZXNlbnRpbmcgdGhlIHBvc2l0aW9uIG9mIHRoaXMgb2JqZWN0XG4gKi9cbkRpc3BsYXlPYmplY3QucHJvdG90eXBlLnRvR2xvYmFsID0gZnVuY3Rpb24gKHBvc2l0aW9uKVxue1xuICAgIC8vIHRoaXMgcGFyZW50IGNoZWNrIGlzIGZvciBqdXN0IGluIGNhc2UgdGhlIGl0ZW0gaXMgYSByb290IG9iamVjdC5cbiAgICAvLyBJZiBpdCBpcyB3ZSBuZWVkIHRvIGdpdmUgaXQgYSB0ZW1wb3JhcnkgcGFyZW50IHNvIHRoYXQgZGlzcGxheU9iamVjdFVwZGF0ZVRyYW5zZm9ybSB3b3JrcyBjb3JyZWN0bHlcbiAgICAvLyB0aGlzIGlzIG1haW5seSB0byBhdm9pZCBhIHBhcmVudCBjaGVjayBpbiB0aGUgbWFpbiBsb29wLiBFdmVyeSBsaXR0bGUgaGVscHMgZm9yIHBlcmZvcm1hbmNlIDopXG4gICAgaWYoIXRoaXMucGFyZW50KVxuICAgIHtcbiAgICAgICAgdGhpcy5wYXJlbnQgPSBfdGVtcERpc3BsYXlPYmplY3RQYXJlbnQ7XG4gICAgICAgIHRoaXMuZGlzcGxheU9iamVjdFVwZGF0ZVRyYW5zZm9ybSgpO1xuICAgICAgICB0aGlzLnBhcmVudCA9IG51bGw7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHRoaXMuZGlzcGxheU9iamVjdFVwZGF0ZVRyYW5zZm9ybSgpO1xuICAgIH1cblxuICAgIC8vIGRvbid0IG5lZWQgdG8gdXBkYXRlIHRoZSBsb3RcbiAgICByZXR1cm4gdGhpcy53b3JsZFRyYW5zZm9ybS5hcHBseShwb3NpdGlvbik7XG59O1xuXG4vKipcbiAqIENhbGN1bGF0ZXMgdGhlIGxvY2FsIHBvc2l0aW9uIG9mIHRoZSBkaXNwbGF5IG9iamVjdCByZWxhdGl2ZSB0byBhbm90aGVyIHBvaW50XG4gKlxuICogQHBhcmFtIHBvc2l0aW9uIHtQSVhJLlBvaW50fSBUaGUgd29ybGQgb3JpZ2luIHRvIGNhbGN1bGF0ZSBmcm9tXG4gKiBAcGFyYW0gW2Zyb21dIHtQSVhJLkRpc3BsYXlPYmplY3R9IFRoZSBEaXNwbGF5T2JqZWN0IHRvIGNhbGN1bGF0ZSB0aGUgZ2xvYmFsIHBvc2l0aW9uIGZyb21cbiAqIEBwYXJhbSBbcG9pbnRdIHtQSVhJLlBvaW50fSBBIFBvaW50IG9iamVjdCBpbiB3aGljaCB0byBzdG9yZSB0aGUgdmFsdWUsIG9wdGlvbmFsIChvdGhlcndpc2Ugd2lsbCBjcmVhdGUgYSBuZXcgUG9pbnQpXG4gKiBAcmV0dXJuIHtQSVhJLlBvaW50fSBBIHBvaW50IG9iamVjdCByZXByZXNlbnRpbmcgdGhlIHBvc2l0aW9uIG9mIHRoaXMgb2JqZWN0XG4gKi9cbkRpc3BsYXlPYmplY3QucHJvdG90eXBlLnRvTG9jYWwgPSBmdW5jdGlvbiAocG9zaXRpb24sIGZyb20sIHBvaW50KVxue1xuICAgIGlmIChmcm9tKVxuICAgIHtcbiAgICAgICAgcG9zaXRpb24gPSBmcm9tLnRvR2xvYmFsKHBvc2l0aW9uKTtcbiAgICB9XG5cbiAgICAvLyB0aGlzIHBhcmVudCBjaGVjayBpcyBmb3IganVzdCBpbiBjYXNlIHRoZSBpdGVtIGlzIGEgcm9vdCBvYmplY3QuXG4gICAgLy8gSWYgaXQgaXMgd2UgbmVlZCB0byBnaXZlIGl0IGEgdGVtcG9yYXJ5IHBhcmVudCBzbyB0aGF0IGRpc3BsYXlPYmplY3RVcGRhdGVUcmFuc2Zvcm0gd29ya3MgY29ycmVjdGx5XG4gICAgLy8gdGhpcyBpcyBtYWlubHkgdG8gYXZvaWQgYSBwYXJlbnQgY2hlY2sgaW4gdGhlIG1haW4gbG9vcC4gRXZlcnkgbGl0dGxlIGhlbHBzIGZvciBwZXJmb3JtYW5jZSA6KVxuICAgIGlmKCF0aGlzLnBhcmVudClcbiAgICB7XG4gICAgICAgIHRoaXMucGFyZW50ID0gX3RlbXBEaXNwbGF5T2JqZWN0UGFyZW50O1xuICAgICAgICB0aGlzLmRpc3BsYXlPYmplY3RVcGRhdGVUcmFuc2Zvcm0oKTtcbiAgICAgICAgdGhpcy5wYXJlbnQgPSBudWxsO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICB0aGlzLmRpc3BsYXlPYmplY3RVcGRhdGVUcmFuc2Zvcm0oKTtcbiAgICB9XG5cbiAgICAvLyBzaW1wbHkgYXBwbHkgdGhlIG1hdHJpeC4uXG4gICAgcmV0dXJuIHRoaXMud29ybGRUcmFuc2Zvcm0uYXBwbHlJbnZlcnNlKHBvc2l0aW9uLCBwb2ludCk7XG59O1xuXG4vKipcbiAqIFJlbmRlcnMgdGhlIG9iamVjdCB1c2luZyB0aGUgV2ViR0wgcmVuZGVyZXJcbiAqXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcn0gVGhlIHJlbmRlcmVyXG4gKiBAcHJpdmF0ZVxuICovXG5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS5yZW5kZXJXZWJHTCA9IGZ1bmN0aW9uIChyZW5kZXJlcikgLy8ganNoaW50IHVudXNlZDpmYWxzZVxue1xuICAgIC8vIE9WRVJXUklURTtcbn07XG5cbi8qKlxuICogUmVuZGVycyB0aGUgb2JqZWN0IHVzaW5nIHRoZSBDYW52YXMgcmVuZGVyZXJcbiAqXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuQ2FudmFzUmVuZGVyZXJ9IFRoZSByZW5kZXJlclxuICogQHByaXZhdGVcbiAqL1xuRGlzcGxheU9iamVjdC5wcm90b3R5cGUucmVuZGVyQ2FudmFzID0gZnVuY3Rpb24gKHJlbmRlcmVyKSAvLyBqc2hpbnQgdW51c2VkOmZhbHNlXG57XG4gICAgLy8gT1ZFUldSSVRFO1xufTtcbi8qKlxuICogVXNlZnVsIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyBhIHRleHR1cmUgb2YgdGhlIGRpc3BsYXkgb2JqZWN0IHRoYXQgY2FuIHRoZW4gYmUgdXNlZCB0byBjcmVhdGUgc3ByaXRlc1xuICogVGhpcyBjYW4gYmUgcXVpdGUgdXNlZnVsIGlmIHlvdXIgZGlzcGxheU9iamVjdCBpcyBzdGF0aWMgLyBjb21wbGljYXRlZCBhbmQgbmVlZHMgdG8gYmUgcmV1c2VkIG11bHRpcGxlIHRpbWVzLlxuICpcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5DYW52YXNSZW5kZXJlcnxQSVhJLldlYkdMUmVuZGVyZXJ9IFRoZSByZW5kZXJlciB1c2VkIHRvIGdlbmVyYXRlIHRoZSB0ZXh0dXJlLlxuICogQHBhcmFtIHNjYWxlTW9kZSB7bnVtYmVyfSBTZWUge0BsaW5rIFBJWEkuU0NBTEVfTU9ERVN9IGZvciBwb3NzaWJsZSB2YWx1ZXNcbiAqIEBwYXJhbSByZXNvbHV0aW9uIHtudW1iZXJ9IFRoZSByZXNvbHV0aW9uIG9mIHRoZSB0ZXh0dXJlIGJlaW5nIGdlbmVyYXRlZFxuICogQHJldHVybiB7UElYSS5UZXh0dXJlfSBhIHRleHR1cmUgb2YgdGhlIGRpc3BsYXkgb2JqZWN0XG4gKi9cbkRpc3BsYXlPYmplY3QucHJvdG90eXBlLmdlbmVyYXRlVGV4dHVyZSA9IGZ1bmN0aW9uIChyZW5kZXJlciwgc2NhbGVNb2RlLCByZXNvbHV0aW9uKVxue1xuICAgIHZhciBib3VuZHMgPSB0aGlzLmdldExvY2FsQm91bmRzKCk7XG5cbiAgICB2YXIgcmVuZGVyVGV4dHVyZSA9IG5ldyBSZW5kZXJUZXh0dXJlKHJlbmRlcmVyLCBib3VuZHMud2lkdGggfCAwLCBib3VuZHMuaGVpZ2h0IHwgMCwgc2NhbGVNb2RlLCByZXNvbHV0aW9uKTtcblxuICAgIF90ZW1wTWF0cml4LnR4ID0gLWJvdW5kcy54O1xuICAgIF90ZW1wTWF0cml4LnR5ID0gLWJvdW5kcy55O1xuXG4gICAgcmVuZGVyVGV4dHVyZS5yZW5kZXIodGhpcywgX3RlbXBNYXRyaXgpO1xuXG4gICAgcmV0dXJuIHJlbmRlclRleHR1cmU7XG59O1xuXG4vKipcbiAqIFNldCB0aGUgcGFyZW50IENvbnRhaW5lciBvZiB0aGlzIERpc3BsYXlPYmplY3RcbiAqXG4gKiBAcGFyYW0gY29udGFpbmVyIHtDb250YWluZXJ9IFRoZSBDb250YWluZXIgdG8gYWRkIHRoaXMgRGlzcGxheU9iamVjdCB0b1xuICogQHJldHVybiB7Q29udGFpbmVyfSBUaGUgQ29udGFpbmVyIHRoYXQgdGhpcyBEaXNwbGF5T2JqZWN0IHdhcyBhZGRlZCB0b1xuICovXG5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS5zZXRQYXJlbnQgPSBmdW5jdGlvbiAoY29udGFpbmVyKVxue1xuICAgIGlmICghY29udGFpbmVyIHx8ICFjb250YWluZXIuYWRkQ2hpbGQpXG4gICAge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3NldFBhcmVudDogQXJndW1lbnQgbXVzdCBiZSBhIENvbnRhaW5lcicpO1xuICAgIH1cblxuICAgIGNvbnRhaW5lci5hZGRDaGlsZCh0aGlzKTtcbiAgICByZXR1cm4gY29udGFpbmVyO1xufTtcblxuLyoqXG4gKiBDb252ZW5pZW5jZSBmdW5jdGlvbiB0byBzZXQgdGhlIHBvc3Rpb24sIHNjYWxlLCBza2V3IGFuZCBwaXZvdCBhdCBvbmNlLlxuICpcbiAqIEBwYXJhbSBbeD0wXSB7bnVtYmVyfSBUaGUgWCBwb3NpdGlvblxuICogQHBhcmFtIFt5PTBdIHtudW1iZXJ9IFRoZSBZIHBvc2l0aW9uXG4gKiBAcGFyYW0gW3NjYWxlWD0xXSB7bnVtYmVyfSBUaGUgWCBzY2FsZSB2YWx1ZVxuICogQHBhcmFtIFtzY2FsZVk9MV0ge251bWJlcn0gVGhlIFkgc2NhbGUgdmFsdWVcbiAqIEBwYXJhbSBbcm90YXRpb249MF0ge251bWJlcn0gVGhlIHJvdGF0aW9uXG4gKiBAcGFyYW0gW3NrZXdYPTBdIHtudW1iZXJ9IFRoZSBYIHNrZXcgdmFsdWVcbiAqIEBwYXJhbSBbc2tld1k9MF0ge251bWJlcn0gVGhlIFkgc2tldyB2YWx1ZVxuICogQHBhcmFtIFtwaXZvdFg9MF0ge251bWJlcn0gVGhlIFggcGl2b3QgdmFsdWVcbiAqIEBwYXJhbSBbcGl2b3RZPTBdIHtudW1iZXJ9IFRoZSBZIHBpdm90IHZhbHVlXG4gKiBAcmV0dXJuIHtQSVhJLkRpc3BsYXlPYmplY3R9XG4gKi9cbkRpc3BsYXlPYmplY3QucHJvdG90eXBlLnNldFRyYW5zZm9ybSA9IGZ1bmN0aW9uKHgsIHksIHNjYWxlWCwgc2NhbGVZLCByb3RhdGlvbiwgc2tld1gsIHNrZXdZLCBwaXZvdFgsIHBpdm90WSkgLy9qc2hpbnQgaWdub3JlOmxpbmVcbntcbiAgICB0aGlzLnBvc2l0aW9uLnggPSB4IHx8IDA7XG4gICAgdGhpcy5wb3NpdGlvbi55ID0geSB8fCAwO1xuICAgIHRoaXMuc2NhbGUueCA9ICFzY2FsZVggPyAxIDogc2NhbGVYO1xuICAgIHRoaXMuc2NhbGUueSA9ICFzY2FsZVkgPyAxIDogc2NhbGVZO1xuICAgIHRoaXMucm90YXRpb24gPSByb3RhdGlvbiB8fCAwO1xuICAgIHRoaXMuc2tldy54ID0gc2tld1ggfHwgMDtcbiAgICB0aGlzLnNrZXcueSA9IHNrZXdZIHx8IDA7XG4gICAgdGhpcy5waXZvdC54ID0gcGl2b3RYIHx8IDA7XG4gICAgdGhpcy5waXZvdC55ID0gcGl2b3RZIHx8IDA7XG4gICAgdGhpcy5kaXJ0eVRyYW5zZm9ybSA9IHRydWU7XG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIEJhc2UgZGVzdHJveSBtZXRob2QgZm9yIGdlbmVyaWMgZGlzcGxheSBvYmplY3RzXG4gKlxuICovXG5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKClcbntcblxuICAgIHRoaXMucG9zaXRpb24gPSBudWxsO1xuICAgIHRoaXMuc2NhbGUgPSBudWxsO1xuICAgIHRoaXMucGl2b3QgPSBudWxsO1xuICAgIHRoaXMuc2tldyA9IG51bGw7XG5cbiAgICB0aGlzLnBhcmVudCA9IG51bGw7XG5cbiAgICB0aGlzLl9ib3VuZHMgPSBudWxsO1xuICAgIHRoaXMuX2N1cnJlbnRCb3VuZHMgPSBudWxsO1xuICAgIHRoaXMuX21hc2sgPSBudWxsO1xuXG4gICAgdGhpcy53b3JsZFRyYW5zZm9ybSA9IG51bGw7XG4gICAgdGhpcy5maWx0ZXJBcmVhID0gbnVsbDtcbn07XG4iLCJ2YXIgQ29udGFpbmVyID0gcmVxdWlyZSgnLi4vZGlzcGxheS9Db250YWluZXInKSxcbiAgICBUZXh0dXJlID0gcmVxdWlyZSgnLi4vdGV4dHVyZXMvVGV4dHVyZScpLFxuICAgIENhbnZhc0J1ZmZlciA9IHJlcXVpcmUoJy4uL3JlbmRlcmVycy9jYW52YXMvdXRpbHMvQ2FudmFzQnVmZmVyJyksXG4gICAgQ2FudmFzR3JhcGhpY3MgPSByZXF1aXJlKCcuLi9yZW5kZXJlcnMvY2FudmFzL3V0aWxzL0NhbnZhc0dyYXBoaWNzJyksXG4gICAgR3JhcGhpY3NEYXRhID0gcmVxdWlyZSgnLi9HcmFwaGljc0RhdGEnKSxcbiAgICBtYXRoID0gcmVxdWlyZSgnLi4vbWF0aCcpLFxuICAgIENPTlNUID0gcmVxdWlyZSgnLi4vY29uc3QnKSxcbiAgICB0ZW1wUG9pbnQgPSBuZXcgbWF0aC5Qb2ludCgpO1xuXG4vKipcbiAqIFRoZSBHcmFwaGljcyBjbGFzcyBjb250YWlucyBtZXRob2RzIHVzZWQgdG8gZHJhdyBwcmltaXRpdmUgc2hhcGVzIHN1Y2ggYXMgbGluZXMsIGNpcmNsZXMgYW5kXG4gKiByZWN0YW5nbGVzIHRvIHRoZSBkaXNwbGF5LCBhbmQgdG8gY29sb3IgYW5kIGZpbGwgdGhlbS5cbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQ29udGFpbmVyXG4gKiBAbWVtYmVyb2YgUElYSVxuICovXG5mdW5jdGlvbiBHcmFwaGljcygpXG57XG4gICAgQ29udGFpbmVyLmNhbGwodGhpcyk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYWxwaGEgdmFsdWUgdXNlZCB3aGVuIGZpbGxpbmcgdGhlIEdyYXBoaWNzIG9iamVjdC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAxXG4gICAgICovXG4gICAgdGhpcy5maWxsQWxwaGEgPSAxO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHdpZHRoICh0aGlja25lc3MpIG9mIGFueSBsaW5lcyBkcmF3bi5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAwXG4gICAgICovXG4gICAgdGhpcy5saW5lV2lkdGggPSAwO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGNvbG9yIG9mIGFueSBsaW5lcyBkcmF3bi5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge3N0cmluZ31cbiAgICAgKiBAZGVmYXVsdCAwXG4gICAgICovXG4gICAgdGhpcy5saW5lQ29sb3IgPSAwO1xuXG4gICAgLyoqXG4gICAgICogR3JhcGhpY3MgZGF0YVxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5HcmFwaGljc0RhdGFbXX1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuZ3JhcGhpY3NEYXRhID0gW107XG5cbiAgICAvKipcbiAgICAgKiBUaGUgdGludCBhcHBsaWVkIHRvIHRoZSBncmFwaGljIHNoYXBlLiBUaGlzIGlzIGEgaGV4IHZhbHVlLiBBcHBseSBhIHZhbHVlIG9mIDB4RkZGRkZGIHRvIHJlc2V0IHRoZSB0aW50LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDB4RkZGRkZGXG4gICAgICovXG4gICAgdGhpcy50aW50ID0gMHhGRkZGRkY7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgcHJldmlvdXMgdGludCBhcHBsaWVkIHRvIHRoZSBncmFwaGljIHNoYXBlLiBVc2VkIHRvIGNvbXBhcmUgdG8gdGhlIGN1cnJlbnQgdGludCBhbmQgY2hlY2sgaWYgdGhlcmVzIGNoYW5nZS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBkZWZhdWx0IDB4RkZGRkZGXG4gICAgICovXG4gICAgdGhpcy5fcHJldlRpbnQgPSAweEZGRkZGRjtcblxuICAgIC8qKlxuICAgICAqIFRoZSBibGVuZCBtb2RlIHRvIGJlIGFwcGxpZWQgdG8gdGhlIGdyYXBoaWMgc2hhcGUuIEFwcGx5IGEgdmFsdWUgb2YgYFBJWEkuQkxFTkRfTU9ERVMuTk9STUFMYCB0byByZXNldCB0aGUgYmxlbmQgbW9kZS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCBQSVhJLkJMRU5EX01PREVTLk5PUk1BTDtcbiAgICAgKiBAc2VlIFBJWEkuQkxFTkRfTU9ERVNcbiAgICAgKi9cbiAgICB0aGlzLmJsZW5kTW9kZSA9IENPTlNULkJMRU5EX01PREVTLk5PUk1BTDtcblxuICAgIC8qKlxuICAgICAqIEN1cnJlbnQgcGF0aFxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5HcmFwaGljc0RhdGF9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLmN1cnJlbnRQYXRoID0gbnVsbDtcblxuICAgIC8qKlxuICAgICAqIEFycmF5IGNvbnRhaW5pbmcgc29tZSBXZWJHTC1yZWxhdGVkIHByb3BlcnRpZXMgdXNlZCBieSB0aGUgV2ViR0wgcmVuZGVyZXIuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtvYmplY3Q8bnVtYmVyLCBvYmplY3Q+fVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgLy8gVE9ETyAtIF93ZWJnbCBzaG91bGQgdXNlIGEgcHJvdG90eXBlIG9iamVjdCwgbm90IGEgcmFuZG9tIHVuZG9jdW1lbnRlZCBvYmplY3QuLi5cbiAgICB0aGlzLl93ZWJHTCA9IHt9O1xuXG4gICAgLyoqXG4gICAgICogV2hldGhlciB0aGlzIHNoYXBlIGlzIGJlaW5nIHVzZWQgYXMgYSBtYXNrLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKi9cbiAgICB0aGlzLmlzTWFzayA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGJvdW5kcycgcGFkZGluZyB1c2VkIGZvciBib3VuZHMgY2FsY3VsYXRpb24uXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy5ib3VuZHNQYWRkaW5nID0gMDtcblxuICAgIC8qKlxuICAgICAqIEEgY2FjaGUgb2YgdGhlIGxvY2FsIGJvdW5kcyB0byBwcmV2ZW50IHJlY2FsY3VsYXRpb24uXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlJlY3RhbmdsZX1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX2xvY2FsQm91bmRzID0gbmV3IG1hdGguUmVjdGFuZ2xlKDAsMCwxLDEpO1xuXG4gICAgLyoqXG4gICAgICogVXNlZCB0byBkZXRlY3QgaWYgdGhlIGdyYXBoaWNzIG9iamVjdCBoYXMgY2hhbmdlZC4gSWYgdGhpcyBpcyBzZXQgdG8gdHJ1ZSB0aGVuIHRoZSBncmFwaGljc1xuICAgICAqIG9iamVjdCB3aWxsIGJlIHJlY2FsY3VsYXRlZC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLmRpcnR5ID0gdHJ1ZTtcblxuICAgIC8qKlxuICAgICAqIFVzZWQgdG8gZGV0ZWN0IGlmIHRoZSBXZWJHTCBncmFwaGljcyBvYmplY3QgaGFzIGNoYW5nZWQuIElmIHRoaXMgaXMgc2V0IHRvIHRydWUgdGhlbiB0aGVcbiAgICAgKiBncmFwaGljcyBvYmplY3Qgd2lsbCBiZSByZWNhbGN1bGF0ZWQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5nbERpcnR5ID0gZmFsc2U7XG5cbiAgICB0aGlzLmJvdW5kc0RpcnR5ID0gdHJ1ZTtcblxuICAgIC8qKlxuICAgICAqIFVzZWQgdG8gZGV0ZWN0IGlmIHRoZSBjYWNoZWQgc3ByaXRlIG9iamVjdCBuZWVkcyB0byBiZSB1cGRhdGVkLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuY2FjaGVkU3ByaXRlRGlydHkgPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIFdoZW4gY2FjaGVBc0JpdG1hcCBpcyBzZXQgdG8gdHJ1ZSB0aGUgZ3JhcGhpY3Mgb2JqZWN0IHdpbGwgYmUgcmVuZGVyZWQgYXMgaWYgaXQgd2FzIGEgc3ByaXRlLlxuICAgICAqIFRoaXMgaXMgdXNlZnVsIGlmIHlvdXIgZ3JhcGhpY3MgZWxlbWVudCBkb2VzIG5vdCBjaGFuZ2Ugb2Z0ZW4sIGFzIGl0IHdpbGwgc3BlZWQgdXAgdGhlIHJlbmRlcmluZ1xuICAgICAqIG9mIHRoZSBvYmplY3QgaW4gZXhjaGFuZ2UgZm9yIHRha2luZyB1cCB0ZXh0dXJlIG1lbW9yeS4gSXQgaXMgYWxzbyB1c2VmdWwgaWYgeW91IG5lZWQgdGhlIGdyYXBoaWNzXG4gICAgICogb2JqZWN0IHRvIGJlIGFudGktYWxpYXNlZCwgYmVjYXVzZSBpdCB3aWxsIGJlIHJlbmRlcmVkIHVzaW5nIGNhbnZhcy4gVGhpcyBpcyBub3QgcmVjb21tZW5kZWQgaWZcbiAgICAgKiB5b3UgYXJlIGNvbnN0YW50bHkgcmVkcmF3aW5nIHRoZSBncmFwaGljcyBlbGVtZW50LlxuICAgICAqXG4gICAgICogQG5hbWUgY2FjaGVBc0JpdG1hcFxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICogQG1lbWJlcm9mIFBJWEkuR3JhcGhpY3MjXG4gICAgICogQGRlZmF1bHQgZmFsc2VcbiAgICAgKi9cbn1cblxuLy8gY29uc3RydWN0b3JcbkdyYXBoaWNzLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoQ29udGFpbmVyLnByb3RvdHlwZSk7XG5HcmFwaGljcy5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBHcmFwaGljcztcbm1vZHVsZS5leHBvcnRzID0gR3JhcGhpY3M7XG5cbi8qKlxuICogQ3JlYXRlcyBhIG5ldyBHcmFwaGljcyBvYmplY3Qgd2l0aCB0aGUgc2FtZSB2YWx1ZXMgYXMgdGhpcyBvbmUuXG4gKiBOb3RlIHRoYXQgdGhlIG9ubHkgdGhlIHByb3BlcnRpZXMgb2YgdGhlIG9iamVjdCBhcmUgY2xvbmVkLCBub3QgaXRzIHRyYW5zZm9ybSAocG9zaXRpb24sc2NhbGUsZXRjKVxuICpcbiAqIEByZXR1cm4ge1BJWEkuR3JhcGhpY3N9XG4gKi9cbkdyYXBoaWNzLnByb3RvdHlwZS5jbG9uZSA9IGZ1bmN0aW9uICgpXG57XG4gICAgdmFyIGNsb25lID0gbmV3IEdyYXBoaWNzKCk7XG5cbiAgICBjbG9uZS5yZW5kZXJhYmxlICAgID0gdGhpcy5yZW5kZXJhYmxlO1xuICAgIGNsb25lLmZpbGxBbHBoYSAgICAgPSB0aGlzLmZpbGxBbHBoYTtcbiAgICBjbG9uZS5saW5lV2lkdGggICAgID0gdGhpcy5saW5lV2lkdGg7XG4gICAgY2xvbmUubGluZUNvbG9yICAgICA9IHRoaXMubGluZUNvbG9yO1xuICAgIGNsb25lLnRpbnQgICAgICAgICAgPSB0aGlzLnRpbnQ7XG4gICAgY2xvbmUuYmxlbmRNb2RlICAgICA9IHRoaXMuYmxlbmRNb2RlO1xuICAgIGNsb25lLmlzTWFzayAgICAgICAgPSB0aGlzLmlzTWFzaztcbiAgICBjbG9uZS5ib3VuZHNQYWRkaW5nID0gdGhpcy5ib3VuZHNQYWRkaW5nO1xuICAgIGNsb25lLmRpcnR5ICAgICAgICAgPSB0cnVlO1xuICAgIGNsb25lLmdsRGlydHkgICAgICAgPSB0cnVlO1xuICAgIGNsb25lLmNhY2hlZFNwcml0ZURpcnR5ID0gdGhpcy5jYWNoZWRTcHJpdGVEaXJ0eTtcblxuICAgIC8vIGNvcHkgZ3JhcGhpY3MgZGF0YVxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5ncmFwaGljc0RhdGEubGVuZ3RoOyArK2kpXG4gICAge1xuICAgICAgICBjbG9uZS5ncmFwaGljc0RhdGEucHVzaCh0aGlzLmdyYXBoaWNzRGF0YVtpXS5jbG9uZSgpKTtcbiAgICB9XG5cbiAgICBjbG9uZS5jdXJyZW50UGF0aCA9IGNsb25lLmdyYXBoaWNzRGF0YVtjbG9uZS5ncmFwaGljc0RhdGEubGVuZ3RoIC0gMV07XG5cbiAgICBjbG9uZS51cGRhdGVMb2NhbEJvdW5kcygpO1xuXG4gICAgcmV0dXJuIGNsb25lO1xufTtcblxuLyoqXG4gKiBTcGVjaWZpZXMgdGhlIGxpbmUgc3R5bGUgdXNlZCBmb3Igc3Vic2VxdWVudCBjYWxscyB0byBHcmFwaGljcyBtZXRob2RzIHN1Y2ggYXMgdGhlIGxpbmVUbygpIG1ldGhvZCBvciB0aGUgZHJhd0NpcmNsZSgpIG1ldGhvZC5cbiAqXG4gKiBAcGFyYW0gbGluZVdpZHRoIHtudW1iZXJ9IHdpZHRoIG9mIHRoZSBsaW5lIHRvIGRyYXcsIHdpbGwgdXBkYXRlIHRoZSBvYmplY3RzIHN0b3JlZCBzdHlsZVxuICogQHBhcmFtIGNvbG9yIHtudW1iZXJ9IGNvbG9yIG9mIHRoZSBsaW5lIHRvIGRyYXcsIHdpbGwgdXBkYXRlIHRoZSBvYmplY3RzIHN0b3JlZCBzdHlsZVxuICogQHBhcmFtIGFscGhhIHtudW1iZXJ9IGFscGhhIG9mIHRoZSBsaW5lIHRvIGRyYXcsIHdpbGwgdXBkYXRlIHRoZSBvYmplY3RzIHN0b3JlZCBzdHlsZVxuICogQHJldHVybiB7UElYSS5HcmFwaGljc31cbiAqL1xuR3JhcGhpY3MucHJvdG90eXBlLmxpbmVTdHlsZSA9IGZ1bmN0aW9uIChsaW5lV2lkdGgsIGNvbG9yLCBhbHBoYSlcbntcbiAgICB0aGlzLmxpbmVXaWR0aCA9IGxpbmVXaWR0aCB8fCAwO1xuICAgIHRoaXMubGluZUNvbG9yID0gY29sb3IgfHwgMDtcbiAgICB0aGlzLmxpbmVBbHBoYSA9IChhbHBoYSA9PT0gdW5kZWZpbmVkKSA/IDEgOiBhbHBoYTtcblxuICAgIGlmICh0aGlzLmN1cnJlbnRQYXRoKVxuICAgIHtcbiAgICAgICAgaWYgKHRoaXMuY3VycmVudFBhdGguc2hhcGUucG9pbnRzLmxlbmd0aClcbiAgICAgICAge1xuICAgICAgICAgICAgLy8gaGFsZndheSB0aHJvdWdoIGEgbGluZT8gc3RhcnQgYSBuZXcgb25lIVxuICAgICAgICAgICAgdmFyIHNoYXBlID0gbmV3IG1hdGguUG9seWdvbih0aGlzLmN1cnJlbnRQYXRoLnNoYXBlLnBvaW50cy5zbGljZSgtMikpO1xuICAgICAgICAgICAgc2hhcGUuY2xvc2VkID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLmRyYXdTaGFwZShzaGFwZSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgICAvLyBvdGhlcndpc2UgaXRzIGVtcHR5IHNvIGxldHMganVzdCBzZXQgdGhlIGxpbmUgcHJvcGVydGllc1xuICAgICAgICAgICAgdGhpcy5jdXJyZW50UGF0aC5saW5lV2lkdGggPSB0aGlzLmxpbmVXaWR0aDtcbiAgICAgICAgICAgIHRoaXMuY3VycmVudFBhdGgubGluZUNvbG9yID0gdGhpcy5saW5lQ29sb3I7XG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRQYXRoLmxpbmVBbHBoYSA9IHRoaXMubGluZUFscGhhO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIE1vdmVzIHRoZSBjdXJyZW50IGRyYXdpbmcgcG9zaXRpb24gdG8geCwgeS5cbiAqXG4gKiBAcGFyYW0geCB7bnVtYmVyfSB0aGUgWCBjb29yZGluYXRlIHRvIG1vdmUgdG9cbiAqIEBwYXJhbSB5IHtudW1iZXJ9IHRoZSBZIGNvb3JkaW5hdGUgdG8gbW92ZSB0b1xuICogQHJldHVybiB7UElYSS5HcmFwaGljc31cbiAgKi9cbkdyYXBoaWNzLnByb3RvdHlwZS5tb3ZlVG8gPSBmdW5jdGlvbiAoeCwgeSlcbntcbiAgICB2YXIgc2hhcGUgPSBuZXcgbWF0aC5Qb2x5Z29uKFt4LHldKTtcbiAgICBzaGFwZS5jbG9zZWQgPSBmYWxzZTtcbiAgICB0aGlzLmRyYXdTaGFwZShzaGFwZSk7XG5cbiAgICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogRHJhd3MgYSBsaW5lIHVzaW5nIHRoZSBjdXJyZW50IGxpbmUgc3R5bGUgZnJvbSB0aGUgY3VycmVudCBkcmF3aW5nIHBvc2l0aW9uIHRvICh4LCB5KTtcbiAqIFRoZSBjdXJyZW50IGRyYXdpbmcgcG9zaXRpb24gaXMgdGhlbiBzZXQgdG8gKHgsIHkpLlxuICpcbiAqIEBwYXJhbSB4IHtudW1iZXJ9IHRoZSBYIGNvb3JkaW5hdGUgdG8gZHJhdyB0b1xuICogQHBhcmFtIHkge251bWJlcn0gdGhlIFkgY29vcmRpbmF0ZSB0byBkcmF3IHRvXG4gKiBAcmV0dXJuIHtQSVhJLkdyYXBoaWNzfVxuICovXG5HcmFwaGljcy5wcm90b3R5cGUubGluZVRvID0gZnVuY3Rpb24gKHgsIHkpXG57XG4gICAgdGhpcy5jdXJyZW50UGF0aC5zaGFwZS5wb2ludHMucHVzaCh4LCB5KTtcbiAgICB0aGlzLmRpcnR5ID0gdHJ1ZTtcblxuICAgIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBDYWxjdWxhdGUgdGhlIHBvaW50cyBmb3IgYSBxdWFkcmF0aWMgYmV6aWVyIGN1cnZlIGFuZCB0aGVuIGRyYXdzIGl0LlxuICogQmFzZWQgb246IGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vcXVlc3Rpb25zLzc4NTA5Ny9ob3ctZG8taS1pbXBsZW1lbnQtYS1iZXppZXItY3VydmUtaW4tY1xuICpcbiAqIEBwYXJhbSBjcFgge251bWJlcn0gQ29udHJvbCBwb2ludCB4XG4gKiBAcGFyYW0gY3BZIHtudW1iZXJ9IENvbnRyb2wgcG9pbnQgeVxuICogQHBhcmFtIHRvWCB7bnVtYmVyfSBEZXN0aW5hdGlvbiBwb2ludCB4XG4gKiBAcGFyYW0gdG9ZIHtudW1iZXJ9IERlc3RpbmF0aW9uIHBvaW50IHlcbiAqIEByZXR1cm4ge1BJWEkuR3JhcGhpY3N9XG4gKi9cbkdyYXBoaWNzLnByb3RvdHlwZS5xdWFkcmF0aWNDdXJ2ZVRvID0gZnVuY3Rpb24gKGNwWCwgY3BZLCB0b1gsIHRvWSlcbntcbiAgICBpZiAodGhpcy5jdXJyZW50UGF0aClcbiAgICB7XG4gICAgICAgIGlmICh0aGlzLmN1cnJlbnRQYXRoLnNoYXBlLnBvaW50cy5sZW5ndGggPT09IDApXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuY3VycmVudFBhdGguc2hhcGUucG9pbnRzID0gWzAsIDBdO1xuICAgICAgICB9XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHRoaXMubW92ZVRvKDAsMCk7XG4gICAgfVxuXG4gICAgdmFyIHhhLFxuICAgICAgICB5YSxcbiAgICAgICAgbiA9IDIwLFxuICAgICAgICBwb2ludHMgPSB0aGlzLmN1cnJlbnRQYXRoLnNoYXBlLnBvaW50cztcblxuICAgIGlmIChwb2ludHMubGVuZ3RoID09PSAwKVxuICAgIHtcbiAgICAgICAgdGhpcy5tb3ZlVG8oMCwgMCk7XG4gICAgfVxuXG4gICAgdmFyIGZyb21YID0gcG9pbnRzW3BvaW50cy5sZW5ndGgtMl07XG4gICAgdmFyIGZyb21ZID0gcG9pbnRzW3BvaW50cy5sZW5ndGgtMV07XG5cbiAgICB2YXIgaiA9IDA7XG4gICAgZm9yICh2YXIgaSA9IDE7IGkgPD0gbjsgKytpKVxuICAgIHtcbiAgICAgICAgaiA9IGkgLyBuO1xuXG4gICAgICAgIHhhID0gZnJvbVggKyAoIChjcFggLSBmcm9tWCkgKiBqICk7XG4gICAgICAgIHlhID0gZnJvbVkgKyAoIChjcFkgLSBmcm9tWSkgKiBqICk7XG5cbiAgICAgICAgcG9pbnRzLnB1c2goIHhhICsgKCAoKGNwWCArICggKHRvWCAtIGNwWCkgKiBqICkpIC0geGEpICogaiApLFxuICAgICAgICAgICAgICAgICAgICAgeWEgKyAoICgoY3BZICsgKCAodG9ZIC0gY3BZKSAqIGogKSkgLSB5YSkgKiBqICkgKTtcbiAgICB9XG5cbiAgICB0aGlzLmRpcnR5ID0gdGhpcy5ib3VuZHNEaXJ0eSA9IHRydWU7XG5cbiAgICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogQ2FsY3VsYXRlIHRoZSBwb2ludHMgZm9yIGEgYmV6aWVyIGN1cnZlIGFuZCB0aGVuIGRyYXdzIGl0LlxuICpcbiAqIEBwYXJhbSBjcFgge251bWJlcn0gQ29udHJvbCBwb2ludCB4XG4gKiBAcGFyYW0gY3BZIHtudW1iZXJ9IENvbnRyb2wgcG9pbnQgeVxuICogQHBhcmFtIGNwWDIge251bWJlcn0gU2Vjb25kIENvbnRyb2wgcG9pbnQgeFxuICogQHBhcmFtIGNwWTIge251bWJlcn0gU2Vjb25kIENvbnRyb2wgcG9pbnQgeVxuICogQHBhcmFtIHRvWCB7bnVtYmVyfSBEZXN0aW5hdGlvbiBwb2ludCB4XG4gKiBAcGFyYW0gdG9ZIHtudW1iZXJ9IERlc3RpbmF0aW9uIHBvaW50IHlcbiAqIEByZXR1cm4ge1BJWEkuR3JhcGhpY3N9XG4gKi9cbkdyYXBoaWNzLnByb3RvdHlwZS5iZXppZXJDdXJ2ZVRvID0gZnVuY3Rpb24gKGNwWCwgY3BZLCBjcFgyLCBjcFkyLCB0b1gsIHRvWSlcbntcbiAgICBpZiAodGhpcy5jdXJyZW50UGF0aClcbiAgICB7XG4gICAgICAgIGlmICh0aGlzLmN1cnJlbnRQYXRoLnNoYXBlLnBvaW50cy5sZW5ndGggPT09IDApXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuY3VycmVudFBhdGguc2hhcGUucG9pbnRzID0gWzAsIDBdO1xuICAgICAgICB9XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHRoaXMubW92ZVRvKDAsMCk7XG4gICAgfVxuXG4gICAgdmFyIG4gPSAyMCxcbiAgICAgICAgZHQsXG4gICAgICAgIGR0MixcbiAgICAgICAgZHQzLFxuICAgICAgICB0MixcbiAgICAgICAgdDMsXG4gICAgICAgIHBvaW50cyA9IHRoaXMuY3VycmVudFBhdGguc2hhcGUucG9pbnRzO1xuXG4gICAgdmFyIGZyb21YID0gcG9pbnRzW3BvaW50cy5sZW5ndGgtMl07XG4gICAgdmFyIGZyb21ZID0gcG9pbnRzW3BvaW50cy5sZW5ndGgtMV07XG5cbiAgICB2YXIgaiA9IDA7XG5cbiAgICBmb3IgKHZhciBpID0gMTsgaSA8PSBuOyArK2kpXG4gICAge1xuICAgICAgICBqID0gaSAvIG47XG5cbiAgICAgICAgZHQgPSAoMSAtIGopO1xuICAgICAgICBkdDIgPSBkdCAqIGR0O1xuICAgICAgICBkdDMgPSBkdDIgKiBkdDtcblxuICAgICAgICB0MiA9IGogKiBqO1xuICAgICAgICB0MyA9IHQyICogajtcblxuICAgICAgICBwb2ludHMucHVzaCggZHQzICogZnJvbVggKyAzICogZHQyICogaiAqIGNwWCArIDMgKiBkdCAqIHQyICogY3BYMiArIHQzICogdG9YLFxuICAgICAgICAgICAgICAgICAgICAgZHQzICogZnJvbVkgKyAzICogZHQyICogaiAqIGNwWSArIDMgKiBkdCAqIHQyICogY3BZMiArIHQzICogdG9ZKTtcbiAgICB9XG5cbiAgICB0aGlzLmRpcnR5ID0gdGhpcy5ib3VuZHNEaXJ0eSA9IHRydWU7XG5cbiAgICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogVGhlIGFyY1RvKCkgbWV0aG9kIGNyZWF0ZXMgYW4gYXJjL2N1cnZlIGJldHdlZW4gdHdvIHRhbmdlbnRzIG9uIHRoZSBjYW52YXMuXG4gKlxuICogXCJib3Jyb3dlZFwiIGZyb20gaHR0cHM6Ly9jb2RlLmdvb2dsZS5jb20vcC9meGNhbnZhcy8gLSB0aGFua3MgZ29vZ2xlIVxuICpcbiAqIEBwYXJhbSB4MSB7bnVtYmVyfSBUaGUgeC1jb29yZGluYXRlIG9mIHRoZSBiZWdpbm5pbmcgb2YgdGhlIGFyY1xuICogQHBhcmFtIHkxIHtudW1iZXJ9IFRoZSB5LWNvb3JkaW5hdGUgb2YgdGhlIGJlZ2lubmluZyBvZiB0aGUgYXJjXG4gKiBAcGFyYW0geDIge251bWJlcn0gVGhlIHgtY29vcmRpbmF0ZSBvZiB0aGUgZW5kIG9mIHRoZSBhcmNcbiAqIEBwYXJhbSB5MiB7bnVtYmVyfSBUaGUgeS1jb29yZGluYXRlIG9mIHRoZSBlbmQgb2YgdGhlIGFyY1xuICogQHBhcmFtIHJhZGl1cyB7bnVtYmVyfSBUaGUgcmFkaXVzIG9mIHRoZSBhcmNcbiAqIEByZXR1cm4ge1BJWEkuR3JhcGhpY3N9XG4gKi9cbkdyYXBoaWNzLnByb3RvdHlwZS5hcmNUbyA9IGZ1bmN0aW9uICh4MSwgeTEsIHgyLCB5MiwgcmFkaXVzKVxue1xuICAgIGlmICh0aGlzLmN1cnJlbnRQYXRoKVxuICAgIHtcbiAgICAgICAgaWYgKHRoaXMuY3VycmVudFBhdGguc2hhcGUucG9pbnRzLmxlbmd0aCA9PT0gMClcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5jdXJyZW50UGF0aC5zaGFwZS5wb2ludHMucHVzaCh4MSwgeTEpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHRoaXMubW92ZVRvKHgxLCB5MSk7XG4gICAgfVxuXG4gICAgdmFyIHBvaW50cyA9IHRoaXMuY3VycmVudFBhdGguc2hhcGUucG9pbnRzLFxuICAgICAgICBmcm9tWCA9IHBvaW50c1twb2ludHMubGVuZ3RoLTJdLFxuICAgICAgICBmcm9tWSA9IHBvaW50c1twb2ludHMubGVuZ3RoLTFdLFxuICAgICAgICBhMSA9IGZyb21ZIC0geTEsXG4gICAgICAgIGIxID0gZnJvbVggLSB4MSxcbiAgICAgICAgYTIgPSB5MiAgIC0geTEsXG4gICAgICAgIGIyID0geDIgICAtIHgxLFxuICAgICAgICBtbSA9IE1hdGguYWJzKGExICogYjIgLSBiMSAqIGEyKTtcblxuICAgIGlmIChtbSA8IDEuMGUtOCB8fCByYWRpdXMgPT09IDApXG4gICAge1xuICAgICAgICBpZiAocG9pbnRzW3BvaW50cy5sZW5ndGgtMl0gIT09IHgxIHx8IHBvaW50c1twb2ludHMubGVuZ3RoLTFdICE9PSB5MSlcbiAgICAgICAge1xuICAgICAgICAgICAgcG9pbnRzLnB1c2goeDEsIHkxKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICB2YXIgZGQgPSBhMSAqIGExICsgYjEgKiBiMSxcbiAgICAgICAgICAgIGNjID0gYTIgKiBhMiArIGIyICogYjIsXG4gICAgICAgICAgICB0dCA9IGExICogYTIgKyBiMSAqIGIyLFxuICAgICAgICAgICAgazEgPSByYWRpdXMgKiBNYXRoLnNxcnQoZGQpIC8gbW0sXG4gICAgICAgICAgICBrMiA9IHJhZGl1cyAqIE1hdGguc3FydChjYykgLyBtbSxcbiAgICAgICAgICAgIGoxID0gazEgKiB0dCAvIGRkLFxuICAgICAgICAgICAgajIgPSBrMiAqIHR0IC8gY2MsXG4gICAgICAgICAgICBjeCA9IGsxICogYjIgKyBrMiAqIGIxLFxuICAgICAgICAgICAgY3kgPSBrMSAqIGEyICsgazIgKiBhMSxcbiAgICAgICAgICAgIHB4ID0gYjEgKiAoazIgKyBqMSksXG4gICAgICAgICAgICBweSA9IGExICogKGsyICsgajEpLFxuICAgICAgICAgICAgcXggPSBiMiAqIChrMSArIGoyKSxcbiAgICAgICAgICAgIHF5ID0gYTIgKiAoazEgKyBqMiksXG4gICAgICAgICAgICBzdGFydEFuZ2xlID0gTWF0aC5hdGFuMihweSAtIGN5LCBweCAtIGN4KSxcbiAgICAgICAgICAgIGVuZEFuZ2xlICAgPSBNYXRoLmF0YW4yKHF5IC0gY3ksIHF4IC0gY3gpO1xuXG4gICAgICAgIHRoaXMuYXJjKGN4ICsgeDEsIGN5ICsgeTEsIHJhZGl1cywgc3RhcnRBbmdsZSwgZW5kQW5nbGUsIGIxICogYTIgPiBiMiAqIGExKTtcbiAgICB9XG5cbiAgICB0aGlzLmRpcnR5ID0gdGhpcy5ib3VuZHNEaXJ0eSA9IHRydWU7XG5cbiAgICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogVGhlIGFyYyBtZXRob2QgY3JlYXRlcyBhbiBhcmMvY3VydmUgKHVzZWQgdG8gY3JlYXRlIGNpcmNsZXMsIG9yIHBhcnRzIG9mIGNpcmNsZXMpLlxuICpcbiAqIEBwYXJhbSBjeCB7bnVtYmVyfSBUaGUgeC1jb29yZGluYXRlIG9mIHRoZSBjZW50ZXIgb2YgdGhlIGNpcmNsZVxuICogQHBhcmFtIGN5IHtudW1iZXJ9IFRoZSB5LWNvb3JkaW5hdGUgb2YgdGhlIGNlbnRlciBvZiB0aGUgY2lyY2xlXG4gKiBAcGFyYW0gcmFkaXVzIHtudW1iZXJ9IFRoZSByYWRpdXMgb2YgdGhlIGNpcmNsZVxuICogQHBhcmFtIHN0YXJ0QW5nbGUge251bWJlcn0gVGhlIHN0YXJ0aW5nIGFuZ2xlLCBpbiByYWRpYW5zICgwIGlzIGF0IHRoZSAzIG8nY2xvY2sgcG9zaXRpb24gb2YgdGhlIGFyYydzIGNpcmNsZSlcbiAqIEBwYXJhbSBlbmRBbmdsZSB7bnVtYmVyfSBUaGUgZW5kaW5nIGFuZ2xlLCBpbiByYWRpYW5zXG4gKiBAcGFyYW0gYW50aWNsb2Nrd2lzZSB7Ym9vbGVhbn0gT3B0aW9uYWwuIFNwZWNpZmllcyB3aGV0aGVyIHRoZSBkcmF3aW5nIHNob3VsZCBiZSBjb3VudGVyY2xvY2t3aXNlIG9yIGNsb2Nrd2lzZS4gRmFsc2UgaXMgZGVmYXVsdCwgYW5kIGluZGljYXRlcyBjbG9ja3dpc2UsIHdoaWxlIHRydWUgaW5kaWNhdGVzIGNvdW50ZXItY2xvY2t3aXNlLlxuICogQHJldHVybiB7UElYSS5HcmFwaGljc31cbiAqL1xuR3JhcGhpY3MucHJvdG90eXBlLmFyYyA9IGZ1bmN0aW9uKGN4LCBjeSwgcmFkaXVzLCBzdGFydEFuZ2xlLCBlbmRBbmdsZSwgYW50aWNsb2Nrd2lzZSlcbntcbiAgICBhbnRpY2xvY2t3aXNlID0gYW50aWNsb2Nrd2lzZSB8fCBmYWxzZTtcblxuICAgIGlmIChzdGFydEFuZ2xlID09PSBlbmRBbmdsZSlcbiAgICB7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIGlmKCAhYW50aWNsb2Nrd2lzZSAmJiBlbmRBbmdsZSA8PSBzdGFydEFuZ2xlIClcbiAgICB7XG4gICAgICAgIGVuZEFuZ2xlICs9IE1hdGguUEkgKiAyO1xuICAgIH1cbiAgICBlbHNlIGlmKCBhbnRpY2xvY2t3aXNlICYmIHN0YXJ0QW5nbGUgPD0gZW5kQW5nbGUgKVxuICAgIHtcbiAgICAgICAgc3RhcnRBbmdsZSArPSBNYXRoLlBJICogMjtcbiAgICB9XG5cbiAgICB2YXIgc3dlZXAgPSBhbnRpY2xvY2t3aXNlID8gKHN0YXJ0QW5nbGUgLSBlbmRBbmdsZSkgKiAtMSA6IChlbmRBbmdsZSAtIHN0YXJ0QW5nbGUpO1xuICAgIHZhciBzZWdzID0gIE1hdGguY2VpbChNYXRoLmFicyhzd2VlcCkgLyAoTWF0aC5QSSAqIDIpKSAqIDQwO1xuXG4gICAgaWYoc3dlZXAgPT09IDApXG4gICAge1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICB2YXIgc3RhcnRYID0gY3ggKyBNYXRoLmNvcyhzdGFydEFuZ2xlKSAqIHJhZGl1cztcbiAgICB2YXIgc3RhcnRZID0gY3kgKyBNYXRoLnNpbihzdGFydEFuZ2xlKSAqIHJhZGl1cztcblxuICAgIGlmICh0aGlzLmN1cnJlbnRQYXRoKVxuICAgIHtcbiAgICAgICAgdGhpcy5jdXJyZW50UGF0aC5zaGFwZS5wb2ludHMucHVzaChzdGFydFgsIHN0YXJ0WSk7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHRoaXMubW92ZVRvKHN0YXJ0WCwgc3RhcnRZKTtcbiAgICB9XG5cbiAgICB2YXIgcG9pbnRzID0gdGhpcy5jdXJyZW50UGF0aC5zaGFwZS5wb2ludHM7XG5cbiAgICB2YXIgdGhldGEgPSBzd2VlcC8oc2VncyoyKTtcbiAgICB2YXIgdGhldGEyID0gdGhldGEqMjtcblxuICAgIHZhciBjVGhldGEgPSBNYXRoLmNvcyh0aGV0YSk7XG4gICAgdmFyIHNUaGV0YSA9IE1hdGguc2luKHRoZXRhKTtcblxuICAgIHZhciBzZWdNaW51cyA9IHNlZ3MgLSAxO1xuXG4gICAgdmFyIHJlbWFpbmRlciA9ICggc2VnTWludXMgJSAxICkgLyBzZWdNaW51cztcblxuICAgIGZvcih2YXIgaT0wOyBpPD1zZWdNaW51czsgaSsrKVxuICAgIHtcbiAgICAgICAgdmFyIHJlYWwgPSAgaSArIHJlbWFpbmRlciAqIGk7XG5cblxuICAgICAgICB2YXIgYW5nbGUgPSAoKHRoZXRhKSArIHN0YXJ0QW5nbGUgKyAodGhldGEyICogcmVhbCkpO1xuXG4gICAgICAgIHZhciBjID0gTWF0aC5jb3MoYW5nbGUpO1xuICAgICAgICB2YXIgcyA9IC1NYXRoLnNpbihhbmdsZSk7XG5cbiAgICAgICAgcG9pbnRzLnB1c2goKCAoY1RoZXRhICogIGMpICsgKHNUaGV0YSAqIHMpICkgKiByYWRpdXMgKyBjeCxcbiAgICAgICAgICAgICAgICAgICAgKCAoY1RoZXRhICogLXMpICsgKHNUaGV0YSAqIGMpICkgKiByYWRpdXMgKyBjeSk7XG4gICAgfVxuXG4gICAgdGhpcy5kaXJ0eSA9IHRoaXMuYm91bmRzRGlydHkgPSB0cnVlO1xuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIFNwZWNpZmllcyBhIHNpbXBsZSBvbmUtY29sb3IgZmlsbCB0aGF0IHN1YnNlcXVlbnQgY2FsbHMgdG8gb3RoZXIgR3JhcGhpY3MgbWV0aG9kc1xuICogKHN1Y2ggYXMgbGluZVRvKCkgb3IgZHJhd0NpcmNsZSgpKSB1c2Ugd2hlbiBkcmF3aW5nLlxuICpcbiAqIEBwYXJhbSBjb2xvciB7bnVtYmVyfSB0aGUgY29sb3Igb2YgdGhlIGZpbGxcbiAqIEBwYXJhbSBhbHBoYSB7bnVtYmVyfSB0aGUgYWxwaGEgb2YgdGhlIGZpbGxcbiAqIEByZXR1cm4ge1BJWEkuR3JhcGhpY3N9XG4gKi9cbkdyYXBoaWNzLnByb3RvdHlwZS5iZWdpbkZpbGwgPSBmdW5jdGlvbiAoY29sb3IsIGFscGhhKVxue1xuICAgIHRoaXMuZmlsbGluZyA9IHRydWU7XG4gICAgdGhpcy5maWxsQ29sb3IgPSBjb2xvciB8fCAwO1xuICAgIHRoaXMuZmlsbEFscGhhID0gKGFscGhhID09PSB1bmRlZmluZWQpID8gMSA6IGFscGhhO1xuXG4gICAgaWYgKHRoaXMuY3VycmVudFBhdGgpXG4gICAge1xuICAgICAgICBpZiAodGhpcy5jdXJyZW50UGF0aC5zaGFwZS5wb2ludHMubGVuZ3RoIDw9IDIpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuY3VycmVudFBhdGguZmlsbCA9IHRoaXMuZmlsbGluZztcbiAgICAgICAgICAgIHRoaXMuY3VycmVudFBhdGguZmlsbENvbG9yID0gdGhpcy5maWxsQ29sb3I7XG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRQYXRoLmZpbGxBbHBoYSA9IHRoaXMuZmlsbEFscGhhO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBBcHBsaWVzIGEgZmlsbCB0byB0aGUgbGluZXMgYW5kIHNoYXBlcyB0aGF0IHdlcmUgYWRkZWQgc2luY2UgdGhlIGxhc3QgY2FsbCB0byB0aGUgYmVnaW5GaWxsKCkgbWV0aG9kLlxuICpcbiAqIEByZXR1cm4ge0dyYXBoaWNzfVxuICovXG5HcmFwaGljcy5wcm90b3R5cGUuZW5kRmlsbCA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy5maWxsaW5nID0gZmFsc2U7XG4gICAgdGhpcy5maWxsQ29sb3IgPSBudWxsO1xuICAgIHRoaXMuZmlsbEFscGhhID0gMTtcblxuICAgIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKlxuICogQHBhcmFtIHgge251bWJlcn0gVGhlIFggY29vcmQgb2YgdGhlIHRvcC1sZWZ0IG9mIHRoZSByZWN0YW5nbGVcbiAqIEBwYXJhbSB5IHtudW1iZXJ9IFRoZSBZIGNvb3JkIG9mIHRoZSB0b3AtbGVmdCBvZiB0aGUgcmVjdGFuZ2xlXG4gKiBAcGFyYW0gd2lkdGgge251bWJlcn0gVGhlIHdpZHRoIG9mIHRoZSByZWN0YW5nbGVcbiAqIEBwYXJhbSBoZWlnaHQge251bWJlcn0gVGhlIGhlaWdodCBvZiB0aGUgcmVjdGFuZ2xlXG4gKiBAcmV0dXJuIHtQSVhJLkdyYXBoaWNzfVxuICovXG5HcmFwaGljcy5wcm90b3R5cGUuZHJhd1JlY3QgPSBmdW5jdGlvbiAoIHgsIHksIHdpZHRoLCBoZWlnaHQgKVxue1xuICAgIHRoaXMuZHJhd1NoYXBlKG5ldyBtYXRoLlJlY3RhbmdsZSh4LHksIHdpZHRoLCBoZWlnaHQpKTtcblxuICAgIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKlxuICogQHBhcmFtIHgge251bWJlcn0gVGhlIFggY29vcmQgb2YgdGhlIHRvcC1sZWZ0IG9mIHRoZSByZWN0YW5nbGVcbiAqIEBwYXJhbSB5IHtudW1iZXJ9IFRoZSBZIGNvb3JkIG9mIHRoZSB0b3AtbGVmdCBvZiB0aGUgcmVjdGFuZ2xlXG4gKiBAcGFyYW0gd2lkdGgge251bWJlcn0gVGhlIHdpZHRoIG9mIHRoZSByZWN0YW5nbGVcbiAqIEBwYXJhbSBoZWlnaHQge251bWJlcn0gVGhlIGhlaWdodCBvZiB0aGUgcmVjdGFuZ2xlXG4gKiBAcGFyYW0gcmFkaXVzIHtudW1iZXJ9IFJhZGl1cyBvZiB0aGUgcmVjdGFuZ2xlIGNvcm5lcnNcbiAqIEByZXR1cm4ge1BJWEkuR3JhcGhpY3N9XG4gKi9cbkdyYXBoaWNzLnByb3RvdHlwZS5kcmF3Um91bmRlZFJlY3QgPSBmdW5jdGlvbiAoIHgsIHksIHdpZHRoLCBoZWlnaHQsIHJhZGl1cyApXG57XG4gICAgdGhpcy5kcmF3U2hhcGUobmV3IG1hdGguUm91bmRlZFJlY3RhbmdsZSh4LCB5LCB3aWR0aCwgaGVpZ2h0LCByYWRpdXMpKTtcblxuICAgIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBEcmF3cyBhIGNpcmNsZS5cbiAqXG4gKiBAcGFyYW0geCB7bnVtYmVyfSBUaGUgWCBjb29yZGluYXRlIG9mIHRoZSBjZW50ZXIgb2YgdGhlIGNpcmNsZVxuICogQHBhcmFtIHkge251bWJlcn0gVGhlIFkgY29vcmRpbmF0ZSBvZiB0aGUgY2VudGVyIG9mIHRoZSBjaXJjbGVcbiAqIEBwYXJhbSByYWRpdXMge251bWJlcn0gVGhlIHJhZGl1cyBvZiB0aGUgY2lyY2xlXG4gKiBAcmV0dXJuIHtQSVhJLkdyYXBoaWNzfVxuICovXG5HcmFwaGljcy5wcm90b3R5cGUuZHJhd0NpcmNsZSA9IGZ1bmN0aW9uICh4LCB5LCByYWRpdXMpXG57XG4gICAgdGhpcy5kcmF3U2hhcGUobmV3IG1hdGguQ2lyY2xlKHgseSwgcmFkaXVzKSk7XG5cbiAgICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogRHJhd3MgYW4gZWxsaXBzZS5cbiAqXG4gKiBAcGFyYW0geCB7bnVtYmVyfSBUaGUgWCBjb29yZGluYXRlIG9mIHRoZSBjZW50ZXIgb2YgdGhlIGVsbGlwc2VcbiAqIEBwYXJhbSB5IHtudW1iZXJ9IFRoZSBZIGNvb3JkaW5hdGUgb2YgdGhlIGNlbnRlciBvZiB0aGUgZWxsaXBzZVxuICogQHBhcmFtIHdpZHRoIHtudW1iZXJ9IFRoZSBoYWxmIHdpZHRoIG9mIHRoZSBlbGxpcHNlXG4gKiBAcGFyYW0gaGVpZ2h0IHtudW1iZXJ9IFRoZSBoYWxmIGhlaWdodCBvZiB0aGUgZWxsaXBzZVxuICogQHJldHVybiB7UElYSS5HcmFwaGljc31cbiAqL1xuR3JhcGhpY3MucHJvdG90eXBlLmRyYXdFbGxpcHNlID0gZnVuY3Rpb24gKHgsIHksIHdpZHRoLCBoZWlnaHQpXG57XG4gICAgdGhpcy5kcmF3U2hhcGUobmV3IG1hdGguRWxsaXBzZSh4LCB5LCB3aWR0aCwgaGVpZ2h0KSk7XG5cbiAgICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogRHJhd3MgYSBwb2x5Z29uIHVzaW5nIHRoZSBnaXZlbiBwYXRoLlxuICpcbiAqIEBwYXJhbSBwYXRoIHtudW1iZXJbXXxQSVhJLlBvaW50W119IFRoZSBwYXRoIGRhdGEgdXNlZCB0byBjb25zdHJ1Y3QgdGhlIHBvbHlnb24uXG4gKiBAcmV0dXJuIHtQSVhJLkdyYXBoaWNzfVxuICovXG5HcmFwaGljcy5wcm90b3R5cGUuZHJhd1BvbHlnb24gPSBmdW5jdGlvbiAocGF0aClcbntcbiAgICAvLyBwcmV2ZW50cyBhbiBhcmd1bWVudCBhc3NpZ25tZW50IGRlb3B0XG4gICAgLy8gc2VlIHNlY3Rpb24gMy4xOiBodHRwczovL2dpdGh1Yi5jb20vcGV0a2FhbnRvbm92L2JsdWViaXJkL3dpa2kvT3B0aW1pemF0aW9uLWtpbGxlcnMjMy1tYW5hZ2luZy1hcmd1bWVudHNcbiAgICB2YXIgcG9pbnRzID0gcGF0aDtcblxuICAgIHZhciBjbG9zZWQgPSB0cnVlO1xuXG4gICAgaWYgKHBvaW50cyBpbnN0YW5jZW9mIG1hdGguUG9seWdvbilcbiAgICB7XG4gICAgICAgIGNsb3NlZCA9IHBvaW50cy5jbG9zZWQ7XG4gICAgICAgIHBvaW50cyA9IHBvaW50cy5wb2ludHM7XG4gICAgfVxuXG4gICAgaWYgKCFBcnJheS5pc0FycmF5KHBvaW50cykpXG4gICAge1xuICAgICAgICAvLyBwcmV2ZW50cyBhbiBhcmd1bWVudCBsZWFrIGRlb3B0XG4gICAgICAgIC8vIHNlZSBzZWN0aW9uIDMuMjogaHR0cHM6Ly9naXRodWIuY29tL3BldGthYW50b25vdi9ibHVlYmlyZC93aWtpL09wdGltaXphdGlvbi1raWxsZXJzIzMtbWFuYWdpbmctYXJndW1lbnRzXG4gICAgICAgIHBvaW50cyA9IG5ldyBBcnJheShhcmd1bWVudHMubGVuZ3RoKTtcblxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHBvaW50cy5sZW5ndGg7ICsraSlcbiAgICAgICAge1xuICAgICAgICAgICAgcG9pbnRzW2ldID0gYXJndW1lbnRzW2ldO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgdmFyIHNoYXBlID0gbmV3IG1hdGguUG9seWdvbihwb2ludHMpO1xuICAgIHNoYXBlLmNsb3NlZCA9IGNsb3NlZDtcblxuICAgIHRoaXMuZHJhd1NoYXBlKHNoYXBlKTtcblxuICAgIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBDbGVhcnMgdGhlIGdyYXBoaWNzIHRoYXQgd2VyZSBkcmF3biB0byB0aGlzIEdyYXBoaWNzIG9iamVjdCwgYW5kIHJlc2V0cyBmaWxsIGFuZCBsaW5lIHN0eWxlIHNldHRpbmdzLlxuICpcbiAqIEByZXR1cm4ge1BJWEkuR3JhcGhpY3N9XG4gKi9cbkdyYXBoaWNzLnByb3RvdHlwZS5jbGVhciA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy5saW5lV2lkdGggPSAwO1xuICAgIHRoaXMuZmlsbGluZyA9IGZhbHNlO1xuXG4gICAgdGhpcy5kaXJ0eSA9IHRydWU7XG4gICAgdGhpcy5jbGVhckRpcnR5ID0gdHJ1ZTtcbiAgICB0aGlzLmdyYXBoaWNzRGF0YSA9IFtdO1xuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIFVzZWZ1bCBmdW5jdGlvbiB0aGF0IHJldHVybnMgYSB0ZXh0dXJlIG9mIHRoZSBncmFwaGljcyBvYmplY3QgdGhhdCBjYW4gdGhlbiBiZSB1c2VkIHRvIGNyZWF0ZSBzcHJpdGVzXG4gKiBUaGlzIGNhbiBiZSBxdWl0ZSB1c2VmdWwgaWYgeW91ciBnZW9tZXRyeSBpcyBjb21wbGljYXRlZCBhbmQgbmVlZHMgdG8gYmUgcmV1c2VkIG11bHRpcGxlIHRpbWVzLlxuICpcbiAqIEBwYXJhbSByZXNvbHV0aW9uIHtudW1iZXJ9IFRoZSByZXNvbHV0aW9uIG9mIHRoZSB0ZXh0dXJlIGJlaW5nIGdlbmVyYXRlZFxuICogQHBhcmFtIHNjYWxlTW9kZSB7bnVtYmVyfSBTaG91bGQgYmUgb25lIG9mIHRoZSBzY2FsZU1vZGUgY29uc3RzXG4gKiBAcmV0dXJuIHtQSVhJLlRleHR1cmV9IGEgdGV4dHVyZSBvZiB0aGUgZ3JhcGhpY3Mgb2JqZWN0XG4gKi9cbkdyYXBoaWNzLnByb3RvdHlwZS5nZW5lcmF0ZVRleHR1cmUgPSBmdW5jdGlvbiAocmVuZGVyZXIsIHJlc29sdXRpb24sIHNjYWxlTW9kZSlcbntcblxuICAgIHJlc29sdXRpb24gPSByZXNvbHV0aW9uIHx8IDE7XG5cbiAgICB2YXIgYm91bmRzID0gdGhpcy5nZXRMb2NhbEJvdW5kcygpO1xuXG4gICAgdmFyIGNhbnZhc0J1ZmZlciA9IG5ldyBDYW52YXNCdWZmZXIoYm91bmRzLndpZHRoICogcmVzb2x1dGlvbiwgYm91bmRzLmhlaWdodCAqIHJlc29sdXRpb24pO1xuXG4gICAgdmFyIHRleHR1cmUgPSBUZXh0dXJlLmZyb21DYW52YXMoY2FudmFzQnVmZmVyLmNhbnZhcywgc2NhbGVNb2RlKTtcbiAgICB0ZXh0dXJlLmJhc2VUZXh0dXJlLnJlc29sdXRpb24gPSByZXNvbHV0aW9uO1xuXG4gICAgY2FudmFzQnVmZmVyLmNvbnRleHQuc2NhbGUocmVzb2x1dGlvbiwgcmVzb2x1dGlvbik7XG5cbiAgICBjYW52YXNCdWZmZXIuY29udGV4dC50cmFuc2xhdGUoLWJvdW5kcy54LC1ib3VuZHMueSk7XG5cbiAgICBDYW52YXNHcmFwaGljcy5yZW5kZXJHcmFwaGljcyh0aGlzLCBjYW52YXNCdWZmZXIuY29udGV4dCk7XG5cbiAgICByZXR1cm4gdGV4dHVyZTtcbn07XG5cbi8qKlxuICogUmVuZGVycyB0aGUgb2JqZWN0IHVzaW5nIHRoZSBXZWJHTCByZW5kZXJlclxuICpcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5XZWJHTFJlbmRlcmVyfVxuICogQHByaXZhdGVcbiAqL1xuR3JhcGhpY3MucHJvdG90eXBlLl9yZW5kZXJXZWJHTCA9IGZ1bmN0aW9uIChyZW5kZXJlcilcbntcbiAgICAvLyBpZiB0aGUgc3ByaXRlIGlzIG5vdCB2aXNpYmxlIG9yIHRoZSBhbHBoYSBpcyAwIHRoZW4gbm8gbmVlZCB0byByZW5kZXIgdGhpcyBlbGVtZW50XG5cbiAgICBpZiAodGhpcy5nbERpcnR5KVxuICAgIHtcbiAgICAgICAgdGhpcy5kaXJ0eSA9IHRydWU7XG4gICAgICAgIHRoaXMuZ2xEaXJ0eSA9IGZhbHNlO1xuICAgIH1cblxuICAgIHJlbmRlcmVyLnNldE9iamVjdFJlbmRlcmVyKHJlbmRlcmVyLnBsdWdpbnMuZ3JhcGhpY3MpO1xuICAgIHJlbmRlcmVyLnBsdWdpbnMuZ3JhcGhpY3MucmVuZGVyKHRoaXMpO1xuXG59O1xuXG4vKipcbiAqIFJlbmRlcnMgdGhlIG9iamVjdCB1c2luZyB0aGUgQ2FudmFzIHJlbmRlcmVyXG4gKlxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLkNhbnZhc1JlbmRlcmVyfVxuICogQHByaXZhdGVcbiAqL1xuR3JhcGhpY3MucHJvdG90eXBlLl9yZW5kZXJDYW52YXMgPSBmdW5jdGlvbiAocmVuZGVyZXIpXG57XG4gICAgaWYgKHRoaXMuaXNNYXNrID09PSB0cnVlKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIGlmIHRoZSB0aW50IGhhcyBjaGFuZ2VkLCBzZXQgdGhlIGdyYXBoaWNzIG9iamVjdCB0byBkaXJ0eS5cbiAgICBpZiAodGhpcy5fcHJldlRpbnQgIT09IHRoaXMudGludCkge1xuICAgICAgICB0aGlzLmRpcnR5ID0gdHJ1ZTtcbiAgICB9XG5cbiAgICAvLyB0aGlzIGNvZGUgbWF5IHN0aWxsIGJlIG5lZWRlZCBzbyBsZWF2aW5nIGZvciBub3cuLlxuICAgIC8vXG4gICAgLypcbiAgICBpZiAodGhpcy5fY2FjaGVBc0JpdG1hcClcbiAgICB7XG4gICAgICAgIGlmICh0aGlzLmRpcnR5IHx8IHRoaXMuY2FjaGVkU3ByaXRlRGlydHkpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuX2dlbmVyYXRlQ2FjaGVkU3ByaXRlKCk7XG5cbiAgICAgICAgICAgIC8vIHdlIHdpbGwgYWxzbyBuZWVkIHRvIHVwZGF0ZSB0aGUgdGV4dHVyZVxuICAgICAgICAgICAgdGhpcy51cGRhdGVDYWNoZWRTcHJpdGVUZXh0dXJlKCk7XG5cbiAgICAgICAgICAgIHRoaXMuY2FjaGVkU3ByaXRlRGlydHkgPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMuZGlydHkgPSBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX2NhY2hlZFNwcml0ZS5hbHBoYSA9IHRoaXMuYWxwaGE7XG5cbiAgICAgICAgU3ByaXRlLnByb3RvdHlwZS5fcmVuZGVyQ2FudmFzLmNhbGwodGhpcy5fY2FjaGVkU3ByaXRlLCByZW5kZXJlcik7XG5cbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICAqL1xuICAgIHZhciBjb250ZXh0ID0gcmVuZGVyZXIuY29udGV4dDtcbiAgICB2YXIgdHJhbnNmb3JtID0gdGhpcy53b3JsZFRyYW5zZm9ybTtcblxuICAgIHZhciBjb21wb3NpdGVPcGVyYXRpb24gPSByZW5kZXJlci5ibGVuZE1vZGVzW3RoaXMuYmxlbmRNb2RlXTtcbiAgICBpZiAoY29tcG9zaXRlT3BlcmF0aW9uICE9PSBjb250ZXh0Lmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbilcbiAgICB7XG4gICAgICAgIGNvbnRleHQuZ2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uID0gY29tcG9zaXRlT3BlcmF0aW9uO1xuICAgIH1cblxuICAgIHZhciByZXNvbHV0aW9uID0gcmVuZGVyZXIucmVzb2x1dGlvbjtcbiAgICBjb250ZXh0LnNldFRyYW5zZm9ybShcbiAgICAgICAgdHJhbnNmb3JtLmEgKiByZXNvbHV0aW9uLFxuICAgICAgICB0cmFuc2Zvcm0uYiAqIHJlc29sdXRpb24sXG4gICAgICAgIHRyYW5zZm9ybS5jICogcmVzb2x1dGlvbixcbiAgICAgICAgdHJhbnNmb3JtLmQgKiByZXNvbHV0aW9uLFxuICAgICAgICB0cmFuc2Zvcm0udHggKiByZXNvbHV0aW9uLFxuICAgICAgICB0cmFuc2Zvcm0udHkgKiByZXNvbHV0aW9uXG4gICAgKTtcblxuICAgIENhbnZhc0dyYXBoaWNzLnJlbmRlckdyYXBoaWNzKHRoaXMsIGNvbnRleHQpO1xufTtcblxuLyoqXG4gKiBSZXRyaWV2ZXMgdGhlIGJvdW5kcyBvZiB0aGUgZ3JhcGhpYyBzaGFwZSBhcyBhIHJlY3RhbmdsZSBvYmplY3RcbiAqXG4gKiBAcGFyYW0gW21hdHJpeF0ge1BJWEkuTWF0cml4fSBUaGUgd29ybGQgdHJhbnNmb3JtIG1hdHJpeCB0byB1c2UsIGRlZmF1bHRzIHRvIHRoaXNcbiAqICBvYmplY3QncyB3b3JsZFRyYW5zZm9ybS5cbiAqIEByZXR1cm4ge1BJWEkuUmVjdGFuZ2xlfSB0aGUgcmVjdGFuZ3VsYXIgYm91bmRpbmcgYXJlYVxuICovXG5HcmFwaGljcy5wcm90b3R5cGUuZ2V0Qm91bmRzID0gZnVuY3Rpb24gKG1hdHJpeClcbntcbiAgICBpZighdGhpcy5fY3VycmVudEJvdW5kcylcbiAgICB7XG5cbiAgICAgICAgLy8gcmV0dXJuIGFuIGVtcHR5IG9iamVjdCBpZiB0aGUgaXRlbSBpcyBhIG1hc2shXG4gICAgICAgIGlmICghdGhpcy5yZW5kZXJhYmxlKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gbWF0aC5SZWN0YW5nbGUuRU1QVFk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5ib3VuZHNEaXJ0eSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51cGRhdGVMb2NhbEJvdW5kcygpO1xuXG4gICAgICAgICAgICB0aGlzLmdsRGlydHkgPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy5jYWNoZWRTcHJpdGVEaXJ0eSA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLmJvdW5kc0RpcnR5ID0gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgYm91bmRzID0gdGhpcy5fbG9jYWxCb3VuZHM7XG5cbiAgICAgICAgdmFyIHcwID0gYm91bmRzLng7XG4gICAgICAgIHZhciB3MSA9IGJvdW5kcy53aWR0aCArIGJvdW5kcy54O1xuXG4gICAgICAgIHZhciBoMCA9IGJvdW5kcy55O1xuICAgICAgICB2YXIgaDEgPSBib3VuZHMuaGVpZ2h0ICsgYm91bmRzLnk7XG5cbiAgICAgICAgdmFyIHdvcmxkVHJhbnNmb3JtID0gbWF0cml4IHx8IHRoaXMud29ybGRUcmFuc2Zvcm07XG5cbiAgICAgICAgdmFyIGEgPSB3b3JsZFRyYW5zZm9ybS5hO1xuICAgICAgICB2YXIgYiA9IHdvcmxkVHJhbnNmb3JtLmI7XG4gICAgICAgIHZhciBjID0gd29ybGRUcmFuc2Zvcm0uYztcbiAgICAgICAgdmFyIGQgPSB3b3JsZFRyYW5zZm9ybS5kO1xuICAgICAgICB2YXIgdHggPSB3b3JsZFRyYW5zZm9ybS50eDtcbiAgICAgICAgdmFyIHR5ID0gd29ybGRUcmFuc2Zvcm0udHk7XG5cbiAgICAgICAgdmFyIHgxID0gYSAqIHcxICsgYyAqIGgxICsgdHg7XG4gICAgICAgIHZhciB5MSA9IGQgKiBoMSArIGIgKiB3MSArIHR5O1xuXG4gICAgICAgIHZhciB4MiA9IGEgKiB3MCArIGMgKiBoMSArIHR4O1xuICAgICAgICB2YXIgeTIgPSBkICogaDEgKyBiICogdzAgKyB0eTtcblxuICAgICAgICB2YXIgeDMgPSBhICogdzAgKyBjICogaDAgKyB0eDtcbiAgICAgICAgdmFyIHkzID0gZCAqIGgwICsgYiAqIHcwICsgdHk7XG5cbiAgICAgICAgdmFyIHg0ID0gIGEgKiB3MSArIGMgKiBoMCArIHR4O1xuICAgICAgICB2YXIgeTQgPSAgZCAqIGgwICsgYiAqIHcxICsgdHk7XG5cbiAgICAgICAgdmFyIG1heFggPSB4MTtcbiAgICAgICAgdmFyIG1heFkgPSB5MTtcblxuICAgICAgICB2YXIgbWluWCA9IHgxO1xuICAgICAgICB2YXIgbWluWSA9IHkxO1xuXG4gICAgICAgIG1pblggPSB4MiA8IG1pblggPyB4MiA6IG1pblg7XG4gICAgICAgIG1pblggPSB4MyA8IG1pblggPyB4MyA6IG1pblg7XG4gICAgICAgIG1pblggPSB4NCA8IG1pblggPyB4NCA6IG1pblg7XG5cbiAgICAgICAgbWluWSA9IHkyIDwgbWluWSA/IHkyIDogbWluWTtcbiAgICAgICAgbWluWSA9IHkzIDwgbWluWSA/IHkzIDogbWluWTtcbiAgICAgICAgbWluWSA9IHk0IDwgbWluWSA/IHk0IDogbWluWTtcblxuICAgICAgICBtYXhYID0geDIgPiBtYXhYID8geDIgOiBtYXhYO1xuICAgICAgICBtYXhYID0geDMgPiBtYXhYID8geDMgOiBtYXhYO1xuICAgICAgICBtYXhYID0geDQgPiBtYXhYID8geDQgOiBtYXhYO1xuXG4gICAgICAgIG1heFkgPSB5MiA+IG1heFkgPyB5MiA6IG1heFk7XG4gICAgICAgIG1heFkgPSB5MyA+IG1heFkgPyB5MyA6IG1heFk7XG4gICAgICAgIG1heFkgPSB5NCA+IG1heFkgPyB5NCA6IG1heFk7XG5cbiAgICAgICAgdGhpcy5fYm91bmRzLnggPSBtaW5YO1xuICAgICAgICB0aGlzLl9ib3VuZHMud2lkdGggPSBtYXhYIC0gbWluWDtcblxuICAgICAgICB0aGlzLl9ib3VuZHMueSA9IG1pblk7XG4gICAgICAgIHRoaXMuX2JvdW5kcy5oZWlnaHQgPSBtYXhZIC0gbWluWTtcblxuICAgICAgICB0aGlzLl9jdXJyZW50Qm91bmRzID0gdGhpcy5fYm91bmRzO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLl9jdXJyZW50Qm91bmRzO1xufTtcblxuLyoqXG4qIFRlc3RzIGlmIGEgcG9pbnQgaXMgaW5zaWRlIHRoaXMgZ3JhcGhpY3Mgb2JqZWN0XG4qXG4qIEBwYXJhbSBwb2ludCB7UElYSS5Qb2ludH0gdGhlIHBvaW50IHRvIHRlc3RcbiogQHJldHVybiB7Ym9vbGVhbn0gdGhlIHJlc3VsdCBvZiB0aGUgdGVzdFxuKi9cbkdyYXBoaWNzLnByb3RvdHlwZS5jb250YWluc1BvaW50ID0gZnVuY3Rpb24oIHBvaW50IClcbntcbiAgICB0aGlzLndvcmxkVHJhbnNmb3JtLmFwcGx5SW52ZXJzZShwb2ludCwgIHRlbXBQb2ludCk7XG5cbiAgICB2YXIgZ3JhcGhpY3NEYXRhID0gdGhpcy5ncmFwaGljc0RhdGE7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGdyYXBoaWNzRGF0YS5sZW5ndGg7IGkrKylcbiAgICB7XG4gICAgICAgIHZhciBkYXRhID0gZ3JhcGhpY3NEYXRhW2ldO1xuXG4gICAgICAgIGlmICghZGF0YS5maWxsKVxuICAgICAgICB7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIG9ubHkgZGVhbCB3aXRoIGZpbGxzLi5cbiAgICAgICAgaWYgKGRhdGEuc2hhcGUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGlmICggZGF0YS5zaGFwZS5jb250YWlucyggdGVtcFBvaW50LngsIHRlbXBQb2ludC55ICkgKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xufTtcblxuLyoqXG4gKiBVcGRhdGUgdGhlIGJvdW5kcyBvZiB0aGUgb2JqZWN0XG4gKlxuICovXG5HcmFwaGljcy5wcm90b3R5cGUudXBkYXRlTG9jYWxCb3VuZHMgPSBmdW5jdGlvbiAoKVxue1xuICAgIHZhciBtaW5YID0gSW5maW5pdHk7XG4gICAgdmFyIG1heFggPSAtSW5maW5pdHk7XG5cbiAgICB2YXIgbWluWSA9IEluZmluaXR5O1xuICAgIHZhciBtYXhZID0gLUluZmluaXR5O1xuXG4gICAgaWYgKHRoaXMuZ3JhcGhpY3NEYXRhLmxlbmd0aClcbiAgICB7XG4gICAgICAgIHZhciBzaGFwZSwgcG9pbnRzLCB4LCB5LCB3LCBoO1xuXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5ncmFwaGljc0RhdGEubGVuZ3RoOyBpKyspXG4gICAgICAgIHtcbiAgICAgICAgICAgIHZhciBkYXRhID0gdGhpcy5ncmFwaGljc0RhdGFbaV07XG4gICAgICAgICAgICB2YXIgdHlwZSA9IGRhdGEudHlwZTtcbiAgICAgICAgICAgIHZhciBsaW5lV2lkdGggPSBkYXRhLmxpbmVXaWR0aDtcbiAgICAgICAgICAgIHNoYXBlID0gZGF0YS5zaGFwZTtcblxuICAgICAgICAgICAgaWYgKHR5cGUgPT09IENPTlNULlNIQVBFUy5SRUNUIHx8IHR5cGUgPT09IENPTlNULlNIQVBFUy5SUkVDKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHggPSBzaGFwZS54IC0gbGluZVdpZHRoLzI7XG4gICAgICAgICAgICAgICAgeSA9IHNoYXBlLnkgLSBsaW5lV2lkdGgvMjtcbiAgICAgICAgICAgICAgICB3ID0gc2hhcGUud2lkdGggKyBsaW5lV2lkdGg7XG4gICAgICAgICAgICAgICAgaCA9IHNoYXBlLmhlaWdodCArIGxpbmVXaWR0aDtcblxuICAgICAgICAgICAgICAgIG1pblggPSB4IDwgbWluWCA/IHggOiBtaW5YO1xuICAgICAgICAgICAgICAgIG1heFggPSB4ICsgdyA+IG1heFggPyB4ICsgdyA6IG1heFg7XG5cbiAgICAgICAgICAgICAgICBtaW5ZID0geSA8IG1pblkgPyB5IDogbWluWTtcbiAgICAgICAgICAgICAgICBtYXhZID0geSArIGggPiBtYXhZID8geSArIGggOiBtYXhZO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAodHlwZSA9PT0gQ09OU1QuU0hBUEVTLkNJUkMpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgeCA9IHNoYXBlLng7XG4gICAgICAgICAgICAgICAgeSA9IHNoYXBlLnk7XG4gICAgICAgICAgICAgICAgdyA9IHNoYXBlLnJhZGl1cyArIGxpbmVXaWR0aC8yO1xuICAgICAgICAgICAgICAgIGggPSBzaGFwZS5yYWRpdXMgKyBsaW5lV2lkdGgvMjtcblxuICAgICAgICAgICAgICAgIG1pblggPSB4IC0gdyA8IG1pblggPyB4IC0gdyA6IG1pblg7XG4gICAgICAgICAgICAgICAgbWF4WCA9IHggKyB3ID4gbWF4WCA/IHggKyB3IDogbWF4WDtcblxuICAgICAgICAgICAgICAgIG1pblkgPSB5IC0gaCA8IG1pblkgPyB5IC0gaCA6IG1pblk7XG4gICAgICAgICAgICAgICAgbWF4WSA9IHkgKyBoID4gbWF4WSA/IHkgKyBoIDogbWF4WTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKHR5cGUgPT09IENPTlNULlNIQVBFUy5FTElQKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHggPSBzaGFwZS54O1xuICAgICAgICAgICAgICAgIHkgPSBzaGFwZS55O1xuICAgICAgICAgICAgICAgIHcgPSBzaGFwZS53aWR0aCArIGxpbmVXaWR0aC8yO1xuICAgICAgICAgICAgICAgIGggPSBzaGFwZS5oZWlnaHQgKyBsaW5lV2lkdGgvMjtcblxuICAgICAgICAgICAgICAgIG1pblggPSB4IC0gdyA8IG1pblggPyB4IC0gdyA6IG1pblg7XG4gICAgICAgICAgICAgICAgbWF4WCA9IHggKyB3ID4gbWF4WCA/IHggKyB3IDogbWF4WDtcblxuICAgICAgICAgICAgICAgIG1pblkgPSB5IC0gaCA8IG1pblkgPyB5IC0gaCA6IG1pblk7XG4gICAgICAgICAgICAgICAgbWF4WSA9IHkgKyBoID4gbWF4WSA/IHkgKyBoIDogbWF4WTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAvLyBQT0xZXG4gICAgICAgICAgICAgICAgcG9pbnRzID0gc2hhcGUucG9pbnRzO1xuXG4gICAgICAgICAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBwb2ludHMubGVuZ3RoOyBqICs9IDIpXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICB4ID0gcG9pbnRzW2pdO1xuICAgICAgICAgICAgICAgICAgICB5ID0gcG9pbnRzW2orMV07XG5cbiAgICAgICAgICAgICAgICAgICAgbWluWCA9IHgtbGluZVdpZHRoIDwgbWluWCA/IHgtbGluZVdpZHRoIDogbWluWDtcbiAgICAgICAgICAgICAgICAgICAgbWF4WCA9IHgrbGluZVdpZHRoID4gbWF4WCA/IHgrbGluZVdpZHRoIDogbWF4WDtcblxuICAgICAgICAgICAgICAgICAgICBtaW5ZID0geS1saW5lV2lkdGggPCBtaW5ZID8geS1saW5lV2lkdGggOiBtaW5ZO1xuICAgICAgICAgICAgICAgICAgICBtYXhZID0geStsaW5lV2lkdGggPiBtYXhZID8geStsaW5lV2lkdGggOiBtYXhZO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICBtaW5YID0gMDtcbiAgICAgICAgbWF4WCA9IDA7XG4gICAgICAgIG1pblkgPSAwO1xuICAgICAgICBtYXhZID0gMDtcbiAgICB9XG5cbiAgICB2YXIgcGFkZGluZyA9IHRoaXMuYm91bmRzUGFkZGluZztcblxuICAgIHRoaXMuX2xvY2FsQm91bmRzLnggPSBtaW5YIC0gcGFkZGluZztcbiAgICB0aGlzLl9sb2NhbEJvdW5kcy53aWR0aCA9IChtYXhYIC0gbWluWCkgKyBwYWRkaW5nICogMjtcblxuICAgIHRoaXMuX2xvY2FsQm91bmRzLnkgPSBtaW5ZIC0gcGFkZGluZztcbiAgICB0aGlzLl9sb2NhbEJvdW5kcy5oZWlnaHQgPSAobWF4WSAtIG1pblkpICsgcGFkZGluZyAqIDI7XG59O1xuXG4vKipcbiAqIEdlbmVyYXRlcyB0aGUgY2FjaGVkIHNwcml0ZSB3aGVuIHRoZSBzcHJpdGUgaGFzIGNhY2hlQXNCaXRtYXAgPSB0cnVlXG4gKlxuICogQHByaXZhdGVcbiAqL1xuLypcbkdyYXBoaWNzLnByb3RvdHlwZS5fZ2VuZXJhdGVDYWNoZWRTcHJpdGUgPSBmdW5jdGlvbiAoKVxue1xuICAgIHZhciBib3VuZHMgPSB0aGlzLmdldExvY2FsQm91bmRzKCk7XG5cbiAgICBpZiAoIXRoaXMuX2NhY2hlZFNwcml0ZSlcbiAgICB7XG4gICAgICAgIHZhciBjYW52YXNCdWZmZXIgPSBuZXcgQ2FudmFzQnVmZmVyKGJvdW5kcy53aWR0aCwgYm91bmRzLmhlaWdodCk7XG4gICAgICAgIHZhciB0ZXh0dXJlID0gVGV4dHVyZS5mcm9tQ2FudmFzKGNhbnZhc0J1ZmZlci5jYW52YXMpO1xuXG4gICAgICAgIHRoaXMuX2NhY2hlZFNwcml0ZSA9IG5ldyBTcHJpdGUodGV4dHVyZSk7XG4gICAgICAgIHRoaXMuX2NhY2hlZFNwcml0ZS5idWZmZXIgPSBjYW52YXNCdWZmZXI7XG5cbiAgICAgICAgdGhpcy5fY2FjaGVkU3ByaXRlLndvcmxkVHJhbnNmb3JtID0gdGhpcy53b3JsZFRyYW5zZm9ybTtcbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgdGhpcy5fY2FjaGVkU3ByaXRlLmJ1ZmZlci5yZXNpemUoYm91bmRzLndpZHRoLCBib3VuZHMuaGVpZ2h0KTtcbiAgICB9XG5cbiAgICAvLyBsZXZlcmFnZSB0aGUgYW5jaG9yIHRvIGFjY291bnQgZm9yIHRoZSBvZmZzZXQgb2YgdGhlIGVsZW1lbnRcbiAgICB0aGlzLl9jYWNoZWRTcHJpdGUuYW5jaG9yLnggPSAtKCBib3VuZHMueCAvIGJvdW5kcy53aWR0aCApO1xuICAgIHRoaXMuX2NhY2hlZFNwcml0ZS5hbmNob3IueSA9IC0oIGJvdW5kcy55IC8gYm91bmRzLmhlaWdodCApO1xuXG4gICAgLy8gdGhpcy5fY2FjaGVkU3ByaXRlLmJ1ZmZlci5jb250ZXh0LnNhdmUoKTtcbiAgICB0aGlzLl9jYWNoZWRTcHJpdGUuYnVmZmVyLmNvbnRleHQudHJhbnNsYXRlKC1ib3VuZHMueCwtYm91bmRzLnkpO1xuXG4gICAgLy8gbWFrZSBzdXJlIHdlIHNldCB0aGUgYWxwaGEgb2YgdGhlIGdyYXBoaWNzIHRvIDEgZm9yIHRoZSByZW5kZXIuLlxuICAgIHRoaXMud29ybGRBbHBoYSA9IDE7XG5cbiAgICAvLyBub3cgcmVuZGVyIHRoZSBncmFwaGljLi5cbiAgICBDYW52YXNHcmFwaGljcy5yZW5kZXJHcmFwaGljcyh0aGlzLCB0aGlzLl9jYWNoZWRTcHJpdGUuYnVmZmVyLmNvbnRleHQpO1xuXG4gICAgdGhpcy5fY2FjaGVkU3ByaXRlLmFscGhhID0gdGhpcy5hbHBoYTtcbn07XG4qL1xuLyoqXG4gKiBVcGRhdGVzIHRleHR1cmUgc2l6ZSBiYXNlZCBvbiBjYW52YXMgc2l6ZVxuICpcbiAqIEBwcml2YXRlXG4gKi9cbi8qXG5HcmFwaGljcy5wcm90b3R5cGUudXBkYXRlQ2FjaGVkU3ByaXRlVGV4dHVyZSA9IGZ1bmN0aW9uICgpXG57XG4gICAgdmFyIGNhY2hlZFNwcml0ZSA9IHRoaXMuX2NhY2hlZFNwcml0ZTtcbiAgICB2YXIgdGV4dHVyZSA9IGNhY2hlZFNwcml0ZS50ZXh0dXJlO1xuICAgIHZhciBjYW52YXMgPSBjYWNoZWRTcHJpdGUuYnVmZmVyLmNhbnZhcztcblxuICAgIHRleHR1cmUuYmFzZVRleHR1cmUud2lkdGggPSBjYW52YXMud2lkdGg7XG4gICAgdGV4dHVyZS5iYXNlVGV4dHVyZS5oZWlnaHQgPSBjYW52YXMuaGVpZ2h0O1xuICAgIHRleHR1cmUuY3JvcC53aWR0aCA9IHRleHR1cmUuZnJhbWUud2lkdGggPSBjYW52YXMud2lkdGg7XG4gICAgdGV4dHVyZS5jcm9wLmhlaWdodCA9IHRleHR1cmUuZnJhbWUuaGVpZ2h0ID0gY2FudmFzLmhlaWdodDtcblxuICAgIGNhY2hlZFNwcml0ZS5fd2lkdGggPSBjYW52YXMud2lkdGg7XG4gICAgY2FjaGVkU3ByaXRlLl9oZWlnaHQgPSBjYW52YXMuaGVpZ2h0O1xuXG4gICAgLy8gdXBkYXRlIHRoZSBkaXJ0eSBiYXNlIHRleHR1cmVzXG4gICAgdGV4dHVyZS5iYXNlVGV4dHVyZS5kaXJ0eSgpO1xufTsqL1xuXG4vKipcbiAqIERlc3Ryb3lzIGEgcHJldmlvdXMgY2FjaGVkIHNwcml0ZS5cbiAqXG4gKi9cbi8qXG5HcmFwaGljcy5wcm90b3R5cGUuZGVzdHJveUNhY2hlZFNwcml0ZSA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy5fY2FjaGVkU3ByaXRlLnRleHR1cmUuZGVzdHJveSh0cnVlKTtcblxuICAgIC8vIGxldCB0aGUgZ2MgY29sbGVjdCB0aGUgdW51c2VkIHNwcml0ZVxuICAgIC8vIFRPRE8gY291bGQgYmUgb2JqZWN0IHBvb2xlZCFcbiAgICB0aGlzLl9jYWNoZWRTcHJpdGUgPSBudWxsO1xufTsqL1xuXG4vKipcbiAqIERyYXdzIHRoZSBnaXZlbiBzaGFwZSB0byB0aGlzIEdyYXBoaWNzIG9iamVjdC4gQ2FuIGJlIGFueSBvZiBDaXJjbGUsIFJlY3RhbmdsZSwgRWxsaXBzZSwgTGluZSBvciBQb2x5Z29uLlxuICpcbiAqIEBwYXJhbSBzaGFwZSB7UElYSS5DaXJjbGV8UElYSS5SZWN0YW5nbGV8UElYSS5FbGxpcHNlfFBJWEkuTGluZXxQSVhJLlBvbHlnb259IFRoZSBzaGFwZSBvYmplY3QgdG8gZHJhdy5cbiAqIEByZXR1cm4ge1BJWEkuR3JhcGhpY3NEYXRhfSBUaGUgZ2VuZXJhdGVkIEdyYXBoaWNzRGF0YSBvYmplY3QuXG4gKi9cbkdyYXBoaWNzLnByb3RvdHlwZS5kcmF3U2hhcGUgPSBmdW5jdGlvbiAoc2hhcGUpXG57XG4gICAgaWYgKHRoaXMuY3VycmVudFBhdGgpXG4gICAge1xuICAgICAgICAvLyBjaGVjayBjdXJyZW50IHBhdGghXG4gICAgICAgIGlmICh0aGlzLmN1cnJlbnRQYXRoLnNoYXBlLnBvaW50cy5sZW5ndGggPD0gMilcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5ncmFwaGljc0RhdGEucG9wKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLmN1cnJlbnRQYXRoID0gbnVsbDtcblxuICAgIHZhciBkYXRhID0gbmV3IEdyYXBoaWNzRGF0YSh0aGlzLmxpbmVXaWR0aCwgdGhpcy5saW5lQ29sb3IsIHRoaXMubGluZUFscGhhLCB0aGlzLmZpbGxDb2xvciwgdGhpcy5maWxsQWxwaGEsIHRoaXMuZmlsbGluZywgc2hhcGUpO1xuXG4gICAgdGhpcy5ncmFwaGljc0RhdGEucHVzaChkYXRhKTtcblxuICAgIGlmIChkYXRhLnR5cGUgPT09IENPTlNULlNIQVBFUy5QT0xZKVxuICAgIHtcbiAgICAgICAgZGF0YS5zaGFwZS5jbG9zZWQgPSBkYXRhLnNoYXBlLmNsb3NlZCB8fCB0aGlzLmZpbGxpbmc7XG4gICAgICAgIHRoaXMuY3VycmVudFBhdGggPSBkYXRhO1xuICAgIH1cblxuICAgIHRoaXMuZGlydHkgPSB0aGlzLmJvdW5kc0RpcnR5ID0gdHJ1ZTtcblxuICAgIHJldHVybiBkYXRhO1xufTtcblxuLyoqXG4gKiBEZXN0cm95cyB0aGUgR3JhcGhpY3Mgb2JqZWN0LlxuICovXG5HcmFwaGljcy5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uICgpIHtcbiAgICBDb250YWluZXIucHJvdG90eXBlLmRlc3Ryb3kuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcblxuICAgIC8vIGRlc3Ryb3kgZWFjaCBvZiB0aGUgR3JhcGhpY3NEYXRhIG9iamVjdHNcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuZ3JhcGhpY3NEYXRhLmxlbmd0aDsgKytpKSB7XG4gICAgICAgIHRoaXMuZ3JhcGhpY3NEYXRhW2ldLmRlc3Ryb3koKTtcbiAgICB9XG5cbiAgICAvLyBmb3IgZWFjaCB3ZWJnbCBkYXRhIGVudHJ5LCBkZXN0cm95IHRoZSBXZWJHTEdyYXBoaWNzRGF0YVxuICAgIGZvciAodmFyIGlkIGluIHRoaXMuX3dlYmdsKSB7XG4gICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgdGhpcy5fd2ViZ2xbaWRdLmRhdGEubGVuZ3RoOyArK2opIHtcbiAgICAgICAgICAgIHRoaXMuX3dlYmdsW2lkXS5kYXRhW2pdLmRlc3Ryb3koKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMuZ3JhcGhpY3NEYXRhID0gbnVsbDtcblxuICAgIHRoaXMuY3VycmVudFBhdGggPSBudWxsO1xuICAgIHRoaXMuX3dlYmdsID0gbnVsbDtcbiAgICB0aGlzLl9sb2NhbEJvdW5kcyA9IG51bGw7XG59O1xuIiwiLyoqXG4gKiBBIEdyYXBoaWNzRGF0YSBvYmplY3QuXG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIGxpbmVXaWR0aCB7bnVtYmVyfSB0aGUgd2lkdGggb2YgdGhlIGxpbmUgdG8gZHJhd1xuICogQHBhcmFtIGxpbmVDb2xvciB7bnVtYmVyfSB0aGUgY29sb3Igb2YgdGhlIGxpbmUgdG8gZHJhd1xuICogQHBhcmFtIGxpbmVBbHBoYSB7bnVtYmVyfSB0aGUgYWxwaGEgb2YgdGhlIGxpbmUgdG8gZHJhd1xuICogQHBhcmFtIGZpbGxDb2xvciB7bnVtYmVyfSB0aGUgY29sb3Igb2YgdGhlIGZpbGxcbiAqIEBwYXJhbSBmaWxsQWxwaGEge251bWJlcn0gdGhlIGFscGhhIG9mIHRoZSBmaWxsXG4gKiBAcGFyYW0gZmlsbCAgICAgIHtib29sZWFufSB3aGV0aGVyIG9yIG5vdCB0aGUgc2hhcGUgaXMgZmlsbGVkIHdpdGggYSBjb2xvdXJcbiAqIEBwYXJhbSBzaGFwZSAgICAge0NpcmNsZXxSZWN0YW5nbGV8RWxsaXBzZXxMaW5lfFBvbHlnb259IFRoZSBzaGFwZSBvYmplY3QgdG8gZHJhdy5cbiAqL1xuZnVuY3Rpb24gR3JhcGhpY3NEYXRhKGxpbmVXaWR0aCwgbGluZUNvbG9yLCBsaW5lQWxwaGEsIGZpbGxDb2xvciwgZmlsbEFscGhhLCBmaWxsLCBzaGFwZSlcbntcbiAgICAvKlxuICAgICAqIEBtZW1iZXIge251bWJlcn0gdGhlIHdpZHRoIG9mIHRoZSBsaW5lIHRvIGRyYXdcbiAgICAgKi9cbiAgICB0aGlzLmxpbmVXaWR0aCA9IGxpbmVXaWR0aDtcblxuICAgIC8qXG4gICAgICogQG1lbWJlciB7bnVtYmVyfSB0aGUgY29sb3Igb2YgdGhlIGxpbmUgdG8gZHJhd1xuICAgICAqL1xuICAgIHRoaXMubGluZUNvbG9yID0gbGluZUNvbG9yO1xuICAgIC8qXG4gICAgICogQG1lbWJlciB7bnVtYmVyfSB0aGUgYWxwaGEgb2YgdGhlIGxpbmUgdG8gZHJhd1xuICAgICAqL1xuICAgIHRoaXMubGluZUFscGhhID0gbGluZUFscGhhO1xuICAgIC8qXG4gICAgICogQG1lbWJlciB7bnVtYmVyfSBjYWNoZWQgdGludCBvZiB0aGUgbGluZSB0byBkcmF3XG4gICAgICovXG4gICAgdGhpcy5fbGluZVRpbnQgPSBsaW5lQ29sb3I7XG5cbiAgICAvKlxuICAgICAqIEBtZW1iZXIge251bWJlcn0gdGhlIGNvbG9yIG9mIHRoZSBmaWxsXG4gICAgICovXG4gICAgdGhpcy5maWxsQ29sb3IgPSBmaWxsQ29sb3I7XG5cbiAgICAvKlxuICAgICAqIEBtZW1iZXIge251bWJlcn0gdGhlIGFscGhhIG9mIHRoZSBmaWxsXG4gICAgICovXG4gICAgdGhpcy5maWxsQWxwaGEgPSBmaWxsQWxwaGE7XG5cbiAgICAvKlxuICAgICAqIEBtZW1iZXIge251bWJlcn0gY2FjaGVkIHRpbnQgb2YgdGhlIGZpbGxcbiAgICAgKi9cbiAgICB0aGlzLl9maWxsVGludCA9IGZpbGxDb2xvcjtcblxuICAgIC8qXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn0gd2hldGhlciBvciBub3QgdGhlIHNoYXBlIGlzIGZpbGxlZCB3aXRoIGEgY29sb3VyXG4gICAgICovXG4gICAgdGhpcy5maWxsID0gZmlsbDtcblxuICAgIC8qXG4gICAgICogQG1lbWJlciB7UElYSS5DaXJjbGV8UElYSS5SZWN0YW5nbGV8UElYSS5FbGxpcHNlfFBJWEkuTGluZXxQSVhJLlBvbHlnb259IFRoZSBzaGFwZSBvYmplY3QgdG8gZHJhdy5cbiAgICAgKi9cbiAgICB0aGlzLnNoYXBlID0gc2hhcGU7XG5cbiAgICAvKlxuICAgICAqIEBtZW1iZXIge251bWJlcn0gVGhlIHR5cGUgb2YgdGhlIHNoYXBlLCBzZWUgdGhlIENvbnN0LlNoYXBlcyBmaWxlIGZvciBhbGwgdGhlIGV4aXN0aW5nIHR5cGVzLFxuICAgICAqL1xuICAgIHRoaXMudHlwZSA9IHNoYXBlLnR5cGU7XG59XG5cbkdyYXBoaWNzRGF0YS5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBHcmFwaGljc0RhdGE7XG5tb2R1bGUuZXhwb3J0cyA9IEdyYXBoaWNzRGF0YTtcblxuLyoqXG4gKiBDcmVhdGVzIGEgbmV3IEdyYXBoaWNzRGF0YSBvYmplY3Qgd2l0aCB0aGUgc2FtZSB2YWx1ZXMgYXMgdGhpcyBvbmUuXG4gKlxuICogQHJldHVybiB7UElYSS5HcmFwaGljc0RhdGF9XG4gKi9cbkdyYXBoaWNzRGF0YS5wcm90b3R5cGUuY2xvbmUgPSBmdW5jdGlvbiAoKVxue1xuICAgIHJldHVybiBuZXcgR3JhcGhpY3NEYXRhKFxuICAgICAgICB0aGlzLmxpbmVXaWR0aCxcbiAgICAgICAgdGhpcy5saW5lQ29sb3IsXG4gICAgICAgIHRoaXMubGluZUFscGhhLFxuICAgICAgICB0aGlzLmZpbGxDb2xvcixcbiAgICAgICAgdGhpcy5maWxsQWxwaGEsXG4gICAgICAgIHRoaXMuZmlsbCxcbiAgICAgICAgdGhpcy5zaGFwZVxuICAgICk7XG59O1xuXG4vKipcbiAqIERlc3Ryb3lzIHRoZSBHcmFwaGljcyBkYXRhLlxuICovXG5HcmFwaGljc0RhdGEucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoKSB7XG4gICAgdGhpcy5zaGFwZSA9IG51bGw7XG59O1xuIiwidmFyIHV0aWxzID0gcmVxdWlyZSgnLi4vLi4vdXRpbHMnKSxcbiAgICBtYXRoID0gcmVxdWlyZSgnLi4vLi4vbWF0aCcpLFxuICAgIENPTlNUID0gcmVxdWlyZSgnLi4vLi4vY29uc3QnKSxcbiAgICBPYmplY3RSZW5kZXJlciA9IHJlcXVpcmUoJy4uLy4uL3JlbmRlcmVycy93ZWJnbC91dGlscy9PYmplY3RSZW5kZXJlcicpLFxuICAgIFdlYkdMUmVuZGVyZXIgPSByZXF1aXJlKCcuLi8uLi9yZW5kZXJlcnMvd2ViZ2wvV2ViR0xSZW5kZXJlcicpLFxuICAgIFdlYkdMR3JhcGhpY3NEYXRhID0gcmVxdWlyZSgnLi9XZWJHTEdyYXBoaWNzRGF0YScpLFxuICAgIFByaW1pdGl2ZVNoYWRlciA9IHJlcXVpcmUoJy4vc2hhZGVycy9QcmltaXRpdmVTaGFkZXInKSxcblxuICAgIC8vIHNvbWUgZHJhd2luZyBmdW5jdGlvbnMuLlxuICAgIGJ1aWxkTGluZSA9IHJlcXVpcmUoJy4vdXRpbHMvYnVpbGRMaW5lJyk7XG4gICAgYnVpbGRQb2x5ID0gcmVxdWlyZSgnLi91dGlscy9idWlsZFBvbHknKTtcbiAgICBidWlsZENvbXBsZXhQb2x5ID0gcmVxdWlyZSgnLi91dGlscy9idWlsZENvbXBsZXhQb2x5Jyk7XG4gICAgYnVpbGRSZWN0YW5nbGUgPSByZXF1aXJlKCcuL3V0aWxzL2J1aWxkUmVjdGFuZ2xlJyk7XG4gICAgYnVpbGRSb3VuZGVkUmVjdGFuZ2xlID0gcmVxdWlyZSgnLi91dGlscy9idWlsZFJvdW5kZWRSZWN0YW5nbGUnKTtcbiAgICBidWlsZENpcmNsZSA9IHJlcXVpcmUoJy4vdXRpbHMvYnVpbGRDaXJjbGUnKTtcblxuICAgIGVhcmN1dCA9IHJlcXVpcmUoJ2VhcmN1dCcpO1xuXG4vKipcbiAqIFJlbmRlcnMgdGhlIGdyYXBoaWNzIG9iamVjdC5cbiAqXG4gKiBAY2xhc3NcbiAqIEBwcml2YXRlXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQGV4dGVuZHMgUElYSS5PYmplY3RSZW5kZXJlclxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLldlYkdMUmVuZGVyZXJ9IFRoZSByZW5kZXJlciB0aGlzIG9iamVjdCByZW5kZXJlciB3b3JrcyBmb3IuXG4gKi9cbmZ1bmN0aW9uIEdyYXBoaWNzUmVuZGVyZXIocmVuZGVyZXIpXG57XG4gICAgT2JqZWN0UmVuZGVyZXIuY2FsbCh0aGlzLCByZW5kZXJlcik7XG5cbiAgICB0aGlzLmdyYXBoaWNzRGF0YVBvb2wgPSBbXTtcblxuICAgIHRoaXMucHJpbWl0aXZlU2hhZGVyID0gbnVsbDtcbiAgICB0aGlzLmNvbXBsZXhQcmltaXRpdmVTaGFkZXIgPSBudWxsO1xuXG4gICAgdGhpcy5nbCA9IHJlbmRlcmVyLmdsO1xuXG4gICAgLyoqXG4gICAgICogVGhpcyBpcyB0aGUgbWF4aW11bSBudW1iZXIgb2YgcG9pbnRzIGEgcG9seSBjYW4gY29udGFpbiBiZWZvcmUgaXQgaXMgcmVuZGVyZWQgYXMgYSBjb21wbGV4IHBvbHlnb24gKHVzaW5nIHRoZSBzdGVuY2lsIGJ1ZmZlcilcbiAgICAgKiBAdHlwZSB7TnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMubWF4aW11bVNpbXBsZVBvbHlTaXplID0gMjAwO1xufVxuXG5HcmFwaGljc1JlbmRlcmVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoT2JqZWN0UmVuZGVyZXIucHJvdG90eXBlKTtcbkdyYXBoaWNzUmVuZGVyZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gR3JhcGhpY3NSZW5kZXJlcjtcbm1vZHVsZS5leHBvcnRzID0gR3JhcGhpY3NSZW5kZXJlcjtcblxuV2ViR0xSZW5kZXJlci5yZWdpc3RlclBsdWdpbignZ3JhcGhpY3MnLCBHcmFwaGljc1JlbmRlcmVyKTtcblxuLyoqXG4gKiBDYWxsZWQgd2hlbiB0aGVyZSBpcyBhIFdlYkdMIGNvbnRleHQgY2hhbmdlXG4gKlxuICogQHByaXZhdGVcbiAqXG4gKi9cbkdyYXBoaWNzUmVuZGVyZXIucHJvdG90eXBlLm9uQ29udGV4dENoYW5nZSA9IGZ1bmN0aW9uKClcbntcbiAgICB0aGlzLmdsID0gdGhpcy5yZW5kZXJlci5nbDtcbiAgICB0aGlzLnByaW1pdGl2ZVNoYWRlciA9IG5ldyBQcmltaXRpdmVTaGFkZXIodGhpcy5nbClcbn07XG5cbi8qKlxuICogRGVzdHJveXMgdGhpcyByZW5kZXJlci5cbiAqXG4gKi9cbkdyYXBoaWNzUmVuZGVyZXIucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoKSB7XG4gICAgT2JqZWN0UmVuZGVyZXIucHJvdG90eXBlLmRlc3Ryb3kuY2FsbCh0aGlzKTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5ncmFwaGljc0RhdGFQb29sLmxlbmd0aDsgKytpKSB7XG4gICAgICAgIHRoaXMuZ3JhcGhpY3NEYXRhUG9vbFtpXS5kZXN0cm95KCk7XG4gICAgfVxuXG4gICAgdGhpcy5ncmFwaGljc0RhdGFQb29sID0gbnVsbDtcbn07XG5cbi8qKlxuICogUmVuZGVycyBhIGdyYXBoaWNzIG9iamVjdC5cbiAqXG4gKiBAcGFyYW0gZ3JhcGhpY3Mge1BJWEkuR3JhcGhpY3N9IFRoZSBncmFwaGljcyBvYmplY3QgdG8gcmVuZGVyLlxuICovXG5HcmFwaGljc1JlbmRlcmVyLnByb3RvdHlwZS5yZW5kZXIgPSBmdW5jdGlvbihncmFwaGljcylcbntcbiAgICB2YXIgcmVuZGVyZXIgPSB0aGlzLnJlbmRlcmVyO1xuICAgIHZhciBnbCA9IHJlbmRlcmVyLmdsO1xuXG4gICAgdmFyIHdlYkdMRGF0YTtcbiAgLy8gIGNvbnNvbGUubG9nKGdyYXBoaWNzKVxuICAgIGlmIChncmFwaGljcy5kaXJ0eSB8fCAhZ3JhcGhpY3MuX3dlYkdMW2dsLmlkXSlcbiAgICB7XG4gICAgICAgIHRoaXMudXBkYXRlR3JhcGhpY3MoZ3JhcGhpY3MpO1xuICAgIH1cblxuICAgIHZhciB3ZWJHTCA9IGdyYXBoaWNzLl93ZWJHTFtnbC5pZF07XG5cbiAgICAvLyBUaGlzICBjb3VsZCBiZSBzcGVlZGVkIHVwIGZvciBzdXJlIVxuXG4gICAgcmVuZGVyZXIuYmxlbmRNb2RlTWFuYWdlci5zZXRCbGVuZE1vZGUoIGdyYXBoaWNzLmJsZW5kTW9kZSApO1xuXG4vLyAgICB2YXIgbWF0cml4ID0gIGdyYXBoaWNzLndvcmxkVHJhbnNmb3JtLmNsb25lKCk7XG4vLyAgICB2YXIgbWF0cml4ID0gIHJlbmRlcmVyLmN1cnJlbnRSZW5kZXJUYXJnZXQucHJvamVjdGlvbk1hdHJpeC5jbG9uZSgpO1xuLy8gICAgbWF0cml4LmFwcGVuZChncmFwaGljcy53b3JsZFRyYW5zZm9ybSk7XG5cbiAgICBmb3IgKHZhciBpID0gMCwgbiA9IHdlYkdMLmRhdGEubGVuZ3RoOyBpIDwgbjsgaSsrKVxuICAgIHtcbiAgICAgICAgd2ViR0xEYXRhID0gd2ViR0wuZGF0YVtpXTtcblxuICAgICAgICBpZiAod2ViR0wuZGF0YVtpXS5tb2RlID09PSAxKVxuICAgICAgICB7XG4gICAgICAgICAgICAvL1RPRE8gZml4IHRoaXMgb25lIVxuICAgICAgICAgICAgXG4gICAgICAgICAgICAvKlxuICAgICAgICAgICAgcmVuZGVyZXIuc3RlbmNpbE1hbmFnZXIucHVzaFN0ZW5jaWwoZ3JhcGhpY3MsIHdlYkdMRGF0YSk7XG5cbiAgICAgICAgICAgIGdsLnVuaWZvcm0xZihyZW5kZXJlci5zaGFkZXJNYW5hZ2VyLmNvbXBsZXhQcmltaXRpdmVTaGFkZXIudW5pZm9ybXMuYWxwaGEuX2xvY2F0aW9uLCBncmFwaGljcy53b3JsZEFscGhhICogd2ViR0xEYXRhLmFscGhhKTtcblxuICAgICAgICAgICAgLy8gcmVuZGVyIHF1YWQuLlxuICAgICAgICAgICAgZ2wuZHJhd0VsZW1lbnRzKGdsLlRSSUFOR0xFX0ZBTiwgNCwgZ2wuVU5TSUdORURfU0hPUlQsICggd2ViR0xEYXRhLmluZGljZXMubGVuZ3RoIC0gNCApICogMiApO1xuXG4gICAgICAgICAgICByZW5kZXJlci5zdGVuY2lsTWFuYWdlci5wb3BTdGVuY2lsKGdyYXBoaWNzLCB3ZWJHTERhdGEpO1xuICAgICAgICAgICAgKi9cbiAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgIHtcblxuICAgICAgICAgICAgc2hhZGVyID0gdGhpcy5wcmltaXRpdmVTaGFkZXI7XG5cbiAgICAgICAgICAgIHJlbmRlcmVyLmJpbmRTaGFkZXIoc2hhZGVyKVxuXG4gICAgICAgICAgICBzaGFkZXIudW5pZm9ybXMudHJhbnNsYXRpb25NYXRyaXggPSBncmFwaGljcy53b3JsZFRyYW5zZm9ybS50b0FycmF5KHRydWUpO1xuICAgICAgICAgICAgc2hhZGVyLnVuaWZvcm1zLnRpbnQgPSB1dGlscy5oZXgycmdiKGdyYXBoaWNzLnRpbnQpO1xuICAgICAgICAgICAgc2hhZGVyLnVuaWZvcm1zLmFscGhhID0gZ3JhcGhpY3Mud29ybGRBbHBoYTtcblxuXG4gICAgICAgICAgICBnbC5iaW5kQnVmZmVyKGdsLkFSUkFZX0JVRkZFUiwgd2ViR0xEYXRhLmJ1ZmZlcik7XG5cbiAgICAgICAgICAgIHNoYWRlciA9IHRoaXMucHJpbWl0aXZlU2hhZGVyO1xuXG4gICAgICAgICAgICBzaGFkZXIuYXR0cmlidXRlcy5hVmVydGV4UG9zaXRpb24ucG9pbnRlcihnbC5GTE9BVCwgZmFsc2UsIDQgKiA2LCAwKTtcbiAgICAgICAgICAgIHNoYWRlci5hdHRyaWJ1dGVzLmFDb2xvci5wb2ludGVyKGdsLkZMT0FULCBmYWxzZSwgNCAqIDYsIDIgKiA0KTtcblxuICAgICAgICAgICAgZ2wuZW5hYmxlVmVydGV4QXR0cmliQXJyYXkoc2hhZGVyLmF0dHJpYnV0ZXMuYVZlcnRleFBvc2l0aW9uLmxvY2F0aW9uKTtcbiAgICAgICAgICAgIGdsLmVuYWJsZVZlcnRleEF0dHJpYkFycmF5KHNoYWRlci5hdHRyaWJ1dGVzLmFDb2xvci5sb2NhdGlvbik7XG5cbiAgICAgICAgICAgIC8vIHNldCB0aGUgaW5kZXggYnVmZmVyIVxuICAgICAgICAgICAgZ2wuYmluZEJ1ZmZlcihnbC5FTEVNRU5UX0FSUkFZX0JVRkZFUiwgd2ViR0xEYXRhLmluZGV4QnVmZmVyKTtcbiAgICAgICAgICAgIGdsLmRyYXdFbGVtZW50cyhnbC5UUklBTkdMRV9TVFJJUCwgIHdlYkdMRGF0YS5pbmRpY2VzLmxlbmd0aCwgZ2wuVU5TSUdORURfU0hPUlQsIDAgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJlbmRlcmVyLmRyYXdDb3VudCsrO1xuICAgIH1cbn07XG5cbi8qKlxuICogVXBkYXRlcyB0aGUgZ3JhcGhpY3Mgb2JqZWN0XG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSBncmFwaGljcyB7UElYSS5HcmFwaGljc30gVGhlIGdyYXBoaWNzIG9iamVjdCB0byB1cGRhdGVcbiAqL1xuR3JhcGhpY3NSZW5kZXJlci5wcm90b3R5cGUudXBkYXRlR3JhcGhpY3MgPSBmdW5jdGlvbihncmFwaGljcylcbntcbiAgICB2YXIgZ2wgPSB0aGlzLnJlbmRlcmVyLmdsO1xuXG4gICAgIC8vIGdldCB0aGUgY29udGV4dHMgZ3JhcGhpY3Mgb2JqZWN0XG4gICAgdmFyIHdlYkdMID0gZ3JhcGhpY3MuX3dlYkdMW2dsLmlkXTtcblxuICAgIC8vIGlmIHRoZSBncmFwaGljcyBvYmplY3QgZG9lcyBub3QgZXhpc3QgaW4gdGhlIHdlYkdMIGNvbnRleHQgdGltZSB0byBjcmVhdGUgaXQhXG4gICAgaWYgKCF3ZWJHTClcbiAgICB7XG4gICAgICAgIHdlYkdMID0gZ3JhcGhpY3MuX3dlYkdMW2dsLmlkXSA9IHtsYXN0SW5kZXg6MCwgZGF0YTpbXSwgZ2w6Z2x9O1xuICAgIH1cblxuICAgXG4gICAgLy8gZmxhZyB0aGUgZ3JhcGhpY3MgYXMgbm90IGRpcnR5IGFzIHdlIGFyZSBhYm91dCB0byB1cGRhdGUgaXQuLi5cbiAgICBncmFwaGljcy5kaXJ0eSA9IGZhbHNlO1xuXG4gICAgdmFyIGk7XG5cbiAgICAvLyBpZiB0aGUgdXNlciBjbGVhcmVkIHRoZSBncmFwaGljcyBvYmplY3Qgd2Ugd2lsbCBuZWVkIHRvIGNsZWFyIGV2ZXJ5IG9iamVjdFxuICAgIGlmIChncmFwaGljcy5jbGVhckRpcnR5KVxuICAgIHtcbiAgICAgICAgZ3JhcGhpY3MuY2xlYXJEaXJ0eSA9IGZhbHNlO1xuXG4gICAgICAgIC8vIGxvb3AgdGhyb3VnaCBhbmQgcmV0dXJuIGFsbCB0aGUgd2ViR0xEYXRhcyB0byB0aGUgb2JqZWN0IHBvb2wgc28gdGhhbiBjYW4gYmUgcmV1c2VkIGxhdGVyIG9uXG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCB3ZWJHTC5kYXRhLmxlbmd0aDsgaSsrKVxuICAgICAgICB7XG4gICAgICAgICAgICB2YXIgZ3JhcGhpY3NEYXRhID0gd2ViR0wuZGF0YVtpXTtcbiAgICAgICAgICAgIGdyYXBoaWNzRGF0YS5yZXNldCgpO1xuICAgICAgICAgICAgdGhpcy5ncmFwaGljc0RhdGFQb29sLnB1c2goIGdyYXBoaWNzRGF0YSApO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gY2xlYXIgdGhlIGFycmF5IGFuZCByZXNldCB0aGUgaW5kZXguLlxuICAgICAgICB3ZWJHTC5kYXRhID0gW107XG4gICAgICAgIHdlYkdMLmxhc3RJbmRleCA9IDA7XG4gICAgfVxuXG4gICAgdmFyIHdlYkdMRGF0YTtcblxuICAgIC8vIGxvb3AgdGhyb3VnaCB0aGUgZ3JhcGhpY3MgZGF0YXMgYW5kIGNvbnN0cnVjdCBlYWNoIG9uZS4uXG4gICAgLy8gaWYgdGhlIG9iamVjdCBpcyBhIGNvbXBsZXggZmlsbCB0aGVuIHRoZSBuZXcgc3RlbmNpbCBidWZmZXIgdGVjaG5pcXVlIHdpbGwgYmUgdXNlZFxuICAgIC8vIG90aGVyIHdpc2UgZ3JhcGhpY3Mgb2JqZWN0cyB3aWxsIGJlIHB1c2hlZCBpbnRvIGEgYmF0Y2guLlxuICAgIGZvciAoaSA9IHdlYkdMLmxhc3RJbmRleDsgaSA8IGdyYXBoaWNzLmdyYXBoaWNzRGF0YS5sZW5ndGg7IGkrKylcbiAgICB7XG4gICAgICAgIHZhciBkYXRhID0gZ3JhcGhpY3MuZ3JhcGhpY3NEYXRhW2ldO1xuXG4gICAgICAgIGlmIChkYXRhLnR5cGUgPT09IENPTlNULlNIQVBFUy5QT0xZKVxuICAgICAgICB7XG4gICAgICAgICAgICAvLyBuZWVkIHRvIGFkZCB0aGUgcG9pbnRzIHRoZSB0aGUgZ3JhcGhpY3Mgb2JqZWN0Li5cbiAgICAgICAgICAgIGRhdGEucG9pbnRzID0gZGF0YS5zaGFwZS5wb2ludHMuc2xpY2UoKTtcbiAgICAgICAgICAgIGlmIChkYXRhLnNoYXBlLmNsb3NlZClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAvLyBjbG9zZSB0aGUgcG9seSBpZiB0aGUgdmFsdWUgaXMgdHJ1ZSFcbiAgICAgICAgICAgICAgICBpZiAoZGF0YS5wb2ludHNbMF0gIT09IGRhdGEucG9pbnRzW2RhdGEucG9pbnRzLmxlbmd0aC0yXSB8fCBkYXRhLnBvaW50c1sxXSAhPT0gZGF0YS5wb2ludHNbZGF0YS5wb2ludHMubGVuZ3RoLTFdKVxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgZGF0YS5wb2ludHMucHVzaChkYXRhLnBvaW50c1swXSwgZGF0YS5wb2ludHNbMV0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gTUFLRSBTVVJFIFdFIEhBVkUgVEhFIENPUlJFQ1QgVFlQRS4uXG4gICAgICAgICAgICBpZiAoZGF0YS5maWxsKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGlmIChkYXRhLnBvaW50cy5sZW5ndGggPj0gNilcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChkYXRhLnBvaW50cy5sZW5ndGggPCB0aGlzLm1heGltdW1TaW1wbGVQb2x5U2l6ZSAqIDIpXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHdlYkdMRGF0YSA9IHRoaXMuc3dpdGNoTW9kZSh3ZWJHTCwgMCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjYW5EcmF3VXNpbmdTaW1wbGUgPSBidWlsZFBvbHkoZGF0YSwgd2ViR0xEYXRhKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFjYW5EcmF3VXNpbmdTaW1wbGUpXG4gICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd2ViR0xEYXRhID0gdGhpcy5zd2l0Y2hNb2RlKHdlYkdMLCAxKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWlsZENvbXBsZXhQb2x5KGRhdGEsIHdlYkdMRGF0YSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHdlYkdMRGF0YSA9IHRoaXMuc3dpdGNoTW9kZSh3ZWJHTCwgMSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBidWlsZENvbXBsZXhQb2x5KGRhdGEsIHdlYkdMRGF0YSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChkYXRhLmxpbmVXaWR0aCA+IDApXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgd2ViR0xEYXRhID0gdGhpcy5zd2l0Y2hNb2RlKHdlYkdMLCAwKTtcbiAgICAgICAgICAgICAgICBidWlsZExpbmUoZGF0YSwgd2ViR0xEYXRhKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgIHtcbiAgICAgICAgICAgIHdlYkdMRGF0YSA9IHRoaXMuc3dpdGNoTW9kZSh3ZWJHTCwgMCk7XG5cbiAgICAgICAgICAgIGlmIChkYXRhLnR5cGUgPT09IENPTlNULlNIQVBFUy5SRUNUKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGJ1aWxkUmVjdGFuZ2xlKGRhdGEsIHdlYkdMRGF0YSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChkYXRhLnR5cGUgPT09IENPTlNULlNIQVBFUy5DSVJDIHx8IGRhdGEudHlwZSA9PT0gQ09OU1QuU0hBUEVTLkVMSVApXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgYnVpbGRDaXJjbGUoZGF0YSwgd2ViR0xEYXRhKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGRhdGEudHlwZSA9PT0gQ09OU1QuU0hBUEVTLlJSRUMpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgYnVpbGRSb3VuZGVkUmVjdGFuZ2xlKGRhdGEsIHdlYkdMRGF0YSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICB3ZWJHTC5sYXN0SW5kZXgrKztcbiAgICB9XG5cbiAgICAvLyB1cGxvYWQgYWxsIHRoZSBkaXJ0eSBkYXRhLi4uXG4gICAgZm9yIChpID0gMDsgaSA8IHdlYkdMLmRhdGEubGVuZ3RoOyBpKyspXG4gICAge1xuICAgICAgICB3ZWJHTERhdGEgPSB3ZWJHTC5kYXRhW2ldO1xuXG4gICAgICAgIGlmICh3ZWJHTERhdGEuZGlydHkpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHdlYkdMRGF0YS51cGxvYWQoKTtcbiAgICAgICAgfVxuICAgIH1cbn07XG5cbi8qKlxuICpcbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHdlYkdMIHtXZWJHTFJlbmRlcmluZ0NvbnRleHR9IHRoZSBjdXJyZW50IFdlYkdMIGRyYXdpbmcgY29udGV4dFxuICogQHBhcmFtIHR5cGUge251bWJlcn0gVE9ETyBAQWx2aW5cbiAqL1xuR3JhcGhpY3NSZW5kZXJlci5wcm90b3R5cGUuc3dpdGNoTW9kZSA9IGZ1bmN0aW9uICh3ZWJHTCwgdHlwZSlcbntcbiAgICB2YXIgd2ViR0xEYXRhO1xuXG4gICAgaWYgKCF3ZWJHTC5kYXRhLmxlbmd0aClcbiAgICB7XG4gICAgICAgIHdlYkdMRGF0YSA9IHRoaXMuZ3JhcGhpY3NEYXRhUG9vbC5wb3AoKSB8fCBuZXcgV2ViR0xHcmFwaGljc0RhdGEod2ViR0wuZ2wpO1xuICAgICAgICB3ZWJHTERhdGEubW9kZSA9IHR5cGU7XG4gICAgICAgIHdlYkdMLmRhdGEucHVzaCh3ZWJHTERhdGEpO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICB3ZWJHTERhdGEgPSB3ZWJHTC5kYXRhW3dlYkdMLmRhdGEubGVuZ3RoLTFdO1xuXG4gICAgICAgIGlmICgod2ViR0xEYXRhLnBvaW50cy5sZW5ndGggPiAzMjAwMDApIHx8IHdlYkdMRGF0YS5tb2RlICE9PSB0eXBlIHx8IHR5cGUgPT09IDEpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHdlYkdMRGF0YSA9IHRoaXMuZ3JhcGhpY3NEYXRhUG9vbC5wb3AoKSB8fCBuZXcgV2ViR0xHcmFwaGljc0RhdGEod2ViR0wuZ2wpO1xuICAgICAgICAgICAgd2ViR0xEYXRhLm1vZGUgPSB0eXBlO1xuICAgICAgICAgICAgd2ViR0wuZGF0YS5wdXNoKHdlYkdMRGF0YSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB3ZWJHTERhdGEuZGlydHkgPSB0cnVlO1xuXG4gICAgcmV0dXJuIHdlYkdMRGF0YTtcbn07XG5cbiIsIi8qKlxuICogQW4gb2JqZWN0IGNvbnRhaW5pbmcgV2ViR0wgc3BlY2lmaWMgcHJvcGVydGllcyB0byBiZSB1c2VkIGJ5IHRoZSBXZWJHTCByZW5kZXJlclxuICpcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqIEBwYXJhbSBnbCB7V2ViR0xSZW5kZXJpbmdDb250ZXh0fSB0aGUgY3VycmVudCBXZWJHTCBkcmF3aW5nIGNvbnRleHRcbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIFdlYkdMR3JhcGhpY3NEYXRhKGdsKSB7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgY3VycmVudCBXZWJHTCBkcmF3aW5nIGNvbnRleHRcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1dlYkdMUmVuZGVyaW5nQ29udGV4dH1cbiAgICAgKi9cbiAgICB0aGlzLmdsID0gZ2w7XG5cbiAgICAvL1RPRE8gZG9lcyB0aGlzIG5lZWQgdG8gYmUgc3BsaXQgYmVmb3JlIHVwbG9kaW5nPz9cbiAgICAvKipcbiAgICAgKiBBbiBhcnJheSBvZiBjb2xvciBjb21wb25lbnRzIChyLGcsYilcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJbXX1cbiAgICAgKi9cbiAgICB0aGlzLmNvbG9yID0gWzAsMCwwXTsgLy8gY29sb3Igc3BsaXQhXG5cbiAgICAvKipcbiAgICAgKiBBbiBhcnJheSBvZiBwb2ludHMgdG8gZHJhd1xuICAgICAqIEBtZW1iZXIge1BJWEkuUG9pbnRbXX1cbiAgICAgKi9cbiAgICB0aGlzLnBvaW50cyA9IFtdO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGluZGljZXMgb2YgdGhlIHZlcnRpY2VzXG4gICAgICogQG1lbWJlciB7bnVtYmVyW119XG4gICAgICovXG4gICAgdGhpcy5pbmRpY2VzID0gW107XG4gICAgLyoqXG4gICAgICogVGhlIG1haW4gYnVmZmVyXG4gICAgICogQG1lbWJlciB7V2ViR0xCdWZmZXJ9XG4gICAgICovXG4gICAgdGhpcy5idWZmZXIgPSBnbC5jcmVhdGVCdWZmZXIoKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBpbmRleCBidWZmZXJcbiAgICAgKiBAbWVtYmVyIHtXZWJHTEJ1ZmZlcn1cbiAgICAgKi9cbiAgICB0aGlzLmluZGV4QnVmZmVyID0gZ2wuY3JlYXRlQnVmZmVyKCk7XG5cbiAgICAvKipcbiAgICAgKiB0b2RvIEBhbHZpblxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLm1vZGUgPSAxO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGFscGhhIG9mIHRoZSBncmFwaGljc1xuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLmFscGhhID0gMTtcblxuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgdGhpcyBncmFwaGljcyBpcyBkaXJ0eSBvciBub3RcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqL1xuICAgIHRoaXMuZGlydHkgPSB0cnVlO1xuXG4gICAgdGhpcy5nbFBvaW50cyA9IG51bGw7XG4gICAgdGhpcy5nbEluZGljZXMgPSBudWxsO1xufVxuXG5XZWJHTEdyYXBoaWNzRGF0YS5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBXZWJHTEdyYXBoaWNzRGF0YTtcbm1vZHVsZS5leHBvcnRzID0gV2ViR0xHcmFwaGljc0RhdGE7XG5cbi8qKlxuICogUmVzZXRzIHRoZSB2ZXJ0aWNlcyBhbmQgdGhlIGluZGljZXNcbiAqL1xuV2ViR0xHcmFwaGljc0RhdGEucHJvdG90eXBlLnJlc2V0ID0gZnVuY3Rpb24gKCkge1xuICAgIHRoaXMucG9pbnRzLmxlbmd0aCA9IDA7XG4gICAgdGhpcy5pbmRpY2VzLmxlbmd0aCA9IDA7XG59O1xuXG4vKipcbiAqIEJpbmRzIHRoZSBidWZmZXJzIGFuZCB1cGxvYWRzIHRoZSBkYXRhXG4gKi9cbldlYkdMR3JhcGhpY3NEYXRhLnByb3RvdHlwZS51cGxvYWQgPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGdsID0gdGhpcy5nbDtcblxuLy8gICAgdGhpcy5sYXN0SW5kZXggPSBncmFwaGljcy5ncmFwaGljc0RhdGEubGVuZ3RoO1xuICAgIHRoaXMuZ2xQb2ludHMgPSBuZXcgRmxvYXQzMkFycmF5KHRoaXMucG9pbnRzKTtcblxuICAgIGdsLmJpbmRCdWZmZXIoZ2wuQVJSQVlfQlVGRkVSLCB0aGlzLmJ1ZmZlcik7XG4gICAgZ2wuYnVmZmVyRGF0YShnbC5BUlJBWV9CVUZGRVIsIHRoaXMuZ2xQb2ludHMsIGdsLlNUQVRJQ19EUkFXKTtcblxuICAgIHRoaXMuZ2xJbmRpY2VzID0gbmV3IFVpbnQxNkFycmF5KHRoaXMuaW5kaWNlcyk7XG5cbiAgICBnbC5iaW5kQnVmZmVyKGdsLkVMRU1FTlRfQVJSQVlfQlVGRkVSLCB0aGlzLmluZGV4QnVmZmVyKTtcbiAgICBnbC5idWZmZXJEYXRhKGdsLkVMRU1FTlRfQVJSQVlfQlVGRkVSLCB0aGlzLmdsSW5kaWNlcywgZ2wuU1RBVElDX0RSQVcpO1xuXG4gICAgdGhpcy5kaXJ0eSA9IGZhbHNlO1xufTtcblxuV2ViR0xHcmFwaGljc0RhdGEucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoKSB7XG4gICAgdGhpcy5jb2xvciA9IG51bGw7XG4gICAgdGhpcy5wb2ludHMgPSBudWxsO1xuICAgIHRoaXMuaW5kaWNlcyA9IG51bGw7XG5cbiAgICB0aGlzLmdsLmRlbGV0ZUJ1ZmZlcih0aGlzLmJ1ZmZlcik7XG4gICAgdGhpcy5nbC5kZWxldGVCdWZmZXIodGhpcy5pbmRleEJ1ZmZlcik7XG4gICAgXG4gICAgdGhpcy5nbCA9IG51bGw7XG5cbiAgICB0aGlzLmJ1ZmZlciA9IG51bGw7XG4gICAgdGhpcy5pbmRleEJ1ZmZlciA9IG51bGw7XG5cbiAgICB0aGlzLmdsUG9pbnRzID0gbnVsbDtcbiAgICB0aGlzLmdsSW5kaWNlcyA9IG51bGw7XG59O1xuIiwidmFyIFNoYWRlciA9IHJlcXVpcmUoJ3BpeGktZ2wtY29yZScpLkdMU2hhZGVyO1xuXG4vKipcbiAqIFRoaXMgc2hhZGVyIGlzIHVzZWQgdG8gZHJhdyBzaW1wbGUgcHJpbWl0aXZlIHNoYXBlcyBmb3Ige0BsaW5rIFBJWEkuR3JhcGhpY3N9LlxuICpcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqIEBleHRlbmRzIFBJWEkuU2hhZGVyXG4gKiBAcGFyYW0gc2hhZGVyTWFuYWdlciB7U2hhZGVyTWFuYWdlcn0gVGhlIHdlYmdsIHNoYWRlciBtYW5hZ2VyIHRoaXMgc2hhZGVyIHdvcmtzIGZvci5cbiAqL1xuZnVuY3Rpb24gUHJpbWl0aXZlU2hhZGVyKGdsKVxue1xuICAgIFNoYWRlci5jYWxsKHRoaXMsXG4gICAgICAgIGdsLFxuICAgICAgICAvLyB2ZXJ0ZXggc2hhZGVyXG4gICAgICAgIFtcbiAgICAgICAgICAgICdhdHRyaWJ1dGUgdmVjMiBhVmVydGV4UG9zaXRpb247JyxcbiAgICAgICAgICAgICdhdHRyaWJ1dGUgdmVjNCBhQ29sb3I7JyxcblxuICAgICAgICAgICAgJ3VuaWZvcm0gbWF0MyB0cmFuc2xhdGlvbk1hdHJpeDsnLFxuICAgICAgICAgICAgJ3VuaWZvcm0gbWF0MyBwcm9qZWN0aW9uTWF0cml4OycsXG5cbiAgICAgICAgICAgICd1bmlmb3JtIGZsb2F0IGFscGhhOycsXG4gICAgICAgICAgICAndW5pZm9ybSBmbG9hdCBmbGlwWTsnLFxuICAgICAgICAgICAgJ3VuaWZvcm0gdmVjMyB0aW50OycsXG5cbiAgICAgICAgICAgICd2YXJ5aW5nIHZlYzQgdkNvbG9yOycsXG5cbiAgICAgICAgICAgICd2b2lkIG1haW4odm9pZCl7JyxcbiAgICAgICAgICAgICcgICBnbF9Qb3NpdGlvbiA9IHZlYzQoKHByb2plY3Rpb25NYXRyaXggKiB0cmFuc2xhdGlvbk1hdHJpeCAqIHZlYzMoYVZlcnRleFBvc2l0aW9uLCAxLjApKS54eSwgMC4wLCAxLjApOycsXG4gICAgICAgICAgICAnICAgdkNvbG9yID0gYUNvbG9yICogdmVjNCh0aW50ICogYWxwaGEsIGFscGhhKTsnLFxuICAgICAgICAgICAgJ30nXG4gICAgICAgIF0uam9pbignXFxuJyksXG4gICAgICAgIC8vIGZyYWdtZW50IHNoYWRlclxuICAgICAgICBbXG4gICAgICAgICAgICAncHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7JyxcblxuICAgICAgICAgICAgJ3ZhcnlpbmcgdmVjNCB2Q29sb3I7JyxcblxuICAgICAgICAgICAgJ3ZvaWQgbWFpbih2b2lkKXsnLFxuICAgICAgICAgICAgJyAgIGdsX0ZyYWdDb2xvciA9IHZDb2xvcjsnLFxuICAgICAgICAgICAgJ30nXG4gICAgICAgIF0uam9pbignXFxuJylcbiAgICApO1xufVxuXG5QcmltaXRpdmVTaGFkZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShTaGFkZXIucHJvdG90eXBlKTtcblByaW1pdGl2ZVNoYWRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBQcmltaXRpdmVTaGFkZXI7XG5cbm1vZHVsZS5leHBvcnRzID0gUHJpbWl0aXZlU2hhZGVyO1xuIiwidmFyIGJ1aWxkTGluZSA9IHJlcXVpcmUoJy4vYnVpbGRMaW5lJyksXG4gICAgdXRpbHMgPSByZXF1aXJlKCcuLi8uLi8uLi91dGlscycpO1xuXG4vKipcbiAqIEJ1aWxkcyBhIGNpcmNsZSB0byBkcmF3XG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSBncmFwaGljc0RhdGEge1BJWEkuR3JhcGhpY3N9IFRoZSBncmFwaGljcyBvYmplY3QgdG8gZHJhd1xuICogQHBhcmFtIHdlYkdMRGF0YSB7b2JqZWN0fSBhbiBvYmplY3QgY29udGFpbmluZyBhbGwgdGhlIHdlYkdMLXNwZWNpZmljIGluZm9ybWF0aW9uIHRvIGNyZWF0ZSB0aGlzIHNoYXBlXG4gKi9cbnZhciBidWlsZENpcmNsZSA9IGZ1bmN0aW9uIChncmFwaGljc0RhdGEsIHdlYkdMRGF0YSlcbntcbiAgICAvLyBuZWVkIHRvIGNvbnZlcnQgcG9pbnRzIHRvIGEgbmljZSByZWd1bGFyIGRhdGFcbiAgICB2YXIgY2lyY2xlRGF0YSA9IGdyYXBoaWNzRGF0YS5zaGFwZTtcbiAgICB2YXIgeCA9IGNpcmNsZURhdGEueDtcbiAgICB2YXIgeSA9IGNpcmNsZURhdGEueTtcbiAgICB2YXIgd2lkdGg7XG4gICAgdmFyIGhlaWdodDtcblxuICAgIC8vIFRPRE8gLSBiaXQgaGFja3k/P1xuICAgIGlmIChncmFwaGljc0RhdGEudHlwZSA9PT0gQ09OU1QuU0hBUEVTLkNJUkMpXG4gICAge1xuICAgICAgICB3aWR0aCA9IGNpcmNsZURhdGEucmFkaXVzO1xuICAgICAgICBoZWlnaHQgPSBjaXJjbGVEYXRhLnJhZGl1cztcbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgd2lkdGggPSBjaXJjbGVEYXRhLndpZHRoO1xuICAgICAgICBoZWlnaHQgPSBjaXJjbGVEYXRhLmhlaWdodDtcbiAgICB9XG5cbiAgICB2YXIgdG90YWxTZWdzID0gTWF0aC5mbG9vcigzMCAqIE1hdGguc3FydChjaXJjbGVEYXRhLnJhZGl1cykpIHx8IE1hdGguZmxvb3IoMTUgKiBNYXRoLnNxcnQoY2lyY2xlRGF0YS53aWR0aCArIGNpcmNsZURhdGEuaGVpZ2h0KSk7XG4gICAgdmFyIHNlZyA9IChNYXRoLlBJICogMikgLyB0b3RhbFNlZ3MgO1xuXG4gICAgdmFyIGkgPSAwO1xuXG4gICAgaWYgKGdyYXBoaWNzRGF0YS5maWxsKVxuICAgIHtcbiAgICAgICAgdmFyIGNvbG9yID0gdXRpbHMuaGV4MnJnYihncmFwaGljc0RhdGEuZmlsbENvbG9yKTtcbiAgICAgICAgdmFyIGFscGhhID0gZ3JhcGhpY3NEYXRhLmZpbGxBbHBoYTtcblxuICAgICAgICB2YXIgciA9IGNvbG9yWzBdICogYWxwaGE7XG4gICAgICAgIHZhciBnID0gY29sb3JbMV0gKiBhbHBoYTtcbiAgICAgICAgdmFyIGIgPSBjb2xvclsyXSAqIGFscGhhO1xuXG4gICAgICAgIHZhciB2ZXJ0cyA9IHdlYkdMRGF0YS5wb2ludHM7XG4gICAgICAgIHZhciBpbmRpY2VzID0gd2ViR0xEYXRhLmluZGljZXM7XG5cbiAgICAgICAgdmFyIHZlY1BvcyA9IHZlcnRzLmxlbmd0aC82O1xuXG4gICAgICAgIGluZGljZXMucHVzaCh2ZWNQb3MpO1xuXG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCB0b3RhbFNlZ3MgKyAxIDsgaSsrKVxuICAgICAgICB7XG4gICAgICAgICAgICB2ZXJ0cy5wdXNoKHgseSwgciwgZywgYiwgYWxwaGEpO1xuXG4gICAgICAgICAgICB2ZXJ0cy5wdXNoKHggKyBNYXRoLnNpbihzZWcgKiBpKSAqIHdpZHRoLFxuICAgICAgICAgICAgICAgICAgICAgICB5ICsgTWF0aC5jb3Moc2VnICogaSkgKiBoZWlnaHQsXG4gICAgICAgICAgICAgICAgICAgICAgIHIsIGcsIGIsIGFscGhhKTtcblxuICAgICAgICAgICAgaW5kaWNlcy5wdXNoKHZlY1BvcysrLCB2ZWNQb3MrKyk7XG4gICAgICAgIH1cblxuICAgICAgICBpbmRpY2VzLnB1c2godmVjUG9zLTEpO1xuICAgIH1cblxuICAgIGlmIChncmFwaGljc0RhdGEubGluZVdpZHRoKVxuICAgIHtcbiAgICAgICAgdmFyIHRlbXBQb2ludHMgPSBncmFwaGljc0RhdGEucG9pbnRzO1xuXG4gICAgICAgIGdyYXBoaWNzRGF0YS5wb2ludHMgPSBbXTtcblxuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgdG90YWxTZWdzICsgMTsgaSsrKVxuICAgICAgICB7XG4gICAgICAgICAgICBncmFwaGljc0RhdGEucG9pbnRzLnB1c2goeCArIE1hdGguc2luKHNlZyAqIGkpICogd2lkdGgsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeSArIE1hdGguY29zKHNlZyAqIGkpICogaGVpZ2h0KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGJ1aWxkTGluZShncmFwaGljc0RhdGEsIHdlYkdMRGF0YSk7XG5cbiAgICAgICAgZ3JhcGhpY3NEYXRhLnBvaW50cyA9IHRlbXBQb2ludHM7XG4gICAgfVxufTtcblxuXG5tb2R1bGUuZXhwb3J0cyA9IGJ1aWxkQ2lyY2xlOyIsInZhciBidWlsZExpbmUgPSByZXF1aXJlKCcuL2J1aWxkTGluZScpLFxuICAgIHV0aWxzID0gcmVxdWlyZSgnLi4vLi4vLi4vdXRpbHMnKTtcbiAgICBcblxuXG4vKipcbiAqIEJ1aWxkcyBhIGNvbXBsZXggcG9seWdvbiB0byBkcmF3XG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSBncmFwaGljc0RhdGEge1BJWEkuR3JhcGhpY3N9IFRoZSBncmFwaGljcyBvYmplY3QgY29udGFpbmluZyBhbGwgdGhlIG5lY2Vzc2FyeSBwcm9wZXJ0aWVzXG4gKiBAcGFyYW0gd2ViR0xEYXRhIHtvYmplY3R9IGFuIG9iamVjdCBjb250YWluaW5nIGFsbCB0aGUgd2ViR0wtc3BlY2lmaWMgaW5mb3JtYXRpb24gdG8gY3JlYXRlIHRoaXMgc2hhcGVcbiAqL1xudmFyIGJ1aWxkQ29tcGxleFBvbHkgPSBmdW5jdGlvbiAoZ3JhcGhpY3NEYXRhLCB3ZWJHTERhdGEpXG57XG4gICAgLy9UT0RPIC0gbm8gbmVlZCB0byBjb3B5IHRoaXMgYXMgaXQgZ2V0cyB0dXJuZWQgaW50byBhIEZMb2F0MzJBcnJheSBhbnl3YXlzLi5cbiAgICB2YXIgcG9pbnRzID0gZ3JhcGhpY3NEYXRhLnBvaW50cy5zbGljZSgpO1xuXG4gICAgaWYgKHBvaW50cy5sZW5ndGggPCA2KVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIGdldCBmaXJzdCBhbmQgbGFzdCBwb2ludC4uIGZpZ3VyZSBvdXQgdGhlIG1pZGRsZSFcbiAgICB2YXIgaW5kaWNlcyA9IHdlYkdMRGF0YS5pbmRpY2VzO1xuICAgIHdlYkdMRGF0YS5wb2ludHMgPSBwb2ludHM7XG4gICAgd2ViR0xEYXRhLmFscGhhID0gZ3JhcGhpY3NEYXRhLmZpbGxBbHBoYTtcbiAgICB3ZWJHTERhdGEuY29sb3IgPSB1dGlscy5oZXgycmdiKGdyYXBoaWNzRGF0YS5maWxsQ29sb3IpO1xuXG4gICAgLy8gY2FsY2xhdGUgdGhlIGJvdW5kcy4uXG4gICAgdmFyIG1pblggPSBJbmZpbml0eTtcbiAgICB2YXIgbWF4WCA9IC1JbmZpbml0eTtcblxuICAgIHZhciBtaW5ZID0gSW5maW5pdHk7XG4gICAgdmFyIG1heFkgPSAtSW5maW5pdHk7XG5cbiAgICB2YXIgeCx5O1xuXG4gICAgLy8gZ2V0IHNpemUuLlxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcG9pbnRzLmxlbmd0aDsgaSs9MilcbiAgICB7XG4gICAgICAgIHggPSBwb2ludHNbaV07XG4gICAgICAgIHkgPSBwb2ludHNbaSsxXTtcblxuICAgICAgICBtaW5YID0geCA8IG1pblggPyB4IDogbWluWDtcbiAgICAgICAgbWF4WCA9IHggPiBtYXhYID8geCA6IG1heFg7XG5cbiAgICAgICAgbWluWSA9IHkgPCBtaW5ZID8geSA6IG1pblk7XG4gICAgICAgIG1heFkgPSB5ID4gbWF4WSA/IHkgOiBtYXhZO1xuICAgIH1cblxuICAgIC8vIGFkZCBhIHF1YWQgdG8gdGhlIGVuZCBjb3MgdGhlcmUgaXMgbm8gcG9pbnQgbWFraW5nIGFub3RoZXIgYnVmZmVyIVxuICAgIHBvaW50cy5wdXNoKG1pblgsIG1pblksXG4gICAgICAgICAgICAgICAgbWF4WCwgbWluWSxcbiAgICAgICAgICAgICAgICBtYXhYLCBtYXhZLFxuICAgICAgICAgICAgICAgIG1pblgsIG1heFkpO1xuXG4gICAgLy8gcHVzaCBhIHF1YWQgb250byB0aGUgZW5kLi5cblxuICAgIC8vVE9ETyAtIHRoaXMgYWludCBuZWVkZWQhXG4gICAgdmFyIGxlbmd0aCA9IHBvaW50cy5sZW5ndGggLyAyO1xuICAgIGZvciAoaSA9IDA7IGkgPCBsZW5ndGg7IGkrKylcbiAgICB7XG4gICAgICAgIGluZGljZXMucHVzaCggaSApO1xuICAgIH1cblxufTtcblxuXG5cbm1vZHVsZS5leHBvcnRzID0gYnVpbGRDb21wbGV4UG9seTsiLCJ2YXIgbWF0aCA9IHJlcXVpcmUoJy4uLy4uLy4uL21hdGgnKSxcbiAgICB1dGlscyA9IHJlcXVpcmUoJy4uLy4uLy4uL3V0aWxzJyk7XG5cbi8qKlxuICogQnVpbGRzIGEgbGluZSB0byBkcmF3XG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSBncmFwaGljc0RhdGEge1BJWEkuR3JhcGhpY3N9IFRoZSBncmFwaGljcyBvYmplY3QgY29udGFpbmluZyBhbGwgdGhlIG5lY2Vzc2FyeSBwcm9wZXJ0aWVzXG4gKiBAcGFyYW0gd2ViR0xEYXRhIHtvYmplY3R9IGFuIG9iamVjdCBjb250YWluaW5nIGFsbCB0aGUgd2ViR0wtc3BlY2lmaWMgaW5mb3JtYXRpb24gdG8gY3JlYXRlIHRoaXMgc2hhcGVcbiAqL1xudmFyIGJ1aWxkTGluZSA9IGZ1bmN0aW9uIChncmFwaGljc0RhdGEsIHdlYkdMRGF0YSlcbntcbiAgICAvLyBUT0RPIE9QVElNSVNFIVxuICAgIHZhciBpID0gMDtcbiAgICB2YXIgcG9pbnRzID0gZ3JhcGhpY3NEYXRhLnBvaW50cztcblxuICAgIGlmIChwb2ludHMubGVuZ3RoID09PSAwKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICAvLyBpZiB0aGUgbGluZSB3aWR0aCBpcyBhbiBvZGQgbnVtYmVyIGFkZCAwLjUgdG8gYWxpZ24gdG8gYSB3aG9sZSBwaXhlbFxuICAgIC8vIGNvbW1lbnRpbmcgdGhpcyBvdXQgZml4ZXMgIzcxMSBhbmQgIzE2MjBcbiAgICAvLyBpZiAoZ3JhcGhpY3NEYXRhLmxpbmVXaWR0aCUyKVxuICAgIC8vIHtcbiAgICAvLyAgICAgZm9yIChpID0gMDsgaSA8IHBvaW50cy5sZW5ndGg7IGkrKylcbiAgICAvLyAgICAge1xuICAgIC8vICAgICAgICAgcG9pbnRzW2ldICs9IDAuNTtcbiAgICAvLyAgICAgfVxuICAgIC8vIH1cblxuICAgIC8vIGdldCBmaXJzdCBhbmQgbGFzdCBwb2ludC4uIGZpZ3VyZSBvdXQgdGhlIG1pZGRsZSFcbiAgICB2YXIgZmlyc3RQb2ludCA9IG5ldyBtYXRoLlBvaW50KHBvaW50c1swXSwgcG9pbnRzWzFdKTtcbiAgICB2YXIgbGFzdFBvaW50ID0gbmV3IG1hdGguUG9pbnQocG9pbnRzW3BvaW50cy5sZW5ndGggLSAyXSwgcG9pbnRzW3BvaW50cy5sZW5ndGggLSAxXSk7XG5cbiAgICAvLyBpZiB0aGUgZmlyc3QgcG9pbnQgaXMgdGhlIGxhc3QgcG9pbnQgLSBnb25uYSBoYXZlIGlzc3VlcyA6KVxuICAgIGlmIChmaXJzdFBvaW50LnggPT09IGxhc3RQb2ludC54ICYmIGZpcnN0UG9pbnQueSA9PT0gbGFzdFBvaW50LnkpXG4gICAge1xuICAgICAgICAvLyBuZWVkIHRvIGNsb25lIGFzIHdlIGFyZSBnb2luZyB0byBzbGlnaHRseSBtb2RpZnkgdGhlIHNoYXBlLi5cbiAgICAgICAgcG9pbnRzID0gcG9pbnRzLnNsaWNlKCk7XG5cbiAgICAgICAgcG9pbnRzLnBvcCgpO1xuICAgICAgICBwb2ludHMucG9wKCk7XG5cbiAgICAgICAgbGFzdFBvaW50ID0gbmV3IG1hdGguUG9pbnQocG9pbnRzW3BvaW50cy5sZW5ndGggLSAyXSwgcG9pbnRzW3BvaW50cy5sZW5ndGggLSAxXSk7XG5cbiAgICAgICAgdmFyIG1pZFBvaW50WCA9IGxhc3RQb2ludC54ICsgKGZpcnN0UG9pbnQueCAtIGxhc3RQb2ludC54KSAqMC41O1xuICAgICAgICB2YXIgbWlkUG9pbnRZID0gbGFzdFBvaW50LnkgKyAoZmlyc3RQb2ludC55IC0gbGFzdFBvaW50LnkpICowLjU7XG5cbiAgICAgICAgcG9pbnRzLnVuc2hpZnQobWlkUG9pbnRYLCBtaWRQb2ludFkpO1xuICAgICAgICBwb2ludHMucHVzaChtaWRQb2ludFgsIG1pZFBvaW50WSk7XG4gICAgfVxuXG4gICAgdmFyIHZlcnRzID0gd2ViR0xEYXRhLnBvaW50cztcbiAgICB2YXIgaW5kaWNlcyA9IHdlYkdMRGF0YS5pbmRpY2VzO1xuICAgIHZhciBsZW5ndGggPSBwb2ludHMubGVuZ3RoIC8gMjtcbiAgICB2YXIgaW5kZXhDb3VudCA9IHBvaW50cy5sZW5ndGg7XG4gICAgdmFyIGluZGV4U3RhcnQgPSB2ZXJ0cy5sZW5ndGgvNjtcblxuICAgIC8vIERSQVcgdGhlIExpbmVcbiAgICB2YXIgd2lkdGggPSBncmFwaGljc0RhdGEubGluZVdpZHRoIC8gMjtcblxuICAgIC8vIHNvcnQgY29sb3JcbiAgICB2YXIgY29sb3IgPSB1dGlscy5oZXgycmdiKGdyYXBoaWNzRGF0YS5saW5lQ29sb3IpO1xuICAgIHZhciBhbHBoYSA9IGdyYXBoaWNzRGF0YS5saW5lQWxwaGE7XG4gICAgdmFyIHIgPSBjb2xvclswXSAqIGFscGhhO1xuICAgIHZhciBnID0gY29sb3JbMV0gKiBhbHBoYTtcbiAgICB2YXIgYiA9IGNvbG9yWzJdICogYWxwaGE7XG5cbiAgICB2YXIgcHgsIHB5LCBwMXgsIHAxeSwgcDJ4LCBwMnksIHAzeCwgcDN5O1xuICAgIHZhciBwZXJweCwgcGVycHksIHBlcnAyeCwgcGVycDJ5LCBwZXJwM3gsIHBlcnAzeTtcbiAgICB2YXIgYTEsIGIxLCBjMSwgYTIsIGIyLCBjMjtcbiAgICB2YXIgZGVub20sIHBkaXN0LCBkaXN0O1xuXG4gICAgcDF4ID0gcG9pbnRzWzBdO1xuICAgIHAxeSA9IHBvaW50c1sxXTtcblxuICAgIHAyeCA9IHBvaW50c1syXTtcbiAgICBwMnkgPSBwb2ludHNbM107XG5cbiAgICBwZXJweCA9IC0ocDF5IC0gcDJ5KTtcbiAgICBwZXJweSA9ICBwMXggLSBwMng7XG5cbiAgICBkaXN0ID0gTWF0aC5zcXJ0KHBlcnB4KnBlcnB4ICsgcGVycHkqcGVycHkpO1xuXG4gICAgcGVycHggLz0gZGlzdDtcbiAgICBwZXJweSAvPSBkaXN0O1xuICAgIHBlcnB4ICo9IHdpZHRoO1xuICAgIHBlcnB5ICo9IHdpZHRoO1xuXG4gICAgLy8gc3RhcnRcbiAgICB2ZXJ0cy5wdXNoKHAxeCAtIHBlcnB4ICwgcDF5IC0gcGVycHksXG4gICAgICAgICAgICAgICAgciwgZywgYiwgYWxwaGEpO1xuXG4gICAgdmVydHMucHVzaChwMXggKyBwZXJweCAsIHAxeSArIHBlcnB5LFxuICAgICAgICAgICAgICAgIHIsIGcsIGIsIGFscGhhKTtcblxuICAgIGZvciAoaSA9IDE7IGkgPCBsZW5ndGgtMTsgaSsrKVxuICAgIHtcbiAgICAgICAgcDF4ID0gcG9pbnRzWyhpLTEpKjJdO1xuICAgICAgICBwMXkgPSBwb2ludHNbKGktMSkqMiArIDFdO1xuXG4gICAgICAgIHAyeCA9IHBvaW50c1soaSkqMl07XG4gICAgICAgIHAyeSA9IHBvaW50c1soaSkqMiArIDFdO1xuXG4gICAgICAgIHAzeCA9IHBvaW50c1soaSsxKSoyXTtcbiAgICAgICAgcDN5ID0gcG9pbnRzWyhpKzEpKjIgKyAxXTtcblxuICAgICAgICBwZXJweCA9IC0ocDF5IC0gcDJ5KTtcbiAgICAgICAgcGVycHkgPSBwMXggLSBwMng7XG5cbiAgICAgICAgZGlzdCA9IE1hdGguc3FydChwZXJweCpwZXJweCArIHBlcnB5KnBlcnB5KTtcbiAgICAgICAgcGVycHggLz0gZGlzdDtcbiAgICAgICAgcGVycHkgLz0gZGlzdDtcbiAgICAgICAgcGVycHggKj0gd2lkdGg7XG4gICAgICAgIHBlcnB5ICo9IHdpZHRoO1xuXG4gICAgICAgIHBlcnAyeCA9IC0ocDJ5IC0gcDN5KTtcbiAgICAgICAgcGVycDJ5ID0gcDJ4IC0gcDN4O1xuXG4gICAgICAgIGRpc3QgPSBNYXRoLnNxcnQocGVycDJ4KnBlcnAyeCArIHBlcnAyeSpwZXJwMnkpO1xuICAgICAgICBwZXJwMnggLz0gZGlzdDtcbiAgICAgICAgcGVycDJ5IC89IGRpc3Q7XG4gICAgICAgIHBlcnAyeCAqPSB3aWR0aDtcbiAgICAgICAgcGVycDJ5ICo9IHdpZHRoO1xuXG4gICAgICAgIGExID0gKC1wZXJweSArIHAxeSkgLSAoLXBlcnB5ICsgcDJ5KTtcbiAgICAgICAgYjEgPSAoLXBlcnB4ICsgcDJ4KSAtICgtcGVycHggKyBwMXgpO1xuICAgICAgICBjMSA9ICgtcGVycHggKyBwMXgpICogKC1wZXJweSArIHAyeSkgLSAoLXBlcnB4ICsgcDJ4KSAqICgtcGVycHkgKyBwMXkpO1xuICAgICAgICBhMiA9ICgtcGVycDJ5ICsgcDN5KSAtICgtcGVycDJ5ICsgcDJ5KTtcbiAgICAgICAgYjIgPSAoLXBlcnAyeCArIHAyeCkgLSAoLXBlcnAyeCArIHAzeCk7XG4gICAgICAgIGMyID0gKC1wZXJwMnggKyBwM3gpICogKC1wZXJwMnkgKyBwMnkpIC0gKC1wZXJwMnggKyBwMngpICogKC1wZXJwMnkgKyBwM3kpO1xuXG4gICAgICAgIGRlbm9tID0gYTEqYjIgLSBhMipiMTtcblxuICAgICAgICBpZiAoTWF0aC5hYnMoZGVub20pIDwgMC4xIClcbiAgICAgICAge1xuXG4gICAgICAgICAgICBkZW5vbSs9MTAuMTtcbiAgICAgICAgICAgIHZlcnRzLnB1c2gocDJ4IC0gcGVycHggLCBwMnkgLSBwZXJweSxcbiAgICAgICAgICAgICAgICByLCBnLCBiLCBhbHBoYSk7XG5cbiAgICAgICAgICAgIHZlcnRzLnB1c2gocDJ4ICsgcGVycHggLCBwMnkgKyBwZXJweSxcbiAgICAgICAgICAgICAgICByLCBnLCBiLCBhbHBoYSk7XG5cbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgcHggPSAoYjEqYzIgLSBiMipjMSkvZGVub207XG4gICAgICAgIHB5ID0gKGEyKmMxIC0gYTEqYzIpL2Rlbm9tO1xuXG5cbiAgICAgICAgcGRpc3QgPSAocHggLXAyeCkgKiAocHggLXAyeCkgKyAocHkgLXAyeSkgKiAocHkgLXAyeSk7XG5cblxuICAgICAgICBpZiAocGRpc3QgPiAxNDAgKiAxNDApXG4gICAgICAgIHtcbiAgICAgICAgICAgIHBlcnAzeCA9IHBlcnB4IC0gcGVycDJ4O1xuICAgICAgICAgICAgcGVycDN5ID0gcGVycHkgLSBwZXJwMnk7XG5cbiAgICAgICAgICAgIGRpc3QgPSBNYXRoLnNxcnQocGVycDN4KnBlcnAzeCArIHBlcnAzeSpwZXJwM3kpO1xuICAgICAgICAgICAgcGVycDN4IC89IGRpc3Q7XG4gICAgICAgICAgICBwZXJwM3kgLz0gZGlzdDtcbiAgICAgICAgICAgIHBlcnAzeCAqPSB3aWR0aDtcbiAgICAgICAgICAgIHBlcnAzeSAqPSB3aWR0aDtcblxuICAgICAgICAgICAgdmVydHMucHVzaChwMnggLSBwZXJwM3gsIHAyeSAtcGVycDN5KTtcbiAgICAgICAgICAgIHZlcnRzLnB1c2gociwgZywgYiwgYWxwaGEpO1xuXG4gICAgICAgICAgICB2ZXJ0cy5wdXNoKHAyeCArIHBlcnAzeCwgcDJ5ICtwZXJwM3kpO1xuICAgICAgICAgICAgdmVydHMucHVzaChyLCBnLCBiLCBhbHBoYSk7XG5cbiAgICAgICAgICAgIHZlcnRzLnB1c2gocDJ4IC0gcGVycDN4LCBwMnkgLXBlcnAzeSk7XG4gICAgICAgICAgICB2ZXJ0cy5wdXNoKHIsIGcsIGIsIGFscGhhKTtcblxuICAgICAgICAgICAgaW5kZXhDb3VudCsrO1xuICAgICAgICB9XG4gICAgICAgIGVsc2VcbiAgICAgICAge1xuXG4gICAgICAgICAgICB2ZXJ0cy5wdXNoKHB4ICwgcHkpO1xuICAgICAgICAgICAgdmVydHMucHVzaChyLCBnLCBiLCBhbHBoYSk7XG5cbiAgICAgICAgICAgIHZlcnRzLnB1c2gocDJ4IC0gKHB4LXAyeCksIHAyeSAtIChweSAtIHAyeSkpO1xuICAgICAgICAgICAgdmVydHMucHVzaChyLCBnLCBiLCBhbHBoYSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwMXggPSBwb2ludHNbKGxlbmd0aC0yKSoyXTtcbiAgICBwMXkgPSBwb2ludHNbKGxlbmd0aC0yKSoyICsgMV07XG5cbiAgICBwMnggPSBwb2ludHNbKGxlbmd0aC0xKSoyXTtcbiAgICBwMnkgPSBwb2ludHNbKGxlbmd0aC0xKSoyICsgMV07XG5cbiAgICBwZXJweCA9IC0ocDF5IC0gcDJ5KTtcbiAgICBwZXJweSA9IHAxeCAtIHAyeDtcblxuICAgIGRpc3QgPSBNYXRoLnNxcnQocGVycHgqcGVycHggKyBwZXJweSpwZXJweSk7XG4gICAgcGVycHggLz0gZGlzdDtcbiAgICBwZXJweSAvPSBkaXN0O1xuICAgIHBlcnB4ICo9IHdpZHRoO1xuICAgIHBlcnB5ICo9IHdpZHRoO1xuXG4gICAgdmVydHMucHVzaChwMnggLSBwZXJweCAsIHAyeSAtIHBlcnB5KTtcbiAgICB2ZXJ0cy5wdXNoKHIsIGcsIGIsIGFscGhhKTtcblxuICAgIHZlcnRzLnB1c2gocDJ4ICsgcGVycHggLCBwMnkgKyBwZXJweSk7XG4gICAgdmVydHMucHVzaChyLCBnLCBiLCBhbHBoYSk7XG5cbiAgICBpbmRpY2VzLnB1c2goaW5kZXhTdGFydCk7XG5cbiAgICBmb3IgKGkgPSAwOyBpIDwgaW5kZXhDb3VudDsgaSsrKVxuICAgIHtcbiAgICAgICAgaW5kaWNlcy5wdXNoKGluZGV4U3RhcnQrKyk7XG4gICAgfVxuXG4gICAgaW5kaWNlcy5wdXNoKGluZGV4U3RhcnQtMSk7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGJ1aWxkTGluZTsiLCJ2YXIgdXRpbHMgPSByZXF1aXJlKCcuLi8uLi8uLi91dGlscycpO1xuXG4vKipcbiAqIEJ1aWxkcyBhIHBvbHlnb24gdG8gZHJhd1xuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0gZ3JhcGhpY3NEYXRhIHtQSVhJLldlYkdMR3JhcGhpY3NEYXRhfSBUaGUgZ3JhcGhpY3Mgb2JqZWN0IGNvbnRhaW5pbmcgYWxsIHRoZSBuZWNlc3NhcnkgcHJvcGVydGllc1xuICogQHBhcmFtIHdlYkdMRGF0YSB7b2JqZWN0fSBhbiBvYmplY3QgY29udGFpbmluZyBhbGwgdGhlIHdlYkdMLXNwZWNpZmljIGluZm9ybWF0aW9uIHRvIGNyZWF0ZSB0aGlzIHNoYXBlXG4gKi9cbnZhciBidWlsZFBvbHkgPSBmdW5jdGlvbiAoZ3JhcGhpY3NEYXRhLCB3ZWJHTERhdGEpXG57XG4gICAgdmFyIHBvaW50cyA9IGdyYXBoaWNzRGF0YS5wb2ludHM7XG5cbiAgICBpZiAocG9pbnRzLmxlbmd0aCA8IDYpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gZ2V0IGZpcnN0IGFuZCBsYXN0IHBvaW50Li4gZmlndXJlIG91dCB0aGUgbWlkZGxlIVxuICAgIHZhciB2ZXJ0cyA9IHdlYkdMRGF0YS5wb2ludHM7XG4gICAgdmFyIGluZGljZXMgPSB3ZWJHTERhdGEuaW5kaWNlcztcblxuICAgIHZhciBsZW5ndGggPSBwb2ludHMubGVuZ3RoIC8gMjtcblxuICAgIC8vIHNvcnQgY29sb3JcbiAgICB2YXIgY29sb3IgPSB1dGlscy5oZXgycmdiKGdyYXBoaWNzRGF0YS5maWxsQ29sb3IpO1xuICAgIHZhciBhbHBoYSA9IGdyYXBoaWNzRGF0YS5maWxsQWxwaGE7XG4gICAgdmFyIHIgPSBjb2xvclswXSAqIGFscGhhO1xuICAgIHZhciBnID0gY29sb3JbMV0gKiBhbHBoYTtcbiAgICB2YXIgYiA9IGNvbG9yWzJdICogYWxwaGE7XG5cbiAgICB2YXIgdHJpYW5nbGVzID0gZWFyY3V0KHBvaW50cywgbnVsbCwgMik7XG5cbiAgICBpZiAoIXRyaWFuZ2xlcykge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgdmFyIHZlcnRQb3MgPSB2ZXJ0cy5sZW5ndGggLyA2O1xuXG4gICAgdmFyIGkgPSAwO1xuXG4gICAgZm9yIChpID0gMDsgaSA8IHRyaWFuZ2xlcy5sZW5ndGg7IGkrPTMpXG4gICAge1xuICAgICAgICBpbmRpY2VzLnB1c2godHJpYW5nbGVzW2ldICsgdmVydFBvcyk7XG4gICAgICAgIGluZGljZXMucHVzaCh0cmlhbmdsZXNbaV0gKyB2ZXJ0UG9zKTtcbiAgICAgICAgaW5kaWNlcy5wdXNoKHRyaWFuZ2xlc1tpKzFdICsgdmVydFBvcyk7XG4gICAgICAgIGluZGljZXMucHVzaCh0cmlhbmdsZXNbaSsyXSArdmVydFBvcyk7XG4gICAgICAgIGluZGljZXMucHVzaCh0cmlhbmdsZXNbaSsyXSArIHZlcnRQb3MpO1xuICAgIH1cblxuICAgIGZvciAoaSA9IDA7IGkgPCBsZW5ndGg7IGkrKylcbiAgICB7XG4gICAgICAgIHZlcnRzLnB1c2gocG9pbnRzW2kgKiAyXSwgcG9pbnRzW2kgKiAyICsgMV0sXG4gICAgICAgICAgICAgICAgICAgciwgZywgYiwgYWxwaGEpO1xuICAgIH1cblxuICAgIHJldHVybiB0cnVlO1xufTtcblxuXG5tb2R1bGUuZXhwb3J0cyA9IGJ1aWxkUG9seTtcbiIsInZhciBidWlsZExpbmUgPSByZXF1aXJlKCcuL2J1aWxkTGluZScpLFxuICAgIHV0aWxzID0gcmVxdWlyZSgnLi4vLi4vLi4vdXRpbHMnKTtcblxuLyoqXG4gKiBCdWlsZHMgYSByZWN0YW5nbGUgdG8gZHJhd1xuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0gZ3JhcGhpY3NEYXRhIHtQSVhJLkdyYXBoaWNzfSBUaGUgZ3JhcGhpY3Mgb2JqZWN0IGNvbnRhaW5pbmcgYWxsIHRoZSBuZWNlc3NhcnkgcHJvcGVydGllc1xuICogQHBhcmFtIHdlYkdMRGF0YSB7b2JqZWN0fSBhbiBvYmplY3QgY29udGFpbmluZyBhbGwgdGhlIHdlYkdMLXNwZWNpZmljIGluZm9ybWF0aW9uIHRvIGNyZWF0ZSB0aGlzIHNoYXBlXG4gKi9cbnZhciBidWlsZFJlY3RhbmdsZSA9IGZ1bmN0aW9uIChncmFwaGljc0RhdGEsIHdlYkdMRGF0YSlcbntcbiAgICAvLyAtLS0gLy9cbiAgICAvLyBuZWVkIHRvIGNvbnZlcnQgcG9pbnRzIHRvIGEgbmljZSByZWd1bGFyIGRhdGFcbiAgICAvL1xuICAgIHZhciByZWN0RGF0YSA9IGdyYXBoaWNzRGF0YS5zaGFwZTtcbiAgICB2YXIgeCA9IHJlY3REYXRhLng7XG4gICAgdmFyIHkgPSByZWN0RGF0YS55O1xuICAgIHZhciB3aWR0aCA9IHJlY3REYXRhLndpZHRoO1xuICAgIHZhciBoZWlnaHQgPSByZWN0RGF0YS5oZWlnaHQ7XG5cbiAgICBpZiAoZ3JhcGhpY3NEYXRhLmZpbGwpXG4gICAge1xuICAgICAgICB2YXIgY29sb3IgPSB1dGlscy5oZXgycmdiKGdyYXBoaWNzRGF0YS5maWxsQ29sb3IpO1xuICAgICAgICB2YXIgYWxwaGEgPSBncmFwaGljc0RhdGEuZmlsbEFscGhhO1xuXG4gICAgICAgIHZhciByID0gY29sb3JbMF0gKiBhbHBoYTtcbiAgICAgICAgdmFyIGcgPSBjb2xvclsxXSAqIGFscGhhO1xuICAgICAgICB2YXIgYiA9IGNvbG9yWzJdICogYWxwaGE7XG5cbiAgICAgICAgdmFyIHZlcnRzID0gd2ViR0xEYXRhLnBvaW50cztcbiAgICAgICAgdmFyIGluZGljZXMgPSB3ZWJHTERhdGEuaW5kaWNlcztcblxuICAgICAgICB2YXIgdmVydFBvcyA9IHZlcnRzLmxlbmd0aC82O1xuXG4gICAgICAgIC8vIHN0YXJ0XG4gICAgICAgIHZlcnRzLnB1c2goeCwgeSk7XG4gICAgICAgIHZlcnRzLnB1c2gociwgZywgYiwgYWxwaGEpO1xuXG4gICAgICAgIHZlcnRzLnB1c2goeCArIHdpZHRoLCB5KTtcbiAgICAgICAgdmVydHMucHVzaChyLCBnLCBiLCBhbHBoYSk7XG5cbiAgICAgICAgdmVydHMucHVzaCh4ICwgeSArIGhlaWdodCk7XG4gICAgICAgIHZlcnRzLnB1c2gociwgZywgYiwgYWxwaGEpO1xuXG4gICAgICAgIHZlcnRzLnB1c2goeCArIHdpZHRoLCB5ICsgaGVpZ2h0KTtcbiAgICAgICAgdmVydHMucHVzaChyLCBnLCBiLCBhbHBoYSk7XG5cbiAgICAgICAgLy8gaW5zZXJ0IDIgZGVhZCB0cmlhbmdsZXMuLlxuICAgICAgICBpbmRpY2VzLnB1c2godmVydFBvcywgdmVydFBvcywgdmVydFBvcysxLCB2ZXJ0UG9zKzIsIHZlcnRQb3MrMywgdmVydFBvcyszKTtcbiAgICB9XG5cbiAgICBpZiAoZ3JhcGhpY3NEYXRhLmxpbmVXaWR0aClcbiAgICB7XG4gICAgICAgIHZhciB0ZW1wUG9pbnRzID0gZ3JhcGhpY3NEYXRhLnBvaW50cztcblxuICAgICAgICBncmFwaGljc0RhdGEucG9pbnRzID0gW3gsIHksXG4gICAgICAgICAgICAgICAgICB4ICsgd2lkdGgsIHksXG4gICAgICAgICAgICAgICAgICB4ICsgd2lkdGgsIHkgKyBoZWlnaHQsXG4gICAgICAgICAgICAgICAgICB4LCB5ICsgaGVpZ2h0LFxuICAgICAgICAgICAgICAgICAgeCwgeV07XG5cblxuICAgICAgICBidWlsZExpbmUoZ3JhcGhpY3NEYXRhLCB3ZWJHTERhdGEpO1xuXG4gICAgICAgIGdyYXBoaWNzRGF0YS5wb2ludHMgPSB0ZW1wUG9pbnRzO1xuICAgIH1cbn07XG5cbm1vZHVsZS5leHBvcnRzID0gYnVpbGRSZWN0YW5nbGU7IiwidmFyIGJ1aWxkTGluZSA9IHJlcXVpcmUoJy4vYnVpbGRMaW5lJyksXG4gICAgdXRpbHMgPSByZXF1aXJlKCcuLi8uLi8uLi91dGlscycpO1xuICAgIFxuLyoqXG4gKiBCdWlsZHMgYSByb3VuZGVkIHJlY3RhbmdsZSB0byBkcmF3XG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSBncmFwaGljc0RhdGEge1BJWEkuR3JhcGhpY3N9IFRoZSBncmFwaGljcyBvYmplY3QgY29udGFpbmluZyBhbGwgdGhlIG5lY2Vzc2FyeSBwcm9wZXJ0aWVzXG4gKiBAcGFyYW0gd2ViR0xEYXRhIHtvYmplY3R9IGFuIG9iamVjdCBjb250YWluaW5nIGFsbCB0aGUgd2ViR0wtc3BlY2lmaWMgaW5mb3JtYXRpb24gdG8gY3JlYXRlIHRoaXMgc2hhcGVcbiAqL1xuYnVpbGRSb3VuZGVkUmVjdGFuZ2xlID0gZnVuY3Rpb24gKGdyYXBoaWNzRGF0YSwgd2ViR0xEYXRhKVxue1xuICAgIHZhciBycmVjdERhdGEgPSBncmFwaGljc0RhdGEuc2hhcGU7XG4gICAgdmFyIHggPSBycmVjdERhdGEueDtcbiAgICB2YXIgeSA9IHJyZWN0RGF0YS55O1xuICAgIHZhciB3aWR0aCA9IHJyZWN0RGF0YS53aWR0aDtcbiAgICB2YXIgaGVpZ2h0ID0gcnJlY3REYXRhLmhlaWdodDtcblxuICAgIHZhciByYWRpdXMgPSBycmVjdERhdGEucmFkaXVzO1xuXG4gICAgdmFyIHJlY1BvaW50cyA9IFtdO1xuICAgIHJlY1BvaW50cy5wdXNoKHgsIHkgKyByYWRpdXMpO1xuICAgIHRoaXMucXVhZHJhdGljQmV6aWVyQ3VydmUoeCwgeSArIGhlaWdodCAtIHJhZGl1cywgeCwgeSArIGhlaWdodCwgeCArIHJhZGl1cywgeSArIGhlaWdodCwgcmVjUG9pbnRzKTtcbiAgICB0aGlzLnF1YWRyYXRpY0JlemllckN1cnZlKHggKyB3aWR0aCAtIHJhZGl1cywgeSArIGhlaWdodCwgeCArIHdpZHRoLCB5ICsgaGVpZ2h0LCB4ICsgd2lkdGgsIHkgKyBoZWlnaHQgLSByYWRpdXMsIHJlY1BvaW50cyk7XG4gICAgdGhpcy5xdWFkcmF0aWNCZXppZXJDdXJ2ZSh4ICsgd2lkdGgsIHkgKyByYWRpdXMsIHggKyB3aWR0aCwgeSwgeCArIHdpZHRoIC0gcmFkaXVzLCB5LCByZWNQb2ludHMpO1xuICAgIHRoaXMucXVhZHJhdGljQmV6aWVyQ3VydmUoeCArIHJhZGl1cywgeSwgeCwgeSwgeCwgeSArIHJhZGl1cyArIDAuMDAwMDAwMDAwMSwgcmVjUG9pbnRzKTtcblxuICAgIC8vIHRoaXMgdGlueSBudW1iZXIgZGVhbHMgd2l0aCB0aGUgaXNzdWUgdGhhdCBvY2N1cnMgd2hlbiBwb2ludHMgb3ZlcmxhcCBhbmQgZWFyY3V0IGZhaWxzIHRvIHRyaWFuZ3VsYXRlIHRoZSBpdGVtLlxuICAgIC8vIFRPRE8gLSBmaXggdGhpcyBwcm9wZXJseSwgdGhpcyBpcyBub3QgdmVyeSBlbGVnYW50Li4gYnV0IGl0IHdvcmtzIGZvciBub3cuXG5cbiAgICBpZiAoZ3JhcGhpY3NEYXRhLmZpbGwpXG4gICAge1xuICAgICAgICB2YXIgY29sb3IgPSB1dGlscy5oZXgycmdiKGdyYXBoaWNzRGF0YS5maWxsQ29sb3IpO1xuICAgICAgICB2YXIgYWxwaGEgPSBncmFwaGljc0RhdGEuZmlsbEFscGhhO1xuXG4gICAgICAgIHZhciByID0gY29sb3JbMF0gKiBhbHBoYTtcbiAgICAgICAgdmFyIGcgPSBjb2xvclsxXSAqIGFscGhhO1xuICAgICAgICB2YXIgYiA9IGNvbG9yWzJdICogYWxwaGE7XG5cbiAgICAgICAgdmFyIHZlcnRzID0gd2ViR0xEYXRhLnBvaW50cztcbiAgICAgICAgdmFyIGluZGljZXMgPSB3ZWJHTERhdGEuaW5kaWNlcztcblxuICAgICAgICB2YXIgdmVjUG9zID0gdmVydHMubGVuZ3RoLzY7XG5cbiAgICAgICAgdmFyIHRyaWFuZ2xlcyA9IGVhcmN1dChyZWNQb2ludHMsIG51bGwsIDIpO1xuXG4gICAgICAgIHZhciBpID0gMDtcbiAgICAgICAgZm9yIChpID0gMDsgaSA8IHRyaWFuZ2xlcy5sZW5ndGg7IGkrPTMpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGluZGljZXMucHVzaCh0cmlhbmdsZXNbaV0gKyB2ZWNQb3MpO1xuICAgICAgICAgICAgaW5kaWNlcy5wdXNoKHRyaWFuZ2xlc1tpXSArIHZlY1Bvcyk7XG4gICAgICAgICAgICBpbmRpY2VzLnB1c2godHJpYW5nbGVzW2krMV0gKyB2ZWNQb3MpO1xuICAgICAgICAgICAgaW5kaWNlcy5wdXNoKHRyaWFuZ2xlc1tpKzJdICsgdmVjUG9zKTtcbiAgICAgICAgICAgIGluZGljZXMucHVzaCh0cmlhbmdsZXNbaSsyXSArIHZlY1Bvcyk7XG4gICAgICAgIH1cblxuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgcmVjUG9pbnRzLmxlbmd0aDsgaSsrKVxuICAgICAgICB7XG4gICAgICAgICAgICB2ZXJ0cy5wdXNoKHJlY1BvaW50c1tpXSwgcmVjUG9pbnRzWysraV0sIHIsIGcsIGIsIGFscGhhKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGlmIChncmFwaGljc0RhdGEubGluZVdpZHRoKVxuICAgIHtcbiAgICAgICAgdmFyIHRlbXBQb2ludHMgPSBncmFwaGljc0RhdGEucG9pbnRzO1xuXG4gICAgICAgIGdyYXBoaWNzRGF0YS5wb2ludHMgPSByZWNQb2ludHM7XG5cbiAgICAgICAgdGhpcy5idWlsZExpbmUoZ3JhcGhpY3NEYXRhLCB3ZWJHTERhdGEpO1xuXG4gICAgICAgIGdyYXBoaWNzRGF0YS5wb2ludHMgPSB0ZW1wUG9pbnRzO1xuICAgIH1cbn07XG5cbi8qKlxuICogQ2FsY3VsYXRlIHRoZSBwb2ludHMgZm9yIGEgcXVhZHJhdGljIGJlemllciBjdXJ2ZS4gKGhlbHBlciBmdW5jdGlvbi4uKVxuICogQmFzZWQgb246IGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vcXVlc3Rpb25zLzc4NTA5Ny9ob3ctZG8taS1pbXBsZW1lbnQtYS1iZXppZXItY3VydmUtaW4tY1xuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0gZnJvbVgge251bWJlcn0gT3JpZ2luIHBvaW50IHhcbiAqIEBwYXJhbSBmcm9tWSB7bnVtYmVyfSBPcmlnaW4gcG9pbnQgeFxuICogQHBhcmFtIGNwWCB7bnVtYmVyfSBDb250cm9sIHBvaW50IHhcbiAqIEBwYXJhbSBjcFkge251bWJlcn0gQ29udHJvbCBwb2ludCB5XG4gKiBAcGFyYW0gdG9YIHtudW1iZXJ9IERlc3RpbmF0aW9uIHBvaW50IHhcbiAqIEBwYXJhbSB0b1kge251bWJlcn0gRGVzdGluYXRpb24gcG9pbnQgeVxuICogQHBhcmFtIFtvdXRdIHtudW1iZXJbXX0gVGhlIG91dHB1dCBhcnJheSB0byBhZGQgcG9pbnRzIGludG8uIElmIG5vdCBwYXNzZWQsIGEgbmV3IGFycmF5IGlzIGNyZWF0ZWQuXG4gKiBAcmV0dXJuIHtudW1iZXJbXX0gYW4gYXJyYXkgb2YgcG9pbnRzXG4gKi9cbnF1YWRyYXRpY0JlemllckN1cnZlID0gZnVuY3Rpb24gKGZyb21YLCBmcm9tWSwgY3BYLCBjcFksIHRvWCwgdG9ZLCBvdXQpXG57XG4gICAgdmFyIHhhLFxuICAgICAgICB5YSxcbiAgICAgICAgeGIsXG4gICAgICAgIHliLFxuICAgICAgICB4LFxuICAgICAgICB5LFxuICAgICAgICBuID0gMjAsXG4gICAgICAgIHBvaW50cyA9IG91dCB8fCBbXTtcblxuICAgIGZ1bmN0aW9uIGdldFB0KG4xICwgbjIsIHBlcmMpIHtcbiAgICAgICAgdmFyIGRpZmYgPSBuMiAtIG4xO1xuXG4gICAgICAgIHJldHVybiBuMSArICggZGlmZiAqIHBlcmMgKTtcbiAgICB9XG5cbiAgICB2YXIgaiA9IDA7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPD0gbjsgaSsrICkge1xuICAgICAgICBqID0gaSAvIG47XG5cbiAgICAgICAgLy8gVGhlIEdyZWVuIExpbmVcbiAgICAgICAgeGEgPSBnZXRQdCggZnJvbVggLCBjcFggLCBqICk7XG4gICAgICAgIHlhID0gZ2V0UHQoIGZyb21ZICwgY3BZICwgaiApO1xuICAgICAgICB4YiA9IGdldFB0KCBjcFggLCB0b1ggLCBqICk7XG4gICAgICAgIHliID0gZ2V0UHQoIGNwWSAsIHRvWSAsIGogKTtcblxuICAgICAgICAvLyBUaGUgQmxhY2sgRG90XG4gICAgICAgIHggPSBnZXRQdCggeGEgLCB4YiAsIGogKTtcbiAgICAgICAgeSA9IGdldFB0KCB5YSAsIHliICwgaiApO1xuXG4gICAgICAgIHBvaW50cy5wdXNoKHgsIHkpO1xuICAgIH1cblxuICAgIHJldHVybiBwb2ludHM7XG59O1xuXG5cbm1vZHVsZS5leHBvcnRzID0gYnVpbGRSb3VuZGVkUmVjdGFuZ2xlOyIsIi8qKlxuICogQGZpbGUgICAgICAgIE1haW4gZXhwb3J0IG9mIHRoZSBQSVhJIGNvcmUgbGlicmFyeVxuICogQGF1dGhvciAgICAgIE1hdCBHcm92ZXMgPG1hdEBnb29kYm95ZGlnaXRhbC5jb20+XG4gKiBAY29weXJpZ2h0ICAgMjAxMy0yMDE1IEdvb2RCb3lEaWdpdGFsXG4gKiBAbGljZW5zZSAgICAge0BsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9waXhpanMvcGl4aS5qcy9ibG9iL21hc3Rlci9MSUNFTlNFfE1JVCBMaWNlbnNlfVxuICovXG5cbi8qKlxuICogQG5hbWVzcGFjZSBQSVhJXG4gKi9cbi8vIGV4cG9ydCBjb3JlIGFuZCBjb25zdC4gV2UgYXNzaWduIGNvcmUgdG8gY29uc3Qgc28gdGhhdCB0aGUgbm9uLXJlZmVyZW5jZSB0eXBlcyBpbiBjb25zdCByZW1haW4gaW4tdGFjdFxudmFyIGNvcmUgPSBtb2R1bGUuZXhwb3J0cyA9IE9iamVjdC5hc3NpZ24ocmVxdWlyZSgnLi9jb25zdCcpLCByZXF1aXJlKCcuL21hdGgnKSwge1xuICAgIC8vIHV0aWxzXG4gICAgdXRpbHM6IHJlcXVpcmUoJy4vdXRpbHMnKSxcbiAgICB0aWNrZXI6IHJlcXVpcmUoJy4vdGlja2VyJyksXG5cbiAgICAvLyBkaXNwbGF5XG4gICAgRGlzcGxheU9iamVjdDogICAgICAgICAgcmVxdWlyZSgnLi9kaXNwbGF5L0Rpc3BsYXlPYmplY3QnKSxcbiAgICBDb250YWluZXI6ICAgICAgICAgICAgICByZXF1aXJlKCcuL2Rpc3BsYXkvQ29udGFpbmVyJyksXG5cbiAgICAvLyBzcHJpdGVzXG4gICAgU3ByaXRlOiAgICAgICAgICAgICAgICAgcmVxdWlyZSgnLi9zcHJpdGVzL1Nwcml0ZScpLFxuICAgIFBhcnRpY2xlQ29udGFpbmVyOiAgICAgIHJlcXVpcmUoJy4vcGFydGljbGVzL1BhcnRpY2xlQ29udGFpbmVyJyksXG4gICAgU3ByaXRlUmVuZGVyZXI6ICAgICAgICAgcmVxdWlyZSgnLi9zcHJpdGVzL3dlYmdsL1Nwcml0ZVJlbmRlcmVyJyksXG4gICAgUGFydGljbGVSZW5kZXJlcjogICAgICAgcmVxdWlyZSgnLi9wYXJ0aWNsZXMvd2ViZ2wvUGFydGljbGVSZW5kZXJlcicpLFxuXG4gICAgLy8gdGV4dFxuICAgIFRleHQ6ICAgICAgICAgICAgICAgICAgIHJlcXVpcmUoJy4vdGV4dC9UZXh0JyksXG5cbiAgICAvLyBwcmltaXRpdmVzXG4gICAgR3JhcGhpY3M6ICAgICAgICAgICAgICAgcmVxdWlyZSgnLi9ncmFwaGljcy9HcmFwaGljcycpLFxuICAgIEdyYXBoaWNzRGF0YTogICAgICAgICAgIHJlcXVpcmUoJy4vZ3JhcGhpY3MvR3JhcGhpY3NEYXRhJyksXG4gICAgR3JhcGhpY3NSZW5kZXJlcjogICAgICAgcmVxdWlyZSgnLi9ncmFwaGljcy93ZWJnbC9HcmFwaGljc1JlbmRlcmVyJyksXG5cbiAgICAvLyB0ZXh0dXJlc1xuICAgIFRleHR1cmU6ICAgICAgICAgICAgICAgIHJlcXVpcmUoJy4vdGV4dHVyZXMvVGV4dHVyZScpLFxuICAgIEJhc2VUZXh0dXJlOiAgICAgICAgICAgIHJlcXVpcmUoJy4vdGV4dHVyZXMvQmFzZVRleHR1cmUnKSxcbiAgICBSZW5kZXJUZXh0dXJlOiAgICAgICAgICByZXF1aXJlKCcuL3RleHR1cmVzL1JlbmRlclRleHR1cmUnKSxcbiAgICBWaWRlb0Jhc2VUZXh0dXJlOiAgICAgICByZXF1aXJlKCcuL3RleHR1cmVzL1ZpZGVvQmFzZVRleHR1cmUnKSxcbiAgICBUZXh0dXJlVXZzOiAgICAgICAgICAgICByZXF1aXJlKCcuL3RleHR1cmVzL1RleHR1cmVVdnMnKSxcblxuICAgIC8vIHJlbmRlcmVycyAtIGNhbnZhc1xuICAgIENhbnZhc1JlbmRlcmVyOiAgICAgICAgIHJlcXVpcmUoJy4vcmVuZGVyZXJzL2NhbnZhcy9DYW52YXNSZW5kZXJlcicpLFxuICAgIENhbnZhc0dyYXBoaWNzOiAgICAgICAgIHJlcXVpcmUoJy4vcmVuZGVyZXJzL2NhbnZhcy91dGlscy9DYW52YXNHcmFwaGljcycpLFxuICAgIENhbnZhc0J1ZmZlcjogICAgICAgICAgIHJlcXVpcmUoJy4vcmVuZGVyZXJzL2NhbnZhcy91dGlscy9DYW52YXNCdWZmZXInKSxcblxuICAgIC8vIHJlbmRlcmVycyAtIHdlYmdsXG4gICAgV2ViR0xSZW5kZXJlcjogICAgICAgICAgcmVxdWlyZSgnLi9yZW5kZXJlcnMvd2ViZ2wvV2ViR0xSZW5kZXJlcicpLFxuICAgIFdlYkdMTWFuYWdlcjogICAgICAgICAgcmVxdWlyZSgnLi9yZW5kZXJlcnMvd2ViZ2wvbWFuYWdlcnMvV2ViR0xNYW5hZ2VyJyksXG4gICAgU2hhZGVyTWFuYWdlcjogICAgICAgICAgcmVxdWlyZSgnLi9yZW5kZXJlcnMvd2ViZ2wvbWFuYWdlcnMvU2hhZGVyTWFuYWdlcicpLFxuICAgIFNoYWRlcjogICAgICAgICAgICAgICAgIHJlcXVpcmUoJy4vcmVuZGVyZXJzL3dlYmdsL3NoYWRlcnMvU2hhZGVyJyksXG4gICAgT2JqZWN0UmVuZGVyZXI6ICAgICAgICAgcmVxdWlyZSgnLi9yZW5kZXJlcnMvd2ViZ2wvdXRpbHMvT2JqZWN0UmVuZGVyZXInKSxcbiAgICBSZW5kZXJUYXJnZXQ6ICAgICAgICAgICByZXF1aXJlKCcuL3JlbmRlcmVycy93ZWJnbC91dGlscy9SZW5kZXJUYXJnZXQnKSxcblxuICAgIC8vIGZpbHRlcnMgLSB3ZWJnbFxuICAgIEFic3RyYWN0RmlsdGVyOiAgICAgICAgIHJlcXVpcmUoJy4vcmVuZGVyZXJzL3dlYmdsL2ZpbHRlcnMvQWJzdHJhY3RGaWx0ZXInKSxcbiAgICBGWEFBRmlsdGVyOiAgICAgICAgICAgICByZXF1aXJlKCcuL3JlbmRlcmVycy93ZWJnbC9maWx0ZXJzL0ZYQUFGaWx0ZXInKSxcbiAgICBTcHJpdGVNYXNrRmlsdGVyOiAgICAgICByZXF1aXJlKCcuL3JlbmRlcmVycy93ZWJnbC9maWx0ZXJzL1Nwcml0ZU1hc2tGaWx0ZXInKSxcblxuICAgIGdsQ29yZTogICAgICAgICAgICAgICAgICAgcmVxdWlyZSgncGl4aS1nbC1jb3JlJyksXG5cbiAgICAvKipcbiAgICAgKiBUaGlzIGhlbHBlciBmdW5jdGlvbiB3aWxsIGF1dG9tYXRpY2FsbHkgZGV0ZWN0IHdoaWNoIHJlbmRlcmVyIHlvdSBzaG91bGQgYmUgdXNpbmcuXG4gICAgICogV2ViR0wgaXMgdGhlIHByZWZlcnJlZCByZW5kZXJlciBhcyBpdCBpcyBhIGxvdCBmYXN0ZXIuIElmIHdlYkdMIGlzIG5vdCBzdXBwb3J0ZWQgYnlcbiAgICAgKiB0aGUgYnJvd3NlciB0aGVuIHRoaXMgZnVuY3Rpb24gd2lsbCByZXR1cm4gYSBjYW52YXMgcmVuZGVyZXJcbiAgICAgKlxuICAgICAqIEBtZW1iZXJvZiBQSVhJXG4gICAgICogQHBhcmFtIHdpZHRoPTgwMCB7bnVtYmVyfSB0aGUgd2lkdGggb2YgdGhlIHJlbmRlcmVycyB2aWV3XG4gICAgICogQHBhcmFtIGhlaWdodD02MDAge251bWJlcn0gdGhlIGhlaWdodCBvZiB0aGUgcmVuZGVyZXJzIHZpZXdcbiAgICAgKiBAcGFyYW0gW29wdGlvbnNdIHtvYmplY3R9IFRoZSBvcHRpb25hbCByZW5kZXJlciBwYXJhbWV0ZXJzXG4gICAgICogQHBhcmFtIFtvcHRpb25zLnZpZXddIHtIVE1MQ2FudmFzRWxlbWVudH0gdGhlIGNhbnZhcyB0byB1c2UgYXMgYSB2aWV3LCBvcHRpb25hbFxuICAgICAqIEBwYXJhbSBbb3B0aW9ucy50cmFuc3BhcmVudD1mYWxzZV0ge2Jvb2xlYW59IElmIHRoZSByZW5kZXIgdmlldyBpcyB0cmFuc3BhcmVudCwgZGVmYXVsdCBmYWxzZVxuICAgICAqIEBwYXJhbSBbb3B0aW9ucy5hbnRpYWxpYXM9ZmFsc2VdIHtib29sZWFufSBzZXRzIGFudGlhbGlhcyAob25seSBhcHBsaWNhYmxlIGluIGNocm9tZSBhdCB0aGUgbW9tZW50KVxuICAgICAqIEBwYXJhbSBbb3B0aW9ucy5wcmVzZXJ2ZURyYXdpbmdCdWZmZXI9ZmFsc2VdIHtib29sZWFufSBlbmFibGVzIGRyYXdpbmcgYnVmZmVyIHByZXNlcnZhdGlvbiwgZW5hYmxlIHRoaXMgaWYgeW91XG4gICAgICogICAgICBuZWVkIHRvIGNhbGwgdG9EYXRhVXJsIG9uIHRoZSB3ZWJnbCBjb250ZXh0XG4gICAgICogQHBhcmFtIFtvcHRpb25zLnJlc29sdXRpb249MV0ge251bWJlcn0gdGhlIHJlc29sdXRpb24gb2YgdGhlIHJlbmRlcmVyLCByZXRpbmEgd291bGQgYmUgMlxuICAgICAqIEBwYXJhbSBbbm9XZWJHTD1mYWxzZV0ge2Jvb2xlYW59IHByZXZlbnRzIHNlbGVjdGlvbiBvZiBXZWJHTCByZW5kZXJlciwgZXZlbiBpZiBzdWNoIGlzIHByZXNlbnRcbiAgICAgKlxuICAgICAqIEByZXR1cm4ge1dlYkdMUmVuZGVyZXJ8Q2FudmFzUmVuZGVyZXJ9IFJldHVybnMgV2ViR0wgcmVuZGVyZXIgaWYgYXZhaWxhYmxlLCBvdGhlcndpc2UgQ2FudmFzUmVuZGVyZXJcbiAgICAgKi9cbiAgICBhdXRvRGV0ZWN0UmVuZGVyZXI6IGZ1bmN0aW9uICh3aWR0aCwgaGVpZ2h0LCBvcHRpb25zLCBub1dlYkdMKVxuICAgIHtcbiAgICAgICAgd2lkdGggPSB3aWR0aCB8fCA4MDA7XG4gICAgICAgIGhlaWdodCA9IGhlaWdodCB8fCA2MDA7XG5cbiAgICAgICAgaWYgKCFub1dlYkdMICYmIGNvcmUudXRpbHMuaXNXZWJHTFN1cHBvcnRlZCgpKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IGNvcmUuV2ViR0xSZW5kZXJlcih3aWR0aCwgaGVpZ2h0LCBvcHRpb25zKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBuZXcgY29yZS5DYW52YXNSZW5kZXJlcih3aWR0aCwgaGVpZ2h0LCBvcHRpb25zKTtcbiAgICB9XG59KTtcbiIsIi8vIEB0b2RvIC0gaWdub3JlIHRoZSB0b28gbWFueSBwYXJhbWV0ZXJzIHdhcm5pbmcgZm9yIG5vd1xuLy8gc2hvdWxkIGVpdGhlciBmaXggaXQgb3IgY2hhbmdlIHRoZSBqc2hpbnQgY29uZmlnXG4vLyBqc2hpbnQgLVcwNzJcblxudmFyIFBvaW50ID0gcmVxdWlyZSgnLi9Qb2ludCcpO1xuXG4vKipcbiAqIFRoZSBwaXhpIE1hdHJpeCBjbGFzcyBhcyBhbiBvYmplY3QsIHdoaWNoIG1ha2VzIGl0IGEgbG90IGZhc3RlcixcbiAqIGhlcmUgaXMgYSByZXByZXNlbnRhdGlvbiBvZiBpdCA6XG4gKiB8IGEgfCBiIHwgdHh8XG4gKiB8IGMgfCBkIHwgdHl8XG4gKiB8IDAgfCAwIHwgMSB8XG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICovXG5mdW5jdGlvbiBNYXRyaXgoKVxue1xuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAxXG4gICAgICovXG4gICAgdGhpcy5hID0gMTtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAwXG4gICAgICovXG4gICAgdGhpcy5iID0gMDtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAwXG4gICAgICovXG4gICAgdGhpcy5jID0gMDtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAxXG4gICAgICovXG4gICAgdGhpcy5kID0gMTtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAwXG4gICAgICovXG4gICAgdGhpcy50eCA9IDA7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMFxuICAgICAqL1xuICAgIHRoaXMudHkgPSAwO1xufVxuXG5NYXRyaXgucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gTWF0cml4O1xubW9kdWxlLmV4cG9ydHMgPSBNYXRyaXg7XG5cbi8qKlxuICogQ3JlYXRlcyBhIE1hdHJpeCBvYmplY3QgYmFzZWQgb24gdGhlIGdpdmVuIGFycmF5LiBUaGUgRWxlbWVudCB0byBNYXRyaXggbWFwcGluZyBvcmRlciBpcyBhcyBmb2xsb3dzOlxuICpcbiAqIGEgPSBhcnJheVswXVxuICogYiA9IGFycmF5WzFdXG4gKiBjID0gYXJyYXlbM11cbiAqIGQgPSBhcnJheVs0XVxuICogdHggPSBhcnJheVsyXVxuICogdHkgPSBhcnJheVs1XVxuICpcbiAqIEBwYXJhbSBhcnJheSB7bnVtYmVyW119IFRoZSBhcnJheSB0aGF0IHRoZSBtYXRyaXggd2lsbCBiZSBwb3B1bGF0ZWQgZnJvbS5cbiAqL1xuTWF0cml4LnByb3RvdHlwZS5mcm9tQXJyYXkgPSBmdW5jdGlvbiAoYXJyYXkpXG57XG4gICAgdGhpcy5hID0gYXJyYXlbMF07XG4gICAgdGhpcy5iID0gYXJyYXlbMV07XG4gICAgdGhpcy5jID0gYXJyYXlbM107XG4gICAgdGhpcy5kID0gYXJyYXlbNF07XG4gICAgdGhpcy50eCA9IGFycmF5WzJdO1xuICAgIHRoaXMudHkgPSBhcnJheVs1XTtcbn07XG5cblxuLyoqXG4gKiBzZXRzIHRoZSBtYXRyaXggcHJvcGVydGllc1xuICpcbiAqIEBwYXJhbSB7bnVtYmVyfSBhXG4gKiBAcGFyYW0ge251bWJlcn0gYlxuICogQHBhcmFtIHtudW1iZXJ9IGNcbiAqIEBwYXJhbSB7bnVtYmVyfSBkXG4gKiBAcGFyYW0ge251bWJlcn0gdHhcbiAqIEBwYXJhbSB7bnVtYmVyfSB0eVxuICpcbiAqIEByZXR1cm4ge1BJWEkuTWF0cml4fSBUaGlzIG1hdHJpeC4gR29vZCBmb3IgY2hhaW5pbmcgbWV0aG9kIGNhbGxzLlxuICovXG5NYXRyaXgucHJvdG90eXBlLnNldCA9IGZ1bmN0aW9uIChhLCBiLCBjLCBkLCB0eCwgdHkpXG57XG4gICAgdGhpcy5hID0gYTtcbiAgICB0aGlzLmIgPSBiO1xuICAgIHRoaXMuYyA9IGM7XG4gICAgdGhpcy5kID0gZDtcbiAgICB0aGlzLnR4ID0gdHg7XG4gICAgdGhpcy50eSA9IHR5O1xuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG5cbi8qKlxuICogQ3JlYXRlcyBhbiBhcnJheSBmcm9tIHRoZSBjdXJyZW50IE1hdHJpeCBvYmplY3QuXG4gKlxuICogQHBhcmFtIHRyYW5zcG9zZSB7Ym9vbGVhbn0gV2hldGhlciB3ZSBuZWVkIHRvIHRyYW5zcG9zZSB0aGUgbWF0cml4IG9yIG5vdFxuICogQHBhcmFtIFtvdXRdIHtBcnJheX0gSWYgcHJvdmlkZWQgdGhlIGFycmF5IHdpbGwgYmUgYXNzaWduZWQgdG8gb3V0XG4gKiBAcmV0dXJuIHtudW1iZXJbXX0gdGhlIG5ld2x5IGNyZWF0ZWQgYXJyYXkgd2hpY2ggY29udGFpbnMgdGhlIG1hdHJpeFxuICovXG5NYXRyaXgucHJvdG90eXBlLnRvQXJyYXkgPSBmdW5jdGlvbiAodHJhbnNwb3NlLCBvdXQpXG57XG4gICAgaWYgKCF0aGlzLmFycmF5KVxuICAgIHtcbiAgICAgICAgdGhpcy5hcnJheSA9IG5ldyBGbG9hdDMyQXJyYXkoOSk7XG4gICAgfVxuXG4gICAgdmFyIGFycmF5ID0gb3V0IHx8IHRoaXMuYXJyYXk7XG5cbiAgICBpZiAodHJhbnNwb3NlKVxuICAgIHtcbiAgICAgICAgYXJyYXlbMF0gPSB0aGlzLmE7XG4gICAgICAgIGFycmF5WzFdID0gdGhpcy5iO1xuICAgICAgICBhcnJheVsyXSA9IDA7XG4gICAgICAgIGFycmF5WzNdID0gdGhpcy5jO1xuICAgICAgICBhcnJheVs0XSA9IHRoaXMuZDtcbiAgICAgICAgYXJyYXlbNV0gPSAwO1xuICAgICAgICBhcnJheVs2XSA9IHRoaXMudHg7XG4gICAgICAgIGFycmF5WzddID0gdGhpcy50eTtcbiAgICAgICAgYXJyYXlbOF0gPSAxO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICBhcnJheVswXSA9IHRoaXMuYTtcbiAgICAgICAgYXJyYXlbMV0gPSB0aGlzLmM7XG4gICAgICAgIGFycmF5WzJdID0gdGhpcy50eDtcbiAgICAgICAgYXJyYXlbM10gPSB0aGlzLmI7XG4gICAgICAgIGFycmF5WzRdID0gdGhpcy5kO1xuICAgICAgICBhcnJheVs1XSA9IHRoaXMudHk7XG4gICAgICAgIGFycmF5WzZdID0gMDtcbiAgICAgICAgYXJyYXlbN10gPSAwO1xuICAgICAgICBhcnJheVs4XSA9IDE7XG4gICAgfVxuXG4gICAgcmV0dXJuIGFycmF5O1xufTtcblxuLyoqXG4gKiBHZXQgYSBuZXcgcG9zaXRpb24gd2l0aCB0aGUgY3VycmVudCB0cmFuc2Zvcm1hdGlvbiBhcHBsaWVkLlxuICogQ2FuIGJlIHVzZWQgdG8gZ28gZnJvbSBhIGNoaWxkJ3MgY29vcmRpbmF0ZSBzcGFjZSB0byB0aGUgd29ybGQgY29vcmRpbmF0ZSBzcGFjZS4gKGUuZy4gcmVuZGVyaW5nKVxuICpcbiAqIEBwYXJhbSBwb3Mge1BJWEkuUG9pbnR9IFRoZSBvcmlnaW5cbiAqIEBwYXJhbSBbbmV3UG9zXSB7UElYSS5Qb2ludH0gVGhlIHBvaW50IHRoYXQgdGhlIG5ldyBwb3NpdGlvbiBpcyBhc3NpZ25lZCB0byAoYWxsb3dlZCB0byBiZSBzYW1lIGFzIGlucHV0KVxuICogQHJldHVybiB7UElYSS5Qb2ludH0gVGhlIG5ldyBwb2ludCwgdHJhbnNmb3JtZWQgdGhyb3VnaCB0aGlzIG1hdHJpeFxuICovXG5NYXRyaXgucHJvdG90eXBlLmFwcGx5ID0gZnVuY3Rpb24gKHBvcywgbmV3UG9zKVxue1xuICAgIG5ld1BvcyA9IG5ld1BvcyB8fCBuZXcgUG9pbnQoKTtcblxuICAgIHZhciB4ID0gcG9zLng7XG4gICAgdmFyIHkgPSBwb3MueTtcblxuICAgIG5ld1Bvcy54ID0gdGhpcy5hICogeCArIHRoaXMuYyAqIHkgKyB0aGlzLnR4O1xuICAgIG5ld1Bvcy55ID0gdGhpcy5iICogeCArIHRoaXMuZCAqIHkgKyB0aGlzLnR5O1xuXG4gICAgcmV0dXJuIG5ld1Bvcztcbn07XG5cbi8qKlxuICogR2V0IGEgbmV3IHBvc2l0aW9uIHdpdGggdGhlIGludmVyc2Ugb2YgdGhlIGN1cnJlbnQgdHJhbnNmb3JtYXRpb24gYXBwbGllZC5cbiAqIENhbiBiZSB1c2VkIHRvIGdvIGZyb20gdGhlIHdvcmxkIGNvb3JkaW5hdGUgc3BhY2UgdG8gYSBjaGlsZCdzIGNvb3JkaW5hdGUgc3BhY2UuIChlLmcuIGlucHV0KVxuICpcbiAqIEBwYXJhbSBwb3Mge1BJWEkuUG9pbnR9IFRoZSBvcmlnaW5cbiAqIEBwYXJhbSBbbmV3UG9zXSB7UElYSS5Qb2ludH0gVGhlIHBvaW50IHRoYXQgdGhlIG5ldyBwb3NpdGlvbiBpcyBhc3NpZ25lZCB0byAoYWxsb3dlZCB0byBiZSBzYW1lIGFzIGlucHV0KVxuICogQHJldHVybiB7UElYSS5Qb2ludH0gVGhlIG5ldyBwb2ludCwgaW52ZXJzZS10cmFuc2Zvcm1lZCB0aHJvdWdoIHRoaXMgbWF0cml4XG4gKi9cbk1hdHJpeC5wcm90b3R5cGUuYXBwbHlJbnZlcnNlID0gZnVuY3Rpb24gKHBvcywgbmV3UG9zKVxue1xuICAgIG5ld1BvcyA9IG5ld1BvcyB8fCBuZXcgUG9pbnQoKTtcblxuICAgIHZhciBpZCA9IDEgLyAodGhpcy5hICogdGhpcy5kICsgdGhpcy5jICogLXRoaXMuYik7XG5cbiAgICB2YXIgeCA9IHBvcy54O1xuICAgIHZhciB5ID0gcG9zLnk7XG5cbiAgICBuZXdQb3MueCA9IHRoaXMuZCAqIGlkICogeCArIC10aGlzLmMgKiBpZCAqIHkgKyAodGhpcy50eSAqIHRoaXMuYyAtIHRoaXMudHggKiB0aGlzLmQpICogaWQ7XG4gICAgbmV3UG9zLnkgPSB0aGlzLmEgKiBpZCAqIHkgKyAtdGhpcy5iICogaWQgKiB4ICsgKC10aGlzLnR5ICogdGhpcy5hICsgdGhpcy50eCAqIHRoaXMuYikgKiBpZDtcblxuICAgIHJldHVybiBuZXdQb3M7XG59O1xuXG4vKipcbiAqIFRyYW5zbGF0ZXMgdGhlIG1hdHJpeCBvbiB0aGUgeCBhbmQgeS5cbiAqXG4gKiBAcGFyYW0ge251bWJlcn0geFxuICogQHBhcmFtIHtudW1iZXJ9IHlcbiAqIEByZXR1cm4ge1BJWEkuTWF0cml4fSBUaGlzIG1hdHJpeC4gR29vZCBmb3IgY2hhaW5pbmcgbWV0aG9kIGNhbGxzLlxuICovXG5NYXRyaXgucHJvdG90eXBlLnRyYW5zbGF0ZSA9IGZ1bmN0aW9uICh4LCB5KVxue1xuICAgIHRoaXMudHggKz0geDtcbiAgICB0aGlzLnR5ICs9IHk7XG5cbiAgICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogQXBwbGllcyBhIHNjYWxlIHRyYW5zZm9ybWF0aW9uIHRvIHRoZSBtYXRyaXguXG4gKlxuICogQHBhcmFtIHtudW1iZXJ9IHggVGhlIGFtb3VudCB0byBzY2FsZSBob3Jpem9udGFsbHlcbiAqIEBwYXJhbSB7bnVtYmVyfSB5IFRoZSBhbW91bnQgdG8gc2NhbGUgdmVydGljYWxseVxuICogQHJldHVybiB7UElYSS5NYXRyaXh9IFRoaXMgbWF0cml4LiBHb29kIGZvciBjaGFpbmluZyBtZXRob2QgY2FsbHMuXG4gKi9cbk1hdHJpeC5wcm90b3R5cGUuc2NhbGUgPSBmdW5jdGlvbiAoeCwgeSlcbntcbiAgICB0aGlzLmEgKj0geDtcbiAgICB0aGlzLmQgKj0geTtcbiAgICB0aGlzLmMgKj0geDtcbiAgICB0aGlzLmIgKj0geTtcbiAgICB0aGlzLnR4ICo9IHg7XG4gICAgdGhpcy50eSAqPSB5O1xuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG5cbi8qKlxuICogQXBwbGllcyBhIHJvdGF0aW9uIHRyYW5zZm9ybWF0aW9uIHRvIHRoZSBtYXRyaXguXG4gKlxuICogQHBhcmFtIHtudW1iZXJ9IGFuZ2xlIC0gVGhlIGFuZ2xlIGluIHJhZGlhbnMuXG4gKiBAcmV0dXJuIHtQSVhJLk1hdHJpeH0gVGhpcyBtYXRyaXguIEdvb2QgZm9yIGNoYWluaW5nIG1ldGhvZCBjYWxscy5cbiAqL1xuTWF0cml4LnByb3RvdHlwZS5yb3RhdGUgPSBmdW5jdGlvbiAoYW5nbGUpXG57XG4gICAgdmFyIGNvcyA9IE1hdGguY29zKCBhbmdsZSApO1xuICAgIHZhciBzaW4gPSBNYXRoLnNpbiggYW5nbGUgKTtcblxuICAgIHZhciBhMSA9IHRoaXMuYTtcbiAgICB2YXIgYzEgPSB0aGlzLmM7XG4gICAgdmFyIHR4MSA9IHRoaXMudHg7XG5cbiAgICB0aGlzLmEgPSBhMSAqIGNvcy10aGlzLmIgKiBzaW47XG4gICAgdGhpcy5iID0gYTEgKiBzaW4rdGhpcy5iICogY29zO1xuICAgIHRoaXMuYyA9IGMxICogY29zLXRoaXMuZCAqIHNpbjtcbiAgICB0aGlzLmQgPSBjMSAqIHNpbit0aGlzLmQgKiBjb3M7XG4gICAgdGhpcy50eCA9IHR4MSAqIGNvcyAtIHRoaXMudHkgKiBzaW47XG4gICAgdGhpcy50eSA9IHR4MSAqIHNpbiArIHRoaXMudHkgKiBjb3M7XG5cbiAgICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogQXBwZW5kcyB0aGUgZ2l2ZW4gTWF0cml4IHRvIHRoaXMgTWF0cml4LlxuICpcbiAqIEBwYXJhbSB7UElYSS5NYXRyaXh9IG1hdHJpeFxuICogQHJldHVybiB7UElYSS5NYXRyaXh9IFRoaXMgbWF0cml4LiBHb29kIGZvciBjaGFpbmluZyBtZXRob2QgY2FsbHMuXG4gKi9cbk1hdHJpeC5wcm90b3R5cGUuYXBwZW5kID0gZnVuY3Rpb24gKG1hdHJpeClcbntcbiAgICB2YXIgYTEgPSB0aGlzLmE7XG4gICAgdmFyIGIxID0gdGhpcy5iO1xuICAgIHZhciBjMSA9IHRoaXMuYztcbiAgICB2YXIgZDEgPSB0aGlzLmQ7XG5cbiAgICB0aGlzLmEgID0gbWF0cml4LmEgKiBhMSArIG1hdHJpeC5iICogYzE7XG4gICAgdGhpcy5iICA9IG1hdHJpeC5hICogYjEgKyBtYXRyaXguYiAqIGQxO1xuICAgIHRoaXMuYyAgPSBtYXRyaXguYyAqIGExICsgbWF0cml4LmQgKiBjMTtcbiAgICB0aGlzLmQgID0gbWF0cml4LmMgKiBiMSArIG1hdHJpeC5kICogZDE7XG5cbiAgICB0aGlzLnR4ID0gbWF0cml4LnR4ICogYTEgKyBtYXRyaXgudHkgKiBjMSArIHRoaXMudHg7XG4gICAgdGhpcy50eSA9IG1hdHJpeC50eCAqIGIxICsgbWF0cml4LnR5ICogZDEgKyB0aGlzLnR5O1xuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIFNldHMgdGhlIG1hdHJpeCBiYXNlZCBvbiBhbGwgdGhlIGF2YWlsYWJsZSBwcm9wZXJ0aWVzXG4gKlxuICogQHBhcmFtIHtudW1iZXJ9IHhcbiAqIEBwYXJhbSB7bnVtYmVyfSB5XG4gKiBAcGFyYW0ge251bWJlcn0gcGl2b3RYXG4gKiBAcGFyYW0ge251bWJlcn0gcGl2b3RZXG4gKiBAcGFyYW0ge251bWJlcn0gc2NhbGVYXG4gKiBAcGFyYW0ge251bWJlcn0gc2NhbGVZXG4gKiBAcGFyYW0ge251bWJlcn0gcm90YXRpb25cbiAqIEBwYXJhbSB7bnVtYmVyfSBza2V3WFxuICogQHBhcmFtIHtudW1iZXJ9IHNrZXdZXG4gKlxuICogQHJldHVybiB7UElYSS5NYXRyaXh9IFRoaXMgbWF0cml4LiBHb29kIGZvciBjaGFpbmluZyBtZXRob2QgY2FsbHMuXG4gKi9cbk1hdHJpeC5wcm90b3R5cGUuc2V0VHJhbnNmb3JtID0gZnVuY3Rpb24gKHgsIHksIHBpdm90WCwgcGl2b3RZLCBzY2FsZVgsIHNjYWxlWSwgcm90YXRpb24sIHNrZXdYLCBza2V3WSlcbntcbiAgICB2YXIgYSwgYiwgYywgZCwgc3IsIGNyLCBjeSwgc3ksIG5zeCwgY3g7XG5cbiAgICBzciAgPSBNYXRoLnNpbihyb3RhdGlvbik7XG4gICAgY3IgID0gTWF0aC5jb3Mocm90YXRpb24pO1xuICAgIGN5ICA9IE1hdGguY29zKHNrZXdZKTtcbiAgICBzeSAgPSBNYXRoLnNpbihza2V3WSk7XG4gICAgbnN4ID0gLU1hdGguc2luKHNrZXdYKTtcbiAgICBjeCAgPSAgTWF0aC5jb3Moc2tld1gpO1xuXG4gICAgYSAgPSAgY3IgKiBzY2FsZVg7XG4gICAgYiAgPSAgc3IgKiBzY2FsZVg7XG4gICAgYyAgPSAtc3IgKiBzY2FsZVk7XG4gICAgZCAgPSAgY3IgKiBzY2FsZVk7XG5cbiAgICB0aGlzLmEgID0gY3kgKiBhICsgc3kgKiBjO1xuICAgIHRoaXMuYiAgPSBjeSAqIGIgKyBzeSAqIGQ7XG4gICAgdGhpcy5jICA9IG5zeCAqIGEgKyBjeCAqIGM7XG4gICAgdGhpcy5kICA9IG5zeCAqIGIgKyBjeCAqIGQ7XG5cbiAgICB0aGlzLnR4ID0geCArICggcGl2b3RYICogYSArIHBpdm90WSAqIGMgKTtcbiAgICB0aGlzLnR5ID0geSArICggcGl2b3RYICogYiArIHBpdm90WSAqIGQgKTtcblxuICAgIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBQcmVwZW5kcyB0aGUgZ2l2ZW4gTWF0cml4IHRvIHRoaXMgTWF0cml4LlxuICpcbiAqIEBwYXJhbSB7UElYSS5NYXRyaXh9IG1hdHJpeFxuICogQHJldHVybiB7UElYSS5NYXRyaXh9IFRoaXMgbWF0cml4LiBHb29kIGZvciBjaGFpbmluZyBtZXRob2QgY2FsbHMuXG4gKi9cbk1hdHJpeC5wcm90b3R5cGUucHJlcGVuZCA9IGZ1bmN0aW9uKG1hdHJpeClcbntcbiAgICB2YXIgdHgxID0gdGhpcy50eDtcblxuICAgIGlmIChtYXRyaXguYSAhPT0gMSB8fCBtYXRyaXguYiAhPT0gMCB8fCBtYXRyaXguYyAhPT0gMCB8fCBtYXRyaXguZCAhPT0gMSlcbiAgICB7XG4gICAgICAgIHZhciBhMSA9IHRoaXMuYTtcbiAgICAgICAgdmFyIGMxID0gdGhpcy5jO1xuICAgICAgICB0aGlzLmEgID0gYTEqbWF0cml4LmErdGhpcy5iKm1hdHJpeC5jO1xuICAgICAgICB0aGlzLmIgID0gYTEqbWF0cml4LmIrdGhpcy5iKm1hdHJpeC5kO1xuICAgICAgICB0aGlzLmMgID0gYzEqbWF0cml4LmErdGhpcy5kKm1hdHJpeC5jO1xuICAgICAgICB0aGlzLmQgID0gYzEqbWF0cml4LmIrdGhpcy5kKm1hdHJpeC5kO1xuICAgIH1cblxuICAgIHRoaXMudHggPSB0eDEqbWF0cml4LmErdGhpcy50eSptYXRyaXguYyttYXRyaXgudHg7XG4gICAgdGhpcy50eSA9IHR4MSptYXRyaXguYit0aGlzLnR5Km1hdHJpeC5kK21hdHJpeC50eTtcblxuICAgIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBJbnZlcnRzIHRoaXMgbWF0cml4XG4gKlxuICogQHJldHVybiB7UElYSS5NYXRyaXh9IFRoaXMgbWF0cml4LiBHb29kIGZvciBjaGFpbmluZyBtZXRob2QgY2FsbHMuXG4gKi9cbk1hdHJpeC5wcm90b3R5cGUuaW52ZXJ0ID0gZnVuY3Rpb24oKVxue1xuICAgIHZhciBhMSA9IHRoaXMuYTtcbiAgICB2YXIgYjEgPSB0aGlzLmI7XG4gICAgdmFyIGMxID0gdGhpcy5jO1xuICAgIHZhciBkMSA9IHRoaXMuZDtcbiAgICB2YXIgdHgxID0gdGhpcy50eDtcbiAgICB2YXIgbiA9IGExKmQxLWIxKmMxO1xuXG4gICAgdGhpcy5hID0gZDEvbjtcbiAgICB0aGlzLmIgPSAtYjEvbjtcbiAgICB0aGlzLmMgPSAtYzEvbjtcbiAgICB0aGlzLmQgPSBhMS9uO1xuICAgIHRoaXMudHggPSAoYzEqdGhpcy50eS1kMSp0eDEpL247XG4gICAgdGhpcy50eSA9IC0oYTEqdGhpcy50eS1iMSp0eDEpL247XG5cbiAgICByZXR1cm4gdGhpcztcbn07XG5cblxuLyoqXG4gKiBSZXNldHMgdGhpcyBNYXRpeCB0byBhbiBpZGVudGl0eSAoZGVmYXVsdCkgbWF0cml4LlxuICpcbiAqIEByZXR1cm4ge1BJWEkuTWF0cml4fSBUaGlzIG1hdHJpeC4gR29vZCBmb3IgY2hhaW5pbmcgbWV0aG9kIGNhbGxzLlxuICovXG5NYXRyaXgucHJvdG90eXBlLmlkZW50aXR5ID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLmEgPSAxO1xuICAgIHRoaXMuYiA9IDA7XG4gICAgdGhpcy5jID0gMDtcbiAgICB0aGlzLmQgPSAxO1xuICAgIHRoaXMudHggPSAwO1xuICAgIHRoaXMudHkgPSAwO1xuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIENyZWF0ZXMgYSBuZXcgTWF0cml4IG9iamVjdCB3aXRoIHRoZSBzYW1lIHZhbHVlcyBhcyB0aGlzIG9uZS5cbiAqXG4gKiBAcmV0dXJuIHtQSVhJLk1hdHJpeH0gQSBjb3B5IG9mIHRoaXMgbWF0cml4LiBHb29kIGZvciBjaGFpbmluZyBtZXRob2QgY2FsbHMuXG4gKi9cbk1hdHJpeC5wcm90b3R5cGUuY2xvbmUgPSBmdW5jdGlvbiAoKVxue1xuICAgIHZhciBtYXRyaXggPSBuZXcgTWF0cml4KCk7XG4gICAgbWF0cml4LmEgPSB0aGlzLmE7XG4gICAgbWF0cml4LmIgPSB0aGlzLmI7XG4gICAgbWF0cml4LmMgPSB0aGlzLmM7XG4gICAgbWF0cml4LmQgPSB0aGlzLmQ7XG4gICAgbWF0cml4LnR4ID0gdGhpcy50eDtcbiAgICBtYXRyaXgudHkgPSB0aGlzLnR5O1xuXG4gICAgcmV0dXJuIG1hdHJpeDtcbn07XG5cbi8qKlxuICogQ2hhbmdlcyB0aGUgdmFsdWVzIG9mIHRoZSBnaXZlbiBtYXRyaXggdG8gYmUgdGhlIHNhbWUgYXMgdGhlIG9uZXMgaW4gdGhpcyBtYXRyaXhcbiAqXG4gKiBAcmV0dXJuIHtQSVhJLk1hdHJpeH0gVGhlIG1hdHJpeCBnaXZlbiBpbiBwYXJhbWV0ZXIgd2l0aCBpdHMgdmFsdWVzIHVwZGF0ZWQuXG4gKi9cbk1hdHJpeC5wcm90b3R5cGUuY29weSA9IGZ1bmN0aW9uIChtYXRyaXgpXG57XG4gICAgbWF0cml4LmEgPSB0aGlzLmE7XG4gICAgbWF0cml4LmIgPSB0aGlzLmI7XG4gICAgbWF0cml4LmMgPSB0aGlzLmM7XG4gICAgbWF0cml4LmQgPSB0aGlzLmQ7XG4gICAgbWF0cml4LnR4ID0gdGhpcy50eDtcbiAgICBtYXRyaXgudHkgPSB0aGlzLnR5O1xuXG4gICAgcmV0dXJuIG1hdHJpeDtcbn07XG5cbi8qKlxuICogQSBkZWZhdWx0IChpZGVudGl0eSkgbWF0cml4XG4gKlxuICogQHN0YXRpY1xuICogQGNvbnN0XG4gKi9cbk1hdHJpeC5JREVOVElUWSA9IG5ldyBNYXRyaXgoKTtcblxuLyoqXG4gKiBBIHRlbXAgbWF0cml4XG4gKlxuICogQHN0YXRpY1xuICogQGNvbnN0XG4gKi9cbk1hdHJpeC5URU1QX01BVFJJWCA9IG5ldyBNYXRyaXgoKTtcbiIsIi8qKlxuICogVGhlIFBvaW50IG9iamVjdCByZXByZXNlbnRzIGEgbG9jYXRpb24gaW4gYSB0d28tZGltZW5zaW9uYWwgY29vcmRpbmF0ZSBzeXN0ZW0sIHdoZXJlIHggcmVwcmVzZW50c1xuICogdGhlIGhvcml6b250YWwgYXhpcyBhbmQgeSByZXByZXNlbnRzIHRoZSB2ZXJ0aWNhbCBheGlzLlxuICpcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqIEBwYXJhbSBbeD0wXSB7bnVtYmVyfSBwb3NpdGlvbiBvZiB0aGUgcG9pbnQgb24gdGhlIHggYXhpc1xuICogQHBhcmFtIFt5PTBdIHtudW1iZXJ9IHBvc2l0aW9uIG9mIHRoZSBwb2ludCBvbiB0aGUgeSBheGlzXG4gKi9cbmZ1bmN0aW9uIFBvaW50KHgsIHkpXG57XG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDBcbiAgICAgKi9cbiAgICB0aGlzLnggPSB4IHx8IDA7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMFxuICAgICAqL1xuICAgIHRoaXMueSA9IHkgfHwgMDtcbn1cblxuUG9pbnQucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gUG9pbnQ7XG5tb2R1bGUuZXhwb3J0cyA9IFBvaW50O1xuXG4vKipcbiAqIENyZWF0ZXMgYSBjbG9uZSBvZiB0aGlzIHBvaW50XG4gKlxuICogQHJldHVybiB7UElYSS5Qb2ludH0gYSBjb3B5IG9mIHRoZSBwb2ludFxuICovXG5Qb2ludC5wcm90b3R5cGUuY2xvbmUgPSBmdW5jdGlvbiAoKVxue1xuICAgIHJldHVybiBuZXcgUG9pbnQodGhpcy54LCB0aGlzLnkpO1xufTtcblxuLyoqXG4gKiBDb3BpZXMgeCBhbmQgeSBmcm9tIHRoZSBnaXZlbiBwb2ludFxuICpcbiAqIEBwYXJhbSBwIHtQSVhJLlBvaW50fVxuICovXG5Qb2ludC5wcm90b3R5cGUuY29weSA9IGZ1bmN0aW9uIChwKSB7XG4gICAgdGhpcy5zZXQocC54LCBwLnkpO1xufTtcblxuLyoqXG4gKiBSZXR1cm5zIHRydWUgaWYgdGhlIGdpdmVuIHBvaW50IGlzIGVxdWFsIHRvIHRoaXMgcG9pbnRcbiAqXG4gKiBAcGFyYW0gcCB7UElYSS5Qb2ludH1cbiAqIEByZXR1cm5zIHtib29sZWFufVxuICovXG5Qb2ludC5wcm90b3R5cGUuZXF1YWxzID0gZnVuY3Rpb24gKHApIHtcbiAgICByZXR1cm4gKHAueCA9PT0gdGhpcy54KSAmJiAocC55ID09PSB0aGlzLnkpO1xufTtcblxuLyoqXG4gKiBTZXRzIHRoZSBwb2ludCB0byBhIG5ldyB4IGFuZCB5IHBvc2l0aW9uLlxuICogSWYgeSBpcyBvbWl0dGVkLCBib3RoIHggYW5kIHkgd2lsbCBiZSBzZXQgdG8geC5cbiAqXG4gKiBAcGFyYW0gW3g9MF0ge251bWJlcn0gcG9zaXRpb24gb2YgdGhlIHBvaW50IG9uIHRoZSB4IGF4aXNcbiAqIEBwYXJhbSBbeT0wXSB7bnVtYmVyfSBwb3NpdGlvbiBvZiB0aGUgcG9pbnQgb24gdGhlIHkgYXhpc1xuICovXG5Qb2ludC5wcm90b3R5cGUuc2V0ID0gZnVuY3Rpb24gKHgsIHkpXG57XG4gICAgdGhpcy54ID0geCB8fCAwO1xuICAgIHRoaXMueSA9IHkgfHwgKCAoeSAhPT0gMCkgPyB0aGlzLnggOiAwICkgO1xufTtcbiIsIi8qKlxuICogTWF0aCBjbGFzc2VzIGFuZCB1dGlsaXRpZXMgbWl4ZWQgaW50byBQSVhJIG5hbWVzcGFjZS5cbiAqXG4gKiBAbGVuZHMgUElYSVxuICovXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgICAvLyBUaGVzZSB3aWxsIGJlIG1peGVkIHRvIGJlIG1hZGUgcHVibGljbHkgYXZhaWxhYmxlLFxuICAgIC8vIHdoaWxlIHRoaXMgbW9kdWxlIGlzIHVzZWQgaW50ZXJuYWxseSBpbiBjb3JlXG4gICAgLy8gdG8gYXZvaWQgY2lyY3VsYXIgZGVwZW5kZW5jaWVzIGFuZCBjdXQgZG93biBvblxuICAgIC8vIGludGVybmFsIG1vZHVsZSByZXF1aXJlcy5cblxuICAgIFBvaW50OiAgICAgIHJlcXVpcmUoJy4vUG9pbnQnKSxcbiAgICBNYXRyaXg6ICAgICByZXF1aXJlKCcuL01hdHJpeCcpLFxuXG4gICAgQ2lyY2xlOiAgICAgcmVxdWlyZSgnLi9zaGFwZXMvQ2lyY2xlJyksXG4gICAgRWxsaXBzZTogICAgcmVxdWlyZSgnLi9zaGFwZXMvRWxsaXBzZScpLFxuICAgIFBvbHlnb246ICAgIHJlcXVpcmUoJy4vc2hhcGVzL1BvbHlnb24nKSxcbiAgICBSZWN0YW5nbGU6ICByZXF1aXJlKCcuL3NoYXBlcy9SZWN0YW5nbGUnKSxcbiAgICBSb3VuZGVkUmVjdGFuZ2xlOiByZXF1aXJlKCcuL3NoYXBlcy9Sb3VuZGVkUmVjdGFuZ2xlJylcbn07XG4iLCJ2YXIgUmVjdGFuZ2xlID0gcmVxdWlyZSgnLi9SZWN0YW5nbGUnKSxcbiAgICBDT05TVCA9IHJlcXVpcmUoJy4uLy4uL2NvbnN0Jyk7XG5cbi8qKlxuICogVGhlIENpcmNsZSBvYmplY3QgY2FuIGJlIHVzZWQgdG8gc3BlY2lmeSBhIGhpdCBhcmVhIGZvciBkaXNwbGF5T2JqZWN0c1xuICpcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqIEBwYXJhbSB4IHtudW1iZXJ9IFRoZSBYIGNvb3JkaW5hdGUgb2YgdGhlIGNlbnRlciBvZiB0aGlzIGNpcmNsZVxuICogQHBhcmFtIHkge251bWJlcn0gVGhlIFkgY29vcmRpbmF0ZSBvZiB0aGUgY2VudGVyIG9mIHRoaXMgY2lyY2xlXG4gKiBAcGFyYW0gcmFkaXVzIHtudW1iZXJ9IFRoZSByYWRpdXMgb2YgdGhlIGNpcmNsZVxuICovXG5mdW5jdGlvbiBDaXJjbGUoeCwgeSwgcmFkaXVzKVxue1xuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAwXG4gICAgICovXG4gICAgdGhpcy54ID0geCB8fCAwO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDBcbiAgICAgKi9cbiAgICB0aGlzLnkgPSB5IHx8IDA7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMFxuICAgICAqL1xuICAgIHRoaXMucmFkaXVzID0gcmFkaXVzIHx8IDA7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgdHlwZSBvZiB0aGUgb2JqZWN0LCBtYWlubHkgdXNlZCB0byBhdm9pZCBgaW5zdGFuY2VvZmAgY2hlY2tzXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy50eXBlID0gQ09OU1QuU0hBUEVTLkNJUkM7XG59XG5cbkNpcmNsZS5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBDaXJjbGU7XG5tb2R1bGUuZXhwb3J0cyA9IENpcmNsZTtcblxuLyoqXG4gKiBDcmVhdGVzIGEgY2xvbmUgb2YgdGhpcyBDaXJjbGUgaW5zdGFuY2VcbiAqXG4gKiBAcmV0dXJuIHtQSVhJLkNpcmNsZX0gYSBjb3B5IG9mIHRoZSBDaXJjbGVcbiAqL1xuQ2lyY2xlLnByb3RvdHlwZS5jbG9uZSA9IGZ1bmN0aW9uICgpXG57XG4gICAgcmV0dXJuIG5ldyBDaXJjbGUodGhpcy54LCB0aGlzLnksIHRoaXMucmFkaXVzKTtcbn07XG5cbi8qKlxuICogQ2hlY2tzIHdoZXRoZXIgdGhlIHggYW5kIHkgY29vcmRpbmF0ZXMgZ2l2ZW4gYXJlIGNvbnRhaW5lZCB3aXRoaW4gdGhpcyBjaXJjbGVcbiAqXG4gKiBAcGFyYW0geCB7bnVtYmVyfSBUaGUgWCBjb29yZGluYXRlIG9mIHRoZSBwb2ludCB0byB0ZXN0XG4gKiBAcGFyYW0geSB7bnVtYmVyfSBUaGUgWSBjb29yZGluYXRlIG9mIHRoZSBwb2ludCB0byB0ZXN0XG4gKiBAcmV0dXJuIHtib29sZWFufSBXaGV0aGVyIHRoZSB4L3kgY29vcmRpbmF0ZXMgYXJlIHdpdGhpbiB0aGlzIENpcmNsZVxuICovXG5DaXJjbGUucHJvdG90eXBlLmNvbnRhaW5zID0gZnVuY3Rpb24gKHgsIHkpXG57XG4gICAgaWYgKHRoaXMucmFkaXVzIDw9IDApXG4gICAge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgdmFyIGR4ID0gKHRoaXMueCAtIHgpLFxuICAgICAgICBkeSA9ICh0aGlzLnkgLSB5KSxcbiAgICAgICAgcjIgPSB0aGlzLnJhZGl1cyAqIHRoaXMucmFkaXVzO1xuXG4gICAgZHggKj0gZHg7XG4gICAgZHkgKj0gZHk7XG5cbiAgICByZXR1cm4gKGR4ICsgZHkgPD0gcjIpO1xufTtcblxuLyoqXG4qIFJldHVybnMgdGhlIGZyYW1pbmcgcmVjdGFuZ2xlIG9mIHRoZSBjaXJjbGUgYXMgYSBSZWN0YW5nbGUgb2JqZWN0XG4qXG4qIEByZXR1cm4ge1BJWEkuUmVjdGFuZ2xlfSB0aGUgZnJhbWluZyByZWN0YW5nbGVcbiovXG5DaXJjbGUucHJvdG90eXBlLmdldEJvdW5kcyA9IGZ1bmN0aW9uICgpXG57XG4gICAgcmV0dXJuIG5ldyBSZWN0YW5nbGUodGhpcy54IC0gdGhpcy5yYWRpdXMsIHRoaXMueSAtIHRoaXMucmFkaXVzLCB0aGlzLnJhZGl1cyAqIDIsIHRoaXMucmFkaXVzICogMik7XG59O1xuIiwidmFyIFJlY3RhbmdsZSA9IHJlcXVpcmUoJy4vUmVjdGFuZ2xlJyksXG4gICAgQ09OU1QgPSByZXF1aXJlKCcuLi8uLi9jb25zdCcpO1xuXG4vKipcbiAqIFRoZSBFbGxpcHNlIG9iamVjdCBjYW4gYmUgdXNlZCB0byBzcGVjaWZ5IGEgaGl0IGFyZWEgZm9yIGRpc3BsYXlPYmplY3RzXG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIHgge251bWJlcn0gVGhlIFggY29vcmRpbmF0ZSBvZiB0aGUgY2VudGVyIG9mIHRoZSBlbGxpcHNlXG4gKiBAcGFyYW0geSB7bnVtYmVyfSBUaGUgWSBjb29yZGluYXRlIG9mIHRoZSBjZW50ZXIgb2YgdGhlIGVsbGlwc2VcbiAqIEBwYXJhbSB3aWR0aCB7bnVtYmVyfSBUaGUgaGFsZiB3aWR0aCBvZiB0aGlzIGVsbGlwc2VcbiAqIEBwYXJhbSBoZWlnaHQge251bWJlcn0gVGhlIGhhbGYgaGVpZ2h0IG9mIHRoaXMgZWxsaXBzZVxuICovXG5mdW5jdGlvbiBFbGxpcHNlKHgsIHksIHdpZHRoLCBoZWlnaHQpXG57XG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDBcbiAgICAgKi9cbiAgICB0aGlzLnggPSB4IHx8IDA7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMFxuICAgICAqL1xuICAgIHRoaXMueSA9IHkgfHwgMDtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAwXG4gICAgICovXG4gICAgdGhpcy53aWR0aCA9IHdpZHRoIHx8IDA7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMFxuICAgICAqL1xuICAgIHRoaXMuaGVpZ2h0ID0gaGVpZ2h0IHx8IDA7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgdHlwZSBvZiB0aGUgb2JqZWN0LCBtYWlubHkgdXNlZCB0byBhdm9pZCBgaW5zdGFuY2VvZmAgY2hlY2tzXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy50eXBlID0gQ09OU1QuU0hBUEVTLkVMSVA7XG59XG5cbkVsbGlwc2UucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gRWxsaXBzZTtcbm1vZHVsZS5leHBvcnRzID0gRWxsaXBzZTtcblxuLyoqXG4gKiBDcmVhdGVzIGEgY2xvbmUgb2YgdGhpcyBFbGxpcHNlIGluc3RhbmNlXG4gKlxuICogQHJldHVybiB7UElYSS5FbGxpcHNlfSBhIGNvcHkgb2YgdGhlIGVsbGlwc2VcbiAqL1xuRWxsaXBzZS5wcm90b3R5cGUuY2xvbmUgPSBmdW5jdGlvbiAoKVxue1xuICAgIHJldHVybiBuZXcgRWxsaXBzZSh0aGlzLngsIHRoaXMueSwgdGhpcy53aWR0aCwgdGhpcy5oZWlnaHQpO1xufTtcblxuLyoqXG4gKiBDaGVja3Mgd2hldGhlciB0aGUgeCBhbmQgeSBjb29yZGluYXRlcyBnaXZlbiBhcmUgY29udGFpbmVkIHdpdGhpbiB0aGlzIGVsbGlwc2VcbiAqXG4gKiBAcGFyYW0geCB7bnVtYmVyfSBUaGUgWCBjb29yZGluYXRlIG9mIHRoZSBwb2ludCB0byB0ZXN0XG4gKiBAcGFyYW0geSB7bnVtYmVyfSBUaGUgWSBjb29yZGluYXRlIG9mIHRoZSBwb2ludCB0byB0ZXN0XG4gKiBAcmV0dXJuIHtib29sZWFufSBXaGV0aGVyIHRoZSB4L3kgY29vcmRzIGFyZSB3aXRoaW4gdGhpcyBlbGxpcHNlXG4gKi9cbkVsbGlwc2UucHJvdG90eXBlLmNvbnRhaW5zID0gZnVuY3Rpb24gKHgsIHkpXG57XG4gICAgaWYgKHRoaXMud2lkdGggPD0gMCB8fCB0aGlzLmhlaWdodCA8PSAwKVxuICAgIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIC8vbm9ybWFsaXplIHRoZSBjb29yZHMgdG8gYW4gZWxsaXBzZSB3aXRoIGNlbnRlciAwLDBcbiAgICB2YXIgbm9ybXggPSAoKHggLSB0aGlzLngpIC8gdGhpcy53aWR0aCksXG4gICAgICAgIG5vcm15ID0gKCh5IC0gdGhpcy55KSAvIHRoaXMuaGVpZ2h0KTtcblxuICAgIG5vcm14ICo9IG5vcm14O1xuICAgIG5vcm15ICo9IG5vcm15O1xuXG4gICAgcmV0dXJuIChub3JteCArIG5vcm15IDw9IDEpO1xufTtcblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBmcmFtaW5nIHJlY3RhbmdsZSBvZiB0aGUgZWxsaXBzZSBhcyBhIFJlY3RhbmdsZSBvYmplY3RcbiAqXG4gKiBAcmV0dXJuIHtQSVhJLlJlY3RhbmdsZX0gdGhlIGZyYW1pbmcgcmVjdGFuZ2xlXG4gKi9cbkVsbGlwc2UucHJvdG90eXBlLmdldEJvdW5kcyA9IGZ1bmN0aW9uICgpXG57XG4gICAgcmV0dXJuIG5ldyBSZWN0YW5nbGUodGhpcy54IC0gdGhpcy53aWR0aCwgdGhpcy55IC0gdGhpcy5oZWlnaHQsIHRoaXMud2lkdGgsIHRoaXMuaGVpZ2h0KTtcbn07XG4iLCJ2YXIgUG9pbnQgPSByZXF1aXJlKCcuLi9Qb2ludCcpLFxuICAgIENPTlNUID0gcmVxdWlyZSgnLi4vLi4vY29uc3QnKTtcblxuLyoqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gcG9pbnRzIHtQSVhJLlBvaW50W118bnVtYmVyW118Li4uUElYSS5Qb2ludHwuLi5udW1iZXJ9IFRoaXMgY2FuIGJlIGFuIGFycmF5IG9mIFBvaW50cyB0aGF0IGZvcm0gdGhlIHBvbHlnb24sXG4gKiAgICAgIGEgZmxhdCBhcnJheSBvZiBudW1iZXJzIHRoYXQgd2lsbCBiZSBpbnRlcnByZXRlZCBhcyBbeCx5LCB4LHksIC4uLl0sIG9yIHRoZSBhcmd1bWVudHMgcGFzc2VkIGNhbiBiZVxuICogICAgICBhbGwgdGhlIHBvaW50cyBvZiB0aGUgcG9seWdvbiBlLmcuIGBuZXcgUElYSS5Qb2x5Z29uKG5ldyBQSVhJLlBvaW50KCksIG5ldyBQSVhJLlBvaW50KCksIC4uLilgLCBvciB0aGVcbiAqICAgICAgYXJndW1lbnRzIHBhc3NlZCBjYW4gYmUgZmxhdCB4LHkgdmFsdWVzIGUuZy4gYG5ldyBQb2x5Z29uKHgseSwgeCx5LCB4LHksIC4uLilgIHdoZXJlIGB4YCBhbmQgYHlgIGFyZVxuICogICAgICBOdW1iZXJzLlxuICovXG5mdW5jdGlvbiBQb2x5Z29uKHBvaW50c18pXG57XG4gICAgLy8gcHJldmVudHMgYW4gYXJndW1lbnQgYXNzaWdubWVudCBkZW9wdFxuICAgIC8vIHNlZSBzZWN0aW9uIDMuMTogaHR0cHM6Ly9naXRodWIuY29tL3BldGthYW50b25vdi9ibHVlYmlyZC93aWtpL09wdGltaXphdGlvbi1raWxsZXJzIzMtbWFuYWdpbmctYXJndW1lbnRzXG4gICAgdmFyIHBvaW50cyA9IHBvaW50c187XG5cbiAgICAvL2lmIHBvaW50cyBpc24ndCBhbiBhcnJheSwgdXNlIGFyZ3VtZW50cyBhcyB0aGUgYXJyYXlcbiAgICBpZiAoIUFycmF5LmlzQXJyYXkocG9pbnRzKSlcbiAgICB7XG4gICAgICAgIC8vIHByZXZlbnRzIGFuIGFyZ3VtZW50IGxlYWsgZGVvcHRcbiAgICAgICAgLy8gc2VlIHNlY3Rpb24gMy4yOiBodHRwczovL2dpdGh1Yi5jb20vcGV0a2FhbnRvbm92L2JsdWViaXJkL3dpa2kvT3B0aW1pemF0aW9uLWtpbGxlcnMjMy1tYW5hZ2luZy1hcmd1bWVudHNcbiAgICAgICAgcG9pbnRzID0gbmV3IEFycmF5KGFyZ3VtZW50cy5sZW5ndGgpO1xuXG4gICAgICAgIGZvciAodmFyIGEgPSAwOyBhIDwgcG9pbnRzLmxlbmd0aDsgKythKSB7XG4gICAgICAgICAgICBwb2ludHNbYV0gPSBhcmd1bWVudHNbYV07XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBpZiB0aGlzIGlzIGFuIGFycmF5IG9mIHBvaW50cywgY29udmVydCBpdCB0byBhIGZsYXQgYXJyYXkgb2YgbnVtYmVyc1xuICAgIGlmIChwb2ludHNbMF0gaW5zdGFuY2VvZiBQb2ludClcbiAgICB7XG4gICAgICAgIHZhciBwID0gW107XG4gICAgICAgIGZvciAodmFyIGkgPSAwLCBpbCA9IHBvaW50cy5sZW5ndGg7IGkgPCBpbDsgaSsrKVxuICAgICAgICB7XG4gICAgICAgICAgICBwLnB1c2gocG9pbnRzW2ldLngsIHBvaW50c1tpXS55KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHBvaW50cyA9IHA7XG4gICAgfVxuXG4gICAgdGhpcy5jbG9zZWQgPSB0cnVlO1xuXG4gICAgLyoqXG4gICAgICogQW4gYXJyYXkgb2YgdGhlIHBvaW50cyBvZiB0aGlzIHBvbHlnb25cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcltdfVxuICAgICAqL1xuICAgIHRoaXMucG9pbnRzID0gcG9pbnRzO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHR5cGUgb2YgdGhlIG9iamVjdCwgbWFpbmx5IHVzZWQgdG8gYXZvaWQgYGluc3RhbmNlb2ZgIGNoZWNrc1xuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMudHlwZSA9IENPTlNULlNIQVBFUy5QT0xZO1xufVxuXG5Qb2x5Z29uLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFBvbHlnb247XG5tb2R1bGUuZXhwb3J0cyA9IFBvbHlnb247XG5cbi8qKlxuICogQ3JlYXRlcyBhIGNsb25lIG9mIHRoaXMgcG9seWdvblxuICpcbiAqIEByZXR1cm4ge1BJWEkuUG9seWdvbn0gYSBjb3B5IG9mIHRoZSBwb2x5Z29uXG4gKi9cblBvbHlnb24ucHJvdG90eXBlLmNsb25lID0gZnVuY3Rpb24gKClcbntcbiAgICByZXR1cm4gbmV3IFBvbHlnb24odGhpcy5wb2ludHMuc2xpY2UoKSk7XG59O1xuXG4vKipcbiAqIENoZWNrcyB3aGV0aGVyIHRoZSB4IGFuZCB5IGNvb3JkaW5hdGVzIHBhc3NlZCB0byB0aGlzIGZ1bmN0aW9uIGFyZSBjb250YWluZWQgd2l0aGluIHRoaXMgcG9seWdvblxuICpcbiAqIEBwYXJhbSB4IHtudW1iZXJ9IFRoZSBYIGNvb3JkaW5hdGUgb2YgdGhlIHBvaW50IHRvIHRlc3RcbiAqIEBwYXJhbSB5IHtudW1iZXJ9IFRoZSBZIGNvb3JkaW5hdGUgb2YgdGhlIHBvaW50IHRvIHRlc3RcbiAqIEByZXR1cm4ge2Jvb2xlYW59IFdoZXRoZXIgdGhlIHgveSBjb29yZGluYXRlcyBhcmUgd2l0aGluIHRoaXMgcG9seWdvblxuICovXG5Qb2x5Z29uLnByb3RvdHlwZS5jb250YWlucyA9IGZ1bmN0aW9uICh4LCB5KVxue1xuICAgIHZhciBpbnNpZGUgPSBmYWxzZTtcblxuICAgIC8vIHVzZSBzb21lIHJheWNhc3RpbmcgdG8gdGVzdCBoaXRzXG4gICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL3N1YnN0YWNrL3BvaW50LWluLXBvbHlnb24vYmxvYi9tYXN0ZXIvaW5kZXguanNcbiAgICB2YXIgbGVuZ3RoID0gdGhpcy5wb2ludHMubGVuZ3RoIC8gMjtcblxuICAgIGZvciAodmFyIGkgPSAwLCBqID0gbGVuZ3RoIC0gMTsgaSA8IGxlbmd0aDsgaiA9IGkrKylcbiAgICB7XG4gICAgICAgIHZhciB4aSA9IHRoaXMucG9pbnRzW2kgKiAyXSwgeWkgPSB0aGlzLnBvaW50c1tpICogMiArIDFdLFxuICAgICAgICAgICAgeGogPSB0aGlzLnBvaW50c1tqICogMl0sIHlqID0gdGhpcy5wb2ludHNbaiAqIDIgKyAxXSxcbiAgICAgICAgICAgIGludGVyc2VjdCA9ICgoeWkgPiB5KSAhPT0gKHlqID4geSkpICYmICh4IDwgKHhqIC0geGkpICogKHkgLSB5aSkgLyAoeWogLSB5aSkgKyB4aSk7XG5cbiAgICAgICAgaWYgKGludGVyc2VjdClcbiAgICAgICAge1xuICAgICAgICAgICAgaW5zaWRlID0gIWluc2lkZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBpbnNpZGU7XG59O1xuIiwidmFyIENPTlNUID0gcmVxdWlyZSgnLi4vLi4vY29uc3QnKTtcblxuLyoqXG4gKiB0aGUgUmVjdGFuZ2xlIG9iamVjdCBpcyBhbiBhcmVhIGRlZmluZWQgYnkgaXRzIHBvc2l0aW9uLCBhcyBpbmRpY2F0ZWQgYnkgaXRzIHRvcC1sZWZ0IGNvcm5lciBwb2ludCAoeCwgeSkgYW5kIGJ5IGl0cyB3aWR0aCBhbmQgaXRzIGhlaWdodC5cbiAqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0geCB7bnVtYmVyfSBUaGUgWCBjb29yZGluYXRlIG9mIHRoZSB1cHBlci1sZWZ0IGNvcm5lciBvZiB0aGUgcmVjdGFuZ2xlXG4gKiBAcGFyYW0geSB7bnVtYmVyfSBUaGUgWSBjb29yZGluYXRlIG9mIHRoZSB1cHBlci1sZWZ0IGNvcm5lciBvZiB0aGUgcmVjdGFuZ2xlXG4gKiBAcGFyYW0gd2lkdGgge251bWJlcn0gVGhlIG92ZXJhbGwgd2lkdGggb2YgdGhpcyByZWN0YW5nbGVcbiAqIEBwYXJhbSBoZWlnaHQge251bWJlcn0gVGhlIG92ZXJhbGwgaGVpZ2h0IG9mIHRoaXMgcmVjdGFuZ2xlXG4gKi9cbmZ1bmN0aW9uIFJlY3RhbmdsZSh4LCB5LCB3aWR0aCwgaGVpZ2h0KVxue1xuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAwXG4gICAgICovXG4gICAgdGhpcy54ID0geCB8fCAwO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDBcbiAgICAgKi9cbiAgICB0aGlzLnkgPSB5IHx8IDA7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMFxuICAgICAqL1xuICAgIHRoaXMud2lkdGggPSB3aWR0aCB8fCAwO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDBcbiAgICAgKi9cbiAgICB0aGlzLmhlaWdodCA9IGhlaWdodCB8fCAwO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHR5cGUgb2YgdGhlIG9iamVjdCwgbWFpbmx5IHVzZWQgdG8gYXZvaWQgYGluc3RhbmNlb2ZgIGNoZWNrc1xuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMudHlwZSA9IENPTlNULlNIQVBFUy5SRUNUO1xufVxuXG5SZWN0YW5nbGUucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gUmVjdGFuZ2xlO1xubW9kdWxlLmV4cG9ydHMgPSBSZWN0YW5nbGU7XG5cbi8qKlxuICogQSBjb25zdGFudCBlbXB0eSByZWN0YW5nbGUuXG4gKlxuICogQHN0YXRpY1xuICogQGNvbnN0YW50XG4gKi9cblJlY3RhbmdsZS5FTVBUWSA9IG5ldyBSZWN0YW5nbGUoMCwgMCwgMCwgMCk7XG5cblxuLyoqXG4gKiBDcmVhdGVzIGEgY2xvbmUgb2YgdGhpcyBSZWN0YW5nbGVcbiAqXG4gKiBAcmV0dXJuIHtQSVhJLlJlY3RhbmdsZX0gYSBjb3B5IG9mIHRoZSByZWN0YW5nbGVcbiAqL1xuUmVjdGFuZ2xlLnByb3RvdHlwZS5jbG9uZSA9IGZ1bmN0aW9uICgpXG57XG4gICAgcmV0dXJuIG5ldyBSZWN0YW5nbGUodGhpcy54LCB0aGlzLnksIHRoaXMud2lkdGgsIHRoaXMuaGVpZ2h0KTtcbn07XG5cbi8qKlxuICogQ2hlY2tzIHdoZXRoZXIgdGhlIHggYW5kIHkgY29vcmRpbmF0ZXMgZ2l2ZW4gYXJlIGNvbnRhaW5lZCB3aXRoaW4gdGhpcyBSZWN0YW5nbGVcbiAqXG4gKiBAcGFyYW0geCB7bnVtYmVyfSBUaGUgWCBjb29yZGluYXRlIG9mIHRoZSBwb2ludCB0byB0ZXN0XG4gKiBAcGFyYW0geSB7bnVtYmVyfSBUaGUgWSBjb29yZGluYXRlIG9mIHRoZSBwb2ludCB0byB0ZXN0XG4gKiBAcmV0dXJuIHtib29sZWFufSBXaGV0aGVyIHRoZSB4L3kgY29vcmRpbmF0ZXMgYXJlIHdpdGhpbiB0aGlzIFJlY3RhbmdsZVxuICovXG5SZWN0YW5nbGUucHJvdG90eXBlLmNvbnRhaW5zID0gZnVuY3Rpb24gKHgsIHkpXG57XG4gICAgaWYgKHRoaXMud2lkdGggPD0gMCB8fCB0aGlzLmhlaWdodCA8PSAwKVxuICAgIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGlmICh4ID49IHRoaXMueCAmJiB4IDwgdGhpcy54ICsgdGhpcy53aWR0aClcbiAgICB7XG4gICAgICAgIGlmICh5ID49IHRoaXMueSAmJiB5IDwgdGhpcy55ICsgdGhpcy5oZWlnaHQpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xufTtcbiIsInZhciBDT05TVCA9IHJlcXVpcmUoJy4uLy4uL2NvbnN0Jyk7XG5cbi8qKlxuICogVGhlIFJvdW5kZWQgUmVjdGFuZ2xlIG9iamVjdCBpcyBhbiBhcmVhIHRoYXQgaGFzIG5pY2Ugcm91bmRlZCBjb3JuZXJzLCBhcyBpbmRpY2F0ZWQgYnkgaXRzIHRvcC1sZWZ0IGNvcm5lciBwb2ludCAoeCwgeSkgYW5kIGJ5IGl0cyB3aWR0aCBhbmQgaXRzIGhlaWdodCBhbmQgaXRzIHJhZGl1cy5cbiAqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0geCB7bnVtYmVyfSBUaGUgWCBjb29yZGluYXRlIG9mIHRoZSB1cHBlci1sZWZ0IGNvcm5lciBvZiB0aGUgcm91bmRlZCByZWN0YW5nbGVcbiAqIEBwYXJhbSB5IHtudW1iZXJ9IFRoZSBZIGNvb3JkaW5hdGUgb2YgdGhlIHVwcGVyLWxlZnQgY29ybmVyIG9mIHRoZSByb3VuZGVkIHJlY3RhbmdsZVxuICogQHBhcmFtIHdpZHRoIHtudW1iZXJ9IFRoZSBvdmVyYWxsIHdpZHRoIG9mIHRoaXMgcm91bmRlZCByZWN0YW5nbGVcbiAqIEBwYXJhbSBoZWlnaHQge251bWJlcn0gVGhlIG92ZXJhbGwgaGVpZ2h0IG9mIHRoaXMgcm91bmRlZCByZWN0YW5nbGVcbiAqIEBwYXJhbSByYWRpdXMge251bWJlcn0gQ29udHJvbHMgdGhlIHJhZGl1cyBvZiB0aGUgcm91bmRlZCBjb3JuZXJzXG4gKi9cbmZ1bmN0aW9uIFJvdW5kZWRSZWN0YW5nbGUoeCwgeSwgd2lkdGgsIGhlaWdodCwgcmFkaXVzKVxue1xuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAwXG4gICAgICovXG4gICAgdGhpcy54ID0geCB8fCAwO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDBcbiAgICAgKi9cbiAgICB0aGlzLnkgPSB5IHx8IDA7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMFxuICAgICAqL1xuICAgIHRoaXMud2lkdGggPSB3aWR0aCB8fCAwO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDBcbiAgICAgKi9cbiAgICB0aGlzLmhlaWdodCA9IGhlaWdodCB8fCAwO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDIwXG4gICAgICovXG4gICAgdGhpcy5yYWRpdXMgPSByYWRpdXMgfHwgMjA7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgdHlwZSBvZiB0aGUgb2JqZWN0LCBtYWlubHkgdXNlZCB0byBhdm9pZCBgaW5zdGFuY2VvZmAgY2hlY2tzXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy50eXBlID0gQ09OU1QuU0hBUEVTLlJSRUM7XG59XG5cblJvdW5kZWRSZWN0YW5nbGUucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gUm91bmRlZFJlY3RhbmdsZTtcbm1vZHVsZS5leHBvcnRzID0gUm91bmRlZFJlY3RhbmdsZTtcblxuLyoqXG4gKiBDcmVhdGVzIGEgY2xvbmUgb2YgdGhpcyBSb3VuZGVkIFJlY3RhbmdsZVxuICpcbiAqIEByZXR1cm4ge1BJWEkuUm91bmRlZFJlY3RhbmdsZX0gYSBjb3B5IG9mIHRoZSByb3VuZGVkIHJlY3RhbmdsZVxuICovXG5Sb3VuZGVkUmVjdGFuZ2xlLnByb3RvdHlwZS5jbG9uZSA9IGZ1bmN0aW9uICgpXG57XG4gICAgcmV0dXJuIG5ldyBSb3VuZGVkUmVjdGFuZ2xlKHRoaXMueCwgdGhpcy55LCB0aGlzLndpZHRoLCB0aGlzLmhlaWdodCwgdGhpcy5yYWRpdXMpO1xufTtcblxuLyoqXG4gKiBDaGVja3Mgd2hldGhlciB0aGUgeCBhbmQgeSBjb29yZGluYXRlcyBnaXZlbiBhcmUgY29udGFpbmVkIHdpdGhpbiB0aGlzIFJvdW5kZWQgUmVjdGFuZ2xlXG4gKlxuICogQHBhcmFtIHgge251bWJlcn0gVGhlIFggY29vcmRpbmF0ZSBvZiB0aGUgcG9pbnQgdG8gdGVzdFxuICogQHBhcmFtIHkge251bWJlcn0gVGhlIFkgY29vcmRpbmF0ZSBvZiB0aGUgcG9pbnQgdG8gdGVzdFxuICogQHJldHVybiB7Ym9vbGVhbn0gV2hldGhlciB0aGUgeC95IGNvb3JkaW5hdGVzIGFyZSB3aXRoaW4gdGhpcyBSb3VuZGVkIFJlY3RhbmdsZVxuICovXG5Sb3VuZGVkUmVjdGFuZ2xlLnByb3RvdHlwZS5jb250YWlucyA9IGZ1bmN0aW9uICh4LCB5KVxue1xuICAgIGlmICh0aGlzLndpZHRoIDw9IDAgfHwgdGhpcy5oZWlnaHQgPD0gMClcbiAgICB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBpZiAoeCA+PSB0aGlzLnggJiYgeCA8PSB0aGlzLnggKyB0aGlzLndpZHRoKVxuICAgIHtcbiAgICAgICAgaWYgKHkgPj0gdGhpcy55ICYmIHkgPD0gdGhpcy55ICsgdGhpcy5oZWlnaHQpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xufTtcbiIsInZhciBDb250YWluZXIgPSByZXF1aXJlKCcuLi9kaXNwbGF5L0NvbnRhaW5lcicpLFxuICAgIENPTlNUID0gcmVxdWlyZSgnLi4vY29uc3QnKTtcblxuLyoqXG4gKiBUaGUgUGFydGljbGVDb250YWluZXIgY2xhc3MgaXMgYSByZWFsbHkgZmFzdCB2ZXJzaW9uIG9mIHRoZSBDb250YWluZXIgYnVpbHQgc29sZWx5IGZvciBzcGVlZCxcbiAqIHNvIHVzZSB3aGVuIHlvdSBuZWVkIGEgbG90IG9mIHNwcml0ZXMgb3IgcGFydGljbGVzLiBUaGUgdHJhZGVvZmYgb2YgdGhlIFBhcnRpY2xlQ29udGFpbmVyIGlzIHRoYXQgYWR2YW5jZWRcbiAqIGZ1bmN0aW9uYWxpdHkgd2lsbCBub3Qgd29yay4gUGFydGljbGVDb250YWluZXIgaW1wbGVtZW50cyBvbmx5IHRoZSBiYXNpYyBvYmplY3QgdHJhbnNmb3JtIChwb3NpdGlvbiwgc2NhbGUsIHJvdGF0aW9uKS5cbiAqIEFueSBvdGhlciBmdW5jdGlvbmFsaXR5IGxpa2UgdGludGluZywgbWFza2luZywgZXRjIHdpbGwgbm90IHdvcmsgb24gc3ByaXRlcyBpbiB0aGlzIGJhdGNoLlxuICpcbiAqIEl0J3MgZXh0cmVtZWx5IGVhc3kgdG8gdXNlIDpcbiAqXG4gKiBgYGBqc1xuICogdmFyIGNvbnRhaW5lciA9IG5ldyBQYXJ0aWNsZUNvbnRhaW5lcigpO1xuICpcbiAqIGZvciAodmFyIGkgPSAwOyBpIDwgMTAwOyArK2kpXG4gKiB7XG4gKiAgICAgdmFyIHNwcml0ZSA9IG5ldyBQSVhJLlNwcml0ZS5mcm9tSW1hZ2UoXCJteUltYWdlLnBuZ1wiKTtcbiAqICAgICBjb250YWluZXIuYWRkQ2hpbGQoc3ByaXRlKTtcbiAqIH1cbiAqIGBgYFxuICpcbiAqIEFuZCBoZXJlIHlvdSBoYXZlIGEgaHVuZHJlZCBzcHJpdGVzIHRoYXQgd2lsbCBiZSByZW5kZXJlciBhdCB0aGUgc3BlZWQgb2YgbGlnaHQuXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLkNvbnRhaW5lclxuICogQG1lbWJlcm9mIFBJWElcbiAqIEBwYXJhbSBbbWF4U2l6ZT0xNTAwMF0ge251bWJlcn0gVGhlIG1heGltdW0gbnVtYmVyIG9mIHBhcnRpY2xlcyB0aGF0IGNhbiBiZSByZW5kZXJlciBieSB0aGUgY29udGFpbmVyLlxuICogQHBhcmFtIFtwcm9wZXJ0aWVzXSB7b2JqZWN0fSBUaGUgcHJvcGVydGllcyBvZiBjaGlsZHJlbiB0aGF0IHNob3VsZCBiZSB1cGxvYWRlZCB0byB0aGUgZ3B1IGFuZCBhcHBsaWVkLlxuICogQHBhcmFtIFtwcm9wZXJ0aWVzLnNjYWxlPWZhbHNlXSB7Ym9vbGVhbn0gV2hlbiB0cnVlLCBzY2FsZSBiZSB1cGxvYWRlZCBhbmQgYXBwbGllZC5cbiAqIEBwYXJhbSBbcHJvcGVydGllcy5wb3NpdGlvbj10cnVlXSB7Ym9vbGVhbn0gV2hlbiB0cnVlLCBwb3NpdGlvbiBiZSB1cGxvYWRlZCBhbmQgYXBwbGllZC5cbiAqIEBwYXJhbSBbcHJvcGVydGllcy5yb3RhdGlvbj1mYWxzZV0ge2Jvb2xlYW59IFdoZW4gdHJ1ZSwgcm90YXRpb24gYmUgdXBsb2FkZWQgYW5kIGFwcGxpZWQuXG4gKiBAcGFyYW0gW3Byb3BlcnRpZXMudXZzPWZhbHNlXSB7Ym9vbGVhbn0gV2hlbiB0cnVlLCB1dnMgYmUgdXBsb2FkZWQgYW5kIGFwcGxpZWQuXG4gKiBAcGFyYW0gW3Byb3BlcnRpZXMuYWxwaGE9ZmFsc2VdIHtib29sZWFufSBXaGVuIHRydWUsIGFscGhhIGJlIHVwbG9hZGVkIGFuZCBhcHBsaWVkLlxuICogQHBhcmFtIFtiYXRjaFNpemU9MTUwMDBdIHtudW1iZXJ9IE51bWJlciBvZiBwYXJ0aWNsZXMgcGVyIGJhdGNoLlxuICovXG5mdW5jdGlvbiBQYXJ0aWNsZUNvbnRhaW5lcihtYXhTaXplLCBwcm9wZXJ0aWVzLCBiYXRjaFNpemUpXG57XG4gICAgQ29udGFpbmVyLmNhbGwodGhpcyk7XG5cbiAgICBiYXRjaFNpemUgPSBiYXRjaFNpemUgfHwgMTUwMDA7IC8vQ09OU1QuU1BSSVRFX0JBVENIX1NJWkU7IC8vIDIwMDAgaXMgYSBuaWNlIGJhbGFuY2UgYmV0d2VlbiBtb2JpbGUgLyBkZXNrdG9wXG4gICAgbWF4U2l6ZSA9IG1heFNpemUgfHwgMTUwMDA7XG5cbiAgICAvLyBNYWtpbmcgc3VyZSB0aGUgYmF0Y2ggc2l6ZSBpcyB2YWxpZFxuICAgIC8vIDY1NTM1IGlzIG1heCB2ZXJ0ZXggaW5kZXggaW4gdGhlIGluZGV4IGJ1ZmZlciAoc2VlIFBhcnRpY2xlUmVuZGVyZXIpXG4gICAgLy8gc28gbWF4IG51bWJlciBvZiBwYXJ0aWNsZXMgaXMgNjU1MzYgLyA0ID0gMTYzODRcbiAgICB2YXIgbWF4QmF0Y2hTaXplID0gMTYzODQ7XG4gICAgaWYgKGJhdGNoU2l6ZSA+IG1heEJhdGNoU2l6ZSkge1xuICAgICAgICBiYXRjaFNpemUgPSBtYXhCYXRjaFNpemU7XG4gICAgfVxuXG4gICAgaWYgKGJhdGNoU2l6ZSA+IG1heFNpemUpIHtcbiAgICAgICAgYmF0Y2hTaXplID0gbWF4U2l6ZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTZXQgcHJvcGVydGllcyB0byBiZSBkeW5hbWljICh0cnVlKSAvIHN0YXRpYyAoZmFsc2UpXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFuW119XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9wcm9wZXJ0aWVzID0gW2ZhbHNlLCB0cnVlLCBmYWxzZSwgZmFsc2UsIGZhbHNlXTtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX21heFNpemUgPSBtYXhTaXplO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fYmF0Y2hTaXplID0gYmF0Y2hTaXplO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7V2ViR0xCdWZmZXJ9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9idWZmZXJzID0gbnVsbDtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX2J1ZmZlclRvVXBkYXRlID0gMDtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICpcbiAgICAgKi9cbiAgICB0aGlzLmludGVyYWN0aXZlQ2hpbGRyZW4gPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBibGVuZCBtb2RlIHRvIGJlIGFwcGxpZWQgdG8gdGhlIHNwcml0ZS4gQXBwbHkgYSB2YWx1ZSBvZiBgUElYSS5CTEVORF9NT0RFUy5OT1JNQUxgIHRvIHJlc2V0IHRoZSBibGVuZCBtb2RlLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IFBJWEkuQkxFTkRfTU9ERVMuTk9STUFMXG4gICAgICogQHNlZSBQSVhJLkJMRU5EX01PREVTXG4gICAgICovXG4gICAgdGhpcy5ibGVuZE1vZGUgPSBDT05TVC5CTEVORF9NT0RFUy5OT1JNQUw7XG5cbiAgICAvKipcbiAgICAgKiBVc2VkIGZvciBjYW52YXMgcmVuZGVyZXJpbmcuIElmIHRydWUgdGhlbiB0aGUgZWxlbWVudHMgd2lsbCBiZSBwb3NpdGlvbmVkIGF0IHRoZSBuZWFyZXN0IHBpeGVsLiBUaGlzIHByb3ZpZGVzIGEgbmljZSBzcGVlZCBib29zdC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICogQGRlZmF1bHQgdHJ1ZTtcbiAgICAgKi9cbiAgICB0aGlzLnJvdW5kUGl4ZWxzID0gdHJ1ZTtcblxuICAgIHRoaXMuc2V0UHJvcGVydGllcyhwcm9wZXJ0aWVzKTtcbn1cblxuUGFydGljbGVDb250YWluZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShDb250YWluZXIucHJvdG90eXBlKTtcblBhcnRpY2xlQ29udGFpbmVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFBhcnRpY2xlQ29udGFpbmVyO1xubW9kdWxlLmV4cG9ydHMgPSBQYXJ0aWNsZUNvbnRhaW5lcjtcblxuLyoqXG4gKiBTZXRzIHRoZSBwcml2YXRlIHByb3BlcnRpZXMgYXJyYXkgdG8gZHluYW1pYyAvIHN0YXRpYyBiYXNlZCBvbiB0aGUgcGFzc2VkIHByb3BlcnRpZXMgb2JqZWN0XG4gKlxuICogQHBhcmFtIHByb3BlcnRpZXMge29iamVjdH0gVGhlIHByb3BlcnRpZXMgdG8gYmUgdXBsb2FkZWRcbiAqL1xuUGFydGljbGVDb250YWluZXIucHJvdG90eXBlLnNldFByb3BlcnRpZXMgPSBmdW5jdGlvbihwcm9wZXJ0aWVzKVxue1xuICAgIGlmICggcHJvcGVydGllcyApIHtcbiAgICAgICAgdGhpcy5fcHJvcGVydGllc1swXSA9ICdzY2FsZScgaW4gcHJvcGVydGllcyA/ICEhcHJvcGVydGllcy5zY2FsZSA6IHRoaXMuX3Byb3BlcnRpZXNbMF07XG4gICAgICAgIHRoaXMuX3Byb3BlcnRpZXNbMV0gPSAncG9zaXRpb24nIGluIHByb3BlcnRpZXMgPyAhIXByb3BlcnRpZXMucG9zaXRpb24gOiB0aGlzLl9wcm9wZXJ0aWVzWzFdO1xuICAgICAgICB0aGlzLl9wcm9wZXJ0aWVzWzJdID0gJ3JvdGF0aW9uJyBpbiBwcm9wZXJ0aWVzID8gISFwcm9wZXJ0aWVzLnJvdGF0aW9uIDogdGhpcy5fcHJvcGVydGllc1syXTtcbiAgICAgICAgdGhpcy5fcHJvcGVydGllc1szXSA9ICd1dnMnIGluIHByb3BlcnRpZXMgPyAhIXByb3BlcnRpZXMudXZzIDogdGhpcy5fcHJvcGVydGllc1szXTtcbiAgICAgICAgdGhpcy5fcHJvcGVydGllc1s0XSA9ICdhbHBoYScgaW4gcHJvcGVydGllcyA/ICEhcHJvcGVydGllcy5hbHBoYSA6IHRoaXMuX3Byb3BlcnRpZXNbNF07XG4gICAgfVxufTtcblxuLyoqXG4gKiBVcGRhdGVzIHRoZSBvYmplY3QgdHJhbnNmb3JtIGZvciByZW5kZXJpbmdcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5QYXJ0aWNsZUNvbnRhaW5lci5wcm90b3R5cGUudXBkYXRlVHJhbnNmb3JtID0gZnVuY3Rpb24gKClcbntcblxuICAgIC8vIFRPRE8gZG9uJ3QgbmVlZCB0byFcbiAgICB0aGlzLmRpc3BsYXlPYmplY3RVcGRhdGVUcmFuc2Zvcm0oKTtcbiAgICAvLyAgUElYSS5Db250YWluZXIucHJvdG90eXBlLnVwZGF0ZVRyYW5zZm9ybS5jYWxsKCB0aGlzICk7XG59O1xuXG4vKipcbiAqIFJlbmRlcnMgdGhlIGNvbnRhaW5lciB1c2luZyB0aGUgV2ViR0wgcmVuZGVyZXJcbiAqXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcn0gVGhlIHdlYmdsIHJlbmRlcmVyXG4gKiBAcHJpdmF0ZVxuICovXG5QYXJ0aWNsZUNvbnRhaW5lci5wcm90b3R5cGUucmVuZGVyV2ViR0wgPSBmdW5jdGlvbiAocmVuZGVyZXIpXG57XG4gICAgaWYgKCF0aGlzLnZpc2libGUgfHwgdGhpcy53b3JsZEFscGhhIDw9IDAgfHwgIXRoaXMuY2hpbGRyZW4ubGVuZ3RoIHx8ICF0aGlzLnJlbmRlcmFibGUpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgcmVuZGVyZXIuc2V0T2JqZWN0UmVuZGVyZXIoIHJlbmRlcmVyLnBsdWdpbnMucGFydGljbGUgKTtcbiAgICByZW5kZXJlci5wbHVnaW5zLnBhcnRpY2xlLnJlbmRlciggdGhpcyApO1xufTtcblxuLyoqXG4gKiBTZXQgdGhlIGZsYWcgdGhhdCBzdGF0aWMgZGF0YSBzaG91bGQgYmUgdXBkYXRlZCB0byB0cnVlXG4gKlxuICogQHByaXZhdGVcbiAqL1xuUGFydGljbGVDb250YWluZXIucHJvdG90eXBlLm9uQ2hpbGRyZW5DaGFuZ2UgPSBmdW5jdGlvbiAoc21hbGxlc3RDaGlsZEluZGV4KVxue1xuICAgIHZhciBidWZmZXJJbmRleCA9IE1hdGguZmxvb3Ioc21hbGxlc3RDaGlsZEluZGV4IC8gdGhpcy5fYmF0Y2hTaXplKTtcbiAgICBpZiAoYnVmZmVySW5kZXggPCB0aGlzLl9idWZmZXJUb1VwZGF0ZSkge1xuICAgICAgICB0aGlzLl9idWZmZXJUb1VwZGF0ZSA9IGJ1ZmZlckluZGV4O1xuICAgIH1cbn07XG5cbi8qKlxuICogUmVuZGVycyB0aGUgb2JqZWN0IHVzaW5nIHRoZSBDYW52YXMgcmVuZGVyZXJcbiAqXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuQ2FudmFzUmVuZGVyZXJ9IFRoZSBjYW52YXMgcmVuZGVyZXJcbiAqIEBwcml2YXRlXG4gKi9cblBhcnRpY2xlQ29udGFpbmVyLnByb3RvdHlwZS5yZW5kZXJDYW52YXMgPSBmdW5jdGlvbiAocmVuZGVyZXIpXG57XG4gICAgaWYgKCF0aGlzLnZpc2libGUgfHwgdGhpcy53b3JsZEFscGhhIDw9IDAgfHwgIXRoaXMuY2hpbGRyZW4ubGVuZ3RoIHx8ICF0aGlzLnJlbmRlcmFibGUpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFyIGNvbnRleHQgPSByZW5kZXJlci5jb250ZXh0O1xuICAgIHZhciB0cmFuc2Zvcm0gPSB0aGlzLndvcmxkVHJhbnNmb3JtO1xuICAgIHZhciBpc1JvdGF0ZWQgPSB0cnVlO1xuXG4gICAgdmFyIHBvc2l0aW9uWCA9IDA7XG4gICAgdmFyIHBvc2l0aW9uWSA9IDA7XG5cbiAgICB2YXIgZmluYWxXaWR0aCA9IDA7XG4gICAgdmFyIGZpbmFsSGVpZ2h0ID0gMDtcblxuICAgIHZhciBjb21wb3NpdGVPcGVyYXRpb24gPSByZW5kZXJlci5ibGVuZE1vZGVzW3RoaXMuYmxlbmRNb2RlXTtcbiAgICBpZiAoY29tcG9zaXRlT3BlcmF0aW9uICE9PSBjb250ZXh0Lmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbilcbiAgICB7XG4gICAgICAgIGNvbnRleHQuZ2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uID0gY29tcG9zaXRlT3BlcmF0aW9uO1xuICAgIH1cblxuICAgIGNvbnRleHQuZ2xvYmFsQWxwaGEgPSB0aGlzLndvcmxkQWxwaGE7XG5cbiAgICB0aGlzLmRpc3BsYXlPYmplY3RVcGRhdGVUcmFuc2Zvcm0oKTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5jaGlsZHJlbi5sZW5ndGg7ICsraSlcbiAgICB7XG4gICAgICAgIHZhciBjaGlsZCA9IHRoaXMuY2hpbGRyZW5baV07XG5cbiAgICAgICAgaWYgKCFjaGlsZC52aXNpYmxlKVxuICAgICAgICB7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBmcmFtZSA9IGNoaWxkLnRleHR1cmUuZnJhbWU7XG5cbiAgICAgICAgY29udGV4dC5nbG9iYWxBbHBoYSA9IHRoaXMud29ybGRBbHBoYSAqIGNoaWxkLmFscGhhO1xuXG4gICAgICAgIGlmIChjaGlsZC5yb3RhdGlvbiAlIChNYXRoLlBJICogMikgPT09IDApXG4gICAgICAgIHtcbiAgICAgICAgICAgIC8vIHRoaXMgaXMgdGhlIGZhc3Rlc3QgIHdheSB0byBvcHRpbWlzZSEgLSBpZiByb3RhdGlvbiBpcyAwIHRoZW4gd2UgY2FuIGF2b2lkIGFueSBraW5kIG9mIHNldFRyYW5zZm9ybSBjYWxsXG4gICAgICAgICAgICBpZiAoaXNSb3RhdGVkKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGNvbnRleHQuc2V0VHJhbnNmb3JtKFxuICAgICAgICAgICAgICAgICAgICB0cmFuc2Zvcm0uYSxcbiAgICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtLmIsXG4gICAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybS5jLFxuICAgICAgICAgICAgICAgICAgICB0cmFuc2Zvcm0uZCxcbiAgICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtLnR4LFxuICAgICAgICAgICAgICAgICAgICB0cmFuc2Zvcm0udHlcbiAgICAgICAgICAgICAgICApO1xuXG4gICAgICAgICAgICAgICAgaXNSb3RhdGVkID0gZmFsc2U7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHBvc2l0aW9uWCA9ICgoY2hpbGQuYW5jaG9yLngpICogKC1mcmFtZS53aWR0aCAqIGNoaWxkLnNjYWxlLngpICsgY2hpbGQucG9zaXRpb24ueCAgKyAwLjUpO1xuICAgICAgICAgICAgcG9zaXRpb25ZID0gKChjaGlsZC5hbmNob3IueSkgKiAoLWZyYW1lLmhlaWdodCAqIGNoaWxkLnNjYWxlLnkpICsgY2hpbGQucG9zaXRpb24ueSAgKyAwLjUpO1xuXG4gICAgICAgICAgICBmaW5hbFdpZHRoID0gZnJhbWUud2lkdGggKiBjaGlsZC5zY2FsZS54O1xuICAgICAgICAgICAgZmluYWxIZWlnaHQgPSBmcmFtZS5oZWlnaHQgKiBjaGlsZC5zY2FsZS55O1xuXG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgICBpZiAoIWlzUm90YXRlZClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBpc1JvdGF0ZWQgPSB0cnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjaGlsZC5kaXNwbGF5T2JqZWN0VXBkYXRlVHJhbnNmb3JtKCk7XG5cbiAgICAgICAgICAgIHZhciBjaGlsZFRyYW5zZm9ybSA9IGNoaWxkLndvcmxkVHJhbnNmb3JtO1xuXG4gICAgICAgICAgICBpZiAocmVuZGVyZXIucm91bmRQaXhlbHMpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29udGV4dC5zZXRUcmFuc2Zvcm0oXG4gICAgICAgICAgICAgICAgICAgIGNoaWxkVHJhbnNmb3JtLmEsXG4gICAgICAgICAgICAgICAgICAgIGNoaWxkVHJhbnNmb3JtLmIsXG4gICAgICAgICAgICAgICAgICAgIGNoaWxkVHJhbnNmb3JtLmMsXG4gICAgICAgICAgICAgICAgICAgIGNoaWxkVHJhbnNmb3JtLmQsXG4gICAgICAgICAgICAgICAgICAgIGNoaWxkVHJhbnNmb3JtLnR4IHwgMCxcbiAgICAgICAgICAgICAgICAgICAgY2hpbGRUcmFuc2Zvcm0udHkgfCAwXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb250ZXh0LnNldFRyYW5zZm9ybShcbiAgICAgICAgICAgICAgICAgICAgY2hpbGRUcmFuc2Zvcm0uYSxcbiAgICAgICAgICAgICAgICAgICAgY2hpbGRUcmFuc2Zvcm0uYixcbiAgICAgICAgICAgICAgICAgICAgY2hpbGRUcmFuc2Zvcm0uYyxcbiAgICAgICAgICAgICAgICAgICAgY2hpbGRUcmFuc2Zvcm0uZCxcbiAgICAgICAgICAgICAgICAgICAgY2hpbGRUcmFuc2Zvcm0udHgsXG4gICAgICAgICAgICAgICAgICAgIGNoaWxkVHJhbnNmb3JtLnR5XG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcG9zaXRpb25YID0gKChjaGlsZC5hbmNob3IueCkgKiAoLWZyYW1lLndpZHRoKSArIDAuNSk7XG4gICAgICAgICAgICBwb3NpdGlvblkgPSAoKGNoaWxkLmFuY2hvci55KSAqICgtZnJhbWUuaGVpZ2h0KSArIDAuNSk7XG5cbiAgICAgICAgICAgIGZpbmFsV2lkdGggPSBmcmFtZS53aWR0aDtcbiAgICAgICAgICAgIGZpbmFsSGVpZ2h0ID0gZnJhbWUuaGVpZ2h0O1xuICAgICAgICB9XG5cbiAgICAgICAgY29udGV4dC5kcmF3SW1hZ2UoXG4gICAgICAgICAgICBjaGlsZC50ZXh0dXJlLmJhc2VUZXh0dXJlLnNvdXJjZSxcbiAgICAgICAgICAgIGZyYW1lLngsXG4gICAgICAgICAgICBmcmFtZS55LFxuICAgICAgICAgICAgZnJhbWUud2lkdGgsXG4gICAgICAgICAgICBmcmFtZS5oZWlnaHQsXG4gICAgICAgICAgICBwb3NpdGlvblgsXG4gICAgICAgICAgICBwb3NpdGlvblksXG4gICAgICAgICAgICBmaW5hbFdpZHRoLFxuICAgICAgICAgICAgZmluYWxIZWlnaHRcbiAgICAgICAgKTtcbiAgICB9XG59O1xuXG4vKipcbiAqIERlc3Ryb3lzIHRoZSBjb250YWluZXJcbiAqXG4gKiBAcGFyYW0gW2Rlc3Ryb3lDaGlsZHJlbj1mYWxzZV0ge2Jvb2xlYW59IGlmIHNldCB0byB0cnVlLCBhbGwgdGhlIGNoaWxkcmVuIHdpbGwgaGF2ZSB0aGVpciBkZXN0cm95IG1ldGhvZCBjYWxsZWQgYXMgd2VsbFxuICovXG5QYXJ0aWNsZUNvbnRhaW5lci5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uICgpIHtcbiAgICBDb250YWluZXIucHJvdG90eXBlLmRlc3Ryb3kuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcblxuICAgIGlmICh0aGlzLl9idWZmZXJzKSB7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5fYnVmZmVycy5sZW5ndGg7ICsraSkge1xuICAgICAgICAgICAgdGhpcy5fYnVmZmVyc1tpXS5kZXN0cm95KCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLl9wcm9wZXJ0aWVzID0gbnVsbDtcbiAgICB0aGlzLl9idWZmZXJzID0gbnVsbDtcbn07XG4iLCJcbi8qKlxuICogQGF1dGhvciBNYXQgR3JvdmVzXG4gKlxuICogQmlnIHRoYW5rcyB0byB0aGUgdmVyeSBjbGV2ZXIgTWF0dCBEZXNMYXVyaWVycyA8bWF0dGRlc2w+IGh0dHBzOi8vZ2l0aHViLmNvbS9tYXR0ZGVzbC9cbiAqIGZvciBjcmVhdGluZyB0aGUgb3JpZ2luYWwgcGl4aSB2ZXJzaW9uIVxuICogQWxzbyBhIHRoYW5rcyB0byBodHRwczovL2dpdGh1Yi5jb20vYmNoZXZhbGllciBmb3IgdHdlYWtpbmcgdGhlIHRpbnQgYW5kIGFscGhhIHNvIHRoYXQgdGhleSBub3cgc2hhcmUgNCBieXRlcyBvbiB0aGUgdmVydGV4IGJ1ZmZlclxuICpcbiAqIEhlYXZpbHkgaW5zcGlyZWQgYnkgTGliR0RYJ3MgUGFydGljbGVCdWZmZXI6XG4gKiBodHRwczovL2dpdGh1Yi5jb20vbGliZ2R4L2xpYmdkeC9ibG9iL21hc3Rlci9nZHgvc3JjL2NvbS9iYWRsb2dpYy9nZHgvZ3JhcGhpY3MvZzJkL1BhcnRpY2xlQnVmZmVyLmphdmFcbiAqL1xuXG4vKipcbiAqIFRoZSBwYXJ0aWNsZSBidWZmZXIgbWFuYWdlcyB0aGUgc3RhdGljIGFuZCBkeW5hbWljIGJ1ZmZlcnMgZm9yIGEgcGFydGljbGUgY29udGFpbmVyLlxuICpcbiAqIEBjbGFzc1xuICogQHByaXZhdGVcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKi9cbmZ1bmN0aW9uIFBhcnRpY2xlQnVmZmVyKGdsLCBwcm9wZXJ0aWVzLCBkeW5hbWljUHJvcGVydHlGbGFncywgc2l6ZSlcbntcbiAgICAvKipcbiAgICAgKiBUaGUgY3VycmVudCBXZWJHTCBkcmF3aW5nIGNvbnRleHQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtXZWJHTFJlbmRlcmluZ0NvbnRleHR9XG4gICAgICovXG4gICAgdGhpcy5nbCA9IGdsO1xuXG4gICAgLyoqXG4gICAgICogU2l6ZSBvZiBhIHNpbmdsZSB2ZXJ0ZXguXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy52ZXJ0U2l6ZSA9IDI7XG5cbiAgICAvKipcbiAgICAgKiBTaXplIG9mIGEgc2luZ2xlIHZlcnRleCBpbiBieXRlcy5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLnZlcnRCeXRlU2l6ZSA9IHRoaXMudmVydFNpemUgKiA0O1xuXG4gICAgLyoqXG4gICAgICogVGhlIG51bWJlciBvZiBwYXJ0aWNsZXMgdGhlIGJ1ZmZlciBjYW4gaG9sZFxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMuc2l6ZSA9IHNpemU7XG5cbiAgICAvKipcbiAgICAgKiBBIGxpc3Qgb2YgdGhlIHByb3BlcnRpZXMgdGhhdCBhcmUgZHluYW1pYy5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge29iamVjdFtdfVxuICAgICAqL1xuICAgIHRoaXMuZHluYW1pY1Byb3BlcnRpZXMgPSBbXTtcblxuICAgIC8qKlxuICAgICAqIEEgbGlzdCBvZiB0aGUgcHJvcGVydGllcyB0aGF0IGFyZSBzdGF0aWMuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtvYmplY3RbXX1cbiAgICAgKi9cbiAgICB0aGlzLnN0YXRpY1Byb3BlcnRpZXMgPSBbXTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcGVydGllcy5sZW5ndGg7IGkrKylcbiAgICB7XG4gICAgICAgIHZhciBwcm9wZXJ0eSA9IHByb3BlcnRpZXNbaV07XG5cbiAgICAgICAgaWYoZHluYW1pY1Byb3BlcnR5RmxhZ3NbaV0pXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuZHluYW1pY1Byb3BlcnRpZXMucHVzaChwcm9wZXJ0eSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnN0YXRpY1Byb3BlcnRpZXMucHVzaChwcm9wZXJ0eSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLnN0YXRpY1N0cmlkZSA9IDA7XG4gICAgdGhpcy5zdGF0aWNCdWZmZXIgPSBudWxsO1xuICAgIHRoaXMuc3RhdGljRGF0YSA9IG51bGw7XG5cbiAgICB0aGlzLmR5bmFtaWNTdHJpZGUgPSAwO1xuICAgIHRoaXMuZHluYW1pY0J1ZmZlciA9IG51bGw7XG4gICAgdGhpcy5keW5hbWljRGF0YSA9IG51bGw7XG5cbiAgICB0aGlzLmluaXRCdWZmZXJzKCk7XG5cbn1cblxuUGFydGljbGVCdWZmZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gUGFydGljbGVCdWZmZXI7XG5tb2R1bGUuZXhwb3J0cyA9IFBhcnRpY2xlQnVmZmVyO1xuXG4vKipcbiAqIFNldHMgdXAgdGhlIHJlbmRlcmVyIGNvbnRleHQgYW5kIG5lY2Vzc2FyeSBidWZmZXJzLlxuICpcbiAqIEBwcml2YXRlXG4gKi9cblBhcnRpY2xlQnVmZmVyLnByb3RvdHlwZS5pbml0QnVmZmVycyA9IGZ1bmN0aW9uICgpXG57XG4gICAgdmFyIGdsID0gdGhpcy5nbDtcbiAgICB2YXIgaTtcbiAgICB2YXIgcHJvcGVydHk7XG5cbiAgICB2YXIgZHluYW1pY09mZnNldCA9IDA7XG4gICAgdGhpcy5keW5hbWljU3RyaWRlID0gMDtcblxuICAgIGZvciAoaSA9IDA7IGkgPCB0aGlzLmR5bmFtaWNQcm9wZXJ0aWVzLmxlbmd0aDsgaSsrKVxuICAgIHtcbiAgICAgICAgcHJvcGVydHkgPSB0aGlzLmR5bmFtaWNQcm9wZXJ0aWVzW2ldO1xuXG4gICAgICAgIHByb3BlcnR5Lm9mZnNldCA9IGR5bmFtaWNPZmZzZXQ7XG4gICAgICAgIGR5bmFtaWNPZmZzZXQgKz0gcHJvcGVydHkuc2l6ZTtcbiAgICAgICAgdGhpcy5keW5hbWljU3RyaWRlICs9IHByb3BlcnR5LnNpemU7XG4gICAgfVxuXG4gICAgdGhpcy5keW5hbWljRGF0YSA9IG5ldyBGbG9hdDMyQXJyYXkoIHRoaXMuc2l6ZSAqIHRoaXMuZHluYW1pY1N0cmlkZSAqIDQpO1xuICAgIHRoaXMuZHluYW1pY0J1ZmZlciA9IGdsLmNyZWF0ZUJ1ZmZlcigpO1xuXG4gICAgZ2wuYmluZEJ1ZmZlcihnbC5BUlJBWV9CVUZGRVIsIHRoaXMuZHluYW1pY0J1ZmZlcik7XG4gICAgZ2wuYnVmZmVyRGF0YShnbC5BUlJBWV9CVUZGRVIsIHRoaXMuZHluYW1pY0RhdGEsIGdsLkRZTkFNSUNfRFJBVyk7XG5cblxuICAgIC8vIHN0YXRpYyAvL1xuICAgIHZhciBzdGF0aWNPZmZzZXQgPSAwO1xuICAgIHRoaXMuc3RhdGljU3RyaWRlID0gMDtcblxuICAgIGZvciAoaSA9IDA7IGkgPCB0aGlzLnN0YXRpY1Byb3BlcnRpZXMubGVuZ3RoOyBpKyspXG4gICAge1xuICAgICAgICBwcm9wZXJ0eSA9IHRoaXMuc3RhdGljUHJvcGVydGllc1tpXTtcblxuICAgICAgICBwcm9wZXJ0eS5vZmZzZXQgPSBzdGF0aWNPZmZzZXQ7XG4gICAgICAgIHN0YXRpY09mZnNldCArPSBwcm9wZXJ0eS5zaXplO1xuICAgICAgICB0aGlzLnN0YXRpY1N0cmlkZSArPSBwcm9wZXJ0eS5zaXplO1xuICAgIH1cblxuICAgIHRoaXMuc3RhdGljRGF0YSA9IG5ldyBGbG9hdDMyQXJyYXkoIHRoaXMuc2l6ZSAqIHRoaXMuc3RhdGljU3RyaWRlICogNCk7XG4gICAgdGhpcy5zdGF0aWNCdWZmZXIgPSBnbC5jcmVhdGVCdWZmZXIoKTtcblxuICAgIGdsLmJpbmRCdWZmZXIoZ2wuQVJSQVlfQlVGRkVSLCB0aGlzLnN0YXRpY0J1ZmZlcik7XG4gICAgZ2wuYnVmZmVyRGF0YShnbC5BUlJBWV9CVUZGRVIsIHRoaXMuc3RhdGljRGF0YSwgZ2wuRFlOQU1JQ19EUkFXKTtcbn07XG5cbi8qKlxuICogVXBsb2FkcyB0aGUgZHluYW1pYyBwcm9wZXJ0aWVzLlxuICpcbiAqL1xuUGFydGljbGVCdWZmZXIucHJvdG90eXBlLnVwbG9hZER5bmFtaWMgPSBmdW5jdGlvbihjaGlsZHJlbiwgc3RhcnRJbmRleCwgYW1vdW50KVxue1xuICAgIHZhciBnbCA9IHRoaXMuZ2w7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuZHluYW1pY1Byb3BlcnRpZXMubGVuZ3RoOyBpKyspXG4gICAge1xuICAgICAgICB2YXIgcHJvcGVydHkgPSB0aGlzLmR5bmFtaWNQcm9wZXJ0aWVzW2ldO1xuICAgICAgICBwcm9wZXJ0eS51cGxvYWRGdW5jdGlvbihjaGlsZHJlbiwgc3RhcnRJbmRleCwgYW1vdW50LCB0aGlzLmR5bmFtaWNEYXRhLCB0aGlzLmR5bmFtaWNTdHJpZGUsIHByb3BlcnR5Lm9mZnNldCk7XG4gICAgfVxuXG4gICAgZ2wuYmluZEJ1ZmZlcihnbC5BUlJBWV9CVUZGRVIsIHRoaXMuZHluYW1pY0J1ZmZlcik7XG4gICAgZ2wuYnVmZmVyU3ViRGF0YShnbC5BUlJBWV9CVUZGRVIsIDAsIHRoaXMuZHluYW1pY0RhdGEpO1xufTtcblxuLyoqXG4gKiBVcGxvYWRzIHRoZSBzdGF0aWMgcHJvcGVydGllcy5cbiAqXG4gKi9cblBhcnRpY2xlQnVmZmVyLnByb3RvdHlwZS51cGxvYWRTdGF0aWMgPSBmdW5jdGlvbihjaGlsZHJlbiwgc3RhcnRJbmRleCwgYW1vdW50KVxue1xuICAgIHZhciBnbCA9IHRoaXMuZ2w7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuc3RhdGljUHJvcGVydGllcy5sZW5ndGg7IGkrKylcbiAgICB7XG4gICAgICAgIHZhciBwcm9wZXJ0eSA9IHRoaXMuc3RhdGljUHJvcGVydGllc1tpXTtcbiAgICAgICAgcHJvcGVydHkudXBsb2FkRnVuY3Rpb24oY2hpbGRyZW4sIHN0YXJ0SW5kZXgsIGFtb3VudCwgdGhpcy5zdGF0aWNEYXRhLCB0aGlzLnN0YXRpY1N0cmlkZSwgcHJvcGVydHkub2Zmc2V0KTtcbiAgICB9XG5cbiAgICBnbC5iaW5kQnVmZmVyKGdsLkFSUkFZX0JVRkZFUiwgdGhpcy5zdGF0aWNCdWZmZXIpO1xuICAgIGdsLmJ1ZmZlclN1YkRhdGEoZ2wuQVJSQVlfQlVGRkVSLCAwLCB0aGlzLnN0YXRpY0RhdGEpO1xufTtcblxuLyoqXG4gKiBCaW5kcyB0aGUgYnVmZmVycyB0byB0aGUgR1BVXG4gKlxuICovXG5QYXJ0aWNsZUJ1ZmZlci5wcm90b3R5cGUuYmluZCA9IGZ1bmN0aW9uICgpXG57XG4gICAgdmFyIGdsID0gdGhpcy5nbDtcbiAgICB2YXIgaSwgcHJvcGVydHk7XG5cbiAgICBnbC5iaW5kQnVmZmVyKGdsLkFSUkFZX0JVRkZFUiwgdGhpcy5keW5hbWljQnVmZmVyKTtcblxuICAgIGZvciAoaSA9IDA7IGkgPCB0aGlzLmR5bmFtaWNQcm9wZXJ0aWVzLmxlbmd0aDsgaSsrKVxuICAgIHtcbiAgICAgICAgcHJvcGVydHkgPSB0aGlzLmR5bmFtaWNQcm9wZXJ0aWVzW2ldO1xuICAgICAgICBnbC52ZXJ0ZXhBdHRyaWJQb2ludGVyKHByb3BlcnR5LmF0dHJpYnV0ZSwgcHJvcGVydHkuc2l6ZSwgZ2wuRkxPQVQsIGZhbHNlLCB0aGlzLmR5bmFtaWNTdHJpZGUgKiA0LCBwcm9wZXJ0eS5vZmZzZXQgKiA0KTtcbiAgICB9XG5cbiAgICBnbC5iaW5kQnVmZmVyKGdsLkFSUkFZX0JVRkZFUiwgdGhpcy5zdGF0aWNCdWZmZXIpO1xuXG4gICAgZm9yIChpID0gMDsgaSA8IHRoaXMuc3RhdGljUHJvcGVydGllcy5sZW5ndGg7IGkrKylcbiAgICB7XG4gICAgICAgIHByb3BlcnR5ID0gdGhpcy5zdGF0aWNQcm9wZXJ0aWVzW2ldO1xuICAgICAgICBnbC52ZXJ0ZXhBdHRyaWJQb2ludGVyKHByb3BlcnR5LmF0dHJpYnV0ZSwgcHJvcGVydHkuc2l6ZSwgZ2wuRkxPQVQsIGZhbHNlLCB0aGlzLnN0YXRpY1N0cmlkZSAqIDQsIHByb3BlcnR5Lm9mZnNldCAqIDQpO1xuICAgIH1cbn07XG5cbi8qKlxuICogRGVzdHJveXMgdGhlIFBhcnRpY2xlQnVmZmVyLlxuICpcbiAqL1xuUGFydGljbGVCdWZmZXIucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoKVxue1xuICAgIHRoaXMuZHluYW1pY1Byb3BlcnRpZXMgPSBudWxsO1xuICAgIHRoaXMuZHluYW1pY0RhdGEgPSBudWxsO1xuICAgIHRoaXMuZ2wuZGVsZXRlQnVmZmVyKHRoaXMuZHluYW1pY0J1ZmZlcik7XG5cbiAgICB0aGlzLnN0YXRpY1Byb3BlcnRpZXMgPSBudWxsO1xuICAgIHRoaXMuc3RhdGljRGF0YSA9IG51bGw7XG4gICAgdGhpcy5nbC5kZWxldGVCdWZmZXIodGhpcy5zdGF0aWNCdWZmZXIpO1xufTtcbiIsInZhciBPYmplY3RSZW5kZXJlciA9IHJlcXVpcmUoJy4uLy4uL3JlbmRlcmVycy93ZWJnbC91dGlscy9PYmplY3RSZW5kZXJlcicpLFxuICAgIFdlYkdMUmVuZGVyZXIgPSByZXF1aXJlKCcuLi8uLi9yZW5kZXJlcnMvd2ViZ2wvV2ViR0xSZW5kZXJlcicpLFxuICAgIFBhcnRpY2xlU2hhZGVyID0gcmVxdWlyZSgnLi9QYXJ0aWNsZVNoYWRlcicpLFxuICAgIFBhcnRpY2xlQnVmZmVyID0gcmVxdWlyZSgnLi9QYXJ0aWNsZUJ1ZmZlcicpLFxuICAgIG1hdGggICAgICAgICAgICA9IHJlcXVpcmUoJy4uLy4uL21hdGgnKTtcblxuLyoqXG4gKiBAYXV0aG9yIE1hdCBHcm92ZXNcbiAqXG4gKiBCaWcgdGhhbmtzIHRvIHRoZSB2ZXJ5IGNsZXZlciBNYXR0IERlc0xhdXJpZXJzIDxtYXR0ZGVzbD4gaHR0cHM6Ly9naXRodWIuY29tL21hdHRkZXNsL1xuICogZm9yIGNyZWF0aW5nIHRoZSBvcmlnaW5hbCBwaXhpIHZlcnNpb24hXG4gKiBBbHNvIGEgdGhhbmtzIHRvIGh0dHBzOi8vZ2l0aHViLmNvbS9iY2hldmFsaWVyIGZvciB0d2Vha2luZyB0aGUgdGludCBhbmQgYWxwaGEgc28gdGhhdCB0aGV5IG5vdyBzaGFyZSA0IGJ5dGVzIG9uIHRoZSB2ZXJ0ZXggYnVmZmVyXG4gKlxuICogSGVhdmlseSBpbnNwaXJlZCBieSBMaWJHRFgncyBQYXJ0aWNsZVJlbmRlcmVyOlxuICogaHR0cHM6Ly9naXRodWIuY29tL2xpYmdkeC9saWJnZHgvYmxvYi9tYXN0ZXIvZ2R4L3NyYy9jb20vYmFkbG9naWMvZ2R4L2dyYXBoaWNzL2cyZC9QYXJ0aWNsZVJlbmRlcmVyLmphdmFcbiAqL1xuXG4vKipcbiAqXG4gKiBAY2xhc3NcbiAqIEBwcml2YXRlXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLldlYkdMUmVuZGVyZXJ9IFRoZSByZW5kZXJlciB0aGlzIHNwcml0ZSBiYXRjaCB3b3JrcyBmb3IuXG4gKi9cbmZ1bmN0aW9uIFBhcnRpY2xlUmVuZGVyZXIocmVuZGVyZXIpXG57XG4gICAgT2JqZWN0UmVuZGVyZXIuY2FsbCh0aGlzLCByZW5kZXJlcik7XG5cbiAgICAvLyA2NTUzNSBpcyBtYXggdmVydGV4IGluZGV4IGluIHRoZSBpbmRleCBidWZmZXIgKHNlZSBQYXJ0aWNsZVJlbmRlcmVyKVxuICAgIC8vIHNvIG1heCBudW1iZXIgb2YgcGFydGljbGVzIGlzIDY1NTM2IC8gNCA9IDE2Mzg0XG4gICAgLy8gYW5kIG1heCBudW1iZXIgb2YgZWxlbWVudCBpbiB0aGUgaW5kZXggYnVmZmVyIGlzIDE2Mzg0ICogNiA9IDk4MzA0XG4gICAgLy8gQ3JlYXRpbmcgYSBmdWxsIGluZGV4IGJ1ZmZlciwgb3ZlcmhlYWQgaXMgOTgzMDQgKiAyID0gMTk2S29cbiAgICB2YXIgbnVtSW5kaWNlcyA9IDk4MzA0O1xuXG4gICAgLyoqXG4gICAgICogSG9sZHMgdGhlIGluZGljZXNcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1VpbnQxNkFycmF5fVxuICAgICAqL1xuICAgIHRoaXMuaW5kaWNlcyA9IG5ldyBVaW50MTZBcnJheShudW1JbmRpY2VzKTtcblxuICAgIGZvciAodmFyIGk9MCwgaj0wOyBpIDwgbnVtSW5kaWNlczsgaSArPSA2LCBqICs9IDQpXG4gICAge1xuICAgICAgICB0aGlzLmluZGljZXNbaSArIDBdID0gaiArIDA7XG4gICAgICAgIHRoaXMuaW5kaWNlc1tpICsgMV0gPSBqICsgMTtcbiAgICAgICAgdGhpcy5pbmRpY2VzW2kgKyAyXSA9IGogKyAyO1xuICAgICAgICB0aGlzLmluZGljZXNbaSArIDNdID0gaiArIDA7XG4gICAgICAgIHRoaXMuaW5kaWNlc1tpICsgNF0gPSBqICsgMjtcbiAgICAgICAgdGhpcy5pbmRpY2VzW2kgKyA1XSA9IGogKyAzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoZSBkZWZhdWx0IHNoYWRlciB0aGF0IGlzIHVzZWQgaWYgYSBzcHJpdGUgZG9lc24ndCBoYXZlIGEgbW9yZSBzcGVjaWZpYyBvbmUuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlNoYWRlcn1cbiAgICAgKi9cbiAgICB0aGlzLnNoYWRlciA9IG51bGw7XG5cbiAgICB0aGlzLmluZGV4QnVmZmVyID0gbnVsbDtcblxuICAgIHRoaXMucHJvcGVydGllcyA9IG51bGw7XG5cbiAgICB0aGlzLnRlbXBNYXRyaXggPSBuZXcgbWF0aC5NYXRyaXgoKTtcbn1cblxuUGFydGljbGVSZW5kZXJlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKE9iamVjdFJlbmRlcmVyLnByb3RvdHlwZSk7XG5QYXJ0aWNsZVJlbmRlcmVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFBhcnRpY2xlUmVuZGVyZXI7XG5tb2R1bGUuZXhwb3J0cyA9IFBhcnRpY2xlUmVuZGVyZXI7XG5cbldlYkdMUmVuZGVyZXIucmVnaXN0ZXJQbHVnaW4oJ3BhcnRpY2xlJywgUGFydGljbGVSZW5kZXJlcik7XG5cbi8qKlxuICogV2hlbiB0aGVyZSBpcyBhIFdlYkdMIGNvbnRleHQgY2hhbmdlXG4gKlxuICogQHByaXZhdGVcbiAqL1xuUGFydGljbGVSZW5kZXJlci5wcm90b3R5cGUub25Db250ZXh0Q2hhbmdlID0gZnVuY3Rpb24gKClcbntcbiAgICB2YXIgZ2wgPSB0aGlzLnJlbmRlcmVyLmdsO1xuXG4gICAgLy8gc2V0dXAgZGVmYXVsdCBzaGFkZXJcbiAgICB0aGlzLnNoYWRlciA9IG5ldyBQYXJ0aWNsZVNoYWRlcih0aGlzLnJlbmRlcmVyLnNoYWRlck1hbmFnZXIpO1xuXG4gICAgdGhpcy5pbmRleEJ1ZmZlciA9IGdsLmNyZWF0ZUJ1ZmZlcigpO1xuXG4gICAgLy8gNjU1MzUgaXMgbWF4IGluZGV4LCBzbyA2NTUzNSAvIDYgPSAxMDkyMi5cblxuICAgIC8vdXBsb2FkIHRoZSBpbmRleCBkYXRhXG4gICAgZ2wuYmluZEJ1ZmZlcihnbC5FTEVNRU5UX0FSUkFZX0JVRkZFUiwgdGhpcy5pbmRleEJ1ZmZlcik7XG4gICAgZ2wuYnVmZmVyRGF0YShnbC5FTEVNRU5UX0FSUkFZX0JVRkZFUiwgdGhpcy5pbmRpY2VzLCBnbC5TVEFUSUNfRFJBVyk7XG5cbiAgICB0aGlzLnByb3BlcnRpZXMgPSBbXG4gICAgICAgIC8vIHZlcnRpY2VzRGF0YVxuICAgICAgICB7XG4gICAgICAgICAgICBhdHRyaWJ1dGU6dGhpcy5zaGFkZXIuYXR0cmlidXRlcy5hVmVydGV4UG9zaXRpb24sXG4gICAgICAgICAgICBzaXplOjIsXG4gICAgICAgICAgICB1cGxvYWRGdW5jdGlvbjp0aGlzLnVwbG9hZFZlcnRpY2VzLFxuICAgICAgICAgICAgb2Zmc2V0OjBcbiAgICAgICAgfSxcbiAgICAgICAgLy8gcG9zaXRpb25EYXRhXG4gICAgICAgIHtcbiAgICAgICAgICAgIGF0dHJpYnV0ZTp0aGlzLnNoYWRlci5hdHRyaWJ1dGVzLmFQb3NpdGlvbkNvb3JkLFxuICAgICAgICAgICAgc2l6ZToyLFxuICAgICAgICAgICAgdXBsb2FkRnVuY3Rpb246dGhpcy51cGxvYWRQb3NpdGlvbixcbiAgICAgICAgICAgIG9mZnNldDowXG4gICAgICAgIH0sXG4gICAgICAgIC8vIHJvdGF0aW9uRGF0YVxuICAgICAgICB7XG4gICAgICAgICAgICBhdHRyaWJ1dGU6dGhpcy5zaGFkZXIuYXR0cmlidXRlcy5hUm90YXRpb24sXG4gICAgICAgICAgICBzaXplOjEsXG4gICAgICAgICAgICB1cGxvYWRGdW5jdGlvbjp0aGlzLnVwbG9hZFJvdGF0aW9uLFxuICAgICAgICAgICAgb2Zmc2V0OjBcbiAgICAgICAgfSxcbiAgICAgICAgLy8gdXZzRGF0YVxuICAgICAgICB7XG4gICAgICAgICAgICBhdHRyaWJ1dGU6dGhpcy5zaGFkZXIuYXR0cmlidXRlcy5hVGV4dHVyZUNvb3JkLFxuICAgICAgICAgICAgc2l6ZToyLFxuICAgICAgICAgICAgdXBsb2FkRnVuY3Rpb246dGhpcy51cGxvYWRVdnMsXG4gICAgICAgICAgICBvZmZzZXQ6MFxuICAgICAgICB9LFxuICAgICAgICAvLyBhbHBoYURhdGFcbiAgICAgICAge1xuICAgICAgICAgICAgYXR0cmlidXRlOnRoaXMuc2hhZGVyLmF0dHJpYnV0ZXMuYUNvbG9yLFxuICAgICAgICAgICAgc2l6ZToxLFxuICAgICAgICAgICAgdXBsb2FkRnVuY3Rpb246dGhpcy51cGxvYWRBbHBoYSxcbiAgICAgICAgICAgIG9mZnNldDowXG4gICAgICAgIH1cbiAgICBdO1xufTtcblxuLyoqXG4gKiBTdGFydHMgYSBuZXcgcGFydGljbGUgYmF0Y2guXG4gKlxuICovXG5QYXJ0aWNsZVJlbmRlcmVyLnByb3RvdHlwZS5zdGFydCA9IGZ1bmN0aW9uICgpXG57XG4gICAgdmFyIGdsID0gdGhpcy5yZW5kZXJlci5nbDtcblxuICAgIC8vIGJpbmQgdGhlIG1haW4gdGV4dHVyZVxuICAgIGdsLmFjdGl2ZVRleHR1cmUoZ2wuVEVYVFVSRTApO1xuXG4gICAgLy8gYmluZCB0aGUgYnVmZmVyc1xuXG4gICAgZ2wuYmluZEJ1ZmZlcihnbC5FTEVNRU5UX0FSUkFZX0JVRkZFUiwgdGhpcy5pbmRleEJ1ZmZlcik7XG5cbiAgICB2YXIgc2hhZGVyID0gdGhpcy5zaGFkZXI7XG5cbiAgICB0aGlzLnJlbmRlcmVyLnNoYWRlck1hbmFnZXIuc2V0U2hhZGVyKHNoYWRlcik7XG59O1xuXG5cbi8qKlxuICogUmVuZGVycyB0aGUgcGFydGljbGUgY29udGFpbmVyIG9iamVjdC5cbiAqXG4gKiBAcGFyYW0gY29udGFpbmVyIHtQSVhJLlBhcnRpY2xlQ29udGFpbmVyfSBUaGUgY29udGFpbmVyIHRvIHJlbmRlciB1c2luZyB0aGlzIFBhcnRpY2xlUmVuZGVyZXJcbiAqL1xuUGFydGljbGVSZW5kZXJlci5wcm90b3R5cGUucmVuZGVyID0gZnVuY3Rpb24gKGNvbnRhaW5lcilcbntcbiAgICB2YXIgY2hpbGRyZW4gPSBjb250YWluZXIuY2hpbGRyZW4sXG4gICAgICAgIHRvdGFsQ2hpbGRyZW4gPSBjaGlsZHJlbi5sZW5ndGgsXG4gICAgICAgIG1heFNpemUgPSBjb250YWluZXIuX21heFNpemUsXG4gICAgICAgIGJhdGNoU2l6ZSA9IGNvbnRhaW5lci5fYmF0Y2hTaXplO1xuXG4gICAgaWYodG90YWxDaGlsZHJlbiA9PT0gMClcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgZWxzZSBpZih0b3RhbENoaWxkcmVuID4gbWF4U2l6ZSlcbiAgICB7XG4gICAgICAgIHRvdGFsQ2hpbGRyZW4gPSBtYXhTaXplO1xuICAgIH1cblxuICAgIGlmKCFjb250YWluZXIuX2J1ZmZlcnMpXG4gICAge1xuICAgICAgICBjb250YWluZXIuX2J1ZmZlcnMgPSB0aGlzLmdlbmVyYXRlQnVmZmVycyggY29udGFpbmVyICk7XG4gICAgfVxuXG4gICAgLy8gaWYgdGhlIHV2cyBoYXZlIG5vdCB1cGRhdGVkIHRoZW4gbm8gcG9pbnQgcmVuZGVyaW5nIGp1c3QgeWV0IVxuICAgIHRoaXMucmVuZGVyZXIuYmxlbmRNb2RlTWFuYWdlci5zZXRCbGVuZE1vZGUoY29udGFpbmVyLmJsZW5kTW9kZSk7XG5cbiAgICB2YXIgZ2wgPSB0aGlzLnJlbmRlcmVyLmdsO1xuXG4gICAgdmFyIG0gPSAgY29udGFpbmVyLndvcmxkVHJhbnNmb3JtLmNvcHkoIHRoaXMudGVtcE1hdHJpeCApO1xuICAgIG0ucHJlcGVuZCggdGhpcy5yZW5kZXJlci5jdXJyZW50UmVuZGVyVGFyZ2V0LnByb2plY3Rpb25NYXRyaXggKTtcbiAgICBnbC51bmlmb3JtTWF0cml4M2Z2KHRoaXMuc2hhZGVyLnVuaWZvcm1zLnByb2plY3Rpb25NYXRyaXguX2xvY2F0aW9uLCBmYWxzZSwgbS50b0FycmF5KHRydWUpKTtcbiAgICBnbC51bmlmb3JtMWYodGhpcy5zaGFkZXIudW5pZm9ybXMudUFscGhhLl9sb2NhdGlvbiwgY29udGFpbmVyLndvcmxkQWxwaGEpO1xuXG5cbiAgICAvLyBtYWtlIHN1cmUgdGhlIHRleHR1cmUgaXMgYm91bmQuLlxuICAgIHZhciBiYXNlVGV4dHVyZSA9IGNoaWxkcmVuWzBdLl90ZXh0dXJlLmJhc2VUZXh0dXJlO1xuXG4gICAgaWYgKCFiYXNlVGV4dHVyZS5fZ2xUZXh0dXJlc1tnbC5pZF0pXG4gICAge1xuICAgICAgICAvLyBpZiB0aGUgdGV4dHVyZSBoYXMgbm90IHVwZGF0ZWQgdGhlbiBsZXRzIG5vdCB1cGxvYWQgYW55IHN0YXRpYyBwcm9wZXJ0aWVzXG4gICAgICAgIGlmKCF0aGlzLnJlbmRlcmVyLnVwZGF0ZVRleHR1cmUoYmFzZVRleHR1cmUpKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZighY29udGFpbmVyLl9wcm9wZXJ0aWVzWzBdIHx8ICFjb250YWluZXIuX3Byb3BlcnRpZXNbM10pXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNvbnRhaW5lci5fYnVmZmVyVG9VcGRhdGUgPSAwO1xuICAgICAgICB9XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIGdsLmJpbmRUZXh0dXJlKGdsLlRFWFRVUkVfMkQsIGJhc2VUZXh0dXJlLl9nbFRleHR1cmVzW2dsLmlkXSk7XG4gICAgfVxuXG4gICAgLy8gbm93IGxldHMgdXBsb2FkIGFuZCByZW5kZXIgdGhlIGJ1ZmZlcnMuLlxuICAgIGZvciAodmFyIGkgPSAwLCBqID0gMDsgaSA8IHRvdGFsQ2hpbGRyZW47IGkgKz0gYmF0Y2hTaXplLCBqICs9IDEpXG4gICAge1xuICAgICAgICB2YXIgYW1vdW50ID0gKCB0b3RhbENoaWxkcmVuIC0gaSk7XG4gICAgICAgIGlmKGFtb3VudCA+IGJhdGNoU2l6ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgYW1vdW50ID0gYmF0Y2hTaXplO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGJ1ZmZlciA9IGNvbnRhaW5lci5fYnVmZmVyc1tqXTtcblxuICAgICAgICAvLyB3ZSBhbHdheXMgdXBsb2FkIHRoZSBkeW5hbWljXG4gICAgICAgIGJ1ZmZlci51cGxvYWREeW5hbWljKGNoaWxkcmVuLCBpLCBhbW91bnQpO1xuXG4gICAgICAgIC8vIHdlIG9ubHkgdXBsb2FkIHRoZSBzdGF0aWMgY29udGVudCB3aGVuIHdlIGhhdmUgdG8hXG4gICAgICAgIGlmKGNvbnRhaW5lci5fYnVmZmVyVG9VcGRhdGUgPT09IGopXG4gICAgICAgIHtcbiAgICAgICAgICAgIGJ1ZmZlci51cGxvYWRTdGF0aWMoY2hpbGRyZW4sIGksIGFtb3VudCk7XG4gICAgICAgICAgICBjb250YWluZXIuX2J1ZmZlclRvVXBkYXRlID0gaiArIDE7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBiaW5kIHRoZSBidWZmZXJcbiAgICAgICAgYnVmZmVyLmJpbmQoIHRoaXMuc2hhZGVyICk7XG5cbiAgICAgICAgIC8vIG5vdyBkcmF3IHRob3NlIHN1Y2thcyFcbiAgICAgICAgZ2wuZHJhd0VsZW1lbnRzKGdsLlRSSUFOR0xFUywgYW1vdW50ICogNiwgZ2wuVU5TSUdORURfU0hPUlQsIDApO1xuICAgICAgICB0aGlzLnJlbmRlcmVyLmRyYXdDb3VudCsrO1xuICAgIH1cbn07XG5cbi8qKlxuICogQ3JlYXRlcyBvbmUgcGFydGljbGUgYnVmZmVyIGZvciBlYWNoIGNoaWxkIGluIHRoZSBjb250YWluZXIgd2Ugd2FudCB0byByZW5kZXIgYW5kIHVwZGF0ZXMgaW50ZXJuYWwgcHJvcGVydGllc1xuICpcbiAqIEBwYXJhbSBjb250YWluZXIge1BJWEkuUGFydGljbGVDb250YWluZXJ9IFRoZSBjb250YWluZXIgdG8gcmVuZGVyIHVzaW5nIHRoaXMgUGFydGljbGVSZW5kZXJlclxuICovXG5QYXJ0aWNsZVJlbmRlcmVyLnByb3RvdHlwZS5nZW5lcmF0ZUJ1ZmZlcnMgPSBmdW5jdGlvbiAoY29udGFpbmVyKVxue1xuICAgIHZhciBnbCA9IHRoaXMucmVuZGVyZXIuZ2wsXG4gICAgICAgIGJ1ZmZlcnMgPSBbXSxcbiAgICAgICAgc2l6ZSA9IGNvbnRhaW5lci5fbWF4U2l6ZSxcbiAgICAgICAgYmF0Y2hTaXplID0gY29udGFpbmVyLl9iYXRjaFNpemUsXG4gICAgICAgIGR5bmFtaWNQcm9wZXJ0eUZsYWdzID0gY29udGFpbmVyLl9wcm9wZXJ0aWVzLFxuICAgICAgICBpO1xuXG4gICAgZm9yIChpID0gMDsgaSA8IHNpemU7IGkgKz0gYmF0Y2hTaXplKVxuICAgIHtcbiAgICAgICAgYnVmZmVycy5wdXNoKG5ldyBQYXJ0aWNsZUJ1ZmZlcihnbCwgdGhpcy5wcm9wZXJ0aWVzLCBkeW5hbWljUHJvcGVydHlGbGFncywgYmF0Y2hTaXplKSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGJ1ZmZlcnM7XG59O1xuXG4vKipcbiAqIFVwbG9hZHMgdGhlIHZlcnRpY2llcy5cbiAqXG4gKiBAcGFyYW0gY2hpbGRyZW4ge1BJWEkuRGlzcGxheU9iamVjdFtdfSB0aGUgYXJyYXkgb2YgZGlzcGxheSBvYmplY3RzIHRvIHJlbmRlclxuICogQHBhcmFtIHN0YXJ0SW5kZXgge251bWJlcn0gdGhlIGluZGV4IHRvIHN0YXJ0IGZyb20gaW4gdGhlIGNoaWxkcmVuIGFycmF5XG4gKiBAcGFyYW0gYW1vdW50IHtudW1iZXJ9IHRoZSBhbW91bnQgb2YgY2hpbGRyZW4gdGhhdCB3aWxsIGhhdmUgdGhlaXIgdmVydGljZXMgdXBsb2FkZWRcbiAqIEBwYXJhbSBhcnJheSB7bnVtYmVyW119XG4gKiBAcGFyYW0gc3RyaWRlIHtudW1iZXJ9XG4gKiBAcGFyYW0gb2Zmc2V0IHtudW1iZXJ9XG4gKi9cblBhcnRpY2xlUmVuZGVyZXIucHJvdG90eXBlLnVwbG9hZFZlcnRpY2VzID0gZnVuY3Rpb24gKGNoaWxkcmVuLCBzdGFydEluZGV4LCBhbW91bnQsIGFycmF5LCBzdHJpZGUsIG9mZnNldClcbntcbiAgICB2YXIgc3ByaXRlLFxuICAgICAgICB0ZXh0dXJlLFxuICAgICAgICB0cmltLFxuICAgICAgICBzeCxcbiAgICAgICAgc3ksXG4gICAgICAgIHcwLCB3MSwgaDAsIGgxO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhbW91bnQ7IGkrKykge1xuXG4gICAgICAgIHNwcml0ZSA9IGNoaWxkcmVuW3N0YXJ0SW5kZXggKyBpXTtcbiAgICAgICAgdGV4dHVyZSA9IHNwcml0ZS5fdGV4dHVyZTtcbiAgICAgICAgc3ggPSBzcHJpdGUuc2NhbGUueDtcbiAgICAgICAgc3kgPSBzcHJpdGUuc2NhbGUueTtcblxuICAgICAgICBpZiAodGV4dHVyZS50cmltKVxuICAgICAgICB7XG4gICAgICAgICAgICAvLyBpZiB0aGUgc3ByaXRlIGlzIHRyaW1tZWQgdGhlbiB3ZSBuZWVkIHRvIGFkZCB0aGUgZXh0cmEgc3BhY2UgYmVmb3JlIHRyYW5zZm9ybWluZyB0aGUgc3ByaXRlIGNvb3Jkcy4uXG4gICAgICAgICAgICB0cmltID0gdGV4dHVyZS50cmltO1xuXG4gICAgICAgICAgICB3MSA9IHRyaW0ueCAtIHNwcml0ZS5hbmNob3IueCAqIHRyaW0ud2lkdGg7XG4gICAgICAgICAgICB3MCA9IHcxICsgdGV4dHVyZS5jcm9wLndpZHRoO1xuXG4gICAgICAgICAgICBoMSA9IHRyaW0ueSAtIHNwcml0ZS5hbmNob3IueSAqIHRyaW0uaGVpZ2h0O1xuICAgICAgICAgICAgaDAgPSBoMSArIHRleHR1cmUuY3JvcC5oZWlnaHQ7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgICB3MCA9ICh0ZXh0dXJlLl9mcmFtZS53aWR0aCApICogKDEtc3ByaXRlLmFuY2hvci54KTtcbiAgICAgICAgICAgIHcxID0gKHRleHR1cmUuX2ZyYW1lLndpZHRoICkgKiAtc3ByaXRlLmFuY2hvci54O1xuXG4gICAgICAgICAgICBoMCA9IHRleHR1cmUuX2ZyYW1lLmhlaWdodCAqICgxLXNwcml0ZS5hbmNob3IueSk7XG4gICAgICAgICAgICBoMSA9IHRleHR1cmUuX2ZyYW1lLmhlaWdodCAqIC1zcHJpdGUuYW5jaG9yLnk7XG4gICAgICAgIH1cblxuICAgICAgICBhcnJheVtvZmZzZXRdID0gdzEgKiBzeDtcbiAgICAgICAgYXJyYXlbb2Zmc2V0ICsgMV0gPSBoMSAqIHN5O1xuXG4gICAgICAgIGFycmF5W29mZnNldCArIHN0cmlkZV0gPSB3MCAqIHN4O1xuICAgICAgICBhcnJheVtvZmZzZXQgKyBzdHJpZGUgKyAxXSA9IGgxICogc3k7XG5cbiAgICAgICAgYXJyYXlbb2Zmc2V0ICsgc3RyaWRlICogMl0gPSB3MCAqIHN4O1xuICAgICAgICBhcnJheVtvZmZzZXQgKyBzdHJpZGUgKiAyICsgMV0gPSBoMCAqIHN5O1xuXG4gICAgICAgIGFycmF5W29mZnNldCArIHN0cmlkZSAqIDNdID0gdzEgKiBzeDtcbiAgICAgICAgYXJyYXlbb2Zmc2V0ICsgc3RyaWRlICogMyArIDFdID0gaDAgKiBzeTtcblxuICAgICAgICBvZmZzZXQgKz0gc3RyaWRlICogNDtcbiAgICB9XG5cbn07XG5cbi8qKlxuICpcbiAqIEBwYXJhbSBjaGlsZHJlbiB7UElYSS5EaXNwbGF5T2JqZWN0W119IHRoZSBhcnJheSBvZiBkaXNwbGF5IG9iamVjdHMgdG8gcmVuZGVyXG4gKiBAcGFyYW0gc3RhcnRJbmRleCB7bnVtYmVyfSB0aGUgaW5kZXggdG8gc3RhcnQgZnJvbSBpbiB0aGUgY2hpbGRyZW4gYXJyYXlcbiAqIEBwYXJhbSBhbW91bnQge251bWJlcn0gdGhlIGFtb3VudCBvZiBjaGlsZHJlbiB0aGF0IHdpbGwgaGF2ZSB0aGVpciBwb3NpdGlvbnMgdXBsb2FkZWRcbiAqIEBwYXJhbSBhcnJheSB7bnVtYmVyW119XG4gKiBAcGFyYW0gc3RyaWRlIHtudW1iZXJ9XG4gKiBAcGFyYW0gb2Zmc2V0IHtudW1iZXJ9XG4gKi9cblBhcnRpY2xlUmVuZGVyZXIucHJvdG90eXBlLnVwbG9hZFBvc2l0aW9uID0gZnVuY3Rpb24gKGNoaWxkcmVuLHN0YXJ0SW5kZXgsIGFtb3VudCwgYXJyYXksIHN0cmlkZSwgb2Zmc2V0KVxue1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYW1vdW50OyBpKyspXG4gICAge1xuICAgICAgICB2YXIgc3ByaXRlUG9zaXRpb24gPSBjaGlsZHJlbltzdGFydEluZGV4ICsgaV0ucG9zaXRpb247XG5cbiAgICAgICAgYXJyYXlbb2Zmc2V0XSA9IHNwcml0ZVBvc2l0aW9uLng7XG4gICAgICAgIGFycmF5W29mZnNldCArIDFdID0gc3ByaXRlUG9zaXRpb24ueTtcblxuICAgICAgICBhcnJheVtvZmZzZXQgKyBzdHJpZGVdID0gc3ByaXRlUG9zaXRpb24ueDtcbiAgICAgICAgYXJyYXlbb2Zmc2V0ICsgc3RyaWRlICsgMV0gPSBzcHJpdGVQb3NpdGlvbi55O1xuXG4gICAgICAgIGFycmF5W29mZnNldCArIHN0cmlkZSAqIDJdID0gc3ByaXRlUG9zaXRpb24ueDtcbiAgICAgICAgYXJyYXlbb2Zmc2V0ICsgc3RyaWRlICogMiArIDFdID0gc3ByaXRlUG9zaXRpb24ueTtcblxuICAgICAgICBhcnJheVtvZmZzZXQgKyBzdHJpZGUgKiAzXSA9IHNwcml0ZVBvc2l0aW9uLng7XG4gICAgICAgIGFycmF5W29mZnNldCArIHN0cmlkZSAqIDMgKyAxXSA9IHNwcml0ZVBvc2l0aW9uLnk7XG5cbiAgICAgICAgb2Zmc2V0ICs9IHN0cmlkZSAqIDQ7XG4gICAgfVxuXG59O1xuXG4vKipcbiAqXG4gKiBAcGFyYW0gY2hpbGRyZW4ge1BJWEkuRGlzcGxheU9iamVjdFtdfSB0aGUgYXJyYXkgb2YgZGlzcGxheSBvYmplY3RzIHRvIHJlbmRlclxuICogQHBhcmFtIHN0YXJ0SW5kZXgge251bWJlcn0gdGhlIGluZGV4IHRvIHN0YXJ0IGZyb20gaW4gdGhlIGNoaWxkcmVuIGFycmF5XG4gKiBAcGFyYW0gYW1vdW50IHtudW1iZXJ9IHRoZSBhbW91bnQgb2YgY2hpbGRyZW4gdGhhdCB3aWxsIGhhdmUgdGhlaXIgcm90YXRpb24gdXBsb2FkZWRcbiAqIEBwYXJhbSBhcnJheSB7bnVtYmVyW119XG4gKiBAcGFyYW0gc3RyaWRlIHtudW1iZXJ9XG4gKiBAcGFyYW0gb2Zmc2V0IHtudW1iZXJ9XG4gKi9cblBhcnRpY2xlUmVuZGVyZXIucHJvdG90eXBlLnVwbG9hZFJvdGF0aW9uID0gZnVuY3Rpb24gKGNoaWxkcmVuLHN0YXJ0SW5kZXgsIGFtb3VudCwgYXJyYXksIHN0cmlkZSwgb2Zmc2V0KVxue1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYW1vdW50OyBpKyspXG4gICAge1xuICAgICAgICB2YXIgc3ByaXRlUm90YXRpb24gPSBjaGlsZHJlbltzdGFydEluZGV4ICsgaV0ucm90YXRpb247XG5cblxuICAgICAgICBhcnJheVtvZmZzZXRdID0gc3ByaXRlUm90YXRpb247XG4gICAgICAgIGFycmF5W29mZnNldCArIHN0cmlkZV0gPSBzcHJpdGVSb3RhdGlvbjtcbiAgICAgICAgYXJyYXlbb2Zmc2V0ICsgc3RyaWRlICogMl0gPSBzcHJpdGVSb3RhdGlvbjtcbiAgICAgICAgYXJyYXlbb2Zmc2V0ICsgc3RyaWRlICogM10gPSBzcHJpdGVSb3RhdGlvbjtcblxuICAgICAgICBvZmZzZXQgKz0gc3RyaWRlICogNDtcbiAgICB9XG59O1xuXG4vKipcbiAqXG4gKiBAcGFyYW0gY2hpbGRyZW4ge1BJWEkuRGlzcGxheU9iamVjdFtdfSB0aGUgYXJyYXkgb2YgZGlzcGxheSBvYmplY3RzIHRvIHJlbmRlclxuICogQHBhcmFtIHN0YXJ0SW5kZXgge251bWJlcn0gdGhlIGluZGV4IHRvIHN0YXJ0IGZyb20gaW4gdGhlIGNoaWxkcmVuIGFycmF5XG4gKiBAcGFyYW0gYW1vdW50IHtudW1iZXJ9IHRoZSBhbW91bnQgb2YgY2hpbGRyZW4gdGhhdCB3aWxsIGhhdmUgdGhlaXIgVXZzIHVwbG9hZGVkXG4gKiBAcGFyYW0gYXJyYXkge251bWJlcltdfVxuICogQHBhcmFtIHN0cmlkZSB7bnVtYmVyfVxuICogQHBhcmFtIG9mZnNldCB7bnVtYmVyfVxuICovXG5QYXJ0aWNsZVJlbmRlcmVyLnByb3RvdHlwZS51cGxvYWRVdnMgPSBmdW5jdGlvbiAoY2hpbGRyZW4sc3RhcnRJbmRleCwgYW1vdW50LCBhcnJheSwgc3RyaWRlLCBvZmZzZXQpXG57XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhbW91bnQ7IGkrKylcbiAgICB7XG4gICAgICAgIHZhciB0ZXh0dXJlVXZzID0gY2hpbGRyZW5bc3RhcnRJbmRleCArIGldLl90ZXh0dXJlLl91dnM7XG5cbiAgICAgICAgaWYgKHRleHR1cmVVdnMpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGFycmF5W29mZnNldF0gPSB0ZXh0dXJlVXZzLngwO1xuICAgICAgICAgICAgYXJyYXlbb2Zmc2V0ICsgMV0gPSB0ZXh0dXJlVXZzLnkwO1xuXG4gICAgICAgICAgICBhcnJheVtvZmZzZXQgKyBzdHJpZGVdID0gdGV4dHVyZVV2cy54MTtcbiAgICAgICAgICAgIGFycmF5W29mZnNldCArIHN0cmlkZSArIDFdID0gdGV4dHVyZVV2cy55MTtcblxuICAgICAgICAgICAgYXJyYXlbb2Zmc2V0ICsgc3RyaWRlICogMl0gPSB0ZXh0dXJlVXZzLngyO1xuICAgICAgICAgICAgYXJyYXlbb2Zmc2V0ICsgc3RyaWRlICogMiArIDFdID0gdGV4dHVyZVV2cy55MjtcblxuICAgICAgICAgICAgYXJyYXlbb2Zmc2V0ICsgc3RyaWRlICogM10gPSB0ZXh0dXJlVXZzLngzO1xuICAgICAgICAgICAgYXJyYXlbb2Zmc2V0ICsgc3RyaWRlICogMyArIDFdID0gdGV4dHVyZVV2cy55MztcblxuICAgICAgICAgICAgb2Zmc2V0ICs9IHN0cmlkZSAqIDQ7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgICAvL1RPRE8geW91IGtub3cgdGhpcyBjYW4gYmUgZWFzaWVyIVxuICAgICAgICAgICAgYXJyYXlbb2Zmc2V0XSA9IDA7XG4gICAgICAgICAgICBhcnJheVtvZmZzZXQgKyAxXSA9IDA7XG5cbiAgICAgICAgICAgIGFycmF5W29mZnNldCArIHN0cmlkZV0gPSAwO1xuICAgICAgICAgICAgYXJyYXlbb2Zmc2V0ICsgc3RyaWRlICsgMV0gPSAwO1xuXG4gICAgICAgICAgICBhcnJheVtvZmZzZXQgKyBzdHJpZGUgKiAyXSA9IDA7XG4gICAgICAgICAgICBhcnJheVtvZmZzZXQgKyBzdHJpZGUgKiAyICsgMV0gPSAwO1xuXG4gICAgICAgICAgICBhcnJheVtvZmZzZXQgKyBzdHJpZGUgKiAzXSA9IDA7XG4gICAgICAgICAgICBhcnJheVtvZmZzZXQgKyBzdHJpZGUgKiAzICsgMV0gPSAwO1xuXG4gICAgICAgICAgICBvZmZzZXQgKz0gc3RyaWRlICogNDtcbiAgICAgICAgfVxuICAgIH1cbn07XG5cbi8qKlxuICpcbiAqIEBwYXJhbSBjaGlsZHJlbiB7UElYSS5EaXNwbGF5T2JqZWN0W119IHRoZSBhcnJheSBvZiBkaXNwbGF5IG9iamVjdHMgdG8gcmVuZGVyXG4gKiBAcGFyYW0gc3RhcnRJbmRleCB7bnVtYmVyfSB0aGUgaW5kZXggdG8gc3RhcnQgZnJvbSBpbiB0aGUgY2hpbGRyZW4gYXJyYXlcbiAqIEBwYXJhbSBhbW91bnQge251bWJlcn0gdGhlIGFtb3VudCBvZiBjaGlsZHJlbiB0aGF0IHdpbGwgaGF2ZSB0aGVpciBhbHBoYSB1cGxvYWRlZFxuICogQHBhcmFtIGFycmF5IHtudW1iZXJbXX1cbiAqIEBwYXJhbSBzdHJpZGUge251bWJlcn1cbiAqIEBwYXJhbSBvZmZzZXQge251bWJlcn1cbiAqL1xuUGFydGljbGVSZW5kZXJlci5wcm90b3R5cGUudXBsb2FkQWxwaGEgPSBmdW5jdGlvbiAoY2hpbGRyZW4sc3RhcnRJbmRleCwgYW1vdW50LCBhcnJheSwgc3RyaWRlLCBvZmZzZXQpXG57XG4gICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYW1vdW50OyBpKyspXG4gICAgIHtcbiAgICAgICAgdmFyIHNwcml0ZUFscGhhID0gY2hpbGRyZW5bc3RhcnRJbmRleCArIGldLmFscGhhO1xuXG4gICAgICAgIGFycmF5W29mZnNldF0gPSBzcHJpdGVBbHBoYTtcbiAgICAgICAgYXJyYXlbb2Zmc2V0ICsgc3RyaWRlXSA9IHNwcml0ZUFscGhhO1xuICAgICAgICBhcnJheVtvZmZzZXQgKyBzdHJpZGUgKiAyXSA9IHNwcml0ZUFscGhhO1xuICAgICAgICBhcnJheVtvZmZzZXQgKyBzdHJpZGUgKiAzXSA9IHNwcml0ZUFscGhhO1xuXG4gICAgICAgIG9mZnNldCArPSBzdHJpZGUgKiA0O1xuICAgIH1cbn07XG5cblxuLyoqXG4gKiBEZXN0cm95cyB0aGUgUGFydGljbGVSZW5kZXJlci5cbiAqXG4gKi9cblBhcnRpY2xlUmVuZGVyZXIucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoKVxue1xuICAgIGlmICh0aGlzLnJlbmRlcmVyLmdsKSB7XG4gICAgICAgIHRoaXMucmVuZGVyZXIuZ2wuZGVsZXRlQnVmZmVyKHRoaXMuaW5kZXhCdWZmZXIpO1xuICAgIH1cblxuICAgIE9iamVjdFJlbmRlcmVyLnByb3RvdHlwZS5kZXN0cm95LmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG5cbiAgICB0aGlzLnNoYWRlci5kZXN0cm95KCk7XG5cbiAgICB0aGlzLmluZGljZXMgPSBudWxsO1xuICAgIHRoaXMudGVtcE1hdHJpeCA9IG51bGw7XG59O1xuIiwidmFyIFRleHR1cmVTaGFkZXIgPSByZXF1aXJlKCcuLi8uLi9yZW5kZXJlcnMvd2ViZ2wvc2hhZGVycy9UZXh0dXJlU2hhZGVyJyk7XG5cbi8qKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLlRleHR1cmVTaGFkZXJcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gc2hhZGVyTWFuYWdlciB7U2hhZGVyTWFuYWdlcn0gVGhlIHdlYmdsIHNoYWRlciBtYW5hZ2VyIHRoaXMgc2hhZGVyIHdvcmtzIGZvci5cbiAqL1xuZnVuY3Rpb24gUGFydGljbGVTaGFkZXIoc2hhZGVyTWFuYWdlcilcbntcbiAgICBUZXh0dXJlU2hhZGVyLmNhbGwodGhpcyxcbiAgICAgICAgc2hhZGVyTWFuYWdlcixcbiAgICAgICAgLy8gdmVydGV4IHNoYWRlclxuICAgICAgICBbXG4gICAgICAgICAgICAnYXR0cmlidXRlIHZlYzIgYVZlcnRleFBvc2l0aW9uOycsXG4gICAgICAgICAgICAnYXR0cmlidXRlIHZlYzIgYVRleHR1cmVDb29yZDsnLFxuICAgICAgICAgICAgJ2F0dHJpYnV0ZSBmbG9hdCBhQ29sb3I7JyxcblxuICAgICAgICAgICAgJ2F0dHJpYnV0ZSB2ZWMyIGFQb3NpdGlvbkNvb3JkOycsXG4gICAgICAgICAgICAnYXR0cmlidXRlIHZlYzIgYVNjYWxlOycsXG4gICAgICAgICAgICAnYXR0cmlidXRlIGZsb2F0IGFSb3RhdGlvbjsnLFxuXG4gICAgICAgICAgICAndW5pZm9ybSBtYXQzIHByb2plY3Rpb25NYXRyaXg7JyxcblxuICAgICAgICAgICAgJ3ZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkOycsXG4gICAgICAgICAgICAndmFyeWluZyBmbG9hdCB2Q29sb3I7JyxcblxuICAgICAgICAgICAgJ3ZvaWQgbWFpbih2b2lkKXsnLFxuICAgICAgICAgICAgJyAgIHZlYzIgdiA9IGFWZXJ0ZXhQb3NpdGlvbjsnLFxuXG4gICAgICAgICAgICAnICAgdi54ID0gKGFWZXJ0ZXhQb3NpdGlvbi54KSAqIGNvcyhhUm90YXRpb24pIC0gKGFWZXJ0ZXhQb3NpdGlvbi55KSAqIHNpbihhUm90YXRpb24pOycsXG4gICAgICAgICAgICAnICAgdi55ID0gKGFWZXJ0ZXhQb3NpdGlvbi54KSAqIHNpbihhUm90YXRpb24pICsgKGFWZXJ0ZXhQb3NpdGlvbi55KSAqIGNvcyhhUm90YXRpb24pOycsXG4gICAgICAgICAgICAnICAgdiA9IHYgKyBhUG9zaXRpb25Db29yZDsnLFxuXG4gICAgICAgICAgICAnICAgZ2xfUG9zaXRpb24gPSB2ZWM0KChwcm9qZWN0aW9uTWF0cml4ICogdmVjMyh2LCAxLjApKS54eSwgMC4wLCAxLjApOycsXG5cbiAgICAgICAgICAgICcgICB2VGV4dHVyZUNvb3JkID0gYVRleHR1cmVDb29yZDsnLFxuICAgICAgICAgICAgJyAgIHZDb2xvciA9IGFDb2xvcjsnLFxuICAgICAgICAgICAgJ30nXG4gICAgICAgIF0uam9pbignXFxuJyksXG4gICAgICAgIC8vIGhlbGxvXG4gICAgICAgICBbXG4gICAgICAgICAgICAncHJlY2lzaW9uIGxvd3AgZmxvYXQ7JyxcblxuICAgICAgICAgICAgJ3ZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkOycsXG4gICAgICAgICAgICAndmFyeWluZyBmbG9hdCB2Q29sb3I7JyxcblxuICAgICAgICAgICAgJ3VuaWZvcm0gc2FtcGxlcjJEIHVTYW1wbGVyOycsXG4gICAgICAgICAgICAndW5pZm9ybSBmbG9hdCB1QWxwaGE7JyxcblxuICAgICAgICAgICAgJ3ZvaWQgbWFpbih2b2lkKXsnLFxuICAgICAgICAgICAgJyAgdmVjNCBjb2xvciA9IHRleHR1cmUyRCh1U2FtcGxlciwgdlRleHR1cmVDb29yZCkgKiB2Q29sb3IgKiB1QWxwaGE7JyxcbiAgICAgICAgICAgICcgIGlmIChjb2xvci5hID09IDAuMCkgZGlzY2FyZDsnLFxuICAgICAgICAgICAgJyAgZ2xfRnJhZ0NvbG9yID0gY29sb3I7JyxcbiAgICAgICAgICAgICd9J1xuICAgICAgICBdLmpvaW4oJ1xcbicpLFxuICAgICAgICAvLyBjdXN0b20gdW5pZm9ybXNcbiAgICAgICAge1xuICAgICAgICAgICAgdUFscGhhOiAgeyB0eXBlOiAnMWYnLCB2YWx1ZTogMSB9XG4gICAgICAgIH0sXG4gICAgICAgIC8vIGN1c3RvbSBhdHRyaWJ1dGVzXG4gICAgICAgIHtcbiAgICAgICAgICAgIGFQb3NpdGlvbkNvb3JkOiAwLFxuICAgICAgICAgICAvLyBhU2NhbGU6ICAgICAgICAgMCxcbiAgICAgICAgICAgIGFSb3RhdGlvbjogICAgICAwXG4gICAgICAgIH1cbiAgICApO1xuXG4gICAgLy8gVEVNUCBIQUNLXG5cbn1cblxuUGFydGljbGVTaGFkZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShUZXh0dXJlU2hhZGVyLnByb3RvdHlwZSk7XG5QYXJ0aWNsZVNoYWRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBQYXJ0aWNsZVNoYWRlcjtcblxubW9kdWxlLmV4cG9ydHMgPSBQYXJ0aWNsZVNoYWRlcjtcbiIsInZhciB1dGlscyA9IHJlcXVpcmUoJy4uL3V0aWxzJyksXG4gICAgbWF0aCA9IHJlcXVpcmUoJy4uL21hdGgnKSxcbiAgICBDT05TVCA9IHJlcXVpcmUoJy4uL2NvbnN0JyksXG4gICAgRXZlbnRFbWl0dGVyID0gcmVxdWlyZSgnZXZlbnRlbWl0dGVyMycpO1xuXG4vKipcbiAqIFRoZSBDYW52YXNSZW5kZXJlciBkcmF3cyB0aGUgc2NlbmUgYW5kIGFsbCBpdHMgY29udGVudCBvbnRvIGEgMmQgY2FudmFzLiBUaGlzIHJlbmRlcmVyIHNob3VsZCBiZSB1c2VkIGZvciBicm93c2VycyB0aGF0IGRvIG5vdCBzdXBwb3J0IHdlYkdMLlxuICogRG9uJ3QgZm9yZ2V0IHRvIGFkZCB0aGUgQ2FudmFzUmVuZGVyZXIudmlldyB0byB5b3VyIERPTSBvciB5b3Ugd2lsbCBub3Qgc2VlIGFueXRoaW5nIDopXG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIHN5c3RlbSB7c3RyaW5nfSBUaGUgbmFtZSBvZiB0aGUgc3lzdGVtIHRoaXMgcmVuZGVyZXIgaXMgZm9yLlxuICogQHBhcmFtIFt3aWR0aD04MDBdIHtudW1iZXJ9IHRoZSB3aWR0aCBvZiB0aGUgY2FudmFzIHZpZXdcbiAqIEBwYXJhbSBbaGVpZ2h0PTYwMF0ge251bWJlcn0gdGhlIGhlaWdodCBvZiB0aGUgY2FudmFzIHZpZXdcbiAqIEBwYXJhbSBbb3B0aW9uc10ge29iamVjdH0gVGhlIG9wdGlvbmFsIHJlbmRlcmVyIHBhcmFtZXRlcnNcbiAqIEBwYXJhbSBbb3B0aW9ucy52aWV3XSB7SFRNTENhbnZhc0VsZW1lbnR9IHRoZSBjYW52YXMgdG8gdXNlIGFzIGEgdmlldywgb3B0aW9uYWxcbiAqIEBwYXJhbSBbb3B0aW9ucy50cmFuc3BhcmVudD1mYWxzZV0ge2Jvb2xlYW59IElmIHRoZSByZW5kZXIgdmlldyBpcyB0cmFuc3BhcmVudCwgZGVmYXVsdCBmYWxzZVxuICogQHBhcmFtIFtvcHRpb25zLmF1dG9SZXNpemU9ZmFsc2VdIHtib29sZWFufSBJZiB0aGUgcmVuZGVyIHZpZXcgaXMgYXV0b21hdGljYWxseSByZXNpemVkLCBkZWZhdWx0IGZhbHNlXG4gKiBAcGFyYW0gW29wdGlvbnMuYW50aWFsaWFzPWZhbHNlXSB7Ym9vbGVhbn0gc2V0cyBhbnRpYWxpYXMgKG9ubHkgYXBwbGljYWJsZSBpbiBjaHJvbWUgYXQgdGhlIG1vbWVudClcbiAqIEBwYXJhbSBbb3B0aW9ucy5yZXNvbHV0aW9uPTFdIHtudW1iZXJ9IHRoZSByZXNvbHV0aW9uIG9mIHRoZSByZW5kZXJlciByZXRpbmEgd291bGQgYmUgMlxuICogQHBhcmFtIFtvcHRpb25zLmNsZWFyQmVmb3JlUmVuZGVyPXRydWVdIHtib29sZWFufSBUaGlzIHNldHMgaWYgdGhlIENhbnZhc1JlbmRlcmVyIHdpbGwgY2xlYXIgdGhlIGNhbnZhcyBvclxuICogICAgICBub3QgYmVmb3JlIHRoZSBuZXcgcmVuZGVyIHBhc3MuXG4gKiBAcGFyYW0gW29wdGlvbnMuYmFja2dyb3VuZENvbG9yPTB4MDAwMDAwXSB7bnVtYmVyfSBUaGUgYmFja2dyb3VuZCBjb2xvciBvZiB0aGUgcmVuZGVyZWQgYXJlYSAoc2hvd24gaWYgbm90IHRyYW5zcGFyZW50KS5cbiAqIEBwYXJhbSBbb3B0aW9ucy5yb3VuZFBpeGVscz1mYWxzZV0ge2Jvb2xlYW59IElmIHRydWUgUGl4aSB3aWxsIE1hdGguZmxvb3IoKSB4L3kgdmFsdWVzIHdoZW4gcmVuZGVyaW5nLCBzdG9wcGluZyBwaXhlbCBpbnRlcnBvbGF0aW9uLlxuICovXG5mdW5jdGlvbiBTeXN0ZW1SZW5kZXJlcihzeXN0ZW0sIHdpZHRoLCBoZWlnaHQsIG9wdGlvbnMpXG57XG4gICAgRXZlbnRFbWl0dGVyLmNhbGwodGhpcyk7XG5cbiAgICB1dGlscy5zYXlIZWxsbyhzeXN0ZW0pO1xuXG4gICAgLy8gcHJlcGFyZSBvcHRpb25zXG4gICAgaWYgKG9wdGlvbnMpXG4gICAge1xuICAgICAgICBmb3IgKHZhciBpIGluIENPTlNULkRFRkFVTFRfUkVOREVSX09QVElPTlMpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGlmICh0eXBlb2Ygb3B0aW9uc1tpXSA9PT0gJ3VuZGVmaW5lZCcpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgb3B0aW9uc1tpXSA9IENPTlNULkRFRkFVTFRfUkVOREVSX09QVElPTlNbaV07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgb3B0aW9ucyA9IENPTlNULkRFRkFVTFRfUkVOREVSX09QVElPTlM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhlIHR5cGUgb2YgdGhlIHJlbmRlcmVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IFBJWEkuUkVOREVSRVJfVFlQRS5VTktOT1dOXG4gICAgICogQHNlZSBQSVhJLlJFTkRFUkVSX1RZUEVcbiAgICAgKi9cbiAgICB0aGlzLnR5cGUgPSBDT05TVC5SRU5ERVJFUl9UWVBFLlVOS05PV047XG5cbiAgICAvKipcbiAgICAgKiBUaGUgd2lkdGggb2YgdGhlIGNhbnZhcyB2aWV3XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgODAwXG4gICAgICovXG4gICAgdGhpcy53aWR0aCA9IHdpZHRoIHx8IDgwMDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBoZWlnaHQgb2YgdGhlIGNhbnZhcyB2aWV3XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgNjAwXG4gICAgICovXG4gICAgdGhpcy5oZWlnaHQgPSBoZWlnaHQgfHwgNjAwO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGNhbnZhcyBlbGVtZW50IHRoYXQgZXZlcnl0aGluZyBpcyBkcmF3biB0b1xuICAgICAqXG4gICAgICogQG1lbWJlciB7SFRNTENhbnZhc0VsZW1lbnR9XG4gICAgICovXG4gICAgdGhpcy52aWV3ID0gb3B0aW9ucy52aWV3IHx8IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NhbnZhcycpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHJlc29sdXRpb24gb2YgdGhlIHJlbmRlcmVyXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMVxuICAgICAqL1xuICAgIHRoaXMucmVzb2x1dGlvbiA9IG9wdGlvbnMucmVzb2x1dGlvbjtcblxuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgdGhlIHJlbmRlciB2aWV3IGlzIHRyYW5zcGFyZW50XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqL1xuICAgIHRoaXMudHJhbnNwYXJlbnQgPSBvcHRpb25zLnRyYW5zcGFyZW50O1xuXG4gICAgLyoqXG4gICAgICogV2hldGhlciB0aGUgcmVuZGVyIHZpZXcgc2hvdWxkIGJlIHJlc2l6ZWQgYXV0b21hdGljYWxseVxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKi9cbiAgICB0aGlzLmF1dG9SZXNpemUgPSBvcHRpb25zLmF1dG9SZXNpemUgfHwgZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBUcmFja3MgdGhlIGJsZW5kIG1vZGVzIHVzZWZ1bCBmb3IgdGhpcyByZW5kZXJlci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge29iamVjdDxzdHJpbmcsIG1peGVkPn1cbiAgICAgKi9cbiAgICB0aGlzLmJsZW5kTW9kZXMgPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHZhbHVlIG9mIHRoZSBwcmVzZXJ2ZURyYXdpbmdCdWZmZXIgZmxhZyBhZmZlY3RzIHdoZXRoZXIgb3Igbm90IHRoZSBjb250ZW50cyBvZiB0aGUgc3RlbmNpbCBidWZmZXIgaXMgcmV0YWluZWQgYWZ0ZXIgcmVuZGVyaW5nLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKi9cbiAgICB0aGlzLnByZXNlcnZlRHJhd2luZ0J1ZmZlciA9IG9wdGlvbnMucHJlc2VydmVEcmF3aW5nQnVmZmVyO1xuXG4gICAgLyoqXG4gICAgICogVGhpcyBzZXRzIGlmIHRoZSBDYW52YXNSZW5kZXJlciB3aWxsIGNsZWFyIHRoZSBjYW52YXMgb3Igbm90IGJlZm9yZSB0aGUgbmV3IHJlbmRlciBwYXNzLlxuICAgICAqIElmIHRoZSBzY2VuZSBpcyBOT1QgdHJhbnNwYXJlbnQgUGl4aSB3aWxsIHVzZSBhIGNhbnZhcyBzaXplZCBmaWxsUmVjdCBvcGVyYXRpb24gZXZlcnkgZnJhbWUgdG8gc2V0IHRoZSBjYW52YXMgYmFja2dyb3VuZCBjb2xvci5cbiAgICAgKiBJZiB0aGUgc2NlbmUgaXMgdHJhbnNwYXJlbnQgUGl4aSB3aWxsIHVzZSBjbGVhclJlY3QgdG8gY2xlYXIgdGhlIGNhbnZhcyBldmVyeSBmcmFtZS5cbiAgICAgKiBEaXNhYmxlIHRoaXMgYnkgc2V0dGluZyB0aGlzIHRvIGZhbHNlLiBGb3IgZXhhbXBsZSBpZiB5b3VyIGdhbWUgaGFzIGEgY2FudmFzIGZpbGxpbmcgYmFja2dyb3VuZCBpbWFnZSB5b3Ugb2Z0ZW4gZG9uJ3QgbmVlZCB0aGlzIHNldC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICogQGRlZmF1bHRcbiAgICAgKi9cbiAgICB0aGlzLmNsZWFyQmVmb3JlUmVuZGVyID0gb3B0aW9ucy5jbGVhckJlZm9yZVJlbmRlcjtcblxuICAgIC8qKlxuICAgICAqIElmIHRydWUgUGl4aSB3aWxsIE1hdGguZmxvb3IoKSB4L3kgdmFsdWVzIHdoZW4gcmVuZGVyaW5nLCBzdG9wcGluZyBwaXhlbCBpbnRlcnBvbGF0aW9uLlxuICAgICAqIEhhbmR5IGZvciBjcmlzcCBwaXhlbCBhcnQgYW5kIHNwZWVkIG9uIGxlZ2FjeSBkZXZpY2VzLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKi9cbiAgICB0aGlzLnJvdW5kUGl4ZWxzID0gb3B0aW9ucy5yb3VuZFBpeGVscztcblxuICAgIC8qKlxuICAgICAqIFRoZSBiYWNrZ3JvdW5kIGNvbG9yIGFzIGEgbnVtYmVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fYmFja2dyb3VuZENvbG9yID0gMHgwMDAwMDA7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYmFja2dyb3VuZCBjb2xvciBhcyBhbiBbUiwgRywgQl0gYXJyYXkuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJbXX1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX2JhY2tncm91bmRDb2xvclJnYmEgPSBbMCwgMCwgMCwgMF07XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYmFja2dyb3VuZCBjb2xvciBhcyBhIHN0cmluZy5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge3N0cmluZ31cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX2JhY2tncm91bmRDb2xvclN0cmluZyA9ICcjMDAwMDAwJztcblxuICAgIHRoaXMuYmFja2dyb3VuZENvbG9yID0gb3B0aW9ucy5iYWNrZ3JvdW5kQ29sb3IgfHwgdGhpcy5fYmFja2dyb3VuZENvbG9yOyAvLyBydW4gYmcgY29sb3Igc2V0dGVyXG5cbiAgICAvKipcbiAgICAgKiBUaGlzIHRlbXBvcmFyeSBkaXNwbGF5IG9iamVjdCB1c2VkIGFzIHRoZSBwYXJlbnQgb2YgdGhlIGN1cnJlbnRseSBiZWluZyByZW5kZXJlZCBpdGVtXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLkRpc3BsYXlPYmplY3R9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl90ZW1wRGlzcGxheU9iamVjdFBhcmVudCA9IHt3b3JsZFRyYW5zZm9ybTpuZXcgbWF0aC5NYXRyaXgoKSwgd29ybGRBbHBoYToxLCBjaGlsZHJlbjpbXX07XG5cbiAgICAvKipcbiAgICAgKiBUaGUgbGFzdCByb290IG9iamVjdCB0aGF0IHRoZSByZW5kZXJlciB0cmllZCB0byByZW5kZXIuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLkRpc3BsYXlPYmplY3R9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9sYXN0T2JqZWN0UmVuZGVyZWQgPSB0aGlzLl90ZW1wRGlzcGxheU9iamVjdFBhcmVudDtcbn1cblxuLy8gY29uc3RydWN0b3JcblN5c3RlbVJlbmRlcmVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoRXZlbnRFbWl0dGVyLnByb3RvdHlwZSk7XG5TeXN0ZW1SZW5kZXJlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBTeXN0ZW1SZW5kZXJlcjtcbm1vZHVsZS5leHBvcnRzID0gU3lzdGVtUmVuZGVyZXI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKFN5c3RlbVJlbmRlcmVyLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFRoZSBiYWNrZ3JvdW5kIGNvbG9yIHRvIGZpbGwgaWYgbm90IHRyYW5zcGFyZW50XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuU3lzdGVtUmVuZGVyZXIjXG4gICAgICovXG4gICAgYmFja2dyb3VuZENvbG9yOlxuICAgIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fYmFja2dyb3VuZENvbG9yO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWwpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuX2JhY2tncm91bmRDb2xvciA9IHZhbDtcbiAgICAgICAgICAgIHRoaXMuX2JhY2tncm91bmRDb2xvclN0cmluZyA9IHV0aWxzLmhleDJzdHJpbmcodmFsKTtcbiAgICAgICAgICAgIHV0aWxzLmhleDJyZ2IodmFsLCB0aGlzLl9iYWNrZ3JvdW5kQ29sb3JSZ2JhKTtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuXG4vKipcbiAqIFJlc2l6ZXMgdGhlIGNhbnZhcyB2aWV3IHRvIHRoZSBzcGVjaWZpZWQgd2lkdGggYW5kIGhlaWdodFxuICpcbiAqIEBwYXJhbSB3aWR0aCB7bnVtYmVyfSB0aGUgbmV3IHdpZHRoIG9mIHRoZSBjYW52YXMgdmlld1xuICogQHBhcmFtIGhlaWdodCB7bnVtYmVyfSB0aGUgbmV3IGhlaWdodCBvZiB0aGUgY2FudmFzIHZpZXdcbiAqL1xuU3lzdGVtUmVuZGVyZXIucHJvdG90eXBlLnJlc2l6ZSA9IGZ1bmN0aW9uICh3aWR0aCwgaGVpZ2h0KSB7XG4gICAgdGhpcy53aWR0aCA9IHdpZHRoICogdGhpcy5yZXNvbHV0aW9uO1xuICAgIHRoaXMuaGVpZ2h0ID0gaGVpZ2h0ICogdGhpcy5yZXNvbHV0aW9uO1xuXG4gICAgdGhpcy52aWV3LndpZHRoID0gdGhpcy53aWR0aDtcbiAgICB0aGlzLnZpZXcuaGVpZ2h0ID0gdGhpcy5oZWlnaHQ7XG5cbiAgICBpZiAodGhpcy5hdXRvUmVzaXplKVxuICAgIHtcbiAgICAgICAgdGhpcy52aWV3LnN0eWxlLndpZHRoID0gdGhpcy53aWR0aCAvIHRoaXMucmVzb2x1dGlvbiArICdweCc7XG4gICAgICAgIHRoaXMudmlldy5zdHlsZS5oZWlnaHQgPSB0aGlzLmhlaWdodCAvIHRoaXMucmVzb2x1dGlvbiArICdweCc7XG4gICAgfVxufTtcblxuLyoqXG4gKiBSZW1vdmVzIGV2ZXJ5dGhpbmcgZnJvbSB0aGUgcmVuZGVyZXIgYW5kIG9wdGlvbmFsbHkgcmVtb3ZlcyB0aGUgQ2FudmFzIERPTSBlbGVtZW50LlxuICpcbiAqIEBwYXJhbSBbcmVtb3ZlVmlldz1mYWxzZV0ge2Jvb2xlYW59IFJlbW92ZXMgdGhlIENhbnZhcyBlbGVtZW50IGZyb20gdGhlIERPTS5cbiAqL1xuU3lzdGVtUmVuZGVyZXIucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAocmVtb3ZlVmlldykge1xuICAgIGlmIChyZW1vdmVWaWV3ICYmIHRoaXMudmlldy5wYXJlbnROb2RlKVxuICAgIHtcbiAgICAgICAgdGhpcy52aWV3LnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodGhpcy52aWV3KTtcbiAgICB9XG5cbiAgICB0aGlzLnR5cGUgPSBDT05TVC5SRU5ERVJFUl9UWVBFLlVOS05PV047XG5cbiAgICB0aGlzLndpZHRoID0gMDtcbiAgICB0aGlzLmhlaWdodCA9IDA7XG5cbiAgICB0aGlzLnZpZXcgPSBudWxsO1xuXG4gICAgdGhpcy5yZXNvbHV0aW9uID0gMDtcblxuICAgIHRoaXMudHJhbnNwYXJlbnQgPSBmYWxzZTtcblxuICAgIHRoaXMuYXV0b1Jlc2l6ZSA9IGZhbHNlO1xuXG4gICAgdGhpcy5ibGVuZE1vZGVzID0gbnVsbDtcblxuICAgIHRoaXMucHJlc2VydmVEcmF3aW5nQnVmZmVyID0gZmFsc2U7XG4gICAgdGhpcy5jbGVhckJlZm9yZVJlbmRlciA9IGZhbHNlO1xuXG4gICAgdGhpcy5yb3VuZFBpeGVscyA9IGZhbHNlO1xuXG4gICAgdGhpcy5fYmFja2dyb3VuZENvbG9yID0gMDtcbiAgICB0aGlzLl9iYWNrZ3JvdW5kQ29sb3JSZ2JhID0gbnVsbDtcbiAgICB0aGlzLl9iYWNrZ3JvdW5kQ29sb3JTdHJpbmcgPSBudWxsO1xufTtcbiIsInZhciBTeXN0ZW1SZW5kZXJlciA9IHJlcXVpcmUoJy4uL1N5c3RlbVJlbmRlcmVyJyksXG4gICAgQ2FudmFzTWFza01hbmFnZXIgPSByZXF1aXJlKCcuL3V0aWxzL0NhbnZhc01hc2tNYW5hZ2VyJyksXG4gICAgdXRpbHMgPSByZXF1aXJlKCcuLi8uLi91dGlscycpLFxuICAgIG1hdGggPSByZXF1aXJlKCcuLi8uLi9tYXRoJyksXG4gICAgQ09OU1QgPSByZXF1aXJlKCcuLi8uLi9jb25zdCcpO1xuXG4vKipcbiAqIFRoZSBDYW52YXNSZW5kZXJlciBkcmF3cyB0aGUgc2NlbmUgYW5kIGFsbCBpdHMgY29udGVudCBvbnRvIGEgMmQgY2FudmFzLiBUaGlzIHJlbmRlcmVyIHNob3VsZCBiZSB1c2VkIGZvciBicm93c2VycyB0aGF0IGRvIG5vdCBzdXBwb3J0IHdlYkdMLlxuICogRG9uJ3QgZm9yZ2V0IHRvIGFkZCB0aGUgQ2FudmFzUmVuZGVyZXIudmlldyB0byB5b3VyIERPTSBvciB5b3Ugd2lsbCBub3Qgc2VlIGFueXRoaW5nIDopXG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQGV4dGVuZHMgUElYSS5TeXN0ZW1SZW5kZXJlclxuICogQHBhcmFtIFt3aWR0aD04MDBdIHtudW1iZXJ9IHRoZSB3aWR0aCBvZiB0aGUgY2FudmFzIHZpZXdcbiAqIEBwYXJhbSBbaGVpZ2h0PTYwMF0ge251bWJlcn0gdGhlIGhlaWdodCBvZiB0aGUgY2FudmFzIHZpZXdcbiAqIEBwYXJhbSBbb3B0aW9uc10ge29iamVjdH0gVGhlIG9wdGlvbmFsIHJlbmRlcmVyIHBhcmFtZXRlcnNcbiAqIEBwYXJhbSBbb3B0aW9ucy52aWV3XSB7SFRNTENhbnZhc0VsZW1lbnR9IHRoZSBjYW52YXMgdG8gdXNlIGFzIGEgdmlldywgb3B0aW9uYWxcbiAqIEBwYXJhbSBbb3B0aW9ucy50cmFuc3BhcmVudD1mYWxzZV0ge2Jvb2xlYW59IElmIHRoZSByZW5kZXIgdmlldyBpcyB0cmFuc3BhcmVudCwgZGVmYXVsdCBmYWxzZVxuICogQHBhcmFtIFtvcHRpb25zLmF1dG9SZXNpemU9ZmFsc2VdIHtib29sZWFufSBJZiB0aGUgcmVuZGVyIHZpZXcgaXMgYXV0b21hdGljYWxseSByZXNpemVkLCBkZWZhdWx0IGZhbHNlXG4gKiBAcGFyYW0gW29wdGlvbnMuYW50aWFsaWFzPWZhbHNlXSB7Ym9vbGVhbn0gc2V0cyBhbnRpYWxpYXMgKG9ubHkgYXBwbGljYWJsZSBpbiBjaHJvbWUgYXQgdGhlIG1vbWVudClcbiAqIEBwYXJhbSBbb3B0aW9ucy5yZXNvbHV0aW9uPTFdIHtudW1iZXJ9IHRoZSByZXNvbHV0aW9uIG9mIHRoZSByZW5kZXJlciByZXRpbmEgd291bGQgYmUgMlxuICogQHBhcmFtIFtvcHRpb25zLmNsZWFyQmVmb3JlUmVuZGVyPXRydWVdIHtib29sZWFufSBUaGlzIHNldHMgaWYgdGhlIENhbnZhc1JlbmRlcmVyIHdpbGwgY2xlYXIgdGhlIGNhbnZhcyBvclxuICogICAgICBub3QgYmVmb3JlIHRoZSBuZXcgcmVuZGVyIHBhc3MuXG4gKiBAcGFyYW0gW29wdGlvbnMucm91bmRQaXhlbHM9ZmFsc2VdIHtib29sZWFufSBJZiB0cnVlIFBpeGkgd2lsbCBNYXRoLmZsb29yKCkgeC95IHZhbHVlcyB3aGVuIHJlbmRlcmluZywgc3RvcHBpbmcgcGl4ZWwgaW50ZXJwb2xhdGlvbi5cbiAqL1xuZnVuY3Rpb24gQ2FudmFzUmVuZGVyZXIod2lkdGgsIGhlaWdodCwgb3B0aW9ucylcbntcbiAgICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcblxuICAgIFN5c3RlbVJlbmRlcmVyLmNhbGwodGhpcywgJ0NhbnZhcycsIHdpZHRoLCBoZWlnaHQsIG9wdGlvbnMpO1xuXG4gICAgdGhpcy50eXBlID0gQ09OU1QuUkVOREVSRVJfVFlQRS5DQU5WQVM7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgY2FudmFzIDJkIGNvbnRleHQgdGhhdCBldmVyeXRoaW5nIGlzIGRyYXduIHdpdGguXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtDYW52YXNSZW5kZXJpbmdDb250ZXh0MkR9XG4gICAgICovXG4gICAgdGhpcy5jb250ZXh0ID0gdGhpcy52aWV3LmdldENvbnRleHQoJzJkJywgeyBhbHBoYTogdGhpcy50cmFuc3BhcmVudCB9KTtcblxuICAgIC8qKlxuICAgICAqIEJvb2xlYW4gZmxhZyBjb250cm9sbGluZyBjYW52YXMgcmVmcmVzaC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICovXG4gICAgdGhpcy5yZWZyZXNoID0gdHJ1ZTtcblxuICAgIC8qKlxuICAgICAqIEluc3RhbmNlIG9mIGEgQ2FudmFzTWFza01hbmFnZXIsIGhhbmRsZXMgbWFza2luZyB3aGVuIHVzaW5nIHRoZSBjYW52YXMgcmVuZGVyZXIuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLkNhbnZhc01hc2tNYW5hZ2VyfVxuICAgICAqL1xuICAgIHRoaXMubWFza01hbmFnZXIgPSBuZXcgQ2FudmFzTWFza01hbmFnZXIoKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBjYW52YXMgcHJvcGVydHkgdXNlZCB0byBzZXQgdGhlIGNhbnZhcyBzbW9vdGhpbmcgcHJvcGVydHkuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtzdHJpbmd9XG4gICAgICovXG4gICAgdGhpcy5zbW9vdGhQcm9wZXJ0eSA9ICdpbWFnZVNtb290aGluZ0VuYWJsZWQnO1xuXG4gICAgaWYgKCF0aGlzLmNvbnRleHQuaW1hZ2VTbW9vdGhpbmdFbmFibGVkKVxuICAgIHtcbiAgICAgICAgaWYgKHRoaXMuY29udGV4dC53ZWJraXRJbWFnZVNtb290aGluZ0VuYWJsZWQpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuc21vb3RoUHJvcGVydHkgPSAnd2Via2l0SW1hZ2VTbW9vdGhpbmdFbmFibGVkJztcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh0aGlzLmNvbnRleHQubW96SW1hZ2VTbW9vdGhpbmdFbmFibGVkKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnNtb290aFByb3BlcnR5ID0gJ21vekltYWdlU21vb3RoaW5nRW5hYmxlZCc7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodGhpcy5jb250ZXh0Lm9JbWFnZVNtb290aGluZ0VuYWJsZWQpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuc21vb3RoUHJvcGVydHkgPSAnb0ltYWdlU21vb3RoaW5nRW5hYmxlZCc7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodGhpcy5jb250ZXh0Lm1zSW1hZ2VTbW9vdGhpbmdFbmFibGVkKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnNtb290aFByb3BlcnR5ID0gJ21zSW1hZ2VTbW9vdGhpbmdFbmFibGVkJztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMuaW5pdFBsdWdpbnMoKTtcblxuICAgIHRoaXMuX21hcEJsZW5kTW9kZXMoKTtcblxuICAgIC8qKlxuICAgICAqIFRoaXMgdGVtcG9yYXJ5IGRpc3BsYXkgb2JqZWN0IHVzZWQgYXMgdGhlIHBhcmVudCBvZiB0aGUgY3VycmVudGx5IGJlaW5nIHJlbmRlcmVkIGl0ZW1cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuRGlzcGxheU9iamVjdH1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX3RlbXBEaXNwbGF5T2JqZWN0UGFyZW50ID0ge1xuICAgICAgICB3b3JsZFRyYW5zZm9ybTogbmV3IG1hdGguTWF0cml4KCksXG4gICAgICAgIHdvcmxkQWxwaGE6IDFcbiAgICB9O1xuXG5cbiAgICB0aGlzLnJlc2l6ZSh3aWR0aCwgaGVpZ2h0KTtcbn1cblxuLy8gY29uc3RydWN0b3JcbkNhbnZhc1JlbmRlcmVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoU3lzdGVtUmVuZGVyZXIucHJvdG90eXBlKTtcbkNhbnZhc1JlbmRlcmVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IENhbnZhc1JlbmRlcmVyO1xubW9kdWxlLmV4cG9ydHMgPSBDYW52YXNSZW5kZXJlcjtcbnV0aWxzLnBsdWdpblRhcmdldC5taXhpbihDYW52YXNSZW5kZXJlcik7XG5cbi8qKlxuICogUmVuZGVycyB0aGUgb2JqZWN0IHRvIHRoaXMgY2FudmFzIHZpZXdcbiAqXG4gKiBAcGFyYW0gb2JqZWN0IHtQSVhJLkRpc3BsYXlPYmplY3R9IHRoZSBvYmplY3QgdG8gYmUgcmVuZGVyZWRcbiAqL1xuQ2FudmFzUmVuZGVyZXIucHJvdG90eXBlLnJlbmRlciA9IGZ1bmN0aW9uIChvYmplY3QpXG57XG4gICAgdGhpcy5lbWl0KCdwcmVyZW5kZXInKTtcblxuICAgIHZhciBjYWNoZVBhcmVudCA9IG9iamVjdC5wYXJlbnQ7XG5cbiAgICB0aGlzLl9sYXN0T2JqZWN0UmVuZGVyZWQgPSBvYmplY3Q7XG5cbiAgICBvYmplY3QucGFyZW50ID0gdGhpcy5fdGVtcERpc3BsYXlPYmplY3RQYXJlbnQ7XG5cbiAgICAvLyB1cGRhdGUgdGhlIHNjZW5lIGdyYXBoXG4gICAgb2JqZWN0LnVwZGF0ZVRyYW5zZm9ybSgpO1xuXG4gICAgb2JqZWN0LnBhcmVudCA9IGNhY2hlUGFyZW50O1xuXG4gICAgdGhpcy5jb250ZXh0LnNldFRyYW5zZm9ybSgxLCAwLCAwLCAxLCAwLCAwKTtcblxuICAgIHRoaXMuY29udGV4dC5nbG9iYWxBbHBoYSA9IDE7XG5cbiAgICB0aGlzLmNvbnRleHQuZ2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uID0gdGhpcy5ibGVuZE1vZGVzW0NPTlNULkJMRU5EX01PREVTLk5PUk1BTF07XG5cbiAgICBpZiAobmF2aWdhdG9yLmlzQ29jb29uSlMgJiYgdGhpcy52aWV3LnNjcmVlbmNhbnZhcylcbiAgICB7XG4gICAgICAgIHRoaXMuY29udGV4dC5maWxsU3R5bGUgPSAnYmxhY2snO1xuICAgICAgICB0aGlzLmNvbnRleHQuY2xlYXIoKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5jbGVhckJlZm9yZVJlbmRlcilcbiAgICB7XG4gICAgICAgIGlmICh0aGlzLnRyYW5zcGFyZW50KVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmNvbnRleHQuY2xlYXJSZWN0KDAsIDAsIHRoaXMud2lkdGgsIHRoaXMuaGVpZ2h0KTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuY29udGV4dC5maWxsU3R5bGUgPSB0aGlzLl9iYWNrZ3JvdW5kQ29sb3JTdHJpbmc7XG4gICAgICAgICAgICB0aGlzLmNvbnRleHQuZmlsbFJlY3QoMCwgMCwgdGhpcy53aWR0aCAsIHRoaXMuaGVpZ2h0KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMucmVuZGVyRGlzcGxheU9iamVjdChvYmplY3QsIHRoaXMuY29udGV4dCk7XG5cbiAgICB0aGlzLmVtaXQoJ3Bvc3RyZW5kZXInKTtcbn07XG5cbi8qKlxuICogUmVtb3ZlcyBldmVyeXRoaW5nIGZyb20gdGhlIHJlbmRlcmVyIGFuZCBvcHRpb25hbGx5IHJlbW92ZXMgdGhlIENhbnZhcyBET00gZWxlbWVudC5cbiAqXG4gKiBAcGFyYW0gW3JlbW92ZVZpZXc9ZmFsc2VdIHtib29sZWFufSBSZW1vdmVzIHRoZSBDYW52YXMgZWxlbWVudCBmcm9tIHRoZSBET00uXG4gKi9cbkNhbnZhc1JlbmRlcmVyLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKHJlbW92ZVZpZXcpXG57XG4gICAgdGhpcy5kZXN0cm95UGx1Z2lucygpO1xuXG4gICAgLy8gY2FsbCB0aGUgYmFzZSBkZXN0cm95XG4gICAgU3lzdGVtUmVuZGVyZXIucHJvdG90eXBlLmRlc3Ryb3kuY2FsbCh0aGlzLCByZW1vdmVWaWV3KTtcblxuICAgIHRoaXMuY29udGV4dCA9IG51bGw7XG5cbiAgICB0aGlzLnJlZnJlc2ggPSB0cnVlO1xuXG4gICAgdGhpcy5tYXNrTWFuYWdlci5kZXN0cm95KCk7XG4gICAgdGhpcy5tYXNrTWFuYWdlciA9IG51bGw7XG5cbiAgICB0aGlzLnNtb290aFByb3BlcnR5ID0gbnVsbDtcbn07XG5cbi8qKlxuICogUmVuZGVycyBhIGRpc3BsYXkgb2JqZWN0XG4gKlxuICogQHBhcmFtIGRpc3BsYXlPYmplY3Qge1BJWEkuRGlzcGxheU9iamVjdH0gVGhlIGRpc3BsYXlPYmplY3QgdG8gcmVuZGVyXG4gKiBAcHJpdmF0ZVxuICovXG5DYW52YXNSZW5kZXJlci5wcm90b3R5cGUucmVuZGVyRGlzcGxheU9iamVjdCA9IGZ1bmN0aW9uIChkaXNwbGF5T2JqZWN0LCBjb250ZXh0KVxue1xuICAgIHZhciB0ZW1wQ29udGV4dCA9IHRoaXMuY29udGV4dDtcblxuICAgIHRoaXMuY29udGV4dCA9IGNvbnRleHQ7XG4gICAgZGlzcGxheU9iamVjdC5yZW5kZXJDYW52YXModGhpcyk7XG4gICAgdGhpcy5jb250ZXh0ID0gdGVtcENvbnRleHQ7XG59O1xuXG4vKipcbiAqIEBleHRlbmRzIFBJWEkuU3lzdGVtUmVuZGVyZXIjcmVzaXplXG4gKlxuICogQHBhcmFtIHtudW1iZXJ9IHdcbiAqIEBwYXJhbSB7bnVtYmVyfSBoXG4gKi9cbkNhbnZhc1JlbmRlcmVyLnByb3RvdHlwZS5yZXNpemUgPSBmdW5jdGlvbiAodywgaClcbntcbiAgICBTeXN0ZW1SZW5kZXJlci5wcm90b3R5cGUucmVzaXplLmNhbGwodGhpcywgdywgaCk7XG5cbiAgICAvL3Jlc2V0IHRoZSBzY2FsZSBtb2RlLi4gb2RkbHkgdGhpcyBzZWVtcyB0byBiZSByZXNldCB3aGVuIHRoZSBjYW52YXMgaXMgcmVzaXplZC5cbiAgICAvL3N1cmVseSBhIGJyb3dzZXIgYnVnPz8gTGV0IHBpeGkgZml4IHRoYXQgZm9yIHlvdS4uXG4gICAgaWYodGhpcy5zbW9vdGhQcm9wZXJ0eSlcbiAgICB7XG4gICAgICAgIHRoaXMuY29udGV4dFt0aGlzLnNtb290aFByb3BlcnR5XSA9IChDT05TVC5TQ0FMRV9NT0RFUy5ERUZBVUxUID09PSBDT05TVC5TQ0FMRV9NT0RFUy5MSU5FQVIpO1xuICAgIH1cblxufTtcblxuLyoqXG4gKiBNYXBzIFBpeGkgYmxlbmQgbW9kZXMgdG8gY2FudmFzIGJsZW5kIG1vZGVzLlxuICpcbiAqIEBwcml2YXRlXG4gKi9cbkNhbnZhc1JlbmRlcmVyLnByb3RvdHlwZS5fbWFwQmxlbmRNb2RlcyA9IGZ1bmN0aW9uICgpXG57XG4gICAgaWYgKCF0aGlzLmJsZW5kTW9kZXMpXG4gICAge1xuICAgICAgICB0aGlzLmJsZW5kTW9kZXMgPSB7fTtcblxuICAgICAgICBpZiAodXRpbHMuY2FuVXNlTmV3Q2FudmFzQmxlbmRNb2RlcygpKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuTk9STUFMXSAgICAgICAgPSAnc291cmNlLW92ZXInO1xuICAgICAgICAgICAgdGhpcy5ibGVuZE1vZGVzW0NPTlNULkJMRU5EX01PREVTLkFERF0gICAgICAgICAgID0gJ2xpZ2h0ZXInOyAvL0lTIFRISVMgT0s/Pz9cbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5NVUxUSVBMWV0gICAgICA9ICdtdWx0aXBseSc7XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuU0NSRUVOXSAgICAgICAgPSAnc2NyZWVuJztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5PVkVSTEFZXSAgICAgICA9ICdvdmVybGF5JztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5EQVJLRU5dICAgICAgICA9ICdkYXJrZW4nO1xuICAgICAgICAgICAgdGhpcy5ibGVuZE1vZGVzW0NPTlNULkJMRU5EX01PREVTLkxJR0hURU5dICAgICAgID0gJ2xpZ2h0ZW4nO1xuICAgICAgICAgICAgdGhpcy5ibGVuZE1vZGVzW0NPTlNULkJMRU5EX01PREVTLkNPTE9SX0RPREdFXSAgID0gJ2NvbG9yLWRvZGdlJztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5DT0xPUl9CVVJOXSAgICA9ICdjb2xvci1idXJuJztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5IQVJEX0xJR0hUXSAgICA9ICdoYXJkLWxpZ2h0JztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5TT0ZUX0xJR0hUXSAgICA9ICdzb2Z0LWxpZ2h0JztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5ESUZGRVJFTkNFXSAgICA9ICdkaWZmZXJlbmNlJztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5FWENMVVNJT05dICAgICA9ICdleGNsdXNpb24nO1xuICAgICAgICAgICAgdGhpcy5ibGVuZE1vZGVzW0NPTlNULkJMRU5EX01PREVTLkhVRV0gICAgICAgICAgID0gJ2h1ZSc7XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuU0FUVVJBVElPTl0gICAgPSAnc2F0dXJhdGUnO1xuICAgICAgICAgICAgdGhpcy5ibGVuZE1vZGVzW0NPTlNULkJMRU5EX01PREVTLkNPTE9SXSAgICAgICAgID0gJ2NvbG9yJztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5MVU1JTk9TSVRZXSAgICA9ICdsdW1pbm9zaXR5JztcbiAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgIHtcbiAgICAgICAgICAgIC8vIHRoaXMgbWVhbnMgdGhhdCB0aGUgYnJvd3NlciBkb2VzIG5vdCBzdXBwb3J0IHRoZSBjb29sIG5ldyBibGVuZCBtb2RlcyBpbiBjYW52YXMgJ2NvdWdoJyBpZSAnY291Z2gnXG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuTk9STUFMXSAgICAgICAgPSAnc291cmNlLW92ZXInO1xuICAgICAgICAgICAgdGhpcy5ibGVuZE1vZGVzW0NPTlNULkJMRU5EX01PREVTLkFERF0gICAgICAgICAgID0gJ2xpZ2h0ZXInOyAvL0lTIFRISVMgT0s/Pz9cbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5NVUxUSVBMWV0gICAgICA9ICdzb3VyY2Utb3Zlcic7XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuU0NSRUVOXSAgICAgICAgPSAnc291cmNlLW92ZXInO1xuICAgICAgICAgICAgdGhpcy5ibGVuZE1vZGVzW0NPTlNULkJMRU5EX01PREVTLk9WRVJMQVldICAgICAgID0gJ3NvdXJjZS1vdmVyJztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5EQVJLRU5dICAgICAgICA9ICdzb3VyY2Utb3Zlcic7XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuTElHSFRFTl0gICAgICAgPSAnc291cmNlLW92ZXInO1xuICAgICAgICAgICAgdGhpcy5ibGVuZE1vZGVzW0NPTlNULkJMRU5EX01PREVTLkNPTE9SX0RPREdFXSAgID0gJ3NvdXJjZS1vdmVyJztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5DT0xPUl9CVVJOXSAgICA9ICdzb3VyY2Utb3Zlcic7XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuSEFSRF9MSUdIVF0gICAgPSAnc291cmNlLW92ZXInO1xuICAgICAgICAgICAgdGhpcy5ibGVuZE1vZGVzW0NPTlNULkJMRU5EX01PREVTLlNPRlRfTElHSFRdICAgID0gJ3NvdXJjZS1vdmVyJztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5ESUZGRVJFTkNFXSAgICA9ICdzb3VyY2Utb3Zlcic7XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuRVhDTFVTSU9OXSAgICAgPSAnc291cmNlLW92ZXInO1xuICAgICAgICAgICAgdGhpcy5ibGVuZE1vZGVzW0NPTlNULkJMRU5EX01PREVTLkhVRV0gICAgICAgICAgID0gJ3NvdXJjZS1vdmVyJztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5TQVRVUkFUSU9OXSAgICA9ICdzb3VyY2Utb3Zlcic7XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuQ09MT1JdICAgICAgICAgPSAnc291cmNlLW92ZXInO1xuICAgICAgICAgICAgdGhpcy5ibGVuZE1vZGVzW0NPTlNULkJMRU5EX01PREVTLkxVTUlOT1NJVFldICAgID0gJ3NvdXJjZS1vdmVyJztcbiAgICAgICAgfVxuICAgIH1cbn07XG4iLCIvKipcbiAqIENyZWF0ZXMgYSBDYW52YXMgZWxlbWVudCBvZiB0aGUgZ2l2ZW4gc2l6ZS5cbiAqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gd2lkdGgge251bWJlcn0gdGhlIHdpZHRoIGZvciB0aGUgbmV3bHkgY3JlYXRlZCBjYW52YXNcbiAqIEBwYXJhbSBoZWlnaHQge251bWJlcn0gdGhlIGhlaWdodCBmb3IgdGhlIG5ld2x5IGNyZWF0ZWQgY2FudmFzXG4gKi9cbmZ1bmN0aW9uIENhbnZhc0J1ZmZlcih3aWR0aCwgaGVpZ2h0KVxue1xuICAgIC8qKlxuICAgICAqIFRoZSBDYW52YXMgb2JqZWN0IHRoYXQgYmVsb25ncyB0byB0aGlzIENhbnZhc0J1ZmZlci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge0hUTUxDYW52YXNFbGVtZW50fVxuICAgICAqL1xuICAgIHRoaXMuY2FudmFzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnY2FudmFzJyk7XG5cbiAgICAvKipcbiAgICAgKiBBIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRCBvYmplY3QgcmVwcmVzZW50aW5nIGEgdHdvLWRpbWVuc2lvbmFsIHJlbmRlcmluZyBjb250ZXh0LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEfVxuICAgICAqL1xuICAgIHRoaXMuY29udGV4dCA9IHRoaXMuY2FudmFzLmdldENvbnRleHQoJzJkJyk7XG5cbiAgICB0aGlzLmNhbnZhcy53aWR0aCA9IHdpZHRoO1xuICAgIHRoaXMuY2FudmFzLmhlaWdodCA9IGhlaWdodDtcbn1cblxuQ2FudmFzQnVmZmVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IENhbnZhc0J1ZmZlcjtcbm1vZHVsZS5leHBvcnRzID0gQ2FudmFzQnVmZmVyO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhDYW52YXNCdWZmZXIucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogVGhlIHdpZHRoIG9mIHRoZSBjYW52YXMgYnVmZmVyIGluIHBpeGVscy5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5DYW52YXNCdWZmZXIjXG4gICAgICovXG4gICAgd2lkdGg6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jYW52YXMud2lkdGg7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbClcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5jYW52YXMud2lkdGggPSB2YWw7XG4gICAgICAgIH1cbiAgICB9LFxuICAgIC8qKlxuICAgICAqIFRoZSBoZWlnaHQgb2YgdGhlIGNhbnZhcyBidWZmZXIgaW4gcGl4ZWxzLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLkNhbnZhc0J1ZmZlciNcbiAgICAgKi9cbiAgICBoZWlnaHQ6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jYW52YXMuaGVpZ2h0O1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWwpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuY2FudmFzLmhlaWdodCA9IHZhbDtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuXG4vKipcbiAqIENsZWFycyB0aGUgY2FudmFzIHRoYXQgd2FzIGNyZWF0ZWQgYnkgdGhlIENhbnZhc0J1ZmZlciBjbGFzcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5DYW52YXNCdWZmZXIucHJvdG90eXBlLmNsZWFyID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLmNvbnRleHQuc2V0VHJhbnNmb3JtKDEsIDAsIDAsIDEsIDAsIDApO1xuICAgIHRoaXMuY29udGV4dC5jbGVhclJlY3QoMCwwLCB0aGlzLmNhbnZhcy53aWR0aCwgdGhpcy5jYW52YXMuaGVpZ2h0KTtcbn07XG5cbi8qKlxuICogUmVzaXplcyB0aGUgY2FudmFzIHRvIHRoZSBzcGVjaWZpZWQgd2lkdGggYW5kIGhlaWdodC5cbiAqXG4gKiBAcGFyYW0gd2lkdGgge251bWJlcn0gdGhlIG5ldyB3aWR0aCBvZiB0aGUgY2FudmFzXG4gKiBAcGFyYW0gaGVpZ2h0IHtudW1iZXJ9IHRoZSBuZXcgaGVpZ2h0IG9mIHRoZSBjYW52YXNcbiAqL1xuQ2FudmFzQnVmZmVyLnByb3RvdHlwZS5yZXNpemUgPSBmdW5jdGlvbiAod2lkdGgsIGhlaWdodClcbntcbiAgICB0aGlzLmNhbnZhcy53aWR0aCA9IHdpZHRoO1xuICAgIHRoaXMuY2FudmFzLmhlaWdodCA9IGhlaWdodDtcbn07XG5cbi8qKlxuICogRGVzdHJveXMgdGhpcyBjYW52YXMuXG4gKlxuICovXG5DYW52YXNCdWZmZXIucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoKVxue1xuICAgIHRoaXMuY29udGV4dCA9IG51bGw7XG4gICAgdGhpcy5jYW52YXMgPSBudWxsO1xufTtcbiIsInZhciBDT05TVCA9IHJlcXVpcmUoJy4uLy4uLy4uL2NvbnN0Jyk7XG5cbi8qKlxuICogQSBzZXQgb2YgZnVuY3Rpb25zIHVzZWQgYnkgdGhlIGNhbnZhcyByZW5kZXJlciB0byBkcmF3IHRoZSBwcmltaXRpdmUgZ3JhcGhpY3MgZGF0YS5cbiAqIEBzdGF0aWNcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqL1xudmFyIENhbnZhc0dyYXBoaWNzID0ge307XG5tb2R1bGUuZXhwb3J0cyA9IENhbnZhc0dyYXBoaWNzO1xuXG4vKlxuICogUmVuZGVycyBhIEdyYXBoaWNzIG9iamVjdCB0byBhIGNhbnZhcy5cbiAqXG4gKiBAcGFyYW0gZ3JhcGhpY3Mge1BJWEkuR3JhcGhpY3N9IHRoZSBhY3R1YWwgZ3JhcGhpY3Mgb2JqZWN0IHRvIHJlbmRlclxuICogQHBhcmFtIGNvbnRleHQge0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRH0gdGhlIDJkIGRyYXdpbmcgbWV0aG9kIG9mIHRoZSBjYW52YXNcbiAqL1xuQ2FudmFzR3JhcGhpY3MucmVuZGVyR3JhcGhpY3MgPSBmdW5jdGlvbiAoZ3JhcGhpY3MsIGNvbnRleHQpXG57XG4gICAgdmFyIHdvcmxkQWxwaGEgPSBncmFwaGljcy53b3JsZEFscGhhO1xuXG4gICAgaWYgKGdyYXBoaWNzLmRpcnR5KVxuICAgIHtcbiAgICAgICAgdGhpcy51cGRhdGVHcmFwaGljc1RpbnQoZ3JhcGhpY3MpO1xuICAgICAgICBncmFwaGljcy5kaXJ0eSA9IGZhbHNlO1xuICAgIH1cblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZ3JhcGhpY3MuZ3JhcGhpY3NEYXRhLmxlbmd0aDsgaSsrKVxuICAgIHtcbiAgICAgICAgdmFyIGRhdGEgPSBncmFwaGljcy5ncmFwaGljc0RhdGFbaV07XG4gICAgICAgIHZhciBzaGFwZSA9IGRhdGEuc2hhcGU7XG5cbiAgICAgICAgdmFyIGZpbGxDb2xvciA9IGRhdGEuX2ZpbGxUaW50O1xuICAgICAgICB2YXIgbGluZUNvbG9yID0gZGF0YS5fbGluZVRpbnQ7XG5cbiAgICAgICAgY29udGV4dC5saW5lV2lkdGggPSBkYXRhLmxpbmVXaWR0aDtcblxuICAgICAgICBpZiAoZGF0YS50eXBlID09PSBDT05TVC5TSEFQRVMuUE9MWSlcbiAgICAgICAge1xuICAgICAgICAgICAgY29udGV4dC5iZWdpblBhdGgoKTtcblxuICAgICAgICAgICAgdmFyIHBvaW50cyA9IHNoYXBlLnBvaW50cztcblxuICAgICAgICAgICAgY29udGV4dC5tb3ZlVG8ocG9pbnRzWzBdLCBwb2ludHNbMV0pO1xuXG4gICAgICAgICAgICBmb3IgKHZhciBqPTE7IGogPCBwb2ludHMubGVuZ3RoLzI7IGorKylcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb250ZXh0LmxpbmVUbyhwb2ludHNbaiAqIDJdLCBwb2ludHNbaiAqIDIgKyAxXSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChzaGFwZS5jbG9zZWQpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29udGV4dC5saW5lVG8ocG9pbnRzWzBdLCBwb2ludHNbMV0pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBpZiB0aGUgZmlyc3QgYW5kIGxhc3QgcG9pbnQgYXJlIHRoZSBzYW1lIGNsb3NlIHRoZSBwYXRoIC0gbXVjaCBuZWF0ZXIgOilcbiAgICAgICAgICAgIGlmIChwb2ludHNbMF0gPT09IHBvaW50c1twb2ludHMubGVuZ3RoLTJdICYmIHBvaW50c1sxXSA9PT0gcG9pbnRzW3BvaW50cy5sZW5ndGgtMV0pXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29udGV4dC5jbG9zZVBhdGgoKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGRhdGEuZmlsbClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb250ZXh0Lmdsb2JhbEFscGhhID0gZGF0YS5maWxsQWxwaGEgKiB3b3JsZEFscGhhO1xuICAgICAgICAgICAgICAgIGNvbnRleHQuZmlsbFN0eWxlID0gJyMnICsgKCcwMDAwMCcgKyAoIGZpbGxDb2xvciB8IDApLnRvU3RyaW5nKDE2KSkuc3Vic3RyKC02KTtcbiAgICAgICAgICAgICAgICBjb250ZXh0LmZpbGwoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChkYXRhLmxpbmVXaWR0aClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb250ZXh0Lmdsb2JhbEFscGhhID0gZGF0YS5saW5lQWxwaGEgKiB3b3JsZEFscGhhO1xuICAgICAgICAgICAgICAgIGNvbnRleHQuc3Ryb2tlU3R5bGUgPSAnIycgKyAoJzAwMDAwJyArICggbGluZUNvbG9yIHwgMCkudG9TdHJpbmcoMTYpKS5zdWJzdHIoLTYpO1xuICAgICAgICAgICAgICAgIGNvbnRleHQuc3Ryb2tlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoZGF0YS50eXBlID09PSBDT05TVC5TSEFQRVMuUkVDVClcbiAgICAgICAge1xuXG4gICAgICAgICAgICBpZiAoZGF0YS5maWxsQ29sb3IgfHwgZGF0YS5maWxsQ29sb3IgPT09IDApXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29udGV4dC5nbG9iYWxBbHBoYSA9IGRhdGEuZmlsbEFscGhhICogd29ybGRBbHBoYTtcbiAgICAgICAgICAgICAgICBjb250ZXh0LmZpbGxTdHlsZSA9ICcjJyArICgnMDAwMDAnICsgKCBmaWxsQ29sb3IgfCAwKS50b1N0cmluZygxNikpLnN1YnN0cigtNik7XG4gICAgICAgICAgICAgICAgY29udGV4dC5maWxsUmVjdChzaGFwZS54LCBzaGFwZS55LCBzaGFwZS53aWR0aCwgc2hhcGUuaGVpZ2h0KTtcblxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGRhdGEubGluZVdpZHRoKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGNvbnRleHQuZ2xvYmFsQWxwaGEgPSBkYXRhLmxpbmVBbHBoYSAqIHdvcmxkQWxwaGE7XG4gICAgICAgICAgICAgICAgY29udGV4dC5zdHJva2VTdHlsZSA9ICcjJyArICgnMDAwMDAnICsgKCBsaW5lQ29sb3IgfCAwKS50b1N0cmluZygxNikpLnN1YnN0cigtNik7XG4gICAgICAgICAgICAgICAgY29udGV4dC5zdHJva2VSZWN0KHNoYXBlLngsIHNoYXBlLnksIHNoYXBlLndpZHRoLCBzaGFwZS5oZWlnaHQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGRhdGEudHlwZSA9PT0gQ09OU1QuU0hBUEVTLkNJUkMpXG4gICAgICAgIHtcbiAgICAgICAgICAgIC8vIFRPRE8gLSBuZWVkIHRvIGJlIFVuZGVmaW5lZCFcbiAgICAgICAgICAgIGNvbnRleHQuYmVnaW5QYXRoKCk7XG4gICAgICAgICAgICBjb250ZXh0LmFyYyhzaGFwZS54LCBzaGFwZS55LCBzaGFwZS5yYWRpdXMsMCwyKk1hdGguUEkpO1xuICAgICAgICAgICAgY29udGV4dC5jbG9zZVBhdGgoKTtcblxuICAgICAgICAgICAgaWYgKGRhdGEuZmlsbClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb250ZXh0Lmdsb2JhbEFscGhhID0gZGF0YS5maWxsQWxwaGEgKiB3b3JsZEFscGhhO1xuICAgICAgICAgICAgICAgIGNvbnRleHQuZmlsbFN0eWxlID0gJyMnICsgKCcwMDAwMCcgKyAoIGZpbGxDb2xvciB8IDApLnRvU3RyaW5nKDE2KSkuc3Vic3RyKC02KTtcbiAgICAgICAgICAgICAgICBjb250ZXh0LmZpbGwoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChkYXRhLmxpbmVXaWR0aClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb250ZXh0Lmdsb2JhbEFscGhhID0gZGF0YS5saW5lQWxwaGEgKiB3b3JsZEFscGhhO1xuICAgICAgICAgICAgICAgIGNvbnRleHQuc3Ryb2tlU3R5bGUgPSAnIycgKyAoJzAwMDAwJyArICggbGluZUNvbG9yIHwgMCkudG9TdHJpbmcoMTYpKS5zdWJzdHIoLTYpO1xuICAgICAgICAgICAgICAgIGNvbnRleHQuc3Ryb2tlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoZGF0YS50eXBlID09PSBDT05TVC5TSEFQRVMuRUxJUClcbiAgICAgICAge1xuICAgICAgICAgICAgLy8gZWxsaXBzZSBjb2RlIHRha2VuIGZyb206IGh0dHA6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvMjE3Mjc5OC9ob3ctdG8tZHJhdy1hbi1vdmFsLWluLWh0bWw1LWNhbnZhc1xuXG4gICAgICAgICAgICB2YXIgdyA9IHNoYXBlLndpZHRoICogMjtcbiAgICAgICAgICAgIHZhciBoID0gc2hhcGUuaGVpZ2h0ICogMjtcblxuICAgICAgICAgICAgdmFyIHggPSBzaGFwZS54IC0gdy8yO1xuICAgICAgICAgICAgdmFyIHkgPSBzaGFwZS55IC0gaC8yO1xuXG4gICAgICAgICAgICBjb250ZXh0LmJlZ2luUGF0aCgpO1xuXG4gICAgICAgICAgICB2YXIga2FwcGEgPSAwLjU1MjI4NDgsXG4gICAgICAgICAgICAgICAgb3ggPSAodyAvIDIpICoga2FwcGEsIC8vIGNvbnRyb2wgcG9pbnQgb2Zmc2V0IGhvcml6b250YWxcbiAgICAgICAgICAgICAgICBveSA9IChoIC8gMikgKiBrYXBwYSwgLy8gY29udHJvbCBwb2ludCBvZmZzZXQgdmVydGljYWxcbiAgICAgICAgICAgICAgICB4ZSA9IHggKyB3LCAgICAgICAgICAgLy8geC1lbmRcbiAgICAgICAgICAgICAgICB5ZSA9IHkgKyBoLCAgICAgICAgICAgLy8geS1lbmRcbiAgICAgICAgICAgICAgICB4bSA9IHggKyB3IC8gMiwgICAgICAgLy8geC1taWRkbGVcbiAgICAgICAgICAgICAgICB5bSA9IHkgKyBoIC8gMjsgICAgICAgLy8geS1taWRkbGVcblxuICAgICAgICAgICAgY29udGV4dC5tb3ZlVG8oeCwgeW0pO1xuICAgICAgICAgICAgY29udGV4dC5iZXppZXJDdXJ2ZVRvKHgsIHltIC0gb3ksIHhtIC0gb3gsIHksIHhtLCB5KTtcbiAgICAgICAgICAgIGNvbnRleHQuYmV6aWVyQ3VydmVUbyh4bSArIG94LCB5LCB4ZSwgeW0gLSBveSwgeGUsIHltKTtcbiAgICAgICAgICAgIGNvbnRleHQuYmV6aWVyQ3VydmVUbyh4ZSwgeW0gKyBveSwgeG0gKyBveCwgeWUsIHhtLCB5ZSk7XG4gICAgICAgICAgICBjb250ZXh0LmJlemllckN1cnZlVG8oeG0gLSBveCwgeWUsIHgsIHltICsgb3ksIHgsIHltKTtcblxuICAgICAgICAgICAgY29udGV4dC5jbG9zZVBhdGgoKTtcblxuICAgICAgICAgICAgaWYgKGRhdGEuZmlsbClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb250ZXh0Lmdsb2JhbEFscGhhID0gZGF0YS5maWxsQWxwaGEgKiB3b3JsZEFscGhhO1xuICAgICAgICAgICAgICAgIGNvbnRleHQuZmlsbFN0eWxlID0gJyMnICsgKCcwMDAwMCcgKyAoIGZpbGxDb2xvciB8IDApLnRvU3RyaW5nKDE2KSkuc3Vic3RyKC02KTtcbiAgICAgICAgICAgICAgICBjb250ZXh0LmZpbGwoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChkYXRhLmxpbmVXaWR0aClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb250ZXh0Lmdsb2JhbEFscGhhID0gZGF0YS5saW5lQWxwaGEgKiB3b3JsZEFscGhhO1xuICAgICAgICAgICAgICAgIGNvbnRleHQuc3Ryb2tlU3R5bGUgPSAnIycgKyAoJzAwMDAwJyArICggbGluZUNvbG9yIHwgMCkudG9TdHJpbmcoMTYpKS5zdWJzdHIoLTYpO1xuICAgICAgICAgICAgICAgIGNvbnRleHQuc3Ryb2tlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoZGF0YS50eXBlID09PSBDT05TVC5TSEFQRVMuUlJFQylcbiAgICAgICAge1xuICAgICAgICAgICAgdmFyIHJ4ID0gc2hhcGUueDtcbiAgICAgICAgICAgIHZhciByeSA9IHNoYXBlLnk7XG4gICAgICAgICAgICB2YXIgd2lkdGggPSBzaGFwZS53aWR0aDtcbiAgICAgICAgICAgIHZhciBoZWlnaHQgPSBzaGFwZS5oZWlnaHQ7XG4gICAgICAgICAgICB2YXIgcmFkaXVzID0gc2hhcGUucmFkaXVzO1xuXG4gICAgICAgICAgICB2YXIgbWF4UmFkaXVzID0gTWF0aC5taW4od2lkdGgsIGhlaWdodCkgLyAyIHwgMDtcbiAgICAgICAgICAgIHJhZGl1cyA9IHJhZGl1cyA+IG1heFJhZGl1cyA/IG1heFJhZGl1cyA6IHJhZGl1cztcblxuICAgICAgICAgICAgY29udGV4dC5iZWdpblBhdGgoKTtcbiAgICAgICAgICAgIGNvbnRleHQubW92ZVRvKHJ4LCByeSArIHJhZGl1cyk7XG4gICAgICAgICAgICBjb250ZXh0LmxpbmVUbyhyeCwgcnkgKyBoZWlnaHQgLSByYWRpdXMpO1xuICAgICAgICAgICAgY29udGV4dC5xdWFkcmF0aWNDdXJ2ZVRvKHJ4LCByeSArIGhlaWdodCwgcnggKyByYWRpdXMsIHJ5ICsgaGVpZ2h0KTtcbiAgICAgICAgICAgIGNvbnRleHQubGluZVRvKHJ4ICsgd2lkdGggLSByYWRpdXMsIHJ5ICsgaGVpZ2h0KTtcbiAgICAgICAgICAgIGNvbnRleHQucXVhZHJhdGljQ3VydmVUbyhyeCArIHdpZHRoLCByeSArIGhlaWdodCwgcnggKyB3aWR0aCwgcnkgKyBoZWlnaHQgLSByYWRpdXMpO1xuICAgICAgICAgICAgY29udGV4dC5saW5lVG8ocnggKyB3aWR0aCwgcnkgKyByYWRpdXMpO1xuICAgICAgICAgICAgY29udGV4dC5xdWFkcmF0aWNDdXJ2ZVRvKHJ4ICsgd2lkdGgsIHJ5LCByeCArIHdpZHRoIC0gcmFkaXVzLCByeSk7XG4gICAgICAgICAgICBjb250ZXh0LmxpbmVUbyhyeCArIHJhZGl1cywgcnkpO1xuICAgICAgICAgICAgY29udGV4dC5xdWFkcmF0aWNDdXJ2ZVRvKHJ4LCByeSwgcngsIHJ5ICsgcmFkaXVzKTtcbiAgICAgICAgICAgIGNvbnRleHQuY2xvc2VQYXRoKCk7XG5cbiAgICAgICAgICAgIGlmIChkYXRhLmZpbGxDb2xvciB8fCBkYXRhLmZpbGxDb2xvciA9PT0gMClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb250ZXh0Lmdsb2JhbEFscGhhID0gZGF0YS5maWxsQWxwaGEgKiB3b3JsZEFscGhhO1xuICAgICAgICAgICAgICAgIGNvbnRleHQuZmlsbFN0eWxlID0gJyMnICsgKCcwMDAwMCcgKyAoIGZpbGxDb2xvciB8IDApLnRvU3RyaW5nKDE2KSkuc3Vic3RyKC02KTtcbiAgICAgICAgICAgICAgICBjb250ZXh0LmZpbGwoKTtcblxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGRhdGEubGluZVdpZHRoKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGNvbnRleHQuZ2xvYmFsQWxwaGEgPSBkYXRhLmxpbmVBbHBoYSAqIHdvcmxkQWxwaGE7XG4gICAgICAgICAgICAgICAgY29udGV4dC5zdHJva2VTdHlsZSA9ICcjJyArICgnMDAwMDAnICsgKCBsaW5lQ29sb3IgfCAwKS50b1N0cmluZygxNikpLnN1YnN0cigtNik7XG4gICAgICAgICAgICAgICAgY29udGV4dC5zdHJva2UoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn07XG5cbi8qXG4gKiBSZW5kZXJzIGEgZ3JhcGhpY3MgbWFza1xuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0gZ3JhcGhpY3Mge1BJWEkuR3JhcGhpY3N9IHRoZSBncmFwaGljcyB3aGljaCB3aWxsIGJlIHVzZWQgYXMgYSBtYXNrXG4gKiBAcGFyYW0gY29udGV4dCB7Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEfSB0aGUgY29udGV4dCAyZCBtZXRob2Qgb2YgdGhlIGNhbnZhc1xuICovXG5DYW52YXNHcmFwaGljcy5yZW5kZXJHcmFwaGljc01hc2sgPSBmdW5jdGlvbiAoZ3JhcGhpY3MsIGNvbnRleHQpXG57XG4gICAgdmFyIGxlbiA9IGdyYXBoaWNzLmdyYXBoaWNzRGF0YS5sZW5ndGg7XG5cbiAgICBpZiAobGVuID09PSAwKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnRleHQuYmVnaW5QYXRoKCk7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgaSsrKVxuICAgIHtcbiAgICAgICAgdmFyIGRhdGEgPSBncmFwaGljcy5ncmFwaGljc0RhdGFbaV07XG4gICAgICAgIHZhciBzaGFwZSA9IGRhdGEuc2hhcGU7XG5cbiAgICAgICAgaWYgKGRhdGEudHlwZSA9PT0gQ09OU1QuU0hBUEVTLlBPTFkpXG4gICAgICAgIHtcblxuICAgICAgICAgICAgdmFyIHBvaW50cyA9IHNoYXBlLnBvaW50cztcblxuICAgICAgICAgICAgY29udGV4dC5tb3ZlVG8ocG9pbnRzWzBdLCBwb2ludHNbMV0pO1xuXG4gICAgICAgICAgICBmb3IgKHZhciBqPTE7IGogPCBwb2ludHMubGVuZ3RoLzI7IGorKylcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb250ZXh0LmxpbmVUbyhwb2ludHNbaiAqIDJdLCBwb2ludHNbaiAqIDIgKyAxXSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIGlmIHRoZSBmaXJzdCBhbmQgbGFzdCBwb2ludCBhcmUgdGhlIHNhbWUgY2xvc2UgdGhlIHBhdGggLSBtdWNoIG5lYXRlciA6KVxuICAgICAgICAgICAgaWYgKHBvaW50c1swXSA9PT0gcG9pbnRzW3BvaW50cy5sZW5ndGgtMl0gJiYgcG9pbnRzWzFdID09PSBwb2ludHNbcG9pbnRzLmxlbmd0aC0xXSlcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb250ZXh0LmNsb3NlUGF0aCgpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoZGF0YS50eXBlID09PSBDT05TVC5TSEFQRVMuUkVDVClcbiAgICAgICAge1xuICAgICAgICAgICAgY29udGV4dC5yZWN0KHNoYXBlLngsIHNoYXBlLnksIHNoYXBlLndpZHRoLCBzaGFwZS5oZWlnaHQpO1xuICAgICAgICAgICAgY29udGV4dC5jbG9zZVBhdGgoKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChkYXRhLnR5cGUgPT09IENPTlNULlNIQVBFUy5DSVJDKVxuICAgICAgICB7XG4gICAgICAgICAgICAvLyBUT0RPIC0gbmVlZCB0byBiZSBVbmRlZmluZWQhXG4gICAgICAgICAgICBjb250ZXh0LmFyYyhzaGFwZS54LCBzaGFwZS55LCBzaGFwZS5yYWRpdXMsIDAsIDIgKiBNYXRoLlBJKTtcbiAgICAgICAgICAgIGNvbnRleHQuY2xvc2VQYXRoKCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoZGF0YS50eXBlID09PSBDT05TVC5TSEFQRVMuRUxJUClcbiAgICAgICAge1xuXG4gICAgICAgICAgICAvLyBlbGxpcHNlIGNvZGUgdGFrZW4gZnJvbTogaHR0cDovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy8yMTcyNzk4L2hvdy10by1kcmF3LWFuLW92YWwtaW4taHRtbDUtY2FudmFzXG5cbiAgICAgICAgICAgIHZhciB3ID0gc2hhcGUud2lkdGggKiAyO1xuICAgICAgICAgICAgdmFyIGggPSBzaGFwZS5oZWlnaHQgKiAyO1xuXG4gICAgICAgICAgICB2YXIgeCA9IHNoYXBlLnggLSB3LzI7XG4gICAgICAgICAgICB2YXIgeSA9IHNoYXBlLnkgLSBoLzI7XG5cbiAgICAgICAgICAgIHZhciBrYXBwYSA9IDAuNTUyMjg0OCxcbiAgICAgICAgICAgICAgICBveCA9ICh3IC8gMikgKiBrYXBwYSwgLy8gY29udHJvbCBwb2ludCBvZmZzZXQgaG9yaXpvbnRhbFxuICAgICAgICAgICAgICAgIG95ID0gKGggLyAyKSAqIGthcHBhLCAvLyBjb250cm9sIHBvaW50IG9mZnNldCB2ZXJ0aWNhbFxuICAgICAgICAgICAgICAgIHhlID0geCArIHcsICAgICAgICAgICAvLyB4LWVuZFxuICAgICAgICAgICAgICAgIHllID0geSArIGgsICAgICAgICAgICAvLyB5LWVuZFxuICAgICAgICAgICAgICAgIHhtID0geCArIHcgLyAyLCAgICAgICAvLyB4LW1pZGRsZVxuICAgICAgICAgICAgICAgIHltID0geSArIGggLyAyOyAgICAgICAvLyB5LW1pZGRsZVxuXG4gICAgICAgICAgICBjb250ZXh0Lm1vdmVUbyh4LCB5bSk7XG4gICAgICAgICAgICBjb250ZXh0LmJlemllckN1cnZlVG8oeCwgeW0gLSBveSwgeG0gLSBveCwgeSwgeG0sIHkpO1xuICAgICAgICAgICAgY29udGV4dC5iZXppZXJDdXJ2ZVRvKHhtICsgb3gsIHksIHhlLCB5bSAtIG95LCB4ZSwgeW0pO1xuICAgICAgICAgICAgY29udGV4dC5iZXppZXJDdXJ2ZVRvKHhlLCB5bSArIG95LCB4bSArIG94LCB5ZSwgeG0sIHllKTtcbiAgICAgICAgICAgIGNvbnRleHQuYmV6aWVyQ3VydmVUbyh4bSAtIG94LCB5ZSwgeCwgeW0gKyBveSwgeCwgeW0pO1xuICAgICAgICAgICAgY29udGV4dC5jbG9zZVBhdGgoKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChkYXRhLnR5cGUgPT09IENPTlNULlNIQVBFUy5SUkVDKVxuICAgICAgICB7XG5cbiAgICAgICAgICAgIHZhciByeCA9IHNoYXBlLng7XG4gICAgICAgICAgICB2YXIgcnkgPSBzaGFwZS55O1xuICAgICAgICAgICAgdmFyIHdpZHRoID0gc2hhcGUud2lkdGg7XG4gICAgICAgICAgICB2YXIgaGVpZ2h0ID0gc2hhcGUuaGVpZ2h0O1xuICAgICAgICAgICAgdmFyIHJhZGl1cyA9IHNoYXBlLnJhZGl1cztcblxuICAgICAgICAgICAgdmFyIG1heFJhZGl1cyA9IE1hdGgubWluKHdpZHRoLCBoZWlnaHQpIC8gMiB8IDA7XG4gICAgICAgICAgICByYWRpdXMgPSByYWRpdXMgPiBtYXhSYWRpdXMgPyBtYXhSYWRpdXMgOiByYWRpdXM7XG5cbiAgICAgICAgICAgIGNvbnRleHQubW92ZVRvKHJ4LCByeSArIHJhZGl1cyk7XG4gICAgICAgICAgICBjb250ZXh0LmxpbmVUbyhyeCwgcnkgKyBoZWlnaHQgLSByYWRpdXMpO1xuICAgICAgICAgICAgY29udGV4dC5xdWFkcmF0aWNDdXJ2ZVRvKHJ4LCByeSArIGhlaWdodCwgcnggKyByYWRpdXMsIHJ5ICsgaGVpZ2h0KTtcbiAgICAgICAgICAgIGNvbnRleHQubGluZVRvKHJ4ICsgd2lkdGggLSByYWRpdXMsIHJ5ICsgaGVpZ2h0KTtcbiAgICAgICAgICAgIGNvbnRleHQucXVhZHJhdGljQ3VydmVUbyhyeCArIHdpZHRoLCByeSArIGhlaWdodCwgcnggKyB3aWR0aCwgcnkgKyBoZWlnaHQgLSByYWRpdXMpO1xuICAgICAgICAgICAgY29udGV4dC5saW5lVG8ocnggKyB3aWR0aCwgcnkgKyByYWRpdXMpO1xuICAgICAgICAgICAgY29udGV4dC5xdWFkcmF0aWNDdXJ2ZVRvKHJ4ICsgd2lkdGgsIHJ5LCByeCArIHdpZHRoIC0gcmFkaXVzLCByeSk7XG4gICAgICAgICAgICBjb250ZXh0LmxpbmVUbyhyeCArIHJhZGl1cywgcnkpO1xuICAgICAgICAgICAgY29udGV4dC5xdWFkcmF0aWNDdXJ2ZVRvKHJ4LCByeSwgcngsIHJ5ICsgcmFkaXVzKTtcbiAgICAgICAgICAgIGNvbnRleHQuY2xvc2VQYXRoKCk7XG4gICAgICAgIH1cbiAgICB9XG59O1xuXG4vKlxuICogVXBkYXRlcyB0aGUgdGludCBvZiBhIGdyYXBoaWNzIG9iamVjdFxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0gZ3JhcGhpY3Mge1BJWEkuR3JhcGhpY3N9IHRoZSBncmFwaGljcyB0aGF0IHdpbGwgaGF2ZSBpdHMgdGludCB1cGRhdGVkXG4gKlxuICovXG5DYW52YXNHcmFwaGljcy51cGRhdGVHcmFwaGljc1RpbnQgPSBmdW5jdGlvbiAoZ3JhcGhpY3MpXG57XG4gICAgaWYgKGdyYXBoaWNzLnRpbnQgPT09IDB4RkZGRkZGICYmIGdyYXBoaWNzLl9wcmV2VGludCA9PT0gZ3JhcGhpY3MudGludClcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgZ3JhcGhpY3MuX3ByZXZUaW50ID0gZ3JhcGhpY3MudGludDtcblxuICAgIHZhciB0aW50UiA9IChncmFwaGljcy50aW50ID4+IDE2ICYgMHhGRikgLyAyNTU7XG4gICAgdmFyIHRpbnRHID0gKGdyYXBoaWNzLnRpbnQgPj4gOCAmIDB4RkYpIC8gMjU1O1xuICAgIHZhciB0aW50QiA9IChncmFwaGljcy50aW50ICYgMHhGRikvIDI1NTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZ3JhcGhpY3MuZ3JhcGhpY3NEYXRhLmxlbmd0aDsgaSsrKVxuICAgIHtcbiAgICAgICAgdmFyIGRhdGEgPSBncmFwaGljcy5ncmFwaGljc0RhdGFbaV07XG5cbiAgICAgICAgdmFyIGZpbGxDb2xvciA9IGRhdGEuZmlsbENvbG9yIHwgMDtcbiAgICAgICAgdmFyIGxpbmVDb2xvciA9IGRhdGEubGluZUNvbG9yIHwgMDtcblxuICAgICAgICAvKlxuICAgICAgICB2YXIgY29sb3JSID0gKGZpbGxDb2xvciA+PiAxNiAmIDB4RkYpIC8gMjU1O1xuICAgICAgICB2YXIgY29sb3JHID0gKGZpbGxDb2xvciA+PiA4ICYgMHhGRikgLyAyNTU7XG4gICAgICAgIHZhciBjb2xvckIgPSAoZmlsbENvbG9yICYgMHhGRikgLyAyNTU7XG5cbiAgICAgICAgY29sb3JSICo9IHRpbnRSO1xuICAgICAgICBjb2xvckcgKj0gdGludEc7XG4gICAgICAgIGNvbG9yQiAqPSB0aW50QjtcblxuICAgICAgICBmaWxsQ29sb3IgPSAoKGNvbG9yUioyNTUgPDwgMTYpICsgKGNvbG9yRyoyNTUgPDwgOCkgKyBjb2xvckIqMjU1KTtcblxuICAgICAgICBjb2xvclIgPSAobGluZUNvbG9yID4+IDE2ICYgMHhGRikgLyAyNTU7XG4gICAgICAgIGNvbG9yRyA9IChsaW5lQ29sb3IgPj4gOCAmIDB4RkYpIC8gMjU1O1xuICAgICAgICBjb2xvckIgPSAobGluZUNvbG9yICYgMHhGRikgLyAyNTU7XG5cbiAgICAgICAgY29sb3JSICo9IHRpbnRSO1xuICAgICAgICBjb2xvckcgKj0gdGludEc7XG4gICAgICAgIGNvbG9yQiAqPSB0aW50QjtcblxuICAgICAgICBsaW5lQ29sb3IgPSAoKGNvbG9yUioyNTUgPDwgMTYpICsgKGNvbG9yRyoyNTUgPDwgOCkgKyBjb2xvckIqMjU1KTtcbiAgICAgICAgKi9cblxuICAgICAgICAvLyBzdXBlciBpbmxpbmUgY29zIGltIGFuIG9wdGltaXphdGlvbiBOQVpJIDopXG4gICAgICAgIGRhdGEuX2ZpbGxUaW50ID0gKCgoZmlsbENvbG9yID4+IDE2ICYgMHhGRikgLyAyNTUgKiB0aW50UioyNTUgPDwgMTYpICsgKChmaWxsQ29sb3IgPj4gOCAmIDB4RkYpIC8gMjU1ICogdGludEcqMjU1IDw8IDgpICsgIChmaWxsQ29sb3IgJiAweEZGKSAvIDI1NSAqIHRpbnRCKjI1NSk7XG4gICAgICAgIGRhdGEuX2xpbmVUaW50ID0gKCgobGluZUNvbG9yID4+IDE2ICYgMHhGRikgLyAyNTUgKiB0aW50UioyNTUgPDwgMTYpICsgKChsaW5lQ29sb3IgPj4gOCAmIDB4RkYpIC8gMjU1ICogdGludEcqMjU1IDw8IDgpICsgIChsaW5lQ29sb3IgJiAweEZGKSAvIDI1NSAqIHRpbnRCKjI1NSk7XG5cbiAgICB9XG59O1xuXG4iLCJ2YXIgQ2FudmFzR3JhcGhpY3MgPSByZXF1aXJlKCcuL0NhbnZhc0dyYXBoaWNzJyk7XG5cbi8qKlxuICogQSBzZXQgb2YgZnVuY3Rpb25zIHVzZWQgdG8gaGFuZGxlIG1hc2tpbmcuXG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICovXG5mdW5jdGlvbiBDYW52YXNNYXNrTWFuYWdlcigpXG57fVxuXG5DYW52YXNNYXNrTWFuYWdlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBDYW52YXNNYXNrTWFuYWdlcjtcbm1vZHVsZS5leHBvcnRzID0gQ2FudmFzTWFza01hbmFnZXI7XG5cbi8qKlxuICogVGhpcyBtZXRob2QgYWRkcyBpdCB0byB0aGUgY3VycmVudCBzdGFjayBvZiBtYXNrcy5cbiAqXG4gKiBAcGFyYW0gbWFza0RhdGEge29iamVjdH0gdGhlIG1hc2tEYXRhIHRoYXQgd2lsbCBiZSBwdXNoZWRcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5XZWJHTFJlbmRlcmVyfFBJWEkuQ2FudmFzUmVuZGVyZXJ9IFRoZSByZW5kZXJlciBjb250ZXh0IHRvIHVzZS5cbiAqL1xuQ2FudmFzTWFza01hbmFnZXIucHJvdG90eXBlLnB1c2hNYXNrID0gZnVuY3Rpb24gKG1hc2tEYXRhLCByZW5kZXJlcilcbntcblxuICAgIHJlbmRlcmVyLmNvbnRleHQuc2F2ZSgpO1xuXG4gICAgdmFyIGNhY2hlQWxwaGEgPSBtYXNrRGF0YS5hbHBoYTtcbiAgICB2YXIgdHJhbnNmb3JtID0gbWFza0RhdGEud29ybGRUcmFuc2Zvcm07XG4gICAgdmFyIHJlc29sdXRpb24gPSByZW5kZXJlci5yZXNvbHV0aW9uO1xuXG4gICAgcmVuZGVyZXIuY29udGV4dC5zZXRUcmFuc2Zvcm0oXG4gICAgICAgIHRyYW5zZm9ybS5hICogcmVzb2x1dGlvbixcbiAgICAgICAgdHJhbnNmb3JtLmIgKiByZXNvbHV0aW9uLFxuICAgICAgICB0cmFuc2Zvcm0uYyAqIHJlc29sdXRpb24sXG4gICAgICAgIHRyYW5zZm9ybS5kICogcmVzb2x1dGlvbixcbiAgICAgICAgdHJhbnNmb3JtLnR4ICogcmVzb2x1dGlvbixcbiAgICAgICAgdHJhbnNmb3JtLnR5ICogcmVzb2x1dGlvblxuICAgICk7XG5cbiAgICAvL1RPRE8gc3Vwb3J0IHNwcml0ZSBhbHBoYSBtYXNrcz8/XG4gICAgLy9sb3RzIG9mIGVmZm9ydCByZXF1aXJlZC4gSWYgZGVtYW5kIGlzIGdyZWF0IGVub3VnaC4uXG4gICAgaWYoIW1hc2tEYXRhLnRleHR1cmUpXG4gICAge1xuICAgICAgICBDYW52YXNHcmFwaGljcy5yZW5kZXJHcmFwaGljc01hc2sobWFza0RhdGEsIHJlbmRlcmVyLmNvbnRleHQpO1xuICAgICAgICByZW5kZXJlci5jb250ZXh0LmNsaXAoKTtcbiAgICB9XG5cbiAgICBtYXNrRGF0YS53b3JsZEFscGhhID0gY2FjaGVBbHBoYTtcbn07XG5cbi8qKlxuICogUmVzdG9yZXMgdGhlIGN1cnJlbnQgZHJhd2luZyBjb250ZXh0IHRvIHRoZSBzdGF0ZSBpdCB3YXMgYmVmb3JlIHRoZSBtYXNrIHdhcyBhcHBsaWVkLlxuICpcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5XZWJHTFJlbmRlcmVyfFBJWEkuQ2FudmFzUmVuZGVyZXJ9IFRoZSByZW5kZXJlciBjb250ZXh0IHRvIHVzZS5cbiAqL1xuQ2FudmFzTWFza01hbmFnZXIucHJvdG90eXBlLnBvcE1hc2sgPSBmdW5jdGlvbiAocmVuZGVyZXIpXG57XG4gICAgcmVuZGVyZXIuY29udGV4dC5yZXN0b3JlKCk7XG59O1xuXG5DYW52YXNNYXNrTWFuYWdlci5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uICgpIHt9O1xuIiwidmFyIHV0aWxzID0gcmVxdWlyZSgnLi4vLi4vLi4vdXRpbHMnKTtcblxuLyoqXG4gKiBVdGlsaXR5IG1ldGhvZHMgZm9yIFNwcml0ZS9UZXh0dXJlIHRpbnRpbmcuXG4gKiBAc3RhdGljXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKi9cbnZhciBDYW52YXNUaW50ZXIgPSB7fTtcbm1vZHVsZS5leHBvcnRzID0gQ2FudmFzVGludGVyO1xuXG4vKipcbiAqIEJhc2ljYWxseSB0aGlzIG1ldGhvZCBqdXN0IG5lZWRzIGEgc3ByaXRlIGFuZCBhIGNvbG9yIGFuZCB0aW50cyB0aGUgc3ByaXRlIHdpdGggdGhlIGdpdmVuIGNvbG9yLlxuICpcbiAqIEBwYXJhbSBzcHJpdGUge1BJWEkuU3ByaXRlfSB0aGUgc3ByaXRlIHRvIHRpbnRcbiAqIEBwYXJhbSBjb2xvciB7bnVtYmVyfSB0aGUgY29sb3IgdG8gdXNlIHRvIHRpbnQgdGhlIHNwcml0ZSB3aXRoXG4gKiBAcmV0dXJuIHtIVE1MQ2FudmFzRWxlbWVudH0gVGhlIHRpbnRlZCBjYW52YXNcbiAqL1xuQ2FudmFzVGludGVyLmdldFRpbnRlZFRleHR1cmUgPSBmdW5jdGlvbiAoc3ByaXRlLCBjb2xvcilcbntcbiAgICB2YXIgdGV4dHVyZSA9IHNwcml0ZS50ZXh0dXJlO1xuXG4gICAgY29sb3IgPSBDYW52YXNUaW50ZXIucm91bmRDb2xvcihjb2xvcik7XG5cbiAgICB2YXIgc3RyaW5nQ29sb3IgPSAnIycgKyAoJzAwMDAwJyArICggY29sb3IgfCAwKS50b1N0cmluZygxNikpLnN1YnN0cigtNik7XG5cbiAgICB0ZXh0dXJlLnRpbnRDYWNoZSA9IHRleHR1cmUudGludENhY2hlIHx8IHt9O1xuXG4gICAgaWYgKHRleHR1cmUudGludENhY2hlW3N0cmluZ0NvbG9yXSlcbiAgICB7XG4gICAgICAgIHJldHVybiB0ZXh0dXJlLnRpbnRDYWNoZVtzdHJpbmdDb2xvcl07XG4gICAgfVxuXG4gICAgIC8vIGNsb25lIHRleHR1cmUuLlxuICAgIHZhciBjYW52YXMgPSBDYW52YXNUaW50ZXIuY2FudmFzIHx8IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NhbnZhcycpO1xuXG4gICAgLy9DYW52YXNUaW50ZXIudGludFdpdGhQZXJQaXhlbCh0ZXh0dXJlLCBzdHJpbmdDb2xvciwgY2FudmFzKTtcbiAgICBDYW52YXNUaW50ZXIudGludE1ldGhvZCh0ZXh0dXJlLCBjb2xvciwgY2FudmFzKTtcblxuICAgIGlmIChDYW52YXNUaW50ZXIuY29udmVydFRpbnRUb0ltYWdlKVxuICAgIHtcbiAgICAgICAgLy8gaXMgdGhpcyBiZXR0ZXI/XG4gICAgICAgIHZhciB0aW50SW1hZ2UgPSBuZXcgSW1hZ2UoKTtcbiAgICAgICAgdGludEltYWdlLnNyYyA9IGNhbnZhcy50b0RhdGFVUkwoKTtcblxuICAgICAgICB0ZXh0dXJlLnRpbnRDYWNoZVtzdHJpbmdDb2xvcl0gPSB0aW50SW1hZ2U7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHRleHR1cmUudGludENhY2hlW3N0cmluZ0NvbG9yXSA9IGNhbnZhcztcbiAgICAgICAgLy8gaWYgd2UgYXJlIG5vdCBjb252ZXJ0aW5nIHRoZSB0ZXh0dXJlIHRvIGFuIGltYWdlIHRoZW4gd2UgbmVlZCB0byBsb3NlIHRoZSByZWZlcmVuY2UgdG8gdGhlIGNhbnZhc1xuICAgICAgICBDYW52YXNUaW50ZXIuY2FudmFzID0gbnVsbDtcbiAgICB9XG5cbiAgICByZXR1cm4gY2FudmFzO1xufTtcblxuLyoqXG4gKiBUaW50IGEgdGV4dHVyZSB1c2luZyB0aGUgJ211bHRpcGx5JyBvcGVyYXRpb24uXG4gKlxuICogQHBhcmFtIHRleHR1cmUge1BJWEkuVGV4dHVyZX0gdGhlIHRleHR1cmUgdG8gdGludFxuICogQHBhcmFtIGNvbG9yIHtudW1iZXJ9IHRoZSBjb2xvciB0byB1c2UgdG8gdGludCB0aGUgc3ByaXRlIHdpdGhcbiAqIEBwYXJhbSBjYW52YXMge0hUTUxDYW52YXNFbGVtZW50fSB0aGUgY3VycmVudCBjYW52YXNcbiAqL1xuQ2FudmFzVGludGVyLnRpbnRXaXRoTXVsdGlwbHkgPSBmdW5jdGlvbiAodGV4dHVyZSwgY29sb3IsIGNhbnZhcylcbntcbiAgICB2YXIgY29udGV4dCA9IGNhbnZhcy5nZXRDb250ZXh0KCAnMmQnICk7XG5cbiAgICB2YXIgcmVzb2x1dGlvbiA9IHRleHR1cmUuYmFzZVRleHR1cmUucmVzb2x1dGlvbjtcblxuICAgIHZhciBjcm9wID0gdGV4dHVyZS5jcm9wLmNsb25lKCk7XG4gICAgY3JvcC54ICo9IHJlc29sdXRpb247XG4gICAgY3JvcC55ICo9IHJlc29sdXRpb247XG4gICAgY3JvcC53aWR0aCAqPSByZXNvbHV0aW9uO1xuICAgIGNyb3AuaGVpZ2h0ICo9IHJlc29sdXRpb247XG5cbiAgICBjYW52YXMud2lkdGggPSBjcm9wLndpZHRoO1xuICAgIGNhbnZhcy5oZWlnaHQgPSBjcm9wLmhlaWdodDtcblxuICAgIGNvbnRleHQuZmlsbFN0eWxlID0gJyMnICsgKCcwMDAwMCcgKyAoIGNvbG9yIHwgMCkudG9TdHJpbmcoMTYpKS5zdWJzdHIoLTYpO1xuXG4gICAgY29udGV4dC5maWxsUmVjdCgwLCAwLCBjcm9wLndpZHRoLCBjcm9wLmhlaWdodCk7XG5cbiAgICBjb250ZXh0Lmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbiA9ICdtdWx0aXBseSc7XG5cbiAgICBjb250ZXh0LmRyYXdJbWFnZShcbiAgICAgICAgdGV4dHVyZS5iYXNlVGV4dHVyZS5zb3VyY2UsXG4gICAgICAgIGNyb3AueCxcbiAgICAgICAgY3JvcC55LFxuICAgICAgICBjcm9wLndpZHRoLFxuICAgICAgICBjcm9wLmhlaWdodCxcbiAgICAgICAgMCxcbiAgICAgICAgMCxcbiAgICAgICAgY3JvcC53aWR0aCxcbiAgICAgICAgY3JvcC5oZWlnaHRcbiAgICApO1xuXG4gICAgY29udGV4dC5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb24gPSAnZGVzdGluYXRpb24tYXRvcCc7XG5cbiAgICBjb250ZXh0LmRyYXdJbWFnZShcbiAgICAgICAgdGV4dHVyZS5iYXNlVGV4dHVyZS5zb3VyY2UsXG4gICAgICAgIGNyb3AueCxcbiAgICAgICAgY3JvcC55LFxuICAgICAgICBjcm9wLndpZHRoLFxuICAgICAgICBjcm9wLmhlaWdodCxcbiAgICAgICAgMCxcbiAgICAgICAgMCxcbiAgICAgICAgY3JvcC53aWR0aCxcbiAgICAgICAgY3JvcC5oZWlnaHRcbiAgICApO1xufTtcblxuLyoqXG4gKiBUaW50IGEgdGV4dHVyZSB1c2luZyB0aGUgJ292ZXJsYXknIG9wZXJhdGlvbi5cbiAqXG4gKiBAcGFyYW0gdGV4dHVyZSB7UElYSS5UZXh0dXJlfSB0aGUgdGV4dHVyZSB0byB0aW50XG4gKiBAcGFyYW0gY29sb3Ige251bWJlcn0gdGhlIGNvbG9yIHRvIHVzZSB0byB0aW50IHRoZSBzcHJpdGUgd2l0aFxuICogQHBhcmFtIGNhbnZhcyB7SFRNTENhbnZhc0VsZW1lbnR9IHRoZSBjdXJyZW50IGNhbnZhc1xuICovXG5DYW52YXNUaW50ZXIudGludFdpdGhPdmVybGF5ID0gZnVuY3Rpb24gKHRleHR1cmUsIGNvbG9yLCBjYW52YXMpXG57XG4gICAgdmFyIGNvbnRleHQgPSBjYW52YXMuZ2V0Q29udGV4dCggJzJkJyApO1xuXG4gICAgdmFyIHJlc29sdXRpb24gPSB0ZXh0dXJlLmJhc2VUZXh0dXJlLnJlc29sdXRpb247XG5cbiAgICB2YXIgY3JvcCA9IHRleHR1cmUuY3JvcC5jbG9uZSgpO1xuICAgIGNyb3AueCAqPSByZXNvbHV0aW9uO1xuICAgIGNyb3AueSAqPSByZXNvbHV0aW9uO1xuICAgIGNyb3Aud2lkdGggKj0gcmVzb2x1dGlvbjtcbiAgICBjcm9wLmhlaWdodCAqPSByZXNvbHV0aW9uO1xuXG4gICAgY2FudmFzLndpZHRoID0gY3JvcC53aWR0aDtcbiAgICBjYW52YXMuaGVpZ2h0ID0gY3JvcC5oZWlnaHQ7XG5cbiAgICBjb250ZXh0Lmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbiA9ICdjb3B5JztcbiAgICBjb250ZXh0LmZpbGxTdHlsZSA9ICcjJyArICgnMDAwMDAnICsgKCBjb2xvciB8IDApLnRvU3RyaW5nKDE2KSkuc3Vic3RyKC02KTtcbiAgICBjb250ZXh0LmZpbGxSZWN0KDAsIDAsIGNyb3Aud2lkdGgsIGNyb3AuaGVpZ2h0KTtcblxuICAgIGNvbnRleHQuZ2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uID0gJ2Rlc3RpbmF0aW9uLWF0b3AnO1xuICAgIGNvbnRleHQuZHJhd0ltYWdlKFxuICAgICAgICB0ZXh0dXJlLmJhc2VUZXh0dXJlLnNvdXJjZSxcbiAgICAgICAgY3JvcC54LFxuICAgICAgICBjcm9wLnksXG4gICAgICAgIGNyb3Aud2lkdGgsXG4gICAgICAgIGNyb3AuaGVpZ2h0LFxuICAgICAgICAwLFxuICAgICAgICAwLFxuICAgICAgICBjcm9wLndpZHRoLFxuICAgICAgICBjcm9wLmhlaWdodFxuICAgICk7XG5cbiAgICAvLyBjb250ZXh0Lmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbiA9ICdjb3B5Jztcbn07XG5cbi8qKlxuICogVGludCBhIHRleHR1cmUgcGl4ZWwgcGVyIHBpeGVsLlxuICpcbiAqIEBwYXJhbSB0ZXh0dXJlIHtQSVhJLlRleHR1cmV9IHRoZSB0ZXh0dXJlIHRvIHRpbnRcbiAqIEBwYXJhbSBjb2xvciB7bnVtYmVyfSB0aGUgY29sb3IgdG8gdXNlIHRvIHRpbnQgdGhlIHNwcml0ZSB3aXRoXG4gKiBAcGFyYW0gY2FudmFzIHtIVE1MQ2FudmFzRWxlbWVudH0gdGhlIGN1cnJlbnQgY2FudmFzXG4gKi9cbkNhbnZhc1RpbnRlci50aW50V2l0aFBlclBpeGVsID0gZnVuY3Rpb24gKHRleHR1cmUsIGNvbG9yLCBjYW52YXMpXG57XG4gICAgdmFyIGNvbnRleHQgPSBjYW52YXMuZ2V0Q29udGV4dCggJzJkJyApO1xuXG4gICAgdmFyIHJlc29sdXRpb24gPSB0ZXh0dXJlLmJhc2VUZXh0dXJlLnJlc29sdXRpb247XG5cbiAgICB2YXIgY3JvcCA9IHRleHR1cmUuY3JvcC5jbG9uZSgpO1xuICAgIGNyb3AueCAqPSByZXNvbHV0aW9uO1xuICAgIGNyb3AueSAqPSByZXNvbHV0aW9uO1xuICAgIGNyb3Aud2lkdGggKj0gcmVzb2x1dGlvbjtcbiAgICBjcm9wLmhlaWdodCAqPSByZXNvbHV0aW9uO1xuXG4gICAgY2FudmFzLndpZHRoID0gY3JvcC53aWR0aDtcbiAgICBjYW52YXMuaGVpZ2h0ID0gY3JvcC5oZWlnaHQ7XG5cbiAgICBjb250ZXh0Lmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbiA9ICdjb3B5JztcbiAgICBjb250ZXh0LmRyYXdJbWFnZShcbiAgICAgICAgdGV4dHVyZS5iYXNlVGV4dHVyZS5zb3VyY2UsXG4gICAgICAgIGNyb3AueCxcbiAgICAgICAgY3JvcC55LFxuICAgICAgICBjcm9wLndpZHRoLFxuICAgICAgICBjcm9wLmhlaWdodCxcbiAgICAgICAgMCxcbiAgICAgICAgMCxcbiAgICAgICAgY3JvcC53aWR0aCxcbiAgICAgICAgY3JvcC5oZWlnaHRcbiAgICApO1xuXG4gICAgdmFyIHJnYlZhbHVlcyA9IHV0aWxzLmhleDJyZ2IoY29sb3IpO1xuICAgIHZhciByID0gcmdiVmFsdWVzWzBdLCBnID0gcmdiVmFsdWVzWzFdLCBiID0gcmdiVmFsdWVzWzJdO1xuXG4gICAgdmFyIHBpeGVsRGF0YSA9IGNvbnRleHQuZ2V0SW1hZ2VEYXRhKDAsIDAsIGNyb3Aud2lkdGgsIGNyb3AuaGVpZ2h0KTtcblxuICAgIHZhciBwaXhlbHMgPSBwaXhlbERhdGEuZGF0YTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcGl4ZWxzLmxlbmd0aDsgaSArPSA0KVxuICAgIHtcbiAgICAgICAgcGl4ZWxzW2krMF0gKj0gcjtcbiAgICAgICAgcGl4ZWxzW2krMV0gKj0gZztcbiAgICAgICAgcGl4ZWxzW2krMl0gKj0gYjtcbiAgICB9XG5cbiAgICBjb250ZXh0LnB1dEltYWdlRGF0YShwaXhlbERhdGEsIDAsIDApO1xufTtcblxuLyoqXG4gKiBSb3VuZHMgdGhlIHNwZWNpZmllZCBjb2xvciBhY2NvcmRpbmcgdG8gdGhlIENhbnZhc1RpbnRlci5jYWNoZVN0ZXBzUGVyQ29sb3JDaGFubmVsLlxuICpcbiAqIEBwYXJhbSBjb2xvciB7bnVtYmVyfSB0aGUgY29sb3IgdG8gcm91bmQsIHNob3VsZCBiZSBhIGhleCBjb2xvclxuICovXG5DYW52YXNUaW50ZXIucm91bmRDb2xvciA9IGZ1bmN0aW9uIChjb2xvcilcbntcbiAgICB2YXIgc3RlcCA9IENhbnZhc1RpbnRlci5jYWNoZVN0ZXBzUGVyQ29sb3JDaGFubmVsO1xuXG4gICAgdmFyIHJnYlZhbHVlcyA9IHV0aWxzLmhleDJyZ2IoY29sb3IpO1xuXG4gICAgcmdiVmFsdWVzWzBdID0gTWF0aC5taW4oMjU1LCAocmdiVmFsdWVzWzBdIC8gc3RlcCkgKiBzdGVwKTtcbiAgICByZ2JWYWx1ZXNbMV0gPSBNYXRoLm1pbigyNTUsIChyZ2JWYWx1ZXNbMV0gLyBzdGVwKSAqIHN0ZXApO1xuICAgIHJnYlZhbHVlc1syXSA9IE1hdGgubWluKDI1NSwgKHJnYlZhbHVlc1syXSAvIHN0ZXApICogc3RlcCk7XG5cbiAgICByZXR1cm4gdXRpbHMucmdiMmhleChyZ2JWYWx1ZXMpO1xufTtcblxuLyoqXG4gKiBOdW1iZXIgb2Ygc3RlcHMgd2hpY2ggd2lsbCBiZSB1c2VkIGFzIGEgY2FwIHdoZW4gcm91bmRpbmcgY29sb3JzLlxuICpcbiAqIEBtZW1iZXJcbiAqL1xuQ2FudmFzVGludGVyLmNhY2hlU3RlcHNQZXJDb2xvckNoYW5uZWwgPSA4O1xuXG4vKipcbiAqIFRpbnQgY2FjaGUgYm9vbGVhbiBmbGFnLlxuICpcbiAqIEBtZW1iZXJcbiAqL1xuQ2FudmFzVGludGVyLmNvbnZlcnRUaW50VG9JbWFnZSA9IGZhbHNlO1xuXG4vKipcbiAqIFdoZXRoZXIgb3Igbm90IHRoZSBDYW52YXMgQmxlbmRNb2RlcyBhcmUgc3VwcG9ydGVkLCBjb25zZXF1ZW50bHkgdGhlIGFiaWxpdHkgdG8gdGludCB1c2luZyB0aGUgbXVsdGlwbHkgbWV0aG9kLlxuICpcbiAqIEBtZW1iZXJcbiAqL1xuQ2FudmFzVGludGVyLmNhblVzZU11bHRpcGx5ID0gdXRpbHMuY2FuVXNlTmV3Q2FudmFzQmxlbmRNb2RlcygpO1xuXG4vKipcbiAqIFRoZSB0aW50aW5nIG1ldGhvZCB0aGF0IHdpbGwgYmUgdXNlZC5cbiAqXG4gKi9cbkNhbnZhc1RpbnRlci50aW50TWV0aG9kID0gQ2FudmFzVGludGVyLmNhblVzZU11bHRpcGx5ID8gQ2FudmFzVGludGVyLnRpbnRXaXRoTXVsdGlwbHkgOiAgQ2FudmFzVGludGVyLnRpbnRXaXRoUGVyUGl4ZWw7XG4iLCJ2YXIgR0xUZXh0dXJlID0gcmVxdWlyZSgncGl4aS1nbC1jb3JlJykuR0xUZXh0dXJlLFxuXHR1dGlscyA9IHJlcXVpcmUoJy4uLy4uL3V0aWxzJyk7XG5cbi8qKlxuICogSGVscGVyIGNsYXNzIHRvIGNyZWF0ZSBhIHdlYkdMIFRleHR1cmVcbiAqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gZ2wge1dlYkdMUmVuZGVyaW5nQ29udGV4dH1cbiAqL1xuXG52YXIgVGV4dHVyZU1hbmFnZXIgPSBmdW5jdGlvbihnbClcbntcblx0dGhpcy5nbCA9IGdsO1xuXG5cdC8vIHRyYWNrIHRleHR1cmVzIGluIHRoZSByZW5kZXJlciBzbyB3ZSBjYW4gbm8gbG9uZ2VyIGxpc3RlbiB0byB0aGVtIG9uIGRlc3RydWN0aW9uLlxuXHR0aGlzLl9tYW5hZ2VkVGV4dHVyZXMgPSBbXTtcbiAgICB0aGlzLmdsVGV4dHVyZXMgPSB7fTtcblxufVxuXG5UZXh0dXJlTWFuYWdlci5wcm90b3R5cGUuYmluZFRleHR1cmUgPSBmdW5jdGlvbih0ZXh0dXJlKVxue1xuXG59XG5cblxuVGV4dHVyZU1hbmFnZXIucHJvdG90eXBlLmdldFRleHR1cmUgPSBmdW5jdGlvbih0ZXh0dXJlKVxue1xuXG59XG5cbi8qKlxuICogVXBkYXRlcyBhbmQvb3IgQ3JlYXRlcyBhIFdlYkdMIHRleHR1cmUgZm9yIHRoZSByZW5kZXJlcidzIGNvbnRleHQuXG4gKlxuICogQHBhcmFtIHRleHR1cmUge1BJWEkuQmFzZVRleHR1cmV8UElYSS5UZXh0dXJlfSB0aGUgdGV4dHVyZSB0byB1cGRhdGVcbiAqL1xuVGV4dHVyZU1hbmFnZXIucHJvdG90eXBlLnVwZGF0ZVRleHR1cmUgPSBmdW5jdGlvbih0ZXh0dXJlKVxue1xuXHR0ZXh0dXJlID0gdGV4dHVyZS5iYXNlVGV4dHVyZSB8fCB0ZXh0dXJlO1xuXG5cdGlmICghdGV4dHVyZS5oYXNMb2FkZWQpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgXG4gICAgdmFyIGdsID0gdGhpcy5nbDtcbiAgICB2YXIgZ2xUZXh0dXJlID0gdGhpcy5nbFRleHR1cmVzW3RleHR1cmUudWlkXS8vdGV4dHVyZS5fZ2xUZXh0dXJlc1tnbC5pZF07XG5cbiAgICBpZiAoIWdsVGV4dHVyZSlcbiAgICB7XG4gICAgICAgIGdsVGV4dHVyZSA9IG5ldyBHTFRleHR1cmUoZ2wpO1xuICAgICAgICBnbFRleHR1cmUucHJlbXVsdGlwbHlBbHBoYSA9IHRydWVcbiAgICAgICAgdGV4dHVyZS5fZ2xUZXh0dXJlc1tnbC5pZF0gPSBnbFRleHR1cmU7XG5cbiAgICAgICAvLyB0aGlzLmdsVGV4dHVyZXNbdGV4dHVyZS51aWRdID0gZ2xUZXh0dXJlO1xuXG4gICAgICAgIHRleHR1cmUub24oJ3VwZGF0ZScsIHRoaXMudXBkYXRlVGV4dHVyZSwgdGhpcyk7XG4gICAgICAgIHRleHR1cmUub24oJ2Rpc3Bvc2UnLCB0aGlzLmRlc3Ryb3lUZXh0dXJlLCB0aGlzKTtcbiAgICAgICAgXG4gICAgICAgIHRoaXMuX21hbmFnZWRUZXh0dXJlcy5wdXNoKHRleHR1cmUpO1xuICAgIH1cblxuICAgIGdsVGV4dHVyZS51cGxvYWQodGV4dHVyZS5zb3VyY2UpO1xuICAgIFxuICAgIC8vVE9ETyBjaGVjayBpcyBwb3dlciBvZiB0d28uLlxuICAgIGdsVGV4dHVyZS5lbmFibGVXcmFwQ2xhbXAoKTtcblxuXG4gICAgLy8gVE9ETyBjaGVjayBmb3Igc2NhbGluZyB0eXBlXG4gICAgZ2xUZXh0dXJlLmVuYWJsZUxpbmVhclNjYWxpbmcoKTtcblxuICAgIHJldHVybiAgdGV4dHVyZS5fZ2xUZXh0dXJlc1tnbC5pZF07XG59XG5cbi8qKlxuICogRGVsZXRlcyB0aGUgdGV4dHVyZSBmcm9tIFdlYkdMXG4gKlxuICogQHBhcmFtIHRleHR1cmUge1BJWEkuQmFzZVRleHR1cmV8UElYSS5UZXh0dXJlfSB0aGUgdGV4dHVyZSB0byBkZXN0cm95XG4gKi9cblRleHR1cmVNYW5hZ2VyLnByb3RvdHlwZS5kZXN0cm95VGV4dHVyZSA9IGZ1bmN0aW9uKHRleHR1cmUsIF9za2lwUmVtb3ZlKVxue1xuXHR0ZXh0dXJlID0gdGV4dHVyZS5iYXNlVGV4dHVyZSB8fCB0ZXh0dXJlO1xuXG4gICAgaWYgKCF0ZXh0dXJlLmhhc0xvYWRlZClcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAodGV4dHVyZS5fZ2xUZXh0dXJlc1t0aGlzLmdsLmlkXSlcbiAgICB7XG4gICAgICAgIHRleHR1cmUuX2dsVGV4dHVyZXNbdGhpcy5nbC5pZF0uZGVzdHJveSgpO1xuICAgICAgICB0ZXh0dXJlLm9mZigndXBkYXRlJywgdGhpcy51cGRhdGVUZXh0dXJlLCB0aGlzKTtcbiAgICAgICAgdGV4dHVyZS5vZmYoJ2Rpc3Bvc2UnLCB0aGlzLmRlc3Ryb3lUZXh0dXJlLCB0aGlzKTtcblxuXG4gICAgICAgIGRlbGV0ZSB0ZXh0dXJlLl9nbFRleHR1cmVzW3RoaXMuZ2wuaWRdO1xuXG4gICAgICAgIGlmICghX3NraXBSZW1vdmUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHZhciBpID0gdGhpcy5fbWFuYWdlZFRleHR1cmVzLmluZGV4T2YodGV4dHVyZSk7XG4gICAgICAgICAgICBpZiAoaSAhPT0gLTEpIHtcbiAgICAgICAgICAgICAgICB1dGlscy5yZW1vdmVJdGVtcyh0aGlzLl9tYW5hZ2VkVGV4dHVyZXMsIGksIDEpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxufVxuXG5UZXh0dXJlTWFuYWdlci5wcm90b3R5cGUucmVtb3ZlQWxsID0gZnVuY3Rpb24oKVxue1xuXHQvLyBlbXB0eSBhbGwgdGhlIG9sZCBnbCB0ZXh0dXJlcyBhcyB0aGV5IGFyZSB1c2VsZXNzIG5vd1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5fbWFuYWdlZFRleHR1cmVzLmxlbmd0aDsgKytpKVxuICAgIHtcbiAgICAgICAgdmFyIHRleHR1cmUgPSB0aGlzLl9tYW5hZ2VkVGV4dHVyZXNbaV07XG4gICAgICAgIGlmICh0ZXh0dXJlLl9nbFRleHR1cmVzW3RoaXMuZ2wuaWRdKVxuICAgICAgICB7XG4gICAgICAgICAgICBkZWxldGUgdGV4dHVyZS5fZ2xUZXh0dXJlc1t0aGlzLmdsLmlkXTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuVGV4dHVyZU1hbmFnZXIucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbigpXG57XG4gICAgLy8gZGVzdHJveSBtYW5hZ2VkIHRleHR1cmVzXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLl9tYW5hZ2VkVGV4dHVyZXMubGVuZ3RoOyArK2kpXG4gICAge1xuICAgICAgICB2YXIgdGV4dHVyZSA9IHRoaXMuX21hbmFnZWRUZXh0dXJlc1tpXTtcbiAgICAgICAgdGhpcy5kZXN0cm95VGV4dHVyZSh0ZXh0dXJlLCB0cnVlKTtcbiAgICAgICAgdGV4dHVyZS5vZmYoJ3VwZGF0ZScsIHRoaXMudXBkYXRlVGV4dHVyZSwgdGhpcyk7XG4gICAgICAgIHRleHR1cmUub2ZmKCdkaXNwb3NlJywgdGhpcy5kZXN0cm95VGV4dHVyZSwgdGhpcyk7XG4gICAgfVxuXG4gICAgdGhpcy5fbWFuYWdlZFRleHR1cmVzID0gbnVsbDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBUZXh0dXJlTWFuYWdlcjtcblxuIiwidmFyIFN5c3RlbVJlbmRlcmVyID0gcmVxdWlyZSgnLi4vU3lzdGVtUmVuZGVyZXInKSxcbiAgICBTaGFkZXJNYW5hZ2VyID0gcmVxdWlyZSgnLi9tYW5hZ2Vycy9TaGFkZXJNYW5hZ2VyJyksXG4gICAgTWFza01hbmFnZXIgPSByZXF1aXJlKCcuL21hbmFnZXJzL01hc2tNYW5hZ2VyJyksXG4gICAgU3RlbmNpbE1hbmFnZXIgPSByZXF1aXJlKCcuL21hbmFnZXJzL1N0ZW5jaWxNYW5hZ2VyJyksXG4gICAgRmlsdGVyTWFuYWdlciA9IHJlcXVpcmUoJy4vbWFuYWdlcnMvRmlsdGVyTWFuYWdlcicpLFxuICAgIEJsZW5kTW9kZU1hbmFnZXIgPSByZXF1aXJlKCcuL21hbmFnZXJzL0JsZW5kTW9kZU1hbmFnZXInKSxcbiAgICBSZW5kZXJUYXJnZXQgPSByZXF1aXJlKCcuL3V0aWxzL1JlbmRlclRhcmdldCcpLFxuICAgIE9iamVjdFJlbmRlcmVyID0gcmVxdWlyZSgnLi91dGlscy9PYmplY3RSZW5kZXJlcicpLFxuICAgIEZYQUFGaWx0ZXIgPSByZXF1aXJlKCcuL2ZpbHRlcnMvRlhBQUZpbHRlcicpLFxuICAgIFRleHR1cmVNYW5hZ2VyID0gcmVxdWlyZSgnLi9UZXh0dXJlTWFuYWdlcicpLFxuICAgIGNyZWF0ZUNvbnRleHQgPSByZXF1aXJlKCdwaXhpLWdsLWNvcmUnKS5jcmVhdGVDb250ZXh0LFxuICAgIG1hcFdlYkdMQmxlbmRNb2Rlc1RvUGl4aSA9IHJlcXVpcmUoJy4vdXRpbHMvbWFwV2ViR0xCbGVuZE1vZGVzVG9QaXhpJyksXG4gICAgbWFwV2ViR0xEcmF3TW9kZXNUb1BpeGkgPSByZXF1aXJlKCcuL3V0aWxzL21hcFdlYkdMRHJhd01vZGVzVG9QaXhpJyksXG4gICAgdXRpbHMgPSByZXF1aXJlKCcuLi8uLi91dGlscycpLFxuICAgIENPTlNUID0gcmVxdWlyZSgnLi4vLi4vY29uc3QnKTtcblxuLyoqXG4gKiBUaGUgV2ViR0xSZW5kZXJlciBkcmF3cyB0aGUgc2NlbmUgYW5kIGFsbCBpdHMgY29udGVudCBvbnRvIGEgd2ViR0wgZW5hYmxlZCBjYW52YXMuIFRoaXMgcmVuZGVyZXJcbiAqIHNob3VsZCBiZSB1c2VkIGZvciBicm93c2VycyB0aGF0IHN1cHBvcnQgd2ViR0wuIFRoaXMgUmVuZGVyIHdvcmtzIGJ5IGF1dG9tYXRpY2FsbHkgbWFuYWdpbmcgd2ViR0xCYXRjaHMuXG4gKiBTbyBubyBuZWVkIGZvciBTcHJpdGUgQmF0Y2hlcyBvciBTcHJpdGUgQ2xvdWRzLlxuICogRG9uJ3QgZm9yZ2V0IHRvIGFkZCB0aGUgdmlldyB0byB5b3VyIERPTSBvciB5b3Ugd2lsbCBub3Qgc2VlIGFueXRoaW5nIDopXG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQGV4dGVuZHMgUElYSS5TeXN0ZW1SZW5kZXJlclxuICogQHBhcmFtIFt3aWR0aD0wXSB7bnVtYmVyfSB0aGUgd2lkdGggb2YgdGhlIGNhbnZhcyB2aWV3XG4gKiBAcGFyYW0gW2hlaWdodD0wXSB7bnVtYmVyfSB0aGUgaGVpZ2h0IG9mIHRoZSBjYW52YXMgdmlld1xuICogQHBhcmFtIFtvcHRpb25zXSB7b2JqZWN0fSBUaGUgb3B0aW9uYWwgcmVuZGVyZXIgcGFyYW1ldGVyc1xuICogQHBhcmFtIFtvcHRpb25zLnZpZXddIHtIVE1MQ2FudmFzRWxlbWVudH0gdGhlIGNhbnZhcyB0byB1c2UgYXMgYSB2aWV3LCBvcHRpb25hbFxuICogQHBhcmFtIFtvcHRpb25zLnRyYW5zcGFyZW50PWZhbHNlXSB7Ym9vbGVhbn0gSWYgdGhlIHJlbmRlciB2aWV3IGlzIHRyYW5zcGFyZW50LCBkZWZhdWx0IGZhbHNlXG4gKiBAcGFyYW0gW29wdGlvbnMuYXV0b1Jlc2l6ZT1mYWxzZV0ge2Jvb2xlYW59IElmIHRoZSByZW5kZXIgdmlldyBpcyBhdXRvbWF0aWNhbGx5IHJlc2l6ZWQsIGRlZmF1bHQgZmFsc2VcbiAqIEBwYXJhbSBbb3B0aW9ucy5hbnRpYWxpYXM9ZmFsc2VdIHtib29sZWFufSBzZXRzIGFudGlhbGlhcy4gSWYgbm90IGF2YWlsYWJsZSBuYXRpdmVseSB0aGVuIEZYQUEgYW50aWFsaWFzaW5nIGlzIHVzZWRcbiAqIEBwYXJhbSBbb3B0aW9ucy5mb3JjZUZYQUE9ZmFsc2VdIHtib29sZWFufSBmb3JjZXMgRlhBQSBhbnRpYWxpYXNpbmcgdG8gYmUgdXNlZCBvdmVyIG5hdGl2ZS4gRlhBQSBpcyBmYXN0ZXIsIGJ1dCBtYXkgbm90IGFsd2F5cyBsb29rIGFzIGdyZWF0XG4gKiBAcGFyYW0gW29wdGlvbnMucmVzb2x1dGlvbj0xXSB7bnVtYmVyfSB0aGUgcmVzb2x1dGlvbiBvZiB0aGUgcmVuZGVyZXIgcmV0aW5hIHdvdWxkIGJlIDJcbiAqIEBwYXJhbSBbb3B0aW9ucy5jbGVhckJlZm9yZVJlbmRlcj10cnVlXSB7Ym9vbGVhbn0gVGhpcyBzZXRzIGlmIHRoZSBDYW52YXNSZW5kZXJlciB3aWxsIGNsZWFyIHRoZSBjYW52YXMgb3JcbiAqICAgICAgbm90IGJlZm9yZSB0aGUgbmV3IHJlbmRlciBwYXNzLiBJZiB5b3Ugd2lzaCB0byBzZXQgdGhpcyB0byBmYWxzZSwgeW91ICptdXN0KiBzZXQgcHJlc2VydmVEcmF3aW5nQnVmZmVyIHRvIGB0cnVlYC5cbiAqIEBwYXJhbSBbb3B0aW9ucy5wcmVzZXJ2ZURyYXdpbmdCdWZmZXI9ZmFsc2VdIHtib29sZWFufSBlbmFibGVzIGRyYXdpbmcgYnVmZmVyIHByZXNlcnZhdGlvbiwgZW5hYmxlIHRoaXMgaWZcbiAqICAgICAgeW91IG5lZWQgdG8gY2FsbCB0b0RhdGFVcmwgb24gdGhlIHdlYmdsIGNvbnRleHQuXG4gKiBAcGFyYW0gW29wdGlvbnMucm91bmRQaXhlbHM9ZmFsc2VdIHtib29sZWFufSBJZiB0cnVlIFBpeGkgd2lsbCBNYXRoLmZsb29yKCkgeC95IHZhbHVlcyB3aGVuIHJlbmRlcmluZywgc3RvcHBpbmcgcGl4ZWwgaW50ZXJwb2xhdGlvbi5cbiAqL1xuZnVuY3Rpb24gV2ViR0xSZW5kZXJlcih3aWR0aCwgaGVpZ2h0LCBvcHRpb25zKVxue1xuICAgIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuXG4gICAgU3lzdGVtUmVuZGVyZXIuY2FsbCh0aGlzLCAnV2ViR0wnLCB3aWR0aCwgaGVpZ2h0LCBvcHRpb25zKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSB0eXBlIG9mIHRoaXMgcmVuZGVyZXIgYXMgYSBzdGFuZGFyZGlzZWQgY29uc3RcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn0vL1xuICAgICAqXG4gICAgICovXG4gICAgdGhpcy50eXBlID0gQ09OU1QuUkVOREVSRVJfVFlQRS5XRUJHTDtcblxuICAgIHRoaXMuaGFuZGxlQ29udGV4dExvc3QgPSB0aGlzLmhhbmRsZUNvbnRleHRMb3N0LmJpbmQodGhpcyk7XG4gICAgdGhpcy5oYW5kbGVDb250ZXh0UmVzdG9yZWQgPSB0aGlzLmhhbmRsZUNvbnRleHRSZXN0b3JlZC5iaW5kKHRoaXMpO1xuXG4gICAgdGhpcy52aWV3LmFkZEV2ZW50TGlzdGVuZXIoJ3dlYmdsY29udGV4dGxvc3QnLCB0aGlzLmhhbmRsZUNvbnRleHRMb3N0LCBmYWxzZSk7XG4gICAgdGhpcy52aWV3LmFkZEV2ZW50TGlzdGVuZXIoJ3dlYmdsY29udGV4dHJlc3RvcmVkJywgdGhpcy5oYW5kbGVDb250ZXh0UmVzdG9yZWQsIGZhbHNlKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBvcHRpb25zIHBhc3NlZCBpbiB0byBjcmVhdGUgYSBuZXcgd2ViZ2wgY29udGV4dC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge29iamVjdH1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX2NvbnRleHRPcHRpb25zID0ge1xuICAgICAgICBhbHBoYTogdGhpcy50cmFuc3BhcmVudCxcbiAgICAgICAgYW50aWFsaWFzOiBvcHRpb25zLmFudGlhbGlhcyxcbiAgICAgICAgcHJlbXVsdGlwbGllZEFscGhhOiB0aGlzLnRyYW5zcGFyZW50ICYmIHRoaXMudHJhbnNwYXJlbnQgIT09ICdub3RNdWx0aXBsaWVkJyxcbiAgICAgICAgc3RlbmNpbDogdHJ1ZSxcbiAgICAgICAgcHJlc2VydmVEcmF3aW5nQnVmZmVyOiBvcHRpb25zLnByZXNlcnZlRHJhd2luZ0J1ZmZlclxuICAgIH07XG5cbiAgICB0aGlzLl9iYWNrZ3JvdW5kQ29sb3JSZ2JhWzNdID0gdGhpcy50cmFuc3BhcmVudCA/IDAgOiAxO1xuXG4gICAgLyoqXG4gICAgICogRGVhbHMgd2l0aCBtYW5hZ2luZyB0aGUgc2hhZGVyIHByb2dyYW1zIGFuZCB0aGVpciBhdHRyaWJzLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5TaGFkZXJNYW5hZ2VyfVxuICAgICAqL1xuICAgIHRoaXMuc2hhZGVyTWFuYWdlciA9IG5ldyBTaGFkZXJNYW5hZ2VyKHRoaXMpO1xuXG4gICAgLyoqXG4gICAgICogTWFuYWdlcyB0aGUgbWFza3MgdXNpbmcgdGhlIHN0ZW5jaWwgYnVmZmVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5NYXNrTWFuYWdlcn1cbiAgICAgKi9cbiAgICB0aGlzLm1hc2tNYW5hZ2VyID0gbmV3IE1hc2tNYW5hZ2VyKHRoaXMpO1xuXG4gICAgLyoqXG4gICAgICogTWFuYWdlcyB0aGUgc3RlbmNpbCBidWZmZXIuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlN0ZW5jaWxNYW5hZ2VyfVxuICAgICAqL1xuICAgIHRoaXMuc3RlbmNpbE1hbmFnZXIgPSBuZXcgU3RlbmNpbE1hbmFnZXIodGhpcyk7XG5cbiAgICAvKipcbiAgICAgKiBNYW5hZ2VzIHRoZSBmaWx0ZXJzLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5GaWx0ZXJNYW5hZ2VyfVxuICAgICAqL1xuICAgIHRoaXMuZmlsdGVyTWFuYWdlciA9IG5ldyBGaWx0ZXJNYW5hZ2VyKHRoaXMpO1xuXG4gICAgLyoqXG4gICAgICogTWFuYWdlcyB0aGUgYmxlbmRNb2Rlc1xuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5CbGVuZE1vZGVNYW5hZ2VyfVxuICAgICAqL1xuICAgIHRoaXMuYmxlbmRNb2RlTWFuYWdlciA9IG5ldyBCbGVuZE1vZGVNYW5hZ2VyKHRoaXMpO1xuXG4gICAgXG4gICAgLyoqXG4gICAgICogVGhlIGN1cnJlbnRseSBhY3RpdmUgT2JqZWN0UmVuZGVyZXIuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLk9iamVjdFJlbmRlcmVyfVxuICAgICAqL1xuICAgIHRoaXMuY3VycmVudFJlbmRlcmVyID0gbmV3IE9iamVjdFJlbmRlcmVyKHRoaXMpO1xuXG4gICAgdGhpcy5pbml0UGx1Z2lucygpO1xuXG4gICAgLy8gaW5pdGlhbGl6ZSB0aGUgY29udGV4dCBzbyBpdCBpcyByZWFkeSBmb3IgdGhlIG1hbmFnZXJzLlxuICAgIHRoaXMuZ2wgPSBjcmVhdGVDb250ZXh0KHRoaXMudmlldywgdGhpcy5fY29udGV4dE9wdGlvbnMpO1xuXG4gICAgdGhpcy5faW5pdENvbnRleHQoKTtcblxuICAgIC8vIG1hcCBzb21lIHdlYkdMIGJsZW5kIGFuZCBkcmF3bW9kZXMuLlxuICAgIHRoaXMuYmxlbmRNb2RlcyA9IG1hcFdlYkdMQmxlbmRNb2Rlc1RvUGl4aShnbCk7XG4gICAgdGhpcy5kcmF3TW9kZXMgPSBtYXBXZWJHTERyYXdNb2Rlc1RvUGl4aShnbClcblxuICAgIHRoaXMuX2FjdGl2ZVNoYWRlciA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBIb2xkcyB0aGUgY3VycmVudCByZW5kZXIgdGFyZ2V0XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlJlbmRlclRhcmdldH1cbiAgICAgKi9cbiAgICB0aGlzLl9hY3RpdmVSZW5kZXJUYXJnZXQgPSBudWxsO1xuICAgIHRoaXMuX2FjdGl2ZVRleHR1cmVMb2NhdGlvbiA9IG51bGw7XG4gICAgdGhpcy5fYWN0aXZlVGV4dHVyZSA9IG51bGw7XG59XG5cbi8vIGNvbnN0cnVjdG9yXG5XZWJHTFJlbmRlcmVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoU3lzdGVtUmVuZGVyZXIucHJvdG90eXBlKTtcbldlYkdMUmVuZGVyZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gV2ViR0xSZW5kZXJlcjtcbm1vZHVsZS5leHBvcnRzID0gV2ViR0xSZW5kZXJlcjtcbnV0aWxzLnBsdWdpblRhcmdldC5taXhpbihXZWJHTFJlbmRlcmVyKTtcblxuLyoqXG4gKiBDcmVhdGVzIHRoZSBXZWJHTCBjb250ZXh0XG4gKlxuICogQHByaXZhdGVcbiAqL1xuV2ViR0xSZW5kZXJlci5wcm90b3R5cGUuX2luaXRDb250ZXh0ID0gZnVuY3Rpb24gKClcbntcbiAgICB2YXIgZ2wgPSB0aGlzLmdsO1xuXG4gICAgLy8gY3JlYXRlIGEgdGV4dHVyZSBtYW5hZ2VyLi4uXG4gICAgdGhpcy50ZXh0dXJlTWFuYWdlciA9IG5ldyBUZXh0dXJlTWFuYWdlcihnbCk7XG5cbiAgICAvLyBzZXQgdXAgdGhlIGRlZmF1bHQgcGl4aSBzZXR0aW5ncy4uXG4gICAgZ2wuZGlzYWJsZShnbC5ERVBUSF9URVNUKTtcbiAgICBnbC5kaXNhYmxlKGdsLkNVTExfRkFDRSk7XG4gICAgZ2wuZW5hYmxlKGdsLkJMRU5EKTtcblxuXG4gICAgdGhpcy5yb290UmVuZGVyVGFyZ2V0ID0gbmV3IFJlbmRlclRhcmdldChnbCwgdGhpcy53aWR0aCwgdGhpcy5oZWlnaHQsIG51bGwsIHRoaXMucmVzb2x1dGlvbiwgdHJ1ZSk7XG4gICAgdGhpcy5yb290UmVuZGVyVGFyZ2V0LmNsZWFyQ29sb3IgPSB0aGlzLl9iYWNrZ3JvdW5kQ29sb3JSZ2JhO1xuICAgIFxuICAgIHRoaXMuYmluZFJlbmRlclRhcmdldCh0aGlzLnJvb3RSZW5kZXJUYXJnZXQpO1xuXG4gICAgdGhpcy5lbWl0KCdjb250ZXh0JywgZ2wpO1xuXG4gICAgLy8gc2V0dXAgdGhlIHdpZHRoL2hlaWdodCBwcm9wZXJ0aWVzIGFuZCBnbCB2aWV3cG9ydFxuICAgIHRoaXMucmVzaXplKHRoaXMud2lkdGgsIHRoaXMuaGVpZ2h0KTsgICAgXG59O1xuXG4vKipcbiAqIFJlbmRlcnMgdGhlIG9iamVjdCB0byBpdHMgd2ViR0wgdmlld1xuICpcbiAqIEBwYXJhbSBvYmplY3Qge1BJWEkuRGlzcGxheU9iamVjdH0gdGhlIG9iamVjdCB0byBiZSByZW5kZXJlZFxuICovXG5XZWJHTFJlbmRlcmVyLnByb3RvdHlwZS5yZW5kZXIgPSBmdW5jdGlvbiAoZGlzcGxheU9iamVjdClcbntcbiAgICB0aGlzLmVtaXQoJ3ByZXJlbmRlcicpO1xuXG4gICAgLy8gbm8gcG9pbnQgcmVuZGVyaW5nIGlmIG91ciBjb250ZXh0IGhhcyBiZWVuIGJsb3duIHVwIVxuICAgIGlmICh0aGlzLmdsLmlzQ29udGV4dExvc3QoKSlcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLl9sYXN0T2JqZWN0UmVuZGVyZWQgPSBkaXNwbGF5T2JqZWN0O1xuXG4gICAgdmFyIGNhY2hlUGFyZW50ID0gZGlzcGxheU9iamVjdC5wYXJlbnQ7XG4gICAgZGlzcGxheU9iamVjdC5wYXJlbnQgPSB0aGlzLl90ZW1wRGlzcGxheU9iamVjdFBhcmVudDtcbiAgICAvLyB1cGRhdGUgdGhlIHNjZW5lIGdyYXBoXG4gICAgZGlzcGxheU9iamVjdC51cGRhdGVUcmFuc2Zvcm0oKTtcbiAgICBkaXNwbGF5T2JqZWN0LnBhcmVudCA9IGNhY2hlUGFyZW50O1xuXG4gICAgdGhpcy5yZW5kZXJEaXNwbGF5T2JqZWN0KGRpc3BsYXlPYmplY3QsIHRoaXMucm9vdFJlbmRlclRhcmdldCwgdGhpcy5jbGVhckJlZm9yZVJlbmRlcik7Ly90aGlzLnByb2plY3Rpb24pO1xuXG4gICAgdGhpcy5lbWl0KCdwb3N0cmVuZGVyJyk7XG59O1xuXG4vKipcbiAqIFJlbmRlcnMgYSBEaXNwbGF5IE9iamVjdC5cbiAqXG4gKiBAcGFyYW0gZGlzcGxheU9iamVjdCB7UElYSS5EaXNwbGF5T2JqZWN0fSBUaGUgRGlzcGxheU9iamVjdCB0byByZW5kZXJcbiAqIEBwYXJhbSByZW5kZXJUYXJnZXQge1BJWEkuUmVuZGVyVGFyZ2V0fSBUaGUgcmVuZGVyIHRhcmdldCB0byB1c2UgdG8gcmVuZGVyIHRoaXMgZGlzcGxheSBvYmplY3RcbiAqXG4gKi9cbldlYkdMUmVuZGVyZXIucHJvdG90eXBlLnJlbmRlckRpc3BsYXlPYmplY3QgPSBmdW5jdGlvbiAoZGlzcGxheU9iamVjdCwgcmVuZGVyVGFyZ2V0LCBjbGVhcikvL3Byb2plY3Rpb24sIGJ1ZmZlcilcbntcbiAgICB0aGlzLmJpbmRSZW5kZXJUYXJnZXQocmVuZGVyVGFyZ2V0KTtcblxuICAgIGlmKGNsZWFyKVxuICAgIHtcbiAgICAgICAgcmVuZGVyVGFyZ2V0LmNsZWFyKCk7XG4gICAgfVxuXG4gICAgLy8gc3RhcnQgdGhlIGZpbHRlciBtYW5hZ2VyXG4gICAgdGhpcy5maWx0ZXJNYW5hZ2VyLnNldEZpbHRlclN0YWNrKCByZW5kZXJUYXJnZXQuZmlsdGVyU3RhY2sgKTtcblxuICAgIC8vIHJlbmRlciB0aGUgc2NlbmUhXG4gICAgZGlzcGxheU9iamVjdC5yZW5kZXJXZWJHTCh0aGlzKTtcblxuICAgIC8vIGZpbmlzaCB0aGUgY3VycmVudCByZW5kZXJlci4uXG4gICAgdGhpcy5jdXJyZW50UmVuZGVyZXIuZmx1c2goKTtcbn07XG5cbi8qKlxuICogQ2hhbmdlcyB0aGUgY3VycmVudCByZW5kZXJlciB0byB0aGUgb25lIGdpdmVuIGluIHBhcmFtZXRlclxuICpcbiAqIEBwYXJhbSBvYmplY3RSZW5kZXJlciB7UElYSS5PYmplY3RSZW5kZXJlcn0gVGhlIG9iamVjdCByZW5kZXJlciB0byB1c2UuXG4gKi9cbldlYkdMUmVuZGVyZXIucHJvdG90eXBlLnNldE9iamVjdFJlbmRlcmVyID0gZnVuY3Rpb24gKG9iamVjdFJlbmRlcmVyKVxue1xuICAgIGlmICh0aGlzLmN1cnJlbnRSZW5kZXJlciA9PT0gb2JqZWN0UmVuZGVyZXIpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5jdXJyZW50UmVuZGVyZXIuc3RvcCgpO1xuICAgIHRoaXMuY3VycmVudFJlbmRlcmVyID0gb2JqZWN0UmVuZGVyZXI7XG4gICAgdGhpcy5jdXJyZW50UmVuZGVyZXIuc3RhcnQoKTtcbn07XG5cbi8qKlxuICogUmVzaXplcyB0aGUgd2ViR0wgdmlldyB0byB0aGUgc3BlY2lmaWVkIHdpZHRoIGFuZCBoZWlnaHQuXG4gKlxuICogQHBhcmFtIHdpZHRoIHtudW1iZXJ9IHRoZSBuZXcgd2lkdGggb2YgdGhlIHdlYkdMIHZpZXdcbiAqIEBwYXJhbSBoZWlnaHQge251bWJlcn0gdGhlIG5ldyBoZWlnaHQgb2YgdGhlIHdlYkdMIHZpZXdcbiAqL1xuV2ViR0xSZW5kZXJlci5wcm90b3R5cGUucmVzaXplID0gZnVuY3Rpb24gKHdpZHRoLCBoZWlnaHQpXG57XG4gICAgU3lzdGVtUmVuZGVyZXIucHJvdG90eXBlLnJlc2l6ZS5jYWxsKHRoaXMsIHdpZHRoLCBoZWlnaHQpO1xuXG4gICAgdGhpcy5maWx0ZXJNYW5hZ2VyLnJlc2l6ZSh3aWR0aCwgaGVpZ2h0KTtcbiAgICB0aGlzLnJvb3RSZW5kZXJUYXJnZXQucmVzaXplKHdpZHRoLCBoZWlnaHQpO1xuXG4gICAgaWYodGhpcy5jdXJyZW50UmVuZGVyVGFyZ2V0ID09PSB0aGlzLnJlbmRlclRhcmdldClcbiAgICB7XG4gICAgICAgIHRoaXMucm9vdFJlbmRlclRhcmdldC5hY3RpdmF0ZSgpO1xuICAgIH1cbn07XG5cbi8qKlxuICogQ2hhbmdlcyB0aGUgY3VycmVudCByZW5kZXIgdGFyZ2V0IHRvIHRoZSBvbmUgZ2l2ZW4gaW4gcGFyYW1ldGVyXG4gKlxuICogQHBhcmFtIHJlbmRlclRhcmdldCB7UElYSS5SZW5kZXJUYXJnZXR9IHRoZSBuZXcgcmVuZGVyIHRhcmdldFxuICovXG5XZWJHTFJlbmRlcmVyLnByb3RvdHlwZS5iaW5kUmVuZGVyVGFyZ2V0ID0gZnVuY3Rpb24gKHJlbmRlclRhcmdldCkvL3Byb2plY3Rpb24sIGJ1ZmZlcilcbntcbiAgICBpZihyZW5kZXJUYXJnZXQgIT09IHRoaXMuX2FjdGl2ZVJlbmRlclRhcmdldClcbiAgICB7XG4gICAgICAgIHRoaXMuX2FjdGl2ZVJlbmRlclRhcmdldCA9IHJlbmRlclRhcmdldDtcblxuICAgICAgICBpZih0aGlzLl9hY3RpdmVTaGFkZXIpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuX2FjdGl2ZVNoYWRlci51bmlmb3Jtcy5wcm9qZWN0aW9uTWF0cml4ID0gcmVuZGVyVGFyZ2V0LnByb2plY3Rpb25NYXRyaXgudG9BcnJheSh0cnVlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJlbmRlclRhcmdldC5hY3RpdmF0ZSgpO1xuXG4gICAgICAgIHRoaXMuc3RlbmNpbE1hbmFnZXIuc2V0TWFza1N0YWNrKCByZW5kZXJUYXJnZXQuc3RlbmNpbE1hc2tTdGFjayApO1xuICAgIH1cbn1cblxuV2ViR0xSZW5kZXJlci5wcm90b3R5cGUuYmluZFNoYWRlciA9IGZ1bmN0aW9uIChzaGFkZXIpLy9wcm9qZWN0aW9uLCBidWZmZXIpXG57XG4gICAgLy9UT0RPIGNhY2hlXG4gICAgaWYodGhpcy5fYWN0aXZlU2hhZGVyICE9PSBzaGFkZXIpXG4gICAge1xuICAgICAgICB0aGlzLl9hY3RpdmVTaGFkZXIgPSBzaGFkZXI7XG4gICAgICAgIHNoYWRlci5iaW5kKCk7XG5cbiAgICAgICAgLy8gYXV0b21hdGljYWxseSBzZXQgdGhlIHByb2plY3Rpb24gbWF0cml4XG4gICAgICAgIHNoYWRlci51bmlmb3Jtcy5wcm9qZWN0aW9uTWF0cml4ID0gdGhpcy5fYWN0aXZlUmVuZGVyVGFyZ2V0LnByb2plY3Rpb25NYXRyaXgudG9BcnJheSh0cnVlKTtcbiAgICB9XG59XG5cblxuV2ViR0xSZW5kZXJlci5wcm90b3R5cGUuYmluZFRleHR1cmUgPSBmdW5jdGlvbiAodGV4dHVyZSwgbG9jYXRpb24pXG57XG4gICAgdmFyIGdsID0gdGhpcy5nbDtcblxuICAgIC8vVE9ETyB0ZXN0IHBlcmYgb2YgY2FjaGU/XG4gICAgbG9jYXRpb24gPSBsb2NhdGlvbiB8fCAwO1xuXG4gICAgaWYodGhpcy5fYWN0aXZlVGV4dHVyZUxvY2F0aW9uICE9PSBsb2NhdGlvbikvL1xuICAgIHtcbiAgICAgICAgdGhpcy5fYWN0aXZlVGV4dHVyZUxvY2F0aW9uID0gbG9jYXRpb25cbiAgICAgICAgZ2wuYWN0aXZlVGV4dHVyZShnbC5URVhUVVJFMCArIGxvY2F0aW9uICk7XG4gICAgfVxuXG4gICAgLy9UT0RPIC0gY2FuIHdlIGNhY2hlIHRoaXMgdGV4dHVyZSB0b28/XG4gICAgdGhpcy5fYWN0aXZlVGV4dHVyZSA9IHRleHR1cmU7ICAgICAgXG4gICAgXG4gICAgaWYgKCF0ZXh0dXJlLl9nbFRleHR1cmVzW2dsLmlkXSlcbiAgICB7XG4gICAgICAgIC8vIHRoaXMgd2lsbCBhbHNvIGJpbmQgdGhlIHRleHR1cmUuLlxuICAgICAgICB0aGlzLnRleHR1cmVNYW5hZ2VyLnVwZGF0ZVRleHR1cmUodGV4dHVyZSk7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7ICAgXG4gICAgICAgIC8vIGJpbmQgdGhlIGN1cnJlbnQgdGV4dHVyZVxuICAgICAgICB0ZXh0dXJlLl9nbFRleHR1cmVzW2dsLmlkXS5iaW5kKCk7XG4gICAgfVxufVxuXG5cbi8qKlxuICogSGFuZGxlcyBhIGxvc3Qgd2ViZ2wgY29udGV4dFxuICpcbiAqIEBwcml2YXRlXG4gKi9cbldlYkdMUmVuZGVyZXIucHJvdG90eXBlLmhhbmRsZUNvbnRleHRMb3N0ID0gZnVuY3Rpb24gKGV2ZW50KVxue1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG59O1xuXG4vKipcbiAqIEhhbmRsZXMgYSByZXN0b3JlZCB3ZWJnbCBjb250ZXh0XG4gKlxuICogQHByaXZhdGVcbiAqL1xuV2ViR0xSZW5kZXJlci5wcm90b3R5cGUuaGFuZGxlQ29udGV4dFJlc3RvcmVkID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLl9pbml0Q29udGV4dCgpO1xuICAgIHRoaXMudGV4dHVyZU1hbmFnZXIucmVtb3ZlQWxsKCk7XG59O1xuXG4vKipcbiAqIFJlbW92ZXMgZXZlcnl0aGluZyBmcm9tIHRoZSByZW5kZXJlciAoZXZlbnQgbGlzdGVuZXJzLCBzcHJpdGViYXRjaCwgZXRjLi4uKVxuICpcbiAqIEBwYXJhbSBbcmVtb3ZlVmlldz1mYWxzZV0ge2Jvb2xlYW59IFJlbW92ZXMgdGhlIENhbnZhcyBlbGVtZW50IGZyb20gdGhlIERPTS5cbiAqL1xuV2ViR0xSZW5kZXJlci5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uIChyZW1vdmVWaWV3KVxue1xuICAgIHRoaXMuZGVzdHJveVBsdWdpbnMoKTtcblxuICAgIC8vIHJlbW92ZSBsaXN0ZW5lcnNcbiAgICB0aGlzLnZpZXcucmVtb3ZlRXZlbnRMaXN0ZW5lcignd2ViZ2xjb250ZXh0bG9zdCcsIHRoaXMuaGFuZGxlQ29udGV4dExvc3QpO1xuICAgIHRoaXMudmlldy5yZW1vdmVFdmVudExpc3RlbmVyKCd3ZWJnbGNvbnRleHRyZXN0b3JlZCcsIHRoaXMuaGFuZGxlQ29udGV4dFJlc3RvcmVkKTtcblxuICAgIHRoaXMudGV4dHVyZU1hbmFnZXIuZGVzdHJveUFsbCgpO1xuXG4gICAgLy8gY2FsbCBiYXNlIGRlc3Ryb3lcbiAgICBTeXN0ZW1SZW5kZXJlci5wcm90b3R5cGUuZGVzdHJveS5jYWxsKHRoaXMsIHJlbW92ZVZpZXcpO1xuXG4gICAgdGhpcy51aWQgPSAwO1xuXG4gICAgLy8gZGVzdHJveSB0aGUgbWFuYWdlcnNcbiAgICB0aGlzLnNoYWRlck1hbmFnZXIuZGVzdHJveSgpO1xuICAgIHRoaXMubWFza01hbmFnZXIuZGVzdHJveSgpO1xuICAgIHRoaXMuc3RlbmNpbE1hbmFnZXIuZGVzdHJveSgpO1xuICAgIHRoaXMuZmlsdGVyTWFuYWdlci5kZXN0cm95KCk7XG4gICAgdGhpcy5ibGVuZE1vZGVNYW5hZ2VyLmRlc3Ryb3koKTtcblxuICAgIHRoaXMuc2hhZGVyTWFuYWdlciA9IG51bGw7XG4gICAgdGhpcy5tYXNrTWFuYWdlciA9IG51bGw7XG4gICAgdGhpcy5maWx0ZXJNYW5hZ2VyID0gbnVsbDtcbiAgICB0aGlzLmJsZW5kTW9kZU1hbmFnZXIgPSBudWxsO1xuICAgIHRoaXMuY3VycmVudFJlbmRlcmVyID0gbnVsbDtcblxuICAgIHRoaXMuaGFuZGxlQ29udGV4dExvc3QgPSBudWxsO1xuICAgIHRoaXMuaGFuZGxlQ29udGV4dFJlc3RvcmVkID0gbnVsbDtcblxuICAgIHRoaXMuX2NvbnRleHRPcHRpb25zID0gbnVsbDtcblxuICAgIHRoaXMuZ2wudXNlUHJvZ3JhbShudWxsKTtcbiAgICB0aGlzLmdsID0gbnVsbDtcbn07XG5cbiIsInZhciBEZWZhdWx0U2hhZGVyID0gcmVxdWlyZSgnLi4vc2hhZGVycy9UZXh0dXJlU2hhZGVyJyk7XG5cbi8qKlxuICogVGhpcyBpcyB0aGUgYmFzZSBjbGFzcyBmb3IgY3JlYXRpbmcgYSBQSVhJIGZpbHRlci4gQ3VycmVudGx5IG9ubHkgV2ViR0wgc3VwcG9ydHMgZmlsdGVycy5cbiAqIElmIHlvdSB3YW50IHRvIG1ha2UgYSBjdXN0b20gZmlsdGVyIHRoaXMgc2hvdWxkIGJlIHlvdXIgYmFzZSBjbGFzcy5cbiAqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gdmVydGV4U3JjIHtzdHJpbmd8c3RyaW5nW119IFRoZSB2ZXJ0ZXggc2hhZGVyIHNvdXJjZSBhcyBhbiBhcnJheSBvZiBzdHJpbmdzLlxuICogQHBhcmFtIGZyYWdtZW50U3JjIHtzdHJpbmd8c3RyaW5nW119IFRoZSBmcmFnbWVudCBzaGFkZXIgc291cmNlIGFzIGFuIGFycmF5IG9mIHN0cmluZ3MuXG4gKiBAcGFyYW0gdW5pZm9ybXMge29iamVjdH0gQW4gb2JqZWN0IGNvbnRhaW5pbmcgdGhlIHVuaWZvcm1zIGZvciB0aGlzIGZpbHRlci5cbiAqL1xuZnVuY3Rpb24gQWJzdHJhY3RGaWx0ZXIodmVydGV4U3JjLCBmcmFnbWVudFNyYywgdW5pZm9ybXMpXG57XG5cbiAgICAvKipcbiAgICAgKiBBbiBhcnJheSBvZiBzaGFkZXJzXG4gICAgICogQG1lbWJlciB7UElYSS5TaGFkZXJbXX1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuc2hhZGVycyA9IFtdO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGV4dHJhIHBhZGRpbmcgdGhhdCB0aGUgZmlsdGVyIG1pZ2h0IG5lZWRcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy5wYWRkaW5nID0gMDtcblxuICAgIC8qKlxuICAgICAqIFRoZSB1bmlmb3JtcyBhcyBhbiBvYmplY3RcbiAgICAgKiBAbWVtYmVyIHtvYmplY3R9XG4gICAgICovXG4gICAgdGhpcy51bmlmb3JtcyA9IHVuaWZvcm1zIHx8IHt9O1xuXG5cbiAgICAvKipcbiAgICAgKiBUaGUgY29kZSBvZiB0aGUgdmVydGV4IHNoYWRlclxuICAgICAqIEBtZW1iZXIge3N0cmluZ1tdfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy52ZXJ0ZXhTcmMgPSB2ZXJ0ZXhTcmMgfHwgRGVmYXVsdFNoYWRlci5kZWZhdWx0VmVydGV4U3JjO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGNvZGUgb2YgdGhlIGZyYW1lbnQgc2hhZGVyXG4gICAgICogQG1lbWJlciB7c3RyaW5nW119XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLmZyYWdtZW50U3JjID0gZnJhZ21lbnRTcmMgfHwgRGVmYXVsdFNoYWRlci5kZWZhdWx0RnJhZ21lbnRTcmM7XG5cbiAgICAvL1RPRE8gYSByZW1pbmRlciAtIHdvdWxkIGJlIGNvb2wgdG8gaGF2ZSBsb3dlciByZXMgZmlsdGVycyBhcyB0aGlzIHdvdWxkIGdpdmUgYmV0dGVyIHBlcmZvcm1hbmNlLlxuXG4gICAgLy90eXBlb2YgZnJhZ21lbnRTcmMgPT09ICdzdHJpbmcnID8gZnJhZ21lbnRTcmMuc3BsaXQoJycpIDogKGZyYWdtZW50U3JjIHx8IFtdKTtcblxufVxuXG5BYnN0cmFjdEZpbHRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBBYnN0cmFjdEZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gQWJzdHJhY3RGaWx0ZXI7XG5cbi8qKlxuICogR3JhYnMgYSBzaGFkZXIgZnJvbSB0aGUgY3VycmVudCByZW5kZXJlclxuICpcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5XZWJHTFJlbmRlcmVyfSBUaGUgcmVuZGVyZXIgdG8gcmV0cmlldmUgdGhlIHNoYWRlciBmcm9tXG4gKi9cbkFic3RyYWN0RmlsdGVyLnByb3RvdHlwZS5nZXRTaGFkZXIgPSBmdW5jdGlvbiAocmVuZGVyZXIpXG57XG4gICAgdmFyIGdsID0gcmVuZGVyZXIuZ2w7XG5cbiAgICB2YXIgc2hhZGVyID0gdGhpcy5zaGFkZXJzW2dsLmlkXTtcblxuICAgIGlmICghc2hhZGVyKVxuICAgIHtcbiAgICAgICAgc2hhZGVyID0gbmV3IERlZmF1bHRTaGFkZXIocmVuZGVyZXIuc2hhZGVyTWFuYWdlcixcbiAgICAgICAgICAgIHRoaXMudmVydGV4U3JjLFxuICAgICAgICAgICAgdGhpcy5mcmFnbWVudFNyYyxcbiAgICAgICAgICAgIHRoaXMudW5pZm9ybXMsXG4gICAgICAgICAgICB0aGlzLmF0dHJpYnV0ZXNcbiAgICAgICAgKTtcblxuICAgICAgICB0aGlzLnNoYWRlcnNbZ2wuaWRdID0gc2hhZGVyO1xuICAgIH1cblxuICAgIHJldHVybiBzaGFkZXI7XG59O1xuXG4vKipcbiAqIEFwcGxpZXMgdGhlIGZpbHRlclxuICpcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5XZWJHTFJlbmRlcmVyfSBUaGUgcmVuZGVyZXIgdG8gcmV0cmlldmUgdGhlIGZpbHRlciBmcm9tXG4gKiBAcGFyYW0gaW5wdXQge1BJWEkuUmVuZGVyVGFyZ2V0fVxuICogQHBhcmFtIG91dHB1dCB7UElYSS5SZW5kZXJUYXJnZXR9XG4gKiBAcGFyYW0gY2xlYXIge2Jvb2xlYW59IFdoZXRoZXIgb3Igbm90IHdlIHdhbnQgdG8gY2xlYXIgdGhlIG91dHB1dFRhcmdldFxuICovXG5BYnN0cmFjdEZpbHRlci5wcm90b3R5cGUuYXBwbHlGaWx0ZXIgPSBmdW5jdGlvbiAocmVuZGVyZXIsIGlucHV0LCBvdXRwdXQsIGNsZWFyKVxue1xuICAgIHZhciBzaGFkZXIgPSB0aGlzLmdldFNoYWRlcihyZW5kZXJlcik7XG5cbiAgICByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLmFwcGx5RmlsdGVyKHNoYWRlciwgaW5wdXQsIG91dHB1dCwgY2xlYXIpO1xufTtcblxuLyoqXG4gKiBTeW5jcyBhIHVuaWZvcm0gYmV0d2VlbiB0aGUgY2xhc3Mgb2JqZWN0IGFuZCB0aGUgc2hhZGVycy5cbiAqXG4gKi9cbkFic3RyYWN0RmlsdGVyLnByb3RvdHlwZS5zeW5jVW5pZm9ybSA9IGZ1bmN0aW9uICh1bmlmb3JtKVxue1xuICAgIGZvciAodmFyIGkgPSAwLCBqID0gdGhpcy5zaGFkZXJzLmxlbmd0aDsgaSA8IGo7ICsraSlcbiAgICB7XG4gICAgICAgIHRoaXMuc2hhZGVyc1tpXS5zeW5jVW5pZm9ybSh1bmlmb3JtKTtcbiAgICB9XG59O1xuIiwidmFyIEFic3RyYWN0RmlsdGVyID0gcmVxdWlyZSgnLi9BYnN0cmFjdEZpbHRlcicpO1xuLy8gQHNlZSBodHRwczovL2dpdGh1Yi5jb20vc3Vic3RhY2svYnJmcy9pc3N1ZXMvMjVcblxuXG4vKipcbiAqXG4gKiBCYXNpYyBGWEFBIGltcGxlbWVudGF0aW9uIGJhc2VkIG9uIHRoZSBjb2RlIG9uIGdlZWtzM2QuY29tIHdpdGggdGhlXG4gKiBtb2RpZmljYXRpb24gdGhhdCB0aGUgdGV4dHVyZTJETG9kIHN0dWZmIHdhcyByZW1vdmVkIHNpbmNlIGl0J3NcbiAqIHVuc3VwcG9ydGVkIGJ5IFdlYkdMLlxuICpcbiAqIC0tXG4gKiBGcm9tOlxuICogaHR0cHM6Ly9naXRodWIuY29tL21pdHN1aGlrby93ZWJnbC1tZWluY3JhZnRcbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQWJzdHJhY3RGaWx0ZXJcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKlxuICovXG5mdW5jdGlvbiBGWEFBRmlsdGVyKClcbntcbiAgICBBYnN0cmFjdEZpbHRlci5jYWxsKHRoaXMsXG4gICAgICAgIC8vIHZlcnRleCBzaGFkZXJcbiAgICAgICAgXCJcXG5wcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcXG5cXG5hdHRyaWJ1dGUgdmVjMiBhVmVydGV4UG9zaXRpb247XFxuYXR0cmlidXRlIHZlYzIgYVRleHR1cmVDb29yZDtcXG5hdHRyaWJ1dGUgdmVjNCBhQ29sb3I7XFxuXFxudW5pZm9ybSBtYXQzIHByb2plY3Rpb25NYXRyaXg7XFxudW5pZm9ybSB2ZWMyIHJlc29sdXRpb247XFxuXFxudmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7XFxudmFyeWluZyB2ZWM0IHZDb2xvcjtcXG5cXG52YXJ5aW5nIHZlYzIgdlJlc29sdXRpb247XFxuXFxuLy90ZXhjb29yZHMgY29tcHV0ZWQgaW4gdmVydGV4IHN0ZXBcXG4vL3RvIGF2b2lkIGRlcGVuZGVudCB0ZXh0dXJlIHJlYWRzXFxudmFyeWluZyB2ZWMyIHZfcmdiTlc7XFxudmFyeWluZyB2ZWMyIHZfcmdiTkU7XFxudmFyeWluZyB2ZWMyIHZfcmdiU1c7XFxudmFyeWluZyB2ZWMyIHZfcmdiU0U7XFxudmFyeWluZyB2ZWMyIHZfcmdiTTtcXG5cXG5cXG52b2lkIHRleGNvb3Jkcyh2ZWMyIGZyYWdDb29yZCwgdmVjMiByZXNvbHV0aW9uLFxcbiAgICAgICAgICAgIG91dCB2ZWMyIHZfcmdiTlcsIG91dCB2ZWMyIHZfcmdiTkUsXFxuICAgICAgICAgICAgb3V0IHZlYzIgdl9yZ2JTVywgb3V0IHZlYzIgdl9yZ2JTRSxcXG4gICAgICAgICAgICBvdXQgdmVjMiB2X3JnYk0pIHtcXG4gICAgdmVjMiBpbnZlcnNlVlAgPSAxLjAgLyByZXNvbHV0aW9uLnh5O1xcbiAgICB2X3JnYk5XID0gKGZyYWdDb29yZCArIHZlYzIoLTEuMCwgLTEuMCkpICogaW52ZXJzZVZQO1xcbiAgICB2X3JnYk5FID0gKGZyYWdDb29yZCArIHZlYzIoMS4wLCAtMS4wKSkgKiBpbnZlcnNlVlA7XFxuICAgIHZfcmdiU1cgPSAoZnJhZ0Nvb3JkICsgdmVjMigtMS4wLCAxLjApKSAqIGludmVyc2VWUDtcXG4gICAgdl9yZ2JTRSA9IChmcmFnQ29vcmQgKyB2ZWMyKDEuMCwgMS4wKSkgKiBpbnZlcnNlVlA7XFxuICAgIHZfcmdiTSA9IHZlYzIoZnJhZ0Nvb3JkICogaW52ZXJzZVZQKTtcXG59XFxuXFxudm9pZCBtYWluKHZvaWQpe1xcbiAgIGdsX1Bvc2l0aW9uID0gdmVjNCgocHJvamVjdGlvbk1hdHJpeCAqIHZlYzMoYVZlcnRleFBvc2l0aW9uLCAxLjApKS54eSwgMC4wLCAxLjApO1xcbiAgIHZUZXh0dXJlQ29vcmQgPSBhVGV4dHVyZUNvb3JkO1xcbiAgIHZDb2xvciA9IHZlYzQoYUNvbG9yLnJnYiAqIGFDb2xvci5hLCBhQ29sb3IuYSk7XFxuICAgdlJlc29sdXRpb24gPSByZXNvbHV0aW9uO1xcblxcbiAgIC8vY29tcHV0ZSB0aGUgdGV4dHVyZSBjb29yZHMgYW5kIHNlbmQgdGhlbSB0byB2YXJ5aW5nc1xcbiAgIHRleGNvb3JkcyhhVGV4dHVyZUNvb3JkICogcmVzb2x1dGlvbiwgcmVzb2x1dGlvbiwgdl9yZ2JOVywgdl9yZ2JORSwgdl9yZ2JTVywgdl9yZ2JTRSwgdl9yZ2JNKTtcXG59XFxuXCIsXG4gICAgICAgIC8vIGZyYWdtZW50IHNoYWRlclxuICAgICAgICBcInByZWNpc2lvbiBsb3dwIGZsb2F0O1xcblxcblxcbi8qKlxcbkJhc2ljIEZYQUEgaW1wbGVtZW50YXRpb24gYmFzZWQgb24gdGhlIGNvZGUgb24gZ2Vla3MzZC5jb20gd2l0aCB0aGVcXG5tb2RpZmljYXRpb24gdGhhdCB0aGUgdGV4dHVyZTJETG9kIHN0dWZmIHdhcyByZW1vdmVkIHNpbmNlIGl0J3NcXG51bnN1cHBvcnRlZCBieSBXZWJHTC5cXG5cXG4tLVxcblxcbkZyb206XFxuaHR0cHM6Ly9naXRodWIuY29tL21pdHN1aGlrby93ZWJnbC1tZWluY3JhZnRcXG5cXG5Db3B5cmlnaHQgKGMpIDIwMTEgYnkgQXJtaW4gUm9uYWNoZXIuXFxuXFxuU29tZSByaWdodHMgcmVzZXJ2ZWQuXFxuXFxuUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0XFxubW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZVxcbm1ldDpcXG5cXG4gICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodFxcbiAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci5cXG5cXG4gICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlXFxuICAgICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmdcXG4gICAgICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWRcXG4gICAgICB3aXRoIHRoZSBkaXN0cmlidXRpb24uXFxuXFxuICAgICogVGhlIG5hbWVzIG9mIHRoZSBjb250cmlidXRvcnMgbWF5IG5vdCBiZSB1c2VkIHRvIGVuZG9yc2Ugb3JcXG4gICAgICBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWNcXG4gICAgICBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uXFxuXFxuVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SU1xcblxcXCJBUyBJU1xcXCIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UXFxuTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SXFxuQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFRcXG5PV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCxcXG5TUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UXFxuTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsXFxuREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZXFxuVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVFxcbihJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRVxcbk9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuXFxuKi9cXG5cXG4jaWZuZGVmIEZYQUFfUkVEVUNFX01JTlxcbiAgICAjZGVmaW5lIEZYQUFfUkVEVUNFX01JTiAgICgxLjAvIDEyOC4wKVxcbiNlbmRpZlxcbiNpZm5kZWYgRlhBQV9SRURVQ0VfTVVMXFxuICAgICNkZWZpbmUgRlhBQV9SRURVQ0VfTVVMICAgKDEuMCAvIDguMClcXG4jZW5kaWZcXG4jaWZuZGVmIEZYQUFfU1BBTl9NQVhcXG4gICAgI2RlZmluZSBGWEFBX1NQQU5fTUFYICAgICA4LjBcXG4jZW5kaWZcXG5cXG4vL29wdGltaXplZCB2ZXJzaW9uIGZvciBtb2JpbGUsIHdoZXJlIGRlcGVuZGVudFxcbi8vdGV4dHVyZSByZWFkcyBjYW4gYmUgYSBib3R0bGVuZWNrXFxudmVjNCBmeGFhKHNhbXBsZXIyRCB0ZXgsIHZlYzIgZnJhZ0Nvb3JkLCB2ZWMyIHJlc29sdXRpb24sXFxuICAgICAgICAgICAgdmVjMiB2X3JnYk5XLCB2ZWMyIHZfcmdiTkUsXFxuICAgICAgICAgICAgdmVjMiB2X3JnYlNXLCB2ZWMyIHZfcmdiU0UsXFxuICAgICAgICAgICAgdmVjMiB2X3JnYk0pIHtcXG4gICAgdmVjNCBjb2xvcjtcXG4gICAgbWVkaXVtcCB2ZWMyIGludmVyc2VWUCA9IHZlYzIoMS4wIC8gcmVzb2x1dGlvbi54LCAxLjAgLyByZXNvbHV0aW9uLnkpO1xcbiAgICB2ZWMzIHJnYk5XID0gdGV4dHVyZTJEKHRleCwgdl9yZ2JOVykueHl6O1xcbiAgICB2ZWMzIHJnYk5FID0gdGV4dHVyZTJEKHRleCwgdl9yZ2JORSkueHl6O1xcbiAgICB2ZWMzIHJnYlNXID0gdGV4dHVyZTJEKHRleCwgdl9yZ2JTVykueHl6O1xcbiAgICB2ZWMzIHJnYlNFID0gdGV4dHVyZTJEKHRleCwgdl9yZ2JTRSkueHl6O1xcbiAgICB2ZWM0IHRleENvbG9yID0gdGV4dHVyZTJEKHRleCwgdl9yZ2JNKTtcXG4gICAgdmVjMyByZ2JNICA9IHRleENvbG9yLnh5ejtcXG4gICAgdmVjMyBsdW1hID0gdmVjMygwLjI5OSwgMC41ODcsIDAuMTE0KTtcXG4gICAgZmxvYXQgbHVtYU5XID0gZG90KHJnYk5XLCBsdW1hKTtcXG4gICAgZmxvYXQgbHVtYU5FID0gZG90KHJnYk5FLCBsdW1hKTtcXG4gICAgZmxvYXQgbHVtYVNXID0gZG90KHJnYlNXLCBsdW1hKTtcXG4gICAgZmxvYXQgbHVtYVNFID0gZG90KHJnYlNFLCBsdW1hKTtcXG4gICAgZmxvYXQgbHVtYU0gID0gZG90KHJnYk0sICBsdW1hKTtcXG4gICAgZmxvYXQgbHVtYU1pbiA9IG1pbihsdW1hTSwgbWluKG1pbihsdW1hTlcsIGx1bWFORSksIG1pbihsdW1hU1csIGx1bWFTRSkpKTtcXG4gICAgZmxvYXQgbHVtYU1heCA9IG1heChsdW1hTSwgbWF4KG1heChsdW1hTlcsIGx1bWFORSksIG1heChsdW1hU1csIGx1bWFTRSkpKTtcXG5cXG4gICAgbWVkaXVtcCB2ZWMyIGRpcjtcXG4gICAgZGlyLnggPSAtKChsdW1hTlcgKyBsdW1hTkUpIC0gKGx1bWFTVyArIGx1bWFTRSkpO1xcbiAgICBkaXIueSA9ICAoKGx1bWFOVyArIGx1bWFTVykgLSAobHVtYU5FICsgbHVtYVNFKSk7XFxuXFxuICAgIGZsb2F0IGRpclJlZHVjZSA9IG1heCgobHVtYU5XICsgbHVtYU5FICsgbHVtYVNXICsgbHVtYVNFKSAqXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAoMC4yNSAqIEZYQUFfUkVEVUNFX01VTCksIEZYQUFfUkVEVUNFX01JTik7XFxuXFxuICAgIGZsb2F0IHJjcERpck1pbiA9IDEuMCAvIChtaW4oYWJzKGRpci54KSwgYWJzKGRpci55KSkgKyBkaXJSZWR1Y2UpO1xcbiAgICBkaXIgPSBtaW4odmVjMihGWEFBX1NQQU5fTUFYLCBGWEFBX1NQQU5fTUFYKSxcXG4gICAgICAgICAgICAgIG1heCh2ZWMyKC1GWEFBX1NQQU5fTUFYLCAtRlhBQV9TUEFOX01BWCksXFxuICAgICAgICAgICAgICBkaXIgKiByY3BEaXJNaW4pKSAqIGludmVyc2VWUDtcXG5cXG4gICAgdmVjMyByZ2JBID0gMC41ICogKFxcbiAgICAgICAgdGV4dHVyZTJEKHRleCwgZnJhZ0Nvb3JkICogaW52ZXJzZVZQICsgZGlyICogKDEuMCAvIDMuMCAtIDAuNSkpLnh5eiArXFxuICAgICAgICB0ZXh0dXJlMkQodGV4LCBmcmFnQ29vcmQgKiBpbnZlcnNlVlAgKyBkaXIgKiAoMi4wIC8gMy4wIC0gMC41KSkueHl6KTtcXG4gICAgdmVjMyByZ2JCID0gcmdiQSAqIDAuNSArIDAuMjUgKiAoXFxuICAgICAgICB0ZXh0dXJlMkQodGV4LCBmcmFnQ29vcmQgKiBpbnZlcnNlVlAgKyBkaXIgKiAtMC41KS54eXogK1xcbiAgICAgICAgdGV4dHVyZTJEKHRleCwgZnJhZ0Nvb3JkICogaW52ZXJzZVZQICsgZGlyICogMC41KS54eXopO1xcblxcbiAgICBmbG9hdCBsdW1hQiA9IGRvdChyZ2JCLCBsdW1hKTtcXG4gICAgaWYgKChsdW1hQiA8IGx1bWFNaW4pIHx8IChsdW1hQiA+IGx1bWFNYXgpKVxcbiAgICAgICAgY29sb3IgPSB2ZWM0KHJnYkEsIHRleENvbG9yLmEpO1xcbiAgICBlbHNlXFxuICAgICAgICBjb2xvciA9IHZlYzQocmdiQiwgdGV4Q29sb3IuYSk7XFxuICAgIHJldHVybiBjb2xvcjtcXG59XFxuXFxuXFxudmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7XFxudmFyeWluZyB2ZWM0IHZDb2xvcjtcXG52YXJ5aW5nIHZlYzIgdlJlc29sdXRpb247XFxuXFxuLy90ZXhjb29yZHMgY29tcHV0ZWQgaW4gdmVydGV4IHN0ZXBcXG4vL3RvIGF2b2lkIGRlcGVuZGVudCB0ZXh0dXJlIHJlYWRzXFxudmFyeWluZyB2ZWMyIHZfcmdiTlc7XFxudmFyeWluZyB2ZWMyIHZfcmdiTkU7XFxudmFyeWluZyB2ZWMyIHZfcmdiU1c7XFxudmFyeWluZyB2ZWMyIHZfcmdiU0U7XFxudmFyeWluZyB2ZWMyIHZfcmdiTTtcXG5cXG51bmlmb3JtIHNhbXBsZXIyRCB1U2FtcGxlcjtcXG5cXG5cXG52b2lkIG1haW4odm9pZCl7XFxuXFxuICAgIGdsX0ZyYWdDb2xvciA9IGZ4YWEodVNhbXBsZXIsIHZUZXh0dXJlQ29vcmQgKiB2UmVzb2x1dGlvbiwgdlJlc29sdXRpb24sIHZfcmdiTlcsIHZfcmdiTkUsIHZfcmdiU1csIHZfcmdiU0UsIHZfcmdiTSk7XFxuXFxufVxcblwiLFxuICAgICAgICAvLyB1bmlmb3Jtc1xuICAgICAgICB7XG4gICAgICAgICAgICByZXNvbHV0aW9uOiB7IHR5cGU6ICd2MicsIHZhbHVlOiB7IHg6IDEsIHk6IDEgfSB9XG4gICAgICAgIH1cbiAgICApO1xuXG59XG5cbkZYQUFGaWx0ZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShBYnN0cmFjdEZpbHRlci5wcm90b3R5cGUpO1xuRlhBQUZpbHRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBGWEFBRmlsdGVyO1xubW9kdWxlLmV4cG9ydHMgPSBGWEFBRmlsdGVyO1xuXG4vKipcbiAqIEFwcGxpZXMgdGhlIGZpbHRlclxuICpcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5XZWJHTFJlbmRlcmVyfSBUaGUgcmVuZGVyZXIgdG8gcmV0cmlldmUgdGhlIGZpbHRlciBmcm9tXG4gKiBAcGFyYW0gaW5wdXQge1BJWEkuUmVuZGVyVGFyZ2V0fVxuICogQHBhcmFtIG91dHB1dCB7UElYSS5SZW5kZXJUYXJnZXR9XG4gKi9cbkZYQUFGaWx0ZXIucHJvdG90eXBlLmFwcGx5RmlsdGVyID0gZnVuY3Rpb24gKHJlbmRlcmVyLCBpbnB1dCwgb3V0cHV0KVxue1xuICAgIHZhciBmaWx0ZXJNYW5hZ2VyID0gcmVuZGVyZXIuZmlsdGVyTWFuYWdlcjtcblxuICAgIHZhciBzaGFkZXIgPSB0aGlzLmdldFNoYWRlciggcmVuZGVyZXIgKTtcbiAgICAgLy8gZHJhdyB0aGUgZmlsdGVyLi4uXG4gICAgZmlsdGVyTWFuYWdlci5hcHBseUZpbHRlcihzaGFkZXIsIGlucHV0LCBvdXRwdXQpO1xufTtcbiIsInZhciBBYnN0cmFjdEZpbHRlciA9IHJlcXVpcmUoJy4vQWJzdHJhY3RGaWx0ZXInKSxcbiAgICBtYXRoID0gIHJlcXVpcmUoJy4uLy4uLy4uL21hdGgnKTtcblxuLy8gQHNlZSBodHRwczovL2dpdGh1Yi5jb20vc3Vic3RhY2svYnJmcy9pc3N1ZXMvMjVcblxuXG4vKipcbiAqIFRoZSBTcHJpdGVNYXNrRmlsdGVyIGNsYXNzXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLkFic3RyYWN0RmlsdGVyXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIHNwcml0ZSB7UElYSS5TcHJpdGV9IHRoZSB0YXJnZXQgc3ByaXRlXG4gKi9cbmZ1bmN0aW9uIFNwcml0ZU1hc2tGaWx0ZXIoc3ByaXRlKVxue1xuICAgIHZhciBtYXNrTWF0cml4ID0gbmV3IG1hdGguTWF0cml4KCk7XG5cbiAgICBBYnN0cmFjdEZpbHRlci5jYWxsKHRoaXMsXG4gICAgICAgIFwiYXR0cmlidXRlIHZlYzIgYVZlcnRleFBvc2l0aW9uO1xcbmF0dHJpYnV0ZSB2ZWMyIGFUZXh0dXJlQ29vcmQ7XFxuYXR0cmlidXRlIHZlYzQgYUNvbG9yO1xcblxcbnVuaWZvcm0gbWF0MyBwcm9qZWN0aW9uTWF0cml4O1xcbnVuaWZvcm0gbWF0MyBvdGhlck1hdHJpeDtcXG5cXG52YXJ5aW5nIHZlYzIgdk1hc2tDb29yZDtcXG52YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDtcXG52YXJ5aW5nIHZlYzQgdkNvbG9yO1xcblxcbnZvaWQgbWFpbih2b2lkKVxcbntcXG4gICAgZ2xfUG9zaXRpb24gPSB2ZWM0KChwcm9qZWN0aW9uTWF0cml4ICogdmVjMyhhVmVydGV4UG9zaXRpb24sIDEuMCkpLnh5LCAwLjAsIDEuMCk7XFxuICAgIHZUZXh0dXJlQ29vcmQgPSBhVGV4dHVyZUNvb3JkO1xcbiAgICB2TWFza0Nvb3JkID0gKCBvdGhlck1hdHJpeCAqIHZlYzMoIGFUZXh0dXJlQ29vcmQsIDEuMCkgICkueHk7XFxuICAgIHZDb2xvciA9IHZlYzQoYUNvbG9yLnJnYiAqIGFDb2xvci5hLCBhQ29sb3IuYSk7XFxufVxcblwiLFxuICAgICAgICBcInByZWNpc2lvbiBsb3dwIGZsb2F0O1xcblxcbnZhcnlpbmcgdmVjMiB2TWFza0Nvb3JkO1xcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xcbnZhcnlpbmcgdmVjNCB2Q29sb3I7XFxuXFxudW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXI7XFxudW5pZm9ybSBmbG9hdCBhbHBoYTtcXG51bmlmb3JtIHNhbXBsZXIyRCBtYXNrO1xcblxcbnZvaWQgbWFpbih2b2lkKVxcbntcXG4gICAgLy8gY2hlY2sgY2xpcCEgdGhpcyB3aWxsIHN0b3AgdGhlIG1hc2sgYmxlZWRpbmcgb3V0IGZyb20gdGhlIGVkZ2VzXFxuICAgIHZlYzIgdGV4dCA9IGFicyggdk1hc2tDb29yZCAtIDAuNSApO1xcbiAgICB0ZXh0ID0gc3RlcCgwLjUsIHRleHQpO1xcbiAgICBmbG9hdCBjbGlwID0gMS4wIC0gbWF4KHRleHQueSwgdGV4dC54KTtcXG4gICAgdmVjNCBvcmlnaW5hbCA9IHRleHR1cmUyRCh1U2FtcGxlciwgdlRleHR1cmVDb29yZCk7XFxuICAgIHZlYzQgbWFza3kgPSB0ZXh0dXJlMkQobWFzaywgdk1hc2tDb29yZCk7XFxuICAgIG9yaWdpbmFsICo9IChtYXNreS5yICogbWFza3kuYSAqIGFscGhhICogY2xpcCk7XFxuICAgIGdsX0ZyYWdDb2xvciA9IG9yaWdpbmFsO1xcbn1cXG5cIixcbiAgICAgICAge1xuICAgICAgICAgICAgbWFzazogICAgICAgICAgIHsgdHlwZTogJ3NhbXBsZXIyRCcsIHZhbHVlOiBzcHJpdGUuX3RleHR1cmUgfSxcbiAgICAgICAgICAgIGFscGhhOiAgICAgICAgICB7IHR5cGU6ICdmJywgdmFsdWU6IDF9LFxuICAgICAgICAgICAgb3RoZXJNYXRyaXg6ICAgIHsgdHlwZTogJ21hdDMnLCB2YWx1ZTogbWFza01hdHJpeC50b0FycmF5KHRydWUpIH1cbiAgICAgICAgfVxuICAgICk7XG5cbiAgICB0aGlzLm1hc2tTcHJpdGUgPSBzcHJpdGU7XG4gICAgdGhpcy5tYXNrTWF0cml4ID0gbWFza01hdHJpeDtcbn1cblxuU3ByaXRlTWFza0ZpbHRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKEFic3RyYWN0RmlsdGVyLnByb3RvdHlwZSk7XG5TcHJpdGVNYXNrRmlsdGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFNwcml0ZU1hc2tGaWx0ZXI7XG5tb2R1bGUuZXhwb3J0cyA9IFNwcml0ZU1hc2tGaWx0ZXI7XG5cbi8qKlxuICogQXBwbGllcyB0aGUgZmlsdGVyXG4gKlxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLldlYkdMUmVuZGVyZXJ9IFRoZSByZW5kZXJlciB0byByZXRyaWV2ZSB0aGUgZmlsdGVyIGZyb21cbiAqIEBwYXJhbSBpbnB1dCB7UElYSS5SZW5kZXJUYXJnZXR9XG4gKiBAcGFyYW0gb3V0cHV0IHtQSVhJLlJlbmRlclRhcmdldH1cbiAqL1xuU3ByaXRlTWFza0ZpbHRlci5wcm90b3R5cGUuYXBwbHlGaWx0ZXIgPSBmdW5jdGlvbiAocmVuZGVyZXIsIGlucHV0LCBvdXRwdXQpXG57XG4gICAgdmFyIGZpbHRlck1hbmFnZXIgPSByZW5kZXJlci5maWx0ZXJNYW5hZ2VyO1xuXG4gICAgdGhpcy51bmlmb3Jtcy5tYXNrLnZhbHVlID0gdGhpcy5tYXNrU3ByaXRlLl90ZXh0dXJlO1xuXG4gICAgZmlsdGVyTWFuYWdlci5jYWxjdWxhdGVNYXBwZWRNYXRyaXgoaW5wdXQuZnJhbWUsIHRoaXMubWFza1Nwcml0ZSwgdGhpcy5tYXNrTWF0cml4KTtcblxuICAgIHRoaXMudW5pZm9ybXMub3RoZXJNYXRyaXgudmFsdWUgPSB0aGlzLm1hc2tNYXRyaXgudG9BcnJheSh0cnVlKTtcbiAgICB0aGlzLnVuaWZvcm1zLmFscGhhLnZhbHVlID0gdGhpcy5tYXNrU3ByaXRlLndvcmxkQWxwaGE7XG5cbiAgICB2YXIgc2hhZGVyID0gdGhpcy5nZXRTaGFkZXIocmVuZGVyZXIpO1xuICAgICAvLyBkcmF3IHRoZSBmaWx0ZXIuLi5cbiAgICBmaWx0ZXJNYW5hZ2VyLmFwcGx5RmlsdGVyKHNoYWRlciwgaW5wdXQsIG91dHB1dCk7XG59O1xuXG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKFNwcml0ZU1hc2tGaWx0ZXIucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogVGhlIHRleHR1cmUgdXNlZCBmb3IgdGhlIGRpc3BsYWNlbWVudCBtYXAuIE11c3QgYmUgcG93ZXIgb2YgMiBzaXplZCB0ZXh0dXJlLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5UZXh0dXJlfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLlNwcml0ZU1hc2tGaWx0ZXIjXG4gICAgICovXG4gICAgbWFwOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudW5pZm9ybXMubWFzay52YWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudW5pZm9ybXMubWFzay52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFRoZSBvZmZzZXQgdXNlZCB0byBtb3ZlIHRoZSBkaXNwbGFjZW1lbnQgbWFwLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5Qb2ludH1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5TcHJpdGVNYXNrRmlsdGVyI1xuICAgICAqL1xuICAgIG9mZnNldDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudW5pZm9ybXMub2Zmc2V0LnZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLm9mZnNldC52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfVxufSk7XG4iLCJ2YXIgV2ViR0xNYW5hZ2VyID0gcmVxdWlyZSgnLi9XZWJHTE1hbmFnZXInKTtcblxuLyoqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAZXh0ZW5kcyBQSVhJLldlYkdsTWFuYWdlclxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLldlYkdMUmVuZGVyZXJ9IFRoZSByZW5kZXJlciB0aGlzIG1hbmFnZXIgd29ya3MgZm9yLlxuICovXG5mdW5jdGlvbiBCbGVuZE1vZGVNYW5hZ2VyKHJlbmRlcmVyKVxue1xuICAgIFdlYkdMTWFuYWdlci5jYWxsKHRoaXMsIHJlbmRlcmVyKTtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLmN1cnJlbnRCbGVuZE1vZGUgPSA5OTk5OTtcbn1cblxuQmxlbmRNb2RlTWFuYWdlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFdlYkdMTWFuYWdlci5wcm90b3R5cGUpO1xuQmxlbmRNb2RlTWFuYWdlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBCbGVuZE1vZGVNYW5hZ2VyO1xubW9kdWxlLmV4cG9ydHMgPSBCbGVuZE1vZGVNYW5hZ2VyO1xuXG4vKipcbiAqIFNldHMtdXAgdGhlIGdpdmVuIGJsZW5kTW9kZSBmcm9tIFdlYkdMJ3MgcG9pbnQgb2Ygdmlldy5cbiAqXG4gKiBAcGFyYW0gYmxlbmRNb2RlIHtudW1iZXJ9IHRoZSBibGVuZE1vZGUsIHNob3VsZCBiZSBhIFBpeGkgY29uc3QsIHN1Y2ggYXMgYFBJWEkuQkxFTkRfTU9ERVMuQUREYC4gU2VlXG4gKiAge0BsaW5rIFBJWEkuQkxFTkRfTU9ERVN9IGZvciBwb3NzaWJsZSB2YWx1ZXMuXG4gKi9cbkJsZW5kTW9kZU1hbmFnZXIucHJvdG90eXBlLnNldEJsZW5kTW9kZSA9IGZ1bmN0aW9uIChibGVuZE1vZGUpXG57XG4gICAgaWYgKHRoaXMuY3VycmVudEJsZW5kTW9kZSA9PT0gYmxlbmRNb2RlKVxuICAgIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHRoaXMuY3VycmVudEJsZW5kTW9kZSA9IGJsZW5kTW9kZTtcblxuICAgIHZhciBtb2RlID0gdGhpcy5yZW5kZXJlci5ibGVuZE1vZGVzW3RoaXMuY3VycmVudEJsZW5kTW9kZV07XG4gICAgdGhpcy5yZW5kZXJlci5nbC5ibGVuZEZ1bmMobW9kZVswXSwgbW9kZVsxXSk7XG5cbiAgICByZXR1cm4gdHJ1ZTtcbn07XG4iLCJ2YXIgV2ViR0xNYW5hZ2VyID0gcmVxdWlyZSgnLi9XZWJHTE1hbmFnZXInKSxcbiAgICBSZW5kZXJUYXJnZXQgPSByZXF1aXJlKCcuLi91dGlscy9SZW5kZXJUYXJnZXQnKSxcbiAgICBDT05TVCA9IHJlcXVpcmUoJy4uLy4uLy4uL2NvbnN0JyksXG4gICAgUXVhZCA9IHJlcXVpcmUoJy4uL3V0aWxzL1F1YWQnKSxcbiAgICBtYXRoID0gIHJlcXVpcmUoJy4uLy4uLy4uL21hdGgnKTtcblxuLyoqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAZXh0ZW5kcyBQSVhJLldlYkdMTWFuYWdlclxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLldlYkdMUmVuZGVyZXJ9IFRoZSByZW5kZXJlciB0aGlzIG1hbmFnZXIgd29ya3MgZm9yLlxuICovXG5mdW5jdGlvbiBGaWx0ZXJNYW5hZ2VyKHJlbmRlcmVyKVxue1xuICAgIFdlYkdMTWFuYWdlci5jYWxsKHRoaXMsIHJlbmRlcmVyKTtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge29iamVjdFtdfVxuICAgICAqL1xuICAgIHRoaXMuZmlsdGVyU3RhY2sgPSBbXTtcblxuICAgIHRoaXMuZmlsdGVyU3RhY2sucHVzaCh7XG4gICAgICAgIHJlbmRlclRhcmdldDpyZW5kZXJlci5jdXJyZW50UmVuZGVyVGFyZ2V0LFxuICAgICAgICBmaWx0ZXI6W10sXG4gICAgICAgIGJvdW5kczpudWxsXG4gICAgfSk7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlJlbmRlclRhcmdldFtdfVxuICAgICAqL1xuICAgIHRoaXMudGV4dHVyZVBvb2wgPSBbXTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBzaXplIG9mIHRoZSB0ZXh0dXJlXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlJlY3RhbmdsZX1cbiAgICAgKi9cbiAgICAvLyBsaXN0ZW4gZm9yIGNvbnRleHQgYW5kIHVwZGF0ZSBuZWNlc3NhcnkgYnVmZmVyc1xuICAgIC8vVE9ETyBtYWtlIHRoaXMgZHluYW1pYyFcbiAgICAvL1RPRE8gdGVzdCB0aGlzIG91dCBieSBmb3JjZXMgcG93ZXIgb2YgdHdvP1xuICAgIHRoaXMudGV4dHVyZVNpemUgPSBuZXcgbWF0aC5SZWN0YW5nbGUoMCwgMCwgcmVuZGVyZXIud2lkdGgsIHJlbmRlcmVyLmhlaWdodCk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgY3VycmVudCBmcmFtZVxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5SZWN0YW5nbGV9XG4gICAgICovXG4gICAgdGhpcy5jdXJyZW50RnJhbWUgPSBudWxsO1xufVxuXG5GaWx0ZXJNYW5hZ2VyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoV2ViR0xNYW5hZ2VyLnByb3RvdHlwZSk7XG5GaWx0ZXJNYW5hZ2VyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IEZpbHRlck1hbmFnZXI7XG5tb2R1bGUuZXhwb3J0cyA9IEZpbHRlck1hbmFnZXI7XG5cblxuLyoqXG4gKiBDYWxsZWQgd2hlbiB0aGVyZSBpcyBhIFdlYkdMIGNvbnRleHQgY2hhbmdlLlxuICpcbiAqL1xuRmlsdGVyTWFuYWdlci5wcm90b3R5cGUub25Db250ZXh0Q2hhbmdlID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLnRleHR1cmVQb29sLmxlbmd0aCA9IDA7XG5cbiAgICB2YXIgZ2wgPSB0aGlzLnJlbmRlcmVyLmdsO1xuICAgIHRoaXMucXVhZCA9IG5ldyBRdWFkKGdsKTtcbn07XG5cbi8qKlxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLldlYkdMUmVuZGVyZXJ9XG4gKiBAcGFyYW0gYnVmZmVyIHtBcnJheUJ1ZmZlcn1cbiAqL1xuRmlsdGVyTWFuYWdlci5wcm90b3R5cGUuc2V0RmlsdGVyU3RhY2sgPSBmdW5jdGlvbiAoIGZpbHRlclN0YWNrIClcbntcbiAgICB0aGlzLmZpbHRlclN0YWNrID0gZmlsdGVyU3RhY2s7XG59O1xuXG4vKipcbiAqIEFwcGxpZXMgdGhlIGZpbHRlciBhbmQgYWRkcyBpdCB0byB0aGUgY3VycmVudCBmaWx0ZXIgc3RhY2suXG4gKlxuICogQHBhcmFtIHRhcmdldCB7UElYSS5EaXNwbGF5T2JqZWN0fVxuICogQHBhcmFtIGZpbHRlcnMge1BJWEkuQWJzdHJhY3RGaWxlcltdfSB0aGUgZmlsdGVycyB0aGF0IHdpbGwgYmUgcHVzaGVkIHRvIHRoZSBjdXJyZW50IGZpbHRlciBzdGFja1xuICovXG5GaWx0ZXJNYW5hZ2VyLnByb3RvdHlwZS5wdXNoRmlsdGVyID0gZnVuY3Rpb24gKHRhcmdldCwgZmlsdGVycylcbntcbiAgICAvLyBnZXQgdGhlIGJvdW5kcyBvZiB0aGUgb2JqZWN0Li5cbiAgICAvLyBUT0RPIHJlcGxhY2UgY2xvbmUgd2l0aCBhIGNvcHkgdG8gc2F2ZSBvYmplY3QgY3JlYXRpb25cbiAgICB2YXIgYm91bmRzID0gdGFyZ2V0LmZpbHRlckFyZWEgPyB0YXJnZXQuZmlsdGVyQXJlYS5jbG9uZSgpIDogdGFyZ2V0LmdldEJvdW5kcygpO1xuXG4gICAgLy9ib3VuZHMgPSBib3VuZHMuY2xvbmUoKTtcblxuICAgIC8vIHJvdW5kIG9mZiB0aGUgcmVjdGFuZ2xlIHRvIGdldCBhIG5pY2Ugc21vb29vb29vdGggZmlsdGVyIDopXG4gICAgYm91bmRzLnggPSBib3VuZHMueCB8IDA7XG4gICAgYm91bmRzLnkgPSBib3VuZHMueSB8IDA7XG4gICAgYm91bmRzLndpZHRoID0gYm91bmRzLndpZHRoIHwgMDtcbiAgICBib3VuZHMuaGVpZ2h0ID0gYm91bmRzLmhlaWdodCB8IDA7XG5cblxuICAgIC8vIHBhZGRpbmchXG4gICAgdmFyIHBhZGRpbmcgPSBmaWx0ZXJzWzBdLnBhZGRpbmcgfCAwO1xuICAgIGJvdW5kcy54IC09IHBhZGRpbmc7XG4gICAgYm91bmRzLnkgLT0gcGFkZGluZztcbiAgICBib3VuZHMud2lkdGggKz0gcGFkZGluZyAqIDI7XG4gICAgYm91bmRzLmhlaWdodCArPSBwYWRkaW5nICogMjtcblxuXG4gICAgaWYodGhpcy5yZW5kZXJlci5jdXJyZW50UmVuZGVyVGFyZ2V0LnRyYW5zZm9ybSlcbiAgICB7XG4gICAgICAgIC8vVE9ETyB0aGlzIHdpbGwgYnJlYWsgaWYgdGhlIHJlbmRlclRleHR1cmUgdHJhbnNmb3JtIGlzIGFueXRoaW5nIG90aGVyIHRoYW4gYSB0cmFuc2xhdGlvbi5cbiAgICAgICAgLy9XaWxsIG5lZWQgdG8gdGFrZSB0aGUgZnVsbCBtYXRyaXggdHJhbnNmb3JtIGludG8gYWNvdW50Li5cbiAgICAgICAgdmFyIHRyYW5zZm9ybSA9IHRoaXMucmVuZGVyZXIuY3VycmVudFJlbmRlclRhcmdldC50cmFuc2Zvcm07XG5cbiAgICAgICAgYm91bmRzLnggKz0gdHJhbnNmb3JtLnR4O1xuICAgICAgICBib3VuZHMueSArPSB0cmFuc2Zvcm0udHk7XG5cbiAgICAgICAgdGhpcy5jYXBGaWx0ZXJBcmVhKCBib3VuZHMgKTtcblxuICAgICAgICBib3VuZHMueCAtPSB0cmFuc2Zvcm0udHg7XG4gICAgICAgIGJvdW5kcy55IC09IHRyYW5zZm9ybS50eTtcbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgIHRoaXMuY2FwRmlsdGVyQXJlYSggYm91bmRzICk7XG4gICAgfVxuXG4gICAgaWYoYm91bmRzLndpZHRoID4gMCAmJiBib3VuZHMuaGVpZ2h0ID4gMClcbiAgICB7XG4gICAgICAgIHRoaXMuY3VycmVudEZyYW1lID0gYm91bmRzO1xuXG4gICAgICAgIHZhciB0ZXh0dXJlID0gdGhpcy5nZXRSZW5kZXJUYXJnZXQoKTtcblxuICAgICAgICB0aGlzLnJlbmRlcmVyLnNldFJlbmRlclRhcmdldCh0ZXh0dXJlKTtcblxuICAgICAgICAvLyBjbGVhciB0aGUgdGV4dHVyZS4uXG4gICAgICAgIHRleHR1cmUuY2xlYXIoKTtcblxuICAgICAgICAvLyBUT0RPIGdldCByaWQgb2Ygb2JqZWN0IGNyZWF0aW9uIVxuICAgICAgICB0aGlzLmZpbHRlclN0YWNrLnB1c2goe1xuICAgICAgICAgICAgcmVuZGVyVGFyZ2V0OiB0ZXh0dXJlLFxuICAgICAgICAgICAgZmlsdGVyOiBmaWx0ZXJzXG4gICAgICAgIH0pO1xuXG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIC8vIHB1c2ggc29tdGhpbmcgb24gdG8gdGhlIHN0YWNrIHRoYXQgaXMgZW1wdHlcbiAgICAgICAgdGhpcy5maWx0ZXJTdGFjay5wdXNoKHtcbiAgICAgICAgICAgIHJlbmRlclRhcmdldDogbnVsbCxcbiAgICAgICAgICAgIGZpbHRlcjogZmlsdGVyc1xuICAgICAgICB9KTtcbiAgICB9XG59O1xuXG5cbi8qKlxuICogUmVtb3ZlcyB0aGUgbGFzdCBmaWx0ZXIgZnJvbSB0aGUgZmlsdGVyIHN0YWNrIGFuZCByZXR1cm5zIGl0LlxuICpcbiAqL1xuRmlsdGVyTWFuYWdlci5wcm90b3R5cGUucG9wRmlsdGVyID0gZnVuY3Rpb24gKClcbntcbiAgICB2YXIgZmlsdGVyRGF0YSA9IHRoaXMuZmlsdGVyU3RhY2sucG9wKCk7XG4gICAgdmFyIHByZXZpb3VzRmlsdGVyRGF0YSA9IHRoaXMuZmlsdGVyU3RhY2tbdGhpcy5maWx0ZXJTdGFjay5sZW5ndGgtMV07XG5cbiAgICB2YXIgaW5wdXQgPSBmaWx0ZXJEYXRhLnJlbmRlclRhcmdldDtcblxuICAgIC8vIGlmIHRoZSByZW5kZXJUYXJnZXQgaXMgbnVsbCB0aGVuIHdlIGRvbid0IGFwcGx5IHRoZSBmaWx0ZXIgYXMgaXRzIG9mZnNjcmVlblxuICAgIGlmKCFmaWx0ZXJEYXRhLnJlbmRlclRhcmdldClcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB2YXIgb3V0cHV0ID0gcHJldmlvdXNGaWx0ZXJEYXRhLnJlbmRlclRhcmdldDtcblxuICAgIC8vIHVzZSBwcm9ncmFtXG4gICAgdmFyIGdsID0gdGhpcy5yZW5kZXJlci5nbDtcblxuXG4gICAgdGhpcy5jdXJyZW50RnJhbWUgPSBpbnB1dC5mcmFtZTtcblxuICAgIHRoaXMucXVhZC5tYXAodGhpcy50ZXh0dXJlU2l6ZSwgaW5wdXQuZnJhbWUpO1xuXG5cbiAgICAvLyBUT0RPLi4gdGhpcyBwcm9iYWJseSBvbmx5IG5lZWRzIHRvIGJlIGRvbmUgb25jZSFcbiAgICBnbC5iaW5kQnVmZmVyKGdsLkFSUkFZX0JVRkZFUiwgdGhpcy5xdWFkLnZlcnRleEJ1ZmZlcik7XG4gICAgZ2wuYmluZEJ1ZmZlcihnbC5FTEVNRU5UX0FSUkFZX0JVRkZFUiwgdGhpcy5xdWFkLmluZGV4QnVmZmVyKTtcblxuICAgIHZhciBmaWx0ZXJzID0gZmlsdGVyRGF0YS5maWx0ZXI7XG5cbiAgICAvLyBhc3N1bWluZyBhbGwgZmlsdGVycyBmb2xsb3cgdGhlIGNvcnJlY3QgZm9ybWF0Pz9cbiAgICBnbC52ZXJ0ZXhBdHRyaWJQb2ludGVyKHRoaXMucmVuZGVyZXIuc2hhZGVyTWFuYWdlci5kZWZhdWx0U2hhZGVyLmF0dHJpYnV0ZXMuYVZlcnRleFBvc2l0aW9uLCAyLCBnbC5GTE9BVCwgZmFsc2UsIDAsIDApO1xuICAgIGdsLnZlcnRleEF0dHJpYlBvaW50ZXIodGhpcy5yZW5kZXJlci5zaGFkZXJNYW5hZ2VyLmRlZmF1bHRTaGFkZXIuYXR0cmlidXRlcy5hVGV4dHVyZUNvb3JkLCAyLCBnbC5GTE9BVCwgZmFsc2UsIDAsIDIgKiA0ICogNCk7XG4gICAgZ2wudmVydGV4QXR0cmliUG9pbnRlcih0aGlzLnJlbmRlcmVyLnNoYWRlck1hbmFnZXIuZGVmYXVsdFNoYWRlci5hdHRyaWJ1dGVzLmFDb2xvciwgNCwgZ2wuRkxPQVQsIGZhbHNlLCAwLCA0ICogNCAqIDQpO1xuXG4gICAgLy8gcmVzdG9yZSB0aGUgbm9ybWFsIGJsZW5kbW9kZSFcbiAgICB0aGlzLnJlbmRlcmVyLmJsZW5kTW9kZU1hbmFnZXIuc2V0QmxlbmRNb2RlKENPTlNULkJMRU5EX01PREVTLk5PUk1BTCk7XG5cbiAgICBpZiAoZmlsdGVycy5sZW5ndGggPT09IDEpXG4gICAge1xuICAgICAgICAvLyBUT0RPIChjZW5nbGVyKSAtIFRoZXJlIGhhcyB0byBiZSBhIGJldHRlciB3YXkgdGhlbiBzZXR0aW5nIHRoaXMgZWFjaCB0aW1lP1xuICAgICAgICBpZiAoZmlsdGVyc1swXS51bmlmb3Jtcy5kaW1lbnNpb25zKVxuICAgICAgICB7XG4gICAgICAgICAgICBmaWx0ZXJzWzBdLnVuaWZvcm1zLmRpbWVuc2lvbnMudmFsdWVbMF0gPSB0aGlzLnJlbmRlcmVyLndpZHRoO1xuICAgICAgICAgICAgZmlsdGVyc1swXS51bmlmb3Jtcy5kaW1lbnNpb25zLnZhbHVlWzFdID0gdGhpcy5yZW5kZXJlci5oZWlnaHQ7XG4gICAgICAgICAgICBmaWx0ZXJzWzBdLnVuaWZvcm1zLmRpbWVuc2lvbnMudmFsdWVbMl0gPSB0aGlzLnF1YWQudmVydGljZXNbMF07XG4gICAgICAgICAgICBmaWx0ZXJzWzBdLnVuaWZvcm1zLmRpbWVuc2lvbnMudmFsdWVbM10gPSB0aGlzLnF1YWQudmVydGljZXNbNV07XG4gICAgICAgIH1cblxuICAgICAgICBmaWx0ZXJzWzBdLmFwcGx5RmlsdGVyKCB0aGlzLnJlbmRlcmVyLCBpbnB1dCwgb3V0cHV0ICk7XG4gICAgICAgIHRoaXMucmV0dXJuUmVuZGVyVGFyZ2V0KCBpbnB1dCApO1xuXG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHZhciBmbGlwVGV4dHVyZSA9IGlucHV0O1xuICAgICAgICB2YXIgZmxvcFRleHR1cmUgPSB0aGlzLmdldFJlbmRlclRhcmdldCh0cnVlKTtcblxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGZpbHRlcnMubGVuZ3RoLTE7IGkrKylcbiAgICAgICAge1xuICAgICAgICAgICAgdmFyIGZpbHRlciA9IGZpbHRlcnNbaV07XG5cbiAgICAgICAgICAgIC8vIFRPRE8gKGNlbmdsZXIpIC0gVGhlcmUgaGFzIHRvIGJlIGEgYmV0dGVyIHdheSB0aGVuIHNldHRpbmcgdGhpcyBlYWNoIHRpbWU/XG4gICAgICAgICAgICBpZiAoZmlsdGVyLnVuaWZvcm1zLmRpbWVuc2lvbnMpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgZmlsdGVyLnVuaWZvcm1zLmRpbWVuc2lvbnMudmFsdWVbMF0gPSB0aGlzLnJlbmRlcmVyLndpZHRoO1xuICAgICAgICAgICAgICAgIGZpbHRlci51bmlmb3Jtcy5kaW1lbnNpb25zLnZhbHVlWzFdID0gdGhpcy5yZW5kZXJlci5oZWlnaHQ7XG4gICAgICAgICAgICAgICAgZmlsdGVyLnVuaWZvcm1zLmRpbWVuc2lvbnMudmFsdWVbMl0gPSB0aGlzLnF1YWQudmVydGljZXNbMF07XG4gICAgICAgICAgICAgICAgZmlsdGVyLnVuaWZvcm1zLmRpbWVuc2lvbnMudmFsdWVbM10gPSB0aGlzLnF1YWQudmVydGljZXNbNV07XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGZpbHRlci5hcHBseUZpbHRlciggdGhpcy5yZW5kZXJlciwgZmxpcFRleHR1cmUsIGZsb3BUZXh0dXJlICk7XG5cbiAgICAgICAgICAgIHZhciB0ZW1wID0gZmxpcFRleHR1cmU7XG4gICAgICAgICAgICBmbGlwVGV4dHVyZSA9IGZsb3BUZXh0dXJlO1xuICAgICAgICAgICAgZmxvcFRleHR1cmUgPSB0ZW1wO1xuICAgICAgICB9XG5cbiAgICAgICAgZmlsdGVyc1tmaWx0ZXJzLmxlbmd0aC0xXS5hcHBseUZpbHRlciggdGhpcy5yZW5kZXJlciwgZmxpcFRleHR1cmUsIG91dHB1dCApO1xuXG4gICAgICAgIHRoaXMucmV0dXJuUmVuZGVyVGFyZ2V0KCBmbGlwVGV4dHVyZSApO1xuICAgICAgICB0aGlzLnJldHVyblJlbmRlclRhcmdldCggZmxvcFRleHR1cmUgKTtcbiAgICB9XG5cbiAgICByZXR1cm4gZmlsdGVyRGF0YS5maWx0ZXI7XG59O1xuXG4vKipcbiAqIEdyYWJzIGFuIHJlbmRlciB0YXJnZXQgZnJvbSB0aGUgaW50ZXJuYWwgcG9vbFxuICpcbiAqIEBwYXJhbSBjbGVhciB7Ym9vbGVhbn0gV2hldGhlciBvciBub3Qgd2UgbmVlZCB0byBjbGVhciB0aGUgUmVuZGVyVGFyZ2V0XG4gKiBAcmV0dXJuIHtSZW5kZXJUYXJnZXR9XG4gKi9cbkZpbHRlck1hbmFnZXIucHJvdG90eXBlLmdldFJlbmRlclRhcmdldCA9IGZ1bmN0aW9uICggY2xlYXIgKVxue1xuICAgIHZhciByZW5kZXJUYXJnZXQgPSB0aGlzLnRleHR1cmVQb29sLnBvcCgpIHx8IG5ldyBSZW5kZXJUYXJnZXQodGhpcy5yZW5kZXJlci5nbCwgdGhpcy50ZXh0dXJlU2l6ZS53aWR0aCwgdGhpcy50ZXh0dXJlU2l6ZS5oZWlnaHQsIENPTlNULlNDQUxFX01PREVTLkxJTkVBUiwgdGhpcy5yZW5kZXJlci5yZXNvbHV0aW9uICogQ09OU1QuRklMVEVSX1JFU09MVVRJT04pO1xuICAgIHJlbmRlclRhcmdldC5mcmFtZSA9IHRoaXMuY3VycmVudEZyYW1lO1xuXG4gICAgaWYgKGNsZWFyKVxuICAgIHtcbiAgICAgICAgcmVuZGVyVGFyZ2V0LmNsZWFyKHRydWUpO1xuICAgIH1cblxuICAgIHJldHVybiByZW5kZXJUYXJnZXQ7XG59O1xuXG4vKlxuICogUmV0dXJucyBhIFJlbmRlclRhcmdldCB0byB0aGUgaW50ZXJuYWwgcG9vbFxuICogQHBhcmFtIHJlbmRlclRhcmdldCB7UmVuZGVyVGFyZ2V0fSBUaGUgUmVuZGVyVGFyZ2V0IHdlIHdhbnQgdG8gcmV0dXJuIHRvIHRoZSBwb29sXG4gKi9cbkZpbHRlck1hbmFnZXIucHJvdG90eXBlLnJldHVyblJlbmRlclRhcmdldCA9IGZ1bmN0aW9uIChyZW5kZXJUYXJnZXQpXG57XG4gICAgdGhpcy50ZXh0dXJlUG9vbC5wdXNoKCByZW5kZXJUYXJnZXQgKTtcbn07XG5cbi8qXG4gKiBBcHBsaWVzIHRoZSBmaWx0ZXJcbiAqIEBwYXJhbSBzaGFkZXIge1NoYWRlcn0gVGhlIHNoYWRlciB0byB1cGxvYWRcbiAqIEBwYXJhbSBpbnB1dFRhcmdldCB7UmVuZGVyVGFyZ2V0fVxuICogQHBhcmFtIG91dHB1dFRhcmdldCB7UmVuZGVyVGFyZ2V0fVxuICogQHBhcmFtIGNsZWFyIHtib29sZWFufSBXaGV0aGVyIG9yIG5vdCB3ZSB3YW50IHRvIGNsZWFyIHRoZSBvdXRwdXRUYXJnZXRcbiAqL1xuRmlsdGVyTWFuYWdlci5wcm90b3R5cGUuYXBwbHlGaWx0ZXIgPSBmdW5jdGlvbiAoc2hhZGVyLCBpbnB1dFRhcmdldCwgb3V0cHV0VGFyZ2V0LCBjbGVhcilcbntcbiAgICB2YXIgZ2wgPSB0aGlzLnJlbmRlcmVyLmdsO1xuXG4gICAgdGhpcy5yZW5kZXJlci5zZXRSZW5kZXJUYXJnZXQob3V0cHV0VGFyZ2V0KTtcblxuICAgIGlmIChjbGVhcilcbiAgICB7XG4gICAgICAgIG91dHB1dFRhcmdldC5jbGVhcigpO1xuICAgIH1cblxuICAgIC8vIHNldCB0aGUgc2hhZGVyXG4gICAgdGhpcy5yZW5kZXJlci5zaGFkZXJNYW5hZ2VyLnNldFNoYWRlcihzaGFkZXIpO1xuXG4gICAgLy8gVE9ETyAoY2VuZ2xlcikgLSBDYW4gdGhpcyBiZSBjYWNoZWQgYW5kIG5vdCBgdG9BcnJheWBlZCBlYWNoIGZyYW1lP1xuICAgIHNoYWRlci51bmlmb3Jtcy5wcm9qZWN0aW9uTWF0cml4LnZhbHVlID0gdGhpcy5yZW5kZXJlci5jdXJyZW50UmVuZGVyVGFyZ2V0LnByb2plY3Rpb25NYXRyaXgudG9BcnJheSh0cnVlKTtcblxuICAgIC8vVE9ETyBjYW4gdGhpcyBiZSBvcHRpbWlzZWQ/XG4gICAgc2hhZGVyLnN5bmNVbmlmb3JtcygpO1xuLypcbiAgICBnbC52ZXJ0ZXhBdHRyaWJQb2ludGVyKHNoYWRlci5hdHRyaWJ1dGVzLmFWZXJ0ZXhQb3NpdGlvbiwgMiwgZ2wuRkxPQVQsIGZhbHNlLCAwLCAwKTtcbiAgICBnbC52ZXJ0ZXhBdHRyaWJQb2ludGVyKHNoYWRlci5hdHRyaWJ1dGVzLmFUZXh0dXJlQ29vcmQsIDIsIGdsLkZMT0FULCBmYWxzZSwgMCwgMiAqIDQgKiA0KTtcbiAgICBnbC52ZXJ0ZXhBdHRyaWJQb2ludGVyKHNoYWRlci5hdHRyaWJ1dGVzLmFDb2xvciwgNCwgZ2wuRkxPQVQsIGZhbHNlLCAwLCA0ICogNCAqIDQpO1xuKi9cblxuICAgIGdsLmFjdGl2ZVRleHR1cmUoZ2wuVEVYVFVSRTApO1xuICAgIGdsLmJpbmRUZXh0dXJlKGdsLlRFWFRVUkVfMkQsIGlucHV0VGFyZ2V0LnRleHR1cmUpO1xuXG4gICAgZ2wuZHJhd0VsZW1lbnRzKGdsLlRSSUFOR0xFUywgNiwgZ2wuVU5TSUdORURfU0hPUlQsIDAgKTtcbiAgICB0aGlzLnJlbmRlcmVyLmRyYXdDb3VudCsrO1xufTtcblxuLypcbiAqIENhbGN1bGF0ZXMgdGhlIG1hcHBlZCBtYXRyaXhcbiAqIEBwYXJhbSBmaWx0ZXJBcmVhIHtSZWN0YW5nbGV9IFRoZSBmaWx0ZXIgYXJlYVxuICogQHBhcmFtIHNwcml0ZSB7U3ByaXRlfSB0aGUgdGFyZ2V0IHNwcml0ZVxuICogQHBhcmFtIG91dHB1dE1hdHJpeCB7TWF0cml4fSBAYWx2aW5cbiAqL1xuLy8gVE9ETyBwbGF5aW5nIGFyb3VuZCBoZXJlLi4gdGhpcyBpcyB0ZW1wb3JhcnkgLSAod2lsbCBlbmQgdXAgaW4gdGhlIHNoYWRlcilcbkZpbHRlck1hbmFnZXIucHJvdG90eXBlLmNhbGN1bGF0ZU1hcHBlZE1hdHJpeCA9IGZ1bmN0aW9uIChmaWx0ZXJBcmVhLCBzcHJpdGUsIG91dHB1dE1hdHJpeClcbntcbiAgICB2YXIgd29ybGRUcmFuc2Zvcm0gPSBzcHJpdGUud29ybGRUcmFuc2Zvcm0uY29weShtYXRoLk1hdHJpeC5URU1QX01BVFJJWCksXG4gICAgdGV4dHVyZSA9IHNwcml0ZS5fdGV4dHVyZS5iYXNlVGV4dHVyZTtcblxuICAgIHZhciBtYXBwZWRNYXRyaXggPSBvdXRwdXRNYXRyaXguaWRlbnRpdHkoKTtcblxuICAgIC8vIHNjYWxlLi5cbiAgICB2YXIgcmF0aW8gPSB0aGlzLnRleHR1cmVTaXplLmhlaWdodCAvIHRoaXMudGV4dHVyZVNpemUud2lkdGg7XG5cbiAgICBtYXBwZWRNYXRyaXgudHJhbnNsYXRlKGZpbHRlckFyZWEueCAvIHRoaXMudGV4dHVyZVNpemUud2lkdGgsIGZpbHRlckFyZWEueSAvIHRoaXMudGV4dHVyZVNpemUuaGVpZ2h0ICk7XG5cbiAgICBtYXBwZWRNYXRyaXguc2NhbGUoMSAsIHJhdGlvKTtcblxuICAgIHZhciB0cmFuc2xhdGVTY2FsZVggPSAodGhpcy50ZXh0dXJlU2l6ZS53aWR0aCAvIHRleHR1cmUud2lkdGgpO1xuICAgIHZhciB0cmFuc2xhdGVTY2FsZVkgPSAodGhpcy50ZXh0dXJlU2l6ZS5oZWlnaHQgLyB0ZXh0dXJlLmhlaWdodCk7XG5cbiAgICB3b3JsZFRyYW5zZm9ybS50eCAvPSB0ZXh0dXJlLndpZHRoICogdHJhbnNsYXRlU2NhbGVYO1xuICAgIHdvcmxkVHJhbnNmb3JtLnR5IC89IHRleHR1cmUud2lkdGggKiB0cmFuc2xhdGVTY2FsZVg7XG5cbiAgICB3b3JsZFRyYW5zZm9ybS5pbnZlcnQoKTtcblxuICAgIG1hcHBlZE1hdHJpeC5wcmVwZW5kKHdvcmxkVHJhbnNmb3JtKTtcblxuICAgIC8vIGFwcGx5IGludmVyc2Ugc2NhbGUuLlxuICAgIG1hcHBlZE1hdHJpeC5zY2FsZSgxICwgMS9yYXRpbyk7XG5cbiAgICBtYXBwZWRNYXRyaXguc2NhbGUoIHRyYW5zbGF0ZVNjYWxlWCAsIHRyYW5zbGF0ZVNjYWxlWSApO1xuXG4gICAgbWFwcGVkTWF0cml4LnRyYW5zbGF0ZShzcHJpdGUuYW5jaG9yLngsIHNwcml0ZS5hbmNob3IueSk7XG5cbiAgICByZXR1cm4gbWFwcGVkTWF0cml4O1xuXG4gICAgLy8gS2VlcGluZyB0aGUgb3JnaW5hbCBhcyBhIHJlbWluZGVyIHRvIG1lIG9uIGhvdyB0aGlzIHdvcmtzIVxuICAgIC8vXG4gICAgLy8gdmFyIG0gPSBuZXcgbWF0aC5NYXRyaXgoKTtcblxuICAgIC8vIC8vIHNjYWxlLi5cbiAgICAvLyB2YXIgcmF0aW8gPSB0aGlzLnRleHR1cmVTaXplLmhlaWdodCAvIHRoaXMudGV4dHVyZVNpemUud2lkdGg7XG5cbiAgICAvLyBtLnRyYW5zbGF0ZShmaWx0ZXJBcmVhLnggLyB0aGlzLnRleHR1cmVTaXplLndpZHRoLCBmaWx0ZXJBcmVhLnkgLyB0aGlzLnRleHR1cmVTaXplLmhlaWdodCk7XG5cblxuICAgIC8vIG0uc2NhbGUoMSAsIHJhdGlvKTtcblxuXG4gICAgLy8gdmFyIHRyYW5zZm9ybSA9IHd0LmNsb25lKCk7XG5cbiAgICAvLyB2YXIgdHJhbnNsYXRlU2NhbGVYID0gKHRoaXMudGV4dHVyZVNpemUud2lkdGggLyA2MjApO1xuICAgIC8vIHZhciB0cmFuc2xhdGVTY2FsZVkgPSAodGhpcy50ZXh0dXJlU2l6ZS5oZWlnaHQgLyAzODApO1xuXG4gICAgLy8gdHJhbnNmb3JtLnR4IC89IDYyMCAqIHRyYW5zbGF0ZVNjYWxlWDtcbiAgICAvLyB0cmFuc2Zvcm0udHkgLz0gNjIwICogdHJhbnNsYXRlU2NhbGVYO1xuXG4gICAgLy8gdHJhbnNmb3JtLmludmVydCgpO1xuXG4gICAgLy8gdHJhbnNmb3JtLmFwcGVuZChtKTtcblxuICAgIC8vIC8vIGFwcGx5IGludmVyc2Ugc2NhbGUuLlxuICAgIC8vIHRyYW5zZm9ybS5zY2FsZSgxICwgMS9yYXRpbyk7XG5cbiAgICAvLyB0cmFuc2Zvcm0uc2NhbGUoIHRyYW5zbGF0ZVNjYWxlWCAsIHRyYW5zbGF0ZVNjYWxlWSApO1xuXG4gICAgLy8gcmV0dXJuIHRyYW5zZm9ybTtcbn07XG5cbi8qXG4gKiBDb25zdHJhaW5zIHRoZSBmaWx0ZXIgYXJlYSB0byB0aGUgdGV4dHVyZSBzaXplXG4gKiBAcGFyYW0gZmlsdGVyQXJlYSB7UmVjdGFuZ2xlfSBUaGUgZmlsdGVyIGFyZWEgd2Ugd2FudCB0byBjYXBcbiAqL1xuRmlsdGVyTWFuYWdlci5wcm90b3R5cGUuY2FwRmlsdGVyQXJlYSA9IGZ1bmN0aW9uIChmaWx0ZXJBcmVhKVxue1xuICAgIGlmIChmaWx0ZXJBcmVhLnggPCAwKVxuICAgIHtcbiAgICAgICAgZmlsdGVyQXJlYS53aWR0aCArPSBmaWx0ZXJBcmVhLng7XG4gICAgICAgIGZpbHRlckFyZWEueCA9IDA7XG4gICAgfVxuXG4gICAgaWYgKGZpbHRlckFyZWEueSA8IDApXG4gICAge1xuICAgICAgICBmaWx0ZXJBcmVhLmhlaWdodCArPSBmaWx0ZXJBcmVhLnk7XG4gICAgICAgIGZpbHRlckFyZWEueSA9IDA7XG4gICAgfVxuXG4gICAgaWYgKCBmaWx0ZXJBcmVhLnggKyBmaWx0ZXJBcmVhLndpZHRoID4gdGhpcy50ZXh0dXJlU2l6ZS53aWR0aCApXG4gICAge1xuICAgICAgICBmaWx0ZXJBcmVhLndpZHRoID0gdGhpcy50ZXh0dXJlU2l6ZS53aWR0aCAtIGZpbHRlckFyZWEueDtcbiAgICB9XG5cbiAgICBpZiAoIGZpbHRlckFyZWEueSArIGZpbHRlckFyZWEuaGVpZ2h0ID4gdGhpcy50ZXh0dXJlU2l6ZS5oZWlnaHQgKVxuICAgIHtcbiAgICAgICAgZmlsdGVyQXJlYS5oZWlnaHQgPSB0aGlzLnRleHR1cmVTaXplLmhlaWdodCAtIGZpbHRlckFyZWEueTtcbiAgICB9XG59O1xuXG4vKlxuICogUmVzaXplcyBhbGwgdGhlIHJlbmRlciB0YXJnZXRzIGluIHRoZSBwb29sXG4gKiBAcGFyYW0gd2lkdGgge251bWJlcn0gdGhlIG5ldyB3aWR0aFxuICogQHBhcmFtIGhlaWdodCB7bnVtYmVyfSB0aGUgbmV3IGhlaWdodFxuICovXG5GaWx0ZXJNYW5hZ2VyLnByb3RvdHlwZS5yZXNpemUgPSBmdW5jdGlvbiAoIHdpZHRoLCBoZWlnaHQgKVxue1xuICAgIHRoaXMudGV4dHVyZVNpemUud2lkdGggPSB3aWR0aDtcbiAgICB0aGlzLnRleHR1cmVTaXplLmhlaWdodCA9IGhlaWdodDtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy50ZXh0dXJlUG9vbC5sZW5ndGg7IGkrKylcbiAgICB7XG4gICAgICAgIHRoaXMudGV4dHVyZVBvb2xbaV0ucmVzaXplKCB3aWR0aCwgaGVpZ2h0ICk7XG4gICAgfVxufTtcblxuLyoqXG4gKiBEZXN0cm95cyB0aGUgZmlsdGVyIGFuZCByZW1vdmVzIGl0IGZyb20gdGhlIGZpbHRlciBzdGFjay5cbiAqXG4gKi9cbkZpbHRlck1hbmFnZXIucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoKVxue1xuICAgIHRoaXMucXVhZC5kZXN0cm95KCk7XG4gICAgXG4gICAgV2ViR0xNYW5hZ2VyLnByb3RvdHlwZS5kZXN0cm95LmNhbGwodGhpcyk7XG4gICAgXG4gICAgdGhpcy5maWx0ZXJTdGFjayA9IG51bGw7XG4gICAgdGhpcy5vZmZzZXRZID0gMDtcblxuICAgIC8vIGRlc3Ryb3kgdGV4dHVyZXNcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMudGV4dHVyZVBvb2wubGVuZ3RoOyBpKyspXG4gICAge1xuICAgICAgICB0aGlzLnRleHR1cmVQb29sW2ldLmRlc3Ryb3koKTtcbiAgICB9XG5cbiAgICB0aGlzLnRleHR1cmVQb29sID0gbnVsbDtcbn07XG4iLCJ2YXIgV2ViR0xNYW5hZ2VyID0gcmVxdWlyZSgnLi9XZWJHTE1hbmFnZXInKSxcbiAgICBBbHBoYU1hc2tGaWx0ZXIgPSByZXF1aXJlKCcuLi9maWx0ZXJzL1Nwcml0ZU1hc2tGaWx0ZXInKTtcblxuLyoqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcn0gVGhlIHJlbmRlcmVyIHRoaXMgbWFuYWdlciB3b3JrcyBmb3IuXG4gKi9cbmZ1bmN0aW9uIE1hc2tNYW5hZ2VyKHJlbmRlcmVyKVxue1xuICAgIFdlYkdMTWFuYWdlci5jYWxsKHRoaXMsIHJlbmRlcmVyKTtcblxuICAgIHRoaXMuc3RlbmNpbFN0YWNrID0gW107XG4gICAgdGhpcy5yZXZlcnNlID0gdHJ1ZTtcbiAgICB0aGlzLmNvdW50ID0gMDtcblxuICAgIHRoaXMuYWxwaGFNYXNrUG9vbCA9IFtdO1xufVxuXG5NYXNrTWFuYWdlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFdlYkdMTWFuYWdlci5wcm90b3R5cGUpO1xuTWFza01hbmFnZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gTWFza01hbmFnZXI7XG5tb2R1bGUuZXhwb3J0cyA9IE1hc2tNYW5hZ2VyO1xuXG4vKipcbiAqIEFwcGxpZXMgdGhlIE1hc2sgYW5kIGFkZHMgaXQgdG8gdGhlIGN1cnJlbnQgZmlsdGVyIHN0YWNrLlxuICpcbiAqIEBwYXJhbSBncmFwaGljcyB7UElYSS5HcmFwaGljc31cbiAqIEBwYXJhbSB3ZWJHTERhdGEge2FueVtdfVxuICovXG5NYXNrTWFuYWdlci5wcm90b3R5cGUucHVzaE1hc2sgPSBmdW5jdGlvbiAodGFyZ2V0LCBtYXNrRGF0YSlcbntcbiAgICBpZiAobWFza0RhdGEudGV4dHVyZSlcbiAgICB7XG4gICAgICAgIHRoaXMucHVzaFNwcml0ZU1hc2sodGFyZ2V0LCBtYXNrRGF0YSk7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHRoaXMucHVzaFN0ZW5jaWxNYXNrKHRhcmdldCwgbWFza0RhdGEpO1xuICAgIH1cblxufTtcblxuLyoqXG4gKiBSZW1vdmVzIHRoZSBsYXN0IG1hc2sgZnJvbSB0aGUgbWFzayBzdGFjayBhbmQgZG9lc24ndCByZXR1cm4gaXQuXG4gKlxuICogQHBhcmFtIHRhcmdldCB7UElYSS5SZW5kZXJUYXJnZXR9XG4gKiBAcGFyYW0gbWFza0RhdGEge2FueVtdfVxuICovXG5NYXNrTWFuYWdlci5wcm90b3R5cGUucG9wTWFzayA9IGZ1bmN0aW9uICh0YXJnZXQsIG1hc2tEYXRhKVxue1xuICAgIGlmIChtYXNrRGF0YS50ZXh0dXJlKVxuICAgIHtcbiAgICAgICAgdGhpcy5wb3BTcHJpdGVNYXNrKHRhcmdldCwgbWFza0RhdGEpO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICB0aGlzLnBvcFN0ZW5jaWxNYXNrKHRhcmdldCwgbWFza0RhdGEpO1xuICAgIH1cbn07XG5cbi8qKlxuICogQXBwbGllcyB0aGUgTWFzayBhbmQgYWRkcyBpdCB0byB0aGUgY3VycmVudCBmaWx0ZXIgc3RhY2suXG4gKlxuICogQHBhcmFtIHRhcmdldCB7UElYSS5SZW5kZXJUYXJnZXR9XG4gKiBAcGFyYW0gbWFza0RhdGEge2FueVtdfVxuICovXG5NYXNrTWFuYWdlci5wcm90b3R5cGUucHVzaFNwcml0ZU1hc2sgPSBmdW5jdGlvbiAodGFyZ2V0LCBtYXNrRGF0YSlcbntcbiAgICB2YXIgYWxwaGFNYXNrRmlsdGVyID0gdGhpcy5hbHBoYU1hc2tQb29sLnBvcCgpO1xuXG4gICAgaWYgKCFhbHBoYU1hc2tGaWx0ZXIpXG4gICAge1xuICAgICAgICBhbHBoYU1hc2tGaWx0ZXIgPSBbbmV3IEFscGhhTWFza0ZpbHRlcihtYXNrRGF0YSldO1xuICAgIH1cblxuICAgIGFscGhhTWFza0ZpbHRlclswXS5tYXNrU3ByaXRlID0gbWFza0RhdGE7XG4gICAgdGhpcy5yZW5kZXJlci5maWx0ZXJNYW5hZ2VyLnB1c2hGaWx0ZXIodGFyZ2V0LCBhbHBoYU1hc2tGaWx0ZXIpO1xufTtcblxuLyoqXG4gKiBSZW1vdmVzIHRoZSBsYXN0IGZpbHRlciBmcm9tIHRoZSBmaWx0ZXIgc3RhY2sgYW5kIGRvZXNuJ3QgcmV0dXJuIGl0LlxuICpcbiAqL1xuTWFza01hbmFnZXIucHJvdG90eXBlLnBvcFNwcml0ZU1hc2sgPSBmdW5jdGlvbiAoKVxue1xuICAgIHZhciBmaWx0ZXJzID0gdGhpcy5yZW5kZXJlci5maWx0ZXJNYW5hZ2VyLnBvcEZpbHRlcigpO1xuXG4gICAgdGhpcy5hbHBoYU1hc2tQb29sLnB1c2goZmlsdGVycyk7XG59O1xuXG5cbi8qKlxuICogQXBwbGllcyB0aGUgTWFzayBhbmQgYWRkcyBpdCB0byB0aGUgY3VycmVudCBmaWx0ZXIgc3RhY2suXG4gKlxuICogQHBhcmFtIHRhcmdldCB7UElYSS5SZW5kZXJUYXJnZXR9XG4gKiBAcGFyYW0gbWFza0RhdGEge2FueVtdfVxuICovXG5NYXNrTWFuYWdlci5wcm90b3R5cGUucHVzaFN0ZW5jaWxNYXNrID0gZnVuY3Rpb24gKHRhcmdldCwgbWFza0RhdGEpXG57XG4gICAgdGhpcy5yZW5kZXJlci5zdGVuY2lsTWFuYWdlci5wdXNoTWFzayhtYXNrRGF0YSk7XG59O1xuXG4vKipcbiAqIFJlbW92ZXMgdGhlIGxhc3QgZmlsdGVyIGZyb20gdGhlIGZpbHRlciBzdGFjayBhbmQgZG9lc24ndCByZXR1cm4gaXQuXG4gKlxuICogQHBhcmFtIHRhcmdldCB7UElYSS5SZW5kZXJUYXJnZXR9XG4gKiBAcGFyYW0gbWFza0RhdGEge2FueVtdfVxuICovXG5NYXNrTWFuYWdlci5wcm90b3R5cGUucG9wU3RlbmNpbE1hc2sgPSBmdW5jdGlvbiAodGFyZ2V0LCBtYXNrRGF0YSlcbntcbiAgICB0aGlzLnJlbmRlcmVyLnN0ZW5jaWxNYW5hZ2VyLnBvcE1hc2sobWFza0RhdGEpO1xufTtcblxuIiwidmFyIFdlYkdMTWFuYWdlciA9IHJlcXVpcmUoJy4vV2ViR0xNYW5hZ2VyJyksXG4gICAgVGV4dHVyZVNoYWRlciA9IHJlcXVpcmUoJy4uL3NoYWRlcnMvVGV4dHVyZVNoYWRlcicpLFxuICAgIENvbXBsZXhQcmltaXRpdmVTaGFkZXIgPSByZXF1aXJlKCcuLi9zaGFkZXJzL0NvbXBsZXhQcmltaXRpdmVTaGFkZXInKSxcbiAgICBQcmltaXRpdmVTaGFkZXIgPSByZXF1aXJlKCcuLi9zaGFkZXJzL1ByaW1pdGl2ZVNoYWRlcicpLFxuICAgIHV0aWxzID0gcmVxdWlyZSgnLi4vLi4vLi4vdXRpbHMnKTtcblxuLyoqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAZXh0ZW5kcyBQSVhJLldlYkdMTWFuYWdlclxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLldlYkdMUmVuZGVyZXJ9IFRoZSByZW5kZXJlciB0aGlzIG1hbmFnZXIgd29ya3MgZm9yLlxuICovXG5mdW5jdGlvbiBTaGFkZXJNYW5hZ2VyKHJlbmRlcmVyKVxue1xuICAgIFdlYkdMTWFuYWdlci5jYWxsKHRoaXMsIHJlbmRlcmVyKTtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLm1heEF0dGlicyA9IDEwO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7YW55W119XG4gICAgICovXG4gICAgdGhpcy5hdHRyaWJTdGF0ZSA9IFtdO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7YW55W119XG4gICAgICovXG4gICAgdGhpcy50ZW1wQXR0cmliU3RhdGUgPSBbXTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5tYXhBdHRpYnM7IGkrKylcbiAgICB7XG4gICAgICAgIHRoaXMuYXR0cmliU3RhdGVbaV0gPSBmYWxzZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHthbnlbXX1cbiAgICAgKi9cbiAgICB0aGlzLnN0YWNrID0gW107XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9jdXJyZW50SWQgPSAtMTtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge1BJWEkuU2hhZGVyfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5jdXJyZW50U2hhZGVyID0gbnVsbDtcblxuLy8gICAgdGhpcy5pbml0UGx1Z2lucygpO1xufVxuXG5TaGFkZXJNYW5hZ2VyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoV2ViR0xNYW5hZ2VyLnByb3RvdHlwZSk7XG5TaGFkZXJNYW5hZ2VyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFNoYWRlck1hbmFnZXI7XG51dGlscy5wbHVnaW5UYXJnZXQubWl4aW4oU2hhZGVyTWFuYWdlcik7XG5cbm1vZHVsZS5leHBvcnRzID0gU2hhZGVyTWFuYWdlcjtcblxuLyoqXG4gKiBDYWxsZWQgd2hlbiB0aGVyZSBpcyBhIFdlYkdMIGNvbnRleHQgY2hhbmdlLlxuICpcbiAqL1xuU2hhZGVyTWFuYWdlci5wcm90b3R5cGUub25Db250ZXh0Q2hhbmdlID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLmluaXRQbHVnaW5zKCk7XG5cbiAgICB2YXIgZ2wgPSB0aGlzLnJlbmRlcmVyLmdsO1xuXG4gICAgLy8gZ2V0IHRoZSBtYXhpbXVtIG51bWJlciBvZiBhdHRyaWJ1dGUgY29ycmVjdGx5IGFzIHRoaXMgdGVuZHMgdG8gdmFyeVxuICAgIHRoaXMubWF4QXR0aWJzID0gZ2wuZ2V0UGFyYW1ldGVyKGdsLk1BWF9WRVJURVhfQVRUUklCUyk7XG5cbiAgICB0aGlzLmF0dHJpYlN0YXRlID0gW107XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMubWF4QXR0aWJzOyBpKyspXG4gICAge1xuICAgICAgICB0aGlzLmF0dHJpYlN0YXRlW2ldID0gZmFsc2U7XG4gICAgfVxuXG4gICAgLy8gVE9ETyAtIFdoeSBhcmUgdGhlc2Ugbm90IHBsdWdpbnM/IFdlIGNhbid0IGRlY291cGxlIHByaW1pdGl2ZXMgdW5sZXNzIHRoZXkgYXJlLi4uLlxuICAgIHRoaXMuZGVmYXVsdFNoYWRlciA9IG5ldyBUZXh0dXJlU2hhZGVyKHRoaXMpO1xuICAgIHRoaXMucHJpbWl0aXZlU2hhZGVyID0gbmV3IFByaW1pdGl2ZVNoYWRlcih0aGlzKTtcbiAgICB0aGlzLmNvbXBsZXhQcmltaXRpdmVTaGFkZXIgPSBuZXcgQ29tcGxleFByaW1pdGl2ZVNoYWRlcih0aGlzKTtcbn07XG5cbi8qKlxuICogVGFrZXMgdGhlIGF0dHJpYnV0ZXMgZ2l2ZW4gaW4gcGFyYW1ldGVycyBhbmQgdXBsb2FkcyB0aGVtLlxuICpcbiAqIEBwYXJhbSBhdHRyaWJzIHthbnlbXX0gYXR0cmlic1xuICovXG5TaGFkZXJNYW5hZ2VyLnByb3RvdHlwZS5zZXRBdHRyaWJzID0gZnVuY3Rpb24gKGF0dHJpYnMpXG57XG4gICAgLy8gcmVzZXQgdGVtcCBzdGF0ZVxuICAgIHZhciBpO1xuXG4gICAgZm9yIChpID0gMDsgaSA8IHRoaXMudGVtcEF0dHJpYlN0YXRlLmxlbmd0aDsgaSsrKVxuICAgIHtcbiAgICAgICAgdGhpcy50ZW1wQXR0cmliU3RhdGVbaV0gPSBmYWxzZTtcbiAgICB9XG5cbiAgICAvLyBzZXQgdGhlIG5ldyBhdHRyaWJzXG4gICAgZm9yICh2YXIgYSBpbiBhdHRyaWJzKVxuICAgIHtcbiAgICAgICAgdGhpcy50ZW1wQXR0cmliU3RhdGVbYXR0cmlic1thXV0gPSB0cnVlO1xuICAgIH1cblxuICAgIHZhciBnbCA9IHRoaXMucmVuZGVyZXIuZ2w7XG5cbiAgICBmb3IgKGkgPSAwOyBpIDwgdGhpcy5hdHRyaWJTdGF0ZS5sZW5ndGg7IGkrKylcbiAgICB7XG4gICAgICAgIGlmICh0aGlzLmF0dHJpYlN0YXRlW2ldICE9PSB0aGlzLnRlbXBBdHRyaWJTdGF0ZVtpXSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5hdHRyaWJTdGF0ZVtpXSA9IHRoaXMudGVtcEF0dHJpYlN0YXRlW2ldO1xuXG4gICAgICAgICAgICBpZiAodGhpcy5hdHRyaWJTdGF0ZVtpXSlcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBnbC5lbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBnbC5kaXNhYmxlVmVydGV4QXR0cmliQXJyYXkoaSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG59O1xuXG4vKipcbiAqIFNldHMgdGhlIGN1cnJlbnQgc2hhZGVyLlxuICpcbiAqIEBwYXJhbSBzaGFkZXIge1BJWEkuU2hhZGVyfSB0aGUgc2hhZGVyIHRvIHVwbG9hZFxuICovXG5TaGFkZXJNYW5hZ2VyLnByb3RvdHlwZS5zZXRTaGFkZXIgPSBmdW5jdGlvbiAoc2hhZGVyKVxue1xuICAgIHJldHVybjtcbiAgICBpZiAodGhpcy5fY3VycmVudElkID09PSBzaGFkZXIudWlkKVxuICAgIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHRoaXMuX2N1cnJlbnRJZCA9IHNoYWRlci51aWQ7XG5cbiAgICB0aGlzLmN1cnJlbnRTaGFkZXIgPSBzaGFkZXI7XG5cbiAgICB0aGlzLnJlbmRlcmVyLmdsLnVzZVByb2dyYW0oc2hhZGVyLnByb2dyYW0pO1xuICAgIHRoaXMuc2V0QXR0cmlicyhzaGFkZXIuYXR0cmlidXRlcyk7XG5cbiAgICByZXR1cm4gdHJ1ZTtcbn07XG5cbi8qKlxuICogRGVzdHJveXMgdGhpcyBvYmplY3QuXG4gKlxuICovXG5TaGFkZXJNYW5hZ2VyLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLnByaW1pdGl2ZVNoYWRlci5kZXN0cm95KCk7XG4gICAgdGhpcy5jb21wbGV4UHJpbWl0aXZlU2hhZGVyLmRlc3Ryb3koKTtcbiAgICBXZWJHTE1hbmFnZXIucHJvdG90eXBlLmRlc3Ryb3kuY2FsbCh0aGlzKTtcblxuICAgIHRoaXMuZGVzdHJveVBsdWdpbnMoKTtcblxuICAgIHRoaXMuYXR0cmliU3RhdGUgPSBudWxsO1xuXG4gICAgdGhpcy50ZW1wQXR0cmliU3RhdGUgPSBudWxsO1xufTtcbiIsInZhciBXZWJHTE1hbmFnZXIgPSByZXF1aXJlKCcuL1dlYkdMTWFuYWdlcicpLFxuICAgIHV0aWxzID0gcmVxdWlyZSgnLi4vLi4vLi4vdXRpbHMnKTtcblxuLyoqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcn0gVGhlIHJlbmRlcmVyIHRoaXMgbWFuYWdlciB3b3JrcyBmb3IuXG4gKi9cbmZ1bmN0aW9uIFdlYkdMTWFza01hbmFnZXIocmVuZGVyZXIpXG57XG4gICAgV2ViR0xNYW5hZ2VyLmNhbGwodGhpcywgcmVuZGVyZXIpO1xuICAgIHRoaXMuc3RlbmNpbE1hc2tTdGFjayA9IG51bGw7XG59XG5cbldlYkdMTWFza01hbmFnZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShXZWJHTE1hbmFnZXIucHJvdG90eXBlKTtcbldlYkdMTWFza01hbmFnZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gV2ViR0xNYXNrTWFuYWdlcjtcbm1vZHVsZS5leHBvcnRzID0gV2ViR0xNYXNrTWFuYWdlcjtcblxuLyoqXG4gKiBDaGFuZ2VzIHRoZSBtYXNrIHN0YWNrIHRoYXQgaXMgdXNlZCBieSB0aGlzIG1hbmFnZXIuXG4gKlxuICogQHBhcmFtIHN0ZW5jaWxNYXNrU3RhY2sge1BJWEkuU3RlbmNpbE1hc2tTdGFja30gVGhlIG1hc2sgc3RhY2tcbiAqL1xuV2ViR0xNYXNrTWFuYWdlci5wcm90b3R5cGUuc2V0TWFza1N0YWNrID0gZnVuY3Rpb24gKCBzdGVuY2lsTWFza1N0YWNrIClcbntcbiAgICB0aGlzLnN0ZW5jaWxNYXNrU3RhY2sgPSBzdGVuY2lsTWFza1N0YWNrO1xuXG4gICAgdmFyIGdsID0gdGhpcy5yZW5kZXJlci5nbDtcblxuICAgIGlmIChzdGVuY2lsTWFza1N0YWNrLnN0ZW5jaWxTdGFjay5sZW5ndGggPT09IDApXG4gICAge1xuICAgICAgICBnbC5kaXNhYmxlKGdsLlNURU5DSUxfVEVTVCk7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIGdsLmVuYWJsZShnbC5TVEVOQ0lMX1RFU1QpO1xuICAgIH1cbn07XG5cbi8qKlxuICogQXBwbGllcyB0aGUgTWFzayBhbmQgYWRkcyBpdCB0byB0aGUgY3VycmVudCBmaWx0ZXIgc3RhY2suIEBhbHZpblxuICpcbiAqIEBwYXJhbSBncmFwaGljcyB7UElYSS5HcmFwaGljc31cbiAqIEBwYXJhbSB3ZWJHTERhdGEge2FueVtdfVxuICovXG5XZWJHTE1hc2tNYW5hZ2VyLnByb3RvdHlwZS5wdXNoU3RlbmNpbCA9IGZ1bmN0aW9uIChncmFwaGljcywgd2ViR0xEYXRhKVxue1xuICAgIHRoaXMucmVuZGVyZXIuX2FjdGl2ZVJlbmRlclRhcmdldC5hdHRhY2hTdGVuY2lsQnVmZmVyKCk7XG5cbiAgICB2YXIgZ2wgPSB0aGlzLnJlbmRlcmVyLmdsLFxuICAgICAgICBzbXMgPSB0aGlzLnN0ZW5jaWxNYXNrU3RhY2s7XG5cbiAgICB0aGlzLmJpbmRHcmFwaGljcyhncmFwaGljcywgd2ViR0xEYXRhKTtcblxuICAgIGlmIChzbXMuc3RlbmNpbFN0YWNrLmxlbmd0aCA9PT0gMClcbiAgICB7XG4gICAgICAgIGdsLmVuYWJsZShnbC5TVEVOQ0lMX1RFU1QpO1xuICAgICAgICBnbC5jbGVhcihnbC5TVEVOQ0lMX0JVRkZFUl9CSVQpO1xuICAgICAgICBzbXMucmV2ZXJzZSA9IHRydWU7XG4gICAgICAgIHNtcy5jb3VudCA9IDA7XG4gICAgfVxuXG4gICAgc21zLnN0ZW5jaWxTdGFjay5wdXNoKHdlYkdMRGF0YSk7XG5cbiAgICB2YXIgbGV2ZWwgPSBzbXMuY291bnQ7XG5cbiAgICBnbC5jb2xvck1hc2soZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UpO1xuXG4gICAgZ2wuc3RlbmNpbEZ1bmMoZ2wuQUxXQVlTLDAsMHhGRik7XG4gICAgZ2wuc3RlbmNpbE9wKGdsLktFRVAsZ2wuS0VFUCxnbC5JTlZFUlQpO1xuXG4gICAgLy8gZHJhdyB0aGUgdHJpYW5nbGUgc3RyaXAhXG5cbiAgICBpZiAod2ViR0xEYXRhLm1vZGUgPT09IDEpXG4gICAge1xuICAgICAgICBnbC5kcmF3RWxlbWVudHMoZ2wuVFJJQU5HTEVfRkFOLCAgd2ViR0xEYXRhLmluZGljZXMubGVuZ3RoIC0gNCwgZ2wuVU5TSUdORURfU0hPUlQsIDAgKTtcblxuICAgICAgICBpZiAoc21zLnJldmVyc2UpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGdsLnN0ZW5jaWxGdW5jKGdsLkVRVUFMLCAweEZGIC0gbGV2ZWwsIDB4RkYpO1xuICAgICAgICAgICAgZ2wuc3RlbmNpbE9wKGdsLktFRVAsZ2wuS0VFUCxnbC5ERUNSKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgIHtcbiAgICAgICAgICAgIGdsLnN0ZW5jaWxGdW5jKGdsLkVRVUFMLGxldmVsLCAweEZGKTtcbiAgICAgICAgICAgIGdsLnN0ZW5jaWxPcChnbC5LRUVQLGdsLktFRVAsZ2wuSU5DUik7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBkcmF3IGEgcXVhZCB0byBpbmNyZW1lbnQuLlxuICAgICAgICBnbC5kcmF3RWxlbWVudHMoZ2wuVFJJQU5HTEVfRkFOLCA0LCBnbC5VTlNJR05FRF9TSE9SVCwgKCB3ZWJHTERhdGEuaW5kaWNlcy5sZW5ndGggLSA0ICkgKiAyICk7XG5cbiAgICAgICAgaWYgKHNtcy5yZXZlcnNlKVxuICAgICAgICB7XG4gICAgICAgICAgICBnbC5zdGVuY2lsRnVuYyhnbC5FUVVBTCwweEZGLShsZXZlbCsxKSwgMHhGRik7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgICBnbC5zdGVuY2lsRnVuYyhnbC5FUVVBTCxsZXZlbCsxLCAweEZGKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHNtcy5yZXZlcnNlID0gIXNtcy5yZXZlcnNlO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICBpZiAoIXNtcy5yZXZlcnNlKVxuICAgICAgICB7XG4gICAgICAgICAgICBnbC5zdGVuY2lsRnVuYyhnbC5FUVVBTCwgMHhGRiAtIGxldmVsLCAweEZGKTtcbiAgICAgICAgICAgIGdsLnN0ZW5jaWxPcChnbC5LRUVQLGdsLktFRVAsZ2wuREVDUik7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgICBnbC5zdGVuY2lsRnVuYyhnbC5FUVVBTCxsZXZlbCwgMHhGRik7XG4gICAgICAgICAgICBnbC5zdGVuY2lsT3AoZ2wuS0VFUCxnbC5LRUVQLGdsLklOQ1IpO1xuICAgICAgICB9XG5cbiAgICAgICAgZ2wuZHJhd0VsZW1lbnRzKGdsLlRSSUFOR0xFX1NUUklQLCAgd2ViR0xEYXRhLmluZGljZXMubGVuZ3RoLCBnbC5VTlNJR05FRF9TSE9SVCwgMCApO1xuXG4gICAgICAgIGlmICghc21zLnJldmVyc2UpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGdsLnN0ZW5jaWxGdW5jKGdsLkVRVUFMLDB4RkYtKGxldmVsKzEpLCAweEZGKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgIHtcbiAgICAgICAgICAgIGdsLnN0ZW5jaWxGdW5jKGdsLkVRVUFMLGxldmVsKzEsIDB4RkYpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZ2wuY29sb3JNYXNrKHRydWUsIHRydWUsIHRydWUsIHRydWUpO1xuICAgIGdsLnN0ZW5jaWxPcChnbC5LRUVQLGdsLktFRVAsZ2wuS0VFUCk7XG5cbiAgICBzbXMuY291bnQrKztcbn07XG5cbi8qKlxuICogVE9ETyB0aGlzIGRvZXMgbm90IGJlbG9uZyBoZXJlIVxuICpcbiAqIEBwYXJhbSBncmFwaGljcyB7UElYSS5HcmFwaGljc31cbiAqIEBwYXJhbSB3ZWJHTERhdGEge2FueVtdfVxuICovXG5XZWJHTE1hc2tNYW5hZ2VyLnByb3RvdHlwZS5iaW5kR3JhcGhpY3MgPSBmdW5jdGlvbiAoZ3JhcGhpY3MsIHdlYkdMRGF0YSlcbntcbiAgICAvL2lmICh0aGlzLl9jdXJyZW50R3JhcGhpY3MgPT09IGdyYXBoaWNzKXJldHVybjtcbiAgICB2YXIgZ2wgPSB0aGlzLnJlbmRlcmVyLmdsO1xuXG4gICAgIC8vIGJpbmQgdGhlIGdyYXBoaWNzIG9iamVjdC4uXG4gICAgdmFyIHNoYWRlciA9IHRoaXMucmVuZGVyZXIucGx1Z2lucy5ncmFwaGljcy5wcmltaXRpdmVTaGFkZXI7XG5cbiAgICBpZiAod2ViR0xEYXRhLm1vZGUgPT09IDEpXG4gICAge1xuICAgICAgICAvKlxuICAgICAgICBzaGFkZXIgPSB0aGlzLnJlbmRlcmVyLnNoYWRlck1hbmFnZXIuY29tcGxleFByaW1pdGl2ZVNoYWRlcjtcblxuICAgICAgICB0aGlzLnJlbmRlcmVyLnNoYWRlck1hbmFnZXIuc2V0U2hhZGVyKHNoYWRlcik7XG5cbiAgICAgICAgZ2wudW5pZm9ybU1hdHJpeDNmdihzaGFkZXIudW5pZm9ybXMudHJhbnNsYXRpb25NYXRyaXguX2xvY2F0aW9uLCBmYWxzZSwgZ3JhcGhpY3Mud29ybGRUcmFuc2Zvcm0udG9BcnJheSh0cnVlKSk7XG5cbiAgICAgICAgZ2wudW5pZm9ybU1hdHJpeDNmdihzaGFkZXIudW5pZm9ybXMucHJvamVjdGlvbk1hdHJpeC5fbG9jYXRpb24sIGZhbHNlLCB0aGlzLnJlbmRlcmVyLmN1cnJlbnRSZW5kZXJUYXJnZXQucHJvamVjdGlvbk1hdHJpeC50b0FycmF5KHRydWUpKTtcblxuICAgICAgICBnbC51bmlmb3JtM2Z2KHNoYWRlci51bmlmb3Jtcy50aW50Ll9sb2NhdGlvbiwgdXRpbHMuaGV4MnJnYihncmFwaGljcy50aW50KSk7XG5cbiAgICAgICAgZ2wudW5pZm9ybTNmdihzaGFkZXIudW5pZm9ybXMuY29sb3IuX2xvY2F0aW9uLCB3ZWJHTERhdGEuY29sb3IpO1xuXG4gICAgICAgIGdsLnVuaWZvcm0xZihzaGFkZXIudW5pZm9ybXMuYWxwaGEuX2xvY2F0aW9uLCBncmFwaGljcy53b3JsZEFscGhhKTtcblxuICAgICAgICBnbC5iaW5kQnVmZmVyKGdsLkFSUkFZX0JVRkZFUiwgd2ViR0xEYXRhLmJ1ZmZlcik7XG5cbiAgICAgICAgZ2wudmVydGV4QXR0cmliUG9pbnRlcihzaGFkZXIuYXR0cmlidXRlcy5hVmVydGV4UG9zaXRpb24sIDIsIGdsLkZMT0FULCBmYWxzZSwgNCAqIDIsIDApO1xuXG4gICAgICAgIC8vIG5vdyBkbyB0aGUgcmVzdC4uXG4gICAgICAgIC8vIHNldCB0aGUgaW5kZXggYnVmZmVyIVxuICAgICAgICBnbC5iaW5kQnVmZmVyKGdsLkVMRU1FTlRfQVJSQVlfQlVGRkVSLCB3ZWJHTERhdGEuaW5kZXhCdWZmZXIpO1xuICAgICovXG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIC8vdGhpcy5yZW5kZXJlci5zaGFkZXJNYW5hZ2VyLmFjdGl2YXRlUHJpbWl0aXZlU2hhZGVyKCk7XG4vLyAgICAgICAgc2hhZGVyID0gdGhpcy5yZW5kZXJlci5zaGFkZXJNYW5hZ2VyLnByaW1pdGl2ZVNoYWRlcjtcbiAgICAgICBcbiAgICAgICAgdGhpcy5yZW5kZXJlci5iaW5kU2hhZGVyKHNoYWRlcilcblxuICAgICAgICBzaGFkZXIudW5pZm9ybXMudHJhbnNsYXRpb25NYXRyaXggPSBncmFwaGljcy53b3JsZFRyYW5zZm9ybS50b0FycmF5KHRydWUpO1xuICAgICAgICBzaGFkZXIudW5pZm9ybXMudGludCA9IHV0aWxzLmhleDJyZ2IoZ3JhcGhpY3MudGludCk7XG4gICAgICAgIHNoYWRlci51bmlmb3Jtcy5hbHBoYSA9IGdyYXBoaWNzLndvcmxkQWxwaGE7XG5cblxuICAgICAgICBnbC5iaW5kQnVmZmVyKGdsLkFSUkFZX0JVRkZFUiwgd2ViR0xEYXRhLmJ1ZmZlcik7XG5cblxuICAgICAgICBzaGFkZXIuYXR0cmlidXRlcy5hVmVydGV4UG9zaXRpb24ucG9pbnRlcihnbC5GTE9BVCwgZmFsc2UsIDQgKiA2LCAwKTtcbiAgICAgICAgc2hhZGVyLmF0dHJpYnV0ZXMuYUNvbG9yLnBvaW50ZXIoZ2wuRkxPQVQsIGZhbHNlLCA0ICogNiwgMiAqIDQpO1xuXG4gICAgICAgIGdsLmVuYWJsZVZlcnRleEF0dHJpYkFycmF5KHNoYWRlci5hdHRyaWJ1dGVzLmFWZXJ0ZXhQb3NpdGlvbi5sb2NhdGlvbik7XG4gICAgICAgIGdsLmVuYWJsZVZlcnRleEF0dHJpYkFycmF5KHNoYWRlci5hdHRyaWJ1dGVzLmFDb2xvci5sb2NhdGlvbik7XG5cbiAgICAgICAgLy8gc2V0IHRoZSBpbmRleCBidWZmZXIhXG4gICAgICAgIGdsLmJpbmRCdWZmZXIoZ2wuRUxFTUVOVF9BUlJBWV9CVUZGRVIsIHdlYkdMRGF0YS5pbmRleEJ1ZmZlcik7XG4vLyAgICAgICAgZ2wuZHJhd0VsZW1lbnRzKGdsLlRSSUFOR0xFX1NUUklQLCAgd2ViR0xEYXRhLmluZGljZXMubGVuZ3RoLCBnbC5VTlNJR05FRF9TSE9SVCwgMCApO1xuXG5cbiAgICAgIC8qICB0aGlzLnJlbmRlcmVyLnNoYWRlck1hbmFnZXIuc2V0U2hhZGVyKHNoYWRlcik7XG5cbiAgICAgICAgZ2wudW5pZm9ybU1hdHJpeDNmdihzaGFkZXIudW5pZm9ybXMudHJhbnNsYXRpb25NYXRyaXguX2xvY2F0aW9uLCBmYWxzZSwgZ3JhcGhpY3Mud29ybGRUcmFuc2Zvcm0udG9BcnJheSh0cnVlKSk7XG5cbiAgICAgICAgZ2wudW5pZm9ybU1hdHJpeDNmdihzaGFkZXIudW5pZm9ybXMucHJvamVjdGlvbk1hdHJpeC5fbG9jYXRpb24sIGZhbHNlLCB0aGlzLnJlbmRlcmVyLmN1cnJlbnRSZW5kZXJUYXJnZXQucHJvamVjdGlvbk1hdHJpeC50b0FycmF5KHRydWUpKTtcblxuICAgICAgICBnbC51bmlmb3JtM2Z2KHNoYWRlci51bmlmb3Jtcy50aW50Ll9sb2NhdGlvbiwgdXRpbHMuaGV4MnJnYihncmFwaGljcy50aW50KSk7XG5cbiAgICAgICAgZ2wudW5pZm9ybTFmKHNoYWRlci51bmlmb3Jtcy5hbHBoYS5fbG9jYXRpb24sIGdyYXBoaWNzLndvcmxkQWxwaGEpO1xuXG4gICAgICAgIGdsLmJpbmRCdWZmZXIoZ2wuQVJSQVlfQlVGRkVSLCB3ZWJHTERhdGEuYnVmZmVyKTtcblxuICAgICAgICBnbC52ZXJ0ZXhBdHRyaWJQb2ludGVyKHNoYWRlci5hdHRyaWJ1dGVzLmFWZXJ0ZXhQb3NpdGlvbiwgMiwgZ2wuRkxPQVQsIGZhbHNlLCA0ICogNiwgMCk7XG4gICAgICAgIGdsLnZlcnRleEF0dHJpYlBvaW50ZXIoc2hhZGVyLmF0dHJpYnV0ZXMuYUNvbG9yLCA0LCBnbC5GTE9BVCwgZmFsc2UsNCAqIDYsIDIgKiA0KTtcblxuICAgICAgICAvLyBzZXQgdGhlIGluZGV4IGJ1ZmZlciFcbiAgICAgICAgZ2wuYmluZEJ1ZmZlcihnbC5FTEVNRU5UX0FSUkFZX0JVRkZFUiwgd2ViR0xEYXRhLmluZGV4QnVmZmVyKTsqL1xuICAgIH1cbn07XG5cbi8qKlxuICogVE9ETyBAYWx2aW5cbiAqIEBwYXJhbSBncmFwaGljcyB7UElYSS5HcmFwaGljc31cbiAqIEBwYXJhbSB3ZWJHTERhdGEge2FueVtdfVxuICovXG5XZWJHTE1hc2tNYW5hZ2VyLnByb3RvdHlwZS5wb3BTdGVuY2lsID0gZnVuY3Rpb24gKGdyYXBoaWNzLCB3ZWJHTERhdGEpXG57XG4gICAgdmFyIGdsID0gdGhpcy5yZW5kZXJlci5nbCxcbiAgICAgICAgc21zID0gdGhpcy5zdGVuY2lsTWFza1N0YWNrO1xuXG4gICAgc21zLnN0ZW5jaWxTdGFjay5wb3AoKTtcblxuICAgIHNtcy5jb3VudC0tO1xuXG4gICAgaWYgKHNtcy5zdGVuY2lsU3RhY2subGVuZ3RoID09PSAwKVxuICAgIHtcbiAgICAgICAgLy8gdGhlIHN0YWNrIGlzIGVtcHR5IVxuICAgICAgICBnbC5kaXNhYmxlKGdsLlNURU5DSUxfVEVTVCk7XG5cbiAgICB9XG4gICAgZWxzZVxuICAgIHtcblxuICAgICAgICB2YXIgbGV2ZWwgPSBzbXMuY291bnQ7XG5cbiAgICAgICAgdGhpcy5iaW5kR3JhcGhpY3MoZ3JhcGhpY3MsIHdlYkdMRGF0YSk7XG5cbiAgICAgICAgZ2wuY29sb3JNYXNrKGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlKTtcblxuICAgICAgICBpZiAod2ViR0xEYXRhLm1vZGUgPT09IDEpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHNtcy5yZXZlcnNlID0gIXNtcy5yZXZlcnNlO1xuXG4gICAgICAgICAgICBpZiAoc21zLnJldmVyc2UpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgZ2wuc3RlbmNpbEZ1bmMoZ2wuRVFVQUwsIDB4RkYgLSAobGV2ZWwrMSksIDB4RkYpO1xuICAgICAgICAgICAgICAgIGdsLnN0ZW5jaWxPcChnbC5LRUVQLGdsLktFRVAsZ2wuSU5DUik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgZ2wuc3RlbmNpbEZ1bmMoZ2wuRVFVQUwsbGV2ZWwrMSwgMHhGRik7XG4gICAgICAgICAgICAgICAgZ2wuc3RlbmNpbE9wKGdsLktFRVAsZ2wuS0VFUCxnbC5ERUNSKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gZHJhdyBhIHF1YWQgdG8gaW5jcmVtZW50Li5cbiAgICAgICAgICAgIGdsLmRyYXdFbGVtZW50cyhnbC5UUklBTkdMRV9GQU4sIDQsIGdsLlVOU0lHTkVEX1NIT1JULCAoIHdlYkdMRGF0YS5pbmRpY2VzLmxlbmd0aCAtIDQgKSAqIDIgKTtcblxuICAgICAgICAgICAgZ2wuc3RlbmNpbEZ1bmMoZ2wuQUxXQVlTLDAsMHhGRik7XG4gICAgICAgICAgICBnbC5zdGVuY2lsT3AoZ2wuS0VFUCxnbC5LRUVQLGdsLklOVkVSVCk7XG5cbiAgICAgICAgICAgIC8vIGRyYXcgdGhlIHRyaWFuZ2xlIHN0cmlwIVxuICAgICAgICAgICAgZ2wuZHJhd0VsZW1lbnRzKGdsLlRSSUFOR0xFX0ZBTiwgIHdlYkdMRGF0YS5pbmRpY2VzLmxlbmd0aCAtIDQsIGdsLlVOU0lHTkVEX1NIT1JULCAwICk7XG5cbiAgICAgICAgICAgIHRoaXMucmVuZGVyZXIuZHJhd0NvdW50ICs9IDI7XG5cbiAgICAgICAgICAgIGlmICghc21zLnJldmVyc2UpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgZ2wuc3RlbmNpbEZ1bmMoZ2wuRVFVQUwsMHhGRi0obGV2ZWwpLCAweEZGKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBnbC5zdGVuY2lsRnVuYyhnbC5FUVVBTCxsZXZlbCwgMHhGRik7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgIHtcbiAgICAgICAgICAvLyAgY29uc29sZS5sb2coXCI8PD4+XCIpXG4gICAgICAgICAgICBpZiAoIXNtcy5yZXZlcnNlKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGdsLnN0ZW5jaWxGdW5jKGdsLkVRVUFMLCAweEZGIC0gKGxldmVsKzEpLCAweEZGKTtcbiAgICAgICAgICAgICAgICBnbC5zdGVuY2lsT3AoZ2wuS0VFUCxnbC5LRUVQLGdsLklOQ1IpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGdsLnN0ZW5jaWxGdW5jKGdsLkVRVUFMLGxldmVsKzEsIDB4RkYpO1xuICAgICAgICAgICAgICAgIGdsLnN0ZW5jaWxPcChnbC5LRUVQLGdsLktFRVAsZ2wuREVDUik7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGdsLmRyYXdFbGVtZW50cyhnbC5UUklBTkdMRV9TVFJJUCwgIHdlYkdMRGF0YS5pbmRpY2VzLmxlbmd0aCwgZ2wuVU5TSUdORURfU0hPUlQsIDAgKTtcblxuICAgICAgICAgICAgdGhpcy5yZW5kZXJlci5kcmF3Q291bnQrKztcblxuICAgICAgICAgICAgaWYgKCFzbXMucmV2ZXJzZSlcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBnbC5zdGVuY2lsRnVuYyhnbC5FUVVBTCwweEZGLShsZXZlbCksIDB4RkYpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGdsLnN0ZW5jaWxGdW5jKGdsLkVRVUFMLGxldmVsLCAweEZGKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGdsLmNvbG9yTWFzayh0cnVlLCB0cnVlLCB0cnVlLCB0cnVlKTtcbiAgICAgICAgZ2wuc3RlbmNpbE9wKGdsLktFRVAsZ2wuS0VFUCxnbC5LRUVQKTtcblxuXG4gICAgfVxufTtcblxuLyoqXG4gKiBEZXN0cm95cyB0aGUgbWFzayBzdGFjay5cbiAqXG4gKi9cbldlYkdMTWFza01hbmFnZXIucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoKVxue1xuICAgIFdlYkdMTWFuYWdlci5wcm90b3R5cGUuZGVzdHJveS5jYWxsKHRoaXMpO1xuXG4gICAgdGhpcy5zdGVuY2lsTWFza1N0YWNrLnN0ZW5jaWxTdGFjayA9IG51bGw7XG59O1xuXG4vKipcbiAqIEFwcGxpZXMgdGhlIE1hc2sgYW5kIGFkZHMgaXQgdG8gdGhlIGN1cnJlbnQgZmlsdGVyIHN0YWNrLlxuICpcbiAqIEBwYXJhbSBtYXNrRGF0YSB7YW55W119IFRoZSBtYXNrIGRhdGEgc3RydWN0dXJlIHRvIHVzZVxuICovXG5XZWJHTE1hc2tNYW5hZ2VyLnByb3RvdHlwZS5wdXNoTWFzayA9IGZ1bmN0aW9uIChtYXNrRGF0YSlcbntcbiAgICB0aGlzLnJlbmRlcmVyLnNldE9iamVjdFJlbmRlcmVyKHRoaXMucmVuZGVyZXIucGx1Z2lucy5ncmFwaGljcyk7XG4gICAgXG4gICAgLy9UT0RPIEZJWFxuICAgIGlmIChtYXNrRGF0YS5kaXJ0eSlcbiAgICB7XG4gICAgICAgIHRoaXMucmVuZGVyZXIucGx1Z2lucy5ncmFwaGljcy51cGRhdGVHcmFwaGljcyhtYXNrRGF0YSwgdGhpcy5yZW5kZXJlci5nbCk7XG4gICAgfVxuXG4gICAgaWYgKCFtYXNrRGF0YS5fd2ViR0xbdGhpcy5yZW5kZXJlci5nbC5pZF0uZGF0YS5sZW5ndGgpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5wdXNoU3RlbmNpbChtYXNrRGF0YSwgbWFza0RhdGEuX3dlYkdMW3RoaXMucmVuZGVyZXIuZ2wuaWRdLmRhdGFbMF0pO1xufTtcblxuLyoqXG4gKiBSZW1vdmVzIHRoZSBsYXN0IGZpbHRlciBmcm9tIHRoZSBmaWx0ZXIgc3RhY2sgYW5kIGRvZXNuJ3QgcmV0dXJuIGl0LlxuICpcbiAqIEBwYXJhbSBtYXNrRGF0YSB7YW55W119XG4gKi9cbldlYkdMTWFza01hbmFnZXIucHJvdG90eXBlLnBvcE1hc2sgPSBmdW5jdGlvbiAobWFza0RhdGEpXG57XG4gICAgdGhpcy5yZW5kZXJlci5zZXRPYmplY3RSZW5kZXJlcih0aGlzLnJlbmRlcmVyLnBsdWdpbnMuZ3JhcGhpY3MpO1xuXG4gICAgdGhpcy5wb3BTdGVuY2lsKG1hc2tEYXRhLCBtYXNrRGF0YS5fd2ViR0xbdGhpcy5yZW5kZXJlci5nbC5pZF0uZGF0YVswXSk7XG59O1xuXG4iLCIvKipcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5XZWJHTFJlbmRlcmVyfSBUaGUgcmVuZGVyZXIgdGhpcyBtYW5hZ2VyIHdvcmtzIGZvci5cbiAqL1xuZnVuY3Rpb24gV2ViR0xNYW5hZ2VyKHJlbmRlcmVyKVxue1xuICAgIC8qKlxuICAgICAqIFRoZSByZW5kZXJlciB0aGlzIG1hbmFnZXIgd29ya3MgZm9yLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5XZWJHTFJlbmRlcmVyfVxuICAgICAqL1xuICAgIHRoaXMucmVuZGVyZXIgPSByZW5kZXJlcjtcblxuICAgIHRoaXMucmVuZGVyZXIub24oJ2NvbnRleHQnLCB0aGlzLm9uQ29udGV4dENoYW5nZSwgdGhpcyk7XG59XG5cbldlYkdMTWFuYWdlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBXZWJHTE1hbmFnZXI7XG5tb2R1bGUuZXhwb3J0cyA9IFdlYkdMTWFuYWdlcjtcblxuLyoqXG4gKiBHZW5lcmljIG1ldGhvZCBjYWxsZWQgd2hlbiB0aGVyZSBpcyBhIFdlYkdMIGNvbnRleHQgY2hhbmdlLlxuICpcbiAqL1xuV2ViR0xNYW5hZ2VyLnByb3RvdHlwZS5vbkNvbnRleHRDaGFuZ2UgPSBmdW5jdGlvbiAoKVxue1xuXHQvLyBkbyBzb21lIGNvZGVzIGluaXQhXG59O1xuXG4vKipcbiAqIEdlbmVyaWMgZGVzdHJveSBtZXRob2RzIHRvIGJlIG92ZXJyaWRkZW4gYnkgdGhlIHN1YmNsYXNzXG4gKlxuICovXG5XZWJHTE1hbmFnZXIucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoKVxue1xuICAgIHRoaXMucmVuZGVyZXIub2ZmKCdjb250ZXh0JywgdGhpcy5vbkNvbnRleHRDaGFuZ2UsIHRoaXMpO1xuXG4gICAgdGhpcy5yZW5kZXJlciA9IG51bGw7XG59O1xuIiwidmFyIFNoYWRlciA9IHJlcXVpcmUoJy4vU2hhZGVyJyk7XG5cbi8qKlxuICogVGhpcyBzaGFkZXIgaXMgdXNlZCB0byBkcmF3IGNvbXBsZXggcHJpbWl0aXZlIHNoYXBlcyBmb3Ige0BsaW5rIFBJWEkuR3JhcGhpY3N9LlxuICpcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqIEBleHRlbmRzIFBJWEkuU2hhZGVyXG4gKiBAcGFyYW0gc2hhZGVyTWFuYWdlciB7UElYSS5TaGFkZXJNYW5hZ2VyfSBUaGUgd2ViZ2wgc2hhZGVyIG1hbmFnZXIgdGhpcyBzaGFkZXIgd29ya3MgZm9yLlxuICovXG5mdW5jdGlvbiBDb21wbGV4UHJpbWl0aXZlU2hhZGVyKHNoYWRlck1hbmFnZXIpXG57XG4gICAgU2hhZGVyLmNhbGwodGhpcyxcbiAgICAgICAgc2hhZGVyTWFuYWdlcixcbiAgICAgICAgLy8gdmVydGV4IHNoYWRlclxuICAgICAgICBbXG4gICAgICAgICAgICAnYXR0cmlidXRlIHZlYzIgYVZlcnRleFBvc2l0aW9uOycsXG5cbiAgICAgICAgICAgICd1bmlmb3JtIG1hdDMgdHJhbnNsYXRpb25NYXRyaXg7JyxcbiAgICAgICAgICAgICd1bmlmb3JtIG1hdDMgcHJvamVjdGlvbk1hdHJpeDsnLFxuXG4gICAgICAgICAgICAndW5pZm9ybSB2ZWMzIHRpbnQ7JyxcbiAgICAgICAgICAgICd1bmlmb3JtIGZsb2F0IGFscGhhOycsXG4gICAgICAgICAgICAndW5pZm9ybSB2ZWMzIGNvbG9yOycsXG5cbiAgICAgICAgICAgICd2YXJ5aW5nIHZlYzQgdkNvbG9yOycsXG5cbiAgICAgICAgICAgICd2b2lkIG1haW4odm9pZCl7JyxcbiAgICAgICAgICAgICcgICBnbF9Qb3NpdGlvbiA9IHZlYzQoKHByb2plY3Rpb25NYXRyaXggKiB0cmFuc2xhdGlvbk1hdHJpeCAqIHZlYzMoYVZlcnRleFBvc2l0aW9uLCAxLjApKS54eSwgMC4wLCAxLjApOycsXG4gICAgICAgICAgICAnICAgdkNvbG9yID0gdmVjNChjb2xvciAqIGFscGhhICogdGludCwgYWxwaGEpOycsLy9cIiAqIHZlYzQodGludCAqIGFscGhhLCBhbHBoYSk7JyxcbiAgICAgICAgICAgICd9J1xuICAgICAgICBdLmpvaW4oJ1xcbicpLFxuICAgICAgICAvLyBmcmFnbWVudCBzaGFkZXJcbiAgICAgICAgW1xuICAgICAgICAgICAgJ3ByZWNpc2lvbiBtZWRpdW1wIGZsb2F0OycsXG5cbiAgICAgICAgICAgICd2YXJ5aW5nIHZlYzQgdkNvbG9yOycsXG5cbiAgICAgICAgICAgICd2b2lkIG1haW4odm9pZCl7JyxcbiAgICAgICAgICAgICcgICBnbF9GcmFnQ29sb3IgPSB2Q29sb3I7JyxcbiAgICAgICAgICAgICd9J1xuICAgICAgICBdLmpvaW4oJ1xcbicpLFxuICAgICAgICAvLyBjdXN0b20gdW5pZm9ybXNcbiAgICAgICAge1xuICAgICAgICAgICAgdGludDogICB7IHR5cGU6ICczZicsIHZhbHVlOiBbMCwgMCwgMF0gfSxcbiAgICAgICAgICAgIGFscGhhOiAgeyB0eXBlOiAnMWYnLCB2YWx1ZTogMCB9LFxuICAgICAgICAgICAgY29sb3I6ICB7IHR5cGU6ICczZicsIHZhbHVlOiBbMCwwLDBdIH0sXG4gICAgICAgICAgICB0cmFuc2xhdGlvbk1hdHJpeDogeyB0eXBlOiAnbWF0MycsIHZhbHVlOiBuZXcgRmxvYXQzMkFycmF5KDkpIH0sXG4gICAgICAgICAgICBwcm9qZWN0aW9uTWF0cml4OiB7IHR5cGU6ICdtYXQzJywgdmFsdWU6IG5ldyBGbG9hdDMyQXJyYXkoOSkgfVxuICAgICAgICB9LFxuICAgICAgICAvLyBhdHRyaWJ1dGVzXG4gICAgICAgIHtcbiAgICAgICAgICAgIGFWZXJ0ZXhQb3NpdGlvbjowXG4gICAgICAgIH1cbiAgICApO1xufVxuXG5Db21wbGV4UHJpbWl0aXZlU2hhZGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoU2hhZGVyLnByb3RvdHlwZSk7XG5Db21wbGV4UHJpbWl0aXZlU2hhZGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IENvbXBsZXhQcmltaXRpdmVTaGFkZXI7XG5tb2R1bGUuZXhwb3J0cyA9IENvbXBsZXhQcmltaXRpdmVTaGFkZXI7XG4iLCJ2YXIgU2hhZGVyID0gcmVxdWlyZSgnLi9TaGFkZXInKTtcblxuLyoqXG4gKiBUaGlzIHNoYWRlciBpcyB1c2VkIHRvIGRyYXcgc2ltcGxlIHByaW1pdGl2ZSBzaGFwZXMgZm9yIHtAbGluayBQSVhJLkdyYXBoaWNzfS5cbiAqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAZXh0ZW5kcyBQSVhJLlNoYWRlclxuICogQHBhcmFtIHNoYWRlck1hbmFnZXIge1NoYWRlck1hbmFnZXJ9IFRoZSB3ZWJnbCBzaGFkZXIgbWFuYWdlciB0aGlzIHNoYWRlciB3b3JrcyBmb3IuXG4gKi9cbmZ1bmN0aW9uIFByaW1pdGl2ZVNoYWRlcihzaGFkZXJNYW5hZ2VyKVxue1xuICAgIFNoYWRlci5jYWxsKHRoaXMsXG4gICAgICAgIHNoYWRlck1hbmFnZXIsXG4gICAgICAgIC8vIHZlcnRleCBzaGFkZXJcbiAgICAgICAgW1xuICAgICAgICAgICAgJ2F0dHJpYnV0ZSB2ZWMyIGFWZXJ0ZXhQb3NpdGlvbjsnLFxuICAgICAgICAgICAgJ2F0dHJpYnV0ZSB2ZWM0IGFDb2xvcjsnLFxuXG4gICAgICAgICAgICAndW5pZm9ybSBtYXQzIHRyYW5zbGF0aW9uTWF0cml4OycsXG4gICAgICAgICAgICAndW5pZm9ybSBtYXQzIHByb2plY3Rpb25NYXRyaXg7JyxcblxuICAgICAgICAgICAgJ3VuaWZvcm0gZmxvYXQgYWxwaGE7JyxcbiAgICAgICAgICAgICd1bmlmb3JtIGZsb2F0IGZsaXBZOycsXG4gICAgICAgICAgICAndW5pZm9ybSB2ZWMzIHRpbnQ7JyxcblxuICAgICAgICAgICAgJ3ZhcnlpbmcgdmVjNCB2Q29sb3I7JyxcblxuICAgICAgICAgICAgJ3ZvaWQgbWFpbih2b2lkKXsnLFxuICAgICAgICAgICAgJyAgIGdsX1Bvc2l0aW9uID0gdmVjNCgocHJvamVjdGlvbk1hdHJpeCAqIHRyYW5zbGF0aW9uTWF0cml4ICogdmVjMyhhVmVydGV4UG9zaXRpb24sIDEuMCkpLnh5LCAwLjAsIDEuMCk7JyxcbiAgICAgICAgICAgICcgICB2Q29sb3IgPSBhQ29sb3IgKiB2ZWM0KHRpbnQgKiBhbHBoYSwgYWxwaGEpOycsXG4gICAgICAgICAgICAnfSdcbiAgICAgICAgXS5qb2luKCdcXG4nKSxcbiAgICAgICAgLy8gZnJhZ21lbnQgc2hhZGVyXG4gICAgICAgIFtcbiAgICAgICAgICAgICdwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDsnLFxuXG4gICAgICAgICAgICAndmFyeWluZyB2ZWM0IHZDb2xvcjsnLFxuXG4gICAgICAgICAgICAndm9pZCBtYWluKHZvaWQpeycsXG4gICAgICAgICAgICAnICAgZ2xfRnJhZ0NvbG9yID0gdkNvbG9yOycsXG4gICAgICAgICAgICAnfSdcbiAgICAgICAgXS5qb2luKCdcXG4nKSxcbiAgICAgICAgLy8gY3VzdG9tIHVuaWZvcm1zXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRpbnQ6ICAgeyB0eXBlOiAnM2YnLCB2YWx1ZTogWzAsIDAsIDBdIH0sXG4gICAgICAgICAgICBhbHBoYTogIHsgdHlwZTogJzFmJywgdmFsdWU6IDAgfSxcbiAgICAgICAgICAgIHRyYW5zbGF0aW9uTWF0cml4OiB7IHR5cGU6ICdtYXQzJywgdmFsdWU6IG5ldyBGbG9hdDMyQXJyYXkoOSkgfSxcbiAgICAgICAgICAgIHByb2plY3Rpb25NYXRyaXg6IHsgdHlwZTogJ21hdDMnLCB2YWx1ZTogbmV3IEZsb2F0MzJBcnJheSg5KSB9XG4gICAgICAgIH0sXG4gICAgICAgIC8vIGN1c3RvbSBhdHRyaWJ1dGVzXG4gICAgICAgIHtcbiAgICAgICAgICAgIGFWZXJ0ZXhQb3NpdGlvbjowLFxuICAgICAgICAgICAgYUNvbG9yOjBcbiAgICAgICAgfVxuICAgICk7XG59XG5cblByaW1pdGl2ZVNoYWRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFNoYWRlci5wcm90b3R5cGUpO1xuUHJpbWl0aXZlU2hhZGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFByaW1pdGl2ZVNoYWRlcjtcbm1vZHVsZS5leHBvcnRzID0gUHJpbWl0aXZlU2hhZGVyO1xuIiwiLypnbG9iYWwgY29uc29sZSAqL1xudmFyIHV0aWxzID0gcmVxdWlyZSgnLi4vLi4vLi4vdXRpbHMnKTtcblxuLyoqXG4gKiBCYXNlIHNoYWRlciBjbGFzcyBmb3IgUElYSSBtYW5hZ2VkIHNoYWRlcnMuXG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIHNoYWRlck1hbmFnZXIge1BJWEkuU2hhZGVyTWFuYWdlcn0gVGhlIHdlYmdsIHNoYWRlciBtYW5hZ2VyIHRoaXMgc2hhZGVyIHdvcmtzIGZvci5cbiAqIEBwYXJhbSBbdmVydGV4U3JjXSB7c3RyaW5nfSBUaGUgc291cmNlIG9mIHRoZSB2ZXJ0ZXggc2hhZGVyLlxuICogQHBhcmFtIFtmcmFnbWVudFNyY10ge3N0cmluZ30gVGhlIHNvdXJjZSBvZiB0aGUgZnJhZ21lbnQgc2hhZGVyLlxuICogQHBhcmFtIFt1bmlmb3Jtc10ge29iamVjdH0gVW5pZm9ybXMgZm9yIHRoaXMgc2hhZGVyLlxuICogQHBhcmFtIFthdHRyaWJ1dGVzXSB7b2JqZWN0fSBBdHRyaWJ1dGVzIGZvciB0aGlzIHNoYWRlci5cbiAqL1xuZnVuY3Rpb24gU2hhZGVyKHNoYWRlck1hbmFnZXIsIHZlcnRleFNyYywgZnJhZ21lbnRTcmMsIHVuaWZvcm1zLCBhdHRyaWJ1dGVzKVxue1xuICAgIGlmICghdmVydGV4U3JjIHx8ICFmcmFnbWVudFNyYylcbiAgICB7XG4gICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1BpeGkuanMgRXJyb3IuIFNoYWRlciByZXF1aXJlcyB2ZXJ0ZXhTcmMgYW5kIGZyYWdtZW50U3JjJyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQSB1bmlxdWUgaWRcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQHJlYWRvbmx5XG4gICAgICovXG4gICAgdGhpcy51aWQgPSB1dGlscy51aWQoKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBjdXJyZW50IFdlYkdMIGRyYXdpbmcgY29udGV4dFxuICAgICAqIEBtZW1iZXIge1dlYkdMUmVuZGVyaW5nQ29udGV4dH1cbiAgICAgKiBAcmVhZG9ubHlcbiAgICAgKi9cbiAgICB0aGlzLmdsID0gc2hhZGVyTWFuYWdlci5yZW5kZXJlci5nbDtcblxuICAgIC8vVE9ETyBtYXliZSB3ZSBzaG91bGQgcGFzcyByZW5kZXJlciByYXRoZXIgdGhhbiBzaGFkZXIgbWFuZ2VyPz8gZm9vZCBmb3IgdGhvdWdodC4uXG4gICAgdGhpcy5zaGFkZXJNYW5hZ2VyID0gc2hhZGVyTWFuYWdlcjtcblxuICAgIC8qKlxuICAgICAqIFRoZSBXZWJHTCBwcm9ncmFtLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7V2ViR0xQcm9ncmFtfVxuICAgICAqIEByZWFkb25seVxuICAgICAqL1xuICAgIHRoaXMucHJvZ3JhbSA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgdW5pZm9ybXMgYXMgYW4gb2JqZWN0XG4gICAgICogQG1lbWJlciB7b2JqZWN0fVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy51bmlmb3JtcyA9IHVuaWZvcm1zIHx8IHt9O1xuXG4gICAgLyoqXG4gICAgICogVGhlIGF0dHJpYnV0ZXMgYXMgYW4gb2JqZWN0XG4gICAgICogQG1lbWJlciB7b2JqZWN0fVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5hdHRyaWJ1dGVzID0gYXR0cmlidXRlcyB8fCB7fTtcblxuICAgIC8qKlxuICAgICAqIEludGVybmFsIHRleHR1cmUgY291bnRlclxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMudGV4dHVyZUNvdW50ID0gMTtcblxuICAgIC8qKlxuICAgICAqIFRoZSB2ZXJ0ZXggc2hhZGVyIGFzIGFuIGFycmF5IG9mIHN0cmluZ3NcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge3N0cmluZ31cbiAgICAgKi9cbiAgICB0aGlzLnZlcnRleFNyYyA9IHZlcnRleFNyYztcblxuICAgIC8qKlxuICAgICAqIFRoZSBmcmFnbWVudCBzaGFkZXIgYXMgYW4gYXJyYXkgb2Ygc3RyaW5nc1xuICAgICAqXG4gICAgICogQG1lbWJlciB7c3RyaW5nfVxuICAgICAqL1xuICAgIHRoaXMuZnJhZ21lbnRTcmMgPSBmcmFnbWVudFNyYztcblxuICAgIHRoaXMuaW5pdCgpO1xufVxuXG5TaGFkZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gU2hhZGVyO1xubW9kdWxlLmV4cG9ydHMgPSBTaGFkZXI7XG5cbi8qKlxuICogQ3JlYXRlcyB0aGUgc2hhZGVyIGFuZCB1c2VzIGl0XG4gKlxuICovXG5TaGFkZXIucHJvdG90eXBlLmluaXQgPSBmdW5jdGlvbiAoKVxue1xuICAgIHRoaXMuY29tcGlsZSgpO1xuXG4gICAgdGhpcy5nbC51c2VQcm9ncmFtKHRoaXMucHJvZ3JhbSk7XG5cbiAgICB0aGlzLmNhY2hlVW5pZm9ybUxvY2F0aW9ucyhPYmplY3Qua2V5cyh0aGlzLnVuaWZvcm1zKSk7XG4gICAgdGhpcy5jYWNoZUF0dHJpYnV0ZUxvY2F0aW9ucyhPYmplY3Qua2V5cyh0aGlzLmF0dHJpYnV0ZXMpKTtcbn07XG5cbi8qKlxuICogQ2FjaGVzIHRoZSBsb2NhdGlvbnMgb2YgdGhlIHVuaWZvcm0gZm9yIHJldXNlLlxuICpcbiAqIEBwYXJhbSBrZXlzIHtzdHJpbmd9IHRoZSB1bmlmb3JtcyB0byBjYWNoZVxuICovXG5TaGFkZXIucHJvdG90eXBlLmNhY2hlVW5pZm9ybUxvY2F0aW9ucyA9IGZ1bmN0aW9uIChrZXlzKVxue1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7ICsraSlcbiAgICB7XG4gICAgICAgIHRoaXMudW5pZm9ybXNba2V5c1tpXV0uX2xvY2F0aW9uID0gdGhpcy5nbC5nZXRVbmlmb3JtTG9jYXRpb24odGhpcy5wcm9ncmFtLCBrZXlzW2ldKTtcbiAgICB9XG59O1xuXG4vKipcbiAqIENhY2hlcyB0aGUgbG9jYXRpb25zIG9mIHRoZSBhdHRyaWJ1dGUgZm9yIHJldXNlLlxuICpcbiAqIEBwYXJhbSBrZXlzIHtzdHJpbmd9IHRoZSBhdHRyaWJ1dGVzIHRvIGNhY2hlXG4gKi9cblNoYWRlci5wcm90b3R5cGUuY2FjaGVBdHRyaWJ1dGVMb2NhdGlvbnMgPSBmdW5jdGlvbiAoa2V5cylcbntcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyArK2kpXG4gICAge1xuICAgICAgICB0aGlzLmF0dHJpYnV0ZXNba2V5c1tpXV0gPSB0aGlzLmdsLmdldEF0dHJpYkxvY2F0aW9uKHRoaXMucHJvZ3JhbSwga2V5c1tpXSk7XG4gICAgfVxuXG4gICAgLy8gVE9ETzogQ2hlY2sgaWYgdGhpcyBpcyBuZWVkZWQgYW55bW9yZS4uLlxuXG4gICAgLy8gQmVnaW4gd29yc3QgaGFjayBldmEgLy9cblxuICAgIC8vIFdIWT8/PyBPTkxZIG9uIG15IGNocm9tZSBwaXhlbCB0aGUgbGluZSBhYm92ZSByZXR1cm5zIC0xIHdoZW4gdXNpbmcgZmlsdGVycz9cbiAgICAvLyBtYXliZSBpdHMgc29tZXRoaW5nIHRvIGRvIHdpdGggdGhlIGN1cnJlbnQgc3RhdGUgb2YgdGhlIGdsIGNvbnRleHQuXG4gICAgLy8gSSdtIGNvbnZpbmNlZCB0aGlzIGlzIGEgYnVnIGluIHRoZSBjaHJvbWUgYnJvd3NlciBhcyB0aGVyZSBpcyBOTyByZWFzb24gd2h5IHRoaXMgc2hvdWxkIGJlIHJldHVybmluZyAtMSBlc3BlY2lhbGx5IGFzIGl0IG9ubHkgbWFuaWZlc3RzIG9uIG15IGNocm9tZSBwaXhlbFxuICAgIC8vIElmIHRoZXJlcyBhbnkgd2ViR0wgcGVvcGxlIHRoYXQga25vdyB3aHkgY291bGQgaGFwcGVuIHBsZWFzZSBoZWxwIDopXG4gICAgLy8gaWYgKHRoaXMuYXR0cmlidXRlcy5hQ29sb3IgPT09IC0xKXtcbiAgICAvLyAgICAgdGhpcy5hdHRyaWJ1dGVzLmFDb2xvciA9IDI7XG4gICAgLy8gfVxuXG4gICAgLy8gRW5kIHdvcnN0IGhhY2sgZXZhIC8vXG59O1xuXG4vKipcbiAqIEF0dGFjaGVzIHRoZSBzaGFkZXJzIGFuZCBjcmVhdGVzIHRoZSBwcm9ncmFtLlxuICpcbiAqIEByZXR1cm4ge1dlYkdMUHJvZ3JhbX1cbiAqL1xuU2hhZGVyLnByb3RvdHlwZS5jb21waWxlID0gZnVuY3Rpb24gKClcbntcbiAgICB2YXIgZ2wgPSB0aGlzLmdsO1xuXG4gICAgdmFyIGdsVmVydFNoYWRlciA9IHRoaXMuX2dsQ29tcGlsZShnbC5WRVJURVhfU0hBREVSLCB0aGlzLnZlcnRleFNyYyk7XG4gICAgdmFyIGdsRnJhZ1NoYWRlciA9IHRoaXMuX2dsQ29tcGlsZShnbC5GUkFHTUVOVF9TSEFERVIsIHRoaXMuZnJhZ21lbnRTcmMpO1xuXG4gICAgdmFyIHByb2dyYW0gPSBnbC5jcmVhdGVQcm9ncmFtKCk7XG5cbiAgICBnbC5hdHRhY2hTaGFkZXIocHJvZ3JhbSwgZ2xWZXJ0U2hhZGVyKTtcbiAgICBnbC5hdHRhY2hTaGFkZXIocHJvZ3JhbSwgZ2xGcmFnU2hhZGVyKTtcbiAgICBnbC5saW5rUHJvZ3JhbShwcm9ncmFtKTtcblxuICAgIC8vIGlmIGxpbmtpbmcgZmFpbHMsIHRoZW4gbG9nIGFuZCBjbGVhbnVwXG4gICAgaWYgKCFnbC5nZXRQcm9ncmFtUGFyYW1ldGVyKHByb2dyYW0sIGdsLkxJTktfU1RBVFVTKSlcbiAgICB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ1BpeGkuanMgRXJyb3I6IENvdWxkIG5vdCBpbml0aWFsaXplIHNoYWRlci4nKTtcbiAgICAgICAgY29uc29sZS5lcnJvcignZ2wuVkFMSURBVEVfU1RBVFVTJywgZ2wuZ2V0UHJvZ3JhbVBhcmFtZXRlcihwcm9ncmFtLCBnbC5WQUxJREFURV9TVEFUVVMpKTtcbiAgICAgICAgY29uc29sZS5lcnJvcignZ2wuZ2V0RXJyb3IoKScsIGdsLmdldEVycm9yKCkpO1xuXG4gICAgICAgIC8vIGlmIHRoZXJlIGlzIGEgcHJvZ3JhbSBpbmZvIGxvZywgbG9nIGl0XG4gICAgICAgIGlmIChnbC5nZXRQcm9ncmFtSW5mb0xvZyhwcm9ncmFtKSAhPT0gJycpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignUGl4aS5qcyBXYXJuaW5nOiBnbC5nZXRQcm9ncmFtSW5mb0xvZygpJywgZ2wuZ2V0UHJvZ3JhbUluZm9Mb2cocHJvZ3JhbSkpO1xuICAgICAgICB9XG5cbiAgICAgICAgZ2wuZGVsZXRlUHJvZ3JhbShwcm9ncmFtKTtcbiAgICAgICAgcHJvZ3JhbSA9IG51bGw7XG4gICAgfVxuXG4gICAgLy8gY2xlYW4gdXAgc29tZSBzaGFkZXJzXG4gICAgZ2wuZGVsZXRlU2hhZGVyKGdsVmVydFNoYWRlcik7XG4gICAgZ2wuZGVsZXRlU2hhZGVyKGdsRnJhZ1NoYWRlcik7XG5cbiAgICByZXR1cm4gKHRoaXMucHJvZ3JhbSA9IHByb2dyYW0pO1xufTtcblxuLyoqXG4qIEFkZHMgYSBuZXcgdW5pZm9ybVxuKlxuKiBAcGFyYW0gdW5pZm9ybSB7b2JqZWN0fSB0aGUgbmV3IHVuaWZvcm0gdG8gYXR0YWNoXG4qL1xuU2hhZGVyLnByb3RvdHlwZS5zeW5jVW5pZm9ybSA9IGZ1bmN0aW9uICh1bmlmb3JtKVxue1xuICAgIHZhciBsb2NhdGlvbiA9IHVuaWZvcm0uX2xvY2F0aW9uLFxuICAgICAgICB2YWx1ZSA9IHVuaWZvcm0udmFsdWUsXG4gICAgICAgIGdsID0gdGhpcy5nbCxcbiAgICAgICAgaSwgaWw7XG5cbiAgICBzd2l0Y2ggKHVuaWZvcm0udHlwZSlcbiAgICB7XG4gICAgICAgIGNhc2UgJ2InOlxuICAgICAgICBjYXNlICdib29sJzpcbiAgICAgICAgY2FzZSAnYm9vbGVhbic6XG4gICAgICAgICAgICBnbC51bmlmb3JtMWkobG9jYXRpb24sIHZhbHVlID8gMSA6IDApO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLy8gc2luZ2xlIGludCB2YWx1ZVxuICAgICAgICBjYXNlICdpJzpcbiAgICAgICAgY2FzZSAnMWknOlxuICAgICAgICAgICAgZ2wudW5pZm9ybTFpKGxvY2F0aW9uLCB2YWx1ZSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAvLyBzaW5nbGUgZmxvYXQgdmFsdWVcbiAgICAgICAgY2FzZSAnZic6XG4gICAgICAgIGNhc2UgJzFmJzpcbiAgICAgICAgICAgIGdsLnVuaWZvcm0xZihsb2NhdGlvbiwgdmFsdWUpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLy8gRmxvYXQzMkFycmF5KDIpIG9yIEpTIEFycnJheVxuICAgICAgICBjYXNlICcyZic6XG4gICAgICAgICAgICBnbC51bmlmb3JtMmYobG9jYXRpb24sIHZhbHVlWzBdLCB2YWx1ZVsxXSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAvLyBGbG9hdDMyQXJyYXkoMykgb3IgSlMgQXJycmF5XG4gICAgICAgIGNhc2UgJzNmJzpcbiAgICAgICAgICAgIGdsLnVuaWZvcm0zZihsb2NhdGlvbiwgdmFsdWVbMF0sIHZhbHVlWzFdLCB2YWx1ZVsyXSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAvLyBGbG9hdDMyQXJyYXkoNCkgb3IgSlMgQXJycmF5XG4gICAgICAgIGNhc2UgJzRmJzpcbiAgICAgICAgICAgIGdsLnVuaWZvcm00Zihsb2NhdGlvbiwgdmFsdWVbMF0sIHZhbHVlWzFdLCB2YWx1ZVsyXSwgdmFsdWVbM10pO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLy8gYSAyRCBQb2ludCBvYmplY3RcbiAgICAgICAgY2FzZSAndjInOlxuICAgICAgICAgICAgZ2wudW5pZm9ybTJmKGxvY2F0aW9uLCB2YWx1ZS54LCB2YWx1ZS55KTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIC8vIGEgM0QgUG9pbnQgb2JqZWN0XG4gICAgICAgIGNhc2UgJ3YzJzpcbiAgICAgICAgICAgIGdsLnVuaWZvcm0zZihsb2NhdGlvbiwgdmFsdWUueCwgdmFsdWUueSwgdmFsdWUueik7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAvLyBhIDREIFBvaW50IG9iamVjdFxuICAgICAgICBjYXNlICd2NCc6XG4gICAgICAgICAgICBnbC51bmlmb3JtNGYobG9jYXRpb24sIHZhbHVlLngsIHZhbHVlLnksIHZhbHVlLnosIHZhbHVlLncpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLy8gSW50MzJBcnJheSBvciBKUyBBcnJheVxuICAgICAgICBjYXNlICcxaXYnOlxuICAgICAgICAgICAgZ2wudW5pZm9ybTFpdihsb2NhdGlvbiwgdmFsdWUpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLy8gSW50MzJBcnJheSBvciBKUyBBcnJheVxuICAgICAgICBjYXNlICcyaXYnOlxuICAgICAgICAgICAgZ2wudW5pZm9ybTJpdihsb2NhdGlvbiwgdmFsdWUpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLy8gSW50MzJBcnJheSBvciBKUyBBcnJheVxuICAgICAgICBjYXNlICczaXYnOlxuICAgICAgICAgICAgZ2wudW5pZm9ybTNpdihsb2NhdGlvbiwgdmFsdWUpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLy8gSW50MzJBcnJheSBvciBKUyBBcnJheVxuICAgICAgICBjYXNlICc0aXYnOlxuICAgICAgICAgICAgZ2wudW5pZm9ybTRpdihsb2NhdGlvbiwgdmFsdWUpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLy8gRmxvYXQzMkFycmF5IG9yIEpTIEFycmF5XG4gICAgICAgIGNhc2UgJzFmdic6XG4gICAgICAgICAgICBnbC51bmlmb3JtMWZ2KGxvY2F0aW9uLCB2YWx1ZSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAvLyBGbG9hdDMyQXJyYXkgb3IgSlMgQXJyYXlcbiAgICAgICAgY2FzZSAnMmZ2JzpcbiAgICAgICAgICAgIGdsLnVuaWZvcm0yZnYobG9jYXRpb24sIHZhbHVlKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIC8vIEZsb2F0MzJBcnJheSBvciBKUyBBcnJheVxuICAgICAgICBjYXNlICczZnYnOlxuICAgICAgICAgICAgZ2wudW5pZm9ybTNmdihsb2NhdGlvbiwgdmFsdWUpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLy8gRmxvYXQzMkFycmF5IG9yIEpTIEFycmF5XG4gICAgICAgIGNhc2UgJzRmdic6XG4gICAgICAgICAgICBnbC51bmlmb3JtNGZ2KGxvY2F0aW9uLCB2YWx1ZSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAvLyBGbG9hdDMyQXJyYXkgb3IgSlMgQXJyYXlcbiAgICAgICAgY2FzZSAnbTInOlxuICAgICAgICBjYXNlICdtYXQyJzpcbiAgICAgICAgY2FzZSAnTWF0cml4MmZ2JzpcbiAgICAgICAgICAgIGdsLnVuaWZvcm1NYXRyaXgyZnYobG9jYXRpb24sIHVuaWZvcm0udHJhbnNwb3NlLCB2YWx1ZSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAvLyBGbG9hdDMyQXJyYXkgb3IgSlMgQXJyYXlcbiAgICAgICAgY2FzZSAnbTMnOlxuICAgICAgICBjYXNlICdtYXQzJzpcbiAgICAgICAgY2FzZSAnTWF0cml4M2Z2JzpcblxuICAgICAgICAgICAgZ2wudW5pZm9ybU1hdHJpeDNmdihsb2NhdGlvbiwgdW5pZm9ybS50cmFuc3Bvc2UsIHZhbHVlKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIC8vIEZsb2F0MzJBcnJheSBvciBKUyBBcnJheVxuICAgICAgICBjYXNlICdtNCc6XG4gICAgICAgIGNhc2UgJ21hdDQnOlxuICAgICAgICBjYXNlICdNYXRyaXg0ZnYnOlxuICAgICAgICAgICAgZ2wudW5pZm9ybU1hdHJpeDRmdihsb2NhdGlvbiwgdW5pZm9ybS50cmFuc3Bvc2UsIHZhbHVlKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIC8vIGEgQ29sb3IgVmFsdWVcbiAgICAgICAgY2FzZSAnYyc6XG4gICAgICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJylcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB2YWx1ZSA9IHV0aWxzLmhleDJyZ2IodmFsdWUpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBnbC51bmlmb3JtM2YobG9jYXRpb24sIHZhbHVlWzBdLCB2YWx1ZVsxXSwgdmFsdWVbMl0pO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLy8gZmxhdCBhcnJheSBvZiBpbnRlZ2VycyAoSlMgb3IgdHlwZWQgYXJyYXkpXG4gICAgICAgIGNhc2UgJ2l2MSc6XG4gICAgICAgICAgICBnbC51bmlmb3JtMWl2KGxvY2F0aW9uLCB2YWx1ZSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAvLyBmbGF0IGFycmF5IG9mIGludGVnZXJzIHdpdGggMyB4IE4gc2l6ZSAoSlMgb3IgdHlwZWQgYXJyYXkpXG4gICAgICAgIGNhc2UgJ2l2JzpcbiAgICAgICAgICAgIGdsLnVuaWZvcm0zaXYobG9jYXRpb24sIHZhbHVlKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIC8vIGZsYXQgYXJyYXkgb2YgZmxvYXRzIChKUyBvciB0eXBlZCBhcnJheSlcbiAgICAgICAgY2FzZSAnZnYxJzpcbiAgICAgICAgICAgIGdsLnVuaWZvcm0xZnYobG9jYXRpb24sIHZhbHVlKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIC8vIGZsYXQgYXJyYXkgb2YgZmxvYXRzIHdpdGggMyB4IE4gc2l6ZSAoSlMgb3IgdHlwZWQgYXJyYXkpXG4gICAgICAgIGNhc2UgJ2Z2JzpcbiAgICAgICAgICAgIGdsLnVuaWZvcm0zZnYobG9jYXRpb24sIHZhbHVlKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIC8vIGFycmF5IG9mIDJEIFBvaW50IG9iamVjdHNcbiAgICAgICAgY2FzZSAndjJ2JzpcbiAgICAgICAgICAgIGlmICghdW5pZm9ybS5fYXJyYXkpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdW5pZm9ybS5fYXJyYXkgPSBuZXcgRmxvYXQzMkFycmF5KDIgKiB2YWx1ZS5sZW5ndGgpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBmb3IgKGkgPSAwLCBpbCA9IHZhbHVlLmxlbmd0aDsgaSA8IGlsOyArK2kpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdW5pZm9ybS5fYXJyYXlbaSAqIDJdICAgICAgID0gdmFsdWVbaV0ueDtcbiAgICAgICAgICAgICAgICB1bmlmb3JtLl9hcnJheVtpICogMiArIDFdICAgPSB2YWx1ZVtpXS55O1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBnbC51bmlmb3JtMmZ2KGxvY2F0aW9uLCB1bmlmb3JtLl9hcnJheSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAvLyBhcnJheSBvZiAzRCBQb2ludCBvYmplY3RzXG4gICAgICAgIGNhc2UgJ3Yzdic6XG4gICAgICAgICAgICBpZiAoIXVuaWZvcm0uX2FycmF5KVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHVuaWZvcm0uX2FycmF5ID0gbmV3IEZsb2F0MzJBcnJheSgzICogdmFsdWUubGVuZ3RoKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZm9yIChpID0gMCwgaWwgPSB2YWx1ZS5sZW5ndGg7IGkgPCBpbDsgKytpKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHVuaWZvcm0uX2FycmF5W2kgKiAzXSAgICAgICA9IHZhbHVlW2ldLng7XG4gICAgICAgICAgICAgICAgdW5pZm9ybS5fYXJyYXlbaSAqIDMgKyAxXSAgID0gdmFsdWVbaV0ueTtcbiAgICAgICAgICAgICAgICB1bmlmb3JtLl9hcnJheVtpICogMyArIDJdICAgPSB2YWx1ZVtpXS56O1xuXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGdsLnVuaWZvcm0zZnYobG9jYXRpb24sIHVuaWZvcm0uX2FycmF5KTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIC8vIGFycmF5IG9mIDREIFBvaW50IG9iamVjdHNcbiAgICAgICAgY2FzZSAndjR2JzpcbiAgICAgICAgICAgIGlmICghdW5pZm9ybS5fYXJyYXkpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdW5pZm9ybS5fYXJyYXkgPSBuZXcgRmxvYXQzMkFycmF5KDQgKiB2YWx1ZS5sZW5ndGgpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBmb3IgKGkgPSAwLCBpbCA9IHZhbHVlLmxlbmd0aDsgaSA8IGlsOyArK2kpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdW5pZm9ybS5fYXJyYXlbaSAqIDRdICAgICAgID0gdmFsdWVbaV0ueDtcbiAgICAgICAgICAgICAgICB1bmlmb3JtLl9hcnJheVtpICogNCArIDFdICAgPSB2YWx1ZVtpXS55O1xuICAgICAgICAgICAgICAgIHVuaWZvcm0uX2FycmF5W2kgKiA0ICsgMl0gICA9IHZhbHVlW2ldLno7XG4gICAgICAgICAgICAgICAgdW5pZm9ybS5fYXJyYXlbaSAqIDQgKyAzXSAgID0gdmFsdWVbaV0udztcblxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBnbC51bmlmb3JtNGZ2KGxvY2F0aW9uLCB1bmlmb3JtLl9hcnJheSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAvLyBQSVhJLlRleHR1cmVcbiAgICAgICAgY2FzZSAndCc6XG4gICAgICAgIGNhc2UgJ3NhbXBsZXIyRCc6XG5cbiAgICAgICAgICAgIGlmICghdW5pZm9ybS52YWx1ZSB8fCAhdW5pZm9ybS52YWx1ZS5iYXNlVGV4dHVyZS5oYXNMb2FkZWQpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIGFjdGl2YXRlIHRoaXMgdGV4dHVyZVxuICAgICAgICAgICAgZ2wuYWN0aXZlVGV4dHVyZShnbFsnVEVYVFVSRScgKyB0aGlzLnRleHR1cmVDb3VudF0pO1xuXG4gICAgICAgICAgICB2YXIgdGV4dHVyZSA9IHVuaWZvcm0udmFsdWUuYmFzZVRleHR1cmUuX2dsVGV4dHVyZXNbZ2wuaWRdO1xuXG4gICAgICAgICAgICBpZiAoIXRleHR1cmUpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdGhpcy5pbml0U2FtcGxlcjJEKHVuaWZvcm0pO1xuXG4gICAgICAgICAgICAgICAgLy8gc2V0IHRoZSB0ZXh0dXIgdG8gdGhlIG5ld2x5IGNyZWF0ZWQgb25lLi5cbiAgICAgICAgICAgICAgICB0ZXh0dXJlID0gdW5pZm9ybS52YWx1ZS5iYXNlVGV4dHVyZS5fZ2xUZXh0dXJlc1tnbC5pZF07XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIGJpbmQgdGhlIHRleHR1cmVcbiAgICAgICAgICAgIGdsLmJpbmRUZXh0dXJlKGdsLlRFWFRVUkVfMkQsIHRleHR1cmUpO1xuXG4gICAgICAgICAgICAvLyBzZXQgdW5pZm9ybSB0byB0ZXh0dXJlIGluZGV4XG4gICAgICAgICAgICBnbC51bmlmb3JtMWkodW5pZm9ybS5fbG9jYXRpb24sIHRoaXMudGV4dHVyZUNvdW50KTtcblxuICAgICAgICAgICAgLy8gaW5jcmVtZW50IG5leHQgdGV4dHVyZSBpZFxuICAgICAgICAgICAgdGhpcy50ZXh0dXJlQ291bnQrKztcblxuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignUGl4aS5qcyBTaGFkZXIgV2FybmluZzogVW5rbm93biB1bmlmb3JtIHR5cGU6ICcgKyB1bmlmb3JtLnR5cGUpO1xuICAgIH1cbn07XG5cbi8qKlxuICogVXBkYXRlcyB0aGUgc2hhZGVyIHVuaWZvcm0gdmFsdWVzLlxuICpcbiAqL1xuU2hhZGVyLnByb3RvdHlwZS5zeW5jVW5pZm9ybXMgPSBmdW5jdGlvbiAoKVxue1xuICAgIHRoaXMudGV4dHVyZUNvdW50ID0gMTtcblxuICAgIGZvciAodmFyIGtleSBpbiB0aGlzLnVuaWZvcm1zKVxuICAgIHtcbiAgICAgICAgdGhpcy5zeW5jVW5pZm9ybSh0aGlzLnVuaWZvcm1zW2tleV0pO1xuICAgIH1cbn07XG5cblxuLyoqXG4gKiBJbml0aWFsaXNlcyBhIFNhbXBsZXIyRCB1bmlmb3JtICh3aGljaCBtYXkgb25seSBiZSBhdmFpbGFibGUgbGF0ZXIgb24gYWZ0ZXIgaW5pdFVuaWZvcm1zIG9uY2UgdGhlIHRleHR1cmUgaGFzIGxvYWRlZClcbiAqXG4gKi9cblNoYWRlci5wcm90b3R5cGUuaW5pdFNhbXBsZXIyRCA9IGZ1bmN0aW9uICh1bmlmb3JtKVxue1xuICAgIHZhciBnbCA9IHRoaXMuZ2w7XG5cbiAgICB2YXIgdGV4dHVyZSA9IHVuaWZvcm0udmFsdWUuYmFzZVRleHR1cmU7XG5cbiAgICBpZighdGV4dHVyZS5oYXNMb2FkZWQpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG5cblxuICAgIGlmICh1bmlmb3JtLnRleHR1cmVEYXRhKVxuICAgIHtcblxuICAgICAgICAvL1RPRE8gbW92ZSB0aGlzLi4uXG4gICAgICAgIHZhciBkYXRhID0gdW5pZm9ybS50ZXh0dXJlRGF0YTtcblxuICAgICAgICB0ZXh0dXJlLl9nbFRleHR1cmVzW2dsLmlkXSA9IGdsLmNyZWF0ZVRleHR1cmUoKTtcblxuICAgICAgICBnbC5iaW5kVGV4dHVyZShnbC5URVhUVVJFXzJELCB0ZXh0dXJlLl9nbFRleHR1cmVzW2dsLmlkXSk7XG5cbiAgICAgICAgZ2wucGl4ZWxTdG9yZWkoZ2wuVU5QQUNLX1BSRU1VTFRJUExZX0FMUEhBX1dFQkdMLCB0ZXh0dXJlLnByZW11bHRpcGxpZWRBbHBoYSk7XG4gICAgICAgIC8vIEdMVGV4dHVyZSA9IG1hZyBsaW5lYXIsIG1pbiBsaW5lYXJfbWlwbWFwX2xpbmVhciwgd3JhcCByZXBlYXQgKyBnbC5nZW5lcmF0ZU1pcG1hcChnbC5URVhUVVJFXzJEKTtcbiAgICAgICAgLy8gR0xUZXh0dXJlTGluZWFyID0gbWFnL21pbiBsaW5lYXIsIHdyYXAgY2xhbXBcbiAgICAgICAgLy8gR0xUZXh0dXJlTmVhcmVzdFJlcGVhdCA9IG1hZy9taW4gTkVBUkVTVCwgd3JhcCByZXBlYXRcbiAgICAgICAgLy8gR0xUZXh0dXJlTmVhcmVzdCA9IG1hZy9taW4gbmVhcmVzdCwgd3JhcCBjbGFtcFxuICAgICAgICAvLyBBdWRpb1RleHR1cmUgPSB3aGF0ZXZlciArIGx1bWluYW5jZSArIHdpZHRoIDUxMiwgaGVpZ2h0IDIsIGJvcmRlciAwXG4gICAgICAgIC8vIEtleVRleHR1cmUgPSB3aGF0ZXZlciArIGx1bWluYW5jZSArIHdpZHRoIDI1NiwgaGVpZ2h0IDIsIGJvcmRlciAwXG5cbiAgICAgICAgLy8gIG1hZ0ZpbHRlciBjYW4gYmU6IGdsLkxJTkVBUiwgZ2wuTElORUFSX01JUE1BUF9MSU5FQVIgb3IgZ2wuTkVBUkVTVFxuICAgICAgICAvLyAgd3JhcFMvVCBjYW4gYmU6IGdsLkNMQU1QX1RPX0VER0Ugb3IgZ2wuUkVQRUFUXG5cbiAgICAgICAgZ2wudGV4SW1hZ2UyRChnbC5URVhUVVJFXzJELCAwLCBkYXRhLmx1bWluYW5jZSA/IGdsLkxVTUlOQU5DRSA6IGdsLlJHQkEsIGdsLlJHQkEsIGdsLlVOU0lHTkVEX0JZVEUsIHRleHR1cmUuc291cmNlKTtcblxuICAgICAgICBnbC50ZXhQYXJhbWV0ZXJpKGdsLlRFWFRVUkVfMkQsIGdsLlRFWFRVUkVfTUFHX0ZJTFRFUiwgZGF0YS5tYWdGaWx0ZXIgPyBkYXRhLm1hZ0ZpbHRlciA6IGdsLkxJTkVBUiApO1xuICAgICAgICBnbC50ZXhQYXJhbWV0ZXJpKGdsLlRFWFRVUkVfMkQsIGdsLlRFWFRVUkVfTUlOX0ZJTFRFUiwgZGF0YS53cmFwUyA/IGRhdGEud3JhcFMgOiBnbC5DTEFNUF9UT19FREdFICk7XG5cbiAgICAgICAgZ2wudGV4UGFyYW1ldGVyaShnbC5URVhUVVJFXzJELCBnbC5URVhUVVJFX1dSQVBfVCwgZGF0YS53cmFwUyA/IGRhdGEud3JhcFMgOiBnbC5DTEFNUF9UT19FREdFKTtcbiAgICAgICAgZ2wudGV4UGFyYW1ldGVyaShnbC5URVhUVVJFXzJELCBnbC5URVhUVVJFX1dSQVBfUywgZGF0YS53cmFwVCA/IGRhdGEud3JhcFQgOiBnbC5DTEFNUF9UT19FREdFKTtcbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgdGhpcy5zaGFkZXJNYW5hZ2VyLnJlbmRlcmVyLnVwZGF0ZVRleHR1cmUodGV4dHVyZSk7XG4gICAgfVxufTtcblxuLyoqXG4gKiBEZXN0cm95cyB0aGUgc2hhZGVyLlxuICpcbiAqL1xuU2hhZGVyLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLmdsLmRlbGV0ZVByb2dyYW0odGhpcy5wcm9ncmFtKTtcblxuICAgIHRoaXMuZ2wgPSBudWxsO1xuICAgIHRoaXMudW5pZm9ybXMgPSBudWxsO1xuICAgIHRoaXMuYXR0cmlidXRlcyA9IG51bGw7XG5cbiAgICB0aGlzLnZlcnRleFNyYyA9IG51bGw7XG4gICAgdGhpcy5mcmFnbWVudFNyYyA9IG51bGw7XG59O1xuXG5TaGFkZXIucHJvdG90eXBlLl9nbENvbXBpbGUgPSBmdW5jdGlvbiAodHlwZSwgc3JjKVxue1xuICAgIHZhciBzaGFkZXIgPSB0aGlzLmdsLmNyZWF0ZVNoYWRlcih0eXBlKTtcblxuICAgIHRoaXMuZ2wuc2hhZGVyU291cmNlKHNoYWRlciwgc3JjKTtcbiAgICB0aGlzLmdsLmNvbXBpbGVTaGFkZXIoc2hhZGVyKTtcblxuICAgIGlmICghdGhpcy5nbC5nZXRTaGFkZXJQYXJhbWV0ZXIoc2hhZGVyLCB0aGlzLmdsLkNPTVBJTEVfU1RBVFVTKSlcbiAgICB7XG4gICAgICAgIGNvbnNvbGUubG9nKHRoaXMuZ2wuZ2V0U2hhZGVySW5mb0xvZyhzaGFkZXIpKTtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgcmV0dXJuIHNoYWRlcjtcbn07XG4iLCJ2YXIgU2hhZGVyID0gcmVxdWlyZSgnLi9TaGFkZXInKTtcblxuLyoqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAZXh0ZW5kcyBQSVhJLlNoYWRlclxuICogQHBhcmFtIHNoYWRlck1hbmFnZXIge1BJWEkuU2hhZGVyTWFuYWdlcn0gVGhlIHdlYmdsIHNoYWRlciBtYW5hZ2VyIHRoaXMgc2hhZGVyIHdvcmtzIGZvci5cbiAqIEBwYXJhbSBbdmVydGV4U3JjXSB7c3RyaW5nfSBUaGUgc291cmNlIG9mIHRoZSB2ZXJ0ZXggc2hhZGVyLlxuICogQHBhcmFtIFtmcmFnbWVudFNyY10ge3N0cmluZ30gVGhlIHNvdXJjZSBvZiB0aGUgZnJhZ21lbnQgc2hhZGVyLlxuICogQHBhcmFtIFtjdXN0b21Vbmlmb3Jtc10ge29iamVjdH0gQ3VzdG9tIHVuaWZvcm1zIHRvIHVzZSB0byBhdWdtZW50IHRoZSBidWlsdC1pbiBvbmVzLlxuICogQHBhcmFtIFtmcmFnbWVudFNyY10ge3N0cmluZ30gVGhlIHNvdXJjZSBvZiB0aGUgZnJhZ21lbnQgc2hhZGVyLlxuICovXG5mdW5jdGlvbiBUZXh0dXJlU2hhZGVyKHNoYWRlck1hbmFnZXIsIHZlcnRleFNyYywgZnJhZ21lbnRTcmMsIGN1c3RvbVVuaWZvcm1zLCBjdXN0b21BdHRyaWJ1dGVzKVxue1xuICAgIHZhciB1bmlmb3JtcyA9IHtcblxuICAgICAgICB1U2FtcGxlcjogICAgICAgICAgIHsgdHlwZTogJ3NhbXBsZXIyRCcsIHZhbHVlOiAwIH0sXG4gICAgICAgIHByb2plY3Rpb25NYXRyaXg6ICAgeyB0eXBlOiAnbWF0MycsIHZhbHVlOiBuZXcgRmxvYXQzMkFycmF5KFsxLCAwLCAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgMSwgMCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsIDAsIDFdKSB9XG4gICAgfTtcblxuICAgIGlmIChjdXN0b21Vbmlmb3JtcylcbiAgICB7XG4gICAgICAgIGZvciAodmFyIHUgaW4gY3VzdG9tVW5pZm9ybXMpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHVuaWZvcm1zW3VdID0gY3VzdG9tVW5pZm9ybXNbdV07XG4gICAgICAgIH1cbiAgICB9XG5cblxuICAgIHZhciBhdHRyaWJ1dGVzID0ge1xuICAgICAgICBhVmVydGV4UG9zaXRpb246ICAgIDAsXG4gICAgICAgIGFUZXh0dXJlQ29vcmQ6ICAgICAgMCxcbiAgICAgICAgYUNvbG9yOiAgICAgICAgICAgICAwXG4gICAgfTtcblxuICAgIGlmIChjdXN0b21BdHRyaWJ1dGVzKVxuICAgIHtcbiAgICAgICAgZm9yICh2YXIgYSBpbiBjdXN0b21BdHRyaWJ1dGVzKVxuICAgICAgICB7XG4gICAgICAgICAgICBhdHRyaWJ1dGVzW2FdID0gY3VzdG9tQXR0cmlidXRlc1thXTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoZSB2ZXJ0ZXggc2hhZGVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7c3RyaW5nfVxuICAgICAqL1xuICAgIHZlcnRleFNyYyA9IHZlcnRleFNyYyB8fCBUZXh0dXJlU2hhZGVyLmRlZmF1bHRWZXJ0ZXhTcmM7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgZnJhZ21lbnQgc2hhZGVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7c3RyaW5nfVxuICAgICAqL1xuICAgIGZyYWdtZW50U3JjID0gZnJhZ21lbnRTcmMgfHwgVGV4dHVyZVNoYWRlci5kZWZhdWx0RnJhZ21lbnRTcmM7XG5cbiAgICBTaGFkZXIuY2FsbCh0aGlzLCBzaGFkZXJNYW5hZ2VyLCB2ZXJ0ZXhTcmMsIGZyYWdtZW50U3JjLCB1bmlmb3JtcywgYXR0cmlidXRlcyk7XG59XG5cbi8vIGNvbnN0cnVjdG9yXG5UZXh0dXJlU2hhZGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoU2hhZGVyLnByb3RvdHlwZSk7XG5UZXh0dXJlU2hhZGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFRleHR1cmVTaGFkZXI7XG5tb2R1bGUuZXhwb3J0cyA9IFRleHR1cmVTaGFkZXI7XG5cbi8qKlxuICogVGhlIGRlZmF1bHQgdmVydGV4IHNoYWRlciBzb3VyY2VcbiAqXG4gKiBAc3RhdGljXG4gKiBAY29uc3RhbnRcbiAqL1xuVGV4dHVyZVNoYWRlci5kZWZhdWx0VmVydGV4U3JjID0gW1xuICAgICdwcmVjaXNpb24gbG93cCBmbG9hdDsnLFxuICAgICdhdHRyaWJ1dGUgdmVjMiBhVmVydGV4UG9zaXRpb247JyxcbiAgICAnYXR0cmlidXRlIHZlYzIgYVRleHR1cmVDb29yZDsnLFxuICAgICdhdHRyaWJ1dGUgdmVjNCBhQ29sb3I7JyxcblxuICAgICd1bmlmb3JtIG1hdDMgcHJvamVjdGlvbk1hdHJpeDsnLFxuXG4gICAgJ3ZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkOycsXG4gICAgJ3ZhcnlpbmcgdmVjNCB2Q29sb3I7JyxcblxuICAgICd2b2lkIG1haW4odm9pZCl7JyxcbiAgICAnICAgZ2xfUG9zaXRpb24gPSB2ZWM0KChwcm9qZWN0aW9uTWF0cml4ICogdmVjMyhhVmVydGV4UG9zaXRpb24sIDEuMCkpLnh5LCAwLjAsIDEuMCk7JyxcbiAgICAnICAgdlRleHR1cmVDb29yZCA9IGFUZXh0dXJlQ29vcmQ7JyxcbiAgICAnICAgdkNvbG9yID0gdmVjNChhQ29sb3IucmdiICogYUNvbG9yLmEsIGFDb2xvci5hKTsnLFxuICAgICd9J1xuXS5qb2luKCdcXG4nKTtcblxuLyoqXG4gKiBUaGUgZGVmYXVsdCBmcmFnbWVudCBzaGFkZXIgc291cmNlXG4gKlxuICogQHN0YXRpY1xuICogQGNvbnN0YW50XG4gKi9cblRleHR1cmVTaGFkZXIuZGVmYXVsdEZyYWdtZW50U3JjID0gW1xuICAgICdwcmVjaXNpb24gbG93cCBmbG9hdDsnLFxuXG4gICAgJ3ZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkOycsXG4gICAgJ3ZhcnlpbmcgdmVjNCB2Q29sb3I7JyxcblxuICAgICd1bmlmb3JtIHNhbXBsZXIyRCB1U2FtcGxlcjsnLFxuXG4gICAgJ3ZvaWQgbWFpbih2b2lkKXsnLFxuICAgICcgICBnbF9GcmFnQ29sb3IgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZUZXh0dXJlQ29vcmQpICogdkNvbG9yIDsnLFxuICAgICd9J1xuXS5qb2luKCdcXG4nKTtcbiIsInZhciBTaGFkZXIgPSByZXF1aXJlKCdwaXhpLWdsLWNvcmUnKS5HTFNoYWRlcjtcblxuLyoqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAZXh0ZW5kcyBQSVhJLlNoYWRlclxuICogQHBhcmFtIHNoYWRlck1hbmFnZXIge1BJWEkuU2hhZGVyTWFuYWdlcn0gVGhlIHdlYmdsIHNoYWRlciBtYW5hZ2VyIHRoaXMgc2hhZGVyIHdvcmtzIGZvci5cbiAqIEBwYXJhbSBbdmVydGV4U3JjXSB7c3RyaW5nfSBUaGUgc291cmNlIG9mIHRoZSB2ZXJ0ZXggc2hhZGVyLlxuICogQHBhcmFtIFtmcmFnbWVudFNyY10ge3N0cmluZ30gVGhlIHNvdXJjZSBvZiB0aGUgZnJhZ21lbnQgc2hhZGVyLlxuICogQHBhcmFtIFtjdXN0b21Vbmlmb3Jtc10ge29iamVjdH0gQ3VzdG9tIHVuaWZvcm1zIHRvIHVzZSB0byBhdWdtZW50IHRoZSBidWlsdC1pbiBvbmVzLlxuICogQHBhcmFtIFtmcmFnbWVudFNyY10ge3N0cmluZ30gVGhlIHNvdXJjZSBvZiB0aGUgZnJhZ21lbnQgc2hhZGVyLlxuICovXG5mdW5jdGlvbiBUZXh0dXJlU2hhZGVyKGdsKVxue1xuICAgIC8qKlxuICAgICAqIFRoZSB2ZXJ0ZXggc2hhZGVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7c3RyaW5nfVxuICAgICAqL1xuICAgIHZlcnRleFNyYyA9IFRleHR1cmVTaGFkZXIuZGVmYXVsdFZlcnRleFNyYztcblxuICAgIC8qKlxuICAgICAqIFRoZSBmcmFnbWVudCBzaGFkZXIuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtzdHJpbmd9XG4gICAgICovXG4gICAgZnJhZ21lbnRTcmMgPSBUZXh0dXJlU2hhZGVyLmRlZmF1bHRGcmFnbWVudFNyYztcblxuICAgIFNoYWRlci5jYWxsKHRoaXMsIGdsLCB2ZXJ0ZXhTcmMsIGZyYWdtZW50U3JjKTsvLywgdW5pZm9ybXMsIGF0dHJpYnV0ZXMpO1xuXG59XG5cbi8vIGNvbnN0cnVjdG9yXG5UZXh0dXJlU2hhZGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoU2hhZGVyLnByb3RvdHlwZSk7XG5UZXh0dXJlU2hhZGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFRleHR1cmVTaGFkZXI7XG5tb2R1bGUuZXhwb3J0cyA9IFRleHR1cmVTaGFkZXI7XG5cbi8qKlxuICogVGhlIGRlZmF1bHQgdmVydGV4IHNoYWRlciBzb3VyY2VcbiAqXG4gKiBAc3RhdGljXG4gKiBAY29uc3RhbnRcbiAqL1xuVGV4dHVyZVNoYWRlci5kZWZhdWx0VmVydGV4U3JjID0gW1xuICAgICdwcmVjaXNpb24gbG93cCBmbG9hdDsnLFxuICAgICdhdHRyaWJ1dGUgdmVjMiBhVmVydGV4UG9zaXRpb247JyxcbiAgICAnYXR0cmlidXRlIHZlYzIgYVRleHR1cmVDb29yZDsnLFxuICAgICdhdHRyaWJ1dGUgdmVjNCBhQ29sb3I7JyxcblxuICAgICd1bmlmb3JtIG1hdDMgcHJvamVjdGlvbk1hdHJpeDsnLFxuXG4gICAgJ3ZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkOycsXG4gICAgJ3ZhcnlpbmcgdmVjNCB2Q29sb3I7JyxcblxuICAgICd2b2lkIG1haW4odm9pZCl7JyxcbiAgICAnICAgZ2xfUG9zaXRpb24gPSB2ZWM0KChwcm9qZWN0aW9uTWF0cml4ICogdmVjMyhhVmVydGV4UG9zaXRpb24sIDEuMCkpLnh5LCAwLjAsIDEuMCk7JyxcbiAgICAnICAgdlRleHR1cmVDb29yZCA9IGFUZXh0dXJlQ29vcmQ7JyxcbiAgICAnICAgdkNvbG9yID0gdmVjNChhQ29sb3IucmdiICogYUNvbG9yLmEsIGFDb2xvci5hKTsnLFxuICAgICd9J1xuXS5qb2luKCdcXG4nKTtcblxuLyoqXG4gKiBUaGUgZGVmYXVsdCBmcmFnbWVudCBzaGFkZXIgc291cmNlXG4gKlxuICogQHN0YXRpY1xuICogQGNvbnN0YW50XG4gKi9cblRleHR1cmVTaGFkZXIuZGVmYXVsdEZyYWdtZW50U3JjID0gW1xuICAgICdwcmVjaXNpb24gbG93cCBmbG9hdDsnLFxuXG4gICAgJ3ZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkOycsXG4gICAgJ3ZhcnlpbmcgdmVjNCB2Q29sb3I7JyxcblxuICAgICd1bmlmb3JtIHNhbXBsZXIyRCB1U2FtcGxlcjsnLFxuXG4gICAgJ3ZvaWQgbWFpbih2b2lkKXsnLFxuICAgICcgICBnbF9GcmFnQ29sb3IgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZUZXh0dXJlQ29vcmQpICogdkNvbG9yIDsnLFxuICAgICd9J1xuXS5qb2luKCdcXG4nKTtcbiIsInZhciBXZWJHTE1hbmFnZXIgPSByZXF1aXJlKCcuLi9tYW5hZ2Vycy9XZWJHTE1hbmFnZXInKTtcblxuLyoqXG4gKiBCYXNlIGZvciBhIGNvbW1vbiBvYmplY3QgcmVuZGVyZXIgdGhhdCBjYW4gYmUgdXNlZCBhcyBhIHN5c3RlbSByZW5kZXJlciBwbHVnaW4uXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLldlYkdMTWFuYWdlclxuICogQG1lbWJlcm9mIFBJWElcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5XZWJHTFJlbmRlcmVyfSBUaGUgcmVuZGVyZXIgdGhpcyBvYmplY3QgcmVuZGVyZXIgd29ya3MgZm9yLlxuICovXG5mdW5jdGlvbiBPYmplY3RSZW5kZXJlcihyZW5kZXJlcilcbntcbiAgICBXZWJHTE1hbmFnZXIuY2FsbCh0aGlzLCByZW5kZXJlcik7XG59XG5cblxuT2JqZWN0UmVuZGVyZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShXZWJHTE1hbmFnZXIucHJvdG90eXBlKTtcbk9iamVjdFJlbmRlcmVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IE9iamVjdFJlbmRlcmVyO1xubW9kdWxlLmV4cG9ydHMgPSBPYmplY3RSZW5kZXJlcjtcblxuLyoqXG4gKiBTdGFydHMgdGhlIHJlbmRlcmVyIGFuZCBzZXRzIHRoZSBzaGFkZXJcbiAqXG4gKi9cbk9iamVjdFJlbmRlcmVyLnByb3RvdHlwZS5zdGFydCA9IGZ1bmN0aW9uICgpXG57XG4gICAgLy8gc2V0IHRoZSBzaGFkZXIuLlxufTtcblxuLyoqXG4gKiBTdG9wcyB0aGUgcmVuZGVyZXJcbiAqXG4gKi9cbk9iamVjdFJlbmRlcmVyLnByb3RvdHlwZS5zdG9wID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLmZsdXNoKCk7XG59O1xuXG4vKipcbiAqIGZsdXNoZXNcbiAqXG4gKi9cbk9iamVjdFJlbmRlcmVyLnByb3RvdHlwZS5mbHVzaCA9IGZ1bmN0aW9uICgpXG57XG4gICAgLy8gZmx1c2ghXG59O1xuXG4vKipcbiAqIFJlbmRlcnMgYW4gb2JqZWN0XG4gKlxuICogQHBhcmFtIG9iamVjdCB7UElYSS5EaXNwbGF5T2JqZWN0fSBUaGUgb2JqZWN0IHRvIHJlbmRlci5cbiAqL1xuT2JqZWN0UmVuZGVyZXIucHJvdG90eXBlLnJlbmRlciA9IGZ1bmN0aW9uIChvYmplY3QpIC8vIGpzaGludCB1bnVzZWQ6ZmFsc2VcbntcbiAgICAvLyByZW5kZXIgdGhlIG9iamVjdFxufTtcbiIsIi8qKlxuICogSGVscGVyIGNsYXNzIHRvIGNyZWF0ZSBhIHF1YWRcbiAqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gZ2wge1dlYkdMUmVuZGVyaW5nQ29udGV4dH0gVGhlIGdsIGNvbnRleHQgZm9yIHRoaXMgcXVhZCB0byB1c2UuXG4gKi9cbmZ1bmN0aW9uIFF1YWQoZ2wpXG57XG4gICAgLypcbiAgICAgKiB0aGUgY3VycmVudCBXZWJHTCBkcmF3aW5nIGNvbnRleHRcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1dlYkdMUmVuZGVyaW5nQ29udGV4dH1cbiAgICAgKi9cbiAgICB0aGlzLmdsID0gZ2w7XG5cbi8vICAgIHRoaXMudGV4dHVyZXMgPSBuZXcgVGV4dHVyZVV2cygpO1xuXG4gICAgLyoqXG4gICAgICogQW4gYXJyYXkgb2YgdmVydGljZXNcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge0Zsb2F0MzJBcnJheX1cbiAgICAgKi9cbiAgICB0aGlzLnZlcnRpY2VzID0gbmV3IEZsb2F0MzJBcnJheShbXG4gICAgICAgIDAsMCxcbiAgICAgICAgMjAwLDAsXG4gICAgICAgIDIwMCwyMDAsXG4gICAgICAgIDAsMjAwXG4gICAgXSk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgVXZzIG9mIHRoZSBxdWFkXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtGbG9hdDMyQXJyYXl9XG4gICAgICovXG4gICAgdGhpcy51dnMgPSBuZXcgRmxvYXQzMkFycmF5KFtcbiAgICAgICAgMCwwLFxuICAgICAgICAxLDAsXG4gICAgICAgIDEsMSxcbiAgICAgICAgMCwxXG4gICAgXSk7XG5cbi8vICAgIHZhciB3aGl0ZSA9ICgweEZGRkZGRiA+PiAxNikgKyAoMHhGRkZGRkYgJiAweGZmMDApICsgKCgweEZGRkZGRiAmIDB4ZmYpIDw8IDE2KSArICgxICogMjU1IDw8IDI0KTtcbiAgICAvL1RPRE8gY29udmVydCB0aGlzIHRvIGEgMzIgdW5zaWduZWQgaW50IGFycmF5XG4gICAgLyoqXG4gICAgICogVGhlIGNvbG9yIGNvbXBvbmVudHMgb2YgdGhlIHRyaWFuZ2xlc1xuICAgICAqXG4gICAgICogQG1lbWJlciB7RmxvYXQzMkFycmF5fVxuICAgICAqL1xuICAgIHRoaXMuY29sb3JzID0gbmV3IEZsb2F0MzJBcnJheShbXG4gICAgICAgIDEsMSwxLDEsXG4gICAgICAgIDEsMSwxLDEsXG4gICAgICAgIDEsMSwxLDEsXG4gICAgICAgIDEsMSwxLDFcbiAgICBdKTtcblxuICAgIC8qXG4gICAgICogQG1lbWJlciB7VWludDE2QXJyYXl9IEFuIGFycmF5IGNvbnRhaW5pbmcgdGhlIGluZGljZXMgb2YgdGhlIHZlcnRpY2VzXG4gICAgICovXG4gICAgdGhpcy5pbmRpY2VzID0gbmV3IFVpbnQxNkFycmF5KFtcbiAgICAgICAgMCwgMSwgMiwgMCwgMywgMlxuICAgIF0pO1xuXG4gICAgLypcbiAgICAgKiBAbWVtYmVyIHtXZWJHTEJ1ZmZlcn0gVGhlIHZlcnRleCBidWZmZXJcbiAgICAgKi9cbiAgICB0aGlzLnZlcnRleEJ1ZmZlciA9IGdsLmNyZWF0ZUJ1ZmZlcigpO1xuXG4gICAgLypcbiAgICAgKiBAbWVtYmVyIHtXZWJHTEJ1ZmZlcn0gVGhlIGluZGV4IGJ1ZmZlclxuICAgICAqL1xuICAgIHRoaXMuaW5kZXhCdWZmZXIgPSBnbC5jcmVhdGVCdWZmZXIoKTtcblxuICAgIGdsLmJpbmRCdWZmZXIoZ2wuQVJSQVlfQlVGRkVSLCB0aGlzLnZlcnRleEJ1ZmZlcik7XG4gICAgZ2wuYnVmZmVyRGF0YShnbC5BUlJBWV9CVUZGRVIsICg4ICsgOCArIDE2KSAqIDQsIGdsLkRZTkFNSUNfRFJBVyk7XG5cbiAgICBnbC5iaW5kQnVmZmVyKGdsLkVMRU1FTlRfQVJSQVlfQlVGRkVSLCB0aGlzLmluZGV4QnVmZmVyKTtcbiAgICBnbC5idWZmZXJEYXRhKGdsLkVMRU1FTlRfQVJSQVlfQlVGRkVSLCB0aGlzLmluZGljZXMsIGdsLlNUQVRJQ19EUkFXKTtcblxuICAgIHRoaXMudXBsb2FkKCk7XG59XG5cblF1YWQucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gUXVhZDtcblxuLyoqXG4gKiBNYXBzIHR3byBSZWN0YW5nbGUgdG8gdGhlIHF1YWRcbiAqIEBwYXJhbSByZWN0IHtQSVhJLlJlY3RhbmdsZX0gdGhlIGZpcnN0IHJlY3RhbmdsZVxuICogQHBhcmFtIHJlY3QyIHtQSVhJLlJlY3RhbmdsZX0gdGhlIHNlY29uZCByZWN0YW5nbGVcbiAqL1xuUXVhZC5wcm90b3R5cGUubWFwID0gZnVuY3Rpb24ocmVjdCwgcmVjdDIpXG57XG4gICAgdmFyIHggPSAwOyAvL3JlY3QyLnggLyByZWN0LndpZHRoO1xuICAgIHZhciB5ID0gMDsgLy9yZWN0Mi55IC8gcmVjdC5oZWlnaHQ7XG5cbiAgICB0aGlzLnV2c1swXSA9IHg7XG4gICAgdGhpcy51dnNbMV0gPSB5O1xuXG4gICAgdGhpcy51dnNbMl0gPSB4ICsgcmVjdDIud2lkdGggLyByZWN0LndpZHRoO1xuICAgIHRoaXMudXZzWzNdID0geTtcblxuICAgIHRoaXMudXZzWzRdID0geCArIHJlY3QyLndpZHRoIC8gcmVjdC53aWR0aDtcbiAgICB0aGlzLnV2c1s1XSA9IHkgKyByZWN0Mi5oZWlnaHQgLyByZWN0LmhlaWdodDtcblxuICAgIHRoaXMudXZzWzZdID0geDtcbiAgICB0aGlzLnV2c1s3XSA9IHkgKyByZWN0Mi5oZWlnaHQgLyByZWN0LmhlaWdodDtcblxuICAgIC8vLyAtLS0tLVxuICAgIHggPSByZWN0Mi54O1xuICAgIHkgPSByZWN0Mi55O1xuXG4gICAgdGhpcy52ZXJ0aWNlc1swXSA9IHg7XG4gICAgdGhpcy52ZXJ0aWNlc1sxXSA9IHk7XG5cbiAgICB0aGlzLnZlcnRpY2VzWzJdID0geCArIHJlY3QyLndpZHRoO1xuICAgIHRoaXMudmVydGljZXNbM10gPSB5O1xuXG4gICAgdGhpcy52ZXJ0aWNlc1s0XSA9IHggKyByZWN0Mi53aWR0aDtcbiAgICB0aGlzLnZlcnRpY2VzWzVdID0geSArIHJlY3QyLmhlaWdodDtcblxuICAgIHRoaXMudmVydGljZXNbNl0gPSB4O1xuICAgIHRoaXMudmVydGljZXNbN10gPSB5ICsgcmVjdDIuaGVpZ2h0O1xuXG4gICAgdGhpcy51cGxvYWQoKTtcbn07XG5cbi8qKlxuICogQmluZHMgdGhlIGJ1ZmZlciBhbmQgdXBsb2FkcyB0aGUgZGF0YVxuICovXG5RdWFkLnByb3RvdHlwZS51cGxvYWQgPSBmdW5jdGlvbigpXG57XG4gICAgdmFyIGdsID0gdGhpcy5nbDtcblxuICAgIC8vIFRPRE8gY291bGQgcHJvYmFibHkgYmUgcHVzaGVkIGludG8gb25lIHVwbG9hZCFcbiAgICBnbC5iaW5kQnVmZmVyKCBnbC5BUlJBWV9CVUZGRVIsIHRoaXMudmVydGV4QnVmZmVyICk7XG5cbiAgICBnbC5idWZmZXJTdWJEYXRhKGdsLkFSUkFZX0JVRkZFUiwgMCwgdGhpcy52ZXJ0aWNlcyk7XG5cbiAgICBnbC5idWZmZXJTdWJEYXRhKGdsLkFSUkFZX0JVRkZFUiwgOCAqIDQsIHRoaXMudXZzKTtcblxuICAgIGdsLmJ1ZmZlclN1YkRhdGEoZ2wuQVJSQVlfQlVGRkVSLCAoOCArIDgpICogNCwgdGhpcy5jb2xvcnMpO1xufTtcblxuUXVhZC5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uKClcbntcbiAgICB2YXIgZ2wgPSB0aGlzLmdsO1xuICAgIFxuICAgICBnbC5kZWxldGVCdWZmZXIodGhpcy52ZXJ0ZXhCdWZmZXIpO1xuICAgICBnbC5kZWxldGVCdWZmZXIodGhpcy5pbmRleEJ1ZmZlcik7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IFF1YWQ7XG5cblxuIiwidmFyIG1hdGggPSByZXF1aXJlKCcuLi8uLi8uLi9tYXRoJyksXG4gICAgdXRpbHMgPSByZXF1aXJlKCcuLi8uLi8uLi91dGlscycpLFxuICAgIENPTlNUID0gcmVxdWlyZSgnLi4vLi4vLi4vY29uc3QnKSxcbiAgICAgICAgXG4gICAgR0xUZXh0dXJlID0gcmVxdWlyZSgncGl4aS1nbC1jb3JlJykuR0xUZXh0dXJlLFxuICAgIEdMRnJhbWVidWZmZXIgPSByZXF1aXJlKCdwaXhpLWdsLWNvcmUnKS5HTEZyYW1lYnVmZmVyLFxuICAgIFxuICAgIFN0ZW5jaWxNYXNrU3RhY2sgPSByZXF1aXJlKCcuL1N0ZW5jaWxNYXNrU3RhY2snKTtcblxuLyoqXG4gKiBAYXV0aG9yIE1hdCBHcm92ZXMgaHR0cDovL21hdGdyb3Zlcy5jb20vIEBEb29ybWF0MjNcbiAqL1xuXG4vKipcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqIEBwYXJhbSBnbCB7V2ViR0xSZW5kZXJpbmdDb250ZXh0fSB0aGUgY3VycmVudCBXZWJHTCBkcmF3aW5nIGNvbnRleHRcbiAqIEBwYXJhbSB3aWR0aCB7bnVtYmVyfSB0aGUgaG9yaXpvbnRhbCByYW5nZSBvZiB0aGUgZmlsdGVyXG4gKiBAcGFyYW0gaGVpZ2h0IHtudW1iZXJ9IHRoZSB2ZXJ0aWNhbCByYW5nZSBvZiB0aGUgZmlsdGVyXG4gKiBAcGFyYW0gc2NhbGVNb2RlIHtudW1iZXJ9IFNlZSB7QGxpbmsgUElYSS5TQ0FMRV9NT0RFU30gZm9yIHBvc3NpYmxlIHZhbHVlc1xuICogQHBhcmFtIHJlc29sdXRpb24ge251bWJlcn0gdGhlIGN1cnJlbnQgcmVzb2x1dGlvblxuICogQHBhcmFtIHJvb3Qge2Jvb2xlYW59IFdoZXRoZXIgdGhpcyBvYmplY3QgaXMgdGhlIHJvb3QgZWxlbWVudCBvciBub3RcbiAqL1xudmFyIFJlbmRlclRhcmdldCA9IGZ1bmN0aW9uKGdsLCB3aWR0aCwgaGVpZ2h0LCBzY2FsZU1vZGUsIHJlc29sdXRpb24sIHJvb3QpXG57XG4gICAgLy9UT0RPIFJlc29sdXRpb24gY291bGQgZ28gaGVyZSAoIGVnIGxvdyByZXMgYmx1cnMgKVxuXG4gICAgLyoqXG4gICAgICogVGhlIGN1cnJlbnQgV2ViR0wgZHJhd2luZyBjb250ZXh0LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7V2ViR0xSZW5kZXJpbmdDb250ZXh0fVxuICAgICAqL1xuICAgIHRoaXMuZ2wgPSBnbDtcblxuICAgIC8vIG5leHQgdGltZSB0byBjcmVhdGUgYSBmcmFtZSBidWZmZXIgYW5kIHRleHR1cmVcblxuICAgIC8qKlxuICAgICAqIEEgZnJhbWUgYnVmZmVyXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtXZWJHTEZyYW1lQnVmZmVyfVxuICAgICAqL1xuICAgIHRoaXMuZnJhbWVCdWZmZXIgPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHRleHR1cmVcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuVGV4dHVyZX1cbiAgICAgKi9cbiAgICB0aGlzLnRleHR1cmUgPSBudWxsO1xuXG4gICAgdGhpcy5jbGVhckNvbG9yID0gWzAsIDAsIDAsIDBdO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHNpemUgb2YgdGhlIG9iamVjdCBhcyBhIHJlY3RhbmdsZVxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5SZWN0YW5nbGV9XG4gICAgICovXG4gICAgdGhpcy5zaXplID0gbmV3IG1hdGguUmVjdGFuZ2xlKDAsIDAsIDEsIDEpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGN1cnJlbnQgcmVzb2x1dGlvblxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMucmVzb2x1dGlvbiA9IHJlc29sdXRpb24gfHwgQ09OU1QuUkVTT0xVVElPTjtcblxuICAgIC8qKlxuICAgICAqIFRoZSBwcm9qZWN0aW9uIG1hdHJpeFxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5NYXRyaXh9XG4gICAgICovXG4gICAgdGhpcy5wcm9qZWN0aW9uTWF0cml4ID0gbmV3IG1hdGguTWF0cml4KCk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgb2JqZWN0J3MgdHJhbnNmb3JtXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLk1hdHJpeH1cbiAgICAgKi9cbiAgICB0aGlzLnRyYW5zZm9ybSA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgZnJhbWUuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlJlY3RhbmdsZX1cbiAgICAgKi9cbiAgICB0aGlzLmZyYW1lID0gbnVsbDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBzdGVuY2lsIGJ1ZmZlciBzdG9yZXMgbWFza2luZyBkYXRhIGZvciB0aGUgcmVuZGVyIHRhcmdldFxuICAgICAqXG4gICAgICogQG1lbWJlciB7V2ViR0xSZW5kZXJCdWZmZXJ9XG4gICAgICovXG4gICAgdGhpcy5zdGVuY2lsQnVmZmVyID0gbnVsbDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBkYXRhIHN0cnVjdHVyZSBmb3IgdGhlIHN0ZW5jaWwgbWFza3NcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuU3RlbmNpbE1hc2tTdGFja31cbiAgICAgKi9cbiAgICB0aGlzLnN0ZW5jaWxNYXNrU3RhY2sgPSBuZXcgU3RlbmNpbE1hc2tTdGFjaygpO1xuXG4gICAgLyoqXG4gICAgICogU3RvcmVzIGZpbHRlciBkYXRhIGZvciB0aGUgcmVuZGVyIHRhcmdldFxuICAgICAqXG4gICAgICogQG1lbWJlciB7b2JqZWN0W119XG4gICAgICovXG4gICAgdGhpcy5maWx0ZXJTdGFjayA9IFtcbiAgICAgICAge1xuICAgICAgICAgICAgcmVuZGVyVGFyZ2V0OnRoaXMsXG4gICAgICAgICAgICBmaWx0ZXI6W10sXG4gICAgICAgICAgICBib3VuZHM6dGhpcy5zaXplXG4gICAgICAgIH1cbiAgICBdO1xuXG5cbiAgICAvKipcbiAgICAgKiBUaGUgc2NhbGUgbW9kZS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCBQSVhJLlNDQUxFX01PREVTLkRFRkFVTFRcbiAgICAgKiBAc2VlIFBJWEkuU0NBTEVfTU9ERVNcbiAgICAgKi9cbiAgICB0aGlzLnNjYWxlTW9kZSA9IHNjYWxlTW9kZSB8fCBDT05TVC5TQ0FMRV9NT0RFUy5ERUZBVUxUO1xuXG4gICAgLyoqXG4gICAgICogV2hldGhlciB0aGlzIG9iamVjdCBpcyB0aGUgcm9vdCBlbGVtZW50IG9yIG5vdFxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKi9cbiAgICB0aGlzLnJvb3QgPSByb290O1xuXG4gICAgdGhpcy5mcmFtZUJ1ZmZlciA9IEdMRnJhbWVidWZmZXIuY3JlYXRlUkdCQShnbCwgMTAwLCAxMDApO1xuICAgIGlmKHRoaXMuZnJhbWVCdWZmZXIpdGhpcy5mcmFtZUJ1ZmZlci51bmJpbmQoKTtcblxuICAgLy8gdGhpcy5mcmFtZUJ1ZmZlciA9IHtmcmFtZWJ1ZmZlcjpudWxsLCBiaW5kOmZ1bmN0aW9uKCl7fSwgY2xlYXI6ZnVuY3Rpb24oKXt9LCByZXNpemU6ZnVuY3Rpb24oKXt9fS8vbmV3IEdMRnJhbWVidWZmZXIuY3JlYXRlUkdCQShnbCwgMTAwLCAxMDApO1xuXG5cblxuICAgIGlmICghdGhpcy5yb290KVxuICAgIHtcbiAgICAgICAgLypcbiAgICAgICAgICAgIEEgZnJhbWUgYnVmZmVyIG5lZWRzIGEgdGFyZ2V0IHRvIHJlbmRlciB0by4uXG4gICAgICAgICAgICBjcmVhdGUgYSB0ZXh0dXJlIGFuZCBiaW5kIGl0IGF0dGFjaCBpdCB0byB0aGUgZnJhbWVidWZmZXIuLlxuICAgICAgICAgKi9cbiAgICAgICAgXG4gICAgICAgIC8vIGNyZWF0ZSBhIHRleHR1cmUgdG8gYmluZCBhdHRhY2ggdG8gdGhlIGZyYW1lQnVmZmVyLi5cbiAgICAgICAgdmFyIHRleHR1cmUgPSBuZXcgR0xUZXh0dXJlKGdsKTtcblxuICAgICAgICB0ZXh0dXJlLmVuYWJsZUxpbmVhclNjYWxpbmcoKVxuICAgICAgICB0ZXh0dXJlLmVuYWJsZVdyYXBDbGFtcCgpXG5cbiAgICAgICAgdGhpcy5mcmFtZUJ1ZmZlci5lbmFibGVUZXh0dXJlKHRleHR1cmUpO1xuXG4gICAgICAgIC8vIFRPRE8gY2hhbmdlIVxuICAgICAgICAvLyB0aGlzIGlzIHVzZWQgYnkgdGhlIGJhc2UgdGV4dHVyZVxuICAgICAgICB0aGlzLnRleHR1cmUgPSB0ZXh0dXJlLnRleHR1cmU7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIC8vIG1ha2UgaXQgYSBudWxsIGZyYW1lYnVmZmVyLi5cbiAgICAgICAgdGhpcy5mcmFtZUJ1ZmZlci5mcmFtZWJ1ZmZlciA9IG51bGw7XG4gICAgfVxuXG4gICAgdGhpcy5yZXNpemUod2lkdGgsIGhlaWdodCk7XG59O1xuXG5SZW5kZXJUYXJnZXQucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gUmVuZGVyVGFyZ2V0O1xubW9kdWxlLmV4cG9ydHMgPSBSZW5kZXJUYXJnZXQ7XG5cbi8qKlxuICogQ2xlYXJzIHRoZSBmaWx0ZXIgdGV4dHVyZS5cbiAqXG4gKiBAcGFyYW0gW2JpbmQ9ZmFsc2VdIHtib29sZWFufSBTaG91bGQgd2UgYmluZCBvdXIgZnJhbWVidWZmZXIgYmVmb3JlIGNsZWFyaW5nP1xuICovXG5SZW5kZXJUYXJnZXQucHJvdG90eXBlLmNsZWFyID0gZnVuY3Rpb24oY2xlYXJDb2xvcilcbntcbiAgICB2YXIgY2MgPSBjbGVhckNvbG9yIHx8IHRoaXMuY2xlYXJDb2xvclxuICAgIHRoaXMuZnJhbWVCdWZmZXIuY2xlYXIoY2NbMF0sY2NbMV0sY2NbMl0sY2NbM10pLy9yLGcsYixhKTtcbn07XG5cbi8qKlxuICogQmluZHMgdGhlIHN0ZW5jaWwgYnVmZmVyLlxuICpcbiAqL1xuUmVuZGVyVGFyZ2V0LnByb3RvdHlwZS5hdHRhY2hTdGVuY2lsQnVmZmVyID0gZnVuY3Rpb24oKVxue1xuICAgIC8vVE9ETyBjaGVjayBpZiBzdGVuY2lsIGlzIGRvbmU/XG4gICAgLyoqXG4gICAgICogVGhlIHN0ZW5jaWwgYnVmZmVyIGlzIHVzZWQgZm9yIG1hc2tpbmcgaW4gcGl4aVxuICAgICAqIGxldHMgY3JlYXRlIG9uZSBhbmQgdGhlbiBhZGQgYXR0YWNoIGl0IHRvIHRoZSBmcmFtZWJ1ZmZlci4uXG4gICAgICovXG4gICAgaWYgKCF0aGlzLnJvb3QpXG4gICAge1xuICAgICAgICB0aGlzLmZyYW1lQnVmZmVyLmVuYWJsZVN0ZW5jaWwoKTtcbiAgICB9XG59O1xuXG4vKipcbiAqIEJpbmRzIHRoZSBidWZmZXJzIGFuZCBpbml0aWFsaXNlcyB0aGUgdmlld3BvcnQuXG4gKlxuICovXG5SZW5kZXJUYXJnZXQucHJvdG90eXBlLmFjdGl2YXRlID0gZnVuY3Rpb24oKVxue1xuICAgIC8vVE9PRCByZWZhY3RvciB1c2FnZSBvZiBmcmFtZS4uXG4gICAgdmFyIGdsID0gdGhpcy5nbDtcblxuICAgIHRoaXMuZnJhbWVCdWZmZXIuYmluZCgpO1xuXG5cbiAgICB2YXIgcHJvamVjdGlvbkZyYW1lID0gdGhpcy5mcmFtZSB8fCB0aGlzLnNpemU7XG5cbiAgICAvLyBUT0RPIGFkZCBhIGRpcnR5IGZsYWcgdG8gdGhpcyBvZiBhIHNldHRlciBmb3IgdGhlIGZyYW1lP1xuICAgIHRoaXMuY2FsY3VsYXRlUHJvamVjdGlvbiggcHJvamVjdGlvbkZyYW1lICk7XG5cbiAgICBpZih0aGlzLnRyYW5zZm9ybSlcbiAgICB7XG4gICAgICAgIHRoaXMucHJvamVjdGlvbk1hdHJpeC5hcHBlbmQodGhpcy50cmFuc2Zvcm0pO1xuICAgIH1cblxuICAgIGdsLnZpZXdwb3J0KDAsMCwgcHJvamVjdGlvbkZyYW1lLndpZHRoICogdGhpcy5yZXNvbHV0aW9uLCBwcm9qZWN0aW9uRnJhbWUuaGVpZ2h0ICogdGhpcy5yZXNvbHV0aW9uKTtcbn07XG5cbi8qKlxuICogVXBkYXRlcyB0aGUgcHJvamVjdGlvbiBtYXRyaXggYmFzZWQgb24gYSBwcm9qZWN0aW9uIGZyYW1lICh3aGljaCBpcyBhIHJlY3RhbmdsZSlcbiAqXG4gKi9cblJlbmRlclRhcmdldC5wcm90b3R5cGUuY2FsY3VsYXRlUHJvamVjdGlvbiA9IGZ1bmN0aW9uIChwcm9qZWN0aW9uRnJhbWUpXG57XG4gICAgdmFyIHBtID0gdGhpcy5wcm9qZWN0aW9uTWF0cml4O1xuXG4gICAgcG0uaWRlbnRpdHkoKTtcblxuICAgIGlmICghdGhpcy5yb290KVxuICAgIHtcbiAgICAgICAgcG0uYSA9IDEgLyBwcm9qZWN0aW9uRnJhbWUud2lkdGgqMjtcbiAgICAgICAgcG0uZCA9IDEgLyBwcm9qZWN0aW9uRnJhbWUuaGVpZ2h0KjI7XG5cbiAgICAgICAgcG0udHggPSAtMSAtIHByb2plY3Rpb25GcmFtZS54ICogcG0uYTtcbiAgICAgICAgcG0udHkgPSAtMSAtIHByb2plY3Rpb25GcmFtZS55ICogcG0uZDtcbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgcG0uYSA9IDEgLyBwcm9qZWN0aW9uRnJhbWUud2lkdGgqMjtcbiAgICAgICAgcG0uZCA9IC0xIC8gcHJvamVjdGlvbkZyYW1lLmhlaWdodCoyO1xuXG4gICAgICAgIHBtLnR4ID0gLTEgLSBwcm9qZWN0aW9uRnJhbWUueCAqIHBtLmE7XG4gICAgICAgIHBtLnR5ID0gMSAtIHByb2plY3Rpb25GcmFtZS55ICogcG0uZDtcbiAgICB9XG59O1xuXG4vKipcbiAqIFJlc2l6ZXMgdGhlIHRleHR1cmUgdG8gdGhlIHNwZWNpZmllZCB3aWR0aCBhbmQgaGVpZ2h0XG4gKlxuICogQHBhcmFtIHdpZHRoIHtOdW1iZXJ9IHRoZSBuZXcgd2lkdGggb2YgdGhlIHRleHR1cmVcbiAqIEBwYXJhbSBoZWlnaHQge051bWJlcn0gdGhlIG5ldyBoZWlnaHQgb2YgdGhlIHRleHR1cmVcbiAqL1xuUmVuZGVyVGFyZ2V0LnByb3RvdHlwZS5yZXNpemUgPSBmdW5jdGlvbiAod2lkdGgsIGhlaWdodClcbntcbiAgICB3aWR0aCA9IHdpZHRoIHwgMDtcbiAgICBoZWlnaHQgPSBoZWlnaHQgfCAwO1xuXG4gICAgaWYgKHRoaXMuc2l6ZS53aWR0aCA9PT0gd2lkdGggJiYgdGhpcy5zaXplLmhlaWdodCA9PT0gaGVpZ2h0KSBcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLnNpemUud2lkdGggPSB3aWR0aDtcbiAgICB0aGlzLnNpemUuaGVpZ2h0ID0gaGVpZ2h0O1xuXG4gICAgdGhpcy5mcmFtZUJ1ZmZlci5yZXNpemUod2lkdGggKiB0aGlzLnJlc29sdXRpb24sIGhlaWdodCAqIHRoaXMucmVzb2x1dGlvbik7XG4gICAgXG4gICAgdmFyIHByb2plY3Rpb25GcmFtZSA9IHRoaXMuZnJhbWUgfHwgdGhpcy5zaXplO1xuXG4gICAgdGhpcy5jYWxjdWxhdGVQcm9qZWN0aW9uKCBwcm9qZWN0aW9uRnJhbWUgKTtcbn07XG5cbi8qKlxuICogRGVzdHJveXMgdGhlIHJlbmRlciB0YXJnZXQuXG4gKlxuICovXG5SZW5kZXJUYXJnZXQucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoKVxue1xuICAgIHZhciBnbCA9IHRoaXMuZ2w7XG4gICAgXG4gICAgdGhpcy5mcmFtZUJ1ZmZlci5kZXN0cm95KCk7XG5cbiAgICB0aGlzLmZyYW1lQnVmZmVyID0gbnVsbDtcbiAgICB0aGlzLnRleHR1cmUgPSBudWxsO1xufTtcbiIsIi8qKlxuICogR2VuZXJpYyBNYXNrIFN0YWNrIGRhdGEgc3RydWN0dXJlXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKi9cbmZ1bmN0aW9uIFN0ZW5jaWxNYXNrU3RhY2soKVxue1xuXHQvKipcbiAgICAgKiBUaGUgYWN0dWFsIHN0YWNrXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHthbnlbXX1cbiAgICAgKi9cbiAgICB0aGlzLnN0ZW5jaWxTdGFjayA9IFtdO1xuXG4gICAgLyoqXG4gICAgICogVE9ETyBAYWx2aW5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICovXG4gICAgdGhpcy5yZXZlcnNlID0gdHJ1ZTtcblxuICAgIC8qKlxuICAgICAqIEludGVybmFsIGNvdW50XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy5jb3VudCA9IDA7XG59XG5cblN0ZW5jaWxNYXNrU3RhY2sucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gU3RlbmNpbE1hc2tTdGFjaztcbm1vZHVsZS5leHBvcnRzID0gU3RlbmNpbE1hc2tTdGFjaztcbiIsIkNPTlNUID0gcmVxdWlyZSgnLi4vLi4vLi4vY29uc3QnKTtcblxuLyoqXG4gKiBNYXBzIGdsIGJsZW5kIGNvbWJpbmF0aW9ucyB0byBXZWJHTFxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICovXG5mdW5jdGlvbiBtYXBXZWJHTEJsZW5kTW9kZXNUb1BpeGkoZ2wsIG9iamVjdClcbntcbiAgICBvYmplY3QgPSBvYmplY3QgfHwge307XG5cbiAgICAvL1RPRE8gLSBwcmVtdWx0aXBseSBhbHBoYSB3b3VsZCBiZSBkaWZmZXJlbnQuXG4gICAgLy9hZGQgYSBib29sZWFuIGZvciB0aGF0IVxuICAgIG9iamVjdFtDT05TVC5CTEVORF9NT0RFUy5OT1JNQUxdICAgICAgICA9IFtnbC5PTkUsICAgICAgIGdsLk9ORV9NSU5VU19TUkNfQUxQSEFdO1xuICAgIG9iamVjdFtDT05TVC5CTEVORF9NT0RFUy5BRERdICAgICAgICAgICA9IFtnbC5TUkNfQUxQSEEsIGdsLkRTVF9BTFBIQV07XG4gICAgb2JqZWN0W0NPTlNULkJMRU5EX01PREVTLk1VTFRJUExZXSAgICAgID0gW2dsLkRTVF9DT0xPUiwgZ2wuT05FX01JTlVTX1NSQ19BTFBIQV07XG4gICAgb2JqZWN0W0NPTlNULkJMRU5EX01PREVTLlNDUkVFTl0gICAgICAgID0gW2dsLlNSQ19BTFBIQSwgZ2wuT05FXTtcbiAgICBvYmplY3RbQ09OU1QuQkxFTkRfTU9ERVMuT1ZFUkxBWV0gICAgICAgPSBbZ2wuT05FLCAgICAgICBnbC5PTkVfTUlOVVNfU1JDX0FMUEhBXTtcbiAgICBvYmplY3RbQ09OU1QuQkxFTkRfTU9ERVMuREFSS0VOXSAgICAgICAgPSBbZ2wuT05FLCAgICAgICBnbC5PTkVfTUlOVVNfU1JDX0FMUEhBXTtcbiAgICBvYmplY3RbQ09OU1QuQkxFTkRfTU9ERVMuTElHSFRFTl0gICAgICAgPSBbZ2wuT05FLCAgICAgICBnbC5PTkVfTUlOVVNfU1JDX0FMUEhBXTtcbiAgICBvYmplY3RbQ09OU1QuQkxFTkRfTU9ERVMuQ09MT1JfRE9ER0VdICAgPSBbZ2wuT05FLCAgICAgICBnbC5PTkVfTUlOVVNfU1JDX0FMUEhBXTtcbiAgICBvYmplY3RbQ09OU1QuQkxFTkRfTU9ERVMuQ09MT1JfQlVSTl0gICAgPSBbZ2wuT05FLCAgICAgICBnbC5PTkVfTUlOVVNfU1JDX0FMUEhBXTtcbiAgICBvYmplY3RbQ09OU1QuQkxFTkRfTU9ERVMuSEFSRF9MSUdIVF0gICAgPSBbZ2wuT05FLCAgICAgICBnbC5PTkVfTUlOVVNfU1JDX0FMUEhBXTtcbiAgICBvYmplY3RbQ09OU1QuQkxFTkRfTU9ERVMuU09GVF9MSUdIVF0gICAgPSBbZ2wuT05FLCAgICAgICBnbC5PTkVfTUlOVVNfU1JDX0FMUEhBXTtcbiAgICBvYmplY3RbQ09OU1QuQkxFTkRfTU9ERVMuRElGRkVSRU5DRV0gICAgPSBbZ2wuT05FLCAgICAgICBnbC5PTkVfTUlOVVNfU1JDX0FMUEhBXTtcbiAgICBvYmplY3RbQ09OU1QuQkxFTkRfTU9ERVMuRVhDTFVTSU9OXSAgICAgPSBbZ2wuT05FLCAgICAgICBnbC5PTkVfTUlOVVNfU1JDX0FMUEhBXTtcbiAgICBvYmplY3RbQ09OU1QuQkxFTkRfTU9ERVMuSFVFXSAgICAgICAgICAgPSBbZ2wuT05FLCAgICAgICBnbC5PTkVfTUlOVVNfU1JDX0FMUEhBXTtcbiAgICBvYmplY3RbQ09OU1QuQkxFTkRfTU9ERVMuU0FUVVJBVElPTl0gICAgPSBbZ2wuT05FLCAgICAgICBnbC5PTkVfTUlOVVNfU1JDX0FMUEhBXTtcbiAgICBvYmplY3RbQ09OU1QuQkxFTkRfTU9ERVMuQ09MT1JdICAgICAgICAgPSBbZ2wuT05FLCAgICAgICBnbC5PTkVfTUlOVVNfU1JDX0FMUEhBXTtcbiAgICBvYmplY3RbQ09OU1QuQkxFTkRfTU9ERVMuTFVNSU5PU0lUWV0gICAgPSBbZ2wuT05FLCAgICAgICBnbC5PTkVfTUlOVVNfU1JDX0FMUEhBXTtcblxuICAgIHJldHVybiBvYmplY3Q7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gbWFwV2ViR0xCbGVuZE1vZGVzVG9QaXhpO1xuIiwiQ09OU1QgPSByZXF1aXJlKCcuLi8uLi8uLi9jb25zdCcpO1xuXG4vKipcbiAqIEdlbmVyaWMgTWFzayBTdGFjayBkYXRhIHN0cnVjdHVyZVxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICovXG5mdW5jdGlvbiBtYXBXZWJHTERyYXdNb2Rlc1RvUGl4aShnbCwgb2JqZWN0KVxue1xuXHRvYmplY3Q9IG9iamVjdCB8fCB7fTtcblxuICAgIG9iamVjdFtDT05TVC5EUkFXX01PREVTLlBPSU5UU10gICAgICAgICA9IGdsLlBPSU5UUztcbiAgICBvYmplY3RbQ09OU1QuRFJBV19NT0RFUy5MSU5FU10gICAgICAgICAgPSBnbC5MSU5FUztcbiAgICBvYmplY3RbQ09OU1QuRFJBV19NT0RFUy5MSU5FX0xPT1BdICAgICAgPSBnbC5MSU5FX0xPT1A7XG4gICAgb2JqZWN0W0NPTlNULkRSQVdfTU9ERVMuTElORV9TVFJJUF0gICAgID0gZ2wuTElORV9TVFJJUDtcbiAgICBvYmplY3RbQ09OU1QuRFJBV19NT0RFUy5UUklBTkdMRVNdICAgICAgPSBnbC5UUklBTkdMRVM7XG4gICAgb2JqZWN0W0NPTlNULkRSQVdfTU9ERVMuVFJJQU5HTEVfU1RSSVBdID0gZ2wuVFJJQU5HTEVfU1RSSVA7XG4gICAgb2JqZWN0W0NPTlNULkRSQVdfTU9ERVMuVFJJQU5HTEVfRkFOXSAgID0gZ2wuVFJJQU5HTEVfRkFOO1xuXG59XG5cbm1vZHVsZS5leHBvcnRzID0gbWFwV2ViR0xEcmF3TW9kZXNUb1BpeGk7XG4iLCJ2YXIgbWF0aCA9IHJlcXVpcmUoJy4uL21hdGgnKSxcbiAgICBUZXh0dXJlID0gcmVxdWlyZSgnLi4vdGV4dHVyZXMvVGV4dHVyZScpLFxuICAgIENvbnRhaW5lciA9IHJlcXVpcmUoJy4uL2Rpc3BsYXkvQ29udGFpbmVyJyksXG4gICAgQ2FudmFzVGludGVyID0gcmVxdWlyZSgnLi4vcmVuZGVyZXJzL2NhbnZhcy91dGlscy9DYW52YXNUaW50ZXInKSxcbiAgICB1dGlscyA9IHJlcXVpcmUoJy4uL3V0aWxzJyksXG4gICAgQ09OU1QgPSByZXF1aXJlKCcuLi9jb25zdCcpLFxuICAgIHRlbXBQb2ludCA9IG5ldyBtYXRoLlBvaW50KCk7XG5cbi8qKlxuICogVGhlIFNwcml0ZSBvYmplY3QgaXMgdGhlIGJhc2UgZm9yIGFsbCB0ZXh0dXJlZCBvYmplY3RzIHRoYXQgYXJlIHJlbmRlcmVkIHRvIHRoZSBzY3JlZW5cbiAqXG4gKiBBIHNwcml0ZSBjYW4gYmUgY3JlYXRlZCBkaXJlY3RseSBmcm9tIGFuIGltYWdlIGxpa2UgdGhpczpcbiAqXG4gKiBgYGBqc1xuICogdmFyIHNwcml0ZSA9IG5ldyBQSVhJLlNwcml0ZS5mcm9tSW1hZ2UoJ2Fzc2V0cy9pbWFnZS5wbmcnKTtcbiAqIGBgYFxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5Db250YWluZXJcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gdGV4dHVyZSB7UElYSS5UZXh0dXJlfSBUaGUgdGV4dHVyZSBmb3IgdGhpcyBzcHJpdGVcbiAqL1xuZnVuY3Rpb24gU3ByaXRlKHRleHR1cmUpXG57XG4gICAgQ29udGFpbmVyLmNhbGwodGhpcyk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYW5jaG9yIHNldHMgdGhlIG9yaWdpbiBwb2ludCBvZiB0aGUgdGV4dHVyZS5cbiAgICAgKiBUaGUgZGVmYXVsdCBpcyAwLDAgdGhpcyBtZWFucyB0aGUgdGV4dHVyZSdzIG9yaWdpbiBpcyB0aGUgdG9wIGxlZnRcbiAgICAgKiBTZXR0aW5nIHRoZSBhbmNob3IgdG8gMC41LDAuNSBtZWFucyB0aGUgdGV4dHVyZSdzIG9yaWdpbiBpcyBjZW50ZXJlZFxuICAgICAqIFNldHRpbmcgdGhlIGFuY2hvciB0byAxLDEgd291bGQgbWVhbiB0aGUgdGV4dHVyZSdzIG9yaWdpbiBwb2ludCB3aWxsIGJlIHRoZSBib3R0b20gcmlnaHQgY29ybmVyXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlBvaW50fVxuICAgICAqL1xuICAgIHRoaXMuYW5jaG9yID0gbmV3IG1hdGguUG9pbnQoKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSB0ZXh0dXJlIHRoYXQgdGhlIHNwcml0ZSBpcyB1c2luZ1xuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5UZXh0dXJlfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fdGV4dHVyZSA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgd2lkdGggb2YgdGhlIHNwcml0ZSAodGhpcyBpcyBpbml0aWFsbHkgc2V0IGJ5IHRoZSB0ZXh0dXJlKVxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fd2lkdGggPSAwO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGhlaWdodCBvZiB0aGUgc3ByaXRlICh0aGlzIGlzIGluaXRpYWxseSBzZXQgYnkgdGhlIHRleHR1cmUpXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9oZWlnaHQgPSAwO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHRpbnQgYXBwbGllZCB0byB0aGUgc3ByaXRlLiBUaGlzIGlzIGEgaGV4IHZhbHVlLiBBIHZhbHVlIG9mIDB4RkZGRkZGIHdpbGwgcmVtb3ZlIGFueSB0aW50IGVmZmVjdC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAweEZGRkZGRlxuICAgICAqL1xuICAgIHRoaXMudGludCA9IDB4RkZGRkZGO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGJsZW5kIG1vZGUgdG8gYmUgYXBwbGllZCB0byB0aGUgc3ByaXRlLiBBcHBseSBhIHZhbHVlIG9mIGBQSVhJLkJMRU5EX01PREVTLk5PUk1BTGAgdG8gcmVzZXQgdGhlIGJsZW5kIG1vZGUuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgUElYSS5CTEVORF9NT0RFUy5OT1JNQUxcbiAgICAgKiBAc2VlIFBJWEkuQkxFTkRfTU9ERVNcbiAgICAgKi9cbiAgICB0aGlzLmJsZW5kTW9kZSA9IENPTlNULkJMRU5EX01PREVTLk5PUk1BTDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBzaGFkZXIgdGhhdCB3aWxsIGJlIHVzZWQgdG8gcmVuZGVyIHRoZSBzcHJpdGUuIFNldCB0byBudWxsIHRvIHJlbW92ZSBhIGN1cnJlbnQgc2hhZGVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5BYnN0cmFjdEZpbHRlcnxQSVhJLlNoYWRlcn1cbiAgICAgKi9cbiAgICB0aGlzLnNoYWRlciA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBBbiBpbnRlcm5hbCBjYWNoZWQgdmFsdWUgb2YgdGhlIHRpbnQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMHhGRkZGRkZcbiAgICAgKi9cbiAgICB0aGlzLmNhY2hlZFRpbnQgPSAweEZGRkZGRjtcblxuICAgIC8vIGNhbGwgdGV4dHVyZSBzZXR0ZXJcbiAgICB0aGlzLnRleHR1cmUgPSB0ZXh0dXJlIHx8IFRleHR1cmUuRU1QVFk7XG4gICAgdGhpcy50ZXh0dXJlRGlydHkgPSB0cnVlXG4gICAgdGhpcy52ZXJ0ZXhEaXJ0eSA9IHRydWU7XG4gICAgdGhpcy52ZXJ0ZXhEYXRhID0gbmV3IEZsb2F0MzJBcnJheSg4KTtcbn1cblxuLy8gY29uc3RydWN0b3JcblNwcml0ZS5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKENvbnRhaW5lci5wcm90b3R5cGUpO1xuU3ByaXRlLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFNwcml0ZTtcbm1vZHVsZS5leHBvcnRzID0gU3ByaXRlO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhTcHJpdGUucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogVGhlIHdpZHRoIG9mIHRoZSBzcHJpdGUsIHNldHRpbmcgdGhpcyB3aWxsIGFjdHVhbGx5IG1vZGlmeSB0aGUgc2NhbGUgdG8gYWNoaWV2ZSB0aGUgdmFsdWUgc2V0XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuU3ByaXRlI1xuICAgICAqL1xuICAgIHdpZHRoOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIE1hdGguYWJzKHRoaXMuc2NhbGUueCkgKiB0aGlzLnRleHR1cmUuX2ZyYW1lLndpZHRoO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdmFyIHNpZ24gPSB1dGlscy5zaWduKHRoaXMuc2NhbGUueCkgfHwgMTtcbiAgICAgICAgICAgIHRoaXMuc2NhbGUueCA9IHNpZ24gKiB2YWx1ZSAvIHRoaXMudGV4dHVyZS5fZnJhbWUud2lkdGg7XG4gICAgICAgICAgICB0aGlzLl93aWR0aCA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFRoZSBoZWlnaHQgb2YgdGhlIHNwcml0ZSwgc2V0dGluZyB0aGlzIHdpbGwgYWN0dWFsbHkgbW9kaWZ5IHRoZSBzY2FsZSB0byBhY2hpZXZlIHRoZSB2YWx1ZSBzZXRcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5TcHJpdGUjXG4gICAgICovXG4gICAgaGVpZ2h0OiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuICBNYXRoLmFicyh0aGlzLnNjYWxlLnkpICogdGhpcy50ZXh0dXJlLl9mcmFtZS5oZWlnaHQ7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB2YXIgc2lnbiA9IHV0aWxzLnNpZ24odGhpcy5zY2FsZS55KSB8fCAxO1xuICAgICAgICAgICAgdGhpcy5zY2FsZS55ID0gc2lnbiAqIHZhbHVlIC8gdGhpcy50ZXh0dXJlLl9mcmFtZS5oZWlnaHQ7XG4gICAgICAgICAgICB0aGlzLl9oZWlnaHQgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBUaGUgdGV4dHVyZSB0aGF0IHRoZSBzcHJpdGUgaXMgdXNpbmdcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuVGV4dHVyZX1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5TcHJpdGUjXG4gICAgICovXG4gICAgdGV4dHVyZToge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiAgdGhpcy5fdGV4dHVyZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGlmICh0aGlzLl90ZXh0dXJlID09PSB2YWx1ZSlcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuX3RleHR1cmUgPSB2YWx1ZTtcbiAgICAgICAgICAgIHRoaXMuY2FjaGVkVGludCA9IDB4RkZGRkZGO1xuXG4gICAgICAgICAgICB0aGlzLnRleHR1cmVEaXJ0eSA9IHRydWU7XG5cbiAgICAgICAgICAgIGlmICh2YWx1ZSlcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAvLyB3YWl0IGZvciB0aGUgdGV4dHVyZSB0byBsb2FkXG4gICAgICAgICAgICAgICAgaWYgKHZhbHVlLmJhc2VUZXh0dXJlLmhhc0xvYWRlZClcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX29uVGV4dHVyZVVwZGF0ZSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICB2YWx1ZS5vbmNlKCd1cGRhdGUnLCB0aGlzLl9vblRleHR1cmVVcGRhdGUsIHRoaXMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn0pO1xuXG4vKipcbiAqIFdoZW4gdGhlIHRleHR1cmUgaXMgdXBkYXRlZCwgdGhpcyBldmVudCB3aWxsIGZpcmUgdG8gdXBkYXRlIHRoZSBzY2FsZSBhbmQgZnJhbWVcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5TcHJpdGUucHJvdG90eXBlLl9vblRleHR1cmVVcGRhdGUgPSBmdW5jdGlvbiAoKVxue1xuICAgIHRoaXMudGV4dHVyZURpcnR5ID0gdHJ1ZTtcblxuICAgIC8vIHNvIGlmIF93aWR0aCBpcyAwIHRoZW4gd2lkdGggd2FzIG5vdCBzZXQuLlxuICAgIGlmICh0aGlzLl93aWR0aClcbiAgICB7XG4gICAgICAgIHRoaXMuc2NhbGUueCA9IHV0aWxzLnNpZ24odGhpcy5zY2FsZS54KSAqIHRoaXMuX3dpZHRoIC8gdGhpcy50ZXh0dXJlLmZyYW1lLndpZHRoO1xuICAgIH1cblxuICAgIGlmICh0aGlzLl9oZWlnaHQpXG4gICAge1xuICAgICAgICB0aGlzLnNjYWxlLnkgPSB1dGlscy5zaWduKHRoaXMuc2NhbGUueSkgKiB0aGlzLl9oZWlnaHQgLyB0aGlzLnRleHR1cmUuZnJhbWUuaGVpZ2h0O1xuICAgIH1cbn07XG5cblNwcml0ZS5wcm90b3R5cGUuY2FjbHVsYXRlVmVydGljZXMgPSBmdW5jdGlvbiAoKVxue1xuXG4gICAgdmFyIHRleHR1cmUgPSB0aGlzLl90ZXh0dXJlLFxuICAgICAgICB3dCA9IHRoaXMud29ybGRUcmFuc2Zvcm0sXG4gICAgICAgIGEgPSB3dC5hLCBiID0gd3QuYiwgYyA9IHd0LmMsIGQgPSB3dC5kLCB0eCA9IHd0LnR4LCB0eSA9IHd0LnR5LFxuICAgICAgICB2ZXJ0ZXhEYXRhID0gdGhpcy52ZXJ0ZXhEYXRhLFxuICAgICAgICB3MCwgdzEsIGgwLCBoMSxcbiAgICAgICAgdHJpbSA9IHRleHR1cmUudHJpbTtcbiAgICBcbiAgICBpZiAodHJpbSlcbiAgICB7XG4gICAgICAgIC8vIGlmIHRoZSBzcHJpdGUgaXMgdHJpbW1lZCBhbmQgaXMgbm90IGEgdGlsaW5nc3ByaXRlIHRoZW4gd2UgbmVlZCB0byBhZGQgdGhlIGV4dHJhIHNwYWNlIGJlZm9yZSB0cmFuc2Zvcm1pbmcgdGhlIHNwcml0ZSBjb29yZHMuLlxuICAgICAgICB3MSA9IHRyaW0ueCAtIHRoaXMuYW5jaG9yLnggKiB0cmltLndpZHRoO1xuICAgICAgICB3MCA9IHcxICsgdGV4dHVyZS5jcm9wLndpZHRoO1xuXG4gICAgICAgIGgxID0gdHJpbS55IC0gdGhpcy5hbmNob3IueSAqIHRyaW0uaGVpZ2h0O1xuICAgICAgICBoMCA9IGgxICsgdGV4dHVyZS5jcm9wLmhlaWdodDtcblxuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICB3MCA9ICh0ZXh0dXJlLl9mcmFtZS53aWR0aCApICogKDEtdGhpcy5hbmNob3IueCk7XG4gICAgICAgIHcxID0gKHRleHR1cmUuX2ZyYW1lLndpZHRoICkgKiAtdGhpcy5hbmNob3IueDtcblxuICAgICAgICBoMCA9IHRleHR1cmUuX2ZyYW1lLmhlaWdodCAqICgxLXRoaXMuYW5jaG9yLnkpO1xuICAgICAgICBoMSA9IHRleHR1cmUuX2ZyYW1lLmhlaWdodCAqIC10aGlzLmFuY2hvci55O1xuICAgIH1cblxuICAgIC8vIHh5XG4gICAgdmVydGV4RGF0YVswXSA9IGEgKiB3MSArIGMgKiBoMSArIHR4O1xuICAgIHZlcnRleERhdGFbMV0gPSBkICogaDEgKyBiICogdzEgKyB0eTtcblxuICAgIC8vIHh5XG4gICAgdmVydGV4RGF0YVsyXSA9IGEgKiB3MCArIGMgKiBoMSArIHR4O1xuICAgIHZlcnRleERhdGFbM10gPSBkICogaDEgKyBiICogdzAgKyB0eTtcblxuICAgICAvLyB4eVxuICAgIHZlcnRleERhdGFbNF0gPSBhICogdzAgKyBjICogaDAgKyB0eDtcbiAgICB2ZXJ0ZXhEYXRhWzVdID0gZCAqIGgwICsgYiAqIHcwICsgdHk7XG5cbiAgICAvLyB4eVxuICAgIHZlcnRleERhdGFbNl0gPSBhICogdzEgKyBjICogaDAgKyB0eDtcbiAgICB2ZXJ0ZXhEYXRhWzddID0gZCAqIGgwICsgYiAqIHcxICsgdHk7XG5cblxufVxuXG4vKipcbipcbiogUmVuZGVycyB0aGUgb2JqZWN0IHVzaW5nIHRoZSBXZWJHTCByZW5kZXJlclxuKlxuKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcn1cbiogQHByaXZhdGVcbiovXG5TcHJpdGUucHJvdG90eXBlLl9yZW5kZXJXZWJHTCA9IGZ1bmN0aW9uIChyZW5kZXJlcilcbntcbiAgICBpZih0aGlzLnRleHR1cmVEaXJ0eSlcbiAgICB7XG4gICAgICAgIHRoaXMudGV4dHVyZURpcnR5ID0gZmFsc2U7XG5cbiAgICAgICAgdGhpcy5fb25UZXh0dXJlVXBkYXRlKCk7XG4gICAgICAgIFxuICAgICAgICB0aGlzLnZlcnRleERpcnR5ID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBpZih0aGlzLnZlcnRleERpcnR5KVxuICAgIHtcbiAgICAgICAgdGhpcy52ZXJ0ZXhEaXJ0eSA9IGZhbHNlO1xuXG4gICAgICAgIC8vIHNldCB0aGUgdmVydGV4IGRhdGFcbiAgICAgICAgdGhpcy5jYWNsdWxhdGVWZXJ0aWNlcygpO1xuXG4gICAgfVxuICAgIFxuICAgIHJlbmRlcmVyLnNldE9iamVjdFJlbmRlcmVyKHJlbmRlcmVyLnBsdWdpbnMuc3ByaXRlKTtcbiAgICByZW5kZXJlci5wbHVnaW5zLnNwcml0ZS5yZW5kZXIodGhpcyk7XG59O1xuXG4vKipcbiAqIFJldHVybnMgdGhlIGJvdW5kcyBvZiB0aGUgU3ByaXRlIGFzIGEgcmVjdGFuZ2xlLiBUaGUgYm91bmRzIGNhbGN1bGF0aW9uIHRha2VzIHRoZSB3b3JsZFRyYW5zZm9ybSBpbnRvIGFjY291bnQuXG4gKlxuICogQHBhcmFtIG1hdHJpeCB7UElYSS5NYXRyaXh9IHRoZSB0cmFuc2Zvcm1hdGlvbiBtYXRyaXggb2YgdGhlIHNwcml0ZVxuICogQHJldHVybiB7UElYSS5SZWN0YW5nbGV9IHRoZSBmcmFtaW5nIHJlY3RhbmdsZVxuICovXG5TcHJpdGUucHJvdG90eXBlLmdldEJvdW5kcyA9IGZ1bmN0aW9uIChtYXRyaXgpXG57XG4gICAgaWYoIXRoaXMuX2N1cnJlbnRCb3VuZHMpXG4gICAge1xuICAgICAgICBpZih0aGlzLnZlcnRleERpcnR5KVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnZlcnRleERpcnR5ID0gZmFsc2U7XG5cbiAgICAgICAgICAgIC8vIHNldCB0aGUgdmVydGV4IGRhdGFcbiAgICAgICAgICAgIHRoaXMuY2FjbHVsYXRlVmVydGljZXMoKTtcblxuICAgICAgICB9XG5cbiAgICAgICAgdmFyIG1pblgsXG4gICAgICAgICAgICBtYXhYLFxuICAgICAgICAgICAgbWluWSxcbiAgICAgICAgICAgIG1heFksXG4gICAgICAgICAgICB2ZXJ0ZXhEYXRhID0gdGhpcy52ZXJ0ZXhEYXRhO1xuXG4gICAgICAgIHZhciB4MSA9IHZlcnRleERhdGFbMF1cbiAgICAgICAgdmFyIHkxID0gdmVydGV4RGF0YVsxXVxuXG4gICAgICAgIHZhciB4MiA9IHZlcnRleERhdGFbMl1cbiAgICAgICAgdmFyIHkyID0gdmVydGV4RGF0YVszXVxuXG4gICAgICAgIHZhciB4MyA9IHZlcnRleERhdGFbNF1cbiAgICAgICAgdmFyIHkzID0gdmVydGV4RGF0YVs1XVxuXG4gICAgICAgIHZhciB4NCA9IHZlcnRleERhdGFbNl1cbiAgICAgICAgdmFyIHk0ID0gdmVydGV4RGF0YVs3XVxuXG4gICAgICAgIG1pblggPSB4MTtcbiAgICAgICAgbWluWCA9IHgyIDwgbWluWCA/IHgyIDogbWluWDtcbiAgICAgICAgbWluWCA9IHgzIDwgbWluWCA/IHgzIDogbWluWDtcbiAgICAgICAgbWluWCA9IHg0IDwgbWluWCA/IHg0IDogbWluWDtcblxuICAgICAgICBtaW5ZID0geTE7XG4gICAgICAgIG1pblkgPSB5MiA8IG1pblkgPyB5MiA6IG1pblk7XG4gICAgICAgIG1pblkgPSB5MyA8IG1pblkgPyB5MyA6IG1pblk7XG4gICAgICAgIG1pblkgPSB5NCA8IG1pblkgPyB5NCA6IG1pblk7XG5cbiAgICAgICAgbWF4WCA9IHgxO1xuICAgICAgICBtYXhYID0geDIgPiBtYXhYID8geDIgOiBtYXhYO1xuICAgICAgICBtYXhYID0geDMgPiBtYXhYID8geDMgOiBtYXhYO1xuICAgICAgICBtYXhYID0geDQgPiBtYXhYID8geDQgOiBtYXhYO1xuXG4gICAgICAgIG1heFkgPSB5MTtcbiAgICAgICAgbWF4WSA9IHkyID4gbWF4WSA/IHkyIDogbWF4WTtcbiAgICAgICAgbWF4WSA9IHkzID4gbWF4WSA/IHkzIDogbWF4WTtcbiAgICAgICAgbWF4WSA9IHk0ID4gbWF4WSA/IHk0IDogbWF4WTtcblxuICAgICAgICAvLyBjaGVjayBmb3IgY2hpbGRyZW5cbiAgICAgICAgaWYodGhpcy5jaGlsZHJlbi5sZW5ndGgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHZhciBjaGlsZEJvdW5kcyA9IHRoaXMuY29udGFpbmVyR2V0Qm91bmRzKCk7XG5cbiAgICAgICAgICAgIHcwID0gY2hpbGRCb3VuZHMueDtcbiAgICAgICAgICAgIHcxID0gY2hpbGRCb3VuZHMueCArIGNoaWxkQm91bmRzLndpZHRoO1xuICAgICAgICAgICAgaDAgPSBjaGlsZEJvdW5kcy55O1xuICAgICAgICAgICAgaDEgPSBjaGlsZEJvdW5kcy55ICsgY2hpbGRCb3VuZHMuaGVpZ2h0O1xuXG4gICAgICAgICAgICBtaW5YID0gKG1pblggPCB3MCkgPyBtaW5YIDogdzA7XG4gICAgICAgICAgICBtaW5ZID0gKG1pblkgPCBoMCkgPyBtaW5ZIDogaDA7XG5cbiAgICAgICAgICAgIG1heFggPSAobWF4WCA+IHcxKSA/IG1heFggOiB3MTtcbiAgICAgICAgICAgIG1heFkgPSAobWF4WSA+IGgxKSA/IG1heFkgOiBoMTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBib3VuZHMgPSB0aGlzLl9ib3VuZHM7XG5cbiAgICAgICAgYm91bmRzLnggPSBtaW5YO1xuICAgICAgICBib3VuZHMud2lkdGggPSBtYXhYIC0gbWluWDtcblxuICAgICAgICBib3VuZHMueSA9IG1pblk7XG4gICAgICAgIGJvdW5kcy5oZWlnaHQgPSBtYXhZIC0gbWluWTtcblxuICAgICAgICAvLyBzdG9yZSBhIHJlZmVyZW5jZSBzbyB0aGF0IGlmIHRoaXMgZnVuY3Rpb24gZ2V0cyBjYWxsZWQgYWdhaW4gaW4gdGhlIHJlbmRlciBjeWNsZSB3ZSBkbyBub3QgaGF2ZSB0byByZWNhbGN1bGF0ZVxuICAgICAgICB0aGlzLl9jdXJyZW50Qm91bmRzID0gYm91bmRzO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLl9jdXJyZW50Qm91bmRzO1xufTtcblxuLyoqXG4gKiBHZXRzIHRoZSBsb2NhbCBib3VuZHMgb2YgdGhlIHNwcml0ZSBvYmplY3QuXG4gKlxuICovXG5TcHJpdGUucHJvdG90eXBlLmdldExvY2FsQm91bmRzID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLl9ib3VuZHMueCA9IC10aGlzLl90ZXh0dXJlLl9mcmFtZS53aWR0aCAqIHRoaXMuYW5jaG9yLng7XG4gICAgdGhpcy5fYm91bmRzLnkgPSAtdGhpcy5fdGV4dHVyZS5fZnJhbWUuaGVpZ2h0ICogdGhpcy5hbmNob3IueTtcbiAgICB0aGlzLl9ib3VuZHMud2lkdGggPSB0aGlzLl90ZXh0dXJlLl9mcmFtZS53aWR0aDtcbiAgICB0aGlzLl9ib3VuZHMuaGVpZ2h0ID0gdGhpcy5fdGV4dHVyZS5fZnJhbWUuaGVpZ2h0O1xuICAgIHJldHVybiB0aGlzLl9ib3VuZHM7XG59O1xuXG4vKipcbiogVGVzdHMgaWYgYSBwb2ludCBpcyBpbnNpZGUgdGhpcyBzcHJpdGVcbipcbiogQHBhcmFtIHBvaW50IHtQSVhJLlBvaW50fSB0aGUgcG9pbnQgdG8gdGVzdFxuKiBAcmV0dXJuIHtib29sZWFufSB0aGUgcmVzdWx0IG9mIHRoZSB0ZXN0XG4qL1xuU3ByaXRlLnByb3RvdHlwZS5jb250YWluc1BvaW50ID0gZnVuY3Rpb24oIHBvaW50IClcbntcbiAgICB0aGlzLndvcmxkVHJhbnNmb3JtLmFwcGx5SW52ZXJzZShwb2ludCwgIHRlbXBQb2ludCk7XG5cbiAgICB2YXIgd2lkdGggPSB0aGlzLl90ZXh0dXJlLl9mcmFtZS53aWR0aDtcbiAgICB2YXIgaGVpZ2h0ID0gdGhpcy5fdGV4dHVyZS5fZnJhbWUuaGVpZ2h0O1xuICAgIHZhciB4MSA9IC13aWR0aCAqIHRoaXMuYW5jaG9yLng7XG4gICAgdmFyIHkxO1xuXG4gICAgaWYgKCB0ZW1wUG9pbnQueCA+IHgxICYmIHRlbXBQb2ludC54IDwgeDEgKyB3aWR0aCApXG4gICAge1xuICAgICAgICB5MSA9IC1oZWlnaHQgKiB0aGlzLmFuY2hvci55O1xuXG4gICAgICAgIGlmICggdGVtcFBvaW50LnkgPiB5MSAmJiB0ZW1wUG9pbnQueSA8IHkxICsgaGVpZ2h0IClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2U7XG59O1xuXG4vKipcbiogUmVuZGVycyB0aGUgb2JqZWN0IHVzaW5nIHRoZSBDYW52YXMgcmVuZGVyZXJcbipcbiogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLkNhbnZhc1JlbmRlcmVyfSBUaGUgcmVuZGVyZXJcbiogQHByaXZhdGVcbiovXG5TcHJpdGUucHJvdG90eXBlLl9yZW5kZXJDYW52YXMgPSBmdW5jdGlvbiAocmVuZGVyZXIpXG57XG4gICAgaWYgKHRoaXMudGV4dHVyZS5jcm9wLndpZHRoIDw9IDAgfHwgdGhpcy50ZXh0dXJlLmNyb3AuaGVpZ2h0IDw9IDApXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFyIGNvbXBvc2l0ZU9wZXJhdGlvbiA9IHJlbmRlcmVyLmJsZW5kTW9kZXNbdGhpcy5ibGVuZE1vZGVdO1xuICAgIGlmIChjb21wb3NpdGVPcGVyYXRpb24gIT09IHJlbmRlcmVyLmNvbnRleHQuZ2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uKVxuICAgIHtcbiAgICAgICAgcmVuZGVyZXIuY29udGV4dC5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb24gPSBjb21wb3NpdGVPcGVyYXRpb247XG4gICAgfVxuXG4gICAgLy8gIElnbm9yZSBudWxsIHNvdXJjZXNcbiAgICBpZiAodGhpcy50ZXh0dXJlLnZhbGlkKVxuICAgIHtcbiAgICAgICAgdmFyIHRleHR1cmUgPSB0aGlzLl90ZXh0dXJlLFxuICAgICAgICAgICAgd3QgPSB0aGlzLndvcmxkVHJhbnNmb3JtLFxuICAgICAgICAgICAgZHgsXG4gICAgICAgICAgICBkeSxcbiAgICAgICAgICAgIHdpZHRoLFxuICAgICAgICAgICAgaGVpZ2h0O1xuXG4gICAgICAgIHJlbmRlcmVyLmNvbnRleHQuZ2xvYmFsQWxwaGEgPSB0aGlzLndvcmxkQWxwaGE7XG5cbiAgICAgICAgLy8gSWYgc21vb3RoaW5nRW5hYmxlZCBpcyBzdXBwb3J0ZWQgYW5kIHdlIG5lZWQgdG8gY2hhbmdlIHRoZSBzbW9vdGhpbmcgcHJvcGVydHkgZm9yIHRoaXMgdGV4dHVyZVxuICAgICAgICB2YXIgc21vb3RoaW5nRW5hYmxlZCA9IHRleHR1cmUuYmFzZVRleHR1cmUuc2NhbGVNb2RlID09PSBDT05TVC5TQ0FMRV9NT0RFUy5MSU5FQVI7XG4gICAgICAgIGlmIChyZW5kZXJlci5zbW9vdGhQcm9wZXJ0eSAmJiByZW5kZXJlci5jb250ZXh0W3JlbmRlcmVyLnNtb290aFByb3BlcnR5XSAhPT0gc21vb3RoaW5nRW5hYmxlZClcbiAgICAgICAge1xuICAgICAgICAgICAgcmVuZGVyZXIuY29udGV4dFtyZW5kZXJlci5zbW9vdGhQcm9wZXJ0eV0gPSBzbW9vdGhpbmdFbmFibGVkO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gSWYgdGhlIHRleHR1cmUgaXMgdHJpbW1lZCB3ZSBvZmZzZXQgYnkgdGhlIHRyaW0geC95LCBvdGhlcndpc2Ugd2UgdXNlIHRoZSBmcmFtZSBkaW1lbnNpb25zXG5cbiAgICAgICAgaWYodGV4dHVyZS5yb3RhdGUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHdpZHRoID0gdGV4dHVyZS5jcm9wLmhlaWdodDtcbiAgICAgICAgICAgIGhlaWdodCA9IHRleHR1cmUuY3JvcC53aWR0aDtcblxuICAgICAgICAgICAgZHggPSAodGV4dHVyZS50cmltKSA/IHRleHR1cmUudHJpbS55IC0gdGhpcy5hbmNob3IueSAqIHRleHR1cmUudHJpbS5oZWlnaHQgOiB0aGlzLmFuY2hvci55ICogLXRleHR1cmUuX2ZyYW1lLmhlaWdodDtcbiAgICAgICAgICAgIGR5ID0gKHRleHR1cmUudHJpbSkgPyB0ZXh0dXJlLnRyaW0ueCAtIHRoaXMuYW5jaG9yLnggKiB0ZXh0dXJlLnRyaW0ud2lkdGggOiB0aGlzLmFuY2hvci54ICogLXRleHR1cmUuX2ZyYW1lLndpZHRoO1xuICAgICAgIFxuICAgICAgICAgICAgZHggKz0gd2lkdGg7XG5cbiAgICAgICAgICAgIHd0LnR4ID0gZHkgKiB3dC5hICsgZHggKiB3dC5jICsgd3QudHg7XG4gICAgICAgICAgICB3dC50eSA9IGR5ICogd3QuYiArIGR4ICogd3QuZCArIHd0LnR5O1xuXG4gICAgICAgICAgICB2YXIgdGVtcCA9IHd0LmE7XG4gICAgICAgICAgICB3dC5hICA9IC13dC5jO1xuICAgICAgICAgICAgd3QuYyAgPSAgdGVtcDtcblxuICAgICAgICAgICAgdGVtcCA9IHd0LmI7XG4gICAgICAgICAgICB3dC5iICA9IC13dC5kO1xuICAgICAgICAgICAgd3QuZCAgPSAgdGVtcDtcblxuICAgICAgICAgICAgLy8gdGhlIGFuY2hvciBoYXMgYWxyZWFkeSBiZWVuIGFwcGxpZWQgYWJvdmUsIHNvIGxldHMgc2V0IGl0IHRvIHplcm9cbiAgICAgICAgICAgIGR4ID0gMDtcbiAgICAgICAgICAgIGR5ID0gMDtcblxuICAgICAgICB9XG4gICAgICAgIGVsc2VcbiAgICAgICAge1xuICAgICAgICAgICAgd2lkdGggPSB0ZXh0dXJlLmNyb3Aud2lkdGg7XG4gICAgICAgICAgICBoZWlnaHQgPSB0ZXh0dXJlLmNyb3AuaGVpZ2h0O1xuXG4gICAgICAgICAgICBkeCA9ICh0ZXh0dXJlLnRyaW0pID8gdGV4dHVyZS50cmltLnggLSB0aGlzLmFuY2hvci54ICogdGV4dHVyZS50cmltLndpZHRoIDogdGhpcy5hbmNob3IueCAqIC10ZXh0dXJlLl9mcmFtZS53aWR0aDtcbiAgICAgICAgICAgIGR5ID0gKHRleHR1cmUudHJpbSkgPyB0ZXh0dXJlLnRyaW0ueSAtIHRoaXMuYW5jaG9yLnkgKiB0ZXh0dXJlLnRyaW0uaGVpZ2h0IDogdGhpcy5hbmNob3IueSAqIC10ZXh0dXJlLl9mcmFtZS5oZWlnaHQ7XG4gICAgICAgIH1cblxuXG5cbiAgICAgICAgLy8gQWxsb3cgZm9yIHBpeGVsIHJvdW5kaW5nXG4gICAgICAgIGlmIChyZW5kZXJlci5yb3VuZFBpeGVscylcbiAgICAgICAge1xuICAgICAgICAgICAgcmVuZGVyZXIuY29udGV4dC5zZXRUcmFuc2Zvcm0oXG4gICAgICAgICAgICAgICAgd3QuYSxcbiAgICAgICAgICAgICAgICB3dC5iLFxuICAgICAgICAgICAgICAgIHd0LmMsXG4gICAgICAgICAgICAgICAgd3QuZCxcbiAgICAgICAgICAgICAgICAod3QudHggKiByZW5kZXJlci5yZXNvbHV0aW9uKSB8IDAsXG4gICAgICAgICAgICAgICAgKHd0LnR5ICogcmVuZGVyZXIucmVzb2x1dGlvbikgfCAwXG4gICAgICAgICAgICApO1xuXG4gICAgICAgICAgICBkeCA9IGR4IHwgMDtcbiAgICAgICAgICAgIGR5ID0gZHkgfCAwO1xuICAgICAgICB9XG4gICAgICAgIGVsc2VcbiAgICAgICAge1xuXG4gICAgICAgICAgICByZW5kZXJlci5jb250ZXh0LnNldFRyYW5zZm9ybShcbiAgICAgICAgICAgICAgICB3dC5hLFxuICAgICAgICAgICAgICAgIHd0LmIsXG4gICAgICAgICAgICAgICAgd3QuYyxcbiAgICAgICAgICAgICAgICB3dC5kLFxuICAgICAgICAgICAgICAgIHd0LnR4ICogcmVuZGVyZXIucmVzb2x1dGlvbixcbiAgICAgICAgICAgICAgICB3dC50eSAqIHJlbmRlcmVyLnJlc29sdXRpb25cbiAgICAgICAgICAgICk7XG5cblxuICAgICAgICB9XG5cbiAgICAgICAgdmFyIHJlc29sdXRpb24gPSB0ZXh0dXJlLmJhc2VUZXh0dXJlLnJlc29sdXRpb247XG5cbiAgICAgICAgaWYgKHRoaXMudGludCAhPT0gMHhGRkZGRkYpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmNhY2hlZFRpbnQgIT09IHRoaXMudGludClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB0aGlzLmNhY2hlZFRpbnQgPSB0aGlzLnRpbnQ7XG5cbiAgICAgICAgICAgICAgICAvLyBUT0RPIGNsZWFuIHVwIGNhY2hpbmcgLSBob3cgdG8gY2xlYW4gdXAgdGhlIGNhY2hlcz9cbiAgICAgICAgICAgICAgICB0aGlzLnRpbnRlZFRleHR1cmUgPSBDYW52YXNUaW50ZXIuZ2V0VGludGVkVGV4dHVyZSh0aGlzLCB0aGlzLnRpbnQpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZW5kZXJlci5jb250ZXh0LmRyYXdJbWFnZShcbiAgICAgICAgICAgICAgICB0aGlzLnRpbnRlZFRleHR1cmUsXG4gICAgICAgICAgICAgICAgMCxcbiAgICAgICAgICAgICAgICAwLFxuICAgICAgICAgICAgICAgIHdpZHRoICogcmVzb2x1dGlvbixcbiAgICAgICAgICAgICAgICBoZWlnaHQgKiByZXNvbHV0aW9uLFxuICAgICAgICAgICAgICAgIGR4ICogcmVuZGVyZXIucmVzb2x1dGlvbixcbiAgICAgICAgICAgICAgICBkeSAqIHJlbmRlcmVyLnJlc29sdXRpb24sXG4gICAgICAgICAgICAgICAgd2lkdGggKiByZW5kZXJlci5yZXNvbHV0aW9uLFxuICAgICAgICAgICAgICAgIGhlaWdodCAqIHJlbmRlcmVyLnJlc29sdXRpb25cbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgICByZW5kZXJlci5jb250ZXh0LmRyYXdJbWFnZShcbiAgICAgICAgICAgICAgICB0ZXh0dXJlLmJhc2VUZXh0dXJlLnNvdXJjZSxcbiAgICAgICAgICAgICAgICB0ZXh0dXJlLmNyb3AueCAqIHJlc29sdXRpb24sXG4gICAgICAgICAgICAgICAgdGV4dHVyZS5jcm9wLnkgKiByZXNvbHV0aW9uLFxuICAgICAgICAgICAgICAgIHdpZHRoICogcmVzb2x1dGlvbixcbiAgICAgICAgICAgICAgICBoZWlnaHQgKiByZXNvbHV0aW9uLFxuICAgICAgICAgICAgICAgIGR4ICAqIHJlbmRlcmVyLnJlc29sdXRpb24sXG4gICAgICAgICAgICAgICAgZHkgICogcmVuZGVyZXIucmVzb2x1dGlvbixcbiAgICAgICAgICAgICAgICB3aWR0aCAqIHJlbmRlcmVyLnJlc29sdXRpb24sXG4gICAgICAgICAgICAgICAgaGVpZ2h0ICogcmVuZGVyZXIucmVzb2x1dGlvblxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgIH1cbn07XG5cbi8qKlxuICogRGVzdHJveXMgdGhpcyBzcHJpdGUgYW5kIG9wdGlvbmFsbHkgaXRzIHRleHR1cmVcbiAqXG4gKiBAcGFyYW0gW2Rlc3Ryb3lUZXh0dXJlPWZhbHNlXSB7Ym9vbGVhbn0gU2hvdWxkIGl0IGRlc3Ryb3kgdGhlIGN1cnJlbnQgdGV4dHVyZSBvZiB0aGUgc3ByaXRlIGFzIHdlbGxcbiAqIEBwYXJhbSBbZGVzdHJveUJhc2VUZXh0dXJlPWZhbHNlXSB7Ym9vbGVhbn0gU2hvdWxkIGl0IGRlc3Ryb3kgdGhlIGJhc2UgdGV4dHVyZSBvZiB0aGUgc3ByaXRlIGFzIHdlbGxcbiAqL1xuU3ByaXRlLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKGRlc3Ryb3lUZXh0dXJlLCBkZXN0cm95QmFzZVRleHR1cmUpXG57XG4gICAgQ29udGFpbmVyLnByb3RvdHlwZS5kZXN0cm95LmNhbGwodGhpcyk7XG5cbiAgICB0aGlzLmFuY2hvciA9IG51bGw7XG5cbiAgICBpZiAoZGVzdHJveVRleHR1cmUpXG4gICAge1xuICAgICAgICB0aGlzLl90ZXh0dXJlLmRlc3Ryb3koZGVzdHJveUJhc2VUZXh0dXJlKTtcbiAgICB9XG5cbiAgICB0aGlzLl90ZXh0dXJlID0gbnVsbDtcbiAgICB0aGlzLnNoYWRlciA9IG51bGw7XG59O1xuXG4vLyBzb21lIGhlbHBlciBmdW5jdGlvbnMuLlxuXG4vKipcbiAqIEhlbHBlciBmdW5jdGlvbiB0aGF0IGNyZWF0ZXMgYSBzcHJpdGUgdGhhdCB3aWxsIGNvbnRhaW4gYSB0ZXh0dXJlIGZyb20gdGhlIFRleHR1cmVDYWNoZSBiYXNlZCBvbiB0aGUgZnJhbWVJZFxuICogVGhlIGZyYW1lIGlkcyBhcmUgY3JlYXRlZCB3aGVuIGEgVGV4dHVyZSBwYWNrZXIgZmlsZSBoYXMgYmVlbiBsb2FkZWRcbiAqXG4gKiBAc3RhdGljXG4gKiBAcGFyYW0gZnJhbWVJZCB7c3RyaW5nfSBUaGUgZnJhbWUgSWQgb2YgdGhlIHRleHR1cmUgaW4gdGhlIGNhY2hlXG4gKiBAcGFyYW0gW2Nyb3Nzb3JpZ2luPShhdXRvKV0ge2Jvb2xlYW59IGlmIHlvdSB3YW50IHRvIHNwZWNpZnkgdGhlIGNyb3NzLW9yaWdpbiBwYXJhbWV0ZXJcbiAqIEBwYXJhbSBbc2NhbGVNb2RlPVBJWEkuU0NBTEVfTU9ERVMuREVGQVVMVF0ge251bWJlcn0gaWYgeW91IHdhbnQgdG8gc3BlY2lmeSB0aGUgc2NhbGUgbW9kZSwgc2VlIHtAbGluayBQSVhJLlNDQUxFX01PREVTfSBmb3IgcG9zc2libGUgdmFsdWVzXG4gKiBAcmV0dXJuIHtQSVhJLlNwcml0ZX0gQSBuZXcgU3ByaXRlIHVzaW5nIGEgdGV4dHVyZSBmcm9tIHRoZSB0ZXh0dXJlIGNhY2hlIG1hdGNoaW5nIHRoZSBmcmFtZUlkXG4gKi9cblNwcml0ZS5mcm9tRnJhbWUgPSBmdW5jdGlvbiAoZnJhbWVJZClcbntcbiAgICB2YXIgdGV4dHVyZSA9IHV0aWxzLlRleHR1cmVDYWNoZVtmcmFtZUlkXTtcblxuICAgIGlmICghdGV4dHVyZSlcbiAgICB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignVGhlIGZyYW1lSWQgXCInICsgZnJhbWVJZCArICdcIiBkb2VzIG5vdCBleGlzdCBpbiB0aGUgdGV4dHVyZSBjYWNoZScpO1xuICAgIH1cblxuICAgIHJldHVybiBuZXcgU3ByaXRlKHRleHR1cmUpO1xufTtcblxuLyoqXG4gKiBIZWxwZXIgZnVuY3Rpb24gdGhhdCBjcmVhdGVzIGEgc3ByaXRlIHRoYXQgd2lsbCBjb250YWluIGEgdGV4dHVyZSBiYXNlZCBvbiBhbiBpbWFnZSB1cmxcbiAqIElmIHRoZSBpbWFnZSBpcyBub3QgaW4gdGhlIHRleHR1cmUgY2FjaGUgaXQgd2lsbCBiZSBsb2FkZWRcbiAqXG4gKiBAc3RhdGljXG4gKiBAcGFyYW0gaW1hZ2VJZCB7c3RyaW5nfSBUaGUgaW1hZ2UgdXJsIG9mIHRoZSB0ZXh0dXJlXG4gKiBAcmV0dXJuIHtQSVhJLlNwcml0ZX0gQSBuZXcgU3ByaXRlIHVzaW5nIGEgdGV4dHVyZSBmcm9tIHRoZSB0ZXh0dXJlIGNhY2hlIG1hdGNoaW5nIHRoZSBpbWFnZSBpZFxuICovXG5TcHJpdGUuZnJvbUltYWdlID0gZnVuY3Rpb24gKGltYWdlSWQsIGNyb3Nzb3JpZ2luLCBzY2FsZU1vZGUpXG57XG4gICAgcmV0dXJuIG5ldyBTcHJpdGUoVGV4dHVyZS5mcm9tSW1hZ2UoaW1hZ2VJZCwgY3Jvc3NvcmlnaW4sIHNjYWxlTW9kZSkpO1xufTtcbiIsInZhciBPYmplY3RSZW5kZXJlciA9IHJlcXVpcmUoJy4uLy4uL3JlbmRlcmVycy93ZWJnbC91dGlscy9PYmplY3RSZW5kZXJlcicpLFxuICAgIFdlYkdMUmVuZGVyZXIgPSByZXF1aXJlKCcuLi8uLi9yZW5kZXJlcnMvd2ViZ2wvV2ViR0xSZW5kZXJlcicpLFxuICAgIFRleHR1cmVTaGFkZXIgPSByZXF1aXJlKCcuLi8uLi9yZW5kZXJlcnMvd2ViZ2wvc2hhZGVycy9fVGV4dHVyZVNoYWRlcicpLFxuICAgIGNyZWF0ZUluZGljZXNGb3JRdWFkcyA9IHJlcXVpcmUoJy4uLy4uL3V0aWxzL2NyZWF0ZUluZGljZXNGb3JRdWFkcycpLFxuICAgIGdlbmVyYXRlTXVsdGlUZXh0dXJlU2hhZGVyID0gcmVxdWlyZSgnLi9nZW5lcmF0ZU11bHRpVGV4dHVyZVNoYWRlcicpLFxuICAgIENPTlNUID0gcmVxdWlyZSgnLi4vLi4vY29uc3QnKSxcbiAgICBnbENvcmUgPSByZXF1aXJlKCdwaXhpLWdsLWNvcmUnKTtcblxuLyoqXG4gKiBAYXV0aG9yIE1hdCBHcm92ZXNcbiAqXG4gKiBCaWcgdGhhbmtzIHRvIHRoZSB2ZXJ5IGNsZXZlciBNYXR0IERlc0xhdXJpZXJzIDxtYXR0ZGVzbD4gaHR0cHM6Ly9naXRodWIuY29tL21hdHRkZXNsL1xuICogZm9yIGNyZWF0aW5nIHRoZSBvcmlnaW5hbCBwaXhpIHZlcnNpb24hXG4gKiBBbHNvIGEgdGhhbmtzIHRvIGh0dHBzOi8vZ2l0aHViLmNvbS9iY2hldmFsaWVyIGZvciB0d2Vha2luZyB0aGUgdGludCBhbmQgYWxwaGEgc28gdGhhdCB0aGV5IG5vdyBzaGFyZSA0IGJ5dGVzIG9uIHRoZSB2ZXJ0ZXggYnVmZmVyXG4gKlxuICogSGVhdmlseSBpbnNwaXJlZCBieSBMaWJHRFgncyBTcHJpdGVSZW5kZXJlcjpcbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS9saWJnZHgvbGliZ2R4L2Jsb2IvbWFzdGVyL2dkeC9zcmMvY29tL2JhZGxvZ2ljL2dkeC9ncmFwaGljcy9nMmQvU3ByaXRlUmVuZGVyZXIuamF2YVxuICovXG5cbi8qKlxuICogUmVuZGVyZXIgZGVkaWNhdGVkIHRvIGRyYXdpbmcgYW5kIGJhdGNoaW5nIHNwcml0ZXMuXG4gKlxuICogQGNsYXNzXG4gKiBAcHJpdmF0ZVxuICogQG1lbWJlcm9mIFBJWElcbiAqIEBleHRlbmRzIFBJWEkuT2JqZWN0UmVuZGVyZXJcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5XZWJHTFJlbmRlcmVyfSBUaGUgcmVuZGVyZXIgdGhpcyBzcHJpdGUgYmF0Y2ggd29ya3MgZm9yLlxuICovXG5mdW5jdGlvbiBTcHJpdGVSZW5kZXJlcihyZW5kZXJlcilcbntcbiAgICBPYmplY3RSZW5kZXJlci5jYWxsKHRoaXMsIHJlbmRlcmVyKTtcblxuICAgIC8qKlxuICAgICAqIE51bWJlciBvZiB2YWx1ZXMgc2VudCBpbiB0aGUgdmVydGV4IGJ1ZmZlci5cbiAgICAgKiBwb3NpdGlvblgsIHBvc2l0aW9uWSwgY29sb3JSLCBjb2xvckcsIGNvbG9yQiA9IDVcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLnZlcnRTaXplID0gNTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBzaXplIG9mIHRoZSB2ZXJ0ZXggaW5mb3JtYXRpb24gaW4gYnl0ZXMuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy52ZXJ0Qnl0ZVNpemUgPSB0aGlzLnZlcnRTaXplICogNDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBudW1iZXIgb2YgaW1hZ2VzIGluIHRoZSBTcHJpdGVCYXRjaCBiZWZvcmUgaXQgZmx1c2hlcy5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLnNpemUgPSBDT05TVC5TUFJJVEVfQkFUQ0hfU0laRTsgLy8gMjAwMCBpcyBhIG5pY2UgYmFsYW5jZSBiZXR3ZWVuIG1vYmlsZSAvIGRlc2t0b3BcblxuICAgIC8vIHRoZSB0b3RhbCBudW1iZXIgb2YgYnl0ZXMgaW4gb3VyIGJhdGNoXG4gICAgdmFyIG51bVZlcnRzID0gKHRoaXMuc2l6ZSAqIDQpICogdGhpcy52ZXJ0Qnl0ZVNpemU7XG5cbiAgICAvLyB0aGUgdG90YWwgbnVtYmVyIG9mIGluZGljZXMgaW4gb3VyIGJhdGNoLCB0aGVyZSBhcmUgNiBwb2ludHMgcGVyIHF1YWQuXG4gICAgdmFyIG51bUluZGljZXMgPSB0aGlzLnNpemUgKiA2O1xuXG4gICAgLyoqXG4gICAgICogSG9sZHMgdGhlIHZlcnRleCBkYXRhIHRoYXQgd2lsbCBiZSBzZW50IHRvIHRoZSB2ZXJ0ZXggc2hhZGVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7QXJyYXlCdWZmZXJ9XG4gICAgICovXG4gICAgdGhpcy52ZXJ0aWNlcyA9IG5ldyBBcnJheUJ1ZmZlcihudW1WZXJ0cyk7XG5cbiAgICAvKipcbiAgICAgKiBWaWV3IG9uIHRoZSB2ZXJ0aWNlcyBhcyBhIEZsb2F0MzJBcnJheSBmb3IgcG9zaXRpb25zXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtGbG9hdDMyQXJyYXl9XG4gICAgICovXG4gICAgdGhpcy5wb3NpdGlvbnMgPSBuZXcgRmxvYXQzMkFycmF5KHRoaXMudmVydGljZXMpO1xuICAgIFxuICAgIC8qKlxuICAgICAqIFZpZXcgb24gdGhlIHZlcnRpY2VzIGFzIGEgVWludDMyQXJyYXkgZm9yIHV2c1xuICAgICAqXG4gICAgICogQG1lbWJlciB7RmxvYXQzMkFycmF5fVxuICAgICAqL1xuICAgIHRoaXMudXZzID0gbmV3IFVpbnQzMkFycmF5KHRoaXMudmVydGljZXMpO1xuXG4gICAgLyoqXG4gICAgICogVmlldyBvbiB0aGUgdmVydGljZXMgYXMgYSBVaW50MzJBcnJheSBmb3IgY29sb3JzXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtVaW50MzJBcnJheX1cbiAgICAgKi9cbiAgICB0aGlzLmNvbG9ycyA9IG5ldyBVaW50MzJBcnJheSh0aGlzLnZlcnRpY2VzKTtcblxuICAgIC8qKlxuICAgICAqIEhvbGRzIHRoZSBpbmRpY2VzIG9mIHRoZSBnZW9tZXRyeSAocXVhZHMpIHRvIGRyYXdcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1VpbnQxNkFycmF5fVxuICAgICAqL1xuICAgIHRoaXMuaW5kaWNlcyA9IGNyZWF0ZUluZGljZXNGb3JRdWFkcyh0aGlzLnNpemUpXG5cbiAgICAvKipcbiAgICAgKiBUaGUgZGVmYXVsdCBzaGFkZXIgdGhhdCBpcyB1c2VkIGlmIGEgc3ByaXRlIGRvZXNuJ3QgaGF2ZSBhIG1vcmUgc3BlY2lmaWMgb25lLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5TaGFkZXJ9XG4gICAgICovXG4gICAgdGhpcy5zaGFkZXIgPSBudWxsO1xuXG4gICAgdGhpcy50ZXh0dXJlQ291bnQgPSAwO1xuICAgIHRoaXMuY3VycmVudEluZGV4ID0gMDtcbiAgXG4gICAgdGhpcy5ncm91cENvdW50ID0gMDtcbiAgICB0aGlzLmdyb3VwcyA9IFtdO1xuICAgIFxuICAgIC8vVE9ETyAtIDMwMCBpcyBhIGJpdCBtYWdpYywgZmlndXJlIG91dCBhIG5pY2VyIGFtb3VudCFcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuc2l6ZTsgaSsrKSBcbiAgICB7XG4gICAgICAgIHRoaXMuZ3JvdXBzW2ldID0ge3RleHR1cmVzOltdLCB0ZXh0dXJlQ291bnQ6MCwgaWRzOltdLCBzaXplOjAsIHN0YXJ0OjAsIGJsZW5kOjB9OyBcbiAgICB9O1xuICAgIFxuICAgIHRoaXMuY3VycmVudEdyb3VwID0gdGhpcy5ncm91cHNbdGhpcy5ncm91cENvdW50KytdO1xuXG4gICAgdGhpcy5jdXJyZW50VGV4dHVyZSA9IG51bGw7ICAgIFxufVxuXG5cblNwcml0ZVJlbmRlcmVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoT2JqZWN0UmVuZGVyZXIucHJvdG90eXBlKTtcblNwcml0ZVJlbmRlcmVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFNwcml0ZVJlbmRlcmVyO1xubW9kdWxlLmV4cG9ydHMgPSBTcHJpdGVSZW5kZXJlcjtcblxuV2ViR0xSZW5kZXJlci5yZWdpc3RlclBsdWdpbignc3ByaXRlJywgU3ByaXRlUmVuZGVyZXIpO1xuXG4vKipcbiAqIFNldHMgdXAgdGhlIHJlbmRlcmVyIGNvbnRleHQgYW5kIG5lY2Vzc2FyeSBidWZmZXJzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0gZ2wge1dlYkdMUmVuZGVyaW5nQ29udGV4dH0gdGhlIGN1cnJlbnQgV2ViR0wgZHJhd2luZyBjb250ZXh0XG4gKi9cblNwcml0ZVJlbmRlcmVyLnByb3RvdHlwZS5vbkNvbnRleHRDaGFuZ2UgPSBmdW5jdGlvbiAoKVxue1xuICAgIHZhciBnbCA9IHRoaXMucmVuZGVyZXIuZ2w7XG5cbiAgICB0aGlzLk1BWF9URVhUVUVTID0gZ2wuZ2V0UGFyYW1ldGVyKGdsLk1BWF9URVhUVVJFX0lNQUdFX1VOSVRTKTtcblxuICAgIHRoaXMuX3NoYWRlciA9IGdlbmVyYXRlTXVsdGlUZXh0dXJlU2hhZGVyKGdsLCB0aGlzLk1BWF9URVhUVUVTKS8vbmV3IFRleHR1cmVTaGFkZXIoZ2wpO1xuXG4gICAgLy8gc2V0dXAgZGVmYXVsdCBzaGFkZXJcbiAgICB0aGlzLnNoYWRlciA9IHRoaXMucmVuZGVyZXIuc2hhZGVyTWFuYWdlci5kZWZhdWx0U2hhZGVyO1xuXG4gICAgLy8gY3JlYXRlIGEgY291cGxlIG9mIGJ1ZmZlcnNcbiAgICB0aGlzLnZlcnRleEJ1ZmZlciA9IGdsQ29yZS5HTEJ1ZmZlci5jcmVhdGVWZXJ0ZXhCdWZmZXIoZ2wsIG51bGwsIGdsLkRZTkFNSUNfRFJBVyk7XG4gICAgdGhpcy5pbmRleEJ1ZmZlciA9IGdsQ29yZS5HTEJ1ZmZlci5jcmVhdGVJbmRleEJ1ZmZlcihnbCwgdGhpcy5pbmRpY2VzLCBnbC5TVEFUSUNfRFJBVyk7XG5cbiAgICAvLyBidWlsZCB0aGUgdmFvIG9iamVjdCB0aGF0IHdpbGwgcmVuZGVyLi5cbiAgICB0aGlzLnZhbyA9IG5ldyBnbENvcmUuVmVydGV4QXJyYXlPYmplY3QoZ2wpO1xuXG4gICAgdGhpcy52YW8uYWRkSW5kZXgodGhpcy5pbmRleEJ1ZmZlcik7XG4gICAgdGhpcy52YW8uYWRkQXR0cmlidXRlKHRoaXMudmVydGV4QnVmZmVyLCB0aGlzLl9zaGFkZXIuYXR0cmlidXRlcy5hVmVydGV4UG9zaXRpb24sIGdsLkZMT0FULCBmYWxzZSwgdGhpcy52ZXJ0Qnl0ZVNpemUsIDApO1xuICAgIHRoaXMudmFvLmFkZEF0dHJpYnV0ZSh0aGlzLnZlcnRleEJ1ZmZlciwgdGhpcy5fc2hhZGVyLmF0dHJpYnV0ZXMuYVRleHR1cmVDb29yZCwgZ2wuVU5TSUdORURfU0hPUlQsIHRydWUsIHRoaXMudmVydEJ5dGVTaXplLCAyICogNCk7XG4gICAgdGhpcy52YW8uYWRkQXR0cmlidXRlKHRoaXMudmVydGV4QnVmZmVyLCB0aGlzLl9zaGFkZXIuYXR0cmlidXRlcy5hQ29sb3IsIGdsLlVOU0lHTkVEX0JZVEUsIHRydWUsIHRoaXMudmVydEJ5dGVTaXplLCAzICogNCk7XG4gICAgdGhpcy52YW8uYWRkQXR0cmlidXRlKHRoaXMudmVydGV4QnVmZmVyLCB0aGlzLl9zaGFkZXIuYXR0cmlidXRlcy5hVGV4dHVyZUlkLCBnbC5GTE9BVCwgZmFsc2UsIHRoaXMudmVydEJ5dGVTaXplLCA0ICogNCk7XG5cbiAgICB0aGlzLmN1cnJlbnRCbGVuZE1vZGUgPSA5OTk5OTtcbn07XG5cbi8qKlxuICogUmVuZGVycyB0aGUgc3ByaXRlIG9iamVjdC5cbiAqXG4gKiBAcGFyYW0gc3ByaXRlIHtQSVhJLlNwcml0ZX0gdGhlIHNwcml0ZSB0byByZW5kZXIgd2hlbiB1c2luZyB0aGlzIHNwcml0ZWJhdGNoXG4gKi9cblNwcml0ZVJlbmRlcmVyLnByb3RvdHlwZS5yZW5kZXIgPSBmdW5jdGlvbiAoc3ByaXRlKVxue1xuICAgIC8vVE9ETyBzZXQgYmxlbmQgbW9kZXMuLlxuICAgIC8vIGNoZWNrIHRleHR1cmUuLlxuICAgIGlmICh0aGlzLmN1cnJlbnRJbmRleCA+PSB0aGlzLnNpemUpXG4gICAge1xuICAgICAgICB0aGlzLmZsdXNoKCk7XG4gICAgfVxuXG4gIFxuICAgIC8vIGdldCB0aGUgdXZzIGZvciB0aGUgdGV4dHVyZVxuICAgXG5cbiAgICAvLyBpZiB0aGUgdXZzIGhhdmUgbm90IHVwZGF0ZWQgdGhlbiBubyBwb2ludCByZW5kZXJpbmcganVzdCB5ZXQhXG4gICAgaWYgKCFzcHJpdGUudGV4dHVyZS5fdXZzKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgICAvLyBwdXNoIGEgdGV4dHVyZS5cbiAgICAvLyBpbmNyZW1lbnQgdGhlIGJhdGNoc2l6ZVxuICAgIHZhciBuZXh0VGV4dHVyZSA9ICBzcHJpdGUudGV4dHVyZS5iYXNlVGV4dHVyZTtcbiAgICB2YXIgY3VycmVudEdyb3VwID0gdGhpcy5jdXJyZW50R3JvdXA7XG4gICAgdmFyIGk7XG5cbiAgICBpZih0aGlzLmN1cnJlbnRUZXh0dXJlICE9PSBuZXh0VGV4dHVyZSlcbiAgICB7XG4gICAgICAgIHRoaXMuY3VycmVudFRleHR1cmUgPSBuZXh0VGV4dHVyZTtcbiAgICAgICAgXG4gICAgICAgIGlmKCFuZXh0VGV4dHVyZS5fZW5hYmxlZClcbiAgICAgICAge1xuICAgICAgICAgICAgbmV4dFRleHR1cmUuX2VuYWJsZWQgPSB0cnVlO1xuICAgICAgICAgICAgbmV4dFRleHR1cmUuX2lkID0gdGhpcy50ZXh0dXJlQ291bnQ7XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIGlmKHRoaXMudGV4dHVyZUNvdW50ID09PSB0aGlzLk1BWF9URVhUVUVTKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGZvciAoIGkgPSAwOyBpIDwgY3VycmVudEdyb3VwLnRleHR1cmVDb3VudDsgaSsrKSBcbiAgICAgICAgICAgICAgICB7ICAgICBcbiAgICAgICAgICAgICAgICAgICAgY3VycmVudEdyb3VwLnRleHR1cmVzW2ldLl9lbmFibGVkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgIHRoaXMudGV4dHVyZUNvdW50ID0gMDtcblxuICAgICAgICAgICAgICAgIGN1cnJlbnRHcm91cC5zaXplID0gdGhpcy5jdXJyZW50SW5kZXggLSBjdXJyZW50R3JvdXAuc3RhcnQ7XG4gICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICBjdXJyZW50R3JvdXAgPSB0aGlzLmN1cnJlbnRHcm91cCA9IHRoaXMuZ3JvdXBzW3RoaXMuZ3JvdXBDb3VudCsrXTtcbiAgICAgICAgICAgICAgICBjdXJyZW50R3JvdXAudGV4dHVyZUNvdW50ID0gMDtcbiAgICAgICAgICAgICAgICBjdXJyZW50R3JvdXAuc3RhcnQgPSB0aGlzLmN1cnJlbnRJbmRleDtcbiAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY3VycmVudEdyb3VwLnRleHR1cmVzW2N1cnJlbnRHcm91cC50ZXh0dXJlQ291bnQrK10gPSBuZXh0VGV4dHVyZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMudGV4dHVyZUNvdW50Kys7XG4gICAgfVxuXG4gICAgLy8gVE9ETyB0cmltPz9cbiAgICB2YXIgaW5kZXggPSB0aGlzLmN1cnJlbnRJbmRleCAqIHRoaXMudmVydEJ5dGVTaXplO1xuXG4gICAgdGhpcy5jdXJyZW50SW5kZXgrKztcblxuICAgIC8vIHVwbG9hZCB0aGUgc3ByaXRlIGVsZW1ldG5zLi4uXG4gICAgLy8gdGhleSBoYXZlIGFsbCByZWFkeSBiZWVuIGNhbGN1bGF0ZWQgc28gd2UganVzdCBuZWVkIHRvIHB1c2ggdGhlbSBpbnRvIHRoZSBidWZmZXIuXG4gICAgdmFyIGNvbG9ycyA9IHRoaXMuY29sb3JzO1xuICAgIHZhciBwb3NpdGlvbnMgPSB0aGlzLnBvc2l0aW9ucztcbiAgICB2YXIgdmVydGV4RGF0YSA9IHNwcml0ZS52ZXJ0ZXhEYXRhXG4gICAgdmFyIHRpbnQgPSAoc3ByaXRlLnRpbnQgPj4gMTYpICsgKHNwcml0ZS50aW50ICYgMHhmZjAwKSArICgoc3ByaXRlLnRpbnQgJiAweGZmKSA8PCAxNikgKyAoc3ByaXRlLndvcmxkQWxwaGEgKiAyNTUgPDwgMjQpO1xuICAgIHZhciB1dnMgPSBzcHJpdGUudGV4dHVyZS5fdXZzLnV2c191aW50MzI7XG4gICAgLy94eVxuICAgIHBvc2l0aW9uc1tpbmRleCsrXSA9IHZlcnRleERhdGFbMF07XG4gICAgcG9zaXRpb25zW2luZGV4KytdID0gdmVydGV4RGF0YVsxXTtcbiAgICB0aGlzLnV2c1tpbmRleCsrXSA9IHV2c1swXTtcbiAgICBjb2xvcnNbaW5kZXgrK10gPSB0aW50O1xuICAgIHBvc2l0aW9uc1tpbmRleCsrXSA9IG5leHRUZXh0dXJlLl9pZDsgXG4gICAgXG4gICAgLy8geHlcbiAgICBwb3NpdGlvbnNbaW5kZXgrK10gPSB2ZXJ0ZXhEYXRhWzJdO1xuICAgIHBvc2l0aW9uc1tpbmRleCsrXSA9IHZlcnRleERhdGFbM107XG4gICAgdGhpcy51dnNbaW5kZXgrK10gPSB1dnNbMV07XG4gICAgY29sb3JzW2luZGV4KytdID0gdGludDtcbiAgICBwb3NpdGlvbnNbaW5kZXgrK10gPSBuZXh0VGV4dHVyZS5faWQ7XG5cbiAgICAgLy8geHlcbiAgICBwb3NpdGlvbnNbaW5kZXgrK10gPSB2ZXJ0ZXhEYXRhWzRdO1xuICAgIHBvc2l0aW9uc1tpbmRleCsrXSA9IHZlcnRleERhdGFbNV07XG4gICAgdGhpcy51dnNbaW5kZXgrK10gPSB1dnNbMl07XG4gICAgY29sb3JzW2luZGV4KytdID0gdGludDtcbiAgICBwb3NpdGlvbnNbaW5kZXgrK10gPSBuZXh0VGV4dHVyZS5faWQ7XG5cbiAgICAvLyB4eVxuICAgIHBvc2l0aW9uc1tpbmRleCsrXSA9IHZlcnRleERhdGFbNl07XG4gICAgcG9zaXRpb25zW2luZGV4KytdID0gdmVydGV4RGF0YVs3XTtcbiAgICB0aGlzLnV2c1tpbmRleCsrXSA9IHV2c1szXTtcbiAgICBjb2xvcnNbaW5kZXgrK10gPSB0aW50O1xuICAgIHBvc2l0aW9uc1tpbmRleCsrXSA9IG5leHRUZXh0dXJlLl9pZDtcbn07XG5cbi8qKlxuICogUmVuZGVycyB0aGUgY29udGVudCBhbmQgZW1wdGllcyB0aGUgY3VycmVudCBiYXRjaC5cbiAqXG4gKi9cblNwcml0ZVJlbmRlcmVyLnByb3RvdHlwZS5mbHVzaCA9IGZ1bmN0aW9uICgpXG57XG4gICAgaWYgKHRoaXMuY3VycmVudEluZGV4ID09PSAwKXJldHVybjtcblxuICAgIHZhciBnbCA9IHRoaXMucmVuZGVyZXIuZ2w7XG5cblxuICAgIHRoaXMuY3VycmVudEdyb3VwLnNpemUgPSB0aGlzLmN1cnJlbnRJbmRleCAtIHRoaXMuY3VycmVudEdyb3VwLnN0YXJ0O1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5jdXJyZW50R3JvdXAudGV4dHVyZUNvdW50OyBpKyspIFxuICAgIHsgICAgIFxuICAgICAgICB0aGlzLmN1cnJlbnRHcm91cC50ZXh0dXJlc1tpXS5fZW5hYmxlZCA9IGZhbHNlO1xuICAgIH07XG4gICBcbiAgICAvLyBkbyBzb21lIHNtYXJ0IGFycmF5IHN0dWZmLi5cbiAgICAvLyBkb3VibGUgc2l6ZSBzbyB3ZSBkb250IGFsd2F5IHN1YmFycmF5IHRoZSBlbGVtZW50cy4uXG4gICAgLy8gdXBsb2FkIHRoZSB2ZXJ0cyB0byB0aGUgYnVmZmVyXG4gICAgaWYgKHRoaXMuY3VycmVudEJhdGNoU2l6ZSA+ICggdGhpcy5zaXplICogMC41ICkgKVxuICAgIHtcbiAgICAgICAgdGhpcy52ZXJ0ZXhCdWZmZXIudXBsb2FkKHRoaXMudmVydGljZXMsIDAsIHRydWUpO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICAvLyBvIGsgLi4gc3ViIGFycmF5IGlzIFNMT1c+P1xuICAgICAgICB2YXIgdmlldyA9IHRoaXMucG9zaXRpb25zLnN1YmFycmF5KDAsIHRoaXMuY3VycmVudEluZGV4ICogdGhpcy52ZXJ0Qnl0ZVNpemUpO1xuICAgICAgICB0aGlzLnZlcnRleEJ1ZmZlci51cGxvYWQodmlldywgMCwgdHJ1ZSk7XG4gICAgfVxuXG4gICAgLy8gYmluZCBzaGFkZXIuLlxuICAgIHRoaXMucmVuZGVyZXIuYmluZFNoYWRlcih0aGlzLl9zaGFkZXIpO1xuICAgIHRoaXMucmVuZGVyZXIuYmxlbmRNb2RlTWFuYWdlci5zZXRCbGVuZE1vZGUoIDAgKTtcblxuICAgIC8vLyByZW5kZXIgdGhlIGdyb3Vwcy4uXG4gICAgZm9yIChpID0gMDsgaSA8IHRoaXMuZ3JvdXBDb3VudDsgaSsrKSB7XG4gICAgICAgIFxuICAgICAgICB2YXIgZ3JvdXAgPSB0aGlzLmdyb3Vwc1tpXTtcblxuICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IGdyb3VwLnRleHR1cmVDb3VudDsgaisrKSB7XG4gICAgICAgICAgICB0aGlzLnJlbmRlcmVyLmJpbmRUZXh0dXJlKGdyb3VwLnRleHR1cmVzW2pdLCBqKTtcbiAgICAgICAgfTtcblxuICAgICAgICBnbC5kcmF3RWxlbWVudHMoZ2wuVFJJQU5HTEVTLCBncm91cC5zaXplICogNiwgZ2wuVU5TSUdORURfU0hPUlQsIGdyb3VwLnN0YXJ0ICogNiAqIDIpO1xuICAgIH07XG5cbiAgICAvLyByZXNldCBlbGVtZW50cyBmb3IgdGhlIG5leHQgZmx1c2hcbiAgICB0aGlzLmN1cnJlbnRUZXh0dXJlID0gbnVsbDtcbiAgICB0aGlzLmN1cnJlbnRJbmRleCA9IDA7XG4gICAgdGhpcy50ZXh0dXJlQ291bnQgPSAwO1xuICAgIHRoaXMuZ3JvdXBDb3VudCA9IDA7XG4gICAgXG4gICAgdGhpcy5jdXJyZW50R3JvdXAgPSB0aGlzLmdyb3Vwc1t0aGlzLmdyb3VwQ291bnQrK107XG4gICAgdGhpcy5jdXJyZW50R3JvdXAudGV4dHVyZUNvdW50ID0gMDtcbn07XG5cbi8qKlxuICogU3RhcnRzIGEgbmV3IHNwcml0ZSBiYXRjaC5cbiAqXG4gKi9cblNwcml0ZVJlbmRlcmVyLnByb3RvdHlwZS5zdGFydCA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy52YW8uYmluZCgpO1xufTtcblxuU3ByaXRlUmVuZGVyZXIucHJvdG90eXBlLnN0b3AgPSBmdW5jdGlvbiAoKVxue1xuICAgIHRoaXMuZmx1c2goKTtcbiAgICB0aGlzLnZhby51bmJpbmQoKTtcbn07XG4vKipcbiAqIERlc3Ryb3lzIHRoZSBTcHJpdGVCYXRjaC5cbiAqXG4gKi9cblNwcml0ZVJlbmRlcmVyLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLnZlcnRleEJ1ZmZlci5kZXN0cm95KCk7XG4gICAgdGhpcy5pbmRleEJ1ZmZlci5kZXN0cm95KCk7XG5cbiAgICBPYmplY3RSZW5kZXJlci5wcm90b3R5cGUuZGVzdHJveS5jYWxsKHRoaXMpO1xuXG4gICAgdGhpcy5zaGFkZXIuZGVzdHJveSgpO1xuXG4gICAgdGhpcy5yZW5kZXJlciA9IG51bGw7XG5cbiAgICB0aGlzLnZlcnRpY2VzID0gbnVsbDtcbiAgICB0aGlzLnBvc2l0aW9ucyA9IG51bGw7XG4gICAgdGhpcy5jb2xvcnMgPSBudWxsO1xuICAgIHRoaXMuaW5kaWNlcyA9IG51bGw7XG5cbiAgICB0aGlzLnZlcnRleEJ1ZmZlciA9IG51bGw7XG4gICAgdGhpcy5pbmRleEJ1ZmZlciA9IG51bGw7XG5cbiAgICB0aGlzLnNwcml0ZXMgPSBudWxsO1xuICAgIHRoaXMuc2hhZGVyID0gbnVsbDtcbn07XG4iLCJ2YXIgU2hhZGVyID0gcmVxdWlyZSgncGl4aS1nbC1jb3JlJykuR0xTaGFkZXI7XG5cblxuZnVuY3Rpb24gZ2VuZXJhdGVNdWx0aVRleHR1cmVTaGFkZXIoZ2wsIG1heFRleHR1cmVzKVxue1xuICAgIHZhciB2ZXJ0ZXhTcmMgPSBcInByZWNpc2lvbiBsb3dwIGZsb2F0O1xcbmF0dHJpYnV0ZSB2ZWMyIGFWZXJ0ZXhQb3NpdGlvbjtcXG5hdHRyaWJ1dGUgdmVjMiBhVGV4dHVyZUNvb3JkO1xcbmF0dHJpYnV0ZSB2ZWM0IGFDb2xvcjtcXG5hdHRyaWJ1dGUgZmxvYXQgYVRleHR1cmVJZDtcXG5cXG51bmlmb3JtIG1hdDMgcHJvamVjdGlvbk1hdHJpeDtcXG5cXG52YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDtcXG52YXJ5aW5nIHZlYzQgdkNvbG9yO1xcbnZhcnlpbmcgZmxvYXQgdlRleHR1cmVJZDtcXG5cXG52b2lkIG1haW4odm9pZCl7XFxuICAgZ2xfUG9zaXRpb24gPSB2ZWM0KChwcm9qZWN0aW9uTWF0cml4ICogdmVjMyhhVmVydGV4UG9zaXRpb24sIDEuMCkpLnh5LCAwLjAsIDEuMCk7XFxuICAgdlRleHR1cmVDb29yZCA9IGFUZXh0dXJlQ29vcmQ7XFxuICAgdlRleHR1cmVJZCA9IGFUZXh0dXJlSWQ7XFxuICAgdkNvbG9yID0gdmVjNChhQ29sb3IucmdiICogYUNvbG9yLmEsIGFDb2xvci5hKTtcXG59XCI7XG4gICAgdmFyIGZyYWdtZW50U3JjID0gJ3ByZWNpc2lvbiBsb3dwIGZsb2F0O1xcblxcbicgKyBnZW5lcmF0ZVNhbXBsZVNyYyhtYXhUZXh0dXJlcykgKyBcIlxcblxcblwiICsgZnJhZ1RlbXBsYXRlXG5cbiAgICBmcmFnbWVudFNyYyA9IGZyYWdtZW50U3JjLnJlcGxhY2UoL1xcJVxcJS9naSwgJzE2Jyk7XG5cbiAgICB2YXIgc2hhZGVyID0gbmV3IFNoYWRlcihnbCwgdmVydGV4U3JjLCBmcmFnbWVudFNyYyk7XG5cblxuICAgIHZhciBzYW1wbGVWYWx1ZXMgPSBbXTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG1heFRleHR1cmVzOyBpKyspIHtcbiAgICAgICAgc2FtcGxlVmFsdWVzW2ldID0gaTtcbiAgICB9O1xuXG4gICAgc2hhZGVyLmJpbmQoKTtcbiAgICBzaGFkZXIudW5pZm9ybXMudVNhbXBsZXJzID0gc2FtcGxlVmFsdWVzO1xuXG4gICAgcmV0dXJuIHNoYWRlcjtcbn1cblxuZnVuY3Rpb24gZ2VuZXJhdGVTYW1wbGVTcmMobWF4VGV4dHVyZXMpXG57XG4gICAgdmFyIHNyYyA9ICd2ZWM0IGdldFNhbXBsZUZyb21BcnJheShzYW1wbGVyMkQgdGV4dHVyZXNbJSVdLCBpbnQgbmR4LCB2ZWMyIHV2KSB7XFxuXFxudmVjNCBjb2xvcjsnXG5cbiAgICBzcmMgKz0gJ1xcbic7XG4gICAgc3JjICs9ICdcXG4nO1xuICAgIFxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbWF4VGV4dHVyZXM7IGkrKykgXG4gICAge1xuICAgICAgICBpZihpID4gMClzcmMgKz0gJ1xcbmVsc2UgJztcbiAgICAgICAgaWYoaSA8IG1heFRleHR1cmVzLTEpc3JjICs9ICdpZihuZHggPT0gJyArIGkgKyAnKSc7XG4gICAgICAgIHNyYyArPSAnXFxueyc7XG4gICAgICAgIHNyYyArPSAnXFxuXFx0Y29sb3IgPSB0ZXh0dXJlMkQodGV4dHVyZXNbJytpKyddLCB1dik7JztcbiAgICAgICAgc3JjICs9ICdcXG59JztcbiAgICB9O1xuXG4gICAgc3JjICs9ICdcXG4nO1xuICAgIHNyYyArPSAnXFxuJztcbiAgICBzcmMgKz0gJ3JldHVybiBjb2xvcjsnO1xuICAgIHNyYyArPSAnXFxufSc7XG5cbiAgICByZXR1cm4gc3JjO1xufVxuXG52YXIgZnJhZ1RlbXBsYXRlID0gW1xuXG4gICAgJ3ZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkOycsXG4gICAgJ3ZhcnlpbmcgdmVjNCB2Q29sb3I7JyxcbiAgICAndmFyeWluZyBmbG9hdCB2VGV4dHVyZUlkOycsXG4gICAgJ3VuaWZvcm0gc2FtcGxlcjJEIHVTYW1wbGVyc1slJV07JyxcblxuICAgICd2b2lkIG1haW4odm9pZCl7JyxcbiAgICAgICAgJ2dsX0ZyYWdDb2xvciA9IGdldFNhbXBsZUZyb21BcnJheSh1U2FtcGxlcnMsIGludCh2VGV4dHVyZUlkKSwgdlRleHR1cmVDb29yZCkgKiB2Q29sb3I7JyxcbiAgICAnfSdcbl0uam9pbignXFxuJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZ2VuZXJhdGVNdWx0aVRleHR1cmVTaGFkZXI7XG4iLCJ2YXIgU3ByaXRlID0gcmVxdWlyZSgnLi4vc3ByaXRlcy9TcHJpdGUnKSxcbiAgICBUZXh0dXJlID0gcmVxdWlyZSgnLi4vdGV4dHVyZXMvVGV4dHVyZScpLFxuICAgIG1hdGggPSByZXF1aXJlKCcuLi9tYXRoJyksXG4gICAgdXRpbHMgPSByZXF1aXJlKCcuLi91dGlscycpLFxuICAgIENPTlNUID0gcmVxdWlyZSgnLi4vY29uc3QnKTtcblxuLyoqXG4gKiBBIFRleHQgT2JqZWN0IHdpbGwgY3JlYXRlIGEgbGluZSBvciBtdWx0aXBsZSBsaW5lcyBvZiB0ZXh0LiBUbyBzcGxpdCBhIGxpbmUgeW91IGNhbiB1c2UgJ1xcbicgaW4geW91ciB0ZXh0IHN0cmluZyxcbiAqIG9yIGFkZCBhIHdvcmRXcmFwIHByb3BlcnR5IHNldCB0byB0cnVlIGFuZCBhbmQgd29yZFdyYXBXaWR0aCBwcm9wZXJ0eSB3aXRoIGEgdmFsdWUgaW4gdGhlIHN0eWxlIG9iamVjdC5cbiAqXG4gKiBBIFRleHQgY2FuIGJlIGNyZWF0ZWQgZGlyZWN0bHkgZnJvbSBhIHN0cmluZyBhbmQgYSBzdHlsZSBvYmplY3RcbiAqXG4gKiBgYGBqc1xuICogdmFyIHRleHQgPSBuZXcgUElYSS5UZXh0KCdUaGlzIGlzIGEgcGl4aSB0ZXh0Jyx7Zm9udCA6ICcyNHB4IEFyaWFsJywgZmlsbCA6IDB4ZmYxMDEwLCBhbGlnbiA6ICdjZW50ZXInfSk7XG4gKiBgYGBcbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuU3ByaXRlXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIHRleHQge3N0cmluZ30gVGhlIGNvcHkgdGhhdCB5b3Ugd291bGQgbGlrZSB0aGUgdGV4dCB0byBkaXNwbGF5XG4gKiBAcGFyYW0gW3N0eWxlXSB7b2JqZWN0fSBUaGUgc3R5bGUgcGFyYW1ldGVyc1xuICogQHBhcmFtIFtzdHlsZS5mb250XSB7c3RyaW5nfSBkZWZhdWx0ICdib2xkIDIwcHggQXJpYWwnIFRoZSBzdHlsZSBhbmQgc2l6ZSBvZiB0aGUgZm9udFxuICogQHBhcmFtIFtzdHlsZS5maWxsPSdibGFjayddIHtTdHJpbmd8TnVtYmVyfSBBIGNhbnZhcyBmaWxsc3R5bGUgdGhhdCB3aWxsIGJlIHVzZWQgb24gdGhlIHRleHQgZS5nICdyZWQnLCAnIzAwRkYwMCdcbiAqIEBwYXJhbSBbc3R5bGUuYWxpZ249J2xlZnQnXSB7c3RyaW5nfSBBbGlnbm1lbnQgZm9yIG11bHRpbGluZSB0ZXh0ICgnbGVmdCcsICdjZW50ZXInIG9yICdyaWdodCcpLCBkb2VzIG5vdCBhZmZlY3Qgc2luZ2xlIGxpbmUgdGV4dFxuICogQHBhcmFtIFtzdHlsZS5zdHJva2VdIHtTdHJpbmd8TnVtYmVyfSBBIGNhbnZhcyBmaWxsc3R5bGUgdGhhdCB3aWxsIGJlIHVzZWQgb24gdGhlIHRleHQgc3Ryb2tlIGUuZyAnYmx1ZScsICcjRkNGRjAwJ1xuICogQHBhcmFtIFtzdHlsZS5zdHJva2VUaGlja25lc3M9MF0ge251bWJlcn0gQSBudW1iZXIgdGhhdCByZXByZXNlbnRzIHRoZSB0aGlja25lc3Mgb2YgdGhlIHN0cm9rZS4gRGVmYXVsdCBpcyAwIChubyBzdHJva2UpXG4gKiBAcGFyYW0gW3N0eWxlLndvcmRXcmFwPWZhbHNlXSB7Ym9vbGVhbn0gSW5kaWNhdGVzIGlmIHdvcmQgd3JhcCBzaG91bGQgYmUgdXNlZFxuICogQHBhcmFtIFtzdHlsZS53b3JkV3JhcFdpZHRoPTEwMF0ge251bWJlcn0gVGhlIHdpZHRoIGF0IHdoaWNoIHRleHQgd2lsbCB3cmFwLCBpdCBuZWVkcyB3b3JkV3JhcCB0byBiZSBzZXQgdG8gdHJ1ZVxuICogQHBhcmFtIFtzdHlsZS5saW5lSGVpZ2h0XSB7bnVtYmVyfSBUaGUgbGluZSBoZWlnaHQsIGEgbnVtYmVyIHRoYXQgcmVwcmVzZW50cyB0aGUgdmVydGljYWwgc3BhY2UgdGhhdCBhIGxldHRlciB1c2VzXG4gKiBAcGFyYW0gW3N0eWxlLmRyb3BTaGFkb3c9ZmFsc2VdIHtib29sZWFufSBTZXQgYSBkcm9wIHNoYWRvdyBmb3IgdGhlIHRleHRcbiAqIEBwYXJhbSBbc3R5bGUuZHJvcFNoYWRvd0NvbG9yPScjMDAwMDAwJ10ge3N0cmluZ30gQSBmaWxsIHN0eWxlIHRvIGJlIHVzZWQgb24gdGhlIGRyb3BzaGFkb3cgZS5nICdyZWQnLCAnIzAwRkYwMCdcbiAqIEBwYXJhbSBbc3R5bGUuZHJvcFNoYWRvd0FuZ2xlPU1hdGguUEkvNF0ge251bWJlcn0gU2V0IGEgYW5nbGUgb2YgdGhlIGRyb3Agc2hhZG93XG4gKiBAcGFyYW0gW3N0eWxlLmRyb3BTaGFkb3dEaXN0YW5jZT01XSB7bnVtYmVyfSBTZXQgYSBkaXN0YW5jZSBvZiB0aGUgZHJvcCBzaGFkb3dcbiAqIEBwYXJhbSBbc3R5bGUuZHJvcFNoYWRvd0JsdXI9MF0ge251bWJlcn0gU2V0IGEgc2hhZG93IGJsdXIgcmFkaXVzXG4gKiBAcGFyYW0gW3N0eWxlLnBhZGRpbmc9MF0ge251bWJlcn0gT2NjYXNpb25hbGx5IHNvbWUgZm9udHMgYXJlIGNyb3BwZWQgb24gdG9wIG9yIGJvdHRvbS4gQWRkaW5nIHNvbWUgcGFkZGluZyB3aWxsXG4gKiAgICAgIHByZXZlbnQgdGhpcyBmcm9tIGhhcHBlbmluZyBieSBhZGRpbmcgcGFkZGluZyB0byB0aGUgdG9wIGFuZCBib3R0b20gb2YgdGV4dCBoZWlnaHQuXG4gKiBAcGFyYW0gW3N0eWxlLnRleHRCYXNlbGluZT0nYWxwaGFiZXRpYyddIHtzdHJpbmd9IFRoZSBiYXNlbGluZSBvZiB0aGUgdGV4dCB0aGF0IGlzIHJlbmRlcmVkLlxuICogQHBhcmFtIFtzdHlsZS5saW5lSm9pbj0nbWl0ZXInXSB7c3RyaW5nfSBUaGUgbGluZUpvaW4gcHJvcGVydHkgc2V0cyB0aGUgdHlwZSBvZiBjb3JuZXIgY3JlYXRlZCwgaXQgY2FuIHJlc29sdmVcbiAqICAgICAgc3Bpa2VkIHRleHQgaXNzdWVzLiBEZWZhdWx0IGlzICdtaXRlcicgKGNyZWF0ZXMgYSBzaGFycCBjb3JuZXIpLlxuICogQHBhcmFtIFtzdHlsZS5taXRlckxpbWl0PTEwXSB7bnVtYmVyfSBUaGUgbWl0ZXIgbGltaXQgdG8gdXNlIHdoZW4gdXNpbmcgdGhlICdtaXRlcicgbGluZUpvaW4gbW9kZS4gVGhpcyBjYW4gcmVkdWNlXG4gKiAgICAgIG9yIGluY3JlYXNlIHRoZSBzcGlraW5lc3Mgb2YgcmVuZGVyZWQgdGV4dC5cbiAqL1xuZnVuY3Rpb24gVGV4dCh0ZXh0LCBzdHlsZSwgcmVzb2x1dGlvbilcbntcbiAgICAvKipcbiAgICAgKiBUaGUgY2FudmFzIGVsZW1lbnQgdGhhdCBldmVyeXRoaW5nIGlzIGRyYXduIHRvXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtIVE1MQ2FudmFzRWxlbWVudH1cbiAgICAgKi9cbiAgICB0aGlzLmNhbnZhcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NhbnZhcycpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGNhbnZhcyAyZCBjb250ZXh0IHRoYXQgZXZlcnl0aGluZyBpcyBkcmF3biB3aXRoXG4gICAgICogQG1lbWJlciB7SFRNTENhbnZhc0VsZW1lbnR9XG4gICAgICovXG4gICAgdGhpcy5jb250ZXh0ID0gdGhpcy5jYW52YXMuZ2V0Q29udGV4dCgnMmQnKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSByZXNvbHV0aW9uIG9mIHRoZSBjYW52YXMuXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMucmVzb2x1dGlvbiA9IHJlc29sdXRpb24gfHwgQ09OU1QuUkVTT0xVVElPTjtcblxuICAgIC8qKlxuICAgICAqIFByaXZhdGUgdHJhY2tlciBmb3IgdGhlIGN1cnJlbnQgdGV4dC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge3N0cmluZ31cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX3RleHQgPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogUHJpdmF0ZSB0cmFja2VyIGZvciB0aGUgY3VycmVudCBzdHlsZS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge29iamVjdH1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX3N0eWxlID0gbnVsbDtcblxuICAgIHZhciB0ZXh0dXJlID0gVGV4dHVyZS5mcm9tQ2FudmFzKHRoaXMuY2FudmFzKTtcbiAgICB0ZXh0dXJlLnRyaW0gPSBuZXcgbWF0aC5SZWN0YW5nbGUoKTtcbiAgICBTcHJpdGUuY2FsbCh0aGlzLCB0ZXh0dXJlKTtcblxuICAgIHRoaXMudGV4dCA9IHRleHQ7XG4gICAgdGhpcy5zdHlsZSA9IHN0eWxlO1xufVxuXG4vLyBjb25zdHJ1Y3RvclxuVGV4dC5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFNwcml0ZS5wcm90b3R5cGUpO1xuVGV4dC5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBUZXh0O1xubW9kdWxlLmV4cG9ydHMgPSBUZXh0O1xuXG5UZXh0LmZvbnRQcm9wZXJ0aWVzQ2FjaGUgPSB7fTtcblRleHQuZm9udFByb3BlcnRpZXNDYW52YXMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdjYW52YXMnKTtcblRleHQuZm9udFByb3BlcnRpZXNDb250ZXh0ID0gVGV4dC5mb250UHJvcGVydGllc0NhbnZhcy5nZXRDb250ZXh0KCcyZCcpO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhUZXh0LnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFRoZSB3aWR0aCBvZiB0aGUgVGV4dCwgc2V0dGluZyB0aGlzIHdpbGwgYWN0dWFsbHkgbW9kaWZ5IHRoZSBzY2FsZSB0byBhY2hpZXZlIHRoZSB2YWx1ZSBzZXRcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5UZXh0I1xuICAgICAqL1xuICAgIHdpZHRoOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgaWYgKHRoaXMuZGlydHkpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdGhpcy51cGRhdGVUZXh0KCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiB0aGlzLnNjYWxlLnggKiB0aGlzLl90ZXh0dXJlLl9mcmFtZS53aWR0aDtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuc2NhbGUueCA9IHZhbHVlIC8gdGhpcy5fdGV4dHVyZS5fZnJhbWUud2lkdGg7XG4gICAgICAgICAgICB0aGlzLl93aWR0aCA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFRoZSBoZWlnaHQgb2YgdGhlIFRleHQsIHNldHRpbmcgdGhpcyB3aWxsIGFjdHVhbGx5IG1vZGlmeSB0aGUgc2NhbGUgdG8gYWNoaWV2ZSB0aGUgdmFsdWUgc2V0XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuVGV4dCNcbiAgICAgKi9cbiAgICBoZWlnaHQ6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICBpZiAodGhpcy5kaXJ0eSlcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZVRleHQoKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuICB0aGlzLnNjYWxlLnkgKiB0aGlzLl90ZXh0dXJlLl9mcmFtZS5oZWlnaHQ7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnNjYWxlLnkgPSB2YWx1ZSAvIHRoaXMuX3RleHR1cmUuX2ZyYW1lLmhlaWdodDtcbiAgICAgICAgICAgIHRoaXMuX2hlaWdodCA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFNldCB0aGUgc3R5bGUgb2YgdGhlIHRleHRcbiAgICAgKlxuICAgICAqIEBwYXJhbSBbc3R5bGVdIHtvYmplY3R9IFRoZSBzdHlsZSBwYXJhbWV0ZXJzXG4gICAgICogQHBhcmFtIFtzdHlsZS5mb250PSdib2xkIDIwcHQgQXJpYWwnXSB7c3RyaW5nfSBUaGUgc3R5bGUgYW5kIHNpemUgb2YgdGhlIGZvbnRcbiAgICAgKiBAcGFyYW0gW3N0eWxlLmZpbGw9J2JsYWNrJ10ge3N0cmluZ3xudW1iZXJ9IEEgY2FudmFzIGZpbGxzdHlsZSB0aGF0IHdpbGwgYmUgdXNlZCBvbiB0aGUgdGV4dCBlZyAncmVkJywgJyMwMEZGMDAnXG4gICAgICogQHBhcmFtIFtzdHlsZS5hbGlnbj0nbGVmdCddIHtzdHJpbmd9IEFsaWdubWVudCBmb3IgbXVsdGlsaW5lIHRleHQgKCdsZWZ0JywgJ2NlbnRlcicgb3IgJ3JpZ2h0JyksIGRvZXMgbm90IGFmZmVjdCBzaW5nbGUgbGluZSB0ZXh0XG4gICAgICogQHBhcmFtIFtzdHlsZS5zdHJva2U9J2JsYWNrJ10ge3N0cmluZ3xudW1iZXJ9IEEgY2FudmFzIGZpbGxzdHlsZSB0aGF0IHdpbGwgYmUgdXNlZCBvbiB0aGUgdGV4dCBzdHJva2UgZWcgJ2JsdWUnLCAnI0ZDRkYwMCdcbiAgICAgKiBAcGFyYW0gW3N0eWxlLnN0cm9rZVRoaWNrbmVzcz0wXSB7bnVtYmVyfSBBIG51bWJlciB0aGF0IHJlcHJlc2VudHMgdGhlIHRoaWNrbmVzcyBvZiB0aGUgc3Ryb2tlLiBEZWZhdWx0IGlzIDAgKG5vIHN0cm9rZSlcbiAgICAgKiBAcGFyYW0gW3N0eWxlLndvcmRXcmFwPWZhbHNlXSB7Ym9vbGVhbn0gSW5kaWNhdGVzIGlmIHdvcmQgd3JhcCBzaG91bGQgYmUgdXNlZFxuICAgICAqIEBwYXJhbSBbc3R5bGUud29yZFdyYXBXaWR0aD0xMDBdIHtudW1iZXJ9IFRoZSB3aWR0aCBhdCB3aGljaCB0ZXh0IHdpbGwgd3JhcFxuICAgICAqIEBwYXJhbSBbc3R5bGUubGluZUhlaWdodF0ge251bWJlcn0gVGhlIGxpbmUgaGVpZ2h0LCBhIG51bWJlciB0aGF0IHJlcHJlc2VudHMgdGhlIHZlcnRpY2FsIHNwYWNlIHRoYXQgYSBsZXR0ZXIgdXNlc1xuICAgICAqIEBwYXJhbSBbc3R5bGUuZHJvcFNoYWRvdz1mYWxzZV0ge2Jvb2xlYW59IFNldCBhIGRyb3Agc2hhZG93IGZvciB0aGUgdGV4dFxuICAgICAqIEBwYXJhbSBbc3R5bGUuZHJvcFNoYWRvd0NvbG9yPScjMDAwMDAwJ10ge3N0cmluZ3xudW1iZXJ9IEEgZmlsbCBzdHlsZSB0byBiZSB1c2VkIG9uIHRoZSBkcm9wc2hhZG93IGUuZyAncmVkJywgJyMwMEZGMDAnXG4gICAgICogQHBhcmFtIFtzdHlsZS5kcm9wU2hhZG93QW5nbGU9TWF0aC5QSS82XSB7bnVtYmVyfSBTZXQgYSBhbmdsZSBvZiB0aGUgZHJvcCBzaGFkb3dcbiAgICAgKiBAcGFyYW0gW3N0eWxlLmRyb3BTaGFkb3dEaXN0YW5jZT01XSB7bnVtYmVyfSBTZXQgYSBkaXN0YW5jZSBvZiB0aGUgZHJvcCBzaGFkb3dcbiAgICAgKiBAcGFyYW0gW3N0eWxlLmRyb3BTaGFkb3dCbHVyPTBdIHtudW1iZXJ9IFNldCBhIHNoYWRvdyBibHVyIHJhZGl1c1xuICAgICAqIEBwYXJhbSBbc3R5bGUucGFkZGluZz0wXSB7bnVtYmVyfSBPY2Nhc2lvbmFsbHkgc29tZSBmb250cyBhcmUgY3JvcHBlZCBvbiB0b3Agb3IgYm90dG9tLiBBZGRpbmcgc29tZSBwYWRkaW5nIHdpbGxcbiAgICAgKiAgICAgIHByZXZlbnQgdGhpcyBmcm9tIGhhcHBlbmluZyBieSBhZGRpbmcgcGFkZGluZyB0byB0aGUgdG9wIGFuZCBib3R0b20gb2YgdGV4dCBoZWlnaHQuXG4gICAgICogQHBhcmFtIFtzdHlsZS50ZXh0QmFzZWxpbmU9J2FscGhhYmV0aWMnXSB7c3RyaW5nfSBUaGUgYmFzZWxpbmUgb2YgdGhlIHRleHQgdGhhdCBpcyByZW5kZXJlZC5cbiAgICAgKiBAcGFyYW0gW3N0eWxlLmxpbmVKb2luPSdtaXRlciddIHtzdHJpbmd9IFRoZSBsaW5lSm9pbiBwcm9wZXJ0eSBzZXRzIHRoZSB0eXBlIG9mIGNvcm5lciBjcmVhdGVkLCBpdCBjYW4gcmVzb2x2ZVxuICAgICAqICAgICAgc3Bpa2VkIHRleHQgaXNzdWVzLiBEZWZhdWx0IGlzICdtaXRlcicgKGNyZWF0ZXMgYSBzaGFycCBjb3JuZXIpLlxuICAgICAqIEBwYXJhbSBbc3R5bGUubWl0ZXJMaW1pdD0xMF0ge251bWJlcn0gVGhlIG1pdGVyIGxpbWl0IHRvIHVzZSB3aGVuIHVzaW5nIHRoZSAnbWl0ZXInIGxpbmVKb2luIG1vZGUuIFRoaXMgY2FuIHJlZHVjZVxuICAgICAqICAgICAgb3IgaW5jcmVhc2UgdGhlIHNwaWtpbmVzcyBvZiByZW5kZXJlZCB0ZXh0LlxuICAgICAqIEBtZW1iZXJvZiBQSVhJLlRleHQjXG4gICAgICovXG4gICAgc3R5bGU6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fc3R5bGU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHN0eWxlKVxuICAgICAgICB7XG4gICAgICAgICAgICBzdHlsZSA9IHN0eWxlIHx8IHt9O1xuXG4gICAgICAgICAgICBpZiAodHlwZW9mIHN0eWxlLmZpbGwgPT09ICdudW1iZXInKSB7XG4gICAgICAgICAgICAgICAgc3R5bGUuZmlsbCA9IHV0aWxzLmhleDJzdHJpbmcoc3R5bGUuZmlsbCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICh0eXBlb2Ygc3R5bGUuc3Ryb2tlID09PSAnbnVtYmVyJykge1xuICAgICAgICAgICAgICAgIHN0eWxlLnN0cm9rZSA9IHV0aWxzLmhleDJzdHJpbmcoc3R5bGUuc3Ryb2tlKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHR5cGVvZiBzdHlsZS5kcm9wU2hhZG93Q29sb3IgPT09ICdudW1iZXInKSB7XG4gICAgICAgICAgICAgICAgc3R5bGUuZHJvcFNoYWRvd0NvbG9yID0gdXRpbHMuaGV4MnN0cmluZyhzdHlsZS5kcm9wU2hhZG93Q29sb3IpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBzdHlsZS5mb250ID0gc3R5bGUuZm9udCB8fCAnYm9sZCAyMHB0IEFyaWFsJztcbiAgICAgICAgICAgIHN0eWxlLmZpbGwgPSBzdHlsZS5maWxsIHx8ICdibGFjayc7XG4gICAgICAgICAgICBzdHlsZS5hbGlnbiA9IHN0eWxlLmFsaWduIHx8ICdsZWZ0JztcbiAgICAgICAgICAgIHN0eWxlLnN0cm9rZSA9IHN0eWxlLnN0cm9rZSB8fCAnYmxhY2snOyAvL3Byb3ZpZGUgYSBkZWZhdWx0LCBzZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9waXhpanMvcGl4aS5qcy9pc3N1ZXMvMTM2XG4gICAgICAgICAgICBzdHlsZS5zdHJva2VUaGlja25lc3MgPSBzdHlsZS5zdHJva2VUaGlja25lc3MgfHwgMDtcbiAgICAgICAgICAgIHN0eWxlLndvcmRXcmFwID0gc3R5bGUud29yZFdyYXAgfHwgZmFsc2U7XG4gICAgICAgICAgICBzdHlsZS53b3JkV3JhcFdpZHRoID0gc3R5bGUud29yZFdyYXBXaWR0aCB8fCAxMDA7XG5cbiAgICAgICAgICAgIHN0eWxlLmRyb3BTaGFkb3cgPSBzdHlsZS5kcm9wU2hhZG93IHx8IGZhbHNlO1xuICAgICAgICAgICAgc3R5bGUuZHJvcFNoYWRvd0NvbG9yID0gc3R5bGUuZHJvcFNoYWRvd0NvbG9yIHx8ICcjMDAwMDAwJztcbiAgICAgICAgICAgIHN0eWxlLmRyb3BTaGFkb3dBbmdsZSA9IHN0eWxlLmRyb3BTaGFkb3dBbmdsZSAhPT0gdW5kZWZpbmVkID8gc3R5bGUuZHJvcFNoYWRvd0FuZ2xlIDogTWF0aC5QSSAvIDY7XG4gICAgICAgICAgICBzdHlsZS5kcm9wU2hhZG93RGlzdGFuY2UgPSBzdHlsZS5kcm9wU2hhZG93RGlzdGFuY2UgIT09IHVuZGVmaW5lZCA/IHN0eWxlLmRyb3BTaGFkb3dEaXN0YW5jZSA6IDU7XG4gICAgICAgICAgICBzdHlsZS5kcm9wU2hhZG93Qmx1ciA9IHN0eWxlLmRyb3BTaGFkb3dCbHVyICE9PSB1bmRlZmluZWQgPyBzdHlsZS5kcm9wU2hhZG93Qmx1ciA6IDA7IC8vc2hhZG93Qmx1ciBpcyAnMCcgYnkgZGVmYXVsdCBhY2NvcmRpbmcgdG8gSFRNTFxuXG4gICAgICAgICAgICBzdHlsZS5wYWRkaW5nID0gc3R5bGUucGFkZGluZyB8fCAwO1xuXG4gICAgICAgICAgICBzdHlsZS50ZXh0QmFzZWxpbmUgPSBzdHlsZS50ZXh0QmFzZWxpbmUgfHwgJ2FscGhhYmV0aWMnO1xuXG4gICAgICAgICAgICBzdHlsZS5saW5lSm9pbiA9IHN0eWxlLmxpbmVKb2luIHx8ICdtaXRlcic7XG4gICAgICAgICAgICBzdHlsZS5taXRlckxpbWl0ID0gc3R5bGUubWl0ZXJMaW1pdCB8fCAxMDtcblxuICAgICAgICAgICAgdGhpcy5fc3R5bGUgPSBzdHlsZTtcbiAgICAgICAgICAgIHRoaXMuZGlydHkgPSB0cnVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFNldCB0aGUgY29weSBmb3IgdGhlIHRleHQgb2JqZWN0LiBUbyBzcGxpdCBhIGxpbmUgeW91IGNhbiB1c2UgJ1xcbicuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gdGV4dCB7c3RyaW5nfSBUaGUgY29weSB0aGF0IHlvdSB3b3VsZCBsaWtlIHRoZSB0ZXh0IHRvIGRpc3BsYXlcbiAgICAgKiBAbWVtYmVyb2YgUElYSS5UZXh0I1xuICAgICAqL1xuICAgIHRleHQ6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbigpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl90ZXh0O1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh0ZXh0KXtcbiAgICAgICAgICAgIHRleHQgPSB0ZXh0LnRvU3RyaW5nKCkgfHwgJyAnO1xuICAgICAgICAgICAgaWYgKHRoaXMuX3RleHQgPT09IHRleHQpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5fdGV4dCA9IHRleHQ7XG4gICAgICAgICAgICB0aGlzLmRpcnR5ID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuXG4vKipcbiAqIFJlbmRlcnMgdGV4dCBhbmQgdXBkYXRlcyBpdCB3aGVuIG5lZWRlZFxuICpcbiAqIEBwcml2YXRlXG4gKi9cblRleHQucHJvdG90eXBlLnVwZGF0ZVRleHQgPSBmdW5jdGlvbiAoKVxue1xuICAgIHZhciBzdHlsZSA9IHRoaXMuX3N0eWxlO1xuICAgIHRoaXMuY29udGV4dC5mb250ID0gc3R5bGUuZm9udDtcblxuICAgIC8vIHdvcmQgd3JhcFxuICAgIC8vIHByZXNlcnZlIG9yaWdpbmFsIHRleHRcbiAgICB2YXIgb3V0cHV0VGV4dCA9IHN0eWxlLndvcmRXcmFwID8gdGhpcy53b3JkV3JhcCh0aGlzLl90ZXh0KSA6IHRoaXMuX3RleHQ7XG5cbiAgICAvLyBzcGxpdCB0ZXh0IGludG8gbGluZXNcbiAgICB2YXIgbGluZXMgPSBvdXRwdXRUZXh0LnNwbGl0KC8oPzpcXHJcXG58XFxyfFxcbikvKTtcblxuICAgIC8vIGNhbGN1bGF0ZSB0ZXh0IHdpZHRoXG4gICAgdmFyIGxpbmVXaWR0aHMgPSBuZXcgQXJyYXkobGluZXMubGVuZ3RoKTtcbiAgICB2YXIgbWF4TGluZVdpZHRoID0gMDtcbiAgICB2YXIgZm9udFByb3BlcnRpZXMgPSB0aGlzLmRldGVybWluZUZvbnRQcm9wZXJ0aWVzKHN0eWxlLmZvbnQpO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGluZXMubGVuZ3RoOyBpKyspXG4gICAge1xuICAgICAgICB2YXIgbGluZVdpZHRoID0gdGhpcy5jb250ZXh0Lm1lYXN1cmVUZXh0KGxpbmVzW2ldKS53aWR0aDtcbiAgICAgICAgbGluZVdpZHRoc1tpXSA9IGxpbmVXaWR0aDtcbiAgICAgICAgbWF4TGluZVdpZHRoID0gTWF0aC5tYXgobWF4TGluZVdpZHRoLCBsaW5lV2lkdGgpO1xuICAgIH1cblxuICAgIHZhciB3aWR0aCA9IG1heExpbmVXaWR0aCArIHN0eWxlLnN0cm9rZVRoaWNrbmVzcztcbiAgICBpZiAoc3R5bGUuZHJvcFNoYWRvdylcbiAgICB7XG4gICAgICAgIHdpZHRoICs9IHN0eWxlLmRyb3BTaGFkb3dEaXN0YW5jZTtcbiAgICB9XG5cbiAgICB0aGlzLmNhbnZhcy53aWR0aCA9ICggd2lkdGggKyB0aGlzLmNvbnRleHQubGluZVdpZHRoICkgKiB0aGlzLnJlc29sdXRpb247XG5cbiAgICAvLyBjYWxjdWxhdGUgdGV4dCBoZWlnaHRcbiAgICB2YXIgbGluZUhlaWdodCA9IHRoaXMuc3R5bGUubGluZUhlaWdodCB8fCBmb250UHJvcGVydGllcy5mb250U2l6ZSArIHN0eWxlLnN0cm9rZVRoaWNrbmVzcztcblxuICAgIHZhciBoZWlnaHQgPSBsaW5lSGVpZ2h0ICogbGluZXMubGVuZ3RoO1xuICAgIGlmIChzdHlsZS5kcm9wU2hhZG93KVxuICAgIHtcbiAgICAgICAgaGVpZ2h0ICs9IHN0eWxlLmRyb3BTaGFkb3dEaXN0YW5jZTtcbiAgICB9XG5cbiAgICB0aGlzLmNhbnZhcy5oZWlnaHQgPSAoIGhlaWdodCArIHRoaXMuX3N0eWxlLnBhZGRpbmcgKiAyICkgKiB0aGlzLnJlc29sdXRpb247XG5cbiAgICB0aGlzLmNvbnRleHQuc2NhbGUoIHRoaXMucmVzb2x1dGlvbiwgdGhpcy5yZXNvbHV0aW9uKTtcblxuICAgIGlmIChuYXZpZ2F0b3IuaXNDb2Nvb25KUylcbiAgICB7XG4gICAgICAgIHRoaXMuY29udGV4dC5jbGVhclJlY3QoMCwgMCwgdGhpcy5jYW52YXMud2lkdGgsIHRoaXMuY2FudmFzLmhlaWdodCk7XG5cbiAgICB9XG5cbiAgICAvL3RoaXMuY29udGV4dC5maWxsU3R5bGU9XCIjRkYwMDAwXCI7XG4gICAgLy90aGlzLmNvbnRleHQuZmlsbFJlY3QoMCwgMCwgdGhpcy5jYW52YXMud2lkdGgsIHRoaXMuY2FudmFzLmhlaWdodCk7XG5cbiAgICB0aGlzLmNvbnRleHQuZm9udCA9IHN0eWxlLmZvbnQ7XG4gICAgdGhpcy5jb250ZXh0LnN0cm9rZVN0eWxlID0gc3R5bGUuc3Ryb2tlO1xuICAgIHRoaXMuY29udGV4dC5saW5lV2lkdGggPSBzdHlsZS5zdHJva2VUaGlja25lc3M7XG4gICAgdGhpcy5jb250ZXh0LnRleHRCYXNlbGluZSA9IHN0eWxlLnRleHRCYXNlbGluZTtcbiAgICB0aGlzLmNvbnRleHQubGluZUpvaW4gPSBzdHlsZS5saW5lSm9pbjtcbiAgICB0aGlzLmNvbnRleHQubWl0ZXJMaW1pdCA9IHN0eWxlLm1pdGVyTGltaXQ7XG5cbiAgICB2YXIgbGluZVBvc2l0aW9uWDtcbiAgICB2YXIgbGluZVBvc2l0aW9uWTtcblxuICAgIGlmIChzdHlsZS5kcm9wU2hhZG93KVxuICAgIHtcbiAgICAgICAgaWYgKHN0eWxlLmRyb3BTaGFkb3dCbHVyID4gMCkge1xuICAgICAgICAgICAgdGhpcy5jb250ZXh0LnNoYWRvd0NvbG9yID0gc3R5bGUuZHJvcFNoYWRvd0NvbG9yO1xuICAgICAgICAgICAgdGhpcy5jb250ZXh0LnNoYWRvd0JsdXIgPSBzdHlsZS5kcm9wU2hhZG93Qmx1cjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuY29udGV4dC5maWxsU3R5bGUgPSBzdHlsZS5kcm9wU2hhZG93Q29sb3I7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgeFNoYWRvd09mZnNldCA9IE1hdGguY29zKHN0eWxlLmRyb3BTaGFkb3dBbmdsZSkgKiBzdHlsZS5kcm9wU2hhZG93RGlzdGFuY2U7XG4gICAgICAgIHZhciB5U2hhZG93T2Zmc2V0ID0gTWF0aC5zaW4oc3R5bGUuZHJvcFNoYWRvd0FuZ2xlKSAqIHN0eWxlLmRyb3BTaGFkb3dEaXN0YW5jZTtcblxuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbGluZXMubGVuZ3RoOyBpKyspXG4gICAgICAgIHtcbiAgICAgICAgICAgIGxpbmVQb3NpdGlvblggPSBzdHlsZS5zdHJva2VUaGlja25lc3MgLyAyO1xuICAgICAgICAgICAgbGluZVBvc2l0aW9uWSA9IChzdHlsZS5zdHJva2VUaGlja25lc3MgLyAyICsgaSAqIGxpbmVIZWlnaHQpICsgZm9udFByb3BlcnRpZXMuYXNjZW50O1xuXG4gICAgICAgICAgICBpZiAoc3R5bGUuYWxpZ24gPT09ICdyaWdodCcpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgbGluZVBvc2l0aW9uWCArPSBtYXhMaW5lV2lkdGggLSBsaW5lV2lkdGhzW2ldO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoc3R5bGUuYWxpZ24gPT09ICdjZW50ZXInKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGxpbmVQb3NpdGlvblggKz0gKG1heExpbmVXaWR0aCAtIGxpbmVXaWR0aHNbaV0pIC8gMjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHN0eWxlLmZpbGwpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdGhpcy5jb250ZXh0LmZpbGxUZXh0KGxpbmVzW2ldLCBsaW5lUG9zaXRpb25YICsgeFNoYWRvd09mZnNldCwgbGluZVBvc2l0aW9uWSArIHlTaGFkb3dPZmZzZXQgKyB0aGlzLl9zdHlsZS5wYWRkaW5nKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vc2V0IGNhbnZhcyB0ZXh0IHN0eWxlc1xuICAgIHRoaXMuY29udGV4dC5maWxsU3R5bGUgPSBzdHlsZS5maWxsO1xuXG4gICAgLy9kcmF3IGxpbmVzIGxpbmUgYnkgbGluZVxuICAgIGZvciAoaSA9IDA7IGkgPCBsaW5lcy5sZW5ndGg7IGkrKylcbiAgICB7XG4gICAgICAgIGxpbmVQb3NpdGlvblggPSBzdHlsZS5zdHJva2VUaGlja25lc3MgLyAyO1xuICAgICAgICBsaW5lUG9zaXRpb25ZID0gKHN0eWxlLnN0cm9rZVRoaWNrbmVzcyAvIDIgKyBpICogbGluZUhlaWdodCkgKyBmb250UHJvcGVydGllcy5hc2NlbnQ7XG5cbiAgICAgICAgaWYgKHN0eWxlLmFsaWduID09PSAncmlnaHQnKVxuICAgICAgICB7XG4gICAgICAgICAgICBsaW5lUG9zaXRpb25YICs9IG1heExpbmVXaWR0aCAtIGxpbmVXaWR0aHNbaV07XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoc3R5bGUuYWxpZ24gPT09ICdjZW50ZXInKVxuICAgICAgICB7XG4gICAgICAgICAgICBsaW5lUG9zaXRpb25YICs9IChtYXhMaW5lV2lkdGggLSBsaW5lV2lkdGhzW2ldKSAvIDI7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoc3R5bGUuc3Ryb2tlICYmIHN0eWxlLnN0cm9rZVRoaWNrbmVzcylcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5jb250ZXh0LnN0cm9rZVRleHQobGluZXNbaV0sIGxpbmVQb3NpdGlvblgsIGxpbmVQb3NpdGlvblkgKyB0aGlzLl9zdHlsZS5wYWRkaW5nKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChzdHlsZS5maWxsKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmNvbnRleHQuZmlsbFRleHQobGluZXNbaV0sIGxpbmVQb3NpdGlvblgsIGxpbmVQb3NpdGlvblkgKyB0aGlzLl9zdHlsZS5wYWRkaW5nKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMudXBkYXRlVGV4dHVyZSgpO1xufTtcblxuLyoqXG4gKiBVcGRhdGVzIHRleHR1cmUgc2l6ZSBiYXNlZCBvbiBjYW52YXMgc2l6ZVxuICpcbiAqIEBwcml2YXRlXG4gKi9cblRleHQucHJvdG90eXBlLnVwZGF0ZVRleHR1cmUgPSBmdW5jdGlvbiAoKVxue1xuICAgIHZhciB0ZXh0dXJlID0gdGhpcy5fdGV4dHVyZTtcblxuICAgIHRleHR1cmUuYmFzZVRleHR1cmUuaGFzTG9hZGVkID0gdHJ1ZTtcbiAgICB0ZXh0dXJlLmJhc2VUZXh0dXJlLnJlc29sdXRpb24gPSB0aGlzLnJlc29sdXRpb247XG5cbiAgICB0ZXh0dXJlLmJhc2VUZXh0dXJlLndpZHRoID0gdGhpcy5jYW52YXMud2lkdGggLyB0aGlzLnJlc29sdXRpb247XG4gICAgdGV4dHVyZS5iYXNlVGV4dHVyZS5oZWlnaHQgPSB0aGlzLmNhbnZhcy5oZWlnaHQgLyB0aGlzLnJlc29sdXRpb247XG4gICAgdGV4dHVyZS5jcm9wLndpZHRoID0gdGV4dHVyZS5fZnJhbWUud2lkdGggPSB0aGlzLmNhbnZhcy53aWR0aCAvIHRoaXMucmVzb2x1dGlvbjtcbiAgICB0ZXh0dXJlLmNyb3AuaGVpZ2h0ID0gdGV4dHVyZS5fZnJhbWUuaGVpZ2h0ID0gdGhpcy5jYW52YXMuaGVpZ2h0IC8gdGhpcy5yZXNvbHV0aW9uO1xuXG4gICAgdGV4dHVyZS50cmltLnggPSAwO1xuICAgIHRleHR1cmUudHJpbS55ID0gLXRoaXMuX3N0eWxlLnBhZGRpbmc7XG5cbiAgICB0ZXh0dXJlLnRyaW0ud2lkdGggPSB0ZXh0dXJlLl9mcmFtZS53aWR0aDtcbiAgICB0ZXh0dXJlLnRyaW0uaGVpZ2h0ID0gdGV4dHVyZS5fZnJhbWUuaGVpZ2h0IC0gdGhpcy5fc3R5bGUucGFkZGluZyoyO1xuXG4gICAgdGhpcy5fd2lkdGggPSB0aGlzLmNhbnZhcy53aWR0aCAvIHRoaXMucmVzb2x1dGlvbjtcbiAgICB0aGlzLl9oZWlnaHQgPSB0aGlzLmNhbnZhcy5oZWlnaHQgLyB0aGlzLnJlc29sdXRpb247XG5cbiAgICB0ZXh0dXJlLmJhc2VUZXh0dXJlLmVtaXQoJ3VwZGF0ZScsICB0ZXh0dXJlLmJhc2VUZXh0dXJlKTtcblxuICAgIHRoaXMuZGlydHkgPSBmYWxzZTtcbn07XG5cbi8qKlxuICogUmVuZGVycyB0aGUgb2JqZWN0IHVzaW5nIHRoZSBXZWJHTCByZW5kZXJlclxuICpcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5XZWJHTFJlbmRlcmVyfVxuICovXG5UZXh0LnByb3RvdHlwZS5yZW5kZXJXZWJHTCA9IGZ1bmN0aW9uIChyZW5kZXJlcilcbntcbiAgICBpZiAodGhpcy5kaXJ0eSlcbiAgICB7XG4gICAgICAgIC8vdGhpcy5yZXNvbHV0aW9uID0gMS8vcmVuZGVyZXIucmVzb2x1dGlvbjtcblxuICAgICAgICB0aGlzLnVwZGF0ZVRleHQoKTtcbiAgICB9XG5cbiAgICBTcHJpdGUucHJvdG90eXBlLnJlbmRlcldlYkdMLmNhbGwodGhpcywgcmVuZGVyZXIpO1xufTtcblxuLyoqXG4gKiBSZW5kZXJzIHRoZSBvYmplY3QgdXNpbmcgdGhlIENhbnZhcyByZW5kZXJlclxuICpcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5DYW52YXNSZW5kZXJlcn1cbiAqIEBwcml2YXRlXG4gKi9cblRleHQucHJvdG90eXBlLl9yZW5kZXJDYW52YXMgPSBmdW5jdGlvbiAocmVuZGVyZXIpXG57XG4gICAgaWYgKHRoaXMuZGlydHkpXG4gICAge1xuICAgICAvLyAgIHRoaXMucmVzb2x1dGlvbiA9IDEvL3JlbmRlcmVyLnJlc29sdXRpb247XG5cbiAgICAgICAgdGhpcy51cGRhdGVUZXh0KCk7XG4gICAgfVxuXG4gICAgU3ByaXRlLnByb3RvdHlwZS5fcmVuZGVyQ2FudmFzLmNhbGwodGhpcywgcmVuZGVyZXIpO1xufTtcblxuLyoqXG4gKiBDYWxjdWxhdGVzIHRoZSBhc2NlbnQsIGRlc2NlbnQgYW5kIGZvbnRTaXplIG9mIGEgZ2l2ZW4gZm9udFN0eWxlXG4gKlxuICogQHBhcmFtIGZvbnRTdHlsZSB7b2JqZWN0fVxuICogQHByaXZhdGVcbiAqL1xuVGV4dC5wcm90b3R5cGUuZGV0ZXJtaW5lRm9udFByb3BlcnRpZXMgPSBmdW5jdGlvbiAoZm9udFN0eWxlKVxue1xuICAgIHZhciBwcm9wZXJ0aWVzID0gVGV4dC5mb250UHJvcGVydGllc0NhY2hlW2ZvbnRTdHlsZV07XG5cbiAgICBpZiAoIXByb3BlcnRpZXMpXG4gICAge1xuICAgICAgICBwcm9wZXJ0aWVzID0ge307XG5cbiAgICAgICAgdmFyIGNhbnZhcyA9IFRleHQuZm9udFByb3BlcnRpZXNDYW52YXM7XG4gICAgICAgIHZhciBjb250ZXh0ID0gVGV4dC5mb250UHJvcGVydGllc0NvbnRleHQ7XG5cbiAgICAgICAgY29udGV4dC5mb250ID0gZm9udFN0eWxlO1xuXG4gICAgICAgIHZhciB3aWR0aCA9IE1hdGguY2VpbChjb250ZXh0Lm1lYXN1cmVUZXh0KCd8TcOJcScpLndpZHRoKTtcbiAgICAgICAgdmFyIGJhc2VsaW5lID0gTWF0aC5jZWlsKGNvbnRleHQubWVhc3VyZVRleHQoJ00nKS53aWR0aCk7XG4gICAgICAgIHZhciBoZWlnaHQgPSAyICogYmFzZWxpbmU7XG5cbiAgICAgICAgYmFzZWxpbmUgPSBiYXNlbGluZSAqIDEuNCB8IDA7XG5cbiAgICAgICAgY2FudmFzLndpZHRoID0gd2lkdGg7XG4gICAgICAgIGNhbnZhcy5oZWlnaHQgPSBoZWlnaHQ7XG5cbiAgICAgICAgY29udGV4dC5maWxsU3R5bGUgPSAnI2YwMCc7XG4gICAgICAgIGNvbnRleHQuZmlsbFJlY3QoMCwgMCwgd2lkdGgsIGhlaWdodCk7XG5cbiAgICAgICAgY29udGV4dC5mb250ID0gZm9udFN0eWxlO1xuXG4gICAgICAgIGNvbnRleHQudGV4dEJhc2VsaW5lID0gJ2FscGhhYmV0aWMnO1xuICAgICAgICBjb250ZXh0LmZpbGxTdHlsZSA9ICcjMDAwJztcbiAgICAgICAgY29udGV4dC5maWxsVGV4dCgnfE3DiXEnLCAwLCBiYXNlbGluZSk7XG5cbiAgICAgICAgdmFyIGltYWdlZGF0YSA9IGNvbnRleHQuZ2V0SW1hZ2VEYXRhKDAsIDAsIHdpZHRoLCBoZWlnaHQpLmRhdGE7XG4gICAgICAgIHZhciBwaXhlbHMgPSBpbWFnZWRhdGEubGVuZ3RoO1xuICAgICAgICB2YXIgbGluZSA9IHdpZHRoICogNDtcblxuICAgICAgICB2YXIgaSwgajtcblxuICAgICAgICB2YXIgaWR4ID0gMDtcbiAgICAgICAgdmFyIHN0b3AgPSBmYWxzZTtcblxuICAgICAgICAvLyBhc2NlbnQuIHNjYW4gZnJvbSB0b3AgdG8gYm90dG9tIHVudGlsIHdlIGZpbmQgYSBub24gcmVkIHBpeGVsXG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCBiYXNlbGluZTsgaSsrKVxuICAgICAgICB7XG4gICAgICAgICAgICBmb3IgKGogPSAwOyBqIDwgbGluZTsgaiArPSA0KVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGlmIChpbWFnZWRhdGFbaWR4ICsgal0gIT09IDI1NSlcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIHN0b3AgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIXN0b3ApXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgaWR4ICs9IGxpbmU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBwcm9wZXJ0aWVzLmFzY2VudCA9IGJhc2VsaW5lIC0gaTtcblxuICAgICAgICBpZHggPSBwaXhlbHMgLSBsaW5lO1xuICAgICAgICBzdG9wID0gZmFsc2U7XG5cbiAgICAgICAgLy8gZGVzY2VudC4gc2NhbiBmcm9tIGJvdHRvbSB0byB0b3AgdW50aWwgd2UgZmluZCBhIG5vbiByZWQgcGl4ZWxcbiAgICAgICAgZm9yIChpID0gaGVpZ2h0OyBpID4gYmFzZWxpbmU7IGktLSlcbiAgICAgICAge1xuICAgICAgICAgICAgZm9yIChqID0gMDsgaiA8IGxpbmU7IGogKz0gNClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBpZiAoaW1hZ2VkYXRhW2lkeCArIGpdICE9PSAyNTUpXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBzdG9wID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCFzdG9wKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGlkeCAtPSBsaW5lO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcHJvcGVydGllcy5kZXNjZW50ID0gaSAtIGJhc2VsaW5lO1xuICAgICAgICBwcm9wZXJ0aWVzLmZvbnRTaXplID0gcHJvcGVydGllcy5hc2NlbnQgKyBwcm9wZXJ0aWVzLmRlc2NlbnQ7XG5cbiAgICAgICAgVGV4dC5mb250UHJvcGVydGllc0NhY2hlW2ZvbnRTdHlsZV0gPSBwcm9wZXJ0aWVzO1xuICAgIH1cblxuICAgIHJldHVybiBwcm9wZXJ0aWVzO1xufTtcblxuLyoqXG4gKiBBcHBsaWVzIG5ld2xpbmVzIHRvIGEgc3RyaW5nIHRvIGhhdmUgaXQgb3B0aW1hbGx5IGZpdCBpbnRvIHRoZSBob3Jpem9udGFsXG4gKiBib3VuZHMgc2V0IGJ5IHRoZSBUZXh0IG9iamVjdCdzIHdvcmRXcmFwV2lkdGggcHJvcGVydHkuXG4gKlxuICogQHBhcmFtIHRleHQge3N0cmluZ31cbiAqIEBwcml2YXRlXG4gKi9cblRleHQucHJvdG90eXBlLndvcmRXcmFwID0gZnVuY3Rpb24gKHRleHQpXG57XG4gICAgLy8gR3JlZWR5IHdyYXBwaW5nIGFsZ29yaXRobSB0aGF0IHdpbGwgd3JhcCB3b3JkcyBhcyB0aGUgbGluZSBncm93cyBsb25nZXJcbiAgICAvLyB0aGFuIGl0cyBob3Jpem9udGFsIGJvdW5kcy5cbiAgICB2YXIgcmVzdWx0ID0gJyc7XG4gICAgdmFyIGxpbmVzID0gdGV4dC5zcGxpdCgnXFxuJyk7XG4gICAgdmFyIHdvcmRXcmFwV2lkdGggPSB0aGlzLl9zdHlsZS53b3JkV3JhcFdpZHRoO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGluZXMubGVuZ3RoOyBpKyspXG4gICAge1xuICAgICAgICB2YXIgc3BhY2VMZWZ0ID0gd29yZFdyYXBXaWR0aDtcbiAgICAgICAgdmFyIHdvcmRzID0gbGluZXNbaV0uc3BsaXQoJyAnKTtcbiAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCB3b3Jkcy5sZW5ndGg7IGorKylcbiAgICAgICAge1xuICAgICAgICAgICAgdmFyIHdvcmRXaWR0aCA9IHRoaXMuY29udGV4dC5tZWFzdXJlVGV4dCh3b3Jkc1tqXSkud2lkdGg7XG4gICAgICAgICAgICB2YXIgd29yZFdpZHRoV2l0aFNwYWNlID0gd29yZFdpZHRoICsgdGhpcy5jb250ZXh0Lm1lYXN1cmVUZXh0KCcgJykud2lkdGg7XG4gICAgICAgICAgICBpZiAoaiA9PT0gMCB8fCB3b3JkV2lkdGhXaXRoU3BhY2UgPiBzcGFjZUxlZnQpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgLy8gU2tpcCBwcmludGluZyB0aGUgbmV3bGluZSBpZiBpdCdzIHRoZSBmaXJzdCB3b3JkIG9mIHRoZSBsaW5lIHRoYXQgaXNcbiAgICAgICAgICAgICAgICAvLyBncmVhdGVyIHRoYW4gdGhlIHdvcmQgd3JhcCB3aWR0aC5cbiAgICAgICAgICAgICAgICBpZiAoaiA+IDApXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQgKz0gJ1xcbic7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJlc3VsdCArPSB3b3Jkc1tqXTtcbiAgICAgICAgICAgICAgICBzcGFjZUxlZnQgPSB3b3JkV3JhcFdpZHRoIC0gd29yZFdpZHRoO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHNwYWNlTGVmdCAtPSB3b3JkV2lkdGhXaXRoU3BhY2U7XG4gICAgICAgICAgICAgICAgcmVzdWx0ICs9ICcgJyArIHdvcmRzW2pdO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGkgPCBsaW5lcy5sZW5ndGgtMSlcbiAgICAgICAge1xuICAgICAgICAgICAgcmVzdWx0ICs9ICdcXG4nO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG59O1xuXG4vKipcbiAqIFJldHVybnMgdGhlIGJvdW5kcyBvZiB0aGUgVGV4dCBhcyBhIHJlY3RhbmdsZS4gVGhlIGJvdW5kcyBjYWxjdWxhdGlvbiB0YWtlcyB0aGUgd29ybGRUcmFuc2Zvcm0gaW50byBhY2NvdW50LlxuICpcbiAqIEBwYXJhbSBtYXRyaXgge1BJWEkuTWF0cml4fSB0aGUgdHJhbnNmb3JtYXRpb24gbWF0cml4IG9mIHRoZSBUZXh0XG4gKiBAcmV0dXJuIHtQSVhJLlJlY3RhbmdsZX0gdGhlIGZyYW1pbmcgcmVjdGFuZ2xlXG4gKi9cblRleHQucHJvdG90eXBlLmdldEJvdW5kcyA9IGZ1bmN0aW9uIChtYXRyaXgpXG57XG4gICAgaWYgKHRoaXMuZGlydHkpXG4gICAge1xuICAgICAgICB0aGlzLnVwZGF0ZVRleHQoKTtcbiAgICB9XG5cbiAgICByZXR1cm4gU3ByaXRlLnByb3RvdHlwZS5nZXRCb3VuZHMuY2FsbCh0aGlzLCBtYXRyaXgpO1xufTtcblxuLyoqXG4gKiBEZXN0cm95cyB0aGlzIHRleHQgb2JqZWN0LlxuICpcbiAqIEBwYXJhbSBbZGVzdHJveUJhc2VUZXh0dXJlPXRydWVdIHtib29sZWFufSB3aGV0aGVyIHRvIGRlc3Ryb3kgdGhlIGJhc2UgdGV4dHVyZSBhcyB3ZWxsXG4gKi9cblRleHQucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoZGVzdHJveUJhc2VUZXh0dXJlKVxue1xuICAgIC8vIG1ha2Ugc3VyZSB0byByZXNldCB0aGUgdGhlIGNvbnRleHQgYW5kIGNhbnZhcy4uIGRvbnQgd2FudCB0aGlzIGhhbmdpbmcgYXJvdW5kIGluIG1lbW9yeSFcbiAgICB0aGlzLmNvbnRleHQgPSBudWxsO1xuICAgIHRoaXMuY2FudmFzID0gbnVsbDtcblxuICAgIHRoaXMuX3N0eWxlID0gbnVsbDtcblxuICAgIHRoaXMuX3RleHR1cmUuZGVzdHJveShkZXN0cm95QmFzZVRleHR1cmUgPT09IHVuZGVmaW5lZCA/IHRydWUgOiBkZXN0cm95QmFzZVRleHR1cmUpO1xufTtcbiIsInZhciB1dGlscyA9IHJlcXVpcmUoJy4uL3V0aWxzJyksXG4gICAgQ09OU1QgPSByZXF1aXJlKCcuLi9jb25zdCcpLFxuICAgIEV2ZW50RW1pdHRlciA9IHJlcXVpcmUoJ2V2ZW50ZW1pdHRlcjMnKTtcblxuLyoqXG4gKiBBIHRleHR1cmUgc3RvcmVzIHRoZSBpbmZvcm1hdGlvbiB0aGF0IHJlcHJlc2VudHMgYW4gaW1hZ2UuIEFsbCB0ZXh0dXJlcyBoYXZlIGEgYmFzZSB0ZXh0dXJlLlxuICpcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqIEBwYXJhbSBzb3VyY2Uge0ltYWdlfENhbnZhc30gdGhlIHNvdXJjZSBvYmplY3Qgb2YgdGhlIHRleHR1cmUuXG4gKiBAcGFyYW0gW3NjYWxlTW9kZT1QSVhJLlNDQUxFX01PREVTLkRFRkFVTFRdIHtudW1iZXJ9IFNlZSB7QGxpbmsgUElYSS5TQ0FMRV9NT0RFU30gZm9yIHBvc3NpYmxlIHZhbHVlc1xuICogQHBhcmFtIHJlc29sdXRpb24ge251bWJlcn0gdGhlIHJlc29sdXRpb24gb2YgdGhlIHRleHR1cmUgZm9yIGRldmljZXMgd2l0aCBkaWZmZXJlbnQgcGl4ZWwgcmF0aW9zXG4gKi9cbmZ1bmN0aW9uIEJhc2VUZXh0dXJlKHNvdXJjZSwgc2NhbGVNb2RlLCByZXNvbHV0aW9uKVxue1xuICAgIEV2ZW50RW1pdHRlci5jYWxsKHRoaXMpO1xuXG4gICAgdGhpcy51aWQgPSB1dGlscy51aWQoKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBSZXNvbHV0aW9uIG9mIHRoZSB0ZXh0dXJlLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMucmVzb2x1dGlvbiA9IHJlc29sdXRpb24gfHwgMTtcblxuICAgIC8qKlxuICAgICAqIFRoZSB3aWR0aCBvZiB0aGUgYmFzZSB0ZXh0dXJlIHNldCB3aGVuIHRoZSBpbWFnZSBoYXMgbG9hZGVkXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQHJlYWRPbmx5XG4gICAgICovXG4gICAgdGhpcy53aWR0aCA9IDEwMDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBoZWlnaHQgb2YgdGhlIGJhc2UgdGV4dHVyZSBzZXQgd2hlbiB0aGUgaW1hZ2UgaGFzIGxvYWRlZFxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEByZWFkT25seVxuICAgICAqL1xuICAgIHRoaXMuaGVpZ2h0ID0gMTAwO1xuXG4gICAgLy8gVE9ETyBkb2NzXG4gICAgLy8gdXNlZCB0byBzdG9yZSB0aGUgYWN0dWFsIGRpbWVuc2lvbnMgb2YgdGhlIHNvdXJjZVxuICAgIC8qKlxuICAgICAqIFVzZWQgdG8gc3RvcmUgdGhlIGFjdHVhbCB3aWR0aCBvZiB0aGUgc291cmNlIG9mIHRoaXMgdGV4dHVyZVxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEByZWFkT25seVxuICAgICAqL1xuICAgIHRoaXMucmVhbFdpZHRoID0gMTAwO1xuICAgIC8qKlxuICAgICAqIFVzZWQgdG8gc3RvcmUgdGhlIGFjdHVhbCBoZWlnaHQgb2YgdGhlIHNvdXJjZSBvZiB0aGlzIHRleHR1cmVcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAcmVhZE9ubHlcbiAgICAgKi9cbiAgICB0aGlzLnJlYWxIZWlnaHQgPSAxMDA7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgc2NhbGUgbW9kZSB0byBhcHBseSB3aGVuIHNjYWxpbmcgdGhpcyB0ZXh0dXJlXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgUElYSS5TQ0FMRV9NT0RFUy5MSU5FQVJcbiAgICAgKiBAc2VlIFBJWEkuU0NBTEVfTU9ERVNcbiAgICAgKi9cbiAgICB0aGlzLnNjYWxlTW9kZSA9IHNjYWxlTW9kZSB8fCBDT05TVC5TQ0FMRV9NT0RFUy5ERUZBVUxUO1xuXG4gICAgLyoqXG4gICAgICogU2V0IHRvIHRydWUgb25jZSB0aGUgYmFzZSB0ZXh0dXJlIGhhcyBzdWNjZXNzZnVsbHkgbG9hZGVkLlxuICAgICAqXG4gICAgICogVGhpcyBpcyBuZXZlciB0cnVlIGlmIHRoZSB1bmRlcmx5aW5nIHNvdXJjZSBmYWlscyB0byBsb2FkIG9yIGhhcyBubyB0ZXh0dXJlIGRhdGEuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqIEByZWFkT25seVxuICAgICAqL1xuICAgIHRoaXMuaGFzTG9hZGVkID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBTZXQgdG8gdHJ1ZSBpZiB0aGUgc291cmNlIGlzIGN1cnJlbnRseSBsb2FkaW5nLlxuICAgICAqXG4gICAgICogSWYgYW4gSW1hZ2Ugc291cmNlIGlzIGxvYWRpbmcgdGhlICdsb2FkZWQnIG9yICdlcnJvcicgZXZlbnQgd2lsbCBiZVxuICAgICAqIGRpc3BhdGNoZWQgd2hlbiB0aGUgb3BlcmF0aW9uIGVuZHMuIEFuIHVuZGVyeWxpbmcgc291cmNlIHRoYXQgaXNcbiAgICAgKiBpbW1lZGlhdGVseS1hdmFpbGFibGUgYnlwYXNzZXMgbG9hZGluZyBlbnRpcmVseS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICogQHJlYWRvbmx5XG4gICAgICovXG4gICAgdGhpcy5pc0xvYWRpbmcgPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBpbWFnZSBzb3VyY2UgdGhhdCBpcyB1c2VkIHRvIGNyZWF0ZSB0aGUgdGV4dHVyZS5cbiAgICAgKlxuICAgICAqIFRPRE86IE1ha2UgdGhpcyBhIHNldHRlciB0aGF0IGNhbGxzIGxvYWRTb3VyY2UoKTtcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge0ltYWdlfENhbnZhc31cbiAgICAgKiBAcmVhZG9ubHlcbiAgICAgKi9cbiAgICB0aGlzLnNvdXJjZSA9IG51bGw7IC8vIHNldCBpbiBsb2FkU291cmNlLCBpZiBhdCBhbGxcblxuICAgIC8qKlxuICAgICAqIENvbnRyb2xzIGlmIFJHQiBjaGFubmVscyBzaG91bGQgYmUgcHJlLW11bHRpcGxpZWQgYnkgQWxwaGEgIChXZWJHTCBvbmx5KVxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKiBAZGVmYXVsdCB0cnVlXG4gICAgICovXG4gICAgdGhpcy5wcmVtdWx0aXBsaWVkQWxwaGEgPSB0cnVlO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7c3RyaW5nfVxuICAgICAqL1xuICAgIHRoaXMuaW1hZ2VVcmwgPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogV2V0aGVyIG9yIG5vdCB0aGUgdGV4dHVyZSBpcyBhIHBvd2VyIG9mIHR3bywgdHJ5IHRvIHVzZSBwb3dlciBvZiB0d28gdGV4dHVyZXMgYXMgbXVjaCBhcyB5b3UgY2FuXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuaXNQb3dlck9mVHdvID0gZmFsc2U7XG5cbiAgICAvLyB1c2VkIGZvciB3ZWJHTFxuXG4gICAgLyoqXG4gICAgICpcbiAgICAgKiBTZXQgdGhpcyB0byB0cnVlIGlmIGEgbWlwbWFwIG9mIHRoaXMgdGV4dHVyZSBuZWVkcyB0byBiZSBnZW5lcmF0ZWQuIFRoaXMgdmFsdWUgbmVlZHMgdG8gYmUgc2V0IGJlZm9yZSB0aGUgdGV4dHVyZSBpcyB1c2VkXG4gICAgICogQWxzbyB0aGUgdGV4dHVyZSBtdXN0IGJlIGEgcG93ZXIgb2YgdHdvIHNpemUgdG8gd29ya1xuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKi9cbiAgICB0aGlzLm1pcG1hcCA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogQSBtYXAgb2YgcmVuZGVyZXIgSURzIHRvIHdlYmdsIHRleHR1cmVzXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtvYmplY3Q8bnVtYmVyLCBXZWJHTFRleHR1cmU+fVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fZ2xUZXh0dXJlcyA9IHt9O1xuICAgIHRoaXMuX2FjdGl2ZSA9IGZhbHNlO1xuICAgIHRoaXMuX2lkID0gMDtcbiAgICBcbiAgICAvLyBpZiBubyBzb3VyY2UgcGFzc2VkIGRvbid0IHRyeSB0byBsb2FkXG4gICAgaWYgKHNvdXJjZSlcbiAgICB7XG4gICAgICAgIHRoaXMubG9hZFNvdXJjZShzb3VyY2UpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEZpcmVkIHdoZW4gYSBub3QtaW1tZWRpYXRlbHktYXZhaWxhYmxlIHNvdXJjZSBmaW5pc2hlcyBsb2FkaW5nLlxuICAgICAqXG4gICAgICogQGV2ZW50IGxvYWRlZFxuICAgICAqIEBtZW1iZXJvZiBQSVhJLkJhc2VUZXh0dXJlI1xuICAgICAqIEBwcm90ZWN0ZWRcbiAgICAgKi9cblxuICAgIC8qKlxuICAgICAqIEZpcmVkIHdoZW4gYSBub3QtaW1tZWRpYXRlbHktYXZhaWxhYmxlIHNvdXJjZSBmYWlscyB0byBsb2FkLlxuICAgICAqXG4gICAgICogQGV2ZW50IGVycm9yXG4gICAgICogQG1lbWJlcm9mIFBJWEkuQmFzZVRleHR1cmUjXG4gICAgICogQHByb3RlY3RlZFxuICAgICAqL1xufVxuXG5CYXNlVGV4dHVyZS5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKEV2ZW50RW1pdHRlci5wcm90b3R5cGUpO1xuQmFzZVRleHR1cmUucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gQmFzZVRleHR1cmU7XG5tb2R1bGUuZXhwb3J0cyA9IEJhc2VUZXh0dXJlO1xuXG4vKipcbiAqIFVwZGF0ZXMgdGhlIHRleHR1cmUgb24gYWxsIHRoZSB3ZWJnbCByZW5kZXJlcnMsIHRoaXMgYWxzbyBhc3N1bWVzIHRoZSBzcmMgaGFzIGNoYW5nZWQuXG4gKlxuICogQGZpcmVzIHVwZGF0ZVxuICovXG5CYXNlVGV4dHVyZS5wcm90b3R5cGUudXBkYXRlID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLnJlYWxXaWR0aCA9IHRoaXMuc291cmNlLm5hdHVyYWxXaWR0aCB8fCB0aGlzLnNvdXJjZS53aWR0aDtcbiAgICB0aGlzLnJlYWxIZWlnaHQgPSB0aGlzLnNvdXJjZS5uYXR1cmFsSGVpZ2h0IHx8IHRoaXMuc291cmNlLmhlaWdodDtcblxuICAgIHRoaXMud2lkdGggPSB0aGlzLnJlYWxXaWR0aCAvIHRoaXMucmVzb2x1dGlvbjtcbiAgICB0aGlzLmhlaWdodCA9IHRoaXMucmVhbEhlaWdodCAvIHRoaXMucmVzb2x1dGlvbjtcblxuICAgIHRoaXMuaXNQb3dlck9mVHdvID0gdXRpbHMuaXNQb3dlck9mVHdvKHRoaXMucmVhbFdpZHRoLCB0aGlzLnJlYWxIZWlnaHQpO1xuXG4gICAgdGhpcy5lbWl0KCd1cGRhdGUnLCB0aGlzKTtcbn07XG5cbi8qKlxuICogTG9hZCBhIHNvdXJjZS5cbiAqXG4gKiBJZiB0aGUgc291cmNlIGlzIG5vdC1pbW1lZGlhdGVseS1hdmFpbGFibGUsIHN1Y2ggYXMgYW4gaW1hZ2UgdGhhdCBuZWVkcyB0byBiZVxuICogZG93bmxvYWRlZCwgdGhlbiB0aGUgJ2xvYWRlZCcgb3IgJ2Vycm9yJyBldmVudCB3aWxsIGJlIGRpc3BhdGNoZWQgaW4gdGhlIGZ1dHVyZVxuICogYW5kIGBoYXNMb2FkZWRgIHdpbGwgcmVtYWluIGZhbHNlIGFmdGVyIHRoaXMgY2FsbC5cbiAqXG4gKiBUaGUgbG9naWMgc3RhdGUgYWZ0ZXIgY2FsbGluZyBgbG9hZFNvdXJjZWAgZGlyZWN0bHkgb3IgaW5kaXJlY3RseSAoZWcuIGBmcm9tSW1hZ2VgLCBgbmV3IEJhc2VUZXh0dXJlYCkgaXM6XG4gKlxuICogICAgIGlmICh0ZXh0dXJlLmhhc0xvYWRlZClcbiB7XG4gKiAgICAgICAgLy8gdGV4dHVyZSByZWFkeSBmb3IgdXNlXG4gKiAgICAgfSBlbHNlIGlmICh0ZXh0dXJlLmlzTG9hZGluZylcbiB7XG4gKiAgICAgICAgLy8gbGlzdGVuIHRvICdsb2FkZWQnIGFuZC9vciAnZXJyb3InIGV2ZW50cyBvbiB0ZXh0dXJlXG4gKiAgICAgfSBlbHNlIHtcbiAqICAgICAgICAvLyBub3QgbG9hZGluZywgbm90IGdvaW5nIHRvIGxvYWQgVU5MRVNTIHRoZSBzb3VyY2UgaXMgcmVsb2FkZWRcbiAqICAgICAgICAvLyAoaXQgbWF5IHN0aWxsIG1ha2Ugc2Vuc2UgdG8gbGlzdGVuIHRvIHRoZSBldmVudHMpXG4gKiAgICAgfVxuICpcbiAqIEBwcm90ZWN0ZWRcbiAqIEBwYXJhbSBzb3VyY2Uge0ltYWdlfENhbnZhc30gdGhlIHNvdXJjZSBvYmplY3Qgb2YgdGhlIHRleHR1cmUuXG4gKi9cbkJhc2VUZXh0dXJlLnByb3RvdHlwZS5sb2FkU291cmNlID0gZnVuY3Rpb24gKHNvdXJjZSlcbntcbiAgICB2YXIgd2FzTG9hZGluZyA9IHRoaXMuaXNMb2FkaW5nO1xuICAgIHRoaXMuaGFzTG9hZGVkID0gZmFsc2U7XG4gICAgdGhpcy5pc0xvYWRpbmcgPSBmYWxzZTtcblxuICAgIGlmICh3YXNMb2FkaW5nICYmIHRoaXMuc291cmNlKVxuICAgIHtcbiAgICAgICAgdGhpcy5zb3VyY2Uub25sb2FkID0gbnVsbDtcbiAgICAgICAgdGhpcy5zb3VyY2Uub25lcnJvciA9IG51bGw7XG4gICAgfVxuXG4gICAgdGhpcy5zb3VyY2UgPSBzb3VyY2U7XG5cbiAgICAvLyBBcHBseSBzb3VyY2UgaWYgbG9hZGVkLiBPdGhlcndpc2Ugc2V0dXAgYXBwcm9wcmlhdGUgbG9hZGluZyBtb25pdG9ycy5cbiAgICBpZiAoKHRoaXMuc291cmNlLmNvbXBsZXRlIHx8IHRoaXMuc291cmNlLmdldENvbnRleHQpICYmIHRoaXMuc291cmNlLndpZHRoICYmIHRoaXMuc291cmNlLmhlaWdodClcbiAgICB7XG4gICAgICAgIHRoaXMuX3NvdXJjZUxvYWRlZCgpO1xuICAgIH1cbiAgICBlbHNlIGlmICghc291cmNlLmdldENvbnRleHQpXG4gICAge1xuXG4gICAgICAgIC8vIEltYWdlIGZhaWwgLyBub3QgcmVhZHlcbiAgICAgICAgdGhpcy5pc0xvYWRpbmcgPSB0cnVlO1xuXG4gICAgICAgIHZhciBzY29wZSA9IHRoaXM7XG5cbiAgICAgICAgc291cmNlLm9ubG9hZCA9IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHNvdXJjZS5vbmxvYWQgPSBudWxsO1xuICAgICAgICAgICAgc291cmNlLm9uZXJyb3IgPSBudWxsO1xuXG4gICAgICAgICAgICBpZiAoIXNjb3BlLmlzTG9hZGluZylcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHNjb3BlLmlzTG9hZGluZyA9IGZhbHNlO1xuICAgICAgICAgICAgc2NvcGUuX3NvdXJjZUxvYWRlZCgpO1xuXG4gICAgICAgICAgICBzY29wZS5lbWl0KCdsb2FkZWQnLCBzY29wZSk7XG4gICAgICAgIH07XG5cbiAgICAgICAgc291cmNlLm9uZXJyb3IgPSBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICBzb3VyY2Uub25sb2FkID0gbnVsbDtcbiAgICAgICAgICAgIHNvdXJjZS5vbmVycm9yID0gbnVsbDtcblxuICAgICAgICAgICAgaWYgKCFzY29wZS5pc0xvYWRpbmcpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBzY29wZS5pc0xvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgICAgIHNjb3BlLmVtaXQoJ2Vycm9yJywgc2NvcGUpO1xuICAgICAgICB9O1xuXG4gICAgICAgIC8vIFBlciBodHRwOi8vd3d3LnczLm9yZy9UUi9odG1sNS9lbWJlZGRlZC1jb250ZW50LTAuaHRtbCN0aGUtaW1nLWVsZW1lbnRcbiAgICAgICAgLy8gICBcIlRoZSB2YWx1ZSBvZiBgY29tcGxldGVgIGNhbiB0aHVzIGNoYW5nZSB3aGlsZSBhIHNjcmlwdCBpcyBleGVjdXRpbmcuXCJcbiAgICAgICAgLy8gU28gY29tcGxldGUgbmVlZHMgdG8gYmUgcmUtY2hlY2tlZCBhZnRlciB0aGUgY2FsbGJhY2tzIGhhdmUgYmVlbiBhZGRlZC4uXG4gICAgICAgIC8vIE5PVEU6IGNvbXBsZXRlIHdpbGwgYmUgdHJ1ZSBpZiB0aGUgaW1hZ2UgaGFzIG5vIHNyYyBzbyBiZXN0IHRvIGNoZWNrIGlmIHRoZSBzcmMgaXMgc2V0LlxuICAgICAgICBpZiAoc291cmNlLmNvbXBsZXRlICYmIHNvdXJjZS5zcmMpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuaXNMb2FkaW5nID0gZmFsc2U7XG5cbiAgICAgICAgICAgIC8vIC4uYW5kIGlmIHdlJ3JlIGNvbXBsZXRlIG5vdywgbm8gbmVlZCBmb3IgY2FsbGJhY2tzXG4gICAgICAgICAgICBzb3VyY2Uub25sb2FkID0gbnVsbDtcbiAgICAgICAgICAgIHNvdXJjZS5vbmVycm9yID0gbnVsbDtcblxuICAgICAgICAgICAgaWYgKHNvdXJjZS53aWR0aCAmJiBzb3VyY2UuaGVpZ2h0KVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHRoaXMuX3NvdXJjZUxvYWRlZCgpO1xuXG4gICAgICAgICAgICAgICAgLy8gSWYgYW55IHByZXZpb3VzIHN1YnNjcmliZXJzIHBvc3NpYmxlXG4gICAgICAgICAgICAgICAgaWYgKHdhc0xvYWRpbmcpXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmVtaXQoJ2xvYWRlZCcsIHRoaXMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAvLyBJZiBhbnkgcHJldmlvdXMgc3Vic2NyaWJlcnMgcG9zc2libGVcbiAgICAgICAgICAgICAgICBpZiAod2FzTG9hZGluZylcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZW1pdCgnZXJyb3InLCB0aGlzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG59O1xuXG4vKipcbiAqIFVzZWQgaW50ZXJuYWxseSB0byB1cGRhdGUgdGhlIHdpZHRoLCBoZWlnaHQsIGFuZCBzb21lIG90aGVyIHRyYWNraW5nIHZhcnMgb25jZVxuICogYSBzb3VyY2UgaGFzIHN1Y2Nlc3NmdWxseSBsb2FkZWQuXG4gKlxuICogQHByaXZhdGVcbiAqL1xuQmFzZVRleHR1cmUucHJvdG90eXBlLl9zb3VyY2VMb2FkZWQgPSBmdW5jdGlvbiAoKVxue1xuICAgIHRoaXMuaGFzTG9hZGVkID0gdHJ1ZTtcbiAgICB0aGlzLnVwZGF0ZSgpO1xufTtcblxuLyoqXG4gKiBEZXN0cm95cyB0aGlzIGJhc2UgdGV4dHVyZVxuICpcbiAqL1xuQmFzZVRleHR1cmUucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoKVxue1xuICAgIGlmICh0aGlzLmltYWdlVXJsKVxuICAgIHtcbiAgICAgICAgZGVsZXRlIHV0aWxzLkJhc2VUZXh0dXJlQ2FjaGVbdGhpcy5pbWFnZVVybF07XG4gICAgICAgIGRlbGV0ZSB1dGlscy5UZXh0dXJlQ2FjaGVbdGhpcy5pbWFnZVVybF07XG5cbiAgICAgICAgdGhpcy5pbWFnZVVybCA9IG51bGw7XG5cbiAgICAgICAgaWYgKCFuYXZpZ2F0b3IuaXNDb2Nvb25KUylcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5zb3VyY2Uuc3JjID0gJyc7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZWxzZSBpZiAodGhpcy5zb3VyY2UgJiYgdGhpcy5zb3VyY2UuX3BpeGlJZClcbiAgICB7XG4gICAgICAgIGRlbGV0ZSB1dGlscy5CYXNlVGV4dHVyZUNhY2hlW3RoaXMuc291cmNlLl9waXhpSWRdO1xuICAgIH1cblxuICAgIHRoaXMuc291cmNlID0gbnVsbDtcblxuICAgIHRoaXMuZGlzcG9zZSgpO1xufTtcblxuLyoqXG4gKiBGcmVlcyB0aGUgdGV4dHVyZSBmcm9tIFdlYkdMIG1lbW9yeSB3aXRob3V0IGRlc3Ryb3lpbmcgdGhpcyB0ZXh0dXJlIG9iamVjdC5cbiAqIFRoaXMgbWVhbnMgeW91IGNhbiBzdGlsbCB1c2UgdGhlIHRleHR1cmUgbGF0ZXIgd2hpY2ggd2lsbCB1cGxvYWQgaXQgdG8gR1BVXG4gKiBtZW1vcnkgYWdhaW4uXG4gKlxuICovXG5CYXNlVGV4dHVyZS5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy5lbWl0KCdkaXNwb3NlJywgdGhpcyk7XG5cbiAgICAvLyB0aGlzIHNob3VsZCBubyBsb25nZXIgYmUgbmVlZGVkLCB0aGUgcmVuZGVyZXJzIHNob3VsZCBjbGVhbnVwIGFsbCB0aGUgZ2wgdGV4dHVyZXMuXG4gICAgLy8gdGhpcy5fZ2xUZXh0dXJlcyA9IHt9O1xufTtcblxuLyoqXG4gKiBDaGFuZ2VzIHRoZSBzb3VyY2UgaW1hZ2Ugb2YgdGhlIHRleHR1cmUuXG4gKiBUaGUgb3JpZ2luYWwgc291cmNlIG11c3QgYmUgYW4gSW1hZ2UgZWxlbWVudC5cbiAqXG4gKiBAcGFyYW0gbmV3U3JjIHtzdHJpbmd9IHRoZSBwYXRoIG9mIHRoZSBpbWFnZVxuICovXG5CYXNlVGV4dHVyZS5wcm90b3R5cGUudXBkYXRlU291cmNlSW1hZ2UgPSBmdW5jdGlvbiAobmV3U3JjKVxue1xuICAgIHRoaXMuc291cmNlLnNyYyA9IG5ld1NyYztcblxuICAgIHRoaXMubG9hZFNvdXJjZSh0aGlzLnNvdXJjZSk7XG59O1xuXG4vKipcbiAqIEhlbHBlciBmdW5jdGlvbiB0aGF0IGNyZWF0ZXMgYSBiYXNlIHRleHR1cmUgZnJvbSB0aGUgZ2l2ZW4gaW1hZ2UgdXJsLlxuICogSWYgdGhlIGltYWdlIGlzIG5vdCBpbiB0aGUgYmFzZSB0ZXh0dXJlIGNhY2hlIGl0IHdpbGwgYmUgY3JlYXRlZCBhbmQgbG9hZGVkLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBwYXJhbSBpbWFnZVVybCB7c3RyaW5nfSBUaGUgaW1hZ2UgdXJsIG9mIHRoZSB0ZXh0dXJlXG4gKiBAcGFyYW0gW2Nyb3Nzb3JpZ2luPShhdXRvKV0ge2Jvb2xlYW59IFNob3VsZCB1c2UgYW5vbnltb3VzIENPUlM/IERlZmF1bHRzIHRvIHRydWUgaWYgdGhlIFVSTCBpcyBub3QgYSBkYXRhLVVSSS5cbiAqIEBwYXJhbSBbc2NhbGVNb2RlPVBJWEkuU0NBTEVfTU9ERVMuREVGQVVMVF0ge251bWJlcn0gU2VlIHtAbGluayBQSVhJLlNDQUxFX01PREVTfSBmb3IgcG9zc2libGUgdmFsdWVzXG4gKiBAcmV0dXJuIFBJWEkuQmFzZVRleHR1cmVcbiAqL1xuQmFzZVRleHR1cmUuZnJvbUltYWdlID0gZnVuY3Rpb24gKGltYWdlVXJsLCBjcm9zc29yaWdpbiwgc2NhbGVNb2RlKVxue1xuICAgIHZhciBiYXNlVGV4dHVyZSA9IHV0aWxzLkJhc2VUZXh0dXJlQ2FjaGVbaW1hZ2VVcmxdO1xuXG4gICAgaWYgKGNyb3Nzb3JpZ2luID09PSB1bmRlZmluZWQgJiYgaW1hZ2VVcmwuaW5kZXhPZignZGF0YTonKSAhPT0gMClcbiAgICB7XG4gICAgICAgIGNyb3Nzb3JpZ2luID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBpZiAoIWJhc2VUZXh0dXJlKVxuICAgIHtcbiAgICAgICAgLy8gbmV3IEltYWdlKCkgYnJlYWtzIHRleCBsb2FkaW5nIGluIHNvbWUgdmVyc2lvbnMgb2YgQ2hyb21lLlxuICAgICAgICAvLyBTZWUgaHR0cHM6Ly9jb2RlLmdvb2dsZS5jb20vcC9jaHJvbWl1bS9pc3N1ZXMvZGV0YWlsP2lkPTIzODA3MVxuICAgICAgICB2YXIgaW1hZ2UgPSBuZXcgSW1hZ2UoKTsvL2RvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2ltZycpO1xuICAgICAgICBpZiAoY3Jvc3NvcmlnaW4pXG4gICAgICAgIHtcbiAgICAgICAgICAgIGltYWdlLmNyb3NzT3JpZ2luID0gJyc7XG4gICAgICAgIH1cblxuICAgICAgICBiYXNlVGV4dHVyZSA9IG5ldyBCYXNlVGV4dHVyZShpbWFnZSwgc2NhbGVNb2RlKTtcbiAgICAgICAgYmFzZVRleHR1cmUuaW1hZ2VVcmwgPSBpbWFnZVVybDtcblxuICAgICAgICBpbWFnZS5zcmMgPSBpbWFnZVVybDtcblxuICAgICAgICB1dGlscy5CYXNlVGV4dHVyZUNhY2hlW2ltYWdlVXJsXSA9IGJhc2VUZXh0dXJlO1xuXG4gICAgICAgIC8vIGlmIHRoZXJlIGlzIGFuIEAyeCBhdCB0aGUgZW5kIG9mIHRoZSB1cmwgd2UgYXJlIGdvaW5nIHRvIGFzc3VtZSBpdHMgYSBoaWdocmVzIGltYWdlXG4gICAgICAgIGJhc2VUZXh0dXJlLnJlc29sdXRpb24gPSB1dGlscy5nZXRSZXNvbHV0aW9uT2ZVcmwoaW1hZ2VVcmwpO1xuICAgIH1cblxuICAgIHJldHVybiBiYXNlVGV4dHVyZTtcbn07XG5cbi8qKlxuICogSGVscGVyIGZ1bmN0aW9uIHRoYXQgY3JlYXRlcyBhIGJhc2UgdGV4dHVyZSBmcm9tIHRoZSBnaXZlbiBjYW52YXMgZWxlbWVudC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAcGFyYW0gY2FudmFzIHtDYW52YXN9IFRoZSBjYW52YXMgZWxlbWVudCBzb3VyY2Ugb2YgdGhlIHRleHR1cmVcbiAqIEBwYXJhbSBzY2FsZU1vZGUge251bWJlcn0gU2VlIHtAbGluayBQSVhJLlNDQUxFX01PREVTfSBmb3IgcG9zc2libGUgdmFsdWVzXG4gKiBAcmV0dXJuIFBJWEkuQmFzZVRleHR1cmVcbiAqL1xuQmFzZVRleHR1cmUuZnJvbUNhbnZhcyA9IGZ1bmN0aW9uIChjYW52YXMsIHNjYWxlTW9kZSlcbntcbiAgICBpZiAoIWNhbnZhcy5fcGl4aUlkKVxuICAgIHtcbiAgICAgICAgY2FudmFzLl9waXhpSWQgPSAnY2FudmFzXycgKyB1dGlscy51aWQoKTtcbiAgICB9XG5cbiAgICB2YXIgYmFzZVRleHR1cmUgPSB1dGlscy5CYXNlVGV4dHVyZUNhY2hlW2NhbnZhcy5fcGl4aUlkXTtcblxuICAgIGlmICghYmFzZVRleHR1cmUpXG4gICAge1xuICAgICAgICBiYXNlVGV4dHVyZSA9IG5ldyBCYXNlVGV4dHVyZShjYW52YXMsIHNjYWxlTW9kZSk7XG4gICAgICAgIHV0aWxzLkJhc2VUZXh0dXJlQ2FjaGVbY2FudmFzLl9waXhpSWRdID0gYmFzZVRleHR1cmU7XG4gICAgfVxuXG4gICAgcmV0dXJuIGJhc2VUZXh0dXJlO1xufTtcbiIsInZhciBCYXNlVGV4dHVyZSA9IHJlcXVpcmUoJy4vQmFzZVRleHR1cmUnKSxcbiAgICBUZXh0dXJlID0gcmVxdWlyZSgnLi9UZXh0dXJlJyksXG4gICAgUmVuZGVyVGFyZ2V0ID0gcmVxdWlyZSgnLi4vcmVuZGVyZXJzL3dlYmdsL3V0aWxzL1JlbmRlclRhcmdldCcpLFxuICAgIEZpbHRlck1hbmFnZXIgPSByZXF1aXJlKCcuLi9yZW5kZXJlcnMvd2ViZ2wvbWFuYWdlcnMvRmlsdGVyTWFuYWdlcicpLFxuICAgIENhbnZhc0J1ZmZlciA9IHJlcXVpcmUoJy4uL3JlbmRlcmVycy9jYW52YXMvdXRpbHMvQ2FudmFzQnVmZmVyJyksXG4gICAgbWF0aCA9IHJlcXVpcmUoJy4uL21hdGgnKSxcbiAgICBDT05TVCA9IHJlcXVpcmUoJy4uL2NvbnN0JyksXG4gICAgdGVtcE1hdHJpeCA9IG5ldyBtYXRoLk1hdHJpeCgpO1xuXG4vKipcbiAqIEEgUmVuZGVyVGV4dHVyZSBpcyBhIHNwZWNpYWwgdGV4dHVyZSB0aGF0IGFsbG93cyBhbnkgUGl4aSBkaXNwbGF5IG9iamVjdCB0byBiZSByZW5kZXJlZCB0byBpdC5cbiAqXG4gKiBfX0hpbnRfXzogQWxsIERpc3BsYXlPYmplY3RzIChpLmUuIFNwcml0ZXMpIHRoYXQgcmVuZGVyIHRvIGEgUmVuZGVyVGV4dHVyZSBzaG91bGQgYmUgcHJlbG9hZGVkXG4gKiBvdGhlcndpc2UgYmxhY2sgcmVjdGFuZ2xlcyB3aWxsIGJlIGRyYXduIGluc3RlYWQuXG4gKlxuICogQSBSZW5kZXJUZXh0dXJlIHRha2VzIGEgc25hcHNob3Qgb2YgYW55IERpc3BsYXkgT2JqZWN0IGdpdmVuIHRvIGl0cyByZW5kZXIgbWV0aG9kLiBUaGUgcG9zaXRpb25cbiAqIGFuZCByb3RhdGlvbiBvZiB0aGUgZ2l2ZW4gRGlzcGxheSBPYmplY3RzIGlzIGlnbm9yZWQuIEZvciBleGFtcGxlOlxuICpcbiAqIGBgYGpzXG4gKiB2YXIgcmVuZGVyZXIgPSBQSVhJLmF1dG9EZXRlY3RSZW5kZXJlcigxMDI0LCAxMDI0LCB7IHZpZXc6IGNhbnZhcywgcmF0aW86IDEgfSk7XG4gKiB2YXIgcmVuZGVyVGV4dHVyZSA9IG5ldyBQSVhJLlJlbmRlclRleHR1cmUocmVuZGVyZXIsIDgwMCwgNjAwKTtcbiAqIHZhciBzcHJpdGUgPSBQSVhJLlNwcml0ZS5mcm9tSW1hZ2UoXCJzcGluT2JqXzAxLnBuZ1wiKTtcbiAqXG4gKiBzcHJpdGUucG9zaXRpb24ueCA9IDgwMC8yO1xuICogc3ByaXRlLnBvc2l0aW9uLnkgPSA2MDAvMjtcbiAqIHNwcml0ZS5hbmNob3IueCA9IDAuNTtcbiAqIHNwcml0ZS5hbmNob3IueSA9IDAuNTtcbiAqXG4gKiByZW5kZXJUZXh0dXJlLnJlbmRlcihzcHJpdGUpO1xuICogYGBgXG4gKlxuICogVGhlIFNwcml0ZSBpbiB0aGlzIGNhc2Ugd2lsbCBiZSByZW5kZXJlZCB0byBhIHBvc2l0aW9uIG9mIDAsMC4gVG8gcmVuZGVyIHRoaXMgc3ByaXRlIGF0IGl0cyBhY3R1YWxcbiAqIHBvc2l0aW9uIGEgQ29udGFpbmVyIHNob3VsZCBiZSB1c2VkOlxuICpcbiAqIGBgYGpzXG4gKiB2YXIgZG9jID0gbmV3IFBJWEkuQ29udGFpbmVyKCk7XG4gKlxuICogZG9jLmFkZENoaWxkKHNwcml0ZSk7XG4gKlxuICogcmVuZGVyVGV4dHVyZS5yZW5kZXIoZG9jKTsgIC8vIFJlbmRlcnMgdG8gY2VudGVyIG9mIHJlbmRlclRleHR1cmVcbiAqIGBgYFxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5UZXh0dXJlXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLkNhbnZhc1JlbmRlcmVyfFBJWEkuV2ViR0xSZW5kZXJlcn0gVGhlIHJlbmRlcmVyIHVzZWQgZm9yIHRoaXMgUmVuZGVyVGV4dHVyZVxuICogQHBhcmFtIFt3aWR0aD0xMDBdIHtudW1iZXJ9IFRoZSB3aWR0aCBvZiB0aGUgcmVuZGVyIHRleHR1cmVcbiAqIEBwYXJhbSBbaGVpZ2h0PTEwMF0ge251bWJlcn0gVGhlIGhlaWdodCBvZiB0aGUgcmVuZGVyIHRleHR1cmVcbiAqIEBwYXJhbSBbc2NhbGVNb2RlXSB7bnVtYmVyfSBTZWUge0BsaW5rIFBJWEkuU0NBTEVfTU9ERVN9IGZvciBwb3NzaWJsZSB2YWx1ZXNcbiAqIEBwYXJhbSBbcmVzb2x1dGlvbj0xXSB7bnVtYmVyfSBUaGUgcmVzb2x1dGlvbiBvZiB0aGUgdGV4dHVyZSBiZWluZyBnZW5lcmF0ZWRcbiAqL1xuZnVuY3Rpb24gUmVuZGVyVGV4dHVyZShyZW5kZXJlciwgd2lkdGgsIGhlaWdodCwgc2NhbGVNb2RlLCByZXNvbHV0aW9uKVxue1xuICAgIGlmICghcmVuZGVyZXIpXG4gICAge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1VuYWJsZSB0byBjcmVhdGUgUmVuZGVyVGV4dHVyZSwgeW91IG11c3QgcGFzcyBhIHJlbmRlcmVyIGludG8gdGhlIGNvbnN0cnVjdG9yLicpO1xuICAgIH1cblxuICAgIHdpZHRoID0gd2lkdGggfHwgMTAwO1xuICAgIGhlaWdodCA9IGhlaWdodCB8fCAxMDA7XG4gICAgcmVzb2x1dGlvbiA9IHJlc29sdXRpb24gfHwgQ09OU1QuUkVTT0xVVElPTjtcblxuICAgIC8qKlxuICAgICAqIFRoZSBiYXNlIHRleHR1cmUgb2JqZWN0IHRoYXQgdGhpcyB0ZXh0dXJlIHVzZXNcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge0Jhc2VUZXh0dXJlfVxuICAgICAqL1xuICAgIHZhciBiYXNlVGV4dHVyZSA9IG5ldyBCYXNlVGV4dHVyZSgpO1xuICAgIGJhc2VUZXh0dXJlLndpZHRoID0gd2lkdGg7XG4gICAgYmFzZVRleHR1cmUuaGVpZ2h0ID0gaGVpZ2h0O1xuICAgIGJhc2VUZXh0dXJlLnJlc29sdXRpb24gPSByZXNvbHV0aW9uO1xuICAgIGJhc2VUZXh0dXJlLnNjYWxlTW9kZSA9IHNjYWxlTW9kZSB8fCBDT05TVC5TQ0FMRV9NT0RFUy5ERUZBVUxUO1xuICAgIGJhc2VUZXh0dXJlLmhhc0xvYWRlZCA9IHRydWU7XG5cblxuICAgIFRleHR1cmUuY2FsbCh0aGlzLFxuICAgICAgICBiYXNlVGV4dHVyZSxcbiAgICAgICAgbmV3IG1hdGguUmVjdGFuZ2xlKDAsIDAsIHdpZHRoLCBoZWlnaHQpXG4gICAgKTtcblxuXG4gICAgLyoqXG4gICAgICogVGhlIHdpdGggb2YgdGhlIHJlbmRlciB0ZXh0dXJlXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy53aWR0aCA9IHdpZHRoO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGhlaWdodCBvZiB0aGUgcmVuZGVyIHRleHR1cmVcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLmhlaWdodCA9IGhlaWdodDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBSZXNvbHV0aW9uIG9mIHRoZSB0ZXh0dXJlLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMucmVzb2x1dGlvbiA9IHJlc29sdXRpb247XG5cbiAgICAvKipcbiAgICAgKiBEcmF3L3JlbmRlciB0aGUgZ2l2ZW4gRGlzcGxheU9iamVjdCBvbnRvIHRoZSB0ZXh0dXJlLlxuICAgICAqXG4gICAgICogVGhlIGRpc3BsYXlPYmplY3QgYW5kIGRlc2NlbmRlbnRzIGFyZSB0cmFuc2Zvcm1lZCBkdXJpbmcgdGhpcyBvcGVyYXRpb24uXG4gICAgICogSWYgYHVwZGF0ZVRyYW5zZm9ybWAgaXMgdHJ1ZSB0aGVuIHRoZSB0cmFuc2Zvcm1hdGlvbnMgd2lsbCBiZSByZXN0b3JlZCBiZWZvcmUgdGhlXG4gICAgICogbWV0aG9kIHJldHVybnMuIE90aGVyd2lzZSBpdCBpcyB1cCB0byB0aGUgY2FsbGluZyBjb2RlIHRvIGNvcnJlY3RseSB1c2Ugb3IgcmVzZXRcbiAgICAgKiB0aGUgdHJhbnNmb3JtZWQgZGlzcGxheSBvYmplY3RzLlxuICAgICAqXG4gICAgICogVGhlIGRpc3BsYXkgb2JqZWN0IGlzIGFsd2F5cyByZW5kZXJlZCB3aXRoIGEgd29ybGRBbHBoYSB2YWx1ZSBvZiAxLlxuICAgICAqXG4gICAgICogQG1ldGhvZFxuICAgICAqIEBwYXJhbSBkaXNwbGF5T2JqZWN0IHtQSVhJLkRpc3BsYXlPYmplY3R9IFRoZSBkaXNwbGF5IG9iamVjdCB0byByZW5kZXIgdGhpcyB0ZXh0dXJlIG9uXG4gICAgICogQHBhcmFtIFttYXRyaXhdIHtQSVhJLk1hdHJpeH0gT3B0aW9uYWwgbWF0cml4IHRvIGFwcGx5IHRvIHRoZSBkaXNwbGF5IG9iamVjdCBiZWZvcmUgcmVuZGVyaW5nLlxuICAgICAqIEBwYXJhbSBbY2xlYXI9ZmFsc2VdIHtib29sZWFufSBJZiB0cnVlIHRoZSB0ZXh0dXJlIHdpbGwgYmUgY2xlYXJlZCBiZWZvcmUgdGhlIGRpc3BsYXlPYmplY3QgaXMgZHJhd25cbiAgICAgKiBAcGFyYW0gW3VwZGF0ZVRyYW5zZm9ybT10cnVlXSB7Ym9vbGVhbn0gSWYgdHJ1ZSB0aGUgZGlzcGxheU9iamVjdCdzIHdvcmxkVHJhbnNmb3JtL3dvcmxkQWxwaGEgYW5kIGFsbCBjaGlsZHJlblxuICAgICAqICB0cmFuc2Zvcm1hdGlvbnMgd2lsbCBiZSByZXN0b3JlZC4gTm90IHJlc3RvcmluZyB0aGlzIGluZm9ybWF0aW9uIHdpbGwgYmUgYSBsaXR0bGUgZmFzdGVyLlxuICAgICAqL1xuICAgIHRoaXMucmVuZGVyID0gbnVsbDtcblxuICAgIC8qKlxuICAgICAqIFRoZSByZW5kZXJlciB0aGlzIFJlbmRlclRleHR1cmUgdXNlcy4gQSBSZW5kZXJUZXh0dXJlIGNhbiBvbmx5IGJlbG9uZyB0byBvbmUgcmVuZGVyZXIgYXQgdGhlIG1vbWVudCBpZiBpdHMgd2ViR0wuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLkNhbnZhc1JlbmRlcmVyfFBJWEkuV2ViR0xSZW5kZXJlcn1cbiAgICAgKi9cbiAgICB0aGlzLnJlbmRlcmVyID0gcmVuZGVyZXI7XG5cbiAgICBpZiAodGhpcy5yZW5kZXJlci50eXBlID09PSBDT05TVC5SRU5ERVJFUl9UWVBFLldFQkdMKVxuICAgIHtcbiAgICAgICAgdmFyIGdsID0gdGhpcy5yZW5kZXJlci5nbDtcblxuICAgICAgICB0aGlzLnRleHR1cmVCdWZmZXIgPSBuZXcgUmVuZGVyVGFyZ2V0KGdsLCB0aGlzLndpZHRoLCB0aGlzLmhlaWdodCwgYmFzZVRleHR1cmUuc2NhbGVNb2RlLCB0aGlzLnJlc29sdXRpb24pOy8vLCB0aGlzLmJhc2VUZXh0dXJlLnNjYWxlTW9kZSk7XG4gICAgICAgIHRoaXMuYmFzZVRleHR1cmUuX2dsVGV4dHVyZXNbZ2wuaWRdID0gdGhpcy50ZXh0dXJlQnVmZmVyLnRleHR1cmU7XG5cbiAgICAgICAgLy9UT0RPIHJlZmFjdG9yIGZpbHRlciBtYW5hZ2VyLi4gYXMgcmVhbGx5IGl0cyBubyBsb25nZXIgYSBtYW5hZ2VyIGlmIHdlIHVzZSBpdCBoZXJlLi5cbiAgICAgICAgdGhpcy5maWx0ZXJNYW5hZ2VyID0gbmV3IEZpbHRlck1hbmFnZXIodGhpcy5yZW5kZXJlcik7XG4gICAgICAgIHRoaXMuZmlsdGVyTWFuYWdlci5vbkNvbnRleHRDaGFuZ2UoKTtcbiAgICAgICAgdGhpcy5maWx0ZXJNYW5hZ2VyLnJlc2l6ZSh3aWR0aCwgaGVpZ2h0KTtcbiAgICAgICAgdGhpcy5yZW5kZXIgPSB0aGlzLnJlbmRlcldlYkdMO1xuXG4gICAgICAgIC8vIHRoZSBjcmVhdGlvbiBvZiBhIGZpbHRlciBtYW5hZ2VyIHVuYmluZHMgdGhlIGJ1ZmZlcnMuLlxuICAgICAgICB0aGlzLnJlbmRlcmVyLmN1cnJlbnRSZW5kZXJlci5zdGFydCgpO1xuICAgICAgICB0aGlzLnJlbmRlcmVyLmN1cnJlbnRSZW5kZXJUYXJnZXQuYWN0aXZhdGUoKTtcbiAgICB9XG4gICAgZWxzZVxuICAgIHtcblxuICAgICAgICB0aGlzLnJlbmRlciA9IHRoaXMucmVuZGVyQ2FudmFzO1xuICAgICAgICB0aGlzLnRleHR1cmVCdWZmZXIgPSBuZXcgQ2FudmFzQnVmZmVyKHRoaXMud2lkdGgqIHRoaXMucmVzb2x1dGlvbiwgdGhpcy5oZWlnaHQqIHRoaXMucmVzb2x1dGlvbik7XG4gICAgICAgIHRoaXMuYmFzZVRleHR1cmUuc291cmNlID0gdGhpcy50ZXh0dXJlQnVmZmVyLmNhbnZhcztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqL1xuICAgIHRoaXMudmFsaWQgPSB0cnVlO1xuXG4gICAgdGhpcy5fdXBkYXRlVXZzKCk7XG59XG5cblJlbmRlclRleHR1cmUucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShUZXh0dXJlLnByb3RvdHlwZSk7XG5SZW5kZXJUZXh0dXJlLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFJlbmRlclRleHR1cmU7XG5tb2R1bGUuZXhwb3J0cyA9IFJlbmRlclRleHR1cmU7XG5cbi8qKlxuICogUmVzaXplcyB0aGUgUmVuZGVyVGV4dHVyZS5cbiAqXG4gKiBAcGFyYW0gd2lkdGgge251bWJlcn0gVGhlIHdpZHRoIHRvIHJlc2l6ZSB0by5cbiAqIEBwYXJhbSBoZWlnaHQge251bWJlcn0gVGhlIGhlaWdodCB0byByZXNpemUgdG8uXG4gKiBAcGFyYW0gdXBkYXRlQmFzZSB7Ym9vbGVhbn0gU2hvdWxkIHRoZSBiYXNlVGV4dHVyZS53aWR0aCBhbmQgaGVpZ2h0IHZhbHVlcyBiZSByZXNpemVkIGFzIHdlbGw/XG4gKi9cblJlbmRlclRleHR1cmUucHJvdG90eXBlLnJlc2l6ZSA9IGZ1bmN0aW9uICh3aWR0aCwgaGVpZ2h0LCB1cGRhdGVCYXNlKVxue1xuICAgIGlmICh3aWR0aCA9PT0gdGhpcy53aWR0aCAmJiBoZWlnaHQgPT09IHRoaXMuaGVpZ2h0KVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMudmFsaWQgPSAod2lkdGggPiAwICYmIGhlaWdodCA+IDApO1xuXG4gICAgdGhpcy53aWR0aCA9IHRoaXMuX2ZyYW1lLndpZHRoID0gdGhpcy5jcm9wLndpZHRoID0gd2lkdGg7XG4gICAgdGhpcy5oZWlnaHQgPSAgdGhpcy5fZnJhbWUuaGVpZ2h0ID0gdGhpcy5jcm9wLmhlaWdodCA9IGhlaWdodDtcblxuICAgIGlmICh1cGRhdGVCYXNlKVxuICAgIHtcbiAgICAgICAgdGhpcy5iYXNlVGV4dHVyZS53aWR0aCA9IHRoaXMud2lkdGg7XG4gICAgICAgIHRoaXMuYmFzZVRleHR1cmUuaGVpZ2h0ID0gdGhpcy5oZWlnaHQ7XG4gICAgfVxuXG4gICAgaWYgKCF0aGlzLnZhbGlkKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMudGV4dHVyZUJ1ZmZlci5yZXNpemUodGhpcy53aWR0aCwgdGhpcy5oZWlnaHQpO1xuXG4gICAgaWYodGhpcy5maWx0ZXJNYW5hZ2VyKVxuICAgIHtcbiAgICAgICAgdGhpcy5maWx0ZXJNYW5hZ2VyLnJlc2l6ZSh0aGlzLndpZHRoLCB0aGlzLmhlaWdodCk7XG4gICAgfVxufTtcblxuLyoqXG4gKiBDbGVhcnMgdGhlIFJlbmRlclRleHR1cmUuXG4gKlxuICovXG5SZW5kZXJUZXh0dXJlLnByb3RvdHlwZS5jbGVhciA9IGZ1bmN0aW9uICgpXG57XG4gICAgaWYgKCF0aGlzLnZhbGlkKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnJlbmRlcmVyLnR5cGUgPT09IENPTlNULlJFTkRFUkVSX1RZUEUuV0VCR0wpXG4gICAge1xuICAgICAgICB0aGlzLnJlbmRlcmVyLmdsLmJpbmRGcmFtZWJ1ZmZlcih0aGlzLnJlbmRlcmVyLmdsLkZSQU1FQlVGRkVSLCB0aGlzLnRleHR1cmVCdWZmZXIuZnJhbWVCdWZmZXIpO1xuICAgIH1cblxuICAgIHRoaXMudGV4dHVyZUJ1ZmZlci5jbGVhcigpO1xufTtcblxuLyoqXG4gKiBJbnRlcm5hbCBtZXRob2QgYXNzaWduZWQgdG8gdGhlIGByZW5kZXJgIHByb3BlcnR5IGlmIHVzaW5nIGEgQ2FudmFzUmVuZGVyZXIuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSBkaXNwbGF5T2JqZWN0IHtQSVhJLkRpc3BsYXlPYmplY3R9IFRoZSBkaXNwbGF5IG9iamVjdCB0byByZW5kZXIgdGhpcyB0ZXh0dXJlIG9uXG4gKiBAcGFyYW0gW21hdHJpeF0ge1BJWEkuTWF0cml4fSBPcHRpb25hbCBtYXRyaXggdG8gYXBwbHkgdG8gdGhlIGRpc3BsYXkgb2JqZWN0IGJlZm9yZSByZW5kZXJpbmcuXG4gKiBAcGFyYW0gW2NsZWFyPWZhbHNlXSB7Ym9vbGVhbn0gSWYgdHJ1ZSB0aGUgdGV4dHVyZSB3aWxsIGJlIGNsZWFyZWQgYmVmb3JlIHRoZSBkaXNwbGF5T2JqZWN0IGlzIGRyYXduXG4gKiBAcGFyYW0gW3VwZGF0ZVRyYW5zZm9ybT10cnVlXSB7Ym9vbGVhbn0gSWYgdHJ1ZSB0aGUgZGlzcGxheU9iamVjdCdzIHdvcmxkVHJhbnNmb3JtL3dvcmxkQWxwaGEgYW5kIGFsbCBjaGlsZHJlblxuICogIHRyYW5zZm9ybWF0aW9ucyB3aWxsIGJlIHJlc3RvcmVkLiBOb3QgcmVzdG9yaW5nIHRoaXMgaW5mb3JtYXRpb24gd2lsbCBiZSBhIGxpdHRsZSBmYXN0ZXIuXG4gKi9cblJlbmRlclRleHR1cmUucHJvdG90eXBlLnJlbmRlcldlYkdMID0gZnVuY3Rpb24gKGRpc3BsYXlPYmplY3QsIG1hdHJpeCwgY2xlYXIsIHVwZGF0ZVRyYW5zZm9ybSlcbntcbiAgICBpZiAoIXRoaXMudmFsaWQpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG5cbiAgICB1cGRhdGVUcmFuc2Zvcm0gPSAodXBkYXRlVHJhbnNmb3JtICE9PSB1bmRlZmluZWQpID8gdXBkYXRlVHJhbnNmb3JtIDogdHJ1ZTsvLyF1cGRhdGVUcmFuc2Zvcm07XG5cbiAgICB0aGlzLnRleHR1cmVCdWZmZXIudHJhbnNmb3JtID0gbWF0cml4O1xuXG4gICAgLy9UT0RPIG5vdCBhIGZhbiB0aGF0IHRoaXMgaXMgaGVyZS4uLiBpdCB3aWxsIG1vdmUhXG4gICAgdGhpcy50ZXh0dXJlQnVmZmVyLmFjdGl2YXRlKCk7XG5cbiAgICAvLyBzZXRXb3JsZCBBbHBoYSB0byBlbnN1cmUgdGhhdCB0aGUgb2JqZWN0IGlzIHJlbmRlcmVyIGF0IGZ1bGwgb3BhY2l0eVxuICAgIGRpc3BsYXlPYmplY3Qud29ybGRBbHBoYSA9IDE7XG5cbiAgICBpZiAodXBkYXRlVHJhbnNmb3JtKVxuICAgIHtcblxuICAgICAgICAvLyByZXNldCB0aGUgbWF0cml4IG9mIHRoZSBkaXNwbGF0eU9iamVjdC4uXG4gICAgICAgIGRpc3BsYXlPYmplY3Qud29ybGRUcmFuc2Zvcm0uaWRlbnRpdHkoKTtcblxuICAgICAgICBkaXNwbGF5T2JqZWN0LmN1cnJlbnRCb3VuZHMgPSBudWxsO1xuXG4gICAgICAgIC8vIFRpbWUgdG8gdXBkYXRlIGFsbCB0aGUgY2hpbGRyZW4gb2YgdGhlIGRpc3BsYXlPYmplY3Qgd2l0aCB0aGUgbmV3IG1hdHJpeC4uXG4gICAgICAgIHZhciBjaGlsZHJlbiA9IGRpc3BsYXlPYmplY3QuY2hpbGRyZW47XG4gICAgICAgIHZhciBpLCBqO1xuXG4gICAgICAgIGZvciAoaSA9IDAsIGogPSBjaGlsZHJlbi5sZW5ndGg7IGkgPCBqOyArK2kpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNoaWxkcmVuW2ldLnVwZGF0ZVRyYW5zZm9ybSgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy9UT0RPIHJlbmFtZSB0ZXh0dXJlQnVmZmVyIHRvIHJlbmRlclRhcmdldC4uXG4gICAgdmFyIHRlbXAgPSAgdGhpcy5yZW5kZXJlci5maWx0ZXJNYW5hZ2VyO1xuXG4gICAgdGhpcy5yZW5kZXJlci5maWx0ZXJNYW5hZ2VyID0gdGhpcy5maWx0ZXJNYW5hZ2VyO1xuICAgIHRoaXMucmVuZGVyZXIucmVuZGVyRGlzcGxheU9iamVjdChkaXNwbGF5T2JqZWN0LCB0aGlzLnRleHR1cmVCdWZmZXIsIGNsZWFyKTtcblxuICAgIHRoaXMucmVuZGVyZXIuZmlsdGVyTWFuYWdlciA9IHRlbXA7XG59O1xuXG5cbi8qKlxuICogSW50ZXJuYWwgbWV0aG9kIGFzc2lnbmVkIHRvIHRoZSBgcmVuZGVyYCBwcm9wZXJ0eSBpZiB1c2luZyBhIENhbnZhc1JlbmRlcmVyLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0gZGlzcGxheU9iamVjdCB7UElYSS5EaXNwbGF5T2JqZWN0fSBUaGUgZGlzcGxheSBvYmplY3QgdG8gcmVuZGVyIHRoaXMgdGV4dHVyZSBvblxuICogQHBhcmFtIFttYXRyaXhdIHtQSVhJLk1hdHJpeH0gT3B0aW9uYWwgbWF0cml4IHRvIGFwcGx5IHRvIHRoZSBkaXNwbGF5IG9iamVjdCBiZWZvcmUgcmVuZGVyaW5nLlxuICogQHBhcmFtIFtjbGVhcl0ge2Jvb2xlYW59IElmIHRydWUgdGhlIHRleHR1cmUgd2lsbCBiZSBjbGVhcmVkIGJlZm9yZSB0aGUgZGlzcGxheU9iamVjdCBpcyBkcmF3blxuICovXG5SZW5kZXJUZXh0dXJlLnByb3RvdHlwZS5yZW5kZXJDYW52YXMgPSBmdW5jdGlvbiAoZGlzcGxheU9iamVjdCwgbWF0cml4LCBjbGVhciwgdXBkYXRlVHJhbnNmb3JtKVxue1xuICAgIGlmICghdGhpcy52YWxpZClcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB1cGRhdGVUcmFuc2Zvcm0gPSAhIXVwZGF0ZVRyYW5zZm9ybTtcblxuICAgIHZhciB3dCA9IHRlbXBNYXRyaXg7XG5cbiAgICB3dC5pZGVudGl0eSgpO1xuXG4gICAgaWYgKG1hdHJpeClcbiAgICB7XG4gICAgICAgIHd0LmFwcGVuZChtYXRyaXgpO1xuICAgIH1cblxuICAgIHZhciBjYWNoZWRXdCA9IGRpc3BsYXlPYmplY3Qud29ybGRUcmFuc2Zvcm07XG4gICAgZGlzcGxheU9iamVjdC53b3JsZFRyYW5zZm9ybSA9IHd0O1xuXG4gICAgLy8gc2V0V29ybGQgQWxwaGEgdG8gZW5zdXJlIHRoYXQgdGhlIG9iamVjdCBpcyByZW5kZXJlciBhdCBmdWxsIG9wYWNpdHlcbiAgICBkaXNwbGF5T2JqZWN0LndvcmxkQWxwaGEgPSAxO1xuXG4gICAgLy8gVGltZSB0byB1cGRhdGUgYWxsIHRoZSBjaGlsZHJlbiBvZiB0aGUgZGlzcGxheU9iamVjdCB3aXRoIHRoZSBuZXcgbWF0cml4Li5cbiAgICB2YXIgY2hpbGRyZW4gPSBkaXNwbGF5T2JqZWN0LmNoaWxkcmVuO1xuICAgIHZhciBpLCBqO1xuXG4gICAgZm9yIChpID0gMCwgaiA9IGNoaWxkcmVuLmxlbmd0aDsgaSA8IGo7ICsraSlcbiAgICB7XG4gICAgICAgIGNoaWxkcmVuW2ldLnVwZGF0ZVRyYW5zZm9ybSgpO1xuICAgIH1cblxuICAgIGlmIChjbGVhcilcbiAgICB7XG4gICAgICAgIHRoaXMudGV4dHVyZUJ1ZmZlci5jbGVhcigpO1xuICAgIH1cblxuXG4vLyAgICB0aGlzLnRleHR1cmVCdWZmZXIuXG4gICAgdmFyIGNvbnRleHQgPSB0aGlzLnRleHR1cmVCdWZmZXIuY29udGV4dDtcblxuICAgIHZhciByZWFsUmVzb2x1dGlvbiA9IHRoaXMucmVuZGVyZXIucmVzb2x1dGlvbjtcblxuICAgIHRoaXMucmVuZGVyZXIucmVzb2x1dGlvbiA9IHRoaXMucmVzb2x1dGlvbjtcblxuICAgIHRoaXMucmVuZGVyZXIucmVuZGVyRGlzcGxheU9iamVjdChkaXNwbGF5T2JqZWN0LCBjb250ZXh0KTtcblxuICAgIHRoaXMucmVuZGVyZXIucmVzb2x1dGlvbiA9IHJlYWxSZXNvbHV0aW9uO1xuXG4gICAgaWYoZGlzcGxheU9iamVjdC53b3JsZFRyYW5zZm9ybSA9PT0gd3QpXG4gICAge1xuICAgICAgICAvLyBmaXhlcyBjYWNoZUFzQml0bWFwIEhhcHBlbmluZyBkdXJpbmcgdGhlIGFib3ZlLi5cbiAgICAgICAgZGlzcGxheU9iamVjdC53b3JsZFRyYW5zZm9ybSA9IGNhY2hlZFd0O1xuICAgIH1cblxufTtcblxuLyoqXG4gKiBEZXN0cm95cyB0aGlzIHRleHR1cmVcbiAqXG4gKiBAcGFyYW0gZGVzdHJveUJhc2Uge2Jvb2xlYW59IFdoZXRoZXIgdG8gZGVzdHJveSB0aGUgYmFzZSB0ZXh0dXJlIGFzIHdlbGxcbiAqL1xuUmVuZGVyVGV4dHVyZS5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uICgpXG57XG4gICAgVGV4dHVyZS5wcm90b3R5cGUuZGVzdHJveS5jYWxsKHRoaXMsIHRydWUpO1xuXG4gICAgdGhpcy50ZXh0dXJlQnVmZmVyLmRlc3Ryb3koKTtcblxuICAgIC8vIGRlc3Ryb3kgdGhlIGZpbHRlcm1hbmFnZXIuLlxuICAgIGlmKHRoaXMuZmlsdGVyTWFuYWdlcilcbiAgICB7XG4gICAgICAgIHRoaXMuZmlsdGVyTWFuYWdlci5kZXN0cm95KCk7XG4gICAgfVxuXG4gICAgdGhpcy5yZW5kZXJlciA9IG51bGw7XG59O1xuXG4vKipcbiAqIFdpbGwgcmV0dXJuIGEgSFRNTCBJbWFnZSBvZiB0aGUgdGV4dHVyZVxuICpcbiAqIEByZXR1cm4ge0ltYWdlfVxuICovXG5SZW5kZXJUZXh0dXJlLnByb3RvdHlwZS5nZXRJbWFnZSA9IGZ1bmN0aW9uICgpXG57XG4gICAgdmFyIGltYWdlID0gbmV3IEltYWdlKCk7XG4gICAgaW1hZ2Uuc3JjID0gdGhpcy5nZXRCYXNlNjQoKTtcbiAgICByZXR1cm4gaW1hZ2U7XG59O1xuXG4vKipcbiAqIFdpbGwgcmV0dXJuIGEgYSBiYXNlNjQgZW5jb2RlZCBzdHJpbmcgb2YgdGhpcyB0ZXh0dXJlLiBJdCB3b3JrcyBieSBjYWxsaW5nIFJlbmRlclRleHR1cmUuZ2V0Q2FudmFzIGFuZCB0aGVuIHJ1bm5pbmcgdG9EYXRhVVJMIG9uIHRoYXQuXG4gKlxuICogQHJldHVybiB7c3RyaW5nfSBBIGJhc2U2NCBlbmNvZGVkIHN0cmluZyBvZiB0aGUgdGV4dHVyZS5cbiAqL1xuUmVuZGVyVGV4dHVyZS5wcm90b3R5cGUuZ2V0QmFzZTY0ID0gZnVuY3Rpb24gKClcbntcbiAgICByZXR1cm4gdGhpcy5nZXRDYW52YXMoKS50b0RhdGFVUkwoKTtcbn07XG5cbi8qKlxuICogQ3JlYXRlcyBhIENhbnZhcyBlbGVtZW50LCByZW5kZXJzIHRoaXMgUmVuZGVyVGV4dHVyZSB0byBpdCBhbmQgdGhlbiByZXR1cm5zIGl0LlxuICpcbiAqIEByZXR1cm4ge0hUTUxDYW52YXNFbGVtZW50fSBBIENhbnZhcyBlbGVtZW50IHdpdGggdGhlIHRleHR1cmUgcmVuZGVyZWQgb24uXG4gKi9cblJlbmRlclRleHR1cmUucHJvdG90eXBlLmdldENhbnZhcyA9IGZ1bmN0aW9uICgpXG57XG4gICAgaWYgKHRoaXMucmVuZGVyZXIudHlwZSA9PT0gQ09OU1QuUkVOREVSRVJfVFlQRS5XRUJHTClcbiAgICB7XG4gICAgICAgIHZhciBnbCA9IHRoaXMucmVuZGVyZXIuZ2w7XG4gICAgICAgIHZhciB3aWR0aCA9IHRoaXMudGV4dHVyZUJ1ZmZlci5zaXplLndpZHRoO1xuICAgICAgICB2YXIgaGVpZ2h0ID0gdGhpcy50ZXh0dXJlQnVmZmVyLnNpemUuaGVpZ2h0O1xuXG4gICAgICAgIHZhciB3ZWJHTFBpeGVscyA9IG5ldyBVaW50OEFycmF5KDQgKiB3aWR0aCAqIGhlaWdodCk7XG5cbiAgICAgICAgZ2wuYmluZEZyYW1lYnVmZmVyKGdsLkZSQU1FQlVGRkVSLCB0aGlzLnRleHR1cmVCdWZmZXIuZnJhbWVCdWZmZXIpO1xuICAgICAgICBnbC5yZWFkUGl4ZWxzKDAsIDAsIHdpZHRoLCBoZWlnaHQsIGdsLlJHQkEsIGdsLlVOU0lHTkVEX0JZVEUsIHdlYkdMUGl4ZWxzKTtcbiAgICAgICAgZ2wuYmluZEZyYW1lYnVmZmVyKGdsLkZSQU1FQlVGRkVSLCBudWxsKTtcblxuICAgICAgICB2YXIgdGVtcENhbnZhcyA9IG5ldyBDYW52YXNCdWZmZXIod2lkdGgsIGhlaWdodCk7XG4gICAgICAgIHZhciBjYW52YXNEYXRhID0gdGVtcENhbnZhcy5jb250ZXh0LmdldEltYWdlRGF0YSgwLCAwLCB3aWR0aCwgaGVpZ2h0KTtcbiAgICAgICAgY2FudmFzRGF0YS5kYXRhLnNldCh3ZWJHTFBpeGVscyk7XG5cbiAgICAgICAgdGVtcENhbnZhcy5jb250ZXh0LnB1dEltYWdlRGF0YShjYW52YXNEYXRhLCAwLCAwKTtcblxuICAgICAgICByZXR1cm4gdGVtcENhbnZhcy5jYW52YXM7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHJldHVybiB0aGlzLnRleHR1cmVCdWZmZXIuY2FudmFzO1xuICAgIH1cbn07XG5cbi8qKlxuICogV2lsbCByZXR1cm4gYSBvbmUtZGltZW5zaW9uYWwgYXJyYXkgY29udGFpbmluZyB0aGUgcGl4ZWwgZGF0YSBvZiB0aGUgZW50aXJlIHRleHR1cmUgaW4gUkdCQSBvcmRlciwgd2l0aCBpbnRlZ2VyIHZhbHVlcyBiZXR3ZWVuIDAgYW5kIDI1NSAoaW5jbHVkZWQpLlxuICpcbiAqIEByZXR1cm4ge1VpbnQ4Q2xhbXBlZEFycmF5fVxuICovXG5SZW5kZXJUZXh0dXJlLnByb3RvdHlwZS5nZXRQaXhlbHMgPSBmdW5jdGlvbiAoKVxue1xuICAgIHZhciB3aWR0aCwgaGVpZ2h0O1xuXG4gICAgaWYgKHRoaXMucmVuZGVyZXIudHlwZSA9PT0gQ09OU1QuUkVOREVSRVJfVFlQRS5XRUJHTClcbiAgICB7XG4gICAgICAgIHZhciBnbCA9IHRoaXMucmVuZGVyZXIuZ2w7XG4gICAgICAgIHdpZHRoID0gdGhpcy50ZXh0dXJlQnVmZmVyLnNpemUud2lkdGg7XG4gICAgICAgIGhlaWdodCA9IHRoaXMudGV4dHVyZUJ1ZmZlci5zaXplLmhlaWdodDtcblxuICAgICAgICB2YXIgd2ViR0xQaXhlbHMgPSBuZXcgVWludDhBcnJheSg0ICogd2lkdGggKiBoZWlnaHQpO1xuXG4gICAgICAgIGdsLmJpbmRGcmFtZWJ1ZmZlcihnbC5GUkFNRUJVRkZFUiwgdGhpcy50ZXh0dXJlQnVmZmVyLmZyYW1lQnVmZmVyKTtcbiAgICAgICAgZ2wucmVhZFBpeGVscygwLCAwLCB3aWR0aCwgaGVpZ2h0LCBnbC5SR0JBLCBnbC5VTlNJR05FRF9CWVRFLCB3ZWJHTFBpeGVscyk7XG4gICAgICAgIGdsLmJpbmRGcmFtZWJ1ZmZlcihnbC5GUkFNRUJVRkZFUiwgbnVsbCk7XG5cbiAgICAgICAgcmV0dXJuIHdlYkdMUGl4ZWxzO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICB3aWR0aCA9IHRoaXMudGV4dHVyZUJ1ZmZlci5jYW52YXMud2lkdGg7XG4gICAgICAgIGhlaWdodCA9IHRoaXMudGV4dHVyZUJ1ZmZlci5jYW52YXMuaGVpZ2h0O1xuXG4gICAgICAgIHJldHVybiB0aGlzLnRleHR1cmVCdWZmZXIuY2FudmFzLmdldENvbnRleHQoJzJkJykuZ2V0SW1hZ2VEYXRhKDAsIDAsIHdpZHRoLCBoZWlnaHQpLmRhdGE7XG4gICAgfVxufTtcblxuLyoqXG4gKiBXaWxsIHJldHVybiBhIG9uZS1kaW1lbnNpb25hbCBhcnJheSBjb250YWluaW5nIHRoZSBwaXhlbCBkYXRhIG9mIGEgcGl4ZWwgd2l0aGluIHRoZSB0ZXh0dXJlIGluIFJHQkEgb3JkZXIsIHdpdGggaW50ZWdlciB2YWx1ZXMgYmV0d2VlbiAwIGFuZCAyNTUgKGluY2x1ZGVkKS5cbiAqXG4gKiBAcGFyYW0geCB7bnVtYmVyfSBUaGUgeCBjb29yZGluYXRlIG9mIHRoZSBwaXhlbCB0byByZXRyaWV2ZS5cbiAqIEBwYXJhbSB5IHtudW1iZXJ9IFRoZSB5IGNvb3JkaW5hdGUgb2YgdGhlIHBpeGVsIHRvIHJldHJpZXZlLlxuICogQHJldHVybiB7VWludDhDbGFtcGVkQXJyYXl9XG4gKi9cblJlbmRlclRleHR1cmUucHJvdG90eXBlLmdldFBpeGVsID0gZnVuY3Rpb24gKHgsIHkpXG57XG4gICAgaWYgKHRoaXMucmVuZGVyZXIudHlwZSA9PT0gQ09OU1QuUkVOREVSRVJfVFlQRS5XRUJHTClcbiAgICB7XG4gICAgICAgIHZhciBnbCA9IHRoaXMucmVuZGVyZXIuZ2w7XG5cbiAgICAgICAgdmFyIHdlYkdMUGl4ZWxzID0gbmV3IFVpbnQ4QXJyYXkoNCk7XG5cbiAgICAgICAgZ2wuYmluZEZyYW1lYnVmZmVyKGdsLkZSQU1FQlVGRkVSLCB0aGlzLnRleHR1cmVCdWZmZXIuZnJhbWVCdWZmZXIpO1xuICAgICAgICBnbC5yZWFkUGl4ZWxzKHgsIHksIDEsIDEsIGdsLlJHQkEsIGdsLlVOU0lHTkVEX0JZVEUsIHdlYkdMUGl4ZWxzKTtcbiAgICAgICAgZ2wuYmluZEZyYW1lYnVmZmVyKGdsLkZSQU1FQlVGRkVSLCBudWxsKTtcblxuICAgICAgICByZXR1cm4gd2ViR0xQaXhlbHM7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHJldHVybiB0aGlzLnRleHR1cmVCdWZmZXIuY2FudmFzLmdldENvbnRleHQoJzJkJykuZ2V0SW1hZ2VEYXRhKHgsIHksIDEsIDEpLmRhdGE7XG4gICAgfVxufTtcbiIsInZhciBCYXNlVGV4dHVyZSA9IHJlcXVpcmUoJy4vQmFzZVRleHR1cmUnKSxcbiAgICBWaWRlb0Jhc2VUZXh0dXJlID0gcmVxdWlyZSgnLi9WaWRlb0Jhc2VUZXh0dXJlJyksXG4gICAgVGV4dHVyZVV2cyA9IHJlcXVpcmUoJy4vVGV4dHVyZVV2cycpLFxuICAgIEV2ZW50RW1pdHRlciA9IHJlcXVpcmUoJ2V2ZW50ZW1pdHRlcjMnKSxcbiAgICBtYXRoID0gcmVxdWlyZSgnLi4vbWF0aCcpLFxuICAgIHV0aWxzID0gcmVxdWlyZSgnLi4vdXRpbHMnKTtcblxuLyoqXG4gKiBBIHRleHR1cmUgc3RvcmVzIHRoZSBpbmZvcm1hdGlvbiB0aGF0IHJlcHJlc2VudHMgYW4gaW1hZ2Ugb3IgcGFydCBvZiBhbiBpbWFnZS4gSXQgY2Fubm90IGJlIGFkZGVkXG4gKiB0byB0aGUgZGlzcGxheSBsaXN0IGRpcmVjdGx5LiBJbnN0ZWFkIHVzZSBpdCBhcyB0aGUgdGV4dHVyZSBmb3IgYSBTcHJpdGUuIElmIG5vIGZyYW1lIGlzIHByb3ZpZGVkIHRoZW4gdGhlIHdob2xlIGltYWdlIGlzIHVzZWQuXG4gKlxuICogWW91IGNhbiBkaXJlY3RseSBjcmVhdGUgYSB0ZXh0dXJlIGZyb20gYW4gaW1hZ2UgYW5kIHRoZW4gcmV1c2UgaXQgbXVsdGlwbGUgdGltZXMgbGlrZSB0aGlzIDpcbiAqXG4gKiBgYGBqc1xuICogdmFyIHRleHR1cmUgPSBQSVhJLlRleHR1cmUuZnJvbUltYWdlKCdhc3NldHMvaW1hZ2UucG5nJyk7XG4gKiB2YXIgc3ByaXRlMSA9IG5ldyBQSVhJLlNwcml0ZSh0ZXh0dXJlKTtcbiAqIHZhciBzcHJpdGUyID0gbmV3IFBJWEkuU3ByaXRlKHRleHR1cmUpO1xuICogYGBgXG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIGJhc2VUZXh0dXJlIHtQSVhJLkJhc2VUZXh0dXJlfSBUaGUgYmFzZSB0ZXh0dXJlIHNvdXJjZSB0byBjcmVhdGUgdGhlIHRleHR1cmUgZnJvbVxuICogQHBhcmFtIFtmcmFtZV0ge1BJWEkuUmVjdGFuZ2xlfSBUaGUgcmVjdGFuZ2xlIGZyYW1lIG9mIHRoZSB0ZXh0dXJlIHRvIHNob3dcbiAqIEBwYXJhbSBbY3JvcF0ge1BJWEkuUmVjdGFuZ2xlfSBUaGUgYXJlYSBvZiBvcmlnaW5hbCB0ZXh0dXJlXG4gKiBAcGFyYW0gW3RyaW1dIHtQSVhJLlJlY3RhbmdsZX0gVHJpbW1lZCB0ZXh0dXJlIHJlY3RhbmdsZVxuICogQHBhcmFtIFtyb3RhdGVdIHtib29sZWFufSBpbmRpY2F0ZXMgd2hldGhlciB0aGUgdGV4dHVyZSBzaG91bGQgYmUgcm90YXRlZCBieSA5MCBkZWdyZWVzICggdXNlZCBieSB0ZXh0dXJlIHBhY2tlciApXG4gKi9cbmZ1bmN0aW9uIFRleHR1cmUoYmFzZVRleHR1cmUsIGZyYW1lLCBjcm9wLCB0cmltLCByb3RhdGUpXG57XG4gICAgRXZlbnRFbWl0dGVyLmNhbGwodGhpcyk7XG5cbiAgICAvKipcbiAgICAgKiBEb2VzIHRoaXMgVGV4dHVyZSBoYXZlIGFueSBmcmFtZSBkYXRhIGFzc2lnbmVkIHRvIGl0P1xuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKi9cbiAgICB0aGlzLm5vRnJhbWUgPSBmYWxzZTtcblxuICAgIGlmICghZnJhbWUpXG4gICAge1xuICAgICAgICB0aGlzLm5vRnJhbWUgPSB0cnVlO1xuICAgICAgICBmcmFtZSA9IG5ldyBtYXRoLlJlY3RhbmdsZSgwLCAwLCAxLCAxKTtcbiAgICB9XG5cbiAgICBpZiAoYmFzZVRleHR1cmUgaW5zdGFuY2VvZiBUZXh0dXJlKVxuICAgIHtcbiAgICAgICAgYmFzZVRleHR1cmUgPSBiYXNlVGV4dHVyZS5iYXNlVGV4dHVyZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYmFzZSB0ZXh0dXJlIHRoYXQgdGhpcyB0ZXh0dXJlIHVzZXMuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLkJhc2VUZXh0dXJlfVxuICAgICAqL1xuICAgIHRoaXMuYmFzZVRleHR1cmUgPSBiYXNlVGV4dHVyZTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBmcmFtZSBzcGVjaWZpZXMgdGhlIHJlZ2lvbiBvZiB0aGUgYmFzZSB0ZXh0dXJlIHRoYXQgdGhpcyB0ZXh0dXJlIHVzZXNcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuUmVjdGFuZ2xlfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fZnJhbWUgPSBmcmFtZTtcblxuICAgIC8qKlxuICAgICAqIFRoZSB0ZXh0dXJlIHRyaW0gZGF0YS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuUmVjdGFuZ2xlfVxuICAgICAqL1xuICAgIHRoaXMudHJpbSA9IHRyaW07XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIHdpbGwgbGV0IHRoZSByZW5kZXJlciBrbm93IGlmIHRoZSB0ZXh0dXJlIGlzIHZhbGlkLiBJZiBpdCdzIG5vdCB0aGVuIGl0IGNhbm5vdCBiZSByZW5kZXJlZC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICovXG4gICAgdGhpcy52YWxpZCA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogVGhpcyB3aWxsIGxldCBhIHJlbmRlcmVyIGtub3cgdGhhdCBhIHRleHR1cmUgaGFzIGJlZW4gdXBkYXRlZCAodXNlZCBtYWlubHkgZm9yIHdlYkdMIHV2IHVwZGF0ZXMpXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqL1xuICAgIHRoaXMucmVxdWlyZXNVcGRhdGUgPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBXZWJHTCBVViBkYXRhIGNhY2hlLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5UZXh0dXJlVXZzfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fdXZzID0gbnVsbDtcblxuICAgIC8qKlxuICAgICAqIFRoZSB3aWR0aCBvZiB0aGUgVGV4dHVyZSBpbiBwaXhlbHMuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy53aWR0aCA9IDA7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgaGVpZ2h0IG9mIHRoZSBUZXh0dXJlIGluIHBpeGVscy5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLmhlaWdodCA9IDA7XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIGlzIHRoZSBhcmVhIG9mIHRoZSBCYXNlVGV4dHVyZSBpbWFnZSB0byBhY3R1YWxseSBjb3B5IHRvIHRoZSBDYW52YXMgLyBXZWJHTCB3aGVuIHJlbmRlcmluZyxcbiAgICAgKiBpcnJlc3BlY3RpdmUgb2YgdGhlIGFjdHVhbCBmcmFtZSBzaXplIG9yIHBsYWNlbWVudCAod2hpY2ggY2FuIGJlIGluZmx1ZW5jZWQgYnkgdHJpbW1lZCB0ZXh0dXJlIGF0bGFzZXMpXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlJlY3RhbmdsZX1cbiAgICAgKi9cbiAgICB0aGlzLmNyb3AgPSBjcm9wIHx8IGZyYW1lOy8vbmV3IG1hdGguUmVjdGFuZ2xlKDAsIDAsIDEsIDEpO1xuXG4gICAgLyoqXG4gICAgICogSW5kaWNhdGVzIHdoZXRoZXIgdGhlIHRleHR1cmUgc2hvdWxkIGJlIHJvdGF0ZWQgYnkgOTAgZGVncmVlc1xuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqL1xuICAgIHRoaXMucm90YXRlID0gISFyb3RhdGU7XG5cbiAgICBpZiAoYmFzZVRleHR1cmUuaGFzTG9hZGVkKVxuICAgIHtcbiAgICAgICAgaWYgKHRoaXMubm9GcmFtZSlcbiAgICAgICAge1xuICAgICAgICAgICAgZnJhbWUgPSBuZXcgbWF0aC5SZWN0YW5nbGUoMCwgMCwgYmFzZVRleHR1cmUud2lkdGgsIGJhc2VUZXh0dXJlLmhlaWdodCk7XG5cbiAgICAgICAgICAgIC8vIGlmIHRoZXJlIGlzIG5vIGZyYW1lIHdlIHNob3VsZCBtb25pdG9yIGZvciBhbnkgYmFzZSB0ZXh0dXJlIGNoYW5nZXMuLlxuICAgICAgICAgICAgYmFzZVRleHR1cmUub24oJ3VwZGF0ZScsIHRoaXMub25CYXNlVGV4dHVyZVVwZGF0ZWQsIHRoaXMpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZnJhbWUgPSBmcmFtZTtcbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgYmFzZVRleHR1cmUub25jZSgnbG9hZGVkJywgdGhpcy5vbkJhc2VUZXh0dXJlTG9hZGVkLCB0aGlzKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBGaXJlZCB3aGVuIHRoZSB0ZXh0dXJlIGlzIHVwZGF0ZWQuIFRoaXMgaGFwcGVucyBpZiB0aGUgZnJhbWUgb3IgdGhlIGJhc2VUZXh0dXJlIGlzIHVwZGF0ZWQuXG4gICAgICpcbiAgICAgKiBAZXZlbnQgdXBkYXRlXG4gICAgICogQG1lbWJlcm9mIFBJWEkuVGV4dHVyZSNcbiAgICAgKiBAcHJvdGVjdGVkXG4gICAgICovXG59XG5cblRleHR1cmUucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShFdmVudEVtaXR0ZXIucHJvdG90eXBlKTtcblRleHR1cmUucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gVGV4dHVyZTtcbm1vZHVsZS5leHBvcnRzID0gVGV4dHVyZTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoVGV4dHVyZS5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBUaGUgZnJhbWUgc3BlY2lmaWVzIHRoZSByZWdpb24gb2YgdGhlIGJhc2UgdGV4dHVyZSB0aGF0IHRoaXMgdGV4dHVyZSB1c2VzLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5SZWN0YW5nbGV9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuVGV4dHVyZSNcbiAgICAgKi9cbiAgICBmcmFtZToge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9mcmFtZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAoZnJhbWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuX2ZyYW1lID0gZnJhbWU7XG5cbiAgICAgICAgICAgIHRoaXMubm9GcmFtZSA9IGZhbHNlO1xuXG4gICAgICAgICAgICB0aGlzLndpZHRoID0gZnJhbWUud2lkdGg7XG4gICAgICAgICAgICB0aGlzLmhlaWdodCA9IGZyYW1lLmhlaWdodDtcblxuICAgICAgICAgICAgaWYgKCF0aGlzLnRyaW0gJiYgIXRoaXMucm90YXRlICYmIChmcmFtZS54ICsgZnJhbWUud2lkdGggPiB0aGlzLmJhc2VUZXh0dXJlLndpZHRoIHx8IGZyYW1lLnkgKyBmcmFtZS5oZWlnaHQgPiB0aGlzLmJhc2VUZXh0dXJlLmhlaWdodCkpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdUZXh0dXJlIEVycm9yOiBmcmFtZSBkb2VzIG5vdCBmaXQgaW5zaWRlIHRoZSBiYXNlIFRleHR1cmUgZGltZW5zaW9ucyAnICsgdGhpcyk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vdGhpcy52YWxpZCA9IGZyYW1lICYmIGZyYW1lLndpZHRoICYmIGZyYW1lLmhlaWdodCAmJiB0aGlzLmJhc2VUZXh0dXJlLnNvdXJjZSAmJiB0aGlzLmJhc2VUZXh0dXJlLmhhc0xvYWRlZDtcbiAgICAgICAgICAgIHRoaXMudmFsaWQgPSBmcmFtZSAmJiBmcmFtZS53aWR0aCAmJiBmcmFtZS5oZWlnaHQgJiYgdGhpcy5iYXNlVGV4dHVyZS5oYXNMb2FkZWQ7XG5cbiAgICAgICAgICAgIGlmICh0aGlzLnRyaW0pXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdGhpcy53aWR0aCA9IHRoaXMudHJpbS53aWR0aDtcbiAgICAgICAgICAgICAgICB0aGlzLmhlaWdodCA9IHRoaXMudHJpbS5oZWlnaHQ7XG4gICAgICAgICAgICAgICAgdGhpcy5fZnJhbWUud2lkdGggPSB0aGlzLnRyaW0ud2lkdGg7XG4gICAgICAgICAgICAgICAgdGhpcy5fZnJhbWUuaGVpZ2h0ID0gdGhpcy50cmltLmhlaWdodDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB0aGlzLmNyb3AgPSBmcmFtZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHRoaXMudmFsaWQpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdGhpcy5fdXBkYXRlVXZzKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG59KTtcblxuLyoqXG4gKiBVcGRhdGVzIHRoaXMgdGV4dHVyZSBvbiB0aGUgZ3B1LlxuICpcbiAqL1xuVGV4dHVyZS5wcm90b3R5cGUudXBkYXRlID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLmJhc2VUZXh0dXJlLnVwZGF0ZSgpO1xufTtcblxuLyoqXG4gKiBDYWxsZWQgd2hlbiB0aGUgYmFzZSB0ZXh0dXJlIGlzIGxvYWRlZFxuICpcbiAqIEBwcml2YXRlXG4gKi9cblRleHR1cmUucHJvdG90eXBlLm9uQmFzZVRleHR1cmVMb2FkZWQgPSBmdW5jdGlvbiAoYmFzZVRleHR1cmUpXG57XG4gICAgLy8gVE9ETyB0aGlzIGNvZGUgbG9va3MgY29uZnVzaW5nLi4gYm9vIHRvIGFidXNpbmcgZ2V0dGVycyBhbmQgc2V0dGVyc3MhXG4gICAgaWYgKHRoaXMubm9GcmFtZSlcbiAgICB7XG4gICAgICAgIHRoaXMuZnJhbWUgPSBuZXcgbWF0aC5SZWN0YW5nbGUoMCwgMCwgYmFzZVRleHR1cmUud2lkdGgsIGJhc2VUZXh0dXJlLmhlaWdodCk7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHRoaXMuZnJhbWUgPSB0aGlzLl9mcmFtZTtcbiAgICB9XG5cbiAgICB0aGlzLmVtaXQoJ3VwZGF0ZScsIHRoaXMpO1xufTtcblxuLyoqXG4gKiBDYWxsZWQgd2hlbiB0aGUgYmFzZSB0ZXh0dXJlIGlzIHVwZGF0ZWRcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5UZXh0dXJlLnByb3RvdHlwZS5vbkJhc2VUZXh0dXJlVXBkYXRlZCA9IGZ1bmN0aW9uIChiYXNlVGV4dHVyZSlcbntcbiAgICB0aGlzLl9mcmFtZS53aWR0aCA9IGJhc2VUZXh0dXJlLndpZHRoO1xuICAgIHRoaXMuX2ZyYW1lLmhlaWdodCA9IGJhc2VUZXh0dXJlLmhlaWdodDtcblxuICAgIHRoaXMuZW1pdCgndXBkYXRlJywgdGhpcyk7XG59O1xuXG4vKipcbiAqIERlc3Ryb3lzIHRoaXMgdGV4dHVyZVxuICpcbiAqIEBwYXJhbSBbZGVzdHJveUJhc2U9ZmFsc2VdIHtib29sZWFufSBXaGV0aGVyIHRvIGRlc3Ryb3kgdGhlIGJhc2UgdGV4dHVyZSBhcyB3ZWxsXG4gKi9cblRleHR1cmUucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoZGVzdHJveUJhc2UpXG57XG4gICAgaWYgKHRoaXMuYmFzZVRleHR1cmUpXG4gICAge1xuICAgICAgICBpZiAoZGVzdHJveUJhc2UpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuYmFzZVRleHR1cmUuZGVzdHJveSgpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5iYXNlVGV4dHVyZS5vZmYoJ3VwZGF0ZScsIHRoaXMub25CYXNlVGV4dHVyZVVwZGF0ZWQsIHRoaXMpO1xuICAgICAgICB0aGlzLmJhc2VUZXh0dXJlLm9mZignbG9hZGVkJywgdGhpcy5vbkJhc2VUZXh0dXJlTG9hZGVkLCB0aGlzKTtcblxuICAgICAgICB0aGlzLmJhc2VUZXh0dXJlID0gbnVsbDtcbiAgICB9XG5cbiAgICB0aGlzLl9mcmFtZSA9IG51bGw7XG4gICAgdGhpcy5fdXZzID0gbnVsbDtcbiAgICB0aGlzLnRyaW0gPSBudWxsO1xuICAgIHRoaXMuY3JvcCA9IG51bGw7XG5cbiAgICB0aGlzLnZhbGlkID0gZmFsc2U7XG5cbiAgICB0aGlzLm9mZignZGlzcG9zZScsIHRoaXMuZGlzcG9zZSwgdGhpcyk7XG4gICAgdGhpcy5vZmYoJ3VwZGF0ZScsIHRoaXMudXBkYXRlLCB0aGlzKTtcbn07XG5cbi8qKlxuICogQ3JlYXRlcyBhIG5ldyB0ZXh0dXJlIG9iamVjdCB0aGF0IGFjdHMgdGhlIHNhbWUgYXMgdGhpcyBvbmUuXG4gKlxuICogQHJldHVybiB7UElYSS5UZXh0dXJlfVxuICovXG5UZXh0dXJlLnByb3RvdHlwZS5jbG9uZSA9IGZ1bmN0aW9uICgpXG57XG4gICAgcmV0dXJuIG5ldyBUZXh0dXJlKHRoaXMuYmFzZVRleHR1cmUsIHRoaXMuZnJhbWUsIHRoaXMuY3JvcCwgdGhpcy50cmltLCB0aGlzLnJvdGF0ZSk7XG59O1xuXG4vKipcbiAqIFVwZGF0ZXMgdGhlIGludGVybmFsIFdlYkdMIFVWIGNhY2hlLlxuICpcbiAqIEBwcml2YXRlXG4gKi9cblRleHR1cmUucHJvdG90eXBlLl91cGRhdGVVdnMgPSBmdW5jdGlvbiAoKVxue1xuICAgIGlmICghdGhpcy5fdXZzKVxuICAgIHtcbiAgICAgICAgdGhpcy5fdXZzID0gbmV3IFRleHR1cmVVdnMoKTtcbiAgICB9XG5cbiAgICB0aGlzLl91dnMuc2V0KHRoaXMuY3JvcCwgdGhpcy5iYXNlVGV4dHVyZSwgdGhpcy5yb3RhdGUpO1xufTtcblxuLyoqXG4gKiBIZWxwZXIgZnVuY3Rpb24gdGhhdCBjcmVhdGVzIGEgVGV4dHVyZSBvYmplY3QgZnJvbSB0aGUgZ2l2ZW4gaW1hZ2UgdXJsLlxuICogSWYgdGhlIGltYWdlIGlzIG5vdCBpbiB0aGUgdGV4dHVyZSBjYWNoZSBpdCB3aWxsIGJlICBjcmVhdGVkIGFuZCBsb2FkZWQuXG4gKlxuICogQHN0YXRpY1xuICogQHBhcmFtIGltYWdlVXJsIHtzdHJpbmd9IFRoZSBpbWFnZSB1cmwgb2YgdGhlIHRleHR1cmVcbiAqIEBwYXJhbSBjcm9zc29yaWdpbiB7Ym9vbGVhbn0gV2hldGhlciByZXF1ZXN0cyBzaG91bGQgYmUgdHJlYXRlZCBhcyBjcm9zc29yaWdpblxuICogQHBhcmFtIHNjYWxlTW9kZSB7bnVtYmVyfSBTZWUge0BsaW5rIFBJWEkuU0NBTEVfTU9ERVN9IGZvciBwb3NzaWJsZSB2YWx1ZXNcbiAqIEByZXR1cm4ge1BJWEkuVGV4dHVyZX0gVGhlIG5ld2x5IGNyZWF0ZWQgdGV4dHVyZVxuICovXG5UZXh0dXJlLmZyb21JbWFnZSA9IGZ1bmN0aW9uIChpbWFnZVVybCwgY3Jvc3NvcmlnaW4sIHNjYWxlTW9kZSlcbntcbiAgICB2YXIgdGV4dHVyZSA9IHV0aWxzLlRleHR1cmVDYWNoZVtpbWFnZVVybF07XG5cbiAgICBpZiAoIXRleHR1cmUpXG4gICAge1xuICAgICAgICB0ZXh0dXJlID0gbmV3IFRleHR1cmUoQmFzZVRleHR1cmUuZnJvbUltYWdlKGltYWdlVXJsLCBjcm9zc29yaWdpbiwgc2NhbGVNb2RlKSk7XG4gICAgICAgIHV0aWxzLlRleHR1cmVDYWNoZVtpbWFnZVVybF0gPSB0ZXh0dXJlO1xuICAgIH1cblxuICAgIHJldHVybiB0ZXh0dXJlO1xufTtcblxuLyoqXG4gKiBIZWxwZXIgZnVuY3Rpb24gdGhhdCBjcmVhdGVzIGEgc3ByaXRlIHRoYXQgd2lsbCBjb250YWluIGEgdGV4dHVyZSBmcm9tIHRoZSBUZXh0dXJlQ2FjaGUgYmFzZWQgb24gdGhlIGZyYW1lSWRcbiAqIFRoZSBmcmFtZSBpZHMgYXJlIGNyZWF0ZWQgd2hlbiBhIFRleHR1cmUgcGFja2VyIGZpbGUgaGFzIGJlZW4gbG9hZGVkXG4gKlxuICogQHN0YXRpY1xuICogQHBhcmFtIGZyYW1lSWQge3N0cmluZ30gVGhlIGZyYW1lIElkIG9mIHRoZSB0ZXh0dXJlIGluIHRoZSBjYWNoZVxuICogQHJldHVybiB7UElYSS5UZXh0dXJlfSBUaGUgbmV3bHkgY3JlYXRlZCB0ZXh0dXJlXG4gKi9cblRleHR1cmUuZnJvbUZyYW1lID0gZnVuY3Rpb24gKGZyYW1lSWQpXG57XG4gICAgdmFyIHRleHR1cmUgPSB1dGlscy5UZXh0dXJlQ2FjaGVbZnJhbWVJZF07XG5cbiAgICBpZiAoIXRleHR1cmUpXG4gICAge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RoZSBmcmFtZUlkIFwiJyArIGZyYW1lSWQgKyAnXCIgZG9lcyBub3QgZXhpc3QgaW4gdGhlIHRleHR1cmUgY2FjaGUnKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGV4dHVyZTtcbn07XG5cbi8qKlxuICogSGVscGVyIGZ1bmN0aW9uIHRoYXQgY3JlYXRlcyBhIG5ldyBUZXh0dXJlIGJhc2VkIG9uIHRoZSBnaXZlbiBjYW52YXMgZWxlbWVudC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAcGFyYW0gY2FudmFzIHtDYW52YXN9IFRoZSBjYW52YXMgZWxlbWVudCBzb3VyY2Ugb2YgdGhlIHRleHR1cmVcbiAqIEBwYXJhbSBzY2FsZU1vZGUge251bWJlcn0gU2VlIHtAbGluayBQSVhJLlNDQUxFX01PREVTfSBmb3IgcG9zc2libGUgdmFsdWVzXG4gKiBAcmV0dXJuIHtQSVhJLlRleHR1cmV9XG4gKi9cblRleHR1cmUuZnJvbUNhbnZhcyA9IGZ1bmN0aW9uIChjYW52YXMsIHNjYWxlTW9kZSlcbntcbiAgICByZXR1cm4gbmV3IFRleHR1cmUoQmFzZVRleHR1cmUuZnJvbUNhbnZhcyhjYW52YXMsIHNjYWxlTW9kZSkpO1xufTtcblxuLyoqXG4gKiBIZWxwZXIgZnVuY3Rpb24gdGhhdCBjcmVhdGVzIGEgbmV3IFRleHR1cmUgYmFzZWQgb24gdGhlIGdpdmVuIHZpZGVvIGVsZW1lbnQuXG4gKlxuICogQHN0YXRpY1xuICogQHBhcmFtIHZpZGVvIHtIVE1MVmlkZW9FbGVtZW50fVxuICogQHBhcmFtIHNjYWxlTW9kZSB7bnVtYmVyfSBTZWUge0BsaW5rIFBJWEkuU0NBTEVfTU9ERVN9IGZvciBwb3NzaWJsZSB2YWx1ZXNcbiAqIEByZXR1cm4ge1BJWEkuVGV4dHVyZX0gQSBUZXh0dXJlXG4gKi9cblRleHR1cmUuZnJvbVZpZGVvID0gZnVuY3Rpb24gKHZpZGVvLCBzY2FsZU1vZGUpXG57XG4gICAgaWYgKHR5cGVvZiB2aWRlbyA9PT0gJ3N0cmluZycpXG4gICAge1xuICAgICAgICByZXR1cm4gVGV4dHVyZS5mcm9tVmlkZW9VcmwodmlkZW8sIHNjYWxlTW9kZSk7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHJldHVybiBuZXcgVGV4dHVyZShWaWRlb0Jhc2VUZXh0dXJlLmZyb21WaWRlbyh2aWRlbywgc2NhbGVNb2RlKSk7XG4gICAgfVxufTtcblxuLyoqXG4gKiBIZWxwZXIgZnVuY3Rpb24gdGhhdCBjcmVhdGVzIGEgbmV3IFRleHR1cmUgYmFzZWQgb24gdGhlIHZpZGVvIHVybC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAcGFyYW0gdmlkZW9Vcmwge3N0cmluZ31cbiAqIEBwYXJhbSBzY2FsZU1vZGUge251bWJlcn0gU2VlIHtAbGluayBQSVhJLlNDQUxFX01PREVTfSBmb3IgcG9zc2libGUgdmFsdWVzXG4gKiBAcmV0dXJuIHtQSVhJLlRleHR1cmV9IEEgVGV4dHVyZVxuICovXG5UZXh0dXJlLmZyb21WaWRlb1VybCA9IGZ1bmN0aW9uICh2aWRlb1VybCwgc2NhbGVNb2RlKVxue1xuICAgIHJldHVybiBuZXcgVGV4dHVyZShWaWRlb0Jhc2VUZXh0dXJlLmZyb21VcmwodmlkZW9VcmwsIHNjYWxlTW9kZSkpO1xufTtcblxuLyoqXG4gKiBBZGRzIGEgdGV4dHVyZSB0byB0aGUgZ2xvYmFsIHV0aWxzLlRleHR1cmVDYWNoZS4gVGhpcyBjYWNoZSBpcyBzaGFyZWQgYWNyb3NzIHRoZSB3aG9sZSBQSVhJIG9iamVjdC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAcGFyYW0gdGV4dHVyZSB7UElYSS5UZXh0dXJlfSBUaGUgVGV4dHVyZSB0byBhZGQgdG8gdGhlIGNhY2hlLlxuICogQHBhcmFtIGlkIHtzdHJpbmd9IFRoZSBpZCB0aGF0IHRoZSB0ZXh0dXJlIHdpbGwgYmUgc3RvcmVkIGFnYWluc3QuXG4gKi9cblRleHR1cmUuYWRkVGV4dHVyZVRvQ2FjaGUgPSBmdW5jdGlvbiAodGV4dHVyZSwgaWQpXG57XG4gICAgdXRpbHMuVGV4dHVyZUNhY2hlW2lkXSA9IHRleHR1cmU7XG59O1xuXG4vKipcbiAqIFJlbW92ZSBhIHRleHR1cmUgZnJvbSB0aGUgZ2xvYmFsIHV0aWxzLlRleHR1cmVDYWNoZS5cbiAqXG4gKiBAc3RhdGljXG4gKiBAcGFyYW0gaWQge3N0cmluZ30gVGhlIGlkIG9mIHRoZSB0ZXh0dXJlIHRvIGJlIHJlbW92ZWRcbiAqIEByZXR1cm4ge1BJWEkuVGV4dHVyZX0gVGhlIHRleHR1cmUgdGhhdCB3YXMgcmVtb3ZlZFxuICovXG5UZXh0dXJlLnJlbW92ZVRleHR1cmVGcm9tQ2FjaGUgPSBmdW5jdGlvbiAoaWQpXG57XG4gICAgdmFyIHRleHR1cmUgPSB1dGlscy5UZXh0dXJlQ2FjaGVbaWRdO1xuXG4gICAgZGVsZXRlIHV0aWxzLlRleHR1cmVDYWNoZVtpZF07XG4gICAgZGVsZXRlIHV0aWxzLkJhc2VUZXh0dXJlQ2FjaGVbaWRdO1xuXG4gICAgcmV0dXJuIHRleHR1cmU7XG59O1xuXG4vKipcbiAqIEFuIGVtcHR5IHRleHR1cmUsIHVzZWQgb2Z0ZW4gdG8gbm90IGhhdmUgdG8gY3JlYXRlIG11bHRpcGxlIGVtcHR5IHRleHR1cmVzLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBjb25zdGFudFxuICovXG5UZXh0dXJlLkVNUFRZID0gbmV3IFRleHR1cmUobmV3IEJhc2VUZXh0dXJlKCkpO1xuIiwiXG4vKipcbiAqIEEgc3RhbmRhcmQgb2JqZWN0IHRvIHN0b3JlIHRoZSBVdnMgb2YgYSB0ZXh0dXJlXG4gKlxuICogQGNsYXNzXG4gKiBAcHJpdmF0ZVxuICogQG1lbWJlcm9mIFBJWElcbiAqL1xuZnVuY3Rpb24gVGV4dHVyZVV2cygpXG57XG4gICAgdGhpcy54MCA9IDA7XG4gICAgdGhpcy55MCA9IDA7XG5cbiAgICB0aGlzLngxID0gMTtcbiAgICB0aGlzLnkxID0gMDtcblxuICAgIHRoaXMueDIgPSAxO1xuICAgIHRoaXMueTIgPSAxO1xuXG4gICAgdGhpcy54MyA9IDA7XG4gICAgdGhpcy55MyA9IDE7XG5cbiAgICB0aGlzLnh5MF91aW50MzIgPSAwO1xuICAgIHRoaXMueHkxX3VpbnQzMiA9IDA7XG4gICAgdGhpcy54eTJfdWludDMyID0gMDtcbiAgICB0aGlzLnh5M191aW50MzIgPSAwO1xuXG4gICAgdGhpcy51dnNfdWludDMyID0gbmV3IFVpbnQzMkFycmF5KDQpXG59XG5cbm1vZHVsZS5leHBvcnRzID0gVGV4dHVyZVV2cztcblxuLyoqXG4gKiBTZXRzIHRoZSB0ZXh0dXJlIFV2cyBiYXNlZCBvbiB0aGUgZ2l2ZW4gZnJhbWUgaW5mb3JtYXRpb25cbiAqIEBwYXJhbSBmcmFtZSB7UElYSS5SZWN0YW5nbGV9XG4gKiBAcGFyYW0gYmFzZUZyYW1lIHtQSVhJLlJlY3RhbmdsZX1cbiAqIEBwYXJhbSByb3RhdGUge2Jvb2xlYW59IFdoZXRoZXIgb3Igbm90IHRoZSBmcmFtZSBpcyByb3RhdGVkXG4gKiBAcHJpdmF0ZVxuICovXG5UZXh0dXJlVXZzLnByb3RvdHlwZS5zZXQgPSBmdW5jdGlvbiAoZnJhbWUsIGJhc2VGcmFtZSwgcm90YXRlKVxue1xuICAgIHZhciB0dyA9IGJhc2VGcmFtZS53aWR0aDtcbiAgICB2YXIgdGggPSBiYXNlRnJhbWUuaGVpZ2h0O1xuXG4gICAgaWYocm90YXRlKVxuICAgIHtcbiAgICAgICAgdGhpcy54MCA9IChmcmFtZS54ICsgZnJhbWUuaGVpZ2h0KSAvIHR3O1xuICAgICAgICB0aGlzLnkwID0gZnJhbWUueSAvIHRoO1xuXG4gICAgICAgIHRoaXMueDEgPSAoZnJhbWUueCArIGZyYW1lLmhlaWdodCkgLyB0dztcbiAgICAgICAgdGhpcy55MSA9IChmcmFtZS55ICsgZnJhbWUud2lkdGgpIC8gdGg7XG5cbiAgICAgICAgdGhpcy54MiA9IGZyYW1lLnggLyB0dztcbiAgICAgICAgdGhpcy55MiA9IChmcmFtZS55ICsgZnJhbWUud2lkdGgpIC8gdGg7XG5cbiAgICAgICAgdGhpcy54MyA9IGZyYW1lLnggLyB0dztcbiAgICAgICAgdGhpcy55MyA9IGZyYW1lLnkgLyB0aDtcbiAgICB9XG4gICAgZWxzZVxuICAgIHtcblxuICAgICAgICB0aGlzLngwID0gZnJhbWUueCAvIHR3O1xuICAgICAgICB0aGlzLnkwID0gZnJhbWUueSAvIHRoO1xuXG4gICAgICAgIHRoaXMueDEgPSAoZnJhbWUueCArIGZyYW1lLndpZHRoKSAvIHR3O1xuICAgICAgICB0aGlzLnkxID0gZnJhbWUueSAvIHRoO1xuXG4gICAgICAgIHRoaXMueDIgPSAoZnJhbWUueCArIGZyYW1lLndpZHRoKSAvIHR3O1xuICAgICAgICB0aGlzLnkyID0gKGZyYW1lLnkgKyBmcmFtZS5oZWlnaHQpIC8gdGg7XG5cbiAgICAgICAgdGhpcy54MyA9IGZyYW1lLnggLyB0dztcbiAgICAgICAgdGhpcy55MyA9IChmcmFtZS55ICsgZnJhbWUuaGVpZ2h0KSAvIHRoO1xuICAgIH1cblxuICAgIHRoaXMudXZzX3VpbnQzMlswXSA9ICgoKHRoaXMueTAgKiA2NTUzNSkgJiAweEZGRkYpIDw8IDE2KSB8ICgodGhpcy54MCAqIDY1NTM1KSAmIDB4RkZGRik7XG4gICAgdGhpcy51dnNfdWludDMyWzFdID0gKCgodGhpcy55MSAqIDY1NTM1KSAmIDB4RkZGRikgPDwgMTYpIHwgKCh0aGlzLngxICogNjU1MzUpICYgMHhGRkZGKTtcbiAgICB0aGlzLnV2c191aW50MzJbMl0gPSAoKCh0aGlzLnkyICogNjU1MzUpICYgMHhGRkZGKSA8PCAxNikgfCAoKHRoaXMueDIgKiA2NTUzNSkgJiAweEZGRkYpO1xuICAgIHRoaXMudXZzX3VpbnQzMlszXSA9ICgoKHRoaXMueTMgKiA2NTUzNSkgJiAweEZGRkYpIDw8IDE2KSB8ICgodGhpcy54MyAqIDY1NTM1KSAmIDB4RkZGRik7XG59O1xuIiwidmFyIEJhc2VUZXh0dXJlID0gcmVxdWlyZSgnLi9CYXNlVGV4dHVyZScpLFxuICAgIHV0aWxzID0gcmVxdWlyZSgnLi4vdXRpbHMnKTtcblxuLyoqXG4gKiBBIHRleHR1cmUgb2YgYSBbcGxheWluZ10gVmlkZW8uXG4gKlxuICogVmlkZW8gYmFzZSB0ZXh0dXJlcyBtaW1pYyBQaXhpIEJhc2VUZXh0dXJlLmZyb20uLi4uIG1ldGhvZCBpbiB0aGVpciBjcmVhdGlvbiBwcm9jZXNzLlxuICpcbiAqIFRoaXMgY2FuIGJlIHVzZWQgaW4gc2V2ZXJhbCB3YXlzLCBzdWNoIGFzOlxuICpcbiAqIGBgYGpzXG4gKiB2YXIgdGV4dHVyZSA9IFBJWEkuVmlkZW9CYXNlVGV4dHVyZS5mcm9tVXJsKCdodHRwOi8vbXlkb21haW4uY29tL3ZpZGVvLm1wNCcpO1xuICpcbiAqIHZhciB0ZXh0dXJlID0gUElYSS5WaWRlb0Jhc2VUZXh0dXJlLmZyb21VcmwoeyBzcmM6ICdodHRwOi8vbXlkb21haW4uY29tL3ZpZGVvLm1wNCcsIG1pbWU6ICd2aWRlby9tcDQnIH0pO1xuICpcbiAqIHZhciB0ZXh0dXJlID0gUElYSS5WaWRlb0Jhc2VUZXh0dXJlLmZyb21VcmxzKFsnL3ZpZGVvLndlYm0nLCAnL3ZpZGVvLm1wNCddKTtcbiAqXG4gKiB2YXIgdGV4dHVyZSA9IFBJWEkuVmlkZW9CYXNlVGV4dHVyZS5mcm9tVXJscyhbXG4gKiAgICAgeyBzcmM6ICcvdmlkZW8ud2VibScsIG1pbWU6ICd2aWRlby93ZWJtJyB9LFxuICogICAgIHsgc3JjOiAnL3ZpZGVvLm1wNCcsIG1pbWU6ICd2aWRlby9tcDQnIH1cbiAqIF0pO1xuICogYGBgXG4gKlxuICogU2VlIHRoZSBbXCJkZXVzXCIgZGVtb10oaHR0cDovL3d3dy5nb29kYm95ZGlnaXRhbC5jb20vcGl4aWpzL2V4YW1wbGVzL2RldXMvKS5cbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQmFzZVRleHR1cmVcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gc291cmNlIHtIVE1MVmlkZW9FbGVtZW50fVxuICogQHBhcmFtIFtzY2FsZU1vZGVdIHtudW1iZXJ9IFNlZSB7QGxpbmsgUElYSS5TQ0FMRV9NT0RFU30gZm9yIHBvc3NpYmxlIHZhbHVlc1xuICovXG5mdW5jdGlvbiBWaWRlb0Jhc2VUZXh0dXJlKHNvdXJjZSwgc2NhbGVNb2RlKVxue1xuICAgIGlmICghc291cmNlKVxuICAgIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdObyB2aWRlbyBzb3VyY2UgZWxlbWVudCBzcGVjaWZpZWQuJyk7XG4gICAgfVxuXG4gICAgLy8gaG9vayBpbiBoZXJlIHRvIGNoZWNrIGlmIHZpZGVvIGlzIGFscmVhZHkgYXZhaWxhYmxlLlxuICAgIC8vIEJhc2VUZXh0dXJlIGxvb2tzIGZvciBhIHNvdXJjZS5jb21wbGV0ZSBib29sZWFuLCBwbHVzIHdpZHRoICYgaGVpZ2h0LlxuXG4gICAgaWYgKChzb3VyY2UucmVhZHlTdGF0ZSA9PT0gc291cmNlLkhBVkVfRU5PVUdIX0RBVEEgfHwgc291cmNlLnJlYWR5U3RhdGUgPT09IHNvdXJjZS5IQVZFX0ZVVFVSRV9EQVRBKSAmJiBzb3VyY2Uud2lkdGggJiYgc291cmNlLmhlaWdodClcbiAgICB7XG4gICAgICAgIHNvdXJjZS5jb21wbGV0ZSA9IHRydWU7XG4gICAgfVxuXG4gICAgQmFzZVRleHR1cmUuY2FsbCh0aGlzLCBzb3VyY2UsIHNjYWxlTW9kZSk7XG5cbiAgICAvKipcbiAgICAgKiBTaG91bGQgdGhlIGJhc2UgdGV4dHVyZSBhdXRvbWF0aWNhbGx5IHVwZGF0ZSBpdHNlbGYsIHNldCB0byB0cnVlIGJ5IGRlZmF1bHRcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICogQGRlZmF1bHQgdHJ1ZVxuICAgICAqL1xuICAgIHRoaXMuYXV0b1VwZGF0ZSA9IGZhbHNlO1xuXG4gICAgdGhpcy5fb25VcGRhdGUgPSB0aGlzLl9vblVwZGF0ZS5iaW5kKHRoaXMpO1xuICAgIHRoaXMuX29uQ2FuUGxheSA9IHRoaXMuX29uQ2FuUGxheS5iaW5kKHRoaXMpO1xuXG4gICAgaWYgKCFzb3VyY2UuY29tcGxldGUpXG4gICAge1xuICAgICAgICBzb3VyY2UuYWRkRXZlbnRMaXN0ZW5lcignY2FucGxheScsIHRoaXMuX29uQ2FuUGxheSk7XG4gICAgICAgIHNvdXJjZS5hZGRFdmVudExpc3RlbmVyKCdjYW5wbGF5dGhyb3VnaCcsIHRoaXMuX29uQ2FuUGxheSk7XG5cbiAgICAgICAgLy8gc3RhcnRlZCBwbGF5aW5nLi5cbiAgICAgICAgc291cmNlLmFkZEV2ZW50TGlzdGVuZXIoJ3BsYXknLCB0aGlzLl9vblBsYXlTdGFydC5iaW5kKHRoaXMpKTtcbiAgICAgICAgc291cmNlLmFkZEV2ZW50TGlzdGVuZXIoJ3BhdXNlJywgdGhpcy5fb25QbGF5U3RvcC5iaW5kKHRoaXMpKTtcbiAgICB9XG5cbiAgICB0aGlzLl9fbG9hZGVkID0gZmFsc2U7XG59XG5cblZpZGVvQmFzZVRleHR1cmUucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShCYXNlVGV4dHVyZS5wcm90b3R5cGUpO1xuVmlkZW9CYXNlVGV4dHVyZS5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBWaWRlb0Jhc2VUZXh0dXJlO1xubW9kdWxlLmV4cG9ydHMgPSBWaWRlb0Jhc2VUZXh0dXJlO1xuXG4vKipcbiAqIFRoZSBpbnRlcm5hbCB1cGRhdGUgbG9vcCBvZiB0aGUgdmlkZW8gYmFzZSB0ZXh0dXJlLCBvbmx5IHJ1bnMgd2hlbiBhdXRvVXBkYXRlIGlzIHNldCB0byB0cnVlXG4gKlxuICogQHByaXZhdGVcbiAqL1xuVmlkZW9CYXNlVGV4dHVyZS5wcm90b3R5cGUuX29uVXBkYXRlID0gZnVuY3Rpb24gKClcbntcbiAgICBpZiAodGhpcy5hdXRvVXBkYXRlKVxuICAgIHtcbiAgICAgICAgd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZSh0aGlzLl9vblVwZGF0ZSk7XG4gICAgICAgIHRoaXMudXBkYXRlKCk7XG4gICAgfVxufTtcblxuLyoqXG4gKiBSdW5zIHRoZSB1cGRhdGUgbG9vcCB3aGVuIHRoZSB2aWRlbyBpcyByZWFkeSB0byBwbGF5XG4gKlxuICogQHByaXZhdGVcbiAqL1xuVmlkZW9CYXNlVGV4dHVyZS5wcm90b3R5cGUuX29uUGxheVN0YXJ0ID0gZnVuY3Rpb24gKClcbntcbiAgICBpZiAoIXRoaXMuYXV0b1VwZGF0ZSlcbiAgICB7XG4gICAgICAgIHdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUodGhpcy5fb25VcGRhdGUpO1xuICAgICAgICB0aGlzLmF1dG9VcGRhdGUgPSB0cnVlO1xuICAgIH1cbn07XG5cbi8qKlxuICogRmlyZWQgd2hlbiBhIHBhdXNlIGV2ZW50IGlzIHRyaWdnZXJlZCwgc3RvcHMgdGhlIHVwZGF0ZSBsb29wXG4gKlxuICogQHByaXZhdGVcbiAqL1xuVmlkZW9CYXNlVGV4dHVyZS5wcm90b3R5cGUuX29uUGxheVN0b3AgPSBmdW5jdGlvbiAoKVxue1xuICAgIHRoaXMuYXV0b1VwZGF0ZSA9IGZhbHNlO1xufTtcblxuLyoqXG4gKiBGaXJlZCB3aGVuIHRoZSB2aWRlbyBpcyBsb2FkZWQgYW5kIHJlYWR5IHRvIHBsYXlcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5WaWRlb0Jhc2VUZXh0dXJlLnByb3RvdHlwZS5fb25DYW5QbGF5ID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLmhhc0xvYWRlZCA9IHRydWU7XG5cbiAgICBpZiAodGhpcy5zb3VyY2UpXG4gICAge1xuICAgICAgICB0aGlzLnNvdXJjZS5yZW1vdmVFdmVudExpc3RlbmVyKCdjYW5wbGF5JywgdGhpcy5fb25DYW5QbGF5KTtcbiAgICAgICAgdGhpcy5zb3VyY2UucmVtb3ZlRXZlbnRMaXN0ZW5lcignY2FucGxheXRocm91Z2gnLCB0aGlzLl9vbkNhblBsYXkpO1xuXG4gICAgICAgIHRoaXMud2lkdGggPSB0aGlzLnNvdXJjZS52aWRlb1dpZHRoO1xuICAgICAgICB0aGlzLmhlaWdodCA9IHRoaXMuc291cmNlLnZpZGVvSGVpZ2h0O1xuXG4gICAgICAgIHRoaXMuc291cmNlLnBsYXkoKTtcblxuICAgICAgICAvLyBwcmV2ZW50IG11bHRpcGxlIGxvYWRlZCBkaXNwYXRjaGVzLi5cbiAgICAgICAgaWYgKCF0aGlzLl9fbG9hZGVkKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLl9fbG9hZGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMuZW1pdCgnbG9hZGVkJywgdGhpcyk7XG4gICAgICAgIH1cbiAgICB9XG59O1xuXG4vKipcbiAqIERlc3Ryb3lzIHRoaXMgdGV4dHVyZVxuICpcbiAqL1xuVmlkZW9CYXNlVGV4dHVyZS5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uICgpXG57XG4gICAgaWYgKHRoaXMuc291cmNlICYmIHRoaXMuc291cmNlLl9waXhpSWQpXG4gICAge1xuICAgICAgICBkZWxldGUgdXRpbHMuQmFzZVRleHR1cmVDYWNoZVsgdGhpcy5zb3VyY2UuX3BpeGlJZCBdO1xuICAgICAgICBkZWxldGUgdGhpcy5zb3VyY2UuX3BpeGlJZDtcbiAgICB9XG5cbiAgICBCYXNlVGV4dHVyZS5wcm90b3R5cGUuZGVzdHJveS5jYWxsKHRoaXMpO1xufTtcblxuLyoqXG4gKiBNaW1pYyBQaXhpIEJhc2VUZXh0dXJlLmZyb20uLi4uIG1ldGhvZC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAcGFyYW0gdmlkZW8ge0hUTUxWaWRlb0VsZW1lbnR9XG4gKiBAcGFyYW0gc2NhbGVNb2RlIHtudW1iZXJ9IFNlZSB7QGxpbmsgUElYSS5TQ0FMRV9NT0RFU30gZm9yIHBvc3NpYmxlIHZhbHVlc1xuICogQHJldHVybiB7UElYSS5WaWRlb0Jhc2VUZXh0dXJlfVxuICovXG5WaWRlb0Jhc2VUZXh0dXJlLmZyb21WaWRlbyA9IGZ1bmN0aW9uICh2aWRlbywgc2NhbGVNb2RlKVxue1xuICAgIGlmICghdmlkZW8uX3BpeGlJZClcbiAgICB7XG4gICAgICAgIHZpZGVvLl9waXhpSWQgPSAndmlkZW9fJyArIHV0aWxzLnVpZCgpO1xuICAgIH1cblxuICAgIHZhciBiYXNlVGV4dHVyZSA9IHV0aWxzLkJhc2VUZXh0dXJlQ2FjaGVbdmlkZW8uX3BpeGlJZF07XG5cbiAgICBpZiAoIWJhc2VUZXh0dXJlKVxuICAgIHtcbiAgICAgICAgYmFzZVRleHR1cmUgPSBuZXcgVmlkZW9CYXNlVGV4dHVyZSh2aWRlbywgc2NhbGVNb2RlKTtcbiAgICAgICAgdXRpbHMuQmFzZVRleHR1cmVDYWNoZVsgdmlkZW8uX3BpeGlJZCBdID0gYmFzZVRleHR1cmU7XG4gICAgfVxuXG4gICAgcmV0dXJuIGJhc2VUZXh0dXJlO1xufTtcblxuLyoqXG4gKiBIZWxwZXIgZnVuY3Rpb24gdGhhdCBjcmVhdGVzIGEgbmV3IEJhc2VUZXh0dXJlIGJhc2VkIG9uIHRoZSBnaXZlbiB2aWRlbyBlbGVtZW50LlxuICogVGhpcyBCYXNlVGV4dHVyZSBjYW4gdGhlbiBiZSB1c2VkIHRvIGNyZWF0ZSBhIHRleHR1cmVcbiAqXG4gKiBAc3RhdGljXG4gKiBAcGFyYW0gdmlkZW9TcmMge3N0cmluZ3xvYmplY3R8c3RyaW5nW118b2JqZWN0W119IFRoZSBVUkwocykgZm9yIHRoZSB2aWRlby5cbiAqIEBwYXJhbSBbdmlkZW9TcmMuc3JjXSB7c3RyaW5nfSBPbmUgb2YgdGhlIHNvdXJjZSB1cmxzIGZvciB0aGUgdmlkZW9cbiAqIEBwYXJhbSBbdmlkZW9TcmMubWltZV0ge3N0cmluZ30gVGhlIG1pbWV0eXBlIG9mIHRoZSB2aWRlbyAoZS5nLiAndmlkZW8vbXA0JykuIElmIG5vdCBzcGVjaWZpZWRcbiAqICB0aGUgdXJsJ3MgZXh0ZW5zaW9uIHdpbGwgYmUgdXNlZCBhcyB0aGUgc2Vjb25kIHBhcnQgb2YgdGhlIG1pbWUgdHlwZS5cbiAqIEBwYXJhbSBzY2FsZU1vZGUge251bWJlcn0gU2VlIHtAbGluayBQSVhJLlNDQUxFX01PREVTfSBmb3IgcG9zc2libGUgdmFsdWVzXG4gKiBAcmV0dXJuIHtQSVhJLlZpZGVvQmFzZVRleHR1cmV9XG4gKi9cblZpZGVvQmFzZVRleHR1cmUuZnJvbVVybCA9IGZ1bmN0aW9uICh2aWRlb1NyYywgc2NhbGVNb2RlKVxue1xuICAgIHZhciB2aWRlbyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3ZpZGVvJyk7XG5cbiAgICAvLyBhcnJheSBvZiBvYmplY3RzIG9yIHN0cmluZ3NcbiAgICBpZiAoQXJyYXkuaXNBcnJheSh2aWRlb1NyYykpXG4gICAge1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHZpZGVvU3JjLmxlbmd0aDsgKytpKVxuICAgICAgICB7XG4gICAgICAgICAgICB2aWRlby5hcHBlbmRDaGlsZChjcmVhdGVTb3VyY2UodmlkZW9TcmNbaV0uc3JjIHx8IHZpZGVvU3JjW2ldLCB2aWRlb1NyY1tpXS5taW1lKSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLy8gc2luZ2xlIG9iamVjdCBvciBzdHJpbmdcbiAgICBlbHNlXG4gICAge1xuICAgICAgICB2aWRlby5hcHBlbmRDaGlsZChjcmVhdGVTb3VyY2UodmlkZW9TcmMuc3JjIHx8IHZpZGVvU3JjLCB2aWRlb1NyYy5taW1lKSk7XG4gICAgfVxuXG4gICAgdmlkZW8ubG9hZCgpO1xuICAgIHZpZGVvLnBsYXkoKTtcblxuICAgIHJldHVybiBWaWRlb0Jhc2VUZXh0dXJlLmZyb21WaWRlbyh2aWRlbywgc2NhbGVNb2RlKTtcbn07XG5cblZpZGVvQmFzZVRleHR1cmUuZnJvbVVybHMgPSBWaWRlb0Jhc2VUZXh0dXJlLmZyb21Vcmw7XG5cbmZ1bmN0aW9uIGNyZWF0ZVNvdXJjZShwYXRoLCB0eXBlKVxue1xuICAgIGlmICghdHlwZSlcbiAgICB7XG4gICAgICAgIHR5cGUgPSAndmlkZW8vJyArIHBhdGguc3Vic3RyKHBhdGgubGFzdEluZGV4T2YoJy4nKSArIDEpO1xuICAgIH1cblxuICAgIHZhciBzb3VyY2UgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzb3VyY2UnKTtcblxuICAgIHNvdXJjZS5zcmMgPSBwYXRoO1xuICAgIHNvdXJjZS50eXBlID0gdHlwZTtcblxuICAgIHJldHVybiBzb3VyY2U7XG59XG4iLCJ2YXIgQ09OU1QgPSByZXF1aXJlKCcuLi9jb25zdCcpLFxuICAgIEV2ZW50RW1pdHRlciA9IHJlcXVpcmUoJ2V2ZW50ZW1pdHRlcjMnKSxcbiAgICAvLyBJbnRlcm5hbCBldmVudCB1c2VkIGJ5IGNvbXBvc2VkIGVtaXR0ZXJcbiAgICBUSUNLID0gJ3RpY2snO1xuXG4vKipcbiAqIEEgVGlja2VyIGNsYXNzIHRoYXQgcnVucyBhbiB1cGRhdGUgbG9vcCB0aGF0IG90aGVyIG9iamVjdHMgbGlzdGVuIHRvLlxuICogVGhpcyBjbGFzcyBpcyBjb21wb3NlZCBhcm91bmQgYW4gRXZlbnRFbWl0dGVyIG9iamVjdCB0byBhZGQgbGlzdGVuZXJzXG4gKiBtZWFudCBmb3IgZXhlY3V0aW9uIG9uIHRoZSBuZXh0IHJlcXVlc3RlZCBhbmltYXRpb24gZnJhbWUuXG4gKiBBbmltYXRpb24gZnJhbWVzIGFyZSByZXF1ZXN0ZWQgb25seSB3aGVuIG5lY2Vzc2FyeSxcbiAqIGUuZy4gV2hlbiB0aGUgdGlja2VyIGlzIHN0YXJ0ZWQgYW5kIHRoZSBlbWl0dGVyIGhhcyBsaXN0ZW5lcnMuXG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSS50aWNrZXJcbiAqL1xuZnVuY3Rpb24gVGlja2VyKClcbntcbiAgICB2YXIgX3RoaXMgPSB0aGlzO1xuXG4gICAgLyoqXG4gICAgICogSW50ZXJuYWwgdGljayBtZXRob2QgYm91bmQgdG8gdGlja2VyIGluc3RhbmNlLlxuICAgICAqIFRoaXMgaXMgYmVjYXVzZSBpbiBlYXJseSAyMDE1LCBGdW5jdGlvbi5iaW5kXG4gICAgICogaXMgc3RpbGwgNjAlIHNsb3dlciBpbiBoaWdoIHBlcmZvcm1hbmNlIHNjZW5hcmlvcy5cbiAgICAgKiBBbHNvIHNlcGFyYXRpbmcgZnJhbWUgcmVxdWVzdHMgZnJvbSB1cGRhdGUgbWV0aG9kXG4gICAgICogc28gbGlzdGVuZXJzIG1heSBiZSBjYWxsZWQgYXQgYW55IHRpbWUgYW5kIHdpdGhcbiAgICAgKiBhbnkgYW5pbWF0aW9uIEFQSSwganVzdCBpbnZva2UgdGlja2VyLnVwZGF0ZSh0aW1lKS5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fdGljayA9IGZ1bmN0aW9uIF90aWNrKHRpbWUpIHtcblxuICAgICAgICBfdGhpcy5fcmVxdWVzdElkID0gbnVsbDtcblxuICAgICAgICBpZiAoX3RoaXMuc3RhcnRlZClcbiAgICAgICAge1xuICAgICAgICAgICAgLy8gSW52b2tlIGxpc3RlbmVycyBub3dcbiAgICAgICAgICAgIF90aGlzLnVwZGF0ZSh0aW1lKTtcbiAgICAgICAgICAgIC8vIExpc3RlbmVyIHNpZGUgZWZmZWN0cyBtYXkgaGF2ZSBtb2RpZmllZCB0aWNrZXIgc3RhdGUuXG4gICAgICAgICAgICBpZiAoX3RoaXMuc3RhcnRlZCAmJiBfdGhpcy5fcmVxdWVzdElkID09PSBudWxsICYmIF90aGlzLl9lbWl0dGVyLmxpc3RlbmVycyhUSUNLLCB0cnVlKSlcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBfdGhpcy5fcmVxdWVzdElkID0gcmVxdWVzdEFuaW1hdGlvbkZyYW1lKF90aGlzLl90aWNrKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH07XG5cbiAgICAvKipcbiAgICAgKiBJbnRlcm5hbCBlbWl0dGVyIHVzZWQgdG8gZmlyZSAndGljaycgZXZlbnRcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX2VtaXR0ZXIgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgICAvKipcbiAgICAgKiBJbnRlcm5hbCBjdXJyZW50IGZyYW1lIHJlcXVlc3QgSURcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX3JlcXVlc3RJZCA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBJbnRlcm5hbCB2YWx1ZSBtYW5hZ2VkIGJ5IG1pbkZQUyBwcm9wZXJ0eSBzZXR0ZXIgYW5kIGdldHRlci5cbiAgICAgKiBUaGlzIGlzIHRoZSBtYXhpbXVtIGFsbG93ZWQgbWlsbGlzZWNvbmRzIGJldHdlZW4gdXBkYXRlcy5cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX21heEVsYXBzZWRNUyA9IDEwMDtcblxuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgb3Igbm90IHRoaXMgdGlja2VyIHNob3VsZCBpbnZva2UgdGhlIG1ldGhvZFxuICAgICAqIHtAbGluayBQSVhJLnRpY2tlci5UaWNrZXIjc3RhcnR9IGF1dG9tYXRpY2FsbHlcbiAgICAgKiB3aGVuIGEgbGlzdGVuZXIgaXMgYWRkZWQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqIEBkZWZhdWx0IGZhbHNlXG4gICAgICovXG4gICAgdGhpcy5hdXRvU3RhcnQgPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIFNjYWxhciB0aW1lIHZhbHVlIGZyb20gbGFzdCBmcmFtZSB0byB0aGlzIGZyYW1lLlxuICAgICAqIFRoaXMgdmFsdWUgaXMgY2FwcGVkIGJ5IHNldHRpbmcge0BsaW5rIFBJWEkudGlja2VyLlRpY2tlciNtaW5GUFN9XG4gICAgICogYW5kIGlzIHNjYWxlZCB3aXRoIHtAbGluayBQSVhJLnRpY2tlci5UaWNrZXIjc3BlZWR9LlxuICAgICAqICoqTm90ZToqKiBUaGUgY2FwIG1heSBiZSBleGNlZWRlZCBieSBzY2FsaW5nLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDFcbiAgICAgKi9cbiAgICB0aGlzLmRlbHRhVGltZSA9IDE7XG5cbiAgICAvKipcbiAgICAgKiBUaW1lIGVsYXBzZWQgaW4gbWlsbGlzZWNvbmRzIGZyb20gbGFzdCBmcmFtZSB0byB0aGlzIGZyYW1lLlxuICAgICAqIE9wcG9zZWQgdG8gd2hhdCB0aGUgc2NhbGFyIHtAbGluayBQSVhJLnRpY2tlci5UaWNrZXIjZGVsdGFUaW1lfVxuICAgICAqIGlzIGJhc2VkLCB0aGlzIHZhbHVlIGlzIG5laXRoZXIgY2FwcGVkIG5vciBzY2FsZWQuXG4gICAgICogSWYgdGhlIHBsYXRmb3JtIHN1cHBvcnRzIERPTUhpZ2hSZXNUaW1lU3RhbXAsXG4gICAgICogdGhpcyB2YWx1ZSB3aWxsIGhhdmUgYSBwcmVjaXNpb24gb2YgMSDCtXMuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtET01IaWdoUmVzVGltZVN0YW1wfG51bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAxIC8gVEFSR0VUX0ZQTVNcbiAgICAgKi9cbiAgICB0aGlzLmVsYXBzZWRNUyA9IDEgLyBDT05TVC5UQVJHRVRfRlBNUzsgLy8gZGVmYXVsdCB0byB0YXJnZXQgZnJhbWUgdGltZVxuXG4gICAgLyoqXG4gICAgICogVGhlIGxhc3QgdGltZSB7QGxpbmsgUElYSS50aWNrZXIuVGlja2VyI3VwZGF0ZX0gd2FzIGludm9rZWQuXG4gICAgICogVGhpcyB2YWx1ZSBpcyBhbHNvIHJlc2V0IGludGVybmFsbHkgb3V0c2lkZSBvZiBpbnZva2luZ1xuICAgICAqIHVwZGF0ZSwgYnV0IG9ubHkgd2hlbiBhIG5ldyBhbmltYXRpb24gZnJhbWUgaXMgcmVxdWVzdGVkLlxuICAgICAqIElmIHRoZSBwbGF0Zm9ybSBzdXBwb3J0cyBET01IaWdoUmVzVGltZVN0YW1wLFxuICAgICAqIHRoaXMgdmFsdWUgd2lsbCBoYXZlIGEgcHJlY2lzaW9uIG9mIDEgwrVzLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7RE9NSGlnaFJlc1RpbWVTdGFtcHxudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMFxuICAgICAqL1xuICAgIHRoaXMubGFzdFRpbWUgPSAwO1xuXG4gICAgLyoqXG4gICAgICogRmFjdG9yIG9mIGN1cnJlbnQge0BsaW5rIFBJWEkudGlja2VyLlRpY2tlciNkZWx0YVRpbWV9LlxuICAgICAqIEBleGFtcGxlXG4gICAgICogLy8gU2NhbGVzIHRpY2tlci5kZWx0YVRpbWUgdG8gd2hhdCB3b3VsZCBiZVxuICAgICAqIC8vIHRoZSBlcXVpdmFsZW50IG9mIGFwcHJveGltYXRlbHkgMTIwIEZQU1xuICAgICAqIHRpY2tlci5zcGVlZCA9IDI7XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMVxuICAgICAqL1xuICAgIHRoaXMuc3BlZWQgPSAxO1xuXG4gICAgLyoqXG4gICAgICogV2hldGhlciBvciBub3QgdGhpcyB0aWNrZXIgaGFzIGJlZW4gc3RhcnRlZC5cbiAgICAgKiBgdHJ1ZWAgaWYge0BsaW5rIFBJWEkudGlja2VyLlRpY2tlciNzdGFydH0gaGFzIGJlZW4gY2FsbGVkLlxuICAgICAqIGBmYWxzZWAgaWYge0BsaW5rIFBJWEkudGlja2VyLlRpY2tlciNzdG9wfSBoYXMgYmVlbiBjYWxsZWQuXG4gICAgICogV2hpbGUgYGZhbHNlYCwgdGhpcyB2YWx1ZSBtYXkgY2hhbmdlIHRvIGB0cnVlYCBpbiB0aGVcbiAgICAgKiBldmVudCBvZiB7QGxpbmsgUElYSS50aWNrZXIuVGlja2VyI2F1dG9TdGFydH0gYmVpbmcgYHRydWVgXG4gICAgICogYW5kIGEgbGlzdGVuZXIgaXMgYWRkZWQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqIEBkZWZhdWx0IGZhbHNlXG4gICAgICovXG4gICAgdGhpcy5zdGFydGVkID0gZmFsc2U7XG59XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKFRpY2tlci5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBUaGUgZnJhbWVzIHBlciBzZWNvbmQgYXQgd2hpY2ggdGhpcyB0aWNrZXIgaXMgcnVubmluZy5cbiAgICAgKiBUaGUgZGVmYXVsdCBpcyBhcHByb3hpbWF0ZWx5IDYwIGluIG1vc3QgbW9kZXJuIGJyb3dzZXJzLlxuICAgICAqICoqTm90ZToqKiBUaGlzIGRvZXMgbm90IGZhY3RvciBpbiB0aGUgdmFsdWUgb2ZcbiAgICAgKiB7QGxpbmsgUElYSS50aWNrZXIuVGlja2VyI3NwZWVkfSwgd2hpY2ggaXMgc3BlY2lmaWNcbiAgICAgKiB0byBzY2FsaW5nIHtAbGluayBQSVhJLnRpY2tlci5UaWNrZXIjZGVsdGFUaW1lfS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXJcbiAgICAgKiBAbWVtYmVyb2YgUElYSS50aWNrZXIuVGlja2VyI1xuICAgICAqIEByZWFkb25seVxuICAgICAqL1xuICAgIEZQUzoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIDEwMDAgLyB0aGlzLmVsYXBzZWRNUztcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBNYW5hZ2VzIHRoZSBtYXhpbXVtIGFtb3VudCBvZiBtaWxsaXNlY29uZHMgYWxsb3dlZCB0b1xuICAgICAqIGVsYXBzZSBiZXR3ZWVuIGludm9raW5nIHtAbGluayBQSVhJLnRpY2tlci5UaWNrZXIjdXBkYXRlfS5cbiAgICAgKiBUaGlzIHZhbHVlIGlzIHVzZWQgdG8gY2FwIHtAbGluayBQSVhJLnRpY2tlci5UaWNrZXIjZGVsdGFUaW1lfSxcbiAgICAgKiBidXQgZG9lcyBub3QgZWZmZWN0IHRoZSBtZWFzdXJlZCB2YWx1ZSBvZiB7QGxpbmsgUElYSS50aWNrZXIuVGlja2VyI0ZQU30uXG4gICAgICogV2hlbiBzZXR0aW5nIHRoaXMgcHJvcGVydHkgaXQgaXMgY2xhbXBlZCB0byBhIHZhbHVlIGJldHdlZW5cbiAgICAgKiBgMGAgYW5kIGBQSVhJLlRBUkdFVF9GUE1TICogMTAwMGAuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyXG4gICAgICogQG1lbWJlcm9mIFBJWEkudGlja2VyLlRpY2tlciNcbiAgICAgKiBAZGVmYXVsdCAxMFxuICAgICAqL1xuICAgIG1pbkZQUzoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIDEwMDAgLyB0aGlzLl9tYXhFbGFwc2VkTVM7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24oZnBzKVxuICAgICAgICB7XG4gICAgICAgICAgICAvLyBDbGFtcDogMCB0byBUQVJHRVRfRlBNU1xuICAgICAgICAgICAgdmFyIG1pbkZQTVMgPSBNYXRoLm1pbihNYXRoLm1heCgwLCBmcHMpIC8gMTAwMCwgQ09OU1QuVEFSR0VUX0ZQTVMpO1xuICAgICAgICAgICAgdGhpcy5fbWF4RWxhcHNlZE1TID0gMSAvIG1pbkZQTVM7XG4gICAgICAgIH1cbiAgICB9XG59KTtcblxuLyoqXG4gKiBDb25kaXRpb25hbGx5IHJlcXVlc3RzIGEgbmV3IGFuaW1hdGlvbiBmcmFtZS5cbiAqIElmIGEgZnJhbWUgaGFzIG5vdCBhbHJlYWR5IGJlZW4gcmVxdWVzdGVkLCBhbmQgaWYgdGhlIGludGVybmFsXG4gKiBlbWl0dGVyIGhhcyBsaXN0ZW5lcnMsIGEgbmV3IGZyYW1lIGlzIHJlcXVlc3RlZC5cbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5UaWNrZXIucHJvdG90eXBlLl9yZXF1ZXN0SWZOZWVkZWQgPSBmdW5jdGlvbiBfcmVxdWVzdElmTmVlZGVkKClcbntcbiAgICBpZiAodGhpcy5fcmVxdWVzdElkID09PSBudWxsICYmIHRoaXMuX2VtaXR0ZXIubGlzdGVuZXJzKFRJQ0ssIHRydWUpKVxuICAgIHtcbiAgICAgICAgLy8gZW5zdXJlIGNhbGxiYWNrcyBnZXQgY29ycmVjdCBkZWx0YVxuICAgICAgICB0aGlzLmxhc3RUaW1lID0gcGVyZm9ybWFuY2Uubm93KCk7XG4gICAgICAgIHRoaXMuX3JlcXVlc3RJZCA9IHJlcXVlc3RBbmltYXRpb25GcmFtZSh0aGlzLl90aWNrKTtcbiAgICB9XG59O1xuXG4vKipcbiAqIENvbmRpdGlvbmFsbHkgY2FuY2VscyBhIHBlbmRpbmcgYW5pbWF0aW9uIGZyYW1lLlxuICpcbiAqIEBwcml2YXRlXG4gKi9cblRpY2tlci5wcm90b3R5cGUuX2NhbmNlbElmTmVlZGVkID0gZnVuY3Rpb24gX2NhbmNlbElmTmVlZGVkKClcbntcbiAgICBpZiAodGhpcy5fcmVxdWVzdElkICE9PSBudWxsKVxuICAgIHtcbiAgICAgICAgY2FuY2VsQW5pbWF0aW9uRnJhbWUodGhpcy5fcmVxdWVzdElkKTtcbiAgICAgICAgdGhpcy5fcmVxdWVzdElkID0gbnVsbDtcbiAgICB9XG59O1xuXG4vKipcbiAqIENvbmRpdGlvbmFsbHkgcmVxdWVzdHMgYSBuZXcgYW5pbWF0aW9uIGZyYW1lLlxuICogSWYgdGhlIHRpY2tlciBoYXMgYmVlbiBzdGFydGVkIGl0IGNoZWNrcyBpZiBhIGZyYW1lIGhhcyBub3QgYWxyZWFkeVxuICogYmVlbiByZXF1ZXN0ZWQsIGFuZCBpZiB0aGUgaW50ZXJuYWwgZW1pdHRlciBoYXMgbGlzdGVuZXJzLiBJZiB0aGVzZVxuICogY29uZGl0aW9ucyBhcmUgbWV0LCBhIG5ldyBmcmFtZSBpcyByZXF1ZXN0ZWQuIElmIHRoZSB0aWNrZXIgaGFzIG5vdFxuICogYmVlbiBzdGFydGVkLCBidXQgYXV0b1N0YXJ0IGlzIGB0cnVlYCwgdGhlbiB0aGUgdGlja2VyIHN0YXJ0cyBub3csXG4gKiBhbmQgY29udGludWVzIHdpdGggdGhlIHByZXZpb3VzIGNvbmRpdGlvbnMgdG8gcmVxdWVzdCBhIG5ldyBmcmFtZS5cbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5UaWNrZXIucHJvdG90eXBlLl9zdGFydElmUG9zc2libGUgPSBmdW5jdGlvbiBfc3RhcnRJZlBvc3NpYmxlKClcbntcbiAgICBpZiAodGhpcy5zdGFydGVkKVxuICAgIHtcbiAgICAgICAgdGhpcy5fcmVxdWVzdElmTmVlZGVkKCk7XG4gICAgfVxuICAgIGVsc2UgaWYgKHRoaXMuYXV0b1N0YXJ0KVxuICAgIHtcbiAgICAgICAgdGhpcy5zdGFydCgpO1xuICAgIH1cbn07XG5cbi8qKlxuICogQ2FsbHMge0BsaW5rIG1vZHVsZTpldmVudGVtaXR0ZXIzLkV2ZW50RW1pdHRlciNvbn0gaW50ZXJuYWxseSBmb3IgdGhlXG4gKiBpbnRlcm5hbCAndGljaycgZXZlbnQuIEl0IGNoZWNrcyBpZiB0aGUgZW1pdHRlciBoYXMgbGlzdGVuZXJzLFxuICogYW5kIGlmIHNvIGl0IHJlcXVlc3RzIGEgbmV3IGFuaW1hdGlvbiBmcmFtZSBhdCB0aGlzIHBvaW50LlxuICpcbiAqIEBwYXJhbSBmbiB7RnVuY3Rpb259IFRoZSBsaXN0ZW5lciBmdW5jdGlvbiB0byBiZSBhZGRlZCBmb3IgdXBkYXRlc1xuICogQHBhcmFtIFtjb250ZXh0XSB7RnVuY3Rpb259IFRoZSBsaXN0ZW5lciBjb250ZXh0XG4gKiBAcmV0dXJucyB7UElYSS50aWNrZXIuVGlja2VyfSB0aGlzXG4gKi9cblRpY2tlci5wcm90b3R5cGUuYWRkID0gZnVuY3Rpb24gYWRkKGZuLCBjb250ZXh0KVxue1xuICAgIHRoaXMuX2VtaXR0ZXIub24oVElDSywgZm4sIGNvbnRleHQpO1xuXG4gICAgdGhpcy5fc3RhcnRJZlBvc3NpYmxlKCk7XG5cbiAgICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogQ2FsbHMge0BsaW5rIG1vZHVsZTpldmVudGVtaXR0ZXIzLkV2ZW50RW1pdHRlciNvbmNlfSBpbnRlcm5hbGx5IGZvciB0aGVcbiAqIGludGVybmFsICd0aWNrJyBldmVudC4gSXQgY2hlY2tzIGlmIHRoZSBlbWl0dGVyIGhhcyBsaXN0ZW5lcnMsXG4gKiBhbmQgaWYgc28gaXQgcmVxdWVzdHMgYSBuZXcgYW5pbWF0aW9uIGZyYW1lIGF0IHRoaXMgcG9pbnQuXG4gKlxuICogQHBhcmFtIGZuIHtGdW5jdGlvbn0gVGhlIGxpc3RlbmVyIGZ1bmN0aW9uIHRvIGJlIGFkZGVkIGZvciBvbmUgdXBkYXRlXG4gKiBAcGFyYW0gW2NvbnRleHRdIHtGdW5jdGlvbn0gVGhlIGxpc3RlbmVyIGNvbnRleHRcbiAqIEByZXR1cm5zIHtQSVhJLnRpY2tlci5UaWNrZXJ9IHRoaXNcbiAqL1xuVGlja2VyLnByb3RvdHlwZS5hZGRPbmNlID0gZnVuY3Rpb24gYWRkT25jZShmbiwgY29udGV4dClcbntcbiAgICB0aGlzLl9lbWl0dGVyLm9uY2UoVElDSywgZm4sIGNvbnRleHQpO1xuXG4gICAgdGhpcy5fc3RhcnRJZlBvc3NpYmxlKCk7XG5cbiAgICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogQ2FsbHMge0BsaW5rIG1vZHVsZTpldmVudGVtaXR0ZXIzLkV2ZW50RW1pdHRlciNvZmZ9IGludGVybmFsbHkgZm9yICd0aWNrJyBldmVudC5cbiAqIEl0IGNoZWNrcyBpZiB0aGUgZW1pdHRlciBoYXMgbGlzdGVuZXJzIGZvciAndGljaycgZXZlbnQuXG4gKiBJZiBpdCBkb2VzLCB0aGVuIGl0IGNhbmNlbHMgdGhlIGFuaW1hdGlvbiBmcmFtZS5cbiAqXG4gKiBAcGFyYW0gW2ZuXSB7RnVuY3Rpb259IFRoZSBsaXN0ZW5lciBmdW5jdGlvbiB0byBiZSByZW1vdmVkXG4gKiBAcGFyYW0gW2NvbnRleHRdIHtGdW5jdGlvbn0gVGhlIGxpc3RlbmVyIGNvbnRleHQgdG8gYmUgcmVtb3ZlZFxuICogQHJldHVybnMge1BJWEkudGlja2VyLlRpY2tlcn0gdGhpc1xuICovXG5UaWNrZXIucHJvdG90eXBlLnJlbW92ZSA9IGZ1bmN0aW9uIHJlbW92ZShmbiwgY29udGV4dClcbntcbiAgICB0aGlzLl9lbWl0dGVyLm9mZihUSUNLLCBmbiwgY29udGV4dCk7XG5cbiAgICBpZiAoIXRoaXMuX2VtaXR0ZXIubGlzdGVuZXJzKFRJQ0ssIHRydWUpKVxuICAgIHtcbiAgICAgICAgdGhpcy5fY2FuY2VsSWZOZWVkZWQoKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogU3RhcnRzIHRoZSB0aWNrZXIuIElmIHRoZSB0aWNrZXIgaGFzIGxpc3RlbmVyc1xuICogYSBuZXcgYW5pbWF0aW9uIGZyYW1lIGlzIHJlcXVlc3RlZCBhdCB0aGlzIHBvaW50LlxuICovXG5UaWNrZXIucHJvdG90eXBlLnN0YXJ0ID0gZnVuY3Rpb24gc3RhcnQoKVxue1xuICAgIGlmICghdGhpcy5zdGFydGVkKVxuICAgIHtcbiAgICAgICAgdGhpcy5zdGFydGVkID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5fcmVxdWVzdElmTmVlZGVkKCk7XG4gICAgfVxufTtcblxuLyoqXG4gKiBTdG9wcyB0aGUgdGlja2VyLiBJZiB0aGUgdGlja2VyIGhhcyByZXF1ZXN0ZWRcbiAqIGFuIGFuaW1hdGlvbiBmcmFtZSBpdCBpcyBjYW5jZWxlZCBhdCB0aGlzIHBvaW50LlxuICovXG5UaWNrZXIucHJvdG90eXBlLnN0b3AgPSBmdW5jdGlvbiBzdG9wKClcbntcbiAgICBpZiAodGhpcy5zdGFydGVkKVxuICAgIHtcbiAgICAgICAgdGhpcy5zdGFydGVkID0gZmFsc2U7XG4gICAgICAgIHRoaXMuX2NhbmNlbElmTmVlZGVkKCk7XG4gICAgfVxufTtcblxuLyoqXG4gKiBUcmlnZ2VycyBhbiB1cGRhdGUuIEFuIHVwZGF0ZSBlbnRhaWxzIHNldHRpbmcgdGhlXG4gKiBjdXJyZW50IHtAbGluayBQSVhJLnRpY2tlci5UaWNrZXIjZWxhcHNlZE1TfSxcbiAqIHRoZSBjdXJyZW50IHtAbGluayBQSVhJLnRpY2tlci5UaWNrZXIjZGVsdGFUaW1lfSxcbiAqIGludm9raW5nIGFsbCBsaXN0ZW5lcnMgd2l0aCBjdXJyZW50IGRlbHRhVGltZSxcbiAqIGFuZCB0aGVuIGZpbmFsbHkgc2V0dGluZyB7QGxpbmsgUElYSS50aWNrZXIuVGlja2VyI2xhc3RUaW1lfVxuICogd2l0aCB0aGUgdmFsdWUgb2YgY3VycmVudFRpbWUgdGhhdCB3YXMgcHJvdmlkZWQuXG4gKiBUaGlzIG1ldGhvZCB3aWxsIGJlIGNhbGxlZCBhdXRvbWF0aWNhbGx5IGJ5IGFuaW1hdGlvblxuICogZnJhbWUgY2FsbGJhY2tzIGlmIHRoZSB0aWNrZXIgaW5zdGFuY2UgaGFzIGJlZW4gc3RhcnRlZFxuICogYW5kIGxpc3RlbmVycyBhcmUgYWRkZWQuXG4gKlxuICogQHBhcmFtIFtjdXJyZW50VGltZT1wZXJmb3JtYW5jZS5ub3coKV0ge0RPTUhpZ2hSZXNUaW1lU3RhbXB8bnVtYmVyfSB0aGUgY3VycmVudCB0aW1lIG9mIGV4ZWN1dGlvblxuICovXG5UaWNrZXIucHJvdG90eXBlLnVwZGF0ZSA9IGZ1bmN0aW9uIHVwZGF0ZShjdXJyZW50VGltZSlcbntcbiAgICB2YXIgZWxhcHNlZE1TO1xuXG4gICAgLy8gQWxsb3cgY2FsbGluZyB1cGRhdGUgZGlyZWN0bHkgd2l0aCBkZWZhdWx0IGN1cnJlbnRUaW1lLlxuICAgIGN1cnJlbnRUaW1lID0gY3VycmVudFRpbWUgfHwgcGVyZm9ybWFuY2Uubm93KCk7XG4gICAgLy8gU2F2ZSB1bmNhcHBlZCBlbGFwc2VkTVMgZm9yIG1lYXN1cmVtZW50XG4gICAgZWxhcHNlZE1TID0gdGhpcy5lbGFwc2VkTVMgPSBjdXJyZW50VGltZSAtIHRoaXMubGFzdFRpbWU7XG5cbiAgICAvLyBjYXAgdGhlIG1pbGxpc2Vjb25kcyBlbGFwc2VkIHVzZWQgZm9yIGRlbHRhVGltZVxuICAgIGlmIChlbGFwc2VkTVMgPiB0aGlzLl9tYXhFbGFwc2VkTVMpXG4gICAge1xuICAgICAgICBlbGFwc2VkTVMgPSB0aGlzLl9tYXhFbGFwc2VkTVM7XG4gICAgfVxuXG4gICAgdGhpcy5kZWx0YVRpbWUgPSBlbGFwc2VkTVMgKiBDT05TVC5UQVJHRVRfRlBNUyAqIHRoaXMuc3BlZWQ7XG5cbiAgICAvLyBJbnZva2UgbGlzdGVuZXJzIGFkZGVkIHRvIGludGVybmFsIGVtaXR0ZXJcbiAgICB0aGlzLl9lbWl0dGVyLmVtaXQoVElDSywgdGhpcy5kZWx0YVRpbWUpO1xuXG4gICAgdGhpcy5sYXN0VGltZSA9IGN1cnJlbnRUaW1lO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBUaWNrZXI7XG4iLCJ2YXIgVGlja2VyID0gcmVxdWlyZSgnLi9UaWNrZXInKTtcblxuLyoqXG4gKiBUaGUgc2hhcmVkIHRpY2tlciBpbnN0YW5jZSB1c2VkIGJ5IHtAbGluayBQSVhJLmV4dHJhcy5Nb3ZpZUNsaXB9LlxuICogYW5kIGJ5IHtAbGluayBQSVhJLmludGVyYWN0aW9uLkludGVyYWN0aW9uTWFuYWdlcn0uXG4gKiBUaGUgcHJvcGVydHkge0BsaW5rIFBJWEkudGlja2VyLlRpY2tlciNhdXRvU3RhcnR9IGlzIHNldCB0byBgdHJ1ZWBcbiAqIGZvciB0aGlzIGluc3RhbmNlLiBQbGVhc2UgZm9sbG93IHRoZSBleGFtcGxlcyBmb3IgdXNhZ2UsIGluY2x1ZGluZ1xuICogaG93IHRvIG9wdC1vdXQgb2YgYXV0by1zdGFydGluZyB0aGUgc2hhcmVkIHRpY2tlci5cbiAqXG4gKiBAZXhhbXBsZVxuICogdmFyIHRpY2tlciA9IFBJWEkudGlja2VyLnNoYXJlZDtcbiAqIC8vIFNldCB0aGlzIHRvIHByZXZlbnQgc3RhcnRpbmcgdGhpcyB0aWNrZXIgd2hlbiBsaXN0ZW5lcnMgYXJlIGFkZGVkLlxuICogLy8gQnkgZGVmYXVsdCB0aGlzIGlzIHRydWUgb25seSBmb3IgdGhlIFBJWEkudGlja2VyLnNoYXJlZCBpbnN0YW5jZS5cbiAqIHRpY2tlci5hdXRvU3RhcnQgPSBmYWxzZTtcbiAqIC8vIEZZSSwgY2FsbCB0aGlzIHRvIGVuc3VyZSB0aGUgdGlja2VyIGlzIHN0b3BwZWQuIEl0IHNob3VsZCBiZSBzdG9wcGVkXG4gKiAvLyBpZiB5b3UgaGF2ZSBub3QgYXR0ZW1wdGVkIHRvIHJlbmRlciBhbnl0aGluZyB5ZXQuXG4gKiB0aWNrZXIuc3RvcCgpO1xuICogLy8gQ2FsbCB0aGlzIHdoZW4geW91IGFyZSByZWFkeSBmb3IgYSBydW5uaW5nIHNoYXJlZCB0aWNrZXIuXG4gKiB0aWNrZXIuc3RhcnQoKTtcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gWW91IG1heSB1c2UgdGhlIHNoYXJlZCB0aWNrZXIgdG8gcmVuZGVyLi4uXG4gKiB2YXIgcmVuZGVyZXIgPSBQSVhJLmF1dG9EZXRlY3RSZW5kZXJlcig4MDAsIDYwMCk7XG4gKiB2YXIgc3RhZ2UgPSBuZXcgUElYSS5Db250YWluZXIoKTtcbiAqIHZhciBpbnRlcmFjdGlvbk1hbmFnZXIgPSBQSVhJLmludGVyYWN0aW9uLkludGVyYWN0aW9uTWFuYWdlcihyZW5kZXJlcik7XG4gKiBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKHJlbmRlcmVyLnZpZXcpO1xuICogdGlja2VyLmFkZChmdW5jdGlvbiAodGltZSkge1xuICogICAgIHJlbmRlcmVyLnJlbmRlcihzdGFnZSk7XG4gKiB9KTtcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gT3IgeW91IGNhbiBqdXN0IHVwZGF0ZSBpdCBtYW51YWxseS5cbiAqIHRpY2tlci5hdXRvU3RhcnQgPSBmYWxzZTtcbiAqIHRpY2tlci5zdG9wKCk7XG4gKiBmdW5jdGlvbiBhbmltYXRlKHRpbWUpIHtcbiAqICAgICB0aWNrZXIudXBkYXRlKHRpbWUpO1xuICogICAgIHJlbmRlcmVyLnJlbmRlcihzdGFnZSk7XG4gKiAgICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKGFuaW1hdGUpO1xuICogfVxuICogYW5pbWF0ZShwZXJmb3JtYW5jZS5ub3coKSk7XG4gKlxuICogQHR5cGUge1BJWEkudGlja2VyLlRpY2tlcn1cbiAqIEBtZW1iZXJvZiBQSVhJLnRpY2tlclxuICovXG52YXIgc2hhcmVkID0gbmV3IFRpY2tlcigpO1xuc2hhcmVkLmF1dG9TdGFydCA9IHRydWU7XG5cbi8qKlxuICogQG5hbWVzcGFjZSBQSVhJLnRpY2tlclxuICovXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgICBzaGFyZWQ6IHNoYXJlZCxcbiAgICBUaWNrZXI6IFRpY2tlclxufTtcbiIsIi8qKlxuICogR2VuZXJpYyBNYXNrIFN0YWNrIGRhdGEgc3RydWN0dXJlXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKi9cblxudmFyIEdMX01BUCA9IHt9O1xuXG5cbnZhciBjcmVhdGVJbmRpY2VzRm9yUXVhZHMgPSBmdW5jdGlvbiAoc2l6ZSlcbntcbiAgICAvLyB0aGUgdG90YWwgbnVtYmVyIG9mIGluZGljZXMgaW4gb3VyIGFycmF5LCB0aGVyZSBhcmUgNiBwb2ludHMgcGVyIHF1YWQuXG4gICBcbiAgICB2YXIgdG90YWxJbmRpY2VzID0gc2l6ZSAqIDY7XG5cbiAgICB2YXIgaW5kaWNlcyA9IG5ldyBVaW50MTZBcnJheSh0b3RhbEluZGljZXMpO1xuXG5cdC8vIGZpbGwgdGhlIGluZGljZXMgd2l0aCB0aGUgcXVhZHMgdG8gZHJhd1xuICAgIGZvciAodmFyIGk9MCwgaj0wOyBpIDwgdG90YWxJbmRpY2VzOyBpICs9IDYsIGogKz0gNClcbiAgICB7XG4gICAgICAgIGluZGljZXNbaSArIDBdID0gaiArIDA7XG4gICAgICAgIGluZGljZXNbaSArIDFdID0gaiArIDE7XG4gICAgICAgIGluZGljZXNbaSArIDJdID0gaiArIDI7XG4gICAgICAgIGluZGljZXNbaSArIDNdID0gaiArIDA7XG4gICAgICAgIGluZGljZXNbaSArIDRdID0gaiArIDI7XG4gICAgICAgIGluZGljZXNbaSArIDVdID0gaiArIDM7XG4gICAgfVxuXG4gICAgcmV0dXJuIGluZGljZXM7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGNyZWF0ZUluZGljZXNGb3JRdWFkczsiLCJ2YXIgQ09OU1QgPSByZXF1aXJlKCcuLi9jb25zdCcpO1xuXG4vKipcbiAqIEBuYW1lc3BhY2UgUElYSS51dGlsc1xuICovXG52YXIgdXRpbHMgPSBtb2R1bGUuZXhwb3J0cyA9IHtcbiAgICBfdWlkOiAwLFxuICAgIF9zYWlkSGVsbG86IGZhbHNlLFxuXG4gICAgRXZlbnRFbWl0dGVyOiAgIHJlcXVpcmUoJ2V2ZW50ZW1pdHRlcjMnKSxcbiAgICBwbHVnaW5UYXJnZXQ6ICAgcmVxdWlyZSgnLi9wbHVnaW5UYXJnZXQnKSxcbiAgICBhc3luYzogICAgICAgICAgcmVxdWlyZSgnYXN5bmMnKSxcblxuICAgIC8qKlxuICAgICAqIEdldHMgdGhlIG5leHQgdW5pcXVlIGlkZW50aWZpZXJcbiAgICAgKlxuICAgICAqIEByZXR1cm4ge251bWJlcn0gVGhlIG5leHQgdW5pcXVlIGlkZW50aWZpZXIgdG8gdXNlLlxuICAgICAqL1xuICAgIHVpZDogZnVuY3Rpb24gKClcbiAgICB7XG4gICAgICAgIHJldHVybiArK3V0aWxzLl91aWQ7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIENvbnZlcnRzIGEgaGV4IGNvbG9yIG51bWJlciB0byBhbiBbUiwgRywgQl0gYXJyYXlcbiAgICAgKlxuICAgICAqIEBwYXJhbSBoZXgge251bWJlcn1cbiAgICAgKiBAcGFyYW0gIHtudW1iZXJbXX0gW291dD1bXV1cbiAgICAgKiBAcmV0dXJuIHtudW1iZXJbXX0gQW4gYXJyYXkgcmVwcmVzZW50aW5nIHRoZSBbUiwgRywgQl0gb2YgdGhlIGNvbG9yLlxuICAgICAqL1xuICAgIGhleDJyZ2I6IGZ1bmN0aW9uIChoZXgsIG91dClcbiAgICB7XG4gICAgICAgIG91dCA9IG91dCB8fCBbXTtcblxuICAgICAgICBvdXRbMF0gPSAoaGV4ID4+IDE2ICYgMHhGRikgLyAyNTU7XG4gICAgICAgIG91dFsxXSA9IChoZXggPj4gOCAmIDB4RkYpIC8gMjU1O1xuICAgICAgICBvdXRbMl0gPSAoaGV4ICYgMHhGRikgLyAyNTU7XG5cbiAgICAgICAgcmV0dXJuIG91dDtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQ29udmVydHMgYSBoZXggY29sb3IgbnVtYmVyIHRvIGEgc3RyaW5nLlxuICAgICAqXG4gICAgICogQHBhcmFtIGhleCB7bnVtYmVyfVxuICAgICAqIEByZXR1cm4ge3N0cmluZ30gVGhlIHN0cmluZyBjb2xvci5cbiAgICAgKi9cbiAgICBoZXgyc3RyaW5nOiBmdW5jdGlvbiAoaGV4KVxuICAgIHtcbiAgICAgICAgaGV4ID0gaGV4LnRvU3RyaW5nKDE2KTtcbiAgICAgICAgaGV4ID0gJzAwMDAwMCcuc3Vic3RyKDAsIDYgLSBoZXgubGVuZ3RoKSArIGhleDtcblxuICAgICAgICByZXR1cm4gJyMnICsgaGV4O1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBDb252ZXJ0cyBhIGNvbG9yIGFzIGFuIFtSLCBHLCBCXSBhcnJheSB0byBhIGhleCBudW1iZXJcbiAgICAgKlxuICAgICAqIEBwYXJhbSByZ2Ige251bWJlcltdfVxuICAgICAqIEByZXR1cm4ge251bWJlcn0gVGhlIGNvbG9yIG51bWJlclxuICAgICAqL1xuICAgIHJnYjJoZXg6IGZ1bmN0aW9uIChyZ2IpXG4gICAge1xuICAgICAgICByZXR1cm4gKChyZ2JbMF0qMjU1IDw8IDE2KSArIChyZ2JbMV0qMjU1IDw8IDgpICsgcmdiWzJdKjI1NSk7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIENoZWNrcyB3aGV0aGVyIHRoZSBDYW52YXMgQmxlbmRNb2RlcyBhcmUgc3VwcG9ydGVkIGJ5IHRoZSBjdXJyZW50IGJyb3dzZXJcbiAgICAgKlxuICAgICAqIEByZXR1cm4ge2Jvb2xlYW59IHdoZXRoZXIgdGhleSBhcmUgc3VwcG9ydGVkXG4gICAgICovXG4gICAgY2FuVXNlTmV3Q2FudmFzQmxlbmRNb2RlczogZnVuY3Rpb24gKClcbiAgICB7XG4gICAgICAgIGlmICh0eXBlb2YgZG9jdW1lbnQgPT09ICd1bmRlZmluZWQnKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgcG5nSGVhZCA9ICdkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQUFRQUFBQUJBUU1BQUFERDhwMk9BQUFBQTFCTVZFWC8nO1xuICAgICAgICB2YXIgcG5nRW5kID0gJ0FBQUFDa2xFUVZRSTEyTmdBQUFBQWdBQjRpRzhNd0FBQUFCSlJVNUVya0pnZ2c9PSc7XG5cbiAgICAgICAgdmFyIG1hZ2VudGEgPSBuZXcgSW1hZ2UoKTtcbiAgICAgICAgbWFnZW50YS5zcmMgPSBwbmdIZWFkICsgJ0FQODA0T2E2JyArIHBuZ0VuZDtcblxuICAgICAgICB2YXIgeWVsbG93ID0gbmV3IEltYWdlKCk7XG4gICAgICAgIHllbGxvdy5zcmMgPSBwbmdIZWFkICsgJy93Q0t4dlJGJyArIHBuZ0VuZDtcblxuICAgICAgICB2YXIgY2FudmFzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnY2FudmFzJyk7XG4gICAgICAgIGNhbnZhcy53aWR0aCA9IDY7XG4gICAgICAgIGNhbnZhcy5oZWlnaHQgPSAxO1xuXG4gICAgICAgIHZhciBjb250ZXh0ID0gY2FudmFzLmdldENvbnRleHQoJzJkJyk7XG4gICAgICAgIGNvbnRleHQuZ2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uID0gJ211bHRpcGx5JztcbiAgICAgICAgY29udGV4dC5kcmF3SW1hZ2UobWFnZW50YSwgMCwgMCk7XG4gICAgICAgIGNvbnRleHQuZHJhd0ltYWdlKHllbGxvdywgMiwgMCk7XG5cbiAgICAgICAgdmFyIGRhdGEgPSBjb250ZXh0LmdldEltYWdlRGF0YSgyLDAsMSwxKS5kYXRhO1xuXG4gICAgICAgIHJldHVybiAoZGF0YVswXSA9PT0gMjU1ICYmIGRhdGFbMV0gPT09IDAgJiYgZGF0YVsyXSA9PT0gMCk7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIEdpdmVuIGEgbnVtYmVyLCB0aGlzIGZ1bmN0aW9uIHJldHVybnMgdGhlIGNsb3Nlc3QgbnVtYmVyIHRoYXQgaXMgYSBwb3dlciBvZiB0d29cbiAgICAgKiB0aGlzIGZ1bmN0aW9uIGlzIHRha2VuIGZyb20gU3RhcmxpbmcgRnJhbWV3b3JrIGFzIGl0cyBwcmV0dHkgbmVhdCA7KVxuICAgICAqXG4gICAgICogQHBhcmFtIG51bWJlciB7bnVtYmVyfVxuICAgICAqIEByZXR1cm4ge251bWJlcn0gdGhlIGNsb3Nlc3QgbnVtYmVyIHRoYXQgaXMgYSBwb3dlciBvZiB0d29cbiAgICAgKi9cbiAgICBnZXROZXh0UG93ZXJPZlR3bzogZnVuY3Rpb24gKG51bWJlcilcbiAgICB7XG4gICAgICAgIC8vIHNlZTogaHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9Qb3dlcl9vZl90d28jRmFzdF9hbGdvcml0aG1fdG9fY2hlY2tfaWZfYV9wb3NpdGl2ZV9udW1iZXJfaXNfYV9wb3dlcl9vZl90d29cbiAgICAgICAgaWYgKG51bWJlciA+IDAgJiYgKG51bWJlciAmIChudW1iZXIgLSAxKSkgPT09IDApXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiBudW1iZXI7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgICB2YXIgcmVzdWx0ID0gMTtcblxuICAgICAgICAgICAgd2hpbGUgKHJlc3VsdCA8IG51bWJlcilcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICByZXN1bHQgPDw9IDE7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogY2hlY2tzIGlmIHRoZSBnaXZlbiB3aWR0aCBhbmQgaGVpZ2h0IG1ha2UgYSBwb3dlciBvZiB0d28gcmVjdGFuZ2xlXG4gICAgICpcbiAgICAgKiBAcGFyYW0gd2lkdGgge251bWJlcn1cbiAgICAgKiBAcGFyYW0gaGVpZ2h0IHtudW1iZXJ9XG4gICAgICogQHJldHVybiB7Ym9vbGVhbn1cbiAgICAgKi9cbiAgICBpc1Bvd2VyT2ZUd286IGZ1bmN0aW9uICh3aWR0aCwgaGVpZ2h0KVxuICAgIHtcbiAgICAgICAgcmV0dXJuICh3aWR0aCA+IDAgJiYgKHdpZHRoICYgKHdpZHRoIC0gMSkpID09PSAwICYmIGhlaWdodCA+IDAgJiYgKGhlaWdodCAmIChoZWlnaHQgLSAxKSkgPT09IDApO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBnZXQgdGhlIHJlc29sdXRpb24gb2YgYW4gYXNzZXQgYnkgbG9va2luZyBmb3IgdGhlIHByZWZpeFxuICAgICAqIHVzZWQgYnkgc3ByaXRlc2hlZXRzIGFuZCBpbWFnZSB1cmxzXG4gICAgICpcbiAgICAgKiBAcGFyYW0gdXJsIHtzdHJpbmd9IHRoZSBpbWFnZSBwYXRoXG4gICAgICogQHJldHVybiB7bnVtYmVyfVxuICAgICAqL1xuICAgIGdldFJlc29sdXRpb25PZlVybDogZnVuY3Rpb24gKHVybClcbiAgICB7XG4gICAgICAgIHZhciByZXNvbHV0aW9uID0gQ09OU1QuUkVUSU5BX1BSRUZJWC5leGVjKHVybCk7XG5cbiAgICAgICAgaWYgKHJlc29sdXRpb24pXG4gICAgICAgIHtcbiAgICAgICAgICAgcmV0dXJuIHBhcnNlRmxvYXQocmVzb2x1dGlvblsxXSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gMTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogTG9ncyBvdXQgdGhlIHZlcnNpb24gYW5kIHJlbmRlcmVyIGluZm9ybWF0aW9uIGZvciB0aGlzIHJ1bm5pbmcgaW5zdGFuY2Ugb2YgUElYSS5cbiAgICAgKiBJZiB5b3UgZG9uJ3Qgd2FudCB0byBzZWUgdGhpcyBtZXNzYWdlIHlvdSBjYW4gc2V0IGBQSVhJLnV0aWxzLl9zYWlkSGVsbG8gPSB0cnVlO2BcbiAgICAgKiBzbyB0aGUgbGlicmFyeSB0aGlua3MgaXQgYWxyZWFkeSBzYWlkIGl0LiBLZWVwIGluIG1pbmQgdGhhdCBkb2luZyB0aGF0IHdpbGwgZm9yZXZlclxuICAgICAqIG1ha2VzIHlvdSBhIGplcmsgZmFjZS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSB0eXBlIC0gVGhlIHN0cmluZyByZW5kZXJlciB0eXBlIHRvIGxvZy5cbiAgICAgKiBAY29uc3RhbnRcbiAgICAgKiBAc3RhdGljXG4gICAgICovXG4gICAgc2F5SGVsbG86IGZ1bmN0aW9uICh0eXBlKVxuICAgIHtcbiAgICAgICAgaWYgKHV0aWxzLl9zYWlkSGVsbG8pXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChuYXZpZ2F0b3IudXNlckFnZW50LnRvTG93ZXJDYXNlKCkuaW5kZXhPZignY2hyb21lJykgPiAtMSlcbiAgICAgICAge1xuICAgICAgICAgICAgdmFyIGFyZ3MgPSBbXG4gICAgICAgICAgICAgICAgJ1xcbiAlYyAlYyAlYyBQaXhpLmpzICcgKyBDT05TVC5WRVJTSU9OICsgJyAtIOKcsCAnICsgdHlwZSArICcg4pywICAlYyAnICsgJyAlYyAnICsgJyBodHRwOi8vd3d3LnBpeGlqcy5jb20vICAlYyAlYyDimaUlY+KZpSVj4pmlIFxcblxcbicsXG4gICAgICAgICAgICAgICAgJ2JhY2tncm91bmQ6ICNmZjY2YTU7IHBhZGRpbmc6NXB4IDA7JyxcbiAgICAgICAgICAgICAgICAnYmFja2dyb3VuZDogI2ZmNjZhNTsgcGFkZGluZzo1cHggMDsnLFxuICAgICAgICAgICAgICAgICdjb2xvcjogI2ZmNjZhNTsgYmFja2dyb3VuZDogIzAzMDMwNzsgcGFkZGluZzo1cHggMDsnLFxuICAgICAgICAgICAgICAgICdiYWNrZ3JvdW5kOiAjZmY2NmE1OyBwYWRkaW5nOjVweCAwOycsXG4gICAgICAgICAgICAgICAgJ2JhY2tncm91bmQ6ICNmZmMzZGM7IHBhZGRpbmc6NXB4IDA7JyxcbiAgICAgICAgICAgICAgICAnYmFja2dyb3VuZDogI2ZmNjZhNTsgcGFkZGluZzo1cHggMDsnLFxuICAgICAgICAgICAgICAgICdjb2xvcjogI2ZmMjQyNDsgYmFja2dyb3VuZDogI2ZmZjsgcGFkZGluZzo1cHggMDsnLFxuICAgICAgICAgICAgICAgICdjb2xvcjogI2ZmMjQyNDsgYmFja2dyb3VuZDogI2ZmZjsgcGFkZGluZzo1cHggMDsnLFxuICAgICAgICAgICAgICAgICdjb2xvcjogI2ZmMjQyNDsgYmFja2dyb3VuZDogI2ZmZjsgcGFkZGluZzo1cHggMDsnXG4gICAgICAgICAgICBdO1xuXG4gICAgICAgICAgICB3aW5kb3cuY29uc29sZS5sb2cuYXBwbHkoY29uc29sZSwgYXJncyk7IC8vanNoaW50IGlnbm9yZTpsaW5lXG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAod2luZG93LmNvbnNvbGUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHdpbmRvdy5jb25zb2xlLmxvZygnUGl4aS5qcyAnICsgQ09OU1QuVkVSU0lPTiArICcgLSAnICsgdHlwZSArICcgLSBodHRwOi8vd3d3LnBpeGlqcy5jb20vJyk7IC8vanNoaW50IGlnbm9yZTpsaW5lXG4gICAgICAgIH1cblxuICAgICAgICB1dGlscy5fc2FpZEhlbGxvID0gdHJ1ZTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogSGVscGVyIGZvciBjaGVja2luZyBmb3Igd2ViZ2wgc3VwcG9ydFxuICAgICAqXG4gICAgICogQHJldHVybiB7Ym9vbGVhbn1cbiAgICAgKi9cbiAgICBpc1dlYkdMU3VwcG9ydGVkOiBmdW5jdGlvbiAoKVxuICAgIHtcbiAgICAgICAgdmFyIGNvbnRleHRPcHRpb25zID0geyBzdGVuY2lsOiB0cnVlIH07XG4gICAgICAgIHRyeVxuICAgICAgICB7XG4gICAgICAgICAgICBpZiAoIXdpbmRvdy5XZWJHTFJlbmRlcmluZ0NvbnRleHQpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB2YXIgY2FudmFzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnY2FudmFzJyksXG4gICAgICAgICAgICAgICAgZ2wgPSBjYW52YXMuZ2V0Q29udGV4dCgnd2ViZ2wnLCBjb250ZXh0T3B0aW9ucykgfHwgY2FudmFzLmdldENvbnRleHQoJ2V4cGVyaW1lbnRhbC13ZWJnbCcsIGNvbnRleHRPcHRpb25zKTtcblxuICAgICAgICAgICAgcmV0dXJuICEhKGdsICYmIGdsLmdldENvbnRleHRBdHRyaWJ1dGVzKCkuc3RlbmNpbCk7XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHNpZ24gb2YgbnVtYmVyXG4gICAgICpcbiAgICAgKiBAcGFyYW0gbiB7bnVtYmVyfVxuICAgICAqIEByZXR1cm5zIHtudW1iZXJ9IDAgaWYgbiBpcyAwLCAtMSBpZiBuIGlzIG5lZ2F0aXZlLCAxIGlmIG4gaSBwb3NpdGl2ZVxuICAgICAqL1xuICAgIHNpZ246IGZ1bmN0aW9uIChuKVxuICAgIHtcbiAgICAgICAgcmV0dXJuIG4gPyAobiA8IDAgPyAtMSA6IDEpIDogMDtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogcmVtb3ZlSXRlbXNcbiAgICAgKlxuICAgICAqIEBwYXJhbSB7YXJyYXl9IGFyciBUaGUgdGFyZ2V0IGFycmF5XG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHN0YXJ0SWR4IFRoZSBpbmRleCB0byBiZWdpbiByZW1vdmluZyBmcm9tIChpbmNsdXNpdmUpXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHJlbW92ZUNvdW50IEhvdyBtYW55IGl0ZW1zIHRvIHJlbW92ZVxuICAgICAqL1xuICAgIHJlbW92ZUl0ZW1zOiBmdW5jdGlvbiAoYXJyLCBzdGFydElkeCwgcmVtb3ZlQ291bnQpXG4gICAge1xuICAgICAgICB2YXIgbGVuZ3RoID0gYXJyLmxlbmd0aDtcblxuICAgICAgICBpZiAoc3RhcnRJZHggPj0gbGVuZ3RoIHx8IHJlbW92ZUNvdW50ID09PSAwKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICByZW1vdmVDb3VudCA9IChzdGFydElkeCtyZW1vdmVDb3VudCA+IGxlbmd0aCA/IGxlbmd0aC1zdGFydElkeCA6IHJlbW92ZUNvdW50KTtcbiAgICAgICAgZm9yICh2YXIgaSA9IHN0YXJ0SWR4LCBsZW4gPSBsZW5ndGgtcmVtb3ZlQ291bnQ7IGkgPCBsZW47ICsraSlcbiAgICAgICAge1xuICAgICAgICAgICAgYXJyW2ldID0gYXJyW2kgKyByZW1vdmVDb3VudF07XG4gICAgICAgIH1cblxuICAgICAgICBhcnIubGVuZ3RoID0gbGVuO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBAdG9kbyBEZXNjcmliZSBwcm9wZXJ0eSB1c2FnZVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgVGV4dHVyZUNhY2hlOiB7fSxcblxuICAgIC8qKlxuICAgICAqIEB0b2RvIERlc2NyaWJlIHByb3BlcnR5IHVzYWdlXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICBCYXNlVGV4dHVyZUNhY2hlOiB7fVxufTtcbiIsIi8qKlxuICogTWl4aW5zIGZ1bmN0aW9uYWxpdHkgdG8gbWFrZSBhbiBvYmplY3QgaGF2ZSBcInBsdWdpbnNcIi5cbiAqXG4gKiBAbWl4aW5cbiAqIEBtZW1iZXJvZiBQSVhJLnV0aWxzXG4gKiBAcGFyYW0gb2JqIHtvYmplY3R9IFRoZSBvYmplY3QgdG8gbWl4IGludG8uXG4gKiBAZXhhbXBsZVxuICogICAgICBmdW5jdGlvbiBNeU9iamVjdCgpIHt9XG4gKlxuICogICAgICBwbHVnaW5UYXJnZXQubWl4aW4oTXlPYmplY3QpO1xuICovXG5mdW5jdGlvbiBwbHVnaW5UYXJnZXQob2JqKVxue1xuICAgIG9iai5fX3BsdWdpbnMgPSB7fTtcblxuICAgIC8qKlxuICAgICAqIEFkZHMgYSBwbHVnaW4gdG8gYW4gb2JqZWN0XG4gICAgICpcbiAgICAgKiBAcGFyYW0gcGx1Z2luTmFtZSB7c3RyaW5nfSBUaGUgZXZlbnRzIHRoYXQgc2hvdWxkIGJlIGxpc3RlZC5cbiAgICAgKiBAcGFyYW0gY3RvciB7RnVuY3Rpb259IFRoZSBjb25zdHJ1Y3RvciBmdW5jdGlvbiBmb3IgdGhlIHBsdWdpbi5cbiAgICAgKi9cbiAgICBvYmoucmVnaXN0ZXJQbHVnaW4gPSBmdW5jdGlvbiAocGx1Z2luTmFtZSwgY3RvcilcbiAgICB7XG4gICAgICAgIG9iai5fX3BsdWdpbnNbcGx1Z2luTmFtZV0gPSBjdG9yO1xuICAgIH07XG5cbiAgICAvKipcbiAgICAgKiBJbnN0YW50aWF0ZXMgYWxsIHRoZSBwbHVnaW5zIG9mIHRoaXMgb2JqZWN0XG4gICAgICpcbiAgICAgKi9cbiAgICBvYmoucHJvdG90eXBlLmluaXRQbHVnaW5zID0gZnVuY3Rpb24gKClcbiAgICB7XG4gICAgICAgIHRoaXMucGx1Z2lucyA9IHRoaXMucGx1Z2lucyB8fCB7fTtcblxuICAgICAgICBmb3IgKHZhciBvIGluIG9iai5fX3BsdWdpbnMpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMucGx1Z2luc1tvXSA9IG5ldyAob2JqLl9fcGx1Z2luc1tvXSkodGhpcyk7XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgLyoqXG4gICAgICogUmVtb3ZlcyBhbGwgdGhlIHBsdWdpbnMgb2YgdGhpcyBvYmplY3RcbiAgICAgKlxuICAgICAqL1xuICAgIG9iai5wcm90b3R5cGUuZGVzdHJveVBsdWdpbnMgPSBmdW5jdGlvbiAoKVxuICAgIHtcbiAgICAgICAgZm9yICh2YXIgbyBpbiB0aGlzLnBsdWdpbnMpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMucGx1Z2luc1tvXS5kZXN0cm95KCk7XG4gICAgICAgICAgICB0aGlzLnBsdWdpbnNbb10gPSBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5wbHVnaW5zID0gbnVsbDtcbiAgICB9O1xufVxuXG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICAgIC8qKlxuICAgICAqIE1peGVzIGluIHRoZSBwcm9wZXJ0aWVzIG9mIHRoZSBwbHVnaW5UYXJnZXQgaW50byBhbm90aGVyIG9iamVjdFxuICAgICAqXG4gICAgICogQHBhcmFtIG9iamVjdCB7b2JqZWN0fSBUaGUgb2JqIHRvIG1peCBpbnRvXG4gICAgICovXG4gICAgbWl4aW46IGZ1bmN0aW9uIG1peGluKG9iailcbiAgICB7XG4gICAgICAgIHBsdWdpblRhcmdldChvYmopO1xuICAgIH1cbn07XG4iLCIvKmdsb2JhbCBjb25zb2xlICovXG52YXIgY29yZSA9IHJlcXVpcmUoJy4vY29yZScpLFxuICAgIG1lc2ggPSByZXF1aXJlKCcuL21lc2gnKSxcbiAgICBleHRyYXMgPSByZXF1aXJlKCcuL2V4dHJhcycpLFxuICAgIGZpbHRlcnMgPSByZXF1aXJlKCcuL2ZpbHRlcnMnKTtcblxuLyoqXG4gKiBAY2xhc3NcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBTcHJpdGVCYXRjaFxuICogQG1lbWJlcm9mIFBJWElcbiAqIEBzZWUgUElYSS5QYXJ0aWNsZUNvbnRhaW5lclxuICogQHRocm93cyB7UmVmZXJlbmNlRXJyb3J9IFNwcml0ZUJhdGNoIGRvZXMgbm90IGV4aXN0IGFueSBtb3JlLCBwbGVhc2UgdXNlIHRoZSBuZXcgUGFydGljbGVDb250YWluZXIgaW5zdGVhZC5cbiAqIEBkZXByZWNhdGVkIHNpbmNlIHZlcnNpb24gMy4wLjBcbiAqL1xuY29yZS5TcHJpdGVCYXRjaCA9IGZ1bmN0aW9uKClcbntcbiAgICB0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoJ1Nwcml0ZUJhdGNoIGRvZXMgbm90IGV4aXN0IGFueSBtb3JlLCBwbGVhc2UgdXNlIHRoZSBuZXcgUGFydGljbGVDb250YWluZXIgaW5zdGVhZC4nKTtcbn07XG5cbi8qKlxuICogQGNsYXNzXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgQXNzZXRMb2FkZXJcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAc2VlIFBJWEkubG9hZGVycy5Mb2FkZXJcbiAqIEB0aHJvd3Mge1JlZmVyZW5jZUVycm9yfSBUaGUgbG9hZGVyIHN5c3RlbSB3YXMgb3ZlcmhhdWxlZCBpbiBwaXhpIHYzLCBwbGVhc2Ugc2VlIHRoZSBuZXcgUElYSS5sb2FkZXJzLkxvYWRlciBjbGFzcy5cbiAqIEBkZXByZWNhdGVkIHNpbmNlIHZlcnNpb24gMy4wLjBcbiAqL1xuY29yZS5Bc3NldExvYWRlciA9IGZ1bmN0aW9uKClcbntcbiAgICB0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoJ1RoZSBsb2FkZXIgc3lzdGVtIHdhcyBvdmVyaGF1bGVkIGluIHBpeGkgdjMsIHBsZWFzZSBzZWUgdGhlIG5ldyBQSVhJLmxvYWRlcnMuTG9hZGVyIGNsYXNzLicpO1xufTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoY29yZSwge1xuXG4gICAgLyoqXG4gICAgICogQGNsYXNzXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAbmFtZSBTdGFnZVxuICAgICAqIEBtZW1iZXJvZiBQSVhJXG4gICAgICogQHNlZSBQSVhJLkNvbnRhaW5lclxuICAgICAqIEBkZXByZWNhdGVkIHNpbmNlIHZlcnNpb24gMy4wLjBcbiAgICAgKi9cbiAgICBTdGFnZToge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uKClcbiAgICAgICAge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKCdZb3UgZG8gbm90IG5lZWQgdG8gdXNlIGEgUElYSSBTdGFnZSBhbnkgbW9yZSwgeW91IGNhbiBzaW1wbHkgcmVuZGVyIGFueSBjb250YWluZXIuJyk7XG4gICAgICAgICAgICByZXR1cm4gY29yZS5Db250YWluZXI7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQGNsYXNzXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAbmFtZSBEaXNwbGF5T2JqZWN0Q29udGFpbmVyXG4gICAgICogQG1lbWJlcm9mIFBJWElcbiAgICAgKiBAc2VlIFBJWEkuQ29udGFpbmVyXG4gICAgICogQGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiAzLjAuMFxuICAgICAqL1xuICAgIERpc3BsYXlPYmplY3RDb250YWluZXI6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbigpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignRGlzcGxheU9iamVjdENvbnRhaW5lciBoYXMgYmVlbiBzaG9ydGVuZWQgdG8gQ29udGFpbmVyLCBwbGVhc2UgdXNlIENvbnRhaW5lciBmcm9tIG5vdyBvbi4nKTtcbiAgICAgICAgICAgIHJldHVybiBjb3JlLkNvbnRhaW5lcjtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBAY2xhc3NcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBuYW1lIFN0cmlwXG4gICAgICogQG1lbWJlcm9mIFBJWElcbiAgICAgKiBAc2VlIFBJWEkubWVzaC5NZXNoXG4gICAgICogQGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiAzLjAuMFxuICAgICAqL1xuICAgIFN0cmlwOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24oKVxuICAgICAgICB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ1RoZSBTdHJpcCBjbGFzcyBoYXMgYmVlbiByZW5hbWVkIHRvIE1lc2ggYW5kIG1vdmVkIHRvIG1lc2guTWVzaCwgcGxlYXNlIHVzZSBtZXNoLk1lc2ggZnJvbSBub3cgb24uJyk7XG4gICAgICAgICAgICByZXR1cm4gbWVzaC5NZXNoO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIEBjbGFzc1xuICAgICAqIEBwcml2YXRlXG4gICAgICogQG5hbWUgUm9wZVxuICAgICAqIEBtZW1iZXJvZiBQSVhJXG4gICAgICogQHNlZSBQSVhJLm1lc2guUm9wZVxuICAgICAqIEBkZXByZWNhdGVkIHNpbmNlIHZlcnNpb24gMy4wLjBcbiAgICAgKi9cbiAgICBSb3BlOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24oKVxuICAgICAgICB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ1RoZSBSb3BlIGNsYXNzIGhhcyBiZWVuIG1vdmVkIHRvIG1lc2guUm9wZSwgcGxlYXNlIHVzZSBtZXNoLlJvcGUgZnJvbSBub3cgb24uJyk7XG4gICAgICAgICAgICByZXR1cm4gbWVzaC5Sb3BlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIEBjbGFzc1xuICAgICAqIEBwcml2YXRlXG4gICAgICogQG5hbWUgTW92aWVDbGlwXG4gICAgICogQG1lbWJlcm9mIFBJWElcbiAgICAgKiBAc2VlIFBJWEkuZXh0cmFzLk1vdmllQ2xpcFxuICAgICAqIEBkZXByZWNhdGVkIHNpbmNlIHZlcnNpb24gMy4wLjBcbiAgICAgKi9cbiAgICBNb3ZpZUNsaXA6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbigpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignVGhlIE1vdmllQ2xpcCBjbGFzcyBoYXMgYmVlbiBtb3ZlZCB0byBleHRyYXMuTW92aWVDbGlwLCBwbGVhc2UgdXNlIGV4dHJhcy5Nb3ZpZUNsaXAgZnJvbSBub3cgb24uJyk7XG4gICAgICAgICAgICByZXR1cm4gZXh0cmFzLk1vdmllQ2xpcDtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBAY2xhc3NcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBuYW1lIFRpbGluZ1Nwcml0ZVxuICAgICAqIEBtZW1iZXJvZiBQSVhJXG4gICAgICogQHNlZSBQSVhJLmV4dHJhcy5UaWxpbmdTcHJpdGVcbiAgICAgKiBAZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDMuMC4wXG4gICAgICovXG4gICAgVGlsaW5nU3ByaXRlOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24oKVxuICAgICAgICB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ1RoZSBUaWxpbmdTcHJpdGUgY2xhc3MgaGFzIGJlZW4gbW92ZWQgdG8gZXh0cmFzLlRpbGluZ1Nwcml0ZSwgcGxlYXNlIHVzZSBleHRyYXMuVGlsaW5nU3ByaXRlIGZyb20gbm93IG9uLicpO1xuICAgICAgICAgICAgcmV0dXJuIGV4dHJhcy5UaWxpbmdTcHJpdGU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQGNsYXNzXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAbmFtZSBCaXRtYXBUZXh0XG4gICAgICogQG1lbWJlcm9mIFBJWElcbiAgICAgKiBAc2VlIFBJWEkuZXh0cmFzLkJpdG1hcFRleHRcbiAgICAgKiBAZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDMuMC4wXG4gICAgICovXG4gICAgQml0bWFwVGV4dDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uKClcbiAgICAgICAge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKCdUaGUgQml0bWFwVGV4dCBjbGFzcyBoYXMgYmVlbiBtb3ZlZCB0byBleHRyYXMuQml0bWFwVGV4dCwgcGxlYXNlIHVzZSBleHRyYXMuQml0bWFwVGV4dCBmcm9tIG5vdyBvbi4nKTtcbiAgICAgICAgICAgIHJldHVybiBleHRyYXMuQml0bWFwVGV4dDtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBAY2xhc3NcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBuYW1lIGJsZW5kTW9kZXNcbiAgICAgKiBAbWVtYmVyb2YgUElYSVxuICAgICAqIEBzZWUgUElYSS5CTEVORF9NT0RFU1xuICAgICAqIEBkZXByZWNhdGVkIHNpbmNlIHZlcnNpb24gMy4wLjBcbiAgICAgKi9cbiAgICBibGVuZE1vZGVzOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24oKVxuICAgICAgICB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ1RoZSBibGVuZE1vZGVzIGhhcyBiZWVuIG1vdmVkIHRvIEJMRU5EX01PREVTLCBwbGVhc2UgdXNlIEJMRU5EX01PREVTIGZyb20gbm93IG9uLicpO1xuICAgICAgICAgICAgcmV0dXJuIGNvcmUuQkxFTkRfTU9ERVM7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQGNsYXNzXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAbmFtZSBzY2FsZU1vZGVzXG4gICAgICogQG1lbWJlcm9mIFBJWElcbiAgICAgKiBAc2VlIFBJWEkuU0NBTEVfTU9ERVNcbiAgICAgKiBAZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDMuMC4wXG4gICAgICovXG4gICAgc2NhbGVNb2Rlczoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uKClcbiAgICAgICAge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKCdUaGUgc2NhbGVNb2RlcyBoYXMgYmVlbiBtb3ZlZCB0byBTQ0FMRV9NT0RFUywgcGxlYXNlIHVzZSBTQ0FMRV9NT0RFUyBmcm9tIG5vdyBvbi4nKTtcbiAgICAgICAgICAgIHJldHVybiBjb3JlLlNDQUxFX01PREVTO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIEBjbGFzc1xuICAgICAqIEBwcml2YXRlXG4gICAgICogQG5hbWUgQmFzZVRleHR1cmVDYWNoZVxuICAgICAqIEBtZW1iZXJvZiBQSVhJXG4gICAgICogQHNlZSBQSVhJLnV0aWxzLkJhc2VUZXh0dXJlQ2FjaGVcbiAgICAgKiBAZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDMuMC4wXG4gICAgICovXG4gICAgQmFzZVRleHR1cmVDYWNoZToge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignVGhlIEJhc2VUZXh0dXJlQ2FjaGUgY2xhc3MgaGFzIGJlZW4gbW92ZWQgdG8gdXRpbHMuQmFzZVRleHR1cmVDYWNoZSwgcGxlYXNlIHVzZSB1dGlscy5CYXNlVGV4dHVyZUNhY2hlIGZyb20gbm93IG9uLicpO1xuICAgICAgICAgICAgcmV0dXJuIGNvcmUudXRpbHMuQmFzZVRleHR1cmVDYWNoZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBAY2xhc3NcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBuYW1lIFRleHR1cmVDYWNoZVxuICAgICAqIEBtZW1iZXJvZiBQSVhJXG4gICAgICogQHNlZSBQSVhJLnV0aWxzLlRleHR1cmVDYWNoZVxuICAgICAqIEBkZXByZWNhdGVkIHNpbmNlIHZlcnNpb24gMy4wLjBcbiAgICAgKi9cbiAgICBUZXh0dXJlQ2FjaGU6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ1RoZSBUZXh0dXJlQ2FjaGUgY2xhc3MgaGFzIGJlZW4gbW92ZWQgdG8gdXRpbHMuVGV4dHVyZUNhY2hlLCBwbGVhc2UgdXNlIHV0aWxzLlRleHR1cmVDYWNoZSBmcm9tIG5vdyBvbi4nKTtcbiAgICAgICAgICAgIHJldHVybiBjb3JlLnV0aWxzLlRleHR1cmVDYWNoZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBAbmFtZXNwYWNlXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAbmFtZSBtYXRoXG4gICAgICogQG1lbWJlcm9mIFBJWElcbiAgICAgKiBAc2VlIFBJWElcbiAgICAgKiBAZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDMuMC42XG4gICAgICovXG4gICAgbWF0aDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignVGhlIG1hdGggbmFtZXNwYWNlIGlzIGRlcHJlY2F0ZWQsIHBsZWFzZSBhY2Nlc3MgbWVtYmVycyBhbHJlYWR5IGFjY2Vzc2libGUgb24gUElYSS4nKTtcbiAgICAgICAgICAgIHJldHVybiBjb3JlO1xuICAgICAgICB9XG4gICAgfVxufSk7XG5cbi8qKlxuICogQG1ldGhvZFxuICogQHByaXZhdGVcbiAqIEBuYW1lIFBJWEkuU3ByaXRlI3NldFRleHR1cmVcbiAqIEBzZWUgUElYSS5TcHJpdGUjdGV4dHVyZVxuICogQGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiAzLjAuMFxuICovXG5jb3JlLlNwcml0ZS5wcm90b3R5cGUuc2V0VGV4dHVyZSA9IGZ1bmN0aW9uKHRleHR1cmUpXG57XG4gICAgdGhpcy50ZXh0dXJlID0gdGV4dHVyZTtcbiAgICBjb25zb2xlLndhcm4oJ3NldFRleHR1cmUgaXMgbm93IGRlcHJlY2F0ZWQsIHBsZWFzZSB1c2UgdGhlIHRleHR1cmUgcHJvcGVydHksIGUuZyA6IHNwcml0ZS50ZXh0dXJlID0gdGV4dHVyZTsnKTtcbn07XG5cbi8qKlxuICogQG1ldGhvZFxuICogQG5hbWUgUElYSS5leHRyYXMuQml0bWFwVGV4dCNzZXRUZXh0XG4gKiBAc2VlIFBJWEkuZXh0cmFzLkJpdG1hcFRleHQjdGV4dFxuICogQGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiAzLjAuMFxuICovXG5leHRyYXMuQml0bWFwVGV4dC5wcm90b3R5cGUuc2V0VGV4dCA9IGZ1bmN0aW9uKHRleHQpXG57XG4gICAgdGhpcy50ZXh0ID0gdGV4dDtcbiAgICBjb25zb2xlLndhcm4oJ3NldFRleHQgaXMgbm93IGRlcHJlY2F0ZWQsIHBsZWFzZSB1c2UgdGhlIHRleHQgcHJvcGVydHksIGUuZyA6IG15Qml0bWFwVGV4dC50ZXh0ID0gXFwnbXkgdGV4dFxcJzsnKTtcbn07XG5cbi8qKlxuICogQG1ldGhvZFxuICogQG5hbWUgUElYSS5UZXh0I3NldFRleHRcbiAqIEBzZWUgUElYSS5UZXh0I3RleHRcbiAqIEBkZXByZWNhdGVkIHNpbmNlIHZlcnNpb24gMy4wLjBcbiAqL1xuY29yZS5UZXh0LnByb3RvdHlwZS5zZXRUZXh0ID0gZnVuY3Rpb24odGV4dClcbntcbiAgICB0aGlzLnRleHQgPSB0ZXh0O1xuICAgIGNvbnNvbGUud2Fybignc2V0VGV4dCBpcyBub3cgZGVwcmVjYXRlZCwgcGxlYXNlIHVzZSB0aGUgdGV4dCBwcm9wZXJ0eSwgZS5nIDogbXlUZXh0LnRleHQgPSBcXCdteSB0ZXh0XFwnOycpO1xufTtcblxuLyoqXG4gKiBAbWV0aG9kXG4gKiBAbmFtZSBQSVhJLlRleHQjc2V0U3R5bGVcbiAqIEBzZWUgUElYSS5UZXh0I3N0eWxlXG4gKiBAZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDMuMC4wXG4gKi9cbmNvcmUuVGV4dC5wcm90b3R5cGUuc2V0U3R5bGUgPSBmdW5jdGlvbihzdHlsZSlcbntcbiAgICB0aGlzLnN0eWxlID0gc3R5bGU7XG4gICAgY29uc29sZS53YXJuKCdzZXRTdHlsZSBpcyBub3cgZGVwcmVjYXRlZCwgcGxlYXNlIHVzZSB0aGUgc3R5bGUgcHJvcGVydHksIGUuZyA6IG15VGV4dC5zdHlsZSA9IHN0eWxlOycpO1xufTtcblxuLyoqXG4gKiBAbWV0aG9kXG4gKiBAbmFtZSBQSVhJLlRleHR1cmUjc2V0RnJhbWVcbiAqIEBzZWUgUElYSS5UZXh0dXJlI3NldEZyYW1lXG4gKiBAZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDMuMC4wXG4gKi9cbmNvcmUuVGV4dHVyZS5wcm90b3R5cGUuc2V0RnJhbWUgPSBmdW5jdGlvbihmcmFtZSlcbntcbiAgICB0aGlzLmZyYW1lID0gZnJhbWU7XG4gICAgY29uc29sZS53YXJuKCdzZXRGcmFtZSBpcyBub3cgZGVwcmVjYXRlZCwgcGxlYXNlIHVzZSB0aGUgZnJhbWUgcHJvcGVydHksIGUuZyA6IG15VGV4dHVyZS5mcmFtZSA9IGZyYW1lOycpO1xufTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoZmlsdGVycywge1xuXG4gICAgLyoqXG4gICAgICogQGNsYXNzXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAbmFtZSBQSVhJLmZpbHRlcnMuQWJzdHJhY3RGaWx0ZXJcbiAgICAgKiBAc2VlIFBJWEkuQWJzdHJhY3RGaWx0ZXJcbiAgICAgKiBAZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDMuMC42XG4gICAgICovXG4gICAgQWJzdHJhY3RGaWx0ZXI6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbigpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignZmlsdGVycy5BYnN0cmFjdEZpbHRlciBpcyBhbiB1bmRvY3VtZW50ZWQgYWxpYXMsIHBsZWFzZSB1c2UgQWJzdHJhY3RGaWx0ZXIgZnJvbSBub3cgb24uJyk7XG4gICAgICAgICAgICByZXR1cm4gY29yZS5BYnN0cmFjdEZpbHRlcjtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBAY2xhc3NcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBuYW1lIFBJWEkuZmlsdGVycy5GWEFBRmlsdGVyXG4gICAgICogQHNlZSBQSVhJLkZYQUFGaWx0ZXJcbiAgICAgKiBAZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDMuMC42XG4gICAgICovXG4gICAgRlhBQUZpbHRlcjoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uKClcbiAgICAgICAge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKCdmaWx0ZXJzLkZYQUFGaWx0ZXIgaXMgYW4gdW5kb2N1bWVudGVkIGFsaWFzLCBwbGVhc2UgdXNlIEZYQUFGaWx0ZXIgZnJvbSBub3cgb24uJyk7XG4gICAgICAgICAgICByZXR1cm4gY29yZS5GWEFBRmlsdGVyO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIEBjbGFzc1xuICAgICAqIEBwcml2YXRlXG4gICAgICogQG5hbWUgUElYSS5maWx0ZXJzLlNwcml0ZU1hc2tGaWx0ZXJcbiAgICAgKiBAc2VlIFBJWEkuU3ByaXRlTWFza0ZpbHRlclxuICAgICAqIEBkZXByZWNhdGVkIHNpbmNlIHZlcnNpb24gMy4wLjZcbiAgICAgKi9cbiAgICBTcHJpdGVNYXNrRmlsdGVyOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24oKVxuICAgICAgICB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ2ZpbHRlcnMuU3ByaXRlTWFza0ZpbHRlciBpcyBhbiB1bmRvY3VtZW50ZWQgYWxpYXMsIHBsZWFzZSB1c2UgU3ByaXRlTWFza0ZpbHRlciBmcm9tIG5vdyBvbi4nKTtcbiAgICAgICAgICAgIHJldHVybiBjb3JlLlNwcml0ZU1hc2tGaWx0ZXI7XG4gICAgICAgIH1cbiAgICB9XG59KTtcblxuLyoqXG4gKiBAbWV0aG9kXG4gKiBAbmFtZSBQSVhJLnV0aWxzLnV1aWRcbiAqIEBzZWUgUElYSS51dGlscy51aWRcbiAqIEBkZXByZWNhdGVkIHNpbmNlIHZlcnNpb24gMy4wLjZcbiAqL1xuY29yZS51dGlscy51dWlkID0gZnVuY3Rpb24gKClcbntcbiAgICBjb25zb2xlLndhcm4oJ3V0aWxzLnV1aWQoKSBpcyBkZXByZWNhdGVkLCBwbGVhc2UgdXNlIHV0aWxzLnVpZCgpIGZyb20gbm93IG9uLicpO1xuICAgIHJldHVybiBjb3JlLnV0aWxzLnVpZCgpO1xufTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vY29yZScpO1xuXG4vKipcbiAqIEEgQml0bWFwVGV4dCBvYmplY3Qgd2lsbCBjcmVhdGUgYSBsaW5lIG9yIG11bHRpcGxlIGxpbmVzIG9mIHRleHQgdXNpbmcgYml0bWFwIGZvbnQuIFRvXG4gKiBzcGxpdCBhIGxpbmUgeW91IGNhbiB1c2UgJ1xcbicsICdcXHInIG9yICdcXHJcXG4nIGluIHlvdXIgc3RyaW5nLiBZb3UgY2FuIGdlbmVyYXRlIHRoZSBmbnQgZmlsZXMgdXNpbmc6XG4gKlxuICogQSBCaXRtYXBUZXh0IGNhbiBvbmx5IGJlIGNyZWF0ZWQgd2hlbiB0aGUgZm9udCBpcyBsb2FkZWRcbiAqXG4gKiBgYGBqc1xuICogLy8gaW4gdGhpcyBjYXNlIHRoZSBmb250IGlzIGluIGEgZmlsZSBjYWxsZWQgJ2Rlc3lyZWwuZm50J1xuICogdmFyIGJpdG1hcFRleHQgPSBuZXcgUElYSS5leHRyYXMuQml0bWFwVGV4dChcInRleHQgdXNpbmcgYSBmYW5jeSBmb250IVwiLCB7Zm9udDogXCIzNXB4IERlc3lyZWxcIiwgYWxpZ246IFwicmlnaHRcIn0pO1xuICogYGBgXG4gKlxuICpcbiAqIGh0dHA6Ly93d3cuYW5nZWxjb2RlLmNvbS9wcm9kdWN0cy9ibWZvbnQvIGZvciB3aW5kb3dzIG9yXG4gKiBodHRwOi8vd3d3LmJtZ2x5cGguY29tLyBmb3IgbWFjLlxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5Db250YWluZXJcbiAqIEBtZW1iZXJvZiBQSVhJLmV4dHJhc1xuICogQHBhcmFtIHRleHQge3N0cmluZ30gVGhlIGNvcHkgdGhhdCB5b3Ugd291bGQgbGlrZSB0aGUgdGV4dCB0byBkaXNwbGF5XG4gKiBAcGFyYW0gc3R5bGUge29iamVjdH0gVGhlIHN0eWxlIHBhcmFtZXRlcnNcbiAqIEBwYXJhbSBzdHlsZS5mb250IHtzdHJpbmd8b2JqZWN0fSBUaGUgZm9udCBkZXNjcmlwdG9yIGZvciB0aGUgb2JqZWN0LCBjYW4gYmUgcGFzc2VkIGFzIGEgc3RyaW5nIG9mIGZvcm1cbiAqICAgICAgXCIyNHB4IEZvbnROYW1lXCIgb3IgXCJGb250TmFtZVwiIG9yIGFzIGFuIG9iamVjdCB3aXRoIGV4cGxpY2l0IG5hbWUvc2l6ZSBwcm9wZXJ0aWVzLlxuICogQHBhcmFtIFtzdHlsZS5mb250Lm5hbWVdIHtzdHJpbmd9IFRoZSBiaXRtYXAgZm9udCBpZFxuICogQHBhcmFtIFtzdHlsZS5mb250LnNpemVdIHtudW1iZXJ9IFRoZSBzaXplIG9mIHRoZSBmb250IGluIHBpeGVscywgZS5nLiAyNFxuICogQHBhcmFtIFtzdHlsZS5hbGlnbj0nbGVmdCddIHtzdHJpbmd9IEFsaWdubWVudCBmb3IgbXVsdGlsaW5lIHRleHQgKCdsZWZ0JywgJ2NlbnRlcicgb3IgJ3JpZ2h0JyksIGRvZXMgbm90IGFmZmVjdFxuICogICAgICBzaW5nbGUgbGluZSB0ZXh0XG4gKiBAcGFyYW0gW3N0eWxlLnRpbnQ9MHhGRkZGRkZdIHtudW1iZXJ9IFRoZSB0aW50IGNvbG9yXG4gKi9cbmZ1bmN0aW9uIEJpdG1hcFRleHQodGV4dCwgc3R5bGUpXG57XG4gICAgY29yZS5Db250YWluZXIuY2FsbCh0aGlzKTtcblxuICAgIHN0eWxlID0gc3R5bGUgfHwge307XG5cbiAgICAvKipcbiAgICAgKiBUaGUgd2lkdGggb2YgdGhlIG92ZXJhbGwgdGV4dCwgZGlmZmVyZW50IGZyb20gZm9udFNpemUsXG4gICAgICogd2hpY2ggaXMgZGVmaW5lZCBpbiB0aGUgc3R5bGUgb2JqZWN0XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQHJlYWRPbmx5XG4gICAgICovXG4gICAgdGhpcy50ZXh0V2lkdGggPSAwO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGhlaWdodCBvZiB0aGUgb3ZlcmFsbCB0ZXh0LCBkaWZmZXJlbnQgZnJvbSBmb250U2l6ZSxcbiAgICAgKiB3aGljaCBpcyBkZWZpbmVkIGluIHRoZSBzdHlsZSBvYmplY3RcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAcmVhZE9ubHlcbiAgICAgKi9cbiAgICB0aGlzLnRleHRIZWlnaHQgPSAwO1xuXG4gICAgLyoqXG4gICAgICogUHJpdmF0ZSB0cmFja2VyIGZvciB0aGUgbGV0dGVyIHNwcml0ZSBwb29sLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5TcHJpdGVbXX1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX2dseXBocyA9IFtdO1xuXG4gICAgLyoqXG4gICAgICogUHJpdmF0ZSB0cmFja2VyIGZvciB0aGUgY3VycmVudCBzdHlsZS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge29iamVjdH1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX2ZvbnQgPSB7XG4gICAgICAgIHRpbnQ6IHN0eWxlLnRpbnQgIT09IHVuZGVmaW5lZCA/IHN0eWxlLnRpbnQgOiAweEZGRkZGRixcbiAgICAgICAgYWxpZ246IHN0eWxlLmFsaWduIHx8ICdsZWZ0JyxcbiAgICAgICAgbmFtZTogbnVsbCxcbiAgICAgICAgc2l6ZTogMFxuICAgIH07XG5cbiAgICAvKipcbiAgICAgKiBQcml2YXRlIHRyYWNrZXIgZm9yIHRoZSBjdXJyZW50IGZvbnQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtvYmplY3R9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLmZvbnQgPSBzdHlsZS5mb250OyAvLyBydW4gZm9udCBzZXR0ZXJcblxuICAgIC8qKlxuICAgICAqIFByaXZhdGUgdHJhY2tlciBmb3IgdGhlIGN1cnJlbnQgdGV4dC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge3N0cmluZ31cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX3RleHQgPSB0ZXh0O1xuXG4gICAgLyoqXG4gICAgICogVGhlIG1heCB3aWR0aCBvZiB0aGlzIGJpdG1hcCB0ZXh0IGluIHBpeGVscy4gSWYgdGhlIHRleHQgcHJvdmlkZWQgaXMgbG9uZ2VyIHRoYW4gdGhlIHZhbHVlIHByb3ZpZGVkLCBsaW5lIGJyZWFrcyB3aWxsIGJlIGF1dG9tYXRpY2FsbHkgaW5zZXJ0ZWQgaW4gdGhlIGxhc3Qgd2hpdGVzcGFjZS5cbiAgICAgKiBEaXNhYmxlIGJ5IHNldHRpbmcgdmFsdWUgdG8gMFxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMubWF4V2lkdGggPSAwO1xuXG4gICAgLyoqXG4gICAgICogVGhlIG1heCBsaW5lIGhlaWdodC4gVGhpcyBpcyB1c2VmdWwgd2hlbiB0cnlpbmcgdG8gdXNlIHRoZSB0b3RhbCBoZWlnaHQgb2YgdGhlIFRleHQsIGllOiB3aGVuIHRyeWluZyB0byB2ZXJ0aWNhbGx5IGFsaWduLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMubWF4TGluZUhlaWdodCA9IDA7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgZGlydHkgc3RhdGUgb2YgdGhpcyBvYmplY3QuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqL1xuICAgIHRoaXMuZGlydHkgPSBmYWxzZTtcblxuICAgIHRoaXMudXBkYXRlVGV4dCgpO1xufVxuXG4vLyBjb25zdHJ1Y3RvclxuQml0bWFwVGV4dC5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuQ29udGFpbmVyLnByb3RvdHlwZSk7XG5CaXRtYXBUZXh0LnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IEJpdG1hcFRleHQ7XG5tb2R1bGUuZXhwb3J0cyA9IEJpdG1hcFRleHQ7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKEJpdG1hcFRleHQucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogVGhlIHRpbnQgb2YgdGhlIEJpdG1hcFRleHQgb2JqZWN0XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZXh0cmFzLkJpdG1hcFRleHQjXG4gICAgICovXG4gICAgdGludDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9mb250LnRpbnQ7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLl9mb250LnRpbnQgPSAodHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJyAmJiB2YWx1ZSA+PSAwKSA/IHZhbHVlIDogMHhGRkZGRkY7XG5cbiAgICAgICAgICAgIHRoaXMuZGlydHkgPSB0cnVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFRoZSBhbGlnbm1lbnQgb2YgdGhlIEJpdG1hcFRleHQgb2JqZWN0XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtzdHJpbmd9XG4gICAgICogQGRlZmF1bHQgJ2xlZnQnXG4gICAgICogQG1lbWJlcm9mIFBJWEkuZXh0cmFzLkJpdG1hcFRleHQjXG4gICAgICovXG4gICAgYWxpZ246IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fZm9udC5hbGlnbjtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuX2ZvbnQuYWxpZ24gPSB2YWx1ZSB8fCAnbGVmdCc7XG5cbiAgICAgICAgICAgIHRoaXMuZGlydHkgPSB0cnVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFRoZSBmb250IGRlc2NyaXB0b3Igb2YgdGhlIEJpdG1hcFRleHQgb2JqZWN0XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtGb250fVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmV4dHJhcy5CaXRtYXBUZXh0I1xuICAgICAqL1xuICAgIGZvbnQ6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fZm9udDtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGlmICghdmFsdWUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICAgICAgdmFsdWUgPSB2YWx1ZS5zcGxpdCgnICcpO1xuXG4gICAgICAgICAgICAgICAgdGhpcy5fZm9udC5uYW1lID0gdmFsdWUubGVuZ3RoID09PSAxID8gdmFsdWVbMF0gOiB2YWx1ZS5zbGljZSgxKS5qb2luKCcgJyk7XG4gICAgICAgICAgICAgICAgdGhpcy5fZm9udC5zaXplID0gdmFsdWUubGVuZ3RoID49IDIgPyBwYXJzZUludCh2YWx1ZVswXSwgMTApIDogQml0bWFwVGV4dC5mb250c1t0aGlzLl9mb250Lm5hbWVdLnNpemU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9mb250Lm5hbWUgPSB2YWx1ZS5uYW1lO1xuICAgICAgICAgICAgICAgIHRoaXMuX2ZvbnQuc2l6ZSA9IHR5cGVvZiB2YWx1ZS5zaXplID09PSAnbnVtYmVyJyA/IHZhbHVlLnNpemUgOiBwYXJzZUludCh2YWx1ZS5zaXplLCAxMCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuZGlydHkgPSB0cnVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFRoZSB0ZXh0IG9mIHRoZSBCaXRtYXBUZXh0IG9iamVjdFxuICAgICAqXG4gICAgICogQG1lbWJlciB7c3RyaW5nfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmV4dHJhcy5CaXRtYXBUZXh0I1xuICAgICAqL1xuICAgIHRleHQ6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fdGV4dDtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHZhbHVlID0gdmFsdWUudG9TdHJpbmcoKSB8fCAnICc7XG4gICAgICAgICAgICBpZiAodGhpcy5fdGV4dCA9PT0gdmFsdWUpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5fdGV4dCA9IHZhbHVlO1xuICAgICAgICAgICAgdGhpcy5kaXJ0eSA9IHRydWU7XG4gICAgICAgIH1cbiAgICB9XG59KTtcblxuLyoqXG4gKiBSZW5kZXJzIHRleHQgYW5kIHVwZGF0ZXMgaXQgd2hlbiBuZWVkZWRcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5CaXRtYXBUZXh0LnByb3RvdHlwZS51cGRhdGVUZXh0ID0gZnVuY3Rpb24gKClcbntcbiAgICB2YXIgZGF0YSA9IEJpdG1hcFRleHQuZm9udHNbdGhpcy5fZm9udC5uYW1lXTtcbiAgICB2YXIgcG9zID0gbmV3IGNvcmUuUG9pbnQoKTtcbiAgICB2YXIgcHJldkNoYXJDb2RlID0gbnVsbDtcbiAgICB2YXIgY2hhcnMgPSBbXTtcbiAgICB2YXIgbGFzdExpbmVXaWR0aCA9IDA7XG4gICAgdmFyIG1heExpbmVXaWR0aCA9IDA7XG4gICAgdmFyIGxpbmVXaWR0aHMgPSBbXTtcbiAgICB2YXIgbGluZSA9IDA7XG4gICAgdmFyIHNjYWxlID0gdGhpcy5fZm9udC5zaXplIC8gZGF0YS5zaXplO1xuICAgIHZhciBsYXN0U3BhY2UgPSAtMTtcbiAgICB2YXIgbWF4TGluZUhlaWdodCA9IDA7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMudGV4dC5sZW5ndGg7IGkrKylcbiAgICB7XG4gICAgICAgIHZhciBjaGFyQ29kZSA9IHRoaXMudGV4dC5jaGFyQ29kZUF0KGkpO1xuICAgICAgICBsYXN0U3BhY2UgPSAvKFxccykvLnRlc3QodGhpcy50ZXh0LmNoYXJBdChpKSkgPyBpIDogbGFzdFNwYWNlO1xuXG4gICAgICAgIGlmICgvKD86XFxyXFxufFxccnxcXG4pLy50ZXN0KHRoaXMudGV4dC5jaGFyQXQoaSkpKVxuICAgICAgICB7XG4gICAgICAgICAgICBsaW5lV2lkdGhzLnB1c2gobGFzdExpbmVXaWR0aCk7XG4gICAgICAgICAgICBtYXhMaW5lV2lkdGggPSBNYXRoLm1heChtYXhMaW5lV2lkdGgsIGxhc3RMaW5lV2lkdGgpO1xuICAgICAgICAgICAgbGluZSsrO1xuXG4gICAgICAgICAgICBwb3MueCA9IDA7XG4gICAgICAgICAgICBwb3MueSArPSBkYXRhLmxpbmVIZWlnaHQ7XG4gICAgICAgICAgICBwcmV2Q2hhckNvZGUgPSBudWxsO1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAobGFzdFNwYWNlICE9PSAtMSAmJiB0aGlzLm1heFdpZHRoID4gMCAmJiBwb3MueCAqIHNjYWxlID4gdGhpcy5tYXhXaWR0aClcbiAgICAgICAge1xuICAgICAgICAgICAgY29yZS51dGlscy5yZW1vdmVJdGVtcyhjaGFycywgbGFzdFNwYWNlLCBpIC0gbGFzdFNwYWNlKTtcbiAgICAgICAgICAgIGkgPSBsYXN0U3BhY2U7XG4gICAgICAgICAgICBsYXN0U3BhY2UgPSAtMTtcblxuICAgICAgICAgICAgbGluZVdpZHRocy5wdXNoKGxhc3RMaW5lV2lkdGgpO1xuICAgICAgICAgICAgbWF4TGluZVdpZHRoID0gTWF0aC5tYXgobWF4TGluZVdpZHRoLCBsYXN0TGluZVdpZHRoKTtcbiAgICAgICAgICAgIGxpbmUrKztcblxuICAgICAgICAgICAgcG9zLnggPSAwO1xuICAgICAgICAgICAgcG9zLnkgKz0gZGF0YS5saW5lSGVpZ2h0O1xuICAgICAgICAgICAgcHJldkNoYXJDb2RlID0gbnVsbDtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGNoYXJEYXRhID0gZGF0YS5jaGFyc1tjaGFyQ29kZV07XG5cbiAgICAgICAgaWYgKCFjaGFyRGF0YSlcbiAgICAgICAge1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAocHJldkNoYXJDb2RlICYmIGNoYXJEYXRhLmtlcm5pbmdbcHJldkNoYXJDb2RlXSlcbiAgICAgICAge1xuICAgICAgICAgICAgcG9zLnggKz0gY2hhckRhdGEua2VybmluZ1twcmV2Q2hhckNvZGVdO1xuICAgICAgICB9XG5cbiAgICAgICAgY2hhcnMucHVzaCh7dGV4dHVyZTpjaGFyRGF0YS50ZXh0dXJlLCBsaW5lOiBsaW5lLCBjaGFyQ29kZTogY2hhckNvZGUsIHBvc2l0aW9uOiBuZXcgY29yZS5Qb2ludChwb3MueCArIGNoYXJEYXRhLnhPZmZzZXQsIHBvcy55ICsgY2hhckRhdGEueU9mZnNldCl9KTtcbiAgICAgICAgbGFzdExpbmVXaWR0aCA9IHBvcy54ICsgKGNoYXJEYXRhLnRleHR1cmUud2lkdGggKyBjaGFyRGF0YS54T2Zmc2V0KTtcbiAgICAgICAgcG9zLnggKz0gY2hhckRhdGEueEFkdmFuY2U7XG4gICAgICAgIG1heExpbmVIZWlnaHQgPSBNYXRoLm1heChtYXhMaW5lSGVpZ2h0LCAoY2hhckRhdGEueU9mZnNldCArIGNoYXJEYXRhLnRleHR1cmUuaGVpZ2h0KSk7XG4gICAgICAgIHByZXZDaGFyQ29kZSA9IGNoYXJDb2RlO1xuICAgIH1cblxuICAgIGxpbmVXaWR0aHMucHVzaChsYXN0TGluZVdpZHRoKTtcbiAgICBtYXhMaW5lV2lkdGggPSBNYXRoLm1heChtYXhMaW5lV2lkdGgsIGxhc3RMaW5lV2lkdGgpO1xuXG4gICAgdmFyIGxpbmVBbGlnbk9mZnNldHMgPSBbXTtcblxuICAgIGZvciAoaSA9IDA7IGkgPD0gbGluZTsgaSsrKVxuICAgIHtcbiAgICAgICAgdmFyIGFsaWduT2Zmc2V0ID0gMDtcblxuICAgICAgICBpZiAodGhpcy5fZm9udC5hbGlnbiA9PT0gJ3JpZ2h0JylcbiAgICAgICAge1xuICAgICAgICAgICAgYWxpZ25PZmZzZXQgPSBtYXhMaW5lV2lkdGggLSBsaW5lV2lkdGhzW2ldO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHRoaXMuX2ZvbnQuYWxpZ24gPT09ICdjZW50ZXInKVxuICAgICAgICB7XG4gICAgICAgICAgICBhbGlnbk9mZnNldCA9IChtYXhMaW5lV2lkdGggLSBsaW5lV2lkdGhzW2ldKSAvIDI7XG4gICAgICAgIH1cblxuICAgICAgICBsaW5lQWxpZ25PZmZzZXRzLnB1c2goYWxpZ25PZmZzZXQpO1xuICAgIH1cblxuICAgIHZhciBsZW5DaGFycyA9IGNoYXJzLmxlbmd0aDtcbiAgICB2YXIgdGludCA9IHRoaXMudGludDtcblxuICAgIGZvciAoaSA9IDA7IGkgPCBsZW5DaGFyczsgaSsrKVxuICAgIHtcbiAgICAgICAgdmFyIGMgPSB0aGlzLl9nbHlwaHNbaV07IC8vIGdldCB0aGUgbmV4dCBnbHlwaCBzcHJpdGVcblxuICAgICAgICBpZiAoYylcbiAgICAgICAge1xuICAgICAgICAgICAgYy50ZXh0dXJlID0gY2hhcnNbaV0udGV4dHVyZTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgIHtcbiAgICAgICAgICAgIGMgPSBuZXcgY29yZS5TcHJpdGUoY2hhcnNbaV0udGV4dHVyZSk7XG4gICAgICAgICAgICB0aGlzLl9nbHlwaHMucHVzaChjKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGMucG9zaXRpb24ueCA9IChjaGFyc1tpXS5wb3NpdGlvbi54ICsgbGluZUFsaWduT2Zmc2V0c1tjaGFyc1tpXS5saW5lXSkgKiBzY2FsZTtcbiAgICAgICAgYy5wb3NpdGlvbi55ID0gY2hhcnNbaV0ucG9zaXRpb24ueSAqIHNjYWxlO1xuICAgICAgICBjLnNjYWxlLnggPSBjLnNjYWxlLnkgPSBzY2FsZTtcbiAgICAgICAgYy50aW50ID0gdGludDtcblxuICAgICAgICBpZiAoIWMucGFyZW50KVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmFkZENoaWxkKGMpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gcmVtb3ZlIHVubmVjZXNzYXJ5IGNoaWxkcmVuLlxuICAgIGZvciAoaSA9IGxlbkNoYXJzOyBpIDwgdGhpcy5fZ2x5cGhzLmxlbmd0aDsgKytpKVxuICAgIHtcbiAgICAgICAgdGhpcy5yZW1vdmVDaGlsZCh0aGlzLl9nbHlwaHNbaV0pO1xuICAgIH1cblxuICAgIHRoaXMudGV4dFdpZHRoID0gbWF4TGluZVdpZHRoICogc2NhbGU7XG4gICAgdGhpcy50ZXh0SGVpZ2h0ID0gKHBvcy55ICsgZGF0YS5saW5lSGVpZ2h0KSAqIHNjYWxlO1xuICAgIHRoaXMubWF4TGluZUhlaWdodCA9IG1heExpbmVIZWlnaHQgKiBzY2FsZTtcbn07XG5cbi8qKlxuICogVXBkYXRlcyB0aGUgdHJhbnNmb3JtIG9mIHRoaXMgb2JqZWN0XG4gKlxuICogQHByaXZhdGVcbiAqL1xuQml0bWFwVGV4dC5wcm90b3R5cGUudXBkYXRlVHJhbnNmb3JtID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLnZhbGlkYXRlKCk7XG4gICAgdGhpcy5jb250YWluZXJVcGRhdGVUcmFuc2Zvcm0oKTtcbn07XG5cbi8qKlxuICogVmFsaWRhdGVzIHRleHQgYmVmb3JlIGNhbGxpbmcgcGFyZW50J3MgZ2V0TG9jYWxCb3VuZHNcbiAqXG4gKiBAcmV0dXJuIHtQSVhJLlJlY3RhbmdsZX0gVGhlIHJlY3Rhbmd1bGFyIGJvdW5kaW5nIGFyZWFcbiAqL1xuXG5CaXRtYXBUZXh0LnByb3RvdHlwZS5nZXRMb2NhbEJvdW5kcyA9IGZ1bmN0aW9uKClcbntcbiAgICB0aGlzLnZhbGlkYXRlKCk7XG4gICAgcmV0dXJuIGNvcmUuQ29udGFpbmVyLnByb3RvdHlwZS5nZXRMb2NhbEJvdW5kcy5jYWxsKHRoaXMpO1xufTtcblxuLyoqXG4gKiBVcGRhdGVzIHRleHQgd2hlbiBuZWVkZWRcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5CaXRtYXBUZXh0LnByb3RvdHlwZS52YWxpZGF0ZSA9IGZ1bmN0aW9uKClcbntcbiAgICBpZiAodGhpcy5kaXJ0eSlcbiAgICB7XG4gICAgICAgIHRoaXMudXBkYXRlVGV4dCgpO1xuICAgICAgICB0aGlzLmRpcnR5ID0gZmFsc2U7XG4gICAgfVxufTtcblxuQml0bWFwVGV4dC5mb250cyA9IHt9O1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi9jb3JlJyk7XG5cbi8qKlxuICogQSBNb3ZpZUNsaXAgaXMgYSBzaW1wbGUgd2F5IHRvIGRpc3BsYXkgYW4gYW5pbWF0aW9uIGRlcGljdGVkIGJ5IGEgbGlzdCBvZiB0ZXh0dXJlcy5cbiAqXG4gKiBgYGBqc1xuICogdmFyIGFsaWVuSW1hZ2VzID0gW1wiaW1hZ2Vfc2VxdWVuY2VfMDEucG5nXCIsXCJpbWFnZV9zZXF1ZW5jZV8wMi5wbmdcIixcImltYWdlX3NlcXVlbmNlXzAzLnBuZ1wiLFwiaW1hZ2Vfc2VxdWVuY2VfMDQucG5nXCJdO1xuICogdmFyIHRleHR1cmVBcnJheSA9IFtdO1xuICpcbiAqIGZvciAodmFyIGk9MDsgaSA8IDQ7IGkrKylcbiAqIHtcbiAqICAgICAgdmFyIHRleHR1cmUgPSBQSVhJLlRleHR1cmUuZnJvbUltYWdlKGFsaWVuSW1hZ2VzW2ldKTtcbiAqICAgICAgdGV4dHVyZUFycmF5LnB1c2godGV4dHVyZSk7XG4gKiB9O1xuICpcbiAqIHZhciBtYyA9IG5ldyBQSVhJLk1vdmllQ2xpcCh0ZXh0dXJlQXJyYXkpO1xuICogYGBgXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLlNwcml0ZVxuICogQG1lbWJlcm9mIFBJWEkuZXh0cmFzXG4gKiBAcGFyYW0gdGV4dHVyZXMge1BJWEkuVGV4dHVyZVtdfE9iamVjdFtdfSBhbiBhcnJheSBvZiB7QGxpbmsgUElYSS5UZXh0dXJlfSBvciBmcmFtZSBvYmplY3RzIHRoYXQgbWFrZSB1cCB0aGUgYW5pbWF0aW9uXG4gKiBAcGFyYW0gdGV4dHVyZXNbXS50ZXh0dXJlIHtQSVhJLlRleHR1cmV9IHRoZSB7QGxpbmsgUElYSS5UZXh0dXJlfSBvZiB0aGUgZnJhbWVcbiAqIEBwYXJhbSB0ZXh0dXJlc1tdLnRpbWUge251bWJlcn0gdGhlIGR1cmF0aW9uIG9mIHRoZSBmcmFtZSBpbiBtc1xuICovXG5mdW5jdGlvbiBNb3ZpZUNsaXAodGV4dHVyZXMpXG57XG4gICAgY29yZS5TcHJpdGUuY2FsbCh0aGlzLCB0ZXh0dXJlc1swXSBpbnN0YW5jZW9mIGNvcmUuVGV4dHVyZSA/IHRleHR1cmVzWzBdIDogdGV4dHVyZXNbMF0udGV4dHVyZSk7XG5cbiAgICAvKipcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX3RleHR1cmVzID0gbnVsbDtcblxuICAgIC8qKlxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fZHVyYXRpb25zID0gbnVsbDtcblxuICAgIHRoaXMudGV4dHVyZXMgPSB0ZXh0dXJlcztcblxuICAgIC8qKlxuICAgICAqIFRoZSBzcGVlZCB0aGF0IHRoZSBNb3ZpZUNsaXAgd2lsbCBwbGF5IGF0LiBIaWdoZXIgaXMgZmFzdGVyLCBsb3dlciBpcyBzbG93ZXJcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAxXG4gICAgICovXG4gICAgdGhpcy5hbmltYXRpb25TcGVlZCA9IDE7XG5cbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIG9yIG5vdCB0aGUgbW92aWUgY2xpcCByZXBlYXRzIGFmdGVyIHBsYXlpbmcuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqIEBkZWZhdWx0IHRydWVcbiAgICAgKi9cbiAgICB0aGlzLmxvb3AgPSB0cnVlO1xuXG4gICAgLyoqXG4gICAgICogRnVuY3Rpb24gdG8gY2FsbCB3aGVuIGEgTW92aWVDbGlwIGZpbmlzaGVzIHBsYXlpbmdcbiAgICAgKlxuICAgICAqIEBtZXRob2RcbiAgICAgKiBAbWVtYmVyb2YgUElYSS5leHRyYXMuTW92aWVDbGlwI1xuICAgICAqL1xuICAgIHRoaXMub25Db21wbGV0ZSA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBFbGFwc2VkIHRpbWUgc2luY2UgYW5pbWF0aW9uIGhhcyBiZWVuIHN0YXJ0ZWQsIHVzZWQgaW50ZXJuYWxseSB0byBkaXNwbGF5IGN1cnJlbnQgdGV4dHVyZVxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fY3VycmVudFRpbWUgPSAwO1xuXG4gICAgLyoqXG4gICAgICogSW5kaWNhdGVzIGlmIHRoZSBNb3ZpZUNsaXAgaXMgY3VycmVudGx5IHBsYXlpbmdcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICogQHJlYWRvbmx5XG4gICAgICovXG4gICAgdGhpcy5wbGF5aW5nID0gZmFsc2U7XG59XG5cbi8vIGNvbnN0cnVjdG9yXG5Nb3ZpZUNsaXAucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShjb3JlLlNwcml0ZS5wcm90b3R5cGUpO1xuTW92aWVDbGlwLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IE1vdmllQ2xpcDtcbm1vZHVsZS5leHBvcnRzID0gTW92aWVDbGlwO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhNb3ZpZUNsaXAucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogdG90YWxGcmFtZXMgaXMgdGhlIHRvdGFsIG51bWJlciBvZiBmcmFtZXMgaW4gdGhlIE1vdmllQ2xpcC4gVGhpcyBpcyB0aGUgc2FtZSBhcyBudW1iZXIgb2YgdGV4dHVyZXNcbiAgICAgKiBhc3NpZ25lZCB0byB0aGUgTW92aWVDbGlwLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmV4dHJhcy5Nb3ZpZUNsaXAjXG4gICAgICogQGRlZmF1bHQgMFxuICAgICAqIEByZWFkb25seVxuICAgICAqL1xuICAgIHRvdGFsRnJhbWVzOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24oKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fdGV4dHVyZXMubGVuZ3RoO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFRoZSBhcnJheSBvZiB0ZXh0dXJlcyB1c2VkIGZvciB0aGlzIE1vdmllQ2xpcFxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5UZXh0dXJlW119XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZXh0cmFzLk1vdmllQ2xpcCNcbiAgICAgKlxuICAgICAqL1xuICAgIHRleHR1cmVzOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3RleHR1cmVzO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgaWYodmFsdWVbMF0gaW5zdGFuY2VvZiBjb3JlLlRleHR1cmUpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdGhpcy5fdGV4dHVyZXMgPSB2YWx1ZTtcbiAgICAgICAgICAgICAgICB0aGlzLl9kdXJhdGlvbnMgPSBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHRoaXMuX3RleHR1cmVzID0gW107XG4gICAgICAgICAgICAgICAgdGhpcy5fZHVyYXRpb25zID0gW107XG4gICAgICAgICAgICAgICAgZm9yKHZhciBpID0gMDsgaSA8IHZhbHVlLmxlbmd0aDsgaSsrKVxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fdGV4dHVyZXMucHVzaCh2YWx1ZVtpXS50ZXh0dXJlKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fZHVyYXRpb25zLnB1c2godmFsdWVbaV0udGltZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICogVGhlIE1vdmllQ2xpcHMgY3VycmVudCBmcmFtZSBpbmRleFxuICAgICpcbiAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAqIEBtZW1iZXJvZiBQSVhJLmV4dHJhcy5Nb3ZpZUNsaXAjXG4gICAgKiBAcmVhZG9ubHlcbiAgICAqL1xuICAgIGN1cnJlbnRGcmFtZToge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHZhciBjdXJyZW50RnJhbWUgPSBNYXRoLmZsb29yKHRoaXMuX2N1cnJlbnRUaW1lKSAlIHRoaXMuX3RleHR1cmVzLmxlbmd0aDtcbiAgICAgICAgICAgIGlmIChjdXJyZW50RnJhbWUgPCAwKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGN1cnJlbnRGcmFtZSArPSB0aGlzLl90ZXh0dXJlcy5sZW5ndGg7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gY3VycmVudEZyYW1lO1xuICAgICAgICB9XG4gICAgfVxuXG59KTtcblxuLyoqXG4gKiBTdG9wcyB0aGUgTW92aWVDbGlwXG4gKlxuICovXG5Nb3ZpZUNsaXAucHJvdG90eXBlLnN0b3AgPSBmdW5jdGlvbiAoKVxue1xuICAgIGlmKCF0aGlzLnBsYXlpbmcpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5wbGF5aW5nID0gZmFsc2U7XG4gICAgY29yZS50aWNrZXIuc2hhcmVkLnJlbW92ZSh0aGlzLnVwZGF0ZSwgdGhpcyk7XG59O1xuXG4vKipcbiAqIFBsYXlzIHRoZSBNb3ZpZUNsaXBcbiAqXG4gKi9cbk1vdmllQ2xpcC5wcm90b3R5cGUucGxheSA9IGZ1bmN0aW9uICgpXG57XG4gICAgaWYodGhpcy5wbGF5aW5nKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMucGxheWluZyA9IHRydWU7XG4gICAgY29yZS50aWNrZXIuc2hhcmVkLmFkZCh0aGlzLnVwZGF0ZSwgdGhpcyk7XG59O1xuXG4vKipcbiAqIFN0b3BzIHRoZSBNb3ZpZUNsaXAgYW5kIGdvZXMgdG8gYSBzcGVjaWZpYyBmcmFtZVxuICpcbiAqIEBwYXJhbSBmcmFtZU51bWJlciB7bnVtYmVyfSBmcmFtZSBpbmRleCB0byBzdG9wIGF0XG4gKi9cbk1vdmllQ2xpcC5wcm90b3R5cGUuZ290b0FuZFN0b3AgPSBmdW5jdGlvbiAoZnJhbWVOdW1iZXIpXG57XG4gICAgdGhpcy5zdG9wKCk7XG5cbiAgICB0aGlzLl9jdXJyZW50VGltZSA9IGZyYW1lTnVtYmVyO1xuXG4gICAgdGhpcy5fdGV4dHVyZSA9IHRoaXMuX3RleHR1cmVzW3RoaXMuY3VycmVudEZyYW1lXTtcbn07XG5cbi8qKlxuICogR29lcyB0byBhIHNwZWNpZmljIGZyYW1lIGFuZCBiZWdpbnMgcGxheWluZyB0aGUgTW92aWVDbGlwXG4gKlxuICogQHBhcmFtIGZyYW1lTnVtYmVyIHtudW1iZXJ9IGZyYW1lIGluZGV4IHRvIHN0YXJ0IGF0XG4gKi9cbk1vdmllQ2xpcC5wcm90b3R5cGUuZ290b0FuZFBsYXkgPSBmdW5jdGlvbiAoZnJhbWVOdW1iZXIpXG57XG4gICAgdGhpcy5fY3VycmVudFRpbWUgPSBmcmFtZU51bWJlcjtcblxuICAgIHRoaXMucGxheSgpO1xufTtcblxuLypcbiAqIFVwZGF0ZXMgdGhlIG9iamVjdCB0cmFuc2Zvcm0gZm9yIHJlbmRlcmluZ1xuICogQHByaXZhdGVcbiAqL1xuTW92aWVDbGlwLnByb3RvdHlwZS51cGRhdGUgPSBmdW5jdGlvbiAoZGVsdGFUaW1lKVxue1xuICAgIHZhciBlbGFwc2VkID0gdGhpcy5hbmltYXRpb25TcGVlZCAqIGRlbHRhVGltZTtcblxuICAgIGlmICh0aGlzLl9kdXJhdGlvbnMgIT09IG51bGwpXG4gICAge1xuICAgICAgICB2YXIgbGFnID0gdGhpcy5fY3VycmVudFRpbWUgJSAxICogdGhpcy5fZHVyYXRpb25zW3RoaXMuY3VycmVudEZyYW1lXTtcblxuICAgICAgICBsYWcgKz0gZWxhcHNlZCAvIDYwICogMTAwMDtcblxuICAgICAgICB3aGlsZSAobGFnIDwgMClcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5fY3VycmVudFRpbWUtLTtcbiAgICAgICAgICAgIGxhZyArPSB0aGlzLl9kdXJhdGlvbnNbdGhpcy5jdXJyZW50RnJhbWVdO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIHNpZ24gPSBNYXRoLnNpZ24odGhpcy5hbmltYXRpb25TcGVlZCAqIGRlbHRhVGltZSk7XG4gICAgICAgIHRoaXMuX2N1cnJlbnRUaW1lID0gTWF0aC5mbG9vcih0aGlzLl9jdXJyZW50VGltZSk7XG5cbiAgICAgICAgd2hpbGUgKGxhZyA+PSB0aGlzLl9kdXJhdGlvbnNbdGhpcy5jdXJyZW50RnJhbWVdKVxuICAgICAgICB7XG4gICAgICAgICAgICBsYWcgLT0gdGhpcy5fZHVyYXRpb25zW3RoaXMuY3VycmVudEZyYW1lXSAqIHNpZ247XG4gICAgICAgICAgICB0aGlzLl9jdXJyZW50VGltZSArPSBzaWduO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fY3VycmVudFRpbWUgKz0gbGFnIC8gdGhpcy5fZHVyYXRpb25zW3RoaXMuY3VycmVudEZyYW1lXTtcbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgdGhpcy5fY3VycmVudFRpbWUgKz0gZWxhcHNlZDtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5fY3VycmVudFRpbWUgPCAwICYmICF0aGlzLmxvb3ApXG4gICAge1xuICAgICAgICB0aGlzLmdvdG9BbmRTdG9wKDApO1xuXG4gICAgICAgIGlmICh0aGlzLm9uQ29tcGxldGUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMub25Db21wbGV0ZSgpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGVsc2UgaWYgKHRoaXMuX2N1cnJlbnRUaW1lID49IHRoaXMuX3RleHR1cmVzLmxlbmd0aCAmJiAhdGhpcy5sb29wKVxuICAgIHtcbiAgICAgICAgdGhpcy5nb3RvQW5kU3RvcCh0aGlzLl90ZXh0dXJlcy5sZW5ndGggLSAxKTtcblxuICAgICAgICBpZiAodGhpcy5vbkNvbXBsZXRlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLm9uQ29tcGxldGUoKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICB0aGlzLl90ZXh0dXJlID0gdGhpcy5fdGV4dHVyZXNbdGhpcy5jdXJyZW50RnJhbWVdO1xuICAgIH1cblxufTtcblxuLypcbiAqIFN0b3BzIHRoZSBNb3ZpZUNsaXAgYW5kIGRlc3Ryb3lzIGl0XG4gKlxuICovXG5Nb3ZpZUNsaXAucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoIClcbntcbiAgICB0aGlzLnN0b3AoKTtcbiAgICBjb3JlLlNwcml0ZS5wcm90b3R5cGUuZGVzdHJveS5jYWxsKHRoaXMpO1xufTtcblxuLyoqXG4gKiBBIHNob3J0IGhhbmQgd2F5IG9mIGNyZWF0aW5nIGEgbW92aWVjbGlwIGZyb20gYW4gYXJyYXkgb2YgZnJhbWUgaWRzXG4gKlxuICogQHN0YXRpY1xuICogQHBhcmFtIGZyYW1lcyB7c3RyaW5nW119IHRoZSBhcnJheSBvZiBmcmFtZXMgaWRzIHRoZSBtb3ZpZWNsaXAgd2lsbCB1c2UgYXMgaXRzIHRleHR1cmUgZnJhbWVzXG4gKi9cbk1vdmllQ2xpcC5mcm9tRnJhbWVzID0gZnVuY3Rpb24gKGZyYW1lcylcbntcbiAgICB2YXIgdGV4dHVyZXMgPSBbXTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZnJhbWVzLmxlbmd0aDsgKytpKVxuICAgIHtcbiAgICAgICAgdGV4dHVyZXMucHVzaChuZXcgY29yZS5UZXh0dXJlLmZyb21GcmFtZShmcmFtZXNbaV0pKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IE1vdmllQ2xpcCh0ZXh0dXJlcyk7XG59O1xuXG4vKipcbiAqIEEgc2hvcnQgaGFuZCB3YXkgb2YgY3JlYXRpbmcgYSBtb3ZpZWNsaXAgZnJvbSBhbiBhcnJheSBvZiBpbWFnZSBpZHNcbiAqXG4gKiBAc3RhdGljXG4gKiBAcGFyYW0gaW1hZ2VzIHtzdHJpbmdbXX0gdGhlIGFycmF5IG9mIGltYWdlIHVybHMgdGhlIG1vdmllY2xpcCB3aWxsIHVzZSBhcyBpdHMgdGV4dHVyZSBmcmFtZXNcbiAqL1xuTW92aWVDbGlwLmZyb21JbWFnZXMgPSBmdW5jdGlvbiAoaW1hZ2VzKVxue1xuICAgIHZhciB0ZXh0dXJlcyA9IFtdO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBpbWFnZXMubGVuZ3RoOyArK2kpXG4gICAge1xuICAgICAgICB0ZXh0dXJlcy5wdXNoKG5ldyBjb3JlLlRleHR1cmUuZnJvbUltYWdlKGltYWdlc1tpXSkpO1xuICAgIH1cblxuICAgIHJldHVybiBuZXcgTW92aWVDbGlwKHRleHR1cmVzKTtcbn07IiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi9jb3JlJyksXG4gICAgLy8gYSBzcHJpdGUgdXNlIGRmb3IgcmVuZGVyaW5nIHRleHR1cmVzLi5cbiAgICB0ZW1wUG9pbnQgPSBuZXcgY29yZS5Qb2ludCgpLFxuICAgIENhbnZhc1RpbnRlciA9IHJlcXVpcmUoJy4uL2NvcmUvcmVuZGVyZXJzL2NhbnZhcy91dGlscy9DYW52YXNUaW50ZXInKTtcblxuLyoqXG4gKiBBIHRpbGluZyBzcHJpdGUgaXMgYSBmYXN0IHdheSBvZiByZW5kZXJpbmcgYSB0aWxpbmcgaW1hZ2VcbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuU3ByaXRlXG4gKiBAbWVtYmVyb2YgUElYSS5leHRyYXNcbiAqIEBwYXJhbSB0ZXh0dXJlIHtUZXh0dXJlfSB0aGUgdGV4dHVyZSBvZiB0aGUgdGlsaW5nIHNwcml0ZVxuICogQHBhcmFtIHdpZHRoIHtudW1iZXJ9ICB0aGUgd2lkdGggb2YgdGhlIHRpbGluZyBzcHJpdGVcbiAqIEBwYXJhbSBoZWlnaHQge251bWJlcn0gdGhlIGhlaWdodCBvZiB0aGUgdGlsaW5nIHNwcml0ZVxuICovXG5mdW5jdGlvbiBUaWxpbmdTcHJpdGUodGV4dHVyZSwgd2lkdGgsIGhlaWdodClcbntcbiAgICBjb3JlLlNwcml0ZS5jYWxsKHRoaXMsIHRleHR1cmUpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHNjYWxpbmcgb2YgdGhlIGltYWdlIHRoYXQgaXMgYmVpbmcgdGlsZWRcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuUG9pbnR9XG4gICAgICovXG4gICAgdGhpcy50aWxlU2NhbGUgPSBuZXcgY29yZS5Qb2ludCgxLDEpO1xuXG5cbiAgICAvKipcbiAgICAgKiBUaGUgb2Zmc2V0IHBvc2l0aW9uIG9mIHRoZSBpbWFnZSB0aGF0IGlzIGJlaW5nIHRpbGVkXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlBvaW50fVxuICAgICAqL1xuICAgIHRoaXMudGlsZVBvc2l0aW9uID0gbmV3IGNvcmUuUG9pbnQoMCwwKTtcblxuICAgIC8vLy8vIHByaXZhdGVcblxuICAgIC8qKlxuICAgICAqIFRoZSB3aXRoIG9mIHRoZSB0aWxpbmcgc3ByaXRlXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl93aWR0aCA9IHdpZHRoIHx8IDEwMDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBoZWlnaHQgb2YgdGhlIHRpbGluZyBzcHJpdGVcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX2hlaWdodCA9IGhlaWdodCB8fCAxMDA7XG5cbiAgICAvKipcbiAgICAgKiBBbiBpbnRlcm5hbCBXZWJHTCBVViBjYWNoZS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuVGV4dHVyZVV2c31cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX3V2cyA9IG5ldyBjb3JlLlRleHR1cmVVdnMoKTtcblxuICAgIHRoaXMuX2NhbnZhc1BhdHRlcm4gPSBudWxsO1xuXG4gICAgLy9UT0RPIG1vdmUuLlxuICAgIHRoaXMuc2hhZGVyID0gbmV3IGNvcmUuQWJzdHJhY3RGaWx0ZXIoXG5cbiAgICAgIFtcbiAgICAgICAgJ3ByZWNpc2lvbiBsb3dwIGZsb2F0OycsXG4gICAgICAgICdhdHRyaWJ1dGUgdmVjMiBhVmVydGV4UG9zaXRpb247JyxcbiAgICAgICAgJ2F0dHJpYnV0ZSB2ZWMyIGFUZXh0dXJlQ29vcmQ7JyxcbiAgICAgICAgJ2F0dHJpYnV0ZSB2ZWM0IGFDb2xvcjsnLFxuXG4gICAgICAgICd1bmlmb3JtIG1hdDMgcHJvamVjdGlvbk1hdHJpeDsnLFxuXG4gICAgICAgICd1bmlmb3JtIHZlYzQgdUZyYW1lOycsXG4gICAgICAgICd1bmlmb3JtIHZlYzQgdVRyYW5zZm9ybTsnLFxuXG4gICAgICAgICd2YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDsnLFxuICAgICAgICAndmFyeWluZyB2ZWM0IHZDb2xvcjsnLFxuXG4gICAgICAgICd2b2lkIG1haW4odm9pZCl7JyxcbiAgICAgICAgJyAgIGdsX1Bvc2l0aW9uID0gdmVjNCgocHJvamVjdGlvbk1hdHJpeCAqIHZlYzMoYVZlcnRleFBvc2l0aW9uLCAxLjApKS54eSwgMC4wLCAxLjApOycsXG5cbiAgICAgICAgJyAgIHZlYzIgY29vcmQgPSBhVGV4dHVyZUNvb3JkOycsXG4gICAgICAgICcgICBjb29yZCAtPSB1VHJhbnNmb3JtLnh5OycsXG4gICAgICAgICcgICBjb29yZCAvPSB1VHJhbnNmb3JtLnp3OycsXG4gICAgICAgICcgICB2VGV4dHVyZUNvb3JkID0gY29vcmQ7JyxcblxuICAgICAgICAnICAgdkNvbG9yID0gdmVjNChhQ29sb3IucmdiICogYUNvbG9yLmEsIGFDb2xvci5hKTsnLFxuICAgICAgICAnfSdcbiAgICAgIF0uam9pbignXFxuJyksXG4gICAgICBbXG4gICAgICAgICdwcmVjaXNpb24gbG93cCBmbG9hdDsnLFxuXG4gICAgICAgICd2YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDsnLFxuICAgICAgICAndmFyeWluZyB2ZWM0IHZDb2xvcjsnLFxuXG4gICAgICAgICd1bmlmb3JtIHNhbXBsZXIyRCB1U2FtcGxlcjsnLFxuICAgICAgICAndW5pZm9ybSB2ZWM0IHVGcmFtZTsnLFxuICAgICAgICAndW5pZm9ybSB2ZWMyIHVQaXhlbFNpemU7JyxcblxuICAgICAgICAndm9pZCBtYWluKHZvaWQpeycsXG5cbiAgICAgICAgJyAgIHZlYzIgY29vcmQgPSBtb2QodlRleHR1cmVDb29yZCwgdUZyYW1lLnp3KTsnLFxuICAgICAgICAnICAgY29vcmQgPSBjbGFtcChjb29yZCwgdVBpeGVsU2l6ZSwgdUZyYW1lLnp3IC0gdVBpeGVsU2l6ZSk7JyxcbiAgICAgICAgJyAgIGNvb3JkICs9IHVGcmFtZS54eTsnLFxuXG4gICAgICAgICcgICBnbF9GcmFnQ29sb3IgPSAgdGV4dHVyZTJEKHVTYW1wbGVyLCBjb29yZCkgKiB2Q29sb3IgOycsXG4gICAgICAgICd9J1xuICAgICAgXS5qb2luKCdcXG4nKSxcblxuICAgICAgICAgICAgLy8gc2V0IHRoZSB1bmlmb3Jtc1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHVGcmFtZTogeyB0eXBlOiAnNGZ2JywgdmFsdWU6IFswLDAsMSwxXSB9LFxuICAgICAgICAgICAgICAgIHVUcmFuc2Zvcm06IHsgdHlwZTogJzRmdicsIHZhbHVlOiBbMCwwLDEsMV0gfSxcbiAgICAgICAgICAgICAgICB1UGl4ZWxTaXplIDogeyB0eXBlIDogJzJmdicsIHZhbHVlOiBbMSwgMV19XG4gICAgICAgICAgICB9XG4gICAgICApO1xufVxuXG5UaWxpbmdTcHJpdGUucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShjb3JlLlNwcml0ZS5wcm90b3R5cGUpO1xuVGlsaW5nU3ByaXRlLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFRpbGluZ1Nwcml0ZTtcbm1vZHVsZS5leHBvcnRzID0gVGlsaW5nU3ByaXRlO1xuXG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKFRpbGluZ1Nwcml0ZS5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBUaGUgd2lkdGggb2YgdGhlIHNwcml0ZSwgc2V0dGluZyB0aGlzIHdpbGwgYWN0dWFsbHkgbW9kaWZ5IHRoZSBzY2FsZSB0byBhY2hpZXZlIHRoZSB2YWx1ZSBzZXRcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5leHRyYXMuVGlsaW5nU3ByaXRlI1xuICAgICAqL1xuICAgIHdpZHRoOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3dpZHRoO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5fd2lkdGggPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBUaGUgaGVpZ2h0IG9mIHRoZSBUaWxpbmdTcHJpdGUsIHNldHRpbmcgdGhpcyB3aWxsIGFjdHVhbGx5IG1vZGlmeSB0aGUgc2NhbGUgdG8gYWNoaWV2ZSB0aGUgdmFsdWUgc2V0XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZXh0cmFzLlRpbGluZ1Nwcml0ZSNcbiAgICAgKi9cbiAgICBoZWlnaHQ6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5faGVpZ2h0O1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5faGVpZ2h0ID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG59KTtcblxuVGlsaW5nU3ByaXRlLnByb3RvdHlwZS5fb25UZXh0dXJlVXBkYXRlID0gZnVuY3Rpb24gKClcbntcbiAgICByZXR1cm47XG59O1xuXG5cbi8qKlxuICogUmVuZGVycyB0aGUgb2JqZWN0IHVzaW5nIHRoZSBXZWJHTCByZW5kZXJlclxuICpcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5XZWJHTFJlbmRlcmVyfVxuICogQHByaXZhdGVcbiAqL1xuVGlsaW5nU3ByaXRlLnByb3RvdHlwZS5fcmVuZGVyV2ViR0wgPSBmdW5jdGlvbiAocmVuZGVyZXIpXG57XG4gICAgLy8gdHdlYWsgb3VyIHRleHR1cmUgdGVtcG9yYXJpbHkuLlxuICAgIHZhciB0ZXh0dXJlID0gdGhpcy5fdGV4dHVyZTtcblxuICAgIGlmKCF0ZXh0dXJlIHx8ICF0ZXh0dXJlLl91dnMpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFyIHRlbXBVdnMgPSB0ZXh0dXJlLl91dnMsXG4gICAgICAgIHRlbXBXaWR0aCA9IHRleHR1cmUuX2ZyYW1lLndpZHRoLFxuICAgICAgICB0ZW1wSGVpZ2h0ID0gdGV4dHVyZS5fZnJhbWUuaGVpZ2h0LFxuICAgICAgICB0dyA9IHRleHR1cmUuYmFzZVRleHR1cmUud2lkdGgsXG4gICAgICAgIHRoID0gdGV4dHVyZS5iYXNlVGV4dHVyZS5oZWlnaHQ7XG5cbiAgICB0ZXh0dXJlLl91dnMgPSB0aGlzLl91dnM7XG4gICAgdGV4dHVyZS5fZnJhbWUud2lkdGggPSB0aGlzLndpZHRoO1xuICAgIHRleHR1cmUuX2ZyYW1lLmhlaWdodCA9IHRoaXMuaGVpZ2h0O1xuXG4gICAgdGhpcy5zaGFkZXIudW5pZm9ybXMudVBpeGVsU2l6ZS52YWx1ZVswXSA9IDEuMC90dztcbiAgICB0aGlzLnNoYWRlci51bmlmb3Jtcy51UGl4ZWxTaXplLnZhbHVlWzFdID0gMS4wL3RoO1xuXG4gICAgdGhpcy5zaGFkZXIudW5pZm9ybXMudUZyYW1lLnZhbHVlWzBdID0gdGVtcFV2cy54MDtcbiAgICB0aGlzLnNoYWRlci51bmlmb3Jtcy51RnJhbWUudmFsdWVbMV0gPSB0ZW1wVXZzLnkwO1xuICAgIHRoaXMuc2hhZGVyLnVuaWZvcm1zLnVGcmFtZS52YWx1ZVsyXSA9IHRlbXBVdnMueDEgLSB0ZW1wVXZzLngwO1xuICAgIHRoaXMuc2hhZGVyLnVuaWZvcm1zLnVGcmFtZS52YWx1ZVszXSA9IHRlbXBVdnMueTIgLSB0ZW1wVXZzLnkwO1xuXG4gICAgdGhpcy5zaGFkZXIudW5pZm9ybXMudVRyYW5zZm9ybS52YWx1ZVswXSA9ICh0aGlzLnRpbGVQb3NpdGlvbi54ICUgKHRlbXBXaWR0aCAqIHRoaXMudGlsZVNjYWxlLngpKSAvIHRoaXMuX3dpZHRoO1xuICAgIHRoaXMuc2hhZGVyLnVuaWZvcm1zLnVUcmFuc2Zvcm0udmFsdWVbMV0gPSAodGhpcy50aWxlUG9zaXRpb24ueSAlICh0ZW1wSGVpZ2h0ICogdGhpcy50aWxlU2NhbGUueSkpIC8gdGhpcy5faGVpZ2h0O1xuICAgIHRoaXMuc2hhZGVyLnVuaWZvcm1zLnVUcmFuc2Zvcm0udmFsdWVbMl0gPSAoIHR3IC8gdGhpcy5fd2lkdGggKSAqIHRoaXMudGlsZVNjYWxlLng7XG4gICAgdGhpcy5zaGFkZXIudW5pZm9ybXMudVRyYW5zZm9ybS52YWx1ZVszXSA9ICggdGggLyB0aGlzLl9oZWlnaHQgKSAqIHRoaXMudGlsZVNjYWxlLnk7XG5cbiAgICByZW5kZXJlci5zZXRPYmplY3RSZW5kZXJlcihyZW5kZXJlci5wbHVnaW5zLnNwcml0ZSk7XG4gICAgcmVuZGVyZXIucGx1Z2lucy5zcHJpdGUucmVuZGVyKHRoaXMpO1xuXG4gICAgdGV4dHVyZS5fdXZzID0gdGVtcFV2cztcbiAgICB0ZXh0dXJlLl9mcmFtZS53aWR0aCA9IHRlbXBXaWR0aDtcbiAgICB0ZXh0dXJlLl9mcmFtZS5oZWlnaHQgPSB0ZW1wSGVpZ2h0O1xufTtcblxuLyoqXG4gKiBSZW5kZXJzIHRoZSBvYmplY3QgdXNpbmcgdGhlIENhbnZhcyByZW5kZXJlclxuICpcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5DYW52YXNSZW5kZXJlcn0gYSByZWZlcmVuY2UgdG8gdGhlIGNhbnZhcyByZW5kZXJlclxuICogQHByaXZhdGVcbiAqL1xuVGlsaW5nU3ByaXRlLnByb3RvdHlwZS5fcmVuZGVyQ2FudmFzID0gZnVuY3Rpb24gKHJlbmRlcmVyKVxue1xuICAgIHZhciB0ZXh0dXJlID0gdGhpcy5fdGV4dHVyZTtcblxuICAgIGlmICghdGV4dHVyZS5iYXNlVGV4dHVyZS5oYXNMb2FkZWQpXG4gICAge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHZhciBjb250ZXh0ID0gcmVuZGVyZXIuY29udGV4dCxcbiAgICAgICAgdHJhbnNmb3JtID0gdGhpcy53b3JsZFRyYW5zZm9ybSxcbiAgICAgICAgcmVzb2x1dGlvbiA9IHJlbmRlcmVyLnJlc29sdXRpb24sXG4gICAgICAgIGJhc2VUZXh0dXJlID0gdGV4dHVyZS5iYXNlVGV4dHVyZSxcbiAgICAgICAgbW9kWCA9ICh0aGlzLnRpbGVQb3NpdGlvbi54IC8gdGhpcy50aWxlU2NhbGUueCkgJSB0ZXh0dXJlLl9mcmFtZS53aWR0aCxcbiAgICAgICAgbW9kWSA9ICh0aGlzLnRpbGVQb3NpdGlvbi55IC8gdGhpcy50aWxlU2NhbGUueSkgJSB0ZXh0dXJlLl9mcmFtZS5oZWlnaHQ7XG5cbiAgICAvLyBjcmVhdGUgYSBuaWNlIHNoaW55IHBhdHRlcm4hXG4gICAgLy8gVE9ETyB0aGlzIG5lZWRzIHRvIGJlIHJlZnJlc2hlZCBpZiB0ZXh0dXJlIGNoYW5nZXMuLlxuICAgIGlmKCF0aGlzLl9jYW52YXNQYXR0ZXJuKVxuICAgIHtcbiAgICAgICAgLy8gY3V0IGFuIG9iamVjdCBmcm9tIGEgc3ByaXRlc2hlZXQuLlxuICAgICAgICB2YXIgdGVtcENhbnZhcyA9IG5ldyBjb3JlLkNhbnZhc0J1ZmZlcih0ZXh0dXJlLl9mcmFtZS53aWR0aCwgdGV4dHVyZS5fZnJhbWUuaGVpZ2h0KTtcblxuICAgICAgICAvLyBUaW50IHRoZSB0aWxpbmcgc3ByaXRlXG4gICAgICAgIGlmICh0aGlzLnRpbnQgIT09IDB4RkZGRkZGKVxuICAgICAgICB7XG4gICAgICAgICAgICBpZiAodGhpcy5jYWNoZWRUaW50ICE9PSB0aGlzLnRpbnQpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdGhpcy5jYWNoZWRUaW50ID0gdGhpcy50aW50O1xuXG4gICAgICAgICAgICAgICAgdGhpcy50aW50ZWRUZXh0dXJlID0gQ2FudmFzVGludGVyLmdldFRpbnRlZFRleHR1cmUodGhpcywgdGhpcy50aW50KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRlbXBDYW52YXMuY29udGV4dC5kcmF3SW1hZ2UodGhpcy50aW50ZWRUZXh0dXJlLCAwLCAwKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRlbXBDYW52YXMuY29udGV4dC5kcmF3SW1hZ2UoYmFzZVRleHR1cmUuc291cmNlLCAtdGV4dHVyZS5fZnJhbWUueCwgLXRleHR1cmUuX2ZyYW1lLnkpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX2NhbnZhc1BhdHRlcm4gPSB0ZW1wQ2FudmFzLmNvbnRleHQuY3JlYXRlUGF0dGVybiggdGVtcENhbnZhcy5jYW52YXMsICdyZXBlYXQnICk7XG4gICAgfVxuXG4gICAgLy8gc2V0IGNvbnRleHQgc3RhdGUuLlxuICAgIGNvbnRleHQuZ2xvYmFsQWxwaGEgPSB0aGlzLndvcmxkQWxwaGE7XG4gICAgY29udGV4dC5zZXRUcmFuc2Zvcm0odHJhbnNmb3JtLmEgKiByZXNvbHV0aW9uLFxuICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2Zvcm0uYiAqIHJlc29sdXRpb24sXG4gICAgICAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybS5jICogcmVzb2x1dGlvbixcbiAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtLmQgKiByZXNvbHV0aW9uLFxuICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2Zvcm0udHggKiByZXNvbHV0aW9uLFxuICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2Zvcm0udHkgKiByZXNvbHV0aW9uKTtcblxuICAgIC8vIFRPRE8gLSB0aGlzIHNob3VsZCBiZSByb2xsZWQgaW50byB0aGUgc2V0VHJhbnNmb3JtIGFib3ZlLi5cbiAgICBjb250ZXh0LnNjYWxlKHRoaXMudGlsZVNjYWxlLngsdGhpcy50aWxlU2NhbGUueSk7XG5cbiAgICBjb250ZXh0LnRyYW5zbGF0ZShtb2RYICsgKHRoaXMuYW5jaG9yLnggKiAtdGhpcy5fd2lkdGggKSxcbiAgICAgICAgICAgICAgICAgICAgICBtb2RZICsgKHRoaXMuYW5jaG9yLnkgKiAtdGhpcy5faGVpZ2h0KSk7XG5cbiAgICAvLyBjaGVjayBibGVuZCBtb2RlXG4gICAgdmFyIGNvbXBvc2l0ZU9wZXJhdGlvbiA9IHJlbmRlcmVyLmJsZW5kTW9kZXNbdGhpcy5ibGVuZE1vZGVdO1xuICAgIGlmIChjb21wb3NpdGVPcGVyYXRpb24gIT09IHJlbmRlcmVyLmNvbnRleHQuZ2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uKVxuICAgIHtcbiAgICAgICAgY29udGV4dC5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb24gPSBjb21wb3NpdGVPcGVyYXRpb247XG4gICAgfVxuXG4gICAgLy8gZmlsbCB0aGUgcGF0dGVybiFcbiAgICBjb250ZXh0LmZpbGxTdHlsZSA9IHRoaXMuX2NhbnZhc1BhdHRlcm47XG4gICAgY29udGV4dC5maWxsUmVjdCgtbW9kWCxcbiAgICAgICAgICAgICAgICAgICAgIC1tb2RZLFxuICAgICAgICAgICAgICAgICAgICAgdGhpcy5fd2lkdGggLyB0aGlzLnRpbGVTY2FsZS54LFxuICAgICAgICAgICAgICAgICAgICAgdGhpcy5faGVpZ2h0IC8gdGhpcy50aWxlU2NhbGUueSk7XG5cblxuICAgIC8vVE9ETyAtIHByZXR0eSBzdXJlIHRoaXMgY2FuIGJlIGRlbGV0ZWQuLi5cbiAgICAvL2NvbnRleHQudHJhbnNsYXRlKC10aGlzLnRpbGVQb3NpdGlvbi54ICsgKHRoaXMuYW5jaG9yLnggKiB0aGlzLl93aWR0aCksIC10aGlzLnRpbGVQb3NpdGlvbi55ICsgKHRoaXMuYW5jaG9yLnkgKiB0aGlzLl9oZWlnaHQpKTtcbiAgICAvL2NvbnRleHQuc2NhbGUoMSAvIHRoaXMudGlsZVNjYWxlLngsIDEgLyB0aGlzLnRpbGVTY2FsZS55KTtcbn07XG5cblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBmcmFtaW5nIHJlY3RhbmdsZSBvZiB0aGUgc3ByaXRlIGFzIGEgUmVjdGFuZ2xlIG9iamVjdFxuKlxuICogQHJldHVybiB7UElYSS5SZWN0YW5nbGV9IHRoZSBmcmFtaW5nIHJlY3RhbmdsZVxuICovXG5UaWxpbmdTcHJpdGUucHJvdG90eXBlLmdldEJvdW5kcyA9IGZ1bmN0aW9uICgpXG57XG4gICAgdmFyIHdpZHRoID0gdGhpcy5fd2lkdGg7XG4gICAgdmFyIGhlaWdodCA9IHRoaXMuX2hlaWdodDtcblxuICAgIHZhciB3MCA9IHdpZHRoICogKDEtdGhpcy5hbmNob3IueCk7XG4gICAgdmFyIHcxID0gd2lkdGggKiAtdGhpcy5hbmNob3IueDtcblxuICAgIHZhciBoMCA9IGhlaWdodCAqICgxLXRoaXMuYW5jaG9yLnkpO1xuICAgIHZhciBoMSA9IGhlaWdodCAqIC10aGlzLmFuY2hvci55O1xuXG4gICAgdmFyIHdvcmxkVHJhbnNmb3JtID0gdGhpcy53b3JsZFRyYW5zZm9ybTtcblxuICAgIHZhciBhID0gd29ybGRUcmFuc2Zvcm0uYTtcbiAgICB2YXIgYiA9IHdvcmxkVHJhbnNmb3JtLmI7XG4gICAgdmFyIGMgPSB3b3JsZFRyYW5zZm9ybS5jO1xuICAgIHZhciBkID0gd29ybGRUcmFuc2Zvcm0uZDtcbiAgICB2YXIgdHggPSB3b3JsZFRyYW5zZm9ybS50eDtcbiAgICB2YXIgdHkgPSB3b3JsZFRyYW5zZm9ybS50eTtcblxuICAgIHZhciB4MSA9IGEgKiB3MSArIGMgKiBoMSArIHR4O1xuICAgIHZhciB5MSA9IGQgKiBoMSArIGIgKiB3MSArIHR5O1xuXG4gICAgdmFyIHgyID0gYSAqIHcwICsgYyAqIGgxICsgdHg7XG4gICAgdmFyIHkyID0gZCAqIGgxICsgYiAqIHcwICsgdHk7XG5cbiAgICB2YXIgeDMgPSBhICogdzAgKyBjICogaDAgKyB0eDtcbiAgICB2YXIgeTMgPSBkICogaDAgKyBiICogdzAgKyB0eTtcblxuICAgIHZhciB4NCA9ICBhICogdzEgKyBjICogaDAgKyB0eDtcbiAgICB2YXIgeTQgPSAgZCAqIGgwICsgYiAqIHcxICsgdHk7XG5cbiAgICB2YXIgbWluWCxcbiAgICAgICAgbWF4WCxcbiAgICAgICAgbWluWSxcbiAgICAgICAgbWF4WTtcblxuICAgIG1pblggPSB4MTtcbiAgICBtaW5YID0geDIgPCBtaW5YID8geDIgOiBtaW5YO1xuICAgIG1pblggPSB4MyA8IG1pblggPyB4MyA6IG1pblg7XG4gICAgbWluWCA9IHg0IDwgbWluWCA/IHg0IDogbWluWDtcblxuICAgIG1pblkgPSB5MTtcbiAgICBtaW5ZID0geTIgPCBtaW5ZID8geTIgOiBtaW5ZO1xuICAgIG1pblkgPSB5MyA8IG1pblkgPyB5MyA6IG1pblk7XG4gICAgbWluWSA9IHk0IDwgbWluWSA/IHk0IDogbWluWTtcblxuICAgIG1heFggPSB4MTtcbiAgICBtYXhYID0geDIgPiBtYXhYID8geDIgOiBtYXhYO1xuICAgIG1heFggPSB4MyA+IG1heFggPyB4MyA6IG1heFg7XG4gICAgbWF4WCA9IHg0ID4gbWF4WCA/IHg0IDogbWF4WDtcblxuICAgIG1heFkgPSB5MTtcbiAgICBtYXhZID0geTIgPiBtYXhZID8geTIgOiBtYXhZO1xuICAgIG1heFkgPSB5MyA+IG1heFkgPyB5MyA6IG1heFk7XG4gICAgbWF4WSA9IHk0ID4gbWF4WSA/IHk0IDogbWF4WTtcblxuICAgIHZhciBib3VuZHMgPSB0aGlzLl9ib3VuZHM7XG5cbiAgICBib3VuZHMueCA9IG1pblg7XG4gICAgYm91bmRzLndpZHRoID0gbWF4WCAtIG1pblg7XG5cbiAgICBib3VuZHMueSA9IG1pblk7XG4gICAgYm91bmRzLmhlaWdodCA9IG1heFkgLSBtaW5ZO1xuXG4gICAgLy8gc3RvcmUgYSByZWZlcmVuY2Ugc28gdGhhdCBpZiB0aGlzIGZ1bmN0aW9uIGdldHMgY2FsbGVkIGFnYWluIGluIHRoZSByZW5kZXIgY3ljbGUgd2UgZG8gbm90IGhhdmUgdG8gcmVjYWxjdWxhdGVcbiAgICB0aGlzLl9jdXJyZW50Qm91bmRzID0gYm91bmRzO1xuXG4gICAgcmV0dXJuIGJvdW5kcztcbn07XG5cbi8qKlxuICogQ2hlY2tzIGlmIGEgcG9pbnQgaXMgaW5zaWRlIHRoaXMgdGlsaW5nIHNwcml0ZVxuICogQHBhcmFtIHBvaW50IHtQSVhJLlBvaW50fSB0aGUgcG9pbnQgdG8gY2hlY2tcbiAqL1xuVGlsaW5nU3ByaXRlLnByb3RvdHlwZS5jb250YWluc1BvaW50ID0gZnVuY3Rpb24oIHBvaW50IClcbntcbiAgICB0aGlzLndvcmxkVHJhbnNmb3JtLmFwcGx5SW52ZXJzZShwb2ludCwgIHRlbXBQb2ludCk7XG5cbiAgICB2YXIgd2lkdGggPSB0aGlzLl93aWR0aDtcbiAgICB2YXIgaGVpZ2h0ID0gdGhpcy5faGVpZ2h0O1xuICAgIHZhciB4MSA9IC13aWR0aCAqIHRoaXMuYW5jaG9yLng7XG4gICAgdmFyIHkxO1xuXG4gICAgaWYgKCB0ZW1wUG9pbnQueCA+IHgxICYmIHRlbXBQb2ludC54IDwgeDEgKyB3aWR0aCApXG4gICAge1xuICAgICAgICB5MSA9IC1oZWlnaHQgKiB0aGlzLmFuY2hvci55O1xuXG4gICAgICAgIGlmICggdGVtcFBvaW50LnkgPiB5MSAmJiB0ZW1wUG9pbnQueSA8IHkxICsgaGVpZ2h0IClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2U7XG59O1xuXG4vKipcbiAqIERlc3Ryb3lzIHRoaXMgdGlsaW5nIHNwcml0ZVxuICpcbiAqL1xuVGlsaW5nU3ByaXRlLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKCkge1xuICAgIGNvcmUuU3ByaXRlLnByb3RvdHlwZS5kZXN0cm95LmNhbGwodGhpcyk7XG5cbiAgICB0aGlzLnRpbGVTY2FsZSA9IG51bGw7XG4gICAgdGhpcy5fdGlsZVNjYWxlT2Zmc2V0ID0gbnVsbDtcbiAgICB0aGlzLnRpbGVQb3NpdGlvbiA9IG51bGw7XG5cbiAgICB0aGlzLl91dnMgPSBudWxsO1xufTtcblxuLyoqXG4gKiBIZWxwZXIgZnVuY3Rpb24gdGhhdCBjcmVhdGVzIGEgdGlsaW5nIHNwcml0ZSB0aGF0IHdpbGwgdXNlIGEgdGV4dHVyZSBmcm9tIHRoZSBUZXh0dXJlQ2FjaGUgYmFzZWQgb24gdGhlIGZyYW1lSWRcbiAqIFRoZSBmcmFtZSBpZHMgYXJlIGNyZWF0ZWQgd2hlbiBhIFRleHR1cmUgcGFja2VyIGZpbGUgaGFzIGJlZW4gbG9hZGVkXG4gKlxuICogQHN0YXRpY1xuICogQHBhcmFtIGZyYW1lSWQge3N0cmluZ30gVGhlIGZyYW1lIElkIG9mIHRoZSB0ZXh0dXJlIGluIHRoZSBjYWNoZVxuICogQHJldHVybiB7UElYSS5leHRyYXMuVGlsaW5nU3ByaXRlfSBBIG5ldyBUaWxpbmdTcHJpdGUgdXNpbmcgYSB0ZXh0dXJlIGZyb20gdGhlIHRleHR1cmUgY2FjaGUgbWF0Y2hpbmcgdGhlIGZyYW1lSWRcbiAqIEBwYXJhbSB3aWR0aCB7bnVtYmVyfSAgdGhlIHdpZHRoIG9mIHRoZSB0aWxpbmcgc3ByaXRlXG4gKiBAcGFyYW0gaGVpZ2h0IHtudW1iZXJ9IHRoZSBoZWlnaHQgb2YgdGhlIHRpbGluZyBzcHJpdGVcbiAqL1xuVGlsaW5nU3ByaXRlLmZyb21GcmFtZSA9IGZ1bmN0aW9uIChmcmFtZUlkLHdpZHRoLGhlaWdodClcbntcbiAgICB2YXIgdGV4dHVyZSA9IGNvcmUudXRpbHMuVGV4dHVyZUNhY2hlW2ZyYW1lSWRdO1xuXG4gICAgaWYgKCF0ZXh0dXJlKVxuICAgIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdUaGUgZnJhbWVJZCBcIicgKyBmcmFtZUlkICsgJ1wiIGRvZXMgbm90IGV4aXN0IGluIHRoZSB0ZXh0dXJlIGNhY2hlICcgKyB0aGlzKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IFRpbGluZ1Nwcml0ZSh0ZXh0dXJlLHdpZHRoLGhlaWdodCk7XG59O1xuXG4vKipcbiAqIEhlbHBlciBmdW5jdGlvbiB0aGF0IGNyZWF0ZXMgYSBzcHJpdGUgdGhhdCB3aWxsIGNvbnRhaW4gYSB0ZXh0dXJlIGJhc2VkIG9uIGFuIGltYWdlIHVybFxuICogSWYgdGhlIGltYWdlIGlzIG5vdCBpbiB0aGUgdGV4dHVyZSBjYWNoZSBpdCB3aWxsIGJlIGxvYWRlZFxuICpcbiAqIEBzdGF0aWNcbiAqIEBwYXJhbSBpbWFnZUlkIHtzdHJpbmd9IFRoZSBpbWFnZSB1cmwgb2YgdGhlIHRleHR1cmVcbiAqIEBwYXJhbSB3aWR0aCB7bnVtYmVyfSAgdGhlIHdpZHRoIG9mIHRoZSB0aWxpbmcgc3ByaXRlXG4gKiBAcGFyYW0gaGVpZ2h0IHtudW1iZXJ9IHRoZSBoZWlnaHQgb2YgdGhlIHRpbGluZyBzcHJpdGVcbiAqIEBwYXJhbSBbY3Jvc3NvcmlnaW49KGF1dG8pXSB7Ym9vbGVhbn0gaWYgeW91IHdhbnQgdG8gc3BlY2lmeSB0aGUgY3Jvc3Mtb3JpZ2luIHBhcmFtZXRlclxuICogQHBhcmFtIFtzY2FsZU1vZGU9UElYSS5TQ0FMRV9NT0RFUy5ERUZBVUxUXSB7bnVtYmVyfSBpZiB5b3Ugd2FudCB0byBzcGVjaWZ5IHRoZSBzY2FsZSBtb2RlLCBzZWUge0BsaW5rIFBJWEkuU0NBTEVfTU9ERVN9IGZvciBwb3NzaWJsZSB2YWx1ZXNcbiAqIEByZXR1cm4ge1BJWEkuZXh0cmFzLlRpbGluZ1Nwcml0ZX0gQSBuZXcgVGlsaW5nU3ByaXRlIHVzaW5nIGEgdGV4dHVyZSBmcm9tIHRoZSB0ZXh0dXJlIGNhY2hlIG1hdGNoaW5nIHRoZSBpbWFnZSBpZFxuICovXG5UaWxpbmdTcHJpdGUuZnJvbUltYWdlID0gZnVuY3Rpb24gKGltYWdlSWQsIHdpZHRoLCBoZWlnaHQsIGNyb3Nzb3JpZ2luLCBzY2FsZU1vZGUpXG57XG4gICAgcmV0dXJuIG5ldyBUaWxpbmdTcHJpdGUoY29yZS5UZXh0dXJlLmZyb21JbWFnZShpbWFnZUlkLCBjcm9zc29yaWdpbiwgc2NhbGVNb2RlKSx3aWR0aCxoZWlnaHQpO1xufTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vY29yZScpLFxuICAgIERpc3BsYXlPYmplY3QgPSBjb3JlLkRpc3BsYXlPYmplY3QsXG4gICAgX3RlbXBNYXRyaXggPSBuZXcgY29yZS5NYXRyaXgoKTtcblxuRGlzcGxheU9iamVjdC5wcm90b3R5cGUuX2NhY2hlQXNCaXRtYXAgPSBmYWxzZTtcbkRpc3BsYXlPYmplY3QucHJvdG90eXBlLl9vcmlnaW5hbFJlbmRlcldlYkdMID0gbnVsbDtcbkRpc3BsYXlPYmplY3QucHJvdG90eXBlLl9vcmlnaW5hbFJlbmRlckNhbnZhcyA9IG51bGw7XG5cbkRpc3BsYXlPYmplY3QucHJvdG90eXBlLl9vcmlnaW5hbFVwZGF0ZVRyYW5zZm9ybSA9IG51bGw7XG5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS5fb3JpZ2luYWxIaXRUZXN0ID0gbnVsbDtcbkRpc3BsYXlPYmplY3QucHJvdG90eXBlLl9vcmlnaW5hbERlc3Ryb3kgPSBudWxsO1xuRGlzcGxheU9iamVjdC5wcm90b3R5cGUuX2NhY2hlZFNwcml0ZSA9IG51bGw7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKERpc3BsYXlPYmplY3QucHJvdG90eXBlLCB7XG5cbiAgICAvKipcbiAgICAgKiBTZXQgdGhpcyB0byB0cnVlIGlmIHlvdSB3YW50IHRoaXMgZGlzcGxheSBvYmplY3QgdG8gYmUgY2FjaGVkIGFzIGEgYml0bWFwLlxuICAgICAqIFRoaXMgYmFzaWNhbGx5IHRha2VzIGEgc25hcCBzaG90IG9mIHRoZSBkaXNwbGF5IG9iamVjdCBhcyBpdCBpcyBhdCB0aGF0IG1vbWVudC4gSXQgY2FuIHByb3ZpZGUgYSBwZXJmb3JtYW5jZSBiZW5lZml0IGZvciBjb21wbGV4IHN0YXRpYyBkaXNwbGF5T2JqZWN0cy5cbiAgICAgKiBUbyByZW1vdmUgc2ltcGx5IHNldCB0aGlzIHByb3BlcnR5IHRvICdmYWxzZSdcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICogQG1lbWJlcm9mIFBJWEkuRGlzcGxheU9iamVjdCNcbiAgICAgKi9cbiAgICBjYWNoZUFzQml0bWFwOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2NhY2hlQXNCaXRtYXA7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICBpZiAodGhpcy5fY2FjaGVBc0JpdG1hcCA9PT0gdmFsdWUpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLl9jYWNoZUFzQml0bWFwID0gdmFsdWU7XG5cbiAgICAgICAgICAgIGlmICh2YWx1ZSlcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9vcmlnaW5hbFJlbmRlcldlYkdMID0gdGhpcy5yZW5kZXJXZWJHTDtcbiAgICAgICAgICAgICAgICB0aGlzLl9vcmlnaW5hbFJlbmRlckNhbnZhcyA9IHRoaXMucmVuZGVyQ2FudmFzO1xuXG4gICAgICAgICAgICAgICAgdGhpcy5fb3JpZ2luYWxVcGRhdGVUcmFuc2Zvcm0gPSB0aGlzLnVwZGF0ZVRyYW5zZm9ybTtcbiAgICAgICAgICAgICAgICB0aGlzLl9vcmlnaW5hbEdldEJvdW5kcyA9IHRoaXMuZ2V0Qm91bmRzO1xuXG4gICAgICAgICAgICAgICAgdGhpcy5fb3JpZ2luYWxEZXN0cm95ID0gdGhpcy5kZXN0cm95O1xuXG4gICAgICAgICAgICAgICAgdGhpcy5fb3JpZ2luYWxDb250YWluc1BvaW50ID0gdGhpcy5jb250YWluc1BvaW50O1xuXG4gICAgICAgICAgICAgICAgdGhpcy5yZW5kZXJXZWJHTCA9IHRoaXMuX3JlbmRlckNhY2hlZFdlYkdMO1xuICAgICAgICAgICAgICAgIHRoaXMucmVuZGVyQ2FudmFzID0gdGhpcy5fcmVuZGVyQ2FjaGVkQ2FudmFzO1xuXG4gICAgICAgICAgICAgICAgdGhpcy5kZXN0cm95ID0gdGhpcy5fY2FjaGVBc0JpdG1hcERlc3Ryb3k7XG5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5fY2FjaGVkU3ByaXRlKVxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fZGVzdHJveUNhY2hlZERpc3BsYXlPYmplY3QoKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB0aGlzLnJlbmRlcldlYkdMID0gdGhpcy5fb3JpZ2luYWxSZW5kZXJXZWJHTDtcbiAgICAgICAgICAgICAgICB0aGlzLnJlbmRlckNhbnZhcyA9IHRoaXMuX29yaWdpbmFsUmVuZGVyQ2FudmFzO1xuICAgICAgICAgICAgICAgIHRoaXMuZ2V0Qm91bmRzID0gdGhpcy5fb3JpZ2luYWxHZXRCb3VuZHM7XG5cbiAgICAgICAgICAgICAgICB0aGlzLmRlc3Ryb3kgPSB0aGlzLl9vcmlnaW5hbERlc3Ryb3k7XG5cbiAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZVRyYW5zZm9ybSA9IHRoaXMuX29yaWdpbmFsVXBkYXRlVHJhbnNmb3JtO1xuICAgICAgICAgICAgICAgIHRoaXMuY29udGFpbnNQb2ludCA9IHRoaXMuX29yaWdpbmFsQ29udGFpbnNQb2ludDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn0pO1xuLyoqXG4qIFJlbmRlcnMgYSBjYWNoZWQgdmVyc2lvbiBvZiB0aGUgc3ByaXRlIHdpdGggV2ViR0xcbipcbiogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLldlYkdMUmVuZGVyZXJ9IHRoZSBXZWJHTCByZW5kZXJlclxuKiBAcHJpdmF0ZVxuKi9cbkRpc3BsYXlPYmplY3QucHJvdG90eXBlLl9yZW5kZXJDYWNoZWRXZWJHTCA9IGZ1bmN0aW9uIChyZW5kZXJlcilcbntcbiAgICBpZiAoIXRoaXMudmlzaWJsZSB8fCB0aGlzLndvcmxkQWxwaGEgPD0gMCB8fCAhdGhpcy5yZW5kZXJhYmxlKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuX2luaXRDYWNoZWREaXNwbGF5T2JqZWN0KCByZW5kZXJlciApO1xuXG4gICAgdGhpcy5fY2FjaGVkU3ByaXRlLndvcmxkQWxwaGEgPSB0aGlzLndvcmxkQWxwaGE7XG5cbiAgICByZW5kZXJlci5zZXRPYmplY3RSZW5kZXJlcihyZW5kZXJlci5wbHVnaW5zLnNwcml0ZSk7XG4gICAgcmVuZGVyZXIucGx1Z2lucy5zcHJpdGUucmVuZGVyKCB0aGlzLl9jYWNoZWRTcHJpdGUgKTtcbn07XG5cbi8qKlxuKiBQcmVwYXJlcyB0aGUgV2ViR0wgcmVuZGVyZXIgdG8gY2FjaGUgdGhlIHNwcml0ZVxuKlxuKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcn0gdGhlIFdlYkdMIHJlbmRlcmVyXG4qIEBwcml2YXRlXG4qL1xuRGlzcGxheU9iamVjdC5wcm90b3R5cGUuX2luaXRDYWNoZWREaXNwbGF5T2JqZWN0ID0gZnVuY3Rpb24gKHJlbmRlcmVyKVxue1xuICAgIGlmKHRoaXMuX2NhY2hlZFNwcml0ZSlcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBmaXJzdCB3ZSBmbHVzaCBhbnl0aGluZyBsZWZ0IGluIHRoZSByZW5kZXJlciAob3RoZXJ3aXNlIGl0IHdvdWxkIGdldCByZW5kZXJlZCB0byB0aGUgY2FjaGVkIHRleHR1cmUpXG4gICAgcmVuZGVyZXIuY3VycmVudFJlbmRlcmVyLmZsdXNoKCk7XG4gICAgLy90aGlzLmZpbHRlcnM9IFtdO1xuICAgIC8vIG5leHQgd2UgZmluZCB0aGUgZGltZW5zaW9ucyBvZiB0aGUgdW50cmFuc2Zvcm1lZCBvYmplY3RcbiAgICAvLyB0aGlzIGZ1bmN0aW9uIGFsc28gY2FsbHMgdXBkYXRldHJhbnNmb3JtIG9uIGFsbCBpdHMgY2hpbGRyZW4gYXMgcGFydCBvZiB0aGUgbWVhc3VyaW5nLiBUaGlzIG1lYW5zIHdlIGRvbid0IG5lZWQgdG8gdXBkYXRlIHRoZSB0cmFuc2Zvcm0gYWdhaW4gaW4gdGhpcyBmdW5jdGlvblxuICAgIC8vIFRPRE8gcGFzcyBhbiBvYmplY3QgdG8gY2xvbmUgdG9vPyBzYXZlcyBoYXZpbmcgdG8gY3JlYXRlIGEgbmV3IG9uZSBlYWNoIHRpbWUhXG4gICAgdmFyIGJvdW5kcyA9IHRoaXMuZ2V0TG9jYWxCb3VuZHMoKS5jbG9uZSgpO1xuXG4gICAgLy8gYWRkIHNvbWUgcGFkZGluZyFcbiAgICBpZih0aGlzLl9maWx0ZXJzKVxuICAgIHtcbiAgICAgICAgdmFyIHBhZGRpbmcgPSB0aGlzLl9maWx0ZXJzWzBdLnBhZGRpbmc7XG4gICAgICAgIGJvdW5kcy54IC09IHBhZGRpbmc7XG4gICAgICAgIGJvdW5kcy55IC09IHBhZGRpbmc7XG5cbiAgICAgICAgYm91bmRzLndpZHRoICs9IHBhZGRpbmcgKiAyO1xuICAgICAgICBib3VuZHMuaGVpZ2h0ICs9IHBhZGRpbmcgKiAyO1xuICAgIH1cblxuICAgIC8vIGZvciBub3cgd2UgY2FjaGUgdGhlIGN1cnJlbnQgcmVuZGVyVGFyZ2V0IHRoYXQgdGhlIHdlYkdMIHJlbmRlcmVyIGlzIGN1cnJlbnRseSB1c2luZy5cbiAgICAvLyB0aGlzIGNvdWxkIGJlIG1vcmUgZWxlZ2VudC4uXG4gICAgdmFyIGNhY2hlZFJlbmRlclRhcmdldCA9IHJlbmRlcmVyLmN1cnJlbnRSZW5kZXJUYXJnZXQ7XG4gICAgLy8gV2UgYWxzbyBzdG9yZSB0aGUgZmlsdGVyIHN0YWNrIC0gSSB3aWxsIGRlZmluaXRlbHkgbG9vayB0byBjaGFuZ2UgaG93IHRoaXMgd29ya3MgYSBsaXR0bGUgbGF0ZXIgZG93biB0aGUgbGluZS5cbiAgICB2YXIgc3RhY2sgPSByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLmZpbHRlclN0YWNrO1xuXG4gICAgLy8gdGhpcyByZW5kZXJUZXh0dXJlIHdpbGwgYmUgdXNlZCB0byBzdG9yZSB0aGUgY2FjaGVkIERpc3BsYXlPYmplY3RcbiAgICB2YXIgcmVuZGVyVGV4dHVyZSA9IG5ldyBjb3JlLlJlbmRlclRleHR1cmUocmVuZGVyZXIsIGJvdW5kcy53aWR0aCB8IDAsIGJvdW5kcy5oZWlnaHQgfCAwKTtcblxuICAgIC8vIG5lZWQgdG8gc2V0IC8vXG4gICAgdmFyIG0gPSBfdGVtcE1hdHJpeDtcblxuICAgIG0udHggPSAtYm91bmRzLng7XG4gICAgbS50eSA9IC1ib3VuZHMueTtcblxuXG5cbiAgICAvLyBzZXQgYWxsIHByb3BlcnRpZXMgdG8gdGhlcmUgb3JpZ2luYWwgc28gd2UgY2FuIHJlbmRlciB0byBhIHRleHR1cmVcbiAgICB0aGlzLnJlbmRlcldlYkdMID0gdGhpcy5fb3JpZ2luYWxSZW5kZXJXZWJHTDtcblxuICAgIHJlbmRlclRleHR1cmUucmVuZGVyKHRoaXMsIG0sIHRydWUsIHRydWUpO1xuXG4gICAgLy8gbm93IHJlc3RvcmUgdGhlIHN0YXRlIGJlIHNldHRpbmcgdGhlIG5ldyBwcm9wZXJ0aWVzXG4gICAgcmVuZGVyZXIuc2V0UmVuZGVyVGFyZ2V0KGNhY2hlZFJlbmRlclRhcmdldCk7XG4gICAgcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5maWx0ZXJTdGFjayA9IHN0YWNrO1xuXG4gICAgdGhpcy5yZW5kZXJXZWJHTCAgICAgPSB0aGlzLl9yZW5kZXJDYWNoZWRXZWJHTDtcbiAgICB0aGlzLnVwZGF0ZVRyYW5zZm9ybSA9IHRoaXMuZGlzcGxheU9iamVjdFVwZGF0ZVRyYW5zZm9ybTtcbiAgICB0aGlzLmdldEJvdW5kcyAgICAgICA9IHRoaXMuX2dldENhY2hlZEJvdW5kcztcblxuXG4gICAgLy8gY3JlYXRlIG91ciBjYWNoZWQgc3ByaXRlXG4gICAgdGhpcy5fY2FjaGVkU3ByaXRlID0gbmV3IGNvcmUuU3ByaXRlKHJlbmRlclRleHR1cmUpO1xuICAgIHRoaXMuX2NhY2hlZFNwcml0ZS53b3JsZFRyYW5zZm9ybSA9IHRoaXMud29ybGRUcmFuc2Zvcm07XG4gICAgdGhpcy5fY2FjaGVkU3ByaXRlLmFuY2hvci54ID0gLSggYm91bmRzLnggLyBib3VuZHMud2lkdGggKTtcbiAgICB0aGlzLl9jYWNoZWRTcHJpdGUuYW5jaG9yLnkgPSAtKCBib3VuZHMueSAvIGJvdW5kcy5oZWlnaHQgKTtcblxuICAgIC8vIHJlc3RvcmUgdGhlIHRyYW5zZm9ybSBvZiB0aGUgY2FjaGVkIHNwcml0ZSB0byBhdm9pZCB0aGUgbmFzdHkgZmxpY2tlci4uXG4gICAgdGhpcy51cGRhdGVUcmFuc2Zvcm0oKTtcblxuICAgIC8vIG1hcCB0aGUgaGl0IHRlc3QuLlxuICAgIHRoaXMuY29udGFpbnNQb2ludCA9IHRoaXMuX2NhY2hlZFNwcml0ZS5jb250YWluc1BvaW50LmJpbmQodGhpcy5fY2FjaGVkU3ByaXRlKTtcbn07XG5cbi8qKlxuKiBSZW5kZXJzIGEgY2FjaGVkIHZlcnNpb24gb2YgdGhlIHNwcml0ZSB3aXRoIGNhbnZhc1xuKlxuKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuQ2FudmFzUmVuZGVyZXJ9IHRoZSBDYW52YXMgcmVuZGVyZXJcbiogQHByaXZhdGVcbiovXG5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS5fcmVuZGVyQ2FjaGVkQ2FudmFzID0gZnVuY3Rpb24gKHJlbmRlcmVyKVxue1xuICAgIGlmICghdGhpcy52aXNpYmxlIHx8IHRoaXMud29ybGRBbHBoYSA8PSAwIHx8ICF0aGlzLnJlbmRlcmFibGUpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5faW5pdENhY2hlZERpc3BsYXlPYmplY3RDYW52YXMoIHJlbmRlcmVyICk7XG5cbiAgICB0aGlzLl9jYWNoZWRTcHJpdGUud29ybGRBbHBoYSA9IHRoaXMud29ybGRBbHBoYTtcblxuICAgIHRoaXMuX2NhY2hlZFNwcml0ZS5yZW5kZXJDYW52YXMocmVuZGVyZXIpO1xufTtcblxuLy9UT0RPIHRoaXMgY2FuIGJlIHRoZSBzYW1lIGFzIHRoZSB3ZWJHTCB2ZXJpc29uLi4gd2lsbCBuZWVkIHRvIGRvIGEgbGl0dGxlIHR3ZWFraW5nIGZpcnN0IHRob3VnaC4uXG4vKipcbiogUHJlcGFyZXMgdGhlIENhbnZhcyByZW5kZXJlciB0byBjYWNoZSB0aGUgc3ByaXRlXG4qXG4qIEBwYXJhbSByZW5kZXJlciB7UElYSS5DYW52YXNSZW5kZXJlcn0gdGhlIENhbnZhcyByZW5kZXJlclxuKiBAcHJpdmF0ZVxuKi9cbkRpc3BsYXlPYmplY3QucHJvdG90eXBlLl9pbml0Q2FjaGVkRGlzcGxheU9iamVjdENhbnZhcyA9IGZ1bmN0aW9uIChyZW5kZXJlcilcbntcbiAgICBpZih0aGlzLl9jYWNoZWRTcHJpdGUpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy9nZXQgYm91bmRzIGFjdHVhbGx5IHRyYW5zZm9ybXMgdGhlIG9iamVjdCBmb3IgdXMgYWxyZWFkeSFcbiAgICB2YXIgYm91bmRzID0gdGhpcy5nZXRMb2NhbEJvdW5kcygpO1xuXG4gICAgdmFyIGNhY2hlZFJlbmRlclRhcmdldCA9IHJlbmRlcmVyLmNvbnRleHQ7XG5cbiAgICB2YXIgcmVuZGVyVGV4dHVyZSA9IG5ldyBjb3JlLlJlbmRlclRleHR1cmUocmVuZGVyZXIsIGJvdW5kcy53aWR0aCB8IDAsIGJvdW5kcy5oZWlnaHQgfCAwKTtcblxuICAgIC8vIG5lZWQgdG8gc2V0IC8vXG4gICAgdmFyIG0gPSBfdGVtcE1hdHJpeDtcblxuICAgIG0udHggPSAtYm91bmRzLng7XG4gICAgbS50eSA9IC1ib3VuZHMueTtcblxuICAgIC8vIHNldCBhbGwgcHJvcGVydGllcyB0byB0aGVyZSBvcmlnaW5hbCBzbyB3ZSBjYW4gcmVuZGVyIHRvIGEgdGV4dHVyZVxuICAgIHRoaXMucmVuZGVyQ2FudmFzID0gdGhpcy5fb3JpZ2luYWxSZW5kZXJDYW52YXM7XG5cbiAgICByZW5kZXJUZXh0dXJlLnJlbmRlcih0aGlzLCBtLCB0cnVlKTtcblxuICAgIC8vIG5vdyByZXN0b3JlIHRoZSBzdGF0ZSBiZSBzZXR0aW5nIHRoZSBuZXcgcHJvcGVydGllc1xuICAgIHJlbmRlcmVyLmNvbnRleHQgPSBjYWNoZWRSZW5kZXJUYXJnZXQ7XG5cbiAgICB0aGlzLnJlbmRlckNhbnZhcyA9IHRoaXMuX3JlbmRlckNhY2hlZENhbnZhcztcbiAgICB0aGlzLnVwZGF0ZVRyYW5zZm9ybSA9IHRoaXMuZGlzcGxheU9iamVjdFVwZGF0ZVRyYW5zZm9ybTtcbiAgICB0aGlzLmdldEJvdW5kcyAgPSB0aGlzLl9nZXRDYWNoZWRCb3VuZHM7XG5cblxuICAgIC8vIGNyZWF0ZSBvdXIgY2FjaGVkIHNwcml0ZVxuICAgIHRoaXMuX2NhY2hlZFNwcml0ZSA9IG5ldyBjb3JlLlNwcml0ZShyZW5kZXJUZXh0dXJlKTtcbiAgICB0aGlzLl9jYWNoZWRTcHJpdGUud29ybGRUcmFuc2Zvcm0gPSB0aGlzLndvcmxkVHJhbnNmb3JtO1xuICAgIHRoaXMuX2NhY2hlZFNwcml0ZS5hbmNob3IueCA9IC0oIGJvdW5kcy54IC8gYm91bmRzLndpZHRoICk7XG4gICAgdGhpcy5fY2FjaGVkU3ByaXRlLmFuY2hvci55ID0gLSggYm91bmRzLnkgLyBib3VuZHMuaGVpZ2h0ICk7XG5cbiAgICB0aGlzLnVwZGF0ZVRyYW5zZm9ybSgpO1xuXG4gICAgdGhpcy5jb250YWluc1BvaW50ID0gdGhpcy5fY2FjaGVkU3ByaXRlLmNvbnRhaW5zUG9pbnQuYmluZCh0aGlzLl9jYWNoZWRTcHJpdGUpO1xufTtcblxuLyoqXG4qIENhbGN1bGF0ZXMgdGhlIGJvdW5kcyBvZiB0aGUgY2FjaGVkIHNwcml0ZVxuKlxuKiBAcHJpdmF0ZVxuKi9cbkRpc3BsYXlPYmplY3QucHJvdG90eXBlLl9nZXRDYWNoZWRCb3VuZHMgPSBmdW5jdGlvbiAoKVxue1xuICAgIHRoaXMuX2NhY2hlZFNwcml0ZS5fY3VycmVudEJvdW5kcyA9IG51bGw7XG5cbiAgICByZXR1cm4gdGhpcy5fY2FjaGVkU3ByaXRlLmdldEJvdW5kcygpO1xufTtcblxuLyoqXG4qIERlc3Ryb3lzIHRoZSBjYWNoZWQgc3ByaXRlLlxuKlxuKiBAcHJpdmF0ZVxuKi9cbkRpc3BsYXlPYmplY3QucHJvdG90eXBlLl9kZXN0cm95Q2FjaGVkRGlzcGxheU9iamVjdCA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy5fY2FjaGVkU3ByaXRlLl90ZXh0dXJlLmRlc3Ryb3koKTtcbiAgICB0aGlzLl9jYWNoZWRTcHJpdGUgPSBudWxsO1xufTtcblxuRGlzcGxheU9iamVjdC5wcm90b3R5cGUuX2NhY2hlQXNCaXRtYXBEZXN0cm95ID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLmNhY2hlQXNCaXRtYXAgPSBmYWxzZTtcbiAgICB0aGlzLl9vcmlnaW5hbERlc3Ryb3koKTtcbn07XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uL2NvcmUnKTtcblxuLyoqXG4gKiBUaGUgaW5zdGFuY2UgbmFtZSBvZiB0aGUgb2JqZWN0LlxuICpcbiAqIEBtZW1iZXJvZiBQSVhJLkRpc3BsYXlPYmplY3QjXG4gKiBAbWVtYmVyIHtzdHJpbmd9XG4gKi9cbmNvcmUuRGlzcGxheU9iamVjdC5wcm90b3R5cGUubmFtZSA9IG51bGw7XG5cbi8qKlxuKiBSZXR1cm5zIHRoZSBkaXNwbGF5IG9iamVjdCBpbiB0aGUgY29udGFpbmVyXG4qXG4qIEBtZW1iZXJvZiBQSVhJLkNvbnRhaW5lciNcbiogQHBhcmFtIG5hbWUge3N0cmluZ30gaW5zdGFuY2UgbmFtZVxuKiBAcmV0dXJuIHtQSVhJLkRpc3BsYXlPYmplY3R9XG4qL1xuY29yZS5Db250YWluZXIucHJvdG90eXBlLmdldENoaWxkQnlOYW1lID0gZnVuY3Rpb24gKG5hbWUpXG57XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmNoaWxkcmVuLmxlbmd0aDsgaSsrKVxuICAgIHtcbiAgICAgICAgaWYgKHRoaXMuY2hpbGRyZW5baV0ubmFtZSA9PT0gbmFtZSlcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY2hpbGRyZW5baV07XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG59O1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi9jb3JlJyk7XG5cbi8qKlxuKiBSZXR1cm5zIHRoZSBnbG9iYWwgcG9zaXRpb24gb2YgdGhlIGRpc3BsYXlPYmplY3RcbipcbiogQG1lbWJlcm9mIFBJWEkuRGlzcGxheU9iamVjdCNcbiogQHBhcmFtIHBvaW50IHtQb2ludH0gdGhlIHBvaW50IHRvIHdyaXRlIHRoZSBnbG9iYWwgdmFsdWUgdG8uIElmIG51bGwgYSBuZXcgcG9pbnQgd2lsbCBiZSByZXR1cm5lZFxuKiBAcmV0dXJuIHtQb2ludH1cbiovXG5jb3JlLkRpc3BsYXlPYmplY3QucHJvdG90eXBlLmdldEdsb2JhbFBvc2l0aW9uID0gZnVuY3Rpb24gKHBvaW50KVxue1xuICAgIHBvaW50ID0gcG9pbnQgfHwgbmV3IGNvcmUuUG9pbnQoKTtcblxuICAgIGlmKHRoaXMucGFyZW50KVxuICAgIHtcbiAgICAgICAgdGhpcy5kaXNwbGF5T2JqZWN0VXBkYXRlVHJhbnNmb3JtKCk7XG5cbiAgICAgICAgcG9pbnQueCA9IHRoaXMud29ybGRUcmFuc2Zvcm0udHg7XG4gICAgICAgIHBvaW50LnkgPSB0aGlzLndvcmxkVHJhbnNmb3JtLnR5O1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICBwb2ludC54ID0gdGhpcy5wb3NpdGlvbi54O1xuICAgICAgICBwb2ludC55ID0gdGhpcy5wb3NpdGlvbi55O1xuICAgIH1cblxuICAgIHJldHVybiBwb2ludDtcbn07XG4iLCIvKipcbiAqIEBmaWxlICAgICAgICBNYWluIGV4cG9ydCBvZiB0aGUgUElYSSBleHRyYXMgbGlicmFyeVxuICogQGF1dGhvciAgICAgIE1hdCBHcm92ZXMgPG1hdEBnb29kYm95ZGlnaXRhbC5jb20+XG4gKiBAY29weXJpZ2h0ICAgMjAxMy0yMDE1IEdvb2RCb3lEaWdpdGFsXG4gKiBAbGljZW5zZSAgICAge0BsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9waXhpanMvcGl4aS5qcy9ibG9iL21hc3Rlci9MSUNFTlNFfE1JVCBMaWNlbnNlfVxuICovXG5cbnJlcXVpcmUoJy4vY2FjaGVBc0JpdG1hcCcpO1xucmVxdWlyZSgnLi9nZXRDaGlsZEJ5TmFtZScpO1xucmVxdWlyZSgnLi9nZXRHbG9iYWxQb3NpdGlvbicpO1xuXG4vKipcbiAqIEBuYW1lc3BhY2UgUElYSS5leHRyYXNcbiAqL1xubW9kdWxlLmV4cG9ydHMgPSB7XG4gICAgTW92aWVDbGlwOiAgICAgIHJlcXVpcmUoJy4vTW92aWVDbGlwJyksXG4gICAgVGlsaW5nU3ByaXRlOiAgIHJlcXVpcmUoJy4vVGlsaW5nU3ByaXRlJyksXG4gICAgQml0bWFwVGV4dDogICAgIHJlcXVpcmUoJy4vQml0bWFwVGV4dCcpXG59O1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi8uLi9jb3JlJyk7XG4vLyBAc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9zdWJzdGFjay9icmZzL2lzc3Vlcy8yNVxuXG5cbi8vIFRPRE8gKGNlbmdsZXIpIC0gVGhlIFkgaXMgZmxpcHBlZCBpbiB0aGlzIHNoYWRlciBmb3Igc29tZSByZWFzb24uXG5cbi8qKlxuICogQGF1dGhvciBWaWNvIEB2aWNvY290ZWFcbiAqIG9yaWdpbmFsIHNoYWRlciA6IGh0dHBzOi8vd3d3LnNoYWRlcnRveS5jb20vdmlldy9sc3NHRGogYnkgQG1vdkFYMTNoXG4gKi9cblxuLyoqXG4gKiBBbiBBU0NJSSBmaWx0ZXIuXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLkFic3RyYWN0RmlsdGVyXG4gKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzXG4gKi9cbmZ1bmN0aW9uIEFzY2lpRmlsdGVyKClcbntcbiAgICBjb3JlLkFic3RyYWN0RmlsdGVyLmNhbGwodGhpcyxcbiAgICAgICAgLy8gdmVydGV4IHNoYWRlclxuICAgICAgICBudWxsLFxuICAgICAgICAvLyBmcmFnbWVudCBzaGFkZXJcbiAgICAgICAgXCJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcXG5cXG51bmlmb3JtIHZlYzQgZGltZW5zaW9ucztcXG51bmlmb3JtIGZsb2F0IHBpeGVsU2l6ZTtcXG51bmlmb3JtIHNhbXBsZXIyRCB1U2FtcGxlcjtcXG5cXG5mbG9hdCBjaGFyYWN0ZXIoZmxvYXQgbiwgdmVjMiBwKVxcbntcXG4gICAgcCA9IGZsb29yKHAqdmVjMig0LjAsIC00LjApICsgMi41KTtcXG4gICAgaWYgKGNsYW1wKHAueCwgMC4wLCA0LjApID09IHAueCAmJiBjbGFtcChwLnksIDAuMCwgNC4wKSA9PSBwLnkpXFxuICAgIHtcXG4gICAgICAgIGlmIChpbnQobW9kKG4vZXhwMihwLnggKyA1LjAqcC55KSwgMi4wKSkgPT0gMSkgcmV0dXJuIDEuMDtcXG4gICAgfVxcbiAgICByZXR1cm4gMC4wO1xcbn1cXG5cXG52b2lkIG1haW4oKVxcbntcXG4gICAgdmVjMiB1diA9IGdsX0ZyYWdDb29yZC54eTtcXG5cXG4gICAgdmVjMyBjb2wgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIGZsb29yKCB1diAvIHBpeGVsU2l6ZSApICogcGl4ZWxTaXplIC8gZGltZW5zaW9ucy54eSkucmdiO1xcblxcbiAgICBmbG9hdCBncmF5ID0gKGNvbC5yICsgY29sLmcgKyBjb2wuYikgLyAzLjA7XFxuXFxuICAgIGZsb2F0IG4gPSAgNjU1MzYuMDsgICAgICAgICAgICAgLy8gLlxcbiAgICBpZiAoZ3JheSA+IDAuMikgbiA9IDY1NjAwLjA7ICAgIC8vIDpcXG4gICAgaWYgKGdyYXkgPiAwLjMpIG4gPSAzMzI3NzIuMDsgICAvLyAqXFxuICAgIGlmIChncmF5ID4gMC40KSBuID0gMTUyNTUwODYuMDsgLy8gb1xcbiAgICBpZiAoZ3JheSA+IDAuNSkgbiA9IDIzMzg1MTY0LjA7IC8vICZcXG4gICAgaWYgKGdyYXkgPiAwLjYpIG4gPSAxNTI1MjAxNC4wOyAvLyA4XFxuICAgIGlmIChncmF5ID4gMC43KSBuID0gMTMxOTk0NTIuMDsgLy8gQFxcbiAgICBpZiAoZ3JheSA+IDAuOCkgbiA9IDExNTEyODEwLjA7IC8vICNcXG5cXG4gICAgdmVjMiBwID0gbW9kKCB1diAvICggcGl4ZWxTaXplICogMC41ICksIDIuMCkgLSB2ZWMyKDEuMCk7XFxuICAgIGNvbCA9IGNvbCAqIGNoYXJhY3RlcihuLCBwKTtcXG5cXG4gICAgZ2xfRnJhZ0NvbG9yID0gdmVjNChjb2wsIDEuMCk7XFxufVxcblwiLFxuICAgICAgICAvLyBjdXN0b20gdW5pZm9ybXNcbiAgICAgICAge1xuICAgICAgICAgICAgZGltZW5zaW9uczogeyB0eXBlOiAnNGZ2JywgdmFsdWU6IG5ldyBGbG9hdDMyQXJyYXkoWzAsIDAsIDAsIDBdKSB9LFxuICAgICAgICAgICAgcGl4ZWxTaXplOiAgeyB0eXBlOiAnMWYnLCB2YWx1ZTogOCB9XG4gICAgICAgIH1cbiAgICApO1xufVxuXG5Bc2NpaUZpbHRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuQWJzdHJhY3RGaWx0ZXIucHJvdG90eXBlKTtcbkFzY2lpRmlsdGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IEFzY2lpRmlsdGVyO1xubW9kdWxlLmV4cG9ydHMgPSBBc2NpaUZpbHRlcjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoQXNjaWlGaWx0ZXIucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogVGhlIHBpeGVsIHNpemUgdXNlZCBieSB0aGUgZmlsdGVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuQXNjaWlGaWx0ZXIjXG4gICAgICovXG4gICAgc2l6ZToge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVuaWZvcm1zLnBpeGVsU2l6ZS52YWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudW5pZm9ybXMucGl4ZWxTaXplLnZhbHVlID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG59KTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vLi4vY29yZScpLFxuICAgIEJsdXJYRmlsdGVyID0gcmVxdWlyZSgnLi4vYmx1ci9CbHVyWEZpbHRlcicpLFxuICAgIEJsdXJZRmlsdGVyID0gcmVxdWlyZSgnLi4vYmx1ci9CbHVyWUZpbHRlcicpO1xuXG4vKipcbiAqIFRoZSBCbG9vbUZpbHRlciBhcHBsaWVzIGEgR2F1c3NpYW4gYmx1ciB0byBhbiBvYmplY3QuXG4gKiBUaGUgc3RyZW5ndGggb2YgdGhlIGJsdXIgY2FuIGJlIHNldCBmb3IgeC0gYW5kIHktYXhpcyBzZXBhcmF0ZWx5LlxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5BYnN0cmFjdEZpbHRlclxuICogQG1lbWJlcm9mIFBJWEkuZmlsdGVyc1xuICovXG5mdW5jdGlvbiBCbG9vbUZpbHRlcigpXG57XG4gICAgY29yZS5BYnN0cmFjdEZpbHRlci5jYWxsKHRoaXMpO1xuXG4gICAgdGhpcy5ibHVyWEZpbHRlciA9IG5ldyBCbHVyWEZpbHRlcigpO1xuICAgIHRoaXMuYmx1cllGaWx0ZXIgPSBuZXcgQmx1cllGaWx0ZXIoKTtcblxuICAgIHRoaXMuZGVmYXVsdEZpbHRlciA9IG5ldyBjb3JlLkFic3RyYWN0RmlsdGVyKCk7XG59XG5cbkJsb29tRmlsdGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoY29yZS5BYnN0cmFjdEZpbHRlci5wcm90b3R5cGUpO1xuQmxvb21GaWx0ZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gQmxvb21GaWx0ZXI7XG5tb2R1bGUuZXhwb3J0cyA9IEJsb29tRmlsdGVyO1xuXG5CbG9vbUZpbHRlci5wcm90b3R5cGUuYXBwbHlGaWx0ZXIgPSBmdW5jdGlvbiAocmVuZGVyZXIsIGlucHV0LCBvdXRwdXQpXG57XG4gICAgdmFyIHJlbmRlclRhcmdldCA9IHJlbmRlcmVyLmZpbHRlck1hbmFnZXIuZ2V0UmVuZGVyVGFyZ2V0KHRydWUpO1xuXG4gICAgLy9UT0RPIC0gY29weVRleFN1YkltYWdlMkQgY291bGQgYmUgdXNlZCBoZXJlP1xuICAgIHRoaXMuZGVmYXVsdEZpbHRlci5hcHBseUZpbHRlcihyZW5kZXJlciwgaW5wdXQsIG91dHB1dCk7XG5cbiAgICB0aGlzLmJsdXJYRmlsdGVyLmFwcGx5RmlsdGVyKHJlbmRlcmVyLCBpbnB1dCwgcmVuZGVyVGFyZ2V0KTtcblxuICAgIHJlbmRlcmVyLmJsZW5kTW9kZU1hbmFnZXIuc2V0QmxlbmRNb2RlKGNvcmUuQkxFTkRfTU9ERVMuU0NSRUVOKTtcblxuICAgIHRoaXMuYmx1cllGaWx0ZXIuYXBwbHlGaWx0ZXIocmVuZGVyZXIsIHJlbmRlclRhcmdldCwgb3V0cHV0KTtcblxuICAgIHJlbmRlcmVyLmJsZW5kTW9kZU1hbmFnZXIuc2V0QmxlbmRNb2RlKGNvcmUuQkxFTkRfTU9ERVMuTk9STUFMKTtcblxuICAgIHJlbmRlcmVyLmZpbHRlck1hbmFnZXIucmV0dXJuUmVuZGVyVGFyZ2V0KHJlbmRlclRhcmdldCk7XG59O1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhCbG9vbUZpbHRlci5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBzdHJlbmd0aCBvZiBib3RoIHRoZSBibHVyWCBhbmQgYmx1clkgcHJvcGVydGllcyBzaW11bHRhbmVvdXNseVxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJPZiBQSVhJLmZpbHRlcnMuQmxvb21GaWx0ZXIjXG4gICAgICogQGRlZmF1bHQgMlxuICAgICAqL1xuICAgIGJsdXI6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5ibHVyWEZpbHRlci5ibHVyO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5ibHVyWEZpbHRlci5ibHVyID0gdGhpcy5ibHVyWUZpbHRlci5ibHVyID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgc3RyZW5ndGggb2YgdGhlIGJsdXJYIHByb3BlcnR5XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlck9mIFBJWEkuZmlsdGVycy5CbG9vbUZpbHRlciNcbiAgICAgKiBAZGVmYXVsdCAyXG4gICAgICovXG4gICAgYmx1clg6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5ibHVyWEZpbHRlci5ibHVyO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5ibHVyWEZpbHRlci5ibHVyID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgc3RyZW5ndGggb2YgdGhlIGJsdXJZIHByb3BlcnR5XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlck9mIFBJWEkuZmlsdGVycy5CbG9vbUZpbHRlciNcbiAgICAgKiBAZGVmYXVsdCAyXG4gICAgICovXG4gICAgYmx1clk6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5ibHVyWUZpbHRlci5ibHVyO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5ibHVyWUZpbHRlci5ibHVyID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG59KTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vLi4vY29yZScpO1xuXG5cbi8qKlxuICogVGhlIEJsdXJEaXJGaWx0ZXIgYXBwbGllcyBhIEdhdXNzaWFuIGJsdXIgdG93YXJkIGEgZGlyZWN0aW9uIHRvIGFuIG9iamVjdC5cbiAqXG4gKiBAY2xhc3NcbiAqIEBwYXJhbSB7bnVtYmVyfSBkaXJYXG4gKiBAcGFyYW0ge251bWJlcn0gZGlyWVxuICogQGV4dGVuZHMgUElYSS5BYnN0cmFjdEZpbHRlclxuICogQG1lbWJlcm9mIFBJWEkuZmlsdGVyc1xuICovXG5mdW5jdGlvbiBCbHVyRGlyRmlsdGVyKGRpclgsIGRpclkpXG57XG4gICAgY29yZS5BYnN0cmFjdEZpbHRlci5jYWxsKHRoaXMsXG4gICAgICAgIC8vIHZlcnRleCBzaGFkZXJcbiAgICAgICAgXCJhdHRyaWJ1dGUgdmVjMiBhVmVydGV4UG9zaXRpb247XFxuYXR0cmlidXRlIHZlYzIgYVRleHR1cmVDb29yZDtcXG5hdHRyaWJ1dGUgdmVjNCBhQ29sb3I7XFxuXFxudW5pZm9ybSBmbG9hdCBzdHJlbmd0aDtcXG51bmlmb3JtIGZsb2F0IGRpclg7XFxudW5pZm9ybSBmbG9hdCBkaXJZO1xcbnVuaWZvcm0gbWF0MyBwcm9qZWN0aW9uTWF0cml4O1xcblxcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xcbnZhcnlpbmcgdmVjNCB2Q29sb3I7XFxudmFyeWluZyB2ZWMyIHZCbHVyVGV4Q29vcmRzWzNdO1xcblxcbnZvaWQgbWFpbih2b2lkKVxcbntcXG4gICAgZ2xfUG9zaXRpb24gPSB2ZWM0KChwcm9qZWN0aW9uTWF0cml4ICogdmVjMygoYVZlcnRleFBvc2l0aW9uKSwgMS4wKSkueHksIDAuMCwgMS4wKTtcXG4gICAgdlRleHR1cmVDb29yZCA9IGFUZXh0dXJlQ29vcmQ7XFxuXFxuICAgIHZCbHVyVGV4Q29vcmRzWzBdID0gYVRleHR1cmVDb29yZCArIHZlYzIoICgwLjAwNCAqIHN0cmVuZ3RoKSAqIGRpclgsICgwLjAwNCAqIHN0cmVuZ3RoKSAqIGRpclkgKTtcXG4gICAgdkJsdXJUZXhDb29yZHNbMV0gPSBhVGV4dHVyZUNvb3JkICsgdmVjMiggKDAuMDA4ICogc3RyZW5ndGgpICogZGlyWCwgKDAuMDA4ICogc3RyZW5ndGgpICogZGlyWSApO1xcbiAgICB2Qmx1clRleENvb3Jkc1syXSA9IGFUZXh0dXJlQ29vcmQgKyB2ZWMyKCAoMC4wMTIgKiBzdHJlbmd0aCkgKiBkaXJYLCAoMC4wMTIgKiBzdHJlbmd0aCkgKiBkaXJZICk7XFxuXFxuICAgIHZDb2xvciA9IHZlYzQoYUNvbG9yLnJnYiAqIGFDb2xvci5hLCBhQ29sb3IuYSk7XFxufVxcblwiLFxuICAgICAgICAvLyBmcmFnbWVudCBzaGFkZXJcbiAgICAgICAgXCJwcmVjaXNpb24gbG93cCBmbG9hdDtcXG5cXG52YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDtcXG52YXJ5aW5nIHZlYzIgdkJsdXJUZXhDb29yZHNbM107XFxudmFyeWluZyB2ZWM0IHZDb2xvcjtcXG5cXG51bmlmb3JtIHNhbXBsZXIyRCB1U2FtcGxlcjtcXG5cXG52b2lkIG1haW4odm9pZClcXG57XFxuICAgIGdsX0ZyYWdDb2xvciA9IHZlYzQoMC4wKTtcXG5cXG4gICAgZ2xfRnJhZ0NvbG9yICs9IHRleHR1cmUyRCh1U2FtcGxlciwgdlRleHR1cmVDb29yZCAgICAgKSAqIDAuMzk4OTQyMjgwNDAxNDMyNztcXG4gICAgZ2xfRnJhZ0NvbG9yICs9IHRleHR1cmUyRCh1U2FtcGxlciwgdkJsdXJUZXhDb29yZHNbIDBdKSAqIDAuMjQxOTcwNzI0NTE5MTQ1NDtcXG4gICAgZ2xfRnJhZ0NvbG9yICs9IHRleHR1cmUyRCh1U2FtcGxlciwgdkJsdXJUZXhDb29yZHNbIDFdKSAqIDAuMDUzOTkwOTY2NTEzMTg5ODU7XFxuICAgIGdsX0ZyYWdDb2xvciArPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZCbHVyVGV4Q29vcmRzWyAyXSkgKiAwLjAwNDQzMTg0ODQxMTkzODM0MTtcXG59XFxuXCIsXG4gICAgICAgIC8vIHNldCB0aGUgdW5pZm9ybXNcbiAgICAgICAge1xuICAgICAgICAgICAgc3RyZW5ndGg6IHsgdHlwZTogJzFmJywgdmFsdWU6IDEgfSxcbiAgICAgICAgICAgIGRpclg6IHsgdHlwZTogJzFmJywgdmFsdWU6IGRpclggfHwgMCB9LFxuICAgICAgICAgICAgZGlyWTogeyB0eXBlOiAnMWYnLCB2YWx1ZTogZGlyWSB8fCAwIH1cbiAgICAgICAgfVxuICAgICk7XG5cbiAgICB0aGlzLmRlZmF1bHRGaWx0ZXIgPSBuZXcgY29yZS5BYnN0cmFjdEZpbHRlcigpO1xuXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgbnVtYmVyIG9mIHBhc3NlcyBmb3IgYmx1ci4gTW9yZSBwYXNzZXMgbWVhbnMgaGlnaGVyIHF1YWlsaXR5IGJsdXJpbmcuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMVxuICAgICAqL1xuICAgIHRoaXMucGFzc2VzID0gMTtcblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIFggZGlyZWN0aW9uIG9mIHRoZSBibHVyXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMFxuICAgICAqL1xuICAgIHRoaXMuZGlyWCA9IGRpclggfHwgMDtcblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIFkgZGlyZWN0aW9uIG9mIHRoZSBibHVyXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMFxuICAgICAqL1xuICAgIHRoaXMuZGlyWSA9IGRpclkgfHwgMDtcblxuICAgIHRoaXMuc3RyZW5ndGggPSA0O1xufVxuXG5CbHVyRGlyRmlsdGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoY29yZS5BYnN0cmFjdEZpbHRlci5wcm90b3R5cGUpO1xuQmx1ckRpckZpbHRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBCbHVyRGlyRmlsdGVyO1xubW9kdWxlLmV4cG9ydHMgPSBCbHVyRGlyRmlsdGVyO1xuXG5CbHVyRGlyRmlsdGVyLnByb3RvdHlwZS5hcHBseUZpbHRlciA9IGZ1bmN0aW9uIChyZW5kZXJlciwgaW5wdXQsIG91dHB1dCwgY2xlYXIpIHtcblxuICAgIHZhciBzaGFkZXIgPSB0aGlzLmdldFNoYWRlcihyZW5kZXJlcik7XG5cbiAgICB0aGlzLnVuaWZvcm1zLnN0cmVuZ3RoLnZhbHVlID0gdGhpcy5zdHJlbmd0aCAvIDQgLyB0aGlzLnBhc3NlcyAqIChpbnB1dC5mcmFtZS53aWR0aCAvIGlucHV0LnNpemUud2lkdGgpO1xuXG4gICAgaWYgKHRoaXMucGFzc2VzID09PSAxKSB7XG4gICAgICAgIHJlbmRlcmVyLmZpbHRlck1hbmFnZXIuYXBwbHlGaWx0ZXIoc2hhZGVyLCBpbnB1dCwgb3V0cHV0LCBjbGVhcik7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgdmFyIHJlbmRlclRhcmdldCA9IHJlbmRlcmVyLmZpbHRlck1hbmFnZXIuZ2V0UmVuZGVyVGFyZ2V0KHRydWUpO1xuXG4gICAgICAgIHJlbmRlcmVyLmZpbHRlck1hbmFnZXIuYXBwbHlGaWx0ZXIoc2hhZGVyLCBpbnB1dCwgcmVuZGVyVGFyZ2V0LCBjbGVhcik7XG5cbiAgICAgICAgZm9yKHZhciBpID0gMDsgaSA8IHRoaXMucGFzc2VzLTI7IGkrKylcbiAgICAgICAge1xuICAgICAgICAgICAgLy90aGlzLnVuaWZvcm1zLnN0cmVuZ3RoLnZhbHVlID0gdGhpcy5zdHJlbmd0aCAvIDQgLyAodGhpcy5wYXNzZXMrKGkqMikpICogKGlucHV0LmZyYW1lLndpZHRoIC8gaW5wdXQuc2l6ZS53aWR0aCk7XG4gICAgICAgICAgICByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLmFwcGx5RmlsdGVyKHNoYWRlciwgcmVuZGVyVGFyZ2V0LCByZW5kZXJUYXJnZXQsIGNsZWFyKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJlbmRlcmVyLmZpbHRlck1hbmFnZXIuYXBwbHlGaWx0ZXIoc2hhZGVyLCByZW5kZXJUYXJnZXQsIG91dHB1dCwgY2xlYXIpO1xuXG4gICAgICAgIHJlbmRlcmVyLmZpbHRlck1hbmFnZXIucmV0dXJuUmVuZGVyVGFyZ2V0KHJlbmRlclRhcmdldCk7XG4gICAgfVxufTtcblxuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhCbHVyRGlyRmlsdGVyLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIHN0cmVuZ3RoIG9mIGJvdGggdGhlIGJsdXIuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5CbHVyRGlyRmlsdGVyI1xuICAgICAqIEBkZWZhdWx0IDJcbiAgICAgKi9cbiAgICBibHVyOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuc3RyZW5ndGg7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnBhZGRpbmcgPSB2YWx1ZSAqIDAuNTtcbiAgICAgICAgICAgIHRoaXMuc3RyZW5ndGggPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgWCBkaXJlY3Rpb24gb2YgdGhlIGJsdXIuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5CbHVyWUZpbHRlciNcbiAgICAgKiBAZGVmYXVsdCAwXG4gICAgICovXG4gICAgZGlyWDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmRpclg7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLmRpclgudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgWSBkaXJlY3Rpb24gb2YgdGhlIGJsdXIuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5CbHVyRGlyRmlsdGVyI1xuICAgICAqIEBkZWZhdWx0IDBcbiAgICAgKi9cbiAgICBkaXJZOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZGlyWTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudW5pZm9ybXMuZGlyWS52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfVxufSk7XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uLy4uL2NvcmUnKSxcbiAgICBCbHVyWEZpbHRlciA9IHJlcXVpcmUoJy4vQmx1clhGaWx0ZXInKSxcbiAgICBCbHVyWUZpbHRlciA9IHJlcXVpcmUoJy4vQmx1cllGaWx0ZXInKTtcblxuLyoqXG4gKiBUaGUgQmx1ckZpbHRlciBhcHBsaWVzIGEgR2F1c3NpYW4gYmx1ciB0byBhbiBvYmplY3QuXG4gKiBUaGUgc3RyZW5ndGggb2YgdGhlIGJsdXIgY2FuIGJlIHNldCBmb3IgeC0gYW5kIHktYXhpcyBzZXBhcmF0ZWx5LlxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5BYnN0cmFjdEZpbHRlclxuICogQG1lbWJlcm9mIFBJWEkuZmlsdGVyc1xuICovXG5mdW5jdGlvbiBCbHVyRmlsdGVyKClcbntcbiAgICBjb3JlLkFic3RyYWN0RmlsdGVyLmNhbGwodGhpcyk7XG5cbiAgICB0aGlzLmJsdXJYRmlsdGVyID0gbmV3IEJsdXJYRmlsdGVyKCk7XG4gICAgdGhpcy5ibHVyWUZpbHRlciA9IG5ldyBCbHVyWUZpbHRlcigpO1xufVxuXG5CbHVyRmlsdGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoY29yZS5BYnN0cmFjdEZpbHRlci5wcm90b3R5cGUpO1xuQmx1ckZpbHRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBCbHVyRmlsdGVyO1xubW9kdWxlLmV4cG9ydHMgPSBCbHVyRmlsdGVyO1xuXG5CbHVyRmlsdGVyLnByb3RvdHlwZS5hcHBseUZpbHRlciA9IGZ1bmN0aW9uIChyZW5kZXJlciwgaW5wdXQsIG91dHB1dClcbntcbiAgICB2YXIgcmVuZGVyVGFyZ2V0ID0gcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5nZXRSZW5kZXJUYXJnZXQodHJ1ZSk7XG5cbiAgICB0aGlzLmJsdXJYRmlsdGVyLmFwcGx5RmlsdGVyKHJlbmRlcmVyLCBpbnB1dCwgcmVuZGVyVGFyZ2V0KTtcbiAgICB0aGlzLmJsdXJZRmlsdGVyLmFwcGx5RmlsdGVyKHJlbmRlcmVyLCByZW5kZXJUYXJnZXQsIG91dHB1dCk7XG5cbiAgICByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLnJldHVyblJlbmRlclRhcmdldChyZW5kZXJUYXJnZXQpO1xufTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoQmx1ckZpbHRlci5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBzdHJlbmd0aCBvZiBib3RoIHRoZSBibHVyWCBhbmQgYmx1clkgcHJvcGVydGllcyBzaW11bHRhbmVvdXNseVxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJPZiBQSVhJLmZpbHRlcnMuQmx1ckZpbHRlciNcbiAgICAgKiBAZGVmYXVsdCAyXG4gICAgICovXG4gICAgYmx1cjoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmJsdXJYRmlsdGVyLmJsdXI7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnBhZGRpbmcgPSBNYXRoLmFicyh2YWx1ZSkgKiAwLjU7XG4gICAgICAgICAgICB0aGlzLmJsdXJYRmlsdGVyLmJsdXIgPSB0aGlzLmJsdXJZRmlsdGVyLmJsdXIgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBudW1iZXIgb2YgcGFzc2VzIGZvciBibHVyLiBNb3JlIHBhc3NlcyBtZWFucyBoaWdoZXIgcXVhaWxpdHkgYmx1cmluZy5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLkJsdXJZRmlsdGVyI1xuICAgICAqIEBkZWZhdWx0IDFcbiAgICAgKi9cbiAgICBwYXNzZXM6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gIHRoaXMuYmx1clhGaWx0ZXIucGFzc2VzO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5ibHVyWEZpbHRlci5wYXNzZXMgPSB0aGlzLmJsdXJZRmlsdGVyLnBhc3NlcyA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIHN0cmVuZ3RoIG9mIHRoZSBibHVyWCBwcm9wZXJ0eVxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJPZiBQSVhJLmZpbHRlcnMuQmx1ckZpbHRlciNcbiAgICAgKiBAZGVmYXVsdCAyXG4gICAgICovXG4gICAgYmx1clg6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5ibHVyWEZpbHRlci5ibHVyO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5ibHVyWEZpbHRlci5ibHVyID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgc3RyZW5ndGggb2YgdGhlIGJsdXJZIHByb3BlcnR5XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlck9mIFBJWEkuZmlsdGVycy5CbHVyRmlsdGVyI1xuICAgICAqIEBkZWZhdWx0IDJcbiAgICAgKi9cbiAgICBibHVyWToge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmJsdXJZRmlsdGVyLmJsdXI7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmJsdXJZRmlsdGVyLmJsdXIgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi8uLi9jb3JlJyk7XG4vLyBAc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9zdWJzdGFjay9icmZzL2lzc3Vlcy8yNVxuXG5cbi8qKlxuICogVGhlIEJsdXJYRmlsdGVyIGFwcGxpZXMgYSBob3Jpem9udGFsIEdhdXNzaWFuIGJsdXIgdG8gYW4gb2JqZWN0LlxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5BYnN0cmFjdEZpbHRlclxuICogQG1lbWJlcm9mIFBJWEkuZmlsdGVyc1xuICovXG5mdW5jdGlvbiBCbHVyWEZpbHRlcigpXG57XG4gICAgY29yZS5BYnN0cmFjdEZpbHRlci5jYWxsKHRoaXMsXG4gICAgICAgIC8vIHZlcnRleCBzaGFkZXJcbiAgICAgICAgXCJhdHRyaWJ1dGUgdmVjMiBhVmVydGV4UG9zaXRpb247XFxuYXR0cmlidXRlIHZlYzIgYVRleHR1cmVDb29yZDtcXG5hdHRyaWJ1dGUgdmVjNCBhQ29sb3I7XFxuXFxudW5pZm9ybSBmbG9hdCBzdHJlbmd0aDtcXG51bmlmb3JtIG1hdDMgcHJvamVjdGlvbk1hdHJpeDtcXG5cXG52YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDtcXG52YXJ5aW5nIHZlYzQgdkNvbG9yO1xcbnZhcnlpbmcgdmVjMiB2Qmx1clRleENvb3Jkc1s2XTtcXG5cXG52b2lkIG1haW4odm9pZClcXG57XFxuICAgIGdsX1Bvc2l0aW9uID0gdmVjNCgocHJvamVjdGlvbk1hdHJpeCAqIHZlYzMoKGFWZXJ0ZXhQb3NpdGlvbiksIDEuMCkpLnh5LCAwLjAsIDEuMCk7XFxuICAgIHZUZXh0dXJlQ29vcmQgPSBhVGV4dHVyZUNvb3JkO1xcblxcbiAgICB2Qmx1clRleENvb3Jkc1sgMF0gPSBhVGV4dHVyZUNvb3JkICsgdmVjMigtMC4wMTIgKiBzdHJlbmd0aCwgMC4wKTtcXG4gICAgdkJsdXJUZXhDb29yZHNbIDFdID0gYVRleHR1cmVDb29yZCArIHZlYzIoLTAuMDA4ICogc3RyZW5ndGgsIDAuMCk7XFxuICAgIHZCbHVyVGV4Q29vcmRzWyAyXSA9IGFUZXh0dXJlQ29vcmQgKyB2ZWMyKC0wLjAwNCAqIHN0cmVuZ3RoLCAwLjApO1xcbiAgICB2Qmx1clRleENvb3Jkc1sgM10gPSBhVGV4dHVyZUNvb3JkICsgdmVjMiggMC4wMDQgKiBzdHJlbmd0aCwgMC4wKTtcXG4gICAgdkJsdXJUZXhDb29yZHNbIDRdID0gYVRleHR1cmVDb29yZCArIHZlYzIoIDAuMDA4ICogc3RyZW5ndGgsIDAuMCk7XFxuICAgIHZCbHVyVGV4Q29vcmRzWyA1XSA9IGFUZXh0dXJlQ29vcmQgKyB2ZWMyKCAwLjAxMiAqIHN0cmVuZ3RoLCAwLjApO1xcblxcbiAgICB2Q29sb3IgPSB2ZWM0KGFDb2xvci5yZ2IgKiBhQ29sb3IuYSwgYUNvbG9yLmEpO1xcbn1cXG5cIixcbiAgICAgICAgLy8gZnJhZ21lbnQgc2hhZGVyXG4gICAgICAgIFwicHJlY2lzaW9uIGxvd3AgZmxvYXQ7XFxuXFxudmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7XFxudmFyeWluZyB2ZWMyIHZCbHVyVGV4Q29vcmRzWzZdO1xcbnZhcnlpbmcgdmVjNCB2Q29sb3I7XFxuXFxudW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXI7XFxuXFxudm9pZCBtYWluKHZvaWQpXFxue1xcbiAgICBnbF9GcmFnQ29sb3IgPSB2ZWM0KDAuMCk7XFxuXFxuICAgIGdsX0ZyYWdDb2xvciArPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZCbHVyVGV4Q29vcmRzWyAwXSkqMC4wMDQ0MzE4NDg0MTE5MzgzNDE7XFxuICAgIGdsX0ZyYWdDb2xvciArPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZCbHVyVGV4Q29vcmRzWyAxXSkqMC4wNTM5OTA5NjY1MTMxODk4NTtcXG4gICAgZ2xfRnJhZ0NvbG9yICs9IHRleHR1cmUyRCh1U2FtcGxlciwgdkJsdXJUZXhDb29yZHNbIDJdKSowLjI0MTk3MDcyNDUxOTE0NTQ7XFxuICAgIGdsX0ZyYWdDb2xvciArPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZUZXh0dXJlQ29vcmQgICAgICkqMC4zOTg5NDIyODA0MDE0MzI3O1xcbiAgICBnbF9GcmFnQ29sb3IgKz0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2Qmx1clRleENvb3Jkc1sgM10pKjAuMjQxOTcwNzI0NTE5MTQ1NDtcXG4gICAgZ2xfRnJhZ0NvbG9yICs9IHRleHR1cmUyRCh1U2FtcGxlciwgdkJsdXJUZXhDb29yZHNbIDRdKSowLjA1Mzk5MDk2NjUxMzE4OTg1O1xcbiAgICBnbF9GcmFnQ29sb3IgKz0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2Qmx1clRleENvb3Jkc1sgNV0pKjAuMDA0NDMxODQ4NDExOTM4MzQxO1xcbn1cXG5cIixcbiAgICAgICAgLy8gc2V0IHRoZSB1bmlmb3Jtc1xuICAgICAgICB7XG4gICAgICAgICAgICBzdHJlbmd0aDogeyB0eXBlOiAnMWYnLCB2YWx1ZTogMSB9XG4gICAgICAgIH1cbiAgICApO1xuXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgbnVtYmVyIG9mIHBhc3NlcyBmb3IgYmx1ci4gTW9yZSBwYXNzZXMgbWVhbnMgaGlnaGVyIHF1YWlsaXR5IGJsdXJpbmcuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMVxuICAgICAqL1xuICAgIHRoaXMucGFzc2VzID0gMTtcblxuICAgIHRoaXMuc3RyZW5ndGggPSA0O1xufVxuXG5CbHVyWEZpbHRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuQWJzdHJhY3RGaWx0ZXIucHJvdG90eXBlKTtcbkJsdXJYRmlsdGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IEJsdXJYRmlsdGVyO1xubW9kdWxlLmV4cG9ydHMgPSBCbHVyWEZpbHRlcjtcblxuQmx1clhGaWx0ZXIucHJvdG90eXBlLmFwcGx5RmlsdGVyID0gZnVuY3Rpb24gKHJlbmRlcmVyLCBpbnB1dCwgb3V0cHV0LCBjbGVhcilcbntcbiAgICB2YXIgc2hhZGVyID0gdGhpcy5nZXRTaGFkZXIocmVuZGVyZXIpO1xuXG4gICAgdGhpcy51bmlmb3Jtcy5zdHJlbmd0aC52YWx1ZSA9IHRoaXMuc3RyZW5ndGggLyA0IC8gdGhpcy5wYXNzZXMgKiAoaW5wdXQuZnJhbWUud2lkdGggLyBpbnB1dC5zaXplLndpZHRoKTtcblxuICAgIGlmKHRoaXMucGFzc2VzID09PSAxKVxuICAgIHtcbiAgICAgICAgcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5hcHBseUZpbHRlcihzaGFkZXIsIGlucHV0LCBvdXRwdXQsIGNsZWFyKTtcbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgdmFyIHJlbmRlclRhcmdldCA9IHJlbmRlcmVyLmZpbHRlck1hbmFnZXIuZ2V0UmVuZGVyVGFyZ2V0KHRydWUpO1xuICAgICAgICB2YXIgZmxpcCA9IGlucHV0O1xuICAgICAgICB2YXIgZmxvcCA9IHJlbmRlclRhcmdldDtcblxuICAgICAgICBmb3IodmFyIGkgPSAwOyBpIDwgdGhpcy5wYXNzZXMtMTsgaSsrKVxuICAgICAgICB7XG4gICAgICAgICAgICByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLmFwcGx5RmlsdGVyKHNoYWRlciwgZmxpcCwgZmxvcCwgdHJ1ZSk7XG5cbiAgICAgICAgICAgdmFyIHRlbXAgPSBmbG9wO1xuICAgICAgICAgICBmbG9wID0gZmxpcDtcbiAgICAgICAgICAgZmxpcCA9IHRlbXA7XG4gICAgICAgIH1cblxuICAgICAgICByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLmFwcGx5RmlsdGVyKHNoYWRlciwgZmxpcCwgb3V0cHV0LCBjbGVhcik7XG5cbiAgICAgICAgcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5yZXR1cm5SZW5kZXJUYXJnZXQocmVuZGVyVGFyZ2V0KTtcbiAgICB9XG59O1xuXG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKEJsdXJYRmlsdGVyLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIHN0cmVuZ3RoIG9mIGJvdGggdGhlIGJsdXIuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5CbHVyWEZpbHRlciNcbiAgICAgKiBAZGVmYXVsdCAyXG4gICAgICovXG4gICAgYmx1cjoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiAgdGhpcy5zdHJlbmd0aDtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMucGFkZGluZyA9ICBNYXRoLmFicyh2YWx1ZSkgKiAwLjU7XG4gICAgICAgICAgICB0aGlzLnN0cmVuZ3RoID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG59KTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vLi4vY29yZScpO1xuLy8gQHNlZSBodHRwczovL2dpdGh1Yi5jb20vc3Vic3RhY2svYnJmcy9pc3N1ZXMvMjVcblxuXG4vKipcbiAqIFRoZSBCbHVyWUZpbHRlciBhcHBsaWVzIGEgaG9yaXpvbnRhbCBHYXVzc2lhbiBibHVyIHRvIGFuIG9iamVjdC5cbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQWJzdHJhY3RGaWx0ZXJcbiAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnNcbiAqL1xuZnVuY3Rpb24gQmx1cllGaWx0ZXIoKVxue1xuICAgIGNvcmUuQWJzdHJhY3RGaWx0ZXIuY2FsbCh0aGlzLFxuICAgICAgICAvLyB2ZXJ0ZXggc2hhZGVyXG4gICAgICAgIFwiYXR0cmlidXRlIHZlYzIgYVZlcnRleFBvc2l0aW9uO1xcbmF0dHJpYnV0ZSB2ZWMyIGFUZXh0dXJlQ29vcmQ7XFxuYXR0cmlidXRlIHZlYzQgYUNvbG9yO1xcblxcbnVuaWZvcm0gZmxvYXQgc3RyZW5ndGg7XFxudW5pZm9ybSBtYXQzIHByb2plY3Rpb25NYXRyaXg7XFxuXFxudmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7XFxudmFyeWluZyB2ZWM0IHZDb2xvcjtcXG52YXJ5aW5nIHZlYzIgdkJsdXJUZXhDb29yZHNbNl07XFxuXFxudm9pZCBtYWluKHZvaWQpXFxue1xcbiAgICBnbF9Qb3NpdGlvbiA9IHZlYzQoKHByb2plY3Rpb25NYXRyaXggKiB2ZWMzKChhVmVydGV4UG9zaXRpb24pLCAxLjApKS54eSwgMC4wLCAxLjApO1xcbiAgICB2VGV4dHVyZUNvb3JkID0gYVRleHR1cmVDb29yZDtcXG5cXG4gICAgdkJsdXJUZXhDb29yZHNbIDBdID0gYVRleHR1cmVDb29yZCArIHZlYzIoMC4wLCAtMC4wMTIgKiBzdHJlbmd0aCk7XFxuICAgIHZCbHVyVGV4Q29vcmRzWyAxXSA9IGFUZXh0dXJlQ29vcmQgKyB2ZWMyKDAuMCwgLTAuMDA4ICogc3RyZW5ndGgpO1xcbiAgICB2Qmx1clRleENvb3Jkc1sgMl0gPSBhVGV4dHVyZUNvb3JkICsgdmVjMigwLjAsIC0wLjAwNCAqIHN0cmVuZ3RoKTtcXG4gICAgdkJsdXJUZXhDb29yZHNbIDNdID0gYVRleHR1cmVDb29yZCArIHZlYzIoMC4wLCAgMC4wMDQgKiBzdHJlbmd0aCk7XFxuICAgIHZCbHVyVGV4Q29vcmRzWyA0XSA9IGFUZXh0dXJlQ29vcmQgKyB2ZWMyKDAuMCwgIDAuMDA4ICogc3RyZW5ndGgpO1xcbiAgICB2Qmx1clRleENvb3Jkc1sgNV0gPSBhVGV4dHVyZUNvb3JkICsgdmVjMigwLjAsICAwLjAxMiAqIHN0cmVuZ3RoKTtcXG5cXG4gICB2Q29sb3IgPSB2ZWM0KGFDb2xvci5yZ2IgKiBhQ29sb3IuYSwgYUNvbG9yLmEpO1xcbn1cXG5cIixcbiAgICAgICAgLy8gZnJhZ21lbnQgc2hhZGVyXG4gICAgICAgIFwicHJlY2lzaW9uIGxvd3AgZmxvYXQ7XFxuXFxudmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7XFxudmFyeWluZyB2ZWMyIHZCbHVyVGV4Q29vcmRzWzZdO1xcbnZhcnlpbmcgdmVjNCB2Q29sb3I7XFxuXFxudW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXI7XFxuXFxudm9pZCBtYWluKHZvaWQpXFxue1xcbiAgICBnbF9GcmFnQ29sb3IgPSB2ZWM0KDAuMCk7XFxuXFxuICAgIGdsX0ZyYWdDb2xvciArPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZCbHVyVGV4Q29vcmRzWyAwXSkqMC4wMDQ0MzE4NDg0MTE5MzgzNDE7XFxuICAgIGdsX0ZyYWdDb2xvciArPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZCbHVyVGV4Q29vcmRzWyAxXSkqMC4wNTM5OTA5NjY1MTMxODk4NTtcXG4gICAgZ2xfRnJhZ0NvbG9yICs9IHRleHR1cmUyRCh1U2FtcGxlciwgdkJsdXJUZXhDb29yZHNbIDJdKSowLjI0MTk3MDcyNDUxOTE0NTQ7XFxuICAgIGdsX0ZyYWdDb2xvciArPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZUZXh0dXJlQ29vcmQgICAgICkqMC4zOTg5NDIyODA0MDE0MzI3O1xcbiAgICBnbF9GcmFnQ29sb3IgKz0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2Qmx1clRleENvb3Jkc1sgM10pKjAuMjQxOTcwNzI0NTE5MTQ1NDtcXG4gICAgZ2xfRnJhZ0NvbG9yICs9IHRleHR1cmUyRCh1U2FtcGxlciwgdkJsdXJUZXhDb29yZHNbIDRdKSowLjA1Mzk5MDk2NjUxMzE4OTg1O1xcbiAgICBnbF9GcmFnQ29sb3IgKz0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2Qmx1clRleENvb3Jkc1sgNV0pKjAuMDA0NDMxODQ4NDExOTM4MzQxO1xcbn1cXG5cIixcbiAgICAgICAgLy8gc2V0IHRoZSB1bmlmb3Jtc1xuICAgICAgICB7XG4gICAgICAgICAgICBzdHJlbmd0aDogeyB0eXBlOiAnMWYnLCB2YWx1ZTogMSB9XG4gICAgICAgIH1cbiAgICApO1xuXG4gICAgdGhpcy5wYXNzZXMgPSAxO1xuICAgIHRoaXMuc3RyZW5ndGggPSA0O1xufVxuXG5CbHVyWUZpbHRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuQWJzdHJhY3RGaWx0ZXIucHJvdG90eXBlKTtcbkJsdXJZRmlsdGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IEJsdXJZRmlsdGVyO1xubW9kdWxlLmV4cG9ydHMgPSBCbHVyWUZpbHRlcjtcblxuQmx1cllGaWx0ZXIucHJvdG90eXBlLmFwcGx5RmlsdGVyID0gZnVuY3Rpb24gKHJlbmRlcmVyLCBpbnB1dCwgb3V0cHV0LCBjbGVhcilcbntcbiAgICB2YXIgc2hhZGVyID0gdGhpcy5nZXRTaGFkZXIocmVuZGVyZXIpO1xuXG4gICAgdGhpcy51bmlmb3Jtcy5zdHJlbmd0aC52YWx1ZSA9IE1hdGguYWJzKHRoaXMuc3RyZW5ndGgpIC8gNCAvIHRoaXMucGFzc2VzICogKGlucHV0LmZyYW1lLmhlaWdodCAvIGlucHV0LnNpemUuaGVpZ2h0KTtcblxuICAgIGlmKHRoaXMucGFzc2VzID09PSAxKVxuICAgIHtcbiAgICAgICAgcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5hcHBseUZpbHRlcihzaGFkZXIsIGlucHV0LCBvdXRwdXQsIGNsZWFyKTtcbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgdmFyIHJlbmRlclRhcmdldCA9IHJlbmRlcmVyLmZpbHRlck1hbmFnZXIuZ2V0UmVuZGVyVGFyZ2V0KHRydWUpO1xuICAgICAgICB2YXIgZmxpcCA9IGlucHV0O1xuICAgICAgICB2YXIgZmxvcCA9IHJlbmRlclRhcmdldDtcblxuICAgICAgICBmb3IodmFyIGkgPSAwOyBpIDwgdGhpcy5wYXNzZXMtMTsgaSsrKVxuICAgICAgICB7XG4gICAgICAgICAgICByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLmFwcGx5RmlsdGVyKHNoYWRlciwgZmxpcCwgZmxvcCwgdHJ1ZSk7XG5cbiAgICAgICAgICAgdmFyIHRlbXAgPSBmbG9wO1xuICAgICAgICAgICBmbG9wID0gZmxpcDtcbiAgICAgICAgICAgZmxpcCA9IHRlbXA7XG4gICAgICAgIH1cblxuICAgICAgICByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLmFwcGx5RmlsdGVyKHNoYWRlciwgZmxpcCwgb3V0cHV0LCBjbGVhcik7XG5cbiAgICAgICAgcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5yZXR1cm5SZW5kZXJUYXJnZXQocmVuZGVyVGFyZ2V0KTtcbiAgICB9XG59O1xuXG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKEJsdXJZRmlsdGVyLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIHN0cmVuZ3RoIG9mIGJvdGggdGhlIGJsdXIuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5CbHVyWUZpbHRlciNcbiAgICAgKiBAZGVmYXVsdCAyXG4gICAgICovXG4gICAgYmx1cjoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiAgdGhpcy5zdHJlbmd0aDtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMucGFkZGluZyA9IE1hdGguYWJzKHZhbHVlKSAqIDAuNTtcbiAgICAgICAgICAgIHRoaXMuc3RyZW5ndGggPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi8uLi9jb3JlJyk7XG4vLyBAc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9zdWJzdGFjay9icmZzL2lzc3Vlcy8yNVxuXG5cbi8qKlxuICogQSBTbWFydCBCbHVyIEZpbHRlci5cbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQWJzdHJhY3RGaWx0ZXJcbiAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnNcbiAqL1xuZnVuY3Rpb24gU21hcnRCbHVyRmlsdGVyKClcbntcbiAgICBjb3JlLkFic3RyYWN0RmlsdGVyLmNhbGwodGhpcyxcbiAgICAgICAgLy8gdmVydGV4IHNoYWRlclxuICAgICAgICBudWxsLFxuICAgICAgICAvLyBmcmFnbWVudCBzaGFkZXJcbiAgICAgICAgXCJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcXG5cXG52YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDtcXG5cXG51bmlmb3JtIHNhbXBsZXIyRCB1U2FtcGxlcjtcXG51bmlmb3JtIHZlYzIgZGVsdGE7XFxuXFxuZmxvYXQgcmFuZG9tKHZlYzMgc2NhbGUsIGZsb2F0IHNlZWQpXFxue1xcbiAgICByZXR1cm4gZnJhY3Qoc2luKGRvdChnbF9GcmFnQ29vcmQueHl6ICsgc2VlZCwgc2NhbGUpKSAqIDQzNzU4LjU0NTMgKyBzZWVkKTtcXG59XFxuXFxudm9pZCBtYWluKHZvaWQpXFxue1xcbiAgICB2ZWM0IGNvbG9yID0gdmVjNCgwLjApO1xcbiAgICBmbG9hdCB0b3RhbCA9IDAuMDtcXG5cXG4gICAgZmxvYXQgb2Zmc2V0ID0gcmFuZG9tKHZlYzMoMTIuOTg5OCwgNzguMjMzLCAxNTEuNzE4MiksIDAuMCk7XFxuXFxuICAgIGZvciAoZmxvYXQgdCA9IC0zMC4wOyB0IDw9IDMwLjA7IHQrKylcXG4gICAge1xcbiAgICAgICAgZmxvYXQgcGVyY2VudCA9ICh0ICsgb2Zmc2V0IC0gMC41KSAvIDMwLjA7XFxuICAgICAgICBmbG9hdCB3ZWlnaHQgPSAxLjAgLSBhYnMocGVyY2VudCk7XFxuICAgICAgICB2ZWM0IHNhbXBsZSA9IHRleHR1cmUyRCh1U2FtcGxlciwgdlRleHR1cmVDb29yZCArIGRlbHRhICogcGVyY2VudCk7XFxuICAgICAgICBzYW1wbGUucmdiICo9IHNhbXBsZS5hO1xcbiAgICAgICAgY29sb3IgKz0gc2FtcGxlICogd2VpZ2h0O1xcbiAgICAgICAgdG90YWwgKz0gd2VpZ2h0O1xcbiAgICB9XFxuXFxuICAgIGdsX0ZyYWdDb2xvciA9IGNvbG9yIC8gdG90YWw7XFxuICAgIGdsX0ZyYWdDb2xvci5yZ2IgLz0gZ2xfRnJhZ0NvbG9yLmEgKyAwLjAwMDAxO1xcbn1cXG5cIixcbiAgICAgICAgLy8gdW5pZm9ybXNcbiAgICAgICAge1xuICAgICAgICAgIGRlbHRhOiB7IHR5cGU6ICd2MicsIHZhbHVlOiB7IHg6IDAuMSwgeTogMC4wIH0gfVxuICAgICAgICB9XG4gICAgKTtcbn1cblxuU21hcnRCbHVyRmlsdGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoY29yZS5BYnN0cmFjdEZpbHRlci5wcm90b3R5cGUpO1xuU21hcnRCbHVyRmlsdGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFNtYXJ0Qmx1ckZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gU21hcnRCbHVyRmlsdGVyO1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi8uLi9jb3JlJyk7XG4vLyBAc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9zdWJzdGFjay9icmZzL2lzc3Vlcy8yNVxuXG5cbi8qKlxuICogVGhlIENvbG9yTWF0cml4RmlsdGVyIGNsYXNzIGxldHMgeW91IGFwcGx5IGEgNXg0IG1hdHJpeCB0cmFuc2Zvcm1hdGlvbiBvbiB0aGUgUkdCQVxuICogY29sb3IgYW5kIGFscGhhIHZhbHVlcyBvZiBldmVyeSBwaXhlbCBvbiB5b3VyIGRpc3BsYXlPYmplY3QgdG8gcHJvZHVjZSBhIHJlc3VsdFxuICogd2l0aCBhIG5ldyBzZXQgb2YgUkdCQSBjb2xvciBhbmQgYWxwaGEgdmFsdWVzLiBJdCdzIHByZXR0eSBwb3dlcmZ1bCFcbiAqXG4gKiBgYGBqc1xuICogIHZhciBjb2xvck1hdHJpeCA9IG5ldyBQSVhJLkNvbG9yTWF0cml4RmlsdGVyKCk7XG4gKiAgY29udGFpbmVyLmZpbHRlcnMgPSBbY29sb3JNYXRyaXhdO1xuICogIGNvbG9yTWF0cml4LmNvbnRyYXN0KDIpO1xuICogYGBgXG4gKiBAYXV0aG9yIENsw6ltZW50IENoZW5lYmF1bHQgPGNsZW1lbnRAZ29vZGJveWRpZ2l0YWwuY29tPlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLkFic3RyYWN0RmlsdGVyXG4gKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzXG4gKi9cbmZ1bmN0aW9uIENvbG9yTWF0cml4RmlsdGVyKClcbntcbiAgICBjb3JlLkFic3RyYWN0RmlsdGVyLmNhbGwodGhpcyxcbiAgICAgICAgLy8gdmVydGV4IHNoYWRlclxuICAgICAgICBudWxsLFxuICAgICAgICAvLyBmcmFnbWVudCBzaGFkZXJcbiAgICAgICAgXCJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcXG5cXG52YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDtcXG51bmlmb3JtIHNhbXBsZXIyRCB1U2FtcGxlcjtcXG51bmlmb3JtIGZsb2F0IG1bMjVdO1xcblxcbnZvaWQgbWFpbih2b2lkKVxcbntcXG5cXG4gICAgdmVjNCBjID0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2VGV4dHVyZUNvb3JkKTtcXG5cXG4gICAgZ2xfRnJhZ0NvbG9yLnIgPSAobVswXSAqIGMucik7XFxuICAgICAgICBnbF9GcmFnQ29sb3IuciArPSAobVsxXSAqIGMuZyk7XFxuICAgICAgICBnbF9GcmFnQ29sb3IuciArPSAobVsyXSAqIGMuYik7XFxuICAgICAgICBnbF9GcmFnQ29sb3IuciArPSAobVszXSAqIGMuYSk7XFxuICAgICAgICBnbF9GcmFnQ29sb3IuciArPSBtWzRdO1xcblxcbiAgICBnbF9GcmFnQ29sb3IuZyA9IChtWzVdICogYy5yKTtcXG4gICAgICAgIGdsX0ZyYWdDb2xvci5nICs9IChtWzZdICogYy5nKTtcXG4gICAgICAgIGdsX0ZyYWdDb2xvci5nICs9IChtWzddICogYy5iKTtcXG4gICAgICAgIGdsX0ZyYWdDb2xvci5nICs9IChtWzhdICogYy5hKTtcXG4gICAgICAgIGdsX0ZyYWdDb2xvci5nICs9IG1bOV07XFxuXFxuICAgICBnbF9GcmFnQ29sb3IuYiA9IChtWzEwXSAqIGMucik7XFxuICAgICAgICBnbF9GcmFnQ29sb3IuYiArPSAobVsxMV0gKiBjLmcpO1xcbiAgICAgICAgZ2xfRnJhZ0NvbG9yLmIgKz0gKG1bMTJdICogYy5iKTtcXG4gICAgICAgIGdsX0ZyYWdDb2xvci5iICs9IChtWzEzXSAqIGMuYSk7XFxuICAgICAgICBnbF9GcmFnQ29sb3IuYiArPSBtWzE0XTtcXG5cXG4gICAgIGdsX0ZyYWdDb2xvci5hID0gKG1bMTVdICogYy5yKTtcXG4gICAgICAgIGdsX0ZyYWdDb2xvci5hICs9IChtWzE2XSAqIGMuZyk7XFxuICAgICAgICBnbF9GcmFnQ29sb3IuYSArPSAobVsxN10gKiBjLmIpO1xcbiAgICAgICAgZ2xfRnJhZ0NvbG9yLmEgKz0gKG1bMThdICogYy5hKTtcXG4gICAgICAgIGdsX0ZyYWdDb2xvci5hICs9IG1bMTldO1xcblxcbn1cXG5cIixcbiAgICAgICAgLy8gY3VzdG9tIHVuaWZvcm1zXG4gICAgICAgIHtcbiAgICAgICAgICAgIG06IHtcbiAgICAgICAgICAgICAgICB0eXBlOiAnMWZ2JywgdmFsdWU6IFtcbiAgICAgICAgICAgICAgICAgICAgMSwgMCwgMCwgMCwgMCxcbiAgICAgICAgICAgICAgICAgICAgMCwgMSwgMCwgMCwgMCxcbiAgICAgICAgICAgICAgICAgICAgMCwgMCwgMSwgMCwgMCxcbiAgICAgICAgICAgICAgICAgICAgMCwgMCwgMCwgMSwgMFxuICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICk7XG59XG5cbkNvbG9yTWF0cml4RmlsdGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoY29yZS5BYnN0cmFjdEZpbHRlci5wcm90b3R5cGUpO1xuQ29sb3JNYXRyaXhGaWx0ZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gQ29sb3JNYXRyaXhGaWx0ZXI7XG5tb2R1bGUuZXhwb3J0cyA9IENvbG9yTWF0cml4RmlsdGVyO1xuXG5cbi8qKlxuICogVHJhbnNmb3JtcyBjdXJyZW50IG1hdHJpeCBhbmQgc2V0IHRoZSBuZXcgb25lXG4gKlxuICogQHBhcmFtIG1hdHJpeCB7bnVtYmVyW119IChtYXQgNXg0KVxuICogQHBhcmFtIG11bHRpcGx5IHtib29sZWFufSBpZiB0cnVlLCBjdXJyZW50IG1hdHJpeCBhbmQgbWF0cml4IGFyZSBtdWx0aXBsaWVkLiBJZiBmYWxzZSwganVzdCBzZXQgdGhlIGN1cnJlbnQgbWF0cml4IHdpdGggQHBhcmFtIG1hdHJpeFxuICovXG5Db2xvck1hdHJpeEZpbHRlci5wcm90b3R5cGUuX2xvYWRNYXRyaXggPSBmdW5jdGlvbiAobWF0cml4LCBtdWx0aXBseSlcbntcbiAgICBtdWx0aXBseSA9ICEhbXVsdGlwbHk7XG5cbiAgICB2YXIgbmV3TWF0cml4ID0gbWF0cml4O1xuXG4gICAgaWYgKG11bHRpcGx5KSB7XG4gICAgICAgIHRoaXMuX211bHRpcGx5KG5ld01hdHJpeCwgdGhpcy51bmlmb3Jtcy5tLnZhbHVlLCBtYXRyaXgpO1xuICAgICAgICBuZXdNYXRyaXggPSB0aGlzLl9jb2xvck1hdHJpeChuZXdNYXRyaXgpO1xuICAgIH1cblxuICAgIC8vIHNldCB0aGUgbmV3IG1hdHJpeFxuICAgIHRoaXMudW5pZm9ybXMubS52YWx1ZSA9IG5ld01hdHJpeDtcbn07XG5cbi8qKlxuICogTXVsdGlwbGllcyB0d28gbWF0NSdzXG4gKlxuICogQHBhcmFtIG91dCB7bnVtYmVyW119IChtYXQgNXg0KSB0aGUgcmVjZWl2aW5nIG1hdHJpeFxuICogQHBhcmFtIGEge251bWJlcltdfSAobWF0IDV4NCkgdGhlIGZpcnN0IG9wZXJhbmRcbiAqIEBwYXJhbSBiIHtudW1iZXJbXX0gKG1hdCA1eDQpIHRoZSBzZWNvbmQgb3BlcmFuZFxuICogQHJldHVybnMgb3V0IHtudW1iZXJbXX0gKG1hdCA1eDQpXG4gKi9cbkNvbG9yTWF0cml4RmlsdGVyLnByb3RvdHlwZS5fbXVsdGlwbHkgPSBmdW5jdGlvbiAob3V0LCBhLCBiKVxue1xuXG4gICAgLy8gUmVkIENoYW5uZWxcbiAgICBvdXRbMF0gPSAoYVswXSAqIGJbMF0pICsgKGFbMV0gKiBiWzVdKSArIChhWzJdICogYlsxMF0pICsgKGFbM10gKiBiWzE1XSk7XG4gICAgb3V0WzFdID0gKGFbMF0gKiBiWzFdKSArIChhWzFdICogYls2XSkgKyAoYVsyXSAqIGJbMTFdKSArIChhWzNdICogYlsxNl0pO1xuICAgIG91dFsyXSA9IChhWzBdICogYlsyXSkgKyAoYVsxXSAqIGJbN10pICsgKGFbMl0gKiBiWzEyXSkgKyAoYVszXSAqIGJbMTddKTtcbiAgICBvdXRbM10gPSAoYVswXSAqIGJbM10pICsgKGFbMV0gKiBiWzhdKSArIChhWzJdICogYlsxM10pICsgKGFbM10gKiBiWzE4XSk7XG4gICAgb3V0WzRdID0gKGFbMF0gKiBiWzRdKSArIChhWzFdICogYls5XSkgKyAoYVsyXSAqIGJbMTRdKSArIChhWzNdICogYlsxOV0pO1xuXG4gICAgLy8gR3JlZW4gQ2hhbm5lbFxuICAgIG91dFs1XSA9IChhWzVdICogYlswXSkgKyAoYVs2XSAqIGJbNV0pICsgKGFbN10gKiBiWzEwXSkgKyAoYVs4XSAqIGJbMTVdKTtcbiAgICBvdXRbNl0gPSAoYVs1XSAqIGJbMV0pICsgKGFbNl0gKiBiWzZdKSArIChhWzddICogYlsxMV0pICsgKGFbOF0gKiBiWzE2XSk7XG4gICAgb3V0WzddID0gKGFbNV0gKiBiWzJdKSArIChhWzZdICogYls3XSkgKyAoYVs3XSAqIGJbMTJdKSArIChhWzhdICogYlsxN10pO1xuICAgIG91dFs4XSA9IChhWzVdICogYlszXSkgKyAoYVs2XSAqIGJbOF0pICsgKGFbN10gKiBiWzEzXSkgKyAoYVs4XSAqIGJbMThdKTtcbiAgICBvdXRbOV0gPSAoYVs1XSAqIGJbNF0pICsgKGFbNl0gKiBiWzldKSArIChhWzddICogYlsxNF0pICsgKGFbOF0gKiBiWzE5XSk7XG5cbiAgICAvLyBCbHVlIENoYW5uZWxcbiAgICBvdXRbMTBdID0gKGFbMTBdICogYlswXSkgKyAoYVsxMV0gKiBiWzVdKSArIChhWzEyXSAqIGJbMTBdKSArIChhWzEzXSAqIGJbMTVdKTtcbiAgICBvdXRbMTFdID0gKGFbMTBdICogYlsxXSkgKyAoYVsxMV0gKiBiWzZdKSArIChhWzEyXSAqIGJbMTFdKSArIChhWzEzXSAqIGJbMTZdKTtcbiAgICBvdXRbMTJdID0gKGFbMTBdICogYlsyXSkgKyAoYVsxMV0gKiBiWzddKSArIChhWzEyXSAqIGJbMTJdKSArIChhWzEzXSAqIGJbMTddKTtcbiAgICBvdXRbMTNdID0gKGFbMTBdICogYlszXSkgKyAoYVsxMV0gKiBiWzhdKSArIChhWzEyXSAqIGJbMTNdKSArIChhWzEzXSAqIGJbMThdKTtcbiAgICBvdXRbMTRdID0gKGFbMTBdICogYls0XSkgKyAoYVsxMV0gKiBiWzldKSArIChhWzEyXSAqIGJbMTRdKSArIChhWzEzXSAqIGJbMTldKTtcblxuICAgIC8vIEFscGhhIENoYW5uZWxcbiAgICBvdXRbMTVdID0gKGFbMTVdICogYlswXSkgKyAoYVsxNl0gKiBiWzVdKSArIChhWzE3XSAqIGJbMTBdKSArIChhWzE4XSAqIGJbMTVdKTtcbiAgICBvdXRbMTZdID0gKGFbMTVdICogYlsxXSkgKyAoYVsxNl0gKiBiWzZdKSArIChhWzE3XSAqIGJbMTFdKSArIChhWzE4XSAqIGJbMTZdKTtcbiAgICBvdXRbMTddID0gKGFbMTVdICogYlsyXSkgKyAoYVsxNl0gKiBiWzddKSArIChhWzE3XSAqIGJbMTJdKSArIChhWzE4XSAqIGJbMTddKTtcbiAgICBvdXRbMThdID0gKGFbMTVdICogYlszXSkgKyAoYVsxNl0gKiBiWzhdKSArIChhWzE3XSAqIGJbMTNdKSArIChhWzE4XSAqIGJbMThdKTtcbiAgICBvdXRbMTldID0gKGFbMTVdICogYls0XSkgKyAoYVsxNl0gKiBiWzldKSArIChhWzE3XSAqIGJbMTRdKSArIChhWzE4XSAqIGJbMTldKTtcblxuICAgIHJldHVybiBvdXQ7XG59O1xuXG4vKipcbiAqIENyZWF0ZSBhIEZsb2F0MzIgQXJyYXkgYW5kIG5vcm1hbGl6ZSB0aGUgb2Zmc2V0IGNvbXBvbmVudCB0byAwLTFcbiAqXG4gKiBAcGFyYW0gbWF0cml4IHtudW1iZXJbXX0gKG1hdCA1eDQpXG4gKiBAcmV0dXJuIG0ge251bWJlcltdfSAobWF0IDV4NCkgd2l0aCBhbGwgdmFsdWVzIGJldHdlZW4gMC0xXG4gKi9cbkNvbG9yTWF0cml4RmlsdGVyLnByb3RvdHlwZS5fY29sb3JNYXRyaXggPSBmdW5jdGlvbiAobWF0cml4KVxue1xuICAgIC8vIENyZWF0ZSBhIEZsb2F0MzIgQXJyYXkgYW5kIG5vcm1hbGl6ZSB0aGUgb2Zmc2V0IGNvbXBvbmVudCB0byAwLTFcbiAgICB2YXIgbSA9IG5ldyBGbG9hdDMyQXJyYXkobWF0cml4KTtcbiAgICBtWzRdIC89IDI1NTtcbiAgICBtWzldIC89IDI1NTtcbiAgICBtWzE0XSAvPSAyNTU7XG4gICAgbVsxOV0gLz0gMjU1O1xuXG4gICAgcmV0dXJuIG07XG59O1xuXG4vKipcbiAqIEFkanVzdHMgYnJpZ2h0bmVzc1xuICpcbiAqIEBwYXJhbSBiIHtudW1iZXJ9IHZhbHVlIG9mIHRoZSBicmlndGhuZXNzICgwIGlzIGJsYWNrKVxuICogQHBhcmFtIG11bHRpcGx5IHtib29sZWFufSByZWZlciB0byAuX2xvYWRNYXRyaXgoKSBtZXRob2RcbiAqL1xuQ29sb3JNYXRyaXhGaWx0ZXIucHJvdG90eXBlLmJyaWdodG5lc3MgPSBmdW5jdGlvbiAoYiwgbXVsdGlwbHkpXG57XG4gICAgdmFyIG1hdHJpeCA9IFtcbiAgICAgICAgYiwgMCwgMCwgMCwgMCxcbiAgICAgICAgMCwgYiwgMCwgMCwgMCxcbiAgICAgICAgMCwgMCwgYiwgMCwgMCxcbiAgICAgICAgMCwgMCwgMCwgMSwgMFxuICAgIF07XG5cbiAgICB0aGlzLl9sb2FkTWF0cml4KG1hdHJpeCwgbXVsdGlwbHkpO1xufTtcblxuLyoqXG4gKiBTZXQgdGhlIG1hdHJpY2VzIGluIGdyZXkgc2NhbGVzXG4gKlxuICogQHBhcmFtIHNjYWxlIHtudW1iZXJ9IHZhbHVlIG9mIHRoZSBncmV5ICgwIGlzIGJsYWNrKVxuICogQHBhcmFtIG11bHRpcGx5IHtib29sZWFufSByZWZlciB0byAuX2xvYWRNYXRyaXgoKSBtZXRob2RcbiAqL1xuQ29sb3JNYXRyaXhGaWx0ZXIucHJvdG90eXBlLmdyZXlzY2FsZSA9IGZ1bmN0aW9uIChzY2FsZSwgbXVsdGlwbHkpXG57XG4gICAgdmFyIG1hdHJpeCA9IFtcbiAgICAgICAgc2NhbGUsIHNjYWxlLCBzY2FsZSwgMCwgMCxcbiAgICAgICAgc2NhbGUsIHNjYWxlLCBzY2FsZSwgMCwgMCxcbiAgICAgICAgc2NhbGUsIHNjYWxlLCBzY2FsZSwgMCwgMCxcbiAgICAgICAgMCwgMCwgMCwgMSwgMFxuICAgIF07XG5cbiAgICB0aGlzLl9sb2FkTWF0cml4KG1hdHJpeCwgbXVsdGlwbHkpO1xufTtcbi8vQW1lcmljYW5pemVkIGFsaWFzXG5Db2xvck1hdHJpeEZpbHRlci5wcm90b3R5cGUuZ3JheXNjYWxlID0gQ29sb3JNYXRyaXhGaWx0ZXIucHJvdG90eXBlLmdyZXlzY2FsZTtcblxuLyoqXG4gKiBTZXQgdGhlIGJsYWNrIGFuZCB3aGl0ZSBtYXRyaWNlXG4gKiBNdWx0aXBseSB0aGUgY3VycmVudCBtYXRyaXhcbiAqXG4gKiBAcGFyYW0gbXVsdGlwbHkge2Jvb2xlYW59IHJlZmVyIHRvIC5fbG9hZE1hdHJpeCgpIG1ldGhvZFxuICovXG5Db2xvck1hdHJpeEZpbHRlci5wcm90b3R5cGUuYmxhY2tBbmRXaGl0ZSA9IGZ1bmN0aW9uIChtdWx0aXBseSlcbntcbiAgICB2YXIgbWF0cml4ID0gW1xuICAgICAgICAwLjMsIDAuNiwgMC4xLCAwLCAwLFxuICAgICAgICAwLjMsIDAuNiwgMC4xLCAwLCAwLFxuICAgICAgICAwLjMsIDAuNiwgMC4xLCAwLCAwLFxuICAgICAgICAwLCAwLCAwLCAxLCAwXG4gICAgXTtcblxuICAgIHRoaXMuX2xvYWRNYXRyaXgobWF0cml4LCBtdWx0aXBseSk7XG59O1xuXG4vKipcbiAqIFNldCB0aGUgaHVlIHByb3BlcnR5IG9mIHRoZSBjb2xvclxuICpcbiAqIEBwYXJhbSByb3RhdGlvbiB7bnVtYmVyfSBpbiBkZWdyZWVzXG4gKiBAcGFyYW0gbXVsdGlwbHkge2Jvb2xlYW59IHJlZmVyIHRvIC5fbG9hZE1hdHJpeCgpIG1ldGhvZFxuICovXG5Db2xvck1hdHJpeEZpbHRlci5wcm90b3R5cGUuaHVlID0gZnVuY3Rpb24gKHJvdGF0aW9uLCBtdWx0aXBseSlcbntcbiAgICByb3RhdGlvbiA9IChyb3RhdGlvbiB8fCAwKSAvIDE4MCAqIE1hdGguUEk7XG4gICAgdmFyIGNvcyA9IE1hdGguY29zKHJvdGF0aW9uKSxcbiAgICAgICAgc2luID0gTWF0aC5zaW4ocm90YXRpb24pO1xuXG4gICAgLy8gbHVtaW5hbmNlUmVkLCBsdW1pbmFuY2VHcmVlbiwgbHVtaW5hbmNlQmx1ZVxuICAgIHZhciBsdW1SID0gMC4yMTMsIC8vIG9yIDAuMzA4NlxuICAgICAgICBsdW1HID0gMC43MTUsIC8vIG9yIDAuNjA5NFxuICAgICAgICBsdW1CID0gMC4wNzI7IC8vIG9yIDAuMDgyMFxuXG4gICAgdmFyIG1hdHJpeCA9IFtcbiAgICAgICAgbHVtUiArIGNvcyAqICgxIC0gbHVtUikgKyBzaW4gKiAoLWx1bVIpLCBsdW1HICsgY29zICogKC1sdW1HKSArIHNpbiAqICgtbHVtRyksIGx1bUIgKyBjb3MgKiAoLWx1bUIpICsgc2luICogKDEgLSBsdW1CKSwgMCwgMCxcbiAgICAgICAgbHVtUiArIGNvcyAqICgtbHVtUikgKyBzaW4gKiAoMC4xNDMpLCBsdW1HICsgY29zICogKDEgLSBsdW1HKSArIHNpbiAqICgwLjE0MCksIGx1bUIgKyBjb3MgKiAoLWx1bUIpICsgc2luICogKC0wLjI4MyksIDAsIDAsXG4gICAgICAgIGx1bVIgKyBjb3MgKiAoLWx1bVIpICsgc2luICogKC0oMSAtIGx1bVIpKSwgbHVtRyArIGNvcyAqICgtbHVtRykgKyBzaW4gKiAobHVtRyksIGx1bUIgKyBjb3MgKiAoMSAtIGx1bUIpICsgc2luICogKGx1bUIpLCAwLCAwLFxuICAgICAgICAwLCAwLCAwLCAxLCAwXG4gICAgXTtcblxuICAgIHRoaXMuX2xvYWRNYXRyaXgobWF0cml4LCBtdWx0aXBseSk7XG59O1xuXG5cbi8qKlxuICogU2V0IHRoZSBjb250cmFzdCBtYXRyaXgsIGluY3JlYXNlIHRoZSBzZXBhcmF0aW9uIGJldHdlZW4gZGFyayBhbmQgYnJpZ2h0XG4gKiBJbmNyZWFzZSBjb250cmFzdCA6IHNoYWRvd3MgZGFya2VyIGFuZCBoaWdobGlnaHRzIGJyaWdodGVyXG4gKiBEZWNyZWFzZSBjb250cmFzdCA6IGJyaW5nIHRoZSBzaGFkb3dzIHVwIGFuZCB0aGUgaGlnaGxpZ2h0cyBkb3duXG4gKlxuICogQHBhcmFtIGFtb3VudCB7bnVtYmVyfSB2YWx1ZSBvZiB0aGUgY29udHJhc3RcbiAqIEBwYXJhbSBtdWx0aXBseSB7Ym9vbGVhbn0gcmVmZXIgdG8gLl9sb2FkTWF0cml4KCkgbWV0aG9kXG4gKi9cbkNvbG9yTWF0cml4RmlsdGVyLnByb3RvdHlwZS5jb250cmFzdCA9IGZ1bmN0aW9uIChhbW91bnQsIG11bHRpcGx5KVxue1xuICAgIHZhciB2ID0gKGFtb3VudCB8fCAwKSArIDE7XG4gICAgdmFyIG8gPSAtMTI4ICogKHYgLSAxKTtcblxuICAgIHZhciBtYXRyaXggPSBbXG4gICAgICAgIHYsIDAsIDAsIDAsIG8sXG4gICAgICAgIDAsIHYsIDAsIDAsIG8sXG4gICAgICAgIDAsIDAsIHYsIDAsIG8sXG4gICAgICAgIDAsIDAsIDAsIDEsIDBcbiAgICBdO1xuXG4gICAgdGhpcy5fbG9hZE1hdHJpeChtYXRyaXgsIG11bHRpcGx5KTtcbn07XG5cbi8qKlxuICogU2V0IHRoZSBzYXR1cmF0aW9uIG1hdHJpeCwgaW5jcmVhc2UgdGhlIHNlcGFyYXRpb24gYmV0d2VlbiBjb2xvcnNcbiAqIEluY3JlYXNlIHNhdHVyYXRpb24gOiBpbmNyZWFzZSBjb250cmFzdCwgYnJpZ2h0bmVzcywgYW5kIHNoYXJwbmVzc1xuICpcbiAqIEBwYXJhbSBhbW91bnQge251bWJlcn1cbiAqIEBwYXJhbSBtdWx0aXBseSB7Ym9vbGVhbn0gcmVmZXIgdG8gLl9sb2FkTWF0cml4KCkgbWV0aG9kXG4gKi9cbkNvbG9yTWF0cml4RmlsdGVyLnByb3RvdHlwZS5zYXR1cmF0ZSA9IGZ1bmN0aW9uIChhbW91bnQsIG11bHRpcGx5KVxue1xuICAgIHZhciB4ID0gKGFtb3VudCB8fCAwKSAqIDIgLyAzICsgMTtcbiAgICB2YXIgeSA9ICgoeCAtIDEpICogLTAuNSk7XG5cbiAgICB2YXIgbWF0cml4ID0gW1xuICAgICAgICB4LCB5LCB5LCAwLCAwLFxuICAgICAgICB5LCB4LCB5LCAwLCAwLFxuICAgICAgICB5LCB5LCB4LCAwLCAwLFxuICAgICAgICAwLCAwLCAwLCAxLCAwXG4gICAgXTtcblxuICAgIHRoaXMuX2xvYWRNYXRyaXgobWF0cml4LCBtdWx0aXBseSk7XG59O1xuXG4vKipcbiAqIERlc2F0dXJhdGUgaW1hZ2UgKHJlbW92ZSBjb2xvcilcbiAqXG4gKiBDYWxsIHRoZSBzYXR1cmF0ZSBmdW5jdGlvblxuICpcbiAqIEBwYXJhbSBtdWx0aXBseSB7Ym9vbGVhbn0gcmVmZXIgdG8gLl9sb2FkTWF0cml4KCkgbWV0aG9kXG4gKi9cbkNvbG9yTWF0cml4RmlsdGVyLnByb3RvdHlwZS5kZXNhdHVyYXRlID0gZnVuY3Rpb24gKG11bHRpcGx5KSAvLyBqc2hpbnQgdW51c2VkOmZhbHNlXG57XG4gICAgdGhpcy5zYXR1cmF0ZSgtMSk7XG59O1xuXG4vKipcbiAqIE5lZ2F0aXZlIGltYWdlIChpbnZlcnNlIG9mIGNsYXNzaWMgcmdiIG1hdHJpeClcbiAqXG4gKiBAcGFyYW0gbXVsdGlwbHkge2Jvb2xlYW59IHJlZmVyIHRvIC5fbG9hZE1hdHJpeCgpIG1ldGhvZFxuICovXG5Db2xvck1hdHJpeEZpbHRlci5wcm90b3R5cGUubmVnYXRpdmUgPSBmdW5jdGlvbiAobXVsdGlwbHkpXG57XG4gICAgdmFyIG1hdHJpeCA9IFtcbiAgICAgICAgMCwgMSwgMSwgMCwgMCxcbiAgICAgICAgMSwgMCwgMSwgMCwgMCxcbiAgICAgICAgMSwgMSwgMCwgMCwgMCxcbiAgICAgICAgMCwgMCwgMCwgMSwgMFxuICAgIF07XG5cbiAgICB0aGlzLl9sb2FkTWF0cml4KG1hdHJpeCwgbXVsdGlwbHkpO1xufTtcblxuLyoqXG4gKiBTZXBpYSBpbWFnZVxuICpcbiAqIEBwYXJhbSBtdWx0aXBseSB7Ym9vbGVhbn0gcmVmZXIgdG8gLl9sb2FkTWF0cml4KCkgbWV0aG9kXG4gKi9cbkNvbG9yTWF0cml4RmlsdGVyLnByb3RvdHlwZS5zZXBpYSA9IGZ1bmN0aW9uIChtdWx0aXBseSlcbntcbiAgICB2YXIgbWF0cml4ID0gW1xuICAgICAgICAwLjM5MywgMC43Njg5OTk5LCAwLjE4ODk5OTk5LCAwLCAwLFxuICAgICAgICAwLjM0OSwgMC42ODU5OTk5LCAwLjE2Nzk5OTk5LCAwLCAwLFxuICAgICAgICAwLjI3MiwgMC41MzM5OTk5LCAwLjEzMDk5OTk5LCAwLCAwLFxuICAgICAgICAwLCAwLCAwLCAxLCAwXG4gICAgXTtcblxuICAgIHRoaXMuX2xvYWRNYXRyaXgobWF0cml4LCBtdWx0aXBseSk7XG59O1xuXG4vKipcbiAqIENvbG9yIG1vdGlvbiBwaWN0dXJlIHByb2Nlc3MgaW52ZW50ZWQgaW4gMTkxNiAodGhhbmtzIERvbWluaWMgU3phYmxld3NraSlcbiAqXG4gKiBAcGFyYW0gbXVsdGlwbHkge2Jvb2xlYW59IHJlZmVyIHRvIC5fbG9hZE1hdHJpeCgpIG1ldGhvZFxuICovXG5Db2xvck1hdHJpeEZpbHRlci5wcm90b3R5cGUudGVjaG5pY29sb3IgPSBmdW5jdGlvbiAobXVsdGlwbHkpXG57XG4gICAgdmFyIG1hdHJpeCA9IFtcbiAgICAgICAgMS45MTI1Mjc3ODkxNDU2MDgzLCAtMC44NTQ1MzQ0OTc2OTUxNjQ1LCAtMC4wOTE1NTUwODQ4Mjc1NTU4NSwgMCwgMTEuNzkzNjAzNDM0Mzc3MzM3LFxuICAgICAgICAtMC4zMDg3ODMzMzg1OTI4MDk3LCAxLjc2NTg5MDg1NTU0NTg0MjgsIC0wLjEwNjAxNzQzMDc0NzIyMjQ1LCAwLCAtNzAuMzUyMDUxNjE0NjEzOTgsXG4gICAgICAgIC0wLjIzMTEwMzM3NzU0ODYxNiwgLTAuNzUwMTg5OTE5NzQ0MDIxMiwgMS44NDc1OTc4MTYxMDgxODksIDAsIDMwLjk1MDk0MDg2OTQ5MTEzOCxcbiAgICAgICAgMCwgMCwgMCwgMSwgMFxuICAgIF07XG5cbiAgICB0aGlzLl9sb2FkTWF0cml4KG1hdHJpeCwgbXVsdGlwbHkpO1xufTtcblxuLyoqXG4gKiBQb2xhcm9pZCBmaWx0ZXJcbiAqXG4gKiBAcGFyYW0gbXVsdGlwbHkge2Jvb2xlYW59IHJlZmVyIHRvIC5fbG9hZE1hdHJpeCgpIG1ldGhvZFxuICovXG5Db2xvck1hdHJpeEZpbHRlci5wcm90b3R5cGUucG9sYXJvaWQgPSBmdW5jdGlvbiAobXVsdGlwbHkpXG57XG4gICAgdmFyIG1hdHJpeCA9IFtcbiAgICAgICAgMS40MzgsIC0wLjA2MiwgLTAuMDYyLCAwLCAwLFxuICAgICAgICAtMC4xMjIsIDEuMzc4LCAtMC4xMjIsIDAsIDAsXG4gICAgICAgIC0wLjAxNiwgLTAuMDE2LCAxLjQ4MywgMCwgMCxcbiAgICAgICAgMCwgMCwgMCwgMSwgMFxuICAgIF07XG5cbiAgICB0aGlzLl9sb2FkTWF0cml4KG1hdHJpeCwgbXVsdGlwbHkpO1xufTtcblxuLyoqXG4gKiBGaWx0ZXIgd2hvIHRyYW5zZm9ybXMgOiBSZWQgLT4gQmx1ZSBhbmQgQmx1ZSAtPiBSZWRcbiAqXG4gKiBAcGFyYW0gbXVsdGlwbHkge2Jvb2xlYW59IHJlZmVyIHRvIC5fbG9hZE1hdHJpeCgpIG1ldGhvZFxuICovXG5Db2xvck1hdHJpeEZpbHRlci5wcm90b3R5cGUudG9CR1IgPSBmdW5jdGlvbiAobXVsdGlwbHkpXG57XG4gICAgdmFyIG1hdHJpeCA9IFtcbiAgICAgICAgMCwgMCwgMSwgMCwgMCxcbiAgICAgICAgMCwgMSwgMCwgMCwgMCxcbiAgICAgICAgMSwgMCwgMCwgMCwgMCxcbiAgICAgICAgMCwgMCwgMCwgMSwgMFxuICAgIF07XG5cbiAgICB0aGlzLl9sb2FkTWF0cml4KG1hdHJpeCwgbXVsdGlwbHkpO1xufTtcblxuLyoqXG4gKiBDb2xvciByZXZlcnNhbCBmaWxtIGludHJvZHVjZWQgYnkgRWFzdG1hbiBLb2RhayBpbiAxOTM1LiAodGhhbmtzIERvbWluaWMgU3phYmxld3NraSlcbiAqXG4gKiBAcGFyYW0gbXVsdGlwbHkge2Jvb2xlYW59IHJlZmVyIHRvIC5fbG9hZE1hdHJpeCgpIG1ldGhvZFxuICovXG5Db2xvck1hdHJpeEZpbHRlci5wcm90b3R5cGUua29kYWNocm9tZSA9IGZ1bmN0aW9uIChtdWx0aXBseSlcbntcbiAgICB2YXIgbWF0cml4ID0gW1xuICAgICAgICAxLjEyODU1ODIzOTY1OTM1MjUsIC0wLjM5NjczODIyODM2MDEzNDgsIC0wLjAzOTkyNTU5MTcyOTIxNzkzLCAwLCA2My43Mjk1ODc2MjE5NjUwMixcbiAgICAgICAgLTAuMTY0MDQzMzk5NjIyNDQ2MTYsIDEuMDgzNTI1MTU2NjI5MTMwNCwgLTAuMDU0OTg4MDUxMTU2MzMxMzIsIDAsIDI0LjczMjQwNzg5NjcwNjIwMyxcbiAgICAgICAgLTAuMTY3ODYwMTA3MDYxNTU3NjMsIC0wLjU2MDM0MTYyNzc2OTUyNDgsIDEuNjAxNDg1MDc2MTk2NDk0MywgMCwgMzUuNjI5ODI4MDc0NjA5NDYsXG4gICAgICAgIDAsIDAsIDAsIDEsIDBcbiAgICBdO1xuXG4gICAgdGhpcy5fbG9hZE1hdHJpeChtYXRyaXgsIG11bHRpcGx5KTtcbn07XG5cbi8qKlxuICogQnJvd24gZGVsaWNpb3VzIGJyb3duaSBmaWx0ZXIgKHRoYW5rcyBEb21pbmljIFN6YWJsZXdza2kpXG4gKlxuICogQHBhcmFtIG11bHRpcGx5IHtib29sZWFufSByZWZlciB0byAuX2xvYWRNYXRyaXgoKSBtZXRob2RcbiAqL1xuQ29sb3JNYXRyaXhGaWx0ZXIucHJvdG90eXBlLmJyb3duaSA9IGZ1bmN0aW9uIChtdWx0aXBseSlcbntcbiAgICB2YXIgbWF0cml4ID0gW1xuICAgICAgICAwLjU5OTcwMjM0OTgxNTk3MTUsIDAuMzQ1NTMyNDMwNDgzOTEyNjMsIC0wLjI3MDgyOTg2NzQ1MzgwNDIsIDAsIDQ3LjQzMTkyODU1NjAwODczLFxuICAgICAgICAtMC4wMzc3MDMyNDk4Mzc3ODMxNTcsIDAuODYwOTU3NzU4Nzk5MjY0MSwgMC4xNTA1OTU1MjM4ODQ1OTkxMywgMCwgLTM2Ljk2ODQxNDk4MzE5MTI3LFxuICAgICAgICAwLjI0MTEzNjM1MTI4MTUzMzM1LCAtMC4wNzQ0MTAzNzkwODQyMjQ5MiwgMC40NDk3MjE4MjA2NDg3NzE1MywgMCwgLTcuNTYyMDc1Mjc3NTkxMjgzLFxuICAgICAgICAwLCAwLCAwLCAxLCAwXG4gICAgXTtcblxuICAgIHRoaXMuX2xvYWRNYXRyaXgobWF0cml4LCBtdWx0aXBseSk7XG59O1xuXG4vKlxuICogVmludGFnZSBmaWx0ZXIgKHRoYW5rcyBEb21pbmljIFN6YWJsZXdza2kpXG4gKlxuICogQHBhcmFtIG11bHRpcGx5IHtib29sZWFufSByZWZlciB0byAuX2xvYWRNYXRyaXgoKSBtZXRob2RcbiAqL1xuQ29sb3JNYXRyaXhGaWx0ZXIucHJvdG90eXBlLnZpbnRhZ2UgPSBmdW5jdGlvbiAobXVsdGlwbHkpXG57XG4gICAgdmFyIG1hdHJpeCA9IFtcbiAgICAgICAgMC42Mjc5MzQ1NjM1NjA1OTk0LCAwLjMyMDIxODM0MjA4MTkzNjcsIC0wLjAzOTY1NDA4MjExMzEyNDUzLCAwLCA5LjY1MTI4NTgzNTI5NDEyMyxcbiAgICAgICAgMC4wMjU3ODM5NzcwNDgwODg2OCwgMC42NDQxMTg4NjQ0Mzc0NzcxLCAwLjAzMjU5MTI3NjE2MTQ5Mjk0LCAwLCA3LjQ2MjgyOTE3NjQ3MDU5MSxcbiAgICAgICAgMC4wNDY2MDU1NTU2NzgyNzE5LCAtMC4wODUxMjMyOTg3MjQ3ODkxLCAwLjUyNDE2NDgwMTg3MDA0NjUsIDAsIDUuMTU5MTkwNTg4MjM1Mjk2LFxuICAgICAgICAwLCAwLCAwLCAxLCAwXG4gICAgXTtcblxuICAgIHRoaXMuX2xvYWRNYXRyaXgobWF0cml4LCBtdWx0aXBseSk7XG59O1xuXG4vKlxuICogV2UgZG9uJ3Qga25vdyBleGFjdGx5IHdoYXQgaXQgZG9lcywga2luZCBvZiBncmFkaWVudCBtYXAsIGJ1dCBmdW5ueSB0byBwbGF5IHdpdGghXG4gKlxuICogQHBhcmFtIGRlc2F0dXJhdGlvbiB7bnVtYmVyfVxuICogQHBhcmFtIHRvbmVkIHtudW1iZXJ9XG4gKiBAcGFyYW0gbGlnaHRDb2xvciB7c3RyaW5nfSAoZXhhbXBsZSA6IFwiMHhGRkU1ODBcIilcbiAqIEBwYXJhbSBkYXJrQ29sb3Ige3N0cmluZ30gIChleGFtcGxlIDogXCIweEZGRTU4MFwiKVxuICpcbiAqIEBwYXJhbSBtdWx0aXBseSB7Ym9vbGVhbn0gcmVmZXIgdG8gLl9sb2FkTWF0cml4KCkgbWV0aG9kXG4gKi9cbkNvbG9yTWF0cml4RmlsdGVyLnByb3RvdHlwZS5jb2xvclRvbmUgPSBmdW5jdGlvbiAoZGVzYXR1cmF0aW9uLCB0b25lZCwgbGlnaHRDb2xvciwgZGFya0NvbG9yLCBtdWx0aXBseSlcbntcbiAgICBkZXNhdHVyYXRpb24gPSBkZXNhdHVyYXRpb24gfHwgMC4yO1xuICAgIHRvbmVkID0gdG9uZWQgfHwgMC4xNTtcbiAgICBsaWdodENvbG9yID0gbGlnaHRDb2xvciB8fCAweEZGRTU4MDtcbiAgICBkYXJrQ29sb3IgPSBkYXJrQ29sb3IgfHwgMHgzMzgwMDA7XG5cbiAgICB2YXIgbFIgPSAoKGxpZ2h0Q29sb3IgPj4gMTYpICYgMHhGRikgLyAyNTU7XG4gICAgdmFyIGxHID0gKChsaWdodENvbG9yID4+IDgpICYgMHhGRikgLyAyNTU7XG4gICAgdmFyIGxCID0gKGxpZ2h0Q29sb3IgJiAweEZGKSAvIDI1NTtcblxuICAgIHZhciBkUiA9ICgoZGFya0NvbG9yID4+IDE2KSAmIDB4RkYpIC8gMjU1O1xuICAgIHZhciBkRyA9ICgoZGFya0NvbG9yID4+IDgpICYgMHhGRikgLyAyNTU7XG4gICAgdmFyIGRCID0gKGRhcmtDb2xvciAmIDB4RkYpIC8gMjU1O1xuXG4gICAgdmFyIG1hdHJpeCA9IFtcbiAgICAgICAgMC4zLCAwLjU5LCAwLjExLCAwLCAwLFxuICAgICAgICBsUiwgbEcsIGxCLCBkZXNhdHVyYXRpb24sIDAsXG4gICAgICAgIGRSLCBkRywgZEIsIHRvbmVkLCAwLFxuICAgICAgICBsUiAtIGRSLCBsRyAtIGRHLCBsQiAtIGRCLCAwLCAwXG4gICAgXTtcblxuICAgIHRoaXMuX2xvYWRNYXRyaXgobWF0cml4LCBtdWx0aXBseSk7XG59O1xuXG4vKlxuICogTmlnaHQgZWZmZWN0XG4gKlxuICogQHBhcmFtIGludGVuc2l0eSB7bnVtYmVyfVxuICogQHBhcmFtIG11bHRpcGx5IHtib29sZWFufSByZWZlciB0byAuX2xvYWRNYXRyaXgoKSBtZXRob2RcbiAqL1xuQ29sb3JNYXRyaXhGaWx0ZXIucHJvdG90eXBlLm5pZ2h0ID0gZnVuY3Rpb24gKGludGVuc2l0eSwgbXVsdGlwbHkpXG57XG4gICAgaW50ZW5zaXR5ID0gaW50ZW5zaXR5IHx8IDAuMTtcbiAgICB2YXIgbWF0cml4ID0gW1xuICAgICAgICBpbnRlbnNpdHkgKiAoIC0yLjApLCAtaW50ZW5zaXR5LCAwLCAwLCAwLFxuICAgICAgICAtaW50ZW5zaXR5LCAwLCBpbnRlbnNpdHksIDAsIDAsXG4gICAgICAgIDAsIGludGVuc2l0eSwgaW50ZW5zaXR5ICogMi4wLCAwLCAwLFxuICAgICAgICAwLCAwLCAwLCAxLCAwXG4gICAgXTtcblxuICAgIHRoaXMuX2xvYWRNYXRyaXgobWF0cml4LCBtdWx0aXBseSk7XG59O1xuXG5cbi8qXG4gKiBQcmVkYXRvciBlZmZlY3RcbiAqXG4gKiBFcmFzZSB0aGUgY3VycmVudCBtYXRyaXggYnkgc2V0dGluZyBhIG5ldyBpbmRlcGVudCBvbmVcbiAqXG4gKiBAcGFyYW0gYW1vdW50IHtudW1iZXJ9IGhvdyBtdWNoIHRoZSBwcmVkYXRvciBmZWVscyBoaXMgZnV0dXJlIHZpY3RpbVxuICogQHBhcmFtIG11bHRpcGx5IHtib29sZWFufSByZWZlciB0byAuX2xvYWRNYXRyaXgoKSBtZXRob2RcbiAqL1xuQ29sb3JNYXRyaXhGaWx0ZXIucHJvdG90eXBlLnByZWRhdG9yID0gZnVuY3Rpb24gKGFtb3VudCwgbXVsdGlwbHkpXG57XG4gICAgdmFyIG1hdHJpeCA9IFtcbiAgICAgICAgMTEuMjI0MTMwNjMwNDkzMTY0ICogYW1vdW50LCAtNC43OTQ0ODY5OTk1MTE3MTkgKiBhbW91bnQsIC0yLjg3NDYxMTg1NDU1MzIyMjcgKiBhbW91bnQsIDAgKiBhbW91bnQsIDAuNDAzNDI0MzgyMjA5Nzc3ODMgKiBhbW91bnQsXG4gICAgICAgIC0zLjYzMzA2OTc1MzY0Njg1MDYgKiBhbW91bnQsIDkuMTkzMTU3MTk2MDQ0OTIyICogYW1vdW50LCAtMi45NTE4MTA4MzY3OTE5OTIgKiBhbW91bnQsIDAgKiBhbW91bnQsIC0xLjMxNjEzNTA0ODg2NjI3MiAqIGFtb3VudCxcbiAgICAgICAgLTMuMjE4NDE5NzkwMjY3OTQ0MyAqIGFtb3VudCwgLTQuMjM3NTAzMDUxNzU3ODEyNSAqIGFtb3VudCwgNy40NzY0NDgwNTkwODIwMzEgKiBhbW91bnQsIDAgKiBhbW91bnQsIDAuODA0NDQ1OTIyMzc0NzI1MyAqIGFtb3VudCxcbiAgICAgICAgMCwgMCwgMCwgMSwgMFxuICAgIF07XG5cbiAgICB0aGlzLl9sb2FkTWF0cml4KG1hdHJpeCwgbXVsdGlwbHkpO1xufTtcblxuLypcbiAqIExTRCBlZmZlY3RcbiAqXG4gKiBNdWx0aXBseSB0aGUgY3VycmVudCBtYXRyaXhcbiAqXG4gKiBAcGFyYW0gYW1vdW50IHtudW1iZXJ9IEhvdyBjcmF6eSBpcyB5b3VyIGVmZmVjdFxuICogQHBhcmFtIG11bHRpcGx5IHtib29sZWFufSByZWZlciB0byAuX2xvYWRNYXRyaXgoKSBtZXRob2RcbiAqL1xuQ29sb3JNYXRyaXhGaWx0ZXIucHJvdG90eXBlLmxzZCA9IGZ1bmN0aW9uIChtdWx0aXBseSlcbntcbiAgICB2YXIgbWF0cml4ID0gW1xuICAgICAgICAyLCAtMC40LCAwLjUsIDAsIDAsXG4gICAgICAgIC0wLjUsIDIsIC0wLjQsIDAsIDAsXG4gICAgICAgIC0wLjQsIC0wLjUsIDMsIDAsIDAsXG4gICAgICAgIDAsIDAsIDAsIDEsIDBcbiAgICBdO1xuXG4gICAgdGhpcy5fbG9hZE1hdHJpeChtYXRyaXgsIG11bHRpcGx5KTtcbn07XG5cbi8qXG4gKiBFcmFzZSB0aGUgY3VycmVudCBtYXRyaXggYnkgc2V0dGluZyB0aGUgZGVmYXVsdCBvbmVcbiAqXG4gKi9cbkNvbG9yTWF0cml4RmlsdGVyLnByb3RvdHlwZS5yZXNldCA9IGZ1bmN0aW9uICgpXG57XG4gICAgdmFyIG1hdHJpeCA9IFtcbiAgICAgICAgMSwgMCwgMCwgMCwgMCxcbiAgICAgICAgMCwgMSwgMCwgMCwgMCxcbiAgICAgICAgMCwgMCwgMSwgMCwgMCxcbiAgICAgICAgMCwgMCwgMCwgMSwgMFxuICAgIF07XG5cbiAgICB0aGlzLl9sb2FkTWF0cml4KG1hdHJpeCwgZmFsc2UpO1xufTtcblxuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhDb2xvck1hdHJpeEZpbHRlci5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBtYXRyaXggb2YgdGhlIGNvbG9yIG1hdHJpeCBmaWx0ZXJcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcltdfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuQ29sb3JNYXRyaXhGaWx0ZXIjXG4gICAgICogQGRlZmF1bHQgWzEsIDAsIDAsIDAsIDAsIDAsIDEsIDAsIDAsIDAsIDAsIDAsIDEsIDAsIDAsIDAsIDAsIDAsIDEsIDBdXG4gICAgICovXG4gICAgbWF0cml4OiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudW5pZm9ybXMubS52YWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudW5pZm9ybXMubS52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfVxufSk7XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uLy4uL2NvcmUnKTtcbi8vIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL3N1YnN0YWNrL2JyZnMvaXNzdWVzLzI1XG5cblxuLyoqXG4gKiBUaGlzIGxvd2VycyB0aGUgY29sb3IgZGVwdGggb2YgeW91ciBpbWFnZSBieSB0aGUgZ2l2ZW4gYW1vdW50LCBwcm9kdWNpbmcgYW4gaW1hZ2Ugd2l0aCBhIHNtYWxsZXIgcGFsZXR0ZS5cbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQWJzdHJhY3RGaWx0ZXJcbiAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnNcbiAqL1xuZnVuY3Rpb24gQ29sb3JTdGVwRmlsdGVyKClcbntcbiAgICBjb3JlLkFic3RyYWN0RmlsdGVyLmNhbGwodGhpcyxcbiAgICAgICAgLy8gdmVydGV4IHNoYWRlclxuICAgICAgICBudWxsLFxuICAgICAgICAvLyBmcmFnbWVudCBzaGFkZXJcbiAgICAgICAgXCJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcXG5cXG52YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDtcXG5cXG51bmlmb3JtIHNhbXBsZXIyRCB1U2FtcGxlcjtcXG51bmlmb3JtIGZsb2F0IHN0ZXA7XFxuXFxudm9pZCBtYWluKHZvaWQpXFxue1xcbiAgICB2ZWM0IGNvbG9yID0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2VGV4dHVyZUNvb3JkKTtcXG5cXG4gICAgY29sb3IgPSBmbG9vcihjb2xvciAqIHN0ZXApIC8gc3RlcDtcXG5cXG4gICAgZ2xfRnJhZ0NvbG9yID0gY29sb3I7XFxufVxcblwiLFxuICAgICAgICAvLyBjdXN0b20gdW5pZm9ybXNcbiAgICAgICAge1xuICAgICAgICAgICAgc3RlcDogeyB0eXBlOiAnMWYnLCB2YWx1ZTogNSB9XG4gICAgICAgIH1cbiAgICApO1xufVxuXG5Db2xvclN0ZXBGaWx0ZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShjb3JlLkFic3RyYWN0RmlsdGVyLnByb3RvdHlwZSk7XG5Db2xvclN0ZXBGaWx0ZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gQ29sb3JTdGVwRmlsdGVyO1xubW9kdWxlLmV4cG9ydHMgPSBDb2xvclN0ZXBGaWx0ZXI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKENvbG9yU3RlcEZpbHRlci5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBUaGUgbnVtYmVyIG9mIHN0ZXBzIHRvIHJlZHVjZSB0aGUgcGFsZXR0ZSBieS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLkNvbG9yU3RlcEZpbHRlciNcbiAgICAgKi9cbiAgICBzdGVwOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudW5pZm9ybXMuc3RlcC52YWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudW5pZm9ybXMuc3RlcC52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfVxufSk7XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uLy4uL2NvcmUnKTtcbi8vIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL3N1YnN0YWNrL2JyZnMvaXNzdWVzLzI1XG5cblxuLyoqXG4gKiBUaGUgQ29udm9sdXRpb25GaWx0ZXIgY2xhc3MgYXBwbGllcyBhIG1hdHJpeCBjb252b2x1dGlvbiBmaWx0ZXIgZWZmZWN0LlxuICogQSBjb252b2x1dGlvbiBjb21iaW5lcyBwaXhlbHMgaW4gdGhlIGlucHV0IGltYWdlIHdpdGggbmVpZ2hib3JpbmcgcGl4ZWxzIHRvIHByb2R1Y2UgYSBuZXcgaW1hZ2UuXG4gKiBBIHdpZGUgdmFyaWV0eSBvZiBpbWFnZSBlZmZlY3RzIGNhbiBiZSBhY2hpZXZlZCB0aHJvdWdoIGNvbnZvbHV0aW9ucywgaW5jbHVkaW5nIGJsdXJyaW5nLCBlZGdlXG4gKiBkZXRlY3Rpb24sIHNoYXJwZW5pbmcsIGVtYm9zc2luZywgYW5kIGJldmVsaW5nLiBUaGUgbWF0cml4IHNob3VsZCBiZSBzcGVjaWZpZWQgYXMgYSA5IHBvaW50IEFycmF5LlxuICogU2VlIGh0dHA6Ly9kb2NzLmdpbXAub3JnL2VuL3BsdWctaW4tY29udm1hdHJpeC5odG1sIGZvciBtb3JlIGluZm8uXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLkFic3RyYWN0RmlsdGVyXG4gKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzXG4gKiBAcGFyYW0gbWF0cml4IHtudW1iZXJbXX0gQW4gYXJyYXkgb2YgdmFsdWVzIHVzZWQgZm9yIG1hdHJpeCB0cmFuc2Zvcm1hdGlvbi4gU3BlY2lmaWVkIGFzIGEgOSBwb2ludCBBcnJheS5cbiAqIEBwYXJhbSB3aWR0aCB7bnVtYmVyfSBXaWR0aCBvZiB0aGUgb2JqZWN0IHlvdSBhcmUgdHJhbnNmb3JtaW5nXG4gKiBAcGFyYW0gaGVpZ2h0IHtudW1iZXJ9IEhlaWdodCBvZiB0aGUgb2JqZWN0IHlvdSBhcmUgdHJhbnNmb3JtaW5nXG4gKi9cbmZ1bmN0aW9uIENvbnZvbHV0aW9uRmlsdGVyKG1hdHJpeCwgd2lkdGgsIGhlaWdodClcbntcbiAgICBjb3JlLkFic3RyYWN0RmlsdGVyLmNhbGwodGhpcyxcbiAgICAgICAgLy8gdmVydGV4IHNoYWRlclxuICAgICAgICBudWxsLFxuICAgICAgICAvLyBmcmFnbWVudCBzaGFkZXJcbiAgICAgICAgXCJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcXG5cXG52YXJ5aW5nIG1lZGl1bXAgdmVjMiB2VGV4dHVyZUNvb3JkO1xcblxcbnVuaWZvcm0gc2FtcGxlcjJEIHVTYW1wbGVyO1xcbnVuaWZvcm0gdmVjMiB0ZXhlbFNpemU7XFxudW5pZm9ybSBmbG9hdCBtYXRyaXhbOV07XFxuXFxudm9pZCBtYWluKHZvaWQpXFxue1xcbiAgIHZlYzQgYzExID0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2VGV4dHVyZUNvb3JkIC0gdGV4ZWxTaXplKTsgLy8gdG9wIGxlZnRcXG4gICB2ZWM0IGMxMiA9IHRleHR1cmUyRCh1U2FtcGxlciwgdmVjMih2VGV4dHVyZUNvb3JkLngsIHZUZXh0dXJlQ29vcmQueSAtIHRleGVsU2l6ZS55KSk7IC8vIHRvcCBjZW50ZXJcXG4gICB2ZWM0IGMxMyA9IHRleHR1cmUyRCh1U2FtcGxlciwgdmVjMih2VGV4dHVyZUNvb3JkLnggKyB0ZXhlbFNpemUueCwgdlRleHR1cmVDb29yZC55IC0gdGV4ZWxTaXplLnkpKTsgLy8gdG9wIHJpZ2h0XFxuXFxuICAgdmVjNCBjMjEgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZlYzIodlRleHR1cmVDb29yZC54IC0gdGV4ZWxTaXplLngsIHZUZXh0dXJlQ29vcmQueSkpOyAvLyBtaWQgbGVmdFxcbiAgIHZlYzQgYzIyID0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2VGV4dHVyZUNvb3JkKTsgLy8gbWlkIGNlbnRlclxcbiAgIHZlYzQgYzIzID0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2ZWMyKHZUZXh0dXJlQ29vcmQueCArIHRleGVsU2l6ZS54LCB2VGV4dHVyZUNvb3JkLnkpKTsgLy8gbWlkIHJpZ2h0XFxuXFxuICAgdmVjNCBjMzEgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZlYzIodlRleHR1cmVDb29yZC54IC0gdGV4ZWxTaXplLngsIHZUZXh0dXJlQ29vcmQueSArIHRleGVsU2l6ZS55KSk7IC8vIGJvdHRvbSBsZWZ0XFxuICAgdmVjNCBjMzIgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZlYzIodlRleHR1cmVDb29yZC54LCB2VGV4dHVyZUNvb3JkLnkgKyB0ZXhlbFNpemUueSkpOyAvLyBib3R0b20gY2VudGVyXFxuICAgdmVjNCBjMzMgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZUZXh0dXJlQ29vcmQgKyB0ZXhlbFNpemUpOyAvLyBib3R0b20gcmlnaHRcXG5cXG4gICBnbF9GcmFnQ29sb3IgPVxcbiAgICAgICBjMTEgKiBtYXRyaXhbMF0gKyBjMTIgKiBtYXRyaXhbMV0gKyBjMTMgKiBtYXRyaXhbMl0gK1xcbiAgICAgICBjMjEgKiBtYXRyaXhbM10gKyBjMjIgKiBtYXRyaXhbNF0gKyBjMjMgKiBtYXRyaXhbNV0gK1xcbiAgICAgICBjMzEgKiBtYXRyaXhbNl0gKyBjMzIgKiBtYXRyaXhbN10gKyBjMzMgKiBtYXRyaXhbOF07XFxuXFxuICAgZ2xfRnJhZ0NvbG9yLmEgPSBjMjIuYTtcXG59XFxuXCIsXG4gICAgICAgIC8vIGN1c3RvbSB1bmlmb3Jtc1xuICAgICAgICB7XG4gICAgICAgICAgICBtYXRyaXg6ICAgICB7IHR5cGU6ICcxZnYnLCB2YWx1ZTogbmV3IEZsb2F0MzJBcnJheShtYXRyaXgpIH0sXG4gICAgICAgICAgICB0ZXhlbFNpemU6ICB7IHR5cGU6ICd2MicsIHZhbHVlOiB7IHg6IDEgLyB3aWR0aCwgeTogMSAvIGhlaWdodCB9IH1cbiAgICAgICAgfVxuICAgICk7XG59XG5cbkNvbnZvbHV0aW9uRmlsdGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoY29yZS5BYnN0cmFjdEZpbHRlci5wcm90b3R5cGUpO1xuQ29udm9sdXRpb25GaWx0ZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gQ29udm9sdXRpb25GaWx0ZXI7XG5tb2R1bGUuZXhwb3J0cyA9IENvbnZvbHV0aW9uRmlsdGVyO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhDb252b2x1dGlvbkZpbHRlci5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBBbiBhcnJheSBvZiB2YWx1ZXMgdXNlZCBmb3IgbWF0cml4IHRyYW5zZm9ybWF0aW9uLiBTcGVjaWZpZWQgYXMgYSA5IHBvaW50IEFycmF5LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyW119XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5Db252b2x1dGlvbkZpbHRlciNcbiAgICAgKi9cbiAgICBtYXRyaXg6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy51bmlmb3Jtcy5tYXRyaXgudmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLm1hdHJpeC52YWx1ZSA9IG5ldyBGbG9hdDMyQXJyYXkodmFsdWUpO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFdpZHRoIG9mIHRoZSBvYmplY3QgeW91IGFyZSB0cmFuc2Zvcm1pbmdcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLkNvbnZvbHV0aW9uRmlsdGVyI1xuICAgICAqL1xuICAgIHdpZHRoOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIDEvdGhpcy51bmlmb3Jtcy50ZXhlbFNpemUudmFsdWUueDtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudW5pZm9ybXMudGV4ZWxTaXplLnZhbHVlLnggPSAxL3ZhbHVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIEhlaWdodCBvZiB0aGUgb2JqZWN0IHlvdSBhcmUgdHJhbnNmb3JtaW5nXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5Db252b2x1dGlvbkZpbHRlciNcbiAgICAgKi9cbiAgICBoZWlnaHQ6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gMS90aGlzLnVuaWZvcm1zLnRleGVsU2l6ZS52YWx1ZS55O1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy50ZXhlbFNpemUudmFsdWUueSA9IDEvdmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG59KTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vLi4vY29yZScpO1xuLy8gQHNlZSBodHRwczovL2dpdGh1Yi5jb20vc3Vic3RhY2svYnJmcy9pc3N1ZXMvMjVcblxuXG4vKipcbiAqIEEgQ3Jvc3MgSGF0Y2ggZWZmZWN0IGZpbHRlci5cbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQWJzdHJhY3RGaWx0ZXJcbiAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnNcbiAqL1xuZnVuY3Rpb24gQ3Jvc3NIYXRjaEZpbHRlcigpXG57XG4gICAgY29yZS5BYnN0cmFjdEZpbHRlci5jYWxsKHRoaXMsXG4gICAgICAgIC8vIHZlcnRleCBzaGFkZXJcbiAgICAgICAgbnVsbCxcbiAgICAgICAgLy8gZnJhZ21lbnQgc2hhZGVyXG4gICAgICAgIFwicHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XFxuXFxudmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7XFxuXFxudW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXI7XFxuXFxudm9pZCBtYWluKHZvaWQpXFxue1xcbiAgICBmbG9hdCBsdW0gPSBsZW5ndGgodGV4dHVyZTJEKHVTYW1wbGVyLCB2VGV4dHVyZUNvb3JkLnh5KS5yZ2IpO1xcblxcbiAgICBnbF9GcmFnQ29sb3IgPSB2ZWM0KDEuMCwgMS4wLCAxLjAsIDEuMCk7XFxuXFxuICAgIGlmIChsdW0gPCAxLjAwKVxcbiAgICB7XFxuICAgICAgICBpZiAobW9kKGdsX0ZyYWdDb29yZC54ICsgZ2xfRnJhZ0Nvb3JkLnksIDEwLjApID09IDAuMClcXG4gICAgICAgIHtcXG4gICAgICAgICAgICBnbF9GcmFnQ29sb3IgPSB2ZWM0KDAuMCwgMC4wLCAwLjAsIDEuMCk7XFxuICAgICAgICB9XFxuICAgIH1cXG5cXG4gICAgaWYgKGx1bSA8IDAuNzUpXFxuICAgIHtcXG4gICAgICAgIGlmIChtb2QoZ2xfRnJhZ0Nvb3JkLnggLSBnbF9GcmFnQ29vcmQueSwgMTAuMCkgPT0gMC4wKVxcbiAgICAgICAge1xcbiAgICAgICAgICAgIGdsX0ZyYWdDb2xvciA9IHZlYzQoMC4wLCAwLjAsIDAuMCwgMS4wKTtcXG4gICAgICAgIH1cXG4gICAgfVxcblxcbiAgICBpZiAobHVtIDwgMC41MClcXG4gICAge1xcbiAgICAgICAgaWYgKG1vZChnbF9GcmFnQ29vcmQueCArIGdsX0ZyYWdDb29yZC55IC0gNS4wLCAxMC4wKSA9PSAwLjApXFxuICAgICAgICB7XFxuICAgICAgICAgICAgZ2xfRnJhZ0NvbG9yID0gdmVjNCgwLjAsIDAuMCwgMC4wLCAxLjApO1xcbiAgICAgICAgfVxcbiAgICB9XFxuXFxuICAgIGlmIChsdW0gPCAwLjMpXFxuICAgIHtcXG4gICAgICAgIGlmIChtb2QoZ2xfRnJhZ0Nvb3JkLnggLSBnbF9GcmFnQ29vcmQueSAtIDUuMCwgMTAuMCkgPT0gMC4wKVxcbiAgICAgICAge1xcbiAgICAgICAgICAgIGdsX0ZyYWdDb2xvciA9IHZlYzQoMC4wLCAwLjAsIDAuMCwgMS4wKTtcXG4gICAgICAgIH1cXG4gICAgfVxcbn1cXG5cIlxuICAgICk7XG59XG5cbkNyb3NzSGF0Y2hGaWx0ZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShjb3JlLkFic3RyYWN0RmlsdGVyLnByb3RvdHlwZSk7XG5Dcm9zc0hhdGNoRmlsdGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IENyb3NzSGF0Y2hGaWx0ZXI7XG5tb2R1bGUuZXhwb3J0cyA9IENyb3NzSGF0Y2hGaWx0ZXI7XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uLy4uL2NvcmUnKTtcbi8vIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL3N1YnN0YWNrL2JyZnMvaXNzdWVzLzI1XG5cblxuLyoqXG4gKiBUaGUgRGlzcGxhY2VtZW50RmlsdGVyIGNsYXNzIHVzZXMgdGhlIHBpeGVsIHZhbHVlcyBmcm9tIHRoZSBzcGVjaWZpZWQgdGV4dHVyZSAoY2FsbGVkIHRoZSBkaXNwbGFjZW1lbnQgbWFwKSB0byBwZXJmb3JtIGEgZGlzcGxhY2VtZW50IG9mIGFuIG9iamVjdC5cbiAqIFlvdSBjYW4gdXNlIHRoaXMgZmlsdGVyIHRvIGFwcGx5IGFsbCBtYW5vciBvZiBjcmF6eSB3YXJwaW5nIGVmZmVjdHNcbiAqIEN1cnJlbnRseSB0aGUgciBwcm9wZXJ0eSBvZiB0aGUgdGV4dHVyZSBpcyB1c2VkIHRvIG9mZnNldCB0aGUgeCBhbmQgdGhlIGcgcHJvcGVydHkgb2YgdGhlIHRleHR1cmUgaXMgdXNlZCB0byBvZmZzZXQgdGhlIHkuXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLkFic3RyYWN0RmlsdGVyXG4gKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzXG4gKiBAcGFyYW0gc3ByaXRlIHtQSVhJLlNwcml0ZX0gdGhlIHNwcml0ZSB1c2VkIGZvciB0aGUgZGlzcGxhY2VtZW50IG1hcC4gKG1ha2Ugc3VyZSBpdHMgYWRkZWQgdG8gdGhlIHNjZW5lISlcbiAqL1xuZnVuY3Rpb24gRGlzcGxhY2VtZW50RmlsdGVyKHNwcml0ZSwgc2NhbGUpXG57XG4gICAgdmFyIG1hc2tNYXRyaXggPSBuZXcgY29yZS5NYXRyaXgoKTtcbiAgICBzcHJpdGUucmVuZGVyYWJsZSA9IGZhbHNlO1xuXG4gICAgY29yZS5BYnN0cmFjdEZpbHRlci5jYWxsKHRoaXMsXG4gICAgICAgIC8vIHZlcnRleCBzaGFkZXJcbiAgICAgICAgXCJhdHRyaWJ1dGUgdmVjMiBhVmVydGV4UG9zaXRpb247XFxuYXR0cmlidXRlIHZlYzIgYVRleHR1cmVDb29yZDtcXG5hdHRyaWJ1dGUgdmVjNCBhQ29sb3I7XFxuXFxudW5pZm9ybSBtYXQzIHByb2plY3Rpb25NYXRyaXg7XFxudW5pZm9ybSBtYXQzIG90aGVyTWF0cml4O1xcblxcbnZhcnlpbmcgdmVjMiB2TWFwQ29vcmQ7XFxudmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7XFxudmFyeWluZyB2ZWM0IHZDb2xvcjtcXG5cXG52b2lkIG1haW4odm9pZClcXG57XFxuICAgZ2xfUG9zaXRpb24gPSB2ZWM0KChwcm9qZWN0aW9uTWF0cml4ICogdmVjMyhhVmVydGV4UG9zaXRpb24sIDEuMCkpLnh5LCAwLjAsIDEuMCk7XFxuICAgdlRleHR1cmVDb29yZCA9IGFUZXh0dXJlQ29vcmQ7XFxuICAgdk1hcENvb3JkID0gKCBvdGhlck1hdHJpeCAqIHZlYzMoIGFUZXh0dXJlQ29vcmQsIDEuMCkgICkueHk7XFxuICAgdkNvbG9yID0gdmVjNChhQ29sb3IucmdiICogYUNvbG9yLmEsIGFDb2xvci5hKTtcXG59XFxuXCIsXG4gICAgICAgIC8vIGZyYWdtZW50IHNoYWRlclxuICAgICAgICBcInByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xcblxcbnZhcnlpbmcgdmVjMiB2TWFwQ29vcmQ7XFxudmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7XFxudmFyeWluZyB2ZWM0IHZDb2xvcjtcXG5cXG51bmlmb3JtIHZlYzIgc2NhbGU7XFxuXFxudW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXI7XFxudW5pZm9ybSBzYW1wbGVyMkQgbWFwU2FtcGxlcjtcXG5cXG52b2lkIG1haW4odm9pZClcXG57XFxuICAgdmVjNCBtYXAgPSAgdGV4dHVyZTJEKG1hcFNhbXBsZXIsIHZNYXBDb29yZCk7XFxuXFxuICAgbWFwIC09IDAuNTtcXG4gICBtYXAueHkgKj0gc2NhbGU7XFxuXFxuICAgZ2xfRnJhZ0NvbG9yID0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2ZWMyKHZUZXh0dXJlQ29vcmQueCArIG1hcC54LCB2VGV4dHVyZUNvb3JkLnkgKyBtYXAueSkpO1xcbn1cXG5cIixcbiAgICAgICAgLy8gdW5pZm9ybXNcbiAgICAgICAge1xuICAgICAgICAgICAgbWFwU2FtcGxlcjogICAgIHsgdHlwZTogJ3NhbXBsZXIyRCcsIHZhbHVlOiBzcHJpdGUudGV4dHVyZSB9LFxuICAgICAgICAgICAgb3RoZXJNYXRyaXg6ICAgIHsgdHlwZTogJ21hdDMnLCB2YWx1ZTogbWFza01hdHJpeC50b0FycmF5KHRydWUpIH0sXG4gICAgICAgICAgICBzY2FsZTogICAgICAgICAgeyB0eXBlOiAndjInLCB2YWx1ZTogeyB4OiAxLCB5OiAxIH0gfVxuICAgICAgICB9XG4gICAgKTtcblxuICAgIHRoaXMubWFza1Nwcml0ZSA9IHNwcml0ZTtcbiAgICB0aGlzLm1hc2tNYXRyaXggPSBtYXNrTWF0cml4O1xuXG4gICAgaWYgKHNjYWxlID09PSBudWxsIHx8IHNjYWxlID09PSB1bmRlZmluZWQpXG4gICAge1xuICAgICAgICBzY2FsZSA9IDIwO1xuICAgIH1cblxuICAgIHRoaXMuc2NhbGUgPSBuZXcgY29yZS5Qb2ludChzY2FsZSwgc2NhbGUpO1xufVxuXG5EaXNwbGFjZW1lbnRGaWx0ZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShjb3JlLkFic3RyYWN0RmlsdGVyLnByb3RvdHlwZSk7XG5EaXNwbGFjZW1lbnRGaWx0ZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gRGlzcGxhY2VtZW50RmlsdGVyO1xubW9kdWxlLmV4cG9ydHMgPSBEaXNwbGFjZW1lbnRGaWx0ZXI7XG5cbkRpc3BsYWNlbWVudEZpbHRlci5wcm90b3R5cGUuYXBwbHlGaWx0ZXIgPSBmdW5jdGlvbiAocmVuZGVyZXIsIGlucHV0LCBvdXRwdXQpXG57XG4gICAgdmFyIGZpbHRlck1hbmFnZXIgPSByZW5kZXJlci5maWx0ZXJNYW5hZ2VyO1xuXG4gICAgZmlsdGVyTWFuYWdlci5jYWxjdWxhdGVNYXBwZWRNYXRyaXgoaW5wdXQuZnJhbWUsIHRoaXMubWFza1Nwcml0ZSwgdGhpcy5tYXNrTWF0cml4KTtcblxuICAgIHRoaXMudW5pZm9ybXMub3RoZXJNYXRyaXgudmFsdWUgPSB0aGlzLm1hc2tNYXRyaXgudG9BcnJheSh0cnVlKTtcbiAgICB0aGlzLnVuaWZvcm1zLnNjYWxlLnZhbHVlLnggPSB0aGlzLnNjYWxlLnggKiAoMS9pbnB1dC5mcmFtZS53aWR0aCk7XG4gICAgdGhpcy51bmlmb3Jtcy5zY2FsZS52YWx1ZS55ID0gdGhpcy5zY2FsZS55ICogKDEvaW5wdXQuZnJhbWUuaGVpZ2h0KTtcblxuICAgIHZhciBzaGFkZXIgPSB0aGlzLmdldFNoYWRlcihyZW5kZXJlcik7XG4gICAgIC8vIGRyYXcgdGhlIGZpbHRlci4uLlxuICAgIGZpbHRlck1hbmFnZXIuYXBwbHlGaWx0ZXIoc2hhZGVyLCBpbnB1dCwgb3V0cHV0KTtcbn07XG5cblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoRGlzcGxhY2VtZW50RmlsdGVyLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFRoZSB0ZXh0dXJlIHVzZWQgZm9yIHRoZSBkaXNwbGFjZW1lbnQgbWFwLiBNdXN0IGJlIHBvd2VyIG9mIDIgc2l6ZWQgdGV4dHVyZS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuVGV4dHVyZX1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLkRpc3BsYWNlbWVudEZpbHRlciNcbiAgICAgKi9cbiAgICBtYXA6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy51bmlmb3Jtcy5tYXBTYW1wbGVyLnZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy5tYXBTYW1wbGVyLnZhbHVlID0gdmFsdWU7XG5cbiAgICAgICAgfVxuICAgIH1cbn0pO1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi8uLi9jb3JlJyk7XG4vLyBAc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9zdWJzdGFjay9icmZzL2lzc3Vlcy8yNVxuXG5cbi8qKlxuICogQGF1dGhvciBNYXQgR3JvdmVzIGh0dHA6Ly9tYXRncm92ZXMuY29tLyBARG9vcm1hdDIzXG4gKiBvcmlnaW5hbCBmaWx0ZXI6IGh0dHBzOi8vZ2l0aHViLmNvbS9ldmFudy9nbGZ4LmpzL2Jsb2IvbWFzdGVyL3NyYy9maWx0ZXJzL2Z1bi9kb3RzY3JlZW4uanNcbiAqL1xuXG4vKipcbiAqIFRoaXMgZmlsdGVyIGFwcGxpZXMgYSBkb3RzY3JlZW4gZWZmZWN0IG1ha2luZyBkaXNwbGF5IG9iamVjdHMgYXBwZWFyIHRvIGJlIG1hZGUgb3V0IG9mXG4gKiBibGFjayBhbmQgd2hpdGUgaGFsZnRvbmUgZG90cyBsaWtlIGFuIG9sZCBwcmludGVyLlxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5BYnN0cmFjdEZpbHRlclxuICogQG1lbWJlcm9mIFBJWEkuZmlsdGVyc1xuICovXG5mdW5jdGlvbiBEb3RTY3JlZW5GaWx0ZXIoKVxue1xuICAgIGNvcmUuQWJzdHJhY3RGaWx0ZXIuY2FsbCh0aGlzLFxuICAgICAgICAvLyB2ZXJ0ZXggc2hhZGVyXG4gICAgICAgIG51bGwsXG4gICAgICAgIC8vIGZyYWdtZW50IHNoYWRlclxuICAgICAgICBcInByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xcblxcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xcbnZhcnlpbmcgdmVjNCB2Q29sb3I7XFxuXFxudW5pZm9ybSB2ZWM0IGRpbWVuc2lvbnM7XFxudW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXI7XFxuXFxudW5pZm9ybSBmbG9hdCBhbmdsZTtcXG51bmlmb3JtIGZsb2F0IHNjYWxlO1xcblxcbmZsb2F0IHBhdHRlcm4oKVxcbntcXG4gICBmbG9hdCBzID0gc2luKGFuZ2xlKSwgYyA9IGNvcyhhbmdsZSk7XFxuICAgdmVjMiB0ZXggPSB2VGV4dHVyZUNvb3JkICogZGltZW5zaW9ucy54eTtcXG4gICB2ZWMyIHBvaW50ID0gdmVjMihcXG4gICAgICAgYyAqIHRleC54IC0gcyAqIHRleC55LFxcbiAgICAgICBzICogdGV4LnggKyBjICogdGV4LnlcXG4gICApICogc2NhbGU7XFxuICAgcmV0dXJuIChzaW4ocG9pbnQueCkgKiBzaW4ocG9pbnQueSkpICogNC4wO1xcbn1cXG5cXG52b2lkIG1haW4oKVxcbntcXG4gICB2ZWM0IGNvbG9yID0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2VGV4dHVyZUNvb3JkKTtcXG4gICBmbG9hdCBhdmVyYWdlID0gKGNvbG9yLnIgKyBjb2xvci5nICsgY29sb3IuYikgLyAzLjA7XFxuICAgZ2xfRnJhZ0NvbG9yID0gdmVjNCh2ZWMzKGF2ZXJhZ2UgKiAxMC4wIC0gNS4wICsgcGF0dGVybigpKSwgY29sb3IuYSk7XFxufVxcblwiLFxuICAgICAgICAvLyBjdXN0b20gdW5pZm9ybXNcbiAgICAgICAge1xuICAgICAgICAgICAgc2NhbGU6ICAgICAgeyB0eXBlOiAnMWYnLCB2YWx1ZTogMSB9LFxuICAgICAgICAgICAgYW5nbGU6ICAgICAgeyB0eXBlOiAnMWYnLCB2YWx1ZTogNSB9LFxuICAgICAgICAgICAgZGltZW5zaW9uczogeyB0eXBlOiAnNGZ2JywgdmFsdWU6IFswLCAwLCAwLCAwXSB9XG4gICAgICAgIH1cbiAgICApO1xufVxuXG5Eb3RTY3JlZW5GaWx0ZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShjb3JlLkFic3RyYWN0RmlsdGVyLnByb3RvdHlwZSk7XG5Eb3RTY3JlZW5GaWx0ZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gRG90U2NyZWVuRmlsdGVyO1xubW9kdWxlLmV4cG9ydHMgPSBEb3RTY3JlZW5GaWx0ZXI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKERvdFNjcmVlbkZpbHRlci5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBUaGUgc2NhbGUgb2YgdGhlIGVmZmVjdC5cbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5Eb3RTY3JlZW5GaWx0ZXIjXG4gICAgICovXG4gICAgc2NhbGU6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy51bmlmb3Jtcy5zY2FsZS52YWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudW5pZm9ybXMuc2NhbGUudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBUaGUgcmFkaXVzIG9mIHRoZSBlZmZlY3QuXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuRG90U2NyZWVuRmlsdGVyI1xuICAgICAqL1xuICAgIGFuZ2xlOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudW5pZm9ybXMuYW5nbGUudmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLmFuZ2xlLnZhbHVlID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG59KTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vLi4vY29yZScpO1xuXG4vLyBAc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9zdWJzdGFjay9icmZzL2lzc3Vlcy8yNVxuXG5cbi8qKlxuICogVGhlIEJsdXJZVGludEZpbHRlciBhcHBsaWVzIGEgdmVydGljYWwgR2F1c3NpYW4gYmx1ciB0byBhbiBvYmplY3QuXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLkFic3RyYWN0RmlsdGVyXG4gKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzXG4gKi9cbmZ1bmN0aW9uIEJsdXJZVGludEZpbHRlcigpXG57XG4gICAgY29yZS5BYnN0cmFjdEZpbHRlci5jYWxsKHRoaXMsXG4gICAgICAgIC8vIHZlcnRleCBzaGFkZXJcbiAgICAgICAgXCJhdHRyaWJ1dGUgdmVjMiBhVmVydGV4UG9zaXRpb247XFxuYXR0cmlidXRlIHZlYzIgYVRleHR1cmVDb29yZDtcXG5hdHRyaWJ1dGUgdmVjNCBhQ29sb3I7XFxuXFxudW5pZm9ybSBmbG9hdCBzdHJlbmd0aDtcXG51bmlmb3JtIHZlYzIgb2Zmc2V0O1xcblxcbnVuaWZvcm0gbWF0MyBwcm9qZWN0aW9uTWF0cml4O1xcblxcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xcbnZhcnlpbmcgdmVjNCB2Q29sb3I7XFxudmFyeWluZyB2ZWMyIHZCbHVyVGV4Q29vcmRzWzZdO1xcblxcbnZvaWQgbWFpbih2b2lkKVxcbntcXG4gICAgZ2xfUG9zaXRpb24gPSB2ZWM0KChwcm9qZWN0aW9uTWF0cml4ICogdmVjMygoYVZlcnRleFBvc2l0aW9uK29mZnNldCksIDEuMCkpLnh5LCAwLjAsIDEuMCk7XFxuICAgIHZUZXh0dXJlQ29vcmQgPSBhVGV4dHVyZUNvb3JkO1xcblxcbiAgICB2Qmx1clRleENvb3Jkc1sgMF0gPSBhVGV4dHVyZUNvb3JkICsgdmVjMigwLjAsIC0wLjAxMiAqIHN0cmVuZ3RoKTtcXG4gICAgdkJsdXJUZXhDb29yZHNbIDFdID0gYVRleHR1cmVDb29yZCArIHZlYzIoMC4wLCAtMC4wMDggKiBzdHJlbmd0aCk7XFxuICAgIHZCbHVyVGV4Q29vcmRzWyAyXSA9IGFUZXh0dXJlQ29vcmQgKyB2ZWMyKDAuMCwgLTAuMDA0ICogc3RyZW5ndGgpO1xcbiAgICB2Qmx1clRleENvb3Jkc1sgM10gPSBhVGV4dHVyZUNvb3JkICsgdmVjMigwLjAsICAwLjAwNCAqIHN0cmVuZ3RoKTtcXG4gICAgdkJsdXJUZXhDb29yZHNbIDRdID0gYVRleHR1cmVDb29yZCArIHZlYzIoMC4wLCAgMC4wMDggKiBzdHJlbmd0aCk7XFxuICAgIHZCbHVyVGV4Q29vcmRzWyA1XSA9IGFUZXh0dXJlQ29vcmQgKyB2ZWMyKDAuMCwgIDAuMDEyICogc3RyZW5ndGgpO1xcblxcbiAgIHZDb2xvciA9IHZlYzQoYUNvbG9yLnJnYiAqIGFDb2xvci5hLCBhQ29sb3IuYSk7XFxufVxcblwiLFxuICAgICAgICAvLyBmcmFnbWVudCBzaGFkZXJcbiAgICAgICAgXCJwcmVjaXNpb24gbG93cCBmbG9hdDtcXG5cXG52YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDtcXG52YXJ5aW5nIHZlYzIgdkJsdXJUZXhDb29yZHNbNl07XFxudmFyeWluZyB2ZWM0IHZDb2xvcjtcXG5cXG51bmlmb3JtIHZlYzMgY29sb3I7XFxudW5pZm9ybSBmbG9hdCBhbHBoYTtcXG5cXG51bmlmb3JtIHNhbXBsZXIyRCB1U2FtcGxlcjtcXG5cXG52b2lkIG1haW4odm9pZClcXG57XFxuICAgIHZlYzQgc3VtID0gdmVjNCgwLjApO1xcblxcbiAgICBzdW0gKz0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2Qmx1clRleENvb3Jkc1sgMF0pKjAuMDA0NDMxODQ4NDExOTM4MzQxO1xcbiAgICBzdW0gKz0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2Qmx1clRleENvb3Jkc1sgMV0pKjAuMDUzOTkwOTY2NTEzMTg5ODU7XFxuICAgIHN1bSArPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZCbHVyVGV4Q29vcmRzWyAyXSkqMC4yNDE5NzA3MjQ1MTkxNDU0O1xcbiAgICBzdW0gKz0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2VGV4dHVyZUNvb3JkICAgICApKjAuMzk4OTQyMjgwNDAxNDMyNztcXG4gICAgc3VtICs9IHRleHR1cmUyRCh1U2FtcGxlciwgdkJsdXJUZXhDb29yZHNbIDNdKSowLjI0MTk3MDcyNDUxOTE0NTQ7XFxuICAgIHN1bSArPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZCbHVyVGV4Q29vcmRzWyA0XSkqMC4wNTM5OTA5NjY1MTMxODk4NTtcXG4gICAgc3VtICs9IHRleHR1cmUyRCh1U2FtcGxlciwgdkJsdXJUZXhDb29yZHNbIDVdKSowLjAwNDQzMTg0ODQxMTkzODM0MTtcXG5cXG4gICAgZ2xfRnJhZ0NvbG9yID0gdmVjNCggY29sb3IucmdiICogc3VtLmEgKiBhbHBoYSwgc3VtLmEgKiBhbHBoYSApO1xcbn1cXG5cIixcbiAgICAgICAgLy8gc2V0IHRoZSB1bmlmb3Jtc1xuICAgICAgICB7XG4gICAgICAgICAgICBibHVyOiB7IHR5cGU6ICcxZicsIHZhbHVlOiAxIC8gNTEyIH0sXG4gICAgICAgICAgICBjb2xvcjogeyB0eXBlOiAnYycsIHZhbHVlOiBbMCwwLDBdfSxcbiAgICAgICAgICAgIGFscGhhOiB7IHR5cGU6ICcxZicsIHZhbHVlOiAwLjcgfSxcbiAgICAgICAgICAgIG9mZnNldDogeyB0eXBlOiAnMmYnLCB2YWx1ZTpbNSwgNV19LFxuICAgICAgICAgICAgc3RyZW5ndGg6IHsgdHlwZTogJzFmJywgdmFsdWU6MX1cbiAgICAgICAgfVxuICAgICk7XG5cbiAgICB0aGlzLnBhc3NlcyA9IDE7XG4gICAgdGhpcy5zdHJlbmd0aCA9IDQ7XG59XG5cbkJsdXJZVGludEZpbHRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuQWJzdHJhY3RGaWx0ZXIucHJvdG90eXBlKTtcbkJsdXJZVGludEZpbHRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBCbHVyWVRpbnRGaWx0ZXI7XG5tb2R1bGUuZXhwb3J0cyA9IEJsdXJZVGludEZpbHRlcjtcblxuQmx1cllUaW50RmlsdGVyLnByb3RvdHlwZS5hcHBseUZpbHRlciA9IGZ1bmN0aW9uIChyZW5kZXJlciwgaW5wdXQsIG91dHB1dCwgY2xlYXIpXG57XG4gICAgdmFyIHNoYWRlciA9IHRoaXMuZ2V0U2hhZGVyKHJlbmRlcmVyKTtcblxuICAgIHRoaXMudW5pZm9ybXMuc3RyZW5ndGgudmFsdWUgPSB0aGlzLnN0cmVuZ3RoIC8gNCAvIHRoaXMucGFzc2VzICogKGlucHV0LmZyYW1lLmhlaWdodCAvIGlucHV0LnNpemUuaGVpZ2h0KTtcblxuICAgIGlmKHRoaXMucGFzc2VzID09PSAxKVxuICAgIHtcbiAgICAgICAgcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5hcHBseUZpbHRlcihzaGFkZXIsIGlucHV0LCBvdXRwdXQsIGNsZWFyKTtcbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgdmFyIHJlbmRlclRhcmdldCA9IHJlbmRlcmVyLmZpbHRlck1hbmFnZXIuZ2V0UmVuZGVyVGFyZ2V0KHRydWUpO1xuICAgICAgICB2YXIgZmxpcCA9IGlucHV0O1xuICAgICAgICB2YXIgZmxvcCA9IHJlbmRlclRhcmdldDtcblxuICAgICAgICBmb3IodmFyIGkgPSAwOyBpIDwgdGhpcy5wYXNzZXMtMTsgaSsrKVxuICAgICAgICB7XG4gICAgICAgICAgICByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLmFwcGx5RmlsdGVyKHNoYWRlciwgZmxpcCwgZmxvcCwgY2xlYXIpO1xuXG4gICAgICAgICAgIHZhciB0ZW1wID0gZmxvcDtcbiAgICAgICAgICAgZmxvcCA9IGZsaXA7XG4gICAgICAgICAgIGZsaXAgPSB0ZW1wO1xuICAgICAgICB9XG5cbiAgICAgICAgcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5hcHBseUZpbHRlcihzaGFkZXIsIGZsaXAsIG91dHB1dCwgY2xlYXIpO1xuXG4gICAgICAgIHJlbmRlcmVyLmZpbHRlck1hbmFnZXIucmV0dXJuUmVuZGVyVGFyZ2V0KHJlbmRlclRhcmdldCk7XG4gICAgfVxufTtcblxuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhCbHVyWVRpbnRGaWx0ZXIucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgc3RyZW5ndGggb2YgYm90aCB0aGUgYmx1ci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLkJsdXJZVGludEZpbHRlciNcbiAgICAgKiBAZGVmYXVsdCAyXG4gICAgICovXG4gICAgYmx1cjoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiAgdGhpcy5zdHJlbmd0aDtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMucGFkZGluZyA9IHZhbHVlICogMC41O1xuICAgICAgICAgICAgdGhpcy5zdHJlbmd0aCA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfVxufSk7XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uLy4uL2NvcmUnKSxcbiAgICBCbHVyWEZpbHRlciA9IHJlcXVpcmUoJy4uL2JsdXIvQmx1clhGaWx0ZXInKSxcbiAgICBCbHVyWVRpbnRGaWx0ZXIgPSByZXF1aXJlKCcuL0JsdXJZVGludEZpbHRlcicpO1xuXG4vKipcbiAqIFRoZSBEcm9wU2hhZG93RmlsdGVyIGFwcGxpZXMgYSBHYXVzc2lhbiBibHVyIHRvIGFuIG9iamVjdC5cbiAqIFRoZSBzdHJlbmd0aCBvZiB0aGUgYmx1ciBjYW4gYmUgc2V0IGZvciB4LSBhbmQgeS1heGlzIHNlcGFyYXRlbHkuXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLkFic3RyYWN0RmlsdGVyXG4gKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzXG4gKi9cbmZ1bmN0aW9uIERyb3BTaGFkb3dGaWx0ZXIoKVxue1xuICAgIGNvcmUuQWJzdHJhY3RGaWx0ZXIuY2FsbCh0aGlzKTtcblxuICAgIHRoaXMuYmx1clhGaWx0ZXIgPSBuZXcgQmx1clhGaWx0ZXIoKTtcbiAgICB0aGlzLmJsdXJZVGludEZpbHRlciA9IG5ldyBCbHVyWVRpbnRGaWx0ZXIoKTtcblxuICAgIHRoaXMuZGVmYXVsdEZpbHRlciA9IG5ldyBjb3JlLkFic3RyYWN0RmlsdGVyKCk7XG5cbiAgICB0aGlzLnBhZGRpbmcgPSAzMDtcblxuICAgIHRoaXMuX2RpcnR5UG9zaXRpb24gPSB0cnVlO1xuICAgIHRoaXMuX2FuZ2xlID0gNDUgKiBNYXRoLlBJIC8gMTgwO1xuICAgIHRoaXMuX2Rpc3RhbmNlID0gMTA7XG4gICAgdGhpcy5hbHBoYSA9IDAuNzU7XG4gICAgdGhpcy5oaWRlT2JqZWN0ID0gZmFsc2U7XG4gICAgdGhpcy5ibGVuZE1vZGUgPSBjb3JlLkJMRU5EX01PREVTLk1VTFRJUExZO1xufVxuXG5Ecm9wU2hhZG93RmlsdGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoY29yZS5BYnN0cmFjdEZpbHRlci5wcm90b3R5cGUpO1xuRHJvcFNoYWRvd0ZpbHRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBEcm9wU2hhZG93RmlsdGVyO1xubW9kdWxlLmV4cG9ydHMgPSBEcm9wU2hhZG93RmlsdGVyO1xuXG5Ecm9wU2hhZG93RmlsdGVyLnByb3RvdHlwZS5hcHBseUZpbHRlciA9IGZ1bmN0aW9uIChyZW5kZXJlciwgaW5wdXQsIG91dHB1dClcbntcbiAgICB2YXIgcmVuZGVyVGFyZ2V0ID0gcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5nZXRSZW5kZXJUYXJnZXQodHJ1ZSk7XG5cbiAgICAvL1RPRE8gLSBjb3B5VGV4U3ViSW1hZ2UyRCBjb3VsZCBiZSB1c2VkIGhlcmU/XG4gICAgaWYodGhpcy5fZGlydHlQb3NpdGlvbilcbiAgICB7XG4gICAgICAgIHRoaXMuX2RpcnR5UG9zaXRpb24gPSBmYWxzZTtcblxuICAgICAgICB0aGlzLmJsdXJZVGludEZpbHRlci51bmlmb3Jtcy5vZmZzZXQudmFsdWVbMF0gPSBNYXRoLnNpbih0aGlzLl9hbmdsZSkgKiB0aGlzLl9kaXN0YW5jZTtcbiAgICAgICAgdGhpcy5ibHVyWVRpbnRGaWx0ZXIudW5pZm9ybXMub2Zmc2V0LnZhbHVlWzFdID0gTWF0aC5jb3ModGhpcy5fYW5nbGUpICogdGhpcy5fZGlzdGFuY2U7XG4gICAgfVxuXG4gICAgdGhpcy5ibHVyWEZpbHRlci5hcHBseUZpbHRlcihyZW5kZXJlciwgaW5wdXQsIHJlbmRlclRhcmdldCk7XG5cbiAgICByZW5kZXJlci5ibGVuZE1vZGVNYW5hZ2VyLnNldEJsZW5kTW9kZSh0aGlzLmJsZW5kTW9kZSk7XG5cbiAgICB0aGlzLmJsdXJZVGludEZpbHRlci5hcHBseUZpbHRlcihyZW5kZXJlciwgcmVuZGVyVGFyZ2V0LCBvdXRwdXQpO1xuXG4gICAgcmVuZGVyZXIuYmxlbmRNb2RlTWFuYWdlci5zZXRCbGVuZE1vZGUoY29yZS5CTEVORF9NT0RFUy5OT1JNQUwpO1xuXG4gICAgaWYoIXRoaXMuaGlkZU9iamVjdClcbiAgICB7XG5cbiAgICAgICAgdGhpcy5kZWZhdWx0RmlsdGVyLmFwcGx5RmlsdGVyKHJlbmRlcmVyLCBpbnB1dCwgb3V0cHV0KTtcbiAgICB9XG5cblxuICAgIHJlbmRlcmVyLmZpbHRlck1hbmFnZXIucmV0dXJuUmVuZGVyVGFyZ2V0KHJlbmRlclRhcmdldCk7XG59O1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhEcm9wU2hhZG93RmlsdGVyLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIHN0cmVuZ3RoIG9mIGJvdGggdGhlIGJsdXJYIGFuZCBibHVyWSBwcm9wZXJ0aWVzIHNpbXVsdGFuZW91c2x5XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlck9mIFBJWEkuZmlsdGVycy5Ecm9wU2hhZG93RmlsdGVyI1xuICAgICAqIEBkZWZhdWx0IDJcbiAgICAgKi9cbiAgICBibHVyOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuYmx1clhGaWx0ZXIuYmx1cjtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuYmx1clhGaWx0ZXIuYmx1ciA9IHRoaXMuYmx1cllUaW50RmlsdGVyLmJsdXIgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBzdHJlbmd0aCBvZiB0aGUgYmx1clggcHJvcGVydHlcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyT2YgUElYSS5maWx0ZXJzLkRyb3BTaGFkb3dGaWx0ZXIjXG4gICAgICogQGRlZmF1bHQgMlxuICAgICAqL1xuICAgIGJsdXJYOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuYmx1clhGaWx0ZXIuYmx1cjtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuYmx1clhGaWx0ZXIuYmx1ciA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIHN0cmVuZ3RoIG9mIHRoZSBibHVyWSBwcm9wZXJ0eVxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJPZiBQSVhJLmZpbHRlcnMuRHJvcFNoYWRvd0ZpbHRlciNcbiAgICAgKiBAZGVmYXVsdCAyXG4gICAgICovXG4gICAgYmx1clk6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5ibHVyWVRpbnRGaWx0ZXIuYmx1cjtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuYmx1cllUaW50RmlsdGVyLmJsdXIgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBjb2xvciBvZiB0aGUgc2hhZG93XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlck9mIFBJWEkuZmlsdGVycy5Ecm9wU2hhZG93RmlsdGVyI1xuICAgICAqL1xuICAgIGNvbG9yOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuICBjb3JlLnV0aWxzLnJnYjJoZXgoIHRoaXMuYmx1cllUaW50RmlsdGVyLnVuaWZvcm1zLmNvbG9yLnZhbHVlICk7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmJsdXJZVGludEZpbHRlci51bmlmb3Jtcy5jb2xvci52YWx1ZSA9IGNvcmUudXRpbHMuaGV4MnJnYih2YWx1ZSk7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgYWxwaGEgb2YgdGhlIHNoYWRvd1xuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJPZiBQSVhJLmZpbHRlcnMuRHJvcFNoYWRvd0ZpbHRlciNcbiAgICAgKi9cbiAgICBhbHBoYToge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiAgdGhpcy5ibHVyWVRpbnRGaWx0ZXIudW5pZm9ybXMuYWxwaGEudmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmJsdXJZVGludEZpbHRlci51bmlmb3Jtcy5hbHBoYS52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIGRpc3RhbmNlIG9mIHRoZSBzaGFkb3dcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyT2YgUElYSS5maWx0ZXJzLkRyb3BTaGFkb3dGaWx0ZXIjXG4gICAgICovXG4gICAgZGlzdGFuY2U6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gIHRoaXMuX2Rpc3RhbmNlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5fZGlydHlQb3NpdGlvbiA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLl9kaXN0YW5jZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIGFuZ2xlIG9mIHRoZSBzaGFkb3dcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyT2YgUElYSS5maWx0ZXJzLkRyb3BTaGFkb3dGaWx0ZXIjXG4gICAgICovXG4gICAgYW5nbGU6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gIHRoaXMuX2FuZ2xlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5fZGlydHlQb3NpdGlvbiA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLl9hbmdsZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfVxufSk7XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uLy4uL2NvcmUnKTtcbi8vIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL3N1YnN0YWNrL2JyZnMvaXNzdWVzLzI1XG5cblxuLyoqXG4gKiBUaGlzIGdyZXlzY2FsZXMgdGhlIHBhbGV0dGUgb2YgeW91ciBEaXNwbGF5IE9iamVjdHMuXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLkFic3RyYWN0RmlsdGVyXG4gKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzXG4gKi9cbmZ1bmN0aW9uIEdyYXlGaWx0ZXIoKVxue1xuICAgIGNvcmUuQWJzdHJhY3RGaWx0ZXIuY2FsbCh0aGlzLFxuICAgICAgICAvLyB2ZXJ0ZXggc2hhZGVyXG4gICAgICAgIG51bGwsXG4gICAgICAgIC8vIGZyYWdtZW50IHNoYWRlclxuICAgICAgICBcInByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xcblxcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xcbnZhcnlpbmcgdmVjNCB2Q29sb3I7XFxuXFxudW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXI7XFxudW5pZm9ybSBmbG9hdCBncmF5O1xcblxcbnZvaWQgbWFpbih2b2lkKVxcbntcXG4gICBnbF9GcmFnQ29sb3IgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZUZXh0dXJlQ29vcmQpO1xcbiAgIGdsX0ZyYWdDb2xvci5yZ2IgPSBtaXgoZ2xfRnJhZ0NvbG9yLnJnYiwgdmVjMygwLjIxMjYqZ2xfRnJhZ0NvbG9yLnIgKyAwLjcxNTIqZ2xfRnJhZ0NvbG9yLmcgKyAwLjA3MjIqZ2xfRnJhZ0NvbG9yLmIpLCBncmF5KTtcXG59XFxuXCIsXG4gICAgICAgIC8vIHNldCB0aGUgdW5pZm9ybXNcbiAgICAgICAge1xuICAgICAgICAgICAgZ3JheTogeyB0eXBlOiAnMWYnLCB2YWx1ZTogMSB9XG4gICAgICAgIH1cbiAgICApO1xufVxuXG5HcmF5RmlsdGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoY29yZS5BYnN0cmFjdEZpbHRlci5wcm90b3R5cGUpO1xuR3JheUZpbHRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBHcmF5RmlsdGVyO1xubW9kdWxlLmV4cG9ydHMgPSBHcmF5RmlsdGVyO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhHcmF5RmlsdGVyLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFRoZSBzdHJlbmd0aCBvZiB0aGUgZ3JheS4gMSB3aWxsIG1ha2UgdGhlIG9iamVjdCBibGFjayBhbmQgd2hpdGUsIDAgd2lsbCBtYWtlIHRoZSBvYmplY3QgaXRzIG5vcm1hbCBjb2xvci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLkdyYXlGaWx0ZXIjXG4gICAgICovXG4gICAgZ3JheToge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVuaWZvcm1zLmdyYXkudmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLmdyYXkudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuIiwiLyoqXG4gKiBAZmlsZSAgICAgICAgTWFpbiBleHBvcnQgb2YgdGhlIFBJWEkgZmlsdGVycyBsaWJyYXJ5XG4gKiBAYXV0aG9yICAgICAgTWF0IEdyb3ZlcyA8bWF0QGdvb2Rib3lkaWdpdGFsLmNvbT5cbiAqIEBjb3B5cmlnaHQgICAyMDEzLTIwMTUgR29vZEJveURpZ2l0YWxcbiAqIEBsaWNlbnNlICAgICB7QGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL3BpeGlqcy9waXhpLmpzL2Jsb2IvbWFzdGVyL0xJQ0VOU0V8TUlUIExpY2Vuc2V9XG4gKi9cblxuLyoqXG4gKiBAbmFtZXNwYWNlIFBJWEkuZmlsdGVyc1xuICovXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgICBBc2NpaUZpbHRlcjogICAgICAgIHJlcXVpcmUoJy4vYXNjaWkvQXNjaWlGaWx0ZXInKSxcbiAgICBCbG9vbUZpbHRlcjogICAgICAgIHJlcXVpcmUoJy4vYmxvb20vQmxvb21GaWx0ZXInKSxcbiAgICBCbHVyRmlsdGVyOiAgICAgICAgIHJlcXVpcmUoJy4vYmx1ci9CbHVyRmlsdGVyJyksXG4gICAgQmx1clhGaWx0ZXI6ICAgICAgICByZXF1aXJlKCcuL2JsdXIvQmx1clhGaWx0ZXInKSxcbiAgICBCbHVyWUZpbHRlcjogICAgICAgIHJlcXVpcmUoJy4vYmx1ci9CbHVyWUZpbHRlcicpLFxuICAgIEJsdXJEaXJGaWx0ZXI6ICAgICAgcmVxdWlyZSgnLi9ibHVyL0JsdXJEaXJGaWx0ZXInKSxcbiAgICBDb2xvck1hdHJpeEZpbHRlcjogIHJlcXVpcmUoJy4vY29sb3IvQ29sb3JNYXRyaXhGaWx0ZXInKSxcbiAgICBDb2xvclN0ZXBGaWx0ZXI6ICAgIHJlcXVpcmUoJy4vY29sb3IvQ29sb3JTdGVwRmlsdGVyJyksXG4gICAgQ29udm9sdXRpb25GaWx0ZXI6ICByZXF1aXJlKCcuL2NvbnZvbHV0aW9uL0NvbnZvbHV0aW9uRmlsdGVyJyksXG4gICAgQ3Jvc3NIYXRjaEZpbHRlcjogICByZXF1aXJlKCcuL2Nyb3NzaGF0Y2gvQ3Jvc3NIYXRjaEZpbHRlcicpLFxuICAgIERpc3BsYWNlbWVudEZpbHRlcjogcmVxdWlyZSgnLi9kaXNwbGFjZW1lbnQvRGlzcGxhY2VtZW50RmlsdGVyJyksXG4gICAgRG90U2NyZWVuRmlsdGVyOiAgICByZXF1aXJlKCcuL2RvdC9Eb3RTY3JlZW5GaWx0ZXInKSxcbiAgICBHcmF5RmlsdGVyOiAgICAgICAgIHJlcXVpcmUoJy4vZ3JheS9HcmF5RmlsdGVyJyksXG4gICAgRHJvcFNoYWRvd0ZpbHRlcjogICByZXF1aXJlKCcuL2Ryb3BzaGFkb3cvRHJvcFNoYWRvd0ZpbHRlcicpLFxuICAgIEludmVydEZpbHRlcjogICAgICAgcmVxdWlyZSgnLi9pbnZlcnQvSW52ZXJ0RmlsdGVyJyksXG4gICAgTm9pc2VGaWx0ZXI6ICAgICAgICByZXF1aXJlKCcuL25vaXNlL05vaXNlRmlsdGVyJyksXG4gICAgUGl4ZWxhdGVGaWx0ZXI6ICAgICByZXF1aXJlKCcuL3BpeGVsYXRlL1BpeGVsYXRlRmlsdGVyJyksXG4gICAgUkdCU3BsaXRGaWx0ZXI6ICAgICByZXF1aXJlKCcuL3JnYi9SR0JTcGxpdEZpbHRlcicpLFxuICAgIFNob2Nrd2F2ZUZpbHRlcjogICAgcmVxdWlyZSgnLi9zaG9ja3dhdmUvU2hvY2t3YXZlRmlsdGVyJyksXG4gICAgU2VwaWFGaWx0ZXI6ICAgICAgICByZXF1aXJlKCcuL3NlcGlhL1NlcGlhRmlsdGVyJyksXG4gICAgU21hcnRCbHVyRmlsdGVyOiAgICByZXF1aXJlKCcuL2JsdXIvU21hcnRCbHVyRmlsdGVyJyksXG4gICAgVGlsdFNoaWZ0RmlsdGVyOiAgICByZXF1aXJlKCcuL3RpbHRzaGlmdC9UaWx0U2hpZnRGaWx0ZXInKSxcbiAgICBUaWx0U2hpZnRYRmlsdGVyOiAgIHJlcXVpcmUoJy4vdGlsdHNoaWZ0L1RpbHRTaGlmdFhGaWx0ZXInKSxcbiAgICBUaWx0U2hpZnRZRmlsdGVyOiAgIHJlcXVpcmUoJy4vdGlsdHNoaWZ0L1RpbHRTaGlmdFlGaWx0ZXInKSxcbiAgICBUd2lzdEZpbHRlcjogICAgICAgIHJlcXVpcmUoJy4vdHdpc3QvVHdpc3RGaWx0ZXInKVxufTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vLi4vY29yZScpO1xuLy8gQHNlZSBodHRwczovL2dpdGh1Yi5jb20vc3Vic3RhY2svYnJmcy9pc3N1ZXMvMjVcblxuXG4vKipcbiAqIFRoaXMgaW52ZXJ0cyB5b3VyIERpc3BsYXkgT2JqZWN0cyBjb2xvcnMuXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLkFic3RyYWN0RmlsdGVyXG4gKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzXG4gKi9cbmZ1bmN0aW9uIEludmVydEZpbHRlcigpXG57XG4gICAgY29yZS5BYnN0cmFjdEZpbHRlci5jYWxsKHRoaXMsXG4gICAgICAgIC8vIHZlcnRleCBzaGFkZXJcbiAgICAgICAgbnVsbCxcbiAgICAgICAgLy8gZnJhZ21lbnQgc2hhZGVyXG4gICAgICAgIFwicHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XFxuXFxudmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7XFxuXFxudW5pZm9ybSBmbG9hdCBpbnZlcnQ7XFxudW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXI7XFxuXFxudm9pZCBtYWluKHZvaWQpXFxue1xcbiAgICBnbF9GcmFnQ29sb3IgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZUZXh0dXJlQ29vcmQpO1xcblxcbiAgICBnbF9GcmFnQ29sb3IucmdiID0gbWl4KCAodmVjMygxKS1nbF9GcmFnQ29sb3IucmdiKSAqIGdsX0ZyYWdDb2xvci5hLCBnbF9GcmFnQ29sb3IucmdiLCAxLjAgLSBpbnZlcnQpO1xcbn1cXG5cIixcbiAgICAgICAgLy8gY3VzdG9tIHVuaWZvcm1zXG4gICAgICAgIHtcbiAgICAgICAgICAgIGludmVydDogeyB0eXBlOiAnMWYnLCB2YWx1ZTogMSB9XG4gICAgICAgIH1cbiAgICApO1xufVxuXG5JbnZlcnRGaWx0ZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShjb3JlLkFic3RyYWN0RmlsdGVyLnByb3RvdHlwZSk7XG5JbnZlcnRGaWx0ZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gSW52ZXJ0RmlsdGVyO1xubW9kdWxlLmV4cG9ydHMgPSBJbnZlcnRGaWx0ZXI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKEludmVydEZpbHRlci5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBUaGUgc3RyZW5ndGggb2YgdGhlIGludmVydC4gYDFgIHdpbGwgZnVsbHkgaW52ZXJ0IHRoZSBjb2xvcnMsIGFuZFxuICAgICAqIGAwYCB3aWxsIG1ha2UgdGhlIG9iamVjdCBpdHMgbm9ybWFsIGNvbG9yLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuSW52ZXJ0RmlsdGVyI1xuICAgICAqL1xuICAgIGludmVydDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVuaWZvcm1zLmludmVydC52YWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudW5pZm9ybXMuaW52ZXJ0LnZhbHVlID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG59KTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vLi4vY29yZScpO1xuLy8gQHNlZSBodHRwczovL2dpdGh1Yi5jb20vc3Vic3RhY2svYnJmcy9pc3N1ZXMvMjVcblxuXG4vKipcbiAqIEBhdXRob3IgVmljbyBAdmljb2NvdGVhXG4gKiBvcmlnaW5hbCBmaWx0ZXI6IGh0dHBzOi8vZ2l0aHViLmNvbS9ldmFudy9nbGZ4LmpzL2Jsb2IvbWFzdGVyL3NyYy9maWx0ZXJzL2FkanVzdC9ub2lzZS5qc1xuICovXG5cbi8qKlxuICogQSBOb2lzZSBlZmZlY3QgZmlsdGVyLlxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5BYnN0cmFjdEZpbHRlclxuICogQG1lbWJlcm9mIFBJWEkuZmlsdGVyc1xuICovXG5mdW5jdGlvbiBOb2lzZUZpbHRlcigpXG57XG4gICAgY29yZS5BYnN0cmFjdEZpbHRlci5jYWxsKHRoaXMsXG4gICAgICAgIC8vIHZlcnRleCBzaGFkZXJcbiAgICAgICAgbnVsbCxcbiAgICAgICAgLy8gZnJhZ21lbnQgc2hhZGVyXG4gICAgICAgIFwicHJlY2lzaW9uIGhpZ2hwIGZsb2F0O1xcblxcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xcbnZhcnlpbmcgdmVjNCB2Q29sb3I7XFxuXFxudW5pZm9ybSBmbG9hdCBub2lzZTtcXG51bmlmb3JtIHNhbXBsZXIyRCB1U2FtcGxlcjtcXG5cXG5mbG9hdCByYW5kKHZlYzIgY28pXFxue1xcbiAgICByZXR1cm4gZnJhY3Qoc2luKGRvdChjby54eSwgdmVjMigxMi45ODk4LCA3OC4yMzMpKSkgKiA0Mzc1OC41NDUzKTtcXG59XFxuXFxudm9pZCBtYWluKClcXG57XFxuICAgIHZlYzQgY29sb3IgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZUZXh0dXJlQ29vcmQpO1xcblxcbiAgICBmbG9hdCBkaWZmID0gKHJhbmQodlRleHR1cmVDb29yZCkgLSAwLjUpICogbm9pc2U7XFxuXFxuICAgIGNvbG9yLnIgKz0gZGlmZjtcXG4gICAgY29sb3IuZyArPSBkaWZmO1xcbiAgICBjb2xvci5iICs9IGRpZmY7XFxuXFxuICAgIGdsX0ZyYWdDb2xvciA9IGNvbG9yO1xcbn1cXG5cIixcbiAgICAgICAgLy8gY3VzdG9tIHVuaWZvcm1zXG4gICAgICAgIHtcbiAgICAgICAgICAgIG5vaXNlOiB7IHR5cGU6ICcxZicsIHZhbHVlOiAwLjUgfVxuICAgICAgICB9XG4gICAgKTtcbn1cblxuTm9pc2VGaWx0ZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShjb3JlLkFic3RyYWN0RmlsdGVyLnByb3RvdHlwZSk7XG5Ob2lzZUZpbHRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBOb2lzZUZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gTm9pc2VGaWx0ZXI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKE5vaXNlRmlsdGVyLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFRoZSBhbW91bnQgb2Ygbm9pc2UgdG8gYXBwbHkuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5Ob2lzZUZpbHRlciNcbiAgICAgKiBAZGVmYXVsdCAwLjVcbiAgICAgKi9cbiAgICBub2lzZToge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVuaWZvcm1zLm5vaXNlLnZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy5ub2lzZS52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfVxufSk7XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uLy4uL2NvcmUnKTtcbi8vIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL3N1YnN0YWNrL2JyZnMvaXNzdWVzLzI1XG5cblxuLyoqXG4gKiBUaGlzIGZpbHRlciBhcHBsaWVzIGEgcGl4ZWxhdGUgZWZmZWN0IG1ha2luZyBkaXNwbGF5IG9iamVjdHMgYXBwZWFyICdibG9ja3knLlxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5BYnN0cmFjdEZpbHRlclxuICogQG1lbWJlcm9mIFBJWEkuZmlsdGVyc1xuICovXG5mdW5jdGlvbiBQaXhlbGF0ZUZpbHRlcigpXG57XG4gICAgY29yZS5BYnN0cmFjdEZpbHRlci5jYWxsKHRoaXMsXG4gICAgICAgIC8vIHZlcnRleCBzaGFkZXJcbiAgICAgICAgbnVsbCxcbiAgICAgICAgLy8gZnJhZ21lbnQgc2hhZGVyXG4gICAgICAgIFwicHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XFxuXFxudmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7XFxuXFxudW5pZm9ybSB2ZWM0IGRpbWVuc2lvbnM7XFxudW5pZm9ybSB2ZWMyIHBpeGVsU2l6ZTtcXG51bmlmb3JtIHNhbXBsZXIyRCB1U2FtcGxlcjtcXG5cXG52b2lkIG1haW4odm9pZClcXG57XFxuICAgIHZlYzIgY29vcmQgPSB2VGV4dHVyZUNvb3JkO1xcblxcbiAgICB2ZWMyIHNpemUgPSBkaW1lbnNpb25zLnh5IC8gcGl4ZWxTaXplO1xcblxcbiAgICB2ZWMyIGNvbG9yID0gZmxvb3IoICggdlRleHR1cmVDb29yZCAqIHNpemUgKSApIC8gc2l6ZSArIHBpeGVsU2l6ZS9kaW1lbnNpb25zLnh5ICogMC41O1xcblxcbiAgICBnbF9GcmFnQ29sb3IgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIGNvbG9yKTtcXG59XFxuXCIsXG4gICAgICAgIC8vIGN1c3RvbSB1bmlmb3Jtc1xuICAgICAgICB7XG4gICAgICAgICAgICBkaW1lbnNpb25zOiB7IHR5cGU6ICc0ZnYnLCAgdmFsdWU6IG5ldyBGbG9hdDMyQXJyYXkoWzAsIDAsIDAsIDBdKSB9LFxuICAgICAgICAgICAgcGl4ZWxTaXplOiAgeyB0eXBlOiAndjInLCAgIHZhbHVlOiB7IHg6IDEwLCB5OiAxMCB9IH1cbiAgICAgICAgfVxuICAgICk7XG59XG5cblBpeGVsYXRlRmlsdGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoY29yZS5BYnN0cmFjdEZpbHRlci5wcm90b3R5cGUpO1xuUGl4ZWxhdGVGaWx0ZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gUGl4ZWxhdGVGaWx0ZXI7XG5tb2R1bGUuZXhwb3J0cyA9IFBpeGVsYXRlRmlsdGVyO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhQaXhlbGF0ZUZpbHRlci5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBUaGlzIGEgcG9pbnQgdGhhdCBkZXNjcmliZXMgdGhlIHNpemUgb2YgdGhlIGJsb2Nrcy5cbiAgICAgKiB4IGlzIHRoZSB3aWR0aCBvZiB0aGUgYmxvY2sgYW5kIHkgaXMgdGhlIGhlaWdodC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuUG9pbnR9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5QaXhlbGF0ZUZpbHRlciNcbiAgICAgKi9cbiAgICBzaXplOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudW5pZm9ybXMucGl4ZWxTaXplLnZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy5waXhlbFNpemUudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi8uLi9jb3JlJyk7XG4vLyBAc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9zdWJzdGFjay9icmZzL2lzc3Vlcy8yNVxuXG5cbi8qKlxuICogQW4gUkdCIFNwbGl0IEZpbHRlci5cbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQWJzdHJhY3RGaWx0ZXJcbiAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnNcbiAqL1xuZnVuY3Rpb24gUkdCU3BsaXRGaWx0ZXIoKVxue1xuICAgIGNvcmUuQWJzdHJhY3RGaWx0ZXIuY2FsbCh0aGlzLFxuICAgICAgICAvLyB2ZXJ0ZXggc2hhZGVyXG4gICAgICAgIG51bGwsXG4gICAgICAgIC8vIGZyYWdtZW50IHNoYWRlclxuICAgICAgICBcInByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xcblxcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xcblxcbnVuaWZvcm0gc2FtcGxlcjJEIHVTYW1wbGVyO1xcbnVuaWZvcm0gdmVjNCBkaW1lbnNpb25zO1xcbnVuaWZvcm0gdmVjMiByZWQ7XFxudW5pZm9ybSB2ZWMyIGdyZWVuO1xcbnVuaWZvcm0gdmVjMiBibHVlO1xcblxcbnZvaWQgbWFpbih2b2lkKVxcbntcXG4gICBnbF9GcmFnQ29sb3IuciA9IHRleHR1cmUyRCh1U2FtcGxlciwgdlRleHR1cmVDb29yZCArIHJlZC9kaW1lbnNpb25zLnh5KS5yO1xcbiAgIGdsX0ZyYWdDb2xvci5nID0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2VGV4dHVyZUNvb3JkICsgZ3JlZW4vZGltZW5zaW9ucy54eSkuZztcXG4gICBnbF9GcmFnQ29sb3IuYiA9IHRleHR1cmUyRCh1U2FtcGxlciwgdlRleHR1cmVDb29yZCArIGJsdWUvZGltZW5zaW9ucy54eSkuYjtcXG4gICBnbF9GcmFnQ29sb3IuYSA9IHRleHR1cmUyRCh1U2FtcGxlciwgdlRleHR1cmVDb29yZCkuYTtcXG59XFxuXCIsXG4gICAgICAgIC8vIGN1c3RvbSB1bmlmb3Jtc1xuICAgICAgICB7XG4gICAgICAgICAgICByZWQ6ICAgICAgICB7IHR5cGU6ICd2MicsIHZhbHVlOiB7IHg6IDIwLCB5OiAyMCB9IH0sXG4gICAgICAgICAgICBncmVlbjogICAgICB7IHR5cGU6ICd2MicsIHZhbHVlOiB7IHg6IC0yMCwgeTogMjAgfSB9LFxuICAgICAgICAgICAgYmx1ZTogICAgICAgeyB0eXBlOiAndjInLCB2YWx1ZTogeyB4OiAyMCwgeTogLTIwIH0gfSxcbiAgICAgICAgICAgIGRpbWVuc2lvbnM6IHsgdHlwZTogJzRmdicsIHZhbHVlOiBbMCwgMCwgMCwgMF0gfVxuICAgICAgICB9XG4gICAgKTtcbn1cblxuUkdCU3BsaXRGaWx0ZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShjb3JlLkFic3RyYWN0RmlsdGVyLnByb3RvdHlwZSk7XG5SR0JTcGxpdEZpbHRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBSR0JTcGxpdEZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gUkdCU3BsaXRGaWx0ZXI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKFJHQlNwbGl0RmlsdGVyLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFJlZCBjaGFubmVsIG9mZnNldC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuUG9pbnR9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5SR0JTcGxpdEZpbHRlciNcbiAgICAgKi9cbiAgICByZWQ6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy51bmlmb3Jtcy5yZWQudmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLnJlZC52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIEdyZWVuIGNoYW5uZWwgb2Zmc2V0LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5Qb2ludH1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLlJHQlNwbGl0RmlsdGVyI1xuICAgICAqL1xuICAgIGdyZWVuOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudW5pZm9ybXMuZ3JlZW4udmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLmdyZWVuLnZhbHVlID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQmx1ZSBvZmZzZXQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlBvaW50fVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuUkdCU3BsaXRGaWx0ZXIjXG4gICAgICovXG4gICAgYmx1ZToge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVuaWZvcm1zLmJsdWUudmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLmJsdWUudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi8uLi9jb3JlJyk7XG4vLyBAc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9zdWJzdGFjay9icmZzL2lzc3Vlcy8yNVxuXG5cbi8qKlxuICogVGhpcyBhcHBsaWVzIGEgc2VwaWEgZWZmZWN0IHRvIHlvdXIgRGlzcGxheSBPYmplY3RzLlxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5BYnN0cmFjdEZpbHRlclxuICogQG1lbWJlcm9mIFBJWEkuZmlsdGVyc1xuICovXG5mdW5jdGlvbiBTZXBpYUZpbHRlcigpXG57XG4gICAgY29yZS5BYnN0cmFjdEZpbHRlci5jYWxsKHRoaXMsXG4gICAgICAgIC8vIHZlcnRleCBzaGFkZXJcbiAgICAgICAgbnVsbCxcbiAgICAgICAgLy8gZnJhZ21lbnQgc2hhZGVyXG4gICAgICAgIFwicHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XFxuXFxudmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7XFxuXFxudW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXI7XFxudW5pZm9ybSBmbG9hdCBzZXBpYTtcXG5cXG5jb25zdCBtYXQzIHNlcGlhTWF0cml4ID0gbWF0MygwLjM1ODgsIDAuNzA0NCwgMC4xMzY4LCAwLjI5OTAsIDAuNTg3MCwgMC4xMTQwLCAwLjIzOTIsIDAuNDY5NiwgMC4wOTEyKTtcXG5cXG52b2lkIG1haW4odm9pZClcXG57XFxuICAgZ2xfRnJhZ0NvbG9yID0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2VGV4dHVyZUNvb3JkKTtcXG4gICBnbF9GcmFnQ29sb3IucmdiID0gbWl4KCBnbF9GcmFnQ29sb3IucmdiLCBnbF9GcmFnQ29sb3IucmdiICogc2VwaWFNYXRyaXgsIHNlcGlhKTtcXG59XFxuXCIsXG4gICAgICAgIC8vIGN1c3RvbSB1bmlmb3Jtc1xuICAgICAgICB7XG4gICAgICAgICAgICBzZXBpYTogeyB0eXBlOiAnMWYnLCB2YWx1ZTogMSB9XG4gICAgICAgIH1cbiAgICApO1xufVxuXG5TZXBpYUZpbHRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuQWJzdHJhY3RGaWx0ZXIucHJvdG90eXBlKTtcblNlcGlhRmlsdGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFNlcGlhRmlsdGVyO1xubW9kdWxlLmV4cG9ydHMgPSBTZXBpYUZpbHRlcjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoU2VwaWFGaWx0ZXIucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogVGhlIHN0cmVuZ3RoIG9mIHRoZSBzZXBpYS4gYDFgIHdpbGwgYXBwbHkgdGhlIGZ1bGwgc2VwaWEgZWZmZWN0LCBhbmRcbiAgICAgKiBgMGAgd2lsbCBtYWtlIHRoZSBvYmplY3QgaXRzIG5vcm1hbCBjb2xvci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLlNlcGlhRmlsdGVyI1xuICAgICAqL1xuICAgIHNlcGlhOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudW5pZm9ybXMuc2VwaWEudmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLnNlcGlhLnZhbHVlID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG59KTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vLi4vY29yZScpO1xuLy8gQHNlZSBodHRwczovL2dpdGh1Yi5jb20vc3Vic3RhY2svYnJmcy9pc3N1ZXMvMjVcblxuXG4vKipcbiAqIFRoZSBDb2xvck1hdHJpeEZpbHRlciBjbGFzcyBsZXRzIHlvdSBhcHBseSBhIDR4NCBtYXRyaXggdHJhbnNmb3JtYXRpb24gb24gdGhlIFJHQkFcbiAqIGNvbG9yIGFuZCBhbHBoYSB2YWx1ZXMgb2YgZXZlcnkgcGl4ZWwgb24geW91ciBkaXNwbGF5T2JqZWN0IHRvIHByb2R1Y2UgYSByZXN1bHRcbiAqIHdpdGggYSBuZXcgc2V0IG9mIFJHQkEgY29sb3IgYW5kIGFscGhhIHZhbHVlcy4gSXQncyBwcmV0dHkgcG93ZXJmdWwhXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLkFic3RyYWN0RmlsdGVyXG4gKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzXG4gKi9cbmZ1bmN0aW9uIFNob2Nrd2F2ZUZpbHRlcigpXG57XG4gICAgY29yZS5BYnN0cmFjdEZpbHRlci5jYWxsKHRoaXMsXG4gICAgICAgIC8vIHZlcnRleCBzaGFkZXJcbiAgICAgICAgbnVsbCxcbiAgICAgICAgLy8gZnJhZ21lbnQgc2hhZGVyXG4gICAgICAgIFwicHJlY2lzaW9uIGxvd3AgZmxvYXQ7XFxuXFxudmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7XFxuXFxudW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXI7XFxuXFxudW5pZm9ybSB2ZWMyIGNlbnRlcjtcXG51bmlmb3JtIHZlYzMgcGFyYW1zOyAvLyAxMC4wLCAwLjgsIDAuMVxcbnVuaWZvcm0gZmxvYXQgdGltZTtcXG5cXG52b2lkIG1haW4oKVxcbntcXG4gICAgdmVjMiB1diA9IHZUZXh0dXJlQ29vcmQ7XFxuICAgIHZlYzIgdGV4Q29vcmQgPSB1djtcXG5cXG4gICAgZmxvYXQgZGlzdCA9IGRpc3RhbmNlKHV2LCBjZW50ZXIpO1xcblxcbiAgICBpZiAoIChkaXN0IDw9ICh0aW1lICsgcGFyYW1zLnopKSAmJiAoZGlzdCA+PSAodGltZSAtIHBhcmFtcy56KSkgKVxcbiAgICB7XFxuICAgICAgICBmbG9hdCBkaWZmID0gKGRpc3QgLSB0aW1lKTtcXG4gICAgICAgIGZsb2F0IHBvd0RpZmYgPSAxLjAgLSBwb3coYWJzKGRpZmYqcGFyYW1zLngpLCBwYXJhbXMueSk7XFxuXFxuICAgICAgICBmbG9hdCBkaWZmVGltZSA9IGRpZmYgICogcG93RGlmZjtcXG4gICAgICAgIHZlYzIgZGlmZlVWID0gbm9ybWFsaXplKHV2IC0gY2VudGVyKTtcXG4gICAgICAgIHRleENvb3JkID0gdXYgKyAoZGlmZlVWICogZGlmZlRpbWUpO1xcbiAgICB9XFxuXFxuICAgIGdsX0ZyYWdDb2xvciA9IHRleHR1cmUyRCh1U2FtcGxlciwgdGV4Q29vcmQpO1xcbn1cXG5cIixcbiAgICAgICAgLy8gY3VzdG9tIHVuaWZvcm1zXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNlbnRlcjogeyB0eXBlOiAndjInLCB2YWx1ZTogeyB4OiAwLjUsIHk6IDAuNSB9IH0sXG4gICAgICAgICAgICBwYXJhbXM6IHsgdHlwZTogJ3YzJywgdmFsdWU6IHsgeDogMTAsIHk6IDAuOCwgejogMC4xIH0gfSxcbiAgICAgICAgICAgIHRpbWU6IHsgdHlwZTogJzFmJywgdmFsdWU6IDAgfVxuICAgICAgICB9XG4gICAgKTtcbn1cblxuU2hvY2t3YXZlRmlsdGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoY29yZS5BYnN0cmFjdEZpbHRlci5wcm90b3R5cGUpO1xuU2hvY2t3YXZlRmlsdGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFNob2Nrd2F2ZUZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gU2hvY2t3YXZlRmlsdGVyO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhTaG9ja3dhdmVGaWx0ZXIucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgY2VudGVyIG9mIHRoZSBzaG9ja3dhdmUgaW4gbm9ybWFsaXplZCBzY3JlZW4gY29vcmRzLiBUaGF0IGlzXG4gICAgICogKDAsMCkgaXMgdGhlIHRvcC1sZWZ0IGFuZCAoMSwxKSBpcyB0aGUgYm90dG9tIHJpZ2h0LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7b2JqZWN0PHN0cmluZywgbnVtYmVyPn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLlNob2Nrd2F2ZUZpbHRlciNcbiAgICAgKi9cbiAgICBjZW50ZXI6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy51bmlmb3Jtcy5jZW50ZXIudmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLmNlbnRlci52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfSxcbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBwYXJhbXMgb2YgdGhlIHNob2Nrd2F2ZS4gVGhlc2UgbW9kaWZ5IHRoZSBsb29rIGFuZCBiZWhhdmlvciBvZlxuICAgICAqIHRoZSBzaG9ja3dhdmUgYXMgaXQgcmlwcGxlcyBvdXQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtvYmplY3Q8c3RyaW5nLCBudW1iZXI+fVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuU2hvY2t3YXZlRmlsdGVyI1xuICAgICAqL1xuICAgIHBhcmFtczoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVuaWZvcm1zLnBhcmFtcy52YWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudW5pZm9ybXMucGFyYW1zLnZhbHVlID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9LFxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIGVsYXBzZWQgdGltZSBvZiB0aGUgc2hvY2t3YXZlLiBUaGlzIGNvbnRyb2xzIHRoZSBzcGVlZCBhdCB3aGljaFxuICAgICAqIHRoZSBzaG9ja3dhdmUgcmlwcGxlcyBvdXQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5TaG9ja3dhdmVGaWx0ZXIjXG4gICAgICovXG4gICAgdGltZToge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVuaWZvcm1zLnRpbWUudmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLnRpbWUudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi8uLi9jb3JlJyk7XG4vLyBAc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9zdWJzdGFjay9icmZzL2lzc3Vlcy8yNVxuXG5cbi8qKlxuICogQGF1dGhvciBWaWNvIEB2aWNvY290ZWFcbiAqIG9yaWdpbmFsIGZpbHRlciBodHRwczovL2dpdGh1Yi5jb20vZXZhbncvZ2xmeC5qcy9ibG9iL21hc3Rlci9zcmMvZmlsdGVycy9ibHVyL3RpbHRzaGlmdC5qcyBieSBFdmFuIFdhbGxhY2UgOiBodHRwOi8vbWFkZWJ5ZXZhbi5jb20vXG4gKi9cblxuLyoqXG4gKiBBIFRpbHRTaGlmdEF4aXNGaWx0ZXIuXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLkFic3RyYWN0RmlsdGVyXG4gKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzXG4gKi9cbmZ1bmN0aW9uIFRpbHRTaGlmdEF4aXNGaWx0ZXIoKVxue1xuICAgIGNvcmUuQWJzdHJhY3RGaWx0ZXIuY2FsbCh0aGlzLFxuICAgICAgICAvLyB2ZXJ0ZXggc2hhZGVyXG4gICAgICAgIG51bGwsXG4gICAgICAgIC8vIGZyYWdtZW50IHNoYWRlclxuICAgICAgICBcInByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xcblxcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xcblxcbnVuaWZvcm0gc2FtcGxlcjJEIHVTYW1wbGVyO1xcbnVuaWZvcm0gZmxvYXQgYmx1cjtcXG51bmlmb3JtIGZsb2F0IGdyYWRpZW50Qmx1cjtcXG51bmlmb3JtIHZlYzIgc3RhcnQ7XFxudW5pZm9ybSB2ZWMyIGVuZDtcXG51bmlmb3JtIHZlYzIgZGVsdGE7XFxudW5pZm9ybSB2ZWMyIHRleFNpemU7XFxuXFxuZmxvYXQgcmFuZG9tKHZlYzMgc2NhbGUsIGZsb2F0IHNlZWQpXFxue1xcbiAgICByZXR1cm4gZnJhY3Qoc2luKGRvdChnbF9GcmFnQ29vcmQueHl6ICsgc2VlZCwgc2NhbGUpKSAqIDQzNzU4LjU0NTMgKyBzZWVkKTtcXG59XFxuXFxudm9pZCBtYWluKHZvaWQpXFxue1xcbiAgICB2ZWM0IGNvbG9yID0gdmVjNCgwLjApO1xcbiAgICBmbG9hdCB0b3RhbCA9IDAuMDtcXG5cXG4gICAgZmxvYXQgb2Zmc2V0ID0gcmFuZG9tKHZlYzMoMTIuOTg5OCwgNzguMjMzLCAxNTEuNzE4MiksIDAuMCk7XFxuICAgIHZlYzIgbm9ybWFsID0gbm9ybWFsaXplKHZlYzIoc3RhcnQueSAtIGVuZC55LCBlbmQueCAtIHN0YXJ0LngpKTtcXG4gICAgZmxvYXQgcmFkaXVzID0gc21vb3Roc3RlcCgwLjAsIDEuMCwgYWJzKGRvdCh2VGV4dHVyZUNvb3JkICogdGV4U2l6ZSAtIHN0YXJ0LCBub3JtYWwpKSAvIGdyYWRpZW50Qmx1cikgKiBibHVyO1xcblxcbiAgICBmb3IgKGZsb2F0IHQgPSAtMzAuMDsgdCA8PSAzMC4wOyB0KyspXFxuICAgIHtcXG4gICAgICAgIGZsb2F0IHBlcmNlbnQgPSAodCArIG9mZnNldCAtIDAuNSkgLyAzMC4wO1xcbiAgICAgICAgZmxvYXQgd2VpZ2h0ID0gMS4wIC0gYWJzKHBlcmNlbnQpO1xcbiAgICAgICAgdmVjNCBzYW1wbGUgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZUZXh0dXJlQ29vcmQgKyBkZWx0YSAvIHRleFNpemUgKiBwZXJjZW50ICogcmFkaXVzKTtcXG4gICAgICAgIHNhbXBsZS5yZ2IgKj0gc2FtcGxlLmE7XFxuICAgICAgICBjb2xvciArPSBzYW1wbGUgKiB3ZWlnaHQ7XFxuICAgICAgICB0b3RhbCArPSB3ZWlnaHQ7XFxuICAgIH1cXG5cXG4gICAgZ2xfRnJhZ0NvbG9yID0gY29sb3IgLyB0b3RhbDtcXG4gICAgZ2xfRnJhZ0NvbG9yLnJnYiAvPSBnbF9GcmFnQ29sb3IuYSArIDAuMDAwMDE7XFxufVxcblwiLFxuICAgICAgICAvLyBjdXN0b20gdW5pZm9ybXNcbiAgICAgICAge1xuICAgICAgICAgICAgYmx1cjogICAgICAgICAgIHsgdHlwZTogJzFmJywgdmFsdWU6IDEwMCB9LFxuICAgICAgICAgICAgZ3JhZGllbnRCbHVyOiAgIHsgdHlwZTogJzFmJywgdmFsdWU6IDYwMCB9LFxuICAgICAgICAgICAgc3RhcnQ6ICAgICAgICAgIHsgdHlwZTogJ3YyJywgdmFsdWU6IHsgeDogMCwgICAgeTogd2luZG93LmlubmVySGVpZ2h0IC8gMiB9IH0sXG4gICAgICAgICAgICBlbmQ6ICAgICAgICAgICAgeyB0eXBlOiAndjInLCB2YWx1ZTogeyB4OiA2MDAsICB5OiB3aW5kb3cuaW5uZXJIZWlnaHQgLyAyIH0gfSxcbiAgICAgICAgICAgIGRlbHRhOiAgICAgICAgICB7IHR5cGU6ICd2MicsIHZhbHVlOiB7IHg6IDMwLCAgIHk6IDMwIH0gfSxcbiAgICAgICAgICAgIHRleFNpemU6ICAgICAgICB7IHR5cGU6ICd2MicsIHZhbHVlOiB7IHg6IHdpbmRvdy5pbm5lcldpZHRoLCB5OiB3aW5kb3cuaW5uZXJIZWlnaHQgfSB9XG4gICAgICAgIH1cbiAgICApO1xuXG4gICAgdGhpcy51cGRhdGVEZWx0YSgpO1xufVxuXG5UaWx0U2hpZnRBeGlzRmlsdGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoY29yZS5BYnN0cmFjdEZpbHRlci5wcm90b3R5cGUpO1xuVGlsdFNoaWZ0QXhpc0ZpbHRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBUaWx0U2hpZnRBeGlzRmlsdGVyO1xubW9kdWxlLmV4cG9ydHMgPSBUaWx0U2hpZnRBeGlzRmlsdGVyO1xuXG4vKipcbiAqIFVwZGF0ZXMgdGhlIGZpbHRlciBkZWx0YSB2YWx1ZXMuXG4gKiBUaGlzIGlzIG92ZXJyaWRkZW4gaW4gdGhlIFggYW5kIFkgZmlsdGVycywgZG9lcyBub3RoaW5nIGZvciB0aGlzIGNsYXNzLlxuICpcbiAqL1xuVGlsdFNoaWZ0QXhpc0ZpbHRlci5wcm90b3R5cGUudXBkYXRlRGVsdGEgPSBmdW5jdGlvbiAoKVxue1xuICAgIHRoaXMudW5pZm9ybXMuZGVsdGEudmFsdWUueCA9IDA7XG4gICAgdGhpcy51bmlmb3Jtcy5kZWx0YS52YWx1ZS55ID0gMDtcbn07XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKFRpbHRTaGlmdEF4aXNGaWx0ZXIucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogVGhlIHN0cmVuZ3RoIG9mIHRoZSBibHVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuVGlsdFNoaWZ0QXhpc0ZpbHRlciNcbiAgICAgKi9cbiAgICBibHVyOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudW5pZm9ybXMuYmx1ci52YWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudW5pZm9ybXMuYmx1ci52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFRoZSBzdHJlbmd0aCBvZiB0aGUgZ3JhZGllbnQgYmx1ci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLlRpbHRTaGlmdEF4aXNGaWx0ZXIjXG4gICAgICovXG4gICAgZ3JhZGllbnRCbHVyOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudW5pZm9ybXMuZ3JhZGllbnRCbHVyLnZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy5ncmFkaWVudEJsdXIudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBUaGUgWCB2YWx1ZSB0byBzdGFydCB0aGUgZWZmZWN0IGF0LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5Qb2ludH1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLlRpbHRTaGlmdEF4aXNGaWx0ZXIjXG4gICAgICovXG4gICAgc3RhcnQ6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy51bmlmb3Jtcy5zdGFydC52YWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudW5pZm9ybXMuc3RhcnQudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlRGVsdGEoKTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBUaGUgWCB2YWx1ZSB0byBlbmQgdGhlIGVmZmVjdCBhdC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuUG9pbnR9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5UaWx0U2hpZnRBeGlzRmlsdGVyI1xuICAgICAqL1xuICAgIGVuZDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVuaWZvcm1zLmVuZC52YWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudW5pZm9ybXMuZW5kLnZhbHVlID0gdmFsdWU7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZURlbHRhKCk7XG4gICAgICAgIH1cbiAgICB9XG59KTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vLi4vY29yZScpLFxuICAgIFRpbHRTaGlmdFhGaWx0ZXIgPSByZXF1aXJlKCcuL1RpbHRTaGlmdFhGaWx0ZXInKSxcbiAgICBUaWx0U2hpZnRZRmlsdGVyID0gcmVxdWlyZSgnLi9UaWx0U2hpZnRZRmlsdGVyJyk7XG5cbi8qKlxuICogQGF1dGhvciBWaWNvIEB2aWNvY290ZWFcbiAqIG9yaWdpbmFsIGZpbHRlciBodHRwczovL2dpdGh1Yi5jb20vZXZhbncvZ2xmeC5qcy9ibG9iL21hc3Rlci9zcmMvZmlsdGVycy9ibHVyL3RpbHRzaGlmdC5qcyBieSBFdmFuIFdhbGxhY2UgOiBodHRwOi8vbWFkZWJ5ZXZhbi5jb20vXG4gKi9cblxuLyoqXG4gKiBBIFRpbHRTaGlmdCBGaWx0ZXIuIE1hbmFnZXMgdGhlIHBhc3Mgb2YgYm90aCBhIFRpbHRTaGlmdFhGaWx0ZXIgYW5kIFRpbHRTaGlmdFlGaWx0ZXIuXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLkFic3RyYWN0RmlsdGVyXG4gKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzXG4gKi9cbmZ1bmN0aW9uIFRpbHRTaGlmdEZpbHRlcigpXG57XG4gICAgY29yZS5BYnN0cmFjdEZpbHRlci5jYWxsKHRoaXMpO1xuXG4gICAgdGhpcy50aWx0U2hpZnRYRmlsdGVyID0gbmV3IFRpbHRTaGlmdFhGaWx0ZXIoKTtcbiAgICB0aGlzLnRpbHRTaGlmdFlGaWx0ZXIgPSBuZXcgVGlsdFNoaWZ0WUZpbHRlcigpO1xufVxuXG5UaWx0U2hpZnRGaWx0ZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShjb3JlLkFic3RyYWN0RmlsdGVyLnByb3RvdHlwZSk7XG5UaWx0U2hpZnRGaWx0ZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gVGlsdFNoaWZ0RmlsdGVyO1xubW9kdWxlLmV4cG9ydHMgPSBUaWx0U2hpZnRGaWx0ZXI7XG5cblRpbHRTaGlmdEZpbHRlci5wcm90b3R5cGUuYXBwbHlGaWx0ZXIgPSBmdW5jdGlvbiAocmVuZGVyZXIsIGlucHV0LCBvdXRwdXQpXG57XG4gICAgdmFyIHJlbmRlclRhcmdldCA9IHJlbmRlcmVyLmZpbHRlck1hbmFnZXIuZ2V0UmVuZGVyVGFyZ2V0KHRydWUpO1xuXG4gICAgdGhpcy50aWx0U2hpZnRYRmlsdGVyLmFwcGx5RmlsdGVyKHJlbmRlcmVyLCBpbnB1dCwgcmVuZGVyVGFyZ2V0KTtcblxuICAgIHRoaXMudGlsdFNoaWZ0WUZpbHRlci5hcHBseUZpbHRlcihyZW5kZXJlciwgcmVuZGVyVGFyZ2V0LCBvdXRwdXQpO1xuXG4gICAgcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5yZXR1cm5SZW5kZXJUYXJnZXQocmVuZGVyVGFyZ2V0KTtcbn07XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKFRpbHRTaGlmdEZpbHRlci5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBUaGUgc3RyZW5ndGggb2YgdGhlIGJsdXIuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5UaWx0U2hpZnRGaWx0ZXIjXG4gICAgICovXG4gICAgYmx1cjoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnRpbHRTaGlmdFhGaWx0ZXIuYmx1cjtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudGlsdFNoaWZ0WEZpbHRlci5ibHVyID0gdGhpcy50aWx0U2hpZnRZRmlsdGVyLmJsdXIgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBUaGUgc3RyZW5ndGggb2YgdGhlIGdyYWRpZW50IGJsdXIuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5UaWx0U2hpZnRGaWx0ZXIjXG4gICAgICovXG4gICAgZ3JhZGllbnRCbHVyOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudGlsdFNoaWZ0WEZpbHRlci5ncmFkaWVudEJsdXI7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnRpbHRTaGlmdFhGaWx0ZXIuZ3JhZGllbnRCbHVyID0gdGhpcy50aWx0U2hpZnRZRmlsdGVyLmdyYWRpZW50Qmx1ciA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFRoZSBZIHZhbHVlIHRvIHN0YXJ0IHRoZSBlZmZlY3QgYXQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5UaWx0U2hpZnRGaWx0ZXIjXG4gICAgICovXG4gICAgc3RhcnQ6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy50aWx0U2hpZnRYRmlsdGVyLnN0YXJ0O1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy50aWx0U2hpZnRYRmlsdGVyLnN0YXJ0ID0gdGhpcy50aWx0U2hpZnRZRmlsdGVyLnN0YXJ0ID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVGhlIFkgdmFsdWUgdG8gZW5kIHRoZSBlZmZlY3QgYXQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5UaWx0U2hpZnRGaWx0ZXIjXG4gICAgICovXG4gICAgZW5kOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudGlsdFNoaWZ0WEZpbHRlci5lbmQ7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnRpbHRTaGlmdFhGaWx0ZXIuZW5kID0gdGhpcy50aWx0U2hpZnRZRmlsdGVyLmVuZCA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfVxufSk7XG4iLCJ2YXIgVGlsdFNoaWZ0QXhpc0ZpbHRlciA9IHJlcXVpcmUoJy4vVGlsdFNoaWZ0QXhpc0ZpbHRlcicpO1xuXG4vKipcbiAqIEBhdXRob3IgVmljbyBAdmljb2NvdGVhXG4gKiBvcmlnaW5hbCBmaWx0ZXIgaHR0cHM6Ly9naXRodWIuY29tL2V2YW53L2dsZnguanMvYmxvYi9tYXN0ZXIvc3JjL2ZpbHRlcnMvYmx1ci90aWx0c2hpZnQuanMgYnkgRXZhbiBXYWxsYWNlIDogaHR0cDovL21hZGVieWV2YW4uY29tL1xuICovXG5cbi8qKlxuICogQSBUaWx0U2hpZnRYRmlsdGVyLlxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5UaWx0U2hpZnRBeGlzRmlsdGVyXG4gKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzXG4gKi9cbmZ1bmN0aW9uIFRpbHRTaGlmdFhGaWx0ZXIoKVxue1xuICAgIFRpbHRTaGlmdEF4aXNGaWx0ZXIuY2FsbCh0aGlzKTtcbn1cblxuVGlsdFNoaWZ0WEZpbHRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFRpbHRTaGlmdEF4aXNGaWx0ZXIucHJvdG90eXBlKTtcblRpbHRTaGlmdFhGaWx0ZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gVGlsdFNoaWZ0WEZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gVGlsdFNoaWZ0WEZpbHRlcjtcblxuLyoqXG4gKiBVcGRhdGVzIHRoZSBmaWx0ZXIgZGVsdGEgdmFsdWVzLlxuICpcbiAqL1xuVGlsdFNoaWZ0WEZpbHRlci5wcm90b3R5cGUudXBkYXRlRGVsdGEgPSBmdW5jdGlvbiAoKVxue1xuICAgIHZhciBkeCA9IHRoaXMudW5pZm9ybXMuZW5kLnZhbHVlLnggLSB0aGlzLnVuaWZvcm1zLnN0YXJ0LnZhbHVlLng7XG4gICAgdmFyIGR5ID0gdGhpcy51bmlmb3Jtcy5lbmQudmFsdWUueSAtIHRoaXMudW5pZm9ybXMuc3RhcnQudmFsdWUueTtcbiAgICB2YXIgZCA9IE1hdGguc3FydChkeCAqIGR4ICsgZHkgKiBkeSk7XG5cbiAgICB0aGlzLnVuaWZvcm1zLmRlbHRhLnZhbHVlLnggPSBkeCAvIGQ7XG4gICAgdGhpcy51bmlmb3Jtcy5kZWx0YS52YWx1ZS55ID0gZHkgLyBkO1xufTtcbiIsInZhciBUaWx0U2hpZnRBeGlzRmlsdGVyID0gcmVxdWlyZSgnLi9UaWx0U2hpZnRBeGlzRmlsdGVyJyk7XG5cbi8qKlxuICogQGF1dGhvciBWaWNvIEB2aWNvY290ZWFcbiAqIG9yaWdpbmFsIGZpbHRlciBodHRwczovL2dpdGh1Yi5jb20vZXZhbncvZ2xmeC5qcy9ibG9iL21hc3Rlci9zcmMvZmlsdGVycy9ibHVyL3RpbHRzaGlmdC5qcyBieSBFdmFuIFdhbGxhY2UgOiBodHRwOi8vbWFkZWJ5ZXZhbi5jb20vXG4gKi9cblxuLyoqXG4gKiBBIFRpbHRTaGlmdFlGaWx0ZXIuXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLlRpbHRTaGlmdEF4aXNGaWx0ZXJcbiAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnNcbiAqL1xuZnVuY3Rpb24gVGlsdFNoaWZ0WUZpbHRlcigpXG57XG4gICAgVGlsdFNoaWZ0QXhpc0ZpbHRlci5jYWxsKHRoaXMpO1xufVxuXG5UaWx0U2hpZnRZRmlsdGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoVGlsdFNoaWZ0QXhpc0ZpbHRlci5wcm90b3R5cGUpO1xuVGlsdFNoaWZ0WUZpbHRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBUaWx0U2hpZnRZRmlsdGVyO1xubW9kdWxlLmV4cG9ydHMgPSBUaWx0U2hpZnRZRmlsdGVyO1xuXG4vKipcbiAqIFVwZGF0ZXMgdGhlIGZpbHRlciBkZWx0YSB2YWx1ZXMuXG4gKlxuICovXG5UaWx0U2hpZnRZRmlsdGVyLnByb3RvdHlwZS51cGRhdGVEZWx0YSA9IGZ1bmN0aW9uICgpXG57XG4gICAgdmFyIGR4ID0gdGhpcy51bmlmb3Jtcy5lbmQudmFsdWUueCAtIHRoaXMudW5pZm9ybXMuc3RhcnQudmFsdWUueDtcbiAgICB2YXIgZHkgPSB0aGlzLnVuaWZvcm1zLmVuZC52YWx1ZS55IC0gdGhpcy51bmlmb3Jtcy5zdGFydC52YWx1ZS55O1xuICAgIHZhciBkID0gTWF0aC5zcXJ0KGR4ICogZHggKyBkeSAqIGR5KTtcblxuICAgIHRoaXMudW5pZm9ybXMuZGVsdGEudmFsdWUueCA9IC1keSAvIGQ7XG4gICAgdGhpcy51bmlmb3Jtcy5kZWx0YS52YWx1ZS55ID0gZHggLyBkO1xufTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vLi4vY29yZScpO1xuLy8gQHNlZSBodHRwczovL2dpdGh1Yi5jb20vc3Vic3RhY2svYnJmcy9pc3N1ZXMvMjVcblxuXG4vKipcbiAqIFRoaXMgZmlsdGVyIGFwcGxpZXMgYSB0d2lzdCBlZmZlY3QgbWFraW5nIGRpc3BsYXkgb2JqZWN0cyBhcHBlYXIgdHdpc3RlZCBpbiB0aGUgZ2l2ZW4gZGlyZWN0aW9uLlxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5BYnN0cmFjdEZpbHRlclxuICogQG1lbWJlcm9mIFBJWEkuZmlsdGVyc1xuICovXG5mdW5jdGlvbiBUd2lzdEZpbHRlcigpXG57XG4gICAgY29yZS5BYnN0cmFjdEZpbHRlci5jYWxsKHRoaXMsXG4gICAgICAgIC8vIHZlcnRleCBzaGFkZXJcbiAgICAgICAgbnVsbCxcbiAgICAgICAgLy8gZnJhZ21lbnQgc2hhZGVyXG4gICAgICAgIFwicHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XFxuXFxudmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7XFxuXFxudW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXI7XFxudW5pZm9ybSBmbG9hdCByYWRpdXM7XFxudW5pZm9ybSBmbG9hdCBhbmdsZTtcXG51bmlmb3JtIHZlYzIgb2Zmc2V0O1xcblxcbnZvaWQgbWFpbih2b2lkKVxcbntcXG4gICB2ZWMyIGNvb3JkID0gdlRleHR1cmVDb29yZCAtIG9mZnNldDtcXG4gICBmbG9hdCBkaXN0ID0gbGVuZ3RoKGNvb3JkKTtcXG5cXG4gICBpZiAoZGlzdCA8IHJhZGl1cylcXG4gICB7XFxuICAgICAgIGZsb2F0IHJhdGlvID0gKHJhZGl1cyAtIGRpc3QpIC8gcmFkaXVzO1xcbiAgICAgICBmbG9hdCBhbmdsZU1vZCA9IHJhdGlvICogcmF0aW8gKiBhbmdsZTtcXG4gICAgICAgZmxvYXQgcyA9IHNpbihhbmdsZU1vZCk7XFxuICAgICAgIGZsb2F0IGMgPSBjb3MoYW5nbGVNb2QpO1xcbiAgICAgICBjb29yZCA9IHZlYzIoY29vcmQueCAqIGMgLSBjb29yZC55ICogcywgY29vcmQueCAqIHMgKyBjb29yZC55ICogYyk7XFxuICAgfVxcblxcbiAgIGdsX0ZyYWdDb2xvciA9IHRleHR1cmUyRCh1U2FtcGxlciwgY29vcmQrb2Zmc2V0KTtcXG59XFxuXCIsXG4gICAgICAgIC8vIGN1c3RvbSB1bmlmb3Jtc1xuICAgICAgICB7XG4gICAgICAgICAgICByYWRpdXM6ICAgICB7IHR5cGU6ICcxZicsIHZhbHVlOiAwLjUgfSxcbiAgICAgICAgICAgIGFuZ2xlOiAgICAgIHsgdHlwZTogJzFmJywgdmFsdWU6IDUgfSxcbiAgICAgICAgICAgIG9mZnNldDogICAgIHsgdHlwZTogJ3YyJywgdmFsdWU6IHsgeDogMC41LCB5OiAwLjUgfSB9XG4gICAgICAgIH1cbiAgICApO1xufVxuXG5Ud2lzdEZpbHRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuQWJzdHJhY3RGaWx0ZXIucHJvdG90eXBlKTtcblR3aXN0RmlsdGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFR3aXN0RmlsdGVyO1xubW9kdWxlLmV4cG9ydHMgPSBUd2lzdEZpbHRlcjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoVHdpc3RGaWx0ZXIucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogVGhpcyBwb2ludCBkZXNjcmliZXMgdGhlIHRoZSBvZmZzZXQgb2YgdGhlIHR3aXN0LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5Qb2ludH1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLlR3aXN0RmlsdGVyI1xuICAgICAqL1xuICAgIG9mZnNldDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVuaWZvcm1zLm9mZnNldC52YWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudW5pZm9ybXMub2Zmc2V0LnZhbHVlID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVGhpcyByYWRpdXMgb2YgdGhlIHR3aXN0LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuVHdpc3RGaWx0ZXIjXG4gICAgICovXG4gICAgcmFkaXVzOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudW5pZm9ybXMucmFkaXVzLnZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy5yYWRpdXMudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBUaGlzIGFuZ2xlIG9mIHRoZSB0d2lzdC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLlR3aXN0RmlsdGVyI1xuICAgICAqL1xuICAgIGFuZ2xlOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudW5pZm9ybXMuYW5nbGUudmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLmFuZ2xlLnZhbHVlID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG59KTtcbiIsIi8vIHJ1biB0aGUgcG9seWZpbGxzXG5yZXF1aXJlKCcuL3BvbHlmaWxsJyk7XG5cbnZhciBjb3JlID0gbW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL2NvcmUnKTtcblxuLy8gYWRkIGNvcmUgcGx1Z2lucy5cbmNvcmUuZXh0cmFzICAgICAgICAgPSByZXF1aXJlKCcuL2V4dHJhcycpO1xuY29yZS5maWx0ZXJzICAgICAgICA9IHJlcXVpcmUoJy4vZmlsdGVycycpO1xuY29yZS5pbnRlcmFjdGlvbiAgICA9IHJlcXVpcmUoJy4vaW50ZXJhY3Rpb24nKTtcbmNvcmUubG9hZGVycyAgICAgICAgPSByZXF1aXJlKCcuL2xvYWRlcnMnKTtcbmNvcmUubWVzaCAgICAgICAgICAgPSByZXF1aXJlKCcuL21lc2gnKTtcbmNvcmUuYWNjZXNzaWJpbGl0eSAgPSByZXF1aXJlKCcuL2FjY2Vzc2liaWxpdHknKTtcblxuLy8gZXhwb3J0IGEgcHJlbWFkZSBsb2FkZXIgaW5zdGFuY2Vcbi8qKlxuICogQSBwcmVtYWRlIGluc3RhbmNlIG9mIHRoZSBsb2FkZXIgdGhhdCBjYW4gYmUgdXNlZCB0byBsb2FkZXIgcmVzb3VyY2VzLlxuICpcbiAqIEBuYW1lIGxvYWRlclxuICogQG1lbWJlcm9mIFBJWElcbiAqIEBwcm9wZXJ0eSB7UElYSS5sb2FkZXJzLkxvYWRlcn1cbiAqL1xuY29yZS5sb2FkZXIgPSBuZXcgY29yZS5sb2FkZXJzLkxvYWRlcigpO1xuXG4vLyBtaXhpbiB0aGUgZGVwcmVjYXRpb24gZmVhdHVyZXMuXG5PYmplY3QuYXNzaWduKGNvcmUsIHJlcXVpcmUoJy4vZGVwcmVjYXRpb24nKSk7XG5cbi8vIEFsd2F5cyBleHBvcnQgcGl4aSBnbG9iYWxseS5cbmdsb2JhbC5QSVhJID0gY29yZTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vY29yZScpO1xuXG4vKipcbiAqIEhvbGRzIGFsbCBpbmZvcm1hdGlvbiByZWxhdGVkIHRvIGFuIEludGVyYWN0aW9uIGV2ZW50XG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSS5pbnRlcmFjdGlvblxuICovXG5mdW5jdGlvbiBJbnRlcmFjdGlvbkRhdGEoKVxue1xuICAgIC8qKlxuICAgICAqIFRoaXMgcG9pbnQgc3RvcmVzIHRoZSBnbG9iYWwgY29vcmRzIG9mIHdoZXJlIHRoZSB0b3VjaC9tb3VzZSBldmVudCBoYXBwZW5lZFxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5Qb2ludH1cbiAgICAgKi9cbiAgICB0aGlzLmdsb2JhbCA9IG5ldyBjb3JlLlBvaW50KCk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgdGFyZ2V0IFNwcml0ZSB0aGF0IHdhcyBpbnRlcmFjdGVkIHdpdGhcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuU3ByaXRlfVxuICAgICAqL1xuICAgIHRoaXMudGFyZ2V0ID0gbnVsbDtcblxuICAgIC8qKlxuICAgICAqIFdoZW4gcGFzc2VkIHRvIGFuIGV2ZW50IGhhbmRsZXIsIHRoaXMgd2lsbCBiZSB0aGUgb3JpZ2luYWwgRE9NIEV2ZW50IHRoYXQgd2FzIGNhcHR1cmVkXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtFdmVudH1cbiAgICAgKi9cbiAgICB0aGlzLm9yaWdpbmFsRXZlbnQgPSBudWxsO1xufVxuXG5JbnRlcmFjdGlvbkRhdGEucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gSW50ZXJhY3Rpb25EYXRhO1xubW9kdWxlLmV4cG9ydHMgPSBJbnRlcmFjdGlvbkRhdGE7XG5cbi8qKlxuICogVGhpcyB3aWxsIHJldHVybiB0aGUgbG9jYWwgY29vcmRpbmF0ZXMgb2YgdGhlIHNwZWNpZmllZCBkaXNwbGF5T2JqZWN0IGZvciB0aGlzIEludGVyYWN0aW9uRGF0YVxuICpcbiAqIEBwYXJhbSBkaXNwbGF5T2JqZWN0IHtQSVhJLkRpc3BsYXlPYmplY3R9IFRoZSBEaXNwbGF5T2JqZWN0IHRoYXQgeW91IHdvdWxkIGxpa2UgdGhlIGxvY2FsIGNvb3JkcyBvZmZcbiAqIEBwYXJhbSBbcG9pbnRdIHtQSVhJLlBvaW50fSBBIFBvaW50IG9iamVjdCBpbiB3aGljaCB0byBzdG9yZSB0aGUgdmFsdWUsIG9wdGlvbmFsIChvdGhlcndpc2Ugd2lsbCBjcmVhdGUgYSBuZXcgcG9pbnQpXG4gKiBAcGFyYW0gW2dsb2JhbFBvc10ge1BJWEkuUG9pbnR9IEEgUG9pbnQgb2JqZWN0IGNvbnRhaW5pbmcgeW91ciBjdXN0b20gZ2xvYmFsIGNvb3Jkcywgb3B0aW9uYWwgKG90aGVyd2lzZSB3aWxsIHVzZSB0aGUgY3VycmVudCBnbG9iYWwgY29vcmRzKVxuICogQHJldHVybiB7UElYSS5Qb2ludH0gQSBwb2ludCBjb250YWluaW5nIHRoZSBjb29yZGluYXRlcyBvZiB0aGUgSW50ZXJhY3Rpb25EYXRhIHBvc2l0aW9uIHJlbGF0aXZlIHRvIHRoZSBEaXNwbGF5T2JqZWN0XG4gKi9cbkludGVyYWN0aW9uRGF0YS5wcm90b3R5cGUuZ2V0TG9jYWxQb3NpdGlvbiA9IGZ1bmN0aW9uIChkaXNwbGF5T2JqZWN0LCBwb2ludCwgZ2xvYmFsUG9zKVxue1xuICAgIHJldHVybiBkaXNwbGF5T2JqZWN0LndvcmxkVHJhbnNmb3JtLmFwcGx5SW52ZXJzZShnbG9iYWxQb3MgfHwgdGhpcy5nbG9iYWwsIHBvaW50KTtcbn07XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uL2NvcmUnKSxcbiAgICBJbnRlcmFjdGlvbkRhdGEgPSByZXF1aXJlKCcuL0ludGVyYWN0aW9uRGF0YScpO1xuXG4vLyBNaXggaW50ZXJhY3RpdmVUYXJnZXQgaW50byBjb3JlLkRpc3BsYXlPYmplY3QucHJvdG90eXBlXG5PYmplY3QuYXNzaWduKFxuICAgIGNvcmUuRGlzcGxheU9iamVjdC5wcm90b3R5cGUsXG4gICAgcmVxdWlyZSgnLi9pbnRlcmFjdGl2ZVRhcmdldCcpXG4pO1xuXG4vKipcbiAqIFRoZSBpbnRlcmFjdGlvbiBtYW5hZ2VyIGRlYWxzIHdpdGggbW91c2UgYW5kIHRvdWNoIGV2ZW50cy4gQW55IERpc3BsYXlPYmplY3QgY2FuIGJlIGludGVyYWN0aXZlXG4gKiBpZiBpdHMgaW50ZXJhY3RpdmUgcGFyYW1ldGVyIGlzIHNldCB0byB0cnVlXG4gKiBUaGlzIG1hbmFnZXIgYWxzbyBzdXBwb3J0cyBtdWx0aXRvdWNoLlxuICpcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWEkuaW50ZXJhY3Rpb25cbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5DYW52YXNSZW5kZXJlcnxQSVhJLldlYkdMUmVuZGVyZXJ9IEEgcmVmZXJlbmNlIHRvIHRoZSBjdXJyZW50IHJlbmRlcmVyXG4gKiBAcGFyYW0gW29wdGlvbnNdIHtvYmplY3R9XG4gKiBAcGFyYW0gW29wdGlvbnMuYXV0b1ByZXZlbnREZWZhdWx0PXRydWVdIHtib29sZWFufSBTaG91bGQgdGhlIG1hbmFnZXIgYXV0b21hdGljYWxseSBwcmV2ZW50IGRlZmF1bHQgYnJvd3NlciBhY3Rpb25zLlxuICogQHBhcmFtIFtvcHRpb25zLmludGVyYWN0aW9uRnJlcXVlbmN5PTEwXSB7bnVtYmVyfSBGcmVxdWVuY3kgaW5jcmVhc2VzIHRoZSBpbnRlcmFjdGlvbiBldmVudHMgd2lsbCBiZSBjaGVja2VkLlxuICovXG5mdW5jdGlvbiBJbnRlcmFjdGlvbk1hbmFnZXIocmVuZGVyZXIsIG9wdGlvbnMpXG57XG4gICAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG5cbiAgICAvKipcbiAgICAgKiBUaGUgcmVuZGVyZXIgdGhpcyBpbnRlcmFjdGlvbiBtYW5hZ2VyIHdvcmtzIGZvci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuU3lzdGVtUmVuZGVyZXJ9XG4gICAgICovXG4gICAgdGhpcy5yZW5kZXJlciA9IHJlbmRlcmVyO1xuXG4gICAgLyoqXG4gICAgICogU2hvdWxkIGRlZmF1bHQgYnJvd3NlciBhY3Rpb25zIGF1dG9tYXRpY2FsbHkgYmUgcHJldmVudGVkLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKiBAZGVmYXVsdCB0cnVlXG4gICAgICovXG4gICAgdGhpcy5hdXRvUHJldmVudERlZmF1bHQgPSBvcHRpb25zLmF1dG9QcmV2ZW50RGVmYXVsdCAhPT0gdW5kZWZpbmVkID8gb3B0aW9ucy5hdXRvUHJldmVudERlZmF1bHQgOiB0cnVlO1xuXG4gICAgLyoqXG4gICAgICogQXMgdGhpcyBmcmVxdWVuY3kgaW5jcmVhc2VzIHRoZSBpbnRlcmFjdGlvbiBldmVudHMgd2lsbCBiZSBjaGVja2VkIG1vcmUgb2Z0ZW4uXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMTBcbiAgICAgKi9cbiAgICB0aGlzLmludGVyYWN0aW9uRnJlcXVlbmN5ID0gb3B0aW9ucy5pbnRlcmFjdGlvbkZyZXF1ZW5jeSB8fCAxMDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBtb3VzZSBkYXRhXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLmludGVyYWN0aW9uLkludGVyYWN0aW9uRGF0YX1cbiAgICAgKi9cbiAgICB0aGlzLm1vdXNlID0gbmV3IEludGVyYWN0aW9uRGF0YSgpO1xuXG4gICAgLyoqXG4gICAgICogQW4gZXZlbnQgZGF0YSBvYmplY3QgdG8gaGFuZGxlIGFsbCB0aGUgZXZlbnQgdHJhY2tpbmcvZGlzcGF0Y2hpbmdcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge29iamVjdH1cbiAgICAgKi9cbiAgICB0aGlzLmV2ZW50RGF0YSA9IHtcbiAgICAgICAgc3RvcHBlZDogZmFsc2UsXG4gICAgICAgIHRhcmdldDogbnVsbCxcbiAgICAgICAgdHlwZTogbnVsbCxcbiAgICAgICAgZGF0YTogdGhpcy5tb3VzZSxcbiAgICAgICAgc3RvcFByb3BhZ2F0aW9uOmZ1bmN0aW9uKCl7XG4gICAgICAgICAgICB0aGlzLnN0b3BwZWQgPSB0cnVlO1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIC8qKlxuICAgICAqIFRpbnkgbGl0dGxlIGludGVyYWN0aXZlRGF0YSBwb29sICFcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuaW50ZXJhY3Rpb24uSW50ZXJhY3Rpb25EYXRhW119XG4gICAgICovXG4gICAgdGhpcy5pbnRlcmFjdGl2ZURhdGFQb29sID0gW107XG5cbiAgICAvKipcbiAgICAgKiBUaGUgRE9NIGVsZW1lbnQgdG8gYmluZCB0by5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge0hUTUxFbGVtZW50fVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5pbnRlcmFjdGlvbkRPTUVsZW1lbnQgPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogSGF2ZSBldmVudHMgYmVlbiBhdHRhY2hlZCB0byB0aGUgZG9tIGVsZW1lbnQ/XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5ldmVudHNBZGRlZCA9IGZhbHNlO1xuXG4gICAgLy90aGlzIHdpbGwgbWFrZSBpdCBzbyB0aGF0IHlvdSBkb24ndCBoYXZlIHRvIGNhbGwgYmluZCBhbGwgdGhlIHRpbWVcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge0Z1bmN0aW9ufVxuICAgICAqL1xuICAgIHRoaXMub25Nb3VzZVVwID0gdGhpcy5vbk1vdXNlVXAuYmluZCh0aGlzKTtcbiAgICB0aGlzLnByb2Nlc3NNb3VzZVVwID0gdGhpcy5wcm9jZXNzTW91c2VVcC5iaW5kKCB0aGlzICk7XG5cblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge0Z1bmN0aW9ufVxuICAgICAqL1xuICAgIHRoaXMub25Nb3VzZURvd24gPSB0aGlzLm9uTW91c2VEb3duLmJpbmQodGhpcyk7XG4gICAgdGhpcy5wcm9jZXNzTW91c2VEb3duID0gdGhpcy5wcm9jZXNzTW91c2VEb3duLmJpbmQoIHRoaXMgKTtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge0Z1bmN0aW9ufVxuICAgICAqL1xuICAgIHRoaXMub25Nb3VzZU1vdmUgPSB0aGlzLm9uTW91c2VNb3ZlLmJpbmQoIHRoaXMgKTtcbiAgICB0aGlzLnByb2Nlc3NNb3VzZU1vdmUgPSB0aGlzLnByb2Nlc3NNb3VzZU1vdmUuYmluZCggdGhpcyApO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7RnVuY3Rpb259XG4gICAgICovXG4gICAgdGhpcy5vbk1vdXNlT3V0ID0gdGhpcy5vbk1vdXNlT3V0LmJpbmQodGhpcyk7XG4gICAgdGhpcy5wcm9jZXNzTW91c2VPdmVyT3V0ID0gdGhpcy5wcm9jZXNzTW91c2VPdmVyT3V0LmJpbmQoIHRoaXMgKTtcblxuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7RnVuY3Rpb259XG4gICAgICovXG4gICAgdGhpcy5vblRvdWNoU3RhcnQgPSB0aGlzLm9uVG91Y2hTdGFydC5iaW5kKHRoaXMpO1xuICAgIHRoaXMucHJvY2Vzc1RvdWNoU3RhcnQgPSB0aGlzLnByb2Nlc3NUb3VjaFN0YXJ0LmJpbmQodGhpcyk7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtGdW5jdGlvbn1cbiAgICAgKi9cbiAgICB0aGlzLm9uVG91Y2hFbmQgPSB0aGlzLm9uVG91Y2hFbmQuYmluZCh0aGlzKTtcbiAgICB0aGlzLnByb2Nlc3NUb3VjaEVuZCA9IHRoaXMucHJvY2Vzc1RvdWNoRW5kLmJpbmQodGhpcyk7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtGdW5jdGlvbn1cbiAgICAgKi9cbiAgICB0aGlzLm9uVG91Y2hNb3ZlID0gdGhpcy5vblRvdWNoTW92ZS5iaW5kKHRoaXMpO1xuICAgIHRoaXMucHJvY2Vzc1RvdWNoTW92ZSA9IHRoaXMucHJvY2Vzc1RvdWNoTW92ZS5iaW5kKHRoaXMpO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMubGFzdCA9IDA7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgY3NzIHN0eWxlIG9mIHRoZSBjdXJzb3IgdGhhdCBpcyBiZWluZyB1c2VkXG4gICAgICogQG1lbWJlciB7c3RyaW5nfVxuICAgICAqL1xuICAgIHRoaXMuY3VycmVudEN1cnNvclN0eWxlID0gJ2luaGVyaXQnO1xuXG4gICAgLyoqXG4gICAgICogSW50ZXJuYWwgY2FjaGVkIHZhclxuICAgICAqIEBtZW1iZXIge1BJWEkuUG9pbnR9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl90ZW1wUG9pbnQgPSBuZXcgY29yZS5Qb2ludCgpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGN1cnJlbnQgcmVzb2x1dGlvblxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLnJlc29sdXRpb24gPSAxO1xuXG4gICAgdGhpcy5zZXRUYXJnZXRFbGVtZW50KHRoaXMucmVuZGVyZXIudmlldywgdGhpcy5yZW5kZXJlci5yZXNvbHV0aW9uKTtcbn1cblxuSW50ZXJhY3Rpb25NYW5hZ2VyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IEludGVyYWN0aW9uTWFuYWdlcjtcbm1vZHVsZS5leHBvcnRzID0gSW50ZXJhY3Rpb25NYW5hZ2VyO1xuXG4vKipcbiAqIFNldHMgdGhlIERPTSBlbGVtZW50IHdoaWNoIHdpbGwgcmVjZWl2ZSBtb3VzZS90b3VjaCBldmVudHMuIFRoaXMgaXMgdXNlZnVsIGZvciB3aGVuIHlvdSBoYXZlXG4gKiBvdGhlciBET00gZWxlbWVudHMgb24gdG9wIG9mIHRoZSByZW5kZXJlcnMgQ2FudmFzIGVsZW1lbnQuIFdpdGggdGhpcyB5b3UnbGwgYmUgYmFsZSB0byBkZWxldGVnYXRlXG4gKiBhbm90aGVyIERPTSBlbGVtZW50IHRvIHJlY2VpdmUgdGhvc2UgZXZlbnRzLlxuICpcbiAqIEBwYXJhbSBlbGVtZW50IHtIVE1MRWxlbWVudH0gdGhlIERPTSBlbGVtZW50IHdoaWNoIHdpbGwgcmVjZWl2ZSBtb3VzZSBhbmQgdG91Y2ggZXZlbnRzLlxuICogQHBhcmFtIFtyZXNvbHV0aW9uPTFdIHtudW1iZXJ9IFRIZSByZXNvbHV0aW9uIG9mIHRoZSBuZXcgZWxlbWVudCAocmVsYXRpdmUgdG8gdGhlIGNhbnZhcykuXG4gKiBAcHJpdmF0ZVxuICovXG5JbnRlcmFjdGlvbk1hbmFnZXIucHJvdG90eXBlLnNldFRhcmdldEVsZW1lbnQgPSBmdW5jdGlvbiAoZWxlbWVudCwgcmVzb2x1dGlvbilcbntcbiAgICB0aGlzLnJlbW92ZUV2ZW50cygpO1xuXG4gICAgdGhpcy5pbnRlcmFjdGlvbkRPTUVsZW1lbnQgPSBlbGVtZW50O1xuXG4gICAgdGhpcy5yZXNvbHV0aW9uID0gcmVzb2x1dGlvbiB8fCAxO1xuXG4gICAgdGhpcy5hZGRFdmVudHMoKTtcbn07XG5cbi8qKlxuICogUmVnaXN0ZXJzIGFsbCB0aGUgRE9NIGV2ZW50c1xuICpcbiAqIEBwcml2YXRlXG4gKi9cbkludGVyYWN0aW9uTWFuYWdlci5wcm90b3R5cGUuYWRkRXZlbnRzID0gZnVuY3Rpb24gKClcbntcbiAgICBpZiAoIXRoaXMuaW50ZXJhY3Rpb25ET01FbGVtZW50KVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvcmUudGlja2VyLnNoYXJlZC5hZGQodGhpcy51cGRhdGUsIHRoaXMpO1xuXG4gICAgaWYgKHdpbmRvdy5uYXZpZ2F0b3IubXNQb2ludGVyRW5hYmxlZClcbiAgICB7XG4gICAgICAgIHRoaXMuaW50ZXJhY3Rpb25ET01FbGVtZW50LnN0eWxlWyctbXMtY29udGVudC16b29taW5nJ10gPSAnbm9uZSc7XG4gICAgICAgIHRoaXMuaW50ZXJhY3Rpb25ET01FbGVtZW50LnN0eWxlWyctbXMtdG91Y2gtYWN0aW9uJ10gPSAnbm9uZSc7XG4gICAgfVxuXG4gICAgd2luZG93LmRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlbW92ZScsICAgIHRoaXMub25Nb3VzZU1vdmUsIHRydWUpO1xuICAgIHRoaXMuaW50ZXJhY3Rpb25ET01FbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlZG93bicsICAgIHRoaXMub25Nb3VzZURvd24sIHRydWUpO1xuICAgIHRoaXMuaW50ZXJhY3Rpb25ET01FbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlb3V0JywgICAgIHRoaXMub25Nb3VzZU91dCwgdHJ1ZSk7XG5cbiAgICB0aGlzLmludGVyYWN0aW9uRE9NRWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCd0b3VjaHN0YXJ0JywgICB0aGlzLm9uVG91Y2hTdGFydCwgdHJ1ZSk7XG4gICAgdGhpcy5pbnRlcmFjdGlvbkRPTUVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigndG91Y2hlbmQnLCAgICAgdGhpcy5vblRvdWNoRW5kLCB0cnVlKTtcbiAgICB0aGlzLmludGVyYWN0aW9uRE9NRWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCd0b3VjaG1vdmUnLCAgICB0aGlzLm9uVG91Y2hNb3ZlLCB0cnVlKTtcblxuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdtb3VzZXVwJywgIHRoaXMub25Nb3VzZVVwLCB0cnVlKTtcblxuICAgIHRoaXMuZXZlbnRzQWRkZWQgPSB0cnVlO1xufTtcblxuLyoqXG4gKiBSZW1vdmVzIGFsbCB0aGUgRE9NIGV2ZW50cyB0aGF0IHdlcmUgcHJldmlvdXNseSByZWdpc3RlcmVkXG4gKlxuICogQHByaXZhdGVcbiAqL1xuSW50ZXJhY3Rpb25NYW5hZ2VyLnByb3RvdHlwZS5yZW1vdmVFdmVudHMgPSBmdW5jdGlvbiAoKVxue1xuICAgIGlmICghdGhpcy5pbnRlcmFjdGlvbkRPTUVsZW1lbnQpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29yZS50aWNrZXIuc2hhcmVkLnJlbW92ZSh0aGlzLnVwZGF0ZSk7XG5cbiAgICBpZiAod2luZG93Lm5hdmlnYXRvci5tc1BvaW50ZXJFbmFibGVkKVxuICAgIHtcbiAgICAgICAgdGhpcy5pbnRlcmFjdGlvbkRPTUVsZW1lbnQuc3R5bGVbJy1tcy1jb250ZW50LXpvb21pbmcnXSA9ICcnO1xuICAgICAgICB0aGlzLmludGVyYWN0aW9uRE9NRWxlbWVudC5zdHlsZVsnLW1zLXRvdWNoLWFjdGlvbiddID0gJyc7XG4gICAgfVxuXG4gICAgd2luZG93LmRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21vdXNlbW92ZScsIHRoaXMub25Nb3VzZU1vdmUsIHRydWUpO1xuICAgIHRoaXMuaW50ZXJhY3Rpb25ET01FbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21vdXNlZG93bicsIHRoaXMub25Nb3VzZURvd24sIHRydWUpO1xuICAgIHRoaXMuaW50ZXJhY3Rpb25ET01FbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21vdXNlb3V0JywgIHRoaXMub25Nb3VzZU91dCwgdHJ1ZSk7XG5cbiAgICB0aGlzLmludGVyYWN0aW9uRE9NRWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCd0b3VjaHN0YXJ0JywgdGhpcy5vblRvdWNoU3RhcnQsIHRydWUpO1xuICAgIHRoaXMuaW50ZXJhY3Rpb25ET01FbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3RvdWNoZW5kJywgIHRoaXMub25Ub3VjaEVuZCwgdHJ1ZSk7XG4gICAgdGhpcy5pbnRlcmFjdGlvbkRPTUVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigndG91Y2htb3ZlJywgdGhpcy5vblRvdWNoTW92ZSwgdHJ1ZSk7XG5cbiAgICB0aGlzLmludGVyYWN0aW9uRE9NRWxlbWVudCA9IG51bGw7XG5cbiAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcignbW91c2V1cCcsICB0aGlzLm9uTW91c2VVcCwgdHJ1ZSk7XG5cbiAgICB0aGlzLmV2ZW50c0FkZGVkID0gZmFsc2U7XG59O1xuXG4vKipcbiAqIFVwZGF0ZXMgdGhlIHN0YXRlIG9mIGludGVyYWN0aXZlIG9iamVjdHMuXG4gKiBJbnZva2VkIGJ5IGEgdGhyb3R0bGVkIHRpY2tlciB1cGRhdGUgZnJvbVxuICoge0BsaW5rIFBJWEkudGlja2VyLnNoYXJlZH0uXG4gKlxuICogQHBhcmFtIGRlbHRhVGltZSB7bnVtYmVyfVxuICovXG5JbnRlcmFjdGlvbk1hbmFnZXIucHJvdG90eXBlLnVwZGF0ZSA9IGZ1bmN0aW9uIChkZWx0YVRpbWUpXG57XG4gICAgdGhpcy5fZGVsdGFUaW1lICs9IGRlbHRhVGltZTtcblxuICAgIGlmICh0aGlzLl9kZWx0YVRpbWUgPCB0aGlzLmludGVyYWN0aW9uRnJlcXVlbmN5KVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuX2RlbHRhVGltZSA9IDA7XG5cbiAgICBpZiAoIXRoaXMuaW50ZXJhY3Rpb25ET01FbGVtZW50KVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIGlmIHRoZSB1c2VyIG1vdmUgdGhlIG1vdXNlIHRoaXMgY2hlY2sgaGFzIGFscmVhZHkgYmVlbiBkZm9uZSB1c2luZyB0aGUgbW91c2UgbW92ZSFcbiAgICBpZih0aGlzLmRpZE1vdmUpXG4gICAge1xuICAgICAgICB0aGlzLmRpZE1vdmUgPSBmYWxzZTtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuY3Vyc29yID0gJ2luaGVyaXQnO1xuXG4gICAgdGhpcy5wcm9jZXNzSW50ZXJhY3RpdmUodGhpcy5tb3VzZS5nbG9iYWwsIHRoaXMucmVuZGVyZXIuX2xhc3RPYmplY3RSZW5kZXJlZCwgdGhpcy5wcm9jZXNzTW91c2VPdmVyT3V0LCB0cnVlICk7XG5cbiAgICBpZiAodGhpcy5jdXJyZW50Q3Vyc29yU3R5bGUgIT09IHRoaXMuY3Vyc29yKVxuICAgIHtcbiAgICAgICAgdGhpcy5jdXJyZW50Q3Vyc29yU3R5bGUgPSB0aGlzLmN1cnNvcjtcbiAgICAgICAgdGhpcy5pbnRlcmFjdGlvbkRPTUVsZW1lbnQuc3R5bGUuY3Vyc29yID0gdGhpcy5jdXJzb3I7XG4gICAgfVxuXG4gICAgLy9UT0RPXG59O1xuXG4vKipcbiAqIERpc3BhdGNoZXMgYW4gZXZlbnQgb24gdGhlIGRpc3BsYXkgb2JqZWN0IHRoYXQgd2FzIGludGVyYWN0ZWQgd2l0aFxuICpcbiAqIEBwYXJhbSBkaXNwbGF5T2JqZWN0IHtQSVhJLkNvbnRhaW5lcnxQSVhJLlNwcml0ZXxQSVhJLmV4dHJhcy5UaWxpbmdTcHJpdGV9IHRoZSBkaXNwbGF5IG9iamVjdCBpbiBxdWVzdGlvblxuICogQHBhcmFtIGV2ZW50U3RyaW5nIHtzdHJpbmd9IHRoZSBuYW1lIG9mIHRoZSBldmVudCAoZS5nLCBtb3VzZWRvd24pXG4gKiBAcGFyYW0gZXZlbnREYXRhIHtvYmplY3R9IHRoZSBldmVudCBkYXRhIG9iamVjdFxuICogQHByaXZhdGVcbiAqL1xuSW50ZXJhY3Rpb25NYW5hZ2VyLnByb3RvdHlwZS5kaXNwYXRjaEV2ZW50ID0gZnVuY3Rpb24gKCBkaXNwbGF5T2JqZWN0LCBldmVudFN0cmluZywgZXZlbnREYXRhIClcbntcbiAgICBpZighZXZlbnREYXRhLnN0b3BwZWQpXG4gICAge1xuICAgICAgICBldmVudERhdGEudGFyZ2V0ID0gZGlzcGxheU9iamVjdDtcbiAgICAgICAgZXZlbnREYXRhLnR5cGUgPSBldmVudFN0cmluZztcblxuICAgICAgICBkaXNwbGF5T2JqZWN0LmVtaXQoIGV2ZW50U3RyaW5nLCBldmVudERhdGEgKTtcblxuICAgICAgICBpZiggZGlzcGxheU9iamVjdFtldmVudFN0cmluZ10gKVxuICAgICAgICB7XG4gICAgICAgICAgICBkaXNwbGF5T2JqZWN0W2V2ZW50U3RyaW5nXSggZXZlbnREYXRhICk7XG4gICAgICAgIH1cbiAgICB9XG59O1xuXG4vKipcbiAqIE1hcHMgeCBhbmQgeSBjb29yZHMgZnJvbSBhIERPTSBvYmplY3QgYW5kIG1hcHMgdGhlbSBjb3JyZWN0bHkgdG8gdGhlIHBpeGkgdmlldy4gVGhlIHJlc3VsdGluZyB2YWx1ZSBpcyBzdG9yZWQgaW4gdGhlIHBvaW50LlxuICogVGhpcyB0YWtlcyBpbnRvIGFjY291bnQgdGhlIGZhY3QgdGhhdCB0aGUgRE9NIGVsZW1lbnQgY291bGQgYmUgc2NhbGVkIGFuZCBwb3NpdGlvbmVkIGFueXdoZXJlIG9uIHRoZSBzY3JlZW4uXG4gKlxuICogQHBhcmFtICB7UElYSS5Qb2ludH0gcG9pbnQgdGhlIHBvaW50IHRoYXQgdGhlIHJlc3VsdCB3aWxsIGJlIHN0b3JlZCBpblxuICogQHBhcmFtICB7bnVtYmVyfSB4ICAgICB0aGUgeCBjb29yZCBvZiB0aGUgcG9zaXRpb24gdG8gbWFwXG4gKiBAcGFyYW0gIHtudW1iZXJ9IHkgICAgIHRoZSB5IGNvb3JkIG9mIHRoZSBwb3NpdGlvbiB0byBtYXBcbiAqL1xuSW50ZXJhY3Rpb25NYW5hZ2VyLnByb3RvdHlwZS5tYXBQb3NpdGlvblRvUG9pbnQgPSBmdW5jdGlvbiAoIHBvaW50LCB4LCB5IClcbntcbiAgICB2YXIgcmVjdCA9IHRoaXMuaW50ZXJhY3Rpb25ET01FbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgIHBvaW50LnggPSAoICggeCAtIHJlY3QubGVmdCApICogKHRoaXMuaW50ZXJhY3Rpb25ET01FbGVtZW50LndpZHRoICAvIHJlY3Qud2lkdGggICkgKSAvIHRoaXMucmVzb2x1dGlvbjtcbiAgICBwb2ludC55ID0gKCAoIHkgLSByZWN0LnRvcCAgKSAqICh0aGlzLmludGVyYWN0aW9uRE9NRWxlbWVudC5oZWlnaHQgLyByZWN0LmhlaWdodCApICkgLyB0aGlzLnJlc29sdXRpb247XG59O1xuXG4vKipcbiAqIFRoaXMgZnVuY3Rpb24gaXMgcHJvdmlkZXMgYSBuZWF0IHdheSBvZiBjcmF3bGluZyB0aHJvdWdoIHRoZSBzY2VuZSBncmFwaCBhbmQgcnVubmluZyBhIHNwZWNpZmllZCBmdW5jdGlvbiBvbiBhbGwgaW50ZXJhY3RpdmUgb2JqZWN0cyBpdCBmaW5kcy5cbiAqIEl0IHdpbGwgYWxzbyB0YWtlIGNhcmUgb2YgaGl0IHRlc3RpbmcgdGhlIGludGVyYWN0aXZlIG9iamVjdHMgYW5kIHBhc3NlcyB0aGUgaGl0IGFjcm9zcyBpbiB0aGUgZnVuY3Rpb24uXG4gKlxuICogQHBhcmFtICB7UElYSS5Qb2ludH0gcG9pbnQgdGhlIHBvaW50IHRoYXQgaXMgdGVzdGVkIGZvciBjb2xsaXNpb25cbiAqIEBwYXJhbSAge1BJWEkuQ29udGFpbmVyfFBJWEkuU3ByaXRlfFBJWEkuZXh0cmFzLlRpbGluZ1Nwcml0ZX0gZGlzcGxheU9iamVjdCB0aGUgZGlzcGxheU9iamVjdCB0aGF0IHdpbGwgYmUgaGl0IHRlc3QgKHJlY3VyY3Npdmx5IGNyYXdscyBpdHMgY2hpbGRyZW4pXG4gKiBAcGFyYW0gIHtGdW5jdGlvbn0gZnVuYyB0aGUgZnVuY3Rpb24gdGhhdCB3aWxsIGJlIGNhbGxlZCBvbiBlYWNoIGludGVyYWN0aXZlIG9iamVjdC4gVGhlIGRpc3BsYXlPYmplY3QgYW5kIGhpdCB3aWxsIGJlIHBhc3NlZCB0byB0aGUgZnVuY3Rpb25cbiAqIEBwYXJhbSAge2Jvb2xlYW59IGhpdFRlc3QgdGhpcyBpbmRpY2F0ZXMgaWYgdGhlIG9iamVjdHMgaW5zaWRlIHNob3VsZCBiZSBoaXQgdGVzdCBhZ2FpbnN0IHRoZSBwb2ludFxuICogQHJldHVybiB7Ym9vbGVhbn0gcmV0dXJucyB0cnVlIGlmIHRoZSBkaXNwbGF5T2JqZWN0IGhpdCB0aGUgcG9pbnRcbiAqL1xuSW50ZXJhY3Rpb25NYW5hZ2VyLnByb3RvdHlwZS5wcm9jZXNzSW50ZXJhY3RpdmUgPSBmdW5jdGlvbiAocG9pbnQsIGRpc3BsYXlPYmplY3QsIGZ1bmMsIGhpdFRlc3QsIGludGVyYWN0aXZlKVxue1xuICAgIGlmKCFkaXNwbGF5T2JqZWN0IHx8ICFkaXNwbGF5T2JqZWN0LnZpc2libGUpXG4gICAge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgLy8gVG9vayBhIGxpdHRsZSB3aGlsZSB0byByZXdvcmsgdGhpcyBmdW5jdGlvbiBjb3JyZWN0bHkhIEJ1dCBub3cgaXQgaXMgZG9uZSBhbmQgbmljZSBhbmQgb3B0aW1pc2VkLiBeX15cbiAgICAvLyBcbiAgICAvLyBUaGlzIGZ1bmN0aW9uIHdpbGwgbm93IGxvb3AgdGhyb3VnaCBhbGwgb2JqZWN0cyBhbmQgdGhlbiBvbmx5IGhpdCB0ZXN0IHRoZSBvYmplY3RzIGl0IEhBUyB0bywgbm90IGFsbCBvZiB0aGVtLiBNVUNIIGZhc3Rlci4uXG4gICAgLy8gQW4gb2JqZWN0IHdpbGwgYmUgaGl0IHRlc3QgaWYgdGhlIGZvbGxvd2luZyBpcyB0cnVlOlxuICAgIC8vIFxuICAgIC8vIDE6IEl0IGlzIGludGVyYWN0aXZlLlxuICAgIC8vIDI6IEl0IGJlbG9uZ3MgdG8gYSBwYXJlbnQgdGhhdCBpcyBpbnRlcmFjdGl2ZSBBTkQgb25lIG9mIHRoZSBwYXJlbnRzIGNoaWxkcmVuIGhhdmUgbm90IGFscmVhZHkgYmVlbiBoaXQuXG4gICAgLy8gXG4gICAgLy8gQXMgYW5vdGhlciBsaXR0bGUgb3B0aW1pc2F0aW9uIG9uY2UgYW4gaW50ZXJhY3RpdmUgb2JqZWN0IGhhcyBiZWVuIGhpdCB3ZSBjYW4gY2Fycnkgb24gdGhyb3VnaCB0aGUgc2NlbmVncmFwaCwgYnV0IHdlIGtub3cgdGhhdCB0aGVyZSB3aWxsIGJlIG5vIG1vcmUgaGl0cyEgU28gd2UgY2FuIGF2b2lkIGV4dHJhIGhpdCB0ZXN0c1xuICAgIC8vIEEgZmluYWwgb3B0aW1pc2F0aW9uIGlzIHRoYXQgYW4gb2JqZWN0IGlzIG5vdCBoaXQgdGVzdCBkaXJlY3RseSBpZiBhIGNoaWxkIGhhcyBhbHJlYWR5IGJlZW4gaGl0LlxuICAgIFxuICAgIHZhciBoaXQgPSBmYWxzZSxcbiAgICAgICAgaW50ZXJhY3RpdmVQYXJlbnQgPSBpbnRlcmFjdGl2ZSA9IGRpc3BsYXlPYmplY3QuaW50ZXJhY3RpdmUgfHwgaW50ZXJhY3RpdmU7XG5cbiAgICAvLyBpZiB0aGUgZGlzcGxheW9iamVjdCBoYXMgYSBoaXRBcmVhLCB0aGVuIGl0IGRvZXMgbm90IG5lZWQgdG8gaGl0VGVzdCBjaGlsZHJlbi5cbiAgICBpZihkaXNwbGF5T2JqZWN0LmhpdEFyZWEpXG4gICAge1xuICAgICAgICBpbnRlcmFjdGl2ZVBhcmVudCA9IGZhbHNlO1xuICAgIH1cblxuICAgIC8vICoqIEZSRUUgVElQICoqISBJZiBhbiBvYmplY3QgaXMgbm90IGludGVyYWN0dGl2ZSBvciBoYXMgbm8gYnV0dG9ucyBpbiBpdCAoc3VjaCBhcyBhIGdhbWUgc2NlbmUhKSBzZXQgaW50ZXJhY3RpdmVDaGlsZHJlbiB0byBmYWxzZSBmb3IgdGhhdCBkaXNwbGF5T2JqZWN0LlxuICAgIC8vIFRoaXMgd2lsbCBhbGxvdyBwaXhpIHRvIGNvbXBsZXRseSBpZ25vcmUgYW5kIGJ5cGFzcyBjaGVja2luZyB0aGUgZGlzcGxheU9iamVjdHMgY2hpbGRyZW4uXG4gICAgaWYoZGlzcGxheU9iamVjdC5pbnRlcmFjdGl2ZUNoaWxkcmVuKVxuICAgIHsgICAgICAgXG4gICAgICAgIHZhciBjaGlsZHJlbiA9IGRpc3BsYXlPYmplY3QuY2hpbGRyZW47XG4gICAgICAgIFxuICAgICAgICBmb3IgKHZhciBpID0gY2hpbGRyZW4ubGVuZ3RoLTE7IGkgPj0gMDsgaS0tKVxuICAgICAgICB7XG4gICAgICAgICAgICAvLyB0aW1lIHRvIGdldCByZWN1cnNpdmUuLiBpZiB0aGlzIGZ1bmN0aW9uIHdpbGwgcmV0dXJuIGlmIHNvbXRoaW5nIGlzIGhpdC4uXG4gICAgICAgICAgICBpZiggdGhpcy5wcm9jZXNzSW50ZXJhY3RpdmUocG9pbnQsIGNoaWxkcmVuW2ldLCBmdW5jLCBoaXRUZXN0LCBpbnRlcmFjdGl2ZVBhcmVudCkgKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGhpdCA9IHRydWU7XG5cbiAgICAgICAgICAgICAgICAvLyB3ZSBubyBsb25nZXIgbmVlZCB0byBoaXQgdGVzdCBhbnkgbW9yZSBvYmplY3RzIGluIHRoaXMgY29udGFpbmVyIGFzIHdlIHdlIG5vdyBrbm93IHRoZSBwYXJlbnQgaGFzIGJlZW4gaGl0XG4gICAgICAgICAgICAgICAgaW50ZXJhY3RpdmVQYXJlbnQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAvLyBJZiB0aGUgY2hpbGQgaXMgaW50ZXJhY3RpdmUgLCB0aGF0IG1lYW5zIHRoYXQgdGhlIG9iamVjdCBoaXQgd2FzIGFjdHVhbGx5IGludGVyYWN0aXZlIGFuZCBub3QganVzdCB0aGUgY2hpbGQgb2YgYW4gaW50ZXJhY3RpdmUgb2JqZWN0LiBcbiAgICAgICAgICAgICAgICAvLyBUaGlzIG1lYW5zIHdlIG5vIGxvbmdlciBuZWVkIHRvIGhpdCB0ZXN0IGFueXRoaW5nIGVsc2UuIFdlIHN0aWxsIG5lZWQgdG8gcnVuIHRocm91Z2ggYWxsIG9iamVjdHMsIGJ1dCB3ZSBkb24ndCBuZWVkIHRvIHBlcmZvcm0gYW55IGhpdCB0ZXN0cy5cbiAgICAgICAgICAgICAgICBpZihjaGlsZHJlbltpXS5pbnRlcmFjdGl2ZSlcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIGhpdFRlc3QgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBubyBwb2ludCBydW5uaW5nIHRoaXMgaWYgdGhlIGl0ZW0gaXMgbm90IGludGVyYWN0aXZlIG9yIGRvZXMgbm90IGhhdmUgYW4gaW50ZXJhY3RpdmUgcGFyZW50LlxuICAgIGlmKGludGVyYWN0aXZlKVxuICAgIHtcbiAgICAgICAgLy8gaWYgd2UgYXJlIGhpdCB0ZXN0aW5nIChhcyBpbiB3ZSBoYXZlIG5vIGhpdCBhbnkgb2JqZWN0cyB5ZXQpXG4gICAgICAgIC8vIFdlIGFsc28gZG9uJ3QgbmVlZCB0byB3b3JyeSBhYm91dCBoaXQgdGVzdGluZyBpZiBvbmNlIG9mIHRoZSBkaXNwbGF5T2JqZWN0cyBjaGlsZHJlbiBoYXMgYWxyZWFkeSBiZWVuIGhpdCFcbiAgICAgICAgaWYoaGl0VGVzdCAmJiAhaGl0KVxuICAgICAgICB7ICBcbiAgICAgICAgICAgIGlmKGRpc3BsYXlPYmplY3QuaGl0QXJlYSlcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBkaXNwbGF5T2JqZWN0LndvcmxkVHJhbnNmb3JtLmFwcGx5SW52ZXJzZShwb2ludCwgIHRoaXMuX3RlbXBQb2ludCk7XG4gICAgICAgICAgICAgICAgaGl0ID0gZGlzcGxheU9iamVjdC5oaXRBcmVhLmNvbnRhaW5zKCB0aGlzLl90ZW1wUG9pbnQueCwgdGhpcy5fdGVtcFBvaW50LnkgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYoZGlzcGxheU9iamVjdC5jb250YWluc1BvaW50KVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGhpdCA9IGRpc3BsYXlPYmplY3QuY29udGFpbnNQb2ludChwb2ludCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZihkaXNwbGF5T2JqZWN0LmludGVyYWN0aXZlKVxuICAgICAgICB7XG4gICAgICAgICAgICBmdW5jKGRpc3BsYXlPYmplY3QsIGhpdCk7IFxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGhpdDtcbiAgXG59O1xuXG5cbi8qKlxuICogSXMgY2FsbGVkIHdoZW4gdGhlIG1vdXNlIGJ1dHRvbiBpcyBwcmVzc2VkIGRvd24gb24gdGhlIHJlbmRlcmVyIGVsZW1lbnRcbiAqXG4gKiBAcGFyYW0gZXZlbnQge0V2ZW50fSBUaGUgRE9NIGV2ZW50IG9mIGEgbW91c2UgYnV0dG9uIGJlaW5nIHByZXNzZWQgZG93blxuICogQHByaXZhdGVcbiAqL1xuSW50ZXJhY3Rpb25NYW5hZ2VyLnByb3RvdHlwZS5vbk1vdXNlRG93biA9IGZ1bmN0aW9uIChldmVudClcbntcbiAgICB0aGlzLm1vdXNlLm9yaWdpbmFsRXZlbnQgPSBldmVudDtcbiAgICB0aGlzLmV2ZW50RGF0YS5kYXRhID0gdGhpcy5tb3VzZTtcbiAgICB0aGlzLmV2ZW50RGF0YS5zdG9wcGVkID0gZmFsc2U7XG5cbiAgICAvLyBVcGRhdGUgaW50ZXJuYWwgbW91c2UgcmVmZXJlbmNlXG4gICAgdGhpcy5tYXBQb3NpdGlvblRvUG9pbnQoIHRoaXMubW91c2UuZ2xvYmFsLCBldmVudC5jbGllbnRYLCBldmVudC5jbGllbnRZKTtcblxuICAgIGlmICh0aGlzLmF1dG9QcmV2ZW50RGVmYXVsdClcbiAgICB7XG4gICAgICAgIHRoaXMubW91c2Uub3JpZ2luYWxFdmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIH1cblxuICAgIHRoaXMucHJvY2Vzc0ludGVyYWN0aXZlKHRoaXMubW91c2UuZ2xvYmFsLCB0aGlzLnJlbmRlcmVyLl9sYXN0T2JqZWN0UmVuZGVyZWQsIHRoaXMucHJvY2Vzc01vdXNlRG93biwgdHJ1ZSApO1xufTtcblxuLyoqXG4gKiBQcm9jZXNzZXMgdGhlIHJlc3VsdCBvZiB0aGUgbW91c2UgZG93biBjaGVjayBhbmQgZGlzcGF0Y2hlcyB0aGUgZXZlbnQgaWYgbmVlZCBiZVxuICpcbiAqIEBwYXJhbSBkaXNwbGF5T2JqZWN0IHtQSVhJLkNvbnRhaW5lcnxQSVhJLlNwcml0ZXxQSVhJLmV4dHJhcy5UaWxpbmdTcHJpdGV9IFRoZSBkaXNwbGF5IG9iamVjdCB0aGF0IHdhcyB0ZXN0ZWRcbiAqIEBwYXJhbSBoaXQge2Jvb2xlYW59IHRoZSByZXN1bHQgb2YgdGhlIGhpdCB0ZXN0IG9uIHRoZSBkaXNwYXkgb2JqZWN0XG4gKiBAcHJpdmF0ZVxuICovXG5JbnRlcmFjdGlvbk1hbmFnZXIucHJvdG90eXBlLnByb2Nlc3NNb3VzZURvd24gPSBmdW5jdGlvbiAoIGRpc3BsYXlPYmplY3QsIGhpdCApXG57XG4gICAgdmFyIGUgPSB0aGlzLm1vdXNlLm9yaWdpbmFsRXZlbnQ7XG4gICAgXG4gICAgdmFyIGlzUmlnaHRCdXR0b24gPSBlLmJ1dHRvbiA9PT0gMiB8fCBlLndoaWNoID09PSAzO1xuXG4gICAgaWYoaGl0KVxuICAgIHtcbiAgICAgICAgZGlzcGxheU9iamVjdFsgaXNSaWdodEJ1dHRvbiA/ICdfaXNSaWdodERvd24nIDogJ19pc0xlZnREb3duJyBdID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50KCBkaXNwbGF5T2JqZWN0LCBpc1JpZ2h0QnV0dG9uID8gJ3JpZ2h0ZG93bicgOiAnbW91c2Vkb3duJywgdGhpcy5ldmVudERhdGEgKTtcbiAgICB9XG59O1xuXG5cblxuLyoqXG4gKiBJcyBjYWxsZWQgd2hlbiB0aGUgbW91c2UgYnV0dG9uIGlzIHJlbGVhc2VkIG9uIHRoZSByZW5kZXJlciBlbGVtZW50XG4gKlxuICogQHBhcmFtIGV2ZW50IHtFdmVudH0gVGhlIERPTSBldmVudCBvZiBhIG1vdXNlIGJ1dHRvbiBiZWluZyByZWxlYXNlZFxuICogQHByaXZhdGVcbiAqL1xuSW50ZXJhY3Rpb25NYW5hZ2VyLnByb3RvdHlwZS5vbk1vdXNlVXAgPSBmdW5jdGlvbiAoZXZlbnQpXG57XG4gICAgdGhpcy5tb3VzZS5vcmlnaW5hbEV2ZW50ID0gZXZlbnQ7XG4gICAgdGhpcy5ldmVudERhdGEuZGF0YSA9IHRoaXMubW91c2U7XG4gICAgdGhpcy5ldmVudERhdGEuc3RvcHBlZCA9IGZhbHNlO1xuXG4gICAgLy8gVXBkYXRlIGludGVybmFsIG1vdXNlIHJlZmVyZW5jZVxuICAgIHRoaXMubWFwUG9zaXRpb25Ub1BvaW50KCB0aGlzLm1vdXNlLmdsb2JhbCwgZXZlbnQuY2xpZW50WCwgZXZlbnQuY2xpZW50WSk7XG5cbiAgICB0aGlzLnByb2Nlc3NJbnRlcmFjdGl2ZSh0aGlzLm1vdXNlLmdsb2JhbCwgdGhpcy5yZW5kZXJlci5fbGFzdE9iamVjdFJlbmRlcmVkLCB0aGlzLnByb2Nlc3NNb3VzZVVwLCB0cnVlICk7XG59O1xuXG4vKipcbiAqIFByb2Nlc3NlcyB0aGUgcmVzdWx0IG9mIHRoZSBtb3VzZSB1cCBjaGVjayBhbmQgZGlzcGF0Y2hlcyB0aGUgZXZlbnQgaWYgbmVlZCBiZVxuICpcbiAqIEBwYXJhbSBkaXNwbGF5T2JqZWN0IHtQSVhJLkNvbnRhaW5lcnxQSVhJLlNwcml0ZXxQSVhJLmV4dHJhcy5UaWxpbmdTcHJpdGV9IFRoZSBkaXNwbGF5IG9iamVjdCB0aGF0IHdhcyB0ZXN0ZWRcbiAqIEBwYXJhbSBoaXQge2Jvb2xlYW59IHRoZSByZXN1bHQgb2YgdGhlIGhpdCB0ZXN0IG9uIHRoZSBkaXNwbGF5IG9iamVjdFxuICogQHByaXZhdGVcbiAqL1xuSW50ZXJhY3Rpb25NYW5hZ2VyLnByb3RvdHlwZS5wcm9jZXNzTW91c2VVcCA9IGZ1bmN0aW9uICggZGlzcGxheU9iamVjdCwgaGl0IClcbntcbiAgICB2YXIgZSA9IHRoaXMubW91c2Uub3JpZ2luYWxFdmVudDtcblxuICAgIHZhciBpc1JpZ2h0QnV0dG9uID0gZS5idXR0b24gPT09IDIgfHwgZS53aGljaCA9PT0gMztcbiAgICB2YXIgaXNEb3duID0gIGlzUmlnaHRCdXR0b24gPyAnX2lzUmlnaHREb3duJyA6ICdfaXNMZWZ0RG93bic7XG5cbiAgICBpZihoaXQpXG4gICAge1xuICAgICAgICB0aGlzLmRpc3BhdGNoRXZlbnQoIGRpc3BsYXlPYmplY3QsIGlzUmlnaHRCdXR0b24gPyAncmlnaHR1cCcgOiAnbW91c2V1cCcsIHRoaXMuZXZlbnREYXRhICk7XG5cbiAgICAgICAgaWYoIGRpc3BsYXlPYmplY3RbIGlzRG93biBdIClcbiAgICAgICAge1xuICAgICAgICAgICAgZGlzcGxheU9iamVjdFsgaXNEb3duIF0gPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudCggZGlzcGxheU9iamVjdCwgaXNSaWdodEJ1dHRvbiA/ICdyaWdodGNsaWNrJyA6ICdjbGljaycsIHRoaXMuZXZlbnREYXRhICk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgaWYoIGRpc3BsYXlPYmplY3RbIGlzRG93biBdIClcbiAgICAgICAge1xuICAgICAgICAgICAgZGlzcGxheU9iamVjdFsgaXNEb3duIF0gPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudCggZGlzcGxheU9iamVjdCwgaXNSaWdodEJ1dHRvbiA/ICdyaWdodHVwb3V0c2lkZScgOiAnbW91c2V1cG91dHNpZGUnLCB0aGlzLmV2ZW50RGF0YSApO1xuICAgICAgICB9XG4gICAgfVxufTtcblxuXG4vKipcbiAqIElzIGNhbGxlZCB3aGVuIHRoZSBtb3VzZSBtb3ZlcyBhY3Jvc3MgdGhlIHJlbmRlcmVyIGVsZW1lbnRcbiAqXG4gKiBAcGFyYW0gZXZlbnQge0V2ZW50fSBUaGUgRE9NIGV2ZW50IG9mIHRoZSBtb3VzZSBtb3ZpbmdcbiAqIEBwcml2YXRlXG4gKi9cbkludGVyYWN0aW9uTWFuYWdlci5wcm90b3R5cGUub25Nb3VzZU1vdmUgPSBmdW5jdGlvbiAoZXZlbnQpXG57XG4gICAgdGhpcy5tb3VzZS5vcmlnaW5hbEV2ZW50ID0gZXZlbnQ7XG4gICAgdGhpcy5ldmVudERhdGEuZGF0YSA9IHRoaXMubW91c2U7XG4gICAgdGhpcy5ldmVudERhdGEuc3RvcHBlZCA9IGZhbHNlO1xuXG4gICAgdGhpcy5tYXBQb3NpdGlvblRvUG9pbnQoIHRoaXMubW91c2UuZ2xvYmFsLCBldmVudC5jbGllbnRYLCBldmVudC5jbGllbnRZKTtcblxuICAgIHRoaXMuZGlkTW92ZSA9IHRydWU7XG5cbiAgICB0aGlzLmN1cnNvciA9ICdpbmhlcml0JztcblxuICAgIHRoaXMucHJvY2Vzc0ludGVyYWN0aXZlKHRoaXMubW91c2UuZ2xvYmFsLCB0aGlzLnJlbmRlcmVyLl9sYXN0T2JqZWN0UmVuZGVyZWQsIHRoaXMucHJvY2Vzc01vdXNlTW92ZSwgdHJ1ZSApO1xuXG4gICAgaWYgKHRoaXMuY3VycmVudEN1cnNvclN0eWxlICE9PSB0aGlzLmN1cnNvcilcbiAgICB7XG4gICAgICAgIHRoaXMuY3VycmVudEN1cnNvclN0eWxlID0gdGhpcy5jdXJzb3I7XG4gICAgICAgIHRoaXMuaW50ZXJhY3Rpb25ET01FbGVtZW50LnN0eWxlLmN1cnNvciA9IHRoaXMuY3Vyc29yO1xuICAgIH1cblxuICAgIC8vVE9ETyBCVUcgZm9yIHBhcmVudHMgaW5lcmFjdGl2ZSBvYmplY3QgKGJvcmRlciBvcmRlciBpc3N1ZSlcbn07XG5cbi8qKlxuICogUHJvY2Vzc2VzIHRoZSByZXN1bHQgb2YgdGhlIG1vdXNlIG1vdmUgY2hlY2sgYW5kIGRpc3BhdGNoZXMgdGhlIGV2ZW50IGlmIG5lZWQgYmVcbiAqXG4gKiBAcGFyYW0gZGlzcGxheU9iamVjdCB7UElYSS5Db250YWluZXJ8UElYSS5TcHJpdGV8UElYSS5leHRyYXMuVGlsaW5nU3ByaXRlfSBUaGUgZGlzcGxheSBvYmplY3QgdGhhdCB3YXMgdGVzdGVkXG4gKiBAcGFyYW0gaGl0IHtib29sZWFufSB0aGUgcmVzdWx0IG9mIHRoZSBoaXQgdGVzdCBvbiB0aGUgZGlzcGxheSBvYmplY3RcbiAqIEBwcml2YXRlXG4gKi9cbkludGVyYWN0aW9uTWFuYWdlci5wcm90b3R5cGUucHJvY2Vzc01vdXNlTW92ZSA9IGZ1bmN0aW9uICggZGlzcGxheU9iamVjdCwgaGl0IClcbntcbiAgICB0aGlzLmRpc3BhdGNoRXZlbnQoIGRpc3BsYXlPYmplY3QsICdtb3VzZW1vdmUnLCB0aGlzLmV2ZW50RGF0YSk7XG4gICAgdGhpcy5wcm9jZXNzTW91c2VPdmVyT3V0KGRpc3BsYXlPYmplY3QsIGhpdCk7XG59O1xuXG5cbi8qKlxuICogSXMgY2FsbGVkIHdoZW4gdGhlIG1vdXNlIGlzIG1vdmVkIG91dCBvZiB0aGUgcmVuZGVyZXIgZWxlbWVudFxuICpcbiAqIEBwYXJhbSBldmVudCB7RXZlbnR9IFRoZSBET00gZXZlbnQgb2YgYSBtb3VzZSBiZWluZyBtb3ZlZCBvdXRcbiAqIEBwcml2YXRlXG4gKi9cbkludGVyYWN0aW9uTWFuYWdlci5wcm90b3R5cGUub25Nb3VzZU91dCA9IGZ1bmN0aW9uIChldmVudClcbntcbiAgICB0aGlzLm1vdXNlLm9yaWdpbmFsRXZlbnQgPSBldmVudDtcbiAgICB0aGlzLmV2ZW50RGF0YS5zdG9wcGVkID0gZmFsc2U7XG5cbiAgICAvLyBVcGRhdGUgaW50ZXJuYWwgbW91c2UgcmVmZXJlbmNlXG4gICAgdGhpcy5tYXBQb3NpdGlvblRvUG9pbnQoIHRoaXMubW91c2UuZ2xvYmFsLCBldmVudC5jbGllbnRYLCBldmVudC5jbGllbnRZKTtcblxuICAgIHRoaXMuaW50ZXJhY3Rpb25ET01FbGVtZW50LnN0eWxlLmN1cnNvciA9ICdpbmhlcml0JztcblxuICAgIC8vIFRPRE8gb3B0aW1pemUgYnkgbm90IGNoZWNrIEVWRVJZIFRJTUUhIG1heWJlIGhhbGYgYXMgb2Z0ZW4/IC8vXG4gICAgdGhpcy5tYXBQb3NpdGlvblRvUG9pbnQoIHRoaXMubW91c2UuZ2xvYmFsLCBldmVudC5jbGllbnRYLCBldmVudC5jbGllbnRZICk7XG5cbiAgICB0aGlzLnByb2Nlc3NJbnRlcmFjdGl2ZSggdGhpcy5tb3VzZS5nbG9iYWwsIHRoaXMucmVuZGVyZXIuX2xhc3RPYmplY3RSZW5kZXJlZCwgdGhpcy5wcm9jZXNzTW91c2VPdmVyT3V0LCBmYWxzZSApO1xufTtcblxuLyoqXG4gKiBQcm9jZXNzZXMgdGhlIHJlc3VsdCBvZiB0aGUgbW91c2Ugb3Zlci9vdXQgY2hlY2sgYW5kIGRpc3BhdGNoZXMgdGhlIGV2ZW50IGlmIG5lZWQgYmVcbiAqXG4gKiBAcGFyYW0gZGlzcGxheU9iamVjdCB7UElYSS5Db250YWluZXJ8UElYSS5TcHJpdGV8UElYSS5leHRyYXMuVGlsaW5nU3ByaXRlfSBUaGUgZGlzcGxheSBvYmplY3QgdGhhdCB3YXMgdGVzdGVkXG4gKiBAcGFyYW0gaGl0IHtib29sZWFufSB0aGUgcmVzdWx0IG9mIHRoZSBoaXQgdGVzdCBvbiB0aGUgZGlzcGxheSBvYmplY3RcbiAqIEBwcml2YXRlXG4gKi9cbkludGVyYWN0aW9uTWFuYWdlci5wcm90b3R5cGUucHJvY2Vzc01vdXNlT3Zlck91dCA9IGZ1bmN0aW9uICggZGlzcGxheU9iamVjdCwgaGl0IClcbntcbiAgICBpZihoaXQpXG4gICAge1xuICAgICAgICBpZighZGlzcGxheU9iamVjdC5fb3ZlcilcbiAgICAgICAge1xuICAgICAgICAgICAgZGlzcGxheU9iamVjdC5fb3ZlciA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLmRpc3BhdGNoRXZlbnQoIGRpc3BsYXlPYmplY3QsICdtb3VzZW92ZXInLCB0aGlzLmV2ZW50RGF0YSApO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGRpc3BsYXlPYmplY3QuYnV0dG9uTW9kZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5jdXJzb3IgPSBkaXNwbGF5T2JqZWN0LmRlZmF1bHRDdXJzb3I7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgaWYoZGlzcGxheU9iamVjdC5fb3ZlcilcbiAgICAgICAge1xuICAgICAgICAgICAgZGlzcGxheU9iamVjdC5fb3ZlciA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50KCBkaXNwbGF5T2JqZWN0LCAnbW91c2VvdXQnLCB0aGlzLmV2ZW50RGF0YSk7XG4gICAgICAgIH1cbiAgICB9XG59O1xuXG5cbi8qKlxuICogSXMgY2FsbGVkIHdoZW4gYSB0b3VjaCBpcyBzdGFydGVkIG9uIHRoZSByZW5kZXJlciBlbGVtZW50XG4gKlxuICogQHBhcmFtIGV2ZW50IHtFdmVudH0gVGhlIERPTSBldmVudCBvZiBhIHRvdWNoIHN0YXJ0aW5nIG9uIHRoZSByZW5kZXJlciB2aWV3XG4gKiBAcHJpdmF0ZVxuICovXG5JbnRlcmFjdGlvbk1hbmFnZXIucHJvdG90eXBlLm9uVG91Y2hTdGFydCA9IGZ1bmN0aW9uIChldmVudClcbntcbiAgICBpZiAodGhpcy5hdXRvUHJldmVudERlZmF1bHQpXG4gICAge1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIH1cblxuICAgIHZhciBjaGFuZ2VkVG91Y2hlcyA9IGV2ZW50LmNoYW5nZWRUb3VjaGVzO1xuICAgIHZhciBjTGVuZ3RoID0gY2hhbmdlZFRvdWNoZXMubGVuZ3RoO1xuXG4gICAgZm9yICh2YXIgaT0wOyBpIDwgY0xlbmd0aDsgaSsrKVxuICAgIHtcbiAgICAgICAgdmFyIHRvdWNoRXZlbnQgPSBjaGFuZ2VkVG91Y2hlc1tpXTtcbiAgICAgICAgLy9UT0RPIFBPT0xcbiAgICAgICAgdmFyIHRvdWNoRGF0YSA9IHRoaXMuZ2V0VG91Y2hEYXRhKCB0b3VjaEV2ZW50ICk7XG5cbiAgICAgICAgdG91Y2hEYXRhLm9yaWdpbmFsRXZlbnQgPSBldmVudDtcblxuICAgICAgICB0aGlzLmV2ZW50RGF0YS5kYXRhID0gdG91Y2hEYXRhO1xuICAgICAgICB0aGlzLmV2ZW50RGF0YS5zdG9wcGVkID0gZmFsc2U7XG5cbiAgICAgICAgdGhpcy5wcm9jZXNzSW50ZXJhY3RpdmUoIHRvdWNoRGF0YS5nbG9iYWwsIHRoaXMucmVuZGVyZXIuX2xhc3RPYmplY3RSZW5kZXJlZCwgdGhpcy5wcm9jZXNzVG91Y2hTdGFydCwgdHJ1ZSApO1xuXG4gICAgICAgIHRoaXMucmV0dXJuVG91Y2hEYXRhKCB0b3VjaERhdGEgKTtcbiAgICB9XG59O1xuXG4vKipcbiAqIFByb2Nlc3NlcyB0aGUgcmVzdWx0IG9mIGEgdG91Y2ggY2hlY2sgYW5kIGRpc3BhdGNoZXMgdGhlIGV2ZW50IGlmIG5lZWQgYmVcbiAqXG4gKiBAcGFyYW0gZGlzcGxheU9iamVjdCB7UElYSS5Db250YWluZXJ8UElYSS5TcHJpdGV8UElYSS5leHRyYXMuVGlsaW5nU3ByaXRlfSBUaGUgZGlzcGxheSBvYmplY3QgdGhhdCB3YXMgdGVzdGVkXG4gKiBAcGFyYW0gaGl0IHtib29sZWFufSB0aGUgcmVzdWx0IG9mIHRoZSBoaXQgdGVzdCBvbiB0aGUgZGlzcGxheSBvYmplY3RcbiAqIEBwcml2YXRlXG4gKi9cbkludGVyYWN0aW9uTWFuYWdlci5wcm90b3R5cGUucHJvY2Vzc1RvdWNoU3RhcnQgPSBmdW5jdGlvbiAoIGRpc3BsYXlPYmplY3QsIGhpdCApXG57XG4gICAgaWYoaGl0KVxuICAgIHtcbiAgICAgICAgZGlzcGxheU9iamVjdC5fdG91Y2hEb3duID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50KCBkaXNwbGF5T2JqZWN0LCAndG91Y2hzdGFydCcsIHRoaXMuZXZlbnREYXRhICk7XG4gICAgfVxufTtcblxuXG4vKipcbiAqIElzIGNhbGxlZCB3aGVuIGEgdG91Y2ggZW5kcyBvbiB0aGUgcmVuZGVyZXIgZWxlbWVudFxuICpcbiAqIEBwYXJhbSBldmVudCB7RXZlbnR9IFRoZSBET00gZXZlbnQgb2YgYSB0b3VjaCBlbmRpbmcgb24gdGhlIHJlbmRlcmVyIHZpZXdcbiAqL1xuSW50ZXJhY3Rpb25NYW5hZ2VyLnByb3RvdHlwZS5vblRvdWNoRW5kID0gZnVuY3Rpb24gKGV2ZW50KVxue1xuICAgIGlmICh0aGlzLmF1dG9QcmV2ZW50RGVmYXVsdClcbiAgICB7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgfVxuXG4gICAgdmFyIGNoYW5nZWRUb3VjaGVzID0gZXZlbnQuY2hhbmdlZFRvdWNoZXM7XG4gICAgdmFyIGNMZW5ndGggPSBjaGFuZ2VkVG91Y2hlcy5sZW5ndGg7XG5cbiAgICBmb3IgKHZhciBpPTA7IGkgPCBjTGVuZ3RoOyBpKyspXG4gICAge1xuICAgICAgICB2YXIgdG91Y2hFdmVudCA9IGNoYW5nZWRUb3VjaGVzW2ldO1xuXG4gICAgICAgIHZhciB0b3VjaERhdGEgPSB0aGlzLmdldFRvdWNoRGF0YSggdG91Y2hFdmVudCApO1xuXG4gICAgICAgIHRvdWNoRGF0YS5vcmlnaW5hbEV2ZW50ID0gZXZlbnQ7XG5cbiAgICAgICAgLy9UT0RPIHRoaXMgc2hvdWxkIGJlIHBhc3NlZCBhbG9uZy4uIG5vIHNldFxuICAgICAgICB0aGlzLmV2ZW50RGF0YS5kYXRhID0gdG91Y2hEYXRhO1xuICAgICAgICB0aGlzLmV2ZW50RGF0YS5zdG9wcGVkID0gZmFsc2U7XG5cblxuICAgICAgICB0aGlzLnByb2Nlc3NJbnRlcmFjdGl2ZSggdG91Y2hEYXRhLmdsb2JhbCwgdGhpcy5yZW5kZXJlci5fbGFzdE9iamVjdFJlbmRlcmVkLCB0aGlzLnByb2Nlc3NUb3VjaEVuZCwgdHJ1ZSApO1xuXG4gICAgICAgIHRoaXMucmV0dXJuVG91Y2hEYXRhKCB0b3VjaERhdGEgKTtcbiAgICB9XG59O1xuXG4vKipcbiAqIFByb2Nlc3NlcyB0aGUgcmVzdWx0IG9mIHRoZSBlbmQgb2YgYSB0b3VjaCBhbmQgZGlzcGF0Y2hlcyB0aGUgZXZlbnQgaWYgbmVlZCBiZVxuICpcbiAqIEBwYXJhbSBkaXNwbGF5T2JqZWN0IHtQSVhJLkNvbnRhaW5lcnxQSVhJLlNwcml0ZXxQSVhJLmV4dHJhcy5UaWxpbmdTcHJpdGV9IFRoZSBkaXNwbGF5IG9iamVjdCB0aGF0IHdhcyB0ZXN0ZWRcbiAqIEBwYXJhbSBoaXQge2Jvb2xlYW59IHRoZSByZXN1bHQgb2YgdGhlIGhpdCB0ZXN0IG9uIHRoZSBkaXNwbGF5IG9iamVjdFxuICogQHByaXZhdGVcbiAqL1xuSW50ZXJhY3Rpb25NYW5hZ2VyLnByb3RvdHlwZS5wcm9jZXNzVG91Y2hFbmQgPSBmdW5jdGlvbiAoIGRpc3BsYXlPYmplY3QsIGhpdCApXG57XG4gICAgaWYoaGl0KVxuICAgIHtcbiAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50KCBkaXNwbGF5T2JqZWN0LCAndG91Y2hlbmQnLCB0aGlzLmV2ZW50RGF0YSApO1xuXG4gICAgICAgIGlmKCBkaXNwbGF5T2JqZWN0Ll90b3VjaERvd24gKVxuICAgICAgICB7XG4gICAgICAgICAgICBkaXNwbGF5T2JqZWN0Ll90b3VjaERvd24gPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudCggZGlzcGxheU9iamVjdCwgJ3RhcCcsIHRoaXMuZXZlbnREYXRhICk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgaWYoIGRpc3BsYXlPYmplY3QuX3RvdWNoRG93biApXG4gICAgICAgIHtcbiAgICAgICAgICAgIGRpc3BsYXlPYmplY3QuX3RvdWNoRG93biA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50KCBkaXNwbGF5T2JqZWN0LCAndG91Y2hlbmRvdXRzaWRlJywgdGhpcy5ldmVudERhdGEgKTtcbiAgICAgICAgfVxuICAgIH1cbn07XG5cbi8qKlxuICogSXMgY2FsbGVkIHdoZW4gYSB0b3VjaCBpcyBtb3ZlZCBhY3Jvc3MgdGhlIHJlbmRlcmVyIGVsZW1lbnRcbiAqXG4gKiBAcGFyYW0gZXZlbnQge0V2ZW50fSBUaGUgRE9NIGV2ZW50IG9mIGEgdG91Y2ggbW92aW5nIGFjcm9zcyB0aGUgcmVuZGVyZXIgdmlld1xuICogQHByaXZhdGVcbiAqL1xuSW50ZXJhY3Rpb25NYW5hZ2VyLnByb3RvdHlwZS5vblRvdWNoTW92ZSA9IGZ1bmN0aW9uIChldmVudClcbntcbiAgICBpZiAodGhpcy5hdXRvUHJldmVudERlZmF1bHQpXG4gICAge1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIH1cblxuICAgIHZhciBjaGFuZ2VkVG91Y2hlcyA9IGV2ZW50LmNoYW5nZWRUb3VjaGVzO1xuICAgIHZhciBjTGVuZ3RoID0gY2hhbmdlZFRvdWNoZXMubGVuZ3RoO1xuXG4gICAgZm9yICh2YXIgaT0wOyBpIDwgY0xlbmd0aDsgaSsrKVxuICAgIHtcbiAgICAgICAgdmFyIHRvdWNoRXZlbnQgPSBjaGFuZ2VkVG91Y2hlc1tpXTtcblxuICAgICAgICB2YXIgdG91Y2hEYXRhID0gdGhpcy5nZXRUb3VjaERhdGEoIHRvdWNoRXZlbnQgKTtcblxuICAgICAgICB0b3VjaERhdGEub3JpZ2luYWxFdmVudCA9IGV2ZW50O1xuXG4gICAgICAgIHRoaXMuZXZlbnREYXRhLmRhdGEgPSB0b3VjaERhdGE7XG4gICAgICAgIHRoaXMuZXZlbnREYXRhLnN0b3BwZWQgPSBmYWxzZTtcblxuICAgICAgICB0aGlzLnByb2Nlc3NJbnRlcmFjdGl2ZSggdG91Y2hEYXRhLmdsb2JhbCwgdGhpcy5yZW5kZXJlci5fbGFzdE9iamVjdFJlbmRlcmVkLCB0aGlzLnByb2Nlc3NUb3VjaE1vdmUsIHRydWUgKTtcblxuICAgICAgICB0aGlzLnJldHVyblRvdWNoRGF0YSggdG91Y2hEYXRhICk7XG4gICAgfVxufTtcblxuLyoqXG4gKiBQcm9jZXNzZXMgdGhlIHJlc3VsdCBvZiBhIHRvdWNoIG1vdmUgY2hlY2sgYW5kIGRpc3BhdGNoZXMgdGhlIGV2ZW50IGlmIG5lZWQgYmVcbiAqXG4gKiBAcGFyYW0gZGlzcGxheU9iamVjdCB7UElYSS5Db250YWluZXJ8UElYSS5TcHJpdGV8UElYSS5leHRyYXMuVGlsaW5nU3ByaXRlfSBUaGUgZGlzcGxheSBvYmplY3QgdGhhdCB3YXMgdGVzdGVkXG4gKiBAcGFyYW0gaGl0IHtib29sZWFufSB0aGUgcmVzdWx0IG9mIHRoZSBoaXQgdGVzdCBvbiB0aGUgZGlzcGxheSBvYmplY3RcbiAqIEBwcml2YXRlXG4gKi9cbkludGVyYWN0aW9uTWFuYWdlci5wcm90b3R5cGUucHJvY2Vzc1RvdWNoTW92ZSA9IGZ1bmN0aW9uICggZGlzcGxheU9iamVjdCwgaGl0IClcbntcbiAgICBoaXQgPSBoaXQ7XG4gICAgdGhpcy5kaXNwYXRjaEV2ZW50KCBkaXNwbGF5T2JqZWN0LCAndG91Y2htb3ZlJywgdGhpcy5ldmVudERhdGEpO1xufTtcblxuLyoqXG4gKiBHcmFicyBhbiBpbnRlcmFjdGlvbiBkYXRhIG9iamVjdCBmcm9tIHRoZSBpbnRlcm5hbCBwb29sXG4gKlxuICogQHBhcmFtIHRvdWNoRXZlbnQge0V2ZW50RGF0YX0gVGhlIHRvdWNoIGV2ZW50IHdlIG5lZWQgdG8gcGFpciB3aXRoIGFuIGludGVyYWN0aW9uRGF0YSBvYmplY3RcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5JbnRlcmFjdGlvbk1hbmFnZXIucHJvdG90eXBlLmdldFRvdWNoRGF0YSA9IGZ1bmN0aW9uICh0b3VjaEV2ZW50KVxue1xuICAgIHZhciB0b3VjaERhdGEgPSB0aGlzLmludGVyYWN0aXZlRGF0YVBvb2wucG9wKCk7XG5cbiAgICBpZighdG91Y2hEYXRhKVxuICAgIHtcbiAgICAgICAgdG91Y2hEYXRhID0gbmV3IEludGVyYWN0aW9uRGF0YSgpO1xuICAgIH1cblxuICAgIHRvdWNoRGF0YS5pZGVudGlmaWVyID0gdG91Y2hFdmVudC5pZGVudGlmaWVyO1xuICAgIHRoaXMubWFwUG9zaXRpb25Ub1BvaW50KCB0b3VjaERhdGEuZ2xvYmFsLCB0b3VjaEV2ZW50LmNsaWVudFgsIHRvdWNoRXZlbnQuY2xpZW50WSApO1xuXG4gICAgaWYobmF2aWdhdG9yLmlzQ29jb29uSlMpXG4gICAge1xuICAgICAgICB0b3VjaERhdGEuZ2xvYmFsLnggPSB0b3VjaERhdGEuZ2xvYmFsLnggLyB0aGlzLnJlc29sdXRpb247XG4gICAgICAgIHRvdWNoRGF0YS5nbG9iYWwueSA9IHRvdWNoRGF0YS5nbG9iYWwueSAvIHRoaXMucmVzb2x1dGlvbjtcbiAgICB9XG5cbiAgICB0b3VjaEV2ZW50Lmdsb2JhbFggPSB0b3VjaERhdGEuZ2xvYmFsLng7XG4gICAgdG91Y2hFdmVudC5nbG9iYWxZID0gdG91Y2hEYXRhLmdsb2JhbC55O1xuXG4gICAgcmV0dXJuIHRvdWNoRGF0YTtcbn07XG5cbi8qKlxuICogUmV0dXJucyBhbiBpbnRlcmFjdGlvbiBkYXRhIG9iamVjdCB0byB0aGUgaW50ZXJuYWwgcG9vbFxuICpcbiAqIEBwYXJhbSB0b3VjaERhdGEge1BJWEkuaW50ZXJhY3Rpb24uSW50ZXJhY3Rpb25EYXRhfSBUaGUgdG91Y2ggZGF0YSBvYmplY3Qgd2Ugd2FudCB0byByZXR1cm4gdG8gdGhlIHBvb2xcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5JbnRlcmFjdGlvbk1hbmFnZXIucHJvdG90eXBlLnJldHVyblRvdWNoRGF0YSA9IGZ1bmN0aW9uICggdG91Y2hEYXRhIClcbntcbiAgICB0aGlzLmludGVyYWN0aXZlRGF0YVBvb2wucHVzaCggdG91Y2hEYXRhICk7XG59O1xuXG4vKipcbiAqIERlc3Ryb3lzIHRoZSBpbnRlcmFjdGlvbiBtYW5hZ2VyXG4gKlxuICovXG5JbnRlcmFjdGlvbk1hbmFnZXIucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoKSB7XG4gICAgdGhpcy5yZW1vdmVFdmVudHMoKTtcblxuICAgIHRoaXMucmVuZGVyZXIgPSBudWxsO1xuXG4gICAgdGhpcy5tb3VzZSA9IG51bGw7XG5cbiAgICB0aGlzLmV2ZW50RGF0YSA9IG51bGw7XG5cbiAgICB0aGlzLmludGVyYWN0aXZlRGF0YVBvb2wgPSBudWxsO1xuXG4gICAgdGhpcy5pbnRlcmFjdGlvbkRPTUVsZW1lbnQgPSBudWxsO1xuXG4gICAgdGhpcy5vbk1vdXNlVXAgPSBudWxsO1xuICAgIHRoaXMucHJvY2Vzc01vdXNlVXAgPSBudWxsO1xuXG5cbiAgICB0aGlzLm9uTW91c2VEb3duID0gbnVsbDtcbiAgICB0aGlzLnByb2Nlc3NNb3VzZURvd24gPSBudWxsO1xuXG4gICAgdGhpcy5vbk1vdXNlTW92ZSA9IG51bGw7XG4gICAgdGhpcy5wcm9jZXNzTW91c2VNb3ZlID0gbnVsbDtcblxuICAgIHRoaXMub25Nb3VzZU91dCA9IG51bGw7XG4gICAgdGhpcy5wcm9jZXNzTW91c2VPdmVyT3V0ID0gbnVsbDtcblxuXG4gICAgdGhpcy5vblRvdWNoU3RhcnQgPSBudWxsO1xuICAgIHRoaXMucHJvY2Vzc1RvdWNoU3RhcnQgPSBudWxsO1xuXG4gICAgdGhpcy5vblRvdWNoRW5kID0gbnVsbDtcbiAgICB0aGlzLnByb2Nlc3NUb3VjaEVuZCA9IG51bGw7XG5cbiAgICB0aGlzLm9uVG91Y2hNb3ZlID0gbnVsbDtcbiAgICB0aGlzLnByb2Nlc3NUb3VjaE1vdmUgPSBudWxsO1xuXG4gICAgdGhpcy5fdGVtcFBvaW50ID0gbnVsbDtcbn07XG5cbmNvcmUuV2ViR0xSZW5kZXJlci5yZWdpc3RlclBsdWdpbignaW50ZXJhY3Rpb24nLCBJbnRlcmFjdGlvbk1hbmFnZXIpO1xuY29yZS5DYW52YXNSZW5kZXJlci5yZWdpc3RlclBsdWdpbignaW50ZXJhY3Rpb24nLCBJbnRlcmFjdGlvbk1hbmFnZXIpO1xuIiwiLyoqXG4gKiBAZmlsZSAgICAgICAgTWFpbiBleHBvcnQgb2YgdGhlIFBJWEkgaW50ZXJhY3Rpb25zIGxpYnJhcnlcbiAqIEBhdXRob3IgICAgICBNYXQgR3JvdmVzIDxtYXRAZ29vZGJveWRpZ2l0YWwuY29tPlxuICogQGNvcHlyaWdodCAgIDIwMTMtMjAxNSBHb29kQm95RGlnaXRhbFxuICogQGxpY2Vuc2UgICAgIHtAbGluayBodHRwczovL2dpdGh1Yi5jb20vcGl4aWpzL3BpeGkuanMvYmxvYi9tYXN0ZXIvTElDRU5TRXxNSVQgTGljZW5zZX1cbiAqL1xuXG4vKipcbiAqIEBuYW1lc3BhY2UgUElYSS5pbnRlcmFjdGlvblxuICovXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgICBJbnRlcmFjdGlvbkRhdGE6ICAgIHJlcXVpcmUoJy4vSW50ZXJhY3Rpb25EYXRhJyksXG4gICAgSW50ZXJhY3Rpb25NYW5hZ2VyOiByZXF1aXJlKCcuL0ludGVyYWN0aW9uTWFuYWdlcicpLFxuICAgIGludGVyYWN0aXZlVGFyZ2V0OiAgcmVxdWlyZSgnLi9pbnRlcmFjdGl2ZVRhcmdldCcpXG59O1xuIiwiLyoqXG4gKiBEZWZhdWx0IHByb3BlcnR5IHZhbHVlcyBvZiBpbnRlcmFjdGl2ZSBvYmplY3RzXG4gKiB1c2VkIGJ5IHtAbGluayBQSVhJLmludGVyYWN0aW9uLkludGVyYWN0aW9uTWFuYWdlcn0uXG4gKlxuICogQG1peGluXG4gKiBAbWVtYmVyb2YgUElYSS5pbnRlcmFjdGlvblxuICogQGV4YW1wbGVcbiAqICAgICAgZnVuY3Rpb24gTXlPYmplY3QoKSB7fVxuICpcbiAqICAgICAgT2JqZWN0LmFzc2lnbihcbiAqICAgICAgICAgIE15T2JqZWN0LnByb3RvdHlwZSxcbiAqICAgICAgICAgIFBJWEkuaW50ZXJhY3Rpb24uaW50ZXJhY3RpdmVUYXJnZXRcbiAqICAgICAgKTtcbiAqL1xudmFyIGludGVyYWN0aXZlVGFyZ2V0ID0ge1xuICAgIC8qKlxuICAgICAqIEB0b2RvIE5lZWRzIGRvY3MuXG4gICAgICovXG4gICAgaW50ZXJhY3RpdmU6IGZhbHNlLFxuICAgIC8qKlxuICAgICAqIEB0b2RvIE5lZWRzIGRvY3MuXG4gICAgICovXG4gICAgYnV0dG9uTW9kZTogZmFsc2UsXG4gICAgLyoqXG4gICAgICogQHRvZG8gTmVlZHMgZG9jcy5cbiAgICAgKi9cbiAgICBpbnRlcmFjdGl2ZUNoaWxkcmVuOiB0cnVlLFxuICAgIC8qKlxuICAgICAqIEB0b2RvIE5lZWRzIGRvY3MuXG4gICAgICovXG4gICAgZGVmYXVsdEN1cnNvcjogJ3BvaW50ZXInLFxuXG4gICAgLy8gc29tZSBpbnRlcm5hbCBjaGVja3MuLlxuXG4gICAgLyoqXG4gICAgICogQHRvZG8gTmVlZHMgZG9jcy5cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIF9vdmVyOiBmYWxzZSxcbiAgICAvKipcbiAgICAgKiBAdG9kbyBOZWVkcyBkb2NzLlxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgX3RvdWNoRG93bjogZmFsc2Vcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gaW50ZXJhY3RpdmVUYXJnZXQ7XG4iLCJ2YXIgUmVzb3VyY2UgPSByZXF1aXJlKCdyZXNvdXJjZS1sb2FkZXInKS5SZXNvdXJjZSxcbiAgICBjb3JlID0gcmVxdWlyZSgnLi4vY29yZScpLFxuICAgIGV4dHJhcyA9IHJlcXVpcmUoJy4uL2V4dHJhcycpLFxuICAgIHBhdGggPSByZXF1aXJlKCdwYXRoJyk7XG5cblxuZnVuY3Rpb24gcGFyc2UocmVzb3VyY2UsIHRleHR1cmUpIHtcbiAgICB2YXIgZGF0YSA9IHt9O1xuICAgIHZhciBpbmZvID0gcmVzb3VyY2UuZGF0YS5nZXRFbGVtZW50c0J5VGFnTmFtZSgnaW5mbycpWzBdO1xuICAgIHZhciBjb21tb24gPSByZXNvdXJjZS5kYXRhLmdldEVsZW1lbnRzQnlUYWdOYW1lKCdjb21tb24nKVswXTtcblxuICAgIGRhdGEuZm9udCA9IGluZm8uZ2V0QXR0cmlidXRlKCdmYWNlJyk7XG4gICAgZGF0YS5zaXplID0gcGFyc2VJbnQoaW5mby5nZXRBdHRyaWJ1dGUoJ3NpemUnKSwgMTApO1xuICAgIGRhdGEubGluZUhlaWdodCA9IHBhcnNlSW50KGNvbW1vbi5nZXRBdHRyaWJ1dGUoJ2xpbmVIZWlnaHQnKSwgMTApO1xuICAgIGRhdGEuY2hhcnMgPSB7fTtcblxuICAgIC8vcGFyc2UgbGV0dGVyc1xuICAgIHZhciBsZXR0ZXJzID0gcmVzb3VyY2UuZGF0YS5nZXRFbGVtZW50c0J5VGFnTmFtZSgnY2hhcicpO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZXR0ZXJzLmxlbmd0aDsgaSsrKVxuICAgIHtcbiAgICAgICAgdmFyIGNoYXJDb2RlID0gcGFyc2VJbnQobGV0dGVyc1tpXS5nZXRBdHRyaWJ1dGUoJ2lkJyksIDEwKTtcblxuICAgICAgICB2YXIgdGV4dHVyZVJlY3QgPSBuZXcgY29yZS5SZWN0YW5nbGUoXG4gICAgICAgICAgICBwYXJzZUludChsZXR0ZXJzW2ldLmdldEF0dHJpYnV0ZSgneCcpLCAxMCkgKyB0ZXh0dXJlLmZyYW1lLngsXG4gICAgICAgICAgICBwYXJzZUludChsZXR0ZXJzW2ldLmdldEF0dHJpYnV0ZSgneScpLCAxMCkgKyB0ZXh0dXJlLmZyYW1lLnksXG4gICAgICAgICAgICBwYXJzZUludChsZXR0ZXJzW2ldLmdldEF0dHJpYnV0ZSgnd2lkdGgnKSwgMTApLFxuICAgICAgICAgICAgcGFyc2VJbnQobGV0dGVyc1tpXS5nZXRBdHRyaWJ1dGUoJ2hlaWdodCcpLCAxMClcbiAgICAgICAgKTtcblxuICAgICAgICBkYXRhLmNoYXJzW2NoYXJDb2RlXSA9IHtcbiAgICAgICAgICAgIHhPZmZzZXQ6IHBhcnNlSW50KGxldHRlcnNbaV0uZ2V0QXR0cmlidXRlKCd4b2Zmc2V0JyksIDEwKSxcbiAgICAgICAgICAgIHlPZmZzZXQ6IHBhcnNlSW50KGxldHRlcnNbaV0uZ2V0QXR0cmlidXRlKCd5b2Zmc2V0JyksIDEwKSxcbiAgICAgICAgICAgIHhBZHZhbmNlOiBwYXJzZUludChsZXR0ZXJzW2ldLmdldEF0dHJpYnV0ZSgneGFkdmFuY2UnKSwgMTApLFxuICAgICAgICAgICAga2VybmluZzoge30sXG4gICAgICAgICAgICB0ZXh0dXJlOiBuZXcgY29yZS5UZXh0dXJlKHRleHR1cmUuYmFzZVRleHR1cmUsIHRleHR1cmVSZWN0KVxuXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgLy9wYXJzZSBrZXJuaW5nc1xuICAgIHZhciBrZXJuaW5ncyA9IHJlc291cmNlLmRhdGEuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2tlcm5pbmcnKTtcbiAgICBmb3IgKGkgPSAwOyBpIDwga2VybmluZ3MubGVuZ3RoOyBpKyspXG4gICAge1xuICAgICAgICB2YXIgZmlyc3QgPSBwYXJzZUludChrZXJuaW5nc1tpXS5nZXRBdHRyaWJ1dGUoJ2ZpcnN0JyksIDEwKTtcbiAgICAgICAgdmFyIHNlY29uZCA9IHBhcnNlSW50KGtlcm5pbmdzW2ldLmdldEF0dHJpYnV0ZSgnc2Vjb25kJyksIDEwKTtcbiAgICAgICAgdmFyIGFtb3VudCA9IHBhcnNlSW50KGtlcm5pbmdzW2ldLmdldEF0dHJpYnV0ZSgnYW1vdW50JyksIDEwKTtcblxuICAgICAgICBkYXRhLmNoYXJzW3NlY29uZF0ua2VybmluZ1tmaXJzdF0gPSBhbW91bnQ7XG4gICAgfVxuXG4gICAgcmVzb3VyY2UuYml0bWFwRm9udCA9IGRhdGE7XG5cbiAgICAvLyBJJ20gbGVhdmluZyB0aGlzIGFzIGEgdGVtcG9yYXJ5IGZpeCBzbyB3ZSBjYW4gdGVzdCB0aGUgYml0bWFwIGZvbnRzIGluIHYzXG4gICAgLy8gYnV0IGl0J3MgdmVyeSBsaWtlbHkgdG8gY2hhbmdlXG4gICAgZXh0cmFzLkJpdG1hcFRleHQuZm9udHNbZGF0YS5mb250XSA9IGRhdGE7XG59XG5cblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoKVxue1xuICAgIHJldHVybiBmdW5jdGlvbiAocmVzb3VyY2UsIG5leHQpXG4gICAge1xuICAgICAgICAvLyBza2lwIGlmIG5vIGRhdGEgb3Igbm90IHhtbCBkYXRhXG4gICAgICAgIGlmICghcmVzb3VyY2UuZGF0YSB8fCAhcmVzb3VyY2UuaXNYbWwpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiBuZXh0KCk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBza2lwIGlmIG5vdCBiaXRtYXAgZm9udCBkYXRhLCB1c2luZyBzb21lIHNpbGx5IGR1Y2stdHlwaW5nXG4gICAgICAgIGlmIChcbiAgICAgICAgICAgIHJlc291cmNlLmRhdGEuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ3BhZ2UnKS5sZW5ndGggPT09IDAgfHxcbiAgICAgICAgICAgIHJlc291cmNlLmRhdGEuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2luZm8nKS5sZW5ndGggPT09IDAgfHxcbiAgICAgICAgICAgIHJlc291cmNlLmRhdGEuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2luZm8nKVswXS5nZXRBdHRyaWJ1dGUoJ2ZhY2UnKSA9PT0gbnVsbFxuICAgICAgICAgICAgKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gbmV4dCgpO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIHhtbFVybCA9IHBhdGguZGlybmFtZShyZXNvdXJjZS51cmwpO1xuXG4gICAgICAgIGlmICh4bWxVcmwgPT09ICcuJykge1xuICAgICAgICAgICAgeG1sVXJsID0gJyc7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5iYXNlVXJsICYmIHhtbFVybCkge1xuICAgICAgICAgICAgLy8gaWYgYmFzZXVybCBoYXMgYSB0cmFpbGluZyBzbGFzaCB0aGVuIGFkZCBvbmUgdG8geG1sVXJsIHNvIHRoZSByZXBsYWNlIHdvcmtzIGJlbG93XG4gICAgICAgICAgICBpZiAodGhpcy5iYXNlVXJsLmNoYXJBdCh0aGlzLmJhc2VVcmwubGVuZ3RoIC0gMSkgPT09ICcvJykge1xuICAgICAgICAgICAgICAgIHhtbFVybCArPSAnLyc7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIHJlbW92ZSBiYXNlVXJsIGZyb20geG1sVXJsXG4gICAgICAgICAgICB4bWxVcmwgPSB4bWxVcmwucmVwbGFjZSh0aGlzLmJhc2VVcmwsICcnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGlmIHRoZXJlIGlzIGFuIHhtbFVybCBub3csIGl0IG5lZWRzIGEgdHJhaWxpbmcgc2xhc2guIEVuc3VyZSB0aGF0IGl0IGRvZXMgaWYgdGhlIHN0cmluZyBpc24ndCBlbXB0eS5cbiAgICAgICAgaWYgKHhtbFVybCAmJiB4bWxVcmwuY2hhckF0KHhtbFVybC5sZW5ndGggLSAxKSAhPT0gJy8nKSB7XG4gICAgICAgICAgICB4bWxVcmwgKz0gJy8nO1xuICAgICAgICB9XG4gICAgICAgIHZhciB0ZXh0dXJlVXJsID0geG1sVXJsICsgcmVzb3VyY2UuZGF0YS5nZXRFbGVtZW50c0J5VGFnTmFtZSgncGFnZScpWzBdLmdldEF0dHJpYnV0ZSgnZmlsZScpO1xuICAgICAgICBpZiAoY29yZS51dGlscy5UZXh0dXJlQ2FjaGVbdGV4dHVyZVVybF0pIHtcbiAgICAgICAgICAgIC8vcmV1c2UgZXhpc3RpbmcgdGV4dHVyZVxuICAgICAgICAgICAgcGFyc2UocmVzb3VyY2UsIGNvcmUudXRpbHMuVGV4dHVyZUNhY2hlW3RleHR1cmVVcmxdKTtcbiAgICAgICAgICAgIG5leHQoKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHZhciBsb2FkT3B0aW9ucyA9IHtcbiAgICAgICAgICAgICAgICBjcm9zc09yaWdpbjogcmVzb3VyY2UuY3Jvc3NPcmlnaW4sXG4gICAgICAgICAgICAgICAgbG9hZFR5cGU6IFJlc291cmNlLkxPQURfVFlQRS5JTUFHRSxcbiAgICAgICAgICAgICAgICBtZXRhZGF0YTogcmVzb3VyY2UubWV0YWRhdGEuaW1hZ2VNZXRhZGF0YVxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIC8vIGxvYWQgdGhlIHRleHR1cmUgZm9yIHRoZSBmb250XG4gICAgICAgICAgICB0aGlzLmFkZChyZXNvdXJjZS5uYW1lICsgJ19pbWFnZScsIHRleHR1cmVVcmwsIGxvYWRPcHRpb25zLCBmdW5jdGlvbiAocmVzKSB7XG4gICAgICAgICAgICAgICAgcGFyc2UocmVzb3VyY2UsIHJlcy50ZXh0dXJlKTtcbiAgICAgICAgICAgICAgICBuZXh0KCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH07XG59O1xuIiwiLyoqXG4gKiBAZmlsZSAgICAgICAgTWFpbiBleHBvcnQgb2YgdGhlIFBJWEkgbG9hZGVycyBsaWJyYXJ5XG4gKiBAYXV0aG9yICAgICAgTWF0IEdyb3ZlcyA8bWF0QGdvb2Rib3lkaWdpdGFsLmNvbT5cbiAqIEBjb3B5cmlnaHQgICAyMDEzLTIwMTUgR29vZEJveURpZ2l0YWxcbiAqIEBsaWNlbnNlICAgICB7QGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL3BpeGlqcy9waXhpLmpzL2Jsb2IvbWFzdGVyL0xJQ0VOU0V8TUlUIExpY2Vuc2V9XG4gKi9cblxuLyoqXG4gKiBAbmFtZXNwYWNlIFBJWEkubG9hZGVyc1xuICovXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgICBMb2FkZXI6ICAgICAgICAgICAgIHJlcXVpcmUoJy4vbG9hZGVyJyksXG5cbiAgICAvLyBwYXJzZXJzXG4gICAgYml0bWFwRm9udFBhcnNlcjogICByZXF1aXJlKCcuL2JpdG1hcEZvbnRQYXJzZXInKSxcbiAgICBzcHJpdGVzaGVldFBhcnNlcjogIHJlcXVpcmUoJy4vc3ByaXRlc2hlZXRQYXJzZXInKSxcbiAgICB0ZXh0dXJlUGFyc2VyOiAgICAgIHJlcXVpcmUoJy4vdGV4dHVyZVBhcnNlcicpLFxuICAgIFJlc291cmNlOiAgICAgICAgICAgcmVxdWlyZSgncmVzb3VyY2UtbG9hZGVyJykuUmVzb3VyY2Vcbn07XG4iLCJ2YXIgUmVzb3VyY2VMb2FkZXIgPSByZXF1aXJlKCdyZXNvdXJjZS1sb2FkZXInKSxcbiAgICB0ZXh0dXJlUGFyc2VyID0gcmVxdWlyZSgnLi90ZXh0dXJlUGFyc2VyJyksXG4gICAgc3ByaXRlc2hlZXRQYXJzZXIgPSByZXF1aXJlKCcuL3Nwcml0ZXNoZWV0UGFyc2VyJyksXG4gICAgYml0bWFwRm9udFBhcnNlciA9IHJlcXVpcmUoJy4vYml0bWFwRm9udFBhcnNlcicpO1xuXG4vKipcbiAqXG4gKiBUaGUgbmV3IGxvYWRlciwgZXh0ZW5kcyBSZXNvdXJjZSBMb2FkZXIgYnkgQ2hhZCBFbmdsZXIgOiBodHRwczovL2dpdGh1Yi5jb20vZW5nbGVyY2ovcmVzb3VyY2UtbG9hZGVyXG4gKlxuICogYGBganNcbiAqIHZhciBsb2FkZXIgPSBQSVhJLmxvYWRlcjsgLy8gcGl4aSBleHBvc2VzIGEgcHJlbWFkZSBpbnN0YW5jZSBmb3IgeW91IHRvIHVzZS5cbiAqIC8vb3JcbiAqIHZhciBsb2FkZXIgPSBuZXcgUElYSS5sb2FkZXJzLkxvYWRlcigpOyAvLyB5b3UgY2FuIGFsc28gY3JlYXRlIHlvdXIgb3duIGlmIHlvdSB3YW50XG4gKlxuICogbG9hZGVyLmFkZCgnYnVubnknLFwiZGF0YS9idW5ueS5wbmdcIik7XG4gKlxuICogbG9hZGVyLm9uY2UoJ2NvbXBsZXRlJyxvbkFzc2V0c0xvYWRlZCk7XG4gKlxuICogbG9hZGVyLmxvYWQoKTtcbiAqIGBgYFxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5SZXNvdXJjZUxvYWRlclxuICogQG1lbWJlcm9mIFBJWEkubG9hZGVyc1xuICogQHBhcmFtIFtiYXNlVXJsPScnXSB7c3RyaW5nfSBUaGUgYmFzZSB1cmwgZm9yIGFsbCByZXNvdXJjZXMgbG9hZGVkIGJ5IHRoaXMgbG9hZGVyLlxuICogQHBhcmFtIFtjb25jdXJyZW5jeT0xMF0ge251bWJlcn0gVGhlIG51bWJlciBvZiByZXNvdXJjZXMgdG8gbG9hZCBjb25jdXJyZW50bHkuXG4gKi9cbmZ1bmN0aW9uIExvYWRlcihiYXNlVXJsLCBjb25jdXJyZW5jeSlcbntcbiAgICBSZXNvdXJjZUxvYWRlci5jYWxsKHRoaXMsIGJhc2VVcmwsIGNvbmN1cnJlbmN5KTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgTG9hZGVyLl9waXhpTWlkZGxld2FyZS5sZW5ndGg7ICsraSkge1xuICAgICAgICB0aGlzLnVzZShMb2FkZXIuX3BpeGlNaWRkbGV3YXJlW2ldKCkpO1xuICAgIH1cbn1cblxuTG9hZGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoUmVzb3VyY2VMb2FkZXIucHJvdG90eXBlKTtcbkxvYWRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBMb2FkZXI7XG5cbm1vZHVsZS5leHBvcnRzID0gTG9hZGVyO1xuXG5Mb2FkZXIuX3BpeGlNaWRkbGV3YXJlID0gW1xuICAgIC8vIHBhcnNlIGFueSBibG9iIGludG8gbW9yZSB1c2FibGUgb2JqZWN0cyAoZS5nLiBJbWFnZSlcbiAgICBSZXNvdXJjZUxvYWRlci5taWRkbGV3YXJlLnBhcnNpbmcuYmxvYixcbiAgICAvLyBwYXJzZSBhbnkgSW1hZ2Ugb2JqZWN0cyBpbnRvIHRleHR1cmVzXG4gICAgdGV4dHVyZVBhcnNlcixcbiAgICAvLyBwYXJzZSBhbnkgc3ByaXRlc2hlZXQgZGF0YSBpbnRvIG11bHRpcGxlIHRleHR1cmVzXG4gICAgc3ByaXRlc2hlZXRQYXJzZXIsXG4gICAgLy8gcGFyc2UgYW55IHNwcml0ZXNoZWV0IGRhdGEgaW50byBtdWx0aXBsZSB0ZXh0dXJlc1xuICAgIGJpdG1hcEZvbnRQYXJzZXJcbl07XG5cbkxvYWRlci5hZGRQaXhpTWlkZGxld2FyZSA9IGZ1bmN0aW9uIChmbikge1xuICAgIExvYWRlci5fcGl4aU1pZGRsZXdhcmUucHVzaChmbik7XG59O1xuXG4vLyBBZGQgY3VzdG9tIGV4dGVudGlvbnNcbnZhciBSZXNvdXJjZSA9IFJlc291cmNlTG9hZGVyLlJlc291cmNlO1xuXG5SZXNvdXJjZS5zZXRFeHRlbnNpb25YaHJUeXBlKCdmbnQnLCBSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRS5ET0NVTUVOVCk7XG4iLCJ2YXIgUmVzb3VyY2UgPSByZXF1aXJlKCdyZXNvdXJjZS1sb2FkZXInKS5SZXNvdXJjZSxcbiAgICBwYXRoID0gcmVxdWlyZSgncGF0aCcpLFxuICAgIGNvcmUgPSByZXF1aXJlKCcuLi9jb3JlJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKClcbntcbiAgICByZXR1cm4gZnVuY3Rpb24gKHJlc291cmNlLCBuZXh0KVxuICAgIHtcbiAgICAgICAgLy8gc2tpcCBpZiBubyBkYXRhLCBpdHMgbm90IGpzb24sIG9yIGl0IGlzbid0IHNwcml0ZXNoZWV0IGRhdGFcbiAgICAgICAgaWYgKCFyZXNvdXJjZS5kYXRhIHx8ICFyZXNvdXJjZS5pc0pzb24gfHwgIXJlc291cmNlLmRhdGEuZnJhbWVzKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gbmV4dCgpO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGxvYWRPcHRpb25zID0ge1xuICAgICAgICAgICAgY3Jvc3NPcmlnaW46IHJlc291cmNlLmNyb3NzT3JpZ2luLFxuICAgICAgICAgICAgbG9hZFR5cGU6IFJlc291cmNlLkxPQURfVFlQRS5JTUFHRSxcbiAgICAgICAgICAgIG1ldGFkYXRhOiByZXNvdXJjZS5tZXRhZGF0YS5pbWFnZU1ldGFkYXRhXG4gICAgICAgIH07XG5cbiAgICAgICAgdmFyIHJvdXRlID0gcGF0aC5kaXJuYW1lKHJlc291cmNlLnVybC5yZXBsYWNlKHRoaXMuYmFzZVVybCwgJycpKTtcblxuICAgICAgICB2YXIgcmVzb2x1dGlvbiA9IGNvcmUudXRpbHMuZ2V0UmVzb2x1dGlvbk9mVXJsKCByZXNvdXJjZS51cmwgKTtcblxuICAgICAgICAvLyBsb2FkIHRoZSBpbWFnZSBmb3IgdGhpcyBzaGVldFxuICAgICAgICB0aGlzLmFkZChyZXNvdXJjZS5uYW1lICsgJ19pbWFnZScsIHJvdXRlICsgJy8nICsgcmVzb3VyY2UuZGF0YS5tZXRhLmltYWdlLCBsb2FkT3B0aW9ucywgZnVuY3Rpb24gKHJlcylcbiAgICAgICAge1xuICAgICAgICAgICAgcmVzb3VyY2UudGV4dHVyZXMgPSB7fTtcblxuICAgICAgICAgICAgdmFyIGZyYW1lcyA9IHJlc291cmNlLmRhdGEuZnJhbWVzO1xuXG4gICAgICAgICAgICBmb3IgKHZhciBpIGluIGZyYW1lcylcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB2YXIgcmVjdCA9IGZyYW1lc1tpXS5mcmFtZTtcblxuICAgICAgICAgICAgICAgIGlmIChyZWN0KVxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHNpemUgPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICB2YXIgdHJpbSA9IG51bGw7XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKGZyYW1lc1tpXS5yb3RhdGVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzaXplID0gbmV3IGNvcmUuUmVjdGFuZ2xlKHJlY3QueCwgcmVjdC55LCByZWN0LmgsIHJlY3Qudyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzaXplID0gbmV3IGNvcmUuUmVjdGFuZ2xlKHJlY3QueCwgcmVjdC55LCByZWN0LncsIHJlY3QuaCk7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAvLyAgQ2hlY2sgdG8gc2VlIGlmIHRoZSBzcHJpdGUgaXMgdHJpbW1lZFxuICAgICAgICAgICAgICAgICAgICBpZiAoZnJhbWVzW2ldLnRyaW1tZWQpXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRyaW0gPSBuZXcgY29yZS5SZWN0YW5nbGUoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJhbWVzW2ldLnNwcml0ZVNvdXJjZVNpemUueCAvIHJlc29sdXRpb24sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJhbWVzW2ldLnNwcml0ZVNvdXJjZVNpemUueSAvIHJlc29sdXRpb24sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJhbWVzW2ldLnNvdXJjZVNpemUudyAvIHJlc29sdXRpb24sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJhbWVzW2ldLnNvdXJjZVNpemUuaCAvIHJlc29sdXRpb25cbiAgICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgLy8gZmxpcCB0aGUgd2lkdGggYW5kIGhlaWdodCFcbiAgICAgICAgICAgICAgICAgICAgaWYgKGZyYW1lc1tpXS5yb3RhdGVkKVxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgdGVtcCA9IHNpemUud2lkdGg7XG4gICAgICAgICAgICAgICAgICAgICAgICBzaXplLndpZHRoID0gc2l6ZS5oZWlnaHQ7XG4gICAgICAgICAgICAgICAgICAgICAgICBzaXplLmhlaWdodCA9IHRlbXA7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBzaXplLnggLz0gcmVzb2x1dGlvbjtcbiAgICAgICAgICAgICAgICAgICAgc2l6ZS55IC89IHJlc29sdXRpb247XG4gICAgICAgICAgICAgICAgICAgIHNpemUud2lkdGggLz0gcmVzb2x1dGlvbjtcbiAgICAgICAgICAgICAgICAgICAgc2l6ZS5oZWlnaHQgLz0gcmVzb2x1dGlvbjtcblxuICAgICAgICAgICAgICAgICAgICByZXNvdXJjZS50ZXh0dXJlc1tpXSA9IG5ldyBjb3JlLlRleHR1cmUocmVzLnRleHR1cmUuYmFzZVRleHR1cmUsIHNpemUsIHNpemUuY2xvbmUoKSwgdHJpbSwgZnJhbWVzW2ldLnJvdGF0ZWQpO1xuXG4gICAgICAgICAgICAgICAgICAgIC8vIGxldHMgYWxzbyBhZGQgdGhlIGZyYW1lIHRvIHBpeGkncyBnbG9iYWwgY2FjaGUgZm9yIGZyb21GcmFtZSBhbmQgZnJvbUltYWdlIGZ1bmN0aW9uc1xuICAgICAgICAgICAgICAgICAgICBjb3JlLnV0aWxzLlRleHR1cmVDYWNoZVtpXSA9IHJlc291cmNlLnRleHR1cmVzW2ldO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgbmV4dCgpO1xuICAgICAgICB9KTtcbiAgICB9O1xufTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vY29yZScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICgpXG57XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChyZXNvdXJjZSwgbmV4dClcbiAgICB7XG4gICAgICAgIC8vIGNyZWF0ZSBhIG5ldyB0ZXh0dXJlIGlmIHRoZSBkYXRhIGlzIGFuIEltYWdlIG9iamVjdFxuICAgICAgICBpZiAocmVzb3VyY2UuZGF0YSAmJiByZXNvdXJjZS5pc0ltYWdlKVxuICAgICAgICB7XG4gICAgICAgICAgICB2YXIgYmFzZVRleHR1cmUgPSBuZXcgY29yZS5CYXNlVGV4dHVyZShyZXNvdXJjZS5kYXRhLCBudWxsLCBjb3JlLnV0aWxzLmdldFJlc29sdXRpb25PZlVybChyZXNvdXJjZS51cmwpKTtcbiAgICAgICAgICAgIGJhc2VUZXh0dXJlLmltYWdlVXJsID0gcmVzb3VyY2UudXJsO1xuICAgICAgICAgICAgcmVzb3VyY2UudGV4dHVyZSA9IG5ldyBjb3JlLlRleHR1cmUoYmFzZVRleHR1cmUpO1xuICAgICAgICAgICAgLy8gbGV0cyBhbHNvIGFkZCB0aGUgZnJhbWUgdG8gcGl4aSdzIGdsb2JhbCBjYWNoZSBmb3IgZnJvbUZyYW1lIGFuZCBmcm9tSW1hZ2UgZnVjbnRpb25zXG4gICAgICAgICAgICBjb3JlLnV0aWxzLkJhc2VUZXh0dXJlQ2FjaGVbcmVzb3VyY2UudXJsXSA9IGJhc2VUZXh0dXJlO1xuICAgICAgICAgICAgY29yZS51dGlscy5UZXh0dXJlQ2FjaGVbcmVzb3VyY2UudXJsXSA9IHJlc291cmNlLnRleHR1cmU7XG4gICAgICAgIH1cblxuICAgICAgICBuZXh0KCk7XG4gICAgfTtcbn07XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uL2NvcmUnKSxcbiAgICB0ZW1wUG9pbnQgPSBuZXcgY29yZS5Qb2ludCgpLFxuICAgIHRlbXBQb2x5Z29uID0gbmV3IGNvcmUuUG9seWdvbigpO1xuXG4vKipcbiAqIEJhc2UgbWVzaCBjbGFzc1xuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLkNvbnRhaW5lclxuICogQG1lbWJlcm9mIFBJWEkubWVzaFxuICogQHBhcmFtIHRleHR1cmUge1BJWEkuVGV4dHVyZX0gVGhlIHRleHR1cmUgdG8gdXNlXG4gKiBAcGFyYW0gW3ZlcnRpY2VzXSB7RmxvYXQzMkFycmF5fSBpZiB5b3Ugd2FudCB0byBzcGVjaWZ5IHRoZSB2ZXJ0aWNlc1xuICogQHBhcmFtIFt1dnNdIHtGbG9hdDMyQXJyYXl9IGlmIHlvdSB3YW50IHRvIHNwZWNpZnkgdGhlIHV2c1xuICogQHBhcmFtIFtpbmRpY2VzXSB7VWludDE2QXJyYXl9IGlmIHlvdSB3YW50IHRvIHNwZWNpZnkgdGhlIGluZGljZXNcbiAqIEBwYXJhbSBbZHJhd01vZGVdIHtudW1iZXJ9IHRoZSBkcmF3TW9kZSwgY2FuIGJlIGFueSBvZiB0aGUgTWVzaC5EUkFXX01PREVTIGNvbnN0c1xuICovXG5mdW5jdGlvbiBNZXNoKHRleHR1cmUsIHZlcnRpY2VzLCB1dnMsIGluZGljZXMsIGRyYXdNb2RlKVxue1xuICAgIGNvcmUuQ29udGFpbmVyLmNhbGwodGhpcyk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgdGV4dHVyZSBvZiB0aGUgTWVzaFxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5UZXh0dXJlfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fdGV4dHVyZSA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgVXZzIG9mIHRoZSBNZXNoXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtGbG9hdDMyQXJyYXl9XG4gICAgICovXG4gICAgdGhpcy51dnMgPSB1dnMgfHwgbmV3IEZsb2F0MzJBcnJheShbMCwgMCxcbiAgICAgICAgMSwgMCxcbiAgICAgICAgMSwgMSxcbiAgICAgICAgMCwgMV0pO1xuXG4gICAgLyoqXG4gICAgICogQW4gYXJyYXkgb2YgdmVydGljZXNcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge0Zsb2F0MzJBcnJheX1cbiAgICAgKi9cbiAgICB0aGlzLnZlcnRpY2VzID0gdmVydGljZXMgfHwgbmV3IEZsb2F0MzJBcnJheShbMCwgMCxcbiAgICAgICAgMTAwLCAwLFxuICAgICAgICAxMDAsIDEwMCxcbiAgICAgICAgMCwgMTAwXSk7XG5cbiAgICAvKlxuICAgICAqIEBtZW1iZXIge1VpbnQxNkFycmF5fSBBbiBhcnJheSBjb250YWluaW5nIHRoZSBpbmRpY2VzIG9mIHRoZSB2ZXJ0aWNlc1xuICAgICAqL1xuICAgIC8vICBUT0RPIGF1dG8gZ2VuZXJhdGUgdGhpcyBiYXNlZCBvbiBkcmF3IG1vZGUhXG4gICAgdGhpcy5pbmRpY2VzID0gaW5kaWNlcyB8fCBuZXcgVWludDE2QXJyYXkoWzAsIDEsIDMsIDJdKTtcblxuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgdGhlIE1lc2ggaXMgZGlydHkgb3Igbm90XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqL1xuICAgIHRoaXMuZGlydHkgPSB0cnVlO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGJsZW5kIG1vZGUgdG8gYmUgYXBwbGllZCB0byB0aGUgc3ByaXRlLiBTZXQgdG8gYFBJWEkuQkxFTkRfTU9ERVMuTk9STUFMYCB0byByZW1vdmUgYW55IGJsZW5kIG1vZGUuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgUElYSS5CTEVORF9NT0RFUy5OT1JNQUxcbiAgICAgKiBAc2VlIFBJWEkuQkxFTkRfTU9ERVNcbiAgICAgKi9cbiAgICB0aGlzLmJsZW5kTW9kZSA9IGNvcmUuQkxFTkRfTU9ERVMuTk9STUFMO1xuXG4gICAgLyoqXG4gICAgICogVHJpYW5nbGVzIGluIGNhbnZhcyBtb2RlIGFyZSBhdXRvbWF0aWNhbGx5IGFudGlhbGlhc2VkLCB1c2UgdGhpcyB2YWx1ZSB0byBmb3JjZSB0cmlhbmdsZXMgdG8gb3ZlcmxhcCBhIGJpdCB3aXRoIGVhY2ggb3RoZXIuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy5jYW52YXNQYWRkaW5nID0gMDtcblxuICAgIC8qKlxuICAgICAqIFRoZSB3YXkgdGhlIE1lc2ggc2hvdWxkIGJlIGRyYXduLCBjYW4gYmUgYW55IG9mIHRoZSB7QGxpbmsgUElYSS5tZXNoLk1lc2guRFJBV19NT0RFU30gY29uc3RzXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQHNlZSBQSVhJLm1lc2guTWVzaC5EUkFXX01PREVTXG4gICAgICovXG4gICAgdGhpcy5kcmF3TW9kZSA9IGRyYXdNb2RlIHx8IE1lc2guRFJBV19NT0RFUy5UUklBTkdMRV9NRVNIO1xuXG4gICAgLy8gcnVuIHRleHR1cmUgc2V0dGVyO1xuICAgIHRoaXMudGV4dHVyZSA9IHRleHR1cmU7XG5cbiAgICAgLyoqXG4gICAgICogVGhlIGRlZmF1bHQgc2hhZGVyIHRoYXQgaXMgdXNlZCBpZiBhIG1lc2ggZG9lc24ndCBoYXZlIGEgbW9yZSBzcGVjaWZpYyBvbmUuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlNoYWRlcn1cbiAgICAgKi9cbiAgICB0aGlzLnNoYWRlciA9IG51bGw7XG59XG5cbi8vIGNvbnN0cnVjdG9yXG5NZXNoLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoY29yZS5Db250YWluZXIucHJvdG90eXBlKTtcbk1lc2gucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gTWVzaDtcbm1vZHVsZS5leHBvcnRzID0gTWVzaDtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoTWVzaC5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBUaGUgdGV4dHVyZSB0aGF0IHRoZSBzcHJpdGUgaXMgdXNpbmdcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuVGV4dHVyZX1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5tZXNoLk1lc2gjXG4gICAgICovXG4gICAgdGV4dHVyZToge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiAgdGhpcy5fdGV4dHVyZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGlmICh0aGlzLl90ZXh0dXJlID09PSB2YWx1ZSlcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuX3RleHR1cmUgPSB2YWx1ZTtcblxuICAgICAgICAgICAgaWYgKHZhbHVlKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIC8vIHdhaXQgZm9yIHRoZSB0ZXh0dXJlIHRvIGxvYWRcbiAgICAgICAgICAgICAgICBpZiAodmFsdWUuYmFzZVRleHR1cmUuaGFzTG9hZGVkKVxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fb25UZXh0dXJlVXBkYXRlKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlLm9uY2UoJ3VwZGF0ZScsIHRoaXMuX29uVGV4dHVyZVVwZGF0ZSwgdGhpcyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxufSk7XG5cbi8qKlxuICogUmVuZGVycyB0aGUgb2JqZWN0IHVzaW5nIHRoZSBXZWJHTCByZW5kZXJlclxuICpcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5XZWJHTFJlbmRlcmVyfSBhIHJlZmVyZW5jZSB0byB0aGUgV2ViR0wgcmVuZGVyZXJcbiAqIEBwcml2YXRlXG4gKi9cbk1lc2gucHJvdG90eXBlLl9yZW5kZXJXZWJHTCA9IGZ1bmN0aW9uIChyZW5kZXJlcilcbntcbiAgICByZW5kZXJlci5zZXRPYmplY3RSZW5kZXJlcihyZW5kZXJlci5wbHVnaW5zLm1lc2gpO1xuICAgIHJlbmRlcmVyLnBsdWdpbnMubWVzaC5yZW5kZXIodGhpcyk7XG59O1xuXG4vKipcbiAqIFJlbmRlcnMgdGhlIG9iamVjdCB1c2luZyB0aGUgQ2FudmFzIHJlbmRlcmVyXG4gKlxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLkNhbnZhc1JlbmRlcmVyfVxuICogQHByaXZhdGVcbiAqL1xuTWVzaC5wcm90b3R5cGUuX3JlbmRlckNhbnZhcyA9IGZ1bmN0aW9uIChyZW5kZXJlcilcbntcbiAgICB2YXIgY29udGV4dCA9IHJlbmRlcmVyLmNvbnRleHQ7XG5cbiAgICB2YXIgdHJhbnNmb3JtID0gdGhpcy53b3JsZFRyYW5zZm9ybTtcblxuICAgIGlmIChyZW5kZXJlci5yb3VuZFBpeGVscylcbiAgICB7XG4gICAgICAgIGNvbnRleHQuc2V0VHJhbnNmb3JtKHRyYW5zZm9ybS5hLCB0cmFuc2Zvcm0uYiwgdHJhbnNmb3JtLmMsIHRyYW5zZm9ybS5kLCB0cmFuc2Zvcm0udHggfCAwLCB0cmFuc2Zvcm0udHkgfCAwKTtcbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgY29udGV4dC5zZXRUcmFuc2Zvcm0odHJhbnNmb3JtLmEsIHRyYW5zZm9ybS5iLCB0cmFuc2Zvcm0uYywgdHJhbnNmb3JtLmQsIHRyYW5zZm9ybS50eCwgdHJhbnNmb3JtLnR5KTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5kcmF3TW9kZSA9PT0gTWVzaC5EUkFXX01PREVTLlRSSUFOR0xFX01FU0gpXG4gICAge1xuICAgICAgICB0aGlzLl9yZW5kZXJDYW52YXNUcmlhbmdsZU1lc2goY29udGV4dCk7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHRoaXMuX3JlbmRlckNhbnZhc1RyaWFuZ2xlcyhjb250ZXh0KTtcbiAgICB9XG59O1xuXG4vKipcbiAqIERyYXdzIHRoZSBvYmplY3QgaW4gVHJpYW5nbGUgTWVzaCBtb2RlIHVzaW5nIGNhbnZhc1xuICpcbiAqIEBwYXJhbSBjb250ZXh0IHtDYW52YXNSZW5kZXJpbmdDb250ZXh0MkR9IHRoZSBjdXJyZW50IGRyYXdpbmcgY29udGV4dFxuICogQHByaXZhdGVcbiAqL1xuTWVzaC5wcm90b3R5cGUuX3JlbmRlckNhbnZhc1RyaWFuZ2xlTWVzaCA9IGZ1bmN0aW9uIChjb250ZXh0KVxue1xuICAgIC8vIGRyYXcgdHJpYW5nbGVzISFcbiAgICB2YXIgdmVydGljZXMgPSB0aGlzLnZlcnRpY2VzO1xuICAgIHZhciB1dnMgPSB0aGlzLnV2cztcblxuICAgIHZhciBsZW5ndGggPSB2ZXJ0aWNlcy5sZW5ndGggLyAyO1xuICAgIC8vIHRoaXMuY291bnQrKztcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoIC0gMjsgaSsrKVxuICAgIHtcbiAgICAgICAgLy8gZHJhdyBzb21lIHRyaWFuZ2xlcyFcbiAgICAgICAgdmFyIGluZGV4ID0gaSAqIDI7XG4gICAgICAgIHRoaXMuX3JlbmRlckNhbnZhc0RyYXdUcmlhbmdsZShjb250ZXh0LCB2ZXJ0aWNlcywgdXZzLCBpbmRleCwgKGluZGV4ICsgMiksIChpbmRleCArIDQpKTtcbiAgICB9XG59O1xuXG4vKipcbiAqIERyYXdzIHRoZSBvYmplY3QgaW4gdHJpYW5nbGUgbW9kZSB1c2luZyBjYW52YXNcbiAqXG4gKiBAcGFyYW0gY29udGV4dCB7Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEfSB0aGUgY3VycmVudCBkcmF3aW5nIGNvbnRleHRcbiAqIEBwcml2YXRlXG4gKi9cbk1lc2gucHJvdG90eXBlLl9yZW5kZXJDYW52YXNUcmlhbmdsZXMgPSBmdW5jdGlvbiAoY29udGV4dClcbntcbiAgICAvLyBkcmF3IHRyaWFuZ2xlcyEhXG4gICAgdmFyIHZlcnRpY2VzID0gdGhpcy52ZXJ0aWNlcztcbiAgICB2YXIgdXZzID0gdGhpcy51dnM7XG4gICAgdmFyIGluZGljZXMgPSB0aGlzLmluZGljZXM7XG5cbiAgICB2YXIgbGVuZ3RoID0gaW5kaWNlcy5sZW5ndGg7XG4gICAgLy8gdGhpcy5jb3VudCsrO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7IGkgKz0gMylcbiAgICB7XG4gICAgICAgIC8vIGRyYXcgc29tZSB0cmlhbmdsZXMhXG4gICAgICAgIHZhciBpbmRleDAgPSBpbmRpY2VzW2ldICogMiwgaW5kZXgxID0gaW5kaWNlc1tpICsgMV0gKiAyLCBpbmRleDIgPSBpbmRpY2VzW2kgKyAyXSAqIDI7XG4gICAgICAgIHRoaXMuX3JlbmRlckNhbnZhc0RyYXdUcmlhbmdsZShjb250ZXh0LCB2ZXJ0aWNlcywgdXZzLCBpbmRleDAsIGluZGV4MSwgaW5kZXgyKTtcbiAgICB9XG59O1xuXG4vKipcbiAqIERyYXdzIG9uZSBvZiB0aGUgdHJpYW5nbGVzIHRoYXQgZm9ybSB0aGlzIE1lc2hcbiAqXG4gKiBAcGFyYW0gY29udGV4dCB7Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEfSB0aGUgY3VycmVudCBkcmF3aW5nIGNvbnRleHRcbiAqIEBwYXJhbSB2ZXJ0aWNlcyB7RmxvYXQzMkFycmF5fSBhIHJlZmVyZW5jZSB0byB0aGUgdmVydGljZXMgb2YgdGhlIE1lc2hcbiAqIEBwYXJhbSB1dnMge0Zsb2F0MzJBcnJheX0gYSByZWZlcmVuY2UgdG8gdGhlIHV2cyBvZiB0aGUgTWVzaFxuICogQHBhcmFtIGluZGV4MCB7bnVtYmVyfSB0aGUgaW5kZXggb2YgdGhlIGZpcnN0IHZlcnRleFxuICogQHBhcmFtIGluZGV4MSB7bnVtYmVyfSB0aGUgaW5kZXggb2YgdGhlIHNlY29uZCB2ZXJ0ZXhcbiAqIEBwYXJhbSBpbmRleDIge251bWJlcn0gdGhlIGluZGV4IG9mIHRoZSB0aGlyZCB2ZXJ0ZXhcbiAqIEBwcml2YXRlXG4gKi9cbk1lc2gucHJvdG90eXBlLl9yZW5kZXJDYW52YXNEcmF3VHJpYW5nbGUgPSBmdW5jdGlvbiAoY29udGV4dCwgdmVydGljZXMsIHV2cywgaW5kZXgwLCBpbmRleDEsIGluZGV4MilcbntcbiAgICB2YXIgdGV4dHVyZVNvdXJjZSA9IHRoaXMuX3RleHR1cmUuYmFzZVRleHR1cmUuc291cmNlO1xuICAgIHZhciB0ZXh0dXJlV2lkdGggPSB0aGlzLl90ZXh0dXJlLmJhc2VUZXh0dXJlLndpZHRoO1xuICAgIHZhciB0ZXh0dXJlSGVpZ2h0ID0gdGhpcy5fdGV4dHVyZS5iYXNlVGV4dHVyZS5oZWlnaHQ7XG5cbiAgICB2YXIgeDAgPSB2ZXJ0aWNlc1tpbmRleDBdLCB4MSA9IHZlcnRpY2VzW2luZGV4MV0sIHgyID0gdmVydGljZXNbaW5kZXgyXTtcbiAgICB2YXIgeTAgPSB2ZXJ0aWNlc1tpbmRleDAgKyAxXSwgeTEgPSB2ZXJ0aWNlc1tpbmRleDEgKyAxXSwgeTIgPSB2ZXJ0aWNlc1tpbmRleDIgKyAxXTtcblxuICAgIHZhciB1MCA9IHV2c1tpbmRleDBdICogdGV4dHVyZVdpZHRoLCB1MSA9IHV2c1tpbmRleDFdICogdGV4dHVyZVdpZHRoLCB1MiA9IHV2c1tpbmRleDJdICogdGV4dHVyZVdpZHRoO1xuICAgIHZhciB2MCA9IHV2c1tpbmRleDAgKyAxXSAqIHRleHR1cmVIZWlnaHQsIHYxID0gdXZzW2luZGV4MSArIDFdICogdGV4dHVyZUhlaWdodCwgdjIgPSB1dnNbaW5kZXgyICsgMV0gKiB0ZXh0dXJlSGVpZ2h0O1xuXG4gICAgaWYgKHRoaXMuY2FudmFzUGFkZGluZyA+IDApXG4gICAge1xuICAgICAgICB2YXIgcGFkZGluZ1ggPSB0aGlzLmNhbnZhc1BhZGRpbmcgLyB0aGlzLndvcmxkVHJhbnNmb3JtLmE7XG4gICAgICAgIHZhciBwYWRkaW5nWSA9IHRoaXMuY2FudmFzUGFkZGluZyAvIHRoaXMud29ybGRUcmFuc2Zvcm0uZDtcbiAgICAgICAgdmFyIGNlbnRlclggPSAoeDAgKyB4MSArIHgyKSAvIDM7XG4gICAgICAgIHZhciBjZW50ZXJZID0gKHkwICsgeTEgKyB5MikgLyAzO1xuXG4gICAgICAgIHZhciBub3JtWCA9IHgwIC0gY2VudGVyWDtcbiAgICAgICAgdmFyIG5vcm1ZID0geTAgLSBjZW50ZXJZO1xuXG4gICAgICAgIHZhciBkaXN0ID0gTWF0aC5zcXJ0KG5vcm1YICogbm9ybVggKyBub3JtWSAqIG5vcm1ZKTtcbiAgICAgICAgeDAgPSBjZW50ZXJYICsgKG5vcm1YIC8gZGlzdCkgKiAoZGlzdCArIHBhZGRpbmdYKTtcbiAgICAgICAgeTAgPSBjZW50ZXJZICsgKG5vcm1ZIC8gZGlzdCkgKiAoZGlzdCArIHBhZGRpbmdZKTtcblxuICAgICAgICAvL1xuXG4gICAgICAgIG5vcm1YID0geDEgLSBjZW50ZXJYO1xuICAgICAgICBub3JtWSA9IHkxIC0gY2VudGVyWTtcblxuICAgICAgICBkaXN0ID0gTWF0aC5zcXJ0KG5vcm1YICogbm9ybVggKyBub3JtWSAqIG5vcm1ZKTtcbiAgICAgICAgeDEgPSBjZW50ZXJYICsgKG5vcm1YIC8gZGlzdCkgKiAoZGlzdCArIHBhZGRpbmdYKTtcbiAgICAgICAgeTEgPSBjZW50ZXJZICsgKG5vcm1ZIC8gZGlzdCkgKiAoZGlzdCArIHBhZGRpbmdZKTtcblxuICAgICAgICBub3JtWCA9IHgyIC0gY2VudGVyWDtcbiAgICAgICAgbm9ybVkgPSB5MiAtIGNlbnRlclk7XG5cbiAgICAgICAgZGlzdCA9IE1hdGguc3FydChub3JtWCAqIG5vcm1YICsgbm9ybVkgKiBub3JtWSk7XG4gICAgICAgIHgyID0gY2VudGVyWCArIChub3JtWCAvIGRpc3QpICogKGRpc3QgKyBwYWRkaW5nWCk7XG4gICAgICAgIHkyID0gY2VudGVyWSArIChub3JtWSAvIGRpc3QpICogKGRpc3QgKyBwYWRkaW5nWSk7XG4gICAgfVxuXG4gICAgY29udGV4dC5zYXZlKCk7XG4gICAgY29udGV4dC5iZWdpblBhdGgoKTtcblxuXG4gICAgY29udGV4dC5tb3ZlVG8oeDAsIHkwKTtcbiAgICBjb250ZXh0LmxpbmVUbyh4MSwgeTEpO1xuICAgIGNvbnRleHQubGluZVRvKHgyLCB5Mik7XG5cbiAgICBjb250ZXh0LmNsb3NlUGF0aCgpO1xuXG4gICAgY29udGV4dC5jbGlwKCk7XG5cbiAgICAvLyBDb21wdXRlIG1hdHJpeCB0cmFuc2Zvcm1cbiAgICB2YXIgZGVsdGEgPSAgKHUwICogdjEpICAgICAgKyAodjAgKiB1MikgICAgICArICh1MSAqIHYyKSAgICAgIC0gKHYxICogdTIpICAgICAgLSAodjAgKiB1MSkgICAgICAtICh1MCAqIHYyKTtcbiAgICB2YXIgZGVsdGFBID0gKHgwICogdjEpICAgICAgKyAodjAgKiB4MikgICAgICArICh4MSAqIHYyKSAgICAgIC0gKHYxICogeDIpICAgICAgLSAodjAgKiB4MSkgICAgICAtICh4MCAqIHYyKTtcbiAgICB2YXIgZGVsdGFCID0gKHUwICogeDEpICAgICAgKyAoeDAgKiB1MikgICAgICArICh1MSAqIHgyKSAgICAgIC0gKHgxICogdTIpICAgICAgLSAoeDAgKiB1MSkgICAgICAtICh1MCAqIHgyKTtcbiAgICB2YXIgZGVsdGFDID0gKHUwICogdjEgKiB4MikgKyAodjAgKiB4MSAqIHUyKSArICh4MCAqIHUxICogdjIpIC0gKHgwICogdjEgKiB1MikgLSAodjAgKiB1MSAqIHgyKSAtICh1MCAqIHgxICogdjIpO1xuICAgIHZhciBkZWx0YUQgPSAoeTAgKiB2MSkgICAgICArICh2MCAqIHkyKSAgICAgICsgKHkxICogdjIpICAgICAgLSAodjEgKiB5MikgICAgICAtICh2MCAqIHkxKSAgICAgIC0gKHkwICogdjIpO1xuICAgIHZhciBkZWx0YUUgPSAodTAgKiB5MSkgICAgICArICh5MCAqIHUyKSAgICAgICsgKHUxICogeTIpICAgICAgLSAoeTEgKiB1MikgICAgICAtICh5MCAqIHUxKSAgICAgIC0gKHUwICogeTIpO1xuICAgIHZhciBkZWx0YUYgPSAodTAgKiB2MSAqIHkyKSArICh2MCAqIHkxICogdTIpICsgKHkwICogdTEgKiB2MikgLSAoeTAgKiB2MSAqIHUyKSAtICh2MCAqIHUxICogeTIpIC0gKHUwICogeTEgKiB2Mik7XG5cbiAgICBjb250ZXh0LnRyYW5zZm9ybShkZWx0YUEgLyBkZWx0YSwgZGVsdGFEIC8gZGVsdGEsXG4gICAgICAgIGRlbHRhQiAvIGRlbHRhLCBkZWx0YUUgLyBkZWx0YSxcbiAgICAgICAgZGVsdGFDIC8gZGVsdGEsIGRlbHRhRiAvIGRlbHRhKTtcblxuICAgIGNvbnRleHQuZHJhd0ltYWdlKHRleHR1cmVTb3VyY2UsIDAsIDApO1xuICAgIGNvbnRleHQucmVzdG9yZSgpO1xufTtcblxuXG5cbi8qKlxuICogUmVuZGVycyBhIGZsYXQgTWVzaFxuICpcbiAqIEBwYXJhbSBNZXNoIHtQSVhJLm1lc2guTWVzaH0gVGhlIE1lc2ggdG8gcmVuZGVyXG4gKiBAcHJpdmF0ZVxuICovXG5NZXNoLnByb3RvdHlwZS5yZW5kZXJNZXNoRmxhdCA9IGZ1bmN0aW9uIChNZXNoKVxue1xuICAgIHZhciBjb250ZXh0ID0gdGhpcy5jb250ZXh0O1xuICAgIHZhciB2ZXJ0aWNlcyA9IE1lc2gudmVydGljZXM7XG5cbiAgICB2YXIgbGVuZ3RoID0gdmVydGljZXMubGVuZ3RoLzI7XG4gICAgLy8gdGhpcy5jb3VudCsrO1xuXG4gICAgY29udGV4dC5iZWdpblBhdGgoKTtcbiAgICBmb3IgKHZhciBpPTE7IGkgPCBsZW5ndGgtMjsgaSsrKVxuICAgIHtcbiAgICAgICAgLy8gZHJhdyBzb21lIHRyaWFuZ2xlcyFcbiAgICAgICAgdmFyIGluZGV4ID0gaSoyO1xuXG4gICAgICAgIHZhciB4MCA9IHZlcnRpY2VzW2luZGV4XSwgICB4MSA9IHZlcnRpY2VzW2luZGV4KzJdLCB4MiA9IHZlcnRpY2VzW2luZGV4KzRdO1xuICAgICAgICB2YXIgeTAgPSB2ZXJ0aWNlc1tpbmRleCsxXSwgeTEgPSB2ZXJ0aWNlc1tpbmRleCszXSwgeTIgPSB2ZXJ0aWNlc1tpbmRleCs1XTtcblxuICAgICAgICBjb250ZXh0Lm1vdmVUbyh4MCwgeTApO1xuICAgICAgICBjb250ZXh0LmxpbmVUbyh4MSwgeTEpO1xuICAgICAgICBjb250ZXh0LmxpbmVUbyh4MiwgeTIpO1xuICAgIH1cblxuICAgIGNvbnRleHQuZmlsbFN0eWxlID0gJyNGRjAwMDAnO1xuICAgIGNvbnRleHQuZmlsbCgpO1xuICAgIGNvbnRleHQuY2xvc2VQYXRoKCk7XG59O1xuXG4vKipcbiAqIFdoZW4gdGhlIHRleHR1cmUgaXMgdXBkYXRlZCwgdGhpcyBldmVudCB3aWxsIGZpcmUgdG8gdXBkYXRlIHRoZSBzY2FsZSBhbmQgZnJhbWVcbiAqXG4gKiBAcGFyYW0gZXZlbnRcbiAqIEBwcml2YXRlXG4gKi9cbk1lc2gucHJvdG90eXBlLl9vblRleHR1cmVVcGRhdGUgPSBmdW5jdGlvbiAoKVxue1xuICAgIHRoaXMudXBkYXRlRnJhbWUgPSB0cnVlO1xufTtcblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBib3VuZHMgb2YgdGhlIG1lc2ggYXMgYSByZWN0YW5nbGUuIFRoZSBib3VuZHMgY2FsY3VsYXRpb24gdGFrZXMgdGhlIHdvcmxkVHJhbnNmb3JtIGludG8gYWNjb3VudC5cbiAqXG4gKiBAcGFyYW0gbWF0cml4IHtQSVhJLk1hdHJpeH0gdGhlIHRyYW5zZm9ybWF0aW9uIG1hdHJpeCBvZiB0aGUgc3ByaXRlXG4gKiBAcmV0dXJuIHtQSVhJLlJlY3RhbmdsZX0gdGhlIGZyYW1pbmcgcmVjdGFuZ2xlXG4gKi9cbk1lc2gucHJvdG90eXBlLmdldEJvdW5kcyA9IGZ1bmN0aW9uIChtYXRyaXgpXG57XG4gICAgaWYgKCF0aGlzLl9jdXJyZW50Qm91bmRzKSB7XG4gICAgICAgIHZhciB3b3JsZFRyYW5zZm9ybSA9IG1hdHJpeCB8fCB0aGlzLndvcmxkVHJhbnNmb3JtO1xuXG4gICAgICAgIHZhciBhID0gd29ybGRUcmFuc2Zvcm0uYTtcbiAgICAgICAgdmFyIGIgPSB3b3JsZFRyYW5zZm9ybS5iO1xuICAgICAgICB2YXIgYyA9IHdvcmxkVHJhbnNmb3JtLmM7XG4gICAgICAgIHZhciBkID0gd29ybGRUcmFuc2Zvcm0uZDtcbiAgICAgICAgdmFyIHR4ID0gd29ybGRUcmFuc2Zvcm0udHg7XG4gICAgICAgIHZhciB0eSA9IHdvcmxkVHJhbnNmb3JtLnR5O1xuXG4gICAgICAgIHZhciBtYXhYID0gLUluZmluaXR5O1xuICAgICAgICB2YXIgbWF4WSA9IC1JbmZpbml0eTtcblxuICAgICAgICB2YXIgbWluWCA9IEluZmluaXR5O1xuICAgICAgICB2YXIgbWluWSA9IEluZmluaXR5O1xuXG4gICAgICAgIHZhciB2ZXJ0aWNlcyA9IHRoaXMudmVydGljZXM7XG4gICAgICAgIGZvciAodmFyIGkgPSAwLCBuID0gdmVydGljZXMubGVuZ3RoOyBpIDwgbjsgaSArPSAyKSB7XG4gICAgICAgICAgICB2YXIgcmF3WCA9IHZlcnRpY2VzW2ldLCByYXdZID0gdmVydGljZXNbaSArIDFdO1xuICAgICAgICAgICAgdmFyIHggPSAoYSAqIHJhd1gpICsgKGMgKiByYXdZKSArIHR4O1xuICAgICAgICAgICAgdmFyIHkgPSAoZCAqIHJhd1kpICsgKGIgKiByYXdYKSArIHR5O1xuXG4gICAgICAgICAgICBtaW5YID0geCA8IG1pblggPyB4IDogbWluWDtcbiAgICAgICAgICAgIG1pblkgPSB5IDwgbWluWSA/IHkgOiBtaW5ZO1xuXG4gICAgICAgICAgICBtYXhYID0geCA+IG1heFggPyB4IDogbWF4WDtcbiAgICAgICAgICAgIG1heFkgPSB5ID4gbWF4WSA/IHkgOiBtYXhZO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG1pblggPT09IC1JbmZpbml0eSB8fCBtYXhZID09PSBJbmZpbml0eSkge1xuICAgICAgICAgICAgcmV0dXJuIGNvcmUuUmVjdGFuZ2xlLkVNUFRZO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGJvdW5kcyA9IHRoaXMuX2JvdW5kcztcblxuICAgICAgICBib3VuZHMueCA9IG1pblg7XG4gICAgICAgIGJvdW5kcy53aWR0aCA9IG1heFggLSBtaW5YO1xuXG4gICAgICAgIGJvdW5kcy55ID0gbWluWTtcbiAgICAgICAgYm91bmRzLmhlaWdodCA9IG1heFkgLSBtaW5ZO1xuXG4gICAgICAgIC8vIHN0b3JlIGEgcmVmZXJlbmNlIHNvIHRoYXQgaWYgdGhpcyBmdW5jdGlvbiBnZXRzIGNhbGxlZCBhZ2FpbiBpbiB0aGUgcmVuZGVyIGN5Y2xlIHdlIGRvIG5vdCBoYXZlIHRvIHJlY2FsY3VsYXRlXG4gICAgICAgIHRoaXMuX2N1cnJlbnRCb3VuZHMgPSBib3VuZHM7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuX2N1cnJlbnRCb3VuZHM7XG59O1xuXG4vKipcbiAqIFRlc3RzIGlmIGEgcG9pbnQgaXMgaW5zaWRlIHRoaXMgbWVzaC4gV29ya3Mgb25seSBmb3IgVFJJQU5HTEVfTUVTSFxuICpcbiAqIEBwYXJhbSBwb2ludCB7UElYSS5Qb2ludH0gdGhlIHBvaW50IHRvIHRlc3RcbiAqIEByZXR1cm4ge2Jvb2xlYW59IHRoZSByZXN1bHQgb2YgdGhlIHRlc3RcbiAqL1xuTWVzaC5wcm90b3R5cGUuY29udGFpbnNQb2ludCA9IGZ1bmN0aW9uKCBwb2ludCApIHtcbiAgICBpZiAoIXRoaXMuZ2V0Qm91bmRzKCkuY29udGFpbnMocG9pbnQueCwgcG9pbnQueSkpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICB0aGlzLndvcmxkVHJhbnNmb3JtLmFwcGx5SW52ZXJzZShwb2ludCwgIHRlbXBQb2ludCk7XG5cbiAgICB2YXIgdmVydGljZXMgPSB0aGlzLnZlcnRpY2VzO1xuICAgIHZhciBwb2ludHMgPSB0ZW1wUG9seWdvbi5wb2ludHM7XG4gICAgdmFyIGksIGxlbjtcblxuICAgIGlmICh0aGlzLmRyYXdNb2RlID09PSBNZXNoLkRSQVdfTU9ERVMuVFJJQU5HTEVTKSB7XG4gICAgICAgIHZhciBpbmRpY2VzID0gdGhpcy5pbmRpY2VzO1xuICAgICAgICBsZW4gPSB0aGlzLmluZGljZXMubGVuZ3RoO1xuICAgICAgICAvL1RPRE86IGlubGluZSB0aGlzLlxuICAgICAgICBmb3IgKGk9MDtpPGxlbjtpKz0zKSB7XG4gICAgICAgICAgICB2YXIgaW5kMCA9IGluZGljZXNbaV0qMiwgaW5kMSA9IGluZGljZXNbaSsxXSoyLCBpbmQyID0gaW5kaWNlc1tpKzJdKjI7XG4gICAgICAgICAgICBwb2ludHNbMF0gPSB2ZXJ0aWNlc1tpbmQwXTtcbiAgICAgICAgICAgIHBvaW50c1sxXSA9IHZlcnRpY2VzW2luZDArMV07XG4gICAgICAgICAgICBwb2ludHNbMl0gPSB2ZXJ0aWNlc1tpbmQxXTtcbiAgICAgICAgICAgIHBvaW50c1szXSA9IHZlcnRpY2VzW2luZDErMV07XG4gICAgICAgICAgICBwb2ludHNbNF0gPSB2ZXJ0aWNlc1tpbmQyXTtcbiAgICAgICAgICAgIHBvaW50c1s1XSA9IHZlcnRpY2VzW2luZDIrMV07XG4gICAgICAgICAgICBpZiAodGVtcFBvbHlnb24uY29udGFpbnModGVtcFBvaW50LngsIHRlbXBQb2ludC55KSkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgICAgbGVuID0gdmVydGljZXMubGVuZ3RoO1xuICAgICAgICBmb3IgKGk9MDtpPGxlbjtpKz02KSB7XG4gICAgICAgICAgICBwb2ludHNbMF0gPSB2ZXJ0aWNlc1tpXTtcbiAgICAgICAgICAgIHBvaW50c1sxXSA9IHZlcnRpY2VzW2krMV07XG4gICAgICAgICAgICBwb2ludHNbMl0gPSB2ZXJ0aWNlc1tpKzJdO1xuICAgICAgICAgICAgcG9pbnRzWzNdID0gdmVydGljZXNbaSszXTtcbiAgICAgICAgICAgIHBvaW50c1s0XSA9IHZlcnRpY2VzW2krNF07XG4gICAgICAgICAgICBwb2ludHNbNV0gPSB2ZXJ0aWNlc1tpKzVdO1xuICAgICAgICAgICAgaWYgKHRlbXBQb2x5Z29uLmNvbnRhaW5zKHRlbXBQb2ludC54LCB0ZW1wUG9pbnQueSkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG59O1xuXG4vKipcbiAqIERpZmZlcmVudCBkcmF3aW5nIGJ1ZmZlciBtb2RlcyBzdXBwb3J0ZWRcbiAqXG4gKiBAc3RhdGljXG4gKiBAY29uc3RhbnRcbiAqIEBwcm9wZXJ0eSB7b2JqZWN0fSBEUkFXX01PREVTXG4gKiBAcHJvcGVydHkge251bWJlcn0gRFJBV19NT0RFUy5UUklBTkdMRV9NRVNIXG4gKiBAcHJvcGVydHkge251bWJlcn0gRFJBV19NT0RFUy5UUklBTkdMRVNcbiAqL1xuTWVzaC5EUkFXX01PREVTID0ge1xuICAgIFRSSUFOR0xFX01FU0g6IDAsXG4gICAgVFJJQU5HTEVTOiAxXG59O1xuIiwidmFyIE1lc2ggPSByZXF1aXJlKCcuL01lc2gnKTtcblxuLyoqXG4gKiBUaGUgUGxhbmUgYWxsb3dzIHlvdSB0byBkcmF3IGEgdGV4dHVyZSBhY3Jvc3Mgc2V2ZXJhbCBwb2ludHMgYW5kIHRoZW0gbWFuaXB1bGF0ZSB0aGVzZSBwb2ludHNcbiAqXG4gKmBgYGpzXG4gKiBmb3IgKHZhciBpID0gMDsgaSA8IDIwOyBpKyspIHtcbiAqICAgICBwb2ludHMucHVzaChuZXcgUElYSS5Qb2ludChpICogNTAsIDApKTtcbiAqIH07XG4gKiB2YXIgUGxhbmUgPSBuZXcgUElYSS5QbGFuZShQSVhJLlRleHR1cmUuZnJvbUltYWdlKFwic25ha2UucG5nXCIpLCBwb2ludHMpO1xuICogIGBgYFxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5tZXNoLk1lc2hcbiAqIEBtZW1iZXJvZiBQSVhJLm1lc2hcbiAqIEBwYXJhbSB7UElYSS5UZXh0dXJlfSB0ZXh0dXJlIC0gVGhlIHRleHR1cmUgdG8gdXNlIG9uIHRoZSBQbGFuZS5cbiAqIEBwYXJhbSB7aW50fSBzZWdtZW50c1ggLSBUaGUgbnVtYmVyIG94IHggc2VnbWVudHNcbiAqIEBwYXJhbSB7aW50fSBzZWdtZW50c1kgLSBUaGUgbnVtYmVyIG9mIHkgc2VnbWVudHNcbiAqXG4gKi9cbmZ1bmN0aW9uIFBsYW5lKHRleHR1cmUsIHNlZ21lbnRzWCwgc2VnbWVudHNZKVxue1xuICAgIE1lc2guY2FsbCh0aGlzLCB0ZXh0dXJlKTtcblxuICAgIC8qKlxuICAgICAqIFRyYWNrZXIgZm9yIGlmIHRoZSBQbGFuZSBpcyByZWFkeSB0byBiZSBkcmF3bi4gTmVlZGVkIGJlY2F1c2UgTWVzaCBjdG9yIGNhblxuICAgICAqIGNhbGwgX29uVGV4dHVyZVVwZGF0ZWQgd2hpY2ggY291bGQgY2FsbCByZWZyZXNoIHRvbyBlYXJseS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9yZWFkeSA9IHRydWU7XG5cbiAgICB0aGlzLnNlZ21lbnRzWCA9ICBzZWdtZW50c1ggfHwgMTA7XG4gICAgdGhpcy5zZWdtZW50c1kgPSBzZWdtZW50c1kgfHwgMTA7XG5cbiAgICB0aGlzLmRyYXdNb2RlID0gTWVzaC5EUkFXX01PREVTLlRSSUFOR0xFUztcbiAgICB0aGlzLnJlZnJlc2goKTtcblxufVxuXG5cbi8vIGNvbnN0cnVjdG9yXG5QbGFuZS5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKCBNZXNoLnByb3RvdHlwZSApO1xuUGxhbmUucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gUGxhbmU7XG5tb2R1bGUuZXhwb3J0cyA9IFBsYW5lO1xuXG4vKipcbiAqIFJlZnJlc2hlc1xuICpcbiAqL1xuUGxhbmUucHJvdG90eXBlLnJlZnJlc2ggPSBmdW5jdGlvbigpXG57XG4gICAgdmFyIHRvdGFsID0gdGhpcy5zZWdtZW50c1ggKiB0aGlzLnNlZ21lbnRzWTtcbiAgICB2YXIgdmVydHMgPSBbXTtcbiAgICB2YXIgY29sb3JzID0gW107XG4gICAgdmFyIHV2cyA9IFtdO1xuICAgIHZhciBpbmRpY2VzID0gW107XG4gICAgdmFyIHRleHR1cmUgPSB0aGlzLnRleHR1cmU7XG5cbiAgLy8gIHRleHR1cmUud2lkdGggPSA4MDAgdGV4dHVyZS53aWR0aCB8fCA4MDA7XG4gLy8gICB0ZXh0dXJlLmhlaWdodCA9IDgwMC8vdGV4dHVyZS5oZWlnaHQgfHwgODAwO1xuXG4gICAgdmFyIHNlZ21lbnRzWFN1YiA9IHRoaXMuc2VnbWVudHNYIC0gMTtcbiAgICB2YXIgc2VnbWVudHNZU3ViID0gdGhpcy5zZWdtZW50c1kgLSAxO1xuICAgIHZhciBpID0gMDtcblxuICAgIHZhciBzaXplWCA9IHRleHR1cmUud2lkdGggLyBzZWdtZW50c1hTdWI7XG4gICAgdmFyIHNpemVZID0gdGV4dHVyZS5oZWlnaHQgLyBzZWdtZW50c1lTdWI7XG5cbiAgICBmb3IgKGkgPSAwOyBpIDwgdG90YWw7IGkrKykge1xuXG4gICAgICAgIHZhciB4ID0gKGkgJSB0aGlzLnNlZ21lbnRzWCk7XG4gICAgICAgIHZhciB5ID0gKCAoaSAvIHRoaXMuc2VnbWVudHNYICkgfCAwICk7XG5cblxuICAgICAgICB2ZXJ0cy5wdXNoKCh4ICogc2l6ZVgpLFxuICAgICAgICAgICAgICAgICAgICh5ICogc2l6ZVkpKTtcblxuICAgICAgICAvLyB0aGlzIHdvcmtzIGZvciByZWN0YW5ndWxhciB0ZXh0dXJlcy4gXG4gICAgICAgIHV2cy5wdXNoKHRleHR1cmUuX3V2cy54MCArICh0ZXh0dXJlLl91dnMueDEgLSB0ZXh0dXJlLl91dnMueDApICogKHggLyAodGhpcy5zZWdtZW50c1gtMSkpLCB0ZXh0dXJlLl91dnMueTAgKyAodGV4dHVyZS5fdXZzLnkzLXRleHR1cmUuX3V2cy55MCkgKiAoeS8gKHRoaXMuc2VnbWVudHNZLTEpKSk7XG4gICAgICB9XG5cbiAgICAvLyAgY29uc1xuXG4gICAgdmFyIHRvdGFsU3ViID0gc2VnbWVudHNYU3ViICogc2VnbWVudHNZU3ViO1xuXG4gICAgZm9yIChpID0gMDsgaSA8IHRvdGFsU3ViOyBpKyspIHtcblxuICAgICAgICB2YXIgeHBvcyA9IGkgJSBzZWdtZW50c1hTdWI7XG4gICAgICAgIHZhciB5cG9zID0gKGkgLyBzZWdtZW50c1hTdWIgKSB8IDA7XG5cblxuICAgICAgICB2YXIgIHZhbHVlID0gKHlwb3MgKiB0aGlzLnNlZ21lbnRzWCkgKyB4cG9zO1xuICAgICAgICB2YXIgIHZhbHVlMiA9ICh5cG9zICogdGhpcy5zZWdtZW50c1gpICsgeHBvcyArIDE7XG4gICAgICAgIHZhciAgdmFsdWUzID0gKCh5cG9zKzEpICogdGhpcy5zZWdtZW50c1gpICsgeHBvcztcbiAgICAgICAgdmFyICB2YWx1ZTQgPSAoKHlwb3MrMSkgKiB0aGlzLnNlZ21lbnRzWCkgKyB4cG9zICsgMTtcblxuICAgICAgICBpbmRpY2VzLnB1c2godmFsdWUsIHZhbHVlMiwgdmFsdWUzKTtcbiAgICAgICAgaW5kaWNlcy5wdXNoKHZhbHVlMiwgdmFsdWU0LCB2YWx1ZTMpO1xuICAgIH1cblxuXG4gICAgLy9jb25zb2xlLmxvZyhpbmRpY2VzKVxuICAgIHRoaXMudmVydGljZXMgPSBuZXcgRmxvYXQzMkFycmF5KHZlcnRzKTtcbiAgICB0aGlzLnV2cyA9IG5ldyBGbG9hdDMyQXJyYXkodXZzKTtcbiAgICB0aGlzLmNvbG9ycyA9IG5ldyBGbG9hdDMyQXJyYXkoY29sb3JzKTtcbiAgICB0aGlzLmluZGljZXMgPSBuZXcgVWludDE2QXJyYXkoaW5kaWNlcyk7XG59O1xuXG4vKipcbiAqIENsZWFyIHRleHR1cmUgVVZzIHdoZW4gbmV3IHRleHR1cmUgaXMgc2V0XG4gKlxuICogQHByaXZhdGVcbiAqL1xuUGxhbmUucHJvdG90eXBlLl9vblRleHR1cmVVcGRhdGUgPSBmdW5jdGlvbiAoKVxue1xuICAgIE1lc2gucHJvdG90eXBlLl9vblRleHR1cmVVcGRhdGUuY2FsbCh0aGlzKTtcblxuICAgIC8vIHdhaXQgZm9yIHRoZSBQbGFuZSBjdG9yIHRvIGZpbmlzaCBiZWZvcmUgY2FsbGluZyByZWZyZXNoXG4gICAgaWYgKHRoaXMuX3JlYWR5KSB7XG4gICAgICAgIHRoaXMucmVmcmVzaCgpO1xuICAgIH1cbn07XG4iLCJ2YXIgTWVzaCA9IHJlcXVpcmUoJy4vTWVzaCcpO1xudmFyIGNvcmUgPSByZXF1aXJlKCcuLi9jb3JlJyk7XG5cbi8qKlxuICogVGhlIHJvcGUgYWxsb3dzIHlvdSB0byBkcmF3IGEgdGV4dHVyZSBhY3Jvc3Mgc2V2ZXJhbCBwb2ludHMgYW5kIHRoZW0gbWFuaXB1bGF0ZSB0aGVzZSBwb2ludHNcbiAqXG4gKmBgYGpzXG4gKiBmb3IgKHZhciBpID0gMDsgaSA8IDIwOyBpKyspIHtcbiAqICAgICBwb2ludHMucHVzaChuZXcgUElYSS5Qb2ludChpICogNTAsIDApKTtcbiAqIH07XG4gKiB2YXIgcm9wZSA9IG5ldyBQSVhJLlJvcGUoUElYSS5UZXh0dXJlLmZyb21JbWFnZShcInNuYWtlLnBuZ1wiKSwgcG9pbnRzKTtcbiAqICBgYGBcbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkubWVzaC5NZXNoXG4gKiBAbWVtYmVyb2YgUElYSS5tZXNoXG4gKiBAcGFyYW0ge1BJWEkuVGV4dHVyZX0gdGV4dHVyZSAtIFRoZSB0ZXh0dXJlIHRvIHVzZSBvbiB0aGUgcm9wZS5cbiAqIEBwYXJhbSB7UElYSS5Qb2ludFtdfSBwb2ludHMgLSBBbiBhcnJheSBvZiB7QGxpbmsgUElYSS5Qb2ludH0gb2JqZWN0cyB0byBjb25zdHJ1Y3QgdGhpcyByb3BlLlxuICpcbiAqL1xuZnVuY3Rpb24gUm9wZSh0ZXh0dXJlLCBwb2ludHMpXG57XG4gICAgTWVzaC5jYWxsKHRoaXMsIHRleHR1cmUpO1xuXG4gICAgLypcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlBvaW50W119IEFuIGFycmF5IG9mIHBvaW50cyB0aGF0IGRldGVybWluZSB0aGUgcm9wZVxuICAgICAqL1xuICAgIHRoaXMucG9pbnRzID0gcG9pbnRzO1xuXG4gICAgLypcbiAgICAgKiBAbWVtYmVyIHtGbG9hdDMyQXJyYXl9IEFuIGFycmF5IG9mIHZlcnRpY2VzIHVzZWQgdG8gY29uc3RydWN0IHRoaXMgcm9wZS5cbiAgICAgKi9cbiAgICB0aGlzLnZlcnRpY2VzID0gbmV3IEZsb2F0MzJBcnJheShwb2ludHMubGVuZ3RoICogNCk7XG5cbiAgICAvKlxuICAgICAqIEBtZW1iZXIge0Zsb2F0MzJBcnJheX0gVGhlIFdlYkdMIFV2cyBvZiB0aGUgcm9wZS5cbiAgICAgKi9cbiAgICB0aGlzLnV2cyA9IG5ldyBGbG9hdDMyQXJyYXkocG9pbnRzLmxlbmd0aCAqIDQpO1xuXG4gICAgLypcbiAgICAgKiBAbWVtYmVyIHtGbG9hdDMyQXJyYXl9IEFuIGFycmF5IGNvbnRhaW5pbmcgdGhlIGNvbG9yIGNvbXBvbmVudHNcbiAgICAgKi9cbiAgICB0aGlzLmNvbG9ycyA9IG5ldyBGbG9hdDMyQXJyYXkocG9pbnRzLmxlbmd0aCAqIDIpO1xuXG4gICAgLypcbiAgICAgKiBAbWVtYmVyIHtVaW50MTZBcnJheX0gQW4gYXJyYXkgY29udGFpbmluZyB0aGUgaW5kaWNlcyBvZiB0aGUgdmVydGljZXNcbiAgICAgKi9cbiAgICB0aGlzLmluZGljZXMgPSBuZXcgVWludDE2QXJyYXkocG9pbnRzLmxlbmd0aCAqIDIpO1xuXG4gICAgLyoqXG4gICAgICogVHJhY2tlciBmb3IgaWYgdGhlIHJvcGUgaXMgcmVhZHkgdG8gYmUgZHJhd24uIE5lZWRlZCBiZWNhdXNlIE1lc2ggY3RvciBjYW5cbiAgICAgKiBjYWxsIF9vblRleHR1cmVVcGRhdGVkIHdoaWNoIGNvdWxkIGNhbGwgcmVmcmVzaCB0b28gZWFybHkuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgIHRoaXMuX3JlYWR5ID0gdHJ1ZTtcblxuICAgICB0aGlzLnJlZnJlc2goKTtcbn1cblxuXG4vLyBjb25zdHJ1Y3RvclxuUm9wZS5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKE1lc2gucHJvdG90eXBlKTtcblJvcGUucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gUm9wZTtcbm1vZHVsZS5leHBvcnRzID0gUm9wZTtcblxuLyoqXG4gKiBSZWZyZXNoZXNcbiAqXG4gKi9cblJvcGUucHJvdG90eXBlLnJlZnJlc2ggPSBmdW5jdGlvbiAoKVxue1xuICAgIHZhciBwb2ludHMgPSB0aGlzLnBvaW50cztcblxuICAgIC8vIGlmIHRvbyBsaXR0bGUgcG9pbnRzLCBvciB0ZXh0dXJlIGhhc24ndCBnb3QgVVZzIHNldCB5ZXQganVzdCBtb3ZlIG9uLlxuICAgIGlmIChwb2ludHMubGVuZ3RoIDwgMSB8fCAhdGhpcy5fdGV4dHVyZS5fdXZzKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHZhciB1dnMgPSB0aGlzLnV2cztcblxuICAgIHZhciBpbmRpY2VzID0gdGhpcy5pbmRpY2VzO1xuICAgIHZhciBjb2xvcnMgPSB0aGlzLmNvbG9ycztcblxuICAgIHZhciB0ZXh0dXJlVXZzID0gdGhpcy5fdGV4dHVyZS5fdXZzO1xuICAgIHZhciBvZmZzZXQgPSBuZXcgY29yZS5Qb2ludCh0ZXh0dXJlVXZzLngwLCB0ZXh0dXJlVXZzLnkwKTtcbiAgICB2YXIgZmFjdG9yID0gbmV3IGNvcmUuUG9pbnQodGV4dHVyZVV2cy54MiAtIHRleHR1cmVVdnMueDAsIHRleHR1cmVVdnMueTIgLSB0ZXh0dXJlVXZzLnkwKTtcblxuICAgIHV2c1swXSA9IDAgKyBvZmZzZXQueDtcbiAgICB1dnNbMV0gPSAwICsgb2Zmc2V0Lnk7XG4gICAgdXZzWzJdID0gMCArIG9mZnNldC54O1xuICAgIHV2c1szXSA9IDEgKiBmYWN0b3IueSArIG9mZnNldC55O1xuXG4gICAgY29sb3JzWzBdID0gMTtcbiAgICBjb2xvcnNbMV0gPSAxO1xuXG4gICAgaW5kaWNlc1swXSA9IDA7XG4gICAgaW5kaWNlc1sxXSA9IDE7XG5cbiAgICB2YXIgdG90YWwgPSBwb2ludHMubGVuZ3RoLFxuICAgICAgICBwb2ludCwgaW5kZXgsIGFtb3VudDtcblxuICAgIGZvciAodmFyIGkgPSAxOyBpIDwgdG90YWw7IGkrKylcbiAgICB7XG4gICAgICAgIHBvaW50ID0gcG9pbnRzW2ldO1xuICAgICAgICBpbmRleCA9IGkgKiA0O1xuICAgICAgICAvLyB0aW1lIHRvIGRvIHNvbWUgc21hcnQgZHJhd2luZyFcbiAgICAgICAgYW1vdW50ID0gaSAvICh0b3RhbC0xKTtcblxuICAgICAgICB1dnNbaW5kZXhdID0gYW1vdW50ICogZmFjdG9yLnggKyBvZmZzZXQueDtcbiAgICAgICAgdXZzW2luZGV4KzFdID0gMCArIG9mZnNldC55O1xuXG4gICAgICAgIHV2c1tpbmRleCsyXSA9IGFtb3VudCAqIGZhY3Rvci54ICsgb2Zmc2V0Lng7XG4gICAgICAgIHV2c1tpbmRleCszXSA9IDEgKiBmYWN0b3IueSArIG9mZnNldC55O1xuXG4gICAgICAgIGluZGV4ID0gaSAqIDI7XG4gICAgICAgIGNvbG9yc1tpbmRleF0gPSAxO1xuICAgICAgICBjb2xvcnNbaW5kZXgrMV0gPSAxO1xuXG4gICAgICAgIGluZGV4ID0gaSAqIDI7XG4gICAgICAgIGluZGljZXNbaW5kZXhdID0gaW5kZXg7XG4gICAgICAgIGluZGljZXNbaW5kZXggKyAxXSA9IGluZGV4ICsgMTtcbiAgICB9XG5cbiAgICB0aGlzLmRpcnR5ID0gdHJ1ZTtcbn07XG5cbi8qKlxuICogQ2xlYXIgdGV4dHVyZSBVVnMgd2hlbiBuZXcgdGV4dHVyZSBpcyBzZXRcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5Sb3BlLnByb3RvdHlwZS5fb25UZXh0dXJlVXBkYXRlID0gZnVuY3Rpb24gKClcbntcbiAgICBNZXNoLnByb3RvdHlwZS5fb25UZXh0dXJlVXBkYXRlLmNhbGwodGhpcyk7XG5cbiAgICAvLyB3YWl0IGZvciB0aGUgUm9wZSBjdG9yIHRvIGZpbmlzaCBiZWZvcmUgY2FsbGluZyByZWZyZXNoXG4gICAgaWYgKHRoaXMuX3JlYWR5KSB7XG4gICAgICAgIHRoaXMucmVmcmVzaCgpO1xuICAgIH1cbn07XG5cbi8qKlxuICogVXBkYXRlcyB0aGUgb2JqZWN0IHRyYW5zZm9ybSBmb3IgcmVuZGVyaW5nXG4gKlxuICogQHByaXZhdGVcbiAqL1xuUm9wZS5wcm90b3R5cGUudXBkYXRlVHJhbnNmb3JtID0gZnVuY3Rpb24gKClcbntcbiAgICB2YXIgcG9pbnRzID0gdGhpcy5wb2ludHM7XG5cbiAgICBpZiAocG9pbnRzLmxlbmd0aCA8IDEpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFyIGxhc3RQb2ludCA9IHBvaW50c1swXTtcbiAgICB2YXIgbmV4dFBvaW50O1xuICAgIHZhciBwZXJwWCA9IDA7XG4gICAgdmFyIHBlcnBZID0gMDtcblxuICAgIC8vIHRoaXMuY291bnQgLT0gMC4yO1xuXG4gICAgdmFyIHZlcnRpY2VzID0gdGhpcy52ZXJ0aWNlcztcbiAgICB2YXIgdG90YWwgPSBwb2ludHMubGVuZ3RoLFxuICAgICAgICBwb2ludCwgaW5kZXgsIHJhdGlvLCBwZXJwTGVuZ3RoLCBudW07XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRvdGFsOyBpKyspXG4gICAge1xuICAgICAgICBwb2ludCA9IHBvaW50c1tpXTtcbiAgICAgICAgaW5kZXggPSBpICogNDtcblxuICAgICAgICBpZiAoaSA8IHBvaW50cy5sZW5ndGgtMSlcbiAgICAgICAge1xuICAgICAgICAgICAgbmV4dFBvaW50ID0gcG9pbnRzW2krMV07XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgICBuZXh0UG9pbnQgPSBwb2ludDtcbiAgICAgICAgfVxuXG4gICAgICAgIHBlcnBZID0gLShuZXh0UG9pbnQueCAtIGxhc3RQb2ludC54KTtcbiAgICAgICAgcGVycFggPSBuZXh0UG9pbnQueSAtIGxhc3RQb2ludC55O1xuXG4gICAgICAgIHJhdGlvID0gKDEgLSAoaSAvICh0b3RhbC0xKSkpICogMTA7XG5cbiAgICAgICAgaWYgKHJhdGlvID4gMSlcbiAgICAgICAge1xuICAgICAgICAgICAgcmF0aW8gPSAxO1xuICAgICAgICB9XG5cbiAgICAgICAgcGVycExlbmd0aCA9IE1hdGguc3FydChwZXJwWCAqIHBlcnBYICsgcGVycFkgKiBwZXJwWSk7XG4gICAgICAgIG51bSA9IHRoaXMuX3RleHR1cmUuaGVpZ2h0IC8gMjsgLy8oMjAgKyBNYXRoLmFicyhNYXRoLnNpbigoaSArIHRoaXMuY291bnQpICogMC4zKSAqIDUwKSApKiByYXRpbztcbiAgICAgICAgcGVycFggLz0gcGVycExlbmd0aDtcbiAgICAgICAgcGVycFkgLz0gcGVycExlbmd0aDtcblxuICAgICAgICBwZXJwWCAqPSBudW07XG4gICAgICAgIHBlcnBZICo9IG51bTtcblxuICAgICAgICB2ZXJ0aWNlc1tpbmRleF0gPSBwb2ludC54ICsgcGVycFg7XG4gICAgICAgIHZlcnRpY2VzW2luZGV4KzFdID0gcG9pbnQueSArIHBlcnBZO1xuICAgICAgICB2ZXJ0aWNlc1tpbmRleCsyXSA9IHBvaW50LnggLSBwZXJwWDtcbiAgICAgICAgdmVydGljZXNbaW5kZXgrM10gPSBwb2ludC55IC0gcGVycFk7XG5cbiAgICAgICAgbGFzdFBvaW50ID0gcG9pbnQ7XG4gICAgfVxuXG4gICAgdGhpcy5jb250YWluZXJVcGRhdGVUcmFuc2Zvcm0oKTtcbn07XG4iLCIvKipcbiAqIEBmaWxlICAgICAgICBNYWluIGV4cG9ydCBvZiB0aGUgUElYSSBleHRyYXMgbGlicmFyeVxuICogQGF1dGhvciAgICAgIE1hdCBHcm92ZXMgPG1hdEBnb29kYm95ZGlnaXRhbC5jb20+XG4gKiBAY29weXJpZ2h0ICAgMjAxMy0yMDE1IEdvb2RCb3lEaWdpdGFsXG4gKiBAbGljZW5zZSAgICAge0BsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9waXhpanMvcGl4aS5qcy9ibG9iL21hc3Rlci9MSUNFTlNFfE1JVCBMaWNlbnNlfVxuICovXG5cbi8qKlxuICogQG5hbWVzcGFjZSBQSVhJLm1lc2hcbiAqL1xubW9kdWxlLmV4cG9ydHMgPSB7XG4gICAgTWVzaDogICAgICAgICAgIHJlcXVpcmUoJy4vTWVzaCcpLFxuICAgIFBsYW5lOiAgICAgICAgICAgcmVxdWlyZSgnLi9QbGFuZScpLFxuICAgIFJvcGU6ICAgICAgICAgICByZXF1aXJlKCcuL1JvcGUnKSxcbiAgICBNZXNoUmVuZGVyZXI6ICAgcmVxdWlyZSgnLi93ZWJnbC9NZXNoUmVuZGVyZXInKSxcbiAgICBNZXNoU2hhZGVyOiAgICAgcmVxdWlyZSgnLi93ZWJnbC9NZXNoU2hhZGVyJylcbn07XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uLy4uL2NvcmUnKSxcbiAgICBNZXNoID0gcmVxdWlyZSgnLi4vTWVzaCcpO1xuXG4vKipcbiAqIEBhdXRob3IgTWF0IEdyb3Zlc1xuICpcbiAqIEJpZyB0aGFua3MgdG8gdGhlIHZlcnkgY2xldmVyIE1hdHQgRGVzTGF1cmllcnMgPG1hdHRkZXNsPiBodHRwczovL2dpdGh1Yi5jb20vbWF0dGRlc2wvXG4gKiBmb3IgY3JlYXRpbmcgdGhlIG9yaWdpbmFsIHBpeGkgdmVyc2lvbiFcbiAqIEFsc28gYSB0aGFua3MgdG8gaHR0cHM6Ly9naXRodWIuY29tL2JjaGV2YWxpZXIgZm9yIHR3ZWFraW5nIHRoZSB0aW50IGFuZCBhbHBoYSBzbyB0aGF0IHRoZXkgbm93IHNoYXJlIDQgYnl0ZXMgb24gdGhlIHZlcnRleCBidWZmZXJcbiAqXG4gKiBIZWF2aWx5IGluc3BpcmVkIGJ5IExpYkdEWCdzIE1lc2hSZW5kZXJlcjpcbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS9saWJnZHgvbGliZ2R4L2Jsb2IvbWFzdGVyL2dkeC9zcmMvY29tL2JhZGxvZ2ljL2dkeC9ncmFwaGljcy9nMmQvTWVzaFJlbmRlcmVyLmphdmFcbiAqL1xuXG4vKipcbiAqXG4gKiBAY2xhc3NcbiAqIEBwcml2YXRlXG4gKiBAbWVtYmVyb2YgUElYSS5tZXNoXG4gKiBAZXh0ZW5kcyBQSVhJLk9iamVjdFJlbmRlcmVyXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcn0gVGhlIHJlbmRlcmVyIHRoaXMgc3ByaXRlIGJhdGNoIHdvcmtzIGZvci5cbiAqL1xuZnVuY3Rpb24gTWVzaFJlbmRlcmVyKHJlbmRlcmVyKVxue1xuICAgIGNvcmUuT2JqZWN0UmVuZGVyZXIuY2FsbCh0aGlzLCByZW5kZXJlcik7XG5cblxuICAgIC8qKlxuICAgICAqIEhvbGRzIHRoZSBpbmRpY2VzXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtVaW50MTZBcnJheX1cbiAgICAgKi9cbiAgICBcbiAgICB0aGlzLmluZGljZXMgPSBuZXcgVWludDE2QXJyYXkoMTUwMDApO1xuXG4gICAgLy9UT0RPIHRoaXMgY291bGQgYmUgYSBzaW5nbGUgYnVmZmVyIHNoYXJlZCBhbW9uZ3N0IGFsbCByZW5kZXJlcnMgYXMgd2UgcmV1c2UgdGhpcyBzZXQgdXAgaW4gbW9zdCByZW5kZXJlcnNcbiAgICBmb3IgKHZhciBpPTAsIGo9MDsgaSA8IDE1MDAwOyBpICs9IDYsIGogKz0gNClcbiAgICB7XG4gICAgICAgIHRoaXMuaW5kaWNlc1tpICsgMF0gPSBqICsgMDtcbiAgICAgICAgdGhpcy5pbmRpY2VzW2kgKyAxXSA9IGogKyAxO1xuICAgICAgICB0aGlzLmluZGljZXNbaSArIDJdID0gaiArIDI7XG4gICAgICAgIHRoaXMuaW5kaWNlc1tpICsgM10gPSBqICsgMDtcbiAgICAgICAgdGhpcy5pbmRpY2VzW2kgKyA0XSA9IGogKyAyO1xuICAgICAgICB0aGlzLmluZGljZXNbaSArIDVdID0gaiArIDM7XG4gICAgfVxuXG4gICAgdGhpcy5jdXJyZW50U2hhZGVyID0gbnVsbDtcbn1cblxuTWVzaFJlbmRlcmVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoY29yZS5PYmplY3RSZW5kZXJlci5wcm90b3R5cGUpO1xuTWVzaFJlbmRlcmVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IE1lc2hSZW5kZXJlcjtcbm1vZHVsZS5leHBvcnRzID0gTWVzaFJlbmRlcmVyO1xuXG5jb3JlLldlYkdMUmVuZGVyZXIucmVnaXN0ZXJQbHVnaW4oJ21lc2gnLCBNZXNoUmVuZGVyZXIpO1xuXG4vKipcbiAqIFNldHMgdXAgdGhlIHJlbmRlcmVyIGNvbnRleHQgYW5kIG5lY2Vzc2FyeSBidWZmZXJzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0gZ2wge1dlYkdMUmVuZGVyaW5nQ29udGV4dH0gdGhlIGN1cnJlbnQgV2ViR0wgZHJhd2luZyBjb250ZXh0XG4gKi9cbk1lc2hSZW5kZXJlci5wcm90b3R5cGUub25Db250ZXh0Q2hhbmdlID0gZnVuY3Rpb24gKClcbntcblxufTtcblxuLyoqXG4gKiBSZW5kZXJzIHRoZSBzcHJpdGUgb2JqZWN0LlxuICpcbiAqIEBwYXJhbSBtZXNoIHtQSVhJLm1lc2guTWVzaH0gdGhlIG1lc2ggdG8gcmVuZGVyXG4gKi9cbk1lc2hSZW5kZXJlci5wcm90b3R5cGUucmVuZGVyID0gZnVuY3Rpb24gKG1lc2gpXG57XG4gICAgaWYoIW1lc2guX3ZlcnRleEJ1ZmZlcilcbiAgICB7XG4gICAgICAgIHRoaXMuX2luaXRXZWJHTChtZXNoKTtcbiAgICB9XG5cbiAgICB2YXIgcmVuZGVyZXIgPSB0aGlzLnJlbmRlcmVyLFxuICAgICAgICBnbCA9IHJlbmRlcmVyLmdsLFxuICAgICAgICB0ZXh0dXJlID0gbWVzaC5fdGV4dHVyZS5iYXNlVGV4dHVyZSxcbiAgICAgICAgc2hhZGVyID0gbWVzaC5zaGFkZXI7Ly8gfHwgcmVuZGVyZXIuc2hhZGVyTWFuYWdlci5wbHVnaW5zLm1lc2hTaGFkZXI7XG5cbiAgICB2YXIgZHJhd01vZGUgPSBtZXNoLmRyYXdNb2RlID09PSBNZXNoLkRSQVdfTU9ERVMuVFJJQU5HTEVfTUVTSCA/IGdsLlRSSUFOR0xFX1NUUklQIDogZ2wuVFJJQU5HTEVTO1xuXG4gICAgcmVuZGVyZXIuYmxlbmRNb2RlTWFuYWdlci5zZXRCbGVuZE1vZGUobWVzaC5ibGVuZE1vZGUpO1xuXG4gICAgLy9UT0RPIGNhY2hlIGN1c3RvbSBzdGF0ZS4uXG4gICAgaWYgKCFzaGFkZXIpXG4gICAge1xuICAgICAgICBzaGFkZXIgPSByZW5kZXJlci5zaGFkZXJNYW5hZ2VyLnBsdWdpbnMubWVzaFNoYWRlcjtcbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgc2hhZGVyID0gc2hhZGVyLnNoYWRlcnNbZ2wuaWRdIHx8IHNoYWRlci5nZXRTaGFkZXIocmVuZGVyZXIpOy8vIDogc2hhZGVyO1xuICAgIH1cblxuICAgIHRoaXMucmVuZGVyZXIuc2hhZGVyTWFuYWdlci5zZXRTaGFkZXIoc2hhZGVyKTtcblxuICAgIHNoYWRlci51bmlmb3Jtcy50cmFuc2xhdGlvbk1hdHJpeC52YWx1ZSA9IG1lc2gud29ybGRUcmFuc2Zvcm0udG9BcnJheSh0cnVlKTtcbiAgICBzaGFkZXIudW5pZm9ybXMucHJvamVjdGlvbk1hdHJpeC52YWx1ZSA9IHJlbmRlcmVyLmN1cnJlbnRSZW5kZXJUYXJnZXQucHJvamVjdGlvbk1hdHJpeC50b0FycmF5KHRydWUpO1xuICAgIHNoYWRlci51bmlmb3Jtcy5hbHBoYS52YWx1ZSA9IG1lc2gud29ybGRBbHBoYTtcblxuICAgIHNoYWRlci5zeW5jVW5pZm9ybXMoKTtcblxuICAgIGlmICghbWVzaC5kaXJ0eSlcbiAgICB7XG5cbiAgICAgICAgZ2wuYmluZEJ1ZmZlcihnbC5BUlJBWV9CVUZGRVIsIG1lc2guX3ZlcnRleEJ1ZmZlcik7XG4gICAgICAgIGdsLmJ1ZmZlclN1YkRhdGEoZ2wuQVJSQVlfQlVGRkVSLCAwLCBtZXNoLnZlcnRpY2VzKTtcbiAgICAgICAgZ2wudmVydGV4QXR0cmliUG9pbnRlcihzaGFkZXIuYXR0cmlidXRlcy5hVmVydGV4UG9zaXRpb24sIDIsIGdsLkZMT0FULCBmYWxzZSwgMCwgMCk7XG5cbiAgICAgICAgLy8gdXBkYXRlIHRoZSB1dnNcbiAgICAgICAgZ2wuYmluZEJ1ZmZlcihnbC5BUlJBWV9CVUZGRVIsIG1lc2guX3V2QnVmZmVyKTtcbiAgICAgICAgZ2wudmVydGV4QXR0cmliUG9pbnRlcihzaGFkZXIuYXR0cmlidXRlcy5hVGV4dHVyZUNvb3JkLCAyLCBnbC5GTE9BVCwgZmFsc2UsIDAsIDApO1xuXG5cbiAgICAgICAgZ2wuYWN0aXZlVGV4dHVyZShnbC5URVhUVVJFMCk7XG5cbiAgICAgICBpZiAoIXRleHR1cmUuX2dsVGV4dHVyZXNbZ2wuaWRdKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnJlbmRlcmVyLnVwZGF0ZVRleHR1cmUodGV4dHVyZSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgICAvLyBiaW5kIHRoZSBjdXJyZW50IHRleHR1cmVcbiAgICAgICAgICAgIGdsLmJpbmRUZXh0dXJlKGdsLlRFWFRVUkVfMkQsIHRleHR1cmUuX2dsVGV4dHVyZXNbZ2wuaWRdKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGdsLmJpbmRCdWZmZXIoZ2wuRUxFTUVOVF9BUlJBWV9CVUZGRVIsIG1lc2guX2luZGV4QnVmZmVyKTtcbiAgICAgICAgZ2wuYnVmZmVyU3ViRGF0YShnbC5FTEVNRU5UX0FSUkFZX0JVRkZFUiwgMCwgbWVzaC5pbmRpY2VzKTtcbiAgICB9XG4gICAgZWxzZVxuICAgIHtcblxuICAgICAgICBtZXNoLmRpcnR5ID0gZmFsc2U7XG4gICAgICAgIGdsLmJpbmRCdWZmZXIoZ2wuQVJSQVlfQlVGRkVSLCBtZXNoLl92ZXJ0ZXhCdWZmZXIpO1xuICAgICAgICBnbC5idWZmZXJEYXRhKGdsLkFSUkFZX0JVRkZFUiwgbWVzaC52ZXJ0aWNlcywgZ2wuU1RBVElDX0RSQVcpO1xuICAgICAgICBnbC52ZXJ0ZXhBdHRyaWJQb2ludGVyKHNoYWRlci5hdHRyaWJ1dGVzLmFWZXJ0ZXhQb3NpdGlvbiwgMiwgZ2wuRkxPQVQsIGZhbHNlLCAwLCAwKTtcblxuICAgICAgICAvLyB1cGRhdGUgdGhlIHV2c1xuICAgICAgICBnbC5iaW5kQnVmZmVyKGdsLkFSUkFZX0JVRkZFUiwgbWVzaC5fdXZCdWZmZXIpO1xuICAgICAgICBnbC5idWZmZXJEYXRhKGdsLkFSUkFZX0JVRkZFUiwgbWVzaC51dnMsIGdsLlNUQVRJQ19EUkFXKTtcbiAgICAgICAgZ2wudmVydGV4QXR0cmliUG9pbnRlcihzaGFkZXIuYXR0cmlidXRlcy5hVGV4dHVyZUNvb3JkLCAyLCBnbC5GTE9BVCwgZmFsc2UsIDAsIDApO1xuXG4gICAgICAgICBnbC5hY3RpdmVUZXh0dXJlKGdsLlRFWFRVUkUwKTtcblxuICAgICAgICBpZiAoIXRleHR1cmUuX2dsVGV4dHVyZXNbZ2wuaWRdKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnJlbmRlcmVyLnVwZGF0ZVRleHR1cmUodGV4dHVyZSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgICAvLyBiaW5kIHRoZSBjdXJyZW50IHRleHR1cmVcbiAgICAgICAgICAgIGdsLmJpbmRUZXh0dXJlKGdsLlRFWFRVUkVfMkQsIHRleHR1cmUuX2dsVGV4dHVyZXNbZ2wuaWRdKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGRvbnQgbmVlZCB0byB1cGxvYWQhXG4gICAgICAgIGdsLmJpbmRCdWZmZXIoZ2wuRUxFTUVOVF9BUlJBWV9CVUZGRVIsIG1lc2guX2luZGV4QnVmZmVyKTtcbiAgICAgICAgZ2wuYnVmZmVyRGF0YShnbC5FTEVNRU5UX0FSUkFZX0JVRkZFUiwgbWVzaC5pbmRpY2VzLCBnbC5TVEFUSUNfRFJBVyk7XG5cbiAgICB9XG5cbiAgICBnbC5kcmF3RWxlbWVudHMoZHJhd01vZGUsIG1lc2guaW5kaWNlcy5sZW5ndGgsIGdsLlVOU0lHTkVEX1NIT1JULCAwKTtcblxufTtcblxuLyoqXG4gKiBQcmVwYXJlcyBhbGwgdGhlIGJ1ZmZlcnMgdG8gcmVuZGVyIHRoaXMgbWVzaFxuICogQHBhcmFtIG1lc2gge1BJWEkubWVzaC5NZXNofSB0aGUgbWVzaCB0byByZW5kZXJcbiAqL1xuTWVzaFJlbmRlcmVyLnByb3RvdHlwZS5faW5pdFdlYkdMID0gZnVuY3Rpb24gKG1lc2gpXG57XG4gICAgLy8gYnVpbGQgdGhlIHN0cmlwIVxuICAgIHZhciBnbCA9IHRoaXMucmVuZGVyZXIuZ2w7XG5cbiAgICBtZXNoLl92ZXJ0ZXhCdWZmZXIgPSBnbC5jcmVhdGVCdWZmZXIoKTtcbiAgICBtZXNoLl9pbmRleEJ1ZmZlciA9IGdsLmNyZWF0ZUJ1ZmZlcigpO1xuICAgIG1lc2guX3V2QnVmZmVyID0gZ2wuY3JlYXRlQnVmZmVyKCk7XG5cblxuXG4gICAgZ2wuYmluZEJ1ZmZlcihnbC5BUlJBWV9CVUZGRVIsIG1lc2guX3ZlcnRleEJ1ZmZlcik7XG4gICAgZ2wuYnVmZmVyRGF0YShnbC5BUlJBWV9CVUZGRVIsIG1lc2gudmVydGljZXMsIGdsLkRZTkFNSUNfRFJBVyk7XG5cbiAgICBnbC5iaW5kQnVmZmVyKGdsLkFSUkFZX0JVRkZFUiwgbWVzaC5fdXZCdWZmZXIpO1xuICAgIGdsLmJ1ZmZlckRhdGEoZ2wuQVJSQVlfQlVGRkVSLCAgbWVzaC51dnMsIGdsLlNUQVRJQ19EUkFXKTtcblxuICAgIGlmKG1lc2guY29sb3JzKXtcbiAgICAgICAgbWVzaC5fY29sb3JCdWZmZXIgPSBnbC5jcmVhdGVCdWZmZXIoKTtcbiAgICAgICAgZ2wuYmluZEJ1ZmZlcihnbC5BUlJBWV9CVUZGRVIsIG1lc2guX2NvbG9yQnVmZmVyKTtcbiAgICAgICAgZ2wuYnVmZmVyRGF0YShnbC5BUlJBWV9CVUZGRVIsIG1lc2guY29sb3JzLCBnbC5TVEFUSUNfRFJBVyk7XG4gICAgfVxuXG4gICAgZ2wuYmluZEJ1ZmZlcihnbC5FTEVNRU5UX0FSUkFZX0JVRkZFUiwgbWVzaC5faW5kZXhCdWZmZXIpO1xuICAgIGdsLmJ1ZmZlckRhdGEoZ2wuRUxFTUVOVF9BUlJBWV9CVUZGRVIsIG1lc2guaW5kaWNlcywgZ2wuU1RBVElDX0RSQVcpO1xufTtcblxuXG4vKipcbiAqIEVtcHRpZXMgdGhlIGN1cnJlbnQgYmF0Y2guXG4gKlxuICovXG5NZXNoUmVuZGVyZXIucHJvdG90eXBlLmZsdXNoID0gZnVuY3Rpb24gKClcbntcblxufTtcblxuLyoqXG4gKiBTdGFydHMgYSBuZXcgbWVzaCByZW5kZXJlci5cbiAqXG4gKi9cbk1lc2hSZW5kZXJlci5wcm90b3R5cGUuc3RhcnQgPSBmdW5jdGlvbiAoKVxue1xuICAgIFxuXG4gICAgdGhpcy5jdXJyZW50U2hhZGVyID0gbnVsbDtcbn07XG5cbi8qKlxuICogRGVzdHJveXMgdGhlIE1lc2ggcmVuZGVyZXJcbiAqXG4gKi9cbk1lc2hSZW5kZXJlci5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uICgpXG57XG4gICAgY29yZS5PYmplY3RSZW5kZXJlci5wcm90b3R5cGUuZGVzdHJveS5jYWxsKHRoaXMpO1xufTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vLi4vY29yZScpO1xuXG4vKipcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5TaGFkZXJcbiAqIEBtZW1iZXJvZiBQSVhJLm1lc2hcbiAqIEBwYXJhbSBzaGFkZXJNYW5hZ2VyIHtQSVhJLlNoYWRlck1hbmFnZXJ9IFRoZSBXZWJHTCBzaGFkZXIgbWFuYWdlciB0aGlzIHNoYWRlciB3b3JrcyBmb3IuXG4gKi9cbmZ1bmN0aW9uIE1lc2hTaGFkZXIoc2hhZGVyTWFuYWdlcilcbntcbiAgICBjb3JlLlNoYWRlci5jYWxsKHRoaXMsXG4gICAgICAgIHNoYWRlck1hbmFnZXIsXG4gICAgICAgIC8vIHZlcnRleCBzaGFkZXJcbiAgICAgICAgW1xuICAgICAgICAgICAgJ3ByZWNpc2lvbiBsb3dwIGZsb2F0OycsXG4gICAgICAgICAgICAnYXR0cmlidXRlIHZlYzIgYVZlcnRleFBvc2l0aW9uOycsXG4gICAgICAgICAgICAnYXR0cmlidXRlIHZlYzIgYVRleHR1cmVDb29yZDsnLFxuXG4gICAgICAgICAgICAndW5pZm9ybSBtYXQzIHRyYW5zbGF0aW9uTWF0cml4OycsXG4gICAgICAgICAgICAndW5pZm9ybSBtYXQzIHByb2plY3Rpb25NYXRyaXg7JyxcblxuICAgICAgICAgICAgJ3ZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkOycsXG5cbiAgICAgICAgICAgICd2b2lkIG1haW4odm9pZCl7JyxcbiAgICAgICAgICAgICcgICBnbF9Qb3NpdGlvbiA9IHZlYzQoKHByb2plY3Rpb25NYXRyaXggKiB0cmFuc2xhdGlvbk1hdHJpeCAqIHZlYzMoYVZlcnRleFBvc2l0aW9uLCAxLjApKS54eSwgMC4wLCAxLjApOycsXG4gICAgICAgICAgICAnICAgdlRleHR1cmVDb29yZCA9IGFUZXh0dXJlQ29vcmQ7JyxcbiAgICAgICAgICAgICd9J1xuICAgICAgICBdLmpvaW4oJ1xcbicpLFxuICAgICAgICBbXG4gICAgICAgICAgICAncHJlY2lzaW9uIGxvd3AgZmxvYXQ7JyxcblxuICAgICAgICAgICAgJ3ZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkOycsXG4gICAgICAgICAgICAndW5pZm9ybSBmbG9hdCBhbHBoYTsnLFxuXG4gICAgICAgICAgICAndW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXI7JyxcblxuICAgICAgICAgICAgJ3ZvaWQgbWFpbih2b2lkKXsnLFxuICAgICAgICAgICAgJyAgIGdsX0ZyYWdDb2xvciA9IHRleHR1cmUyRCh1U2FtcGxlciwgdlRleHR1cmVDb29yZCkgKiBhbHBoYSA7JyxcbiAgICAgICAgICAgICd9J1xuICAgICAgICBdLmpvaW4oJ1xcbicpLFxuICAgICAgICAvLyBjdXN0b20gdW5pZm9ybXNcbiAgICAgICAge1xuICAgICAgICAgICAgYWxwaGE6ICB7IHR5cGU6ICcxZicsIHZhbHVlOiAwIH0sXG4gICAgICAgICAgICB0cmFuc2xhdGlvbk1hdHJpeDogeyB0eXBlOiAnbWF0MycsIHZhbHVlOiBuZXcgRmxvYXQzMkFycmF5KDkpIH0sXG4gICAgICAgICAgICBwcm9qZWN0aW9uTWF0cml4OiB7IHR5cGU6ICdtYXQzJywgdmFsdWU6IG5ldyBGbG9hdDMyQXJyYXkoOSkgfVxuICAgICAgICB9LFxuICAgICAgICAvLyBjdXN0b20gYXR0cmlidXRlc1xuICAgICAgICB7XG4gICAgICAgICAgICBhVmVydGV4UG9zaXRpb246MCxcbiAgICAgICAgICAgIGFUZXh0dXJlQ29vcmQ6MFxuICAgICAgICB9XG4gICAgKTtcbn1cblxuTWVzaFNoYWRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuU2hhZGVyLnByb3RvdHlwZSk7XG5NZXNoU2hhZGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IE1lc2hTaGFkZXI7XG5tb2R1bGUuZXhwb3J0cyA9IE1lc2hTaGFkZXI7XG5cbmNvcmUuU2hhZGVyTWFuYWdlci5yZWdpc3RlclBsdWdpbignbWVzaFNoYWRlcicsIE1lc2hTaGFkZXIpO1xuIiwiLy8gUmVmZXJlbmNlczpcbi8vIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0phdmFTY3JpcHQvUmVmZXJlbmNlL0dsb2JhbF9PYmplY3RzL01hdGgvc2lnblxuXG5pZiAoIU1hdGguc2lnbilcbntcbiAgICBNYXRoLnNpZ24gPSBmdW5jdGlvbiAoeCkge1xuICAgICAgICB4ID0gK3g7XG4gICAgICAgIGlmICh4ID09PSAwIHx8IGlzTmFOKHgpKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4geDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4geCA+IDAgPyAxIDogLTE7XG4gICAgfTtcbn1cbiIsIi8vIFJlZmVyZW5jZXM6XG4vLyBodHRwczovL2dpdGh1Yi5jb20vc2luZHJlc29yaHVzL29iamVjdC1hc3NpZ25cbi8vIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0phdmFTY3JpcHQvUmVmZXJlbmNlL0dsb2JhbF9PYmplY3RzL09iamVjdC9hc3NpZ25cblxuaWYgKCFPYmplY3QuYXNzaWduKVxue1xuICAgIE9iamVjdC5hc3NpZ24gPSByZXF1aXJlKCdvYmplY3QtYXNzaWduJyk7XG59XG4iLCJyZXF1aXJlKCcuL09iamVjdC5hc3NpZ24nKTtcbnJlcXVpcmUoJy4vcmVxdWVzdEFuaW1hdGlvbkZyYW1lJyk7XG5yZXF1aXJlKCcuL01hdGguc2lnbicpO1xuIiwiLy8gUmVmZXJlbmNlczpcbi8vIGh0dHA6Ly9wYXVsaXJpc2guY29tLzIwMTEvcmVxdWVzdGFuaW1hdGlvbmZyYW1lLWZvci1zbWFydC1hbmltYXRpbmcvXG4vLyBodHRwczovL2dpc3QuZ2l0aHViLmNvbS8xNTc5NjcxXG4vLyBodHRwOi8vdXBkYXRlcy5odG1sNXJvY2tzLmNvbS8yMDEyLzA1L3JlcXVlc3RBbmltYXRpb25GcmFtZS1BUEktbm93LXdpdGgtc3ViLW1pbGxpc2Vjb25kLXByZWNpc2lvblxuLy8gaHR0cHM6Ly9naXN0LmdpdGh1Yi5jb20vdGltaGFsbC80MDc4NjE0XG4vLyBodHRwczovL2dpdGh1Yi5jb20vRmluYW5jaWFsLVRpbWVzL3BvbHlmaWxsLXNlcnZpY2UvdHJlZS9tYXN0ZXIvcG9seWZpbGxzL3JlcXVlc3RBbmltYXRpb25GcmFtZVxuXG4vLyBFeHBlY3RlZCB0byBiZSB1c2VkIHdpdGggQnJvd3NlcmZpeVxuLy8gQnJvd3NlcmlmeSBhdXRvbWF0aWNhbGx5IGRldGVjdHMgdGhlIHVzZSBvZiBgZ2xvYmFsYCBhbmQgcGFzc2VzIHRoZVxuLy8gY29ycmVjdCByZWZlcmVuY2Ugb2YgYGdsb2JhbGAsIGBzZWxmYCwgYW5kIGZpbmFsbHkgYHdpbmRvd2BcblxuLy8gRGF0ZS5ub3dcbmlmICghKERhdGUubm93ICYmIERhdGUucHJvdG90eXBlLmdldFRpbWUpKSB7XG4gICAgRGF0ZS5ub3cgPSBmdW5jdGlvbiBub3coKSB7XG4gICAgICAgIHJldHVybiBuZXcgRGF0ZSgpLmdldFRpbWUoKTtcbiAgICB9O1xufVxuXG4vLyBwZXJmb3JtYW5jZS5ub3dcbmlmICghKGdsb2JhbC5wZXJmb3JtYW5jZSAmJiBnbG9iYWwucGVyZm9ybWFuY2Uubm93KSkge1xuICAgIHZhciBzdGFydFRpbWUgPSBEYXRlLm5vdygpO1xuICAgIGlmICghZ2xvYmFsLnBlcmZvcm1hbmNlKSB7XG4gICAgICAgIGdsb2JhbC5wZXJmb3JtYW5jZSA9IHt9O1xuICAgIH1cbiAgICBnbG9iYWwucGVyZm9ybWFuY2Uubm93ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gRGF0ZS5ub3coKSAtIHN0YXJ0VGltZTtcbiAgICB9O1xufVxuXG4vLyByZXF1ZXN0QW5pbWF0aW9uRnJhbWVcbnZhciBsYXN0VGltZSA9IERhdGUubm93KCk7XG52YXIgdmVuZG9ycyA9IFsnbXMnLCAnbW96JywgJ3dlYmtpdCcsICdvJ107XG5cbmZvcih2YXIgeCA9IDA7IHggPCB2ZW5kb3JzLmxlbmd0aCAmJiAhZ2xvYmFsLnJlcXVlc3RBbmltYXRpb25GcmFtZTsgKyt4KSB7XG4gICAgZ2xvYmFsLnJlcXVlc3RBbmltYXRpb25GcmFtZSA9IGdsb2JhbFt2ZW5kb3JzW3hdICsgJ1JlcXVlc3RBbmltYXRpb25GcmFtZSddO1xuICAgIGdsb2JhbC5jYW5jZWxBbmltYXRpb25GcmFtZSA9IGdsb2JhbFt2ZW5kb3JzW3hdICsgJ0NhbmNlbEFuaW1hdGlvbkZyYW1lJ10gfHxcbiAgICAgICAgZ2xvYmFsW3ZlbmRvcnNbeF0gKyAnQ2FuY2VsUmVxdWVzdEFuaW1hdGlvbkZyYW1lJ107XG59XG5cbmlmICghZ2xvYmFsLnJlcXVlc3RBbmltYXRpb25GcmFtZSkge1xuICAgIGdsb2JhbC5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUgPSBmdW5jdGlvbiAoY2FsbGJhY2spIHtcbiAgICAgICAgaWYgKHR5cGVvZiBjYWxsYmFjayAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihjYWxsYmFjayArICdpcyBub3QgYSBmdW5jdGlvbicpO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGN1cnJlbnRUaW1lID0gRGF0ZS5ub3coKSxcbiAgICAgICAgICAgIGRlbGF5ID0gMTYgKyBsYXN0VGltZSAtIGN1cnJlbnRUaW1lO1xuXG4gICAgICAgIGlmIChkZWxheSA8IDApIHtcbiAgICAgICAgICAgIGRlbGF5ID0gMDtcbiAgICAgICAgfVxuXG4gICAgICAgIGxhc3RUaW1lID0gY3VycmVudFRpbWU7XG5cbiAgICAgICAgcmV0dXJuIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgbGFzdFRpbWUgPSBEYXRlLm5vdygpO1xuICAgICAgICAgICAgY2FsbGJhY2socGVyZm9ybWFuY2Uubm93KCkpO1xuICAgICAgICB9LCBkZWxheSk7XG4gICAgfTtcbn1cblxuaWYgKCFnbG9iYWwuY2FuY2VsQW5pbWF0aW9uRnJhbWUpIHtcbiAgICBnbG9iYWwuY2FuY2VsQW5pbWF0aW9uRnJhbWUgPSBmdW5jdGlvbihpZCkge1xuICAgICAgICBjbGVhclRpbWVvdXQoaWQpO1xuICAgIH07XG59XG4iXX0= //# sourceMappingURL=pixi.js.map diff --git a/bin/pixi.js b/bin/pixi.js index b57ad10..40862ec 100644 --- a/bin/pixi.js +++ b/bin/pixi.js @@ -1,7 +1,7 @@ /** * @license * pixi.js - v3.0.10-dev - * Compiled 2016-01-17T18:07:22.522Z + * Compiled 2016-01-17T18:16:46.120Z * * pixi.js is licensed under the MIT License. * http://www.opensource.org/licenses/mit-license.php @@ -10864,15 +10864,15 @@ ObjectRenderer = require('../../renderers/webgl/utils/ObjectRenderer'), WebGLRenderer = require('../../renderers/webgl/WebGLRenderer'), WebGLGraphicsData = require('./WebGLGraphicsData'), - PrimitiveShader = require('./PrimitiveShader'), + PrimitiveShader = require('./shaders/PrimitiveShader'), // some drawing functions.. - buildLine = require('./buildLine'); - buildPoly = require('./buildPoly'); - buildComplexPoly = require('./buildComplexPoly'); - buildRectangle = require('./buildRectangle'); - buildRoundedRectangle = require('./buildRoundedRectangle'); - buildCircle = require('./buildCircle'); + buildLine = require('./utils/buildLine'); + buildPoly = require('./utils/buildPoly'); + buildComplexPoly = require('./utils/buildComplexPoly'); + buildRectangle = require('./utils/buildRectangle'); + buildRoundedRectangle = require('./utils/buildRoundedRectangle'); + buildCircle = require('./utils/buildCircle'); earcut = require('earcut'); @@ -11177,59 +11177,7 @@ }; -},{"../../const":38,"../../math":55,"../../renderers/webgl/WebGLRenderer":72,"../../renderers/webgl/utils/ObjectRenderer":87,"../../utils":105,"./PrimitiveShader":44,"./WebGLGraphicsData":45,"./buildCircle":46,"./buildComplexPoly":47,"./buildLine":48,"./buildPoly":49,"./buildRectangle":50,"./buildRoundedRectangle":51,"earcut":24}],44:[function(require,module,exports){ -var Shader = require('pixi-gl-core').GLShader; - -/** - * This shader is used to draw simple primitive shapes for {@link PIXI.Graphics}. - * - * @class - * @memberof PIXI - * @extends PIXI.Shader - * @param shaderManager {ShaderManager} The webgl shader manager this shader works for. - */ -function PrimitiveShader(gl) -{ - Shader.call(this, - gl, - // vertex shader - [ - 'attribute vec2 aVertexPosition;', - 'attribute vec4 aColor;', - - 'uniform mat3 translationMatrix;', - 'uniform mat3 projectionMatrix;', - - 'uniform float alpha;', - 'uniform float flipY;', - 'uniform vec3 tint;', - - 'varying vec4 vColor;', - - 'void main(void){', - ' gl_Position = vec4((projectionMatrix * translationMatrix * vec3(aVertexPosition, 1.0)).xy, 0.0, 1.0);', - ' vColor = aColor * vec4(tint * alpha, alpha);', - '}' - ].join('\n'), - // fragment shader - [ - 'precision mediump float;', - - 'varying vec4 vColor;', - - 'void main(void){', - ' gl_FragColor = vColor;', - '}' - ].join('\n') - ); -} - -PrimitiveShader.prototype = Object.create(Shader.prototype); -PrimitiveShader.prototype.constructor = PrimitiveShader; - -module.exports = PrimitiveShader; - -},{"pixi-gl-core":1}],45:[function(require,module,exports){ +},{"../../const":38,"../../math":55,"../../renderers/webgl/WebGLRenderer":72,"../../renderers/webgl/utils/ObjectRenderer":87,"../../utils":105,"./WebGLGraphicsData":44,"./shaders/PrimitiveShader":45,"./utils/buildCircle":46,"./utils/buildComplexPoly":47,"./utils/buildLine":48,"./utils/buildPoly":49,"./utils/buildRectangle":50,"./utils/buildRoundedRectangle":51,"earcut":24}],44:[function(require,module,exports){ /** * An object containing WebGL specific properties to be used by the WebGL renderer * @@ -11347,9 +11295,61 @@ this.glIndices = null; }; -},{}],46:[function(require,module,exports){ +},{}],45:[function(require,module,exports){ +var Shader = require('pixi-gl-core').GLShader; + +/** + * This shader is used to draw simple primitive shapes for {@link PIXI.Graphics}. + * + * @class + * @memberof PIXI + * @extends PIXI.Shader + * @param shaderManager {ShaderManager} The webgl shader manager this shader works for. + */ +function PrimitiveShader(gl) +{ + Shader.call(this, + gl, + // vertex shader + [ + 'attribute vec2 aVertexPosition;', + 'attribute vec4 aColor;', + + 'uniform mat3 translationMatrix;', + 'uniform mat3 projectionMatrix;', + + 'uniform float alpha;', + 'uniform float flipY;', + 'uniform vec3 tint;', + + 'varying vec4 vColor;', + + 'void main(void){', + ' gl_Position = vec4((projectionMatrix * translationMatrix * vec3(aVertexPosition, 1.0)).xy, 0.0, 1.0);', + ' vColor = aColor * vec4(tint * alpha, alpha);', + '}' + ].join('\n'), + // fragment shader + [ + 'precision mediump float;', + + 'varying vec4 vColor;', + + 'void main(void){', + ' gl_FragColor = vColor;', + '}' + ].join('\n') + ); +} + +PrimitiveShader.prototype = Object.create(Shader.prototype); +PrimitiveShader.prototype.constructor = PrimitiveShader; + +module.exports = PrimitiveShader; + +},{"pixi-gl-core":1}],46:[function(require,module,exports){ var buildLine = require('./buildLine'), - utils = require('../../utils'); + utils = require('../../../utils'); /** * Builds a circle to draw @@ -11426,7 +11426,7 @@ y + Math.cos(seg * i) * height); } - this.buildLine(graphicsData, webGLData); + buildLine(graphicsData, webGLData); graphicsData.points = tempPoints; } @@ -11434,9 +11434,9 @@ module.exports = buildCircle; -},{"../../utils":105,"./buildLine":48}],47:[function(require,module,exports){ +},{"../../../utils":105,"./buildLine":48}],47:[function(require,module,exports){ var buildLine = require('./buildLine'), - utils = require('../../utils'); + utils = require('../../../utils'); @@ -11505,9 +11505,9 @@ module.exports = buildComplexPoly; -},{"../../utils":105,"./buildLine":48}],48:[function(require,module,exports){ -var math = require('../../math'), - utils = require('../../utils'); +},{"../../../utils":105,"./buildLine":48}],48:[function(require,module,exports){ +var math = require('../../../math'), + utils = require('../../../utils'); /** * Builds a line to draw @@ -11725,8 +11725,8 @@ }; module.exports = buildLine; -},{"../../math":55,"../../utils":105}],49:[function(require,module,exports){ -var utils = require('../../utils'); +},{"../../../math":55,"../../../utils":105}],49:[function(require,module,exports){ +var utils = require('../../../utils'); /** * Builds a polygon to draw @@ -11788,9 +11788,9 @@ module.exports = buildPoly; -},{"../../utils":105}],50:[function(require,module,exports){ +},{"../../../utils":105}],50:[function(require,module,exports){ var buildLine = require('./buildLine'), - utils = require('../../utils'); + utils = require('../../../utils'); /** * Builds a rectangle to draw @@ -11859,9 +11859,9 @@ }; module.exports = buildRectangle; -},{"../../utils":105,"./buildLine":48}],51:[function(require,module,exports){ +},{"../../../utils":105,"./buildLine":48}],51:[function(require,module,exports){ var buildLine = require('./buildLine'), - utils = require('../../utils'); + utils = require('../../../utils'); /** * Builds a rounded rectangle to draw @@ -11987,7 +11987,7 @@ module.exports = buildRoundedRectangle; -},{"../../utils":105,"./buildLine":48}],52:[function(require,module,exports){ +},{"../../../utils":105,"./buildLine":48}],52:[function(require,module,exports){ /** * @file Main export of the PIXI core library * @author Mat Groves @@ -30075,6 +30075,6 @@ },{}]},{},[143])(143) }); -//# sourceMappingURL=data:application/json;charset:utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIm5vZGVfbW9kdWxlcy9icm93c2VyaWZ5L25vZGVfbW9kdWxlcy9icm93c2VyLXBhY2svX3ByZWx1ZGUuanMiLCIuLi9waXhpLWdsLWNvcmUvaW5kZXguanMiLCIuLi9waXhpLWdsLWNvcmUvbGliL0dMQnVmZmVyLmpzIiwiLi4vcGl4aS1nbC1jb3JlL2xpYi9HTEZyYW1lYnVmZmVyLmpzIiwiLi4vcGl4aS1nbC1jb3JlL2xpYi9HTFNoYWRlci5qcyIsIi4uL3BpeGktZ2wtY29yZS9saWIvR0xUZXh0dXJlLmpzIiwiLi4vcGl4aS1nbC1jb3JlL2xpYi9WZXJ0ZXhBcnJheU9iamVjdC5qcyIsIi4uL3BpeGktZ2wtY29yZS9saWIvY3JlYXRlQ29udGV4dC5qcyIsIi4uL3BpeGktZ2wtY29yZS9saWIvc2V0VmVydGV4QXR0cmliQXJyYXlzLmpzIiwiLi4vcGl4aS1nbC1jb3JlL2xpYi9zaGFkZXIvY29tcGlsZVByb2dyYW0uanMiLCIuLi9waXhpLWdsLWNvcmUvbGliL3NoYWRlci9kZWZhdWx0VmFsdWUuanMiLCIuLi9waXhpLWdsLWNvcmUvbGliL3NoYWRlci9leHRyYWN0QXR0cmlidXRlcy5qcyIsIi4uL3BpeGktZ2wtY29yZS9saWIvc2hhZGVyL2V4dHJhY3RVbmlmb3Jtcy5qcyIsIi4uL3BpeGktZ2wtY29yZS9saWIvc2hhZGVyL2dlbmVyYXRlVW5pZm9ybUFjY2Vzc09iamVjdC5qcyIsIi4uL3BpeGktZ2wtY29yZS9saWIvc2hhZGVyL21hcFNpemUuanMiLCIuLi9waXhpLWdsLWNvcmUvbGliL3NoYWRlci9tYXBUeXBlLmpzIiwibm9kZV9tb2R1bGVzL2FzeW5jL2xpYi9hc3luYy5qcyIsIm5vZGVfbW9kdWxlcy9icm93c2VyaWZ5L25vZGVfbW9kdWxlcy9wYXRoLWJyb3dzZXJpZnkvaW5kZXguanMiLCJub2RlX21vZHVsZXMvYnJvd3NlcmlmeS9ub2RlX21vZHVsZXMvcHJvY2Vzcy9icm93c2VyLmpzIiwibm9kZV9tb2R1bGVzL2Jyb3dzZXJpZnkvbm9kZV9tb2R1bGVzL3B1bnljb2RlL3B1bnljb2RlLmpzIiwibm9kZV9tb2R1bGVzL2Jyb3dzZXJpZnkvbm9kZV9tb2R1bGVzL3F1ZXJ5c3RyaW5nLWVzMy9kZWNvZGUuanMiLCJub2RlX21vZHVsZXMvYnJvd3NlcmlmeS9ub2RlX21vZHVsZXMvcXVlcnlzdHJpbmctZXMzL2VuY29kZS5qcyIsIm5vZGVfbW9kdWxlcy9icm93c2VyaWZ5L25vZGVfbW9kdWxlcy9xdWVyeXN0cmluZy1lczMvaW5kZXguanMiLCJub2RlX21vZHVsZXMvYnJvd3NlcmlmeS9ub2RlX21vZHVsZXMvdXJsL3VybC5qcyIsIm5vZGVfbW9kdWxlcy9lYXJjdXQvc3JjL2VhcmN1dC5qcyIsIm5vZGVfbW9kdWxlcy9ldmVudGVtaXR0ZXIzL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL29iamVjdC1hc3NpZ24vaW5kZXguanMiLCJub2RlX21vZHVsZXMvcmVzb3VyY2UtbG9hZGVyL25vZGVfbW9kdWxlcy9hc3luYy9saWIvYXN5bmMuanMiLCJub2RlX21vZHVsZXMvcmVzb3VyY2UtbG9hZGVyL3NyYy9Mb2FkZXIuanMiLCJub2RlX21vZHVsZXMvcmVzb3VyY2UtbG9hZGVyL3NyYy9SZXNvdXJjZS5qcyIsIm5vZGVfbW9kdWxlcy9yZXNvdXJjZS1sb2FkZXIvc3JjL2I2NC5qcyIsIm5vZGVfbW9kdWxlcy9yZXNvdXJjZS1sb2FkZXIvc3JjL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL3Jlc291cmNlLWxvYWRlci9zcmMvbWlkZGxld2FyZXMvY2FjaGluZy9tZW1vcnkuanMiLCJub2RlX21vZHVsZXMvcmVzb3VyY2UtbG9hZGVyL3NyYy9taWRkbGV3YXJlcy9wYXJzaW5nL2Jsb2IuanMiLCJwYWNrYWdlLmpzb24iLCJzcmMvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5TWFuYWdlci5qcyIsInNyYy9hY2Nlc3NpYmlsaXR5L2FjY2Vzc2libGVUYXJnZXQuanMiLCJzcmMvYWNjZXNzaWJpbGl0eS9pbmRleC5qcyIsInNyYy9jb3JlL2NvbnN0LmpzIiwic3JjL2NvcmUvZGlzcGxheS9Db250YWluZXIuanMiLCJzcmMvY29yZS9kaXNwbGF5L0Rpc3BsYXlPYmplY3QuanMiLCJzcmMvY29yZS9ncmFwaGljcy9HcmFwaGljcy5qcyIsInNyYy9jb3JlL2dyYXBoaWNzL0dyYXBoaWNzRGF0YS5qcyIsInNyYy9jb3JlL2dyYXBoaWNzL3dlYmdsL0dyYXBoaWNzUmVuZGVyZXIuanMiLCJzcmMvY29yZS9ncmFwaGljcy93ZWJnbC9QcmltaXRpdmVTaGFkZXIuanMiLCJzcmMvY29yZS9ncmFwaGljcy93ZWJnbC9XZWJHTEdyYXBoaWNzRGF0YS5qcyIsInNyYy9jb3JlL2dyYXBoaWNzL3dlYmdsL2J1aWxkQ2lyY2xlLmpzIiwic3JjL2NvcmUvZ3JhcGhpY3Mvd2ViZ2wvYnVpbGRDb21wbGV4UG9seS5qcyIsInNyYy9jb3JlL2dyYXBoaWNzL3dlYmdsL2J1aWxkTGluZS5qcyIsInNyYy9jb3JlL2dyYXBoaWNzL3dlYmdsL2J1aWxkUG9seS5qcyIsInNyYy9jb3JlL2dyYXBoaWNzL3dlYmdsL2J1aWxkUmVjdGFuZ2xlLmpzIiwic3JjL2NvcmUvZ3JhcGhpY3Mvd2ViZ2wvYnVpbGRSb3VuZGVkUmVjdGFuZ2xlLmpzIiwic3JjL2NvcmUvaW5kZXguanMiLCJzcmMvY29yZS9tYXRoL01hdHJpeC5qcyIsInNyYy9jb3JlL21hdGgvUG9pbnQuanMiLCJzcmMvY29yZS9tYXRoL2luZGV4LmpzIiwic3JjL2NvcmUvbWF0aC9zaGFwZXMvQ2lyY2xlLmpzIiwic3JjL2NvcmUvbWF0aC9zaGFwZXMvRWxsaXBzZS5qcyIsInNyYy9jb3JlL21hdGgvc2hhcGVzL1BvbHlnb24uanMiLCJzcmMvY29yZS9tYXRoL3NoYXBlcy9SZWN0YW5nbGUuanMiLCJzcmMvY29yZS9tYXRoL3NoYXBlcy9Sb3VuZGVkUmVjdGFuZ2xlLmpzIiwic3JjL2NvcmUvcGFydGljbGVzL1BhcnRpY2xlQ29udGFpbmVyLmpzIiwic3JjL2NvcmUvcGFydGljbGVzL3dlYmdsL1BhcnRpY2xlQnVmZmVyLmpzIiwic3JjL2NvcmUvcGFydGljbGVzL3dlYmdsL1BhcnRpY2xlUmVuZGVyZXIuanMiLCJzcmMvY29yZS9wYXJ0aWNsZXMvd2ViZ2wvUGFydGljbGVTaGFkZXIuanMiLCJzcmMvY29yZS9yZW5kZXJlcnMvU3lzdGVtUmVuZGVyZXIuanMiLCJzcmMvY29yZS9yZW5kZXJlcnMvY2FudmFzL0NhbnZhc1JlbmRlcmVyLmpzIiwic3JjL2NvcmUvcmVuZGVyZXJzL2NhbnZhcy91dGlscy9DYW52YXNCdWZmZXIuanMiLCJzcmMvY29yZS9yZW5kZXJlcnMvY2FudmFzL3V0aWxzL0NhbnZhc0dyYXBoaWNzLmpzIiwic3JjL2NvcmUvcmVuZGVyZXJzL2NhbnZhcy91dGlscy9DYW52YXNNYXNrTWFuYWdlci5qcyIsInNyYy9jb3JlL3JlbmRlcmVycy9jYW52YXMvdXRpbHMvQ2FudmFzVGludGVyLmpzIiwic3JjL2NvcmUvcmVuZGVyZXJzL3dlYmdsL1RleHR1cmVNYW5hZ2VyLmpzIiwic3JjL2NvcmUvcmVuZGVyZXJzL3dlYmdsL1dlYkdMUmVuZGVyZXIuanMiLCJzcmMvY29yZS9yZW5kZXJlcnMvd2ViZ2wvZmlsdGVycy9BYnN0cmFjdEZpbHRlci5qcyIsInNyYy9jb3JlL3JlbmRlcmVycy93ZWJnbC9maWx0ZXJzL0ZYQUFGaWx0ZXIuanMiLCJzcmMvY29yZS9yZW5kZXJlcnMvd2ViZ2wvZmlsdGVycy9TcHJpdGVNYXNrRmlsdGVyLmpzIiwic3JjL2NvcmUvcmVuZGVyZXJzL3dlYmdsL21hbmFnZXJzL0JsZW5kTW9kZU1hbmFnZXIuanMiLCJzcmMvY29yZS9yZW5kZXJlcnMvd2ViZ2wvbWFuYWdlcnMvRmlsdGVyTWFuYWdlci5qcyIsInNyYy9jb3JlL3JlbmRlcmVycy93ZWJnbC9tYW5hZ2Vycy9NYXNrTWFuYWdlci5qcyIsInNyYy9jb3JlL3JlbmRlcmVycy93ZWJnbC9tYW5hZ2Vycy9TaGFkZXJNYW5hZ2VyLmpzIiwic3JjL2NvcmUvcmVuZGVyZXJzL3dlYmdsL21hbmFnZXJzL1N0ZW5jaWxNYW5hZ2VyLmpzIiwic3JjL2NvcmUvcmVuZGVyZXJzL3dlYmdsL21hbmFnZXJzL1dlYkdMTWFuYWdlci5qcyIsInNyYy9jb3JlL3JlbmRlcmVycy93ZWJnbC9zaGFkZXJzL0NvbXBsZXhQcmltaXRpdmVTaGFkZXIuanMiLCJzcmMvY29yZS9yZW5kZXJlcnMvd2ViZ2wvc2hhZGVycy9QcmltaXRpdmVTaGFkZXIuanMiLCJzcmMvY29yZS9yZW5kZXJlcnMvd2ViZ2wvc2hhZGVycy9TaGFkZXIuanMiLCJzcmMvY29yZS9yZW5kZXJlcnMvd2ViZ2wvc2hhZGVycy9UZXh0dXJlU2hhZGVyLmpzIiwic3JjL2NvcmUvcmVuZGVyZXJzL3dlYmdsL3NoYWRlcnMvX1RleHR1cmVTaGFkZXIuanMiLCJzcmMvY29yZS9yZW5kZXJlcnMvd2ViZ2wvdXRpbHMvT2JqZWN0UmVuZGVyZXIuanMiLCJzcmMvY29yZS9yZW5kZXJlcnMvd2ViZ2wvdXRpbHMvUXVhZC5qcyIsInNyYy9jb3JlL3JlbmRlcmVycy93ZWJnbC91dGlscy9SZW5kZXJUYXJnZXQuanMiLCJzcmMvY29yZS9yZW5kZXJlcnMvd2ViZ2wvdXRpbHMvU3RlbmNpbE1hc2tTdGFjay5qcyIsInNyYy9jb3JlL3JlbmRlcmVycy93ZWJnbC91dGlscy9tYXBXZWJHTEJsZW5kTW9kZXNUb1BpeGkuanMiLCJzcmMvY29yZS9yZW5kZXJlcnMvd2ViZ2wvdXRpbHMvbWFwV2ViR0xEcmF3TW9kZXNUb1BpeGkuanMiLCJzcmMvY29yZS9zcHJpdGVzL1Nwcml0ZS5qcyIsInNyYy9jb3JlL3Nwcml0ZXMvd2ViZ2wvU3ByaXRlUmVuZGVyZXIuanMiLCJzcmMvY29yZS9zcHJpdGVzL3dlYmdsL2dlbmVyYXRlTXVsdGlUZXh0dXJlU2hhZGVyLmpzIiwic3JjL2NvcmUvdGV4dC9UZXh0LmpzIiwic3JjL2NvcmUvdGV4dHVyZXMvQmFzZVRleHR1cmUuanMiLCJzcmMvY29yZS90ZXh0dXJlcy9SZW5kZXJUZXh0dXJlLmpzIiwic3JjL2NvcmUvdGV4dHVyZXMvVGV4dHVyZS5qcyIsInNyYy9jb3JlL3RleHR1cmVzL1RleHR1cmVVdnMuanMiLCJzcmMvY29yZS90ZXh0dXJlcy9WaWRlb0Jhc2VUZXh0dXJlLmpzIiwic3JjL2NvcmUvdGlja2VyL1RpY2tlci5qcyIsInNyYy9jb3JlL3RpY2tlci9pbmRleC5qcyIsInNyYy9jb3JlL3V0aWxzL2NyZWF0ZUluZGljZXNGb3JRdWFkcy5qcyIsInNyYy9jb3JlL3V0aWxzL2luZGV4LmpzIiwic3JjL2NvcmUvdXRpbHMvcGx1Z2luVGFyZ2V0LmpzIiwic3JjL2RlcHJlY2F0aW9uLmpzIiwic3JjL2V4dHJhcy9CaXRtYXBUZXh0LmpzIiwic3JjL2V4dHJhcy9Nb3ZpZUNsaXAuanMiLCJzcmMvZXh0cmFzL1RpbGluZ1Nwcml0ZS5qcyIsInNyYy9leHRyYXMvY2FjaGVBc0JpdG1hcC5qcyIsInNyYy9leHRyYXMvZ2V0Q2hpbGRCeU5hbWUuanMiLCJzcmMvZXh0cmFzL2dldEdsb2JhbFBvc2l0aW9uLmpzIiwic3JjL2V4dHJhcy9pbmRleC5qcyIsInNyYy9maWx0ZXJzL2FzY2lpL0FzY2lpRmlsdGVyLmpzIiwic3JjL2ZpbHRlcnMvYmxvb20vQmxvb21GaWx0ZXIuanMiLCJzcmMvZmlsdGVycy9ibHVyL0JsdXJEaXJGaWx0ZXIuanMiLCJzcmMvZmlsdGVycy9ibHVyL0JsdXJGaWx0ZXIuanMiLCJzcmMvZmlsdGVycy9ibHVyL0JsdXJYRmlsdGVyLmpzIiwic3JjL2ZpbHRlcnMvYmx1ci9CbHVyWUZpbHRlci5qcyIsInNyYy9maWx0ZXJzL2JsdXIvU21hcnRCbHVyRmlsdGVyLmpzIiwic3JjL2ZpbHRlcnMvY29sb3IvQ29sb3JNYXRyaXhGaWx0ZXIuanMiLCJzcmMvZmlsdGVycy9jb2xvci9Db2xvclN0ZXBGaWx0ZXIuanMiLCJzcmMvZmlsdGVycy9jb252b2x1dGlvbi9Db252b2x1dGlvbkZpbHRlci5qcyIsInNyYy9maWx0ZXJzL2Nyb3NzaGF0Y2gvQ3Jvc3NIYXRjaEZpbHRlci5qcyIsInNyYy9maWx0ZXJzL2Rpc3BsYWNlbWVudC9EaXNwbGFjZW1lbnRGaWx0ZXIuanMiLCJzcmMvZmlsdGVycy9kb3QvRG90U2NyZWVuRmlsdGVyLmpzIiwic3JjL2ZpbHRlcnMvZHJvcHNoYWRvdy9CbHVyWVRpbnRGaWx0ZXIuanMiLCJzcmMvZmlsdGVycy9kcm9wc2hhZG93L0Ryb3BTaGFkb3dGaWx0ZXIuanMiLCJzcmMvZmlsdGVycy9ncmF5L0dyYXlGaWx0ZXIuanMiLCJzcmMvZmlsdGVycy9pbmRleC5qcyIsInNyYy9maWx0ZXJzL2ludmVydC9JbnZlcnRGaWx0ZXIuanMiLCJzcmMvZmlsdGVycy9ub2lzZS9Ob2lzZUZpbHRlci5qcyIsInNyYy9maWx0ZXJzL3BpeGVsYXRlL1BpeGVsYXRlRmlsdGVyLmpzIiwic3JjL2ZpbHRlcnMvcmdiL1JHQlNwbGl0RmlsdGVyLmpzIiwic3JjL2ZpbHRlcnMvc2VwaWEvU2VwaWFGaWx0ZXIuanMiLCJzcmMvZmlsdGVycy9zaG9ja3dhdmUvU2hvY2t3YXZlRmlsdGVyLmpzIiwic3JjL2ZpbHRlcnMvdGlsdHNoaWZ0L1RpbHRTaGlmdEF4aXNGaWx0ZXIuanMiLCJzcmMvZmlsdGVycy90aWx0c2hpZnQvVGlsdFNoaWZ0RmlsdGVyLmpzIiwic3JjL2ZpbHRlcnMvdGlsdHNoaWZ0L1RpbHRTaGlmdFhGaWx0ZXIuanMiLCJzcmMvZmlsdGVycy90aWx0c2hpZnQvVGlsdFNoaWZ0WUZpbHRlci5qcyIsInNyYy9maWx0ZXJzL3R3aXN0L1R3aXN0RmlsdGVyLmpzIiwic3JjL3NyYy9pbmRleC5qcyIsInNyYy9pbnRlcmFjdGlvbi9JbnRlcmFjdGlvbkRhdGEuanMiLCJzcmMvaW50ZXJhY3Rpb24vSW50ZXJhY3Rpb25NYW5hZ2VyLmpzIiwic3JjL2ludGVyYWN0aW9uL2luZGV4LmpzIiwic3JjL2ludGVyYWN0aW9uL2ludGVyYWN0aXZlVGFyZ2V0LmpzIiwic3JjL2xvYWRlcnMvYml0bWFwRm9udFBhcnNlci5qcyIsInNyYy9sb2FkZXJzL2luZGV4LmpzIiwic3JjL2xvYWRlcnMvbG9hZGVyLmpzIiwic3JjL2xvYWRlcnMvc3ByaXRlc2hlZXRQYXJzZXIuanMiLCJzcmMvbG9hZGVycy90ZXh0dXJlUGFyc2VyLmpzIiwic3JjL21lc2gvTWVzaC5qcyIsInNyYy9tZXNoL1BsYW5lLmpzIiwic3JjL21lc2gvUm9wZS5qcyIsInNyYy9tZXNoL2luZGV4LmpzIiwic3JjL21lc2gvd2ViZ2wvTWVzaFJlbmRlcmVyLmpzIiwic3JjL21lc2gvd2ViZ2wvTWVzaFNoYWRlci5qcyIsInNyYy9wb2x5ZmlsbC9NYXRoLnNpZ24uanMiLCJzcmMvcG9seWZpbGwvT2JqZWN0LmFzc2lnbi5qcyIsInNyYy9wb2x5ZmlsbC9pbmRleC5qcyIsInNyYy9wb2x5ZmlsbC9yZXF1ZXN0QW5pbWF0aW9uRnJhbWUuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUNBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbklBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDeENBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdk1BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNqSEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDOUJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3REQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN6REE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2xDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDN0JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0SUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2hDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUM5Q0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7O0FDNXVDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7QUNoT0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FDM0ZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7OztBQ3JoQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDcEZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDckZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDSkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ25zQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdGtCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3RRQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FDdkNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7QUNubUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3hjQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDaHlCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2hFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNaQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDcEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDMURBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMxRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuWkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzVDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzdOQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNyb0JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3ZtQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdG9DQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzNGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM5VEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2xEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDcEhBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDckZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3JFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDMU5BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDN0RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3JFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM5SEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDN0ZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3RiQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDcEVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNwQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3RGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM3RkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3JHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNUZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzFGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDN1RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMxTkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDMWRBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDblFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMxUUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2xHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2hXQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM1REE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMxUEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDMUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMzWUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzlHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDckRBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMvRkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDMUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2xjQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDakhBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3hLQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDN1dBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3ZDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM1REE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM3REE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM5Z0JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDN0dBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDL0VBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN4REE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDekpBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDalNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDL0JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3ptQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3ZXQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzdEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzNtQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbmJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzdkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3hhQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQy9FQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzNPQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDaldBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3REQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQy9CQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDblJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNwRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM3VkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2xZQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM5VEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbGNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzlRQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzVCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzVCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ25CQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3ZEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzVJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM1R0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMzRkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDcEZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNUJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3RoQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQy9DQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDekZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3hCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2xGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3RFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDekZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMvTEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQy9DQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3JDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNoREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3JEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2pEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNwRkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDaERBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0RkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDM0hBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzVHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNwQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDcENBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FDbkZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7QUM1QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQy9DQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzEyQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQy9DQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdkhBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbkJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzVEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2xGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDcEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzFkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzVIQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ25OQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDakJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuT0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzNEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ1JBO0FBQ0E7QUFDQTtBQUNBOzs7QUNIQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsImZpbGUiOiJnZW5lcmF0ZWQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlc0NvbnRlbnQiOlsiKGZ1bmN0aW9uIGUodCxuLHIpe2Z1bmN0aW9uIHMobyx1KXtpZighbltvXSl7aWYoIXRbb10pe3ZhciBhPXR5cGVvZiByZXF1aXJlPT1cImZ1bmN0aW9uXCImJnJlcXVpcmU7aWYoIXUmJmEpcmV0dXJuIGEobywhMCk7aWYoaSlyZXR1cm4gaShvLCEwKTt2YXIgZj1uZXcgRXJyb3IoXCJDYW5ub3QgZmluZCBtb2R1bGUgJ1wiK28rXCInXCIpO3Rocm93IGYuY29kZT1cIk1PRFVMRV9OT1RfRk9VTkRcIixmfXZhciBsPW5bb109e2V4cG9ydHM6e319O3Rbb11bMF0uY2FsbChsLmV4cG9ydHMsZnVuY3Rpb24oZSl7dmFyIG49dFtvXVsxXVtlXTtyZXR1cm4gcyhuP246ZSl9LGwsbC5leHBvcnRzLGUsdCxuLHIpfXJldHVybiBuW29dLmV4cG9ydHN9dmFyIGk9dHlwZW9mIHJlcXVpcmU9PVwiZnVuY3Rpb25cIiYmcmVxdWlyZTtmb3IodmFyIG89MDtvPHIubGVuZ3RoO28rKylzKHJbb10pO3JldHVybiBzfSkiLCJcblxubW9kdWxlLmV4cG9ydHMgPSB7XG5cbiAgICBjcmVhdGVDb250ZXh0OiBcdFx0XHRyZXF1aXJlKCcuL2xpYi9jcmVhdGVDb250ZXh0JyksXG4gICAgc2V0VmVydGV4QXR0cmliQXJyYXlzOiBcdHJlcXVpcmUoJy4vbGliL3NldFZlcnRleEF0dHJpYkFycmF5cycpLFxuICAgIFxuICAgIEdMQnVmZmVyOiBcdFx0XHRcdHJlcXVpcmUoJy4vbGliL0dMQnVmZmVyJyksXG4gICAgR0xGcmFtZWJ1ZmZlcjogXHRcdFx0cmVxdWlyZSgnLi9saWIvR0xGcmFtZWJ1ZmZlcicpLFxuICAgIEdMU2hhZGVyOiBcdFx0XHRcdHJlcXVpcmUoJy4vbGliL0dMU2hhZGVyJyksXG4gICAgR0xUZXh0dXJlOiBcdFx0XHRcdHJlcXVpcmUoJy4vbGliL0dMVGV4dHVyZScpLFxuICAgIFxuICAgIFZlcnRleEFycmF5T2JqZWN0OiBcdFx0cmVxdWlyZSgnLi9saWIvVmVydGV4QXJyYXlPYmplY3QnKVxuXG59OyIsIlxuLyoqXG4gKiBIZWxwZXIgY2xhc3MgdG8gY3JlYXRlIGEgd2ViR0wgYnVmZmVyXG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIGdsIHtXZWJHTFJlbmRlcmluZ0NvbnRleHR9XG4gKi9cblxudmFyIEVNUFRZX0FSUkFZX0JVRkZFUiA9IG5ldyBBcnJheUJ1ZmZlcigwKTtcblxudmFyIEJ1ZmZlciA9IGZ1bmN0aW9uKGdsLCB0eXBlLCBkYXRhLCBkcmF3VHlwZSlcbntcblx0dGhpcy5nbCA9IGdsO1xuXG5cdHRoaXMuYnVmZmVyID0gZ2wuY3JlYXRlQnVmZmVyKCk7XG5cdHRoaXMudHlwZSA9IHR5cGUgfHwgZ2wuQVJSQVlfQlVGRkVSO1xuXHR0aGlzLmRyYXdUeXBlID0gZHJhd1R5cGUgfHwgZ2wuU1RBVElDX0RSQVc7XG5cdHRoaXMuZGF0YSA9IEVNUFRZX0FSUkFZX0JVRkZFUjtcblxuXHRpZihkYXRhKVxuXHR7XG5cdFx0dGhpcy51cGxvYWQoZGF0YSk7XG5cdH1cbn1cblxuQnVmZmVyLnByb3RvdHlwZS51cGxvYWQgPSBmdW5jdGlvbihkYXRhLCBvZmZzZXQsIGRvbnRCaW5kKVxue1xuXHQvLyB0b2RvIC0gbmVlZGVkP1xuXHQvL2lmKCFkb250QmluZClcblx0dGhpcy5iaW5kKCk7XG5cblx0dmFyIGdsID0gdGhpcy5nbDtcblx0XG5cdGRhdGEgPSBkYXRhIHx8IHRoaXMuZGF0YTtcblx0b2Zmc2V0ID0gb2Zmc2V0IHx8IDA7XG5cblx0aWYodGhpcy5kYXRhLmJ5dGVMZW5ndGggPj0gZGF0YS5ieXRlTGVuZ3RoKVxuXHR7XHRcblx0XHRnbC5idWZmZXJTdWJEYXRhKHRoaXMudHlwZSwgb2Zmc2V0LCBkYXRhKTtcblx0fVxuXHRlbHNlXG5cdHtcblx0XHRnbC5idWZmZXJEYXRhKHRoaXMudHlwZSwgZGF0YSwgdGhpcy5kcmF3VHlwZSk7XG5cdH1cblxuXHR0aGlzLmRhdGEgPSBkYXRhO1xufVxuXG5CdWZmZXIucHJvdG90eXBlLmJpbmQgPSBmdW5jdGlvbigpXG57XG5cdHZhciBnbCA9IHRoaXMuZ2w7XG5cdGdsLmJpbmRCdWZmZXIodGhpcy50eXBlLCB0aGlzLmJ1ZmZlcik7XG59XG5cbkJ1ZmZlci5jcmVhdGVWZXJ0ZXhCdWZmZXIgPSBmdW5jdGlvbihnbCwgZGF0YSwgZHJhd1R5cGUpXG57XG5cdHJldHVybiBuZXcgQnVmZmVyKGdsLCBnbC5BUlJBWV9CVUZGRVIsIGRhdGEsIGRyYXdUeXBlKTtcbn1cblxuQnVmZmVyLmNyZWF0ZUluZGV4QnVmZmVyID0gZnVuY3Rpb24oZ2wsIGRhdGEsIGRyYXdUeXBlKVxue1xuXHRyZXR1cm4gbmV3IEJ1ZmZlcihnbCwgZ2wuRUxFTUVOVF9BUlJBWV9CVUZGRVIsIGRhdGEsIGRyYXdUeXBlKTtcbn1cblxuQnVmZmVyLmNyZWF0ZSA9IGZ1bmN0aW9uKGdsLCB0eXBlLCBkYXRhLCBkcmF3VHlwZSlcbntcblx0cmV0dXJuIG5ldyBCdWZmZXIoZ2wsIHR5cGUsIGRyYXdUeXBlKTtcbn1cblxuLy9UT0RPIERlc3Ryb3kuLlxuXG5tb2R1bGUuZXhwb3J0cyA9IEJ1ZmZlcjtcblxuIiwiXG52YXIgVGV4dHVyZSA9IHJlcXVpcmUoJy4vR0xUZXh0dXJlJyk7XG5cbi8qKlxuICogSGVscGVyIGNsYXNzIHRvIGNyZWF0ZSBhIHdlYkdMIEZyYW1lYnVmZmVyXG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIGdsIHtXZWJHTFJlbmRlcmluZ0NvbnRleHR9XG4gKi9cblxudmFyIEZyYW1lYnVmZmVyID0gZnVuY3Rpb24oZ2wsIHdpZHRoLCBoZWlnaHQpXG57XG5cdHRoaXMuZ2wgPSBnbDtcblxuXHR0aGlzLmZyYW1lYnVmZmVyID0gZ2wuY3JlYXRlRnJhbWVidWZmZXIoKTtcblx0XG5cdHRoaXMuc3RlbmNpbCA9IG51bGw7XG5cdHRoaXMudGV4dHVyZSA9IG51bGw7XG5cblx0dGhpcy53aWR0aCA9IHdpZHRoIHx8IDEwMDtcblx0dGhpcy5oZWlnaHQgPSBoZWlnaHQgfHwgMTAwO1xufVxuXG5GcmFtZWJ1ZmZlci5wcm90b3R5cGUuZW5hYmxlVGV4dHVyZSA9IGZ1bmN0aW9uKHRleHR1cmUpXG57XG5cdHZhciBnbCA9IHRoaXMuZ2w7XG5cblx0dGhpcy50ZXh0dXJlID0gdGV4dHVyZSB8fCBuZXcgVGV4dHVyZShnbCk7XG5cblx0dGhpcy50ZXh0dXJlLmJpbmQoKTtcblxuXHQvL2dsLnRleEltYWdlMkQoZ2wuVEVYVFVSRV8yRCwgMCwgZ2wuUkdCQSwgIHRoaXMud2lkdGgsIHRoaXMuaGVpZ2h0LCAwLCBnbC5SR0JBLCBnbC5VTlNJR05FRF9CWVRFLCBudWxsKTtcblxuXHR0aGlzLmJpbmQoKTtcblxuXHRnbC5mcmFtZWJ1ZmZlclRleHR1cmUyRChnbC5GUkFNRUJVRkZFUiwgZ2wuQ09MT1JfQVRUQUNITUVOVDAsIGdsLlRFWFRVUkVfMkQsIHRoaXMudGV4dHVyZS50ZXh0dXJlLCAwKTtcbn1cblxuRnJhbWVidWZmZXIucHJvdG90eXBlLmVuYWJsZVN0ZW5jaWwgPSBmdW5jdGlvbigpXG57XG5cdGlmKHRoaXMuc3RlbmNpbClyZXR1cm47XG5cblx0dmFyIGdsID0gdGhpcy5nbDtcblxuXHR0aGlzLnN0ZW5jaWwgPSBnbC5jcmVhdGVSZW5kZXJidWZmZXIoKTtcbiAgICBcbiAgICBnbC5iaW5kUmVuZGVyYnVmZmVyKGdsLlJFTkRFUkJVRkZFUiwgdGhpcy5zdGVuY2lsKTtcbiAgICBcbiAgICAvLyBUT0RPLi4gdGhpcyBpcyBkZXB0aCBBTkQgc3RlbmNpbD9cbiAgICBnbC5mcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcihnbC5GUkFNRUJVRkZFUiwgZ2wuREVQVEhfU1RFTkNJTF9BVFRBQ0hNRU5ULCBnbC5SRU5ERVJCVUZGRVIsIHRoaXMuc3RlbmNpbCk7XG4gICAgZ2wucmVuZGVyYnVmZmVyU3RvcmFnZShnbC5SRU5ERVJCVUZGRVIsIGdsLkRFUFRIX1NURU5DSUwsICB0aGlzLndpZHRoICAsIHRoaXMuaGVpZ2h0ICk7XG59XG5cbkZyYW1lYnVmZmVyLnByb3RvdHlwZS5jbGVhciA9IGZ1bmN0aW9uKCByLCBnLCBiLCBhIClcbntcblx0dGhpcy5iaW5kKCk7XG5cblx0dmFyIGdsID0gdGhpcy5nbDtcbiAgICBcbiAgICBnbC5jbGVhckNvbG9yKHIsIGcsIGIsIGEpO1xuICAgIGdsLmNsZWFyKGdsLkNPTE9SX0JVRkZFUl9CSVQpO1xufVxuXG5GcmFtZWJ1ZmZlci5wcm90b3R5cGUuYmluZCA9IGZ1bmN0aW9uKClcbntcblx0dmFyIGdsID0gdGhpcy5nbDtcblx0Z2wuYmluZEZyYW1lYnVmZmVyKGdsLkZSQU1FQlVGRkVSLCB0aGlzLmZyYW1lYnVmZmVyICk7XHRcbn1cblxuRnJhbWVidWZmZXIucHJvdG90eXBlLnVuYmluZCA9IGZ1bmN0aW9uKClcbntcblx0Z2wuYmluZEZyYW1lYnVmZmVyKGdsLkZSQU1FQlVGRkVSLCBudWxsICk7XHRcbn1cblxuRnJhbWVidWZmZXIucHJvdG90eXBlLnJlc2l6ZSA9IGZ1bmN0aW9uKHdpZHRoLCBoZWlnaHQpXG57XG5cdHZhciBnbCA9IHRoaXMuZ2w7XG5cblx0dGhpcy53aWR0aCA9IHdpZHRoO1xuXHR0aGlzLmhlaWdodCA9IGhlaWdodDtcblxuXHRpZiAoIHRoaXMudGV4dHVyZSApXG4gICAge1xuICAgIFx0dGhpcy50ZXh0dXJlLnVwbG9hZERhdGEobnVsbCwgd2lkdGgsIGhlaWdodCk7XG5cdH1cblxuXHRpZiAoIHRoaXMuc3RlbmNpbCApXG4gICAge1xuICAgICAgICAvLyB1cGRhdGUgdGhlIHN0ZW5jaWwgYnVmZmVyIHdpZHRoIGFuZCBoZWlnaHRcbiAgICAgICAgZ2wuYmluZFJlbmRlcmJ1ZmZlcihnbC5SRU5ERVJCVUZGRVIsIHRoaXMuc3RlbmNpbCk7XG4gICAgICAgIGdsLnJlbmRlcmJ1ZmZlclN0b3JhZ2UoZ2wuUkVOREVSQlVGRkVSLCBnbC5ERVBUSF9TVEVOQ0lMLCB3aWR0aCwgaGVpZ2h0KTtcbiAgICB9XG59XG5cbkZyYW1lYnVmZmVyLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24oKVxue1xuXHR2YXIgZ2wgPSB0aGlzLmdsO1xuXHQvL1RPRE9cblx0Z2wuZGVsZXRlRnJhbWVidWZmZXIodGhpcy5mcmFtZWJ1ZmZlcik7XG59XG5cbkZyYW1lYnVmZmVyLmNyZWF0ZVJHQkEgPSBmdW5jdGlvbihnbCwgd2lkdGgsIGhlaWdodCwgZGF0YSlcbntcblx0dmFyIHRleHR1cmUgPSBUZXh0dXJlLmZyb21EYXRhKGdsLCBudWxsLCB3aWR0aCwgaGVpZ2h0KTtcblx0dGV4dHVyZS5lbmFibGVOZWFyZXN0U2NhbGluZygpO1xuICAgIHRleHR1cmUuZW5hYmxlV3JhcENsYW1wKCk7XG5cbiAgICAvL25vdyBjcmVhdGUgdGhlIGZyYW1lYnVmZmVyIG9iamVjdCBhbmQgYXR0YWNoIHRoZSB0ZXh0dXJlIHRvIGl0LlxuICAgIHZhciBmYm8gPSBuZXcgRnJhbWVidWZmZXIoZ2wsIHdpZHRoLCBoZWlnaHQpO1xuICAgIGZiby5lbmFibGVUZXh0dXJlKHRleHR1cmUpO1xuXG4gICAgcmV0dXJuIGZibztcbn1cblxuRnJhbWVidWZmZXIuY3JlYXRlRmxvYXQzMiA9IGZ1bmN0aW9uKGdsLCB3aWR0aCwgaGVpZ2h0LCBkYXRhKVxue1xuXHQvLyBjcmVhdGUgYSBuZXcgdGV4dHVyZS4uXG4gICAgdmFyIHRleHR1cmUgPSBuZXcgVGV4dHVyZS5mcm9tRGF0YShnbCwgZGF0YSwgd2lkdGgsIGhlaWdodCk7XG4gICAgdGV4dHVyZS5lbmFibGVOZWFyZXN0U2NhbGluZygpO1xuICAgIHRleHR1cmUuZW5hYmxlV3JhcENsYW1wKCk7XG5cbiAgICAvL25vdyBjcmVhdGUgdGhlIGZyYW1lYnVmZmVyIG9iamVjdCBhbmQgYXR0YWNoIHRoZSB0ZXh0dXJlIHRvIGl0LlxuICAgIHZhciBmYm8gPSBuZXcgRnJhbWVidWZmZXIoZ2wsIHdpZHRoLCBoZWlnaHQpO1xuICAgIGZiby5lbmFibGVUZXh0dXJlKHRleHR1cmUpXG5cbiAgICByZXR1cm4gZmJvO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IEZyYW1lYnVmZmVyO1xuXG4iLCJcbnZhciBjb21waWxlUHJvZ3JhbSA9IHJlcXVpcmUoJy4vc2hhZGVyL2NvbXBpbGVQcm9ncmFtJyksXG5cdGV4dHJhY3RBdHRyaWJ1dGVzID0gcmVxdWlyZSgnLi9zaGFkZXIvZXh0cmFjdEF0dHJpYnV0ZXMnKSxcblx0ZXh0cmFjdFVuaWZvcm1zID0gcmVxdWlyZSgnLi9zaGFkZXIvZXh0cmFjdFVuaWZvcm1zJyksXG5cdGdlbmVyYXRlVW5pZm9ybUFjY2Vzc09iamVjdCA9IHJlcXVpcmUoJy4vc2hhZGVyL2dlbmVyYXRlVW5pZm9ybUFjY2Vzc09iamVjdCcpO1xuXG4vKipcbiAqIEhlbHBlciBjbGFzcyB0byBjcmVhdGUgYSB3ZWJHTCBTaGFkZXJcbiAqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gZ2wge1dlYkdMUmVuZGVyaW5nQ29udGV4dH1cbiAqL1xudmFyIFNoYWRlciA9IGZ1bmN0aW9uKGdsLCB2ZXJ0ZXhTcmMsIGZyYWdtZW50U3JjKVxue1xuXHR0aGlzLmdsID0gZ2w7XG5cblx0Ly8gRmlyc3QgY29tcGlsZSB0aGUgcHJvZ3JhbS4uXG5cdHRoaXMucHJvZ3JhbSA9IGNvbXBpbGVQcm9ncmFtKGdsLCB2ZXJ0ZXhTcmMsIGZyYWdtZW50U3JjKTtcblxuXHQvLyBuZXh0IGV4dHJhY3QgdGhlIGF0dHJpYnV0ZXNcblx0dGhpcy5hdHRyaWJ1dGVzID0gZXh0cmFjdEF0dHJpYnV0ZXMoZ2wsIHRoaXMucHJvZ3JhbSk7IFxuXG4gICAgdmFyIHVuaWZvcm1EYXRhID0gZXh0cmFjdFVuaWZvcm1zKGdsLCB0aGlzLnByb2dyYW0pO1xuXG4gICAgdGhpcy51bmlmb3JtcyA9IGdlbmVyYXRlVW5pZm9ybUFjY2Vzc09iamVjdCggZ2wsIHVuaWZvcm1EYXRhICk7XG59XG5cblNoYWRlci5wcm90b3R5cGUuYmluZCA9IGZ1bmN0aW9uKClcbntcblx0dGhpcy5nbC51c2VQcm9ncmFtKHRoaXMucHJvZ3JhbSk7XG59XG5cblNoYWRlci5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uKClcbntcblx0dmFyIGdsID0gdGhpcy5nbDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBTaGFkZXI7XG5cbiIsIlxuLyoqXG4gKiBIZWxwZXIgY2xhc3MgdG8gY3JlYXRlIGEgd2ViR0wgVGV4dHVyZVxuICpcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqIEBwYXJhbSBnbCB7V2ViR0xSZW5kZXJpbmdDb250ZXh0fSBhIFdlYkdMIGNvbnRleHRcbiAqIEBwYXJhbSB3aWR0aCB7bnVtYmVyfSB0aGUgd2lkdGggb2YgdGhlIHRleHR1cmUgXG4gKiBAcGFyYW0gaGVpZ2h0IHtudW1iZXJ9IHRoZSBoZWlnaHQgb2YgdGhlIHRleHR1cmUgXG4gKiBAcGFyYW0gZm9ybWF0IHtudW1iZXJ9IHRoZSBwaXhlbCBmb3JtYXQgb2YgdGhlIHRleHR1cmUuIGRlZmF1bHRzIHRvIGdsLlJHQkFcbiAqIEBwYXJhbSB0eXBlIHtudW1iZXJ9IHRoZSBnbCB0eXBlIG9mIHRoZSB0ZXh0dXJlLiBkZWZhdWx0cyB0byBnbC5VTlNJR05FRF9CWVRFXG4gKi9cbnZhciBUZXh0dXJlID0gZnVuY3Rpb24oZ2wsIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgdHlwZSlcbntcblx0dGhpcy5nbCA9IGdsO1xuXG5cdHRoaXMudGV4dHVyZSA9IGdsLmNyZWF0ZVRleHR1cmUoKTtcblxuXHQvLyBzb21lIHNldHRpbmdzLi5cblx0dGhpcy5taXBtYXAgPSBmYWxzZTtcblxuXHR0aGlzLnByZW11bHRpcGx5QWxwaGEgPSBmYWxzZTtcblxuXHR0aGlzLndpZHRoID0gd2lkdGggfHwgMDtcblx0dGhpcy5oZWlnaHQgPSBoZWlnaHQgfHwgMDtcblxuXHR0aGlzLmZvcm1hdCA9IGZvcm1hdCB8fCBnbC5SR0JBO1xuXHR0aGlzLnR5cGUgPSB0eXBlIHx8IGdsLlVOU0lHTkVEX0JZVEU7XG5cblxufVxuXG4vKipcbiAqIEBwYXJhbSB7UElYSS5nbENvcmUuVGV4dHVyZX0gW3Zhcm5hbWVdIFtkZXNjcmlwdGlvbl1cbiAqL1xuVGV4dHVyZS5wcm90b3R5cGUudXBsb2FkID0gZnVuY3Rpb24oc291cmNlKVxue1xuXHR0aGlzLmJpbmQoKTtcblxuXHR2YXIgZ2wgPSB0aGlzLmdsO1xuXG5cdHRoaXMud2lkdGggPSBzb3VyY2Uud2lkdGg7XG5cdHRoaXMuaGVpZ2h0ID0gc291cmNlLmhlaWdodDtcblxuXHRnbC5waXhlbFN0b3JlaShnbC5VTlBBQ0tfUFJFTVVMVElQTFlfQUxQSEFfV0VCR0wsIHRoaXMucHJlbXVsdGlwbHlBbHBoYSk7XG4gICAgZ2wudGV4SW1hZ2UyRChnbC5URVhUVVJFXzJELCAwLCB0aGlzLmZvcm1hdCwgdGhpcy5mb3JtYXQsIHRoaXMudHlwZSwgc291cmNlKTtcbn1cblxudmFyIEZMT0FUSU5HX1BPSU5UX0FWQUlMQUJMRSA9IGZhbHNlO1xuXG5UZXh0dXJlLnByb3RvdHlwZS51cGxvYWREYXRhID0gZnVuY3Rpb24oZGF0YSwgd2lkdGgsIGhlaWdodClcbntcblx0dGhpcy5iaW5kKCk7XG5cdFxuXHR0aGlzLndpZHRoID0gd2lkdGggfHwgdGhpcy53aWR0aDtcblx0dGhpcy5oZWlnaHQgPSBoZWlnaHQgfHwgdGhpcy5oZWlnaHQ7XG5cblx0aWYoZGF0YSBpbnN0YW5jZW9mIEZsb2F0MzJBcnJheSlcblx0e1xuXHRcdGlmKCFGTE9BVElOR19QT0lOVF9BVkFJTEFCTEUpXG5cdFx0e1xuXHRcdFx0dmFyIGV4dCA9IGdsLmdldEV4dGVuc2lvbihcIk9FU190ZXh0dXJlX2Zsb2F0XCIpO1xuXHRcdFx0XG5cdFx0XHRpZihleHQpXG5cdFx0XHR7XG5cdFx0XHRcdEZMT0FUSU5HX1BPSU5UX0FWQUlMQUJMRSA9IHRydWU7XG5cdFx0XHR9XG5cdFx0XHRlbHNlXG5cdFx0XHR7XG5cdFx0XHRcdHRocm93IG5ldyBFcnJvcignZmxvYXRpbmcgcG9pbnQgdGV4dHVyZXMgbm90IGF2YWlsYWJsZScpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHRoaXMudHlwZSA9IGdsLkZMT0FUO1xuXHR9XG5cdGVsc2Vcblx0e1xuXHRcdC8vIFRPRE8gc3VwcG9ydCBmb3Igb3RoZXIgdHlwZXNcblx0XHR0aGlzLnR5cGUgPSBnbC5VTlNJR05FRF9CWVRFO1xuXHR9XG5cblx0Ly8gd2hhdCB0eXBlIG9mIGRhdGE/XG5cdGdsLnBpeGVsU3RvcmVpKGdsLlVOUEFDS19QUkVNVUxUSVBMWV9BTFBIQV9XRUJHTCwgdGhpcy5wcmVtdWx0aXBseUFscGhhKTtcblx0Z2wudGV4SW1hZ2UyRChnbC5URVhUVVJFXzJELCAwLCB0aGlzLmZvcm1hdCwgIHRoaXMud2lkdGgsIHRoaXMuaGVpZ2h0LCAwLCB0aGlzLmZvcm1hdCwgdGhpcy50eXBlLCBkYXRhIHx8IG51bGwpO1xuXG59XG5cblRleHR1cmUucHJvdG90eXBlLmJpbmQgPSBmdW5jdGlvbihsb2NhdGlvbilcbntcblx0dmFyIGdsID0gdGhpcy5nbDtcblxuXHRpZihsb2NhdGlvbiAhPT0gdW5kZWZpbmVkKVxuXHR7XG5cdFx0Z2wuYWN0aXZlVGV4dHVyZShnbC5URVhUVVJFMCArIGxvY2F0aW9uKTtcblx0fVxuXG5cdGdsLmJpbmRUZXh0dXJlKGdsLlRFWFRVUkVfMkQsIHRoaXMudGV4dHVyZSk7XG59XG5cblRleHR1cmUucHJvdG90eXBlLnVuYmluZCA9IGZ1bmN0aW9uKClcbntcblx0dmFyIGdsID0gdGhpcy5nbDtcblx0Z2wuYmluZFRleHR1cmUoZ2wuVEVYVFVSRV8yRCwgbnVsbCk7XG59XG5cblRleHR1cmUucHJvdG90eXBlLm1pbkZpbHRlciA9IGZ1bmN0aW9uKCBsaW5lYXIgKVxue1xuXHR2YXIgZ2wgPSB0aGlzLmdsO1xuXG5cdHRoaXMuYmluZCgpO1xuXG5cdGlmKHRoaXMubWlwbWFwKVxuXHR7XG5cdFx0Z2wudGV4UGFyYW1ldGVyaShnbC5URVhUVVJFXzJELCBnbC5URVhUVVJFX01JTl9GSUxURVIsIGxpbmVhciA/IGdsLkxJTkVBUl9NSVBNQVBfTElORUFSIDogZ2wuTkVBUkVTVF9NSVBNQVBfTkVBUkVTVCk7XG5cdH1cblx0ZWxzZVxuXHR7XG5cdFx0Z2wudGV4UGFyYW1ldGVyaShnbC5URVhUVVJFXzJELCBnbC5URVhUVVJFX01JTl9GSUxURVIsIGxpbmVhciA/IGdsLkxJTkVBUiA6IGdsLk5FQVJFU1QpO1xuXHR9XHRcbn1cblxuVGV4dHVyZS5wcm90b3R5cGUubWFnRmlsdGVyID0gZnVuY3Rpb24oIGxpbmVhciApXG57XG5cdHZhciBnbCA9IHRoaXMuZ2w7XG5cblx0dGhpcy5iaW5kKCk7XG5cblx0Z2wudGV4UGFyYW1ldGVyaShnbC5URVhUVVJFXzJELCBnbC5URVhUVVJFX01BR19GSUxURVIsIGxpbmVhciA/IGdsLkxJTkVBUiA6IGdsLk5FQVJFU1QpO1xufVxuXG5UZXh0dXJlLnByb3RvdHlwZS5lbmFibGVNaXBtYXAgPSBmdW5jdGlvbigpXG57XG5cdHRoaXMuYmluZCgpO1xuXG5cdHRoaXMubWlwbWFwID0gdHJ1ZTtcblx0Z2wuZ2VuZXJhdGVNaXBtYXAoZ2wuVEVYVFVSRV8yRCk7XG59XG5cblRleHR1cmUucHJvdG90eXBlLmVuYWJsZUxpbmVhclNjYWxpbmcgPSBmdW5jdGlvbigpXG57XG5cdHRoaXMubWluRmlsdGVyKHRydWUpO1xuXHR0aGlzLm1hZ0ZpbHRlcih0cnVlKTtcbn1cblxuVGV4dHVyZS5wcm90b3R5cGUuZW5hYmxlTmVhcmVzdFNjYWxpbmcgPSBmdW5jdGlvbigpXG57XG5cdHRoaXMubWluRmlsdGVyKGZhbHNlKTtcblx0dGhpcy5tYWdGaWx0ZXIoZmFsc2UpO1xufVxuXG5UZXh0dXJlLnByb3RvdHlwZS5lbmFibGVXcmFwQ2xhbXAgPSBmdW5jdGlvbigpXG57XG5cdHZhciBnbCA9IHRoaXMuZ2w7XG5cblx0dGhpcy5iaW5kKCk7XG5cblx0Z2wudGV4UGFyYW1ldGVyaShnbC5URVhUVVJFXzJELCBnbC5URVhUVVJFX1dSQVBfUywgZ2wuQ0xBTVBfVE9fRURHRSk7XG4gICAgZ2wudGV4UGFyYW1ldGVyaShnbC5URVhUVVJFXzJELCBnbC5URVhUVVJFX1dSQVBfVCwgZ2wuQ0xBTVBfVE9fRURHRSk7XG59XG5cblRleHR1cmUucHJvdG90eXBlLmVuYWJsZVdyYXBSZXBlYXQgPSBmdW5jdGlvbigpXG57XG5cdHZhciBnbCA9IHRoaXMuZ2w7XG5cblx0dGhpcy5iaW5kKCk7XG5cdFxuXHRnbC50ZXhQYXJhbWV0ZXJpKGdsLlRFWFRVUkVfMkQsIGdsLlRFWFRVUkVfV1JBUF9TLCBnbC5SRVBFQVQpO1xuICAgIGdsLnRleFBhcmFtZXRlcmkoZ2wuVEVYVFVSRV8yRCwgZ2wuVEVYVFVSRV9XUkFQX1QsIGdsLlJFUEVBVCk7XG59XG5cblRleHR1cmUucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbigpXG57XG5cdHZhciBnbCA9IHRoaXMuZ2w7XG5cdC8vVE9ET1xuXHRnbC5kZWxldGVUZXh0dXJlKHRoaXMudGV4dHVyZSk7XG59XG5cbi8vVGV4dHVyZS5cblRleHR1cmUuZnJvbVNvdXJjZSA9IGZ1bmN0aW9uKGdsLCBzb3VyY2UsIHByZW11bHRpcGx5QWxwaGEpXG57XG5cdHZhciB0ZXh0dXJlID0gbmV3IFRleHR1cmUoZ2wpO1xuXHR0ZXh0dXJlLnByZW11bHRpcGx5QWxwaGEgPSBwcmVtdWx0aXBseUFscGhhIHx8IGZhbHNlO1xuXHR0ZXh0dXJlLnVwbG9hZChzb3VyY2UpO1xuXG5cdHJldHVybiB0ZXh0dXJlO1xufVxuXG5UZXh0dXJlLmZyb21EYXRhID0gZnVuY3Rpb24oZ2wsIGRhdGEsIHdpZHRoLCBoZWlnaHQpXG57XG5cdC8vY29uc29sZS5sb2coZGF0YSwgd2lkdGgsIGhlaWdodCk7XG5cdHZhciB0ZXh0dXJlID0gbmV3IFRleHR1cmUoZ2wpO1xuXHR0ZXh0dXJlLnVwbG9hZERhdGEoZGF0YSwgd2lkdGgsIGhlaWdodCk7XG5cblx0cmV0dXJuIHRleHR1cmU7XG59XG5cblxubW9kdWxlLmV4cG9ydHMgPSBUZXh0dXJlO1xuXG4iLCJcbi8qKlxuICogR2VuZXJpYyBNYXNrIFN0YWNrIGRhdGEgc3RydWN0dXJlXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKi9cblxuLy8gc3RhdGUgb2JqZWN0Ly9cblxuXG5mdW5jdGlvbiBWZXJ0ZXhBcnJheU9iamVjdChnbClcbntcblx0XG5cdHRoaXMubmF0aXZlVmFvRXh0ZW5zaW9uID0gKFxuICAgICAgZ2wuZ2V0RXh0ZW5zaW9uKCdPRVNfdmVydGV4X2FycmF5X29iamVjdCcpIHx8XG4gICAgICBnbC5nZXRFeHRlbnNpb24oJ01PWl9PRVNfdmVydGV4X2FycmF5X29iamVjdCcpIHx8XG4gICAgICBnbC5nZXRFeHRlbnNpb24oJ1dFQktJVF9PRVNfdmVydGV4X2FycmF5X29iamVjdCcpXG4gICAgKTtcblxuLy9cdHRoaXMubmF0aXZlVmFvRXh0ZW5zaW9uID0gbnVsbDtcblxuXHRpZih0aGlzLm5hdGl2ZVZhb0V4dGVuc2lvbilcblx0e1xuXHRcdHRoaXMubmF0aXZlVmFvID0gdGhpcy5uYXRpdmVWYW9FeHRlbnNpb24uY3JlYXRlVmVydGV4QXJyYXlPRVMoKTsgIFxuXHR9XG5cblx0dGhpcy5nbCA9IGdsO1xuXG5cdHRoaXMuYXR0cmlidXRlcyA9IFtdO1xuXG5cdHRoaXMuaW5kZXhCdWZmZXIgPSBudWxsO1xuXG5cdHRoaXMuZGlydHkgPSBmYWxzZTtcblxuXHRcbn1cblxuVmVydGV4QXJyYXlPYmplY3QucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gVmVydGV4QXJyYXlPYmplY3Q7XG5tb2R1bGUuZXhwb3J0cyA9IFZlcnRleEFycmF5T2JqZWN0O1xuXG5WZXJ0ZXhBcnJheU9iamVjdC5wcm90b3R5cGUuYmluZCA9IGZ1bmN0aW9uKClcbntcblx0aWYodGhpcy5uYXRpdmVWYW8pXG5cdHtcblx0XHR0aGlzLm5hdGl2ZVZhb0V4dGVuc2lvbi5iaW5kVmVydGV4QXJyYXlPRVModGhpcy5uYXRpdmVWYW8pOyAgXG5cblx0XHRpZih0aGlzLmRpcnR5KVxuXHRcdHtcblx0XHRcdHRoaXMuZGlydHkgPSBmYWxzZTtcblx0XHRcdHRoaXMuYWN0aXZhdGUoKTtcblx0XHR9XG5cdH1cblx0ZWxzZVxuXHR7XG5cdFx0dGhpcy5hY3RpdmF0ZSgpO1xuXHR9XG59XG5cblZlcnRleEFycmF5T2JqZWN0LnByb3RvdHlwZS51bmJpbmQgPSBmdW5jdGlvbigpXG57XG5cdGlmKHRoaXMubmF0aXZlVmFvKVxuXHR7XG5cdFx0dGhpcy5uYXRpdmVWYW9FeHRlbnNpb24uYmluZFZlcnRleEFycmF5T0VTKG51bGwpO1xuXHR9XG59XG5cblZlcnRleEFycmF5T2JqZWN0LnByb3RvdHlwZS5hY3RpdmF0ZSA9IGZ1bmN0aW9uKClcbntcblx0dmFyIGdsID0gdGhpcy5nbDtcblxuXHRmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuYXR0cmlidXRlcy5sZW5ndGg7IGkrKykgXG5cdHtcblx0XHR2YXIgYXR0cmliID0gdGhpcy5hdHRyaWJ1dGVzW2ldO1xuXHRcdGF0dHJpYi5idWZmZXIuYmluZCgpO1x0XG5cblx0XHRhdHRyaWIuYXR0cmlidXRlLnBvaW50ZXIoYXR0cmliLnR5cGUsIGF0dHJpYi5ub3JtYWxpemVkLCBhdHRyaWIuc3RyaWRlLCBhdHRyaWIuc3RhcnQpOyBcblx0XHRcblx0XHRnbC5lbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShhdHRyaWIuYXR0cmlidXRlLmxvY2F0aW9uKTtcblx0fTtcblxuXHR0aGlzLmluZGV4QnVmZmVyLmJpbmQoKTtcbn1cblxuVmVydGV4QXJyYXlPYmplY3QucHJvdG90eXBlLmFkZEF0dHJpYnV0ZSA9IGZ1bmN0aW9uKGJ1ZmZlciwgYXR0cmlidXRlLCB0eXBlLCBub3JtYWxpemVkLCBzdHJpZGUsIHN0YXJ0KVxue1xuICAgIHRoaXMuYXR0cmlidXRlcy5wdXNoKHtcbiAgICBcdGJ1ZmZlcjogXHRidWZmZXIsXG4gICAgXHRhdHRyaWJ1dGU6IFx0YXR0cmlidXRlLFxuXG4gICAgXHRsb2NhdGlvbjogXHRhdHRyaWJ1dGUubG9jYXRpb24sXG5cdCBcdHR5cGU6IFx0XHR0eXBlIHx8IHRoaXMuZ2wuRkxPQVQsXG5cdCBcdG5vcm1hbGl6ZWQ6IG5vcm1hbGl6ZWQgfHwgZmFsc2UsXG5cdCBcdHN0cmlkZTogXHRzdHJpZGUgfHwgMCxcblx0IFx0c3RhcnQ6IFx0XHRzdGFydCB8fCAwXG5cdH0pXG5cblx0dGhpcy5kaXJ0eSA9IHRydWU7XG59XG5cblxuVmVydGV4QXJyYXlPYmplY3QucHJvdG90eXBlLmFkZEluZGV4ID0gZnVuY3Rpb24oYnVmZmVyLCBvcHRpb25zKVxue1xuICAgIHRoaXMuaW5kZXhCdWZmZXIgPSBidWZmZXI7XG5cbiAgICB0aGlzLmRpcnR5ID0gdHJ1ZTtcbn1cblxuVmVydGV4QXJyYXlPYmplY3QucHJvdG90eXBlLmRyYXcgPSBmdW5jdGlvbih0eXBlLCBzaXplLCBzdGFydClcbntcblx0dmFyIGdsID0gdGhpcy5nbDtcblx0Z2wuZHJhd0VsZW1lbnRzKHR5cGUsIHNpemUsIGdsLlVOU0lHTkVEX1NIT1JULCBzdGFydCk7XG59XG5cbiIsIlxuLyoqXG4gKiBIZWxwZXIgY2xhc3MgdG8gY3JlYXRlIGEgd2ViR0wgQ29udGV4dFxuICpcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqIEBwYXJhbSBnbCB7V2ViR0xSZW5kZXJpbmdDb250ZXh0fVxuICovXG5cbnZhciBDT05URVhUX1VJRCA9IDA7XG5cbnZhciBjcmVhdGVDb250ZXh0ID0gZnVuY3Rpb24oY2FudmFzLCBvcHRpb25zKVxue1xuICAgIGdsID0gY2FudmFzLmdldENvbnRleHQoJ3dlYmdsJywgb3B0aW9ucykgfHwgXG4gICAgXHQgY2FudmFzLmdldENvbnRleHQoJ2V4cGVyaW1lbnRhbC13ZWJnbCcsIG9wdGlvbnMpO1xuXG4gICAgaWYgKCFnbClcbiAgICB7XG4gICAgICAgIC8vIGZhaWwsIG5vdCBhYmxlIHRvIGdldCBhIGNvbnRleHRcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdUaGlzIGJyb3dzZXIgZG9lcyBub3Qgc3VwcG9ydCB3ZWJHTC4gVHJ5IHVzaW5nIHRoZSBjYW52YXMgcmVuZGVyZXInKTtcbiAgICB9XG5cbiAgICAvLyBtaWdodCB3YW50IHRvIHBoYXNlIHRoaXMgb3V0P1xuICAgIGdsLmlkID0gQ09OVEVYVF9VSUQrKztcblxuICAgIHJldHVybiBnbDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBjcmVhdGVDb250ZXh0O1xuXG4iLCIvKipcbiAqIEdlbmVyaWMgTWFzayBTdGFjayBkYXRhIHN0cnVjdHVyZVxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICovXG5cbnZhciBHTF9NQVAgPSB7fTtcblxuXG52YXIgc2V0VmVydGV4QXR0cmliQXJyYXlzID0gZnVuY3Rpb24gKGdsLCBhdHRyaWJzKVxue1x0XG4gICAvLyBjb25zb2xlLmxvZyhnbC5pZClcbiAgICB2YXIgZGF0YSA9IEdMX01BUFtnbC5pZF07XG5cbiAgICBpZighZGF0YSlcbiAgICB7XG5cdCAgIHZhciBtYXhBdHRyaWJzID0gZ2wuZ2V0UGFyYW1ldGVyKGdsLk1BWF9WRVJURVhfQVRUUklCUyk7XG5cdFx0ZGF0YSA9IEdMX01BUFtnbC5pZF0gPSB7dGVtcEF0dHJpYlN0YXRlOm5ldyBBcnJheShtYXhBdHRyaWJzKVxuXHRcdFx0XHQgXHQgXHRcdCAgICxhdHRyaWJTdGF0ZTpuZXcgQXJyYXkobWF4QXR0cmlicyl9O1xuXHR9XG5cdFxuICAgIHZhciBpLFxuICAgIFx0dGVtcEF0dHJpYlN0YXRlID0gZGF0YS50ZW1wQXR0cmliU3RhdGUsXG4gICAgXHRhdHRyaWJTdGF0ZSA9IGRhdGEuYXR0cmliU3RhdGU7XG5cbiAgICBmb3IgKGkgPSAwOyBpIDwgdGVtcEF0dHJpYlN0YXRlLmxlbmd0aDsgaSsrKVxuICAgIHtcbiAgICAgICAgdGVtcEF0dHJpYlN0YXRlW2ldID0gZmFsc2U7XG4gICAgfVxuXG4gICAgLy8gc2V0IHRoZSBuZXcgYXR0cmlic1xuICAgIGZvciAoaSBpbiBhdHRyaWJzKVxuICAgIHtcbiAgICAgICAgdGVtcEF0dHJpYlN0YXRlW2F0dHJpYnNbaV0ubG9jYXRpb25dID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBmb3IgKGkgPSAxOyBpIDwgYXR0cmliU3RhdGUubGVuZ3RoOyBpKyspXG4gICAge1xuICAgICAgICBpZiAoYXR0cmliU3RhdGVbaV0gIT09IHRlbXBBdHRyaWJTdGF0ZVtpXSlcbiAgICAgICAge1xuICAgICAgICAgICAgYXR0cmliU3RhdGVbaV0gPSB0ZW1wQXR0cmliU3RhdGVbaV07XG5cbiAgICAgICAgICAgIGlmIChkYXRhLmF0dHJpYlN0YXRlW2ldKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGdsLmVuYWJsZVZlcnRleEF0dHJpYkFycmF5KGkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGdsLmRpc2FibGVWZXJ0ZXhBdHRyaWJBcnJheShpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn07XG5cbm1vZHVsZS5leHBvcnRzID0gc2V0VmVydGV4QXR0cmliQXJyYXlzOyIsIlxuXG5cblxuY29tcGlsZVByb2dyYW0gPSBmdW5jdGlvbihnbCwgdmVydGV4U3JjLCBmcmFnbWVudFNyYylcbntcbiAgICB2YXIgZ2xWZXJ0U2hhZGVyID0gY29tcGlsZVNoYWRlcihnbCwgZ2wuVkVSVEVYX1NIQURFUiwgdmVydGV4U3JjKTtcbiAgICB2YXIgZ2xGcmFnU2hhZGVyID0gY29tcGlsZVNoYWRlcihnbCwgZ2wuRlJBR01FTlRfU0hBREVSLCBmcmFnbWVudFNyYyk7XG5cbiAgICB2YXIgcHJvZ3JhbSA9IGdsLmNyZWF0ZVByb2dyYW0oKTtcblxuICAgIGdsLmF0dGFjaFNoYWRlcihwcm9ncmFtLCBnbFZlcnRTaGFkZXIpO1xuICAgIGdsLmF0dGFjaFNoYWRlcihwcm9ncmFtLCBnbEZyYWdTaGFkZXIpO1xuICAgIGdsLmxpbmtQcm9ncmFtKHByb2dyYW0pO1xuXG4gICAgLy8gaWYgbGlua2luZyBmYWlscywgdGhlbiBsb2cgYW5kIGNsZWFudXBcbiAgICBpZiAoIWdsLmdldFByb2dyYW1QYXJhbWV0ZXIocHJvZ3JhbSwgZ2wuTElOS19TVEFUVVMpKVxuICAgIHtcbiAgICAgICAgY29uc29sZS5lcnJvcignUGl4aS5qcyBFcnJvcjogQ291bGQgbm90IGluaXRpYWxpemUgc2hhZGVyLicpO1xuICAgICAgICBjb25zb2xlLmVycm9yKCdnbC5WQUxJREFURV9TVEFUVVMnLCBnbC5nZXRQcm9ncmFtUGFyYW1ldGVyKHByb2dyYW0sIGdsLlZBTElEQVRFX1NUQVRVUykpO1xuICAgICAgICBjb25zb2xlLmVycm9yKCdnbC5nZXRFcnJvcigpJywgZ2wuZ2V0RXJyb3IoKSk7XG5cbiAgICAgICAgLy8gaWYgdGhlcmUgaXMgYSBwcm9ncmFtIGluZm8gbG9nLCBsb2cgaXRcbiAgICAgICAgaWYgKGdsLmdldFByb2dyYW1JbmZvTG9nKHByb2dyYW0pICE9PSAnJylcbiAgICAgICAge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKCdQaXhpLmpzIFdhcm5pbmc6IGdsLmdldFByb2dyYW1JbmZvTG9nKCknLCBnbC5nZXRQcm9ncmFtSW5mb0xvZyhwcm9ncmFtKSk7XG4gICAgICAgIH1cblxuICAgICAgICBnbC5kZWxldGVQcm9ncmFtKHByb2dyYW0pO1xuICAgICAgICBwcm9ncmFtID0gbnVsbDtcbiAgICB9XG5cbiAgICAvLyBjbGVhbiB1cCBzb21lIHNoYWRlcnNcbiAgICBnbC5kZWxldGVTaGFkZXIoZ2xWZXJ0U2hhZGVyKTtcbiAgICBnbC5kZWxldGVTaGFkZXIoZ2xGcmFnU2hhZGVyKTtcblxuICAgIHJldHVybiBwcm9ncmFtO1xufVxuXG52YXIgY29tcGlsZVNoYWRlciA9IGZ1bmN0aW9uIChnbCwgdHlwZSwgc3JjKVxue1xuICAgIHZhciBzaGFkZXIgPSBnbC5jcmVhdGVTaGFkZXIodHlwZSk7XG5cbiAgICBnbC5zaGFkZXJTb3VyY2Uoc2hhZGVyLCBzcmMpO1xuICAgIGdsLmNvbXBpbGVTaGFkZXIoc2hhZGVyKTtcblxuICAgIGlmICghZ2wuZ2V0U2hhZGVyUGFyYW1ldGVyKHNoYWRlciwgZ2wuQ09NUElMRV9TVEFUVVMpKVxuICAgIHtcbiAgICAgICAgY29uc29sZS5sb2coZ2wuZ2V0U2hhZGVySW5mb0xvZyhzaGFkZXIpKTtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgcmV0dXJuIHNoYWRlcjtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gY29tcGlsZVByb2dyYW07XG5cbiIsIlxuXG52YXIgZGVmYXVsdFZhbHVlID0gZnVuY3Rpb24odHlwZSwgc2l6ZSkgXG57XG4gICAgc3dpdGNoICh0eXBlKVxuICAgIHtcbiAgICAgICAgY2FzZSAnZmxvYXQnOlxuICAgICAgICAgICAgcmV0dXJuIDA7XG5cbiAgICAgICAgY2FzZSAndmVjMic6IFxuICAgICAgICAgICAgcmV0dXJuIG5ldyBGbG9hdDMyQXJyYXkoMiAqIHNpemUpO1xuXG4gICAgICAgIGNhc2UgJ3ZlYzMnOlxuICAgICAgICAgICAgcmV0dXJuIG5ldyBGbG9hdDMyQXJyYXkoMyAqIHNpemUpO1xuXG4gICAgICAgIGNhc2UgJ3ZlYzQnOiAgICAgXG4gICAgICAgICAgICByZXR1cm4gbmV3IEZsb2F0MzJBcnJheSg0ICogc2l6ZSk7XG4gICAgICAgICAgICBcbiAgICAgICAgY2FzZSAnaW50JzpcbiAgICAgICAgY2FzZSAnc2FtcGxlcjJEJzpcbiAgICAgICAgICAgIHJldHVybiAwO1xuXG4gICAgICAgIGNhc2UgJ2l2ZWMyJzogICBcbiAgICAgICAgICAgIHJldHVybiBuZXcgSW50MzJBcnJheSgyICogc2l6ZSk7XG5cbiAgICAgICAgY2FzZSAnaXZlYzMnOlxuICAgICAgICAgICAgcmV0dXJuIG5ldyBJbnQzMkFycmF5KDMgKiBzaXplKTtcblxuICAgICAgICBjYXNlICdpdmVjNCc6IFxuICAgICAgICAgICAgcmV0dXJuIG5ldyBJbnQzMkFycmF5KDQgKiBzaXplKTtcblxuICAgICAgICBjYXNlICdib29sJzogICAgIFxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuXG4gICAgICAgIGNhc2UgJ2J2ZWMyJzpcblxuICAgICAgICAgICAgcmV0dXJuIGJvb2xlYW5BcnJheSggMiAqIHNpemUpO1xuXG4gICAgICAgIGNhc2UgJ2J2ZWMzJzpcbiAgICAgICAgICAgIHJldHVybiBib29sZWFuQXJyYXkoMyAqIHNpemUpO1xuXG4gICAgICAgIGNhc2UgJ2J2ZWM0JzpcbiAgICAgICAgICAgIHJldHVybiBib29sZWFuQXJyYXkoNCAqIHNpemUpO1xuXG4gICAgICAgIGNhc2UgJ21hdDInOlxuICAgICAgICAgICAgcmV0dXJuIG5ldyBGbG9hdDMyQXJyYXkoWzEsIDBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwwLCAxXSk7XG5cbiAgICAgICAgY2FzZSAnbWF0Myc6IFxuICAgICAgICAgICAgcmV0dXJuIG5ldyBGbG9hdDMyQXJyYXkoWzEsIDAsIDBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwwLCAxLCAwXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsMCwgMCwgMV0pO1xuXG4gICAgICAgIGNhc2UgJ21hdDQnOlxuICAgICAgICAgICAgcmV0dXJuIG5ldyBGbG9hdDMyQXJyYXkoWzEsIDAsIDAsIDBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwwLCAxLCAwLCAwXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsMCwgMCwgMSwgMFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLDAsIDAsIDAsIDFdKTtcbiAgICB9XG59XG5cbnZhciBib29sZWFuQXJyYXkgPSBmdW5jdGlvbihzaXplKVxue1xuICAgIHZhciBhcnJheSA9IG5ldyBBcnJheShzaXplKTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXJyYXkubGVuZ3RoOyBpKyspIFxuICAgIHtcbiAgICAgICAgYXJyYXlbaV0gPSBmYWxzZTtcbiAgICB9O1xuXG4gICAgcmV0dXJuIGFycmF5O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGRlZmF1bHRWYWx1ZTtcbiIsIlxudmFyIG1hcFR5cGUgPSByZXF1aXJlKCcuL21hcFR5cGUnKTtcbnZhciBtYXBTaXplID0gcmVxdWlyZSgnLi9tYXBTaXplJyk7XG5cbnZhciBleHRyYWN0QXR0cmlidXRlcyA9IGZ1bmN0aW9uKGdsLCBwcm9ncmFtKVxue1xuICAgIHZhciBhdHRyaWJ1dGVzID0ge307XG5cbiAgICB2YXIgdG90YWxBdHRyaWJ1dGVzID0gZ2wuZ2V0UHJvZ3JhbVBhcmFtZXRlcihwcm9ncmFtLCBnbC5BQ1RJVkVfQVRUUklCVVRFUylcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdG90YWxBdHRyaWJ1dGVzOyBpKyspIFxuICAgIHtcbiAgICAgICAgdmFyIGF0dHJpYkRhdGEgPSBnbC5nZXRBY3RpdmVBdHRyaWIocHJvZ3JhbSwgaSk7XG4gICAgICAgIHZhciB0eXBlID0gbWFwVHlwZShnbCwgYXR0cmliRGF0YS50eXBlKTtcblxuICAgICAgICBhdHRyaWJ1dGVzW2F0dHJpYkRhdGEubmFtZV0gPSB7XG4gICAgICAgICAgICB0eXBlOnR5cGUsXG4gICAgICAgICAgICBzaXplOm1hcFNpemUodHlwZSksXG4gICAgICAgICAgICBsb2NhdGlvbjpnbC5nZXRBdHRyaWJMb2NhdGlvbihwcm9ncmFtLCBhdHRyaWJEYXRhLm5hbWUpLFxuICAgICAgICAgICAgLy9UT0RPIC0gbWFrZSBhbiBhdHRyaWJ1dGUgb2JqZWN0XG4gICAgICAgICAgICBwb2ludGVyOmZ1bmN0aW9uKHR5cGUsIG5vcm1hbGl6ZWQsIHN0cmlkZSwgc3RhcnQpe1xuXG4gICAgICAgICAgICAgLy8gICBjb25zb2xlLmxvZyh0aGlzLmxvY2F0aW9uKVxuICAgICAgICAgICAgICAgIGdsLnZlcnRleEF0dHJpYlBvaW50ZXIodGhpcy5sb2NhdGlvbix0aGlzLnNpemUsIHR5cGUgfHwgZ2wuRkxPQVQsIG5vcm1hbGl6ZWQgfHwgZmFsc2UsIHN0cmlkZSB8fCAwLCBzdGFydCB8fCAwKTsgXG5cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH07XG5cbiAgICByZXR1cm4gYXR0cmlidXRlczsgIFxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGV4dHJhY3RBdHRyaWJ1dGVzO1xuXG4iLCJ2YXIgbWFwVHlwZSA9IHJlcXVpcmUoJy4vbWFwVHlwZScpO1xudmFyIGRlZmF1bHRWYWx1ZSA9IHJlcXVpcmUoJy4vZGVmYXVsdFZhbHVlJyk7XG5cblxudmFyIGV4dHJhY3RVbmlmb3JtcyA9IGZ1bmN0aW9uKGdsLCBwcm9ncmFtKVxue1xuXHR2YXIgdW5pZm9ybXMgPSB7fTtcblx0XG4gICAgdmFyIHRvdGFsVW5pZm9ybXMgPSBnbC5nZXRQcm9ncmFtUGFyYW1ldGVyKHByb2dyYW0sIGdsLkFDVElWRV9VTklGT1JNUylcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdG90YWxVbmlmb3JtczsgaSsrKSBcbiAgICB7XG4gICAgXHR2YXIgdW5pZm9ybURhdGEgPSBnbC5nZXRBY3RpdmVVbmlmb3JtKHByb2dyYW0sIGkpO1xuICAgIFx0dmFyIG5hbWUgPSB1bmlmb3JtRGF0YS5uYW1lLnJlcGxhY2UoL1xcWy4qP1xcXS8sIFwiXCIpO1xuICAgICAgICB2YXIgdHlwZSA9IG1hcFR5cGUoZ2wsIHVuaWZvcm1EYXRhLnR5cGUgKTtcblxuICAgIFx0dW5pZm9ybXNbbmFtZV0gPSB7XG4gICAgXHRcdHR5cGU6dHlwZSxcbiAgICBcdFx0c2l6ZTp1bmlmb3JtRGF0YS5zaXplLFxuICAgIFx0XHRsb2NhdGlvbjpnbC5nZXRVbmlmb3JtTG9jYXRpb24ocHJvZ3JhbSwgbmFtZSksXG4gICAgXHRcdHZhbHVlOmRlZmF1bHRWYWx1ZSh0eXBlLCB1bmlmb3JtRGF0YS5zaXplKVxuICAgIFx0fVxuICAgIH07XG5cdFxuXHRyZXR1cm4gdW5pZm9ybXM7XHRcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBleHRyYWN0VW5pZm9ybXM7XG5cbiIsIlxudmFyIGdlbmVyYXRlVW5pZm9ybUFjY2Vzc09iamVjdCA9IGZ1bmN0aW9uKGdsLCB1bmlmb3JtRGF0YSlcbntcbiAgICAvLyB0aGlzIGlzIHRoZSBvYmplY3Qgd2Ugd2lsbCBiZSBzZW5kaW5nIGJhY2suXG4gICAgLy8gYW4gb2JqZWN0IGhpZXJhY2h5IHdpbGwgYmUgY3JlYXRlZCBmb3Igc3RydWN0c1xuICAgIHZhciB1bmlmb3JtcyA9IHtkYXRhOnt9fTtcblxuICAgIHVuaWZvcm1zLmdsID0gZ2w7XG4gICAgXG4gICAgdmFyIHVuaWZvcm1LZXlzPSBPYmplY3Qua2V5cyh1bmlmb3JtRGF0YSk7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHVuaWZvcm1LZXlzLmxlbmd0aDsgaSsrKSBcbiAgICB7XG4gICAgICAgIHZhciBmdWxsTmFtZSA9IHVuaWZvcm1LZXlzW2ldXG5cbiAgICAgICAgdmFyIG5hbWVUb2tlbnMgPSBmdWxsTmFtZS5zcGxpdCgnLicpO1xuICAgICAgICB2YXIgbmFtZSA9IG5hbWVUb2tlbnNbbmFtZVRva2Vucy5sZW5ndGggLSAxXTtcblxuICAgICAgICB2YXIgdW5pZm9ybUdyb3VwID0gZ2V0VW5pZm9ybUdyb3VwKG5hbWVUb2tlbnMsIHVuaWZvcm1zKTtcblxuICAgICAgICB2YXIgdW5pZm9ybSA9ICB1bmlmb3JtRGF0YVtmdWxsTmFtZV07XG4gICAgICAgIHVuaWZvcm1Hcm91cC5kYXRhW25hbWVdID0gdW5pZm9ybTtcblxuICAgICAgICB1bmlmb3JtR3JvdXAuZ2wgPSBnbDtcblxuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodW5pZm9ybUdyb3VwLCBuYW1lLCB7XG4gICAgICAgICAgICBnZXQ6IGdlbmVyYXRlR2V0dGVyKG5hbWUpLFxuICAgICAgICAgICAgc2V0OiBnZW5lcmF0ZVNldHRlcihuYW1lLCB1bmlmb3JtKVxuICAgICAgICB9KVxuICAgIH07XG5cbiAgICByZXR1cm4gdW5pZm9ybXM7XG59XG5cbnZhciBnZW5lcmF0ZUdldHRlciA9IGZ1bmN0aW9uKG5hbWUpXG57XG5cdHZhciB0ZW1wbGF0ZSA9IGdldHRlclRlbXBsYXRlLnJlcGxhY2UoJyUlJywgbmFtZSk7XG5cdHJldHVybiBuZXcgRnVuY3Rpb24odGVtcGxhdGUpO1xufVxuXG52YXIgZ2VuZXJhdGVTZXR0ZXIgPSBmdW5jdGlvbihuYW1lLCB1bmlmb3JtKVxue1xuICAgIHZhciB0ZW1wbGF0ZSA9IHNldHRlclRlbXBsYXRlLnJlcGxhY2UoLyUlL2csIG5hbWUpO1xuICAgIHZhciBzZXRUZW1wbGF0ZVxuICAgIFxuICAgIGlmKHVuaWZvcm0uc2l6ZSA9PT0gMSlcbiAgICB7XG4gICAgICAgIHNldFRlbXBsYXRlID0gR0xTTF9UT19TSU5HTEVfU0VUVEVSU1t1bmlmb3JtLnR5cGVdO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICBzZXRUZW1wbGF0ZSA9IEdMU0xfVE9fQVJSQVlfU0VUVEVSU1t1bmlmb3JtLnR5cGVdO1xuICAgIH1cblxuICAgIGlmKHNldFRlbXBsYXRlKVxuICAgIHtcbiAgICAgICAgdGVtcGxhdGUgKz0gXCJcXG50aGlzLmdsLlwiICsgc2V0VGVtcGxhdGUgKyBcIjtcIjtcbiAgICB9XG5cbiAgXHRyZXR1cm4gbmV3IEZ1bmN0aW9uKCd2YWx1ZScsIHRlbXBsYXRlKTtcbn1cblxudmFyIGdldFVuaWZvcm1Hcm91cCA9IGZ1bmN0aW9uKG5hbWVUb2tlbnMsIHVuaWZvcm0pXG57XG4gICAgdmFyIGN1ciA9IHVuaWZvcm07XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG5hbWVUb2tlbnMubGVuZ3RoIC0gMTsgaSsrKSBcbiAgICB7XG4gICAgICAgIHZhciBvID0gY3VyW25hbWVUb2tlbnNbaV1dIHx8IHtkYXRhOnt9fTtcbiAgICAgICAgY3VyW25hbWVUb2tlbnNbaV1dID0gbztcbiAgICAgICAgY3VyID0gbztcbiAgICB9O1xuXG4gICAgcmV0dXJuIGN1clxufVxuXG52YXIgZ2V0dGVyVGVtcGxhdGUgPSBbXG4gICAgJ3JldHVybiB0aGlzLmRhdGEuJSUudmFsdWU7Jyxcbl0uam9pbignXFxuJyk7XG5cbnZhciBzZXR0ZXJUZW1wbGF0ZSA9IFtcbiAgICAndGhpcy5kYXRhLiUlLnZhbHVlID0gdmFsdWU7JyxcbiAgICAndmFyIGxvY2F0aW9uID0gdGhpcy5kYXRhLiUlLmxvY2F0aW9uOydcbl0uam9pbignXFxuJyk7XG5cblxudmFyIEdMU0xfVE9fU0lOR0xFX1NFVFRFUlMgPSB7XG5cbiAgICAnZmxvYXQnOiAgICAndW5pZm9ybTFmKGxvY2F0aW9uLCB2YWx1ZSknLFxuXG4gICAgJ3ZlYzInOiAgICAgJ3VuaWZvcm0yZihsb2NhdGlvbiwgdmFsdWVbMF0sIHZhbHVlWzFdKScsXG4gICAgJ3ZlYzMnOiAgICAgJ3VuaWZvcm0zZihsb2NhdGlvbiwgdmFsdWVbMF0sIHZhbHVlWzFdLCB2YWx1ZVsyXSknLFxuICAgICd2ZWM0JzogICAgICd1bmlmb3JtNGYobG9jYXRpb24sIHZhbHVlWzBdLCB2YWx1ZVsxXSwgdmFsdWVbMl0sIHZhbHVlWzNdKScsXG4gICAgXHRcbiAgICAnaW50JzogICAgICAndW5pZm9ybTFpKGxvY2F0aW9uLCB2YWx1ZSknLFxuICAgICdpdmVjMic6ICAgICd1bmlmb3JtMmkobG9jYXRpb24sIHZhbHVlWzBdLCB2YWx1ZVsxXSknLFxuICAgICdpdmVjMyc6ICAgICd1bmlmb3JtM2kobG9jYXRpb24sIHZhbHVlWzBdLCB2YWx1ZVsxXSwgdmFsdWVbMl0pJyxcbiAgICAnaXZlYzQnOiAgICAndW5pZm9ybTRpKGxvY2F0aW9uLCB2YWx1ZVswXSwgdmFsdWVbMV0sIHZhbHVlWzJdLCB2YWx1ZVszXSknLFxuXG4gICAgJ2Jvb2wnOiAgICAgJ3VuaWZvcm0xaShsb2NhdGlvbiwgdmFsdWUpJyxcbiAgICAnYnZlYzInOiAgICAndW5pZm9ybTJpKGxvY2F0aW9uLCB2YWx1ZVswXSwgdmFsdWVbMV0pJyxcbiAgICAnYnZlYzMnOiAgICAndW5pZm9ybTNpKGxvY2F0aW9uLCB2YWx1ZVswXSwgdmFsdWVbMV0sIHZhbHVlWzJdKScsXG4gICAgJ2J2ZWM0JzogICAgJ3VuaWZvcm00aShsb2NhdGlvbiwgdmFsdWVbMF0sIHZhbHVlWzFdLCB2YWx1ZVsyXSwgdmFsdWVbM10pJyxcblxuICAgICdtYXQyJzogICAgICd1bmlmb3JtTWF0cml4MmZ2KGxvY2F0aW9uLCBmYWxzZSwgdmFsdWUpJyxcbiAgICAnbWF0Myc6ICAgICAndW5pZm9ybU1hdHJpeDNmdihsb2NhdGlvbiwgZmFsc2UsIHZhbHVlKScsXG4gICAgJ21hdDQnOiAgICAgJ3VuaWZvcm1NYXRyaXg0ZnYobG9jYXRpb24sIGZhbHNlLCB2YWx1ZSknLFxuXG4gICAgJ3NhbXBsZXIyRCc6J3VuaWZvcm0xaShsb2NhdGlvbiwgdmFsdWUpJ1xufVxuXG52YXIgR0xTTF9UT19BUlJBWV9TRVRURVJTID0ge1xuXG4gICAgJ2Zsb2F0JzogICAgJ3VuaWZvcm0xZnYobG9jYXRpb24sIHZhbHVlKScsXG5cbiAgICAndmVjMic6ICAgICAndW5pZm9ybTJmdihsb2NhdGlvbiwgdmFsdWUpJyxcbiAgICAndmVjMyc6ICAgICAndW5pZm9ybTNmdihsb2NhdGlvbiwgdmFsdWUpJyxcbiAgICAndmVjNCc6ICAgICAndW5pZm9ybTRmdihsb2NhdGlvbiwgdmFsdWUpJyxcbiAgICBcdFxuICAgICdpbnQnOiAgICAgICd1bmlmb3JtMWl2KGxvY2F0aW9uLCB2YWx1ZSknLFxuICAgICdpdmVjMic6ICAgICd1bmlmb3JtMml2KGxvY2F0aW9uLCB2YWx1ZSknLFxuICAgICdpdmVjMyc6ICAgICd1bmlmb3JtM2l2KGxvY2F0aW9uLCB2YWx1ZSknLFxuICAgICdpdmVjNCc6ICAgICd1bmlmb3JtNGl2KGxvY2F0aW9uLCB2YWx1ZSknLFxuXG4gICAgJ2Jvb2wnOiAgICAgJ3VuaWZvcm0xaXYobG9jYXRpb24sIHZhbHVlKScsXG4gICAgJ2J2ZWMyJzogICAgJ3VuaWZvcm0yaXYobG9jYXRpb24sIHZhbHVlKScsXG4gICAgJ2J2ZWMzJzogICAgJ3VuaWZvcm0zaXYobG9jYXRpb24sIHZhbHVlKScsXG4gICAgJ2J2ZWM0JzogICAgJ3VuaWZvcm00aXYobG9jYXRpb24sIHZhbHVlKScsXG4gICBcbiAgICAnc2FtcGxlcjJEJzondW5pZm9ybTFpdihsb2NhdGlvbiwgdmFsdWUpJ1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGdlbmVyYXRlVW5pZm9ybUFjY2Vzc09iamVjdDtcblxuIiwiXG5cbnZhciBtYXBTaXplID0gZnVuY3Rpb24odHlwZSkgXG57IFxuICAgIHJldHVybiBHTFNMX1RPX1NJWkVbdHlwZV07XG59XG5cblxudmFyIEdMU0xfVE9fU0laRSA9IHtcbiAgICAnZmxvYXQnOiAgICAxLFxuICAgICd2ZWMyJzogICAgIDIsXG4gICAgJ3ZlYzMnOiAgICAgMyxcbiAgICAndmVjNCc6ICAgICA0LFxuXG4gICAgJ2ludCc6ICAgICAgMSxcbiAgICAnaXZlYzInOiAgICAyLFxuICAgICdpdmVjMyc6ICAgIDMsXG4gICAgJ2l2ZWM0JzogICAgNCxcblxuICAgICdib29sJzogICAgIDEsXG4gICAgJ2J2ZWMyJzogICAgMixcbiAgICAnYnZlYzMnOiAgICAzLFxuICAgICdidmVjNCc6ICAgIDQsXG5cbiAgICAnbWF0Mic6ICAgICA0LFxuICAgICdtYXQzJzogICAgIDksXG4gICAgJ21hdDQnOiAgICAgMTYsXG5cbiAgICAnc2FtcGxlcjJEJzogIDFcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBtYXBTaXplO1xuIiwiXG5cbnZhciBtYXBTaXplID0gZnVuY3Rpb24oZ2wsIHR5cGUpIFxue1xuICAgIGlmKCFHTF9UQUJMRSkgXG4gICAge1xuICAgICAgICB2YXIgdHlwZU5hbWVzID0gT2JqZWN0LmtleXMoR0xfVE9fR0xTTF9UWVBFUyk7XG5cbiAgICAgICAgR0xfVEFCTEUgPSB7fTtcblxuICAgICAgICBmb3IodmFyIGkgPSAwOyBpIDwgdHlwZU5hbWVzLmxlbmd0aDsgKytpKSBcbiAgICAgICAge1xuICAgICAgICAgICAgdmFyIHRuID0gdHlwZU5hbWVzW2ldO1xuICAgICAgICAgICAgR0xfVEFCTEVbIGdsW3RuXSBdID0gR0xfVE9fR0xTTF9UWVBFU1t0bl07XG4gICAgICAgIH1cbiAgICB9XG5cbiAgcmV0dXJuIEdMX1RBQkxFW3R5cGVdO1xufVxuXG52YXIgR0xfVEFCTEUgPSBudWxsO1xuXG52YXIgR0xfVE9fR0xTTF9UWVBFUyA9IHtcbiAgJ0ZMT0FUJzogICAgICAgJ2Zsb2F0JyxcbiAgJ0ZMT0FUX1ZFQzInOiAgJ3ZlYzInLFxuICAnRkxPQVRfVkVDMyc6ICAndmVjMycsXG4gICdGTE9BVF9WRUM0JzogICd2ZWM0JyxcblxuICAnSU5UJzogICAgICAgICAnaW50JyxcbiAgJ0lOVF9WRUMyJzogICAgJ2l2ZWMyJyxcbiAgJ0lOVF9WRUMzJzogICAgJ2l2ZWMzJyxcbiAgJ0lOVF9WRUM0JzogICAgJ2l2ZWM0JyxcbiAgXG4gICdCT09MJzogICAgICAgICdib29sJyxcbiAgJ0JPT0xfVkVDMic6ICAgJ2J2ZWMyJyxcbiAgJ0JPT0xfVkVDMyc6ICAgJ2J2ZWMzJyxcbiAgJ0JPT0xfVkVDNCc6ICAgJ2J2ZWM0JyxcbiAgXG4gICdGTE9BVF9NQVQyJzogICdtYXQyJyxcbiAgJ0ZMT0FUX01BVDMnOiAgJ21hdDMnLFxuICAnRkxPQVRfTUFUNCc6ICAnbWF0NCcsXG4gIFxuICAnU0FNUExFUl8yRCc6ICAnc2FtcGxlcjJEJyAgXG59XG5cbm1vZHVsZS5leHBvcnRzID0gbWFwU2l6ZTtcbiIsIi8qIVxuICogYXN5bmNcbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS9jYW9sYW4vYXN5bmNcbiAqXG4gKiBDb3B5cmlnaHQgMjAxMC0yMDE0IENhb2xhbiBNY01haG9uXG4gKiBSZWxlYXNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2VcbiAqL1xuKGZ1bmN0aW9uICgpIHtcblxuICAgIHZhciBhc3luYyA9IHt9O1xuICAgIGZ1bmN0aW9uIG5vb3AoKSB7fVxuICAgIGZ1bmN0aW9uIGlkZW50aXR5KHYpIHtcbiAgICAgICAgcmV0dXJuIHY7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHRvQm9vbCh2KSB7XG4gICAgICAgIHJldHVybiAhIXY7XG4gICAgfVxuICAgIGZ1bmN0aW9uIG5vdElkKHYpIHtcbiAgICAgICAgcmV0dXJuICF2O1xuICAgIH1cblxuICAgIC8vIGdsb2JhbCBvbiB0aGUgc2VydmVyLCB3aW5kb3cgaW4gdGhlIGJyb3dzZXJcbiAgICB2YXIgcHJldmlvdXNfYXN5bmM7XG5cbiAgICAvLyBFc3RhYmxpc2ggdGhlIHJvb3Qgb2JqZWN0LCBgd2luZG93YCAoYHNlbGZgKSBpbiB0aGUgYnJvd3NlciwgYGdsb2JhbGBcbiAgICAvLyBvbiB0aGUgc2VydmVyLCBvciBgdGhpc2AgaW4gc29tZSB2aXJ0dWFsIG1hY2hpbmVzLiBXZSB1c2UgYHNlbGZgXG4gICAgLy8gaW5zdGVhZCBvZiBgd2luZG93YCBmb3IgYFdlYldvcmtlcmAgc3VwcG9ydC5cbiAgICB2YXIgcm9vdCA9IHR5cGVvZiBzZWxmID09PSAnb2JqZWN0JyAmJiBzZWxmLnNlbGYgPT09IHNlbGYgJiYgc2VsZiB8fFxuICAgICAgICAgICAgdHlwZW9mIGdsb2JhbCA9PT0gJ29iamVjdCcgJiYgZ2xvYmFsLmdsb2JhbCA9PT0gZ2xvYmFsICYmIGdsb2JhbCB8fFxuICAgICAgICAgICAgdGhpcztcblxuICAgIGlmIChyb290ICE9IG51bGwpIHtcbiAgICAgICAgcHJldmlvdXNfYXN5bmMgPSByb290LmFzeW5jO1xuICAgIH1cblxuICAgIGFzeW5jLm5vQ29uZmxpY3QgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJvb3QuYXN5bmMgPSBwcmV2aW91c19hc3luYztcbiAgICAgICAgcmV0dXJuIGFzeW5jO1xuICAgIH07XG5cbiAgICBmdW5jdGlvbiBvbmx5X29uY2UoZm4pIHtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgaWYgKGZuID09PSBudWxsKSB0aHJvdyBuZXcgRXJyb3IoXCJDYWxsYmFjayB3YXMgYWxyZWFkeSBjYWxsZWQuXCIpO1xuICAgICAgICAgICAgZm4uYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICAgICAgICAgIGZuID0gbnVsbDtcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBfb25jZShmbikge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICBpZiAoZm4gPT09IG51bGwpIHJldHVybjtcbiAgICAgICAgICAgIGZuLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgICAgICAgICBmbiA9IG51bGw7XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgLy8vLyBjcm9zcy1icm93c2VyIGNvbXBhdGlibGl0eSBmdW5jdGlvbnMgLy8vL1xuXG4gICAgdmFyIF90b1N0cmluZyA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7XG5cbiAgICB2YXIgX2lzQXJyYXkgPSBBcnJheS5pc0FycmF5IHx8IGZ1bmN0aW9uIChvYmopIHtcbiAgICAgICAgcmV0dXJuIF90b1N0cmluZy5jYWxsKG9iaikgPT09ICdbb2JqZWN0IEFycmF5XSc7XG4gICAgfTtcblxuICAgIC8vIFBvcnRlZCBmcm9tIHVuZGVyc2NvcmUuanMgaXNPYmplY3RcbiAgICB2YXIgX2lzT2JqZWN0ID0gZnVuY3Rpb24ob2JqKSB7XG4gICAgICAgIHZhciB0eXBlID0gdHlwZW9mIG9iajtcbiAgICAgICAgcmV0dXJuIHR5cGUgPT09ICdmdW5jdGlvbicgfHwgdHlwZSA9PT0gJ29iamVjdCcgJiYgISFvYmo7XG4gICAgfTtcblxuICAgIGZ1bmN0aW9uIF9pc0FycmF5TGlrZShhcnIpIHtcbiAgICAgICAgcmV0dXJuIF9pc0FycmF5KGFycikgfHwgKFxuICAgICAgICAgICAgLy8gaGFzIGEgcG9zaXRpdmUgaW50ZWdlciBsZW5ndGggcHJvcGVydHlcbiAgICAgICAgICAgIHR5cGVvZiBhcnIubGVuZ3RoID09PSBcIm51bWJlclwiICYmXG4gICAgICAgICAgICBhcnIubGVuZ3RoID49IDAgJiZcbiAgICAgICAgICAgIGFyci5sZW5ndGggJSAxID09PSAwXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gX2FycmF5RWFjaChhcnIsIGl0ZXJhdG9yKSB7XG4gICAgICAgIHZhciBpbmRleCA9IC0xLFxuICAgICAgICAgICAgbGVuZ3RoID0gYXJyLmxlbmd0aDtcblxuICAgICAgICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgICAgICAgICAgaXRlcmF0b3IoYXJyW2luZGV4XSwgaW5kZXgsIGFycik7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBfbWFwKGFyciwgaXRlcmF0b3IpIHtcbiAgICAgICAgdmFyIGluZGV4ID0gLTEsXG4gICAgICAgICAgICBsZW5ndGggPSBhcnIubGVuZ3RoLFxuICAgICAgICAgICAgcmVzdWx0ID0gQXJyYXkobGVuZ3RoKTtcblxuICAgICAgICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgICAgICAgICAgcmVzdWx0W2luZGV4XSA9IGl0ZXJhdG9yKGFycltpbmRleF0sIGluZGV4LCBhcnIpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gX3JhbmdlKGNvdW50KSB7XG4gICAgICAgIHJldHVybiBfbWFwKEFycmF5KGNvdW50KSwgZnVuY3Rpb24gKHYsIGkpIHsgcmV0dXJuIGk7IH0pO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIF9yZWR1Y2UoYXJyLCBpdGVyYXRvciwgbWVtbykge1xuICAgICAgICBfYXJyYXlFYWNoKGFyciwgZnVuY3Rpb24gKHgsIGksIGEpIHtcbiAgICAgICAgICAgIG1lbW8gPSBpdGVyYXRvcihtZW1vLCB4LCBpLCBhKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBtZW1vO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIF9mb3JFYWNoT2Yob2JqZWN0LCBpdGVyYXRvcikge1xuICAgICAgICBfYXJyYXlFYWNoKF9rZXlzKG9iamVjdCksIGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgICAgIGl0ZXJhdG9yKG9iamVjdFtrZXldLCBrZXkpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBfaW5kZXhPZihhcnIsIGl0ZW0pIHtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcnIubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGlmIChhcnJbaV0gPT09IGl0ZW0pIHJldHVybiBpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiAtMTtcbiAgICB9XG5cbiAgICB2YXIgX2tleXMgPSBPYmplY3Qua2V5cyB8fCBmdW5jdGlvbiAob2JqKSB7XG4gICAgICAgIHZhciBrZXlzID0gW107XG4gICAgICAgIGZvciAodmFyIGsgaW4gb2JqKSB7XG4gICAgICAgICAgICBpZiAob2JqLmhhc093blByb3BlcnR5KGspKSB7XG4gICAgICAgICAgICAgICAga2V5cy5wdXNoKGspO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBrZXlzO1xuICAgIH07XG5cbiAgICBmdW5jdGlvbiBfa2V5SXRlcmF0b3IoY29sbCkge1xuICAgICAgICB2YXIgaSA9IC0xO1xuICAgICAgICB2YXIgbGVuO1xuICAgICAgICB2YXIga2V5cztcbiAgICAgICAgaWYgKF9pc0FycmF5TGlrZShjb2xsKSkge1xuICAgICAgICAgICAgbGVuID0gY29sbC5sZW5ndGg7XG4gICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24gbmV4dCgpIHtcbiAgICAgICAgICAgICAgICBpKys7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGkgPCBsZW4gPyBpIDogbnVsbDtcbiAgICAgICAgICAgIH07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBrZXlzID0gX2tleXMoY29sbCk7XG4gICAgICAgICAgICBsZW4gPSBrZXlzLmxlbmd0aDtcbiAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbiBuZXh0KCkge1xuICAgICAgICAgICAgICAgIGkrKztcbiAgICAgICAgICAgICAgICByZXR1cm4gaSA8IGxlbiA/IGtleXNbaV0gOiBudWxsO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIFNpbWlsYXIgdG8gRVM2J3MgcmVzdCBwYXJhbSAoaHR0cDovL2FyaXlhLm9maWxhYnMuY29tLzIwMTMvMDMvZXM2LWFuZC1yZXN0LXBhcmFtZXRlci5odG1sKVxuICAgIC8vIFRoaXMgYWNjdW11bGF0ZXMgdGhlIGFyZ3VtZW50cyBwYXNzZWQgaW50byBhbiBhcnJheSwgYWZ0ZXIgYSBnaXZlbiBpbmRleC5cbiAgICAvLyBGcm9tIHVuZGVyc2NvcmUuanMgKGh0dHBzOi8vZ2l0aHViLmNvbS9qYXNoa2VuYXMvdW5kZXJzY29yZS9wdWxsLzIxNDApLlxuICAgIGZ1bmN0aW9uIF9yZXN0UGFyYW0oZnVuYywgc3RhcnRJbmRleCkge1xuICAgICAgICBzdGFydEluZGV4ID0gc3RhcnRJbmRleCA9PSBudWxsID8gZnVuYy5sZW5ndGggLSAxIDogK3N0YXJ0SW5kZXg7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIHZhciBsZW5ndGggPSBNYXRoLm1heChhcmd1bWVudHMubGVuZ3RoIC0gc3RhcnRJbmRleCwgMCk7XG4gICAgICAgICAgICB2YXIgcmVzdCA9IEFycmF5KGxlbmd0aCk7XG4gICAgICAgICAgICBmb3IgKHZhciBpbmRleCA9IDA7IGluZGV4IDwgbGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgICAgICAgICAgICAgcmVzdFtpbmRleF0gPSBhcmd1bWVudHNbaW5kZXggKyBzdGFydEluZGV4XTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHN3aXRjaCAoc3RhcnRJbmRleCkge1xuICAgICAgICAgICAgICAgIGNhc2UgMDogcmV0dXJuIGZ1bmMuY2FsbCh0aGlzLCByZXN0KTtcbiAgICAgICAgICAgICAgICBjYXNlIDE6IHJldHVybiBmdW5jLmNhbGwodGhpcywgYXJndW1lbnRzWzBdLCByZXN0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIEN1cnJlbnRseSB1bnVzZWQgYnV0IGhhbmRsZSBjYXNlcyBvdXRzaWRlIG9mIHRoZSBzd2l0Y2ggc3RhdGVtZW50OlxuICAgICAgICAgICAgLy8gdmFyIGFyZ3MgPSBBcnJheShzdGFydEluZGV4ICsgMSk7XG4gICAgICAgICAgICAvLyBmb3IgKGluZGV4ID0gMDsgaW5kZXggPCBzdGFydEluZGV4OyBpbmRleCsrKSB7XG4gICAgICAgICAgICAvLyAgICAgYXJnc1tpbmRleF0gPSBhcmd1bWVudHNbaW5kZXhdO1xuICAgICAgICAgICAgLy8gfVxuICAgICAgICAgICAgLy8gYXJnc1tzdGFydEluZGV4XSA9IHJlc3Q7XG4gICAgICAgICAgICAvLyByZXR1cm4gZnVuYy5hcHBseSh0aGlzLCBhcmdzKTtcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBfd2l0aG91dEluZGV4KGl0ZXJhdG9yKSB7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAodmFsdWUsIGluZGV4LCBjYWxsYmFjaykge1xuICAgICAgICAgICAgcmV0dXJuIGl0ZXJhdG9yKHZhbHVlLCBjYWxsYmFjayk7XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgLy8vLyBleHBvcnRlZCBhc3luYyBtb2R1bGUgZnVuY3Rpb25zIC8vLy9cblxuICAgIC8vLy8gbmV4dFRpY2sgaW1wbGVtZW50YXRpb24gd2l0aCBicm93c2VyLWNvbXBhdGlibGUgZmFsbGJhY2sgLy8vL1xuXG4gICAgLy8gY2FwdHVyZSB0aGUgZ2xvYmFsIHJlZmVyZW5jZSB0byBndWFyZCBhZ2FpbnN0IGZha2VUaW1lciBtb2Nrc1xuICAgIHZhciBfc2V0SW1tZWRpYXRlID0gdHlwZW9mIHNldEltbWVkaWF0ZSA9PT0gJ2Z1bmN0aW9uJyAmJiBzZXRJbW1lZGlhdGU7XG5cbiAgICB2YXIgX2RlbGF5ID0gX3NldEltbWVkaWF0ZSA/IGZ1bmN0aW9uKGZuKSB7XG4gICAgICAgIC8vIG5vdCBhIGRpcmVjdCBhbGlhcyBmb3IgSUUxMCBjb21wYXRpYmlsaXR5XG4gICAgICAgIF9zZXRJbW1lZGlhdGUoZm4pO1xuICAgIH0gOiBmdW5jdGlvbihmbikge1xuICAgICAgICBzZXRUaW1lb3V0KGZuLCAwKTtcbiAgICB9O1xuXG4gICAgaWYgKHR5cGVvZiBwcm9jZXNzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgcHJvY2Vzcy5uZXh0VGljayA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBhc3luYy5uZXh0VGljayA9IHByb2Nlc3MubmV4dFRpY2s7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgYXN5bmMubmV4dFRpY2sgPSBfZGVsYXk7XG4gICAgfVxuICAgIGFzeW5jLnNldEltbWVkaWF0ZSA9IF9zZXRJbW1lZGlhdGUgPyBfZGVsYXkgOiBhc3luYy5uZXh0VGljaztcblxuXG4gICAgYXN5bmMuZm9yRWFjaCA9XG4gICAgYXN5bmMuZWFjaCA9IGZ1bmN0aW9uIChhcnIsIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICByZXR1cm4gYXN5bmMuZWFjaE9mKGFyciwgX3dpdGhvdXRJbmRleChpdGVyYXRvciksIGNhbGxiYWNrKTtcbiAgICB9O1xuXG4gICAgYXN5bmMuZm9yRWFjaFNlcmllcyA9XG4gICAgYXN5bmMuZWFjaFNlcmllcyA9IGZ1bmN0aW9uIChhcnIsIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICByZXR1cm4gYXN5bmMuZWFjaE9mU2VyaWVzKGFyciwgX3dpdGhvdXRJbmRleChpdGVyYXRvciksIGNhbGxiYWNrKTtcbiAgICB9O1xuXG5cbiAgICBhc3luYy5mb3JFYWNoTGltaXQgPVxuICAgIGFzeW5jLmVhY2hMaW1pdCA9IGZ1bmN0aW9uIChhcnIsIGxpbWl0LCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgcmV0dXJuIF9lYWNoT2ZMaW1pdChsaW1pdCkoYXJyLCBfd2l0aG91dEluZGV4KGl0ZXJhdG9yKSwgY2FsbGJhY2spO1xuICAgIH07XG5cbiAgICBhc3luYy5mb3JFYWNoT2YgPVxuICAgIGFzeW5jLmVhY2hPZiA9IGZ1bmN0aW9uIChvYmplY3QsIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICBjYWxsYmFjayA9IF9vbmNlKGNhbGxiYWNrIHx8IG5vb3ApO1xuICAgICAgICBvYmplY3QgPSBvYmplY3QgfHwgW107XG5cbiAgICAgICAgdmFyIGl0ZXIgPSBfa2V5SXRlcmF0b3Iob2JqZWN0KTtcbiAgICAgICAgdmFyIGtleSwgY29tcGxldGVkID0gMDtcblxuICAgICAgICB3aGlsZSAoKGtleSA9IGl0ZXIoKSkgIT0gbnVsbCkge1xuICAgICAgICAgICAgY29tcGxldGVkICs9IDE7XG4gICAgICAgICAgICBpdGVyYXRvcihvYmplY3Rba2V5XSwga2V5LCBvbmx5X29uY2UoZG9uZSkpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGNvbXBsZXRlZCA9PT0gMCkgY2FsbGJhY2sobnVsbCk7XG5cbiAgICAgICAgZnVuY3Rpb24gZG9uZShlcnIpIHtcbiAgICAgICAgICAgIGNvbXBsZXRlZC0tO1xuICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBDaGVjayBrZXkgaXMgbnVsbCBpbiBjYXNlIGl0ZXJhdG9yIGlzbid0IGV4aGF1c3RlZFxuICAgICAgICAgICAgLy8gYW5kIGRvbmUgcmVzb2x2ZWQgc3luY2hyb25vdXNseS5cbiAgICAgICAgICAgIGVsc2UgaWYgKGtleSA9PT0gbnVsbCAmJiBjb21wbGV0ZWQgPD0gMCkge1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrKG51bGwpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfTtcblxuICAgIGFzeW5jLmZvckVhY2hPZlNlcmllcyA9XG4gICAgYXN5bmMuZWFjaE9mU2VyaWVzID0gZnVuY3Rpb24gKG9iaiwgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgIGNhbGxiYWNrID0gX29uY2UoY2FsbGJhY2sgfHwgbm9vcCk7XG4gICAgICAgIG9iaiA9IG9iaiB8fCBbXTtcbiAgICAgICAgdmFyIG5leHRLZXkgPSBfa2V5SXRlcmF0b3Iob2JqKTtcbiAgICAgICAgdmFyIGtleSA9IG5leHRLZXkoKTtcbiAgICAgICAgZnVuY3Rpb24gaXRlcmF0ZSgpIHtcbiAgICAgICAgICAgIHZhciBzeW5jID0gdHJ1ZTtcbiAgICAgICAgICAgIGlmIChrZXkgPT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gY2FsbGJhY2sobnVsbCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpdGVyYXRvcihvYmpba2V5XSwga2V5LCBvbmx5X29uY2UoZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGtleSA9IG5leHRLZXkoKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGtleSA9PT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKG51bGwpO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN5bmMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhc3luYy5zZXRJbW1lZGlhdGUoaXRlcmF0ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZXJhdGUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgIHN5bmMgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBpdGVyYXRlKCk7XG4gICAgfTtcblxuXG5cbiAgICBhc3luYy5mb3JFYWNoT2ZMaW1pdCA9XG4gICAgYXN5bmMuZWFjaE9mTGltaXQgPSBmdW5jdGlvbiAob2JqLCBsaW1pdCwgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgIF9lYWNoT2ZMaW1pdChsaW1pdCkob2JqLCBpdGVyYXRvciwgY2FsbGJhY2spO1xuICAgIH07XG5cbiAgICBmdW5jdGlvbiBfZWFjaE9mTGltaXQobGltaXQpIHtcblxuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKG9iaiwgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICBjYWxsYmFjayA9IF9vbmNlKGNhbGxiYWNrIHx8IG5vb3ApO1xuICAgICAgICAgICAgb2JqID0gb2JqIHx8IFtdO1xuICAgICAgICAgICAgdmFyIG5leHRLZXkgPSBfa2V5SXRlcmF0b3Iob2JqKTtcbiAgICAgICAgICAgIGlmIChsaW1pdCA8PSAwKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKG51bGwpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdmFyIGRvbmUgPSBmYWxzZTtcbiAgICAgICAgICAgIHZhciBydW5uaW5nID0gMDtcbiAgICAgICAgICAgIHZhciBlcnJvcmVkID0gZmFsc2U7XG5cbiAgICAgICAgICAgIChmdW5jdGlvbiByZXBsZW5pc2ggKCkge1xuICAgICAgICAgICAgICAgIGlmIChkb25lICYmIHJ1bm5pbmcgPD0gMCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gY2FsbGJhY2sobnVsbCk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgd2hpbGUgKHJ1bm5pbmcgPCBsaW1pdCAmJiAhZXJyb3JlZCkge1xuICAgICAgICAgICAgICAgICAgICB2YXIga2V5ID0gbmV4dEtleSgpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoa2V5ID09PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBkb25lID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChydW5uaW5nIDw9IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhudWxsKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBydW5uaW5nICs9IDE7XG4gICAgICAgICAgICAgICAgICAgIGl0ZXJhdG9yKG9ialtrZXldLCBrZXksIG9ubHlfb25jZShmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBydW5uaW5nIC09IDE7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvcmVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcGxlbmlzaCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSkoKTtcbiAgICAgICAgfTtcbiAgICB9XG5cblxuICAgIGZ1bmN0aW9uIGRvUGFyYWxsZWwoZm4pIHtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChvYmosIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICAgICAgcmV0dXJuIGZuKGFzeW5jLmVhY2hPZiwgb2JqLCBpdGVyYXRvciwgY2FsbGJhY2spO1xuICAgICAgICB9O1xuICAgIH1cbiAgICBmdW5jdGlvbiBkb1BhcmFsbGVsTGltaXQoZm4pIHtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChvYmosIGxpbWl0LCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIHJldHVybiBmbihfZWFjaE9mTGltaXQobGltaXQpLCBvYmosIGl0ZXJhdG9yLCBjYWxsYmFjayk7XG4gICAgICAgIH07XG4gICAgfVxuICAgIGZ1bmN0aW9uIGRvU2VyaWVzKGZuKSB7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAob2JqLCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIHJldHVybiBmbihhc3luYy5lYWNoT2ZTZXJpZXMsIG9iaiwgaXRlcmF0b3IsIGNhbGxiYWNrKTtcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBfYXN5bmNNYXAoZWFjaGZuLCBhcnIsIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICBjYWxsYmFjayA9IF9vbmNlKGNhbGxiYWNrIHx8IG5vb3ApO1xuICAgICAgICBhcnIgPSBhcnIgfHwgW107XG4gICAgICAgIHZhciByZXN1bHRzID0gX2lzQXJyYXlMaWtlKGFycikgPyBbXSA6IHt9O1xuICAgICAgICBlYWNoZm4oYXJyLCBmdW5jdGlvbiAodmFsdWUsIGluZGV4LCBjYWxsYmFjaykge1xuICAgICAgICAgICAgaXRlcmF0b3IodmFsdWUsIGZ1bmN0aW9uIChlcnIsIHYpIHtcbiAgICAgICAgICAgICAgICByZXN1bHRzW2luZGV4XSA9IHY7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICBjYWxsYmFjayhlcnIsIHJlc3VsdHMpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBhc3luYy5tYXAgPSBkb1BhcmFsbGVsKF9hc3luY01hcCk7XG4gICAgYXN5bmMubWFwU2VyaWVzID0gZG9TZXJpZXMoX2FzeW5jTWFwKTtcbiAgICBhc3luYy5tYXBMaW1pdCA9IGRvUGFyYWxsZWxMaW1pdChfYXN5bmNNYXApO1xuXG4gICAgLy8gcmVkdWNlIG9ubHkgaGFzIGEgc2VyaWVzIHZlcnNpb24sIGFzIGRvaW5nIHJlZHVjZSBpbiBwYXJhbGxlbCB3b24ndFxuICAgIC8vIHdvcmsgaW4gbWFueSBzaXR1YXRpb25zLlxuICAgIGFzeW5jLmluamVjdCA9XG4gICAgYXN5bmMuZm9sZGwgPVxuICAgIGFzeW5jLnJlZHVjZSA9IGZ1bmN0aW9uIChhcnIsIG1lbW8sIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICBhc3luYy5lYWNoT2ZTZXJpZXMoYXJyLCBmdW5jdGlvbiAoeCwgaSwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIGl0ZXJhdG9yKG1lbW8sIHgsIGZ1bmN0aW9uIChlcnIsIHYpIHtcbiAgICAgICAgICAgICAgICBtZW1vID0gdjtcbiAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgIGNhbGxiYWNrKGVyciwgbWVtbyk7XG4gICAgICAgIH0pO1xuICAgIH07XG5cbiAgICBhc3luYy5mb2xkciA9XG4gICAgYXN5bmMucmVkdWNlUmlnaHQgPSBmdW5jdGlvbiAoYXJyLCBtZW1vLCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgdmFyIHJldmVyc2VkID0gX21hcChhcnIsIGlkZW50aXR5KS5yZXZlcnNlKCk7XG4gICAgICAgIGFzeW5jLnJlZHVjZShyZXZlcnNlZCwgbWVtbywgaXRlcmF0b3IsIGNhbGxiYWNrKTtcbiAgICB9O1xuXG4gICAgYXN5bmMudHJhbnNmb3JtID0gZnVuY3Rpb24gKGFyciwgbWVtbywgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAzKSB7XG4gICAgICAgICAgICBjYWxsYmFjayA9IGl0ZXJhdG9yO1xuICAgICAgICAgICAgaXRlcmF0b3IgPSBtZW1vO1xuICAgICAgICAgICAgbWVtbyA9IF9pc0FycmF5KGFycikgPyBbXSA6IHt9O1xuICAgICAgICB9XG5cbiAgICAgICAgYXN5bmMuZWFjaE9mKGFyciwgZnVuY3Rpb24odiwgaywgY2IpIHtcbiAgICAgICAgICAgIGl0ZXJhdG9yKG1lbW8sIHYsIGssIGNiKTtcbiAgICAgICAgfSwgZnVuY3Rpb24oZXJyKSB7XG4gICAgICAgICAgICBjYWxsYmFjayhlcnIsIG1lbW8pO1xuICAgICAgICB9KTtcbiAgICB9O1xuXG4gICAgZnVuY3Rpb24gX2ZpbHRlcihlYWNoZm4sIGFyciwgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgIHZhciByZXN1bHRzID0gW107XG4gICAgICAgIGVhY2hmbihhcnIsIGZ1bmN0aW9uICh4LCBpbmRleCwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIGl0ZXJhdG9yKHgsIGZ1bmN0aW9uICh2KSB7XG4gICAgICAgICAgICAgICAgaWYgKHYpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0cy5wdXNoKHtpbmRleDogaW5kZXgsIHZhbHVlOiB4fSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhbGxiYWNrKCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgY2FsbGJhY2soX21hcChyZXN1bHRzLnNvcnQoZnVuY3Rpb24gKGEsIGIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gYS5pbmRleCAtIGIuaW5kZXg7XG4gICAgICAgICAgICB9KSwgZnVuY3Rpb24gKHgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4geC52YWx1ZTtcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgYXN5bmMuc2VsZWN0ID1cbiAgICBhc3luYy5maWx0ZXIgPSBkb1BhcmFsbGVsKF9maWx0ZXIpO1xuXG4gICAgYXN5bmMuc2VsZWN0TGltaXQgPVxuICAgIGFzeW5jLmZpbHRlckxpbWl0ID0gZG9QYXJhbGxlbExpbWl0KF9maWx0ZXIpO1xuXG4gICAgYXN5bmMuc2VsZWN0U2VyaWVzID1cbiAgICBhc3luYy5maWx0ZXJTZXJpZXMgPSBkb1NlcmllcyhfZmlsdGVyKTtcblxuICAgIGZ1bmN0aW9uIF9yZWplY3QoZWFjaGZuLCBhcnIsIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICBfZmlsdGVyKGVhY2hmbiwgYXJyLCBmdW5jdGlvbih2YWx1ZSwgY2IpIHtcbiAgICAgICAgICAgIGl0ZXJhdG9yKHZhbHVlLCBmdW5jdGlvbih2KSB7XG4gICAgICAgICAgICAgICAgY2IoIXYpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sIGNhbGxiYWNrKTtcbiAgICB9XG4gICAgYXN5bmMucmVqZWN0ID0gZG9QYXJhbGxlbChfcmVqZWN0KTtcbiAgICBhc3luYy5yZWplY3RMaW1pdCA9IGRvUGFyYWxsZWxMaW1pdChfcmVqZWN0KTtcbiAgICBhc3luYy5yZWplY3RTZXJpZXMgPSBkb1NlcmllcyhfcmVqZWN0KTtcblxuICAgIGZ1bmN0aW9uIF9jcmVhdGVUZXN0ZXIoZWFjaGZuLCBjaGVjaywgZ2V0UmVzdWx0KSB7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbihhcnIsIGxpbWl0LCBpdGVyYXRvciwgY2IpIHtcbiAgICAgICAgICAgIGZ1bmN0aW9uIGRvbmUoKSB7XG4gICAgICAgICAgICAgICAgaWYgKGNiKSBjYihnZXRSZXN1bHQoZmFsc2UsIHZvaWQgMCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZnVuY3Rpb24gaXRlcmF0ZWUoeCwgXywgY2FsbGJhY2spIHtcbiAgICAgICAgICAgICAgICBpZiAoIWNiKSByZXR1cm4gY2FsbGJhY2soKTtcbiAgICAgICAgICAgICAgICBpdGVyYXRvcih4LCBmdW5jdGlvbiAodikge1xuICAgICAgICAgICAgICAgICAgICBpZiAoY2IgJiYgY2hlY2sodikpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNiKGdldFJlc3VsdCh0cnVlLCB4KSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBjYiA9IGl0ZXJhdG9yID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID4gMykge1xuICAgICAgICAgICAgICAgIGVhY2hmbihhcnIsIGxpbWl0LCBpdGVyYXRlZSwgZG9uZSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGNiID0gaXRlcmF0b3I7XG4gICAgICAgICAgICAgICAgaXRlcmF0b3IgPSBsaW1pdDtcbiAgICAgICAgICAgICAgICBlYWNoZm4oYXJyLCBpdGVyYXRlZSwgZG9uZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgYXN5bmMuYW55ID1cbiAgICBhc3luYy5zb21lID0gX2NyZWF0ZVRlc3Rlcihhc3luYy5lYWNoT2YsIHRvQm9vbCwgaWRlbnRpdHkpO1xuXG4gICAgYXN5bmMuc29tZUxpbWl0ID0gX2NyZWF0ZVRlc3Rlcihhc3luYy5lYWNoT2ZMaW1pdCwgdG9Cb29sLCBpZGVudGl0eSk7XG5cbiAgICBhc3luYy5hbGwgPVxuICAgIGFzeW5jLmV2ZXJ5ID0gX2NyZWF0ZVRlc3Rlcihhc3luYy5lYWNoT2YsIG5vdElkLCBub3RJZCk7XG5cbiAgICBhc3luYy5ldmVyeUxpbWl0ID0gX2NyZWF0ZVRlc3Rlcihhc3luYy5lYWNoT2ZMaW1pdCwgbm90SWQsIG5vdElkKTtcblxuICAgIGZ1bmN0aW9uIF9maW5kR2V0UmVzdWx0KHYsIHgpIHtcbiAgICAgICAgcmV0dXJuIHg7XG4gICAgfVxuICAgIGFzeW5jLmRldGVjdCA9IF9jcmVhdGVUZXN0ZXIoYXN5bmMuZWFjaE9mLCBpZGVudGl0eSwgX2ZpbmRHZXRSZXN1bHQpO1xuICAgIGFzeW5jLmRldGVjdFNlcmllcyA9IF9jcmVhdGVUZXN0ZXIoYXN5bmMuZWFjaE9mU2VyaWVzLCBpZGVudGl0eSwgX2ZpbmRHZXRSZXN1bHQpO1xuICAgIGFzeW5jLmRldGVjdExpbWl0ID0gX2NyZWF0ZVRlc3Rlcihhc3luYy5lYWNoT2ZMaW1pdCwgaWRlbnRpdHksIF9maW5kR2V0UmVzdWx0KTtcblxuICAgIGFzeW5jLnNvcnRCeSA9IGZ1bmN0aW9uIChhcnIsIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICBhc3luYy5tYXAoYXJyLCBmdW5jdGlvbiAoeCwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIGl0ZXJhdG9yKHgsIGZ1bmN0aW9uIChlcnIsIGNyaXRlcmlhKSB7XG4gICAgICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2sobnVsbCwge3ZhbHVlOiB4LCBjcml0ZXJpYTogY3JpdGVyaWF9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSwgZnVuY3Rpb24gKGVyciwgcmVzdWx0cykge1xuICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAgIHJldHVybiBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2sobnVsbCwgX21hcChyZXN1bHRzLnNvcnQoY29tcGFyYXRvciksIGZ1bmN0aW9uICh4KSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB4LnZhbHVlO1xuICAgICAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICB9KTtcblxuICAgICAgICBmdW5jdGlvbiBjb21wYXJhdG9yKGxlZnQsIHJpZ2h0KSB7XG4gICAgICAgICAgICB2YXIgYSA9IGxlZnQuY3JpdGVyaWEsIGIgPSByaWdodC5jcml0ZXJpYTtcbiAgICAgICAgICAgIHJldHVybiBhIDwgYiA/IC0xIDogYSA+IGIgPyAxIDogMDtcbiAgICAgICAgfVxuICAgIH07XG5cbiAgICBhc3luYy5hdXRvID0gZnVuY3Rpb24gKHRhc2tzLCBjb25jdXJyZW5jeSwgY2FsbGJhY2spIHtcbiAgICAgICAgaWYgKCFjYWxsYmFjaykge1xuICAgICAgICAgICAgLy8gY29uY3VycmVuY3kgaXMgb3B0aW9uYWwsIHNoaWZ0IHRoZSBhcmdzLlxuICAgICAgICAgICAgY2FsbGJhY2sgPSBjb25jdXJyZW5jeTtcbiAgICAgICAgICAgIGNvbmN1cnJlbmN5ID0gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBjYWxsYmFjayA9IF9vbmNlKGNhbGxiYWNrIHx8IG5vb3ApO1xuICAgICAgICB2YXIga2V5cyA9IF9rZXlzKHRhc2tzKTtcbiAgICAgICAgdmFyIHJlbWFpbmluZ1Rhc2tzID0ga2V5cy5sZW5ndGg7XG4gICAgICAgIGlmICghcmVtYWluaW5nVGFza3MpIHtcbiAgICAgICAgICAgIHJldHVybiBjYWxsYmFjayhudWxsKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWNvbmN1cnJlbmN5KSB7XG4gICAgICAgICAgICBjb25jdXJyZW5jeSA9IHJlbWFpbmluZ1Rhc2tzO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIHJlc3VsdHMgPSB7fTtcbiAgICAgICAgdmFyIHJ1bm5pbmdUYXNrcyA9IDA7XG5cbiAgICAgICAgdmFyIGxpc3RlbmVycyA9IFtdO1xuICAgICAgICBmdW5jdGlvbiBhZGRMaXN0ZW5lcihmbikge1xuICAgICAgICAgICAgbGlzdGVuZXJzLnVuc2hpZnQoZm4pO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIHJlbW92ZUxpc3RlbmVyKGZuKSB7XG4gICAgICAgICAgICB2YXIgaWR4ID0gX2luZGV4T2YobGlzdGVuZXJzLCBmbik7XG4gICAgICAgICAgICBpZiAoaWR4ID49IDApIGxpc3RlbmVycy5zcGxpY2UoaWR4LCAxKTtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiB0YXNrQ29tcGxldGUoKSB7XG4gICAgICAgICAgICByZW1haW5pbmdUYXNrcy0tO1xuICAgICAgICAgICAgX2FycmF5RWFjaChsaXN0ZW5lcnMuc2xpY2UoMCksIGZ1bmN0aW9uIChmbikge1xuICAgICAgICAgICAgICAgIGZuKCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGFkZExpc3RlbmVyKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGlmICghcmVtYWluaW5nVGFza3MpIHtcbiAgICAgICAgICAgICAgICBjYWxsYmFjayhudWxsLCByZXN1bHRzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgX2FycmF5RWFjaChrZXlzLCBmdW5jdGlvbiAoaykge1xuICAgICAgICAgICAgdmFyIHRhc2sgPSBfaXNBcnJheSh0YXNrc1trXSkgPyB0YXNrc1trXTogW3Rhc2tzW2tdXTtcbiAgICAgICAgICAgIHZhciB0YXNrQ2FsbGJhY2sgPSBfcmVzdFBhcmFtKGZ1bmN0aW9uKGVyciwgYXJncykge1xuICAgICAgICAgICAgICAgIHJ1bm5pbmdUYXNrcy0tO1xuICAgICAgICAgICAgICAgIGlmIChhcmdzLmxlbmd0aCA8PSAxKSB7XG4gICAgICAgICAgICAgICAgICAgIGFyZ3MgPSBhcmdzWzBdO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBzYWZlUmVzdWx0cyA9IHt9O1xuICAgICAgICAgICAgICAgICAgICBfZm9yRWFjaE9mKHJlc3VsdHMsIGZ1bmN0aW9uKHZhbCwgcmtleSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgc2FmZVJlc3VsdHNbcmtleV0gPSB2YWw7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICBzYWZlUmVzdWx0c1trXSA9IGFyZ3M7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKGVyciwgc2FmZVJlc3VsdHMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0c1trXSA9IGFyZ3M7XG4gICAgICAgICAgICAgICAgICAgIGFzeW5jLnNldEltbWVkaWF0ZSh0YXNrQ29tcGxldGUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdmFyIHJlcXVpcmVzID0gdGFzay5zbGljZSgwLCB0YXNrLmxlbmd0aCAtIDEpO1xuICAgICAgICAgICAgLy8gcHJldmVudCBkZWFkLWxvY2tzXG4gICAgICAgICAgICB2YXIgbGVuID0gcmVxdWlyZXMubGVuZ3RoO1xuICAgICAgICAgICAgdmFyIGRlcDtcbiAgICAgICAgICAgIHdoaWxlIChsZW4tLSkge1xuICAgICAgICAgICAgICAgIGlmICghKGRlcCA9IHRhc2tzW3JlcXVpcmVzW2xlbl1dKSkge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0hhcyBpbmV4aXN0YW50IGRlcGVuZGVuY3knKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKF9pc0FycmF5KGRlcCkgJiYgX2luZGV4T2YoZGVwLCBrKSA+PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignSGFzIGN5Y2xpYyBkZXBlbmRlbmNpZXMnKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmdW5jdGlvbiByZWFkeSgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcnVubmluZ1Rhc2tzIDwgY29uY3VycmVuY3kgJiYgX3JlZHVjZShyZXF1aXJlcywgZnVuY3Rpb24gKGEsIHgpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChhICYmIHJlc3VsdHMuaGFzT3duUHJvcGVydHkoeCkpO1xuICAgICAgICAgICAgICAgIH0sIHRydWUpICYmICFyZXN1bHRzLmhhc093blByb3BlcnR5KGspO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHJlYWR5KCkpIHtcbiAgICAgICAgICAgICAgICBydW5uaW5nVGFza3MrKztcbiAgICAgICAgICAgICAgICB0YXNrW3Rhc2subGVuZ3RoIC0gMV0odGFza0NhbGxiYWNrLCByZXN1bHRzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGFkZExpc3RlbmVyKGxpc3RlbmVyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZ1bmN0aW9uIGxpc3RlbmVyKCkge1xuICAgICAgICAgICAgICAgIGlmIChyZWFkeSgpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJ1bm5pbmdUYXNrcysrO1xuICAgICAgICAgICAgICAgICAgICByZW1vdmVMaXN0ZW5lcihsaXN0ZW5lcik7XG4gICAgICAgICAgICAgICAgICAgIHRhc2tbdGFzay5sZW5ndGggLSAxXSh0YXNrQ2FsbGJhY2ssIHJlc3VsdHMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfTtcblxuXG5cbiAgICBhc3luYy5yZXRyeSA9IGZ1bmN0aW9uKHRpbWVzLCB0YXNrLCBjYWxsYmFjaykge1xuICAgICAgICB2YXIgREVGQVVMVF9USU1FUyA9IDU7XG4gICAgICAgIHZhciBERUZBVUxUX0lOVEVSVkFMID0gMDtcblxuICAgICAgICB2YXIgYXR0ZW1wdHMgPSBbXTtcblxuICAgICAgICB2YXIgb3B0cyA9IHtcbiAgICAgICAgICAgIHRpbWVzOiBERUZBVUxUX1RJTUVTLFxuICAgICAgICAgICAgaW50ZXJ2YWw6IERFRkFVTFRfSU5URVJWQUxcbiAgICAgICAgfTtcblxuICAgICAgICBmdW5jdGlvbiBwYXJzZVRpbWVzKGFjYywgdCl7XG4gICAgICAgICAgICBpZih0eXBlb2YgdCA9PT0gJ251bWJlcicpe1xuICAgICAgICAgICAgICAgIGFjYy50aW1lcyA9IHBhcnNlSW50KHQsIDEwKSB8fCBERUZBVUxUX1RJTUVTO1xuICAgICAgICAgICAgfSBlbHNlIGlmKHR5cGVvZiB0ID09PSAnb2JqZWN0Jyl7XG4gICAgICAgICAgICAgICAgYWNjLnRpbWVzID0gcGFyc2VJbnQodC50aW1lcywgMTApIHx8IERFRkFVTFRfVElNRVM7XG4gICAgICAgICAgICAgICAgYWNjLmludGVydmFsID0gcGFyc2VJbnQodC5pbnRlcnZhbCwgMTApIHx8IERFRkFVTFRfSU5URVJWQUw7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignVW5zdXBwb3J0ZWQgYXJndW1lbnQgdHlwZSBmb3IgXFwndGltZXNcXCc6ICcgKyB0eXBlb2YgdCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgbGVuZ3RoID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgICAgICAgaWYgKGxlbmd0aCA8IDEgfHwgbGVuZ3RoID4gMykge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIGFyZ3VtZW50cyAtIG11c3QgYmUgZWl0aGVyICh0YXNrKSwgKHRhc2ssIGNhbGxiYWNrKSwgKHRpbWVzLCB0YXNrKSBvciAodGltZXMsIHRhc2ssIGNhbGxiYWNrKScpO1xuICAgICAgICB9IGVsc2UgaWYgKGxlbmd0aCA8PSAyICYmIHR5cGVvZiB0aW1lcyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgY2FsbGJhY2sgPSB0YXNrO1xuICAgICAgICAgICAgdGFzayA9IHRpbWVzO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0eXBlb2YgdGltZXMgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIHBhcnNlVGltZXMob3B0cywgdGltZXMpO1xuICAgICAgICB9XG4gICAgICAgIG9wdHMuY2FsbGJhY2sgPSBjYWxsYmFjaztcbiAgICAgICAgb3B0cy50YXNrID0gdGFzaztcblxuICAgICAgICBmdW5jdGlvbiB3cmFwcGVkVGFzayh3cmFwcGVkQ2FsbGJhY2ssIHdyYXBwZWRSZXN1bHRzKSB7XG4gICAgICAgICAgICBmdW5jdGlvbiByZXRyeUF0dGVtcHQodGFzaywgZmluYWxBdHRlbXB0KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKHNlcmllc0NhbGxiYWNrKSB7XG4gICAgICAgICAgICAgICAgICAgIHRhc2soZnVuY3Rpb24oZXJyLCByZXN1bHQpe1xuICAgICAgICAgICAgICAgICAgICAgICAgc2VyaWVzQ2FsbGJhY2soIWVyciB8fCBmaW5hbEF0dGVtcHQsIHtlcnI6IGVyciwgcmVzdWx0OiByZXN1bHR9KTtcbiAgICAgICAgICAgICAgICAgICAgfSwgd3JhcHBlZFJlc3VsdHMpO1xuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGZ1bmN0aW9uIHJldHJ5SW50ZXJ2YWwoaW50ZXJ2YWwpe1xuICAgICAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbihzZXJpZXNDYWxsYmFjayl7XG4gICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKXtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlcmllc0NhbGxiYWNrKG51bGwpO1xuICAgICAgICAgICAgICAgICAgICB9LCBpbnRlcnZhbCk7XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgd2hpbGUgKG9wdHMudGltZXMpIHtcblxuICAgICAgICAgICAgICAgIHZhciBmaW5hbEF0dGVtcHQgPSAhKG9wdHMudGltZXMtPTEpO1xuICAgICAgICAgICAgICAgIGF0dGVtcHRzLnB1c2gocmV0cnlBdHRlbXB0KG9wdHMudGFzaywgZmluYWxBdHRlbXB0KSk7XG4gICAgICAgICAgICAgICAgaWYoIWZpbmFsQXR0ZW1wdCAmJiBvcHRzLmludGVydmFsID4gMCl7XG4gICAgICAgICAgICAgICAgICAgIGF0dGVtcHRzLnB1c2gocmV0cnlJbnRlcnZhbChvcHRzLmludGVydmFsKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBhc3luYy5zZXJpZXMoYXR0ZW1wdHMsIGZ1bmN0aW9uKGRvbmUsIGRhdGEpe1xuICAgICAgICAgICAgICAgIGRhdGEgPSBkYXRhW2RhdGEubGVuZ3RoIC0gMV07XG4gICAgICAgICAgICAgICAgKHdyYXBwZWRDYWxsYmFjayB8fCBvcHRzLmNhbGxiYWNrKShkYXRhLmVyciwgZGF0YS5yZXN1bHQpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBJZiBhIGNhbGxiYWNrIGlzIHBhc3NlZCwgcnVuIHRoaXMgYXMgYSBjb250cm9sbCBmbG93XG4gICAgICAgIHJldHVybiBvcHRzLmNhbGxiYWNrID8gd3JhcHBlZFRhc2soKSA6IHdyYXBwZWRUYXNrO1xuICAgIH07XG5cbiAgICBhc3luYy53YXRlcmZhbGwgPSBmdW5jdGlvbiAodGFza3MsIGNhbGxiYWNrKSB7XG4gICAgICAgIGNhbGxiYWNrID0gX29uY2UoY2FsbGJhY2sgfHwgbm9vcCk7XG4gICAgICAgIGlmICghX2lzQXJyYXkodGFza3MpKSB7XG4gICAgICAgICAgICB2YXIgZXJyID0gbmV3IEVycm9yKCdGaXJzdCBhcmd1bWVudCB0byB3YXRlcmZhbGwgbXVzdCBiZSBhbiBhcnJheSBvZiBmdW5jdGlvbnMnKTtcbiAgICAgICAgICAgIHJldHVybiBjYWxsYmFjayhlcnIpO1xuICAgICAgICB9XG4gICAgICAgIGlmICghdGFza3MubGVuZ3RoKSB7XG4gICAgICAgICAgICByZXR1cm4gY2FsbGJhY2soKTtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiB3cmFwSXRlcmF0b3IoaXRlcmF0b3IpIHtcbiAgICAgICAgICAgIHJldHVybiBfcmVzdFBhcmFtKGZ1bmN0aW9uIChlcnIsIGFyZ3MpIHtcbiAgICAgICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrLmFwcGx5KG51bGwsIFtlcnJdLmNvbmNhdChhcmdzKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB2YXIgbmV4dCA9IGl0ZXJhdG9yLm5leHQoKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKG5leHQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3MucHVzaCh3cmFwSXRlcmF0b3IobmV4dCkpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgYXJncy5wdXNoKGNhbGxiYWNrKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbnN1cmVBc3luYyhpdGVyYXRvcikuYXBwbHkobnVsbCwgYXJncyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgd3JhcEl0ZXJhdG9yKGFzeW5jLml0ZXJhdG9yKHRhc2tzKSkoKTtcbiAgICB9O1xuXG4gICAgZnVuY3Rpb24gX3BhcmFsbGVsKGVhY2hmbiwgdGFza3MsIGNhbGxiYWNrKSB7XG4gICAgICAgIGNhbGxiYWNrID0gY2FsbGJhY2sgfHwgbm9vcDtcbiAgICAgICAgdmFyIHJlc3VsdHMgPSBfaXNBcnJheUxpa2UodGFza3MpID8gW10gOiB7fTtcblxuICAgICAgICBlYWNoZm4odGFza3MsIGZ1bmN0aW9uICh0YXNrLCBrZXksIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICB0YXNrKF9yZXN0UGFyYW0oZnVuY3Rpb24gKGVyciwgYXJncykge1xuICAgICAgICAgICAgICAgIGlmIChhcmdzLmxlbmd0aCA8PSAxKSB7XG4gICAgICAgICAgICAgICAgICAgIGFyZ3MgPSBhcmdzWzBdO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXN1bHRzW2tleV0gPSBhcmdzO1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgICB9KSk7XG4gICAgICAgIH0sIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgIGNhbGxiYWNrKGVyciwgcmVzdWx0cyk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGFzeW5jLnBhcmFsbGVsID0gZnVuY3Rpb24gKHRhc2tzLCBjYWxsYmFjaykge1xuICAgICAgICBfcGFyYWxsZWwoYXN5bmMuZWFjaE9mLCB0YXNrcywgY2FsbGJhY2spO1xuICAgIH07XG5cbiAgICBhc3luYy5wYXJhbGxlbExpbWl0ID0gZnVuY3Rpb24odGFza3MsIGxpbWl0LCBjYWxsYmFjaykge1xuICAgICAgICBfcGFyYWxsZWwoX2VhY2hPZkxpbWl0KGxpbWl0KSwgdGFza3MsIGNhbGxiYWNrKTtcbiAgICB9O1xuXG4gICAgYXN5bmMuc2VyaWVzID0gZnVuY3Rpb24odGFza3MsIGNhbGxiYWNrKSB7XG4gICAgICAgIF9wYXJhbGxlbChhc3luYy5lYWNoT2ZTZXJpZXMsIHRhc2tzLCBjYWxsYmFjayk7XG4gICAgfTtcblxuICAgIGFzeW5jLml0ZXJhdG9yID0gZnVuY3Rpb24gKHRhc2tzKSB7XG4gICAgICAgIGZ1bmN0aW9uIG1ha2VDYWxsYmFjayhpbmRleCkge1xuICAgICAgICAgICAgZnVuY3Rpb24gZm4oKSB7XG4gICAgICAgICAgICAgICAgaWYgKHRhc2tzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICB0YXNrc1tpbmRleF0uYXBwbHkobnVsbCwgYXJndW1lbnRzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZuLm5leHQoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZuLm5leHQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIChpbmRleCA8IHRhc2tzLmxlbmd0aCAtIDEpID8gbWFrZUNhbGxiYWNrKGluZGV4ICsgMSk6IG51bGw7XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgcmV0dXJuIGZuO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBtYWtlQ2FsbGJhY2soMCk7XG4gICAgfTtcblxuICAgIGFzeW5jLmFwcGx5ID0gX3Jlc3RQYXJhbShmdW5jdGlvbiAoZm4sIGFyZ3MpIHtcbiAgICAgICAgcmV0dXJuIF9yZXN0UGFyYW0oZnVuY3Rpb24gKGNhbGxBcmdzKSB7XG4gICAgICAgICAgICByZXR1cm4gZm4uYXBwbHkoXG4gICAgICAgICAgICAgICAgbnVsbCwgYXJncy5jb25jYXQoY2FsbEFyZ3MpXG4gICAgICAgICAgICApO1xuICAgICAgICB9KTtcbiAgICB9KTtcblxuICAgIGZ1bmN0aW9uIF9jb25jYXQoZWFjaGZuLCBhcnIsIGZuLCBjYWxsYmFjaykge1xuICAgICAgICB2YXIgcmVzdWx0ID0gW107XG4gICAgICAgIGVhY2hmbihhcnIsIGZ1bmN0aW9uICh4LCBpbmRleCwgY2IpIHtcbiAgICAgICAgICAgIGZuKHgsIGZ1bmN0aW9uIChlcnIsIHkpIHtcbiAgICAgICAgICAgICAgICByZXN1bHQgPSByZXN1bHQuY29uY2F0KHkgfHwgW10pO1xuICAgICAgICAgICAgICAgIGNiKGVycik7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSwgZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgY2FsbGJhY2soZXJyLCByZXN1bHQpO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgYXN5bmMuY29uY2F0ID0gZG9QYXJhbGxlbChfY29uY2F0KTtcbiAgICBhc3luYy5jb25jYXRTZXJpZXMgPSBkb1NlcmllcyhfY29uY2F0KTtcblxuICAgIGFzeW5jLndoaWxzdCA9IGZ1bmN0aW9uICh0ZXN0LCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgY2FsbGJhY2sgPSBjYWxsYmFjayB8fCBub29wO1xuICAgICAgICBpZiAodGVzdCgpKSB7XG4gICAgICAgICAgICB2YXIgbmV4dCA9IF9yZXN0UGFyYW0oZnVuY3Rpb24oZXJyLCBhcmdzKSB7XG4gICAgICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodGVzdC5hcHBseSh0aGlzLCBhcmdzKSkge1xuICAgICAgICAgICAgICAgICAgICBpdGVyYXRvcihuZXh0KTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhudWxsKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGl0ZXJhdG9yKG5leHQpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY2FsbGJhY2sobnVsbCk7XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgYXN5bmMuZG9XaGlsc3QgPSBmdW5jdGlvbiAoaXRlcmF0b3IsIHRlc3QsIGNhbGxiYWNrKSB7XG4gICAgICAgIHZhciBjYWxscyA9IDA7XG4gICAgICAgIHJldHVybiBhc3luYy53aGlsc3QoZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICByZXR1cm4gKytjYWxscyA8PSAxIHx8IHRlc3QuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICAgICAgfSwgaXRlcmF0b3IsIGNhbGxiYWNrKTtcbiAgICB9O1xuXG4gICAgYXN5bmMudW50aWwgPSBmdW5jdGlvbiAodGVzdCwgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgIHJldHVybiBhc3luYy53aGlsc3QoZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICByZXR1cm4gIXRlc3QuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICAgICAgfSwgaXRlcmF0b3IsIGNhbGxiYWNrKTtcbiAgICB9O1xuXG4gICAgYXN5bmMuZG9VbnRpbCA9IGZ1bmN0aW9uIChpdGVyYXRvciwgdGVzdCwgY2FsbGJhY2spIHtcbiAgICAgICAgcmV0dXJuIGFzeW5jLmRvV2hpbHN0KGl0ZXJhdG9yLCBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIHJldHVybiAhdGVzdC5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgICAgICB9LCBjYWxsYmFjayk7XG4gICAgfTtcblxuICAgIGFzeW5jLmR1cmluZyA9IGZ1bmN0aW9uICh0ZXN0LCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgY2FsbGJhY2sgPSBjYWxsYmFjayB8fCBub29wO1xuXG4gICAgICAgIHZhciBuZXh0ID0gX3Jlc3RQYXJhbShmdW5jdGlvbihlcnIsIGFyZ3MpIHtcbiAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBhcmdzLnB1c2goY2hlY2spO1xuICAgICAgICAgICAgICAgIHRlc3QuYXBwbHkodGhpcywgYXJncyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHZhciBjaGVjayA9IGZ1bmN0aW9uKGVyciwgdHJ1dGgpIHtcbiAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh0cnV0aCkge1xuICAgICAgICAgICAgICAgIGl0ZXJhdG9yKG5leHQpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBjYWxsYmFjayhudWxsKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcblxuICAgICAgICB0ZXN0KGNoZWNrKTtcbiAgICB9O1xuXG4gICAgYXN5bmMuZG9EdXJpbmcgPSBmdW5jdGlvbiAoaXRlcmF0b3IsIHRlc3QsIGNhbGxiYWNrKSB7XG4gICAgICAgIHZhciBjYWxscyA9IDA7XG4gICAgICAgIGFzeW5jLmR1cmluZyhmdW5jdGlvbihuZXh0KSB7XG4gICAgICAgICAgICBpZiAoY2FsbHMrKyA8IDEpIHtcbiAgICAgICAgICAgICAgICBuZXh0KG51bGwsIHRydWUpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0ZXN0LmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sIGl0ZXJhdG9yLCBjYWxsYmFjayk7XG4gICAgfTtcblxuICAgIGZ1bmN0aW9uIF9xdWV1ZSh3b3JrZXIsIGNvbmN1cnJlbmN5LCBwYXlsb2FkKSB7XG4gICAgICAgIGlmIChjb25jdXJyZW5jeSA9PSBudWxsKSB7XG4gICAgICAgICAgICBjb25jdXJyZW5jeSA9IDE7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZihjb25jdXJyZW5jeSA9PT0gMCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdDb25jdXJyZW5jeSBtdXN0IG5vdCBiZSB6ZXJvJyk7XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gX2luc2VydChxLCBkYXRhLCBwb3MsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICBpZiAoY2FsbGJhY2sgIT0gbnVsbCAmJiB0eXBlb2YgY2FsbGJhY2sgIT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcInRhc2sgY2FsbGJhY2sgbXVzdCBiZSBhIGZ1bmN0aW9uXCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcS5zdGFydGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIGlmICghX2lzQXJyYXkoZGF0YSkpIHtcbiAgICAgICAgICAgICAgICBkYXRhID0gW2RhdGFdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYoZGF0YS5sZW5ndGggPT09IDAgJiYgcS5pZGxlKCkpIHtcbiAgICAgICAgICAgICAgICAvLyBjYWxsIGRyYWluIGltbWVkaWF0ZWx5IGlmIHRoZXJlIGFyZSBubyB0YXNrc1xuICAgICAgICAgICAgICAgIHJldHVybiBhc3luYy5zZXRJbW1lZGlhdGUoZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgICAgIHEuZHJhaW4oKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIF9hcnJheUVhY2goZGF0YSwgZnVuY3Rpb24odGFzaykge1xuICAgICAgICAgICAgICAgIHZhciBpdGVtID0ge1xuICAgICAgICAgICAgICAgICAgICBkYXRhOiB0YXNrLFxuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjazogY2FsbGJhY2sgfHwgbm9vcFxuICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICBpZiAocG9zKSB7XG4gICAgICAgICAgICAgICAgICAgIHEudGFza3MudW5zaGlmdChpdGVtKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBxLnRhc2tzLnB1c2goaXRlbSk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKHEudGFza3MubGVuZ3RoID09PSBxLmNvbmN1cnJlbmN5KSB7XG4gICAgICAgICAgICAgICAgICAgIHEuc2F0dXJhdGVkKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBhc3luYy5zZXRJbW1lZGlhdGUocS5wcm9jZXNzKTtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBfbmV4dChxLCB0YXNrcykge1xuICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKCl7XG4gICAgICAgICAgICAgICAgd29ya2VycyAtPSAxO1xuXG4gICAgICAgICAgICAgICAgdmFyIHJlbW92ZWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB2YXIgYXJncyA9IGFyZ3VtZW50cztcbiAgICAgICAgICAgICAgICBfYXJyYXlFYWNoKHRhc2tzLCBmdW5jdGlvbiAodGFzaykge1xuICAgICAgICAgICAgICAgICAgICBfYXJyYXlFYWNoKHdvcmtlcnNMaXN0LCBmdW5jdGlvbiAod29ya2VyLCBpbmRleCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHdvcmtlciA9PT0gdGFzayAmJiAhcmVtb3ZlZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdvcmtlcnNMaXN0LnNwbGljZShpbmRleCwgMSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVtb3ZlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgICAgIHRhc2suY2FsbGJhY2suYXBwbHkodGFzaywgYXJncyk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgaWYgKHEudGFza3MubGVuZ3RoICsgd29ya2VycyA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICBxLmRyYWluKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHEucHJvY2VzcygpO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciB3b3JrZXJzID0gMDtcbiAgICAgICAgdmFyIHdvcmtlcnNMaXN0ID0gW107XG4gICAgICAgIHZhciBxID0ge1xuICAgICAgICAgICAgdGFza3M6IFtdLFxuICAgICAgICAgICAgY29uY3VycmVuY3k6IGNvbmN1cnJlbmN5LFxuICAgICAgICAgICAgcGF5bG9hZDogcGF5bG9hZCxcbiAgICAgICAgICAgIHNhdHVyYXRlZDogbm9vcCxcbiAgICAgICAgICAgIGVtcHR5OiBub29wLFxuICAgICAgICAgICAgZHJhaW46IG5vb3AsXG4gICAgICAgICAgICBzdGFydGVkOiBmYWxzZSxcbiAgICAgICAgICAgIHBhdXNlZDogZmFsc2UsXG4gICAgICAgICAgICBwdXNoOiBmdW5jdGlvbiAoZGF0YSwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgICAgICBfaW5zZXJ0KHEsIGRhdGEsIGZhbHNlLCBjYWxsYmFjayk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAga2lsbDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHEuZHJhaW4gPSBub29wO1xuICAgICAgICAgICAgICAgIHEudGFza3MgPSBbXTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB1bnNoaWZ0OiBmdW5jdGlvbiAoZGF0YSwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgICAgICBfaW5zZXJ0KHEsIGRhdGEsIHRydWUsIGNhbGxiYWNrKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBwcm9jZXNzOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgaWYgKCFxLnBhdXNlZCAmJiB3b3JrZXJzIDwgcS5jb25jdXJyZW5jeSAmJiBxLnRhc2tzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICB3aGlsZSh3b3JrZXJzIDwgcS5jb25jdXJyZW5jeSAmJiBxLnRhc2tzLmxlbmd0aCl7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgdGFza3MgPSBxLnBheWxvYWQgP1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHEudGFza3Muc3BsaWNlKDAsIHEucGF5bG9hZCkgOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHEudGFza3Muc3BsaWNlKDAsIHEudGFza3MubGVuZ3RoKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGRhdGEgPSBfbWFwKHRhc2tzLCBmdW5jdGlvbiAodGFzaykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0YXNrLmRhdGE7XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHEudGFza3MubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcS5lbXB0eSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgd29ya2VycyArPSAxO1xuICAgICAgICAgICAgICAgICAgICAgICAgd29ya2Vyc0xpc3QucHVzaCh0YXNrc1swXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgY2IgPSBvbmx5X29uY2UoX25leHQocSwgdGFza3MpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHdvcmtlcihkYXRhLCBjYik7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbGVuZ3RoOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHEudGFza3MubGVuZ3RoO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHJ1bm5pbmc6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gd29ya2VycztcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB3b3JrZXJzTGlzdDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB3b3JrZXJzTGlzdDtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBpZGxlOiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcS50YXNrcy5sZW5ndGggKyB3b3JrZXJzID09PSAwO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHBhdXNlOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgcS5wYXVzZWQgPSB0cnVlO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHJlc3VtZTogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGlmIChxLnBhdXNlZCA9PT0gZmFsc2UpIHsgcmV0dXJuOyB9XG4gICAgICAgICAgICAgICAgcS5wYXVzZWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB2YXIgcmVzdW1lQ291bnQgPSBNYXRoLm1pbihxLmNvbmN1cnJlbmN5LCBxLnRhc2tzLmxlbmd0aCk7XG4gICAgICAgICAgICAgICAgLy8gTmVlZCB0byBjYWxsIHEucHJvY2VzcyBvbmNlIHBlciBjb25jdXJyZW50XG4gICAgICAgICAgICAgICAgLy8gd29ya2VyIHRvIHByZXNlcnZlIGZ1bGwgY29uY3VycmVuY3kgYWZ0ZXIgcGF1c2VcbiAgICAgICAgICAgICAgICBmb3IgKHZhciB3ID0gMTsgdyA8PSByZXN1bWVDb3VudDsgdysrKSB7XG4gICAgICAgICAgICAgICAgICAgIGFzeW5jLnNldEltbWVkaWF0ZShxLnByb2Nlc3MpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIHE7XG4gICAgfVxuXG4gICAgYXN5bmMucXVldWUgPSBmdW5jdGlvbiAod29ya2VyLCBjb25jdXJyZW5jeSkge1xuICAgICAgICB2YXIgcSA9IF9xdWV1ZShmdW5jdGlvbiAoaXRlbXMsIGNiKSB7XG4gICAgICAgICAgICB3b3JrZXIoaXRlbXNbMF0sIGNiKTtcbiAgICAgICAgfSwgY29uY3VycmVuY3ksIDEpO1xuXG4gICAgICAgIHJldHVybiBxO1xuICAgIH07XG5cbiAgICBhc3luYy5wcmlvcml0eVF1ZXVlID0gZnVuY3Rpb24gKHdvcmtlciwgY29uY3VycmVuY3kpIHtcblxuICAgICAgICBmdW5jdGlvbiBfY29tcGFyZVRhc2tzKGEsIGIpe1xuICAgICAgICAgICAgcmV0dXJuIGEucHJpb3JpdHkgLSBiLnByaW9yaXR5O1xuICAgICAgICB9XG5cbiAgICAgICAgZnVuY3Rpb24gX2JpbmFyeVNlYXJjaChzZXF1ZW5jZSwgaXRlbSwgY29tcGFyZSkge1xuICAgICAgICAgICAgdmFyIGJlZyA9IC0xLFxuICAgICAgICAgICAgICAgIGVuZCA9IHNlcXVlbmNlLmxlbmd0aCAtIDE7XG4gICAgICAgICAgICB3aGlsZSAoYmVnIDwgZW5kKSB7XG4gICAgICAgICAgICAgICAgdmFyIG1pZCA9IGJlZyArICgoZW5kIC0gYmVnICsgMSkgPj4+IDEpO1xuICAgICAgICAgICAgICAgIGlmIChjb21wYXJlKGl0ZW0sIHNlcXVlbmNlW21pZF0pID49IDApIHtcbiAgICAgICAgICAgICAgICAgICAgYmVnID0gbWlkO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGVuZCA9IG1pZCAtIDE7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGJlZztcbiAgICAgICAgfVxuXG4gICAgICAgIGZ1bmN0aW9uIF9pbnNlcnQocSwgZGF0YSwgcHJpb3JpdHksIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICBpZiAoY2FsbGJhY2sgIT0gbnVsbCAmJiB0eXBlb2YgY2FsbGJhY2sgIT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcInRhc2sgY2FsbGJhY2sgbXVzdCBiZSBhIGZ1bmN0aW9uXCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcS5zdGFydGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIGlmICghX2lzQXJyYXkoZGF0YSkpIHtcbiAgICAgICAgICAgICAgICBkYXRhID0gW2RhdGFdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYoZGF0YS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgICAvLyBjYWxsIGRyYWluIGltbWVkaWF0ZWx5IGlmIHRoZXJlIGFyZSBubyB0YXNrc1xuICAgICAgICAgICAgICAgIHJldHVybiBhc3luYy5zZXRJbW1lZGlhdGUoZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgICAgIHEuZHJhaW4oKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIF9hcnJheUVhY2goZGF0YSwgZnVuY3Rpb24odGFzaykge1xuICAgICAgICAgICAgICAgIHZhciBpdGVtID0ge1xuICAgICAgICAgICAgICAgICAgICBkYXRhOiB0YXNrLFxuICAgICAgICAgICAgICAgICAgICBwcmlvcml0eTogcHJpb3JpdHksXG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrOiB0eXBlb2YgY2FsbGJhY2sgPT09ICdmdW5jdGlvbicgPyBjYWxsYmFjayA6IG5vb3BcbiAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgcS50YXNrcy5zcGxpY2UoX2JpbmFyeVNlYXJjaChxLnRhc2tzLCBpdGVtLCBfY29tcGFyZVRhc2tzKSArIDEsIDAsIGl0ZW0pO1xuXG4gICAgICAgICAgICAgICAgaWYgKHEudGFza3MubGVuZ3RoID09PSBxLmNvbmN1cnJlbmN5KSB7XG4gICAgICAgICAgICAgICAgICAgIHEuc2F0dXJhdGVkKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGFzeW5jLnNldEltbWVkaWF0ZShxLnByb2Nlc3MpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBTdGFydCB3aXRoIGEgbm9ybWFsIHF1ZXVlXG4gICAgICAgIHZhciBxID0gYXN5bmMucXVldWUod29ya2VyLCBjb25jdXJyZW5jeSk7XG5cbiAgICAgICAgLy8gT3ZlcnJpZGUgcHVzaCB0byBhY2NlcHQgc2Vjb25kIHBhcmFtZXRlciByZXByZXNlbnRpbmcgcHJpb3JpdHlcbiAgICAgICAgcS5wdXNoID0gZnVuY3Rpb24gKGRhdGEsIHByaW9yaXR5LCBjYWxsYmFjaykge1xuICAgICAgICAgICAgX2luc2VydChxLCBkYXRhLCBwcmlvcml0eSwgY2FsbGJhY2spO1xuICAgICAgICB9O1xuXG4gICAgICAgIC8vIFJlbW92ZSB1bnNoaWZ0IGZ1bmN0aW9uXG4gICAgICAgIGRlbGV0ZSBxLnVuc2hpZnQ7XG5cbiAgICAgICAgcmV0dXJuIHE7XG4gICAgfTtcblxuICAgIGFzeW5jLmNhcmdvID0gZnVuY3Rpb24gKHdvcmtlciwgcGF5bG9hZCkge1xuICAgICAgICByZXR1cm4gX3F1ZXVlKHdvcmtlciwgMSwgcGF5bG9hZCk7XG4gICAgfTtcblxuICAgIGZ1bmN0aW9uIF9jb25zb2xlX2ZuKG5hbWUpIHtcbiAgICAgICAgcmV0dXJuIF9yZXN0UGFyYW0oZnVuY3Rpb24gKGZuLCBhcmdzKSB7XG4gICAgICAgICAgICBmbi5hcHBseShudWxsLCBhcmdzLmNvbmNhdChbX3Jlc3RQYXJhbShmdW5jdGlvbiAoZXJyLCBhcmdzKSB7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBjb25zb2xlID09PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoY29uc29sZS5lcnJvcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChjb25zb2xlW25hbWVdKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBfYXJyYXlFYWNoKGFyZ3MsIGZ1bmN0aW9uICh4KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZVtuYW1lXSh4KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSldKSk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBhc3luYy5sb2cgPSBfY29uc29sZV9mbignbG9nJyk7XG4gICAgYXN5bmMuZGlyID0gX2NvbnNvbGVfZm4oJ2RpcicpO1xuICAgIC8qYXN5bmMuaW5mbyA9IF9jb25zb2xlX2ZuKCdpbmZvJyk7XG4gICAgYXN5bmMud2FybiA9IF9jb25zb2xlX2ZuKCd3YXJuJyk7XG4gICAgYXN5bmMuZXJyb3IgPSBfY29uc29sZV9mbignZXJyb3InKTsqL1xuXG4gICAgYXN5bmMubWVtb2l6ZSA9IGZ1bmN0aW9uIChmbiwgaGFzaGVyKSB7XG4gICAgICAgIHZhciBtZW1vID0ge307XG4gICAgICAgIHZhciBxdWV1ZXMgPSB7fTtcbiAgICAgICAgaGFzaGVyID0gaGFzaGVyIHx8IGlkZW50aXR5O1xuICAgICAgICB2YXIgbWVtb2l6ZWQgPSBfcmVzdFBhcmFtKGZ1bmN0aW9uIG1lbW9pemVkKGFyZ3MpIHtcbiAgICAgICAgICAgIHZhciBjYWxsYmFjayA9IGFyZ3MucG9wKCk7XG4gICAgICAgICAgICB2YXIga2V5ID0gaGFzaGVyLmFwcGx5KG51bGwsIGFyZ3MpO1xuICAgICAgICAgICAgaWYgKGtleSBpbiBtZW1vKSB7XG4gICAgICAgICAgICAgICAgYXN5bmMuc2V0SW1tZWRpYXRlKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2suYXBwbHkobnVsbCwgbWVtb1trZXldKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGtleSBpbiBxdWV1ZXMpIHtcbiAgICAgICAgICAgICAgICBxdWV1ZXNba2V5XS5wdXNoKGNhbGxiYWNrKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHF1ZXVlc1trZXldID0gW2NhbGxiYWNrXTtcbiAgICAgICAgICAgICAgICBmbi5hcHBseShudWxsLCBhcmdzLmNvbmNhdChbX3Jlc3RQYXJhbShmdW5jdGlvbiAoYXJncykge1xuICAgICAgICAgICAgICAgICAgICBtZW1vW2tleV0gPSBhcmdzO1xuICAgICAgICAgICAgICAgICAgICB2YXIgcSA9IHF1ZXVlc1trZXldO1xuICAgICAgICAgICAgICAgICAgICBkZWxldGUgcXVldWVzW2tleV07XG4gICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwLCBsID0gcS5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHFbaV0uYXBwbHkobnVsbCwgYXJncyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KV0pKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIG1lbW9pemVkLm1lbW8gPSBtZW1vO1xuICAgICAgICBtZW1vaXplZC51bm1lbW9pemVkID0gZm47XG4gICAgICAgIHJldHVybiBtZW1vaXplZDtcbiAgICB9O1xuXG4gICAgYXN5bmMudW5tZW1vaXplID0gZnVuY3Rpb24gKGZuKSB7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gKGZuLnVubWVtb2l6ZWQgfHwgZm4pLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7XG4gICAgICAgIH07XG4gICAgfTtcblxuICAgIGZ1bmN0aW9uIF90aW1lcyhtYXBwZXIpIHtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChjb3VudCwgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICBtYXBwZXIoX3JhbmdlKGNvdW50KSwgaXRlcmF0b3IsIGNhbGxiYWNrKTtcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBhc3luYy50aW1lcyA9IF90aW1lcyhhc3luYy5tYXApO1xuICAgIGFzeW5jLnRpbWVzU2VyaWVzID0gX3RpbWVzKGFzeW5jLm1hcFNlcmllcyk7XG4gICAgYXN5bmMudGltZXNMaW1pdCA9IGZ1bmN0aW9uIChjb3VudCwgbGltaXQsIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICByZXR1cm4gYXN5bmMubWFwTGltaXQoX3JhbmdlKGNvdW50KSwgbGltaXQsIGl0ZXJhdG9yLCBjYWxsYmFjayk7XG4gICAgfTtcblxuICAgIGFzeW5jLnNlcSA9IGZ1bmN0aW9uICgvKiBmdW5jdGlvbnMuLi4gKi8pIHtcbiAgICAgICAgdmFyIGZucyA9IGFyZ3VtZW50cztcbiAgICAgICAgcmV0dXJuIF9yZXN0UGFyYW0oZnVuY3Rpb24gKGFyZ3MpIHtcbiAgICAgICAgICAgIHZhciB0aGF0ID0gdGhpcztcblxuICAgICAgICAgICAgdmFyIGNhbGxiYWNrID0gYXJnc1thcmdzLmxlbmd0aCAtIDFdO1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBjYWxsYmFjayA9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgYXJncy5wb3AoKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2sgPSBub29wO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBhc3luYy5yZWR1Y2UoZm5zLCBhcmdzLCBmdW5jdGlvbiAobmV3YXJncywgZm4sIGNiKSB7XG4gICAgICAgICAgICAgICAgZm4uYXBwbHkodGhhdCwgbmV3YXJncy5jb25jYXQoW19yZXN0UGFyYW0oZnVuY3Rpb24gKGVyciwgbmV4dGFyZ3MpIHtcbiAgICAgICAgICAgICAgICAgICAgY2IoZXJyLCBuZXh0YXJncyk7XG4gICAgICAgICAgICAgICAgfSldKSk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZnVuY3Rpb24gKGVyciwgcmVzdWx0cykge1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrLmFwcGx5KHRoYXQsIFtlcnJdLmNvbmNhdChyZXN1bHRzKSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfTtcblxuICAgIGFzeW5jLmNvbXBvc2UgPSBmdW5jdGlvbiAoLyogZnVuY3Rpb25zLi4uICovKSB7XG4gICAgICAgIHJldHVybiBhc3luYy5zZXEuYXBwbHkobnVsbCwgQXJyYXkucHJvdG90eXBlLnJldmVyc2UuY2FsbChhcmd1bWVudHMpKTtcbiAgICB9O1xuXG5cbiAgICBmdW5jdGlvbiBfYXBwbHlFYWNoKGVhY2hmbikge1xuICAgICAgICByZXR1cm4gX3Jlc3RQYXJhbShmdW5jdGlvbihmbnMsIGFyZ3MpIHtcbiAgICAgICAgICAgIHZhciBnbyA9IF9yZXN0UGFyYW0oZnVuY3Rpb24oYXJncykge1xuICAgICAgICAgICAgICAgIHZhciB0aGF0ID0gdGhpcztcbiAgICAgICAgICAgICAgICB2YXIgY2FsbGJhY2sgPSBhcmdzLnBvcCgpO1xuICAgICAgICAgICAgICAgIHJldHVybiBlYWNoZm4oZm5zLCBmdW5jdGlvbiAoZm4sIF8sIGNiKSB7XG4gICAgICAgICAgICAgICAgICAgIGZuLmFwcGx5KHRoYXQsIGFyZ3MuY29uY2F0KFtjYl0pKTtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIGNhbGxiYWNrKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgaWYgKGFyZ3MubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGdvLmFwcGx5KHRoaXMsIGFyZ3MpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGdvO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBhc3luYy5hcHBseUVhY2ggPSBfYXBwbHlFYWNoKGFzeW5jLmVhY2hPZik7XG4gICAgYXN5bmMuYXBwbHlFYWNoU2VyaWVzID0gX2FwcGx5RWFjaChhc3luYy5lYWNoT2ZTZXJpZXMpO1xuXG5cbiAgICBhc3luYy5mb3JldmVyID0gZnVuY3Rpb24gKGZuLCBjYWxsYmFjaykge1xuICAgICAgICB2YXIgZG9uZSA9IG9ubHlfb25jZShjYWxsYmFjayB8fCBub29wKTtcbiAgICAgICAgdmFyIHRhc2sgPSBlbnN1cmVBc3luYyhmbik7XG4gICAgICAgIGZ1bmN0aW9uIG5leHQoZXJyKSB7XG4gICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGRvbmUoZXJyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRhc2sobmV4dCk7XG4gICAgICAgIH1cbiAgICAgICAgbmV4dCgpO1xuICAgIH07XG5cbiAgICBmdW5jdGlvbiBlbnN1cmVBc3luYyhmbikge1xuICAgICAgICByZXR1cm4gX3Jlc3RQYXJhbShmdW5jdGlvbiAoYXJncykge1xuICAgICAgICAgICAgdmFyIGNhbGxiYWNrID0gYXJncy5wb3AoKTtcbiAgICAgICAgICAgIGFyZ3MucHVzaChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgdmFyIGlubmVyQXJncyA9IGFyZ3VtZW50cztcbiAgICAgICAgICAgICAgICBpZiAoc3luYykge1xuICAgICAgICAgICAgICAgICAgICBhc3luYy5zZXRJbW1lZGlhdGUoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2suYXBwbHkobnVsbCwgaW5uZXJBcmdzKTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2suYXBwbHkobnVsbCwgaW5uZXJBcmdzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHZhciBzeW5jID0gdHJ1ZTtcbiAgICAgICAgICAgIGZuLmFwcGx5KHRoaXMsIGFyZ3MpO1xuICAgICAgICAgICAgc3luYyA9IGZhbHNlO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBhc3luYy5lbnN1cmVBc3luYyA9IGVuc3VyZUFzeW5jO1xuXG4gICAgYXN5bmMuY29uc3RhbnQgPSBfcmVzdFBhcmFtKGZ1bmN0aW9uKHZhbHVlcykge1xuICAgICAgICB2YXIgYXJncyA9IFtudWxsXS5jb25jYXQodmFsdWVzKTtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChjYWxsYmFjaykge1xuICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrLmFwcGx5KHRoaXMsIGFyZ3MpO1xuICAgICAgICB9O1xuICAgIH0pO1xuXG4gICAgYXN5bmMud3JhcFN5bmMgPVxuICAgIGFzeW5jLmFzeW5jaWZ5ID0gZnVuY3Rpb24gYXN5bmNpZnkoZnVuYykge1xuICAgICAgICByZXR1cm4gX3Jlc3RQYXJhbShmdW5jdGlvbiAoYXJncykge1xuICAgICAgICAgICAgdmFyIGNhbGxiYWNrID0gYXJncy5wb3AoKTtcbiAgICAgICAgICAgIHZhciByZXN1bHQ7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIHJlc3VsdCA9IGZ1bmMuYXBwbHkodGhpcywgYXJncyk7XG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gaWYgcmVzdWx0IGlzIFByb21pc2Ugb2JqZWN0XG4gICAgICAgICAgICBpZiAoX2lzT2JqZWN0KHJlc3VsdCkgJiYgdHlwZW9mIHJlc3VsdC50aGVuID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgICAgICAgICByZXN1bHQudGhlbihmdW5jdGlvbih2YWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhudWxsLCB2YWx1ZSk7XG4gICAgICAgICAgICAgICAgfSlbXCJjYXRjaFwiXShmdW5jdGlvbihlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soZXJyLm1lc3NhZ2UgPyBlcnIgOiBuZXcgRXJyb3IoZXJyKSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrKG51bGwsIHJlc3VsdCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH07XG5cbiAgICAvLyBOb2RlLmpzXG4gICAgaWYgKHR5cGVvZiBtb2R1bGUgPT09ICdvYmplY3QnICYmIG1vZHVsZS5leHBvcnRzKSB7XG4gICAgICAgIG1vZHVsZS5leHBvcnRzID0gYXN5bmM7XG4gICAgfVxuICAgIC8vIEFNRCAvIFJlcXVpcmVKU1xuICAgIGVsc2UgaWYgKHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCkge1xuICAgICAgICBkZWZpbmUoW10sIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiBhc3luYztcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8vIGluY2x1ZGVkIGRpcmVjdGx5IHZpYSA8c2NyaXB0PiB0YWdcbiAgICBlbHNlIHtcbiAgICAgICAgcm9vdC5hc3luYyA9IGFzeW5jO1xuICAgIH1cblxufSgpKTtcbiIsIi8vIENvcHlyaWdodCBKb3llbnQsIEluYy4gYW5kIG90aGVyIE5vZGUgY29udHJpYnV0b3JzLlxuLy9cbi8vIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhXG4vLyBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlXG4vLyBcIlNvZnR3YXJlXCIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmdcbi8vIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCxcbi8vIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXRcbi8vIHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZVxuLy8gZm9sbG93aW5nIGNvbmRpdGlvbnM6XG4vL1xuLy8gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWRcbi8vIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuLy9cbi8vIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1Ncbi8vIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0Zcbi8vIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU5cbi8vIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLFxuLy8gREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SXG4vLyBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFXG4vLyBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLlxuXG4vLyByZXNvbHZlcyAuIGFuZCAuLiBlbGVtZW50cyBpbiBhIHBhdGggYXJyYXkgd2l0aCBkaXJlY3RvcnkgbmFtZXMgdGhlcmVcbi8vIG11c3QgYmUgbm8gc2xhc2hlcywgZW1wdHkgZWxlbWVudHMsIG9yIGRldmljZSBuYW1lcyAoYzpcXCkgaW4gdGhlIGFycmF5XG4vLyAoc28gYWxzbyBubyBsZWFkaW5nIGFuZCB0cmFpbGluZyBzbGFzaGVzIC0gaXQgZG9lcyBub3QgZGlzdGluZ3Vpc2hcbi8vIHJlbGF0aXZlIGFuZCBhYnNvbHV0ZSBwYXRocylcbmZ1bmN0aW9uIG5vcm1hbGl6ZUFycmF5KHBhcnRzLCBhbGxvd0Fib3ZlUm9vdCkge1xuICAvLyBpZiB0aGUgcGF0aCB0cmllcyB0byBnbyBhYm92ZSB0aGUgcm9vdCwgYHVwYCBlbmRzIHVwID4gMFxuICB2YXIgdXAgPSAwO1xuICBmb3IgKHZhciBpID0gcGFydHMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICB2YXIgbGFzdCA9IHBhcnRzW2ldO1xuICAgIGlmIChsYXN0ID09PSAnLicpIHtcbiAgICAgIHBhcnRzLnNwbGljZShpLCAxKTtcbiAgICB9IGVsc2UgaWYgKGxhc3QgPT09ICcuLicpIHtcbiAgICAgIHBhcnRzLnNwbGljZShpLCAxKTtcbiAgICAgIHVwKys7XG4gICAgfSBlbHNlIGlmICh1cCkge1xuICAgICAgcGFydHMuc3BsaWNlKGksIDEpO1xuICAgICAgdXAtLTtcbiAgICB9XG4gIH1cblxuICAvLyBpZiB0aGUgcGF0aCBpcyBhbGxvd2VkIHRvIGdvIGFib3ZlIHRoZSByb290LCByZXN0b3JlIGxlYWRpbmcgLi5zXG4gIGlmIChhbGxvd0Fib3ZlUm9vdCkge1xuICAgIGZvciAoOyB1cC0tOyB1cCkge1xuICAgICAgcGFydHMudW5zaGlmdCgnLi4nKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gcGFydHM7XG59XG5cbi8vIFNwbGl0IGEgZmlsZW5hbWUgaW50byBbcm9vdCwgZGlyLCBiYXNlbmFtZSwgZXh0XSwgdW5peCB2ZXJzaW9uXG4vLyAncm9vdCcgaXMganVzdCBhIHNsYXNoLCBvciBub3RoaW5nLlxudmFyIHNwbGl0UGF0aFJlID1cbiAgICAvXihcXC8/fCkoW1xcc1xcU10qPykoKD86XFwuezEsMn18W15cXC9dKz98KShcXC5bXi5cXC9dKnwpKSg/OltcXC9dKikkLztcbnZhciBzcGxpdFBhdGggPSBmdW5jdGlvbihmaWxlbmFtZSkge1xuICByZXR1cm4gc3BsaXRQYXRoUmUuZXhlYyhmaWxlbmFtZSkuc2xpY2UoMSk7XG59O1xuXG4vLyBwYXRoLnJlc29sdmUoW2Zyb20gLi4uXSwgdG8pXG4vLyBwb3NpeCB2ZXJzaW9uXG5leHBvcnRzLnJlc29sdmUgPSBmdW5jdGlvbigpIHtcbiAgdmFyIHJlc29sdmVkUGF0aCA9ICcnLFxuICAgICAgcmVzb2x2ZWRBYnNvbHV0ZSA9IGZhbHNlO1xuXG4gIGZvciAodmFyIGkgPSBhcmd1bWVudHMubGVuZ3RoIC0gMTsgaSA+PSAtMSAmJiAhcmVzb2x2ZWRBYnNvbHV0ZTsgaS0tKSB7XG4gICAgdmFyIHBhdGggPSAoaSA+PSAwKSA/IGFyZ3VtZW50c1tpXSA6IHByb2Nlc3MuY3dkKCk7XG5cbiAgICAvLyBTa2lwIGVtcHR5IGFuZCBpbnZhbGlkIGVudHJpZXNcbiAgICBpZiAodHlwZW9mIHBhdGggIT09ICdzdHJpbmcnKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdBcmd1bWVudHMgdG8gcGF0aC5yZXNvbHZlIG11c3QgYmUgc3RyaW5ncycpO1xuICAgIH0gZWxzZSBpZiAoIXBhdGgpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIHJlc29sdmVkUGF0aCA9IHBhdGggKyAnLycgKyByZXNvbHZlZFBhdGg7XG4gICAgcmVzb2x2ZWRBYnNvbHV0ZSA9IHBhdGguY2hhckF0KDApID09PSAnLyc7XG4gIH1cblxuICAvLyBBdCB0aGlzIHBvaW50IHRoZSBwYXRoIHNob3VsZCBiZSByZXNvbHZlZCB0byBhIGZ1bGwgYWJzb2x1dGUgcGF0aCwgYnV0XG4gIC8vIGhhbmRsZSByZWxhdGl2ZSBwYXRocyB0byBiZSBzYWZlIChtaWdodCBoYXBwZW4gd2hlbiBwcm9jZXNzLmN3ZCgpIGZhaWxzKVxuXG4gIC8vIE5vcm1hbGl6ZSB0aGUgcGF0aFxuICByZXNvbHZlZFBhdGggPSBub3JtYWxpemVBcnJheShmaWx0ZXIocmVzb2x2ZWRQYXRoLnNwbGl0KCcvJyksIGZ1bmN0aW9uKHApIHtcbiAgICByZXR1cm4gISFwO1xuICB9KSwgIXJlc29sdmVkQWJzb2x1dGUpLmpvaW4oJy8nKTtcblxuICByZXR1cm4gKChyZXNvbHZlZEFic29sdXRlID8gJy8nIDogJycpICsgcmVzb2x2ZWRQYXRoKSB8fCAnLic7XG59O1xuXG4vLyBwYXRoLm5vcm1hbGl6ZShwYXRoKVxuLy8gcG9zaXggdmVyc2lvblxuZXhwb3J0cy5ub3JtYWxpemUgPSBmdW5jdGlvbihwYXRoKSB7XG4gIHZhciBpc0Fic29sdXRlID0gZXhwb3J0cy5pc0Fic29sdXRlKHBhdGgpLFxuICAgICAgdHJhaWxpbmdTbGFzaCA9IHN1YnN0cihwYXRoLCAtMSkgPT09ICcvJztcblxuICAvLyBOb3JtYWxpemUgdGhlIHBhdGhcbiAgcGF0aCA9IG5vcm1hbGl6ZUFycmF5KGZpbHRlcihwYXRoLnNwbGl0KCcvJyksIGZ1bmN0aW9uKHApIHtcbiAgICByZXR1cm4gISFwO1xuICB9KSwgIWlzQWJzb2x1dGUpLmpvaW4oJy8nKTtcblxuICBpZiAoIXBhdGggJiYgIWlzQWJzb2x1dGUpIHtcbiAgICBwYXRoID0gJy4nO1xuICB9XG4gIGlmIChwYXRoICYmIHRyYWlsaW5nU2xhc2gpIHtcbiAgICBwYXRoICs9ICcvJztcbiAgfVxuXG4gIHJldHVybiAoaXNBYnNvbHV0ZSA/ICcvJyA6ICcnKSArIHBhdGg7XG59O1xuXG4vLyBwb3NpeCB2ZXJzaW9uXG5leHBvcnRzLmlzQWJzb2x1dGUgPSBmdW5jdGlvbihwYXRoKSB7XG4gIHJldHVybiBwYXRoLmNoYXJBdCgwKSA9PT0gJy8nO1xufTtcblxuLy8gcG9zaXggdmVyc2lvblxuZXhwb3J0cy5qb2luID0gZnVuY3Rpb24oKSB7XG4gIHZhciBwYXRocyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMCk7XG4gIHJldHVybiBleHBvcnRzLm5vcm1hbGl6ZShmaWx0ZXIocGF0aHMsIGZ1bmN0aW9uKHAsIGluZGV4KSB7XG4gICAgaWYgKHR5cGVvZiBwICE9PSAnc3RyaW5nJykge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignQXJndW1lbnRzIHRvIHBhdGguam9pbiBtdXN0IGJlIHN0cmluZ3MnKTtcbiAgICB9XG4gICAgcmV0dXJuIHA7XG4gIH0pLmpvaW4oJy8nKSk7XG59O1xuXG5cbi8vIHBhdGgucmVsYXRpdmUoZnJvbSwgdG8pXG4vLyBwb3NpeCB2ZXJzaW9uXG5leHBvcnRzLnJlbGF0aXZlID0gZnVuY3Rpb24oZnJvbSwgdG8pIHtcbiAgZnJvbSA9IGV4cG9ydHMucmVzb2x2ZShmcm9tKS5zdWJzdHIoMSk7XG4gIHRvID0gZXhwb3J0cy5yZXNvbHZlKHRvKS5zdWJzdHIoMSk7XG5cbiAgZnVuY3Rpb24gdHJpbShhcnIpIHtcbiAgICB2YXIgc3RhcnQgPSAwO1xuICAgIGZvciAoOyBzdGFydCA8IGFyci5sZW5ndGg7IHN0YXJ0KyspIHtcbiAgICAgIGlmIChhcnJbc3RhcnRdICE9PSAnJykgYnJlYWs7XG4gICAgfVxuXG4gICAgdmFyIGVuZCA9IGFyci5sZW5ndGggLSAxO1xuICAgIGZvciAoOyBlbmQgPj0gMDsgZW5kLS0pIHtcbiAgICAgIGlmIChhcnJbZW5kXSAhPT0gJycpIGJyZWFrO1xuICAgIH1cblxuICAgIGlmIChzdGFydCA+IGVuZCkgcmV0dXJuIFtdO1xuICAgIHJldHVybiBhcnIuc2xpY2Uoc3RhcnQsIGVuZCAtIHN0YXJ0ICsgMSk7XG4gIH1cblxuICB2YXIgZnJvbVBhcnRzID0gdHJpbShmcm9tLnNwbGl0KCcvJykpO1xuICB2YXIgdG9QYXJ0cyA9IHRyaW0odG8uc3BsaXQoJy8nKSk7XG5cbiAgdmFyIGxlbmd0aCA9IE1hdGgubWluKGZyb21QYXJ0cy5sZW5ndGgsIHRvUGFydHMubGVuZ3RoKTtcbiAgdmFyIHNhbWVQYXJ0c0xlbmd0aCA9IGxlbmd0aDtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgIGlmIChmcm9tUGFydHNbaV0gIT09IHRvUGFydHNbaV0pIHtcbiAgICAgIHNhbWVQYXJ0c0xlbmd0aCA9IGk7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICB2YXIgb3V0cHV0UGFydHMgPSBbXTtcbiAgZm9yICh2YXIgaSA9IHNhbWVQYXJ0c0xlbmd0aDsgaSA8IGZyb21QYXJ0cy5sZW5ndGg7IGkrKykge1xuICAgIG91dHB1dFBhcnRzLnB1c2goJy4uJyk7XG4gIH1cblxuICBvdXRwdXRQYXJ0cyA9IG91dHB1dFBhcnRzLmNvbmNhdCh0b1BhcnRzLnNsaWNlKHNhbWVQYXJ0c0xlbmd0aCkpO1xuXG4gIHJldHVybiBvdXRwdXRQYXJ0cy5qb2luKCcvJyk7XG59O1xuXG5leHBvcnRzLnNlcCA9ICcvJztcbmV4cG9ydHMuZGVsaW1pdGVyID0gJzonO1xuXG5leHBvcnRzLmRpcm5hbWUgPSBmdW5jdGlvbihwYXRoKSB7XG4gIHZhciByZXN1bHQgPSBzcGxpdFBhdGgocGF0aCksXG4gICAgICByb290ID0gcmVzdWx0WzBdLFxuICAgICAgZGlyID0gcmVzdWx0WzFdO1xuXG4gIGlmICghcm9vdCAmJiAhZGlyKSB7XG4gICAgLy8gTm8gZGlybmFtZSB3aGF0c29ldmVyXG4gICAgcmV0dXJuICcuJztcbiAgfVxuXG4gIGlmIChkaXIpIHtcbiAgICAvLyBJdCBoYXMgYSBkaXJuYW1lLCBzdHJpcCB0cmFpbGluZyBzbGFzaFxuICAgIGRpciA9IGRpci5zdWJzdHIoMCwgZGlyLmxlbmd0aCAtIDEpO1xuICB9XG5cbiAgcmV0dXJuIHJvb3QgKyBkaXI7XG59O1xuXG5cbmV4cG9ydHMuYmFzZW5hbWUgPSBmdW5jdGlvbihwYXRoLCBleHQpIHtcbiAgdmFyIGYgPSBzcGxpdFBhdGgocGF0aClbMl07XG4gIC8vIFRPRE86IG1ha2UgdGhpcyBjb21wYXJpc29uIGNhc2UtaW5zZW5zaXRpdmUgb24gd2luZG93cz9cbiAgaWYgKGV4dCAmJiBmLnN1YnN0cigtMSAqIGV4dC5sZW5ndGgpID09PSBleHQpIHtcbiAgICBmID0gZi5zdWJzdHIoMCwgZi5sZW5ndGggLSBleHQubGVuZ3RoKTtcbiAgfVxuICByZXR1cm4gZjtcbn07XG5cblxuZXhwb3J0cy5leHRuYW1lID0gZnVuY3Rpb24ocGF0aCkge1xuICByZXR1cm4gc3BsaXRQYXRoKHBhdGgpWzNdO1xufTtcblxuZnVuY3Rpb24gZmlsdGVyICh4cywgZikge1xuICAgIGlmICh4cy5maWx0ZXIpIHJldHVybiB4cy5maWx0ZXIoZik7XG4gICAgdmFyIHJlcyA9IFtdO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgeHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgaWYgKGYoeHNbaV0sIGksIHhzKSkgcmVzLnB1c2goeHNbaV0pO1xuICAgIH1cbiAgICByZXR1cm4gcmVzO1xufVxuXG4vLyBTdHJpbmcucHJvdG90eXBlLnN1YnN0ciAtIG5lZ2F0aXZlIGluZGV4IGRvbid0IHdvcmsgaW4gSUU4XG52YXIgc3Vic3RyID0gJ2FiJy5zdWJzdHIoLTEpID09PSAnYidcbiAgICA/IGZ1bmN0aW9uIChzdHIsIHN0YXJ0LCBsZW4pIHsgcmV0dXJuIHN0ci5zdWJzdHIoc3RhcnQsIGxlbikgfVxuICAgIDogZnVuY3Rpb24gKHN0ciwgc3RhcnQsIGxlbikge1xuICAgICAgICBpZiAoc3RhcnQgPCAwKSBzdGFydCA9IHN0ci5sZW5ndGggKyBzdGFydDtcbiAgICAgICAgcmV0dXJuIHN0ci5zdWJzdHIoc3RhcnQsIGxlbik7XG4gICAgfVxuO1xuIiwiLy8gc2hpbSBmb3IgdXNpbmcgcHJvY2VzcyBpbiBicm93c2VyXG5cbnZhciBwcm9jZXNzID0gbW9kdWxlLmV4cG9ydHMgPSB7fTtcbnZhciBxdWV1ZSA9IFtdO1xudmFyIGRyYWluaW5nID0gZmFsc2U7XG52YXIgY3VycmVudFF1ZXVlO1xudmFyIHF1ZXVlSW5kZXggPSAtMTtcblxuZnVuY3Rpb24gY2xlYW5VcE5leHRUaWNrKCkge1xuICAgIGRyYWluaW5nID0gZmFsc2U7XG4gICAgaWYgKGN1cnJlbnRRdWV1ZS5sZW5ndGgpIHtcbiAgICAgICAgcXVldWUgPSBjdXJyZW50UXVldWUuY29uY2F0KHF1ZXVlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICBxdWV1ZUluZGV4ID0gLTE7XG4gICAgfVxuICAgIGlmIChxdWV1ZS5sZW5ndGgpIHtcbiAgICAgICAgZHJhaW5RdWV1ZSgpO1xuICAgIH1cbn1cblxuZnVuY3Rpb24gZHJhaW5RdWV1ZSgpIHtcbiAgICBpZiAoZHJhaW5pbmcpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB2YXIgdGltZW91dCA9IHNldFRpbWVvdXQoY2xlYW5VcE5leHRUaWNrKTtcbiAgICBkcmFpbmluZyA9IHRydWU7XG5cbiAgICB2YXIgbGVuID0gcXVldWUubGVuZ3RoO1xuICAgIHdoaWxlKGxlbikge1xuICAgICAgICBjdXJyZW50UXVldWUgPSBxdWV1ZTtcbiAgICAgICAgcXVldWUgPSBbXTtcbiAgICAgICAgd2hpbGUgKCsrcXVldWVJbmRleCA8IGxlbikge1xuICAgICAgICAgICAgaWYgKGN1cnJlbnRRdWV1ZSkge1xuICAgICAgICAgICAgICAgIGN1cnJlbnRRdWV1ZVtxdWV1ZUluZGV4XS5ydW4oKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBxdWV1ZUluZGV4ID0gLTE7XG4gICAgICAgIGxlbiA9IHF1ZXVlLmxlbmd0aDtcbiAgICB9XG4gICAgY3VycmVudFF1ZXVlID0gbnVsbDtcbiAgICBkcmFpbmluZyA9IGZhbHNlO1xuICAgIGNsZWFyVGltZW91dCh0aW1lb3V0KTtcbn1cblxucHJvY2Vzcy5uZXh0VGljayA9IGZ1bmN0aW9uIChmdW4pIHtcbiAgICB2YXIgYXJncyA9IG5ldyBBcnJheShhcmd1bWVudHMubGVuZ3RoIC0gMSk7XG4gICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPiAxKSB7XG4gICAgICAgIGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBhcmdzW2kgLSAxXSA9IGFyZ3VtZW50c1tpXTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBxdWV1ZS5wdXNoKG5ldyBJdGVtKGZ1biwgYXJncykpO1xuICAgIGlmIChxdWV1ZS5sZW5ndGggPT09IDEgJiYgIWRyYWluaW5nKSB7XG4gICAgICAgIHNldFRpbWVvdXQoZHJhaW5RdWV1ZSwgMCk7XG4gICAgfVxufTtcblxuLy8gdjggbGlrZXMgcHJlZGljdGlibGUgb2JqZWN0c1xuZnVuY3Rpb24gSXRlbShmdW4sIGFycmF5KSB7XG4gICAgdGhpcy5mdW4gPSBmdW47XG4gICAgdGhpcy5hcnJheSA9IGFycmF5O1xufVxuSXRlbS5wcm90b3R5cGUucnVuID0gZnVuY3Rpb24gKCkge1xuICAgIHRoaXMuZnVuLmFwcGx5KG51bGwsIHRoaXMuYXJyYXkpO1xufTtcbnByb2Nlc3MudGl0bGUgPSAnYnJvd3Nlcic7XG5wcm9jZXNzLmJyb3dzZXIgPSB0cnVlO1xucHJvY2Vzcy5lbnYgPSB7fTtcbnByb2Nlc3MuYXJndiA9IFtdO1xucHJvY2Vzcy52ZXJzaW9uID0gJyc7IC8vIGVtcHR5IHN0cmluZyB0byBhdm9pZCByZWdleHAgaXNzdWVzXG5wcm9jZXNzLnZlcnNpb25zID0ge307XG5cbmZ1bmN0aW9uIG5vb3AoKSB7fVxuXG5wcm9jZXNzLm9uID0gbm9vcDtcbnByb2Nlc3MuYWRkTGlzdGVuZXIgPSBub29wO1xucHJvY2Vzcy5vbmNlID0gbm9vcDtcbnByb2Nlc3Mub2ZmID0gbm9vcDtcbnByb2Nlc3MucmVtb3ZlTGlzdGVuZXIgPSBub29wO1xucHJvY2Vzcy5yZW1vdmVBbGxMaXN0ZW5lcnMgPSBub29wO1xucHJvY2Vzcy5lbWl0ID0gbm9vcDtcblxucHJvY2Vzcy5iaW5kaW5nID0gZnVuY3Rpb24gKG5hbWUpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3Byb2Nlc3MuYmluZGluZyBpcyBub3Qgc3VwcG9ydGVkJyk7XG59O1xuXG5wcm9jZXNzLmN3ZCA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuICcvJyB9O1xucHJvY2Vzcy5jaGRpciA9IGZ1bmN0aW9uIChkaXIpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3Byb2Nlc3MuY2hkaXIgaXMgbm90IHN1cHBvcnRlZCcpO1xufTtcbnByb2Nlc3MudW1hc2sgPSBmdW5jdGlvbigpIHsgcmV0dXJuIDA7IH07XG4iLCIvKiEgaHR0cHM6Ly9tdGhzLmJlL3B1bnljb2RlIHYxLjQuMCBieSBAbWF0aGlhcyAqL1xuOyhmdW5jdGlvbihyb290KSB7XG5cblx0LyoqIERldGVjdCBmcmVlIHZhcmlhYmxlcyAqL1xuXHR2YXIgZnJlZUV4cG9ydHMgPSB0eXBlb2YgZXhwb3J0cyA9PSAnb2JqZWN0JyAmJiBleHBvcnRzICYmXG5cdFx0IWV4cG9ydHMubm9kZVR5cGUgJiYgZXhwb3J0cztcblx0dmFyIGZyZWVNb2R1bGUgPSB0eXBlb2YgbW9kdWxlID09ICdvYmplY3QnICYmIG1vZHVsZSAmJlxuXHRcdCFtb2R1bGUubm9kZVR5cGUgJiYgbW9kdWxlO1xuXHR2YXIgZnJlZUdsb2JhbCA9IHR5cGVvZiBnbG9iYWwgPT0gJ29iamVjdCcgJiYgZ2xvYmFsO1xuXHRpZiAoXG5cdFx0ZnJlZUdsb2JhbC5nbG9iYWwgPT09IGZyZWVHbG9iYWwgfHxcblx0XHRmcmVlR2xvYmFsLndpbmRvdyA9PT0gZnJlZUdsb2JhbCB8fFxuXHRcdGZyZWVHbG9iYWwuc2VsZiA9PT0gZnJlZUdsb2JhbFxuXHQpIHtcblx0XHRyb290ID0gZnJlZUdsb2JhbDtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGUgYHB1bnljb2RlYCBvYmplY3QuXG5cdCAqIEBuYW1lIHB1bnljb2RlXG5cdCAqIEB0eXBlIE9iamVjdFxuXHQgKi9cblx0dmFyIHB1bnljb2RlLFxuXG5cdC8qKiBIaWdoZXN0IHBvc2l0aXZlIHNpZ25lZCAzMi1iaXQgZmxvYXQgdmFsdWUgKi9cblx0bWF4SW50ID0gMjE0NzQ4MzY0NywgLy8gYWthLiAweDdGRkZGRkZGIG9yIDJeMzEtMVxuXG5cdC8qKiBCb290c3RyaW5nIHBhcmFtZXRlcnMgKi9cblx0YmFzZSA9IDM2LFxuXHR0TWluID0gMSxcblx0dE1heCA9IDI2LFxuXHRza2V3ID0gMzgsXG5cdGRhbXAgPSA3MDAsXG5cdGluaXRpYWxCaWFzID0gNzIsXG5cdGluaXRpYWxOID0gMTI4LCAvLyAweDgwXG5cdGRlbGltaXRlciA9ICctJywgLy8gJ1xceDJEJ1xuXG5cdC8qKiBSZWd1bGFyIGV4cHJlc3Npb25zICovXG5cdHJlZ2V4UHVueWNvZGUgPSAvXnhuLS0vLFxuXHRyZWdleE5vbkFTQ0lJID0gL1teXFx4MjAtXFx4N0VdLywgLy8gdW5wcmludGFibGUgQVNDSUkgY2hhcnMgKyBub24tQVNDSUkgY2hhcnNcblx0cmVnZXhTZXBhcmF0b3JzID0gL1tcXHgyRVxcdTMwMDJcXHVGRjBFXFx1RkY2MV0vZywgLy8gUkZDIDM0OTAgc2VwYXJhdG9yc1xuXG5cdC8qKiBFcnJvciBtZXNzYWdlcyAqL1xuXHRlcnJvcnMgPSB7XG5cdFx0J292ZXJmbG93JzogJ092ZXJmbG93OiBpbnB1dCBuZWVkcyB3aWRlciBpbnRlZ2VycyB0byBwcm9jZXNzJyxcblx0XHQnbm90LWJhc2ljJzogJ0lsbGVnYWwgaW5wdXQgPj0gMHg4MCAobm90IGEgYmFzaWMgY29kZSBwb2ludCknLFxuXHRcdCdpbnZhbGlkLWlucHV0JzogJ0ludmFsaWQgaW5wdXQnXG5cdH0sXG5cblx0LyoqIENvbnZlbmllbmNlIHNob3J0Y3V0cyAqL1xuXHRiYXNlTWludXNUTWluID0gYmFzZSAtIHRNaW4sXG5cdGZsb29yID0gTWF0aC5mbG9vcixcblx0c3RyaW5nRnJvbUNoYXJDb2RlID0gU3RyaW5nLmZyb21DaGFyQ29kZSxcblxuXHQvKiogVGVtcG9yYXJ5IHZhcmlhYmxlICovXG5cdGtleTtcblxuXHQvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cblxuXHQvKipcblx0ICogQSBnZW5lcmljIGVycm9yIHV0aWxpdHkgZnVuY3Rpb24uXG5cdCAqIEBwcml2YXRlXG5cdCAqIEBwYXJhbSB7U3RyaW5nfSB0eXBlIFRoZSBlcnJvciB0eXBlLlxuXHQgKiBAcmV0dXJucyB7RXJyb3J9IFRocm93cyBhIGBSYW5nZUVycm9yYCB3aXRoIHRoZSBhcHBsaWNhYmxlIGVycm9yIG1lc3NhZ2UuXG5cdCAqL1xuXHRmdW5jdGlvbiBlcnJvcih0eXBlKSB7XG5cdFx0dGhyb3cgbmV3IFJhbmdlRXJyb3IoZXJyb3JzW3R5cGVdKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBBIGdlbmVyaWMgYEFycmF5I21hcGAgdXRpbGl0eSBmdW5jdGlvbi5cblx0ICogQHByaXZhdGVcblx0ICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIGl0ZXJhdGUgb3Zlci5cblx0ICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2sgVGhlIGZ1bmN0aW9uIHRoYXQgZ2V0cyBjYWxsZWQgZm9yIGV2ZXJ5IGFycmF5XG5cdCAqIGl0ZW0uXG5cdCAqIEByZXR1cm5zIHtBcnJheX0gQSBuZXcgYXJyYXkgb2YgdmFsdWVzIHJldHVybmVkIGJ5IHRoZSBjYWxsYmFjayBmdW5jdGlvbi5cblx0ICovXG5cdGZ1bmN0aW9uIG1hcChhcnJheSwgZm4pIHtcblx0XHR2YXIgbGVuZ3RoID0gYXJyYXkubGVuZ3RoO1xuXHRcdHZhciByZXN1bHQgPSBbXTtcblx0XHR3aGlsZSAobGVuZ3RoLS0pIHtcblx0XHRcdHJlc3VsdFtsZW5ndGhdID0gZm4oYXJyYXlbbGVuZ3RoXSk7XG5cdFx0fVxuXHRcdHJldHVybiByZXN1bHQ7XG5cdH1cblxuXHQvKipcblx0ICogQSBzaW1wbGUgYEFycmF5I21hcGAtbGlrZSB3cmFwcGVyIHRvIHdvcmsgd2l0aCBkb21haW4gbmFtZSBzdHJpbmdzIG9yIGVtYWlsXG5cdCAqIGFkZHJlc3Nlcy5cblx0ICogQHByaXZhdGVcblx0ICogQHBhcmFtIHtTdHJpbmd9IGRvbWFpbiBUaGUgZG9tYWluIG5hbWUgb3IgZW1haWwgYWRkcmVzcy5cblx0ICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2sgVGhlIGZ1bmN0aW9uIHRoYXQgZ2V0cyBjYWxsZWQgZm9yIGV2ZXJ5XG5cdCAqIGNoYXJhY3Rlci5cblx0ICogQHJldHVybnMge0FycmF5fSBBIG5ldyBzdHJpbmcgb2YgY2hhcmFjdGVycyByZXR1cm5lZCBieSB0aGUgY2FsbGJhY2tcblx0ICogZnVuY3Rpb24uXG5cdCAqL1xuXHRmdW5jdGlvbiBtYXBEb21haW4oc3RyaW5nLCBmbikge1xuXHRcdHZhciBwYXJ0cyA9IHN0cmluZy5zcGxpdCgnQCcpO1xuXHRcdHZhciByZXN1bHQgPSAnJztcblx0XHRpZiAocGFydHMubGVuZ3RoID4gMSkge1xuXHRcdFx0Ly8gSW4gZW1haWwgYWRkcmVzc2VzLCBvbmx5IHRoZSBkb21haW4gbmFtZSBzaG91bGQgYmUgcHVueWNvZGVkLiBMZWF2ZVxuXHRcdFx0Ly8gdGhlIGxvY2FsIHBhcnQgKGkuZS4gZXZlcnl0aGluZyB1cCB0byBgQGApIGludGFjdC5cblx0XHRcdHJlc3VsdCA9IHBhcnRzWzBdICsgJ0AnO1xuXHRcdFx0c3RyaW5nID0gcGFydHNbMV07XG5cdFx0fVxuXHRcdC8vIEF2b2lkIGBzcGxpdChyZWdleClgIGZvciBJRTggY29tcGF0aWJpbGl0eS4gU2VlICMxNy5cblx0XHRzdHJpbmcgPSBzdHJpbmcucmVwbGFjZShyZWdleFNlcGFyYXRvcnMsICdcXHgyRScpO1xuXHRcdHZhciBsYWJlbHMgPSBzdHJpbmcuc3BsaXQoJy4nKTtcblx0XHR2YXIgZW5jb2RlZCA9IG1hcChsYWJlbHMsIGZuKS5qb2luKCcuJyk7XG5cdFx0cmV0dXJuIHJlc3VsdCArIGVuY29kZWQ7XG5cdH1cblxuXHQvKipcblx0ICogQ3JlYXRlcyBhbiBhcnJheSBjb250YWluaW5nIHRoZSBudW1lcmljIGNvZGUgcG9pbnRzIG9mIGVhY2ggVW5pY29kZVxuXHQgKiBjaGFyYWN0ZXIgaW4gdGhlIHN0cmluZy4gV2hpbGUgSmF2YVNjcmlwdCB1c2VzIFVDUy0yIGludGVybmFsbHksXG5cdCAqIHRoaXMgZnVuY3Rpb24gd2lsbCBjb252ZXJ0IGEgcGFpciBvZiBzdXJyb2dhdGUgaGFsdmVzIChlYWNoIG9mIHdoaWNoXG5cdCAqIFVDUy0yIGV4cG9zZXMgYXMgc2VwYXJhdGUgY2hhcmFjdGVycykgaW50byBhIHNpbmdsZSBjb2RlIHBvaW50LFxuXHQgKiBtYXRjaGluZyBVVEYtMTYuXG5cdCAqIEBzZWUgYHB1bnljb2RlLnVjczIuZW5jb2RlYFxuXHQgKiBAc2VlIDxodHRwczovL21hdGhpYXNieW5lbnMuYmUvbm90ZXMvamF2YXNjcmlwdC1lbmNvZGluZz5cblx0ICogQG1lbWJlck9mIHB1bnljb2RlLnVjczJcblx0ICogQG5hbWUgZGVjb2RlXG5cdCAqIEBwYXJhbSB7U3RyaW5nfSBzdHJpbmcgVGhlIFVuaWNvZGUgaW5wdXQgc3RyaW5nIChVQ1MtMikuXG5cdCAqIEByZXR1cm5zIHtBcnJheX0gVGhlIG5ldyBhcnJheSBvZiBjb2RlIHBvaW50cy5cblx0ICovXG5cdGZ1bmN0aW9uIHVjczJkZWNvZGUoc3RyaW5nKSB7XG5cdFx0dmFyIG91dHB1dCA9IFtdLFxuXHRcdCAgICBjb3VudGVyID0gMCxcblx0XHQgICAgbGVuZ3RoID0gc3RyaW5nLmxlbmd0aCxcblx0XHQgICAgdmFsdWUsXG5cdFx0ICAgIGV4dHJhO1xuXHRcdHdoaWxlIChjb3VudGVyIDwgbGVuZ3RoKSB7XG5cdFx0XHR2YWx1ZSA9IHN0cmluZy5jaGFyQ29kZUF0KGNvdW50ZXIrKyk7XG5cdFx0XHRpZiAodmFsdWUgPj0gMHhEODAwICYmIHZhbHVlIDw9IDB4REJGRiAmJiBjb3VudGVyIDwgbGVuZ3RoKSB7XG5cdFx0XHRcdC8vIGhpZ2ggc3Vycm9nYXRlLCBhbmQgdGhlcmUgaXMgYSBuZXh0IGNoYXJhY3RlclxuXHRcdFx0XHRleHRyYSA9IHN0cmluZy5jaGFyQ29kZUF0KGNvdW50ZXIrKyk7XG5cdFx0XHRcdGlmICgoZXh0cmEgJiAweEZDMDApID09IDB4REMwMCkgeyAvLyBsb3cgc3Vycm9nYXRlXG5cdFx0XHRcdFx0b3V0cHV0LnB1c2goKCh2YWx1ZSAmIDB4M0ZGKSA8PCAxMCkgKyAoZXh0cmEgJiAweDNGRikgKyAweDEwMDAwKTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHQvLyB1bm1hdGNoZWQgc3Vycm9nYXRlOyBvbmx5IGFwcGVuZCB0aGlzIGNvZGUgdW5pdCwgaW4gY2FzZSB0aGUgbmV4dFxuXHRcdFx0XHRcdC8vIGNvZGUgdW5pdCBpcyB0aGUgaGlnaCBzdXJyb2dhdGUgb2YgYSBzdXJyb2dhdGUgcGFpclxuXHRcdFx0XHRcdG91dHB1dC5wdXNoKHZhbHVlKTtcblx0XHRcdFx0XHRjb3VudGVyLS07XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdG91dHB1dC5wdXNoKHZhbHVlKTtcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIG91dHB1dDtcblx0fVxuXG5cdC8qKlxuXHQgKiBDcmVhdGVzIGEgc3RyaW5nIGJhc2VkIG9uIGFuIGFycmF5IG9mIG51bWVyaWMgY29kZSBwb2ludHMuXG5cdCAqIEBzZWUgYHB1bnljb2RlLnVjczIuZGVjb2RlYFxuXHQgKiBAbWVtYmVyT2YgcHVueWNvZGUudWNzMlxuXHQgKiBAbmFtZSBlbmNvZGVcblx0ICogQHBhcmFtIHtBcnJheX0gY29kZVBvaW50cyBUaGUgYXJyYXkgb2YgbnVtZXJpYyBjb2RlIHBvaW50cy5cblx0ICogQHJldHVybnMge1N0cmluZ30gVGhlIG5ldyBVbmljb2RlIHN0cmluZyAoVUNTLTIpLlxuXHQgKi9cblx0ZnVuY3Rpb24gdWNzMmVuY29kZShhcnJheSkge1xuXHRcdHJldHVybiBtYXAoYXJyYXksIGZ1bmN0aW9uKHZhbHVlKSB7XG5cdFx0XHR2YXIgb3V0cHV0ID0gJyc7XG5cdFx0XHRpZiAodmFsdWUgPiAweEZGRkYpIHtcblx0XHRcdFx0dmFsdWUgLT0gMHgxMDAwMDtcblx0XHRcdFx0b3V0cHV0ICs9IHN0cmluZ0Zyb21DaGFyQ29kZSh2YWx1ZSA+Pj4gMTAgJiAweDNGRiB8IDB4RDgwMCk7XG5cdFx0XHRcdHZhbHVlID0gMHhEQzAwIHwgdmFsdWUgJiAweDNGRjtcblx0XHRcdH1cblx0XHRcdG91dHB1dCArPSBzdHJpbmdGcm9tQ2hhckNvZGUodmFsdWUpO1xuXHRcdFx0cmV0dXJuIG91dHB1dDtcblx0XHR9KS5qb2luKCcnKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBDb252ZXJ0cyBhIGJhc2ljIGNvZGUgcG9pbnQgaW50byBhIGRpZ2l0L2ludGVnZXIuXG5cdCAqIEBzZWUgYGRpZ2l0VG9CYXNpYygpYFxuXHQgKiBAcHJpdmF0ZVxuXHQgKiBAcGFyYW0ge051bWJlcn0gY29kZVBvaW50IFRoZSBiYXNpYyBudW1lcmljIGNvZGUgcG9pbnQgdmFsdWUuXG5cdCAqIEByZXR1cm5zIHtOdW1iZXJ9IFRoZSBudW1lcmljIHZhbHVlIG9mIGEgYmFzaWMgY29kZSBwb2ludCAoZm9yIHVzZSBpblxuXHQgKiByZXByZXNlbnRpbmcgaW50ZWdlcnMpIGluIHRoZSByYW5nZSBgMGAgdG8gYGJhc2UgLSAxYCwgb3IgYGJhc2VgIGlmXG5cdCAqIHRoZSBjb2RlIHBvaW50IGRvZXMgbm90IHJlcHJlc2VudCBhIHZhbHVlLlxuXHQgKi9cblx0ZnVuY3Rpb24gYmFzaWNUb0RpZ2l0KGNvZGVQb2ludCkge1xuXHRcdGlmIChjb2RlUG9pbnQgLSA0OCA8IDEwKSB7XG5cdFx0XHRyZXR1cm4gY29kZVBvaW50IC0gMjI7XG5cdFx0fVxuXHRcdGlmIChjb2RlUG9pbnQgLSA2NSA8IDI2KSB7XG5cdFx0XHRyZXR1cm4gY29kZVBvaW50IC0gNjU7XG5cdFx0fVxuXHRcdGlmIChjb2RlUG9pbnQgLSA5NyA8IDI2KSB7XG5cdFx0XHRyZXR1cm4gY29kZVBvaW50IC0gOTc7XG5cdFx0fVxuXHRcdHJldHVybiBiYXNlO1xuXHR9XG5cblx0LyoqXG5cdCAqIENvbnZlcnRzIGEgZGlnaXQvaW50ZWdlciBpbnRvIGEgYmFzaWMgY29kZSBwb2ludC5cblx0ICogQHNlZSBgYmFzaWNUb0RpZ2l0KClgXG5cdCAqIEBwcml2YXRlXG5cdCAqIEBwYXJhbSB7TnVtYmVyfSBkaWdpdCBUaGUgbnVtZXJpYyB2YWx1ZSBvZiBhIGJhc2ljIGNvZGUgcG9pbnQuXG5cdCAqIEByZXR1cm5zIHtOdW1iZXJ9IFRoZSBiYXNpYyBjb2RlIHBvaW50IHdob3NlIHZhbHVlICh3aGVuIHVzZWQgZm9yXG5cdCAqIHJlcHJlc2VudGluZyBpbnRlZ2VycykgaXMgYGRpZ2l0YCwgd2hpY2ggbmVlZHMgdG8gYmUgaW4gdGhlIHJhbmdlXG5cdCAqIGAwYCB0byBgYmFzZSAtIDFgLiBJZiBgZmxhZ2AgaXMgbm9uLXplcm8sIHRoZSB1cHBlcmNhc2UgZm9ybSBpc1xuXHQgKiB1c2VkOyBlbHNlLCB0aGUgbG93ZXJjYXNlIGZvcm0gaXMgdXNlZC4gVGhlIGJlaGF2aW9yIGlzIHVuZGVmaW5lZFxuXHQgKiBpZiBgZmxhZ2AgaXMgbm9uLXplcm8gYW5kIGBkaWdpdGAgaGFzIG5vIHVwcGVyY2FzZSBmb3JtLlxuXHQgKi9cblx0ZnVuY3Rpb24gZGlnaXRUb0Jhc2ljKGRpZ2l0LCBmbGFnKSB7XG5cdFx0Ly8gIDAuLjI1IG1hcCB0byBBU0NJSSBhLi56IG9yIEEuLlpcblx0XHQvLyAyNi4uMzUgbWFwIHRvIEFTQ0lJIDAuLjlcblx0XHRyZXR1cm4gZGlnaXQgKyAyMiArIDc1ICogKGRpZ2l0IDwgMjYpIC0gKChmbGFnICE9IDApIDw8IDUpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEJpYXMgYWRhcHRhdGlvbiBmdW5jdGlvbiBhcyBwZXIgc2VjdGlvbiAzLjQgb2YgUkZDIDM0OTIuXG5cdCAqIGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmMzNDkyI3NlY3Rpb24tMy40XG5cdCAqIEBwcml2YXRlXG5cdCAqL1xuXHRmdW5jdGlvbiBhZGFwdChkZWx0YSwgbnVtUG9pbnRzLCBmaXJzdFRpbWUpIHtcblx0XHR2YXIgayA9IDA7XG5cdFx0ZGVsdGEgPSBmaXJzdFRpbWUgPyBmbG9vcihkZWx0YSAvIGRhbXApIDogZGVsdGEgPj4gMTtcblx0XHRkZWx0YSArPSBmbG9vcihkZWx0YSAvIG51bVBvaW50cyk7XG5cdFx0Zm9yICgvKiBubyBpbml0aWFsaXphdGlvbiAqLzsgZGVsdGEgPiBiYXNlTWludXNUTWluICogdE1heCA+PiAxOyBrICs9IGJhc2UpIHtcblx0XHRcdGRlbHRhID0gZmxvb3IoZGVsdGEgLyBiYXNlTWludXNUTWluKTtcblx0XHR9XG5cdFx0cmV0dXJuIGZsb29yKGsgKyAoYmFzZU1pbnVzVE1pbiArIDEpICogZGVsdGEgLyAoZGVsdGEgKyBza2V3KSk7XG5cdH1cblxuXHQvKipcblx0ICogQ29udmVydHMgYSBQdW55Y29kZSBzdHJpbmcgb2YgQVNDSUktb25seSBzeW1ib2xzIHRvIGEgc3RyaW5nIG9mIFVuaWNvZGVcblx0ICogc3ltYm9scy5cblx0ICogQG1lbWJlck9mIHB1bnljb2RlXG5cdCAqIEBwYXJhbSB7U3RyaW5nfSBpbnB1dCBUaGUgUHVueWNvZGUgc3RyaW5nIG9mIEFTQ0lJLW9ubHkgc3ltYm9scy5cblx0ICogQHJldHVybnMge1N0cmluZ30gVGhlIHJlc3VsdGluZyBzdHJpbmcgb2YgVW5pY29kZSBzeW1ib2xzLlxuXHQgKi9cblx0ZnVuY3Rpb24gZGVjb2RlKGlucHV0KSB7XG5cdFx0Ly8gRG9uJ3QgdXNlIFVDUy0yXG5cdFx0dmFyIG91dHB1dCA9IFtdLFxuXHRcdCAgICBpbnB1dExlbmd0aCA9IGlucHV0Lmxlbmd0aCxcblx0XHQgICAgb3V0LFxuXHRcdCAgICBpID0gMCxcblx0XHQgICAgbiA9IGluaXRpYWxOLFxuXHRcdCAgICBiaWFzID0gaW5pdGlhbEJpYXMsXG5cdFx0ICAgIGJhc2ljLFxuXHRcdCAgICBqLFxuXHRcdCAgICBpbmRleCxcblx0XHQgICAgb2xkaSxcblx0XHQgICAgdyxcblx0XHQgICAgayxcblx0XHQgICAgZGlnaXQsXG5cdFx0ICAgIHQsXG5cdFx0ICAgIC8qKiBDYWNoZWQgY2FsY3VsYXRpb24gcmVzdWx0cyAqL1xuXHRcdCAgICBiYXNlTWludXNUO1xuXG5cdFx0Ly8gSGFuZGxlIHRoZSBiYXNpYyBjb2RlIHBvaW50czogbGV0IGBiYXNpY2AgYmUgdGhlIG51bWJlciBvZiBpbnB1dCBjb2RlXG5cdFx0Ly8gcG9pbnRzIGJlZm9yZSB0aGUgbGFzdCBkZWxpbWl0ZXIsIG9yIGAwYCBpZiB0aGVyZSBpcyBub25lLCB0aGVuIGNvcHlcblx0XHQvLyB0aGUgZmlyc3QgYmFzaWMgY29kZSBwb2ludHMgdG8gdGhlIG91dHB1dC5cblxuXHRcdGJhc2ljID0gaW5wdXQubGFzdEluZGV4T2YoZGVsaW1pdGVyKTtcblx0XHRpZiAoYmFzaWMgPCAwKSB7XG5cdFx0XHRiYXNpYyA9IDA7XG5cdFx0fVxuXG5cdFx0Zm9yIChqID0gMDsgaiA8IGJhc2ljOyArK2opIHtcblx0XHRcdC8vIGlmIGl0J3Mgbm90IGEgYmFzaWMgY29kZSBwb2ludFxuXHRcdFx0aWYgKGlucHV0LmNoYXJDb2RlQXQoaikgPj0gMHg4MCkge1xuXHRcdFx0XHRlcnJvcignbm90LWJhc2ljJyk7XG5cdFx0XHR9XG5cdFx0XHRvdXRwdXQucHVzaChpbnB1dC5jaGFyQ29kZUF0KGopKTtcblx0XHR9XG5cblx0XHQvLyBNYWluIGRlY29kaW5nIGxvb3A6IHN0YXJ0IGp1c3QgYWZ0ZXIgdGhlIGxhc3QgZGVsaW1pdGVyIGlmIGFueSBiYXNpYyBjb2RlXG5cdFx0Ly8gcG9pbnRzIHdlcmUgY29waWVkOyBzdGFydCBhdCB0aGUgYmVnaW5uaW5nIG90aGVyd2lzZS5cblxuXHRcdGZvciAoaW5kZXggPSBiYXNpYyA+IDAgPyBiYXNpYyArIDEgOiAwOyBpbmRleCA8IGlucHV0TGVuZ3RoOyAvKiBubyBmaW5hbCBleHByZXNzaW9uICovKSB7XG5cblx0XHRcdC8vIGBpbmRleGAgaXMgdGhlIGluZGV4IG9mIHRoZSBuZXh0IGNoYXJhY3RlciB0byBiZSBjb25zdW1lZC5cblx0XHRcdC8vIERlY29kZSBhIGdlbmVyYWxpemVkIHZhcmlhYmxlLWxlbmd0aCBpbnRlZ2VyIGludG8gYGRlbHRhYCxcblx0XHRcdC8vIHdoaWNoIGdldHMgYWRkZWQgdG8gYGlgLiBUaGUgb3ZlcmZsb3cgY2hlY2tpbmcgaXMgZWFzaWVyXG5cdFx0XHQvLyBpZiB3ZSBpbmNyZWFzZSBgaWAgYXMgd2UgZ28sIHRoZW4gc3VidHJhY3Qgb2ZmIGl0cyBzdGFydGluZ1xuXHRcdFx0Ly8gdmFsdWUgYXQgdGhlIGVuZCB0byBvYnRhaW4gYGRlbHRhYC5cblx0XHRcdGZvciAob2xkaSA9IGksIHcgPSAxLCBrID0gYmFzZTsgLyogbm8gY29uZGl0aW9uICovOyBrICs9IGJhc2UpIHtcblxuXHRcdFx0XHRpZiAoaW5kZXggPj0gaW5wdXRMZW5ndGgpIHtcblx0XHRcdFx0XHRlcnJvcignaW52YWxpZC1pbnB1dCcpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0ZGlnaXQgPSBiYXNpY1RvRGlnaXQoaW5wdXQuY2hhckNvZGVBdChpbmRleCsrKSk7XG5cblx0XHRcdFx0aWYgKGRpZ2l0ID49IGJhc2UgfHwgZGlnaXQgPiBmbG9vcigobWF4SW50IC0gaSkgLyB3KSkge1xuXHRcdFx0XHRcdGVycm9yKCdvdmVyZmxvdycpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0aSArPSBkaWdpdCAqIHc7XG5cdFx0XHRcdHQgPSBrIDw9IGJpYXMgPyB0TWluIDogKGsgPj0gYmlhcyArIHRNYXggPyB0TWF4IDogayAtIGJpYXMpO1xuXG5cdFx0XHRcdGlmIChkaWdpdCA8IHQpIHtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGJhc2VNaW51c1QgPSBiYXNlIC0gdDtcblx0XHRcdFx0aWYgKHcgPiBmbG9vcihtYXhJbnQgLyBiYXNlTWludXNUKSkge1xuXHRcdFx0XHRcdGVycm9yKCdvdmVyZmxvdycpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0dyAqPSBiYXNlTWludXNUO1xuXG5cdFx0XHR9XG5cblx0XHRcdG91dCA9IG91dHB1dC5sZW5ndGggKyAxO1xuXHRcdFx0YmlhcyA9IGFkYXB0KGkgLSBvbGRpLCBvdXQsIG9sZGkgPT0gMCk7XG5cblx0XHRcdC8vIGBpYCB3YXMgc3VwcG9zZWQgdG8gd3JhcCBhcm91bmQgZnJvbSBgb3V0YCB0byBgMGAsXG5cdFx0XHQvLyBpbmNyZW1lbnRpbmcgYG5gIGVhY2ggdGltZSwgc28gd2UnbGwgZml4IHRoYXQgbm93OlxuXHRcdFx0aWYgKGZsb29yKGkgLyBvdXQpID4gbWF4SW50IC0gbikge1xuXHRcdFx0XHRlcnJvcignb3ZlcmZsb3cnKTtcblx0XHRcdH1cblxuXHRcdFx0biArPSBmbG9vcihpIC8gb3V0KTtcblx0XHRcdGkgJT0gb3V0O1xuXG5cdFx0XHQvLyBJbnNlcnQgYG5gIGF0IHBvc2l0aW9uIGBpYCBvZiB0aGUgb3V0cHV0XG5cdFx0XHRvdXRwdXQuc3BsaWNlKGkrKywgMCwgbik7XG5cblx0XHR9XG5cblx0XHRyZXR1cm4gdWNzMmVuY29kZShvdXRwdXQpO1xuXHR9XG5cblx0LyoqXG5cdCAqIENvbnZlcnRzIGEgc3RyaW5nIG9mIFVuaWNvZGUgc3ltYm9scyAoZS5nLiBhIGRvbWFpbiBuYW1lIGxhYmVsKSB0byBhXG5cdCAqIFB1bnljb2RlIHN0cmluZyBvZiBBU0NJSS1vbmx5IHN5bWJvbHMuXG5cdCAqIEBtZW1iZXJPZiBwdW55Y29kZVxuXHQgKiBAcGFyYW0ge1N0cmluZ30gaW5wdXQgVGhlIHN0cmluZyBvZiBVbmljb2RlIHN5bWJvbHMuXG5cdCAqIEByZXR1cm5zIHtTdHJpbmd9IFRoZSByZXN1bHRpbmcgUHVueWNvZGUgc3RyaW5nIG9mIEFTQ0lJLW9ubHkgc3ltYm9scy5cblx0ICovXG5cdGZ1bmN0aW9uIGVuY29kZShpbnB1dCkge1xuXHRcdHZhciBuLFxuXHRcdCAgICBkZWx0YSxcblx0XHQgICAgaGFuZGxlZENQQ291bnQsXG5cdFx0ICAgIGJhc2ljTGVuZ3RoLFxuXHRcdCAgICBiaWFzLFxuXHRcdCAgICBqLFxuXHRcdCAgICBtLFxuXHRcdCAgICBxLFxuXHRcdCAgICBrLFxuXHRcdCAgICB0LFxuXHRcdCAgICBjdXJyZW50VmFsdWUsXG5cdFx0ICAgIG91dHB1dCA9IFtdLFxuXHRcdCAgICAvKiogYGlucHV0TGVuZ3RoYCB3aWxsIGhvbGQgdGhlIG51bWJlciBvZiBjb2RlIHBvaW50cyBpbiBgaW5wdXRgLiAqL1xuXHRcdCAgICBpbnB1dExlbmd0aCxcblx0XHQgICAgLyoqIENhY2hlZCBjYWxjdWxhdGlvbiByZXN1bHRzICovXG5cdFx0ICAgIGhhbmRsZWRDUENvdW50UGx1c09uZSxcblx0XHQgICAgYmFzZU1pbnVzVCxcblx0XHQgICAgcU1pbnVzVDtcblxuXHRcdC8vIENvbnZlcnQgdGhlIGlucHV0IGluIFVDUy0yIHRvIFVuaWNvZGVcblx0XHRpbnB1dCA9IHVjczJkZWNvZGUoaW5wdXQpO1xuXG5cdFx0Ly8gQ2FjaGUgdGhlIGxlbmd0aFxuXHRcdGlucHV0TGVuZ3RoID0gaW5wdXQubGVuZ3RoO1xuXG5cdFx0Ly8gSW5pdGlhbGl6ZSB0aGUgc3RhdGVcblx0XHRuID0gaW5pdGlhbE47XG5cdFx0ZGVsdGEgPSAwO1xuXHRcdGJpYXMgPSBpbml0aWFsQmlhcztcblxuXHRcdC8vIEhhbmRsZSB0aGUgYmFzaWMgY29kZSBwb2ludHNcblx0XHRmb3IgKGogPSAwOyBqIDwgaW5wdXRMZW5ndGg7ICsraikge1xuXHRcdFx0Y3VycmVudFZhbHVlID0gaW5wdXRbal07XG5cdFx0XHRpZiAoY3VycmVudFZhbHVlIDwgMHg4MCkge1xuXHRcdFx0XHRvdXRwdXQucHVzaChzdHJpbmdGcm9tQ2hhckNvZGUoY3VycmVudFZhbHVlKSk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0aGFuZGxlZENQQ291bnQgPSBiYXNpY0xlbmd0aCA9IG91dHB1dC5sZW5ndGg7XG5cblx0XHQvLyBgaGFuZGxlZENQQ291bnRgIGlzIHRoZSBudW1iZXIgb2YgY29kZSBwb2ludHMgdGhhdCBoYXZlIGJlZW4gaGFuZGxlZDtcblx0XHQvLyBgYmFzaWNMZW5ndGhgIGlzIHRoZSBudW1iZXIgb2YgYmFzaWMgY29kZSBwb2ludHMuXG5cblx0XHQvLyBGaW5pc2ggdGhlIGJhc2ljIHN0cmluZyAtIGlmIGl0IGlzIG5vdCBlbXB0eSAtIHdpdGggYSBkZWxpbWl0ZXJcblx0XHRpZiAoYmFzaWNMZW5ndGgpIHtcblx0XHRcdG91dHB1dC5wdXNoKGRlbGltaXRlcik7XG5cdFx0fVxuXG5cdFx0Ly8gTWFpbiBlbmNvZGluZyBsb29wOlxuXHRcdHdoaWxlIChoYW5kbGVkQ1BDb3VudCA8IGlucHV0TGVuZ3RoKSB7XG5cblx0XHRcdC8vIEFsbCBub24tYmFzaWMgY29kZSBwb2ludHMgPCBuIGhhdmUgYmVlbiBoYW5kbGVkIGFscmVhZHkuIEZpbmQgdGhlIG5leHRcblx0XHRcdC8vIGxhcmdlciBvbmU6XG5cdFx0XHRmb3IgKG0gPSBtYXhJbnQsIGogPSAwOyBqIDwgaW5wdXRMZW5ndGg7ICsraikge1xuXHRcdFx0XHRjdXJyZW50VmFsdWUgPSBpbnB1dFtqXTtcblx0XHRcdFx0aWYgKGN1cnJlbnRWYWx1ZSA+PSBuICYmIGN1cnJlbnRWYWx1ZSA8IG0pIHtcblx0XHRcdFx0XHRtID0gY3VycmVudFZhbHVlO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdC8vIEluY3JlYXNlIGBkZWx0YWAgZW5vdWdoIHRvIGFkdmFuY2UgdGhlIGRlY29kZXIncyA8bixpPiBzdGF0ZSB0byA8bSwwPixcblx0XHRcdC8vIGJ1dCBndWFyZCBhZ2FpbnN0IG92ZXJmbG93XG5cdFx0XHRoYW5kbGVkQ1BDb3VudFBsdXNPbmUgPSBoYW5kbGVkQ1BDb3VudCArIDE7XG5cdFx0XHRpZiAobSAtIG4gPiBmbG9vcigobWF4SW50IC0gZGVsdGEpIC8gaGFuZGxlZENQQ291bnRQbHVzT25lKSkge1xuXHRcdFx0XHRlcnJvcignb3ZlcmZsb3cnKTtcblx0XHRcdH1cblxuXHRcdFx0ZGVsdGEgKz0gKG0gLSBuKSAqIGhhbmRsZWRDUENvdW50UGx1c09uZTtcblx0XHRcdG4gPSBtO1xuXG5cdFx0XHRmb3IgKGogPSAwOyBqIDwgaW5wdXRMZW5ndGg7ICsraikge1xuXHRcdFx0XHRjdXJyZW50VmFsdWUgPSBpbnB1dFtqXTtcblxuXHRcdFx0XHRpZiAoY3VycmVudFZhbHVlIDwgbiAmJiArK2RlbHRhID4gbWF4SW50KSB7XG5cdFx0XHRcdFx0ZXJyb3IoJ292ZXJmbG93Jyk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZiAoY3VycmVudFZhbHVlID09IG4pIHtcblx0XHRcdFx0XHQvLyBSZXByZXNlbnQgZGVsdGEgYXMgYSBnZW5lcmFsaXplZCB2YXJpYWJsZS1sZW5ndGggaW50ZWdlclxuXHRcdFx0XHRcdGZvciAocSA9IGRlbHRhLCBrID0gYmFzZTsgLyogbm8gY29uZGl0aW9uICovOyBrICs9IGJhc2UpIHtcblx0XHRcdFx0XHRcdHQgPSBrIDw9IGJpYXMgPyB0TWluIDogKGsgPj0gYmlhcyArIHRNYXggPyB0TWF4IDogayAtIGJpYXMpO1xuXHRcdFx0XHRcdFx0aWYgKHEgPCB0KSB7XG5cdFx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0cU1pbnVzVCA9IHEgLSB0O1xuXHRcdFx0XHRcdFx0YmFzZU1pbnVzVCA9IGJhc2UgLSB0O1xuXHRcdFx0XHRcdFx0b3V0cHV0LnB1c2goXG5cdFx0XHRcdFx0XHRcdHN0cmluZ0Zyb21DaGFyQ29kZShkaWdpdFRvQmFzaWModCArIHFNaW51c1QgJSBiYXNlTWludXNULCAwKSlcblx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0XHRxID0gZmxvb3IocU1pbnVzVCAvIGJhc2VNaW51c1QpO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdG91dHB1dC5wdXNoKHN0cmluZ0Zyb21DaGFyQ29kZShkaWdpdFRvQmFzaWMocSwgMCkpKTtcblx0XHRcdFx0XHRiaWFzID0gYWRhcHQoZGVsdGEsIGhhbmRsZWRDUENvdW50UGx1c09uZSwgaGFuZGxlZENQQ291bnQgPT0gYmFzaWNMZW5ndGgpO1xuXHRcdFx0XHRcdGRlbHRhID0gMDtcblx0XHRcdFx0XHQrK2hhbmRsZWRDUENvdW50O1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdCsrZGVsdGE7XG5cdFx0XHQrK247XG5cblx0XHR9XG5cdFx0cmV0dXJuIG91dHB1dC5qb2luKCcnKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBDb252ZXJ0cyBhIFB1bnljb2RlIHN0cmluZyByZXByZXNlbnRpbmcgYSBkb21haW4gbmFtZSBvciBhbiBlbWFpbCBhZGRyZXNzXG5cdCAqIHRvIFVuaWNvZGUuIE9ubHkgdGhlIFB1bnljb2RlZCBwYXJ0cyBvZiB0aGUgaW5wdXQgd2lsbCBiZSBjb252ZXJ0ZWQsIGkuZS5cblx0ICogaXQgZG9lc24ndCBtYXR0ZXIgaWYgeW91IGNhbGwgaXQgb24gYSBzdHJpbmcgdGhhdCBoYXMgYWxyZWFkeSBiZWVuXG5cdCAqIGNvbnZlcnRlZCB0byBVbmljb2RlLlxuXHQgKiBAbWVtYmVyT2YgcHVueWNvZGVcblx0ICogQHBhcmFtIHtTdHJpbmd9IGlucHV0IFRoZSBQdW55Y29kZWQgZG9tYWluIG5hbWUgb3IgZW1haWwgYWRkcmVzcyB0b1xuXHQgKiBjb252ZXJ0IHRvIFVuaWNvZGUuXG5cdCAqIEByZXR1cm5zIHtTdHJpbmd9IFRoZSBVbmljb2RlIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBnaXZlbiBQdW55Y29kZVxuXHQgKiBzdHJpbmcuXG5cdCAqL1xuXHRmdW5jdGlvbiB0b1VuaWNvZGUoaW5wdXQpIHtcblx0XHRyZXR1cm4gbWFwRG9tYWluKGlucHV0LCBmdW5jdGlvbihzdHJpbmcpIHtcblx0XHRcdHJldHVybiByZWdleFB1bnljb2RlLnRlc3Qoc3RyaW5nKVxuXHRcdFx0XHQ/IGRlY29kZShzdHJpbmcuc2xpY2UoNCkudG9Mb3dlckNhc2UoKSlcblx0XHRcdFx0OiBzdHJpbmc7XG5cdFx0fSk7XG5cdH1cblxuXHQvKipcblx0ICogQ29udmVydHMgYSBVbmljb2RlIHN0cmluZyByZXByZXNlbnRpbmcgYSBkb21haW4gbmFtZSBvciBhbiBlbWFpbCBhZGRyZXNzIHRvXG5cdCAqIFB1bnljb2RlLiBPbmx5IHRoZSBub24tQVNDSUkgcGFydHMgb2YgdGhlIGRvbWFpbiBuYW1lIHdpbGwgYmUgY29udmVydGVkLFxuXHQgKiBpLmUuIGl0IGRvZXNuJ3QgbWF0dGVyIGlmIHlvdSBjYWxsIGl0IHdpdGggYSBkb21haW4gdGhhdCdzIGFscmVhZHkgaW5cblx0ICogQVNDSUkuXG5cdCAqIEBtZW1iZXJPZiBwdW55Y29kZVxuXHQgKiBAcGFyYW0ge1N0cmluZ30gaW5wdXQgVGhlIGRvbWFpbiBuYW1lIG9yIGVtYWlsIGFkZHJlc3MgdG8gY29udmVydCwgYXMgYVxuXHQgKiBVbmljb2RlIHN0cmluZy5cblx0ICogQHJldHVybnMge1N0cmluZ30gVGhlIFB1bnljb2RlIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBnaXZlbiBkb21haW4gbmFtZSBvclxuXHQgKiBlbWFpbCBhZGRyZXNzLlxuXHQgKi9cblx0ZnVuY3Rpb24gdG9BU0NJSShpbnB1dCkge1xuXHRcdHJldHVybiBtYXBEb21haW4oaW5wdXQsIGZ1bmN0aW9uKHN0cmluZykge1xuXHRcdFx0cmV0dXJuIHJlZ2V4Tm9uQVNDSUkudGVzdChzdHJpbmcpXG5cdFx0XHRcdD8gJ3huLS0nICsgZW5jb2RlKHN0cmluZylcblx0XHRcdFx0OiBzdHJpbmc7XG5cdFx0fSk7XG5cdH1cblxuXHQvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cblxuXHQvKiogRGVmaW5lIHRoZSBwdWJsaWMgQVBJICovXG5cdHB1bnljb2RlID0ge1xuXHRcdC8qKlxuXHRcdCAqIEEgc3RyaW5nIHJlcHJlc2VudGluZyB0aGUgY3VycmVudCBQdW55Y29kZS5qcyB2ZXJzaW9uIG51bWJlci5cblx0XHQgKiBAbWVtYmVyT2YgcHVueWNvZGVcblx0XHQgKiBAdHlwZSBTdHJpbmdcblx0XHQgKi9cblx0XHQndmVyc2lvbic6ICcxLjMuMicsXG5cdFx0LyoqXG5cdFx0ICogQW4gb2JqZWN0IG9mIG1ldGhvZHMgdG8gY29udmVydCBmcm9tIEphdmFTY3JpcHQncyBpbnRlcm5hbCBjaGFyYWN0ZXJcblx0XHQgKiByZXByZXNlbnRhdGlvbiAoVUNTLTIpIHRvIFVuaWNvZGUgY29kZSBwb2ludHMsIGFuZCBiYWNrLlxuXHRcdCAqIEBzZWUgPGh0dHBzOi8vbWF0aGlhc2J5bmVucy5iZS9ub3Rlcy9qYXZhc2NyaXB0LWVuY29kaW5nPlxuXHRcdCAqIEBtZW1iZXJPZiBwdW55Y29kZVxuXHRcdCAqIEB0eXBlIE9iamVjdFxuXHRcdCAqL1xuXHRcdCd1Y3MyJzoge1xuXHRcdFx0J2RlY29kZSc6IHVjczJkZWNvZGUsXG5cdFx0XHQnZW5jb2RlJzogdWNzMmVuY29kZVxuXHRcdH0sXG5cdFx0J2RlY29kZSc6IGRlY29kZSxcblx0XHQnZW5jb2RlJzogZW5jb2RlLFxuXHRcdCd0b0FTQ0lJJzogdG9BU0NJSSxcblx0XHQndG9Vbmljb2RlJzogdG9Vbmljb2RlXG5cdH07XG5cblx0LyoqIEV4cG9zZSBgcHVueWNvZGVgICovXG5cdC8vIFNvbWUgQU1EIGJ1aWxkIG9wdGltaXplcnMsIGxpa2Ugci5qcywgY2hlY2sgZm9yIHNwZWNpZmljIGNvbmRpdGlvbiBwYXR0ZXJuc1xuXHQvLyBsaWtlIHRoZSBmb2xsb3dpbmc6XG5cdGlmIChcblx0XHR0eXBlb2YgZGVmaW5lID09ICdmdW5jdGlvbicgJiZcblx0XHR0eXBlb2YgZGVmaW5lLmFtZCA9PSAnb2JqZWN0JyAmJlxuXHRcdGRlZmluZS5hbWRcblx0KSB7XG5cdFx0ZGVmaW5lKCdwdW55Y29kZScsIGZ1bmN0aW9uKCkge1xuXHRcdFx0cmV0dXJuIHB1bnljb2RlO1xuXHRcdH0pO1xuXHR9IGVsc2UgaWYgKGZyZWVFeHBvcnRzICYmIGZyZWVNb2R1bGUpIHtcblx0XHRpZiAobW9kdWxlLmV4cG9ydHMgPT0gZnJlZUV4cG9ydHMpIHtcblx0XHRcdC8vIGluIE5vZGUuanMsIGlvLmpzLCBvciBSaW5nb0pTIHYwLjguMCtcblx0XHRcdGZyZWVNb2R1bGUuZXhwb3J0cyA9IHB1bnljb2RlO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHQvLyBpbiBOYXJ3aGFsIG9yIFJpbmdvSlMgdjAuNy4wLVxuXHRcdFx0Zm9yIChrZXkgaW4gcHVueWNvZGUpIHtcblx0XHRcdFx0cHVueWNvZGUuaGFzT3duUHJvcGVydHkoa2V5KSAmJiAoZnJlZUV4cG9ydHNba2V5XSA9IHB1bnljb2RlW2tleV0pO1xuXHRcdFx0fVxuXHRcdH1cblx0fSBlbHNlIHtcblx0XHQvLyBpbiBSaGlubyBvciBhIHdlYiBicm93c2VyXG5cdFx0cm9vdC5wdW55Y29kZSA9IHB1bnljb2RlO1xuXHR9XG5cbn0odGhpcykpO1xuIiwiLy8gQ29weXJpZ2h0IEpveWVudCwgSW5jLiBhbmQgb3RoZXIgTm9kZSBjb250cmlidXRvcnMuXG4vL1xuLy8gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGFcbi8vIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGVcbi8vIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZ1xuLy8gd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLFxuLy8gZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdFxuLy8gcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlXG4vLyBmb2xsb3dpbmcgY29uZGl0aW9uczpcbi8vXG4vLyBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZFxuLy8gaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4vL1xuLy8gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTU1xuLy8gT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRlxuLy8gTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTlxuLy8gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sXG4vLyBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1Jcbi8vIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEVcbi8vIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG5cbid1c2Ugc3RyaWN0JztcblxuLy8gSWYgb2JqLmhhc093blByb3BlcnR5IGhhcyBiZWVuIG92ZXJyaWRkZW4sIHRoZW4gY2FsbGluZ1xuLy8gb2JqLmhhc093blByb3BlcnR5KHByb3ApIHdpbGwgYnJlYWsuXG4vLyBTZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9qb3llbnQvbm9kZS9pc3N1ZXMvMTcwN1xuZnVuY3Rpb24gaGFzT3duUHJvcGVydHkob2JqLCBwcm9wKSB7XG4gIHJldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqLCBwcm9wKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihxcywgc2VwLCBlcSwgb3B0aW9ucykge1xuICBzZXAgPSBzZXAgfHwgJyYnO1xuICBlcSA9IGVxIHx8ICc9JztcbiAgdmFyIG9iaiA9IHt9O1xuXG4gIGlmICh0eXBlb2YgcXMgIT09ICdzdHJpbmcnIHx8IHFzLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiBvYmo7XG4gIH1cblxuICB2YXIgcmVnZXhwID0gL1xcKy9nO1xuICBxcyA9IHFzLnNwbGl0KHNlcCk7XG5cbiAgdmFyIG1heEtleXMgPSAxMDAwO1xuICBpZiAob3B0aW9ucyAmJiB0eXBlb2Ygb3B0aW9ucy5tYXhLZXlzID09PSAnbnVtYmVyJykge1xuICAgIG1heEtleXMgPSBvcHRpb25zLm1heEtleXM7XG4gIH1cblxuICB2YXIgbGVuID0gcXMubGVuZ3RoO1xuICAvLyBtYXhLZXlzIDw9IDAgbWVhbnMgdGhhdCB3ZSBzaG91bGQgbm90IGxpbWl0IGtleXMgY291bnRcbiAgaWYgKG1heEtleXMgPiAwICYmIGxlbiA+IG1heEtleXMpIHtcbiAgICBsZW4gPSBtYXhLZXlzO1xuICB9XG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47ICsraSkge1xuICAgIHZhciB4ID0gcXNbaV0ucmVwbGFjZShyZWdleHAsICclMjAnKSxcbiAgICAgICAgaWR4ID0geC5pbmRleE9mKGVxKSxcbiAgICAgICAga3N0ciwgdnN0ciwgaywgdjtcblxuICAgIGlmIChpZHggPj0gMCkge1xuICAgICAga3N0ciA9IHguc3Vic3RyKDAsIGlkeCk7XG4gICAgICB2c3RyID0geC5zdWJzdHIoaWR4ICsgMSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGtzdHIgPSB4O1xuICAgICAgdnN0ciA9ICcnO1xuICAgIH1cblxuICAgIGsgPSBkZWNvZGVVUklDb21wb25lbnQoa3N0cik7XG4gICAgdiA9IGRlY29kZVVSSUNvbXBvbmVudCh2c3RyKTtcblxuICAgIGlmICghaGFzT3duUHJvcGVydHkob2JqLCBrKSkge1xuICAgICAgb2JqW2tdID0gdjtcbiAgICB9IGVsc2UgaWYgKGlzQXJyYXkob2JqW2tdKSkge1xuICAgICAgb2JqW2tdLnB1c2godik7XG4gICAgfSBlbHNlIHtcbiAgICAgIG9ialtrXSA9IFtvYmpba10sIHZdO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBvYmo7XG59O1xuXG52YXIgaXNBcnJheSA9IEFycmF5LmlzQXJyYXkgfHwgZnVuY3Rpb24gKHhzKSB7XG4gIHJldHVybiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoeHMpID09PSAnW29iamVjdCBBcnJheV0nO1xufTtcbiIsIi8vIENvcHlyaWdodCBKb3llbnQsIEluYy4gYW5kIG90aGVyIE5vZGUgY29udHJpYnV0b3JzLlxuLy9cbi8vIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhXG4vLyBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlXG4vLyBcIlNvZnR3YXJlXCIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmdcbi8vIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCxcbi8vIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXRcbi8vIHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZVxuLy8gZm9sbG93aW5nIGNvbmRpdGlvbnM6XG4vL1xuLy8gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWRcbi8vIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuLy9cbi8vIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1Ncbi8vIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0Zcbi8vIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU5cbi8vIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLFxuLy8gREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SXG4vLyBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFXG4vLyBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLlxuXG4ndXNlIHN0cmljdCc7XG5cbnZhciBzdHJpbmdpZnlQcmltaXRpdmUgPSBmdW5jdGlvbih2KSB7XG4gIHN3aXRjaCAodHlwZW9mIHYpIHtcbiAgICBjYXNlICdzdHJpbmcnOlxuICAgICAgcmV0dXJuIHY7XG5cbiAgICBjYXNlICdib29sZWFuJzpcbiAgICAgIHJldHVybiB2ID8gJ3RydWUnIDogJ2ZhbHNlJztcblxuICAgIGNhc2UgJ251bWJlcic6XG4gICAgICByZXR1cm4gaXNGaW5pdGUodikgPyB2IDogJyc7XG5cbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuICcnO1xuICB9XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKG9iaiwgc2VwLCBlcSwgbmFtZSkge1xuICBzZXAgPSBzZXAgfHwgJyYnO1xuICBlcSA9IGVxIHx8ICc9JztcbiAgaWYgKG9iaiA9PT0gbnVsbCkge1xuICAgIG9iaiA9IHVuZGVmaW5lZDtcbiAgfVxuXG4gIGlmICh0eXBlb2Ygb2JqID09PSAnb2JqZWN0Jykge1xuICAgIHJldHVybiBtYXAob2JqZWN0S2V5cyhvYmopLCBmdW5jdGlvbihrKSB7XG4gICAgICB2YXIga3MgPSBlbmNvZGVVUklDb21wb25lbnQoc3RyaW5naWZ5UHJpbWl0aXZlKGspKSArIGVxO1xuICAgICAgaWYgKGlzQXJyYXkob2JqW2tdKSkge1xuICAgICAgICByZXR1cm4gbWFwKG9ialtrXSwgZnVuY3Rpb24odikge1xuICAgICAgICAgIHJldHVybiBrcyArIGVuY29kZVVSSUNvbXBvbmVudChzdHJpbmdpZnlQcmltaXRpdmUodikpO1xuICAgICAgICB9KS5qb2luKHNlcCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4ga3MgKyBlbmNvZGVVUklDb21wb25lbnQoc3RyaW5naWZ5UHJpbWl0aXZlKG9ialtrXSkpO1xuICAgICAgfVxuICAgIH0pLmpvaW4oc2VwKTtcblxuICB9XG5cbiAgaWYgKCFuYW1lKSByZXR1cm4gJyc7XG4gIHJldHVybiBlbmNvZGVVUklDb21wb25lbnQoc3RyaW5naWZ5UHJpbWl0aXZlKG5hbWUpKSArIGVxICtcbiAgICAgICAgIGVuY29kZVVSSUNvbXBvbmVudChzdHJpbmdpZnlQcmltaXRpdmUob2JqKSk7XG59O1xuXG52YXIgaXNBcnJheSA9IEFycmF5LmlzQXJyYXkgfHwgZnVuY3Rpb24gKHhzKSB7XG4gIHJldHVybiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoeHMpID09PSAnW29iamVjdCBBcnJheV0nO1xufTtcblxuZnVuY3Rpb24gbWFwICh4cywgZikge1xuICBpZiAoeHMubWFwKSByZXR1cm4geHMubWFwKGYpO1xuICB2YXIgcmVzID0gW107XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgeHMubGVuZ3RoOyBpKyspIHtcbiAgICByZXMucHVzaChmKHhzW2ldLCBpKSk7XG4gIH1cbiAgcmV0dXJuIHJlcztcbn1cblxudmFyIG9iamVjdEtleXMgPSBPYmplY3Qua2V5cyB8fCBmdW5jdGlvbiAob2JqKSB7XG4gIHZhciByZXMgPSBbXTtcbiAgZm9yICh2YXIga2V5IGluIG9iaikge1xuICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqLCBrZXkpKSByZXMucHVzaChrZXkpO1xuICB9XG4gIHJldHVybiByZXM7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG5leHBvcnRzLmRlY29kZSA9IGV4cG9ydHMucGFyc2UgPSByZXF1aXJlKCcuL2RlY29kZScpO1xuZXhwb3J0cy5lbmNvZGUgPSBleHBvcnRzLnN0cmluZ2lmeSA9IHJlcXVpcmUoJy4vZW5jb2RlJyk7XG4iLCIvLyBDb3B5cmlnaHQgSm95ZW50LCBJbmMuIGFuZCBvdGhlciBOb2RlIGNvbnRyaWJ1dG9ycy5cbi8vXG4vLyBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYVxuLy8gY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZVxuLy8gXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nXG4vLyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsXG4vLyBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0XG4vLyBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGVcbi8vIGZvbGxvd2luZyBjb25kaXRpb25zOlxuLy9cbi8vIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkXG4vLyBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbi8vXG4vLyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTXG4vLyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GXG4vLyBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOXG4vLyBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSxcbi8vIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUlxuLy8gT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRVxuLy8gVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cblxudmFyIHB1bnljb2RlID0gcmVxdWlyZSgncHVueWNvZGUnKTtcblxuZXhwb3J0cy5wYXJzZSA9IHVybFBhcnNlO1xuZXhwb3J0cy5yZXNvbHZlID0gdXJsUmVzb2x2ZTtcbmV4cG9ydHMucmVzb2x2ZU9iamVjdCA9IHVybFJlc29sdmVPYmplY3Q7XG5leHBvcnRzLmZvcm1hdCA9IHVybEZvcm1hdDtcblxuZXhwb3J0cy5VcmwgPSBVcmw7XG5cbmZ1bmN0aW9uIFVybCgpIHtcbiAgdGhpcy5wcm90b2NvbCA9IG51bGw7XG4gIHRoaXMuc2xhc2hlcyA9IG51bGw7XG4gIHRoaXMuYXV0aCA9IG51bGw7XG4gIHRoaXMuaG9zdCA9IG51bGw7XG4gIHRoaXMucG9ydCA9IG51bGw7XG4gIHRoaXMuaG9zdG5hbWUgPSBudWxsO1xuICB0aGlzLmhhc2ggPSBudWxsO1xuICB0aGlzLnNlYXJjaCA9IG51bGw7XG4gIHRoaXMucXVlcnkgPSBudWxsO1xuICB0aGlzLnBhdGhuYW1lID0gbnVsbDtcbiAgdGhpcy5wYXRoID0gbnVsbDtcbiAgdGhpcy5ocmVmID0gbnVsbDtcbn1cblxuLy8gUmVmZXJlbmNlOiBSRkMgMzk4NiwgUkZDIDE4MDgsIFJGQyAyMzk2XG5cbi8vIGRlZmluZSB0aGVzZSBoZXJlIHNvIGF0IGxlYXN0IHRoZXkgb25seSBoYXZlIHRvIGJlXG4vLyBjb21waWxlZCBvbmNlIG9uIHRoZSBmaXJzdCBtb2R1bGUgbG9hZC5cbnZhciBwcm90b2NvbFBhdHRlcm4gPSAvXihbYS16MC05ListXSs6KS9pLFxuICAgIHBvcnRQYXR0ZXJuID0gLzpbMC05XSokLyxcblxuICAgIC8vIFJGQyAyMzk2OiBjaGFyYWN0ZXJzIHJlc2VydmVkIGZvciBkZWxpbWl0aW5nIFVSTHMuXG4gICAgLy8gV2UgYWN0dWFsbHkganVzdCBhdXRvLWVzY2FwZSB0aGVzZS5cbiAgICBkZWxpbXMgPSBbJzwnLCAnPicsICdcIicsICdgJywgJyAnLCAnXFxyJywgJ1xcbicsICdcXHQnXSxcblxuICAgIC8vIFJGQyAyMzk2OiBjaGFyYWN0ZXJzIG5vdCBhbGxvd2VkIGZvciB2YXJpb3VzIHJlYXNvbnMuXG4gICAgdW53aXNlID0gWyd7JywgJ30nLCAnfCcsICdcXFxcJywgJ14nLCAnYCddLmNvbmNhdChkZWxpbXMpLFxuXG4gICAgLy8gQWxsb3dlZCBieSBSRkNzLCBidXQgY2F1c2Ugb2YgWFNTIGF0dGFja3MuICBBbHdheXMgZXNjYXBlIHRoZXNlLlxuICAgIGF1dG9Fc2NhcGUgPSBbJ1xcJyddLmNvbmNhdCh1bndpc2UpLFxuICAgIC8vIENoYXJhY3RlcnMgdGhhdCBhcmUgbmV2ZXIgZXZlciBhbGxvd2VkIGluIGEgaG9zdG5hbWUuXG4gICAgLy8gTm90ZSB0aGF0IGFueSBpbnZhbGlkIGNoYXJzIGFyZSBhbHNvIGhhbmRsZWQsIGJ1dCB0aGVzZVxuICAgIC8vIGFyZSB0aGUgb25lcyB0aGF0IGFyZSAqZXhwZWN0ZWQqIHRvIGJlIHNlZW4sIHNvIHdlIGZhc3QtcGF0aFxuICAgIC8vIHRoZW0uXG4gICAgbm9uSG9zdENoYXJzID0gWyclJywgJy8nLCAnPycsICc7JywgJyMnXS5jb25jYXQoYXV0b0VzY2FwZSksXG4gICAgaG9zdEVuZGluZ0NoYXJzID0gWycvJywgJz8nLCAnIyddLFxuICAgIGhvc3RuYW1lTWF4TGVuID0gMjU1LFxuICAgIGhvc3RuYW1lUGFydFBhdHRlcm4gPSAvXlthLXowLTlBLVpfLV17MCw2M30kLyxcbiAgICBob3N0bmFtZVBhcnRTdGFydCA9IC9eKFthLXowLTlBLVpfLV17MCw2M30pKC4qKSQvLFxuICAgIC8vIHByb3RvY29scyB0aGF0IGNhbiBhbGxvdyBcInVuc2FmZVwiIGFuZCBcInVud2lzZVwiIGNoYXJzLlxuICAgIHVuc2FmZVByb3RvY29sID0ge1xuICAgICAgJ2phdmFzY3JpcHQnOiB0cnVlLFxuICAgICAgJ2phdmFzY3JpcHQ6JzogdHJ1ZVxuICAgIH0sXG4gICAgLy8gcHJvdG9jb2xzIHRoYXQgbmV2ZXIgaGF2ZSBhIGhvc3RuYW1lLlxuICAgIGhvc3RsZXNzUHJvdG9jb2wgPSB7XG4gICAgICAnamF2YXNjcmlwdCc6IHRydWUsXG4gICAgICAnamF2YXNjcmlwdDonOiB0cnVlXG4gICAgfSxcbiAgICAvLyBwcm90b2NvbHMgdGhhdCBhbHdheXMgY29udGFpbiBhIC8vIGJpdC5cbiAgICBzbGFzaGVkUHJvdG9jb2wgPSB7XG4gICAgICAnaHR0cCc6IHRydWUsXG4gICAgICAnaHR0cHMnOiB0cnVlLFxuICAgICAgJ2Z0cCc6IHRydWUsXG4gICAgICAnZ29waGVyJzogdHJ1ZSxcbiAgICAgICdmaWxlJzogdHJ1ZSxcbiAgICAgICdodHRwOic6IHRydWUsXG4gICAgICAnaHR0cHM6JzogdHJ1ZSxcbiAgICAgICdmdHA6JzogdHJ1ZSxcbiAgICAgICdnb3BoZXI6JzogdHJ1ZSxcbiAgICAgICdmaWxlOic6IHRydWVcbiAgICB9LFxuICAgIHF1ZXJ5c3RyaW5nID0gcmVxdWlyZSgncXVlcnlzdHJpbmcnKTtcblxuZnVuY3Rpb24gdXJsUGFyc2UodXJsLCBwYXJzZVF1ZXJ5U3RyaW5nLCBzbGFzaGVzRGVub3RlSG9zdCkge1xuICBpZiAodXJsICYmIGlzT2JqZWN0KHVybCkgJiYgdXJsIGluc3RhbmNlb2YgVXJsKSByZXR1cm4gdXJsO1xuXG4gIHZhciB1ID0gbmV3IFVybDtcbiAgdS5wYXJzZSh1cmwsIHBhcnNlUXVlcnlTdHJpbmcsIHNsYXNoZXNEZW5vdGVIb3N0KTtcbiAgcmV0dXJuIHU7XG59XG5cblVybC5wcm90b3R5cGUucGFyc2UgPSBmdW5jdGlvbih1cmwsIHBhcnNlUXVlcnlTdHJpbmcsIHNsYXNoZXNEZW5vdGVIb3N0KSB7XG4gIGlmICghaXNTdHJpbmcodXJsKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJQYXJhbWV0ZXIgJ3VybCcgbXVzdCBiZSBhIHN0cmluZywgbm90IFwiICsgdHlwZW9mIHVybCk7XG4gIH1cblxuICB2YXIgcmVzdCA9IHVybDtcblxuICAvLyB0cmltIGJlZm9yZSBwcm9jZWVkaW5nLlxuICAvLyBUaGlzIGlzIHRvIHN1cHBvcnQgcGFyc2Ugc3R1ZmYgbGlrZSBcIiAgaHR0cDovL2Zvby5jb20gIFxcblwiXG4gIHJlc3QgPSByZXN0LnRyaW0oKTtcblxuICB2YXIgcHJvdG8gPSBwcm90b2NvbFBhdHRlcm4uZXhlYyhyZXN0KTtcbiAgaWYgKHByb3RvKSB7XG4gICAgcHJvdG8gPSBwcm90b1swXTtcbiAgICB2YXIgbG93ZXJQcm90byA9IHByb3RvLnRvTG93ZXJDYXNlKCk7XG4gICAgdGhpcy5wcm90b2NvbCA9IGxvd2VyUHJvdG87XG4gICAgcmVzdCA9IHJlc3Quc3Vic3RyKHByb3RvLmxlbmd0aCk7XG4gIH1cblxuICAvLyBmaWd1cmUgb3V0IGlmIGl0J3MgZ290IGEgaG9zdFxuICAvLyB1c2VyQHNlcnZlciBpcyAqYWx3YXlzKiBpbnRlcnByZXRlZCBhcyBhIGhvc3RuYW1lLCBhbmQgdXJsXG4gIC8vIHJlc29sdXRpb24gd2lsbCB0cmVhdCAvL2Zvby9iYXIgYXMgaG9zdD1mb28scGF0aD1iYXIgYmVjYXVzZSB0aGF0J3NcbiAgLy8gaG93IHRoZSBicm93c2VyIHJlc29sdmVzIHJlbGF0aXZlIFVSTHMuXG4gIGlmIChzbGFzaGVzRGVub3RlSG9zdCB8fCBwcm90byB8fCByZXN0Lm1hdGNoKC9eXFwvXFwvW15AXFwvXStAW15AXFwvXSsvKSkge1xuICAgIHZhciBzbGFzaGVzID0gcmVzdC5zdWJzdHIoMCwgMikgPT09ICcvLyc7XG4gICAgaWYgKHNsYXNoZXMgJiYgIShwcm90byAmJiBob3N0bGVzc1Byb3RvY29sW3Byb3RvXSkpIHtcbiAgICAgIHJlc3QgPSByZXN0LnN1YnN0cigyKTtcbiAgICAgIHRoaXMuc2xhc2hlcyA9IHRydWU7XG4gICAgfVxuICB9XG5cbiAgaWYgKCFob3N0bGVzc1Byb3RvY29sW3Byb3RvXSAmJlxuICAgICAgKHNsYXNoZXMgfHwgKHByb3RvICYmICFzbGFzaGVkUHJvdG9jb2xbcHJvdG9dKSkpIHtcblxuICAgIC8vIHRoZXJlJ3MgYSBob3N0bmFtZS5cbiAgICAvLyB0aGUgZmlyc3QgaW5zdGFuY2Ugb2YgLywgPywgOywgb3IgIyBlbmRzIHRoZSBob3N0LlxuICAgIC8vXG4gICAgLy8gSWYgdGhlcmUgaXMgYW4gQCBpbiB0aGUgaG9zdG5hbWUsIHRoZW4gbm9uLWhvc3QgY2hhcnMgKmFyZSogYWxsb3dlZFxuICAgIC8vIHRvIHRoZSBsZWZ0IG9mIHRoZSBsYXN0IEAgc2lnbiwgdW5sZXNzIHNvbWUgaG9zdC1lbmRpbmcgY2hhcmFjdGVyXG4gICAgLy8gY29tZXMgKmJlZm9yZSogdGhlIEAtc2lnbi5cbiAgICAvLyBVUkxzIGFyZSBvYm5veGlvdXMuXG4gICAgLy9cbiAgICAvLyBleDpcbiAgICAvLyBodHRwOi8vYUBiQGMvID0+IHVzZXI6YUBiIGhvc3Q6Y1xuICAgIC8vIGh0dHA6Ly9hQGI/QGMgPT4gdXNlcjphIGhvc3Q6YyBwYXRoOi8/QGNcblxuICAgIC8vIHYwLjEyIFRPRE8oaXNhYWNzKTogVGhpcyBpcyBub3QgcXVpdGUgaG93IENocm9tZSBkb2VzIHRoaW5ncy5cbiAgICAvLyBSZXZpZXcgb3VyIHRlc3QgY2FzZSBhZ2FpbnN0IGJyb3dzZXJzIG1vcmUgY29tcHJlaGVuc2l2ZWx5LlxuXG4gICAgLy8gZmluZCB0aGUgZmlyc3QgaW5zdGFuY2Ugb2YgYW55IGhvc3RFbmRpbmdDaGFyc1xuICAgIHZhciBob3N0RW5kID0gLTE7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBob3N0RW5kaW5nQ2hhcnMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBoZWMgPSByZXN0LmluZGV4T2YoaG9zdEVuZGluZ0NoYXJzW2ldKTtcbiAgICAgIGlmIChoZWMgIT09IC0xICYmIChob3N0RW5kID09PSAtMSB8fCBoZWMgPCBob3N0RW5kKSlcbiAgICAgICAgaG9zdEVuZCA9IGhlYztcbiAgICB9XG5cbiAgICAvLyBhdCB0aGlzIHBvaW50LCBlaXRoZXIgd2UgaGF2ZSBhbiBleHBsaWNpdCBwb2ludCB3aGVyZSB0aGVcbiAgICAvLyBhdXRoIHBvcnRpb24gY2Fubm90IGdvIHBhc3QsIG9yIHRoZSBsYXN0IEAgY2hhciBpcyB0aGUgZGVjaWRlci5cbiAgICB2YXIgYXV0aCwgYXRTaWduO1xuICAgIGlmIChob3N0RW5kID09PSAtMSkge1xuICAgICAgLy8gYXRTaWduIGNhbiBiZSBhbnl3aGVyZS5cbiAgICAgIGF0U2lnbiA9IHJlc3QubGFzdEluZGV4T2YoJ0AnKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gYXRTaWduIG11c3QgYmUgaW4gYXV0aCBwb3J0aW9uLlxuICAgICAgLy8gaHR0cDovL2FAYi9jQGQgPT4gaG9zdDpiIGF1dGg6YSBwYXRoOi9jQGRcbiAgICAgIGF0U2lnbiA9IHJlc3QubGFzdEluZGV4T2YoJ0AnLCBob3N0RW5kKTtcbiAgICB9XG5cbiAgICAvLyBOb3cgd2UgaGF2ZSBhIHBvcnRpb24gd2hpY2ggaXMgZGVmaW5pdGVseSB0aGUgYXV0aC5cbiAgICAvLyBQdWxsIHRoYXQgb2ZmLlxuICAgIGlmIChhdFNpZ24gIT09IC0xKSB7XG4gICAgICBhdXRoID0gcmVzdC5zbGljZSgwLCBhdFNpZ24pO1xuICAgICAgcmVzdCA9IHJlc3Quc2xpY2UoYXRTaWduICsgMSk7XG4gICAgICB0aGlzLmF1dGggPSBkZWNvZGVVUklDb21wb25lbnQoYXV0aCk7XG4gICAgfVxuXG4gICAgLy8gdGhlIGhvc3QgaXMgdGhlIHJlbWFpbmluZyB0byB0aGUgbGVmdCBvZiB0aGUgZmlyc3Qgbm9uLWhvc3QgY2hhclxuICAgIGhvc3RFbmQgPSAtMTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG5vbkhvc3RDaGFycy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGhlYyA9IHJlc3QuaW5kZXhPZihub25Ib3N0Q2hhcnNbaV0pO1xuICAgICAgaWYgKGhlYyAhPT0gLTEgJiYgKGhvc3RFbmQgPT09IC0xIHx8IGhlYyA8IGhvc3RFbmQpKVxuICAgICAgICBob3N0RW5kID0gaGVjO1xuICAgIH1cbiAgICAvLyBpZiB3ZSBzdGlsbCBoYXZlIG5vdCBoaXQgaXQsIHRoZW4gdGhlIGVudGlyZSB0aGluZyBpcyBhIGhvc3QuXG4gICAgaWYgKGhvc3RFbmQgPT09IC0xKVxuICAgICAgaG9zdEVuZCA9IHJlc3QubGVuZ3RoO1xuXG4gICAgdGhpcy5ob3N0ID0gcmVzdC5zbGljZSgwLCBob3N0RW5kKTtcbiAgICByZXN0ID0gcmVzdC5zbGljZShob3N0RW5kKTtcblxuICAgIC8vIHB1bGwgb3V0IHBvcnQuXG4gICAgdGhpcy5wYXJzZUhvc3QoKTtcblxuICAgIC8vIHdlJ3ZlIGluZGljYXRlZCB0aGF0IHRoZXJlIGlzIGEgaG9zdG5hbWUsXG4gICAgLy8gc28gZXZlbiBpZiBpdCdzIGVtcHR5LCBpdCBoYXMgdG8gYmUgcHJlc2VudC5cbiAgICB0aGlzLmhvc3RuYW1lID0gdGhpcy5ob3N0bmFtZSB8fCAnJztcblxuICAgIC8vIGlmIGhvc3RuYW1lIGJlZ2lucyB3aXRoIFsgYW5kIGVuZHMgd2l0aCBdXG4gICAgLy8gYXNzdW1lIHRoYXQgaXQncyBhbiBJUHY2IGFkZHJlc3MuXG4gICAgdmFyIGlwdjZIb3N0bmFtZSA9IHRoaXMuaG9zdG5hbWVbMF0gPT09ICdbJyAmJlxuICAgICAgICB0aGlzLmhvc3RuYW1lW3RoaXMuaG9zdG5hbWUubGVuZ3RoIC0gMV0gPT09ICddJztcblxuICAgIC8vIHZhbGlkYXRlIGEgbGl0dGxlLlxuICAgIGlmICghaXB2Nkhvc3RuYW1lKSB7XG4gICAgICB2YXIgaG9zdHBhcnRzID0gdGhpcy5ob3N0bmFtZS5zcGxpdCgvXFwuLyk7XG4gICAgICBmb3IgKHZhciBpID0gMCwgbCA9IGhvc3RwYXJ0cy5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICAgICAgdmFyIHBhcnQgPSBob3N0cGFydHNbaV07XG4gICAgICAgIGlmICghcGFydCkgY29udGludWU7XG4gICAgICAgIGlmICghcGFydC5tYXRjaChob3N0bmFtZVBhcnRQYXR0ZXJuKSkge1xuICAgICAgICAgIHZhciBuZXdwYXJ0ID0gJyc7XG4gICAgICAgICAgZm9yICh2YXIgaiA9IDAsIGsgPSBwYXJ0Lmxlbmd0aDsgaiA8IGs7IGorKykge1xuICAgICAgICAgICAgaWYgKHBhcnQuY2hhckNvZGVBdChqKSA+IDEyNykge1xuICAgICAgICAgICAgICAvLyB3ZSByZXBsYWNlIG5vbi1BU0NJSSBjaGFyIHdpdGggYSB0ZW1wb3JhcnkgcGxhY2Vob2xkZXJcbiAgICAgICAgICAgICAgLy8gd2UgbmVlZCB0aGlzIHRvIG1ha2Ugc3VyZSBzaXplIG9mIGhvc3RuYW1lIGlzIG5vdFxuICAgICAgICAgICAgICAvLyBicm9rZW4gYnkgcmVwbGFjaW5nIG5vbi1BU0NJSSBieSBub3RoaW5nXG4gICAgICAgICAgICAgIG5ld3BhcnQgKz0gJ3gnO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgbmV3cGFydCArPSBwYXJ0W2pdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICAvLyB3ZSB0ZXN0IGFnYWluIHdpdGggQVNDSUkgY2hhciBvbmx5XG4gICAgICAgICAgaWYgKCFuZXdwYXJ0Lm1hdGNoKGhvc3RuYW1lUGFydFBhdHRlcm4pKSB7XG4gICAgICAgICAgICB2YXIgdmFsaWRQYXJ0cyA9IGhvc3RwYXJ0cy5zbGljZSgwLCBpKTtcbiAgICAgICAgICAgIHZhciBub3RIb3N0ID0gaG9zdHBhcnRzLnNsaWNlKGkgKyAxKTtcbiAgICAgICAgICAgIHZhciBiaXQgPSBwYXJ0Lm1hdGNoKGhvc3RuYW1lUGFydFN0YXJ0KTtcbiAgICAgICAgICAgIGlmIChiaXQpIHtcbiAgICAgICAgICAgICAgdmFsaWRQYXJ0cy5wdXNoKGJpdFsxXSk7XG4gICAgICAgICAgICAgIG5vdEhvc3QudW5zaGlmdChiaXRbMl0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKG5vdEhvc3QubGVuZ3RoKSB7XG4gICAgICAgICAgICAgIHJlc3QgPSAnLycgKyBub3RIb3N0LmpvaW4oJy4nKSArIHJlc3Q7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmhvc3RuYW1lID0gdmFsaWRQYXJ0cy5qb2luKCcuJyk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodGhpcy5ob3N0bmFtZS5sZW5ndGggPiBob3N0bmFtZU1heExlbikge1xuICAgICAgdGhpcy5ob3N0bmFtZSA9ICcnO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBob3N0bmFtZXMgYXJlIGFsd2F5cyBsb3dlciBjYXNlLlxuICAgICAgdGhpcy5ob3N0bmFtZSA9IHRoaXMuaG9zdG5hbWUudG9Mb3dlckNhc2UoKTtcbiAgICB9XG5cbiAgICBpZiAoIWlwdjZIb3N0bmFtZSkge1xuICAgICAgLy8gSUROQSBTdXBwb3J0OiBSZXR1cm5zIGEgcHVueSBjb2RlZCByZXByZXNlbnRhdGlvbiBvZiBcImRvbWFpblwiLlxuICAgICAgLy8gSXQgb25seSBjb252ZXJ0cyB0aGUgcGFydCBvZiB0aGUgZG9tYWluIG5hbWUgdGhhdFxuICAgICAgLy8gaGFzIG5vbiBBU0NJSSBjaGFyYWN0ZXJzLiBJLmUuIGl0IGRvc2VudCBtYXR0ZXIgaWZcbiAgICAgIC8vIHlvdSBjYWxsIGl0IHdpdGggYSBkb21haW4gdGhhdCBhbHJlYWR5IGlzIGluIEFTQ0lJLlxuICAgICAgdmFyIGRvbWFpbkFycmF5ID0gdGhpcy5ob3N0bmFtZS5zcGxpdCgnLicpO1xuICAgICAgdmFyIG5ld091dCA9IFtdO1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBkb21haW5BcnJheS5sZW5ndGg7ICsraSkge1xuICAgICAgICB2YXIgcyA9IGRvbWFpbkFycmF5W2ldO1xuICAgICAgICBuZXdPdXQucHVzaChzLm1hdGNoKC9bXkEtWmEtejAtOV8tXS8pID9cbiAgICAgICAgICAgICd4bi0tJyArIHB1bnljb2RlLmVuY29kZShzKSA6IHMpO1xuICAgICAgfVxuICAgICAgdGhpcy5ob3N0bmFtZSA9IG5ld091dC5qb2luKCcuJyk7XG4gICAgfVxuXG4gICAgdmFyIHAgPSB0aGlzLnBvcnQgPyAnOicgKyB0aGlzLnBvcnQgOiAnJztcbiAgICB2YXIgaCA9IHRoaXMuaG9zdG5hbWUgfHwgJyc7XG4gICAgdGhpcy5ob3N0ID0gaCArIHA7XG4gICAgdGhpcy5ocmVmICs9IHRoaXMuaG9zdDtcblxuICAgIC8vIHN0cmlwIFsgYW5kIF0gZnJvbSB0aGUgaG9zdG5hbWVcbiAgICAvLyB0aGUgaG9zdCBmaWVsZCBzdGlsbCByZXRhaW5zIHRoZW0sIHRob3VnaFxuICAgIGlmIChpcHY2SG9zdG5hbWUpIHtcbiAgICAgIHRoaXMuaG9zdG5hbWUgPSB0aGlzLmhvc3RuYW1lLnN1YnN0cigxLCB0aGlzLmhvc3RuYW1lLmxlbmd0aCAtIDIpO1xuICAgICAgaWYgKHJlc3RbMF0gIT09ICcvJykge1xuICAgICAgICByZXN0ID0gJy8nICsgcmVzdDtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyBub3cgcmVzdCBpcyBzZXQgdG8gdGhlIHBvc3QtaG9zdCBzdHVmZi5cbiAgLy8gY2hvcCBvZmYgYW55IGRlbGltIGNoYXJzLlxuICBpZiAoIXVuc2FmZVByb3RvY29sW2xvd2VyUHJvdG9dKSB7XG5cbiAgICAvLyBGaXJzdCwgbWFrZSAxMDAlIHN1cmUgdGhhdCBhbnkgXCJhdXRvRXNjYXBlXCIgY2hhcnMgZ2V0XG4gICAgLy8gZXNjYXBlZCwgZXZlbiBpZiBlbmNvZGVVUklDb21wb25lbnQgZG9lc24ndCB0aGluayB0aGV5XG4gICAgLy8gbmVlZCB0byBiZS5cbiAgICBmb3IgKHZhciBpID0gMCwgbCA9IGF1dG9Fc2NhcGUubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgICB2YXIgYWUgPSBhdXRvRXNjYXBlW2ldO1xuICAgICAgdmFyIGVzYyA9IGVuY29kZVVSSUNvbXBvbmVudChhZSk7XG4gICAgICBpZiAoZXNjID09PSBhZSkge1xuICAgICAgICBlc2MgPSBlc2NhcGUoYWUpO1xuICAgICAgfVxuICAgICAgcmVzdCA9IHJlc3Quc3BsaXQoYWUpLmpvaW4oZXNjKTtcbiAgICB9XG4gIH1cblxuXG4gIC8vIGNob3Agb2ZmIGZyb20gdGhlIHRhaWwgZmlyc3QuXG4gIHZhciBoYXNoID0gcmVzdC5pbmRleE9mKCcjJyk7XG4gIGlmIChoYXNoICE9PSAtMSkge1xuICAgIC8vIGdvdCBhIGZyYWdtZW50IHN0cmluZy5cbiAgICB0aGlzLmhhc2ggPSByZXN0LnN1YnN0cihoYXNoKTtcbiAgICByZXN0ID0gcmVzdC5zbGljZSgwLCBoYXNoKTtcbiAgfVxuICB2YXIgcW0gPSByZXN0LmluZGV4T2YoJz8nKTtcbiAgaWYgKHFtICE9PSAtMSkge1xuICAgIHRoaXMuc2VhcmNoID0gcmVzdC5zdWJzdHIocW0pO1xuICAgIHRoaXMucXVlcnkgPSByZXN0LnN1YnN0cihxbSArIDEpO1xuICAgIGlmIChwYXJzZVF1ZXJ5U3RyaW5nKSB7XG4gICAgICB0aGlzLnF1ZXJ5ID0gcXVlcnlzdHJpbmcucGFyc2UodGhpcy5xdWVyeSk7XG4gICAgfVxuICAgIHJlc3QgPSByZXN0LnNsaWNlKDAsIHFtKTtcbiAgfSBlbHNlIGlmIChwYXJzZVF1ZXJ5U3RyaW5nKSB7XG4gICAgLy8gbm8gcXVlcnkgc3RyaW5nLCBidXQgcGFyc2VRdWVyeVN0cmluZyBzdGlsbCByZXF1ZXN0ZWRcbiAgICB0aGlzLnNlYXJjaCA9ICcnO1xuICAgIHRoaXMucXVlcnkgPSB7fTtcbiAgfVxuICBpZiAocmVzdCkgdGhpcy5wYXRobmFtZSA9IHJlc3Q7XG4gIGlmIChzbGFzaGVkUHJvdG9jb2xbbG93ZXJQcm90b10gJiZcbiAgICAgIHRoaXMuaG9zdG5hbWUgJiYgIXRoaXMucGF0aG5hbWUpIHtcbiAgICB0aGlzLnBhdGhuYW1lID0gJy8nO1xuICB9XG5cbiAgLy90byBzdXBwb3J0IGh0dHAucmVxdWVzdFxuICBpZiAodGhpcy5wYXRobmFtZSB8fCB0aGlzLnNlYXJjaCkge1xuICAgIHZhciBwID0gdGhpcy5wYXRobmFtZSB8fCAnJztcbiAgICB2YXIgcyA9IHRoaXMuc2VhcmNoIHx8ICcnO1xuICAgIHRoaXMucGF0aCA9IHAgKyBzO1xuICB9XG5cbiAgLy8gZmluYWxseSwgcmVjb25zdHJ1Y3QgdGhlIGhyZWYgYmFzZWQgb24gd2hhdCBoYXMgYmVlbiB2YWxpZGF0ZWQuXG4gIHRoaXMuaHJlZiA9IHRoaXMuZm9ybWF0KCk7XG4gIHJldHVybiB0aGlzO1xufTtcblxuLy8gZm9ybWF0IGEgcGFyc2VkIG9iamVjdCBpbnRvIGEgdXJsIHN0cmluZ1xuZnVuY3Rpb24gdXJsRm9ybWF0KG9iaikge1xuICAvLyBlbnN1cmUgaXQncyBhbiBvYmplY3QsIGFuZCBub3QgYSBzdHJpbmcgdXJsLlxuICAvLyBJZiBpdCdzIGFuIG9iaiwgdGhpcyBpcyBhIG5vLW9wLlxuICAvLyB0aGlzIHdheSwgeW91IGNhbiBjYWxsIHVybF9mb3JtYXQoKSBvbiBzdHJpbmdzXG4gIC8vIHRvIGNsZWFuIHVwIHBvdGVudGlhbGx5IHdvbmt5IHVybHMuXG4gIGlmIChpc1N0cmluZyhvYmopKSBvYmogPSB1cmxQYXJzZShvYmopO1xuICBpZiAoIShvYmogaW5zdGFuY2VvZiBVcmwpKSByZXR1cm4gVXJsLnByb3RvdHlwZS5mb3JtYXQuY2FsbChvYmopO1xuICByZXR1cm4gb2JqLmZvcm1hdCgpO1xufVxuXG5VcmwucHJvdG90eXBlLmZvcm1hdCA9IGZ1bmN0aW9uKCkge1xuICB2YXIgYXV0aCA9IHRoaXMuYXV0aCB8fCAnJztcbiAgaWYgKGF1dGgpIHtcbiAgICBhdXRoID0gZW5jb2RlVVJJQ29tcG9uZW50KGF1dGgpO1xuICAgIGF1dGggPSBhdXRoLnJlcGxhY2UoLyUzQS9pLCAnOicpO1xuICAgIGF1dGggKz0gJ0AnO1xuICB9XG5cbiAgdmFyIHByb3RvY29sID0gdGhpcy5wcm90b2NvbCB8fCAnJyxcbiAgICAgIHBhdGhuYW1lID0gdGhpcy5wYXRobmFtZSB8fCAnJyxcbiAgICAgIGhhc2ggPSB0aGlzLmhhc2ggfHwgJycsXG4gICAgICBob3N0ID0gZmFsc2UsXG4gICAgICBxdWVyeSA9ICcnO1xuXG4gIGlmICh0aGlzLmhvc3QpIHtcbiAgICBob3N0ID0gYXV0aCArIHRoaXMuaG9zdDtcbiAgfSBlbHNlIGlmICh0aGlzLmhvc3RuYW1lKSB7XG4gICAgaG9zdCA9IGF1dGggKyAodGhpcy5ob3N0bmFtZS5pbmRleE9mKCc6JykgPT09IC0xID9cbiAgICAgICAgdGhpcy5ob3N0bmFtZSA6XG4gICAgICAgICdbJyArIHRoaXMuaG9zdG5hbWUgKyAnXScpO1xuICAgIGlmICh0aGlzLnBvcnQpIHtcbiAgICAgIGhvc3QgKz0gJzonICsgdGhpcy5wb3J0O1xuICAgIH1cbiAgfVxuXG4gIGlmICh0aGlzLnF1ZXJ5ICYmXG4gICAgICBpc09iamVjdCh0aGlzLnF1ZXJ5KSAmJlxuICAgICAgT2JqZWN0LmtleXModGhpcy5xdWVyeSkubGVuZ3RoKSB7XG4gICAgcXVlcnkgPSBxdWVyeXN0cmluZy5zdHJpbmdpZnkodGhpcy5xdWVyeSk7XG4gIH1cblxuICB2YXIgc2VhcmNoID0gdGhpcy5zZWFyY2ggfHwgKHF1ZXJ5ICYmICgnPycgKyBxdWVyeSkpIHx8ICcnO1xuXG4gIGlmIChwcm90b2NvbCAmJiBwcm90b2NvbC5zdWJzdHIoLTEpICE9PSAnOicpIHByb3RvY29sICs9ICc6JztcblxuICAvLyBvbmx5IHRoZSBzbGFzaGVkUHJvdG9jb2xzIGdldCB0aGUgLy8uICBOb3QgbWFpbHRvOiwgeG1wcDosIGV0Yy5cbiAgLy8gdW5sZXNzIHRoZXkgaGFkIHRoZW0gdG8gYmVnaW4gd2l0aC5cbiAgaWYgKHRoaXMuc2xhc2hlcyB8fFxuICAgICAgKCFwcm90b2NvbCB8fCBzbGFzaGVkUHJvdG9jb2xbcHJvdG9jb2xdKSAmJiBob3N0ICE9PSBmYWxzZSkge1xuICAgIGhvc3QgPSAnLy8nICsgKGhvc3QgfHwgJycpO1xuICAgIGlmIChwYXRobmFtZSAmJiBwYXRobmFtZS5jaGFyQXQoMCkgIT09ICcvJykgcGF0aG5hbWUgPSAnLycgKyBwYXRobmFtZTtcbiAgfSBlbHNlIGlmICghaG9zdCkge1xuICAgIGhvc3QgPSAnJztcbiAgfVxuXG4gIGlmIChoYXNoICYmIGhhc2guY2hhckF0KDApICE9PSAnIycpIGhhc2ggPSAnIycgKyBoYXNoO1xuICBpZiAoc2VhcmNoICYmIHNlYXJjaC5jaGFyQXQoMCkgIT09ICc/Jykgc2VhcmNoID0gJz8nICsgc2VhcmNoO1xuXG4gIHBhdGhuYW1lID0gcGF0aG5hbWUucmVwbGFjZSgvWz8jXS9nLCBmdW5jdGlvbihtYXRjaCkge1xuICAgIHJldHVybiBlbmNvZGVVUklDb21wb25lbnQobWF0Y2gpO1xuICB9KTtcbiAgc2VhcmNoID0gc2VhcmNoLnJlcGxhY2UoJyMnLCAnJTIzJyk7XG5cbiAgcmV0dXJuIHByb3RvY29sICsgaG9zdCArIHBhdGhuYW1lICsgc2VhcmNoICsgaGFzaDtcbn07XG5cbmZ1bmN0aW9uIHVybFJlc29sdmUoc291cmNlLCByZWxhdGl2ZSkge1xuICByZXR1cm4gdXJsUGFyc2Uoc291cmNlLCBmYWxzZSwgdHJ1ZSkucmVzb2x2ZShyZWxhdGl2ZSk7XG59XG5cblVybC5wcm90b3R5cGUucmVzb2x2ZSA9IGZ1bmN0aW9uKHJlbGF0aXZlKSB7XG4gIHJldHVybiB0aGlzLnJlc29sdmVPYmplY3QodXJsUGFyc2UocmVsYXRpdmUsIGZhbHNlLCB0cnVlKSkuZm9ybWF0KCk7XG59O1xuXG5mdW5jdGlvbiB1cmxSZXNvbHZlT2JqZWN0KHNvdXJjZSwgcmVsYXRpdmUpIHtcbiAgaWYgKCFzb3VyY2UpIHJldHVybiByZWxhdGl2ZTtcbiAgcmV0dXJuIHVybFBhcnNlKHNvdXJjZSwgZmFsc2UsIHRydWUpLnJlc29sdmVPYmplY3QocmVsYXRpdmUpO1xufVxuXG5VcmwucHJvdG90eXBlLnJlc29sdmVPYmplY3QgPSBmdW5jdGlvbihyZWxhdGl2ZSkge1xuICBpZiAoaXNTdHJpbmcocmVsYXRpdmUpKSB7XG4gICAgdmFyIHJlbCA9IG5ldyBVcmwoKTtcbiAgICByZWwucGFyc2UocmVsYXRpdmUsIGZhbHNlLCB0cnVlKTtcbiAgICByZWxhdGl2ZSA9IHJlbDtcbiAgfVxuXG4gIHZhciByZXN1bHQgPSBuZXcgVXJsKCk7XG4gIE9iamVjdC5rZXlzKHRoaXMpLmZvckVhY2goZnVuY3Rpb24oaykge1xuICAgIHJlc3VsdFtrXSA9IHRoaXNba107XG4gIH0sIHRoaXMpO1xuXG4gIC8vIGhhc2ggaXMgYWx3YXlzIG92ZXJyaWRkZW4sIG5vIG1hdHRlciB3aGF0LlxuICAvLyBldmVuIGhyZWY9XCJcIiB3aWxsIHJlbW92ZSBpdC5cbiAgcmVzdWx0Lmhhc2ggPSByZWxhdGl2ZS5oYXNoO1xuXG4gIC8vIGlmIHRoZSByZWxhdGl2ZSB1cmwgaXMgZW1wdHksIHRoZW4gdGhlcmUncyBub3RoaW5nIGxlZnQgdG8gZG8gaGVyZS5cbiAgaWYgKHJlbGF0aXZlLmhyZWYgPT09ICcnKSB7XG4gICAgcmVzdWx0LmhyZWYgPSByZXN1bHQuZm9ybWF0KCk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIC8vIGhyZWZzIGxpa2UgLy9mb28vYmFyIGFsd2F5cyBjdXQgdG8gdGhlIHByb3RvY29sLlxuICBpZiAocmVsYXRpdmUuc2xhc2hlcyAmJiAhcmVsYXRpdmUucHJvdG9jb2wpIHtcbiAgICAvLyB0YWtlIGV2ZXJ5dGhpbmcgZXhjZXB0IHRoZSBwcm90b2NvbCBmcm9tIHJlbGF0aXZlXG4gICAgT2JqZWN0LmtleXMocmVsYXRpdmUpLmZvckVhY2goZnVuY3Rpb24oaykge1xuICAgICAgaWYgKGsgIT09ICdwcm90b2NvbCcpXG4gICAgICAgIHJlc3VsdFtrXSA9IHJlbGF0aXZlW2tdO1xuICAgIH0pO1xuXG4gICAgLy91cmxQYXJzZSBhcHBlbmRzIHRyYWlsaW5nIC8gdG8gdXJscyBsaWtlIGh0dHA6Ly93d3cuZXhhbXBsZS5jb21cbiAgICBpZiAoc2xhc2hlZFByb3RvY29sW3Jlc3VsdC5wcm90b2NvbF0gJiZcbiAgICAgICAgcmVzdWx0Lmhvc3RuYW1lICYmICFyZXN1bHQucGF0aG5hbWUpIHtcbiAgICAgIHJlc3VsdC5wYXRoID0gcmVzdWx0LnBhdGhuYW1lID0gJy8nO1xuICAgIH1cblxuICAgIHJlc3VsdC5ocmVmID0gcmVzdWx0LmZvcm1hdCgpO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICBpZiAocmVsYXRpdmUucHJvdG9jb2wgJiYgcmVsYXRpdmUucHJvdG9jb2wgIT09IHJlc3VsdC5wcm90b2NvbCkge1xuICAgIC8vIGlmIGl0J3MgYSBrbm93biB1cmwgcHJvdG9jb2wsIHRoZW4gY2hhbmdpbmdcbiAgICAvLyB0aGUgcHJvdG9jb2wgZG9lcyB3ZWlyZCB0aGluZ3NcbiAgICAvLyBmaXJzdCwgaWYgaXQncyBub3QgZmlsZTosIHRoZW4gd2UgTVVTVCBoYXZlIGEgaG9zdCxcbiAgICAvLyBhbmQgaWYgdGhlcmUgd2FzIGEgcGF0aFxuICAgIC8vIHRvIGJlZ2luIHdpdGgsIHRoZW4gd2UgTVVTVCBoYXZlIGEgcGF0aC5cbiAgICAvLyBpZiBpdCBpcyBmaWxlOiwgdGhlbiB0aGUgaG9zdCBpcyBkcm9wcGVkLFxuICAgIC8vIGJlY2F1c2UgdGhhdCdzIGtub3duIHRvIGJlIGhvc3RsZXNzLlxuICAgIC8vIGFueXRoaW5nIGVsc2UgaXMgYXNzdW1lZCB0byBiZSBhYnNvbHV0ZS5cbiAgICBpZiAoIXNsYXNoZWRQcm90b2NvbFtyZWxhdGl2ZS5wcm90b2NvbF0pIHtcbiAgICAgIE9iamVjdC5rZXlzKHJlbGF0aXZlKS5mb3JFYWNoKGZ1bmN0aW9uKGspIHtcbiAgICAgICAgcmVzdWx0W2tdID0gcmVsYXRpdmVba107XG4gICAgICB9KTtcbiAgICAgIHJlc3VsdC5ocmVmID0gcmVzdWx0LmZvcm1hdCgpO1xuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICByZXN1bHQucHJvdG9jb2wgPSByZWxhdGl2ZS5wcm90b2NvbDtcbiAgICBpZiAoIXJlbGF0aXZlLmhvc3QgJiYgIWhvc3RsZXNzUHJvdG9jb2xbcmVsYXRpdmUucHJvdG9jb2xdKSB7XG4gICAgICB2YXIgcmVsUGF0aCA9IChyZWxhdGl2ZS5wYXRobmFtZSB8fCAnJykuc3BsaXQoJy8nKTtcbiAgICAgIHdoaWxlIChyZWxQYXRoLmxlbmd0aCAmJiAhKHJlbGF0aXZlLmhvc3QgPSByZWxQYXRoLnNoaWZ0KCkpKTtcbiAgICAgIGlmICghcmVsYXRpdmUuaG9zdCkgcmVsYXRpdmUuaG9zdCA9ICcnO1xuICAgICAgaWYgKCFyZWxhdGl2ZS5ob3N0bmFtZSkgcmVsYXRpdmUuaG9zdG5hbWUgPSAnJztcbiAgICAgIGlmIChyZWxQYXRoWzBdICE9PSAnJykgcmVsUGF0aC51bnNoaWZ0KCcnKTtcbiAgICAgIGlmIChyZWxQYXRoLmxlbmd0aCA8IDIpIHJlbFBhdGgudW5zaGlmdCgnJyk7XG4gICAgICByZXN1bHQucGF0aG5hbWUgPSByZWxQYXRoLmpvaW4oJy8nKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmVzdWx0LnBhdGhuYW1lID0gcmVsYXRpdmUucGF0aG5hbWU7XG4gICAgfVxuICAgIHJlc3VsdC5zZWFyY2ggPSByZWxhdGl2ZS5zZWFyY2g7XG4gICAgcmVzdWx0LnF1ZXJ5ID0gcmVsYXRpdmUucXVlcnk7XG4gICAgcmVzdWx0Lmhvc3QgPSByZWxhdGl2ZS5ob3N0IHx8ICcnO1xuICAgIHJlc3VsdC5hdXRoID0gcmVsYXRpdmUuYXV0aDtcbiAgICByZXN1bHQuaG9zdG5hbWUgPSByZWxhdGl2ZS5ob3N0bmFtZSB8fCByZWxhdGl2ZS5ob3N0O1xuICAgIHJlc3VsdC5wb3J0ID0gcmVsYXRpdmUucG9ydDtcbiAgICAvLyB0byBzdXBwb3J0IGh0dHAucmVxdWVzdFxuICAgIGlmIChyZXN1bHQucGF0aG5hbWUgfHwgcmVzdWx0LnNlYXJjaCkge1xuICAgICAgdmFyIHAgPSByZXN1bHQucGF0aG5hbWUgfHwgJyc7XG4gICAgICB2YXIgcyA9IHJlc3VsdC5zZWFyY2ggfHwgJyc7XG4gICAgICByZXN1bHQucGF0aCA9IHAgKyBzO1xuICAgIH1cbiAgICByZXN1bHQuc2xhc2hlcyA9IHJlc3VsdC5zbGFzaGVzIHx8IHJlbGF0aXZlLnNsYXNoZXM7XG4gICAgcmVzdWx0LmhyZWYgPSByZXN1bHQuZm9ybWF0KCk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIHZhciBpc1NvdXJjZUFicyA9IChyZXN1bHQucGF0aG5hbWUgJiYgcmVzdWx0LnBhdGhuYW1lLmNoYXJBdCgwKSA9PT0gJy8nKSxcbiAgICAgIGlzUmVsQWJzID0gKFxuICAgICAgICAgIHJlbGF0aXZlLmhvc3QgfHxcbiAgICAgICAgICByZWxhdGl2ZS5wYXRobmFtZSAmJiByZWxhdGl2ZS5wYXRobmFtZS5jaGFyQXQoMCkgPT09ICcvJ1xuICAgICAgKSxcbiAgICAgIG11c3RFbmRBYnMgPSAoaXNSZWxBYnMgfHwgaXNTb3VyY2VBYnMgfHxcbiAgICAgICAgICAgICAgICAgICAgKHJlc3VsdC5ob3N0ICYmIHJlbGF0aXZlLnBhdGhuYW1lKSksXG4gICAgICByZW1vdmVBbGxEb3RzID0gbXVzdEVuZEFicyxcbiAgICAgIHNyY1BhdGggPSByZXN1bHQucGF0aG5hbWUgJiYgcmVzdWx0LnBhdGhuYW1lLnNwbGl0KCcvJykgfHwgW10sXG4gICAgICByZWxQYXRoID0gcmVsYXRpdmUucGF0aG5hbWUgJiYgcmVsYXRpdmUucGF0aG5hbWUuc3BsaXQoJy8nKSB8fCBbXSxcbiAgICAgIHBzeWNob3RpYyA9IHJlc3VsdC5wcm90b2NvbCAmJiAhc2xhc2hlZFByb3RvY29sW3Jlc3VsdC5wcm90b2NvbF07XG5cbiAgLy8gaWYgdGhlIHVybCBpcyBhIG5vbi1zbGFzaGVkIHVybCwgdGhlbiByZWxhdGl2ZVxuICAvLyBsaW5rcyBsaWtlIC4uLy4uIHNob3VsZCBiZSBhYmxlXG4gIC8vIHRvIGNyYXdsIHVwIHRvIHRoZSBob3N0bmFtZSwgYXMgd2VsbC4gIFRoaXMgaXMgc3RyYW5nZS5cbiAgLy8gcmVzdWx0LnByb3RvY29sIGhhcyBhbHJlYWR5IGJlZW4gc2V0IGJ5IG5vdy5cbiAgLy8gTGF0ZXIgb24sIHB1dCB0aGUgZmlyc3QgcGF0aCBwYXJ0IGludG8gdGhlIGhvc3QgZmllbGQuXG4gIGlmIChwc3ljaG90aWMpIHtcbiAgICByZXN1bHQuaG9zdG5hbWUgPSAnJztcbiAgICByZXN1bHQucG9ydCA9IG51bGw7XG4gICAgaWYgKHJlc3VsdC5ob3N0KSB7XG4gICAgICBpZiAoc3JjUGF0aFswXSA9PT0gJycpIHNyY1BhdGhbMF0gPSByZXN1bHQuaG9zdDtcbiAgICAgIGVsc2Ugc3JjUGF0aC51bnNoaWZ0KHJlc3VsdC5ob3N0KTtcbiAgICB9XG4gICAgcmVzdWx0Lmhvc3QgPSAnJztcbiAgICBpZiAocmVsYXRpdmUucHJvdG9jb2wpIHtcbiAgICAgIHJlbGF0aXZlLmhvc3RuYW1lID0gbnVsbDtcbiAgICAgIHJlbGF0aXZlLnBvcnQgPSBudWxsO1xuICAgICAgaWYgKHJlbGF0aXZlLmhvc3QpIHtcbiAgICAgICAgaWYgKHJlbFBhdGhbMF0gPT09ICcnKSByZWxQYXRoWzBdID0gcmVsYXRpdmUuaG9zdDtcbiAgICAgICAgZWxzZSByZWxQYXRoLnVuc2hpZnQocmVsYXRpdmUuaG9zdCk7XG4gICAgICB9XG4gICAgICByZWxhdGl2ZS5ob3N0ID0gbnVsbDtcbiAgICB9XG4gICAgbXVzdEVuZEFicyA9IG11c3RFbmRBYnMgJiYgKHJlbFBhdGhbMF0gPT09ICcnIHx8IHNyY1BhdGhbMF0gPT09ICcnKTtcbiAgfVxuXG4gIGlmIChpc1JlbEFicykge1xuICAgIC8vIGl0J3MgYWJzb2x1dGUuXG4gICAgcmVzdWx0Lmhvc3QgPSAocmVsYXRpdmUuaG9zdCB8fCByZWxhdGl2ZS5ob3N0ID09PSAnJykgP1xuICAgICAgICAgICAgICAgICAgcmVsYXRpdmUuaG9zdCA6IHJlc3VsdC5ob3N0O1xuICAgIHJlc3VsdC5ob3N0bmFtZSA9IChyZWxhdGl2ZS5ob3N0bmFtZSB8fCByZWxhdGl2ZS5ob3N0bmFtZSA9PT0gJycpID9cbiAgICAgICAgICAgICAgICAgICAgICByZWxhdGl2ZS5ob3N0bmFtZSA6IHJlc3VsdC5ob3N0bmFtZTtcbiAgICByZXN1bHQuc2VhcmNoID0gcmVsYXRpdmUuc2VhcmNoO1xuICAgIHJlc3VsdC5xdWVyeSA9IHJlbGF0aXZlLnF1ZXJ5O1xuICAgIHNyY1BhdGggPSByZWxQYXRoO1xuICAgIC8vIGZhbGwgdGhyb3VnaCB0byB0aGUgZG90LWhhbmRsaW5nIGJlbG93LlxuICB9IGVsc2UgaWYgKHJlbFBhdGgubGVuZ3RoKSB7XG4gICAgLy8gaXQncyByZWxhdGl2ZVxuICAgIC8vIHRocm93IGF3YXkgdGhlIGV4aXN0aW5nIGZpbGUsIGFuZCB0YWtlIHRoZSBuZXcgcGF0aCBpbnN0ZWFkLlxuICAgIGlmICghc3JjUGF0aCkgc3JjUGF0aCA9IFtdO1xuICAgIHNyY1BhdGgucG9wKCk7XG4gICAgc3JjUGF0aCA9IHNyY1BhdGguY29uY2F0KHJlbFBhdGgpO1xuICAgIHJlc3VsdC5zZWFyY2ggPSByZWxhdGl2ZS5zZWFyY2g7XG4gICAgcmVzdWx0LnF1ZXJ5ID0gcmVsYXRpdmUucXVlcnk7XG4gIH0gZWxzZSBpZiAoIWlzTnVsbE9yVW5kZWZpbmVkKHJlbGF0aXZlLnNlYXJjaCkpIHtcbiAgICAvLyBqdXN0IHB1bGwgb3V0IHRoZSBzZWFyY2guXG4gICAgLy8gbGlrZSBocmVmPSc/Zm9vJy5cbiAgICAvLyBQdXQgdGhpcyBhZnRlciB0aGUgb3RoZXIgdHdvIGNhc2VzIGJlY2F1c2UgaXQgc2ltcGxpZmllcyB0aGUgYm9vbGVhbnNcbiAgICBpZiAocHN5Y2hvdGljKSB7XG4gICAgICByZXN1bHQuaG9zdG5hbWUgPSByZXN1bHQuaG9zdCA9IHNyY1BhdGguc2hpZnQoKTtcbiAgICAgIC8vb2NjYXRpb25hbHkgdGhlIGF1dGggY2FuIGdldCBzdHVjayBvbmx5IGluIGhvc3RcbiAgICAgIC8vdGhpcyBlc3BlY2lhbHkgaGFwcGVucyBpbiBjYXNlcyBsaWtlXG4gICAgICAvL3VybC5yZXNvbHZlT2JqZWN0KCdtYWlsdG86bG9jYWwxQGRvbWFpbjEnLCAnbG9jYWwyQGRvbWFpbjInKVxuICAgICAgdmFyIGF1dGhJbkhvc3QgPSByZXN1bHQuaG9zdCAmJiByZXN1bHQuaG9zdC5pbmRleE9mKCdAJykgPiAwID9cbiAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0Lmhvc3Quc3BsaXQoJ0AnKSA6IGZhbHNlO1xuICAgICAgaWYgKGF1dGhJbkhvc3QpIHtcbiAgICAgICAgcmVzdWx0LmF1dGggPSBhdXRoSW5Ib3N0LnNoaWZ0KCk7XG4gICAgICAgIHJlc3VsdC5ob3N0ID0gcmVzdWx0Lmhvc3RuYW1lID0gYXV0aEluSG9zdC5zaGlmdCgpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXN1bHQuc2VhcmNoID0gcmVsYXRpdmUuc2VhcmNoO1xuICAgIHJlc3VsdC5xdWVyeSA9IHJlbGF0aXZlLnF1ZXJ5O1xuICAgIC8vdG8gc3VwcG9ydCBodHRwLnJlcXVlc3RcbiAgICBpZiAoIWlzTnVsbChyZXN1bHQucGF0aG5hbWUpIHx8ICFpc051bGwocmVzdWx0LnNlYXJjaCkpIHtcbiAgICAgIHJlc3VsdC5wYXRoID0gKHJlc3VsdC5wYXRobmFtZSA/IHJlc3VsdC5wYXRobmFtZSA6ICcnKSArXG4gICAgICAgICAgICAgICAgICAgIChyZXN1bHQuc2VhcmNoID8gcmVzdWx0LnNlYXJjaCA6ICcnKTtcbiAgICB9XG4gICAgcmVzdWx0LmhyZWYgPSByZXN1bHQuZm9ybWF0KCk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIGlmICghc3JjUGF0aC5sZW5ndGgpIHtcbiAgICAvLyBubyBwYXRoIGF0IGFsbC4gIGVhc3kuXG4gICAgLy8gd2UndmUgYWxyZWFkeSBoYW5kbGVkIHRoZSBvdGhlciBzdHVmZiBhYm92ZS5cbiAgICByZXN1bHQucGF0aG5hbWUgPSBudWxsO1xuICAgIC8vdG8gc3VwcG9ydCBodHRwLnJlcXVlc3RcbiAgICBpZiAocmVzdWx0LnNlYXJjaCkge1xuICAgICAgcmVzdWx0LnBhdGggPSAnLycgKyByZXN1bHQuc2VhcmNoO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXN1bHQucGF0aCA9IG51bGw7XG4gICAgfVxuICAgIHJlc3VsdC5ocmVmID0gcmVzdWx0LmZvcm1hdCgpO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICAvLyBpZiBhIHVybCBFTkRzIGluIC4gb3IgLi4sIHRoZW4gaXQgbXVzdCBnZXQgYSB0cmFpbGluZyBzbGFzaC5cbiAgLy8gaG93ZXZlciwgaWYgaXQgZW5kcyBpbiBhbnl0aGluZyBlbHNlIG5vbi1zbGFzaHksXG4gIC8vIHRoZW4gaXQgbXVzdCBOT1QgZ2V0IGEgdHJhaWxpbmcgc2xhc2guXG4gIHZhciBsYXN0ID0gc3JjUGF0aC5zbGljZSgtMSlbMF07XG4gIHZhciBoYXNUcmFpbGluZ1NsYXNoID0gKFxuICAgICAgKHJlc3VsdC5ob3N0IHx8IHJlbGF0aXZlLmhvc3QpICYmIChsYXN0ID09PSAnLicgfHwgbGFzdCA9PT0gJy4uJykgfHxcbiAgICAgIGxhc3QgPT09ICcnKTtcblxuICAvLyBzdHJpcCBzaW5nbGUgZG90cywgcmVzb2x2ZSBkb3VibGUgZG90cyB0byBwYXJlbnQgZGlyXG4gIC8vIGlmIHRoZSBwYXRoIHRyaWVzIHRvIGdvIGFib3ZlIHRoZSByb290LCBgdXBgIGVuZHMgdXAgPiAwXG4gIHZhciB1cCA9IDA7XG4gIGZvciAodmFyIGkgPSBzcmNQYXRoLmxlbmd0aDsgaSA+PSAwOyBpLS0pIHtcbiAgICBsYXN0ID0gc3JjUGF0aFtpXTtcbiAgICBpZiAobGFzdCA9PSAnLicpIHtcbiAgICAgIHNyY1BhdGguc3BsaWNlKGksIDEpO1xuICAgIH0gZWxzZSBpZiAobGFzdCA9PT0gJy4uJykge1xuICAgICAgc3JjUGF0aC5zcGxpY2UoaSwgMSk7XG4gICAgICB1cCsrO1xuICAgIH0gZWxzZSBpZiAodXApIHtcbiAgICAgIHNyY1BhdGguc3BsaWNlKGksIDEpO1xuICAgICAgdXAtLTtcbiAgICB9XG4gIH1cblxuICAvLyBpZiB0aGUgcGF0aCBpcyBhbGxvd2VkIHRvIGdvIGFib3ZlIHRoZSByb290LCByZXN0b3JlIGxlYWRpbmcgLi5zXG4gIGlmICghbXVzdEVuZEFicyAmJiAhcmVtb3ZlQWxsRG90cykge1xuICAgIGZvciAoOyB1cC0tOyB1cCkge1xuICAgICAgc3JjUGF0aC51bnNoaWZ0KCcuLicpO1xuICAgIH1cbiAgfVxuXG4gIGlmIChtdXN0RW5kQWJzICYmIHNyY1BhdGhbMF0gIT09ICcnICYmXG4gICAgICAoIXNyY1BhdGhbMF0gfHwgc3JjUGF0aFswXS5jaGFyQXQoMCkgIT09ICcvJykpIHtcbiAgICBzcmNQYXRoLnVuc2hpZnQoJycpO1xuICB9XG5cbiAgaWYgKGhhc1RyYWlsaW5nU2xhc2ggJiYgKHNyY1BhdGguam9pbignLycpLnN1YnN0cigtMSkgIT09ICcvJykpIHtcbiAgICBzcmNQYXRoLnB1c2goJycpO1xuICB9XG5cbiAgdmFyIGlzQWJzb2x1dGUgPSBzcmNQYXRoWzBdID09PSAnJyB8fFxuICAgICAgKHNyY1BhdGhbMF0gJiYgc3JjUGF0aFswXS5jaGFyQXQoMCkgPT09ICcvJyk7XG5cbiAgLy8gcHV0IHRoZSBob3N0IGJhY2tcbiAgaWYgKHBzeWNob3RpYykge1xuICAgIHJlc3VsdC5ob3N0bmFtZSA9IHJlc3VsdC5ob3N0ID0gaXNBYnNvbHV0ZSA/ICcnIDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyY1BhdGgubGVuZ3RoID8gc3JjUGF0aC5zaGlmdCgpIDogJyc7XG4gICAgLy9vY2NhdGlvbmFseSB0aGUgYXV0aCBjYW4gZ2V0IHN0dWNrIG9ubHkgaW4gaG9zdFxuICAgIC8vdGhpcyBlc3BlY2lhbHkgaGFwcGVucyBpbiBjYXNlcyBsaWtlXG4gICAgLy91cmwucmVzb2x2ZU9iamVjdCgnbWFpbHRvOmxvY2FsMUBkb21haW4xJywgJ2xvY2FsMkBkb21haW4yJylcbiAgICB2YXIgYXV0aEluSG9zdCA9IHJlc3VsdC5ob3N0ICYmIHJlc3VsdC5ob3N0LmluZGV4T2YoJ0AnKSA+IDAgP1xuICAgICAgICAgICAgICAgICAgICAgcmVzdWx0Lmhvc3Quc3BsaXQoJ0AnKSA6IGZhbHNlO1xuICAgIGlmIChhdXRoSW5Ib3N0KSB7XG4gICAgICByZXN1bHQuYXV0aCA9IGF1dGhJbkhvc3Quc2hpZnQoKTtcbiAgICAgIHJlc3VsdC5ob3N0ID0gcmVzdWx0Lmhvc3RuYW1lID0gYXV0aEluSG9zdC5zaGlmdCgpO1xuICAgIH1cbiAgfVxuXG4gIG11c3RFbmRBYnMgPSBtdXN0RW5kQWJzIHx8IChyZXN1bHQuaG9zdCAmJiBzcmNQYXRoLmxlbmd0aCk7XG5cbiAgaWYgKG11c3RFbmRBYnMgJiYgIWlzQWJzb2x1dGUpIHtcbiAgICBzcmNQYXRoLnVuc2hpZnQoJycpO1xuICB9XG5cbiAgaWYgKCFzcmNQYXRoLmxlbmd0aCkge1xuICAgIHJlc3VsdC5wYXRobmFtZSA9IG51bGw7XG4gICAgcmVzdWx0LnBhdGggPSBudWxsO1xuICB9IGVsc2Uge1xuICAgIHJlc3VsdC5wYXRobmFtZSA9IHNyY1BhdGguam9pbignLycpO1xuICB9XG5cbiAgLy90byBzdXBwb3J0IHJlcXVlc3QuaHR0cFxuICBpZiAoIWlzTnVsbChyZXN1bHQucGF0aG5hbWUpIHx8ICFpc051bGwocmVzdWx0LnNlYXJjaCkpIHtcbiAgICByZXN1bHQucGF0aCA9IChyZXN1bHQucGF0aG5hbWUgPyByZXN1bHQucGF0aG5hbWUgOiAnJykgK1xuICAgICAgICAgICAgICAgICAgKHJlc3VsdC5zZWFyY2ggPyByZXN1bHQuc2VhcmNoIDogJycpO1xuICB9XG4gIHJlc3VsdC5hdXRoID0gcmVsYXRpdmUuYXV0aCB8fCByZXN1bHQuYXV0aDtcbiAgcmVzdWx0LnNsYXNoZXMgPSByZXN1bHQuc2xhc2hlcyB8fCByZWxhdGl2ZS5zbGFzaGVzO1xuICByZXN1bHQuaHJlZiA9IHJlc3VsdC5mb3JtYXQoKTtcbiAgcmV0dXJuIHJlc3VsdDtcbn07XG5cblVybC5wcm90b3R5cGUucGFyc2VIb3N0ID0gZnVuY3Rpb24oKSB7XG4gIHZhciBob3N0ID0gdGhpcy5ob3N0O1xuICB2YXIgcG9ydCA9IHBvcnRQYXR0ZXJuLmV4ZWMoaG9zdCk7XG4gIGlmIChwb3J0KSB7XG4gICAgcG9ydCA9IHBvcnRbMF07XG4gICAgaWYgKHBvcnQgIT09ICc6Jykge1xuICAgICAgdGhpcy5wb3J0ID0gcG9ydC5zdWJzdHIoMSk7XG4gICAgfVxuICAgIGhvc3QgPSBob3N0LnN1YnN0cigwLCBob3N0Lmxlbmd0aCAtIHBvcnQubGVuZ3RoKTtcbiAgfVxuICBpZiAoaG9zdCkgdGhpcy5ob3N0bmFtZSA9IGhvc3Q7XG59O1xuXG5mdW5jdGlvbiBpc1N0cmluZyhhcmcpIHtcbiAgcmV0dXJuIHR5cGVvZiBhcmcgPT09IFwic3RyaW5nXCI7XG59XG5cbmZ1bmN0aW9uIGlzT2JqZWN0KGFyZykge1xuICByZXR1cm4gdHlwZW9mIGFyZyA9PT0gJ29iamVjdCcgJiYgYXJnICE9PSBudWxsO1xufVxuXG5mdW5jdGlvbiBpc051bGwoYXJnKSB7XG4gIHJldHVybiBhcmcgPT09IG51bGw7XG59XG5mdW5jdGlvbiBpc051bGxPclVuZGVmaW5lZChhcmcpIHtcbiAgcmV0dXJuICBhcmcgPT0gbnVsbDtcbn1cbiIsIid1c2Ugc3RyaWN0JztcblxubW9kdWxlLmV4cG9ydHMgPSBlYXJjdXQ7XG5cbmZ1bmN0aW9uIGVhcmN1dChkYXRhLCBob2xlSW5kaWNlcywgZGltKSB7XG5cbiAgICBkaW0gPSBkaW0gfHwgMjtcblxuICAgIHZhciBoYXNIb2xlcyA9IGhvbGVJbmRpY2VzICYmIGhvbGVJbmRpY2VzLmxlbmd0aCxcbiAgICAgICAgb3V0ZXJMZW4gPSBoYXNIb2xlcyA/IGhvbGVJbmRpY2VzWzBdICogZGltIDogZGF0YS5sZW5ndGgsXG4gICAgICAgIG91dGVyTm9kZSA9IGxpbmtlZExpc3QoZGF0YSwgMCwgb3V0ZXJMZW4sIGRpbSwgdHJ1ZSksXG4gICAgICAgIHRyaWFuZ2xlcyA9IFtdO1xuXG4gICAgaWYgKCFvdXRlck5vZGUpIHJldHVybiB0cmlhbmdsZXM7XG5cbiAgICB2YXIgbWluWCwgbWluWSwgbWF4WCwgbWF4WSwgeCwgeSwgc2l6ZTtcblxuICAgIGlmIChoYXNIb2xlcykgb3V0ZXJOb2RlID0gZWxpbWluYXRlSG9sZXMoZGF0YSwgaG9sZUluZGljZXMsIG91dGVyTm9kZSwgZGltKTtcblxuICAgIC8vIGlmIHRoZSBzaGFwZSBpcyBub3QgdG9vIHNpbXBsZSwgd2UnbGwgdXNlIHotb3JkZXIgY3VydmUgaGFzaCBsYXRlcjsgY2FsY3VsYXRlIHBvbHlnb24gYmJveFxuICAgIGlmIChkYXRhLmxlbmd0aCA+IDgwICogZGltKSB7XG4gICAgICAgIG1pblggPSBtYXhYID0gZGF0YVswXTtcbiAgICAgICAgbWluWSA9IG1heFkgPSBkYXRhWzFdO1xuXG4gICAgICAgIGZvciAodmFyIGkgPSBkaW07IGkgPCBvdXRlckxlbjsgaSArPSBkaW0pIHtcbiAgICAgICAgICAgIHggPSBkYXRhW2ldO1xuICAgICAgICAgICAgeSA9IGRhdGFbaSArIDFdO1xuICAgICAgICAgICAgaWYgKHggPCBtaW5YKSBtaW5YID0geDtcbiAgICAgICAgICAgIGlmICh5IDwgbWluWSkgbWluWSA9IHk7XG4gICAgICAgICAgICBpZiAoeCA+IG1heFgpIG1heFggPSB4O1xuICAgICAgICAgICAgaWYgKHkgPiBtYXhZKSBtYXhZID0geTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIG1pblgsIG1pblkgYW5kIHNpemUgYXJlIGxhdGVyIHVzZWQgdG8gdHJhbnNmb3JtIGNvb3JkcyBpbnRvIGludGVnZXJzIGZvciB6LW9yZGVyIGNhbGN1bGF0aW9uXG4gICAgICAgIHNpemUgPSBNYXRoLm1heChtYXhYIC0gbWluWCwgbWF4WSAtIG1pblkpO1xuICAgIH1cblxuICAgIGVhcmN1dExpbmtlZChvdXRlck5vZGUsIHRyaWFuZ2xlcywgZGltLCBtaW5YLCBtaW5ZLCBzaXplKTtcblxuICAgIHJldHVybiB0cmlhbmdsZXM7XG59XG5cbi8vIGNyZWF0ZSBhIGNpcmN1bGFyIGRvdWJseSBsaW5rZWQgbGlzdCBmcm9tIHBvbHlnb24gcG9pbnRzIGluIHRoZSBzcGVjaWZpZWQgd2luZGluZyBvcmRlclxuZnVuY3Rpb24gbGlua2VkTGlzdChkYXRhLCBzdGFydCwgZW5kLCBkaW0sIGNsb2Nrd2lzZSkge1xuICAgIHZhciBzdW0gPSAwLFxuICAgICAgICBpLCBqLCBsYXN0O1xuXG4gICAgLy8gY2FsY3VsYXRlIG9yaWdpbmFsIHdpbmRpbmcgb3JkZXIgb2YgYSBwb2x5Z29uIHJpbmdcbiAgICBmb3IgKGkgPSBzdGFydCwgaiA9IGVuZCAtIGRpbTsgaSA8IGVuZDsgaSArPSBkaW0pIHtcbiAgICAgICAgc3VtICs9IChkYXRhW2pdIC0gZGF0YVtpXSkgKiAoZGF0YVtpICsgMV0gKyBkYXRhW2ogKyAxXSk7XG4gICAgICAgIGogPSBpO1xuICAgIH1cblxuICAgIC8vIGxpbmsgcG9pbnRzIGludG8gY2lyY3VsYXIgZG91Ymx5LWxpbmtlZCBsaXN0IGluIHRoZSBzcGVjaWZpZWQgd2luZGluZyBvcmRlclxuICAgIGlmIChjbG9ja3dpc2UgPT09IChzdW0gPiAwKSkge1xuICAgICAgICBmb3IgKGkgPSBzdGFydDsgaSA8IGVuZDsgaSArPSBkaW0pIGxhc3QgPSBpbnNlcnROb2RlKGksIGRhdGFbaV0sIGRhdGFbaSArIDFdLCBsYXN0KTtcbiAgICB9IGVsc2Uge1xuICAgICAgICBmb3IgKGkgPSBlbmQgLSBkaW07IGkgPj0gc3RhcnQ7IGkgLT0gZGltKSBsYXN0ID0gaW5zZXJ0Tm9kZShpLCBkYXRhW2ldLCBkYXRhW2kgKyAxXSwgbGFzdCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGxhc3Q7XG59XG5cbi8vIGVsaW1pbmF0ZSBjb2xpbmVhciBvciBkdXBsaWNhdGUgcG9pbnRzXG5mdW5jdGlvbiBmaWx0ZXJQb2ludHMoc3RhcnQsIGVuZCkge1xuICAgIGlmICghc3RhcnQpIHJldHVybiBzdGFydDtcbiAgICBpZiAoIWVuZCkgZW5kID0gc3RhcnQ7XG5cbiAgICB2YXIgcCA9IHN0YXJ0LFxuICAgICAgICBhZ2FpbjtcbiAgICBkbyB7XG4gICAgICAgIGFnYWluID0gZmFsc2U7XG5cbiAgICAgICAgaWYgKCFwLnN0ZWluZXIgJiYgKGVxdWFscyhwLCBwLm5leHQpIHx8IGFyZWEocC5wcmV2LCBwLCBwLm5leHQpID09PSAwKSkge1xuICAgICAgICAgICAgcmVtb3ZlTm9kZShwKTtcbiAgICAgICAgICAgIHAgPSBlbmQgPSBwLnByZXY7XG4gICAgICAgICAgICBpZiAocCA9PT0gcC5uZXh0KSByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIGFnYWluID0gdHJ1ZTtcblxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcCA9IHAubmV4dDtcbiAgICAgICAgfVxuICAgIH0gd2hpbGUgKGFnYWluIHx8IHAgIT09IGVuZCk7XG5cbiAgICByZXR1cm4gZW5kO1xufVxuXG4vLyBtYWluIGVhciBzbGljaW5nIGxvb3Agd2hpY2ggdHJpYW5ndWxhdGVzIGEgcG9seWdvbiAoZ2l2ZW4gYXMgYSBsaW5rZWQgbGlzdClcbmZ1bmN0aW9uIGVhcmN1dExpbmtlZChlYXIsIHRyaWFuZ2xlcywgZGltLCBtaW5YLCBtaW5ZLCBzaXplLCBwYXNzKSB7XG4gICAgaWYgKCFlYXIpIHJldHVybjtcblxuICAgIC8vIGludGVybGluayBwb2x5Z29uIG5vZGVzIGluIHotb3JkZXJcbiAgICBpZiAoIXBhc3MgJiYgc2l6ZSkgaW5kZXhDdXJ2ZShlYXIsIG1pblgsIG1pblksIHNpemUpO1xuXG4gICAgdmFyIHN0b3AgPSBlYXIsXG4gICAgICAgIHByZXYsIG5leHQ7XG5cbiAgICAvLyBpdGVyYXRlIHRocm91Z2ggZWFycywgc2xpY2luZyB0aGVtIG9uZSBieSBvbmVcbiAgICB3aGlsZSAoZWFyLnByZXYgIT09IGVhci5uZXh0KSB7XG4gICAgICAgIHByZXYgPSBlYXIucHJldjtcbiAgICAgICAgbmV4dCA9IGVhci5uZXh0O1xuXG4gICAgICAgIGlmIChzaXplID8gaXNFYXJIYXNoZWQoZWFyLCBtaW5YLCBtaW5ZLCBzaXplKSA6IGlzRWFyKGVhcikpIHtcbiAgICAgICAgICAgIC8vIGN1dCBvZmYgdGhlIHRyaWFuZ2xlXG4gICAgICAgICAgICB0cmlhbmdsZXMucHVzaChwcmV2LmkgLyBkaW0pO1xuICAgICAgICAgICAgdHJpYW5nbGVzLnB1c2goZWFyLmkgLyBkaW0pO1xuICAgICAgICAgICAgdHJpYW5nbGVzLnB1c2gobmV4dC5pIC8gZGltKTtcblxuICAgICAgICAgICAgcmVtb3ZlTm9kZShlYXIpO1xuXG4gICAgICAgICAgICAvLyBza2lwcGluZyB0aGUgbmV4dCB2ZXJ0aWNlIGxlYWRzIHRvIGxlc3Mgc2xpdmVyIHRyaWFuZ2xlc1xuICAgICAgICAgICAgZWFyID0gbmV4dC5uZXh0O1xuICAgICAgICAgICAgc3RvcCA9IG5leHQubmV4dDtcblxuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICBlYXIgPSBuZXh0O1xuXG4gICAgICAgIC8vIGlmIHdlIGxvb3BlZCB0aHJvdWdoIHRoZSB3aG9sZSByZW1haW5pbmcgcG9seWdvbiBhbmQgY2FuJ3QgZmluZCBhbnkgbW9yZSBlYXJzXG4gICAgICAgIGlmIChlYXIgPT09IHN0b3ApIHtcbiAgICAgICAgICAgIC8vIHRyeSBmaWx0ZXJpbmcgcG9pbnRzIGFuZCBzbGljaW5nIGFnYWluXG4gICAgICAgICAgICBpZiAoIXBhc3MpIHtcbiAgICAgICAgICAgICAgICBlYXJjdXRMaW5rZWQoZmlsdGVyUG9pbnRzKGVhciksIHRyaWFuZ2xlcywgZGltLCBtaW5YLCBtaW5ZLCBzaXplLCAxKTtcblxuICAgICAgICAgICAgLy8gaWYgdGhpcyBkaWRuJ3Qgd29yaywgdHJ5IGN1cmluZyBhbGwgc21hbGwgc2VsZi1pbnRlcnNlY3Rpb25zIGxvY2FsbHlcbiAgICAgICAgICAgIH0gZWxzZSBpZiAocGFzcyA9PT0gMSkge1xuICAgICAgICAgICAgICAgIGVhciA9IGN1cmVMb2NhbEludGVyc2VjdGlvbnMoZWFyLCB0cmlhbmdsZXMsIGRpbSk7XG4gICAgICAgICAgICAgICAgZWFyY3V0TGlua2VkKGVhciwgdHJpYW5nbGVzLCBkaW0sIG1pblgsIG1pblksIHNpemUsIDIpO1xuXG4gICAgICAgICAgICAvLyBhcyBhIGxhc3QgcmVzb3J0LCB0cnkgc3BsaXR0aW5nIHRoZSByZW1haW5pbmcgcG9seWdvbiBpbnRvIHR3b1xuICAgICAgICAgICAgfSBlbHNlIGlmIChwYXNzID09PSAyKSB7XG4gICAgICAgICAgICAgICAgc3BsaXRFYXJjdXQoZWFyLCB0cmlhbmdsZXMsIGRpbSwgbWluWCwgbWluWSwgc2l6ZSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgfVxufVxuXG4vLyBjaGVjayB3aGV0aGVyIGEgcG9seWdvbiBub2RlIGZvcm1zIGEgdmFsaWQgZWFyIHdpdGggYWRqYWNlbnQgbm9kZXNcbmZ1bmN0aW9uIGlzRWFyKGVhcikge1xuICAgIHZhciBhID0gZWFyLnByZXYsXG4gICAgICAgIGIgPSBlYXIsXG4gICAgICAgIGMgPSBlYXIubmV4dDtcblxuICAgIGlmIChhcmVhKGEsIGIsIGMpID49IDApIHJldHVybiBmYWxzZTsgLy8gcmVmbGV4LCBjYW4ndCBiZSBhbiBlYXJcblxuICAgIC8vIG5vdyBtYWtlIHN1cmUgd2UgZG9uJ3QgaGF2ZSBvdGhlciBwb2ludHMgaW5zaWRlIHRoZSBwb3RlbnRpYWwgZWFyXG4gICAgdmFyIHAgPSBlYXIubmV4dC5uZXh0O1xuXG4gICAgd2hpbGUgKHAgIT09IGVhci5wcmV2KSB7XG4gICAgICAgIGlmIChwb2ludEluVHJpYW5nbGUoYS54LCBhLnksIGIueCwgYi55LCBjLngsIGMueSwgcC54LCBwLnkpICYmXG4gICAgICAgICAgICBhcmVhKHAucHJldiwgcCwgcC5uZXh0KSA+PSAwKSByZXR1cm4gZmFsc2U7XG4gICAgICAgIHAgPSBwLm5leHQ7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRydWU7XG59XG5cbmZ1bmN0aW9uIGlzRWFySGFzaGVkKGVhciwgbWluWCwgbWluWSwgc2l6ZSkge1xuICAgIHZhciBhID0gZWFyLnByZXYsXG4gICAgICAgIGIgPSBlYXIsXG4gICAgICAgIGMgPSBlYXIubmV4dDtcblxuICAgIGlmIChhcmVhKGEsIGIsIGMpID49IDApIHJldHVybiBmYWxzZTsgLy8gcmVmbGV4LCBjYW4ndCBiZSBhbiBlYXJcblxuICAgIC8vIHRyaWFuZ2xlIGJib3g7IG1pbiAmIG1heCBhcmUgY2FsY3VsYXRlZCBsaWtlIHRoaXMgZm9yIHNwZWVkXG4gICAgdmFyIG1pblRYID0gYS54IDwgYi54ID8gKGEueCA8IGMueCA/IGEueCA6IGMueCkgOiAoYi54IDwgYy54ID8gYi54IDogYy54KSxcbiAgICAgICAgbWluVFkgPSBhLnkgPCBiLnkgPyAoYS55IDwgYy55ID8gYS55IDogYy55KSA6IChiLnkgPCBjLnkgPyBiLnkgOiBjLnkpLFxuICAgICAgICBtYXhUWCA9IGEueCA+IGIueCA/IChhLnggPiBjLnggPyBhLnggOiBjLngpIDogKGIueCA+IGMueCA/IGIueCA6IGMueCksXG4gICAgICAgIG1heFRZID0gYS55ID4gYi55ID8gKGEueSA+IGMueSA/IGEueSA6IGMueSkgOiAoYi55ID4gYy55ID8gYi55IDogYy55KTtcblxuICAgIC8vIHotb3JkZXIgcmFuZ2UgZm9yIHRoZSBjdXJyZW50IHRyaWFuZ2xlIGJib3g7XG4gICAgdmFyIG1pblogPSB6T3JkZXIobWluVFgsIG1pblRZLCBtaW5YLCBtaW5ZLCBzaXplKSxcbiAgICAgICAgbWF4WiA9IHpPcmRlcihtYXhUWCwgbWF4VFksIG1pblgsIG1pblksIHNpemUpO1xuXG4gICAgLy8gZmlyc3QgbG9vayBmb3IgcG9pbnRzIGluc2lkZSB0aGUgdHJpYW5nbGUgaW4gaW5jcmVhc2luZyB6LW9yZGVyXG4gICAgdmFyIHAgPSBlYXIubmV4dFo7XG5cbiAgICB3aGlsZSAocCAmJiBwLnogPD0gbWF4Wikge1xuICAgICAgICBpZiAocCAhPT0gZWFyLnByZXYgJiYgcCAhPT0gZWFyLm5leHQgJiZcbiAgICAgICAgICAgIHBvaW50SW5UcmlhbmdsZShhLngsIGEueSwgYi54LCBiLnksIGMueCwgYy55LCBwLngsIHAueSkgJiZcbiAgICAgICAgICAgIGFyZWEocC5wcmV2LCBwLCBwLm5leHQpID49IDApIHJldHVybiBmYWxzZTtcbiAgICAgICAgcCA9IHAubmV4dFo7XG4gICAgfVxuXG4gICAgLy8gdGhlbiBsb29rIGZvciBwb2ludHMgaW4gZGVjcmVhc2luZyB6LW9yZGVyXG4gICAgcCA9IGVhci5wcmV2WjtcblxuICAgIHdoaWxlIChwICYmIHAueiA+PSBtaW5aKSB7XG4gICAgICAgIGlmIChwICE9PSBlYXIucHJldiAmJiBwICE9PSBlYXIubmV4dCAmJlxuICAgICAgICAgICAgcG9pbnRJblRyaWFuZ2xlKGEueCwgYS55LCBiLngsIGIueSwgYy54LCBjLnksIHAueCwgcC55KSAmJlxuICAgICAgICAgICAgYXJlYShwLnByZXYsIHAsIHAubmV4dCkgPj0gMCkgcmV0dXJuIGZhbHNlO1xuICAgICAgICBwID0gcC5wcmV2WjtcbiAgICB9XG5cbiAgICByZXR1cm4gdHJ1ZTtcbn1cblxuLy8gZ28gdGhyb3VnaCBhbGwgcG9seWdvbiBub2RlcyBhbmQgY3VyZSBzbWFsbCBsb2NhbCBzZWxmLWludGVyc2VjdGlvbnNcbmZ1bmN0aW9uIGN1cmVMb2NhbEludGVyc2VjdGlvbnMoc3RhcnQsIHRyaWFuZ2xlcywgZGltKSB7XG4gICAgdmFyIHAgPSBzdGFydDtcbiAgICBkbyB7XG4gICAgICAgIHZhciBhID0gcC5wcmV2LFxuICAgICAgICAgICAgYiA9IHAubmV4dC5uZXh0O1xuXG4gICAgICAgIC8vIGEgc2VsZi1pbnRlcnNlY3Rpb24gd2hlcmUgZWRnZSAodltpLTFdLHZbaV0pIGludGVyc2VjdHMgKHZbaSsxXSx2W2krMl0pXG4gICAgICAgIGlmIChpbnRlcnNlY3RzKGEsIHAsIHAubmV4dCwgYikgJiYgbG9jYWxseUluc2lkZShhLCBiKSAmJiBsb2NhbGx5SW5zaWRlKGIsIGEpKSB7XG5cbiAgICAgICAgICAgIHRyaWFuZ2xlcy5wdXNoKGEuaSAvIGRpbSk7XG4gICAgICAgICAgICB0cmlhbmdsZXMucHVzaChwLmkgLyBkaW0pO1xuICAgICAgICAgICAgdHJpYW5nbGVzLnB1c2goYi5pIC8gZGltKTtcblxuICAgICAgICAgICAgLy8gcmVtb3ZlIHR3byBub2RlcyBpbnZvbHZlZFxuICAgICAgICAgICAgcmVtb3ZlTm9kZShwKTtcbiAgICAgICAgICAgIHJlbW92ZU5vZGUocC5uZXh0KTtcblxuICAgICAgICAgICAgcCA9IHN0YXJ0ID0gYjtcbiAgICAgICAgfVxuICAgICAgICBwID0gcC5uZXh0O1xuICAgIH0gd2hpbGUgKHAgIT09IHN0YXJ0KTtcblxuICAgIHJldHVybiBwO1xufVxuXG4vLyB0cnkgc3BsaXR0aW5nIHBvbHlnb24gaW50byB0d28gYW5kIHRyaWFuZ3VsYXRlIHRoZW0gaW5kZXBlbmRlbnRseVxuZnVuY3Rpb24gc3BsaXRFYXJjdXQoc3RhcnQsIHRyaWFuZ2xlcywgZGltLCBtaW5YLCBtaW5ZLCBzaXplKSB7XG4gICAgLy8gbG9vayBmb3IgYSB2YWxpZCBkaWFnb25hbCB0aGF0IGRpdmlkZXMgdGhlIHBvbHlnb24gaW50byB0d29cbiAgICB2YXIgYSA9IHN0YXJ0O1xuICAgIGRvIHtcbiAgICAgICAgdmFyIGIgPSBhLm5leHQubmV4dDtcbiAgICAgICAgd2hpbGUgKGIgIT09IGEucHJldikge1xuICAgICAgICAgICAgaWYgKGEuaSAhPT0gYi5pICYmIGlzVmFsaWREaWFnb25hbChhLCBiKSkge1xuICAgICAgICAgICAgICAgIC8vIHNwbGl0IHRoZSBwb2x5Z29uIGluIHR3byBieSB0aGUgZGlhZ29uYWxcbiAgICAgICAgICAgICAgICB2YXIgYyA9IHNwbGl0UG9seWdvbihhLCBiKTtcblxuICAgICAgICAgICAgICAgIC8vIGZpbHRlciBjb2xpbmVhciBwb2ludHMgYXJvdW5kIHRoZSBjdXRzXG4gICAgICAgICAgICAgICAgYSA9IGZpbHRlclBvaW50cyhhLCBhLm5leHQpO1xuICAgICAgICAgICAgICAgIGMgPSBmaWx0ZXJQb2ludHMoYywgYy5uZXh0KTtcblxuICAgICAgICAgICAgICAgIC8vIHJ1biBlYXJjdXQgb24gZWFjaCBoYWxmXG4gICAgICAgICAgICAgICAgZWFyY3V0TGlua2VkKGEsIHRyaWFuZ2xlcywgZGltLCBtaW5YLCBtaW5ZLCBzaXplKTtcbiAgICAgICAgICAgICAgICBlYXJjdXRMaW5rZWQoYywgdHJpYW5nbGVzLCBkaW0sIG1pblgsIG1pblksIHNpemUpO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGIgPSBiLm5leHQ7XG4gICAgICAgIH1cbiAgICAgICAgYSA9IGEubmV4dDtcbiAgICB9IHdoaWxlIChhICE9PSBzdGFydCk7XG59XG5cbi8vIGxpbmsgZXZlcnkgaG9sZSBpbnRvIHRoZSBvdXRlciBsb29wLCBwcm9kdWNpbmcgYSBzaW5nbGUtcmluZyBwb2x5Z29uIHdpdGhvdXQgaG9sZXNcbmZ1bmN0aW9uIGVsaW1pbmF0ZUhvbGVzKGRhdGEsIGhvbGVJbmRpY2VzLCBvdXRlck5vZGUsIGRpbSkge1xuICAgIHZhciBxdWV1ZSA9IFtdLFxuICAgICAgICBpLCBsZW4sIHN0YXJ0LCBlbmQsIGxpc3Q7XG5cbiAgICBmb3IgKGkgPSAwLCBsZW4gPSBob2xlSW5kaWNlcy5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuICAgICAgICBzdGFydCA9IGhvbGVJbmRpY2VzW2ldICogZGltO1xuICAgICAgICBlbmQgPSBpIDwgbGVuIC0gMSA/IGhvbGVJbmRpY2VzW2kgKyAxXSAqIGRpbSA6IGRhdGEubGVuZ3RoO1xuICAgICAgICBsaXN0ID0gbGlua2VkTGlzdChkYXRhLCBzdGFydCwgZW5kLCBkaW0sIGZhbHNlKTtcbiAgICAgICAgaWYgKGxpc3QgPT09IGxpc3QubmV4dCkgbGlzdC5zdGVpbmVyID0gdHJ1ZTtcbiAgICAgICAgcXVldWUucHVzaChnZXRMZWZ0bW9zdChsaXN0KSk7XG4gICAgfVxuXG4gICAgcXVldWUuc29ydChjb21wYXJlWCk7XG5cbiAgICAvLyBwcm9jZXNzIGhvbGVzIGZyb20gbGVmdCB0byByaWdodFxuICAgIGZvciAoaSA9IDA7IGkgPCBxdWV1ZS5sZW5ndGg7IGkrKykge1xuICAgICAgICBlbGltaW5hdGVIb2xlKHF1ZXVlW2ldLCBvdXRlck5vZGUpO1xuICAgICAgICBvdXRlck5vZGUgPSBmaWx0ZXJQb2ludHMob3V0ZXJOb2RlLCBvdXRlck5vZGUubmV4dCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG91dGVyTm9kZTtcbn1cblxuZnVuY3Rpb24gY29tcGFyZVgoYSwgYikge1xuICAgIHJldHVybiBhLnggLSBiLng7XG59XG5cbi8vIGZpbmQgYSBicmlkZ2UgYmV0d2VlbiB2ZXJ0aWNlcyB0aGF0IGNvbm5lY3RzIGhvbGUgd2l0aCBhbiBvdXRlciByaW5nIGFuZCBhbmQgbGluayBpdFxuZnVuY3Rpb24gZWxpbWluYXRlSG9sZShob2xlLCBvdXRlck5vZGUpIHtcbiAgICBvdXRlck5vZGUgPSBmaW5kSG9sZUJyaWRnZShob2xlLCBvdXRlck5vZGUpO1xuICAgIGlmIChvdXRlck5vZGUpIHtcbiAgICAgICAgdmFyIGIgPSBzcGxpdFBvbHlnb24ob3V0ZXJOb2RlLCBob2xlKTtcbiAgICAgICAgZmlsdGVyUG9pbnRzKGIsIGIubmV4dCk7XG4gICAgfVxufVxuXG4vLyBEYXZpZCBFYmVybHkncyBhbGdvcml0aG0gZm9yIGZpbmRpbmcgYSBicmlkZ2UgYmV0d2VlbiBob2xlIGFuZCBvdXRlciBwb2x5Z29uXG5mdW5jdGlvbiBmaW5kSG9sZUJyaWRnZShob2xlLCBvdXRlck5vZGUpIHtcbiAgICB2YXIgcCA9IG91dGVyTm9kZSxcbiAgICAgICAgaHggPSBob2xlLngsXG4gICAgICAgIGh5ID0gaG9sZS55LFxuICAgICAgICBxeCA9IC1JbmZpbml0eSxcbiAgICAgICAgbTtcblxuICAgIC8vIGZpbmQgYSBzZWdtZW50IGludGVyc2VjdGVkIGJ5IGEgcmF5IGZyb20gdGhlIGhvbGUncyBsZWZ0bW9zdCBwb2ludCB0byB0aGUgbGVmdDtcbiAgICAvLyBzZWdtZW50J3MgZW5kcG9pbnQgd2l0aCBsZXNzZXIgeCB3aWxsIGJlIHBvdGVudGlhbCBjb25uZWN0aW9uIHBvaW50XG4gICAgZG8ge1xuICAgICAgICBpZiAoaHkgPD0gcC55ICYmIGh5ID49IHAubmV4dC55KSB7XG4gICAgICAgICAgICB2YXIgeCA9IHAueCArIChoeSAtIHAueSkgKiAocC5uZXh0LnggLSBwLngpIC8gKHAubmV4dC55IC0gcC55KTtcbiAgICAgICAgICAgIGlmICh4IDw9IGh4ICYmIHggPiBxeCkge1xuICAgICAgICAgICAgICAgIHF4ID0geDtcbiAgICAgICAgICAgICAgICBtID0gcC54IDwgcC5uZXh0LnggPyBwIDogcC5uZXh0O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHAgPSBwLm5leHQ7XG4gICAgfSB3aGlsZSAocCAhPT0gb3V0ZXJOb2RlKTtcblxuICAgIGlmICghbSkgcmV0dXJuIG51bGw7XG5cbiAgICAvLyBsb29rIGZvciBwb2ludHMgaW5zaWRlIHRoZSB0cmlhbmdsZSBvZiBob2xlIHBvaW50LCBzZWdtZW50IGludGVyc2VjdGlvbiBhbmQgZW5kcG9pbnQ7XG4gICAgLy8gaWYgdGhlcmUgYXJlIG5vIHBvaW50cyBmb3VuZCwgd2UgaGF2ZSBhIHZhbGlkIGNvbm5lY3Rpb247XG4gICAgLy8gb3RoZXJ3aXNlIGNob29zZSB0aGUgcG9pbnQgb2YgdGhlIG1pbmltdW0gYW5nbGUgd2l0aCB0aGUgcmF5IGFzIGNvbm5lY3Rpb24gcG9pbnRcblxuICAgIHZhciBzdG9wID0gbSxcbiAgICAgICAgdGFuTWluID0gSW5maW5pdHksXG4gICAgICAgIHRhbjtcblxuICAgIHAgPSBtLm5leHQ7XG5cbiAgICB3aGlsZSAocCAhPT0gc3RvcCkge1xuICAgICAgICBpZiAoaHggPj0gcC54ICYmIHAueCA+PSBtLnggJiZcbiAgICAgICAgICAgICAgICBwb2ludEluVHJpYW5nbGUoaHkgPCBtLnkgPyBoeCA6IHF4LCBoeSwgbS54LCBtLnksIGh5IDwgbS55ID8gcXggOiBoeCwgaHksIHAueCwgcC55KSkge1xuXG4gICAgICAgICAgICB0YW4gPSBNYXRoLmFicyhoeSAtIHAueSkgLyAoaHggLSBwLngpOyAvLyB0YW5nZW50aWFsXG5cbiAgICAgICAgICAgIGlmICgodGFuIDwgdGFuTWluIHx8ICh0YW4gPT09IHRhbk1pbiAmJiBwLnggPiBtLngpKSAmJiBsb2NhbGx5SW5zaWRlKHAsIGhvbGUpKSB7XG4gICAgICAgICAgICAgICAgbSA9IHA7XG4gICAgICAgICAgICAgICAgdGFuTWluID0gdGFuO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcCA9IHAubmV4dDtcbiAgICB9XG5cbiAgICByZXR1cm4gbTtcbn1cblxuLy8gaW50ZXJsaW5rIHBvbHlnb24gbm9kZXMgaW4gei1vcmRlclxuZnVuY3Rpb24gaW5kZXhDdXJ2ZShzdGFydCwgbWluWCwgbWluWSwgc2l6ZSkge1xuICAgIHZhciBwID0gc3RhcnQ7XG4gICAgZG8ge1xuICAgICAgICBpZiAocC56ID09PSBudWxsKSBwLnogPSB6T3JkZXIocC54LCBwLnksIG1pblgsIG1pblksIHNpemUpO1xuICAgICAgICBwLnByZXZaID0gcC5wcmV2O1xuICAgICAgICBwLm5leHRaID0gcC5uZXh0O1xuICAgICAgICBwID0gcC5uZXh0O1xuICAgIH0gd2hpbGUgKHAgIT09IHN0YXJ0KTtcblxuICAgIHAucHJldloubmV4dFogPSBudWxsO1xuICAgIHAucHJldlogPSBudWxsO1xuXG4gICAgc29ydExpbmtlZChwKTtcbn1cblxuLy8gU2ltb24gVGF0aGFtJ3MgbGlua2VkIGxpc3QgbWVyZ2Ugc29ydCBhbGdvcml0aG1cbi8vIGh0dHA6Ly93d3cuY2hpYXJrLmdyZWVuZW5kLm9yZy51ay9+c2d0YXRoYW0vYWxnb3JpdGhtcy9saXN0c29ydC5odG1sXG5mdW5jdGlvbiBzb3J0TGlua2VkKGxpc3QpIHtcbiAgICB2YXIgaSwgcCwgcSwgZSwgdGFpbCwgbnVtTWVyZ2VzLCBwU2l6ZSwgcVNpemUsXG4gICAgICAgIGluU2l6ZSA9IDE7XG5cbiAgICBkbyB7XG4gICAgICAgIHAgPSBsaXN0O1xuICAgICAgICBsaXN0ID0gbnVsbDtcbiAgICAgICAgdGFpbCA9IG51bGw7XG4gICAgICAgIG51bU1lcmdlcyA9IDA7XG5cbiAgICAgICAgd2hpbGUgKHApIHtcbiAgICAgICAgICAgIG51bU1lcmdlcysrO1xuICAgICAgICAgICAgcSA9IHA7XG4gICAgICAgICAgICBwU2l6ZSA9IDA7XG4gICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgaW5TaXplOyBpKyspIHtcbiAgICAgICAgICAgICAgICBwU2l6ZSsrO1xuICAgICAgICAgICAgICAgIHEgPSBxLm5leHRaO1xuICAgICAgICAgICAgICAgIGlmICghcSkgYnJlYWs7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHFTaXplID0gaW5TaXplO1xuXG4gICAgICAgICAgICB3aGlsZSAocFNpemUgPiAwIHx8IChxU2l6ZSA+IDAgJiYgcSkpIHtcblxuICAgICAgICAgICAgICAgIGlmIChwU2l6ZSA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICBlID0gcTtcbiAgICAgICAgICAgICAgICAgICAgcSA9IHEubmV4dFo7XG4gICAgICAgICAgICAgICAgICAgIHFTaXplLS07XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChxU2l6ZSA9PT0gMCB8fCAhcSkge1xuICAgICAgICAgICAgICAgICAgICBlID0gcDtcbiAgICAgICAgICAgICAgICAgICAgcCA9IHAubmV4dFo7XG4gICAgICAgICAgICAgICAgICAgIHBTaXplLS07XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChwLnogPD0gcS56KSB7XG4gICAgICAgICAgICAgICAgICAgIGUgPSBwO1xuICAgICAgICAgICAgICAgICAgICBwID0gcC5uZXh0WjtcbiAgICAgICAgICAgICAgICAgICAgcFNpemUtLTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBlID0gcTtcbiAgICAgICAgICAgICAgICAgICAgcSA9IHEubmV4dFo7XG4gICAgICAgICAgICAgICAgICAgIHFTaXplLS07XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKHRhaWwpIHRhaWwubmV4dFogPSBlO1xuICAgICAgICAgICAgICAgIGVsc2UgbGlzdCA9IGU7XG5cbiAgICAgICAgICAgICAgICBlLnByZXZaID0gdGFpbDtcbiAgICAgICAgICAgICAgICB0YWlsID0gZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcCA9IHE7XG4gICAgICAgIH1cblxuICAgICAgICB0YWlsLm5leHRaID0gbnVsbDtcbiAgICAgICAgaW5TaXplICo9IDI7XG5cbiAgICB9IHdoaWxlIChudW1NZXJnZXMgPiAxKTtcblxuICAgIHJldHVybiBsaXN0O1xufVxuXG4vLyB6LW9yZGVyIG9mIGEgcG9pbnQgZ2l2ZW4gY29vcmRzIGFuZCBzaXplIG9mIHRoZSBkYXRhIGJvdW5kaW5nIGJveFxuZnVuY3Rpb24gek9yZGVyKHgsIHksIG1pblgsIG1pblksIHNpemUpIHtcbiAgICAvLyBjb29yZHMgYXJlIHRyYW5zZm9ybWVkIGludG8gbm9uLW5lZ2F0aXZlIDE1LWJpdCBpbnRlZ2VyIHJhbmdlXG4gICAgeCA9IDMyNzY3ICogKHggLSBtaW5YKSAvIHNpemU7XG4gICAgeSA9IDMyNzY3ICogKHkgLSBtaW5ZKSAvIHNpemU7XG5cbiAgICB4ID0gKHggfCAoeCA8PCA4KSkgJiAweDAwRkYwMEZGO1xuICAgIHggPSAoeCB8ICh4IDw8IDQpKSAmIDB4MEYwRjBGMEY7XG4gICAgeCA9ICh4IHwgKHggPDwgMikpICYgMHgzMzMzMzMzMztcbiAgICB4ID0gKHggfCAoeCA8PCAxKSkgJiAweDU1NTU1NTU1O1xuXG4gICAgeSA9ICh5IHwgKHkgPDwgOCkpICYgMHgwMEZGMDBGRjtcbiAgICB5ID0gKHkgfCAoeSA8PCA0KSkgJiAweDBGMEYwRjBGO1xuICAgIHkgPSAoeSB8ICh5IDw8IDIpKSAmIDB4MzMzMzMzMzM7XG4gICAgeSA9ICh5IHwgKHkgPDwgMSkpICYgMHg1NTU1NTU1NTtcblxuICAgIHJldHVybiB4IHwgKHkgPDwgMSk7XG59XG5cbi8vIGZpbmQgdGhlIGxlZnRtb3N0IG5vZGUgb2YgYSBwb2x5Z29uIHJpbmdcbmZ1bmN0aW9uIGdldExlZnRtb3N0KHN0YXJ0KSB7XG4gICAgdmFyIHAgPSBzdGFydCxcbiAgICAgICAgbGVmdG1vc3QgPSBzdGFydDtcbiAgICBkbyB7XG4gICAgICAgIGlmIChwLnggPCBsZWZ0bW9zdC54KSBsZWZ0bW9zdCA9IHA7XG4gICAgICAgIHAgPSBwLm5leHQ7XG4gICAgfSB3aGlsZSAocCAhPT0gc3RhcnQpO1xuXG4gICAgcmV0dXJuIGxlZnRtb3N0O1xufVxuXG4vLyBjaGVjayBpZiBhIHBvaW50IGxpZXMgd2l0aGluIGEgY29udmV4IHRyaWFuZ2xlXG5mdW5jdGlvbiBwb2ludEluVHJpYW5nbGUoYXgsIGF5LCBieCwgYnksIGN4LCBjeSwgcHgsIHB5KSB7XG4gICAgcmV0dXJuIChjeCAtIHB4KSAqIChheSAtIHB5KSAtIChheCAtIHB4KSAqIChjeSAtIHB5KSA+PSAwICYmXG4gICAgICAgICAgIChheCAtIHB4KSAqIChieSAtIHB5KSAtIChieCAtIHB4KSAqIChheSAtIHB5KSA+PSAwICYmXG4gICAgICAgICAgIChieCAtIHB4KSAqIChjeSAtIHB5KSAtIChjeCAtIHB4KSAqIChieSAtIHB5KSA+PSAwO1xufVxuXG4vLyBjaGVjayBpZiBhIGRpYWdvbmFsIGJldHdlZW4gdHdvIHBvbHlnb24gbm9kZXMgaXMgdmFsaWQgKGxpZXMgaW4gcG9seWdvbiBpbnRlcmlvcilcbmZ1bmN0aW9uIGlzVmFsaWREaWFnb25hbChhLCBiKSB7XG4gICAgcmV0dXJuIGVxdWFscyhhLCBiKSB8fCBhLm5leHQuaSAhPT0gYi5pICYmIGEucHJldi5pICE9PSBiLmkgJiYgIWludGVyc2VjdHNQb2x5Z29uKGEsIGIpICYmXG4gICAgICAgICAgIGxvY2FsbHlJbnNpZGUoYSwgYikgJiYgbG9jYWxseUluc2lkZShiLCBhKSAmJiBtaWRkbGVJbnNpZGUoYSwgYik7XG59XG5cbi8vIHNpZ25lZCBhcmVhIG9mIGEgdHJpYW5nbGVcbmZ1bmN0aW9uIGFyZWEocCwgcSwgcikge1xuICAgIHJldHVybiAocS55IC0gcC55KSAqIChyLnggLSBxLngpIC0gKHEueCAtIHAueCkgKiAoci55IC0gcS55KTtcbn1cblxuLy8gY2hlY2sgaWYgdHdvIHBvaW50cyBhcmUgZXF1YWxcbmZ1bmN0aW9uIGVxdWFscyhwMSwgcDIpIHtcbiAgICByZXR1cm4gcDEueCA9PT0gcDIueCAmJiBwMS55ID09PSBwMi55O1xufVxuXG4vLyBjaGVjayBpZiB0d28gc2VnbWVudHMgaW50ZXJzZWN0XG5mdW5jdGlvbiBpbnRlcnNlY3RzKHAxLCBxMSwgcDIsIHEyKSB7XG4gICAgcmV0dXJuIGFyZWEocDEsIHExLCBwMikgPiAwICE9PSBhcmVhKHAxLCBxMSwgcTIpID4gMCAmJlxuICAgICAgICAgICBhcmVhKHAyLCBxMiwgcDEpID4gMCAhPT0gYXJlYShwMiwgcTIsIHExKSA+IDA7XG59XG5cbi8vIGNoZWNrIGlmIGEgcG9seWdvbiBkaWFnb25hbCBpbnRlcnNlY3RzIGFueSBwb2x5Z29uIHNlZ21lbnRzXG5mdW5jdGlvbiBpbnRlcnNlY3RzUG9seWdvbihhLCBiKSB7XG4gICAgdmFyIHAgPSBhO1xuICAgIGRvIHtcbiAgICAgICAgaWYgKHAuaSAhPT0gYS5pICYmIHAubmV4dC5pICE9PSBhLmkgJiYgcC5pICE9PSBiLmkgJiYgcC5uZXh0LmkgIT09IGIuaSAmJlxuICAgICAgICAgICAgICAgIGludGVyc2VjdHMocCwgcC5uZXh0LCBhLCBiKSkgcmV0dXJuIHRydWU7XG4gICAgICAgIHAgPSBwLm5leHQ7XG4gICAgfSB3aGlsZSAocCAhPT0gYSk7XG5cbiAgICByZXR1cm4gZmFsc2U7XG59XG5cbi8vIGNoZWNrIGlmIGEgcG9seWdvbiBkaWFnb25hbCBpcyBsb2NhbGx5IGluc2lkZSB0aGUgcG9seWdvblxuZnVuY3Rpb24gbG9jYWxseUluc2lkZShhLCBiKSB7XG4gICAgcmV0dXJuIGFyZWEoYS5wcmV2LCBhLCBhLm5leHQpIDwgMCA/XG4gICAgICAgIGFyZWEoYSwgYiwgYS5uZXh0KSA+PSAwICYmIGFyZWEoYSwgYS5wcmV2LCBiKSA+PSAwIDpcbiAgICAgICAgYXJlYShhLCBiLCBhLnByZXYpIDwgMCB8fCBhcmVhKGEsIGEubmV4dCwgYikgPCAwO1xufVxuXG4vLyBjaGVjayBpZiB0aGUgbWlkZGxlIHBvaW50IG9mIGEgcG9seWdvbiBkaWFnb25hbCBpcyBpbnNpZGUgdGhlIHBvbHlnb25cbmZ1bmN0aW9uIG1pZGRsZUluc2lkZShhLCBiKSB7XG4gICAgdmFyIHAgPSBhLFxuICAgICAgICBpbnNpZGUgPSBmYWxzZSxcbiAgICAgICAgcHggPSAoYS54ICsgYi54KSAvIDIsXG4gICAgICAgIHB5ID0gKGEueSArIGIueSkgLyAyO1xuICAgIGRvIHtcbiAgICAgICAgaWYgKCgocC55ID4gcHkpICE9PSAocC5uZXh0LnkgPiBweSkpICYmIChweCA8IChwLm5leHQueCAtIHAueCkgKiAocHkgLSBwLnkpIC8gKHAubmV4dC55IC0gcC55KSArIHAueCkpXG4gICAgICAgICAgICBpbnNpZGUgPSAhaW5zaWRlO1xuICAgICAgICBwID0gcC5uZXh0O1xuICAgIH0gd2hpbGUgKHAgIT09IGEpO1xuXG4gICAgcmV0dXJuIGluc2lkZTtcbn1cblxuLy8gbGluayB0d28gcG9seWdvbiB2ZXJ0aWNlcyB3aXRoIGEgYnJpZGdlOyBpZiB0aGUgdmVydGljZXMgYmVsb25nIHRvIHRoZSBzYW1lIHJpbmcsIGl0IHNwbGl0cyBwb2x5Z29uIGludG8gdHdvO1xuLy8gaWYgb25lIGJlbG9uZ3MgdG8gdGhlIG91dGVyIHJpbmcgYW5kIGFub3RoZXIgdG8gYSBob2xlLCBpdCBtZXJnZXMgaXQgaW50byBhIHNpbmdsZSByaW5nXG5mdW5jdGlvbiBzcGxpdFBvbHlnb24oYSwgYikge1xuICAgIHZhciBhMiA9IG5ldyBOb2RlKGEuaSwgYS54LCBhLnkpLFxuICAgICAgICBiMiA9IG5ldyBOb2RlKGIuaSwgYi54LCBiLnkpLFxuICAgICAgICBhbiA9IGEubmV4dCxcbiAgICAgICAgYnAgPSBiLnByZXY7XG5cbiAgICBhLm5leHQgPSBiO1xuICAgIGIucHJldiA9IGE7XG5cbiAgICBhMi5uZXh0ID0gYW47XG4gICAgYW4ucHJldiA9IGEyO1xuXG4gICAgYjIubmV4dCA9IGEyO1xuICAgIGEyLnByZXYgPSBiMjtcblxuICAgIGJwLm5leHQgPSBiMjtcbiAgICBiMi5wcmV2ID0gYnA7XG5cbiAgICByZXR1cm4gYjI7XG59XG5cbi8vIGNyZWF0ZSBhIG5vZGUgYW5kIG9wdGlvbmFsbHkgbGluayBpdCB3aXRoIHByZXZpb3VzIG9uZSAoaW4gYSBjaXJjdWxhciBkb3VibHkgbGlua2VkIGxpc3QpXG5mdW5jdGlvbiBpbnNlcnROb2RlKGksIHgsIHksIGxhc3QpIHtcbiAgICB2YXIgcCA9IG5ldyBOb2RlKGksIHgsIHkpO1xuXG4gICAgaWYgKCFsYXN0KSB7XG4gICAgICAgIHAucHJldiA9IHA7XG4gICAgICAgIHAubmV4dCA9IHA7XG5cbiAgICB9IGVsc2Uge1xuICAgICAgICBwLm5leHQgPSBsYXN0Lm5leHQ7XG4gICAgICAgIHAucHJldiA9IGxhc3Q7XG4gICAgICAgIGxhc3QubmV4dC5wcmV2ID0gcDtcbiAgICAgICAgbGFzdC5uZXh0ID0gcDtcbiAgICB9XG4gICAgcmV0dXJuIHA7XG59XG5cbmZ1bmN0aW9uIHJlbW92ZU5vZGUocCkge1xuICAgIHAubmV4dC5wcmV2ID0gcC5wcmV2O1xuICAgIHAucHJldi5uZXh0ID0gcC5uZXh0O1xuXG4gICAgaWYgKHAucHJldlopIHAucHJldloubmV4dFogPSBwLm5leHRaO1xuICAgIGlmIChwLm5leHRaKSBwLm5leHRaLnByZXZaID0gcC5wcmV2Wjtcbn1cblxuZnVuY3Rpb24gTm9kZShpLCB4LCB5KSB7XG4gICAgLy8gdmVydGljZSBpbmRleCBpbiBjb29yZGluYXRlcyBhcnJheVxuICAgIHRoaXMuaSA9IGk7XG5cbiAgICAvLyB2ZXJ0ZXggY29vcmRpbmF0ZXNcbiAgICB0aGlzLnggPSB4O1xuICAgIHRoaXMueSA9IHk7XG5cbiAgICAvLyBwcmV2aW91cyBhbmQgbmV4dCB2ZXJ0aWNlIG5vZGVzIGluIGEgcG9seWdvbiByaW5nXG4gICAgdGhpcy5wcmV2ID0gbnVsbDtcbiAgICB0aGlzLm5leHQgPSBudWxsO1xuXG4gICAgLy8gei1vcmRlciBjdXJ2ZSB2YWx1ZVxuICAgIHRoaXMueiA9IG51bGw7XG5cbiAgICAvLyBwcmV2aW91cyBhbmQgbmV4dCBub2RlcyBpbiB6LW9yZGVyXG4gICAgdGhpcy5wcmV2WiA9IG51bGw7XG4gICAgdGhpcy5uZXh0WiA9IG51bGw7XG5cbiAgICAvLyBpbmRpY2F0ZXMgd2hldGhlciB0aGlzIGlzIGEgc3RlaW5lciBwb2ludFxuICAgIHRoaXMuc3RlaW5lciA9IGZhbHNlO1xufVxuIiwiJ3VzZSBzdHJpY3QnO1xuXG4vL1xuLy8gV2Ugc3RvcmUgb3VyIEVFIG9iamVjdHMgaW4gYSBwbGFpbiBvYmplY3Qgd2hvc2UgcHJvcGVydGllcyBhcmUgZXZlbnQgbmFtZXMuXG4vLyBJZiBgT2JqZWN0LmNyZWF0ZShudWxsKWAgaXMgbm90IHN1cHBvcnRlZCB3ZSBwcmVmaXggdGhlIGV2ZW50IG5hbWVzIHdpdGggYVxuLy8gYH5gIHRvIG1ha2Ugc3VyZSB0aGF0IHRoZSBidWlsdC1pbiBvYmplY3QgcHJvcGVydGllcyBhcmUgbm90IG92ZXJyaWRkZW4gb3Jcbi8vIHVzZWQgYXMgYW4gYXR0YWNrIHZlY3Rvci5cbi8vIFdlIGFsc28gYXNzdW1lIHRoYXQgYE9iamVjdC5jcmVhdGUobnVsbClgIGlzIGF2YWlsYWJsZSB3aGVuIHRoZSBldmVudCBuYW1lXG4vLyBpcyBhbiBFUzYgU3ltYm9sLlxuLy9cbnZhciBwcmVmaXggPSB0eXBlb2YgT2JqZWN0LmNyZWF0ZSAhPT0gJ2Z1bmN0aW9uJyA/ICd+JyA6IGZhbHNlO1xuXG4vKipcbiAqIFJlcHJlc2VudGF0aW9uIG9mIGEgc2luZ2xlIEV2ZW50RW1pdHRlciBmdW5jdGlvbi5cbiAqXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmbiBFdmVudCBoYW5kbGVyIHRvIGJlIGNhbGxlZC5cbiAqIEBwYXJhbSB7TWl4ZWR9IGNvbnRleHQgQ29udGV4dCBmb3IgZnVuY3Rpb24gZXhlY3V0aW9uLlxuICogQHBhcmFtIHtCb29sZWFufSBvbmNlIE9ubHkgZW1pdCBvbmNlXG4gKiBAYXBpIHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gRUUoZm4sIGNvbnRleHQsIG9uY2UpIHtcbiAgdGhpcy5mbiA9IGZuO1xuICB0aGlzLmNvbnRleHQgPSBjb250ZXh0O1xuICB0aGlzLm9uY2UgPSBvbmNlIHx8IGZhbHNlO1xufVxuXG4vKipcbiAqIE1pbmltYWwgRXZlbnRFbWl0dGVyIGludGVyZmFjZSB0aGF0IGlzIG1vbGRlZCBhZ2FpbnN0IHRoZSBOb2RlLmpzXG4gKiBFdmVudEVtaXR0ZXIgaW50ZXJmYWNlLlxuICpcbiAqIEBjb25zdHJ1Y3RvclxuICogQGFwaSBwdWJsaWNcbiAqL1xuZnVuY3Rpb24gRXZlbnRFbWl0dGVyKCkgeyAvKiBOb3RoaW5nIHRvIHNldCAqLyB9XG5cbi8qKlxuICogSG9sZHMgdGhlIGFzc2lnbmVkIEV2ZW50RW1pdHRlcnMgYnkgbmFtZS5cbiAqXG4gKiBAdHlwZSB7T2JqZWN0fVxuICogQHByaXZhdGVcbiAqL1xuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5fZXZlbnRzID0gdW5kZWZpbmVkO1xuXG4vKipcbiAqIFJldHVybiBhIGxpc3Qgb2YgYXNzaWduZWQgZXZlbnQgbGlzdGVuZXJzLlxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBldmVudCBUaGUgZXZlbnRzIHRoYXQgc2hvdWxkIGJlIGxpc3RlZC5cbiAqIEBwYXJhbSB7Qm9vbGVhbn0gZXhpc3RzIFdlIG9ubHkgbmVlZCB0byBrbm93IGlmIHRoZXJlIGFyZSBsaXN0ZW5lcnMuXG4gKiBAcmV0dXJucyB7QXJyYXl8Qm9vbGVhbn1cbiAqIEBhcGkgcHVibGljXG4gKi9cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUubGlzdGVuZXJzID0gZnVuY3Rpb24gbGlzdGVuZXJzKGV2ZW50LCBleGlzdHMpIHtcbiAgdmFyIGV2dCA9IHByZWZpeCA/IHByZWZpeCArIGV2ZW50IDogZXZlbnRcbiAgICAsIGF2YWlsYWJsZSA9IHRoaXMuX2V2ZW50cyAmJiB0aGlzLl9ldmVudHNbZXZ0XTtcblxuICBpZiAoZXhpc3RzKSByZXR1cm4gISFhdmFpbGFibGU7XG4gIGlmICghYXZhaWxhYmxlKSByZXR1cm4gW107XG4gIGlmIChhdmFpbGFibGUuZm4pIHJldHVybiBbYXZhaWxhYmxlLmZuXTtcblxuICBmb3IgKHZhciBpID0gMCwgbCA9IGF2YWlsYWJsZS5sZW5ndGgsIGVlID0gbmV3IEFycmF5KGwpOyBpIDwgbDsgaSsrKSB7XG4gICAgZWVbaV0gPSBhdmFpbGFibGVbaV0uZm47XG4gIH1cblxuICByZXR1cm4gZWU7XG59O1xuXG4vKipcbiAqIEVtaXQgYW4gZXZlbnQgdG8gYWxsIHJlZ2lzdGVyZWQgZXZlbnQgbGlzdGVuZXJzLlxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBldmVudCBUaGUgbmFtZSBvZiB0aGUgZXZlbnQuXG4gKiBAcmV0dXJucyB7Qm9vbGVhbn0gSW5kaWNhdGlvbiBpZiB3ZSd2ZSBlbWl0dGVkIGFuIGV2ZW50LlxuICogQGFwaSBwdWJsaWNcbiAqL1xuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5lbWl0ID0gZnVuY3Rpb24gZW1pdChldmVudCwgYTEsIGEyLCBhMywgYTQsIGE1KSB7XG4gIHZhciBldnQgPSBwcmVmaXggPyBwcmVmaXggKyBldmVudCA6IGV2ZW50O1xuXG4gIGlmICghdGhpcy5fZXZlbnRzIHx8ICF0aGlzLl9ldmVudHNbZXZ0XSkgcmV0dXJuIGZhbHNlO1xuXG4gIHZhciBsaXN0ZW5lcnMgPSB0aGlzLl9ldmVudHNbZXZ0XVxuICAgICwgbGVuID0gYXJndW1lbnRzLmxlbmd0aFxuICAgICwgYXJnc1xuICAgICwgaTtcblxuICBpZiAoJ2Z1bmN0aW9uJyA9PT0gdHlwZW9mIGxpc3RlbmVycy5mbikge1xuICAgIGlmIChsaXN0ZW5lcnMub25jZSkgdGhpcy5yZW1vdmVMaXN0ZW5lcihldmVudCwgbGlzdGVuZXJzLmZuLCB1bmRlZmluZWQsIHRydWUpO1xuXG4gICAgc3dpdGNoIChsZW4pIHtcbiAgICAgIGNhc2UgMTogcmV0dXJuIGxpc3RlbmVycy5mbi5jYWxsKGxpc3RlbmVycy5jb250ZXh0KSwgdHJ1ZTtcbiAgICAgIGNhc2UgMjogcmV0dXJuIGxpc3RlbmVycy5mbi5jYWxsKGxpc3RlbmVycy5jb250ZXh0LCBhMSksIHRydWU7XG4gICAgICBjYXNlIDM6IHJldHVybiBsaXN0ZW5lcnMuZm4uY2FsbChsaXN0ZW5lcnMuY29udGV4dCwgYTEsIGEyKSwgdHJ1ZTtcbiAgICAgIGNhc2UgNDogcmV0dXJuIGxpc3RlbmVycy5mbi5jYWxsKGxpc3RlbmVycy5jb250ZXh0LCBhMSwgYTIsIGEzKSwgdHJ1ZTtcbiAgICAgIGNhc2UgNTogcmV0dXJuIGxpc3RlbmVycy5mbi5jYWxsKGxpc3RlbmVycy5jb250ZXh0LCBhMSwgYTIsIGEzLCBhNCksIHRydWU7XG4gICAgICBjYXNlIDY6IHJldHVybiBsaXN0ZW5lcnMuZm4uY2FsbChsaXN0ZW5lcnMuY29udGV4dCwgYTEsIGEyLCBhMywgYTQsIGE1KSwgdHJ1ZTtcbiAgICB9XG5cbiAgICBmb3IgKGkgPSAxLCBhcmdzID0gbmV3IEFycmF5KGxlbiAtMSk7IGkgPCBsZW47IGkrKykge1xuICAgICAgYXJnc1tpIC0gMV0gPSBhcmd1bWVudHNbaV07XG4gICAgfVxuXG4gICAgbGlzdGVuZXJzLmZuLmFwcGx5KGxpc3RlbmVycy5jb250ZXh0LCBhcmdzKTtcbiAgfSBlbHNlIHtcbiAgICB2YXIgbGVuZ3RoID0gbGlzdGVuZXJzLmxlbmd0aFxuICAgICAgLCBqO1xuXG4gICAgZm9yIChpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAobGlzdGVuZXJzW2ldLm9uY2UpIHRoaXMucmVtb3ZlTGlzdGVuZXIoZXZlbnQsIGxpc3RlbmVyc1tpXS5mbiwgdW5kZWZpbmVkLCB0cnVlKTtcblxuICAgICAgc3dpdGNoIChsZW4pIHtcbiAgICAgICAgY2FzZSAxOiBsaXN0ZW5lcnNbaV0uZm4uY2FsbChsaXN0ZW5lcnNbaV0uY29udGV4dCk7IGJyZWFrO1xuICAgICAgICBjYXNlIDI6IGxpc3RlbmVyc1tpXS5mbi5jYWxsKGxpc3RlbmVyc1tpXS5jb250ZXh0LCBhMSk7IGJyZWFrO1xuICAgICAgICBjYXNlIDM6IGxpc3RlbmVyc1tpXS5mbi5jYWxsKGxpc3RlbmVyc1tpXS5jb250ZXh0LCBhMSwgYTIpOyBicmVhaztcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICBpZiAoIWFyZ3MpIGZvciAoaiA9IDEsIGFyZ3MgPSBuZXcgQXJyYXkobGVuIC0xKTsgaiA8IGxlbjsgaisrKSB7XG4gICAgICAgICAgICBhcmdzW2ogLSAxXSA9IGFyZ3VtZW50c1tqXTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBsaXN0ZW5lcnNbaV0uZm4uYXBwbHkobGlzdGVuZXJzW2ldLmNvbnRleHQsIGFyZ3MpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiB0cnVlO1xufTtcblxuLyoqXG4gKiBSZWdpc3RlciBhIG5ldyBFdmVudExpc3RlbmVyIGZvciB0aGUgZ2l2ZW4gZXZlbnQuXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IGV2ZW50IE5hbWUgb2YgdGhlIGV2ZW50LlxuICogQHBhcmFtIHtGdW5jdG9ufSBmbiBDYWxsYmFjayBmdW5jdGlvbi5cbiAqIEBwYXJhbSB7TWl4ZWR9IGNvbnRleHQgVGhlIGNvbnRleHQgb2YgdGhlIGZ1bmN0aW9uLlxuICogQGFwaSBwdWJsaWNcbiAqL1xuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5vbiA9IGZ1bmN0aW9uIG9uKGV2ZW50LCBmbiwgY29udGV4dCkge1xuICB2YXIgbGlzdGVuZXIgPSBuZXcgRUUoZm4sIGNvbnRleHQgfHwgdGhpcylcbiAgICAsIGV2dCA9IHByZWZpeCA/IHByZWZpeCArIGV2ZW50IDogZXZlbnQ7XG5cbiAgaWYgKCF0aGlzLl9ldmVudHMpIHRoaXMuX2V2ZW50cyA9IHByZWZpeCA/IHt9IDogT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgaWYgKCF0aGlzLl9ldmVudHNbZXZ0XSkgdGhpcy5fZXZlbnRzW2V2dF0gPSBsaXN0ZW5lcjtcbiAgZWxzZSB7XG4gICAgaWYgKCF0aGlzLl9ldmVudHNbZXZ0XS5mbikgdGhpcy5fZXZlbnRzW2V2dF0ucHVzaChsaXN0ZW5lcik7XG4gICAgZWxzZSB0aGlzLl9ldmVudHNbZXZ0XSA9IFtcbiAgICAgIHRoaXMuX2V2ZW50c1tldnRdLCBsaXN0ZW5lclxuICAgIF07XG4gIH1cblxuICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogQWRkIGFuIEV2ZW50TGlzdGVuZXIgdGhhdCdzIG9ubHkgY2FsbGVkIG9uY2UuXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IGV2ZW50IE5hbWUgb2YgdGhlIGV2ZW50LlxuICogQHBhcmFtIHtGdW5jdGlvbn0gZm4gQ2FsbGJhY2sgZnVuY3Rpb24uXG4gKiBAcGFyYW0ge01peGVkfSBjb250ZXh0IFRoZSBjb250ZXh0IG9mIHRoZSBmdW5jdGlvbi5cbiAqIEBhcGkgcHVibGljXG4gKi9cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUub25jZSA9IGZ1bmN0aW9uIG9uY2UoZXZlbnQsIGZuLCBjb250ZXh0KSB7XG4gIHZhciBsaXN0ZW5lciA9IG5ldyBFRShmbiwgY29udGV4dCB8fCB0aGlzLCB0cnVlKVxuICAgICwgZXZ0ID0gcHJlZml4ID8gcHJlZml4ICsgZXZlbnQgOiBldmVudDtcblxuICBpZiAoIXRoaXMuX2V2ZW50cykgdGhpcy5fZXZlbnRzID0gcHJlZml4ID8ge30gOiBPYmplY3QuY3JlYXRlKG51bGwpO1xuICBpZiAoIXRoaXMuX2V2ZW50c1tldnRdKSB0aGlzLl9ldmVudHNbZXZ0XSA9IGxpc3RlbmVyO1xuICBlbHNlIHtcbiAgICBpZiAoIXRoaXMuX2V2ZW50c1tldnRdLmZuKSB0aGlzLl9ldmVudHNbZXZ0XS5wdXNoKGxpc3RlbmVyKTtcbiAgICBlbHNlIHRoaXMuX2V2ZW50c1tldnRdID0gW1xuICAgICAgdGhpcy5fZXZlbnRzW2V2dF0sIGxpc3RlbmVyXG4gICAgXTtcbiAgfVxuXG4gIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBSZW1vdmUgZXZlbnQgbGlzdGVuZXJzLlxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBldmVudCBUaGUgZXZlbnQgd2Ugd2FudCB0byByZW1vdmUuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmbiBUaGUgbGlzdGVuZXIgdGhhdCB3ZSBuZWVkIHRvIGZpbmQuXG4gKiBAcGFyYW0ge01peGVkfSBjb250ZXh0IE9ubHkgcmVtb3ZlIGxpc3RlbmVycyBtYXRjaGluZyB0aGlzIGNvbnRleHQuXG4gKiBAcGFyYW0ge0Jvb2xlYW59IG9uY2UgT25seSByZW1vdmUgb25jZSBsaXN0ZW5lcnMuXG4gKiBAYXBpIHB1YmxpY1xuICovXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLnJlbW92ZUxpc3RlbmVyID0gZnVuY3Rpb24gcmVtb3ZlTGlzdGVuZXIoZXZlbnQsIGZuLCBjb250ZXh0LCBvbmNlKSB7XG4gIHZhciBldnQgPSBwcmVmaXggPyBwcmVmaXggKyBldmVudCA6IGV2ZW50O1xuXG4gIGlmICghdGhpcy5fZXZlbnRzIHx8ICF0aGlzLl9ldmVudHNbZXZ0XSkgcmV0dXJuIHRoaXM7XG5cbiAgdmFyIGxpc3RlbmVycyA9IHRoaXMuX2V2ZW50c1tldnRdXG4gICAgLCBldmVudHMgPSBbXTtcblxuICBpZiAoZm4pIHtcbiAgICBpZiAobGlzdGVuZXJzLmZuKSB7XG4gICAgICBpZiAoXG4gICAgICAgICAgIGxpc3RlbmVycy5mbiAhPT0gZm5cbiAgICAgICAgfHwgKG9uY2UgJiYgIWxpc3RlbmVycy5vbmNlKVxuICAgICAgICB8fCAoY29udGV4dCAmJiBsaXN0ZW5lcnMuY29udGV4dCAhPT0gY29udGV4dClcbiAgICAgICkge1xuICAgICAgICBldmVudHMucHVzaChsaXN0ZW5lcnMpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBmb3IgKHZhciBpID0gMCwgbGVuZ3RoID0gbGlzdGVuZXJzLmxlbmd0aDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICAgICBsaXN0ZW5lcnNbaV0uZm4gIT09IGZuXG4gICAgICAgICAgfHwgKG9uY2UgJiYgIWxpc3RlbmVyc1tpXS5vbmNlKVxuICAgICAgICAgIHx8IChjb250ZXh0ICYmIGxpc3RlbmVyc1tpXS5jb250ZXh0ICE9PSBjb250ZXh0KVxuICAgICAgICApIHtcbiAgICAgICAgICBldmVudHMucHVzaChsaXN0ZW5lcnNbaV0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLy9cbiAgLy8gUmVzZXQgdGhlIGFycmF5LCBvciByZW1vdmUgaXQgY29tcGxldGVseSBpZiB3ZSBoYXZlIG5vIG1vcmUgbGlzdGVuZXJzLlxuICAvL1xuICBpZiAoZXZlbnRzLmxlbmd0aCkge1xuICAgIHRoaXMuX2V2ZW50c1tldnRdID0gZXZlbnRzLmxlbmd0aCA9PT0gMSA/IGV2ZW50c1swXSA6IGV2ZW50cztcbiAgfSBlbHNlIHtcbiAgICBkZWxldGUgdGhpcy5fZXZlbnRzW2V2dF07XG4gIH1cblxuICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogUmVtb3ZlIGFsbCBsaXN0ZW5lcnMgb3Igb25seSB0aGUgbGlzdGVuZXJzIGZvciB0aGUgc3BlY2lmaWVkIGV2ZW50LlxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBldmVudCBUaGUgZXZlbnQgd2FudCB0byByZW1vdmUgYWxsIGxpc3RlbmVycyBmb3IuXG4gKiBAYXBpIHB1YmxpY1xuICovXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLnJlbW92ZUFsbExpc3RlbmVycyA9IGZ1bmN0aW9uIHJlbW92ZUFsbExpc3RlbmVycyhldmVudCkge1xuICBpZiAoIXRoaXMuX2V2ZW50cykgcmV0dXJuIHRoaXM7XG5cbiAgaWYgKGV2ZW50KSBkZWxldGUgdGhpcy5fZXZlbnRzW3ByZWZpeCA/IHByZWZpeCArIGV2ZW50IDogZXZlbnRdO1xuICBlbHNlIHRoaXMuX2V2ZW50cyA9IHByZWZpeCA/IHt9IDogT2JqZWN0LmNyZWF0ZShudWxsKTtcblxuICByZXR1cm4gdGhpcztcbn07XG5cbi8vXG4vLyBBbGlhcyBtZXRob2RzIG5hbWVzIGJlY2F1c2UgcGVvcGxlIHJvbGwgbGlrZSB0aGF0LlxuLy9cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUub2ZmID0gRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5yZW1vdmVMaXN0ZW5lcjtcbkV2ZW50RW1pdHRlci5wcm90b3R5cGUuYWRkTGlzdGVuZXIgPSBFdmVudEVtaXR0ZXIucHJvdG90eXBlLm9uO1xuXG4vL1xuLy8gVGhpcyBmdW5jdGlvbiBkb2Vzbid0IGFwcGx5IGFueW1vcmUuXG4vL1xuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5zZXRNYXhMaXN0ZW5lcnMgPSBmdW5jdGlvbiBzZXRNYXhMaXN0ZW5lcnMoKSB7XG4gIHJldHVybiB0aGlzO1xufTtcblxuLy9cbi8vIEV4cG9zZSB0aGUgcHJlZml4LlxuLy9cbkV2ZW50RW1pdHRlci5wcmVmaXhlZCA9IHByZWZpeDtcblxuLy9cbi8vIEV4cG9zZSB0aGUgbW9kdWxlLlxuLy9cbmlmICgndW5kZWZpbmVkJyAhPT0gdHlwZW9mIG1vZHVsZSkge1xuICBtb2R1bGUuZXhwb3J0cyA9IEV2ZW50RW1pdHRlcjtcbn1cbiIsIi8qIGVzbGludC1kaXNhYmxlIG5vLXVudXNlZC12YXJzICovXG4ndXNlIHN0cmljdCc7XG52YXIgaGFzT3duUHJvcGVydHkgPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O1xudmFyIHByb3BJc0VudW1lcmFibGUgPSBPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlO1xuXG5mdW5jdGlvbiB0b09iamVjdCh2YWwpIHtcblx0aWYgKHZhbCA9PT0gbnVsbCB8fCB2YWwgPT09IHVuZGVmaW5lZCkge1xuXHRcdHRocm93IG5ldyBUeXBlRXJyb3IoJ09iamVjdC5hc3NpZ24gY2Fubm90IGJlIGNhbGxlZCB3aXRoIG51bGwgb3IgdW5kZWZpbmVkJyk7XG5cdH1cblxuXHRyZXR1cm4gT2JqZWN0KHZhbCk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0LCBzb3VyY2UpIHtcblx0dmFyIGZyb207XG5cdHZhciB0byA9IHRvT2JqZWN0KHRhcmdldCk7XG5cdHZhciBzeW1ib2xzO1xuXG5cdGZvciAodmFyIHMgPSAxOyBzIDwgYXJndW1lbnRzLmxlbmd0aDsgcysrKSB7XG5cdFx0ZnJvbSA9IE9iamVjdChhcmd1bWVudHNbc10pO1xuXG5cdFx0Zm9yICh2YXIga2V5IGluIGZyb20pIHtcblx0XHRcdGlmIChoYXNPd25Qcm9wZXJ0eS5jYWxsKGZyb20sIGtleSkpIHtcblx0XHRcdFx0dG9ba2V5XSA9IGZyb21ba2V5XTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykge1xuXHRcdFx0c3ltYm9scyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZnJvbSk7XG5cdFx0XHRmb3IgKHZhciBpID0gMDsgaSA8IHN5bWJvbHMubGVuZ3RoOyBpKyspIHtcblx0XHRcdFx0aWYgKHByb3BJc0VudW1lcmFibGUuY2FsbChmcm9tLCBzeW1ib2xzW2ldKSkge1xuXHRcdFx0XHRcdHRvW3N5bWJvbHNbaV1dID0gZnJvbVtzeW1ib2xzW2ldXTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdHJldHVybiB0bztcbn07XG4iLCIvKiFcbiAqIGFzeW5jXG4gKiBodHRwczovL2dpdGh1Yi5jb20vY2FvbGFuL2FzeW5jXG4gKlxuICogQ29weXJpZ2h0IDIwMTAtMjAxNCBDYW9sYW4gTWNNYWhvblxuICogUmVsZWFzZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlXG4gKi9cbi8qanNoaW50IG9uZXZhcjogZmFsc2UsIGluZGVudDo0ICovXG4vKmdsb2JhbCBzZXRJbW1lZGlhdGU6IGZhbHNlLCBzZXRUaW1lb3V0OiBmYWxzZSwgY29uc29sZTogZmFsc2UgKi9cbihmdW5jdGlvbiAoKSB7XG5cbiAgICB2YXIgYXN5bmMgPSB7fTtcblxuICAgIC8vIGdsb2JhbCBvbiB0aGUgc2VydmVyLCB3aW5kb3cgaW4gdGhlIGJyb3dzZXJcbiAgICB2YXIgcm9vdCwgcHJldmlvdXNfYXN5bmM7XG5cbiAgICByb290ID0gdGhpcztcbiAgICBpZiAocm9vdCAhPSBudWxsKSB7XG4gICAgICBwcmV2aW91c19hc3luYyA9IHJvb3QuYXN5bmM7XG4gICAgfVxuXG4gICAgYXN5bmMubm9Db25mbGljdCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcm9vdC5hc3luYyA9IHByZXZpb3VzX2FzeW5jO1xuICAgICAgICByZXR1cm4gYXN5bmM7XG4gICAgfTtcblxuICAgIGZ1bmN0aW9uIG9ubHlfb25jZShmbikge1xuICAgICAgICB2YXIgY2FsbGVkID0gZmFsc2U7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIGlmIChjYWxsZWQpIHRocm93IG5ldyBFcnJvcihcIkNhbGxiYWNrIHdhcyBhbHJlYWR5IGNhbGxlZC5cIik7XG4gICAgICAgICAgICBjYWxsZWQgPSB0cnVlO1xuICAgICAgICAgICAgZm4uYXBwbHkocm9vdCwgYXJndW1lbnRzKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vLy8gY3Jvc3MtYnJvd3NlciBjb21wYXRpYmxpdHkgZnVuY3Rpb25zIC8vLy9cblxuICAgIHZhciBfdG9TdHJpbmcgPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nO1xuXG4gICAgdmFyIF9pc0FycmF5ID0gQXJyYXkuaXNBcnJheSB8fCBmdW5jdGlvbiAob2JqKSB7XG4gICAgICAgIHJldHVybiBfdG9TdHJpbmcuY2FsbChvYmopID09PSAnW29iamVjdCBBcnJheV0nO1xuICAgIH07XG5cbiAgICB2YXIgX2VhY2ggPSBmdW5jdGlvbiAoYXJyLCBpdGVyYXRvcikge1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFyci5sZW5ndGg7IGkgKz0gMSkge1xuICAgICAgICAgICAgaXRlcmF0b3IoYXJyW2ldLCBpLCBhcnIpO1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIHZhciBfbWFwID0gZnVuY3Rpb24gKGFyciwgaXRlcmF0b3IpIHtcbiAgICAgICAgaWYgKGFyci5tYXApIHtcbiAgICAgICAgICAgIHJldHVybiBhcnIubWFwKGl0ZXJhdG9yKTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgcmVzdWx0cyA9IFtdO1xuICAgICAgICBfZWFjaChhcnIsIGZ1bmN0aW9uICh4LCBpLCBhKSB7XG4gICAgICAgICAgICByZXN1bHRzLnB1c2goaXRlcmF0b3IoeCwgaSwgYSkpO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdHM7XG4gICAgfTtcblxuICAgIHZhciBfcmVkdWNlID0gZnVuY3Rpb24gKGFyciwgaXRlcmF0b3IsIG1lbW8pIHtcbiAgICAgICAgaWYgKGFyci5yZWR1Y2UpIHtcbiAgICAgICAgICAgIHJldHVybiBhcnIucmVkdWNlKGl0ZXJhdG9yLCBtZW1vKTtcbiAgICAgICAgfVxuICAgICAgICBfZWFjaChhcnIsIGZ1bmN0aW9uICh4LCBpLCBhKSB7XG4gICAgICAgICAgICBtZW1vID0gaXRlcmF0b3IobWVtbywgeCwgaSwgYSk7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gbWVtbztcbiAgICB9O1xuXG4gICAgdmFyIF9rZXlzID0gZnVuY3Rpb24gKG9iaikge1xuICAgICAgICBpZiAoT2JqZWN0LmtleXMpIHtcbiAgICAgICAgICAgIHJldHVybiBPYmplY3Qua2V5cyhvYmopO1xuICAgICAgICB9XG4gICAgICAgIHZhciBrZXlzID0gW107XG4gICAgICAgIGZvciAodmFyIGsgaW4gb2JqKSB7XG4gICAgICAgICAgICBpZiAob2JqLmhhc093blByb3BlcnR5KGspKSB7XG4gICAgICAgICAgICAgICAga2V5cy5wdXNoKGspO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBrZXlzO1xuICAgIH07XG5cbiAgICAvLy8vIGV4cG9ydGVkIGFzeW5jIG1vZHVsZSBmdW5jdGlvbnMgLy8vL1xuXG4gICAgLy8vLyBuZXh0VGljayBpbXBsZW1lbnRhdGlvbiB3aXRoIGJyb3dzZXItY29tcGF0aWJsZSBmYWxsYmFjayAvLy8vXG4gICAgaWYgKHR5cGVvZiBwcm9jZXNzID09PSAndW5kZWZpbmVkJyB8fCAhKHByb2Nlc3MubmV4dFRpY2spKSB7XG4gICAgICAgIGlmICh0eXBlb2Ygc2V0SW1tZWRpYXRlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICBhc3luYy5uZXh0VGljayA9IGZ1bmN0aW9uIChmbikge1xuICAgICAgICAgICAgICAgIC8vIG5vdCBhIGRpcmVjdCBhbGlhcyBmb3IgSUUxMCBjb21wYXRpYmlsaXR5XG4gICAgICAgICAgICAgICAgc2V0SW1tZWRpYXRlKGZuKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBhc3luYy5zZXRJbW1lZGlhdGUgPSBhc3luYy5uZXh0VGljaztcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGFzeW5jLm5leHRUaWNrID0gZnVuY3Rpb24gKGZuKSB7XG4gICAgICAgICAgICAgICAgc2V0VGltZW91dChmbiwgMCk7XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgYXN5bmMuc2V0SW1tZWRpYXRlID0gYXN5bmMubmV4dFRpY2s7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIGFzeW5jLm5leHRUaWNrID0gcHJvY2Vzcy5uZXh0VGljaztcbiAgICAgICAgaWYgKHR5cGVvZiBzZXRJbW1lZGlhdGUgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICBhc3luYy5zZXRJbW1lZGlhdGUgPSBmdW5jdGlvbiAoZm4pIHtcbiAgICAgICAgICAgICAgLy8gbm90IGEgZGlyZWN0IGFsaWFzIGZvciBJRTEwIGNvbXBhdGliaWxpdHlcbiAgICAgICAgICAgICAgc2V0SW1tZWRpYXRlKGZuKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBhc3luYy5zZXRJbW1lZGlhdGUgPSBhc3luYy5uZXh0VGljaztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGFzeW5jLmVhY2ggPSBmdW5jdGlvbiAoYXJyLCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgY2FsbGJhY2sgPSBjYWxsYmFjayB8fCBmdW5jdGlvbiAoKSB7fTtcbiAgICAgICAgaWYgKCFhcnIubGVuZ3RoKSB7XG4gICAgICAgICAgICByZXR1cm4gY2FsbGJhY2soKTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgY29tcGxldGVkID0gMDtcbiAgICAgICAgX2VhY2goYXJyLCBmdW5jdGlvbiAoeCkge1xuICAgICAgICAgICAgaXRlcmF0b3IoeCwgb25seV9vbmNlKGRvbmUpICk7XG4gICAgICAgIH0pO1xuICAgICAgICBmdW5jdGlvbiBkb25lKGVycikge1xuICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgICAgY2FsbGJhY2sgPSBmdW5jdGlvbiAoKSB7fTtcbiAgICAgICAgICB9XG4gICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgIGNvbXBsZXRlZCArPSAxO1xuICAgICAgICAgICAgICBpZiAoY29tcGxldGVkID49IGFyci5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9O1xuICAgIGFzeW5jLmZvckVhY2ggPSBhc3luYy5lYWNoO1xuXG4gICAgYXN5bmMuZWFjaFNlcmllcyA9IGZ1bmN0aW9uIChhcnIsIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICBjYWxsYmFjayA9IGNhbGxiYWNrIHx8IGZ1bmN0aW9uICgpIHt9O1xuICAgICAgICBpZiAoIWFyci5sZW5ndGgpIHtcbiAgICAgICAgICAgIHJldHVybiBjYWxsYmFjaygpO1xuICAgICAgICB9XG4gICAgICAgIHZhciBjb21wbGV0ZWQgPSAwO1xuICAgICAgICB2YXIgaXRlcmF0ZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGl0ZXJhdG9yKGFycltjb21wbGV0ZWRdLCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayA9IGZ1bmN0aW9uICgpIHt9O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgY29tcGxldGVkICs9IDE7XG4gICAgICAgICAgICAgICAgICAgIGlmIChjb21wbGV0ZWQgPj0gYXJyLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGl0ZXJhdGUoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9O1xuICAgICAgICBpdGVyYXRlKCk7XG4gICAgfTtcbiAgICBhc3luYy5mb3JFYWNoU2VyaWVzID0gYXN5bmMuZWFjaFNlcmllcztcblxuICAgIGFzeW5jLmVhY2hMaW1pdCA9IGZ1bmN0aW9uIChhcnIsIGxpbWl0LCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgdmFyIGZuID0gX2VhY2hMaW1pdChsaW1pdCk7XG4gICAgICAgIGZuLmFwcGx5KG51bGwsIFthcnIsIGl0ZXJhdG9yLCBjYWxsYmFja10pO1xuICAgIH07XG4gICAgYXN5bmMuZm9yRWFjaExpbWl0ID0gYXN5bmMuZWFjaExpbWl0O1xuXG4gICAgdmFyIF9lYWNoTGltaXQgPSBmdW5jdGlvbiAobGltaXQpIHtcblxuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKGFyciwgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICBjYWxsYmFjayA9IGNhbGxiYWNrIHx8IGZ1bmN0aW9uICgpIHt9O1xuICAgICAgICAgICAgaWYgKCFhcnIubGVuZ3RoIHx8IGxpbWl0IDw9IDApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gY2FsbGJhY2soKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHZhciBjb21wbGV0ZWQgPSAwO1xuICAgICAgICAgICAgdmFyIHN0YXJ0ZWQgPSAwO1xuICAgICAgICAgICAgdmFyIHJ1bm5pbmcgPSAwO1xuXG4gICAgICAgICAgICAoZnVuY3Rpb24gcmVwbGVuaXNoICgpIHtcbiAgICAgICAgICAgICAgICBpZiAoY29tcGxldGVkID49IGFyci5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKCk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgd2hpbGUgKHJ1bm5pbmcgPCBsaW1pdCAmJiBzdGFydGVkIDwgYXJyLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICBzdGFydGVkICs9IDE7XG4gICAgICAgICAgICAgICAgICAgIHJ1bm5pbmcgKz0gMTtcbiAgICAgICAgICAgICAgICAgICAgaXRlcmF0b3IoYXJyW3N0YXJ0ZWQgLSAxXSwgZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2sgPSBmdW5jdGlvbiAoKSB7fTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBsZXRlZCArPSAxO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJ1bm5pbmcgLT0gMTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY29tcGxldGVkID49IGFyci5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcGxlbmlzaCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSkoKTtcbiAgICAgICAgfTtcbiAgICB9O1xuXG5cbiAgICB2YXIgZG9QYXJhbGxlbCA9IGZ1bmN0aW9uIChmbikge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIGFyZ3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMpO1xuICAgICAgICAgICAgcmV0dXJuIGZuLmFwcGx5KG51bGwsIFthc3luYy5lYWNoXS5jb25jYXQoYXJncykpO1xuICAgICAgICB9O1xuICAgIH07XG4gICAgdmFyIGRvUGFyYWxsZWxMaW1pdCA9IGZ1bmN0aW9uKGxpbWl0LCBmbikge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIGFyZ3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMpO1xuICAgICAgICAgICAgcmV0dXJuIGZuLmFwcGx5KG51bGwsIFtfZWFjaExpbWl0KGxpbWl0KV0uY29uY2F0KGFyZ3MpKTtcbiAgICAgICAgfTtcbiAgICB9O1xuICAgIHZhciBkb1NlcmllcyA9IGZ1bmN0aW9uIChmbikge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIGFyZ3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMpO1xuICAgICAgICAgICAgcmV0dXJuIGZuLmFwcGx5KG51bGwsIFthc3luYy5lYWNoU2VyaWVzXS5jb25jYXQoYXJncykpO1xuICAgICAgICB9O1xuICAgIH07XG5cblxuICAgIHZhciBfYXN5bmNNYXAgPSBmdW5jdGlvbiAoZWFjaGZuLCBhcnIsIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICBhcnIgPSBfbWFwKGFyciwgZnVuY3Rpb24gKHgsIGkpIHtcbiAgICAgICAgICAgIHJldHVybiB7aW5kZXg6IGksIHZhbHVlOiB4fTtcbiAgICAgICAgfSk7XG4gICAgICAgIGlmICghY2FsbGJhY2spIHtcbiAgICAgICAgICAgIGVhY2hmbihhcnIsIGZ1bmN0aW9uICh4LCBjYWxsYmFjaykge1xuICAgICAgICAgICAgICAgIGl0ZXJhdG9yKHgudmFsdWUsIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdmFyIHJlc3VsdHMgPSBbXTtcbiAgICAgICAgICAgIGVhY2hmbihhcnIsIGZ1bmN0aW9uICh4LCBjYWxsYmFjaykge1xuICAgICAgICAgICAgICAgIGl0ZXJhdG9yKHgudmFsdWUsIGZ1bmN0aW9uIChlcnIsIHYpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0c1t4LmluZGV4XSA9IHY7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9LCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2soZXJyLCByZXN1bHRzKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBhc3luYy5tYXAgPSBkb1BhcmFsbGVsKF9hc3luY01hcCk7XG4gICAgYXN5bmMubWFwU2VyaWVzID0gZG9TZXJpZXMoX2FzeW5jTWFwKTtcbiAgICBhc3luYy5tYXBMaW1pdCA9IGZ1bmN0aW9uIChhcnIsIGxpbWl0LCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgcmV0dXJuIF9tYXBMaW1pdChsaW1pdCkoYXJyLCBpdGVyYXRvciwgY2FsbGJhY2spO1xuICAgIH07XG5cbiAgICB2YXIgX21hcExpbWl0ID0gZnVuY3Rpb24obGltaXQpIHtcbiAgICAgICAgcmV0dXJuIGRvUGFyYWxsZWxMaW1pdChsaW1pdCwgX2FzeW5jTWFwKTtcbiAgICB9O1xuXG4gICAgLy8gcmVkdWNlIG9ubHkgaGFzIGEgc2VyaWVzIHZlcnNpb24sIGFzIGRvaW5nIHJlZHVjZSBpbiBwYXJhbGxlbCB3b24ndFxuICAgIC8vIHdvcmsgaW4gbWFueSBzaXR1YXRpb25zLlxuICAgIGFzeW5jLnJlZHVjZSA9IGZ1bmN0aW9uIChhcnIsIG1lbW8sIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICBhc3luYy5lYWNoU2VyaWVzKGFyciwgZnVuY3Rpb24gKHgsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICBpdGVyYXRvcihtZW1vLCB4LCBmdW5jdGlvbiAoZXJyLCB2KSB7XG4gICAgICAgICAgICAgICAgbWVtbyA9IHY7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICBjYWxsYmFjayhlcnIsIG1lbW8pO1xuICAgICAgICB9KTtcbiAgICB9O1xuICAgIC8vIGluamVjdCBhbGlhc1xuICAgIGFzeW5jLmluamVjdCA9IGFzeW5jLnJlZHVjZTtcbiAgICAvLyBmb2xkbCBhbGlhc1xuICAgIGFzeW5jLmZvbGRsID0gYXN5bmMucmVkdWNlO1xuXG4gICAgYXN5bmMucmVkdWNlUmlnaHQgPSBmdW5jdGlvbiAoYXJyLCBtZW1vLCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgdmFyIHJldmVyc2VkID0gX21hcChhcnIsIGZ1bmN0aW9uICh4KSB7XG4gICAgICAgICAgICByZXR1cm4geDtcbiAgICAgICAgfSkucmV2ZXJzZSgpO1xuICAgICAgICBhc3luYy5yZWR1Y2UocmV2ZXJzZWQsIG1lbW8sIGl0ZXJhdG9yLCBjYWxsYmFjayk7XG4gICAgfTtcbiAgICAvLyBmb2xkciBhbGlhc1xuICAgIGFzeW5jLmZvbGRyID0gYXN5bmMucmVkdWNlUmlnaHQ7XG5cbiAgICB2YXIgX2ZpbHRlciA9IGZ1bmN0aW9uIChlYWNoZm4sIGFyciwgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgIHZhciByZXN1bHRzID0gW107XG4gICAgICAgIGFyciA9IF9tYXAoYXJyLCBmdW5jdGlvbiAoeCwgaSkge1xuICAgICAgICAgICAgcmV0dXJuIHtpbmRleDogaSwgdmFsdWU6IHh9O1xuICAgICAgICB9KTtcbiAgICAgICAgZWFjaGZuKGFyciwgZnVuY3Rpb24gKHgsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICBpdGVyYXRvcih4LnZhbHVlLCBmdW5jdGlvbiAodikge1xuICAgICAgICAgICAgICAgIGlmICh2KSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdHMucHVzaCh4KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2FsbGJhY2soKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICBjYWxsYmFjayhfbWFwKHJlc3VsdHMuc29ydChmdW5jdGlvbiAoYSwgYikge1xuICAgICAgICAgICAgICAgIHJldHVybiBhLmluZGV4IC0gYi5pbmRleDtcbiAgICAgICAgICAgIH0pLCBmdW5jdGlvbiAoeCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB4LnZhbHVlO1xuICAgICAgICAgICAgfSkpO1xuICAgICAgICB9KTtcbiAgICB9O1xuICAgIGFzeW5jLmZpbHRlciA9IGRvUGFyYWxsZWwoX2ZpbHRlcik7XG4gICAgYXN5bmMuZmlsdGVyU2VyaWVzID0gZG9TZXJpZXMoX2ZpbHRlcik7XG4gICAgLy8gc2VsZWN0IGFsaWFzXG4gICAgYXN5bmMuc2VsZWN0ID0gYXN5bmMuZmlsdGVyO1xuICAgIGFzeW5jLnNlbGVjdFNlcmllcyA9IGFzeW5jLmZpbHRlclNlcmllcztcblxuICAgIHZhciBfcmVqZWN0ID0gZnVuY3Rpb24gKGVhY2hmbiwgYXJyLCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgdmFyIHJlc3VsdHMgPSBbXTtcbiAgICAgICAgYXJyID0gX21hcChhcnIsIGZ1bmN0aW9uICh4LCBpKSB7XG4gICAgICAgICAgICByZXR1cm4ge2luZGV4OiBpLCB2YWx1ZTogeH07XG4gICAgICAgIH0pO1xuICAgICAgICBlYWNoZm4oYXJyLCBmdW5jdGlvbiAoeCwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIGl0ZXJhdG9yKHgudmFsdWUsIGZ1bmN0aW9uICh2KSB7XG4gICAgICAgICAgICAgICAgaWYgKCF2KSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdHMucHVzaCh4KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2FsbGJhY2soKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICBjYWxsYmFjayhfbWFwKHJlc3VsdHMuc29ydChmdW5jdGlvbiAoYSwgYikge1xuICAgICAgICAgICAgICAgIHJldHVybiBhLmluZGV4IC0gYi5pbmRleDtcbiAgICAgICAgICAgIH0pLCBmdW5jdGlvbiAoeCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB4LnZhbHVlO1xuICAgICAgICAgICAgfSkpO1xuICAgICAgICB9KTtcbiAgICB9O1xuICAgIGFzeW5jLnJlamVjdCA9IGRvUGFyYWxsZWwoX3JlamVjdCk7XG4gICAgYXN5bmMucmVqZWN0U2VyaWVzID0gZG9TZXJpZXMoX3JlamVjdCk7XG5cbiAgICB2YXIgX2RldGVjdCA9IGZ1bmN0aW9uIChlYWNoZm4sIGFyciwgaXRlcmF0b3IsIG1haW5fY2FsbGJhY2spIHtcbiAgICAgICAgZWFjaGZuKGFyciwgZnVuY3Rpb24gKHgsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICBpdGVyYXRvcih4LCBmdW5jdGlvbiAocmVzdWx0KSB7XG4gICAgICAgICAgICAgICAgaWYgKHJlc3VsdCkge1xuICAgICAgICAgICAgICAgICAgICBtYWluX2NhbGxiYWNrKHgpO1xuICAgICAgICAgICAgICAgICAgICBtYWluX2NhbGxiYWNrID0gZnVuY3Rpb24gKCkge307XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICBtYWluX2NhbGxiYWNrKCk7XG4gICAgICAgIH0pO1xuICAgIH07XG4gICAgYXN5bmMuZGV0ZWN0ID0gZG9QYXJhbGxlbChfZGV0ZWN0KTtcbiAgICBhc3luYy5kZXRlY3RTZXJpZXMgPSBkb1NlcmllcyhfZGV0ZWN0KTtcblxuICAgIGFzeW5jLnNvbWUgPSBmdW5jdGlvbiAoYXJyLCBpdGVyYXRvciwgbWFpbl9jYWxsYmFjaykge1xuICAgICAgICBhc3luYy5lYWNoKGFyciwgZnVuY3Rpb24gKHgsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICBpdGVyYXRvcih4LCBmdW5jdGlvbiAodikge1xuICAgICAgICAgICAgICAgIGlmICh2KSB7XG4gICAgICAgICAgICAgICAgICAgIG1haW5fY2FsbGJhY2sodHJ1ZSk7XG4gICAgICAgICAgICAgICAgICAgIG1haW5fY2FsbGJhY2sgPSBmdW5jdGlvbiAoKSB7fTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2FsbGJhY2soKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICBtYWluX2NhbGxiYWNrKGZhbHNlKTtcbiAgICAgICAgfSk7XG4gICAgfTtcbiAgICAvLyBhbnkgYWxpYXNcbiAgICBhc3luYy5hbnkgPSBhc3luYy5zb21lO1xuXG4gICAgYXN5bmMuZXZlcnkgPSBmdW5jdGlvbiAoYXJyLCBpdGVyYXRvciwgbWFpbl9jYWxsYmFjaykge1xuICAgICAgICBhc3luYy5lYWNoKGFyciwgZnVuY3Rpb24gKHgsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICBpdGVyYXRvcih4LCBmdW5jdGlvbiAodikge1xuICAgICAgICAgICAgICAgIGlmICghdikge1xuICAgICAgICAgICAgICAgICAgICBtYWluX2NhbGxiYWNrKGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgICAgbWFpbl9jYWxsYmFjayA9IGZ1bmN0aW9uICgpIHt9O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgIG1haW5fY2FsbGJhY2sodHJ1ZSk7XG4gICAgICAgIH0pO1xuICAgIH07XG4gICAgLy8gYWxsIGFsaWFzXG4gICAgYXN5bmMuYWxsID0gYXN5bmMuZXZlcnk7XG5cbiAgICBhc3luYy5zb3J0QnkgPSBmdW5jdGlvbiAoYXJyLCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgYXN5bmMubWFwKGFyciwgZnVuY3Rpb24gKHgsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICBpdGVyYXRvcih4LCBmdW5jdGlvbiAoZXJyLCBjcml0ZXJpYSkge1xuICAgICAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKG51bGwsIHt2YWx1ZTogeCwgY3JpdGVyaWE6IGNyaXRlcmlhfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sIGZ1bmN0aW9uIChlcnIsIHJlc3VsdHMpIHtcbiAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHZhciBmbiA9IGZ1bmN0aW9uIChsZWZ0LCByaWdodCkge1xuICAgICAgICAgICAgICAgICAgICB2YXIgYSA9IGxlZnQuY3JpdGVyaWEsIGIgPSByaWdodC5jcml0ZXJpYTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGEgPCBiID8gLTEgOiBhID4gYiA/IDEgOiAwO1xuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgY2FsbGJhY2sobnVsbCwgX21hcChyZXN1bHRzLnNvcnQoZm4pLCBmdW5jdGlvbiAoeCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4geC52YWx1ZTtcbiAgICAgICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH07XG5cbiAgICBhc3luYy5hdXRvID0gZnVuY3Rpb24gKHRhc2tzLCBjYWxsYmFjaykge1xuICAgICAgICBjYWxsYmFjayA9IGNhbGxiYWNrIHx8IGZ1bmN0aW9uICgpIHt9O1xuICAgICAgICB2YXIga2V5cyA9IF9rZXlzKHRhc2tzKTtcbiAgICAgICAgdmFyIHJlbWFpbmluZ1Rhc2tzID0ga2V5cy5sZW5ndGhcbiAgICAgICAgaWYgKCFyZW1haW5pbmdUYXNrcykge1xuICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKCk7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgcmVzdWx0cyA9IHt9O1xuXG4gICAgICAgIHZhciBsaXN0ZW5lcnMgPSBbXTtcbiAgICAgICAgdmFyIGFkZExpc3RlbmVyID0gZnVuY3Rpb24gKGZuKSB7XG4gICAgICAgICAgICBsaXN0ZW5lcnMudW5zaGlmdChmbik7XG4gICAgICAgIH07XG4gICAgICAgIHZhciByZW1vdmVMaXN0ZW5lciA9IGZ1bmN0aW9uIChmbikge1xuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsaXN0ZW5lcnMubGVuZ3RoOyBpICs9IDEpIHtcbiAgICAgICAgICAgICAgICBpZiAobGlzdGVuZXJzW2ldID09PSBmbikge1xuICAgICAgICAgICAgICAgICAgICBsaXN0ZW5lcnMuc3BsaWNlKGksIDEpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICB2YXIgdGFza0NvbXBsZXRlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmVtYWluaW5nVGFza3MtLVxuICAgICAgICAgICAgX2VhY2gobGlzdGVuZXJzLnNsaWNlKDApLCBmdW5jdGlvbiAoZm4pIHtcbiAgICAgICAgICAgICAgICBmbigpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH07XG5cbiAgICAgICAgYWRkTGlzdGVuZXIoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgaWYgKCFyZW1haW5pbmdUYXNrcykge1xuICAgICAgICAgICAgICAgIHZhciB0aGVDYWxsYmFjayA9IGNhbGxiYWNrO1xuICAgICAgICAgICAgICAgIC8vIHByZXZlbnQgZmluYWwgY2FsbGJhY2sgZnJvbSBjYWxsaW5nIGl0c2VsZiBpZiBpdCBlcnJvcnNcbiAgICAgICAgICAgICAgICBjYWxsYmFjayA9IGZ1bmN0aW9uICgpIHt9O1xuXG4gICAgICAgICAgICAgICAgdGhlQ2FsbGJhY2sobnVsbCwgcmVzdWx0cyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIF9lYWNoKGtleXMsIGZ1bmN0aW9uIChrKSB7XG4gICAgICAgICAgICB2YXIgdGFzayA9IF9pc0FycmF5KHRhc2tzW2tdKSA/IHRhc2tzW2tdOiBbdGFza3Nba11dO1xuICAgICAgICAgICAgdmFyIHRhc2tDYWxsYmFjayA9IGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgICAgICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMSk7XG4gICAgICAgICAgICAgICAgaWYgKGFyZ3MubGVuZ3RoIDw9IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgYXJncyA9IGFyZ3NbMF07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHNhZmVSZXN1bHRzID0ge307XG4gICAgICAgICAgICAgICAgICAgIF9lYWNoKF9rZXlzKHJlc3VsdHMpLCBmdW5jdGlvbihya2V5KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzYWZlUmVzdWx0c1tya2V5XSA9IHJlc3VsdHNbcmtleV07XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICBzYWZlUmVzdWx0c1trXSA9IGFyZ3M7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKGVyciwgc2FmZVJlc3VsdHMpO1xuICAgICAgICAgICAgICAgICAgICAvLyBzdG9wIHN1YnNlcXVlbnQgZXJyb3JzIGhpdHRpbmcgY2FsbGJhY2sgbXVsdGlwbGUgdGltZXNcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2sgPSBmdW5jdGlvbiAoKSB7fTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdHNba10gPSBhcmdzO1xuICAgICAgICAgICAgICAgICAgICBhc3luYy5zZXRJbW1lZGlhdGUodGFza0NvbXBsZXRlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgdmFyIHJlcXVpcmVzID0gdGFzay5zbGljZSgwLCBNYXRoLmFicyh0YXNrLmxlbmd0aCAtIDEpKSB8fCBbXTtcbiAgICAgICAgICAgIHZhciByZWFkeSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gX3JlZHVjZShyZXF1aXJlcywgZnVuY3Rpb24gKGEsIHgpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChhICYmIHJlc3VsdHMuaGFzT3duUHJvcGVydHkoeCkpO1xuICAgICAgICAgICAgICAgIH0sIHRydWUpICYmICFyZXN1bHRzLmhhc093blByb3BlcnR5KGspO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGlmIChyZWFkeSgpKSB7XG4gICAgICAgICAgICAgICAgdGFza1t0YXNrLmxlbmd0aCAtIDFdKHRhc2tDYWxsYmFjaywgcmVzdWx0cyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICB2YXIgbGlzdGVuZXIgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChyZWFkeSgpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZW1vdmVMaXN0ZW5lcihsaXN0ZW5lcik7XG4gICAgICAgICAgICAgICAgICAgICAgICB0YXNrW3Rhc2subGVuZ3RoIC0gMV0odGFza0NhbGxiYWNrLCByZXN1bHRzKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgYWRkTGlzdGVuZXIobGlzdGVuZXIpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9O1xuXG4gICAgYXN5bmMucmV0cnkgPSBmdW5jdGlvbih0aW1lcywgdGFzaywgY2FsbGJhY2spIHtcbiAgICAgICAgdmFyIERFRkFVTFRfVElNRVMgPSA1O1xuICAgICAgICB2YXIgYXR0ZW1wdHMgPSBbXTtcbiAgICAgICAgLy8gVXNlIGRlZmF1bHRzIGlmIHRpbWVzIG5vdCBwYXNzZWRcbiAgICAgICAgaWYgKHR5cGVvZiB0aW1lcyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgY2FsbGJhY2sgPSB0YXNrO1xuICAgICAgICAgICAgdGFzayA9IHRpbWVzO1xuICAgICAgICAgICAgdGltZXMgPSBERUZBVUxUX1RJTUVTO1xuICAgICAgICB9XG4gICAgICAgIC8vIE1ha2Ugc3VyZSB0aW1lcyBpcyBhIG51bWJlclxuICAgICAgICB0aW1lcyA9IHBhcnNlSW50KHRpbWVzLCAxMCkgfHwgREVGQVVMVF9USU1FUztcbiAgICAgICAgdmFyIHdyYXBwZWRUYXNrID0gZnVuY3Rpb24od3JhcHBlZENhbGxiYWNrLCB3cmFwcGVkUmVzdWx0cykge1xuICAgICAgICAgICAgdmFyIHJldHJ5QXR0ZW1wdCA9IGZ1bmN0aW9uKHRhc2ssIGZpbmFsQXR0ZW1wdCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbihzZXJpZXNDYWxsYmFjaykge1xuICAgICAgICAgICAgICAgICAgICB0YXNrKGZ1bmN0aW9uKGVyciwgcmVzdWx0KXtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlcmllc0NhbGxiYWNrKCFlcnIgfHwgZmluYWxBdHRlbXB0LCB7ZXJyOiBlcnIsIHJlc3VsdDogcmVzdWx0fSk7XG4gICAgICAgICAgICAgICAgICAgIH0sIHdyYXBwZWRSZXN1bHRzKTtcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIHdoaWxlICh0aW1lcykge1xuICAgICAgICAgICAgICAgIGF0dGVtcHRzLnB1c2gocmV0cnlBdHRlbXB0KHRhc2ssICEodGltZXMtPTEpKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBhc3luYy5zZXJpZXMoYXR0ZW1wdHMsIGZ1bmN0aW9uKGRvbmUsIGRhdGEpe1xuICAgICAgICAgICAgICAgIGRhdGEgPSBkYXRhW2RhdGEubGVuZ3RoIC0gMV07XG4gICAgICAgICAgICAgICAgKHdyYXBwZWRDYWxsYmFjayB8fCBjYWxsYmFjaykoZGF0YS5lcnIsIGRhdGEucmVzdWx0KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIC8vIElmIGEgY2FsbGJhY2sgaXMgcGFzc2VkLCBydW4gdGhpcyBhcyBhIGNvbnRyb2xsIGZsb3dcbiAgICAgICAgcmV0dXJuIGNhbGxiYWNrID8gd3JhcHBlZFRhc2soKSA6IHdyYXBwZWRUYXNrXG4gICAgfTtcblxuICAgIGFzeW5jLndhdGVyZmFsbCA9IGZ1bmN0aW9uICh0YXNrcywgY2FsbGJhY2spIHtcbiAgICAgICAgY2FsbGJhY2sgPSBjYWxsYmFjayB8fCBmdW5jdGlvbiAoKSB7fTtcbiAgICAgICAgaWYgKCFfaXNBcnJheSh0YXNrcykpIHtcbiAgICAgICAgICB2YXIgZXJyID0gbmV3IEVycm9yKCdGaXJzdCBhcmd1bWVudCB0byB3YXRlcmZhbGwgbXVzdCBiZSBhbiBhcnJheSBvZiBmdW5jdGlvbnMnKTtcbiAgICAgICAgICByZXR1cm4gY2FsbGJhY2soZXJyKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIXRhc2tzLmxlbmd0aCkge1xuICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKCk7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIHdyYXBJdGVyYXRvciA9IGZ1bmN0aW9uIChpdGVyYXRvcikge1xuICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrID0gZnVuY3Rpb24gKCkge307XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMSk7XG4gICAgICAgICAgICAgICAgICAgIHZhciBuZXh0ID0gaXRlcmF0b3IubmV4dCgpO1xuICAgICAgICAgICAgICAgICAgICBpZiAobmV4dCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgYXJncy5wdXNoKHdyYXBJdGVyYXRvcihuZXh0KSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhcmdzLnB1c2goY2FsbGJhY2spO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGFzeW5jLnNldEltbWVkaWF0ZShmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpdGVyYXRvci5hcHBseShudWxsLCBhcmdzKTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfTtcbiAgICAgICAgfTtcbiAgICAgICAgd3JhcEl0ZXJhdG9yKGFzeW5jLml0ZXJhdG9yKHRhc2tzKSkoKTtcbiAgICB9O1xuXG4gICAgdmFyIF9wYXJhbGxlbCA9IGZ1bmN0aW9uKGVhY2hmbiwgdGFza3MsIGNhbGxiYWNrKSB7XG4gICAgICAgIGNhbGxiYWNrID0gY2FsbGJhY2sgfHwgZnVuY3Rpb24gKCkge307XG4gICAgICAgIGlmIChfaXNBcnJheSh0YXNrcykpIHtcbiAgICAgICAgICAgIGVhY2hmbi5tYXAodGFza3MsIGZ1bmN0aW9uIChmbiwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgICAgICBpZiAoZm4pIHtcbiAgICAgICAgICAgICAgICAgICAgZm4oZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGFyZ3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsIDEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFyZ3MubGVuZ3RoIDw9IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmdzID0gYXJnc1swXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrLmNhbGwobnVsbCwgZXJyLCBhcmdzKTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSwgY2FsbGJhY2spO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdmFyIHJlc3VsdHMgPSB7fTtcbiAgICAgICAgICAgIGVhY2hmbi5lYWNoKF9rZXlzKHRhc2tzKSwgZnVuY3Rpb24gKGssIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICAgICAgdGFza3Nba10oZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgICAgICAgICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMSk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChhcmdzLmxlbmd0aCA8PSAxKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhcmdzID0gYXJnc1swXTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICByZXN1bHRzW2tdID0gYXJncztcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0sIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnIsIHJlc3VsdHMpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgYXN5bmMucGFyYWxsZWwgPSBmdW5jdGlvbiAodGFza3MsIGNhbGxiYWNrKSB7XG4gICAgICAgIF9wYXJhbGxlbCh7IG1hcDogYXN5bmMubWFwLCBlYWNoOiBhc3luYy5lYWNoIH0sIHRhc2tzLCBjYWxsYmFjayk7XG4gICAgfTtcblxuICAgIGFzeW5jLnBhcmFsbGVsTGltaXQgPSBmdW5jdGlvbih0YXNrcywgbGltaXQsIGNhbGxiYWNrKSB7XG4gICAgICAgIF9wYXJhbGxlbCh7IG1hcDogX21hcExpbWl0KGxpbWl0KSwgZWFjaDogX2VhY2hMaW1pdChsaW1pdCkgfSwgdGFza3MsIGNhbGxiYWNrKTtcbiAgICB9O1xuXG4gICAgYXN5bmMuc2VyaWVzID0gZnVuY3Rpb24gKHRhc2tzLCBjYWxsYmFjaykge1xuICAgICAgICBjYWxsYmFjayA9IGNhbGxiYWNrIHx8IGZ1bmN0aW9uICgpIHt9O1xuICAgICAgICBpZiAoX2lzQXJyYXkodGFza3MpKSB7XG4gICAgICAgICAgICBhc3luYy5tYXBTZXJpZXModGFza3MsIGZ1bmN0aW9uIChmbiwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgICAgICBpZiAoZm4pIHtcbiAgICAgICAgICAgICAgICAgICAgZm4oZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGFyZ3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsIDEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFyZ3MubGVuZ3RoIDw9IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmdzID0gYXJnc1swXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrLmNhbGwobnVsbCwgZXJyLCBhcmdzKTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSwgY2FsbGJhY2spO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdmFyIHJlc3VsdHMgPSB7fTtcbiAgICAgICAgICAgIGFzeW5jLmVhY2hTZXJpZXMoX2tleXModGFza3MpLCBmdW5jdGlvbiAoaywgY2FsbGJhY2spIHtcbiAgICAgICAgICAgICAgICB0YXNrc1trXShmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBhcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGFyZ3MubGVuZ3RoIDw9IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3MgPSBhcmdzWzBdO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdHNba10gPSBhcmdzO1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSwgZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrKGVyciwgcmVzdWx0cyk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH07XG5cbiAgICBhc3luYy5pdGVyYXRvciA9IGZ1bmN0aW9uICh0YXNrcykge1xuICAgICAgICB2YXIgbWFrZUNhbGxiYWNrID0gZnVuY3Rpb24gKGluZGV4KSB7XG4gICAgICAgICAgICB2YXIgZm4gPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgaWYgKHRhc2tzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICB0YXNrc1tpbmRleF0uYXBwbHkobnVsbCwgYXJndW1lbnRzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZuLm5leHQoKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBmbi5uZXh0ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiAoaW5kZXggPCB0YXNrcy5sZW5ndGggLSAxKSA/IG1ha2VDYWxsYmFjayhpbmRleCArIDEpOiBudWxsO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIHJldHVybiBmbjtcbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIG1ha2VDYWxsYmFjaygwKTtcbiAgICB9O1xuXG4gICAgYXN5bmMuYXBwbHkgPSBmdW5jdGlvbiAoZm4pIHtcbiAgICAgICAgdmFyIGFyZ3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsIDEpO1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIGZuLmFwcGx5KFxuICAgICAgICAgICAgICAgIG51bGwsIGFyZ3MuY29uY2F0KEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cykpXG4gICAgICAgICAgICApO1xuICAgICAgICB9O1xuICAgIH07XG5cbiAgICB2YXIgX2NvbmNhdCA9IGZ1bmN0aW9uIChlYWNoZm4sIGFyciwgZm4sIGNhbGxiYWNrKSB7XG4gICAgICAgIHZhciByID0gW107XG4gICAgICAgIGVhY2hmbihhcnIsIGZ1bmN0aW9uICh4LCBjYikge1xuICAgICAgICAgICAgZm4oeCwgZnVuY3Rpb24gKGVyciwgeSkge1xuICAgICAgICAgICAgICAgIHIgPSByLmNvbmNhdCh5IHx8IFtdKTtcbiAgICAgICAgICAgICAgICBjYihlcnIpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgIGNhbGxiYWNrKGVyciwgcik7XG4gICAgICAgIH0pO1xuICAgIH07XG4gICAgYXN5bmMuY29uY2F0ID0gZG9QYXJhbGxlbChfY29uY2F0KTtcbiAgICBhc3luYy5jb25jYXRTZXJpZXMgPSBkb1NlcmllcyhfY29uY2F0KTtcblxuICAgIGFzeW5jLndoaWxzdCA9IGZ1bmN0aW9uICh0ZXN0LCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgaWYgKHRlc3QoKSkge1xuICAgICAgICAgICAgaXRlcmF0b3IoZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGFzeW5jLndoaWxzdCh0ZXN0LCBpdGVyYXRvciwgY2FsbGJhY2spO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIGFzeW5jLmRvV2hpbHN0ID0gZnVuY3Rpb24gKGl0ZXJhdG9yLCB0ZXN0LCBjYWxsYmFjaykge1xuICAgICAgICBpdGVyYXRvcihmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMSk7XG4gICAgICAgICAgICBpZiAodGVzdC5hcHBseShudWxsLCBhcmdzKSkge1xuICAgICAgICAgICAgICAgIGFzeW5jLmRvV2hpbHN0KGl0ZXJhdG9yLCB0ZXN0LCBjYWxsYmFjayk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9O1xuXG4gICAgYXN5bmMudW50aWwgPSBmdW5jdGlvbiAodGVzdCwgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgIGlmICghdGVzdCgpKSB7XG4gICAgICAgICAgICBpdGVyYXRvcihmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYXN5bmMudW50aWwodGVzdCwgaXRlcmF0b3IsIGNhbGxiYWNrKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgY2FsbGJhY2soKTtcbiAgICAgICAgfVxuICAgIH07XG5cbiAgICBhc3luYy5kb1VudGlsID0gZnVuY3Rpb24gKGl0ZXJhdG9yLCB0ZXN0LCBjYWxsYmFjaykge1xuICAgICAgICBpdGVyYXRvcihmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMSk7XG4gICAgICAgICAgICBpZiAoIXRlc3QuYXBwbHkobnVsbCwgYXJncykpIHtcbiAgICAgICAgICAgICAgICBhc3luYy5kb1VudGlsKGl0ZXJhdG9yLCB0ZXN0LCBjYWxsYmFjayk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9O1xuXG4gICAgYXN5bmMucXVldWUgPSBmdW5jdGlvbiAod29ya2VyLCBjb25jdXJyZW5jeSkge1xuICAgICAgICBpZiAoY29uY3VycmVuY3kgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgY29uY3VycmVuY3kgPSAxO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIF9pbnNlcnQocSwgZGF0YSwgcG9zLCBjYWxsYmFjaykge1xuICAgICAgICAgIGlmICghcS5zdGFydGVkKXtcbiAgICAgICAgICAgIHEuc3RhcnRlZCA9IHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICghX2lzQXJyYXkoZGF0YSkpIHtcbiAgICAgICAgICAgICAgZGF0YSA9IFtkYXRhXTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYoZGF0YS5sZW5ndGggPT0gMCkge1xuICAgICAgICAgICAgIC8vIGNhbGwgZHJhaW4gaW1tZWRpYXRlbHkgaWYgdGhlcmUgYXJlIG5vIHRhc2tzXG4gICAgICAgICAgICAgcmV0dXJuIGFzeW5jLnNldEltbWVkaWF0ZShmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgaWYgKHEuZHJhaW4pIHtcbiAgICAgICAgICAgICAgICAgICAgIHEuZHJhaW4oKTtcbiAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgICBfZWFjaChkYXRhLCBmdW5jdGlvbih0YXNrKSB7XG4gICAgICAgICAgICAgIHZhciBpdGVtID0ge1xuICAgICAgICAgICAgICAgICAgZGF0YTogdGFzayxcbiAgICAgICAgICAgICAgICAgIGNhbGxiYWNrOiB0eXBlb2YgY2FsbGJhY2sgPT09ICdmdW5jdGlvbicgPyBjYWxsYmFjayA6IG51bGxcbiAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICBpZiAocG9zKSB7XG4gICAgICAgICAgICAgICAgcS50YXNrcy51bnNoaWZ0KGl0ZW0pO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHEudGFza3MucHVzaChpdGVtKTtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGlmIChxLnNhdHVyYXRlZCAmJiBxLnRhc2tzLmxlbmd0aCA9PT0gcS5jb25jdXJyZW5jeSkge1xuICAgICAgICAgICAgICAgICAgcS5zYXR1cmF0ZWQoKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBhc3luYy5zZXRJbW1lZGlhdGUocS5wcm9jZXNzKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciB3b3JrZXJzID0gMDtcbiAgICAgICAgdmFyIHEgPSB7XG4gICAgICAgICAgICB0YXNrczogW10sXG4gICAgICAgICAgICBjb25jdXJyZW5jeTogY29uY3VycmVuY3ksXG4gICAgICAgICAgICBzYXR1cmF0ZWQ6IG51bGwsXG4gICAgICAgICAgICBlbXB0eTogbnVsbCxcbiAgICAgICAgICAgIGRyYWluOiBudWxsLFxuICAgICAgICAgICAgc3RhcnRlZDogZmFsc2UsXG4gICAgICAgICAgICBwYXVzZWQ6IGZhbHNlLFxuICAgICAgICAgICAgcHVzaDogZnVuY3Rpb24gKGRhdGEsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICAgIF9pbnNlcnQocSwgZGF0YSwgZmFsc2UsIGNhbGxiYWNrKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBraWxsOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgIHEuZHJhaW4gPSBudWxsO1xuICAgICAgICAgICAgICBxLnRhc2tzID0gW107XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdW5zaGlmdDogZnVuY3Rpb24gKGRhdGEsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICAgIF9pbnNlcnQocSwgZGF0YSwgdHJ1ZSwgY2FsbGJhY2spO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHByb2Nlc3M6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBpZiAoIXEucGF1c2VkICYmIHdvcmtlcnMgPCBxLmNvbmN1cnJlbmN5ICYmIHEudGFza3MubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciB0YXNrID0gcS50YXNrcy5zaGlmdCgpO1xuICAgICAgICAgICAgICAgICAgICBpZiAocS5lbXB0eSAmJiBxLnRhc2tzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcS5lbXB0eSgpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHdvcmtlcnMgKz0gMTtcbiAgICAgICAgICAgICAgICAgICAgdmFyIG5leHQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB3b3JrZXJzIC09IDE7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodGFzay5jYWxsYmFjaykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhc2suY2FsbGJhY2suYXBwbHkodGFzaywgYXJndW1lbnRzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChxLmRyYWluICYmIHEudGFza3MubGVuZ3RoICsgd29ya2VycyA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHEuZHJhaW4oKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHEucHJvY2VzcygpO1xuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICB2YXIgY2IgPSBvbmx5X29uY2UobmV4dCk7XG4gICAgICAgICAgICAgICAgICAgIHdvcmtlcih0YXNrLmRhdGEsIGNiKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbGVuZ3RoOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHEudGFza3MubGVuZ3RoO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHJ1bm5pbmc6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gd29ya2VycztcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBpZGxlOiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcS50YXNrcy5sZW5ndGggKyB3b3JrZXJzID09PSAwO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHBhdXNlOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgaWYgKHEucGF1c2VkID09PSB0cnVlKSB7IHJldHVybjsgfVxuICAgICAgICAgICAgICAgIHEucGF1c2VkID0gdHJ1ZTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICByZXN1bWU6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBpZiAocS5wYXVzZWQgPT09IGZhbHNlKSB7IHJldHVybjsgfVxuICAgICAgICAgICAgICAgIHEucGF1c2VkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgLy8gTmVlZCB0byBjYWxsIHEucHJvY2VzcyBvbmNlIHBlciBjb25jdXJyZW50XG4gICAgICAgICAgICAgICAgLy8gd29ya2VyIHRvIHByZXNlcnZlIGZ1bGwgY29uY3VycmVuY3kgYWZ0ZXIgcGF1c2VcbiAgICAgICAgICAgICAgICBmb3IgKHZhciB3ID0gMTsgdyA8PSBxLmNvbmN1cnJlbmN5OyB3KyspIHtcbiAgICAgICAgICAgICAgICAgICAgYXN5bmMuc2V0SW1tZWRpYXRlKHEucHJvY2Vzcyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gcTtcbiAgICB9O1xuXG4gICAgYXN5bmMucHJpb3JpdHlRdWV1ZSA9IGZ1bmN0aW9uICh3b3JrZXIsIGNvbmN1cnJlbmN5KSB7XG5cbiAgICAgICAgZnVuY3Rpb24gX2NvbXBhcmVUYXNrcyhhLCBiKXtcbiAgICAgICAgICByZXR1cm4gYS5wcmlvcml0eSAtIGIucHJpb3JpdHk7XG4gICAgICAgIH07XG5cbiAgICAgICAgZnVuY3Rpb24gX2JpbmFyeVNlYXJjaChzZXF1ZW5jZSwgaXRlbSwgY29tcGFyZSkge1xuICAgICAgICAgIHZhciBiZWcgPSAtMSxcbiAgICAgICAgICAgICAgZW5kID0gc2VxdWVuY2UubGVuZ3RoIC0gMTtcbiAgICAgICAgICB3aGlsZSAoYmVnIDwgZW5kKSB7XG4gICAgICAgICAgICB2YXIgbWlkID0gYmVnICsgKChlbmQgLSBiZWcgKyAxKSA+Pj4gMSk7XG4gICAgICAgICAgICBpZiAoY29tcGFyZShpdGVtLCBzZXF1ZW5jZVttaWRdKSA+PSAwKSB7XG4gICAgICAgICAgICAgIGJlZyA9IG1pZDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGVuZCA9IG1pZCAtIDE7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBiZWc7XG4gICAgICAgIH1cblxuICAgICAgICBmdW5jdGlvbiBfaW5zZXJ0KHEsIGRhdGEsIHByaW9yaXR5LCBjYWxsYmFjaykge1xuICAgICAgICAgIGlmICghcS5zdGFydGVkKXtcbiAgICAgICAgICAgIHEuc3RhcnRlZCA9IHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICghX2lzQXJyYXkoZGF0YSkpIHtcbiAgICAgICAgICAgICAgZGF0YSA9IFtkYXRhXTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYoZGF0YS5sZW5ndGggPT0gMCkge1xuICAgICAgICAgICAgIC8vIGNhbGwgZHJhaW4gaW1tZWRpYXRlbHkgaWYgdGhlcmUgYXJlIG5vIHRhc2tzXG4gICAgICAgICAgICAgcmV0dXJuIGFzeW5jLnNldEltbWVkaWF0ZShmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgaWYgKHEuZHJhaW4pIHtcbiAgICAgICAgICAgICAgICAgICAgIHEuZHJhaW4oKTtcbiAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgICBfZWFjaChkYXRhLCBmdW5jdGlvbih0YXNrKSB7XG4gICAgICAgICAgICAgIHZhciBpdGVtID0ge1xuICAgICAgICAgICAgICAgICAgZGF0YTogdGFzayxcbiAgICAgICAgICAgICAgICAgIHByaW9yaXR5OiBwcmlvcml0eSxcbiAgICAgICAgICAgICAgICAgIGNhbGxiYWNrOiB0eXBlb2YgY2FsbGJhY2sgPT09ICdmdW5jdGlvbicgPyBjYWxsYmFjayA6IG51bGxcbiAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICBxLnRhc2tzLnNwbGljZShfYmluYXJ5U2VhcmNoKHEudGFza3MsIGl0ZW0sIF9jb21wYXJlVGFza3MpICsgMSwgMCwgaXRlbSk7XG5cbiAgICAgICAgICAgICAgaWYgKHEuc2F0dXJhdGVkICYmIHEudGFza3MubGVuZ3RoID09PSBxLmNvbmN1cnJlbmN5KSB7XG4gICAgICAgICAgICAgICAgICBxLnNhdHVyYXRlZCgpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGFzeW5jLnNldEltbWVkaWF0ZShxLnByb2Nlc3MpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gU3RhcnQgd2l0aCBhIG5vcm1hbCBxdWV1ZVxuICAgICAgICB2YXIgcSA9IGFzeW5jLnF1ZXVlKHdvcmtlciwgY29uY3VycmVuY3kpO1xuXG4gICAgICAgIC8vIE92ZXJyaWRlIHB1c2ggdG8gYWNjZXB0IHNlY29uZCBwYXJhbWV0ZXIgcmVwcmVzZW50aW5nIHByaW9yaXR5XG4gICAgICAgIHEucHVzaCA9IGZ1bmN0aW9uIChkYXRhLCBwcmlvcml0eSwgY2FsbGJhY2spIHtcbiAgICAgICAgICBfaW5zZXJ0KHEsIGRhdGEsIHByaW9yaXR5LCBjYWxsYmFjayk7XG4gICAgICAgIH07XG5cbiAgICAgICAgLy8gUmVtb3ZlIHVuc2hpZnQgZnVuY3Rpb25cbiAgICAgICAgZGVsZXRlIHEudW5zaGlmdDtcblxuICAgICAgICByZXR1cm4gcTtcbiAgICB9O1xuXG4gICAgYXN5bmMuY2FyZ28gPSBmdW5jdGlvbiAod29ya2VyLCBwYXlsb2FkKSB7XG4gICAgICAgIHZhciB3b3JraW5nICAgICA9IGZhbHNlLFxuICAgICAgICAgICAgdGFza3MgICAgICAgPSBbXTtcblxuICAgICAgICB2YXIgY2FyZ28gPSB7XG4gICAgICAgICAgICB0YXNrczogdGFza3MsXG4gICAgICAgICAgICBwYXlsb2FkOiBwYXlsb2FkLFxuICAgICAgICAgICAgc2F0dXJhdGVkOiBudWxsLFxuICAgICAgICAgICAgZW1wdHk6IG51bGwsXG4gICAgICAgICAgICBkcmFpbjogbnVsbCxcbiAgICAgICAgICAgIGRyYWluZWQ6IHRydWUsXG4gICAgICAgICAgICBwdXNoOiBmdW5jdGlvbiAoZGF0YSwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgICAgICBpZiAoIV9pc0FycmF5KGRhdGEpKSB7XG4gICAgICAgICAgICAgICAgICAgIGRhdGEgPSBbZGF0YV07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIF9lYWNoKGRhdGEsIGZ1bmN0aW9uKHRhc2spIHtcbiAgICAgICAgICAgICAgICAgICAgdGFza3MucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgICAgICBkYXRhOiB0YXNrLFxuICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2s6IHR5cGVvZiBjYWxsYmFjayA9PT0gJ2Z1bmN0aW9uJyA/IGNhbGxiYWNrIDogbnVsbFxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgY2FyZ28uZHJhaW5lZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICBpZiAoY2FyZ28uc2F0dXJhdGVkICYmIHRhc2tzLmxlbmd0aCA9PT0gcGF5bG9hZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY2FyZ28uc2F0dXJhdGVkKCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBhc3luYy5zZXRJbW1lZGlhdGUoY2FyZ28ucHJvY2Vzcyk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcHJvY2VzczogZnVuY3Rpb24gcHJvY2VzcygpIHtcbiAgICAgICAgICAgICAgICBpZiAod29ya2luZykgcmV0dXJuO1xuICAgICAgICAgICAgICAgIGlmICh0YXNrcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgaWYoY2FyZ28uZHJhaW4gJiYgIWNhcmdvLmRyYWluZWQpIGNhcmdvLmRyYWluKCk7XG4gICAgICAgICAgICAgICAgICAgIGNhcmdvLmRyYWluZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgdmFyIHRzID0gdHlwZW9mIHBheWxvYWQgPT09ICdudW1iZXInXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPyB0YXNrcy5zcGxpY2UoMCwgcGF5bG9hZClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IHRhc2tzLnNwbGljZSgwLCB0YXNrcy5sZW5ndGgpO1xuXG4gICAgICAgICAgICAgICAgdmFyIGRzID0gX21hcCh0cywgZnVuY3Rpb24gKHRhc2spIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRhc2suZGF0YTtcbiAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgIGlmKGNhcmdvLmVtcHR5KSBjYXJnby5lbXB0eSgpO1xuICAgICAgICAgICAgICAgIHdvcmtpbmcgPSB0cnVlO1xuICAgICAgICAgICAgICAgIHdvcmtlcihkcywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICB3b3JraW5nID0gZmFsc2U7XG5cbiAgICAgICAgICAgICAgICAgICAgdmFyIGFyZ3MgPSBhcmd1bWVudHM7XG4gICAgICAgICAgICAgICAgICAgIF9lYWNoKHRzLCBmdW5jdGlvbiAoZGF0YSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRhdGEuY2FsbGJhY2spIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLmNhbGxiYWNrLmFwcGx5KG51bGwsIGFyZ3MpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgICAgICBwcm9jZXNzKCk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbGVuZ3RoOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRhc2tzLmxlbmd0aDtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBydW5uaW5nOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHdvcmtpbmc7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiBjYXJnbztcbiAgICB9O1xuXG4gICAgdmFyIF9jb25zb2xlX2ZuID0gZnVuY3Rpb24gKG5hbWUpIHtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChmbikge1xuICAgICAgICAgICAgdmFyIGFyZ3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsIDEpO1xuICAgICAgICAgICAgZm4uYXBwbHkobnVsbCwgYXJncy5jb25jYXQoW2Z1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgICAgICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMSk7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBjb25zb2xlICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoY29uc29sZS5lcnJvcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChjb25zb2xlW25hbWVdKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBfZWFjaChhcmdzLCBmdW5jdGlvbiAoeCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGVbbmFtZV0oeCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1dKSk7XG4gICAgICAgIH07XG4gICAgfTtcbiAgICBhc3luYy5sb2cgPSBfY29uc29sZV9mbignbG9nJyk7XG4gICAgYXN5bmMuZGlyID0gX2NvbnNvbGVfZm4oJ2RpcicpO1xuICAgIC8qYXN5bmMuaW5mbyA9IF9jb25zb2xlX2ZuKCdpbmZvJyk7XG4gICAgYXN5bmMud2FybiA9IF9jb25zb2xlX2ZuKCd3YXJuJyk7XG4gICAgYXN5bmMuZXJyb3IgPSBfY29uc29sZV9mbignZXJyb3InKTsqL1xuXG4gICAgYXN5bmMubWVtb2l6ZSA9IGZ1bmN0aW9uIChmbiwgaGFzaGVyKSB7XG4gICAgICAgIHZhciBtZW1vID0ge307XG4gICAgICAgIHZhciBxdWV1ZXMgPSB7fTtcbiAgICAgICAgaGFzaGVyID0gaGFzaGVyIHx8IGZ1bmN0aW9uICh4KSB7XG4gICAgICAgICAgICByZXR1cm4geDtcbiAgICAgICAgfTtcbiAgICAgICAgdmFyIG1lbW9pemVkID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIGFyZ3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMpO1xuICAgICAgICAgICAgdmFyIGNhbGxiYWNrID0gYXJncy5wb3AoKTtcbiAgICAgICAgICAgIHZhciBrZXkgPSBoYXNoZXIuYXBwbHkobnVsbCwgYXJncyk7XG4gICAgICAgICAgICBpZiAoa2V5IGluIG1lbW8pIHtcbiAgICAgICAgICAgICAgICBhc3luYy5uZXh0VGljayhmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrLmFwcGx5KG51bGwsIG1lbW9ba2V5XSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChrZXkgaW4gcXVldWVzKSB7XG4gICAgICAgICAgICAgICAgcXVldWVzW2tleV0ucHVzaChjYWxsYmFjayk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBxdWV1ZXNba2V5XSA9IFtjYWxsYmFja107XG4gICAgICAgICAgICAgICAgZm4uYXBwbHkobnVsbCwgYXJncy5jb25jYXQoW2Z1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgbWVtb1trZXldID0gYXJndW1lbnRzO1xuICAgICAgICAgICAgICAgICAgICB2YXIgcSA9IHF1ZXVlc1trZXldO1xuICAgICAgICAgICAgICAgICAgICBkZWxldGUgcXVldWVzW2tleV07XG4gICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwLCBsID0gcS5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICBxW2ldLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICBtZW1vaXplZC5tZW1vID0gbWVtbztcbiAgICAgICAgbWVtb2l6ZWQudW5tZW1vaXplZCA9IGZuO1xuICAgICAgICByZXR1cm4gbWVtb2l6ZWQ7XG4gICAgfTtcblxuICAgIGFzeW5jLnVubWVtb2l6ZSA9IGZ1bmN0aW9uIChmbikge1xuICAgICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIChmbi51bm1lbW9pemVkIHx8IGZuKS5hcHBseShudWxsLCBhcmd1bWVudHMpO1xuICAgICAgfTtcbiAgICB9O1xuXG4gICAgYXN5bmMudGltZXMgPSBmdW5jdGlvbiAoY291bnQsIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICB2YXIgY291bnRlciA9IFtdO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNvdW50OyBpKyspIHtcbiAgICAgICAgICAgIGNvdW50ZXIucHVzaChpKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYXN5bmMubWFwKGNvdW50ZXIsIGl0ZXJhdG9yLCBjYWxsYmFjayk7XG4gICAgfTtcblxuICAgIGFzeW5jLnRpbWVzU2VyaWVzID0gZnVuY3Rpb24gKGNvdW50LCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgdmFyIGNvdW50ZXIgPSBbXTtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7XG4gICAgICAgICAgICBjb3VudGVyLnB1c2goaSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGFzeW5jLm1hcFNlcmllcyhjb3VudGVyLCBpdGVyYXRvciwgY2FsbGJhY2spO1xuICAgIH07XG5cbiAgICBhc3luYy5zZXEgPSBmdW5jdGlvbiAoLyogZnVuY3Rpb25zLi4uICovKSB7XG4gICAgICAgIHZhciBmbnMgPSBhcmd1bWVudHM7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgdGhhdCA9IHRoaXM7XG4gICAgICAgICAgICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7XG4gICAgICAgICAgICB2YXIgY2FsbGJhY2sgPSBhcmdzLnBvcCgpO1xuICAgICAgICAgICAgYXN5bmMucmVkdWNlKGZucywgYXJncywgZnVuY3Rpb24gKG5ld2FyZ3MsIGZuLCBjYikge1xuICAgICAgICAgICAgICAgIGZuLmFwcGx5KHRoYXQsIG5ld2FyZ3MuY29uY2F0KFtmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBlcnIgPSBhcmd1bWVudHNbMF07XG4gICAgICAgICAgICAgICAgICAgIHZhciBuZXh0YXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMSk7XG4gICAgICAgICAgICAgICAgICAgIGNiKGVyciwgbmV4dGFyZ3MpO1xuICAgICAgICAgICAgICAgIH1dKSlcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBmdW5jdGlvbiAoZXJyLCByZXN1bHRzKSB7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2suYXBwbHkodGhhdCwgW2Vycl0uY29uY2F0KHJlc3VsdHMpKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9O1xuICAgIH07XG5cbiAgICBhc3luYy5jb21wb3NlID0gZnVuY3Rpb24gKC8qIGZ1bmN0aW9ucy4uLiAqLykge1xuICAgICAgcmV0dXJuIGFzeW5jLnNlcS5hcHBseShudWxsLCBBcnJheS5wcm90b3R5cGUucmV2ZXJzZS5jYWxsKGFyZ3VtZW50cykpO1xuICAgIH07XG5cbiAgICB2YXIgX2FwcGx5RWFjaCA9IGZ1bmN0aW9uIChlYWNoZm4sIGZucyAvKmFyZ3MuLi4qLykge1xuICAgICAgICB2YXIgZ28gPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgdGhhdCA9IHRoaXM7XG4gICAgICAgICAgICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7XG4gICAgICAgICAgICB2YXIgY2FsbGJhY2sgPSBhcmdzLnBvcCgpO1xuICAgICAgICAgICAgcmV0dXJuIGVhY2hmbihmbnMsIGZ1bmN0aW9uIChmbiwgY2IpIHtcbiAgICAgICAgICAgICAgICBmbi5hcHBseSh0aGF0LCBhcmdzLmNvbmNhdChbY2JdKSk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY2FsbGJhY2spO1xuICAgICAgICB9O1xuICAgICAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA+IDIpIHtcbiAgICAgICAgICAgIHZhciBhcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAyKTtcbiAgICAgICAgICAgIHJldHVybiBnby5hcHBseSh0aGlzLCBhcmdzKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBnbztcbiAgICAgICAgfVxuICAgIH07XG4gICAgYXN5bmMuYXBwbHlFYWNoID0gZG9QYXJhbGxlbChfYXBwbHlFYWNoKTtcbiAgICBhc3luYy5hcHBseUVhY2hTZXJpZXMgPSBkb1NlcmllcyhfYXBwbHlFYWNoKTtcblxuICAgIGFzeW5jLmZvcmV2ZXIgPSBmdW5jdGlvbiAoZm4sIGNhbGxiYWNrKSB7XG4gICAgICAgIGZ1bmN0aW9uIG5leHQoZXJyKSB7XG4gICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgaWYgKGNhbGxiYWNrKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aHJvdyBlcnI7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmbihuZXh0KTtcbiAgICAgICAgfVxuICAgICAgICBuZXh0KCk7XG4gICAgfTtcblxuICAgIC8vIE5vZGUuanNcbiAgICBpZiAodHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCcgJiYgbW9kdWxlLmV4cG9ydHMpIHtcbiAgICAgICAgbW9kdWxlLmV4cG9ydHMgPSBhc3luYztcbiAgICB9XG4gICAgLy8gQU1EIC8gUmVxdWlyZUpTXG4gICAgZWxzZSBpZiAodHlwZW9mIGRlZmluZSAhPT0gJ3VuZGVmaW5lZCcgJiYgZGVmaW5lLmFtZCkge1xuICAgICAgICBkZWZpbmUoW10sIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiBhc3luYztcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8vIGluY2x1ZGVkIGRpcmVjdGx5IHZpYSA8c2NyaXB0PiB0YWdcbiAgICBlbHNlIHtcbiAgICAgICAgcm9vdC5hc3luYyA9IGFzeW5jO1xuICAgIH1cblxufSgpKTtcbiIsInZhciBhc3luYyAgICAgICA9IHJlcXVpcmUoJ2FzeW5jJyksXG4gICAgdXJsUGFyc2VyICAgPSByZXF1aXJlKCd1cmwnKSxcbiAgICBSZXNvdXJjZSAgICA9IHJlcXVpcmUoJy4vUmVzb3VyY2UnKSxcbiAgICBFdmVudEVtaXR0ZXIgPSByZXF1aXJlKCdldmVudGVtaXR0ZXIzJyk7XG5cbi8qKlxuICogTWFuYWdlcyB0aGUgc3RhdGUgYW5kIGxvYWRpbmcgb2YgbXVsdGlwbGUgcmVzb3VyY2VzIHRvIGxvYWQuXG4gKlxuICogQGNsYXNzXG4gKiBAcGFyYW0gW2Jhc2VVcmw9JyddIHtzdHJpbmd9IFRoZSBiYXNlIHVybCBmb3IgYWxsIHJlc291cmNlcyBsb2FkZWQgYnkgdGhpcyBsb2FkZXIuXG4gKiBAcGFyYW0gW2NvbmN1cnJlbmN5PTEwXSB7bnVtYmVyfSBUaGUgbnVtYmVyIG9mIHJlc291cmNlcyB0byBsb2FkIGNvbmN1cnJlbnRseS5cbiAqL1xuZnVuY3Rpb24gTG9hZGVyKGJhc2VVcmwsIGNvbmN1cnJlbmN5KSB7XG4gICAgRXZlbnRFbWl0dGVyLmNhbGwodGhpcyk7XG5cbiAgICBjb25jdXJyZW5jeSA9IGNvbmN1cnJlbmN5IHx8IDEwO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGJhc2UgdXJsIGZvciBhbGwgcmVzb3VyY2VzIGxvYWRlZCBieSB0aGlzIGxvYWRlci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge3N0cmluZ31cbiAgICAgKi9cbiAgICB0aGlzLmJhc2VVcmwgPSBiYXNlVXJsIHx8ICcnO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHByb2dyZXNzIHBlcmNlbnQgb2YgdGhlIGxvYWRlciBnb2luZyB0aHJvdWdoIHRoZSBxdWV1ZS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLnByb2dyZXNzID0gMDtcblxuICAgIC8qKlxuICAgICAqIExvYWRpbmcgc3RhdGUgb2YgdGhlIGxvYWRlciwgdHJ1ZSBpZiBpdCBpcyBjdXJyZW50bHkgbG9hZGluZyByZXNvdXJjZXMuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqL1xuICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHBlcmNlbnRhZ2Ugb2YgdG90YWwgcHJvZ3Jlc3MgdGhhdCBhIHNpbmdsZSByZXNvdXJjZSByZXByZXNlbnRzLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMuX3Byb2dyZXNzQ2h1bmsgPSAwO1xuXG4gICAgLyoqXG4gICAgICogVGhlIG1pZGRsZXdhcmUgdG8gcnVuIGJlZm9yZSBsb2FkaW5nIGVhY2ggcmVzb3VyY2UuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtmdW5jdGlvbltdfVxuICAgICAqL1xuICAgIHRoaXMuX2JlZm9yZU1pZGRsZXdhcmUgPSBbXTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBtaWRkbGV3YXJlIHRvIHJ1biBhZnRlciBsb2FkaW5nIGVhY2ggcmVzb3VyY2UuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtmdW5jdGlvbltdfVxuICAgICAqL1xuICAgIHRoaXMuX2FmdGVyTWlkZGxld2FyZSA9IFtdO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGBfbG9hZFJlc291cmNlYCBmdW5jdGlvbiBib3VuZCB3aXRoIHRoaXMgb2JqZWN0IGNvbnRleHQuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBtZW1iZXIge2Z1bmN0aW9ufVxuICAgICAqL1xuICAgIHRoaXMuX2JvdW5kTG9hZFJlc291cmNlID0gdGhpcy5fbG9hZFJlc291cmNlLmJpbmQodGhpcyk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYF9vbkxvYWRgIGZ1bmN0aW9uIGJvdW5kIHdpdGggdGhpcyBvYmplY3QgY29udGV4dC5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQG1lbWJlciB7ZnVuY3Rpb259XG4gICAgICovXG4gICAgdGhpcy5fYm91bmRPbkxvYWQgPSB0aGlzLl9vbkxvYWQuYmluZCh0aGlzKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSByZXNvdXJjZSBidWZmZXIgdGhhdCBmaWxscyB1bnRpbCBgbG9hZGAgaXMgY2FsbGVkIHRvIHN0YXJ0IGxvYWRpbmcgcmVzb3VyY2VzLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAbWVtYmVyIHtSZXNvdXJjZVtdfVxuICAgICAqL1xuICAgIHRoaXMuX2J1ZmZlciA9IFtdO1xuXG4gICAgLyoqXG4gICAgICogVXNlZCB0byB0cmFjayBsb2FkIGNvbXBsZXRpb24uXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLl9udW1Ub0xvYWQgPSAwO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHJlc291cmNlcyB3YWl0aW5nIHRvIGJlIGxvYWRlZC5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQG1lbWJlciB7UmVzb3VyY2VbXX1cbiAgICAgKi9cbiAgICB0aGlzLl9xdWV1ZSA9IGFzeW5jLnF1ZXVlKHRoaXMuX2JvdW5kTG9hZFJlc291cmNlLCBjb25jdXJyZW5jeSk7XG5cbiAgICAvKipcbiAgICAgKiBBbGwgdGhlIHJlc291cmNlcyBmb3IgdGhpcyBsb2FkZXIga2V5ZWQgYnkgbmFtZS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge29iamVjdDxzdHJpbmcsIFJlc291cmNlPn1cbiAgICAgKi9cbiAgICB0aGlzLnJlc291cmNlcyA9IHt9O1xuXG4gICAgLyoqXG4gICAgICogRW1pdHRlZCBvbmNlIHBlciBsb2FkZWQgb3IgZXJyb3JlZCByZXNvdXJjZS5cbiAgICAgKlxuICAgICAqIEBldmVudCBwcm9ncmVzc1xuICAgICAqIEBtZW1iZXJvZiBMb2FkZXIjXG4gICAgICovXG5cbiAgICAvKipcbiAgICAgKiBFbWl0dGVkIG9uY2UgcGVyIGVycm9yZWQgcmVzb3VyY2UuXG4gICAgICpcbiAgICAgKiBAZXZlbnQgZXJyb3JcbiAgICAgKiBAbWVtYmVyb2YgTG9hZGVyI1xuICAgICAqL1xuXG4gICAgLyoqXG4gICAgICogRW1pdHRlZCBvbmNlIHBlciBsb2FkZWQgcmVzb3VyY2UuXG4gICAgICpcbiAgICAgKiBAZXZlbnQgbG9hZFxuICAgICAqIEBtZW1iZXJvZiBMb2FkZXIjXG4gICAgICovXG5cbiAgICAvKipcbiAgICAgKiBFbWl0dGVkIHdoZW4gdGhlIGxvYWRlciBiZWdpbnMgdG8gcHJvY2VzcyB0aGUgcXVldWUuXG4gICAgICpcbiAgICAgKiBAZXZlbnQgc3RhcnRcbiAgICAgKiBAbWVtYmVyb2YgTG9hZGVyI1xuICAgICAqL1xuXG4gICAgLyoqXG4gICAgICogRW1pdHRlZCB3aGVuIHRoZSBxdWV1ZWQgcmVzb3VyY2VzIGFsbCBsb2FkLlxuICAgICAqXG4gICAgICogQGV2ZW50IGNvbXBsZXRlXG4gICAgICogQG1lbWJlcm9mIExvYWRlciNcbiAgICAgKi9cbn1cblxuTG9hZGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoRXZlbnRFbWl0dGVyLnByb3RvdHlwZSk7XG5Mb2FkZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gTG9hZGVyO1xubW9kdWxlLmV4cG9ydHMgPSBMb2FkZXI7XG5cbi8qKlxuICogQWRkcyBhIHJlc291cmNlIChvciBtdWx0aXBsZSByZXNvdXJjZXMpIHRvIHRoZSBsb2FkZXIgcXVldWUuXG4gKlxuICogVGhpcyBmdW5jdGlvbiBjYW4gdGFrZSBhIHdpZGUgdmFyaWV0eSBvZiBkaWZmZXJlbnQgcGFyYW1ldGVycy4gVGhlIG9ubHkgdGhpbmcgdGhhdCBpcyBhbHdheXNcbiAqIHJlcXVpcmVkIHRoZSB1cmwgdG8gbG9hZC4gQWxsIHRoZSBmb2xsb3dpbmcgd2lsbCB3b3JrOlxuICpcbiAqIGBgYGpzXG4gKiBsb2FkZXJcbiAqICAgICAvLyBub3JtYWwgcGFyYW0gc3ludGF4XG4gKiAgICAgLmFkZCgna2V5JywgJ2h0dHA6Ly8uLi4nLCBmdW5jdGlvbiAoKSB7fSlcbiAqICAgICAuYWRkKCdodHRwOi8vLi4uJywgZnVuY3Rpb24gKCkge30pXG4gKiAgICAgLmFkZCgnaHR0cDovLy4uLicpXG4gKlxuICogICAgIC8vIG9iamVjdCBzeW50YXhcbiAqICAgICAuYWRkKHtcbiAqICAgICAgICAgbmFtZTogJ2tleTInLFxuICogICAgICAgICB1cmw6ICdodHRwOi8vLi4uJ1xuICogICAgIH0sIGZ1bmN0aW9uICgpIHt9KVxuICogICAgIC5hZGQoe1xuICogICAgICAgICB1cmw6ICdodHRwOi8vLi4uJ1xuICogICAgIH0sIGZ1bmN0aW9uICgpIHt9KVxuICogICAgIC5hZGQoe1xuICogICAgICAgICBuYW1lOiAna2V5MycsXG4gKiAgICAgICAgIHVybDogJ2h0dHA6Ly8uLi4nXG4gKiAgICAgICAgIG9uQ29tcGxldGU6IGZ1bmN0aW9uICgpIHt9XG4gKiAgICAgfSlcbiAqICAgICAuYWRkKHtcbiAqICAgICAgICAgdXJsOiAnaHR0cHM6Ly8uLi4nLFxuICogICAgICAgICBvbkNvbXBsZXRlOiBmdW5jdGlvbiAoKSB7fSxcbiAqICAgICAgICAgY3Jvc3NPcmlnaW46IHRydWVcbiAqICAgICB9KVxuICpcbiAqICAgICAvLyB5b3UgY2FuIGFsc28gcGFzcyBhbiBhcnJheSBvZiBvYmplY3RzIG9yIHVybHMgb3IgYm90aFxuICogICAgIC5hZGQoW1xuICogICAgICAgICB7IG5hbWU6ICdrZXk0JywgdXJsOiAnaHR0cDovLy4uLicsIG9uQ29tcGxldGU6IGZ1bmN0aW9uICgpIHt9IH0sXG4gKiAgICAgICAgIHsgdXJsOiAnaHR0cDovLy4uLicsIG9uQ29tcGxldGU6IGZ1bmN0aW9uICgpIHt9IH0sXG4gKiAgICAgICAgICdodHRwOi8vLi4uJ1xuICogICAgIF0pO1xuICogYGBgXG4gKlxuICogQGFsaWFzIGVucXVldWVcbiAqIEBwYXJhbSBbbmFtZV0ge3N0cmluZ30gVGhlIG5hbWUgb2YgdGhlIHJlc291cmNlIHRvIGxvYWQsIGlmIG5vdCBwYXNzZWQgdGhlIHVybCBpcyB1c2VkLlxuICogQHBhcmFtIHVybCB7c3RyaW5nfSBUaGUgdXJsIGZvciB0aGlzIHJlc291cmNlLCByZWxhdGl2ZSB0byB0aGUgYmFzZVVybCBvZiB0aGlzIGxvYWRlci5cbiAqIEBwYXJhbSBbb3B0aW9uc10ge29iamVjdH0gVGhlIG9wdGlvbnMgZm9yIHRoZSBsb2FkLlxuICogQHBhcmFtIFtvcHRpb25zLmNyb3NzT3JpZ2luXSB7Ym9vbGVhbn0gSXMgdGhpcyByZXF1ZXN0IGNyb3NzLW9yaWdpbj8gRGVmYXVsdCBpcyB0byBkZXRlcm1pbmUgYXV0b21hdGljYWxseS5cbiAqIEBwYXJhbSBbb3B0aW9ucy5sb2FkVHlwZT1SZXNvdXJjZS5MT0FEX1RZUEUuWEhSXSB7UmVzb3VyY2UuWEhSX0xPQURfVFlQRX0gSG93IHNob3VsZCB0aGlzIHJlc291cmNlIGJlIGxvYWRlZD9cbiAqIEBwYXJhbSBbb3B0aW9ucy54aHJUeXBlPVJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkRFRkFVTFRdIHtSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRX0gSG93IHNob3VsZCB0aGUgZGF0YSBiZWluZ1xuICogICAgICBsb2FkZWQgYmUgaW50ZXJwcmV0ZWQgd2hlbiB1c2luZyBYSFI/XG4gKiBAcGFyYW0gW2NhbGxiYWNrXSB7ZnVuY3Rpb259IEZ1bmN0aW9uIHRvIGNhbGwgd2hlbiB0aGlzIHNwZWNpZmljIHJlc291cmNlIGNvbXBsZXRlcyBsb2FkaW5nLlxuICogQHJldHVybiB7TG9hZGVyfVxuICovXG5Mb2FkZXIucHJvdG90eXBlLmFkZCA9IExvYWRlci5wcm90b3R5cGUuZW5xdWV1ZSA9IGZ1bmN0aW9uIChuYW1lLCB1cmwsIG9wdGlvbnMsIGNiKSB7XG4gICAgLy8gc3BlY2lhbCBjYXNlIG9mIGFuIGFycmF5IG9mIG9iamVjdHMgb3IgdXJsc1xuICAgIGlmIChBcnJheS5pc0FycmF5KG5hbWUpKSB7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbmFtZS5sZW5ndGg7ICsraSkge1xuICAgICAgICAgICAgdGhpcy5hZGQobmFtZVtpXSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICAvLyBpZiBhbiBvYmplY3QgaXMgcGFzc2VkIGluc3RlYWQgb2YgcGFyYW1zXG4gICAgaWYgKHR5cGVvZiBuYW1lID09PSAnb2JqZWN0Jykge1xuICAgICAgICBjYiA9IHVybCB8fCBuYW1lLmNhbGxiYWNrIHx8IG5hbWUub25Db21wbGV0ZTtcbiAgICAgICAgb3B0aW9ucyA9IG5hbWU7XG4gICAgICAgIHVybCA9IG5hbWUudXJsO1xuICAgICAgICBuYW1lID0gbmFtZS5uYW1lIHx8IG5hbWUua2V5IHx8IG5hbWUudXJsO1xuICAgIH1cblxuICAgIC8vIGNhc2Ugd2hlcmUgbm8gbmFtZSBpcyBwYXNzZWQgc2hpZnQgYWxsIGFyZ3Mgb3ZlciBieSBvbmUuXG4gICAgaWYgKHR5cGVvZiB1cmwgIT09ICdzdHJpbmcnKSB7XG4gICAgICAgIGNiID0gb3B0aW9ucztcbiAgICAgICAgb3B0aW9ucyA9IHVybDtcbiAgICAgICAgdXJsID0gbmFtZTtcbiAgICB9XG5cbiAgICAvLyBub3cgdGhhdCB3ZSBzaGlmdGVkIG1ha2Ugc3VyZSB3ZSBoYXZlIGEgcHJvcGVyIHVybC5cbiAgICBpZiAodHlwZW9mIHVybCAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdObyB1cmwgcGFzc2VkIHRvIGFkZCByZXNvdXJjZSB0byBsb2FkZXIuJyk7XG4gICAgfVxuXG4gICAgLy8gb3B0aW9ucyBhcmUgb3B0aW9uYWwgc28gcGVvcGxlIG1pZ2h0IHBhc3MgYSBmdW5jdGlvbiBhbmQgbm8gb3B0aW9uc1xuICAgIGlmICh0eXBlb2Ygb3B0aW9ucyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBjYiA9IG9wdGlvbnM7XG4gICAgICAgIG9wdGlvbnMgPSBudWxsO1xuICAgIH1cblxuICAgIC8vIGNoZWNrIGlmIHJlc291cmNlIGFscmVhZHkgZXhpc3RzLlxuICAgIGlmICh0aGlzLnJlc291cmNlc1tuYW1lXSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1Jlc291cmNlIHdpdGggbmFtZSBcIicgKyBuYW1lICsgJ1wiIGFscmVhZHkgZXhpc3RzLicpO1xuICAgIH1cblxuICAgIC8vIGFkZCBiYXNlIHVybCBpZiB0aGlzIGlzbid0IGFuIGFic29sdXRlIHVybFxuICAgIHVybCA9IHRoaXMuX2hhbmRsZUJhc2VVcmwodXJsKTtcblxuICAgIC8vIGNyZWF0ZSB0aGUgc3RvcmUgdGhlIHJlc291cmNlXG4gICAgdGhpcy5yZXNvdXJjZXNbbmFtZV0gPSBuZXcgUmVzb3VyY2UobmFtZSwgdXJsLCBvcHRpb25zKTtcblxuICAgIGlmICh0eXBlb2YgY2IgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgdGhpcy5yZXNvdXJjZXNbbmFtZV0ub25jZSgnYWZ0ZXJNaWRkbGV3YXJlJywgY2IpO1xuICAgIH1cblxuICAgIHRoaXMuX251bVRvTG9hZCsrO1xuXG4gICAgLy8gaWYgYWxyZWFkeSBsb2FkaW5nIGFkZCBpdCB0byB0aGUgd29ya2VyIHF1ZXVlXG4gICAgaWYgKHRoaXMuX3F1ZXVlLnN0YXJ0ZWQpIHtcbiAgICAgICAgdGhpcy5fcXVldWUucHVzaCh0aGlzLnJlc291cmNlc1tuYW1lXSk7XG4gICAgICAgIHRoaXMuX3Byb2dyZXNzQ2h1bmsgPSAoMTAwIC0gdGhpcy5wcm9ncmVzcykgLyAodGhpcy5fcXVldWUubGVuZ3RoKCkgKyB0aGlzLl9xdWV1ZS5ydW5uaW5nKCkpO1xuICAgIH1cbiAgICAvLyBvdGhlcndpc2UgYnVmZmVyIGl0IHRvIGJlIGFkZGVkIHRvIHRoZSBxdWV1ZSBsYXRlclxuICAgIGVsc2Uge1xuICAgICAgICB0aGlzLl9idWZmZXIucHVzaCh0aGlzLnJlc291cmNlc1tuYW1lXSk7XG4gICAgICAgIHRoaXMuX3Byb2dyZXNzQ2h1bmsgPSAxMDAgLyB0aGlzLl9idWZmZXIubGVuZ3RoO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzO1xufTtcblxuTG9hZGVyLnByb3RvdHlwZS5faGFuZGxlQmFzZVVybCA9IGZ1bmN0aW9uICh1cmwpIHtcbiAgICB2YXIgcGFyc2VkVXJsID0gdXJsUGFyc2VyLnBhcnNlKHVybCk7XG5cbiAgICAvLyBhYnNvbHV0ZSB1cmwsIGp1c3QgdXNlIGl0IGFzIGlzLlxuICAgIGlmIChwYXJzZWRVcmwucHJvdG9jb2wgfHwgcGFyc2VkVXJsLnBhdGhuYW1lLmluZGV4T2YoJy8vJykgPT09IDApIHtcbiAgICAgICAgcmV0dXJuIHVybDtcbiAgICB9XG5cbiAgICAvLyBpZiBiYXNlVXJsIGRvZXNuJ3QgZW5kIGluIHNsYXNoIGFuZCB1cmwgZG9lc24ndCBzdGFydCB3aXRoIHNsYXNoLCB0aGVuIGFkZCBhIHNsYXNoIGluYmV0d2VlblxuICAgIGlmIChcbiAgICAgICAgdGhpcy5iYXNlVXJsLmxlbmd0aCAmJlxuICAgICAgICB0aGlzLmJhc2VVcmwubGFzdEluZGV4T2YoJy8nKSAhPT0gdGhpcy5iYXNlVXJsLmxlbmd0aCAtIDEgJiZcbiAgICAgICAgdXJsLmNoYXJBdCgwKSAhPT0gJy8nXG4gICAgKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmJhc2VVcmwgKyAnLycgKyB1cmw7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICByZXR1cm4gdGhpcy5iYXNlVXJsICsgdXJsO1xuICAgIH1cbn07XG5cblxuLyoqXG4gKiBTZXRzIHVwIGEgbWlkZGxld2FyZSBmdW5jdGlvbiB0aGF0IHdpbGwgcnVuICpiZWZvcmUqIHRoZVxuICogcmVzb3VyY2UgaXMgbG9hZGVkLlxuICpcbiAqIEBhbGlhcyBwcmVcbiAqIEBwYXJhbSBtaWRkbGV3YXJlIHtmdW5jdGlvbn0gVGhlIG1pZGRsZXdhcmUgZnVuY3Rpb24gdG8gcmVnaXN0ZXIuXG4gKiBAcmV0dXJuIHtMb2FkZXJ9XG4gKi9cbkxvYWRlci5wcm90b3R5cGUuYmVmb3JlID0gTG9hZGVyLnByb3RvdHlwZS5wcmUgPSBmdW5jdGlvbiAoZm4pIHtcbiAgICB0aGlzLl9iZWZvcmVNaWRkbGV3YXJlLnB1c2goZm4pO1xuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIFNldHMgdXAgYSBtaWRkbGV3YXJlIGZ1bmN0aW9uIHRoYXQgd2lsbCBydW4gKmFmdGVyKiB0aGVcbiAqIHJlc291cmNlIGlzIGxvYWRlZC5cbiAqXG4gKiBAYWxpYXMgdXNlXG4gKiBAcGFyYW0gbWlkZGxld2FyZSB7ZnVuY3Rpb259IFRoZSBtaWRkbGV3YXJlIGZ1bmN0aW9uIHRvIHJlZ2lzdGVyLlxuICogQHJldHVybiB7TG9hZGVyfVxuICovXG5Mb2FkZXIucHJvdG90eXBlLmFmdGVyID0gTG9hZGVyLnByb3RvdHlwZS51c2UgPSBmdW5jdGlvbiAoZm4pIHtcbiAgICB0aGlzLl9hZnRlck1pZGRsZXdhcmUucHVzaChmbik7XG5cbiAgICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogUmVzZXRzIHRoZSBxdWV1ZSBvZiB0aGUgbG9hZGVyIHRvIHByZXBhcmUgZm9yIGEgbmV3IGxvYWQuXG4gKlxuICogQHJldHVybiB7TG9hZGVyfVxuICovXG5Mb2FkZXIucHJvdG90eXBlLnJlc2V0ID0gZnVuY3Rpb24gKCkge1xuICAgIC8vIHRoaXMuYmFzZVVybCA9IGJhc2VVcmwgfHwgJyc7XG5cbiAgICB0aGlzLnByb2dyZXNzID0gMDtcblxuICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xuXG4gICAgdGhpcy5fcHJvZ3Jlc3NDaHVuayA9IDA7XG5cbiAgICAvLyB0aGlzLl9iZWZvcmVNaWRkbGV3YXJlLmxlbmd0aCA9IDA7XG4gICAgLy8gdGhpcy5fYWZ0ZXJNaWRkbGV3YXJlLmxlbmd0aCA9IDA7XG5cbiAgICB0aGlzLl9idWZmZXIubGVuZ3RoID0gMDtcblxuICAgIHRoaXMuX251bVRvTG9hZCA9IDA7XG5cbiAgICB0aGlzLl9xdWV1ZS5raWxsKCk7XG4gICAgdGhpcy5fcXVldWUuc3RhcnRlZCA9IGZhbHNlO1xuXG4gICAgdGhpcy5yZXNvdXJjZXMgPSB7fTtcbn07XG5cbi8qKlxuICogU3RhcnRzIGxvYWRpbmcgdGhlIHF1ZXVlZCByZXNvdXJjZXMuXG4gKlxuICogQGZpcmVzIHN0YXJ0XG4gKiBAcGFyYW0gW2NhbGxiYWNrXSB7ZnVuY3Rpb259IE9wdGlvbmFsIGNhbGxiYWNrIHRoYXQgd2lsbCBiZSBib3VuZCB0byB0aGUgYGNvbXBsZXRlYCBldmVudC5cbiAqIEByZXR1cm4ge0xvYWRlcn1cbiAqL1xuTG9hZGVyLnByb3RvdHlwZS5sb2FkID0gZnVuY3Rpb24gKGNiKSB7XG4gICAgLy8gcmVnaXN0ZXIgY29tcGxldGUgY2FsbGJhY2sgaWYgdGhleSBwYXNzIG9uZVxuICAgIGlmICh0eXBlb2YgY2IgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgdGhpcy5vbmNlKCdjb21wbGV0ZScsIGNiKTtcbiAgICB9XG5cbiAgICAvLyBpZiB0aGUgcXVldWUgaGFzIGFscmVhZHkgc3RhcnRlZCB3ZSBhcmUgZG9uZSBoZXJlXG4gICAgaWYgKHRoaXMuX3F1ZXVlLnN0YXJ0ZWQpIHtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLy8gbm90aWZ5IG9mIHN0YXJ0XG4gICAgdGhpcy5lbWl0KCdzdGFydCcsIHRoaXMpO1xuXG4gICAgLy8gc3RhcnQgdGhlIGludGVybmFsIHF1ZXVlXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLl9idWZmZXIubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgdGhpcy5fcXVldWUucHVzaCh0aGlzLl9idWZmZXJbaV0pO1xuICAgIH1cblxuICAgIC8vIGVtcHR5IHRoZSBidWZmZXJcbiAgICB0aGlzLl9idWZmZXIubGVuZ3RoID0gMDtcblxuICAgIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBMb2FkcyBhIHNpbmdsZSByZXNvdXJjZS5cbiAqXG4gKiBAZmlyZXMgcHJvZ3Jlc3NcbiAqIEBwcml2YXRlXG4gKi9cbkxvYWRlci5wcm90b3R5cGUuX2xvYWRSZXNvdXJjZSA9IGZ1bmN0aW9uIChyZXNvdXJjZSwgZGVxdWV1ZSkge1xuICAgIHZhciBzZWxmID0gdGhpcztcblxuICAgIHJlc291cmNlLl9kZXF1ZXVlID0gZGVxdWV1ZTtcblxuICAgIHRoaXMuX3J1bk1pZGRsZXdhcmUocmVzb3VyY2UsIHRoaXMuX2JlZm9yZU1pZGRsZXdhcmUsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgLy8gcmVzb3VyY2Uub24oJ3Byb2dyZXNzJywgc2VsZi5lbWl0LmJpbmQoc2VsZiwgJ3Byb2dyZXNzJykpO1xuXG4gICAgICAgIHJlc291cmNlLmxvYWQoc2VsZi5fYm91bmRPbkxvYWQpO1xuICAgIH0pO1xufTtcblxuLyoqXG4gKiBDYWxsZWQgb25jZSBlYWNoIHJlc291cmNlIGhhcyBsb2FkZWQuXG4gKlxuICogQGZpcmVzIGNvbXBsZXRlXG4gKiBAcHJpdmF0ZVxuICovXG5Mb2FkZXIucHJvdG90eXBlLl9vbkNvbXBsZXRlID0gZnVuY3Rpb24gKCkge1xuICAgIHRoaXMuZW1pdCgnY29tcGxldGUnLCB0aGlzLCB0aGlzLnJlc291cmNlcyk7XG59O1xuXG4vKipcbiAqIENhbGxlZCBlYWNoIHRpbWUgYSByZXNvdXJjZXMgaXMgbG9hZGVkLlxuICpcbiAqIEBmaXJlcyBwcm9ncmVzc1xuICogQGZpcmVzIGVycm9yXG4gKiBAZmlyZXMgbG9hZFxuICogQHByaXZhdGVcbiAqL1xuTG9hZGVyLnByb3RvdHlwZS5fb25Mb2FkID0gZnVuY3Rpb24gKHJlc291cmNlKSB7XG4gICAgdGhpcy5wcm9ncmVzcyArPSB0aGlzLl9wcm9ncmVzc0NodW5rO1xuXG4gICAgdGhpcy5lbWl0KCdwcm9ncmVzcycsIHRoaXMsIHJlc291cmNlKTtcblxuICAgIC8vIHJ1biBtaWRkbGV3YXJlLCB0aGlzICptdXN0KiBoYXBwZW4gYmVmb3JlIGRlcXVldWUgc28gc3ViLWFzc2V0cyBnZXQgYWRkZWQgcHJvcGVybHlcbiAgICB0aGlzLl9ydW5NaWRkbGV3YXJlKHJlc291cmNlLCB0aGlzLl9hZnRlck1pZGRsZXdhcmUsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmVzb3VyY2UuZW1pdCgnYWZ0ZXJNaWRkbGV3YXJlJywgcmVzb3VyY2UpO1xuXG4gICAgICAgIHRoaXMuX251bVRvTG9hZC0tO1xuXG4gICAgICAgIC8vIGRvIGNvbXBsZXRpb24gY2hlY2tcbiAgICAgICAgaWYgKHRoaXMuX251bVRvTG9hZCA9PT0gMCkge1xuICAgICAgICAgICAgdGhpcy5wcm9ncmVzcyA9IDEwMDtcbiAgICAgICAgICAgIHRoaXMuX29uQ29tcGxldGUoKTtcbiAgICAgICAgfVxuICAgICAgICBcbiAgICAgICAgaWYgKHJlc291cmNlLmVycm9yKSB7XG4gICAgICAgICAgICB0aGlzLmVtaXQoJ2Vycm9yJywgcmVzb3VyY2UuZXJyb3IsIHRoaXMsIHJlc291cmNlKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuZW1pdCgnbG9hZCcsIHRoaXMsIHJlc291cmNlKTtcbiAgICAgICAgfVxuICAgIH0pO1xuICAgIFxuXG5cbiAgICAvLyByZW1vdmUgdGhpcyByZXNvdXJjZSBmcm9tIHRoZSBhc3luYyBxdWV1ZVxuICAgIHJlc291cmNlLl9kZXF1ZXVlKCk7XG59O1xuXG4vKipcbiAqIFJ1biBtaWRkbGV3YXJlIGZ1bmN0aW9ucyBvbiBhIHJlc291cmNlLlxuICpcbiAqIEBwcml2YXRlXG4gKi9cbkxvYWRlci5wcm90b3R5cGUuX3J1bk1pZGRsZXdhcmUgPSBmdW5jdGlvbiAocmVzb3VyY2UsIGZucywgY2IpIHtcbiAgICB2YXIgc2VsZiA9IHRoaXM7XG5cbiAgICBhc3luYy5lYWNoU2VyaWVzKGZucywgZnVuY3Rpb24gKGZuLCBuZXh0KSB7XG4gICAgICAgIGZuLmNhbGwoc2VsZiwgcmVzb3VyY2UsIG5leHQpO1xuICAgIH0sIGNiLmJpbmQodGhpcywgcmVzb3VyY2UpKTtcbn07XG5cbkxvYWRlci5MT0FEX1RZUEUgPSBSZXNvdXJjZS5MT0FEX1RZUEU7XG5Mb2FkZXIuWEhSX1JFQURZX1NUQVRFID0gUmVzb3VyY2UuWEhSX1JFQURZX1NUQVRFO1xuTG9hZGVyLlhIUl9SRVNQT05TRV9UWVBFID0gUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEU7XG4iLCJ2YXIgRXZlbnRFbWl0dGVyID0gcmVxdWlyZSgnZXZlbnRlbWl0dGVyMycpLFxuICAgIF91cmwgPSByZXF1aXJlKCd1cmwnKSxcbiAgICAvLyB0ZXN0cyBpcyBDT1JTIGlzIHN1cHBvcnRlZCBpbiBYSFIsIGlmIG5vdCB3ZSBuZWVkIHRvIHVzZSBYRFJcbiAgICB1c2VYZHIgPSAhISh3aW5kb3cuWERvbWFpblJlcXVlc3QgJiYgISgnd2l0aENyZWRlbnRpYWxzJyBpbiAobmV3IFhNTEh0dHBSZXF1ZXN0KCkpKSksXG4gICAgdGVtcEFuY2hvciA9IG51bGw7XG5cbi8qKlxuICogTWFuYWdlcyB0aGUgc3RhdGUgYW5kIGxvYWRpbmcgb2YgYSBzaW5nbGUgcmVzb3VyY2UgcmVwcmVzZW50ZWQgYnlcbiAqIGEgc2luZ2xlIFVSTC5cbiAqXG4gKiBAY2xhc3NcbiAqIEBwYXJhbSBuYW1lIHtzdHJpbmd9IFRoZSBuYW1lIG9mIHRoZSByZXNvdXJjZSB0byBsb2FkLlxuICogQHBhcmFtIHVybCB7c3RyaW5nfHN0cmluZ1tdfSBUaGUgdXJsIGZvciB0aGlzIHJlc291cmNlLCBmb3IgYXVkaW8vdmlkZW8gbG9hZHMgeW91IGNhbiBwYXNzIGFuIGFycmF5IG9mIHNvdXJjZXMuXG4gKiBAcGFyYW0gW29wdGlvbnNdIHtvYmplY3R9IFRoZSBvcHRpb25zIGZvciB0aGUgbG9hZC5cbiAqIEBwYXJhbSBbb3B0aW9ucy5jcm9zc09yaWdpbl0ge3N0cmluZ3xib29sZWFufSBJcyB0aGlzIHJlcXVlc3QgY3Jvc3Mtb3JpZ2luPyBEZWZhdWx0IGlzIHRvIGRldGVybWluZSBhdXRvbWF0aWNhbGx5LlxuICogQHBhcmFtIFtvcHRpb25zLmxvYWRUeXBlPVJlc291cmNlLkxPQURfVFlQRS5YSFJdIHtSZXNvdXJjZS5MT0FEX1RZUEV9IEhvdyBzaG91bGQgdGhpcyByZXNvdXJjZSBiZSBsb2FkZWQ/XG4gKiBAcGFyYW0gW29wdGlvbnMueGhyVHlwZT1SZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRS5ERUZBVUxUXSB7UmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEV9IEhvdyBzaG91bGQgdGhlIGRhdGEgYmVpbmdcbiAqICAgICAgbG9hZGVkIGJlIGludGVycHJldGVkIHdoZW4gdXNpbmcgWEhSP1xuICogQHBhcmFtIFtvcHRpb25zLm1ldGFkYXRhXSB7b2JqZWN0fSBFeHRyYSBpbmZvIGZvciBtaWRkbGV3YXJlLlxuICovXG5mdW5jdGlvbiBSZXNvdXJjZShuYW1lLCB1cmwsIG9wdGlvbnMpIHtcbiAgICBFdmVudEVtaXR0ZXIuY2FsbCh0aGlzKTtcblxuICAgIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuXG4gICAgaWYgKHR5cGVvZiBuYW1lICE9PSAnc3RyaW5nJyB8fCB0eXBlb2YgdXJsICE9PSAnc3RyaW5nJykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0JvdGggbmFtZSBhbmQgdXJsIGFyZSByZXF1aXJlZCBmb3IgY29uc3RydWN0aW5nIGEgcmVzb3VyY2UuJyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhlIG5hbWUgb2YgdGhpcyByZXNvdXJjZS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge3N0cmluZ31cbiAgICAgKiBAcmVhZG9ubHlcbiAgICAgKi9cbiAgICB0aGlzLm5hbWUgPSBuYW1lO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHVybCB1c2VkIHRvIGxvYWQgdGhpcyByZXNvdXJjZS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge3N0cmluZ31cbiAgICAgKiBAcmVhZG9ubHlcbiAgICAgKi9cbiAgICB0aGlzLnVybCA9IHVybDtcblxuICAgIC8qKlxuICAgICAqIFN0b3JlcyB3aGV0aGVyIG9yIG5vdCB0aGlzIHVybCBpcyBhIGRhdGEgdXJsLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKiBAcmVhZG9ubHlcbiAgICAgKi9cbiAgICB0aGlzLmlzRGF0YVVybCA9IHRoaXMudXJsLmluZGV4T2YoJ2RhdGE6JykgPT09IDA7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgZGF0YSB0aGF0IHdhcyBsb2FkZWQgYnkgdGhlIHJlc291cmNlLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7YW55fVxuICAgICAqL1xuICAgIHRoaXMuZGF0YSA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBJcyB0aGlzIHJlcXVlc3QgY3Jvc3Mtb3JpZ2luPyBJZiB1bnNldCwgZGV0ZXJtaW5lZCBhdXRvbWF0aWNhbGx5LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7c3RyaW5nfVxuICAgICAqL1xuICAgIHRoaXMuY3Jvc3NPcmlnaW4gPSBvcHRpb25zLmNyb3NzT3JpZ2luID09PSB0cnVlID8gJ2Fub255bW91cycgOiBvcHRpb25zLmNyb3NzT3JpZ2luO1xuXG4gICAgLyoqXG4gICAgICogVGhlIG1ldGhvZCBvZiBsb2FkaW5nIHRvIHVzZSBmb3IgdGhpcyByZXNvdXJjZS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1Jlc291cmNlLkxPQURfVFlQRX1cbiAgICAgKi9cbiAgICB0aGlzLmxvYWRUeXBlID0gb3B0aW9ucy5sb2FkVHlwZSB8fCB0aGlzLl9kZXRlcm1pbmVMb2FkVHlwZSgpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHR5cGUgdXNlZCB0byBsb2FkIHRoZSByZXNvdXJjZSB2aWEgWEhSLiBJZiB1bnNldCwgZGV0ZXJtaW5lZCBhdXRvbWF0aWNhbGx5LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7c3RyaW5nfVxuICAgICAqL1xuICAgIHRoaXMueGhyVHlwZSA9IG9wdGlvbnMueGhyVHlwZTtcblxuICAgIC8qKlxuICAgICAqIEV4dHJhIGluZm8gZm9yIG1pZGRsZXdhcmVcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge29iamVjdH1cbiAgICAgKi9cbiAgICB0aGlzLm1ldGFkYXRhID0gb3B0aW9ucy5tZXRhZGF0YSB8fCB7fTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBlcnJvciB0aGF0IG9jY3VycmVkIHdoaWxlIGxvYWRpbmcgKGlmIGFueSkuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtFcnJvcn1cbiAgICAgKiBAcmVhZG9ubHlcbiAgICAgKi9cbiAgICB0aGlzLmVycm9yID0gbnVsbDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBYSFIgb2JqZWN0IHRoYXQgd2FzIHVzZWQgdG8gbG9hZCB0aGlzIHJlc291cmNlLiBUaGlzIGlzIG9ubHkgc2V0XG4gICAgICogd2hlbiBgbG9hZFR5cGVgIGlzIGBSZXNvdXJjZS5MT0FEX1RZUEUuWEhSYC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1hNTEh0dHBSZXF1ZXN0fVxuICAgICAqL1xuICAgIHRoaXMueGhyID0gbnVsbDtcblxuICAgIC8qKlxuICAgICAqIERlc2NyaWJlcyBpZiB0aGlzIHJlc291cmNlIHdhcyBsb2FkZWQgYXMganNvbi4gT25seSB2YWxpZCBhZnRlciB0aGUgcmVzb3VyY2VcbiAgICAgKiBoYXMgY29tcGxldGVseSBsb2FkZWQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqL1xuICAgIHRoaXMuaXNKc29uID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBEZXNjcmliZXMgaWYgdGhpcyByZXNvdXJjZSB3YXMgbG9hZGVkIGFzIHhtbC4gT25seSB2YWxpZCBhZnRlciB0aGUgcmVzb3VyY2VcbiAgICAgKiBoYXMgY29tcGxldGVseSBsb2FkZWQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqL1xuICAgIHRoaXMuaXNYbWwgPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIERlc2NyaWJlcyBpZiB0aGlzIHJlc291cmNlIHdhcyBsb2FkZWQgYXMgYW4gaW1hZ2UgdGFnLiBPbmx5IHZhbGlkIGFmdGVyIHRoZSByZXNvdXJjZVxuICAgICAqIGhhcyBjb21wbGV0ZWx5IGxvYWRlZC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICovXG4gICAgdGhpcy5pc0ltYWdlID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBEZXNjcmliZXMgaWYgdGhpcyByZXNvdXJjZSB3YXMgbG9hZGVkIGFzIGFuIGF1ZGlvIHRhZy4gT25seSB2YWxpZCBhZnRlciB0aGUgcmVzb3VyY2VcbiAgICAgKiBoYXMgY29tcGxldGVseSBsb2FkZWQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqL1xuICAgIHRoaXMuaXNBdWRpbyA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogRGVzY3JpYmVzIGlmIHRoaXMgcmVzb3VyY2Ugd2FzIGxvYWRlZCBhcyBhIHZpZGVvIHRhZy4gT25seSB2YWxpZCBhZnRlciB0aGUgcmVzb3VyY2VcbiAgICAgKiBoYXMgY29tcGxldGVseSBsb2FkZWQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqL1xuICAgIHRoaXMuaXNWaWRlbyA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGBkZXF1ZXVlYCBtZXRob2QgdGhhdCB3aWxsIGJlIHVzZWQgYSBzdG9yYWdlIHBsYWNlIGZvciB0aGUgYXN5bmMgcXVldWUgZGVxdWV1ZSBtZXRob2RcbiAgICAgKiB1c2VkIHByaXZhdGVseSBieSB0aGUgbG9hZGVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7ZnVuY3Rpb259XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9kZXF1ZXVlID0gbnVsbDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBgY29tcGxldGVgIGZ1bmN0aW9uIGJvdW5kIHRvIHRoaXMgcmVzb3VyY2UncyBjb250ZXh0LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7ZnVuY3Rpb259XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9ib3VuZENvbXBsZXRlID0gdGhpcy5jb21wbGV0ZS5iaW5kKHRoaXMpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGBfb25FcnJvcmAgZnVuY3Rpb24gYm91bmQgdG8gdGhpcyByZXNvdXJjZSdzIGNvbnRleHQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtmdW5jdGlvbn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX2JvdW5kT25FcnJvciA9IHRoaXMuX29uRXJyb3IuYmluZCh0aGlzKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBgX29uUHJvZ3Jlc3NgIGZ1bmN0aW9uIGJvdW5kIHRvIHRoaXMgcmVzb3VyY2UncyBjb250ZXh0LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7ZnVuY3Rpb259XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9ib3VuZE9uUHJvZ3Jlc3MgPSB0aGlzLl9vblByb2dyZXNzLmJpbmQodGhpcyk7XG5cbiAgICAvLyB4aHIgY2FsbGJhY2tzXG4gICAgdGhpcy5fYm91bmRYaHJPbkVycm9yID0gdGhpcy5feGhyT25FcnJvci5iaW5kKHRoaXMpO1xuICAgIHRoaXMuX2JvdW5kWGhyT25BYm9ydCA9IHRoaXMuX3hock9uQWJvcnQuYmluZCh0aGlzKTtcbiAgICB0aGlzLl9ib3VuZFhock9uTG9hZCA9IHRoaXMuX3hock9uTG9hZC5iaW5kKHRoaXMpO1xuICAgIHRoaXMuX2JvdW5kWGRyT25UaW1lb3V0ID0gdGhpcy5feGRyT25UaW1lb3V0LmJpbmQodGhpcyk7XG5cbiAgICAvKipcbiAgICAgKiBFbWl0dGVkIHdoZW4gdGhlIHJlc291cmNlIGJlaW5ncyB0byBsb2FkLlxuICAgICAqXG4gICAgICogQGV2ZW50IHN0YXJ0XG4gICAgICogQG1lbWJlcm9mIFJlc291cmNlI1xuICAgICAqL1xuXG4gICAgLyoqXG4gICAgICogRW1pdHRlZCBlYWNoIHRpbWUgcHJvZ3Jlc3Mgb2YgdGhpcyByZXNvdXJjZSBsb2FkIHVwZGF0ZXMuXG4gICAgICogTm90IGFsbCByZXNvdXJjZXMgdHlwZXMgYW5kIGxvYWRlciBzeXN0ZW1zIGNhbiBzdXBwb3J0IHRoaXMgZXZlbnRcbiAgICAgKiBzbyBzb21ldGltZXMgaXQgbWF5IG5vdCBiZSBhdmFpbGFibGUuIElmIHRoZSByZXNvdXJjZVxuICAgICAqIGlzIGJlaW5nIGxvYWRlZCBvbiBhIG1vZGVybiBicm93c2VyLCB1c2luZyBYSFIsIGFuZCB0aGUgcmVtb3RlIHNlcnZlclxuICAgICAqIHByb3Blcmx5IHNldHMgQ29udGVudC1MZW5ndGggaGVhZGVycywgdGhlbiB0aGlzIHdpbGwgYmUgYXZhaWxhYmxlLlxuICAgICAqXG4gICAgICogQGV2ZW50IHByb2dyZXNzXG4gICAgICogQG1lbWJlcm9mIFJlc291cmNlI1xuICAgICAqL1xuXG4gICAgLyoqXG4gICAgICogRW1pdHRlZCBvbmNlIHRoaXMgcmVzb3VyY2UgaGFzIGxvYWRlZCwgaWYgdGhlcmUgd2FzIGFuIGVycm9yIGl0IHdpbGxcbiAgICAgKiBiZSBpbiB0aGUgYGVycm9yYCBwcm9wZXJ0eS5cbiAgICAgKlxuICAgICAqIEBldmVudCBjb21wbGV0ZVxuICAgICAqIEBtZW1iZXJvZiBSZXNvdXJjZSNcbiAgICAgKi9cbn1cblxuUmVzb3VyY2UucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShFdmVudEVtaXR0ZXIucHJvdG90eXBlKTtcblJlc291cmNlLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFJlc291cmNlO1xubW9kdWxlLmV4cG9ydHMgPSBSZXNvdXJjZTtcblxuLyoqXG4gKiBNYXJrcyB0aGUgcmVzb3VyY2UgYXMgY29tcGxldGUuXG4gKlxuICogQGZpcmVzIGNvbXBsZXRlXG4gKi9cblJlc291cmNlLnByb3RvdHlwZS5jb21wbGV0ZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAvLyBUT0RPOiBDbGVhbiB0aGlzIHVwIGluIGEgd3JhcHBlciBvciBzb21ldGhpbmcuLi5ncm9zcy4uLi5cbiAgICBpZiAodGhpcy5kYXRhICYmIHRoaXMuZGF0YS5yZW1vdmVFdmVudExpc3RlbmVyKSB7XG4gICAgICAgIHRoaXMuZGF0YS5yZW1vdmVFdmVudExpc3RlbmVyKCdlcnJvcicsIHRoaXMuX2JvdW5kT25FcnJvcik7XG4gICAgICAgIHRoaXMuZGF0YS5yZW1vdmVFdmVudExpc3RlbmVyKCdsb2FkJywgdGhpcy5fYm91bmRDb21wbGV0ZSk7XG4gICAgICAgIHRoaXMuZGF0YS5yZW1vdmVFdmVudExpc3RlbmVyKCdwcm9ncmVzcycsIHRoaXMuX2JvdW5kT25Qcm9ncmVzcyk7XG4gICAgICAgIHRoaXMuZGF0YS5yZW1vdmVFdmVudExpc3RlbmVyKCdjYW5wbGF5dGhyb3VnaCcsIHRoaXMuX2JvdW5kQ29tcGxldGUpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnhocikge1xuICAgICAgICBpZiAodGhpcy54aHIucmVtb3ZlRXZlbnRMaXN0ZW5lcikge1xuICAgICAgICAgICAgdGhpcy54aHIucmVtb3ZlRXZlbnRMaXN0ZW5lcignZXJyb3InLCB0aGlzLl9ib3VuZFhock9uRXJyb3IpO1xuICAgICAgICAgICAgdGhpcy54aHIucmVtb3ZlRXZlbnRMaXN0ZW5lcignYWJvcnQnLCB0aGlzLl9ib3VuZFhock9uQWJvcnQpO1xuICAgICAgICAgICAgdGhpcy54aHIucmVtb3ZlRXZlbnRMaXN0ZW5lcigncHJvZ3Jlc3MnLCB0aGlzLl9ib3VuZE9uUHJvZ3Jlc3MpO1xuICAgICAgICAgICAgdGhpcy54aHIucmVtb3ZlRXZlbnRMaXN0ZW5lcignbG9hZCcsIHRoaXMuX2JvdW5kWGhyT25Mb2FkKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMueGhyLm9uZXJyb3IgPSBudWxsO1xuICAgICAgICAgICAgdGhpcy54aHIub250aW1lb3V0ID0gbnVsbDtcbiAgICAgICAgICAgIHRoaXMueGhyLm9ucHJvZ3Jlc3MgPSBudWxsO1xuICAgICAgICAgICAgdGhpcy54aHIub25sb2FkID0gbnVsbDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMuZW1pdCgnY29tcGxldGUnLCB0aGlzKTtcbn07XG5cbi8qKlxuICogS2lja3Mgb2ZmIGxvYWRpbmcgb2YgdGhpcyByZXNvdXJjZS5cbiAqXG4gKiBAZmlyZXMgc3RhcnRcbiAqIEBwYXJhbSBbY2FsbGJhY2tdIHtmdW5jdGlvbn0gT3B0aW9uYWwgY2FsbGJhY2sgdG8gY2FsbCBvbmNlIHRoZSByZXNvdXJjZSBpcyBsb2FkZWQuXG4gKi9cblJlc291cmNlLnByb3RvdHlwZS5sb2FkID0gZnVuY3Rpb24gKGNiKSB7XG4gICAgdGhpcy5lbWl0KCdzdGFydCcsIHRoaXMpO1xuXG4gICAgLy8gaWYgYSBjYWxsYmFjayBpcyBzZXQsIGxpc3RlbiBmb3IgY29tcGxldGUgZXZlbnRcbiAgICBpZiAoY2IpIHtcbiAgICAgICAgdGhpcy5vbmNlKCdjb21wbGV0ZScsIGNiKTtcbiAgICB9XG5cbiAgICAvLyBpZiB1bnNldCwgZGV0ZXJtaW5lIHRoZSB2YWx1ZVxuICAgIGlmICh0aGlzLmNyb3NzT3JpZ2luID09PSBmYWxzZSB8fCB0eXBlb2YgdGhpcy5jcm9zc09yaWdpbiAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgdGhpcy5jcm9zc09yaWdpbiA9IHRoaXMuX2RldGVybWluZUNyb3NzT3JpZ2luKHRoaXMudXJsKTtcbiAgICB9XG5cbiAgICBzd2l0Y2godGhpcy5sb2FkVHlwZSkge1xuICAgICAgICBjYXNlIFJlc291cmNlLkxPQURfVFlQRS5JTUFHRTpcbiAgICAgICAgICAgIHRoaXMuX2xvYWRJbWFnZSgpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSBSZXNvdXJjZS5MT0FEX1RZUEUuQVVESU86XG4gICAgICAgICAgICB0aGlzLl9sb2FkRWxlbWVudCgnYXVkaW8nKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgUmVzb3VyY2UuTE9BRF9UWVBFLlZJREVPOlxuICAgICAgICAgICAgdGhpcy5fbG9hZEVsZW1lbnQoJ3ZpZGVvJyk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIFJlc291cmNlLkxPQURfVFlQRS5YSFI6XG4gICAgICAgICAgICAvKiBmYWxscyB0aHJvdWdoICovXG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICBpZiAodXNlWGRyICYmIHRoaXMuY3Jvc3NPcmlnaW4pIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9sb2FkWGRyKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9sb2FkWGhyKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBicmVhaztcbiAgICB9XG59O1xuXG4vKipcbiAqIExvYWRzIHRoaXMgcmVzb3VyY2VzIHVzaW5nIGFuIEltYWdlIG9iamVjdC5cbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5SZXNvdXJjZS5wcm90b3R5cGUuX2xvYWRJbWFnZSA9IGZ1bmN0aW9uICgpIHtcbiAgICB0aGlzLmRhdGEgPSBuZXcgSW1hZ2UoKTtcblxuICAgIGlmICh0aGlzLmNyb3NzT3JpZ2luKSB7XG4gICAgICAgIHRoaXMuZGF0YS5jcm9zc09yaWdpbiA9IHRoaXMuY3Jvc3NPcmlnaW47XG4gICAgfVxuXG4gICAgdGhpcy5kYXRhLnNyYyA9IHRoaXMudXJsO1xuXG4gICAgdGhpcy5pc0ltYWdlID0gdHJ1ZTtcblxuICAgIHRoaXMuZGF0YS5hZGRFdmVudExpc3RlbmVyKCdlcnJvcicsIHRoaXMuX2JvdW5kT25FcnJvciwgZmFsc2UpO1xuICAgIHRoaXMuZGF0YS5hZGRFdmVudExpc3RlbmVyKCdsb2FkJywgdGhpcy5fYm91bmRDb21wbGV0ZSwgZmFsc2UpO1xuICAgIHRoaXMuZGF0YS5hZGRFdmVudExpc3RlbmVyKCdwcm9ncmVzcycsIHRoaXMuX2JvdW5kT25Qcm9ncmVzcywgZmFsc2UpO1xufTtcblxuLyoqXG4gKiBMb2FkcyB0aGlzIHJlc291cmNlcyB1c2luZyBhbiBIVE1MQXVkaW9FbGVtZW50IG9yIEhUTUxWaWRlb0VsZW1lbnQuXG4gKlxuICogQHByaXZhdGVcbiAqL1xuUmVzb3VyY2UucHJvdG90eXBlLl9sb2FkRWxlbWVudCA9IGZ1bmN0aW9uICh0eXBlKSB7XG4gICAgaWYgKHR5cGUgPT09ICdhdWRpbycgJiYgdHlwZW9mIEF1ZGlvICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICB0aGlzLmRhdGEgPSBuZXcgQXVkaW8oKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHRoaXMuZGF0YSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQodHlwZSk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuZGF0YSA9PT0gbnVsbCkge1xuICAgICAgICB0aGlzLmVycm9yID0gbmV3IEVycm9yKCdVbnN1cHBvcnRlZCBlbGVtZW50ICcgKyB0eXBlKTtcbiAgICAgICAgdGhpcy5jb21wbGV0ZSgpO1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gc3VwcG9ydCBmb3IgQ29jb29uSlMgQ2FudmFzKyBydW50aW1lLCBsYWNrcyBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzb3VyY2UnKVxuICAgIGlmIChuYXZpZ2F0b3IuaXNDb2Nvb25KUykge1xuICAgICAgICB0aGlzLmRhdGEuc3JjID0gQXJyYXkuaXNBcnJheSh0aGlzLnVybCkgPyB0aGlzLnVybFswXSA6IHRoaXMudXJsO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkodGhpcy51cmwpKSB7XG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMudXJsLmxlbmd0aDsgKytpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5kYXRhLmFwcGVuZENoaWxkKHRoaXMuX2NyZWF0ZVNvdXJjZSh0eXBlLCB0aGlzLnVybFtpXSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5kYXRhLmFwcGVuZENoaWxkKHRoaXMuX2NyZWF0ZVNvdXJjZSh0eXBlLCB0aGlzLnVybCkpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgdGhpc1snaXMnICsgdHlwZVswXS50b1VwcGVyQ2FzZSgpICsgdHlwZS5zdWJzdHJpbmcoMSldID0gdHJ1ZTtcblxuICAgIHRoaXMuZGF0YS5hZGRFdmVudExpc3RlbmVyKCdlcnJvcicsIHRoaXMuX2JvdW5kT25FcnJvciwgZmFsc2UpO1xuICAgIHRoaXMuZGF0YS5hZGRFdmVudExpc3RlbmVyKCdsb2FkJywgdGhpcy5fYm91bmRDb21wbGV0ZSwgZmFsc2UpO1xuICAgIHRoaXMuZGF0YS5hZGRFdmVudExpc3RlbmVyKCdwcm9ncmVzcycsIHRoaXMuX2JvdW5kT25Qcm9ncmVzcywgZmFsc2UpO1xuICAgIHRoaXMuZGF0YS5hZGRFdmVudExpc3RlbmVyKCdjYW5wbGF5dGhyb3VnaCcsIHRoaXMuX2JvdW5kQ29tcGxldGUsIGZhbHNlKTtcblxuICAgIHRoaXMuZGF0YS5sb2FkKCk7XG59O1xuXG4vKipcbiAqIExvYWRzIHRoaXMgcmVzb3VyY2VzIHVzaW5nIGFuIFhNTEh0dHBSZXF1ZXN0LlxuICpcbiAqIEBwcml2YXRlXG4gKi9cblJlc291cmNlLnByb3RvdHlwZS5fbG9hZFhociA9IGZ1bmN0aW9uICgpIHtcbiAgICAvLyBpZiB1bnNldCwgZGV0ZXJtaW5lIHRoZSB2YWx1ZVxuICAgIGlmICh0eXBlb2YgdGhpcy54aHJUeXBlICE9PSAnc3RyaW5nJykge1xuICAgICAgICB0aGlzLnhoclR5cGUgPSB0aGlzLl9kZXRlcm1pbmVYaHJUeXBlKCk7XG4gICAgfVxuXG4gICAgdmFyIHhociA9IHRoaXMueGhyID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7XG5cbiAgICAvLyBzZXQgdGhlIHJlcXVlc3QgdHlwZSBhbmQgdXJsXG4gICAgeGhyLm9wZW4oJ0dFVCcsIHRoaXMudXJsLCB0cnVlKTtcblxuICAgIC8vIGxvYWQganNvbiBhcyB0ZXh0IGFuZCBwYXJzZSBpdCBvdXJzZWx2ZXMuIFdlIGRvIHRoaXMgYmVjYXVzZSBzb21lIGJyb3dzZXJzXG4gICAgLy8gKmNvdWdoKiBzYWZhcmkgKmNvdWdoKiBjYW4ndCBkZWFsIHdpdGggaXQuXG4gICAgaWYgKHRoaXMueGhyVHlwZSA9PT0gUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuSlNPTiB8fCB0aGlzLnhoclR5cGUgPT09IFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkRPQ1VNRU5UKSB7XG4gICAgICAgIHhoci5yZXNwb25zZVR5cGUgPSBSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRS5URVhUO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgeGhyLnJlc3BvbnNlVHlwZSA9IHRoaXMueGhyVHlwZTtcbiAgICB9XG5cbiAgICB4aHIuYWRkRXZlbnRMaXN0ZW5lcignZXJyb3InLCB0aGlzLl9ib3VuZFhock9uRXJyb3IsIGZhbHNlKTtcbiAgICB4aHIuYWRkRXZlbnRMaXN0ZW5lcignYWJvcnQnLCB0aGlzLl9ib3VuZFhock9uQWJvcnQsIGZhbHNlKTtcbiAgICB4aHIuYWRkRXZlbnRMaXN0ZW5lcigncHJvZ3Jlc3MnLCB0aGlzLl9ib3VuZE9uUHJvZ3Jlc3MsIGZhbHNlKTtcbiAgICB4aHIuYWRkRXZlbnRMaXN0ZW5lcignbG9hZCcsIHRoaXMuX2JvdW5kWGhyT25Mb2FkLCBmYWxzZSk7XG5cbiAgICB4aHIuc2VuZCgpO1xufTtcblxuLyoqXG4gKiBMb2FkcyB0aGlzIHJlc291cmNlcyB1c2luZyBhbiBYRG9tYWluUmVxdWVzdC4gVGhpcyBpcyBoZXJlIGJlY2F1c2Ugd2UgbmVlZCB0byBzdXBwb3J0IElFOSAoZ3Jvc3MpLlxuICpcbiAqIEBwcml2YXRlXG4gKi9cblJlc291cmNlLnByb3RvdHlwZS5fbG9hZFhkciA9IGZ1bmN0aW9uICgpIHtcbiAgICAvLyBpZiB1bnNldCwgZGV0ZXJtaW5lIHRoZSB2YWx1ZVxuICAgIGlmICh0eXBlb2YgdGhpcy54aHJUeXBlICE9PSAnc3RyaW5nJykge1xuICAgICAgICB0aGlzLnhoclR5cGUgPSB0aGlzLl9kZXRlcm1pbmVYaHJUeXBlKCk7XG4gICAgfVxuXG4gICAgdmFyIHhkciA9IHRoaXMueGhyID0gbmV3IFhEb21haW5SZXF1ZXN0KCk7XG5cbiAgICAvLyBYRG9tYWluUmVxdWVzdCBoYXMgYSBmZXcgcXVpcmtzLiBPY2Nhc2lvbmFsbHkgaXQgd2lsbCBhYm9ydCByZXF1ZXN0c1xuICAgIC8vIEEgd2F5IHRvIGF2b2lkIHRoaXMgaXMgdG8gbWFrZSBzdXJlIEFMTCBjYWxsYmFja3MgYXJlIHNldCBldmVuIGlmIG5vdCB1c2VkXG4gICAgLy8gTW9yZSBpbmZvIGhlcmU6IGh0dHA6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvMTU3ODY5NjYveGRvbWFpbnJlcXVlc3QtYWJvcnRzLXBvc3Qtb24taWUtOVxuICAgIHhkci50aW1lb3V0ID0gNTAwMDtcblxuICAgIHhkci5vbmVycm9yID0gdGhpcy5fYm91bmRYaHJPbkVycm9yO1xuICAgIHhkci5vbnRpbWVvdXQgPSB0aGlzLl9ib3VuZFhkck9uVGltZW91dDtcbiAgICB4ZHIub25wcm9ncmVzcyA9IHRoaXMuX2JvdW5kT25Qcm9ncmVzcztcbiAgICB4ZHIub25sb2FkID0gdGhpcy5fYm91bmRYaHJPbkxvYWQ7XG5cbiAgICB4ZHIub3BlbignR0VUJywgdGhpcy51cmwsIHRydWUpO1xuXG4gICAgLy8gIE5vdGU6IFRoZSB4ZHIuc2VuZCgpIGNhbGwgaXMgd3JhcHBlZCBpbiBhIHRpbWVvdXQgdG8gcHJldmVudCBhbiBpc3N1ZSB3aXRoIHRoZSBpbnRlcmZhY2Ugd2hlcmUgc29tZSByZXF1ZXN0cyBhcmUgbG9zdFxuICAgIC8vICBpZiBtdWx0aXBsZSBYRG9tYWluUmVxdWVzdHMgYXJlIGJlaW5nIHNlbnQgYXQgdGhlIHNhbWUgdGltZS5cbiAgICAvLyBTb21lIGluZm8gaGVyZTogaHR0cHM6Ly9naXRodWIuY29tL3Bob3RvbnN0b3JtL3BoYXNlci9pc3N1ZXMvMTI0OFxuICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgICB4ZHIuc2VuZCgpO1xuICAgIH0sIDApO1xufTtcblxuLyoqXG4gKiBDcmVhdGVzIGEgc291cmNlIHVzZWQgaW4gbG9hZGluZyB2aWEgYW4gZWxlbWVudC5cbiAqXG4gKiBAcGFyYW0gdHlwZSB7c3RyaW5nfSBUaGUgZWxlbWVudCB0eXBlICh2aWRlbyBvciBhdWRpbykuXG4gKiBAcGFyYW0gdXJsIHtzdHJpbmd9IFRoZSBzb3VyY2UgVVJMIHRvIGxvYWQgZnJvbS5cbiAqIEBwYXJhbSBbbWltZV0ge3N0cmluZ30gVGhlIG1pbWUgdHlwZSBvZiB0aGUgdmlkZW9cbiAqIEBwcml2YXRlXG4gKi9cblJlc291cmNlLnByb3RvdHlwZS5fY3JlYXRlU291cmNlID0gZnVuY3Rpb24gKHR5cGUsIHVybCwgbWltZSkge1xuICAgIGlmICghbWltZSkge1xuICAgICAgICBtaW1lID0gdHlwZSArICcvJyArIHVybC5zdWJzdHIodXJsLmxhc3RJbmRleE9mKCcuJykgKyAxKTtcbiAgICB9XG5cbiAgICB2YXIgc291cmNlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc291cmNlJyk7XG5cbiAgICBzb3VyY2Uuc3JjID0gdXJsO1xuICAgIHNvdXJjZS50eXBlID0gbWltZTtcblxuICAgIHJldHVybiBzb3VyY2U7XG59O1xuXG4vKipcbiAqIENhbGxlZCBpZiBhIGxvYWQgZXJyb3JzIG91dC5cbiAqXG4gKiBAcGFyYW0gZXZlbnQge0V2ZW50fSBUaGUgZXJyb3IgZXZlbnQgZnJvbSB0aGUgZWxlbWVudCB0aGF0IGVtaXRzIGl0LlxuICogQHByaXZhdGVcbiAqL1xuUmVzb3VyY2UucHJvdG90eXBlLl9vbkVycm9yID0gZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgdGhpcy5lcnJvciA9IG5ldyBFcnJvcignRmFpbGVkIHRvIGxvYWQgZWxlbWVudCB1c2luZyAnICsgZXZlbnQudGFyZ2V0Lm5vZGVOYW1lKTtcbiAgICB0aGlzLmNvbXBsZXRlKCk7XG59O1xuXG4vKipcbiAqIENhbGxlZCBpZiBhIGxvYWQgcHJvZ3Jlc3MgZXZlbnQgZmlyZXMgZm9yIHhoci94ZHIuXG4gKlxuICogQGZpcmVzIHByb2dyZXNzXG4gKiBAcGFyYW0gZXZlbnQge1hNTEh0dHBSZXF1ZXN0UHJvZ3Jlc3NFdmVudHxFdmVudH1cbiAqIEBwcml2YXRlXG4gKi9cblJlc291cmNlLnByb3RvdHlwZS5fb25Qcm9ncmVzcyA9ICBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICBpZiAoZXZlbnQgJiYgZXZlbnQubGVuZ3RoQ29tcHV0YWJsZSkge1xuICAgICAgICB0aGlzLmVtaXQoJ3Byb2dyZXNzJywgdGhpcywgZXZlbnQubG9hZGVkIC8gZXZlbnQudG90YWwpO1xuICAgIH1cbn07XG5cbi8qKlxuICogQ2FsbGVkIGlmIGFuIGVycm9yIGV2ZW50IGZpcmVzIGZvciB4aHIveGRyLlxuICpcbiAqIEBwYXJhbSBldmVudCB7WE1MSHR0cFJlcXVlc3RFcnJvckV2ZW50fEV2ZW50fVxuICogQHByaXZhdGVcbiAqL1xuUmVzb3VyY2UucHJvdG90eXBlLl94aHJPbkVycm9yID0gZnVuY3Rpb24gKCkge1xuICAgIHRoaXMuZXJyb3IgPSBuZXcgRXJyb3IoXG4gICAgICAgIHJlcVR5cGUodGhpcy54aHIpICsgJyBSZXF1ZXN0IGZhaWxlZC4gJyArXG4gICAgICAgICdTdGF0dXM6ICcgKyB0aGlzLnhoci5zdGF0dXMgKyAnLCB0ZXh0OiBcIicgKyB0aGlzLnhoci5zdGF0dXNUZXh0ICsgJ1wiJ1xuICAgICk7XG5cbiAgICB0aGlzLmNvbXBsZXRlKCk7XG59O1xuXG4vKipcbiAqIENhbGxlZCBpZiBhbiBhYm9ydCBldmVudCBmaXJlcyBmb3IgeGhyLlxuICpcbiAqIEBwYXJhbSBldmVudCB7WE1MSHR0cFJlcXVlc3RBYm9ydEV2ZW50fVxuICogQHByaXZhdGVcbiAqL1xuUmVzb3VyY2UucHJvdG90eXBlLl94aHJPbkFib3J0ID0gZnVuY3Rpb24gKCkge1xuICAgIHRoaXMuZXJyb3IgPSBuZXcgRXJyb3IocmVxVHlwZSh0aGlzLnhocikgKyAnIFJlcXVlc3Qgd2FzIGFib3J0ZWQgYnkgdGhlIHVzZXIuJyk7XG4gICAgdGhpcy5jb21wbGV0ZSgpO1xufTtcblxuLyoqXG4gKiBDYWxsZWQgaWYgYSB0aW1lb3V0IGV2ZW50IGZpcmVzIGZvciB4ZHIuXG4gKlxuICogQHBhcmFtIGV2ZW50IHtFdmVudH1cbiAqIEBwcml2YXRlXG4gKi9cblJlc291cmNlLnByb3RvdHlwZS5feGRyT25UaW1lb3V0ID0gZnVuY3Rpb24gKCkge1xuICAgIHRoaXMuZXJyb3IgPSBuZXcgRXJyb3IocmVxVHlwZSh0aGlzLnhocikgKyAnIFJlcXVlc3QgdGltZWQgb3V0LicpO1xuICAgIHRoaXMuY29tcGxldGUoKTtcbn07XG5cbi8qKlxuICogQ2FsbGVkIHdoZW4gZGF0YSBzdWNjZXNzZnVsbHkgbG9hZHMgZnJvbSBhbiB4aHIveGRyIHJlcXVlc3QuXG4gKlxuICogQHBhcmFtIGV2ZW50IHtYTUxIdHRwUmVxdWVzdExvYWRFdmVudHxFdmVudH1cbiAqIEBwcml2YXRlXG4gKi9cblJlc291cmNlLnByb3RvdHlwZS5feGhyT25Mb2FkID0gZnVuY3Rpb24gKCkge1xuICAgIHZhciB4aHIgPSB0aGlzLnhocixcbiAgICAgICAgc3RhdHVzID0geGhyLnN0YXR1cyAhPT0gdW5kZWZpbmVkID8geGhyLnN0YXR1cyA6IDIwMDsgLy9YRFIgaGFzIG5vIGAuc3RhdHVzYCwgYXNzdW1lIDIwMC5cblxuICAgIC8vIHN0YXR1cyBjYW4gYmUgMCB3aGVuIHVzaW5nIHRoZSBmaWxlOi8vIHByb3RvY29sLCBhbHNvIGNoZWNrIGlmIGEgcmVzcG9uc2Ugd2FzIGZvdW5kXG4gICAgaWYgKHN0YXR1cyA9PT0gMjAwIHx8IHN0YXR1cyA9PT0gMjA0IHx8IChzdGF0dXMgPT09IDAgJiYgeGhyLnJlc3BvbnNlVGV4dC5sZW5ndGggPiAwKSkge1xuICAgICAgICAvLyBpZiB0ZXh0LCBqdXN0IHJldHVybiBpdFxuICAgICAgICBpZiAodGhpcy54aHJUeXBlID09PSBSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRS5URVhUKSB7XG4gICAgICAgICAgICB0aGlzLmRhdGEgPSB4aHIucmVzcG9uc2VUZXh0O1xuICAgICAgICB9XG4gICAgICAgIC8vIGlmIGpzb24sIHBhcnNlIGludG8ganNvbiBvYmplY3RcbiAgICAgICAgZWxzZSBpZiAodGhpcy54aHJUeXBlID09PSBSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRS5KU09OKSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIHRoaXMuZGF0YSA9IEpTT04ucGFyc2UoeGhyLnJlc3BvbnNlVGV4dCk7XG4gICAgICAgICAgICAgICAgdGhpcy5pc0pzb24gPSB0cnVlO1xuICAgICAgICAgICAgfSBjYXRjaChlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5lcnJvciA9IG5ldyBFcnJvcignRXJyb3IgdHJ5aW5nIHRvIHBhcnNlIGxvYWRlZCBqc29uOicsIGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIGlmIHhtbCwgcGFyc2UgaW50byBhbiB4bWwgZG9jdW1lbnQgb3IgZGl2IGVsZW1lbnRcbiAgICAgICAgZWxzZSBpZiAodGhpcy54aHJUeXBlID09PSBSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRS5ET0NVTUVOVCkge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBpZiAod2luZG93LkRPTVBhcnNlcikge1xuICAgICAgICAgICAgICAgICAgICB2YXIgZG9tcGFyc2VyID0gbmV3IERPTVBhcnNlcigpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmRhdGEgPSBkb21wYXJzZXIucGFyc2VGcm9tU3RyaW5nKHhoci5yZXNwb25zZVRleHQsICd0ZXh0L3htbCcpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICAgICAgICAgICAgICBkaXYuaW5uZXJIVE1MID0geGhyLnJlc3BvbnNlVGV4dDtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kYXRhID0gZGl2O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzLmlzWG1sID0gdHJ1ZTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmVycm9yID0gbmV3IEVycm9yKCdFcnJvciB0cnlpbmcgdG8gcGFyc2UgbG9hZGVkIHhtbDonLCBlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvLyBvdGhlciB0eXBlcyBqdXN0IHJldHVybiB0aGUgcmVzcG9uc2VcbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmRhdGEgPSB4aHIucmVzcG9uc2UgfHwgeGhyLnJlc3BvbnNlVGV4dDtcbiAgICAgICAgfVxuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgdGhpcy5lcnJvciA9IG5ldyBFcnJvcignWycgKyB4aHIuc3RhdHVzICsgJ10nICsgeGhyLnN0YXR1c1RleHQgKyAnOicgKyB4aHIucmVzcG9uc2VVUkwpO1xuICAgIH1cblxuICAgIHRoaXMuY29tcGxldGUoKTtcbn07XG5cbmZ1bmN0aW9uIHJlcVR5cGUoeGhyKSB7XG4gICAgcmV0dXJuIHhoci50b1N0cmluZygpLnJlcGxhY2UoJ29iamVjdCAnLCAnJyk7XG59XG5cbi8qKlxuICogU2V0cyB0aGUgYGNyb3NzT3JpZ2luYCBwcm9wZXJ0eSBmb3IgdGhpcyByZXNvdXJjZSBiYXNlZCBvbiBpZiB0aGUgdXJsXG4gKiBmb3IgdGhpcyByZXNvdXJjZSBpcyBjcm9zcy1vcmlnaW4uIElmIGNyb3NzT3JpZ2luIHdhcyBtYW51YWxseSBzZXQsIHRoaXNcbiAqIGZ1bmN0aW9uIGRvZXMgbm90aGluZy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHVybCB7c3RyaW5nfSBUaGUgdXJsIHRvIHRlc3QuXG4gKiBAcGFyYW0gW2xvY2F0aW9uPXdpbmRvdy5sb2NhdGlvbl0ge29iamVjdH0gVGhlIGxvY2F0aW9uIG9iamVjdCB0byB0ZXN0IGFnYWluc3QuXG4gKiBAcmV0dXJuIHtzdHJpbmd9IFRoZSBjcm9zc09yaWdpbiB2YWx1ZSB0byB1c2UgKG9yIGVtcHR5IHN0cmluZyBmb3Igbm9uZSkuXG4gKi9cblJlc291cmNlLnByb3RvdHlwZS5fZGV0ZXJtaW5lQ3Jvc3NPcmlnaW4gPSBmdW5jdGlvbiAodXJsLCBsb2MpIHtcbiAgICAvLyBkYXRhOiBhbmQgamF2YXNjcmlwdDogdXJscyBhcmUgY29uc2lkZXJlZCBzYW1lLW9yaWdpblxuICAgIGlmICh1cmwuaW5kZXhPZignZGF0YTonKSA9PT0gMCkge1xuICAgICAgICByZXR1cm4gJyc7XG4gICAgfVxuXG4gICAgLy8gZGVmYXVsdCBpcyB3aW5kb3cubG9jYXRpb25cbiAgICBsb2MgPSBsb2MgfHwgd2luZG93LmxvY2F0aW9uO1xuXG4gICAgaWYgKCF0ZW1wQW5jaG9yKSB7XG4gICAgICAgIHRlbXBBbmNob3IgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdhJyk7XG4gICAgfVxuXG4gICAgLy8gbGV0IHRoZSBicm93c2VyIGRldGVybWluZSB0aGUgZnVsbCBocmVmIGZvciB0aGUgdXJsIG9mIHRoaXMgcmVzb3VyY2UgYW5kIHRoZW5cbiAgICAvLyBwYXJzZSB3aXRoIHRoZSBub2RlIHVybCBsaWIsIHdlIGNhbid0IHVzZSB0aGUgcHJvcGVydGllcyBvZiB0aGUgYW5jaG9yIGVsZW1lbnRcbiAgICAvLyBiZWNhdXNlIHRoZXkgZG9uJ3Qgd29yayBpbiBJRTkgOihcbiAgICB0ZW1wQW5jaG9yLmhyZWYgPSB1cmw7XG4gICAgdXJsID0gX3VybC5wYXJzZSh0ZW1wQW5jaG9yLmhyZWYpO1xuXG4gICAgdmFyIHNhbWVQb3J0ID0gKCF1cmwucG9ydCAmJiBsb2MucG9ydCA9PT0gJycpIHx8ICh1cmwucG9ydCA9PT0gbG9jLnBvcnQpO1xuXG4gICAgLy8gaWYgY3Jvc3Mgb3JpZ2luXG4gICAgaWYgKHVybC5ob3N0bmFtZSAhPT0gbG9jLmhvc3RuYW1lIHx8ICFzYW1lUG9ydCB8fCB1cmwucHJvdG9jb2wgIT09IGxvYy5wcm90b2NvbCkge1xuICAgICAgICByZXR1cm4gJ2Fub255bW91cyc7XG4gICAgfVxuXG4gICAgcmV0dXJuICcnO1xufTtcblxuLyoqXG4gKiBEZXRlcm1pbmVzIHRoZSByZXNwb25zZVR5cGUgb2YgYW4gWEhSIHJlcXVlc3QgYmFzZWQgb24gdGhlIGV4dGVuc2lvbiBvZiB0aGVcbiAqIHJlc291cmNlIGJlaW5nIGxvYWRlZC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHJldHVybiB7UmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEV9IFRoZSByZXNwb25zZVR5cGUgdG8gdXNlLlxuICovXG5SZXNvdXJjZS5wcm90b3R5cGUuX2RldGVybWluZVhoclR5cGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIFJlc291cmNlLl94aHJUeXBlTWFwW3RoaXMuX2dldEV4dGVuc2lvbigpXSB8fCBSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRS5URVhUO1xufTtcblxuUmVzb3VyY2UucHJvdG90eXBlLl9kZXRlcm1pbmVMb2FkVHlwZSA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gUmVzb3VyY2UuX2xvYWRUeXBlTWFwW3RoaXMuX2dldEV4dGVuc2lvbigpXSB8fCBSZXNvdXJjZS5MT0FEX1RZUEUuWEhSO1xufTtcblxuUmVzb3VyY2UucHJvdG90eXBlLl9nZXRFeHRlbnNpb24gPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHVybCA9IHRoaXMudXJsLFxuICAgICAgICBleHQ7XG5cbiAgICBpZiAodGhpcy5pc0RhdGFVcmwpIHtcbiAgICAgICAgdmFyIHNsYXNoSW5kZXggPSB1cmwuaW5kZXhPZignLycpO1xuICAgICAgICBleHQgPSB1cmwuc3Vic3RyaW5nKHNsYXNoSW5kZXggKyAxLCB1cmwuaW5kZXhPZignOycsIHNsYXNoSW5kZXgpKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHZhciBxdWVyeVN0YXJ0ID0gdXJsLmluZGV4T2YoJz8nKTtcbiAgICAgICAgaWYgKHF1ZXJ5U3RhcnQgIT09IC0xKSB7XG4gICAgICAgICAgICB1cmwgPSB1cmwuc3Vic3RyaW5nKDAsIHF1ZXJ5U3RhcnQpO1xuICAgICAgICB9XG5cbiAgICAgICAgZXh0ID0gdXJsLnN1YnN0cmluZyh1cmwubGFzdEluZGV4T2YoJy4nKSArIDEpO1xuICAgIH1cblxuICAgIHJldHVybiBleHQ7XG59O1xuXG4vKipcbiAqIERldGVybWluZXMgdGhlIG1pbWUgdHlwZSBvZiBhbiBYSFIgcmVxdWVzdCBiYXNlZCBvbiB0aGUgcmVzcG9uc2VUeXBlIG9mXG4gKiByZXNvdXJjZSBiZWluZyBsb2FkZWQuXG4gKlxuICogQHByaXZhdGVcbiAqIEByZXR1cm4ge3N0cmluZ30gVGhlIG1pbWUgdHlwZSB0byB1c2UuXG4gKi9cblJlc291cmNlLnByb3RvdHlwZS5fZ2V0TWltZUZyb21YaHJUeXBlID0gZnVuY3Rpb24gKHR5cGUpIHtcbiAgICBzd2l0Y2godHlwZSkge1xuICAgICAgICBjYXNlIFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkJVRkZFUjpcbiAgICAgICAgICAgIHJldHVybiAnYXBwbGljYXRpb24vb2N0ZXQtYmluYXJ5JztcblxuICAgICAgICBjYXNlIFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkJMT0I6XG4gICAgICAgICAgICByZXR1cm4gJ2FwcGxpY2F0aW9uL2Jsb2InO1xuXG4gICAgICAgIGNhc2UgUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuRE9DVU1FTlQ6XG4gICAgICAgICAgICByZXR1cm4gJ2FwcGxpY2F0aW9uL3htbCc7XG5cbiAgICAgICAgY2FzZSBSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRS5KU09OOlxuICAgICAgICAgICAgcmV0dXJuICdhcHBsaWNhdGlvbi9qc29uJztcblxuICAgICAgICBjYXNlIFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkRFRkFVTFQ6XG4gICAgICAgIGNhc2UgUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuVEVYVDpcbiAgICAgICAgICAgIC8qIGZhbGxzIHRocm91Z2ggKi9cbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIHJldHVybiAndGV4dC9wbGFpbic7XG5cbiAgICB9XG59O1xuXG4vKipcbiAqIFRoZSB0eXBlcyBvZiBsb2FkaW5nIGEgcmVzb3VyY2UgY2FuIHVzZS5cbiAqXG4gKiBAc3RhdGljXG4gKiBAY29uc3RhbnRcbiAqIEBwcm9wZXJ0eSB7b2JqZWN0fSBMT0FEX1RZUEVcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBMT0FEX1RZUEUuWEhSIC0gVXNlcyBYTUxIdHRwUmVxdWVzdCB0byBsb2FkIHRoZSByZXNvdXJjZS5cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBMT0FEX1RZUEUuSU1BR0UgLSBVc2VzIGFuIGBJbWFnZWAgb2JqZWN0IHRvIGxvYWQgdGhlIHJlc291cmNlLlxuICogQHByb3BlcnR5IHtudW1iZXJ9IExPQURfVFlQRS5BVURJTyAtIFVzZXMgYW4gYEF1ZGlvYCBvYmplY3QgdG8gbG9hZCB0aGUgcmVzb3VyY2UuXG4gKiBAcHJvcGVydHkge251bWJlcn0gTE9BRF9UWVBFLlZJREVPIC0gVXNlcyBhIGBWaWRlb2Agb2JqZWN0IHRvIGxvYWQgdGhlIHJlc291cmNlLlxuICovXG5SZXNvdXJjZS5MT0FEX1RZUEUgPSB7XG4gICAgWEhSOiAgICAxLFxuICAgIElNQUdFOiAgMixcbiAgICBBVURJTzogIDMsXG4gICAgVklERU86ICA0XG59O1xuXG4vKipcbiAqIFRoZSBYSFIgcmVhZHkgc3RhdGVzLCB1c2VkIGludGVybmFsbHkuXG4gKlxuICogQHN0YXRpY1xuICogQGNvbnN0YW50XG4gKiBAcHJvcGVydHkge29iamVjdH0gWEhSX1JFQURZX1NUQVRFXG4gKiBAcHJvcGVydHkge251bWJlcn0gWEhSX1JFQURZX1NUQVRFLlVOU0VOVCAtIG9wZW4oKWhhcyBub3QgYmVlbiBjYWxsZWQgeWV0LlxuICogQHByb3BlcnR5IHtudW1iZXJ9IFhIUl9SRUFEWV9TVEFURS5PUEVORUQgLSBzZW5kKCloYXMgbm90IGJlZW4gY2FsbGVkIHlldC5cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBYSFJfUkVBRFlfU1RBVEUuSEVBREVSU19SRUNFSVZFRCAtIHNlbmQoKSBoYXMgYmVlbiBjYWxsZWQsIGFuZCBoZWFkZXJzIGFuZCBzdGF0dXMgYXJlIGF2YWlsYWJsZS5cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBYSFJfUkVBRFlfU1RBVEUuTE9BRElORyAtIERvd25sb2FkaW5nOyByZXNwb25zZVRleHQgaG9sZHMgcGFydGlhbCBkYXRhLlxuICogQHByb3BlcnR5IHtudW1iZXJ9IFhIUl9SRUFEWV9TVEFURS5ET05FIC0gVGhlIG9wZXJhdGlvbiBpcyBjb21wbGV0ZS5cbiAqL1xuUmVzb3VyY2UuWEhSX1JFQURZX1NUQVRFID0ge1xuICAgIFVOU0VOVDogMCxcbiAgICBPUEVORUQ6IDEsXG4gICAgSEVBREVSU19SRUNFSVZFRDogMixcbiAgICBMT0FESU5HOiAzLFxuICAgIERPTkU6IDRcbn07XG5cbi8qKlxuICogVGhlIFhIUiByZWFkeSBzdGF0ZXMsIHVzZWQgaW50ZXJuYWxseS5cbiAqXG4gKiBAc3RhdGljXG4gKiBAY29uc3RhbnRcbiAqIEBwcm9wZXJ0eSB7b2JqZWN0fSBYSFJfUkVTUE9OU0VfVFlQRVxuICogQHByb3BlcnR5IHtzdHJpbmd9IFhIUl9SRVNQT05TRV9UWVBFLkRFRkFVTFQgLSBkZWZhdWx0cyB0byB0ZXh0XG4gKiBAcHJvcGVydHkge3N0cmluZ30gWEhSX1JFU1BPTlNFX1RZUEUuQlVGRkVSIC0gQXJyYXlCdWZmZXJcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBYSFJfUkVTUE9OU0VfVFlQRS5CTE9CIC0gQmxvYlxuICogQHByb3BlcnR5IHtzdHJpbmd9IFhIUl9SRVNQT05TRV9UWVBFLkRPQ1VNRU5UIC0gRG9jdW1lbnRcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBYSFJfUkVTUE9OU0VfVFlQRS5KU09OIC0gT2JqZWN0XG4gKiBAcHJvcGVydHkge3N0cmluZ30gWEhSX1JFU1BPTlNFX1RZUEUuVEVYVCAtIFN0cmluZ1xuICovXG5SZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRSA9IHtcbiAgICBERUZBVUxUOiAgICAndGV4dCcsXG4gICAgQlVGRkVSOiAgICAgJ2FycmF5YnVmZmVyJyxcbiAgICBCTE9COiAgICAgICAnYmxvYicsXG4gICAgRE9DVU1FTlQ6ICAgJ2RvY3VtZW50JyxcbiAgICBKU09OOiAgICAgICAnanNvbicsXG4gICAgVEVYVDogICAgICAgJ3RleHQnXG59O1xuXG5SZXNvdXJjZS5fbG9hZFR5cGVNYXAgPSB7XG4gICAgJ2dpZic6ICAgICAgUmVzb3VyY2UuTE9BRF9UWVBFLklNQUdFLFxuICAgICdwbmcnOiAgICAgIFJlc291cmNlLkxPQURfVFlQRS5JTUFHRSxcbiAgICAnYm1wJzogICAgICBSZXNvdXJjZS5MT0FEX1RZUEUuSU1BR0UsXG4gICAgJ2pwZyc6ICAgICAgUmVzb3VyY2UuTE9BRF9UWVBFLklNQUdFLFxuICAgICdqcGVnJzogICAgIFJlc291cmNlLkxPQURfVFlQRS5JTUFHRSxcbiAgICAndGlmJzogICAgICBSZXNvdXJjZS5MT0FEX1RZUEUuSU1BR0UsXG4gICAgJ3RpZmYnOiAgICAgUmVzb3VyY2UuTE9BRF9UWVBFLklNQUdFLFxuICAgICd3ZWJwJzogICAgIFJlc291cmNlLkxPQURfVFlQRS5JTUFHRSxcbiAgICAndGdhJzogICAgICBSZXNvdXJjZS5MT0FEX1RZUEUuSU1BR0Vcbn07XG5cblJlc291cmNlLl94aHJUeXBlTWFwID0ge1xuICAgIC8vIHhtbFxuICAgICd4aHRtbCc6ICAgIFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkRPQ1VNRU5ULFxuICAgICdodG1sJzogICAgIFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkRPQ1VNRU5ULFxuICAgICdodG0nOiAgICAgIFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkRPQ1VNRU5ULFxuICAgICd4bWwnOiAgICAgIFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkRPQ1VNRU5ULFxuICAgICd0bXgnOiAgICAgIFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkRPQ1VNRU5ULFxuICAgICd0c3gnOiAgICAgIFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkRPQ1VNRU5ULFxuICAgICdzdmcnOiAgICAgIFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkRPQ1VNRU5ULFxuXG4gICAgLy8gaW1hZ2VzXG4gICAgJ2dpZic6ICAgICAgUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuQkxPQixcbiAgICAncG5nJzogICAgICBSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRS5CTE9CLFxuICAgICdibXAnOiAgICAgIFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkJMT0IsXG4gICAgJ2pwZyc6ICAgICAgUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuQkxPQixcbiAgICAnanBlZyc6ICAgICBSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRS5CTE9CLFxuICAgICd0aWYnOiAgICAgIFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkJMT0IsXG4gICAgJ3RpZmYnOiAgICAgUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuQkxPQixcbiAgICAnd2VicCc6ICAgICBSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRS5CTE9CLFxuICAgICd0Z2EnOiAgICAgIFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkJMT0IsXG5cbiAgICAvLyBqc29uXG4gICAgJ2pzb24nOiAgICAgUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuSlNPTixcblxuICAgIC8vIHRleHRcbiAgICAndGV4dCc6ICAgICBSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRS5URVhULFxuICAgICd0eHQnOiAgICAgIFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLlRFWFRcbn07XG5cbi8qKlxuICogU2V0cyB0aGUgbG9hZCB0eXBlIHRvIGJlIHVzZWQgZm9yIGEgc3BlY2lmaWMgZXh0ZW5zaW9uLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBwYXJhbSBleHRuYW1lIHtzdHJpbmd9IFRoZSBleHRlbnNpb24gdG8gc2V0IHRoZSB0eXBlIGZvciwgZS5nLiBcInBuZ1wiIG9yIFwiZm50XCJcbiAqIEBwYXJhbSBsb2FkVHlwZSB7UmVzb3VyY2UuTE9BRF9UWVBFfSBUaGUgbG9hZCB0eXBlIHRvIHNldCBpdCB0by5cbiAqL1xuUmVzb3VyY2Uuc2V0RXh0ZW5zaW9uTG9hZFR5cGUgPSBmdW5jdGlvbiAoZXh0bmFtZSwgbG9hZFR5cGUpIHtcbiAgICBzZXRFeHRNYXAoUmVzb3VyY2UuX2xvYWRUeXBlTWFwLCBleHRuYW1lLCBsb2FkVHlwZSk7XG59O1xuXG4vKipcbiAqIFNldHMgdGhlIGxvYWQgdHlwZSB0byBiZSB1c2VkIGZvciBhIHNwZWNpZmljIGV4dGVuc2lvbi5cbiAqXG4gKiBAc3RhdGljXG4gKiBAcGFyYW0gZXh0bmFtZSB7c3RyaW5nfSBUaGUgZXh0ZW5zaW9uIHRvIHNldCB0aGUgdHlwZSBmb3IsIGUuZy4gXCJwbmdcIiBvciBcImZudFwiXG4gKiBAcGFyYW0geGhyVHlwZSB7UmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEV9IFRoZSB4aHIgdHlwZSB0byBzZXQgaXQgdG8uXG4gKi9cblJlc291cmNlLnNldEV4dGVuc2lvblhoclR5cGUgPSBmdW5jdGlvbiAoZXh0bmFtZSwgeGhyVHlwZSkge1xuICAgIHNldEV4dE1hcChSZXNvdXJjZS5feGhyVHlwZU1hcCwgZXh0bmFtZSwgeGhyVHlwZSk7XG59O1xuXG5mdW5jdGlvbiBzZXRFeHRNYXAobWFwLCBleHRuYW1lLCB2YWwpIHtcbiAgICBpZiAoZXh0bmFtZSAmJiBleHRuYW1lLmluZGV4T2YoJy4nKSA9PT0gMCkge1xuICAgICAgICBleHRuYW1lID0gZXh0bmFtZS5zdWJzdHJpbmcoMSk7XG4gICAgfVxuXG4gICAgaWYgKCFleHRuYW1lKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBtYXBbZXh0bmFtZV0gPSB2YWw7XG59XG4iLCJtb2R1bGUuZXhwb3J0cyA9IHtcblxuICAgIC8vIHByaXZhdGUgcHJvcGVydHlcbiAgICBfa2V5U3RyOiBcIkFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5Ky89XCIsXG5cbiAgICBlbmNvZGVCaW5hcnk6IGZ1bmN0aW9uIChpbnB1dCkge1xuICAgICAgICB2YXIgb3V0cHV0ID0gXCJcIjtcbiAgICAgICAgdmFyIGJ5dGVidWZmZXI7XG4gICAgICAgIHZhciBlbmNvZGVkQ2hhckluZGV4ZXMgPSBuZXcgQXJyYXkoNCk7XG4gICAgICAgIHZhciBpbnggPSAwO1xuICAgICAgICB2YXIgam54ID0gMDtcbiAgICAgICAgdmFyIHBhZGRpbmdCeXRlcyA9IDA7XG5cbiAgICAgICAgd2hpbGUgKGlueCA8IGlucHV0Lmxlbmd0aCkge1xuICAgICAgICAgICAgLy8gRmlsbCBieXRlIGJ1ZmZlciBhcnJheVxuICAgICAgICAgICAgYnl0ZWJ1ZmZlciA9IG5ldyBBcnJheSgzKTtcbiAgICAgICAgICAgIGZvciAoam54ID0gMDsgam54IDwgYnl0ZWJ1ZmZlci5sZW5ndGg7IGpueCsrKSB7XG4gICAgICAgICAgICAgICAgaWYgKGlueCA8IGlucHV0Lmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICAvLyB0aHJvdyBhd2F5IGhpZ2gtb3JkZXIgYnl0ZSwgYXMgZG9jdW1lbnRlZCBhdDpcbiAgICAgICAgICAgICAgICAgICAgLy8gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvRW4vVXNpbmdfWE1MSHR0cFJlcXVlc3QjSGFuZGxpbmdfYmluYXJ5X2RhdGFcbiAgICAgICAgICAgICAgICAgICAgYnl0ZWJ1ZmZlcltqbnhdID0gaW5wdXQuY2hhckNvZGVBdChpbngrKykgJiAweGZmO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgYnl0ZWJ1ZmZlcltqbnhdID0gMDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIEdldCBlYWNoIGVuY29kZWQgY2hhcmFjdGVyLCA2IGJpdHMgYXQgYSB0aW1lXG4gICAgICAgICAgICAvLyBpbmRleCAxOiBmaXJzdCA2IGJpdHNcbiAgICAgICAgICAgIGVuY29kZWRDaGFySW5kZXhlc1swXSA9IGJ5dGVidWZmZXJbMF0gPj4gMjtcbiAgICAgICAgICAgIC8vIGluZGV4IDI6IHNlY29uZCA2IGJpdHMgKDIgbGVhc3Qgc2lnbmlmaWNhbnQgYml0cyBmcm9tIGlucHV0IGJ5dGUgMSArIDQgbW9zdCBzaWduaWZpY2FudCBiaXRzIGZyb20gYnl0ZSAyKVxuICAgICAgICAgICAgZW5jb2RlZENoYXJJbmRleGVzWzFdID0gKChieXRlYnVmZmVyWzBdICYgMHgzKSA8PCA0KSB8IChieXRlYnVmZmVyWzFdID4+IDQpO1xuICAgICAgICAgICAgLy8gaW5kZXggMzogdGhpcmQgNiBiaXRzICg0IGxlYXN0IHNpZ25pZmljYW50IGJpdHMgZnJvbSBpbnB1dCBieXRlIDIgKyAyIG1vc3Qgc2lnbmlmaWNhbnQgYml0cyBmcm9tIGJ5dGUgMylcbiAgICAgICAgICAgIGVuY29kZWRDaGFySW5kZXhlc1syXSA9ICgoYnl0ZWJ1ZmZlclsxXSAmIDB4MGYpIDw8IDIpIHwgKGJ5dGVidWZmZXJbMl0gPj4gNik7XG4gICAgICAgICAgICAvLyBpbmRleCAzOiBmb3J0aCA2IGJpdHMgKDYgbGVhc3Qgc2lnbmlmaWNhbnQgYml0cyBmcm9tIGlucHV0IGJ5dGUgMylcbiAgICAgICAgICAgIGVuY29kZWRDaGFySW5kZXhlc1szXSA9IGJ5dGVidWZmZXJbMl0gJiAweDNmO1xuXG4gICAgICAgICAgICAvLyBEZXRlcm1pbmUgd2hldGhlciBwYWRkaW5nIGhhcHBlbmVkLCBhbmQgYWRqdXN0IGFjY29yZGluZ2x5XG4gICAgICAgICAgICBwYWRkaW5nQnl0ZXMgPSBpbnggLSAoaW5wdXQubGVuZ3RoIC0gMSk7XG4gICAgICAgICAgICBzd2l0Y2ggKHBhZGRpbmdCeXRlcykge1xuICAgICAgICAgICAgICAgIGNhc2UgMjpcbiAgICAgICAgICAgICAgICAgICAgLy8gU2V0IGxhc3QgMiBjaGFyYWN0ZXJzIHRvIHBhZGRpbmcgY2hhclxuICAgICAgICAgICAgICAgICAgICBlbmNvZGVkQ2hhckluZGV4ZXNbM10gPSA2NDtcbiAgICAgICAgICAgICAgICAgICAgZW5jb2RlZENoYXJJbmRleGVzWzJdID0gNjQ7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgY2FzZSAxOlxuICAgICAgICAgICAgICAgICAgICAvLyBTZXQgbGFzdCBjaGFyYWN0ZXIgdG8gcGFkZGluZyBjaGFyXG4gICAgICAgICAgICAgICAgICAgIGVuY29kZWRDaGFySW5kZXhlc1szXSA9IDY0O1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrOyAvLyBObyBwYWRkaW5nIC0gcHJvY2VlZFxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBOb3cgd2Ugd2lsbCBncmFiIGVhY2ggYXBwcm9wcmlhdGUgY2hhcmFjdGVyIG91dCBvZiBvdXIga2V5c3RyaW5nXG4gICAgICAgICAgICAvLyBiYXNlZCBvbiBvdXIgaW5kZXggYXJyYXkgYW5kIGFwcGVuZCBpdCB0byB0aGUgb3V0cHV0IHN0cmluZ1xuICAgICAgICAgICAgZm9yIChqbnggPSAwOyBqbnggPCBlbmNvZGVkQ2hhckluZGV4ZXMubGVuZ3RoOyBqbngrKykge1xuICAgICAgICAgICAgICAgIG91dHB1dCArPSB0aGlzLl9rZXlTdHIuY2hhckF0KGVuY29kZWRDaGFySW5kZXhlc1tqbnhdKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gb3V0cHV0O1xuICAgIH1cbn07XG4iLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vTG9hZGVyJyk7XG5cbm1vZHVsZS5leHBvcnRzLlJlc291cmNlID0gcmVxdWlyZSgnLi9SZXNvdXJjZScpO1xuXG5tb2R1bGUuZXhwb3J0cy5taWRkbGV3YXJlID0ge1xuICAgIGNhY2hpbmc6IHtcbiAgICAgICAgbWVtb3J5OiByZXF1aXJlKCcuL21pZGRsZXdhcmVzL2NhY2hpbmcvbWVtb3J5JylcbiAgICB9LFxuICAgIHBhcnNpbmc6IHtcbiAgICAgICAgYmxvYjogcmVxdWlyZSgnLi9taWRkbGV3YXJlcy9wYXJzaW5nL2Jsb2InKVxuICAgIH1cbn07XG4iLCIvLyBhIHNpbXBsZSBpbi1tZW1vcnkgY2FjaGUgZm9yIHJlc291cmNlc1xudmFyIGNhY2hlID0ge307XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBmdW5jdGlvbiAocmVzb3VyY2UsIG5leHQpIHtcbiAgICAgICAgLy8gaWYgY2FjaGVkLCB0aGVuIHNldCBkYXRhIGFuZCBjb21wbGV0ZSB0aGUgcmVzb3VyY2VcbiAgICAgICAgaWYgKGNhY2hlW3Jlc291cmNlLnVybF0pIHtcbiAgICAgICAgICAgIHJlc291cmNlLmRhdGEgPSBjYWNoZVtyZXNvdXJjZS51cmxdO1xuICAgICAgICAgICAgcmVzb3VyY2UuY29tcGxldGUoKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBpZiBub3QgY2FjaGVkLCB3YWl0IGZvciBjb21wbGV0ZSBhbmQgc3RvcmUgaXQgaW4gdGhlIGNhY2hlLlxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJlc291cmNlLm9uY2UoJ2NvbXBsZXRlJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgY2FjaGVbdGhpcy51cmxdID0gdGhpcy5kYXRhO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgXG4gICAgICAgIG5leHQoKTtcbiAgICB9O1xufTtcbiIsInZhciBSZXNvdXJjZSA9IHJlcXVpcmUoJy4uLy4uL1Jlc291cmNlJyksXG4gICAgYjY0ID0gcmVxdWlyZSgnLi4vLi4vYjY0Jyk7XG5cbndpbmRvdy5VUkwgPSB3aW5kb3cuVVJMIHx8IHdpbmRvdy53ZWJraXRVUkw7XG5cbi8vIGEgbWlkZGxld2FyZSBmb3IgdHJhbnNmb3JtaW5nIFhIUiBsb2FkZWQgQmxvYnMgaW50byBtb3JlIHVzZWZ1bCBvYmplY3RzXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBmdW5jdGlvbiAocmVzb3VyY2UsIG5leHQpIHtcbiAgICAgICAgaWYgKCFyZXNvdXJjZS5kYXRhKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV4dCgpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gaWYgdGhpcyB3YXMgYW4gWEhSIGxvYWQgb2YgYSBibG9iXG4gICAgICAgIGlmIChyZXNvdXJjZS54aHIgJiYgcmVzb3VyY2UueGhyVHlwZSA9PT0gUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuQkxPQikge1xuICAgICAgICAgICAgLy8gaWYgdGhlcmUgaXMgbm8gYmxvYiBzdXBwb3J0IHdlIHByb2JhYmx5IGdvdCBhIGJpbmFyeSBzdHJpbmcgYmFja1xuICAgICAgICAgICAgaWYgKCF3aW5kb3cuQmxvYiB8fCB0eXBlb2YgcmVzb3VyY2UuZGF0YSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgICAgICB2YXIgdHlwZSA9IHJlc291cmNlLnhoci5nZXRSZXNwb25zZUhlYWRlcignY29udGVudC10eXBlJyk7XG5cbiAgICAgICAgICAgICAgICAvLyB0aGlzIGlzIGFuIGltYWdlLCBjb252ZXJ0IHRoZSBiaW5hcnkgc3RyaW5nIGludG8gYSBkYXRhIHVybFxuICAgICAgICAgICAgICAgIGlmICh0eXBlICYmIHR5cGUuaW5kZXhPZignaW1hZ2UnKSA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICByZXNvdXJjZS5kYXRhID0gbmV3IEltYWdlKCk7XG4gICAgICAgICAgICAgICAgICAgIHJlc291cmNlLmRhdGEuc3JjID0gJ2RhdGE6JyArIHR5cGUgKyAnO2Jhc2U2NCwnICsgYjY0LmVuY29kZUJpbmFyeShyZXNvdXJjZS54aHIucmVzcG9uc2VUZXh0KTtcblxuICAgICAgICAgICAgICAgICAgICByZXNvdXJjZS5pc0ltYWdlID0gdHJ1ZTtcblxuICAgICAgICAgICAgICAgICAgICAvLyB3YWl0IHVudGlsIHRoZSBpbWFnZSBsb2FkcyBhbmQgdGhlbiBjYWxsYmFja1xuICAgICAgICAgICAgICAgICAgICByZXNvdXJjZS5kYXRhLm9ubG9hZCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc291cmNlLmRhdGEub25sb2FkID0gbnVsbDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgbmV4dCgpO1xuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIGlmIGNvbnRlbnQgdHlwZSBzYXlzIHRoaXMgaXMgYW4gaW1hZ2UsIHRoZW4gd2Ugc2hvdWxkIHRyYW5zZm9ybSB0aGUgYmxvYiBpbnRvIGFuIEltYWdlIG9iamVjdFxuICAgICAgICAgICAgZWxzZSBpZiAocmVzb3VyY2UuZGF0YS50eXBlLmluZGV4T2YoJ2ltYWdlJykgPT09IDApIHtcbiAgICAgICAgICAgICAgICB2YXIgc3JjID0gVVJMLmNyZWF0ZU9iamVjdFVSTChyZXNvdXJjZS5kYXRhKTtcblxuICAgICAgICAgICAgICAgIHJlc291cmNlLmJsb2IgPSByZXNvdXJjZS5kYXRhO1xuICAgICAgICAgICAgICAgIHJlc291cmNlLmRhdGEgPSBuZXcgSW1hZ2UoKTtcbiAgICAgICAgICAgICAgICByZXNvdXJjZS5kYXRhLnNyYyA9IHNyYztcblxuICAgICAgICAgICAgICAgIHJlc291cmNlLmlzSW1hZ2UgPSB0cnVlO1xuXG4gICAgICAgICAgICAgICAgLy8gY2xlYW51cCB0aGUgbm8gbG9uZ2VyIHVzZWQgYmxvYiBhZnRlciB0aGUgaW1hZ2UgbG9hZHNcbiAgICAgICAgICAgICAgICByZXNvdXJjZS5kYXRhLm9ubG9hZCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgVVJMLnJldm9rZU9iamVjdFVSTChzcmMpO1xuICAgICAgICAgICAgICAgICAgICByZXNvdXJjZS5kYXRhLm9ubG9hZCA9IG51bGw7XG5cbiAgICAgICAgICAgICAgICAgICAgbmV4dCgpO1xuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBuZXh0KCk7XG4gICAgICAgIH1cbiAgICB9O1xufTtcbiIsIm1vZHVsZS5leHBvcnRzPXtcbiAgXCJuYW1lXCI6IFwicGl4aS5qc1wiLFxuICBcInZlcnNpb25cIjogXCIzLjAuMTAtZGV2XCIsXG4gIFwiZGVzY3JpcHRpb25cIjogXCJQaXhpLmpzIGlzIGEgZmFzdCBsaWdodHdlaWdodCAyRCBsaWJyYXJ5IHRoYXQgd29ya3MgYWNyb3NzIGFsbCBkZXZpY2VzLlwiLFxuICBcImF1dGhvclwiOiBcIk1hdCBHcm92ZXNcIixcbiAgXCJjb250cmlidXRvcnNcIjogW1xuICAgIFwiQ2hhZCBFbmdsZXIgPGNoYWRAcGFudGhlcmRldi5jb20+XCIsXG4gICAgXCJSaWNoYXJkIERhdmV5IDxyZGF2ZXlAZ21haWwuY29tPlwiXG4gIF0sXG4gIFwibWFpblwiOiBcIi4vc3JjL2luZGV4LmpzXCIsXG4gIFwiaG9tZXBhZ2VcIjogXCJodHRwOi8vZ29vZGJveWRpZ2l0YWwuY29tL1wiLFxuICBcImJ1Z3NcIjogXCJodHRwczovL2dpdGh1Yi5jb20vcGl4aWpzL3BpeGkuanMvaXNzdWVzXCIsXG4gIFwibGljZW5zZVwiOiBcIk1JVFwiLFxuICBcInJlcG9zaXRvcnlcIjoge1xuICAgIFwidHlwZVwiOiBcImdpdFwiLFxuICAgIFwidXJsXCI6IFwiaHR0cHM6Ly9naXRodWIuY29tL3BpeGlqcy9waXhpLmpzLmdpdFwiXG4gIH0sXG4gIFwic2NyaXB0c1wiOiB7XG4gICAgXCJzdGFydFwiOiBcImd1bHAgJiYgZ3VscCB3YXRjaFwiLFxuICAgIFwidGVzdFwiOiBcImd1bHAgJiYgdGVzdGVtIGNpXCIsXG4gICAgXCJidWlsZFwiOiBcImd1bHBcIixcbiAgICBcImRvY3NcIjogXCJqc2RvYyAtYyAuL2d1bHAvdXRpbC9qc2RvYy5jb25mLmpzb24gLVIgUkVBRE1FLm1kXCJcbiAgfSxcbiAgXCJmaWxlc1wiOiBbXG4gICAgXCJiaW4vXCIsXG4gICAgXCJzcmMvXCIsXG4gICAgXCJDT05UUklCVVRJTkcubWRcIixcbiAgICBcIkxJQ0VOU0VcIixcbiAgICBcInBhY2thZ2UuanNvblwiLFxuICAgIFwiUkVBRE1FLm1kXCJcbiAgXSxcbiAgXCJkZXBlbmRlbmNpZXNcIjoge1xuICAgIFwiYXN5bmNcIjogXCJeMS41LjBcIixcbiAgICBcImJyZnNcIjogXCJeMS40LjFcIixcbiAgICBcImVhcmN1dFwiOiBcIl4yLjAuN1wiLFxuICAgIFwiZXZlbnRlbWl0dGVyM1wiOiBcIl4xLjEuMVwiLFxuICAgIFwib2JqZWN0LWFzc2lnblwiOiBcIl40LjAuMVwiLFxuICAgIFwicGl4aS1nbC1jb3JlXCI6IFwiZ2l0K2h0dHBzOi8vZ2l0aHViLmNvbS9Hb29kQm95RGlnaXRhbC9waXhpLWdsLWNvcmUuZ2l0XCIsXG4gICAgXCJyZXNvdXJjZS1sb2FkZXJcIjogXCJeMS42LjRcIlxuICB9LFxuICBcImRldkRlcGVuZGVuY2llc1wiOiB7XG4gICAgXCJicm93c2VyaWZ5XCI6IFwiXjExLjEuMFwiLFxuICAgIFwiY2hhaVwiOiBcIl4zLjIuMFwiLFxuICAgIFwiZGVsXCI6IFwiXjIuMC4yXCIsXG4gICAgXCJndWxwXCI6IFwiXjMuOS4wXCIsXG4gICAgXCJndWxwLWNhY2hlZFwiOiBcIl4xLjEuMFwiLFxuICAgIFwiZ3VscC1jb25jYXRcIjogXCJeMi42LjBcIixcbiAgICBcImd1bHAtZGVidWdcIjogXCJeMi4xLjBcIixcbiAgICBcImd1bHAtaGVhZGVyXCI6IFwiXjEuNy4xXCIsXG4gICAgXCJndWxwLWpzaGludFwiOiBcIl4xLjExLjJcIixcbiAgICBcImd1bHAtbWlycm9yXCI6IFwiXjAuNC4wXCIsXG4gICAgXCJndWxwLXBsdW1iZXJcIjogXCJeMS4wLjFcIixcbiAgICBcImd1bHAtcmVuYW1lXCI6IFwiXjEuMi4yXCIsXG4gICAgXCJndWxwLXNvdXJjZW1hcHNcIjogXCJeMS41LjJcIixcbiAgICBcImd1bHAtdWdsaWZ5XCI6IFwiXjEuNC4xXCIsXG4gICAgXCJndWxwLXV0aWxcIjogXCJeMy4wLjZcIixcbiAgICBcImphZ3VhcmpzLWpzZG9jXCI6IFwiZ2l0K2h0dHBzOi8vZ2l0aHViLmNvbS9kYXZpZHNoaW1qcy9qYWd1YXJqcy1qc2RvYy5naXRcIixcbiAgICBcImpzZG9jXCI6IFwiXjMuMy4yXCIsXG4gICAgXCJqc2hpbnQtc3VtbWFyeVwiOiBcIl4wLjQuMFwiLFxuICAgIFwibWluaW1pc3RcIjogXCJeMS4yLjBcIixcbiAgICBcIm1vY2hhXCI6IFwiXjIuMy4yXCIsXG4gICAgXCJyZXF1aXJlLWRpclwiOiBcIl4wLjMuMFwiLFxuICAgIFwicnVuLXNlcXVlbmNlXCI6IFwiXjEuMS4yXCIsXG4gICAgXCJ0ZXN0ZW1cIjogXCJeMC45LjRcIixcbiAgICBcInZpbnlsLWJ1ZmZlclwiOiBcIl4xLjAuMFwiLFxuICAgIFwidmlueWwtc291cmNlLXN0cmVhbVwiOiBcIl4xLjEuMFwiLFxuICAgIFwid2F0Y2hpZnlcIjogXCJeMy40LjBcIlxuICB9LFxuICBcImJyb3dzZXJpZnlcIjoge1xuICAgIFwidHJhbnNmb3JtXCI6IFtcbiAgICAgIFwiYnJmc1wiXG4gICAgXVxuICB9XG59XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uL2NvcmUnKTtcblxuLy8gYWRkIHNvbWUgZXh0cmEgdmFyaWFibGVzIHRvIHRoZSBjb250YWluZXIuLlxuT2JqZWN0LmFzc2lnbihcbiAgICBjb3JlLkRpc3BsYXlPYmplY3QucHJvdG90eXBlLFxuICAgIHJlcXVpcmUoJy4vYWNjZXNzaWJsZVRhcmdldCcpXG4pO1xuXG5cbi8qKlxuICogVGhlIEFjY2Vzc2liaWxpdHkgbWFuYWdlciByZWFjcmVhdGVzIHRoZSBhYmlsaXR5IHRvIHRhYiBhbmQgYW5kIGhhdmUgY29udGVudCByZWFkIGJ5IHNjcmVlbiByZWFkZXJzLiBUaGlzIGlzIHZlcnkgaW1wb3J0YW50IGFzIGl0IGNhbiBwb3NzaWJseSBoZWxwIHBlb3BsZSB3aXRoIGRpc2FiaWxpdGllcyBhY2Nlc3MgcGl4aSBjb250ZW50LlxuICogTXVjaCBsaWtlIGludGVyYWN0aW9uIGFueSBEaXNwbGF5T2JqZWN0IGNhbiBiZSBtYWRlIGFjY2Vzc2libGUuIFRoaXMgbWFuYWdlciB3aWxsIG1hcCB0aGUgZXZlbnRzIGFzIGlmIHRoZSBtb3VzZSB3YXMgYmVpbmcgdXNlZCwgbWluaW1pemluZyB0aGUgZWZmZXJvdCByZXF1aXJlZCB0byBpbXBsZW1lbnQuXG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLkNhbnZhc1JlbmRlcmVyfFBJWEkuV2ViR0xSZW5kZXJlcn0gQSByZWZlcmVuY2UgdG8gdGhlIGN1cnJlbnQgcmVuZGVyZXJcbiAqL1xuZnVuY3Rpb24gQWNjZXNzaWJpbGl0eU1hbmFnZXIocmVuZGVyZXIpXG57XG5cdC8vIGZpcnN0IHdlIGNyZWF0ZSBhIGRpdiB0aGF0IHdpbGwgc2l0IG92ZXIgdGhlIHBpeGkgZWxlbWVudC4gVGhpcyBpcyB3aGVyZSB0aGUgZGl2IG92ZXJsYXlzIHdpbGwgZ28uXG4gICAgdmFyIGRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgIFxuICAgIGRpdi5zdHlsZS53aWR0aCA9IDEwMCArICdweCc7XG4gICAgZGl2LnN0eWxlLmhlaWdodCA9IDEwMCArICdweCc7XG4gICAgZGl2LnN0eWxlLnBvc2l0aW9uID0gJ2Fic29sdXRlJztcbiAgICBkaXYuc3R5bGUudG9wID0gMDtcbiAgICBkaXYuc3R5bGUubGVmdCA9IDA7XG4gICAvL1xuICAgIGRpdi5zdHlsZS56SW5kZXggPSAyO1xuICAgXHRcbiAgIFx0LyoqXG4gICBcdCAqIFRoaXMgaXMgdGhlIGRvbSBlbGVtZW50IHRoYXQgd2lsbCBzaXQgb3ZlciB0aGUgcGl4aSBlbGVtZW50LiBUaGlzIGlzIHdoZXJlIHRoZSBkaXYgb3ZlcmxheXMgd2lsbCBnby5cbiAgIFx0ICogXG4gICBcdCAqIEB0eXBlIHtIVE1MRWxlbWVudH1cbiAgIFx0ICogQHByaXZhdGVcbiAgIFx0ICovXG4gICBcdHRoaXMuZGl2ID0gZGl2O1xuXG4gICBcdC8qKlxuICAgXHQgKiBBIHNpbXBsZSBwb29sIGZvciBzdG9yaW5nIGRpdnMuXG4gICBcdCAqIFxuICAgXHQgKiBAdHlwZSB7QXJyYXl9XG4gICBcdCAqIEBwcml2YXRlXG4gICBcdCAqL1xuIFx0dGhpcy5wb29sID0gW107XG5cbiBcdC8qKlxuIFx0ICogVGhpcyBpcyBhIHRpY2sgdXNlZCB0byBjaGVjayBpZiBhbiBvYmplY3QgaXMgbm8gbG9uZ2VyIGJlaW5nIHJlbmRlcmVkLlxuIFx0ICogXG4gXHQgKiBAdHlwZSB7TnVtYmVyfVxuIFx0ICogQHByaXZhdGVcbiBcdCAqL1xuICAgXHR0aGlzLnJlbmRlcklkID0gMDtcblxuICAgXHQvKipcbiAgIFx0ICogU2V0dGluZyB0aGlzIHRvIHRydWUgd2lsbCB2aXN1YWxseSBzaG93IHRoZSBkaXZzXG4gICBcdCAqIFxuICAgXHQgKiBAdHlwZSB7Qm9vbGVhbn1cbiAgIFx0ICovXG4gICBcdHRoaXMuZGVidWcgPSBmYWxzZTtcblxuICBcdC8qKlxuICAgICAqIFRoZSByZW5kZXJlciB0aGlzIGFjY2Vzc2liaWxpdHkgbWFuYWdlciB3b3JrcyBmb3IuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlN5c3RlbVJlbmRlcmVyfVxuICAgICAqL1xuICAgXHR0aGlzLnJlbmRlcmVyID0gcmVuZGVyZXI7XG5cbiAgIFx0LyoqXG4gICAgICogVGhlIGFycmF5IG9mIGN1cnJlbnRseSBhY3RpdmUgYWNjZXNzaWJsZSBpdGVtcy5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge0FycmF5fVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICBcdHRoaXMuY2hpbGRyZW4gPSBbXTtcbiAgIFx0XG4gICBcdC8qKlxuICAgICAqIHByZSBiaW5kIHRoZSBmdW5jdGlvbnMuLlxuICAgICAqL1xuICAgXHR0aGlzLl9vbktleURvd24gPSB0aGlzLl9vbktleURvd24uYmluZCh0aGlzKTtcbiAgIFx0dGhpcy5fb25Nb3VzZU1vdmUgPSB0aGlzLl9vbk1vdXNlTW92ZS5iaW5kKHRoaXMpO1xuICAgXHRcbiAgIFx0LyoqXG4gICAgICogc3RvcmVzIHRoZSBzdGF0ZSBvZiB0aGUgbWFuYWdlci4gSWYgdGhlcmUgYXJlIG5vIGFjY2Vzc2libGUgb2JqZWN0cyBvciB0aGUgbW91c2UgaXMgbW92aW5nIHRoZSB3aWxsIGJlIGZhbHNlLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7QXJyYXl9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgIFx0dGhpcy5pc0FjdGl2ZSA9IGZhbHNlO1xuXG5cbiAgIFx0Ly8gbGV0IGxpc3RlbiBmb3IgdGFiLi4gb25jZSBwcmVzc2VkIHdlIGNhbiBmaXJlIHVwIGFuZCBzaG93IHRoZSBhY2Nlc3NpYmlsaXR5IGxheWVyXG4gICBcdHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdrZXlkb3duJywgdGhpcy5fb25LZXlEb3duLCBmYWxzZSk7XG59XG5cblxuQWNjZXNzaWJpbGl0eU1hbmFnZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gQWNjZXNzaWJpbGl0eU1hbmFnZXI7XG5tb2R1bGUuZXhwb3J0cyA9IEFjY2Vzc2liaWxpdHlNYW5hZ2VyO1xuXG4vKipcbiAqIEFjdGl2YXRpbmcgd2lsbCBjYXVzZSB0aGUgQWNjZXNzaWJpbGl0eSBsYXllciB0byBiZSBzaG93bi4gVGhpcyBpcyBjYWxsZWQgd2hlbiBhIHVzZXIgcHJlc2VzIHRoZSB0YWIga2V5XG4gKiBAcHJpdmF0ZVxuICovXG5BY2Nlc3NpYmlsaXR5TWFuYWdlci5wcm90b3R5cGUuYWN0aXZhdGUgPSBmdW5jdGlvbigpXG57XG5cdGlmKHRoaXMuaXNBY3RpdmUpXG5cdHtcblx0XHRyZXR1cm47XG5cdH1cblxuXHR0aGlzLmlzQWN0aXZlID0gdHJ1ZTtcblxuXHR3aW5kb3cuZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignbW91c2Vtb3ZlJywgdGhpcy5fb25Nb3VzZU1vdmUsIHRydWUpO1xuXHR3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsIHRoaXMuX29uS2V5RG93biwgZmFsc2UpO1xuXG5cdHRoaXMucmVuZGVyZXIub24oJ3Bvc3RyZW5kZXInLCB0aGlzLnVwZGF0ZSwgdGhpcyk7XG5cblx0dGhpcy5yZW5kZXJlci52aWV3LnBhcmVudE5vZGUuYXBwZW5kQ2hpbGQodGhpcy5kaXYpO1x0XG59O1xuXG4vKipcbiAqIERlYWN0aXZhdGluZyB3aWxsIGNhdXNlIHRoZSBBY2Nlc3NpYmlsaXR5IGxheWVyIHRvIGJlIGhpZGRlbi4gVGhpcyBpcyBjYWxsZWQgd2hlbiBhIHVzZXIgbW92ZXMgdGhlIG1vdXNlXG4gKiBAcHJpdmF0ZVxuICovXG5BY2Nlc3NpYmlsaXR5TWFuYWdlci5wcm90b3R5cGUuZGVhY3RpdmF0ZSA9IGZ1bmN0aW9uKClcbntcblx0aWYoIXRoaXMuaXNBY3RpdmUpXG5cdHtcblx0XHRyZXR1cm47XG5cdH1cblxuXHR0aGlzLmlzQWN0aXZlID0gZmFsc2U7XG5cblx0d2luZG93LmRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21vdXNlbW92ZScsIHRoaXMuX29uTW91c2VNb3ZlKTtcblx0d2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLCB0aGlzLl9vbktleURvd24sIGZhbHNlKTtcblxuXHR0aGlzLnJlbmRlcmVyLm9mZigncG9zdHJlbmRlcicsIHRoaXMudXBkYXRlKTtcblxuXHR0aGlzLmRpdi5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHRoaXMuZGl2KTtcblxufTtcblxuLyoqXG4gKiBUaGlzIHJlY3Vyc2l2ZSBmdW5jdGlvbiB3aWxsIHJ1biB0aHJvdWdodCBoZSBzY2VuZSBncmFwaCBhbmQgYWRkIGFueSBuZXcgYWNjZXNzaWJsZSBvYmplY3RzIHRvIHRoZSBET00gbGF5ZXIuXG4gKiBAcGFyYW0gZWxlbWVudCB7UElYSS5Db250YWluZXJ8UElYSS5TcHJpdGV8UElYSS5leHRyYXMuVGlsaW5nU3ByaXRlfSB0aGUgRGlzcGxheU9iamVjdCB0byBjaGVjay5cbiAqIEBwcml2YXRlXG4gKi9cbkFjY2Vzc2liaWxpdHlNYW5hZ2VyLnByb3RvdHlwZS51cGRhdGVBY2Nlc3NpYmxlT2JqZWN0cyA9IGZ1bmN0aW9uKGRpc3BsYXlPYmplY3QpXG57XG5cdGlmKCFkaXNwbGF5T2JqZWN0LnZpc2libGUpXG5cdHtcblx0XHRyZXR1cm47XG5cdH1cblxuXHRpZihkaXNwbGF5T2JqZWN0LmFjY2Vzc2libGUgJiYgZGlzcGxheU9iamVjdC5pbnRlcmFjdGl2ZSlcblx0e1xuXHRcdGlmKCFkaXNwbGF5T2JqZWN0Ll9hY2Nlc3NpYmxlQWN0aXZlKVxuXHRcdHtcblx0XHRcdHRoaXMuYWRkQ2hpbGQoZGlzcGxheU9iamVjdCk7XG5cdFx0fVxuXHQgICBcdFxuXHQgICBcdGRpc3BsYXlPYmplY3QucmVuZGVySWQgPSB0aGlzLnJlbmRlcklkO1xuXHR9XG5cblx0dmFyIGNoaWxkcmVuID0gZGlzcGxheU9iamVjdC5jaGlsZHJlbjtcblxuXHRmb3IgKHZhciBpID0gY2hpbGRyZW4ubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcblx0XHRcblx0XHR0aGlzLnVwZGF0ZUFjY2Vzc2libGVPYmplY3RzKGNoaWxkcmVuW2ldKTtcblx0fVxufTtcblxuXG4vKipcbiAqIEJlZm9yZSBlYWNoIHJlbmRlciB0aGlzIGZ1bmN0aW9uIHdpbGwgZW5zdXJlIHRoYXQgYWxsIGRpdnMgYXJlIG1hcHBlZCBjb3JyZWN0bHkgdG8gdGhlaXIgRGlzcGxheU9iamVjdHNcbiAqIEBwcml2YXRlXG4gKi9cbkFjY2Vzc2liaWxpdHlNYW5hZ2VyLnByb3RvdHlwZS51cGRhdGUgPSBmdW5jdGlvbigpXG57XG5cblx0Ly8gdXBkYXRlIGNoaWxkcmVuLi4uXG5cdHRoaXMudXBkYXRlQWNjZXNzaWJsZU9iamVjdHModGhpcy5yZW5kZXJlci5fbGFzdE9iamVjdFJlbmRlcmVkKTtcblxuXHR2YXIgcmVjdCA9IHRoaXMucmVuZGVyZXIudmlldy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcblx0dmFyIHN4ID0gcmVjdC53aWR0aCAgLyB0aGlzLnJlbmRlcmVyLndpZHRoO1xuXHR2YXIgc3kgPSByZWN0LmhlaWdodCAvIHRoaXMucmVuZGVyZXIuaGVpZ2h0O1xuXG5cdHZhciBkaXYgPSB0aGlzLmRpdjtcblxuXHRkaXYuc3R5bGUubGVmdCA9IHJlY3QubGVmdCArICdweCc7XG5cdGRpdi5zdHlsZS50b3AgPSByZWN0LnRvcCArICdweCc7XG5cdGRpdi5zdHlsZS53aWR0aCA9IHRoaXMucmVuZGVyZXIud2lkdGggKyAncHgnO1xuXHRkaXYuc3R5bGUuaGVpZ2h0ID0gdGhpcy5yZW5kZXJlci5oZWlnaHQgKyAncHgnO1xuXG5cdGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5jaGlsZHJlbi5sZW5ndGg7IGkrKylcblx0e1xuXG5cdFx0dmFyIGNoaWxkID0gdGhpcy5jaGlsZHJlbltpXTtcblxuXHRcdGlmKGNoaWxkLnJlbmRlcklkICE9PSB0aGlzLnJlbmRlcklkKVxuXHRcdHtcblx0XHRcdGNoaWxkLl9hY2Nlc3NpYmxlQWN0aXZlID0gZmFsc2U7XG5cbiAgICAgICAgICAgIGNvcmUudXRpbHMucmVtb3ZlSXRlbXModGhpcy5jaGlsZHJlbiwgaSwgMSk7XG5cdFx0XHR0aGlzLmRpdi5yZW1vdmVDaGlsZCggY2hpbGQuX2FjY2Vzc2libGVEaXYgKTtcblx0XHRcdHRoaXMucG9vbC5wdXNoKGNoaWxkLl9hY2Nlc3NpYmxlRGl2KTtcblx0XHRcdGNoaWxkLl9hY2Nlc3NpYmxlRGl2ID0gbnVsbDtcblxuXHRcdFx0aS0tO1xuXG5cdFx0XHRpZih0aGlzLmNoaWxkcmVuLmxlbmd0aCA9PT0gMClcblx0XHRcdHtcblx0XHRcdFx0dGhpcy5kZWFjdGl2YXRlKCk7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdGVsc2Vcblx0XHR7XG5cdFx0XHQvLyBtYXAgZGl2IHRvIGRpc3BsYXkuLlxuXHRcdFx0ZGl2ID0gY2hpbGQuX2FjY2Vzc2libGVEaXY7XG5cdFx0XHR2YXIgaGl0QXJlYSA9IGNoaWxkLmhpdEFyZWE7XG5cdFx0XHR2YXIgd3QgPSBjaGlsZC53b3JsZFRyYW5zZm9ybTtcblxuXHRcdFx0aWYoY2hpbGQuaGl0QXJlYSlcblx0XHRcdHtcblx0XHRcdFx0ZGl2LnN0eWxlLmxlZnQgPSAoKHd0LnR4ICsgKGhpdEFyZWEueCAqIHd0LmEpKSAqIHN4KSArICdweCc7XG5cdFx0XHRcdGRpdi5zdHlsZS50b3AgPSAgKCh3dC50eSArIChoaXRBcmVhLnkgKiB3dC5kKSkgKiBzeSkgKyAgJ3B4JztcblxuXHRcdFx0XHRkaXYuc3R5bGUud2lkdGggPSAoaGl0QXJlYS53aWR0aCAqIHd0LmEgKiBzeCkgKyAncHgnO1xuXHRcdFx0XHRkaXYuc3R5bGUuaGVpZ2h0ID0gKGhpdEFyZWEuaGVpZ2h0ICogd3QuZCAqIHN5KSArICdweCc7XG5cdFx0XHRcblx0XHRcdH1cblx0XHRcdGVsc2Vcblx0XHRcdHtcblx0XHRcdFx0aGl0QXJlYSA9IGNoaWxkLmdldEJvdW5kcygpO1xuXG5cdFx0XHRcdHRoaXMuY2FwSGl0QXJlYShoaXRBcmVhKTtcblxuXHRcdFx0XHRkaXYuc3R5bGUubGVmdCA9IChoaXRBcmVhLnggKiBzeCkgKyAncHgnO1xuXHRcdFx0XHRkaXYuc3R5bGUudG9wID0gIChoaXRBcmVhLnkgKiBzeSkgKyAgJ3B4JztcblxuXHRcdFx0XHRkaXYuc3R5bGUud2lkdGggPSAoaGl0QXJlYS53aWR0aCAqIHN4KSArICdweCc7XG5cdFx0XHRcdGRpdi5zdHlsZS5oZWlnaHQgPSAoaGl0QXJlYS5oZWlnaHQgKiBzeSkgKyAncHgnO1xuXHRcdFx0fVx0XHRcblx0XHR9XG5cdH1cblxuXHQvLyBpbmNyZW1lbnQgdGhlIHJlbmRlciBpZC4uXG5cdHRoaXMucmVuZGVySWQrKztcbn07XG5cbkFjY2Vzc2liaWxpdHlNYW5hZ2VyLnByb3RvdHlwZS5jYXBIaXRBcmVhID0gZnVuY3Rpb24gKGhpdEFyZWEpXG57XG4gICAgaWYgKGhpdEFyZWEueCA8IDApXG4gICAge1xuICAgICAgICBoaXRBcmVhLndpZHRoICs9IGhpdEFyZWEueDtcbiAgICAgICAgaGl0QXJlYS54ID0gMDtcbiAgICB9XG5cbiAgICBpZiAoaGl0QXJlYS55IDwgMClcbiAgICB7XG4gICAgICAgIGhpdEFyZWEuaGVpZ2h0ICs9IGhpdEFyZWEueTtcbiAgICAgICAgaGl0QXJlYS55ID0gMDtcbiAgICB9XG5cbiAgICBpZiAoIGhpdEFyZWEueCArIGhpdEFyZWEud2lkdGggPiB0aGlzLnJlbmRlcmVyLndpZHRoIClcbiAgICB7XG4gICAgICAgIGhpdEFyZWEud2lkdGggPSB0aGlzLnJlbmRlcmVyLndpZHRoIC0gaGl0QXJlYS54O1xuICAgIH1cblxuICAgIGlmICggaGl0QXJlYS55ICsgaGl0QXJlYS5oZWlnaHQgPiB0aGlzLnJlbmRlcmVyLmhlaWdodCApXG4gICAge1xuICAgICAgICBoaXRBcmVhLmhlaWdodCA9IHRoaXMucmVuZGVyZXIuaGVpZ2h0IC0gaGl0QXJlYS55O1xuICAgIH1cbn07XG5cblxuLyoqXG4gKiBBZGRzIGEgRGlzcGxheU9iamVjdCB0byB0aGUgYWNjZXNzaWJpbGl0eSBtYW5hZ2VyXG4gKiBAcHJpdmF0ZVxuICovXG5BY2Nlc3NpYmlsaXR5TWFuYWdlci5wcm90b3R5cGUuYWRkQ2hpbGQgPSBmdW5jdGlvbihkaXNwbGF5T2JqZWN0KVxue1xuLy9cdHRoaXMuYWN0aXZhdGUoKTtcblx0XG5cdHZhciBkaXYgPSB0aGlzLnBvb2wucG9wKCk7XG5cblx0aWYoIWRpdilcblx0e1xuXHRcdGRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2J1dHRvbicpOyBcblxuXHQgICAgZGl2LnN0eWxlLndpZHRoID0gMTAwICsgJ3B4Jztcblx0ICAgIGRpdi5zdHlsZS5oZWlnaHQgPSAxMDAgKyAncHgnO1xuXHQgICAgZGl2LnN0eWxlLmJhY2tncm91bmRDb2xvciA9IHRoaXMuZGVidWcgPyAncmdiYSgyNTUsMCwwLDAuNSknIDogJ3RyYW5zcGFyZW50Jztcblx0ICAgIGRpdi5zdHlsZS5wb3NpdGlvbiA9ICdhYnNvbHV0ZSc7XG5cdCAgICBkaXYuc3R5bGUuekluZGV4ID0gMjtcblx0ICAgIGRpdi5zdHlsZS5ib3JkZXJTdHlsZSA9ICdub25lJztcblxuXHQgICAgXG5cdCAgICBkaXYuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCB0aGlzLl9vbkNsaWNrLmJpbmQodGhpcykpO1xuXHQgICAgZGl2LmFkZEV2ZW50TGlzdGVuZXIoJ2ZvY3VzJywgdGhpcy5fb25Gb2N1cy5iaW5kKHRoaXMpKTtcblx0ICAgIGRpdi5hZGRFdmVudExpc3RlbmVyKCdmb2N1c291dCcsIHRoaXMuX29uRm9jdXNPdXQuYmluZCh0aGlzKSk7XG5cdH1cblx0ICAgXHRcblxuXG5cblx0ZGl2LnRpdGxlID0gZGlzcGxheU9iamVjdC5hY2Nlc3NpYmxlVGl0bGUgfHwgJ2Rpc3BsYXlPYmplY3QgJyArIHRoaXMudGFiSW5kZXg7XG5cblx0Ly9cblx0XG5cdGRpc3BsYXlPYmplY3QuX2FjY2Vzc2libGVBY3RpdmUgPSB0cnVlO1xuXHRkaXNwbGF5T2JqZWN0Ll9hY2Nlc3NpYmxlRGl2ID0gZGl2O1xuXHRkaXYuZGlzcGxheU9iamVjdCA9IGRpc3BsYXlPYmplY3Q7XG5cblxuXHR0aGlzLmNoaWxkcmVuLnB1c2goZGlzcGxheU9iamVjdCk7XG5cdHRoaXMuZGl2LmFwcGVuZENoaWxkKCBkaXNwbGF5T2JqZWN0Ll9hY2Nlc3NpYmxlRGl2ICk7XG5cdGRpc3BsYXlPYmplY3QuX2FjY2Vzc2libGVEaXYudGFiSW5kZXggPSBkaXNwbGF5T2JqZWN0LnRhYkluZGV4O1xufTtcblxuXG4vKipcbiAqIE1hcHMgdGhlIGRpdiBidXR0b24gcHJlc3MgdG8gcGl4aSdzIEludGVyYWN0aW9uTWFuYWdlciAoY2xpY2spXG4gKiBAcHJpdmF0ZVxuICovXG5BY2Nlc3NpYmlsaXR5TWFuYWdlci5wcm90b3R5cGUuX29uQ2xpY2sgPSBmdW5jdGlvbihlKVxue1xuXHR2YXIgaW50ZXJhY3Rpb25NYW5hZ2VyID0gdGhpcy5yZW5kZXJlci5wbHVnaW5zLmludGVyYWN0aW9uO1xuXHRpbnRlcmFjdGlvbk1hbmFnZXIuZGlzcGF0Y2hFdmVudChlLnRhcmdldC5kaXNwbGF5T2JqZWN0LCAnY2xpY2snLCBpbnRlcmFjdGlvbk1hbmFnZXIuZXZlbnREYXRhKTtcbn07XG5cbi8qKlxuICogTWFwcyB0aGUgZGl2IGZvY3VzIGV2ZW50cyB0byBwaXhpcyBJbnRlcmFjdGlvbk1hbmFnZXIgKG1vdXNlb3ZlcilcbiAqIEBwcml2YXRlXG4gKi9cbkFjY2Vzc2liaWxpdHlNYW5hZ2VyLnByb3RvdHlwZS5fb25Gb2N1cyA9IGZ1bmN0aW9uKGUpXG57XG5cdHZhciBpbnRlcmFjdGlvbk1hbmFnZXIgPSB0aGlzLnJlbmRlcmVyLnBsdWdpbnMuaW50ZXJhY3Rpb247XG5cdGludGVyYWN0aW9uTWFuYWdlci5kaXNwYXRjaEV2ZW50KGUudGFyZ2V0LmRpc3BsYXlPYmplY3QsICdtb3VzZW92ZXInLCBpbnRlcmFjdGlvbk1hbmFnZXIuZXZlbnREYXRhKTtcbn07XG5cbi8qKlxuICogTWFwcyB0aGUgZGl2IGZvY3VzIGV2ZW50cyB0byBwaXhpcyBJbnRlcmFjdGlvbk1hbmFnZXIgKG1vdXNlb3V0KVxuICogQHByaXZhdGVcbiAqL1xuQWNjZXNzaWJpbGl0eU1hbmFnZXIucHJvdG90eXBlLl9vbkZvY3VzT3V0ID0gZnVuY3Rpb24oZSlcbntcblx0dmFyIGludGVyYWN0aW9uTWFuYWdlciA9IHRoaXMucmVuZGVyZXIucGx1Z2lucy5pbnRlcmFjdGlvbjtcblx0aW50ZXJhY3Rpb25NYW5hZ2VyLmRpc3BhdGNoRXZlbnQoZS50YXJnZXQuZGlzcGxheU9iamVjdCwgJ21vdXNlb3V0JywgaW50ZXJhY3Rpb25NYW5hZ2VyLmV2ZW50RGF0YSk7XG59O1xuXG4vKipcbiAqIElzIGNhbGxlZCB3aGVuIGEga2V5IGlzIHByZXNzZWRcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5BY2Nlc3NpYmlsaXR5TWFuYWdlci5wcm90b3R5cGUuX29uS2V5RG93biA9IGZ1bmN0aW9uKGUpXG57XG5cdGlmKGUua2V5Q29kZSAhPT0gOSlcblx0e1xuXHRcdHJldHVybjtcblx0fVxuXG5cdHRoaXMuYWN0aXZhdGUoKTtcbn07XG5cbi8qKlxuICogSXMgY2FsbGVkIHdoZW4gdGhlIG1vdXNlIG1vdmVzIGFjcm9zcyB0aGUgcmVuZGVyZXIgZWxlbWVudFxuICpcbiAqIEBwcml2YXRlXG4gKi9cbkFjY2Vzc2liaWxpdHlNYW5hZ2VyLnByb3RvdHlwZS5fb25Nb3VzZU1vdmUgPSBmdW5jdGlvbigpXG57XG5cdHRoaXMuZGVhY3RpdmF0ZSgpO1xufTtcblxuXG4vKipcbiAqIERlc3Ryb3lzIHRoZSBhY2Nlc3NpYmlsaXR5IG1hbmFnZXJcbiAqXG4gKi9cbkFjY2Vzc2liaWxpdHlNYW5hZ2VyLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKCkgXG57XG5cdHRoaXMuZGl2ID0gbnVsbDtcblxuXHRmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuY2hpbGRyZW4ubGVuZ3RoOyBpKyspXG5cdHtcblx0XHR0aGlzLmNoaWxkcmVuW2ldLmRpdiA9IG51bGw7XG5cdH1cblxuXHRcblx0d2luZG93LmRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21vdXNlbW92ZScsIHRoaXMuX29uTW91c2VNb3ZlKTtcblx0d2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLCB0aGlzLl9vbktleURvd24pO1xuXHRcdFxuXHR0aGlzLnBvb2wgPSBudWxsO1xuXHR0aGlzLmNoaWxkcmVuID0gbnVsbDtcblx0dGhpcy5yZW5kZXJlciA9IG51bGw7XG5cbn07XG5cbmNvcmUuV2ViR0xSZW5kZXJlci5yZWdpc3RlclBsdWdpbignYWNjZXNzaWJpbGl0eScsIEFjY2Vzc2liaWxpdHlNYW5hZ2VyKTtcbmNvcmUuQ2FudmFzUmVuZGVyZXIucmVnaXN0ZXJQbHVnaW4oJ2FjY2Vzc2liaWxpdHknLCBBY2Nlc3NpYmlsaXR5TWFuYWdlcik7XG5cbiIsIi8qKlxuICogRGVmYXVsdCBwcm9wZXJ0eSB2YWx1ZXMgb2YgYWNjZXNzaWJsZSBvYmplY3RzXG4gKiB1c2VkIGJ5IHtAbGluayBQSVhJLmFjY2Vzc2liaWxpdHkuQWNjZXNzaWJpbGl0eU1hbmFnZXJ9LlxuICpcbiAqIEBtaXhpblxuICogQG1lbWJlcm9mIFBJWElcbiAqIEBleGFtcGxlXG4gKiAgICAgIGZ1bmN0aW9uIE15T2JqZWN0KCkge31cbiAqXG4gKiAgICAgIE9iamVjdC5hc3NpZ24oXG4gKiAgICAgICAgICBNeU9iamVjdC5wcm90b3R5cGUsXG4gKiAgICAgICAgICBQSVhJLmFjY2Vzc2liaWxpdHkuYWNjZXNzaWJsZVRhcmdldFxuICogICAgICApO1xuICovXG52YXIgYWNjZXNzaWJsZVRhcmdldCA9IHtcbiAgICBcbiAgICAvKipcbiAgICAgKiBAdG9kbyBOZWVkcyBkb2NzLlxuICAgICAqL1xuICAgIGFjY2Vzc2libGU6ZmFsc2UsXG5cbiAgICAvKipcbiAgICAgKiBAdG9kbyBOZWVkcyBkb2NzLlxuICAgICAqL1xuICAgIGFjY2Vzc2libGVUaXRsZTpudWxsLFxuXG4gICAgLyoqXG4gICAgICogQHRvZG8gTmVlZHMgZG9jcy5cbiAgICAgKi9cbiAgICB0YWJJbmRleDowLFxuXG4gICAgLyoqXG4gICAgICogQHRvZG8gTmVlZHMgZG9jcy5cbiAgICAgKi9cbiAgICBfYWNjZXNzaWJsZUFjdGl2ZTpmYWxzZSxcblxuICAgIC8qKlxuICAgICAqIEB0b2RvIE5lZWRzIGRvY3MuXG4gICAgICovXG4gICAgX2FjY2Vzc2libGVEaXY6ZmFsc2VcblxufTtcblxubW9kdWxlLmV4cG9ydHMgPSBhY2Nlc3NpYmxlVGFyZ2V0O1xuIiwiLyoqXG4gKiBAZmlsZSAgICAgICAgTWFpbiBleHBvcnQgb2YgdGhlIFBJWEkgYWNjZXNzaWJpbGl0eSBsaWJyYXJ5XG4gKiBAYXV0aG9yICAgICAgTWF0IEdyb3ZlcyA8bWF0QGdvb2Rib3lkaWdpdGFsLmNvbT5cbiAqIEBjb3B5cmlnaHQgICAyMDEzLTIwMTUgR29vZEJveURpZ2l0YWxcbiAqIEBsaWNlbnNlICAgICB7QGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL3BpeGlqcy9waXhpLmpzL2Jsb2IvbWFzdGVyL0xJQ0VOU0V8TUlUIExpY2Vuc2V9XG4gKi9cblxuLyoqXG4gKiBAbmFtZXNwYWNlIFBJWEkuaW50ZXJhY3Rpb25cbiAqL1xubW9kdWxlLmV4cG9ydHMgPSB7XG4gICAgYWNjZXNzaWJsZVRhcmdldDogICAgIHJlcXVpcmUoJy4vYWNjZXNzaWJsZVRhcmdldCcpLFxuICAgIEFjY2Vzc2liaWxpdHlNYW5hZ2VyOiByZXF1aXJlKCcuL0FjY2Vzc2liaWxpdHlNYW5hZ2VyJylcbn07XG4iLCIvKipcbiAqIENvbnN0YW50IHZhbHVlcyB1c2VkIGluIHBpeGlcbiAqXG4gKiBAbGVuZHMgUElYSVxuICovXG52YXIgQ09OU1QgPSB7XG4gICAgLyoqXG4gICAgICogU3RyaW5nIG9mIHRoZSBjdXJyZW50IFBJWEkgdmVyc2lvblxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBjb25zdGFudFxuICAgICAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBWRVJTSU9OXG4gICAgICovXG4gICAgVkVSU0lPTjogcmVxdWlyZSgnLi4vLi4vcGFja2FnZS5qc29uJykudmVyc2lvbixcblxuICAgIC8qKlxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBQSV8yIC0gVHdvIFBpXG4gICAgICogQGNvbnN0YW50XG4gICAgICogQHN0YXRpY1xuICAgICAqL1xuICAgIFBJXzI6IE1hdGguUEkgKiAyLFxuXG4gICAgLyoqXG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IFJBRF9UT19ERUcgLSBDb25zdGFudCBjb252ZXJzaW9uIGZhY3RvciBmb3IgY29udmVydGluZyByYWRpYW5zIHRvIGRlZ3JlZXNcbiAgICAgKiBAY29uc3RhbnRcbiAgICAgKiBAc3RhdGljXG4gICAgICovXG4gICAgUkFEX1RPX0RFRzogMTgwIC8gTWF0aC5QSSxcblxuICAgIC8qKlxuICAgICAqIEBwcm9wZXJ0eSB7TnVtYmVyfSBERUdfVE9fUkFEIC0gQ29uc3RhbnQgY29udmVyc2lvbiBmYWN0b3IgZm9yIGNvbnZlcnRpbmcgZGVncmVlcyB0byByYWRpYW5zXG4gICAgICogQGNvbnN0YW50XG4gICAgICogQHN0YXRpY1xuICAgICAqL1xuICAgIERFR19UT19SQUQ6IE1hdGguUEkgLyAxODAsXG5cbiAgICAvKipcbiAgICAgKiBUYXJnZXQgZnJhbWVzIHBlciBtaWxsaXNlY29uZC5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAY29uc3RhbnRcbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gVEFSR0VUX0ZQTVM9MC4wNlxuICAgICAqL1xuICAgIFRBUkdFVF9GUE1TOiAwLjA2LFxuXG4gICAgLyoqXG4gICAgICogQ29uc3RhbnQgdG8gaWRlbnRpZnkgdGhlIFJlbmRlcmVyIFR5cGUuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQGNvbnN0YW50XG4gICAgICogQHByb3BlcnR5IHtvYmplY3R9IFJFTkRFUkVSX1RZUEVcbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gUkVOREVSRVJfVFlQRS5VTktOT1dOXG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IFJFTkRFUkVSX1RZUEUuV0VCR0xcbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gUkVOREVSRVJfVFlQRS5DQU5WQVNcbiAgICAgKi9cbiAgICBSRU5ERVJFUl9UWVBFOiB7XG4gICAgICAgIFVOS05PV046ICAgIDAsXG4gICAgICAgIFdFQkdMOiAgICAgIDEsXG4gICAgICAgIENBTlZBUzogICAgIDJcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVmFyaW91cyBibGVuZCBtb2RlcyBzdXBwb3J0ZWQgYnkgUElYSS4gSU1QT1JUQU5UIC0gVGhlIFdlYkdMIHJlbmRlcmVyIG9ubHkgc3VwcG9ydHNcbiAgICAgKiB0aGUgTk9STUFMLCBBREQsIE1VTFRJUExZIGFuZCBTQ1JFRU4gYmxlbmQgbW9kZXMuIEFueXRoaW5nIGVsc2Ugd2lsbCBzaWxlbnRseSBhY3QgbGlrZVxuICAgICAqIE5PUk1BTC5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAY29uc3RhbnRcbiAgICAgKiBAcHJvcGVydHkge29iamVjdH0gQkxFTkRfTU9ERVNcbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gQkxFTkRfTU9ERVMuTk9STUFMXG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IEJMRU5EX01PREVTLkFERFxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBCTEVORF9NT0RFUy5NVUxUSVBMWVxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBCTEVORF9NT0RFUy5TQ1JFRU5cbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gQkxFTkRfTU9ERVMuT1ZFUkxBWVxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBCTEVORF9NT0RFUy5EQVJLRU5cbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gQkxFTkRfTU9ERVMuTElHSFRFTlxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBCTEVORF9NT0RFUy5DT0xPUl9ET0RHRVxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBCTEVORF9NT0RFUy5DT0xPUl9CVVJOXG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IEJMRU5EX01PREVTLkhBUkRfTElHSFRcbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gQkxFTkRfTU9ERVMuU09GVF9MSUdIVFxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBCTEVORF9NT0RFUy5ESUZGRVJFTkNFXG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IEJMRU5EX01PREVTLkVYQ0xVU0lPTlxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBCTEVORF9NT0RFUy5IVUVcbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gQkxFTkRfTU9ERVMuU0FUVVJBVElPTlxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBCTEVORF9NT0RFUy5DT0xPUlxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBCTEVORF9NT0RFUy5MVU1JTk9TSVRZXG4gICAgICovXG4gICAgQkxFTkRfTU9ERVM6IHtcbiAgICAgICAgTk9STUFMOiAgICAgICAgIDAsXG4gICAgICAgIEFERDogICAgICAgICAgICAxLFxuICAgICAgICBNVUxUSVBMWTogICAgICAgMixcbiAgICAgICAgU0NSRUVOOiAgICAgICAgIDMsXG4gICAgICAgIE9WRVJMQVk6ICAgICAgICA0LFxuICAgICAgICBEQVJLRU46ICAgICAgICAgNSxcbiAgICAgICAgTElHSFRFTjogICAgICAgIDYsXG4gICAgICAgIENPTE9SX0RPREdFOiAgICA3LFxuICAgICAgICBDT0xPUl9CVVJOOiAgICAgOCxcbiAgICAgICAgSEFSRF9MSUdIVDogICAgIDksXG4gICAgICAgIFNPRlRfTElHSFQ6ICAgICAxMCxcbiAgICAgICAgRElGRkVSRU5DRTogICAgIDExLFxuICAgICAgICBFWENMVVNJT046ICAgICAgMTIsXG4gICAgICAgIEhVRTogICAgICAgICAgICAxMyxcbiAgICAgICAgU0FUVVJBVElPTjogICAgIDE0LFxuICAgICAgICBDT0xPUjogICAgICAgICAgMTUsXG4gICAgICAgIExVTUlOT1NJVFk6ICAgICAxNlxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBWYXJpb3VzIHdlYmdsIGRyYXcgbW9kZXMuIFRoZXNlIGNhbiBiZSB1c2VkIHRvIHNwZWNpZnkgd2hpY2ggR0wgZHJhd01vZGUgdG8gdXNlXG4gICAgICogdW5kZXIgY2VydGFpbiBzaXR1YXRpb25zIGFuZCByZW5kZXJlcnMuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQGNvbnN0YW50XG4gICAgICogQHByb3BlcnR5IHtvYmplY3R9IERSQVdfTU9ERVNcbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gRFJBV19NT0RFUy5QT0lOVFNcbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gRFJBV19NT0RFUy5MSU5FU1xuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBEUkFXX01PREVTLkxJTkVfTE9PUFxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBEUkFXX01PREVTLkxJTkVfU1RSSVBcbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gRFJBV19NT0RFUy5UUklBTkdMRVNcbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gRFJBV19NT0RFUy5UUklBTkdMRV9TVFJJUFxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBEUkFXX01PREVTLlRSSUFOR0xFX0ZBTlxuICAgICAqL1xuICAgIERSQVdfTU9ERVM6IHtcbiAgICAgICAgUE9JTlRTOiAgICAgICAgIDAsXG4gICAgICAgIExJTkVTOiAgICAgICAgICAxLFxuICAgICAgICBMSU5FX0xPT1A6ICAgICAgMixcbiAgICAgICAgTElORV9TVFJJUDogICAgIDMsXG4gICAgICAgIFRSSUFOR0xFUzogICAgICA0LFxuICAgICAgICBUUklBTkdMRV9TVFJJUDogNSxcbiAgICAgICAgVFJJQU5HTEVfRkFOOiAgIDZcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVGhlIHNjYWxlIG1vZGVzIHRoYXQgYXJlIHN1cHBvcnRlZCBieSBwaXhpLlxuICAgICAqXG4gICAgICogVGhlIERFRkFVTFQgc2NhbGUgbW9kZSBhZmZlY3RzIHRoZSBkZWZhdWx0IHNjYWxpbmcgbW9kZSBvZiBmdXR1cmUgb3BlcmF0aW9ucy5cbiAgICAgKiBJdCBjYW4gYmUgcmUtYXNzaWduZWQgdG8gZWl0aGVyIExJTkVBUiBvciBORUFSRVNULCBkZXBlbmRpbmcgdXBvbiBzdWl0YWJpbGl0eS5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAY29uc3RhbnRcbiAgICAgKiBAcHJvcGVydHkge29iamVjdH0gU0NBTEVfTU9ERVNcbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gU0NBTEVfTU9ERVMuREVGQVVMVD1MSU5FQVJcbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gU0NBTEVfTU9ERVMuTElORUFSIFNtb290aCBzY2FsaW5nXG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IFNDQUxFX01PREVTLk5FQVJFU1QgUGl4ZWxhdGluZyBzY2FsaW5nXG4gICAgICovXG4gICAgU0NBTEVfTU9ERVM6IHtcbiAgICAgICAgREVGQVVMVDogICAgMCxcbiAgICAgICAgTElORUFSOiAgICAgMCxcbiAgICAgICAgTkVBUkVTVDogICAgMVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBUaGUgcHJlZml4IHRoYXQgZGVub3RlcyBhIFVSTCBpcyBmb3IgYSByZXRpbmEgYXNzZXRcbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAY29uc3RhbnRcbiAgICAgKiBAcHJvcGVydHkge3N0cmluZ30gUkVUSU5BX1BSRUZJWFxuICAgICAqL1xuICAgIC8vZXhhbXBsZTogJ0AyeCcsXG4gICAgUkVUSU5BX1BSRUZJWDogL0AoLispeC8sXG5cbiAgICBSRVNPTFVUSU9OOjEsXG5cbiAgICBGSUxURVJfUkVTT0xVVElPTjoxLFxuXG4gICAgLyoqXG4gICAgICogVGhlIGRlZmF1bHQgcmVuZGVyIG9wdGlvbnMgaWYgbm9uZSBhcmUgc3VwcGxpZWQgdG8ge0BsaW5rIFBJWEkuV2ViR0xSZW5kZXJlcn1cbiAgICAgKiBvciB7QGxpbmsgUElYSS5DYW52YXNSZW5kZXJlcn0uXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQGNvbnN0YW50XG4gICAgICogQHByb3BlcnR5IHtvYmplY3R9IERFRkFVTFRfUkVOREVSX09QVElPTlNcbiAgICAgKiBAcHJvcGVydHkge0hUTUxDYW52YXNFbGVtZW50fSBERUZBVUxUX1JFTkRFUl9PUFRJT05TLnZpZXc9bnVsbFxuICAgICAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gREVGQVVMVF9SRU5ERVJfT1BUSU9OUy50cmFuc3BhcmVudD1mYWxzZVxuICAgICAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gREVGQVVMVF9SRU5ERVJfT1BUSU9OUy5hbnRpYWxpYXM9ZmFsc2VcbiAgICAgKiBAcHJvcGVydHkge2Jvb2xlYW59IERFRkFVTFRfUkVOREVSX09QVElPTlMuZm9yY2VGWEFBPWZhbHNlXG4gICAgICogQHByb3BlcnR5IHtib29sZWFufSBERUZBVUxUX1JFTkRFUl9PUFRJT05TLnByZXNlcnZlRHJhd2luZ0J1ZmZlcj1mYWxzZVxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBERUZBVUxUX1JFTkRFUl9PUFRJT05TLnJlc29sdXRpb249MVxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBERUZBVUxUX1JFTkRFUl9PUFRJT05TLmJhY2tncm91bmRDb2xvcj0weDAwMDAwMFxuICAgICAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gREVGQVVMVF9SRU5ERVJfT1BUSU9OUy5jbGVhckJlZm9yZVJlbmRlcj10cnVlXG4gICAgICogQHByb3BlcnR5IHtib29sZWFufSBERUZBVUxUX1JFTkRFUl9PUFRJT05TLmF1dG9SZXNpemU9ZmFsc2VcbiAgICAgKi9cbiAgICBERUZBVUxUX1JFTkRFUl9PUFRJT05TOiB7XG4gICAgICAgIHZpZXc6IG51bGwsXG4gICAgICAgIHJlc29sdXRpb246IDEsXG4gICAgICAgIGFudGlhbGlhczogZmFsc2UsXG4gICAgICAgIGZvcmNlRlhBQTogZmFsc2UsXG4gICAgICAgIGF1dG9SZXNpemU6IGZhbHNlLFxuICAgICAgICB0cmFuc3BhcmVudDogZmFsc2UsXG4gICAgICAgIGJhY2tncm91bmRDb2xvcjogMHgwMDAwMDAsXG4gICAgICAgIGNsZWFyQmVmb3JlUmVuZGVyOiB0cnVlLFxuICAgICAgICBwcmVzZXJ2ZURyYXdpbmdCdWZmZXI6IGZhbHNlLFxuICAgICAgICByb3VuZFBpeGVsczogZmFsc2VcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQ29uc3RhbnRzIHRoYXQgaWRlbnRpZnkgc2hhcGVzLCBtYWlubHkgdG8gcHJldmVudCBgaW5zdGFuY2VvZmAgY2FsbHMuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQGNvbnN0YW50XG4gICAgICogQHByb3BlcnR5IHtvYmplY3R9IFNIQVBFU1xuICAgICAqIEBwcm9wZXJ0eSB7b2JqZWN0fSBTSEFQRVMuUE9MWT0wXG4gICAgICogQHByb3BlcnR5IHtvYmplY3R9IFNIQVBFUy5SRUNUPTFcbiAgICAgKiBAcHJvcGVydHkge29iamVjdH0gU0hBUEVTLkNJUkM9MlxuICAgICAqIEBwcm9wZXJ0eSB7b2JqZWN0fSBTSEFQRVMuRUxJUD0zXG4gICAgICogQHByb3BlcnR5IHtvYmplY3R9IFNIQVBFUy5SUkVDPTRcbiAgICAgKi9cbiAgICBTSEFQRVM6IHtcbiAgICAgICAgUE9MWTogMCxcbiAgICAgICAgUkVDVDogMSxcbiAgICAgICAgQ0lSQzogMixcbiAgICAgICAgRUxJUDogMyxcbiAgICAgICAgUlJFQzogNFxuICAgIH0sXG5cbiAgICAvLyBUT0RPOiBtYXliZSBjaGFuZ2UgdG8gU1BSSVRFLkJBVENIX1NJWkU6IDIwMDBcbiAgICAvLyBUT0RPOiBtYXliZSBhZGQgUEFSVElDTEUuQkFUQ0hfU0laRTogMTUwMDBcbiAgICBTUFJJVEVfQkFUQ0hfU0laRTogMjAwMCAvL25pY2UgYmFsYW5jZSBiZXR3ZWVuIG1vYmlsZSBhbmQgZGVza3RvcCBtYWNoaW5lc1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBDT05TVDtcbiIsInZhciBtYXRoID0gcmVxdWlyZSgnLi4vbWF0aCcpLFxuICAgIHV0aWxzID0gcmVxdWlyZSgnLi4vdXRpbHMnKSxcbiAgICBEaXNwbGF5T2JqZWN0ID0gcmVxdWlyZSgnLi9EaXNwbGF5T2JqZWN0JyksXG4gICAgUmVuZGVyVGV4dHVyZSA9IHJlcXVpcmUoJy4uL3RleHR1cmVzL1JlbmRlclRleHR1cmUnKSxcbiAgICBfdGVtcE1hdHJpeCA9IG5ldyBtYXRoLk1hdHJpeCgpO1xuXG4vKipcbiAqIEEgQ29udGFpbmVyIHJlcHJlc2VudHMgYSBjb2xsZWN0aW9uIG9mIGRpc3BsYXkgb2JqZWN0cy5cbiAqIEl0IGlzIHRoZSBiYXNlIGNsYXNzIG9mIGFsbCBkaXNwbGF5IG9iamVjdHMgdGhhdCBhY3QgYXMgYSBjb250YWluZXIgZm9yIG90aGVyIG9iamVjdHMuXG4gKlxuICpgYGBqc1xuICogdmFyIGNvbnRhaW5lciA9IG5ldyBQSVhJLkNvbnRhaW5lcigpO1xuICogY29udGFpbmVyLmFkZENoaWxkKHNwcml0ZSk7XG4gKiBgYGBcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5EaXNwbGF5T2JqZWN0XG4gKiBAbWVtYmVyb2YgUElYSVxuICovXG5mdW5jdGlvbiBDb250YWluZXIoKVxue1xuICAgIERpc3BsYXlPYmplY3QuY2FsbCh0aGlzKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBhcnJheSBvZiBjaGlsZHJlbiBvZiB0aGlzIGNvbnRhaW5lci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuRGlzcGxheU9iamVjdFtdfVxuICAgICAqIEByZWFkb25seVxuICAgICAqL1xuICAgIHRoaXMuY2hpbGRyZW4gPSBbXTtcbn1cblxuLy8gY29uc3RydWN0b3JcbkNvbnRhaW5lci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKERpc3BsYXlPYmplY3QucHJvdG90eXBlKTtcbkNvbnRhaW5lci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBDb250YWluZXI7XG5tb2R1bGUuZXhwb3J0cyA9IENvbnRhaW5lcjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoQ29udGFpbmVyLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFRoZSB3aWR0aCBvZiB0aGUgQ29udGFpbmVyLCBzZXR0aW5nIHRoaXMgd2lsbCBhY3R1YWxseSBtb2RpZnkgdGhlIHNjYWxlIHRvIGFjaGlldmUgdGhlIHZhbHVlIHNldFxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLkNvbnRhaW5lciNcbiAgICAgKi9cbiAgICB3aWR0aDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnNjYWxlLnggKiB0aGlzLmdldExvY2FsQm91bmRzKCkud2lkdGg7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG5cbiAgICAgICAgICAgIHZhciB3aWR0aCA9IHRoaXMuZ2V0TG9jYWxCb3VuZHMoKS53aWR0aDtcblxuICAgICAgICAgICAgaWYgKHdpZHRoICE9PSAwKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHRoaXMuc2NhbGUueCA9IHZhbHVlIC8gd2lkdGg7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdGhpcy5zY2FsZS54ID0gMTtcbiAgICAgICAgICAgIH1cblxuXG4gICAgICAgICAgICB0aGlzLl93aWR0aCA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFRoZSBoZWlnaHQgb2YgdGhlIENvbnRhaW5lciwgc2V0dGluZyB0aGlzIHdpbGwgYWN0dWFsbHkgbW9kaWZ5IHRoZSBzY2FsZSB0byBhY2hpZXZlIHRoZSB2YWx1ZSBzZXRcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5Db250YWluZXIjXG4gICAgICovXG4gICAgaGVpZ2h0OiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuICB0aGlzLnNjYWxlLnkgKiB0aGlzLmdldExvY2FsQm91bmRzKCkuaGVpZ2h0O1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuXG4gICAgICAgICAgICB2YXIgaGVpZ2h0ID0gdGhpcy5nZXRMb2NhbEJvdW5kcygpLmhlaWdodDtcblxuICAgICAgICAgICAgaWYgKGhlaWdodCAhPT0gMClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNjYWxlLnkgPSB2YWx1ZSAvIGhlaWdodCA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdGhpcy5zY2FsZS55ID0gMTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5faGVpZ2h0ID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG59KTtcblxuLyoqXG4gKiBPdmVycmlkYWJsZSBtZXRob2QgdGhhdCBjYW4gYmUgdXNlZCBieSBDb250YWluZXIgc3ViY2xhc3NlcyB3aGVuZXZlciB0aGUgY2hpbGRyZW4gYXJyYXkgaXMgbW9kaWZpZWRcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5Db250YWluZXIucHJvdG90eXBlLm9uQ2hpbGRyZW5DaGFuZ2UgPSBmdW5jdGlvbiAoKSB7fTtcblxuLyoqXG4gKiBBZGRzIGEgY2hpbGQgdG8gdGhlIGNvbnRhaW5lci5cbiAqIFxuICogWW91IGNhbiBhbHNvIGFkZCBtdWx0cGxlIGl0ZW1zIGxpa2Ugc286IG15Q29udGFpbmVyLmFkZENoaWxkKHRoaW5rT25lLCB0aGluZ1R3bywgdGhpbmdUaHJlZSlcbiAqIEBwYXJhbSBjaGlsZCB7UElYSS5EaXNwbGF5T2JqZWN0fSBUaGUgRGlzcGxheU9iamVjdCB0byBhZGQgdG8gdGhlIGNvbnRhaW5lclxuICogQHJldHVybiB7UElYSS5EaXNwbGF5T2JqZWN0fSBUaGUgY2hpbGQgdGhhdCB3YXMgYWRkZWQuXG4gKi9cbkNvbnRhaW5lci5wcm90b3R5cGUuYWRkQ2hpbGQgPSBmdW5jdGlvbiAoY2hpbGQpXG57IFxuICAgIHZhciBhcmd1bWVudHNMZW5ndGggPSBhcmd1bWVudHMubGVuZ3RoO1xuXG4gICAgLy8gaWYgdGhlcmUgaXMgb25seSBvbmUgYXJndW1lbnQgd2UgY2FuIGJ5cGFzcyBsb29waW5nIHRocm91Z2ggdGhlIHRoZW1cbiAgICBpZihhcmd1bWVudHNMZW5ndGggPiAxKVxuICAgIHtcbiAgICAgICAgLy8gbG9vcCB0aHJvdWdoIHRoZSBhcmd1bWVudHMgcHJvcGVydHkgYW5kIGFkZCBhbGwgY2hpbGRyZW5cbiAgICAgICAgLy8gdXNlIGl0IHRoZSByaWdodCB3YXkgKC5sZW5ndGggYW5kIFtpXSkgc28gdGhhdCB0aGlzIGZ1bmN0aW9uIGNhbiBzdGlsbCBiZSBvcHRpbWlzZWQgYnkgSlMgcnVudGltZXNcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcmd1bWVudHNMZW5ndGg7IGkrKylcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5hZGRDaGlsZCggYXJndW1lbnRzW2ldICk7XG4gICAgICAgIH1cbiAgICB9ICAgICBcbiAgICBlbHNlXG4gICAge1xuICAgICAgICAvLyBpZiB0aGUgY2hpbGQgaGFzIGEgcGFyZW50IHRoZW4gbGV0cyByZW1vdmUgaXQgYXMgUGl4aSBvYmplY3RzIGNhbiBvbmx5IGV4aXN0IGluIG9uZSBwbGFjZVxuICAgICAgICBpZiAoY2hpbGQucGFyZW50KVxuICAgICAgICB7XG4gICAgICAgICAgICBjaGlsZC5wYXJlbnQucmVtb3ZlQ2hpbGQoY2hpbGQpO1xuICAgICAgICB9XG5cbiAgICAgICAgY2hpbGQucGFyZW50ID0gdGhpcztcbiAgICAgICAgXG4gICAgICAgIHRoaXMuY2hpbGRyZW4ucHVzaChjaGlsZCk7XG5cbiAgICAgICAgLy8gVE9ETyAtIGxldHMgZWl0aGVyIGRvIGFsbCBjYWxsYmFja3Mgb3IgYWxsIGV2ZW50cy4uIG5vdCBib3RoIVxuICAgICAgICB0aGlzLm9uQ2hpbGRyZW5DaGFuZ2UodGhpcy5jaGlsZHJlbi5sZW5ndGgtMSk7XG4gICAgICAgIGNoaWxkLmVtaXQoJ2FkZGVkJywgdGhpcyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGNoaWxkO1xufTtcblxuLyoqXG4gKiBBZGRzIGEgY2hpbGQgdG8gdGhlIGNvbnRhaW5lciBhdCBhIHNwZWNpZmllZCBpbmRleC4gSWYgdGhlIGluZGV4IGlzIG91dCBvZiBib3VuZHMgYW4gZXJyb3Igd2lsbCBiZSB0aHJvd25cbiAqXG4gKiBAcGFyYW0gY2hpbGQge1BJWEkuRGlzcGxheU9iamVjdH0gVGhlIGNoaWxkIHRvIGFkZFxuICogQHBhcmFtIGluZGV4IHtudW1iZXJ9IFRoZSBpbmRleCB0byBwbGFjZSB0aGUgY2hpbGQgaW5cbiAqIEByZXR1cm4ge1BJWEkuRGlzcGxheU9iamVjdH0gVGhlIGNoaWxkIHRoYXQgd2FzIGFkZGVkLlxuICovXG5Db250YWluZXIucHJvdG90eXBlLmFkZENoaWxkQXQgPSBmdW5jdGlvbiAoY2hpbGQsIGluZGV4KVxue1xuICAgIGlmIChpbmRleCA+PSAwICYmIGluZGV4IDw9IHRoaXMuY2hpbGRyZW4ubGVuZ3RoKVxuICAgIHtcbiAgICAgICAgaWYgKGNoaWxkLnBhcmVudClcbiAgICAgICAge1xuICAgICAgICAgICAgY2hpbGQucGFyZW50LnJlbW92ZUNoaWxkKGNoaWxkKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNoaWxkLnBhcmVudCA9IHRoaXM7XG5cbiAgICAgICAgdGhpcy5jaGlsZHJlbi5zcGxpY2UoaW5kZXgsIDAsIGNoaWxkKTtcblxuICAgICAgICAvLyBUT0RPIC0gbGV0cyBlaXRoZXIgZG8gYWxsIGNhbGxiYWNrcyBvciBhbGwgZXZlbnRzLi4gbm90IGJvdGghXG4gICAgICAgIHRoaXMub25DaGlsZHJlbkNoYW5nZShpbmRleCk7XG4gICAgICAgIGNoaWxkLmVtaXQoJ2FkZGVkJywgdGhpcyk7XG5cbiAgICAgICAgcmV0dXJuIGNoaWxkO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoY2hpbGQgKyAnYWRkQ2hpbGRBdDogVGhlIGluZGV4ICcrIGluZGV4ICsnIHN1cHBsaWVkIGlzIG91dCBvZiBib3VuZHMgJyArIHRoaXMuY2hpbGRyZW4ubGVuZ3RoKTtcbiAgICB9XG59O1xuXG4vKipcbiAqIFN3YXBzIHRoZSBwb3NpdGlvbiBvZiAyIERpc3BsYXkgT2JqZWN0cyB3aXRoaW4gdGhpcyBjb250YWluZXIuXG4gKlxuICogQHBhcmFtIGNoaWxkIHtQSVhJLkRpc3BsYXlPYmplY3R9XG4gKiBAcGFyYW0gY2hpbGQyIHtQSVhJLkRpc3BsYXlPYmplY3R9XG4gKi9cbkNvbnRhaW5lci5wcm90b3R5cGUuc3dhcENoaWxkcmVuID0gZnVuY3Rpb24gKGNoaWxkLCBjaGlsZDIpXG57XG4gICAgaWYgKGNoaWxkID09PSBjaGlsZDIpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFyIGluZGV4MSA9IHRoaXMuZ2V0Q2hpbGRJbmRleChjaGlsZCk7XG4gICAgdmFyIGluZGV4MiA9IHRoaXMuZ2V0Q2hpbGRJbmRleChjaGlsZDIpO1xuXG4gICAgaWYgKGluZGV4MSA8IDAgfHwgaW5kZXgyIDwgMClcbiAgICB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignc3dhcENoaWxkcmVuOiBCb3RoIHRoZSBzdXBwbGllZCBEaXNwbGF5T2JqZWN0cyBtdXN0IGJlIGNoaWxkcmVuIG9mIHRoZSBjYWxsZXIuJyk7XG4gICAgfVxuXG4gICAgdGhpcy5jaGlsZHJlbltpbmRleDFdID0gY2hpbGQyO1xuICAgIHRoaXMuY2hpbGRyZW5baW5kZXgyXSA9IGNoaWxkO1xuICAgIHRoaXMub25DaGlsZHJlbkNoYW5nZShpbmRleDEgPCBpbmRleDIgPyBpbmRleDEgOiBpbmRleDIpO1xufTtcblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBpbmRleCBwb3NpdGlvbiBvZiBhIGNoaWxkIERpc3BsYXlPYmplY3QgaW5zdGFuY2VcbiAqXG4gKiBAcGFyYW0gY2hpbGQge1BJWEkuRGlzcGxheU9iamVjdH0gVGhlIERpc3BsYXlPYmplY3QgaW5zdGFuY2UgdG8gaWRlbnRpZnlcbiAqIEByZXR1cm4ge251bWJlcn0gVGhlIGluZGV4IHBvc2l0aW9uIG9mIHRoZSBjaGlsZCBkaXNwbGF5IG9iamVjdCB0byBpZGVudGlmeVxuICovXG5Db250YWluZXIucHJvdG90eXBlLmdldENoaWxkSW5kZXggPSBmdW5jdGlvbiAoY2hpbGQpXG57XG4gICAgdmFyIGluZGV4ID0gdGhpcy5jaGlsZHJlbi5pbmRleE9mKGNoaWxkKTtcblxuICAgIGlmIChpbmRleCA9PT0gLTEpXG4gICAge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RoZSBzdXBwbGllZCBEaXNwbGF5T2JqZWN0IG11c3QgYmUgYSBjaGlsZCBvZiB0aGUgY2FsbGVyJyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGluZGV4O1xufTtcblxuLyoqXG4gKiBDaGFuZ2VzIHRoZSBwb3NpdGlvbiBvZiBhbiBleGlzdGluZyBjaGlsZCBpbiB0aGUgZGlzcGxheSBvYmplY3QgY29udGFpbmVyXG4gKlxuICogQHBhcmFtIGNoaWxkIHtQSVhJLkRpc3BsYXlPYmplY3R9IFRoZSBjaGlsZCBEaXNwbGF5T2JqZWN0IGluc3RhbmNlIGZvciB3aGljaCB5b3Ugd2FudCB0byBjaGFuZ2UgdGhlIGluZGV4IG51bWJlclxuICogQHBhcmFtIGluZGV4IHtudW1iZXJ9IFRoZSByZXN1bHRpbmcgaW5kZXggbnVtYmVyIGZvciB0aGUgY2hpbGQgZGlzcGxheSBvYmplY3RcbiAqL1xuQ29udGFpbmVyLnByb3RvdHlwZS5zZXRDaGlsZEluZGV4ID0gZnVuY3Rpb24gKGNoaWxkLCBpbmRleClcbntcbiAgICBpZiAoaW5kZXggPCAwIHx8IGluZGV4ID49IHRoaXMuY2hpbGRyZW4ubGVuZ3RoKVxuICAgIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdUaGUgc3VwcGxpZWQgaW5kZXggaXMgb3V0IG9mIGJvdW5kcycpO1xuICAgIH1cblxuICAgIHZhciBjdXJyZW50SW5kZXggPSB0aGlzLmdldENoaWxkSW5kZXgoY2hpbGQpO1xuXG4gICAgdXRpbHMucmVtb3ZlSXRlbXModGhpcy5jaGlsZHJlbiwgY3VycmVudEluZGV4LCAxKTsgLy8gcmVtb3ZlIGZyb20gb2xkIHBvc2l0aW9uXG4gICAgdGhpcy5jaGlsZHJlbi5zcGxpY2UoaW5kZXgsIDAsIGNoaWxkKTsgLy9hZGQgYXQgbmV3IHBvc2l0aW9uXG4gICAgdGhpcy5vbkNoaWxkcmVuQ2hhbmdlKGluZGV4KTtcbn07XG5cbi8qKlxuICogUmV0dXJucyB0aGUgY2hpbGQgYXQgdGhlIHNwZWNpZmllZCBpbmRleFxuICpcbiAqIEBwYXJhbSBpbmRleCB7bnVtYmVyfSBUaGUgaW5kZXggdG8gZ2V0IHRoZSBjaGlsZCBhdFxuICogQHJldHVybiB7UElYSS5EaXNwbGF5T2JqZWN0fSBUaGUgY2hpbGQgYXQgdGhlIGdpdmVuIGluZGV4LCBpZiBhbnkuXG4gKi9cbkNvbnRhaW5lci5wcm90b3R5cGUuZ2V0Q2hpbGRBdCA9IGZ1bmN0aW9uIChpbmRleClcbntcbiAgICBpZiAoaW5kZXggPCAwIHx8IGluZGV4ID49IHRoaXMuY2hpbGRyZW4ubGVuZ3RoKVxuICAgIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdnZXRDaGlsZEF0OiBTdXBwbGllZCBpbmRleCAnICsgaW5kZXggKyAnIGRvZXMgbm90IGV4aXN0IGluIHRoZSBjaGlsZCBsaXN0LCBvciB0aGUgc3VwcGxpZWQgRGlzcGxheU9iamVjdCBpcyBub3QgYSBjaGlsZCBvZiB0aGUgY2FsbGVyJyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuY2hpbGRyZW5baW5kZXhdO1xufTtcblxuLyoqXG4gKiBSZW1vdmVzIGEgY2hpbGQgZnJvbSB0aGUgY29udGFpbmVyLlxuICpcbiAqIEBwYXJhbSBjaGlsZCB7UElYSS5EaXNwbGF5T2JqZWN0fSBUaGUgRGlzcGxheU9iamVjdCB0byByZW1vdmVcbiAqIEByZXR1cm4ge1BJWEkuRGlzcGxheU9iamVjdH0gVGhlIGNoaWxkIHRoYXQgd2FzIHJlbW92ZWQuXG4gKi9cbkNvbnRhaW5lci5wcm90b3R5cGUucmVtb3ZlQ2hpbGQgPSBmdW5jdGlvbiAoY2hpbGQpXG57XG4gICAgdmFyIGFyZ3VtZW50c0xlbmd0aCA9IGFyZ3VtZW50cy5sZW5ndGg7XG5cbiAgICAvLyBpZiB0aGVyZSBpcyBvbmx5IG9uZSBhcmd1bWVudCB3ZSBjYW4gYnlwYXNzIGxvb3BpbmcgdGhyb3VnaCB0aGUgdGhlbVxuICAgIGlmKGFyZ3VtZW50c0xlbmd0aCA+IDEpXG4gICAge1xuICAgICAgICAvLyBsb29wIHRocm91Z2ggdGhlIGFyZ3VtZW50cyBwcm9wZXJ0eSBhbmQgYWRkIGFsbCBjaGlsZHJlblxuICAgICAgICAvLyB1c2UgaXQgdGhlIHJpZ2h0IHdheSAoLmxlbmd0aCBhbmQgW2ldKSBzbyB0aGF0IHRoaXMgZnVuY3Rpb24gY2FuIHN0aWxsIGJlIG9wdGltaXNlZCBieSBKUyBydW50aW1lc1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFyZ3VtZW50c0xlbmd0aDsgaSsrKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnJlbW92ZUNoaWxkKCBhcmd1bWVudHNbaV0gKTtcbiAgICAgICAgfVxuICAgIH0gICAgIFxuICAgIGVsc2VcbiAgICB7ICAgXG4gICAgICAgIHZhciBpbmRleCA9IHRoaXMuY2hpbGRyZW4uaW5kZXhPZihjaGlsZCk7XG5cbiAgICAgICAgaWYgKGluZGV4ID09PSAtMSlcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY2hpbGQucGFyZW50ID0gbnVsbDtcbiAgICAgICAgdXRpbHMucmVtb3ZlSXRlbXModGhpcy5jaGlsZHJlbiwgaW5kZXgsIDEpO1xuXG4gICAgICAgIC8vIFRPRE8gLSBsZXRzIGVpdGhlciBkbyBhbGwgY2FsbGJhY2tzIG9yIGFsbCBldmVudHMuLiBub3QgYm90aCFcbiAgICAgICAgdGhpcy5vbkNoaWxkcmVuQ2hhbmdlKGluZGV4KTtcbiAgICAgICAgY2hpbGQuZW1pdCgncmVtb3ZlZCcsIHRoaXMpO1xuICAgIH1cblxuICAgIHJldHVybiBjaGlsZDtcbn07XG5cbi8qKlxuICogUmVtb3ZlcyBhIGNoaWxkIGZyb20gdGhlIHNwZWNpZmllZCBpbmRleCBwb3NpdGlvbi5cbiAqXG4gKiBAcGFyYW0gaW5kZXgge251bWJlcn0gVGhlIGluZGV4IHRvIGdldCB0aGUgY2hpbGQgZnJvbVxuICogQHJldHVybiB7UElYSS5EaXNwbGF5T2JqZWN0fSBUaGUgY2hpbGQgdGhhdCB3YXMgcmVtb3ZlZC5cbiAqL1xuQ29udGFpbmVyLnByb3RvdHlwZS5yZW1vdmVDaGlsZEF0ID0gZnVuY3Rpb24gKGluZGV4KVxue1xuICAgIHZhciBjaGlsZCA9IHRoaXMuZ2V0Q2hpbGRBdChpbmRleCk7XG5cbiAgICBjaGlsZC5wYXJlbnQgPSBudWxsO1xuICAgIHV0aWxzLnJlbW92ZUl0ZW1zKHRoaXMuY2hpbGRyZW4sIGluZGV4LCAxKTtcblxuICAgIC8vIFRPRE8gLSBsZXRzIGVpdGhlciBkbyBhbGwgY2FsbGJhY2tzIG9yIGFsbCBldmVudHMuLiBub3QgYm90aCFcbiAgICB0aGlzLm9uQ2hpbGRyZW5DaGFuZ2UoaW5kZXgpO1xuICAgIGNoaWxkLmVtaXQoJ3JlbW92ZWQnLCB0aGlzKTtcblxuICAgIHJldHVybiBjaGlsZDtcbn07XG5cbi8qKlxuICogUmVtb3ZlcyBhbGwgY2hpbGRyZW4gZnJvbSB0aGlzIGNvbnRhaW5lciB0aGF0IGFyZSB3aXRoaW4gdGhlIGJlZ2luIGFuZCBlbmQgaW5kZXhlcy5cbiAqXG4gKiBAcGFyYW0gYmVnaW5JbmRleCB7bnVtYmVyfSBUaGUgYmVnaW5uaW5nIHBvc2l0aW9uLiBEZWZhdWx0IHZhbHVlIGlzIDAuXG4gKiBAcGFyYW0gZW5kSW5kZXgge251bWJlcn0gVGhlIGVuZGluZyBwb3NpdGlvbi4gRGVmYXVsdCB2YWx1ZSBpcyBzaXplIG9mIHRoZSBjb250YWluZXIuXG4gKi9cbkNvbnRhaW5lci5wcm90b3R5cGUucmVtb3ZlQ2hpbGRyZW4gPSBmdW5jdGlvbiAoYmVnaW5JbmRleCwgZW5kSW5kZXgpXG57XG4gICAgdmFyIGJlZ2luID0gYmVnaW5JbmRleCB8fCAwO1xuICAgIHZhciBlbmQgPSB0eXBlb2YgZW5kSW5kZXggPT09ICdudW1iZXInID8gZW5kSW5kZXggOiB0aGlzLmNoaWxkcmVuLmxlbmd0aDtcbiAgICB2YXIgcmFuZ2UgPSBlbmQgLSBiZWdpbjtcbiAgICB2YXIgcmVtb3ZlZCwgaTtcblxuICAgIGlmIChyYW5nZSA+IDAgJiYgcmFuZ2UgPD0gZW5kKVxuICAgIHtcbiAgICAgICAgcmVtb3ZlZCA9IHRoaXMuY2hpbGRyZW4uc3BsaWNlKGJlZ2luLCByYW5nZSk7XG5cbiAgICAgICAgZm9yIChpID0gMDsgaSA8IHJlbW92ZWQubGVuZ3RoOyArK2kpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJlbW92ZWRbaV0ucGFyZW50ID0gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMub25DaGlsZHJlbkNoYW5nZShiZWdpbkluZGV4KTtcblxuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgcmVtb3ZlZC5sZW5ndGg7ICsraSlcbiAgICAgICAge1xuICAgICAgICAgICAgcmVtb3ZlZFtpXS5lbWl0KCdyZW1vdmVkJywgdGhpcyk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gcmVtb3ZlZDtcbiAgICB9XG4gICAgZWxzZSBpZiAocmFuZ2UgPT09IDAgJiYgdGhpcy5jaGlsZHJlbi5sZW5ndGggPT09IDApXG4gICAge1xuICAgICAgICByZXR1cm4gW107XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdyZW1vdmVDaGlsZHJlbjogbnVtZXJpYyB2YWx1ZXMgYXJlIG91dHNpZGUgdGhlIGFjY2VwdGFibGUgcmFuZ2UuJyk7XG4gICAgfVxufTtcblxuLyoqXG4gKiBVc2VmdWwgZnVuY3Rpb24gdGhhdCByZXR1cm5zIGEgdGV4dHVyZSBvZiB0aGUgZGlzcGxheSBvYmplY3QgdGhhdCBjYW4gdGhlbiBiZSB1c2VkIHRvIGNyZWF0ZSBzcHJpdGVzXG4gKiBUaGlzIGNhbiBiZSBxdWl0ZSB1c2VmdWwgaWYgeW91ciBkaXNwbGF5T2JqZWN0IGlzIHN0YXRpYyAvIGNvbXBsaWNhdGVkIGFuZCBuZWVkcyB0byBiZSByZXVzZWQgbXVsdGlwbGUgdGltZXMuXG4gKlxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLkNhbnZhc1JlbmRlcmVyfFBJWEkuV2ViR0xSZW5kZXJlcn0gVGhlIHJlbmRlcmVyIHVzZWQgdG8gZ2VuZXJhdGUgdGhlIHRleHR1cmUuXG4gKiBAcGFyYW0gcmVzb2x1dGlvbiB7bnVtYmVyfSBUaGUgcmVzb2x1dGlvbiBvZiB0aGUgdGV4dHVyZSBiZWluZyBnZW5lcmF0ZWRcbiAqIEBwYXJhbSBzY2FsZU1vZGUge251bWJlcn0gU2VlIHtAbGluayBQSVhJLlNDQUxFX01PREVTfSBmb3IgcG9zc2libGUgdmFsdWVzXG4gKiBAcmV0dXJuIHtQSVhJLlRleHR1cmV9IGEgdGV4dHVyZSBvZiB0aGUgZGlzcGxheSBvYmplY3RcbiAqL1xuQ29udGFpbmVyLnByb3RvdHlwZS5nZW5lcmF0ZVRleHR1cmUgPSBmdW5jdGlvbiAocmVuZGVyZXIsIHJlc29sdXRpb24sIHNjYWxlTW9kZSlcbntcbiAgICB2YXIgYm91bmRzID0gdGhpcy5nZXRMb2NhbEJvdW5kcygpO1xuXG4gICAgdmFyIHJlbmRlclRleHR1cmUgPSBuZXcgUmVuZGVyVGV4dHVyZShyZW5kZXJlciwgYm91bmRzLndpZHRoIHwgMCwgYm91bmRzLmhlaWdodCB8IDAsIHNjYWxlTW9kZSwgcmVzb2x1dGlvbik7XG5cbiAgICBfdGVtcE1hdHJpeC50eCA9IC1ib3VuZHMueDtcbiAgICBfdGVtcE1hdHJpeC50eSA9IC1ib3VuZHMueTtcblxuICAgIHJlbmRlclRleHR1cmUucmVuZGVyKHRoaXMsIF90ZW1wTWF0cml4KTtcblxuICAgIHJldHVybiByZW5kZXJUZXh0dXJlO1xufTtcblxuLypcbiAqIFVwZGF0ZXMgdGhlIHRyYW5zZm9ybSBvbiBhbGwgY2hpbGRyZW4gb2YgdGhpcyBjb250YWluZXIgZm9yIHJlbmRlcmluZ1xuICpcbiAqIEBwcml2YXRlXG4gKi9cbkNvbnRhaW5lci5wcm90b3R5cGUudXBkYXRlVHJhbnNmb3JtID0gZnVuY3Rpb24gKClcbntcbiAgICBpZiAoIXRoaXMudmlzaWJsZSlcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLmRpc3BsYXlPYmplY3RVcGRhdGVUcmFuc2Zvcm0oKTtcblxuICAgIGZvciAodmFyIGkgPSAwLCBqID0gdGhpcy5jaGlsZHJlbi5sZW5ndGg7IGkgPCBqOyArK2kpXG4gICAge1xuICAgICAgICB0aGlzLmNoaWxkcmVuW2ldLnVwZGF0ZVRyYW5zZm9ybSgpO1xuICAgIH1cblxuICAgIHRoaXMuZGlydHlUcmFuc2Zvcm0gPSBmYWxzZTtcbn07XG5cbi8vIHBlcmZvcm1hbmNlIGluY3JlYXNlIHRvIGF2b2lkIHVzaW5nIGNhbGwuLiAoMTB4IGZhc3RlcilcbkNvbnRhaW5lci5wcm90b3R5cGUuY29udGFpbmVyVXBkYXRlVHJhbnNmb3JtID0gQ29udGFpbmVyLnByb3RvdHlwZS51cGRhdGVUcmFuc2Zvcm07XG5cbi8qKlxuICogUmV0cmlldmVzIHRoZSBib3VuZHMgb2YgdGhlIENvbnRhaW5lciBhcyBhIHJlY3RhbmdsZS4gVGhlIGJvdW5kcyBjYWxjdWxhdGlvbiB0YWtlcyBhbGwgdmlzaWJsZSBjaGlsZHJlbiBpbnRvIGNvbnNpZGVyYXRpb24uXG4gKlxuICogQHJldHVybiB7UElYSS5SZWN0YW5nbGV9IFRoZSByZWN0YW5ndWxhciBib3VuZGluZyBhcmVhXG4gKi9cbkNvbnRhaW5lci5wcm90b3R5cGUuZ2V0Qm91bmRzID0gZnVuY3Rpb24gKClcbntcbiAgICBpZighdGhpcy5fY3VycmVudEJvdW5kcylcbiAgICB7XG5cbiAgICAgICAgaWYgKHRoaXMuY2hpbGRyZW4ubGVuZ3RoID09PSAwKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gbWF0aC5SZWN0YW5nbGUuRU1QVFk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBUT0RPIHRoZSBib3VuZHMgaGF2ZSBhbHJlYWR5IGJlZW4gY2FsY3VsYXRlZCB0aGlzIHJlbmRlciBzZXNzaW9uIHNvIHJldHVybiB3aGF0IHdlIGhhdmVcblxuICAgICAgICB2YXIgbWluWCA9IEluZmluaXR5O1xuICAgICAgICB2YXIgbWluWSA9IEluZmluaXR5O1xuXG4gICAgICAgIHZhciBtYXhYID0gLUluZmluaXR5O1xuICAgICAgICB2YXIgbWF4WSA9IC1JbmZpbml0eTtcblxuICAgICAgICB2YXIgY2hpbGRCb3VuZHM7XG4gICAgICAgIHZhciBjaGlsZE1heFg7XG4gICAgICAgIHZhciBjaGlsZE1heFk7XG5cbiAgICAgICAgdmFyIGNoaWxkVmlzaWJsZSA9IGZhbHNlO1xuXG4gICAgICAgIGZvciAodmFyIGkgPSAwLCBqID0gdGhpcy5jaGlsZHJlbi5sZW5ndGg7IGkgPCBqOyArK2kpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHZhciBjaGlsZCA9IHRoaXMuY2hpbGRyZW5baV07XG5cbiAgICAgICAgICAgIGlmICghY2hpbGQudmlzaWJsZSlcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY2hpbGRWaXNpYmxlID0gdHJ1ZTtcblxuICAgICAgICAgICAgY2hpbGRCb3VuZHMgPSB0aGlzLmNoaWxkcmVuW2ldLmdldEJvdW5kcygpO1xuXG4gICAgICAgICAgICBtaW5YID0gbWluWCA8IGNoaWxkQm91bmRzLnggPyBtaW5YIDogY2hpbGRCb3VuZHMueDtcbiAgICAgICAgICAgIG1pblkgPSBtaW5ZIDwgY2hpbGRCb3VuZHMueSA/IG1pblkgOiBjaGlsZEJvdW5kcy55O1xuXG4gICAgICAgICAgICBjaGlsZE1heFggPSBjaGlsZEJvdW5kcy53aWR0aCArIGNoaWxkQm91bmRzLng7XG4gICAgICAgICAgICBjaGlsZE1heFkgPSBjaGlsZEJvdW5kcy5oZWlnaHQgKyBjaGlsZEJvdW5kcy55O1xuXG4gICAgICAgICAgICBtYXhYID0gbWF4WCA+IGNoaWxkTWF4WCA/IG1heFggOiBjaGlsZE1heFg7XG4gICAgICAgICAgICBtYXhZID0gbWF4WSA+IGNoaWxkTWF4WSA/IG1heFkgOiBjaGlsZE1heFk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIWNoaWxkVmlzaWJsZSlcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIG1hdGguUmVjdGFuZ2xlLkVNUFRZO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGJvdW5kcyA9IHRoaXMuX2JvdW5kcztcblxuICAgICAgICBib3VuZHMueCA9IG1pblg7XG4gICAgICAgIGJvdW5kcy55ID0gbWluWTtcbiAgICAgICAgYm91bmRzLndpZHRoID0gbWF4WCAtIG1pblg7XG4gICAgICAgIGJvdW5kcy5oZWlnaHQgPSBtYXhZIC0gbWluWTtcblxuICAgICAgICB0aGlzLl9jdXJyZW50Qm91bmRzID0gYm91bmRzO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLl9jdXJyZW50Qm91bmRzO1xufTtcblxuQ29udGFpbmVyLnByb3RvdHlwZS5jb250YWluZXJHZXRCb3VuZHMgPSBDb250YWluZXIucHJvdG90eXBlLmdldEJvdW5kcztcblxuLyoqXG4gKiBSZXRyaWV2ZXMgdGhlIG5vbi1nbG9iYWwgbG9jYWwgYm91bmRzIG9mIHRoZSBDb250YWluZXIgYXMgYSByZWN0YW5nbGUuXG4gKiBUaGUgY2FsY3VsYXRpb24gdGFrZXMgYWxsIHZpc2libGUgY2hpbGRyZW4gaW50byBjb25zaWRlcmF0aW9uLlxuICpcbiAqIEByZXR1cm4ge1BJWEkuUmVjdGFuZ2xlfSBUaGUgcmVjdGFuZ3VsYXIgYm91bmRpbmcgYXJlYVxuICovXG5Db250YWluZXIucHJvdG90eXBlLmdldExvY2FsQm91bmRzID0gZnVuY3Rpb24gKClcbntcbiAgICB2YXIgbWF0cml4Q2FjaGUgPSB0aGlzLndvcmxkVHJhbnNmb3JtO1xuXG4gICAgdGhpcy53b3JsZFRyYW5zZm9ybSA9IG1hdGguTWF0cml4LklERU5USVRZO1xuXG4gICAgZm9yICh2YXIgaSA9IDAsIGogPSB0aGlzLmNoaWxkcmVuLmxlbmd0aDsgaSA8IGo7ICsraSlcbiAgICB7XG4gICAgICAgIHRoaXMuY2hpbGRyZW5baV0udXBkYXRlVHJhbnNmb3JtKCk7XG4gICAgfVxuXG4gICAgdGhpcy53b3JsZFRyYW5zZm9ybSA9IG1hdHJpeENhY2hlO1xuXG4gICAgdGhpcy5fY3VycmVudEJvdW5kcyA9IG51bGw7XG5cbiAgICByZXR1cm4gdGhpcy5nZXRCb3VuZHMoIG1hdGguTWF0cml4LklERU5USVRZICk7XG59O1xuXG4vKipcbiAqIFJlbmRlcnMgdGhlIG9iamVjdCB1c2luZyB0aGUgV2ViR0wgcmVuZGVyZXJcbiAqXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcn0gVGhlIHJlbmRlcmVyXG4gKi9cbkNvbnRhaW5lci5wcm90b3R5cGUucmVuZGVyV2ViR0wgPSBmdW5jdGlvbiAocmVuZGVyZXIpXG57XG5cbiAgICAvLyBpZiB0aGUgb2JqZWN0IGlzIG5vdCB2aXNpYmxlIG9yIHRoZSBhbHBoYSBpcyAwIHRoZW4gbm8gbmVlZCB0byByZW5kZXIgdGhpcyBlbGVtZW50XG4gICAgaWYgKCF0aGlzLnZpc2libGUgfHwgdGhpcy53b3JsZEFscGhhIDw9IDAgfHwgIXRoaXMucmVuZGVyYWJsZSlcbiAgICB7XG4gICAgICBcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHZhciBpLCBqO1xuXG4gICAgLy8gZG8gYSBxdWljayBjaGVjayB0byBzZWUgaWYgdGhpcyBlbGVtZW50IGhhcyBhIG1hc2sgb3IgYSBmaWx0ZXIuXG4gICAgaWYgKHRoaXMuX21hc2sgfHwgdGhpcy5fZmlsdGVycylcbiAgICB7XG4gICAgICAgIHJlbmRlcmVyLmN1cnJlbnRSZW5kZXJlci5mbHVzaCgpO1xuXG4gICAgICAgIC8vIHB1c2ggZmlsdGVyIGZpcnN0IGFzIHdlIG5lZWQgdG8gZW5zdXJlIHRoZSBzdGVuY2lsIGJ1ZmZlciBpcyBjb3JyZWN0IGZvciBhbnkgbWFza2luZ1xuICAgICAgICBpZiAodGhpcy5fZmlsdGVycyAmJiB0aGlzLl9maWx0ZXJzLmxlbmd0aClcbiAgICAgICAge1xuICAgICAgICAgICAgcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5wdXNoRmlsdGVyKHRoaXMsIHRoaXMuX2ZpbHRlcnMpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuX21hc2spXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJlbmRlcmVyLm1hc2tNYW5hZ2VyLnB1c2hNYXNrKHRoaXMsIHRoaXMuX21hc2spO1xuICAgICAgICB9XG5cbiAgICAgICAgcmVuZGVyZXIuY3VycmVudFJlbmRlcmVyLnN0YXJ0KCk7XG5cbiAgICAgICAgLy8gYWRkIHRoaXMgb2JqZWN0IHRvIHRoZSBiYXRjaCwgb25seSByZW5kZXJlZCBpZiBpdCBoYXMgYSB0ZXh0dXJlLlxuICAgICAgICB0aGlzLl9yZW5kZXJXZWJHTChyZW5kZXJlcik7XG5cbiAgICAgICAgLy8gbm93IGxvb3AgdGhyb3VnaCB0aGUgY2hpbGRyZW4gYW5kIG1ha2Ugc3VyZSB0aGV5IGdldCByZW5kZXJlZFxuICAgICAgICBmb3IgKGkgPSAwLCBqID0gdGhpcy5jaGlsZHJlbi5sZW5ndGg7IGkgPCBqOyBpKyspXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuY2hpbGRyZW5baV0ucmVuZGVyV2ViR0wocmVuZGVyZXIpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmVuZGVyZXIuY3VycmVudFJlbmRlcmVyLmZsdXNoKCk7XG5cbiAgICAgICAgaWYgKHRoaXMuX21hc2spXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJlbmRlcmVyLm1hc2tNYW5hZ2VyLnBvcE1hc2sodGhpcywgdGhpcy5fbWFzayk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5fZmlsdGVycylcbiAgICAgICAge1xuICAgICAgICAgICAgcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5wb3BGaWx0ZXIoKTtcblxuICAgICAgICB9XG4gICAgICAgIHJlbmRlcmVyLmN1cnJlbnRSZW5kZXJlci5zdGFydCgpO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICB0aGlzLl9yZW5kZXJXZWJHTChyZW5kZXJlcik7XG5cbiAgICAgICAgLy8gc2ltcGxlIHJlbmRlciBjaGlsZHJlbiFcbiAgICAgICAgZm9yIChpID0gMCwgaiA9IHRoaXMuY2hpbGRyZW4ubGVuZ3RoOyBpIDwgajsgKytpKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmNoaWxkcmVuW2ldLnJlbmRlcldlYkdMKHJlbmRlcmVyKTtcbiAgICAgICAgfVxuICAgIH1cbn07XG5cbi8qKlxuICogVG8gYmUgb3ZlcnJpZGRlbiBieSB0aGUgc3ViY2xhc3NcbiAqXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcn0gVGhlIHJlbmRlcmVyXG4gKiBAcHJpdmF0ZVxuICovXG5Db250YWluZXIucHJvdG90eXBlLl9yZW5kZXJXZWJHTCA9IGZ1bmN0aW9uIChyZW5kZXJlcikgLy8ganNoaW50IHVudXNlZDpmYWxzZVxue1xuICAgIC8vIHRoaXMgaXMgd2hlcmUgY29udGVudCBpdHNlbGYgZ2V0cyByZW5kZXJlZC4uLlxufTtcblxuLyoqXG4gKiBUbyBiZSBvdmVycmlkZGVuIGJ5IHRoZSBzdWJjbGFzc1xuICpcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5DYW52YXNSZW5kZXJlcn0gVGhlIHJlbmRlcmVyXG4gKiBAcHJpdmF0ZVxuICovXG5Db250YWluZXIucHJvdG90eXBlLl9yZW5kZXJDYW52YXMgPSBmdW5jdGlvbiAocmVuZGVyZXIpIC8vIGpzaGludCB1bnVzZWQ6ZmFsc2VcbntcbiAgICAvLyB0aGlzIGlzIHdoZXJlIGNvbnRlbnQgaXRzZWxmIGdldHMgcmVuZGVyZWQuLi5cbn07XG5cblxuLyoqXG4gKiBSZW5kZXJzIHRoZSBvYmplY3QgdXNpbmcgdGhlIENhbnZhcyByZW5kZXJlclxuICpcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5DYW52YXNSZW5kZXJlcn0gVGhlIHJlbmRlcmVyXG4gKi9cbkNvbnRhaW5lci5wcm90b3R5cGUucmVuZGVyQ2FudmFzID0gZnVuY3Rpb24gKHJlbmRlcmVyKVxue1xuICAgIC8vIGlmIG5vdCB2aXNpYmxlIG9yIHRoZSBhbHBoYSBpcyAwIHRoZW4gbm8gbmVlZCB0byByZW5kZXIgdGhpc1xuICAgIGlmICghdGhpcy52aXNpYmxlIHx8IHRoaXMuYWxwaGEgPD0gMCB8fCAhdGhpcy5yZW5kZXJhYmxlKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICh0aGlzLl9tYXNrKVxuICAgIHtcbiAgICAgICAgcmVuZGVyZXIubWFza01hbmFnZXIucHVzaE1hc2sodGhpcy5fbWFzaywgcmVuZGVyZXIpO1xuICAgIH1cblxuICAgIHRoaXMuX3JlbmRlckNhbnZhcyhyZW5kZXJlcik7XG4gICAgZm9yICh2YXIgaSA9IDAsIGogPSB0aGlzLmNoaWxkcmVuLmxlbmd0aDsgaSA8IGo7ICsraSlcbiAgICB7XG4gICAgICAgIHRoaXMuY2hpbGRyZW5baV0ucmVuZGVyQ2FudmFzKHJlbmRlcmVyKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5fbWFzaylcbiAgICB7XG4gICAgICAgIHJlbmRlcmVyLm1hc2tNYW5hZ2VyLnBvcE1hc2socmVuZGVyZXIpO1xuICAgIH1cbn07XG5cbi8qKlxuICogRGVzdHJveXMgdGhlIGNvbnRhaW5lclxuICogQHBhcmFtIFtkZXN0cm95Q2hpbGRyZW49ZmFsc2VdIHtib29sZWFufSBpZiBzZXQgdG8gdHJ1ZSwgYWxsIHRoZSBjaGlsZHJlbiB3aWxsIGhhdmUgdGhlaXIgZGVzdHJveSBtZXRob2QgY2FsbGVkIGFzIHdlbGxcbiAqL1xuQ29udGFpbmVyLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKGRlc3Ryb3lDaGlsZHJlbilcbntcbiAgICBEaXNwbGF5T2JqZWN0LnByb3RvdHlwZS5kZXN0cm95LmNhbGwodGhpcyk7XG5cbiAgICBpZiAoZGVzdHJveUNoaWxkcmVuKVxuICAgIHtcbiAgICAgICAgZm9yICh2YXIgaSA9IDAsIGogPSB0aGlzLmNoaWxkcmVuLmxlbmd0aDsgaSA8IGo7ICsraSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5jaGlsZHJlbltpXS5kZXN0cm95KGRlc3Ryb3lDaGlsZHJlbik7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLnJlbW92ZUNoaWxkcmVuKCk7XG5cbiAgICB0aGlzLmNoaWxkcmVuID0gbnVsbDtcbn07XG4iLCJ2YXIgbWF0aCA9IHJlcXVpcmUoJy4uL21hdGgnKSxcbiAgICBSZW5kZXJUZXh0dXJlID0gcmVxdWlyZSgnLi4vdGV4dHVyZXMvUmVuZGVyVGV4dHVyZScpLFxuICAgIEV2ZW50RW1pdHRlciA9IHJlcXVpcmUoJ2V2ZW50ZW1pdHRlcjMnKSxcbiAgICBDT05TVCA9IHJlcXVpcmUoJy4uL2NvbnN0JyksXG4gICAgX3RlbXBNYXRyaXggPSBuZXcgbWF0aC5NYXRyaXgoKSxcbiAgICBfdGVtcERpc3BsYXlPYmplY3RQYXJlbnQgPSB7d29ybGRUcmFuc2Zvcm06bmV3IG1hdGguTWF0cml4KCksIHdvcmxkQWxwaGE6MSwgY2hpbGRyZW46W119O1xuXG5cbi8qKlxuICogVGhlIGJhc2UgY2xhc3MgZm9yIGFsbCBvYmplY3RzIHRoYXQgYXJlIHJlbmRlcmVkIG9uIHRoZSBzY3JlZW4uXG4gKiBUaGlzIGlzIGFuIGFic3RyYWN0IGNsYXNzIGFuZCBzaG91bGQgbm90IGJlIHVzZWQgb24gaXRzIG93biByYXRoZXIgaXQgc2hvdWxkIGJlIGV4dGVuZGVkLlxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgRXZlbnRFbWl0dGVyXG4gKiBAbWVtYmVyb2YgUElYSVxuICovXG5mdW5jdGlvbiBEaXNwbGF5T2JqZWN0KClcbntcbiAgICBFdmVudEVtaXR0ZXIuY2FsbCh0aGlzKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBjb29yZGluYXRlIG9mIHRoZSBvYmplY3QgcmVsYXRpdmUgdG8gdGhlIGxvY2FsIGNvb3JkaW5hdGVzIG9mIHRoZSBwYXJlbnQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlBvaW50fVxuICAgICAqL1xuICAgIHRoaXMucG9zaXRpb24gPSBuZXcgbWF0aC5Qb2ludCgpO1xuICAgIHRoaXMuX3Bvc2l0aW9uID0gbmV3IENhY2hlUG9pbnQodGhpcyk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgc2NhbGUgZmFjdG9yIG9mIHRoZSBvYmplY3QuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlBvaW50fVxuICAgICAqL1xuICAgIHRoaXMuc2NhbGUgPSBuZXcgbWF0aC5Qb2ludCgxLCAxKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBwaXZvdCBwb2ludCBvZiB0aGUgZGlzcGxheU9iamVjdCB0aGF0IGl0IHJvdGF0ZXMgYXJvdW5kXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlBvaW50fVxuICAgICAqL1xuICAgIHRoaXMucGl2b3QgPSBuZXcgbWF0aC5Qb2ludCgwLCAwKTtcblxuXG4gICAgLyoqXG4gICAgICogVGhlIHNrZXcgZmFjdG9yIGZvciB0aGUgb2JqZWN0IGluIHJhZGlhbnMuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlBvaW50fVxuICAgICAqL1xuICAgIHRoaXMuc2tldyA9IG5ldyBtYXRoLlBvaW50KDAsIDApO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHJvdGF0aW9uIG9mIHRoZSBvYmplY3QgaW4gcmFkaWFucy5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLl9yb3RhdGlvbiA9IDA7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgb3BhY2l0eSBvZiB0aGUgb2JqZWN0LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMuYWxwaGEgPSAxO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHZpc2liaWxpdHkgb2YgdGhlIG9iamVjdC4gSWYgZmFsc2UgdGhlIG9iamVjdCB3aWxsIG5vdCBiZSBkcmF3biwgYW5kXG4gICAgICogdGhlIHVwZGF0ZVRyYW5zZm9ybSBmdW5jdGlvbiB3aWxsIG5vdCBiZSBjYWxsZWQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqL1xuICAgIHRoaXMudmlzaWJsZSA9IHRydWU7XG5cbiAgICAvKipcbiAgICAgKiBDYW4gdGhpcyBvYmplY3QgYmUgcmVuZGVyZWQsIGlmIGZhbHNlIHRoZSBvYmplY3Qgd2lsbCBub3QgYmUgZHJhd24gYnV0IHRoZSB1cGRhdGVUcmFuc2Zvcm1cbiAgICAgKiBtZXRob2RzIHdpbGwgc3RpbGwgYmUgY2FsbGVkLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKi9cbiAgICB0aGlzLnJlbmRlcmFibGUgPSB0cnVlO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGRpc3BsYXkgb2JqZWN0IGNvbnRhaW5lciB0aGF0IGNvbnRhaW5zIHRoaXMgZGlzcGxheSBvYmplY3QuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLkNvbnRhaW5lcn1cbiAgICAgKiBAcmVhZE9ubHlcbiAgICAgKi9cbiAgICB0aGlzLnBhcmVudCA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgbXVsdGlwbGllZCBhbHBoYSBvZiB0aGUgZGlzcGxheU9iamVjdFxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEByZWFkT25seVxuICAgICAqL1xuICAgIHRoaXMud29ybGRBbHBoYSA9IDE7XG5cbiAgICAvKipcbiAgICAgKiBDdXJyZW50IHRyYW5zZm9ybSBvZiB0aGUgb2JqZWN0IGJhc2VkIG9uIHdvcmxkIChwYXJlbnQpIGZhY3RvcnNcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuTWF0cml4fVxuICAgICAqIEByZWFkT25seVxuICAgICAqL1xuICAgIHRoaXMud29ybGRUcmFuc2Zvcm0gPSBuZXcgbWF0aC5NYXRyaXgoKTtcbiAgICB0aGlzLmxvY2FsVHJhbnNmb3JtID0gbmV3IG1hdGguTWF0cml4KCk7XG5cblxuICAgIC8qKlxuICAgICAqIFRoZSBhcmVhIHRoZSBmaWx0ZXIgaXMgYXBwbGllZCB0by4gVGhpcyBpcyB1c2VkIGFzIG1vcmUgb2YgYW4gb3B0aW1pc2F0aW9uXG4gICAgICogcmF0aGVyIHRoYW4gZmlndXJpbmcgb3V0IHRoZSBkaW1lbnNpb25zIG9mIHRoZSBkaXNwbGF5T2JqZWN0IGVhY2ggZnJhbWUgeW91IGNhbiBzZXQgdGhpcyByZWN0YW5nbGVcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuUmVjdGFuZ2xlfVxuICAgICAqL1xuICAgIHRoaXMuZmlsdGVyQXJlYSA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBjYWNoZWQgc2luIHJvdGF0aW9uXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9zciA9IDA7XG5cbiAgICAvKipcbiAgICAgKiBjYWNoZWQgY29zIHJvdGF0aW9uXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9jciA9IDE7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgb3JpZ2luYWwsIGNhY2hlZCBib3VuZHMgb2YgdGhlIG9iamVjdFxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5SZWN0YW5nbGV9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9ib3VuZHMgPSBuZXcgbWF0aC5SZWN0YW5nbGUoMCwgMCwgMSwgMSk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgbW9zdCB1cC10by1kYXRlIGJvdW5kcyBvZiB0aGUgb2JqZWN0XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlJlY3RhbmdsZX1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX2N1cnJlbnRCb3VuZHMgPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogVGhlIG9yaWdpbmFsLCBjYWNoZWQgbWFzayBvZiB0aGUgb2JqZWN0XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlJlY3RhbmdsZX1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX21hc2sgPSBudWxsO1xuXG4gICAgdGhpcy5kaXJ0eVRyYW5zZm9ybSA9IHRydWU7XG59XG5cbi8vIGNvbnN0cnVjdG9yXG5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoRXZlbnRFbWl0dGVyLnByb3RvdHlwZSk7XG5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IERpc3BsYXlPYmplY3Q7XG5tb2R1bGUuZXhwb3J0cyA9IERpc3BsYXlPYmplY3Q7XG5cbnZhciBDYWNoZVBvaW50ID0gZnVuY3Rpb24oZG9jKXtcbiAgICBcbiAgICB0aGlzLmRvYyA9IGRvYztcblxuICAgIHRoaXMueCA9IDA7XG4gICAgdGhpcy55ID0gMDtcbn1cblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoQ2FjaGVQb2ludC5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBUaGUgcG9zaXRpb24gb2YgdGhlIGRpc3BsYXlPYmplY3Qgb24gdGhlIHggYXhpcyByZWxhdGl2ZSB0byB0aGUgbG9jYWwgY29vcmRpbmF0ZXMgb2YgdGhlIHBhcmVudC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5EaXNwbGF5T2JqZWN0I1xuICAgICAqL1xuICAgIHg6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5kb2MucG9zaXRpb24ueDtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuZG9jLnBvc2l0aW9uLnggPSB2YWx1ZTtcbiAgICAgICAgICAgIHRoaXMuZG9jLmRpcnR5VHJhbnNmb3JtID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICB5OiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZG9jLnBvc2lpdG9uLnk7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmRvYy5wb3NpdGlvbi55ID0gdmFsdWU7XG4gICAgICAgICAgICB0aGlzLmRvYy5kaXJ0eVRyYW5zZm9ybSA9IHRydWU7XG4gICAgICAgIH1cbiAgICB9XG59KTtcblxuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhEaXNwbGF5T2JqZWN0LnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFRoZSBwb3NpdGlvbiBvZiB0aGUgZGlzcGxheU9iamVjdCBvbiB0aGUgeCBheGlzIHJlbGF0aXZlIHRvIHRoZSBsb2NhbCBjb29yZGluYXRlcyBvZiB0aGUgcGFyZW50LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLkRpc3BsYXlPYmplY3QjXG4gICAgICovXG4gICAgeDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnBvc2l0aW9uLng7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnBvc2l0aW9uLnggPSB2YWx1ZTtcbiAgICAgICAgICAgIHRoaXMuZGlydHlUcmFuc2Zvcm0gPSB0cnVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFRoZSBwb3NpdGlvbiBvZiB0aGUgZGlzcGxheU9iamVjdCBvbiB0aGUgeSBheGlzIHJlbGF0aXZlIHRvIHRoZSBsb2NhbCBjb29yZGluYXRlcyBvZiB0aGUgcGFyZW50LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLkRpc3BsYXlPYmplY3QjXG4gICAgICovXG4gICAgeToge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnBvc2l0aW9uLnk7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnBvc2l0aW9uLnkgPSB2YWx1ZTtcbiAgICAgICAgICAgIHRoaXMuZGlydHlUcmFuc2Zvcm0gPSB0cnVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIHNjYWxlWDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnNjYWxlLng7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnNjYWxlLnggPSB2YWx1ZTtcbiAgICAgICAgICAgIHRoaXMuZGlydHlUcmFuc2Zvcm0gPSB0cnVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFRoZSBwb3NpdGlvbiBvZiB0aGUgZGlzcGxheU9iamVjdCBvbiB0aGUgeSBheGlzIHJlbGF0aXZlIHRvIHRoZSBsb2NhbCBjb29yZGluYXRlcyBvZiB0aGUgcGFyZW50LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLkRpc3BsYXlPYmplY3QjXG4gICAgICovXG4gICAgc2NhbGVZOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuc2NhbGUueTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuc2NhbGUueSA9IHZhbHVlO1xuICAgICAgICAgICAgdGhpcy5kaXJ0eVRyYW5zZm9ybSA9IHRydWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgcm90YXRpb246IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fcm90YXRpb247XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLl9yb3RhdGlvbiA9IHZhbHVlO1xuICAgICAgICAgICAgdGhpcy5kaXJ0eVRyYW5zZm9ybSA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLl9zciA9IE1hdGguc2luKHZhbHVlKTtcbiAgICAgICAgICAgIHRoaXMuX2NyID0gTWF0aC5jb3ModmFsdWUpO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFRoZSBwb3NpdGlvbiBvZiB0aGUgZGlzcGxheU9iamVjdCBvbiB0aGUgeSBheGlzIHJlbGF0aXZlIHRvIHRoZSBsb2NhbCBjb29yZGluYXRlcyBvZiB0aGUgcGFyZW50LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLkRpc3BsYXlPYmplY3QjXG4gICAgICovXG4gICAgc2NhbGVZOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuc2NhbGUueTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuc2NhbGUueSA9IHZhbHVlO1xuICAgICAgICAgICAgdGhpcy5kaXJ0eVRyYW5zZm9ybSA9IHRydWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogSW5kaWNhdGVzIGlmIHRoZSBzcHJpdGUgaXMgZ2xvYmFsbHkgdmlzaWJsZS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICogQG1lbWJlcm9mIFBJWEkuRGlzcGxheU9iamVjdCNcbiAgICAgKiBAcmVhZG9ubHlcbiAgICAgKi9cbiAgICB3b3JsZFZpc2libGU6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICB2YXIgaXRlbSA9IHRoaXM7XG5cbiAgICAgICAgICAgIGRvIHtcbiAgICAgICAgICAgICAgICBpZiAoIWl0ZW0udmlzaWJsZSlcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpdGVtID0gaXRlbS5wYXJlbnQ7XG4gICAgICAgICAgICB9IHdoaWxlIChpdGVtKTtcblxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogU2V0cyBhIG1hc2sgZm9yIHRoZSBkaXNwbGF5T2JqZWN0LiBBIG1hc2sgaXMgYW4gb2JqZWN0IHRoYXQgbGltaXRzIHRoZSB2aXNpYmlsaXR5IG9mIGFuIG9iamVjdCB0byB0aGUgc2hhcGUgb2YgdGhlIG1hc2sgYXBwbGllZCB0byBpdC5cbiAgICAgKiBJbiBQSVhJIGEgcmVndWxhciBtYXNrIG11c3QgYmUgYSBQSVhJLkdyYXBoaWNzIG9yIGEgUElYSS5TcHJpdGUgb2JqZWN0LiBUaGlzIGFsbG93cyBmb3IgbXVjaCBmYXN0ZXIgbWFza2luZyBpbiBjYW52YXMgYXMgaXQgdXRpbGlzZXMgc2hhcGUgY2xpcHBpbmcuXG4gICAgICogVG8gcmVtb3ZlIGEgbWFzaywgc2V0IHRoaXMgcHJvcGVydHkgdG8gbnVsbC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuR3JhcGhpY3N8UElYSS5TcHJpdGV9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuRGlzcGxheU9iamVjdCNcbiAgICAgKi9cbiAgICBtYXNrOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX21hc2s7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICBpZiAodGhpcy5fbWFzaylcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9tYXNrLnJlbmRlcmFibGUgPSB0cnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLl9tYXNrID0gdmFsdWU7XG5cbiAgICAgICAgICAgIGlmICh0aGlzLl9tYXNrKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHRoaXMuX21hc2sucmVuZGVyYWJsZSA9IGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIGZpbHRlcnMgZm9yIHRoZSBkaXNwbGF5T2JqZWN0LlxuICAgICAqICogSU1QT1JUQU5UOiBUaGlzIGlzIGEgd2ViR0wgb25seSBmZWF0dXJlIGFuZCB3aWxsIGJlIGlnbm9yZWQgYnkgdGhlIGNhbnZhcyByZW5kZXJlci5cbiAgICAgKiBUbyByZW1vdmUgZmlsdGVycyBzaW1wbHkgc2V0IHRoaXMgcHJvcGVydHkgdG8gJ251bGwnXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLkFic3RyYWN0RmlsdGVyW119XG4gICAgICogQG1lbWJlcm9mIFBJWEkuRGlzcGxheU9iamVjdCNcbiAgICAgKi9cbiAgICBmaWx0ZXJzOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2ZpbHRlcnMgJiYgdGhpcy5fZmlsdGVycy5zbGljZSgpO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5fZmlsdGVycyA9IHZhbHVlICYmIHZhbHVlLnNsaWNlKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbn0pO1xuXG4vKlxuICogVXBkYXRlcyB0aGUgb2JqZWN0IHRyYW5zZm9ybSBmb3IgcmVuZGVyaW5nXG4gKlxuICogVE9ETyAtIE9wdGltaXphdGlvbiBwYXNzIVxuICovXG5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS51cGRhdGVUcmFuc2Zvcm0gPSBmdW5jdGlvbiAoKVxue1xuICAgIHZhciBwdCA9IHRoaXMucGFyZW50LndvcmxkVHJhbnNmb3JtO1xuICAgIHZhciB3dCA9IHRoaXMud29ybGRUcmFuc2Zvcm07XG4gICAgdmFyIGx0ID0gdGhpcy5sb2NhbFRyYW5zZm9ybTtcblxuICAgIGlmKHRoaXMuZGlydHlUcmFuc2Zvcm0pXG4gICAge1xuICAgICAgICAvLyBnZXQgdGhlIG1hdHJpeCB2YWx1ZXMgb2YgdGhlIGRpc3BsYXlvYmplY3QgYmFzZWQgb24gaXRzIHRyYW5zZm9ybSBwcm9wZXJ0aWVzLi5cbiAgICAgICAgbHQuYSAgPSAgdGhpcy5fY3IgKiB0aGlzLnNjYWxlLng7XG4gICAgICAgIGx0LmIgID0gIHRoaXMuX3NyICogdGhpcy5zY2FsZS54O1xuICAgICAgICBsdC5jICA9IC10aGlzLl9zciAqIHRoaXMuc2NhbGUueTtcbiAgICAgICAgbHQuZCAgPSAgdGhpcy5fY3IgKiB0aGlzLnNjYWxlLnk7XG4gICAgICAgIGx0LnR4ID0gIHRoaXMucG9zaXRpb24ueCAtICh0aGlzLnBpdm90LnggKiBsdC5hICsgdGhpcy5waXZvdC55ICogbHQuYyk7XG4gICAgICAgIGx0LnR5ID0gIHRoaXMucG9zaXRpb24ueSAtICh0aGlzLnBpdm90LnggKiBsdC5iICsgdGhpcy5waXZvdC55ICogbHQuZCk7XG4gICAgfVxuXG4gICAgaWYodGhpcy5kaXJ0eVRyYW5zZm9ybSB8fCB0aGlzLnBhcmVudC5kaXJ0eVRyYW5zZm9ybSlcbiAgICB7ICAgICAgXG4gICAgICAgIC8vIGNvbmNhdCB0aGUgcGFyZW50IG1hdHJpeCB3aXRoIHRoZSBvYmplY3RzIHRyYW5zZm9ybS5cbiAgICAgICAgd3QuYSAgPSBsdC5hICAqIHB0LmEgKyBsdC5iICAqIHB0LmM7XG4gICAgICAgIHd0LmIgID0gbHQuYSAgKiBwdC5iICsgbHQuYiAgKiBwdC5kO1xuICAgICAgICB3dC5jICA9IGx0LmMgICogcHQuYSArIGx0LmQgICogcHQuYztcbiAgICAgICAgd3QuZCAgPSBsdC5jICAqIHB0LmIgKyBsdC5kICAqIHB0LmQ7XG4gICAgICAgIHd0LnR4ID0gbHQudHggKiBwdC5hICsgbHQudHkgKiBwdC5jICsgcHQudHg7XG4gICAgICAgIHd0LnR5ID0gbHQudHggKiBwdC5iICsgbHQudHkgKiBwdC5kICsgcHQudHk7ICAgICAgIFxuICAgIFxuICAgICAgICB0aGlzLl9jdXJyZW50Qm91bmRzID0gbnVsbDtcbiAgICB9XG5cbiAgICAvLyBtdWx0aXBseSB0aGUgYWxwaGFzLi5cbiAgICB0aGlzLndvcmxkQWxwaGEgPSB0aGlzLmFscGhhICogdGhpcy5wYXJlbnQud29ybGRBbHBoYTtcblxuICAgIC8vIHJlc2V0IHRoZSBib3VuZHMgZWFjaCB0aW1lIHRoaXMgaXMgY2FsbGVkIVxuICAgIFxufTtcblxuLy8gcGVyZm9ybWFuY2UgaW5jcmVhc2UgdG8gYXZvaWQgdXNpbmcgY2FsbC4uICgxMHggZmFzdGVyKVxuRGlzcGxheU9iamVjdC5wcm90b3R5cGUuZGlzcGxheU9iamVjdFVwZGF0ZVRyYW5zZm9ybSA9IERpc3BsYXlPYmplY3QucHJvdG90eXBlLnVwZGF0ZVRyYW5zZm9ybTtcblxuLyoqXG4gKlxuICpcbiAqIFJldHJpZXZlcyB0aGUgYm91bmRzIG9mIHRoZSBkaXNwbGF5T2JqZWN0IGFzIGEgcmVjdGFuZ2xlIG9iamVjdFxuICpcbiAqIEBwYXJhbSBtYXRyaXgge1BJWEkuTWF0cml4fVxuICogQHJldHVybiB7UElYSS5SZWN0YW5nbGV9IHRoZSByZWN0YW5ndWxhciBib3VuZGluZyBhcmVhXG4gKi9cbkRpc3BsYXlPYmplY3QucHJvdG90eXBlLmdldEJvdW5kcyA9IGZ1bmN0aW9uIChtYXRyaXgpIC8vIGpzaGludCB1bnVzZWQ6ZmFsc2VcbntcbiAgICByZXR1cm4gbWF0aC5SZWN0YW5nbGUuRU1QVFk7XG59O1xuXG4vKipcbiAqIFJldHJpZXZlcyB0aGUgbG9jYWwgYm91bmRzIG9mIHRoZSBkaXNwbGF5T2JqZWN0IGFzIGEgcmVjdGFuZ2xlIG9iamVjdFxuICpcbiAqIEByZXR1cm4ge1BJWEkuUmVjdGFuZ2xlfSB0aGUgcmVjdGFuZ3VsYXIgYm91bmRpbmcgYXJlYVxuICovXG5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS5nZXRMb2NhbEJvdW5kcyA9IGZ1bmN0aW9uICgpXG57XG4gICAgcmV0dXJuIHRoaXMuZ2V0Qm91bmRzKG1hdGguTWF0cml4LklERU5USVRZKTtcbn07XG5cbi8qKlxuICogQ2FsY3VsYXRlcyB0aGUgZ2xvYmFsIHBvc2l0aW9uIG9mIHRoZSBkaXNwbGF5IG9iamVjdFxuICpcbiAqIEBwYXJhbSBwb3NpdGlvbiB7UElYSS5Qb2ludH0gVGhlIHdvcmxkIG9yaWdpbiB0byBjYWxjdWxhdGUgZnJvbVxuICogQHJldHVybiB7UElYSS5Qb2ludH0gQSBwb2ludCBvYmplY3QgcmVwcmVzZW50aW5nIHRoZSBwb3NpdGlvbiBvZiB0aGlzIG9iamVjdFxuICovXG5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS50b0dsb2JhbCA9IGZ1bmN0aW9uIChwb3NpdGlvbilcbntcbiAgICAvLyB0aGlzIHBhcmVudCBjaGVjayBpcyBmb3IganVzdCBpbiBjYXNlIHRoZSBpdGVtIGlzIGEgcm9vdCBvYmplY3QuXG4gICAgLy8gSWYgaXQgaXMgd2UgbmVlZCB0byBnaXZlIGl0IGEgdGVtcG9yYXJ5IHBhcmVudCBzbyB0aGF0IGRpc3BsYXlPYmplY3RVcGRhdGVUcmFuc2Zvcm0gd29ya3MgY29ycmVjdGx5XG4gICAgLy8gdGhpcyBpcyBtYWlubHkgdG8gYXZvaWQgYSBwYXJlbnQgY2hlY2sgaW4gdGhlIG1haW4gbG9vcC4gRXZlcnkgbGl0dGxlIGhlbHBzIGZvciBwZXJmb3JtYW5jZSA6KVxuICAgIGlmKCF0aGlzLnBhcmVudClcbiAgICB7XG4gICAgICAgIHRoaXMucGFyZW50ID0gX3RlbXBEaXNwbGF5T2JqZWN0UGFyZW50O1xuICAgICAgICB0aGlzLmRpc3BsYXlPYmplY3RVcGRhdGVUcmFuc2Zvcm0oKTtcbiAgICAgICAgdGhpcy5wYXJlbnQgPSBudWxsO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICB0aGlzLmRpc3BsYXlPYmplY3RVcGRhdGVUcmFuc2Zvcm0oKTtcbiAgICB9XG5cbiAgICAvLyBkb24ndCBuZWVkIHRvIHVwZGF0ZSB0aGUgbG90XG4gICAgcmV0dXJuIHRoaXMud29ybGRUcmFuc2Zvcm0uYXBwbHkocG9zaXRpb24pO1xufTtcblxuLyoqXG4gKiBDYWxjdWxhdGVzIHRoZSBsb2NhbCBwb3NpdGlvbiBvZiB0aGUgZGlzcGxheSBvYmplY3QgcmVsYXRpdmUgdG8gYW5vdGhlciBwb2ludFxuICpcbiAqIEBwYXJhbSBwb3NpdGlvbiB7UElYSS5Qb2ludH0gVGhlIHdvcmxkIG9yaWdpbiB0byBjYWxjdWxhdGUgZnJvbVxuICogQHBhcmFtIFtmcm9tXSB7UElYSS5EaXNwbGF5T2JqZWN0fSBUaGUgRGlzcGxheU9iamVjdCB0byBjYWxjdWxhdGUgdGhlIGdsb2JhbCBwb3NpdGlvbiBmcm9tXG4gKiBAcGFyYW0gW3BvaW50XSB7UElYSS5Qb2ludH0gQSBQb2ludCBvYmplY3QgaW4gd2hpY2ggdG8gc3RvcmUgdGhlIHZhbHVlLCBvcHRpb25hbCAob3RoZXJ3aXNlIHdpbGwgY3JlYXRlIGEgbmV3IFBvaW50KVxuICogQHJldHVybiB7UElYSS5Qb2ludH0gQSBwb2ludCBvYmplY3QgcmVwcmVzZW50aW5nIHRoZSBwb3NpdGlvbiBvZiB0aGlzIG9iamVjdFxuICovXG5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS50b0xvY2FsID0gZnVuY3Rpb24gKHBvc2l0aW9uLCBmcm9tLCBwb2ludClcbntcbiAgICBpZiAoZnJvbSlcbiAgICB7XG4gICAgICAgIHBvc2l0aW9uID0gZnJvbS50b0dsb2JhbChwb3NpdGlvbik7XG4gICAgfVxuXG4gICAgLy8gdGhpcyBwYXJlbnQgY2hlY2sgaXMgZm9yIGp1c3QgaW4gY2FzZSB0aGUgaXRlbSBpcyBhIHJvb3Qgb2JqZWN0LlxuICAgIC8vIElmIGl0IGlzIHdlIG5lZWQgdG8gZ2l2ZSBpdCBhIHRlbXBvcmFyeSBwYXJlbnQgc28gdGhhdCBkaXNwbGF5T2JqZWN0VXBkYXRlVHJhbnNmb3JtIHdvcmtzIGNvcnJlY3RseVxuICAgIC8vIHRoaXMgaXMgbWFpbmx5IHRvIGF2b2lkIGEgcGFyZW50IGNoZWNrIGluIHRoZSBtYWluIGxvb3AuIEV2ZXJ5IGxpdHRsZSBoZWxwcyBmb3IgcGVyZm9ybWFuY2UgOilcbiAgICBpZighdGhpcy5wYXJlbnQpXG4gICAge1xuICAgICAgICB0aGlzLnBhcmVudCA9IF90ZW1wRGlzcGxheU9iamVjdFBhcmVudDtcbiAgICAgICAgdGhpcy5kaXNwbGF5T2JqZWN0VXBkYXRlVHJhbnNmb3JtKCk7XG4gICAgICAgIHRoaXMucGFyZW50ID0gbnVsbDtcbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgdGhpcy5kaXNwbGF5T2JqZWN0VXBkYXRlVHJhbnNmb3JtKCk7XG4gICAgfVxuXG4gICAgLy8gc2ltcGx5IGFwcGx5IHRoZSBtYXRyaXguLlxuICAgIHJldHVybiB0aGlzLndvcmxkVHJhbnNmb3JtLmFwcGx5SW52ZXJzZShwb3NpdGlvbiwgcG9pbnQpO1xufTtcblxuLyoqXG4gKiBSZW5kZXJzIHRoZSBvYmplY3QgdXNpbmcgdGhlIFdlYkdMIHJlbmRlcmVyXG4gKlxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLldlYkdMUmVuZGVyZXJ9IFRoZSByZW5kZXJlclxuICogQHByaXZhdGVcbiAqL1xuRGlzcGxheU9iamVjdC5wcm90b3R5cGUucmVuZGVyV2ViR0wgPSBmdW5jdGlvbiAocmVuZGVyZXIpIC8vIGpzaGludCB1bnVzZWQ6ZmFsc2VcbntcbiAgICAvLyBPVkVSV1JJVEU7XG59O1xuXG4vKipcbiAqIFJlbmRlcnMgdGhlIG9iamVjdCB1c2luZyB0aGUgQ2FudmFzIHJlbmRlcmVyXG4gKlxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLkNhbnZhc1JlbmRlcmVyfSBUaGUgcmVuZGVyZXJcbiAqIEBwcml2YXRlXG4gKi9cbkRpc3BsYXlPYmplY3QucHJvdG90eXBlLnJlbmRlckNhbnZhcyA9IGZ1bmN0aW9uIChyZW5kZXJlcikgLy8ganNoaW50IHVudXNlZDpmYWxzZVxue1xuICAgIC8vIE9WRVJXUklURTtcbn07XG4vKipcbiAqIFVzZWZ1bCBmdW5jdGlvbiB0aGF0IHJldHVybnMgYSB0ZXh0dXJlIG9mIHRoZSBkaXNwbGF5IG9iamVjdCB0aGF0IGNhbiB0aGVuIGJlIHVzZWQgdG8gY3JlYXRlIHNwcml0ZXNcbiAqIFRoaXMgY2FuIGJlIHF1aXRlIHVzZWZ1bCBpZiB5b3VyIGRpc3BsYXlPYmplY3QgaXMgc3RhdGljIC8gY29tcGxpY2F0ZWQgYW5kIG5lZWRzIHRvIGJlIHJldXNlZCBtdWx0aXBsZSB0aW1lcy5cbiAqXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuQ2FudmFzUmVuZGVyZXJ8UElYSS5XZWJHTFJlbmRlcmVyfSBUaGUgcmVuZGVyZXIgdXNlZCB0byBnZW5lcmF0ZSB0aGUgdGV4dHVyZS5cbiAqIEBwYXJhbSBzY2FsZU1vZGUge251bWJlcn0gU2VlIHtAbGluayBQSVhJLlNDQUxFX01PREVTfSBmb3IgcG9zc2libGUgdmFsdWVzXG4gKiBAcGFyYW0gcmVzb2x1dGlvbiB7bnVtYmVyfSBUaGUgcmVzb2x1dGlvbiBvZiB0aGUgdGV4dHVyZSBiZWluZyBnZW5lcmF0ZWRcbiAqIEByZXR1cm4ge1BJWEkuVGV4dHVyZX0gYSB0ZXh0dXJlIG9mIHRoZSBkaXNwbGF5IG9iamVjdFxuICovXG5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS5nZW5lcmF0ZVRleHR1cmUgPSBmdW5jdGlvbiAocmVuZGVyZXIsIHNjYWxlTW9kZSwgcmVzb2x1dGlvbilcbntcbiAgICB2YXIgYm91bmRzID0gdGhpcy5nZXRMb2NhbEJvdW5kcygpO1xuXG4gICAgdmFyIHJlbmRlclRleHR1cmUgPSBuZXcgUmVuZGVyVGV4dHVyZShyZW5kZXJlciwgYm91bmRzLndpZHRoIHwgMCwgYm91bmRzLmhlaWdodCB8IDAsIHNjYWxlTW9kZSwgcmVzb2x1dGlvbik7XG5cbiAgICBfdGVtcE1hdHJpeC50eCA9IC1ib3VuZHMueDtcbiAgICBfdGVtcE1hdHJpeC50eSA9IC1ib3VuZHMueTtcblxuICAgIHJlbmRlclRleHR1cmUucmVuZGVyKHRoaXMsIF90ZW1wTWF0cml4KTtcblxuICAgIHJldHVybiByZW5kZXJUZXh0dXJlO1xufTtcblxuLyoqXG4gKiBTZXQgdGhlIHBhcmVudCBDb250YWluZXIgb2YgdGhpcyBEaXNwbGF5T2JqZWN0XG4gKlxuICogQHBhcmFtIGNvbnRhaW5lciB7Q29udGFpbmVyfSBUaGUgQ29udGFpbmVyIHRvIGFkZCB0aGlzIERpc3BsYXlPYmplY3QgdG9cbiAqIEByZXR1cm4ge0NvbnRhaW5lcn0gVGhlIENvbnRhaW5lciB0aGF0IHRoaXMgRGlzcGxheU9iamVjdCB3YXMgYWRkZWQgdG9cbiAqL1xuRGlzcGxheU9iamVjdC5wcm90b3R5cGUuc2V0UGFyZW50ID0gZnVuY3Rpb24gKGNvbnRhaW5lcilcbntcbiAgICBpZiAoIWNvbnRhaW5lciB8fCAhY29udGFpbmVyLmFkZENoaWxkKVxuICAgIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdzZXRQYXJlbnQ6IEFyZ3VtZW50IG11c3QgYmUgYSBDb250YWluZXInKTtcbiAgICB9XG5cbiAgICBjb250YWluZXIuYWRkQ2hpbGQodGhpcyk7XG4gICAgcmV0dXJuIGNvbnRhaW5lcjtcbn07XG5cbi8qKlxuICogQ29udmVuaWVuY2UgZnVuY3Rpb24gdG8gc2V0IHRoZSBwb3N0aW9uLCBzY2FsZSwgc2tldyBhbmQgcGl2b3QgYXQgb25jZS5cbiAqXG4gKiBAcGFyYW0gW3g9MF0ge251bWJlcn0gVGhlIFggcG9zaXRpb25cbiAqIEBwYXJhbSBbeT0wXSB7bnVtYmVyfSBUaGUgWSBwb3NpdGlvblxuICogQHBhcmFtIFtzY2FsZVg9MV0ge251bWJlcn0gVGhlIFggc2NhbGUgdmFsdWVcbiAqIEBwYXJhbSBbc2NhbGVZPTFdIHtudW1iZXJ9IFRoZSBZIHNjYWxlIHZhbHVlXG4gKiBAcGFyYW0gW3JvdGF0aW9uPTBdIHtudW1iZXJ9IFRoZSByb3RhdGlvblxuICogQHBhcmFtIFtza2V3WD0wXSB7bnVtYmVyfSBUaGUgWCBza2V3IHZhbHVlXG4gKiBAcGFyYW0gW3NrZXdZPTBdIHtudW1iZXJ9IFRoZSBZIHNrZXcgdmFsdWVcbiAqIEBwYXJhbSBbcGl2b3RYPTBdIHtudW1iZXJ9IFRoZSBYIHBpdm90IHZhbHVlXG4gKiBAcGFyYW0gW3Bpdm90WT0wXSB7bnVtYmVyfSBUaGUgWSBwaXZvdCB2YWx1ZVxuICogQHJldHVybiB7UElYSS5EaXNwbGF5T2JqZWN0fVxuICovXG5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS5zZXRUcmFuc2Zvcm0gPSBmdW5jdGlvbih4LCB5LCBzY2FsZVgsIHNjYWxlWSwgcm90YXRpb24sIHNrZXdYLCBza2V3WSwgcGl2b3RYLCBwaXZvdFkpIC8vanNoaW50IGlnbm9yZTpsaW5lXG57XG4gICAgdGhpcy5wb3NpdGlvbi54ID0geCB8fCAwO1xuICAgIHRoaXMucG9zaXRpb24ueSA9IHkgfHwgMDtcbiAgICB0aGlzLnNjYWxlLnggPSAhc2NhbGVYID8gMSA6IHNjYWxlWDtcbiAgICB0aGlzLnNjYWxlLnkgPSAhc2NhbGVZID8gMSA6IHNjYWxlWTtcbiAgICB0aGlzLnJvdGF0aW9uID0gcm90YXRpb24gfHwgMDtcbiAgICB0aGlzLnNrZXcueCA9IHNrZXdYIHx8IDA7XG4gICAgdGhpcy5za2V3LnkgPSBza2V3WSB8fCAwO1xuICAgIHRoaXMucGl2b3QueCA9IHBpdm90WCB8fCAwO1xuICAgIHRoaXMucGl2b3QueSA9IHBpdm90WSB8fCAwO1xuICAgIHRoaXMuZGlydHlUcmFuc2Zvcm0gPSB0cnVlO1xuICAgIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBCYXNlIGRlc3Ryb3kgbWV0aG9kIGZvciBnZW5lcmljIGRpc3BsYXkgb2JqZWN0c1xuICpcbiAqL1xuRGlzcGxheU9iamVjdC5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uICgpXG57XG5cbiAgICB0aGlzLnBvc2l0aW9uID0gbnVsbDtcbiAgICB0aGlzLnNjYWxlID0gbnVsbDtcbiAgICB0aGlzLnBpdm90ID0gbnVsbDtcbiAgICB0aGlzLnNrZXcgPSBudWxsO1xuXG4gICAgdGhpcy5wYXJlbnQgPSBudWxsO1xuXG4gICAgdGhpcy5fYm91bmRzID0gbnVsbDtcbiAgICB0aGlzLl9jdXJyZW50Qm91bmRzID0gbnVsbDtcbiAgICB0aGlzLl9tYXNrID0gbnVsbDtcblxuICAgIHRoaXMud29ybGRUcmFuc2Zvcm0gPSBudWxsO1xuICAgIHRoaXMuZmlsdGVyQXJlYSA9IG51bGw7XG59O1xuIiwidmFyIENvbnRhaW5lciA9IHJlcXVpcmUoJy4uL2Rpc3BsYXkvQ29udGFpbmVyJyksXG4gICAgVGV4dHVyZSA9IHJlcXVpcmUoJy4uL3RleHR1cmVzL1RleHR1cmUnKSxcbiAgICBDYW52YXNCdWZmZXIgPSByZXF1aXJlKCcuLi9yZW5kZXJlcnMvY2FudmFzL3V0aWxzL0NhbnZhc0J1ZmZlcicpLFxuICAgIENhbnZhc0dyYXBoaWNzID0gcmVxdWlyZSgnLi4vcmVuZGVyZXJzL2NhbnZhcy91dGlscy9DYW52YXNHcmFwaGljcycpLFxuICAgIEdyYXBoaWNzRGF0YSA9IHJlcXVpcmUoJy4vR3JhcGhpY3NEYXRhJyksXG4gICAgbWF0aCA9IHJlcXVpcmUoJy4uL21hdGgnKSxcbiAgICBDT05TVCA9IHJlcXVpcmUoJy4uL2NvbnN0JyksXG4gICAgdGVtcFBvaW50ID0gbmV3IG1hdGguUG9pbnQoKTtcblxuLyoqXG4gKiBUaGUgR3JhcGhpY3MgY2xhc3MgY29udGFpbnMgbWV0aG9kcyB1c2VkIHRvIGRyYXcgcHJpbWl0aXZlIHNoYXBlcyBzdWNoIGFzIGxpbmVzLCBjaXJjbGVzIGFuZFxuICogcmVjdGFuZ2xlcyB0byB0aGUgZGlzcGxheSwgYW5kIHRvIGNvbG9yIGFuZCBmaWxsIHRoZW0uXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLkNvbnRhaW5lclxuICogQG1lbWJlcm9mIFBJWElcbiAqL1xuZnVuY3Rpb24gR3JhcGhpY3MoKVxue1xuICAgIENvbnRhaW5lci5jYWxsKHRoaXMpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGFscGhhIHZhbHVlIHVzZWQgd2hlbiBmaWxsaW5nIHRoZSBHcmFwaGljcyBvYmplY3QuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMVxuICAgICAqL1xuICAgIHRoaXMuZmlsbEFscGhhID0gMTtcblxuICAgIC8qKlxuICAgICAqIFRoZSB3aWR0aCAodGhpY2tuZXNzKSBvZiBhbnkgbGluZXMgZHJhd24uXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMFxuICAgICAqL1xuICAgIHRoaXMubGluZVdpZHRoID0gMDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBjb2xvciBvZiBhbnkgbGluZXMgZHJhd24uXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtzdHJpbmd9XG4gICAgICogQGRlZmF1bHQgMFxuICAgICAqL1xuICAgIHRoaXMubGluZUNvbG9yID0gMDtcblxuICAgIC8qKlxuICAgICAqIEdyYXBoaWNzIGRhdGFcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuR3JhcGhpY3NEYXRhW119XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLmdyYXBoaWNzRGF0YSA9IFtdO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHRpbnQgYXBwbGllZCB0byB0aGUgZ3JhcGhpYyBzaGFwZS4gVGhpcyBpcyBhIGhleCB2YWx1ZS4gQXBwbHkgYSB2YWx1ZSBvZiAweEZGRkZGRiB0byByZXNldCB0aGUgdGludC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAweEZGRkZGRlxuICAgICAqL1xuICAgIHRoaXMudGludCA9IDB4RkZGRkZGO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHByZXZpb3VzIHRpbnQgYXBwbGllZCB0byB0aGUgZ3JhcGhpYyBzaGFwZS4gVXNlZCB0byBjb21wYXJlIHRvIHRoZSBjdXJyZW50IHRpbnQgYW5kIGNoZWNrIGlmIHRoZXJlcyBjaGFuZ2UuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAZGVmYXVsdCAweEZGRkZGRlxuICAgICAqL1xuICAgIHRoaXMuX3ByZXZUaW50ID0gMHhGRkZGRkY7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYmxlbmQgbW9kZSB0byBiZSBhcHBsaWVkIHRvIHRoZSBncmFwaGljIHNoYXBlLiBBcHBseSBhIHZhbHVlIG9mIGBQSVhJLkJMRU5EX01PREVTLk5PUk1BTGAgdG8gcmVzZXQgdGhlIGJsZW5kIG1vZGUuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgUElYSS5CTEVORF9NT0RFUy5OT1JNQUw7XG4gICAgICogQHNlZSBQSVhJLkJMRU5EX01PREVTXG4gICAgICovXG4gICAgdGhpcy5ibGVuZE1vZGUgPSBDT05TVC5CTEVORF9NT0RFUy5OT1JNQUw7XG5cbiAgICAvKipcbiAgICAgKiBDdXJyZW50IHBhdGhcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuR3JhcGhpY3NEYXRhfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5jdXJyZW50UGF0aCA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBBcnJheSBjb250YWluaW5nIHNvbWUgV2ViR0wtcmVsYXRlZCBwcm9wZXJ0aWVzIHVzZWQgYnkgdGhlIFdlYkdMIHJlbmRlcmVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7b2JqZWN0PG51bWJlciwgb2JqZWN0Pn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIC8vIFRPRE8gLSBfd2ViZ2wgc2hvdWxkIHVzZSBhIHByb3RvdHlwZSBvYmplY3QsIG5vdCBhIHJhbmRvbSB1bmRvY3VtZW50ZWQgb2JqZWN0Li4uXG4gICAgdGhpcy5fd2ViR0wgPSB7fTtcblxuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgdGhpcyBzaGFwZSBpcyBiZWluZyB1c2VkIGFzIGEgbWFzay5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICovXG4gICAgdGhpcy5pc01hc2sgPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBib3VuZHMnIHBhZGRpbmcgdXNlZCBmb3IgYm91bmRzIGNhbGN1bGF0aW9uLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMuYm91bmRzUGFkZGluZyA9IDA7XG5cbiAgICAvKipcbiAgICAgKiBBIGNhY2hlIG9mIHRoZSBsb2NhbCBib3VuZHMgdG8gcHJldmVudCByZWNhbGN1bGF0aW9uLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5SZWN0YW5nbGV9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9sb2NhbEJvdW5kcyA9IG5ldyBtYXRoLlJlY3RhbmdsZSgwLDAsMSwxKTtcblxuICAgIC8qKlxuICAgICAqIFVzZWQgdG8gZGV0ZWN0IGlmIHRoZSBncmFwaGljcyBvYmplY3QgaGFzIGNoYW5nZWQuIElmIHRoaXMgaXMgc2V0IHRvIHRydWUgdGhlbiB0aGUgZ3JhcGhpY3NcbiAgICAgKiBvYmplY3Qgd2lsbCBiZSByZWNhbGN1bGF0ZWQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5kaXJ0eSA9IHRydWU7XG5cbiAgICAvKipcbiAgICAgKiBVc2VkIHRvIGRldGVjdCBpZiB0aGUgV2ViR0wgZ3JhcGhpY3Mgb2JqZWN0IGhhcyBjaGFuZ2VkLiBJZiB0aGlzIGlzIHNldCB0byB0cnVlIHRoZW4gdGhlXG4gICAgICogZ3JhcGhpY3Mgb2JqZWN0IHdpbGwgYmUgcmVjYWxjdWxhdGVkLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuZ2xEaXJ0eSA9IGZhbHNlO1xuXG4gICAgdGhpcy5ib3VuZHNEaXJ0eSA9IHRydWU7XG5cbiAgICAvKipcbiAgICAgKiBVc2VkIHRvIGRldGVjdCBpZiB0aGUgY2FjaGVkIHNwcml0ZSBvYmplY3QgbmVlZHMgdG8gYmUgdXBkYXRlZC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLmNhY2hlZFNwcml0ZURpcnR5ID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBXaGVuIGNhY2hlQXNCaXRtYXAgaXMgc2V0IHRvIHRydWUgdGhlIGdyYXBoaWNzIG9iamVjdCB3aWxsIGJlIHJlbmRlcmVkIGFzIGlmIGl0IHdhcyBhIHNwcml0ZS5cbiAgICAgKiBUaGlzIGlzIHVzZWZ1bCBpZiB5b3VyIGdyYXBoaWNzIGVsZW1lbnQgZG9lcyBub3QgY2hhbmdlIG9mdGVuLCBhcyBpdCB3aWxsIHNwZWVkIHVwIHRoZSByZW5kZXJpbmdcbiAgICAgKiBvZiB0aGUgb2JqZWN0IGluIGV4Y2hhbmdlIGZvciB0YWtpbmcgdXAgdGV4dHVyZSBtZW1vcnkuIEl0IGlzIGFsc28gdXNlZnVsIGlmIHlvdSBuZWVkIHRoZSBncmFwaGljc1xuICAgICAqIG9iamVjdCB0byBiZSBhbnRpLWFsaWFzZWQsIGJlY2F1c2UgaXQgd2lsbCBiZSByZW5kZXJlZCB1c2luZyBjYW52YXMuIFRoaXMgaXMgbm90IHJlY29tbWVuZGVkIGlmXG4gICAgICogeW91IGFyZSBjb25zdGFudGx5IHJlZHJhd2luZyB0aGUgZ3JhcGhpY3MgZWxlbWVudC5cbiAgICAgKlxuICAgICAqIEBuYW1lIGNhY2hlQXNCaXRtYXBcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLkdyYXBoaWNzI1xuICAgICAqIEBkZWZhdWx0IGZhbHNlXG4gICAgICovXG59XG5cbi8vIGNvbnN0cnVjdG9yXG5HcmFwaGljcy5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKENvbnRhaW5lci5wcm90b3R5cGUpO1xuR3JhcGhpY3MucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gR3JhcGhpY3M7XG5tb2R1bGUuZXhwb3J0cyA9IEdyYXBoaWNzO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBuZXcgR3JhcGhpY3Mgb2JqZWN0IHdpdGggdGhlIHNhbWUgdmFsdWVzIGFzIHRoaXMgb25lLlxuICogTm90ZSB0aGF0IHRoZSBvbmx5IHRoZSBwcm9wZXJ0aWVzIG9mIHRoZSBvYmplY3QgYXJlIGNsb25lZCwgbm90IGl0cyB0cmFuc2Zvcm0gKHBvc2l0aW9uLHNjYWxlLGV0YylcbiAqXG4gKiBAcmV0dXJuIHtQSVhJLkdyYXBoaWNzfVxuICovXG5HcmFwaGljcy5wcm90b3R5cGUuY2xvbmUgPSBmdW5jdGlvbiAoKVxue1xuICAgIHZhciBjbG9uZSA9IG5ldyBHcmFwaGljcygpO1xuXG4gICAgY2xvbmUucmVuZGVyYWJsZSAgICA9IHRoaXMucmVuZGVyYWJsZTtcbiAgICBjbG9uZS5maWxsQWxwaGEgICAgID0gdGhpcy5maWxsQWxwaGE7XG4gICAgY2xvbmUubGluZVdpZHRoICAgICA9IHRoaXMubGluZVdpZHRoO1xuICAgIGNsb25lLmxpbmVDb2xvciAgICAgPSB0aGlzLmxpbmVDb2xvcjtcbiAgICBjbG9uZS50aW50ICAgICAgICAgID0gdGhpcy50aW50O1xuICAgIGNsb25lLmJsZW5kTW9kZSAgICAgPSB0aGlzLmJsZW5kTW9kZTtcbiAgICBjbG9uZS5pc01hc2sgICAgICAgID0gdGhpcy5pc01hc2s7XG4gICAgY2xvbmUuYm91bmRzUGFkZGluZyA9IHRoaXMuYm91bmRzUGFkZGluZztcbiAgICBjbG9uZS5kaXJ0eSAgICAgICAgID0gdHJ1ZTtcbiAgICBjbG9uZS5nbERpcnR5ICAgICAgID0gdHJ1ZTtcbiAgICBjbG9uZS5jYWNoZWRTcHJpdGVEaXJ0eSA9IHRoaXMuY2FjaGVkU3ByaXRlRGlydHk7XG5cbiAgICAvLyBjb3B5IGdyYXBoaWNzIGRhdGFcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuZ3JhcGhpY3NEYXRhLmxlbmd0aDsgKytpKVxuICAgIHtcbiAgICAgICAgY2xvbmUuZ3JhcGhpY3NEYXRhLnB1c2godGhpcy5ncmFwaGljc0RhdGFbaV0uY2xvbmUoKSk7XG4gICAgfVxuXG4gICAgY2xvbmUuY3VycmVudFBhdGggPSBjbG9uZS5ncmFwaGljc0RhdGFbY2xvbmUuZ3JhcGhpY3NEYXRhLmxlbmd0aCAtIDFdO1xuXG4gICAgY2xvbmUudXBkYXRlTG9jYWxCb3VuZHMoKTtcblxuICAgIHJldHVybiBjbG9uZTtcbn07XG5cbi8qKlxuICogU3BlY2lmaWVzIHRoZSBsaW5lIHN0eWxlIHVzZWQgZm9yIHN1YnNlcXVlbnQgY2FsbHMgdG8gR3JhcGhpY3MgbWV0aG9kcyBzdWNoIGFzIHRoZSBsaW5lVG8oKSBtZXRob2Qgb3IgdGhlIGRyYXdDaXJjbGUoKSBtZXRob2QuXG4gKlxuICogQHBhcmFtIGxpbmVXaWR0aCB7bnVtYmVyfSB3aWR0aCBvZiB0aGUgbGluZSB0byBkcmF3LCB3aWxsIHVwZGF0ZSB0aGUgb2JqZWN0cyBzdG9yZWQgc3R5bGVcbiAqIEBwYXJhbSBjb2xvciB7bnVtYmVyfSBjb2xvciBvZiB0aGUgbGluZSB0byBkcmF3LCB3aWxsIHVwZGF0ZSB0aGUgb2JqZWN0cyBzdG9yZWQgc3R5bGVcbiAqIEBwYXJhbSBhbHBoYSB7bnVtYmVyfSBhbHBoYSBvZiB0aGUgbGluZSB0byBkcmF3LCB3aWxsIHVwZGF0ZSB0aGUgb2JqZWN0cyBzdG9yZWQgc3R5bGVcbiAqIEByZXR1cm4ge1BJWEkuR3JhcGhpY3N9XG4gKi9cbkdyYXBoaWNzLnByb3RvdHlwZS5saW5lU3R5bGUgPSBmdW5jdGlvbiAobGluZVdpZHRoLCBjb2xvciwgYWxwaGEpXG57XG4gICAgdGhpcy5saW5lV2lkdGggPSBsaW5lV2lkdGggfHwgMDtcbiAgICB0aGlzLmxpbmVDb2xvciA9IGNvbG9yIHx8IDA7XG4gICAgdGhpcy5saW5lQWxwaGEgPSAoYWxwaGEgPT09IHVuZGVmaW5lZCkgPyAxIDogYWxwaGE7XG5cbiAgICBpZiAodGhpcy5jdXJyZW50UGF0aClcbiAgICB7XG4gICAgICAgIGlmICh0aGlzLmN1cnJlbnRQYXRoLnNoYXBlLnBvaW50cy5sZW5ndGgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIC8vIGhhbGZ3YXkgdGhyb3VnaCBhIGxpbmU/IHN0YXJ0IGEgbmV3IG9uZSFcbiAgICAgICAgICAgIHZhciBzaGFwZSA9IG5ldyBtYXRoLlBvbHlnb24odGhpcy5jdXJyZW50UGF0aC5zaGFwZS5wb2ludHMuc2xpY2UoLTIpKTtcbiAgICAgICAgICAgIHNoYXBlLmNsb3NlZCA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5kcmF3U2hhcGUoc2hhcGUpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2VcbiAgICAgICAge1xuICAgICAgICAgICAgLy8gb3RoZXJ3aXNlIGl0cyBlbXB0eSBzbyBsZXRzIGp1c3Qgc2V0IHRoZSBsaW5lIHByb3BlcnRpZXNcbiAgICAgICAgICAgIHRoaXMuY3VycmVudFBhdGgubGluZVdpZHRoID0gdGhpcy5saW5lV2lkdGg7XG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRQYXRoLmxpbmVDb2xvciA9IHRoaXMubGluZUNvbG9yO1xuICAgICAgICAgICAgdGhpcy5jdXJyZW50UGF0aC5saW5lQWxwaGEgPSB0aGlzLmxpbmVBbHBoYTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBNb3ZlcyB0aGUgY3VycmVudCBkcmF3aW5nIHBvc2l0aW9uIHRvIHgsIHkuXG4gKlxuICogQHBhcmFtIHgge251bWJlcn0gdGhlIFggY29vcmRpbmF0ZSB0byBtb3ZlIHRvXG4gKiBAcGFyYW0geSB7bnVtYmVyfSB0aGUgWSBjb29yZGluYXRlIHRvIG1vdmUgdG9cbiAqIEByZXR1cm4ge1BJWEkuR3JhcGhpY3N9XG4gICovXG5HcmFwaGljcy5wcm90b3R5cGUubW92ZVRvID0gZnVuY3Rpb24gKHgsIHkpXG57XG4gICAgdmFyIHNoYXBlID0gbmV3IG1hdGguUG9seWdvbihbeCx5XSk7XG4gICAgc2hhcGUuY2xvc2VkID0gZmFsc2U7XG4gICAgdGhpcy5kcmF3U2hhcGUoc2hhcGUpO1xuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIERyYXdzIGEgbGluZSB1c2luZyB0aGUgY3VycmVudCBsaW5lIHN0eWxlIGZyb20gdGhlIGN1cnJlbnQgZHJhd2luZyBwb3NpdGlvbiB0byAoeCwgeSk7XG4gKiBUaGUgY3VycmVudCBkcmF3aW5nIHBvc2l0aW9uIGlzIHRoZW4gc2V0IHRvICh4LCB5KS5cbiAqXG4gKiBAcGFyYW0geCB7bnVtYmVyfSB0aGUgWCBjb29yZGluYXRlIHRvIGRyYXcgdG9cbiAqIEBwYXJhbSB5IHtudW1iZXJ9IHRoZSBZIGNvb3JkaW5hdGUgdG8gZHJhdyB0b1xuICogQHJldHVybiB7UElYSS5HcmFwaGljc31cbiAqL1xuR3JhcGhpY3MucHJvdG90eXBlLmxpbmVUbyA9IGZ1bmN0aW9uICh4LCB5KVxue1xuICAgIHRoaXMuY3VycmVudFBhdGguc2hhcGUucG9pbnRzLnB1c2goeCwgeSk7XG4gICAgdGhpcy5kaXJ0eSA9IHRydWU7XG5cbiAgICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogQ2FsY3VsYXRlIHRoZSBwb2ludHMgZm9yIGEgcXVhZHJhdGljIGJlemllciBjdXJ2ZSBhbmQgdGhlbiBkcmF3cyBpdC5cbiAqIEJhc2VkIG9uOiBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy83ODUwOTcvaG93LWRvLWktaW1wbGVtZW50LWEtYmV6aWVyLWN1cnZlLWluLWNcbiAqXG4gKiBAcGFyYW0gY3BYIHtudW1iZXJ9IENvbnRyb2wgcG9pbnQgeFxuICogQHBhcmFtIGNwWSB7bnVtYmVyfSBDb250cm9sIHBvaW50IHlcbiAqIEBwYXJhbSB0b1gge251bWJlcn0gRGVzdGluYXRpb24gcG9pbnQgeFxuICogQHBhcmFtIHRvWSB7bnVtYmVyfSBEZXN0aW5hdGlvbiBwb2ludCB5XG4gKiBAcmV0dXJuIHtQSVhJLkdyYXBoaWNzfVxuICovXG5HcmFwaGljcy5wcm90b3R5cGUucXVhZHJhdGljQ3VydmVUbyA9IGZ1bmN0aW9uIChjcFgsIGNwWSwgdG9YLCB0b1kpXG57XG4gICAgaWYgKHRoaXMuY3VycmVudFBhdGgpXG4gICAge1xuICAgICAgICBpZiAodGhpcy5jdXJyZW50UGF0aC5zaGFwZS5wb2ludHMubGVuZ3RoID09PSAwKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRQYXRoLnNoYXBlLnBvaW50cyA9IFswLCAwXTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICB0aGlzLm1vdmVUbygwLDApO1xuICAgIH1cblxuICAgIHZhciB4YSxcbiAgICAgICAgeWEsXG4gICAgICAgIG4gPSAyMCxcbiAgICAgICAgcG9pbnRzID0gdGhpcy5jdXJyZW50UGF0aC5zaGFwZS5wb2ludHM7XG5cbiAgICBpZiAocG9pbnRzLmxlbmd0aCA9PT0gMClcbiAgICB7XG4gICAgICAgIHRoaXMubW92ZVRvKDAsIDApO1xuICAgIH1cblxuICAgIHZhciBmcm9tWCA9IHBvaW50c1twb2ludHMubGVuZ3RoLTJdO1xuICAgIHZhciBmcm9tWSA9IHBvaW50c1twb2ludHMubGVuZ3RoLTFdO1xuXG4gICAgdmFyIGogPSAwO1xuICAgIGZvciAodmFyIGkgPSAxOyBpIDw9IG47ICsraSlcbiAgICB7XG4gICAgICAgIGogPSBpIC8gbjtcblxuICAgICAgICB4YSA9IGZyb21YICsgKCAoY3BYIC0gZnJvbVgpICogaiApO1xuICAgICAgICB5YSA9IGZyb21ZICsgKCAoY3BZIC0gZnJvbVkpICogaiApO1xuXG4gICAgICAgIHBvaW50cy5wdXNoKCB4YSArICggKChjcFggKyAoICh0b1ggLSBjcFgpICogaiApKSAtIHhhKSAqIGogKSxcbiAgICAgICAgICAgICAgICAgICAgIHlhICsgKCAoKGNwWSArICggKHRvWSAtIGNwWSkgKiBqICkpIC0geWEpICogaiApICk7XG4gICAgfVxuXG4gICAgdGhpcy5kaXJ0eSA9IHRoaXMuYm91bmRzRGlydHkgPSB0cnVlO1xuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIENhbGN1bGF0ZSB0aGUgcG9pbnRzIGZvciBhIGJlemllciBjdXJ2ZSBhbmQgdGhlbiBkcmF3cyBpdC5cbiAqXG4gKiBAcGFyYW0gY3BYIHtudW1iZXJ9IENvbnRyb2wgcG9pbnQgeFxuICogQHBhcmFtIGNwWSB7bnVtYmVyfSBDb250cm9sIHBvaW50IHlcbiAqIEBwYXJhbSBjcFgyIHtudW1iZXJ9IFNlY29uZCBDb250cm9sIHBvaW50IHhcbiAqIEBwYXJhbSBjcFkyIHtudW1iZXJ9IFNlY29uZCBDb250cm9sIHBvaW50IHlcbiAqIEBwYXJhbSB0b1gge251bWJlcn0gRGVzdGluYXRpb24gcG9pbnQgeFxuICogQHBhcmFtIHRvWSB7bnVtYmVyfSBEZXN0aW5hdGlvbiBwb2ludCB5XG4gKiBAcmV0dXJuIHtQSVhJLkdyYXBoaWNzfVxuICovXG5HcmFwaGljcy5wcm90b3R5cGUuYmV6aWVyQ3VydmVUbyA9IGZ1bmN0aW9uIChjcFgsIGNwWSwgY3BYMiwgY3BZMiwgdG9YLCB0b1kpXG57XG4gICAgaWYgKHRoaXMuY3VycmVudFBhdGgpXG4gICAge1xuICAgICAgICBpZiAodGhpcy5jdXJyZW50UGF0aC5zaGFwZS5wb2ludHMubGVuZ3RoID09PSAwKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRQYXRoLnNoYXBlLnBvaW50cyA9IFswLCAwXTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICB0aGlzLm1vdmVUbygwLDApO1xuICAgIH1cblxuICAgIHZhciBuID0gMjAsXG4gICAgICAgIGR0LFxuICAgICAgICBkdDIsXG4gICAgICAgIGR0MyxcbiAgICAgICAgdDIsXG4gICAgICAgIHQzLFxuICAgICAgICBwb2ludHMgPSB0aGlzLmN1cnJlbnRQYXRoLnNoYXBlLnBvaW50cztcblxuICAgIHZhciBmcm9tWCA9IHBvaW50c1twb2ludHMubGVuZ3RoLTJdO1xuICAgIHZhciBmcm9tWSA9IHBvaW50c1twb2ludHMubGVuZ3RoLTFdO1xuXG4gICAgdmFyIGogPSAwO1xuXG4gICAgZm9yICh2YXIgaSA9IDE7IGkgPD0gbjsgKytpKVxuICAgIHtcbiAgICAgICAgaiA9IGkgLyBuO1xuXG4gICAgICAgIGR0ID0gKDEgLSBqKTtcbiAgICAgICAgZHQyID0gZHQgKiBkdDtcbiAgICAgICAgZHQzID0gZHQyICogZHQ7XG5cbiAgICAgICAgdDIgPSBqICogajtcbiAgICAgICAgdDMgPSB0MiAqIGo7XG5cbiAgICAgICAgcG9pbnRzLnB1c2goIGR0MyAqIGZyb21YICsgMyAqIGR0MiAqIGogKiBjcFggKyAzICogZHQgKiB0MiAqIGNwWDIgKyB0MyAqIHRvWCxcbiAgICAgICAgICAgICAgICAgICAgIGR0MyAqIGZyb21ZICsgMyAqIGR0MiAqIGogKiBjcFkgKyAzICogZHQgKiB0MiAqIGNwWTIgKyB0MyAqIHRvWSk7XG4gICAgfVxuXG4gICAgdGhpcy5kaXJ0eSA9IHRoaXMuYm91bmRzRGlydHkgPSB0cnVlO1xuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIFRoZSBhcmNUbygpIG1ldGhvZCBjcmVhdGVzIGFuIGFyYy9jdXJ2ZSBiZXR3ZWVuIHR3byB0YW5nZW50cyBvbiB0aGUgY2FudmFzLlxuICpcbiAqIFwiYm9ycm93ZWRcIiBmcm9tIGh0dHBzOi8vY29kZS5nb29nbGUuY29tL3AvZnhjYW52YXMvIC0gdGhhbmtzIGdvb2dsZSFcbiAqXG4gKiBAcGFyYW0geDEge251bWJlcn0gVGhlIHgtY29vcmRpbmF0ZSBvZiB0aGUgYmVnaW5uaW5nIG9mIHRoZSBhcmNcbiAqIEBwYXJhbSB5MSB7bnVtYmVyfSBUaGUgeS1jb29yZGluYXRlIG9mIHRoZSBiZWdpbm5pbmcgb2YgdGhlIGFyY1xuICogQHBhcmFtIHgyIHtudW1iZXJ9IFRoZSB4LWNvb3JkaW5hdGUgb2YgdGhlIGVuZCBvZiB0aGUgYXJjXG4gKiBAcGFyYW0geTIge251bWJlcn0gVGhlIHktY29vcmRpbmF0ZSBvZiB0aGUgZW5kIG9mIHRoZSBhcmNcbiAqIEBwYXJhbSByYWRpdXMge251bWJlcn0gVGhlIHJhZGl1cyBvZiB0aGUgYXJjXG4gKiBAcmV0dXJuIHtQSVhJLkdyYXBoaWNzfVxuICovXG5HcmFwaGljcy5wcm90b3R5cGUuYXJjVG8gPSBmdW5jdGlvbiAoeDEsIHkxLCB4MiwgeTIsIHJhZGl1cylcbntcbiAgICBpZiAodGhpcy5jdXJyZW50UGF0aClcbiAgICB7XG4gICAgICAgIGlmICh0aGlzLmN1cnJlbnRQYXRoLnNoYXBlLnBvaW50cy5sZW5ndGggPT09IDApXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuY3VycmVudFBhdGguc2hhcGUucG9pbnRzLnB1c2goeDEsIHkxKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICB0aGlzLm1vdmVUbyh4MSwgeTEpO1xuICAgIH1cblxuICAgIHZhciBwb2ludHMgPSB0aGlzLmN1cnJlbnRQYXRoLnNoYXBlLnBvaW50cyxcbiAgICAgICAgZnJvbVggPSBwb2ludHNbcG9pbnRzLmxlbmd0aC0yXSxcbiAgICAgICAgZnJvbVkgPSBwb2ludHNbcG9pbnRzLmxlbmd0aC0xXSxcbiAgICAgICAgYTEgPSBmcm9tWSAtIHkxLFxuICAgICAgICBiMSA9IGZyb21YIC0geDEsXG4gICAgICAgIGEyID0geTIgICAtIHkxLFxuICAgICAgICBiMiA9IHgyICAgLSB4MSxcbiAgICAgICAgbW0gPSBNYXRoLmFicyhhMSAqIGIyIC0gYjEgKiBhMik7XG5cbiAgICBpZiAobW0gPCAxLjBlLTggfHwgcmFkaXVzID09PSAwKVxuICAgIHtcbiAgICAgICAgaWYgKHBvaW50c1twb2ludHMubGVuZ3RoLTJdICE9PSB4MSB8fCBwb2ludHNbcG9pbnRzLmxlbmd0aC0xXSAhPT0geTEpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHBvaW50cy5wdXNoKHgxLCB5MSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgdmFyIGRkID0gYTEgKiBhMSArIGIxICogYjEsXG4gICAgICAgICAgICBjYyA9IGEyICogYTIgKyBiMiAqIGIyLFxuICAgICAgICAgICAgdHQgPSBhMSAqIGEyICsgYjEgKiBiMixcbiAgICAgICAgICAgIGsxID0gcmFkaXVzICogTWF0aC5zcXJ0KGRkKSAvIG1tLFxuICAgICAgICAgICAgazIgPSByYWRpdXMgKiBNYXRoLnNxcnQoY2MpIC8gbW0sXG4gICAgICAgICAgICBqMSA9IGsxICogdHQgLyBkZCxcbiAgICAgICAgICAgIGoyID0gazIgKiB0dCAvIGNjLFxuICAgICAgICAgICAgY3ggPSBrMSAqIGIyICsgazIgKiBiMSxcbiAgICAgICAgICAgIGN5ID0gazEgKiBhMiArIGsyICogYTEsXG4gICAgICAgICAgICBweCA9IGIxICogKGsyICsgajEpLFxuICAgICAgICAgICAgcHkgPSBhMSAqIChrMiArIGoxKSxcbiAgICAgICAgICAgIHF4ID0gYjIgKiAoazEgKyBqMiksXG4gICAgICAgICAgICBxeSA9IGEyICogKGsxICsgajIpLFxuICAgICAgICAgICAgc3RhcnRBbmdsZSA9IE1hdGguYXRhbjIocHkgLSBjeSwgcHggLSBjeCksXG4gICAgICAgICAgICBlbmRBbmdsZSAgID0gTWF0aC5hdGFuMihxeSAtIGN5LCBxeCAtIGN4KTtcblxuICAgICAgICB0aGlzLmFyYyhjeCArIHgxLCBjeSArIHkxLCByYWRpdXMsIHN0YXJ0QW5nbGUsIGVuZEFuZ2xlLCBiMSAqIGEyID4gYjIgKiBhMSk7XG4gICAgfVxuXG4gICAgdGhpcy5kaXJ0eSA9IHRoaXMuYm91bmRzRGlydHkgPSB0cnVlO1xuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIFRoZSBhcmMgbWV0aG9kIGNyZWF0ZXMgYW4gYXJjL2N1cnZlICh1c2VkIHRvIGNyZWF0ZSBjaXJjbGVzLCBvciBwYXJ0cyBvZiBjaXJjbGVzKS5cbiAqXG4gKiBAcGFyYW0gY3gge251bWJlcn0gVGhlIHgtY29vcmRpbmF0ZSBvZiB0aGUgY2VudGVyIG9mIHRoZSBjaXJjbGVcbiAqIEBwYXJhbSBjeSB7bnVtYmVyfSBUaGUgeS1jb29yZGluYXRlIG9mIHRoZSBjZW50ZXIgb2YgdGhlIGNpcmNsZVxuICogQHBhcmFtIHJhZGl1cyB7bnVtYmVyfSBUaGUgcmFkaXVzIG9mIHRoZSBjaXJjbGVcbiAqIEBwYXJhbSBzdGFydEFuZ2xlIHtudW1iZXJ9IFRoZSBzdGFydGluZyBhbmdsZSwgaW4gcmFkaWFucyAoMCBpcyBhdCB0aGUgMyBvJ2Nsb2NrIHBvc2l0aW9uIG9mIHRoZSBhcmMncyBjaXJjbGUpXG4gKiBAcGFyYW0gZW5kQW5nbGUge251bWJlcn0gVGhlIGVuZGluZyBhbmdsZSwgaW4gcmFkaWFuc1xuICogQHBhcmFtIGFudGljbG9ja3dpc2Uge2Jvb2xlYW59IE9wdGlvbmFsLiBTcGVjaWZpZXMgd2hldGhlciB0aGUgZHJhd2luZyBzaG91bGQgYmUgY291bnRlcmNsb2Nrd2lzZSBvciBjbG9ja3dpc2UuIEZhbHNlIGlzIGRlZmF1bHQsIGFuZCBpbmRpY2F0ZXMgY2xvY2t3aXNlLCB3aGlsZSB0cnVlIGluZGljYXRlcyBjb3VudGVyLWNsb2Nrd2lzZS5cbiAqIEByZXR1cm4ge1BJWEkuR3JhcGhpY3N9XG4gKi9cbkdyYXBoaWNzLnByb3RvdHlwZS5hcmMgPSBmdW5jdGlvbihjeCwgY3ksIHJhZGl1cywgc3RhcnRBbmdsZSwgZW5kQW5nbGUsIGFudGljbG9ja3dpc2UpXG57XG4gICAgYW50aWNsb2Nrd2lzZSA9IGFudGljbG9ja3dpc2UgfHwgZmFsc2U7XG5cbiAgICBpZiAoc3RhcnRBbmdsZSA9PT0gZW5kQW5nbGUpXG4gICAge1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBpZiggIWFudGljbG9ja3dpc2UgJiYgZW5kQW5nbGUgPD0gc3RhcnRBbmdsZSApXG4gICAge1xuICAgICAgICBlbmRBbmdsZSArPSBNYXRoLlBJICogMjtcbiAgICB9XG4gICAgZWxzZSBpZiggYW50aWNsb2Nrd2lzZSAmJiBzdGFydEFuZ2xlIDw9IGVuZEFuZ2xlIClcbiAgICB7XG4gICAgICAgIHN0YXJ0QW5nbGUgKz0gTWF0aC5QSSAqIDI7XG4gICAgfVxuXG4gICAgdmFyIHN3ZWVwID0gYW50aWNsb2Nrd2lzZSA/IChzdGFydEFuZ2xlIC0gZW5kQW5nbGUpICogLTEgOiAoZW5kQW5nbGUgLSBzdGFydEFuZ2xlKTtcbiAgICB2YXIgc2VncyA9ICBNYXRoLmNlaWwoTWF0aC5hYnMoc3dlZXApIC8gKE1hdGguUEkgKiAyKSkgKiA0MDtcblxuICAgIGlmKHN3ZWVwID09PSAwKVxuICAgIHtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgdmFyIHN0YXJ0WCA9IGN4ICsgTWF0aC5jb3Moc3RhcnRBbmdsZSkgKiByYWRpdXM7XG4gICAgdmFyIHN0YXJ0WSA9IGN5ICsgTWF0aC5zaW4oc3RhcnRBbmdsZSkgKiByYWRpdXM7XG5cbiAgICBpZiAodGhpcy5jdXJyZW50UGF0aClcbiAgICB7XG4gICAgICAgIHRoaXMuY3VycmVudFBhdGguc2hhcGUucG9pbnRzLnB1c2goc3RhcnRYLCBzdGFydFkpO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICB0aGlzLm1vdmVUbyhzdGFydFgsIHN0YXJ0WSk7XG4gICAgfVxuXG4gICAgdmFyIHBvaW50cyA9IHRoaXMuY3VycmVudFBhdGguc2hhcGUucG9pbnRzO1xuXG4gICAgdmFyIHRoZXRhID0gc3dlZXAvKHNlZ3MqMik7XG4gICAgdmFyIHRoZXRhMiA9IHRoZXRhKjI7XG5cbiAgICB2YXIgY1RoZXRhID0gTWF0aC5jb3ModGhldGEpO1xuICAgIHZhciBzVGhldGEgPSBNYXRoLnNpbih0aGV0YSk7XG5cbiAgICB2YXIgc2VnTWludXMgPSBzZWdzIC0gMTtcblxuICAgIHZhciByZW1haW5kZXIgPSAoIHNlZ01pbnVzICUgMSApIC8gc2VnTWludXM7XG5cbiAgICBmb3IodmFyIGk9MDsgaTw9c2VnTWludXM7IGkrKylcbiAgICB7XG4gICAgICAgIHZhciByZWFsID0gIGkgKyByZW1haW5kZXIgKiBpO1xuXG5cbiAgICAgICAgdmFyIGFuZ2xlID0gKCh0aGV0YSkgKyBzdGFydEFuZ2xlICsgKHRoZXRhMiAqIHJlYWwpKTtcblxuICAgICAgICB2YXIgYyA9IE1hdGguY29zKGFuZ2xlKTtcbiAgICAgICAgdmFyIHMgPSAtTWF0aC5zaW4oYW5nbGUpO1xuXG4gICAgICAgIHBvaW50cy5wdXNoKCggKGNUaGV0YSAqICBjKSArIChzVGhldGEgKiBzKSApICogcmFkaXVzICsgY3gsXG4gICAgICAgICAgICAgICAgICAgICggKGNUaGV0YSAqIC1zKSArIChzVGhldGEgKiBjKSApICogcmFkaXVzICsgY3kpO1xuICAgIH1cblxuICAgIHRoaXMuZGlydHkgPSB0aGlzLmJvdW5kc0RpcnR5ID0gdHJ1ZTtcblxuICAgIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBTcGVjaWZpZXMgYSBzaW1wbGUgb25lLWNvbG9yIGZpbGwgdGhhdCBzdWJzZXF1ZW50IGNhbGxzIHRvIG90aGVyIEdyYXBoaWNzIG1ldGhvZHNcbiAqIChzdWNoIGFzIGxpbmVUbygpIG9yIGRyYXdDaXJjbGUoKSkgdXNlIHdoZW4gZHJhd2luZy5cbiAqXG4gKiBAcGFyYW0gY29sb3Ige251bWJlcn0gdGhlIGNvbG9yIG9mIHRoZSBmaWxsXG4gKiBAcGFyYW0gYWxwaGEge251bWJlcn0gdGhlIGFscGhhIG9mIHRoZSBmaWxsXG4gKiBAcmV0dXJuIHtQSVhJLkdyYXBoaWNzfVxuICovXG5HcmFwaGljcy5wcm90b3R5cGUuYmVnaW5GaWxsID0gZnVuY3Rpb24gKGNvbG9yLCBhbHBoYSlcbntcbiAgICB0aGlzLmZpbGxpbmcgPSB0cnVlO1xuICAgIHRoaXMuZmlsbENvbG9yID0gY29sb3IgfHwgMDtcbiAgICB0aGlzLmZpbGxBbHBoYSA9IChhbHBoYSA9PT0gdW5kZWZpbmVkKSA/IDEgOiBhbHBoYTtcblxuICAgIGlmICh0aGlzLmN1cnJlbnRQYXRoKVxuICAgIHtcbiAgICAgICAgaWYgKHRoaXMuY3VycmVudFBhdGguc2hhcGUucG9pbnRzLmxlbmd0aCA8PSAyKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRQYXRoLmZpbGwgPSB0aGlzLmZpbGxpbmc7XG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRQYXRoLmZpbGxDb2xvciA9IHRoaXMuZmlsbENvbG9yO1xuICAgICAgICAgICAgdGhpcy5jdXJyZW50UGF0aC5maWxsQWxwaGEgPSB0aGlzLmZpbGxBbHBoYTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogQXBwbGllcyBhIGZpbGwgdG8gdGhlIGxpbmVzIGFuZCBzaGFwZXMgdGhhdCB3ZXJlIGFkZGVkIHNpbmNlIHRoZSBsYXN0IGNhbGwgdG8gdGhlIGJlZ2luRmlsbCgpIG1ldGhvZC5cbiAqXG4gKiBAcmV0dXJuIHtHcmFwaGljc31cbiAqL1xuR3JhcGhpY3MucHJvdG90eXBlLmVuZEZpbGwgPSBmdW5jdGlvbiAoKVxue1xuICAgIHRoaXMuZmlsbGluZyA9IGZhbHNlO1xuICAgIHRoaXMuZmlsbENvbG9yID0gbnVsbDtcbiAgICB0aGlzLmZpbGxBbHBoYSA9IDE7XG5cbiAgICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICpcbiAqIEBwYXJhbSB4IHtudW1iZXJ9IFRoZSBYIGNvb3JkIG9mIHRoZSB0b3AtbGVmdCBvZiB0aGUgcmVjdGFuZ2xlXG4gKiBAcGFyYW0geSB7bnVtYmVyfSBUaGUgWSBjb29yZCBvZiB0aGUgdG9wLWxlZnQgb2YgdGhlIHJlY3RhbmdsZVxuICogQHBhcmFtIHdpZHRoIHtudW1iZXJ9IFRoZSB3aWR0aCBvZiB0aGUgcmVjdGFuZ2xlXG4gKiBAcGFyYW0gaGVpZ2h0IHtudW1iZXJ9IFRoZSBoZWlnaHQgb2YgdGhlIHJlY3RhbmdsZVxuICogQHJldHVybiB7UElYSS5HcmFwaGljc31cbiAqL1xuR3JhcGhpY3MucHJvdG90eXBlLmRyYXdSZWN0ID0gZnVuY3Rpb24gKCB4LCB5LCB3aWR0aCwgaGVpZ2h0IClcbntcbiAgICB0aGlzLmRyYXdTaGFwZShuZXcgbWF0aC5SZWN0YW5nbGUoeCx5LCB3aWR0aCwgaGVpZ2h0KSk7XG5cbiAgICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICpcbiAqIEBwYXJhbSB4IHtudW1iZXJ9IFRoZSBYIGNvb3JkIG9mIHRoZSB0b3AtbGVmdCBvZiB0aGUgcmVjdGFuZ2xlXG4gKiBAcGFyYW0geSB7bnVtYmVyfSBUaGUgWSBjb29yZCBvZiB0aGUgdG9wLWxlZnQgb2YgdGhlIHJlY3RhbmdsZVxuICogQHBhcmFtIHdpZHRoIHtudW1iZXJ9IFRoZSB3aWR0aCBvZiB0aGUgcmVjdGFuZ2xlXG4gKiBAcGFyYW0gaGVpZ2h0IHtudW1iZXJ9IFRoZSBoZWlnaHQgb2YgdGhlIHJlY3RhbmdsZVxuICogQHBhcmFtIHJhZGl1cyB7bnVtYmVyfSBSYWRpdXMgb2YgdGhlIHJlY3RhbmdsZSBjb3JuZXJzXG4gKiBAcmV0dXJuIHtQSVhJLkdyYXBoaWNzfVxuICovXG5HcmFwaGljcy5wcm90b3R5cGUuZHJhd1JvdW5kZWRSZWN0ID0gZnVuY3Rpb24gKCB4LCB5LCB3aWR0aCwgaGVpZ2h0LCByYWRpdXMgKVxue1xuICAgIHRoaXMuZHJhd1NoYXBlKG5ldyBtYXRoLlJvdW5kZWRSZWN0YW5nbGUoeCwgeSwgd2lkdGgsIGhlaWdodCwgcmFkaXVzKSk7XG5cbiAgICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogRHJhd3MgYSBjaXJjbGUuXG4gKlxuICogQHBhcmFtIHgge251bWJlcn0gVGhlIFggY29vcmRpbmF0ZSBvZiB0aGUgY2VudGVyIG9mIHRoZSBjaXJjbGVcbiAqIEBwYXJhbSB5IHtudW1iZXJ9IFRoZSBZIGNvb3JkaW5hdGUgb2YgdGhlIGNlbnRlciBvZiB0aGUgY2lyY2xlXG4gKiBAcGFyYW0gcmFkaXVzIHtudW1iZXJ9IFRoZSByYWRpdXMgb2YgdGhlIGNpcmNsZVxuICogQHJldHVybiB7UElYSS5HcmFwaGljc31cbiAqL1xuR3JhcGhpY3MucHJvdG90eXBlLmRyYXdDaXJjbGUgPSBmdW5jdGlvbiAoeCwgeSwgcmFkaXVzKVxue1xuICAgIHRoaXMuZHJhd1NoYXBlKG5ldyBtYXRoLkNpcmNsZSh4LHksIHJhZGl1cykpO1xuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIERyYXdzIGFuIGVsbGlwc2UuXG4gKlxuICogQHBhcmFtIHgge251bWJlcn0gVGhlIFggY29vcmRpbmF0ZSBvZiB0aGUgY2VudGVyIG9mIHRoZSBlbGxpcHNlXG4gKiBAcGFyYW0geSB7bnVtYmVyfSBUaGUgWSBjb29yZGluYXRlIG9mIHRoZSBjZW50ZXIgb2YgdGhlIGVsbGlwc2VcbiAqIEBwYXJhbSB3aWR0aCB7bnVtYmVyfSBUaGUgaGFsZiB3aWR0aCBvZiB0aGUgZWxsaXBzZVxuICogQHBhcmFtIGhlaWdodCB7bnVtYmVyfSBUaGUgaGFsZiBoZWlnaHQgb2YgdGhlIGVsbGlwc2VcbiAqIEByZXR1cm4ge1BJWEkuR3JhcGhpY3N9XG4gKi9cbkdyYXBoaWNzLnByb3RvdHlwZS5kcmF3RWxsaXBzZSA9IGZ1bmN0aW9uICh4LCB5LCB3aWR0aCwgaGVpZ2h0KVxue1xuICAgIHRoaXMuZHJhd1NoYXBlKG5ldyBtYXRoLkVsbGlwc2UoeCwgeSwgd2lkdGgsIGhlaWdodCkpO1xuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIERyYXdzIGEgcG9seWdvbiB1c2luZyB0aGUgZ2l2ZW4gcGF0aC5cbiAqXG4gKiBAcGFyYW0gcGF0aCB7bnVtYmVyW118UElYSS5Qb2ludFtdfSBUaGUgcGF0aCBkYXRhIHVzZWQgdG8gY29uc3RydWN0IHRoZSBwb2x5Z29uLlxuICogQHJldHVybiB7UElYSS5HcmFwaGljc31cbiAqL1xuR3JhcGhpY3MucHJvdG90eXBlLmRyYXdQb2x5Z29uID0gZnVuY3Rpb24gKHBhdGgpXG57XG4gICAgLy8gcHJldmVudHMgYW4gYXJndW1lbnQgYXNzaWdubWVudCBkZW9wdFxuICAgIC8vIHNlZSBzZWN0aW9uIDMuMTogaHR0cHM6Ly9naXRodWIuY29tL3BldGthYW50b25vdi9ibHVlYmlyZC93aWtpL09wdGltaXphdGlvbi1raWxsZXJzIzMtbWFuYWdpbmctYXJndW1lbnRzXG4gICAgdmFyIHBvaW50cyA9IHBhdGg7XG5cbiAgICB2YXIgY2xvc2VkID0gdHJ1ZTtcblxuICAgIGlmIChwb2ludHMgaW5zdGFuY2VvZiBtYXRoLlBvbHlnb24pXG4gICAge1xuICAgICAgICBjbG9zZWQgPSBwb2ludHMuY2xvc2VkO1xuICAgICAgICBwb2ludHMgPSBwb2ludHMucG9pbnRzO1xuICAgIH1cblxuICAgIGlmICghQXJyYXkuaXNBcnJheShwb2ludHMpKVxuICAgIHtcbiAgICAgICAgLy8gcHJldmVudHMgYW4gYXJndW1lbnQgbGVhayBkZW9wdFxuICAgICAgICAvLyBzZWUgc2VjdGlvbiAzLjI6IGh0dHBzOi8vZ2l0aHViLmNvbS9wZXRrYWFudG9ub3YvYmx1ZWJpcmQvd2lraS9PcHRpbWl6YXRpb24ta2lsbGVycyMzLW1hbmFnaW5nLWFyZ3VtZW50c1xuICAgICAgICBwb2ludHMgPSBuZXcgQXJyYXkoYXJndW1lbnRzLmxlbmd0aCk7XG5cbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwb2ludHMubGVuZ3RoOyArK2kpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHBvaW50c1tpXSA9IGFyZ3VtZW50c1tpXTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHZhciBzaGFwZSA9IG5ldyBtYXRoLlBvbHlnb24ocG9pbnRzKTtcbiAgICBzaGFwZS5jbG9zZWQgPSBjbG9zZWQ7XG5cbiAgICB0aGlzLmRyYXdTaGFwZShzaGFwZSk7XG5cbiAgICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogQ2xlYXJzIHRoZSBncmFwaGljcyB0aGF0IHdlcmUgZHJhd24gdG8gdGhpcyBHcmFwaGljcyBvYmplY3QsIGFuZCByZXNldHMgZmlsbCBhbmQgbGluZSBzdHlsZSBzZXR0aW5ncy5cbiAqXG4gKiBAcmV0dXJuIHtQSVhJLkdyYXBoaWNzfVxuICovXG5HcmFwaGljcy5wcm90b3R5cGUuY2xlYXIgPSBmdW5jdGlvbiAoKVxue1xuICAgIHRoaXMubGluZVdpZHRoID0gMDtcbiAgICB0aGlzLmZpbGxpbmcgPSBmYWxzZTtcblxuICAgIHRoaXMuZGlydHkgPSB0cnVlO1xuICAgIHRoaXMuY2xlYXJEaXJ0eSA9IHRydWU7XG4gICAgdGhpcy5ncmFwaGljc0RhdGEgPSBbXTtcblxuICAgIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBVc2VmdWwgZnVuY3Rpb24gdGhhdCByZXR1cm5zIGEgdGV4dHVyZSBvZiB0aGUgZ3JhcGhpY3Mgb2JqZWN0IHRoYXQgY2FuIHRoZW4gYmUgdXNlZCB0byBjcmVhdGUgc3ByaXRlc1xuICogVGhpcyBjYW4gYmUgcXVpdGUgdXNlZnVsIGlmIHlvdXIgZ2VvbWV0cnkgaXMgY29tcGxpY2F0ZWQgYW5kIG5lZWRzIHRvIGJlIHJldXNlZCBtdWx0aXBsZSB0aW1lcy5cbiAqXG4gKiBAcGFyYW0gcmVzb2x1dGlvbiB7bnVtYmVyfSBUaGUgcmVzb2x1dGlvbiBvZiB0aGUgdGV4dHVyZSBiZWluZyBnZW5lcmF0ZWRcbiAqIEBwYXJhbSBzY2FsZU1vZGUge251bWJlcn0gU2hvdWxkIGJlIG9uZSBvZiB0aGUgc2NhbGVNb2RlIGNvbnN0c1xuICogQHJldHVybiB7UElYSS5UZXh0dXJlfSBhIHRleHR1cmUgb2YgdGhlIGdyYXBoaWNzIG9iamVjdFxuICovXG5HcmFwaGljcy5wcm90b3R5cGUuZ2VuZXJhdGVUZXh0dXJlID0gZnVuY3Rpb24gKHJlbmRlcmVyLCByZXNvbHV0aW9uLCBzY2FsZU1vZGUpXG57XG5cbiAgICByZXNvbHV0aW9uID0gcmVzb2x1dGlvbiB8fCAxO1xuXG4gICAgdmFyIGJvdW5kcyA9IHRoaXMuZ2V0TG9jYWxCb3VuZHMoKTtcblxuICAgIHZhciBjYW52YXNCdWZmZXIgPSBuZXcgQ2FudmFzQnVmZmVyKGJvdW5kcy53aWR0aCAqIHJlc29sdXRpb24sIGJvdW5kcy5oZWlnaHQgKiByZXNvbHV0aW9uKTtcblxuICAgIHZhciB0ZXh0dXJlID0gVGV4dHVyZS5mcm9tQ2FudmFzKGNhbnZhc0J1ZmZlci5jYW52YXMsIHNjYWxlTW9kZSk7XG4gICAgdGV4dHVyZS5iYXNlVGV4dHVyZS5yZXNvbHV0aW9uID0gcmVzb2x1dGlvbjtcblxuICAgIGNhbnZhc0J1ZmZlci5jb250ZXh0LnNjYWxlKHJlc29sdXRpb24sIHJlc29sdXRpb24pO1xuXG4gICAgY2FudmFzQnVmZmVyLmNvbnRleHQudHJhbnNsYXRlKC1ib3VuZHMueCwtYm91bmRzLnkpO1xuXG4gICAgQ2FudmFzR3JhcGhpY3MucmVuZGVyR3JhcGhpY3ModGhpcywgY2FudmFzQnVmZmVyLmNvbnRleHQpO1xuXG4gICAgcmV0dXJuIHRleHR1cmU7XG59O1xuXG4vKipcbiAqIFJlbmRlcnMgdGhlIG9iamVjdCB1c2luZyB0aGUgV2ViR0wgcmVuZGVyZXJcbiAqXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcn1cbiAqIEBwcml2YXRlXG4gKi9cbkdyYXBoaWNzLnByb3RvdHlwZS5fcmVuZGVyV2ViR0wgPSBmdW5jdGlvbiAocmVuZGVyZXIpXG57XG4gICAgLy8gaWYgdGhlIHNwcml0ZSBpcyBub3QgdmlzaWJsZSBvciB0aGUgYWxwaGEgaXMgMCB0aGVuIG5vIG5lZWQgdG8gcmVuZGVyIHRoaXMgZWxlbWVudFxuXG4gICAgaWYgKHRoaXMuZ2xEaXJ0eSlcbiAgICB7XG4gICAgICAgIHRoaXMuZGlydHkgPSB0cnVlO1xuICAgICAgICB0aGlzLmdsRGlydHkgPSBmYWxzZTtcbiAgICB9XG5cbiAgICByZW5kZXJlci5zZXRPYmplY3RSZW5kZXJlcihyZW5kZXJlci5wbHVnaW5zLmdyYXBoaWNzKTtcbiAgICByZW5kZXJlci5wbHVnaW5zLmdyYXBoaWNzLnJlbmRlcih0aGlzKTtcblxufTtcblxuLyoqXG4gKiBSZW5kZXJzIHRoZSBvYmplY3QgdXNpbmcgdGhlIENhbnZhcyByZW5kZXJlclxuICpcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5DYW52YXNSZW5kZXJlcn1cbiAqIEBwcml2YXRlXG4gKi9cbkdyYXBoaWNzLnByb3RvdHlwZS5fcmVuZGVyQ2FudmFzID0gZnVuY3Rpb24gKHJlbmRlcmVyKVxue1xuICAgIGlmICh0aGlzLmlzTWFzayA9PT0gdHJ1ZSlcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBpZiB0aGUgdGludCBoYXMgY2hhbmdlZCwgc2V0IHRoZSBncmFwaGljcyBvYmplY3QgdG8gZGlydHkuXG4gICAgaWYgKHRoaXMuX3ByZXZUaW50ICE9PSB0aGlzLnRpbnQpIHtcbiAgICAgICAgdGhpcy5kaXJ0eSA9IHRydWU7XG4gICAgfVxuXG4gICAgLy8gdGhpcyBjb2RlIG1heSBzdGlsbCBiZSBuZWVkZWQgc28gbGVhdmluZyBmb3Igbm93Li5cbiAgICAvL1xuICAgIC8qXG4gICAgaWYgKHRoaXMuX2NhY2hlQXNCaXRtYXApXG4gICAge1xuICAgICAgICBpZiAodGhpcy5kaXJ0eSB8fCB0aGlzLmNhY2hlZFNwcml0ZURpcnR5KVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLl9nZW5lcmF0ZUNhY2hlZFNwcml0ZSgpO1xuXG4gICAgICAgICAgICAvLyB3ZSB3aWxsIGFsc28gbmVlZCB0byB1cGRhdGUgdGhlIHRleHR1cmVcbiAgICAgICAgICAgIHRoaXMudXBkYXRlQ2FjaGVkU3ByaXRlVGV4dHVyZSgpO1xuXG4gICAgICAgICAgICB0aGlzLmNhY2hlZFNwcml0ZURpcnR5ID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLmRpcnR5ID0gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9jYWNoZWRTcHJpdGUuYWxwaGEgPSB0aGlzLmFscGhhO1xuXG4gICAgICAgIFNwcml0ZS5wcm90b3R5cGUuX3JlbmRlckNhbnZhcy5jYWxsKHRoaXMuX2NhY2hlZFNwcml0ZSwgcmVuZGVyZXIpO1xuXG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgKi9cbiAgICB2YXIgY29udGV4dCA9IHJlbmRlcmVyLmNvbnRleHQ7XG4gICAgdmFyIHRyYW5zZm9ybSA9IHRoaXMud29ybGRUcmFuc2Zvcm07XG5cbiAgICB2YXIgY29tcG9zaXRlT3BlcmF0aW9uID0gcmVuZGVyZXIuYmxlbmRNb2Rlc1t0aGlzLmJsZW5kTW9kZV07XG4gICAgaWYgKGNvbXBvc2l0ZU9wZXJhdGlvbiAhPT0gY29udGV4dC5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb24pXG4gICAge1xuICAgICAgICBjb250ZXh0Lmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbiA9IGNvbXBvc2l0ZU9wZXJhdGlvbjtcbiAgICB9XG5cbiAgICB2YXIgcmVzb2x1dGlvbiA9IHJlbmRlcmVyLnJlc29sdXRpb247XG4gICAgY29udGV4dC5zZXRUcmFuc2Zvcm0oXG4gICAgICAgIHRyYW5zZm9ybS5hICogcmVzb2x1dGlvbixcbiAgICAgICAgdHJhbnNmb3JtLmIgKiByZXNvbHV0aW9uLFxuICAgICAgICB0cmFuc2Zvcm0uYyAqIHJlc29sdXRpb24sXG4gICAgICAgIHRyYW5zZm9ybS5kICogcmVzb2x1dGlvbixcbiAgICAgICAgdHJhbnNmb3JtLnR4ICogcmVzb2x1dGlvbixcbiAgICAgICAgdHJhbnNmb3JtLnR5ICogcmVzb2x1dGlvblxuICAgICk7XG5cbiAgICBDYW52YXNHcmFwaGljcy5yZW5kZXJHcmFwaGljcyh0aGlzLCBjb250ZXh0KTtcbn07XG5cbi8qKlxuICogUmV0cmlldmVzIHRoZSBib3VuZHMgb2YgdGhlIGdyYXBoaWMgc2hhcGUgYXMgYSByZWN0YW5nbGUgb2JqZWN0XG4gKlxuICogQHBhcmFtIFttYXRyaXhdIHtQSVhJLk1hdHJpeH0gVGhlIHdvcmxkIHRyYW5zZm9ybSBtYXRyaXggdG8gdXNlLCBkZWZhdWx0cyB0byB0aGlzXG4gKiAgb2JqZWN0J3Mgd29ybGRUcmFuc2Zvcm0uXG4gKiBAcmV0dXJuIHtQSVhJLlJlY3RhbmdsZX0gdGhlIHJlY3Rhbmd1bGFyIGJvdW5kaW5nIGFyZWFcbiAqL1xuR3JhcGhpY3MucHJvdG90eXBlLmdldEJvdW5kcyA9IGZ1bmN0aW9uIChtYXRyaXgpXG57XG4gICAgaWYoIXRoaXMuX2N1cnJlbnRCb3VuZHMpXG4gICAge1xuXG4gICAgICAgIC8vIHJldHVybiBhbiBlbXB0eSBvYmplY3QgaWYgdGhlIGl0ZW0gaXMgYSBtYXNrIVxuICAgICAgICBpZiAoIXRoaXMucmVuZGVyYWJsZSlcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIG1hdGguUmVjdGFuZ2xlLkVNUFRZO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuYm91bmRzRGlydHkpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlTG9jYWxCb3VuZHMoKTtcblxuICAgICAgICAgICAgdGhpcy5nbERpcnR5ID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMuY2FjaGVkU3ByaXRlRGlydHkgPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy5ib3VuZHNEaXJ0eSA9IGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGJvdW5kcyA9IHRoaXMuX2xvY2FsQm91bmRzO1xuXG4gICAgICAgIHZhciB3MCA9IGJvdW5kcy54O1xuICAgICAgICB2YXIgdzEgPSBib3VuZHMud2lkdGggKyBib3VuZHMueDtcblxuICAgICAgICB2YXIgaDAgPSBib3VuZHMueTtcbiAgICAgICAgdmFyIGgxID0gYm91bmRzLmhlaWdodCArIGJvdW5kcy55O1xuXG4gICAgICAgIHZhciB3b3JsZFRyYW5zZm9ybSA9IG1hdHJpeCB8fCB0aGlzLndvcmxkVHJhbnNmb3JtO1xuXG4gICAgICAgIHZhciBhID0gd29ybGRUcmFuc2Zvcm0uYTtcbiAgICAgICAgdmFyIGIgPSB3b3JsZFRyYW5zZm9ybS5iO1xuICAgICAgICB2YXIgYyA9IHdvcmxkVHJhbnNmb3JtLmM7XG4gICAgICAgIHZhciBkID0gd29ybGRUcmFuc2Zvcm0uZDtcbiAgICAgICAgdmFyIHR4ID0gd29ybGRUcmFuc2Zvcm0udHg7XG4gICAgICAgIHZhciB0eSA9IHdvcmxkVHJhbnNmb3JtLnR5O1xuXG4gICAgICAgIHZhciB4MSA9IGEgKiB3MSArIGMgKiBoMSArIHR4O1xuICAgICAgICB2YXIgeTEgPSBkICogaDEgKyBiICogdzEgKyB0eTtcblxuICAgICAgICB2YXIgeDIgPSBhICogdzAgKyBjICogaDEgKyB0eDtcbiAgICAgICAgdmFyIHkyID0gZCAqIGgxICsgYiAqIHcwICsgdHk7XG5cbiAgICAgICAgdmFyIHgzID0gYSAqIHcwICsgYyAqIGgwICsgdHg7XG4gICAgICAgIHZhciB5MyA9IGQgKiBoMCArIGIgKiB3MCArIHR5O1xuXG4gICAgICAgIHZhciB4NCA9ICBhICogdzEgKyBjICogaDAgKyB0eDtcbiAgICAgICAgdmFyIHk0ID0gIGQgKiBoMCArIGIgKiB3MSArIHR5O1xuXG4gICAgICAgIHZhciBtYXhYID0geDE7XG4gICAgICAgIHZhciBtYXhZID0geTE7XG5cbiAgICAgICAgdmFyIG1pblggPSB4MTtcbiAgICAgICAgdmFyIG1pblkgPSB5MTtcblxuICAgICAgICBtaW5YID0geDIgPCBtaW5YID8geDIgOiBtaW5YO1xuICAgICAgICBtaW5YID0geDMgPCBtaW5YID8geDMgOiBtaW5YO1xuICAgICAgICBtaW5YID0geDQgPCBtaW5YID8geDQgOiBtaW5YO1xuXG4gICAgICAgIG1pblkgPSB5MiA8IG1pblkgPyB5MiA6IG1pblk7XG4gICAgICAgIG1pblkgPSB5MyA8IG1pblkgPyB5MyA6IG1pblk7XG4gICAgICAgIG1pblkgPSB5NCA8IG1pblkgPyB5NCA6IG1pblk7XG5cbiAgICAgICAgbWF4WCA9IHgyID4gbWF4WCA/IHgyIDogbWF4WDtcbiAgICAgICAgbWF4WCA9IHgzID4gbWF4WCA/IHgzIDogbWF4WDtcbiAgICAgICAgbWF4WCA9IHg0ID4gbWF4WCA/IHg0IDogbWF4WDtcblxuICAgICAgICBtYXhZID0geTIgPiBtYXhZID8geTIgOiBtYXhZO1xuICAgICAgICBtYXhZID0geTMgPiBtYXhZID8geTMgOiBtYXhZO1xuICAgICAgICBtYXhZID0geTQgPiBtYXhZID8geTQgOiBtYXhZO1xuXG4gICAgICAgIHRoaXMuX2JvdW5kcy54ID0gbWluWDtcbiAgICAgICAgdGhpcy5fYm91bmRzLndpZHRoID0gbWF4WCAtIG1pblg7XG5cbiAgICAgICAgdGhpcy5fYm91bmRzLnkgPSBtaW5ZO1xuICAgICAgICB0aGlzLl9ib3VuZHMuaGVpZ2h0ID0gbWF4WSAtIG1pblk7XG5cbiAgICAgICAgdGhpcy5fY3VycmVudEJvdW5kcyA9IHRoaXMuX2JvdW5kcztcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5fY3VycmVudEJvdW5kcztcbn07XG5cbi8qKlxuKiBUZXN0cyBpZiBhIHBvaW50IGlzIGluc2lkZSB0aGlzIGdyYXBoaWNzIG9iamVjdFxuKlxuKiBAcGFyYW0gcG9pbnQge1BJWEkuUG9pbnR9IHRoZSBwb2ludCB0byB0ZXN0XG4qIEByZXR1cm4ge2Jvb2xlYW59IHRoZSByZXN1bHQgb2YgdGhlIHRlc3RcbiovXG5HcmFwaGljcy5wcm90b3R5cGUuY29udGFpbnNQb2ludCA9IGZ1bmN0aW9uKCBwb2ludCApXG57XG4gICAgdGhpcy53b3JsZFRyYW5zZm9ybS5hcHBseUludmVyc2UocG9pbnQsICB0ZW1wUG9pbnQpO1xuXG4gICAgdmFyIGdyYXBoaWNzRGF0YSA9IHRoaXMuZ3JhcGhpY3NEYXRhO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBncmFwaGljc0RhdGEubGVuZ3RoOyBpKyspXG4gICAge1xuICAgICAgICB2YXIgZGF0YSA9IGdyYXBoaWNzRGF0YVtpXTtcblxuICAgICAgICBpZiAoIWRhdGEuZmlsbClcbiAgICAgICAge1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBvbmx5IGRlYWwgd2l0aCBmaWxscy4uXG4gICAgICAgIGlmIChkYXRhLnNoYXBlKVxuICAgICAgICB7XG4gICAgICAgICAgICBpZiAoIGRhdGEuc2hhcGUuY29udGFpbnMoIHRlbXBQb2ludC54LCB0ZW1wUG9pbnQueSApIClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBmYWxzZTtcbn07XG5cbi8qKlxuICogVXBkYXRlIHRoZSBib3VuZHMgb2YgdGhlIG9iamVjdFxuICpcbiAqL1xuR3JhcGhpY3MucHJvdG90eXBlLnVwZGF0ZUxvY2FsQm91bmRzID0gZnVuY3Rpb24gKClcbntcbiAgICB2YXIgbWluWCA9IEluZmluaXR5O1xuICAgIHZhciBtYXhYID0gLUluZmluaXR5O1xuXG4gICAgdmFyIG1pblkgPSBJbmZpbml0eTtcbiAgICB2YXIgbWF4WSA9IC1JbmZpbml0eTtcblxuICAgIGlmICh0aGlzLmdyYXBoaWNzRGF0YS5sZW5ndGgpXG4gICAge1xuICAgICAgICB2YXIgc2hhcGUsIHBvaW50cywgeCwgeSwgdywgaDtcblxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuZ3JhcGhpY3NEYXRhLmxlbmd0aDsgaSsrKVxuICAgICAgICB7XG4gICAgICAgICAgICB2YXIgZGF0YSA9IHRoaXMuZ3JhcGhpY3NEYXRhW2ldO1xuICAgICAgICAgICAgdmFyIHR5cGUgPSBkYXRhLnR5cGU7XG4gICAgICAgICAgICB2YXIgbGluZVdpZHRoID0gZGF0YS5saW5lV2lkdGg7XG4gICAgICAgICAgICBzaGFwZSA9IGRhdGEuc2hhcGU7XG5cbiAgICAgICAgICAgIGlmICh0eXBlID09PSBDT05TVC5TSEFQRVMuUkVDVCB8fCB0eXBlID09PSBDT05TVC5TSEFQRVMuUlJFQylcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB4ID0gc2hhcGUueCAtIGxpbmVXaWR0aC8yO1xuICAgICAgICAgICAgICAgIHkgPSBzaGFwZS55IC0gbGluZVdpZHRoLzI7XG4gICAgICAgICAgICAgICAgdyA9IHNoYXBlLndpZHRoICsgbGluZVdpZHRoO1xuICAgICAgICAgICAgICAgIGggPSBzaGFwZS5oZWlnaHQgKyBsaW5lV2lkdGg7XG5cbiAgICAgICAgICAgICAgICBtaW5YID0geCA8IG1pblggPyB4IDogbWluWDtcbiAgICAgICAgICAgICAgICBtYXhYID0geCArIHcgPiBtYXhYID8geCArIHcgOiBtYXhYO1xuXG4gICAgICAgICAgICAgICAgbWluWSA9IHkgPCBtaW5ZID8geSA6IG1pblk7XG4gICAgICAgICAgICAgICAgbWF4WSA9IHkgKyBoID4gbWF4WSA/IHkgKyBoIDogbWF4WTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKHR5cGUgPT09IENPTlNULlNIQVBFUy5DSVJDKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHggPSBzaGFwZS54O1xuICAgICAgICAgICAgICAgIHkgPSBzaGFwZS55O1xuICAgICAgICAgICAgICAgIHcgPSBzaGFwZS5yYWRpdXMgKyBsaW5lV2lkdGgvMjtcbiAgICAgICAgICAgICAgICBoID0gc2hhcGUucmFkaXVzICsgbGluZVdpZHRoLzI7XG5cbiAgICAgICAgICAgICAgICBtaW5YID0geCAtIHcgPCBtaW5YID8geCAtIHcgOiBtaW5YO1xuICAgICAgICAgICAgICAgIG1heFggPSB4ICsgdyA+IG1heFggPyB4ICsgdyA6IG1heFg7XG5cbiAgICAgICAgICAgICAgICBtaW5ZID0geSAtIGggPCBtaW5ZID8geSAtIGggOiBtaW5ZO1xuICAgICAgICAgICAgICAgIG1heFkgPSB5ICsgaCA+IG1heFkgPyB5ICsgaCA6IG1heFk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmICh0eXBlID09PSBDT05TVC5TSEFQRVMuRUxJUClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB4ID0gc2hhcGUueDtcbiAgICAgICAgICAgICAgICB5ID0gc2hhcGUueTtcbiAgICAgICAgICAgICAgICB3ID0gc2hhcGUud2lkdGggKyBsaW5lV2lkdGgvMjtcbiAgICAgICAgICAgICAgICBoID0gc2hhcGUuaGVpZ2h0ICsgbGluZVdpZHRoLzI7XG5cbiAgICAgICAgICAgICAgICBtaW5YID0geCAtIHcgPCBtaW5YID8geCAtIHcgOiBtaW5YO1xuICAgICAgICAgICAgICAgIG1heFggPSB4ICsgdyA+IG1heFggPyB4ICsgdyA6IG1heFg7XG5cbiAgICAgICAgICAgICAgICBtaW5ZID0geSAtIGggPCBtaW5ZID8geSAtIGggOiBtaW5ZO1xuICAgICAgICAgICAgICAgIG1heFkgPSB5ICsgaCA+IG1heFkgPyB5ICsgaCA6IG1heFk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgLy8gUE9MWVxuICAgICAgICAgICAgICAgIHBvaW50cyA9IHNoYXBlLnBvaW50cztcblxuICAgICAgICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgcG9pbnRzLmxlbmd0aDsgaiArPSAyKVxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgeCA9IHBvaW50c1tqXTtcbiAgICAgICAgICAgICAgICAgICAgeSA9IHBvaW50c1tqKzFdO1xuXG4gICAgICAgICAgICAgICAgICAgIG1pblggPSB4LWxpbmVXaWR0aCA8IG1pblggPyB4LWxpbmVXaWR0aCA6IG1pblg7XG4gICAgICAgICAgICAgICAgICAgIG1heFggPSB4K2xpbmVXaWR0aCA+IG1heFggPyB4K2xpbmVXaWR0aCA6IG1heFg7XG5cbiAgICAgICAgICAgICAgICAgICAgbWluWSA9IHktbGluZVdpZHRoIDwgbWluWSA/IHktbGluZVdpZHRoIDogbWluWTtcbiAgICAgICAgICAgICAgICAgICAgbWF4WSA9IHkrbGluZVdpZHRoID4gbWF4WSA/IHkrbGluZVdpZHRoIDogbWF4WTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgbWluWCA9IDA7XG4gICAgICAgIG1heFggPSAwO1xuICAgICAgICBtaW5ZID0gMDtcbiAgICAgICAgbWF4WSA9IDA7XG4gICAgfVxuXG4gICAgdmFyIHBhZGRpbmcgPSB0aGlzLmJvdW5kc1BhZGRpbmc7XG5cbiAgICB0aGlzLl9sb2NhbEJvdW5kcy54ID0gbWluWCAtIHBhZGRpbmc7XG4gICAgdGhpcy5fbG9jYWxCb3VuZHMud2lkdGggPSAobWF4WCAtIG1pblgpICsgcGFkZGluZyAqIDI7XG5cbiAgICB0aGlzLl9sb2NhbEJvdW5kcy55ID0gbWluWSAtIHBhZGRpbmc7XG4gICAgdGhpcy5fbG9jYWxCb3VuZHMuaGVpZ2h0ID0gKG1heFkgLSBtaW5ZKSArIHBhZGRpbmcgKiAyO1xufTtcblxuLyoqXG4gKiBHZW5lcmF0ZXMgdGhlIGNhY2hlZCBzcHJpdGUgd2hlbiB0aGUgc3ByaXRlIGhhcyBjYWNoZUFzQml0bWFwID0gdHJ1ZVxuICpcbiAqIEBwcml2YXRlXG4gKi9cbi8qXG5HcmFwaGljcy5wcm90b3R5cGUuX2dlbmVyYXRlQ2FjaGVkU3ByaXRlID0gZnVuY3Rpb24gKClcbntcbiAgICB2YXIgYm91bmRzID0gdGhpcy5nZXRMb2NhbEJvdW5kcygpO1xuXG4gICAgaWYgKCF0aGlzLl9jYWNoZWRTcHJpdGUpXG4gICAge1xuICAgICAgICB2YXIgY2FudmFzQnVmZmVyID0gbmV3IENhbnZhc0J1ZmZlcihib3VuZHMud2lkdGgsIGJvdW5kcy5oZWlnaHQpO1xuICAgICAgICB2YXIgdGV4dHVyZSA9IFRleHR1cmUuZnJvbUNhbnZhcyhjYW52YXNCdWZmZXIuY2FudmFzKTtcblxuICAgICAgICB0aGlzLl9jYWNoZWRTcHJpdGUgPSBuZXcgU3ByaXRlKHRleHR1cmUpO1xuICAgICAgICB0aGlzLl9jYWNoZWRTcHJpdGUuYnVmZmVyID0gY2FudmFzQnVmZmVyO1xuXG4gICAgICAgIHRoaXMuX2NhY2hlZFNwcml0ZS53b3JsZFRyYW5zZm9ybSA9IHRoaXMud29ybGRUcmFuc2Zvcm07XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHRoaXMuX2NhY2hlZFNwcml0ZS5idWZmZXIucmVzaXplKGJvdW5kcy53aWR0aCwgYm91bmRzLmhlaWdodCk7XG4gICAgfVxuXG4gICAgLy8gbGV2ZXJhZ2UgdGhlIGFuY2hvciB0byBhY2NvdW50IGZvciB0aGUgb2Zmc2V0IG9mIHRoZSBlbGVtZW50XG4gICAgdGhpcy5fY2FjaGVkU3ByaXRlLmFuY2hvci54ID0gLSggYm91bmRzLnggLyBib3VuZHMud2lkdGggKTtcbiAgICB0aGlzLl9jYWNoZWRTcHJpdGUuYW5jaG9yLnkgPSAtKCBib3VuZHMueSAvIGJvdW5kcy5oZWlnaHQgKTtcblxuICAgIC8vIHRoaXMuX2NhY2hlZFNwcml0ZS5idWZmZXIuY29udGV4dC5zYXZlKCk7XG4gICAgdGhpcy5fY2FjaGVkU3ByaXRlLmJ1ZmZlci5jb250ZXh0LnRyYW5zbGF0ZSgtYm91bmRzLngsLWJvdW5kcy55KTtcblxuICAgIC8vIG1ha2Ugc3VyZSB3ZSBzZXQgdGhlIGFscGhhIG9mIHRoZSBncmFwaGljcyB0byAxIGZvciB0aGUgcmVuZGVyLi5cbiAgICB0aGlzLndvcmxkQWxwaGEgPSAxO1xuXG4gICAgLy8gbm93IHJlbmRlciB0aGUgZ3JhcGhpYy4uXG4gICAgQ2FudmFzR3JhcGhpY3MucmVuZGVyR3JhcGhpY3ModGhpcywgdGhpcy5fY2FjaGVkU3ByaXRlLmJ1ZmZlci5jb250ZXh0KTtcblxuICAgIHRoaXMuX2NhY2hlZFNwcml0ZS5hbHBoYSA9IHRoaXMuYWxwaGE7XG59O1xuKi9cbi8qKlxuICogVXBkYXRlcyB0ZXh0dXJlIHNpemUgYmFzZWQgb24gY2FudmFzIHNpemVcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG4vKlxuR3JhcGhpY3MucHJvdG90eXBlLnVwZGF0ZUNhY2hlZFNwcml0ZVRleHR1cmUgPSBmdW5jdGlvbiAoKVxue1xuICAgIHZhciBjYWNoZWRTcHJpdGUgPSB0aGlzLl9jYWNoZWRTcHJpdGU7XG4gICAgdmFyIHRleHR1cmUgPSBjYWNoZWRTcHJpdGUudGV4dHVyZTtcbiAgICB2YXIgY2FudmFzID0gY2FjaGVkU3ByaXRlLmJ1ZmZlci5jYW52YXM7XG5cbiAgICB0ZXh0dXJlLmJhc2VUZXh0dXJlLndpZHRoID0gY2FudmFzLndpZHRoO1xuICAgIHRleHR1cmUuYmFzZVRleHR1cmUuaGVpZ2h0ID0gY2FudmFzLmhlaWdodDtcbiAgICB0ZXh0dXJlLmNyb3Aud2lkdGggPSB0ZXh0dXJlLmZyYW1lLndpZHRoID0gY2FudmFzLndpZHRoO1xuICAgIHRleHR1cmUuY3JvcC5oZWlnaHQgPSB0ZXh0dXJlLmZyYW1lLmhlaWdodCA9IGNhbnZhcy5oZWlnaHQ7XG5cbiAgICBjYWNoZWRTcHJpdGUuX3dpZHRoID0gY2FudmFzLndpZHRoO1xuICAgIGNhY2hlZFNwcml0ZS5faGVpZ2h0ID0gY2FudmFzLmhlaWdodDtcblxuICAgIC8vIHVwZGF0ZSB0aGUgZGlydHkgYmFzZSB0ZXh0dXJlc1xuICAgIHRleHR1cmUuYmFzZVRleHR1cmUuZGlydHkoKTtcbn07Ki9cblxuLyoqXG4gKiBEZXN0cm95cyBhIHByZXZpb3VzIGNhY2hlZCBzcHJpdGUuXG4gKlxuICovXG4vKlxuR3JhcGhpY3MucHJvdG90eXBlLmRlc3Ryb3lDYWNoZWRTcHJpdGUgPSBmdW5jdGlvbiAoKVxue1xuICAgIHRoaXMuX2NhY2hlZFNwcml0ZS50ZXh0dXJlLmRlc3Ryb3kodHJ1ZSk7XG5cbiAgICAvLyBsZXQgdGhlIGdjIGNvbGxlY3QgdGhlIHVudXNlZCBzcHJpdGVcbiAgICAvLyBUT0RPIGNvdWxkIGJlIG9iamVjdCBwb29sZWQhXG4gICAgdGhpcy5fY2FjaGVkU3ByaXRlID0gbnVsbDtcbn07Ki9cblxuLyoqXG4gKiBEcmF3cyB0aGUgZ2l2ZW4gc2hhcGUgdG8gdGhpcyBHcmFwaGljcyBvYmplY3QuIENhbiBiZSBhbnkgb2YgQ2lyY2xlLCBSZWN0YW5nbGUsIEVsbGlwc2UsIExpbmUgb3IgUG9seWdvbi5cbiAqXG4gKiBAcGFyYW0gc2hhcGUge1BJWEkuQ2lyY2xlfFBJWEkuUmVjdGFuZ2xlfFBJWEkuRWxsaXBzZXxQSVhJLkxpbmV8UElYSS5Qb2x5Z29ufSBUaGUgc2hhcGUgb2JqZWN0IHRvIGRyYXcuXG4gKiBAcmV0dXJuIHtQSVhJLkdyYXBoaWNzRGF0YX0gVGhlIGdlbmVyYXRlZCBHcmFwaGljc0RhdGEgb2JqZWN0LlxuICovXG5HcmFwaGljcy5wcm90b3R5cGUuZHJhd1NoYXBlID0gZnVuY3Rpb24gKHNoYXBlKVxue1xuICAgIGlmICh0aGlzLmN1cnJlbnRQYXRoKVxuICAgIHtcbiAgICAgICAgLy8gY2hlY2sgY3VycmVudCBwYXRoIVxuICAgICAgICBpZiAodGhpcy5jdXJyZW50UGF0aC5zaGFwZS5wb2ludHMubGVuZ3RoIDw9IDIpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuZ3JhcGhpY3NEYXRhLnBvcCgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5jdXJyZW50UGF0aCA9IG51bGw7XG5cbiAgICB2YXIgZGF0YSA9IG5ldyBHcmFwaGljc0RhdGEodGhpcy5saW5lV2lkdGgsIHRoaXMubGluZUNvbG9yLCB0aGlzLmxpbmVBbHBoYSwgdGhpcy5maWxsQ29sb3IsIHRoaXMuZmlsbEFscGhhLCB0aGlzLmZpbGxpbmcsIHNoYXBlKTtcblxuICAgIHRoaXMuZ3JhcGhpY3NEYXRhLnB1c2goZGF0YSk7XG5cbiAgICBpZiAoZGF0YS50eXBlID09PSBDT05TVC5TSEFQRVMuUE9MWSlcbiAgICB7XG4gICAgICAgIGRhdGEuc2hhcGUuY2xvc2VkID0gZGF0YS5zaGFwZS5jbG9zZWQgfHwgdGhpcy5maWxsaW5nO1xuICAgICAgICB0aGlzLmN1cnJlbnRQYXRoID0gZGF0YTtcbiAgICB9XG5cbiAgICB0aGlzLmRpcnR5ID0gdGhpcy5ib3VuZHNEaXJ0eSA9IHRydWU7XG5cbiAgICByZXR1cm4gZGF0YTtcbn07XG5cbi8qKlxuICogRGVzdHJveXMgdGhlIEdyYXBoaWNzIG9iamVjdC5cbiAqL1xuR3JhcGhpY3MucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoKSB7XG4gICAgQ29udGFpbmVyLnByb3RvdHlwZS5kZXN0cm95LmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG5cbiAgICAvLyBkZXN0cm95IGVhY2ggb2YgdGhlIEdyYXBoaWNzRGF0YSBvYmplY3RzXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmdyYXBoaWNzRGF0YS5sZW5ndGg7ICsraSkge1xuICAgICAgICB0aGlzLmdyYXBoaWNzRGF0YVtpXS5kZXN0cm95KCk7XG4gICAgfVxuXG4gICAgLy8gZm9yIGVhY2ggd2ViZ2wgZGF0YSBlbnRyeSwgZGVzdHJveSB0aGUgV2ViR0xHcmFwaGljc0RhdGFcbiAgICBmb3IgKHZhciBpZCBpbiB0aGlzLl93ZWJnbCkge1xuICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IHRoaXMuX3dlYmdsW2lkXS5kYXRhLmxlbmd0aDsgKytqKSB7XG4gICAgICAgICAgICB0aGlzLl93ZWJnbFtpZF0uZGF0YVtqXS5kZXN0cm95KCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLmdyYXBoaWNzRGF0YSA9IG51bGw7XG5cbiAgICB0aGlzLmN1cnJlbnRQYXRoID0gbnVsbDtcbiAgICB0aGlzLl93ZWJnbCA9IG51bGw7XG4gICAgdGhpcy5fbG9jYWxCb3VuZHMgPSBudWxsO1xufTtcbiIsIi8qKlxuICogQSBHcmFwaGljc0RhdGEgb2JqZWN0LlxuICpcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqIEBwYXJhbSBsaW5lV2lkdGgge251bWJlcn0gdGhlIHdpZHRoIG9mIHRoZSBsaW5lIHRvIGRyYXdcbiAqIEBwYXJhbSBsaW5lQ29sb3Ige251bWJlcn0gdGhlIGNvbG9yIG9mIHRoZSBsaW5lIHRvIGRyYXdcbiAqIEBwYXJhbSBsaW5lQWxwaGEge251bWJlcn0gdGhlIGFscGhhIG9mIHRoZSBsaW5lIHRvIGRyYXdcbiAqIEBwYXJhbSBmaWxsQ29sb3Ige251bWJlcn0gdGhlIGNvbG9yIG9mIHRoZSBmaWxsXG4gKiBAcGFyYW0gZmlsbEFscGhhIHtudW1iZXJ9IHRoZSBhbHBoYSBvZiB0aGUgZmlsbFxuICogQHBhcmFtIGZpbGwgICAgICB7Ym9vbGVhbn0gd2hldGhlciBvciBub3QgdGhlIHNoYXBlIGlzIGZpbGxlZCB3aXRoIGEgY29sb3VyXG4gKiBAcGFyYW0gc2hhcGUgICAgIHtDaXJjbGV8UmVjdGFuZ2xlfEVsbGlwc2V8TGluZXxQb2x5Z29ufSBUaGUgc2hhcGUgb2JqZWN0IHRvIGRyYXcuXG4gKi9cbmZ1bmN0aW9uIEdyYXBoaWNzRGF0YShsaW5lV2lkdGgsIGxpbmVDb2xvciwgbGluZUFscGhhLCBmaWxsQ29sb3IsIGZpbGxBbHBoYSwgZmlsbCwgc2hhcGUpXG57XG4gICAgLypcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9IHRoZSB3aWR0aCBvZiB0aGUgbGluZSB0byBkcmF3XG4gICAgICovXG4gICAgdGhpcy5saW5lV2lkdGggPSBsaW5lV2lkdGg7XG5cbiAgICAvKlxuICAgICAqIEBtZW1iZXIge251bWJlcn0gdGhlIGNvbG9yIG9mIHRoZSBsaW5lIHRvIGRyYXdcbiAgICAgKi9cbiAgICB0aGlzLmxpbmVDb2xvciA9IGxpbmVDb2xvcjtcbiAgICAvKlxuICAgICAqIEBtZW1iZXIge251bWJlcn0gdGhlIGFscGhhIG9mIHRoZSBsaW5lIHRvIGRyYXdcbiAgICAgKi9cbiAgICB0aGlzLmxpbmVBbHBoYSA9IGxpbmVBbHBoYTtcbiAgICAvKlxuICAgICAqIEBtZW1iZXIge251bWJlcn0gY2FjaGVkIHRpbnQgb2YgdGhlIGxpbmUgdG8gZHJhd1xuICAgICAqL1xuICAgIHRoaXMuX2xpbmVUaW50ID0gbGluZUNvbG9yO1xuXG4gICAgLypcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9IHRoZSBjb2xvciBvZiB0aGUgZmlsbFxuICAgICAqL1xuICAgIHRoaXMuZmlsbENvbG9yID0gZmlsbENvbG9yO1xuXG4gICAgLypcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9IHRoZSBhbHBoYSBvZiB0aGUgZmlsbFxuICAgICAqL1xuICAgIHRoaXMuZmlsbEFscGhhID0gZmlsbEFscGhhO1xuXG4gICAgLypcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9IGNhY2hlZCB0aW50IG9mIHRoZSBmaWxsXG4gICAgICovXG4gICAgdGhpcy5fZmlsbFRpbnQgPSBmaWxsQ29sb3I7XG5cbiAgICAvKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59IHdoZXRoZXIgb3Igbm90IHRoZSBzaGFwZSBpcyBmaWxsZWQgd2l0aCBhIGNvbG91clxuICAgICAqL1xuICAgIHRoaXMuZmlsbCA9IGZpbGw7XG5cbiAgICAvKlxuICAgICAqIEBtZW1iZXIge1BJWEkuQ2lyY2xlfFBJWEkuUmVjdGFuZ2xlfFBJWEkuRWxsaXBzZXxQSVhJLkxpbmV8UElYSS5Qb2x5Z29ufSBUaGUgc2hhcGUgb2JqZWN0IHRvIGRyYXcuXG4gICAgICovXG4gICAgdGhpcy5zaGFwZSA9IHNoYXBlO1xuXG4gICAgLypcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9IFRoZSB0eXBlIG9mIHRoZSBzaGFwZSwgc2VlIHRoZSBDb25zdC5TaGFwZXMgZmlsZSBmb3IgYWxsIHRoZSBleGlzdGluZyB0eXBlcyxcbiAgICAgKi9cbiAgICB0aGlzLnR5cGUgPSBzaGFwZS50eXBlO1xufVxuXG5HcmFwaGljc0RhdGEucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gR3JhcGhpY3NEYXRhO1xubW9kdWxlLmV4cG9ydHMgPSBHcmFwaGljc0RhdGE7XG5cbi8qKlxuICogQ3JlYXRlcyBhIG5ldyBHcmFwaGljc0RhdGEgb2JqZWN0IHdpdGggdGhlIHNhbWUgdmFsdWVzIGFzIHRoaXMgb25lLlxuICpcbiAqIEByZXR1cm4ge1BJWEkuR3JhcGhpY3NEYXRhfVxuICovXG5HcmFwaGljc0RhdGEucHJvdG90eXBlLmNsb25lID0gZnVuY3Rpb24gKClcbntcbiAgICByZXR1cm4gbmV3IEdyYXBoaWNzRGF0YShcbiAgICAgICAgdGhpcy5saW5lV2lkdGgsXG4gICAgICAgIHRoaXMubGluZUNvbG9yLFxuICAgICAgICB0aGlzLmxpbmVBbHBoYSxcbiAgICAgICAgdGhpcy5maWxsQ29sb3IsXG4gICAgICAgIHRoaXMuZmlsbEFscGhhLFxuICAgICAgICB0aGlzLmZpbGwsXG4gICAgICAgIHRoaXMuc2hhcGVcbiAgICApO1xufTtcblxuLyoqXG4gKiBEZXN0cm95cyB0aGUgR3JhcGhpY3MgZGF0YS5cbiAqL1xuR3JhcGhpY3NEYXRhLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKCkge1xuICAgIHRoaXMuc2hhcGUgPSBudWxsO1xufTtcbiIsInZhciB1dGlscyA9IHJlcXVpcmUoJy4uLy4uL3V0aWxzJyksXG4gICAgbWF0aCA9IHJlcXVpcmUoJy4uLy4uL21hdGgnKSxcbiAgICBDT05TVCA9IHJlcXVpcmUoJy4uLy4uL2NvbnN0JyksXG4gICAgT2JqZWN0UmVuZGVyZXIgPSByZXF1aXJlKCcuLi8uLi9yZW5kZXJlcnMvd2ViZ2wvdXRpbHMvT2JqZWN0UmVuZGVyZXInKSxcbiAgICBXZWJHTFJlbmRlcmVyID0gcmVxdWlyZSgnLi4vLi4vcmVuZGVyZXJzL3dlYmdsL1dlYkdMUmVuZGVyZXInKSxcbiAgICBXZWJHTEdyYXBoaWNzRGF0YSA9IHJlcXVpcmUoJy4vV2ViR0xHcmFwaGljc0RhdGEnKSxcbiAgICBQcmltaXRpdmVTaGFkZXIgPSByZXF1aXJlKCcuL1ByaW1pdGl2ZVNoYWRlcicpLFxuXG4gICAgLy8gc29tZSBkcmF3aW5nIGZ1bmN0aW9ucy4uXG4gICAgYnVpbGRMaW5lID0gcmVxdWlyZSgnLi9idWlsZExpbmUnKTtcbiAgICBidWlsZFBvbHkgPSByZXF1aXJlKCcuL2J1aWxkUG9seScpO1xuICAgIGJ1aWxkQ29tcGxleFBvbHkgPSByZXF1aXJlKCcuL2J1aWxkQ29tcGxleFBvbHknKTtcbiAgICBidWlsZFJlY3RhbmdsZSA9IHJlcXVpcmUoJy4vYnVpbGRSZWN0YW5nbGUnKTtcbiAgICBidWlsZFJvdW5kZWRSZWN0YW5nbGUgPSByZXF1aXJlKCcuL2J1aWxkUm91bmRlZFJlY3RhbmdsZScpO1xuICAgIGJ1aWxkQ2lyY2xlID0gcmVxdWlyZSgnLi9idWlsZENpcmNsZScpO1xuXG4gICAgZWFyY3V0ID0gcmVxdWlyZSgnZWFyY3V0Jyk7XG5cbi8qKlxuICogUmVuZGVycyB0aGUgZ3JhcGhpY3Mgb2JqZWN0LlxuICpcbiAqIEBjbGFzc1xuICogQHByaXZhdGVcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAZXh0ZW5kcyBQSVhJLk9iamVjdFJlbmRlcmVyXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcn0gVGhlIHJlbmRlcmVyIHRoaXMgb2JqZWN0IHJlbmRlcmVyIHdvcmtzIGZvci5cbiAqL1xuZnVuY3Rpb24gR3JhcGhpY3NSZW5kZXJlcihyZW5kZXJlcilcbntcbiAgICBPYmplY3RSZW5kZXJlci5jYWxsKHRoaXMsIHJlbmRlcmVyKTtcblxuICAgIHRoaXMuZ3JhcGhpY3NEYXRhUG9vbCA9IFtdO1xuXG4gICAgdGhpcy5wcmltaXRpdmVTaGFkZXIgPSBudWxsO1xuICAgIHRoaXMuY29tcGxleFByaW1pdGl2ZVNoYWRlciA9IG51bGw7XG5cbiAgICB0aGlzLmdsID0gcmVuZGVyZXIuZ2w7XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIGlzIHRoZSBtYXhpbXVtIG51bWJlciBvZiBwb2ludHMgYSBwb2x5IGNhbiBjb250YWluIGJlZm9yZSBpdCBpcyByZW5kZXJlZCBhcyBhIGNvbXBsZXggcG9seWdvbiAodXNpbmcgdGhlIHN0ZW5jaWwgYnVmZmVyKVxuICAgICAqIEB0eXBlIHtOdW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy5tYXhpbXVtU2ltcGxlUG9seVNpemUgPSAyMDA7XG59XG5cbkdyYXBoaWNzUmVuZGVyZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShPYmplY3RSZW5kZXJlci5wcm90b3R5cGUpO1xuR3JhcGhpY3NSZW5kZXJlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBHcmFwaGljc1JlbmRlcmVyO1xubW9kdWxlLmV4cG9ydHMgPSBHcmFwaGljc1JlbmRlcmVyO1xuXG5XZWJHTFJlbmRlcmVyLnJlZ2lzdGVyUGx1Z2luKCdncmFwaGljcycsIEdyYXBoaWNzUmVuZGVyZXIpO1xuXG4vKipcbiAqIENhbGxlZCB3aGVuIHRoZXJlIGlzIGEgV2ViR0wgY29udGV4dCBjaGFuZ2VcbiAqXG4gKiBAcHJpdmF0ZVxuICpcbiAqL1xuR3JhcGhpY3NSZW5kZXJlci5wcm90b3R5cGUub25Db250ZXh0Q2hhbmdlID0gZnVuY3Rpb24oKVxue1xuICAgIHRoaXMuZ2wgPSB0aGlzLnJlbmRlcmVyLmdsO1xuICAgIHRoaXMucHJpbWl0aXZlU2hhZGVyID0gbmV3IFByaW1pdGl2ZVNoYWRlcih0aGlzLmdsKVxufTtcblxuLyoqXG4gKiBEZXN0cm95cyB0aGlzIHJlbmRlcmVyLlxuICpcbiAqL1xuR3JhcGhpY3NSZW5kZXJlci5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uICgpIHtcbiAgICBPYmplY3RSZW5kZXJlci5wcm90b3R5cGUuZGVzdHJveS5jYWxsKHRoaXMpO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmdyYXBoaWNzRGF0YVBvb2wubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgdGhpcy5ncmFwaGljc0RhdGFQb29sW2ldLmRlc3Ryb3koKTtcbiAgICB9XG5cbiAgICB0aGlzLmdyYXBoaWNzRGF0YVBvb2wgPSBudWxsO1xufTtcblxuLyoqXG4gKiBSZW5kZXJzIGEgZ3JhcGhpY3Mgb2JqZWN0LlxuICpcbiAqIEBwYXJhbSBncmFwaGljcyB7UElYSS5HcmFwaGljc30gVGhlIGdyYXBoaWNzIG9iamVjdCB0byByZW5kZXIuXG4gKi9cbkdyYXBoaWNzUmVuZGVyZXIucHJvdG90eXBlLnJlbmRlciA9IGZ1bmN0aW9uKGdyYXBoaWNzKVxue1xuICAgIHZhciByZW5kZXJlciA9IHRoaXMucmVuZGVyZXI7XG4gICAgdmFyIGdsID0gcmVuZGVyZXIuZ2w7XG5cbiAgICB2YXIgd2ViR0xEYXRhO1xuICAvLyAgY29uc29sZS5sb2coZ3JhcGhpY3MpXG4gICAgaWYgKGdyYXBoaWNzLmRpcnR5IHx8ICFncmFwaGljcy5fd2ViR0xbZ2wuaWRdKVxuICAgIHtcbiAgICAgICAgdGhpcy51cGRhdGVHcmFwaGljcyhncmFwaGljcyk7XG4gICAgfVxuXG4gICAgdmFyIHdlYkdMID0gZ3JhcGhpY3MuX3dlYkdMW2dsLmlkXTtcblxuICAgIC8vIFRoaXMgIGNvdWxkIGJlIHNwZWVkZWQgdXAgZm9yIHN1cmUhXG5cbiAgICByZW5kZXJlci5ibGVuZE1vZGVNYW5hZ2VyLnNldEJsZW5kTW9kZSggZ3JhcGhpY3MuYmxlbmRNb2RlICk7XG5cbi8vICAgIHZhciBtYXRyaXggPSAgZ3JhcGhpY3Mud29ybGRUcmFuc2Zvcm0uY2xvbmUoKTtcbi8vICAgIHZhciBtYXRyaXggPSAgcmVuZGVyZXIuY3VycmVudFJlbmRlclRhcmdldC5wcm9qZWN0aW9uTWF0cml4LmNsb25lKCk7XG4vLyAgICBtYXRyaXguYXBwZW5kKGdyYXBoaWNzLndvcmxkVHJhbnNmb3JtKTtcblxuICAgIGZvciAodmFyIGkgPSAwLCBuID0gd2ViR0wuZGF0YS5sZW5ndGg7IGkgPCBuOyBpKyspXG4gICAge1xuICAgICAgICB3ZWJHTERhdGEgPSB3ZWJHTC5kYXRhW2ldO1xuXG4gICAgICAgIGlmICh3ZWJHTC5kYXRhW2ldLm1vZGUgPT09IDEpXG4gICAgICAgIHtcbiAgICAgICAgICAgIC8vVE9ETyBmaXggdGhpcyBvbmUhXG4gICAgICAgICAgICBcbiAgICAgICAgICAgIC8qXG4gICAgICAgICAgICByZW5kZXJlci5zdGVuY2lsTWFuYWdlci5wdXNoU3RlbmNpbChncmFwaGljcywgd2ViR0xEYXRhKTtcblxuICAgICAgICAgICAgZ2wudW5pZm9ybTFmKHJlbmRlcmVyLnNoYWRlck1hbmFnZXIuY29tcGxleFByaW1pdGl2ZVNoYWRlci51bmlmb3Jtcy5hbHBoYS5fbG9jYXRpb24sIGdyYXBoaWNzLndvcmxkQWxwaGEgKiB3ZWJHTERhdGEuYWxwaGEpO1xuXG4gICAgICAgICAgICAvLyByZW5kZXIgcXVhZC4uXG4gICAgICAgICAgICBnbC5kcmF3RWxlbWVudHMoZ2wuVFJJQU5HTEVfRkFOLCA0LCBnbC5VTlNJR05FRF9TSE9SVCwgKCB3ZWJHTERhdGEuaW5kaWNlcy5sZW5ndGggLSA0ICkgKiAyICk7XG5cbiAgICAgICAgICAgIHJlbmRlcmVyLnN0ZW5jaWxNYW5hZ2VyLnBvcFN0ZW5jaWwoZ3JhcGhpY3MsIHdlYkdMRGF0YSk7XG4gICAgICAgICAgICAqL1xuICAgICAgICB9XG4gICAgICAgIGVsc2VcbiAgICAgICAge1xuXG4gICAgICAgICAgICBzaGFkZXIgPSB0aGlzLnByaW1pdGl2ZVNoYWRlcjtcblxuICAgICAgICAgICAgcmVuZGVyZXIuYmluZFNoYWRlcihzaGFkZXIpXG5cbiAgICAgICAgICAgIHNoYWRlci51bmlmb3Jtcy50cmFuc2xhdGlvbk1hdHJpeCA9IGdyYXBoaWNzLndvcmxkVHJhbnNmb3JtLnRvQXJyYXkodHJ1ZSk7XG4gICAgICAgICAgICBzaGFkZXIudW5pZm9ybXMudGludCA9IHV0aWxzLmhleDJyZ2IoZ3JhcGhpY3MudGludCk7XG4gICAgICAgICAgICBzaGFkZXIudW5pZm9ybXMuYWxwaGEgPSBncmFwaGljcy53b3JsZEFscGhhO1xuXG5cbiAgICAgICAgICAgIGdsLmJpbmRCdWZmZXIoZ2wuQVJSQVlfQlVGRkVSLCB3ZWJHTERhdGEuYnVmZmVyKTtcblxuICAgICAgICAgICAgc2hhZGVyID0gdGhpcy5wcmltaXRpdmVTaGFkZXI7XG5cbiAgICAgICAgICAgIHNoYWRlci5hdHRyaWJ1dGVzLmFWZXJ0ZXhQb3NpdGlvbi5wb2ludGVyKGdsLkZMT0FULCBmYWxzZSwgNCAqIDYsIDApO1xuICAgICAgICAgICAgc2hhZGVyLmF0dHJpYnV0ZXMuYUNvbG9yLnBvaW50ZXIoZ2wuRkxPQVQsIGZhbHNlLCA0ICogNiwgMiAqIDQpO1xuXG4gICAgICAgICAgICBnbC5lbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShzaGFkZXIuYXR0cmlidXRlcy5hVmVydGV4UG9zaXRpb24ubG9jYXRpb24pO1xuICAgICAgICAgICAgZ2wuZW5hYmxlVmVydGV4QXR0cmliQXJyYXkoc2hhZGVyLmF0dHJpYnV0ZXMuYUNvbG9yLmxvY2F0aW9uKTtcblxuICAgICAgICAgICAgLy8gc2V0IHRoZSBpbmRleCBidWZmZXIhXG4gICAgICAgICAgICBnbC5iaW5kQnVmZmVyKGdsLkVMRU1FTlRfQVJSQVlfQlVGRkVSLCB3ZWJHTERhdGEuaW5kZXhCdWZmZXIpO1xuICAgICAgICAgICAgZ2wuZHJhd0VsZW1lbnRzKGdsLlRSSUFOR0xFX1NUUklQLCAgd2ViR0xEYXRhLmluZGljZXMubGVuZ3RoLCBnbC5VTlNJR05FRF9TSE9SVCwgMCApO1xuICAgICAgICB9XG5cbiAgICAgICAgcmVuZGVyZXIuZHJhd0NvdW50Kys7XG4gICAgfVxufTtcblxuLyoqXG4gKiBVcGRhdGVzIHRoZSBncmFwaGljcyBvYmplY3RcbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIGdyYXBoaWNzIHtQSVhJLkdyYXBoaWNzfSBUaGUgZ3JhcGhpY3Mgb2JqZWN0IHRvIHVwZGF0ZVxuICovXG5HcmFwaGljc1JlbmRlcmVyLnByb3RvdHlwZS51cGRhdGVHcmFwaGljcyA9IGZ1bmN0aW9uKGdyYXBoaWNzKVxue1xuICAgIHZhciBnbCA9IHRoaXMucmVuZGVyZXIuZ2w7XG5cbiAgICAgLy8gZ2V0IHRoZSBjb250ZXh0cyBncmFwaGljcyBvYmplY3RcbiAgICB2YXIgd2ViR0wgPSBncmFwaGljcy5fd2ViR0xbZ2wuaWRdO1xuXG4gICAgLy8gaWYgdGhlIGdyYXBoaWNzIG9iamVjdCBkb2VzIG5vdCBleGlzdCBpbiB0aGUgd2ViR0wgY29udGV4dCB0aW1lIHRvIGNyZWF0ZSBpdCFcbiAgICBpZiAoIXdlYkdMKVxuICAgIHtcbiAgICAgICAgd2ViR0wgPSBncmFwaGljcy5fd2ViR0xbZ2wuaWRdID0ge2xhc3RJbmRleDowLCBkYXRhOltdLCBnbDpnbH07XG4gICAgfVxuXG4gICBcbiAgICAvLyBmbGFnIHRoZSBncmFwaGljcyBhcyBub3QgZGlydHkgYXMgd2UgYXJlIGFib3V0IHRvIHVwZGF0ZSBpdC4uLlxuICAgIGdyYXBoaWNzLmRpcnR5ID0gZmFsc2U7XG5cbiAgICB2YXIgaTtcblxuICAgIC8vIGlmIHRoZSB1c2VyIGNsZWFyZWQgdGhlIGdyYXBoaWNzIG9iamVjdCB3ZSB3aWxsIG5lZWQgdG8gY2xlYXIgZXZlcnkgb2JqZWN0XG4gICAgaWYgKGdyYXBoaWNzLmNsZWFyRGlydHkpXG4gICAge1xuICAgICAgICBncmFwaGljcy5jbGVhckRpcnR5ID0gZmFsc2U7XG5cbiAgICAgICAgLy8gbG9vcCB0aHJvdWdoIGFuZCByZXR1cm4gYWxsIHRoZSB3ZWJHTERhdGFzIHRvIHRoZSBvYmplY3QgcG9vbCBzbyB0aGFuIGNhbiBiZSByZXVzZWQgbGF0ZXIgb25cbiAgICAgICAgZm9yIChpID0gMDsgaSA8IHdlYkdMLmRhdGEubGVuZ3RoOyBpKyspXG4gICAgICAgIHtcbiAgICAgICAgICAgIHZhciBncmFwaGljc0RhdGEgPSB3ZWJHTC5kYXRhW2ldO1xuICAgICAgICAgICAgZ3JhcGhpY3NEYXRhLnJlc2V0KCk7XG4gICAgICAgICAgICB0aGlzLmdyYXBoaWNzRGF0YVBvb2wucHVzaCggZ3JhcGhpY3NEYXRhICk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBjbGVhciB0aGUgYXJyYXkgYW5kIHJlc2V0IHRoZSBpbmRleC4uXG4gICAgICAgIHdlYkdMLmRhdGEgPSBbXTtcbiAgICAgICAgd2ViR0wubGFzdEluZGV4ID0gMDtcbiAgICB9XG5cbiAgICB2YXIgd2ViR0xEYXRhO1xuXG4gICAgLy8gbG9vcCB0aHJvdWdoIHRoZSBncmFwaGljcyBkYXRhcyBhbmQgY29uc3RydWN0IGVhY2ggb25lLi5cbiAgICAvLyBpZiB0aGUgb2JqZWN0IGlzIGEgY29tcGxleCBmaWxsIHRoZW4gdGhlIG5ldyBzdGVuY2lsIGJ1ZmZlciB0ZWNobmlxdWUgd2lsbCBiZSB1c2VkXG4gICAgLy8gb3RoZXIgd2lzZSBncmFwaGljcyBvYmplY3RzIHdpbGwgYmUgcHVzaGVkIGludG8gYSBiYXRjaC4uXG4gICAgZm9yIChpID0gd2ViR0wubGFzdEluZGV4OyBpIDwgZ3JhcGhpY3MuZ3JhcGhpY3NEYXRhLmxlbmd0aDsgaSsrKVxuICAgIHtcbiAgICAgICAgdmFyIGRhdGEgPSBncmFwaGljcy5ncmFwaGljc0RhdGFbaV07XG5cbiAgICAgICAgaWYgKGRhdGEudHlwZSA9PT0gQ09OU1QuU0hBUEVTLlBPTFkpXG4gICAgICAgIHtcbiAgICAgICAgICAgIC8vIG5lZWQgdG8gYWRkIHRoZSBwb2ludHMgdGhlIHRoZSBncmFwaGljcyBvYmplY3QuLlxuICAgICAgICAgICAgZGF0YS5wb2ludHMgPSBkYXRhLnNoYXBlLnBvaW50cy5zbGljZSgpO1xuICAgICAgICAgICAgaWYgKGRhdGEuc2hhcGUuY2xvc2VkKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIC8vIGNsb3NlIHRoZSBwb2x5IGlmIHRoZSB2YWx1ZSBpcyB0cnVlIVxuICAgICAgICAgICAgICAgIGlmIChkYXRhLnBvaW50c1swXSAhPT0gZGF0YS5wb2ludHNbZGF0YS5wb2ludHMubGVuZ3RoLTJdIHx8IGRhdGEucG9pbnRzWzFdICE9PSBkYXRhLnBvaW50c1tkYXRhLnBvaW50cy5sZW5ndGgtMV0pXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBkYXRhLnBvaW50cy5wdXNoKGRhdGEucG9pbnRzWzBdLCBkYXRhLnBvaW50c1sxXSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBNQUtFIFNVUkUgV0UgSEFWRSBUSEUgQ09SUkVDVCBUWVBFLi5cbiAgICAgICAgICAgIGlmIChkYXRhLmZpbGwpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgaWYgKGRhdGEucG9pbnRzLmxlbmd0aCA+PSA2KVxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGRhdGEucG9pbnRzLmxlbmd0aCA8IHRoaXMubWF4aW11bVNpbXBsZVBvbHlTaXplICogMilcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgd2ViR0xEYXRhID0gdGhpcy5zd2l0Y2hNb2RlKHdlYkdMLCAwKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNhbkRyYXdVc2luZ1NpbXBsZSA9IGJ1aWxkUG9seShkYXRhLCB3ZWJHTERhdGEpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWNhbkRyYXdVc2luZ1NpbXBsZSlcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3ZWJHTERhdGEgPSB0aGlzLnN3aXRjaE1vZGUod2ViR0wsIDEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1aWxkQ29tcGxleFBvbHkoZGF0YSwgd2ViR0xEYXRhKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgd2ViR0xEYXRhID0gdGhpcy5zd2l0Y2hNb2RlKHdlYkdMLCAxKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJ1aWxkQ29tcGxleFBvbHkoZGF0YSwgd2ViR0xEYXRhKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGRhdGEubGluZVdpZHRoID4gMClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB3ZWJHTERhdGEgPSB0aGlzLnN3aXRjaE1vZGUod2ViR0wsIDApO1xuICAgICAgICAgICAgICAgIGJ1aWxkTGluZShkYXRhLCB3ZWJHTERhdGEpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2VcbiAgICAgICAge1xuICAgICAgICAgICAgd2ViR0xEYXRhID0gdGhpcy5zd2l0Y2hNb2RlKHdlYkdMLCAwKTtcblxuICAgICAgICAgICAgaWYgKGRhdGEudHlwZSA9PT0gQ09OU1QuU0hBUEVTLlJFQ1QpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgYnVpbGRSZWN0YW5nbGUoZGF0YSwgd2ViR0xEYXRhKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGRhdGEudHlwZSA9PT0gQ09OU1QuU0hBUEVTLkNJUkMgfHwgZGF0YS50eXBlID09PSBDT05TVC5TSEFQRVMuRUxJUClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBidWlsZENpcmNsZShkYXRhLCB3ZWJHTERhdGEpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoZGF0YS50eXBlID09PSBDT05TVC5TSEFQRVMuUlJFQylcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBidWlsZFJvdW5kZWRSZWN0YW5nbGUoZGF0YSwgd2ViR0xEYXRhKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHdlYkdMLmxhc3RJbmRleCsrO1xuICAgIH1cblxuICAgIC8vIHVwbG9hZCBhbGwgdGhlIGRpcnR5IGRhdGEuLi5cbiAgICBmb3IgKGkgPSAwOyBpIDwgd2ViR0wuZGF0YS5sZW5ndGg7IGkrKylcbiAgICB7XG4gICAgICAgIHdlYkdMRGF0YSA9IHdlYkdMLmRhdGFbaV07XG5cbiAgICAgICAgaWYgKHdlYkdMRGF0YS5kaXJ0eSlcbiAgICAgICAge1xuICAgICAgICAgICAgd2ViR0xEYXRhLnVwbG9hZCgpO1xuICAgICAgICB9XG4gICAgfVxufTtcblxuLyoqXG4gKlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0gd2ViR0wge1dlYkdMUmVuZGVyaW5nQ29udGV4dH0gdGhlIGN1cnJlbnQgV2ViR0wgZHJhd2luZyBjb250ZXh0XG4gKiBAcGFyYW0gdHlwZSB7bnVtYmVyfSBUT0RPIEBBbHZpblxuICovXG5HcmFwaGljc1JlbmRlcmVyLnByb3RvdHlwZS5zd2l0Y2hNb2RlID0gZnVuY3Rpb24gKHdlYkdMLCB0eXBlKVxue1xuICAgIHZhciB3ZWJHTERhdGE7XG5cbiAgICBpZiAoIXdlYkdMLmRhdGEubGVuZ3RoKVxuICAgIHtcbiAgICAgICAgd2ViR0xEYXRhID0gdGhpcy5ncmFwaGljc0RhdGFQb29sLnBvcCgpIHx8IG5ldyBXZWJHTEdyYXBoaWNzRGF0YSh3ZWJHTC5nbCk7XG4gICAgICAgIHdlYkdMRGF0YS5tb2RlID0gdHlwZTtcbiAgICAgICAgd2ViR0wuZGF0YS5wdXNoKHdlYkdMRGF0YSk7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHdlYkdMRGF0YSA9IHdlYkdMLmRhdGFbd2ViR0wuZGF0YS5sZW5ndGgtMV07XG5cbiAgICAgICAgaWYgKCh3ZWJHTERhdGEucG9pbnRzLmxlbmd0aCA+IDMyMDAwMCkgfHwgd2ViR0xEYXRhLm1vZGUgIT09IHR5cGUgfHwgdHlwZSA9PT0gMSlcbiAgICAgICAge1xuICAgICAgICAgICAgd2ViR0xEYXRhID0gdGhpcy5ncmFwaGljc0RhdGFQb29sLnBvcCgpIHx8IG5ldyBXZWJHTEdyYXBoaWNzRGF0YSh3ZWJHTC5nbCk7XG4gICAgICAgICAgICB3ZWJHTERhdGEubW9kZSA9IHR5cGU7XG4gICAgICAgICAgICB3ZWJHTC5kYXRhLnB1c2god2ViR0xEYXRhKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHdlYkdMRGF0YS5kaXJ0eSA9IHRydWU7XG5cbiAgICByZXR1cm4gd2ViR0xEYXRhO1xufTtcblxuIiwidmFyIFNoYWRlciA9IHJlcXVpcmUoJ3BpeGktZ2wtY29yZScpLkdMU2hhZGVyO1xuXG4vKipcbiAqIFRoaXMgc2hhZGVyIGlzIHVzZWQgdG8gZHJhdyBzaW1wbGUgcHJpbWl0aXZlIHNoYXBlcyBmb3Ige0BsaW5rIFBJWEkuR3JhcGhpY3N9LlxuICpcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqIEBleHRlbmRzIFBJWEkuU2hhZGVyXG4gKiBAcGFyYW0gc2hhZGVyTWFuYWdlciB7U2hhZGVyTWFuYWdlcn0gVGhlIHdlYmdsIHNoYWRlciBtYW5hZ2VyIHRoaXMgc2hhZGVyIHdvcmtzIGZvci5cbiAqL1xuZnVuY3Rpb24gUHJpbWl0aXZlU2hhZGVyKGdsKVxue1xuICAgIFNoYWRlci5jYWxsKHRoaXMsXG4gICAgICAgIGdsLFxuICAgICAgICAvLyB2ZXJ0ZXggc2hhZGVyXG4gICAgICAgIFtcbiAgICAgICAgICAgICdhdHRyaWJ1dGUgdmVjMiBhVmVydGV4UG9zaXRpb247JyxcbiAgICAgICAgICAgICdhdHRyaWJ1dGUgdmVjNCBhQ29sb3I7JyxcblxuICAgICAgICAgICAgJ3VuaWZvcm0gbWF0MyB0cmFuc2xhdGlvbk1hdHJpeDsnLFxuICAgICAgICAgICAgJ3VuaWZvcm0gbWF0MyBwcm9qZWN0aW9uTWF0cml4OycsXG5cbiAgICAgICAgICAgICd1bmlmb3JtIGZsb2F0IGFscGhhOycsXG4gICAgICAgICAgICAndW5pZm9ybSBmbG9hdCBmbGlwWTsnLFxuICAgICAgICAgICAgJ3VuaWZvcm0gdmVjMyB0aW50OycsXG5cbiAgICAgICAgICAgICd2YXJ5aW5nIHZlYzQgdkNvbG9yOycsXG5cbiAgICAgICAgICAgICd2b2lkIG1haW4odm9pZCl7JyxcbiAgICAgICAgICAgICcgICBnbF9Qb3NpdGlvbiA9IHZlYzQoKHByb2plY3Rpb25NYXRyaXggKiB0cmFuc2xhdGlvbk1hdHJpeCAqIHZlYzMoYVZlcnRleFBvc2l0aW9uLCAxLjApKS54eSwgMC4wLCAxLjApOycsXG4gICAgICAgICAgICAnICAgdkNvbG9yID0gYUNvbG9yICogdmVjNCh0aW50ICogYWxwaGEsIGFscGhhKTsnLFxuICAgICAgICAgICAgJ30nXG4gICAgICAgIF0uam9pbignXFxuJyksXG4gICAgICAgIC8vIGZyYWdtZW50IHNoYWRlclxuICAgICAgICBbXG4gICAgICAgICAgICAncHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7JyxcblxuICAgICAgICAgICAgJ3ZhcnlpbmcgdmVjNCB2Q29sb3I7JyxcblxuICAgICAgICAgICAgJ3ZvaWQgbWFpbih2b2lkKXsnLFxuICAgICAgICAgICAgJyAgIGdsX0ZyYWdDb2xvciA9IHZDb2xvcjsnLFxuICAgICAgICAgICAgJ30nXG4gICAgICAgIF0uam9pbignXFxuJylcbiAgICApO1xufVxuXG5QcmltaXRpdmVTaGFkZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShTaGFkZXIucHJvdG90eXBlKTtcblByaW1pdGl2ZVNoYWRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBQcmltaXRpdmVTaGFkZXI7XG5cbm1vZHVsZS5leHBvcnRzID0gUHJpbWl0aXZlU2hhZGVyO1xuIiwiLyoqXG4gKiBBbiBvYmplY3QgY29udGFpbmluZyBXZWJHTCBzcGVjaWZpYyBwcm9wZXJ0aWVzIHRvIGJlIHVzZWQgYnkgdGhlIFdlYkdMIHJlbmRlcmVyXG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIGdsIHtXZWJHTFJlbmRlcmluZ0NvbnRleHR9IHRoZSBjdXJyZW50IFdlYkdMIGRyYXdpbmcgY29udGV4dFxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gV2ViR0xHcmFwaGljc0RhdGEoZ2wpIHtcblxuICAgIC8qKlxuICAgICAqIFRoZSBjdXJyZW50IFdlYkdMIGRyYXdpbmcgY29udGV4dFxuICAgICAqXG4gICAgICogQG1lbWJlciB7V2ViR0xSZW5kZXJpbmdDb250ZXh0fVxuICAgICAqL1xuICAgIHRoaXMuZ2wgPSBnbDtcblxuICAgIC8vVE9ETyBkb2VzIHRoaXMgbmVlZCB0byBiZSBzcGxpdCBiZWZvcmUgdXBsb2Rpbmc/P1xuICAgIC8qKlxuICAgICAqIEFuIGFycmF5IG9mIGNvbG9yIGNvbXBvbmVudHMgKHIsZyxiKVxuICAgICAqIEBtZW1iZXIge251bWJlcltdfVxuICAgICAqL1xuICAgIHRoaXMuY29sb3IgPSBbMCwwLDBdOyAvLyBjb2xvciBzcGxpdCFcblxuICAgIC8qKlxuICAgICAqIEFuIGFycmF5IG9mIHBvaW50cyB0byBkcmF3XG4gICAgICogQG1lbWJlciB7UElYSS5Qb2ludFtdfVxuICAgICAqL1xuICAgIHRoaXMucG9pbnRzID0gW107XG5cbiAgICAvKipcbiAgICAgKiBUaGUgaW5kaWNlcyBvZiB0aGUgdmVydGljZXNcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJbXX1cbiAgICAgKi9cbiAgICB0aGlzLmluZGljZXMgPSBbXTtcbiAgICAvKipcbiAgICAgKiBUaGUgbWFpbiBidWZmZXJcbiAgICAgKiBAbWVtYmVyIHtXZWJHTEJ1ZmZlcn1cbiAgICAgKi9cbiAgICB0aGlzLmJ1ZmZlciA9IGdsLmNyZWF0ZUJ1ZmZlcigpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGluZGV4IGJ1ZmZlclxuICAgICAqIEBtZW1iZXIge1dlYkdMQnVmZmVyfVxuICAgICAqL1xuICAgIHRoaXMuaW5kZXhCdWZmZXIgPSBnbC5jcmVhdGVCdWZmZXIoKTtcblxuICAgIC8qKlxuICAgICAqIHRvZG8gQGFsdmluXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMubW9kZSA9IDE7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYWxwaGEgb2YgdGhlIGdyYXBoaWNzXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMuYWxwaGEgPSAxO1xuXG4gICAgLyoqXG4gICAgICogV2hldGhlciB0aGlzIGdyYXBoaWNzIGlzIGRpcnR5IG9yIG5vdFxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICovXG4gICAgdGhpcy5kaXJ0eSA9IHRydWU7XG5cbiAgICB0aGlzLmdsUG9pbnRzID0gbnVsbDtcbiAgICB0aGlzLmdsSW5kaWNlcyA9IG51bGw7XG59XG5cbldlYkdMR3JhcGhpY3NEYXRhLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFdlYkdMR3JhcGhpY3NEYXRhO1xubW9kdWxlLmV4cG9ydHMgPSBXZWJHTEdyYXBoaWNzRGF0YTtcblxuLyoqXG4gKiBSZXNldHMgdGhlIHZlcnRpY2VzIGFuZCB0aGUgaW5kaWNlc1xuICovXG5XZWJHTEdyYXBoaWNzRGF0YS5wcm90b3R5cGUucmVzZXQgPSBmdW5jdGlvbiAoKSB7XG4gICAgdGhpcy5wb2ludHMubGVuZ3RoID0gMDtcbiAgICB0aGlzLmluZGljZXMubGVuZ3RoID0gMDtcbn07XG5cbi8qKlxuICogQmluZHMgdGhlIGJ1ZmZlcnMgYW5kIHVwbG9hZHMgdGhlIGRhdGFcbiAqL1xuV2ViR0xHcmFwaGljc0RhdGEucHJvdG90eXBlLnVwbG9hZCA9IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgZ2wgPSB0aGlzLmdsO1xuXG4vLyAgICB0aGlzLmxhc3RJbmRleCA9IGdyYXBoaWNzLmdyYXBoaWNzRGF0YS5sZW5ndGg7XG4gICAgdGhpcy5nbFBvaW50cyA9IG5ldyBGbG9hdDMyQXJyYXkodGhpcy5wb2ludHMpO1xuXG4gICAgZ2wuYmluZEJ1ZmZlcihnbC5BUlJBWV9CVUZGRVIsIHRoaXMuYnVmZmVyKTtcbiAgICBnbC5idWZmZXJEYXRhKGdsLkFSUkFZX0JVRkZFUiwgdGhpcy5nbFBvaW50cywgZ2wuU1RBVElDX0RSQVcpO1xuXG4gICAgdGhpcy5nbEluZGljZXMgPSBuZXcgVWludDE2QXJyYXkodGhpcy5pbmRpY2VzKTtcblxuICAgIGdsLmJpbmRCdWZmZXIoZ2wuRUxFTUVOVF9BUlJBWV9CVUZGRVIsIHRoaXMuaW5kZXhCdWZmZXIpO1xuICAgIGdsLmJ1ZmZlckRhdGEoZ2wuRUxFTUVOVF9BUlJBWV9CVUZGRVIsIHRoaXMuZ2xJbmRpY2VzLCBnbC5TVEFUSUNfRFJBVyk7XG5cbiAgICB0aGlzLmRpcnR5ID0gZmFsc2U7XG59O1xuXG5XZWJHTEdyYXBoaWNzRGF0YS5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uICgpIHtcbiAgICB0aGlzLmNvbG9yID0gbnVsbDtcbiAgICB0aGlzLnBvaW50cyA9IG51bGw7XG4gICAgdGhpcy5pbmRpY2VzID0gbnVsbDtcblxuICAgIHRoaXMuZ2wuZGVsZXRlQnVmZmVyKHRoaXMuYnVmZmVyKTtcbiAgICB0aGlzLmdsLmRlbGV0ZUJ1ZmZlcih0aGlzLmluZGV4QnVmZmVyKTtcbiAgICBcbiAgICB0aGlzLmdsID0gbnVsbDtcblxuICAgIHRoaXMuYnVmZmVyID0gbnVsbDtcbiAgICB0aGlzLmluZGV4QnVmZmVyID0gbnVsbDtcblxuICAgIHRoaXMuZ2xQb2ludHMgPSBudWxsO1xuICAgIHRoaXMuZ2xJbmRpY2VzID0gbnVsbDtcbn07XG4iLCJ2YXIgYnVpbGRMaW5lID0gcmVxdWlyZSgnLi9idWlsZExpbmUnKSxcbiAgICB1dGlscyA9IHJlcXVpcmUoJy4uLy4uL3V0aWxzJyk7XG5cbi8qKlxuICogQnVpbGRzIGEgY2lyY2xlIHRvIGRyYXdcbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIGdyYXBoaWNzRGF0YSB7UElYSS5HcmFwaGljc30gVGhlIGdyYXBoaWNzIG9iamVjdCB0byBkcmF3XG4gKiBAcGFyYW0gd2ViR0xEYXRhIHtvYmplY3R9IGFuIG9iamVjdCBjb250YWluaW5nIGFsbCB0aGUgd2ViR0wtc3BlY2lmaWMgaW5mb3JtYXRpb24gdG8gY3JlYXRlIHRoaXMgc2hhcGVcbiAqL1xudmFyIGJ1aWxkQ2lyY2xlID0gZnVuY3Rpb24gKGdyYXBoaWNzRGF0YSwgd2ViR0xEYXRhKVxue1xuICAgIC8vIG5lZWQgdG8gY29udmVydCBwb2ludHMgdG8gYSBuaWNlIHJlZ3VsYXIgZGF0YVxuICAgIHZhciBjaXJjbGVEYXRhID0gZ3JhcGhpY3NEYXRhLnNoYXBlO1xuICAgIHZhciB4ID0gY2lyY2xlRGF0YS54O1xuICAgIHZhciB5ID0gY2lyY2xlRGF0YS55O1xuICAgIHZhciB3aWR0aDtcbiAgICB2YXIgaGVpZ2h0O1xuXG4gICAgLy8gVE9ETyAtIGJpdCBoYWNreT8/XG4gICAgaWYgKGdyYXBoaWNzRGF0YS50eXBlID09PSBDT05TVC5TSEFQRVMuQ0lSQylcbiAgICB7XG4gICAgICAgIHdpZHRoID0gY2lyY2xlRGF0YS5yYWRpdXM7XG4gICAgICAgIGhlaWdodCA9IGNpcmNsZURhdGEucmFkaXVzO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICB3aWR0aCA9IGNpcmNsZURhdGEud2lkdGg7XG4gICAgICAgIGhlaWdodCA9IGNpcmNsZURhdGEuaGVpZ2h0O1xuICAgIH1cblxuICAgIHZhciB0b3RhbFNlZ3MgPSBNYXRoLmZsb29yKDMwICogTWF0aC5zcXJ0KGNpcmNsZURhdGEucmFkaXVzKSkgfHwgTWF0aC5mbG9vcigxNSAqIE1hdGguc3FydChjaXJjbGVEYXRhLndpZHRoICsgY2lyY2xlRGF0YS5oZWlnaHQpKTtcbiAgICB2YXIgc2VnID0gKE1hdGguUEkgKiAyKSAvIHRvdGFsU2VncyA7XG5cbiAgICB2YXIgaSA9IDA7XG5cbiAgICBpZiAoZ3JhcGhpY3NEYXRhLmZpbGwpXG4gICAge1xuICAgICAgICB2YXIgY29sb3IgPSB1dGlscy5oZXgycmdiKGdyYXBoaWNzRGF0YS5maWxsQ29sb3IpO1xuICAgICAgICB2YXIgYWxwaGEgPSBncmFwaGljc0RhdGEuZmlsbEFscGhhO1xuXG4gICAgICAgIHZhciByID0gY29sb3JbMF0gKiBhbHBoYTtcbiAgICAgICAgdmFyIGcgPSBjb2xvclsxXSAqIGFscGhhO1xuICAgICAgICB2YXIgYiA9IGNvbG9yWzJdICogYWxwaGE7XG5cbiAgICAgICAgdmFyIHZlcnRzID0gd2ViR0xEYXRhLnBvaW50cztcbiAgICAgICAgdmFyIGluZGljZXMgPSB3ZWJHTERhdGEuaW5kaWNlcztcblxuICAgICAgICB2YXIgdmVjUG9zID0gdmVydHMubGVuZ3RoLzY7XG5cbiAgICAgICAgaW5kaWNlcy5wdXNoKHZlY1Bvcyk7XG5cbiAgICAgICAgZm9yIChpID0gMDsgaSA8IHRvdGFsU2VncyArIDEgOyBpKyspXG4gICAgICAgIHtcbiAgICAgICAgICAgIHZlcnRzLnB1c2goeCx5LCByLCBnLCBiLCBhbHBoYSk7XG5cbiAgICAgICAgICAgIHZlcnRzLnB1c2goeCArIE1hdGguc2luKHNlZyAqIGkpICogd2lkdGgsXG4gICAgICAgICAgICAgICAgICAgICAgIHkgKyBNYXRoLmNvcyhzZWcgKiBpKSAqIGhlaWdodCxcbiAgICAgICAgICAgICAgICAgICAgICAgciwgZywgYiwgYWxwaGEpO1xuXG4gICAgICAgICAgICBpbmRpY2VzLnB1c2godmVjUG9zKyssIHZlY1BvcysrKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGluZGljZXMucHVzaCh2ZWNQb3MtMSk7XG4gICAgfVxuXG4gICAgaWYgKGdyYXBoaWNzRGF0YS5saW5lV2lkdGgpXG4gICAge1xuICAgICAgICB2YXIgdGVtcFBvaW50cyA9IGdyYXBoaWNzRGF0YS5wb2ludHM7XG5cbiAgICAgICAgZ3JhcGhpY3NEYXRhLnBvaW50cyA9IFtdO1xuXG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCB0b3RhbFNlZ3MgKyAxOyBpKyspXG4gICAgICAgIHtcbiAgICAgICAgICAgIGdyYXBoaWNzRGF0YS5wb2ludHMucHVzaCh4ICsgTWF0aC5zaW4oc2VnICogaSkgKiB3aWR0aCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB5ICsgTWF0aC5jb3Moc2VnICogaSkgKiBoZWlnaHQpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5idWlsZExpbmUoZ3JhcGhpY3NEYXRhLCB3ZWJHTERhdGEpO1xuXG4gICAgICAgIGdyYXBoaWNzRGF0YS5wb2ludHMgPSB0ZW1wUG9pbnRzO1xuICAgIH1cbn07XG5cblxubW9kdWxlLmV4cG9ydHMgPSBidWlsZENpcmNsZTsiLCJ2YXIgYnVpbGRMaW5lID0gcmVxdWlyZSgnLi9idWlsZExpbmUnKSxcbiAgICB1dGlscyA9IHJlcXVpcmUoJy4uLy4uL3V0aWxzJyk7XG4gICAgXG5cblxuLyoqXG4gKiBCdWlsZHMgYSBjb21wbGV4IHBvbHlnb24gdG8gZHJhd1xuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0gZ3JhcGhpY3NEYXRhIHtQSVhJLkdyYXBoaWNzfSBUaGUgZ3JhcGhpY3Mgb2JqZWN0IGNvbnRhaW5pbmcgYWxsIHRoZSBuZWNlc3NhcnkgcHJvcGVydGllc1xuICogQHBhcmFtIHdlYkdMRGF0YSB7b2JqZWN0fSBhbiBvYmplY3QgY29udGFpbmluZyBhbGwgdGhlIHdlYkdMLXNwZWNpZmljIGluZm9ybWF0aW9uIHRvIGNyZWF0ZSB0aGlzIHNoYXBlXG4gKi9cbnZhciBidWlsZENvbXBsZXhQb2x5ID0gZnVuY3Rpb24gKGdyYXBoaWNzRGF0YSwgd2ViR0xEYXRhKVxue1xuICAgIC8vVE9ETyAtIG5vIG5lZWQgdG8gY29weSB0aGlzIGFzIGl0IGdldHMgdHVybmVkIGludG8gYSBGTG9hdDMyQXJyYXkgYW55d2F5cy4uXG4gICAgdmFyIHBvaW50cyA9IGdyYXBoaWNzRGF0YS5wb2ludHMuc2xpY2UoKTtcblxuICAgIGlmIChwb2ludHMubGVuZ3RoIDwgNilcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBnZXQgZmlyc3QgYW5kIGxhc3QgcG9pbnQuLiBmaWd1cmUgb3V0IHRoZSBtaWRkbGUhXG4gICAgdmFyIGluZGljZXMgPSB3ZWJHTERhdGEuaW5kaWNlcztcbiAgICB3ZWJHTERhdGEucG9pbnRzID0gcG9pbnRzO1xuICAgIHdlYkdMRGF0YS5hbHBoYSA9IGdyYXBoaWNzRGF0YS5maWxsQWxwaGE7XG4gICAgd2ViR0xEYXRhLmNvbG9yID0gdXRpbHMuaGV4MnJnYihncmFwaGljc0RhdGEuZmlsbENvbG9yKTtcblxuICAgIC8vIGNhbGNsYXRlIHRoZSBib3VuZHMuLlxuICAgIHZhciBtaW5YID0gSW5maW5pdHk7XG4gICAgdmFyIG1heFggPSAtSW5maW5pdHk7XG5cbiAgICB2YXIgbWluWSA9IEluZmluaXR5O1xuICAgIHZhciBtYXhZID0gLUluZmluaXR5O1xuXG4gICAgdmFyIHgseTtcblxuICAgIC8vIGdldCBzaXplLi5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHBvaW50cy5sZW5ndGg7IGkrPTIpXG4gICAge1xuICAgICAgICB4ID0gcG9pbnRzW2ldO1xuICAgICAgICB5ID0gcG9pbnRzW2krMV07XG5cbiAgICAgICAgbWluWCA9IHggPCBtaW5YID8geCA6IG1pblg7XG4gICAgICAgIG1heFggPSB4ID4gbWF4WCA/IHggOiBtYXhYO1xuXG4gICAgICAgIG1pblkgPSB5IDwgbWluWSA/IHkgOiBtaW5ZO1xuICAgICAgICBtYXhZID0geSA+IG1heFkgPyB5IDogbWF4WTtcbiAgICB9XG5cbiAgICAvLyBhZGQgYSBxdWFkIHRvIHRoZSBlbmQgY29zIHRoZXJlIGlzIG5vIHBvaW50IG1ha2luZyBhbm90aGVyIGJ1ZmZlciFcbiAgICBwb2ludHMucHVzaChtaW5YLCBtaW5ZLFxuICAgICAgICAgICAgICAgIG1heFgsIG1pblksXG4gICAgICAgICAgICAgICAgbWF4WCwgbWF4WSxcbiAgICAgICAgICAgICAgICBtaW5YLCBtYXhZKTtcblxuICAgIC8vIHB1c2ggYSBxdWFkIG9udG8gdGhlIGVuZC4uXG5cbiAgICAvL1RPRE8gLSB0aGlzIGFpbnQgbmVlZGVkIVxuICAgIHZhciBsZW5ndGggPSBwb2ludHMubGVuZ3RoIC8gMjtcbiAgICBmb3IgKGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspXG4gICAge1xuICAgICAgICBpbmRpY2VzLnB1c2goIGkgKTtcbiAgICB9XG5cbn07XG5cblxuXG5tb2R1bGUuZXhwb3J0cyA9IGJ1aWxkQ29tcGxleFBvbHk7IiwidmFyIG1hdGggPSByZXF1aXJlKCcuLi8uLi9tYXRoJyksXG4gICAgdXRpbHMgPSByZXF1aXJlKCcuLi8uLi91dGlscycpO1xuXG4vKipcbiAqIEJ1aWxkcyBhIGxpbmUgdG8gZHJhd1xuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0gZ3JhcGhpY3NEYXRhIHtQSVhJLkdyYXBoaWNzfSBUaGUgZ3JhcGhpY3Mgb2JqZWN0IGNvbnRhaW5pbmcgYWxsIHRoZSBuZWNlc3NhcnkgcHJvcGVydGllc1xuICogQHBhcmFtIHdlYkdMRGF0YSB7b2JqZWN0fSBhbiBvYmplY3QgY29udGFpbmluZyBhbGwgdGhlIHdlYkdMLXNwZWNpZmljIGluZm9ybWF0aW9uIHRvIGNyZWF0ZSB0aGlzIHNoYXBlXG4gKi9cbnZhciBidWlsZExpbmUgPSBmdW5jdGlvbiAoZ3JhcGhpY3NEYXRhLCB3ZWJHTERhdGEpXG57XG4gICAgLy8gVE9ETyBPUFRJTUlTRSFcbiAgICB2YXIgaSA9IDA7XG4gICAgdmFyIHBvaW50cyA9IGdyYXBoaWNzRGF0YS5wb2ludHM7XG5cbiAgICBpZiAocG9pbnRzLmxlbmd0aCA9PT0gMClcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgLy8gaWYgdGhlIGxpbmUgd2lkdGggaXMgYW4gb2RkIG51bWJlciBhZGQgMC41IHRvIGFsaWduIHRvIGEgd2hvbGUgcGl4ZWxcbiAgICAvLyBjb21tZW50aW5nIHRoaXMgb3V0IGZpeGVzICM3MTEgYW5kICMxNjIwXG4gICAgLy8gaWYgKGdyYXBoaWNzRGF0YS5saW5lV2lkdGglMilcbiAgICAvLyB7XG4gICAgLy8gICAgIGZvciAoaSA9IDA7IGkgPCBwb2ludHMubGVuZ3RoOyBpKyspXG4gICAgLy8gICAgIHtcbiAgICAvLyAgICAgICAgIHBvaW50c1tpXSArPSAwLjU7XG4gICAgLy8gICAgIH1cbiAgICAvLyB9XG5cbiAgICAvLyBnZXQgZmlyc3QgYW5kIGxhc3QgcG9pbnQuLiBmaWd1cmUgb3V0IHRoZSBtaWRkbGUhXG4gICAgdmFyIGZpcnN0UG9pbnQgPSBuZXcgbWF0aC5Qb2ludChwb2ludHNbMF0sIHBvaW50c1sxXSk7XG4gICAgdmFyIGxhc3RQb2ludCA9IG5ldyBtYXRoLlBvaW50KHBvaW50c1twb2ludHMubGVuZ3RoIC0gMl0sIHBvaW50c1twb2ludHMubGVuZ3RoIC0gMV0pO1xuXG4gICAgLy8gaWYgdGhlIGZpcnN0IHBvaW50IGlzIHRoZSBsYXN0IHBvaW50IC0gZ29ubmEgaGF2ZSBpc3N1ZXMgOilcbiAgICBpZiAoZmlyc3RQb2ludC54ID09PSBsYXN0UG9pbnQueCAmJiBmaXJzdFBvaW50LnkgPT09IGxhc3RQb2ludC55KVxuICAgIHtcbiAgICAgICAgLy8gbmVlZCB0byBjbG9uZSBhcyB3ZSBhcmUgZ29pbmcgdG8gc2xpZ2h0bHkgbW9kaWZ5IHRoZSBzaGFwZS4uXG4gICAgICAgIHBvaW50cyA9IHBvaW50cy5zbGljZSgpO1xuXG4gICAgICAgIHBvaW50cy5wb3AoKTtcbiAgICAgICAgcG9pbnRzLnBvcCgpO1xuXG4gICAgICAgIGxhc3RQb2ludCA9IG5ldyBtYXRoLlBvaW50KHBvaW50c1twb2ludHMubGVuZ3RoIC0gMl0sIHBvaW50c1twb2ludHMubGVuZ3RoIC0gMV0pO1xuXG4gICAgICAgIHZhciBtaWRQb2ludFggPSBsYXN0UG9pbnQueCArIChmaXJzdFBvaW50LnggLSBsYXN0UG9pbnQueCkgKjAuNTtcbiAgICAgICAgdmFyIG1pZFBvaW50WSA9IGxhc3RQb2ludC55ICsgKGZpcnN0UG9pbnQueSAtIGxhc3RQb2ludC55KSAqMC41O1xuXG4gICAgICAgIHBvaW50cy51bnNoaWZ0KG1pZFBvaW50WCwgbWlkUG9pbnRZKTtcbiAgICAgICAgcG9pbnRzLnB1c2gobWlkUG9pbnRYLCBtaWRQb2ludFkpO1xuICAgIH1cblxuICAgIHZhciB2ZXJ0cyA9IHdlYkdMRGF0YS5wb2ludHM7XG4gICAgdmFyIGluZGljZXMgPSB3ZWJHTERhdGEuaW5kaWNlcztcbiAgICB2YXIgbGVuZ3RoID0gcG9pbnRzLmxlbmd0aCAvIDI7XG4gICAgdmFyIGluZGV4Q291bnQgPSBwb2ludHMubGVuZ3RoO1xuICAgIHZhciBpbmRleFN0YXJ0ID0gdmVydHMubGVuZ3RoLzY7XG5cbiAgICAvLyBEUkFXIHRoZSBMaW5lXG4gICAgdmFyIHdpZHRoID0gZ3JhcGhpY3NEYXRhLmxpbmVXaWR0aCAvIDI7XG5cbiAgICAvLyBzb3J0IGNvbG9yXG4gICAgdmFyIGNvbG9yID0gdXRpbHMuaGV4MnJnYihncmFwaGljc0RhdGEubGluZUNvbG9yKTtcbiAgICB2YXIgYWxwaGEgPSBncmFwaGljc0RhdGEubGluZUFscGhhO1xuICAgIHZhciByID0gY29sb3JbMF0gKiBhbHBoYTtcbiAgICB2YXIgZyA9IGNvbG9yWzFdICogYWxwaGE7XG4gICAgdmFyIGIgPSBjb2xvclsyXSAqIGFscGhhO1xuXG4gICAgdmFyIHB4LCBweSwgcDF4LCBwMXksIHAyeCwgcDJ5LCBwM3gsIHAzeTtcbiAgICB2YXIgcGVycHgsIHBlcnB5LCBwZXJwMngsIHBlcnAyeSwgcGVycDN4LCBwZXJwM3k7XG4gICAgdmFyIGExLCBiMSwgYzEsIGEyLCBiMiwgYzI7XG4gICAgdmFyIGRlbm9tLCBwZGlzdCwgZGlzdDtcblxuICAgIHAxeCA9IHBvaW50c1swXTtcbiAgICBwMXkgPSBwb2ludHNbMV07XG5cbiAgICBwMnggPSBwb2ludHNbMl07XG4gICAgcDJ5ID0gcG9pbnRzWzNdO1xuXG4gICAgcGVycHggPSAtKHAxeSAtIHAyeSk7XG4gICAgcGVycHkgPSAgcDF4IC0gcDJ4O1xuXG4gICAgZGlzdCA9IE1hdGguc3FydChwZXJweCpwZXJweCArIHBlcnB5KnBlcnB5KTtcblxuICAgIHBlcnB4IC89IGRpc3Q7XG4gICAgcGVycHkgLz0gZGlzdDtcbiAgICBwZXJweCAqPSB3aWR0aDtcbiAgICBwZXJweSAqPSB3aWR0aDtcblxuICAgIC8vIHN0YXJ0XG4gICAgdmVydHMucHVzaChwMXggLSBwZXJweCAsIHAxeSAtIHBlcnB5LFxuICAgICAgICAgICAgICAgIHIsIGcsIGIsIGFscGhhKTtcblxuICAgIHZlcnRzLnB1c2gocDF4ICsgcGVycHggLCBwMXkgKyBwZXJweSxcbiAgICAgICAgICAgICAgICByLCBnLCBiLCBhbHBoYSk7XG5cbiAgICBmb3IgKGkgPSAxOyBpIDwgbGVuZ3RoLTE7IGkrKylcbiAgICB7XG4gICAgICAgIHAxeCA9IHBvaW50c1soaS0xKSoyXTtcbiAgICAgICAgcDF5ID0gcG9pbnRzWyhpLTEpKjIgKyAxXTtcblxuICAgICAgICBwMnggPSBwb2ludHNbKGkpKjJdO1xuICAgICAgICBwMnkgPSBwb2ludHNbKGkpKjIgKyAxXTtcblxuICAgICAgICBwM3ggPSBwb2ludHNbKGkrMSkqMl07XG4gICAgICAgIHAzeSA9IHBvaW50c1soaSsxKSoyICsgMV07XG5cbiAgICAgICAgcGVycHggPSAtKHAxeSAtIHAyeSk7XG4gICAgICAgIHBlcnB5ID0gcDF4IC0gcDJ4O1xuXG4gICAgICAgIGRpc3QgPSBNYXRoLnNxcnQocGVycHgqcGVycHggKyBwZXJweSpwZXJweSk7XG4gICAgICAgIHBlcnB4IC89IGRpc3Q7XG4gICAgICAgIHBlcnB5IC89IGRpc3Q7XG4gICAgICAgIHBlcnB4ICo9IHdpZHRoO1xuICAgICAgICBwZXJweSAqPSB3aWR0aDtcblxuICAgICAgICBwZXJwMnggPSAtKHAyeSAtIHAzeSk7XG4gICAgICAgIHBlcnAyeSA9IHAyeCAtIHAzeDtcblxuICAgICAgICBkaXN0ID0gTWF0aC5zcXJ0KHBlcnAyeCpwZXJwMnggKyBwZXJwMnkqcGVycDJ5KTtcbiAgICAgICAgcGVycDJ4IC89IGRpc3Q7XG4gICAgICAgIHBlcnAyeSAvPSBkaXN0O1xuICAgICAgICBwZXJwMnggKj0gd2lkdGg7XG4gICAgICAgIHBlcnAyeSAqPSB3aWR0aDtcblxuICAgICAgICBhMSA9ICgtcGVycHkgKyBwMXkpIC0gKC1wZXJweSArIHAyeSk7XG4gICAgICAgIGIxID0gKC1wZXJweCArIHAyeCkgLSAoLXBlcnB4ICsgcDF4KTtcbiAgICAgICAgYzEgPSAoLXBlcnB4ICsgcDF4KSAqICgtcGVycHkgKyBwMnkpIC0gKC1wZXJweCArIHAyeCkgKiAoLXBlcnB5ICsgcDF5KTtcbiAgICAgICAgYTIgPSAoLXBlcnAyeSArIHAzeSkgLSAoLXBlcnAyeSArIHAyeSk7XG4gICAgICAgIGIyID0gKC1wZXJwMnggKyBwMngpIC0gKC1wZXJwMnggKyBwM3gpO1xuICAgICAgICBjMiA9ICgtcGVycDJ4ICsgcDN4KSAqICgtcGVycDJ5ICsgcDJ5KSAtICgtcGVycDJ4ICsgcDJ4KSAqICgtcGVycDJ5ICsgcDN5KTtcblxuICAgICAgICBkZW5vbSA9IGExKmIyIC0gYTIqYjE7XG5cbiAgICAgICAgaWYgKE1hdGguYWJzKGRlbm9tKSA8IDAuMSApXG4gICAgICAgIHtcblxuICAgICAgICAgICAgZGVub20rPTEwLjE7XG4gICAgICAgICAgICB2ZXJ0cy5wdXNoKHAyeCAtIHBlcnB4ICwgcDJ5IC0gcGVycHksXG4gICAgICAgICAgICAgICAgciwgZywgYiwgYWxwaGEpO1xuXG4gICAgICAgICAgICB2ZXJ0cy5wdXNoKHAyeCArIHBlcnB4ICwgcDJ5ICsgcGVycHksXG4gICAgICAgICAgICAgICAgciwgZywgYiwgYWxwaGEpO1xuXG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHB4ID0gKGIxKmMyIC0gYjIqYzEpL2Rlbm9tO1xuICAgICAgICBweSA9IChhMipjMSAtIGExKmMyKS9kZW5vbTtcblxuXG4gICAgICAgIHBkaXN0ID0gKHB4IC1wMngpICogKHB4IC1wMngpICsgKHB5IC1wMnkpICogKHB5IC1wMnkpO1xuXG5cbiAgICAgICAgaWYgKHBkaXN0ID4gMTQwICogMTQwKVxuICAgICAgICB7XG4gICAgICAgICAgICBwZXJwM3ggPSBwZXJweCAtIHBlcnAyeDtcbiAgICAgICAgICAgIHBlcnAzeSA9IHBlcnB5IC0gcGVycDJ5O1xuXG4gICAgICAgICAgICBkaXN0ID0gTWF0aC5zcXJ0KHBlcnAzeCpwZXJwM3ggKyBwZXJwM3kqcGVycDN5KTtcbiAgICAgICAgICAgIHBlcnAzeCAvPSBkaXN0O1xuICAgICAgICAgICAgcGVycDN5IC89IGRpc3Q7XG4gICAgICAgICAgICBwZXJwM3ggKj0gd2lkdGg7XG4gICAgICAgICAgICBwZXJwM3kgKj0gd2lkdGg7XG5cbiAgICAgICAgICAgIHZlcnRzLnB1c2gocDJ4IC0gcGVycDN4LCBwMnkgLXBlcnAzeSk7XG4gICAgICAgICAgICB2ZXJ0cy5wdXNoKHIsIGcsIGIsIGFscGhhKTtcblxuICAgICAgICAgICAgdmVydHMucHVzaChwMnggKyBwZXJwM3gsIHAyeSArcGVycDN5KTtcbiAgICAgICAgICAgIHZlcnRzLnB1c2gociwgZywgYiwgYWxwaGEpO1xuXG4gICAgICAgICAgICB2ZXJ0cy5wdXNoKHAyeCAtIHBlcnAzeCwgcDJ5IC1wZXJwM3kpO1xuICAgICAgICAgICAgdmVydHMucHVzaChyLCBnLCBiLCBhbHBoYSk7XG5cbiAgICAgICAgICAgIGluZGV4Q291bnQrKztcbiAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgIHtcblxuICAgICAgICAgICAgdmVydHMucHVzaChweCAsIHB5KTtcbiAgICAgICAgICAgIHZlcnRzLnB1c2gociwgZywgYiwgYWxwaGEpO1xuXG4gICAgICAgICAgICB2ZXJ0cy5wdXNoKHAyeCAtIChweC1wMngpLCBwMnkgLSAocHkgLSBwMnkpKTtcbiAgICAgICAgICAgIHZlcnRzLnB1c2gociwgZywgYiwgYWxwaGEpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcDF4ID0gcG9pbnRzWyhsZW5ndGgtMikqMl07XG4gICAgcDF5ID0gcG9pbnRzWyhsZW5ndGgtMikqMiArIDFdO1xuXG4gICAgcDJ4ID0gcG9pbnRzWyhsZW5ndGgtMSkqMl07XG4gICAgcDJ5ID0gcG9pbnRzWyhsZW5ndGgtMSkqMiArIDFdO1xuXG4gICAgcGVycHggPSAtKHAxeSAtIHAyeSk7XG4gICAgcGVycHkgPSBwMXggLSBwMng7XG5cbiAgICBkaXN0ID0gTWF0aC5zcXJ0KHBlcnB4KnBlcnB4ICsgcGVycHkqcGVycHkpO1xuICAgIHBlcnB4IC89IGRpc3Q7XG4gICAgcGVycHkgLz0gZGlzdDtcbiAgICBwZXJweCAqPSB3aWR0aDtcbiAgICBwZXJweSAqPSB3aWR0aDtcblxuICAgIHZlcnRzLnB1c2gocDJ4IC0gcGVycHggLCBwMnkgLSBwZXJweSk7XG4gICAgdmVydHMucHVzaChyLCBnLCBiLCBhbHBoYSk7XG5cbiAgICB2ZXJ0cy5wdXNoKHAyeCArIHBlcnB4ICwgcDJ5ICsgcGVycHkpO1xuICAgIHZlcnRzLnB1c2gociwgZywgYiwgYWxwaGEpO1xuXG4gICAgaW5kaWNlcy5wdXNoKGluZGV4U3RhcnQpO1xuXG4gICAgZm9yIChpID0gMDsgaSA8IGluZGV4Q291bnQ7IGkrKylcbiAgICB7XG4gICAgICAgIGluZGljZXMucHVzaChpbmRleFN0YXJ0KyspO1xuICAgIH1cblxuICAgIGluZGljZXMucHVzaChpbmRleFN0YXJ0LTEpO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBidWlsZExpbmU7IiwidmFyIHV0aWxzID0gcmVxdWlyZSgnLi4vLi4vdXRpbHMnKTtcblxuLyoqXG4gKiBCdWlsZHMgYSBwb2x5Z29uIHRvIGRyYXdcbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIGdyYXBoaWNzRGF0YSB7UElYSS5XZWJHTEdyYXBoaWNzRGF0YX0gVGhlIGdyYXBoaWNzIG9iamVjdCBjb250YWluaW5nIGFsbCB0aGUgbmVjZXNzYXJ5IHByb3BlcnRpZXNcbiAqIEBwYXJhbSB3ZWJHTERhdGEge29iamVjdH0gYW4gb2JqZWN0IGNvbnRhaW5pbmcgYWxsIHRoZSB3ZWJHTC1zcGVjaWZpYyBpbmZvcm1hdGlvbiB0byBjcmVhdGUgdGhpcyBzaGFwZVxuICovXG52YXIgYnVpbGRQb2x5ID0gZnVuY3Rpb24gKGdyYXBoaWNzRGF0YSwgd2ViR0xEYXRhKVxue1xuICAgIHZhciBwb2ludHMgPSBncmFwaGljc0RhdGEucG9pbnRzO1xuXG4gICAgaWYgKHBvaW50cy5sZW5ndGggPCA2KVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIGdldCBmaXJzdCBhbmQgbGFzdCBwb2ludC4uIGZpZ3VyZSBvdXQgdGhlIG1pZGRsZSFcbiAgICB2YXIgdmVydHMgPSB3ZWJHTERhdGEucG9pbnRzO1xuICAgIHZhciBpbmRpY2VzID0gd2ViR0xEYXRhLmluZGljZXM7XG5cbiAgICB2YXIgbGVuZ3RoID0gcG9pbnRzLmxlbmd0aCAvIDI7XG5cbiAgICAvLyBzb3J0IGNvbG9yXG4gICAgdmFyIGNvbG9yID0gdXRpbHMuaGV4MnJnYihncmFwaGljc0RhdGEuZmlsbENvbG9yKTtcbiAgICB2YXIgYWxwaGEgPSBncmFwaGljc0RhdGEuZmlsbEFscGhhO1xuICAgIHZhciByID0gY29sb3JbMF0gKiBhbHBoYTtcbiAgICB2YXIgZyA9IGNvbG9yWzFdICogYWxwaGE7XG4gICAgdmFyIGIgPSBjb2xvclsyXSAqIGFscGhhO1xuXG4gICAgdmFyIHRyaWFuZ2xlcyA9IGVhcmN1dChwb2ludHMsIG51bGwsIDIpO1xuXG4gICAgaWYgKCF0cmlhbmdsZXMpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHZhciB2ZXJ0UG9zID0gdmVydHMubGVuZ3RoIC8gNjtcblxuICAgIHZhciBpID0gMDtcblxuICAgIGZvciAoaSA9IDA7IGkgPCB0cmlhbmdsZXMubGVuZ3RoOyBpKz0zKVxuICAgIHtcbiAgICAgICAgaW5kaWNlcy5wdXNoKHRyaWFuZ2xlc1tpXSArIHZlcnRQb3MpO1xuICAgICAgICBpbmRpY2VzLnB1c2godHJpYW5nbGVzW2ldICsgdmVydFBvcyk7XG4gICAgICAgIGluZGljZXMucHVzaCh0cmlhbmdsZXNbaSsxXSArIHZlcnRQb3MpO1xuICAgICAgICBpbmRpY2VzLnB1c2godHJpYW5nbGVzW2krMl0gK3ZlcnRQb3MpO1xuICAgICAgICBpbmRpY2VzLnB1c2godHJpYW5nbGVzW2krMl0gKyB2ZXJ0UG9zKTtcbiAgICB9XG5cbiAgICBmb3IgKGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspXG4gICAge1xuICAgICAgICB2ZXJ0cy5wdXNoKHBvaW50c1tpICogMl0sIHBvaW50c1tpICogMiArIDFdLFxuICAgICAgICAgICAgICAgICAgIHIsIGcsIGIsIGFscGhhKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdHJ1ZTtcbn07XG5cblxubW9kdWxlLmV4cG9ydHMgPSBidWlsZFBvbHk7XG4iLCJ2YXIgYnVpbGRMaW5lID0gcmVxdWlyZSgnLi9idWlsZExpbmUnKSxcbiAgICB1dGlscyA9IHJlcXVpcmUoJy4uLy4uL3V0aWxzJyk7XG5cbi8qKlxuICogQnVpbGRzIGEgcmVjdGFuZ2xlIHRvIGRyYXdcbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIGdyYXBoaWNzRGF0YSB7UElYSS5HcmFwaGljc30gVGhlIGdyYXBoaWNzIG9iamVjdCBjb250YWluaW5nIGFsbCB0aGUgbmVjZXNzYXJ5IHByb3BlcnRpZXNcbiAqIEBwYXJhbSB3ZWJHTERhdGEge29iamVjdH0gYW4gb2JqZWN0IGNvbnRhaW5pbmcgYWxsIHRoZSB3ZWJHTC1zcGVjaWZpYyBpbmZvcm1hdGlvbiB0byBjcmVhdGUgdGhpcyBzaGFwZVxuICovXG52YXIgYnVpbGRSZWN0YW5nbGUgPSBmdW5jdGlvbiAoZ3JhcGhpY3NEYXRhLCB3ZWJHTERhdGEpXG57XG4gICAgLy8gLS0tIC8vXG4gICAgLy8gbmVlZCB0byBjb252ZXJ0IHBvaW50cyB0byBhIG5pY2UgcmVndWxhciBkYXRhXG4gICAgLy9cbiAgICB2YXIgcmVjdERhdGEgPSBncmFwaGljc0RhdGEuc2hhcGU7XG4gICAgdmFyIHggPSByZWN0RGF0YS54O1xuICAgIHZhciB5ID0gcmVjdERhdGEueTtcbiAgICB2YXIgd2lkdGggPSByZWN0RGF0YS53aWR0aDtcbiAgICB2YXIgaGVpZ2h0ID0gcmVjdERhdGEuaGVpZ2h0O1xuXG4gICAgaWYgKGdyYXBoaWNzRGF0YS5maWxsKVxuICAgIHtcbiAgICAgICAgdmFyIGNvbG9yID0gdXRpbHMuaGV4MnJnYihncmFwaGljc0RhdGEuZmlsbENvbG9yKTtcbiAgICAgICAgdmFyIGFscGhhID0gZ3JhcGhpY3NEYXRhLmZpbGxBbHBoYTtcblxuICAgICAgICB2YXIgciA9IGNvbG9yWzBdICogYWxwaGE7XG4gICAgICAgIHZhciBnID0gY29sb3JbMV0gKiBhbHBoYTtcbiAgICAgICAgdmFyIGIgPSBjb2xvclsyXSAqIGFscGhhO1xuXG4gICAgICAgIHZhciB2ZXJ0cyA9IHdlYkdMRGF0YS5wb2ludHM7XG4gICAgICAgIHZhciBpbmRpY2VzID0gd2ViR0xEYXRhLmluZGljZXM7XG5cbiAgICAgICAgdmFyIHZlcnRQb3MgPSB2ZXJ0cy5sZW5ndGgvNjtcblxuICAgICAgICAvLyBzdGFydFxuICAgICAgICB2ZXJ0cy5wdXNoKHgsIHkpO1xuICAgICAgICB2ZXJ0cy5wdXNoKHIsIGcsIGIsIGFscGhhKTtcblxuICAgICAgICB2ZXJ0cy5wdXNoKHggKyB3aWR0aCwgeSk7XG4gICAgICAgIHZlcnRzLnB1c2gociwgZywgYiwgYWxwaGEpO1xuXG4gICAgICAgIHZlcnRzLnB1c2goeCAsIHkgKyBoZWlnaHQpO1xuICAgICAgICB2ZXJ0cy5wdXNoKHIsIGcsIGIsIGFscGhhKTtcblxuICAgICAgICB2ZXJ0cy5wdXNoKHggKyB3aWR0aCwgeSArIGhlaWdodCk7XG4gICAgICAgIHZlcnRzLnB1c2gociwgZywgYiwgYWxwaGEpO1xuXG4gICAgICAgIC8vIGluc2VydCAyIGRlYWQgdHJpYW5nbGVzLi5cbiAgICAgICAgaW5kaWNlcy5wdXNoKHZlcnRQb3MsIHZlcnRQb3MsIHZlcnRQb3MrMSwgdmVydFBvcysyLCB2ZXJ0UG9zKzMsIHZlcnRQb3MrMyk7XG4gICAgfVxuXG4gICAgaWYgKGdyYXBoaWNzRGF0YS5saW5lV2lkdGgpXG4gICAge1xuICAgICAgICB2YXIgdGVtcFBvaW50cyA9IGdyYXBoaWNzRGF0YS5wb2ludHM7XG5cbiAgICAgICAgZ3JhcGhpY3NEYXRhLnBvaW50cyA9IFt4LCB5LFxuICAgICAgICAgICAgICAgICAgeCArIHdpZHRoLCB5LFxuICAgICAgICAgICAgICAgICAgeCArIHdpZHRoLCB5ICsgaGVpZ2h0LFxuICAgICAgICAgICAgICAgICAgeCwgeSArIGhlaWdodCxcbiAgICAgICAgICAgICAgICAgIHgsIHldO1xuXG5cbiAgICAgICAgYnVpbGRMaW5lKGdyYXBoaWNzRGF0YSwgd2ViR0xEYXRhKTtcblxuICAgICAgICBncmFwaGljc0RhdGEucG9pbnRzID0gdGVtcFBvaW50cztcbiAgICB9XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGJ1aWxkUmVjdGFuZ2xlOyIsInZhciBidWlsZExpbmUgPSByZXF1aXJlKCcuL2J1aWxkTGluZScpLFxuICAgIHV0aWxzID0gcmVxdWlyZSgnLi4vLi4vdXRpbHMnKTtcbiAgICBcbi8qKlxuICogQnVpbGRzIGEgcm91bmRlZCByZWN0YW5nbGUgdG8gZHJhd1xuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0gZ3JhcGhpY3NEYXRhIHtQSVhJLkdyYXBoaWNzfSBUaGUgZ3JhcGhpY3Mgb2JqZWN0IGNvbnRhaW5pbmcgYWxsIHRoZSBuZWNlc3NhcnkgcHJvcGVydGllc1xuICogQHBhcmFtIHdlYkdMRGF0YSB7b2JqZWN0fSBhbiBvYmplY3QgY29udGFpbmluZyBhbGwgdGhlIHdlYkdMLXNwZWNpZmljIGluZm9ybWF0aW9uIHRvIGNyZWF0ZSB0aGlzIHNoYXBlXG4gKi9cbmJ1aWxkUm91bmRlZFJlY3RhbmdsZSA9IGZ1bmN0aW9uIChncmFwaGljc0RhdGEsIHdlYkdMRGF0YSlcbntcbiAgICB2YXIgcnJlY3REYXRhID0gZ3JhcGhpY3NEYXRhLnNoYXBlO1xuICAgIHZhciB4ID0gcnJlY3REYXRhLng7XG4gICAgdmFyIHkgPSBycmVjdERhdGEueTtcbiAgICB2YXIgd2lkdGggPSBycmVjdERhdGEud2lkdGg7XG4gICAgdmFyIGhlaWdodCA9IHJyZWN0RGF0YS5oZWlnaHQ7XG5cbiAgICB2YXIgcmFkaXVzID0gcnJlY3REYXRhLnJhZGl1cztcblxuICAgIHZhciByZWNQb2ludHMgPSBbXTtcbiAgICByZWNQb2ludHMucHVzaCh4LCB5ICsgcmFkaXVzKTtcbiAgICB0aGlzLnF1YWRyYXRpY0JlemllckN1cnZlKHgsIHkgKyBoZWlnaHQgLSByYWRpdXMsIHgsIHkgKyBoZWlnaHQsIHggKyByYWRpdXMsIHkgKyBoZWlnaHQsIHJlY1BvaW50cyk7XG4gICAgdGhpcy5xdWFkcmF0aWNCZXppZXJDdXJ2ZSh4ICsgd2lkdGggLSByYWRpdXMsIHkgKyBoZWlnaHQsIHggKyB3aWR0aCwgeSArIGhlaWdodCwgeCArIHdpZHRoLCB5ICsgaGVpZ2h0IC0gcmFkaXVzLCByZWNQb2ludHMpO1xuICAgIHRoaXMucXVhZHJhdGljQmV6aWVyQ3VydmUoeCArIHdpZHRoLCB5ICsgcmFkaXVzLCB4ICsgd2lkdGgsIHksIHggKyB3aWR0aCAtIHJhZGl1cywgeSwgcmVjUG9pbnRzKTtcbiAgICB0aGlzLnF1YWRyYXRpY0JlemllckN1cnZlKHggKyByYWRpdXMsIHksIHgsIHksIHgsIHkgKyByYWRpdXMgKyAwLjAwMDAwMDAwMDEsIHJlY1BvaW50cyk7XG5cbiAgICAvLyB0aGlzIHRpbnkgbnVtYmVyIGRlYWxzIHdpdGggdGhlIGlzc3VlIHRoYXQgb2NjdXJzIHdoZW4gcG9pbnRzIG92ZXJsYXAgYW5kIGVhcmN1dCBmYWlscyB0byB0cmlhbmd1bGF0ZSB0aGUgaXRlbS5cbiAgICAvLyBUT0RPIC0gZml4IHRoaXMgcHJvcGVybHksIHRoaXMgaXMgbm90IHZlcnkgZWxlZ2FudC4uIGJ1dCBpdCB3b3JrcyBmb3Igbm93LlxuXG4gICAgaWYgKGdyYXBoaWNzRGF0YS5maWxsKVxuICAgIHtcbiAgICAgICAgdmFyIGNvbG9yID0gdXRpbHMuaGV4MnJnYihncmFwaGljc0RhdGEuZmlsbENvbG9yKTtcbiAgICAgICAgdmFyIGFscGhhID0gZ3JhcGhpY3NEYXRhLmZpbGxBbHBoYTtcblxuICAgICAgICB2YXIgciA9IGNvbG9yWzBdICogYWxwaGE7XG4gICAgICAgIHZhciBnID0gY29sb3JbMV0gKiBhbHBoYTtcbiAgICAgICAgdmFyIGIgPSBjb2xvclsyXSAqIGFscGhhO1xuXG4gICAgICAgIHZhciB2ZXJ0cyA9IHdlYkdMRGF0YS5wb2ludHM7XG4gICAgICAgIHZhciBpbmRpY2VzID0gd2ViR0xEYXRhLmluZGljZXM7XG5cbiAgICAgICAgdmFyIHZlY1BvcyA9IHZlcnRzLmxlbmd0aC82O1xuXG4gICAgICAgIHZhciB0cmlhbmdsZXMgPSBlYXJjdXQocmVjUG9pbnRzLCBudWxsLCAyKTtcblxuICAgICAgICB2YXIgaSA9IDA7XG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCB0cmlhbmdsZXMubGVuZ3RoOyBpKz0zKVxuICAgICAgICB7XG4gICAgICAgICAgICBpbmRpY2VzLnB1c2godHJpYW5nbGVzW2ldICsgdmVjUG9zKTtcbiAgICAgICAgICAgIGluZGljZXMucHVzaCh0cmlhbmdsZXNbaV0gKyB2ZWNQb3MpO1xuICAgICAgICAgICAgaW5kaWNlcy5wdXNoKHRyaWFuZ2xlc1tpKzFdICsgdmVjUG9zKTtcbiAgICAgICAgICAgIGluZGljZXMucHVzaCh0cmlhbmdsZXNbaSsyXSArIHZlY1Bvcyk7XG4gICAgICAgICAgICBpbmRpY2VzLnB1c2godHJpYW5nbGVzW2krMl0gKyB2ZWNQb3MpO1xuICAgICAgICB9XG5cbiAgICAgICAgZm9yIChpID0gMDsgaSA8IHJlY1BvaW50cy5sZW5ndGg7IGkrKylcbiAgICAgICAge1xuICAgICAgICAgICAgdmVydHMucHVzaChyZWNQb2ludHNbaV0sIHJlY1BvaW50c1srK2ldLCByLCBnLCBiLCBhbHBoYSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoZ3JhcGhpY3NEYXRhLmxpbmVXaWR0aClcbiAgICB7XG4gICAgICAgIHZhciB0ZW1wUG9pbnRzID0gZ3JhcGhpY3NEYXRhLnBvaW50cztcblxuICAgICAgICBncmFwaGljc0RhdGEucG9pbnRzID0gcmVjUG9pbnRzO1xuXG4gICAgICAgIHRoaXMuYnVpbGRMaW5lKGdyYXBoaWNzRGF0YSwgd2ViR0xEYXRhKTtcblxuICAgICAgICBncmFwaGljc0RhdGEucG9pbnRzID0gdGVtcFBvaW50cztcbiAgICB9XG59O1xuXG4vKipcbiAqIENhbGN1bGF0ZSB0aGUgcG9pbnRzIGZvciBhIHF1YWRyYXRpYyBiZXppZXIgY3VydmUuIChoZWxwZXIgZnVuY3Rpb24uLilcbiAqIEJhc2VkIG9uOiBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy83ODUwOTcvaG93LWRvLWktaW1wbGVtZW50LWEtYmV6aWVyLWN1cnZlLWluLWNcbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIGZyb21YIHtudW1iZXJ9IE9yaWdpbiBwb2ludCB4XG4gKiBAcGFyYW0gZnJvbVkge251bWJlcn0gT3JpZ2luIHBvaW50IHhcbiAqIEBwYXJhbSBjcFgge251bWJlcn0gQ29udHJvbCBwb2ludCB4XG4gKiBAcGFyYW0gY3BZIHtudW1iZXJ9IENvbnRyb2wgcG9pbnQgeVxuICogQHBhcmFtIHRvWCB7bnVtYmVyfSBEZXN0aW5hdGlvbiBwb2ludCB4XG4gKiBAcGFyYW0gdG9ZIHtudW1iZXJ9IERlc3RpbmF0aW9uIHBvaW50IHlcbiAqIEBwYXJhbSBbb3V0XSB7bnVtYmVyW119IFRoZSBvdXRwdXQgYXJyYXkgdG8gYWRkIHBvaW50cyBpbnRvLiBJZiBub3QgcGFzc2VkLCBhIG5ldyBhcnJheSBpcyBjcmVhdGVkLlxuICogQHJldHVybiB7bnVtYmVyW119IGFuIGFycmF5IG9mIHBvaW50c1xuICovXG5xdWFkcmF0aWNCZXppZXJDdXJ2ZSA9IGZ1bmN0aW9uIChmcm9tWCwgZnJvbVksIGNwWCwgY3BZLCB0b1gsIHRvWSwgb3V0KVxue1xuICAgIHZhciB4YSxcbiAgICAgICAgeWEsXG4gICAgICAgIHhiLFxuICAgICAgICB5YixcbiAgICAgICAgeCxcbiAgICAgICAgeSxcbiAgICAgICAgbiA9IDIwLFxuICAgICAgICBwb2ludHMgPSBvdXQgfHwgW107XG5cbiAgICBmdW5jdGlvbiBnZXRQdChuMSAsIG4yLCBwZXJjKSB7XG4gICAgICAgIHZhciBkaWZmID0gbjIgLSBuMTtcblxuICAgICAgICByZXR1cm4gbjEgKyAoIGRpZmYgKiBwZXJjICk7XG4gICAgfVxuXG4gICAgdmFyIGogPSAwO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDw9IG47IGkrKyApIHtcbiAgICAgICAgaiA9IGkgLyBuO1xuXG4gICAgICAgIC8vIFRoZSBHcmVlbiBMaW5lXG4gICAgICAgIHhhID0gZ2V0UHQoIGZyb21YICwgY3BYICwgaiApO1xuICAgICAgICB5YSA9IGdldFB0KCBmcm9tWSAsIGNwWSAsIGogKTtcbiAgICAgICAgeGIgPSBnZXRQdCggY3BYICwgdG9YICwgaiApO1xuICAgICAgICB5YiA9IGdldFB0KCBjcFkgLCB0b1kgLCBqICk7XG5cbiAgICAgICAgLy8gVGhlIEJsYWNrIERvdFxuICAgICAgICB4ID0gZ2V0UHQoIHhhICwgeGIgLCBqICk7XG4gICAgICAgIHkgPSBnZXRQdCggeWEgLCB5YiAsIGogKTtcblxuICAgICAgICBwb2ludHMucHVzaCh4LCB5KTtcbiAgICB9XG5cbiAgICByZXR1cm4gcG9pbnRzO1xufTtcblxuXG5tb2R1bGUuZXhwb3J0cyA9IGJ1aWxkUm91bmRlZFJlY3RhbmdsZTsiLCIvKipcbiAqIEBmaWxlICAgICAgICBNYWluIGV4cG9ydCBvZiB0aGUgUElYSSBjb3JlIGxpYnJhcnlcbiAqIEBhdXRob3IgICAgICBNYXQgR3JvdmVzIDxtYXRAZ29vZGJveWRpZ2l0YWwuY29tPlxuICogQGNvcHlyaWdodCAgIDIwMTMtMjAxNSBHb29kQm95RGlnaXRhbFxuICogQGxpY2Vuc2UgICAgIHtAbGluayBodHRwczovL2dpdGh1Yi5jb20vcGl4aWpzL3BpeGkuanMvYmxvYi9tYXN0ZXIvTElDRU5TRXxNSVQgTGljZW5zZX1cbiAqL1xuXG4vKipcbiAqIEBuYW1lc3BhY2UgUElYSVxuICovXG4vLyBleHBvcnQgY29yZSBhbmQgY29uc3QuIFdlIGFzc2lnbiBjb3JlIHRvIGNvbnN0IHNvIHRoYXQgdGhlIG5vbi1yZWZlcmVuY2UgdHlwZXMgaW4gY29uc3QgcmVtYWluIGluLXRhY3RcbnZhciBjb3JlID0gbW9kdWxlLmV4cG9ydHMgPSBPYmplY3QuYXNzaWduKHJlcXVpcmUoJy4vY29uc3QnKSwgcmVxdWlyZSgnLi9tYXRoJyksIHtcbiAgICAvLyB1dGlsc1xuICAgIHV0aWxzOiByZXF1aXJlKCcuL3V0aWxzJyksXG4gICAgdGlja2VyOiByZXF1aXJlKCcuL3RpY2tlcicpLFxuXG4gICAgLy8gZGlzcGxheVxuICAgIERpc3BsYXlPYmplY3Q6ICAgICAgICAgIHJlcXVpcmUoJy4vZGlzcGxheS9EaXNwbGF5T2JqZWN0JyksXG4gICAgQ29udGFpbmVyOiAgICAgICAgICAgICAgcmVxdWlyZSgnLi9kaXNwbGF5L0NvbnRhaW5lcicpLFxuXG4gICAgLy8gc3ByaXRlc1xuICAgIFNwcml0ZTogICAgICAgICAgICAgICAgIHJlcXVpcmUoJy4vc3ByaXRlcy9TcHJpdGUnKSxcbiAgICBQYXJ0aWNsZUNvbnRhaW5lcjogICAgICByZXF1aXJlKCcuL3BhcnRpY2xlcy9QYXJ0aWNsZUNvbnRhaW5lcicpLFxuICAgIFNwcml0ZVJlbmRlcmVyOiAgICAgICAgIHJlcXVpcmUoJy4vc3ByaXRlcy93ZWJnbC9TcHJpdGVSZW5kZXJlcicpLFxuICAgIFBhcnRpY2xlUmVuZGVyZXI6ICAgICAgIHJlcXVpcmUoJy4vcGFydGljbGVzL3dlYmdsL1BhcnRpY2xlUmVuZGVyZXInKSxcblxuICAgIC8vIHRleHRcbiAgICBUZXh0OiAgICAgICAgICAgICAgICAgICByZXF1aXJlKCcuL3RleHQvVGV4dCcpLFxuXG4gICAgLy8gcHJpbWl0aXZlc1xuICAgIEdyYXBoaWNzOiAgICAgICAgICAgICAgIHJlcXVpcmUoJy4vZ3JhcGhpY3MvR3JhcGhpY3MnKSxcbiAgICBHcmFwaGljc0RhdGE6ICAgICAgICAgICByZXF1aXJlKCcuL2dyYXBoaWNzL0dyYXBoaWNzRGF0YScpLFxuICAgIEdyYXBoaWNzUmVuZGVyZXI6ICAgICAgIHJlcXVpcmUoJy4vZ3JhcGhpY3Mvd2ViZ2wvR3JhcGhpY3NSZW5kZXJlcicpLFxuXG4gICAgLy8gdGV4dHVyZXNcbiAgICBUZXh0dXJlOiAgICAgICAgICAgICAgICByZXF1aXJlKCcuL3RleHR1cmVzL1RleHR1cmUnKSxcbiAgICBCYXNlVGV4dHVyZTogICAgICAgICAgICByZXF1aXJlKCcuL3RleHR1cmVzL0Jhc2VUZXh0dXJlJyksXG4gICAgUmVuZGVyVGV4dHVyZTogICAgICAgICAgcmVxdWlyZSgnLi90ZXh0dXJlcy9SZW5kZXJUZXh0dXJlJyksXG4gICAgVmlkZW9CYXNlVGV4dHVyZTogICAgICAgcmVxdWlyZSgnLi90ZXh0dXJlcy9WaWRlb0Jhc2VUZXh0dXJlJyksXG4gICAgVGV4dHVyZVV2czogICAgICAgICAgICAgcmVxdWlyZSgnLi90ZXh0dXJlcy9UZXh0dXJlVXZzJyksXG5cbiAgICAvLyByZW5kZXJlcnMgLSBjYW52YXNcbiAgICBDYW52YXNSZW5kZXJlcjogICAgICAgICByZXF1aXJlKCcuL3JlbmRlcmVycy9jYW52YXMvQ2FudmFzUmVuZGVyZXInKSxcbiAgICBDYW52YXNHcmFwaGljczogICAgICAgICByZXF1aXJlKCcuL3JlbmRlcmVycy9jYW52YXMvdXRpbHMvQ2FudmFzR3JhcGhpY3MnKSxcbiAgICBDYW52YXNCdWZmZXI6ICAgICAgICAgICByZXF1aXJlKCcuL3JlbmRlcmVycy9jYW52YXMvdXRpbHMvQ2FudmFzQnVmZmVyJyksXG5cbiAgICAvLyByZW5kZXJlcnMgLSB3ZWJnbFxuICAgIFdlYkdMUmVuZGVyZXI6ICAgICAgICAgIHJlcXVpcmUoJy4vcmVuZGVyZXJzL3dlYmdsL1dlYkdMUmVuZGVyZXInKSxcbiAgICBXZWJHTE1hbmFnZXI6ICAgICAgICAgIHJlcXVpcmUoJy4vcmVuZGVyZXJzL3dlYmdsL21hbmFnZXJzL1dlYkdMTWFuYWdlcicpLFxuICAgIFNoYWRlck1hbmFnZXI6ICAgICAgICAgIHJlcXVpcmUoJy4vcmVuZGVyZXJzL3dlYmdsL21hbmFnZXJzL1NoYWRlck1hbmFnZXInKSxcbiAgICBTaGFkZXI6ICAgICAgICAgICAgICAgICByZXF1aXJlKCcuL3JlbmRlcmVycy93ZWJnbC9zaGFkZXJzL1NoYWRlcicpLFxuICAgIE9iamVjdFJlbmRlcmVyOiAgICAgICAgIHJlcXVpcmUoJy4vcmVuZGVyZXJzL3dlYmdsL3V0aWxzL09iamVjdFJlbmRlcmVyJyksXG4gICAgUmVuZGVyVGFyZ2V0OiAgICAgICAgICAgcmVxdWlyZSgnLi9yZW5kZXJlcnMvd2ViZ2wvdXRpbHMvUmVuZGVyVGFyZ2V0JyksXG5cbiAgICAvLyBmaWx0ZXJzIC0gd2ViZ2xcbiAgICBBYnN0cmFjdEZpbHRlcjogICAgICAgICByZXF1aXJlKCcuL3JlbmRlcmVycy93ZWJnbC9maWx0ZXJzL0Fic3RyYWN0RmlsdGVyJyksXG4gICAgRlhBQUZpbHRlcjogICAgICAgICAgICAgcmVxdWlyZSgnLi9yZW5kZXJlcnMvd2ViZ2wvZmlsdGVycy9GWEFBRmlsdGVyJyksXG4gICAgU3ByaXRlTWFza0ZpbHRlcjogICAgICAgcmVxdWlyZSgnLi9yZW5kZXJlcnMvd2ViZ2wvZmlsdGVycy9TcHJpdGVNYXNrRmlsdGVyJyksXG5cbiAgICBnbENvcmU6ICAgICAgICAgICAgICAgICAgIHJlcXVpcmUoJ3BpeGktZ2wtY29yZScpLFxuXG4gICAgLyoqXG4gICAgICogVGhpcyBoZWxwZXIgZnVuY3Rpb24gd2lsbCBhdXRvbWF0aWNhbGx5IGRldGVjdCB3aGljaCByZW5kZXJlciB5b3Ugc2hvdWxkIGJlIHVzaW5nLlxuICAgICAqIFdlYkdMIGlzIHRoZSBwcmVmZXJyZWQgcmVuZGVyZXIgYXMgaXQgaXMgYSBsb3QgZmFzdGVyLiBJZiB3ZWJHTCBpcyBub3Qgc3VwcG9ydGVkIGJ5XG4gICAgICogdGhlIGJyb3dzZXIgdGhlbiB0aGlzIGZ1bmN0aW9uIHdpbGwgcmV0dXJuIGEgY2FudmFzIHJlbmRlcmVyXG4gICAgICpcbiAgICAgKiBAbWVtYmVyb2YgUElYSVxuICAgICAqIEBwYXJhbSB3aWR0aD04MDAge251bWJlcn0gdGhlIHdpZHRoIG9mIHRoZSByZW5kZXJlcnMgdmlld1xuICAgICAqIEBwYXJhbSBoZWlnaHQ9NjAwIHtudW1iZXJ9IHRoZSBoZWlnaHQgb2YgdGhlIHJlbmRlcmVycyB2aWV3XG4gICAgICogQHBhcmFtIFtvcHRpb25zXSB7b2JqZWN0fSBUaGUgb3B0aW9uYWwgcmVuZGVyZXIgcGFyYW1ldGVyc1xuICAgICAqIEBwYXJhbSBbb3B0aW9ucy52aWV3XSB7SFRNTENhbnZhc0VsZW1lbnR9IHRoZSBjYW52YXMgdG8gdXNlIGFzIGEgdmlldywgb3B0aW9uYWxcbiAgICAgKiBAcGFyYW0gW29wdGlvbnMudHJhbnNwYXJlbnQ9ZmFsc2VdIHtib29sZWFufSBJZiB0aGUgcmVuZGVyIHZpZXcgaXMgdHJhbnNwYXJlbnQsIGRlZmF1bHQgZmFsc2VcbiAgICAgKiBAcGFyYW0gW29wdGlvbnMuYW50aWFsaWFzPWZhbHNlXSB7Ym9vbGVhbn0gc2V0cyBhbnRpYWxpYXMgKG9ubHkgYXBwbGljYWJsZSBpbiBjaHJvbWUgYXQgdGhlIG1vbWVudClcbiAgICAgKiBAcGFyYW0gW29wdGlvbnMucHJlc2VydmVEcmF3aW5nQnVmZmVyPWZhbHNlXSB7Ym9vbGVhbn0gZW5hYmxlcyBkcmF3aW5nIGJ1ZmZlciBwcmVzZXJ2YXRpb24sIGVuYWJsZSB0aGlzIGlmIHlvdVxuICAgICAqICAgICAgbmVlZCB0byBjYWxsIHRvRGF0YVVybCBvbiB0aGUgd2ViZ2wgY29udGV4dFxuICAgICAqIEBwYXJhbSBbb3B0aW9ucy5yZXNvbHV0aW9uPTFdIHtudW1iZXJ9IHRoZSByZXNvbHV0aW9uIG9mIHRoZSByZW5kZXJlciwgcmV0aW5hIHdvdWxkIGJlIDJcbiAgICAgKiBAcGFyYW0gW25vV2ViR0w9ZmFsc2VdIHtib29sZWFufSBwcmV2ZW50cyBzZWxlY3Rpb24gb2YgV2ViR0wgcmVuZGVyZXIsIGV2ZW4gaWYgc3VjaCBpcyBwcmVzZW50XG4gICAgICpcbiAgICAgKiBAcmV0dXJuIHtXZWJHTFJlbmRlcmVyfENhbnZhc1JlbmRlcmVyfSBSZXR1cm5zIFdlYkdMIHJlbmRlcmVyIGlmIGF2YWlsYWJsZSwgb3RoZXJ3aXNlIENhbnZhc1JlbmRlcmVyXG4gICAgICovXG4gICAgYXV0b0RldGVjdFJlbmRlcmVyOiBmdW5jdGlvbiAod2lkdGgsIGhlaWdodCwgb3B0aW9ucywgbm9XZWJHTClcbiAgICB7XG4gICAgICAgIHdpZHRoID0gd2lkdGggfHwgODAwO1xuICAgICAgICBoZWlnaHQgPSBoZWlnaHQgfHwgNjAwO1xuXG4gICAgICAgIGlmICghbm9XZWJHTCAmJiBjb3JlLnV0aWxzLmlzV2ViR0xTdXBwb3J0ZWQoKSlcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBjb3JlLldlYkdMUmVuZGVyZXIod2lkdGgsIGhlaWdodCwgb3B0aW9ucyk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbmV3IGNvcmUuQ2FudmFzUmVuZGVyZXIod2lkdGgsIGhlaWdodCwgb3B0aW9ucyk7XG4gICAgfVxufSk7XG4iLCIvLyBAdG9kbyAtIGlnbm9yZSB0aGUgdG9vIG1hbnkgcGFyYW1ldGVycyB3YXJuaW5nIGZvciBub3dcbi8vIHNob3VsZCBlaXRoZXIgZml4IGl0IG9yIGNoYW5nZSB0aGUganNoaW50IGNvbmZpZ1xuLy8ganNoaW50IC1XMDcyXG5cbnZhciBQb2ludCA9IHJlcXVpcmUoJy4vUG9pbnQnKTtcblxuLyoqXG4gKiBUaGUgcGl4aSBNYXRyaXggY2xhc3MgYXMgYW4gb2JqZWN0LCB3aGljaCBtYWtlcyBpdCBhIGxvdCBmYXN0ZXIsXG4gKiBoZXJlIGlzIGEgcmVwcmVzZW50YXRpb24gb2YgaXQgOlxuICogfCBhIHwgYiB8IHR4fFxuICogfCBjIHwgZCB8IHR5fFxuICogfCAwIHwgMCB8IDEgfFxuICpcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqL1xuZnVuY3Rpb24gTWF0cml4KClcbntcbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMVxuICAgICAqL1xuICAgIHRoaXMuYSA9IDE7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMFxuICAgICAqL1xuICAgIHRoaXMuYiA9IDA7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMFxuICAgICAqL1xuICAgIHRoaXMuYyA9IDA7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMVxuICAgICAqL1xuICAgIHRoaXMuZCA9IDE7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMFxuICAgICAqL1xuICAgIHRoaXMudHggPSAwO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDBcbiAgICAgKi9cbiAgICB0aGlzLnR5ID0gMDtcbn1cblxuTWF0cml4LnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IE1hdHJpeDtcbm1vZHVsZS5leHBvcnRzID0gTWF0cml4O1xuXG4vKipcbiAqIENyZWF0ZXMgYSBNYXRyaXggb2JqZWN0IGJhc2VkIG9uIHRoZSBnaXZlbiBhcnJheS4gVGhlIEVsZW1lbnQgdG8gTWF0cml4IG1hcHBpbmcgb3JkZXIgaXMgYXMgZm9sbG93czpcbiAqXG4gKiBhID0gYXJyYXlbMF1cbiAqIGIgPSBhcnJheVsxXVxuICogYyA9IGFycmF5WzNdXG4gKiBkID0gYXJyYXlbNF1cbiAqIHR4ID0gYXJyYXlbMl1cbiAqIHR5ID0gYXJyYXlbNV1cbiAqXG4gKiBAcGFyYW0gYXJyYXkge251bWJlcltdfSBUaGUgYXJyYXkgdGhhdCB0aGUgbWF0cml4IHdpbGwgYmUgcG9wdWxhdGVkIGZyb20uXG4gKi9cbk1hdHJpeC5wcm90b3R5cGUuZnJvbUFycmF5ID0gZnVuY3Rpb24gKGFycmF5KVxue1xuICAgIHRoaXMuYSA9IGFycmF5WzBdO1xuICAgIHRoaXMuYiA9IGFycmF5WzFdO1xuICAgIHRoaXMuYyA9IGFycmF5WzNdO1xuICAgIHRoaXMuZCA9IGFycmF5WzRdO1xuICAgIHRoaXMudHggPSBhcnJheVsyXTtcbiAgICB0aGlzLnR5ID0gYXJyYXlbNV07XG59O1xuXG5cbi8qKlxuICogc2V0cyB0aGUgbWF0cml4IHByb3BlcnRpZXNcbiAqXG4gKiBAcGFyYW0ge251bWJlcn0gYVxuICogQHBhcmFtIHtudW1iZXJ9IGJcbiAqIEBwYXJhbSB7bnVtYmVyfSBjXG4gKiBAcGFyYW0ge251bWJlcn0gZFxuICogQHBhcmFtIHtudW1iZXJ9IHR4XG4gKiBAcGFyYW0ge251bWJlcn0gdHlcbiAqXG4gKiBAcmV0dXJuIHtQSVhJLk1hdHJpeH0gVGhpcyBtYXRyaXguIEdvb2QgZm9yIGNoYWluaW5nIG1ldGhvZCBjYWxscy5cbiAqL1xuTWF0cml4LnByb3RvdHlwZS5zZXQgPSBmdW5jdGlvbiAoYSwgYiwgYywgZCwgdHgsIHR5KVxue1xuICAgIHRoaXMuYSA9IGE7XG4gICAgdGhpcy5iID0gYjtcbiAgICB0aGlzLmMgPSBjO1xuICAgIHRoaXMuZCA9IGQ7XG4gICAgdGhpcy50eCA9IHR4O1xuICAgIHRoaXMudHkgPSB0eTtcblxuICAgIHJldHVybiB0aGlzO1xufTtcblxuXG4vKipcbiAqIENyZWF0ZXMgYW4gYXJyYXkgZnJvbSB0aGUgY3VycmVudCBNYXRyaXggb2JqZWN0LlxuICpcbiAqIEBwYXJhbSB0cmFuc3Bvc2Uge2Jvb2xlYW59IFdoZXRoZXIgd2UgbmVlZCB0byB0cmFuc3Bvc2UgdGhlIG1hdHJpeCBvciBub3RcbiAqIEBwYXJhbSBbb3V0XSB7QXJyYXl9IElmIHByb3ZpZGVkIHRoZSBhcnJheSB3aWxsIGJlIGFzc2lnbmVkIHRvIG91dFxuICogQHJldHVybiB7bnVtYmVyW119IHRoZSBuZXdseSBjcmVhdGVkIGFycmF5IHdoaWNoIGNvbnRhaW5zIHRoZSBtYXRyaXhcbiAqL1xuTWF0cml4LnByb3RvdHlwZS50b0FycmF5ID0gZnVuY3Rpb24gKHRyYW5zcG9zZSwgb3V0KVxue1xuICAgIGlmICghdGhpcy5hcnJheSlcbiAgICB7XG4gICAgICAgIHRoaXMuYXJyYXkgPSBuZXcgRmxvYXQzMkFycmF5KDkpO1xuICAgIH1cblxuICAgIHZhciBhcnJheSA9IG91dCB8fCB0aGlzLmFycmF5O1xuXG4gICAgaWYgKHRyYW5zcG9zZSlcbiAgICB7XG4gICAgICAgIGFycmF5WzBdID0gdGhpcy5hO1xuICAgICAgICBhcnJheVsxXSA9IHRoaXMuYjtcbiAgICAgICAgYXJyYXlbMl0gPSAwO1xuICAgICAgICBhcnJheVszXSA9IHRoaXMuYztcbiAgICAgICAgYXJyYXlbNF0gPSB0aGlzLmQ7XG4gICAgICAgIGFycmF5WzVdID0gMDtcbiAgICAgICAgYXJyYXlbNl0gPSB0aGlzLnR4O1xuICAgICAgICBhcnJheVs3XSA9IHRoaXMudHk7XG4gICAgICAgIGFycmF5WzhdID0gMTtcbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgYXJyYXlbMF0gPSB0aGlzLmE7XG4gICAgICAgIGFycmF5WzFdID0gdGhpcy5jO1xuICAgICAgICBhcnJheVsyXSA9IHRoaXMudHg7XG4gICAgICAgIGFycmF5WzNdID0gdGhpcy5iO1xuICAgICAgICBhcnJheVs0XSA9IHRoaXMuZDtcbiAgICAgICAgYXJyYXlbNV0gPSB0aGlzLnR5O1xuICAgICAgICBhcnJheVs2XSA9IDA7XG4gICAgICAgIGFycmF5WzddID0gMDtcbiAgICAgICAgYXJyYXlbOF0gPSAxO1xuICAgIH1cblxuICAgIHJldHVybiBhcnJheTtcbn07XG5cbi8qKlxuICogR2V0IGEgbmV3IHBvc2l0aW9uIHdpdGggdGhlIGN1cnJlbnQgdHJhbnNmb3JtYXRpb24gYXBwbGllZC5cbiAqIENhbiBiZSB1c2VkIHRvIGdvIGZyb20gYSBjaGlsZCdzIGNvb3JkaW5hdGUgc3BhY2UgdG8gdGhlIHdvcmxkIGNvb3JkaW5hdGUgc3BhY2UuIChlLmcuIHJlbmRlcmluZylcbiAqXG4gKiBAcGFyYW0gcG9zIHtQSVhJLlBvaW50fSBUaGUgb3JpZ2luXG4gKiBAcGFyYW0gW25ld1Bvc10ge1BJWEkuUG9pbnR9IFRoZSBwb2ludCB0aGF0IHRoZSBuZXcgcG9zaXRpb24gaXMgYXNzaWduZWQgdG8gKGFsbG93ZWQgdG8gYmUgc2FtZSBhcyBpbnB1dClcbiAqIEByZXR1cm4ge1BJWEkuUG9pbnR9IFRoZSBuZXcgcG9pbnQsIHRyYW5zZm9ybWVkIHRocm91Z2ggdGhpcyBtYXRyaXhcbiAqL1xuTWF0cml4LnByb3RvdHlwZS5hcHBseSA9IGZ1bmN0aW9uIChwb3MsIG5ld1BvcylcbntcbiAgICBuZXdQb3MgPSBuZXdQb3MgfHwgbmV3IFBvaW50KCk7XG5cbiAgICB2YXIgeCA9IHBvcy54O1xuICAgIHZhciB5ID0gcG9zLnk7XG5cbiAgICBuZXdQb3MueCA9IHRoaXMuYSAqIHggKyB0aGlzLmMgKiB5ICsgdGhpcy50eDtcbiAgICBuZXdQb3MueSA9IHRoaXMuYiAqIHggKyB0aGlzLmQgKiB5ICsgdGhpcy50eTtcblxuICAgIHJldHVybiBuZXdQb3M7XG59O1xuXG4vKipcbiAqIEdldCBhIG5ldyBwb3NpdGlvbiB3aXRoIHRoZSBpbnZlcnNlIG9mIHRoZSBjdXJyZW50IHRyYW5zZm9ybWF0aW9uIGFwcGxpZWQuXG4gKiBDYW4gYmUgdXNlZCB0byBnbyBmcm9tIHRoZSB3b3JsZCBjb29yZGluYXRlIHNwYWNlIHRvIGEgY2hpbGQncyBjb29yZGluYXRlIHNwYWNlLiAoZS5nLiBpbnB1dClcbiAqXG4gKiBAcGFyYW0gcG9zIHtQSVhJLlBvaW50fSBUaGUgb3JpZ2luXG4gKiBAcGFyYW0gW25ld1Bvc10ge1BJWEkuUG9pbnR9IFRoZSBwb2ludCB0aGF0IHRoZSBuZXcgcG9zaXRpb24gaXMgYXNzaWduZWQgdG8gKGFsbG93ZWQgdG8gYmUgc2FtZSBhcyBpbnB1dClcbiAqIEByZXR1cm4ge1BJWEkuUG9pbnR9IFRoZSBuZXcgcG9pbnQsIGludmVyc2UtdHJhbnNmb3JtZWQgdGhyb3VnaCB0aGlzIG1hdHJpeFxuICovXG5NYXRyaXgucHJvdG90eXBlLmFwcGx5SW52ZXJzZSA9IGZ1bmN0aW9uIChwb3MsIG5ld1BvcylcbntcbiAgICBuZXdQb3MgPSBuZXdQb3MgfHwgbmV3IFBvaW50KCk7XG5cbiAgICB2YXIgaWQgPSAxIC8gKHRoaXMuYSAqIHRoaXMuZCArIHRoaXMuYyAqIC10aGlzLmIpO1xuXG4gICAgdmFyIHggPSBwb3MueDtcbiAgICB2YXIgeSA9IHBvcy55O1xuXG4gICAgbmV3UG9zLnggPSB0aGlzLmQgKiBpZCAqIHggKyAtdGhpcy5jICogaWQgKiB5ICsgKHRoaXMudHkgKiB0aGlzLmMgLSB0aGlzLnR4ICogdGhpcy5kKSAqIGlkO1xuICAgIG5ld1Bvcy55ID0gdGhpcy5hICogaWQgKiB5ICsgLXRoaXMuYiAqIGlkICogeCArICgtdGhpcy50eSAqIHRoaXMuYSArIHRoaXMudHggKiB0aGlzLmIpICogaWQ7XG5cbiAgICByZXR1cm4gbmV3UG9zO1xufTtcblxuLyoqXG4gKiBUcmFuc2xhdGVzIHRoZSBtYXRyaXggb24gdGhlIHggYW5kIHkuXG4gKlxuICogQHBhcmFtIHtudW1iZXJ9IHhcbiAqIEBwYXJhbSB7bnVtYmVyfSB5XG4gKiBAcmV0dXJuIHtQSVhJLk1hdHJpeH0gVGhpcyBtYXRyaXguIEdvb2QgZm9yIGNoYWluaW5nIG1ldGhvZCBjYWxscy5cbiAqL1xuTWF0cml4LnByb3RvdHlwZS50cmFuc2xhdGUgPSBmdW5jdGlvbiAoeCwgeSlcbntcbiAgICB0aGlzLnR4ICs9IHg7XG4gICAgdGhpcy50eSArPSB5O1xuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIEFwcGxpZXMgYSBzY2FsZSB0cmFuc2Zvcm1hdGlvbiB0byB0aGUgbWF0cml4LlxuICpcbiAqIEBwYXJhbSB7bnVtYmVyfSB4IFRoZSBhbW91bnQgdG8gc2NhbGUgaG9yaXpvbnRhbGx5XG4gKiBAcGFyYW0ge251bWJlcn0geSBUaGUgYW1vdW50IHRvIHNjYWxlIHZlcnRpY2FsbHlcbiAqIEByZXR1cm4ge1BJWEkuTWF0cml4fSBUaGlzIG1hdHJpeC4gR29vZCBmb3IgY2hhaW5pbmcgbWV0aG9kIGNhbGxzLlxuICovXG5NYXRyaXgucHJvdG90eXBlLnNjYWxlID0gZnVuY3Rpb24gKHgsIHkpXG57XG4gICAgdGhpcy5hICo9IHg7XG4gICAgdGhpcy5kICo9IHk7XG4gICAgdGhpcy5jICo9IHg7XG4gICAgdGhpcy5iICo9IHk7XG4gICAgdGhpcy50eCAqPSB4O1xuICAgIHRoaXMudHkgKj0geTtcblxuICAgIHJldHVybiB0aGlzO1xufTtcblxuXG4vKipcbiAqIEFwcGxpZXMgYSByb3RhdGlvbiB0cmFuc2Zvcm1hdGlvbiB0byB0aGUgbWF0cml4LlxuICpcbiAqIEBwYXJhbSB7bnVtYmVyfSBhbmdsZSAtIFRoZSBhbmdsZSBpbiByYWRpYW5zLlxuICogQHJldHVybiB7UElYSS5NYXRyaXh9IFRoaXMgbWF0cml4LiBHb29kIGZvciBjaGFpbmluZyBtZXRob2QgY2FsbHMuXG4gKi9cbk1hdHJpeC5wcm90b3R5cGUucm90YXRlID0gZnVuY3Rpb24gKGFuZ2xlKVxue1xuICAgIHZhciBjb3MgPSBNYXRoLmNvcyggYW5nbGUgKTtcbiAgICB2YXIgc2luID0gTWF0aC5zaW4oIGFuZ2xlICk7XG5cbiAgICB2YXIgYTEgPSB0aGlzLmE7XG4gICAgdmFyIGMxID0gdGhpcy5jO1xuICAgIHZhciB0eDEgPSB0aGlzLnR4O1xuXG4gICAgdGhpcy5hID0gYTEgKiBjb3MtdGhpcy5iICogc2luO1xuICAgIHRoaXMuYiA9IGExICogc2luK3RoaXMuYiAqIGNvcztcbiAgICB0aGlzLmMgPSBjMSAqIGNvcy10aGlzLmQgKiBzaW47XG4gICAgdGhpcy5kID0gYzEgKiBzaW4rdGhpcy5kICogY29zO1xuICAgIHRoaXMudHggPSB0eDEgKiBjb3MgLSB0aGlzLnR5ICogc2luO1xuICAgIHRoaXMudHkgPSB0eDEgKiBzaW4gKyB0aGlzLnR5ICogY29zO1xuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIEFwcGVuZHMgdGhlIGdpdmVuIE1hdHJpeCB0byB0aGlzIE1hdHJpeC5cbiAqXG4gKiBAcGFyYW0ge1BJWEkuTWF0cml4fSBtYXRyaXhcbiAqIEByZXR1cm4ge1BJWEkuTWF0cml4fSBUaGlzIG1hdHJpeC4gR29vZCBmb3IgY2hhaW5pbmcgbWV0aG9kIGNhbGxzLlxuICovXG5NYXRyaXgucHJvdG90eXBlLmFwcGVuZCA9IGZ1bmN0aW9uIChtYXRyaXgpXG57XG4gICAgdmFyIGExID0gdGhpcy5hO1xuICAgIHZhciBiMSA9IHRoaXMuYjtcbiAgICB2YXIgYzEgPSB0aGlzLmM7XG4gICAgdmFyIGQxID0gdGhpcy5kO1xuXG4gICAgdGhpcy5hICA9IG1hdHJpeC5hICogYTEgKyBtYXRyaXguYiAqIGMxO1xuICAgIHRoaXMuYiAgPSBtYXRyaXguYSAqIGIxICsgbWF0cml4LmIgKiBkMTtcbiAgICB0aGlzLmMgID0gbWF0cml4LmMgKiBhMSArIG1hdHJpeC5kICogYzE7XG4gICAgdGhpcy5kICA9IG1hdHJpeC5jICogYjEgKyBtYXRyaXguZCAqIGQxO1xuXG4gICAgdGhpcy50eCA9IG1hdHJpeC50eCAqIGExICsgbWF0cml4LnR5ICogYzEgKyB0aGlzLnR4O1xuICAgIHRoaXMudHkgPSBtYXRyaXgudHggKiBiMSArIG1hdHJpeC50eSAqIGQxICsgdGhpcy50eTtcblxuICAgIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBTZXRzIHRoZSBtYXRyaXggYmFzZWQgb24gYWxsIHRoZSBhdmFpbGFibGUgcHJvcGVydGllc1xuICpcbiAqIEBwYXJhbSB7bnVtYmVyfSB4XG4gKiBAcGFyYW0ge251bWJlcn0geVxuICogQHBhcmFtIHtudW1iZXJ9IHBpdm90WFxuICogQHBhcmFtIHtudW1iZXJ9IHBpdm90WVxuICogQHBhcmFtIHtudW1iZXJ9IHNjYWxlWFxuICogQHBhcmFtIHtudW1iZXJ9IHNjYWxlWVxuICogQHBhcmFtIHtudW1iZXJ9IHJvdGF0aW9uXG4gKiBAcGFyYW0ge251bWJlcn0gc2tld1hcbiAqIEBwYXJhbSB7bnVtYmVyfSBza2V3WVxuICpcbiAqIEByZXR1cm4ge1BJWEkuTWF0cml4fSBUaGlzIG1hdHJpeC4gR29vZCBmb3IgY2hhaW5pbmcgbWV0aG9kIGNhbGxzLlxuICovXG5NYXRyaXgucHJvdG90eXBlLnNldFRyYW5zZm9ybSA9IGZ1bmN0aW9uICh4LCB5LCBwaXZvdFgsIHBpdm90WSwgc2NhbGVYLCBzY2FsZVksIHJvdGF0aW9uLCBza2V3WCwgc2tld1kpXG57XG4gICAgdmFyIGEsIGIsIGMsIGQsIHNyLCBjciwgY3ksIHN5LCBuc3gsIGN4O1xuXG4gICAgc3IgID0gTWF0aC5zaW4ocm90YXRpb24pO1xuICAgIGNyICA9IE1hdGguY29zKHJvdGF0aW9uKTtcbiAgICBjeSAgPSBNYXRoLmNvcyhza2V3WSk7XG4gICAgc3kgID0gTWF0aC5zaW4oc2tld1kpO1xuICAgIG5zeCA9IC1NYXRoLnNpbihza2V3WCk7XG4gICAgY3ggID0gIE1hdGguY29zKHNrZXdYKTtcblxuICAgIGEgID0gIGNyICogc2NhbGVYO1xuICAgIGIgID0gIHNyICogc2NhbGVYO1xuICAgIGMgID0gLXNyICogc2NhbGVZO1xuICAgIGQgID0gIGNyICogc2NhbGVZO1xuXG4gICAgdGhpcy5hICA9IGN5ICogYSArIHN5ICogYztcbiAgICB0aGlzLmIgID0gY3kgKiBiICsgc3kgKiBkO1xuICAgIHRoaXMuYyAgPSBuc3ggKiBhICsgY3ggKiBjO1xuICAgIHRoaXMuZCAgPSBuc3ggKiBiICsgY3ggKiBkO1xuXG4gICAgdGhpcy50eCA9IHggKyAoIHBpdm90WCAqIGEgKyBwaXZvdFkgKiBjICk7XG4gICAgdGhpcy50eSA9IHkgKyAoIHBpdm90WCAqIGIgKyBwaXZvdFkgKiBkICk7XG5cbiAgICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogUHJlcGVuZHMgdGhlIGdpdmVuIE1hdHJpeCB0byB0aGlzIE1hdHJpeC5cbiAqXG4gKiBAcGFyYW0ge1BJWEkuTWF0cml4fSBtYXRyaXhcbiAqIEByZXR1cm4ge1BJWEkuTWF0cml4fSBUaGlzIG1hdHJpeC4gR29vZCBmb3IgY2hhaW5pbmcgbWV0aG9kIGNhbGxzLlxuICovXG5NYXRyaXgucHJvdG90eXBlLnByZXBlbmQgPSBmdW5jdGlvbihtYXRyaXgpXG57XG4gICAgdmFyIHR4MSA9IHRoaXMudHg7XG5cbiAgICBpZiAobWF0cml4LmEgIT09IDEgfHwgbWF0cml4LmIgIT09IDAgfHwgbWF0cml4LmMgIT09IDAgfHwgbWF0cml4LmQgIT09IDEpXG4gICAge1xuICAgICAgICB2YXIgYTEgPSB0aGlzLmE7XG4gICAgICAgIHZhciBjMSA9IHRoaXMuYztcbiAgICAgICAgdGhpcy5hICA9IGExKm1hdHJpeC5hK3RoaXMuYiptYXRyaXguYztcbiAgICAgICAgdGhpcy5iICA9IGExKm1hdHJpeC5iK3RoaXMuYiptYXRyaXguZDtcbiAgICAgICAgdGhpcy5jICA9IGMxKm1hdHJpeC5hK3RoaXMuZCptYXRyaXguYztcbiAgICAgICAgdGhpcy5kICA9IGMxKm1hdHJpeC5iK3RoaXMuZCptYXRyaXguZDtcbiAgICB9XG5cbiAgICB0aGlzLnR4ID0gdHgxKm1hdHJpeC5hK3RoaXMudHkqbWF0cml4LmMrbWF0cml4LnR4O1xuICAgIHRoaXMudHkgPSB0eDEqbWF0cml4LmIrdGhpcy50eSptYXRyaXguZCttYXRyaXgudHk7XG5cbiAgICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogSW52ZXJ0cyB0aGlzIG1hdHJpeFxuICpcbiAqIEByZXR1cm4ge1BJWEkuTWF0cml4fSBUaGlzIG1hdHJpeC4gR29vZCBmb3IgY2hhaW5pbmcgbWV0aG9kIGNhbGxzLlxuICovXG5NYXRyaXgucHJvdG90eXBlLmludmVydCA9IGZ1bmN0aW9uKClcbntcbiAgICB2YXIgYTEgPSB0aGlzLmE7XG4gICAgdmFyIGIxID0gdGhpcy5iO1xuICAgIHZhciBjMSA9IHRoaXMuYztcbiAgICB2YXIgZDEgPSB0aGlzLmQ7XG4gICAgdmFyIHR4MSA9IHRoaXMudHg7XG4gICAgdmFyIG4gPSBhMSpkMS1iMSpjMTtcblxuICAgIHRoaXMuYSA9IGQxL247XG4gICAgdGhpcy5iID0gLWIxL247XG4gICAgdGhpcy5jID0gLWMxL247XG4gICAgdGhpcy5kID0gYTEvbjtcbiAgICB0aGlzLnR4ID0gKGMxKnRoaXMudHktZDEqdHgxKS9uO1xuICAgIHRoaXMudHkgPSAtKGExKnRoaXMudHktYjEqdHgxKS9uO1xuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG5cbi8qKlxuICogUmVzZXRzIHRoaXMgTWF0aXggdG8gYW4gaWRlbnRpdHkgKGRlZmF1bHQpIG1hdHJpeC5cbiAqXG4gKiBAcmV0dXJuIHtQSVhJLk1hdHJpeH0gVGhpcyBtYXRyaXguIEdvb2QgZm9yIGNoYWluaW5nIG1ldGhvZCBjYWxscy5cbiAqL1xuTWF0cml4LnByb3RvdHlwZS5pZGVudGl0eSA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy5hID0gMTtcbiAgICB0aGlzLmIgPSAwO1xuICAgIHRoaXMuYyA9IDA7XG4gICAgdGhpcy5kID0gMTtcbiAgICB0aGlzLnR4ID0gMDtcbiAgICB0aGlzLnR5ID0gMDtcblxuICAgIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBDcmVhdGVzIGEgbmV3IE1hdHJpeCBvYmplY3Qgd2l0aCB0aGUgc2FtZSB2YWx1ZXMgYXMgdGhpcyBvbmUuXG4gKlxuICogQHJldHVybiB7UElYSS5NYXRyaXh9IEEgY29weSBvZiB0aGlzIG1hdHJpeC4gR29vZCBmb3IgY2hhaW5pbmcgbWV0aG9kIGNhbGxzLlxuICovXG5NYXRyaXgucHJvdG90eXBlLmNsb25lID0gZnVuY3Rpb24gKClcbntcbiAgICB2YXIgbWF0cml4ID0gbmV3IE1hdHJpeCgpO1xuICAgIG1hdHJpeC5hID0gdGhpcy5hO1xuICAgIG1hdHJpeC5iID0gdGhpcy5iO1xuICAgIG1hdHJpeC5jID0gdGhpcy5jO1xuICAgIG1hdHJpeC5kID0gdGhpcy5kO1xuICAgIG1hdHJpeC50eCA9IHRoaXMudHg7XG4gICAgbWF0cml4LnR5ID0gdGhpcy50eTtcblxuICAgIHJldHVybiBtYXRyaXg7XG59O1xuXG4vKipcbiAqIENoYW5nZXMgdGhlIHZhbHVlcyBvZiB0aGUgZ2l2ZW4gbWF0cml4IHRvIGJlIHRoZSBzYW1lIGFzIHRoZSBvbmVzIGluIHRoaXMgbWF0cml4XG4gKlxuICogQHJldHVybiB7UElYSS5NYXRyaXh9IFRoZSBtYXRyaXggZ2l2ZW4gaW4gcGFyYW1ldGVyIHdpdGggaXRzIHZhbHVlcyB1cGRhdGVkLlxuICovXG5NYXRyaXgucHJvdG90eXBlLmNvcHkgPSBmdW5jdGlvbiAobWF0cml4KVxue1xuICAgIG1hdHJpeC5hID0gdGhpcy5hO1xuICAgIG1hdHJpeC5iID0gdGhpcy5iO1xuICAgIG1hdHJpeC5jID0gdGhpcy5jO1xuICAgIG1hdHJpeC5kID0gdGhpcy5kO1xuICAgIG1hdHJpeC50eCA9IHRoaXMudHg7XG4gICAgbWF0cml4LnR5ID0gdGhpcy50eTtcblxuICAgIHJldHVybiBtYXRyaXg7XG59O1xuXG4vKipcbiAqIEEgZGVmYXVsdCAoaWRlbnRpdHkpIG1hdHJpeFxuICpcbiAqIEBzdGF0aWNcbiAqIEBjb25zdFxuICovXG5NYXRyaXguSURFTlRJVFkgPSBuZXcgTWF0cml4KCk7XG5cbi8qKlxuICogQSB0ZW1wIG1hdHJpeFxuICpcbiAqIEBzdGF0aWNcbiAqIEBjb25zdFxuICovXG5NYXRyaXguVEVNUF9NQVRSSVggPSBuZXcgTWF0cml4KCk7XG4iLCIvKipcbiAqIFRoZSBQb2ludCBvYmplY3QgcmVwcmVzZW50cyBhIGxvY2F0aW9uIGluIGEgdHdvLWRpbWVuc2lvbmFsIGNvb3JkaW5hdGUgc3lzdGVtLCB3aGVyZSB4IHJlcHJlc2VudHNcbiAqIHRoZSBob3Jpem9udGFsIGF4aXMgYW5kIHkgcmVwcmVzZW50cyB0aGUgdmVydGljYWwgYXhpcy5cbiAqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gW3g9MF0ge251bWJlcn0gcG9zaXRpb24gb2YgdGhlIHBvaW50IG9uIHRoZSB4IGF4aXNcbiAqIEBwYXJhbSBbeT0wXSB7bnVtYmVyfSBwb3NpdGlvbiBvZiB0aGUgcG9pbnQgb24gdGhlIHkgYXhpc1xuICovXG5mdW5jdGlvbiBQb2ludCh4LCB5KVxue1xuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAwXG4gICAgICovXG4gICAgdGhpcy54ID0geCB8fCAwO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDBcbiAgICAgKi9cbiAgICB0aGlzLnkgPSB5IHx8IDA7XG59XG5cblBvaW50LnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFBvaW50O1xubW9kdWxlLmV4cG9ydHMgPSBQb2ludDtcblxuLyoqXG4gKiBDcmVhdGVzIGEgY2xvbmUgb2YgdGhpcyBwb2ludFxuICpcbiAqIEByZXR1cm4ge1BJWEkuUG9pbnR9IGEgY29weSBvZiB0aGUgcG9pbnRcbiAqL1xuUG9pbnQucHJvdG90eXBlLmNsb25lID0gZnVuY3Rpb24gKClcbntcbiAgICByZXR1cm4gbmV3IFBvaW50KHRoaXMueCwgdGhpcy55KTtcbn07XG5cbi8qKlxuICogQ29waWVzIHggYW5kIHkgZnJvbSB0aGUgZ2l2ZW4gcG9pbnRcbiAqXG4gKiBAcGFyYW0gcCB7UElYSS5Qb2ludH1cbiAqL1xuUG9pbnQucHJvdG90eXBlLmNvcHkgPSBmdW5jdGlvbiAocCkge1xuICAgIHRoaXMuc2V0KHAueCwgcC55KTtcbn07XG5cbi8qKlxuICogUmV0dXJucyB0cnVlIGlmIHRoZSBnaXZlbiBwb2ludCBpcyBlcXVhbCB0byB0aGlzIHBvaW50XG4gKlxuICogQHBhcmFtIHAge1BJWEkuUG9pbnR9XG4gKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAqL1xuUG9pbnQucHJvdG90eXBlLmVxdWFscyA9IGZ1bmN0aW9uIChwKSB7XG4gICAgcmV0dXJuIChwLnggPT09IHRoaXMueCkgJiYgKHAueSA9PT0gdGhpcy55KTtcbn07XG5cbi8qKlxuICogU2V0cyB0aGUgcG9pbnQgdG8gYSBuZXcgeCBhbmQgeSBwb3NpdGlvbi5cbiAqIElmIHkgaXMgb21pdHRlZCwgYm90aCB4IGFuZCB5IHdpbGwgYmUgc2V0IHRvIHguXG4gKlxuICogQHBhcmFtIFt4PTBdIHtudW1iZXJ9IHBvc2l0aW9uIG9mIHRoZSBwb2ludCBvbiB0aGUgeCBheGlzXG4gKiBAcGFyYW0gW3k9MF0ge251bWJlcn0gcG9zaXRpb24gb2YgdGhlIHBvaW50IG9uIHRoZSB5IGF4aXNcbiAqL1xuUG9pbnQucHJvdG90eXBlLnNldCA9IGZ1bmN0aW9uICh4LCB5KVxue1xuICAgIHRoaXMueCA9IHggfHwgMDtcbiAgICB0aGlzLnkgPSB5IHx8ICggKHkgIT09IDApID8gdGhpcy54IDogMCApIDtcbn07XG4iLCIvKipcbiAqIE1hdGggY2xhc3NlcyBhbmQgdXRpbGl0aWVzIG1peGVkIGludG8gUElYSSBuYW1lc3BhY2UuXG4gKlxuICogQGxlbmRzIFBJWElcbiAqL1xubW9kdWxlLmV4cG9ydHMgPSB7XG4gICAgLy8gVGhlc2Ugd2lsbCBiZSBtaXhlZCB0byBiZSBtYWRlIHB1YmxpY2x5IGF2YWlsYWJsZSxcbiAgICAvLyB3aGlsZSB0aGlzIG1vZHVsZSBpcyB1c2VkIGludGVybmFsbHkgaW4gY29yZVxuICAgIC8vIHRvIGF2b2lkIGNpcmN1bGFyIGRlcGVuZGVuY2llcyBhbmQgY3V0IGRvd24gb25cbiAgICAvLyBpbnRlcm5hbCBtb2R1bGUgcmVxdWlyZXMuXG5cbiAgICBQb2ludDogICAgICByZXF1aXJlKCcuL1BvaW50JyksXG4gICAgTWF0cml4OiAgICAgcmVxdWlyZSgnLi9NYXRyaXgnKSxcblxuICAgIENpcmNsZTogICAgIHJlcXVpcmUoJy4vc2hhcGVzL0NpcmNsZScpLFxuICAgIEVsbGlwc2U6ICAgIHJlcXVpcmUoJy4vc2hhcGVzL0VsbGlwc2UnKSxcbiAgICBQb2x5Z29uOiAgICByZXF1aXJlKCcuL3NoYXBlcy9Qb2x5Z29uJyksXG4gICAgUmVjdGFuZ2xlOiAgcmVxdWlyZSgnLi9zaGFwZXMvUmVjdGFuZ2xlJyksXG4gICAgUm91bmRlZFJlY3RhbmdsZTogcmVxdWlyZSgnLi9zaGFwZXMvUm91bmRlZFJlY3RhbmdsZScpXG59O1xuIiwidmFyIFJlY3RhbmdsZSA9IHJlcXVpcmUoJy4vUmVjdGFuZ2xlJyksXG4gICAgQ09OU1QgPSByZXF1aXJlKCcuLi8uLi9jb25zdCcpO1xuXG4vKipcbiAqIFRoZSBDaXJjbGUgb2JqZWN0IGNhbiBiZSB1c2VkIHRvIHNwZWNpZnkgYSBoaXQgYXJlYSBmb3IgZGlzcGxheU9iamVjdHNcbiAqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0geCB7bnVtYmVyfSBUaGUgWCBjb29yZGluYXRlIG9mIHRoZSBjZW50ZXIgb2YgdGhpcyBjaXJjbGVcbiAqIEBwYXJhbSB5IHtudW1iZXJ9IFRoZSBZIGNvb3JkaW5hdGUgb2YgdGhlIGNlbnRlciBvZiB0aGlzIGNpcmNsZVxuICogQHBhcmFtIHJhZGl1cyB7bnVtYmVyfSBUaGUgcmFkaXVzIG9mIHRoZSBjaXJjbGVcbiAqL1xuZnVuY3Rpb24gQ2lyY2xlKHgsIHksIHJhZGl1cylcbntcbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMFxuICAgICAqL1xuICAgIHRoaXMueCA9IHggfHwgMDtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAwXG4gICAgICovXG4gICAgdGhpcy55ID0geSB8fCAwO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDBcbiAgICAgKi9cbiAgICB0aGlzLnJhZGl1cyA9IHJhZGl1cyB8fCAwO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHR5cGUgb2YgdGhlIG9iamVjdCwgbWFpbmx5IHVzZWQgdG8gYXZvaWQgYGluc3RhbmNlb2ZgIGNoZWNrc1xuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMudHlwZSA9IENPTlNULlNIQVBFUy5DSVJDO1xufVxuXG5DaXJjbGUucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gQ2lyY2xlO1xubW9kdWxlLmV4cG9ydHMgPSBDaXJjbGU7XG5cbi8qKlxuICogQ3JlYXRlcyBhIGNsb25lIG9mIHRoaXMgQ2lyY2xlIGluc3RhbmNlXG4gKlxuICogQHJldHVybiB7UElYSS5DaXJjbGV9IGEgY29weSBvZiB0aGUgQ2lyY2xlXG4gKi9cbkNpcmNsZS5wcm90b3R5cGUuY2xvbmUgPSBmdW5jdGlvbiAoKVxue1xuICAgIHJldHVybiBuZXcgQ2lyY2xlKHRoaXMueCwgdGhpcy55LCB0aGlzLnJhZGl1cyk7XG59O1xuXG4vKipcbiAqIENoZWNrcyB3aGV0aGVyIHRoZSB4IGFuZCB5IGNvb3JkaW5hdGVzIGdpdmVuIGFyZSBjb250YWluZWQgd2l0aGluIHRoaXMgY2lyY2xlXG4gKlxuICogQHBhcmFtIHgge251bWJlcn0gVGhlIFggY29vcmRpbmF0ZSBvZiB0aGUgcG9pbnQgdG8gdGVzdFxuICogQHBhcmFtIHkge251bWJlcn0gVGhlIFkgY29vcmRpbmF0ZSBvZiB0aGUgcG9pbnQgdG8gdGVzdFxuICogQHJldHVybiB7Ym9vbGVhbn0gV2hldGhlciB0aGUgeC95IGNvb3JkaW5hdGVzIGFyZSB3aXRoaW4gdGhpcyBDaXJjbGVcbiAqL1xuQ2lyY2xlLnByb3RvdHlwZS5jb250YWlucyA9IGZ1bmN0aW9uICh4LCB5KVxue1xuICAgIGlmICh0aGlzLnJhZGl1cyA8PSAwKVxuICAgIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHZhciBkeCA9ICh0aGlzLnggLSB4KSxcbiAgICAgICAgZHkgPSAodGhpcy55IC0geSksXG4gICAgICAgIHIyID0gdGhpcy5yYWRpdXMgKiB0aGlzLnJhZGl1cztcblxuICAgIGR4ICo9IGR4O1xuICAgIGR5ICo9IGR5O1xuXG4gICAgcmV0dXJuIChkeCArIGR5IDw9IHIyKTtcbn07XG5cbi8qKlxuKiBSZXR1cm5zIHRoZSBmcmFtaW5nIHJlY3RhbmdsZSBvZiB0aGUgY2lyY2xlIGFzIGEgUmVjdGFuZ2xlIG9iamVjdFxuKlxuKiBAcmV0dXJuIHtQSVhJLlJlY3RhbmdsZX0gdGhlIGZyYW1pbmcgcmVjdGFuZ2xlXG4qL1xuQ2lyY2xlLnByb3RvdHlwZS5nZXRCb3VuZHMgPSBmdW5jdGlvbiAoKVxue1xuICAgIHJldHVybiBuZXcgUmVjdGFuZ2xlKHRoaXMueCAtIHRoaXMucmFkaXVzLCB0aGlzLnkgLSB0aGlzLnJhZGl1cywgdGhpcy5yYWRpdXMgKiAyLCB0aGlzLnJhZGl1cyAqIDIpO1xufTtcbiIsInZhciBSZWN0YW5nbGUgPSByZXF1aXJlKCcuL1JlY3RhbmdsZScpLFxuICAgIENPTlNUID0gcmVxdWlyZSgnLi4vLi4vY29uc3QnKTtcblxuLyoqXG4gKiBUaGUgRWxsaXBzZSBvYmplY3QgY2FuIGJlIHVzZWQgdG8gc3BlY2lmeSBhIGhpdCBhcmVhIGZvciBkaXNwbGF5T2JqZWN0c1xuICpcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqIEBwYXJhbSB4IHtudW1iZXJ9IFRoZSBYIGNvb3JkaW5hdGUgb2YgdGhlIGNlbnRlciBvZiB0aGUgZWxsaXBzZVxuICogQHBhcmFtIHkge251bWJlcn0gVGhlIFkgY29vcmRpbmF0ZSBvZiB0aGUgY2VudGVyIG9mIHRoZSBlbGxpcHNlXG4gKiBAcGFyYW0gd2lkdGgge251bWJlcn0gVGhlIGhhbGYgd2lkdGggb2YgdGhpcyBlbGxpcHNlXG4gKiBAcGFyYW0gaGVpZ2h0IHtudW1iZXJ9IFRoZSBoYWxmIGhlaWdodCBvZiB0aGlzIGVsbGlwc2VcbiAqL1xuZnVuY3Rpb24gRWxsaXBzZSh4LCB5LCB3aWR0aCwgaGVpZ2h0KVxue1xuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAwXG4gICAgICovXG4gICAgdGhpcy54ID0geCB8fCAwO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDBcbiAgICAgKi9cbiAgICB0aGlzLnkgPSB5IHx8IDA7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMFxuICAgICAqL1xuICAgIHRoaXMud2lkdGggPSB3aWR0aCB8fCAwO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDBcbiAgICAgKi9cbiAgICB0aGlzLmhlaWdodCA9IGhlaWdodCB8fCAwO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHR5cGUgb2YgdGhlIG9iamVjdCwgbWFpbmx5IHVzZWQgdG8gYXZvaWQgYGluc3RhbmNlb2ZgIGNoZWNrc1xuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMudHlwZSA9IENPTlNULlNIQVBFUy5FTElQO1xufVxuXG5FbGxpcHNlLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IEVsbGlwc2U7XG5tb2R1bGUuZXhwb3J0cyA9IEVsbGlwc2U7XG5cbi8qKlxuICogQ3JlYXRlcyBhIGNsb25lIG9mIHRoaXMgRWxsaXBzZSBpbnN0YW5jZVxuICpcbiAqIEByZXR1cm4ge1BJWEkuRWxsaXBzZX0gYSBjb3B5IG9mIHRoZSBlbGxpcHNlXG4gKi9cbkVsbGlwc2UucHJvdG90eXBlLmNsb25lID0gZnVuY3Rpb24gKClcbntcbiAgICByZXR1cm4gbmV3IEVsbGlwc2UodGhpcy54LCB0aGlzLnksIHRoaXMud2lkdGgsIHRoaXMuaGVpZ2h0KTtcbn07XG5cbi8qKlxuICogQ2hlY2tzIHdoZXRoZXIgdGhlIHggYW5kIHkgY29vcmRpbmF0ZXMgZ2l2ZW4gYXJlIGNvbnRhaW5lZCB3aXRoaW4gdGhpcyBlbGxpcHNlXG4gKlxuICogQHBhcmFtIHgge251bWJlcn0gVGhlIFggY29vcmRpbmF0ZSBvZiB0aGUgcG9pbnQgdG8gdGVzdFxuICogQHBhcmFtIHkge251bWJlcn0gVGhlIFkgY29vcmRpbmF0ZSBvZiB0aGUgcG9pbnQgdG8gdGVzdFxuICogQHJldHVybiB7Ym9vbGVhbn0gV2hldGhlciB0aGUgeC95IGNvb3JkcyBhcmUgd2l0aGluIHRoaXMgZWxsaXBzZVxuICovXG5FbGxpcHNlLnByb3RvdHlwZS5jb250YWlucyA9IGZ1bmN0aW9uICh4LCB5KVxue1xuICAgIGlmICh0aGlzLndpZHRoIDw9IDAgfHwgdGhpcy5oZWlnaHQgPD0gMClcbiAgICB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICAvL25vcm1hbGl6ZSB0aGUgY29vcmRzIHRvIGFuIGVsbGlwc2Ugd2l0aCBjZW50ZXIgMCwwXG4gICAgdmFyIG5vcm14ID0gKCh4IC0gdGhpcy54KSAvIHRoaXMud2lkdGgpLFxuICAgICAgICBub3JteSA9ICgoeSAtIHRoaXMueSkgLyB0aGlzLmhlaWdodCk7XG5cbiAgICBub3JteCAqPSBub3JteDtcbiAgICBub3JteSAqPSBub3JteTtcblxuICAgIHJldHVybiAobm9ybXggKyBub3JteSA8PSAxKTtcbn07XG5cbi8qKlxuICogUmV0dXJucyB0aGUgZnJhbWluZyByZWN0YW5nbGUgb2YgdGhlIGVsbGlwc2UgYXMgYSBSZWN0YW5nbGUgb2JqZWN0XG4gKlxuICogQHJldHVybiB7UElYSS5SZWN0YW5nbGV9IHRoZSBmcmFtaW5nIHJlY3RhbmdsZVxuICovXG5FbGxpcHNlLnByb3RvdHlwZS5nZXRCb3VuZHMgPSBmdW5jdGlvbiAoKVxue1xuICAgIHJldHVybiBuZXcgUmVjdGFuZ2xlKHRoaXMueCAtIHRoaXMud2lkdGgsIHRoaXMueSAtIHRoaXMuaGVpZ2h0LCB0aGlzLndpZHRoLCB0aGlzLmhlaWdodCk7XG59O1xuIiwidmFyIFBvaW50ID0gcmVxdWlyZSgnLi4vUG9pbnQnKSxcbiAgICBDT05TVCA9IHJlcXVpcmUoJy4uLy4uL2NvbnN0Jyk7XG5cbi8qKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIHBvaW50cyB7UElYSS5Qb2ludFtdfG51bWJlcltdfC4uLlBJWEkuUG9pbnR8Li4ubnVtYmVyfSBUaGlzIGNhbiBiZSBhbiBhcnJheSBvZiBQb2ludHMgdGhhdCBmb3JtIHRoZSBwb2x5Z29uLFxuICogICAgICBhIGZsYXQgYXJyYXkgb2YgbnVtYmVycyB0aGF0IHdpbGwgYmUgaW50ZXJwcmV0ZWQgYXMgW3gseSwgeCx5LCAuLi5dLCBvciB0aGUgYXJndW1lbnRzIHBhc3NlZCBjYW4gYmVcbiAqICAgICAgYWxsIHRoZSBwb2ludHMgb2YgdGhlIHBvbHlnb24gZS5nLiBgbmV3IFBJWEkuUG9seWdvbihuZXcgUElYSS5Qb2ludCgpLCBuZXcgUElYSS5Qb2ludCgpLCAuLi4pYCwgb3IgdGhlXG4gKiAgICAgIGFyZ3VtZW50cyBwYXNzZWQgY2FuIGJlIGZsYXQgeCx5IHZhbHVlcyBlLmcuIGBuZXcgUG9seWdvbih4LHksIHgseSwgeCx5LCAuLi4pYCB3aGVyZSBgeGAgYW5kIGB5YCBhcmVcbiAqICAgICAgTnVtYmVycy5cbiAqL1xuZnVuY3Rpb24gUG9seWdvbihwb2ludHNfKVxue1xuICAgIC8vIHByZXZlbnRzIGFuIGFyZ3VtZW50IGFzc2lnbm1lbnQgZGVvcHRcbiAgICAvLyBzZWUgc2VjdGlvbiAzLjE6IGh0dHBzOi8vZ2l0aHViLmNvbS9wZXRrYWFudG9ub3YvYmx1ZWJpcmQvd2lraS9PcHRpbWl6YXRpb24ta2lsbGVycyMzLW1hbmFnaW5nLWFyZ3VtZW50c1xuICAgIHZhciBwb2ludHMgPSBwb2ludHNfO1xuXG4gICAgLy9pZiBwb2ludHMgaXNuJ3QgYW4gYXJyYXksIHVzZSBhcmd1bWVudHMgYXMgdGhlIGFycmF5XG4gICAgaWYgKCFBcnJheS5pc0FycmF5KHBvaW50cykpXG4gICAge1xuICAgICAgICAvLyBwcmV2ZW50cyBhbiBhcmd1bWVudCBsZWFrIGRlb3B0XG4gICAgICAgIC8vIHNlZSBzZWN0aW9uIDMuMjogaHR0cHM6Ly9naXRodWIuY29tL3BldGthYW50b25vdi9ibHVlYmlyZC93aWtpL09wdGltaXphdGlvbi1raWxsZXJzIzMtbWFuYWdpbmctYXJndW1lbnRzXG4gICAgICAgIHBvaW50cyA9IG5ldyBBcnJheShhcmd1bWVudHMubGVuZ3RoKTtcblxuICAgICAgICBmb3IgKHZhciBhID0gMDsgYSA8IHBvaW50cy5sZW5ndGg7ICsrYSkge1xuICAgICAgICAgICAgcG9pbnRzW2FdID0gYXJndW1lbnRzW2FdO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gaWYgdGhpcyBpcyBhbiBhcnJheSBvZiBwb2ludHMsIGNvbnZlcnQgaXQgdG8gYSBmbGF0IGFycmF5IG9mIG51bWJlcnNcbiAgICBpZiAocG9pbnRzWzBdIGluc3RhbmNlb2YgUG9pbnQpXG4gICAge1xuICAgICAgICB2YXIgcCA9IFtdO1xuICAgICAgICBmb3IgKHZhciBpID0gMCwgaWwgPSBwb2ludHMubGVuZ3RoOyBpIDwgaWw7IGkrKylcbiAgICAgICAge1xuICAgICAgICAgICAgcC5wdXNoKHBvaW50c1tpXS54LCBwb2ludHNbaV0ueSk7XG4gICAgICAgIH1cblxuICAgICAgICBwb2ludHMgPSBwO1xuICAgIH1cblxuICAgIHRoaXMuY2xvc2VkID0gdHJ1ZTtcblxuICAgIC8qKlxuICAgICAqIEFuIGFycmF5IG9mIHRoZSBwb2ludHMgb2YgdGhpcyBwb2x5Z29uXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJbXX1cbiAgICAgKi9cbiAgICB0aGlzLnBvaW50cyA9IHBvaW50cztcblxuICAgIC8qKlxuICAgICAqIFRoZSB0eXBlIG9mIHRoZSBvYmplY3QsIG1haW5seSB1c2VkIHRvIGF2b2lkIGBpbnN0YW5jZW9mYCBjaGVja3NcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLnR5cGUgPSBDT05TVC5TSEFQRVMuUE9MWTtcbn1cblxuUG9seWdvbi5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBQb2x5Z29uO1xubW9kdWxlLmV4cG9ydHMgPSBQb2x5Z29uO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBjbG9uZSBvZiB0aGlzIHBvbHlnb25cbiAqXG4gKiBAcmV0dXJuIHtQSVhJLlBvbHlnb259IGEgY29weSBvZiB0aGUgcG9seWdvblxuICovXG5Qb2x5Z29uLnByb3RvdHlwZS5jbG9uZSA9IGZ1bmN0aW9uICgpXG57XG4gICAgcmV0dXJuIG5ldyBQb2x5Z29uKHRoaXMucG9pbnRzLnNsaWNlKCkpO1xufTtcblxuLyoqXG4gKiBDaGVja3Mgd2hldGhlciB0aGUgeCBhbmQgeSBjb29yZGluYXRlcyBwYXNzZWQgdG8gdGhpcyBmdW5jdGlvbiBhcmUgY29udGFpbmVkIHdpdGhpbiB0aGlzIHBvbHlnb25cbiAqXG4gKiBAcGFyYW0geCB7bnVtYmVyfSBUaGUgWCBjb29yZGluYXRlIG9mIHRoZSBwb2ludCB0byB0ZXN0XG4gKiBAcGFyYW0geSB7bnVtYmVyfSBUaGUgWSBjb29yZGluYXRlIG9mIHRoZSBwb2ludCB0byB0ZXN0XG4gKiBAcmV0dXJuIHtib29sZWFufSBXaGV0aGVyIHRoZSB4L3kgY29vcmRpbmF0ZXMgYXJlIHdpdGhpbiB0aGlzIHBvbHlnb25cbiAqL1xuUG9seWdvbi5wcm90b3R5cGUuY29udGFpbnMgPSBmdW5jdGlvbiAoeCwgeSlcbntcbiAgICB2YXIgaW5zaWRlID0gZmFsc2U7XG5cbiAgICAvLyB1c2Ugc29tZSByYXljYXN0aW5nIHRvIHRlc3QgaGl0c1xuICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9zdWJzdGFjay9wb2ludC1pbi1wb2x5Z29uL2Jsb2IvbWFzdGVyL2luZGV4LmpzXG4gICAgdmFyIGxlbmd0aCA9IHRoaXMucG9pbnRzLmxlbmd0aCAvIDI7XG5cbiAgICBmb3IgKHZhciBpID0gMCwgaiA9IGxlbmd0aCAtIDE7IGkgPCBsZW5ndGg7IGogPSBpKyspXG4gICAge1xuICAgICAgICB2YXIgeGkgPSB0aGlzLnBvaW50c1tpICogMl0sIHlpID0gdGhpcy5wb2ludHNbaSAqIDIgKyAxXSxcbiAgICAgICAgICAgIHhqID0gdGhpcy5wb2ludHNbaiAqIDJdLCB5aiA9IHRoaXMucG9pbnRzW2ogKiAyICsgMV0sXG4gICAgICAgICAgICBpbnRlcnNlY3QgPSAoKHlpID4geSkgIT09ICh5aiA+IHkpKSAmJiAoeCA8ICh4aiAtIHhpKSAqICh5IC0geWkpIC8gKHlqIC0geWkpICsgeGkpO1xuXG4gICAgICAgIGlmIChpbnRlcnNlY3QpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGluc2lkZSA9ICFpbnNpZGU7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gaW5zaWRlO1xufTtcbiIsInZhciBDT05TVCA9IHJlcXVpcmUoJy4uLy4uL2NvbnN0Jyk7XG5cbi8qKlxuICogdGhlIFJlY3RhbmdsZSBvYmplY3QgaXMgYW4gYXJlYSBkZWZpbmVkIGJ5IGl0cyBwb3NpdGlvbiwgYXMgaW5kaWNhdGVkIGJ5IGl0cyB0b3AtbGVmdCBjb3JuZXIgcG9pbnQgKHgsIHkpIGFuZCBieSBpdHMgd2lkdGggYW5kIGl0cyBoZWlnaHQuXG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIHgge251bWJlcn0gVGhlIFggY29vcmRpbmF0ZSBvZiB0aGUgdXBwZXItbGVmdCBjb3JuZXIgb2YgdGhlIHJlY3RhbmdsZVxuICogQHBhcmFtIHkge251bWJlcn0gVGhlIFkgY29vcmRpbmF0ZSBvZiB0aGUgdXBwZXItbGVmdCBjb3JuZXIgb2YgdGhlIHJlY3RhbmdsZVxuICogQHBhcmFtIHdpZHRoIHtudW1iZXJ9IFRoZSBvdmVyYWxsIHdpZHRoIG9mIHRoaXMgcmVjdGFuZ2xlXG4gKiBAcGFyYW0gaGVpZ2h0IHtudW1iZXJ9IFRoZSBvdmVyYWxsIGhlaWdodCBvZiB0aGlzIHJlY3RhbmdsZVxuICovXG5mdW5jdGlvbiBSZWN0YW5nbGUoeCwgeSwgd2lkdGgsIGhlaWdodClcbntcbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMFxuICAgICAqL1xuICAgIHRoaXMueCA9IHggfHwgMDtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAwXG4gICAgICovXG4gICAgdGhpcy55ID0geSB8fCAwO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDBcbiAgICAgKi9cbiAgICB0aGlzLndpZHRoID0gd2lkdGggfHwgMDtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAwXG4gICAgICovXG4gICAgdGhpcy5oZWlnaHQgPSBoZWlnaHQgfHwgMDtcblxuICAgIC8qKlxuICAgICAqIFRoZSB0eXBlIG9mIHRoZSBvYmplY3QsIG1haW5seSB1c2VkIHRvIGF2b2lkIGBpbnN0YW5jZW9mYCBjaGVja3NcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLnR5cGUgPSBDT05TVC5TSEFQRVMuUkVDVDtcbn1cblxuUmVjdGFuZ2xlLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFJlY3RhbmdsZTtcbm1vZHVsZS5leHBvcnRzID0gUmVjdGFuZ2xlO1xuXG4vKipcbiAqIEEgY29uc3RhbnQgZW1wdHkgcmVjdGFuZ2xlLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBjb25zdGFudFxuICovXG5SZWN0YW5nbGUuRU1QVFkgPSBuZXcgUmVjdGFuZ2xlKDAsIDAsIDAsIDApO1xuXG5cbi8qKlxuICogQ3JlYXRlcyBhIGNsb25lIG9mIHRoaXMgUmVjdGFuZ2xlXG4gKlxuICogQHJldHVybiB7UElYSS5SZWN0YW5nbGV9IGEgY29weSBvZiB0aGUgcmVjdGFuZ2xlXG4gKi9cblJlY3RhbmdsZS5wcm90b3R5cGUuY2xvbmUgPSBmdW5jdGlvbiAoKVxue1xuICAgIHJldHVybiBuZXcgUmVjdGFuZ2xlKHRoaXMueCwgdGhpcy55LCB0aGlzLndpZHRoLCB0aGlzLmhlaWdodCk7XG59O1xuXG4vKipcbiAqIENoZWNrcyB3aGV0aGVyIHRoZSB4IGFuZCB5IGNvb3JkaW5hdGVzIGdpdmVuIGFyZSBjb250YWluZWQgd2l0aGluIHRoaXMgUmVjdGFuZ2xlXG4gKlxuICogQHBhcmFtIHgge251bWJlcn0gVGhlIFggY29vcmRpbmF0ZSBvZiB0aGUgcG9pbnQgdG8gdGVzdFxuICogQHBhcmFtIHkge251bWJlcn0gVGhlIFkgY29vcmRpbmF0ZSBvZiB0aGUgcG9pbnQgdG8gdGVzdFxuICogQHJldHVybiB7Ym9vbGVhbn0gV2hldGhlciB0aGUgeC95IGNvb3JkaW5hdGVzIGFyZSB3aXRoaW4gdGhpcyBSZWN0YW5nbGVcbiAqL1xuUmVjdGFuZ2xlLnByb3RvdHlwZS5jb250YWlucyA9IGZ1bmN0aW9uICh4LCB5KVxue1xuICAgIGlmICh0aGlzLndpZHRoIDw9IDAgfHwgdGhpcy5oZWlnaHQgPD0gMClcbiAgICB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBpZiAoeCA+PSB0aGlzLnggJiYgeCA8IHRoaXMueCArIHRoaXMud2lkdGgpXG4gICAge1xuICAgICAgICBpZiAoeSA+PSB0aGlzLnkgJiYgeSA8IHRoaXMueSArIHRoaXMuaGVpZ2h0KVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBmYWxzZTtcbn07XG4iLCJ2YXIgQ09OU1QgPSByZXF1aXJlKCcuLi8uLi9jb25zdCcpO1xuXG4vKipcbiAqIFRoZSBSb3VuZGVkIFJlY3RhbmdsZSBvYmplY3QgaXMgYW4gYXJlYSB0aGF0IGhhcyBuaWNlIHJvdW5kZWQgY29ybmVycywgYXMgaW5kaWNhdGVkIGJ5IGl0cyB0b3AtbGVmdCBjb3JuZXIgcG9pbnQgKHgsIHkpIGFuZCBieSBpdHMgd2lkdGggYW5kIGl0cyBoZWlnaHQgYW5kIGl0cyByYWRpdXMuXG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIHgge251bWJlcn0gVGhlIFggY29vcmRpbmF0ZSBvZiB0aGUgdXBwZXItbGVmdCBjb3JuZXIgb2YgdGhlIHJvdW5kZWQgcmVjdGFuZ2xlXG4gKiBAcGFyYW0geSB7bnVtYmVyfSBUaGUgWSBjb29yZGluYXRlIG9mIHRoZSB1cHBlci1sZWZ0IGNvcm5lciBvZiB0aGUgcm91bmRlZCByZWN0YW5nbGVcbiAqIEBwYXJhbSB3aWR0aCB7bnVtYmVyfSBUaGUgb3ZlcmFsbCB3aWR0aCBvZiB0aGlzIHJvdW5kZWQgcmVjdGFuZ2xlXG4gKiBAcGFyYW0gaGVpZ2h0IHtudW1iZXJ9IFRoZSBvdmVyYWxsIGhlaWdodCBvZiB0aGlzIHJvdW5kZWQgcmVjdGFuZ2xlXG4gKiBAcGFyYW0gcmFkaXVzIHtudW1iZXJ9IENvbnRyb2xzIHRoZSByYWRpdXMgb2YgdGhlIHJvdW5kZWQgY29ybmVyc1xuICovXG5mdW5jdGlvbiBSb3VuZGVkUmVjdGFuZ2xlKHgsIHksIHdpZHRoLCBoZWlnaHQsIHJhZGl1cylcbntcbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMFxuICAgICAqL1xuICAgIHRoaXMueCA9IHggfHwgMDtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAwXG4gICAgICovXG4gICAgdGhpcy55ID0geSB8fCAwO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDBcbiAgICAgKi9cbiAgICB0aGlzLndpZHRoID0gd2lkdGggfHwgMDtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAwXG4gICAgICovXG4gICAgdGhpcy5oZWlnaHQgPSBoZWlnaHQgfHwgMDtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAyMFxuICAgICAqL1xuICAgIHRoaXMucmFkaXVzID0gcmFkaXVzIHx8IDIwO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHR5cGUgb2YgdGhlIG9iamVjdCwgbWFpbmx5IHVzZWQgdG8gYXZvaWQgYGluc3RhbmNlb2ZgIGNoZWNrc1xuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMudHlwZSA9IENPTlNULlNIQVBFUy5SUkVDO1xufVxuXG5Sb3VuZGVkUmVjdGFuZ2xlLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFJvdW5kZWRSZWN0YW5nbGU7XG5tb2R1bGUuZXhwb3J0cyA9IFJvdW5kZWRSZWN0YW5nbGU7XG5cbi8qKlxuICogQ3JlYXRlcyBhIGNsb25lIG9mIHRoaXMgUm91bmRlZCBSZWN0YW5nbGVcbiAqXG4gKiBAcmV0dXJuIHtQSVhJLlJvdW5kZWRSZWN0YW5nbGV9IGEgY29weSBvZiB0aGUgcm91bmRlZCByZWN0YW5nbGVcbiAqL1xuUm91bmRlZFJlY3RhbmdsZS5wcm90b3R5cGUuY2xvbmUgPSBmdW5jdGlvbiAoKVxue1xuICAgIHJldHVybiBuZXcgUm91bmRlZFJlY3RhbmdsZSh0aGlzLngsIHRoaXMueSwgdGhpcy53aWR0aCwgdGhpcy5oZWlnaHQsIHRoaXMucmFkaXVzKTtcbn07XG5cbi8qKlxuICogQ2hlY2tzIHdoZXRoZXIgdGhlIHggYW5kIHkgY29vcmRpbmF0ZXMgZ2l2ZW4gYXJlIGNvbnRhaW5lZCB3aXRoaW4gdGhpcyBSb3VuZGVkIFJlY3RhbmdsZVxuICpcbiAqIEBwYXJhbSB4IHtudW1iZXJ9IFRoZSBYIGNvb3JkaW5hdGUgb2YgdGhlIHBvaW50IHRvIHRlc3RcbiAqIEBwYXJhbSB5IHtudW1iZXJ9IFRoZSBZIGNvb3JkaW5hdGUgb2YgdGhlIHBvaW50IHRvIHRlc3RcbiAqIEByZXR1cm4ge2Jvb2xlYW59IFdoZXRoZXIgdGhlIHgveSBjb29yZGluYXRlcyBhcmUgd2l0aGluIHRoaXMgUm91bmRlZCBSZWN0YW5nbGVcbiAqL1xuUm91bmRlZFJlY3RhbmdsZS5wcm90b3R5cGUuY29udGFpbnMgPSBmdW5jdGlvbiAoeCwgeSlcbntcbiAgICBpZiAodGhpcy53aWR0aCA8PSAwIHx8IHRoaXMuaGVpZ2h0IDw9IDApXG4gICAge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgaWYgKHggPj0gdGhpcy54ICYmIHggPD0gdGhpcy54ICsgdGhpcy53aWR0aClcbiAgICB7XG4gICAgICAgIGlmICh5ID49IHRoaXMueSAmJiB5IDw9IHRoaXMueSArIHRoaXMuaGVpZ2h0KVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBmYWxzZTtcbn07XG4iLCJ2YXIgQ29udGFpbmVyID0gcmVxdWlyZSgnLi4vZGlzcGxheS9Db250YWluZXInKSxcbiAgICBDT05TVCA9IHJlcXVpcmUoJy4uL2NvbnN0Jyk7XG5cbi8qKlxuICogVGhlIFBhcnRpY2xlQ29udGFpbmVyIGNsYXNzIGlzIGEgcmVhbGx5IGZhc3QgdmVyc2lvbiBvZiB0aGUgQ29udGFpbmVyIGJ1aWx0IHNvbGVseSBmb3Igc3BlZWQsXG4gKiBzbyB1c2Ugd2hlbiB5b3UgbmVlZCBhIGxvdCBvZiBzcHJpdGVzIG9yIHBhcnRpY2xlcy4gVGhlIHRyYWRlb2ZmIG9mIHRoZSBQYXJ0aWNsZUNvbnRhaW5lciBpcyB0aGF0IGFkdmFuY2VkXG4gKiBmdW5jdGlvbmFsaXR5IHdpbGwgbm90IHdvcmsuIFBhcnRpY2xlQ29udGFpbmVyIGltcGxlbWVudHMgb25seSB0aGUgYmFzaWMgb2JqZWN0IHRyYW5zZm9ybSAocG9zaXRpb24sIHNjYWxlLCByb3RhdGlvbikuXG4gKiBBbnkgb3RoZXIgZnVuY3Rpb25hbGl0eSBsaWtlIHRpbnRpbmcsIG1hc2tpbmcsIGV0YyB3aWxsIG5vdCB3b3JrIG9uIHNwcml0ZXMgaW4gdGhpcyBiYXRjaC5cbiAqXG4gKiBJdCdzIGV4dHJlbWVseSBlYXN5IHRvIHVzZSA6XG4gKlxuICogYGBganNcbiAqIHZhciBjb250YWluZXIgPSBuZXcgUGFydGljbGVDb250YWluZXIoKTtcbiAqXG4gKiBmb3IgKHZhciBpID0gMDsgaSA8IDEwMDsgKytpKVxuICoge1xuICogICAgIHZhciBzcHJpdGUgPSBuZXcgUElYSS5TcHJpdGUuZnJvbUltYWdlKFwibXlJbWFnZS5wbmdcIik7XG4gKiAgICAgY29udGFpbmVyLmFkZENoaWxkKHNwcml0ZSk7XG4gKiB9XG4gKiBgYGBcbiAqXG4gKiBBbmQgaGVyZSB5b3UgaGF2ZSBhIGh1bmRyZWQgc3ByaXRlcyB0aGF0IHdpbGwgYmUgcmVuZGVyZXIgYXQgdGhlIHNwZWVkIG9mIGxpZ2h0LlxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5Db250YWluZXJcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gW21heFNpemU9MTUwMDBdIHtudW1iZXJ9IFRoZSBtYXhpbXVtIG51bWJlciBvZiBwYXJ0aWNsZXMgdGhhdCBjYW4gYmUgcmVuZGVyZXIgYnkgdGhlIGNvbnRhaW5lci5cbiAqIEBwYXJhbSBbcHJvcGVydGllc10ge29iamVjdH0gVGhlIHByb3BlcnRpZXMgb2YgY2hpbGRyZW4gdGhhdCBzaG91bGQgYmUgdXBsb2FkZWQgdG8gdGhlIGdwdSBhbmQgYXBwbGllZC5cbiAqIEBwYXJhbSBbcHJvcGVydGllcy5zY2FsZT1mYWxzZV0ge2Jvb2xlYW59IFdoZW4gdHJ1ZSwgc2NhbGUgYmUgdXBsb2FkZWQgYW5kIGFwcGxpZWQuXG4gKiBAcGFyYW0gW3Byb3BlcnRpZXMucG9zaXRpb249dHJ1ZV0ge2Jvb2xlYW59IFdoZW4gdHJ1ZSwgcG9zaXRpb24gYmUgdXBsb2FkZWQgYW5kIGFwcGxpZWQuXG4gKiBAcGFyYW0gW3Byb3BlcnRpZXMucm90YXRpb249ZmFsc2VdIHtib29sZWFufSBXaGVuIHRydWUsIHJvdGF0aW9uIGJlIHVwbG9hZGVkIGFuZCBhcHBsaWVkLlxuICogQHBhcmFtIFtwcm9wZXJ0aWVzLnV2cz1mYWxzZV0ge2Jvb2xlYW59IFdoZW4gdHJ1ZSwgdXZzIGJlIHVwbG9hZGVkIGFuZCBhcHBsaWVkLlxuICogQHBhcmFtIFtwcm9wZXJ0aWVzLmFscGhhPWZhbHNlXSB7Ym9vbGVhbn0gV2hlbiB0cnVlLCBhbHBoYSBiZSB1cGxvYWRlZCBhbmQgYXBwbGllZC5cbiAqIEBwYXJhbSBbYmF0Y2hTaXplPTE1MDAwXSB7bnVtYmVyfSBOdW1iZXIgb2YgcGFydGljbGVzIHBlciBiYXRjaC5cbiAqL1xuZnVuY3Rpb24gUGFydGljbGVDb250YWluZXIobWF4U2l6ZSwgcHJvcGVydGllcywgYmF0Y2hTaXplKVxue1xuICAgIENvbnRhaW5lci5jYWxsKHRoaXMpO1xuXG4gICAgYmF0Y2hTaXplID0gYmF0Y2hTaXplIHx8IDE1MDAwOyAvL0NPTlNULlNQUklURV9CQVRDSF9TSVpFOyAvLyAyMDAwIGlzIGEgbmljZSBiYWxhbmNlIGJldHdlZW4gbW9iaWxlIC8gZGVza3RvcFxuICAgIG1heFNpemUgPSBtYXhTaXplIHx8IDE1MDAwO1xuXG4gICAgLy8gTWFraW5nIHN1cmUgdGhlIGJhdGNoIHNpemUgaXMgdmFsaWRcbiAgICAvLyA2NTUzNSBpcyBtYXggdmVydGV4IGluZGV4IGluIHRoZSBpbmRleCBidWZmZXIgKHNlZSBQYXJ0aWNsZVJlbmRlcmVyKVxuICAgIC8vIHNvIG1heCBudW1iZXIgb2YgcGFydGljbGVzIGlzIDY1NTM2IC8gNCA9IDE2Mzg0XG4gICAgdmFyIG1heEJhdGNoU2l6ZSA9IDE2Mzg0O1xuICAgIGlmIChiYXRjaFNpemUgPiBtYXhCYXRjaFNpemUpIHtcbiAgICAgICAgYmF0Y2hTaXplID0gbWF4QmF0Y2hTaXplO1xuICAgIH1cblxuICAgIGlmIChiYXRjaFNpemUgPiBtYXhTaXplKSB7XG4gICAgICAgIGJhdGNoU2l6ZSA9IG1heFNpemU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2V0IHByb3BlcnRpZXMgdG8gYmUgZHluYW1pYyAodHJ1ZSkgLyBzdGF0aWMgKGZhbHNlKVxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbltdfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fcHJvcGVydGllcyA9IFtmYWxzZSwgdHJ1ZSwgZmFsc2UsIGZhbHNlLCBmYWxzZV07XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9tYXhTaXplID0gbWF4U2l6ZTtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX2JhdGNoU2l6ZSA9IGJhdGNoU2l6ZTtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge1dlYkdMQnVmZmVyfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fYnVmZmVycyA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9idWZmZXJUb1VwZGF0ZSA9IDA7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqXG4gICAgICovXG4gICAgdGhpcy5pbnRlcmFjdGl2ZUNoaWxkcmVuID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYmxlbmQgbW9kZSB0byBiZSBhcHBsaWVkIHRvIHRoZSBzcHJpdGUuIEFwcGx5IGEgdmFsdWUgb2YgYFBJWEkuQkxFTkRfTU9ERVMuTk9STUFMYCB0byByZXNldCB0aGUgYmxlbmQgbW9kZS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCBQSVhJLkJMRU5EX01PREVTLk5PUk1BTFxuICAgICAqIEBzZWUgUElYSS5CTEVORF9NT0RFU1xuICAgICAqL1xuICAgIHRoaXMuYmxlbmRNb2RlID0gQ09OU1QuQkxFTkRfTU9ERVMuTk9STUFMO1xuXG4gICAgLyoqXG4gICAgICogVXNlZCBmb3IgY2FudmFzIHJlbmRlcmVyaW5nLiBJZiB0cnVlIHRoZW4gdGhlIGVsZW1lbnRzIHdpbGwgYmUgcG9zaXRpb25lZCBhdCB0aGUgbmVhcmVzdCBwaXhlbC4gVGhpcyBwcm92aWRlcyBhIG5pY2Ugc3BlZWQgYm9vc3QuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqIEBkZWZhdWx0IHRydWU7XG4gICAgICovXG4gICAgdGhpcy5yb3VuZFBpeGVscyA9IHRydWU7XG5cbiAgICB0aGlzLnNldFByb3BlcnRpZXMocHJvcGVydGllcyk7XG59XG5cblBhcnRpY2xlQ29udGFpbmVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoQ29udGFpbmVyLnByb3RvdHlwZSk7XG5QYXJ0aWNsZUNvbnRhaW5lci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBQYXJ0aWNsZUNvbnRhaW5lcjtcbm1vZHVsZS5leHBvcnRzID0gUGFydGljbGVDb250YWluZXI7XG5cbi8qKlxuICogU2V0cyB0aGUgcHJpdmF0ZSBwcm9wZXJ0aWVzIGFycmF5IHRvIGR5bmFtaWMgLyBzdGF0aWMgYmFzZWQgb24gdGhlIHBhc3NlZCBwcm9wZXJ0aWVzIG9iamVjdFxuICpcbiAqIEBwYXJhbSBwcm9wZXJ0aWVzIHtvYmplY3R9IFRoZSBwcm9wZXJ0aWVzIHRvIGJlIHVwbG9hZGVkXG4gKi9cblBhcnRpY2xlQ29udGFpbmVyLnByb3RvdHlwZS5zZXRQcm9wZXJ0aWVzID0gZnVuY3Rpb24ocHJvcGVydGllcylcbntcbiAgICBpZiAoIHByb3BlcnRpZXMgKSB7XG4gICAgICAgIHRoaXMuX3Byb3BlcnRpZXNbMF0gPSAnc2NhbGUnIGluIHByb3BlcnRpZXMgPyAhIXByb3BlcnRpZXMuc2NhbGUgOiB0aGlzLl9wcm9wZXJ0aWVzWzBdO1xuICAgICAgICB0aGlzLl9wcm9wZXJ0aWVzWzFdID0gJ3Bvc2l0aW9uJyBpbiBwcm9wZXJ0aWVzID8gISFwcm9wZXJ0aWVzLnBvc2l0aW9uIDogdGhpcy5fcHJvcGVydGllc1sxXTtcbiAgICAgICAgdGhpcy5fcHJvcGVydGllc1syXSA9ICdyb3RhdGlvbicgaW4gcHJvcGVydGllcyA/ICEhcHJvcGVydGllcy5yb3RhdGlvbiA6IHRoaXMuX3Byb3BlcnRpZXNbMl07XG4gICAgICAgIHRoaXMuX3Byb3BlcnRpZXNbM10gPSAndXZzJyBpbiBwcm9wZXJ0aWVzID8gISFwcm9wZXJ0aWVzLnV2cyA6IHRoaXMuX3Byb3BlcnRpZXNbM107XG4gICAgICAgIHRoaXMuX3Byb3BlcnRpZXNbNF0gPSAnYWxwaGEnIGluIHByb3BlcnRpZXMgPyAhIXByb3BlcnRpZXMuYWxwaGEgOiB0aGlzLl9wcm9wZXJ0aWVzWzRdO1xuICAgIH1cbn07XG5cbi8qKlxuICogVXBkYXRlcyB0aGUgb2JqZWN0IHRyYW5zZm9ybSBmb3IgcmVuZGVyaW5nXG4gKlxuICogQHByaXZhdGVcbiAqL1xuUGFydGljbGVDb250YWluZXIucHJvdG90eXBlLnVwZGF0ZVRyYW5zZm9ybSA9IGZ1bmN0aW9uICgpXG57XG5cbiAgICAvLyBUT0RPIGRvbid0IG5lZWQgdG8hXG4gICAgdGhpcy5kaXNwbGF5T2JqZWN0VXBkYXRlVHJhbnNmb3JtKCk7XG4gICAgLy8gIFBJWEkuQ29udGFpbmVyLnByb3RvdHlwZS51cGRhdGVUcmFuc2Zvcm0uY2FsbCggdGhpcyApO1xufTtcblxuLyoqXG4gKiBSZW5kZXJzIHRoZSBjb250YWluZXIgdXNpbmcgdGhlIFdlYkdMIHJlbmRlcmVyXG4gKlxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLldlYkdMUmVuZGVyZXJ9IFRoZSB3ZWJnbCByZW5kZXJlclxuICogQHByaXZhdGVcbiAqL1xuUGFydGljbGVDb250YWluZXIucHJvdG90eXBlLnJlbmRlcldlYkdMID0gZnVuY3Rpb24gKHJlbmRlcmVyKVxue1xuICAgIGlmICghdGhpcy52aXNpYmxlIHx8IHRoaXMud29ybGRBbHBoYSA8PSAwIHx8ICF0aGlzLmNoaWxkcmVuLmxlbmd0aCB8fCAhdGhpcy5yZW5kZXJhYmxlKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHJlbmRlcmVyLnNldE9iamVjdFJlbmRlcmVyKCByZW5kZXJlci5wbHVnaW5zLnBhcnRpY2xlICk7XG4gICAgcmVuZGVyZXIucGx1Z2lucy5wYXJ0aWNsZS5yZW5kZXIoIHRoaXMgKTtcbn07XG5cbi8qKlxuICogU2V0IHRoZSBmbGFnIHRoYXQgc3RhdGljIGRhdGEgc2hvdWxkIGJlIHVwZGF0ZWQgdG8gdHJ1ZVxuICpcbiAqIEBwcml2YXRlXG4gKi9cblBhcnRpY2xlQ29udGFpbmVyLnByb3RvdHlwZS5vbkNoaWxkcmVuQ2hhbmdlID0gZnVuY3Rpb24gKHNtYWxsZXN0Q2hpbGRJbmRleClcbntcbiAgICB2YXIgYnVmZmVySW5kZXggPSBNYXRoLmZsb29yKHNtYWxsZXN0Q2hpbGRJbmRleCAvIHRoaXMuX2JhdGNoU2l6ZSk7XG4gICAgaWYgKGJ1ZmZlckluZGV4IDwgdGhpcy5fYnVmZmVyVG9VcGRhdGUpIHtcbiAgICAgICAgdGhpcy5fYnVmZmVyVG9VcGRhdGUgPSBidWZmZXJJbmRleDtcbiAgICB9XG59O1xuXG4vKipcbiAqIFJlbmRlcnMgdGhlIG9iamVjdCB1c2luZyB0aGUgQ2FudmFzIHJlbmRlcmVyXG4gKlxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLkNhbnZhc1JlbmRlcmVyfSBUaGUgY2FudmFzIHJlbmRlcmVyXG4gKiBAcHJpdmF0ZVxuICovXG5QYXJ0aWNsZUNvbnRhaW5lci5wcm90b3R5cGUucmVuZGVyQ2FudmFzID0gZnVuY3Rpb24gKHJlbmRlcmVyKVxue1xuICAgIGlmICghdGhpcy52aXNpYmxlIHx8IHRoaXMud29ybGRBbHBoYSA8PSAwIHx8ICF0aGlzLmNoaWxkcmVuLmxlbmd0aCB8fCAhdGhpcy5yZW5kZXJhYmxlKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHZhciBjb250ZXh0ID0gcmVuZGVyZXIuY29udGV4dDtcbiAgICB2YXIgdHJhbnNmb3JtID0gdGhpcy53b3JsZFRyYW5zZm9ybTtcbiAgICB2YXIgaXNSb3RhdGVkID0gdHJ1ZTtcblxuICAgIHZhciBwb3NpdGlvblggPSAwO1xuICAgIHZhciBwb3NpdGlvblkgPSAwO1xuXG4gICAgdmFyIGZpbmFsV2lkdGggPSAwO1xuICAgIHZhciBmaW5hbEhlaWdodCA9IDA7XG5cbiAgICB2YXIgY29tcG9zaXRlT3BlcmF0aW9uID0gcmVuZGVyZXIuYmxlbmRNb2Rlc1t0aGlzLmJsZW5kTW9kZV07XG4gICAgaWYgKGNvbXBvc2l0ZU9wZXJhdGlvbiAhPT0gY29udGV4dC5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb24pXG4gICAge1xuICAgICAgICBjb250ZXh0Lmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbiA9IGNvbXBvc2l0ZU9wZXJhdGlvbjtcbiAgICB9XG5cbiAgICBjb250ZXh0Lmdsb2JhbEFscGhhID0gdGhpcy53b3JsZEFscGhhO1xuXG4gICAgdGhpcy5kaXNwbGF5T2JqZWN0VXBkYXRlVHJhbnNmb3JtKCk7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuY2hpbGRyZW4ubGVuZ3RoOyArK2kpXG4gICAge1xuICAgICAgICB2YXIgY2hpbGQgPSB0aGlzLmNoaWxkcmVuW2ldO1xuXG4gICAgICAgIGlmICghY2hpbGQudmlzaWJsZSlcbiAgICAgICAge1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgZnJhbWUgPSBjaGlsZC50ZXh0dXJlLmZyYW1lO1xuXG4gICAgICAgIGNvbnRleHQuZ2xvYmFsQWxwaGEgPSB0aGlzLndvcmxkQWxwaGEgKiBjaGlsZC5hbHBoYTtcblxuICAgICAgICBpZiAoY2hpbGQucm90YXRpb24gJSAoTWF0aC5QSSAqIDIpID09PSAwKVxuICAgICAgICB7XG4gICAgICAgICAgICAvLyB0aGlzIGlzIHRoZSBmYXN0ZXN0ICB3YXkgdG8gb3B0aW1pc2UhIC0gaWYgcm90YXRpb24gaXMgMCB0aGVuIHdlIGNhbiBhdm9pZCBhbnkga2luZCBvZiBzZXRUcmFuc2Zvcm0gY2FsbFxuICAgICAgICAgICAgaWYgKGlzUm90YXRlZClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb250ZXh0LnNldFRyYW5zZm9ybShcbiAgICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtLmEsXG4gICAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybS5iLFxuICAgICAgICAgICAgICAgICAgICB0cmFuc2Zvcm0uYyxcbiAgICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtLmQsXG4gICAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybS50eCxcbiAgICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtLnR5XG4gICAgICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgICAgIGlzUm90YXRlZCA9IGZhbHNlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBwb3NpdGlvblggPSAoKGNoaWxkLmFuY2hvci54KSAqICgtZnJhbWUud2lkdGggKiBjaGlsZC5zY2FsZS54KSArIGNoaWxkLnBvc2l0aW9uLnggICsgMC41KTtcbiAgICAgICAgICAgIHBvc2l0aW9uWSA9ICgoY2hpbGQuYW5jaG9yLnkpICogKC1mcmFtZS5oZWlnaHQgKiBjaGlsZC5zY2FsZS55KSArIGNoaWxkLnBvc2l0aW9uLnkgICsgMC41KTtcblxuICAgICAgICAgICAgZmluYWxXaWR0aCA9IGZyYW1lLndpZHRoICogY2hpbGQuc2NhbGUueDtcbiAgICAgICAgICAgIGZpbmFsSGVpZ2h0ID0gZnJhbWUuaGVpZ2h0ICogY2hpbGQuc2NhbGUueTtcblxuICAgICAgICB9XG4gICAgICAgIGVsc2VcbiAgICAgICAge1xuICAgICAgICAgICAgaWYgKCFpc1JvdGF0ZWQpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgaXNSb3RhdGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY2hpbGQuZGlzcGxheU9iamVjdFVwZGF0ZVRyYW5zZm9ybSgpO1xuXG4gICAgICAgICAgICB2YXIgY2hpbGRUcmFuc2Zvcm0gPSBjaGlsZC53b3JsZFRyYW5zZm9ybTtcblxuICAgICAgICAgICAgaWYgKHJlbmRlcmVyLnJvdW5kUGl4ZWxzKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGNvbnRleHQuc2V0VHJhbnNmb3JtKFxuICAgICAgICAgICAgICAgICAgICBjaGlsZFRyYW5zZm9ybS5hLFxuICAgICAgICAgICAgICAgICAgICBjaGlsZFRyYW5zZm9ybS5iLFxuICAgICAgICAgICAgICAgICAgICBjaGlsZFRyYW5zZm9ybS5jLFxuICAgICAgICAgICAgICAgICAgICBjaGlsZFRyYW5zZm9ybS5kLFxuICAgICAgICAgICAgICAgICAgICBjaGlsZFRyYW5zZm9ybS50eCB8IDAsXG4gICAgICAgICAgICAgICAgICAgIGNoaWxkVHJhbnNmb3JtLnR5IHwgMFxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29udGV4dC5zZXRUcmFuc2Zvcm0oXG4gICAgICAgICAgICAgICAgICAgIGNoaWxkVHJhbnNmb3JtLmEsXG4gICAgICAgICAgICAgICAgICAgIGNoaWxkVHJhbnNmb3JtLmIsXG4gICAgICAgICAgICAgICAgICAgIGNoaWxkVHJhbnNmb3JtLmMsXG4gICAgICAgICAgICAgICAgICAgIGNoaWxkVHJhbnNmb3JtLmQsXG4gICAgICAgICAgICAgICAgICAgIGNoaWxkVHJhbnNmb3JtLnR4LFxuICAgICAgICAgICAgICAgICAgICBjaGlsZFRyYW5zZm9ybS50eVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHBvc2l0aW9uWCA9ICgoY2hpbGQuYW5jaG9yLngpICogKC1mcmFtZS53aWR0aCkgKyAwLjUpO1xuICAgICAgICAgICAgcG9zaXRpb25ZID0gKChjaGlsZC5hbmNob3IueSkgKiAoLWZyYW1lLmhlaWdodCkgKyAwLjUpO1xuXG4gICAgICAgICAgICBmaW5hbFdpZHRoID0gZnJhbWUud2lkdGg7XG4gICAgICAgICAgICBmaW5hbEhlaWdodCA9IGZyYW1lLmhlaWdodDtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnRleHQuZHJhd0ltYWdlKFxuICAgICAgICAgICAgY2hpbGQudGV4dHVyZS5iYXNlVGV4dHVyZS5zb3VyY2UsXG4gICAgICAgICAgICBmcmFtZS54LFxuICAgICAgICAgICAgZnJhbWUueSxcbiAgICAgICAgICAgIGZyYW1lLndpZHRoLFxuICAgICAgICAgICAgZnJhbWUuaGVpZ2h0LFxuICAgICAgICAgICAgcG9zaXRpb25YLFxuICAgICAgICAgICAgcG9zaXRpb25ZLFxuICAgICAgICAgICAgZmluYWxXaWR0aCxcbiAgICAgICAgICAgIGZpbmFsSGVpZ2h0XG4gICAgICAgICk7XG4gICAgfVxufTtcblxuLyoqXG4gKiBEZXN0cm95cyB0aGUgY29udGFpbmVyXG4gKlxuICogQHBhcmFtIFtkZXN0cm95Q2hpbGRyZW49ZmFsc2VdIHtib29sZWFufSBpZiBzZXQgdG8gdHJ1ZSwgYWxsIHRoZSBjaGlsZHJlbiB3aWxsIGhhdmUgdGhlaXIgZGVzdHJveSBtZXRob2QgY2FsbGVkIGFzIHdlbGxcbiAqL1xuUGFydGljbGVDb250YWluZXIucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoKSB7XG4gICAgQ29udGFpbmVyLnByb3RvdHlwZS5kZXN0cm95LmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG5cbiAgICBpZiAodGhpcy5fYnVmZmVycykge1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuX2J1ZmZlcnMubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgICAgIHRoaXMuX2J1ZmZlcnNbaV0uZGVzdHJveSgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5fcHJvcGVydGllcyA9IG51bGw7XG4gICAgdGhpcy5fYnVmZmVycyA9IG51bGw7XG59O1xuIiwiXG4vKipcbiAqIEBhdXRob3IgTWF0IEdyb3Zlc1xuICpcbiAqIEJpZyB0aGFua3MgdG8gdGhlIHZlcnkgY2xldmVyIE1hdHQgRGVzTGF1cmllcnMgPG1hdHRkZXNsPiBodHRwczovL2dpdGh1Yi5jb20vbWF0dGRlc2wvXG4gKiBmb3IgY3JlYXRpbmcgdGhlIG9yaWdpbmFsIHBpeGkgdmVyc2lvbiFcbiAqIEFsc28gYSB0aGFua3MgdG8gaHR0cHM6Ly9naXRodWIuY29tL2JjaGV2YWxpZXIgZm9yIHR3ZWFraW5nIHRoZSB0aW50IGFuZCBhbHBoYSBzbyB0aGF0IHRoZXkgbm93IHNoYXJlIDQgYnl0ZXMgb24gdGhlIHZlcnRleCBidWZmZXJcbiAqXG4gKiBIZWF2aWx5IGluc3BpcmVkIGJ5IExpYkdEWCdzIFBhcnRpY2xlQnVmZmVyOlxuICogaHR0cHM6Ly9naXRodWIuY29tL2xpYmdkeC9saWJnZHgvYmxvYi9tYXN0ZXIvZ2R4L3NyYy9jb20vYmFkbG9naWMvZ2R4L2dyYXBoaWNzL2cyZC9QYXJ0aWNsZUJ1ZmZlci5qYXZhXG4gKi9cblxuLyoqXG4gKiBUaGUgcGFydGljbGUgYnVmZmVyIG1hbmFnZXMgdGhlIHN0YXRpYyBhbmQgZHluYW1pYyBidWZmZXJzIGZvciBhIHBhcnRpY2xlIGNvbnRhaW5lci5cbiAqXG4gKiBAY2xhc3NcbiAqIEBwcml2YXRlXG4gKiBAbWVtYmVyb2YgUElYSVxuICovXG5mdW5jdGlvbiBQYXJ0aWNsZUJ1ZmZlcihnbCwgcHJvcGVydGllcywgZHluYW1pY1Byb3BlcnR5RmxhZ3MsIHNpemUpXG57XG4gICAgLyoqXG4gICAgICogVGhlIGN1cnJlbnQgV2ViR0wgZHJhd2luZyBjb250ZXh0LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7V2ViR0xSZW5kZXJpbmdDb250ZXh0fVxuICAgICAqL1xuICAgIHRoaXMuZ2wgPSBnbDtcblxuICAgIC8qKlxuICAgICAqIFNpemUgb2YgYSBzaW5nbGUgdmVydGV4LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMudmVydFNpemUgPSAyO1xuXG4gICAgLyoqXG4gICAgICogU2l6ZSBvZiBhIHNpbmdsZSB2ZXJ0ZXggaW4gYnl0ZXMuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy52ZXJ0Qnl0ZVNpemUgPSB0aGlzLnZlcnRTaXplICogNDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBudW1iZXIgb2YgcGFydGljbGVzIHRoZSBidWZmZXIgY2FuIGhvbGRcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLnNpemUgPSBzaXplO1xuXG4gICAgLyoqXG4gICAgICogQSBsaXN0IG9mIHRoZSBwcm9wZXJ0aWVzIHRoYXQgYXJlIGR5bmFtaWMuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtvYmplY3RbXX1cbiAgICAgKi9cbiAgICB0aGlzLmR5bmFtaWNQcm9wZXJ0aWVzID0gW107XG5cbiAgICAvKipcbiAgICAgKiBBIGxpc3Qgb2YgdGhlIHByb3BlcnRpZXMgdGhhdCBhcmUgc3RhdGljLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7b2JqZWN0W119XG4gICAgICovXG4gICAgdGhpcy5zdGF0aWNQcm9wZXJ0aWVzID0gW107XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BlcnRpZXMubGVuZ3RoOyBpKyspXG4gICAge1xuICAgICAgICB2YXIgcHJvcGVydHkgPSBwcm9wZXJ0aWVzW2ldO1xuXG4gICAgICAgIGlmKGR5bmFtaWNQcm9wZXJ0eUZsYWdzW2ldKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmR5bmFtaWNQcm9wZXJ0aWVzLnB1c2gocHJvcGVydHkpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2VcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5zdGF0aWNQcm9wZXJ0aWVzLnB1c2gocHJvcGVydHkpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5zdGF0aWNTdHJpZGUgPSAwO1xuICAgIHRoaXMuc3RhdGljQnVmZmVyID0gbnVsbDtcbiAgICB0aGlzLnN0YXRpY0RhdGEgPSBudWxsO1xuXG4gICAgdGhpcy5keW5hbWljU3RyaWRlID0gMDtcbiAgICB0aGlzLmR5bmFtaWNCdWZmZXIgPSBudWxsO1xuICAgIHRoaXMuZHluYW1pY0RhdGEgPSBudWxsO1xuXG4gICAgdGhpcy5pbml0QnVmZmVycygpO1xuXG59XG5cblBhcnRpY2xlQnVmZmVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFBhcnRpY2xlQnVmZmVyO1xubW9kdWxlLmV4cG9ydHMgPSBQYXJ0aWNsZUJ1ZmZlcjtcblxuLyoqXG4gKiBTZXRzIHVwIHRoZSByZW5kZXJlciBjb250ZXh0IGFuZCBuZWNlc3NhcnkgYnVmZmVycy5cbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5QYXJ0aWNsZUJ1ZmZlci5wcm90b3R5cGUuaW5pdEJ1ZmZlcnMgPSBmdW5jdGlvbiAoKVxue1xuICAgIHZhciBnbCA9IHRoaXMuZ2w7XG4gICAgdmFyIGk7XG4gICAgdmFyIHByb3BlcnR5O1xuXG4gICAgdmFyIGR5bmFtaWNPZmZzZXQgPSAwO1xuICAgIHRoaXMuZHluYW1pY1N0cmlkZSA9IDA7XG5cbiAgICBmb3IgKGkgPSAwOyBpIDwgdGhpcy5keW5hbWljUHJvcGVydGllcy5sZW5ndGg7IGkrKylcbiAgICB7XG4gICAgICAgIHByb3BlcnR5ID0gdGhpcy5keW5hbWljUHJvcGVydGllc1tpXTtcblxuICAgICAgICBwcm9wZXJ0eS5vZmZzZXQgPSBkeW5hbWljT2Zmc2V0O1xuICAgICAgICBkeW5hbWljT2Zmc2V0ICs9IHByb3BlcnR5LnNpemU7XG4gICAgICAgIHRoaXMuZHluYW1pY1N0cmlkZSArPSBwcm9wZXJ0eS5zaXplO1xuICAgIH1cblxuICAgIHRoaXMuZHluYW1pY0RhdGEgPSBuZXcgRmxvYXQzMkFycmF5KCB0aGlzLnNpemUgKiB0aGlzLmR5bmFtaWNTdHJpZGUgKiA0KTtcbiAgICB0aGlzLmR5bmFtaWNCdWZmZXIgPSBnbC5jcmVhdGVCdWZmZXIoKTtcblxuICAgIGdsLmJpbmRCdWZmZXIoZ2wuQVJSQVlfQlVGRkVSLCB0aGlzLmR5bmFtaWNCdWZmZXIpO1xuICAgIGdsLmJ1ZmZlckRhdGEoZ2wuQVJSQVlfQlVGRkVSLCB0aGlzLmR5bmFtaWNEYXRhLCBnbC5EWU5BTUlDX0RSQVcpO1xuXG5cbiAgICAvLyBzdGF0aWMgLy9cbiAgICB2YXIgc3RhdGljT2Zmc2V0ID0gMDtcbiAgICB0aGlzLnN0YXRpY1N0cmlkZSA9IDA7XG5cbiAgICBmb3IgKGkgPSAwOyBpIDwgdGhpcy5zdGF0aWNQcm9wZXJ0aWVzLmxlbmd0aDsgaSsrKVxuICAgIHtcbiAgICAgICAgcHJvcGVydHkgPSB0aGlzLnN0YXRpY1Byb3BlcnRpZXNbaV07XG5cbiAgICAgICAgcHJvcGVydHkub2Zmc2V0ID0gc3RhdGljT2Zmc2V0O1xuICAgICAgICBzdGF0aWNPZmZzZXQgKz0gcHJvcGVydHkuc2l6ZTtcbiAgICAgICAgdGhpcy5zdGF0aWNTdHJpZGUgKz0gcHJvcGVydHkuc2l6ZTtcbiAgICB9XG5cbiAgICB0aGlzLnN0YXRpY0RhdGEgPSBuZXcgRmxvYXQzMkFycmF5KCB0aGlzLnNpemUgKiB0aGlzLnN0YXRpY1N0cmlkZSAqIDQpO1xuICAgIHRoaXMuc3RhdGljQnVmZmVyID0gZ2wuY3JlYXRlQnVmZmVyKCk7XG5cbiAgICBnbC5iaW5kQnVmZmVyKGdsLkFSUkFZX0JVRkZFUiwgdGhpcy5zdGF0aWNCdWZmZXIpO1xuICAgIGdsLmJ1ZmZlckRhdGEoZ2wuQVJSQVlfQlVGRkVSLCB0aGlzLnN0YXRpY0RhdGEsIGdsLkRZTkFNSUNfRFJBVyk7XG59O1xuXG4vKipcbiAqIFVwbG9hZHMgdGhlIGR5bmFtaWMgcHJvcGVydGllcy5cbiAqXG4gKi9cblBhcnRpY2xlQnVmZmVyLnByb3RvdHlwZS51cGxvYWREeW5hbWljID0gZnVuY3Rpb24oY2hpbGRyZW4sIHN0YXJ0SW5kZXgsIGFtb3VudClcbntcbiAgICB2YXIgZ2wgPSB0aGlzLmdsO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmR5bmFtaWNQcm9wZXJ0aWVzLmxlbmd0aDsgaSsrKVxuICAgIHtcbiAgICAgICAgdmFyIHByb3BlcnR5ID0gdGhpcy5keW5hbWljUHJvcGVydGllc1tpXTtcbiAgICAgICAgcHJvcGVydHkudXBsb2FkRnVuY3Rpb24oY2hpbGRyZW4sIHN0YXJ0SW5kZXgsIGFtb3VudCwgdGhpcy5keW5hbWljRGF0YSwgdGhpcy5keW5hbWljU3RyaWRlLCBwcm9wZXJ0eS5vZmZzZXQpO1xuICAgIH1cblxuICAgIGdsLmJpbmRCdWZmZXIoZ2wuQVJSQVlfQlVGRkVSLCB0aGlzLmR5bmFtaWNCdWZmZXIpO1xuICAgIGdsLmJ1ZmZlclN1YkRhdGEoZ2wuQVJSQVlfQlVGRkVSLCAwLCB0aGlzLmR5bmFtaWNEYXRhKTtcbn07XG5cbi8qKlxuICogVXBsb2FkcyB0aGUgc3RhdGljIHByb3BlcnRpZXMuXG4gKlxuICovXG5QYXJ0aWNsZUJ1ZmZlci5wcm90b3R5cGUudXBsb2FkU3RhdGljID0gZnVuY3Rpb24oY2hpbGRyZW4sIHN0YXJ0SW5kZXgsIGFtb3VudClcbntcbiAgICB2YXIgZ2wgPSB0aGlzLmdsO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLnN0YXRpY1Byb3BlcnRpZXMubGVuZ3RoOyBpKyspXG4gICAge1xuICAgICAgICB2YXIgcHJvcGVydHkgPSB0aGlzLnN0YXRpY1Byb3BlcnRpZXNbaV07XG4gICAgICAgIHByb3BlcnR5LnVwbG9hZEZ1bmN0aW9uKGNoaWxkcmVuLCBzdGFydEluZGV4LCBhbW91bnQsIHRoaXMuc3RhdGljRGF0YSwgdGhpcy5zdGF0aWNTdHJpZGUsIHByb3BlcnR5Lm9mZnNldCk7XG4gICAgfVxuXG4gICAgZ2wuYmluZEJ1ZmZlcihnbC5BUlJBWV9CVUZGRVIsIHRoaXMuc3RhdGljQnVmZmVyKTtcbiAgICBnbC5idWZmZXJTdWJEYXRhKGdsLkFSUkFZX0JVRkZFUiwgMCwgdGhpcy5zdGF0aWNEYXRhKTtcbn07XG5cbi8qKlxuICogQmluZHMgdGhlIGJ1ZmZlcnMgdG8gdGhlIEdQVVxuICpcbiAqL1xuUGFydGljbGVCdWZmZXIucHJvdG90eXBlLmJpbmQgPSBmdW5jdGlvbiAoKVxue1xuICAgIHZhciBnbCA9IHRoaXMuZ2w7XG4gICAgdmFyIGksIHByb3BlcnR5O1xuXG4gICAgZ2wuYmluZEJ1ZmZlcihnbC5BUlJBWV9CVUZGRVIsIHRoaXMuZHluYW1pY0J1ZmZlcik7XG5cbiAgICBmb3IgKGkgPSAwOyBpIDwgdGhpcy5keW5hbWljUHJvcGVydGllcy5sZW5ndGg7IGkrKylcbiAgICB7XG4gICAgICAgIHByb3BlcnR5ID0gdGhpcy5keW5hbWljUHJvcGVydGllc1tpXTtcbiAgICAgICAgZ2wudmVydGV4QXR0cmliUG9pbnRlcihwcm9wZXJ0eS5hdHRyaWJ1dGUsIHByb3BlcnR5LnNpemUsIGdsLkZMT0FULCBmYWxzZSwgdGhpcy5keW5hbWljU3RyaWRlICogNCwgcHJvcGVydHkub2Zmc2V0ICogNCk7XG4gICAgfVxuXG4gICAgZ2wuYmluZEJ1ZmZlcihnbC5BUlJBWV9CVUZGRVIsIHRoaXMuc3RhdGljQnVmZmVyKTtcblxuICAgIGZvciAoaSA9IDA7IGkgPCB0aGlzLnN0YXRpY1Byb3BlcnRpZXMubGVuZ3RoOyBpKyspXG4gICAge1xuICAgICAgICBwcm9wZXJ0eSA9IHRoaXMuc3RhdGljUHJvcGVydGllc1tpXTtcbiAgICAgICAgZ2wudmVydGV4QXR0cmliUG9pbnRlcihwcm9wZXJ0eS5hdHRyaWJ1dGUsIHByb3BlcnR5LnNpemUsIGdsLkZMT0FULCBmYWxzZSwgdGhpcy5zdGF0aWNTdHJpZGUgKiA0LCBwcm9wZXJ0eS5vZmZzZXQgKiA0KTtcbiAgICB9XG59O1xuXG4vKipcbiAqIERlc3Ryb3lzIHRoZSBQYXJ0aWNsZUJ1ZmZlci5cbiAqXG4gKi9cblBhcnRpY2xlQnVmZmVyLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLmR5bmFtaWNQcm9wZXJ0aWVzID0gbnVsbDtcbiAgICB0aGlzLmR5bmFtaWNEYXRhID0gbnVsbDtcbiAgICB0aGlzLmdsLmRlbGV0ZUJ1ZmZlcih0aGlzLmR5bmFtaWNCdWZmZXIpO1xuXG4gICAgdGhpcy5zdGF0aWNQcm9wZXJ0aWVzID0gbnVsbDtcbiAgICB0aGlzLnN0YXRpY0RhdGEgPSBudWxsO1xuICAgIHRoaXMuZ2wuZGVsZXRlQnVmZmVyKHRoaXMuc3RhdGljQnVmZmVyKTtcbn07XG4iLCJ2YXIgT2JqZWN0UmVuZGVyZXIgPSByZXF1aXJlKCcuLi8uLi9yZW5kZXJlcnMvd2ViZ2wvdXRpbHMvT2JqZWN0UmVuZGVyZXInKSxcbiAgICBXZWJHTFJlbmRlcmVyID0gcmVxdWlyZSgnLi4vLi4vcmVuZGVyZXJzL3dlYmdsL1dlYkdMUmVuZGVyZXInKSxcbiAgICBQYXJ0aWNsZVNoYWRlciA9IHJlcXVpcmUoJy4vUGFydGljbGVTaGFkZXInKSxcbiAgICBQYXJ0aWNsZUJ1ZmZlciA9IHJlcXVpcmUoJy4vUGFydGljbGVCdWZmZXInKSxcbiAgICBtYXRoICAgICAgICAgICAgPSByZXF1aXJlKCcuLi8uLi9tYXRoJyk7XG5cbi8qKlxuICogQGF1dGhvciBNYXQgR3JvdmVzXG4gKlxuICogQmlnIHRoYW5rcyB0byB0aGUgdmVyeSBjbGV2ZXIgTWF0dCBEZXNMYXVyaWVycyA8bWF0dGRlc2w+IGh0dHBzOi8vZ2l0aHViLmNvbS9tYXR0ZGVzbC9cbiAqIGZvciBjcmVhdGluZyB0aGUgb3JpZ2luYWwgcGl4aSB2ZXJzaW9uIVxuICogQWxzbyBhIHRoYW5rcyB0byBodHRwczovL2dpdGh1Yi5jb20vYmNoZXZhbGllciBmb3IgdHdlYWtpbmcgdGhlIHRpbnQgYW5kIGFscGhhIHNvIHRoYXQgdGhleSBub3cgc2hhcmUgNCBieXRlcyBvbiB0aGUgdmVydGV4IGJ1ZmZlclxuICpcbiAqIEhlYXZpbHkgaW5zcGlyZWQgYnkgTGliR0RYJ3MgUGFydGljbGVSZW5kZXJlcjpcbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS9saWJnZHgvbGliZ2R4L2Jsb2IvbWFzdGVyL2dkeC9zcmMvY29tL2JhZGxvZ2ljL2dkeC9ncmFwaGljcy9nMmQvUGFydGljbGVSZW5kZXJlci5qYXZhXG4gKi9cblxuLyoqXG4gKlxuICogQGNsYXNzXG4gKiBAcHJpdmF0ZVxuICogQG1lbWJlcm9mIFBJWElcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5XZWJHTFJlbmRlcmVyfSBUaGUgcmVuZGVyZXIgdGhpcyBzcHJpdGUgYmF0Y2ggd29ya3MgZm9yLlxuICovXG5mdW5jdGlvbiBQYXJ0aWNsZVJlbmRlcmVyKHJlbmRlcmVyKVxue1xuICAgIE9iamVjdFJlbmRlcmVyLmNhbGwodGhpcywgcmVuZGVyZXIpO1xuXG4gICAgLy8gNjU1MzUgaXMgbWF4IHZlcnRleCBpbmRleCBpbiB0aGUgaW5kZXggYnVmZmVyIChzZWUgUGFydGljbGVSZW5kZXJlcilcbiAgICAvLyBzbyBtYXggbnVtYmVyIG9mIHBhcnRpY2xlcyBpcyA2NTUzNiAvIDQgPSAxNjM4NFxuICAgIC8vIGFuZCBtYXggbnVtYmVyIG9mIGVsZW1lbnQgaW4gdGhlIGluZGV4IGJ1ZmZlciBpcyAxNjM4NCAqIDYgPSA5ODMwNFxuICAgIC8vIENyZWF0aW5nIGEgZnVsbCBpbmRleCBidWZmZXIsIG92ZXJoZWFkIGlzIDk4MzA0ICogMiA9IDE5NktvXG4gICAgdmFyIG51bUluZGljZXMgPSA5ODMwNDtcblxuICAgIC8qKlxuICAgICAqIEhvbGRzIHRoZSBpbmRpY2VzXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtVaW50MTZBcnJheX1cbiAgICAgKi9cbiAgICB0aGlzLmluZGljZXMgPSBuZXcgVWludDE2QXJyYXkobnVtSW5kaWNlcyk7XG5cbiAgICBmb3IgKHZhciBpPTAsIGo9MDsgaSA8IG51bUluZGljZXM7IGkgKz0gNiwgaiArPSA0KVxuICAgIHtcbiAgICAgICAgdGhpcy5pbmRpY2VzW2kgKyAwXSA9IGogKyAwO1xuICAgICAgICB0aGlzLmluZGljZXNbaSArIDFdID0gaiArIDE7XG4gICAgICAgIHRoaXMuaW5kaWNlc1tpICsgMl0gPSBqICsgMjtcbiAgICAgICAgdGhpcy5pbmRpY2VzW2kgKyAzXSA9IGogKyAwO1xuICAgICAgICB0aGlzLmluZGljZXNbaSArIDRdID0gaiArIDI7XG4gICAgICAgIHRoaXMuaW5kaWNlc1tpICsgNV0gPSBqICsgMztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGUgZGVmYXVsdCBzaGFkZXIgdGhhdCBpcyB1c2VkIGlmIGEgc3ByaXRlIGRvZXNuJ3QgaGF2ZSBhIG1vcmUgc3BlY2lmaWMgb25lLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5TaGFkZXJ9XG4gICAgICovXG4gICAgdGhpcy5zaGFkZXIgPSBudWxsO1xuXG4gICAgdGhpcy5pbmRleEJ1ZmZlciA9IG51bGw7XG5cbiAgICB0aGlzLnByb3BlcnRpZXMgPSBudWxsO1xuXG4gICAgdGhpcy50ZW1wTWF0cml4ID0gbmV3IG1hdGguTWF0cml4KCk7XG59XG5cblBhcnRpY2xlUmVuZGVyZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShPYmplY3RSZW5kZXJlci5wcm90b3R5cGUpO1xuUGFydGljbGVSZW5kZXJlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBQYXJ0aWNsZVJlbmRlcmVyO1xubW9kdWxlLmV4cG9ydHMgPSBQYXJ0aWNsZVJlbmRlcmVyO1xuXG5XZWJHTFJlbmRlcmVyLnJlZ2lzdGVyUGx1Z2luKCdwYXJ0aWNsZScsIFBhcnRpY2xlUmVuZGVyZXIpO1xuXG4vKipcbiAqIFdoZW4gdGhlcmUgaXMgYSBXZWJHTCBjb250ZXh0IGNoYW5nZVxuICpcbiAqIEBwcml2YXRlXG4gKi9cblBhcnRpY2xlUmVuZGVyZXIucHJvdG90eXBlLm9uQ29udGV4dENoYW5nZSA9IGZ1bmN0aW9uICgpXG57XG4gICAgdmFyIGdsID0gdGhpcy5yZW5kZXJlci5nbDtcblxuICAgIC8vIHNldHVwIGRlZmF1bHQgc2hhZGVyXG4gICAgdGhpcy5zaGFkZXIgPSBuZXcgUGFydGljbGVTaGFkZXIodGhpcy5yZW5kZXJlci5zaGFkZXJNYW5hZ2VyKTtcblxuICAgIHRoaXMuaW5kZXhCdWZmZXIgPSBnbC5jcmVhdGVCdWZmZXIoKTtcblxuICAgIC8vIDY1NTM1IGlzIG1heCBpbmRleCwgc28gNjU1MzUgLyA2ID0gMTA5MjIuXG5cbiAgICAvL3VwbG9hZCB0aGUgaW5kZXggZGF0YVxuICAgIGdsLmJpbmRCdWZmZXIoZ2wuRUxFTUVOVF9BUlJBWV9CVUZGRVIsIHRoaXMuaW5kZXhCdWZmZXIpO1xuICAgIGdsLmJ1ZmZlckRhdGEoZ2wuRUxFTUVOVF9BUlJBWV9CVUZGRVIsIHRoaXMuaW5kaWNlcywgZ2wuU1RBVElDX0RSQVcpO1xuXG4gICAgdGhpcy5wcm9wZXJ0aWVzID0gW1xuICAgICAgICAvLyB2ZXJ0aWNlc0RhdGFcbiAgICAgICAge1xuICAgICAgICAgICAgYXR0cmlidXRlOnRoaXMuc2hhZGVyLmF0dHJpYnV0ZXMuYVZlcnRleFBvc2l0aW9uLFxuICAgICAgICAgICAgc2l6ZToyLFxuICAgICAgICAgICAgdXBsb2FkRnVuY3Rpb246dGhpcy51cGxvYWRWZXJ0aWNlcyxcbiAgICAgICAgICAgIG9mZnNldDowXG4gICAgICAgIH0sXG4gICAgICAgIC8vIHBvc2l0aW9uRGF0YVxuICAgICAgICB7XG4gICAgICAgICAgICBhdHRyaWJ1dGU6dGhpcy5zaGFkZXIuYXR0cmlidXRlcy5hUG9zaXRpb25Db29yZCxcbiAgICAgICAgICAgIHNpemU6MixcbiAgICAgICAgICAgIHVwbG9hZEZ1bmN0aW9uOnRoaXMudXBsb2FkUG9zaXRpb24sXG4gICAgICAgICAgICBvZmZzZXQ6MFxuICAgICAgICB9LFxuICAgICAgICAvLyByb3RhdGlvbkRhdGFcbiAgICAgICAge1xuICAgICAgICAgICAgYXR0cmlidXRlOnRoaXMuc2hhZGVyLmF0dHJpYnV0ZXMuYVJvdGF0aW9uLFxuICAgICAgICAgICAgc2l6ZToxLFxuICAgICAgICAgICAgdXBsb2FkRnVuY3Rpb246dGhpcy51cGxvYWRSb3RhdGlvbixcbiAgICAgICAgICAgIG9mZnNldDowXG4gICAgICAgIH0sXG4gICAgICAgIC8vIHV2c0RhdGFcbiAgICAgICAge1xuICAgICAgICAgICAgYXR0cmlidXRlOnRoaXMuc2hhZGVyLmF0dHJpYnV0ZXMuYVRleHR1cmVDb29yZCxcbiAgICAgICAgICAgIHNpemU6MixcbiAgICAgICAgICAgIHVwbG9hZEZ1bmN0aW9uOnRoaXMudXBsb2FkVXZzLFxuICAgICAgICAgICAgb2Zmc2V0OjBcbiAgICAgICAgfSxcbiAgICAgICAgLy8gYWxwaGFEYXRhXG4gICAgICAgIHtcbiAgICAgICAgICAgIGF0dHJpYnV0ZTp0aGlzLnNoYWRlci5hdHRyaWJ1dGVzLmFDb2xvcixcbiAgICAgICAgICAgIHNpemU6MSxcbiAgICAgICAgICAgIHVwbG9hZEZ1bmN0aW9uOnRoaXMudXBsb2FkQWxwaGEsXG4gICAgICAgICAgICBvZmZzZXQ6MFxuICAgICAgICB9XG4gICAgXTtcbn07XG5cbi8qKlxuICogU3RhcnRzIGEgbmV3IHBhcnRpY2xlIGJhdGNoLlxuICpcbiAqL1xuUGFydGljbGVSZW5kZXJlci5wcm90b3R5cGUuc3RhcnQgPSBmdW5jdGlvbiAoKVxue1xuICAgIHZhciBnbCA9IHRoaXMucmVuZGVyZXIuZ2w7XG5cbiAgICAvLyBiaW5kIHRoZSBtYWluIHRleHR1cmVcbiAgICBnbC5hY3RpdmVUZXh0dXJlKGdsLlRFWFRVUkUwKTtcblxuICAgIC8vIGJpbmQgdGhlIGJ1ZmZlcnNcblxuICAgIGdsLmJpbmRCdWZmZXIoZ2wuRUxFTUVOVF9BUlJBWV9CVUZGRVIsIHRoaXMuaW5kZXhCdWZmZXIpO1xuXG4gICAgdmFyIHNoYWRlciA9IHRoaXMuc2hhZGVyO1xuXG4gICAgdGhpcy5yZW5kZXJlci5zaGFkZXJNYW5hZ2VyLnNldFNoYWRlcihzaGFkZXIpO1xufTtcblxuXG4vKipcbiAqIFJlbmRlcnMgdGhlIHBhcnRpY2xlIGNvbnRhaW5lciBvYmplY3QuXG4gKlxuICogQHBhcmFtIGNvbnRhaW5lciB7UElYSS5QYXJ0aWNsZUNvbnRhaW5lcn0gVGhlIGNvbnRhaW5lciB0byByZW5kZXIgdXNpbmcgdGhpcyBQYXJ0aWNsZVJlbmRlcmVyXG4gKi9cblBhcnRpY2xlUmVuZGVyZXIucHJvdG90eXBlLnJlbmRlciA9IGZ1bmN0aW9uIChjb250YWluZXIpXG57XG4gICAgdmFyIGNoaWxkcmVuID0gY29udGFpbmVyLmNoaWxkcmVuLFxuICAgICAgICB0b3RhbENoaWxkcmVuID0gY2hpbGRyZW4ubGVuZ3RoLFxuICAgICAgICBtYXhTaXplID0gY29udGFpbmVyLl9tYXhTaXplLFxuICAgICAgICBiYXRjaFNpemUgPSBjb250YWluZXIuX2JhdGNoU2l6ZTtcblxuICAgIGlmKHRvdGFsQ2hpbGRyZW4gPT09IDApXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIGVsc2UgaWYodG90YWxDaGlsZHJlbiA+IG1heFNpemUpXG4gICAge1xuICAgICAgICB0b3RhbENoaWxkcmVuID0gbWF4U2l6ZTtcbiAgICB9XG5cbiAgICBpZighY29udGFpbmVyLl9idWZmZXJzKVxuICAgIHtcbiAgICAgICAgY29udGFpbmVyLl9idWZmZXJzID0gdGhpcy5nZW5lcmF0ZUJ1ZmZlcnMoIGNvbnRhaW5lciApO1xuICAgIH1cblxuICAgIC8vIGlmIHRoZSB1dnMgaGF2ZSBub3QgdXBkYXRlZCB0aGVuIG5vIHBvaW50IHJlbmRlcmluZyBqdXN0IHlldCFcbiAgICB0aGlzLnJlbmRlcmVyLmJsZW5kTW9kZU1hbmFnZXIuc2V0QmxlbmRNb2RlKGNvbnRhaW5lci5ibGVuZE1vZGUpO1xuXG4gICAgdmFyIGdsID0gdGhpcy5yZW5kZXJlci5nbDtcblxuICAgIHZhciBtID0gIGNvbnRhaW5lci53b3JsZFRyYW5zZm9ybS5jb3B5KCB0aGlzLnRlbXBNYXRyaXggKTtcbiAgICBtLnByZXBlbmQoIHRoaXMucmVuZGVyZXIuY3VycmVudFJlbmRlclRhcmdldC5wcm9qZWN0aW9uTWF0cml4ICk7XG4gICAgZ2wudW5pZm9ybU1hdHJpeDNmdih0aGlzLnNoYWRlci51bmlmb3Jtcy5wcm9qZWN0aW9uTWF0cml4Ll9sb2NhdGlvbiwgZmFsc2UsIG0udG9BcnJheSh0cnVlKSk7XG4gICAgZ2wudW5pZm9ybTFmKHRoaXMuc2hhZGVyLnVuaWZvcm1zLnVBbHBoYS5fbG9jYXRpb24sIGNvbnRhaW5lci53b3JsZEFscGhhKTtcblxuXG4gICAgLy8gbWFrZSBzdXJlIHRoZSB0ZXh0dXJlIGlzIGJvdW5kLi5cbiAgICB2YXIgYmFzZVRleHR1cmUgPSBjaGlsZHJlblswXS5fdGV4dHVyZS5iYXNlVGV4dHVyZTtcblxuICAgIGlmICghYmFzZVRleHR1cmUuX2dsVGV4dHVyZXNbZ2wuaWRdKVxuICAgIHtcbiAgICAgICAgLy8gaWYgdGhlIHRleHR1cmUgaGFzIG5vdCB1cGRhdGVkIHRoZW4gbGV0cyBub3QgdXBsb2FkIGFueSBzdGF0aWMgcHJvcGVydGllc1xuICAgICAgICBpZighdGhpcy5yZW5kZXJlci51cGRhdGVUZXh0dXJlKGJhc2VUZXh0dXJlKSlcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYoIWNvbnRhaW5lci5fcHJvcGVydGllc1swXSB8fCAhY29udGFpbmVyLl9wcm9wZXJ0aWVzWzNdKVxuICAgICAgICB7XG4gICAgICAgICAgICBjb250YWluZXIuX2J1ZmZlclRvVXBkYXRlID0gMDtcbiAgICAgICAgfVxuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICBnbC5iaW5kVGV4dHVyZShnbC5URVhUVVJFXzJELCBiYXNlVGV4dHVyZS5fZ2xUZXh0dXJlc1tnbC5pZF0pO1xuICAgIH1cblxuICAgIC8vIG5vdyBsZXRzIHVwbG9hZCBhbmQgcmVuZGVyIHRoZSBidWZmZXJzLi5cbiAgICBmb3IgKHZhciBpID0gMCwgaiA9IDA7IGkgPCB0b3RhbENoaWxkcmVuOyBpICs9IGJhdGNoU2l6ZSwgaiArPSAxKVxuICAgIHtcbiAgICAgICAgdmFyIGFtb3VudCA9ICggdG90YWxDaGlsZHJlbiAtIGkpO1xuICAgICAgICBpZihhbW91bnQgPiBiYXRjaFNpemUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGFtb3VudCA9IGJhdGNoU2l6ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBidWZmZXIgPSBjb250YWluZXIuX2J1ZmZlcnNbal07XG5cbiAgICAgICAgLy8gd2UgYWx3YXlzIHVwbG9hZCB0aGUgZHluYW1pY1xuICAgICAgICBidWZmZXIudXBsb2FkRHluYW1pYyhjaGlsZHJlbiwgaSwgYW1vdW50KTtcblxuICAgICAgICAvLyB3ZSBvbmx5IHVwbG9hZCB0aGUgc3RhdGljIGNvbnRlbnQgd2hlbiB3ZSBoYXZlIHRvIVxuICAgICAgICBpZihjb250YWluZXIuX2J1ZmZlclRvVXBkYXRlID09PSBqKVxuICAgICAgICB7XG4gICAgICAgICAgICBidWZmZXIudXBsb2FkU3RhdGljKGNoaWxkcmVuLCBpLCBhbW91bnQpO1xuICAgICAgICAgICAgY29udGFpbmVyLl9idWZmZXJUb1VwZGF0ZSA9IGogKyAxO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gYmluZCB0aGUgYnVmZmVyXG4gICAgICAgIGJ1ZmZlci5iaW5kKCB0aGlzLnNoYWRlciApO1xuXG4gICAgICAgICAvLyBub3cgZHJhdyB0aG9zZSBzdWNrYXMhXG4gICAgICAgIGdsLmRyYXdFbGVtZW50cyhnbC5UUklBTkdMRVMsIGFtb3VudCAqIDYsIGdsLlVOU0lHTkVEX1NIT1JULCAwKTtcbiAgICAgICAgdGhpcy5yZW5kZXJlci5kcmF3Q291bnQrKztcbiAgICB9XG59O1xuXG4vKipcbiAqIENyZWF0ZXMgb25lIHBhcnRpY2xlIGJ1ZmZlciBmb3IgZWFjaCBjaGlsZCBpbiB0aGUgY29udGFpbmVyIHdlIHdhbnQgdG8gcmVuZGVyIGFuZCB1cGRhdGVzIGludGVybmFsIHByb3BlcnRpZXNcbiAqXG4gKiBAcGFyYW0gY29udGFpbmVyIHtQSVhJLlBhcnRpY2xlQ29udGFpbmVyfSBUaGUgY29udGFpbmVyIHRvIHJlbmRlciB1c2luZyB0aGlzIFBhcnRpY2xlUmVuZGVyZXJcbiAqL1xuUGFydGljbGVSZW5kZXJlci5wcm90b3R5cGUuZ2VuZXJhdGVCdWZmZXJzID0gZnVuY3Rpb24gKGNvbnRhaW5lcilcbntcbiAgICB2YXIgZ2wgPSB0aGlzLnJlbmRlcmVyLmdsLFxuICAgICAgICBidWZmZXJzID0gW10sXG4gICAgICAgIHNpemUgPSBjb250YWluZXIuX21heFNpemUsXG4gICAgICAgIGJhdGNoU2l6ZSA9IGNvbnRhaW5lci5fYmF0Y2hTaXplLFxuICAgICAgICBkeW5hbWljUHJvcGVydHlGbGFncyA9IGNvbnRhaW5lci5fcHJvcGVydGllcyxcbiAgICAgICAgaTtcblxuICAgIGZvciAoaSA9IDA7IGkgPCBzaXplOyBpICs9IGJhdGNoU2l6ZSlcbiAgICB7XG4gICAgICAgIGJ1ZmZlcnMucHVzaChuZXcgUGFydGljbGVCdWZmZXIoZ2wsIHRoaXMucHJvcGVydGllcywgZHluYW1pY1Byb3BlcnR5RmxhZ3MsIGJhdGNoU2l6ZSkpO1xuICAgIH1cblxuICAgIHJldHVybiBidWZmZXJzO1xufTtcblxuLyoqXG4gKiBVcGxvYWRzIHRoZSB2ZXJ0aWNpZXMuXG4gKlxuICogQHBhcmFtIGNoaWxkcmVuIHtQSVhJLkRpc3BsYXlPYmplY3RbXX0gdGhlIGFycmF5IG9mIGRpc3BsYXkgb2JqZWN0cyB0byByZW5kZXJcbiAqIEBwYXJhbSBzdGFydEluZGV4IHtudW1iZXJ9IHRoZSBpbmRleCB0byBzdGFydCBmcm9tIGluIHRoZSBjaGlsZHJlbiBhcnJheVxuICogQHBhcmFtIGFtb3VudCB7bnVtYmVyfSB0aGUgYW1vdW50IG9mIGNoaWxkcmVuIHRoYXQgd2lsbCBoYXZlIHRoZWlyIHZlcnRpY2VzIHVwbG9hZGVkXG4gKiBAcGFyYW0gYXJyYXkge251bWJlcltdfVxuICogQHBhcmFtIHN0cmlkZSB7bnVtYmVyfVxuICogQHBhcmFtIG9mZnNldCB7bnVtYmVyfVxuICovXG5QYXJ0aWNsZVJlbmRlcmVyLnByb3RvdHlwZS51cGxvYWRWZXJ0aWNlcyA9IGZ1bmN0aW9uIChjaGlsZHJlbiwgc3RhcnRJbmRleCwgYW1vdW50LCBhcnJheSwgc3RyaWRlLCBvZmZzZXQpXG57XG4gICAgdmFyIHNwcml0ZSxcbiAgICAgICAgdGV4dHVyZSxcbiAgICAgICAgdHJpbSxcbiAgICAgICAgc3gsXG4gICAgICAgIHN5LFxuICAgICAgICB3MCwgdzEsIGgwLCBoMTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYW1vdW50OyBpKyspIHtcblxuICAgICAgICBzcHJpdGUgPSBjaGlsZHJlbltzdGFydEluZGV4ICsgaV07XG4gICAgICAgIHRleHR1cmUgPSBzcHJpdGUuX3RleHR1cmU7XG4gICAgICAgIHN4ID0gc3ByaXRlLnNjYWxlLng7XG4gICAgICAgIHN5ID0gc3ByaXRlLnNjYWxlLnk7XG5cbiAgICAgICAgaWYgKHRleHR1cmUudHJpbSlcbiAgICAgICAge1xuICAgICAgICAgICAgLy8gaWYgdGhlIHNwcml0ZSBpcyB0cmltbWVkIHRoZW4gd2UgbmVlZCB0byBhZGQgdGhlIGV4dHJhIHNwYWNlIGJlZm9yZSB0cmFuc2Zvcm1pbmcgdGhlIHNwcml0ZSBjb29yZHMuLlxuICAgICAgICAgICAgdHJpbSA9IHRleHR1cmUudHJpbTtcblxuICAgICAgICAgICAgdzEgPSB0cmltLnggLSBzcHJpdGUuYW5jaG9yLnggKiB0cmltLndpZHRoO1xuICAgICAgICAgICAgdzAgPSB3MSArIHRleHR1cmUuY3JvcC53aWR0aDtcblxuICAgICAgICAgICAgaDEgPSB0cmltLnkgLSBzcHJpdGUuYW5jaG9yLnkgKiB0cmltLmhlaWdodDtcbiAgICAgICAgICAgIGgwID0gaDEgKyB0ZXh0dXJlLmNyb3AuaGVpZ2h0O1xuICAgICAgICB9XG4gICAgICAgIGVsc2VcbiAgICAgICAge1xuICAgICAgICAgICAgdzAgPSAodGV4dHVyZS5fZnJhbWUud2lkdGggKSAqICgxLXNwcml0ZS5hbmNob3IueCk7XG4gICAgICAgICAgICB3MSA9ICh0ZXh0dXJlLl9mcmFtZS53aWR0aCApICogLXNwcml0ZS5hbmNob3IueDtcblxuICAgICAgICAgICAgaDAgPSB0ZXh0dXJlLl9mcmFtZS5oZWlnaHQgKiAoMS1zcHJpdGUuYW5jaG9yLnkpO1xuICAgICAgICAgICAgaDEgPSB0ZXh0dXJlLl9mcmFtZS5oZWlnaHQgKiAtc3ByaXRlLmFuY2hvci55O1xuICAgICAgICB9XG5cbiAgICAgICAgYXJyYXlbb2Zmc2V0XSA9IHcxICogc3g7XG4gICAgICAgIGFycmF5W29mZnNldCArIDFdID0gaDEgKiBzeTtcblxuICAgICAgICBhcnJheVtvZmZzZXQgKyBzdHJpZGVdID0gdzAgKiBzeDtcbiAgICAgICAgYXJyYXlbb2Zmc2V0ICsgc3RyaWRlICsgMV0gPSBoMSAqIHN5O1xuXG4gICAgICAgIGFycmF5W29mZnNldCArIHN0cmlkZSAqIDJdID0gdzAgKiBzeDtcbiAgICAgICAgYXJyYXlbb2Zmc2V0ICsgc3RyaWRlICogMiArIDFdID0gaDAgKiBzeTtcblxuICAgICAgICBhcnJheVtvZmZzZXQgKyBzdHJpZGUgKiAzXSA9IHcxICogc3g7XG4gICAgICAgIGFycmF5W29mZnNldCArIHN0cmlkZSAqIDMgKyAxXSA9IGgwICogc3k7XG5cbiAgICAgICAgb2Zmc2V0ICs9IHN0cmlkZSAqIDQ7XG4gICAgfVxuXG59O1xuXG4vKipcbiAqXG4gKiBAcGFyYW0gY2hpbGRyZW4ge1BJWEkuRGlzcGxheU9iamVjdFtdfSB0aGUgYXJyYXkgb2YgZGlzcGxheSBvYmplY3RzIHRvIHJlbmRlclxuICogQHBhcmFtIHN0YXJ0SW5kZXgge251bWJlcn0gdGhlIGluZGV4IHRvIHN0YXJ0IGZyb20gaW4gdGhlIGNoaWxkcmVuIGFycmF5XG4gKiBAcGFyYW0gYW1vdW50IHtudW1iZXJ9IHRoZSBhbW91bnQgb2YgY2hpbGRyZW4gdGhhdCB3aWxsIGhhdmUgdGhlaXIgcG9zaXRpb25zIHVwbG9hZGVkXG4gKiBAcGFyYW0gYXJyYXkge251bWJlcltdfVxuICogQHBhcmFtIHN0cmlkZSB7bnVtYmVyfVxuICogQHBhcmFtIG9mZnNldCB7bnVtYmVyfVxuICovXG5QYXJ0aWNsZVJlbmRlcmVyLnByb3RvdHlwZS51cGxvYWRQb3NpdGlvbiA9IGZ1bmN0aW9uIChjaGlsZHJlbixzdGFydEluZGV4LCBhbW91bnQsIGFycmF5LCBzdHJpZGUsIG9mZnNldClcbntcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFtb3VudDsgaSsrKVxuICAgIHtcbiAgICAgICAgdmFyIHNwcml0ZVBvc2l0aW9uID0gY2hpbGRyZW5bc3RhcnRJbmRleCArIGldLnBvc2l0aW9uO1xuXG4gICAgICAgIGFycmF5W29mZnNldF0gPSBzcHJpdGVQb3NpdGlvbi54O1xuICAgICAgICBhcnJheVtvZmZzZXQgKyAxXSA9IHNwcml0ZVBvc2l0aW9uLnk7XG5cbiAgICAgICAgYXJyYXlbb2Zmc2V0ICsgc3RyaWRlXSA9IHNwcml0ZVBvc2l0aW9uLng7XG4gICAgICAgIGFycmF5W29mZnNldCArIHN0cmlkZSArIDFdID0gc3ByaXRlUG9zaXRpb24ueTtcblxuICAgICAgICBhcnJheVtvZmZzZXQgKyBzdHJpZGUgKiAyXSA9IHNwcml0ZVBvc2l0aW9uLng7XG4gICAgICAgIGFycmF5W29mZnNldCArIHN0cmlkZSAqIDIgKyAxXSA9IHNwcml0ZVBvc2l0aW9uLnk7XG5cbiAgICAgICAgYXJyYXlbb2Zmc2V0ICsgc3RyaWRlICogM10gPSBzcHJpdGVQb3NpdGlvbi54O1xuICAgICAgICBhcnJheVtvZmZzZXQgKyBzdHJpZGUgKiAzICsgMV0gPSBzcHJpdGVQb3NpdGlvbi55O1xuXG4gICAgICAgIG9mZnNldCArPSBzdHJpZGUgKiA0O1xuICAgIH1cblxufTtcblxuLyoqXG4gKlxuICogQHBhcmFtIGNoaWxkcmVuIHtQSVhJLkRpc3BsYXlPYmplY3RbXX0gdGhlIGFycmF5IG9mIGRpc3BsYXkgb2JqZWN0cyB0byByZW5kZXJcbiAqIEBwYXJhbSBzdGFydEluZGV4IHtudW1iZXJ9IHRoZSBpbmRleCB0byBzdGFydCBmcm9tIGluIHRoZSBjaGlsZHJlbiBhcnJheVxuICogQHBhcmFtIGFtb3VudCB7bnVtYmVyfSB0aGUgYW1vdW50IG9mIGNoaWxkcmVuIHRoYXQgd2lsbCBoYXZlIHRoZWlyIHJvdGF0aW9uIHVwbG9hZGVkXG4gKiBAcGFyYW0gYXJyYXkge251bWJlcltdfVxuICogQHBhcmFtIHN0cmlkZSB7bnVtYmVyfVxuICogQHBhcmFtIG9mZnNldCB7bnVtYmVyfVxuICovXG5QYXJ0aWNsZVJlbmRlcmVyLnByb3RvdHlwZS51cGxvYWRSb3RhdGlvbiA9IGZ1bmN0aW9uIChjaGlsZHJlbixzdGFydEluZGV4LCBhbW91bnQsIGFycmF5LCBzdHJpZGUsIG9mZnNldClcbntcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFtb3VudDsgaSsrKVxuICAgIHtcbiAgICAgICAgdmFyIHNwcml0ZVJvdGF0aW9uID0gY2hpbGRyZW5bc3RhcnRJbmRleCArIGldLnJvdGF0aW9uO1xuXG5cbiAgICAgICAgYXJyYXlbb2Zmc2V0XSA9IHNwcml0ZVJvdGF0aW9uO1xuICAgICAgICBhcnJheVtvZmZzZXQgKyBzdHJpZGVdID0gc3ByaXRlUm90YXRpb247XG4gICAgICAgIGFycmF5W29mZnNldCArIHN0cmlkZSAqIDJdID0gc3ByaXRlUm90YXRpb247XG4gICAgICAgIGFycmF5W29mZnNldCArIHN0cmlkZSAqIDNdID0gc3ByaXRlUm90YXRpb247XG5cbiAgICAgICAgb2Zmc2V0ICs9IHN0cmlkZSAqIDQ7XG4gICAgfVxufTtcblxuLyoqXG4gKlxuICogQHBhcmFtIGNoaWxkcmVuIHtQSVhJLkRpc3BsYXlPYmplY3RbXX0gdGhlIGFycmF5IG9mIGRpc3BsYXkgb2JqZWN0cyB0byByZW5kZXJcbiAqIEBwYXJhbSBzdGFydEluZGV4IHtudW1iZXJ9IHRoZSBpbmRleCB0byBzdGFydCBmcm9tIGluIHRoZSBjaGlsZHJlbiBhcnJheVxuICogQHBhcmFtIGFtb3VudCB7bnVtYmVyfSB0aGUgYW1vdW50IG9mIGNoaWxkcmVuIHRoYXQgd2lsbCBoYXZlIHRoZWlyIFV2cyB1cGxvYWRlZFxuICogQHBhcmFtIGFycmF5IHtudW1iZXJbXX1cbiAqIEBwYXJhbSBzdHJpZGUge251bWJlcn1cbiAqIEBwYXJhbSBvZmZzZXQge251bWJlcn1cbiAqL1xuUGFydGljbGVSZW5kZXJlci5wcm90b3R5cGUudXBsb2FkVXZzID0gZnVuY3Rpb24gKGNoaWxkcmVuLHN0YXJ0SW5kZXgsIGFtb3VudCwgYXJyYXksIHN0cmlkZSwgb2Zmc2V0KVxue1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYW1vdW50OyBpKyspXG4gICAge1xuICAgICAgICB2YXIgdGV4dHVyZVV2cyA9IGNoaWxkcmVuW3N0YXJ0SW5kZXggKyBpXS5fdGV4dHVyZS5fdXZzO1xuXG4gICAgICAgIGlmICh0ZXh0dXJlVXZzKVxuICAgICAgICB7XG4gICAgICAgICAgICBhcnJheVtvZmZzZXRdID0gdGV4dHVyZVV2cy54MDtcbiAgICAgICAgICAgIGFycmF5W29mZnNldCArIDFdID0gdGV4dHVyZVV2cy55MDtcblxuICAgICAgICAgICAgYXJyYXlbb2Zmc2V0ICsgc3RyaWRlXSA9IHRleHR1cmVVdnMueDE7XG4gICAgICAgICAgICBhcnJheVtvZmZzZXQgKyBzdHJpZGUgKyAxXSA9IHRleHR1cmVVdnMueTE7XG5cbiAgICAgICAgICAgIGFycmF5W29mZnNldCArIHN0cmlkZSAqIDJdID0gdGV4dHVyZVV2cy54MjtcbiAgICAgICAgICAgIGFycmF5W29mZnNldCArIHN0cmlkZSAqIDIgKyAxXSA9IHRleHR1cmVVdnMueTI7XG5cbiAgICAgICAgICAgIGFycmF5W29mZnNldCArIHN0cmlkZSAqIDNdID0gdGV4dHVyZVV2cy54MztcbiAgICAgICAgICAgIGFycmF5W29mZnNldCArIHN0cmlkZSAqIDMgKyAxXSA9IHRleHR1cmVVdnMueTM7XG5cbiAgICAgICAgICAgIG9mZnNldCArPSBzdHJpZGUgKiA0O1xuICAgICAgICB9XG4gICAgICAgIGVsc2VcbiAgICAgICAge1xuICAgICAgICAgICAgLy9UT0RPIHlvdSBrbm93IHRoaXMgY2FuIGJlIGVhc2llciFcbiAgICAgICAgICAgIGFycmF5W29mZnNldF0gPSAwO1xuICAgICAgICAgICAgYXJyYXlbb2Zmc2V0ICsgMV0gPSAwO1xuXG4gICAgICAgICAgICBhcnJheVtvZmZzZXQgKyBzdHJpZGVdID0gMDtcbiAgICAgICAgICAgIGFycmF5W29mZnNldCArIHN0cmlkZSArIDFdID0gMDtcblxuICAgICAgICAgICAgYXJyYXlbb2Zmc2V0ICsgc3RyaWRlICogMl0gPSAwO1xuICAgICAgICAgICAgYXJyYXlbb2Zmc2V0ICsgc3RyaWRlICogMiArIDFdID0gMDtcblxuICAgICAgICAgICAgYXJyYXlbb2Zmc2V0ICsgc3RyaWRlICogM10gPSAwO1xuICAgICAgICAgICAgYXJyYXlbb2Zmc2V0ICsgc3RyaWRlICogMyArIDFdID0gMDtcblxuICAgICAgICAgICAgb2Zmc2V0ICs9IHN0cmlkZSAqIDQ7XG4gICAgICAgIH1cbiAgICB9XG59O1xuXG4vKipcbiAqXG4gKiBAcGFyYW0gY2hpbGRyZW4ge1BJWEkuRGlzcGxheU9iamVjdFtdfSB0aGUgYXJyYXkgb2YgZGlzcGxheSBvYmplY3RzIHRvIHJlbmRlclxuICogQHBhcmFtIHN0YXJ0SW5kZXgge251bWJlcn0gdGhlIGluZGV4IHRvIHN0YXJ0IGZyb20gaW4gdGhlIGNoaWxkcmVuIGFycmF5XG4gKiBAcGFyYW0gYW1vdW50IHtudW1iZXJ9IHRoZSBhbW91bnQgb2YgY2hpbGRyZW4gdGhhdCB3aWxsIGhhdmUgdGhlaXIgYWxwaGEgdXBsb2FkZWRcbiAqIEBwYXJhbSBhcnJheSB7bnVtYmVyW119XG4gKiBAcGFyYW0gc3RyaWRlIHtudW1iZXJ9XG4gKiBAcGFyYW0gb2Zmc2V0IHtudW1iZXJ9XG4gKi9cblBhcnRpY2xlUmVuZGVyZXIucHJvdG90eXBlLnVwbG9hZEFscGhhID0gZnVuY3Rpb24gKGNoaWxkcmVuLHN0YXJ0SW5kZXgsIGFtb3VudCwgYXJyYXksIHN0cmlkZSwgb2Zmc2V0KVxue1xuICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFtb3VudDsgaSsrKVxuICAgICB7XG4gICAgICAgIHZhciBzcHJpdGVBbHBoYSA9IGNoaWxkcmVuW3N0YXJ0SW5kZXggKyBpXS5hbHBoYTtcblxuICAgICAgICBhcnJheVtvZmZzZXRdID0gc3ByaXRlQWxwaGE7XG4gICAgICAgIGFycmF5W29mZnNldCArIHN0cmlkZV0gPSBzcHJpdGVBbHBoYTtcbiAgICAgICAgYXJyYXlbb2Zmc2V0ICsgc3RyaWRlICogMl0gPSBzcHJpdGVBbHBoYTtcbiAgICAgICAgYXJyYXlbb2Zmc2V0ICsgc3RyaWRlICogM10gPSBzcHJpdGVBbHBoYTtcblxuICAgICAgICBvZmZzZXQgKz0gc3RyaWRlICogNDtcbiAgICB9XG59O1xuXG5cbi8qKlxuICogRGVzdHJveXMgdGhlIFBhcnRpY2xlUmVuZGVyZXIuXG4gKlxuICovXG5QYXJ0aWNsZVJlbmRlcmVyLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKClcbntcbiAgICBpZiAodGhpcy5yZW5kZXJlci5nbCkge1xuICAgICAgICB0aGlzLnJlbmRlcmVyLmdsLmRlbGV0ZUJ1ZmZlcih0aGlzLmluZGV4QnVmZmVyKTtcbiAgICB9XG5cbiAgICBPYmplY3RSZW5kZXJlci5wcm90b3R5cGUuZGVzdHJveS5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuXG4gICAgdGhpcy5zaGFkZXIuZGVzdHJveSgpO1xuXG4gICAgdGhpcy5pbmRpY2VzID0gbnVsbDtcbiAgICB0aGlzLnRlbXBNYXRyaXggPSBudWxsO1xufTtcbiIsInZhciBUZXh0dXJlU2hhZGVyID0gcmVxdWlyZSgnLi4vLi4vcmVuZGVyZXJzL3dlYmdsL3NoYWRlcnMvVGV4dHVyZVNoYWRlcicpO1xuXG4vKipcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5UZXh0dXJlU2hhZGVyXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIHNoYWRlck1hbmFnZXIge1NoYWRlck1hbmFnZXJ9IFRoZSB3ZWJnbCBzaGFkZXIgbWFuYWdlciB0aGlzIHNoYWRlciB3b3JrcyBmb3IuXG4gKi9cbmZ1bmN0aW9uIFBhcnRpY2xlU2hhZGVyKHNoYWRlck1hbmFnZXIpXG57XG4gICAgVGV4dHVyZVNoYWRlci5jYWxsKHRoaXMsXG4gICAgICAgIHNoYWRlck1hbmFnZXIsXG4gICAgICAgIC8vIHZlcnRleCBzaGFkZXJcbiAgICAgICAgW1xuICAgICAgICAgICAgJ2F0dHJpYnV0ZSB2ZWMyIGFWZXJ0ZXhQb3NpdGlvbjsnLFxuICAgICAgICAgICAgJ2F0dHJpYnV0ZSB2ZWMyIGFUZXh0dXJlQ29vcmQ7JyxcbiAgICAgICAgICAgICdhdHRyaWJ1dGUgZmxvYXQgYUNvbG9yOycsXG5cbiAgICAgICAgICAgICdhdHRyaWJ1dGUgdmVjMiBhUG9zaXRpb25Db29yZDsnLFxuICAgICAgICAgICAgJ2F0dHJpYnV0ZSB2ZWMyIGFTY2FsZTsnLFxuICAgICAgICAgICAgJ2F0dHJpYnV0ZSBmbG9hdCBhUm90YXRpb247JyxcblxuICAgICAgICAgICAgJ3VuaWZvcm0gbWF0MyBwcm9qZWN0aW9uTWF0cml4OycsXG5cbiAgICAgICAgICAgICd2YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDsnLFxuICAgICAgICAgICAgJ3ZhcnlpbmcgZmxvYXQgdkNvbG9yOycsXG5cbiAgICAgICAgICAgICd2b2lkIG1haW4odm9pZCl7JyxcbiAgICAgICAgICAgICcgICB2ZWMyIHYgPSBhVmVydGV4UG9zaXRpb247JyxcblxuICAgICAgICAgICAgJyAgIHYueCA9IChhVmVydGV4UG9zaXRpb24ueCkgKiBjb3MoYVJvdGF0aW9uKSAtIChhVmVydGV4UG9zaXRpb24ueSkgKiBzaW4oYVJvdGF0aW9uKTsnLFxuICAgICAgICAgICAgJyAgIHYueSA9IChhVmVydGV4UG9zaXRpb24ueCkgKiBzaW4oYVJvdGF0aW9uKSArIChhVmVydGV4UG9zaXRpb24ueSkgKiBjb3MoYVJvdGF0aW9uKTsnLFxuICAgICAgICAgICAgJyAgIHYgPSB2ICsgYVBvc2l0aW9uQ29vcmQ7JyxcblxuICAgICAgICAgICAgJyAgIGdsX1Bvc2l0aW9uID0gdmVjNCgocHJvamVjdGlvbk1hdHJpeCAqIHZlYzModiwgMS4wKSkueHksIDAuMCwgMS4wKTsnLFxuXG4gICAgICAgICAgICAnICAgdlRleHR1cmVDb29yZCA9IGFUZXh0dXJlQ29vcmQ7JyxcbiAgICAgICAgICAgICcgICB2Q29sb3IgPSBhQ29sb3I7JyxcbiAgICAgICAgICAgICd9J1xuICAgICAgICBdLmpvaW4oJ1xcbicpLFxuICAgICAgICAvLyBoZWxsb1xuICAgICAgICAgW1xuICAgICAgICAgICAgJ3ByZWNpc2lvbiBsb3dwIGZsb2F0OycsXG5cbiAgICAgICAgICAgICd2YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDsnLFxuICAgICAgICAgICAgJ3ZhcnlpbmcgZmxvYXQgdkNvbG9yOycsXG5cbiAgICAgICAgICAgICd1bmlmb3JtIHNhbXBsZXIyRCB1U2FtcGxlcjsnLFxuICAgICAgICAgICAgJ3VuaWZvcm0gZmxvYXQgdUFscGhhOycsXG5cbiAgICAgICAgICAgICd2b2lkIG1haW4odm9pZCl7JyxcbiAgICAgICAgICAgICcgIHZlYzQgY29sb3IgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZUZXh0dXJlQ29vcmQpICogdkNvbG9yICogdUFscGhhOycsXG4gICAgICAgICAgICAnICBpZiAoY29sb3IuYSA9PSAwLjApIGRpc2NhcmQ7JyxcbiAgICAgICAgICAgICcgIGdsX0ZyYWdDb2xvciA9IGNvbG9yOycsXG4gICAgICAgICAgICAnfSdcbiAgICAgICAgXS5qb2luKCdcXG4nKSxcbiAgICAgICAgLy8gY3VzdG9tIHVuaWZvcm1zXG4gICAgICAgIHtcbiAgICAgICAgICAgIHVBbHBoYTogIHsgdHlwZTogJzFmJywgdmFsdWU6IDEgfVxuICAgICAgICB9LFxuICAgICAgICAvLyBjdXN0b20gYXR0cmlidXRlc1xuICAgICAgICB7XG4gICAgICAgICAgICBhUG9zaXRpb25Db29yZDogMCxcbiAgICAgICAgICAgLy8gYVNjYWxlOiAgICAgICAgIDAsXG4gICAgICAgICAgICBhUm90YXRpb246ICAgICAgMFxuICAgICAgICB9XG4gICAgKTtcblxuICAgIC8vIFRFTVAgSEFDS1xuXG59XG5cblBhcnRpY2xlU2hhZGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoVGV4dHVyZVNoYWRlci5wcm90b3R5cGUpO1xuUGFydGljbGVTaGFkZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gUGFydGljbGVTaGFkZXI7XG5cbm1vZHVsZS5leHBvcnRzID0gUGFydGljbGVTaGFkZXI7XG4iLCJ2YXIgdXRpbHMgPSByZXF1aXJlKCcuLi91dGlscycpLFxuICAgIG1hdGggPSByZXF1aXJlKCcuLi9tYXRoJyksXG4gICAgQ09OU1QgPSByZXF1aXJlKCcuLi9jb25zdCcpLFxuICAgIEV2ZW50RW1pdHRlciA9IHJlcXVpcmUoJ2V2ZW50ZW1pdHRlcjMnKTtcblxuLyoqXG4gKiBUaGUgQ2FudmFzUmVuZGVyZXIgZHJhd3MgdGhlIHNjZW5lIGFuZCBhbGwgaXRzIGNvbnRlbnQgb250byBhIDJkIGNhbnZhcy4gVGhpcyByZW5kZXJlciBzaG91bGQgYmUgdXNlZCBmb3IgYnJvd3NlcnMgdGhhdCBkbyBub3Qgc3VwcG9ydCB3ZWJHTC5cbiAqIERvbid0IGZvcmdldCB0byBhZGQgdGhlIENhbnZhc1JlbmRlcmVyLnZpZXcgdG8geW91ciBET00gb3IgeW91IHdpbGwgbm90IHNlZSBhbnl0aGluZyA6KVxuICpcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqIEBwYXJhbSBzeXN0ZW0ge3N0cmluZ30gVGhlIG5hbWUgb2YgdGhlIHN5c3RlbSB0aGlzIHJlbmRlcmVyIGlzIGZvci5cbiAqIEBwYXJhbSBbd2lkdGg9ODAwXSB7bnVtYmVyfSB0aGUgd2lkdGggb2YgdGhlIGNhbnZhcyB2aWV3XG4gKiBAcGFyYW0gW2hlaWdodD02MDBdIHtudW1iZXJ9IHRoZSBoZWlnaHQgb2YgdGhlIGNhbnZhcyB2aWV3XG4gKiBAcGFyYW0gW29wdGlvbnNdIHtvYmplY3R9IFRoZSBvcHRpb25hbCByZW5kZXJlciBwYXJhbWV0ZXJzXG4gKiBAcGFyYW0gW29wdGlvbnMudmlld10ge0hUTUxDYW52YXNFbGVtZW50fSB0aGUgY2FudmFzIHRvIHVzZSBhcyBhIHZpZXcsIG9wdGlvbmFsXG4gKiBAcGFyYW0gW29wdGlvbnMudHJhbnNwYXJlbnQ9ZmFsc2VdIHtib29sZWFufSBJZiB0aGUgcmVuZGVyIHZpZXcgaXMgdHJhbnNwYXJlbnQsIGRlZmF1bHQgZmFsc2VcbiAqIEBwYXJhbSBbb3B0aW9ucy5hdXRvUmVzaXplPWZhbHNlXSB7Ym9vbGVhbn0gSWYgdGhlIHJlbmRlciB2aWV3IGlzIGF1dG9tYXRpY2FsbHkgcmVzaXplZCwgZGVmYXVsdCBmYWxzZVxuICogQHBhcmFtIFtvcHRpb25zLmFudGlhbGlhcz1mYWxzZV0ge2Jvb2xlYW59IHNldHMgYW50aWFsaWFzIChvbmx5IGFwcGxpY2FibGUgaW4gY2hyb21lIGF0IHRoZSBtb21lbnQpXG4gKiBAcGFyYW0gW29wdGlvbnMucmVzb2x1dGlvbj0xXSB7bnVtYmVyfSB0aGUgcmVzb2x1dGlvbiBvZiB0aGUgcmVuZGVyZXIgcmV0aW5hIHdvdWxkIGJlIDJcbiAqIEBwYXJhbSBbb3B0aW9ucy5jbGVhckJlZm9yZVJlbmRlcj10cnVlXSB7Ym9vbGVhbn0gVGhpcyBzZXRzIGlmIHRoZSBDYW52YXNSZW5kZXJlciB3aWxsIGNsZWFyIHRoZSBjYW52YXMgb3JcbiAqICAgICAgbm90IGJlZm9yZSB0aGUgbmV3IHJlbmRlciBwYXNzLlxuICogQHBhcmFtIFtvcHRpb25zLmJhY2tncm91bmRDb2xvcj0weDAwMDAwMF0ge251bWJlcn0gVGhlIGJhY2tncm91bmQgY29sb3Igb2YgdGhlIHJlbmRlcmVkIGFyZWEgKHNob3duIGlmIG5vdCB0cmFuc3BhcmVudCkuXG4gKiBAcGFyYW0gW29wdGlvbnMucm91bmRQaXhlbHM9ZmFsc2VdIHtib29sZWFufSBJZiB0cnVlIFBpeGkgd2lsbCBNYXRoLmZsb29yKCkgeC95IHZhbHVlcyB3aGVuIHJlbmRlcmluZywgc3RvcHBpbmcgcGl4ZWwgaW50ZXJwb2xhdGlvbi5cbiAqL1xuZnVuY3Rpb24gU3lzdGVtUmVuZGVyZXIoc3lzdGVtLCB3aWR0aCwgaGVpZ2h0LCBvcHRpb25zKVxue1xuICAgIEV2ZW50RW1pdHRlci5jYWxsKHRoaXMpO1xuXG4gICAgdXRpbHMuc2F5SGVsbG8oc3lzdGVtKTtcblxuICAgIC8vIHByZXBhcmUgb3B0aW9uc1xuICAgIGlmIChvcHRpb25zKVxuICAgIHtcbiAgICAgICAgZm9yICh2YXIgaSBpbiBDT05TVC5ERUZBVUxUX1JFTkRFUl9PUFRJT05TKVxuICAgICAgICB7XG4gICAgICAgICAgICBpZiAodHlwZW9mIG9wdGlvbnNbaV0gPT09ICd1bmRlZmluZWQnKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIG9wdGlvbnNbaV0gPSBDT05TVC5ERUZBVUxUX1JFTkRFUl9PUFRJT05TW2ldO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIG9wdGlvbnMgPSBDT05TVC5ERUZBVUxUX1JFTkRFUl9PUFRJT05TO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoZSB0eXBlIG9mIHRoZSByZW5kZXJlci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCBQSVhJLlJFTkRFUkVSX1RZUEUuVU5LTk9XTlxuICAgICAqIEBzZWUgUElYSS5SRU5ERVJFUl9UWVBFXG4gICAgICovXG4gICAgdGhpcy50eXBlID0gQ09OU1QuUkVOREVSRVJfVFlQRS5VTktOT1dOO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHdpZHRoIG9mIHRoZSBjYW52YXMgdmlld1xuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDgwMFxuICAgICAqL1xuICAgIHRoaXMud2lkdGggPSB3aWR0aCB8fCA4MDA7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgaGVpZ2h0IG9mIHRoZSBjYW52YXMgdmlld1xuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDYwMFxuICAgICAqL1xuICAgIHRoaXMuaGVpZ2h0ID0gaGVpZ2h0IHx8IDYwMDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBjYW52YXMgZWxlbWVudCB0aGF0IGV2ZXJ5dGhpbmcgaXMgZHJhd24gdG9cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge0hUTUxDYW52YXNFbGVtZW50fVxuICAgICAqL1xuICAgIHRoaXMudmlldyA9IG9wdGlvbnMudmlldyB8fCBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdjYW52YXMnKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSByZXNvbHV0aW9uIG9mIHRoZSByZW5kZXJlclxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDFcbiAgICAgKi9cbiAgICB0aGlzLnJlc29sdXRpb24gPSBvcHRpb25zLnJlc29sdXRpb247XG5cbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIHRoZSByZW5kZXIgdmlldyBpcyB0cmFuc3BhcmVudFxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKi9cbiAgICB0aGlzLnRyYW5zcGFyZW50ID0gb3B0aW9ucy50cmFuc3BhcmVudDtcblxuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgdGhlIHJlbmRlciB2aWV3IHNob3VsZCBiZSByZXNpemVkIGF1dG9tYXRpY2FsbHlcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICovXG4gICAgdGhpcy5hdXRvUmVzaXplID0gb3B0aW9ucy5hdXRvUmVzaXplIHx8IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogVHJhY2tzIHRoZSBibGVuZCBtb2RlcyB1c2VmdWwgZm9yIHRoaXMgcmVuZGVyZXIuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtvYmplY3Q8c3RyaW5nLCBtaXhlZD59XG4gICAgICovXG4gICAgdGhpcy5ibGVuZE1vZGVzID0gbnVsbDtcblxuICAgIC8qKlxuICAgICAqIFRoZSB2YWx1ZSBvZiB0aGUgcHJlc2VydmVEcmF3aW5nQnVmZmVyIGZsYWcgYWZmZWN0cyB3aGV0aGVyIG9yIG5vdCB0aGUgY29udGVudHMgb2YgdGhlIHN0ZW5jaWwgYnVmZmVyIGlzIHJldGFpbmVkIGFmdGVyIHJlbmRlcmluZy5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICovXG4gICAgdGhpcy5wcmVzZXJ2ZURyYXdpbmdCdWZmZXIgPSBvcHRpb25zLnByZXNlcnZlRHJhd2luZ0J1ZmZlcjtcblxuICAgIC8qKlxuICAgICAqIFRoaXMgc2V0cyBpZiB0aGUgQ2FudmFzUmVuZGVyZXIgd2lsbCBjbGVhciB0aGUgY2FudmFzIG9yIG5vdCBiZWZvcmUgdGhlIG5ldyByZW5kZXIgcGFzcy5cbiAgICAgKiBJZiB0aGUgc2NlbmUgaXMgTk9UIHRyYW5zcGFyZW50IFBpeGkgd2lsbCB1c2UgYSBjYW52YXMgc2l6ZWQgZmlsbFJlY3Qgb3BlcmF0aW9uIGV2ZXJ5IGZyYW1lIHRvIHNldCB0aGUgY2FudmFzIGJhY2tncm91bmQgY29sb3IuXG4gICAgICogSWYgdGhlIHNjZW5lIGlzIHRyYW5zcGFyZW50IFBpeGkgd2lsbCB1c2UgY2xlYXJSZWN0IHRvIGNsZWFyIHRoZSBjYW52YXMgZXZlcnkgZnJhbWUuXG4gICAgICogRGlzYWJsZSB0aGlzIGJ5IHNldHRpbmcgdGhpcyB0byBmYWxzZS4gRm9yIGV4YW1wbGUgaWYgeW91ciBnYW1lIGhhcyBhIGNhbnZhcyBmaWxsaW5nIGJhY2tncm91bmQgaW1hZ2UgeW91IG9mdGVuIGRvbid0IG5lZWQgdGhpcyBzZXQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqIEBkZWZhdWx0XG4gICAgICovXG4gICAgdGhpcy5jbGVhckJlZm9yZVJlbmRlciA9IG9wdGlvbnMuY2xlYXJCZWZvcmVSZW5kZXI7XG5cbiAgICAvKipcbiAgICAgKiBJZiB0cnVlIFBpeGkgd2lsbCBNYXRoLmZsb29yKCkgeC95IHZhbHVlcyB3aGVuIHJlbmRlcmluZywgc3RvcHBpbmcgcGl4ZWwgaW50ZXJwb2xhdGlvbi5cbiAgICAgKiBIYW5keSBmb3IgY3Jpc3AgcGl4ZWwgYXJ0IGFuZCBzcGVlZCBvbiBsZWdhY3kgZGV2aWNlcy5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICovXG4gICAgdGhpcy5yb3VuZFBpeGVscyA9IG9wdGlvbnMucm91bmRQaXhlbHM7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYmFja2dyb3VuZCBjb2xvciBhcyBhIG51bWJlci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX2JhY2tncm91bmRDb2xvciA9IDB4MDAwMDAwO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGJhY2tncm91bmQgY29sb3IgYXMgYW4gW1IsIEcsIEJdIGFycmF5LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyW119XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9iYWNrZ3JvdW5kQ29sb3JSZ2JhID0gWzAsIDAsIDAsIDBdO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGJhY2tncm91bmQgY29sb3IgYXMgYSBzdHJpbmcuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtzdHJpbmd9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9iYWNrZ3JvdW5kQ29sb3JTdHJpbmcgPSAnIzAwMDAwMCc7XG5cbiAgICB0aGlzLmJhY2tncm91bmRDb2xvciA9IG9wdGlvbnMuYmFja2dyb3VuZENvbG9yIHx8IHRoaXMuX2JhY2tncm91bmRDb2xvcjsgLy8gcnVuIGJnIGNvbG9yIHNldHRlclxuXG4gICAgLyoqXG4gICAgICogVGhpcyB0ZW1wb3JhcnkgZGlzcGxheSBvYmplY3QgdXNlZCBhcyB0aGUgcGFyZW50IG9mIHRoZSBjdXJyZW50bHkgYmVpbmcgcmVuZGVyZWQgaXRlbVxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5EaXNwbGF5T2JqZWN0fVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fdGVtcERpc3BsYXlPYmplY3RQYXJlbnQgPSB7d29ybGRUcmFuc2Zvcm06bmV3IG1hdGguTWF0cml4KCksIHdvcmxkQWxwaGE6MSwgY2hpbGRyZW46W119O1xuXG4gICAgLyoqXG4gICAgICogVGhlIGxhc3Qgcm9vdCBvYmplY3QgdGhhdCB0aGUgcmVuZGVyZXIgdHJpZWQgdG8gcmVuZGVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5EaXNwbGF5T2JqZWN0fVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fbGFzdE9iamVjdFJlbmRlcmVkID0gdGhpcy5fdGVtcERpc3BsYXlPYmplY3RQYXJlbnQ7XG59XG5cbi8vIGNvbnN0cnVjdG9yXG5TeXN0ZW1SZW5kZXJlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKEV2ZW50RW1pdHRlci5wcm90b3R5cGUpO1xuU3lzdGVtUmVuZGVyZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gU3lzdGVtUmVuZGVyZXI7XG5tb2R1bGUuZXhwb3J0cyA9IFN5c3RlbVJlbmRlcmVyO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhTeXN0ZW1SZW5kZXJlci5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBUaGUgYmFja2dyb3VuZCBjb2xvciB0byBmaWxsIGlmIG5vdCB0cmFuc3BhcmVudFxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLlN5c3RlbVJlbmRlcmVyI1xuICAgICAqL1xuICAgIGJhY2tncm91bmRDb2xvcjpcbiAgICB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2JhY2tncm91bmRDb2xvcjtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLl9iYWNrZ3JvdW5kQ29sb3IgPSB2YWw7XG4gICAgICAgICAgICB0aGlzLl9iYWNrZ3JvdW5kQ29sb3JTdHJpbmcgPSB1dGlscy5oZXgyc3RyaW5nKHZhbCk7XG4gICAgICAgICAgICB1dGlscy5oZXgycmdiKHZhbCwgdGhpcy5fYmFja2dyb3VuZENvbG9yUmdiYSk7XG4gICAgICAgIH1cbiAgICB9XG59KTtcblxuLyoqXG4gKiBSZXNpemVzIHRoZSBjYW52YXMgdmlldyB0byB0aGUgc3BlY2lmaWVkIHdpZHRoIGFuZCBoZWlnaHRcbiAqXG4gKiBAcGFyYW0gd2lkdGgge251bWJlcn0gdGhlIG5ldyB3aWR0aCBvZiB0aGUgY2FudmFzIHZpZXdcbiAqIEBwYXJhbSBoZWlnaHQge251bWJlcn0gdGhlIG5ldyBoZWlnaHQgb2YgdGhlIGNhbnZhcyB2aWV3XG4gKi9cblN5c3RlbVJlbmRlcmVyLnByb3RvdHlwZS5yZXNpemUgPSBmdW5jdGlvbiAod2lkdGgsIGhlaWdodCkge1xuICAgIHRoaXMud2lkdGggPSB3aWR0aCAqIHRoaXMucmVzb2x1dGlvbjtcbiAgICB0aGlzLmhlaWdodCA9IGhlaWdodCAqIHRoaXMucmVzb2x1dGlvbjtcblxuICAgIHRoaXMudmlldy53aWR0aCA9IHRoaXMud2lkdGg7XG4gICAgdGhpcy52aWV3LmhlaWdodCA9IHRoaXMuaGVpZ2h0O1xuXG4gICAgaWYgKHRoaXMuYXV0b1Jlc2l6ZSlcbiAgICB7XG4gICAgICAgIHRoaXMudmlldy5zdHlsZS53aWR0aCA9IHRoaXMud2lkdGggLyB0aGlzLnJlc29sdXRpb24gKyAncHgnO1xuICAgICAgICB0aGlzLnZpZXcuc3R5bGUuaGVpZ2h0ID0gdGhpcy5oZWlnaHQgLyB0aGlzLnJlc29sdXRpb24gKyAncHgnO1xuICAgIH1cbn07XG5cbi8qKlxuICogUmVtb3ZlcyBldmVyeXRoaW5nIGZyb20gdGhlIHJlbmRlcmVyIGFuZCBvcHRpb25hbGx5IHJlbW92ZXMgdGhlIENhbnZhcyBET00gZWxlbWVudC5cbiAqXG4gKiBAcGFyYW0gW3JlbW92ZVZpZXc9ZmFsc2VdIHtib29sZWFufSBSZW1vdmVzIHRoZSBDYW52YXMgZWxlbWVudCBmcm9tIHRoZSBET00uXG4gKi9cblN5c3RlbVJlbmRlcmVyLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKHJlbW92ZVZpZXcpIHtcbiAgICBpZiAocmVtb3ZlVmlldyAmJiB0aGlzLnZpZXcucGFyZW50Tm9kZSlcbiAgICB7XG4gICAgICAgIHRoaXMudmlldy5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHRoaXMudmlldyk7XG4gICAgfVxuXG4gICAgdGhpcy50eXBlID0gQ09OU1QuUkVOREVSRVJfVFlQRS5VTktOT1dOO1xuXG4gICAgdGhpcy53aWR0aCA9IDA7XG4gICAgdGhpcy5oZWlnaHQgPSAwO1xuXG4gICAgdGhpcy52aWV3ID0gbnVsbDtcblxuICAgIHRoaXMucmVzb2x1dGlvbiA9IDA7XG5cbiAgICB0aGlzLnRyYW5zcGFyZW50ID0gZmFsc2U7XG5cbiAgICB0aGlzLmF1dG9SZXNpemUgPSBmYWxzZTtcblxuICAgIHRoaXMuYmxlbmRNb2RlcyA9IG51bGw7XG5cbiAgICB0aGlzLnByZXNlcnZlRHJhd2luZ0J1ZmZlciA9IGZhbHNlO1xuICAgIHRoaXMuY2xlYXJCZWZvcmVSZW5kZXIgPSBmYWxzZTtcblxuICAgIHRoaXMucm91bmRQaXhlbHMgPSBmYWxzZTtcblxuICAgIHRoaXMuX2JhY2tncm91bmRDb2xvciA9IDA7XG4gICAgdGhpcy5fYmFja2dyb3VuZENvbG9yUmdiYSA9IG51bGw7XG4gICAgdGhpcy5fYmFja2dyb3VuZENvbG9yU3RyaW5nID0gbnVsbDtcbn07XG4iLCJ2YXIgU3lzdGVtUmVuZGVyZXIgPSByZXF1aXJlKCcuLi9TeXN0ZW1SZW5kZXJlcicpLFxuICAgIENhbnZhc01hc2tNYW5hZ2VyID0gcmVxdWlyZSgnLi91dGlscy9DYW52YXNNYXNrTWFuYWdlcicpLFxuICAgIHV0aWxzID0gcmVxdWlyZSgnLi4vLi4vdXRpbHMnKSxcbiAgICBtYXRoID0gcmVxdWlyZSgnLi4vLi4vbWF0aCcpLFxuICAgIENPTlNUID0gcmVxdWlyZSgnLi4vLi4vY29uc3QnKTtcblxuLyoqXG4gKiBUaGUgQ2FudmFzUmVuZGVyZXIgZHJhd3MgdGhlIHNjZW5lIGFuZCBhbGwgaXRzIGNvbnRlbnQgb250byBhIDJkIGNhbnZhcy4gVGhpcyByZW5kZXJlciBzaG91bGQgYmUgdXNlZCBmb3IgYnJvd3NlcnMgdGhhdCBkbyBub3Qgc3VwcG9ydCB3ZWJHTC5cbiAqIERvbid0IGZvcmdldCB0byBhZGQgdGhlIENhbnZhc1JlbmRlcmVyLnZpZXcgdG8geW91ciBET00gb3IgeW91IHdpbGwgbm90IHNlZSBhbnl0aGluZyA6KVxuICpcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqIEBleHRlbmRzIFBJWEkuU3lzdGVtUmVuZGVyZXJcbiAqIEBwYXJhbSBbd2lkdGg9ODAwXSB7bnVtYmVyfSB0aGUgd2lkdGggb2YgdGhlIGNhbnZhcyB2aWV3XG4gKiBAcGFyYW0gW2hlaWdodD02MDBdIHtudW1iZXJ9IHRoZSBoZWlnaHQgb2YgdGhlIGNhbnZhcyB2aWV3XG4gKiBAcGFyYW0gW29wdGlvbnNdIHtvYmplY3R9IFRoZSBvcHRpb25hbCByZW5kZXJlciBwYXJhbWV0ZXJzXG4gKiBAcGFyYW0gW29wdGlvbnMudmlld10ge0hUTUxDYW52YXNFbGVtZW50fSB0aGUgY2FudmFzIHRvIHVzZSBhcyBhIHZpZXcsIG9wdGlvbmFsXG4gKiBAcGFyYW0gW29wdGlvbnMudHJhbnNwYXJlbnQ9ZmFsc2VdIHtib29sZWFufSBJZiB0aGUgcmVuZGVyIHZpZXcgaXMgdHJhbnNwYXJlbnQsIGRlZmF1bHQgZmFsc2VcbiAqIEBwYXJhbSBbb3B0aW9ucy5hdXRvUmVzaXplPWZhbHNlXSB7Ym9vbGVhbn0gSWYgdGhlIHJlbmRlciB2aWV3IGlzIGF1dG9tYXRpY2FsbHkgcmVzaXplZCwgZGVmYXVsdCBmYWxzZVxuICogQHBhcmFtIFtvcHRpb25zLmFudGlhbGlhcz1mYWxzZV0ge2Jvb2xlYW59IHNldHMgYW50aWFsaWFzIChvbmx5IGFwcGxpY2FibGUgaW4gY2hyb21lIGF0IHRoZSBtb21lbnQpXG4gKiBAcGFyYW0gW29wdGlvbnMucmVzb2x1dGlvbj0xXSB7bnVtYmVyfSB0aGUgcmVzb2x1dGlvbiBvZiB0aGUgcmVuZGVyZXIgcmV0aW5hIHdvdWxkIGJlIDJcbiAqIEBwYXJhbSBbb3B0aW9ucy5jbGVhckJlZm9yZVJlbmRlcj10cnVlXSB7Ym9vbGVhbn0gVGhpcyBzZXRzIGlmIHRoZSBDYW52YXNSZW5kZXJlciB3aWxsIGNsZWFyIHRoZSBjYW52YXMgb3JcbiAqICAgICAgbm90IGJlZm9yZSB0aGUgbmV3IHJlbmRlciBwYXNzLlxuICogQHBhcmFtIFtvcHRpb25zLnJvdW5kUGl4ZWxzPWZhbHNlXSB7Ym9vbGVhbn0gSWYgdHJ1ZSBQaXhpIHdpbGwgTWF0aC5mbG9vcigpIHgveSB2YWx1ZXMgd2hlbiByZW5kZXJpbmcsIHN0b3BwaW5nIHBpeGVsIGludGVycG9sYXRpb24uXG4gKi9cbmZ1bmN0aW9uIENhbnZhc1JlbmRlcmVyKHdpZHRoLCBoZWlnaHQsIG9wdGlvbnMpXG57XG4gICAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG5cbiAgICBTeXN0ZW1SZW5kZXJlci5jYWxsKHRoaXMsICdDYW52YXMnLCB3aWR0aCwgaGVpZ2h0LCBvcHRpb25zKTtcblxuICAgIHRoaXMudHlwZSA9IENPTlNULlJFTkRFUkVSX1RZUEUuQ0FOVkFTO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGNhbnZhcyAyZCBjb250ZXh0IHRoYXQgZXZlcnl0aGluZyBpcyBkcmF3biB3aXRoLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEfVxuICAgICAqL1xuICAgIHRoaXMuY29udGV4dCA9IHRoaXMudmlldy5nZXRDb250ZXh0KCcyZCcsIHsgYWxwaGE6IHRoaXMudHJhbnNwYXJlbnQgfSk7XG5cbiAgICAvKipcbiAgICAgKiBCb29sZWFuIGZsYWcgY29udHJvbGxpbmcgY2FudmFzIHJlZnJlc2guXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqL1xuICAgIHRoaXMucmVmcmVzaCA9IHRydWU7XG5cbiAgICAvKipcbiAgICAgKiBJbnN0YW5jZSBvZiBhIENhbnZhc01hc2tNYW5hZ2VyLCBoYW5kbGVzIG1hc2tpbmcgd2hlbiB1c2luZyB0aGUgY2FudmFzIHJlbmRlcmVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5DYW52YXNNYXNrTWFuYWdlcn1cbiAgICAgKi9cbiAgICB0aGlzLm1hc2tNYW5hZ2VyID0gbmV3IENhbnZhc01hc2tNYW5hZ2VyKCk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgY2FudmFzIHByb3BlcnR5IHVzZWQgdG8gc2V0IHRoZSBjYW52YXMgc21vb3RoaW5nIHByb3BlcnR5LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7c3RyaW5nfVxuICAgICAqL1xuICAgIHRoaXMuc21vb3RoUHJvcGVydHkgPSAnaW1hZ2VTbW9vdGhpbmdFbmFibGVkJztcblxuICAgIGlmICghdGhpcy5jb250ZXh0LmltYWdlU21vb3RoaW5nRW5hYmxlZClcbiAgICB7XG4gICAgICAgIGlmICh0aGlzLmNvbnRleHQud2Via2l0SW1hZ2VTbW9vdGhpbmdFbmFibGVkKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnNtb290aFByb3BlcnR5ID0gJ3dlYmtpdEltYWdlU21vb3RoaW5nRW5hYmxlZCc7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodGhpcy5jb250ZXh0Lm1vekltYWdlU21vb3RoaW5nRW5hYmxlZClcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5zbW9vdGhQcm9wZXJ0eSA9ICdtb3pJbWFnZVNtb290aGluZ0VuYWJsZWQnO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHRoaXMuY29udGV4dC5vSW1hZ2VTbW9vdGhpbmdFbmFibGVkKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnNtb290aFByb3BlcnR5ID0gJ29JbWFnZVNtb290aGluZ0VuYWJsZWQnO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHRoaXMuY29udGV4dC5tc0ltYWdlU21vb3RoaW5nRW5hYmxlZClcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5zbW9vdGhQcm9wZXJ0eSA9ICdtc0ltYWdlU21vb3RoaW5nRW5hYmxlZCc7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLmluaXRQbHVnaW5zKCk7XG5cbiAgICB0aGlzLl9tYXBCbGVuZE1vZGVzKCk7XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIHRlbXBvcmFyeSBkaXNwbGF5IG9iamVjdCB1c2VkIGFzIHRoZSBwYXJlbnQgb2YgdGhlIGN1cnJlbnRseSBiZWluZyByZW5kZXJlZCBpdGVtXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLkRpc3BsYXlPYmplY3R9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl90ZW1wRGlzcGxheU9iamVjdFBhcmVudCA9IHtcbiAgICAgICAgd29ybGRUcmFuc2Zvcm06IG5ldyBtYXRoLk1hdHJpeCgpLFxuICAgICAgICB3b3JsZEFscGhhOiAxXG4gICAgfTtcblxuXG4gICAgdGhpcy5yZXNpemUod2lkdGgsIGhlaWdodCk7XG59XG5cbi8vIGNvbnN0cnVjdG9yXG5DYW52YXNSZW5kZXJlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFN5c3RlbVJlbmRlcmVyLnByb3RvdHlwZSk7XG5DYW52YXNSZW5kZXJlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBDYW52YXNSZW5kZXJlcjtcbm1vZHVsZS5leHBvcnRzID0gQ2FudmFzUmVuZGVyZXI7XG51dGlscy5wbHVnaW5UYXJnZXQubWl4aW4oQ2FudmFzUmVuZGVyZXIpO1xuXG4vKipcbiAqIFJlbmRlcnMgdGhlIG9iamVjdCB0byB0aGlzIGNhbnZhcyB2aWV3XG4gKlxuICogQHBhcmFtIG9iamVjdCB7UElYSS5EaXNwbGF5T2JqZWN0fSB0aGUgb2JqZWN0IHRvIGJlIHJlbmRlcmVkXG4gKi9cbkNhbnZhc1JlbmRlcmVyLnByb3RvdHlwZS5yZW5kZXIgPSBmdW5jdGlvbiAob2JqZWN0KVxue1xuICAgIHRoaXMuZW1pdCgncHJlcmVuZGVyJyk7XG5cbiAgICB2YXIgY2FjaGVQYXJlbnQgPSBvYmplY3QucGFyZW50O1xuXG4gICAgdGhpcy5fbGFzdE9iamVjdFJlbmRlcmVkID0gb2JqZWN0O1xuXG4gICAgb2JqZWN0LnBhcmVudCA9IHRoaXMuX3RlbXBEaXNwbGF5T2JqZWN0UGFyZW50O1xuXG4gICAgLy8gdXBkYXRlIHRoZSBzY2VuZSBncmFwaFxuICAgIG9iamVjdC51cGRhdGVUcmFuc2Zvcm0oKTtcblxuICAgIG9iamVjdC5wYXJlbnQgPSBjYWNoZVBhcmVudDtcblxuICAgIHRoaXMuY29udGV4dC5zZXRUcmFuc2Zvcm0oMSwgMCwgMCwgMSwgMCwgMCk7XG5cbiAgICB0aGlzLmNvbnRleHQuZ2xvYmFsQWxwaGEgPSAxO1xuXG4gICAgdGhpcy5jb250ZXh0Lmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbiA9IHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5OT1JNQUxdO1xuXG4gICAgaWYgKG5hdmlnYXRvci5pc0NvY29vbkpTICYmIHRoaXMudmlldy5zY3JlZW5jYW52YXMpXG4gICAge1xuICAgICAgICB0aGlzLmNvbnRleHQuZmlsbFN0eWxlID0gJ2JsYWNrJztcbiAgICAgICAgdGhpcy5jb250ZXh0LmNsZWFyKCk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuY2xlYXJCZWZvcmVSZW5kZXIpXG4gICAge1xuICAgICAgICBpZiAodGhpcy50cmFuc3BhcmVudClcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5jb250ZXh0LmNsZWFyUmVjdCgwLCAwLCB0aGlzLndpZHRoLCB0aGlzLmhlaWdodCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmNvbnRleHQuZmlsbFN0eWxlID0gdGhpcy5fYmFja2dyb3VuZENvbG9yU3RyaW5nO1xuICAgICAgICAgICAgdGhpcy5jb250ZXh0LmZpbGxSZWN0KDAsIDAsIHRoaXMud2lkdGggLCB0aGlzLmhlaWdodCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLnJlbmRlckRpc3BsYXlPYmplY3Qob2JqZWN0LCB0aGlzLmNvbnRleHQpO1xuXG4gICAgdGhpcy5lbWl0KCdwb3N0cmVuZGVyJyk7XG59O1xuXG4vKipcbiAqIFJlbW92ZXMgZXZlcnl0aGluZyBmcm9tIHRoZSByZW5kZXJlciBhbmQgb3B0aW9uYWxseSByZW1vdmVzIHRoZSBDYW52YXMgRE9NIGVsZW1lbnQuXG4gKlxuICogQHBhcmFtIFtyZW1vdmVWaWV3PWZhbHNlXSB7Ym9vbGVhbn0gUmVtb3ZlcyB0aGUgQ2FudmFzIGVsZW1lbnQgZnJvbSB0aGUgRE9NLlxuICovXG5DYW52YXNSZW5kZXJlci5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uIChyZW1vdmVWaWV3KVxue1xuICAgIHRoaXMuZGVzdHJveVBsdWdpbnMoKTtcblxuICAgIC8vIGNhbGwgdGhlIGJhc2UgZGVzdHJveVxuICAgIFN5c3RlbVJlbmRlcmVyLnByb3RvdHlwZS5kZXN0cm95LmNhbGwodGhpcywgcmVtb3ZlVmlldyk7XG5cbiAgICB0aGlzLmNvbnRleHQgPSBudWxsO1xuXG4gICAgdGhpcy5yZWZyZXNoID0gdHJ1ZTtcblxuICAgIHRoaXMubWFza01hbmFnZXIuZGVzdHJveSgpO1xuICAgIHRoaXMubWFza01hbmFnZXIgPSBudWxsO1xuXG4gICAgdGhpcy5zbW9vdGhQcm9wZXJ0eSA9IG51bGw7XG59O1xuXG4vKipcbiAqIFJlbmRlcnMgYSBkaXNwbGF5IG9iamVjdFxuICpcbiAqIEBwYXJhbSBkaXNwbGF5T2JqZWN0IHtQSVhJLkRpc3BsYXlPYmplY3R9IFRoZSBkaXNwbGF5T2JqZWN0IHRvIHJlbmRlclxuICogQHByaXZhdGVcbiAqL1xuQ2FudmFzUmVuZGVyZXIucHJvdG90eXBlLnJlbmRlckRpc3BsYXlPYmplY3QgPSBmdW5jdGlvbiAoZGlzcGxheU9iamVjdCwgY29udGV4dClcbntcbiAgICB2YXIgdGVtcENvbnRleHQgPSB0aGlzLmNvbnRleHQ7XG5cbiAgICB0aGlzLmNvbnRleHQgPSBjb250ZXh0O1xuICAgIGRpc3BsYXlPYmplY3QucmVuZGVyQ2FudmFzKHRoaXMpO1xuICAgIHRoaXMuY29udGV4dCA9IHRlbXBDb250ZXh0O1xufTtcblxuLyoqXG4gKiBAZXh0ZW5kcyBQSVhJLlN5c3RlbVJlbmRlcmVyI3Jlc2l6ZVxuICpcbiAqIEBwYXJhbSB7bnVtYmVyfSB3XG4gKiBAcGFyYW0ge251bWJlcn0gaFxuICovXG5DYW52YXNSZW5kZXJlci5wcm90b3R5cGUucmVzaXplID0gZnVuY3Rpb24gKHcsIGgpXG57XG4gICAgU3lzdGVtUmVuZGVyZXIucHJvdG90eXBlLnJlc2l6ZS5jYWxsKHRoaXMsIHcsIGgpO1xuXG4gICAgLy9yZXNldCB0aGUgc2NhbGUgbW9kZS4uIG9kZGx5IHRoaXMgc2VlbXMgdG8gYmUgcmVzZXQgd2hlbiB0aGUgY2FudmFzIGlzIHJlc2l6ZWQuXG4gICAgLy9zdXJlbHkgYSBicm93c2VyIGJ1Zz8/IExldCBwaXhpIGZpeCB0aGF0IGZvciB5b3UuLlxuICAgIGlmKHRoaXMuc21vb3RoUHJvcGVydHkpXG4gICAge1xuICAgICAgICB0aGlzLmNvbnRleHRbdGhpcy5zbW9vdGhQcm9wZXJ0eV0gPSAoQ09OU1QuU0NBTEVfTU9ERVMuREVGQVVMVCA9PT0gQ09OU1QuU0NBTEVfTU9ERVMuTElORUFSKTtcbiAgICB9XG5cbn07XG5cbi8qKlxuICogTWFwcyBQaXhpIGJsZW5kIG1vZGVzIHRvIGNhbnZhcyBibGVuZCBtb2Rlcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5DYW52YXNSZW5kZXJlci5wcm90b3R5cGUuX21hcEJsZW5kTW9kZXMgPSBmdW5jdGlvbiAoKVxue1xuICAgIGlmICghdGhpcy5ibGVuZE1vZGVzKVxuICAgIHtcbiAgICAgICAgdGhpcy5ibGVuZE1vZGVzID0ge307XG5cbiAgICAgICAgaWYgKHV0aWxzLmNhblVzZU5ld0NhbnZhc0JsZW5kTW9kZXMoKSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5ibGVuZE1vZGVzW0NPTlNULkJMRU5EX01PREVTLk5PUk1BTF0gICAgICAgID0gJ3NvdXJjZS1vdmVyJztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5BRERdICAgICAgICAgICA9ICdsaWdodGVyJzsgLy9JUyBUSElTIE9LPz8/XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuTVVMVElQTFldICAgICAgPSAnbXVsdGlwbHknO1xuICAgICAgICAgICAgdGhpcy5ibGVuZE1vZGVzW0NPTlNULkJMRU5EX01PREVTLlNDUkVFTl0gICAgICAgID0gJ3NjcmVlbic7XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuT1ZFUkxBWV0gICAgICAgPSAnb3ZlcmxheSc7XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuREFSS0VOXSAgICAgICAgPSAnZGFya2VuJztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5MSUdIVEVOXSAgICAgICA9ICdsaWdodGVuJztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5DT0xPUl9ET0RHRV0gICA9ICdjb2xvci1kb2RnZSc7XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuQ09MT1JfQlVSTl0gICAgPSAnY29sb3ItYnVybic7XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuSEFSRF9MSUdIVF0gICAgPSAnaGFyZC1saWdodCc7XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuU09GVF9MSUdIVF0gICAgPSAnc29mdC1saWdodCc7XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuRElGRkVSRU5DRV0gICAgPSAnZGlmZmVyZW5jZSc7XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuRVhDTFVTSU9OXSAgICAgPSAnZXhjbHVzaW9uJztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5IVUVdICAgICAgICAgICA9ICdodWUnO1xuICAgICAgICAgICAgdGhpcy5ibGVuZE1vZGVzW0NPTlNULkJMRU5EX01PREVTLlNBVFVSQVRJT05dICAgID0gJ3NhdHVyYXRlJztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5DT0xPUl0gICAgICAgICA9ICdjb2xvcic7XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuTFVNSU5PU0lUWV0gICAgPSAnbHVtaW5vc2l0eSc7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgICAvLyB0aGlzIG1lYW5zIHRoYXQgdGhlIGJyb3dzZXIgZG9lcyBub3Qgc3VwcG9ydCB0aGUgY29vbCBuZXcgYmxlbmQgbW9kZXMgaW4gY2FudmFzICdjb3VnaCcgaWUgJ2NvdWdoJ1xuICAgICAgICAgICAgdGhpcy5ibGVuZE1vZGVzW0NPTlNULkJMRU5EX01PREVTLk5PUk1BTF0gICAgICAgID0gJ3NvdXJjZS1vdmVyJztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5BRERdICAgICAgICAgICA9ICdsaWdodGVyJzsgLy9JUyBUSElTIE9LPz8/XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuTVVMVElQTFldICAgICAgPSAnc291cmNlLW92ZXInO1xuICAgICAgICAgICAgdGhpcy5ibGVuZE1vZGVzW0NPTlNULkJMRU5EX01PREVTLlNDUkVFTl0gICAgICAgID0gJ3NvdXJjZS1vdmVyJztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5PVkVSTEFZXSAgICAgICA9ICdzb3VyY2Utb3Zlcic7XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuREFSS0VOXSAgICAgICAgPSAnc291cmNlLW92ZXInO1xuICAgICAgICAgICAgdGhpcy5ibGVuZE1vZGVzW0NPTlNULkJMRU5EX01PREVTLkxJR0hURU5dICAgICAgID0gJ3NvdXJjZS1vdmVyJztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5DT0xPUl9ET0RHRV0gICA9ICdzb3VyY2Utb3Zlcic7XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuQ09MT1JfQlVSTl0gICAgPSAnc291cmNlLW92ZXInO1xuICAgICAgICAgICAgdGhpcy5ibGVuZE1vZGVzW0NPTlNULkJMRU5EX01PREVTLkhBUkRfTElHSFRdICAgID0gJ3NvdXJjZS1vdmVyJztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5TT0ZUX0xJR0hUXSAgICA9ICdzb3VyY2Utb3Zlcic7XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuRElGRkVSRU5DRV0gICAgPSAnc291cmNlLW92ZXInO1xuICAgICAgICAgICAgdGhpcy5ibGVuZE1vZGVzW0NPTlNULkJMRU5EX01PREVTLkVYQ0xVU0lPTl0gICAgID0gJ3NvdXJjZS1vdmVyJztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5IVUVdICAgICAgICAgICA9ICdzb3VyY2Utb3Zlcic7XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuU0FUVVJBVElPTl0gICAgPSAnc291cmNlLW92ZXInO1xuICAgICAgICAgICAgdGhpcy5ibGVuZE1vZGVzW0NPTlNULkJMRU5EX01PREVTLkNPTE9SXSAgICAgICAgID0gJ3NvdXJjZS1vdmVyJztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5MVU1JTk9TSVRZXSAgICA9ICdzb3VyY2Utb3Zlcic7XG4gICAgICAgIH1cbiAgICB9XG59O1xuIiwiLyoqXG4gKiBDcmVhdGVzIGEgQ2FudmFzIGVsZW1lbnQgb2YgdGhlIGdpdmVuIHNpemUuXG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIHdpZHRoIHtudW1iZXJ9IHRoZSB3aWR0aCBmb3IgdGhlIG5ld2x5IGNyZWF0ZWQgY2FudmFzXG4gKiBAcGFyYW0gaGVpZ2h0IHtudW1iZXJ9IHRoZSBoZWlnaHQgZm9yIHRoZSBuZXdseSBjcmVhdGVkIGNhbnZhc1xuICovXG5mdW5jdGlvbiBDYW52YXNCdWZmZXIod2lkdGgsIGhlaWdodClcbntcbiAgICAvKipcbiAgICAgKiBUaGUgQ2FudmFzIG9iamVjdCB0aGF0IGJlbG9uZ3MgdG8gdGhpcyBDYW52YXNCdWZmZXIuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtIVE1MQ2FudmFzRWxlbWVudH1cbiAgICAgKi9cbiAgICB0aGlzLmNhbnZhcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NhbnZhcycpO1xuXG4gICAgLyoqXG4gICAgICogQSBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQgb2JqZWN0IHJlcHJlc2VudGluZyBhIHR3by1kaW1lbnNpb25hbCByZW5kZXJpbmcgY29udGV4dC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRH1cbiAgICAgKi9cbiAgICB0aGlzLmNvbnRleHQgPSB0aGlzLmNhbnZhcy5nZXRDb250ZXh0KCcyZCcpO1xuXG4gICAgdGhpcy5jYW52YXMud2lkdGggPSB3aWR0aDtcbiAgICB0aGlzLmNhbnZhcy5oZWlnaHQgPSBoZWlnaHQ7XG59XG5cbkNhbnZhc0J1ZmZlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBDYW52YXNCdWZmZXI7XG5tb2R1bGUuZXhwb3J0cyA9IENhbnZhc0J1ZmZlcjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoQ2FudmFzQnVmZmVyLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFRoZSB3aWR0aCBvZiB0aGUgY2FudmFzIGJ1ZmZlciBpbiBwaXhlbHMuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuQ2FudmFzQnVmZmVyI1xuICAgICAqL1xuICAgIHdpZHRoOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY2FudmFzLndpZHRoO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWwpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuY2FudmFzLndpZHRoID0gdmFsO1xuICAgICAgICB9XG4gICAgfSxcbiAgICAvKipcbiAgICAgKiBUaGUgaGVpZ2h0IG9mIHRoZSBjYW52YXMgYnVmZmVyIGluIHBpeGVscy5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5DYW52YXNCdWZmZXIjXG4gICAgICovXG4gICAgaGVpZ2h0OiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY2FudmFzLmhlaWdodDtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmNhbnZhcy5oZWlnaHQgPSB2YWw7XG4gICAgICAgIH1cbiAgICB9XG59KTtcblxuLyoqXG4gKiBDbGVhcnMgdGhlIGNhbnZhcyB0aGF0IHdhcyBjcmVhdGVkIGJ5IHRoZSBDYW52YXNCdWZmZXIgY2xhc3MuXG4gKlxuICogQHByaXZhdGVcbiAqL1xuQ2FudmFzQnVmZmVyLnByb3RvdHlwZS5jbGVhciA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy5jb250ZXh0LnNldFRyYW5zZm9ybSgxLCAwLCAwLCAxLCAwLCAwKTtcbiAgICB0aGlzLmNvbnRleHQuY2xlYXJSZWN0KDAsMCwgdGhpcy5jYW52YXMud2lkdGgsIHRoaXMuY2FudmFzLmhlaWdodCk7XG59O1xuXG4vKipcbiAqIFJlc2l6ZXMgdGhlIGNhbnZhcyB0byB0aGUgc3BlY2lmaWVkIHdpZHRoIGFuZCBoZWlnaHQuXG4gKlxuICogQHBhcmFtIHdpZHRoIHtudW1iZXJ9IHRoZSBuZXcgd2lkdGggb2YgdGhlIGNhbnZhc1xuICogQHBhcmFtIGhlaWdodCB7bnVtYmVyfSB0aGUgbmV3IGhlaWdodCBvZiB0aGUgY2FudmFzXG4gKi9cbkNhbnZhc0J1ZmZlci5wcm90b3R5cGUucmVzaXplID0gZnVuY3Rpb24gKHdpZHRoLCBoZWlnaHQpXG57XG4gICAgdGhpcy5jYW52YXMud2lkdGggPSB3aWR0aDtcbiAgICB0aGlzLmNhbnZhcy5oZWlnaHQgPSBoZWlnaHQ7XG59O1xuXG4vKipcbiAqIERlc3Ryb3lzIHRoaXMgY2FudmFzLlxuICpcbiAqL1xuQ2FudmFzQnVmZmVyLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLmNvbnRleHQgPSBudWxsO1xuICAgIHRoaXMuY2FudmFzID0gbnVsbDtcbn07XG4iLCJ2YXIgQ09OU1QgPSByZXF1aXJlKCcuLi8uLi8uLi9jb25zdCcpO1xuXG4vKipcbiAqIEEgc2V0IG9mIGZ1bmN0aW9ucyB1c2VkIGJ5IHRoZSBjYW52YXMgcmVuZGVyZXIgdG8gZHJhdyB0aGUgcHJpbWl0aXZlIGdyYXBoaWNzIGRhdGEuXG4gKiBAc3RhdGljXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKi9cbnZhciBDYW52YXNHcmFwaGljcyA9IHt9O1xubW9kdWxlLmV4cG9ydHMgPSBDYW52YXNHcmFwaGljcztcblxuLypcbiAqIFJlbmRlcnMgYSBHcmFwaGljcyBvYmplY3QgdG8gYSBjYW52YXMuXG4gKlxuICogQHBhcmFtIGdyYXBoaWNzIHtQSVhJLkdyYXBoaWNzfSB0aGUgYWN0dWFsIGdyYXBoaWNzIG9iamVjdCB0byByZW5kZXJcbiAqIEBwYXJhbSBjb250ZXh0IHtDYW52YXNSZW5kZXJpbmdDb250ZXh0MkR9IHRoZSAyZCBkcmF3aW5nIG1ldGhvZCBvZiB0aGUgY2FudmFzXG4gKi9cbkNhbnZhc0dyYXBoaWNzLnJlbmRlckdyYXBoaWNzID0gZnVuY3Rpb24gKGdyYXBoaWNzLCBjb250ZXh0KVxue1xuICAgIHZhciB3b3JsZEFscGhhID0gZ3JhcGhpY3Mud29ybGRBbHBoYTtcblxuICAgIGlmIChncmFwaGljcy5kaXJ0eSlcbiAgICB7XG4gICAgICAgIHRoaXMudXBkYXRlR3JhcGhpY3NUaW50KGdyYXBoaWNzKTtcbiAgICAgICAgZ3JhcGhpY3MuZGlydHkgPSBmYWxzZTtcbiAgICB9XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGdyYXBoaWNzLmdyYXBoaWNzRGF0YS5sZW5ndGg7IGkrKylcbiAgICB7XG4gICAgICAgIHZhciBkYXRhID0gZ3JhcGhpY3MuZ3JhcGhpY3NEYXRhW2ldO1xuICAgICAgICB2YXIgc2hhcGUgPSBkYXRhLnNoYXBlO1xuXG4gICAgICAgIHZhciBmaWxsQ29sb3IgPSBkYXRhLl9maWxsVGludDtcbiAgICAgICAgdmFyIGxpbmVDb2xvciA9IGRhdGEuX2xpbmVUaW50O1xuXG4gICAgICAgIGNvbnRleHQubGluZVdpZHRoID0gZGF0YS5saW5lV2lkdGg7XG5cbiAgICAgICAgaWYgKGRhdGEudHlwZSA9PT0gQ09OU1QuU0hBUEVTLlBPTFkpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNvbnRleHQuYmVnaW5QYXRoKCk7XG5cbiAgICAgICAgICAgIHZhciBwb2ludHMgPSBzaGFwZS5wb2ludHM7XG5cbiAgICAgICAgICAgIGNvbnRleHQubW92ZVRvKHBvaW50c1swXSwgcG9pbnRzWzFdKTtcblxuICAgICAgICAgICAgZm9yICh2YXIgaj0xOyBqIDwgcG9pbnRzLmxlbmd0aC8yOyBqKyspXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29udGV4dC5saW5lVG8ocG9pbnRzW2ogKiAyXSwgcG9pbnRzW2ogKiAyICsgMV0pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoc2hhcGUuY2xvc2VkKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGNvbnRleHQubGluZVRvKHBvaW50c1swXSwgcG9pbnRzWzFdKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gaWYgdGhlIGZpcnN0IGFuZCBsYXN0IHBvaW50IGFyZSB0aGUgc2FtZSBjbG9zZSB0aGUgcGF0aCAtIG11Y2ggbmVhdGVyIDopXG4gICAgICAgICAgICBpZiAocG9pbnRzWzBdID09PSBwb2ludHNbcG9pbnRzLmxlbmd0aC0yXSAmJiBwb2ludHNbMV0gPT09IHBvaW50c1twb2ludHMubGVuZ3RoLTFdKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGNvbnRleHQuY2xvc2VQYXRoKCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChkYXRhLmZpbGwpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29udGV4dC5nbG9iYWxBbHBoYSA9IGRhdGEuZmlsbEFscGhhICogd29ybGRBbHBoYTtcbiAgICAgICAgICAgICAgICBjb250ZXh0LmZpbGxTdHlsZSA9ICcjJyArICgnMDAwMDAnICsgKCBmaWxsQ29sb3IgfCAwKS50b1N0cmluZygxNikpLnN1YnN0cigtNik7XG4gICAgICAgICAgICAgICAgY29udGV4dC5maWxsKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZGF0YS5saW5lV2lkdGgpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29udGV4dC5nbG9iYWxBbHBoYSA9IGRhdGEubGluZUFscGhhICogd29ybGRBbHBoYTtcbiAgICAgICAgICAgICAgICBjb250ZXh0LnN0cm9rZVN0eWxlID0gJyMnICsgKCcwMDAwMCcgKyAoIGxpbmVDb2xvciB8IDApLnRvU3RyaW5nKDE2KSkuc3Vic3RyKC02KTtcbiAgICAgICAgICAgICAgICBjb250ZXh0LnN0cm9rZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGRhdGEudHlwZSA9PT0gQ09OU1QuU0hBUEVTLlJFQ1QpXG4gICAgICAgIHtcblxuICAgICAgICAgICAgaWYgKGRhdGEuZmlsbENvbG9yIHx8IGRhdGEuZmlsbENvbG9yID09PSAwKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGNvbnRleHQuZ2xvYmFsQWxwaGEgPSBkYXRhLmZpbGxBbHBoYSAqIHdvcmxkQWxwaGE7XG4gICAgICAgICAgICAgICAgY29udGV4dC5maWxsU3R5bGUgPSAnIycgKyAoJzAwMDAwJyArICggZmlsbENvbG9yIHwgMCkudG9TdHJpbmcoMTYpKS5zdWJzdHIoLTYpO1xuICAgICAgICAgICAgICAgIGNvbnRleHQuZmlsbFJlY3Qoc2hhcGUueCwgc2hhcGUueSwgc2hhcGUud2lkdGgsIHNoYXBlLmhlaWdodCk7XG5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChkYXRhLmxpbmVXaWR0aClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb250ZXh0Lmdsb2JhbEFscGhhID0gZGF0YS5saW5lQWxwaGEgKiB3b3JsZEFscGhhO1xuICAgICAgICAgICAgICAgIGNvbnRleHQuc3Ryb2tlU3R5bGUgPSAnIycgKyAoJzAwMDAwJyArICggbGluZUNvbG9yIHwgMCkudG9TdHJpbmcoMTYpKS5zdWJzdHIoLTYpO1xuICAgICAgICAgICAgICAgIGNvbnRleHQuc3Ryb2tlUmVjdChzaGFwZS54LCBzaGFwZS55LCBzaGFwZS53aWR0aCwgc2hhcGUuaGVpZ2h0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChkYXRhLnR5cGUgPT09IENPTlNULlNIQVBFUy5DSVJDKVxuICAgICAgICB7XG4gICAgICAgICAgICAvLyBUT0RPIC0gbmVlZCB0byBiZSBVbmRlZmluZWQhXG4gICAgICAgICAgICBjb250ZXh0LmJlZ2luUGF0aCgpO1xuICAgICAgICAgICAgY29udGV4dC5hcmMoc2hhcGUueCwgc2hhcGUueSwgc2hhcGUucmFkaXVzLDAsMipNYXRoLlBJKTtcbiAgICAgICAgICAgIGNvbnRleHQuY2xvc2VQYXRoKCk7XG5cbiAgICAgICAgICAgIGlmIChkYXRhLmZpbGwpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29udGV4dC5nbG9iYWxBbHBoYSA9IGRhdGEuZmlsbEFscGhhICogd29ybGRBbHBoYTtcbiAgICAgICAgICAgICAgICBjb250ZXh0LmZpbGxTdHlsZSA9ICcjJyArICgnMDAwMDAnICsgKCBmaWxsQ29sb3IgfCAwKS50b1N0cmluZygxNikpLnN1YnN0cigtNik7XG4gICAgICAgICAgICAgICAgY29udGV4dC5maWxsKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZGF0YS5saW5lV2lkdGgpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29udGV4dC5nbG9iYWxBbHBoYSA9IGRhdGEubGluZUFscGhhICogd29ybGRBbHBoYTtcbiAgICAgICAgICAgICAgICBjb250ZXh0LnN0cm9rZVN0eWxlID0gJyMnICsgKCcwMDAwMCcgKyAoIGxpbmVDb2xvciB8IDApLnRvU3RyaW5nKDE2KSkuc3Vic3RyKC02KTtcbiAgICAgICAgICAgICAgICBjb250ZXh0LnN0cm9rZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGRhdGEudHlwZSA9PT0gQ09OU1QuU0hBUEVTLkVMSVApXG4gICAgICAgIHtcbiAgICAgICAgICAgIC8vIGVsbGlwc2UgY29kZSB0YWtlbiBmcm9tOiBodHRwOi8vc3RhY2tvdmVyZmxvdy5jb20vcXVlc3Rpb25zLzIxNzI3OTgvaG93LXRvLWRyYXctYW4tb3ZhbC1pbi1odG1sNS1jYW52YXNcblxuICAgICAgICAgICAgdmFyIHcgPSBzaGFwZS53aWR0aCAqIDI7XG4gICAgICAgICAgICB2YXIgaCA9IHNoYXBlLmhlaWdodCAqIDI7XG5cbiAgICAgICAgICAgIHZhciB4ID0gc2hhcGUueCAtIHcvMjtcbiAgICAgICAgICAgIHZhciB5ID0gc2hhcGUueSAtIGgvMjtcblxuICAgICAgICAgICAgY29udGV4dC5iZWdpblBhdGgoKTtcblxuICAgICAgICAgICAgdmFyIGthcHBhID0gMC41NTIyODQ4LFxuICAgICAgICAgICAgICAgIG94ID0gKHcgLyAyKSAqIGthcHBhLCAvLyBjb250cm9sIHBvaW50IG9mZnNldCBob3Jpem9udGFsXG4gICAgICAgICAgICAgICAgb3kgPSAoaCAvIDIpICoga2FwcGEsIC8vIGNvbnRyb2wgcG9pbnQgb2Zmc2V0IHZlcnRpY2FsXG4gICAgICAgICAgICAgICAgeGUgPSB4ICsgdywgICAgICAgICAgIC8vIHgtZW5kXG4gICAgICAgICAgICAgICAgeWUgPSB5ICsgaCwgICAgICAgICAgIC8vIHktZW5kXG4gICAgICAgICAgICAgICAgeG0gPSB4ICsgdyAvIDIsICAgICAgIC8vIHgtbWlkZGxlXG4gICAgICAgICAgICAgICAgeW0gPSB5ICsgaCAvIDI7ICAgICAgIC8vIHktbWlkZGxlXG5cbiAgICAgICAgICAgIGNvbnRleHQubW92ZVRvKHgsIHltKTtcbiAgICAgICAgICAgIGNvbnRleHQuYmV6aWVyQ3VydmVUbyh4LCB5bSAtIG95LCB4bSAtIG94LCB5LCB4bSwgeSk7XG4gICAgICAgICAgICBjb250ZXh0LmJlemllckN1cnZlVG8oeG0gKyBveCwgeSwgeGUsIHltIC0gb3ksIHhlLCB5bSk7XG4gICAgICAgICAgICBjb250ZXh0LmJlemllckN1cnZlVG8oeGUsIHltICsgb3ksIHhtICsgb3gsIHllLCB4bSwgeWUpO1xuICAgICAgICAgICAgY29udGV4dC5iZXppZXJDdXJ2ZVRvKHhtIC0gb3gsIHllLCB4LCB5bSArIG95LCB4LCB5bSk7XG5cbiAgICAgICAgICAgIGNvbnRleHQuY2xvc2VQYXRoKCk7XG5cbiAgICAgICAgICAgIGlmIChkYXRhLmZpbGwpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29udGV4dC5nbG9iYWxBbHBoYSA9IGRhdGEuZmlsbEFscGhhICogd29ybGRBbHBoYTtcbiAgICAgICAgICAgICAgICBjb250ZXh0LmZpbGxTdHlsZSA9ICcjJyArICgnMDAwMDAnICsgKCBmaWxsQ29sb3IgfCAwKS50b1N0cmluZygxNikpLnN1YnN0cigtNik7XG4gICAgICAgICAgICAgICAgY29udGV4dC5maWxsKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZGF0YS5saW5lV2lkdGgpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29udGV4dC5nbG9iYWxBbHBoYSA9IGRhdGEubGluZUFscGhhICogd29ybGRBbHBoYTtcbiAgICAgICAgICAgICAgICBjb250ZXh0LnN0cm9rZVN0eWxlID0gJyMnICsgKCcwMDAwMCcgKyAoIGxpbmVDb2xvciB8IDApLnRvU3RyaW5nKDE2KSkuc3Vic3RyKC02KTtcbiAgICAgICAgICAgICAgICBjb250ZXh0LnN0cm9rZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGRhdGEudHlwZSA9PT0gQ09OU1QuU0hBUEVTLlJSRUMpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHZhciByeCA9IHNoYXBlLng7XG4gICAgICAgICAgICB2YXIgcnkgPSBzaGFwZS55O1xuICAgICAgICAgICAgdmFyIHdpZHRoID0gc2hhcGUud2lkdGg7XG4gICAgICAgICAgICB2YXIgaGVpZ2h0ID0gc2hhcGUuaGVpZ2h0O1xuICAgICAgICAgICAgdmFyIHJhZGl1cyA9IHNoYXBlLnJhZGl1cztcblxuICAgICAgICAgICAgdmFyIG1heFJhZGl1cyA9IE1hdGgubWluKHdpZHRoLCBoZWlnaHQpIC8gMiB8IDA7XG4gICAgICAgICAgICByYWRpdXMgPSByYWRpdXMgPiBtYXhSYWRpdXMgPyBtYXhSYWRpdXMgOiByYWRpdXM7XG5cbiAgICAgICAgICAgIGNvbnRleHQuYmVnaW5QYXRoKCk7XG4gICAgICAgICAgICBjb250ZXh0Lm1vdmVUbyhyeCwgcnkgKyByYWRpdXMpO1xuICAgICAgICAgICAgY29udGV4dC5saW5lVG8ocngsIHJ5ICsgaGVpZ2h0IC0gcmFkaXVzKTtcbiAgICAgICAgICAgIGNvbnRleHQucXVhZHJhdGljQ3VydmVUbyhyeCwgcnkgKyBoZWlnaHQsIHJ4ICsgcmFkaXVzLCByeSArIGhlaWdodCk7XG4gICAgICAgICAgICBjb250ZXh0LmxpbmVUbyhyeCArIHdpZHRoIC0gcmFkaXVzLCByeSArIGhlaWdodCk7XG4gICAgICAgICAgICBjb250ZXh0LnF1YWRyYXRpY0N1cnZlVG8ocnggKyB3aWR0aCwgcnkgKyBoZWlnaHQsIHJ4ICsgd2lkdGgsIHJ5ICsgaGVpZ2h0IC0gcmFkaXVzKTtcbiAgICAgICAgICAgIGNvbnRleHQubGluZVRvKHJ4ICsgd2lkdGgsIHJ5ICsgcmFkaXVzKTtcbiAgICAgICAgICAgIGNvbnRleHQucXVhZHJhdGljQ3VydmVUbyhyeCArIHdpZHRoLCByeSwgcnggKyB3aWR0aCAtIHJhZGl1cywgcnkpO1xuICAgICAgICAgICAgY29udGV4dC5saW5lVG8ocnggKyByYWRpdXMsIHJ5KTtcbiAgICAgICAgICAgIGNvbnRleHQucXVhZHJhdGljQ3VydmVUbyhyeCwgcnksIHJ4LCByeSArIHJhZGl1cyk7XG4gICAgICAgICAgICBjb250ZXh0LmNsb3NlUGF0aCgpO1xuXG4gICAgICAgICAgICBpZiAoZGF0YS5maWxsQ29sb3IgfHwgZGF0YS5maWxsQ29sb3IgPT09IDApXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29udGV4dC5nbG9iYWxBbHBoYSA9IGRhdGEuZmlsbEFscGhhICogd29ybGRBbHBoYTtcbiAgICAgICAgICAgICAgICBjb250ZXh0LmZpbGxTdHlsZSA9ICcjJyArICgnMDAwMDAnICsgKCBmaWxsQ29sb3IgfCAwKS50b1N0cmluZygxNikpLnN1YnN0cigtNik7XG4gICAgICAgICAgICAgICAgY29udGV4dC5maWxsKCk7XG5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChkYXRhLmxpbmVXaWR0aClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb250ZXh0Lmdsb2JhbEFscGhhID0gZGF0YS5saW5lQWxwaGEgKiB3b3JsZEFscGhhO1xuICAgICAgICAgICAgICAgIGNvbnRleHQuc3Ryb2tlU3R5bGUgPSAnIycgKyAoJzAwMDAwJyArICggbGluZUNvbG9yIHwgMCkudG9TdHJpbmcoMTYpKS5zdWJzdHIoLTYpO1xuICAgICAgICAgICAgICAgIGNvbnRleHQuc3Ryb2tlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG59O1xuXG4vKlxuICogUmVuZGVycyBhIGdyYXBoaWNzIG1hc2tcbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIGdyYXBoaWNzIHtQSVhJLkdyYXBoaWNzfSB0aGUgZ3JhcGhpY3Mgd2hpY2ggd2lsbCBiZSB1c2VkIGFzIGEgbWFza1xuICogQHBhcmFtIGNvbnRleHQge0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRH0gdGhlIGNvbnRleHQgMmQgbWV0aG9kIG9mIHRoZSBjYW52YXNcbiAqL1xuQ2FudmFzR3JhcGhpY3MucmVuZGVyR3JhcGhpY3NNYXNrID0gZnVuY3Rpb24gKGdyYXBoaWNzLCBjb250ZXh0KVxue1xuICAgIHZhciBsZW4gPSBncmFwaGljcy5ncmFwaGljc0RhdGEubGVuZ3RoO1xuXG4gICAgaWYgKGxlbiA9PT0gMClcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb250ZXh0LmJlZ2luUGF0aCgpO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47IGkrKylcbiAgICB7XG4gICAgICAgIHZhciBkYXRhID0gZ3JhcGhpY3MuZ3JhcGhpY3NEYXRhW2ldO1xuICAgICAgICB2YXIgc2hhcGUgPSBkYXRhLnNoYXBlO1xuXG4gICAgICAgIGlmIChkYXRhLnR5cGUgPT09IENPTlNULlNIQVBFUy5QT0xZKVxuICAgICAgICB7XG5cbiAgICAgICAgICAgIHZhciBwb2ludHMgPSBzaGFwZS5wb2ludHM7XG5cbiAgICAgICAgICAgIGNvbnRleHQubW92ZVRvKHBvaW50c1swXSwgcG9pbnRzWzFdKTtcblxuICAgICAgICAgICAgZm9yICh2YXIgaj0xOyBqIDwgcG9pbnRzLmxlbmd0aC8yOyBqKyspXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29udGV4dC5saW5lVG8ocG9pbnRzW2ogKiAyXSwgcG9pbnRzW2ogKiAyICsgMV0pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBpZiB0aGUgZmlyc3QgYW5kIGxhc3QgcG9pbnQgYXJlIHRoZSBzYW1lIGNsb3NlIHRoZSBwYXRoIC0gbXVjaCBuZWF0ZXIgOilcbiAgICAgICAgICAgIGlmIChwb2ludHNbMF0gPT09IHBvaW50c1twb2ludHMubGVuZ3RoLTJdICYmIHBvaW50c1sxXSA9PT0gcG9pbnRzW3BvaW50cy5sZW5ndGgtMV0pXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29udGV4dC5jbG9zZVBhdGgoKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGRhdGEudHlwZSA9PT0gQ09OU1QuU0hBUEVTLlJFQ1QpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNvbnRleHQucmVjdChzaGFwZS54LCBzaGFwZS55LCBzaGFwZS53aWR0aCwgc2hhcGUuaGVpZ2h0KTtcbiAgICAgICAgICAgIGNvbnRleHQuY2xvc2VQYXRoKCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoZGF0YS50eXBlID09PSBDT05TVC5TSEFQRVMuQ0lSQylcbiAgICAgICAge1xuICAgICAgICAgICAgLy8gVE9ETyAtIG5lZWQgdG8gYmUgVW5kZWZpbmVkIVxuICAgICAgICAgICAgY29udGV4dC5hcmMoc2hhcGUueCwgc2hhcGUueSwgc2hhcGUucmFkaXVzLCAwLCAyICogTWF0aC5QSSk7XG4gICAgICAgICAgICBjb250ZXh0LmNsb3NlUGF0aCgpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGRhdGEudHlwZSA9PT0gQ09OU1QuU0hBUEVTLkVMSVApXG4gICAgICAgIHtcblxuICAgICAgICAgICAgLy8gZWxsaXBzZSBjb2RlIHRha2VuIGZyb206IGh0dHA6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvMjE3Mjc5OC9ob3ctdG8tZHJhdy1hbi1vdmFsLWluLWh0bWw1LWNhbnZhc1xuXG4gICAgICAgICAgICB2YXIgdyA9IHNoYXBlLndpZHRoICogMjtcbiAgICAgICAgICAgIHZhciBoID0gc2hhcGUuaGVpZ2h0ICogMjtcblxuICAgICAgICAgICAgdmFyIHggPSBzaGFwZS54IC0gdy8yO1xuICAgICAgICAgICAgdmFyIHkgPSBzaGFwZS55IC0gaC8yO1xuXG4gICAgICAgICAgICB2YXIga2FwcGEgPSAwLjU1MjI4NDgsXG4gICAgICAgICAgICAgICAgb3ggPSAodyAvIDIpICoga2FwcGEsIC8vIGNvbnRyb2wgcG9pbnQgb2Zmc2V0IGhvcml6b250YWxcbiAgICAgICAgICAgICAgICBveSA9IChoIC8gMikgKiBrYXBwYSwgLy8gY29udHJvbCBwb2ludCBvZmZzZXQgdmVydGljYWxcbiAgICAgICAgICAgICAgICB4ZSA9IHggKyB3LCAgICAgICAgICAgLy8geC1lbmRcbiAgICAgICAgICAgICAgICB5ZSA9IHkgKyBoLCAgICAgICAgICAgLy8geS1lbmRcbiAgICAgICAgICAgICAgICB4bSA9IHggKyB3IC8gMiwgICAgICAgLy8geC1taWRkbGVcbiAgICAgICAgICAgICAgICB5bSA9IHkgKyBoIC8gMjsgICAgICAgLy8geS1taWRkbGVcblxuICAgICAgICAgICAgY29udGV4dC5tb3ZlVG8oeCwgeW0pO1xuICAgICAgICAgICAgY29udGV4dC5iZXppZXJDdXJ2ZVRvKHgsIHltIC0gb3ksIHhtIC0gb3gsIHksIHhtLCB5KTtcbiAgICAgICAgICAgIGNvbnRleHQuYmV6aWVyQ3VydmVUbyh4bSArIG94LCB5LCB4ZSwgeW0gLSBveSwgeGUsIHltKTtcbiAgICAgICAgICAgIGNvbnRleHQuYmV6aWVyQ3VydmVUbyh4ZSwgeW0gKyBveSwgeG0gKyBveCwgeWUsIHhtLCB5ZSk7XG4gICAgICAgICAgICBjb250ZXh0LmJlemllckN1cnZlVG8oeG0gLSBveCwgeWUsIHgsIHltICsgb3ksIHgsIHltKTtcbiAgICAgICAgICAgIGNvbnRleHQuY2xvc2VQYXRoKCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoZGF0YS50eXBlID09PSBDT05TVC5TSEFQRVMuUlJFQylcbiAgICAgICAge1xuXG4gICAgICAgICAgICB2YXIgcnggPSBzaGFwZS54O1xuICAgICAgICAgICAgdmFyIHJ5ID0gc2hhcGUueTtcbiAgICAgICAgICAgIHZhciB3aWR0aCA9IHNoYXBlLndpZHRoO1xuICAgICAgICAgICAgdmFyIGhlaWdodCA9IHNoYXBlLmhlaWdodDtcbiAgICAgICAgICAgIHZhciByYWRpdXMgPSBzaGFwZS5yYWRpdXM7XG5cbiAgICAgICAgICAgIHZhciBtYXhSYWRpdXMgPSBNYXRoLm1pbih3aWR0aCwgaGVpZ2h0KSAvIDIgfCAwO1xuICAgICAgICAgICAgcmFkaXVzID0gcmFkaXVzID4gbWF4UmFkaXVzID8gbWF4UmFkaXVzIDogcmFkaXVzO1xuXG4gICAgICAgICAgICBjb250ZXh0Lm1vdmVUbyhyeCwgcnkgKyByYWRpdXMpO1xuICAgICAgICAgICAgY29udGV4dC5saW5lVG8ocngsIHJ5ICsgaGVpZ2h0IC0gcmFkaXVzKTtcbiAgICAgICAgICAgIGNvbnRleHQucXVhZHJhdGljQ3VydmVUbyhyeCwgcnkgKyBoZWlnaHQsIHJ4ICsgcmFkaXVzLCByeSArIGhlaWdodCk7XG4gICAgICAgICAgICBjb250ZXh0LmxpbmVUbyhyeCArIHdpZHRoIC0gcmFkaXVzLCByeSArIGhlaWdodCk7XG4gICAgICAgICAgICBjb250ZXh0LnF1YWRyYXRpY0N1cnZlVG8ocnggKyB3aWR0aCwgcnkgKyBoZWlnaHQsIHJ4ICsgd2lkdGgsIHJ5ICsgaGVpZ2h0IC0gcmFkaXVzKTtcbiAgICAgICAgICAgIGNvbnRleHQubGluZVRvKHJ4ICsgd2lkdGgsIHJ5ICsgcmFkaXVzKTtcbiAgICAgICAgICAgIGNvbnRleHQucXVhZHJhdGljQ3VydmVUbyhyeCArIHdpZHRoLCByeSwgcnggKyB3aWR0aCAtIHJhZGl1cywgcnkpO1xuICAgICAgICAgICAgY29udGV4dC5saW5lVG8ocnggKyByYWRpdXMsIHJ5KTtcbiAgICAgICAgICAgIGNvbnRleHQucXVhZHJhdGljQ3VydmVUbyhyeCwgcnksIHJ4LCByeSArIHJhZGl1cyk7XG4gICAgICAgICAgICBjb250ZXh0LmNsb3NlUGF0aCgpO1xuICAgICAgICB9XG4gICAgfVxufTtcblxuLypcbiAqIFVwZGF0ZXMgdGhlIHRpbnQgb2YgYSBncmFwaGljcyBvYmplY3RcbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIGdyYXBoaWNzIHtQSVhJLkdyYXBoaWNzfSB0aGUgZ3JhcGhpY3MgdGhhdCB3aWxsIGhhdmUgaXRzIHRpbnQgdXBkYXRlZFxuICpcbiAqL1xuQ2FudmFzR3JhcGhpY3MudXBkYXRlR3JhcGhpY3NUaW50ID0gZnVuY3Rpb24gKGdyYXBoaWNzKVxue1xuICAgIGlmIChncmFwaGljcy50aW50ID09PSAweEZGRkZGRiAmJiBncmFwaGljcy5fcHJldlRpbnQgPT09IGdyYXBoaWNzLnRpbnQpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIGdyYXBoaWNzLl9wcmV2VGludCA9IGdyYXBoaWNzLnRpbnQ7XG5cbiAgICB2YXIgdGludFIgPSAoZ3JhcGhpY3MudGludCA+PiAxNiAmIDB4RkYpIC8gMjU1O1xuICAgIHZhciB0aW50RyA9IChncmFwaGljcy50aW50ID4+IDggJiAweEZGKSAvIDI1NTtcbiAgICB2YXIgdGludEIgPSAoZ3JhcGhpY3MudGludCAmIDB4RkYpLyAyNTU7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGdyYXBoaWNzLmdyYXBoaWNzRGF0YS5sZW5ndGg7IGkrKylcbiAgICB7XG4gICAgICAgIHZhciBkYXRhID0gZ3JhcGhpY3MuZ3JhcGhpY3NEYXRhW2ldO1xuXG4gICAgICAgIHZhciBmaWxsQ29sb3IgPSBkYXRhLmZpbGxDb2xvciB8IDA7XG4gICAgICAgIHZhciBsaW5lQ29sb3IgPSBkYXRhLmxpbmVDb2xvciB8IDA7XG5cbiAgICAgICAgLypcbiAgICAgICAgdmFyIGNvbG9yUiA9IChmaWxsQ29sb3IgPj4gMTYgJiAweEZGKSAvIDI1NTtcbiAgICAgICAgdmFyIGNvbG9yRyA9IChmaWxsQ29sb3IgPj4gOCAmIDB4RkYpIC8gMjU1O1xuICAgICAgICB2YXIgY29sb3JCID0gKGZpbGxDb2xvciAmIDB4RkYpIC8gMjU1O1xuXG4gICAgICAgIGNvbG9yUiAqPSB0aW50UjtcbiAgICAgICAgY29sb3JHICo9IHRpbnRHO1xuICAgICAgICBjb2xvckIgKj0gdGludEI7XG5cbiAgICAgICAgZmlsbENvbG9yID0gKChjb2xvclIqMjU1IDw8IDE2KSArIChjb2xvckcqMjU1IDw8IDgpICsgY29sb3JCKjI1NSk7XG5cbiAgICAgICAgY29sb3JSID0gKGxpbmVDb2xvciA+PiAxNiAmIDB4RkYpIC8gMjU1O1xuICAgICAgICBjb2xvckcgPSAobGluZUNvbG9yID4+IDggJiAweEZGKSAvIDI1NTtcbiAgICAgICAgY29sb3JCID0gKGxpbmVDb2xvciAmIDB4RkYpIC8gMjU1O1xuXG4gICAgICAgIGNvbG9yUiAqPSB0aW50UjtcbiAgICAgICAgY29sb3JHICo9IHRpbnRHO1xuICAgICAgICBjb2xvckIgKj0gdGludEI7XG5cbiAgICAgICAgbGluZUNvbG9yID0gKChjb2xvclIqMjU1IDw8IDE2KSArIChjb2xvckcqMjU1IDw8IDgpICsgY29sb3JCKjI1NSk7XG4gICAgICAgICovXG5cbiAgICAgICAgLy8gc3VwZXIgaW5saW5lIGNvcyBpbSBhbiBvcHRpbWl6YXRpb24gTkFaSSA6KVxuICAgICAgICBkYXRhLl9maWxsVGludCA9ICgoKGZpbGxDb2xvciA+PiAxNiAmIDB4RkYpIC8gMjU1ICogdGludFIqMjU1IDw8IDE2KSArICgoZmlsbENvbG9yID4+IDggJiAweEZGKSAvIDI1NSAqIHRpbnRHKjI1NSA8PCA4KSArICAoZmlsbENvbG9yICYgMHhGRikgLyAyNTUgKiB0aW50QioyNTUpO1xuICAgICAgICBkYXRhLl9saW5lVGludCA9ICgoKGxpbmVDb2xvciA+PiAxNiAmIDB4RkYpIC8gMjU1ICogdGludFIqMjU1IDw8IDE2KSArICgobGluZUNvbG9yID4+IDggJiAweEZGKSAvIDI1NSAqIHRpbnRHKjI1NSA8PCA4KSArICAobGluZUNvbG9yICYgMHhGRikgLyAyNTUgKiB0aW50QioyNTUpO1xuXG4gICAgfVxufTtcblxuIiwidmFyIENhbnZhc0dyYXBoaWNzID0gcmVxdWlyZSgnLi9DYW52YXNHcmFwaGljcycpO1xuXG4vKipcbiAqIEEgc2V0IG9mIGZ1bmN0aW9ucyB1c2VkIHRvIGhhbmRsZSBtYXNraW5nLlxuICpcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqL1xuZnVuY3Rpb24gQ2FudmFzTWFza01hbmFnZXIoKVxue31cblxuQ2FudmFzTWFza01hbmFnZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gQ2FudmFzTWFza01hbmFnZXI7XG5tb2R1bGUuZXhwb3J0cyA9IENhbnZhc01hc2tNYW5hZ2VyO1xuXG4vKipcbiAqIFRoaXMgbWV0aG9kIGFkZHMgaXQgdG8gdGhlIGN1cnJlbnQgc3RhY2sgb2YgbWFza3MuXG4gKlxuICogQHBhcmFtIG1hc2tEYXRhIHtvYmplY3R9IHRoZSBtYXNrRGF0YSB0aGF0IHdpbGwgYmUgcHVzaGVkXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcnxQSVhJLkNhbnZhc1JlbmRlcmVyfSBUaGUgcmVuZGVyZXIgY29udGV4dCB0byB1c2UuXG4gKi9cbkNhbnZhc01hc2tNYW5hZ2VyLnByb3RvdHlwZS5wdXNoTWFzayA9IGZ1bmN0aW9uIChtYXNrRGF0YSwgcmVuZGVyZXIpXG57XG5cbiAgICByZW5kZXJlci5jb250ZXh0LnNhdmUoKTtcblxuICAgIHZhciBjYWNoZUFscGhhID0gbWFza0RhdGEuYWxwaGE7XG4gICAgdmFyIHRyYW5zZm9ybSA9IG1hc2tEYXRhLndvcmxkVHJhbnNmb3JtO1xuICAgIHZhciByZXNvbHV0aW9uID0gcmVuZGVyZXIucmVzb2x1dGlvbjtcblxuICAgIHJlbmRlcmVyLmNvbnRleHQuc2V0VHJhbnNmb3JtKFxuICAgICAgICB0cmFuc2Zvcm0uYSAqIHJlc29sdXRpb24sXG4gICAgICAgIHRyYW5zZm9ybS5iICogcmVzb2x1dGlvbixcbiAgICAgICAgdHJhbnNmb3JtLmMgKiByZXNvbHV0aW9uLFxuICAgICAgICB0cmFuc2Zvcm0uZCAqIHJlc29sdXRpb24sXG4gICAgICAgIHRyYW5zZm9ybS50eCAqIHJlc29sdXRpb24sXG4gICAgICAgIHRyYW5zZm9ybS50eSAqIHJlc29sdXRpb25cbiAgICApO1xuXG4gICAgLy9UT0RPIHN1cG9ydCBzcHJpdGUgYWxwaGEgbWFza3M/P1xuICAgIC8vbG90cyBvZiBlZmZvcnQgcmVxdWlyZWQuIElmIGRlbWFuZCBpcyBncmVhdCBlbm91Z2guLlxuICAgIGlmKCFtYXNrRGF0YS50ZXh0dXJlKVxuICAgIHtcbiAgICAgICAgQ2FudmFzR3JhcGhpY3MucmVuZGVyR3JhcGhpY3NNYXNrKG1hc2tEYXRhLCByZW5kZXJlci5jb250ZXh0KTtcbiAgICAgICAgcmVuZGVyZXIuY29udGV4dC5jbGlwKCk7XG4gICAgfVxuXG4gICAgbWFza0RhdGEud29ybGRBbHBoYSA9IGNhY2hlQWxwaGE7XG59O1xuXG4vKipcbiAqIFJlc3RvcmVzIHRoZSBjdXJyZW50IGRyYXdpbmcgY29udGV4dCB0byB0aGUgc3RhdGUgaXQgd2FzIGJlZm9yZSB0aGUgbWFzayB3YXMgYXBwbGllZC5cbiAqXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcnxQSVhJLkNhbnZhc1JlbmRlcmVyfSBUaGUgcmVuZGVyZXIgY29udGV4dCB0byB1c2UuXG4gKi9cbkNhbnZhc01hc2tNYW5hZ2VyLnByb3RvdHlwZS5wb3BNYXNrID0gZnVuY3Rpb24gKHJlbmRlcmVyKVxue1xuICAgIHJlbmRlcmVyLmNvbnRleHQucmVzdG9yZSgpO1xufTtcblxuQ2FudmFzTWFza01hbmFnZXIucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoKSB7fTtcbiIsInZhciB1dGlscyA9IHJlcXVpcmUoJy4uLy4uLy4uL3V0aWxzJyk7XG5cbi8qKlxuICogVXRpbGl0eSBtZXRob2RzIGZvciBTcHJpdGUvVGV4dHVyZSB0aW50aW5nLlxuICogQHN0YXRpY1xuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICovXG52YXIgQ2FudmFzVGludGVyID0ge307XG5tb2R1bGUuZXhwb3J0cyA9IENhbnZhc1RpbnRlcjtcblxuLyoqXG4gKiBCYXNpY2FsbHkgdGhpcyBtZXRob2QganVzdCBuZWVkcyBhIHNwcml0ZSBhbmQgYSBjb2xvciBhbmQgdGludHMgdGhlIHNwcml0ZSB3aXRoIHRoZSBnaXZlbiBjb2xvci5cbiAqXG4gKiBAcGFyYW0gc3ByaXRlIHtQSVhJLlNwcml0ZX0gdGhlIHNwcml0ZSB0byB0aW50XG4gKiBAcGFyYW0gY29sb3Ige251bWJlcn0gdGhlIGNvbG9yIHRvIHVzZSB0byB0aW50IHRoZSBzcHJpdGUgd2l0aFxuICogQHJldHVybiB7SFRNTENhbnZhc0VsZW1lbnR9IFRoZSB0aW50ZWQgY2FudmFzXG4gKi9cbkNhbnZhc1RpbnRlci5nZXRUaW50ZWRUZXh0dXJlID0gZnVuY3Rpb24gKHNwcml0ZSwgY29sb3IpXG57XG4gICAgdmFyIHRleHR1cmUgPSBzcHJpdGUudGV4dHVyZTtcblxuICAgIGNvbG9yID0gQ2FudmFzVGludGVyLnJvdW5kQ29sb3IoY29sb3IpO1xuXG4gICAgdmFyIHN0cmluZ0NvbG9yID0gJyMnICsgKCcwMDAwMCcgKyAoIGNvbG9yIHwgMCkudG9TdHJpbmcoMTYpKS5zdWJzdHIoLTYpO1xuXG4gICAgdGV4dHVyZS50aW50Q2FjaGUgPSB0ZXh0dXJlLnRpbnRDYWNoZSB8fCB7fTtcblxuICAgIGlmICh0ZXh0dXJlLnRpbnRDYWNoZVtzdHJpbmdDb2xvcl0pXG4gICAge1xuICAgICAgICByZXR1cm4gdGV4dHVyZS50aW50Q2FjaGVbc3RyaW5nQ29sb3JdO1xuICAgIH1cblxuICAgICAvLyBjbG9uZSB0ZXh0dXJlLi5cbiAgICB2YXIgY2FudmFzID0gQ2FudmFzVGludGVyLmNhbnZhcyB8fCBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdjYW52YXMnKTtcblxuICAgIC8vQ2FudmFzVGludGVyLnRpbnRXaXRoUGVyUGl4ZWwodGV4dHVyZSwgc3RyaW5nQ29sb3IsIGNhbnZhcyk7XG4gICAgQ2FudmFzVGludGVyLnRpbnRNZXRob2QodGV4dHVyZSwgY29sb3IsIGNhbnZhcyk7XG5cbiAgICBpZiAoQ2FudmFzVGludGVyLmNvbnZlcnRUaW50VG9JbWFnZSlcbiAgICB7XG4gICAgICAgIC8vIGlzIHRoaXMgYmV0dGVyP1xuICAgICAgICB2YXIgdGludEltYWdlID0gbmV3IEltYWdlKCk7XG4gICAgICAgIHRpbnRJbWFnZS5zcmMgPSBjYW52YXMudG9EYXRhVVJMKCk7XG5cbiAgICAgICAgdGV4dHVyZS50aW50Q2FjaGVbc3RyaW5nQ29sb3JdID0gdGludEltYWdlO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICB0ZXh0dXJlLnRpbnRDYWNoZVtzdHJpbmdDb2xvcl0gPSBjYW52YXM7XG4gICAgICAgIC8vIGlmIHdlIGFyZSBub3QgY29udmVydGluZyB0aGUgdGV4dHVyZSB0byBhbiBpbWFnZSB0aGVuIHdlIG5lZWQgdG8gbG9zZSB0aGUgcmVmZXJlbmNlIHRvIHRoZSBjYW52YXNcbiAgICAgICAgQ2FudmFzVGludGVyLmNhbnZhcyA9IG51bGw7XG4gICAgfVxuXG4gICAgcmV0dXJuIGNhbnZhcztcbn07XG5cbi8qKlxuICogVGludCBhIHRleHR1cmUgdXNpbmcgdGhlICdtdWx0aXBseScgb3BlcmF0aW9uLlxuICpcbiAqIEBwYXJhbSB0ZXh0dXJlIHtQSVhJLlRleHR1cmV9IHRoZSB0ZXh0dXJlIHRvIHRpbnRcbiAqIEBwYXJhbSBjb2xvciB7bnVtYmVyfSB0aGUgY29sb3IgdG8gdXNlIHRvIHRpbnQgdGhlIHNwcml0ZSB3aXRoXG4gKiBAcGFyYW0gY2FudmFzIHtIVE1MQ2FudmFzRWxlbWVudH0gdGhlIGN1cnJlbnQgY2FudmFzXG4gKi9cbkNhbnZhc1RpbnRlci50aW50V2l0aE11bHRpcGx5ID0gZnVuY3Rpb24gKHRleHR1cmUsIGNvbG9yLCBjYW52YXMpXG57XG4gICAgdmFyIGNvbnRleHQgPSBjYW52YXMuZ2V0Q29udGV4dCggJzJkJyApO1xuXG4gICAgdmFyIHJlc29sdXRpb24gPSB0ZXh0dXJlLmJhc2VUZXh0dXJlLnJlc29sdXRpb247XG5cbiAgICB2YXIgY3JvcCA9IHRleHR1cmUuY3JvcC5jbG9uZSgpO1xuICAgIGNyb3AueCAqPSByZXNvbHV0aW9uO1xuICAgIGNyb3AueSAqPSByZXNvbHV0aW9uO1xuICAgIGNyb3Aud2lkdGggKj0gcmVzb2x1dGlvbjtcbiAgICBjcm9wLmhlaWdodCAqPSByZXNvbHV0aW9uO1xuXG4gICAgY2FudmFzLndpZHRoID0gY3JvcC53aWR0aDtcbiAgICBjYW52YXMuaGVpZ2h0ID0gY3JvcC5oZWlnaHQ7XG5cbiAgICBjb250ZXh0LmZpbGxTdHlsZSA9ICcjJyArICgnMDAwMDAnICsgKCBjb2xvciB8IDApLnRvU3RyaW5nKDE2KSkuc3Vic3RyKC02KTtcblxuICAgIGNvbnRleHQuZmlsbFJlY3QoMCwgMCwgY3JvcC53aWR0aCwgY3JvcC5oZWlnaHQpO1xuXG4gICAgY29udGV4dC5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb24gPSAnbXVsdGlwbHknO1xuXG4gICAgY29udGV4dC5kcmF3SW1hZ2UoXG4gICAgICAgIHRleHR1cmUuYmFzZVRleHR1cmUuc291cmNlLFxuICAgICAgICBjcm9wLngsXG4gICAgICAgIGNyb3AueSxcbiAgICAgICAgY3JvcC53aWR0aCxcbiAgICAgICAgY3JvcC5oZWlnaHQsXG4gICAgICAgIDAsXG4gICAgICAgIDAsXG4gICAgICAgIGNyb3Aud2lkdGgsXG4gICAgICAgIGNyb3AuaGVpZ2h0XG4gICAgKTtcblxuICAgIGNvbnRleHQuZ2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uID0gJ2Rlc3RpbmF0aW9uLWF0b3AnO1xuXG4gICAgY29udGV4dC5kcmF3SW1hZ2UoXG4gICAgICAgIHRleHR1cmUuYmFzZVRleHR1cmUuc291cmNlLFxuICAgICAgICBjcm9wLngsXG4gICAgICAgIGNyb3AueSxcbiAgICAgICAgY3JvcC53aWR0aCxcbiAgICAgICAgY3JvcC5oZWlnaHQsXG4gICAgICAgIDAsXG4gICAgICAgIDAsXG4gICAgICAgIGNyb3Aud2lkdGgsXG4gICAgICAgIGNyb3AuaGVpZ2h0XG4gICAgKTtcbn07XG5cbi8qKlxuICogVGludCBhIHRleHR1cmUgdXNpbmcgdGhlICdvdmVybGF5JyBvcGVyYXRpb24uXG4gKlxuICogQHBhcmFtIHRleHR1cmUge1BJWEkuVGV4dHVyZX0gdGhlIHRleHR1cmUgdG8gdGludFxuICogQHBhcmFtIGNvbG9yIHtudW1iZXJ9IHRoZSBjb2xvciB0byB1c2UgdG8gdGludCB0aGUgc3ByaXRlIHdpdGhcbiAqIEBwYXJhbSBjYW52YXMge0hUTUxDYW52YXNFbGVtZW50fSB0aGUgY3VycmVudCBjYW52YXNcbiAqL1xuQ2FudmFzVGludGVyLnRpbnRXaXRoT3ZlcmxheSA9IGZ1bmN0aW9uICh0ZXh0dXJlLCBjb2xvciwgY2FudmFzKVxue1xuICAgIHZhciBjb250ZXh0ID0gY2FudmFzLmdldENvbnRleHQoICcyZCcgKTtcblxuICAgIHZhciByZXNvbHV0aW9uID0gdGV4dHVyZS5iYXNlVGV4dHVyZS5yZXNvbHV0aW9uO1xuXG4gICAgdmFyIGNyb3AgPSB0ZXh0dXJlLmNyb3AuY2xvbmUoKTtcbiAgICBjcm9wLnggKj0gcmVzb2x1dGlvbjtcbiAgICBjcm9wLnkgKj0gcmVzb2x1dGlvbjtcbiAgICBjcm9wLndpZHRoICo9IHJlc29sdXRpb247XG4gICAgY3JvcC5oZWlnaHQgKj0gcmVzb2x1dGlvbjtcblxuICAgIGNhbnZhcy53aWR0aCA9IGNyb3Aud2lkdGg7XG4gICAgY2FudmFzLmhlaWdodCA9IGNyb3AuaGVpZ2h0O1xuXG4gICAgY29udGV4dC5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb24gPSAnY29weSc7XG4gICAgY29udGV4dC5maWxsU3R5bGUgPSAnIycgKyAoJzAwMDAwJyArICggY29sb3IgfCAwKS50b1N0cmluZygxNikpLnN1YnN0cigtNik7XG4gICAgY29udGV4dC5maWxsUmVjdCgwLCAwLCBjcm9wLndpZHRoLCBjcm9wLmhlaWdodCk7XG5cbiAgICBjb250ZXh0Lmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbiA9ICdkZXN0aW5hdGlvbi1hdG9wJztcbiAgICBjb250ZXh0LmRyYXdJbWFnZShcbiAgICAgICAgdGV4dHVyZS5iYXNlVGV4dHVyZS5zb3VyY2UsXG4gICAgICAgIGNyb3AueCxcbiAgICAgICAgY3JvcC55LFxuICAgICAgICBjcm9wLndpZHRoLFxuICAgICAgICBjcm9wLmhlaWdodCxcbiAgICAgICAgMCxcbiAgICAgICAgMCxcbiAgICAgICAgY3JvcC53aWR0aCxcbiAgICAgICAgY3JvcC5oZWlnaHRcbiAgICApO1xuXG4gICAgLy8gY29udGV4dC5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb24gPSAnY29weSc7XG59O1xuXG4vKipcbiAqIFRpbnQgYSB0ZXh0dXJlIHBpeGVsIHBlciBwaXhlbC5cbiAqXG4gKiBAcGFyYW0gdGV4dHVyZSB7UElYSS5UZXh0dXJlfSB0aGUgdGV4dHVyZSB0byB0aW50XG4gKiBAcGFyYW0gY29sb3Ige251bWJlcn0gdGhlIGNvbG9yIHRvIHVzZSB0byB0aW50IHRoZSBzcHJpdGUgd2l0aFxuICogQHBhcmFtIGNhbnZhcyB7SFRNTENhbnZhc0VsZW1lbnR9IHRoZSBjdXJyZW50IGNhbnZhc1xuICovXG5DYW52YXNUaW50ZXIudGludFdpdGhQZXJQaXhlbCA9IGZ1bmN0aW9uICh0ZXh0dXJlLCBjb2xvciwgY2FudmFzKVxue1xuICAgIHZhciBjb250ZXh0ID0gY2FudmFzLmdldENvbnRleHQoICcyZCcgKTtcblxuICAgIHZhciByZXNvbHV0aW9uID0gdGV4dHVyZS5iYXNlVGV4dHVyZS5yZXNvbHV0aW9uO1xuXG4gICAgdmFyIGNyb3AgPSB0ZXh0dXJlLmNyb3AuY2xvbmUoKTtcbiAgICBjcm9wLnggKj0gcmVzb2x1dGlvbjtcbiAgICBjcm9wLnkgKj0gcmVzb2x1dGlvbjtcbiAgICBjcm9wLndpZHRoICo9IHJlc29sdXRpb247XG4gICAgY3JvcC5oZWlnaHQgKj0gcmVzb2x1dGlvbjtcblxuICAgIGNhbnZhcy53aWR0aCA9IGNyb3Aud2lkdGg7XG4gICAgY2FudmFzLmhlaWdodCA9IGNyb3AuaGVpZ2h0O1xuXG4gICAgY29udGV4dC5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb24gPSAnY29weSc7XG4gICAgY29udGV4dC5kcmF3SW1hZ2UoXG4gICAgICAgIHRleHR1cmUuYmFzZVRleHR1cmUuc291cmNlLFxuICAgICAgICBjcm9wLngsXG4gICAgICAgIGNyb3AueSxcbiAgICAgICAgY3JvcC53aWR0aCxcbiAgICAgICAgY3JvcC5oZWlnaHQsXG4gICAgICAgIDAsXG4gICAgICAgIDAsXG4gICAgICAgIGNyb3Aud2lkdGgsXG4gICAgICAgIGNyb3AuaGVpZ2h0XG4gICAgKTtcblxuICAgIHZhciByZ2JWYWx1ZXMgPSB1dGlscy5oZXgycmdiKGNvbG9yKTtcbiAgICB2YXIgciA9IHJnYlZhbHVlc1swXSwgZyA9IHJnYlZhbHVlc1sxXSwgYiA9IHJnYlZhbHVlc1syXTtcblxuICAgIHZhciBwaXhlbERhdGEgPSBjb250ZXh0LmdldEltYWdlRGF0YSgwLCAwLCBjcm9wLndpZHRoLCBjcm9wLmhlaWdodCk7XG5cbiAgICB2YXIgcGl4ZWxzID0gcGl4ZWxEYXRhLmRhdGE7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHBpeGVscy5sZW5ndGg7IGkgKz0gNClcbiAgICB7XG4gICAgICAgIHBpeGVsc1tpKzBdICo9IHI7XG4gICAgICAgIHBpeGVsc1tpKzFdICo9IGc7XG4gICAgICAgIHBpeGVsc1tpKzJdICo9IGI7XG4gICAgfVxuXG4gICAgY29udGV4dC5wdXRJbWFnZURhdGEocGl4ZWxEYXRhLCAwLCAwKTtcbn07XG5cbi8qKlxuICogUm91bmRzIHRoZSBzcGVjaWZpZWQgY29sb3IgYWNjb3JkaW5nIHRvIHRoZSBDYW52YXNUaW50ZXIuY2FjaGVTdGVwc1BlckNvbG9yQ2hhbm5lbC5cbiAqXG4gKiBAcGFyYW0gY29sb3Ige251bWJlcn0gdGhlIGNvbG9yIHRvIHJvdW5kLCBzaG91bGQgYmUgYSBoZXggY29sb3JcbiAqL1xuQ2FudmFzVGludGVyLnJvdW5kQ29sb3IgPSBmdW5jdGlvbiAoY29sb3IpXG57XG4gICAgdmFyIHN0ZXAgPSBDYW52YXNUaW50ZXIuY2FjaGVTdGVwc1BlckNvbG9yQ2hhbm5lbDtcblxuICAgIHZhciByZ2JWYWx1ZXMgPSB1dGlscy5oZXgycmdiKGNvbG9yKTtcblxuICAgIHJnYlZhbHVlc1swXSA9IE1hdGgubWluKDI1NSwgKHJnYlZhbHVlc1swXSAvIHN0ZXApICogc3RlcCk7XG4gICAgcmdiVmFsdWVzWzFdID0gTWF0aC5taW4oMjU1LCAocmdiVmFsdWVzWzFdIC8gc3RlcCkgKiBzdGVwKTtcbiAgICByZ2JWYWx1ZXNbMl0gPSBNYXRoLm1pbigyNTUsIChyZ2JWYWx1ZXNbMl0gLyBzdGVwKSAqIHN0ZXApO1xuXG4gICAgcmV0dXJuIHV0aWxzLnJnYjJoZXgocmdiVmFsdWVzKTtcbn07XG5cbi8qKlxuICogTnVtYmVyIG9mIHN0ZXBzIHdoaWNoIHdpbGwgYmUgdXNlZCBhcyBhIGNhcCB3aGVuIHJvdW5kaW5nIGNvbG9ycy5cbiAqXG4gKiBAbWVtYmVyXG4gKi9cbkNhbnZhc1RpbnRlci5jYWNoZVN0ZXBzUGVyQ29sb3JDaGFubmVsID0gODtcblxuLyoqXG4gKiBUaW50IGNhY2hlIGJvb2xlYW4gZmxhZy5cbiAqXG4gKiBAbWVtYmVyXG4gKi9cbkNhbnZhc1RpbnRlci5jb252ZXJ0VGludFRvSW1hZ2UgPSBmYWxzZTtcblxuLyoqXG4gKiBXaGV0aGVyIG9yIG5vdCB0aGUgQ2FudmFzIEJsZW5kTW9kZXMgYXJlIHN1cHBvcnRlZCwgY29uc2VxdWVudGx5IHRoZSBhYmlsaXR5IHRvIHRpbnQgdXNpbmcgdGhlIG11bHRpcGx5IG1ldGhvZC5cbiAqXG4gKiBAbWVtYmVyXG4gKi9cbkNhbnZhc1RpbnRlci5jYW5Vc2VNdWx0aXBseSA9IHV0aWxzLmNhblVzZU5ld0NhbnZhc0JsZW5kTW9kZXMoKTtcblxuLyoqXG4gKiBUaGUgdGludGluZyBtZXRob2QgdGhhdCB3aWxsIGJlIHVzZWQuXG4gKlxuICovXG5DYW52YXNUaW50ZXIudGludE1ldGhvZCA9IENhbnZhc1RpbnRlci5jYW5Vc2VNdWx0aXBseSA/IENhbnZhc1RpbnRlci50aW50V2l0aE11bHRpcGx5IDogIENhbnZhc1RpbnRlci50aW50V2l0aFBlclBpeGVsO1xuIiwidmFyIEdMVGV4dHVyZSA9IHJlcXVpcmUoJ3BpeGktZ2wtY29yZScpLkdMVGV4dHVyZSxcblx0dXRpbHMgPSByZXF1aXJlKCcuLi8uLi91dGlscycpO1xuXG4vKipcbiAqIEhlbHBlciBjbGFzcyB0byBjcmVhdGUgYSB3ZWJHTCBUZXh0dXJlXG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIGdsIHtXZWJHTFJlbmRlcmluZ0NvbnRleHR9XG4gKi9cblxudmFyIFRleHR1cmVNYW5hZ2VyID0gZnVuY3Rpb24oZ2wpXG57XG5cdHRoaXMuZ2wgPSBnbDtcblxuXHQvLyB0cmFjayB0ZXh0dXJlcyBpbiB0aGUgcmVuZGVyZXIgc28gd2UgY2FuIG5vIGxvbmdlciBsaXN0ZW4gdG8gdGhlbSBvbiBkZXN0cnVjdGlvbi5cblx0dGhpcy5fbWFuYWdlZFRleHR1cmVzID0gW107XG4gICAgdGhpcy5nbFRleHR1cmVzID0ge307XG5cbn1cblxuVGV4dHVyZU1hbmFnZXIucHJvdG90eXBlLmJpbmRUZXh0dXJlID0gZnVuY3Rpb24odGV4dHVyZSlcbntcblxufVxuXG5cblRleHR1cmVNYW5hZ2VyLnByb3RvdHlwZS5nZXRUZXh0dXJlID0gZnVuY3Rpb24odGV4dHVyZSlcbntcblxufVxuXG4vKipcbiAqIFVwZGF0ZXMgYW5kL29yIENyZWF0ZXMgYSBXZWJHTCB0ZXh0dXJlIGZvciB0aGUgcmVuZGVyZXIncyBjb250ZXh0LlxuICpcbiAqIEBwYXJhbSB0ZXh0dXJlIHtQSVhJLkJhc2VUZXh0dXJlfFBJWEkuVGV4dHVyZX0gdGhlIHRleHR1cmUgdG8gdXBkYXRlXG4gKi9cblRleHR1cmVNYW5hZ2VyLnByb3RvdHlwZS51cGRhdGVUZXh0dXJlID0gZnVuY3Rpb24odGV4dHVyZSlcbntcblx0dGV4dHVyZSA9IHRleHR1cmUuYmFzZVRleHR1cmUgfHwgdGV4dHVyZTtcblxuXHRpZiAoIXRleHR1cmUuaGFzTG9hZGVkKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIFxuICAgIHZhciBnbCA9IHRoaXMuZ2w7XG4gICAgdmFyIGdsVGV4dHVyZSA9IHRoaXMuZ2xUZXh0dXJlc1t0ZXh0dXJlLnVpZF0vL3RleHR1cmUuX2dsVGV4dHVyZXNbZ2wuaWRdO1xuXG4gICAgaWYgKCFnbFRleHR1cmUpXG4gICAge1xuICAgICAgICBnbFRleHR1cmUgPSBuZXcgR0xUZXh0dXJlKGdsKTtcbiAgICAgICAgZ2xUZXh0dXJlLnByZW11bHRpcGx5QWxwaGEgPSB0cnVlXG4gICAgICAgIHRleHR1cmUuX2dsVGV4dHVyZXNbZ2wuaWRdID0gZ2xUZXh0dXJlO1xuXG4gICAgICAgLy8gdGhpcy5nbFRleHR1cmVzW3RleHR1cmUudWlkXSA9IGdsVGV4dHVyZTtcblxuICAgICAgICB0ZXh0dXJlLm9uKCd1cGRhdGUnLCB0aGlzLnVwZGF0ZVRleHR1cmUsIHRoaXMpO1xuICAgICAgICB0ZXh0dXJlLm9uKCdkaXNwb3NlJywgdGhpcy5kZXN0cm95VGV4dHVyZSwgdGhpcyk7XG4gICAgICAgIFxuICAgICAgICB0aGlzLl9tYW5hZ2VkVGV4dHVyZXMucHVzaCh0ZXh0dXJlKTtcbiAgICB9XG5cbiAgICBnbFRleHR1cmUudXBsb2FkKHRleHR1cmUuc291cmNlKTtcbiAgICBcbiAgICAvL1RPRE8gY2hlY2sgaXMgcG93ZXIgb2YgdHdvLi5cbiAgICBnbFRleHR1cmUuZW5hYmxlV3JhcENsYW1wKCk7XG5cblxuICAgIC8vIFRPRE8gY2hlY2sgZm9yIHNjYWxpbmcgdHlwZVxuICAgIGdsVGV4dHVyZS5lbmFibGVMaW5lYXJTY2FsaW5nKCk7XG5cbiAgICByZXR1cm4gIHRleHR1cmUuX2dsVGV4dHVyZXNbZ2wuaWRdO1xufVxuXG4vKipcbiAqIERlbGV0ZXMgdGhlIHRleHR1cmUgZnJvbSBXZWJHTFxuICpcbiAqIEBwYXJhbSB0ZXh0dXJlIHtQSVhJLkJhc2VUZXh0dXJlfFBJWEkuVGV4dHVyZX0gdGhlIHRleHR1cmUgdG8gZGVzdHJveVxuICovXG5UZXh0dXJlTWFuYWdlci5wcm90b3R5cGUuZGVzdHJveVRleHR1cmUgPSBmdW5jdGlvbih0ZXh0dXJlLCBfc2tpcFJlbW92ZSlcbntcblx0dGV4dHVyZSA9IHRleHR1cmUuYmFzZVRleHR1cmUgfHwgdGV4dHVyZTtcblxuICAgIGlmICghdGV4dHVyZS5oYXNMb2FkZWQpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHRleHR1cmUuX2dsVGV4dHVyZXNbdGhpcy5nbC5pZF0pXG4gICAge1xuICAgICAgICB0ZXh0dXJlLl9nbFRleHR1cmVzW3RoaXMuZ2wuaWRdLmRlc3Ryb3koKTtcbiAgICAgICAgdGV4dHVyZS5vZmYoJ3VwZGF0ZScsIHRoaXMudXBkYXRlVGV4dHVyZSwgdGhpcyk7XG4gICAgICAgIHRleHR1cmUub2ZmKCdkaXNwb3NlJywgdGhpcy5kZXN0cm95VGV4dHVyZSwgdGhpcyk7XG5cblxuICAgICAgICBkZWxldGUgdGV4dHVyZS5fZ2xUZXh0dXJlc1t0aGlzLmdsLmlkXTtcblxuICAgICAgICBpZiAoIV9za2lwUmVtb3ZlKVxuICAgICAgICB7XG4gICAgICAgICAgICB2YXIgaSA9IHRoaXMuX21hbmFnZWRUZXh0dXJlcy5pbmRleE9mKHRleHR1cmUpO1xuICAgICAgICAgICAgaWYgKGkgIT09IC0xKSB7XG4gICAgICAgICAgICAgICAgdXRpbHMucmVtb3ZlSXRlbXModGhpcy5fbWFuYWdlZFRleHR1cmVzLCBpLCAxKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn1cblxuVGV4dHVyZU1hbmFnZXIucHJvdG90eXBlLnJlbW92ZUFsbCA9IGZ1bmN0aW9uKClcbntcblx0Ly8gZW1wdHkgYWxsIHRoZSBvbGQgZ2wgdGV4dHVyZXMgYXMgdGhleSBhcmUgdXNlbGVzcyBub3dcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuX21hbmFnZWRUZXh0dXJlcy5sZW5ndGg7ICsraSlcbiAgICB7XG4gICAgICAgIHZhciB0ZXh0dXJlID0gdGhpcy5fbWFuYWdlZFRleHR1cmVzW2ldO1xuICAgICAgICBpZiAodGV4dHVyZS5fZ2xUZXh0dXJlc1t0aGlzLmdsLmlkXSlcbiAgICAgICAge1xuICAgICAgICAgICAgZGVsZXRlIHRleHR1cmUuX2dsVGV4dHVyZXNbdGhpcy5nbC5pZF07XG4gICAgICAgIH1cbiAgICB9XG59XG5cblRleHR1cmVNYW5hZ2VyLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24oKVxue1xuICAgIC8vIGRlc3Ryb3kgbWFuYWdlZCB0ZXh0dXJlc1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5fbWFuYWdlZFRleHR1cmVzLmxlbmd0aDsgKytpKVxuICAgIHtcbiAgICAgICAgdmFyIHRleHR1cmUgPSB0aGlzLl9tYW5hZ2VkVGV4dHVyZXNbaV07XG4gICAgICAgIHRoaXMuZGVzdHJveVRleHR1cmUodGV4dHVyZSwgdHJ1ZSk7XG4gICAgICAgIHRleHR1cmUub2ZmKCd1cGRhdGUnLCB0aGlzLnVwZGF0ZVRleHR1cmUsIHRoaXMpO1xuICAgICAgICB0ZXh0dXJlLm9mZignZGlzcG9zZScsIHRoaXMuZGVzdHJveVRleHR1cmUsIHRoaXMpO1xuICAgIH1cblxuICAgIHRoaXMuX21hbmFnZWRUZXh0dXJlcyA9IG51bGw7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gVGV4dHVyZU1hbmFnZXI7XG5cbiIsInZhciBTeXN0ZW1SZW5kZXJlciA9IHJlcXVpcmUoJy4uL1N5c3RlbVJlbmRlcmVyJyksXG4gICAgU2hhZGVyTWFuYWdlciA9IHJlcXVpcmUoJy4vbWFuYWdlcnMvU2hhZGVyTWFuYWdlcicpLFxuICAgIE1hc2tNYW5hZ2VyID0gcmVxdWlyZSgnLi9tYW5hZ2Vycy9NYXNrTWFuYWdlcicpLFxuICAgIFN0ZW5jaWxNYW5hZ2VyID0gcmVxdWlyZSgnLi9tYW5hZ2Vycy9TdGVuY2lsTWFuYWdlcicpLFxuICAgIEZpbHRlck1hbmFnZXIgPSByZXF1aXJlKCcuL21hbmFnZXJzL0ZpbHRlck1hbmFnZXInKSxcbiAgICBCbGVuZE1vZGVNYW5hZ2VyID0gcmVxdWlyZSgnLi9tYW5hZ2Vycy9CbGVuZE1vZGVNYW5hZ2VyJyksXG4gICAgUmVuZGVyVGFyZ2V0ID0gcmVxdWlyZSgnLi91dGlscy9SZW5kZXJUYXJnZXQnKSxcbiAgICBPYmplY3RSZW5kZXJlciA9IHJlcXVpcmUoJy4vdXRpbHMvT2JqZWN0UmVuZGVyZXInKSxcbiAgICBGWEFBRmlsdGVyID0gcmVxdWlyZSgnLi9maWx0ZXJzL0ZYQUFGaWx0ZXInKSxcbiAgICBUZXh0dXJlTWFuYWdlciA9IHJlcXVpcmUoJy4vVGV4dHVyZU1hbmFnZXInKSxcbiAgICBjcmVhdGVDb250ZXh0ID0gcmVxdWlyZSgncGl4aS1nbC1jb3JlJykuY3JlYXRlQ29udGV4dCxcbiAgICBtYXBXZWJHTEJsZW5kTW9kZXNUb1BpeGkgPSByZXF1aXJlKCcuL3V0aWxzL21hcFdlYkdMQmxlbmRNb2Rlc1RvUGl4aScpLFxuICAgIG1hcFdlYkdMRHJhd01vZGVzVG9QaXhpID0gcmVxdWlyZSgnLi91dGlscy9tYXBXZWJHTERyYXdNb2Rlc1RvUGl4aScpLFxuICAgIHV0aWxzID0gcmVxdWlyZSgnLi4vLi4vdXRpbHMnKSxcbiAgICBDT05TVCA9IHJlcXVpcmUoJy4uLy4uL2NvbnN0Jyk7XG5cbi8qKlxuICogVGhlIFdlYkdMUmVuZGVyZXIgZHJhd3MgdGhlIHNjZW5lIGFuZCBhbGwgaXRzIGNvbnRlbnQgb250byBhIHdlYkdMIGVuYWJsZWQgY2FudmFzLiBUaGlzIHJlbmRlcmVyXG4gKiBzaG91bGQgYmUgdXNlZCBmb3IgYnJvd3NlcnMgdGhhdCBzdXBwb3J0IHdlYkdMLiBUaGlzIFJlbmRlciB3b3JrcyBieSBhdXRvbWF0aWNhbGx5IG1hbmFnaW5nIHdlYkdMQmF0Y2hzLlxuICogU28gbm8gbmVlZCBmb3IgU3ByaXRlIEJhdGNoZXMgb3IgU3ByaXRlIENsb3Vkcy5cbiAqIERvbid0IGZvcmdldCB0byBhZGQgdGhlIHZpZXcgdG8geW91ciBET00gb3IgeW91IHdpbGwgbm90IHNlZSBhbnl0aGluZyA6KVxuICpcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqIEBleHRlbmRzIFBJWEkuU3lzdGVtUmVuZGVyZXJcbiAqIEBwYXJhbSBbd2lkdGg9MF0ge251bWJlcn0gdGhlIHdpZHRoIG9mIHRoZSBjYW52YXMgdmlld1xuICogQHBhcmFtIFtoZWlnaHQ9MF0ge251bWJlcn0gdGhlIGhlaWdodCBvZiB0aGUgY2FudmFzIHZpZXdcbiAqIEBwYXJhbSBbb3B0aW9uc10ge29iamVjdH0gVGhlIG9wdGlvbmFsIHJlbmRlcmVyIHBhcmFtZXRlcnNcbiAqIEBwYXJhbSBbb3B0aW9ucy52aWV3XSB7SFRNTENhbnZhc0VsZW1lbnR9IHRoZSBjYW52YXMgdG8gdXNlIGFzIGEgdmlldywgb3B0aW9uYWxcbiAqIEBwYXJhbSBbb3B0aW9ucy50cmFuc3BhcmVudD1mYWxzZV0ge2Jvb2xlYW59IElmIHRoZSByZW5kZXIgdmlldyBpcyB0cmFuc3BhcmVudCwgZGVmYXVsdCBmYWxzZVxuICogQHBhcmFtIFtvcHRpb25zLmF1dG9SZXNpemU9ZmFsc2VdIHtib29sZWFufSBJZiB0aGUgcmVuZGVyIHZpZXcgaXMgYXV0b21hdGljYWxseSByZXNpemVkLCBkZWZhdWx0IGZhbHNlXG4gKiBAcGFyYW0gW29wdGlvbnMuYW50aWFsaWFzPWZhbHNlXSB7Ym9vbGVhbn0gc2V0cyBhbnRpYWxpYXMuIElmIG5vdCBhdmFpbGFibGUgbmF0aXZlbHkgdGhlbiBGWEFBIGFudGlhbGlhc2luZyBpcyB1c2VkXG4gKiBAcGFyYW0gW29wdGlvbnMuZm9yY2VGWEFBPWZhbHNlXSB7Ym9vbGVhbn0gZm9yY2VzIEZYQUEgYW50aWFsaWFzaW5nIHRvIGJlIHVzZWQgb3ZlciBuYXRpdmUuIEZYQUEgaXMgZmFzdGVyLCBidXQgbWF5IG5vdCBhbHdheXMgbG9vayBhcyBncmVhdFxuICogQHBhcmFtIFtvcHRpb25zLnJlc29sdXRpb249MV0ge251bWJlcn0gdGhlIHJlc29sdXRpb24gb2YgdGhlIHJlbmRlcmVyIHJldGluYSB3b3VsZCBiZSAyXG4gKiBAcGFyYW0gW29wdGlvbnMuY2xlYXJCZWZvcmVSZW5kZXI9dHJ1ZV0ge2Jvb2xlYW59IFRoaXMgc2V0cyBpZiB0aGUgQ2FudmFzUmVuZGVyZXIgd2lsbCBjbGVhciB0aGUgY2FudmFzIG9yXG4gKiAgICAgIG5vdCBiZWZvcmUgdGhlIG5ldyByZW5kZXIgcGFzcy4gSWYgeW91IHdpc2ggdG8gc2V0IHRoaXMgdG8gZmFsc2UsIHlvdSAqbXVzdCogc2V0IHByZXNlcnZlRHJhd2luZ0J1ZmZlciB0byBgdHJ1ZWAuXG4gKiBAcGFyYW0gW29wdGlvbnMucHJlc2VydmVEcmF3aW5nQnVmZmVyPWZhbHNlXSB7Ym9vbGVhbn0gZW5hYmxlcyBkcmF3aW5nIGJ1ZmZlciBwcmVzZXJ2YXRpb24sIGVuYWJsZSB0aGlzIGlmXG4gKiAgICAgIHlvdSBuZWVkIHRvIGNhbGwgdG9EYXRhVXJsIG9uIHRoZSB3ZWJnbCBjb250ZXh0LlxuICogQHBhcmFtIFtvcHRpb25zLnJvdW5kUGl4ZWxzPWZhbHNlXSB7Ym9vbGVhbn0gSWYgdHJ1ZSBQaXhpIHdpbGwgTWF0aC5mbG9vcigpIHgveSB2YWx1ZXMgd2hlbiByZW5kZXJpbmcsIHN0b3BwaW5nIHBpeGVsIGludGVycG9sYXRpb24uXG4gKi9cbmZ1bmN0aW9uIFdlYkdMUmVuZGVyZXIod2lkdGgsIGhlaWdodCwgb3B0aW9ucylcbntcbiAgICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcblxuICAgIFN5c3RlbVJlbmRlcmVyLmNhbGwodGhpcywgJ1dlYkdMJywgd2lkdGgsIGhlaWdodCwgb3B0aW9ucyk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgdHlwZSBvZiB0aGlzIHJlbmRlcmVyIGFzIGEgc3RhbmRhcmRpc2VkIGNvbnN0XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9Ly9cbiAgICAgKlxuICAgICAqL1xuICAgIHRoaXMudHlwZSA9IENPTlNULlJFTkRFUkVSX1RZUEUuV0VCR0w7XG5cbiAgICB0aGlzLmhhbmRsZUNvbnRleHRMb3N0ID0gdGhpcy5oYW5kbGVDb250ZXh0TG9zdC5iaW5kKHRoaXMpO1xuICAgIHRoaXMuaGFuZGxlQ29udGV4dFJlc3RvcmVkID0gdGhpcy5oYW5kbGVDb250ZXh0UmVzdG9yZWQuYmluZCh0aGlzKTtcblxuICAgIHRoaXMudmlldy5hZGRFdmVudExpc3RlbmVyKCd3ZWJnbGNvbnRleHRsb3N0JywgdGhpcy5oYW5kbGVDb250ZXh0TG9zdCwgZmFsc2UpO1xuICAgIHRoaXMudmlldy5hZGRFdmVudExpc3RlbmVyKCd3ZWJnbGNvbnRleHRyZXN0b3JlZCcsIHRoaXMuaGFuZGxlQ29udGV4dFJlc3RvcmVkLCBmYWxzZSk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgb3B0aW9ucyBwYXNzZWQgaW4gdG8gY3JlYXRlIGEgbmV3IHdlYmdsIGNvbnRleHQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtvYmplY3R9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9jb250ZXh0T3B0aW9ucyA9IHtcbiAgICAgICAgYWxwaGE6IHRoaXMudHJhbnNwYXJlbnQsXG4gICAgICAgIGFudGlhbGlhczogb3B0aW9ucy5hbnRpYWxpYXMsXG4gICAgICAgIHByZW11bHRpcGxpZWRBbHBoYTogdGhpcy50cmFuc3BhcmVudCAmJiB0aGlzLnRyYW5zcGFyZW50ICE9PSAnbm90TXVsdGlwbGllZCcsXG4gICAgICAgIHN0ZW5jaWw6IHRydWUsXG4gICAgICAgIHByZXNlcnZlRHJhd2luZ0J1ZmZlcjogb3B0aW9ucy5wcmVzZXJ2ZURyYXdpbmdCdWZmZXJcbiAgICB9O1xuXG4gICAgdGhpcy5fYmFja2dyb3VuZENvbG9yUmdiYVszXSA9IHRoaXMudHJhbnNwYXJlbnQgPyAwIDogMTtcblxuICAgIC8qKlxuICAgICAqIERlYWxzIHdpdGggbWFuYWdpbmcgdGhlIHNoYWRlciBwcm9ncmFtcyBhbmQgdGhlaXIgYXR0cmlicy5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuU2hhZGVyTWFuYWdlcn1cbiAgICAgKi9cbiAgICB0aGlzLnNoYWRlck1hbmFnZXIgPSBuZXcgU2hhZGVyTWFuYWdlcih0aGlzKTtcblxuICAgIC8qKlxuICAgICAqIE1hbmFnZXMgdGhlIG1hc2tzIHVzaW5nIHRoZSBzdGVuY2lsIGJ1ZmZlci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuTWFza01hbmFnZXJ9XG4gICAgICovXG4gICAgdGhpcy5tYXNrTWFuYWdlciA9IG5ldyBNYXNrTWFuYWdlcih0aGlzKTtcblxuICAgIC8qKlxuICAgICAqIE1hbmFnZXMgdGhlIHN0ZW5jaWwgYnVmZmVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5TdGVuY2lsTWFuYWdlcn1cbiAgICAgKi9cbiAgICB0aGlzLnN0ZW5jaWxNYW5hZ2VyID0gbmV3IFN0ZW5jaWxNYW5hZ2VyKHRoaXMpO1xuXG4gICAgLyoqXG4gICAgICogTWFuYWdlcyB0aGUgZmlsdGVycy5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuRmlsdGVyTWFuYWdlcn1cbiAgICAgKi9cbiAgICB0aGlzLmZpbHRlck1hbmFnZXIgPSBuZXcgRmlsdGVyTWFuYWdlcih0aGlzKTtcblxuICAgIC8qKlxuICAgICAqIE1hbmFnZXMgdGhlIGJsZW5kTW9kZXNcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuQmxlbmRNb2RlTWFuYWdlcn1cbiAgICAgKi9cbiAgICB0aGlzLmJsZW5kTW9kZU1hbmFnZXIgPSBuZXcgQmxlbmRNb2RlTWFuYWdlcih0aGlzKTtcblxuICAgIFxuICAgIC8qKlxuICAgICAqIFRoZSBjdXJyZW50bHkgYWN0aXZlIE9iamVjdFJlbmRlcmVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5PYmplY3RSZW5kZXJlcn1cbiAgICAgKi9cbiAgICB0aGlzLmN1cnJlbnRSZW5kZXJlciA9IG5ldyBPYmplY3RSZW5kZXJlcih0aGlzKTtcblxuICAgIHRoaXMuaW5pdFBsdWdpbnMoKTtcblxuICAgIC8vIGluaXRpYWxpemUgdGhlIGNvbnRleHQgc28gaXQgaXMgcmVhZHkgZm9yIHRoZSBtYW5hZ2Vycy5cbiAgICB0aGlzLmdsID0gY3JlYXRlQ29udGV4dCh0aGlzLnZpZXcsIHRoaXMuX2NvbnRleHRPcHRpb25zKTtcblxuICAgIHRoaXMuX2luaXRDb250ZXh0KCk7XG5cbiAgICAvLyBtYXAgc29tZSB3ZWJHTCBibGVuZCBhbmQgZHJhd21vZGVzLi5cbiAgICB0aGlzLmJsZW5kTW9kZXMgPSBtYXBXZWJHTEJsZW5kTW9kZXNUb1BpeGkoZ2wpO1xuICAgIHRoaXMuZHJhd01vZGVzID0gbWFwV2ViR0xEcmF3TW9kZXNUb1BpeGkoZ2wpXG5cbiAgICB0aGlzLl9hY3RpdmVTaGFkZXIgPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogSG9sZHMgdGhlIGN1cnJlbnQgcmVuZGVyIHRhcmdldFxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5SZW5kZXJUYXJnZXR9XG4gICAgICovXG4gICAgdGhpcy5fYWN0aXZlUmVuZGVyVGFyZ2V0ID0gbnVsbDtcbiAgICB0aGlzLl9hY3RpdmVUZXh0dXJlTG9jYXRpb24gPSBudWxsO1xuICAgIHRoaXMuX2FjdGl2ZVRleHR1cmUgPSBudWxsO1xufVxuXG4vLyBjb25zdHJ1Y3RvclxuV2ViR0xSZW5kZXJlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFN5c3RlbVJlbmRlcmVyLnByb3RvdHlwZSk7XG5XZWJHTFJlbmRlcmVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFdlYkdMUmVuZGVyZXI7XG5tb2R1bGUuZXhwb3J0cyA9IFdlYkdMUmVuZGVyZXI7XG51dGlscy5wbHVnaW5UYXJnZXQubWl4aW4oV2ViR0xSZW5kZXJlcik7XG5cbi8qKlxuICogQ3JlYXRlcyB0aGUgV2ViR0wgY29udGV4dFxuICpcbiAqIEBwcml2YXRlXG4gKi9cbldlYkdMUmVuZGVyZXIucHJvdG90eXBlLl9pbml0Q29udGV4dCA9IGZ1bmN0aW9uICgpXG57XG4gICAgdmFyIGdsID0gdGhpcy5nbDtcblxuICAgIC8vIGNyZWF0ZSBhIHRleHR1cmUgbWFuYWdlci4uLlxuICAgIHRoaXMudGV4dHVyZU1hbmFnZXIgPSBuZXcgVGV4dHVyZU1hbmFnZXIoZ2wpO1xuXG4gICAgLy8gc2V0IHVwIHRoZSBkZWZhdWx0IHBpeGkgc2V0dGluZ3MuLlxuICAgIGdsLmRpc2FibGUoZ2wuREVQVEhfVEVTVCk7XG4gICAgZ2wuZGlzYWJsZShnbC5DVUxMX0ZBQ0UpO1xuICAgIGdsLmVuYWJsZShnbC5CTEVORCk7XG5cblxuICAgIHRoaXMucm9vdFJlbmRlclRhcmdldCA9IG5ldyBSZW5kZXJUYXJnZXQoZ2wsIHRoaXMud2lkdGgsIHRoaXMuaGVpZ2h0LCBudWxsLCB0aGlzLnJlc29sdXRpb24sIHRydWUpO1xuICAgIHRoaXMucm9vdFJlbmRlclRhcmdldC5jbGVhckNvbG9yID0gdGhpcy5fYmFja2dyb3VuZENvbG9yUmdiYTtcbiAgICBcbiAgICB0aGlzLmJpbmRSZW5kZXJUYXJnZXQodGhpcy5yb290UmVuZGVyVGFyZ2V0KTtcblxuICAgIHRoaXMuZW1pdCgnY29udGV4dCcsIGdsKTtcblxuICAgIC8vIHNldHVwIHRoZSB3aWR0aC9oZWlnaHQgcHJvcGVydGllcyBhbmQgZ2wgdmlld3BvcnRcbiAgICB0aGlzLnJlc2l6ZSh0aGlzLndpZHRoLCB0aGlzLmhlaWdodCk7ICAgIFxufTtcblxuLyoqXG4gKiBSZW5kZXJzIHRoZSBvYmplY3QgdG8gaXRzIHdlYkdMIHZpZXdcbiAqXG4gKiBAcGFyYW0gb2JqZWN0IHtQSVhJLkRpc3BsYXlPYmplY3R9IHRoZSBvYmplY3QgdG8gYmUgcmVuZGVyZWRcbiAqL1xuV2ViR0xSZW5kZXJlci5wcm90b3R5cGUucmVuZGVyID0gZnVuY3Rpb24gKGRpc3BsYXlPYmplY3QpXG57XG4gICAgdGhpcy5lbWl0KCdwcmVyZW5kZXInKTtcblxuICAgIC8vIG5vIHBvaW50IHJlbmRlcmluZyBpZiBvdXIgY29udGV4dCBoYXMgYmVlbiBibG93biB1cCFcbiAgICBpZiAodGhpcy5nbC5pc0NvbnRleHRMb3N0KCkpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5fbGFzdE9iamVjdFJlbmRlcmVkID0gZGlzcGxheU9iamVjdDtcblxuICAgIHZhciBjYWNoZVBhcmVudCA9IGRpc3BsYXlPYmplY3QucGFyZW50O1xuICAgIGRpc3BsYXlPYmplY3QucGFyZW50ID0gdGhpcy5fdGVtcERpc3BsYXlPYmplY3RQYXJlbnQ7XG4gICAgLy8gdXBkYXRlIHRoZSBzY2VuZSBncmFwaFxuICAgIGRpc3BsYXlPYmplY3QudXBkYXRlVHJhbnNmb3JtKCk7XG4gICAgZGlzcGxheU9iamVjdC5wYXJlbnQgPSBjYWNoZVBhcmVudDtcblxuICAgIHRoaXMucmVuZGVyRGlzcGxheU9iamVjdChkaXNwbGF5T2JqZWN0LCB0aGlzLnJvb3RSZW5kZXJUYXJnZXQsIHRoaXMuY2xlYXJCZWZvcmVSZW5kZXIpOy8vdGhpcy5wcm9qZWN0aW9uKTtcblxuICAgIHRoaXMuZW1pdCgncG9zdHJlbmRlcicpO1xufTtcblxuLyoqXG4gKiBSZW5kZXJzIGEgRGlzcGxheSBPYmplY3QuXG4gKlxuICogQHBhcmFtIGRpc3BsYXlPYmplY3Qge1BJWEkuRGlzcGxheU9iamVjdH0gVGhlIERpc3BsYXlPYmplY3QgdG8gcmVuZGVyXG4gKiBAcGFyYW0gcmVuZGVyVGFyZ2V0IHtQSVhJLlJlbmRlclRhcmdldH0gVGhlIHJlbmRlciB0YXJnZXQgdG8gdXNlIHRvIHJlbmRlciB0aGlzIGRpc3BsYXkgb2JqZWN0XG4gKlxuICovXG5XZWJHTFJlbmRlcmVyLnByb3RvdHlwZS5yZW5kZXJEaXNwbGF5T2JqZWN0ID0gZnVuY3Rpb24gKGRpc3BsYXlPYmplY3QsIHJlbmRlclRhcmdldCwgY2xlYXIpLy9wcm9qZWN0aW9uLCBidWZmZXIpXG57XG4gICAgdGhpcy5iaW5kUmVuZGVyVGFyZ2V0KHJlbmRlclRhcmdldCk7XG5cbiAgICBpZihjbGVhcilcbiAgICB7XG4gICAgICAgIHJlbmRlclRhcmdldC5jbGVhcigpO1xuICAgIH1cblxuICAgIC8vIHN0YXJ0IHRoZSBmaWx0ZXIgbWFuYWdlclxuICAgIHRoaXMuZmlsdGVyTWFuYWdlci5zZXRGaWx0ZXJTdGFjayggcmVuZGVyVGFyZ2V0LmZpbHRlclN0YWNrICk7XG5cbiAgICAvLyByZW5kZXIgdGhlIHNjZW5lIVxuICAgIGRpc3BsYXlPYmplY3QucmVuZGVyV2ViR0wodGhpcyk7XG5cbiAgICAvLyBmaW5pc2ggdGhlIGN1cnJlbnQgcmVuZGVyZXIuLlxuICAgIHRoaXMuY3VycmVudFJlbmRlcmVyLmZsdXNoKCk7XG59O1xuXG4vKipcbiAqIENoYW5nZXMgdGhlIGN1cnJlbnQgcmVuZGVyZXIgdG8gdGhlIG9uZSBnaXZlbiBpbiBwYXJhbWV0ZXJcbiAqXG4gKiBAcGFyYW0gb2JqZWN0UmVuZGVyZXIge1BJWEkuT2JqZWN0UmVuZGVyZXJ9IFRoZSBvYmplY3QgcmVuZGVyZXIgdG8gdXNlLlxuICovXG5XZWJHTFJlbmRlcmVyLnByb3RvdHlwZS5zZXRPYmplY3RSZW5kZXJlciA9IGZ1bmN0aW9uIChvYmplY3RSZW5kZXJlcilcbntcbiAgICBpZiAodGhpcy5jdXJyZW50UmVuZGVyZXIgPT09IG9iamVjdFJlbmRlcmVyKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuY3VycmVudFJlbmRlcmVyLnN0b3AoKTtcbiAgICB0aGlzLmN1cnJlbnRSZW5kZXJlciA9IG9iamVjdFJlbmRlcmVyO1xuICAgIHRoaXMuY3VycmVudFJlbmRlcmVyLnN0YXJ0KCk7XG59O1xuXG4vKipcbiAqIFJlc2l6ZXMgdGhlIHdlYkdMIHZpZXcgdG8gdGhlIHNwZWNpZmllZCB3aWR0aCBhbmQgaGVpZ2h0LlxuICpcbiAqIEBwYXJhbSB3aWR0aCB7bnVtYmVyfSB0aGUgbmV3IHdpZHRoIG9mIHRoZSB3ZWJHTCB2aWV3XG4gKiBAcGFyYW0gaGVpZ2h0IHtudW1iZXJ9IHRoZSBuZXcgaGVpZ2h0IG9mIHRoZSB3ZWJHTCB2aWV3XG4gKi9cbldlYkdMUmVuZGVyZXIucHJvdG90eXBlLnJlc2l6ZSA9IGZ1bmN0aW9uICh3aWR0aCwgaGVpZ2h0KVxue1xuICAgIFN5c3RlbVJlbmRlcmVyLnByb3RvdHlwZS5yZXNpemUuY2FsbCh0aGlzLCB3aWR0aCwgaGVpZ2h0KTtcblxuICAgIHRoaXMuZmlsdGVyTWFuYWdlci5yZXNpemUod2lkdGgsIGhlaWdodCk7XG4gICAgdGhpcy5yb290UmVuZGVyVGFyZ2V0LnJlc2l6ZSh3aWR0aCwgaGVpZ2h0KTtcblxuICAgIGlmKHRoaXMuY3VycmVudFJlbmRlclRhcmdldCA9PT0gdGhpcy5yZW5kZXJUYXJnZXQpXG4gICAge1xuICAgICAgICB0aGlzLnJvb3RSZW5kZXJUYXJnZXQuYWN0aXZhdGUoKTtcbiAgICB9XG59O1xuXG4vKipcbiAqIENoYW5nZXMgdGhlIGN1cnJlbnQgcmVuZGVyIHRhcmdldCB0byB0aGUgb25lIGdpdmVuIGluIHBhcmFtZXRlclxuICpcbiAqIEBwYXJhbSByZW5kZXJUYXJnZXQge1BJWEkuUmVuZGVyVGFyZ2V0fSB0aGUgbmV3IHJlbmRlciB0YXJnZXRcbiAqL1xuV2ViR0xSZW5kZXJlci5wcm90b3R5cGUuYmluZFJlbmRlclRhcmdldCA9IGZ1bmN0aW9uIChyZW5kZXJUYXJnZXQpLy9wcm9qZWN0aW9uLCBidWZmZXIpXG57XG4gICAgaWYocmVuZGVyVGFyZ2V0ICE9PSB0aGlzLl9hY3RpdmVSZW5kZXJUYXJnZXQpXG4gICAge1xuICAgICAgICB0aGlzLl9hY3RpdmVSZW5kZXJUYXJnZXQgPSByZW5kZXJUYXJnZXQ7XG5cbiAgICAgICAgaWYodGhpcy5fYWN0aXZlU2hhZGVyKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLl9hY3RpdmVTaGFkZXIudW5pZm9ybXMucHJvamVjdGlvbk1hdHJpeCA9IHJlbmRlclRhcmdldC5wcm9qZWN0aW9uTWF0cml4LnRvQXJyYXkodHJ1ZSk7XG4gICAgICAgIH1cblxuICAgICAgICByZW5kZXJUYXJnZXQuYWN0aXZhdGUoKTtcblxuICAgICAgICB0aGlzLnN0ZW5jaWxNYW5hZ2VyLnNldE1hc2tTdGFjayggcmVuZGVyVGFyZ2V0LnN0ZW5jaWxNYXNrU3RhY2sgKTtcbiAgICB9XG59XG5cbldlYkdMUmVuZGVyZXIucHJvdG90eXBlLmJpbmRTaGFkZXIgPSBmdW5jdGlvbiAoc2hhZGVyKS8vcHJvamVjdGlvbiwgYnVmZmVyKVxue1xuICAgIC8vVE9ETyBjYWNoZVxuICAgIGlmKHRoaXMuX2FjdGl2ZVNoYWRlciAhPT0gc2hhZGVyKVxuICAgIHtcbiAgICAgICAgdGhpcy5fYWN0aXZlU2hhZGVyID0gc2hhZGVyO1xuICAgICAgICBzaGFkZXIuYmluZCgpO1xuXG4gICAgICAgIC8vIGF1dG9tYXRpY2FsbHkgc2V0IHRoZSBwcm9qZWN0aW9uIG1hdHJpeFxuICAgICAgICBzaGFkZXIudW5pZm9ybXMucHJvamVjdGlvbk1hdHJpeCA9IHRoaXMuX2FjdGl2ZVJlbmRlclRhcmdldC5wcm9qZWN0aW9uTWF0cml4LnRvQXJyYXkodHJ1ZSk7XG4gICAgfVxufVxuXG5cbldlYkdMUmVuZGVyZXIucHJvdG90eXBlLmJpbmRUZXh0dXJlID0gZnVuY3Rpb24gKHRleHR1cmUsIGxvY2F0aW9uKVxue1xuICAgIHZhciBnbCA9IHRoaXMuZ2w7XG5cbiAgICAvL1RPRE8gdGVzdCBwZXJmIG9mIGNhY2hlP1xuICAgIGxvY2F0aW9uID0gbG9jYXRpb24gfHwgMDtcblxuICAgIGlmKHRoaXMuX2FjdGl2ZVRleHR1cmVMb2NhdGlvbiAhPT0gbG9jYXRpb24pLy9cbiAgICB7XG4gICAgICAgIHRoaXMuX2FjdGl2ZVRleHR1cmVMb2NhdGlvbiA9IGxvY2F0aW9uXG4gICAgICAgIGdsLmFjdGl2ZVRleHR1cmUoZ2wuVEVYVFVSRTAgKyBsb2NhdGlvbiApO1xuICAgIH1cblxuICAgIC8vVE9ETyAtIGNhbiB3ZSBjYWNoZSB0aGlzIHRleHR1cmUgdG9vP1xuICAgIHRoaXMuX2FjdGl2ZVRleHR1cmUgPSB0ZXh0dXJlOyAgICAgIFxuICAgIFxuICAgIGlmICghdGV4dHVyZS5fZ2xUZXh0dXJlc1tnbC5pZF0pXG4gICAge1xuICAgICAgICAvLyB0aGlzIHdpbGwgYWxzbyBiaW5kIHRoZSB0ZXh0dXJlLi5cbiAgICAgICAgdGhpcy50ZXh0dXJlTWFuYWdlci51cGRhdGVUZXh0dXJlKHRleHR1cmUpO1xuICAgIH1cbiAgICBlbHNlXG4gICAgeyAgIFxuICAgICAgICAvLyBiaW5kIHRoZSBjdXJyZW50IHRleHR1cmVcbiAgICAgICAgdGV4dHVyZS5fZ2xUZXh0dXJlc1tnbC5pZF0uYmluZCgpO1xuICAgIH1cbn1cblxuXG4vKipcbiAqIEhhbmRsZXMgYSBsb3N0IHdlYmdsIGNvbnRleHRcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5XZWJHTFJlbmRlcmVyLnByb3RvdHlwZS5oYW5kbGVDb250ZXh0TG9zdCA9IGZ1bmN0aW9uIChldmVudClcbntcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xufTtcblxuLyoqXG4gKiBIYW5kbGVzIGEgcmVzdG9yZWQgd2ViZ2wgY29udGV4dFxuICpcbiAqIEBwcml2YXRlXG4gKi9cbldlYkdMUmVuZGVyZXIucHJvdG90eXBlLmhhbmRsZUNvbnRleHRSZXN0b3JlZCA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy5faW5pdENvbnRleHQoKTtcbiAgICB0aGlzLnRleHR1cmVNYW5hZ2VyLnJlbW92ZUFsbCgpO1xufTtcblxuLyoqXG4gKiBSZW1vdmVzIGV2ZXJ5dGhpbmcgZnJvbSB0aGUgcmVuZGVyZXIgKGV2ZW50IGxpc3RlbmVycywgc3ByaXRlYmF0Y2gsIGV0Yy4uLilcbiAqXG4gKiBAcGFyYW0gW3JlbW92ZVZpZXc9ZmFsc2VdIHtib29sZWFufSBSZW1vdmVzIHRoZSBDYW52YXMgZWxlbWVudCBmcm9tIHRoZSBET00uXG4gKi9cbldlYkdMUmVuZGVyZXIucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAocmVtb3ZlVmlldylcbntcbiAgICB0aGlzLmRlc3Ryb3lQbHVnaW5zKCk7XG5cbiAgICAvLyByZW1vdmUgbGlzdGVuZXJzXG4gICAgdGhpcy52aWV3LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3dlYmdsY29udGV4dGxvc3QnLCB0aGlzLmhhbmRsZUNvbnRleHRMb3N0KTtcbiAgICB0aGlzLnZpZXcucmVtb3ZlRXZlbnRMaXN0ZW5lcignd2ViZ2xjb250ZXh0cmVzdG9yZWQnLCB0aGlzLmhhbmRsZUNvbnRleHRSZXN0b3JlZCk7XG5cbiAgICB0aGlzLnRleHR1cmVNYW5hZ2VyLmRlc3Ryb3lBbGwoKTtcblxuICAgIC8vIGNhbGwgYmFzZSBkZXN0cm95XG4gICAgU3lzdGVtUmVuZGVyZXIucHJvdG90eXBlLmRlc3Ryb3kuY2FsbCh0aGlzLCByZW1vdmVWaWV3KTtcblxuICAgIHRoaXMudWlkID0gMDtcblxuICAgIC8vIGRlc3Ryb3kgdGhlIG1hbmFnZXJzXG4gICAgdGhpcy5zaGFkZXJNYW5hZ2VyLmRlc3Ryb3koKTtcbiAgICB0aGlzLm1hc2tNYW5hZ2VyLmRlc3Ryb3koKTtcbiAgICB0aGlzLnN0ZW5jaWxNYW5hZ2VyLmRlc3Ryb3koKTtcbiAgICB0aGlzLmZpbHRlck1hbmFnZXIuZGVzdHJveSgpO1xuICAgIHRoaXMuYmxlbmRNb2RlTWFuYWdlci5kZXN0cm95KCk7XG5cbiAgICB0aGlzLnNoYWRlck1hbmFnZXIgPSBudWxsO1xuICAgIHRoaXMubWFza01hbmFnZXIgPSBudWxsO1xuICAgIHRoaXMuZmlsdGVyTWFuYWdlciA9IG51bGw7XG4gICAgdGhpcy5ibGVuZE1vZGVNYW5hZ2VyID0gbnVsbDtcbiAgICB0aGlzLmN1cnJlbnRSZW5kZXJlciA9IG51bGw7XG5cbiAgICB0aGlzLmhhbmRsZUNvbnRleHRMb3N0ID0gbnVsbDtcbiAgICB0aGlzLmhhbmRsZUNvbnRleHRSZXN0b3JlZCA9IG51bGw7XG5cbiAgICB0aGlzLl9jb250ZXh0T3B0aW9ucyA9IG51bGw7XG5cbiAgICB0aGlzLmdsLnVzZVByb2dyYW0obnVsbCk7XG4gICAgdGhpcy5nbCA9IG51bGw7XG59O1xuXG4iLCJ2YXIgRGVmYXVsdFNoYWRlciA9IHJlcXVpcmUoJy4uL3NoYWRlcnMvVGV4dHVyZVNoYWRlcicpO1xuXG4vKipcbiAqIFRoaXMgaXMgdGhlIGJhc2UgY2xhc3MgZm9yIGNyZWF0aW5nIGEgUElYSSBmaWx0ZXIuIEN1cnJlbnRseSBvbmx5IFdlYkdMIHN1cHBvcnRzIGZpbHRlcnMuXG4gKiBJZiB5b3Ugd2FudCB0byBtYWtlIGEgY3VzdG9tIGZpbHRlciB0aGlzIHNob3VsZCBiZSB5b3VyIGJhc2UgY2xhc3MuXG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIHZlcnRleFNyYyB7c3RyaW5nfHN0cmluZ1tdfSBUaGUgdmVydGV4IHNoYWRlciBzb3VyY2UgYXMgYW4gYXJyYXkgb2Ygc3RyaW5ncy5cbiAqIEBwYXJhbSBmcmFnbWVudFNyYyB7c3RyaW5nfHN0cmluZ1tdfSBUaGUgZnJhZ21lbnQgc2hhZGVyIHNvdXJjZSBhcyBhbiBhcnJheSBvZiBzdHJpbmdzLlxuICogQHBhcmFtIHVuaWZvcm1zIHtvYmplY3R9IEFuIG9iamVjdCBjb250YWluaW5nIHRoZSB1bmlmb3JtcyBmb3IgdGhpcyBmaWx0ZXIuXG4gKi9cbmZ1bmN0aW9uIEFic3RyYWN0RmlsdGVyKHZlcnRleFNyYywgZnJhZ21lbnRTcmMsIHVuaWZvcm1zKVxue1xuXG4gICAgLyoqXG4gICAgICogQW4gYXJyYXkgb2Ygc2hhZGVyc1xuICAgICAqIEBtZW1iZXIge1BJWEkuU2hhZGVyW119XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLnNoYWRlcnMgPSBbXTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBleHRyYSBwYWRkaW5nIHRoYXQgdGhlIGZpbHRlciBtaWdodCBuZWVkXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMucGFkZGluZyA9IDA7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgdW5pZm9ybXMgYXMgYW4gb2JqZWN0XG4gICAgICogQG1lbWJlciB7b2JqZWN0fVxuICAgICAqL1xuICAgIHRoaXMudW5pZm9ybXMgPSB1bmlmb3JtcyB8fCB7fTtcblxuXG4gICAgLyoqXG4gICAgICogVGhlIGNvZGUgb2YgdGhlIHZlcnRleCBzaGFkZXJcbiAgICAgKiBAbWVtYmVyIHtzdHJpbmdbXX1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMudmVydGV4U3JjID0gdmVydGV4U3JjIHx8IERlZmF1bHRTaGFkZXIuZGVmYXVsdFZlcnRleFNyYztcblxuICAgIC8qKlxuICAgICAqIFRoZSBjb2RlIG9mIHRoZSBmcmFtZW50IHNoYWRlclxuICAgICAqIEBtZW1iZXIge3N0cmluZ1tdfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5mcmFnbWVudFNyYyA9IGZyYWdtZW50U3JjIHx8IERlZmF1bHRTaGFkZXIuZGVmYXVsdEZyYWdtZW50U3JjO1xuXG4gICAgLy9UT0RPIGEgcmVtaW5kZXIgLSB3b3VsZCBiZSBjb29sIHRvIGhhdmUgbG93ZXIgcmVzIGZpbHRlcnMgYXMgdGhpcyB3b3VsZCBnaXZlIGJldHRlciBwZXJmb3JtYW5jZS5cblxuICAgIC8vdHlwZW9mIGZyYWdtZW50U3JjID09PSAnc3RyaW5nJyA/IGZyYWdtZW50U3JjLnNwbGl0KCcnKSA6IChmcmFnbWVudFNyYyB8fCBbXSk7XG5cbn1cblxuQWJzdHJhY3RGaWx0ZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gQWJzdHJhY3RGaWx0ZXI7XG5tb2R1bGUuZXhwb3J0cyA9IEFic3RyYWN0RmlsdGVyO1xuXG4vKipcbiAqIEdyYWJzIGEgc2hhZGVyIGZyb20gdGhlIGN1cnJlbnQgcmVuZGVyZXJcbiAqXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcn0gVGhlIHJlbmRlcmVyIHRvIHJldHJpZXZlIHRoZSBzaGFkZXIgZnJvbVxuICovXG5BYnN0cmFjdEZpbHRlci5wcm90b3R5cGUuZ2V0U2hhZGVyID0gZnVuY3Rpb24gKHJlbmRlcmVyKVxue1xuICAgIHZhciBnbCA9IHJlbmRlcmVyLmdsO1xuXG4gICAgdmFyIHNoYWRlciA9IHRoaXMuc2hhZGVyc1tnbC5pZF07XG5cbiAgICBpZiAoIXNoYWRlcilcbiAgICB7XG4gICAgICAgIHNoYWRlciA9IG5ldyBEZWZhdWx0U2hhZGVyKHJlbmRlcmVyLnNoYWRlck1hbmFnZXIsXG4gICAgICAgICAgICB0aGlzLnZlcnRleFNyYyxcbiAgICAgICAgICAgIHRoaXMuZnJhZ21lbnRTcmMsXG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLFxuICAgICAgICAgICAgdGhpcy5hdHRyaWJ1dGVzXG4gICAgICAgICk7XG5cbiAgICAgICAgdGhpcy5zaGFkZXJzW2dsLmlkXSA9IHNoYWRlcjtcbiAgICB9XG5cbiAgICByZXR1cm4gc2hhZGVyO1xufTtcblxuLyoqXG4gKiBBcHBsaWVzIHRoZSBmaWx0ZXJcbiAqXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcn0gVGhlIHJlbmRlcmVyIHRvIHJldHJpZXZlIHRoZSBmaWx0ZXIgZnJvbVxuICogQHBhcmFtIGlucHV0IHtQSVhJLlJlbmRlclRhcmdldH1cbiAqIEBwYXJhbSBvdXRwdXQge1BJWEkuUmVuZGVyVGFyZ2V0fVxuICogQHBhcmFtIGNsZWFyIHtib29sZWFufSBXaGV0aGVyIG9yIG5vdCB3ZSB3YW50IHRvIGNsZWFyIHRoZSBvdXRwdXRUYXJnZXRcbiAqL1xuQWJzdHJhY3RGaWx0ZXIucHJvdG90eXBlLmFwcGx5RmlsdGVyID0gZnVuY3Rpb24gKHJlbmRlcmVyLCBpbnB1dCwgb3V0cHV0LCBjbGVhcilcbntcbiAgICB2YXIgc2hhZGVyID0gdGhpcy5nZXRTaGFkZXIocmVuZGVyZXIpO1xuXG4gICAgcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5hcHBseUZpbHRlcihzaGFkZXIsIGlucHV0LCBvdXRwdXQsIGNsZWFyKTtcbn07XG5cbi8qKlxuICogU3luY3MgYSB1bmlmb3JtIGJldHdlZW4gdGhlIGNsYXNzIG9iamVjdCBhbmQgdGhlIHNoYWRlcnMuXG4gKlxuICovXG5BYnN0cmFjdEZpbHRlci5wcm90b3R5cGUuc3luY1VuaWZvcm0gPSBmdW5jdGlvbiAodW5pZm9ybSlcbntcbiAgICBmb3IgKHZhciBpID0gMCwgaiA9IHRoaXMuc2hhZGVycy5sZW5ndGg7IGkgPCBqOyArK2kpXG4gICAge1xuICAgICAgICB0aGlzLnNoYWRlcnNbaV0uc3luY1VuaWZvcm0odW5pZm9ybSk7XG4gICAgfVxufTtcbiIsInZhciBBYnN0cmFjdEZpbHRlciA9IHJlcXVpcmUoJy4vQWJzdHJhY3RGaWx0ZXInKTtcbi8vIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL3N1YnN0YWNrL2JyZnMvaXNzdWVzLzI1XG5cblxuLyoqXG4gKlxuICogQmFzaWMgRlhBQSBpbXBsZW1lbnRhdGlvbiBiYXNlZCBvbiB0aGUgY29kZSBvbiBnZWVrczNkLmNvbSB3aXRoIHRoZVxuICogbW9kaWZpY2F0aW9uIHRoYXQgdGhlIHRleHR1cmUyRExvZCBzdHVmZiB3YXMgcmVtb3ZlZCBzaW5jZSBpdCdzXG4gKiB1bnN1cHBvcnRlZCBieSBXZWJHTC5cbiAqXG4gKiAtLVxuICogRnJvbTpcbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS9taXRzdWhpa28vd2ViZ2wtbWVpbmNyYWZ0XG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLkFic3RyYWN0RmlsdGVyXG4gKiBAbWVtYmVyb2YgUElYSVxuICpcbiAqL1xuZnVuY3Rpb24gRlhBQUZpbHRlcigpXG57XG4gICAgQWJzdHJhY3RGaWx0ZXIuY2FsbCh0aGlzLFxuICAgICAgICAvLyB2ZXJ0ZXggc2hhZGVyXG4gICAgICAgIFwiXFxucHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XFxuXFxuYXR0cmlidXRlIHZlYzIgYVZlcnRleFBvc2l0aW9uO1xcbmF0dHJpYnV0ZSB2ZWMyIGFUZXh0dXJlQ29vcmQ7XFxuYXR0cmlidXRlIHZlYzQgYUNvbG9yO1xcblxcbnVuaWZvcm0gbWF0MyBwcm9qZWN0aW9uTWF0cml4O1xcbnVuaWZvcm0gdmVjMiByZXNvbHV0aW9uO1xcblxcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xcbnZhcnlpbmcgdmVjNCB2Q29sb3I7XFxuXFxudmFyeWluZyB2ZWMyIHZSZXNvbHV0aW9uO1xcblxcbi8vdGV4Y29vcmRzIGNvbXB1dGVkIGluIHZlcnRleCBzdGVwXFxuLy90byBhdm9pZCBkZXBlbmRlbnQgdGV4dHVyZSByZWFkc1xcbnZhcnlpbmcgdmVjMiB2X3JnYk5XO1xcbnZhcnlpbmcgdmVjMiB2X3JnYk5FO1xcbnZhcnlpbmcgdmVjMiB2X3JnYlNXO1xcbnZhcnlpbmcgdmVjMiB2X3JnYlNFO1xcbnZhcnlpbmcgdmVjMiB2X3JnYk07XFxuXFxuXFxudm9pZCB0ZXhjb29yZHModmVjMiBmcmFnQ29vcmQsIHZlYzIgcmVzb2x1dGlvbixcXG4gICAgICAgICAgICBvdXQgdmVjMiB2X3JnYk5XLCBvdXQgdmVjMiB2X3JnYk5FLFxcbiAgICAgICAgICAgIG91dCB2ZWMyIHZfcmdiU1csIG91dCB2ZWMyIHZfcmdiU0UsXFxuICAgICAgICAgICAgb3V0IHZlYzIgdl9yZ2JNKSB7XFxuICAgIHZlYzIgaW52ZXJzZVZQID0gMS4wIC8gcmVzb2x1dGlvbi54eTtcXG4gICAgdl9yZ2JOVyA9IChmcmFnQ29vcmQgKyB2ZWMyKC0xLjAsIC0xLjApKSAqIGludmVyc2VWUDtcXG4gICAgdl9yZ2JORSA9IChmcmFnQ29vcmQgKyB2ZWMyKDEuMCwgLTEuMCkpICogaW52ZXJzZVZQO1xcbiAgICB2X3JnYlNXID0gKGZyYWdDb29yZCArIHZlYzIoLTEuMCwgMS4wKSkgKiBpbnZlcnNlVlA7XFxuICAgIHZfcmdiU0UgPSAoZnJhZ0Nvb3JkICsgdmVjMigxLjAsIDEuMCkpICogaW52ZXJzZVZQO1xcbiAgICB2X3JnYk0gPSB2ZWMyKGZyYWdDb29yZCAqIGludmVyc2VWUCk7XFxufVxcblxcbnZvaWQgbWFpbih2b2lkKXtcXG4gICBnbF9Qb3NpdGlvbiA9IHZlYzQoKHByb2plY3Rpb25NYXRyaXggKiB2ZWMzKGFWZXJ0ZXhQb3NpdGlvbiwgMS4wKSkueHksIDAuMCwgMS4wKTtcXG4gICB2VGV4dHVyZUNvb3JkID0gYVRleHR1cmVDb29yZDtcXG4gICB2Q29sb3IgPSB2ZWM0KGFDb2xvci5yZ2IgKiBhQ29sb3IuYSwgYUNvbG9yLmEpO1xcbiAgIHZSZXNvbHV0aW9uID0gcmVzb2x1dGlvbjtcXG5cXG4gICAvL2NvbXB1dGUgdGhlIHRleHR1cmUgY29vcmRzIGFuZCBzZW5kIHRoZW0gdG8gdmFyeWluZ3NcXG4gICB0ZXhjb29yZHMoYVRleHR1cmVDb29yZCAqIHJlc29sdXRpb24sIHJlc29sdXRpb24sIHZfcmdiTlcsIHZfcmdiTkUsIHZfcmdiU1csIHZfcmdiU0UsIHZfcmdiTSk7XFxufVxcblwiLFxuICAgICAgICAvLyBmcmFnbWVudCBzaGFkZXJcbiAgICAgICAgXCJwcmVjaXNpb24gbG93cCBmbG9hdDtcXG5cXG5cXG4vKipcXG5CYXNpYyBGWEFBIGltcGxlbWVudGF0aW9uIGJhc2VkIG9uIHRoZSBjb2RlIG9uIGdlZWtzM2QuY29tIHdpdGggdGhlXFxubW9kaWZpY2F0aW9uIHRoYXQgdGhlIHRleHR1cmUyRExvZCBzdHVmZiB3YXMgcmVtb3ZlZCBzaW5jZSBpdCdzXFxudW5zdXBwb3J0ZWQgYnkgV2ViR0wuXFxuXFxuLS1cXG5cXG5Gcm9tOlxcbmh0dHBzOi8vZ2l0aHViLmNvbS9taXRzdWhpa28vd2ViZ2wtbWVpbmNyYWZ0XFxuXFxuQ29weXJpZ2h0IChjKSAyMDExIGJ5IEFybWluIFJvbmFjaGVyLlxcblxcblNvbWUgcmlnaHRzIHJlc2VydmVkLlxcblxcblJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dFxcbm1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmVcXG5tZXQ6XFxuXFxuICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHRcXG4gICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuXFxuXFxuICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZVxcbiAgICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nXFxuICAgICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkXFxuICAgICAgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLlxcblxcbiAgICAqIFRoZSBuYW1lcyBvZiB0aGUgY29udHJpYnV0b3JzIG1heSBub3QgYmUgdXNlZCB0byBlbmRvcnNlIG9yXFxuICAgICAgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljXFxuICAgICAgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLlxcblxcblRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlNcXG5cXFwiQVMgSVNcXFwiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVFxcbkxJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUlxcbkEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUXFxuT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsXFxuU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVFxcbkxJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLFxcbkRBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWVxcblRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlRcXG4oSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0VcXG5PRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLlxcbiovXFxuXFxuI2lmbmRlZiBGWEFBX1JFRFVDRV9NSU5cXG4gICAgI2RlZmluZSBGWEFBX1JFRFVDRV9NSU4gICAoMS4wLyAxMjguMClcXG4jZW5kaWZcXG4jaWZuZGVmIEZYQUFfUkVEVUNFX01VTFxcbiAgICAjZGVmaW5lIEZYQUFfUkVEVUNFX01VTCAgICgxLjAgLyA4LjApXFxuI2VuZGlmXFxuI2lmbmRlZiBGWEFBX1NQQU5fTUFYXFxuICAgICNkZWZpbmUgRlhBQV9TUEFOX01BWCAgICAgOC4wXFxuI2VuZGlmXFxuXFxuLy9vcHRpbWl6ZWQgdmVyc2lvbiBmb3IgbW9iaWxlLCB3aGVyZSBkZXBlbmRlbnRcXG4vL3RleHR1cmUgcmVhZHMgY2FuIGJlIGEgYm90dGxlbmVja1xcbnZlYzQgZnhhYShzYW1wbGVyMkQgdGV4LCB2ZWMyIGZyYWdDb29yZCwgdmVjMiByZXNvbHV0aW9uLFxcbiAgICAgICAgICAgIHZlYzIgdl9yZ2JOVywgdmVjMiB2X3JnYk5FLFxcbiAgICAgICAgICAgIHZlYzIgdl9yZ2JTVywgdmVjMiB2X3JnYlNFLFxcbiAgICAgICAgICAgIHZlYzIgdl9yZ2JNKSB7XFxuICAgIHZlYzQgY29sb3I7XFxuICAgIG1lZGl1bXAgdmVjMiBpbnZlcnNlVlAgPSB2ZWMyKDEuMCAvIHJlc29sdXRpb24ueCwgMS4wIC8gcmVzb2x1dGlvbi55KTtcXG4gICAgdmVjMyByZ2JOVyA9IHRleHR1cmUyRCh0ZXgsIHZfcmdiTlcpLnh5ejtcXG4gICAgdmVjMyByZ2JORSA9IHRleHR1cmUyRCh0ZXgsIHZfcmdiTkUpLnh5ejtcXG4gICAgdmVjMyByZ2JTVyA9IHRleHR1cmUyRCh0ZXgsIHZfcmdiU1cpLnh5ejtcXG4gICAgdmVjMyByZ2JTRSA9IHRleHR1cmUyRCh0ZXgsIHZfcmdiU0UpLnh5ejtcXG4gICAgdmVjNCB0ZXhDb2xvciA9IHRleHR1cmUyRCh0ZXgsIHZfcmdiTSk7XFxuICAgIHZlYzMgcmdiTSAgPSB0ZXhDb2xvci54eXo7XFxuICAgIHZlYzMgbHVtYSA9IHZlYzMoMC4yOTksIDAuNTg3LCAwLjExNCk7XFxuICAgIGZsb2F0IGx1bWFOVyA9IGRvdChyZ2JOVywgbHVtYSk7XFxuICAgIGZsb2F0IGx1bWFORSA9IGRvdChyZ2JORSwgbHVtYSk7XFxuICAgIGZsb2F0IGx1bWFTVyA9IGRvdChyZ2JTVywgbHVtYSk7XFxuICAgIGZsb2F0IGx1bWFTRSA9IGRvdChyZ2JTRSwgbHVtYSk7XFxuICAgIGZsb2F0IGx1bWFNICA9IGRvdChyZ2JNLCAgbHVtYSk7XFxuICAgIGZsb2F0IGx1bWFNaW4gPSBtaW4obHVtYU0sIG1pbihtaW4obHVtYU5XLCBsdW1hTkUpLCBtaW4obHVtYVNXLCBsdW1hU0UpKSk7XFxuICAgIGZsb2F0IGx1bWFNYXggPSBtYXgobHVtYU0sIG1heChtYXgobHVtYU5XLCBsdW1hTkUpLCBtYXgobHVtYVNXLCBsdW1hU0UpKSk7XFxuXFxuICAgIG1lZGl1bXAgdmVjMiBkaXI7XFxuICAgIGRpci54ID0gLSgobHVtYU5XICsgbHVtYU5FKSAtIChsdW1hU1cgKyBsdW1hU0UpKTtcXG4gICAgZGlyLnkgPSAgKChsdW1hTlcgKyBsdW1hU1cpIC0gKGx1bWFORSArIGx1bWFTRSkpO1xcblxcbiAgICBmbG9hdCBkaXJSZWR1Y2UgPSBtYXgoKGx1bWFOVyArIGx1bWFORSArIGx1bWFTVyArIGx1bWFTRSkgKlxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKDAuMjUgKiBGWEFBX1JFRFVDRV9NVUwpLCBGWEFBX1JFRFVDRV9NSU4pO1xcblxcbiAgICBmbG9hdCByY3BEaXJNaW4gPSAxLjAgLyAobWluKGFicyhkaXIueCksIGFicyhkaXIueSkpICsgZGlyUmVkdWNlKTtcXG4gICAgZGlyID0gbWluKHZlYzIoRlhBQV9TUEFOX01BWCwgRlhBQV9TUEFOX01BWCksXFxuICAgICAgICAgICAgICBtYXgodmVjMigtRlhBQV9TUEFOX01BWCwgLUZYQUFfU1BBTl9NQVgpLFxcbiAgICAgICAgICAgICAgZGlyICogcmNwRGlyTWluKSkgKiBpbnZlcnNlVlA7XFxuXFxuICAgIHZlYzMgcmdiQSA9IDAuNSAqIChcXG4gICAgICAgIHRleHR1cmUyRCh0ZXgsIGZyYWdDb29yZCAqIGludmVyc2VWUCArIGRpciAqICgxLjAgLyAzLjAgLSAwLjUpKS54eXogK1xcbiAgICAgICAgdGV4dHVyZTJEKHRleCwgZnJhZ0Nvb3JkICogaW52ZXJzZVZQICsgZGlyICogKDIuMCAvIDMuMCAtIDAuNSkpLnh5eik7XFxuICAgIHZlYzMgcmdiQiA9IHJnYkEgKiAwLjUgKyAwLjI1ICogKFxcbiAgICAgICAgdGV4dHVyZTJEKHRleCwgZnJhZ0Nvb3JkICogaW52ZXJzZVZQICsgZGlyICogLTAuNSkueHl6ICtcXG4gICAgICAgIHRleHR1cmUyRCh0ZXgsIGZyYWdDb29yZCAqIGludmVyc2VWUCArIGRpciAqIDAuNSkueHl6KTtcXG5cXG4gICAgZmxvYXQgbHVtYUIgPSBkb3QocmdiQiwgbHVtYSk7XFxuICAgIGlmICgobHVtYUIgPCBsdW1hTWluKSB8fCAobHVtYUIgPiBsdW1hTWF4KSlcXG4gICAgICAgIGNvbG9yID0gdmVjNChyZ2JBLCB0ZXhDb2xvci5hKTtcXG4gICAgZWxzZVxcbiAgICAgICAgY29sb3IgPSB2ZWM0KHJnYkIsIHRleENvbG9yLmEpO1xcbiAgICByZXR1cm4gY29sb3I7XFxufVxcblxcblxcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xcbnZhcnlpbmcgdmVjNCB2Q29sb3I7XFxudmFyeWluZyB2ZWMyIHZSZXNvbHV0aW9uO1xcblxcbi8vdGV4Y29vcmRzIGNvbXB1dGVkIGluIHZlcnRleCBzdGVwXFxuLy90byBhdm9pZCBkZXBlbmRlbnQgdGV4dHVyZSByZWFkc1xcbnZhcnlpbmcgdmVjMiB2X3JnYk5XO1xcbnZhcnlpbmcgdmVjMiB2X3JnYk5FO1xcbnZhcnlpbmcgdmVjMiB2X3JnYlNXO1xcbnZhcnlpbmcgdmVjMiB2X3JnYlNFO1xcbnZhcnlpbmcgdmVjMiB2X3JnYk07XFxuXFxudW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXI7XFxuXFxuXFxudm9pZCBtYWluKHZvaWQpe1xcblxcbiAgICBnbF9GcmFnQ29sb3IgPSBmeGFhKHVTYW1wbGVyLCB2VGV4dHVyZUNvb3JkICogdlJlc29sdXRpb24sIHZSZXNvbHV0aW9uLCB2X3JnYk5XLCB2X3JnYk5FLCB2X3JnYlNXLCB2X3JnYlNFLCB2X3JnYk0pO1xcblxcbn1cXG5cIixcbiAgICAgICAgLy8gdW5pZm9ybXNcbiAgICAgICAge1xuICAgICAgICAgICAgcmVzb2x1dGlvbjogeyB0eXBlOiAndjInLCB2YWx1ZTogeyB4OiAxLCB5OiAxIH0gfVxuICAgICAgICB9XG4gICAgKTtcblxufVxuXG5GWEFBRmlsdGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoQWJzdHJhY3RGaWx0ZXIucHJvdG90eXBlKTtcbkZYQUFGaWx0ZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gRlhBQUZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gRlhBQUZpbHRlcjtcblxuLyoqXG4gKiBBcHBsaWVzIHRoZSBmaWx0ZXJcbiAqXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcn0gVGhlIHJlbmRlcmVyIHRvIHJldHJpZXZlIHRoZSBmaWx0ZXIgZnJvbVxuICogQHBhcmFtIGlucHV0IHtQSVhJLlJlbmRlclRhcmdldH1cbiAqIEBwYXJhbSBvdXRwdXQge1BJWEkuUmVuZGVyVGFyZ2V0fVxuICovXG5GWEFBRmlsdGVyLnByb3RvdHlwZS5hcHBseUZpbHRlciA9IGZ1bmN0aW9uIChyZW5kZXJlciwgaW5wdXQsIG91dHB1dClcbntcbiAgICB2YXIgZmlsdGVyTWFuYWdlciA9IHJlbmRlcmVyLmZpbHRlck1hbmFnZXI7XG5cbiAgICB2YXIgc2hhZGVyID0gdGhpcy5nZXRTaGFkZXIoIHJlbmRlcmVyICk7XG4gICAgIC8vIGRyYXcgdGhlIGZpbHRlci4uLlxuICAgIGZpbHRlck1hbmFnZXIuYXBwbHlGaWx0ZXIoc2hhZGVyLCBpbnB1dCwgb3V0cHV0KTtcbn07XG4iLCJ2YXIgQWJzdHJhY3RGaWx0ZXIgPSByZXF1aXJlKCcuL0Fic3RyYWN0RmlsdGVyJyksXG4gICAgbWF0aCA9ICByZXF1aXJlKCcuLi8uLi8uLi9tYXRoJyk7XG5cbi8vIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL3N1YnN0YWNrL2JyZnMvaXNzdWVzLzI1XG5cblxuLyoqXG4gKiBUaGUgU3ByaXRlTWFza0ZpbHRlciBjbGFzc1xuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5BYnN0cmFjdEZpbHRlclxuICogQG1lbWJlcm9mIFBJWElcbiAqIEBwYXJhbSBzcHJpdGUge1BJWEkuU3ByaXRlfSB0aGUgdGFyZ2V0IHNwcml0ZVxuICovXG5mdW5jdGlvbiBTcHJpdGVNYXNrRmlsdGVyKHNwcml0ZSlcbntcbiAgICB2YXIgbWFza01hdHJpeCA9IG5ldyBtYXRoLk1hdHJpeCgpO1xuXG4gICAgQWJzdHJhY3RGaWx0ZXIuY2FsbCh0aGlzLFxuICAgICAgICBcImF0dHJpYnV0ZSB2ZWMyIGFWZXJ0ZXhQb3NpdGlvbjtcXG5hdHRyaWJ1dGUgdmVjMiBhVGV4dHVyZUNvb3JkO1xcbmF0dHJpYnV0ZSB2ZWM0IGFDb2xvcjtcXG5cXG51bmlmb3JtIG1hdDMgcHJvamVjdGlvbk1hdHJpeDtcXG51bmlmb3JtIG1hdDMgb3RoZXJNYXRyaXg7XFxuXFxudmFyeWluZyB2ZWMyIHZNYXNrQ29vcmQ7XFxudmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7XFxudmFyeWluZyB2ZWM0IHZDb2xvcjtcXG5cXG52b2lkIG1haW4odm9pZClcXG57XFxuICAgIGdsX1Bvc2l0aW9uID0gdmVjNCgocHJvamVjdGlvbk1hdHJpeCAqIHZlYzMoYVZlcnRleFBvc2l0aW9uLCAxLjApKS54eSwgMC4wLCAxLjApO1xcbiAgICB2VGV4dHVyZUNvb3JkID0gYVRleHR1cmVDb29yZDtcXG4gICAgdk1hc2tDb29yZCA9ICggb3RoZXJNYXRyaXggKiB2ZWMzKCBhVGV4dHVyZUNvb3JkLCAxLjApICApLnh5O1xcbiAgICB2Q29sb3IgPSB2ZWM0KGFDb2xvci5yZ2IgKiBhQ29sb3IuYSwgYUNvbG9yLmEpO1xcbn1cXG5cIixcbiAgICAgICAgXCJwcmVjaXNpb24gbG93cCBmbG9hdDtcXG5cXG52YXJ5aW5nIHZlYzIgdk1hc2tDb29yZDtcXG52YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDtcXG52YXJ5aW5nIHZlYzQgdkNvbG9yO1xcblxcbnVuaWZvcm0gc2FtcGxlcjJEIHVTYW1wbGVyO1xcbnVuaWZvcm0gZmxvYXQgYWxwaGE7XFxudW5pZm9ybSBzYW1wbGVyMkQgbWFzaztcXG5cXG52b2lkIG1haW4odm9pZClcXG57XFxuICAgIC8vIGNoZWNrIGNsaXAhIHRoaXMgd2lsbCBzdG9wIHRoZSBtYXNrIGJsZWVkaW5nIG91dCBmcm9tIHRoZSBlZGdlc1xcbiAgICB2ZWMyIHRleHQgPSBhYnMoIHZNYXNrQ29vcmQgLSAwLjUgKTtcXG4gICAgdGV4dCA9IHN0ZXAoMC41LCB0ZXh0KTtcXG4gICAgZmxvYXQgY2xpcCA9IDEuMCAtIG1heCh0ZXh0LnksIHRleHQueCk7XFxuICAgIHZlYzQgb3JpZ2luYWwgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZUZXh0dXJlQ29vcmQpO1xcbiAgICB2ZWM0IG1hc2t5ID0gdGV4dHVyZTJEKG1hc2ssIHZNYXNrQ29vcmQpO1xcbiAgICBvcmlnaW5hbCAqPSAobWFza3kuciAqIG1hc2t5LmEgKiBhbHBoYSAqIGNsaXApO1xcbiAgICBnbF9GcmFnQ29sb3IgPSBvcmlnaW5hbDtcXG59XFxuXCIsXG4gICAgICAgIHtcbiAgICAgICAgICAgIG1hc2s6ICAgICAgICAgICB7IHR5cGU6ICdzYW1wbGVyMkQnLCB2YWx1ZTogc3ByaXRlLl90ZXh0dXJlIH0sXG4gICAgICAgICAgICBhbHBoYTogICAgICAgICAgeyB0eXBlOiAnZicsIHZhbHVlOiAxfSxcbiAgICAgICAgICAgIG90aGVyTWF0cml4OiAgICB7IHR5cGU6ICdtYXQzJywgdmFsdWU6IG1hc2tNYXRyaXgudG9BcnJheSh0cnVlKSB9XG4gICAgICAgIH1cbiAgICApO1xuXG4gICAgdGhpcy5tYXNrU3ByaXRlID0gc3ByaXRlO1xuICAgIHRoaXMubWFza01hdHJpeCA9IG1hc2tNYXRyaXg7XG59XG5cblNwcml0ZU1hc2tGaWx0ZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShBYnN0cmFjdEZpbHRlci5wcm90b3R5cGUpO1xuU3ByaXRlTWFza0ZpbHRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBTcHJpdGVNYXNrRmlsdGVyO1xubW9kdWxlLmV4cG9ydHMgPSBTcHJpdGVNYXNrRmlsdGVyO1xuXG4vKipcbiAqIEFwcGxpZXMgdGhlIGZpbHRlclxuICpcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5XZWJHTFJlbmRlcmVyfSBUaGUgcmVuZGVyZXIgdG8gcmV0cmlldmUgdGhlIGZpbHRlciBmcm9tXG4gKiBAcGFyYW0gaW5wdXQge1BJWEkuUmVuZGVyVGFyZ2V0fVxuICogQHBhcmFtIG91dHB1dCB7UElYSS5SZW5kZXJUYXJnZXR9XG4gKi9cblNwcml0ZU1hc2tGaWx0ZXIucHJvdG90eXBlLmFwcGx5RmlsdGVyID0gZnVuY3Rpb24gKHJlbmRlcmVyLCBpbnB1dCwgb3V0cHV0KVxue1xuICAgIHZhciBmaWx0ZXJNYW5hZ2VyID0gcmVuZGVyZXIuZmlsdGVyTWFuYWdlcjtcblxuICAgIHRoaXMudW5pZm9ybXMubWFzay52YWx1ZSA9IHRoaXMubWFza1Nwcml0ZS5fdGV4dHVyZTtcblxuICAgIGZpbHRlck1hbmFnZXIuY2FsY3VsYXRlTWFwcGVkTWF0cml4KGlucHV0LmZyYW1lLCB0aGlzLm1hc2tTcHJpdGUsIHRoaXMubWFza01hdHJpeCk7XG5cbiAgICB0aGlzLnVuaWZvcm1zLm90aGVyTWF0cml4LnZhbHVlID0gdGhpcy5tYXNrTWF0cml4LnRvQXJyYXkodHJ1ZSk7XG4gICAgdGhpcy51bmlmb3Jtcy5hbHBoYS52YWx1ZSA9IHRoaXMubWFza1Nwcml0ZS53b3JsZEFscGhhO1xuXG4gICAgdmFyIHNoYWRlciA9IHRoaXMuZ2V0U2hhZGVyKHJlbmRlcmVyKTtcbiAgICAgLy8gZHJhdyB0aGUgZmlsdGVyLi4uXG4gICAgZmlsdGVyTWFuYWdlci5hcHBseUZpbHRlcihzaGFkZXIsIGlucHV0LCBvdXRwdXQpO1xufTtcblxuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhTcHJpdGVNYXNrRmlsdGVyLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFRoZSB0ZXh0dXJlIHVzZWQgZm9yIHRoZSBkaXNwbGFjZW1lbnQgbWFwLiBNdXN0IGJlIHBvd2VyIG9mIDIgc2l6ZWQgdGV4dHVyZS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuVGV4dHVyZX1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5TcHJpdGVNYXNrRmlsdGVyI1xuICAgICAqL1xuICAgIG1hcDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVuaWZvcm1zLm1hc2sudmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLm1hc2sudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBUaGUgb2Zmc2V0IHVzZWQgdG8gbW92ZSB0aGUgZGlzcGxhY2VtZW50IG1hcC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuUG9pbnR9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuU3ByaXRlTWFza0ZpbHRlciNcbiAgICAgKi9cbiAgICBvZmZzZXQ6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbigpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVuaWZvcm1zLm9mZnNldC52YWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbih2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy5vZmZzZXQudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuIiwidmFyIFdlYkdMTWFuYWdlciA9IHJlcXVpcmUoJy4vV2ViR0xNYW5hZ2VyJyk7XG5cbi8qKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQGV4dGVuZHMgUElYSS5XZWJHbE1hbmFnZXJcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5XZWJHTFJlbmRlcmVyfSBUaGUgcmVuZGVyZXIgdGhpcyBtYW5hZ2VyIHdvcmtzIGZvci5cbiAqL1xuZnVuY3Rpb24gQmxlbmRNb2RlTWFuYWdlcihyZW5kZXJlcilcbntcbiAgICBXZWJHTE1hbmFnZXIuY2FsbCh0aGlzLCByZW5kZXJlcik7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy5jdXJyZW50QmxlbmRNb2RlID0gOTk5OTk7XG59XG5cbkJsZW5kTW9kZU1hbmFnZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShXZWJHTE1hbmFnZXIucHJvdG90eXBlKTtcbkJsZW5kTW9kZU1hbmFnZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gQmxlbmRNb2RlTWFuYWdlcjtcbm1vZHVsZS5leHBvcnRzID0gQmxlbmRNb2RlTWFuYWdlcjtcblxuLyoqXG4gKiBTZXRzLXVwIHRoZSBnaXZlbiBibGVuZE1vZGUgZnJvbSBXZWJHTCdzIHBvaW50IG9mIHZpZXcuXG4gKlxuICogQHBhcmFtIGJsZW5kTW9kZSB7bnVtYmVyfSB0aGUgYmxlbmRNb2RlLCBzaG91bGQgYmUgYSBQaXhpIGNvbnN0LCBzdWNoIGFzIGBQSVhJLkJMRU5EX01PREVTLkFERGAuIFNlZVxuICogIHtAbGluayBQSVhJLkJMRU5EX01PREVTfSBmb3IgcG9zc2libGUgdmFsdWVzLlxuICovXG5CbGVuZE1vZGVNYW5hZ2VyLnByb3RvdHlwZS5zZXRCbGVuZE1vZGUgPSBmdW5jdGlvbiAoYmxlbmRNb2RlKVxue1xuICAgIGlmICh0aGlzLmN1cnJlbnRCbGVuZE1vZGUgPT09IGJsZW5kTW9kZSlcbiAgICB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICB0aGlzLmN1cnJlbnRCbGVuZE1vZGUgPSBibGVuZE1vZGU7XG5cbiAgICB2YXIgbW9kZSA9IHRoaXMucmVuZGVyZXIuYmxlbmRNb2Rlc1t0aGlzLmN1cnJlbnRCbGVuZE1vZGVdO1xuICAgIHRoaXMucmVuZGVyZXIuZ2wuYmxlbmRGdW5jKG1vZGVbMF0sIG1vZGVbMV0pO1xuXG4gICAgcmV0dXJuIHRydWU7XG59O1xuIiwidmFyIFdlYkdMTWFuYWdlciA9IHJlcXVpcmUoJy4vV2ViR0xNYW5hZ2VyJyksXG4gICAgUmVuZGVyVGFyZ2V0ID0gcmVxdWlyZSgnLi4vdXRpbHMvUmVuZGVyVGFyZ2V0JyksXG4gICAgQ09OU1QgPSByZXF1aXJlKCcuLi8uLi8uLi9jb25zdCcpLFxuICAgIFF1YWQgPSByZXF1aXJlKCcuLi91dGlscy9RdWFkJyksXG4gICAgbWF0aCA9ICByZXF1aXJlKCcuLi8uLi8uLi9tYXRoJyk7XG5cbi8qKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQGV4dGVuZHMgUElYSS5XZWJHTE1hbmFnZXJcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5XZWJHTFJlbmRlcmVyfSBUaGUgcmVuZGVyZXIgdGhpcyBtYW5hZ2VyIHdvcmtzIGZvci5cbiAqL1xuZnVuY3Rpb24gRmlsdGVyTWFuYWdlcihyZW5kZXJlcilcbntcbiAgICBXZWJHTE1hbmFnZXIuY2FsbCh0aGlzLCByZW5kZXJlcik7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtvYmplY3RbXX1cbiAgICAgKi9cbiAgICB0aGlzLmZpbHRlclN0YWNrID0gW107XG5cbiAgICB0aGlzLmZpbHRlclN0YWNrLnB1c2goe1xuICAgICAgICByZW5kZXJUYXJnZXQ6cmVuZGVyZXIuY3VycmVudFJlbmRlclRhcmdldCxcbiAgICAgICAgZmlsdGVyOltdLFxuICAgICAgICBib3VuZHM6bnVsbFxuICAgIH0pO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7UElYSS5SZW5kZXJUYXJnZXRbXX1cbiAgICAgKi9cbiAgICB0aGlzLnRleHR1cmVQb29sID0gW107XG5cbiAgICAvKipcbiAgICAgKiBUaGUgc2l6ZSBvZiB0aGUgdGV4dHVyZVxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5SZWN0YW5nbGV9XG4gICAgICovXG4gICAgLy8gbGlzdGVuIGZvciBjb250ZXh0IGFuZCB1cGRhdGUgbmVjZXNzYXJ5IGJ1ZmZlcnNcbiAgICAvL1RPRE8gbWFrZSB0aGlzIGR5bmFtaWMhXG4gICAgLy9UT0RPIHRlc3QgdGhpcyBvdXQgYnkgZm9yY2VzIHBvd2VyIG9mIHR3bz9cbiAgICB0aGlzLnRleHR1cmVTaXplID0gbmV3IG1hdGguUmVjdGFuZ2xlKDAsIDAsIHJlbmRlcmVyLndpZHRoLCByZW5kZXJlci5oZWlnaHQpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGN1cnJlbnQgZnJhbWVcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuUmVjdGFuZ2xlfVxuICAgICAqL1xuICAgIHRoaXMuY3VycmVudEZyYW1lID0gbnVsbDtcbn1cblxuRmlsdGVyTWFuYWdlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFdlYkdMTWFuYWdlci5wcm90b3R5cGUpO1xuRmlsdGVyTWFuYWdlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBGaWx0ZXJNYW5hZ2VyO1xubW9kdWxlLmV4cG9ydHMgPSBGaWx0ZXJNYW5hZ2VyO1xuXG5cbi8qKlxuICogQ2FsbGVkIHdoZW4gdGhlcmUgaXMgYSBXZWJHTCBjb250ZXh0IGNoYW5nZS5cbiAqXG4gKi9cbkZpbHRlck1hbmFnZXIucHJvdG90eXBlLm9uQ29udGV4dENoYW5nZSA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy50ZXh0dXJlUG9vbC5sZW5ndGggPSAwO1xuXG4gICAgdmFyIGdsID0gdGhpcy5yZW5kZXJlci5nbDtcbiAgICB0aGlzLnF1YWQgPSBuZXcgUXVhZChnbCk7XG59O1xuXG4vKipcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5XZWJHTFJlbmRlcmVyfVxuICogQHBhcmFtIGJ1ZmZlciB7QXJyYXlCdWZmZXJ9XG4gKi9cbkZpbHRlck1hbmFnZXIucHJvdG90eXBlLnNldEZpbHRlclN0YWNrID0gZnVuY3Rpb24gKCBmaWx0ZXJTdGFjayApXG57XG4gICAgdGhpcy5maWx0ZXJTdGFjayA9IGZpbHRlclN0YWNrO1xufTtcblxuLyoqXG4gKiBBcHBsaWVzIHRoZSBmaWx0ZXIgYW5kIGFkZHMgaXQgdG8gdGhlIGN1cnJlbnQgZmlsdGVyIHN0YWNrLlxuICpcbiAqIEBwYXJhbSB0YXJnZXQge1BJWEkuRGlzcGxheU9iamVjdH1cbiAqIEBwYXJhbSBmaWx0ZXJzIHtQSVhJLkFic3RyYWN0RmlsZXJbXX0gdGhlIGZpbHRlcnMgdGhhdCB3aWxsIGJlIHB1c2hlZCB0byB0aGUgY3VycmVudCBmaWx0ZXIgc3RhY2tcbiAqL1xuRmlsdGVyTWFuYWdlci5wcm90b3R5cGUucHVzaEZpbHRlciA9IGZ1bmN0aW9uICh0YXJnZXQsIGZpbHRlcnMpXG57XG4gICAgLy8gZ2V0IHRoZSBib3VuZHMgb2YgdGhlIG9iamVjdC4uXG4gICAgLy8gVE9ETyByZXBsYWNlIGNsb25lIHdpdGggYSBjb3B5IHRvIHNhdmUgb2JqZWN0IGNyZWF0aW9uXG4gICAgdmFyIGJvdW5kcyA9IHRhcmdldC5maWx0ZXJBcmVhID8gdGFyZ2V0LmZpbHRlckFyZWEuY2xvbmUoKSA6IHRhcmdldC5nZXRCb3VuZHMoKTtcblxuICAgIC8vYm91bmRzID0gYm91bmRzLmNsb25lKCk7XG5cbiAgICAvLyByb3VuZCBvZmYgdGhlIHJlY3RhbmdsZSB0byBnZXQgYSBuaWNlIHNtb29vb29vb3RoIGZpbHRlciA6KVxuICAgIGJvdW5kcy54ID0gYm91bmRzLnggfCAwO1xuICAgIGJvdW5kcy55ID0gYm91bmRzLnkgfCAwO1xuICAgIGJvdW5kcy53aWR0aCA9IGJvdW5kcy53aWR0aCB8IDA7XG4gICAgYm91bmRzLmhlaWdodCA9IGJvdW5kcy5oZWlnaHQgfCAwO1xuXG5cbiAgICAvLyBwYWRkaW5nIVxuICAgIHZhciBwYWRkaW5nID0gZmlsdGVyc1swXS5wYWRkaW5nIHwgMDtcbiAgICBib3VuZHMueCAtPSBwYWRkaW5nO1xuICAgIGJvdW5kcy55IC09IHBhZGRpbmc7XG4gICAgYm91bmRzLndpZHRoICs9IHBhZGRpbmcgKiAyO1xuICAgIGJvdW5kcy5oZWlnaHQgKz0gcGFkZGluZyAqIDI7XG5cblxuICAgIGlmKHRoaXMucmVuZGVyZXIuY3VycmVudFJlbmRlclRhcmdldC50cmFuc2Zvcm0pXG4gICAge1xuICAgICAgICAvL1RPRE8gdGhpcyB3aWxsIGJyZWFrIGlmIHRoZSByZW5kZXJUZXh0dXJlIHRyYW5zZm9ybSBpcyBhbnl0aGluZyBvdGhlciB0aGFuIGEgdHJhbnNsYXRpb24uXG4gICAgICAgIC8vV2lsbCBuZWVkIHRvIHRha2UgdGhlIGZ1bGwgbWF0cml4IHRyYW5zZm9ybSBpbnRvIGFjb3VudC4uXG4gICAgICAgIHZhciB0cmFuc2Zvcm0gPSB0aGlzLnJlbmRlcmVyLmN1cnJlbnRSZW5kZXJUYXJnZXQudHJhbnNmb3JtO1xuXG4gICAgICAgIGJvdW5kcy54ICs9IHRyYW5zZm9ybS50eDtcbiAgICAgICAgYm91bmRzLnkgKz0gdHJhbnNmb3JtLnR5O1xuXG4gICAgICAgIHRoaXMuY2FwRmlsdGVyQXJlYSggYm91bmRzICk7XG5cbiAgICAgICAgYm91bmRzLnggLT0gdHJhbnNmb3JtLnR4O1xuICAgICAgICBib3VuZHMueSAtPSB0cmFuc2Zvcm0udHk7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgICB0aGlzLmNhcEZpbHRlckFyZWEoIGJvdW5kcyApO1xuICAgIH1cblxuICAgIGlmKGJvdW5kcy53aWR0aCA+IDAgJiYgYm91bmRzLmhlaWdodCA+IDApXG4gICAge1xuICAgICAgICB0aGlzLmN1cnJlbnRGcmFtZSA9IGJvdW5kcztcblxuICAgICAgICB2YXIgdGV4dHVyZSA9IHRoaXMuZ2V0UmVuZGVyVGFyZ2V0KCk7XG5cbiAgICAgICAgdGhpcy5yZW5kZXJlci5zZXRSZW5kZXJUYXJnZXQodGV4dHVyZSk7XG5cbiAgICAgICAgLy8gY2xlYXIgdGhlIHRleHR1cmUuLlxuICAgICAgICB0ZXh0dXJlLmNsZWFyKCk7XG5cbiAgICAgICAgLy8gVE9ETyBnZXQgcmlkIG9mIG9iamVjdCBjcmVhdGlvbiFcbiAgICAgICAgdGhpcy5maWx0ZXJTdGFjay5wdXNoKHtcbiAgICAgICAgICAgIHJlbmRlclRhcmdldDogdGV4dHVyZSxcbiAgICAgICAgICAgIGZpbHRlcjogZmlsdGVyc1xuICAgICAgICB9KTtcblxuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICAvLyBwdXNoIHNvbXRoaW5nIG9uIHRvIHRoZSBzdGFjayB0aGF0IGlzIGVtcHR5XG4gICAgICAgIHRoaXMuZmlsdGVyU3RhY2sucHVzaCh7XG4gICAgICAgICAgICByZW5kZXJUYXJnZXQ6IG51bGwsXG4gICAgICAgICAgICBmaWx0ZXI6IGZpbHRlcnNcbiAgICAgICAgfSk7XG4gICAgfVxufTtcblxuXG4vKipcbiAqIFJlbW92ZXMgdGhlIGxhc3QgZmlsdGVyIGZyb20gdGhlIGZpbHRlciBzdGFjayBhbmQgcmV0dXJucyBpdC5cbiAqXG4gKi9cbkZpbHRlck1hbmFnZXIucHJvdG90eXBlLnBvcEZpbHRlciA9IGZ1bmN0aW9uICgpXG57XG4gICAgdmFyIGZpbHRlckRhdGEgPSB0aGlzLmZpbHRlclN0YWNrLnBvcCgpO1xuICAgIHZhciBwcmV2aW91c0ZpbHRlckRhdGEgPSB0aGlzLmZpbHRlclN0YWNrW3RoaXMuZmlsdGVyU3RhY2subGVuZ3RoLTFdO1xuXG4gICAgdmFyIGlucHV0ID0gZmlsdGVyRGF0YS5yZW5kZXJUYXJnZXQ7XG5cbiAgICAvLyBpZiB0aGUgcmVuZGVyVGFyZ2V0IGlzIG51bGwgdGhlbiB3ZSBkb24ndCBhcHBseSB0aGUgZmlsdGVyIGFzIGl0cyBvZmZzY3JlZW5cbiAgICBpZighZmlsdGVyRGF0YS5yZW5kZXJUYXJnZXQpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFyIG91dHB1dCA9IHByZXZpb3VzRmlsdGVyRGF0YS5yZW5kZXJUYXJnZXQ7XG5cbiAgICAvLyB1c2UgcHJvZ3JhbVxuICAgIHZhciBnbCA9IHRoaXMucmVuZGVyZXIuZ2w7XG5cblxuICAgIHRoaXMuY3VycmVudEZyYW1lID0gaW5wdXQuZnJhbWU7XG5cbiAgICB0aGlzLnF1YWQubWFwKHRoaXMudGV4dHVyZVNpemUsIGlucHV0LmZyYW1lKTtcblxuXG4gICAgLy8gVE9ETy4uIHRoaXMgcHJvYmFibHkgb25seSBuZWVkcyB0byBiZSBkb25lIG9uY2UhXG4gICAgZ2wuYmluZEJ1ZmZlcihnbC5BUlJBWV9CVUZGRVIsIHRoaXMucXVhZC52ZXJ0ZXhCdWZmZXIpO1xuICAgIGdsLmJpbmRCdWZmZXIoZ2wuRUxFTUVOVF9BUlJBWV9CVUZGRVIsIHRoaXMucXVhZC5pbmRleEJ1ZmZlcik7XG5cbiAgICB2YXIgZmlsdGVycyA9IGZpbHRlckRhdGEuZmlsdGVyO1xuXG4gICAgLy8gYXNzdW1pbmcgYWxsIGZpbHRlcnMgZm9sbG93IHRoZSBjb3JyZWN0IGZvcm1hdD8/XG4gICAgZ2wudmVydGV4QXR0cmliUG9pbnRlcih0aGlzLnJlbmRlcmVyLnNoYWRlck1hbmFnZXIuZGVmYXVsdFNoYWRlci5hdHRyaWJ1dGVzLmFWZXJ0ZXhQb3NpdGlvbiwgMiwgZ2wuRkxPQVQsIGZhbHNlLCAwLCAwKTtcbiAgICBnbC52ZXJ0ZXhBdHRyaWJQb2ludGVyKHRoaXMucmVuZGVyZXIuc2hhZGVyTWFuYWdlci5kZWZhdWx0U2hhZGVyLmF0dHJpYnV0ZXMuYVRleHR1cmVDb29yZCwgMiwgZ2wuRkxPQVQsIGZhbHNlLCAwLCAyICogNCAqIDQpO1xuICAgIGdsLnZlcnRleEF0dHJpYlBvaW50ZXIodGhpcy5yZW5kZXJlci5zaGFkZXJNYW5hZ2VyLmRlZmF1bHRTaGFkZXIuYXR0cmlidXRlcy5hQ29sb3IsIDQsIGdsLkZMT0FULCBmYWxzZSwgMCwgNCAqIDQgKiA0KTtcblxuICAgIC8vIHJlc3RvcmUgdGhlIG5vcm1hbCBibGVuZG1vZGUhXG4gICAgdGhpcy5yZW5kZXJlci5ibGVuZE1vZGVNYW5hZ2VyLnNldEJsZW5kTW9kZShDT05TVC5CTEVORF9NT0RFUy5OT1JNQUwpO1xuXG4gICAgaWYgKGZpbHRlcnMubGVuZ3RoID09PSAxKVxuICAgIHtcbiAgICAgICAgLy8gVE9ETyAoY2VuZ2xlcikgLSBUaGVyZSBoYXMgdG8gYmUgYSBiZXR0ZXIgd2F5IHRoZW4gc2V0dGluZyB0aGlzIGVhY2ggdGltZT9cbiAgICAgICAgaWYgKGZpbHRlcnNbMF0udW5pZm9ybXMuZGltZW5zaW9ucylcbiAgICAgICAge1xuICAgICAgICAgICAgZmlsdGVyc1swXS51bmlmb3Jtcy5kaW1lbnNpb25zLnZhbHVlWzBdID0gdGhpcy5yZW5kZXJlci53aWR0aDtcbiAgICAgICAgICAgIGZpbHRlcnNbMF0udW5pZm9ybXMuZGltZW5zaW9ucy52YWx1ZVsxXSA9IHRoaXMucmVuZGVyZXIuaGVpZ2h0O1xuICAgICAgICAgICAgZmlsdGVyc1swXS51bmlmb3Jtcy5kaW1lbnNpb25zLnZhbHVlWzJdID0gdGhpcy5xdWFkLnZlcnRpY2VzWzBdO1xuICAgICAgICAgICAgZmlsdGVyc1swXS51bmlmb3Jtcy5kaW1lbnNpb25zLnZhbHVlWzNdID0gdGhpcy5xdWFkLnZlcnRpY2VzWzVdO1xuICAgICAgICB9XG5cbiAgICAgICAgZmlsdGVyc1swXS5hcHBseUZpbHRlciggdGhpcy5yZW5kZXJlciwgaW5wdXQsIG91dHB1dCApO1xuICAgICAgICB0aGlzLnJldHVyblJlbmRlclRhcmdldCggaW5wdXQgKTtcblxuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICB2YXIgZmxpcFRleHR1cmUgPSBpbnB1dDtcbiAgICAgICAgdmFyIGZsb3BUZXh0dXJlID0gdGhpcy5nZXRSZW5kZXJUYXJnZXQodHJ1ZSk7XG5cbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBmaWx0ZXJzLmxlbmd0aC0xOyBpKyspXG4gICAgICAgIHtcbiAgICAgICAgICAgIHZhciBmaWx0ZXIgPSBmaWx0ZXJzW2ldO1xuXG4gICAgICAgICAgICAvLyBUT0RPIChjZW5nbGVyKSAtIFRoZXJlIGhhcyB0byBiZSBhIGJldHRlciB3YXkgdGhlbiBzZXR0aW5nIHRoaXMgZWFjaCB0aW1lP1xuICAgICAgICAgICAgaWYgKGZpbHRlci51bmlmb3Jtcy5kaW1lbnNpb25zKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGZpbHRlci51bmlmb3Jtcy5kaW1lbnNpb25zLnZhbHVlWzBdID0gdGhpcy5yZW5kZXJlci53aWR0aDtcbiAgICAgICAgICAgICAgICBmaWx0ZXIudW5pZm9ybXMuZGltZW5zaW9ucy52YWx1ZVsxXSA9IHRoaXMucmVuZGVyZXIuaGVpZ2h0O1xuICAgICAgICAgICAgICAgIGZpbHRlci51bmlmb3Jtcy5kaW1lbnNpb25zLnZhbHVlWzJdID0gdGhpcy5xdWFkLnZlcnRpY2VzWzBdO1xuICAgICAgICAgICAgICAgIGZpbHRlci51bmlmb3Jtcy5kaW1lbnNpb25zLnZhbHVlWzNdID0gdGhpcy5xdWFkLnZlcnRpY2VzWzVdO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBmaWx0ZXIuYXBwbHlGaWx0ZXIoIHRoaXMucmVuZGVyZXIsIGZsaXBUZXh0dXJlLCBmbG9wVGV4dHVyZSApO1xuXG4gICAgICAgICAgICB2YXIgdGVtcCA9IGZsaXBUZXh0dXJlO1xuICAgICAgICAgICAgZmxpcFRleHR1cmUgPSBmbG9wVGV4dHVyZTtcbiAgICAgICAgICAgIGZsb3BUZXh0dXJlID0gdGVtcDtcbiAgICAgICAgfVxuXG4gICAgICAgIGZpbHRlcnNbZmlsdGVycy5sZW5ndGgtMV0uYXBwbHlGaWx0ZXIoIHRoaXMucmVuZGVyZXIsIGZsaXBUZXh0dXJlLCBvdXRwdXQgKTtcblxuICAgICAgICB0aGlzLnJldHVyblJlbmRlclRhcmdldCggZmxpcFRleHR1cmUgKTtcbiAgICAgICAgdGhpcy5yZXR1cm5SZW5kZXJUYXJnZXQoIGZsb3BUZXh0dXJlICk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZpbHRlckRhdGEuZmlsdGVyO1xufTtcblxuLyoqXG4gKiBHcmFicyBhbiByZW5kZXIgdGFyZ2V0IGZyb20gdGhlIGludGVybmFsIHBvb2xcbiAqXG4gKiBAcGFyYW0gY2xlYXIge2Jvb2xlYW59IFdoZXRoZXIgb3Igbm90IHdlIG5lZWQgdG8gY2xlYXIgdGhlIFJlbmRlclRhcmdldFxuICogQHJldHVybiB7UmVuZGVyVGFyZ2V0fVxuICovXG5GaWx0ZXJNYW5hZ2VyLnByb3RvdHlwZS5nZXRSZW5kZXJUYXJnZXQgPSBmdW5jdGlvbiAoIGNsZWFyIClcbntcbiAgICB2YXIgcmVuZGVyVGFyZ2V0ID0gdGhpcy50ZXh0dXJlUG9vbC5wb3AoKSB8fCBuZXcgUmVuZGVyVGFyZ2V0KHRoaXMucmVuZGVyZXIuZ2wsIHRoaXMudGV4dHVyZVNpemUud2lkdGgsIHRoaXMudGV4dHVyZVNpemUuaGVpZ2h0LCBDT05TVC5TQ0FMRV9NT0RFUy5MSU5FQVIsIHRoaXMucmVuZGVyZXIucmVzb2x1dGlvbiAqIENPTlNULkZJTFRFUl9SRVNPTFVUSU9OKTtcbiAgICByZW5kZXJUYXJnZXQuZnJhbWUgPSB0aGlzLmN1cnJlbnRGcmFtZTtcblxuICAgIGlmIChjbGVhcilcbiAgICB7XG4gICAgICAgIHJlbmRlclRhcmdldC5jbGVhcih0cnVlKTtcbiAgICB9XG5cbiAgICByZXR1cm4gcmVuZGVyVGFyZ2V0O1xufTtcblxuLypcbiAqIFJldHVybnMgYSBSZW5kZXJUYXJnZXQgdG8gdGhlIGludGVybmFsIHBvb2xcbiAqIEBwYXJhbSByZW5kZXJUYXJnZXQge1JlbmRlclRhcmdldH0gVGhlIFJlbmRlclRhcmdldCB3ZSB3YW50IHRvIHJldHVybiB0byB0aGUgcG9vbFxuICovXG5GaWx0ZXJNYW5hZ2VyLnByb3RvdHlwZS5yZXR1cm5SZW5kZXJUYXJnZXQgPSBmdW5jdGlvbiAocmVuZGVyVGFyZ2V0KVxue1xuICAgIHRoaXMudGV4dHVyZVBvb2wucHVzaCggcmVuZGVyVGFyZ2V0ICk7XG59O1xuXG4vKlxuICogQXBwbGllcyB0aGUgZmlsdGVyXG4gKiBAcGFyYW0gc2hhZGVyIHtTaGFkZXJ9IFRoZSBzaGFkZXIgdG8gdXBsb2FkXG4gKiBAcGFyYW0gaW5wdXRUYXJnZXQge1JlbmRlclRhcmdldH1cbiAqIEBwYXJhbSBvdXRwdXRUYXJnZXQge1JlbmRlclRhcmdldH1cbiAqIEBwYXJhbSBjbGVhciB7Ym9vbGVhbn0gV2hldGhlciBvciBub3Qgd2Ugd2FudCB0byBjbGVhciB0aGUgb3V0cHV0VGFyZ2V0XG4gKi9cbkZpbHRlck1hbmFnZXIucHJvdG90eXBlLmFwcGx5RmlsdGVyID0gZnVuY3Rpb24gKHNoYWRlciwgaW5wdXRUYXJnZXQsIG91dHB1dFRhcmdldCwgY2xlYXIpXG57XG4gICAgdmFyIGdsID0gdGhpcy5yZW5kZXJlci5nbDtcblxuICAgIHRoaXMucmVuZGVyZXIuc2V0UmVuZGVyVGFyZ2V0KG91dHB1dFRhcmdldCk7XG5cbiAgICBpZiAoY2xlYXIpXG4gICAge1xuICAgICAgICBvdXRwdXRUYXJnZXQuY2xlYXIoKTtcbiAgICB9XG5cbiAgICAvLyBzZXQgdGhlIHNoYWRlclxuICAgIHRoaXMucmVuZGVyZXIuc2hhZGVyTWFuYWdlci5zZXRTaGFkZXIoc2hhZGVyKTtcblxuICAgIC8vIFRPRE8gKGNlbmdsZXIpIC0gQ2FuIHRoaXMgYmUgY2FjaGVkIGFuZCBub3QgYHRvQXJyYXlgZWQgZWFjaCBmcmFtZT9cbiAgICBzaGFkZXIudW5pZm9ybXMucHJvamVjdGlvbk1hdHJpeC52YWx1ZSA9IHRoaXMucmVuZGVyZXIuY3VycmVudFJlbmRlclRhcmdldC5wcm9qZWN0aW9uTWF0cml4LnRvQXJyYXkodHJ1ZSk7XG5cbiAgICAvL1RPRE8gY2FuIHRoaXMgYmUgb3B0aW1pc2VkP1xuICAgIHNoYWRlci5zeW5jVW5pZm9ybXMoKTtcbi8qXG4gICAgZ2wudmVydGV4QXR0cmliUG9pbnRlcihzaGFkZXIuYXR0cmlidXRlcy5hVmVydGV4UG9zaXRpb24sIDIsIGdsLkZMT0FULCBmYWxzZSwgMCwgMCk7XG4gICAgZ2wudmVydGV4QXR0cmliUG9pbnRlcihzaGFkZXIuYXR0cmlidXRlcy5hVGV4dHVyZUNvb3JkLCAyLCBnbC5GTE9BVCwgZmFsc2UsIDAsIDIgKiA0ICogNCk7XG4gICAgZ2wudmVydGV4QXR0cmliUG9pbnRlcihzaGFkZXIuYXR0cmlidXRlcy5hQ29sb3IsIDQsIGdsLkZMT0FULCBmYWxzZSwgMCwgNCAqIDQgKiA0KTtcbiovXG5cbiAgICBnbC5hY3RpdmVUZXh0dXJlKGdsLlRFWFRVUkUwKTtcbiAgICBnbC5iaW5kVGV4dHVyZShnbC5URVhUVVJFXzJELCBpbnB1dFRhcmdldC50ZXh0dXJlKTtcblxuICAgIGdsLmRyYXdFbGVtZW50cyhnbC5UUklBTkdMRVMsIDYsIGdsLlVOU0lHTkVEX1NIT1JULCAwICk7XG4gICAgdGhpcy5yZW5kZXJlci5kcmF3Q291bnQrKztcbn07XG5cbi8qXG4gKiBDYWxjdWxhdGVzIHRoZSBtYXBwZWQgbWF0cml4XG4gKiBAcGFyYW0gZmlsdGVyQXJlYSB7UmVjdGFuZ2xlfSBUaGUgZmlsdGVyIGFyZWFcbiAqIEBwYXJhbSBzcHJpdGUge1Nwcml0ZX0gdGhlIHRhcmdldCBzcHJpdGVcbiAqIEBwYXJhbSBvdXRwdXRNYXRyaXgge01hdHJpeH0gQGFsdmluXG4gKi9cbi8vIFRPRE8gcGxheWluZyBhcm91bmQgaGVyZS4uIHRoaXMgaXMgdGVtcG9yYXJ5IC0gKHdpbGwgZW5kIHVwIGluIHRoZSBzaGFkZXIpXG5GaWx0ZXJNYW5hZ2VyLnByb3RvdHlwZS5jYWxjdWxhdGVNYXBwZWRNYXRyaXggPSBmdW5jdGlvbiAoZmlsdGVyQXJlYSwgc3ByaXRlLCBvdXRwdXRNYXRyaXgpXG57XG4gICAgdmFyIHdvcmxkVHJhbnNmb3JtID0gc3ByaXRlLndvcmxkVHJhbnNmb3JtLmNvcHkobWF0aC5NYXRyaXguVEVNUF9NQVRSSVgpLFxuICAgIHRleHR1cmUgPSBzcHJpdGUuX3RleHR1cmUuYmFzZVRleHR1cmU7XG5cbiAgICB2YXIgbWFwcGVkTWF0cml4ID0gb3V0cHV0TWF0cml4LmlkZW50aXR5KCk7XG5cbiAgICAvLyBzY2FsZS4uXG4gICAgdmFyIHJhdGlvID0gdGhpcy50ZXh0dXJlU2l6ZS5oZWlnaHQgLyB0aGlzLnRleHR1cmVTaXplLndpZHRoO1xuXG4gICAgbWFwcGVkTWF0cml4LnRyYW5zbGF0ZShmaWx0ZXJBcmVhLnggLyB0aGlzLnRleHR1cmVTaXplLndpZHRoLCBmaWx0ZXJBcmVhLnkgLyB0aGlzLnRleHR1cmVTaXplLmhlaWdodCApO1xuXG4gICAgbWFwcGVkTWF0cml4LnNjYWxlKDEgLCByYXRpbyk7XG5cbiAgICB2YXIgdHJhbnNsYXRlU2NhbGVYID0gKHRoaXMudGV4dHVyZVNpemUud2lkdGggLyB0ZXh0dXJlLndpZHRoKTtcbiAgICB2YXIgdHJhbnNsYXRlU2NhbGVZID0gKHRoaXMudGV4dHVyZVNpemUuaGVpZ2h0IC8gdGV4dHVyZS5oZWlnaHQpO1xuXG4gICAgd29ybGRUcmFuc2Zvcm0udHggLz0gdGV4dHVyZS53aWR0aCAqIHRyYW5zbGF0ZVNjYWxlWDtcbiAgICB3b3JsZFRyYW5zZm9ybS50eSAvPSB0ZXh0dXJlLndpZHRoICogdHJhbnNsYXRlU2NhbGVYO1xuXG4gICAgd29ybGRUcmFuc2Zvcm0uaW52ZXJ0KCk7XG5cbiAgICBtYXBwZWRNYXRyaXgucHJlcGVuZCh3b3JsZFRyYW5zZm9ybSk7XG5cbiAgICAvLyBhcHBseSBpbnZlcnNlIHNjYWxlLi5cbiAgICBtYXBwZWRNYXRyaXguc2NhbGUoMSAsIDEvcmF0aW8pO1xuXG4gICAgbWFwcGVkTWF0cml4LnNjYWxlKCB0cmFuc2xhdGVTY2FsZVggLCB0cmFuc2xhdGVTY2FsZVkgKTtcblxuICAgIG1hcHBlZE1hdHJpeC50cmFuc2xhdGUoc3ByaXRlLmFuY2hvci54LCBzcHJpdGUuYW5jaG9yLnkpO1xuXG4gICAgcmV0dXJuIG1hcHBlZE1hdHJpeDtcblxuICAgIC8vIEtlZXBpbmcgdGhlIG9yZ2luYWwgYXMgYSByZW1pbmRlciB0byBtZSBvbiBob3cgdGhpcyB3b3JrcyFcbiAgICAvL1xuICAgIC8vIHZhciBtID0gbmV3IG1hdGguTWF0cml4KCk7XG5cbiAgICAvLyAvLyBzY2FsZS4uXG4gICAgLy8gdmFyIHJhdGlvID0gdGhpcy50ZXh0dXJlU2l6ZS5oZWlnaHQgLyB0aGlzLnRleHR1cmVTaXplLndpZHRoO1xuXG4gICAgLy8gbS50cmFuc2xhdGUoZmlsdGVyQXJlYS54IC8gdGhpcy50ZXh0dXJlU2l6ZS53aWR0aCwgZmlsdGVyQXJlYS55IC8gdGhpcy50ZXh0dXJlU2l6ZS5oZWlnaHQpO1xuXG5cbiAgICAvLyBtLnNjYWxlKDEgLCByYXRpbyk7XG5cblxuICAgIC8vIHZhciB0cmFuc2Zvcm0gPSB3dC5jbG9uZSgpO1xuXG4gICAgLy8gdmFyIHRyYW5zbGF0ZVNjYWxlWCA9ICh0aGlzLnRleHR1cmVTaXplLndpZHRoIC8gNjIwKTtcbiAgICAvLyB2YXIgdHJhbnNsYXRlU2NhbGVZID0gKHRoaXMudGV4dHVyZVNpemUuaGVpZ2h0IC8gMzgwKTtcblxuICAgIC8vIHRyYW5zZm9ybS50eCAvPSA2MjAgKiB0cmFuc2xhdGVTY2FsZVg7XG4gICAgLy8gdHJhbnNmb3JtLnR5IC89IDYyMCAqIHRyYW5zbGF0ZVNjYWxlWDtcblxuICAgIC8vIHRyYW5zZm9ybS5pbnZlcnQoKTtcblxuICAgIC8vIHRyYW5zZm9ybS5hcHBlbmQobSk7XG5cbiAgICAvLyAvLyBhcHBseSBpbnZlcnNlIHNjYWxlLi5cbiAgICAvLyB0cmFuc2Zvcm0uc2NhbGUoMSAsIDEvcmF0aW8pO1xuXG4gICAgLy8gdHJhbnNmb3JtLnNjYWxlKCB0cmFuc2xhdGVTY2FsZVggLCB0cmFuc2xhdGVTY2FsZVkgKTtcblxuICAgIC8vIHJldHVybiB0cmFuc2Zvcm07XG59O1xuXG4vKlxuICogQ29uc3RyYWlucyB0aGUgZmlsdGVyIGFyZWEgdG8gdGhlIHRleHR1cmUgc2l6ZVxuICogQHBhcmFtIGZpbHRlckFyZWEge1JlY3RhbmdsZX0gVGhlIGZpbHRlciBhcmVhIHdlIHdhbnQgdG8gY2FwXG4gKi9cbkZpbHRlck1hbmFnZXIucHJvdG90eXBlLmNhcEZpbHRlckFyZWEgPSBmdW5jdGlvbiAoZmlsdGVyQXJlYSlcbntcbiAgICBpZiAoZmlsdGVyQXJlYS54IDwgMClcbiAgICB7XG4gICAgICAgIGZpbHRlckFyZWEud2lkdGggKz0gZmlsdGVyQXJlYS54O1xuICAgICAgICBmaWx0ZXJBcmVhLnggPSAwO1xuICAgIH1cblxuICAgIGlmIChmaWx0ZXJBcmVhLnkgPCAwKVxuICAgIHtcbiAgICAgICAgZmlsdGVyQXJlYS5oZWlnaHQgKz0gZmlsdGVyQXJlYS55O1xuICAgICAgICBmaWx0ZXJBcmVhLnkgPSAwO1xuICAgIH1cblxuICAgIGlmICggZmlsdGVyQXJlYS54ICsgZmlsdGVyQXJlYS53aWR0aCA+IHRoaXMudGV4dHVyZVNpemUud2lkdGggKVxuICAgIHtcbiAgICAgICAgZmlsdGVyQXJlYS53aWR0aCA9IHRoaXMudGV4dHVyZVNpemUud2lkdGggLSBmaWx0ZXJBcmVhLng7XG4gICAgfVxuXG4gICAgaWYgKCBmaWx0ZXJBcmVhLnkgKyBmaWx0ZXJBcmVhLmhlaWdodCA+IHRoaXMudGV4dHVyZVNpemUuaGVpZ2h0IClcbiAgICB7XG4gICAgICAgIGZpbHRlckFyZWEuaGVpZ2h0ID0gdGhpcy50ZXh0dXJlU2l6ZS5oZWlnaHQgLSBmaWx0ZXJBcmVhLnk7XG4gICAgfVxufTtcblxuLypcbiAqIFJlc2l6ZXMgYWxsIHRoZSByZW5kZXIgdGFyZ2V0cyBpbiB0aGUgcG9vbFxuICogQHBhcmFtIHdpZHRoIHtudW1iZXJ9IHRoZSBuZXcgd2lkdGhcbiAqIEBwYXJhbSBoZWlnaHQge251bWJlcn0gdGhlIG5ldyBoZWlnaHRcbiAqL1xuRmlsdGVyTWFuYWdlci5wcm90b3R5cGUucmVzaXplID0gZnVuY3Rpb24gKCB3aWR0aCwgaGVpZ2h0IClcbntcbiAgICB0aGlzLnRleHR1cmVTaXplLndpZHRoID0gd2lkdGg7XG4gICAgdGhpcy50ZXh0dXJlU2l6ZS5oZWlnaHQgPSBoZWlnaHQ7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMudGV4dHVyZVBvb2wubGVuZ3RoOyBpKyspXG4gICAge1xuICAgICAgICB0aGlzLnRleHR1cmVQb29sW2ldLnJlc2l6ZSggd2lkdGgsIGhlaWdodCApO1xuICAgIH1cbn07XG5cbi8qKlxuICogRGVzdHJveXMgdGhlIGZpbHRlciBhbmQgcmVtb3ZlcyBpdCBmcm9tIHRoZSBmaWx0ZXIgc3RhY2suXG4gKlxuICovXG5GaWx0ZXJNYW5hZ2VyLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLnF1YWQuZGVzdHJveSgpO1xuICAgIFxuICAgIFdlYkdMTWFuYWdlci5wcm90b3R5cGUuZGVzdHJveS5jYWxsKHRoaXMpO1xuICAgIFxuICAgIHRoaXMuZmlsdGVyU3RhY2sgPSBudWxsO1xuICAgIHRoaXMub2Zmc2V0WSA9IDA7XG5cbiAgICAvLyBkZXN0cm95IHRleHR1cmVzXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLnRleHR1cmVQb29sLmxlbmd0aDsgaSsrKVxuICAgIHtcbiAgICAgICAgdGhpcy50ZXh0dXJlUG9vbFtpXS5kZXN0cm95KCk7XG4gICAgfVxuXG4gICAgdGhpcy50ZXh0dXJlUG9vbCA9IG51bGw7XG59O1xuIiwidmFyIFdlYkdMTWFuYWdlciA9IHJlcXVpcmUoJy4vV2ViR0xNYW5hZ2VyJyksXG4gICAgQWxwaGFNYXNrRmlsdGVyID0gcmVxdWlyZSgnLi4vZmlsdGVycy9TcHJpdGVNYXNrRmlsdGVyJyk7XG5cbi8qKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLldlYkdMUmVuZGVyZXJ9IFRoZSByZW5kZXJlciB0aGlzIG1hbmFnZXIgd29ya3MgZm9yLlxuICovXG5mdW5jdGlvbiBNYXNrTWFuYWdlcihyZW5kZXJlcilcbntcbiAgICBXZWJHTE1hbmFnZXIuY2FsbCh0aGlzLCByZW5kZXJlcik7XG5cbiAgICB0aGlzLnN0ZW5jaWxTdGFjayA9IFtdO1xuICAgIHRoaXMucmV2ZXJzZSA9IHRydWU7XG4gICAgdGhpcy5jb3VudCA9IDA7XG5cbiAgICB0aGlzLmFscGhhTWFza1Bvb2wgPSBbXTtcbn1cblxuTWFza01hbmFnZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShXZWJHTE1hbmFnZXIucHJvdG90eXBlKTtcbk1hc2tNYW5hZ2VyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IE1hc2tNYW5hZ2VyO1xubW9kdWxlLmV4cG9ydHMgPSBNYXNrTWFuYWdlcjtcblxuLyoqXG4gKiBBcHBsaWVzIHRoZSBNYXNrIGFuZCBhZGRzIGl0IHRvIHRoZSBjdXJyZW50IGZpbHRlciBzdGFjay5cbiAqXG4gKiBAcGFyYW0gZ3JhcGhpY3Mge1BJWEkuR3JhcGhpY3N9XG4gKiBAcGFyYW0gd2ViR0xEYXRhIHthbnlbXX1cbiAqL1xuTWFza01hbmFnZXIucHJvdG90eXBlLnB1c2hNYXNrID0gZnVuY3Rpb24gKHRhcmdldCwgbWFza0RhdGEpXG57XG4gICAgaWYgKG1hc2tEYXRhLnRleHR1cmUpXG4gICAge1xuICAgICAgICB0aGlzLnB1c2hTcHJpdGVNYXNrKHRhcmdldCwgbWFza0RhdGEpO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICB0aGlzLnB1c2hTdGVuY2lsTWFzayh0YXJnZXQsIG1hc2tEYXRhKTtcbiAgICB9XG5cbn07XG5cbi8qKlxuICogUmVtb3ZlcyB0aGUgbGFzdCBtYXNrIGZyb20gdGhlIG1hc2sgc3RhY2sgYW5kIGRvZXNuJ3QgcmV0dXJuIGl0LlxuICpcbiAqIEBwYXJhbSB0YXJnZXQge1BJWEkuUmVuZGVyVGFyZ2V0fVxuICogQHBhcmFtIG1hc2tEYXRhIHthbnlbXX1cbiAqL1xuTWFza01hbmFnZXIucHJvdG90eXBlLnBvcE1hc2sgPSBmdW5jdGlvbiAodGFyZ2V0LCBtYXNrRGF0YSlcbntcbiAgICBpZiAobWFza0RhdGEudGV4dHVyZSlcbiAgICB7XG4gICAgICAgIHRoaXMucG9wU3ByaXRlTWFzayh0YXJnZXQsIG1hc2tEYXRhKTtcbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgdGhpcy5wb3BTdGVuY2lsTWFzayh0YXJnZXQsIG1hc2tEYXRhKTtcbiAgICB9XG59O1xuXG4vKipcbiAqIEFwcGxpZXMgdGhlIE1hc2sgYW5kIGFkZHMgaXQgdG8gdGhlIGN1cnJlbnQgZmlsdGVyIHN0YWNrLlxuICpcbiAqIEBwYXJhbSB0YXJnZXQge1BJWEkuUmVuZGVyVGFyZ2V0fVxuICogQHBhcmFtIG1hc2tEYXRhIHthbnlbXX1cbiAqL1xuTWFza01hbmFnZXIucHJvdG90eXBlLnB1c2hTcHJpdGVNYXNrID0gZnVuY3Rpb24gKHRhcmdldCwgbWFza0RhdGEpXG57XG4gICAgdmFyIGFscGhhTWFza0ZpbHRlciA9IHRoaXMuYWxwaGFNYXNrUG9vbC5wb3AoKTtcblxuICAgIGlmICghYWxwaGFNYXNrRmlsdGVyKVxuICAgIHtcbiAgICAgICAgYWxwaGFNYXNrRmlsdGVyID0gW25ldyBBbHBoYU1hc2tGaWx0ZXIobWFza0RhdGEpXTtcbiAgICB9XG5cbiAgICBhbHBoYU1hc2tGaWx0ZXJbMF0ubWFza1Nwcml0ZSA9IG1hc2tEYXRhO1xuICAgIHRoaXMucmVuZGVyZXIuZmlsdGVyTWFuYWdlci5wdXNoRmlsdGVyKHRhcmdldCwgYWxwaGFNYXNrRmlsdGVyKTtcbn07XG5cbi8qKlxuICogUmVtb3ZlcyB0aGUgbGFzdCBmaWx0ZXIgZnJvbSB0aGUgZmlsdGVyIHN0YWNrIGFuZCBkb2Vzbid0IHJldHVybiBpdC5cbiAqXG4gKi9cbk1hc2tNYW5hZ2VyLnByb3RvdHlwZS5wb3BTcHJpdGVNYXNrID0gZnVuY3Rpb24gKClcbntcbiAgICB2YXIgZmlsdGVycyA9IHRoaXMucmVuZGVyZXIuZmlsdGVyTWFuYWdlci5wb3BGaWx0ZXIoKTtcblxuICAgIHRoaXMuYWxwaGFNYXNrUG9vbC5wdXNoKGZpbHRlcnMpO1xufTtcblxuXG4vKipcbiAqIEFwcGxpZXMgdGhlIE1hc2sgYW5kIGFkZHMgaXQgdG8gdGhlIGN1cnJlbnQgZmlsdGVyIHN0YWNrLlxuICpcbiAqIEBwYXJhbSB0YXJnZXQge1BJWEkuUmVuZGVyVGFyZ2V0fVxuICogQHBhcmFtIG1hc2tEYXRhIHthbnlbXX1cbiAqL1xuTWFza01hbmFnZXIucHJvdG90eXBlLnB1c2hTdGVuY2lsTWFzayA9IGZ1bmN0aW9uICh0YXJnZXQsIG1hc2tEYXRhKVxue1xuICAgIHRoaXMucmVuZGVyZXIuc3RlbmNpbE1hbmFnZXIucHVzaE1hc2sobWFza0RhdGEpO1xufTtcblxuLyoqXG4gKiBSZW1vdmVzIHRoZSBsYXN0IGZpbHRlciBmcm9tIHRoZSBmaWx0ZXIgc3RhY2sgYW5kIGRvZXNuJ3QgcmV0dXJuIGl0LlxuICpcbiAqIEBwYXJhbSB0YXJnZXQge1BJWEkuUmVuZGVyVGFyZ2V0fVxuICogQHBhcmFtIG1hc2tEYXRhIHthbnlbXX1cbiAqL1xuTWFza01hbmFnZXIucHJvdG90eXBlLnBvcFN0ZW5jaWxNYXNrID0gZnVuY3Rpb24gKHRhcmdldCwgbWFza0RhdGEpXG57XG4gICAgdGhpcy5yZW5kZXJlci5zdGVuY2lsTWFuYWdlci5wb3BNYXNrKG1hc2tEYXRhKTtcbn07XG5cbiIsInZhciBXZWJHTE1hbmFnZXIgPSByZXF1aXJlKCcuL1dlYkdMTWFuYWdlcicpLFxuICAgIFRleHR1cmVTaGFkZXIgPSByZXF1aXJlKCcuLi9zaGFkZXJzL1RleHR1cmVTaGFkZXInKSxcbiAgICBDb21wbGV4UHJpbWl0aXZlU2hhZGVyID0gcmVxdWlyZSgnLi4vc2hhZGVycy9Db21wbGV4UHJpbWl0aXZlU2hhZGVyJyksXG4gICAgUHJpbWl0aXZlU2hhZGVyID0gcmVxdWlyZSgnLi4vc2hhZGVycy9QcmltaXRpdmVTaGFkZXInKSxcbiAgICB1dGlscyA9IHJlcXVpcmUoJy4uLy4uLy4uL3V0aWxzJyk7XG5cbi8qKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQGV4dGVuZHMgUElYSS5XZWJHTE1hbmFnZXJcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5XZWJHTFJlbmRlcmVyfSBUaGUgcmVuZGVyZXIgdGhpcyBtYW5hZ2VyIHdvcmtzIGZvci5cbiAqL1xuZnVuY3Rpb24gU2hhZGVyTWFuYWdlcihyZW5kZXJlcilcbntcbiAgICBXZWJHTE1hbmFnZXIuY2FsbCh0aGlzLCByZW5kZXJlcik7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy5tYXhBdHRpYnMgPSAxMDtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge2FueVtdfVxuICAgICAqL1xuICAgIHRoaXMuYXR0cmliU3RhdGUgPSBbXTtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge2FueVtdfVxuICAgICAqL1xuICAgIHRoaXMudGVtcEF0dHJpYlN0YXRlID0gW107XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMubWF4QXR0aWJzOyBpKyspXG4gICAge1xuICAgICAgICB0aGlzLmF0dHJpYlN0YXRlW2ldID0gZmFsc2U7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7YW55W119XG4gICAgICovXG4gICAgdGhpcy5zdGFjayA9IFtdO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fY3VycmVudElkID0gLTE7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlNoYWRlcn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuY3VycmVudFNoYWRlciA9IG51bGw7XG5cbi8vICAgIHRoaXMuaW5pdFBsdWdpbnMoKTtcbn1cblxuU2hhZGVyTWFuYWdlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFdlYkdMTWFuYWdlci5wcm90b3R5cGUpO1xuU2hhZGVyTWFuYWdlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBTaGFkZXJNYW5hZ2VyO1xudXRpbHMucGx1Z2luVGFyZ2V0Lm1peGluKFNoYWRlck1hbmFnZXIpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IFNoYWRlck1hbmFnZXI7XG5cbi8qKlxuICogQ2FsbGVkIHdoZW4gdGhlcmUgaXMgYSBXZWJHTCBjb250ZXh0IGNoYW5nZS5cbiAqXG4gKi9cblNoYWRlck1hbmFnZXIucHJvdG90eXBlLm9uQ29udGV4dENoYW5nZSA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy5pbml0UGx1Z2lucygpO1xuXG4gICAgdmFyIGdsID0gdGhpcy5yZW5kZXJlci5nbDtcblxuICAgIC8vIGdldCB0aGUgbWF4aW11bSBudW1iZXIgb2YgYXR0cmlidXRlIGNvcnJlY3RseSBhcyB0aGlzIHRlbmRzIHRvIHZhcnlcbiAgICB0aGlzLm1heEF0dGlicyA9IGdsLmdldFBhcmFtZXRlcihnbC5NQVhfVkVSVEVYX0FUVFJJQlMpO1xuXG4gICAgdGhpcy5hdHRyaWJTdGF0ZSA9IFtdO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLm1heEF0dGliczsgaSsrKVxuICAgIHtcbiAgICAgICAgdGhpcy5hdHRyaWJTdGF0ZVtpXSA9IGZhbHNlO1xuICAgIH1cblxuICAgIC8vIFRPRE8gLSBXaHkgYXJlIHRoZXNlIG5vdCBwbHVnaW5zPyBXZSBjYW4ndCBkZWNvdXBsZSBwcmltaXRpdmVzIHVubGVzcyB0aGV5IGFyZS4uLi5cbiAgICB0aGlzLmRlZmF1bHRTaGFkZXIgPSBuZXcgVGV4dHVyZVNoYWRlcih0aGlzKTtcbiAgICB0aGlzLnByaW1pdGl2ZVNoYWRlciA9IG5ldyBQcmltaXRpdmVTaGFkZXIodGhpcyk7XG4gICAgdGhpcy5jb21wbGV4UHJpbWl0aXZlU2hhZGVyID0gbmV3IENvbXBsZXhQcmltaXRpdmVTaGFkZXIodGhpcyk7XG59O1xuXG4vKipcbiAqIFRha2VzIHRoZSBhdHRyaWJ1dGVzIGdpdmVuIGluIHBhcmFtZXRlcnMgYW5kIHVwbG9hZHMgdGhlbS5cbiAqXG4gKiBAcGFyYW0gYXR0cmlicyB7YW55W119IGF0dHJpYnNcbiAqL1xuU2hhZGVyTWFuYWdlci5wcm90b3R5cGUuc2V0QXR0cmlicyA9IGZ1bmN0aW9uIChhdHRyaWJzKVxue1xuICAgIC8vIHJlc2V0IHRlbXAgc3RhdGVcbiAgICB2YXIgaTtcblxuICAgIGZvciAoaSA9IDA7IGkgPCB0aGlzLnRlbXBBdHRyaWJTdGF0ZS5sZW5ndGg7IGkrKylcbiAgICB7XG4gICAgICAgIHRoaXMudGVtcEF0dHJpYlN0YXRlW2ldID0gZmFsc2U7XG4gICAgfVxuXG4gICAgLy8gc2V0IHRoZSBuZXcgYXR0cmlic1xuICAgIGZvciAodmFyIGEgaW4gYXR0cmlicylcbiAgICB7XG4gICAgICAgIHRoaXMudGVtcEF0dHJpYlN0YXRlW2F0dHJpYnNbYV1dID0gdHJ1ZTtcbiAgICB9XG5cbiAgICB2YXIgZ2wgPSB0aGlzLnJlbmRlcmVyLmdsO1xuXG4gICAgZm9yIChpID0gMDsgaSA8IHRoaXMuYXR0cmliU3RhdGUubGVuZ3RoOyBpKyspXG4gICAge1xuICAgICAgICBpZiAodGhpcy5hdHRyaWJTdGF0ZVtpXSAhPT0gdGhpcy50ZW1wQXR0cmliU3RhdGVbaV0pXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuYXR0cmliU3RhdGVbaV0gPSB0aGlzLnRlbXBBdHRyaWJTdGF0ZVtpXTtcblxuICAgICAgICAgICAgaWYgKHRoaXMuYXR0cmliU3RhdGVbaV0pXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgZ2wuZW5hYmxlVmVydGV4QXR0cmliQXJyYXkoaSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgZ2wuZGlzYWJsZVZlcnRleEF0dHJpYkFycmF5KGkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxufTtcblxuLyoqXG4gKiBTZXRzIHRoZSBjdXJyZW50IHNoYWRlci5cbiAqXG4gKiBAcGFyYW0gc2hhZGVyIHtQSVhJLlNoYWRlcn0gdGhlIHNoYWRlciB0byB1cGxvYWRcbiAqL1xuU2hhZGVyTWFuYWdlci5wcm90b3R5cGUuc2V0U2hhZGVyID0gZnVuY3Rpb24gKHNoYWRlcilcbntcbiAgICByZXR1cm47XG4gICAgaWYgKHRoaXMuX2N1cnJlbnRJZCA9PT0gc2hhZGVyLnVpZClcbiAgICB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICB0aGlzLl9jdXJyZW50SWQgPSBzaGFkZXIudWlkO1xuXG4gICAgdGhpcy5jdXJyZW50U2hhZGVyID0gc2hhZGVyO1xuXG4gICAgdGhpcy5yZW5kZXJlci5nbC51c2VQcm9ncmFtKHNoYWRlci5wcm9ncmFtKTtcbiAgICB0aGlzLnNldEF0dHJpYnMoc2hhZGVyLmF0dHJpYnV0ZXMpO1xuXG4gICAgcmV0dXJuIHRydWU7XG59O1xuXG4vKipcbiAqIERlc3Ryb3lzIHRoaXMgb2JqZWN0LlxuICpcbiAqL1xuU2hhZGVyTWFuYWdlci5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy5wcmltaXRpdmVTaGFkZXIuZGVzdHJveSgpO1xuICAgIHRoaXMuY29tcGxleFByaW1pdGl2ZVNoYWRlci5kZXN0cm95KCk7XG4gICAgV2ViR0xNYW5hZ2VyLnByb3RvdHlwZS5kZXN0cm95LmNhbGwodGhpcyk7XG5cbiAgICB0aGlzLmRlc3Ryb3lQbHVnaW5zKCk7XG5cbiAgICB0aGlzLmF0dHJpYlN0YXRlID0gbnVsbDtcblxuICAgIHRoaXMudGVtcEF0dHJpYlN0YXRlID0gbnVsbDtcbn07XG4iLCJ2YXIgV2ViR0xNYW5hZ2VyID0gcmVxdWlyZSgnLi9XZWJHTE1hbmFnZXInKSxcbiAgICB1dGlscyA9IHJlcXVpcmUoJy4uLy4uLy4uL3V0aWxzJyk7XG5cbi8qKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLldlYkdMUmVuZGVyZXJ9IFRoZSByZW5kZXJlciB0aGlzIG1hbmFnZXIgd29ya3MgZm9yLlxuICovXG5mdW5jdGlvbiBXZWJHTE1hc2tNYW5hZ2VyKHJlbmRlcmVyKVxue1xuICAgIFdlYkdMTWFuYWdlci5jYWxsKHRoaXMsIHJlbmRlcmVyKTtcbiAgICB0aGlzLnN0ZW5jaWxNYXNrU3RhY2sgPSBudWxsO1xufVxuXG5XZWJHTE1hc2tNYW5hZ2VyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoV2ViR0xNYW5hZ2VyLnByb3RvdHlwZSk7XG5XZWJHTE1hc2tNYW5hZ2VyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFdlYkdMTWFza01hbmFnZXI7XG5tb2R1bGUuZXhwb3J0cyA9IFdlYkdMTWFza01hbmFnZXI7XG5cbi8qKlxuICogQ2hhbmdlcyB0aGUgbWFzayBzdGFjayB0aGF0IGlzIHVzZWQgYnkgdGhpcyBtYW5hZ2VyLlxuICpcbiAqIEBwYXJhbSBzdGVuY2lsTWFza1N0YWNrIHtQSVhJLlN0ZW5jaWxNYXNrU3RhY2t9IFRoZSBtYXNrIHN0YWNrXG4gKi9cbldlYkdMTWFza01hbmFnZXIucHJvdG90eXBlLnNldE1hc2tTdGFjayA9IGZ1bmN0aW9uICggc3RlbmNpbE1hc2tTdGFjayApXG57XG4gICAgdGhpcy5zdGVuY2lsTWFza1N0YWNrID0gc3RlbmNpbE1hc2tTdGFjaztcblxuICAgIHZhciBnbCA9IHRoaXMucmVuZGVyZXIuZ2w7XG5cbiAgICBpZiAoc3RlbmNpbE1hc2tTdGFjay5zdGVuY2lsU3RhY2subGVuZ3RoID09PSAwKVxuICAgIHtcbiAgICAgICAgZ2wuZGlzYWJsZShnbC5TVEVOQ0lMX1RFU1QpO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICBnbC5lbmFibGUoZ2wuU1RFTkNJTF9URVNUKTtcbiAgICB9XG59O1xuXG4vKipcbiAqIEFwcGxpZXMgdGhlIE1hc2sgYW5kIGFkZHMgaXQgdG8gdGhlIGN1cnJlbnQgZmlsdGVyIHN0YWNrLiBAYWx2aW5cbiAqXG4gKiBAcGFyYW0gZ3JhcGhpY3Mge1BJWEkuR3JhcGhpY3N9XG4gKiBAcGFyYW0gd2ViR0xEYXRhIHthbnlbXX1cbiAqL1xuV2ViR0xNYXNrTWFuYWdlci5wcm90b3R5cGUucHVzaFN0ZW5jaWwgPSBmdW5jdGlvbiAoZ3JhcGhpY3MsIHdlYkdMRGF0YSlcbntcbiAgICB0aGlzLnJlbmRlcmVyLl9hY3RpdmVSZW5kZXJUYXJnZXQuYXR0YWNoU3RlbmNpbEJ1ZmZlcigpO1xuXG4gICAgdmFyIGdsID0gdGhpcy5yZW5kZXJlci5nbCxcbiAgICAgICAgc21zID0gdGhpcy5zdGVuY2lsTWFza1N0YWNrO1xuXG4gICAgdGhpcy5iaW5kR3JhcGhpY3MoZ3JhcGhpY3MsIHdlYkdMRGF0YSk7XG5cbiAgICBpZiAoc21zLnN0ZW5jaWxTdGFjay5sZW5ndGggPT09IDApXG4gICAge1xuICAgICAgICBnbC5lbmFibGUoZ2wuU1RFTkNJTF9URVNUKTtcbiAgICAgICAgZ2wuY2xlYXIoZ2wuU1RFTkNJTF9CVUZGRVJfQklUKTtcbiAgICAgICAgc21zLnJldmVyc2UgPSB0cnVlO1xuICAgICAgICBzbXMuY291bnQgPSAwO1xuICAgIH1cblxuICAgIHNtcy5zdGVuY2lsU3RhY2sucHVzaCh3ZWJHTERhdGEpO1xuXG4gICAgdmFyIGxldmVsID0gc21zLmNvdW50O1xuXG4gICAgZ2wuY29sb3JNYXNrKGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlKTtcblxuICAgIGdsLnN0ZW5jaWxGdW5jKGdsLkFMV0FZUywwLDB4RkYpO1xuICAgIGdsLnN0ZW5jaWxPcChnbC5LRUVQLGdsLktFRVAsZ2wuSU5WRVJUKTtcblxuICAgIC8vIGRyYXcgdGhlIHRyaWFuZ2xlIHN0cmlwIVxuXG4gICAgaWYgKHdlYkdMRGF0YS5tb2RlID09PSAxKVxuICAgIHtcbiAgICAgICAgZ2wuZHJhd0VsZW1lbnRzKGdsLlRSSUFOR0xFX0ZBTiwgIHdlYkdMRGF0YS5pbmRpY2VzLmxlbmd0aCAtIDQsIGdsLlVOU0lHTkVEX1NIT1JULCAwICk7XG5cbiAgICAgICAgaWYgKHNtcy5yZXZlcnNlKVxuICAgICAgICB7XG4gICAgICAgICAgICBnbC5zdGVuY2lsRnVuYyhnbC5FUVVBTCwgMHhGRiAtIGxldmVsLCAweEZGKTtcbiAgICAgICAgICAgIGdsLnN0ZW5jaWxPcChnbC5LRUVQLGdsLktFRVAsZ2wuREVDUik7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgICBnbC5zdGVuY2lsRnVuYyhnbC5FUVVBTCxsZXZlbCwgMHhGRik7XG4gICAgICAgICAgICBnbC5zdGVuY2lsT3AoZ2wuS0VFUCxnbC5LRUVQLGdsLklOQ1IpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gZHJhdyBhIHF1YWQgdG8gaW5jcmVtZW50Li5cbiAgICAgICAgZ2wuZHJhd0VsZW1lbnRzKGdsLlRSSUFOR0xFX0ZBTiwgNCwgZ2wuVU5TSUdORURfU0hPUlQsICggd2ViR0xEYXRhLmluZGljZXMubGVuZ3RoIC0gNCApICogMiApO1xuXG4gICAgICAgIGlmIChzbXMucmV2ZXJzZSlcbiAgICAgICAge1xuICAgICAgICAgICAgZ2wuc3RlbmNpbEZ1bmMoZ2wuRVFVQUwsMHhGRi0obGV2ZWwrMSksIDB4RkYpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2VcbiAgICAgICAge1xuICAgICAgICAgICAgZ2wuc3RlbmNpbEZ1bmMoZ2wuRVFVQUwsbGV2ZWwrMSwgMHhGRik7XG4gICAgICAgIH1cblxuICAgICAgICBzbXMucmV2ZXJzZSA9ICFzbXMucmV2ZXJzZTtcbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgaWYgKCFzbXMucmV2ZXJzZSlcbiAgICAgICAge1xuICAgICAgICAgICAgZ2wuc3RlbmNpbEZ1bmMoZ2wuRVFVQUwsIDB4RkYgLSBsZXZlbCwgMHhGRik7XG4gICAgICAgICAgICBnbC5zdGVuY2lsT3AoZ2wuS0VFUCxnbC5LRUVQLGdsLkRFQ1IpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2VcbiAgICAgICAge1xuICAgICAgICAgICAgZ2wuc3RlbmNpbEZ1bmMoZ2wuRVFVQUwsbGV2ZWwsIDB4RkYpO1xuICAgICAgICAgICAgZ2wuc3RlbmNpbE9wKGdsLktFRVAsZ2wuS0VFUCxnbC5JTkNSKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGdsLmRyYXdFbGVtZW50cyhnbC5UUklBTkdMRV9TVFJJUCwgIHdlYkdMRGF0YS5pbmRpY2VzLmxlbmd0aCwgZ2wuVU5TSUdORURfU0hPUlQsIDAgKTtcblxuICAgICAgICBpZiAoIXNtcy5yZXZlcnNlKVxuICAgICAgICB7XG4gICAgICAgICAgICBnbC5zdGVuY2lsRnVuYyhnbC5FUVVBTCwweEZGLShsZXZlbCsxKSwgMHhGRik7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgICBnbC5zdGVuY2lsRnVuYyhnbC5FUVVBTCxsZXZlbCsxLCAweEZGKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGdsLmNvbG9yTWFzayh0cnVlLCB0cnVlLCB0cnVlLCB0cnVlKTtcbiAgICBnbC5zdGVuY2lsT3AoZ2wuS0VFUCxnbC5LRUVQLGdsLktFRVApO1xuXG4gICAgc21zLmNvdW50Kys7XG59O1xuXG4vKipcbiAqIFRPRE8gdGhpcyBkb2VzIG5vdCBiZWxvbmcgaGVyZSFcbiAqXG4gKiBAcGFyYW0gZ3JhcGhpY3Mge1BJWEkuR3JhcGhpY3N9XG4gKiBAcGFyYW0gd2ViR0xEYXRhIHthbnlbXX1cbiAqL1xuV2ViR0xNYXNrTWFuYWdlci5wcm90b3R5cGUuYmluZEdyYXBoaWNzID0gZnVuY3Rpb24gKGdyYXBoaWNzLCB3ZWJHTERhdGEpXG57XG4gICAgLy9pZiAodGhpcy5fY3VycmVudEdyYXBoaWNzID09PSBncmFwaGljcylyZXR1cm47XG4gICAgdmFyIGdsID0gdGhpcy5yZW5kZXJlci5nbDtcblxuICAgICAvLyBiaW5kIHRoZSBncmFwaGljcyBvYmplY3QuLlxuICAgIHZhciBzaGFkZXIgPSB0aGlzLnJlbmRlcmVyLnBsdWdpbnMuZ3JhcGhpY3MucHJpbWl0aXZlU2hhZGVyO1xuXG4gICAgaWYgKHdlYkdMRGF0YS5tb2RlID09PSAxKVxuICAgIHtcbiAgICAgICAgLypcbiAgICAgICAgc2hhZGVyID0gdGhpcy5yZW5kZXJlci5zaGFkZXJNYW5hZ2VyLmNvbXBsZXhQcmltaXRpdmVTaGFkZXI7XG5cbiAgICAgICAgdGhpcy5yZW5kZXJlci5zaGFkZXJNYW5hZ2VyLnNldFNoYWRlcihzaGFkZXIpO1xuXG4gICAgICAgIGdsLnVuaWZvcm1NYXRyaXgzZnYoc2hhZGVyLnVuaWZvcm1zLnRyYW5zbGF0aW9uTWF0cml4Ll9sb2NhdGlvbiwgZmFsc2UsIGdyYXBoaWNzLndvcmxkVHJhbnNmb3JtLnRvQXJyYXkodHJ1ZSkpO1xuXG4gICAgICAgIGdsLnVuaWZvcm1NYXRyaXgzZnYoc2hhZGVyLnVuaWZvcm1zLnByb2plY3Rpb25NYXRyaXguX2xvY2F0aW9uLCBmYWxzZSwgdGhpcy5yZW5kZXJlci5jdXJyZW50UmVuZGVyVGFyZ2V0LnByb2plY3Rpb25NYXRyaXgudG9BcnJheSh0cnVlKSk7XG5cbiAgICAgICAgZ2wudW5pZm9ybTNmdihzaGFkZXIudW5pZm9ybXMudGludC5fbG9jYXRpb24sIHV0aWxzLmhleDJyZ2IoZ3JhcGhpY3MudGludCkpO1xuXG4gICAgICAgIGdsLnVuaWZvcm0zZnYoc2hhZGVyLnVuaWZvcm1zLmNvbG9yLl9sb2NhdGlvbiwgd2ViR0xEYXRhLmNvbG9yKTtcblxuICAgICAgICBnbC51bmlmb3JtMWYoc2hhZGVyLnVuaWZvcm1zLmFscGhhLl9sb2NhdGlvbiwgZ3JhcGhpY3Mud29ybGRBbHBoYSk7XG5cbiAgICAgICAgZ2wuYmluZEJ1ZmZlcihnbC5BUlJBWV9CVUZGRVIsIHdlYkdMRGF0YS5idWZmZXIpO1xuXG4gICAgICAgIGdsLnZlcnRleEF0dHJpYlBvaW50ZXIoc2hhZGVyLmF0dHJpYnV0ZXMuYVZlcnRleFBvc2l0aW9uLCAyLCBnbC5GTE9BVCwgZmFsc2UsIDQgKiAyLCAwKTtcblxuICAgICAgICAvLyBub3cgZG8gdGhlIHJlc3QuLlxuICAgICAgICAvLyBzZXQgdGhlIGluZGV4IGJ1ZmZlciFcbiAgICAgICAgZ2wuYmluZEJ1ZmZlcihnbC5FTEVNRU5UX0FSUkFZX0JVRkZFUiwgd2ViR0xEYXRhLmluZGV4QnVmZmVyKTtcbiAgICAqL1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICAvL3RoaXMucmVuZGVyZXIuc2hhZGVyTWFuYWdlci5hY3RpdmF0ZVByaW1pdGl2ZVNoYWRlcigpO1xuLy8gICAgICAgIHNoYWRlciA9IHRoaXMucmVuZGVyZXIuc2hhZGVyTWFuYWdlci5wcmltaXRpdmVTaGFkZXI7XG4gICAgICAgXG4gICAgICAgIHRoaXMucmVuZGVyZXIuYmluZFNoYWRlcihzaGFkZXIpXG5cbiAgICAgICAgc2hhZGVyLnVuaWZvcm1zLnRyYW5zbGF0aW9uTWF0cml4ID0gZ3JhcGhpY3Mud29ybGRUcmFuc2Zvcm0udG9BcnJheSh0cnVlKTtcbiAgICAgICAgc2hhZGVyLnVuaWZvcm1zLnRpbnQgPSB1dGlscy5oZXgycmdiKGdyYXBoaWNzLnRpbnQpO1xuICAgICAgICBzaGFkZXIudW5pZm9ybXMuYWxwaGEgPSBncmFwaGljcy53b3JsZEFscGhhO1xuXG5cbiAgICAgICAgZ2wuYmluZEJ1ZmZlcihnbC5BUlJBWV9CVUZGRVIsIHdlYkdMRGF0YS5idWZmZXIpO1xuXG5cbiAgICAgICAgc2hhZGVyLmF0dHJpYnV0ZXMuYVZlcnRleFBvc2l0aW9uLnBvaW50ZXIoZ2wuRkxPQVQsIGZhbHNlLCA0ICogNiwgMCk7XG4gICAgICAgIHNoYWRlci5hdHRyaWJ1dGVzLmFDb2xvci5wb2ludGVyKGdsLkZMT0FULCBmYWxzZSwgNCAqIDYsIDIgKiA0KTtcblxuICAgICAgICBnbC5lbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShzaGFkZXIuYXR0cmlidXRlcy5hVmVydGV4UG9zaXRpb24ubG9jYXRpb24pO1xuICAgICAgICBnbC5lbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShzaGFkZXIuYXR0cmlidXRlcy5hQ29sb3IubG9jYXRpb24pO1xuXG4gICAgICAgIC8vIHNldCB0aGUgaW5kZXggYnVmZmVyIVxuICAgICAgICBnbC5iaW5kQnVmZmVyKGdsLkVMRU1FTlRfQVJSQVlfQlVGRkVSLCB3ZWJHTERhdGEuaW5kZXhCdWZmZXIpO1xuLy8gICAgICAgIGdsLmRyYXdFbGVtZW50cyhnbC5UUklBTkdMRV9TVFJJUCwgIHdlYkdMRGF0YS5pbmRpY2VzLmxlbmd0aCwgZ2wuVU5TSUdORURfU0hPUlQsIDAgKTtcblxuXG4gICAgICAvKiAgdGhpcy5yZW5kZXJlci5zaGFkZXJNYW5hZ2VyLnNldFNoYWRlcihzaGFkZXIpO1xuXG4gICAgICAgIGdsLnVuaWZvcm1NYXRyaXgzZnYoc2hhZGVyLnVuaWZvcm1zLnRyYW5zbGF0aW9uTWF0cml4Ll9sb2NhdGlvbiwgZmFsc2UsIGdyYXBoaWNzLndvcmxkVHJhbnNmb3JtLnRvQXJyYXkodHJ1ZSkpO1xuXG4gICAgICAgIGdsLnVuaWZvcm1NYXRyaXgzZnYoc2hhZGVyLnVuaWZvcm1zLnByb2plY3Rpb25NYXRyaXguX2xvY2F0aW9uLCBmYWxzZSwgdGhpcy5yZW5kZXJlci5jdXJyZW50UmVuZGVyVGFyZ2V0LnByb2plY3Rpb25NYXRyaXgudG9BcnJheSh0cnVlKSk7XG5cbiAgICAgICAgZ2wudW5pZm9ybTNmdihzaGFkZXIudW5pZm9ybXMudGludC5fbG9jYXRpb24sIHV0aWxzLmhleDJyZ2IoZ3JhcGhpY3MudGludCkpO1xuXG4gICAgICAgIGdsLnVuaWZvcm0xZihzaGFkZXIudW5pZm9ybXMuYWxwaGEuX2xvY2F0aW9uLCBncmFwaGljcy53b3JsZEFscGhhKTtcblxuICAgICAgICBnbC5iaW5kQnVmZmVyKGdsLkFSUkFZX0JVRkZFUiwgd2ViR0xEYXRhLmJ1ZmZlcik7XG5cbiAgICAgICAgZ2wudmVydGV4QXR0cmliUG9pbnRlcihzaGFkZXIuYXR0cmlidXRlcy5hVmVydGV4UG9zaXRpb24sIDIsIGdsLkZMT0FULCBmYWxzZSwgNCAqIDYsIDApO1xuICAgICAgICBnbC52ZXJ0ZXhBdHRyaWJQb2ludGVyKHNoYWRlci5hdHRyaWJ1dGVzLmFDb2xvciwgNCwgZ2wuRkxPQVQsIGZhbHNlLDQgKiA2LCAyICogNCk7XG5cbiAgICAgICAgLy8gc2V0IHRoZSBpbmRleCBidWZmZXIhXG4gICAgICAgIGdsLmJpbmRCdWZmZXIoZ2wuRUxFTUVOVF9BUlJBWV9CVUZGRVIsIHdlYkdMRGF0YS5pbmRleEJ1ZmZlcik7Ki9cbiAgICB9XG59O1xuXG4vKipcbiAqIFRPRE8gQGFsdmluXG4gKiBAcGFyYW0gZ3JhcGhpY3Mge1BJWEkuR3JhcGhpY3N9XG4gKiBAcGFyYW0gd2ViR0xEYXRhIHthbnlbXX1cbiAqL1xuV2ViR0xNYXNrTWFuYWdlci5wcm90b3R5cGUucG9wU3RlbmNpbCA9IGZ1bmN0aW9uIChncmFwaGljcywgd2ViR0xEYXRhKVxue1xuICAgIHZhciBnbCA9IHRoaXMucmVuZGVyZXIuZ2wsXG4gICAgICAgIHNtcyA9IHRoaXMuc3RlbmNpbE1hc2tTdGFjaztcblxuICAgIHNtcy5zdGVuY2lsU3RhY2sucG9wKCk7XG5cbiAgICBzbXMuY291bnQtLTtcblxuICAgIGlmIChzbXMuc3RlbmNpbFN0YWNrLmxlbmd0aCA9PT0gMClcbiAgICB7XG4gICAgICAgIC8vIHRoZSBzdGFjayBpcyBlbXB0eSFcbiAgICAgICAgZ2wuZGlzYWJsZShnbC5TVEVOQ0lMX1RFU1QpO1xuXG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG5cbiAgICAgICAgdmFyIGxldmVsID0gc21zLmNvdW50O1xuXG4gICAgICAgIHRoaXMuYmluZEdyYXBoaWNzKGdyYXBoaWNzLCB3ZWJHTERhdGEpO1xuXG4gICAgICAgIGdsLmNvbG9yTWFzayhmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSk7XG5cbiAgICAgICAgaWYgKHdlYkdMRGF0YS5tb2RlID09PSAxKVxuICAgICAgICB7XG4gICAgICAgICAgICBzbXMucmV2ZXJzZSA9ICFzbXMucmV2ZXJzZTtcblxuICAgICAgICAgICAgaWYgKHNtcy5yZXZlcnNlKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGdsLnN0ZW5jaWxGdW5jKGdsLkVRVUFMLCAweEZGIC0gKGxldmVsKzEpLCAweEZGKTtcbiAgICAgICAgICAgICAgICBnbC5zdGVuY2lsT3AoZ2wuS0VFUCxnbC5LRUVQLGdsLklOQ1IpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGdsLnN0ZW5jaWxGdW5jKGdsLkVRVUFMLGxldmVsKzEsIDB4RkYpO1xuICAgICAgICAgICAgICAgIGdsLnN0ZW5jaWxPcChnbC5LRUVQLGdsLktFRVAsZ2wuREVDUik7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIGRyYXcgYSBxdWFkIHRvIGluY3JlbWVudC4uXG4gICAgICAgICAgICBnbC5kcmF3RWxlbWVudHMoZ2wuVFJJQU5HTEVfRkFOLCA0LCBnbC5VTlNJR05FRF9TSE9SVCwgKCB3ZWJHTERhdGEuaW5kaWNlcy5sZW5ndGggLSA0ICkgKiAyICk7XG5cbiAgICAgICAgICAgIGdsLnN0ZW5jaWxGdW5jKGdsLkFMV0FZUywwLDB4RkYpO1xuICAgICAgICAgICAgZ2wuc3RlbmNpbE9wKGdsLktFRVAsZ2wuS0VFUCxnbC5JTlZFUlQpO1xuXG4gICAgICAgICAgICAvLyBkcmF3IHRoZSB0cmlhbmdsZSBzdHJpcCFcbiAgICAgICAgICAgIGdsLmRyYXdFbGVtZW50cyhnbC5UUklBTkdMRV9GQU4sICB3ZWJHTERhdGEuaW5kaWNlcy5sZW5ndGggLSA0LCBnbC5VTlNJR05FRF9TSE9SVCwgMCApO1xuXG4gICAgICAgICAgICB0aGlzLnJlbmRlcmVyLmRyYXdDb3VudCArPSAyO1xuXG4gICAgICAgICAgICBpZiAoIXNtcy5yZXZlcnNlKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGdsLnN0ZW5jaWxGdW5jKGdsLkVRVUFMLDB4RkYtKGxldmVsKSwgMHhGRik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgZ2wuc3RlbmNpbEZ1bmMoZ2wuRVFVQUwsbGV2ZWwsIDB4RkYpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgLy8gIGNvbnNvbGUubG9nKFwiPDw+PlwiKVxuICAgICAgICAgICAgaWYgKCFzbXMucmV2ZXJzZSlcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBnbC5zdGVuY2lsRnVuYyhnbC5FUVVBTCwgMHhGRiAtIChsZXZlbCsxKSwgMHhGRik7XG4gICAgICAgICAgICAgICAgZ2wuc3RlbmNpbE9wKGdsLktFRVAsZ2wuS0VFUCxnbC5JTkNSKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBnbC5zdGVuY2lsRnVuYyhnbC5FUVVBTCxsZXZlbCsxLCAweEZGKTtcbiAgICAgICAgICAgICAgICBnbC5zdGVuY2lsT3AoZ2wuS0VFUCxnbC5LRUVQLGdsLkRFQ1IpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBnbC5kcmF3RWxlbWVudHMoZ2wuVFJJQU5HTEVfU1RSSVAsICB3ZWJHTERhdGEuaW5kaWNlcy5sZW5ndGgsIGdsLlVOU0lHTkVEX1NIT1JULCAwICk7XG5cbiAgICAgICAgICAgIHRoaXMucmVuZGVyZXIuZHJhd0NvdW50Kys7XG5cbiAgICAgICAgICAgIGlmICghc21zLnJldmVyc2UpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgZ2wuc3RlbmNpbEZ1bmMoZ2wuRVFVQUwsMHhGRi0obGV2ZWwpLCAweEZGKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBnbC5zdGVuY2lsRnVuYyhnbC5FUVVBTCxsZXZlbCwgMHhGRik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBnbC5jb2xvck1hc2sodHJ1ZSwgdHJ1ZSwgdHJ1ZSwgdHJ1ZSk7XG4gICAgICAgIGdsLnN0ZW5jaWxPcChnbC5LRUVQLGdsLktFRVAsZ2wuS0VFUCk7XG5cblxuICAgIH1cbn07XG5cbi8qKlxuICogRGVzdHJveXMgdGhlIG1hc2sgc3RhY2suXG4gKlxuICovXG5XZWJHTE1hc2tNYW5hZ2VyLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKClcbntcbiAgICBXZWJHTE1hbmFnZXIucHJvdG90eXBlLmRlc3Ryb3kuY2FsbCh0aGlzKTtcblxuICAgIHRoaXMuc3RlbmNpbE1hc2tTdGFjay5zdGVuY2lsU3RhY2sgPSBudWxsO1xufTtcblxuLyoqXG4gKiBBcHBsaWVzIHRoZSBNYXNrIGFuZCBhZGRzIGl0IHRvIHRoZSBjdXJyZW50IGZpbHRlciBzdGFjay5cbiAqXG4gKiBAcGFyYW0gbWFza0RhdGEge2FueVtdfSBUaGUgbWFzayBkYXRhIHN0cnVjdHVyZSB0byB1c2VcbiAqL1xuV2ViR0xNYXNrTWFuYWdlci5wcm90b3R5cGUucHVzaE1hc2sgPSBmdW5jdGlvbiAobWFza0RhdGEpXG57XG4gICAgdGhpcy5yZW5kZXJlci5zZXRPYmplY3RSZW5kZXJlcih0aGlzLnJlbmRlcmVyLnBsdWdpbnMuZ3JhcGhpY3MpO1xuICAgIFxuICAgIC8vVE9ETyBGSVhcbiAgICBpZiAobWFza0RhdGEuZGlydHkpXG4gICAge1xuICAgICAgICB0aGlzLnJlbmRlcmVyLnBsdWdpbnMuZ3JhcGhpY3MudXBkYXRlR3JhcGhpY3MobWFza0RhdGEsIHRoaXMucmVuZGVyZXIuZ2wpO1xuICAgIH1cblxuICAgIGlmICghbWFza0RhdGEuX3dlYkdMW3RoaXMucmVuZGVyZXIuZ2wuaWRdLmRhdGEubGVuZ3RoKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMucHVzaFN0ZW5jaWwobWFza0RhdGEsIG1hc2tEYXRhLl93ZWJHTFt0aGlzLnJlbmRlcmVyLmdsLmlkXS5kYXRhWzBdKTtcbn07XG5cbi8qKlxuICogUmVtb3ZlcyB0aGUgbGFzdCBmaWx0ZXIgZnJvbSB0aGUgZmlsdGVyIHN0YWNrIGFuZCBkb2Vzbid0IHJldHVybiBpdC5cbiAqXG4gKiBAcGFyYW0gbWFza0RhdGEge2FueVtdfVxuICovXG5XZWJHTE1hc2tNYW5hZ2VyLnByb3RvdHlwZS5wb3BNYXNrID0gZnVuY3Rpb24gKG1hc2tEYXRhKVxue1xuICAgIHRoaXMucmVuZGVyZXIuc2V0T2JqZWN0UmVuZGVyZXIodGhpcy5yZW5kZXJlci5wbHVnaW5zLmdyYXBoaWNzKTtcblxuICAgIHRoaXMucG9wU3RlbmNpbChtYXNrRGF0YSwgbWFza0RhdGEuX3dlYkdMW3RoaXMucmVuZGVyZXIuZ2wuaWRdLmRhdGFbMF0pO1xufTtcblxuIiwiLyoqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcn0gVGhlIHJlbmRlcmVyIHRoaXMgbWFuYWdlciB3b3JrcyBmb3IuXG4gKi9cbmZ1bmN0aW9uIFdlYkdMTWFuYWdlcihyZW5kZXJlcilcbntcbiAgICAvKipcbiAgICAgKiBUaGUgcmVuZGVyZXIgdGhpcyBtYW5hZ2VyIHdvcmtzIGZvci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuV2ViR0xSZW5kZXJlcn1cbiAgICAgKi9cbiAgICB0aGlzLnJlbmRlcmVyID0gcmVuZGVyZXI7XG5cbiAgICB0aGlzLnJlbmRlcmVyLm9uKCdjb250ZXh0JywgdGhpcy5vbkNvbnRleHRDaGFuZ2UsIHRoaXMpO1xufVxuXG5XZWJHTE1hbmFnZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gV2ViR0xNYW5hZ2VyO1xubW9kdWxlLmV4cG9ydHMgPSBXZWJHTE1hbmFnZXI7XG5cbi8qKlxuICogR2VuZXJpYyBtZXRob2QgY2FsbGVkIHdoZW4gdGhlcmUgaXMgYSBXZWJHTCBjb250ZXh0IGNoYW5nZS5cbiAqXG4gKi9cbldlYkdMTWFuYWdlci5wcm90b3R5cGUub25Db250ZXh0Q2hhbmdlID0gZnVuY3Rpb24gKClcbntcblx0Ly8gZG8gc29tZSBjb2RlcyBpbml0IVxufTtcblxuLyoqXG4gKiBHZW5lcmljIGRlc3Ryb3kgbWV0aG9kcyB0byBiZSBvdmVycmlkZGVuIGJ5IHRoZSBzdWJjbGFzc1xuICpcbiAqL1xuV2ViR0xNYW5hZ2VyLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLnJlbmRlcmVyLm9mZignY29udGV4dCcsIHRoaXMub25Db250ZXh0Q2hhbmdlLCB0aGlzKTtcblxuICAgIHRoaXMucmVuZGVyZXIgPSBudWxsO1xufTtcbiIsInZhciBTaGFkZXIgPSByZXF1aXJlKCcuL1NoYWRlcicpO1xuXG4vKipcbiAqIFRoaXMgc2hhZGVyIGlzIHVzZWQgdG8gZHJhdyBjb21wbGV4IHByaW1pdGl2ZSBzaGFwZXMgZm9yIHtAbGluayBQSVhJLkdyYXBoaWNzfS5cbiAqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAZXh0ZW5kcyBQSVhJLlNoYWRlclxuICogQHBhcmFtIHNoYWRlck1hbmFnZXIge1BJWEkuU2hhZGVyTWFuYWdlcn0gVGhlIHdlYmdsIHNoYWRlciBtYW5hZ2VyIHRoaXMgc2hhZGVyIHdvcmtzIGZvci5cbiAqL1xuZnVuY3Rpb24gQ29tcGxleFByaW1pdGl2ZVNoYWRlcihzaGFkZXJNYW5hZ2VyKVxue1xuICAgIFNoYWRlci5jYWxsKHRoaXMsXG4gICAgICAgIHNoYWRlck1hbmFnZXIsXG4gICAgICAgIC8vIHZlcnRleCBzaGFkZXJcbiAgICAgICAgW1xuICAgICAgICAgICAgJ2F0dHJpYnV0ZSB2ZWMyIGFWZXJ0ZXhQb3NpdGlvbjsnLFxuXG4gICAgICAgICAgICAndW5pZm9ybSBtYXQzIHRyYW5zbGF0aW9uTWF0cml4OycsXG4gICAgICAgICAgICAndW5pZm9ybSBtYXQzIHByb2plY3Rpb25NYXRyaXg7JyxcblxuICAgICAgICAgICAgJ3VuaWZvcm0gdmVjMyB0aW50OycsXG4gICAgICAgICAgICAndW5pZm9ybSBmbG9hdCBhbHBoYTsnLFxuICAgICAgICAgICAgJ3VuaWZvcm0gdmVjMyBjb2xvcjsnLFxuXG4gICAgICAgICAgICAndmFyeWluZyB2ZWM0IHZDb2xvcjsnLFxuXG4gICAgICAgICAgICAndm9pZCBtYWluKHZvaWQpeycsXG4gICAgICAgICAgICAnICAgZ2xfUG9zaXRpb24gPSB2ZWM0KChwcm9qZWN0aW9uTWF0cml4ICogdHJhbnNsYXRpb25NYXRyaXggKiB2ZWMzKGFWZXJ0ZXhQb3NpdGlvbiwgMS4wKSkueHksIDAuMCwgMS4wKTsnLFxuICAgICAgICAgICAgJyAgIHZDb2xvciA9IHZlYzQoY29sb3IgKiBhbHBoYSAqIHRpbnQsIGFscGhhKTsnLC8vXCIgKiB2ZWM0KHRpbnQgKiBhbHBoYSwgYWxwaGEpOycsXG4gICAgICAgICAgICAnfSdcbiAgICAgICAgXS5qb2luKCdcXG4nKSxcbiAgICAgICAgLy8gZnJhZ21lbnQgc2hhZGVyXG4gICAgICAgIFtcbiAgICAgICAgICAgICdwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDsnLFxuXG4gICAgICAgICAgICAndmFyeWluZyB2ZWM0IHZDb2xvcjsnLFxuXG4gICAgICAgICAgICAndm9pZCBtYWluKHZvaWQpeycsXG4gICAgICAgICAgICAnICAgZ2xfRnJhZ0NvbG9yID0gdkNvbG9yOycsXG4gICAgICAgICAgICAnfSdcbiAgICAgICAgXS5qb2luKCdcXG4nKSxcbiAgICAgICAgLy8gY3VzdG9tIHVuaWZvcm1zXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRpbnQ6ICAgeyB0eXBlOiAnM2YnLCB2YWx1ZTogWzAsIDAsIDBdIH0sXG4gICAgICAgICAgICBhbHBoYTogIHsgdHlwZTogJzFmJywgdmFsdWU6IDAgfSxcbiAgICAgICAgICAgIGNvbG9yOiAgeyB0eXBlOiAnM2YnLCB2YWx1ZTogWzAsMCwwXSB9LFxuICAgICAgICAgICAgdHJhbnNsYXRpb25NYXRyaXg6IHsgdHlwZTogJ21hdDMnLCB2YWx1ZTogbmV3IEZsb2F0MzJBcnJheSg5KSB9LFxuICAgICAgICAgICAgcHJvamVjdGlvbk1hdHJpeDogeyB0eXBlOiAnbWF0MycsIHZhbHVlOiBuZXcgRmxvYXQzMkFycmF5KDkpIH1cbiAgICAgICAgfSxcbiAgICAgICAgLy8gYXR0cmlidXRlc1xuICAgICAgICB7XG4gICAgICAgICAgICBhVmVydGV4UG9zaXRpb246MFxuICAgICAgICB9XG4gICAgKTtcbn1cblxuQ29tcGxleFByaW1pdGl2ZVNoYWRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFNoYWRlci5wcm90b3R5cGUpO1xuQ29tcGxleFByaW1pdGl2ZVNoYWRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBDb21wbGV4UHJpbWl0aXZlU2hhZGVyO1xubW9kdWxlLmV4cG9ydHMgPSBDb21wbGV4UHJpbWl0aXZlU2hhZGVyO1xuIiwidmFyIFNoYWRlciA9IHJlcXVpcmUoJy4vU2hhZGVyJyk7XG5cbi8qKlxuICogVGhpcyBzaGFkZXIgaXMgdXNlZCB0byBkcmF3IHNpbXBsZSBwcmltaXRpdmUgc2hhcGVzIGZvciB7QGxpbmsgUElYSS5HcmFwaGljc30uXG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQGV4dGVuZHMgUElYSS5TaGFkZXJcbiAqIEBwYXJhbSBzaGFkZXJNYW5hZ2VyIHtTaGFkZXJNYW5hZ2VyfSBUaGUgd2ViZ2wgc2hhZGVyIG1hbmFnZXIgdGhpcyBzaGFkZXIgd29ya3MgZm9yLlxuICovXG5mdW5jdGlvbiBQcmltaXRpdmVTaGFkZXIoc2hhZGVyTWFuYWdlcilcbntcbiAgICBTaGFkZXIuY2FsbCh0aGlzLFxuICAgICAgICBzaGFkZXJNYW5hZ2VyLFxuICAgICAgICAvLyB2ZXJ0ZXggc2hhZGVyXG4gICAgICAgIFtcbiAgICAgICAgICAgICdhdHRyaWJ1dGUgdmVjMiBhVmVydGV4UG9zaXRpb247JyxcbiAgICAgICAgICAgICdhdHRyaWJ1dGUgdmVjNCBhQ29sb3I7JyxcblxuICAgICAgICAgICAgJ3VuaWZvcm0gbWF0MyB0cmFuc2xhdGlvbk1hdHJpeDsnLFxuICAgICAgICAgICAgJ3VuaWZvcm0gbWF0MyBwcm9qZWN0aW9uTWF0cml4OycsXG5cbiAgICAgICAgICAgICd1bmlmb3JtIGZsb2F0IGFscGhhOycsXG4gICAgICAgICAgICAndW5pZm9ybSBmbG9hdCBmbGlwWTsnLFxuICAgICAgICAgICAgJ3VuaWZvcm0gdmVjMyB0aW50OycsXG5cbiAgICAgICAgICAgICd2YXJ5aW5nIHZlYzQgdkNvbG9yOycsXG5cbiAgICAgICAgICAgICd2b2lkIG1haW4odm9pZCl7JyxcbiAgICAgICAgICAgICcgICBnbF9Qb3NpdGlvbiA9IHZlYzQoKHByb2plY3Rpb25NYXRyaXggKiB0cmFuc2xhdGlvbk1hdHJpeCAqIHZlYzMoYVZlcnRleFBvc2l0aW9uLCAxLjApKS54eSwgMC4wLCAxLjApOycsXG4gICAgICAgICAgICAnICAgdkNvbG9yID0gYUNvbG9yICogdmVjNCh0aW50ICogYWxwaGEsIGFscGhhKTsnLFxuICAgICAgICAgICAgJ30nXG4gICAgICAgIF0uam9pbignXFxuJyksXG4gICAgICAgIC8vIGZyYWdtZW50IHNoYWRlclxuICAgICAgICBbXG4gICAgICAgICAgICAncHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7JyxcblxuICAgICAgICAgICAgJ3ZhcnlpbmcgdmVjNCB2Q29sb3I7JyxcblxuICAgICAgICAgICAgJ3ZvaWQgbWFpbih2b2lkKXsnLFxuICAgICAgICAgICAgJyAgIGdsX0ZyYWdDb2xvciA9IHZDb2xvcjsnLFxuICAgICAgICAgICAgJ30nXG4gICAgICAgIF0uam9pbignXFxuJyksXG4gICAgICAgIC8vIGN1c3RvbSB1bmlmb3Jtc1xuICAgICAgICB7XG4gICAgICAgICAgICB0aW50OiAgIHsgdHlwZTogJzNmJywgdmFsdWU6IFswLCAwLCAwXSB9LFxuICAgICAgICAgICAgYWxwaGE6ICB7IHR5cGU6ICcxZicsIHZhbHVlOiAwIH0sXG4gICAgICAgICAgICB0cmFuc2xhdGlvbk1hdHJpeDogeyB0eXBlOiAnbWF0MycsIHZhbHVlOiBuZXcgRmxvYXQzMkFycmF5KDkpIH0sXG4gICAgICAgICAgICBwcm9qZWN0aW9uTWF0cml4OiB7IHR5cGU6ICdtYXQzJywgdmFsdWU6IG5ldyBGbG9hdDMyQXJyYXkoOSkgfVxuICAgICAgICB9LFxuICAgICAgICAvLyBjdXN0b20gYXR0cmlidXRlc1xuICAgICAgICB7XG4gICAgICAgICAgICBhVmVydGV4UG9zaXRpb246MCxcbiAgICAgICAgICAgIGFDb2xvcjowXG4gICAgICAgIH1cbiAgICApO1xufVxuXG5QcmltaXRpdmVTaGFkZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShTaGFkZXIucHJvdG90eXBlKTtcblByaW1pdGl2ZVNoYWRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBQcmltaXRpdmVTaGFkZXI7XG5tb2R1bGUuZXhwb3J0cyA9IFByaW1pdGl2ZVNoYWRlcjtcbiIsIi8qZ2xvYmFsIGNvbnNvbGUgKi9cbnZhciB1dGlscyA9IHJlcXVpcmUoJy4uLy4uLy4uL3V0aWxzJyk7XG5cbi8qKlxuICogQmFzZSBzaGFkZXIgY2xhc3MgZm9yIFBJWEkgbWFuYWdlZCBzaGFkZXJzLlxuICpcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqIEBwYXJhbSBzaGFkZXJNYW5hZ2VyIHtQSVhJLlNoYWRlck1hbmFnZXJ9IFRoZSB3ZWJnbCBzaGFkZXIgbWFuYWdlciB0aGlzIHNoYWRlciB3b3JrcyBmb3IuXG4gKiBAcGFyYW0gW3ZlcnRleFNyY10ge3N0cmluZ30gVGhlIHNvdXJjZSBvZiB0aGUgdmVydGV4IHNoYWRlci5cbiAqIEBwYXJhbSBbZnJhZ21lbnRTcmNdIHtzdHJpbmd9IFRoZSBzb3VyY2Ugb2YgdGhlIGZyYWdtZW50IHNoYWRlci5cbiAqIEBwYXJhbSBbdW5pZm9ybXNdIHtvYmplY3R9IFVuaWZvcm1zIGZvciB0aGlzIHNoYWRlci5cbiAqIEBwYXJhbSBbYXR0cmlidXRlc10ge29iamVjdH0gQXR0cmlidXRlcyBmb3IgdGhpcyBzaGFkZXIuXG4gKi9cbmZ1bmN0aW9uIFNoYWRlcihzaGFkZXJNYW5hZ2VyLCB2ZXJ0ZXhTcmMsIGZyYWdtZW50U3JjLCB1bmlmb3JtcywgYXR0cmlidXRlcylcbntcbiAgICBpZiAoIXZlcnRleFNyYyB8fCAhZnJhZ21lbnRTcmMpXG4gICAge1xuICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdQaXhpLmpzIEVycm9yLiBTaGFkZXIgcmVxdWlyZXMgdmVydGV4U3JjIGFuZCBmcmFnbWVudFNyYycpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEEgdW5pcXVlIGlkXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEByZWFkb25seVxuICAgICAqL1xuICAgIHRoaXMudWlkID0gdXRpbHMudWlkKCk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgY3VycmVudCBXZWJHTCBkcmF3aW5nIGNvbnRleHRcbiAgICAgKiBAbWVtYmVyIHtXZWJHTFJlbmRlcmluZ0NvbnRleHR9XG4gICAgICogQHJlYWRvbmx5XG4gICAgICovXG4gICAgdGhpcy5nbCA9IHNoYWRlck1hbmFnZXIucmVuZGVyZXIuZ2w7XG5cbiAgICAvL1RPRE8gbWF5YmUgd2Ugc2hvdWxkIHBhc3MgcmVuZGVyZXIgcmF0aGVyIHRoYW4gc2hhZGVyIG1hbmdlcj8/IGZvb2QgZm9yIHRob3VnaHQuLlxuICAgIHRoaXMuc2hhZGVyTWFuYWdlciA9IHNoYWRlck1hbmFnZXI7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgV2ViR0wgcHJvZ3JhbS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1dlYkdMUHJvZ3JhbX1cbiAgICAgKiBAcmVhZG9ubHlcbiAgICAgKi9cbiAgICB0aGlzLnByb2dyYW0gPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHVuaWZvcm1zIGFzIGFuIG9iamVjdFxuICAgICAqIEBtZW1iZXIge29iamVjdH1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMudW5pZm9ybXMgPSB1bmlmb3JtcyB8fCB7fTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBhdHRyaWJ1dGVzIGFzIGFuIG9iamVjdFxuICAgICAqIEBtZW1iZXIge29iamVjdH1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuYXR0cmlidXRlcyA9IGF0dHJpYnV0ZXMgfHwge307XG5cbiAgICAvKipcbiAgICAgKiBJbnRlcm5hbCB0ZXh0dXJlIGNvdW50ZXJcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLnRleHR1cmVDb3VudCA9IDE7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgdmVydGV4IHNoYWRlciBhcyBhbiBhcnJheSBvZiBzdHJpbmdzXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtzdHJpbmd9XG4gICAgICovXG4gICAgdGhpcy52ZXJ0ZXhTcmMgPSB2ZXJ0ZXhTcmM7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgZnJhZ21lbnQgc2hhZGVyIGFzIGFuIGFycmF5IG9mIHN0cmluZ3NcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge3N0cmluZ31cbiAgICAgKi9cbiAgICB0aGlzLmZyYWdtZW50U3JjID0gZnJhZ21lbnRTcmM7XG5cbiAgICB0aGlzLmluaXQoKTtcbn1cblxuU2hhZGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFNoYWRlcjtcbm1vZHVsZS5leHBvcnRzID0gU2hhZGVyO1xuXG4vKipcbiAqIENyZWF0ZXMgdGhlIHNoYWRlciBhbmQgdXNlcyBpdFxuICpcbiAqL1xuU2hhZGVyLnByb3RvdHlwZS5pbml0ID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLmNvbXBpbGUoKTtcblxuICAgIHRoaXMuZ2wudXNlUHJvZ3JhbSh0aGlzLnByb2dyYW0pO1xuXG4gICAgdGhpcy5jYWNoZVVuaWZvcm1Mb2NhdGlvbnMoT2JqZWN0LmtleXModGhpcy51bmlmb3JtcykpO1xuICAgIHRoaXMuY2FjaGVBdHRyaWJ1dGVMb2NhdGlvbnMoT2JqZWN0LmtleXModGhpcy5hdHRyaWJ1dGVzKSk7XG59O1xuXG4vKipcbiAqIENhY2hlcyB0aGUgbG9jYXRpb25zIG9mIHRoZSB1bmlmb3JtIGZvciByZXVzZS5cbiAqXG4gKiBAcGFyYW0ga2V5cyB7c3RyaW5nfSB0aGUgdW5pZm9ybXMgdG8gY2FjaGVcbiAqL1xuU2hhZGVyLnByb3RvdHlwZS5jYWNoZVVuaWZvcm1Mb2NhdGlvbnMgPSBmdW5jdGlvbiAoa2V5cylcbntcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyArK2kpXG4gICAge1xuICAgICAgICB0aGlzLnVuaWZvcm1zW2tleXNbaV1dLl9sb2NhdGlvbiA9IHRoaXMuZ2wuZ2V0VW5pZm9ybUxvY2F0aW9uKHRoaXMucHJvZ3JhbSwga2V5c1tpXSk7XG4gICAgfVxufTtcblxuLyoqXG4gKiBDYWNoZXMgdGhlIGxvY2F0aW9ucyBvZiB0aGUgYXR0cmlidXRlIGZvciByZXVzZS5cbiAqXG4gKiBAcGFyYW0ga2V5cyB7c3RyaW5nfSB0aGUgYXR0cmlidXRlcyB0byBjYWNoZVxuICovXG5TaGFkZXIucHJvdG90eXBlLmNhY2hlQXR0cmlidXRlTG9jYXRpb25zID0gZnVuY3Rpb24gKGtleXMpXG57XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgKytpKVxuICAgIHtcbiAgICAgICAgdGhpcy5hdHRyaWJ1dGVzW2tleXNbaV1dID0gdGhpcy5nbC5nZXRBdHRyaWJMb2NhdGlvbih0aGlzLnByb2dyYW0sIGtleXNbaV0pO1xuICAgIH1cblxuICAgIC8vIFRPRE86IENoZWNrIGlmIHRoaXMgaXMgbmVlZGVkIGFueW1vcmUuLi5cblxuICAgIC8vIEJlZ2luIHdvcnN0IGhhY2sgZXZhIC8vXG5cbiAgICAvLyBXSFk/Pz8gT05MWSBvbiBteSBjaHJvbWUgcGl4ZWwgdGhlIGxpbmUgYWJvdmUgcmV0dXJucyAtMSB3aGVuIHVzaW5nIGZpbHRlcnM/XG4gICAgLy8gbWF5YmUgaXRzIHNvbWV0aGluZyB0byBkbyB3aXRoIHRoZSBjdXJyZW50IHN0YXRlIG9mIHRoZSBnbCBjb250ZXh0LlxuICAgIC8vIEknbSBjb252aW5jZWQgdGhpcyBpcyBhIGJ1ZyBpbiB0aGUgY2hyb21lIGJyb3dzZXIgYXMgdGhlcmUgaXMgTk8gcmVhc29uIHdoeSB0aGlzIHNob3VsZCBiZSByZXR1cm5pbmcgLTEgZXNwZWNpYWxseSBhcyBpdCBvbmx5IG1hbmlmZXN0cyBvbiBteSBjaHJvbWUgcGl4ZWxcbiAgICAvLyBJZiB0aGVyZXMgYW55IHdlYkdMIHBlb3BsZSB0aGF0IGtub3cgd2h5IGNvdWxkIGhhcHBlbiBwbGVhc2UgaGVscCA6KVxuICAgIC8vIGlmICh0aGlzLmF0dHJpYnV0ZXMuYUNvbG9yID09PSAtMSl7XG4gICAgLy8gICAgIHRoaXMuYXR0cmlidXRlcy5hQ29sb3IgPSAyO1xuICAgIC8vIH1cblxuICAgIC8vIEVuZCB3b3JzdCBoYWNrIGV2YSAvL1xufTtcblxuLyoqXG4gKiBBdHRhY2hlcyB0aGUgc2hhZGVycyBhbmQgY3JlYXRlcyB0aGUgcHJvZ3JhbS5cbiAqXG4gKiBAcmV0dXJuIHtXZWJHTFByb2dyYW19XG4gKi9cblNoYWRlci5wcm90b3R5cGUuY29tcGlsZSA9IGZ1bmN0aW9uICgpXG57XG4gICAgdmFyIGdsID0gdGhpcy5nbDtcblxuICAgIHZhciBnbFZlcnRTaGFkZXIgPSB0aGlzLl9nbENvbXBpbGUoZ2wuVkVSVEVYX1NIQURFUiwgdGhpcy52ZXJ0ZXhTcmMpO1xuICAgIHZhciBnbEZyYWdTaGFkZXIgPSB0aGlzLl9nbENvbXBpbGUoZ2wuRlJBR01FTlRfU0hBREVSLCB0aGlzLmZyYWdtZW50U3JjKTtcblxuICAgIHZhciBwcm9ncmFtID0gZ2wuY3JlYXRlUHJvZ3JhbSgpO1xuXG4gICAgZ2wuYXR0YWNoU2hhZGVyKHByb2dyYW0sIGdsVmVydFNoYWRlcik7XG4gICAgZ2wuYXR0YWNoU2hhZGVyKHByb2dyYW0sIGdsRnJhZ1NoYWRlcik7XG4gICAgZ2wubGlua1Byb2dyYW0ocHJvZ3JhbSk7XG5cbiAgICAvLyBpZiBsaW5raW5nIGZhaWxzLCB0aGVuIGxvZyBhbmQgY2xlYW51cFxuICAgIGlmICghZ2wuZ2V0UHJvZ3JhbVBhcmFtZXRlcihwcm9ncmFtLCBnbC5MSU5LX1NUQVRVUykpXG4gICAge1xuICAgICAgICBjb25zb2xlLmVycm9yKCdQaXhpLmpzIEVycm9yOiBDb3VsZCBub3QgaW5pdGlhbGl6ZSBzaGFkZXIuJyk7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ2dsLlZBTElEQVRFX1NUQVRVUycsIGdsLmdldFByb2dyYW1QYXJhbWV0ZXIocHJvZ3JhbSwgZ2wuVkFMSURBVEVfU1RBVFVTKSk7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ2dsLmdldEVycm9yKCknLCBnbC5nZXRFcnJvcigpKTtcblxuICAgICAgICAvLyBpZiB0aGVyZSBpcyBhIHByb2dyYW0gaW5mbyBsb2csIGxvZyBpdFxuICAgICAgICBpZiAoZ2wuZ2V0UHJvZ3JhbUluZm9Mb2cocHJvZ3JhbSkgIT09ICcnKVxuICAgICAgICB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ1BpeGkuanMgV2FybmluZzogZ2wuZ2V0UHJvZ3JhbUluZm9Mb2coKScsIGdsLmdldFByb2dyYW1JbmZvTG9nKHByb2dyYW0pKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGdsLmRlbGV0ZVByb2dyYW0ocHJvZ3JhbSk7XG4gICAgICAgIHByb2dyYW0gPSBudWxsO1xuICAgIH1cblxuICAgIC8vIGNsZWFuIHVwIHNvbWUgc2hhZGVyc1xuICAgIGdsLmRlbGV0ZVNoYWRlcihnbFZlcnRTaGFkZXIpO1xuICAgIGdsLmRlbGV0ZVNoYWRlcihnbEZyYWdTaGFkZXIpO1xuXG4gICAgcmV0dXJuICh0aGlzLnByb2dyYW0gPSBwcm9ncmFtKTtcbn07XG5cbi8qKlxuKiBBZGRzIGEgbmV3IHVuaWZvcm1cbipcbiogQHBhcmFtIHVuaWZvcm0ge29iamVjdH0gdGhlIG5ldyB1bmlmb3JtIHRvIGF0dGFjaFxuKi9cblNoYWRlci5wcm90b3R5cGUuc3luY1VuaWZvcm0gPSBmdW5jdGlvbiAodW5pZm9ybSlcbntcbiAgICB2YXIgbG9jYXRpb24gPSB1bmlmb3JtLl9sb2NhdGlvbixcbiAgICAgICAgdmFsdWUgPSB1bmlmb3JtLnZhbHVlLFxuICAgICAgICBnbCA9IHRoaXMuZ2wsXG4gICAgICAgIGksIGlsO1xuXG4gICAgc3dpdGNoICh1bmlmb3JtLnR5cGUpXG4gICAge1xuICAgICAgICBjYXNlICdiJzpcbiAgICAgICAgY2FzZSAnYm9vbCc6XG4gICAgICAgIGNhc2UgJ2Jvb2xlYW4nOlxuICAgICAgICAgICAgZ2wudW5pZm9ybTFpKGxvY2F0aW9uLCB2YWx1ZSA/IDEgOiAwKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIC8vIHNpbmdsZSBpbnQgdmFsdWVcbiAgICAgICAgY2FzZSAnaSc6XG4gICAgICAgIGNhc2UgJzFpJzpcbiAgICAgICAgICAgIGdsLnVuaWZvcm0xaShsb2NhdGlvbiwgdmFsdWUpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLy8gc2luZ2xlIGZsb2F0IHZhbHVlXG4gICAgICAgIGNhc2UgJ2YnOlxuICAgICAgICBjYXNlICcxZic6XG4gICAgICAgICAgICBnbC51bmlmb3JtMWYobG9jYXRpb24sIHZhbHVlKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIC8vIEZsb2F0MzJBcnJheSgyKSBvciBKUyBBcnJyYXlcbiAgICAgICAgY2FzZSAnMmYnOlxuICAgICAgICAgICAgZ2wudW5pZm9ybTJmKGxvY2F0aW9uLCB2YWx1ZVswXSwgdmFsdWVbMV0pO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLy8gRmxvYXQzMkFycmF5KDMpIG9yIEpTIEFycnJheVxuICAgICAgICBjYXNlICczZic6XG4gICAgICAgICAgICBnbC51bmlmb3JtM2YobG9jYXRpb24sIHZhbHVlWzBdLCB2YWx1ZVsxXSwgdmFsdWVbMl0pO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLy8gRmxvYXQzMkFycmF5KDQpIG9yIEpTIEFycnJheVxuICAgICAgICBjYXNlICc0Zic6XG4gICAgICAgICAgICBnbC51bmlmb3JtNGYobG9jYXRpb24sIHZhbHVlWzBdLCB2YWx1ZVsxXSwgdmFsdWVbMl0sIHZhbHVlWzNdKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIC8vIGEgMkQgUG9pbnQgb2JqZWN0XG4gICAgICAgIGNhc2UgJ3YyJzpcbiAgICAgICAgICAgIGdsLnVuaWZvcm0yZihsb2NhdGlvbiwgdmFsdWUueCwgdmFsdWUueSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAvLyBhIDNEIFBvaW50IG9iamVjdFxuICAgICAgICBjYXNlICd2Myc6XG4gICAgICAgICAgICBnbC51bmlmb3JtM2YobG9jYXRpb24sIHZhbHVlLngsIHZhbHVlLnksIHZhbHVlLnopO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLy8gYSA0RCBQb2ludCBvYmplY3RcbiAgICAgICAgY2FzZSAndjQnOlxuICAgICAgICAgICAgZ2wudW5pZm9ybTRmKGxvY2F0aW9uLCB2YWx1ZS54LCB2YWx1ZS55LCB2YWx1ZS56LCB2YWx1ZS53KTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIC8vIEludDMyQXJyYXkgb3IgSlMgQXJyYXlcbiAgICAgICAgY2FzZSAnMWl2JzpcbiAgICAgICAgICAgIGdsLnVuaWZvcm0xaXYobG9jYXRpb24sIHZhbHVlKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIC8vIEludDMyQXJyYXkgb3IgSlMgQXJyYXlcbiAgICAgICAgY2FzZSAnMml2JzpcbiAgICAgICAgICAgIGdsLnVuaWZvcm0yaXYobG9jYXRpb24sIHZhbHVlKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIC8vIEludDMyQXJyYXkgb3IgSlMgQXJyYXlcbiAgICAgICAgY2FzZSAnM2l2JzpcbiAgICAgICAgICAgIGdsLnVuaWZvcm0zaXYobG9jYXRpb24sIHZhbHVlKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIC8vIEludDMyQXJyYXkgb3IgSlMgQXJyYXlcbiAgICAgICAgY2FzZSAnNGl2JzpcbiAgICAgICAgICAgIGdsLnVuaWZvcm00aXYobG9jYXRpb24sIHZhbHVlKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIC8vIEZsb2F0MzJBcnJheSBvciBKUyBBcnJheVxuICAgICAgICBjYXNlICcxZnYnOlxuICAgICAgICAgICAgZ2wudW5pZm9ybTFmdihsb2NhdGlvbiwgdmFsdWUpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLy8gRmxvYXQzMkFycmF5IG9yIEpTIEFycmF5XG4gICAgICAgIGNhc2UgJzJmdic6XG4gICAgICAgICAgICBnbC51bmlmb3JtMmZ2KGxvY2F0aW9uLCB2YWx1ZSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAvLyBGbG9hdDMyQXJyYXkgb3IgSlMgQXJyYXlcbiAgICAgICAgY2FzZSAnM2Z2JzpcbiAgICAgICAgICAgIGdsLnVuaWZvcm0zZnYobG9jYXRpb24sIHZhbHVlKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIC8vIEZsb2F0MzJBcnJheSBvciBKUyBBcnJheVxuICAgICAgICBjYXNlICc0ZnYnOlxuICAgICAgICAgICAgZ2wudW5pZm9ybTRmdihsb2NhdGlvbiwgdmFsdWUpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLy8gRmxvYXQzMkFycmF5IG9yIEpTIEFycmF5XG4gICAgICAgIGNhc2UgJ20yJzpcbiAgICAgICAgY2FzZSAnbWF0Mic6XG4gICAgICAgIGNhc2UgJ01hdHJpeDJmdic6XG4gICAgICAgICAgICBnbC51bmlmb3JtTWF0cml4MmZ2KGxvY2F0aW9uLCB1bmlmb3JtLnRyYW5zcG9zZSwgdmFsdWUpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLy8gRmxvYXQzMkFycmF5IG9yIEpTIEFycmF5XG4gICAgICAgIGNhc2UgJ20zJzpcbiAgICAgICAgY2FzZSAnbWF0Myc6XG4gICAgICAgIGNhc2UgJ01hdHJpeDNmdic6XG5cbiAgICAgICAgICAgIGdsLnVuaWZvcm1NYXRyaXgzZnYobG9jYXRpb24sIHVuaWZvcm0udHJhbnNwb3NlLCB2YWx1ZSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAvLyBGbG9hdDMyQXJyYXkgb3IgSlMgQXJyYXlcbiAgICAgICAgY2FzZSAnbTQnOlxuICAgICAgICBjYXNlICdtYXQ0JzpcbiAgICAgICAgY2FzZSAnTWF0cml4NGZ2JzpcbiAgICAgICAgICAgIGdsLnVuaWZvcm1NYXRyaXg0ZnYobG9jYXRpb24sIHVuaWZvcm0udHJhbnNwb3NlLCB2YWx1ZSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAvLyBhIENvbG9yIFZhbHVlXG4gICAgICAgIGNhc2UgJ2MnOlxuICAgICAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdmFsdWUgPSB1dGlscy5oZXgycmdiKHZhbHVlKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZ2wudW5pZm9ybTNmKGxvY2F0aW9uLCB2YWx1ZVswXSwgdmFsdWVbMV0sIHZhbHVlWzJdKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIC8vIGZsYXQgYXJyYXkgb2YgaW50ZWdlcnMgKEpTIG9yIHR5cGVkIGFycmF5KVxuICAgICAgICBjYXNlICdpdjEnOlxuICAgICAgICAgICAgZ2wudW5pZm9ybTFpdihsb2NhdGlvbiwgdmFsdWUpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLy8gZmxhdCBhcnJheSBvZiBpbnRlZ2VycyB3aXRoIDMgeCBOIHNpemUgKEpTIG9yIHR5cGVkIGFycmF5KVxuICAgICAgICBjYXNlICdpdic6XG4gICAgICAgICAgICBnbC51bmlmb3JtM2l2KGxvY2F0aW9uLCB2YWx1ZSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAvLyBmbGF0IGFycmF5IG9mIGZsb2F0cyAoSlMgb3IgdHlwZWQgYXJyYXkpXG4gICAgICAgIGNhc2UgJ2Z2MSc6XG4gICAgICAgICAgICBnbC51bmlmb3JtMWZ2KGxvY2F0aW9uLCB2YWx1ZSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAvLyBmbGF0IGFycmF5IG9mIGZsb2F0cyB3aXRoIDMgeCBOIHNpemUgKEpTIG9yIHR5cGVkIGFycmF5KVxuICAgICAgICBjYXNlICdmdic6XG4gICAgICAgICAgICBnbC51bmlmb3JtM2Z2KGxvY2F0aW9uLCB2YWx1ZSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAvLyBhcnJheSBvZiAyRCBQb2ludCBvYmplY3RzXG4gICAgICAgIGNhc2UgJ3Yydic6XG4gICAgICAgICAgICBpZiAoIXVuaWZvcm0uX2FycmF5KVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHVuaWZvcm0uX2FycmF5ID0gbmV3IEZsb2F0MzJBcnJheSgyICogdmFsdWUubGVuZ3RoKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZm9yIChpID0gMCwgaWwgPSB2YWx1ZS5sZW5ndGg7IGkgPCBpbDsgKytpKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHVuaWZvcm0uX2FycmF5W2kgKiAyXSAgICAgICA9IHZhbHVlW2ldLng7XG4gICAgICAgICAgICAgICAgdW5pZm9ybS5fYXJyYXlbaSAqIDIgKyAxXSAgID0gdmFsdWVbaV0ueTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZ2wudW5pZm9ybTJmdihsb2NhdGlvbiwgdW5pZm9ybS5fYXJyYXkpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLy8gYXJyYXkgb2YgM0QgUG9pbnQgb2JqZWN0c1xuICAgICAgICBjYXNlICd2M3YnOlxuICAgICAgICAgICAgaWYgKCF1bmlmb3JtLl9hcnJheSlcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB1bmlmb3JtLl9hcnJheSA9IG5ldyBGbG9hdDMyQXJyYXkoMyAqIHZhbHVlLmxlbmd0aCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGZvciAoaSA9IDAsIGlsID0gdmFsdWUubGVuZ3RoOyBpIDwgaWw7ICsraSlcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB1bmlmb3JtLl9hcnJheVtpICogM10gICAgICAgPSB2YWx1ZVtpXS54O1xuICAgICAgICAgICAgICAgIHVuaWZvcm0uX2FycmF5W2kgKiAzICsgMV0gICA9IHZhbHVlW2ldLnk7XG4gICAgICAgICAgICAgICAgdW5pZm9ybS5fYXJyYXlbaSAqIDMgKyAyXSAgID0gdmFsdWVbaV0uejtcblxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBnbC51bmlmb3JtM2Z2KGxvY2F0aW9uLCB1bmlmb3JtLl9hcnJheSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAvLyBhcnJheSBvZiA0RCBQb2ludCBvYmplY3RzXG4gICAgICAgIGNhc2UgJ3Y0dic6XG4gICAgICAgICAgICBpZiAoIXVuaWZvcm0uX2FycmF5KVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHVuaWZvcm0uX2FycmF5ID0gbmV3IEZsb2F0MzJBcnJheSg0ICogdmFsdWUubGVuZ3RoKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZm9yIChpID0gMCwgaWwgPSB2YWx1ZS5sZW5ndGg7IGkgPCBpbDsgKytpKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHVuaWZvcm0uX2FycmF5W2kgKiA0XSAgICAgICA9IHZhbHVlW2ldLng7XG4gICAgICAgICAgICAgICAgdW5pZm9ybS5fYXJyYXlbaSAqIDQgKyAxXSAgID0gdmFsdWVbaV0ueTtcbiAgICAgICAgICAgICAgICB1bmlmb3JtLl9hcnJheVtpICogNCArIDJdICAgPSB2YWx1ZVtpXS56O1xuICAgICAgICAgICAgICAgIHVuaWZvcm0uX2FycmF5W2kgKiA0ICsgM10gICA9IHZhbHVlW2ldLnc7XG5cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZ2wudW5pZm9ybTRmdihsb2NhdGlvbiwgdW5pZm9ybS5fYXJyYXkpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLy8gUElYSS5UZXh0dXJlXG4gICAgICAgIGNhc2UgJ3QnOlxuICAgICAgICBjYXNlICdzYW1wbGVyMkQnOlxuXG4gICAgICAgICAgICBpZiAoIXVuaWZvcm0udmFsdWUgfHwgIXVuaWZvcm0udmFsdWUuYmFzZVRleHR1cmUuaGFzTG9hZGVkKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBhY3RpdmF0ZSB0aGlzIHRleHR1cmVcbiAgICAgICAgICAgIGdsLmFjdGl2ZVRleHR1cmUoZ2xbJ1RFWFRVUkUnICsgdGhpcy50ZXh0dXJlQ291bnRdKTtcblxuICAgICAgICAgICAgdmFyIHRleHR1cmUgPSB1bmlmb3JtLnZhbHVlLmJhc2VUZXh0dXJlLl9nbFRleHR1cmVzW2dsLmlkXTtcblxuICAgICAgICAgICAgaWYgKCF0ZXh0dXJlKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHRoaXMuaW5pdFNhbXBsZXIyRCh1bmlmb3JtKTtcblxuICAgICAgICAgICAgICAgIC8vIHNldCB0aGUgdGV4dHVyIHRvIHRoZSBuZXdseSBjcmVhdGVkIG9uZS4uXG4gICAgICAgICAgICAgICAgdGV4dHVyZSA9IHVuaWZvcm0udmFsdWUuYmFzZVRleHR1cmUuX2dsVGV4dHVyZXNbZ2wuaWRdO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBiaW5kIHRoZSB0ZXh0dXJlXG4gICAgICAgICAgICBnbC5iaW5kVGV4dHVyZShnbC5URVhUVVJFXzJELCB0ZXh0dXJlKTtcblxuICAgICAgICAgICAgLy8gc2V0IHVuaWZvcm0gdG8gdGV4dHVyZSBpbmRleFxuICAgICAgICAgICAgZ2wudW5pZm9ybTFpKHVuaWZvcm0uX2xvY2F0aW9uLCB0aGlzLnRleHR1cmVDb3VudCk7XG5cbiAgICAgICAgICAgIC8vIGluY3JlbWVudCBuZXh0IHRleHR1cmUgaWRcbiAgICAgICAgICAgIHRoaXMudGV4dHVyZUNvdW50Kys7XG5cbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ1BpeGkuanMgU2hhZGVyIFdhcm5pbmc6IFVua25vd24gdW5pZm9ybSB0eXBlOiAnICsgdW5pZm9ybS50eXBlKTtcbiAgICB9XG59O1xuXG4vKipcbiAqIFVwZGF0ZXMgdGhlIHNoYWRlciB1bmlmb3JtIHZhbHVlcy5cbiAqXG4gKi9cblNoYWRlci5wcm90b3R5cGUuc3luY1VuaWZvcm1zID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLnRleHR1cmVDb3VudCA9IDE7XG5cbiAgICBmb3IgKHZhciBrZXkgaW4gdGhpcy51bmlmb3JtcylcbiAgICB7XG4gICAgICAgIHRoaXMuc3luY1VuaWZvcm0odGhpcy51bmlmb3Jtc1trZXldKTtcbiAgICB9XG59O1xuXG5cbi8qKlxuICogSW5pdGlhbGlzZXMgYSBTYW1wbGVyMkQgdW5pZm9ybSAod2hpY2ggbWF5IG9ubHkgYmUgYXZhaWxhYmxlIGxhdGVyIG9uIGFmdGVyIGluaXRVbmlmb3JtcyBvbmNlIHRoZSB0ZXh0dXJlIGhhcyBsb2FkZWQpXG4gKlxuICovXG5TaGFkZXIucHJvdG90eXBlLmluaXRTYW1wbGVyMkQgPSBmdW5jdGlvbiAodW5pZm9ybSlcbntcbiAgICB2YXIgZ2wgPSB0aGlzLmdsO1xuXG4gICAgdmFyIHRleHR1cmUgPSB1bmlmb3JtLnZhbHVlLmJhc2VUZXh0dXJlO1xuXG4gICAgaWYoIXRleHR1cmUuaGFzTG9hZGVkKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuXG5cbiAgICBpZiAodW5pZm9ybS50ZXh0dXJlRGF0YSlcbiAgICB7XG5cbiAgICAgICAgLy9UT0RPIG1vdmUgdGhpcy4uLlxuICAgICAgICB2YXIgZGF0YSA9IHVuaWZvcm0udGV4dHVyZURhdGE7XG5cbiAgICAgICAgdGV4dHVyZS5fZ2xUZXh0dXJlc1tnbC5pZF0gPSBnbC5jcmVhdGVUZXh0dXJlKCk7XG5cbiAgICAgICAgZ2wuYmluZFRleHR1cmUoZ2wuVEVYVFVSRV8yRCwgdGV4dHVyZS5fZ2xUZXh0dXJlc1tnbC5pZF0pO1xuXG4gICAgICAgIGdsLnBpeGVsU3RvcmVpKGdsLlVOUEFDS19QUkVNVUxUSVBMWV9BTFBIQV9XRUJHTCwgdGV4dHVyZS5wcmVtdWx0aXBsaWVkQWxwaGEpO1xuICAgICAgICAvLyBHTFRleHR1cmUgPSBtYWcgbGluZWFyLCBtaW4gbGluZWFyX21pcG1hcF9saW5lYXIsIHdyYXAgcmVwZWF0ICsgZ2wuZ2VuZXJhdGVNaXBtYXAoZ2wuVEVYVFVSRV8yRCk7XG4gICAgICAgIC8vIEdMVGV4dHVyZUxpbmVhciA9IG1hZy9taW4gbGluZWFyLCB3cmFwIGNsYW1wXG4gICAgICAgIC8vIEdMVGV4dHVyZU5lYXJlc3RSZXBlYXQgPSBtYWcvbWluIE5FQVJFU1QsIHdyYXAgcmVwZWF0XG4gICAgICAgIC8vIEdMVGV4dHVyZU5lYXJlc3QgPSBtYWcvbWluIG5lYXJlc3QsIHdyYXAgY2xhbXBcbiAgICAgICAgLy8gQXVkaW9UZXh0dXJlID0gd2hhdGV2ZXIgKyBsdW1pbmFuY2UgKyB3aWR0aCA1MTIsIGhlaWdodCAyLCBib3JkZXIgMFxuICAgICAgICAvLyBLZXlUZXh0dXJlID0gd2hhdGV2ZXIgKyBsdW1pbmFuY2UgKyB3aWR0aCAyNTYsIGhlaWdodCAyLCBib3JkZXIgMFxuXG4gICAgICAgIC8vICBtYWdGaWx0ZXIgY2FuIGJlOiBnbC5MSU5FQVIsIGdsLkxJTkVBUl9NSVBNQVBfTElORUFSIG9yIGdsLk5FQVJFU1RcbiAgICAgICAgLy8gIHdyYXBTL1QgY2FuIGJlOiBnbC5DTEFNUF9UT19FREdFIG9yIGdsLlJFUEVBVFxuXG4gICAgICAgIGdsLnRleEltYWdlMkQoZ2wuVEVYVFVSRV8yRCwgMCwgZGF0YS5sdW1pbmFuY2UgPyBnbC5MVU1JTkFOQ0UgOiBnbC5SR0JBLCBnbC5SR0JBLCBnbC5VTlNJR05FRF9CWVRFLCB0ZXh0dXJlLnNvdXJjZSk7XG5cbiAgICAgICAgZ2wudGV4UGFyYW1ldGVyaShnbC5URVhUVVJFXzJELCBnbC5URVhUVVJFX01BR19GSUxURVIsIGRhdGEubWFnRmlsdGVyID8gZGF0YS5tYWdGaWx0ZXIgOiBnbC5MSU5FQVIgKTtcbiAgICAgICAgZ2wudGV4UGFyYW1ldGVyaShnbC5URVhUVVJFXzJELCBnbC5URVhUVVJFX01JTl9GSUxURVIsIGRhdGEud3JhcFMgPyBkYXRhLndyYXBTIDogZ2wuQ0xBTVBfVE9fRURHRSApO1xuXG4gICAgICAgIGdsLnRleFBhcmFtZXRlcmkoZ2wuVEVYVFVSRV8yRCwgZ2wuVEVYVFVSRV9XUkFQX1QsIGRhdGEud3JhcFMgPyBkYXRhLndyYXBTIDogZ2wuQ0xBTVBfVE9fRURHRSk7XG4gICAgICAgIGdsLnRleFBhcmFtZXRlcmkoZ2wuVEVYVFVSRV8yRCwgZ2wuVEVYVFVSRV9XUkFQX1MsIGRhdGEud3JhcFQgPyBkYXRhLndyYXBUIDogZ2wuQ0xBTVBfVE9fRURHRSk7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHRoaXMuc2hhZGVyTWFuYWdlci5yZW5kZXJlci51cGRhdGVUZXh0dXJlKHRleHR1cmUpO1xuICAgIH1cbn07XG5cbi8qKlxuICogRGVzdHJveXMgdGhlIHNoYWRlci5cbiAqXG4gKi9cblNoYWRlci5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy5nbC5kZWxldGVQcm9ncmFtKHRoaXMucHJvZ3JhbSk7XG5cbiAgICB0aGlzLmdsID0gbnVsbDtcbiAgICB0aGlzLnVuaWZvcm1zID0gbnVsbDtcbiAgICB0aGlzLmF0dHJpYnV0ZXMgPSBudWxsO1xuXG4gICAgdGhpcy52ZXJ0ZXhTcmMgPSBudWxsO1xuICAgIHRoaXMuZnJhZ21lbnRTcmMgPSBudWxsO1xufTtcblxuU2hhZGVyLnByb3RvdHlwZS5fZ2xDb21waWxlID0gZnVuY3Rpb24gKHR5cGUsIHNyYylcbntcbiAgICB2YXIgc2hhZGVyID0gdGhpcy5nbC5jcmVhdGVTaGFkZXIodHlwZSk7XG5cbiAgICB0aGlzLmdsLnNoYWRlclNvdXJjZShzaGFkZXIsIHNyYyk7XG4gICAgdGhpcy5nbC5jb21waWxlU2hhZGVyKHNoYWRlcik7XG5cbiAgICBpZiAoIXRoaXMuZ2wuZ2V0U2hhZGVyUGFyYW1ldGVyKHNoYWRlciwgdGhpcy5nbC5DT01QSUxFX1NUQVRVUykpXG4gICAge1xuICAgICAgICBjb25zb2xlLmxvZyh0aGlzLmdsLmdldFNoYWRlckluZm9Mb2coc2hhZGVyKSk7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHJldHVybiBzaGFkZXI7XG59O1xuIiwidmFyIFNoYWRlciA9IHJlcXVpcmUoJy4vU2hhZGVyJyk7XG5cbi8qKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQGV4dGVuZHMgUElYSS5TaGFkZXJcbiAqIEBwYXJhbSBzaGFkZXJNYW5hZ2VyIHtQSVhJLlNoYWRlck1hbmFnZXJ9IFRoZSB3ZWJnbCBzaGFkZXIgbWFuYWdlciB0aGlzIHNoYWRlciB3b3JrcyBmb3IuXG4gKiBAcGFyYW0gW3ZlcnRleFNyY10ge3N0cmluZ30gVGhlIHNvdXJjZSBvZiB0aGUgdmVydGV4IHNoYWRlci5cbiAqIEBwYXJhbSBbZnJhZ21lbnRTcmNdIHtzdHJpbmd9IFRoZSBzb3VyY2Ugb2YgdGhlIGZyYWdtZW50IHNoYWRlci5cbiAqIEBwYXJhbSBbY3VzdG9tVW5pZm9ybXNdIHtvYmplY3R9IEN1c3RvbSB1bmlmb3JtcyB0byB1c2UgdG8gYXVnbWVudCB0aGUgYnVpbHQtaW4gb25lcy5cbiAqIEBwYXJhbSBbZnJhZ21lbnRTcmNdIHtzdHJpbmd9IFRoZSBzb3VyY2Ugb2YgdGhlIGZyYWdtZW50IHNoYWRlci5cbiAqL1xuZnVuY3Rpb24gVGV4dHVyZVNoYWRlcihzaGFkZXJNYW5hZ2VyLCB2ZXJ0ZXhTcmMsIGZyYWdtZW50U3JjLCBjdXN0b21Vbmlmb3JtcywgY3VzdG9tQXR0cmlidXRlcylcbntcbiAgICB2YXIgdW5pZm9ybXMgPSB7XG5cbiAgICAgICAgdVNhbXBsZXI6ICAgICAgICAgICB7IHR5cGU6ICdzYW1wbGVyMkQnLCB2YWx1ZTogMCB9LFxuICAgICAgICBwcm9qZWN0aW9uTWF0cml4OiAgIHsgdHlwZTogJ21hdDMnLCB2YWx1ZTogbmV3IEZsb2F0MzJBcnJheShbMSwgMCwgMCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsIDEsIDAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLCAwLCAxXSkgfVxuICAgIH07XG5cbiAgICBpZiAoY3VzdG9tVW5pZm9ybXMpXG4gICAge1xuICAgICAgICBmb3IgKHZhciB1IGluIGN1c3RvbVVuaWZvcm1zKVxuICAgICAgICB7XG4gICAgICAgICAgICB1bmlmb3Jtc1t1XSA9IGN1c3RvbVVuaWZvcm1zW3VdO1xuICAgICAgICB9XG4gICAgfVxuXG5cbiAgICB2YXIgYXR0cmlidXRlcyA9IHtcbiAgICAgICAgYVZlcnRleFBvc2l0aW9uOiAgICAwLFxuICAgICAgICBhVGV4dHVyZUNvb3JkOiAgICAgIDAsXG4gICAgICAgIGFDb2xvcjogICAgICAgICAgICAgMFxuICAgIH07XG5cbiAgICBpZiAoY3VzdG9tQXR0cmlidXRlcylcbiAgICB7XG4gICAgICAgIGZvciAodmFyIGEgaW4gY3VzdG9tQXR0cmlidXRlcylcbiAgICAgICAge1xuICAgICAgICAgICAgYXR0cmlidXRlc1thXSA9IGN1c3RvbUF0dHJpYnV0ZXNbYV07XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGUgdmVydGV4IHNoYWRlci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge3N0cmluZ31cbiAgICAgKi9cbiAgICB2ZXJ0ZXhTcmMgPSB2ZXJ0ZXhTcmMgfHwgVGV4dHVyZVNoYWRlci5kZWZhdWx0VmVydGV4U3JjO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGZyYWdtZW50IHNoYWRlci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge3N0cmluZ31cbiAgICAgKi9cbiAgICBmcmFnbWVudFNyYyA9IGZyYWdtZW50U3JjIHx8IFRleHR1cmVTaGFkZXIuZGVmYXVsdEZyYWdtZW50U3JjO1xuXG4gICAgU2hhZGVyLmNhbGwodGhpcywgc2hhZGVyTWFuYWdlciwgdmVydGV4U3JjLCBmcmFnbWVudFNyYywgdW5pZm9ybXMsIGF0dHJpYnV0ZXMpO1xufVxuXG4vLyBjb25zdHJ1Y3RvclxuVGV4dHVyZVNoYWRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFNoYWRlci5wcm90b3R5cGUpO1xuVGV4dHVyZVNoYWRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBUZXh0dXJlU2hhZGVyO1xubW9kdWxlLmV4cG9ydHMgPSBUZXh0dXJlU2hhZGVyO1xuXG4vKipcbiAqIFRoZSBkZWZhdWx0IHZlcnRleCBzaGFkZXIgc291cmNlXG4gKlxuICogQHN0YXRpY1xuICogQGNvbnN0YW50XG4gKi9cblRleHR1cmVTaGFkZXIuZGVmYXVsdFZlcnRleFNyYyA9IFtcbiAgICAncHJlY2lzaW9uIGxvd3AgZmxvYXQ7JyxcbiAgICAnYXR0cmlidXRlIHZlYzIgYVZlcnRleFBvc2l0aW9uOycsXG4gICAgJ2F0dHJpYnV0ZSB2ZWMyIGFUZXh0dXJlQ29vcmQ7JyxcbiAgICAnYXR0cmlidXRlIHZlYzQgYUNvbG9yOycsXG5cbiAgICAndW5pZm9ybSBtYXQzIHByb2plY3Rpb25NYXRyaXg7JyxcblxuICAgICd2YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDsnLFxuICAgICd2YXJ5aW5nIHZlYzQgdkNvbG9yOycsXG5cbiAgICAndm9pZCBtYWluKHZvaWQpeycsXG4gICAgJyAgIGdsX1Bvc2l0aW9uID0gdmVjNCgocHJvamVjdGlvbk1hdHJpeCAqIHZlYzMoYVZlcnRleFBvc2l0aW9uLCAxLjApKS54eSwgMC4wLCAxLjApOycsXG4gICAgJyAgIHZUZXh0dXJlQ29vcmQgPSBhVGV4dHVyZUNvb3JkOycsXG4gICAgJyAgIHZDb2xvciA9IHZlYzQoYUNvbG9yLnJnYiAqIGFDb2xvci5hLCBhQ29sb3IuYSk7JyxcbiAgICAnfSdcbl0uam9pbignXFxuJyk7XG5cbi8qKlxuICogVGhlIGRlZmF1bHQgZnJhZ21lbnQgc2hhZGVyIHNvdXJjZVxuICpcbiAqIEBzdGF0aWNcbiAqIEBjb25zdGFudFxuICovXG5UZXh0dXJlU2hhZGVyLmRlZmF1bHRGcmFnbWVudFNyYyA9IFtcbiAgICAncHJlY2lzaW9uIGxvd3AgZmxvYXQ7JyxcblxuICAgICd2YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDsnLFxuICAgICd2YXJ5aW5nIHZlYzQgdkNvbG9yOycsXG5cbiAgICAndW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXI7JyxcblxuICAgICd2b2lkIG1haW4odm9pZCl7JyxcbiAgICAnICAgZ2xfRnJhZ0NvbG9yID0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2VGV4dHVyZUNvb3JkKSAqIHZDb2xvciA7JyxcbiAgICAnfSdcbl0uam9pbignXFxuJyk7XG4iLCJ2YXIgU2hhZGVyID0gcmVxdWlyZSgncGl4aS1nbC1jb3JlJykuR0xTaGFkZXI7XG5cbi8qKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQGV4dGVuZHMgUElYSS5TaGFkZXJcbiAqIEBwYXJhbSBzaGFkZXJNYW5hZ2VyIHtQSVhJLlNoYWRlck1hbmFnZXJ9IFRoZSB3ZWJnbCBzaGFkZXIgbWFuYWdlciB0aGlzIHNoYWRlciB3b3JrcyBmb3IuXG4gKiBAcGFyYW0gW3ZlcnRleFNyY10ge3N0cmluZ30gVGhlIHNvdXJjZSBvZiB0aGUgdmVydGV4IHNoYWRlci5cbiAqIEBwYXJhbSBbZnJhZ21lbnRTcmNdIHtzdHJpbmd9IFRoZSBzb3VyY2Ugb2YgdGhlIGZyYWdtZW50IHNoYWRlci5cbiAqIEBwYXJhbSBbY3VzdG9tVW5pZm9ybXNdIHtvYmplY3R9IEN1c3RvbSB1bmlmb3JtcyB0byB1c2UgdG8gYXVnbWVudCB0aGUgYnVpbHQtaW4gb25lcy5cbiAqIEBwYXJhbSBbZnJhZ21lbnRTcmNdIHtzdHJpbmd9IFRoZSBzb3VyY2Ugb2YgdGhlIGZyYWdtZW50IHNoYWRlci5cbiAqL1xuZnVuY3Rpb24gVGV4dHVyZVNoYWRlcihnbClcbntcbiAgICAvKipcbiAgICAgKiBUaGUgdmVydGV4IHNoYWRlci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge3N0cmluZ31cbiAgICAgKi9cbiAgICB2ZXJ0ZXhTcmMgPSBUZXh0dXJlU2hhZGVyLmRlZmF1bHRWZXJ0ZXhTcmM7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgZnJhZ21lbnQgc2hhZGVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7c3RyaW5nfVxuICAgICAqL1xuICAgIGZyYWdtZW50U3JjID0gVGV4dHVyZVNoYWRlci5kZWZhdWx0RnJhZ21lbnRTcmM7XG5cbiAgICBTaGFkZXIuY2FsbCh0aGlzLCBnbCwgdmVydGV4U3JjLCBmcmFnbWVudFNyYyk7Ly8sIHVuaWZvcm1zLCBhdHRyaWJ1dGVzKTtcblxufVxuXG4vLyBjb25zdHJ1Y3RvclxuVGV4dHVyZVNoYWRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFNoYWRlci5wcm90b3R5cGUpO1xuVGV4dHVyZVNoYWRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBUZXh0dXJlU2hhZGVyO1xubW9kdWxlLmV4cG9ydHMgPSBUZXh0dXJlU2hhZGVyO1xuXG4vKipcbiAqIFRoZSBkZWZhdWx0IHZlcnRleCBzaGFkZXIgc291cmNlXG4gKlxuICogQHN0YXRpY1xuICogQGNvbnN0YW50XG4gKi9cblRleHR1cmVTaGFkZXIuZGVmYXVsdFZlcnRleFNyYyA9IFtcbiAgICAncHJlY2lzaW9uIGxvd3AgZmxvYXQ7JyxcbiAgICAnYXR0cmlidXRlIHZlYzIgYVZlcnRleFBvc2l0aW9uOycsXG4gICAgJ2F0dHJpYnV0ZSB2ZWMyIGFUZXh0dXJlQ29vcmQ7JyxcbiAgICAnYXR0cmlidXRlIHZlYzQgYUNvbG9yOycsXG5cbiAgICAndW5pZm9ybSBtYXQzIHByb2plY3Rpb25NYXRyaXg7JyxcblxuICAgICd2YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDsnLFxuICAgICd2YXJ5aW5nIHZlYzQgdkNvbG9yOycsXG5cbiAgICAndm9pZCBtYWluKHZvaWQpeycsXG4gICAgJyAgIGdsX1Bvc2l0aW9uID0gdmVjNCgocHJvamVjdGlvbk1hdHJpeCAqIHZlYzMoYVZlcnRleFBvc2l0aW9uLCAxLjApKS54eSwgMC4wLCAxLjApOycsXG4gICAgJyAgIHZUZXh0dXJlQ29vcmQgPSBhVGV4dHVyZUNvb3JkOycsXG4gICAgJyAgIHZDb2xvciA9IHZlYzQoYUNvbG9yLnJnYiAqIGFDb2xvci5hLCBhQ29sb3IuYSk7JyxcbiAgICAnfSdcbl0uam9pbignXFxuJyk7XG5cbi8qKlxuICogVGhlIGRlZmF1bHQgZnJhZ21lbnQgc2hhZGVyIHNvdXJjZVxuICpcbiAqIEBzdGF0aWNcbiAqIEBjb25zdGFudFxuICovXG5UZXh0dXJlU2hhZGVyLmRlZmF1bHRGcmFnbWVudFNyYyA9IFtcbiAgICAncHJlY2lzaW9uIGxvd3AgZmxvYXQ7JyxcblxuICAgICd2YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDsnLFxuICAgICd2YXJ5aW5nIHZlYzQgdkNvbG9yOycsXG5cbiAgICAndW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXI7JyxcblxuICAgICd2b2lkIG1haW4odm9pZCl7JyxcbiAgICAnICAgZ2xfRnJhZ0NvbG9yID0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2VGV4dHVyZUNvb3JkKSAqIHZDb2xvciA7JyxcbiAgICAnfSdcbl0uam9pbignXFxuJyk7XG4iLCJ2YXIgV2ViR0xNYW5hZ2VyID0gcmVxdWlyZSgnLi4vbWFuYWdlcnMvV2ViR0xNYW5hZ2VyJyk7XG5cbi8qKlxuICogQmFzZSBmb3IgYSBjb21tb24gb2JqZWN0IHJlbmRlcmVyIHRoYXQgY2FuIGJlIHVzZWQgYXMgYSBzeXN0ZW0gcmVuZGVyZXIgcGx1Z2luLlxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5XZWJHTE1hbmFnZXJcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcn0gVGhlIHJlbmRlcmVyIHRoaXMgb2JqZWN0IHJlbmRlcmVyIHdvcmtzIGZvci5cbiAqL1xuZnVuY3Rpb24gT2JqZWN0UmVuZGVyZXIocmVuZGVyZXIpXG57XG4gICAgV2ViR0xNYW5hZ2VyLmNhbGwodGhpcywgcmVuZGVyZXIpO1xufVxuXG5cbk9iamVjdFJlbmRlcmVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoV2ViR0xNYW5hZ2VyLnByb3RvdHlwZSk7XG5PYmplY3RSZW5kZXJlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBPYmplY3RSZW5kZXJlcjtcbm1vZHVsZS5leHBvcnRzID0gT2JqZWN0UmVuZGVyZXI7XG5cbi8qKlxuICogU3RhcnRzIHRoZSByZW5kZXJlciBhbmQgc2V0cyB0aGUgc2hhZGVyXG4gKlxuICovXG5PYmplY3RSZW5kZXJlci5wcm90b3R5cGUuc3RhcnQgPSBmdW5jdGlvbiAoKVxue1xuICAgIC8vIHNldCB0aGUgc2hhZGVyLi5cbn07XG5cbi8qKlxuICogU3RvcHMgdGhlIHJlbmRlcmVyXG4gKlxuICovXG5PYmplY3RSZW5kZXJlci5wcm90b3R5cGUuc3RvcCA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy5mbHVzaCgpO1xufTtcblxuLyoqXG4gKiBmbHVzaGVzXG4gKlxuICovXG5PYmplY3RSZW5kZXJlci5wcm90b3R5cGUuZmx1c2ggPSBmdW5jdGlvbiAoKVxue1xuICAgIC8vIGZsdXNoIVxufTtcblxuLyoqXG4gKiBSZW5kZXJzIGFuIG9iamVjdFxuICpcbiAqIEBwYXJhbSBvYmplY3Qge1BJWEkuRGlzcGxheU9iamVjdH0gVGhlIG9iamVjdCB0byByZW5kZXIuXG4gKi9cbk9iamVjdFJlbmRlcmVyLnByb3RvdHlwZS5yZW5kZXIgPSBmdW5jdGlvbiAob2JqZWN0KSAvLyBqc2hpbnQgdW51c2VkOmZhbHNlXG57XG4gICAgLy8gcmVuZGVyIHRoZSBvYmplY3Rcbn07XG4iLCIvKipcbiAqIEhlbHBlciBjbGFzcyB0byBjcmVhdGUgYSBxdWFkXG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIGdsIHtXZWJHTFJlbmRlcmluZ0NvbnRleHR9IFRoZSBnbCBjb250ZXh0IGZvciB0aGlzIHF1YWQgdG8gdXNlLlxuICovXG5mdW5jdGlvbiBRdWFkKGdsKVxue1xuICAgIC8qXG4gICAgICogdGhlIGN1cnJlbnQgV2ViR0wgZHJhd2luZyBjb250ZXh0XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtXZWJHTFJlbmRlcmluZ0NvbnRleHR9XG4gICAgICovXG4gICAgdGhpcy5nbCA9IGdsO1xuXG4vLyAgICB0aGlzLnRleHR1cmVzID0gbmV3IFRleHR1cmVVdnMoKTtcblxuICAgIC8qKlxuICAgICAqIEFuIGFycmF5IG9mIHZlcnRpY2VzXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtGbG9hdDMyQXJyYXl9XG4gICAgICovXG4gICAgdGhpcy52ZXJ0aWNlcyA9IG5ldyBGbG9hdDMyQXJyYXkoW1xuICAgICAgICAwLDAsXG4gICAgICAgIDIwMCwwLFxuICAgICAgICAyMDAsMjAwLFxuICAgICAgICAwLDIwMFxuICAgIF0pO1xuXG4gICAgLyoqXG4gICAgICogVGhlIFV2cyBvZiB0aGUgcXVhZFxuICAgICAqXG4gICAgICogQG1lbWJlciB7RmxvYXQzMkFycmF5fVxuICAgICAqL1xuICAgIHRoaXMudXZzID0gbmV3IEZsb2F0MzJBcnJheShbXG4gICAgICAgIDAsMCxcbiAgICAgICAgMSwwLFxuICAgICAgICAxLDEsXG4gICAgICAgIDAsMVxuICAgIF0pO1xuXG4vLyAgICB2YXIgd2hpdGUgPSAoMHhGRkZGRkYgPj4gMTYpICsgKDB4RkZGRkZGICYgMHhmZjAwKSArICgoMHhGRkZGRkYgJiAweGZmKSA8PCAxNikgKyAoMSAqIDI1NSA8PCAyNCk7XG4gICAgLy9UT0RPIGNvbnZlcnQgdGhpcyB0byBhIDMyIHVuc2lnbmVkIGludCBhcnJheVxuICAgIC8qKlxuICAgICAqIFRoZSBjb2xvciBjb21wb25lbnRzIG9mIHRoZSB0cmlhbmdsZXNcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge0Zsb2F0MzJBcnJheX1cbiAgICAgKi9cbiAgICB0aGlzLmNvbG9ycyA9IG5ldyBGbG9hdDMyQXJyYXkoW1xuICAgICAgICAxLDEsMSwxLFxuICAgICAgICAxLDEsMSwxLFxuICAgICAgICAxLDEsMSwxLFxuICAgICAgICAxLDEsMSwxXG4gICAgXSk7XG5cbiAgICAvKlxuICAgICAqIEBtZW1iZXIge1VpbnQxNkFycmF5fSBBbiBhcnJheSBjb250YWluaW5nIHRoZSBpbmRpY2VzIG9mIHRoZSB2ZXJ0aWNlc1xuICAgICAqL1xuICAgIHRoaXMuaW5kaWNlcyA9IG5ldyBVaW50MTZBcnJheShbXG4gICAgICAgIDAsIDEsIDIsIDAsIDMsIDJcbiAgICBdKTtcblxuICAgIC8qXG4gICAgICogQG1lbWJlciB7V2ViR0xCdWZmZXJ9IFRoZSB2ZXJ0ZXggYnVmZmVyXG4gICAgICovXG4gICAgdGhpcy52ZXJ0ZXhCdWZmZXIgPSBnbC5jcmVhdGVCdWZmZXIoKTtcblxuICAgIC8qXG4gICAgICogQG1lbWJlciB7V2ViR0xCdWZmZXJ9IFRoZSBpbmRleCBidWZmZXJcbiAgICAgKi9cbiAgICB0aGlzLmluZGV4QnVmZmVyID0gZ2wuY3JlYXRlQnVmZmVyKCk7XG5cbiAgICBnbC5iaW5kQnVmZmVyKGdsLkFSUkFZX0JVRkZFUiwgdGhpcy52ZXJ0ZXhCdWZmZXIpO1xuICAgIGdsLmJ1ZmZlckRhdGEoZ2wuQVJSQVlfQlVGRkVSLCAoOCArIDggKyAxNikgKiA0LCBnbC5EWU5BTUlDX0RSQVcpO1xuXG4gICAgZ2wuYmluZEJ1ZmZlcihnbC5FTEVNRU5UX0FSUkFZX0JVRkZFUiwgdGhpcy5pbmRleEJ1ZmZlcik7XG4gICAgZ2wuYnVmZmVyRGF0YShnbC5FTEVNRU5UX0FSUkFZX0JVRkZFUiwgdGhpcy5pbmRpY2VzLCBnbC5TVEFUSUNfRFJBVyk7XG5cbiAgICB0aGlzLnVwbG9hZCgpO1xufVxuXG5RdWFkLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFF1YWQ7XG5cbi8qKlxuICogTWFwcyB0d28gUmVjdGFuZ2xlIHRvIHRoZSBxdWFkXG4gKiBAcGFyYW0gcmVjdCB7UElYSS5SZWN0YW5nbGV9IHRoZSBmaXJzdCByZWN0YW5nbGVcbiAqIEBwYXJhbSByZWN0MiB7UElYSS5SZWN0YW5nbGV9IHRoZSBzZWNvbmQgcmVjdGFuZ2xlXG4gKi9cblF1YWQucHJvdG90eXBlLm1hcCA9IGZ1bmN0aW9uKHJlY3QsIHJlY3QyKVxue1xuICAgIHZhciB4ID0gMDsgLy9yZWN0Mi54IC8gcmVjdC53aWR0aDtcbiAgICB2YXIgeSA9IDA7IC8vcmVjdDIueSAvIHJlY3QuaGVpZ2h0O1xuXG4gICAgdGhpcy51dnNbMF0gPSB4O1xuICAgIHRoaXMudXZzWzFdID0geTtcblxuICAgIHRoaXMudXZzWzJdID0geCArIHJlY3QyLndpZHRoIC8gcmVjdC53aWR0aDtcbiAgICB0aGlzLnV2c1szXSA9IHk7XG5cbiAgICB0aGlzLnV2c1s0XSA9IHggKyByZWN0Mi53aWR0aCAvIHJlY3Qud2lkdGg7XG4gICAgdGhpcy51dnNbNV0gPSB5ICsgcmVjdDIuaGVpZ2h0IC8gcmVjdC5oZWlnaHQ7XG5cbiAgICB0aGlzLnV2c1s2XSA9IHg7XG4gICAgdGhpcy51dnNbN10gPSB5ICsgcmVjdDIuaGVpZ2h0IC8gcmVjdC5oZWlnaHQ7XG5cbiAgICAvLy8gLS0tLS1cbiAgICB4ID0gcmVjdDIueDtcbiAgICB5ID0gcmVjdDIueTtcblxuICAgIHRoaXMudmVydGljZXNbMF0gPSB4O1xuICAgIHRoaXMudmVydGljZXNbMV0gPSB5O1xuXG4gICAgdGhpcy52ZXJ0aWNlc1syXSA9IHggKyByZWN0Mi53aWR0aDtcbiAgICB0aGlzLnZlcnRpY2VzWzNdID0geTtcblxuICAgIHRoaXMudmVydGljZXNbNF0gPSB4ICsgcmVjdDIud2lkdGg7XG4gICAgdGhpcy52ZXJ0aWNlc1s1XSA9IHkgKyByZWN0Mi5oZWlnaHQ7XG5cbiAgICB0aGlzLnZlcnRpY2VzWzZdID0geDtcbiAgICB0aGlzLnZlcnRpY2VzWzddID0geSArIHJlY3QyLmhlaWdodDtcblxuICAgIHRoaXMudXBsb2FkKCk7XG59O1xuXG4vKipcbiAqIEJpbmRzIHRoZSBidWZmZXIgYW5kIHVwbG9hZHMgdGhlIGRhdGFcbiAqL1xuUXVhZC5wcm90b3R5cGUudXBsb2FkID0gZnVuY3Rpb24oKVxue1xuICAgIHZhciBnbCA9IHRoaXMuZ2w7XG5cbiAgICAvLyBUT0RPIGNvdWxkIHByb2JhYmx5IGJlIHB1c2hlZCBpbnRvIG9uZSB1cGxvYWQhXG4gICAgZ2wuYmluZEJ1ZmZlciggZ2wuQVJSQVlfQlVGRkVSLCB0aGlzLnZlcnRleEJ1ZmZlciApO1xuXG4gICAgZ2wuYnVmZmVyU3ViRGF0YShnbC5BUlJBWV9CVUZGRVIsIDAsIHRoaXMudmVydGljZXMpO1xuXG4gICAgZ2wuYnVmZmVyU3ViRGF0YShnbC5BUlJBWV9CVUZGRVIsIDggKiA0LCB0aGlzLnV2cyk7XG5cbiAgICBnbC5idWZmZXJTdWJEYXRhKGdsLkFSUkFZX0JVRkZFUiwgKDggKyA4KSAqIDQsIHRoaXMuY29sb3JzKTtcbn07XG5cblF1YWQucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbigpXG57XG4gICAgdmFyIGdsID0gdGhpcy5nbDtcbiAgICBcbiAgICAgZ2wuZGVsZXRlQnVmZmVyKHRoaXMudmVydGV4QnVmZmVyKTtcbiAgICAgZ2wuZGVsZXRlQnVmZmVyKHRoaXMuaW5kZXhCdWZmZXIpO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBRdWFkO1xuXG5cbiIsInZhciBtYXRoID0gcmVxdWlyZSgnLi4vLi4vLi4vbWF0aCcpLFxuICAgIHV0aWxzID0gcmVxdWlyZSgnLi4vLi4vLi4vdXRpbHMnKSxcbiAgICBDT05TVCA9IHJlcXVpcmUoJy4uLy4uLy4uL2NvbnN0JyksXG4gICAgICAgIFxuICAgIEdMVGV4dHVyZSA9IHJlcXVpcmUoJ3BpeGktZ2wtY29yZScpLkdMVGV4dHVyZSxcbiAgICBHTEZyYW1lYnVmZmVyID0gcmVxdWlyZSgncGl4aS1nbC1jb3JlJykuR0xGcmFtZWJ1ZmZlcixcbiAgICBcbiAgICBTdGVuY2lsTWFza1N0YWNrID0gcmVxdWlyZSgnLi9TdGVuY2lsTWFza1N0YWNrJyk7XG5cbi8qKlxuICogQGF1dGhvciBNYXQgR3JvdmVzIGh0dHA6Ly9tYXRncm92ZXMuY29tLyBARG9vcm1hdDIzXG4gKi9cblxuLyoqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gZ2wge1dlYkdMUmVuZGVyaW5nQ29udGV4dH0gdGhlIGN1cnJlbnQgV2ViR0wgZHJhd2luZyBjb250ZXh0XG4gKiBAcGFyYW0gd2lkdGgge251bWJlcn0gdGhlIGhvcml6b250YWwgcmFuZ2Ugb2YgdGhlIGZpbHRlclxuICogQHBhcmFtIGhlaWdodCB7bnVtYmVyfSB0aGUgdmVydGljYWwgcmFuZ2Ugb2YgdGhlIGZpbHRlclxuICogQHBhcmFtIHNjYWxlTW9kZSB7bnVtYmVyfSBTZWUge0BsaW5rIFBJWEkuU0NBTEVfTU9ERVN9IGZvciBwb3NzaWJsZSB2YWx1ZXNcbiAqIEBwYXJhbSByZXNvbHV0aW9uIHtudW1iZXJ9IHRoZSBjdXJyZW50IHJlc29sdXRpb25cbiAqIEBwYXJhbSByb290IHtib29sZWFufSBXaGV0aGVyIHRoaXMgb2JqZWN0IGlzIHRoZSByb290IGVsZW1lbnQgb3Igbm90XG4gKi9cbnZhciBSZW5kZXJUYXJnZXQgPSBmdW5jdGlvbihnbCwgd2lkdGgsIGhlaWdodCwgc2NhbGVNb2RlLCByZXNvbHV0aW9uLCByb290KVxue1xuICAgIC8vVE9ETyBSZXNvbHV0aW9uIGNvdWxkIGdvIGhlcmUgKCBlZyBsb3cgcmVzIGJsdXJzIClcblxuICAgIC8qKlxuICAgICAqIFRoZSBjdXJyZW50IFdlYkdMIGRyYXdpbmcgY29udGV4dC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1dlYkdMUmVuZGVyaW5nQ29udGV4dH1cbiAgICAgKi9cbiAgICB0aGlzLmdsID0gZ2w7XG5cbiAgICAvLyBuZXh0IHRpbWUgdG8gY3JlYXRlIGEgZnJhbWUgYnVmZmVyIGFuZCB0ZXh0dXJlXG5cbiAgICAvKipcbiAgICAgKiBBIGZyYW1lIGJ1ZmZlclxuICAgICAqXG4gICAgICogQG1lbWJlciB7V2ViR0xGcmFtZUJ1ZmZlcn1cbiAgICAgKi9cbiAgICB0aGlzLmZyYW1lQnVmZmVyID0gbnVsbDtcblxuICAgIC8qKlxuICAgICAqIFRoZSB0ZXh0dXJlXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlRleHR1cmV9XG4gICAgICovXG4gICAgdGhpcy50ZXh0dXJlID0gbnVsbDtcblxuICAgIHRoaXMuY2xlYXJDb2xvciA9IFswLCAwLCAwLCAwXTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBzaXplIG9mIHRoZSBvYmplY3QgYXMgYSByZWN0YW5nbGVcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuUmVjdGFuZ2xlfVxuICAgICAqL1xuICAgIHRoaXMuc2l6ZSA9IG5ldyBtYXRoLlJlY3RhbmdsZSgwLCAwLCAxLCAxKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBjdXJyZW50IHJlc29sdXRpb25cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLnJlc29sdXRpb24gPSByZXNvbHV0aW9uIHx8IENPTlNULlJFU09MVVRJT047XG5cbiAgICAvKipcbiAgICAgKiBUaGUgcHJvamVjdGlvbiBtYXRyaXhcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuTWF0cml4fVxuICAgICAqL1xuICAgIHRoaXMucHJvamVjdGlvbk1hdHJpeCA9IG5ldyBtYXRoLk1hdHJpeCgpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIG9iamVjdCdzIHRyYW5zZm9ybVxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5NYXRyaXh9XG4gICAgICovXG4gICAgdGhpcy50cmFuc2Zvcm0gPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGZyYW1lLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5SZWN0YW5nbGV9XG4gICAgICovXG4gICAgdGhpcy5mcmFtZSA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgc3RlbmNpbCBidWZmZXIgc3RvcmVzIG1hc2tpbmcgZGF0YSBmb3IgdGhlIHJlbmRlciB0YXJnZXRcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1dlYkdMUmVuZGVyQnVmZmVyfVxuICAgICAqL1xuICAgIHRoaXMuc3RlbmNpbEJ1ZmZlciA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgZGF0YSBzdHJ1Y3R1cmUgZm9yIHRoZSBzdGVuY2lsIG1hc2tzXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlN0ZW5jaWxNYXNrU3RhY2t9XG4gICAgICovXG4gICAgdGhpcy5zdGVuY2lsTWFza1N0YWNrID0gbmV3IFN0ZW5jaWxNYXNrU3RhY2soKTtcblxuICAgIC8qKlxuICAgICAqIFN0b3JlcyBmaWx0ZXIgZGF0YSBmb3IgdGhlIHJlbmRlciB0YXJnZXRcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge29iamVjdFtdfVxuICAgICAqL1xuICAgIHRoaXMuZmlsdGVyU3RhY2sgPSBbXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJlbmRlclRhcmdldDp0aGlzLFxuICAgICAgICAgICAgZmlsdGVyOltdLFxuICAgICAgICAgICAgYm91bmRzOnRoaXMuc2l6ZVxuICAgICAgICB9XG4gICAgXTtcblxuXG4gICAgLyoqXG4gICAgICogVGhlIHNjYWxlIG1vZGUuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgUElYSS5TQ0FMRV9NT0RFUy5ERUZBVUxUXG4gICAgICogQHNlZSBQSVhJLlNDQUxFX01PREVTXG4gICAgICovXG4gICAgdGhpcy5zY2FsZU1vZGUgPSBzY2FsZU1vZGUgfHwgQ09OU1QuU0NBTEVfTU9ERVMuREVGQVVMVDtcblxuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgdGhpcyBvYmplY3QgaXMgdGhlIHJvb3QgZWxlbWVudCBvciBub3RcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICovXG4gICAgdGhpcy5yb290ID0gcm9vdDtcblxuICAgIHRoaXMuZnJhbWVCdWZmZXIgPSBHTEZyYW1lYnVmZmVyLmNyZWF0ZVJHQkEoZ2wsIDEwMCwgMTAwKTtcbiAgICBpZih0aGlzLmZyYW1lQnVmZmVyKXRoaXMuZnJhbWVCdWZmZXIudW5iaW5kKCk7XG5cbiAgIC8vIHRoaXMuZnJhbWVCdWZmZXIgPSB7ZnJhbWVidWZmZXI6bnVsbCwgYmluZDpmdW5jdGlvbigpe30sIGNsZWFyOmZ1bmN0aW9uKCl7fSwgcmVzaXplOmZ1bmN0aW9uKCl7fX0vL25ldyBHTEZyYW1lYnVmZmVyLmNyZWF0ZVJHQkEoZ2wsIDEwMCwgMTAwKTtcblxuXG5cbiAgICBpZiAoIXRoaXMucm9vdClcbiAgICB7XG4gICAgICAgIC8qXG4gICAgICAgICAgICBBIGZyYW1lIGJ1ZmZlciBuZWVkcyBhIHRhcmdldCB0byByZW5kZXIgdG8uLlxuICAgICAgICAgICAgY3JlYXRlIGEgdGV4dHVyZSBhbmQgYmluZCBpdCBhdHRhY2ggaXQgdG8gdGhlIGZyYW1lYnVmZmVyLi5cbiAgICAgICAgICovXG4gICAgICAgIFxuICAgICAgICAvLyBjcmVhdGUgYSB0ZXh0dXJlIHRvIGJpbmQgYXR0YWNoIHRvIHRoZSBmcmFtZUJ1ZmZlci4uXG4gICAgICAgIHZhciB0ZXh0dXJlID0gbmV3IEdMVGV4dHVyZShnbCk7XG5cbiAgICAgICAgdGV4dHVyZS5lbmFibGVMaW5lYXJTY2FsaW5nKClcbiAgICAgICAgdGV4dHVyZS5lbmFibGVXcmFwQ2xhbXAoKVxuXG4gICAgICAgIHRoaXMuZnJhbWVCdWZmZXIuZW5hYmxlVGV4dHVyZSh0ZXh0dXJlKTtcblxuICAgICAgICAvLyBUT0RPIGNoYW5nZSFcbiAgICAgICAgLy8gdGhpcyBpcyB1c2VkIGJ5IHRoZSBiYXNlIHRleHR1cmVcbiAgICAgICAgdGhpcy50ZXh0dXJlID0gdGV4dHVyZS50ZXh0dXJlO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICAvLyBtYWtlIGl0IGEgbnVsbCBmcmFtZWJ1ZmZlci4uXG4gICAgICAgIHRoaXMuZnJhbWVCdWZmZXIuZnJhbWVidWZmZXIgPSBudWxsO1xuICAgIH1cblxuICAgIHRoaXMucmVzaXplKHdpZHRoLCBoZWlnaHQpO1xufTtcblxuUmVuZGVyVGFyZ2V0LnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFJlbmRlclRhcmdldDtcbm1vZHVsZS5leHBvcnRzID0gUmVuZGVyVGFyZ2V0O1xuXG4vKipcbiAqIENsZWFycyB0aGUgZmlsdGVyIHRleHR1cmUuXG4gKlxuICogQHBhcmFtIFtiaW5kPWZhbHNlXSB7Ym9vbGVhbn0gU2hvdWxkIHdlIGJpbmQgb3VyIGZyYW1lYnVmZmVyIGJlZm9yZSBjbGVhcmluZz9cbiAqL1xuUmVuZGVyVGFyZ2V0LnByb3RvdHlwZS5jbGVhciA9IGZ1bmN0aW9uKGNsZWFyQ29sb3IpXG57XG4gICAgdmFyIGNjID0gY2xlYXJDb2xvciB8fCB0aGlzLmNsZWFyQ29sb3JcbiAgICB0aGlzLmZyYW1lQnVmZmVyLmNsZWFyKGNjWzBdLGNjWzFdLGNjWzJdLGNjWzNdKS8vcixnLGIsYSk7XG59O1xuXG4vKipcbiAqIEJpbmRzIHRoZSBzdGVuY2lsIGJ1ZmZlci5cbiAqXG4gKi9cblJlbmRlclRhcmdldC5wcm90b3R5cGUuYXR0YWNoU3RlbmNpbEJ1ZmZlciA9IGZ1bmN0aW9uKClcbntcbiAgICAvL1RPRE8gY2hlY2sgaWYgc3RlbmNpbCBpcyBkb25lP1xuICAgIC8qKlxuICAgICAqIFRoZSBzdGVuY2lsIGJ1ZmZlciBpcyB1c2VkIGZvciBtYXNraW5nIGluIHBpeGlcbiAgICAgKiBsZXRzIGNyZWF0ZSBvbmUgYW5kIHRoZW4gYWRkIGF0dGFjaCBpdCB0byB0aGUgZnJhbWVidWZmZXIuLlxuICAgICAqL1xuICAgIGlmICghdGhpcy5yb290KVxuICAgIHtcbiAgICAgICAgdGhpcy5mcmFtZUJ1ZmZlci5lbmFibGVTdGVuY2lsKCk7XG4gICAgfVxufTtcblxuLyoqXG4gKiBCaW5kcyB0aGUgYnVmZmVycyBhbmQgaW5pdGlhbGlzZXMgdGhlIHZpZXdwb3J0LlxuICpcbiAqL1xuUmVuZGVyVGFyZ2V0LnByb3RvdHlwZS5hY3RpdmF0ZSA9IGZ1bmN0aW9uKClcbntcbiAgICAvL1RPT0QgcmVmYWN0b3IgdXNhZ2Ugb2YgZnJhbWUuLlxuICAgIHZhciBnbCA9IHRoaXMuZ2w7XG5cbiAgICB0aGlzLmZyYW1lQnVmZmVyLmJpbmQoKTtcblxuXG4gICAgdmFyIHByb2plY3Rpb25GcmFtZSA9IHRoaXMuZnJhbWUgfHwgdGhpcy5zaXplO1xuXG4gICAgLy8gVE9ETyBhZGQgYSBkaXJ0eSBmbGFnIHRvIHRoaXMgb2YgYSBzZXR0ZXIgZm9yIHRoZSBmcmFtZT9cbiAgICB0aGlzLmNhbGN1bGF0ZVByb2plY3Rpb24oIHByb2plY3Rpb25GcmFtZSApO1xuXG4gICAgaWYodGhpcy50cmFuc2Zvcm0pXG4gICAge1xuICAgICAgICB0aGlzLnByb2plY3Rpb25NYXRyaXguYXBwZW5kKHRoaXMudHJhbnNmb3JtKTtcbiAgICB9XG5cbiAgICBnbC52aWV3cG9ydCgwLDAsIHByb2plY3Rpb25GcmFtZS53aWR0aCAqIHRoaXMucmVzb2x1dGlvbiwgcHJvamVjdGlvbkZyYW1lLmhlaWdodCAqIHRoaXMucmVzb2x1dGlvbik7XG59O1xuXG4vKipcbiAqIFVwZGF0ZXMgdGhlIHByb2plY3Rpb24gbWF0cml4IGJhc2VkIG9uIGEgcHJvamVjdGlvbiBmcmFtZSAod2hpY2ggaXMgYSByZWN0YW5nbGUpXG4gKlxuICovXG5SZW5kZXJUYXJnZXQucHJvdG90eXBlLmNhbGN1bGF0ZVByb2plY3Rpb24gPSBmdW5jdGlvbiAocHJvamVjdGlvbkZyYW1lKVxue1xuICAgIHZhciBwbSA9IHRoaXMucHJvamVjdGlvbk1hdHJpeDtcblxuICAgIHBtLmlkZW50aXR5KCk7XG5cbiAgICBpZiAoIXRoaXMucm9vdClcbiAgICB7XG4gICAgICAgIHBtLmEgPSAxIC8gcHJvamVjdGlvbkZyYW1lLndpZHRoKjI7XG4gICAgICAgIHBtLmQgPSAxIC8gcHJvamVjdGlvbkZyYW1lLmhlaWdodCoyO1xuXG4gICAgICAgIHBtLnR4ID0gLTEgLSBwcm9qZWN0aW9uRnJhbWUueCAqIHBtLmE7XG4gICAgICAgIHBtLnR5ID0gLTEgLSBwcm9qZWN0aW9uRnJhbWUueSAqIHBtLmQ7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHBtLmEgPSAxIC8gcHJvamVjdGlvbkZyYW1lLndpZHRoKjI7XG4gICAgICAgIHBtLmQgPSAtMSAvIHByb2plY3Rpb25GcmFtZS5oZWlnaHQqMjtcblxuICAgICAgICBwbS50eCA9IC0xIC0gcHJvamVjdGlvbkZyYW1lLnggKiBwbS5hO1xuICAgICAgICBwbS50eSA9IDEgLSBwcm9qZWN0aW9uRnJhbWUueSAqIHBtLmQ7XG4gICAgfVxufTtcblxuLyoqXG4gKiBSZXNpemVzIHRoZSB0ZXh0dXJlIHRvIHRoZSBzcGVjaWZpZWQgd2lkdGggYW5kIGhlaWdodFxuICpcbiAqIEBwYXJhbSB3aWR0aCB7TnVtYmVyfSB0aGUgbmV3IHdpZHRoIG9mIHRoZSB0ZXh0dXJlXG4gKiBAcGFyYW0gaGVpZ2h0IHtOdW1iZXJ9IHRoZSBuZXcgaGVpZ2h0IG9mIHRoZSB0ZXh0dXJlXG4gKi9cblJlbmRlclRhcmdldC5wcm90b3R5cGUucmVzaXplID0gZnVuY3Rpb24gKHdpZHRoLCBoZWlnaHQpXG57XG4gICAgd2lkdGggPSB3aWR0aCB8IDA7XG4gICAgaGVpZ2h0ID0gaGVpZ2h0IHwgMDtcblxuICAgIGlmICh0aGlzLnNpemUud2lkdGggPT09IHdpZHRoICYmIHRoaXMuc2l6ZS5oZWlnaHQgPT09IGhlaWdodCkgXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5zaXplLndpZHRoID0gd2lkdGg7XG4gICAgdGhpcy5zaXplLmhlaWdodCA9IGhlaWdodDtcblxuICAgIHRoaXMuZnJhbWVCdWZmZXIucmVzaXplKHdpZHRoICogdGhpcy5yZXNvbHV0aW9uLCBoZWlnaHQgKiB0aGlzLnJlc29sdXRpb24pO1xuICAgIFxuICAgIHZhciBwcm9qZWN0aW9uRnJhbWUgPSB0aGlzLmZyYW1lIHx8IHRoaXMuc2l6ZTtcblxuICAgIHRoaXMuY2FsY3VsYXRlUHJvamVjdGlvbiggcHJvamVjdGlvbkZyYW1lICk7XG59O1xuXG4vKipcbiAqIERlc3Ryb3lzIHRoZSByZW5kZXIgdGFyZ2V0LlxuICpcbiAqL1xuUmVuZGVyVGFyZ2V0LnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKClcbntcbiAgICB2YXIgZ2wgPSB0aGlzLmdsO1xuICAgIFxuICAgIHRoaXMuZnJhbWVCdWZmZXIuZGVzdHJveSgpO1xuXG4gICAgdGhpcy5mcmFtZUJ1ZmZlciA9IG51bGw7XG4gICAgdGhpcy50ZXh0dXJlID0gbnVsbDtcbn07XG4iLCIvKipcbiAqIEdlbmVyaWMgTWFzayBTdGFjayBkYXRhIHN0cnVjdHVyZVxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICovXG5mdW5jdGlvbiBTdGVuY2lsTWFza1N0YWNrKClcbntcblx0LyoqXG4gICAgICogVGhlIGFjdHVhbCBzdGFja1xuICAgICAqXG4gICAgICogQG1lbWJlciB7YW55W119XG4gICAgICovXG4gICAgdGhpcy5zdGVuY2lsU3RhY2sgPSBbXTtcblxuICAgIC8qKlxuICAgICAqIFRPRE8gQGFsdmluXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqL1xuICAgIHRoaXMucmV2ZXJzZSA9IHRydWU7XG5cbiAgICAvKipcbiAgICAgKiBJbnRlcm5hbCBjb3VudFxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMuY291bnQgPSAwO1xufVxuXG5TdGVuY2lsTWFza1N0YWNrLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFN0ZW5jaWxNYXNrU3RhY2s7XG5tb2R1bGUuZXhwb3J0cyA9IFN0ZW5jaWxNYXNrU3RhY2s7XG4iLCJDT05TVCA9IHJlcXVpcmUoJy4uLy4uLy4uL2NvbnN0Jyk7XG5cbi8qKlxuICogTWFwcyBnbCBibGVuZCBjb21iaW5hdGlvbnMgdG8gV2ViR0xcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqL1xuZnVuY3Rpb24gbWFwV2ViR0xCbGVuZE1vZGVzVG9QaXhpKGdsLCBvYmplY3QpXG57XG4gICAgb2JqZWN0ID0gb2JqZWN0IHx8IHt9O1xuXG4gICAgLy9UT0RPIC0gcHJlbXVsdGlwbHkgYWxwaGEgd291bGQgYmUgZGlmZmVyZW50LlxuICAgIC8vYWRkIGEgYm9vbGVhbiBmb3IgdGhhdCFcbiAgICBvYmplY3RbQ09OU1QuQkxFTkRfTU9ERVMuTk9STUFMXSAgICAgICAgPSBbZ2wuT05FLCAgICAgICBnbC5PTkVfTUlOVVNfU1JDX0FMUEhBXTtcbiAgICBvYmplY3RbQ09OU1QuQkxFTkRfTU9ERVMuQUREXSAgICAgICAgICAgPSBbZ2wuU1JDX0FMUEhBLCBnbC5EU1RfQUxQSEFdO1xuICAgIG9iamVjdFtDT05TVC5CTEVORF9NT0RFUy5NVUxUSVBMWV0gICAgICA9IFtnbC5EU1RfQ09MT1IsIGdsLk9ORV9NSU5VU19TUkNfQUxQSEFdO1xuICAgIG9iamVjdFtDT05TVC5CTEVORF9NT0RFUy5TQ1JFRU5dICAgICAgICA9IFtnbC5TUkNfQUxQSEEsIGdsLk9ORV07XG4gICAgb2JqZWN0W0NPTlNULkJMRU5EX01PREVTLk9WRVJMQVldICAgICAgID0gW2dsLk9ORSwgICAgICAgZ2wuT05FX01JTlVTX1NSQ19BTFBIQV07XG4gICAgb2JqZWN0W0NPTlNULkJMRU5EX01PREVTLkRBUktFTl0gICAgICAgID0gW2dsLk9ORSwgICAgICAgZ2wuT05FX01JTlVTX1NSQ19BTFBIQV07XG4gICAgb2JqZWN0W0NPTlNULkJMRU5EX01PREVTLkxJR0hURU5dICAgICAgID0gW2dsLk9ORSwgICAgICAgZ2wuT05FX01JTlVTX1NSQ19BTFBIQV07XG4gICAgb2JqZWN0W0NPTlNULkJMRU5EX01PREVTLkNPTE9SX0RPREdFXSAgID0gW2dsLk9ORSwgICAgICAgZ2wuT05FX01JTlVTX1NSQ19BTFBIQV07XG4gICAgb2JqZWN0W0NPTlNULkJMRU5EX01PREVTLkNPTE9SX0JVUk5dICAgID0gW2dsLk9ORSwgICAgICAgZ2wuT05FX01JTlVTX1NSQ19BTFBIQV07XG4gICAgb2JqZWN0W0NPTlNULkJMRU5EX01PREVTLkhBUkRfTElHSFRdICAgID0gW2dsLk9ORSwgICAgICAgZ2wuT05FX01JTlVTX1NSQ19BTFBIQV07XG4gICAgb2JqZWN0W0NPTlNULkJMRU5EX01PREVTLlNPRlRfTElHSFRdICAgID0gW2dsLk9ORSwgICAgICAgZ2wuT05FX01JTlVTX1NSQ19BTFBIQV07XG4gICAgb2JqZWN0W0NPTlNULkJMRU5EX01PREVTLkRJRkZFUkVOQ0VdICAgID0gW2dsLk9ORSwgICAgICAgZ2wuT05FX01JTlVTX1NSQ19BTFBIQV07XG4gICAgb2JqZWN0W0NPTlNULkJMRU5EX01PREVTLkVYQ0xVU0lPTl0gICAgID0gW2dsLk9ORSwgICAgICAgZ2wuT05FX01JTlVTX1NSQ19BTFBIQV07XG4gICAgb2JqZWN0W0NPTlNULkJMRU5EX01PREVTLkhVRV0gICAgICAgICAgID0gW2dsLk9ORSwgICAgICAgZ2wuT05FX01JTlVTX1NSQ19BTFBIQV07XG4gICAgb2JqZWN0W0NPTlNULkJMRU5EX01PREVTLlNBVFVSQVRJT05dICAgID0gW2dsLk9ORSwgICAgICAgZ2wuT05FX01JTlVTX1NSQ19BTFBIQV07XG4gICAgb2JqZWN0W0NPTlNULkJMRU5EX01PREVTLkNPTE9SXSAgICAgICAgID0gW2dsLk9ORSwgICAgICAgZ2wuT05FX01JTlVTX1NSQ19BTFBIQV07XG4gICAgb2JqZWN0W0NPTlNULkJMRU5EX01PREVTLkxVTUlOT1NJVFldICAgID0gW2dsLk9ORSwgICAgICAgZ2wuT05FX01JTlVTX1NSQ19BTFBIQV07XG5cbiAgICByZXR1cm4gb2JqZWN0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IG1hcFdlYkdMQmxlbmRNb2Rlc1RvUGl4aTtcbiIsIkNPTlNUID0gcmVxdWlyZSgnLi4vLi4vLi4vY29uc3QnKTtcblxuLyoqXG4gKiBHZW5lcmljIE1hc2sgU3RhY2sgZGF0YSBzdHJ1Y3R1cmVcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqL1xuZnVuY3Rpb24gbWFwV2ViR0xEcmF3TW9kZXNUb1BpeGkoZ2wsIG9iamVjdClcbntcblx0b2JqZWN0PSBvYmplY3QgfHwge307XG5cbiAgICBvYmplY3RbQ09OU1QuRFJBV19NT0RFUy5QT0lOVFNdICAgICAgICAgPSBnbC5QT0lOVFM7XG4gICAgb2JqZWN0W0NPTlNULkRSQVdfTU9ERVMuTElORVNdICAgICAgICAgID0gZ2wuTElORVM7XG4gICAgb2JqZWN0W0NPTlNULkRSQVdfTU9ERVMuTElORV9MT09QXSAgICAgID0gZ2wuTElORV9MT09QO1xuICAgIG9iamVjdFtDT05TVC5EUkFXX01PREVTLkxJTkVfU1RSSVBdICAgICA9IGdsLkxJTkVfU1RSSVA7XG4gICAgb2JqZWN0W0NPTlNULkRSQVdfTU9ERVMuVFJJQU5HTEVTXSAgICAgID0gZ2wuVFJJQU5HTEVTO1xuICAgIG9iamVjdFtDT05TVC5EUkFXX01PREVTLlRSSUFOR0xFX1NUUklQXSA9IGdsLlRSSUFOR0xFX1NUUklQO1xuICAgIG9iamVjdFtDT05TVC5EUkFXX01PREVTLlRSSUFOR0xFX0ZBTl0gICA9IGdsLlRSSUFOR0xFX0ZBTjtcblxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IG1hcFdlYkdMRHJhd01vZGVzVG9QaXhpO1xuIiwidmFyIG1hdGggPSByZXF1aXJlKCcuLi9tYXRoJyksXG4gICAgVGV4dHVyZSA9IHJlcXVpcmUoJy4uL3RleHR1cmVzL1RleHR1cmUnKSxcbiAgICBDb250YWluZXIgPSByZXF1aXJlKCcuLi9kaXNwbGF5L0NvbnRhaW5lcicpLFxuICAgIENhbnZhc1RpbnRlciA9IHJlcXVpcmUoJy4uL3JlbmRlcmVycy9jYW52YXMvdXRpbHMvQ2FudmFzVGludGVyJyksXG4gICAgdXRpbHMgPSByZXF1aXJlKCcuLi91dGlscycpLFxuICAgIENPTlNUID0gcmVxdWlyZSgnLi4vY29uc3QnKSxcbiAgICB0ZW1wUG9pbnQgPSBuZXcgbWF0aC5Qb2ludCgpO1xuXG4vKipcbiAqIFRoZSBTcHJpdGUgb2JqZWN0IGlzIHRoZSBiYXNlIGZvciBhbGwgdGV4dHVyZWQgb2JqZWN0cyB0aGF0IGFyZSByZW5kZXJlZCB0byB0aGUgc2NyZWVuXG4gKlxuICogQSBzcHJpdGUgY2FuIGJlIGNyZWF0ZWQgZGlyZWN0bHkgZnJvbSBhbiBpbWFnZSBsaWtlIHRoaXM6XG4gKlxuICogYGBganNcbiAqIHZhciBzcHJpdGUgPSBuZXcgUElYSS5TcHJpdGUuZnJvbUltYWdlKCdhc3NldHMvaW1hZ2UucG5nJyk7XG4gKiBgYGBcbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQ29udGFpbmVyXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIHRleHR1cmUge1BJWEkuVGV4dHVyZX0gVGhlIHRleHR1cmUgZm9yIHRoaXMgc3ByaXRlXG4gKi9cbmZ1bmN0aW9uIFNwcml0ZSh0ZXh0dXJlKVxue1xuICAgIENvbnRhaW5lci5jYWxsKHRoaXMpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGFuY2hvciBzZXRzIHRoZSBvcmlnaW4gcG9pbnQgb2YgdGhlIHRleHR1cmUuXG4gICAgICogVGhlIGRlZmF1bHQgaXMgMCwwIHRoaXMgbWVhbnMgdGhlIHRleHR1cmUncyBvcmlnaW4gaXMgdGhlIHRvcCBsZWZ0XG4gICAgICogU2V0dGluZyB0aGUgYW5jaG9yIHRvIDAuNSwwLjUgbWVhbnMgdGhlIHRleHR1cmUncyBvcmlnaW4gaXMgY2VudGVyZWRcbiAgICAgKiBTZXR0aW5nIHRoZSBhbmNob3IgdG8gMSwxIHdvdWxkIG1lYW4gdGhlIHRleHR1cmUncyBvcmlnaW4gcG9pbnQgd2lsbCBiZSB0aGUgYm90dG9tIHJpZ2h0IGNvcm5lclxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5Qb2ludH1cbiAgICAgKi9cbiAgICB0aGlzLmFuY2hvciA9IG5ldyBtYXRoLlBvaW50KCk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgdGV4dHVyZSB0aGF0IHRoZSBzcHJpdGUgaXMgdXNpbmdcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuVGV4dHVyZX1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX3RleHR1cmUgPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHdpZHRoIG9mIHRoZSBzcHJpdGUgKHRoaXMgaXMgaW5pdGlhbGx5IHNldCBieSB0aGUgdGV4dHVyZSlcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX3dpZHRoID0gMDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBoZWlnaHQgb2YgdGhlIHNwcml0ZSAodGhpcyBpcyBpbml0aWFsbHkgc2V0IGJ5IHRoZSB0ZXh0dXJlKVxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5faGVpZ2h0ID0gMDtcblxuICAgIC8qKlxuICAgICAqIFRoZSB0aW50IGFwcGxpZWQgdG8gdGhlIHNwcml0ZS4gVGhpcyBpcyBhIGhleCB2YWx1ZS4gQSB2YWx1ZSBvZiAweEZGRkZGRiB3aWxsIHJlbW92ZSBhbnkgdGludCBlZmZlY3QuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMHhGRkZGRkZcbiAgICAgKi9cbiAgICB0aGlzLnRpbnQgPSAweEZGRkZGRjtcblxuICAgIC8qKlxuICAgICAqIFRoZSBibGVuZCBtb2RlIHRvIGJlIGFwcGxpZWQgdG8gdGhlIHNwcml0ZS4gQXBwbHkgYSB2YWx1ZSBvZiBgUElYSS5CTEVORF9NT0RFUy5OT1JNQUxgIHRvIHJlc2V0IHRoZSBibGVuZCBtb2RlLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IFBJWEkuQkxFTkRfTU9ERVMuTk9STUFMXG4gICAgICogQHNlZSBQSVhJLkJMRU5EX01PREVTXG4gICAgICovXG4gICAgdGhpcy5ibGVuZE1vZGUgPSBDT05TVC5CTEVORF9NT0RFUy5OT1JNQUw7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgc2hhZGVyIHRoYXQgd2lsbCBiZSB1c2VkIHRvIHJlbmRlciB0aGUgc3ByaXRlLiBTZXQgdG8gbnVsbCB0byByZW1vdmUgYSBjdXJyZW50IHNoYWRlci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuQWJzdHJhY3RGaWx0ZXJ8UElYSS5TaGFkZXJ9XG4gICAgICovXG4gICAgdGhpcy5zaGFkZXIgPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogQW4gaW50ZXJuYWwgY2FjaGVkIHZhbHVlIG9mIHRoZSB0aW50LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDB4RkZGRkZGXG4gICAgICovXG4gICAgdGhpcy5jYWNoZWRUaW50ID0gMHhGRkZGRkY7XG5cbiAgICAvLyBjYWxsIHRleHR1cmUgc2V0dGVyXG4gICAgdGhpcy50ZXh0dXJlID0gdGV4dHVyZSB8fCBUZXh0dXJlLkVNUFRZO1xuICAgIHRoaXMudGV4dHVyZURpcnR5ID0gdHJ1ZVxuICAgIHRoaXMudmVydGV4RGlydHkgPSB0cnVlO1xuICAgIHRoaXMudmVydGV4RGF0YSA9IG5ldyBGbG9hdDMyQXJyYXkoOCk7XG59XG5cbi8vIGNvbnN0cnVjdG9yXG5TcHJpdGUucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShDb250YWluZXIucHJvdG90eXBlKTtcblNwcml0ZS5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBTcHJpdGU7XG5tb2R1bGUuZXhwb3J0cyA9IFNwcml0ZTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoU3ByaXRlLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFRoZSB3aWR0aCBvZiB0aGUgc3ByaXRlLCBzZXR0aW5nIHRoaXMgd2lsbCBhY3R1YWxseSBtb2RpZnkgdGhlIHNjYWxlIHRvIGFjaGlldmUgdGhlIHZhbHVlIHNldFxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLlNwcml0ZSNcbiAgICAgKi9cbiAgICB3aWR0aDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiBNYXRoLmFicyh0aGlzLnNjYWxlLngpICogdGhpcy50ZXh0dXJlLl9mcmFtZS53aWR0aDtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHZhciBzaWduID0gdXRpbHMuc2lnbih0aGlzLnNjYWxlLngpIHx8IDE7XG4gICAgICAgICAgICB0aGlzLnNjYWxlLnggPSBzaWduICogdmFsdWUgLyB0aGlzLnRleHR1cmUuX2ZyYW1lLndpZHRoO1xuICAgICAgICAgICAgdGhpcy5fd2lkdGggPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBUaGUgaGVpZ2h0IG9mIHRoZSBzcHJpdGUsIHNldHRpbmcgdGhpcyB3aWxsIGFjdHVhbGx5IG1vZGlmeSB0aGUgc2NhbGUgdG8gYWNoaWV2ZSB0aGUgdmFsdWUgc2V0XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuU3ByaXRlI1xuICAgICAqL1xuICAgIGhlaWdodDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiAgTWF0aC5hYnModGhpcy5zY2FsZS55KSAqIHRoaXMudGV4dHVyZS5fZnJhbWUuaGVpZ2h0O1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdmFyIHNpZ24gPSB1dGlscy5zaWduKHRoaXMuc2NhbGUueSkgfHwgMTtcbiAgICAgICAgICAgIHRoaXMuc2NhbGUueSA9IHNpZ24gKiB2YWx1ZSAvIHRoaXMudGV4dHVyZS5fZnJhbWUuaGVpZ2h0O1xuICAgICAgICAgICAgdGhpcy5faGVpZ2h0ID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVGhlIHRleHR1cmUgdGhhdCB0aGUgc3ByaXRlIGlzIHVzaW5nXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlRleHR1cmV9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuU3ByaXRlI1xuICAgICAqL1xuICAgIHRleHR1cmU6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gIHRoaXMuX3RleHR1cmU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICBpZiAodGhpcy5fdGV4dHVyZSA9PT0gdmFsdWUpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLl90ZXh0dXJlID0gdmFsdWU7XG4gICAgICAgICAgICB0aGlzLmNhY2hlZFRpbnQgPSAweEZGRkZGRjtcblxuICAgICAgICAgICAgdGhpcy50ZXh0dXJlRGlydHkgPSB0cnVlO1xuXG4gICAgICAgICAgICBpZiAodmFsdWUpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgLy8gd2FpdCBmb3IgdGhlIHRleHR1cmUgdG8gbG9hZFxuICAgICAgICAgICAgICAgIGlmICh2YWx1ZS5iYXNlVGV4dHVyZS5oYXNMb2FkZWQpXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9vblRleHR1cmVVcGRhdGUoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgdmFsdWUub25jZSgndXBkYXRlJywgdGhpcy5fb25UZXh0dXJlVXBkYXRlLCB0aGlzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG59KTtcblxuLyoqXG4gKiBXaGVuIHRoZSB0ZXh0dXJlIGlzIHVwZGF0ZWQsIHRoaXMgZXZlbnQgd2lsbCBmaXJlIHRvIHVwZGF0ZSB0aGUgc2NhbGUgYW5kIGZyYW1lXG4gKlxuICogQHByaXZhdGVcbiAqL1xuU3ByaXRlLnByb3RvdHlwZS5fb25UZXh0dXJlVXBkYXRlID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLnRleHR1cmVEaXJ0eSA9IHRydWU7XG5cbiAgICAvLyBzbyBpZiBfd2lkdGggaXMgMCB0aGVuIHdpZHRoIHdhcyBub3Qgc2V0Li5cbiAgICBpZiAodGhpcy5fd2lkdGgpXG4gICAge1xuICAgICAgICB0aGlzLnNjYWxlLnggPSB1dGlscy5zaWduKHRoaXMuc2NhbGUueCkgKiB0aGlzLl93aWR0aCAvIHRoaXMudGV4dHVyZS5mcmFtZS53aWR0aDtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5faGVpZ2h0KVxuICAgIHtcbiAgICAgICAgdGhpcy5zY2FsZS55ID0gdXRpbHMuc2lnbih0aGlzLnNjYWxlLnkpICogdGhpcy5faGVpZ2h0IC8gdGhpcy50ZXh0dXJlLmZyYW1lLmhlaWdodDtcbiAgICB9XG59O1xuXG5TcHJpdGUucHJvdG90eXBlLmNhY2x1bGF0ZVZlcnRpY2VzID0gZnVuY3Rpb24gKClcbntcblxuICAgIHZhciB0ZXh0dXJlID0gdGhpcy5fdGV4dHVyZSxcbiAgICAgICAgd3QgPSB0aGlzLndvcmxkVHJhbnNmb3JtLFxuICAgICAgICBhID0gd3QuYSwgYiA9IHd0LmIsIGMgPSB3dC5jLCBkID0gd3QuZCwgdHggPSB3dC50eCwgdHkgPSB3dC50eSxcbiAgICAgICAgdmVydGV4RGF0YSA9IHRoaXMudmVydGV4RGF0YSxcbiAgICAgICAgdzAsIHcxLCBoMCwgaDEsXG4gICAgICAgIHRyaW0gPSB0ZXh0dXJlLnRyaW07XG4gICAgXG4gICAgaWYgKHRyaW0pXG4gICAge1xuICAgICAgICAvLyBpZiB0aGUgc3ByaXRlIGlzIHRyaW1tZWQgYW5kIGlzIG5vdCBhIHRpbGluZ3Nwcml0ZSB0aGVuIHdlIG5lZWQgdG8gYWRkIHRoZSBleHRyYSBzcGFjZSBiZWZvcmUgdHJhbnNmb3JtaW5nIHRoZSBzcHJpdGUgY29vcmRzLi5cbiAgICAgICAgdzEgPSB0cmltLnggLSB0aGlzLmFuY2hvci54ICogdHJpbS53aWR0aDtcbiAgICAgICAgdzAgPSB3MSArIHRleHR1cmUuY3JvcC53aWR0aDtcblxuICAgICAgICBoMSA9IHRyaW0ueSAtIHRoaXMuYW5jaG9yLnkgKiB0cmltLmhlaWdodDtcbiAgICAgICAgaDAgPSBoMSArIHRleHR1cmUuY3JvcC5oZWlnaHQ7XG5cbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgdzAgPSAodGV4dHVyZS5fZnJhbWUud2lkdGggKSAqICgxLXRoaXMuYW5jaG9yLngpO1xuICAgICAgICB3MSA9ICh0ZXh0dXJlLl9mcmFtZS53aWR0aCApICogLXRoaXMuYW5jaG9yLng7XG5cbiAgICAgICAgaDAgPSB0ZXh0dXJlLl9mcmFtZS5oZWlnaHQgKiAoMS10aGlzLmFuY2hvci55KTtcbiAgICAgICAgaDEgPSB0ZXh0dXJlLl9mcmFtZS5oZWlnaHQgKiAtdGhpcy5hbmNob3IueTtcbiAgICB9XG5cbiAgICAvLyB4eVxuICAgIHZlcnRleERhdGFbMF0gPSBhICogdzEgKyBjICogaDEgKyB0eDtcbiAgICB2ZXJ0ZXhEYXRhWzFdID0gZCAqIGgxICsgYiAqIHcxICsgdHk7XG5cbiAgICAvLyB4eVxuICAgIHZlcnRleERhdGFbMl0gPSBhICogdzAgKyBjICogaDEgKyB0eDtcbiAgICB2ZXJ0ZXhEYXRhWzNdID0gZCAqIGgxICsgYiAqIHcwICsgdHk7XG5cbiAgICAgLy8geHlcbiAgICB2ZXJ0ZXhEYXRhWzRdID0gYSAqIHcwICsgYyAqIGgwICsgdHg7XG4gICAgdmVydGV4RGF0YVs1XSA9IGQgKiBoMCArIGIgKiB3MCArIHR5O1xuXG4gICAgLy8geHlcbiAgICB2ZXJ0ZXhEYXRhWzZdID0gYSAqIHcxICsgYyAqIGgwICsgdHg7XG4gICAgdmVydGV4RGF0YVs3XSA9IGQgKiBoMCArIGIgKiB3MSArIHR5O1xuXG5cbn1cblxuLyoqXG4qXG4qIFJlbmRlcnMgdGhlIG9iamVjdCB1c2luZyB0aGUgV2ViR0wgcmVuZGVyZXJcbipcbiogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLldlYkdMUmVuZGVyZXJ9XG4qIEBwcml2YXRlXG4qL1xuU3ByaXRlLnByb3RvdHlwZS5fcmVuZGVyV2ViR0wgPSBmdW5jdGlvbiAocmVuZGVyZXIpXG57XG4gICAgaWYodGhpcy50ZXh0dXJlRGlydHkpXG4gICAge1xuICAgICAgICB0aGlzLnRleHR1cmVEaXJ0eSA9IGZhbHNlO1xuXG4gICAgICAgIHRoaXMuX29uVGV4dHVyZVVwZGF0ZSgpO1xuICAgICAgICBcbiAgICAgICAgdGhpcy52ZXJ0ZXhEaXJ0eSA9IHRydWU7XG4gICAgfVxuXG4gICAgaWYodGhpcy52ZXJ0ZXhEaXJ0eSlcbiAgICB7XG4gICAgICAgIHRoaXMudmVydGV4RGlydHkgPSBmYWxzZTtcblxuICAgICAgICAvLyBzZXQgdGhlIHZlcnRleCBkYXRhXG4gICAgICAgIHRoaXMuY2FjbHVsYXRlVmVydGljZXMoKTtcblxuICAgIH1cbiAgICBcbiAgICByZW5kZXJlci5zZXRPYmplY3RSZW5kZXJlcihyZW5kZXJlci5wbHVnaW5zLnNwcml0ZSk7XG4gICAgcmVuZGVyZXIucGx1Z2lucy5zcHJpdGUucmVuZGVyKHRoaXMpO1xufTtcblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBib3VuZHMgb2YgdGhlIFNwcml0ZSBhcyBhIHJlY3RhbmdsZS4gVGhlIGJvdW5kcyBjYWxjdWxhdGlvbiB0YWtlcyB0aGUgd29ybGRUcmFuc2Zvcm0gaW50byBhY2NvdW50LlxuICpcbiAqIEBwYXJhbSBtYXRyaXgge1BJWEkuTWF0cml4fSB0aGUgdHJhbnNmb3JtYXRpb24gbWF0cml4IG9mIHRoZSBzcHJpdGVcbiAqIEByZXR1cm4ge1BJWEkuUmVjdGFuZ2xlfSB0aGUgZnJhbWluZyByZWN0YW5nbGVcbiAqL1xuU3ByaXRlLnByb3RvdHlwZS5nZXRCb3VuZHMgPSBmdW5jdGlvbiAobWF0cml4KVxue1xuICAgIGlmKCF0aGlzLl9jdXJyZW50Qm91bmRzKVxuICAgIHtcbiAgICAgICAgaWYodGhpcy52ZXJ0ZXhEaXJ0eSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy52ZXJ0ZXhEaXJ0eSA9IGZhbHNlO1xuXG4gICAgICAgICAgICAvLyBzZXQgdGhlIHZlcnRleCBkYXRhXG4gICAgICAgICAgICB0aGlzLmNhY2x1bGF0ZVZlcnRpY2VzKCk7XG5cbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBtaW5YLFxuICAgICAgICAgICAgbWF4WCxcbiAgICAgICAgICAgIG1pblksXG4gICAgICAgICAgICBtYXhZLFxuICAgICAgICAgICAgdmVydGV4RGF0YSA9IHRoaXMudmVydGV4RGF0YTtcblxuICAgICAgICB2YXIgeDEgPSB2ZXJ0ZXhEYXRhWzBdXG4gICAgICAgIHZhciB5MSA9IHZlcnRleERhdGFbMV1cblxuICAgICAgICB2YXIgeDIgPSB2ZXJ0ZXhEYXRhWzJdXG4gICAgICAgIHZhciB5MiA9IHZlcnRleERhdGFbM11cblxuICAgICAgICB2YXIgeDMgPSB2ZXJ0ZXhEYXRhWzRdXG4gICAgICAgIHZhciB5MyA9IHZlcnRleERhdGFbNV1cblxuICAgICAgICB2YXIgeDQgPSB2ZXJ0ZXhEYXRhWzZdXG4gICAgICAgIHZhciB5NCA9IHZlcnRleERhdGFbN11cblxuICAgICAgICBtaW5YID0geDE7XG4gICAgICAgIG1pblggPSB4MiA8IG1pblggPyB4MiA6IG1pblg7XG4gICAgICAgIG1pblggPSB4MyA8IG1pblggPyB4MyA6IG1pblg7XG4gICAgICAgIG1pblggPSB4NCA8IG1pblggPyB4NCA6IG1pblg7XG5cbiAgICAgICAgbWluWSA9IHkxO1xuICAgICAgICBtaW5ZID0geTIgPCBtaW5ZID8geTIgOiBtaW5ZO1xuICAgICAgICBtaW5ZID0geTMgPCBtaW5ZID8geTMgOiBtaW5ZO1xuICAgICAgICBtaW5ZID0geTQgPCBtaW5ZID8geTQgOiBtaW5ZO1xuXG4gICAgICAgIG1heFggPSB4MTtcbiAgICAgICAgbWF4WCA9IHgyID4gbWF4WCA/IHgyIDogbWF4WDtcbiAgICAgICAgbWF4WCA9IHgzID4gbWF4WCA/IHgzIDogbWF4WDtcbiAgICAgICAgbWF4WCA9IHg0ID4gbWF4WCA/IHg0IDogbWF4WDtcblxuICAgICAgICBtYXhZID0geTE7XG4gICAgICAgIG1heFkgPSB5MiA+IG1heFkgPyB5MiA6IG1heFk7XG4gICAgICAgIG1heFkgPSB5MyA+IG1heFkgPyB5MyA6IG1heFk7XG4gICAgICAgIG1heFkgPSB5NCA+IG1heFkgPyB5NCA6IG1heFk7XG5cbiAgICAgICAgLy8gY2hlY2sgZm9yIGNoaWxkcmVuXG4gICAgICAgIGlmKHRoaXMuY2hpbGRyZW4ubGVuZ3RoKVxuICAgICAgICB7XG4gICAgICAgICAgICB2YXIgY2hpbGRCb3VuZHMgPSB0aGlzLmNvbnRhaW5lckdldEJvdW5kcygpO1xuXG4gICAgICAgICAgICB3MCA9IGNoaWxkQm91bmRzLng7XG4gICAgICAgICAgICB3MSA9IGNoaWxkQm91bmRzLnggKyBjaGlsZEJvdW5kcy53aWR0aDtcbiAgICAgICAgICAgIGgwID0gY2hpbGRCb3VuZHMueTtcbiAgICAgICAgICAgIGgxID0gY2hpbGRCb3VuZHMueSArIGNoaWxkQm91bmRzLmhlaWdodDtcblxuICAgICAgICAgICAgbWluWCA9IChtaW5YIDwgdzApID8gbWluWCA6IHcwO1xuICAgICAgICAgICAgbWluWSA9IChtaW5ZIDwgaDApID8gbWluWSA6IGgwO1xuXG4gICAgICAgICAgICBtYXhYID0gKG1heFggPiB3MSkgPyBtYXhYIDogdzE7XG4gICAgICAgICAgICBtYXhZID0gKG1heFkgPiBoMSkgPyBtYXhZIDogaDE7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgYm91bmRzID0gdGhpcy5fYm91bmRzO1xuXG4gICAgICAgIGJvdW5kcy54ID0gbWluWDtcbiAgICAgICAgYm91bmRzLndpZHRoID0gbWF4WCAtIG1pblg7XG5cbiAgICAgICAgYm91bmRzLnkgPSBtaW5ZO1xuICAgICAgICBib3VuZHMuaGVpZ2h0ID0gbWF4WSAtIG1pblk7XG5cbiAgICAgICAgLy8gc3RvcmUgYSByZWZlcmVuY2Ugc28gdGhhdCBpZiB0aGlzIGZ1bmN0aW9uIGdldHMgY2FsbGVkIGFnYWluIGluIHRoZSByZW5kZXIgY3ljbGUgd2UgZG8gbm90IGhhdmUgdG8gcmVjYWxjdWxhdGVcbiAgICAgICAgdGhpcy5fY3VycmVudEJvdW5kcyA9IGJvdW5kcztcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5fY3VycmVudEJvdW5kcztcbn07XG5cbi8qKlxuICogR2V0cyB0aGUgbG9jYWwgYm91bmRzIG9mIHRoZSBzcHJpdGUgb2JqZWN0LlxuICpcbiAqL1xuU3ByaXRlLnByb3RvdHlwZS5nZXRMb2NhbEJvdW5kcyA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy5fYm91bmRzLnggPSAtdGhpcy5fdGV4dHVyZS5fZnJhbWUud2lkdGggKiB0aGlzLmFuY2hvci54O1xuICAgIHRoaXMuX2JvdW5kcy55ID0gLXRoaXMuX3RleHR1cmUuX2ZyYW1lLmhlaWdodCAqIHRoaXMuYW5jaG9yLnk7XG4gICAgdGhpcy5fYm91bmRzLndpZHRoID0gdGhpcy5fdGV4dHVyZS5fZnJhbWUud2lkdGg7XG4gICAgdGhpcy5fYm91bmRzLmhlaWdodCA9IHRoaXMuX3RleHR1cmUuX2ZyYW1lLmhlaWdodDtcbiAgICByZXR1cm4gdGhpcy5fYm91bmRzO1xufTtcblxuLyoqXG4qIFRlc3RzIGlmIGEgcG9pbnQgaXMgaW5zaWRlIHRoaXMgc3ByaXRlXG4qXG4qIEBwYXJhbSBwb2ludCB7UElYSS5Qb2ludH0gdGhlIHBvaW50IHRvIHRlc3RcbiogQHJldHVybiB7Ym9vbGVhbn0gdGhlIHJlc3VsdCBvZiB0aGUgdGVzdFxuKi9cblNwcml0ZS5wcm90b3R5cGUuY29udGFpbnNQb2ludCA9IGZ1bmN0aW9uKCBwb2ludCApXG57XG4gICAgdGhpcy53b3JsZFRyYW5zZm9ybS5hcHBseUludmVyc2UocG9pbnQsICB0ZW1wUG9pbnQpO1xuXG4gICAgdmFyIHdpZHRoID0gdGhpcy5fdGV4dHVyZS5fZnJhbWUud2lkdGg7XG4gICAgdmFyIGhlaWdodCA9IHRoaXMuX3RleHR1cmUuX2ZyYW1lLmhlaWdodDtcbiAgICB2YXIgeDEgPSAtd2lkdGggKiB0aGlzLmFuY2hvci54O1xuICAgIHZhciB5MTtcblxuICAgIGlmICggdGVtcFBvaW50LnggPiB4MSAmJiB0ZW1wUG9pbnQueCA8IHgxICsgd2lkdGggKVxuICAgIHtcbiAgICAgICAgeTEgPSAtaGVpZ2h0ICogdGhpcy5hbmNob3IueTtcblxuICAgICAgICBpZiAoIHRlbXBQb2ludC55ID4geTEgJiYgdGVtcFBvaW50LnkgPCB5MSArIGhlaWdodCApXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xufTtcblxuLyoqXG4qIFJlbmRlcnMgdGhlIG9iamVjdCB1c2luZyB0aGUgQ2FudmFzIHJlbmRlcmVyXG4qXG4qIEBwYXJhbSByZW5kZXJlciB7UElYSS5DYW52YXNSZW5kZXJlcn0gVGhlIHJlbmRlcmVyXG4qIEBwcml2YXRlXG4qL1xuU3ByaXRlLnByb3RvdHlwZS5fcmVuZGVyQ2FudmFzID0gZnVuY3Rpb24gKHJlbmRlcmVyKVxue1xuICAgIGlmICh0aGlzLnRleHR1cmUuY3JvcC53aWR0aCA8PSAwIHx8IHRoaXMudGV4dHVyZS5jcm9wLmhlaWdodCA8PSAwKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHZhciBjb21wb3NpdGVPcGVyYXRpb24gPSByZW5kZXJlci5ibGVuZE1vZGVzW3RoaXMuYmxlbmRNb2RlXTtcbiAgICBpZiAoY29tcG9zaXRlT3BlcmF0aW9uICE9PSByZW5kZXJlci5jb250ZXh0Lmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbilcbiAgICB7XG4gICAgICAgIHJlbmRlcmVyLmNvbnRleHQuZ2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uID0gY29tcG9zaXRlT3BlcmF0aW9uO1xuICAgIH1cblxuICAgIC8vICBJZ25vcmUgbnVsbCBzb3VyY2VzXG4gICAgaWYgKHRoaXMudGV4dHVyZS52YWxpZClcbiAgICB7XG4gICAgICAgIHZhciB0ZXh0dXJlID0gdGhpcy5fdGV4dHVyZSxcbiAgICAgICAgICAgIHd0ID0gdGhpcy53b3JsZFRyYW5zZm9ybSxcbiAgICAgICAgICAgIGR4LFxuICAgICAgICAgICAgZHksXG4gICAgICAgICAgICB3aWR0aCxcbiAgICAgICAgICAgIGhlaWdodDtcblxuICAgICAgICByZW5kZXJlci5jb250ZXh0Lmdsb2JhbEFscGhhID0gdGhpcy53b3JsZEFscGhhO1xuXG4gICAgICAgIC8vIElmIHNtb290aGluZ0VuYWJsZWQgaXMgc3VwcG9ydGVkIGFuZCB3ZSBuZWVkIHRvIGNoYW5nZSB0aGUgc21vb3RoaW5nIHByb3BlcnR5IGZvciB0aGlzIHRleHR1cmVcbiAgICAgICAgdmFyIHNtb290aGluZ0VuYWJsZWQgPSB0ZXh0dXJlLmJhc2VUZXh0dXJlLnNjYWxlTW9kZSA9PT0gQ09OU1QuU0NBTEVfTU9ERVMuTElORUFSO1xuICAgICAgICBpZiAocmVuZGVyZXIuc21vb3RoUHJvcGVydHkgJiYgcmVuZGVyZXIuY29udGV4dFtyZW5kZXJlci5zbW9vdGhQcm9wZXJ0eV0gIT09IHNtb290aGluZ0VuYWJsZWQpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJlbmRlcmVyLmNvbnRleHRbcmVuZGVyZXIuc21vb3RoUHJvcGVydHldID0gc21vb3RoaW5nRW5hYmxlZDtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIElmIHRoZSB0ZXh0dXJlIGlzIHRyaW1tZWQgd2Ugb2Zmc2V0IGJ5IHRoZSB0cmltIHgveSwgb3RoZXJ3aXNlIHdlIHVzZSB0aGUgZnJhbWUgZGltZW5zaW9uc1xuXG4gICAgICAgIGlmKHRleHR1cmUucm90YXRlKVxuICAgICAgICB7XG4gICAgICAgICAgICB3aWR0aCA9IHRleHR1cmUuY3JvcC5oZWlnaHQ7XG4gICAgICAgICAgICBoZWlnaHQgPSB0ZXh0dXJlLmNyb3Aud2lkdGg7XG5cbiAgICAgICAgICAgIGR4ID0gKHRleHR1cmUudHJpbSkgPyB0ZXh0dXJlLnRyaW0ueSAtIHRoaXMuYW5jaG9yLnkgKiB0ZXh0dXJlLnRyaW0uaGVpZ2h0IDogdGhpcy5hbmNob3IueSAqIC10ZXh0dXJlLl9mcmFtZS5oZWlnaHQ7XG4gICAgICAgICAgICBkeSA9ICh0ZXh0dXJlLnRyaW0pID8gdGV4dHVyZS50cmltLnggLSB0aGlzLmFuY2hvci54ICogdGV4dHVyZS50cmltLndpZHRoIDogdGhpcy5hbmNob3IueCAqIC10ZXh0dXJlLl9mcmFtZS53aWR0aDtcbiAgICAgICBcbiAgICAgICAgICAgIGR4ICs9IHdpZHRoO1xuXG4gICAgICAgICAgICB3dC50eCA9IGR5ICogd3QuYSArIGR4ICogd3QuYyArIHd0LnR4O1xuICAgICAgICAgICAgd3QudHkgPSBkeSAqIHd0LmIgKyBkeCAqIHd0LmQgKyB3dC50eTtcblxuICAgICAgICAgICAgdmFyIHRlbXAgPSB3dC5hO1xuICAgICAgICAgICAgd3QuYSAgPSAtd3QuYztcbiAgICAgICAgICAgIHd0LmMgID0gIHRlbXA7XG5cbiAgICAgICAgICAgIHRlbXAgPSB3dC5iO1xuICAgICAgICAgICAgd3QuYiAgPSAtd3QuZDtcbiAgICAgICAgICAgIHd0LmQgID0gIHRlbXA7XG5cbiAgICAgICAgICAgIC8vIHRoZSBhbmNob3IgaGFzIGFscmVhZHkgYmVlbiBhcHBsaWVkIGFib3ZlLCBzbyBsZXRzIHNldCBpdCB0byB6ZXJvXG4gICAgICAgICAgICBkeCA9IDA7XG4gICAgICAgICAgICBkeSA9IDA7XG5cbiAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgIHtcbiAgICAgICAgICAgIHdpZHRoID0gdGV4dHVyZS5jcm9wLndpZHRoO1xuICAgICAgICAgICAgaGVpZ2h0ID0gdGV4dHVyZS5jcm9wLmhlaWdodDtcblxuICAgICAgICAgICAgZHggPSAodGV4dHVyZS50cmltKSA/IHRleHR1cmUudHJpbS54IC0gdGhpcy5hbmNob3IueCAqIHRleHR1cmUudHJpbS53aWR0aCA6IHRoaXMuYW5jaG9yLnggKiAtdGV4dHVyZS5fZnJhbWUud2lkdGg7XG4gICAgICAgICAgICBkeSA9ICh0ZXh0dXJlLnRyaW0pID8gdGV4dHVyZS50cmltLnkgLSB0aGlzLmFuY2hvci55ICogdGV4dHVyZS50cmltLmhlaWdodCA6IHRoaXMuYW5jaG9yLnkgKiAtdGV4dHVyZS5fZnJhbWUuaGVpZ2h0O1xuICAgICAgICB9XG5cblxuXG4gICAgICAgIC8vIEFsbG93IGZvciBwaXhlbCByb3VuZGluZ1xuICAgICAgICBpZiAocmVuZGVyZXIucm91bmRQaXhlbHMpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJlbmRlcmVyLmNvbnRleHQuc2V0VHJhbnNmb3JtKFxuICAgICAgICAgICAgICAgIHd0LmEsXG4gICAgICAgICAgICAgICAgd3QuYixcbiAgICAgICAgICAgICAgICB3dC5jLFxuICAgICAgICAgICAgICAgIHd0LmQsXG4gICAgICAgICAgICAgICAgKHd0LnR4ICogcmVuZGVyZXIucmVzb2x1dGlvbikgfCAwLFxuICAgICAgICAgICAgICAgICh3dC50eSAqIHJlbmRlcmVyLnJlc29sdXRpb24pIHwgMFxuICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgZHggPSBkeCB8IDA7XG4gICAgICAgICAgICBkeSA9IGR5IHwgMDtcbiAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgIHtcblxuICAgICAgICAgICAgcmVuZGVyZXIuY29udGV4dC5zZXRUcmFuc2Zvcm0oXG4gICAgICAgICAgICAgICAgd3QuYSxcbiAgICAgICAgICAgICAgICB3dC5iLFxuICAgICAgICAgICAgICAgIHd0LmMsXG4gICAgICAgICAgICAgICAgd3QuZCxcbiAgICAgICAgICAgICAgICB3dC50eCAqIHJlbmRlcmVyLnJlc29sdXRpb24sXG4gICAgICAgICAgICAgICAgd3QudHkgKiByZW5kZXJlci5yZXNvbHV0aW9uXG4gICAgICAgICAgICApO1xuXG5cbiAgICAgICAgfVxuXG4gICAgICAgIHZhciByZXNvbHV0aW9uID0gdGV4dHVyZS5iYXNlVGV4dHVyZS5yZXNvbHV0aW9uO1xuXG4gICAgICAgIGlmICh0aGlzLnRpbnQgIT09IDB4RkZGRkZGKVxuICAgICAgICB7XG4gICAgICAgICAgICBpZiAodGhpcy5jYWNoZWRUaW50ICE9PSB0aGlzLnRpbnQpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdGhpcy5jYWNoZWRUaW50ID0gdGhpcy50aW50O1xuXG4gICAgICAgICAgICAgICAgLy8gVE9ETyBjbGVhbiB1cCBjYWNoaW5nIC0gaG93IHRvIGNsZWFuIHVwIHRoZSBjYWNoZXM/XG4gICAgICAgICAgICAgICAgdGhpcy50aW50ZWRUZXh0dXJlID0gQ2FudmFzVGludGVyLmdldFRpbnRlZFRleHR1cmUodGhpcywgdGhpcy50aW50KTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmVuZGVyZXIuY29udGV4dC5kcmF3SW1hZ2UoXG4gICAgICAgICAgICAgICAgdGhpcy50aW50ZWRUZXh0dXJlLFxuICAgICAgICAgICAgICAgIDAsXG4gICAgICAgICAgICAgICAgMCxcbiAgICAgICAgICAgICAgICB3aWR0aCAqIHJlc29sdXRpb24sXG4gICAgICAgICAgICAgICAgaGVpZ2h0ICogcmVzb2x1dGlvbixcbiAgICAgICAgICAgICAgICBkeCAqIHJlbmRlcmVyLnJlc29sdXRpb24sXG4gICAgICAgICAgICAgICAgZHkgKiByZW5kZXJlci5yZXNvbHV0aW9uLFxuICAgICAgICAgICAgICAgIHdpZHRoICogcmVuZGVyZXIucmVzb2x1dGlvbixcbiAgICAgICAgICAgICAgICBoZWlnaHQgKiByZW5kZXJlci5yZXNvbHV0aW9uXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIGVsc2VcbiAgICAgICAge1xuICAgICAgICAgICAgcmVuZGVyZXIuY29udGV4dC5kcmF3SW1hZ2UoXG4gICAgICAgICAgICAgICAgdGV4dHVyZS5iYXNlVGV4dHVyZS5zb3VyY2UsXG4gICAgICAgICAgICAgICAgdGV4dHVyZS5jcm9wLnggKiByZXNvbHV0aW9uLFxuICAgICAgICAgICAgICAgIHRleHR1cmUuY3JvcC55ICogcmVzb2x1dGlvbixcbiAgICAgICAgICAgICAgICB3aWR0aCAqIHJlc29sdXRpb24sXG4gICAgICAgICAgICAgICAgaGVpZ2h0ICogcmVzb2x1dGlvbixcbiAgICAgICAgICAgICAgICBkeCAgKiByZW5kZXJlci5yZXNvbHV0aW9uLFxuICAgICAgICAgICAgICAgIGR5ICAqIHJlbmRlcmVyLnJlc29sdXRpb24sXG4gICAgICAgICAgICAgICAgd2lkdGggKiByZW5kZXJlci5yZXNvbHV0aW9uLFxuICAgICAgICAgICAgICAgIGhlaWdodCAqIHJlbmRlcmVyLnJlc29sdXRpb25cbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICB9XG59O1xuXG4vKipcbiAqIERlc3Ryb3lzIHRoaXMgc3ByaXRlIGFuZCBvcHRpb25hbGx5IGl0cyB0ZXh0dXJlXG4gKlxuICogQHBhcmFtIFtkZXN0cm95VGV4dHVyZT1mYWxzZV0ge2Jvb2xlYW59IFNob3VsZCBpdCBkZXN0cm95IHRoZSBjdXJyZW50IHRleHR1cmUgb2YgdGhlIHNwcml0ZSBhcyB3ZWxsXG4gKiBAcGFyYW0gW2Rlc3Ryb3lCYXNlVGV4dHVyZT1mYWxzZV0ge2Jvb2xlYW59IFNob3VsZCBpdCBkZXN0cm95IHRoZSBiYXNlIHRleHR1cmUgb2YgdGhlIHNwcml0ZSBhcyB3ZWxsXG4gKi9cblNwcml0ZS5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uIChkZXN0cm95VGV4dHVyZSwgZGVzdHJveUJhc2VUZXh0dXJlKVxue1xuICAgIENvbnRhaW5lci5wcm90b3R5cGUuZGVzdHJveS5jYWxsKHRoaXMpO1xuXG4gICAgdGhpcy5hbmNob3IgPSBudWxsO1xuXG4gICAgaWYgKGRlc3Ryb3lUZXh0dXJlKVxuICAgIHtcbiAgICAgICAgdGhpcy5fdGV4dHVyZS5kZXN0cm95KGRlc3Ryb3lCYXNlVGV4dHVyZSk7XG4gICAgfVxuXG4gICAgdGhpcy5fdGV4dHVyZSA9IG51bGw7XG4gICAgdGhpcy5zaGFkZXIgPSBudWxsO1xufTtcblxuLy8gc29tZSBoZWxwZXIgZnVuY3Rpb25zLi5cblxuLyoqXG4gKiBIZWxwZXIgZnVuY3Rpb24gdGhhdCBjcmVhdGVzIGEgc3ByaXRlIHRoYXQgd2lsbCBjb250YWluIGEgdGV4dHVyZSBmcm9tIHRoZSBUZXh0dXJlQ2FjaGUgYmFzZWQgb24gdGhlIGZyYW1lSWRcbiAqIFRoZSBmcmFtZSBpZHMgYXJlIGNyZWF0ZWQgd2hlbiBhIFRleHR1cmUgcGFja2VyIGZpbGUgaGFzIGJlZW4gbG9hZGVkXG4gKlxuICogQHN0YXRpY1xuICogQHBhcmFtIGZyYW1lSWQge3N0cmluZ30gVGhlIGZyYW1lIElkIG9mIHRoZSB0ZXh0dXJlIGluIHRoZSBjYWNoZVxuICogQHBhcmFtIFtjcm9zc29yaWdpbj0oYXV0byldIHtib29sZWFufSBpZiB5b3Ugd2FudCB0byBzcGVjaWZ5IHRoZSBjcm9zcy1vcmlnaW4gcGFyYW1ldGVyXG4gKiBAcGFyYW0gW3NjYWxlTW9kZT1QSVhJLlNDQUxFX01PREVTLkRFRkFVTFRdIHtudW1iZXJ9IGlmIHlvdSB3YW50IHRvIHNwZWNpZnkgdGhlIHNjYWxlIG1vZGUsIHNlZSB7QGxpbmsgUElYSS5TQ0FMRV9NT0RFU30gZm9yIHBvc3NpYmxlIHZhbHVlc1xuICogQHJldHVybiB7UElYSS5TcHJpdGV9IEEgbmV3IFNwcml0ZSB1c2luZyBhIHRleHR1cmUgZnJvbSB0aGUgdGV4dHVyZSBjYWNoZSBtYXRjaGluZyB0aGUgZnJhbWVJZFxuICovXG5TcHJpdGUuZnJvbUZyYW1lID0gZnVuY3Rpb24gKGZyYW1lSWQpXG57XG4gICAgdmFyIHRleHR1cmUgPSB1dGlscy5UZXh0dXJlQ2FjaGVbZnJhbWVJZF07XG5cbiAgICBpZiAoIXRleHR1cmUpXG4gICAge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RoZSBmcmFtZUlkIFwiJyArIGZyYW1lSWQgKyAnXCIgZG9lcyBub3QgZXhpc3QgaW4gdGhlIHRleHR1cmUgY2FjaGUnKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IFNwcml0ZSh0ZXh0dXJlKTtcbn07XG5cbi8qKlxuICogSGVscGVyIGZ1bmN0aW9uIHRoYXQgY3JlYXRlcyBhIHNwcml0ZSB0aGF0IHdpbGwgY29udGFpbiBhIHRleHR1cmUgYmFzZWQgb24gYW4gaW1hZ2UgdXJsXG4gKiBJZiB0aGUgaW1hZ2UgaXMgbm90IGluIHRoZSB0ZXh0dXJlIGNhY2hlIGl0IHdpbGwgYmUgbG9hZGVkXG4gKlxuICogQHN0YXRpY1xuICogQHBhcmFtIGltYWdlSWQge3N0cmluZ30gVGhlIGltYWdlIHVybCBvZiB0aGUgdGV4dHVyZVxuICogQHJldHVybiB7UElYSS5TcHJpdGV9IEEgbmV3IFNwcml0ZSB1c2luZyBhIHRleHR1cmUgZnJvbSB0aGUgdGV4dHVyZSBjYWNoZSBtYXRjaGluZyB0aGUgaW1hZ2UgaWRcbiAqL1xuU3ByaXRlLmZyb21JbWFnZSA9IGZ1bmN0aW9uIChpbWFnZUlkLCBjcm9zc29yaWdpbiwgc2NhbGVNb2RlKVxue1xuICAgIHJldHVybiBuZXcgU3ByaXRlKFRleHR1cmUuZnJvbUltYWdlKGltYWdlSWQsIGNyb3Nzb3JpZ2luLCBzY2FsZU1vZGUpKTtcbn07XG4iLCJ2YXIgT2JqZWN0UmVuZGVyZXIgPSByZXF1aXJlKCcuLi8uLi9yZW5kZXJlcnMvd2ViZ2wvdXRpbHMvT2JqZWN0UmVuZGVyZXInKSxcbiAgICBXZWJHTFJlbmRlcmVyID0gcmVxdWlyZSgnLi4vLi4vcmVuZGVyZXJzL3dlYmdsL1dlYkdMUmVuZGVyZXInKSxcbiAgICBUZXh0dXJlU2hhZGVyID0gcmVxdWlyZSgnLi4vLi4vcmVuZGVyZXJzL3dlYmdsL3NoYWRlcnMvX1RleHR1cmVTaGFkZXInKSxcbiAgICBjcmVhdGVJbmRpY2VzRm9yUXVhZHMgPSByZXF1aXJlKCcuLi8uLi91dGlscy9jcmVhdGVJbmRpY2VzRm9yUXVhZHMnKSxcbiAgICBnZW5lcmF0ZU11bHRpVGV4dHVyZVNoYWRlciA9IHJlcXVpcmUoJy4vZ2VuZXJhdGVNdWx0aVRleHR1cmVTaGFkZXInKSxcbiAgICBDT05TVCA9IHJlcXVpcmUoJy4uLy4uL2NvbnN0JyksXG4gICAgZ2xDb3JlID0gcmVxdWlyZSgncGl4aS1nbC1jb3JlJyk7XG5cbi8qKlxuICogQGF1dGhvciBNYXQgR3JvdmVzXG4gKlxuICogQmlnIHRoYW5rcyB0byB0aGUgdmVyeSBjbGV2ZXIgTWF0dCBEZXNMYXVyaWVycyA8bWF0dGRlc2w+IGh0dHBzOi8vZ2l0aHViLmNvbS9tYXR0ZGVzbC9cbiAqIGZvciBjcmVhdGluZyB0aGUgb3JpZ2luYWwgcGl4aSB2ZXJzaW9uIVxuICogQWxzbyBhIHRoYW5rcyB0byBodHRwczovL2dpdGh1Yi5jb20vYmNoZXZhbGllciBmb3IgdHdlYWtpbmcgdGhlIHRpbnQgYW5kIGFscGhhIHNvIHRoYXQgdGhleSBub3cgc2hhcmUgNCBieXRlcyBvbiB0aGUgdmVydGV4IGJ1ZmZlclxuICpcbiAqIEhlYXZpbHkgaW5zcGlyZWQgYnkgTGliR0RYJ3MgU3ByaXRlUmVuZGVyZXI6XG4gKiBodHRwczovL2dpdGh1Yi5jb20vbGliZ2R4L2xpYmdkeC9ibG9iL21hc3Rlci9nZHgvc3JjL2NvbS9iYWRsb2dpYy9nZHgvZ3JhcGhpY3MvZzJkL1Nwcml0ZVJlbmRlcmVyLmphdmFcbiAqL1xuXG4vKipcbiAqIFJlbmRlcmVyIGRlZGljYXRlZCB0byBkcmF3aW5nIGFuZCBiYXRjaGluZyBzcHJpdGVzLlxuICpcbiAqIEBjbGFzc1xuICogQHByaXZhdGVcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAZXh0ZW5kcyBQSVhJLk9iamVjdFJlbmRlcmVyXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcn0gVGhlIHJlbmRlcmVyIHRoaXMgc3ByaXRlIGJhdGNoIHdvcmtzIGZvci5cbiAqL1xuZnVuY3Rpb24gU3ByaXRlUmVuZGVyZXIocmVuZGVyZXIpXG57XG4gICAgT2JqZWN0UmVuZGVyZXIuY2FsbCh0aGlzLCByZW5kZXJlcik7XG5cbiAgICAvKipcbiAgICAgKiBOdW1iZXIgb2YgdmFsdWVzIHNlbnQgaW4gdGhlIHZlcnRleCBidWZmZXIuXG4gICAgICogcG9zaXRpb25YLCBwb3NpdGlvblksIGNvbG9yUiwgY29sb3JHLCBjb2xvckIgPSA1XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy52ZXJ0U2l6ZSA9IDU7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgc2l6ZSBvZiB0aGUgdmVydGV4IGluZm9ybWF0aW9uIGluIGJ5dGVzLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMudmVydEJ5dGVTaXplID0gdGhpcy52ZXJ0U2l6ZSAqIDQ7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgbnVtYmVyIG9mIGltYWdlcyBpbiB0aGUgU3ByaXRlQmF0Y2ggYmVmb3JlIGl0IGZsdXNoZXMuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy5zaXplID0gQ09OU1QuU1BSSVRFX0JBVENIX1NJWkU7IC8vIDIwMDAgaXMgYSBuaWNlIGJhbGFuY2UgYmV0d2VlbiBtb2JpbGUgLyBkZXNrdG9wXG5cbiAgICAvLyB0aGUgdG90YWwgbnVtYmVyIG9mIGJ5dGVzIGluIG91ciBiYXRjaFxuICAgIHZhciBudW1WZXJ0cyA9ICh0aGlzLnNpemUgKiA0KSAqIHRoaXMudmVydEJ5dGVTaXplO1xuXG4gICAgLy8gdGhlIHRvdGFsIG51bWJlciBvZiBpbmRpY2VzIGluIG91ciBiYXRjaCwgdGhlcmUgYXJlIDYgcG9pbnRzIHBlciBxdWFkLlxuICAgIHZhciBudW1JbmRpY2VzID0gdGhpcy5zaXplICogNjtcblxuICAgIC8qKlxuICAgICAqIEhvbGRzIHRoZSB2ZXJ0ZXggZGF0YSB0aGF0IHdpbGwgYmUgc2VudCB0byB0aGUgdmVydGV4IHNoYWRlci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge0FycmF5QnVmZmVyfVxuICAgICAqL1xuICAgIHRoaXMudmVydGljZXMgPSBuZXcgQXJyYXlCdWZmZXIobnVtVmVydHMpO1xuXG4gICAgLyoqXG4gICAgICogVmlldyBvbiB0aGUgdmVydGljZXMgYXMgYSBGbG9hdDMyQXJyYXkgZm9yIHBvc2l0aW9uc1xuICAgICAqXG4gICAgICogQG1lbWJlciB7RmxvYXQzMkFycmF5fVxuICAgICAqL1xuICAgIHRoaXMucG9zaXRpb25zID0gbmV3IEZsb2F0MzJBcnJheSh0aGlzLnZlcnRpY2VzKTtcbiAgICBcbiAgICAvKipcbiAgICAgKiBWaWV3IG9uIHRoZSB2ZXJ0aWNlcyBhcyBhIFVpbnQzMkFycmF5IGZvciB1dnNcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge0Zsb2F0MzJBcnJheX1cbiAgICAgKi9cbiAgICB0aGlzLnV2cyA9IG5ldyBVaW50MzJBcnJheSh0aGlzLnZlcnRpY2VzKTtcblxuICAgIC8qKlxuICAgICAqIFZpZXcgb24gdGhlIHZlcnRpY2VzIGFzIGEgVWludDMyQXJyYXkgZm9yIGNvbG9yc1xuICAgICAqXG4gICAgICogQG1lbWJlciB7VWludDMyQXJyYXl9XG4gICAgICovXG4gICAgdGhpcy5jb2xvcnMgPSBuZXcgVWludDMyQXJyYXkodGhpcy52ZXJ0aWNlcyk7XG5cbiAgICAvKipcbiAgICAgKiBIb2xkcyB0aGUgaW5kaWNlcyBvZiB0aGUgZ2VvbWV0cnkgKHF1YWRzKSB0byBkcmF3XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtVaW50MTZBcnJheX1cbiAgICAgKi9cbiAgICB0aGlzLmluZGljZXMgPSBjcmVhdGVJbmRpY2VzRm9yUXVhZHModGhpcy5zaXplKVxuXG4gICAgLyoqXG4gICAgICogVGhlIGRlZmF1bHQgc2hhZGVyIHRoYXQgaXMgdXNlZCBpZiBhIHNwcml0ZSBkb2Vzbid0IGhhdmUgYSBtb3JlIHNwZWNpZmljIG9uZS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuU2hhZGVyfVxuICAgICAqL1xuICAgIHRoaXMuc2hhZGVyID0gbnVsbDtcblxuICAgIHRoaXMudGV4dHVyZUNvdW50ID0gMDtcbiAgICB0aGlzLmN1cnJlbnRJbmRleCA9IDA7XG4gIFxuICAgIHRoaXMuZ3JvdXBDb3VudCA9IDA7XG4gICAgdGhpcy5ncm91cHMgPSBbXTtcbiAgICBcbiAgICAvL1RPRE8gLSAzMDAgaXMgYSBiaXQgbWFnaWMsIGZpZ3VyZSBvdXQgYSBuaWNlciBhbW91bnQhXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLnNpemU7IGkrKykgXG4gICAge1xuICAgICAgICB0aGlzLmdyb3Vwc1tpXSA9IHt0ZXh0dXJlczpbXSwgdGV4dHVyZUNvdW50OjAsIGlkczpbXSwgc2l6ZTowLCBzdGFydDowLCBibGVuZDowfTsgXG4gICAgfTtcbiAgICBcbiAgICB0aGlzLmN1cnJlbnRHcm91cCA9IHRoaXMuZ3JvdXBzW3RoaXMuZ3JvdXBDb3VudCsrXTtcblxuICAgIHRoaXMuY3VycmVudFRleHR1cmUgPSBudWxsOyAgICBcbn1cblxuXG5TcHJpdGVSZW5kZXJlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKE9iamVjdFJlbmRlcmVyLnByb3RvdHlwZSk7XG5TcHJpdGVSZW5kZXJlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBTcHJpdGVSZW5kZXJlcjtcbm1vZHVsZS5leHBvcnRzID0gU3ByaXRlUmVuZGVyZXI7XG5cbldlYkdMUmVuZGVyZXIucmVnaXN0ZXJQbHVnaW4oJ3Nwcml0ZScsIFNwcml0ZVJlbmRlcmVyKTtcblxuLyoqXG4gKiBTZXRzIHVwIHRoZSByZW5kZXJlciBjb250ZXh0IGFuZCBuZWNlc3NhcnkgYnVmZmVycy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIGdsIHtXZWJHTFJlbmRlcmluZ0NvbnRleHR9IHRoZSBjdXJyZW50IFdlYkdMIGRyYXdpbmcgY29udGV4dFxuICovXG5TcHJpdGVSZW5kZXJlci5wcm90b3R5cGUub25Db250ZXh0Q2hhbmdlID0gZnVuY3Rpb24gKClcbntcbiAgICB2YXIgZ2wgPSB0aGlzLnJlbmRlcmVyLmdsO1xuXG4gICAgdGhpcy5NQVhfVEVYVFVFUyA9IGdsLmdldFBhcmFtZXRlcihnbC5NQVhfVEVYVFVSRV9JTUFHRV9VTklUUyk7XG5cbiAgICB0aGlzLl9zaGFkZXIgPSBnZW5lcmF0ZU11bHRpVGV4dHVyZVNoYWRlcihnbCwgdGhpcy5NQVhfVEVYVFVFUykvL25ldyBUZXh0dXJlU2hhZGVyKGdsKTtcblxuICAgIC8vIHNldHVwIGRlZmF1bHQgc2hhZGVyXG4gICAgdGhpcy5zaGFkZXIgPSB0aGlzLnJlbmRlcmVyLnNoYWRlck1hbmFnZXIuZGVmYXVsdFNoYWRlcjtcblxuICAgIC8vIGNyZWF0ZSBhIGNvdXBsZSBvZiBidWZmZXJzXG4gICAgdGhpcy52ZXJ0ZXhCdWZmZXIgPSBnbENvcmUuR0xCdWZmZXIuY3JlYXRlVmVydGV4QnVmZmVyKGdsLCBudWxsLCBnbC5EWU5BTUlDX0RSQVcpO1xuICAgIHRoaXMuaW5kZXhCdWZmZXIgPSBnbENvcmUuR0xCdWZmZXIuY3JlYXRlSW5kZXhCdWZmZXIoZ2wsIHRoaXMuaW5kaWNlcywgZ2wuU1RBVElDX0RSQVcpO1xuXG4gICAgLy8gYnVpbGQgdGhlIHZhbyBvYmplY3QgdGhhdCB3aWxsIHJlbmRlci4uXG4gICAgdGhpcy52YW8gPSBuZXcgZ2xDb3JlLlZlcnRleEFycmF5T2JqZWN0KGdsKTtcblxuICAgIHRoaXMudmFvLmFkZEluZGV4KHRoaXMuaW5kZXhCdWZmZXIpO1xuICAgIHRoaXMudmFvLmFkZEF0dHJpYnV0ZSh0aGlzLnZlcnRleEJ1ZmZlciwgdGhpcy5fc2hhZGVyLmF0dHJpYnV0ZXMuYVZlcnRleFBvc2l0aW9uLCBnbC5GTE9BVCwgZmFsc2UsIHRoaXMudmVydEJ5dGVTaXplLCAwKTtcbiAgICB0aGlzLnZhby5hZGRBdHRyaWJ1dGUodGhpcy52ZXJ0ZXhCdWZmZXIsIHRoaXMuX3NoYWRlci5hdHRyaWJ1dGVzLmFUZXh0dXJlQ29vcmQsIGdsLlVOU0lHTkVEX1NIT1JULCB0cnVlLCB0aGlzLnZlcnRCeXRlU2l6ZSwgMiAqIDQpO1xuICAgIHRoaXMudmFvLmFkZEF0dHJpYnV0ZSh0aGlzLnZlcnRleEJ1ZmZlciwgdGhpcy5fc2hhZGVyLmF0dHJpYnV0ZXMuYUNvbG9yLCBnbC5VTlNJR05FRF9CWVRFLCB0cnVlLCB0aGlzLnZlcnRCeXRlU2l6ZSwgMyAqIDQpO1xuICAgIHRoaXMudmFvLmFkZEF0dHJpYnV0ZSh0aGlzLnZlcnRleEJ1ZmZlciwgdGhpcy5fc2hhZGVyLmF0dHJpYnV0ZXMuYVRleHR1cmVJZCwgZ2wuRkxPQVQsIGZhbHNlLCB0aGlzLnZlcnRCeXRlU2l6ZSwgNCAqIDQpO1xuXG4gICAgdGhpcy5jdXJyZW50QmxlbmRNb2RlID0gOTk5OTk7XG59O1xuXG4vKipcbiAqIFJlbmRlcnMgdGhlIHNwcml0ZSBvYmplY3QuXG4gKlxuICogQHBhcmFtIHNwcml0ZSB7UElYSS5TcHJpdGV9IHRoZSBzcHJpdGUgdG8gcmVuZGVyIHdoZW4gdXNpbmcgdGhpcyBzcHJpdGViYXRjaFxuICovXG5TcHJpdGVSZW5kZXJlci5wcm90b3R5cGUucmVuZGVyID0gZnVuY3Rpb24gKHNwcml0ZSlcbntcbiAgICAvL1RPRE8gc2V0IGJsZW5kIG1vZGVzLi5cbiAgICAvLyBjaGVjayB0ZXh0dXJlLi5cbiAgICBpZiAodGhpcy5jdXJyZW50SW5kZXggPj0gdGhpcy5zaXplKVxuICAgIHtcbiAgICAgICAgdGhpcy5mbHVzaCgpO1xuICAgIH1cblxuICBcbiAgICAvLyBnZXQgdGhlIHV2cyBmb3IgdGhlIHRleHR1cmVcbiAgIFxuXG4gICAgLy8gaWYgdGhlIHV2cyBoYXZlIG5vdCB1cGRhdGVkIHRoZW4gbm8gcG9pbnQgcmVuZGVyaW5nIGp1c3QgeWV0IVxuICAgIGlmICghc3ByaXRlLnRleHR1cmUuX3V2cylcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAgLy8gcHVzaCBhIHRleHR1cmUuXG4gICAgLy8gaW5jcmVtZW50IHRoZSBiYXRjaHNpemVcbiAgICB2YXIgbmV4dFRleHR1cmUgPSAgc3ByaXRlLnRleHR1cmUuYmFzZVRleHR1cmU7XG4gICAgdmFyIGN1cnJlbnRHcm91cCA9IHRoaXMuY3VycmVudEdyb3VwO1xuICAgIHZhciBpO1xuXG4gICAgaWYodGhpcy5jdXJyZW50VGV4dHVyZSAhPT0gbmV4dFRleHR1cmUpXG4gICAge1xuICAgICAgICB0aGlzLmN1cnJlbnRUZXh0dXJlID0gbmV4dFRleHR1cmU7XG4gICAgICAgIFxuICAgICAgICBpZighbmV4dFRleHR1cmUuX2VuYWJsZWQpXG4gICAgICAgIHtcbiAgICAgICAgICAgIG5leHRUZXh0dXJlLl9lbmFibGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIG5leHRUZXh0dXJlLl9pZCA9IHRoaXMudGV4dHVyZUNvdW50O1xuICAgICAgICAgICAgXG4gICAgICAgICAgICBpZih0aGlzLnRleHR1cmVDb3VudCA9PT0gdGhpcy5NQVhfVEVYVFVFUylcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBmb3IgKCBpID0gMDsgaSA8IGN1cnJlbnRHcm91cC50ZXh0dXJlQ291bnQ7IGkrKykgXG4gICAgICAgICAgICAgICAgeyAgICAgXG4gICAgICAgICAgICAgICAgICAgIGN1cnJlbnRHcm91cC50ZXh0dXJlc1tpXS5fZW5hYmxlZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICB0aGlzLnRleHR1cmVDb3VudCA9IDA7XG5cbiAgICAgICAgICAgICAgICBjdXJyZW50R3JvdXAuc2l6ZSA9IHRoaXMuY3VycmVudEluZGV4IC0gY3VycmVudEdyb3VwLnN0YXJ0O1xuICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgY3VycmVudEdyb3VwID0gdGhpcy5jdXJyZW50R3JvdXAgPSB0aGlzLmdyb3Vwc1t0aGlzLmdyb3VwQ291bnQrK107XG4gICAgICAgICAgICAgICAgY3VycmVudEdyb3VwLnRleHR1cmVDb3VudCA9IDA7XG4gICAgICAgICAgICAgICAgY3VycmVudEdyb3VwLnN0YXJ0ID0gdGhpcy5jdXJyZW50SW5kZXg7XG4gICAgICAgICAgICAgICAgXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGN1cnJlbnRHcm91cC50ZXh0dXJlc1tjdXJyZW50R3JvdXAudGV4dHVyZUNvdW50KytdID0gbmV4dFRleHR1cmU7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnRleHR1cmVDb3VudCsrO1xuICAgIH1cblxuICAgIC8vIFRPRE8gdHJpbT8/XG4gICAgdmFyIGluZGV4ID0gdGhpcy5jdXJyZW50SW5kZXggKiB0aGlzLnZlcnRCeXRlU2l6ZTtcblxuICAgIHRoaXMuY3VycmVudEluZGV4Kys7XG5cbiAgICAvLyB1cGxvYWQgdGhlIHNwcml0ZSBlbGVtZXRucy4uLlxuICAgIC8vIHRoZXkgaGF2ZSBhbGwgcmVhZHkgYmVlbiBjYWxjdWxhdGVkIHNvIHdlIGp1c3QgbmVlZCB0byBwdXNoIHRoZW0gaW50byB0aGUgYnVmZmVyLlxuICAgIHZhciBjb2xvcnMgPSB0aGlzLmNvbG9ycztcbiAgICB2YXIgcG9zaXRpb25zID0gdGhpcy5wb3NpdGlvbnM7XG4gICAgdmFyIHZlcnRleERhdGEgPSBzcHJpdGUudmVydGV4RGF0YVxuICAgIHZhciB0aW50ID0gKHNwcml0ZS50aW50ID4+IDE2KSArIChzcHJpdGUudGludCAmIDB4ZmYwMCkgKyAoKHNwcml0ZS50aW50ICYgMHhmZikgPDwgMTYpICsgKHNwcml0ZS53b3JsZEFscGhhICogMjU1IDw8IDI0KTtcbiAgICB2YXIgdXZzID0gc3ByaXRlLnRleHR1cmUuX3V2cy51dnNfdWludDMyO1xuICAgIC8veHlcbiAgICBwb3NpdGlvbnNbaW5kZXgrK10gPSB2ZXJ0ZXhEYXRhWzBdO1xuICAgIHBvc2l0aW9uc1tpbmRleCsrXSA9IHZlcnRleERhdGFbMV07XG4gICAgdGhpcy51dnNbaW5kZXgrK10gPSB1dnNbMF07XG4gICAgY29sb3JzW2luZGV4KytdID0gdGludDtcbiAgICBwb3NpdGlvbnNbaW5kZXgrK10gPSBuZXh0VGV4dHVyZS5faWQ7IFxuICAgIFxuICAgIC8vIHh5XG4gICAgcG9zaXRpb25zW2luZGV4KytdID0gdmVydGV4RGF0YVsyXTtcbiAgICBwb3NpdGlvbnNbaW5kZXgrK10gPSB2ZXJ0ZXhEYXRhWzNdO1xuICAgIHRoaXMudXZzW2luZGV4KytdID0gdXZzWzFdO1xuICAgIGNvbG9yc1tpbmRleCsrXSA9IHRpbnQ7XG4gICAgcG9zaXRpb25zW2luZGV4KytdID0gbmV4dFRleHR1cmUuX2lkO1xuXG4gICAgIC8vIHh5XG4gICAgcG9zaXRpb25zW2luZGV4KytdID0gdmVydGV4RGF0YVs0XTtcbiAgICBwb3NpdGlvbnNbaW5kZXgrK10gPSB2ZXJ0ZXhEYXRhWzVdO1xuICAgIHRoaXMudXZzW2luZGV4KytdID0gdXZzWzJdO1xuICAgIGNvbG9yc1tpbmRleCsrXSA9IHRpbnQ7XG4gICAgcG9zaXRpb25zW2luZGV4KytdID0gbmV4dFRleHR1cmUuX2lkO1xuXG4gICAgLy8geHlcbiAgICBwb3NpdGlvbnNbaW5kZXgrK10gPSB2ZXJ0ZXhEYXRhWzZdO1xuICAgIHBvc2l0aW9uc1tpbmRleCsrXSA9IHZlcnRleERhdGFbN107XG4gICAgdGhpcy51dnNbaW5kZXgrK10gPSB1dnNbM107XG4gICAgY29sb3JzW2luZGV4KytdID0gdGludDtcbiAgICBwb3NpdGlvbnNbaW5kZXgrK10gPSBuZXh0VGV4dHVyZS5faWQ7XG59O1xuXG4vKipcbiAqIFJlbmRlcnMgdGhlIGNvbnRlbnQgYW5kIGVtcHRpZXMgdGhlIGN1cnJlbnQgYmF0Y2guXG4gKlxuICovXG5TcHJpdGVSZW5kZXJlci5wcm90b3R5cGUuZmx1c2ggPSBmdW5jdGlvbiAoKVxue1xuICAgIGlmICh0aGlzLmN1cnJlbnRJbmRleCA9PT0gMClyZXR1cm47XG5cbiAgICB2YXIgZ2wgPSB0aGlzLnJlbmRlcmVyLmdsO1xuXG5cbiAgICB0aGlzLmN1cnJlbnRHcm91cC5zaXplID0gdGhpcy5jdXJyZW50SW5kZXggLSB0aGlzLmN1cnJlbnRHcm91cC5zdGFydDtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuY3VycmVudEdyb3VwLnRleHR1cmVDb3VudDsgaSsrKSBcbiAgICB7ICAgICBcbiAgICAgICAgdGhpcy5jdXJyZW50R3JvdXAudGV4dHVyZXNbaV0uX2VuYWJsZWQgPSBmYWxzZTtcbiAgICB9O1xuICAgXG4gICAgLy8gZG8gc29tZSBzbWFydCBhcnJheSBzdHVmZi4uXG4gICAgLy8gZG91YmxlIHNpemUgc28gd2UgZG9udCBhbHdheSBzdWJhcnJheSB0aGUgZWxlbWVudHMuLlxuICAgIC8vIHVwbG9hZCB0aGUgdmVydHMgdG8gdGhlIGJ1ZmZlclxuICAgIGlmICh0aGlzLmN1cnJlbnRCYXRjaFNpemUgPiAoIHRoaXMuc2l6ZSAqIDAuNSApIClcbiAgICB7XG4gICAgICAgIHRoaXMudmVydGV4QnVmZmVyLnVwbG9hZCh0aGlzLnZlcnRpY2VzLCAwLCB0cnVlKTtcbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgLy8gbyBrIC4uIHN1YiBhcnJheSBpcyBTTE9XPj9cbiAgICAgICAgdmFyIHZpZXcgPSB0aGlzLnBvc2l0aW9ucy5zdWJhcnJheSgwLCB0aGlzLmN1cnJlbnRJbmRleCAqIHRoaXMudmVydEJ5dGVTaXplKTtcbiAgICAgICAgdGhpcy52ZXJ0ZXhCdWZmZXIudXBsb2FkKHZpZXcsIDAsIHRydWUpO1xuICAgIH1cblxuICAgIC8vIGJpbmQgc2hhZGVyLi5cbiAgICB0aGlzLnJlbmRlcmVyLmJpbmRTaGFkZXIodGhpcy5fc2hhZGVyKTtcbiAgICB0aGlzLnJlbmRlcmVyLmJsZW5kTW9kZU1hbmFnZXIuc2V0QmxlbmRNb2RlKCAwICk7XG5cbiAgICAvLy8gcmVuZGVyIHRoZSBncm91cHMuLlxuICAgIGZvciAoaSA9IDA7IGkgPCB0aGlzLmdyb3VwQ291bnQ7IGkrKykge1xuICAgICAgICBcbiAgICAgICAgdmFyIGdyb3VwID0gdGhpcy5ncm91cHNbaV07XG5cbiAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBncm91cC50ZXh0dXJlQ291bnQ7IGorKykge1xuICAgICAgICAgICAgdGhpcy5yZW5kZXJlci5iaW5kVGV4dHVyZShncm91cC50ZXh0dXJlc1tqXSwgaik7XG4gICAgICAgIH07XG5cbiAgICAgICAgZ2wuZHJhd0VsZW1lbnRzKGdsLlRSSUFOR0xFUywgZ3JvdXAuc2l6ZSAqIDYsIGdsLlVOU0lHTkVEX1NIT1JULCBncm91cC5zdGFydCAqIDYgKiAyKTtcbiAgICB9O1xuXG4gICAgLy8gcmVzZXQgZWxlbWVudHMgZm9yIHRoZSBuZXh0IGZsdXNoXG4gICAgdGhpcy5jdXJyZW50VGV4dHVyZSA9IG51bGw7XG4gICAgdGhpcy5jdXJyZW50SW5kZXggPSAwO1xuICAgIHRoaXMudGV4dHVyZUNvdW50ID0gMDtcbiAgICB0aGlzLmdyb3VwQ291bnQgPSAwO1xuICAgIFxuICAgIHRoaXMuY3VycmVudEdyb3VwID0gdGhpcy5ncm91cHNbdGhpcy5ncm91cENvdW50KytdO1xuICAgIHRoaXMuY3VycmVudEdyb3VwLnRleHR1cmVDb3VudCA9IDA7XG59O1xuXG4vKipcbiAqIFN0YXJ0cyBhIG5ldyBzcHJpdGUgYmF0Y2guXG4gKlxuICovXG5TcHJpdGVSZW5kZXJlci5wcm90b3R5cGUuc3RhcnQgPSBmdW5jdGlvbiAoKVxue1xuICAgIHRoaXMudmFvLmJpbmQoKTtcbn07XG5cblNwcml0ZVJlbmRlcmVyLnByb3RvdHlwZS5zdG9wID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLmZsdXNoKCk7XG4gICAgdGhpcy52YW8udW5iaW5kKCk7XG59O1xuLyoqXG4gKiBEZXN0cm95cyB0aGUgU3ByaXRlQmF0Y2guXG4gKlxuICovXG5TcHJpdGVSZW5kZXJlci5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy52ZXJ0ZXhCdWZmZXIuZGVzdHJveSgpO1xuICAgIHRoaXMuaW5kZXhCdWZmZXIuZGVzdHJveSgpO1xuXG4gICAgT2JqZWN0UmVuZGVyZXIucHJvdG90eXBlLmRlc3Ryb3kuY2FsbCh0aGlzKTtcblxuICAgIHRoaXMuc2hhZGVyLmRlc3Ryb3koKTtcblxuICAgIHRoaXMucmVuZGVyZXIgPSBudWxsO1xuXG4gICAgdGhpcy52ZXJ0aWNlcyA9IG51bGw7XG4gICAgdGhpcy5wb3NpdGlvbnMgPSBudWxsO1xuICAgIHRoaXMuY29sb3JzID0gbnVsbDtcbiAgICB0aGlzLmluZGljZXMgPSBudWxsO1xuXG4gICAgdGhpcy52ZXJ0ZXhCdWZmZXIgPSBudWxsO1xuICAgIHRoaXMuaW5kZXhCdWZmZXIgPSBudWxsO1xuXG4gICAgdGhpcy5zcHJpdGVzID0gbnVsbDtcbiAgICB0aGlzLnNoYWRlciA9IG51bGw7XG59O1xuIiwidmFyIFNoYWRlciA9IHJlcXVpcmUoJ3BpeGktZ2wtY29yZScpLkdMU2hhZGVyO1xuXG5cbmZ1bmN0aW9uIGdlbmVyYXRlTXVsdGlUZXh0dXJlU2hhZGVyKGdsLCBtYXhUZXh0dXJlcylcbntcbiAgICB2YXIgdmVydGV4U3JjID0gXCJwcmVjaXNpb24gbG93cCBmbG9hdDtcXG5hdHRyaWJ1dGUgdmVjMiBhVmVydGV4UG9zaXRpb247XFxuYXR0cmlidXRlIHZlYzIgYVRleHR1cmVDb29yZDtcXG5hdHRyaWJ1dGUgdmVjNCBhQ29sb3I7XFxuYXR0cmlidXRlIGZsb2F0IGFUZXh0dXJlSWQ7XFxuXFxudW5pZm9ybSBtYXQzIHByb2plY3Rpb25NYXRyaXg7XFxuXFxudmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7XFxudmFyeWluZyB2ZWM0IHZDb2xvcjtcXG52YXJ5aW5nIGZsb2F0IHZUZXh0dXJlSWQ7XFxuXFxudm9pZCBtYWluKHZvaWQpe1xcbiAgIGdsX1Bvc2l0aW9uID0gdmVjNCgocHJvamVjdGlvbk1hdHJpeCAqIHZlYzMoYVZlcnRleFBvc2l0aW9uLCAxLjApKS54eSwgMC4wLCAxLjApO1xcbiAgIHZUZXh0dXJlQ29vcmQgPSBhVGV4dHVyZUNvb3JkO1xcbiAgIHZUZXh0dXJlSWQgPSBhVGV4dHVyZUlkO1xcbiAgIHZDb2xvciA9IHZlYzQoYUNvbG9yLnJnYiAqIGFDb2xvci5hLCBhQ29sb3IuYSk7XFxufVwiO1xuICAgIHZhciBmcmFnbWVudFNyYyA9ICdwcmVjaXNpb24gbG93cCBmbG9hdDtcXG5cXG4nICsgZ2VuZXJhdGVTYW1wbGVTcmMobWF4VGV4dHVyZXMpICsgXCJcXG5cXG5cIiArIGZyYWdUZW1wbGF0ZVxuXG4gICAgZnJhZ21lbnRTcmMgPSBmcmFnbWVudFNyYy5yZXBsYWNlKC9cXCVcXCUvZ2ksICcxNicpO1xuXG4gICAgdmFyIHNoYWRlciA9IG5ldyBTaGFkZXIoZ2wsIHZlcnRleFNyYywgZnJhZ21lbnRTcmMpO1xuXG5cbiAgICB2YXIgc2FtcGxlVmFsdWVzID0gW107XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBtYXhUZXh0dXJlczsgaSsrKSB7XG4gICAgICAgIHNhbXBsZVZhbHVlc1tpXSA9IGk7XG4gICAgfTtcblxuICAgIHNoYWRlci5iaW5kKCk7XG4gICAgc2hhZGVyLnVuaWZvcm1zLnVTYW1wbGVycyA9IHNhbXBsZVZhbHVlcztcblxuICAgIHJldHVybiBzaGFkZXI7XG59XG5cbmZ1bmN0aW9uIGdlbmVyYXRlU2FtcGxlU3JjKG1heFRleHR1cmVzKVxue1xuICAgIHZhciBzcmMgPSAndmVjNCBnZXRTYW1wbGVGcm9tQXJyYXkoc2FtcGxlcjJEIHRleHR1cmVzWyUlXSwgaW50IG5keCwgdmVjMiB1dikge1xcblxcbnZlYzQgY29sb3I7J1xuXG4gICAgc3JjICs9ICdcXG4nO1xuICAgIHNyYyArPSAnXFxuJztcbiAgICBcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG1heFRleHR1cmVzOyBpKyspIFxuICAgIHtcbiAgICAgICAgaWYoaSA+IDApc3JjICs9ICdcXG5lbHNlICc7XG4gICAgICAgIGlmKGkgPCBtYXhUZXh0dXJlcy0xKXNyYyArPSAnaWYobmR4ID09ICcgKyBpICsgJyknO1xuICAgICAgICBzcmMgKz0gJ1xcbnsnO1xuICAgICAgICBzcmMgKz0gJ1xcblxcdGNvbG9yID0gdGV4dHVyZTJEKHRleHR1cmVzWycraSsnXSwgdXYpOyc7XG4gICAgICAgIHNyYyArPSAnXFxufSc7XG4gICAgfTtcblxuICAgIHNyYyArPSAnXFxuJztcbiAgICBzcmMgKz0gJ1xcbic7XG4gICAgc3JjICs9ICdyZXR1cm4gY29sb3I7JztcbiAgICBzcmMgKz0gJ1xcbn0nO1xuXG4gICAgcmV0dXJuIHNyYztcbn1cblxudmFyIGZyYWdUZW1wbGF0ZSA9IFtcblxuICAgICd2YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDsnLFxuICAgICd2YXJ5aW5nIHZlYzQgdkNvbG9yOycsXG4gICAgJ3ZhcnlpbmcgZmxvYXQgdlRleHR1cmVJZDsnLFxuICAgICd1bmlmb3JtIHNhbXBsZXIyRCB1U2FtcGxlcnNbJSVdOycsXG5cbiAgICAndm9pZCBtYWluKHZvaWQpeycsXG4gICAgICAgICdnbF9GcmFnQ29sb3IgPSBnZXRTYW1wbGVGcm9tQXJyYXkodVNhbXBsZXJzLCBpbnQodlRleHR1cmVJZCksIHZUZXh0dXJlQ29vcmQpICogdkNvbG9yOycsXG4gICAgJ30nXG5dLmpvaW4oJ1xcbicpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGdlbmVyYXRlTXVsdGlUZXh0dXJlU2hhZGVyO1xuIiwidmFyIFNwcml0ZSA9IHJlcXVpcmUoJy4uL3Nwcml0ZXMvU3ByaXRlJyksXG4gICAgVGV4dHVyZSA9IHJlcXVpcmUoJy4uL3RleHR1cmVzL1RleHR1cmUnKSxcbiAgICBtYXRoID0gcmVxdWlyZSgnLi4vbWF0aCcpLFxuICAgIHV0aWxzID0gcmVxdWlyZSgnLi4vdXRpbHMnKSxcbiAgICBDT05TVCA9IHJlcXVpcmUoJy4uL2NvbnN0Jyk7XG5cbi8qKlxuICogQSBUZXh0IE9iamVjdCB3aWxsIGNyZWF0ZSBhIGxpbmUgb3IgbXVsdGlwbGUgbGluZXMgb2YgdGV4dC4gVG8gc3BsaXQgYSBsaW5lIHlvdSBjYW4gdXNlICdcXG4nIGluIHlvdXIgdGV4dCBzdHJpbmcsXG4gKiBvciBhZGQgYSB3b3JkV3JhcCBwcm9wZXJ0eSBzZXQgdG8gdHJ1ZSBhbmQgYW5kIHdvcmRXcmFwV2lkdGggcHJvcGVydHkgd2l0aCBhIHZhbHVlIGluIHRoZSBzdHlsZSBvYmplY3QuXG4gKlxuICogQSBUZXh0IGNhbiBiZSBjcmVhdGVkIGRpcmVjdGx5IGZyb20gYSBzdHJpbmcgYW5kIGEgc3R5bGUgb2JqZWN0XG4gKlxuICogYGBganNcbiAqIHZhciB0ZXh0ID0gbmV3IFBJWEkuVGV4dCgnVGhpcyBpcyBhIHBpeGkgdGV4dCcse2ZvbnQgOiAnMjRweCBBcmlhbCcsIGZpbGwgOiAweGZmMTAxMCwgYWxpZ24gOiAnY2VudGVyJ30pO1xuICogYGBgXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLlNwcml0ZVxuICogQG1lbWJlcm9mIFBJWElcbiAqIEBwYXJhbSB0ZXh0IHtzdHJpbmd9IFRoZSBjb3B5IHRoYXQgeW91IHdvdWxkIGxpa2UgdGhlIHRleHQgdG8gZGlzcGxheVxuICogQHBhcmFtIFtzdHlsZV0ge29iamVjdH0gVGhlIHN0eWxlIHBhcmFtZXRlcnNcbiAqIEBwYXJhbSBbc3R5bGUuZm9udF0ge3N0cmluZ30gZGVmYXVsdCAnYm9sZCAyMHB4IEFyaWFsJyBUaGUgc3R5bGUgYW5kIHNpemUgb2YgdGhlIGZvbnRcbiAqIEBwYXJhbSBbc3R5bGUuZmlsbD0nYmxhY2snXSB7U3RyaW5nfE51bWJlcn0gQSBjYW52YXMgZmlsbHN0eWxlIHRoYXQgd2lsbCBiZSB1c2VkIG9uIHRoZSB0ZXh0IGUuZyAncmVkJywgJyMwMEZGMDAnXG4gKiBAcGFyYW0gW3N0eWxlLmFsaWduPSdsZWZ0J10ge3N0cmluZ30gQWxpZ25tZW50IGZvciBtdWx0aWxpbmUgdGV4dCAoJ2xlZnQnLCAnY2VudGVyJyBvciAncmlnaHQnKSwgZG9lcyBub3QgYWZmZWN0IHNpbmdsZSBsaW5lIHRleHRcbiAqIEBwYXJhbSBbc3R5bGUuc3Ryb2tlXSB7U3RyaW5nfE51bWJlcn0gQSBjYW52YXMgZmlsbHN0eWxlIHRoYXQgd2lsbCBiZSB1c2VkIG9uIHRoZSB0ZXh0IHN0cm9rZSBlLmcgJ2JsdWUnLCAnI0ZDRkYwMCdcbiAqIEBwYXJhbSBbc3R5bGUuc3Ryb2tlVGhpY2tuZXNzPTBdIHtudW1iZXJ9IEEgbnVtYmVyIHRoYXQgcmVwcmVzZW50cyB0aGUgdGhpY2tuZXNzIG9mIHRoZSBzdHJva2UuIERlZmF1bHQgaXMgMCAobm8gc3Ryb2tlKVxuICogQHBhcmFtIFtzdHlsZS53b3JkV3JhcD1mYWxzZV0ge2Jvb2xlYW59IEluZGljYXRlcyBpZiB3b3JkIHdyYXAgc2hvdWxkIGJlIHVzZWRcbiAqIEBwYXJhbSBbc3R5bGUud29yZFdyYXBXaWR0aD0xMDBdIHtudW1iZXJ9IFRoZSB3aWR0aCBhdCB3aGljaCB0ZXh0IHdpbGwgd3JhcCwgaXQgbmVlZHMgd29yZFdyYXAgdG8gYmUgc2V0IHRvIHRydWVcbiAqIEBwYXJhbSBbc3R5bGUubGluZUhlaWdodF0ge251bWJlcn0gVGhlIGxpbmUgaGVpZ2h0LCBhIG51bWJlciB0aGF0IHJlcHJlc2VudHMgdGhlIHZlcnRpY2FsIHNwYWNlIHRoYXQgYSBsZXR0ZXIgdXNlc1xuICogQHBhcmFtIFtzdHlsZS5kcm9wU2hhZG93PWZhbHNlXSB7Ym9vbGVhbn0gU2V0IGEgZHJvcCBzaGFkb3cgZm9yIHRoZSB0ZXh0XG4gKiBAcGFyYW0gW3N0eWxlLmRyb3BTaGFkb3dDb2xvcj0nIzAwMDAwMCddIHtzdHJpbmd9IEEgZmlsbCBzdHlsZSB0byBiZSB1c2VkIG9uIHRoZSBkcm9wc2hhZG93IGUuZyAncmVkJywgJyMwMEZGMDAnXG4gKiBAcGFyYW0gW3N0eWxlLmRyb3BTaGFkb3dBbmdsZT1NYXRoLlBJLzRdIHtudW1iZXJ9IFNldCBhIGFuZ2xlIG9mIHRoZSBkcm9wIHNoYWRvd1xuICogQHBhcmFtIFtzdHlsZS5kcm9wU2hhZG93RGlzdGFuY2U9NV0ge251bWJlcn0gU2V0IGEgZGlzdGFuY2Ugb2YgdGhlIGRyb3Agc2hhZG93XG4gKiBAcGFyYW0gW3N0eWxlLmRyb3BTaGFkb3dCbHVyPTBdIHtudW1iZXJ9IFNldCBhIHNoYWRvdyBibHVyIHJhZGl1c1xuICogQHBhcmFtIFtzdHlsZS5wYWRkaW5nPTBdIHtudW1iZXJ9IE9jY2FzaW9uYWxseSBzb21lIGZvbnRzIGFyZSBjcm9wcGVkIG9uIHRvcCBvciBib3R0b20uIEFkZGluZyBzb21lIHBhZGRpbmcgd2lsbFxuICogICAgICBwcmV2ZW50IHRoaXMgZnJvbSBoYXBwZW5pbmcgYnkgYWRkaW5nIHBhZGRpbmcgdG8gdGhlIHRvcCBhbmQgYm90dG9tIG9mIHRleHQgaGVpZ2h0LlxuICogQHBhcmFtIFtzdHlsZS50ZXh0QmFzZWxpbmU9J2FscGhhYmV0aWMnXSB7c3RyaW5nfSBUaGUgYmFzZWxpbmUgb2YgdGhlIHRleHQgdGhhdCBpcyByZW5kZXJlZC5cbiAqIEBwYXJhbSBbc3R5bGUubGluZUpvaW49J21pdGVyJ10ge3N0cmluZ30gVGhlIGxpbmVKb2luIHByb3BlcnR5IHNldHMgdGhlIHR5cGUgb2YgY29ybmVyIGNyZWF0ZWQsIGl0IGNhbiByZXNvbHZlXG4gKiAgICAgIHNwaWtlZCB0ZXh0IGlzc3Vlcy4gRGVmYXVsdCBpcyAnbWl0ZXInIChjcmVhdGVzIGEgc2hhcnAgY29ybmVyKS5cbiAqIEBwYXJhbSBbc3R5bGUubWl0ZXJMaW1pdD0xMF0ge251bWJlcn0gVGhlIG1pdGVyIGxpbWl0IHRvIHVzZSB3aGVuIHVzaW5nIHRoZSAnbWl0ZXInIGxpbmVKb2luIG1vZGUuIFRoaXMgY2FuIHJlZHVjZVxuICogICAgICBvciBpbmNyZWFzZSB0aGUgc3Bpa2luZXNzIG9mIHJlbmRlcmVkIHRleHQuXG4gKi9cbmZ1bmN0aW9uIFRleHQodGV4dCwgc3R5bGUsIHJlc29sdXRpb24pXG57XG4gICAgLyoqXG4gICAgICogVGhlIGNhbnZhcyBlbGVtZW50IHRoYXQgZXZlcnl0aGluZyBpcyBkcmF3biB0b1xuICAgICAqXG4gICAgICogQG1lbWJlciB7SFRNTENhbnZhc0VsZW1lbnR9XG4gICAgICovXG4gICAgdGhpcy5jYW52YXMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdjYW52YXMnKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBjYW52YXMgMmQgY29udGV4dCB0aGF0IGV2ZXJ5dGhpbmcgaXMgZHJhd24gd2l0aFxuICAgICAqIEBtZW1iZXIge0hUTUxDYW52YXNFbGVtZW50fVxuICAgICAqL1xuICAgIHRoaXMuY29udGV4dCA9IHRoaXMuY2FudmFzLmdldENvbnRleHQoJzJkJyk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgcmVzb2x1dGlvbiBvZiB0aGUgY2FudmFzLlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLnJlc29sdXRpb24gPSByZXNvbHV0aW9uIHx8IENPTlNULlJFU09MVVRJT047XG5cbiAgICAvKipcbiAgICAgKiBQcml2YXRlIHRyYWNrZXIgZm9yIHRoZSBjdXJyZW50IHRleHQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtzdHJpbmd9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl90ZXh0ID0gbnVsbDtcblxuICAgIC8qKlxuICAgICAqIFByaXZhdGUgdHJhY2tlciBmb3IgdGhlIGN1cnJlbnQgc3R5bGUuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtvYmplY3R9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9zdHlsZSA9IG51bGw7XG5cbiAgICB2YXIgdGV4dHVyZSA9IFRleHR1cmUuZnJvbUNhbnZhcyh0aGlzLmNhbnZhcyk7XG4gICAgdGV4dHVyZS50cmltID0gbmV3IG1hdGguUmVjdGFuZ2xlKCk7XG4gICAgU3ByaXRlLmNhbGwodGhpcywgdGV4dHVyZSk7XG5cbiAgICB0aGlzLnRleHQgPSB0ZXh0O1xuICAgIHRoaXMuc3R5bGUgPSBzdHlsZTtcbn1cblxuLy8gY29uc3RydWN0b3JcblRleHQucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShTcHJpdGUucHJvdG90eXBlKTtcblRleHQucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gVGV4dDtcbm1vZHVsZS5leHBvcnRzID0gVGV4dDtcblxuVGV4dC5mb250UHJvcGVydGllc0NhY2hlID0ge307XG5UZXh0LmZvbnRQcm9wZXJ0aWVzQ2FudmFzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnY2FudmFzJyk7XG5UZXh0LmZvbnRQcm9wZXJ0aWVzQ29udGV4dCA9IFRleHQuZm9udFByb3BlcnRpZXNDYW52YXMuZ2V0Q29udGV4dCgnMmQnKTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoVGV4dC5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBUaGUgd2lkdGggb2YgdGhlIFRleHQsIHNldHRpbmcgdGhpcyB3aWxsIGFjdHVhbGx5IG1vZGlmeSB0aGUgc2NhbGUgdG8gYWNoaWV2ZSB0aGUgdmFsdWUgc2V0XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuVGV4dCNcbiAgICAgKi9cbiAgICB3aWR0aDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmRpcnR5KVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlVGV4dCgpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5zY2FsZS54ICogdGhpcy5fdGV4dHVyZS5fZnJhbWUud2lkdGg7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnNjYWxlLnggPSB2YWx1ZSAvIHRoaXMuX3RleHR1cmUuX2ZyYW1lLndpZHRoO1xuICAgICAgICAgICAgdGhpcy5fd2lkdGggPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBUaGUgaGVpZ2h0IG9mIHRoZSBUZXh0LCBzZXR0aW5nIHRoaXMgd2lsbCBhY3R1YWxseSBtb2RpZnkgdGhlIHNjYWxlIHRvIGFjaGlldmUgdGhlIHZhbHVlIHNldFxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLlRleHQjXG4gICAgICovXG4gICAgaGVpZ2h0OiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgaWYgKHRoaXMuZGlydHkpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdGhpcy51cGRhdGVUZXh0KCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiAgdGhpcy5zY2FsZS55ICogdGhpcy5fdGV4dHVyZS5fZnJhbWUuaGVpZ2h0O1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5zY2FsZS55ID0gdmFsdWUgLyB0aGlzLl90ZXh0dXJlLl9mcmFtZS5oZWlnaHQ7XG4gICAgICAgICAgICB0aGlzLl9oZWlnaHQgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBTZXQgdGhlIHN0eWxlIG9mIHRoZSB0ZXh0XG4gICAgICpcbiAgICAgKiBAcGFyYW0gW3N0eWxlXSB7b2JqZWN0fSBUaGUgc3R5bGUgcGFyYW1ldGVyc1xuICAgICAqIEBwYXJhbSBbc3R5bGUuZm9udD0nYm9sZCAyMHB0IEFyaWFsJ10ge3N0cmluZ30gVGhlIHN0eWxlIGFuZCBzaXplIG9mIHRoZSBmb250XG4gICAgICogQHBhcmFtIFtzdHlsZS5maWxsPSdibGFjayddIHtzdHJpbmd8bnVtYmVyfSBBIGNhbnZhcyBmaWxsc3R5bGUgdGhhdCB3aWxsIGJlIHVzZWQgb24gdGhlIHRleHQgZWcgJ3JlZCcsICcjMDBGRjAwJ1xuICAgICAqIEBwYXJhbSBbc3R5bGUuYWxpZ249J2xlZnQnXSB7c3RyaW5nfSBBbGlnbm1lbnQgZm9yIG11bHRpbGluZSB0ZXh0ICgnbGVmdCcsICdjZW50ZXInIG9yICdyaWdodCcpLCBkb2VzIG5vdCBhZmZlY3Qgc2luZ2xlIGxpbmUgdGV4dFxuICAgICAqIEBwYXJhbSBbc3R5bGUuc3Ryb2tlPSdibGFjayddIHtzdHJpbmd8bnVtYmVyfSBBIGNhbnZhcyBmaWxsc3R5bGUgdGhhdCB3aWxsIGJlIHVzZWQgb24gdGhlIHRleHQgc3Ryb2tlIGVnICdibHVlJywgJyNGQ0ZGMDAnXG4gICAgICogQHBhcmFtIFtzdHlsZS5zdHJva2VUaGlja25lc3M9MF0ge251bWJlcn0gQSBudW1iZXIgdGhhdCByZXByZXNlbnRzIHRoZSB0aGlja25lc3Mgb2YgdGhlIHN0cm9rZS4gRGVmYXVsdCBpcyAwIChubyBzdHJva2UpXG4gICAgICogQHBhcmFtIFtzdHlsZS53b3JkV3JhcD1mYWxzZV0ge2Jvb2xlYW59IEluZGljYXRlcyBpZiB3b3JkIHdyYXAgc2hvdWxkIGJlIHVzZWRcbiAgICAgKiBAcGFyYW0gW3N0eWxlLndvcmRXcmFwV2lkdGg9MTAwXSB7bnVtYmVyfSBUaGUgd2lkdGggYXQgd2hpY2ggdGV4dCB3aWxsIHdyYXBcbiAgICAgKiBAcGFyYW0gW3N0eWxlLmxpbmVIZWlnaHRdIHtudW1iZXJ9IFRoZSBsaW5lIGhlaWdodCwgYSBudW1iZXIgdGhhdCByZXByZXNlbnRzIHRoZSB2ZXJ0aWNhbCBzcGFjZSB0aGF0IGEgbGV0dGVyIHVzZXNcbiAgICAgKiBAcGFyYW0gW3N0eWxlLmRyb3BTaGFkb3c9ZmFsc2VdIHtib29sZWFufSBTZXQgYSBkcm9wIHNoYWRvdyBmb3IgdGhlIHRleHRcbiAgICAgKiBAcGFyYW0gW3N0eWxlLmRyb3BTaGFkb3dDb2xvcj0nIzAwMDAwMCddIHtzdHJpbmd8bnVtYmVyfSBBIGZpbGwgc3R5bGUgdG8gYmUgdXNlZCBvbiB0aGUgZHJvcHNoYWRvdyBlLmcgJ3JlZCcsICcjMDBGRjAwJ1xuICAgICAqIEBwYXJhbSBbc3R5bGUuZHJvcFNoYWRvd0FuZ2xlPU1hdGguUEkvNl0ge251bWJlcn0gU2V0IGEgYW5nbGUgb2YgdGhlIGRyb3Agc2hhZG93XG4gICAgICogQHBhcmFtIFtzdHlsZS5kcm9wU2hhZG93RGlzdGFuY2U9NV0ge251bWJlcn0gU2V0IGEgZGlzdGFuY2Ugb2YgdGhlIGRyb3Agc2hhZG93XG4gICAgICogQHBhcmFtIFtzdHlsZS5kcm9wU2hhZG93Qmx1cj0wXSB7bnVtYmVyfSBTZXQgYSBzaGFkb3cgYmx1ciByYWRpdXNcbiAgICAgKiBAcGFyYW0gW3N0eWxlLnBhZGRpbmc9MF0ge251bWJlcn0gT2NjYXNpb25hbGx5IHNvbWUgZm9udHMgYXJlIGNyb3BwZWQgb24gdG9wIG9yIGJvdHRvbS4gQWRkaW5nIHNvbWUgcGFkZGluZyB3aWxsXG4gICAgICogICAgICBwcmV2ZW50IHRoaXMgZnJvbSBoYXBwZW5pbmcgYnkgYWRkaW5nIHBhZGRpbmcgdG8gdGhlIHRvcCBhbmQgYm90dG9tIG9mIHRleHQgaGVpZ2h0LlxuICAgICAqIEBwYXJhbSBbc3R5bGUudGV4dEJhc2VsaW5lPSdhbHBoYWJldGljJ10ge3N0cmluZ30gVGhlIGJhc2VsaW5lIG9mIHRoZSB0ZXh0IHRoYXQgaXMgcmVuZGVyZWQuXG4gICAgICogQHBhcmFtIFtzdHlsZS5saW5lSm9pbj0nbWl0ZXInXSB7c3RyaW5nfSBUaGUgbGluZUpvaW4gcHJvcGVydHkgc2V0cyB0aGUgdHlwZSBvZiBjb3JuZXIgY3JlYXRlZCwgaXQgY2FuIHJlc29sdmVcbiAgICAgKiAgICAgIHNwaWtlZCB0ZXh0IGlzc3Vlcy4gRGVmYXVsdCBpcyAnbWl0ZXInIChjcmVhdGVzIGEgc2hhcnAgY29ybmVyKS5cbiAgICAgKiBAcGFyYW0gW3N0eWxlLm1pdGVyTGltaXQ9MTBdIHtudW1iZXJ9IFRoZSBtaXRlciBsaW1pdCB0byB1c2Ugd2hlbiB1c2luZyB0aGUgJ21pdGVyJyBsaW5lSm9pbiBtb2RlLiBUaGlzIGNhbiByZWR1Y2VcbiAgICAgKiAgICAgIG9yIGluY3JlYXNlIHRoZSBzcGlraW5lc3Mgb2YgcmVuZGVyZWQgdGV4dC5cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5UZXh0I1xuICAgICAqL1xuICAgIHN0eWxlOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3N0eWxlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uIChzdHlsZSlcbiAgICAgICAge1xuICAgICAgICAgICAgc3R5bGUgPSBzdHlsZSB8fCB7fTtcblxuICAgICAgICAgICAgaWYgKHR5cGVvZiBzdHlsZS5maWxsID09PSAnbnVtYmVyJykge1xuICAgICAgICAgICAgICAgIHN0eWxlLmZpbGwgPSB1dGlscy5oZXgyc3RyaW5nKHN0eWxlLmZpbGwpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAodHlwZW9mIHN0eWxlLnN0cm9rZSA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgICAgICAgICBzdHlsZS5zdHJva2UgPSB1dGlscy5oZXgyc3RyaW5nKHN0eWxlLnN0cm9rZSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICh0eXBlb2Ygc3R5bGUuZHJvcFNoYWRvd0NvbG9yID09PSAnbnVtYmVyJykge1xuICAgICAgICAgICAgICAgIHN0eWxlLmRyb3BTaGFkb3dDb2xvciA9IHV0aWxzLmhleDJzdHJpbmcoc3R5bGUuZHJvcFNoYWRvd0NvbG9yKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgc3R5bGUuZm9udCA9IHN0eWxlLmZvbnQgfHwgJ2JvbGQgMjBwdCBBcmlhbCc7XG4gICAgICAgICAgICBzdHlsZS5maWxsID0gc3R5bGUuZmlsbCB8fCAnYmxhY2snO1xuICAgICAgICAgICAgc3R5bGUuYWxpZ24gPSBzdHlsZS5hbGlnbiB8fCAnbGVmdCc7XG4gICAgICAgICAgICBzdHlsZS5zdHJva2UgPSBzdHlsZS5zdHJva2UgfHwgJ2JsYWNrJzsgLy9wcm92aWRlIGEgZGVmYXVsdCwgc2VlOiBodHRwczovL2dpdGh1Yi5jb20vcGl4aWpzL3BpeGkuanMvaXNzdWVzLzEzNlxuICAgICAgICAgICAgc3R5bGUuc3Ryb2tlVGhpY2tuZXNzID0gc3R5bGUuc3Ryb2tlVGhpY2tuZXNzIHx8IDA7XG4gICAgICAgICAgICBzdHlsZS53b3JkV3JhcCA9IHN0eWxlLndvcmRXcmFwIHx8IGZhbHNlO1xuICAgICAgICAgICAgc3R5bGUud29yZFdyYXBXaWR0aCA9IHN0eWxlLndvcmRXcmFwV2lkdGggfHwgMTAwO1xuXG4gICAgICAgICAgICBzdHlsZS5kcm9wU2hhZG93ID0gc3R5bGUuZHJvcFNoYWRvdyB8fCBmYWxzZTtcbiAgICAgICAgICAgIHN0eWxlLmRyb3BTaGFkb3dDb2xvciA9IHN0eWxlLmRyb3BTaGFkb3dDb2xvciB8fCAnIzAwMDAwMCc7XG4gICAgICAgICAgICBzdHlsZS5kcm9wU2hhZG93QW5nbGUgPSBzdHlsZS5kcm9wU2hhZG93QW5nbGUgIT09IHVuZGVmaW5lZCA/IHN0eWxlLmRyb3BTaGFkb3dBbmdsZSA6IE1hdGguUEkgLyA2O1xuICAgICAgICAgICAgc3R5bGUuZHJvcFNoYWRvd0Rpc3RhbmNlID0gc3R5bGUuZHJvcFNoYWRvd0Rpc3RhbmNlICE9PSB1bmRlZmluZWQgPyBzdHlsZS5kcm9wU2hhZG93RGlzdGFuY2UgOiA1O1xuICAgICAgICAgICAgc3R5bGUuZHJvcFNoYWRvd0JsdXIgPSBzdHlsZS5kcm9wU2hhZG93Qmx1ciAhPT0gdW5kZWZpbmVkID8gc3R5bGUuZHJvcFNoYWRvd0JsdXIgOiAwOyAvL3NoYWRvd0JsdXIgaXMgJzAnIGJ5IGRlZmF1bHQgYWNjb3JkaW5nIHRvIEhUTUxcblxuICAgICAgICAgICAgc3R5bGUucGFkZGluZyA9IHN0eWxlLnBhZGRpbmcgfHwgMDtcblxuICAgICAgICAgICAgc3R5bGUudGV4dEJhc2VsaW5lID0gc3R5bGUudGV4dEJhc2VsaW5lIHx8ICdhbHBoYWJldGljJztcblxuICAgICAgICAgICAgc3R5bGUubGluZUpvaW4gPSBzdHlsZS5saW5lSm9pbiB8fCAnbWl0ZXInO1xuICAgICAgICAgICAgc3R5bGUubWl0ZXJMaW1pdCA9IHN0eWxlLm1pdGVyTGltaXQgfHwgMTA7XG5cbiAgICAgICAgICAgIHRoaXMuX3N0eWxlID0gc3R5bGU7XG4gICAgICAgICAgICB0aGlzLmRpcnR5ID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBTZXQgdGhlIGNvcHkgZm9yIHRoZSB0ZXh0IG9iamVjdC4gVG8gc3BsaXQgYSBsaW5lIHlvdSBjYW4gdXNlICdcXG4nLlxuICAgICAqXG4gICAgICogQHBhcmFtIHRleHQge3N0cmluZ30gVGhlIGNvcHkgdGhhdCB5b3Ugd291bGQgbGlrZSB0aGUgdGV4dCB0byBkaXNwbGF5XG4gICAgICogQG1lbWJlcm9mIFBJWEkuVGV4dCNcbiAgICAgKi9cbiAgICB0ZXh0OiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24oKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fdGV4dDtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodGV4dCl7XG4gICAgICAgICAgICB0ZXh0ID0gdGV4dC50b1N0cmluZygpIHx8ICcgJztcbiAgICAgICAgICAgIGlmICh0aGlzLl90ZXh0ID09PSB0ZXh0KVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuX3RleHQgPSB0ZXh0O1xuICAgICAgICAgICAgdGhpcy5kaXJ0eSA9IHRydWU7XG4gICAgICAgIH1cbiAgICB9XG59KTtcblxuLyoqXG4gKiBSZW5kZXJzIHRleHQgYW5kIHVwZGF0ZXMgaXQgd2hlbiBuZWVkZWRcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5UZXh0LnByb3RvdHlwZS51cGRhdGVUZXh0ID0gZnVuY3Rpb24gKClcbntcbiAgICB2YXIgc3R5bGUgPSB0aGlzLl9zdHlsZTtcbiAgICB0aGlzLmNvbnRleHQuZm9udCA9IHN0eWxlLmZvbnQ7XG5cbiAgICAvLyB3b3JkIHdyYXBcbiAgICAvLyBwcmVzZXJ2ZSBvcmlnaW5hbCB0ZXh0XG4gICAgdmFyIG91dHB1dFRleHQgPSBzdHlsZS53b3JkV3JhcCA/IHRoaXMud29yZFdyYXAodGhpcy5fdGV4dCkgOiB0aGlzLl90ZXh0O1xuXG4gICAgLy8gc3BsaXQgdGV4dCBpbnRvIGxpbmVzXG4gICAgdmFyIGxpbmVzID0gb3V0cHV0VGV4dC5zcGxpdCgvKD86XFxyXFxufFxccnxcXG4pLyk7XG5cbiAgICAvLyBjYWxjdWxhdGUgdGV4dCB3aWR0aFxuICAgIHZhciBsaW5lV2lkdGhzID0gbmV3IEFycmF5KGxpbmVzLmxlbmd0aCk7XG4gICAgdmFyIG1heExpbmVXaWR0aCA9IDA7XG4gICAgdmFyIGZvbnRQcm9wZXJ0aWVzID0gdGhpcy5kZXRlcm1pbmVGb250UHJvcGVydGllcyhzdHlsZS5mb250KTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxpbmVzLmxlbmd0aDsgaSsrKVxuICAgIHtcbiAgICAgICAgdmFyIGxpbmVXaWR0aCA9IHRoaXMuY29udGV4dC5tZWFzdXJlVGV4dChsaW5lc1tpXSkud2lkdGg7XG4gICAgICAgIGxpbmVXaWR0aHNbaV0gPSBsaW5lV2lkdGg7XG4gICAgICAgIG1heExpbmVXaWR0aCA9IE1hdGgubWF4KG1heExpbmVXaWR0aCwgbGluZVdpZHRoKTtcbiAgICB9XG5cbiAgICB2YXIgd2lkdGggPSBtYXhMaW5lV2lkdGggKyBzdHlsZS5zdHJva2VUaGlja25lc3M7XG4gICAgaWYgKHN0eWxlLmRyb3BTaGFkb3cpXG4gICAge1xuICAgICAgICB3aWR0aCArPSBzdHlsZS5kcm9wU2hhZG93RGlzdGFuY2U7XG4gICAgfVxuXG4gICAgdGhpcy5jYW52YXMud2lkdGggPSAoIHdpZHRoICsgdGhpcy5jb250ZXh0LmxpbmVXaWR0aCApICogdGhpcy5yZXNvbHV0aW9uO1xuXG4gICAgLy8gY2FsY3VsYXRlIHRleHQgaGVpZ2h0XG4gICAgdmFyIGxpbmVIZWlnaHQgPSB0aGlzLnN0eWxlLmxpbmVIZWlnaHQgfHwgZm9udFByb3BlcnRpZXMuZm9udFNpemUgKyBzdHlsZS5zdHJva2VUaGlja25lc3M7XG5cbiAgICB2YXIgaGVpZ2h0ID0gbGluZUhlaWdodCAqIGxpbmVzLmxlbmd0aDtcbiAgICBpZiAoc3R5bGUuZHJvcFNoYWRvdylcbiAgICB7XG4gICAgICAgIGhlaWdodCArPSBzdHlsZS5kcm9wU2hhZG93RGlzdGFuY2U7XG4gICAgfVxuXG4gICAgdGhpcy5jYW52YXMuaGVpZ2h0ID0gKCBoZWlnaHQgKyB0aGlzLl9zdHlsZS5wYWRkaW5nICogMiApICogdGhpcy5yZXNvbHV0aW9uO1xuXG4gICAgdGhpcy5jb250ZXh0LnNjYWxlKCB0aGlzLnJlc29sdXRpb24sIHRoaXMucmVzb2x1dGlvbik7XG5cbiAgICBpZiAobmF2aWdhdG9yLmlzQ29jb29uSlMpXG4gICAge1xuICAgICAgICB0aGlzLmNvbnRleHQuY2xlYXJSZWN0KDAsIDAsIHRoaXMuY2FudmFzLndpZHRoLCB0aGlzLmNhbnZhcy5oZWlnaHQpO1xuXG4gICAgfVxuXG4gICAgLy90aGlzLmNvbnRleHQuZmlsbFN0eWxlPVwiI0ZGMDAwMFwiO1xuICAgIC8vdGhpcy5jb250ZXh0LmZpbGxSZWN0KDAsIDAsIHRoaXMuY2FudmFzLndpZHRoLCB0aGlzLmNhbnZhcy5oZWlnaHQpO1xuXG4gICAgdGhpcy5jb250ZXh0LmZvbnQgPSBzdHlsZS5mb250O1xuICAgIHRoaXMuY29udGV4dC5zdHJva2VTdHlsZSA9IHN0eWxlLnN0cm9rZTtcbiAgICB0aGlzLmNvbnRleHQubGluZVdpZHRoID0gc3R5bGUuc3Ryb2tlVGhpY2tuZXNzO1xuICAgIHRoaXMuY29udGV4dC50ZXh0QmFzZWxpbmUgPSBzdHlsZS50ZXh0QmFzZWxpbmU7XG4gICAgdGhpcy5jb250ZXh0LmxpbmVKb2luID0gc3R5bGUubGluZUpvaW47XG4gICAgdGhpcy5jb250ZXh0Lm1pdGVyTGltaXQgPSBzdHlsZS5taXRlckxpbWl0O1xuXG4gICAgdmFyIGxpbmVQb3NpdGlvblg7XG4gICAgdmFyIGxpbmVQb3NpdGlvblk7XG5cbiAgICBpZiAoc3R5bGUuZHJvcFNoYWRvdylcbiAgICB7XG4gICAgICAgIGlmIChzdHlsZS5kcm9wU2hhZG93Qmx1ciA+IDApIHtcbiAgICAgICAgICAgIHRoaXMuY29udGV4dC5zaGFkb3dDb2xvciA9IHN0eWxlLmRyb3BTaGFkb3dDb2xvcjtcbiAgICAgICAgICAgIHRoaXMuY29udGV4dC5zaGFkb3dCbHVyID0gc3R5bGUuZHJvcFNoYWRvd0JsdXI7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmNvbnRleHQuZmlsbFN0eWxlID0gc3R5bGUuZHJvcFNoYWRvd0NvbG9yO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIHhTaGFkb3dPZmZzZXQgPSBNYXRoLmNvcyhzdHlsZS5kcm9wU2hhZG93QW5nbGUpICogc3R5bGUuZHJvcFNoYWRvd0Rpc3RhbmNlO1xuICAgICAgICB2YXIgeVNoYWRvd09mZnNldCA9IE1hdGguc2luKHN0eWxlLmRyb3BTaGFkb3dBbmdsZSkgKiBzdHlsZS5kcm9wU2hhZG93RGlzdGFuY2U7XG5cbiAgICAgICAgZm9yIChpID0gMDsgaSA8IGxpbmVzLmxlbmd0aDsgaSsrKVxuICAgICAgICB7XG4gICAgICAgICAgICBsaW5lUG9zaXRpb25YID0gc3R5bGUuc3Ryb2tlVGhpY2tuZXNzIC8gMjtcbiAgICAgICAgICAgIGxpbmVQb3NpdGlvblkgPSAoc3R5bGUuc3Ryb2tlVGhpY2tuZXNzIC8gMiArIGkgKiBsaW5lSGVpZ2h0KSArIGZvbnRQcm9wZXJ0aWVzLmFzY2VudDtcblxuICAgICAgICAgICAgaWYgKHN0eWxlLmFsaWduID09PSAncmlnaHQnKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGxpbmVQb3NpdGlvblggKz0gbWF4TGluZVdpZHRoIC0gbGluZVdpZHRoc1tpXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKHN0eWxlLmFsaWduID09PSAnY2VudGVyJylcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBsaW5lUG9zaXRpb25YICs9IChtYXhMaW5lV2lkdGggLSBsaW5lV2lkdGhzW2ldKSAvIDI7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChzdHlsZS5maWxsKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHRoaXMuY29udGV4dC5maWxsVGV4dChsaW5lc1tpXSwgbGluZVBvc2l0aW9uWCArIHhTaGFkb3dPZmZzZXQsIGxpbmVQb3NpdGlvblkgKyB5U2hhZG93T2Zmc2V0ICsgdGhpcy5fc3R5bGUucGFkZGluZyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvL3NldCBjYW52YXMgdGV4dCBzdHlsZXNcbiAgICB0aGlzLmNvbnRleHQuZmlsbFN0eWxlID0gc3R5bGUuZmlsbDtcblxuICAgIC8vZHJhdyBsaW5lcyBsaW5lIGJ5IGxpbmVcbiAgICBmb3IgKGkgPSAwOyBpIDwgbGluZXMubGVuZ3RoOyBpKyspXG4gICAge1xuICAgICAgICBsaW5lUG9zaXRpb25YID0gc3R5bGUuc3Ryb2tlVGhpY2tuZXNzIC8gMjtcbiAgICAgICAgbGluZVBvc2l0aW9uWSA9IChzdHlsZS5zdHJva2VUaGlja25lc3MgLyAyICsgaSAqIGxpbmVIZWlnaHQpICsgZm9udFByb3BlcnRpZXMuYXNjZW50O1xuXG4gICAgICAgIGlmIChzdHlsZS5hbGlnbiA9PT0gJ3JpZ2h0JylcbiAgICAgICAge1xuICAgICAgICAgICAgbGluZVBvc2l0aW9uWCArPSBtYXhMaW5lV2lkdGggLSBsaW5lV2lkdGhzW2ldO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHN0eWxlLmFsaWduID09PSAnY2VudGVyJylcbiAgICAgICAge1xuICAgICAgICAgICAgbGluZVBvc2l0aW9uWCArPSAobWF4TGluZVdpZHRoIC0gbGluZVdpZHRoc1tpXSkgLyAyO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHN0eWxlLnN0cm9rZSAmJiBzdHlsZS5zdHJva2VUaGlja25lc3MpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuY29udGV4dC5zdHJva2VUZXh0KGxpbmVzW2ldLCBsaW5lUG9zaXRpb25YLCBsaW5lUG9zaXRpb25ZICsgdGhpcy5fc3R5bGUucGFkZGluZyk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoc3R5bGUuZmlsbClcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5jb250ZXh0LmZpbGxUZXh0KGxpbmVzW2ldLCBsaW5lUG9zaXRpb25YLCBsaW5lUG9zaXRpb25ZICsgdGhpcy5fc3R5bGUucGFkZGluZyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLnVwZGF0ZVRleHR1cmUoKTtcbn07XG5cbi8qKlxuICogVXBkYXRlcyB0ZXh0dXJlIHNpemUgYmFzZWQgb24gY2FudmFzIHNpemVcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5UZXh0LnByb3RvdHlwZS51cGRhdGVUZXh0dXJlID0gZnVuY3Rpb24gKClcbntcbiAgICB2YXIgdGV4dHVyZSA9IHRoaXMuX3RleHR1cmU7XG5cbiAgICB0ZXh0dXJlLmJhc2VUZXh0dXJlLmhhc0xvYWRlZCA9IHRydWU7XG4gICAgdGV4dHVyZS5iYXNlVGV4dHVyZS5yZXNvbHV0aW9uID0gdGhpcy5yZXNvbHV0aW9uO1xuXG4gICAgdGV4dHVyZS5iYXNlVGV4dHVyZS53aWR0aCA9IHRoaXMuY2FudmFzLndpZHRoIC8gdGhpcy5yZXNvbHV0aW9uO1xuICAgIHRleHR1cmUuYmFzZVRleHR1cmUuaGVpZ2h0ID0gdGhpcy5jYW52YXMuaGVpZ2h0IC8gdGhpcy5yZXNvbHV0aW9uO1xuICAgIHRleHR1cmUuY3JvcC53aWR0aCA9IHRleHR1cmUuX2ZyYW1lLndpZHRoID0gdGhpcy5jYW52YXMud2lkdGggLyB0aGlzLnJlc29sdXRpb247XG4gICAgdGV4dHVyZS5jcm9wLmhlaWdodCA9IHRleHR1cmUuX2ZyYW1lLmhlaWdodCA9IHRoaXMuY2FudmFzLmhlaWdodCAvIHRoaXMucmVzb2x1dGlvbjtcblxuICAgIHRleHR1cmUudHJpbS54ID0gMDtcbiAgICB0ZXh0dXJlLnRyaW0ueSA9IC10aGlzLl9zdHlsZS5wYWRkaW5nO1xuXG4gICAgdGV4dHVyZS50cmltLndpZHRoID0gdGV4dHVyZS5fZnJhbWUud2lkdGg7XG4gICAgdGV4dHVyZS50cmltLmhlaWdodCA9IHRleHR1cmUuX2ZyYW1lLmhlaWdodCAtIHRoaXMuX3N0eWxlLnBhZGRpbmcqMjtcblxuICAgIHRoaXMuX3dpZHRoID0gdGhpcy5jYW52YXMud2lkdGggLyB0aGlzLnJlc29sdXRpb247XG4gICAgdGhpcy5faGVpZ2h0ID0gdGhpcy5jYW52YXMuaGVpZ2h0IC8gdGhpcy5yZXNvbHV0aW9uO1xuXG4gICAgdGV4dHVyZS5iYXNlVGV4dHVyZS5lbWl0KCd1cGRhdGUnLCAgdGV4dHVyZS5iYXNlVGV4dHVyZSk7XG5cbiAgICB0aGlzLmRpcnR5ID0gZmFsc2U7XG59O1xuXG4vKipcbiAqIFJlbmRlcnMgdGhlIG9iamVjdCB1c2luZyB0aGUgV2ViR0wgcmVuZGVyZXJcbiAqXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcn1cbiAqL1xuVGV4dC5wcm90b3R5cGUucmVuZGVyV2ViR0wgPSBmdW5jdGlvbiAocmVuZGVyZXIpXG57XG4gICAgaWYgKHRoaXMuZGlydHkpXG4gICAge1xuICAgICAgICAvL3RoaXMucmVzb2x1dGlvbiA9IDEvL3JlbmRlcmVyLnJlc29sdXRpb247XG5cbiAgICAgICAgdGhpcy51cGRhdGVUZXh0KCk7XG4gICAgfVxuXG4gICAgU3ByaXRlLnByb3RvdHlwZS5yZW5kZXJXZWJHTC5jYWxsKHRoaXMsIHJlbmRlcmVyKTtcbn07XG5cbi8qKlxuICogUmVuZGVycyB0aGUgb2JqZWN0IHVzaW5nIHRoZSBDYW52YXMgcmVuZGVyZXJcbiAqXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuQ2FudmFzUmVuZGVyZXJ9XG4gKiBAcHJpdmF0ZVxuICovXG5UZXh0LnByb3RvdHlwZS5fcmVuZGVyQ2FudmFzID0gZnVuY3Rpb24gKHJlbmRlcmVyKVxue1xuICAgIGlmICh0aGlzLmRpcnR5KVxuICAgIHtcbiAgICAgLy8gICB0aGlzLnJlc29sdXRpb24gPSAxLy9yZW5kZXJlci5yZXNvbHV0aW9uO1xuXG4gICAgICAgIHRoaXMudXBkYXRlVGV4dCgpO1xuICAgIH1cblxuICAgIFNwcml0ZS5wcm90b3R5cGUuX3JlbmRlckNhbnZhcy5jYWxsKHRoaXMsIHJlbmRlcmVyKTtcbn07XG5cbi8qKlxuICogQ2FsY3VsYXRlcyB0aGUgYXNjZW50LCBkZXNjZW50IGFuZCBmb250U2l6ZSBvZiBhIGdpdmVuIGZvbnRTdHlsZVxuICpcbiAqIEBwYXJhbSBmb250U3R5bGUge29iamVjdH1cbiAqIEBwcml2YXRlXG4gKi9cblRleHQucHJvdG90eXBlLmRldGVybWluZUZvbnRQcm9wZXJ0aWVzID0gZnVuY3Rpb24gKGZvbnRTdHlsZSlcbntcbiAgICB2YXIgcHJvcGVydGllcyA9IFRleHQuZm9udFByb3BlcnRpZXNDYWNoZVtmb250U3R5bGVdO1xuXG4gICAgaWYgKCFwcm9wZXJ0aWVzKVxuICAgIHtcbiAgICAgICAgcHJvcGVydGllcyA9IHt9O1xuXG4gICAgICAgIHZhciBjYW52YXMgPSBUZXh0LmZvbnRQcm9wZXJ0aWVzQ2FudmFzO1xuICAgICAgICB2YXIgY29udGV4dCA9IFRleHQuZm9udFByb3BlcnRpZXNDb250ZXh0O1xuXG4gICAgICAgIGNvbnRleHQuZm9udCA9IGZvbnRTdHlsZTtcblxuICAgICAgICB2YXIgd2lkdGggPSBNYXRoLmNlaWwoY29udGV4dC5tZWFzdXJlVGV4dCgnfE3DiXEnKS53aWR0aCk7XG4gICAgICAgIHZhciBiYXNlbGluZSA9IE1hdGguY2VpbChjb250ZXh0Lm1lYXN1cmVUZXh0KCdNJykud2lkdGgpO1xuICAgICAgICB2YXIgaGVpZ2h0ID0gMiAqIGJhc2VsaW5lO1xuXG4gICAgICAgIGJhc2VsaW5lID0gYmFzZWxpbmUgKiAxLjQgfCAwO1xuXG4gICAgICAgIGNhbnZhcy53aWR0aCA9IHdpZHRoO1xuICAgICAgICBjYW52YXMuaGVpZ2h0ID0gaGVpZ2h0O1xuXG4gICAgICAgIGNvbnRleHQuZmlsbFN0eWxlID0gJyNmMDAnO1xuICAgICAgICBjb250ZXh0LmZpbGxSZWN0KDAsIDAsIHdpZHRoLCBoZWlnaHQpO1xuXG4gICAgICAgIGNvbnRleHQuZm9udCA9IGZvbnRTdHlsZTtcblxuICAgICAgICBjb250ZXh0LnRleHRCYXNlbGluZSA9ICdhbHBoYWJldGljJztcbiAgICAgICAgY29udGV4dC5maWxsU3R5bGUgPSAnIzAwMCc7XG4gICAgICAgIGNvbnRleHQuZmlsbFRleHQoJ3xNw4lxJywgMCwgYmFzZWxpbmUpO1xuXG4gICAgICAgIHZhciBpbWFnZWRhdGEgPSBjb250ZXh0LmdldEltYWdlRGF0YSgwLCAwLCB3aWR0aCwgaGVpZ2h0KS5kYXRhO1xuICAgICAgICB2YXIgcGl4ZWxzID0gaW1hZ2VkYXRhLmxlbmd0aDtcbiAgICAgICAgdmFyIGxpbmUgPSB3aWR0aCAqIDQ7XG5cbiAgICAgICAgdmFyIGksIGo7XG5cbiAgICAgICAgdmFyIGlkeCA9IDA7XG4gICAgICAgIHZhciBzdG9wID0gZmFsc2U7XG5cbiAgICAgICAgLy8gYXNjZW50LiBzY2FuIGZyb20gdG9wIHRvIGJvdHRvbSB1bnRpbCB3ZSBmaW5kIGEgbm9uIHJlZCBwaXhlbFxuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgYmFzZWxpbmU7IGkrKylcbiAgICAgICAge1xuICAgICAgICAgICAgZm9yIChqID0gMDsgaiA8IGxpbmU7IGogKz0gNClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBpZiAoaW1hZ2VkYXRhW2lkeCArIGpdICE9PSAyNTUpXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBzdG9wID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCFzdG9wKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGlkeCArPSBsaW5lO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcHJvcGVydGllcy5hc2NlbnQgPSBiYXNlbGluZSAtIGk7XG5cbiAgICAgICAgaWR4ID0gcGl4ZWxzIC0gbGluZTtcbiAgICAgICAgc3RvcCA9IGZhbHNlO1xuXG4gICAgICAgIC8vIGRlc2NlbnQuIHNjYW4gZnJvbSBib3R0b20gdG8gdG9wIHVudGlsIHdlIGZpbmQgYSBub24gcmVkIHBpeGVsXG4gICAgICAgIGZvciAoaSA9IGhlaWdodDsgaSA+IGJhc2VsaW5lOyBpLS0pXG4gICAgICAgIHtcbiAgICAgICAgICAgIGZvciAoaiA9IDA7IGogPCBsaW5lOyBqICs9IDQpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgaWYgKGltYWdlZGF0YVtpZHggKyBqXSAhPT0gMjU1KVxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgc3RvcCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghc3RvcClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBpZHggLT0gbGluZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHByb3BlcnRpZXMuZGVzY2VudCA9IGkgLSBiYXNlbGluZTtcbiAgICAgICAgcHJvcGVydGllcy5mb250U2l6ZSA9IHByb3BlcnRpZXMuYXNjZW50ICsgcHJvcGVydGllcy5kZXNjZW50O1xuXG4gICAgICAgIFRleHQuZm9udFByb3BlcnRpZXNDYWNoZVtmb250U3R5bGVdID0gcHJvcGVydGllcztcbiAgICB9XG5cbiAgICByZXR1cm4gcHJvcGVydGllcztcbn07XG5cbi8qKlxuICogQXBwbGllcyBuZXdsaW5lcyB0byBhIHN0cmluZyB0byBoYXZlIGl0IG9wdGltYWxseSBmaXQgaW50byB0aGUgaG9yaXpvbnRhbFxuICogYm91bmRzIHNldCBieSB0aGUgVGV4dCBvYmplY3QncyB3b3JkV3JhcFdpZHRoIHByb3BlcnR5LlxuICpcbiAqIEBwYXJhbSB0ZXh0IHtzdHJpbmd9XG4gKiBAcHJpdmF0ZVxuICovXG5UZXh0LnByb3RvdHlwZS53b3JkV3JhcCA9IGZ1bmN0aW9uICh0ZXh0KVxue1xuICAgIC8vIEdyZWVkeSB3cmFwcGluZyBhbGdvcml0aG0gdGhhdCB3aWxsIHdyYXAgd29yZHMgYXMgdGhlIGxpbmUgZ3Jvd3MgbG9uZ2VyXG4gICAgLy8gdGhhbiBpdHMgaG9yaXpvbnRhbCBib3VuZHMuXG4gICAgdmFyIHJlc3VsdCA9ICcnO1xuICAgIHZhciBsaW5lcyA9IHRleHQuc3BsaXQoJ1xcbicpO1xuICAgIHZhciB3b3JkV3JhcFdpZHRoID0gdGhpcy5fc3R5bGUud29yZFdyYXBXaWR0aDtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxpbmVzLmxlbmd0aDsgaSsrKVxuICAgIHtcbiAgICAgICAgdmFyIHNwYWNlTGVmdCA9IHdvcmRXcmFwV2lkdGg7XG4gICAgICAgIHZhciB3b3JkcyA9IGxpbmVzW2ldLnNwbGl0KCcgJyk7XG4gICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgd29yZHMubGVuZ3RoOyBqKyspXG4gICAgICAgIHtcbiAgICAgICAgICAgIHZhciB3b3JkV2lkdGggPSB0aGlzLmNvbnRleHQubWVhc3VyZVRleHQod29yZHNbal0pLndpZHRoO1xuICAgICAgICAgICAgdmFyIHdvcmRXaWR0aFdpdGhTcGFjZSA9IHdvcmRXaWR0aCArIHRoaXMuY29udGV4dC5tZWFzdXJlVGV4dCgnICcpLndpZHRoO1xuICAgICAgICAgICAgaWYgKGogPT09IDAgfHwgd29yZFdpZHRoV2l0aFNwYWNlID4gc3BhY2VMZWZ0KVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIC8vIFNraXAgcHJpbnRpbmcgdGhlIG5ld2xpbmUgaWYgaXQncyB0aGUgZmlyc3Qgd29yZCBvZiB0aGUgbGluZSB0aGF0IGlzXG4gICAgICAgICAgICAgICAgLy8gZ3JlYXRlciB0aGFuIHRoZSB3b3JkIHdyYXAgd2lkdGguXG4gICAgICAgICAgICAgICAgaWYgKGogPiAwKVxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0ICs9ICdcXG4nO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXN1bHQgKz0gd29yZHNbal07XG4gICAgICAgICAgICAgICAgc3BhY2VMZWZ0ID0gd29yZFdyYXBXaWR0aCAtIHdvcmRXaWR0aDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBzcGFjZUxlZnQgLT0gd29yZFdpZHRoV2l0aFNwYWNlO1xuICAgICAgICAgICAgICAgIHJlc3VsdCArPSAnICcgKyB3b3Jkc1tqXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChpIDwgbGluZXMubGVuZ3RoLTEpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJlc3VsdCArPSAnXFxuJztcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xufTtcblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBib3VuZHMgb2YgdGhlIFRleHQgYXMgYSByZWN0YW5nbGUuIFRoZSBib3VuZHMgY2FsY3VsYXRpb24gdGFrZXMgdGhlIHdvcmxkVHJhbnNmb3JtIGludG8gYWNjb3VudC5cbiAqXG4gKiBAcGFyYW0gbWF0cml4IHtQSVhJLk1hdHJpeH0gdGhlIHRyYW5zZm9ybWF0aW9uIG1hdHJpeCBvZiB0aGUgVGV4dFxuICogQHJldHVybiB7UElYSS5SZWN0YW5nbGV9IHRoZSBmcmFtaW5nIHJlY3RhbmdsZVxuICovXG5UZXh0LnByb3RvdHlwZS5nZXRCb3VuZHMgPSBmdW5jdGlvbiAobWF0cml4KVxue1xuICAgIGlmICh0aGlzLmRpcnR5KVxuICAgIHtcbiAgICAgICAgdGhpcy51cGRhdGVUZXh0KCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIFNwcml0ZS5wcm90b3R5cGUuZ2V0Qm91bmRzLmNhbGwodGhpcywgbWF0cml4KTtcbn07XG5cbi8qKlxuICogRGVzdHJveXMgdGhpcyB0ZXh0IG9iamVjdC5cbiAqXG4gKiBAcGFyYW0gW2Rlc3Ryb3lCYXNlVGV4dHVyZT10cnVlXSB7Ym9vbGVhbn0gd2hldGhlciB0byBkZXN0cm95IHRoZSBiYXNlIHRleHR1cmUgYXMgd2VsbFxuICovXG5UZXh0LnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKGRlc3Ryb3lCYXNlVGV4dHVyZSlcbntcbiAgICAvLyBtYWtlIHN1cmUgdG8gcmVzZXQgdGhlIHRoZSBjb250ZXh0IGFuZCBjYW52YXMuLiBkb250IHdhbnQgdGhpcyBoYW5naW5nIGFyb3VuZCBpbiBtZW1vcnkhXG4gICAgdGhpcy5jb250ZXh0ID0gbnVsbDtcbiAgICB0aGlzLmNhbnZhcyA9IG51bGw7XG5cbiAgICB0aGlzLl9zdHlsZSA9IG51bGw7XG5cbiAgICB0aGlzLl90ZXh0dXJlLmRlc3Ryb3koZGVzdHJveUJhc2VUZXh0dXJlID09PSB1bmRlZmluZWQgPyB0cnVlIDogZGVzdHJveUJhc2VUZXh0dXJlKTtcbn07XG4iLCJ2YXIgdXRpbHMgPSByZXF1aXJlKCcuLi91dGlscycpLFxuICAgIENPTlNUID0gcmVxdWlyZSgnLi4vY29uc3QnKSxcbiAgICBFdmVudEVtaXR0ZXIgPSByZXF1aXJlKCdldmVudGVtaXR0ZXIzJyk7XG5cbi8qKlxuICogQSB0ZXh0dXJlIHN0b3JlcyB0aGUgaW5mb3JtYXRpb24gdGhhdCByZXByZXNlbnRzIGFuIGltYWdlLiBBbGwgdGV4dHVyZXMgaGF2ZSBhIGJhc2UgdGV4dHVyZS5cbiAqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gc291cmNlIHtJbWFnZXxDYW52YXN9IHRoZSBzb3VyY2Ugb2JqZWN0IG9mIHRoZSB0ZXh0dXJlLlxuICogQHBhcmFtIFtzY2FsZU1vZGU9UElYSS5TQ0FMRV9NT0RFUy5ERUZBVUxUXSB7bnVtYmVyfSBTZWUge0BsaW5rIFBJWEkuU0NBTEVfTU9ERVN9IGZvciBwb3NzaWJsZSB2YWx1ZXNcbiAqIEBwYXJhbSByZXNvbHV0aW9uIHtudW1iZXJ9IHRoZSByZXNvbHV0aW9uIG9mIHRoZSB0ZXh0dXJlIGZvciBkZXZpY2VzIHdpdGggZGlmZmVyZW50IHBpeGVsIHJhdGlvc1xuICovXG5mdW5jdGlvbiBCYXNlVGV4dHVyZShzb3VyY2UsIHNjYWxlTW9kZSwgcmVzb2x1dGlvbilcbntcbiAgICBFdmVudEVtaXR0ZXIuY2FsbCh0aGlzKTtcblxuICAgIHRoaXMudWlkID0gdXRpbHMudWlkKCk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgUmVzb2x1dGlvbiBvZiB0aGUgdGV4dHVyZS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLnJlc29sdXRpb24gPSByZXNvbHV0aW9uIHx8IDE7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgd2lkdGggb2YgdGhlIGJhc2UgdGV4dHVyZSBzZXQgd2hlbiB0aGUgaW1hZ2UgaGFzIGxvYWRlZFxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEByZWFkT25seVxuICAgICAqL1xuICAgIHRoaXMud2lkdGggPSAxMDA7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgaGVpZ2h0IG9mIHRoZSBiYXNlIHRleHR1cmUgc2V0IHdoZW4gdGhlIGltYWdlIGhhcyBsb2FkZWRcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAcmVhZE9ubHlcbiAgICAgKi9cbiAgICB0aGlzLmhlaWdodCA9IDEwMDtcblxuICAgIC8vIFRPRE8gZG9jc1xuICAgIC8vIHVzZWQgdG8gc3RvcmUgdGhlIGFjdHVhbCBkaW1lbnNpb25zIG9mIHRoZSBzb3VyY2VcbiAgICAvKipcbiAgICAgKiBVc2VkIHRvIHN0b3JlIHRoZSBhY3R1YWwgd2lkdGggb2YgdGhlIHNvdXJjZSBvZiB0aGlzIHRleHR1cmVcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAcmVhZE9ubHlcbiAgICAgKi9cbiAgICB0aGlzLnJlYWxXaWR0aCA9IDEwMDtcbiAgICAvKipcbiAgICAgKiBVc2VkIHRvIHN0b3JlIHRoZSBhY3R1YWwgaGVpZ2h0IG9mIHRoZSBzb3VyY2Ugb2YgdGhpcyB0ZXh0dXJlXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQHJlYWRPbmx5XG4gICAgICovXG4gICAgdGhpcy5yZWFsSGVpZ2h0ID0gMTAwO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHNjYWxlIG1vZGUgdG8gYXBwbHkgd2hlbiBzY2FsaW5nIHRoaXMgdGV4dHVyZVxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IFBJWEkuU0NBTEVfTU9ERVMuTElORUFSXG4gICAgICogQHNlZSBQSVhJLlNDQUxFX01PREVTXG4gICAgICovXG4gICAgdGhpcy5zY2FsZU1vZGUgPSBzY2FsZU1vZGUgfHwgQ09OU1QuU0NBTEVfTU9ERVMuREVGQVVMVDtcblxuICAgIC8qKlxuICAgICAqIFNldCB0byB0cnVlIG9uY2UgdGhlIGJhc2UgdGV4dHVyZSBoYXMgc3VjY2Vzc2Z1bGx5IGxvYWRlZC5cbiAgICAgKlxuICAgICAqIFRoaXMgaXMgbmV2ZXIgdHJ1ZSBpZiB0aGUgdW5kZXJseWluZyBzb3VyY2UgZmFpbHMgdG8gbG9hZCBvciBoYXMgbm8gdGV4dHVyZSBkYXRhLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKiBAcmVhZE9ubHlcbiAgICAgKi9cbiAgICB0aGlzLmhhc0xvYWRlZCA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogU2V0IHRvIHRydWUgaWYgdGhlIHNvdXJjZSBpcyBjdXJyZW50bHkgbG9hZGluZy5cbiAgICAgKlxuICAgICAqIElmIGFuIEltYWdlIHNvdXJjZSBpcyBsb2FkaW5nIHRoZSAnbG9hZGVkJyBvciAnZXJyb3InIGV2ZW50IHdpbGwgYmVcbiAgICAgKiBkaXNwYXRjaGVkIHdoZW4gdGhlIG9wZXJhdGlvbiBlbmRzLiBBbiB1bmRlcnlsaW5nIHNvdXJjZSB0aGF0IGlzXG4gICAgICogaW1tZWRpYXRlbHktYXZhaWxhYmxlIGJ5cGFzc2VzIGxvYWRpbmcgZW50aXJlbHkuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqIEByZWFkb25seVxuICAgICAqL1xuICAgIHRoaXMuaXNMb2FkaW5nID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgaW1hZ2Ugc291cmNlIHRoYXQgaXMgdXNlZCB0byBjcmVhdGUgdGhlIHRleHR1cmUuXG4gICAgICpcbiAgICAgKiBUT0RPOiBNYWtlIHRoaXMgYSBzZXR0ZXIgdGhhdCBjYWxscyBsb2FkU291cmNlKCk7XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtJbWFnZXxDYW52YXN9XG4gICAgICogQHJlYWRvbmx5XG4gICAgICovXG4gICAgdGhpcy5zb3VyY2UgPSBudWxsOyAvLyBzZXQgaW4gbG9hZFNvdXJjZSwgaWYgYXQgYWxsXG5cbiAgICAvKipcbiAgICAgKiBDb250cm9scyBpZiBSR0IgY2hhbm5lbHMgc2hvdWxkIGJlIHByZS1tdWx0aXBsaWVkIGJ5IEFscGhhICAoV2ViR0wgb25seSlcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICogQGRlZmF1bHQgdHJ1ZVxuICAgICAqL1xuICAgIHRoaXMucHJlbXVsdGlwbGllZEFscGhhID0gdHJ1ZTtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge3N0cmluZ31cbiAgICAgKi9cbiAgICB0aGlzLmltYWdlVXJsID0gbnVsbDtcblxuICAgIC8qKlxuICAgICAqIFdldGhlciBvciBub3QgdGhlIHRleHR1cmUgaXMgYSBwb3dlciBvZiB0d28sIHRyeSB0byB1c2UgcG93ZXIgb2YgdHdvIHRleHR1cmVzIGFzIG11Y2ggYXMgeW91IGNhblxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLmlzUG93ZXJPZlR3byA9IGZhbHNlO1xuXG4gICAgLy8gdXNlZCBmb3Igd2ViR0xcblxuICAgIC8qKlxuICAgICAqXG4gICAgICogU2V0IHRoaXMgdG8gdHJ1ZSBpZiBhIG1pcG1hcCBvZiB0aGlzIHRleHR1cmUgbmVlZHMgdG8gYmUgZ2VuZXJhdGVkLiBUaGlzIHZhbHVlIG5lZWRzIHRvIGJlIHNldCBiZWZvcmUgdGhlIHRleHR1cmUgaXMgdXNlZFxuICAgICAqIEFsc28gdGhlIHRleHR1cmUgbXVzdCBiZSBhIHBvd2VyIG9mIHR3byBzaXplIHRvIHdvcmtcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICovXG4gICAgdGhpcy5taXBtYXAgPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIEEgbWFwIG9mIHJlbmRlcmVyIElEcyB0byB3ZWJnbCB0ZXh0dXJlc1xuICAgICAqXG4gICAgICogQG1lbWJlciB7b2JqZWN0PG51bWJlciwgV2ViR0xUZXh0dXJlPn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX2dsVGV4dHVyZXMgPSB7fTtcbiAgICB0aGlzLl9hY3RpdmUgPSBmYWxzZTtcbiAgICB0aGlzLl9pZCA9IDA7XG4gICAgXG4gICAgLy8gaWYgbm8gc291cmNlIHBhc3NlZCBkb24ndCB0cnkgdG8gbG9hZFxuICAgIGlmIChzb3VyY2UpXG4gICAge1xuICAgICAgICB0aGlzLmxvYWRTb3VyY2Uoc291cmNlKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBGaXJlZCB3aGVuIGEgbm90LWltbWVkaWF0ZWx5LWF2YWlsYWJsZSBzb3VyY2UgZmluaXNoZXMgbG9hZGluZy5cbiAgICAgKlxuICAgICAqIEBldmVudCBsb2FkZWRcbiAgICAgKiBAbWVtYmVyb2YgUElYSS5CYXNlVGV4dHVyZSNcbiAgICAgKiBAcHJvdGVjdGVkXG4gICAgICovXG5cbiAgICAvKipcbiAgICAgKiBGaXJlZCB3aGVuIGEgbm90LWltbWVkaWF0ZWx5LWF2YWlsYWJsZSBzb3VyY2UgZmFpbHMgdG8gbG9hZC5cbiAgICAgKlxuICAgICAqIEBldmVudCBlcnJvclxuICAgICAqIEBtZW1iZXJvZiBQSVhJLkJhc2VUZXh0dXJlI1xuICAgICAqIEBwcm90ZWN0ZWRcbiAgICAgKi9cbn1cblxuQmFzZVRleHR1cmUucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShFdmVudEVtaXR0ZXIucHJvdG90eXBlKTtcbkJhc2VUZXh0dXJlLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IEJhc2VUZXh0dXJlO1xubW9kdWxlLmV4cG9ydHMgPSBCYXNlVGV4dHVyZTtcblxuLyoqXG4gKiBVcGRhdGVzIHRoZSB0ZXh0dXJlIG9uIGFsbCB0aGUgd2ViZ2wgcmVuZGVyZXJzLCB0aGlzIGFsc28gYXNzdW1lcyB0aGUgc3JjIGhhcyBjaGFuZ2VkLlxuICpcbiAqIEBmaXJlcyB1cGRhdGVcbiAqL1xuQmFzZVRleHR1cmUucHJvdG90eXBlLnVwZGF0ZSA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy5yZWFsV2lkdGggPSB0aGlzLnNvdXJjZS5uYXR1cmFsV2lkdGggfHwgdGhpcy5zb3VyY2Uud2lkdGg7XG4gICAgdGhpcy5yZWFsSGVpZ2h0ID0gdGhpcy5zb3VyY2UubmF0dXJhbEhlaWdodCB8fCB0aGlzLnNvdXJjZS5oZWlnaHQ7XG5cbiAgICB0aGlzLndpZHRoID0gdGhpcy5yZWFsV2lkdGggLyB0aGlzLnJlc29sdXRpb247XG4gICAgdGhpcy5oZWlnaHQgPSB0aGlzLnJlYWxIZWlnaHQgLyB0aGlzLnJlc29sdXRpb247XG5cbiAgICB0aGlzLmlzUG93ZXJPZlR3byA9IHV0aWxzLmlzUG93ZXJPZlR3byh0aGlzLnJlYWxXaWR0aCwgdGhpcy5yZWFsSGVpZ2h0KTtcblxuICAgIHRoaXMuZW1pdCgndXBkYXRlJywgdGhpcyk7XG59O1xuXG4vKipcbiAqIExvYWQgYSBzb3VyY2UuXG4gKlxuICogSWYgdGhlIHNvdXJjZSBpcyBub3QtaW1tZWRpYXRlbHktYXZhaWxhYmxlLCBzdWNoIGFzIGFuIGltYWdlIHRoYXQgbmVlZHMgdG8gYmVcbiAqIGRvd25sb2FkZWQsIHRoZW4gdGhlICdsb2FkZWQnIG9yICdlcnJvcicgZXZlbnQgd2lsbCBiZSBkaXNwYXRjaGVkIGluIHRoZSBmdXR1cmVcbiAqIGFuZCBgaGFzTG9hZGVkYCB3aWxsIHJlbWFpbiBmYWxzZSBhZnRlciB0aGlzIGNhbGwuXG4gKlxuICogVGhlIGxvZ2ljIHN0YXRlIGFmdGVyIGNhbGxpbmcgYGxvYWRTb3VyY2VgIGRpcmVjdGx5IG9yIGluZGlyZWN0bHkgKGVnLiBgZnJvbUltYWdlYCwgYG5ldyBCYXNlVGV4dHVyZWApIGlzOlxuICpcbiAqICAgICBpZiAodGV4dHVyZS5oYXNMb2FkZWQpXG4ge1xuICogICAgICAgIC8vIHRleHR1cmUgcmVhZHkgZm9yIHVzZVxuICogICAgIH0gZWxzZSBpZiAodGV4dHVyZS5pc0xvYWRpbmcpXG4ge1xuICogICAgICAgIC8vIGxpc3RlbiB0byAnbG9hZGVkJyBhbmQvb3IgJ2Vycm9yJyBldmVudHMgb24gdGV4dHVyZVxuICogICAgIH0gZWxzZSB7XG4gKiAgICAgICAgLy8gbm90IGxvYWRpbmcsIG5vdCBnb2luZyB0byBsb2FkIFVOTEVTUyB0aGUgc291cmNlIGlzIHJlbG9hZGVkXG4gKiAgICAgICAgLy8gKGl0IG1heSBzdGlsbCBtYWtlIHNlbnNlIHRvIGxpc3RlbiB0byB0aGUgZXZlbnRzKVxuICogICAgIH1cbiAqXG4gKiBAcHJvdGVjdGVkXG4gKiBAcGFyYW0gc291cmNlIHtJbWFnZXxDYW52YXN9IHRoZSBzb3VyY2Ugb2JqZWN0IG9mIHRoZSB0ZXh0dXJlLlxuICovXG5CYXNlVGV4dHVyZS5wcm90b3R5cGUubG9hZFNvdXJjZSA9IGZ1bmN0aW9uIChzb3VyY2UpXG57XG4gICAgdmFyIHdhc0xvYWRpbmcgPSB0aGlzLmlzTG9hZGluZztcbiAgICB0aGlzLmhhc0xvYWRlZCA9IGZhbHNlO1xuICAgIHRoaXMuaXNMb2FkaW5nID0gZmFsc2U7XG5cbiAgICBpZiAod2FzTG9hZGluZyAmJiB0aGlzLnNvdXJjZSlcbiAgICB7XG4gICAgICAgIHRoaXMuc291cmNlLm9ubG9hZCA9IG51bGw7XG4gICAgICAgIHRoaXMuc291cmNlLm9uZXJyb3IgPSBudWxsO1xuICAgIH1cblxuICAgIHRoaXMuc291cmNlID0gc291cmNlO1xuXG4gICAgLy8gQXBwbHkgc291cmNlIGlmIGxvYWRlZC4gT3RoZXJ3aXNlIHNldHVwIGFwcHJvcHJpYXRlIGxvYWRpbmcgbW9uaXRvcnMuXG4gICAgaWYgKCh0aGlzLnNvdXJjZS5jb21wbGV0ZSB8fCB0aGlzLnNvdXJjZS5nZXRDb250ZXh0KSAmJiB0aGlzLnNvdXJjZS53aWR0aCAmJiB0aGlzLnNvdXJjZS5oZWlnaHQpXG4gICAge1xuICAgICAgICB0aGlzLl9zb3VyY2VMb2FkZWQoKTtcbiAgICB9XG4gICAgZWxzZSBpZiAoIXNvdXJjZS5nZXRDb250ZXh0KVxuICAgIHtcblxuICAgICAgICAvLyBJbWFnZSBmYWlsIC8gbm90IHJlYWR5XG4gICAgICAgIHRoaXMuaXNMb2FkaW5nID0gdHJ1ZTtcblxuICAgICAgICB2YXIgc2NvcGUgPSB0aGlzO1xuXG4gICAgICAgIHNvdXJjZS5vbmxvYWQgPSBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICBzb3VyY2Uub25sb2FkID0gbnVsbDtcbiAgICAgICAgICAgIHNvdXJjZS5vbmVycm9yID0gbnVsbDtcblxuICAgICAgICAgICAgaWYgKCFzY29wZS5pc0xvYWRpbmcpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBzY29wZS5pc0xvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgICAgIHNjb3BlLl9zb3VyY2VMb2FkZWQoKTtcblxuICAgICAgICAgICAgc2NvcGUuZW1pdCgnbG9hZGVkJywgc2NvcGUpO1xuICAgICAgICB9O1xuXG4gICAgICAgIHNvdXJjZS5vbmVycm9yID0gZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgc291cmNlLm9ubG9hZCA9IG51bGw7XG4gICAgICAgICAgICBzb3VyY2Uub25lcnJvciA9IG51bGw7XG5cbiAgICAgICAgICAgIGlmICghc2NvcGUuaXNMb2FkaW5nKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgc2NvcGUuaXNMb2FkaW5nID0gZmFsc2U7XG4gICAgICAgICAgICBzY29wZS5lbWl0KCdlcnJvcicsIHNjb3BlKTtcbiAgICAgICAgfTtcblxuICAgICAgICAvLyBQZXIgaHR0cDovL3d3dy53My5vcmcvVFIvaHRtbDUvZW1iZWRkZWQtY29udGVudC0wLmh0bWwjdGhlLWltZy1lbGVtZW50XG4gICAgICAgIC8vICAgXCJUaGUgdmFsdWUgb2YgYGNvbXBsZXRlYCBjYW4gdGh1cyBjaGFuZ2Ugd2hpbGUgYSBzY3JpcHQgaXMgZXhlY3V0aW5nLlwiXG4gICAgICAgIC8vIFNvIGNvbXBsZXRlIG5lZWRzIHRvIGJlIHJlLWNoZWNrZWQgYWZ0ZXIgdGhlIGNhbGxiYWNrcyBoYXZlIGJlZW4gYWRkZWQuLlxuICAgICAgICAvLyBOT1RFOiBjb21wbGV0ZSB3aWxsIGJlIHRydWUgaWYgdGhlIGltYWdlIGhhcyBubyBzcmMgc28gYmVzdCB0byBjaGVjayBpZiB0aGUgc3JjIGlzIHNldC5cbiAgICAgICAgaWYgKHNvdXJjZS5jb21wbGV0ZSAmJiBzb3VyY2Uuc3JjKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmlzTG9hZGluZyA9IGZhbHNlO1xuXG4gICAgICAgICAgICAvLyAuLmFuZCBpZiB3ZSdyZSBjb21wbGV0ZSBub3csIG5vIG5lZWQgZm9yIGNhbGxiYWNrc1xuICAgICAgICAgICAgc291cmNlLm9ubG9hZCA9IG51bGw7XG4gICAgICAgICAgICBzb3VyY2Uub25lcnJvciA9IG51bGw7XG5cbiAgICAgICAgICAgIGlmIChzb3VyY2Uud2lkdGggJiYgc291cmNlLmhlaWdodClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9zb3VyY2VMb2FkZWQoKTtcblxuICAgICAgICAgICAgICAgIC8vIElmIGFueSBwcmV2aW91cyBzdWJzY3JpYmVycyBwb3NzaWJsZVxuICAgICAgICAgICAgICAgIGlmICh3YXNMb2FkaW5nKVxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5lbWl0KCdsb2FkZWQnLCB0aGlzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgLy8gSWYgYW55IHByZXZpb3VzIHN1YnNjcmliZXJzIHBvc3NpYmxlXG4gICAgICAgICAgICAgICAgaWYgKHdhc0xvYWRpbmcpXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmVtaXQoJ2Vycm9yJywgdGhpcyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxufTtcblxuLyoqXG4gKiBVc2VkIGludGVybmFsbHkgdG8gdXBkYXRlIHRoZSB3aWR0aCwgaGVpZ2h0LCBhbmQgc29tZSBvdGhlciB0cmFja2luZyB2YXJzIG9uY2VcbiAqIGEgc291cmNlIGhhcyBzdWNjZXNzZnVsbHkgbG9hZGVkLlxuICpcbiAqIEBwcml2YXRlXG4gKi9cbkJhc2VUZXh0dXJlLnByb3RvdHlwZS5fc291cmNlTG9hZGVkID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLmhhc0xvYWRlZCA9IHRydWU7XG4gICAgdGhpcy51cGRhdGUoKTtcbn07XG5cbi8qKlxuICogRGVzdHJveXMgdGhpcyBiYXNlIHRleHR1cmVcbiAqXG4gKi9cbkJhc2VUZXh0dXJlLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKClcbntcbiAgICBpZiAodGhpcy5pbWFnZVVybClcbiAgICB7XG4gICAgICAgIGRlbGV0ZSB1dGlscy5CYXNlVGV4dHVyZUNhY2hlW3RoaXMuaW1hZ2VVcmxdO1xuICAgICAgICBkZWxldGUgdXRpbHMuVGV4dHVyZUNhY2hlW3RoaXMuaW1hZ2VVcmxdO1xuXG4gICAgICAgIHRoaXMuaW1hZ2VVcmwgPSBudWxsO1xuXG4gICAgICAgIGlmICghbmF2aWdhdG9yLmlzQ29jb29uSlMpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuc291cmNlLnNyYyA9ICcnO1xuICAgICAgICB9XG4gICAgfVxuICAgIGVsc2UgaWYgKHRoaXMuc291cmNlICYmIHRoaXMuc291cmNlLl9waXhpSWQpXG4gICAge1xuICAgICAgICBkZWxldGUgdXRpbHMuQmFzZVRleHR1cmVDYWNoZVt0aGlzLnNvdXJjZS5fcGl4aUlkXTtcbiAgICB9XG5cbiAgICB0aGlzLnNvdXJjZSA9IG51bGw7XG5cbiAgICB0aGlzLmRpc3Bvc2UoKTtcbn07XG5cbi8qKlxuICogRnJlZXMgdGhlIHRleHR1cmUgZnJvbSBXZWJHTCBtZW1vcnkgd2l0aG91dCBkZXN0cm95aW5nIHRoaXMgdGV4dHVyZSBvYmplY3QuXG4gKiBUaGlzIG1lYW5zIHlvdSBjYW4gc3RpbGwgdXNlIHRoZSB0ZXh0dXJlIGxhdGVyIHdoaWNoIHdpbGwgdXBsb2FkIGl0IHRvIEdQVVxuICogbWVtb3J5IGFnYWluLlxuICpcbiAqL1xuQmFzZVRleHR1cmUucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKVxue1xuICAgIHRoaXMuZW1pdCgnZGlzcG9zZScsIHRoaXMpO1xuXG4gICAgLy8gdGhpcyBzaG91bGQgbm8gbG9uZ2VyIGJlIG5lZWRlZCwgdGhlIHJlbmRlcmVycyBzaG91bGQgY2xlYW51cCBhbGwgdGhlIGdsIHRleHR1cmVzLlxuICAgIC8vIHRoaXMuX2dsVGV4dHVyZXMgPSB7fTtcbn07XG5cbi8qKlxuICogQ2hhbmdlcyB0aGUgc291cmNlIGltYWdlIG9mIHRoZSB0ZXh0dXJlLlxuICogVGhlIG9yaWdpbmFsIHNvdXJjZSBtdXN0IGJlIGFuIEltYWdlIGVsZW1lbnQuXG4gKlxuICogQHBhcmFtIG5ld1NyYyB7c3RyaW5nfSB0aGUgcGF0aCBvZiB0aGUgaW1hZ2VcbiAqL1xuQmFzZVRleHR1cmUucHJvdG90eXBlLnVwZGF0ZVNvdXJjZUltYWdlID0gZnVuY3Rpb24gKG5ld1NyYylcbntcbiAgICB0aGlzLnNvdXJjZS5zcmMgPSBuZXdTcmM7XG5cbiAgICB0aGlzLmxvYWRTb3VyY2UodGhpcy5zb3VyY2UpO1xufTtcblxuLyoqXG4gKiBIZWxwZXIgZnVuY3Rpb24gdGhhdCBjcmVhdGVzIGEgYmFzZSB0ZXh0dXJlIGZyb20gdGhlIGdpdmVuIGltYWdlIHVybC5cbiAqIElmIHRoZSBpbWFnZSBpcyBub3QgaW4gdGhlIGJhc2UgdGV4dHVyZSBjYWNoZSBpdCB3aWxsIGJlIGNyZWF0ZWQgYW5kIGxvYWRlZC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAcGFyYW0gaW1hZ2VVcmwge3N0cmluZ30gVGhlIGltYWdlIHVybCBvZiB0aGUgdGV4dHVyZVxuICogQHBhcmFtIFtjcm9zc29yaWdpbj0oYXV0byldIHtib29sZWFufSBTaG91bGQgdXNlIGFub255bW91cyBDT1JTPyBEZWZhdWx0cyB0byB0cnVlIGlmIHRoZSBVUkwgaXMgbm90IGEgZGF0YS1VUkkuXG4gKiBAcGFyYW0gW3NjYWxlTW9kZT1QSVhJLlNDQUxFX01PREVTLkRFRkFVTFRdIHtudW1iZXJ9IFNlZSB7QGxpbmsgUElYSS5TQ0FMRV9NT0RFU30gZm9yIHBvc3NpYmxlIHZhbHVlc1xuICogQHJldHVybiBQSVhJLkJhc2VUZXh0dXJlXG4gKi9cbkJhc2VUZXh0dXJlLmZyb21JbWFnZSA9IGZ1bmN0aW9uIChpbWFnZVVybCwgY3Jvc3NvcmlnaW4sIHNjYWxlTW9kZSlcbntcbiAgICB2YXIgYmFzZVRleHR1cmUgPSB1dGlscy5CYXNlVGV4dHVyZUNhY2hlW2ltYWdlVXJsXTtcblxuICAgIGlmIChjcm9zc29yaWdpbiA9PT0gdW5kZWZpbmVkICYmIGltYWdlVXJsLmluZGV4T2YoJ2RhdGE6JykgIT09IDApXG4gICAge1xuICAgICAgICBjcm9zc29yaWdpbiA9IHRydWU7XG4gICAgfVxuXG4gICAgaWYgKCFiYXNlVGV4dHVyZSlcbiAgICB7XG4gICAgICAgIC8vIG5ldyBJbWFnZSgpIGJyZWFrcyB0ZXggbG9hZGluZyBpbiBzb21lIHZlcnNpb25zIG9mIENocm9tZS5cbiAgICAgICAgLy8gU2VlIGh0dHBzOi8vY29kZS5nb29nbGUuY29tL3AvY2hyb21pdW0vaXNzdWVzL2RldGFpbD9pZD0yMzgwNzFcbiAgICAgICAgdmFyIGltYWdlID0gbmV3IEltYWdlKCk7Ly9kb2N1bWVudC5jcmVhdGVFbGVtZW50KCdpbWcnKTtcbiAgICAgICAgaWYgKGNyb3Nzb3JpZ2luKVxuICAgICAgICB7XG4gICAgICAgICAgICBpbWFnZS5jcm9zc09yaWdpbiA9ICcnO1xuICAgICAgICB9XG5cbiAgICAgICAgYmFzZVRleHR1cmUgPSBuZXcgQmFzZVRleHR1cmUoaW1hZ2UsIHNjYWxlTW9kZSk7XG4gICAgICAgIGJhc2VUZXh0dXJlLmltYWdlVXJsID0gaW1hZ2VVcmw7XG5cbiAgICAgICAgaW1hZ2Uuc3JjID0gaW1hZ2VVcmw7XG5cbiAgICAgICAgdXRpbHMuQmFzZVRleHR1cmVDYWNoZVtpbWFnZVVybF0gPSBiYXNlVGV4dHVyZTtcblxuICAgICAgICAvLyBpZiB0aGVyZSBpcyBhbiBAMnggYXQgdGhlIGVuZCBvZiB0aGUgdXJsIHdlIGFyZSBnb2luZyB0byBhc3N1bWUgaXRzIGEgaGlnaHJlcyBpbWFnZVxuICAgICAgICBiYXNlVGV4dHVyZS5yZXNvbHV0aW9uID0gdXRpbHMuZ2V0UmVzb2x1dGlvbk9mVXJsKGltYWdlVXJsKTtcbiAgICB9XG5cbiAgICByZXR1cm4gYmFzZVRleHR1cmU7XG59O1xuXG4vKipcbiAqIEhlbHBlciBmdW5jdGlvbiB0aGF0IGNyZWF0ZXMgYSBiYXNlIHRleHR1cmUgZnJvbSB0aGUgZ2l2ZW4gY2FudmFzIGVsZW1lbnQuXG4gKlxuICogQHN0YXRpY1xuICogQHBhcmFtIGNhbnZhcyB7Q2FudmFzfSBUaGUgY2FudmFzIGVsZW1lbnQgc291cmNlIG9mIHRoZSB0ZXh0dXJlXG4gKiBAcGFyYW0gc2NhbGVNb2RlIHtudW1iZXJ9IFNlZSB7QGxpbmsgUElYSS5TQ0FMRV9NT0RFU30gZm9yIHBvc3NpYmxlIHZhbHVlc1xuICogQHJldHVybiBQSVhJLkJhc2VUZXh0dXJlXG4gKi9cbkJhc2VUZXh0dXJlLmZyb21DYW52YXMgPSBmdW5jdGlvbiAoY2FudmFzLCBzY2FsZU1vZGUpXG57XG4gICAgaWYgKCFjYW52YXMuX3BpeGlJZClcbiAgICB7XG4gICAgICAgIGNhbnZhcy5fcGl4aUlkID0gJ2NhbnZhc18nICsgdXRpbHMudWlkKCk7XG4gICAgfVxuXG4gICAgdmFyIGJhc2VUZXh0dXJlID0gdXRpbHMuQmFzZVRleHR1cmVDYWNoZVtjYW52YXMuX3BpeGlJZF07XG5cbiAgICBpZiAoIWJhc2VUZXh0dXJlKVxuICAgIHtcbiAgICAgICAgYmFzZVRleHR1cmUgPSBuZXcgQmFzZVRleHR1cmUoY2FudmFzLCBzY2FsZU1vZGUpO1xuICAgICAgICB1dGlscy5CYXNlVGV4dHVyZUNhY2hlW2NhbnZhcy5fcGl4aUlkXSA9IGJhc2VUZXh0dXJlO1xuICAgIH1cblxuICAgIHJldHVybiBiYXNlVGV4dHVyZTtcbn07XG4iLCJ2YXIgQmFzZVRleHR1cmUgPSByZXF1aXJlKCcuL0Jhc2VUZXh0dXJlJyksXG4gICAgVGV4dHVyZSA9IHJlcXVpcmUoJy4vVGV4dHVyZScpLFxuICAgIFJlbmRlclRhcmdldCA9IHJlcXVpcmUoJy4uL3JlbmRlcmVycy93ZWJnbC91dGlscy9SZW5kZXJUYXJnZXQnKSxcbiAgICBGaWx0ZXJNYW5hZ2VyID0gcmVxdWlyZSgnLi4vcmVuZGVyZXJzL3dlYmdsL21hbmFnZXJzL0ZpbHRlck1hbmFnZXInKSxcbiAgICBDYW52YXNCdWZmZXIgPSByZXF1aXJlKCcuLi9yZW5kZXJlcnMvY2FudmFzL3V0aWxzL0NhbnZhc0J1ZmZlcicpLFxuICAgIG1hdGggPSByZXF1aXJlKCcuLi9tYXRoJyksXG4gICAgQ09OU1QgPSByZXF1aXJlKCcuLi9jb25zdCcpLFxuICAgIHRlbXBNYXRyaXggPSBuZXcgbWF0aC5NYXRyaXgoKTtcblxuLyoqXG4gKiBBIFJlbmRlclRleHR1cmUgaXMgYSBzcGVjaWFsIHRleHR1cmUgdGhhdCBhbGxvd3MgYW55IFBpeGkgZGlzcGxheSBvYmplY3QgdG8gYmUgcmVuZGVyZWQgdG8gaXQuXG4gKlxuICogX19IaW50X186IEFsbCBEaXNwbGF5T2JqZWN0cyAoaS5lLiBTcHJpdGVzKSB0aGF0IHJlbmRlciB0byBhIFJlbmRlclRleHR1cmUgc2hvdWxkIGJlIHByZWxvYWRlZFxuICogb3RoZXJ3aXNlIGJsYWNrIHJlY3RhbmdsZXMgd2lsbCBiZSBkcmF3biBpbnN0ZWFkLlxuICpcbiAqIEEgUmVuZGVyVGV4dHVyZSB0YWtlcyBhIHNuYXBzaG90IG9mIGFueSBEaXNwbGF5IE9iamVjdCBnaXZlbiB0byBpdHMgcmVuZGVyIG1ldGhvZC4gVGhlIHBvc2l0aW9uXG4gKiBhbmQgcm90YXRpb24gb2YgdGhlIGdpdmVuIERpc3BsYXkgT2JqZWN0cyBpcyBpZ25vcmVkLiBGb3IgZXhhbXBsZTpcbiAqXG4gKiBgYGBqc1xuICogdmFyIHJlbmRlcmVyID0gUElYSS5hdXRvRGV0ZWN0UmVuZGVyZXIoMTAyNCwgMTAyNCwgeyB2aWV3OiBjYW52YXMsIHJhdGlvOiAxIH0pO1xuICogdmFyIHJlbmRlclRleHR1cmUgPSBuZXcgUElYSS5SZW5kZXJUZXh0dXJlKHJlbmRlcmVyLCA4MDAsIDYwMCk7XG4gKiB2YXIgc3ByaXRlID0gUElYSS5TcHJpdGUuZnJvbUltYWdlKFwic3Bpbk9ial8wMS5wbmdcIik7XG4gKlxuICogc3ByaXRlLnBvc2l0aW9uLnggPSA4MDAvMjtcbiAqIHNwcml0ZS5wb3NpdGlvbi55ID0gNjAwLzI7XG4gKiBzcHJpdGUuYW5jaG9yLnggPSAwLjU7XG4gKiBzcHJpdGUuYW5jaG9yLnkgPSAwLjU7XG4gKlxuICogcmVuZGVyVGV4dHVyZS5yZW5kZXIoc3ByaXRlKTtcbiAqIGBgYFxuICpcbiAqIFRoZSBTcHJpdGUgaW4gdGhpcyBjYXNlIHdpbGwgYmUgcmVuZGVyZWQgdG8gYSBwb3NpdGlvbiBvZiAwLDAuIFRvIHJlbmRlciB0aGlzIHNwcml0ZSBhdCBpdHMgYWN0dWFsXG4gKiBwb3NpdGlvbiBhIENvbnRhaW5lciBzaG91bGQgYmUgdXNlZDpcbiAqXG4gKiBgYGBqc1xuICogdmFyIGRvYyA9IG5ldyBQSVhJLkNvbnRhaW5lcigpO1xuICpcbiAqIGRvYy5hZGRDaGlsZChzcHJpdGUpO1xuICpcbiAqIHJlbmRlclRleHR1cmUucmVuZGVyKGRvYyk7ICAvLyBSZW5kZXJzIHRvIGNlbnRlciBvZiByZW5kZXJUZXh0dXJlXG4gKiBgYGBcbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuVGV4dHVyZVxuICogQG1lbWJlcm9mIFBJWElcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5DYW52YXNSZW5kZXJlcnxQSVhJLldlYkdMUmVuZGVyZXJ9IFRoZSByZW5kZXJlciB1c2VkIGZvciB0aGlzIFJlbmRlclRleHR1cmVcbiAqIEBwYXJhbSBbd2lkdGg9MTAwXSB7bnVtYmVyfSBUaGUgd2lkdGggb2YgdGhlIHJlbmRlciB0ZXh0dXJlXG4gKiBAcGFyYW0gW2hlaWdodD0xMDBdIHtudW1iZXJ9IFRoZSBoZWlnaHQgb2YgdGhlIHJlbmRlciB0ZXh0dXJlXG4gKiBAcGFyYW0gW3NjYWxlTW9kZV0ge251bWJlcn0gU2VlIHtAbGluayBQSVhJLlNDQUxFX01PREVTfSBmb3IgcG9zc2libGUgdmFsdWVzXG4gKiBAcGFyYW0gW3Jlc29sdXRpb249MV0ge251bWJlcn0gVGhlIHJlc29sdXRpb24gb2YgdGhlIHRleHR1cmUgYmVpbmcgZ2VuZXJhdGVkXG4gKi9cbmZ1bmN0aW9uIFJlbmRlclRleHR1cmUocmVuZGVyZXIsIHdpZHRoLCBoZWlnaHQsIHNjYWxlTW9kZSwgcmVzb2x1dGlvbilcbntcbiAgICBpZiAoIXJlbmRlcmVyKVxuICAgIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdVbmFibGUgdG8gY3JlYXRlIFJlbmRlclRleHR1cmUsIHlvdSBtdXN0IHBhc3MgYSByZW5kZXJlciBpbnRvIHRoZSBjb25zdHJ1Y3Rvci4nKTtcbiAgICB9XG5cbiAgICB3aWR0aCA9IHdpZHRoIHx8IDEwMDtcbiAgICBoZWlnaHQgPSBoZWlnaHQgfHwgMTAwO1xuICAgIHJlc29sdXRpb24gPSByZXNvbHV0aW9uIHx8IENPTlNULlJFU09MVVRJT047XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYmFzZSB0ZXh0dXJlIG9iamVjdCB0aGF0IHRoaXMgdGV4dHVyZSB1c2VzXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtCYXNlVGV4dHVyZX1cbiAgICAgKi9cbiAgICB2YXIgYmFzZVRleHR1cmUgPSBuZXcgQmFzZVRleHR1cmUoKTtcbiAgICBiYXNlVGV4dHVyZS53aWR0aCA9IHdpZHRoO1xuICAgIGJhc2VUZXh0dXJlLmhlaWdodCA9IGhlaWdodDtcbiAgICBiYXNlVGV4dHVyZS5yZXNvbHV0aW9uID0gcmVzb2x1dGlvbjtcbiAgICBiYXNlVGV4dHVyZS5zY2FsZU1vZGUgPSBzY2FsZU1vZGUgfHwgQ09OU1QuU0NBTEVfTU9ERVMuREVGQVVMVDtcbiAgICBiYXNlVGV4dHVyZS5oYXNMb2FkZWQgPSB0cnVlO1xuXG5cbiAgICBUZXh0dXJlLmNhbGwodGhpcyxcbiAgICAgICAgYmFzZVRleHR1cmUsXG4gICAgICAgIG5ldyBtYXRoLlJlY3RhbmdsZSgwLCAwLCB3aWR0aCwgaGVpZ2h0KVxuICAgICk7XG5cblxuICAgIC8qKlxuICAgICAqIFRoZSB3aXRoIG9mIHRoZSByZW5kZXIgdGV4dHVyZVxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMud2lkdGggPSB3aWR0aDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBoZWlnaHQgb2YgdGhlIHJlbmRlciB0ZXh0dXJlXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy5oZWlnaHQgPSBoZWlnaHQ7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgUmVzb2x1dGlvbiBvZiB0aGUgdGV4dHVyZS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLnJlc29sdXRpb24gPSByZXNvbHV0aW9uO1xuXG4gICAgLyoqXG4gICAgICogRHJhdy9yZW5kZXIgdGhlIGdpdmVuIERpc3BsYXlPYmplY3Qgb250byB0aGUgdGV4dHVyZS5cbiAgICAgKlxuICAgICAqIFRoZSBkaXNwbGF5T2JqZWN0IGFuZCBkZXNjZW5kZW50cyBhcmUgdHJhbnNmb3JtZWQgZHVyaW5nIHRoaXMgb3BlcmF0aW9uLlxuICAgICAqIElmIGB1cGRhdGVUcmFuc2Zvcm1gIGlzIHRydWUgdGhlbiB0aGUgdHJhbnNmb3JtYXRpb25zIHdpbGwgYmUgcmVzdG9yZWQgYmVmb3JlIHRoZVxuICAgICAqIG1ldGhvZCByZXR1cm5zLiBPdGhlcndpc2UgaXQgaXMgdXAgdG8gdGhlIGNhbGxpbmcgY29kZSB0byBjb3JyZWN0bHkgdXNlIG9yIHJlc2V0XG4gICAgICogdGhlIHRyYW5zZm9ybWVkIGRpc3BsYXkgb2JqZWN0cy5cbiAgICAgKlxuICAgICAqIFRoZSBkaXNwbGF5IG9iamVjdCBpcyBhbHdheXMgcmVuZGVyZWQgd2l0aCBhIHdvcmxkQWxwaGEgdmFsdWUgb2YgMS5cbiAgICAgKlxuICAgICAqIEBtZXRob2RcbiAgICAgKiBAcGFyYW0gZGlzcGxheU9iamVjdCB7UElYSS5EaXNwbGF5T2JqZWN0fSBUaGUgZGlzcGxheSBvYmplY3QgdG8gcmVuZGVyIHRoaXMgdGV4dHVyZSBvblxuICAgICAqIEBwYXJhbSBbbWF0cml4XSB7UElYSS5NYXRyaXh9IE9wdGlvbmFsIG1hdHJpeCB0byBhcHBseSB0byB0aGUgZGlzcGxheSBvYmplY3QgYmVmb3JlIHJlbmRlcmluZy5cbiAgICAgKiBAcGFyYW0gW2NsZWFyPWZhbHNlXSB7Ym9vbGVhbn0gSWYgdHJ1ZSB0aGUgdGV4dHVyZSB3aWxsIGJlIGNsZWFyZWQgYmVmb3JlIHRoZSBkaXNwbGF5T2JqZWN0IGlzIGRyYXduXG4gICAgICogQHBhcmFtIFt1cGRhdGVUcmFuc2Zvcm09dHJ1ZV0ge2Jvb2xlYW59IElmIHRydWUgdGhlIGRpc3BsYXlPYmplY3QncyB3b3JsZFRyYW5zZm9ybS93b3JsZEFscGhhIGFuZCBhbGwgY2hpbGRyZW5cbiAgICAgKiAgdHJhbnNmb3JtYXRpb25zIHdpbGwgYmUgcmVzdG9yZWQuIE5vdCByZXN0b3JpbmcgdGhpcyBpbmZvcm1hdGlvbiB3aWxsIGJlIGEgbGl0dGxlIGZhc3Rlci5cbiAgICAgKi9cbiAgICB0aGlzLnJlbmRlciA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgcmVuZGVyZXIgdGhpcyBSZW5kZXJUZXh0dXJlIHVzZXMuIEEgUmVuZGVyVGV4dHVyZSBjYW4gb25seSBiZWxvbmcgdG8gb25lIHJlbmRlcmVyIGF0IHRoZSBtb21lbnQgaWYgaXRzIHdlYkdMLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5DYW52YXNSZW5kZXJlcnxQSVhJLldlYkdMUmVuZGVyZXJ9XG4gICAgICovXG4gICAgdGhpcy5yZW5kZXJlciA9IHJlbmRlcmVyO1xuXG4gICAgaWYgKHRoaXMucmVuZGVyZXIudHlwZSA9PT0gQ09OU1QuUkVOREVSRVJfVFlQRS5XRUJHTClcbiAgICB7XG4gICAgICAgIHZhciBnbCA9IHRoaXMucmVuZGVyZXIuZ2w7XG5cbiAgICAgICAgdGhpcy50ZXh0dXJlQnVmZmVyID0gbmV3IFJlbmRlclRhcmdldChnbCwgdGhpcy53aWR0aCwgdGhpcy5oZWlnaHQsIGJhc2VUZXh0dXJlLnNjYWxlTW9kZSwgdGhpcy5yZXNvbHV0aW9uKTsvLywgdGhpcy5iYXNlVGV4dHVyZS5zY2FsZU1vZGUpO1xuICAgICAgICB0aGlzLmJhc2VUZXh0dXJlLl9nbFRleHR1cmVzW2dsLmlkXSA9IHRoaXMudGV4dHVyZUJ1ZmZlci50ZXh0dXJlO1xuXG4gICAgICAgIC8vVE9ETyByZWZhY3RvciBmaWx0ZXIgbWFuYWdlci4uIGFzIHJlYWxseSBpdHMgbm8gbG9uZ2VyIGEgbWFuYWdlciBpZiB3ZSB1c2UgaXQgaGVyZS4uXG4gICAgICAgIHRoaXMuZmlsdGVyTWFuYWdlciA9IG5ldyBGaWx0ZXJNYW5hZ2VyKHRoaXMucmVuZGVyZXIpO1xuICAgICAgICB0aGlzLmZpbHRlck1hbmFnZXIub25Db250ZXh0Q2hhbmdlKCk7XG4gICAgICAgIHRoaXMuZmlsdGVyTWFuYWdlci5yZXNpemUod2lkdGgsIGhlaWdodCk7XG4gICAgICAgIHRoaXMucmVuZGVyID0gdGhpcy5yZW5kZXJXZWJHTDtcblxuICAgICAgICAvLyB0aGUgY3JlYXRpb24gb2YgYSBmaWx0ZXIgbWFuYWdlciB1bmJpbmRzIHRoZSBidWZmZXJzLi5cbiAgICAgICAgdGhpcy5yZW5kZXJlci5jdXJyZW50UmVuZGVyZXIuc3RhcnQoKTtcbiAgICAgICAgdGhpcy5yZW5kZXJlci5jdXJyZW50UmVuZGVyVGFyZ2V0LmFjdGl2YXRlKCk7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG5cbiAgICAgICAgdGhpcy5yZW5kZXIgPSB0aGlzLnJlbmRlckNhbnZhcztcbiAgICAgICAgdGhpcy50ZXh0dXJlQnVmZmVyID0gbmV3IENhbnZhc0J1ZmZlcih0aGlzLndpZHRoKiB0aGlzLnJlc29sdXRpb24sIHRoaXMuaGVpZ2h0KiB0aGlzLnJlc29sdXRpb24pO1xuICAgICAgICB0aGlzLmJhc2VUZXh0dXJlLnNvdXJjZSA9IHRoaXMudGV4dHVyZUJ1ZmZlci5jYW52YXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKi9cbiAgICB0aGlzLnZhbGlkID0gdHJ1ZTtcblxuICAgIHRoaXMuX3VwZGF0ZVV2cygpO1xufVxuXG5SZW5kZXJUZXh0dXJlLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoVGV4dHVyZS5wcm90b3R5cGUpO1xuUmVuZGVyVGV4dHVyZS5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBSZW5kZXJUZXh0dXJlO1xubW9kdWxlLmV4cG9ydHMgPSBSZW5kZXJUZXh0dXJlO1xuXG4vKipcbiAqIFJlc2l6ZXMgdGhlIFJlbmRlclRleHR1cmUuXG4gKlxuICogQHBhcmFtIHdpZHRoIHtudW1iZXJ9IFRoZSB3aWR0aCB0byByZXNpemUgdG8uXG4gKiBAcGFyYW0gaGVpZ2h0IHtudW1iZXJ9IFRoZSBoZWlnaHQgdG8gcmVzaXplIHRvLlxuICogQHBhcmFtIHVwZGF0ZUJhc2Uge2Jvb2xlYW59IFNob3VsZCB0aGUgYmFzZVRleHR1cmUud2lkdGggYW5kIGhlaWdodCB2YWx1ZXMgYmUgcmVzaXplZCBhcyB3ZWxsP1xuICovXG5SZW5kZXJUZXh0dXJlLnByb3RvdHlwZS5yZXNpemUgPSBmdW5jdGlvbiAod2lkdGgsIGhlaWdodCwgdXBkYXRlQmFzZSlcbntcbiAgICBpZiAod2lkdGggPT09IHRoaXMud2lkdGggJiYgaGVpZ2h0ID09PSB0aGlzLmhlaWdodClcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLnZhbGlkID0gKHdpZHRoID4gMCAmJiBoZWlnaHQgPiAwKTtcblxuICAgIHRoaXMud2lkdGggPSB0aGlzLl9mcmFtZS53aWR0aCA9IHRoaXMuY3JvcC53aWR0aCA9IHdpZHRoO1xuICAgIHRoaXMuaGVpZ2h0ID0gIHRoaXMuX2ZyYW1lLmhlaWdodCA9IHRoaXMuY3JvcC5oZWlnaHQgPSBoZWlnaHQ7XG5cbiAgICBpZiAodXBkYXRlQmFzZSlcbiAgICB7XG4gICAgICAgIHRoaXMuYmFzZVRleHR1cmUud2lkdGggPSB0aGlzLndpZHRoO1xuICAgICAgICB0aGlzLmJhc2VUZXh0dXJlLmhlaWdodCA9IHRoaXMuaGVpZ2h0O1xuICAgIH1cblxuICAgIGlmICghdGhpcy52YWxpZClcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLnRleHR1cmVCdWZmZXIucmVzaXplKHRoaXMud2lkdGgsIHRoaXMuaGVpZ2h0KTtcblxuICAgIGlmKHRoaXMuZmlsdGVyTWFuYWdlcilcbiAgICB7XG4gICAgICAgIHRoaXMuZmlsdGVyTWFuYWdlci5yZXNpemUodGhpcy53aWR0aCwgdGhpcy5oZWlnaHQpO1xuICAgIH1cbn07XG5cbi8qKlxuICogQ2xlYXJzIHRoZSBSZW5kZXJUZXh0dXJlLlxuICpcbiAqL1xuUmVuZGVyVGV4dHVyZS5wcm90b3R5cGUuY2xlYXIgPSBmdW5jdGlvbiAoKVxue1xuICAgIGlmICghdGhpcy52YWxpZClcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5yZW5kZXJlci50eXBlID09PSBDT05TVC5SRU5ERVJFUl9UWVBFLldFQkdMKVxuICAgIHtcbiAgICAgICAgdGhpcy5yZW5kZXJlci5nbC5iaW5kRnJhbWVidWZmZXIodGhpcy5yZW5kZXJlci5nbC5GUkFNRUJVRkZFUiwgdGhpcy50ZXh0dXJlQnVmZmVyLmZyYW1lQnVmZmVyKTtcbiAgICB9XG5cbiAgICB0aGlzLnRleHR1cmVCdWZmZXIuY2xlYXIoKTtcbn07XG5cbi8qKlxuICogSW50ZXJuYWwgbWV0aG9kIGFzc2lnbmVkIHRvIHRoZSBgcmVuZGVyYCBwcm9wZXJ0eSBpZiB1c2luZyBhIENhbnZhc1JlbmRlcmVyLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0gZGlzcGxheU9iamVjdCB7UElYSS5EaXNwbGF5T2JqZWN0fSBUaGUgZGlzcGxheSBvYmplY3QgdG8gcmVuZGVyIHRoaXMgdGV4dHVyZSBvblxuICogQHBhcmFtIFttYXRyaXhdIHtQSVhJLk1hdHJpeH0gT3B0aW9uYWwgbWF0cml4IHRvIGFwcGx5IHRvIHRoZSBkaXNwbGF5IG9iamVjdCBiZWZvcmUgcmVuZGVyaW5nLlxuICogQHBhcmFtIFtjbGVhcj1mYWxzZV0ge2Jvb2xlYW59IElmIHRydWUgdGhlIHRleHR1cmUgd2lsbCBiZSBjbGVhcmVkIGJlZm9yZSB0aGUgZGlzcGxheU9iamVjdCBpcyBkcmF3blxuICogQHBhcmFtIFt1cGRhdGVUcmFuc2Zvcm09dHJ1ZV0ge2Jvb2xlYW59IElmIHRydWUgdGhlIGRpc3BsYXlPYmplY3QncyB3b3JsZFRyYW5zZm9ybS93b3JsZEFscGhhIGFuZCBhbGwgY2hpbGRyZW5cbiAqICB0cmFuc2Zvcm1hdGlvbnMgd2lsbCBiZSByZXN0b3JlZC4gTm90IHJlc3RvcmluZyB0aGlzIGluZm9ybWF0aW9uIHdpbGwgYmUgYSBsaXR0bGUgZmFzdGVyLlxuICovXG5SZW5kZXJUZXh0dXJlLnByb3RvdHlwZS5yZW5kZXJXZWJHTCA9IGZ1bmN0aW9uIChkaXNwbGF5T2JqZWN0LCBtYXRyaXgsIGNsZWFyLCB1cGRhdGVUcmFuc2Zvcm0pXG57XG4gICAgaWYgKCF0aGlzLnZhbGlkKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuXG4gICAgdXBkYXRlVHJhbnNmb3JtID0gKHVwZGF0ZVRyYW5zZm9ybSAhPT0gdW5kZWZpbmVkKSA/IHVwZGF0ZVRyYW5zZm9ybSA6IHRydWU7Ly8hdXBkYXRlVHJhbnNmb3JtO1xuXG4gICAgdGhpcy50ZXh0dXJlQnVmZmVyLnRyYW5zZm9ybSA9IG1hdHJpeDtcblxuICAgIC8vVE9ETyBub3QgYSBmYW4gdGhhdCB0aGlzIGlzIGhlcmUuLi4gaXQgd2lsbCBtb3ZlIVxuICAgIHRoaXMudGV4dHVyZUJ1ZmZlci5hY3RpdmF0ZSgpO1xuXG4gICAgLy8gc2V0V29ybGQgQWxwaGEgdG8gZW5zdXJlIHRoYXQgdGhlIG9iamVjdCBpcyByZW5kZXJlciBhdCBmdWxsIG9wYWNpdHlcbiAgICBkaXNwbGF5T2JqZWN0LndvcmxkQWxwaGEgPSAxO1xuXG4gICAgaWYgKHVwZGF0ZVRyYW5zZm9ybSlcbiAgICB7XG5cbiAgICAgICAgLy8gcmVzZXQgdGhlIG1hdHJpeCBvZiB0aGUgZGlzcGxhdHlPYmplY3QuLlxuICAgICAgICBkaXNwbGF5T2JqZWN0LndvcmxkVHJhbnNmb3JtLmlkZW50aXR5KCk7XG5cbiAgICAgICAgZGlzcGxheU9iamVjdC5jdXJyZW50Qm91bmRzID0gbnVsbDtcblxuICAgICAgICAvLyBUaW1lIHRvIHVwZGF0ZSBhbGwgdGhlIGNoaWxkcmVuIG9mIHRoZSBkaXNwbGF5T2JqZWN0IHdpdGggdGhlIG5ldyBtYXRyaXguLlxuICAgICAgICB2YXIgY2hpbGRyZW4gPSBkaXNwbGF5T2JqZWN0LmNoaWxkcmVuO1xuICAgICAgICB2YXIgaSwgajtcblxuICAgICAgICBmb3IgKGkgPSAwLCBqID0gY2hpbGRyZW4ubGVuZ3RoOyBpIDwgajsgKytpKVxuICAgICAgICB7XG4gICAgICAgICAgICBjaGlsZHJlbltpXS51cGRhdGVUcmFuc2Zvcm0oKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vVE9ETyByZW5hbWUgdGV4dHVyZUJ1ZmZlciB0byByZW5kZXJUYXJnZXQuLlxuICAgIHZhciB0ZW1wID0gIHRoaXMucmVuZGVyZXIuZmlsdGVyTWFuYWdlcjtcblxuICAgIHRoaXMucmVuZGVyZXIuZmlsdGVyTWFuYWdlciA9IHRoaXMuZmlsdGVyTWFuYWdlcjtcbiAgICB0aGlzLnJlbmRlcmVyLnJlbmRlckRpc3BsYXlPYmplY3QoZGlzcGxheU9iamVjdCwgdGhpcy50ZXh0dXJlQnVmZmVyLCBjbGVhcik7XG5cbiAgICB0aGlzLnJlbmRlcmVyLmZpbHRlck1hbmFnZXIgPSB0ZW1wO1xufTtcblxuXG4vKipcbiAqIEludGVybmFsIG1ldGhvZCBhc3NpZ25lZCB0byB0aGUgYHJlbmRlcmAgcHJvcGVydHkgaWYgdXNpbmcgYSBDYW52YXNSZW5kZXJlci5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIGRpc3BsYXlPYmplY3Qge1BJWEkuRGlzcGxheU9iamVjdH0gVGhlIGRpc3BsYXkgb2JqZWN0IHRvIHJlbmRlciB0aGlzIHRleHR1cmUgb25cbiAqIEBwYXJhbSBbbWF0cml4XSB7UElYSS5NYXRyaXh9IE9wdGlvbmFsIG1hdHJpeCB0byBhcHBseSB0byB0aGUgZGlzcGxheSBvYmplY3QgYmVmb3JlIHJlbmRlcmluZy5cbiAqIEBwYXJhbSBbY2xlYXJdIHtib29sZWFufSBJZiB0cnVlIHRoZSB0ZXh0dXJlIHdpbGwgYmUgY2xlYXJlZCBiZWZvcmUgdGhlIGRpc3BsYXlPYmplY3QgaXMgZHJhd25cbiAqL1xuUmVuZGVyVGV4dHVyZS5wcm90b3R5cGUucmVuZGVyQ2FudmFzID0gZnVuY3Rpb24gKGRpc3BsYXlPYmplY3QsIG1hdHJpeCwgY2xlYXIsIHVwZGF0ZVRyYW5zZm9ybSlcbntcbiAgICBpZiAoIXRoaXMudmFsaWQpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdXBkYXRlVHJhbnNmb3JtID0gISF1cGRhdGVUcmFuc2Zvcm07XG5cbiAgICB2YXIgd3QgPSB0ZW1wTWF0cml4O1xuXG4gICAgd3QuaWRlbnRpdHkoKTtcblxuICAgIGlmIChtYXRyaXgpXG4gICAge1xuICAgICAgICB3dC5hcHBlbmQobWF0cml4KTtcbiAgICB9XG5cbiAgICB2YXIgY2FjaGVkV3QgPSBkaXNwbGF5T2JqZWN0LndvcmxkVHJhbnNmb3JtO1xuICAgIGRpc3BsYXlPYmplY3Qud29ybGRUcmFuc2Zvcm0gPSB3dDtcblxuICAgIC8vIHNldFdvcmxkIEFscGhhIHRvIGVuc3VyZSB0aGF0IHRoZSBvYmplY3QgaXMgcmVuZGVyZXIgYXQgZnVsbCBvcGFjaXR5XG4gICAgZGlzcGxheU9iamVjdC53b3JsZEFscGhhID0gMTtcblxuICAgIC8vIFRpbWUgdG8gdXBkYXRlIGFsbCB0aGUgY2hpbGRyZW4gb2YgdGhlIGRpc3BsYXlPYmplY3Qgd2l0aCB0aGUgbmV3IG1hdHJpeC4uXG4gICAgdmFyIGNoaWxkcmVuID0gZGlzcGxheU9iamVjdC5jaGlsZHJlbjtcbiAgICB2YXIgaSwgajtcblxuICAgIGZvciAoaSA9IDAsIGogPSBjaGlsZHJlbi5sZW5ndGg7IGkgPCBqOyArK2kpXG4gICAge1xuICAgICAgICBjaGlsZHJlbltpXS51cGRhdGVUcmFuc2Zvcm0oKTtcbiAgICB9XG5cbiAgICBpZiAoY2xlYXIpXG4gICAge1xuICAgICAgICB0aGlzLnRleHR1cmVCdWZmZXIuY2xlYXIoKTtcbiAgICB9XG5cblxuLy8gICAgdGhpcy50ZXh0dXJlQnVmZmVyLlxuICAgIHZhciBjb250ZXh0ID0gdGhpcy50ZXh0dXJlQnVmZmVyLmNvbnRleHQ7XG5cbiAgICB2YXIgcmVhbFJlc29sdXRpb24gPSB0aGlzLnJlbmRlcmVyLnJlc29sdXRpb247XG5cbiAgICB0aGlzLnJlbmRlcmVyLnJlc29sdXRpb24gPSB0aGlzLnJlc29sdXRpb247XG5cbiAgICB0aGlzLnJlbmRlcmVyLnJlbmRlckRpc3BsYXlPYmplY3QoZGlzcGxheU9iamVjdCwgY29udGV4dCk7XG5cbiAgICB0aGlzLnJlbmRlcmVyLnJlc29sdXRpb24gPSByZWFsUmVzb2x1dGlvbjtcblxuICAgIGlmKGRpc3BsYXlPYmplY3Qud29ybGRUcmFuc2Zvcm0gPT09IHd0KVxuICAgIHtcbiAgICAgICAgLy8gZml4ZXMgY2FjaGVBc0JpdG1hcCBIYXBwZW5pbmcgZHVyaW5nIHRoZSBhYm92ZS4uXG4gICAgICAgIGRpc3BsYXlPYmplY3Qud29ybGRUcmFuc2Zvcm0gPSBjYWNoZWRXdDtcbiAgICB9XG5cbn07XG5cbi8qKlxuICogRGVzdHJveXMgdGhpcyB0ZXh0dXJlXG4gKlxuICogQHBhcmFtIGRlc3Ryb3lCYXNlIHtib29sZWFufSBXaGV0aGVyIHRvIGRlc3Ryb3kgdGhlIGJhc2UgdGV4dHVyZSBhcyB3ZWxsXG4gKi9cblJlbmRlclRleHR1cmUucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoKVxue1xuICAgIFRleHR1cmUucHJvdG90eXBlLmRlc3Ryb3kuY2FsbCh0aGlzLCB0cnVlKTtcblxuICAgIHRoaXMudGV4dHVyZUJ1ZmZlci5kZXN0cm95KCk7XG5cbiAgICAvLyBkZXN0cm95IHRoZSBmaWx0ZXJtYW5hZ2VyLi5cbiAgICBpZih0aGlzLmZpbHRlck1hbmFnZXIpXG4gICAge1xuICAgICAgICB0aGlzLmZpbHRlck1hbmFnZXIuZGVzdHJveSgpO1xuICAgIH1cblxuICAgIHRoaXMucmVuZGVyZXIgPSBudWxsO1xufTtcblxuLyoqXG4gKiBXaWxsIHJldHVybiBhIEhUTUwgSW1hZ2Ugb2YgdGhlIHRleHR1cmVcbiAqXG4gKiBAcmV0dXJuIHtJbWFnZX1cbiAqL1xuUmVuZGVyVGV4dHVyZS5wcm90b3R5cGUuZ2V0SW1hZ2UgPSBmdW5jdGlvbiAoKVxue1xuICAgIHZhciBpbWFnZSA9IG5ldyBJbWFnZSgpO1xuICAgIGltYWdlLnNyYyA9IHRoaXMuZ2V0QmFzZTY0KCk7XG4gICAgcmV0dXJuIGltYWdlO1xufTtcblxuLyoqXG4gKiBXaWxsIHJldHVybiBhIGEgYmFzZTY0IGVuY29kZWQgc3RyaW5nIG9mIHRoaXMgdGV4dHVyZS4gSXQgd29ya3MgYnkgY2FsbGluZyBSZW5kZXJUZXh0dXJlLmdldENhbnZhcyBhbmQgdGhlbiBydW5uaW5nIHRvRGF0YVVSTCBvbiB0aGF0LlxuICpcbiAqIEByZXR1cm4ge3N0cmluZ30gQSBiYXNlNjQgZW5jb2RlZCBzdHJpbmcgb2YgdGhlIHRleHR1cmUuXG4gKi9cblJlbmRlclRleHR1cmUucHJvdG90eXBlLmdldEJhc2U2NCA9IGZ1bmN0aW9uICgpXG57XG4gICAgcmV0dXJuIHRoaXMuZ2V0Q2FudmFzKCkudG9EYXRhVVJMKCk7XG59O1xuXG4vKipcbiAqIENyZWF0ZXMgYSBDYW52YXMgZWxlbWVudCwgcmVuZGVycyB0aGlzIFJlbmRlclRleHR1cmUgdG8gaXQgYW5kIHRoZW4gcmV0dXJucyBpdC5cbiAqXG4gKiBAcmV0dXJuIHtIVE1MQ2FudmFzRWxlbWVudH0gQSBDYW52YXMgZWxlbWVudCB3aXRoIHRoZSB0ZXh0dXJlIHJlbmRlcmVkIG9uLlxuICovXG5SZW5kZXJUZXh0dXJlLnByb3RvdHlwZS5nZXRDYW52YXMgPSBmdW5jdGlvbiAoKVxue1xuICAgIGlmICh0aGlzLnJlbmRlcmVyLnR5cGUgPT09IENPTlNULlJFTkRFUkVSX1RZUEUuV0VCR0wpXG4gICAge1xuICAgICAgICB2YXIgZ2wgPSB0aGlzLnJlbmRlcmVyLmdsO1xuICAgICAgICB2YXIgd2lkdGggPSB0aGlzLnRleHR1cmVCdWZmZXIuc2l6ZS53aWR0aDtcbiAgICAgICAgdmFyIGhlaWdodCA9IHRoaXMudGV4dHVyZUJ1ZmZlci5zaXplLmhlaWdodDtcblxuICAgICAgICB2YXIgd2ViR0xQaXhlbHMgPSBuZXcgVWludDhBcnJheSg0ICogd2lkdGggKiBoZWlnaHQpO1xuXG4gICAgICAgIGdsLmJpbmRGcmFtZWJ1ZmZlcihnbC5GUkFNRUJVRkZFUiwgdGhpcy50ZXh0dXJlQnVmZmVyLmZyYW1lQnVmZmVyKTtcbiAgICAgICAgZ2wucmVhZFBpeGVscygwLCAwLCB3aWR0aCwgaGVpZ2h0LCBnbC5SR0JBLCBnbC5VTlNJR05FRF9CWVRFLCB3ZWJHTFBpeGVscyk7XG4gICAgICAgIGdsLmJpbmRGcmFtZWJ1ZmZlcihnbC5GUkFNRUJVRkZFUiwgbnVsbCk7XG5cbiAgICAgICAgdmFyIHRlbXBDYW52YXMgPSBuZXcgQ2FudmFzQnVmZmVyKHdpZHRoLCBoZWlnaHQpO1xuICAgICAgICB2YXIgY2FudmFzRGF0YSA9IHRlbXBDYW52YXMuY29udGV4dC5nZXRJbWFnZURhdGEoMCwgMCwgd2lkdGgsIGhlaWdodCk7XG4gICAgICAgIGNhbnZhc0RhdGEuZGF0YS5zZXQod2ViR0xQaXhlbHMpO1xuXG4gICAgICAgIHRlbXBDYW52YXMuY29udGV4dC5wdXRJbWFnZURhdGEoY2FudmFzRGF0YSwgMCwgMCk7XG5cbiAgICAgICAgcmV0dXJuIHRlbXBDYW52YXMuY2FudmFzO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICByZXR1cm4gdGhpcy50ZXh0dXJlQnVmZmVyLmNhbnZhcztcbiAgICB9XG59O1xuXG4vKipcbiAqIFdpbGwgcmV0dXJuIGEgb25lLWRpbWVuc2lvbmFsIGFycmF5IGNvbnRhaW5pbmcgdGhlIHBpeGVsIGRhdGEgb2YgdGhlIGVudGlyZSB0ZXh0dXJlIGluIFJHQkEgb3JkZXIsIHdpdGggaW50ZWdlciB2YWx1ZXMgYmV0d2VlbiAwIGFuZCAyNTUgKGluY2x1ZGVkKS5cbiAqXG4gKiBAcmV0dXJuIHtVaW50OENsYW1wZWRBcnJheX1cbiAqL1xuUmVuZGVyVGV4dHVyZS5wcm90b3R5cGUuZ2V0UGl4ZWxzID0gZnVuY3Rpb24gKClcbntcbiAgICB2YXIgd2lkdGgsIGhlaWdodDtcblxuICAgIGlmICh0aGlzLnJlbmRlcmVyLnR5cGUgPT09IENPTlNULlJFTkRFUkVSX1RZUEUuV0VCR0wpXG4gICAge1xuICAgICAgICB2YXIgZ2wgPSB0aGlzLnJlbmRlcmVyLmdsO1xuICAgICAgICB3aWR0aCA9IHRoaXMudGV4dHVyZUJ1ZmZlci5zaXplLndpZHRoO1xuICAgICAgICBoZWlnaHQgPSB0aGlzLnRleHR1cmVCdWZmZXIuc2l6ZS5oZWlnaHQ7XG5cbiAgICAgICAgdmFyIHdlYkdMUGl4ZWxzID0gbmV3IFVpbnQ4QXJyYXkoNCAqIHdpZHRoICogaGVpZ2h0KTtcblxuICAgICAgICBnbC5iaW5kRnJhbWVidWZmZXIoZ2wuRlJBTUVCVUZGRVIsIHRoaXMudGV4dHVyZUJ1ZmZlci5mcmFtZUJ1ZmZlcik7XG4gICAgICAgIGdsLnJlYWRQaXhlbHMoMCwgMCwgd2lkdGgsIGhlaWdodCwgZ2wuUkdCQSwgZ2wuVU5TSUdORURfQllURSwgd2ViR0xQaXhlbHMpO1xuICAgICAgICBnbC5iaW5kRnJhbWVidWZmZXIoZ2wuRlJBTUVCVUZGRVIsIG51bGwpO1xuXG4gICAgICAgIHJldHVybiB3ZWJHTFBpeGVscztcbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgd2lkdGggPSB0aGlzLnRleHR1cmVCdWZmZXIuY2FudmFzLndpZHRoO1xuICAgICAgICBoZWlnaHQgPSB0aGlzLnRleHR1cmVCdWZmZXIuY2FudmFzLmhlaWdodDtcblxuICAgICAgICByZXR1cm4gdGhpcy50ZXh0dXJlQnVmZmVyLmNhbnZhcy5nZXRDb250ZXh0KCcyZCcpLmdldEltYWdlRGF0YSgwLCAwLCB3aWR0aCwgaGVpZ2h0KS5kYXRhO1xuICAgIH1cbn07XG5cbi8qKlxuICogV2lsbCByZXR1cm4gYSBvbmUtZGltZW5zaW9uYWwgYXJyYXkgY29udGFpbmluZyB0aGUgcGl4ZWwgZGF0YSBvZiBhIHBpeGVsIHdpdGhpbiB0aGUgdGV4dHVyZSBpbiBSR0JBIG9yZGVyLCB3aXRoIGludGVnZXIgdmFsdWVzIGJldHdlZW4gMCBhbmQgMjU1IChpbmNsdWRlZCkuXG4gKlxuICogQHBhcmFtIHgge251bWJlcn0gVGhlIHggY29vcmRpbmF0ZSBvZiB0aGUgcGl4ZWwgdG8gcmV0cmlldmUuXG4gKiBAcGFyYW0geSB7bnVtYmVyfSBUaGUgeSBjb29yZGluYXRlIG9mIHRoZSBwaXhlbCB0byByZXRyaWV2ZS5cbiAqIEByZXR1cm4ge1VpbnQ4Q2xhbXBlZEFycmF5fVxuICovXG5SZW5kZXJUZXh0dXJlLnByb3RvdHlwZS5nZXRQaXhlbCA9IGZ1bmN0aW9uICh4LCB5KVxue1xuICAgIGlmICh0aGlzLnJlbmRlcmVyLnR5cGUgPT09IENPTlNULlJFTkRFUkVSX1RZUEUuV0VCR0wpXG4gICAge1xuICAgICAgICB2YXIgZ2wgPSB0aGlzLnJlbmRlcmVyLmdsO1xuXG4gICAgICAgIHZhciB3ZWJHTFBpeGVscyA9IG5ldyBVaW50OEFycmF5KDQpO1xuXG4gICAgICAgIGdsLmJpbmRGcmFtZWJ1ZmZlcihnbC5GUkFNRUJVRkZFUiwgdGhpcy50ZXh0dXJlQnVmZmVyLmZyYW1lQnVmZmVyKTtcbiAgICAgICAgZ2wucmVhZFBpeGVscyh4LCB5LCAxLCAxLCBnbC5SR0JBLCBnbC5VTlNJR05FRF9CWVRFLCB3ZWJHTFBpeGVscyk7XG4gICAgICAgIGdsLmJpbmRGcmFtZWJ1ZmZlcihnbC5GUkFNRUJVRkZFUiwgbnVsbCk7XG5cbiAgICAgICAgcmV0dXJuIHdlYkdMUGl4ZWxzO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICByZXR1cm4gdGhpcy50ZXh0dXJlQnVmZmVyLmNhbnZhcy5nZXRDb250ZXh0KCcyZCcpLmdldEltYWdlRGF0YSh4LCB5LCAxLCAxKS5kYXRhO1xuICAgIH1cbn07XG4iLCJ2YXIgQmFzZVRleHR1cmUgPSByZXF1aXJlKCcuL0Jhc2VUZXh0dXJlJyksXG4gICAgVmlkZW9CYXNlVGV4dHVyZSA9IHJlcXVpcmUoJy4vVmlkZW9CYXNlVGV4dHVyZScpLFxuICAgIFRleHR1cmVVdnMgPSByZXF1aXJlKCcuL1RleHR1cmVVdnMnKSxcbiAgICBFdmVudEVtaXR0ZXIgPSByZXF1aXJlKCdldmVudGVtaXR0ZXIzJyksXG4gICAgbWF0aCA9IHJlcXVpcmUoJy4uL21hdGgnKSxcbiAgICB1dGlscyA9IHJlcXVpcmUoJy4uL3V0aWxzJyk7XG5cbi8qKlxuICogQSB0ZXh0dXJlIHN0b3JlcyB0aGUgaW5mb3JtYXRpb24gdGhhdCByZXByZXNlbnRzIGFuIGltYWdlIG9yIHBhcnQgb2YgYW4gaW1hZ2UuIEl0IGNhbm5vdCBiZSBhZGRlZFxuICogdG8gdGhlIGRpc3BsYXkgbGlzdCBkaXJlY3RseS4gSW5zdGVhZCB1c2UgaXQgYXMgdGhlIHRleHR1cmUgZm9yIGEgU3ByaXRlLiBJZiBubyBmcmFtZSBpcyBwcm92aWRlZCB0aGVuIHRoZSB3aG9sZSBpbWFnZSBpcyB1c2VkLlxuICpcbiAqIFlvdSBjYW4gZGlyZWN0bHkgY3JlYXRlIGEgdGV4dHVyZSBmcm9tIGFuIGltYWdlIGFuZCB0aGVuIHJldXNlIGl0IG11bHRpcGxlIHRpbWVzIGxpa2UgdGhpcyA6XG4gKlxuICogYGBganNcbiAqIHZhciB0ZXh0dXJlID0gUElYSS5UZXh0dXJlLmZyb21JbWFnZSgnYXNzZXRzL2ltYWdlLnBuZycpO1xuICogdmFyIHNwcml0ZTEgPSBuZXcgUElYSS5TcHJpdGUodGV4dHVyZSk7XG4gKiB2YXIgc3ByaXRlMiA9IG5ldyBQSVhJLlNwcml0ZSh0ZXh0dXJlKTtcbiAqIGBgYFxuICpcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqIEBwYXJhbSBiYXNlVGV4dHVyZSB7UElYSS5CYXNlVGV4dHVyZX0gVGhlIGJhc2UgdGV4dHVyZSBzb3VyY2UgdG8gY3JlYXRlIHRoZSB0ZXh0dXJlIGZyb21cbiAqIEBwYXJhbSBbZnJhbWVdIHtQSVhJLlJlY3RhbmdsZX0gVGhlIHJlY3RhbmdsZSBmcmFtZSBvZiB0aGUgdGV4dHVyZSB0byBzaG93XG4gKiBAcGFyYW0gW2Nyb3BdIHtQSVhJLlJlY3RhbmdsZX0gVGhlIGFyZWEgb2Ygb3JpZ2luYWwgdGV4dHVyZVxuICogQHBhcmFtIFt0cmltXSB7UElYSS5SZWN0YW5nbGV9IFRyaW1tZWQgdGV4dHVyZSByZWN0YW5nbGVcbiAqIEBwYXJhbSBbcm90YXRlXSB7Ym9vbGVhbn0gaW5kaWNhdGVzIHdoZXRoZXIgdGhlIHRleHR1cmUgc2hvdWxkIGJlIHJvdGF0ZWQgYnkgOTAgZGVncmVlcyAoIHVzZWQgYnkgdGV4dHVyZSBwYWNrZXIgKVxuICovXG5mdW5jdGlvbiBUZXh0dXJlKGJhc2VUZXh0dXJlLCBmcmFtZSwgY3JvcCwgdHJpbSwgcm90YXRlKVxue1xuICAgIEV2ZW50RW1pdHRlci5jYWxsKHRoaXMpO1xuXG4gICAgLyoqXG4gICAgICogRG9lcyB0aGlzIFRleHR1cmUgaGF2ZSBhbnkgZnJhbWUgZGF0YSBhc3NpZ25lZCB0byBpdD9cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICovXG4gICAgdGhpcy5ub0ZyYW1lID0gZmFsc2U7XG5cbiAgICBpZiAoIWZyYW1lKVxuICAgIHtcbiAgICAgICAgdGhpcy5ub0ZyYW1lID0gdHJ1ZTtcbiAgICAgICAgZnJhbWUgPSBuZXcgbWF0aC5SZWN0YW5nbGUoMCwgMCwgMSwgMSk7XG4gICAgfVxuXG4gICAgaWYgKGJhc2VUZXh0dXJlIGluc3RhbmNlb2YgVGV4dHVyZSlcbiAgICB7XG4gICAgICAgIGJhc2VUZXh0dXJlID0gYmFzZVRleHR1cmUuYmFzZVRleHR1cmU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhlIGJhc2UgdGV4dHVyZSB0aGF0IHRoaXMgdGV4dHVyZSB1c2VzLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5CYXNlVGV4dHVyZX1cbiAgICAgKi9cbiAgICB0aGlzLmJhc2VUZXh0dXJlID0gYmFzZVRleHR1cmU7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgZnJhbWUgc3BlY2lmaWVzIHRoZSByZWdpb24gb2YgdGhlIGJhc2UgdGV4dHVyZSB0aGF0IHRoaXMgdGV4dHVyZSB1c2VzXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlJlY3RhbmdsZX1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX2ZyYW1lID0gZnJhbWU7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgdGV4dHVyZSB0cmltIGRhdGEuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlJlY3RhbmdsZX1cbiAgICAgKi9cbiAgICB0aGlzLnRyaW0gPSB0cmltO1xuXG4gICAgLyoqXG4gICAgICogVGhpcyB3aWxsIGxldCB0aGUgcmVuZGVyZXIga25vdyBpZiB0aGUgdGV4dHVyZSBpcyB2YWxpZC4gSWYgaXQncyBub3QgdGhlbiBpdCBjYW5ub3QgYmUgcmVuZGVyZWQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqL1xuICAgIHRoaXMudmFsaWQgPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIFRoaXMgd2lsbCBsZXQgYSByZW5kZXJlciBrbm93IHRoYXQgYSB0ZXh0dXJlIGhhcyBiZWVuIHVwZGF0ZWQgKHVzZWQgbWFpbmx5IGZvciB3ZWJHTCB1diB1cGRhdGVzKVxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKi9cbiAgICB0aGlzLnJlcXVpcmVzVXBkYXRlID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgV2ViR0wgVVYgZGF0YSBjYWNoZS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuVGV4dHVyZVV2c31cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX3V2cyA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgd2lkdGggb2YgdGhlIFRleHR1cmUgaW4gcGl4ZWxzLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMud2lkdGggPSAwO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGhlaWdodCBvZiB0aGUgVGV4dHVyZSBpbiBwaXhlbHMuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy5oZWlnaHQgPSAwO1xuXG4gICAgLyoqXG4gICAgICogVGhpcyBpcyB0aGUgYXJlYSBvZiB0aGUgQmFzZVRleHR1cmUgaW1hZ2UgdG8gYWN0dWFsbHkgY29weSB0byB0aGUgQ2FudmFzIC8gV2ViR0wgd2hlbiByZW5kZXJpbmcsXG4gICAgICogaXJyZXNwZWN0aXZlIG9mIHRoZSBhY3R1YWwgZnJhbWUgc2l6ZSBvciBwbGFjZW1lbnQgKHdoaWNoIGNhbiBiZSBpbmZsdWVuY2VkIGJ5IHRyaW1tZWQgdGV4dHVyZSBhdGxhc2VzKVxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5SZWN0YW5nbGV9XG4gICAgICovXG4gICAgdGhpcy5jcm9wID0gY3JvcCB8fCBmcmFtZTsvL25ldyBtYXRoLlJlY3RhbmdsZSgwLCAwLCAxLCAxKTtcblxuICAgIC8qKlxuICAgICAqIEluZGljYXRlcyB3aGV0aGVyIHRoZSB0ZXh0dXJlIHNob3VsZCBiZSByb3RhdGVkIGJ5IDkwIGRlZ3JlZXNcbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKi9cbiAgICB0aGlzLnJvdGF0ZSA9ICEhcm90YXRlO1xuXG4gICAgaWYgKGJhc2VUZXh0dXJlLmhhc0xvYWRlZClcbiAgICB7XG4gICAgICAgIGlmICh0aGlzLm5vRnJhbWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGZyYW1lID0gbmV3IG1hdGguUmVjdGFuZ2xlKDAsIDAsIGJhc2VUZXh0dXJlLndpZHRoLCBiYXNlVGV4dHVyZS5oZWlnaHQpO1xuXG4gICAgICAgICAgICAvLyBpZiB0aGVyZSBpcyBubyBmcmFtZSB3ZSBzaG91bGQgbW9uaXRvciBmb3IgYW55IGJhc2UgdGV4dHVyZSBjaGFuZ2VzLi5cbiAgICAgICAgICAgIGJhc2VUZXh0dXJlLm9uKCd1cGRhdGUnLCB0aGlzLm9uQmFzZVRleHR1cmVVcGRhdGVkLCB0aGlzKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmZyYW1lID0gZnJhbWU7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIGJhc2VUZXh0dXJlLm9uY2UoJ2xvYWRlZCcsIHRoaXMub25CYXNlVGV4dHVyZUxvYWRlZCwgdGhpcyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRmlyZWQgd2hlbiB0aGUgdGV4dHVyZSBpcyB1cGRhdGVkLiBUaGlzIGhhcHBlbnMgaWYgdGhlIGZyYW1lIG9yIHRoZSBiYXNlVGV4dHVyZSBpcyB1cGRhdGVkLlxuICAgICAqXG4gICAgICogQGV2ZW50IHVwZGF0ZVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLlRleHR1cmUjXG4gICAgICogQHByb3RlY3RlZFxuICAgICAqL1xufVxuXG5UZXh0dXJlLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoRXZlbnRFbWl0dGVyLnByb3RvdHlwZSk7XG5UZXh0dXJlLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFRleHR1cmU7XG5tb2R1bGUuZXhwb3J0cyA9IFRleHR1cmU7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKFRleHR1cmUucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogVGhlIGZyYW1lIHNwZWNpZmllcyB0aGUgcmVnaW9uIG9mIHRoZSBiYXNlIHRleHR1cmUgdGhhdCB0aGlzIHRleHR1cmUgdXNlcy5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuUmVjdGFuZ2xlfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLlRleHR1cmUjXG4gICAgICovXG4gICAgZnJhbWU6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fZnJhbWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKGZyYW1lKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLl9mcmFtZSA9IGZyYW1lO1xuXG4gICAgICAgICAgICB0aGlzLm5vRnJhbWUgPSBmYWxzZTtcblxuICAgICAgICAgICAgdGhpcy53aWR0aCA9IGZyYW1lLndpZHRoO1xuICAgICAgICAgICAgdGhpcy5oZWlnaHQgPSBmcmFtZS5oZWlnaHQ7XG5cbiAgICAgICAgICAgIGlmICghdGhpcy50cmltICYmICF0aGlzLnJvdGF0ZSAmJiAoZnJhbWUueCArIGZyYW1lLndpZHRoID4gdGhpcy5iYXNlVGV4dHVyZS53aWR0aCB8fCBmcmFtZS55ICsgZnJhbWUuaGVpZ2h0ID4gdGhpcy5iYXNlVGV4dHVyZS5oZWlnaHQpKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignVGV4dHVyZSBFcnJvcjogZnJhbWUgZG9lcyBub3QgZml0IGluc2lkZSB0aGUgYmFzZSBUZXh0dXJlIGRpbWVuc2lvbnMgJyArIHRoaXMpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvL3RoaXMudmFsaWQgPSBmcmFtZSAmJiBmcmFtZS53aWR0aCAmJiBmcmFtZS5oZWlnaHQgJiYgdGhpcy5iYXNlVGV4dHVyZS5zb3VyY2UgJiYgdGhpcy5iYXNlVGV4dHVyZS5oYXNMb2FkZWQ7XG4gICAgICAgICAgICB0aGlzLnZhbGlkID0gZnJhbWUgJiYgZnJhbWUud2lkdGggJiYgZnJhbWUuaGVpZ2h0ICYmIHRoaXMuYmFzZVRleHR1cmUuaGFzTG9hZGVkO1xuXG4gICAgICAgICAgICBpZiAodGhpcy50cmltKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHRoaXMud2lkdGggPSB0aGlzLnRyaW0ud2lkdGg7XG4gICAgICAgICAgICAgICAgdGhpcy5oZWlnaHQgPSB0aGlzLnRyaW0uaGVpZ2h0O1xuICAgICAgICAgICAgICAgIHRoaXMuX2ZyYW1lLndpZHRoID0gdGhpcy50cmltLndpZHRoO1xuICAgICAgICAgICAgICAgIHRoaXMuX2ZyYW1lLmhlaWdodCA9IHRoaXMudHJpbS5oZWlnaHQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdGhpcy5jcm9wID0gZnJhbWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICh0aGlzLnZhbGlkKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHRoaXMuX3VwZGF0ZVV2cygpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxufSk7XG5cbi8qKlxuICogVXBkYXRlcyB0aGlzIHRleHR1cmUgb24gdGhlIGdwdS5cbiAqXG4gKi9cblRleHR1cmUucHJvdG90eXBlLnVwZGF0ZSA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy5iYXNlVGV4dHVyZS51cGRhdGUoKTtcbn07XG5cbi8qKlxuICogQ2FsbGVkIHdoZW4gdGhlIGJhc2UgdGV4dHVyZSBpcyBsb2FkZWRcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5UZXh0dXJlLnByb3RvdHlwZS5vbkJhc2VUZXh0dXJlTG9hZGVkID0gZnVuY3Rpb24gKGJhc2VUZXh0dXJlKVxue1xuICAgIC8vIFRPRE8gdGhpcyBjb2RlIGxvb2tzIGNvbmZ1c2luZy4uIGJvbyB0byBhYnVzaW5nIGdldHRlcnMgYW5kIHNldHRlcnNzIVxuICAgIGlmICh0aGlzLm5vRnJhbWUpXG4gICAge1xuICAgICAgICB0aGlzLmZyYW1lID0gbmV3IG1hdGguUmVjdGFuZ2xlKDAsIDAsIGJhc2VUZXh0dXJlLndpZHRoLCBiYXNlVGV4dHVyZS5oZWlnaHQpO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICB0aGlzLmZyYW1lID0gdGhpcy5fZnJhbWU7XG4gICAgfVxuXG4gICAgdGhpcy5lbWl0KCd1cGRhdGUnLCB0aGlzKTtcbn07XG5cbi8qKlxuICogQ2FsbGVkIHdoZW4gdGhlIGJhc2UgdGV4dHVyZSBpcyB1cGRhdGVkXG4gKlxuICogQHByaXZhdGVcbiAqL1xuVGV4dHVyZS5wcm90b3R5cGUub25CYXNlVGV4dHVyZVVwZGF0ZWQgPSBmdW5jdGlvbiAoYmFzZVRleHR1cmUpXG57XG4gICAgdGhpcy5fZnJhbWUud2lkdGggPSBiYXNlVGV4dHVyZS53aWR0aDtcbiAgICB0aGlzLl9mcmFtZS5oZWlnaHQgPSBiYXNlVGV4dHVyZS5oZWlnaHQ7XG5cbiAgICB0aGlzLmVtaXQoJ3VwZGF0ZScsIHRoaXMpO1xufTtcblxuLyoqXG4gKiBEZXN0cm95cyB0aGlzIHRleHR1cmVcbiAqXG4gKiBAcGFyYW0gW2Rlc3Ryb3lCYXNlPWZhbHNlXSB7Ym9vbGVhbn0gV2hldGhlciB0byBkZXN0cm95IHRoZSBiYXNlIHRleHR1cmUgYXMgd2VsbFxuICovXG5UZXh0dXJlLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKGRlc3Ryb3lCYXNlKVxue1xuICAgIGlmICh0aGlzLmJhc2VUZXh0dXJlKVxuICAgIHtcbiAgICAgICAgaWYgKGRlc3Ryb3lCYXNlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmJhc2VUZXh0dXJlLmRlc3Ryb3koKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuYmFzZVRleHR1cmUub2ZmKCd1cGRhdGUnLCB0aGlzLm9uQmFzZVRleHR1cmVVcGRhdGVkLCB0aGlzKTtcbiAgICAgICAgdGhpcy5iYXNlVGV4dHVyZS5vZmYoJ2xvYWRlZCcsIHRoaXMub25CYXNlVGV4dHVyZUxvYWRlZCwgdGhpcyk7XG5cbiAgICAgICAgdGhpcy5iYXNlVGV4dHVyZSA9IG51bGw7XG4gICAgfVxuXG4gICAgdGhpcy5fZnJhbWUgPSBudWxsO1xuICAgIHRoaXMuX3V2cyA9IG51bGw7XG4gICAgdGhpcy50cmltID0gbnVsbDtcbiAgICB0aGlzLmNyb3AgPSBudWxsO1xuXG4gICAgdGhpcy52YWxpZCA9IGZhbHNlO1xuXG4gICAgdGhpcy5vZmYoJ2Rpc3Bvc2UnLCB0aGlzLmRpc3Bvc2UsIHRoaXMpO1xuICAgIHRoaXMub2ZmKCd1cGRhdGUnLCB0aGlzLnVwZGF0ZSwgdGhpcyk7XG59O1xuXG4vKipcbiAqIENyZWF0ZXMgYSBuZXcgdGV4dHVyZSBvYmplY3QgdGhhdCBhY3RzIHRoZSBzYW1lIGFzIHRoaXMgb25lLlxuICpcbiAqIEByZXR1cm4ge1BJWEkuVGV4dHVyZX1cbiAqL1xuVGV4dHVyZS5wcm90b3R5cGUuY2xvbmUgPSBmdW5jdGlvbiAoKVxue1xuICAgIHJldHVybiBuZXcgVGV4dHVyZSh0aGlzLmJhc2VUZXh0dXJlLCB0aGlzLmZyYW1lLCB0aGlzLmNyb3AsIHRoaXMudHJpbSwgdGhpcy5yb3RhdGUpO1xufTtcblxuLyoqXG4gKiBVcGRhdGVzIHRoZSBpbnRlcm5hbCBXZWJHTCBVViBjYWNoZS5cbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5UZXh0dXJlLnByb3RvdHlwZS5fdXBkYXRlVXZzID0gZnVuY3Rpb24gKClcbntcbiAgICBpZiAoIXRoaXMuX3V2cylcbiAgICB7XG4gICAgICAgIHRoaXMuX3V2cyA9IG5ldyBUZXh0dXJlVXZzKCk7XG4gICAgfVxuXG4gICAgdGhpcy5fdXZzLnNldCh0aGlzLmNyb3AsIHRoaXMuYmFzZVRleHR1cmUsIHRoaXMucm90YXRlKTtcbn07XG5cbi8qKlxuICogSGVscGVyIGZ1bmN0aW9uIHRoYXQgY3JlYXRlcyBhIFRleHR1cmUgb2JqZWN0IGZyb20gdGhlIGdpdmVuIGltYWdlIHVybC5cbiAqIElmIHRoZSBpbWFnZSBpcyBub3QgaW4gdGhlIHRleHR1cmUgY2FjaGUgaXQgd2lsbCBiZSAgY3JlYXRlZCBhbmQgbG9hZGVkLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBwYXJhbSBpbWFnZVVybCB7c3RyaW5nfSBUaGUgaW1hZ2UgdXJsIG9mIHRoZSB0ZXh0dXJlXG4gKiBAcGFyYW0gY3Jvc3NvcmlnaW4ge2Jvb2xlYW59IFdoZXRoZXIgcmVxdWVzdHMgc2hvdWxkIGJlIHRyZWF0ZWQgYXMgY3Jvc3NvcmlnaW5cbiAqIEBwYXJhbSBzY2FsZU1vZGUge251bWJlcn0gU2VlIHtAbGluayBQSVhJLlNDQUxFX01PREVTfSBmb3IgcG9zc2libGUgdmFsdWVzXG4gKiBAcmV0dXJuIHtQSVhJLlRleHR1cmV9IFRoZSBuZXdseSBjcmVhdGVkIHRleHR1cmVcbiAqL1xuVGV4dHVyZS5mcm9tSW1hZ2UgPSBmdW5jdGlvbiAoaW1hZ2VVcmwsIGNyb3Nzb3JpZ2luLCBzY2FsZU1vZGUpXG57XG4gICAgdmFyIHRleHR1cmUgPSB1dGlscy5UZXh0dXJlQ2FjaGVbaW1hZ2VVcmxdO1xuXG4gICAgaWYgKCF0ZXh0dXJlKVxuICAgIHtcbiAgICAgICAgdGV4dHVyZSA9IG5ldyBUZXh0dXJlKEJhc2VUZXh0dXJlLmZyb21JbWFnZShpbWFnZVVybCwgY3Jvc3NvcmlnaW4sIHNjYWxlTW9kZSkpO1xuICAgICAgICB1dGlscy5UZXh0dXJlQ2FjaGVbaW1hZ2VVcmxdID0gdGV4dHVyZTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGV4dHVyZTtcbn07XG5cbi8qKlxuICogSGVscGVyIGZ1bmN0aW9uIHRoYXQgY3JlYXRlcyBhIHNwcml0ZSB0aGF0IHdpbGwgY29udGFpbiBhIHRleHR1cmUgZnJvbSB0aGUgVGV4dHVyZUNhY2hlIGJhc2VkIG9uIHRoZSBmcmFtZUlkXG4gKiBUaGUgZnJhbWUgaWRzIGFyZSBjcmVhdGVkIHdoZW4gYSBUZXh0dXJlIHBhY2tlciBmaWxlIGhhcyBiZWVuIGxvYWRlZFxuICpcbiAqIEBzdGF0aWNcbiAqIEBwYXJhbSBmcmFtZUlkIHtzdHJpbmd9IFRoZSBmcmFtZSBJZCBvZiB0aGUgdGV4dHVyZSBpbiB0aGUgY2FjaGVcbiAqIEByZXR1cm4ge1BJWEkuVGV4dHVyZX0gVGhlIG5ld2x5IGNyZWF0ZWQgdGV4dHVyZVxuICovXG5UZXh0dXJlLmZyb21GcmFtZSA9IGZ1bmN0aW9uIChmcmFtZUlkKVxue1xuICAgIHZhciB0ZXh0dXJlID0gdXRpbHMuVGV4dHVyZUNhY2hlW2ZyYW1lSWRdO1xuXG4gICAgaWYgKCF0ZXh0dXJlKVxuICAgIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdUaGUgZnJhbWVJZCBcIicgKyBmcmFtZUlkICsgJ1wiIGRvZXMgbm90IGV4aXN0IGluIHRoZSB0ZXh0dXJlIGNhY2hlJyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRleHR1cmU7XG59O1xuXG4vKipcbiAqIEhlbHBlciBmdW5jdGlvbiB0aGF0IGNyZWF0ZXMgYSBuZXcgVGV4dHVyZSBiYXNlZCBvbiB0aGUgZ2l2ZW4gY2FudmFzIGVsZW1lbnQuXG4gKlxuICogQHN0YXRpY1xuICogQHBhcmFtIGNhbnZhcyB7Q2FudmFzfSBUaGUgY2FudmFzIGVsZW1lbnQgc291cmNlIG9mIHRoZSB0ZXh0dXJlXG4gKiBAcGFyYW0gc2NhbGVNb2RlIHtudW1iZXJ9IFNlZSB7QGxpbmsgUElYSS5TQ0FMRV9NT0RFU30gZm9yIHBvc3NpYmxlIHZhbHVlc1xuICogQHJldHVybiB7UElYSS5UZXh0dXJlfVxuICovXG5UZXh0dXJlLmZyb21DYW52YXMgPSBmdW5jdGlvbiAoY2FudmFzLCBzY2FsZU1vZGUpXG57XG4gICAgcmV0dXJuIG5ldyBUZXh0dXJlKEJhc2VUZXh0dXJlLmZyb21DYW52YXMoY2FudmFzLCBzY2FsZU1vZGUpKTtcbn07XG5cbi8qKlxuICogSGVscGVyIGZ1bmN0aW9uIHRoYXQgY3JlYXRlcyBhIG5ldyBUZXh0dXJlIGJhc2VkIG9uIHRoZSBnaXZlbiB2aWRlbyBlbGVtZW50LlxuICpcbiAqIEBzdGF0aWNcbiAqIEBwYXJhbSB2aWRlbyB7SFRNTFZpZGVvRWxlbWVudH1cbiAqIEBwYXJhbSBzY2FsZU1vZGUge251bWJlcn0gU2VlIHtAbGluayBQSVhJLlNDQUxFX01PREVTfSBmb3IgcG9zc2libGUgdmFsdWVzXG4gKiBAcmV0dXJuIHtQSVhJLlRleHR1cmV9IEEgVGV4dHVyZVxuICovXG5UZXh0dXJlLmZyb21WaWRlbyA9IGZ1bmN0aW9uICh2aWRlbywgc2NhbGVNb2RlKVxue1xuICAgIGlmICh0eXBlb2YgdmlkZW8gPT09ICdzdHJpbmcnKVxuICAgIHtcbiAgICAgICAgcmV0dXJuIFRleHR1cmUuZnJvbVZpZGVvVXJsKHZpZGVvLCBzY2FsZU1vZGUpO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICByZXR1cm4gbmV3IFRleHR1cmUoVmlkZW9CYXNlVGV4dHVyZS5mcm9tVmlkZW8odmlkZW8sIHNjYWxlTW9kZSkpO1xuICAgIH1cbn07XG5cbi8qKlxuICogSGVscGVyIGZ1bmN0aW9uIHRoYXQgY3JlYXRlcyBhIG5ldyBUZXh0dXJlIGJhc2VkIG9uIHRoZSB2aWRlbyB1cmwuXG4gKlxuICogQHN0YXRpY1xuICogQHBhcmFtIHZpZGVvVXJsIHtzdHJpbmd9XG4gKiBAcGFyYW0gc2NhbGVNb2RlIHtudW1iZXJ9IFNlZSB7QGxpbmsgUElYSS5TQ0FMRV9NT0RFU30gZm9yIHBvc3NpYmxlIHZhbHVlc1xuICogQHJldHVybiB7UElYSS5UZXh0dXJlfSBBIFRleHR1cmVcbiAqL1xuVGV4dHVyZS5mcm9tVmlkZW9VcmwgPSBmdW5jdGlvbiAodmlkZW9VcmwsIHNjYWxlTW9kZSlcbntcbiAgICByZXR1cm4gbmV3IFRleHR1cmUoVmlkZW9CYXNlVGV4dHVyZS5mcm9tVXJsKHZpZGVvVXJsLCBzY2FsZU1vZGUpKTtcbn07XG5cbi8qKlxuICogQWRkcyBhIHRleHR1cmUgdG8gdGhlIGdsb2JhbCB1dGlscy5UZXh0dXJlQ2FjaGUuIFRoaXMgY2FjaGUgaXMgc2hhcmVkIGFjcm9zcyB0aGUgd2hvbGUgUElYSSBvYmplY3QuXG4gKlxuICogQHN0YXRpY1xuICogQHBhcmFtIHRleHR1cmUge1BJWEkuVGV4dHVyZX0gVGhlIFRleHR1cmUgdG8gYWRkIHRvIHRoZSBjYWNoZS5cbiAqIEBwYXJhbSBpZCB7c3RyaW5nfSBUaGUgaWQgdGhhdCB0aGUgdGV4dHVyZSB3aWxsIGJlIHN0b3JlZCBhZ2FpbnN0LlxuICovXG5UZXh0dXJlLmFkZFRleHR1cmVUb0NhY2hlID0gZnVuY3Rpb24gKHRleHR1cmUsIGlkKVxue1xuICAgIHV0aWxzLlRleHR1cmVDYWNoZVtpZF0gPSB0ZXh0dXJlO1xufTtcblxuLyoqXG4gKiBSZW1vdmUgYSB0ZXh0dXJlIGZyb20gdGhlIGdsb2JhbCB1dGlscy5UZXh0dXJlQ2FjaGUuXG4gKlxuICogQHN0YXRpY1xuICogQHBhcmFtIGlkIHtzdHJpbmd9IFRoZSBpZCBvZiB0aGUgdGV4dHVyZSB0byBiZSByZW1vdmVkXG4gKiBAcmV0dXJuIHtQSVhJLlRleHR1cmV9IFRoZSB0ZXh0dXJlIHRoYXQgd2FzIHJlbW92ZWRcbiAqL1xuVGV4dHVyZS5yZW1vdmVUZXh0dXJlRnJvbUNhY2hlID0gZnVuY3Rpb24gKGlkKVxue1xuICAgIHZhciB0ZXh0dXJlID0gdXRpbHMuVGV4dHVyZUNhY2hlW2lkXTtcblxuICAgIGRlbGV0ZSB1dGlscy5UZXh0dXJlQ2FjaGVbaWRdO1xuICAgIGRlbGV0ZSB1dGlscy5CYXNlVGV4dHVyZUNhY2hlW2lkXTtcblxuICAgIHJldHVybiB0ZXh0dXJlO1xufTtcblxuLyoqXG4gKiBBbiBlbXB0eSB0ZXh0dXJlLCB1c2VkIG9mdGVuIHRvIG5vdCBoYXZlIHRvIGNyZWF0ZSBtdWx0aXBsZSBlbXB0eSB0ZXh0dXJlcy5cbiAqXG4gKiBAc3RhdGljXG4gKiBAY29uc3RhbnRcbiAqL1xuVGV4dHVyZS5FTVBUWSA9IG5ldyBUZXh0dXJlKG5ldyBCYXNlVGV4dHVyZSgpKTtcbiIsIlxuLyoqXG4gKiBBIHN0YW5kYXJkIG9iamVjdCB0byBzdG9yZSB0aGUgVXZzIG9mIGEgdGV4dHVyZVxuICpcbiAqIEBjbGFzc1xuICogQHByaXZhdGVcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKi9cbmZ1bmN0aW9uIFRleHR1cmVVdnMoKVxue1xuICAgIHRoaXMueDAgPSAwO1xuICAgIHRoaXMueTAgPSAwO1xuXG4gICAgdGhpcy54MSA9IDE7XG4gICAgdGhpcy55MSA9IDA7XG5cbiAgICB0aGlzLngyID0gMTtcbiAgICB0aGlzLnkyID0gMTtcblxuICAgIHRoaXMueDMgPSAwO1xuICAgIHRoaXMueTMgPSAxO1xuXG4gICAgdGhpcy54eTBfdWludDMyID0gMDtcbiAgICB0aGlzLnh5MV91aW50MzIgPSAwO1xuICAgIHRoaXMueHkyX3VpbnQzMiA9IDA7XG4gICAgdGhpcy54eTNfdWludDMyID0gMDtcblxuICAgIHRoaXMudXZzX3VpbnQzMiA9IG5ldyBVaW50MzJBcnJheSg0KVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IFRleHR1cmVVdnM7XG5cbi8qKlxuICogU2V0cyB0aGUgdGV4dHVyZSBVdnMgYmFzZWQgb24gdGhlIGdpdmVuIGZyYW1lIGluZm9ybWF0aW9uXG4gKiBAcGFyYW0gZnJhbWUge1BJWEkuUmVjdGFuZ2xlfVxuICogQHBhcmFtIGJhc2VGcmFtZSB7UElYSS5SZWN0YW5nbGV9XG4gKiBAcGFyYW0gcm90YXRlIHtib29sZWFufSBXaGV0aGVyIG9yIG5vdCB0aGUgZnJhbWUgaXMgcm90YXRlZFxuICogQHByaXZhdGVcbiAqL1xuVGV4dHVyZVV2cy5wcm90b3R5cGUuc2V0ID0gZnVuY3Rpb24gKGZyYW1lLCBiYXNlRnJhbWUsIHJvdGF0ZSlcbntcbiAgICB2YXIgdHcgPSBiYXNlRnJhbWUud2lkdGg7XG4gICAgdmFyIHRoID0gYmFzZUZyYW1lLmhlaWdodDtcblxuICAgIGlmKHJvdGF0ZSlcbiAgICB7XG4gICAgICAgIHRoaXMueDAgPSAoZnJhbWUueCArIGZyYW1lLmhlaWdodCkgLyB0dztcbiAgICAgICAgdGhpcy55MCA9IGZyYW1lLnkgLyB0aDtcblxuICAgICAgICB0aGlzLngxID0gKGZyYW1lLnggKyBmcmFtZS5oZWlnaHQpIC8gdHc7XG4gICAgICAgIHRoaXMueTEgPSAoZnJhbWUueSArIGZyYW1lLndpZHRoKSAvIHRoO1xuXG4gICAgICAgIHRoaXMueDIgPSBmcmFtZS54IC8gdHc7XG4gICAgICAgIHRoaXMueTIgPSAoZnJhbWUueSArIGZyYW1lLndpZHRoKSAvIHRoO1xuXG4gICAgICAgIHRoaXMueDMgPSBmcmFtZS54IC8gdHc7XG4gICAgICAgIHRoaXMueTMgPSBmcmFtZS55IC8gdGg7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG5cbiAgICAgICAgdGhpcy54MCA9IGZyYW1lLnggLyB0dztcbiAgICAgICAgdGhpcy55MCA9IGZyYW1lLnkgLyB0aDtcblxuICAgICAgICB0aGlzLngxID0gKGZyYW1lLnggKyBmcmFtZS53aWR0aCkgLyB0dztcbiAgICAgICAgdGhpcy55MSA9IGZyYW1lLnkgLyB0aDtcblxuICAgICAgICB0aGlzLngyID0gKGZyYW1lLnggKyBmcmFtZS53aWR0aCkgLyB0dztcbiAgICAgICAgdGhpcy55MiA9IChmcmFtZS55ICsgZnJhbWUuaGVpZ2h0KSAvIHRoO1xuXG4gICAgICAgIHRoaXMueDMgPSBmcmFtZS54IC8gdHc7XG4gICAgICAgIHRoaXMueTMgPSAoZnJhbWUueSArIGZyYW1lLmhlaWdodCkgLyB0aDtcbiAgICB9XG5cbiAgICB0aGlzLnV2c191aW50MzJbMF0gPSAoKCh0aGlzLnkwICogNjU1MzUpICYgMHhGRkZGKSA8PCAxNikgfCAoKHRoaXMueDAgKiA2NTUzNSkgJiAweEZGRkYpO1xuICAgIHRoaXMudXZzX3VpbnQzMlsxXSA9ICgoKHRoaXMueTEgKiA2NTUzNSkgJiAweEZGRkYpIDw8IDE2KSB8ICgodGhpcy54MSAqIDY1NTM1KSAmIDB4RkZGRik7XG4gICAgdGhpcy51dnNfdWludDMyWzJdID0gKCgodGhpcy55MiAqIDY1NTM1KSAmIDB4RkZGRikgPDwgMTYpIHwgKCh0aGlzLngyICogNjU1MzUpICYgMHhGRkZGKTtcbiAgICB0aGlzLnV2c191aW50MzJbM10gPSAoKCh0aGlzLnkzICogNjU1MzUpICYgMHhGRkZGKSA8PCAxNikgfCAoKHRoaXMueDMgKiA2NTUzNSkgJiAweEZGRkYpO1xufTtcbiIsInZhciBCYXNlVGV4dHVyZSA9IHJlcXVpcmUoJy4vQmFzZVRleHR1cmUnKSxcbiAgICB1dGlscyA9IHJlcXVpcmUoJy4uL3V0aWxzJyk7XG5cbi8qKlxuICogQSB0ZXh0dXJlIG9mIGEgW3BsYXlpbmddIFZpZGVvLlxuICpcbiAqIFZpZGVvIGJhc2UgdGV4dHVyZXMgbWltaWMgUGl4aSBCYXNlVGV4dHVyZS5mcm9tLi4uLiBtZXRob2QgaW4gdGhlaXIgY3JlYXRpb24gcHJvY2Vzcy5cbiAqXG4gKiBUaGlzIGNhbiBiZSB1c2VkIGluIHNldmVyYWwgd2F5cywgc3VjaCBhczpcbiAqXG4gKiBgYGBqc1xuICogdmFyIHRleHR1cmUgPSBQSVhJLlZpZGVvQmFzZVRleHR1cmUuZnJvbVVybCgnaHR0cDovL215ZG9tYWluLmNvbS92aWRlby5tcDQnKTtcbiAqXG4gKiB2YXIgdGV4dHVyZSA9IFBJWEkuVmlkZW9CYXNlVGV4dHVyZS5mcm9tVXJsKHsgc3JjOiAnaHR0cDovL215ZG9tYWluLmNvbS92aWRlby5tcDQnLCBtaW1lOiAndmlkZW8vbXA0JyB9KTtcbiAqXG4gKiB2YXIgdGV4dHVyZSA9IFBJWEkuVmlkZW9CYXNlVGV4dHVyZS5mcm9tVXJscyhbJy92aWRlby53ZWJtJywgJy92aWRlby5tcDQnXSk7XG4gKlxuICogdmFyIHRleHR1cmUgPSBQSVhJLlZpZGVvQmFzZVRleHR1cmUuZnJvbVVybHMoW1xuICogICAgIHsgc3JjOiAnL3ZpZGVvLndlYm0nLCBtaW1lOiAndmlkZW8vd2VibScgfSxcbiAqICAgICB7IHNyYzogJy92aWRlby5tcDQnLCBtaW1lOiAndmlkZW8vbXA0JyB9XG4gKiBdKTtcbiAqIGBgYFxuICpcbiAqIFNlZSB0aGUgW1wiZGV1c1wiIGRlbW9dKGh0dHA6Ly93d3cuZ29vZGJveWRpZ2l0YWwuY29tL3BpeGlqcy9leGFtcGxlcy9kZXVzLykuXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLkJhc2VUZXh0dXJlXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIHNvdXJjZSB7SFRNTFZpZGVvRWxlbWVudH1cbiAqIEBwYXJhbSBbc2NhbGVNb2RlXSB7bnVtYmVyfSBTZWUge0BsaW5rIFBJWEkuU0NBTEVfTU9ERVN9IGZvciBwb3NzaWJsZSB2YWx1ZXNcbiAqL1xuZnVuY3Rpb24gVmlkZW9CYXNlVGV4dHVyZShzb3VyY2UsIHNjYWxlTW9kZSlcbntcbiAgICBpZiAoIXNvdXJjZSlcbiAgICB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignTm8gdmlkZW8gc291cmNlIGVsZW1lbnQgc3BlY2lmaWVkLicpO1xuICAgIH1cblxuICAgIC8vIGhvb2sgaW4gaGVyZSB0byBjaGVjayBpZiB2aWRlbyBpcyBhbHJlYWR5IGF2YWlsYWJsZS5cbiAgICAvLyBCYXNlVGV4dHVyZSBsb29rcyBmb3IgYSBzb3VyY2UuY29tcGxldGUgYm9vbGVhbiwgcGx1cyB3aWR0aCAmIGhlaWdodC5cblxuICAgIGlmICgoc291cmNlLnJlYWR5U3RhdGUgPT09IHNvdXJjZS5IQVZFX0VOT1VHSF9EQVRBIHx8IHNvdXJjZS5yZWFkeVN0YXRlID09PSBzb3VyY2UuSEFWRV9GVVRVUkVfREFUQSkgJiYgc291cmNlLndpZHRoICYmIHNvdXJjZS5oZWlnaHQpXG4gICAge1xuICAgICAgICBzb3VyY2UuY29tcGxldGUgPSB0cnVlO1xuICAgIH1cblxuICAgIEJhc2VUZXh0dXJlLmNhbGwodGhpcywgc291cmNlLCBzY2FsZU1vZGUpO1xuXG4gICAgLyoqXG4gICAgICogU2hvdWxkIHRoZSBiYXNlIHRleHR1cmUgYXV0b21hdGljYWxseSB1cGRhdGUgaXRzZWxmLCBzZXQgdG8gdHJ1ZSBieSBkZWZhdWx0XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqIEBkZWZhdWx0IHRydWVcbiAgICAgKi9cbiAgICB0aGlzLmF1dG9VcGRhdGUgPSBmYWxzZTtcblxuICAgIHRoaXMuX29uVXBkYXRlID0gdGhpcy5fb25VcGRhdGUuYmluZCh0aGlzKTtcbiAgICB0aGlzLl9vbkNhblBsYXkgPSB0aGlzLl9vbkNhblBsYXkuYmluZCh0aGlzKTtcblxuICAgIGlmICghc291cmNlLmNvbXBsZXRlKVxuICAgIHtcbiAgICAgICAgc291cmNlLmFkZEV2ZW50TGlzdGVuZXIoJ2NhbnBsYXknLCB0aGlzLl9vbkNhblBsYXkpO1xuICAgICAgICBzb3VyY2UuYWRkRXZlbnRMaXN0ZW5lcignY2FucGxheXRocm91Z2gnLCB0aGlzLl9vbkNhblBsYXkpO1xuXG4gICAgICAgIC8vIHN0YXJ0ZWQgcGxheWluZy4uXG4gICAgICAgIHNvdXJjZS5hZGRFdmVudExpc3RlbmVyKCdwbGF5JywgdGhpcy5fb25QbGF5U3RhcnQuYmluZCh0aGlzKSk7XG4gICAgICAgIHNvdXJjZS5hZGRFdmVudExpc3RlbmVyKCdwYXVzZScsIHRoaXMuX29uUGxheVN0b3AuYmluZCh0aGlzKSk7XG4gICAgfVxuXG4gICAgdGhpcy5fX2xvYWRlZCA9IGZhbHNlO1xufVxuXG5WaWRlb0Jhc2VUZXh0dXJlLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoQmFzZVRleHR1cmUucHJvdG90eXBlKTtcblZpZGVvQmFzZVRleHR1cmUucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gVmlkZW9CYXNlVGV4dHVyZTtcbm1vZHVsZS5leHBvcnRzID0gVmlkZW9CYXNlVGV4dHVyZTtcblxuLyoqXG4gKiBUaGUgaW50ZXJuYWwgdXBkYXRlIGxvb3Agb2YgdGhlIHZpZGVvIGJhc2UgdGV4dHVyZSwgb25seSBydW5zIHdoZW4gYXV0b1VwZGF0ZSBpcyBzZXQgdG8gdHJ1ZVxuICpcbiAqIEBwcml2YXRlXG4gKi9cblZpZGVvQmFzZVRleHR1cmUucHJvdG90eXBlLl9vblVwZGF0ZSA9IGZ1bmN0aW9uICgpXG57XG4gICAgaWYgKHRoaXMuYXV0b1VwZGF0ZSlcbiAgICB7XG4gICAgICAgIHdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUodGhpcy5fb25VcGRhdGUpO1xuICAgICAgICB0aGlzLnVwZGF0ZSgpO1xuICAgIH1cbn07XG5cbi8qKlxuICogUnVucyB0aGUgdXBkYXRlIGxvb3Agd2hlbiB0aGUgdmlkZW8gaXMgcmVhZHkgdG8gcGxheVxuICpcbiAqIEBwcml2YXRlXG4gKi9cblZpZGVvQmFzZVRleHR1cmUucHJvdG90eXBlLl9vblBsYXlTdGFydCA9IGZ1bmN0aW9uICgpXG57XG4gICAgaWYgKCF0aGlzLmF1dG9VcGRhdGUpXG4gICAge1xuICAgICAgICB3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lKHRoaXMuX29uVXBkYXRlKTtcbiAgICAgICAgdGhpcy5hdXRvVXBkYXRlID0gdHJ1ZTtcbiAgICB9XG59O1xuXG4vKipcbiAqIEZpcmVkIHdoZW4gYSBwYXVzZSBldmVudCBpcyB0cmlnZ2VyZWQsIHN0b3BzIHRoZSB1cGRhdGUgbG9vcFxuICpcbiAqIEBwcml2YXRlXG4gKi9cblZpZGVvQmFzZVRleHR1cmUucHJvdG90eXBlLl9vblBsYXlTdG9wID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLmF1dG9VcGRhdGUgPSBmYWxzZTtcbn07XG5cbi8qKlxuICogRmlyZWQgd2hlbiB0aGUgdmlkZW8gaXMgbG9hZGVkIGFuZCByZWFkeSB0byBwbGF5XG4gKlxuICogQHByaXZhdGVcbiAqL1xuVmlkZW9CYXNlVGV4dHVyZS5wcm90b3R5cGUuX29uQ2FuUGxheSA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy5oYXNMb2FkZWQgPSB0cnVlO1xuXG4gICAgaWYgKHRoaXMuc291cmNlKVxuICAgIHtcbiAgICAgICAgdGhpcy5zb3VyY2UucmVtb3ZlRXZlbnRMaXN0ZW5lcignY2FucGxheScsIHRoaXMuX29uQ2FuUGxheSk7XG4gICAgICAgIHRoaXMuc291cmNlLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2NhbnBsYXl0aHJvdWdoJywgdGhpcy5fb25DYW5QbGF5KTtcblxuICAgICAgICB0aGlzLndpZHRoID0gdGhpcy5zb3VyY2UudmlkZW9XaWR0aDtcbiAgICAgICAgdGhpcy5oZWlnaHQgPSB0aGlzLnNvdXJjZS52aWRlb0hlaWdodDtcblxuICAgICAgICB0aGlzLnNvdXJjZS5wbGF5KCk7XG5cbiAgICAgICAgLy8gcHJldmVudCBtdWx0aXBsZSBsb2FkZWQgZGlzcGF0Y2hlcy4uXG4gICAgICAgIGlmICghdGhpcy5fX2xvYWRlZClcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5fX2xvYWRlZCA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLmVtaXQoJ2xvYWRlZCcsIHRoaXMpO1xuICAgICAgICB9XG4gICAgfVxufTtcblxuLyoqXG4gKiBEZXN0cm95cyB0aGlzIHRleHR1cmVcbiAqXG4gKi9cblZpZGVvQmFzZVRleHR1cmUucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoKVxue1xuICAgIGlmICh0aGlzLnNvdXJjZSAmJiB0aGlzLnNvdXJjZS5fcGl4aUlkKVxuICAgIHtcbiAgICAgICAgZGVsZXRlIHV0aWxzLkJhc2VUZXh0dXJlQ2FjaGVbIHRoaXMuc291cmNlLl9waXhpSWQgXTtcbiAgICAgICAgZGVsZXRlIHRoaXMuc291cmNlLl9waXhpSWQ7XG4gICAgfVxuXG4gICAgQmFzZVRleHR1cmUucHJvdG90eXBlLmRlc3Ryb3kuY2FsbCh0aGlzKTtcbn07XG5cbi8qKlxuICogTWltaWMgUGl4aSBCYXNlVGV4dHVyZS5mcm9tLi4uLiBtZXRob2QuXG4gKlxuICogQHN0YXRpY1xuICogQHBhcmFtIHZpZGVvIHtIVE1MVmlkZW9FbGVtZW50fVxuICogQHBhcmFtIHNjYWxlTW9kZSB7bnVtYmVyfSBTZWUge0BsaW5rIFBJWEkuU0NBTEVfTU9ERVN9IGZvciBwb3NzaWJsZSB2YWx1ZXNcbiAqIEByZXR1cm4ge1BJWEkuVmlkZW9CYXNlVGV4dHVyZX1cbiAqL1xuVmlkZW9CYXNlVGV4dHVyZS5mcm9tVmlkZW8gPSBmdW5jdGlvbiAodmlkZW8sIHNjYWxlTW9kZSlcbntcbiAgICBpZiAoIXZpZGVvLl9waXhpSWQpXG4gICAge1xuICAgICAgICB2aWRlby5fcGl4aUlkID0gJ3ZpZGVvXycgKyB1dGlscy51aWQoKTtcbiAgICB9XG5cbiAgICB2YXIgYmFzZVRleHR1cmUgPSB1dGlscy5CYXNlVGV4dHVyZUNhY2hlW3ZpZGVvLl9waXhpSWRdO1xuXG4gICAgaWYgKCFiYXNlVGV4dHVyZSlcbiAgICB7XG4gICAgICAgIGJhc2VUZXh0dXJlID0gbmV3IFZpZGVvQmFzZVRleHR1cmUodmlkZW8sIHNjYWxlTW9kZSk7XG4gICAgICAgIHV0aWxzLkJhc2VUZXh0dXJlQ2FjaGVbIHZpZGVvLl9waXhpSWQgXSA9IGJhc2VUZXh0dXJlO1xuICAgIH1cblxuICAgIHJldHVybiBiYXNlVGV4dHVyZTtcbn07XG5cbi8qKlxuICogSGVscGVyIGZ1bmN0aW9uIHRoYXQgY3JlYXRlcyBhIG5ldyBCYXNlVGV4dHVyZSBiYXNlZCBvbiB0aGUgZ2l2ZW4gdmlkZW8gZWxlbWVudC5cbiAqIFRoaXMgQmFzZVRleHR1cmUgY2FuIHRoZW4gYmUgdXNlZCB0byBjcmVhdGUgYSB0ZXh0dXJlXG4gKlxuICogQHN0YXRpY1xuICogQHBhcmFtIHZpZGVvU3JjIHtzdHJpbmd8b2JqZWN0fHN0cmluZ1tdfG9iamVjdFtdfSBUaGUgVVJMKHMpIGZvciB0aGUgdmlkZW8uXG4gKiBAcGFyYW0gW3ZpZGVvU3JjLnNyY10ge3N0cmluZ30gT25lIG9mIHRoZSBzb3VyY2UgdXJscyBmb3IgdGhlIHZpZGVvXG4gKiBAcGFyYW0gW3ZpZGVvU3JjLm1pbWVdIHtzdHJpbmd9IFRoZSBtaW1ldHlwZSBvZiB0aGUgdmlkZW8gKGUuZy4gJ3ZpZGVvL21wNCcpLiBJZiBub3Qgc3BlY2lmaWVkXG4gKiAgdGhlIHVybCdzIGV4dGVuc2lvbiB3aWxsIGJlIHVzZWQgYXMgdGhlIHNlY29uZCBwYXJ0IG9mIHRoZSBtaW1lIHR5cGUuXG4gKiBAcGFyYW0gc2NhbGVNb2RlIHtudW1iZXJ9IFNlZSB7QGxpbmsgUElYSS5TQ0FMRV9NT0RFU30gZm9yIHBvc3NpYmxlIHZhbHVlc1xuICogQHJldHVybiB7UElYSS5WaWRlb0Jhc2VUZXh0dXJlfVxuICovXG5WaWRlb0Jhc2VUZXh0dXJlLmZyb21VcmwgPSBmdW5jdGlvbiAodmlkZW9TcmMsIHNjYWxlTW9kZSlcbntcbiAgICB2YXIgdmlkZW8gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd2aWRlbycpO1xuXG4gICAgLy8gYXJyYXkgb2Ygb2JqZWN0cyBvciBzdHJpbmdzXG4gICAgaWYgKEFycmF5LmlzQXJyYXkodmlkZW9TcmMpKVxuICAgIHtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB2aWRlb1NyYy5sZW5ndGg7ICsraSlcbiAgICAgICAge1xuICAgICAgICAgICAgdmlkZW8uYXBwZW5kQ2hpbGQoY3JlYXRlU291cmNlKHZpZGVvU3JjW2ldLnNyYyB8fCB2aWRlb1NyY1tpXSwgdmlkZW9TcmNbaV0ubWltZSkpO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8vIHNpbmdsZSBvYmplY3Qgb3Igc3RyaW5nXG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgdmlkZW8uYXBwZW5kQ2hpbGQoY3JlYXRlU291cmNlKHZpZGVvU3JjLnNyYyB8fCB2aWRlb1NyYywgdmlkZW9TcmMubWltZSkpO1xuICAgIH1cblxuICAgIHZpZGVvLmxvYWQoKTtcbiAgICB2aWRlby5wbGF5KCk7XG5cbiAgICByZXR1cm4gVmlkZW9CYXNlVGV4dHVyZS5mcm9tVmlkZW8odmlkZW8sIHNjYWxlTW9kZSk7XG59O1xuXG5WaWRlb0Jhc2VUZXh0dXJlLmZyb21VcmxzID0gVmlkZW9CYXNlVGV4dHVyZS5mcm9tVXJsO1xuXG5mdW5jdGlvbiBjcmVhdGVTb3VyY2UocGF0aCwgdHlwZSlcbntcbiAgICBpZiAoIXR5cGUpXG4gICAge1xuICAgICAgICB0eXBlID0gJ3ZpZGVvLycgKyBwYXRoLnN1YnN0cihwYXRoLmxhc3RJbmRleE9mKCcuJykgKyAxKTtcbiAgICB9XG5cbiAgICB2YXIgc291cmNlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc291cmNlJyk7XG5cbiAgICBzb3VyY2Uuc3JjID0gcGF0aDtcbiAgICBzb3VyY2UudHlwZSA9IHR5cGU7XG5cbiAgICByZXR1cm4gc291cmNlO1xufVxuIiwidmFyIENPTlNUID0gcmVxdWlyZSgnLi4vY29uc3QnKSxcbiAgICBFdmVudEVtaXR0ZXIgPSByZXF1aXJlKCdldmVudGVtaXR0ZXIzJyksXG4gICAgLy8gSW50ZXJuYWwgZXZlbnQgdXNlZCBieSBjb21wb3NlZCBlbWl0dGVyXG4gICAgVElDSyA9ICd0aWNrJztcblxuLyoqXG4gKiBBIFRpY2tlciBjbGFzcyB0aGF0IHJ1bnMgYW4gdXBkYXRlIGxvb3AgdGhhdCBvdGhlciBvYmplY3RzIGxpc3RlbiB0by5cbiAqIFRoaXMgY2xhc3MgaXMgY29tcG9zZWQgYXJvdW5kIGFuIEV2ZW50RW1pdHRlciBvYmplY3QgdG8gYWRkIGxpc3RlbmVyc1xuICogbWVhbnQgZm9yIGV4ZWN1dGlvbiBvbiB0aGUgbmV4dCByZXF1ZXN0ZWQgYW5pbWF0aW9uIGZyYW1lLlxuICogQW5pbWF0aW9uIGZyYW1lcyBhcmUgcmVxdWVzdGVkIG9ubHkgd2hlbiBuZWNlc3NhcnksXG4gKiBlLmcuIFdoZW4gdGhlIHRpY2tlciBpcyBzdGFydGVkIGFuZCB0aGUgZW1pdHRlciBoYXMgbGlzdGVuZXJzLlxuICpcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWEkudGlja2VyXG4gKi9cbmZ1bmN0aW9uIFRpY2tlcigpXG57XG4gICAgdmFyIF90aGlzID0gdGhpcztcblxuICAgIC8qKlxuICAgICAqIEludGVybmFsIHRpY2sgbWV0aG9kIGJvdW5kIHRvIHRpY2tlciBpbnN0YW5jZS5cbiAgICAgKiBUaGlzIGlzIGJlY2F1c2UgaW4gZWFybHkgMjAxNSwgRnVuY3Rpb24uYmluZFxuICAgICAqIGlzIHN0aWxsIDYwJSBzbG93ZXIgaW4gaGlnaCBwZXJmb3JtYW5jZSBzY2VuYXJpb3MuXG4gICAgICogQWxzbyBzZXBhcmF0aW5nIGZyYW1lIHJlcXVlc3RzIGZyb20gdXBkYXRlIG1ldGhvZFxuICAgICAqIHNvIGxpc3RlbmVycyBtYXkgYmUgY2FsbGVkIGF0IGFueSB0aW1lIGFuZCB3aXRoXG4gICAgICogYW55IGFuaW1hdGlvbiBBUEksIGp1c3QgaW52b2tlIHRpY2tlci51cGRhdGUodGltZSkuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX3RpY2sgPSBmdW5jdGlvbiBfdGljayh0aW1lKSB7XG5cbiAgICAgICAgX3RoaXMuX3JlcXVlc3RJZCA9IG51bGw7XG5cbiAgICAgICAgaWYgKF90aGlzLnN0YXJ0ZWQpXG4gICAgICAgIHtcbiAgICAgICAgICAgIC8vIEludm9rZSBsaXN0ZW5lcnMgbm93XG4gICAgICAgICAgICBfdGhpcy51cGRhdGUodGltZSk7XG4gICAgICAgICAgICAvLyBMaXN0ZW5lciBzaWRlIGVmZmVjdHMgbWF5IGhhdmUgbW9kaWZpZWQgdGlja2VyIHN0YXRlLlxuICAgICAgICAgICAgaWYgKF90aGlzLnN0YXJ0ZWQgJiYgX3RoaXMuX3JlcXVlc3RJZCA9PT0gbnVsbCAmJiBfdGhpcy5fZW1pdHRlci5saXN0ZW5lcnMoVElDSywgdHJ1ZSkpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgX3RoaXMuX3JlcXVlc3RJZCA9IHJlcXVlc3RBbmltYXRpb25GcmFtZShfdGhpcy5fdGljayk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgLyoqXG4gICAgICogSW50ZXJuYWwgZW1pdHRlciB1c2VkIHRvIGZpcmUgJ3RpY2snIGV2ZW50XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9lbWl0dGVyID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gICAgLyoqXG4gICAgICogSW50ZXJuYWwgY3VycmVudCBmcmFtZSByZXF1ZXN0IElEXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9yZXF1ZXN0SWQgPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogSW50ZXJuYWwgdmFsdWUgbWFuYWdlZCBieSBtaW5GUFMgcHJvcGVydHkgc2V0dGVyIGFuZCBnZXR0ZXIuXG4gICAgICogVGhpcyBpcyB0aGUgbWF4aW11bSBhbGxvd2VkIG1pbGxpc2Vjb25kcyBiZXR3ZWVuIHVwZGF0ZXMuXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9tYXhFbGFwc2VkTVMgPSAxMDA7XG5cbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIG9yIG5vdCB0aGlzIHRpY2tlciBzaG91bGQgaW52b2tlIHRoZSBtZXRob2RcbiAgICAgKiB7QGxpbmsgUElYSS50aWNrZXIuVGlja2VyI3N0YXJ0fSBhdXRvbWF0aWNhbGx5XG4gICAgICogd2hlbiBhIGxpc3RlbmVyIGlzIGFkZGVkLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgICAqL1xuICAgIHRoaXMuYXV0b1N0YXJ0ID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBTY2FsYXIgdGltZSB2YWx1ZSBmcm9tIGxhc3QgZnJhbWUgdG8gdGhpcyBmcmFtZS5cbiAgICAgKiBUaGlzIHZhbHVlIGlzIGNhcHBlZCBieSBzZXR0aW5nIHtAbGluayBQSVhJLnRpY2tlci5UaWNrZXIjbWluRlBTfVxuICAgICAqIGFuZCBpcyBzY2FsZWQgd2l0aCB7QGxpbmsgUElYSS50aWNrZXIuVGlja2VyI3NwZWVkfS5cbiAgICAgKiAqKk5vdGU6KiogVGhlIGNhcCBtYXkgYmUgZXhjZWVkZWQgYnkgc2NhbGluZy5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAxXG4gICAgICovXG4gICAgdGhpcy5kZWx0YVRpbWUgPSAxO1xuXG4gICAgLyoqXG4gICAgICogVGltZSBlbGFwc2VkIGluIG1pbGxpc2Vjb25kcyBmcm9tIGxhc3QgZnJhbWUgdG8gdGhpcyBmcmFtZS5cbiAgICAgKiBPcHBvc2VkIHRvIHdoYXQgdGhlIHNjYWxhciB7QGxpbmsgUElYSS50aWNrZXIuVGlja2VyI2RlbHRhVGltZX1cbiAgICAgKiBpcyBiYXNlZCwgdGhpcyB2YWx1ZSBpcyBuZWl0aGVyIGNhcHBlZCBub3Igc2NhbGVkLlxuICAgICAqIElmIHRoZSBwbGF0Zm9ybSBzdXBwb3J0cyBET01IaWdoUmVzVGltZVN0YW1wLFxuICAgICAqIHRoaXMgdmFsdWUgd2lsbCBoYXZlIGEgcHJlY2lzaW9uIG9mIDEgwrVzLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7RE9NSGlnaFJlc1RpbWVTdGFtcHxudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMSAvIFRBUkdFVF9GUE1TXG4gICAgICovXG4gICAgdGhpcy5lbGFwc2VkTVMgPSAxIC8gQ09OU1QuVEFSR0VUX0ZQTVM7IC8vIGRlZmF1bHQgdG8gdGFyZ2V0IGZyYW1lIHRpbWVcblxuICAgIC8qKlxuICAgICAqIFRoZSBsYXN0IHRpbWUge0BsaW5rIFBJWEkudGlja2VyLlRpY2tlciN1cGRhdGV9IHdhcyBpbnZva2VkLlxuICAgICAqIFRoaXMgdmFsdWUgaXMgYWxzbyByZXNldCBpbnRlcm5hbGx5IG91dHNpZGUgb2YgaW52b2tpbmdcbiAgICAgKiB1cGRhdGUsIGJ1dCBvbmx5IHdoZW4gYSBuZXcgYW5pbWF0aW9uIGZyYW1lIGlzIHJlcXVlc3RlZC5cbiAgICAgKiBJZiB0aGUgcGxhdGZvcm0gc3VwcG9ydHMgRE9NSGlnaFJlc1RpbWVTdGFtcCxcbiAgICAgKiB0aGlzIHZhbHVlIHdpbGwgaGF2ZSBhIHByZWNpc2lvbiBvZiAxIMK1cy5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge0RPTUhpZ2hSZXNUaW1lU3RhbXB8bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDBcbiAgICAgKi9cbiAgICB0aGlzLmxhc3RUaW1lID0gMDtcblxuICAgIC8qKlxuICAgICAqIEZhY3RvciBvZiBjdXJyZW50IHtAbGluayBQSVhJLnRpY2tlci5UaWNrZXIjZGVsdGFUaW1lfS5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIC8vIFNjYWxlcyB0aWNrZXIuZGVsdGFUaW1lIHRvIHdoYXQgd291bGQgYmVcbiAgICAgKiAvLyB0aGUgZXF1aXZhbGVudCBvZiBhcHByb3hpbWF0ZWx5IDEyMCBGUFNcbiAgICAgKiB0aWNrZXIuc3BlZWQgPSAyO1xuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDFcbiAgICAgKi9cbiAgICB0aGlzLnNwZWVkID0gMTtcblxuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgb3Igbm90IHRoaXMgdGlja2VyIGhhcyBiZWVuIHN0YXJ0ZWQuXG4gICAgICogYHRydWVgIGlmIHtAbGluayBQSVhJLnRpY2tlci5UaWNrZXIjc3RhcnR9IGhhcyBiZWVuIGNhbGxlZC5cbiAgICAgKiBgZmFsc2VgIGlmIHtAbGluayBQSVhJLnRpY2tlci5UaWNrZXIjc3RvcH0gaGFzIGJlZW4gY2FsbGVkLlxuICAgICAqIFdoaWxlIGBmYWxzZWAsIHRoaXMgdmFsdWUgbWF5IGNoYW5nZSB0byBgdHJ1ZWAgaW4gdGhlXG4gICAgICogZXZlbnQgb2Yge0BsaW5rIFBJWEkudGlja2VyLlRpY2tlciNhdXRvU3RhcnR9IGJlaW5nIGB0cnVlYFxuICAgICAqIGFuZCBhIGxpc3RlbmVyIGlzIGFkZGVkLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgICAqL1xuICAgIHRoaXMuc3RhcnRlZCA9IGZhbHNlO1xufVxuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhUaWNrZXIucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogVGhlIGZyYW1lcyBwZXIgc2Vjb25kIGF0IHdoaWNoIHRoaXMgdGlja2VyIGlzIHJ1bm5pbmcuXG4gICAgICogVGhlIGRlZmF1bHQgaXMgYXBwcm94aW1hdGVseSA2MCBpbiBtb3N0IG1vZGVybiBicm93c2Vycy5cbiAgICAgKiAqKk5vdGU6KiogVGhpcyBkb2VzIG5vdCBmYWN0b3IgaW4gdGhlIHZhbHVlIG9mXG4gICAgICoge0BsaW5rIFBJWEkudGlja2VyLlRpY2tlciNzcGVlZH0sIHdoaWNoIGlzIHNwZWNpZmljXG4gICAgICogdG8gc2NhbGluZyB7QGxpbmsgUElYSS50aWNrZXIuVGlja2VyI2RlbHRhVGltZX0uXG4gICAgICpcbiAgICAgKiBAbWVtYmVyXG4gICAgICogQG1lbWJlcm9mIFBJWEkudGlja2VyLlRpY2tlciNcbiAgICAgKiBAcmVhZG9ubHlcbiAgICAgKi9cbiAgICBGUFM6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbigpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiAxMDAwIC8gdGhpcy5lbGFwc2VkTVM7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogTWFuYWdlcyB0aGUgbWF4aW11bSBhbW91bnQgb2YgbWlsbGlzZWNvbmRzIGFsbG93ZWQgdG9cbiAgICAgKiBlbGFwc2UgYmV0d2VlbiBpbnZva2luZyB7QGxpbmsgUElYSS50aWNrZXIuVGlja2VyI3VwZGF0ZX0uXG4gICAgICogVGhpcyB2YWx1ZSBpcyB1c2VkIHRvIGNhcCB7QGxpbmsgUElYSS50aWNrZXIuVGlja2VyI2RlbHRhVGltZX0sXG4gICAgICogYnV0IGRvZXMgbm90IGVmZmVjdCB0aGUgbWVhc3VyZWQgdmFsdWUgb2Yge0BsaW5rIFBJWEkudGlja2VyLlRpY2tlciNGUFN9LlxuICAgICAqIFdoZW4gc2V0dGluZyB0aGlzIHByb3BlcnR5IGl0IGlzIGNsYW1wZWQgdG8gYSB2YWx1ZSBiZXR3ZWVuXG4gICAgICogYDBgIGFuZCBgUElYSS5UQVJHRVRfRlBNUyAqIDEwMDBgLlxuICAgICAqXG4gICAgICogQG1lbWJlclxuICAgICAqIEBtZW1iZXJvZiBQSVhJLnRpY2tlci5UaWNrZXIjXG4gICAgICogQGRlZmF1bHQgMTBcbiAgICAgKi9cbiAgICBtaW5GUFM6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbigpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiAxMDAwIC8gdGhpcy5fbWF4RWxhcHNlZE1TO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uKGZwcylcbiAgICAgICAge1xuICAgICAgICAgICAgLy8gQ2xhbXA6IDAgdG8gVEFSR0VUX0ZQTVNcbiAgICAgICAgICAgIHZhciBtaW5GUE1TID0gTWF0aC5taW4oTWF0aC5tYXgoMCwgZnBzKSAvIDEwMDAsIENPTlNULlRBUkdFVF9GUE1TKTtcbiAgICAgICAgICAgIHRoaXMuX21heEVsYXBzZWRNUyA9IDEgLyBtaW5GUE1TO1xuICAgICAgICB9XG4gICAgfVxufSk7XG5cbi8qKlxuICogQ29uZGl0aW9uYWxseSByZXF1ZXN0cyBhIG5ldyBhbmltYXRpb24gZnJhbWUuXG4gKiBJZiBhIGZyYW1lIGhhcyBub3QgYWxyZWFkeSBiZWVuIHJlcXVlc3RlZCwgYW5kIGlmIHRoZSBpbnRlcm5hbFxuICogZW1pdHRlciBoYXMgbGlzdGVuZXJzLCBhIG5ldyBmcmFtZSBpcyByZXF1ZXN0ZWQuXG4gKlxuICogQHByaXZhdGVcbiAqL1xuVGlja2VyLnByb3RvdHlwZS5fcmVxdWVzdElmTmVlZGVkID0gZnVuY3Rpb24gX3JlcXVlc3RJZk5lZWRlZCgpXG57XG4gICAgaWYgKHRoaXMuX3JlcXVlc3RJZCA9PT0gbnVsbCAmJiB0aGlzLl9lbWl0dGVyLmxpc3RlbmVycyhUSUNLLCB0cnVlKSlcbiAgICB7XG4gICAgICAgIC8vIGVuc3VyZSBjYWxsYmFja3MgZ2V0IGNvcnJlY3QgZGVsdGFcbiAgICAgICAgdGhpcy5sYXN0VGltZSA9IHBlcmZvcm1hbmNlLm5vdygpO1xuICAgICAgICB0aGlzLl9yZXF1ZXN0SWQgPSByZXF1ZXN0QW5pbWF0aW9uRnJhbWUodGhpcy5fdGljayk7XG4gICAgfVxufTtcblxuLyoqXG4gKiBDb25kaXRpb25hbGx5IGNhbmNlbHMgYSBwZW5kaW5nIGFuaW1hdGlvbiBmcmFtZS5cbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5UaWNrZXIucHJvdG90eXBlLl9jYW5jZWxJZk5lZWRlZCA9IGZ1bmN0aW9uIF9jYW5jZWxJZk5lZWRlZCgpXG57XG4gICAgaWYgKHRoaXMuX3JlcXVlc3RJZCAhPT0gbnVsbClcbiAgICB7XG4gICAgICAgIGNhbmNlbEFuaW1hdGlvbkZyYW1lKHRoaXMuX3JlcXVlc3RJZCk7XG4gICAgICAgIHRoaXMuX3JlcXVlc3RJZCA9IG51bGw7XG4gICAgfVxufTtcblxuLyoqXG4gKiBDb25kaXRpb25hbGx5IHJlcXVlc3RzIGEgbmV3IGFuaW1hdGlvbiBmcmFtZS5cbiAqIElmIHRoZSB0aWNrZXIgaGFzIGJlZW4gc3RhcnRlZCBpdCBjaGVja3MgaWYgYSBmcmFtZSBoYXMgbm90IGFscmVhZHlcbiAqIGJlZW4gcmVxdWVzdGVkLCBhbmQgaWYgdGhlIGludGVybmFsIGVtaXR0ZXIgaGFzIGxpc3RlbmVycy4gSWYgdGhlc2VcbiAqIGNvbmRpdGlvbnMgYXJlIG1ldCwgYSBuZXcgZnJhbWUgaXMgcmVxdWVzdGVkLiBJZiB0aGUgdGlja2VyIGhhcyBub3RcbiAqIGJlZW4gc3RhcnRlZCwgYnV0IGF1dG9TdGFydCBpcyBgdHJ1ZWAsIHRoZW4gdGhlIHRpY2tlciBzdGFydHMgbm93LFxuICogYW5kIGNvbnRpbnVlcyB3aXRoIHRoZSBwcmV2aW91cyBjb25kaXRpb25zIHRvIHJlcXVlc3QgYSBuZXcgZnJhbWUuXG4gKlxuICogQHByaXZhdGVcbiAqL1xuVGlja2VyLnByb3RvdHlwZS5fc3RhcnRJZlBvc3NpYmxlID0gZnVuY3Rpb24gX3N0YXJ0SWZQb3NzaWJsZSgpXG57XG4gICAgaWYgKHRoaXMuc3RhcnRlZClcbiAgICB7XG4gICAgICAgIHRoaXMuX3JlcXVlc3RJZk5lZWRlZCgpO1xuICAgIH1cbiAgICBlbHNlIGlmICh0aGlzLmF1dG9TdGFydClcbiAgICB7XG4gICAgICAgIHRoaXMuc3RhcnQoKTtcbiAgICB9XG59O1xuXG4vKipcbiAqIENhbGxzIHtAbGluayBtb2R1bGU6ZXZlbnRlbWl0dGVyMy5FdmVudEVtaXR0ZXIjb259IGludGVybmFsbHkgZm9yIHRoZVxuICogaW50ZXJuYWwgJ3RpY2snIGV2ZW50LiBJdCBjaGVja3MgaWYgdGhlIGVtaXR0ZXIgaGFzIGxpc3RlbmVycyxcbiAqIGFuZCBpZiBzbyBpdCByZXF1ZXN0cyBhIG5ldyBhbmltYXRpb24gZnJhbWUgYXQgdGhpcyBwb2ludC5cbiAqXG4gKiBAcGFyYW0gZm4ge0Z1bmN0aW9ufSBUaGUgbGlzdGVuZXIgZnVuY3Rpb24gdG8gYmUgYWRkZWQgZm9yIHVwZGF0ZXNcbiAqIEBwYXJhbSBbY29udGV4dF0ge0Z1bmN0aW9ufSBUaGUgbGlzdGVuZXIgY29udGV4dFxuICogQHJldHVybnMge1BJWEkudGlja2VyLlRpY2tlcn0gdGhpc1xuICovXG5UaWNrZXIucHJvdG90eXBlLmFkZCA9IGZ1bmN0aW9uIGFkZChmbiwgY29udGV4dClcbntcbiAgICB0aGlzLl9lbWl0dGVyLm9uKFRJQ0ssIGZuLCBjb250ZXh0KTtcblxuICAgIHRoaXMuX3N0YXJ0SWZQb3NzaWJsZSgpO1xuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIENhbGxzIHtAbGluayBtb2R1bGU6ZXZlbnRlbWl0dGVyMy5FdmVudEVtaXR0ZXIjb25jZX0gaW50ZXJuYWxseSBmb3IgdGhlXG4gKiBpbnRlcm5hbCAndGljaycgZXZlbnQuIEl0IGNoZWNrcyBpZiB0aGUgZW1pdHRlciBoYXMgbGlzdGVuZXJzLFxuICogYW5kIGlmIHNvIGl0IHJlcXVlc3RzIGEgbmV3IGFuaW1hdGlvbiBmcmFtZSBhdCB0aGlzIHBvaW50LlxuICpcbiAqIEBwYXJhbSBmbiB7RnVuY3Rpb259IFRoZSBsaXN0ZW5lciBmdW5jdGlvbiB0byBiZSBhZGRlZCBmb3Igb25lIHVwZGF0ZVxuICogQHBhcmFtIFtjb250ZXh0XSB7RnVuY3Rpb259IFRoZSBsaXN0ZW5lciBjb250ZXh0XG4gKiBAcmV0dXJucyB7UElYSS50aWNrZXIuVGlja2VyfSB0aGlzXG4gKi9cblRpY2tlci5wcm90b3R5cGUuYWRkT25jZSA9IGZ1bmN0aW9uIGFkZE9uY2UoZm4sIGNvbnRleHQpXG57XG4gICAgdGhpcy5fZW1pdHRlci5vbmNlKFRJQ0ssIGZuLCBjb250ZXh0KTtcblxuICAgIHRoaXMuX3N0YXJ0SWZQb3NzaWJsZSgpO1xuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIENhbGxzIHtAbGluayBtb2R1bGU6ZXZlbnRlbWl0dGVyMy5FdmVudEVtaXR0ZXIjb2ZmfSBpbnRlcm5hbGx5IGZvciAndGljaycgZXZlbnQuXG4gKiBJdCBjaGVja3MgaWYgdGhlIGVtaXR0ZXIgaGFzIGxpc3RlbmVycyBmb3IgJ3RpY2snIGV2ZW50LlxuICogSWYgaXQgZG9lcywgdGhlbiBpdCBjYW5jZWxzIHRoZSBhbmltYXRpb24gZnJhbWUuXG4gKlxuICogQHBhcmFtIFtmbl0ge0Z1bmN0aW9ufSBUaGUgbGlzdGVuZXIgZnVuY3Rpb24gdG8gYmUgcmVtb3ZlZFxuICogQHBhcmFtIFtjb250ZXh0XSB7RnVuY3Rpb259IFRoZSBsaXN0ZW5lciBjb250ZXh0IHRvIGJlIHJlbW92ZWRcbiAqIEByZXR1cm5zIHtQSVhJLnRpY2tlci5UaWNrZXJ9IHRoaXNcbiAqL1xuVGlja2VyLnByb3RvdHlwZS5yZW1vdmUgPSBmdW5jdGlvbiByZW1vdmUoZm4sIGNvbnRleHQpXG57XG4gICAgdGhpcy5fZW1pdHRlci5vZmYoVElDSywgZm4sIGNvbnRleHQpO1xuXG4gICAgaWYgKCF0aGlzLl9lbWl0dGVyLmxpc3RlbmVycyhUSUNLLCB0cnVlKSlcbiAgICB7XG4gICAgICAgIHRoaXMuX2NhbmNlbElmTmVlZGVkKCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIFN0YXJ0cyB0aGUgdGlja2VyLiBJZiB0aGUgdGlja2VyIGhhcyBsaXN0ZW5lcnNcbiAqIGEgbmV3IGFuaW1hdGlvbiBmcmFtZSBpcyByZXF1ZXN0ZWQgYXQgdGhpcyBwb2ludC5cbiAqL1xuVGlja2VyLnByb3RvdHlwZS5zdGFydCA9IGZ1bmN0aW9uIHN0YXJ0KClcbntcbiAgICBpZiAoIXRoaXMuc3RhcnRlZClcbiAgICB7XG4gICAgICAgIHRoaXMuc3RhcnRlZCA9IHRydWU7XG4gICAgICAgIHRoaXMuX3JlcXVlc3RJZk5lZWRlZCgpO1xuICAgIH1cbn07XG5cbi8qKlxuICogU3RvcHMgdGhlIHRpY2tlci4gSWYgdGhlIHRpY2tlciBoYXMgcmVxdWVzdGVkXG4gKiBhbiBhbmltYXRpb24gZnJhbWUgaXQgaXMgY2FuY2VsZWQgYXQgdGhpcyBwb2ludC5cbiAqL1xuVGlja2VyLnByb3RvdHlwZS5zdG9wID0gZnVuY3Rpb24gc3RvcCgpXG57XG4gICAgaWYgKHRoaXMuc3RhcnRlZClcbiAgICB7XG4gICAgICAgIHRoaXMuc3RhcnRlZCA9IGZhbHNlO1xuICAgICAgICB0aGlzLl9jYW5jZWxJZk5lZWRlZCgpO1xuICAgIH1cbn07XG5cbi8qKlxuICogVHJpZ2dlcnMgYW4gdXBkYXRlLiBBbiB1cGRhdGUgZW50YWlscyBzZXR0aW5nIHRoZVxuICogY3VycmVudCB7QGxpbmsgUElYSS50aWNrZXIuVGlja2VyI2VsYXBzZWRNU30sXG4gKiB0aGUgY3VycmVudCB7QGxpbmsgUElYSS50aWNrZXIuVGlja2VyI2RlbHRhVGltZX0sXG4gKiBpbnZva2luZyBhbGwgbGlzdGVuZXJzIHdpdGggY3VycmVudCBkZWx0YVRpbWUsXG4gKiBhbmQgdGhlbiBmaW5hbGx5IHNldHRpbmcge0BsaW5rIFBJWEkudGlja2VyLlRpY2tlciNsYXN0VGltZX1cbiAqIHdpdGggdGhlIHZhbHVlIG9mIGN1cnJlbnRUaW1lIHRoYXQgd2FzIHByb3ZpZGVkLlxuICogVGhpcyBtZXRob2Qgd2lsbCBiZSBjYWxsZWQgYXV0b21hdGljYWxseSBieSBhbmltYXRpb25cbiAqIGZyYW1lIGNhbGxiYWNrcyBpZiB0aGUgdGlja2VyIGluc3RhbmNlIGhhcyBiZWVuIHN0YXJ0ZWRcbiAqIGFuZCBsaXN0ZW5lcnMgYXJlIGFkZGVkLlxuICpcbiAqIEBwYXJhbSBbY3VycmVudFRpbWU9cGVyZm9ybWFuY2Uubm93KCldIHtET01IaWdoUmVzVGltZVN0YW1wfG51bWJlcn0gdGhlIGN1cnJlbnQgdGltZSBvZiBleGVjdXRpb25cbiAqL1xuVGlja2VyLnByb3RvdHlwZS51cGRhdGUgPSBmdW5jdGlvbiB1cGRhdGUoY3VycmVudFRpbWUpXG57XG4gICAgdmFyIGVsYXBzZWRNUztcblxuICAgIC8vIEFsbG93IGNhbGxpbmcgdXBkYXRlIGRpcmVjdGx5IHdpdGggZGVmYXVsdCBjdXJyZW50VGltZS5cbiAgICBjdXJyZW50VGltZSA9IGN1cnJlbnRUaW1lIHx8IHBlcmZvcm1hbmNlLm5vdygpO1xuICAgIC8vIFNhdmUgdW5jYXBwZWQgZWxhcHNlZE1TIGZvciBtZWFzdXJlbWVudFxuICAgIGVsYXBzZWRNUyA9IHRoaXMuZWxhcHNlZE1TID0gY3VycmVudFRpbWUgLSB0aGlzLmxhc3RUaW1lO1xuXG4gICAgLy8gY2FwIHRoZSBtaWxsaXNlY29uZHMgZWxhcHNlZCB1c2VkIGZvciBkZWx0YVRpbWVcbiAgICBpZiAoZWxhcHNlZE1TID4gdGhpcy5fbWF4RWxhcHNlZE1TKVxuICAgIHtcbiAgICAgICAgZWxhcHNlZE1TID0gdGhpcy5fbWF4RWxhcHNlZE1TO1xuICAgIH1cblxuICAgIHRoaXMuZGVsdGFUaW1lID0gZWxhcHNlZE1TICogQ09OU1QuVEFSR0VUX0ZQTVMgKiB0aGlzLnNwZWVkO1xuXG4gICAgLy8gSW52b2tlIGxpc3RlbmVycyBhZGRlZCB0byBpbnRlcm5hbCBlbWl0dGVyXG4gICAgdGhpcy5fZW1pdHRlci5lbWl0KFRJQ0ssIHRoaXMuZGVsdGFUaW1lKTtcblxuICAgIHRoaXMubGFzdFRpbWUgPSBjdXJyZW50VGltZTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gVGlja2VyO1xuIiwidmFyIFRpY2tlciA9IHJlcXVpcmUoJy4vVGlja2VyJyk7XG5cbi8qKlxuICogVGhlIHNoYXJlZCB0aWNrZXIgaW5zdGFuY2UgdXNlZCBieSB7QGxpbmsgUElYSS5leHRyYXMuTW92aWVDbGlwfS5cbiAqIGFuZCBieSB7QGxpbmsgUElYSS5pbnRlcmFjdGlvbi5JbnRlcmFjdGlvbk1hbmFnZXJ9LlxuICogVGhlIHByb3BlcnR5IHtAbGluayBQSVhJLnRpY2tlci5UaWNrZXIjYXV0b1N0YXJ0fSBpcyBzZXQgdG8gYHRydWVgXG4gKiBmb3IgdGhpcyBpbnN0YW5jZS4gUGxlYXNlIGZvbGxvdyB0aGUgZXhhbXBsZXMgZm9yIHVzYWdlLCBpbmNsdWRpbmdcbiAqIGhvdyB0byBvcHQtb3V0IG9mIGF1dG8tc3RhcnRpbmcgdGhlIHNoYXJlZCB0aWNrZXIuXG4gKlxuICogQGV4YW1wbGVcbiAqIHZhciB0aWNrZXIgPSBQSVhJLnRpY2tlci5zaGFyZWQ7XG4gKiAvLyBTZXQgdGhpcyB0byBwcmV2ZW50IHN0YXJ0aW5nIHRoaXMgdGlja2VyIHdoZW4gbGlzdGVuZXJzIGFyZSBhZGRlZC5cbiAqIC8vIEJ5IGRlZmF1bHQgdGhpcyBpcyB0cnVlIG9ubHkgZm9yIHRoZSBQSVhJLnRpY2tlci5zaGFyZWQgaW5zdGFuY2UuXG4gKiB0aWNrZXIuYXV0b1N0YXJ0ID0gZmFsc2U7XG4gKiAvLyBGWUksIGNhbGwgdGhpcyB0byBlbnN1cmUgdGhlIHRpY2tlciBpcyBzdG9wcGVkLiBJdCBzaG91bGQgYmUgc3RvcHBlZFxuICogLy8gaWYgeW91IGhhdmUgbm90IGF0dGVtcHRlZCB0byByZW5kZXIgYW55dGhpbmcgeWV0LlxuICogdGlja2VyLnN0b3AoKTtcbiAqIC8vIENhbGwgdGhpcyB3aGVuIHlvdSBhcmUgcmVhZHkgZm9yIGEgcnVubmluZyBzaGFyZWQgdGlja2VyLlxuICogdGlja2VyLnN0YXJ0KCk7XG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIFlvdSBtYXkgdXNlIHRoZSBzaGFyZWQgdGlja2VyIHRvIHJlbmRlci4uLlxuICogdmFyIHJlbmRlcmVyID0gUElYSS5hdXRvRGV0ZWN0UmVuZGVyZXIoODAwLCA2MDApO1xuICogdmFyIHN0YWdlID0gbmV3IFBJWEkuQ29udGFpbmVyKCk7XG4gKiB2YXIgaW50ZXJhY3Rpb25NYW5hZ2VyID0gUElYSS5pbnRlcmFjdGlvbi5JbnRlcmFjdGlvbk1hbmFnZXIocmVuZGVyZXIpO1xuICogZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChyZW5kZXJlci52aWV3KTtcbiAqIHRpY2tlci5hZGQoZnVuY3Rpb24gKHRpbWUpIHtcbiAqICAgICByZW5kZXJlci5yZW5kZXIoc3RhZ2UpO1xuICogfSk7XG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIE9yIHlvdSBjYW4ganVzdCB1cGRhdGUgaXQgbWFudWFsbHkuXG4gKiB0aWNrZXIuYXV0b1N0YXJ0ID0gZmFsc2U7XG4gKiB0aWNrZXIuc3RvcCgpO1xuICogZnVuY3Rpb24gYW5pbWF0ZSh0aW1lKSB7XG4gKiAgICAgdGlja2VyLnVwZGF0ZSh0aW1lKTtcbiAqICAgICByZW5kZXJlci5yZW5kZXIoc3RhZ2UpO1xuICogICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZShhbmltYXRlKTtcbiAqIH1cbiAqIGFuaW1hdGUocGVyZm9ybWFuY2Uubm93KCkpO1xuICpcbiAqIEB0eXBlIHtQSVhJLnRpY2tlci5UaWNrZXJ9XG4gKiBAbWVtYmVyb2YgUElYSS50aWNrZXJcbiAqL1xudmFyIHNoYXJlZCA9IG5ldyBUaWNrZXIoKTtcbnNoYXJlZC5hdXRvU3RhcnQgPSB0cnVlO1xuXG4vKipcbiAqIEBuYW1lc3BhY2UgUElYSS50aWNrZXJcbiAqL1xubW9kdWxlLmV4cG9ydHMgPSB7XG4gICAgc2hhcmVkOiBzaGFyZWQsXG4gICAgVGlja2VyOiBUaWNrZXJcbn07XG4iLCIvKipcbiAqIEdlbmVyaWMgTWFzayBTdGFjayBkYXRhIHN0cnVjdHVyZVxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICovXG5cbnZhciBHTF9NQVAgPSB7fTtcblxuXG52YXIgY3JlYXRlSW5kaWNlc0ZvclF1YWRzID0gZnVuY3Rpb24gKHNpemUpXG57XG4gICAgLy8gdGhlIHRvdGFsIG51bWJlciBvZiBpbmRpY2VzIGluIG91ciBhcnJheSwgdGhlcmUgYXJlIDYgcG9pbnRzIHBlciBxdWFkLlxuICAgXG4gICAgdmFyIHRvdGFsSW5kaWNlcyA9IHNpemUgKiA2O1xuXG4gICAgdmFyIGluZGljZXMgPSBuZXcgVWludDE2QXJyYXkodG90YWxJbmRpY2VzKTtcblxuXHQvLyBmaWxsIHRoZSBpbmRpY2VzIHdpdGggdGhlIHF1YWRzIHRvIGRyYXdcbiAgICBmb3IgKHZhciBpPTAsIGo9MDsgaSA8IHRvdGFsSW5kaWNlczsgaSArPSA2LCBqICs9IDQpXG4gICAge1xuICAgICAgICBpbmRpY2VzW2kgKyAwXSA9IGogKyAwO1xuICAgICAgICBpbmRpY2VzW2kgKyAxXSA9IGogKyAxO1xuICAgICAgICBpbmRpY2VzW2kgKyAyXSA9IGogKyAyO1xuICAgICAgICBpbmRpY2VzW2kgKyAzXSA9IGogKyAwO1xuICAgICAgICBpbmRpY2VzW2kgKyA0XSA9IGogKyAyO1xuICAgICAgICBpbmRpY2VzW2kgKyA1XSA9IGogKyAzO1xuICAgIH1cblxuICAgIHJldHVybiBpbmRpY2VzO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBjcmVhdGVJbmRpY2VzRm9yUXVhZHM7IiwidmFyIENPTlNUID0gcmVxdWlyZSgnLi4vY29uc3QnKTtcblxuLyoqXG4gKiBAbmFtZXNwYWNlIFBJWEkudXRpbHNcbiAqL1xudmFyIHV0aWxzID0gbW9kdWxlLmV4cG9ydHMgPSB7XG4gICAgX3VpZDogMCxcbiAgICBfc2FpZEhlbGxvOiBmYWxzZSxcblxuICAgIEV2ZW50RW1pdHRlcjogICByZXF1aXJlKCdldmVudGVtaXR0ZXIzJyksXG4gICAgcGx1Z2luVGFyZ2V0OiAgIHJlcXVpcmUoJy4vcGx1Z2luVGFyZ2V0JyksXG4gICAgYXN5bmM6ICAgICAgICAgIHJlcXVpcmUoJ2FzeW5jJyksXG5cbiAgICAvKipcbiAgICAgKiBHZXRzIHRoZSBuZXh0IHVuaXF1ZSBpZGVudGlmaWVyXG4gICAgICpcbiAgICAgKiBAcmV0dXJuIHtudW1iZXJ9IFRoZSBuZXh0IHVuaXF1ZSBpZGVudGlmaWVyIHRvIHVzZS5cbiAgICAgKi9cbiAgICB1aWQ6IGZ1bmN0aW9uICgpXG4gICAge1xuICAgICAgICByZXR1cm4gKyt1dGlscy5fdWlkO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBDb252ZXJ0cyBhIGhleCBjb2xvciBudW1iZXIgdG8gYW4gW1IsIEcsIEJdIGFycmF5XG4gICAgICpcbiAgICAgKiBAcGFyYW0gaGV4IHtudW1iZXJ9XG4gICAgICogQHBhcmFtICB7bnVtYmVyW119IFtvdXQ9W11dXG4gICAgICogQHJldHVybiB7bnVtYmVyW119IEFuIGFycmF5IHJlcHJlc2VudGluZyB0aGUgW1IsIEcsIEJdIG9mIHRoZSBjb2xvci5cbiAgICAgKi9cbiAgICBoZXgycmdiOiBmdW5jdGlvbiAoaGV4LCBvdXQpXG4gICAge1xuICAgICAgICBvdXQgPSBvdXQgfHwgW107XG5cbiAgICAgICAgb3V0WzBdID0gKGhleCA+PiAxNiAmIDB4RkYpIC8gMjU1O1xuICAgICAgICBvdXRbMV0gPSAoaGV4ID4+IDggJiAweEZGKSAvIDI1NTtcbiAgICAgICAgb3V0WzJdID0gKGhleCAmIDB4RkYpIC8gMjU1O1xuXG4gICAgICAgIHJldHVybiBvdXQ7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIENvbnZlcnRzIGEgaGV4IGNvbG9yIG51bWJlciB0byBhIHN0cmluZy5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBoZXgge251bWJlcn1cbiAgICAgKiBAcmV0dXJuIHtzdHJpbmd9IFRoZSBzdHJpbmcgY29sb3IuXG4gICAgICovXG4gICAgaGV4MnN0cmluZzogZnVuY3Rpb24gKGhleClcbiAgICB7XG4gICAgICAgIGhleCA9IGhleC50b1N0cmluZygxNik7XG4gICAgICAgIGhleCA9ICcwMDAwMDAnLnN1YnN0cigwLCA2IC0gaGV4Lmxlbmd0aCkgKyBoZXg7XG5cbiAgICAgICAgcmV0dXJuICcjJyArIGhleDtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQ29udmVydHMgYSBjb2xvciBhcyBhbiBbUiwgRywgQl0gYXJyYXkgdG8gYSBoZXggbnVtYmVyXG4gICAgICpcbiAgICAgKiBAcGFyYW0gcmdiIHtudW1iZXJbXX1cbiAgICAgKiBAcmV0dXJuIHtudW1iZXJ9IFRoZSBjb2xvciBudW1iZXJcbiAgICAgKi9cbiAgICByZ2IyaGV4OiBmdW5jdGlvbiAocmdiKVxuICAgIHtcbiAgICAgICAgcmV0dXJuICgocmdiWzBdKjI1NSA8PCAxNikgKyAocmdiWzFdKjI1NSA8PCA4KSArIHJnYlsyXSoyNTUpO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBDaGVja3Mgd2hldGhlciB0aGUgQ2FudmFzIEJsZW5kTW9kZXMgYXJlIHN1cHBvcnRlZCBieSB0aGUgY3VycmVudCBicm93c2VyXG4gICAgICpcbiAgICAgKiBAcmV0dXJuIHtib29sZWFufSB3aGV0aGVyIHRoZXkgYXJlIHN1cHBvcnRlZFxuICAgICAqL1xuICAgIGNhblVzZU5ld0NhbnZhc0JsZW5kTW9kZXM6IGZ1bmN0aW9uICgpXG4gICAge1xuICAgICAgICBpZiAodHlwZW9mIGRvY3VtZW50ID09PSAndW5kZWZpbmVkJylcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIHBuZ0hlYWQgPSAnZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFBUUFBQUFCQVFNQUFBREQ4cDJPQUFBQUExQk1WRVgvJztcbiAgICAgICAgdmFyIHBuZ0VuZCA9ICdBQUFBQ2tsRVFWUUkxMk5nQUFBQUFnQUI0aUc4TXdBQUFBQkpSVTVFcmtKZ2dnPT0nO1xuXG4gICAgICAgIHZhciBtYWdlbnRhID0gbmV3IEltYWdlKCk7XG4gICAgICAgIG1hZ2VudGEuc3JjID0gcG5nSGVhZCArICdBUDgwNE9hNicgKyBwbmdFbmQ7XG5cbiAgICAgICAgdmFyIHllbGxvdyA9IG5ldyBJbWFnZSgpO1xuICAgICAgICB5ZWxsb3cuc3JjID0gcG5nSGVhZCArICcvd0NLeHZSRicgKyBwbmdFbmQ7XG5cbiAgICAgICAgdmFyIGNhbnZhcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NhbnZhcycpO1xuICAgICAgICBjYW52YXMud2lkdGggPSA2O1xuICAgICAgICBjYW52YXMuaGVpZ2h0ID0gMTtcblxuICAgICAgICB2YXIgY29udGV4dCA9IGNhbnZhcy5nZXRDb250ZXh0KCcyZCcpO1xuICAgICAgICBjb250ZXh0Lmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbiA9ICdtdWx0aXBseSc7XG4gICAgICAgIGNvbnRleHQuZHJhd0ltYWdlKG1hZ2VudGEsIDAsIDApO1xuICAgICAgICBjb250ZXh0LmRyYXdJbWFnZSh5ZWxsb3csIDIsIDApO1xuXG4gICAgICAgIHZhciBkYXRhID0gY29udGV4dC5nZXRJbWFnZURhdGEoMiwwLDEsMSkuZGF0YTtcblxuICAgICAgICByZXR1cm4gKGRhdGFbMF0gPT09IDI1NSAmJiBkYXRhWzFdID09PSAwICYmIGRhdGFbMl0gPT09IDApO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBHaXZlbiBhIG51bWJlciwgdGhpcyBmdW5jdGlvbiByZXR1cm5zIHRoZSBjbG9zZXN0IG51bWJlciB0aGF0IGlzIGEgcG93ZXIgb2YgdHdvXG4gICAgICogdGhpcyBmdW5jdGlvbiBpcyB0YWtlbiBmcm9tIFN0YXJsaW5nIEZyYW1ld29yayBhcyBpdHMgcHJldHR5IG5lYXQgOylcbiAgICAgKlxuICAgICAqIEBwYXJhbSBudW1iZXIge251bWJlcn1cbiAgICAgKiBAcmV0dXJuIHtudW1iZXJ9IHRoZSBjbG9zZXN0IG51bWJlciB0aGF0IGlzIGEgcG93ZXIgb2YgdHdvXG4gICAgICovXG4gICAgZ2V0TmV4dFBvd2VyT2ZUd286IGZ1bmN0aW9uIChudW1iZXIpXG4gICAge1xuICAgICAgICAvLyBzZWU6IGh0dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvUG93ZXJfb2ZfdHdvI0Zhc3RfYWxnb3JpdGhtX3RvX2NoZWNrX2lmX2FfcG9zaXRpdmVfbnVtYmVyX2lzX2FfcG93ZXJfb2ZfdHdvXG4gICAgICAgIGlmIChudW1iZXIgPiAwICYmIChudW1iZXIgJiAobnVtYmVyIC0gMSkpID09PSAwKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gbnVtYmVyO1xuICAgICAgICB9XG4gICAgICAgIGVsc2VcbiAgICAgICAge1xuICAgICAgICAgICAgdmFyIHJlc3VsdCA9IDE7XG5cbiAgICAgICAgICAgIHdoaWxlIChyZXN1bHQgPCBudW1iZXIpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgcmVzdWx0IDw8PSAxO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIGNoZWNrcyBpZiB0aGUgZ2l2ZW4gd2lkdGggYW5kIGhlaWdodCBtYWtlIGEgcG93ZXIgb2YgdHdvIHJlY3RhbmdsZVxuICAgICAqXG4gICAgICogQHBhcmFtIHdpZHRoIHtudW1iZXJ9XG4gICAgICogQHBhcmFtIGhlaWdodCB7bnVtYmVyfVxuICAgICAqIEByZXR1cm4ge2Jvb2xlYW59XG4gICAgICovXG4gICAgaXNQb3dlck9mVHdvOiBmdW5jdGlvbiAod2lkdGgsIGhlaWdodClcbiAgICB7XG4gICAgICAgIHJldHVybiAod2lkdGggPiAwICYmICh3aWR0aCAmICh3aWR0aCAtIDEpKSA9PT0gMCAmJiBoZWlnaHQgPiAwICYmIChoZWlnaHQgJiAoaGVpZ2h0IC0gMSkpID09PSAwKTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogZ2V0IHRoZSByZXNvbHV0aW9uIG9mIGFuIGFzc2V0IGJ5IGxvb2tpbmcgZm9yIHRoZSBwcmVmaXhcbiAgICAgKiB1c2VkIGJ5IHNwcml0ZXNoZWV0cyBhbmQgaW1hZ2UgdXJsc1xuICAgICAqXG4gICAgICogQHBhcmFtIHVybCB7c3RyaW5nfSB0aGUgaW1hZ2UgcGF0aFxuICAgICAqIEByZXR1cm4ge251bWJlcn1cbiAgICAgKi9cbiAgICBnZXRSZXNvbHV0aW9uT2ZVcmw6IGZ1bmN0aW9uICh1cmwpXG4gICAge1xuICAgICAgICB2YXIgcmVzb2x1dGlvbiA9IENPTlNULlJFVElOQV9QUkVGSVguZXhlYyh1cmwpO1xuXG4gICAgICAgIGlmIChyZXNvbHV0aW9uKVxuICAgICAgICB7XG4gICAgICAgICAgIHJldHVybiBwYXJzZUZsb2F0KHJlc29sdXRpb25bMV0pO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIDE7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIExvZ3Mgb3V0IHRoZSB2ZXJzaW9uIGFuZCByZW5kZXJlciBpbmZvcm1hdGlvbiBmb3IgdGhpcyBydW5uaW5nIGluc3RhbmNlIG9mIFBJWEkuXG4gICAgICogSWYgeW91IGRvbid0IHdhbnQgdG8gc2VlIHRoaXMgbWVzc2FnZSB5b3UgY2FuIHNldCBgUElYSS51dGlscy5fc2FpZEhlbGxvID0gdHJ1ZTtgXG4gICAgICogc28gdGhlIGxpYnJhcnkgdGhpbmtzIGl0IGFscmVhZHkgc2FpZCBpdC4gS2VlcCBpbiBtaW5kIHRoYXQgZG9pbmcgdGhhdCB3aWxsIGZvcmV2ZXJcbiAgICAgKiBtYWtlcyB5b3UgYSBqZXJrIGZhY2UuXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gdHlwZSAtIFRoZSBzdHJpbmcgcmVuZGVyZXIgdHlwZSB0byBsb2cuXG4gICAgICogQGNvbnN0YW50XG4gICAgICogQHN0YXRpY1xuICAgICAqL1xuICAgIHNheUhlbGxvOiBmdW5jdGlvbiAodHlwZSlcbiAgICB7XG4gICAgICAgIGlmICh1dGlscy5fc2FpZEhlbGxvKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAobmF2aWdhdG9yLnVzZXJBZ2VudC50b0xvd2VyQ2FzZSgpLmluZGV4T2YoJ2Nocm9tZScpID4gLTEpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHZhciBhcmdzID0gW1xuICAgICAgICAgICAgICAgICdcXG4gJWMgJWMgJWMgUGl4aS5qcyAnICsgQ09OU1QuVkVSU0lPTiArICcgLSDinLAgJyArIHR5cGUgKyAnIOKcsCAgJWMgJyArICcgJWMgJyArICcgaHR0cDovL3d3dy5waXhpanMuY29tLyAgJWMgJWMg4pmlJWPimaUlY+KZpSBcXG5cXG4nLFxuICAgICAgICAgICAgICAgICdiYWNrZ3JvdW5kOiAjZmY2NmE1OyBwYWRkaW5nOjVweCAwOycsXG4gICAgICAgICAgICAgICAgJ2JhY2tncm91bmQ6ICNmZjY2YTU7IHBhZGRpbmc6NXB4IDA7JyxcbiAgICAgICAgICAgICAgICAnY29sb3I6ICNmZjY2YTU7IGJhY2tncm91bmQ6ICMwMzAzMDc7IHBhZGRpbmc6NXB4IDA7JyxcbiAgICAgICAgICAgICAgICAnYmFja2dyb3VuZDogI2ZmNjZhNTsgcGFkZGluZzo1cHggMDsnLFxuICAgICAgICAgICAgICAgICdiYWNrZ3JvdW5kOiAjZmZjM2RjOyBwYWRkaW5nOjVweCAwOycsXG4gICAgICAgICAgICAgICAgJ2JhY2tncm91bmQ6ICNmZjY2YTU7IHBhZGRpbmc6NXB4IDA7JyxcbiAgICAgICAgICAgICAgICAnY29sb3I6ICNmZjI0MjQ7IGJhY2tncm91bmQ6ICNmZmY7IHBhZGRpbmc6NXB4IDA7JyxcbiAgICAgICAgICAgICAgICAnY29sb3I6ICNmZjI0MjQ7IGJhY2tncm91bmQ6ICNmZmY7IHBhZGRpbmc6NXB4IDA7JyxcbiAgICAgICAgICAgICAgICAnY29sb3I6ICNmZjI0MjQ7IGJhY2tncm91bmQ6ICNmZmY7IHBhZGRpbmc6NXB4IDA7J1xuICAgICAgICAgICAgXTtcblxuICAgICAgICAgICAgd2luZG93LmNvbnNvbGUubG9nLmFwcGx5KGNvbnNvbGUsIGFyZ3MpOyAvL2pzaGludCBpZ25vcmU6bGluZVxuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHdpbmRvdy5jb25zb2xlKVxuICAgICAgICB7XG4gICAgICAgICAgICB3aW5kb3cuY29uc29sZS5sb2coJ1BpeGkuanMgJyArIENPTlNULlZFUlNJT04gKyAnIC0gJyArIHR5cGUgKyAnIC0gaHR0cDovL3d3dy5waXhpanMuY29tLycpOyAvL2pzaGludCBpZ25vcmU6bGluZVxuICAgICAgICB9XG5cbiAgICAgICAgdXRpbHMuX3NhaWRIZWxsbyA9IHRydWU7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIEhlbHBlciBmb3IgY2hlY2tpbmcgZm9yIHdlYmdsIHN1cHBvcnRcbiAgICAgKlxuICAgICAqIEByZXR1cm4ge2Jvb2xlYW59XG4gICAgICovXG4gICAgaXNXZWJHTFN1cHBvcnRlZDogZnVuY3Rpb24gKClcbiAgICB7XG4gICAgICAgIHZhciBjb250ZXh0T3B0aW9ucyA9IHsgc3RlbmNpbDogdHJ1ZSB9O1xuICAgICAgICB0cnlcbiAgICAgICAge1xuICAgICAgICAgICAgaWYgKCF3aW5kb3cuV2ViR0xSZW5kZXJpbmdDb250ZXh0KVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdmFyIGNhbnZhcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NhbnZhcycpLFxuICAgICAgICAgICAgICAgIGdsID0gY2FudmFzLmdldENvbnRleHQoJ3dlYmdsJywgY29udGV4dE9wdGlvbnMpIHx8IGNhbnZhcy5nZXRDb250ZXh0KCdleHBlcmltZW50YWwtd2ViZ2wnLCBjb250ZXh0T3B0aW9ucyk7XG5cbiAgICAgICAgICAgIHJldHVybiAhIShnbCAmJiBnbC5nZXRDb250ZXh0QXR0cmlidXRlcygpLnN0ZW5jaWwpO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyBzaWduIG9mIG51bWJlclxuICAgICAqXG4gICAgICogQHBhcmFtIG4ge251bWJlcn1cbiAgICAgKiBAcmV0dXJucyB7bnVtYmVyfSAwIGlmIG4gaXMgMCwgLTEgaWYgbiBpcyBuZWdhdGl2ZSwgMSBpZiBuIGkgcG9zaXRpdmVcbiAgICAgKi9cbiAgICBzaWduOiBmdW5jdGlvbiAobilcbiAgICB7XG4gICAgICAgIHJldHVybiBuID8gKG4gPCAwID8gLTEgOiAxKSA6IDA7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIHJlbW92ZUl0ZW1zXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge2FycmF5fSBhcnIgVGhlIHRhcmdldCBhcnJheVxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBzdGFydElkeCBUaGUgaW5kZXggdG8gYmVnaW4gcmVtb3ZpbmcgZnJvbSAoaW5jbHVzaXZlKVxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSByZW1vdmVDb3VudCBIb3cgbWFueSBpdGVtcyB0byByZW1vdmVcbiAgICAgKi9cbiAgICByZW1vdmVJdGVtczogZnVuY3Rpb24gKGFyciwgc3RhcnRJZHgsIHJlbW92ZUNvdW50KVxuICAgIHtcbiAgICAgICAgdmFyIGxlbmd0aCA9IGFyci5sZW5ndGg7XG5cbiAgICAgICAgaWYgKHN0YXJ0SWR4ID49IGxlbmd0aCB8fCByZW1vdmVDb3VudCA9PT0gMClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgcmVtb3ZlQ291bnQgPSAoc3RhcnRJZHgrcmVtb3ZlQ291bnQgPiBsZW5ndGggPyBsZW5ndGgtc3RhcnRJZHggOiByZW1vdmVDb3VudCk7XG4gICAgICAgIGZvciAodmFyIGkgPSBzdGFydElkeCwgbGVuID0gbGVuZ3RoLXJlbW92ZUNvdW50OyBpIDwgbGVuOyArK2kpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGFycltpXSA9IGFycltpICsgcmVtb3ZlQ291bnRdO1xuICAgICAgICB9XG5cbiAgICAgICAgYXJyLmxlbmd0aCA9IGxlbjtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQHRvZG8gRGVzY3JpYmUgcHJvcGVydHkgdXNhZ2VcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIFRleHR1cmVDYWNoZToge30sXG5cbiAgICAvKipcbiAgICAgKiBAdG9kbyBEZXNjcmliZSBwcm9wZXJ0eSB1c2FnZVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgQmFzZVRleHR1cmVDYWNoZToge31cbn07XG4iLCIvKipcbiAqIE1peGlucyBmdW5jdGlvbmFsaXR5IHRvIG1ha2UgYW4gb2JqZWN0IGhhdmUgXCJwbHVnaW5zXCIuXG4gKlxuICogQG1peGluXG4gKiBAbWVtYmVyb2YgUElYSS51dGlsc1xuICogQHBhcmFtIG9iaiB7b2JqZWN0fSBUaGUgb2JqZWN0IHRvIG1peCBpbnRvLlxuICogQGV4YW1wbGVcbiAqICAgICAgZnVuY3Rpb24gTXlPYmplY3QoKSB7fVxuICpcbiAqICAgICAgcGx1Z2luVGFyZ2V0Lm1peGluKE15T2JqZWN0KTtcbiAqL1xuZnVuY3Rpb24gcGx1Z2luVGFyZ2V0KG9iailcbntcbiAgICBvYmouX19wbHVnaW5zID0ge307XG5cbiAgICAvKipcbiAgICAgKiBBZGRzIGEgcGx1Z2luIHRvIGFuIG9iamVjdFxuICAgICAqXG4gICAgICogQHBhcmFtIHBsdWdpbk5hbWUge3N0cmluZ30gVGhlIGV2ZW50cyB0aGF0IHNob3VsZCBiZSBsaXN0ZWQuXG4gICAgICogQHBhcmFtIGN0b3Ige0Z1bmN0aW9ufSBUaGUgY29uc3RydWN0b3IgZnVuY3Rpb24gZm9yIHRoZSBwbHVnaW4uXG4gICAgICovXG4gICAgb2JqLnJlZ2lzdGVyUGx1Z2luID0gZnVuY3Rpb24gKHBsdWdpbk5hbWUsIGN0b3IpXG4gICAge1xuICAgICAgICBvYmouX19wbHVnaW5zW3BsdWdpbk5hbWVdID0gY3RvcjtcbiAgICB9O1xuXG4gICAgLyoqXG4gICAgICogSW5zdGFudGlhdGVzIGFsbCB0aGUgcGx1Z2lucyBvZiB0aGlzIG9iamVjdFxuICAgICAqXG4gICAgICovXG4gICAgb2JqLnByb3RvdHlwZS5pbml0UGx1Z2lucyA9IGZ1bmN0aW9uICgpXG4gICAge1xuICAgICAgICB0aGlzLnBsdWdpbnMgPSB0aGlzLnBsdWdpbnMgfHwge307XG5cbiAgICAgICAgZm9yICh2YXIgbyBpbiBvYmouX19wbHVnaW5zKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnBsdWdpbnNbb10gPSBuZXcgKG9iai5fX3BsdWdpbnNbb10pKHRoaXMpO1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIC8qKlxuICAgICAqIFJlbW92ZXMgYWxsIHRoZSBwbHVnaW5zIG9mIHRoaXMgb2JqZWN0XG4gICAgICpcbiAgICAgKi9cbiAgICBvYmoucHJvdG90eXBlLmRlc3Ryb3lQbHVnaW5zID0gZnVuY3Rpb24gKClcbiAgICB7XG4gICAgICAgIGZvciAodmFyIG8gaW4gdGhpcy5wbHVnaW5zKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnBsdWdpbnNbb10uZGVzdHJveSgpO1xuICAgICAgICAgICAgdGhpcy5wbHVnaW5zW29dID0gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMucGx1Z2lucyA9IG51bGw7XG4gICAgfTtcbn1cblxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgICAvKipcbiAgICAgKiBNaXhlcyBpbiB0aGUgcHJvcGVydGllcyBvZiB0aGUgcGx1Z2luVGFyZ2V0IGludG8gYW5vdGhlciBvYmplY3RcbiAgICAgKlxuICAgICAqIEBwYXJhbSBvYmplY3Qge29iamVjdH0gVGhlIG9iaiB0byBtaXggaW50b1xuICAgICAqL1xuICAgIG1peGluOiBmdW5jdGlvbiBtaXhpbihvYmopXG4gICAge1xuICAgICAgICBwbHVnaW5UYXJnZXQob2JqKTtcbiAgICB9XG59O1xuIiwiLypnbG9iYWwgY29uc29sZSAqL1xudmFyIGNvcmUgPSByZXF1aXJlKCcuL2NvcmUnKSxcbiAgICBtZXNoID0gcmVxdWlyZSgnLi9tZXNoJyksXG4gICAgZXh0cmFzID0gcmVxdWlyZSgnLi9leHRyYXMnKSxcbiAgICBmaWx0ZXJzID0gcmVxdWlyZSgnLi9maWx0ZXJzJyk7XG5cbi8qKlxuICogQGNsYXNzXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgU3ByaXRlQmF0Y2hcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAc2VlIFBJWEkuUGFydGljbGVDb250YWluZXJcbiAqIEB0aHJvd3Mge1JlZmVyZW5jZUVycm9yfSBTcHJpdGVCYXRjaCBkb2VzIG5vdCBleGlzdCBhbnkgbW9yZSwgcGxlYXNlIHVzZSB0aGUgbmV3IFBhcnRpY2xlQ29udGFpbmVyIGluc3RlYWQuXG4gKiBAZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDMuMC4wXG4gKi9cbmNvcmUuU3ByaXRlQmF0Y2ggPSBmdW5jdGlvbigpXG57XG4gICAgdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKCdTcHJpdGVCYXRjaCBkb2VzIG5vdCBleGlzdCBhbnkgbW9yZSwgcGxlYXNlIHVzZSB0aGUgbmV3IFBhcnRpY2xlQ29udGFpbmVyIGluc3RlYWQuJyk7XG59O1xuXG4vKipcbiAqIEBjbGFzc1xuICogQHByaXZhdGVcbiAqIEBuYW1lIEFzc2V0TG9hZGVyXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHNlZSBQSVhJLmxvYWRlcnMuTG9hZGVyXG4gKiBAdGhyb3dzIHtSZWZlcmVuY2VFcnJvcn0gVGhlIGxvYWRlciBzeXN0ZW0gd2FzIG92ZXJoYXVsZWQgaW4gcGl4aSB2MywgcGxlYXNlIHNlZSB0aGUgbmV3IFBJWEkubG9hZGVycy5Mb2FkZXIgY2xhc3MuXG4gKiBAZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDMuMC4wXG4gKi9cbmNvcmUuQXNzZXRMb2FkZXIgPSBmdW5jdGlvbigpXG57XG4gICAgdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKCdUaGUgbG9hZGVyIHN5c3RlbSB3YXMgb3ZlcmhhdWxlZCBpbiBwaXhpIHYzLCBwbGVhc2Ugc2VlIHRoZSBuZXcgUElYSS5sb2FkZXJzLkxvYWRlciBjbGFzcy4nKTtcbn07XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGNvcmUsIHtcblxuICAgIC8qKlxuICAgICAqIEBjbGFzc1xuICAgICAqIEBwcml2YXRlXG4gICAgICogQG5hbWUgU3RhZ2VcbiAgICAgKiBAbWVtYmVyb2YgUElYSVxuICAgICAqIEBzZWUgUElYSS5Db250YWluZXJcbiAgICAgKiBAZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDMuMC4wXG4gICAgICovXG4gICAgU3RhZ2U6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbigpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignWW91IGRvIG5vdCBuZWVkIHRvIHVzZSBhIFBJWEkgU3RhZ2UgYW55IG1vcmUsIHlvdSBjYW4gc2ltcGx5IHJlbmRlciBhbnkgY29udGFpbmVyLicpO1xuICAgICAgICAgICAgcmV0dXJuIGNvcmUuQ29udGFpbmVyO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIEBjbGFzc1xuICAgICAqIEBwcml2YXRlXG4gICAgICogQG5hbWUgRGlzcGxheU9iamVjdENvbnRhaW5lclxuICAgICAqIEBtZW1iZXJvZiBQSVhJXG4gICAgICogQHNlZSBQSVhJLkNvbnRhaW5lclxuICAgICAqIEBkZXByZWNhdGVkIHNpbmNlIHZlcnNpb24gMy4wLjBcbiAgICAgKi9cbiAgICBEaXNwbGF5T2JqZWN0Q29udGFpbmVyOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24oKVxuICAgICAgICB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ0Rpc3BsYXlPYmplY3RDb250YWluZXIgaGFzIGJlZW4gc2hvcnRlbmVkIHRvIENvbnRhaW5lciwgcGxlYXNlIHVzZSBDb250YWluZXIgZnJvbSBub3cgb24uJyk7XG4gICAgICAgICAgICByZXR1cm4gY29yZS5Db250YWluZXI7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQGNsYXNzXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAbmFtZSBTdHJpcFxuICAgICAqIEBtZW1iZXJvZiBQSVhJXG4gICAgICogQHNlZSBQSVhJLm1lc2guTWVzaFxuICAgICAqIEBkZXByZWNhdGVkIHNpbmNlIHZlcnNpb24gMy4wLjBcbiAgICAgKi9cbiAgICBTdHJpcDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uKClcbiAgICAgICAge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKCdUaGUgU3RyaXAgY2xhc3MgaGFzIGJlZW4gcmVuYW1lZCB0byBNZXNoIGFuZCBtb3ZlZCB0byBtZXNoLk1lc2gsIHBsZWFzZSB1c2UgbWVzaC5NZXNoIGZyb20gbm93IG9uLicpO1xuICAgICAgICAgICAgcmV0dXJuIG1lc2guTWVzaDtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBAY2xhc3NcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBuYW1lIFJvcGVcbiAgICAgKiBAbWVtYmVyb2YgUElYSVxuICAgICAqIEBzZWUgUElYSS5tZXNoLlJvcGVcbiAgICAgKiBAZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDMuMC4wXG4gICAgICovXG4gICAgUm9wZToge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uKClcbiAgICAgICAge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKCdUaGUgUm9wZSBjbGFzcyBoYXMgYmVlbiBtb3ZlZCB0byBtZXNoLlJvcGUsIHBsZWFzZSB1c2UgbWVzaC5Sb3BlIGZyb20gbm93IG9uLicpO1xuICAgICAgICAgICAgcmV0dXJuIG1lc2guUm9wZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBAY2xhc3NcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBuYW1lIE1vdmllQ2xpcFxuICAgICAqIEBtZW1iZXJvZiBQSVhJXG4gICAgICogQHNlZSBQSVhJLmV4dHJhcy5Nb3ZpZUNsaXBcbiAgICAgKiBAZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDMuMC4wXG4gICAgICovXG4gICAgTW92aWVDbGlwOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24oKVxuICAgICAgICB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ1RoZSBNb3ZpZUNsaXAgY2xhc3MgaGFzIGJlZW4gbW92ZWQgdG8gZXh0cmFzLk1vdmllQ2xpcCwgcGxlYXNlIHVzZSBleHRyYXMuTW92aWVDbGlwIGZyb20gbm93IG9uLicpO1xuICAgICAgICAgICAgcmV0dXJuIGV4dHJhcy5Nb3ZpZUNsaXA7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQGNsYXNzXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAbmFtZSBUaWxpbmdTcHJpdGVcbiAgICAgKiBAbWVtYmVyb2YgUElYSVxuICAgICAqIEBzZWUgUElYSS5leHRyYXMuVGlsaW5nU3ByaXRlXG4gICAgICogQGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiAzLjAuMFxuICAgICAqL1xuICAgIFRpbGluZ1Nwcml0ZToge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uKClcbiAgICAgICAge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKCdUaGUgVGlsaW5nU3ByaXRlIGNsYXNzIGhhcyBiZWVuIG1vdmVkIHRvIGV4dHJhcy5UaWxpbmdTcHJpdGUsIHBsZWFzZSB1c2UgZXh0cmFzLlRpbGluZ1Nwcml0ZSBmcm9tIG5vdyBvbi4nKTtcbiAgICAgICAgICAgIHJldHVybiBleHRyYXMuVGlsaW5nU3ByaXRlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIEBjbGFzc1xuICAgICAqIEBwcml2YXRlXG4gICAgICogQG5hbWUgQml0bWFwVGV4dFxuICAgICAqIEBtZW1iZXJvZiBQSVhJXG4gICAgICogQHNlZSBQSVhJLmV4dHJhcy5CaXRtYXBUZXh0XG4gICAgICogQGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiAzLjAuMFxuICAgICAqL1xuICAgIEJpdG1hcFRleHQ6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbigpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignVGhlIEJpdG1hcFRleHQgY2xhc3MgaGFzIGJlZW4gbW92ZWQgdG8gZXh0cmFzLkJpdG1hcFRleHQsIHBsZWFzZSB1c2UgZXh0cmFzLkJpdG1hcFRleHQgZnJvbSBub3cgb24uJyk7XG4gICAgICAgICAgICByZXR1cm4gZXh0cmFzLkJpdG1hcFRleHQ7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQGNsYXNzXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAbmFtZSBibGVuZE1vZGVzXG4gICAgICogQG1lbWJlcm9mIFBJWElcbiAgICAgKiBAc2VlIFBJWEkuQkxFTkRfTU9ERVNcbiAgICAgKiBAZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDMuMC4wXG4gICAgICovXG4gICAgYmxlbmRNb2Rlczoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uKClcbiAgICAgICAge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKCdUaGUgYmxlbmRNb2RlcyBoYXMgYmVlbiBtb3ZlZCB0byBCTEVORF9NT0RFUywgcGxlYXNlIHVzZSBCTEVORF9NT0RFUyBmcm9tIG5vdyBvbi4nKTtcbiAgICAgICAgICAgIHJldHVybiBjb3JlLkJMRU5EX01PREVTO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIEBjbGFzc1xuICAgICAqIEBwcml2YXRlXG4gICAgICogQG5hbWUgc2NhbGVNb2Rlc1xuICAgICAqIEBtZW1iZXJvZiBQSVhJXG4gICAgICogQHNlZSBQSVhJLlNDQUxFX01PREVTXG4gICAgICogQGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiAzLjAuMFxuICAgICAqL1xuICAgIHNjYWxlTW9kZXM6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbigpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignVGhlIHNjYWxlTW9kZXMgaGFzIGJlZW4gbW92ZWQgdG8gU0NBTEVfTU9ERVMsIHBsZWFzZSB1c2UgU0NBTEVfTU9ERVMgZnJvbSBub3cgb24uJyk7XG4gICAgICAgICAgICByZXR1cm4gY29yZS5TQ0FMRV9NT0RFUztcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBAY2xhc3NcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBuYW1lIEJhc2VUZXh0dXJlQ2FjaGVcbiAgICAgKiBAbWVtYmVyb2YgUElYSVxuICAgICAqIEBzZWUgUElYSS51dGlscy5CYXNlVGV4dHVyZUNhY2hlXG4gICAgICogQGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiAzLjAuMFxuICAgICAqL1xuICAgIEJhc2VUZXh0dXJlQ2FjaGU6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ1RoZSBCYXNlVGV4dHVyZUNhY2hlIGNsYXNzIGhhcyBiZWVuIG1vdmVkIHRvIHV0aWxzLkJhc2VUZXh0dXJlQ2FjaGUsIHBsZWFzZSB1c2UgdXRpbHMuQmFzZVRleHR1cmVDYWNoZSBmcm9tIG5vdyBvbi4nKTtcbiAgICAgICAgICAgIHJldHVybiBjb3JlLnV0aWxzLkJhc2VUZXh0dXJlQ2FjaGU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQGNsYXNzXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAbmFtZSBUZXh0dXJlQ2FjaGVcbiAgICAgKiBAbWVtYmVyb2YgUElYSVxuICAgICAqIEBzZWUgUElYSS51dGlscy5UZXh0dXJlQ2FjaGVcbiAgICAgKiBAZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDMuMC4wXG4gICAgICovXG4gICAgVGV4dHVyZUNhY2hlOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKCdUaGUgVGV4dHVyZUNhY2hlIGNsYXNzIGhhcyBiZWVuIG1vdmVkIHRvIHV0aWxzLlRleHR1cmVDYWNoZSwgcGxlYXNlIHVzZSB1dGlscy5UZXh0dXJlQ2FjaGUgZnJvbSBub3cgb24uJyk7XG4gICAgICAgICAgICByZXR1cm4gY29yZS51dGlscy5UZXh0dXJlQ2FjaGU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQG5hbWVzcGFjZVxuICAgICAqIEBwcml2YXRlXG4gICAgICogQG5hbWUgbWF0aFxuICAgICAqIEBtZW1iZXJvZiBQSVhJXG4gICAgICogQHNlZSBQSVhJXG4gICAgICogQGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiAzLjAuNlxuICAgICAqL1xuICAgIG1hdGg6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ1RoZSBtYXRoIG5hbWVzcGFjZSBpcyBkZXByZWNhdGVkLCBwbGVhc2UgYWNjZXNzIG1lbWJlcnMgYWxyZWFkeSBhY2Nlc3NpYmxlIG9uIFBJWEkuJyk7XG4gICAgICAgICAgICByZXR1cm4gY29yZTtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuXG4vKipcbiAqIEBtZXRob2RcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBQSVhJLlNwcml0ZSNzZXRUZXh0dXJlXG4gKiBAc2VlIFBJWEkuU3ByaXRlI3RleHR1cmVcbiAqIEBkZXByZWNhdGVkIHNpbmNlIHZlcnNpb24gMy4wLjBcbiAqL1xuY29yZS5TcHJpdGUucHJvdG90eXBlLnNldFRleHR1cmUgPSBmdW5jdGlvbih0ZXh0dXJlKVxue1xuICAgIHRoaXMudGV4dHVyZSA9IHRleHR1cmU7XG4gICAgY29uc29sZS53YXJuKCdzZXRUZXh0dXJlIGlzIG5vdyBkZXByZWNhdGVkLCBwbGVhc2UgdXNlIHRoZSB0ZXh0dXJlIHByb3BlcnR5LCBlLmcgOiBzcHJpdGUudGV4dHVyZSA9IHRleHR1cmU7Jyk7XG59O1xuXG4vKipcbiAqIEBtZXRob2RcbiAqIEBuYW1lIFBJWEkuZXh0cmFzLkJpdG1hcFRleHQjc2V0VGV4dFxuICogQHNlZSBQSVhJLmV4dHJhcy5CaXRtYXBUZXh0I3RleHRcbiAqIEBkZXByZWNhdGVkIHNpbmNlIHZlcnNpb24gMy4wLjBcbiAqL1xuZXh0cmFzLkJpdG1hcFRleHQucHJvdG90eXBlLnNldFRleHQgPSBmdW5jdGlvbih0ZXh0KVxue1xuICAgIHRoaXMudGV4dCA9IHRleHQ7XG4gICAgY29uc29sZS53YXJuKCdzZXRUZXh0IGlzIG5vdyBkZXByZWNhdGVkLCBwbGVhc2UgdXNlIHRoZSB0ZXh0IHByb3BlcnR5LCBlLmcgOiBteUJpdG1hcFRleHQudGV4dCA9IFxcJ215IHRleHRcXCc7Jyk7XG59O1xuXG4vKipcbiAqIEBtZXRob2RcbiAqIEBuYW1lIFBJWEkuVGV4dCNzZXRUZXh0XG4gKiBAc2VlIFBJWEkuVGV4dCN0ZXh0XG4gKiBAZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDMuMC4wXG4gKi9cbmNvcmUuVGV4dC5wcm90b3R5cGUuc2V0VGV4dCA9IGZ1bmN0aW9uKHRleHQpXG57XG4gICAgdGhpcy50ZXh0ID0gdGV4dDtcbiAgICBjb25zb2xlLndhcm4oJ3NldFRleHQgaXMgbm93IGRlcHJlY2F0ZWQsIHBsZWFzZSB1c2UgdGhlIHRleHQgcHJvcGVydHksIGUuZyA6IG15VGV4dC50ZXh0ID0gXFwnbXkgdGV4dFxcJzsnKTtcbn07XG5cbi8qKlxuICogQG1ldGhvZFxuICogQG5hbWUgUElYSS5UZXh0I3NldFN0eWxlXG4gKiBAc2VlIFBJWEkuVGV4dCNzdHlsZVxuICogQGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiAzLjAuMFxuICovXG5jb3JlLlRleHQucHJvdG90eXBlLnNldFN0eWxlID0gZnVuY3Rpb24oc3R5bGUpXG57XG4gICAgdGhpcy5zdHlsZSA9IHN0eWxlO1xuICAgIGNvbnNvbGUud2Fybignc2V0U3R5bGUgaXMgbm93IGRlcHJlY2F0ZWQsIHBsZWFzZSB1c2UgdGhlIHN0eWxlIHByb3BlcnR5LCBlLmcgOiBteVRleHQuc3R5bGUgPSBzdHlsZTsnKTtcbn07XG5cbi8qKlxuICogQG1ldGhvZFxuICogQG5hbWUgUElYSS5UZXh0dXJlI3NldEZyYW1lXG4gKiBAc2VlIFBJWEkuVGV4dHVyZSNzZXRGcmFtZVxuICogQGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiAzLjAuMFxuICovXG5jb3JlLlRleHR1cmUucHJvdG90eXBlLnNldEZyYW1lID0gZnVuY3Rpb24oZnJhbWUpXG57XG4gICAgdGhpcy5mcmFtZSA9IGZyYW1lO1xuICAgIGNvbnNvbGUud2Fybignc2V0RnJhbWUgaXMgbm93IGRlcHJlY2F0ZWQsIHBsZWFzZSB1c2UgdGhlIGZyYW1lIHByb3BlcnR5LCBlLmcgOiBteVRleHR1cmUuZnJhbWUgPSBmcmFtZTsnKTtcbn07XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGZpbHRlcnMsIHtcblxuICAgIC8qKlxuICAgICAqIEBjbGFzc1xuICAgICAqIEBwcml2YXRlXG4gICAgICogQG5hbWUgUElYSS5maWx0ZXJzLkFic3RyYWN0RmlsdGVyXG4gICAgICogQHNlZSBQSVhJLkFic3RyYWN0RmlsdGVyXG4gICAgICogQGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiAzLjAuNlxuICAgICAqL1xuICAgIEFic3RyYWN0RmlsdGVyOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24oKVxuICAgICAgICB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ2ZpbHRlcnMuQWJzdHJhY3RGaWx0ZXIgaXMgYW4gdW5kb2N1bWVudGVkIGFsaWFzLCBwbGVhc2UgdXNlIEFic3RyYWN0RmlsdGVyIGZyb20gbm93IG9uLicpO1xuICAgICAgICAgICAgcmV0dXJuIGNvcmUuQWJzdHJhY3RGaWx0ZXI7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQGNsYXNzXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAbmFtZSBQSVhJLmZpbHRlcnMuRlhBQUZpbHRlclxuICAgICAqIEBzZWUgUElYSS5GWEFBRmlsdGVyXG4gICAgICogQGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiAzLjAuNlxuICAgICAqL1xuICAgIEZYQUFGaWx0ZXI6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbigpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignZmlsdGVycy5GWEFBRmlsdGVyIGlzIGFuIHVuZG9jdW1lbnRlZCBhbGlhcywgcGxlYXNlIHVzZSBGWEFBRmlsdGVyIGZyb20gbm93IG9uLicpO1xuICAgICAgICAgICAgcmV0dXJuIGNvcmUuRlhBQUZpbHRlcjtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBAY2xhc3NcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBuYW1lIFBJWEkuZmlsdGVycy5TcHJpdGVNYXNrRmlsdGVyXG4gICAgICogQHNlZSBQSVhJLlNwcml0ZU1hc2tGaWx0ZXJcbiAgICAgKiBAZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDMuMC42XG4gICAgICovXG4gICAgU3ByaXRlTWFza0ZpbHRlcjoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uKClcbiAgICAgICAge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKCdmaWx0ZXJzLlNwcml0ZU1hc2tGaWx0ZXIgaXMgYW4gdW5kb2N1bWVudGVkIGFsaWFzLCBwbGVhc2UgdXNlIFNwcml0ZU1hc2tGaWx0ZXIgZnJvbSBub3cgb24uJyk7XG4gICAgICAgICAgICByZXR1cm4gY29yZS5TcHJpdGVNYXNrRmlsdGVyO1xuICAgICAgICB9XG4gICAgfVxufSk7XG5cbi8qKlxuICogQG1ldGhvZFxuICogQG5hbWUgUElYSS51dGlscy51dWlkXG4gKiBAc2VlIFBJWEkudXRpbHMudWlkXG4gKiBAZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDMuMC42XG4gKi9cbmNvcmUudXRpbHMudXVpZCA9IGZ1bmN0aW9uICgpXG57XG4gICAgY29uc29sZS53YXJuKCd1dGlscy51dWlkKCkgaXMgZGVwcmVjYXRlZCwgcGxlYXNlIHVzZSB1dGlscy51aWQoKSBmcm9tIG5vdyBvbi4nKTtcbiAgICByZXR1cm4gY29yZS51dGlscy51aWQoKTtcbn07XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uL2NvcmUnKTtcblxuLyoqXG4gKiBBIEJpdG1hcFRleHQgb2JqZWN0IHdpbGwgY3JlYXRlIGEgbGluZSBvciBtdWx0aXBsZSBsaW5lcyBvZiB0ZXh0IHVzaW5nIGJpdG1hcCBmb250LiBUb1xuICogc3BsaXQgYSBsaW5lIHlvdSBjYW4gdXNlICdcXG4nLCAnXFxyJyBvciAnXFxyXFxuJyBpbiB5b3VyIHN0cmluZy4gWW91IGNhbiBnZW5lcmF0ZSB0aGUgZm50IGZpbGVzIHVzaW5nOlxuICpcbiAqIEEgQml0bWFwVGV4dCBjYW4gb25seSBiZSBjcmVhdGVkIHdoZW4gdGhlIGZvbnQgaXMgbG9hZGVkXG4gKlxuICogYGBganNcbiAqIC8vIGluIHRoaXMgY2FzZSB0aGUgZm9udCBpcyBpbiBhIGZpbGUgY2FsbGVkICdkZXN5cmVsLmZudCdcbiAqIHZhciBiaXRtYXBUZXh0ID0gbmV3IFBJWEkuZXh0cmFzLkJpdG1hcFRleHQoXCJ0ZXh0IHVzaW5nIGEgZmFuY3kgZm9udCFcIiwge2ZvbnQ6IFwiMzVweCBEZXN5cmVsXCIsIGFsaWduOiBcInJpZ2h0XCJ9KTtcbiAqIGBgYFxuICpcbiAqXG4gKiBodHRwOi8vd3d3LmFuZ2VsY29kZS5jb20vcHJvZHVjdHMvYm1mb250LyBmb3Igd2luZG93cyBvclxuICogaHR0cDovL3d3dy5ibWdseXBoLmNvbS8gZm9yIG1hYy5cbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQ29udGFpbmVyXG4gKiBAbWVtYmVyb2YgUElYSS5leHRyYXNcbiAqIEBwYXJhbSB0ZXh0IHtzdHJpbmd9IFRoZSBjb3B5IHRoYXQgeW91IHdvdWxkIGxpa2UgdGhlIHRleHQgdG8gZGlzcGxheVxuICogQHBhcmFtIHN0eWxlIHtvYmplY3R9IFRoZSBzdHlsZSBwYXJhbWV0ZXJzXG4gKiBAcGFyYW0gc3R5bGUuZm9udCB7c3RyaW5nfG9iamVjdH0gVGhlIGZvbnQgZGVzY3JpcHRvciBmb3IgdGhlIG9iamVjdCwgY2FuIGJlIHBhc3NlZCBhcyBhIHN0cmluZyBvZiBmb3JtXG4gKiAgICAgIFwiMjRweCBGb250TmFtZVwiIG9yIFwiRm9udE5hbWVcIiBvciBhcyBhbiBvYmplY3Qgd2l0aCBleHBsaWNpdCBuYW1lL3NpemUgcHJvcGVydGllcy5cbiAqIEBwYXJhbSBbc3R5bGUuZm9udC5uYW1lXSB7c3RyaW5nfSBUaGUgYml0bWFwIGZvbnQgaWRcbiAqIEBwYXJhbSBbc3R5bGUuZm9udC5zaXplXSB7bnVtYmVyfSBUaGUgc2l6ZSBvZiB0aGUgZm9udCBpbiBwaXhlbHMsIGUuZy4gMjRcbiAqIEBwYXJhbSBbc3R5bGUuYWxpZ249J2xlZnQnXSB7c3RyaW5nfSBBbGlnbm1lbnQgZm9yIG11bHRpbGluZSB0ZXh0ICgnbGVmdCcsICdjZW50ZXInIG9yICdyaWdodCcpLCBkb2VzIG5vdCBhZmZlY3RcbiAqICAgICAgc2luZ2xlIGxpbmUgdGV4dFxuICogQHBhcmFtIFtzdHlsZS50aW50PTB4RkZGRkZGXSB7bnVtYmVyfSBUaGUgdGludCBjb2xvclxuICovXG5mdW5jdGlvbiBCaXRtYXBUZXh0KHRleHQsIHN0eWxlKVxue1xuICAgIGNvcmUuQ29udGFpbmVyLmNhbGwodGhpcyk7XG5cbiAgICBzdHlsZSA9IHN0eWxlIHx8IHt9O1xuXG4gICAgLyoqXG4gICAgICogVGhlIHdpZHRoIG9mIHRoZSBvdmVyYWxsIHRleHQsIGRpZmZlcmVudCBmcm9tIGZvbnRTaXplLFxuICAgICAqIHdoaWNoIGlzIGRlZmluZWQgaW4gdGhlIHN0eWxlIG9iamVjdFxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEByZWFkT25seVxuICAgICAqL1xuICAgIHRoaXMudGV4dFdpZHRoID0gMDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBoZWlnaHQgb2YgdGhlIG92ZXJhbGwgdGV4dCwgZGlmZmVyZW50IGZyb20gZm9udFNpemUsXG4gICAgICogd2hpY2ggaXMgZGVmaW5lZCBpbiB0aGUgc3R5bGUgb2JqZWN0XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQHJlYWRPbmx5XG4gICAgICovXG4gICAgdGhpcy50ZXh0SGVpZ2h0ID0gMDtcblxuICAgIC8qKlxuICAgICAqIFByaXZhdGUgdHJhY2tlciBmb3IgdGhlIGxldHRlciBzcHJpdGUgcG9vbC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuU3ByaXRlW119XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9nbHlwaHMgPSBbXTtcblxuICAgIC8qKlxuICAgICAqIFByaXZhdGUgdHJhY2tlciBmb3IgdGhlIGN1cnJlbnQgc3R5bGUuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtvYmplY3R9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9mb250ID0ge1xuICAgICAgICB0aW50OiBzdHlsZS50aW50ICE9PSB1bmRlZmluZWQgPyBzdHlsZS50aW50IDogMHhGRkZGRkYsXG4gICAgICAgIGFsaWduOiBzdHlsZS5hbGlnbiB8fCAnbGVmdCcsXG4gICAgICAgIG5hbWU6IG51bGwsXG4gICAgICAgIHNpemU6IDBcbiAgICB9O1xuXG4gICAgLyoqXG4gICAgICogUHJpdmF0ZSB0cmFja2VyIGZvciB0aGUgY3VycmVudCBmb250LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7b2JqZWN0fVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5mb250ID0gc3R5bGUuZm9udDsgLy8gcnVuIGZvbnQgc2V0dGVyXG5cbiAgICAvKipcbiAgICAgKiBQcml2YXRlIHRyYWNrZXIgZm9yIHRoZSBjdXJyZW50IHRleHQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtzdHJpbmd9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl90ZXh0ID0gdGV4dDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBtYXggd2lkdGggb2YgdGhpcyBiaXRtYXAgdGV4dCBpbiBwaXhlbHMuIElmIHRoZSB0ZXh0IHByb3ZpZGVkIGlzIGxvbmdlciB0aGFuIHRoZSB2YWx1ZSBwcm92aWRlZCwgbGluZSBicmVha3Mgd2lsbCBiZSBhdXRvbWF0aWNhbGx5IGluc2VydGVkIGluIHRoZSBsYXN0IHdoaXRlc3BhY2UuXG4gICAgICogRGlzYWJsZSBieSBzZXR0aW5nIHZhbHVlIHRvIDBcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLm1heFdpZHRoID0gMDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBtYXggbGluZSBoZWlnaHQuIFRoaXMgaXMgdXNlZnVsIHdoZW4gdHJ5aW5nIHRvIHVzZSB0aGUgdG90YWwgaGVpZ2h0IG9mIHRoZSBUZXh0LCBpZTogd2hlbiB0cnlpbmcgdG8gdmVydGljYWxseSBhbGlnbi5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLm1heExpbmVIZWlnaHQgPSAwO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGRpcnR5IHN0YXRlIG9mIHRoaXMgb2JqZWN0LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKi9cbiAgICB0aGlzLmRpcnR5ID0gZmFsc2U7XG5cbiAgICB0aGlzLnVwZGF0ZVRleHQoKTtcbn1cblxuLy8gY29uc3RydWN0b3JcbkJpdG1hcFRleHQucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShjb3JlLkNvbnRhaW5lci5wcm90b3R5cGUpO1xuQml0bWFwVGV4dC5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBCaXRtYXBUZXh0O1xubW9kdWxlLmV4cG9ydHMgPSBCaXRtYXBUZXh0O1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhCaXRtYXBUZXh0LnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFRoZSB0aW50IG9mIHRoZSBCaXRtYXBUZXh0IG9iamVjdFxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmV4dHJhcy5CaXRtYXBUZXh0I1xuICAgICAqL1xuICAgIHRpbnQ6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fZm9udC50aW50O1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5fZm9udC50aW50ID0gKHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicgJiYgdmFsdWUgPj0gMCkgPyB2YWx1ZSA6IDB4RkZGRkZGO1xuXG4gICAgICAgICAgICB0aGlzLmRpcnR5ID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBUaGUgYWxpZ25tZW50IG9mIHRoZSBCaXRtYXBUZXh0IG9iamVjdFxuICAgICAqXG4gICAgICogQG1lbWJlciB7c3RyaW5nfVxuICAgICAqIEBkZWZhdWx0ICdsZWZ0J1xuICAgICAqIEBtZW1iZXJvZiBQSVhJLmV4dHJhcy5CaXRtYXBUZXh0I1xuICAgICAqL1xuICAgIGFsaWduOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2ZvbnQuYWxpZ247XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLl9mb250LmFsaWduID0gdmFsdWUgfHwgJ2xlZnQnO1xuXG4gICAgICAgICAgICB0aGlzLmRpcnR5ID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBUaGUgZm9udCBkZXNjcmlwdG9yIG9mIHRoZSBCaXRtYXBUZXh0IG9iamVjdFxuICAgICAqXG4gICAgICogQG1lbWJlciB7Rm9udH1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5leHRyYXMuQml0bWFwVGV4dCNcbiAgICAgKi9cbiAgICBmb250OiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2ZvbnQ7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICBpZiAoIXZhbHVlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgICAgIHZhbHVlID0gdmFsdWUuc3BsaXQoJyAnKTtcblxuICAgICAgICAgICAgICAgIHRoaXMuX2ZvbnQubmFtZSA9IHZhbHVlLmxlbmd0aCA9PT0gMSA/IHZhbHVlWzBdIDogdmFsdWUuc2xpY2UoMSkuam9pbignICcpO1xuICAgICAgICAgICAgICAgIHRoaXMuX2ZvbnQuc2l6ZSA9IHZhbHVlLmxlbmd0aCA+PSAyID8gcGFyc2VJbnQodmFsdWVbMF0sIDEwKSA6IEJpdG1hcFRleHQuZm9udHNbdGhpcy5fZm9udC5uYW1lXS5zaXplO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fZm9udC5uYW1lID0gdmFsdWUubmFtZTtcbiAgICAgICAgICAgICAgICB0aGlzLl9mb250LnNpemUgPSB0eXBlb2YgdmFsdWUuc2l6ZSA9PT0gJ251bWJlcicgPyB2YWx1ZS5zaXplIDogcGFyc2VJbnQodmFsdWUuc2l6ZSwgMTApO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLmRpcnR5ID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBUaGUgdGV4dCBvZiB0aGUgQml0bWFwVGV4dCBvYmplY3RcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge3N0cmluZ31cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5leHRyYXMuQml0bWFwVGV4dCNcbiAgICAgKi9cbiAgICB0ZXh0OiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3RleHQ7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB2YWx1ZSA9IHZhbHVlLnRvU3RyaW5nKCkgfHwgJyAnO1xuICAgICAgICAgICAgaWYgKHRoaXMuX3RleHQgPT09IHZhbHVlKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuX3RleHQgPSB2YWx1ZTtcbiAgICAgICAgICAgIHRoaXMuZGlydHkgPSB0cnVlO1xuICAgICAgICB9XG4gICAgfVxufSk7XG5cbi8qKlxuICogUmVuZGVycyB0ZXh0IGFuZCB1cGRhdGVzIGl0IHdoZW4gbmVlZGVkXG4gKlxuICogQHByaXZhdGVcbiAqL1xuQml0bWFwVGV4dC5wcm90b3R5cGUudXBkYXRlVGV4dCA9IGZ1bmN0aW9uICgpXG57XG4gICAgdmFyIGRhdGEgPSBCaXRtYXBUZXh0LmZvbnRzW3RoaXMuX2ZvbnQubmFtZV07XG4gICAgdmFyIHBvcyA9IG5ldyBjb3JlLlBvaW50KCk7XG4gICAgdmFyIHByZXZDaGFyQ29kZSA9IG51bGw7XG4gICAgdmFyIGNoYXJzID0gW107XG4gICAgdmFyIGxhc3RMaW5lV2lkdGggPSAwO1xuICAgIHZhciBtYXhMaW5lV2lkdGggPSAwO1xuICAgIHZhciBsaW5lV2lkdGhzID0gW107XG4gICAgdmFyIGxpbmUgPSAwO1xuICAgIHZhciBzY2FsZSA9IHRoaXMuX2ZvbnQuc2l6ZSAvIGRhdGEuc2l6ZTtcbiAgICB2YXIgbGFzdFNwYWNlID0gLTE7XG4gICAgdmFyIG1heExpbmVIZWlnaHQgPSAwO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLnRleHQubGVuZ3RoOyBpKyspXG4gICAge1xuICAgICAgICB2YXIgY2hhckNvZGUgPSB0aGlzLnRleHQuY2hhckNvZGVBdChpKTtcbiAgICAgICAgbGFzdFNwYWNlID0gLyhcXHMpLy50ZXN0KHRoaXMudGV4dC5jaGFyQXQoaSkpID8gaSA6IGxhc3RTcGFjZTtcblxuICAgICAgICBpZiAoLyg/OlxcclxcbnxcXHJ8XFxuKS8udGVzdCh0aGlzLnRleHQuY2hhckF0KGkpKSlcbiAgICAgICAge1xuICAgICAgICAgICAgbGluZVdpZHRocy5wdXNoKGxhc3RMaW5lV2lkdGgpO1xuICAgICAgICAgICAgbWF4TGluZVdpZHRoID0gTWF0aC5tYXgobWF4TGluZVdpZHRoLCBsYXN0TGluZVdpZHRoKTtcbiAgICAgICAgICAgIGxpbmUrKztcblxuICAgICAgICAgICAgcG9zLnggPSAwO1xuICAgICAgICAgICAgcG9zLnkgKz0gZGF0YS5saW5lSGVpZ2h0O1xuICAgICAgICAgICAgcHJldkNoYXJDb2RlID0gbnVsbDtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGxhc3RTcGFjZSAhPT0gLTEgJiYgdGhpcy5tYXhXaWR0aCA+IDAgJiYgcG9zLnggKiBzY2FsZSA+IHRoaXMubWF4V2lkdGgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNvcmUudXRpbHMucmVtb3ZlSXRlbXMoY2hhcnMsIGxhc3RTcGFjZSwgaSAtIGxhc3RTcGFjZSk7XG4gICAgICAgICAgICBpID0gbGFzdFNwYWNlO1xuICAgICAgICAgICAgbGFzdFNwYWNlID0gLTE7XG5cbiAgICAgICAgICAgIGxpbmVXaWR0aHMucHVzaChsYXN0TGluZVdpZHRoKTtcbiAgICAgICAgICAgIG1heExpbmVXaWR0aCA9IE1hdGgubWF4KG1heExpbmVXaWR0aCwgbGFzdExpbmVXaWR0aCk7XG4gICAgICAgICAgICBsaW5lKys7XG5cbiAgICAgICAgICAgIHBvcy54ID0gMDtcbiAgICAgICAgICAgIHBvcy55ICs9IGRhdGEubGluZUhlaWdodDtcbiAgICAgICAgICAgIHByZXZDaGFyQ29kZSA9IG51bGw7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBjaGFyRGF0YSA9IGRhdGEuY2hhcnNbY2hhckNvZGVdO1xuXG4gICAgICAgIGlmICghY2hhckRhdGEpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHByZXZDaGFyQ29kZSAmJiBjaGFyRGF0YS5rZXJuaW5nW3ByZXZDaGFyQ29kZV0pXG4gICAgICAgIHtcbiAgICAgICAgICAgIHBvcy54ICs9IGNoYXJEYXRhLmtlcm5pbmdbcHJldkNoYXJDb2RlXTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNoYXJzLnB1c2goe3RleHR1cmU6Y2hhckRhdGEudGV4dHVyZSwgbGluZTogbGluZSwgY2hhckNvZGU6IGNoYXJDb2RlLCBwb3NpdGlvbjogbmV3IGNvcmUuUG9pbnQocG9zLnggKyBjaGFyRGF0YS54T2Zmc2V0LCBwb3MueSArIGNoYXJEYXRhLnlPZmZzZXQpfSk7XG4gICAgICAgIGxhc3RMaW5lV2lkdGggPSBwb3MueCArIChjaGFyRGF0YS50ZXh0dXJlLndpZHRoICsgY2hhckRhdGEueE9mZnNldCk7XG4gICAgICAgIHBvcy54ICs9IGNoYXJEYXRhLnhBZHZhbmNlO1xuICAgICAgICBtYXhMaW5lSGVpZ2h0ID0gTWF0aC5tYXgobWF4TGluZUhlaWdodCwgKGNoYXJEYXRhLnlPZmZzZXQgKyBjaGFyRGF0YS50ZXh0dXJlLmhlaWdodCkpO1xuICAgICAgICBwcmV2Q2hhckNvZGUgPSBjaGFyQ29kZTtcbiAgICB9XG5cbiAgICBsaW5lV2lkdGhzLnB1c2gobGFzdExpbmVXaWR0aCk7XG4gICAgbWF4TGluZVdpZHRoID0gTWF0aC5tYXgobWF4TGluZVdpZHRoLCBsYXN0TGluZVdpZHRoKTtcblxuICAgIHZhciBsaW5lQWxpZ25PZmZzZXRzID0gW107XG5cbiAgICBmb3IgKGkgPSAwOyBpIDw9IGxpbmU7IGkrKylcbiAgICB7XG4gICAgICAgIHZhciBhbGlnbk9mZnNldCA9IDA7XG5cbiAgICAgICAgaWYgKHRoaXMuX2ZvbnQuYWxpZ24gPT09ICdyaWdodCcpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGFsaWduT2Zmc2V0ID0gbWF4TGluZVdpZHRoIC0gbGluZVdpZHRoc1tpXTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh0aGlzLl9mb250LmFsaWduID09PSAnY2VudGVyJylcbiAgICAgICAge1xuICAgICAgICAgICAgYWxpZ25PZmZzZXQgPSAobWF4TGluZVdpZHRoIC0gbGluZVdpZHRoc1tpXSkgLyAyO1xuICAgICAgICB9XG5cbiAgICAgICAgbGluZUFsaWduT2Zmc2V0cy5wdXNoKGFsaWduT2Zmc2V0KTtcbiAgICB9XG5cbiAgICB2YXIgbGVuQ2hhcnMgPSBjaGFycy5sZW5ndGg7XG4gICAgdmFyIHRpbnQgPSB0aGlzLnRpbnQ7XG5cbiAgICBmb3IgKGkgPSAwOyBpIDwgbGVuQ2hhcnM7IGkrKylcbiAgICB7XG4gICAgICAgIHZhciBjID0gdGhpcy5fZ2x5cGhzW2ldOyAvLyBnZXQgdGhlIG5leHQgZ2x5cGggc3ByaXRlXG5cbiAgICAgICAgaWYgKGMpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGMudGV4dHVyZSA9IGNoYXJzW2ldLnRleHR1cmU7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgICBjID0gbmV3IGNvcmUuU3ByaXRlKGNoYXJzW2ldLnRleHR1cmUpO1xuICAgICAgICAgICAgdGhpcy5fZ2x5cGhzLnB1c2goYyk7XG4gICAgICAgIH1cblxuICAgICAgICBjLnBvc2l0aW9uLnggPSAoY2hhcnNbaV0ucG9zaXRpb24ueCArIGxpbmVBbGlnbk9mZnNldHNbY2hhcnNbaV0ubGluZV0pICogc2NhbGU7XG4gICAgICAgIGMucG9zaXRpb24ueSA9IGNoYXJzW2ldLnBvc2l0aW9uLnkgKiBzY2FsZTtcbiAgICAgICAgYy5zY2FsZS54ID0gYy5zY2FsZS55ID0gc2NhbGU7XG4gICAgICAgIGMudGludCA9IHRpbnQ7XG5cbiAgICAgICAgaWYgKCFjLnBhcmVudClcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5hZGRDaGlsZChjKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIHJlbW92ZSB1bm5lY2Vzc2FyeSBjaGlsZHJlbi5cbiAgICBmb3IgKGkgPSBsZW5DaGFyczsgaSA8IHRoaXMuX2dseXBocy5sZW5ndGg7ICsraSlcbiAgICB7XG4gICAgICAgIHRoaXMucmVtb3ZlQ2hpbGQodGhpcy5fZ2x5cGhzW2ldKTtcbiAgICB9XG5cbiAgICB0aGlzLnRleHRXaWR0aCA9IG1heExpbmVXaWR0aCAqIHNjYWxlO1xuICAgIHRoaXMudGV4dEhlaWdodCA9IChwb3MueSArIGRhdGEubGluZUhlaWdodCkgKiBzY2FsZTtcbiAgICB0aGlzLm1heExpbmVIZWlnaHQgPSBtYXhMaW5lSGVpZ2h0ICogc2NhbGU7XG59O1xuXG4vKipcbiAqIFVwZGF0ZXMgdGhlIHRyYW5zZm9ybSBvZiB0aGlzIG9iamVjdFxuICpcbiAqIEBwcml2YXRlXG4gKi9cbkJpdG1hcFRleHQucHJvdG90eXBlLnVwZGF0ZVRyYW5zZm9ybSA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy52YWxpZGF0ZSgpO1xuICAgIHRoaXMuY29udGFpbmVyVXBkYXRlVHJhbnNmb3JtKCk7XG59O1xuXG4vKipcbiAqIFZhbGlkYXRlcyB0ZXh0IGJlZm9yZSBjYWxsaW5nIHBhcmVudCdzIGdldExvY2FsQm91bmRzXG4gKlxuICogQHJldHVybiB7UElYSS5SZWN0YW5nbGV9IFRoZSByZWN0YW5ndWxhciBib3VuZGluZyBhcmVhXG4gKi9cblxuQml0bWFwVGV4dC5wcm90b3R5cGUuZ2V0TG9jYWxCb3VuZHMgPSBmdW5jdGlvbigpXG57XG4gICAgdGhpcy52YWxpZGF0ZSgpO1xuICAgIHJldHVybiBjb3JlLkNvbnRhaW5lci5wcm90b3R5cGUuZ2V0TG9jYWxCb3VuZHMuY2FsbCh0aGlzKTtcbn07XG5cbi8qKlxuICogVXBkYXRlcyB0ZXh0IHdoZW4gbmVlZGVkXG4gKlxuICogQHByaXZhdGVcbiAqL1xuQml0bWFwVGV4dC5wcm90b3R5cGUudmFsaWRhdGUgPSBmdW5jdGlvbigpXG57XG4gICAgaWYgKHRoaXMuZGlydHkpXG4gICAge1xuICAgICAgICB0aGlzLnVwZGF0ZVRleHQoKTtcbiAgICAgICAgdGhpcy5kaXJ0eSA9IGZhbHNlO1xuICAgIH1cbn07XG5cbkJpdG1hcFRleHQuZm9udHMgPSB7fTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vY29yZScpO1xuXG4vKipcbiAqIEEgTW92aWVDbGlwIGlzIGEgc2ltcGxlIHdheSB0byBkaXNwbGF5IGFuIGFuaW1hdGlvbiBkZXBpY3RlZCBieSBhIGxpc3Qgb2YgdGV4dHVyZXMuXG4gKlxuICogYGBganNcbiAqIHZhciBhbGllbkltYWdlcyA9IFtcImltYWdlX3NlcXVlbmNlXzAxLnBuZ1wiLFwiaW1hZ2Vfc2VxdWVuY2VfMDIucG5nXCIsXCJpbWFnZV9zZXF1ZW5jZV8wMy5wbmdcIixcImltYWdlX3NlcXVlbmNlXzA0LnBuZ1wiXTtcbiAqIHZhciB0ZXh0dXJlQXJyYXkgPSBbXTtcbiAqXG4gKiBmb3IgKHZhciBpPTA7IGkgPCA0OyBpKyspXG4gKiB7XG4gKiAgICAgIHZhciB0ZXh0dXJlID0gUElYSS5UZXh0dXJlLmZyb21JbWFnZShhbGllbkltYWdlc1tpXSk7XG4gKiAgICAgIHRleHR1cmVBcnJheS5wdXNoKHRleHR1cmUpO1xuICogfTtcbiAqXG4gKiB2YXIgbWMgPSBuZXcgUElYSS5Nb3ZpZUNsaXAodGV4dHVyZUFycmF5KTtcbiAqIGBgYFxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5TcHJpdGVcbiAqIEBtZW1iZXJvZiBQSVhJLmV4dHJhc1xuICogQHBhcmFtIHRleHR1cmVzIHtQSVhJLlRleHR1cmVbXXxPYmplY3RbXX0gYW4gYXJyYXkgb2Yge0BsaW5rIFBJWEkuVGV4dHVyZX0gb3IgZnJhbWUgb2JqZWN0cyB0aGF0IG1ha2UgdXAgdGhlIGFuaW1hdGlvblxuICogQHBhcmFtIHRleHR1cmVzW10udGV4dHVyZSB7UElYSS5UZXh0dXJlfSB0aGUge0BsaW5rIFBJWEkuVGV4dHVyZX0gb2YgdGhlIGZyYW1lXG4gKiBAcGFyYW0gdGV4dHVyZXNbXS50aW1lIHtudW1iZXJ9IHRoZSBkdXJhdGlvbiBvZiB0aGUgZnJhbWUgaW4gbXNcbiAqL1xuZnVuY3Rpb24gTW92aWVDbGlwKHRleHR1cmVzKVxue1xuICAgIGNvcmUuU3ByaXRlLmNhbGwodGhpcywgdGV4dHVyZXNbMF0gaW5zdGFuY2VvZiBjb3JlLlRleHR1cmUgPyB0ZXh0dXJlc1swXSA6IHRleHR1cmVzWzBdLnRleHR1cmUpO1xuXG4gICAgLyoqXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl90ZXh0dXJlcyA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX2R1cmF0aW9ucyA9IG51bGw7XG5cbiAgICB0aGlzLnRleHR1cmVzID0gdGV4dHVyZXM7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgc3BlZWQgdGhhdCB0aGUgTW92aWVDbGlwIHdpbGwgcGxheSBhdC4gSGlnaGVyIGlzIGZhc3RlciwgbG93ZXIgaXMgc2xvd2VyXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMVxuICAgICAqL1xuICAgIHRoaXMuYW5pbWF0aW9uU3BlZWQgPSAxO1xuXG4gICAgLyoqXG4gICAgICogV2hldGhlciBvciBub3QgdGhlIG1vdmllIGNsaXAgcmVwZWF0cyBhZnRlciBwbGF5aW5nLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKiBAZGVmYXVsdCB0cnVlXG4gICAgICovXG4gICAgdGhpcy5sb29wID0gdHJ1ZTtcblxuICAgIC8qKlxuICAgICAqIEZ1bmN0aW9uIHRvIGNhbGwgd2hlbiBhIE1vdmllQ2xpcCBmaW5pc2hlcyBwbGF5aW5nXG4gICAgICpcbiAgICAgKiBAbWV0aG9kXG4gICAgICogQG1lbWJlcm9mIFBJWEkuZXh0cmFzLk1vdmllQ2xpcCNcbiAgICAgKi9cbiAgICB0aGlzLm9uQ29tcGxldGUgPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogRWxhcHNlZCB0aW1lIHNpbmNlIGFuaW1hdGlvbiBoYXMgYmVlbiBzdGFydGVkLCB1c2VkIGludGVybmFsbHkgdG8gZGlzcGxheSBjdXJyZW50IHRleHR1cmVcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX2N1cnJlbnRUaW1lID0gMDtcblxuICAgIC8qKlxuICAgICAqIEluZGljYXRlcyBpZiB0aGUgTW92aWVDbGlwIGlzIGN1cnJlbnRseSBwbGF5aW5nXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqIEByZWFkb25seVxuICAgICAqL1xuICAgIHRoaXMucGxheWluZyA9IGZhbHNlO1xufVxuXG4vLyBjb25zdHJ1Y3RvclxuTW92aWVDbGlwLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoY29yZS5TcHJpdGUucHJvdG90eXBlKTtcbk1vdmllQ2xpcC5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBNb3ZpZUNsaXA7XG5tb2R1bGUuZXhwb3J0cyA9IE1vdmllQ2xpcDtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoTW92aWVDbGlwLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIHRvdGFsRnJhbWVzIGlzIHRoZSB0b3RhbCBudW1iZXIgb2YgZnJhbWVzIGluIHRoZSBNb3ZpZUNsaXAuIFRoaXMgaXMgdGhlIHNhbWUgYXMgbnVtYmVyIG9mIHRleHR1cmVzXG4gICAgICogYXNzaWduZWQgdG8gdGhlIE1vdmllQ2xpcC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5leHRyYXMuTW92aWVDbGlwI1xuICAgICAqIEBkZWZhdWx0IDBcbiAgICAgKiBAcmVhZG9ubHlcbiAgICAgKi9cbiAgICB0b3RhbEZyYW1lczoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3RleHR1cmVzLmxlbmd0aDtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBUaGUgYXJyYXkgb2YgdGV4dHVyZXMgdXNlZCBmb3IgdGhpcyBNb3ZpZUNsaXBcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuVGV4dHVyZVtdfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmV4dHJhcy5Nb3ZpZUNsaXAjXG4gICAgICpcbiAgICAgKi9cbiAgICB0ZXh0dXJlczoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl90ZXh0dXJlcztcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGlmKHZhbHVlWzBdIGluc3RhbmNlb2YgY29yZS5UZXh0dXJlKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHRoaXMuX3RleHR1cmVzID0gdmFsdWU7XG4gICAgICAgICAgICAgICAgdGhpcy5fZHVyYXRpb25zID0gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB0aGlzLl90ZXh0dXJlcyA9IFtdO1xuICAgICAgICAgICAgICAgIHRoaXMuX2R1cmF0aW9ucyA9IFtdO1xuICAgICAgICAgICAgICAgIGZvcih2YXIgaSA9IDA7IGkgPCB2YWx1ZS5sZW5ndGg7IGkrKylcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3RleHR1cmVzLnB1c2godmFsdWVbaV0udGV4dHVyZSk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2R1cmF0aW9ucy5wdXNoKHZhbHVlW2ldLnRpbWUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAqIFRoZSBNb3ZpZUNsaXBzIGN1cnJlbnQgZnJhbWUgaW5kZXhcbiAgICAqXG4gICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgKiBAbWVtYmVyb2YgUElYSS5leHRyYXMuTW92aWVDbGlwI1xuICAgICogQHJlYWRvbmx5XG4gICAgKi9cbiAgICBjdXJyZW50RnJhbWU6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICB2YXIgY3VycmVudEZyYW1lID0gTWF0aC5mbG9vcih0aGlzLl9jdXJyZW50VGltZSkgJSB0aGlzLl90ZXh0dXJlcy5sZW5ndGg7XG4gICAgICAgICAgICBpZiAoY3VycmVudEZyYW1lIDwgMClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjdXJyZW50RnJhbWUgKz0gdGhpcy5fdGV4dHVyZXMubGVuZ3RoO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGN1cnJlbnRGcmFtZTtcbiAgICAgICAgfVxuICAgIH1cblxufSk7XG5cbi8qKlxuICogU3RvcHMgdGhlIE1vdmllQ2xpcFxuICpcbiAqL1xuTW92aWVDbGlwLnByb3RvdHlwZS5zdG9wID0gZnVuY3Rpb24gKClcbntcbiAgICBpZighdGhpcy5wbGF5aW5nKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMucGxheWluZyA9IGZhbHNlO1xuICAgIGNvcmUudGlja2VyLnNoYXJlZC5yZW1vdmUodGhpcy51cGRhdGUsIHRoaXMpO1xufTtcblxuLyoqXG4gKiBQbGF5cyB0aGUgTW92aWVDbGlwXG4gKlxuICovXG5Nb3ZpZUNsaXAucHJvdG90eXBlLnBsYXkgPSBmdW5jdGlvbiAoKVxue1xuICAgIGlmKHRoaXMucGxheWluZylcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLnBsYXlpbmcgPSB0cnVlO1xuICAgIGNvcmUudGlja2VyLnNoYXJlZC5hZGQodGhpcy51cGRhdGUsIHRoaXMpO1xufTtcblxuLyoqXG4gKiBTdG9wcyB0aGUgTW92aWVDbGlwIGFuZCBnb2VzIHRvIGEgc3BlY2lmaWMgZnJhbWVcbiAqXG4gKiBAcGFyYW0gZnJhbWVOdW1iZXIge251bWJlcn0gZnJhbWUgaW5kZXggdG8gc3RvcCBhdFxuICovXG5Nb3ZpZUNsaXAucHJvdG90eXBlLmdvdG9BbmRTdG9wID0gZnVuY3Rpb24gKGZyYW1lTnVtYmVyKVxue1xuICAgIHRoaXMuc3RvcCgpO1xuXG4gICAgdGhpcy5fY3VycmVudFRpbWUgPSBmcmFtZU51bWJlcjtcblxuICAgIHRoaXMuX3RleHR1cmUgPSB0aGlzLl90ZXh0dXJlc1t0aGlzLmN1cnJlbnRGcmFtZV07XG59O1xuXG4vKipcbiAqIEdvZXMgdG8gYSBzcGVjaWZpYyBmcmFtZSBhbmQgYmVnaW5zIHBsYXlpbmcgdGhlIE1vdmllQ2xpcFxuICpcbiAqIEBwYXJhbSBmcmFtZU51bWJlciB7bnVtYmVyfSBmcmFtZSBpbmRleCB0byBzdGFydCBhdFxuICovXG5Nb3ZpZUNsaXAucHJvdG90eXBlLmdvdG9BbmRQbGF5ID0gZnVuY3Rpb24gKGZyYW1lTnVtYmVyKVxue1xuICAgIHRoaXMuX2N1cnJlbnRUaW1lID0gZnJhbWVOdW1iZXI7XG5cbiAgICB0aGlzLnBsYXkoKTtcbn07XG5cbi8qXG4gKiBVcGRhdGVzIHRoZSBvYmplY3QgdHJhbnNmb3JtIGZvciByZW5kZXJpbmdcbiAqIEBwcml2YXRlXG4gKi9cbk1vdmllQ2xpcC5wcm90b3R5cGUudXBkYXRlID0gZnVuY3Rpb24gKGRlbHRhVGltZSlcbntcbiAgICB2YXIgZWxhcHNlZCA9IHRoaXMuYW5pbWF0aW9uU3BlZWQgKiBkZWx0YVRpbWU7XG5cbiAgICBpZiAodGhpcy5fZHVyYXRpb25zICE9PSBudWxsKVxuICAgIHtcbiAgICAgICAgdmFyIGxhZyA9IHRoaXMuX2N1cnJlbnRUaW1lICUgMSAqIHRoaXMuX2R1cmF0aW9uc1t0aGlzLmN1cnJlbnRGcmFtZV07XG5cbiAgICAgICAgbGFnICs9IGVsYXBzZWQgLyA2MCAqIDEwMDA7XG5cbiAgICAgICAgd2hpbGUgKGxhZyA8IDApXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuX2N1cnJlbnRUaW1lLS07XG4gICAgICAgICAgICBsYWcgKz0gdGhpcy5fZHVyYXRpb25zW3RoaXMuY3VycmVudEZyYW1lXTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBzaWduID0gTWF0aC5zaWduKHRoaXMuYW5pbWF0aW9uU3BlZWQgKiBkZWx0YVRpbWUpO1xuICAgICAgICB0aGlzLl9jdXJyZW50VGltZSA9IE1hdGguZmxvb3IodGhpcy5fY3VycmVudFRpbWUpO1xuXG4gICAgICAgIHdoaWxlIChsYWcgPj0gdGhpcy5fZHVyYXRpb25zW3RoaXMuY3VycmVudEZyYW1lXSlcbiAgICAgICAge1xuICAgICAgICAgICAgbGFnIC09IHRoaXMuX2R1cmF0aW9uc1t0aGlzLmN1cnJlbnRGcmFtZV0gKiBzaWduO1xuICAgICAgICAgICAgdGhpcy5fY3VycmVudFRpbWUgKz0gc2lnbjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX2N1cnJlbnRUaW1lICs9IGxhZyAvIHRoaXMuX2R1cmF0aW9uc1t0aGlzLmN1cnJlbnRGcmFtZV07XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHRoaXMuX2N1cnJlbnRUaW1lICs9IGVsYXBzZWQ7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX2N1cnJlbnRUaW1lIDwgMCAmJiAhdGhpcy5sb29wKVxuICAgIHtcbiAgICAgICAgdGhpcy5nb3RvQW5kU3RvcCgwKTtcblxuICAgICAgICBpZiAodGhpcy5vbkNvbXBsZXRlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLm9uQ29tcGxldGUoKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBlbHNlIGlmICh0aGlzLl9jdXJyZW50VGltZSA+PSB0aGlzLl90ZXh0dXJlcy5sZW5ndGggJiYgIXRoaXMubG9vcClcbiAgICB7XG4gICAgICAgIHRoaXMuZ290b0FuZFN0b3AodGhpcy5fdGV4dHVyZXMubGVuZ3RoIC0gMSk7XG5cbiAgICAgICAgaWYgKHRoaXMub25Db21wbGV0ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5vbkNvbXBsZXRlKCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgdGhpcy5fdGV4dHVyZSA9IHRoaXMuX3RleHR1cmVzW3RoaXMuY3VycmVudEZyYW1lXTtcbiAgICB9XG5cbn07XG5cbi8qXG4gKiBTdG9wcyB0aGUgTW92aWVDbGlwIGFuZCBkZXN0cm95cyBpdFxuICpcbiAqL1xuTW92aWVDbGlwLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKCApXG57XG4gICAgdGhpcy5zdG9wKCk7XG4gICAgY29yZS5TcHJpdGUucHJvdG90eXBlLmRlc3Ryb3kuY2FsbCh0aGlzKTtcbn07XG5cbi8qKlxuICogQSBzaG9ydCBoYW5kIHdheSBvZiBjcmVhdGluZyBhIG1vdmllY2xpcCBmcm9tIGFuIGFycmF5IG9mIGZyYW1lIGlkc1xuICpcbiAqIEBzdGF0aWNcbiAqIEBwYXJhbSBmcmFtZXMge3N0cmluZ1tdfSB0aGUgYXJyYXkgb2YgZnJhbWVzIGlkcyB0aGUgbW92aWVjbGlwIHdpbGwgdXNlIGFzIGl0cyB0ZXh0dXJlIGZyYW1lc1xuICovXG5Nb3ZpZUNsaXAuZnJvbUZyYW1lcyA9IGZ1bmN0aW9uIChmcmFtZXMpXG57XG4gICAgdmFyIHRleHR1cmVzID0gW107XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGZyYW1lcy5sZW5ndGg7ICsraSlcbiAgICB7XG4gICAgICAgIHRleHR1cmVzLnB1c2gobmV3IGNvcmUuVGV4dHVyZS5mcm9tRnJhbWUoZnJhbWVzW2ldKSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBNb3ZpZUNsaXAodGV4dHVyZXMpO1xufTtcblxuLyoqXG4gKiBBIHNob3J0IGhhbmQgd2F5IG9mIGNyZWF0aW5nIGEgbW92aWVjbGlwIGZyb20gYW4gYXJyYXkgb2YgaW1hZ2UgaWRzXG4gKlxuICogQHN0YXRpY1xuICogQHBhcmFtIGltYWdlcyB7c3RyaW5nW119IHRoZSBhcnJheSBvZiBpbWFnZSB1cmxzIHRoZSBtb3ZpZWNsaXAgd2lsbCB1c2UgYXMgaXRzIHRleHR1cmUgZnJhbWVzXG4gKi9cbk1vdmllQ2xpcC5mcm9tSW1hZ2VzID0gZnVuY3Rpb24gKGltYWdlcylcbntcbiAgICB2YXIgdGV4dHVyZXMgPSBbXTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgaW1hZ2VzLmxlbmd0aDsgKytpKVxuICAgIHtcbiAgICAgICAgdGV4dHVyZXMucHVzaChuZXcgY29yZS5UZXh0dXJlLmZyb21JbWFnZShpbWFnZXNbaV0pKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IE1vdmllQ2xpcCh0ZXh0dXJlcyk7XG59OyIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vY29yZScpLFxuICAgIC8vIGEgc3ByaXRlIHVzZSBkZm9yIHJlbmRlcmluZyB0ZXh0dXJlcy4uXG4gICAgdGVtcFBvaW50ID0gbmV3IGNvcmUuUG9pbnQoKSxcbiAgICBDYW52YXNUaW50ZXIgPSByZXF1aXJlKCcuLi9jb3JlL3JlbmRlcmVycy9jYW52YXMvdXRpbHMvQ2FudmFzVGludGVyJyk7XG5cbi8qKlxuICogQSB0aWxpbmcgc3ByaXRlIGlzIGEgZmFzdCB3YXkgb2YgcmVuZGVyaW5nIGEgdGlsaW5nIGltYWdlXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLlNwcml0ZVxuICogQG1lbWJlcm9mIFBJWEkuZXh0cmFzXG4gKiBAcGFyYW0gdGV4dHVyZSB7VGV4dHVyZX0gdGhlIHRleHR1cmUgb2YgdGhlIHRpbGluZyBzcHJpdGVcbiAqIEBwYXJhbSB3aWR0aCB7bnVtYmVyfSAgdGhlIHdpZHRoIG9mIHRoZSB0aWxpbmcgc3ByaXRlXG4gKiBAcGFyYW0gaGVpZ2h0IHtudW1iZXJ9IHRoZSBoZWlnaHQgb2YgdGhlIHRpbGluZyBzcHJpdGVcbiAqL1xuZnVuY3Rpb24gVGlsaW5nU3ByaXRlKHRleHR1cmUsIHdpZHRoLCBoZWlnaHQpXG57XG4gICAgY29yZS5TcHJpdGUuY2FsbCh0aGlzLCB0ZXh0dXJlKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBzY2FsaW5nIG9mIHRoZSBpbWFnZSB0aGF0IGlzIGJlaW5nIHRpbGVkXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlBvaW50fVxuICAgICAqL1xuICAgIHRoaXMudGlsZVNjYWxlID0gbmV3IGNvcmUuUG9pbnQoMSwxKTtcblxuXG4gICAgLyoqXG4gICAgICogVGhlIG9mZnNldCBwb3NpdGlvbiBvZiB0aGUgaW1hZ2UgdGhhdCBpcyBiZWluZyB0aWxlZFxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5Qb2ludH1cbiAgICAgKi9cbiAgICB0aGlzLnRpbGVQb3NpdGlvbiA9IG5ldyBjb3JlLlBvaW50KDAsMCk7XG5cbiAgICAvLy8vLyBwcml2YXRlXG5cbiAgICAvKipcbiAgICAgKiBUaGUgd2l0aCBvZiB0aGUgdGlsaW5nIHNwcml0ZVxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fd2lkdGggPSB3aWR0aCB8fCAxMDA7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgaGVpZ2h0IG9mIHRoZSB0aWxpbmcgc3ByaXRlXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9oZWlnaHQgPSBoZWlnaHQgfHwgMTAwO1xuXG4gICAgLyoqXG4gICAgICogQW4gaW50ZXJuYWwgV2ViR0wgVVYgY2FjaGUuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlRleHR1cmVVdnN9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl91dnMgPSBuZXcgY29yZS5UZXh0dXJlVXZzKCk7XG5cbiAgICB0aGlzLl9jYW52YXNQYXR0ZXJuID0gbnVsbDtcblxuICAgIC8vVE9ETyBtb3ZlLi5cbiAgICB0aGlzLnNoYWRlciA9IG5ldyBjb3JlLkFic3RyYWN0RmlsdGVyKFxuXG4gICAgICBbXG4gICAgICAgICdwcmVjaXNpb24gbG93cCBmbG9hdDsnLFxuICAgICAgICAnYXR0cmlidXRlIHZlYzIgYVZlcnRleFBvc2l0aW9uOycsXG4gICAgICAgICdhdHRyaWJ1dGUgdmVjMiBhVGV4dHVyZUNvb3JkOycsXG4gICAgICAgICdhdHRyaWJ1dGUgdmVjNCBhQ29sb3I7JyxcblxuICAgICAgICAndW5pZm9ybSBtYXQzIHByb2plY3Rpb25NYXRyaXg7JyxcblxuICAgICAgICAndW5pZm9ybSB2ZWM0IHVGcmFtZTsnLFxuICAgICAgICAndW5pZm9ybSB2ZWM0IHVUcmFuc2Zvcm07JyxcblxuICAgICAgICAndmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7JyxcbiAgICAgICAgJ3ZhcnlpbmcgdmVjNCB2Q29sb3I7JyxcblxuICAgICAgICAndm9pZCBtYWluKHZvaWQpeycsXG4gICAgICAgICcgICBnbF9Qb3NpdGlvbiA9IHZlYzQoKHByb2plY3Rpb25NYXRyaXggKiB2ZWMzKGFWZXJ0ZXhQb3NpdGlvbiwgMS4wKSkueHksIDAuMCwgMS4wKTsnLFxuXG4gICAgICAgICcgICB2ZWMyIGNvb3JkID0gYVRleHR1cmVDb29yZDsnLFxuICAgICAgICAnICAgY29vcmQgLT0gdVRyYW5zZm9ybS54eTsnLFxuICAgICAgICAnICAgY29vcmQgLz0gdVRyYW5zZm9ybS56dzsnLFxuICAgICAgICAnICAgdlRleHR1cmVDb29yZCA9IGNvb3JkOycsXG5cbiAgICAgICAgJyAgIHZDb2xvciA9IHZlYzQoYUNvbG9yLnJnYiAqIGFDb2xvci5hLCBhQ29sb3IuYSk7JyxcbiAgICAgICAgJ30nXG4gICAgICBdLmpvaW4oJ1xcbicpLFxuICAgICAgW1xuICAgICAgICAncHJlY2lzaW9uIGxvd3AgZmxvYXQ7JyxcblxuICAgICAgICAndmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7JyxcbiAgICAgICAgJ3ZhcnlpbmcgdmVjNCB2Q29sb3I7JyxcblxuICAgICAgICAndW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXI7JyxcbiAgICAgICAgJ3VuaWZvcm0gdmVjNCB1RnJhbWU7JyxcbiAgICAgICAgJ3VuaWZvcm0gdmVjMiB1UGl4ZWxTaXplOycsXG5cbiAgICAgICAgJ3ZvaWQgbWFpbih2b2lkKXsnLFxuXG4gICAgICAgICcgICB2ZWMyIGNvb3JkID0gbW9kKHZUZXh0dXJlQ29vcmQsIHVGcmFtZS56dyk7JyxcbiAgICAgICAgJyAgIGNvb3JkID0gY2xhbXAoY29vcmQsIHVQaXhlbFNpemUsIHVGcmFtZS56dyAtIHVQaXhlbFNpemUpOycsXG4gICAgICAgICcgICBjb29yZCArPSB1RnJhbWUueHk7JyxcblxuICAgICAgICAnICAgZ2xfRnJhZ0NvbG9yID0gIHRleHR1cmUyRCh1U2FtcGxlciwgY29vcmQpICogdkNvbG9yIDsnLFxuICAgICAgICAnfSdcbiAgICAgIF0uam9pbignXFxuJyksXG5cbiAgICAgICAgICAgIC8vIHNldCB0aGUgdW5pZm9ybXNcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB1RnJhbWU6IHsgdHlwZTogJzRmdicsIHZhbHVlOiBbMCwwLDEsMV0gfSxcbiAgICAgICAgICAgICAgICB1VHJhbnNmb3JtOiB7IHR5cGU6ICc0ZnYnLCB2YWx1ZTogWzAsMCwxLDFdIH0sXG4gICAgICAgICAgICAgICAgdVBpeGVsU2l6ZSA6IHsgdHlwZSA6ICcyZnYnLCB2YWx1ZTogWzEsIDFdfVxuICAgICAgICAgICAgfVxuICAgICAgKTtcbn1cblxuVGlsaW5nU3ByaXRlLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoY29yZS5TcHJpdGUucHJvdG90eXBlKTtcblRpbGluZ1Nwcml0ZS5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBUaWxpbmdTcHJpdGU7XG5tb2R1bGUuZXhwb3J0cyA9IFRpbGluZ1Nwcml0ZTtcblxuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhUaWxpbmdTcHJpdGUucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogVGhlIHdpZHRoIG9mIHRoZSBzcHJpdGUsIHNldHRpbmcgdGhpcyB3aWxsIGFjdHVhbGx5IG1vZGlmeSB0aGUgc2NhbGUgdG8gYWNoaWV2ZSB0aGUgdmFsdWUgc2V0XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZXh0cmFzLlRpbGluZ1Nwcml0ZSNcbiAgICAgKi9cbiAgICB3aWR0aDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl93aWR0aDtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuX3dpZHRoID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVGhlIGhlaWdodCBvZiB0aGUgVGlsaW5nU3ByaXRlLCBzZXR0aW5nIHRoaXMgd2lsbCBhY3R1YWxseSBtb2RpZnkgdGhlIHNjYWxlIHRvIGFjaGlldmUgdGhlIHZhbHVlIHNldFxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmV4dHJhcy5UaWxpbmdTcHJpdGUjXG4gICAgICovXG4gICAgaGVpZ2h0OiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2hlaWdodDtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuX2hlaWdodCA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfVxufSk7XG5cblRpbGluZ1Nwcml0ZS5wcm90b3R5cGUuX29uVGV4dHVyZVVwZGF0ZSA9IGZ1bmN0aW9uICgpXG57XG4gICAgcmV0dXJuO1xufTtcblxuXG4vKipcbiAqIFJlbmRlcnMgdGhlIG9iamVjdCB1c2luZyB0aGUgV2ViR0wgcmVuZGVyZXJcbiAqXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcn1cbiAqIEBwcml2YXRlXG4gKi9cblRpbGluZ1Nwcml0ZS5wcm90b3R5cGUuX3JlbmRlcldlYkdMID0gZnVuY3Rpb24gKHJlbmRlcmVyKVxue1xuICAgIC8vIHR3ZWFrIG91ciB0ZXh0dXJlIHRlbXBvcmFyaWx5Li5cbiAgICB2YXIgdGV4dHVyZSA9IHRoaXMuX3RleHR1cmU7XG5cbiAgICBpZighdGV4dHVyZSB8fCAhdGV4dHVyZS5fdXZzKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHZhciB0ZW1wVXZzID0gdGV4dHVyZS5fdXZzLFxuICAgICAgICB0ZW1wV2lkdGggPSB0ZXh0dXJlLl9mcmFtZS53aWR0aCxcbiAgICAgICAgdGVtcEhlaWdodCA9IHRleHR1cmUuX2ZyYW1lLmhlaWdodCxcbiAgICAgICAgdHcgPSB0ZXh0dXJlLmJhc2VUZXh0dXJlLndpZHRoLFxuICAgICAgICB0aCA9IHRleHR1cmUuYmFzZVRleHR1cmUuaGVpZ2h0O1xuXG4gICAgdGV4dHVyZS5fdXZzID0gdGhpcy5fdXZzO1xuICAgIHRleHR1cmUuX2ZyYW1lLndpZHRoID0gdGhpcy53aWR0aDtcbiAgICB0ZXh0dXJlLl9mcmFtZS5oZWlnaHQgPSB0aGlzLmhlaWdodDtcblxuICAgIHRoaXMuc2hhZGVyLnVuaWZvcm1zLnVQaXhlbFNpemUudmFsdWVbMF0gPSAxLjAvdHc7XG4gICAgdGhpcy5zaGFkZXIudW5pZm9ybXMudVBpeGVsU2l6ZS52YWx1ZVsxXSA9IDEuMC90aDtcblxuICAgIHRoaXMuc2hhZGVyLnVuaWZvcm1zLnVGcmFtZS52YWx1ZVswXSA9IHRlbXBVdnMueDA7XG4gICAgdGhpcy5zaGFkZXIudW5pZm9ybXMudUZyYW1lLnZhbHVlWzFdID0gdGVtcFV2cy55MDtcbiAgICB0aGlzLnNoYWRlci51bmlmb3Jtcy51RnJhbWUudmFsdWVbMl0gPSB0ZW1wVXZzLngxIC0gdGVtcFV2cy54MDtcbiAgICB0aGlzLnNoYWRlci51bmlmb3Jtcy51RnJhbWUudmFsdWVbM10gPSB0ZW1wVXZzLnkyIC0gdGVtcFV2cy55MDtcblxuICAgIHRoaXMuc2hhZGVyLnVuaWZvcm1zLnVUcmFuc2Zvcm0udmFsdWVbMF0gPSAodGhpcy50aWxlUG9zaXRpb24ueCAlICh0ZW1wV2lkdGggKiB0aGlzLnRpbGVTY2FsZS54KSkgLyB0aGlzLl93aWR0aDtcbiAgICB0aGlzLnNoYWRlci51bmlmb3Jtcy51VHJhbnNmb3JtLnZhbHVlWzFdID0gKHRoaXMudGlsZVBvc2l0aW9uLnkgJSAodGVtcEhlaWdodCAqIHRoaXMudGlsZVNjYWxlLnkpKSAvIHRoaXMuX2hlaWdodDtcbiAgICB0aGlzLnNoYWRlci51bmlmb3Jtcy51VHJhbnNmb3JtLnZhbHVlWzJdID0gKCB0dyAvIHRoaXMuX3dpZHRoICkgKiB0aGlzLnRpbGVTY2FsZS54O1xuICAgIHRoaXMuc2hhZGVyLnVuaWZvcm1zLnVUcmFuc2Zvcm0udmFsdWVbM10gPSAoIHRoIC8gdGhpcy5faGVpZ2h0ICkgKiB0aGlzLnRpbGVTY2FsZS55O1xuXG4gICAgcmVuZGVyZXIuc2V0T2JqZWN0UmVuZGVyZXIocmVuZGVyZXIucGx1Z2lucy5zcHJpdGUpO1xuICAgIHJlbmRlcmVyLnBsdWdpbnMuc3ByaXRlLnJlbmRlcih0aGlzKTtcblxuICAgIHRleHR1cmUuX3V2cyA9IHRlbXBVdnM7XG4gICAgdGV4dHVyZS5fZnJhbWUud2lkdGggPSB0ZW1wV2lkdGg7XG4gICAgdGV4dHVyZS5fZnJhbWUuaGVpZ2h0ID0gdGVtcEhlaWdodDtcbn07XG5cbi8qKlxuICogUmVuZGVycyB0aGUgb2JqZWN0IHVzaW5nIHRoZSBDYW52YXMgcmVuZGVyZXJcbiAqXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuQ2FudmFzUmVuZGVyZXJ9IGEgcmVmZXJlbmNlIHRvIHRoZSBjYW52YXMgcmVuZGVyZXJcbiAqIEBwcml2YXRlXG4gKi9cblRpbGluZ1Nwcml0ZS5wcm90b3R5cGUuX3JlbmRlckNhbnZhcyA9IGZ1bmN0aW9uIChyZW5kZXJlcilcbntcbiAgICB2YXIgdGV4dHVyZSA9IHRoaXMuX3RleHR1cmU7XG5cbiAgICBpZiAoIXRleHR1cmUuYmFzZVRleHR1cmUuaGFzTG9hZGVkKVxuICAgIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB2YXIgY29udGV4dCA9IHJlbmRlcmVyLmNvbnRleHQsXG4gICAgICAgIHRyYW5zZm9ybSA9IHRoaXMud29ybGRUcmFuc2Zvcm0sXG4gICAgICAgIHJlc29sdXRpb24gPSByZW5kZXJlci5yZXNvbHV0aW9uLFxuICAgICAgICBiYXNlVGV4dHVyZSA9IHRleHR1cmUuYmFzZVRleHR1cmUsXG4gICAgICAgIG1vZFggPSAodGhpcy50aWxlUG9zaXRpb24ueCAvIHRoaXMudGlsZVNjYWxlLngpICUgdGV4dHVyZS5fZnJhbWUud2lkdGgsXG4gICAgICAgIG1vZFkgPSAodGhpcy50aWxlUG9zaXRpb24ueSAvIHRoaXMudGlsZVNjYWxlLnkpICUgdGV4dHVyZS5fZnJhbWUuaGVpZ2h0O1xuXG4gICAgLy8gY3JlYXRlIGEgbmljZSBzaGlueSBwYXR0ZXJuIVxuICAgIC8vIFRPRE8gdGhpcyBuZWVkcyB0byBiZSByZWZyZXNoZWQgaWYgdGV4dHVyZSBjaGFuZ2VzLi5cbiAgICBpZighdGhpcy5fY2FudmFzUGF0dGVybilcbiAgICB7XG4gICAgICAgIC8vIGN1dCBhbiBvYmplY3QgZnJvbSBhIHNwcml0ZXNoZWV0Li5cbiAgICAgICAgdmFyIHRlbXBDYW52YXMgPSBuZXcgY29yZS5DYW52YXNCdWZmZXIodGV4dHVyZS5fZnJhbWUud2lkdGgsIHRleHR1cmUuX2ZyYW1lLmhlaWdodCk7XG5cbiAgICAgICAgLy8gVGludCB0aGUgdGlsaW5nIHNwcml0ZVxuICAgICAgICBpZiAodGhpcy50aW50ICE9PSAweEZGRkZGRilcbiAgICAgICAge1xuICAgICAgICAgICAgaWYgKHRoaXMuY2FjaGVkVGludCAhPT0gdGhpcy50aW50KVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHRoaXMuY2FjaGVkVGludCA9IHRoaXMudGludDtcblxuICAgICAgICAgICAgICAgIHRoaXMudGludGVkVGV4dHVyZSA9IENhbnZhc1RpbnRlci5nZXRUaW50ZWRUZXh0dXJlKHRoaXMsIHRoaXMudGludCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0ZW1wQ2FudmFzLmNvbnRleHQuZHJhd0ltYWdlKHRoaXMudGludGVkVGV4dHVyZSwgMCwgMCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgICB0ZW1wQ2FudmFzLmNvbnRleHQuZHJhd0ltYWdlKGJhc2VUZXh0dXJlLnNvdXJjZSwgLXRleHR1cmUuX2ZyYW1lLngsIC10ZXh0dXJlLl9mcmFtZS55KTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9jYW52YXNQYXR0ZXJuID0gdGVtcENhbnZhcy5jb250ZXh0LmNyZWF0ZVBhdHRlcm4oIHRlbXBDYW52YXMuY2FudmFzLCAncmVwZWF0JyApO1xuICAgIH1cblxuICAgIC8vIHNldCBjb250ZXh0IHN0YXRlLi5cbiAgICBjb250ZXh0Lmdsb2JhbEFscGhhID0gdGhpcy53b3JsZEFscGhhO1xuICAgIGNvbnRleHQuc2V0VHJhbnNmb3JtKHRyYW5zZm9ybS5hICogcmVzb2x1dGlvbixcbiAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtLmIgKiByZXNvbHV0aW9uLFxuICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2Zvcm0uYyAqIHJlc29sdXRpb24sXG4gICAgICAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybS5kICogcmVzb2x1dGlvbixcbiAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtLnR4ICogcmVzb2x1dGlvbixcbiAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtLnR5ICogcmVzb2x1dGlvbik7XG5cbiAgICAvLyBUT0RPIC0gdGhpcyBzaG91bGQgYmUgcm9sbGVkIGludG8gdGhlIHNldFRyYW5zZm9ybSBhYm92ZS4uXG4gICAgY29udGV4dC5zY2FsZSh0aGlzLnRpbGVTY2FsZS54LHRoaXMudGlsZVNjYWxlLnkpO1xuXG4gICAgY29udGV4dC50cmFuc2xhdGUobW9kWCArICh0aGlzLmFuY2hvci54ICogLXRoaXMuX3dpZHRoICksXG4gICAgICAgICAgICAgICAgICAgICAgbW9kWSArICh0aGlzLmFuY2hvci55ICogLXRoaXMuX2hlaWdodCkpO1xuXG4gICAgLy8gY2hlY2sgYmxlbmQgbW9kZVxuICAgIHZhciBjb21wb3NpdGVPcGVyYXRpb24gPSByZW5kZXJlci5ibGVuZE1vZGVzW3RoaXMuYmxlbmRNb2RlXTtcbiAgICBpZiAoY29tcG9zaXRlT3BlcmF0aW9uICE9PSByZW5kZXJlci5jb250ZXh0Lmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbilcbiAgICB7XG4gICAgICAgIGNvbnRleHQuZ2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uID0gY29tcG9zaXRlT3BlcmF0aW9uO1xuICAgIH1cblxuICAgIC8vIGZpbGwgdGhlIHBhdHRlcm4hXG4gICAgY29udGV4dC5maWxsU3R5bGUgPSB0aGlzLl9jYW52YXNQYXR0ZXJuO1xuICAgIGNvbnRleHQuZmlsbFJlY3QoLW1vZFgsXG4gICAgICAgICAgICAgICAgICAgICAtbW9kWSxcbiAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3dpZHRoIC8gdGhpcy50aWxlU2NhbGUueCxcbiAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2hlaWdodCAvIHRoaXMudGlsZVNjYWxlLnkpO1xuXG5cbiAgICAvL1RPRE8gLSBwcmV0dHkgc3VyZSB0aGlzIGNhbiBiZSBkZWxldGVkLi4uXG4gICAgLy9jb250ZXh0LnRyYW5zbGF0ZSgtdGhpcy50aWxlUG9zaXRpb24ueCArICh0aGlzLmFuY2hvci54ICogdGhpcy5fd2lkdGgpLCAtdGhpcy50aWxlUG9zaXRpb24ueSArICh0aGlzLmFuY2hvci55ICogdGhpcy5faGVpZ2h0KSk7XG4gICAgLy9jb250ZXh0LnNjYWxlKDEgLyB0aGlzLnRpbGVTY2FsZS54LCAxIC8gdGhpcy50aWxlU2NhbGUueSk7XG59O1xuXG5cbi8qKlxuICogUmV0dXJucyB0aGUgZnJhbWluZyByZWN0YW5nbGUgb2YgdGhlIHNwcml0ZSBhcyBhIFJlY3RhbmdsZSBvYmplY3RcbipcbiAqIEByZXR1cm4ge1BJWEkuUmVjdGFuZ2xlfSB0aGUgZnJhbWluZyByZWN0YW5nbGVcbiAqL1xuVGlsaW5nU3ByaXRlLnByb3RvdHlwZS5nZXRCb3VuZHMgPSBmdW5jdGlvbiAoKVxue1xuICAgIHZhciB3aWR0aCA9IHRoaXMuX3dpZHRoO1xuICAgIHZhciBoZWlnaHQgPSB0aGlzLl9oZWlnaHQ7XG5cbiAgICB2YXIgdzAgPSB3aWR0aCAqICgxLXRoaXMuYW5jaG9yLngpO1xuICAgIHZhciB3MSA9IHdpZHRoICogLXRoaXMuYW5jaG9yLng7XG5cbiAgICB2YXIgaDAgPSBoZWlnaHQgKiAoMS10aGlzLmFuY2hvci55KTtcbiAgICB2YXIgaDEgPSBoZWlnaHQgKiAtdGhpcy5hbmNob3IueTtcblxuICAgIHZhciB3b3JsZFRyYW5zZm9ybSA9IHRoaXMud29ybGRUcmFuc2Zvcm07XG5cbiAgICB2YXIgYSA9IHdvcmxkVHJhbnNmb3JtLmE7XG4gICAgdmFyIGIgPSB3b3JsZFRyYW5zZm9ybS5iO1xuICAgIHZhciBjID0gd29ybGRUcmFuc2Zvcm0uYztcbiAgICB2YXIgZCA9IHdvcmxkVHJhbnNmb3JtLmQ7XG4gICAgdmFyIHR4ID0gd29ybGRUcmFuc2Zvcm0udHg7XG4gICAgdmFyIHR5ID0gd29ybGRUcmFuc2Zvcm0udHk7XG5cbiAgICB2YXIgeDEgPSBhICogdzEgKyBjICogaDEgKyB0eDtcbiAgICB2YXIgeTEgPSBkICogaDEgKyBiICogdzEgKyB0eTtcblxuICAgIHZhciB4MiA9IGEgKiB3MCArIGMgKiBoMSArIHR4O1xuICAgIHZhciB5MiA9IGQgKiBoMSArIGIgKiB3MCArIHR5O1xuXG4gICAgdmFyIHgzID0gYSAqIHcwICsgYyAqIGgwICsgdHg7XG4gICAgdmFyIHkzID0gZCAqIGgwICsgYiAqIHcwICsgdHk7XG5cbiAgICB2YXIgeDQgPSAgYSAqIHcxICsgYyAqIGgwICsgdHg7XG4gICAgdmFyIHk0ID0gIGQgKiBoMCArIGIgKiB3MSArIHR5O1xuXG4gICAgdmFyIG1pblgsXG4gICAgICAgIG1heFgsXG4gICAgICAgIG1pblksXG4gICAgICAgIG1heFk7XG5cbiAgICBtaW5YID0geDE7XG4gICAgbWluWCA9IHgyIDwgbWluWCA/IHgyIDogbWluWDtcbiAgICBtaW5YID0geDMgPCBtaW5YID8geDMgOiBtaW5YO1xuICAgIG1pblggPSB4NCA8IG1pblggPyB4NCA6IG1pblg7XG5cbiAgICBtaW5ZID0geTE7XG4gICAgbWluWSA9IHkyIDwgbWluWSA/IHkyIDogbWluWTtcbiAgICBtaW5ZID0geTMgPCBtaW5ZID8geTMgOiBtaW5ZO1xuICAgIG1pblkgPSB5NCA8IG1pblkgPyB5NCA6IG1pblk7XG5cbiAgICBtYXhYID0geDE7XG4gICAgbWF4WCA9IHgyID4gbWF4WCA/IHgyIDogbWF4WDtcbiAgICBtYXhYID0geDMgPiBtYXhYID8geDMgOiBtYXhYO1xuICAgIG1heFggPSB4NCA+IG1heFggPyB4NCA6IG1heFg7XG5cbiAgICBtYXhZID0geTE7XG4gICAgbWF4WSA9IHkyID4gbWF4WSA/IHkyIDogbWF4WTtcbiAgICBtYXhZID0geTMgPiBtYXhZID8geTMgOiBtYXhZO1xuICAgIG1heFkgPSB5NCA+IG1heFkgPyB5NCA6IG1heFk7XG5cbiAgICB2YXIgYm91bmRzID0gdGhpcy5fYm91bmRzO1xuXG4gICAgYm91bmRzLnggPSBtaW5YO1xuICAgIGJvdW5kcy53aWR0aCA9IG1heFggLSBtaW5YO1xuXG4gICAgYm91bmRzLnkgPSBtaW5ZO1xuICAgIGJvdW5kcy5oZWlnaHQgPSBtYXhZIC0gbWluWTtcblxuICAgIC8vIHN0b3JlIGEgcmVmZXJlbmNlIHNvIHRoYXQgaWYgdGhpcyBmdW5jdGlvbiBnZXRzIGNhbGxlZCBhZ2FpbiBpbiB0aGUgcmVuZGVyIGN5Y2xlIHdlIGRvIG5vdCBoYXZlIHRvIHJlY2FsY3VsYXRlXG4gICAgdGhpcy5fY3VycmVudEJvdW5kcyA9IGJvdW5kcztcblxuICAgIHJldHVybiBib3VuZHM7XG59O1xuXG4vKipcbiAqIENoZWNrcyBpZiBhIHBvaW50IGlzIGluc2lkZSB0aGlzIHRpbGluZyBzcHJpdGVcbiAqIEBwYXJhbSBwb2ludCB7UElYSS5Qb2ludH0gdGhlIHBvaW50IHRvIGNoZWNrXG4gKi9cblRpbGluZ1Nwcml0ZS5wcm90b3R5cGUuY29udGFpbnNQb2ludCA9IGZ1bmN0aW9uKCBwb2ludCApXG57XG4gICAgdGhpcy53b3JsZFRyYW5zZm9ybS5hcHBseUludmVyc2UocG9pbnQsICB0ZW1wUG9pbnQpO1xuXG4gICAgdmFyIHdpZHRoID0gdGhpcy5fd2lkdGg7XG4gICAgdmFyIGhlaWdodCA9IHRoaXMuX2hlaWdodDtcbiAgICB2YXIgeDEgPSAtd2lkdGggKiB0aGlzLmFuY2hvci54O1xuICAgIHZhciB5MTtcblxuICAgIGlmICggdGVtcFBvaW50LnggPiB4MSAmJiB0ZW1wUG9pbnQueCA8IHgxICsgd2lkdGggKVxuICAgIHtcbiAgICAgICAgeTEgPSAtaGVpZ2h0ICogdGhpcy5hbmNob3IueTtcblxuICAgICAgICBpZiAoIHRlbXBQb2ludC55ID4geTEgJiYgdGVtcFBvaW50LnkgPCB5MSArIGhlaWdodCApXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xufTtcblxuLyoqXG4gKiBEZXN0cm95cyB0aGlzIHRpbGluZyBzcHJpdGVcbiAqXG4gKi9cblRpbGluZ1Nwcml0ZS5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uICgpIHtcbiAgICBjb3JlLlNwcml0ZS5wcm90b3R5cGUuZGVzdHJveS5jYWxsKHRoaXMpO1xuXG4gICAgdGhpcy50aWxlU2NhbGUgPSBudWxsO1xuICAgIHRoaXMuX3RpbGVTY2FsZU9mZnNldCA9IG51bGw7XG4gICAgdGhpcy50aWxlUG9zaXRpb24gPSBudWxsO1xuXG4gICAgdGhpcy5fdXZzID0gbnVsbDtcbn07XG5cbi8qKlxuICogSGVscGVyIGZ1bmN0aW9uIHRoYXQgY3JlYXRlcyBhIHRpbGluZyBzcHJpdGUgdGhhdCB3aWxsIHVzZSBhIHRleHR1cmUgZnJvbSB0aGUgVGV4dHVyZUNhY2hlIGJhc2VkIG9uIHRoZSBmcmFtZUlkXG4gKiBUaGUgZnJhbWUgaWRzIGFyZSBjcmVhdGVkIHdoZW4gYSBUZXh0dXJlIHBhY2tlciBmaWxlIGhhcyBiZWVuIGxvYWRlZFxuICpcbiAqIEBzdGF0aWNcbiAqIEBwYXJhbSBmcmFtZUlkIHtzdHJpbmd9IFRoZSBmcmFtZSBJZCBvZiB0aGUgdGV4dHVyZSBpbiB0aGUgY2FjaGVcbiAqIEByZXR1cm4ge1BJWEkuZXh0cmFzLlRpbGluZ1Nwcml0ZX0gQSBuZXcgVGlsaW5nU3ByaXRlIHVzaW5nIGEgdGV4dHVyZSBmcm9tIHRoZSB0ZXh0dXJlIGNhY2hlIG1hdGNoaW5nIHRoZSBmcmFtZUlkXG4gKiBAcGFyYW0gd2lkdGgge251bWJlcn0gIHRoZSB3aWR0aCBvZiB0aGUgdGlsaW5nIHNwcml0ZVxuICogQHBhcmFtIGhlaWdodCB7bnVtYmVyfSB0aGUgaGVpZ2h0IG9mIHRoZSB0aWxpbmcgc3ByaXRlXG4gKi9cblRpbGluZ1Nwcml0ZS5mcm9tRnJhbWUgPSBmdW5jdGlvbiAoZnJhbWVJZCx3aWR0aCxoZWlnaHQpXG57XG4gICAgdmFyIHRleHR1cmUgPSBjb3JlLnV0aWxzLlRleHR1cmVDYWNoZVtmcmFtZUlkXTtcblxuICAgIGlmICghdGV4dHVyZSlcbiAgICB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignVGhlIGZyYW1lSWQgXCInICsgZnJhbWVJZCArICdcIiBkb2VzIG5vdCBleGlzdCBpbiB0aGUgdGV4dHVyZSBjYWNoZSAnICsgdGhpcyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBUaWxpbmdTcHJpdGUodGV4dHVyZSx3aWR0aCxoZWlnaHQpO1xufTtcblxuLyoqXG4gKiBIZWxwZXIgZnVuY3Rpb24gdGhhdCBjcmVhdGVzIGEgc3ByaXRlIHRoYXQgd2lsbCBjb250YWluIGEgdGV4dHVyZSBiYXNlZCBvbiBhbiBpbWFnZSB1cmxcbiAqIElmIHRoZSBpbWFnZSBpcyBub3QgaW4gdGhlIHRleHR1cmUgY2FjaGUgaXQgd2lsbCBiZSBsb2FkZWRcbiAqXG4gKiBAc3RhdGljXG4gKiBAcGFyYW0gaW1hZ2VJZCB7c3RyaW5nfSBUaGUgaW1hZ2UgdXJsIG9mIHRoZSB0ZXh0dXJlXG4gKiBAcGFyYW0gd2lkdGgge251bWJlcn0gIHRoZSB3aWR0aCBvZiB0aGUgdGlsaW5nIHNwcml0ZVxuICogQHBhcmFtIGhlaWdodCB7bnVtYmVyfSB0aGUgaGVpZ2h0IG9mIHRoZSB0aWxpbmcgc3ByaXRlXG4gKiBAcGFyYW0gW2Nyb3Nzb3JpZ2luPShhdXRvKV0ge2Jvb2xlYW59IGlmIHlvdSB3YW50IHRvIHNwZWNpZnkgdGhlIGNyb3NzLW9yaWdpbiBwYXJhbWV0ZXJcbiAqIEBwYXJhbSBbc2NhbGVNb2RlPVBJWEkuU0NBTEVfTU9ERVMuREVGQVVMVF0ge251bWJlcn0gaWYgeW91IHdhbnQgdG8gc3BlY2lmeSB0aGUgc2NhbGUgbW9kZSwgc2VlIHtAbGluayBQSVhJLlNDQUxFX01PREVTfSBmb3IgcG9zc2libGUgdmFsdWVzXG4gKiBAcmV0dXJuIHtQSVhJLmV4dHJhcy5UaWxpbmdTcHJpdGV9IEEgbmV3IFRpbGluZ1Nwcml0ZSB1c2luZyBhIHRleHR1cmUgZnJvbSB0aGUgdGV4dHVyZSBjYWNoZSBtYXRjaGluZyB0aGUgaW1hZ2UgaWRcbiAqL1xuVGlsaW5nU3ByaXRlLmZyb21JbWFnZSA9IGZ1bmN0aW9uIChpbWFnZUlkLCB3aWR0aCwgaGVpZ2h0LCBjcm9zc29yaWdpbiwgc2NhbGVNb2RlKVxue1xuICAgIHJldHVybiBuZXcgVGlsaW5nU3ByaXRlKGNvcmUuVGV4dHVyZS5mcm9tSW1hZ2UoaW1hZ2VJZCwgY3Jvc3NvcmlnaW4sIHNjYWxlTW9kZSksd2lkdGgsaGVpZ2h0KTtcbn07XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uL2NvcmUnKSxcbiAgICBEaXNwbGF5T2JqZWN0ID0gY29yZS5EaXNwbGF5T2JqZWN0LFxuICAgIF90ZW1wTWF0cml4ID0gbmV3IGNvcmUuTWF0cml4KCk7XG5cbkRpc3BsYXlPYmplY3QucHJvdG90eXBlLl9jYWNoZUFzQml0bWFwID0gZmFsc2U7XG5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS5fb3JpZ2luYWxSZW5kZXJXZWJHTCA9IG51bGw7XG5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS5fb3JpZ2luYWxSZW5kZXJDYW52YXMgPSBudWxsO1xuXG5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS5fb3JpZ2luYWxVcGRhdGVUcmFuc2Zvcm0gPSBudWxsO1xuRGlzcGxheU9iamVjdC5wcm90b3R5cGUuX29yaWdpbmFsSGl0VGVzdCA9IG51bGw7XG5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS5fb3JpZ2luYWxEZXN0cm95ID0gbnVsbDtcbkRpc3BsYXlPYmplY3QucHJvdG90eXBlLl9jYWNoZWRTcHJpdGUgPSBudWxsO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhEaXNwbGF5T2JqZWN0LnByb3RvdHlwZSwge1xuXG4gICAgLyoqXG4gICAgICogU2V0IHRoaXMgdG8gdHJ1ZSBpZiB5b3Ugd2FudCB0aGlzIGRpc3BsYXkgb2JqZWN0IHRvIGJlIGNhY2hlZCBhcyBhIGJpdG1hcC5cbiAgICAgKiBUaGlzIGJhc2ljYWxseSB0YWtlcyBhIHNuYXAgc2hvdCBvZiB0aGUgZGlzcGxheSBvYmplY3QgYXMgaXQgaXMgYXQgdGhhdCBtb21lbnQuIEl0IGNhbiBwcm92aWRlIGEgcGVyZm9ybWFuY2UgYmVuZWZpdCBmb3IgY29tcGxleCBzdGF0aWMgZGlzcGxheU9iamVjdHMuXG4gICAgICogVG8gcmVtb3ZlIHNpbXBseSBzZXQgdGhpcyBwcm9wZXJ0eSB0byAnZmFsc2UnXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLkRpc3BsYXlPYmplY3QjXG4gICAgICovXG4gICAgY2FjaGVBc0JpdG1hcDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9jYWNoZUFzQml0bWFwO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgaWYgKHRoaXMuX2NhY2hlQXNCaXRtYXAgPT09IHZhbHVlKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5fY2FjaGVBc0JpdG1hcCA9IHZhbHVlO1xuXG4gICAgICAgICAgICBpZiAodmFsdWUpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdGhpcy5fb3JpZ2luYWxSZW5kZXJXZWJHTCA9IHRoaXMucmVuZGVyV2ViR0w7XG4gICAgICAgICAgICAgICAgdGhpcy5fb3JpZ2luYWxSZW5kZXJDYW52YXMgPSB0aGlzLnJlbmRlckNhbnZhcztcblxuICAgICAgICAgICAgICAgIHRoaXMuX29yaWdpbmFsVXBkYXRlVHJhbnNmb3JtID0gdGhpcy51cGRhdGVUcmFuc2Zvcm07XG4gICAgICAgICAgICAgICAgdGhpcy5fb3JpZ2luYWxHZXRCb3VuZHMgPSB0aGlzLmdldEJvdW5kcztcblxuICAgICAgICAgICAgICAgIHRoaXMuX29yaWdpbmFsRGVzdHJveSA9IHRoaXMuZGVzdHJveTtcblxuICAgICAgICAgICAgICAgIHRoaXMuX29yaWdpbmFsQ29udGFpbnNQb2ludCA9IHRoaXMuY29udGFpbnNQb2ludDtcblxuICAgICAgICAgICAgICAgIHRoaXMucmVuZGVyV2ViR0wgPSB0aGlzLl9yZW5kZXJDYWNoZWRXZWJHTDtcbiAgICAgICAgICAgICAgICB0aGlzLnJlbmRlckNhbnZhcyA9IHRoaXMuX3JlbmRlckNhY2hlZENhbnZhcztcblxuICAgICAgICAgICAgICAgIHRoaXMuZGVzdHJveSA9IHRoaXMuX2NhY2hlQXNCaXRtYXBEZXN0cm95O1xuXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuX2NhY2hlZFNwcml0ZSlcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2Rlc3Ryb3lDYWNoZWREaXNwbGF5T2JqZWN0KCk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgdGhpcy5yZW5kZXJXZWJHTCA9IHRoaXMuX29yaWdpbmFsUmVuZGVyV2ViR0w7XG4gICAgICAgICAgICAgICAgdGhpcy5yZW5kZXJDYW52YXMgPSB0aGlzLl9vcmlnaW5hbFJlbmRlckNhbnZhcztcbiAgICAgICAgICAgICAgICB0aGlzLmdldEJvdW5kcyA9IHRoaXMuX29yaWdpbmFsR2V0Qm91bmRzO1xuXG4gICAgICAgICAgICAgICAgdGhpcy5kZXN0cm95ID0gdGhpcy5fb3JpZ2luYWxEZXN0cm95O1xuXG4gICAgICAgICAgICAgICAgdGhpcy51cGRhdGVUcmFuc2Zvcm0gPSB0aGlzLl9vcmlnaW5hbFVwZGF0ZVRyYW5zZm9ybTtcbiAgICAgICAgICAgICAgICB0aGlzLmNvbnRhaW5zUG9pbnQgPSB0aGlzLl9vcmlnaW5hbENvbnRhaW5zUG9pbnQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG59KTtcbi8qKlxuKiBSZW5kZXJzIGEgY2FjaGVkIHZlcnNpb24gb2YgdGhlIHNwcml0ZSB3aXRoIFdlYkdMXG4qXG4qIEBwYXJhbSByZW5kZXJlciB7UElYSS5XZWJHTFJlbmRlcmVyfSB0aGUgV2ViR0wgcmVuZGVyZXJcbiogQHByaXZhdGVcbiovXG5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS5fcmVuZGVyQ2FjaGVkV2ViR0wgPSBmdW5jdGlvbiAocmVuZGVyZXIpXG57XG4gICAgaWYgKCF0aGlzLnZpc2libGUgfHwgdGhpcy53b3JsZEFscGhhIDw9IDAgfHwgIXRoaXMucmVuZGVyYWJsZSlcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLl9pbml0Q2FjaGVkRGlzcGxheU9iamVjdCggcmVuZGVyZXIgKTtcblxuICAgIHRoaXMuX2NhY2hlZFNwcml0ZS53b3JsZEFscGhhID0gdGhpcy53b3JsZEFscGhhO1xuXG4gICAgcmVuZGVyZXIuc2V0T2JqZWN0UmVuZGVyZXIocmVuZGVyZXIucGx1Z2lucy5zcHJpdGUpO1xuICAgIHJlbmRlcmVyLnBsdWdpbnMuc3ByaXRlLnJlbmRlciggdGhpcy5fY2FjaGVkU3ByaXRlICk7XG59O1xuXG4vKipcbiogUHJlcGFyZXMgdGhlIFdlYkdMIHJlbmRlcmVyIHRvIGNhY2hlIHRoZSBzcHJpdGVcbipcbiogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLldlYkdMUmVuZGVyZXJ9IHRoZSBXZWJHTCByZW5kZXJlclxuKiBAcHJpdmF0ZVxuKi9cbkRpc3BsYXlPYmplY3QucHJvdG90eXBlLl9pbml0Q2FjaGVkRGlzcGxheU9iamVjdCA9IGZ1bmN0aW9uIChyZW5kZXJlcilcbntcbiAgICBpZih0aGlzLl9jYWNoZWRTcHJpdGUpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gZmlyc3Qgd2UgZmx1c2ggYW55dGhpbmcgbGVmdCBpbiB0aGUgcmVuZGVyZXIgKG90aGVyd2lzZSBpdCB3b3VsZCBnZXQgcmVuZGVyZWQgdG8gdGhlIGNhY2hlZCB0ZXh0dXJlKVxuICAgIHJlbmRlcmVyLmN1cnJlbnRSZW5kZXJlci5mbHVzaCgpO1xuICAgIC8vdGhpcy5maWx0ZXJzPSBbXTtcbiAgICAvLyBuZXh0IHdlIGZpbmQgdGhlIGRpbWVuc2lvbnMgb2YgdGhlIHVudHJhbnNmb3JtZWQgb2JqZWN0XG4gICAgLy8gdGhpcyBmdW5jdGlvbiBhbHNvIGNhbGxzIHVwZGF0ZXRyYW5zZm9ybSBvbiBhbGwgaXRzIGNoaWxkcmVuIGFzIHBhcnQgb2YgdGhlIG1lYXN1cmluZy4gVGhpcyBtZWFucyB3ZSBkb24ndCBuZWVkIHRvIHVwZGF0ZSB0aGUgdHJhbnNmb3JtIGFnYWluIGluIHRoaXMgZnVuY3Rpb25cbiAgICAvLyBUT0RPIHBhc3MgYW4gb2JqZWN0IHRvIGNsb25lIHRvbz8gc2F2ZXMgaGF2aW5nIHRvIGNyZWF0ZSBhIG5ldyBvbmUgZWFjaCB0aW1lIVxuICAgIHZhciBib3VuZHMgPSB0aGlzLmdldExvY2FsQm91bmRzKCkuY2xvbmUoKTtcblxuICAgIC8vIGFkZCBzb21lIHBhZGRpbmchXG4gICAgaWYodGhpcy5fZmlsdGVycylcbiAgICB7XG4gICAgICAgIHZhciBwYWRkaW5nID0gdGhpcy5fZmlsdGVyc1swXS5wYWRkaW5nO1xuICAgICAgICBib3VuZHMueCAtPSBwYWRkaW5nO1xuICAgICAgICBib3VuZHMueSAtPSBwYWRkaW5nO1xuXG4gICAgICAgIGJvdW5kcy53aWR0aCArPSBwYWRkaW5nICogMjtcbiAgICAgICAgYm91bmRzLmhlaWdodCArPSBwYWRkaW5nICogMjtcbiAgICB9XG5cbiAgICAvLyBmb3Igbm93IHdlIGNhY2hlIHRoZSBjdXJyZW50IHJlbmRlclRhcmdldCB0aGF0IHRoZSB3ZWJHTCByZW5kZXJlciBpcyBjdXJyZW50bHkgdXNpbmcuXG4gICAgLy8gdGhpcyBjb3VsZCBiZSBtb3JlIGVsZWdlbnQuLlxuICAgIHZhciBjYWNoZWRSZW5kZXJUYXJnZXQgPSByZW5kZXJlci5jdXJyZW50UmVuZGVyVGFyZ2V0O1xuICAgIC8vIFdlIGFsc28gc3RvcmUgdGhlIGZpbHRlciBzdGFjayAtIEkgd2lsbCBkZWZpbml0ZWx5IGxvb2sgdG8gY2hhbmdlIGhvdyB0aGlzIHdvcmtzIGEgbGl0dGxlIGxhdGVyIGRvd24gdGhlIGxpbmUuXG4gICAgdmFyIHN0YWNrID0gcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5maWx0ZXJTdGFjaztcblxuICAgIC8vIHRoaXMgcmVuZGVyVGV4dHVyZSB3aWxsIGJlIHVzZWQgdG8gc3RvcmUgdGhlIGNhY2hlZCBEaXNwbGF5T2JqZWN0XG4gICAgdmFyIHJlbmRlclRleHR1cmUgPSBuZXcgY29yZS5SZW5kZXJUZXh0dXJlKHJlbmRlcmVyLCBib3VuZHMud2lkdGggfCAwLCBib3VuZHMuaGVpZ2h0IHwgMCk7XG5cbiAgICAvLyBuZWVkIHRvIHNldCAvL1xuICAgIHZhciBtID0gX3RlbXBNYXRyaXg7XG5cbiAgICBtLnR4ID0gLWJvdW5kcy54O1xuICAgIG0udHkgPSAtYm91bmRzLnk7XG5cblxuXG4gICAgLy8gc2V0IGFsbCBwcm9wZXJ0aWVzIHRvIHRoZXJlIG9yaWdpbmFsIHNvIHdlIGNhbiByZW5kZXIgdG8gYSB0ZXh0dXJlXG4gICAgdGhpcy5yZW5kZXJXZWJHTCA9IHRoaXMuX29yaWdpbmFsUmVuZGVyV2ViR0w7XG5cbiAgICByZW5kZXJUZXh0dXJlLnJlbmRlcih0aGlzLCBtLCB0cnVlLCB0cnVlKTtcblxuICAgIC8vIG5vdyByZXN0b3JlIHRoZSBzdGF0ZSBiZSBzZXR0aW5nIHRoZSBuZXcgcHJvcGVydGllc1xuICAgIHJlbmRlcmVyLnNldFJlbmRlclRhcmdldChjYWNoZWRSZW5kZXJUYXJnZXQpO1xuICAgIHJlbmRlcmVyLmZpbHRlck1hbmFnZXIuZmlsdGVyU3RhY2sgPSBzdGFjaztcblxuICAgIHRoaXMucmVuZGVyV2ViR0wgICAgID0gdGhpcy5fcmVuZGVyQ2FjaGVkV2ViR0w7XG4gICAgdGhpcy51cGRhdGVUcmFuc2Zvcm0gPSB0aGlzLmRpc3BsYXlPYmplY3RVcGRhdGVUcmFuc2Zvcm07XG4gICAgdGhpcy5nZXRCb3VuZHMgICAgICAgPSB0aGlzLl9nZXRDYWNoZWRCb3VuZHM7XG5cblxuICAgIC8vIGNyZWF0ZSBvdXIgY2FjaGVkIHNwcml0ZVxuICAgIHRoaXMuX2NhY2hlZFNwcml0ZSA9IG5ldyBjb3JlLlNwcml0ZShyZW5kZXJUZXh0dXJlKTtcbiAgICB0aGlzLl9jYWNoZWRTcHJpdGUud29ybGRUcmFuc2Zvcm0gPSB0aGlzLndvcmxkVHJhbnNmb3JtO1xuICAgIHRoaXMuX2NhY2hlZFNwcml0ZS5hbmNob3IueCA9IC0oIGJvdW5kcy54IC8gYm91bmRzLndpZHRoICk7XG4gICAgdGhpcy5fY2FjaGVkU3ByaXRlLmFuY2hvci55ID0gLSggYm91bmRzLnkgLyBib3VuZHMuaGVpZ2h0ICk7XG5cbiAgICAvLyByZXN0b3JlIHRoZSB0cmFuc2Zvcm0gb2YgdGhlIGNhY2hlZCBzcHJpdGUgdG8gYXZvaWQgdGhlIG5hc3R5IGZsaWNrZXIuLlxuICAgIHRoaXMudXBkYXRlVHJhbnNmb3JtKCk7XG5cbiAgICAvLyBtYXAgdGhlIGhpdCB0ZXN0Li5cbiAgICB0aGlzLmNvbnRhaW5zUG9pbnQgPSB0aGlzLl9jYWNoZWRTcHJpdGUuY29udGFpbnNQb2ludC5iaW5kKHRoaXMuX2NhY2hlZFNwcml0ZSk7XG59O1xuXG4vKipcbiogUmVuZGVycyBhIGNhY2hlZCB2ZXJzaW9uIG9mIHRoZSBzcHJpdGUgd2l0aCBjYW52YXNcbipcbiogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLkNhbnZhc1JlbmRlcmVyfSB0aGUgQ2FudmFzIHJlbmRlcmVyXG4qIEBwcml2YXRlXG4qL1xuRGlzcGxheU9iamVjdC5wcm90b3R5cGUuX3JlbmRlckNhY2hlZENhbnZhcyA9IGZ1bmN0aW9uIChyZW5kZXJlcilcbntcbiAgICBpZiAoIXRoaXMudmlzaWJsZSB8fCB0aGlzLndvcmxkQWxwaGEgPD0gMCB8fCAhdGhpcy5yZW5kZXJhYmxlKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuX2luaXRDYWNoZWREaXNwbGF5T2JqZWN0Q2FudmFzKCByZW5kZXJlciApO1xuXG4gICAgdGhpcy5fY2FjaGVkU3ByaXRlLndvcmxkQWxwaGEgPSB0aGlzLndvcmxkQWxwaGE7XG5cbiAgICB0aGlzLl9jYWNoZWRTcHJpdGUucmVuZGVyQ2FudmFzKHJlbmRlcmVyKTtcbn07XG5cbi8vVE9ETyB0aGlzIGNhbiBiZSB0aGUgc2FtZSBhcyB0aGUgd2ViR0wgdmVyaXNvbi4uIHdpbGwgbmVlZCB0byBkbyBhIGxpdHRsZSB0d2Vha2luZyBmaXJzdCB0aG91Z2guLlxuLyoqXG4qIFByZXBhcmVzIHRoZSBDYW52YXMgcmVuZGVyZXIgdG8gY2FjaGUgdGhlIHNwcml0ZVxuKlxuKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuQ2FudmFzUmVuZGVyZXJ9IHRoZSBDYW52YXMgcmVuZGVyZXJcbiogQHByaXZhdGVcbiovXG5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS5faW5pdENhY2hlZERpc3BsYXlPYmplY3RDYW52YXMgPSBmdW5jdGlvbiAocmVuZGVyZXIpXG57XG4gICAgaWYodGhpcy5fY2FjaGVkU3ByaXRlKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vZ2V0IGJvdW5kcyBhY3R1YWxseSB0cmFuc2Zvcm1zIHRoZSBvYmplY3QgZm9yIHVzIGFscmVhZHkhXG4gICAgdmFyIGJvdW5kcyA9IHRoaXMuZ2V0TG9jYWxCb3VuZHMoKTtcblxuICAgIHZhciBjYWNoZWRSZW5kZXJUYXJnZXQgPSByZW5kZXJlci5jb250ZXh0O1xuXG4gICAgdmFyIHJlbmRlclRleHR1cmUgPSBuZXcgY29yZS5SZW5kZXJUZXh0dXJlKHJlbmRlcmVyLCBib3VuZHMud2lkdGggfCAwLCBib3VuZHMuaGVpZ2h0IHwgMCk7XG5cbiAgICAvLyBuZWVkIHRvIHNldCAvL1xuICAgIHZhciBtID0gX3RlbXBNYXRyaXg7XG5cbiAgICBtLnR4ID0gLWJvdW5kcy54O1xuICAgIG0udHkgPSAtYm91bmRzLnk7XG5cbiAgICAvLyBzZXQgYWxsIHByb3BlcnRpZXMgdG8gdGhlcmUgb3JpZ2luYWwgc28gd2UgY2FuIHJlbmRlciB0byBhIHRleHR1cmVcbiAgICB0aGlzLnJlbmRlckNhbnZhcyA9IHRoaXMuX29yaWdpbmFsUmVuZGVyQ2FudmFzO1xuXG4gICAgcmVuZGVyVGV4dHVyZS5yZW5kZXIodGhpcywgbSwgdHJ1ZSk7XG5cbiAgICAvLyBub3cgcmVzdG9yZSB0aGUgc3RhdGUgYmUgc2V0dGluZyB0aGUgbmV3IHByb3BlcnRpZXNcbiAgICByZW5kZXJlci5jb250ZXh0ID0gY2FjaGVkUmVuZGVyVGFyZ2V0O1xuXG4gICAgdGhpcy5yZW5kZXJDYW52YXMgPSB0aGlzLl9yZW5kZXJDYWNoZWRDYW52YXM7XG4gICAgdGhpcy51cGRhdGVUcmFuc2Zvcm0gPSB0aGlzLmRpc3BsYXlPYmplY3RVcGRhdGVUcmFuc2Zvcm07XG4gICAgdGhpcy5nZXRCb3VuZHMgID0gdGhpcy5fZ2V0Q2FjaGVkQm91bmRzO1xuXG5cbiAgICAvLyBjcmVhdGUgb3VyIGNhY2hlZCBzcHJpdGVcbiAgICB0aGlzLl9jYWNoZWRTcHJpdGUgPSBuZXcgY29yZS5TcHJpdGUocmVuZGVyVGV4dHVyZSk7XG4gICAgdGhpcy5fY2FjaGVkU3ByaXRlLndvcmxkVHJhbnNmb3JtID0gdGhpcy53b3JsZFRyYW5zZm9ybTtcbiAgICB0aGlzLl9jYWNoZWRTcHJpdGUuYW5jaG9yLnggPSAtKCBib3VuZHMueCAvIGJvdW5kcy53aWR0aCApO1xuICAgIHRoaXMuX2NhY2hlZFNwcml0ZS5hbmNob3IueSA9IC0oIGJvdW5kcy55IC8gYm91bmRzLmhlaWdodCApO1xuXG4gICAgdGhpcy51cGRhdGVUcmFuc2Zvcm0oKTtcblxuICAgIHRoaXMuY29udGFpbnNQb2ludCA9IHRoaXMuX2NhY2hlZFNwcml0ZS5jb250YWluc1BvaW50LmJpbmQodGhpcy5fY2FjaGVkU3ByaXRlKTtcbn07XG5cbi8qKlxuKiBDYWxjdWxhdGVzIHRoZSBib3VuZHMgb2YgdGhlIGNhY2hlZCBzcHJpdGVcbipcbiogQHByaXZhdGVcbiovXG5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS5fZ2V0Q2FjaGVkQm91bmRzID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLl9jYWNoZWRTcHJpdGUuX2N1cnJlbnRCb3VuZHMgPSBudWxsO1xuXG4gICAgcmV0dXJuIHRoaXMuX2NhY2hlZFNwcml0ZS5nZXRCb3VuZHMoKTtcbn07XG5cbi8qKlxuKiBEZXN0cm95cyB0aGUgY2FjaGVkIHNwcml0ZS5cbipcbiogQHByaXZhdGVcbiovXG5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS5fZGVzdHJveUNhY2hlZERpc3BsYXlPYmplY3QgPSBmdW5jdGlvbiAoKVxue1xuICAgIHRoaXMuX2NhY2hlZFNwcml0ZS5fdGV4dHVyZS5kZXN0cm95KCk7XG4gICAgdGhpcy5fY2FjaGVkU3ByaXRlID0gbnVsbDtcbn07XG5cbkRpc3BsYXlPYmplY3QucHJvdG90eXBlLl9jYWNoZUFzQml0bWFwRGVzdHJveSA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy5jYWNoZUFzQml0bWFwID0gZmFsc2U7XG4gICAgdGhpcy5fb3JpZ2luYWxEZXN0cm95KCk7XG59O1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi9jb3JlJyk7XG5cbi8qKlxuICogVGhlIGluc3RhbmNlIG5hbWUgb2YgdGhlIG9iamVjdC5cbiAqXG4gKiBAbWVtYmVyb2YgUElYSS5EaXNwbGF5T2JqZWN0I1xuICogQG1lbWJlciB7c3RyaW5nfVxuICovXG5jb3JlLkRpc3BsYXlPYmplY3QucHJvdG90eXBlLm5hbWUgPSBudWxsO1xuXG4vKipcbiogUmV0dXJucyB0aGUgZGlzcGxheSBvYmplY3QgaW4gdGhlIGNvbnRhaW5lclxuKlxuKiBAbWVtYmVyb2YgUElYSS5Db250YWluZXIjXG4qIEBwYXJhbSBuYW1lIHtzdHJpbmd9IGluc3RhbmNlIG5hbWVcbiogQHJldHVybiB7UElYSS5EaXNwbGF5T2JqZWN0fVxuKi9cbmNvcmUuQ29udGFpbmVyLnByb3RvdHlwZS5nZXRDaGlsZEJ5TmFtZSA9IGZ1bmN0aW9uIChuYW1lKVxue1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5jaGlsZHJlbi5sZW5ndGg7IGkrKylcbiAgICB7XG4gICAgICAgIGlmICh0aGlzLmNoaWxkcmVuW2ldLm5hbWUgPT09IG5hbWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmNoaWxkcmVuW2ldO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xufTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vY29yZScpO1xuXG4vKipcbiogUmV0dXJucyB0aGUgZ2xvYmFsIHBvc2l0aW9uIG9mIHRoZSBkaXNwbGF5T2JqZWN0XG4qXG4qIEBtZW1iZXJvZiBQSVhJLkRpc3BsYXlPYmplY3QjXG4qIEBwYXJhbSBwb2ludCB7UG9pbnR9IHRoZSBwb2ludCB0byB3cml0ZSB0aGUgZ2xvYmFsIHZhbHVlIHRvLiBJZiBudWxsIGEgbmV3IHBvaW50IHdpbGwgYmUgcmV0dXJuZWRcbiogQHJldHVybiB7UG9pbnR9XG4qL1xuY29yZS5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS5nZXRHbG9iYWxQb3NpdGlvbiA9IGZ1bmN0aW9uIChwb2ludClcbntcbiAgICBwb2ludCA9IHBvaW50IHx8IG5ldyBjb3JlLlBvaW50KCk7XG5cbiAgICBpZih0aGlzLnBhcmVudClcbiAgICB7XG4gICAgICAgIHRoaXMuZGlzcGxheU9iamVjdFVwZGF0ZVRyYW5zZm9ybSgpO1xuXG4gICAgICAgIHBvaW50LnggPSB0aGlzLndvcmxkVHJhbnNmb3JtLnR4O1xuICAgICAgICBwb2ludC55ID0gdGhpcy53b3JsZFRyYW5zZm9ybS50eTtcbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgcG9pbnQueCA9IHRoaXMucG9zaXRpb24ueDtcbiAgICAgICAgcG9pbnQueSA9IHRoaXMucG9zaXRpb24ueTtcbiAgICB9XG5cbiAgICByZXR1cm4gcG9pbnQ7XG59O1xuIiwiLyoqXG4gKiBAZmlsZSAgICAgICAgTWFpbiBleHBvcnQgb2YgdGhlIFBJWEkgZXh0cmFzIGxpYnJhcnlcbiAqIEBhdXRob3IgICAgICBNYXQgR3JvdmVzIDxtYXRAZ29vZGJveWRpZ2l0YWwuY29tPlxuICogQGNvcHlyaWdodCAgIDIwMTMtMjAxNSBHb29kQm95RGlnaXRhbFxuICogQGxpY2Vuc2UgICAgIHtAbGluayBodHRwczovL2dpdGh1Yi5jb20vcGl4aWpzL3BpeGkuanMvYmxvYi9tYXN0ZXIvTElDRU5TRXxNSVQgTGljZW5zZX1cbiAqL1xuXG5yZXF1aXJlKCcuL2NhY2hlQXNCaXRtYXAnKTtcbnJlcXVpcmUoJy4vZ2V0Q2hpbGRCeU5hbWUnKTtcbnJlcXVpcmUoJy4vZ2V0R2xvYmFsUG9zaXRpb24nKTtcblxuLyoqXG4gKiBAbmFtZXNwYWNlIFBJWEkuZXh0cmFzXG4gKi9cbm1vZHVsZS5leHBvcnRzID0ge1xuICAgIE1vdmllQ2xpcDogICAgICByZXF1aXJlKCcuL01vdmllQ2xpcCcpLFxuICAgIFRpbGluZ1Nwcml0ZTogICByZXF1aXJlKCcuL1RpbGluZ1Nwcml0ZScpLFxuICAgIEJpdG1hcFRleHQ6ICAgICByZXF1aXJlKCcuL0JpdG1hcFRleHQnKVxufTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vLi4vY29yZScpO1xuLy8gQHNlZSBodHRwczovL2dpdGh1Yi5jb20vc3Vic3RhY2svYnJmcy9pc3N1ZXMvMjVcblxuXG4vLyBUT0RPIChjZW5nbGVyKSAtIFRoZSBZIGlzIGZsaXBwZWQgaW4gdGhpcyBzaGFkZXIgZm9yIHNvbWUgcmVhc29uLlxuXG4vKipcbiAqIEBhdXRob3IgVmljbyBAdmljb2NvdGVhXG4gKiBvcmlnaW5hbCBzaGFkZXIgOiBodHRwczovL3d3dy5zaGFkZXJ0b3kuY29tL3ZpZXcvbHNzR0RqIGJ5IEBtb3ZBWDEzaFxuICovXG5cbi8qKlxuICogQW4gQVNDSUkgZmlsdGVyLlxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5BYnN0cmFjdEZpbHRlclxuICogQG1lbWJlcm9mIFBJWEkuZmlsdGVyc1xuICovXG5mdW5jdGlvbiBBc2NpaUZpbHRlcigpXG57XG4gICAgY29yZS5BYnN0cmFjdEZpbHRlci5jYWxsKHRoaXMsXG4gICAgICAgIC8vIHZlcnRleCBzaGFkZXJcbiAgICAgICAgbnVsbCxcbiAgICAgICAgLy8gZnJhZ21lbnQgc2hhZGVyXG4gICAgICAgIFwicHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XFxuXFxudW5pZm9ybSB2ZWM0IGRpbWVuc2lvbnM7XFxudW5pZm9ybSBmbG9hdCBwaXhlbFNpemU7XFxudW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXI7XFxuXFxuZmxvYXQgY2hhcmFjdGVyKGZsb2F0IG4sIHZlYzIgcClcXG57XFxuICAgIHAgPSBmbG9vcihwKnZlYzIoNC4wLCAtNC4wKSArIDIuNSk7XFxuICAgIGlmIChjbGFtcChwLngsIDAuMCwgNC4wKSA9PSBwLnggJiYgY2xhbXAocC55LCAwLjAsIDQuMCkgPT0gcC55KVxcbiAgICB7XFxuICAgICAgICBpZiAoaW50KG1vZChuL2V4cDIocC54ICsgNS4wKnAueSksIDIuMCkpID09IDEpIHJldHVybiAxLjA7XFxuICAgIH1cXG4gICAgcmV0dXJuIDAuMDtcXG59XFxuXFxudm9pZCBtYWluKClcXG57XFxuICAgIHZlYzIgdXYgPSBnbF9GcmFnQ29vcmQueHk7XFxuXFxuICAgIHZlYzMgY29sID0gdGV4dHVyZTJEKHVTYW1wbGVyLCBmbG9vciggdXYgLyBwaXhlbFNpemUgKSAqIHBpeGVsU2l6ZSAvIGRpbWVuc2lvbnMueHkpLnJnYjtcXG5cXG4gICAgZmxvYXQgZ3JheSA9IChjb2wuciArIGNvbC5nICsgY29sLmIpIC8gMy4wO1xcblxcbiAgICBmbG9hdCBuID0gIDY1NTM2LjA7ICAgICAgICAgICAgIC8vIC5cXG4gICAgaWYgKGdyYXkgPiAwLjIpIG4gPSA2NTYwMC4wOyAgICAvLyA6XFxuICAgIGlmIChncmF5ID4gMC4zKSBuID0gMzMyNzcyLjA7ICAgLy8gKlxcbiAgICBpZiAoZ3JheSA+IDAuNCkgbiA9IDE1MjU1MDg2LjA7IC8vIG9cXG4gICAgaWYgKGdyYXkgPiAwLjUpIG4gPSAyMzM4NTE2NC4wOyAvLyAmXFxuICAgIGlmIChncmF5ID4gMC42KSBuID0gMTUyNTIwMTQuMDsgLy8gOFxcbiAgICBpZiAoZ3JheSA+IDAuNykgbiA9IDEzMTk5NDUyLjA7IC8vIEBcXG4gICAgaWYgKGdyYXkgPiAwLjgpIG4gPSAxMTUxMjgxMC4wOyAvLyAjXFxuXFxuICAgIHZlYzIgcCA9IG1vZCggdXYgLyAoIHBpeGVsU2l6ZSAqIDAuNSApLCAyLjApIC0gdmVjMigxLjApO1xcbiAgICBjb2wgPSBjb2wgKiBjaGFyYWN0ZXIobiwgcCk7XFxuXFxuICAgIGdsX0ZyYWdDb2xvciA9IHZlYzQoY29sLCAxLjApO1xcbn1cXG5cIixcbiAgICAgICAgLy8gY3VzdG9tIHVuaWZvcm1zXG4gICAgICAgIHtcbiAgICAgICAgICAgIGRpbWVuc2lvbnM6IHsgdHlwZTogJzRmdicsIHZhbHVlOiBuZXcgRmxvYXQzMkFycmF5KFswLCAwLCAwLCAwXSkgfSxcbiAgICAgICAgICAgIHBpeGVsU2l6ZTogIHsgdHlwZTogJzFmJywgdmFsdWU6IDggfVxuICAgICAgICB9XG4gICAgKTtcbn1cblxuQXNjaWlGaWx0ZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShjb3JlLkFic3RyYWN0RmlsdGVyLnByb3RvdHlwZSk7XG5Bc2NpaUZpbHRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBBc2NpaUZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gQXNjaWlGaWx0ZXI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKEFzY2lpRmlsdGVyLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFRoZSBwaXhlbCBzaXplIHVzZWQgYnkgdGhlIGZpbHRlci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLkFzY2lpRmlsdGVyI1xuICAgICAqL1xuICAgIHNpemU6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy51bmlmb3Jtcy5waXhlbFNpemUudmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLnBpeGVsU2l6ZS52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfVxufSk7XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uLy4uL2NvcmUnKSxcbiAgICBCbHVyWEZpbHRlciA9IHJlcXVpcmUoJy4uL2JsdXIvQmx1clhGaWx0ZXInKSxcbiAgICBCbHVyWUZpbHRlciA9IHJlcXVpcmUoJy4uL2JsdXIvQmx1cllGaWx0ZXInKTtcblxuLyoqXG4gKiBUaGUgQmxvb21GaWx0ZXIgYXBwbGllcyBhIEdhdXNzaWFuIGJsdXIgdG8gYW4gb2JqZWN0LlxuICogVGhlIHN0cmVuZ3RoIG9mIHRoZSBibHVyIGNhbiBiZSBzZXQgZm9yIHgtIGFuZCB5LWF4aXMgc2VwYXJhdGVseS5cbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQWJzdHJhY3RGaWx0ZXJcbiAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnNcbiAqL1xuZnVuY3Rpb24gQmxvb21GaWx0ZXIoKVxue1xuICAgIGNvcmUuQWJzdHJhY3RGaWx0ZXIuY2FsbCh0aGlzKTtcblxuICAgIHRoaXMuYmx1clhGaWx0ZXIgPSBuZXcgQmx1clhGaWx0ZXIoKTtcbiAgICB0aGlzLmJsdXJZRmlsdGVyID0gbmV3IEJsdXJZRmlsdGVyKCk7XG5cbiAgICB0aGlzLmRlZmF1bHRGaWx0ZXIgPSBuZXcgY29yZS5BYnN0cmFjdEZpbHRlcigpO1xufVxuXG5CbG9vbUZpbHRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuQWJzdHJhY3RGaWx0ZXIucHJvdG90eXBlKTtcbkJsb29tRmlsdGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IEJsb29tRmlsdGVyO1xubW9kdWxlLmV4cG9ydHMgPSBCbG9vbUZpbHRlcjtcblxuQmxvb21GaWx0ZXIucHJvdG90eXBlLmFwcGx5RmlsdGVyID0gZnVuY3Rpb24gKHJlbmRlcmVyLCBpbnB1dCwgb3V0cHV0KVxue1xuICAgIHZhciByZW5kZXJUYXJnZXQgPSByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLmdldFJlbmRlclRhcmdldCh0cnVlKTtcblxuICAgIC8vVE9ETyAtIGNvcHlUZXhTdWJJbWFnZTJEIGNvdWxkIGJlIHVzZWQgaGVyZT9cbiAgICB0aGlzLmRlZmF1bHRGaWx0ZXIuYXBwbHlGaWx0ZXIocmVuZGVyZXIsIGlucHV0LCBvdXRwdXQpO1xuXG4gICAgdGhpcy5ibHVyWEZpbHRlci5hcHBseUZpbHRlcihyZW5kZXJlciwgaW5wdXQsIHJlbmRlclRhcmdldCk7XG5cbiAgICByZW5kZXJlci5ibGVuZE1vZGVNYW5hZ2VyLnNldEJsZW5kTW9kZShjb3JlLkJMRU5EX01PREVTLlNDUkVFTik7XG5cbiAgICB0aGlzLmJsdXJZRmlsdGVyLmFwcGx5RmlsdGVyKHJlbmRlcmVyLCByZW5kZXJUYXJnZXQsIG91dHB1dCk7XG5cbiAgICByZW5kZXJlci5ibGVuZE1vZGVNYW5hZ2VyLnNldEJsZW5kTW9kZShjb3JlLkJMRU5EX01PREVTLk5PUk1BTCk7XG5cbiAgICByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLnJldHVyblJlbmRlclRhcmdldChyZW5kZXJUYXJnZXQpO1xufTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoQmxvb21GaWx0ZXIucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgc3RyZW5ndGggb2YgYm90aCB0aGUgYmx1clggYW5kIGJsdXJZIHByb3BlcnRpZXMgc2ltdWx0YW5lb3VzbHlcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyT2YgUElYSS5maWx0ZXJzLkJsb29tRmlsdGVyI1xuICAgICAqIEBkZWZhdWx0IDJcbiAgICAgKi9cbiAgICBibHVyOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuYmx1clhGaWx0ZXIuYmx1cjtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuYmx1clhGaWx0ZXIuYmx1ciA9IHRoaXMuYmx1cllGaWx0ZXIuYmx1ciA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIHN0cmVuZ3RoIG9mIHRoZSBibHVyWCBwcm9wZXJ0eVxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJPZiBQSVhJLmZpbHRlcnMuQmxvb21GaWx0ZXIjXG4gICAgICogQGRlZmF1bHQgMlxuICAgICAqL1xuICAgIGJsdXJYOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuYmx1clhGaWx0ZXIuYmx1cjtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuYmx1clhGaWx0ZXIuYmx1ciA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIHN0cmVuZ3RoIG9mIHRoZSBibHVyWSBwcm9wZXJ0eVxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJPZiBQSVhJLmZpbHRlcnMuQmxvb21GaWx0ZXIjXG4gICAgICogQGRlZmF1bHQgMlxuICAgICAqL1xuICAgIGJsdXJZOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuYmx1cllGaWx0ZXIuYmx1cjtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuYmx1cllGaWx0ZXIuYmx1ciA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfVxufSk7XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uLy4uL2NvcmUnKTtcblxuXG4vKipcbiAqIFRoZSBCbHVyRGlyRmlsdGVyIGFwcGxpZXMgYSBHYXVzc2lhbiBibHVyIHRvd2FyZCBhIGRpcmVjdGlvbiB0byBhbiBvYmplY3QuXG4gKlxuICogQGNsYXNzXG4gKiBAcGFyYW0ge251bWJlcn0gZGlyWFxuICogQHBhcmFtIHtudW1iZXJ9IGRpcllcbiAqIEBleHRlbmRzIFBJWEkuQWJzdHJhY3RGaWx0ZXJcbiAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnNcbiAqL1xuZnVuY3Rpb24gQmx1ckRpckZpbHRlcihkaXJYLCBkaXJZKVxue1xuICAgIGNvcmUuQWJzdHJhY3RGaWx0ZXIuY2FsbCh0aGlzLFxuICAgICAgICAvLyB2ZXJ0ZXggc2hhZGVyXG4gICAgICAgIFwiYXR0cmlidXRlIHZlYzIgYVZlcnRleFBvc2l0aW9uO1xcbmF0dHJpYnV0ZSB2ZWMyIGFUZXh0dXJlQ29vcmQ7XFxuYXR0cmlidXRlIHZlYzQgYUNvbG9yO1xcblxcbnVuaWZvcm0gZmxvYXQgc3RyZW5ndGg7XFxudW5pZm9ybSBmbG9hdCBkaXJYO1xcbnVuaWZvcm0gZmxvYXQgZGlyWTtcXG51bmlmb3JtIG1hdDMgcHJvamVjdGlvbk1hdHJpeDtcXG5cXG52YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDtcXG52YXJ5aW5nIHZlYzQgdkNvbG9yO1xcbnZhcnlpbmcgdmVjMiB2Qmx1clRleENvb3Jkc1szXTtcXG5cXG52b2lkIG1haW4odm9pZClcXG57XFxuICAgIGdsX1Bvc2l0aW9uID0gdmVjNCgocHJvamVjdGlvbk1hdHJpeCAqIHZlYzMoKGFWZXJ0ZXhQb3NpdGlvbiksIDEuMCkpLnh5LCAwLjAsIDEuMCk7XFxuICAgIHZUZXh0dXJlQ29vcmQgPSBhVGV4dHVyZUNvb3JkO1xcblxcbiAgICB2Qmx1clRleENvb3Jkc1swXSA9IGFUZXh0dXJlQ29vcmQgKyB2ZWMyKCAoMC4wMDQgKiBzdHJlbmd0aCkgKiBkaXJYLCAoMC4wMDQgKiBzdHJlbmd0aCkgKiBkaXJZICk7XFxuICAgIHZCbHVyVGV4Q29vcmRzWzFdID0gYVRleHR1cmVDb29yZCArIHZlYzIoICgwLjAwOCAqIHN0cmVuZ3RoKSAqIGRpclgsICgwLjAwOCAqIHN0cmVuZ3RoKSAqIGRpclkgKTtcXG4gICAgdkJsdXJUZXhDb29yZHNbMl0gPSBhVGV4dHVyZUNvb3JkICsgdmVjMiggKDAuMDEyICogc3RyZW5ndGgpICogZGlyWCwgKDAuMDEyICogc3RyZW5ndGgpICogZGlyWSApO1xcblxcbiAgICB2Q29sb3IgPSB2ZWM0KGFDb2xvci5yZ2IgKiBhQ29sb3IuYSwgYUNvbG9yLmEpO1xcbn1cXG5cIixcbiAgICAgICAgLy8gZnJhZ21lbnQgc2hhZGVyXG4gICAgICAgIFwicHJlY2lzaW9uIGxvd3AgZmxvYXQ7XFxuXFxudmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7XFxudmFyeWluZyB2ZWMyIHZCbHVyVGV4Q29vcmRzWzNdO1xcbnZhcnlpbmcgdmVjNCB2Q29sb3I7XFxuXFxudW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXI7XFxuXFxudm9pZCBtYWluKHZvaWQpXFxue1xcbiAgICBnbF9GcmFnQ29sb3IgPSB2ZWM0KDAuMCk7XFxuXFxuICAgIGdsX0ZyYWdDb2xvciArPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZUZXh0dXJlQ29vcmQgICAgICkgKiAwLjM5ODk0MjI4MDQwMTQzMjc7XFxuICAgIGdsX0ZyYWdDb2xvciArPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZCbHVyVGV4Q29vcmRzWyAwXSkgKiAwLjI0MTk3MDcyNDUxOTE0NTQ7XFxuICAgIGdsX0ZyYWdDb2xvciArPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZCbHVyVGV4Q29vcmRzWyAxXSkgKiAwLjA1Mzk5MDk2NjUxMzE4OTg1O1xcbiAgICBnbF9GcmFnQ29sb3IgKz0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2Qmx1clRleENvb3Jkc1sgMl0pICogMC4wMDQ0MzE4NDg0MTE5MzgzNDE7XFxufVxcblwiLFxuICAgICAgICAvLyBzZXQgdGhlIHVuaWZvcm1zXG4gICAgICAgIHtcbiAgICAgICAgICAgIHN0cmVuZ3RoOiB7IHR5cGU6ICcxZicsIHZhbHVlOiAxIH0sXG4gICAgICAgICAgICBkaXJYOiB7IHR5cGU6ICcxZicsIHZhbHVlOiBkaXJYIHx8IDAgfSxcbiAgICAgICAgICAgIGRpclk6IHsgdHlwZTogJzFmJywgdmFsdWU6IGRpclkgfHwgMCB9XG4gICAgICAgIH1cbiAgICApO1xuXG4gICAgdGhpcy5kZWZhdWx0RmlsdGVyID0gbmV3IGNvcmUuQWJzdHJhY3RGaWx0ZXIoKTtcblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIG51bWJlciBvZiBwYXNzZXMgZm9yIGJsdXIuIE1vcmUgcGFzc2VzIG1lYW5zIGhpZ2hlciBxdWFpbGl0eSBibHVyaW5nLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDFcbiAgICAgKi9cbiAgICB0aGlzLnBhc3NlcyA9IDE7XG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBYIGRpcmVjdGlvbiBvZiB0aGUgYmx1clxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDBcbiAgICAgKi9cbiAgICB0aGlzLmRpclggPSBkaXJYIHx8IDA7XG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBZIGRpcmVjdGlvbiBvZiB0aGUgYmx1clxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDBcbiAgICAgKi9cbiAgICB0aGlzLmRpclkgPSBkaXJZIHx8IDA7XG5cbiAgICB0aGlzLnN0cmVuZ3RoID0gNDtcbn1cblxuQmx1ckRpckZpbHRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuQWJzdHJhY3RGaWx0ZXIucHJvdG90eXBlKTtcbkJsdXJEaXJGaWx0ZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gQmx1ckRpckZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gQmx1ckRpckZpbHRlcjtcblxuQmx1ckRpckZpbHRlci5wcm90b3R5cGUuYXBwbHlGaWx0ZXIgPSBmdW5jdGlvbiAocmVuZGVyZXIsIGlucHV0LCBvdXRwdXQsIGNsZWFyKSB7XG5cbiAgICB2YXIgc2hhZGVyID0gdGhpcy5nZXRTaGFkZXIocmVuZGVyZXIpO1xuXG4gICAgdGhpcy51bmlmb3Jtcy5zdHJlbmd0aC52YWx1ZSA9IHRoaXMuc3RyZW5ndGggLyA0IC8gdGhpcy5wYXNzZXMgKiAoaW5wdXQuZnJhbWUud2lkdGggLyBpbnB1dC5zaXplLndpZHRoKTtcblxuICAgIGlmICh0aGlzLnBhc3NlcyA9PT0gMSkge1xuICAgICAgICByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLmFwcGx5RmlsdGVyKHNoYWRlciwgaW5wdXQsIG91dHB1dCwgY2xlYXIpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHZhciByZW5kZXJUYXJnZXQgPSByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLmdldFJlbmRlclRhcmdldCh0cnVlKTtcblxuICAgICAgICByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLmFwcGx5RmlsdGVyKHNoYWRlciwgaW5wdXQsIHJlbmRlclRhcmdldCwgY2xlYXIpO1xuXG4gICAgICAgIGZvcih2YXIgaSA9IDA7IGkgPCB0aGlzLnBhc3Nlcy0yOyBpKyspXG4gICAgICAgIHtcbiAgICAgICAgICAgIC8vdGhpcy51bmlmb3Jtcy5zdHJlbmd0aC52YWx1ZSA9IHRoaXMuc3RyZW5ndGggLyA0IC8gKHRoaXMucGFzc2VzKyhpKjIpKSAqIChpbnB1dC5mcmFtZS53aWR0aCAvIGlucHV0LnNpemUud2lkdGgpO1xuICAgICAgICAgICAgcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5hcHBseUZpbHRlcihzaGFkZXIsIHJlbmRlclRhcmdldCwgcmVuZGVyVGFyZ2V0LCBjbGVhcik7XG4gICAgICAgIH1cblxuICAgICAgICByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLmFwcGx5RmlsdGVyKHNoYWRlciwgcmVuZGVyVGFyZ2V0LCBvdXRwdXQsIGNsZWFyKTtcblxuICAgICAgICByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLnJldHVyblJlbmRlclRhcmdldChyZW5kZXJUYXJnZXQpO1xuICAgIH1cbn07XG5cblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoQmx1ckRpckZpbHRlci5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBzdHJlbmd0aCBvZiBib3RoIHRoZSBibHVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuQmx1ckRpckZpbHRlciNcbiAgICAgKiBAZGVmYXVsdCAyXG4gICAgICovXG4gICAgYmx1cjoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnN0cmVuZ3RoO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5wYWRkaW5nID0gdmFsdWUgKiAwLjU7XG4gICAgICAgICAgICB0aGlzLnN0cmVuZ3RoID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9LFxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIFggZGlyZWN0aW9uIG9mIHRoZSBibHVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuQmx1cllGaWx0ZXIjXG4gICAgICogQGRlZmF1bHQgMFxuICAgICAqL1xuICAgIGRpclg6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5kaXJYO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy5kaXJYLnZhbHVlID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9LFxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIFkgZGlyZWN0aW9uIG9mIHRoZSBibHVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuQmx1ckRpckZpbHRlciNcbiAgICAgKiBAZGVmYXVsdCAwXG4gICAgICovXG4gICAgZGlyWToge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmRpclk7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLmRpclkudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi8uLi9jb3JlJyksXG4gICAgQmx1clhGaWx0ZXIgPSByZXF1aXJlKCcuL0JsdXJYRmlsdGVyJyksXG4gICAgQmx1cllGaWx0ZXIgPSByZXF1aXJlKCcuL0JsdXJZRmlsdGVyJyk7XG5cbi8qKlxuICogVGhlIEJsdXJGaWx0ZXIgYXBwbGllcyBhIEdhdXNzaWFuIGJsdXIgdG8gYW4gb2JqZWN0LlxuICogVGhlIHN0cmVuZ3RoIG9mIHRoZSBibHVyIGNhbiBiZSBzZXQgZm9yIHgtIGFuZCB5LWF4aXMgc2VwYXJhdGVseS5cbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQWJzdHJhY3RGaWx0ZXJcbiAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnNcbiAqL1xuZnVuY3Rpb24gQmx1ckZpbHRlcigpXG57XG4gICAgY29yZS5BYnN0cmFjdEZpbHRlci5jYWxsKHRoaXMpO1xuXG4gICAgdGhpcy5ibHVyWEZpbHRlciA9IG5ldyBCbHVyWEZpbHRlcigpO1xuICAgIHRoaXMuYmx1cllGaWx0ZXIgPSBuZXcgQmx1cllGaWx0ZXIoKTtcbn1cblxuQmx1ckZpbHRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuQWJzdHJhY3RGaWx0ZXIucHJvdG90eXBlKTtcbkJsdXJGaWx0ZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gQmx1ckZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gQmx1ckZpbHRlcjtcblxuQmx1ckZpbHRlci5wcm90b3R5cGUuYXBwbHlGaWx0ZXIgPSBmdW5jdGlvbiAocmVuZGVyZXIsIGlucHV0LCBvdXRwdXQpXG57XG4gICAgdmFyIHJlbmRlclRhcmdldCA9IHJlbmRlcmVyLmZpbHRlck1hbmFnZXIuZ2V0UmVuZGVyVGFyZ2V0KHRydWUpO1xuXG4gICAgdGhpcy5ibHVyWEZpbHRlci5hcHBseUZpbHRlcihyZW5kZXJlciwgaW5wdXQsIHJlbmRlclRhcmdldCk7XG4gICAgdGhpcy5ibHVyWUZpbHRlci5hcHBseUZpbHRlcihyZW5kZXJlciwgcmVuZGVyVGFyZ2V0LCBvdXRwdXQpO1xuXG4gICAgcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5yZXR1cm5SZW5kZXJUYXJnZXQocmVuZGVyVGFyZ2V0KTtcbn07XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKEJsdXJGaWx0ZXIucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgc3RyZW5ndGggb2YgYm90aCB0aGUgYmx1clggYW5kIGJsdXJZIHByb3BlcnRpZXMgc2ltdWx0YW5lb3VzbHlcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyT2YgUElYSS5maWx0ZXJzLkJsdXJGaWx0ZXIjXG4gICAgICogQGRlZmF1bHQgMlxuICAgICAqL1xuICAgIGJsdXI6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5ibHVyWEZpbHRlci5ibHVyO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5wYWRkaW5nID0gTWF0aC5hYnModmFsdWUpICogMC41O1xuICAgICAgICAgICAgdGhpcy5ibHVyWEZpbHRlci5ibHVyID0gdGhpcy5ibHVyWUZpbHRlci5ibHVyID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgbnVtYmVyIG9mIHBhc3NlcyBmb3IgYmx1ci4gTW9yZSBwYXNzZXMgbWVhbnMgaGlnaGVyIHF1YWlsaXR5IGJsdXJpbmcuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5CbHVyWUZpbHRlciNcbiAgICAgKiBAZGVmYXVsdCAxXG4gICAgICovXG4gICAgcGFzc2VzOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuICB0aGlzLmJsdXJYRmlsdGVyLnBhc3NlcztcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuYmx1clhGaWx0ZXIucGFzc2VzID0gdGhpcy5ibHVyWUZpbHRlci5wYXNzZXMgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBzdHJlbmd0aCBvZiB0aGUgYmx1clggcHJvcGVydHlcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyT2YgUElYSS5maWx0ZXJzLkJsdXJGaWx0ZXIjXG4gICAgICogQGRlZmF1bHQgMlxuICAgICAqL1xuICAgIGJsdXJYOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuYmx1clhGaWx0ZXIuYmx1cjtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuYmx1clhGaWx0ZXIuYmx1ciA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIHN0cmVuZ3RoIG9mIHRoZSBibHVyWSBwcm9wZXJ0eVxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJPZiBQSVhJLmZpbHRlcnMuQmx1ckZpbHRlciNcbiAgICAgKiBAZGVmYXVsdCAyXG4gICAgICovXG4gICAgYmx1clk6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5ibHVyWUZpbHRlci5ibHVyO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5ibHVyWUZpbHRlci5ibHVyID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG59KTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vLi4vY29yZScpO1xuLy8gQHNlZSBodHRwczovL2dpdGh1Yi5jb20vc3Vic3RhY2svYnJmcy9pc3N1ZXMvMjVcblxuXG4vKipcbiAqIFRoZSBCbHVyWEZpbHRlciBhcHBsaWVzIGEgaG9yaXpvbnRhbCBHYXVzc2lhbiBibHVyIHRvIGFuIG9iamVjdC5cbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQWJzdHJhY3RGaWx0ZXJcbiAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnNcbiAqL1xuZnVuY3Rpb24gQmx1clhGaWx0ZXIoKVxue1xuICAgIGNvcmUuQWJzdHJhY3RGaWx0ZXIuY2FsbCh0aGlzLFxuICAgICAgICAvLyB2ZXJ0ZXggc2hhZGVyXG4gICAgICAgIFwiYXR0cmlidXRlIHZlYzIgYVZlcnRleFBvc2l0aW9uO1xcbmF0dHJpYnV0ZSB2ZWMyIGFUZXh0dXJlQ29vcmQ7XFxuYXR0cmlidXRlIHZlYzQgYUNvbG9yO1xcblxcbnVuaWZvcm0gZmxvYXQgc3RyZW5ndGg7XFxudW5pZm9ybSBtYXQzIHByb2plY3Rpb25NYXRyaXg7XFxuXFxudmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7XFxudmFyeWluZyB2ZWM0IHZDb2xvcjtcXG52YXJ5aW5nIHZlYzIgdkJsdXJUZXhDb29yZHNbNl07XFxuXFxudm9pZCBtYWluKHZvaWQpXFxue1xcbiAgICBnbF9Qb3NpdGlvbiA9IHZlYzQoKHByb2plY3Rpb25NYXRyaXggKiB2ZWMzKChhVmVydGV4UG9zaXRpb24pLCAxLjApKS54eSwgMC4wLCAxLjApO1xcbiAgICB2VGV4dHVyZUNvb3JkID0gYVRleHR1cmVDb29yZDtcXG5cXG4gICAgdkJsdXJUZXhDb29yZHNbIDBdID0gYVRleHR1cmVDb29yZCArIHZlYzIoLTAuMDEyICogc3RyZW5ndGgsIDAuMCk7XFxuICAgIHZCbHVyVGV4Q29vcmRzWyAxXSA9IGFUZXh0dXJlQ29vcmQgKyB2ZWMyKC0wLjAwOCAqIHN0cmVuZ3RoLCAwLjApO1xcbiAgICB2Qmx1clRleENvb3Jkc1sgMl0gPSBhVGV4dHVyZUNvb3JkICsgdmVjMigtMC4wMDQgKiBzdHJlbmd0aCwgMC4wKTtcXG4gICAgdkJsdXJUZXhDb29yZHNbIDNdID0gYVRleHR1cmVDb29yZCArIHZlYzIoIDAuMDA0ICogc3RyZW5ndGgsIDAuMCk7XFxuICAgIHZCbHVyVGV4Q29vcmRzWyA0XSA9IGFUZXh0dXJlQ29vcmQgKyB2ZWMyKCAwLjAwOCAqIHN0cmVuZ3RoLCAwLjApO1xcbiAgICB2Qmx1clRleENvb3Jkc1sgNV0gPSBhVGV4dHVyZUNvb3JkICsgdmVjMiggMC4wMTIgKiBzdHJlbmd0aCwgMC4wKTtcXG5cXG4gICAgdkNvbG9yID0gdmVjNChhQ29sb3IucmdiICogYUNvbG9yLmEsIGFDb2xvci5hKTtcXG59XFxuXCIsXG4gICAgICAgIC8vIGZyYWdtZW50IHNoYWRlclxuICAgICAgICBcInByZWNpc2lvbiBsb3dwIGZsb2F0O1xcblxcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xcbnZhcnlpbmcgdmVjMiB2Qmx1clRleENvb3Jkc1s2XTtcXG52YXJ5aW5nIHZlYzQgdkNvbG9yO1xcblxcbnVuaWZvcm0gc2FtcGxlcjJEIHVTYW1wbGVyO1xcblxcbnZvaWQgbWFpbih2b2lkKVxcbntcXG4gICAgZ2xfRnJhZ0NvbG9yID0gdmVjNCgwLjApO1xcblxcbiAgICBnbF9GcmFnQ29sb3IgKz0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2Qmx1clRleENvb3Jkc1sgMF0pKjAuMDA0NDMxODQ4NDExOTM4MzQxO1xcbiAgICBnbF9GcmFnQ29sb3IgKz0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2Qmx1clRleENvb3Jkc1sgMV0pKjAuMDUzOTkwOTY2NTEzMTg5ODU7XFxuICAgIGdsX0ZyYWdDb2xvciArPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZCbHVyVGV4Q29vcmRzWyAyXSkqMC4yNDE5NzA3MjQ1MTkxNDU0O1xcbiAgICBnbF9GcmFnQ29sb3IgKz0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2VGV4dHVyZUNvb3JkICAgICApKjAuMzk4OTQyMjgwNDAxNDMyNztcXG4gICAgZ2xfRnJhZ0NvbG9yICs9IHRleHR1cmUyRCh1U2FtcGxlciwgdkJsdXJUZXhDb29yZHNbIDNdKSowLjI0MTk3MDcyNDUxOTE0NTQ7XFxuICAgIGdsX0ZyYWdDb2xvciArPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZCbHVyVGV4Q29vcmRzWyA0XSkqMC4wNTM5OTA5NjY1MTMxODk4NTtcXG4gICAgZ2xfRnJhZ0NvbG9yICs9IHRleHR1cmUyRCh1U2FtcGxlciwgdkJsdXJUZXhDb29yZHNbIDVdKSowLjAwNDQzMTg0ODQxMTkzODM0MTtcXG59XFxuXCIsXG4gICAgICAgIC8vIHNldCB0aGUgdW5pZm9ybXNcbiAgICAgICAge1xuICAgICAgICAgICAgc3RyZW5ndGg6IHsgdHlwZTogJzFmJywgdmFsdWU6IDEgfVxuICAgICAgICB9XG4gICAgKTtcblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIG51bWJlciBvZiBwYXNzZXMgZm9yIGJsdXIuIE1vcmUgcGFzc2VzIG1lYW5zIGhpZ2hlciBxdWFpbGl0eSBibHVyaW5nLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDFcbiAgICAgKi9cbiAgICB0aGlzLnBhc3NlcyA9IDE7XG5cbiAgICB0aGlzLnN0cmVuZ3RoID0gNDtcbn1cblxuQmx1clhGaWx0ZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShjb3JlLkFic3RyYWN0RmlsdGVyLnByb3RvdHlwZSk7XG5CbHVyWEZpbHRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBCbHVyWEZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gQmx1clhGaWx0ZXI7XG5cbkJsdXJYRmlsdGVyLnByb3RvdHlwZS5hcHBseUZpbHRlciA9IGZ1bmN0aW9uIChyZW5kZXJlciwgaW5wdXQsIG91dHB1dCwgY2xlYXIpXG57XG4gICAgdmFyIHNoYWRlciA9IHRoaXMuZ2V0U2hhZGVyKHJlbmRlcmVyKTtcblxuICAgIHRoaXMudW5pZm9ybXMuc3RyZW5ndGgudmFsdWUgPSB0aGlzLnN0cmVuZ3RoIC8gNCAvIHRoaXMucGFzc2VzICogKGlucHV0LmZyYW1lLndpZHRoIC8gaW5wdXQuc2l6ZS53aWR0aCk7XG5cbiAgICBpZih0aGlzLnBhc3NlcyA9PT0gMSlcbiAgICB7XG4gICAgICAgIHJlbmRlcmVyLmZpbHRlck1hbmFnZXIuYXBwbHlGaWx0ZXIoc2hhZGVyLCBpbnB1dCwgb3V0cHV0LCBjbGVhcik7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHZhciByZW5kZXJUYXJnZXQgPSByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLmdldFJlbmRlclRhcmdldCh0cnVlKTtcbiAgICAgICAgdmFyIGZsaXAgPSBpbnB1dDtcbiAgICAgICAgdmFyIGZsb3AgPSByZW5kZXJUYXJnZXQ7XG5cbiAgICAgICAgZm9yKHZhciBpID0gMDsgaSA8IHRoaXMucGFzc2VzLTE7IGkrKylcbiAgICAgICAge1xuICAgICAgICAgICAgcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5hcHBseUZpbHRlcihzaGFkZXIsIGZsaXAsIGZsb3AsIHRydWUpO1xuXG4gICAgICAgICAgIHZhciB0ZW1wID0gZmxvcDtcbiAgICAgICAgICAgZmxvcCA9IGZsaXA7XG4gICAgICAgICAgIGZsaXAgPSB0ZW1wO1xuICAgICAgICB9XG5cbiAgICAgICAgcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5hcHBseUZpbHRlcihzaGFkZXIsIGZsaXAsIG91dHB1dCwgY2xlYXIpO1xuXG4gICAgICAgIHJlbmRlcmVyLmZpbHRlck1hbmFnZXIucmV0dXJuUmVuZGVyVGFyZ2V0KHJlbmRlclRhcmdldCk7XG4gICAgfVxufTtcblxuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhCbHVyWEZpbHRlci5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBzdHJlbmd0aCBvZiBib3RoIHRoZSBibHVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuQmx1clhGaWx0ZXIjXG4gICAgICogQGRlZmF1bHQgMlxuICAgICAqL1xuICAgIGJsdXI6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gIHRoaXMuc3RyZW5ndGg7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnBhZGRpbmcgPSAgTWF0aC5hYnModmFsdWUpICogMC41O1xuICAgICAgICAgICAgdGhpcy5zdHJlbmd0aCA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfVxufSk7XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uLy4uL2NvcmUnKTtcbi8vIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL3N1YnN0YWNrL2JyZnMvaXNzdWVzLzI1XG5cblxuLyoqXG4gKiBUaGUgQmx1cllGaWx0ZXIgYXBwbGllcyBhIGhvcml6b250YWwgR2F1c3NpYW4gYmx1ciB0byBhbiBvYmplY3QuXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLkFic3RyYWN0RmlsdGVyXG4gKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzXG4gKi9cbmZ1bmN0aW9uIEJsdXJZRmlsdGVyKClcbntcbiAgICBjb3JlLkFic3RyYWN0RmlsdGVyLmNhbGwodGhpcyxcbiAgICAgICAgLy8gdmVydGV4IHNoYWRlclxuICAgICAgICBcImF0dHJpYnV0ZSB2ZWMyIGFWZXJ0ZXhQb3NpdGlvbjtcXG5hdHRyaWJ1dGUgdmVjMiBhVGV4dHVyZUNvb3JkO1xcbmF0dHJpYnV0ZSB2ZWM0IGFDb2xvcjtcXG5cXG51bmlmb3JtIGZsb2F0IHN0cmVuZ3RoO1xcbnVuaWZvcm0gbWF0MyBwcm9qZWN0aW9uTWF0cml4O1xcblxcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xcbnZhcnlpbmcgdmVjNCB2Q29sb3I7XFxudmFyeWluZyB2ZWMyIHZCbHVyVGV4Q29vcmRzWzZdO1xcblxcbnZvaWQgbWFpbih2b2lkKVxcbntcXG4gICAgZ2xfUG9zaXRpb24gPSB2ZWM0KChwcm9qZWN0aW9uTWF0cml4ICogdmVjMygoYVZlcnRleFBvc2l0aW9uKSwgMS4wKSkueHksIDAuMCwgMS4wKTtcXG4gICAgdlRleHR1cmVDb29yZCA9IGFUZXh0dXJlQ29vcmQ7XFxuXFxuICAgIHZCbHVyVGV4Q29vcmRzWyAwXSA9IGFUZXh0dXJlQ29vcmQgKyB2ZWMyKDAuMCwgLTAuMDEyICogc3RyZW5ndGgpO1xcbiAgICB2Qmx1clRleENvb3Jkc1sgMV0gPSBhVGV4dHVyZUNvb3JkICsgdmVjMigwLjAsIC0wLjAwOCAqIHN0cmVuZ3RoKTtcXG4gICAgdkJsdXJUZXhDb29yZHNbIDJdID0gYVRleHR1cmVDb29yZCArIHZlYzIoMC4wLCAtMC4wMDQgKiBzdHJlbmd0aCk7XFxuICAgIHZCbHVyVGV4Q29vcmRzWyAzXSA9IGFUZXh0dXJlQ29vcmQgKyB2ZWMyKDAuMCwgIDAuMDA0ICogc3RyZW5ndGgpO1xcbiAgICB2Qmx1clRleENvb3Jkc1sgNF0gPSBhVGV4dHVyZUNvb3JkICsgdmVjMigwLjAsICAwLjAwOCAqIHN0cmVuZ3RoKTtcXG4gICAgdkJsdXJUZXhDb29yZHNbIDVdID0gYVRleHR1cmVDb29yZCArIHZlYzIoMC4wLCAgMC4wMTIgKiBzdHJlbmd0aCk7XFxuXFxuICAgdkNvbG9yID0gdmVjNChhQ29sb3IucmdiICogYUNvbG9yLmEsIGFDb2xvci5hKTtcXG59XFxuXCIsXG4gICAgICAgIC8vIGZyYWdtZW50IHNoYWRlclxuICAgICAgICBcInByZWNpc2lvbiBsb3dwIGZsb2F0O1xcblxcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xcbnZhcnlpbmcgdmVjMiB2Qmx1clRleENvb3Jkc1s2XTtcXG52YXJ5aW5nIHZlYzQgdkNvbG9yO1xcblxcbnVuaWZvcm0gc2FtcGxlcjJEIHVTYW1wbGVyO1xcblxcbnZvaWQgbWFpbih2b2lkKVxcbntcXG4gICAgZ2xfRnJhZ0NvbG9yID0gdmVjNCgwLjApO1xcblxcbiAgICBnbF9GcmFnQ29sb3IgKz0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2Qmx1clRleENvb3Jkc1sgMF0pKjAuMDA0NDMxODQ4NDExOTM4MzQxO1xcbiAgICBnbF9GcmFnQ29sb3IgKz0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2Qmx1clRleENvb3Jkc1sgMV0pKjAuMDUzOTkwOTY2NTEzMTg5ODU7XFxuICAgIGdsX0ZyYWdDb2xvciArPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZCbHVyVGV4Q29vcmRzWyAyXSkqMC4yNDE5NzA3MjQ1MTkxNDU0O1xcbiAgICBnbF9GcmFnQ29sb3IgKz0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2VGV4dHVyZUNvb3JkICAgICApKjAuMzk4OTQyMjgwNDAxNDMyNztcXG4gICAgZ2xfRnJhZ0NvbG9yICs9IHRleHR1cmUyRCh1U2FtcGxlciwgdkJsdXJUZXhDb29yZHNbIDNdKSowLjI0MTk3MDcyNDUxOTE0NTQ7XFxuICAgIGdsX0ZyYWdDb2xvciArPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZCbHVyVGV4Q29vcmRzWyA0XSkqMC4wNTM5OTA5NjY1MTMxODk4NTtcXG4gICAgZ2xfRnJhZ0NvbG9yICs9IHRleHR1cmUyRCh1U2FtcGxlciwgdkJsdXJUZXhDb29yZHNbIDVdKSowLjAwNDQzMTg0ODQxMTkzODM0MTtcXG59XFxuXCIsXG4gICAgICAgIC8vIHNldCB0aGUgdW5pZm9ybXNcbiAgICAgICAge1xuICAgICAgICAgICAgc3RyZW5ndGg6IHsgdHlwZTogJzFmJywgdmFsdWU6IDEgfVxuICAgICAgICB9XG4gICAgKTtcblxuICAgIHRoaXMucGFzc2VzID0gMTtcbiAgICB0aGlzLnN0cmVuZ3RoID0gNDtcbn1cblxuQmx1cllGaWx0ZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShjb3JlLkFic3RyYWN0RmlsdGVyLnByb3RvdHlwZSk7XG5CbHVyWUZpbHRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBCbHVyWUZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gQmx1cllGaWx0ZXI7XG5cbkJsdXJZRmlsdGVyLnByb3RvdHlwZS5hcHBseUZpbHRlciA9IGZ1bmN0aW9uIChyZW5kZXJlciwgaW5wdXQsIG91dHB1dCwgY2xlYXIpXG57XG4gICAgdmFyIHNoYWRlciA9IHRoaXMuZ2V0U2hhZGVyKHJlbmRlcmVyKTtcblxuICAgIHRoaXMudW5pZm9ybXMuc3RyZW5ndGgudmFsdWUgPSBNYXRoLmFicyh0aGlzLnN0cmVuZ3RoKSAvIDQgLyB0aGlzLnBhc3NlcyAqIChpbnB1dC5mcmFtZS5oZWlnaHQgLyBpbnB1dC5zaXplLmhlaWdodCk7XG5cbiAgICBpZih0aGlzLnBhc3NlcyA9PT0gMSlcbiAgICB7XG4gICAgICAgIHJlbmRlcmVyLmZpbHRlck1hbmFnZXIuYXBwbHlGaWx0ZXIoc2hhZGVyLCBpbnB1dCwgb3V0cHV0LCBjbGVhcik7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHZhciByZW5kZXJUYXJnZXQgPSByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLmdldFJlbmRlclRhcmdldCh0cnVlKTtcbiAgICAgICAgdmFyIGZsaXAgPSBpbnB1dDtcbiAgICAgICAgdmFyIGZsb3AgPSByZW5kZXJUYXJnZXQ7XG5cbiAgICAgICAgZm9yKHZhciBpID0gMDsgaSA8IHRoaXMucGFzc2VzLTE7IGkrKylcbiAgICAgICAge1xuICAgICAgICAgICAgcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5hcHBseUZpbHRlcihzaGFkZXIsIGZsaXAsIGZsb3AsIHRydWUpO1xuXG4gICAgICAgICAgIHZhciB0ZW1wID0gZmxvcDtcbiAgICAgICAgICAgZmxvcCA9IGZsaXA7XG4gICAgICAgICAgIGZsaXAgPSB0ZW1wO1xuICAgICAgICB9XG5cbiAgICAgICAgcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5hcHBseUZpbHRlcihzaGFkZXIsIGZsaXAsIG91dHB1dCwgY2xlYXIpO1xuXG4gICAgICAgIHJlbmRlcmVyLmZpbHRlck1hbmFnZXIucmV0dXJuUmVuZGVyVGFyZ2V0KHJlbmRlclRhcmdldCk7XG4gICAgfVxufTtcblxuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhCbHVyWUZpbHRlci5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBzdHJlbmd0aCBvZiBib3RoIHRoZSBibHVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuQmx1cllGaWx0ZXIjXG4gICAgICogQGRlZmF1bHQgMlxuICAgICAqL1xuICAgIGJsdXI6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gIHRoaXMuc3RyZW5ndGg7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnBhZGRpbmcgPSBNYXRoLmFicyh2YWx1ZSkgKiAwLjU7XG4gICAgICAgICAgICB0aGlzLnN0cmVuZ3RoID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG59KTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vLi4vY29yZScpO1xuLy8gQHNlZSBodHRwczovL2dpdGh1Yi5jb20vc3Vic3RhY2svYnJmcy9pc3N1ZXMvMjVcblxuXG4vKipcbiAqIEEgU21hcnQgQmx1ciBGaWx0ZXIuXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLkFic3RyYWN0RmlsdGVyXG4gKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzXG4gKi9cbmZ1bmN0aW9uIFNtYXJ0Qmx1ckZpbHRlcigpXG57XG4gICAgY29yZS5BYnN0cmFjdEZpbHRlci5jYWxsKHRoaXMsXG4gICAgICAgIC8vIHZlcnRleCBzaGFkZXJcbiAgICAgICAgbnVsbCxcbiAgICAgICAgLy8gZnJhZ21lbnQgc2hhZGVyXG4gICAgICAgIFwicHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XFxuXFxudmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7XFxuXFxudW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXI7XFxudW5pZm9ybSB2ZWMyIGRlbHRhO1xcblxcbmZsb2F0IHJhbmRvbSh2ZWMzIHNjYWxlLCBmbG9hdCBzZWVkKVxcbntcXG4gICAgcmV0dXJuIGZyYWN0KHNpbihkb3QoZ2xfRnJhZ0Nvb3JkLnh5eiArIHNlZWQsIHNjYWxlKSkgKiA0Mzc1OC41NDUzICsgc2VlZCk7XFxufVxcblxcbnZvaWQgbWFpbih2b2lkKVxcbntcXG4gICAgdmVjNCBjb2xvciA9IHZlYzQoMC4wKTtcXG4gICAgZmxvYXQgdG90YWwgPSAwLjA7XFxuXFxuICAgIGZsb2F0IG9mZnNldCA9IHJhbmRvbSh2ZWMzKDEyLjk4OTgsIDc4LjIzMywgMTUxLjcxODIpLCAwLjApO1xcblxcbiAgICBmb3IgKGZsb2F0IHQgPSAtMzAuMDsgdCA8PSAzMC4wOyB0KyspXFxuICAgIHtcXG4gICAgICAgIGZsb2F0IHBlcmNlbnQgPSAodCArIG9mZnNldCAtIDAuNSkgLyAzMC4wO1xcbiAgICAgICAgZmxvYXQgd2VpZ2h0ID0gMS4wIC0gYWJzKHBlcmNlbnQpO1xcbiAgICAgICAgdmVjNCBzYW1wbGUgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZUZXh0dXJlQ29vcmQgKyBkZWx0YSAqIHBlcmNlbnQpO1xcbiAgICAgICAgc2FtcGxlLnJnYiAqPSBzYW1wbGUuYTtcXG4gICAgICAgIGNvbG9yICs9IHNhbXBsZSAqIHdlaWdodDtcXG4gICAgICAgIHRvdGFsICs9IHdlaWdodDtcXG4gICAgfVxcblxcbiAgICBnbF9GcmFnQ29sb3IgPSBjb2xvciAvIHRvdGFsO1xcbiAgICBnbF9GcmFnQ29sb3IucmdiIC89IGdsX0ZyYWdDb2xvci5hICsgMC4wMDAwMTtcXG59XFxuXCIsXG4gICAgICAgIC8vIHVuaWZvcm1zXG4gICAgICAgIHtcbiAgICAgICAgICBkZWx0YTogeyB0eXBlOiAndjInLCB2YWx1ZTogeyB4OiAwLjEsIHk6IDAuMCB9IH1cbiAgICAgICAgfVxuICAgICk7XG59XG5cblNtYXJ0Qmx1ckZpbHRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuQWJzdHJhY3RGaWx0ZXIucHJvdG90eXBlKTtcblNtYXJ0Qmx1ckZpbHRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBTbWFydEJsdXJGaWx0ZXI7XG5tb2R1bGUuZXhwb3J0cyA9IFNtYXJ0Qmx1ckZpbHRlcjtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vLi4vY29yZScpO1xuLy8gQHNlZSBodHRwczovL2dpdGh1Yi5jb20vc3Vic3RhY2svYnJmcy9pc3N1ZXMvMjVcblxuXG4vKipcbiAqIFRoZSBDb2xvck1hdHJpeEZpbHRlciBjbGFzcyBsZXRzIHlvdSBhcHBseSBhIDV4NCBtYXRyaXggdHJhbnNmb3JtYXRpb24gb24gdGhlIFJHQkFcbiAqIGNvbG9yIGFuZCBhbHBoYSB2YWx1ZXMgb2YgZXZlcnkgcGl4ZWwgb24geW91ciBkaXNwbGF5T2JqZWN0IHRvIHByb2R1Y2UgYSByZXN1bHRcbiAqIHdpdGggYSBuZXcgc2V0IG9mIFJHQkEgY29sb3IgYW5kIGFscGhhIHZhbHVlcy4gSXQncyBwcmV0dHkgcG93ZXJmdWwhXG4gKlxuICogYGBganNcbiAqICB2YXIgY29sb3JNYXRyaXggPSBuZXcgUElYSS5Db2xvck1hdHJpeEZpbHRlcigpO1xuICogIGNvbnRhaW5lci5maWx0ZXJzID0gW2NvbG9yTWF0cml4XTtcbiAqICBjb2xvck1hdHJpeC5jb250cmFzdCgyKTtcbiAqIGBgYFxuICogQGF1dGhvciBDbMOpbWVudCBDaGVuZWJhdWx0IDxjbGVtZW50QGdvb2Rib3lkaWdpdGFsLmNvbT5cbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5BYnN0cmFjdEZpbHRlclxuICogQG1lbWJlcm9mIFBJWEkuZmlsdGVyc1xuICovXG5mdW5jdGlvbiBDb2xvck1hdHJpeEZpbHRlcigpXG57XG4gICAgY29yZS5BYnN0cmFjdEZpbHRlci5jYWxsKHRoaXMsXG4gICAgICAgIC8vIHZlcnRleCBzaGFkZXJcbiAgICAgICAgbnVsbCxcbiAgICAgICAgLy8gZnJhZ21lbnQgc2hhZGVyXG4gICAgICAgIFwicHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XFxuXFxudmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7XFxudW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXI7XFxudW5pZm9ybSBmbG9hdCBtWzI1XTtcXG5cXG52b2lkIG1haW4odm9pZClcXG57XFxuXFxuICAgIHZlYzQgYyA9IHRleHR1cmUyRCh1U2FtcGxlciwgdlRleHR1cmVDb29yZCk7XFxuXFxuICAgIGdsX0ZyYWdDb2xvci5yID0gKG1bMF0gKiBjLnIpO1xcbiAgICAgICAgZ2xfRnJhZ0NvbG9yLnIgKz0gKG1bMV0gKiBjLmcpO1xcbiAgICAgICAgZ2xfRnJhZ0NvbG9yLnIgKz0gKG1bMl0gKiBjLmIpO1xcbiAgICAgICAgZ2xfRnJhZ0NvbG9yLnIgKz0gKG1bM10gKiBjLmEpO1xcbiAgICAgICAgZ2xfRnJhZ0NvbG9yLnIgKz0gbVs0XTtcXG5cXG4gICAgZ2xfRnJhZ0NvbG9yLmcgPSAobVs1XSAqIGMucik7XFxuICAgICAgICBnbF9GcmFnQ29sb3IuZyArPSAobVs2XSAqIGMuZyk7XFxuICAgICAgICBnbF9GcmFnQ29sb3IuZyArPSAobVs3XSAqIGMuYik7XFxuICAgICAgICBnbF9GcmFnQ29sb3IuZyArPSAobVs4XSAqIGMuYSk7XFxuICAgICAgICBnbF9GcmFnQ29sb3IuZyArPSBtWzldO1xcblxcbiAgICAgZ2xfRnJhZ0NvbG9yLmIgPSAobVsxMF0gKiBjLnIpO1xcbiAgICAgICAgZ2xfRnJhZ0NvbG9yLmIgKz0gKG1bMTFdICogYy5nKTtcXG4gICAgICAgIGdsX0ZyYWdDb2xvci5iICs9IChtWzEyXSAqIGMuYik7XFxuICAgICAgICBnbF9GcmFnQ29sb3IuYiArPSAobVsxM10gKiBjLmEpO1xcbiAgICAgICAgZ2xfRnJhZ0NvbG9yLmIgKz0gbVsxNF07XFxuXFxuICAgICBnbF9GcmFnQ29sb3IuYSA9IChtWzE1XSAqIGMucik7XFxuICAgICAgICBnbF9GcmFnQ29sb3IuYSArPSAobVsxNl0gKiBjLmcpO1xcbiAgICAgICAgZ2xfRnJhZ0NvbG9yLmEgKz0gKG1bMTddICogYy5iKTtcXG4gICAgICAgIGdsX0ZyYWdDb2xvci5hICs9IChtWzE4XSAqIGMuYSk7XFxuICAgICAgICBnbF9GcmFnQ29sb3IuYSArPSBtWzE5XTtcXG5cXG59XFxuXCIsXG4gICAgICAgIC8vIGN1c3RvbSB1bmlmb3Jtc1xuICAgICAgICB7XG4gICAgICAgICAgICBtOiB7XG4gICAgICAgICAgICAgICAgdHlwZTogJzFmdicsIHZhbHVlOiBbXG4gICAgICAgICAgICAgICAgICAgIDEsIDAsIDAsIDAsIDAsXG4gICAgICAgICAgICAgICAgICAgIDAsIDEsIDAsIDAsIDAsXG4gICAgICAgICAgICAgICAgICAgIDAsIDAsIDEsIDAsIDAsXG4gICAgICAgICAgICAgICAgICAgIDAsIDAsIDAsIDEsIDBcbiAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICApO1xufVxuXG5Db2xvck1hdHJpeEZpbHRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuQWJzdHJhY3RGaWx0ZXIucHJvdG90eXBlKTtcbkNvbG9yTWF0cml4RmlsdGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IENvbG9yTWF0cml4RmlsdGVyO1xubW9kdWxlLmV4cG9ydHMgPSBDb2xvck1hdHJpeEZpbHRlcjtcblxuXG4vKipcbiAqIFRyYW5zZm9ybXMgY3VycmVudCBtYXRyaXggYW5kIHNldCB0aGUgbmV3IG9uZVxuICpcbiAqIEBwYXJhbSBtYXRyaXgge251bWJlcltdfSAobWF0IDV4NClcbiAqIEBwYXJhbSBtdWx0aXBseSB7Ym9vbGVhbn0gaWYgdHJ1ZSwgY3VycmVudCBtYXRyaXggYW5kIG1hdHJpeCBhcmUgbXVsdGlwbGllZC4gSWYgZmFsc2UsIGp1c3Qgc2V0IHRoZSBjdXJyZW50IG1hdHJpeCB3aXRoIEBwYXJhbSBtYXRyaXhcbiAqL1xuQ29sb3JNYXRyaXhGaWx0ZXIucHJvdG90eXBlLl9sb2FkTWF0cml4ID0gZnVuY3Rpb24gKG1hdHJpeCwgbXVsdGlwbHkpXG57XG4gICAgbXVsdGlwbHkgPSAhIW11bHRpcGx5O1xuXG4gICAgdmFyIG5ld01hdHJpeCA9IG1hdHJpeDtcblxuICAgIGlmIChtdWx0aXBseSkge1xuICAgICAgICB0aGlzLl9tdWx0aXBseShuZXdNYXRyaXgsIHRoaXMudW5pZm9ybXMubS52YWx1ZSwgbWF0cml4KTtcbiAgICAgICAgbmV3TWF0cml4ID0gdGhpcy5fY29sb3JNYXRyaXgobmV3TWF0cml4KTtcbiAgICB9XG5cbiAgICAvLyBzZXQgdGhlIG5ldyBtYXRyaXhcbiAgICB0aGlzLnVuaWZvcm1zLm0udmFsdWUgPSBuZXdNYXRyaXg7XG59O1xuXG4vKipcbiAqIE11bHRpcGxpZXMgdHdvIG1hdDUnc1xuICpcbiAqIEBwYXJhbSBvdXQge251bWJlcltdfSAobWF0IDV4NCkgdGhlIHJlY2VpdmluZyBtYXRyaXhcbiAqIEBwYXJhbSBhIHtudW1iZXJbXX0gKG1hdCA1eDQpIHRoZSBmaXJzdCBvcGVyYW5kXG4gKiBAcGFyYW0gYiB7bnVtYmVyW119IChtYXQgNXg0KSB0aGUgc2Vjb25kIG9wZXJhbmRcbiAqIEByZXR1cm5zIG91dCB7bnVtYmVyW119IChtYXQgNXg0KVxuICovXG5Db2xvck1hdHJpeEZpbHRlci5wcm90b3R5cGUuX211bHRpcGx5ID0gZnVuY3Rpb24gKG91dCwgYSwgYilcbntcblxuICAgIC8vIFJlZCBDaGFubmVsXG4gICAgb3V0WzBdID0gKGFbMF0gKiBiWzBdKSArIChhWzFdICogYls1XSkgKyAoYVsyXSAqIGJbMTBdKSArIChhWzNdICogYlsxNV0pO1xuICAgIG91dFsxXSA9IChhWzBdICogYlsxXSkgKyAoYVsxXSAqIGJbNl0pICsgKGFbMl0gKiBiWzExXSkgKyAoYVszXSAqIGJbMTZdKTtcbiAgICBvdXRbMl0gPSAoYVswXSAqIGJbMl0pICsgKGFbMV0gKiBiWzddKSArIChhWzJdICogYlsxMl0pICsgKGFbM10gKiBiWzE3XSk7XG4gICAgb3V0WzNdID0gKGFbMF0gKiBiWzNdKSArIChhWzFdICogYls4XSkgKyAoYVsyXSAqIGJbMTNdKSArIChhWzNdICogYlsxOF0pO1xuICAgIG91dFs0XSA9IChhWzBdICogYls0XSkgKyAoYVsxXSAqIGJbOV0pICsgKGFbMl0gKiBiWzE0XSkgKyAoYVszXSAqIGJbMTldKTtcblxuICAgIC8vIEdyZWVuIENoYW5uZWxcbiAgICBvdXRbNV0gPSAoYVs1XSAqIGJbMF0pICsgKGFbNl0gKiBiWzVdKSArIChhWzddICogYlsxMF0pICsgKGFbOF0gKiBiWzE1XSk7XG4gICAgb3V0WzZdID0gKGFbNV0gKiBiWzFdKSArIChhWzZdICogYls2XSkgKyAoYVs3XSAqIGJbMTFdKSArIChhWzhdICogYlsxNl0pO1xuICAgIG91dFs3XSA9IChhWzVdICogYlsyXSkgKyAoYVs2XSAqIGJbN10pICsgKGFbN10gKiBiWzEyXSkgKyAoYVs4XSAqIGJbMTddKTtcbiAgICBvdXRbOF0gPSAoYVs1XSAqIGJbM10pICsgKGFbNl0gKiBiWzhdKSArIChhWzddICogYlsxM10pICsgKGFbOF0gKiBiWzE4XSk7XG4gICAgb3V0WzldID0gKGFbNV0gKiBiWzRdKSArIChhWzZdICogYls5XSkgKyAoYVs3XSAqIGJbMTRdKSArIChhWzhdICogYlsxOV0pO1xuXG4gICAgLy8gQmx1ZSBDaGFubmVsXG4gICAgb3V0WzEwXSA9IChhWzEwXSAqIGJbMF0pICsgKGFbMTFdICogYls1XSkgKyAoYVsxMl0gKiBiWzEwXSkgKyAoYVsxM10gKiBiWzE1XSk7XG4gICAgb3V0WzExXSA9IChhWzEwXSAqIGJbMV0pICsgKGFbMTFdICogYls2XSkgKyAoYVsxMl0gKiBiWzExXSkgKyAoYVsxM10gKiBiWzE2XSk7XG4gICAgb3V0WzEyXSA9IChhWzEwXSAqIGJbMl0pICsgKGFbMTFdICogYls3XSkgKyAoYVsxMl0gKiBiWzEyXSkgKyAoYVsxM10gKiBiWzE3XSk7XG4gICAgb3V0WzEzXSA9IChhWzEwXSAqIGJbM10pICsgKGFbMTFdICogYls4XSkgKyAoYVsxMl0gKiBiWzEzXSkgKyAoYVsxM10gKiBiWzE4XSk7XG4gICAgb3V0WzE0XSA9IChhWzEwXSAqIGJbNF0pICsgKGFbMTFdICogYls5XSkgKyAoYVsxMl0gKiBiWzE0XSkgKyAoYVsxM10gKiBiWzE5XSk7XG5cbiAgICAvLyBBbHBoYSBDaGFubmVsXG4gICAgb3V0WzE1XSA9IChhWzE1XSAqIGJbMF0pICsgKGFbMTZdICogYls1XSkgKyAoYVsxN10gKiBiWzEwXSkgKyAoYVsxOF0gKiBiWzE1XSk7XG4gICAgb3V0WzE2XSA9IChhWzE1XSAqIGJbMV0pICsgKGFbMTZdICogYls2XSkgKyAoYVsxN10gKiBiWzExXSkgKyAoYVsxOF0gKiBiWzE2XSk7XG4gICAgb3V0WzE3XSA9IChhWzE1XSAqIGJbMl0pICsgKGFbMTZdICogYls3XSkgKyAoYVsxN10gKiBiWzEyXSkgKyAoYVsxOF0gKiBiWzE3XSk7XG4gICAgb3V0WzE4XSA9IChhWzE1XSAqIGJbM10pICsgKGFbMTZdICogYls4XSkgKyAoYVsxN10gKiBiWzEzXSkgKyAoYVsxOF0gKiBiWzE4XSk7XG4gICAgb3V0WzE5XSA9IChhWzE1XSAqIGJbNF0pICsgKGFbMTZdICogYls5XSkgKyAoYVsxN10gKiBiWzE0XSkgKyAoYVsxOF0gKiBiWzE5XSk7XG5cbiAgICByZXR1cm4gb3V0O1xufTtcblxuLyoqXG4gKiBDcmVhdGUgYSBGbG9hdDMyIEFycmF5IGFuZCBub3JtYWxpemUgdGhlIG9mZnNldCBjb21wb25lbnQgdG8gMC0xXG4gKlxuICogQHBhcmFtIG1hdHJpeCB7bnVtYmVyW119IChtYXQgNXg0KVxuICogQHJldHVybiBtIHtudW1iZXJbXX0gKG1hdCA1eDQpIHdpdGggYWxsIHZhbHVlcyBiZXR3ZWVuIDAtMVxuICovXG5Db2xvck1hdHJpeEZpbHRlci5wcm90b3R5cGUuX2NvbG9yTWF0cml4ID0gZnVuY3Rpb24gKG1hdHJpeClcbntcbiAgICAvLyBDcmVhdGUgYSBGbG9hdDMyIEFycmF5IGFuZCBub3JtYWxpemUgdGhlIG9mZnNldCBjb21wb25lbnQgdG8gMC0xXG4gICAgdmFyIG0gPSBuZXcgRmxvYXQzMkFycmF5KG1hdHJpeCk7XG4gICAgbVs0XSAvPSAyNTU7XG4gICAgbVs5XSAvPSAyNTU7XG4gICAgbVsxNF0gLz0gMjU1O1xuICAgIG1bMTldIC89IDI1NTtcblxuICAgIHJldHVybiBtO1xufTtcblxuLyoqXG4gKiBBZGp1c3RzIGJyaWdodG5lc3NcbiAqXG4gKiBAcGFyYW0gYiB7bnVtYmVyfSB2YWx1ZSBvZiB0aGUgYnJpZ3RobmVzcyAoMCBpcyBibGFjaylcbiAqIEBwYXJhbSBtdWx0aXBseSB7Ym9vbGVhbn0gcmVmZXIgdG8gLl9sb2FkTWF0cml4KCkgbWV0aG9kXG4gKi9cbkNvbG9yTWF0cml4RmlsdGVyLnByb3RvdHlwZS5icmlnaHRuZXNzID0gZnVuY3Rpb24gKGIsIG11bHRpcGx5KVxue1xuICAgIHZhciBtYXRyaXggPSBbXG4gICAgICAgIGIsIDAsIDAsIDAsIDAsXG4gICAgICAgIDAsIGIsIDAsIDAsIDAsXG4gICAgICAgIDAsIDAsIGIsIDAsIDAsXG4gICAgICAgIDAsIDAsIDAsIDEsIDBcbiAgICBdO1xuXG4gICAgdGhpcy5fbG9hZE1hdHJpeChtYXRyaXgsIG11bHRpcGx5KTtcbn07XG5cbi8qKlxuICogU2V0IHRoZSBtYXRyaWNlcyBpbiBncmV5IHNjYWxlc1xuICpcbiAqIEBwYXJhbSBzY2FsZSB7bnVtYmVyfSB2YWx1ZSBvZiB0aGUgZ3JleSAoMCBpcyBibGFjaylcbiAqIEBwYXJhbSBtdWx0aXBseSB7Ym9vbGVhbn0gcmVmZXIgdG8gLl9sb2FkTWF0cml4KCkgbWV0aG9kXG4gKi9cbkNvbG9yTWF0cml4RmlsdGVyLnByb3RvdHlwZS5ncmV5c2NhbGUgPSBmdW5jdGlvbiAoc2NhbGUsIG11bHRpcGx5KVxue1xuICAgIHZhciBtYXRyaXggPSBbXG4gICAgICAgIHNjYWxlLCBzY2FsZSwgc2NhbGUsIDAsIDAsXG4gICAgICAgIHNjYWxlLCBzY2FsZSwgc2NhbGUsIDAsIDAsXG4gICAgICAgIHNjYWxlLCBzY2FsZSwgc2NhbGUsIDAsIDAsXG4gICAgICAgIDAsIDAsIDAsIDEsIDBcbiAgICBdO1xuXG4gICAgdGhpcy5fbG9hZE1hdHJpeChtYXRyaXgsIG11bHRpcGx5KTtcbn07XG4vL0FtZXJpY2FuaXplZCBhbGlhc1xuQ29sb3JNYXRyaXhGaWx0ZXIucHJvdG90eXBlLmdyYXlzY2FsZSA9IENvbG9yTWF0cml4RmlsdGVyLnByb3RvdHlwZS5ncmV5c2NhbGU7XG5cbi8qKlxuICogU2V0IHRoZSBibGFjayBhbmQgd2hpdGUgbWF0cmljZVxuICogTXVsdGlwbHkgdGhlIGN1cnJlbnQgbWF0cml4XG4gKlxuICogQHBhcmFtIG11bHRpcGx5IHtib29sZWFufSByZWZlciB0byAuX2xvYWRNYXRyaXgoKSBtZXRob2RcbiAqL1xuQ29sb3JNYXRyaXhGaWx0ZXIucHJvdG90eXBlLmJsYWNrQW5kV2hpdGUgPSBmdW5jdGlvbiAobXVsdGlwbHkpXG57XG4gICAgdmFyIG1hdHJpeCA9IFtcbiAgICAgICAgMC4zLCAwLjYsIDAuMSwgMCwgMCxcbiAgICAgICAgMC4zLCAwLjYsIDAuMSwgMCwgMCxcbiAgICAgICAgMC4zLCAwLjYsIDAuMSwgMCwgMCxcbiAgICAgICAgMCwgMCwgMCwgMSwgMFxuICAgIF07XG5cbiAgICB0aGlzLl9sb2FkTWF0cml4KG1hdHJpeCwgbXVsdGlwbHkpO1xufTtcblxuLyoqXG4gKiBTZXQgdGhlIGh1ZSBwcm9wZXJ0eSBvZiB0aGUgY29sb3JcbiAqXG4gKiBAcGFyYW0gcm90YXRpb24ge251bWJlcn0gaW4gZGVncmVlc1xuICogQHBhcmFtIG11bHRpcGx5IHtib29sZWFufSByZWZlciB0byAuX2xvYWRNYXRyaXgoKSBtZXRob2RcbiAqL1xuQ29sb3JNYXRyaXhGaWx0ZXIucHJvdG90eXBlLmh1ZSA9IGZ1bmN0aW9uIChyb3RhdGlvbiwgbXVsdGlwbHkpXG57XG4gICAgcm90YXRpb24gPSAocm90YXRpb24gfHwgMCkgLyAxODAgKiBNYXRoLlBJO1xuICAgIHZhciBjb3MgPSBNYXRoLmNvcyhyb3RhdGlvbiksXG4gICAgICAgIHNpbiA9IE1hdGguc2luKHJvdGF0aW9uKTtcblxuICAgIC8vIGx1bWluYW5jZVJlZCwgbHVtaW5hbmNlR3JlZW4sIGx1bWluYW5jZUJsdWVcbiAgICB2YXIgbHVtUiA9IDAuMjEzLCAvLyBvciAwLjMwODZcbiAgICAgICAgbHVtRyA9IDAuNzE1LCAvLyBvciAwLjYwOTRcbiAgICAgICAgbHVtQiA9IDAuMDcyOyAvLyBvciAwLjA4MjBcblxuICAgIHZhciBtYXRyaXggPSBbXG4gICAgICAgIGx1bVIgKyBjb3MgKiAoMSAtIGx1bVIpICsgc2luICogKC1sdW1SKSwgbHVtRyArIGNvcyAqICgtbHVtRykgKyBzaW4gKiAoLWx1bUcpLCBsdW1CICsgY29zICogKC1sdW1CKSArIHNpbiAqICgxIC0gbHVtQiksIDAsIDAsXG4gICAgICAgIGx1bVIgKyBjb3MgKiAoLWx1bVIpICsgc2luICogKDAuMTQzKSwgbHVtRyArIGNvcyAqICgxIC0gbHVtRykgKyBzaW4gKiAoMC4xNDApLCBsdW1CICsgY29zICogKC1sdW1CKSArIHNpbiAqICgtMC4yODMpLCAwLCAwLFxuICAgICAgICBsdW1SICsgY29zICogKC1sdW1SKSArIHNpbiAqICgtKDEgLSBsdW1SKSksIGx1bUcgKyBjb3MgKiAoLWx1bUcpICsgc2luICogKGx1bUcpLCBsdW1CICsgY29zICogKDEgLSBsdW1CKSArIHNpbiAqIChsdW1CKSwgMCwgMCxcbiAgICAgICAgMCwgMCwgMCwgMSwgMFxuICAgIF07XG5cbiAgICB0aGlzLl9sb2FkTWF0cml4KG1hdHJpeCwgbXVsdGlwbHkpO1xufTtcblxuXG4vKipcbiAqIFNldCB0aGUgY29udHJhc3QgbWF0cml4LCBpbmNyZWFzZSB0aGUgc2VwYXJhdGlvbiBiZXR3ZWVuIGRhcmsgYW5kIGJyaWdodFxuICogSW5jcmVhc2UgY29udHJhc3QgOiBzaGFkb3dzIGRhcmtlciBhbmQgaGlnaGxpZ2h0cyBicmlnaHRlclxuICogRGVjcmVhc2UgY29udHJhc3QgOiBicmluZyB0aGUgc2hhZG93cyB1cCBhbmQgdGhlIGhpZ2hsaWdodHMgZG93blxuICpcbiAqIEBwYXJhbSBhbW91bnQge251bWJlcn0gdmFsdWUgb2YgdGhlIGNvbnRyYXN0XG4gKiBAcGFyYW0gbXVsdGlwbHkge2Jvb2xlYW59IHJlZmVyIHRvIC5fbG9hZE1hdHJpeCgpIG1ldGhvZFxuICovXG5Db2xvck1hdHJpeEZpbHRlci5wcm90b3R5cGUuY29udHJhc3QgPSBmdW5jdGlvbiAoYW1vdW50LCBtdWx0aXBseSlcbntcbiAgICB2YXIgdiA9IChhbW91bnQgfHwgMCkgKyAxO1xuICAgIHZhciBvID0gLTEyOCAqICh2IC0gMSk7XG5cbiAgICB2YXIgbWF0cml4ID0gW1xuICAgICAgICB2LCAwLCAwLCAwLCBvLFxuICAgICAgICAwLCB2LCAwLCAwLCBvLFxuICAgICAgICAwLCAwLCB2LCAwLCBvLFxuICAgICAgICAwLCAwLCAwLCAxLCAwXG4gICAgXTtcblxuICAgIHRoaXMuX2xvYWRNYXRyaXgobWF0cml4LCBtdWx0aXBseSk7XG59O1xuXG4vKipcbiAqIFNldCB0aGUgc2F0dXJhdGlvbiBtYXRyaXgsIGluY3JlYXNlIHRoZSBzZXBhcmF0aW9uIGJldHdlZW4gY29sb3JzXG4gKiBJbmNyZWFzZSBzYXR1cmF0aW9uIDogaW5jcmVhc2UgY29udHJhc3QsIGJyaWdodG5lc3MsIGFuZCBzaGFycG5lc3NcbiAqXG4gKiBAcGFyYW0gYW1vdW50IHtudW1iZXJ9XG4gKiBAcGFyYW0gbXVsdGlwbHkge2Jvb2xlYW59IHJlZmVyIHRvIC5fbG9hZE1hdHJpeCgpIG1ldGhvZFxuICovXG5Db2xvck1hdHJpeEZpbHRlci5wcm90b3R5cGUuc2F0dXJhdGUgPSBmdW5jdGlvbiAoYW1vdW50LCBtdWx0aXBseSlcbntcbiAgICB2YXIgeCA9IChhbW91bnQgfHwgMCkgKiAyIC8gMyArIDE7XG4gICAgdmFyIHkgPSAoKHggLSAxKSAqIC0wLjUpO1xuXG4gICAgdmFyIG1hdHJpeCA9IFtcbiAgICAgICAgeCwgeSwgeSwgMCwgMCxcbiAgICAgICAgeSwgeCwgeSwgMCwgMCxcbiAgICAgICAgeSwgeSwgeCwgMCwgMCxcbiAgICAgICAgMCwgMCwgMCwgMSwgMFxuICAgIF07XG5cbiAgICB0aGlzLl9sb2FkTWF0cml4KG1hdHJpeCwgbXVsdGlwbHkpO1xufTtcblxuLyoqXG4gKiBEZXNhdHVyYXRlIGltYWdlIChyZW1vdmUgY29sb3IpXG4gKlxuICogQ2FsbCB0aGUgc2F0dXJhdGUgZnVuY3Rpb25cbiAqXG4gKiBAcGFyYW0gbXVsdGlwbHkge2Jvb2xlYW59IHJlZmVyIHRvIC5fbG9hZE1hdHJpeCgpIG1ldGhvZFxuICovXG5Db2xvck1hdHJpeEZpbHRlci5wcm90b3R5cGUuZGVzYXR1cmF0ZSA9IGZ1bmN0aW9uIChtdWx0aXBseSkgLy8ganNoaW50IHVudXNlZDpmYWxzZVxue1xuICAgIHRoaXMuc2F0dXJhdGUoLTEpO1xufTtcblxuLyoqXG4gKiBOZWdhdGl2ZSBpbWFnZSAoaW52ZXJzZSBvZiBjbGFzc2ljIHJnYiBtYXRyaXgpXG4gKlxuICogQHBhcmFtIG11bHRpcGx5IHtib29sZWFufSByZWZlciB0byAuX2xvYWRNYXRyaXgoKSBtZXRob2RcbiAqL1xuQ29sb3JNYXRyaXhGaWx0ZXIucHJvdG90eXBlLm5lZ2F0aXZlID0gZnVuY3Rpb24gKG11bHRpcGx5KVxue1xuICAgIHZhciBtYXRyaXggPSBbXG4gICAgICAgIDAsIDEsIDEsIDAsIDAsXG4gICAgICAgIDEsIDAsIDEsIDAsIDAsXG4gICAgICAgIDEsIDEsIDAsIDAsIDAsXG4gICAgICAgIDAsIDAsIDAsIDEsIDBcbiAgICBdO1xuXG4gICAgdGhpcy5fbG9hZE1hdHJpeChtYXRyaXgsIG11bHRpcGx5KTtcbn07XG5cbi8qKlxuICogU2VwaWEgaW1hZ2VcbiAqXG4gKiBAcGFyYW0gbXVsdGlwbHkge2Jvb2xlYW59IHJlZmVyIHRvIC5fbG9hZE1hdHJpeCgpIG1ldGhvZFxuICovXG5Db2xvck1hdHJpeEZpbHRlci5wcm90b3R5cGUuc2VwaWEgPSBmdW5jdGlvbiAobXVsdGlwbHkpXG57XG4gICAgdmFyIG1hdHJpeCA9IFtcbiAgICAgICAgMC4zOTMsIDAuNzY4OTk5OSwgMC4xODg5OTk5OSwgMCwgMCxcbiAgICAgICAgMC4zNDksIDAuNjg1OTk5OSwgMC4xNjc5OTk5OSwgMCwgMCxcbiAgICAgICAgMC4yNzIsIDAuNTMzOTk5OSwgMC4xMzA5OTk5OSwgMCwgMCxcbiAgICAgICAgMCwgMCwgMCwgMSwgMFxuICAgIF07XG5cbiAgICB0aGlzLl9sb2FkTWF0cml4KG1hdHJpeCwgbXVsdGlwbHkpO1xufTtcblxuLyoqXG4gKiBDb2xvciBtb3Rpb24gcGljdHVyZSBwcm9jZXNzIGludmVudGVkIGluIDE5MTYgKHRoYW5rcyBEb21pbmljIFN6YWJsZXdza2kpXG4gKlxuICogQHBhcmFtIG11bHRpcGx5IHtib29sZWFufSByZWZlciB0byAuX2xvYWRNYXRyaXgoKSBtZXRob2RcbiAqL1xuQ29sb3JNYXRyaXhGaWx0ZXIucHJvdG90eXBlLnRlY2huaWNvbG9yID0gZnVuY3Rpb24gKG11bHRpcGx5KVxue1xuICAgIHZhciBtYXRyaXggPSBbXG4gICAgICAgIDEuOTEyNTI3Nzg5MTQ1NjA4MywgLTAuODU0NTM0NDk3Njk1MTY0NSwgLTAuMDkxNTU1MDg0ODI3NTU1ODUsIDAsIDExLjc5MzYwMzQzNDM3NzMzNyxcbiAgICAgICAgLTAuMzA4NzgzMzM4NTkyODA5NywgMS43NjU4OTA4NTU1NDU4NDI4LCAtMC4xMDYwMTc0MzA3NDcyMjI0NSwgMCwgLTcwLjM1MjA1MTYxNDYxMzk4LFxuICAgICAgICAtMC4yMzExMDMzNzc1NDg2MTYsIC0wLjc1MDE4OTkxOTc0NDAyMTIsIDEuODQ3NTk3ODE2MTA4MTg5LCAwLCAzMC45NTA5NDA4Njk0OTExMzgsXG4gICAgICAgIDAsIDAsIDAsIDEsIDBcbiAgICBdO1xuXG4gICAgdGhpcy5fbG9hZE1hdHJpeChtYXRyaXgsIG11bHRpcGx5KTtcbn07XG5cbi8qKlxuICogUG9sYXJvaWQgZmlsdGVyXG4gKlxuICogQHBhcmFtIG11bHRpcGx5IHtib29sZWFufSByZWZlciB0byAuX2xvYWRNYXRyaXgoKSBtZXRob2RcbiAqL1xuQ29sb3JNYXRyaXhGaWx0ZXIucHJvdG90eXBlLnBvbGFyb2lkID0gZnVuY3Rpb24gKG11bHRpcGx5KVxue1xuICAgIHZhciBtYXRyaXggPSBbXG4gICAgICAgIDEuNDM4LCAtMC4wNjIsIC0wLjA2MiwgMCwgMCxcbiAgICAgICAgLTAuMTIyLCAxLjM3OCwgLTAuMTIyLCAwLCAwLFxuICAgICAgICAtMC4wMTYsIC0wLjAxNiwgMS40ODMsIDAsIDAsXG4gICAgICAgIDAsIDAsIDAsIDEsIDBcbiAgICBdO1xuXG4gICAgdGhpcy5fbG9hZE1hdHJpeChtYXRyaXgsIG11bHRpcGx5KTtcbn07XG5cbi8qKlxuICogRmlsdGVyIHdobyB0cmFuc2Zvcm1zIDogUmVkIC0+IEJsdWUgYW5kIEJsdWUgLT4gUmVkXG4gKlxuICogQHBhcmFtIG11bHRpcGx5IHtib29sZWFufSByZWZlciB0byAuX2xvYWRNYXRyaXgoKSBtZXRob2RcbiAqL1xuQ29sb3JNYXRyaXhGaWx0ZXIucHJvdG90eXBlLnRvQkdSID0gZnVuY3Rpb24gKG11bHRpcGx5KVxue1xuICAgIHZhciBtYXRyaXggPSBbXG4gICAgICAgIDAsIDAsIDEsIDAsIDAsXG4gICAgICAgIDAsIDEsIDAsIDAsIDAsXG4gICAgICAgIDEsIDAsIDAsIDAsIDAsXG4gICAgICAgIDAsIDAsIDAsIDEsIDBcbiAgICBdO1xuXG4gICAgdGhpcy5fbG9hZE1hdHJpeChtYXRyaXgsIG11bHRpcGx5KTtcbn07XG5cbi8qKlxuICogQ29sb3IgcmV2ZXJzYWwgZmlsbSBpbnRyb2R1Y2VkIGJ5IEVhc3RtYW4gS29kYWsgaW4gMTkzNS4gKHRoYW5rcyBEb21pbmljIFN6YWJsZXdza2kpXG4gKlxuICogQHBhcmFtIG11bHRpcGx5IHtib29sZWFufSByZWZlciB0byAuX2xvYWRNYXRyaXgoKSBtZXRob2RcbiAqL1xuQ29sb3JNYXRyaXhGaWx0ZXIucHJvdG90eXBlLmtvZGFjaHJvbWUgPSBmdW5jdGlvbiAobXVsdGlwbHkpXG57XG4gICAgdmFyIG1hdHJpeCA9IFtcbiAgICAgICAgMS4xMjg1NTgyMzk2NTkzNTI1LCAtMC4zOTY3MzgyMjgzNjAxMzQ4LCAtMC4wMzk5MjU1OTE3MjkyMTc5MywgMCwgNjMuNzI5NTg3NjIxOTY1MDIsXG4gICAgICAgIC0wLjE2NDA0MzM5OTYyMjQ0NjE2LCAxLjA4MzUyNTE1NjYyOTEzMDQsIC0wLjA1NDk4ODA1MTE1NjMzMTMyLCAwLCAyNC43MzI0MDc4OTY3MDYyMDMsXG4gICAgICAgIC0wLjE2Nzg2MDEwNzA2MTU1NzYzLCAtMC41NjAzNDE2Mjc3Njk1MjQ4LCAxLjYwMTQ4NTA3NjE5NjQ5NDMsIDAsIDM1LjYyOTgyODA3NDYwOTQ2LFxuICAgICAgICAwLCAwLCAwLCAxLCAwXG4gICAgXTtcblxuICAgIHRoaXMuX2xvYWRNYXRyaXgobWF0cml4LCBtdWx0aXBseSk7XG59O1xuXG4vKipcbiAqIEJyb3duIGRlbGljaW91cyBicm93bmkgZmlsdGVyICh0aGFua3MgRG9taW5pYyBTemFibGV3c2tpKVxuICpcbiAqIEBwYXJhbSBtdWx0aXBseSB7Ym9vbGVhbn0gcmVmZXIgdG8gLl9sb2FkTWF0cml4KCkgbWV0aG9kXG4gKi9cbkNvbG9yTWF0cml4RmlsdGVyLnByb3RvdHlwZS5icm93bmkgPSBmdW5jdGlvbiAobXVsdGlwbHkpXG57XG4gICAgdmFyIG1hdHJpeCA9IFtcbiAgICAgICAgMC41OTk3MDIzNDk4MTU5NzE1LCAwLjM0NTUzMjQzMDQ4MzkxMjYzLCAtMC4yNzA4Mjk4Njc0NTM4MDQyLCAwLCA0Ny40MzE5Mjg1NTYwMDg3MyxcbiAgICAgICAgLTAuMDM3NzAzMjQ5ODM3NzgzMTU3LCAwLjg2MDk1Nzc1ODc5OTI2NDEsIDAuMTUwNTk1NTIzODg0NTk5MTMsIDAsIC0zNi45Njg0MTQ5ODMxOTEyNyxcbiAgICAgICAgMC4yNDExMzYzNTEyODE1MzMzNSwgLTAuMDc0NDEwMzc5MDg0MjI0OTIsIDAuNDQ5NzIxODIwNjQ4NzcxNTMsIDAsIC03LjU2MjA3NTI3NzU5MTI4MyxcbiAgICAgICAgMCwgMCwgMCwgMSwgMFxuICAgIF07XG5cbiAgICB0aGlzLl9sb2FkTWF0cml4KG1hdHJpeCwgbXVsdGlwbHkpO1xufTtcblxuLypcbiAqIFZpbnRhZ2UgZmlsdGVyICh0aGFua3MgRG9taW5pYyBTemFibGV3c2tpKVxuICpcbiAqIEBwYXJhbSBtdWx0aXBseSB7Ym9vbGVhbn0gcmVmZXIgdG8gLl9sb2FkTWF0cml4KCkgbWV0aG9kXG4gKi9cbkNvbG9yTWF0cml4RmlsdGVyLnByb3RvdHlwZS52aW50YWdlID0gZnVuY3Rpb24gKG11bHRpcGx5KVxue1xuICAgIHZhciBtYXRyaXggPSBbXG4gICAgICAgIDAuNjI3OTM0NTYzNTYwNTk5NCwgMC4zMjAyMTgzNDIwODE5MzY3LCAtMC4wMzk2NTQwODIxMTMxMjQ1MywgMCwgOS42NTEyODU4MzUyOTQxMjMsXG4gICAgICAgIDAuMDI1NzgzOTc3MDQ4MDg4NjgsIDAuNjQ0MTE4ODY0NDM3NDc3MSwgMC4wMzI1OTEyNzYxNjE0OTI5NCwgMCwgNy40NjI4MjkxNzY0NzA1OTEsXG4gICAgICAgIDAuMDQ2NjA1NTU1Njc4MjcxOSwgLTAuMDg1MTIzMjk4NzI0Nzg5MSwgMC41MjQxNjQ4MDE4NzAwNDY1LCAwLCA1LjE1OTE5MDU4ODIzNTI5NixcbiAgICAgICAgMCwgMCwgMCwgMSwgMFxuICAgIF07XG5cbiAgICB0aGlzLl9sb2FkTWF0cml4KG1hdHJpeCwgbXVsdGlwbHkpO1xufTtcblxuLypcbiAqIFdlIGRvbid0IGtub3cgZXhhY3RseSB3aGF0IGl0IGRvZXMsIGtpbmQgb2YgZ3JhZGllbnQgbWFwLCBidXQgZnVubnkgdG8gcGxheSB3aXRoIVxuICpcbiAqIEBwYXJhbSBkZXNhdHVyYXRpb24ge251bWJlcn1cbiAqIEBwYXJhbSB0b25lZCB7bnVtYmVyfVxuICogQHBhcmFtIGxpZ2h0Q29sb3Ige3N0cmluZ30gKGV4YW1wbGUgOiBcIjB4RkZFNTgwXCIpXG4gKiBAcGFyYW0gZGFya0NvbG9yIHtzdHJpbmd9ICAoZXhhbXBsZSA6IFwiMHhGRkU1ODBcIilcbiAqXG4gKiBAcGFyYW0gbXVsdGlwbHkge2Jvb2xlYW59IHJlZmVyIHRvIC5fbG9hZE1hdHJpeCgpIG1ldGhvZFxuICovXG5Db2xvck1hdHJpeEZpbHRlci5wcm90b3R5cGUuY29sb3JUb25lID0gZnVuY3Rpb24gKGRlc2F0dXJhdGlvbiwgdG9uZWQsIGxpZ2h0Q29sb3IsIGRhcmtDb2xvciwgbXVsdGlwbHkpXG57XG4gICAgZGVzYXR1cmF0aW9uID0gZGVzYXR1cmF0aW9uIHx8IDAuMjtcbiAgICB0b25lZCA9IHRvbmVkIHx8IDAuMTU7XG4gICAgbGlnaHRDb2xvciA9IGxpZ2h0Q29sb3IgfHwgMHhGRkU1ODA7XG4gICAgZGFya0NvbG9yID0gZGFya0NvbG9yIHx8IDB4MzM4MDAwO1xuXG4gICAgdmFyIGxSID0gKChsaWdodENvbG9yID4+IDE2KSAmIDB4RkYpIC8gMjU1O1xuICAgIHZhciBsRyA9ICgobGlnaHRDb2xvciA+PiA4KSAmIDB4RkYpIC8gMjU1O1xuICAgIHZhciBsQiA9IChsaWdodENvbG9yICYgMHhGRikgLyAyNTU7XG5cbiAgICB2YXIgZFIgPSAoKGRhcmtDb2xvciA+PiAxNikgJiAweEZGKSAvIDI1NTtcbiAgICB2YXIgZEcgPSAoKGRhcmtDb2xvciA+PiA4KSAmIDB4RkYpIC8gMjU1O1xuICAgIHZhciBkQiA9IChkYXJrQ29sb3IgJiAweEZGKSAvIDI1NTtcblxuICAgIHZhciBtYXRyaXggPSBbXG4gICAgICAgIDAuMywgMC41OSwgMC4xMSwgMCwgMCxcbiAgICAgICAgbFIsIGxHLCBsQiwgZGVzYXR1cmF0aW9uLCAwLFxuICAgICAgICBkUiwgZEcsIGRCLCB0b25lZCwgMCxcbiAgICAgICAgbFIgLSBkUiwgbEcgLSBkRywgbEIgLSBkQiwgMCwgMFxuICAgIF07XG5cbiAgICB0aGlzLl9sb2FkTWF0cml4KG1hdHJpeCwgbXVsdGlwbHkpO1xufTtcblxuLypcbiAqIE5pZ2h0IGVmZmVjdFxuICpcbiAqIEBwYXJhbSBpbnRlbnNpdHkge251bWJlcn1cbiAqIEBwYXJhbSBtdWx0aXBseSB7Ym9vbGVhbn0gcmVmZXIgdG8gLl9sb2FkTWF0cml4KCkgbWV0aG9kXG4gKi9cbkNvbG9yTWF0cml4RmlsdGVyLnByb3RvdHlwZS5uaWdodCA9IGZ1bmN0aW9uIChpbnRlbnNpdHksIG11bHRpcGx5KVxue1xuICAgIGludGVuc2l0eSA9IGludGVuc2l0eSB8fCAwLjE7XG4gICAgdmFyIG1hdHJpeCA9IFtcbiAgICAgICAgaW50ZW5zaXR5ICogKCAtMi4wKSwgLWludGVuc2l0eSwgMCwgMCwgMCxcbiAgICAgICAgLWludGVuc2l0eSwgMCwgaW50ZW5zaXR5LCAwLCAwLFxuICAgICAgICAwLCBpbnRlbnNpdHksIGludGVuc2l0eSAqIDIuMCwgMCwgMCxcbiAgICAgICAgMCwgMCwgMCwgMSwgMFxuICAgIF07XG5cbiAgICB0aGlzLl9sb2FkTWF0cml4KG1hdHJpeCwgbXVsdGlwbHkpO1xufTtcblxuXG4vKlxuICogUHJlZGF0b3IgZWZmZWN0XG4gKlxuICogRXJhc2UgdGhlIGN1cnJlbnQgbWF0cml4IGJ5IHNldHRpbmcgYSBuZXcgaW5kZXBlbnQgb25lXG4gKlxuICogQHBhcmFtIGFtb3VudCB7bnVtYmVyfSBob3cgbXVjaCB0aGUgcHJlZGF0b3IgZmVlbHMgaGlzIGZ1dHVyZSB2aWN0aW1cbiAqIEBwYXJhbSBtdWx0aXBseSB7Ym9vbGVhbn0gcmVmZXIgdG8gLl9sb2FkTWF0cml4KCkgbWV0aG9kXG4gKi9cbkNvbG9yTWF0cml4RmlsdGVyLnByb3RvdHlwZS5wcmVkYXRvciA9IGZ1bmN0aW9uIChhbW91bnQsIG11bHRpcGx5KVxue1xuICAgIHZhciBtYXRyaXggPSBbXG4gICAgICAgIDExLjIyNDEzMDYzMDQ5MzE2NCAqIGFtb3VudCwgLTQuNzk0NDg2OTk5NTExNzE5ICogYW1vdW50LCAtMi44NzQ2MTE4NTQ1NTMyMjI3ICogYW1vdW50LCAwICogYW1vdW50LCAwLjQwMzQyNDM4MjIwOTc3NzgzICogYW1vdW50LFxuICAgICAgICAtMy42MzMwNjk3NTM2NDY4NTA2ICogYW1vdW50LCA5LjE5MzE1NzE5NjA0NDkyMiAqIGFtb3VudCwgLTIuOTUxODEwODM2NzkxOTkyICogYW1vdW50LCAwICogYW1vdW50LCAtMS4zMTYxMzUwNDg4NjYyNzIgKiBhbW91bnQsXG4gICAgICAgIC0zLjIxODQxOTc5MDI2Nzk0NDMgKiBhbW91bnQsIC00LjIzNzUwMzA1MTc1NzgxMjUgKiBhbW91bnQsIDcuNDc2NDQ4MDU5MDgyMDMxICogYW1vdW50LCAwICogYW1vdW50LCAwLjgwNDQ0NTkyMjM3NDcyNTMgKiBhbW91bnQsXG4gICAgICAgIDAsIDAsIDAsIDEsIDBcbiAgICBdO1xuXG4gICAgdGhpcy5fbG9hZE1hdHJpeChtYXRyaXgsIG11bHRpcGx5KTtcbn07XG5cbi8qXG4gKiBMU0QgZWZmZWN0XG4gKlxuICogTXVsdGlwbHkgdGhlIGN1cnJlbnQgbWF0cml4XG4gKlxuICogQHBhcmFtIGFtb3VudCB7bnVtYmVyfSBIb3cgY3JhenkgaXMgeW91ciBlZmZlY3RcbiAqIEBwYXJhbSBtdWx0aXBseSB7Ym9vbGVhbn0gcmVmZXIgdG8gLl9sb2FkTWF0cml4KCkgbWV0aG9kXG4gKi9cbkNvbG9yTWF0cml4RmlsdGVyLnByb3RvdHlwZS5sc2QgPSBmdW5jdGlvbiAobXVsdGlwbHkpXG57XG4gICAgdmFyIG1hdHJpeCA9IFtcbiAgICAgICAgMiwgLTAuNCwgMC41LCAwLCAwLFxuICAgICAgICAtMC41LCAyLCAtMC40LCAwLCAwLFxuICAgICAgICAtMC40LCAtMC41LCAzLCAwLCAwLFxuICAgICAgICAwLCAwLCAwLCAxLCAwXG4gICAgXTtcblxuICAgIHRoaXMuX2xvYWRNYXRyaXgobWF0cml4LCBtdWx0aXBseSk7XG59O1xuXG4vKlxuICogRXJhc2UgdGhlIGN1cnJlbnQgbWF0cml4IGJ5IHNldHRpbmcgdGhlIGRlZmF1bHQgb25lXG4gKlxuICovXG5Db2xvck1hdHJpeEZpbHRlci5wcm90b3R5cGUucmVzZXQgPSBmdW5jdGlvbiAoKVxue1xuICAgIHZhciBtYXRyaXggPSBbXG4gICAgICAgIDEsIDAsIDAsIDAsIDAsXG4gICAgICAgIDAsIDEsIDAsIDAsIDAsXG4gICAgICAgIDAsIDAsIDEsIDAsIDAsXG4gICAgICAgIDAsIDAsIDAsIDEsIDBcbiAgICBdO1xuXG4gICAgdGhpcy5fbG9hZE1hdHJpeChtYXRyaXgsIGZhbHNlKTtcbn07XG5cblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoQ29sb3JNYXRyaXhGaWx0ZXIucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgbWF0cml4IG9mIHRoZSBjb2xvciBtYXRyaXggZmlsdGVyXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJbXX1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLkNvbG9yTWF0cml4RmlsdGVyI1xuICAgICAqIEBkZWZhdWx0IFsxLCAwLCAwLCAwLCAwLCAwLCAxLCAwLCAwLCAwLCAwLCAwLCAxLCAwLCAwLCAwLCAwLCAwLCAxLCAwXVxuICAgICAqL1xuICAgIG1hdHJpeDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVuaWZvcm1zLm0udmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLm0udmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi8uLi9jb3JlJyk7XG4vLyBAc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9zdWJzdGFjay9icmZzL2lzc3Vlcy8yNVxuXG5cbi8qKlxuICogVGhpcyBsb3dlcnMgdGhlIGNvbG9yIGRlcHRoIG9mIHlvdXIgaW1hZ2UgYnkgdGhlIGdpdmVuIGFtb3VudCwgcHJvZHVjaW5nIGFuIGltYWdlIHdpdGggYSBzbWFsbGVyIHBhbGV0dGUuXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLkFic3RyYWN0RmlsdGVyXG4gKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzXG4gKi9cbmZ1bmN0aW9uIENvbG9yU3RlcEZpbHRlcigpXG57XG4gICAgY29yZS5BYnN0cmFjdEZpbHRlci5jYWxsKHRoaXMsXG4gICAgICAgIC8vIHZlcnRleCBzaGFkZXJcbiAgICAgICAgbnVsbCxcbiAgICAgICAgLy8gZnJhZ21lbnQgc2hhZGVyXG4gICAgICAgIFwicHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XFxuXFxudmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7XFxuXFxudW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXI7XFxudW5pZm9ybSBmbG9hdCBzdGVwO1xcblxcbnZvaWQgbWFpbih2b2lkKVxcbntcXG4gICAgdmVjNCBjb2xvciA9IHRleHR1cmUyRCh1U2FtcGxlciwgdlRleHR1cmVDb29yZCk7XFxuXFxuICAgIGNvbG9yID0gZmxvb3IoY29sb3IgKiBzdGVwKSAvIHN0ZXA7XFxuXFxuICAgIGdsX0ZyYWdDb2xvciA9IGNvbG9yO1xcbn1cXG5cIixcbiAgICAgICAgLy8gY3VzdG9tIHVuaWZvcm1zXG4gICAgICAgIHtcbiAgICAgICAgICAgIHN0ZXA6IHsgdHlwZTogJzFmJywgdmFsdWU6IDUgfVxuICAgICAgICB9XG4gICAgKTtcbn1cblxuQ29sb3JTdGVwRmlsdGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoY29yZS5BYnN0cmFjdEZpbHRlci5wcm90b3R5cGUpO1xuQ29sb3JTdGVwRmlsdGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IENvbG9yU3RlcEZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gQ29sb3JTdGVwRmlsdGVyO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhDb2xvclN0ZXBGaWx0ZXIucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogVGhlIG51bWJlciBvZiBzdGVwcyB0byByZWR1Y2UgdGhlIHBhbGV0dGUgYnkuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5Db2xvclN0ZXBGaWx0ZXIjXG4gICAgICovXG4gICAgc3RlcDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVuaWZvcm1zLnN0ZXAudmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLnN0ZXAudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi8uLi9jb3JlJyk7XG4vLyBAc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9zdWJzdGFjay9icmZzL2lzc3Vlcy8yNVxuXG5cbi8qKlxuICogVGhlIENvbnZvbHV0aW9uRmlsdGVyIGNsYXNzIGFwcGxpZXMgYSBtYXRyaXggY29udm9sdXRpb24gZmlsdGVyIGVmZmVjdC5cbiAqIEEgY29udm9sdXRpb24gY29tYmluZXMgcGl4ZWxzIGluIHRoZSBpbnB1dCBpbWFnZSB3aXRoIG5laWdoYm9yaW5nIHBpeGVscyB0byBwcm9kdWNlIGEgbmV3IGltYWdlLlxuICogQSB3aWRlIHZhcmlldHkgb2YgaW1hZ2UgZWZmZWN0cyBjYW4gYmUgYWNoaWV2ZWQgdGhyb3VnaCBjb252b2x1dGlvbnMsIGluY2x1ZGluZyBibHVycmluZywgZWRnZVxuICogZGV0ZWN0aW9uLCBzaGFycGVuaW5nLCBlbWJvc3NpbmcsIGFuZCBiZXZlbGluZy4gVGhlIG1hdHJpeCBzaG91bGQgYmUgc3BlY2lmaWVkIGFzIGEgOSBwb2ludCBBcnJheS5cbiAqIFNlZSBodHRwOi8vZG9jcy5naW1wLm9yZy9lbi9wbHVnLWluLWNvbnZtYXRyaXguaHRtbCBmb3IgbW9yZSBpbmZvLlxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5BYnN0cmFjdEZpbHRlclxuICogQG1lbWJlcm9mIFBJWEkuZmlsdGVyc1xuICogQHBhcmFtIG1hdHJpeCB7bnVtYmVyW119IEFuIGFycmF5IG9mIHZhbHVlcyB1c2VkIGZvciBtYXRyaXggdHJhbnNmb3JtYXRpb24uIFNwZWNpZmllZCBhcyBhIDkgcG9pbnQgQXJyYXkuXG4gKiBAcGFyYW0gd2lkdGgge251bWJlcn0gV2lkdGggb2YgdGhlIG9iamVjdCB5b3UgYXJlIHRyYW5zZm9ybWluZ1xuICogQHBhcmFtIGhlaWdodCB7bnVtYmVyfSBIZWlnaHQgb2YgdGhlIG9iamVjdCB5b3UgYXJlIHRyYW5zZm9ybWluZ1xuICovXG5mdW5jdGlvbiBDb252b2x1dGlvbkZpbHRlcihtYXRyaXgsIHdpZHRoLCBoZWlnaHQpXG57XG4gICAgY29yZS5BYnN0cmFjdEZpbHRlci5jYWxsKHRoaXMsXG4gICAgICAgIC8vIHZlcnRleCBzaGFkZXJcbiAgICAgICAgbnVsbCxcbiAgICAgICAgLy8gZnJhZ21lbnQgc2hhZGVyXG4gICAgICAgIFwicHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XFxuXFxudmFyeWluZyBtZWRpdW1wIHZlYzIgdlRleHR1cmVDb29yZDtcXG5cXG51bmlmb3JtIHNhbXBsZXIyRCB1U2FtcGxlcjtcXG51bmlmb3JtIHZlYzIgdGV4ZWxTaXplO1xcbnVuaWZvcm0gZmxvYXQgbWF0cml4WzldO1xcblxcbnZvaWQgbWFpbih2b2lkKVxcbntcXG4gICB2ZWM0IGMxMSA9IHRleHR1cmUyRCh1U2FtcGxlciwgdlRleHR1cmVDb29yZCAtIHRleGVsU2l6ZSk7IC8vIHRvcCBsZWZ0XFxuICAgdmVjNCBjMTIgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZlYzIodlRleHR1cmVDb29yZC54LCB2VGV4dHVyZUNvb3JkLnkgLSB0ZXhlbFNpemUueSkpOyAvLyB0b3AgY2VudGVyXFxuICAgdmVjNCBjMTMgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZlYzIodlRleHR1cmVDb29yZC54ICsgdGV4ZWxTaXplLngsIHZUZXh0dXJlQ29vcmQueSAtIHRleGVsU2l6ZS55KSk7IC8vIHRvcCByaWdodFxcblxcbiAgIHZlYzQgYzIxID0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2ZWMyKHZUZXh0dXJlQ29vcmQueCAtIHRleGVsU2l6ZS54LCB2VGV4dHVyZUNvb3JkLnkpKTsgLy8gbWlkIGxlZnRcXG4gICB2ZWM0IGMyMiA9IHRleHR1cmUyRCh1U2FtcGxlciwgdlRleHR1cmVDb29yZCk7IC8vIG1pZCBjZW50ZXJcXG4gICB2ZWM0IGMyMyA9IHRleHR1cmUyRCh1U2FtcGxlciwgdmVjMih2VGV4dHVyZUNvb3JkLnggKyB0ZXhlbFNpemUueCwgdlRleHR1cmVDb29yZC55KSk7IC8vIG1pZCByaWdodFxcblxcbiAgIHZlYzQgYzMxID0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2ZWMyKHZUZXh0dXJlQ29vcmQueCAtIHRleGVsU2l6ZS54LCB2VGV4dHVyZUNvb3JkLnkgKyB0ZXhlbFNpemUueSkpOyAvLyBib3R0b20gbGVmdFxcbiAgIHZlYzQgYzMyID0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2ZWMyKHZUZXh0dXJlQ29vcmQueCwgdlRleHR1cmVDb29yZC55ICsgdGV4ZWxTaXplLnkpKTsgLy8gYm90dG9tIGNlbnRlclxcbiAgIHZlYzQgYzMzID0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2VGV4dHVyZUNvb3JkICsgdGV4ZWxTaXplKTsgLy8gYm90dG9tIHJpZ2h0XFxuXFxuICAgZ2xfRnJhZ0NvbG9yID1cXG4gICAgICAgYzExICogbWF0cml4WzBdICsgYzEyICogbWF0cml4WzFdICsgYzEzICogbWF0cml4WzJdICtcXG4gICAgICAgYzIxICogbWF0cml4WzNdICsgYzIyICogbWF0cml4WzRdICsgYzIzICogbWF0cml4WzVdICtcXG4gICAgICAgYzMxICogbWF0cml4WzZdICsgYzMyICogbWF0cml4WzddICsgYzMzICogbWF0cml4WzhdO1xcblxcbiAgIGdsX0ZyYWdDb2xvci5hID0gYzIyLmE7XFxufVxcblwiLFxuICAgICAgICAvLyBjdXN0b20gdW5pZm9ybXNcbiAgICAgICAge1xuICAgICAgICAgICAgbWF0cml4OiAgICAgeyB0eXBlOiAnMWZ2JywgdmFsdWU6IG5ldyBGbG9hdDMyQXJyYXkobWF0cml4KSB9LFxuICAgICAgICAgICAgdGV4ZWxTaXplOiAgeyB0eXBlOiAndjInLCB2YWx1ZTogeyB4OiAxIC8gd2lkdGgsIHk6IDEgLyBoZWlnaHQgfSB9XG4gICAgICAgIH1cbiAgICApO1xufVxuXG5Db252b2x1dGlvbkZpbHRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuQWJzdHJhY3RGaWx0ZXIucHJvdG90eXBlKTtcbkNvbnZvbHV0aW9uRmlsdGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IENvbnZvbHV0aW9uRmlsdGVyO1xubW9kdWxlLmV4cG9ydHMgPSBDb252b2x1dGlvbkZpbHRlcjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoQ29udm9sdXRpb25GaWx0ZXIucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogQW4gYXJyYXkgb2YgdmFsdWVzIHVzZWQgZm9yIG1hdHJpeCB0cmFuc2Zvcm1hdGlvbi4gU3BlY2lmaWVkIGFzIGEgOSBwb2ludCBBcnJheS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcltdfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuQ29udm9sdXRpb25GaWx0ZXIjXG4gICAgICovXG4gICAgbWF0cml4OiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudW5pZm9ybXMubWF0cml4LnZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy5tYXRyaXgudmFsdWUgPSBuZXcgRmxvYXQzMkFycmF5KHZhbHVlKTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBXaWR0aCBvZiB0aGUgb2JqZWN0IHlvdSBhcmUgdHJhbnNmb3JtaW5nXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5Db252b2x1dGlvbkZpbHRlciNcbiAgICAgKi9cbiAgICB3aWR0aDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiAxL3RoaXMudW5pZm9ybXMudGV4ZWxTaXplLnZhbHVlLng7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLnRleGVsU2l6ZS52YWx1ZS54ID0gMS92YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBIZWlnaHQgb2YgdGhlIG9iamVjdCB5b3UgYXJlIHRyYW5zZm9ybWluZ1xuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuQ29udm9sdXRpb25GaWx0ZXIjXG4gICAgICovXG4gICAgaGVpZ2h0OiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIDEvdGhpcy51bmlmb3Jtcy50ZXhlbFNpemUudmFsdWUueTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudW5pZm9ybXMudGV4ZWxTaXplLnZhbHVlLnkgPSAxL3ZhbHVlO1xuICAgICAgICB9XG4gICAgfVxufSk7XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uLy4uL2NvcmUnKTtcbi8vIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL3N1YnN0YWNrL2JyZnMvaXNzdWVzLzI1XG5cblxuLyoqXG4gKiBBIENyb3NzIEhhdGNoIGVmZmVjdCBmaWx0ZXIuXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLkFic3RyYWN0RmlsdGVyXG4gKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzXG4gKi9cbmZ1bmN0aW9uIENyb3NzSGF0Y2hGaWx0ZXIoKVxue1xuICAgIGNvcmUuQWJzdHJhY3RGaWx0ZXIuY2FsbCh0aGlzLFxuICAgICAgICAvLyB2ZXJ0ZXggc2hhZGVyXG4gICAgICAgIG51bGwsXG4gICAgICAgIC8vIGZyYWdtZW50IHNoYWRlclxuICAgICAgICBcInByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xcblxcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xcblxcbnVuaWZvcm0gc2FtcGxlcjJEIHVTYW1wbGVyO1xcblxcbnZvaWQgbWFpbih2b2lkKVxcbntcXG4gICAgZmxvYXQgbHVtID0gbGVuZ3RoKHRleHR1cmUyRCh1U2FtcGxlciwgdlRleHR1cmVDb29yZC54eSkucmdiKTtcXG5cXG4gICAgZ2xfRnJhZ0NvbG9yID0gdmVjNCgxLjAsIDEuMCwgMS4wLCAxLjApO1xcblxcbiAgICBpZiAobHVtIDwgMS4wMClcXG4gICAge1xcbiAgICAgICAgaWYgKG1vZChnbF9GcmFnQ29vcmQueCArIGdsX0ZyYWdDb29yZC55LCAxMC4wKSA9PSAwLjApXFxuICAgICAgICB7XFxuICAgICAgICAgICAgZ2xfRnJhZ0NvbG9yID0gdmVjNCgwLjAsIDAuMCwgMC4wLCAxLjApO1xcbiAgICAgICAgfVxcbiAgICB9XFxuXFxuICAgIGlmIChsdW0gPCAwLjc1KVxcbiAgICB7XFxuICAgICAgICBpZiAobW9kKGdsX0ZyYWdDb29yZC54IC0gZ2xfRnJhZ0Nvb3JkLnksIDEwLjApID09IDAuMClcXG4gICAgICAgIHtcXG4gICAgICAgICAgICBnbF9GcmFnQ29sb3IgPSB2ZWM0KDAuMCwgMC4wLCAwLjAsIDEuMCk7XFxuICAgICAgICB9XFxuICAgIH1cXG5cXG4gICAgaWYgKGx1bSA8IDAuNTApXFxuICAgIHtcXG4gICAgICAgIGlmIChtb2QoZ2xfRnJhZ0Nvb3JkLnggKyBnbF9GcmFnQ29vcmQueSAtIDUuMCwgMTAuMCkgPT0gMC4wKVxcbiAgICAgICAge1xcbiAgICAgICAgICAgIGdsX0ZyYWdDb2xvciA9IHZlYzQoMC4wLCAwLjAsIDAuMCwgMS4wKTtcXG4gICAgICAgIH1cXG4gICAgfVxcblxcbiAgICBpZiAobHVtIDwgMC4zKVxcbiAgICB7XFxuICAgICAgICBpZiAobW9kKGdsX0ZyYWdDb29yZC54IC0gZ2xfRnJhZ0Nvb3JkLnkgLSA1LjAsIDEwLjApID09IDAuMClcXG4gICAgICAgIHtcXG4gICAgICAgICAgICBnbF9GcmFnQ29sb3IgPSB2ZWM0KDAuMCwgMC4wLCAwLjAsIDEuMCk7XFxuICAgICAgICB9XFxuICAgIH1cXG59XFxuXCJcbiAgICApO1xufVxuXG5Dcm9zc0hhdGNoRmlsdGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoY29yZS5BYnN0cmFjdEZpbHRlci5wcm90b3R5cGUpO1xuQ3Jvc3NIYXRjaEZpbHRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBDcm9zc0hhdGNoRmlsdGVyO1xubW9kdWxlLmV4cG9ydHMgPSBDcm9zc0hhdGNoRmlsdGVyO1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi8uLi9jb3JlJyk7XG4vLyBAc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9zdWJzdGFjay9icmZzL2lzc3Vlcy8yNVxuXG5cbi8qKlxuICogVGhlIERpc3BsYWNlbWVudEZpbHRlciBjbGFzcyB1c2VzIHRoZSBwaXhlbCB2YWx1ZXMgZnJvbSB0aGUgc3BlY2lmaWVkIHRleHR1cmUgKGNhbGxlZCB0aGUgZGlzcGxhY2VtZW50IG1hcCkgdG8gcGVyZm9ybSBhIGRpc3BsYWNlbWVudCBvZiBhbiBvYmplY3QuXG4gKiBZb3UgY2FuIHVzZSB0aGlzIGZpbHRlciB0byBhcHBseSBhbGwgbWFub3Igb2YgY3Jhenkgd2FycGluZyBlZmZlY3RzXG4gKiBDdXJyZW50bHkgdGhlIHIgcHJvcGVydHkgb2YgdGhlIHRleHR1cmUgaXMgdXNlZCB0byBvZmZzZXQgdGhlIHggYW5kIHRoZSBnIHByb3BlcnR5IG9mIHRoZSB0ZXh0dXJlIGlzIHVzZWQgdG8gb2Zmc2V0IHRoZSB5LlxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5BYnN0cmFjdEZpbHRlclxuICogQG1lbWJlcm9mIFBJWEkuZmlsdGVyc1xuICogQHBhcmFtIHNwcml0ZSB7UElYSS5TcHJpdGV9IHRoZSBzcHJpdGUgdXNlZCBmb3IgdGhlIGRpc3BsYWNlbWVudCBtYXAuIChtYWtlIHN1cmUgaXRzIGFkZGVkIHRvIHRoZSBzY2VuZSEpXG4gKi9cbmZ1bmN0aW9uIERpc3BsYWNlbWVudEZpbHRlcihzcHJpdGUsIHNjYWxlKVxue1xuICAgIHZhciBtYXNrTWF0cml4ID0gbmV3IGNvcmUuTWF0cml4KCk7XG4gICAgc3ByaXRlLnJlbmRlcmFibGUgPSBmYWxzZTtcblxuICAgIGNvcmUuQWJzdHJhY3RGaWx0ZXIuY2FsbCh0aGlzLFxuICAgICAgICAvLyB2ZXJ0ZXggc2hhZGVyXG4gICAgICAgIFwiYXR0cmlidXRlIHZlYzIgYVZlcnRleFBvc2l0aW9uO1xcbmF0dHJpYnV0ZSB2ZWMyIGFUZXh0dXJlQ29vcmQ7XFxuYXR0cmlidXRlIHZlYzQgYUNvbG9yO1xcblxcbnVuaWZvcm0gbWF0MyBwcm9qZWN0aW9uTWF0cml4O1xcbnVuaWZvcm0gbWF0MyBvdGhlck1hdHJpeDtcXG5cXG52YXJ5aW5nIHZlYzIgdk1hcENvb3JkO1xcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xcbnZhcnlpbmcgdmVjNCB2Q29sb3I7XFxuXFxudm9pZCBtYWluKHZvaWQpXFxue1xcbiAgIGdsX1Bvc2l0aW9uID0gdmVjNCgocHJvamVjdGlvbk1hdHJpeCAqIHZlYzMoYVZlcnRleFBvc2l0aW9uLCAxLjApKS54eSwgMC4wLCAxLjApO1xcbiAgIHZUZXh0dXJlQ29vcmQgPSBhVGV4dHVyZUNvb3JkO1xcbiAgIHZNYXBDb29yZCA9ICggb3RoZXJNYXRyaXggKiB2ZWMzKCBhVGV4dHVyZUNvb3JkLCAxLjApICApLnh5O1xcbiAgIHZDb2xvciA9IHZlYzQoYUNvbG9yLnJnYiAqIGFDb2xvci5hLCBhQ29sb3IuYSk7XFxufVxcblwiLFxuICAgICAgICAvLyBmcmFnbWVudCBzaGFkZXJcbiAgICAgICAgXCJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcXG5cXG52YXJ5aW5nIHZlYzIgdk1hcENvb3JkO1xcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xcbnZhcnlpbmcgdmVjNCB2Q29sb3I7XFxuXFxudW5pZm9ybSB2ZWMyIHNjYWxlO1xcblxcbnVuaWZvcm0gc2FtcGxlcjJEIHVTYW1wbGVyO1xcbnVuaWZvcm0gc2FtcGxlcjJEIG1hcFNhbXBsZXI7XFxuXFxudm9pZCBtYWluKHZvaWQpXFxue1xcbiAgIHZlYzQgbWFwID0gIHRleHR1cmUyRChtYXBTYW1wbGVyLCB2TWFwQ29vcmQpO1xcblxcbiAgIG1hcCAtPSAwLjU7XFxuICAgbWFwLnh5ICo9IHNjYWxlO1xcblxcbiAgIGdsX0ZyYWdDb2xvciA9IHRleHR1cmUyRCh1U2FtcGxlciwgdmVjMih2VGV4dHVyZUNvb3JkLnggKyBtYXAueCwgdlRleHR1cmVDb29yZC55ICsgbWFwLnkpKTtcXG59XFxuXCIsXG4gICAgICAgIC8vIHVuaWZvcm1zXG4gICAgICAgIHtcbiAgICAgICAgICAgIG1hcFNhbXBsZXI6ICAgICB7IHR5cGU6ICdzYW1wbGVyMkQnLCB2YWx1ZTogc3ByaXRlLnRleHR1cmUgfSxcbiAgICAgICAgICAgIG90aGVyTWF0cml4OiAgICB7IHR5cGU6ICdtYXQzJywgdmFsdWU6IG1hc2tNYXRyaXgudG9BcnJheSh0cnVlKSB9LFxuICAgICAgICAgICAgc2NhbGU6ICAgICAgICAgIHsgdHlwZTogJ3YyJywgdmFsdWU6IHsgeDogMSwgeTogMSB9IH1cbiAgICAgICAgfVxuICAgICk7XG5cbiAgICB0aGlzLm1hc2tTcHJpdGUgPSBzcHJpdGU7XG4gICAgdGhpcy5tYXNrTWF0cml4ID0gbWFza01hdHJpeDtcblxuICAgIGlmIChzY2FsZSA9PT0gbnVsbCB8fCBzY2FsZSA9PT0gdW5kZWZpbmVkKVxuICAgIHtcbiAgICAgICAgc2NhbGUgPSAyMDtcbiAgICB9XG5cbiAgICB0aGlzLnNjYWxlID0gbmV3IGNvcmUuUG9pbnQoc2NhbGUsIHNjYWxlKTtcbn1cblxuRGlzcGxhY2VtZW50RmlsdGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoY29yZS5BYnN0cmFjdEZpbHRlci5wcm90b3R5cGUpO1xuRGlzcGxhY2VtZW50RmlsdGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IERpc3BsYWNlbWVudEZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gRGlzcGxhY2VtZW50RmlsdGVyO1xuXG5EaXNwbGFjZW1lbnRGaWx0ZXIucHJvdG90eXBlLmFwcGx5RmlsdGVyID0gZnVuY3Rpb24gKHJlbmRlcmVyLCBpbnB1dCwgb3V0cHV0KVxue1xuICAgIHZhciBmaWx0ZXJNYW5hZ2VyID0gcmVuZGVyZXIuZmlsdGVyTWFuYWdlcjtcblxuICAgIGZpbHRlck1hbmFnZXIuY2FsY3VsYXRlTWFwcGVkTWF0cml4KGlucHV0LmZyYW1lLCB0aGlzLm1hc2tTcHJpdGUsIHRoaXMubWFza01hdHJpeCk7XG5cbiAgICB0aGlzLnVuaWZvcm1zLm90aGVyTWF0cml4LnZhbHVlID0gdGhpcy5tYXNrTWF0cml4LnRvQXJyYXkodHJ1ZSk7XG4gICAgdGhpcy51bmlmb3Jtcy5zY2FsZS52YWx1ZS54ID0gdGhpcy5zY2FsZS54ICogKDEvaW5wdXQuZnJhbWUud2lkdGgpO1xuICAgIHRoaXMudW5pZm9ybXMuc2NhbGUudmFsdWUueSA9IHRoaXMuc2NhbGUueSAqICgxL2lucHV0LmZyYW1lLmhlaWdodCk7XG5cbiAgICB2YXIgc2hhZGVyID0gdGhpcy5nZXRTaGFkZXIocmVuZGVyZXIpO1xuICAgICAvLyBkcmF3IHRoZSBmaWx0ZXIuLi5cbiAgICBmaWx0ZXJNYW5hZ2VyLmFwcGx5RmlsdGVyKHNoYWRlciwgaW5wdXQsIG91dHB1dCk7XG59O1xuXG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKERpc3BsYWNlbWVudEZpbHRlci5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBUaGUgdGV4dHVyZSB1c2VkIGZvciB0aGUgZGlzcGxhY2VtZW50IG1hcC4gTXVzdCBiZSBwb3dlciBvZiAyIHNpemVkIHRleHR1cmUuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlRleHR1cmV9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5EaXNwbGFjZW1lbnRGaWx0ZXIjXG4gICAgICovXG4gICAgbWFwOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudW5pZm9ybXMubWFwU2FtcGxlci52YWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudW5pZm9ybXMubWFwU2FtcGxlci52YWx1ZSA9IHZhbHVlO1xuXG4gICAgICAgIH1cbiAgICB9XG59KTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vLi4vY29yZScpO1xuLy8gQHNlZSBodHRwczovL2dpdGh1Yi5jb20vc3Vic3RhY2svYnJmcy9pc3N1ZXMvMjVcblxuXG4vKipcbiAqIEBhdXRob3IgTWF0IEdyb3ZlcyBodHRwOi8vbWF0Z3JvdmVzLmNvbS8gQERvb3JtYXQyM1xuICogb3JpZ2luYWwgZmlsdGVyOiBodHRwczovL2dpdGh1Yi5jb20vZXZhbncvZ2xmeC5qcy9ibG9iL21hc3Rlci9zcmMvZmlsdGVycy9mdW4vZG90c2NyZWVuLmpzXG4gKi9cblxuLyoqXG4gKiBUaGlzIGZpbHRlciBhcHBsaWVzIGEgZG90c2NyZWVuIGVmZmVjdCBtYWtpbmcgZGlzcGxheSBvYmplY3RzIGFwcGVhciB0byBiZSBtYWRlIG91dCBvZlxuICogYmxhY2sgYW5kIHdoaXRlIGhhbGZ0b25lIGRvdHMgbGlrZSBhbiBvbGQgcHJpbnRlci5cbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQWJzdHJhY3RGaWx0ZXJcbiAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnNcbiAqL1xuZnVuY3Rpb24gRG90U2NyZWVuRmlsdGVyKClcbntcbiAgICBjb3JlLkFic3RyYWN0RmlsdGVyLmNhbGwodGhpcyxcbiAgICAgICAgLy8gdmVydGV4IHNoYWRlclxuICAgICAgICBudWxsLFxuICAgICAgICAvLyBmcmFnbWVudCBzaGFkZXJcbiAgICAgICAgXCJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcXG5cXG52YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDtcXG52YXJ5aW5nIHZlYzQgdkNvbG9yO1xcblxcbnVuaWZvcm0gdmVjNCBkaW1lbnNpb25zO1xcbnVuaWZvcm0gc2FtcGxlcjJEIHVTYW1wbGVyO1xcblxcbnVuaWZvcm0gZmxvYXQgYW5nbGU7XFxudW5pZm9ybSBmbG9hdCBzY2FsZTtcXG5cXG5mbG9hdCBwYXR0ZXJuKClcXG57XFxuICAgZmxvYXQgcyA9IHNpbihhbmdsZSksIGMgPSBjb3MoYW5nbGUpO1xcbiAgIHZlYzIgdGV4ID0gdlRleHR1cmVDb29yZCAqIGRpbWVuc2lvbnMueHk7XFxuICAgdmVjMiBwb2ludCA9IHZlYzIoXFxuICAgICAgIGMgKiB0ZXgueCAtIHMgKiB0ZXgueSxcXG4gICAgICAgcyAqIHRleC54ICsgYyAqIHRleC55XFxuICAgKSAqIHNjYWxlO1xcbiAgIHJldHVybiAoc2luKHBvaW50LngpICogc2luKHBvaW50LnkpKSAqIDQuMDtcXG59XFxuXFxudm9pZCBtYWluKClcXG57XFxuICAgdmVjNCBjb2xvciA9IHRleHR1cmUyRCh1U2FtcGxlciwgdlRleHR1cmVDb29yZCk7XFxuICAgZmxvYXQgYXZlcmFnZSA9IChjb2xvci5yICsgY29sb3IuZyArIGNvbG9yLmIpIC8gMy4wO1xcbiAgIGdsX0ZyYWdDb2xvciA9IHZlYzQodmVjMyhhdmVyYWdlICogMTAuMCAtIDUuMCArIHBhdHRlcm4oKSksIGNvbG9yLmEpO1xcbn1cXG5cIixcbiAgICAgICAgLy8gY3VzdG9tIHVuaWZvcm1zXG4gICAgICAgIHtcbiAgICAgICAgICAgIHNjYWxlOiAgICAgIHsgdHlwZTogJzFmJywgdmFsdWU6IDEgfSxcbiAgICAgICAgICAgIGFuZ2xlOiAgICAgIHsgdHlwZTogJzFmJywgdmFsdWU6IDUgfSxcbiAgICAgICAgICAgIGRpbWVuc2lvbnM6IHsgdHlwZTogJzRmdicsIHZhbHVlOiBbMCwgMCwgMCwgMF0gfVxuICAgICAgICB9XG4gICAgKTtcbn1cblxuRG90U2NyZWVuRmlsdGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoY29yZS5BYnN0cmFjdEZpbHRlci5wcm90b3R5cGUpO1xuRG90U2NyZWVuRmlsdGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IERvdFNjcmVlbkZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gRG90U2NyZWVuRmlsdGVyO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhEb3RTY3JlZW5GaWx0ZXIucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogVGhlIHNjYWxlIG9mIHRoZSBlZmZlY3QuXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuRG90U2NyZWVuRmlsdGVyI1xuICAgICAqL1xuICAgIHNjYWxlOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudW5pZm9ybXMuc2NhbGUudmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLnNjYWxlLnZhbHVlID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVGhlIHJhZGl1cyBvZiB0aGUgZWZmZWN0LlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLkRvdFNjcmVlbkZpbHRlciNcbiAgICAgKi9cbiAgICBhbmdsZToge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVuaWZvcm1zLmFuZ2xlLnZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy5hbmdsZS52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfVxufSk7XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uLy4uL2NvcmUnKTtcblxuLy8gQHNlZSBodHRwczovL2dpdGh1Yi5jb20vc3Vic3RhY2svYnJmcy9pc3N1ZXMvMjVcblxuXG4vKipcbiAqIFRoZSBCbHVyWVRpbnRGaWx0ZXIgYXBwbGllcyBhIHZlcnRpY2FsIEdhdXNzaWFuIGJsdXIgdG8gYW4gb2JqZWN0LlxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5BYnN0cmFjdEZpbHRlclxuICogQG1lbWJlcm9mIFBJWEkuZmlsdGVyc1xuICovXG5mdW5jdGlvbiBCbHVyWVRpbnRGaWx0ZXIoKVxue1xuICAgIGNvcmUuQWJzdHJhY3RGaWx0ZXIuY2FsbCh0aGlzLFxuICAgICAgICAvLyB2ZXJ0ZXggc2hhZGVyXG4gICAgICAgIFwiYXR0cmlidXRlIHZlYzIgYVZlcnRleFBvc2l0aW9uO1xcbmF0dHJpYnV0ZSB2ZWMyIGFUZXh0dXJlQ29vcmQ7XFxuYXR0cmlidXRlIHZlYzQgYUNvbG9yO1xcblxcbnVuaWZvcm0gZmxvYXQgc3RyZW5ndGg7XFxudW5pZm9ybSB2ZWMyIG9mZnNldDtcXG5cXG51bmlmb3JtIG1hdDMgcHJvamVjdGlvbk1hdHJpeDtcXG5cXG52YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDtcXG52YXJ5aW5nIHZlYzQgdkNvbG9yO1xcbnZhcnlpbmcgdmVjMiB2Qmx1clRleENvb3Jkc1s2XTtcXG5cXG52b2lkIG1haW4odm9pZClcXG57XFxuICAgIGdsX1Bvc2l0aW9uID0gdmVjNCgocHJvamVjdGlvbk1hdHJpeCAqIHZlYzMoKGFWZXJ0ZXhQb3NpdGlvbitvZmZzZXQpLCAxLjApKS54eSwgMC4wLCAxLjApO1xcbiAgICB2VGV4dHVyZUNvb3JkID0gYVRleHR1cmVDb29yZDtcXG5cXG4gICAgdkJsdXJUZXhDb29yZHNbIDBdID0gYVRleHR1cmVDb29yZCArIHZlYzIoMC4wLCAtMC4wMTIgKiBzdHJlbmd0aCk7XFxuICAgIHZCbHVyVGV4Q29vcmRzWyAxXSA9IGFUZXh0dXJlQ29vcmQgKyB2ZWMyKDAuMCwgLTAuMDA4ICogc3RyZW5ndGgpO1xcbiAgICB2Qmx1clRleENvb3Jkc1sgMl0gPSBhVGV4dHVyZUNvb3JkICsgdmVjMigwLjAsIC0wLjAwNCAqIHN0cmVuZ3RoKTtcXG4gICAgdkJsdXJUZXhDb29yZHNbIDNdID0gYVRleHR1cmVDb29yZCArIHZlYzIoMC4wLCAgMC4wMDQgKiBzdHJlbmd0aCk7XFxuICAgIHZCbHVyVGV4Q29vcmRzWyA0XSA9IGFUZXh0dXJlQ29vcmQgKyB2ZWMyKDAuMCwgIDAuMDA4ICogc3RyZW5ndGgpO1xcbiAgICB2Qmx1clRleENvb3Jkc1sgNV0gPSBhVGV4dHVyZUNvb3JkICsgdmVjMigwLjAsICAwLjAxMiAqIHN0cmVuZ3RoKTtcXG5cXG4gICB2Q29sb3IgPSB2ZWM0KGFDb2xvci5yZ2IgKiBhQ29sb3IuYSwgYUNvbG9yLmEpO1xcbn1cXG5cIixcbiAgICAgICAgLy8gZnJhZ21lbnQgc2hhZGVyXG4gICAgICAgIFwicHJlY2lzaW9uIGxvd3AgZmxvYXQ7XFxuXFxudmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7XFxudmFyeWluZyB2ZWMyIHZCbHVyVGV4Q29vcmRzWzZdO1xcbnZhcnlpbmcgdmVjNCB2Q29sb3I7XFxuXFxudW5pZm9ybSB2ZWMzIGNvbG9yO1xcbnVuaWZvcm0gZmxvYXQgYWxwaGE7XFxuXFxudW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXI7XFxuXFxudm9pZCBtYWluKHZvaWQpXFxue1xcbiAgICB2ZWM0IHN1bSA9IHZlYzQoMC4wKTtcXG5cXG4gICAgc3VtICs9IHRleHR1cmUyRCh1U2FtcGxlciwgdkJsdXJUZXhDb29yZHNbIDBdKSowLjAwNDQzMTg0ODQxMTkzODM0MTtcXG4gICAgc3VtICs9IHRleHR1cmUyRCh1U2FtcGxlciwgdkJsdXJUZXhDb29yZHNbIDFdKSowLjA1Mzk5MDk2NjUxMzE4OTg1O1xcbiAgICBzdW0gKz0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2Qmx1clRleENvb3Jkc1sgMl0pKjAuMjQxOTcwNzI0NTE5MTQ1NDtcXG4gICAgc3VtICs9IHRleHR1cmUyRCh1U2FtcGxlciwgdlRleHR1cmVDb29yZCAgICAgKSowLjM5ODk0MjI4MDQwMTQzMjc7XFxuICAgIHN1bSArPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZCbHVyVGV4Q29vcmRzWyAzXSkqMC4yNDE5NzA3MjQ1MTkxNDU0O1xcbiAgICBzdW0gKz0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2Qmx1clRleENvb3Jkc1sgNF0pKjAuMDUzOTkwOTY2NTEzMTg5ODU7XFxuICAgIHN1bSArPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZCbHVyVGV4Q29vcmRzWyA1XSkqMC4wMDQ0MzE4NDg0MTE5MzgzNDE7XFxuXFxuICAgIGdsX0ZyYWdDb2xvciA9IHZlYzQoIGNvbG9yLnJnYiAqIHN1bS5hICogYWxwaGEsIHN1bS5hICogYWxwaGEgKTtcXG59XFxuXCIsXG4gICAgICAgIC8vIHNldCB0aGUgdW5pZm9ybXNcbiAgICAgICAge1xuICAgICAgICAgICAgYmx1cjogeyB0eXBlOiAnMWYnLCB2YWx1ZTogMSAvIDUxMiB9LFxuICAgICAgICAgICAgY29sb3I6IHsgdHlwZTogJ2MnLCB2YWx1ZTogWzAsMCwwXX0sXG4gICAgICAgICAgICBhbHBoYTogeyB0eXBlOiAnMWYnLCB2YWx1ZTogMC43IH0sXG4gICAgICAgICAgICBvZmZzZXQ6IHsgdHlwZTogJzJmJywgdmFsdWU6WzUsIDVdfSxcbiAgICAgICAgICAgIHN0cmVuZ3RoOiB7IHR5cGU6ICcxZicsIHZhbHVlOjF9XG4gICAgICAgIH1cbiAgICApO1xuXG4gICAgdGhpcy5wYXNzZXMgPSAxO1xuICAgIHRoaXMuc3RyZW5ndGggPSA0O1xufVxuXG5CbHVyWVRpbnRGaWx0ZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShjb3JlLkFic3RyYWN0RmlsdGVyLnByb3RvdHlwZSk7XG5CbHVyWVRpbnRGaWx0ZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gQmx1cllUaW50RmlsdGVyO1xubW9kdWxlLmV4cG9ydHMgPSBCbHVyWVRpbnRGaWx0ZXI7XG5cbkJsdXJZVGludEZpbHRlci5wcm90b3R5cGUuYXBwbHlGaWx0ZXIgPSBmdW5jdGlvbiAocmVuZGVyZXIsIGlucHV0LCBvdXRwdXQsIGNsZWFyKVxue1xuICAgIHZhciBzaGFkZXIgPSB0aGlzLmdldFNoYWRlcihyZW5kZXJlcik7XG5cbiAgICB0aGlzLnVuaWZvcm1zLnN0cmVuZ3RoLnZhbHVlID0gdGhpcy5zdHJlbmd0aCAvIDQgLyB0aGlzLnBhc3NlcyAqIChpbnB1dC5mcmFtZS5oZWlnaHQgLyBpbnB1dC5zaXplLmhlaWdodCk7XG5cbiAgICBpZih0aGlzLnBhc3NlcyA9PT0gMSlcbiAgICB7XG4gICAgICAgIHJlbmRlcmVyLmZpbHRlck1hbmFnZXIuYXBwbHlGaWx0ZXIoc2hhZGVyLCBpbnB1dCwgb3V0cHV0LCBjbGVhcik7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHZhciByZW5kZXJUYXJnZXQgPSByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLmdldFJlbmRlclRhcmdldCh0cnVlKTtcbiAgICAgICAgdmFyIGZsaXAgPSBpbnB1dDtcbiAgICAgICAgdmFyIGZsb3AgPSByZW5kZXJUYXJnZXQ7XG5cbiAgICAgICAgZm9yKHZhciBpID0gMDsgaSA8IHRoaXMucGFzc2VzLTE7IGkrKylcbiAgICAgICAge1xuICAgICAgICAgICAgcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5hcHBseUZpbHRlcihzaGFkZXIsIGZsaXAsIGZsb3AsIGNsZWFyKTtcblxuICAgICAgICAgICB2YXIgdGVtcCA9IGZsb3A7XG4gICAgICAgICAgIGZsb3AgPSBmbGlwO1xuICAgICAgICAgICBmbGlwID0gdGVtcDtcbiAgICAgICAgfVxuXG4gICAgICAgIHJlbmRlcmVyLmZpbHRlck1hbmFnZXIuYXBwbHlGaWx0ZXIoc2hhZGVyLCBmbGlwLCBvdXRwdXQsIGNsZWFyKTtcblxuICAgICAgICByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLnJldHVyblJlbmRlclRhcmdldChyZW5kZXJUYXJnZXQpO1xuICAgIH1cbn07XG5cblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoQmx1cllUaW50RmlsdGVyLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIHN0cmVuZ3RoIG9mIGJvdGggdGhlIGJsdXIuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5CbHVyWVRpbnRGaWx0ZXIjXG4gICAgICogQGRlZmF1bHQgMlxuICAgICAqL1xuICAgIGJsdXI6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gIHRoaXMuc3RyZW5ndGg7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnBhZGRpbmcgPSB2YWx1ZSAqIDAuNTtcbiAgICAgICAgICAgIHRoaXMuc3RyZW5ndGggPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi8uLi9jb3JlJyksXG4gICAgQmx1clhGaWx0ZXIgPSByZXF1aXJlKCcuLi9ibHVyL0JsdXJYRmlsdGVyJyksXG4gICAgQmx1cllUaW50RmlsdGVyID0gcmVxdWlyZSgnLi9CbHVyWVRpbnRGaWx0ZXInKTtcblxuLyoqXG4gKiBUaGUgRHJvcFNoYWRvd0ZpbHRlciBhcHBsaWVzIGEgR2F1c3NpYW4gYmx1ciB0byBhbiBvYmplY3QuXG4gKiBUaGUgc3RyZW5ndGggb2YgdGhlIGJsdXIgY2FuIGJlIHNldCBmb3IgeC0gYW5kIHktYXhpcyBzZXBhcmF0ZWx5LlxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5BYnN0cmFjdEZpbHRlclxuICogQG1lbWJlcm9mIFBJWEkuZmlsdGVyc1xuICovXG5mdW5jdGlvbiBEcm9wU2hhZG93RmlsdGVyKClcbntcbiAgICBjb3JlLkFic3RyYWN0RmlsdGVyLmNhbGwodGhpcyk7XG5cbiAgICB0aGlzLmJsdXJYRmlsdGVyID0gbmV3IEJsdXJYRmlsdGVyKCk7XG4gICAgdGhpcy5ibHVyWVRpbnRGaWx0ZXIgPSBuZXcgQmx1cllUaW50RmlsdGVyKCk7XG5cbiAgICB0aGlzLmRlZmF1bHRGaWx0ZXIgPSBuZXcgY29yZS5BYnN0cmFjdEZpbHRlcigpO1xuXG4gICAgdGhpcy5wYWRkaW5nID0gMzA7XG5cbiAgICB0aGlzLl9kaXJ0eVBvc2l0aW9uID0gdHJ1ZTtcbiAgICB0aGlzLl9hbmdsZSA9IDQ1ICogTWF0aC5QSSAvIDE4MDtcbiAgICB0aGlzLl9kaXN0YW5jZSA9IDEwO1xuICAgIHRoaXMuYWxwaGEgPSAwLjc1O1xuICAgIHRoaXMuaGlkZU9iamVjdCA9IGZhbHNlO1xuICAgIHRoaXMuYmxlbmRNb2RlID0gY29yZS5CTEVORF9NT0RFUy5NVUxUSVBMWTtcbn1cblxuRHJvcFNoYWRvd0ZpbHRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuQWJzdHJhY3RGaWx0ZXIucHJvdG90eXBlKTtcbkRyb3BTaGFkb3dGaWx0ZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gRHJvcFNoYWRvd0ZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gRHJvcFNoYWRvd0ZpbHRlcjtcblxuRHJvcFNoYWRvd0ZpbHRlci5wcm90b3R5cGUuYXBwbHlGaWx0ZXIgPSBmdW5jdGlvbiAocmVuZGVyZXIsIGlucHV0LCBvdXRwdXQpXG57XG4gICAgdmFyIHJlbmRlclRhcmdldCA9IHJlbmRlcmVyLmZpbHRlck1hbmFnZXIuZ2V0UmVuZGVyVGFyZ2V0KHRydWUpO1xuXG4gICAgLy9UT0RPIC0gY29weVRleFN1YkltYWdlMkQgY291bGQgYmUgdXNlZCBoZXJlP1xuICAgIGlmKHRoaXMuX2RpcnR5UG9zaXRpb24pXG4gICAge1xuICAgICAgICB0aGlzLl9kaXJ0eVBvc2l0aW9uID0gZmFsc2U7XG5cbiAgICAgICAgdGhpcy5ibHVyWVRpbnRGaWx0ZXIudW5pZm9ybXMub2Zmc2V0LnZhbHVlWzBdID0gTWF0aC5zaW4odGhpcy5fYW5nbGUpICogdGhpcy5fZGlzdGFuY2U7XG4gICAgICAgIHRoaXMuYmx1cllUaW50RmlsdGVyLnVuaWZvcm1zLm9mZnNldC52YWx1ZVsxXSA9IE1hdGguY29zKHRoaXMuX2FuZ2xlKSAqIHRoaXMuX2Rpc3RhbmNlO1xuICAgIH1cblxuICAgIHRoaXMuYmx1clhGaWx0ZXIuYXBwbHlGaWx0ZXIocmVuZGVyZXIsIGlucHV0LCByZW5kZXJUYXJnZXQpO1xuXG4gICAgcmVuZGVyZXIuYmxlbmRNb2RlTWFuYWdlci5zZXRCbGVuZE1vZGUodGhpcy5ibGVuZE1vZGUpO1xuXG4gICAgdGhpcy5ibHVyWVRpbnRGaWx0ZXIuYXBwbHlGaWx0ZXIocmVuZGVyZXIsIHJlbmRlclRhcmdldCwgb3V0cHV0KTtcblxuICAgIHJlbmRlcmVyLmJsZW5kTW9kZU1hbmFnZXIuc2V0QmxlbmRNb2RlKGNvcmUuQkxFTkRfTU9ERVMuTk9STUFMKTtcblxuICAgIGlmKCF0aGlzLmhpZGVPYmplY3QpXG4gICAge1xuXG4gICAgICAgIHRoaXMuZGVmYXVsdEZpbHRlci5hcHBseUZpbHRlcihyZW5kZXJlciwgaW5wdXQsIG91dHB1dCk7XG4gICAgfVxuXG5cbiAgICByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLnJldHVyblJlbmRlclRhcmdldChyZW5kZXJUYXJnZXQpO1xufTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoRHJvcFNoYWRvd0ZpbHRlci5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBzdHJlbmd0aCBvZiBib3RoIHRoZSBibHVyWCBhbmQgYmx1clkgcHJvcGVydGllcyBzaW11bHRhbmVvdXNseVxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJPZiBQSVhJLmZpbHRlcnMuRHJvcFNoYWRvd0ZpbHRlciNcbiAgICAgKiBAZGVmYXVsdCAyXG4gICAgICovXG4gICAgYmx1cjoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmJsdXJYRmlsdGVyLmJsdXI7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmJsdXJYRmlsdGVyLmJsdXIgPSB0aGlzLmJsdXJZVGludEZpbHRlci5ibHVyID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgc3RyZW5ndGggb2YgdGhlIGJsdXJYIHByb3BlcnR5XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlck9mIFBJWEkuZmlsdGVycy5Ecm9wU2hhZG93RmlsdGVyI1xuICAgICAqIEBkZWZhdWx0IDJcbiAgICAgKi9cbiAgICBibHVyWDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmJsdXJYRmlsdGVyLmJsdXI7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmJsdXJYRmlsdGVyLmJsdXIgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBzdHJlbmd0aCBvZiB0aGUgYmx1clkgcHJvcGVydHlcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyT2YgUElYSS5maWx0ZXJzLkRyb3BTaGFkb3dGaWx0ZXIjXG4gICAgICogQGRlZmF1bHQgMlxuICAgICAqL1xuICAgIGJsdXJZOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuYmx1cllUaW50RmlsdGVyLmJsdXI7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmJsdXJZVGludEZpbHRlci5ibHVyID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgY29sb3Igb2YgdGhlIHNoYWRvd1xuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJPZiBQSVhJLmZpbHRlcnMuRHJvcFNoYWRvd0ZpbHRlciNcbiAgICAgKi9cbiAgICBjb2xvcjoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiAgY29yZS51dGlscy5yZ2IyaGV4KCB0aGlzLmJsdXJZVGludEZpbHRlci51bmlmb3Jtcy5jb2xvci52YWx1ZSApO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5ibHVyWVRpbnRGaWx0ZXIudW5pZm9ybXMuY29sb3IudmFsdWUgPSBjb3JlLnV0aWxzLmhleDJyZ2IodmFsdWUpO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIGFscGhhIG9mIHRoZSBzaGFkb3dcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyT2YgUElYSS5maWx0ZXJzLkRyb3BTaGFkb3dGaWx0ZXIjXG4gICAgICovXG4gICAgYWxwaGE6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gIHRoaXMuYmx1cllUaW50RmlsdGVyLnVuaWZvcm1zLmFscGhhLnZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5ibHVyWVRpbnRGaWx0ZXIudW5pZm9ybXMuYWxwaGEudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBkaXN0YW5jZSBvZiB0aGUgc2hhZG93XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlck9mIFBJWEkuZmlsdGVycy5Ecm9wU2hhZG93RmlsdGVyI1xuICAgICAqL1xuICAgIGRpc3RhbmNlOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuICB0aGlzLl9kaXN0YW5jZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuX2RpcnR5UG9zaXRpb24gPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy5fZGlzdGFuY2UgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBhbmdsZSBvZiB0aGUgc2hhZG93XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlck9mIFBJWEkuZmlsdGVycy5Ecm9wU2hhZG93RmlsdGVyI1xuICAgICAqL1xuICAgIGFuZ2xlOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuICB0aGlzLl9hbmdsZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuX2RpcnR5UG9zaXRpb24gPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy5fYW5nbGUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi8uLi9jb3JlJyk7XG4vLyBAc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9zdWJzdGFjay9icmZzL2lzc3Vlcy8yNVxuXG5cbi8qKlxuICogVGhpcyBncmV5c2NhbGVzIHRoZSBwYWxldHRlIG9mIHlvdXIgRGlzcGxheSBPYmplY3RzLlxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5BYnN0cmFjdEZpbHRlclxuICogQG1lbWJlcm9mIFBJWEkuZmlsdGVyc1xuICovXG5mdW5jdGlvbiBHcmF5RmlsdGVyKClcbntcbiAgICBjb3JlLkFic3RyYWN0RmlsdGVyLmNhbGwodGhpcyxcbiAgICAgICAgLy8gdmVydGV4IHNoYWRlclxuICAgICAgICBudWxsLFxuICAgICAgICAvLyBmcmFnbWVudCBzaGFkZXJcbiAgICAgICAgXCJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcXG5cXG52YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDtcXG52YXJ5aW5nIHZlYzQgdkNvbG9yO1xcblxcbnVuaWZvcm0gc2FtcGxlcjJEIHVTYW1wbGVyO1xcbnVuaWZvcm0gZmxvYXQgZ3JheTtcXG5cXG52b2lkIG1haW4odm9pZClcXG57XFxuICAgZ2xfRnJhZ0NvbG9yID0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2VGV4dHVyZUNvb3JkKTtcXG4gICBnbF9GcmFnQ29sb3IucmdiID0gbWl4KGdsX0ZyYWdDb2xvci5yZ2IsIHZlYzMoMC4yMTI2KmdsX0ZyYWdDb2xvci5yICsgMC43MTUyKmdsX0ZyYWdDb2xvci5nICsgMC4wNzIyKmdsX0ZyYWdDb2xvci5iKSwgZ3JheSk7XFxufVxcblwiLFxuICAgICAgICAvLyBzZXQgdGhlIHVuaWZvcm1zXG4gICAgICAgIHtcbiAgICAgICAgICAgIGdyYXk6IHsgdHlwZTogJzFmJywgdmFsdWU6IDEgfVxuICAgICAgICB9XG4gICAgKTtcbn1cblxuR3JheUZpbHRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuQWJzdHJhY3RGaWx0ZXIucHJvdG90eXBlKTtcbkdyYXlGaWx0ZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gR3JheUZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gR3JheUZpbHRlcjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoR3JheUZpbHRlci5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBUaGUgc3RyZW5ndGggb2YgdGhlIGdyYXkuIDEgd2lsbCBtYWtlIHRoZSBvYmplY3QgYmxhY2sgYW5kIHdoaXRlLCAwIHdpbGwgbWFrZSB0aGUgb2JqZWN0IGl0cyBub3JtYWwgY29sb3IuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5HcmF5RmlsdGVyI1xuICAgICAqL1xuICAgIGdyYXk6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy51bmlmb3Jtcy5ncmF5LnZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy5ncmF5LnZhbHVlID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG59KTtcbiIsIi8qKlxuICogQGZpbGUgICAgICAgIE1haW4gZXhwb3J0IG9mIHRoZSBQSVhJIGZpbHRlcnMgbGlicmFyeVxuICogQGF1dGhvciAgICAgIE1hdCBHcm92ZXMgPG1hdEBnb29kYm95ZGlnaXRhbC5jb20+XG4gKiBAY29weXJpZ2h0ICAgMjAxMy0yMDE1IEdvb2RCb3lEaWdpdGFsXG4gKiBAbGljZW5zZSAgICAge0BsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9waXhpanMvcGl4aS5qcy9ibG9iL21hc3Rlci9MSUNFTlNFfE1JVCBMaWNlbnNlfVxuICovXG5cbi8qKlxuICogQG5hbWVzcGFjZSBQSVhJLmZpbHRlcnNcbiAqL1xubW9kdWxlLmV4cG9ydHMgPSB7XG4gICAgQXNjaWlGaWx0ZXI6ICAgICAgICByZXF1aXJlKCcuL2FzY2lpL0FzY2lpRmlsdGVyJyksXG4gICAgQmxvb21GaWx0ZXI6ICAgICAgICByZXF1aXJlKCcuL2Jsb29tL0Jsb29tRmlsdGVyJyksXG4gICAgQmx1ckZpbHRlcjogICAgICAgICByZXF1aXJlKCcuL2JsdXIvQmx1ckZpbHRlcicpLFxuICAgIEJsdXJYRmlsdGVyOiAgICAgICAgcmVxdWlyZSgnLi9ibHVyL0JsdXJYRmlsdGVyJyksXG4gICAgQmx1cllGaWx0ZXI6ICAgICAgICByZXF1aXJlKCcuL2JsdXIvQmx1cllGaWx0ZXInKSxcbiAgICBCbHVyRGlyRmlsdGVyOiAgICAgIHJlcXVpcmUoJy4vYmx1ci9CbHVyRGlyRmlsdGVyJyksXG4gICAgQ29sb3JNYXRyaXhGaWx0ZXI6ICByZXF1aXJlKCcuL2NvbG9yL0NvbG9yTWF0cml4RmlsdGVyJyksXG4gICAgQ29sb3JTdGVwRmlsdGVyOiAgICByZXF1aXJlKCcuL2NvbG9yL0NvbG9yU3RlcEZpbHRlcicpLFxuICAgIENvbnZvbHV0aW9uRmlsdGVyOiAgcmVxdWlyZSgnLi9jb252b2x1dGlvbi9Db252b2x1dGlvbkZpbHRlcicpLFxuICAgIENyb3NzSGF0Y2hGaWx0ZXI6ICAgcmVxdWlyZSgnLi9jcm9zc2hhdGNoL0Nyb3NzSGF0Y2hGaWx0ZXInKSxcbiAgICBEaXNwbGFjZW1lbnRGaWx0ZXI6IHJlcXVpcmUoJy4vZGlzcGxhY2VtZW50L0Rpc3BsYWNlbWVudEZpbHRlcicpLFxuICAgIERvdFNjcmVlbkZpbHRlcjogICAgcmVxdWlyZSgnLi9kb3QvRG90U2NyZWVuRmlsdGVyJyksXG4gICAgR3JheUZpbHRlcjogICAgICAgICByZXF1aXJlKCcuL2dyYXkvR3JheUZpbHRlcicpLFxuICAgIERyb3BTaGFkb3dGaWx0ZXI6ICAgcmVxdWlyZSgnLi9kcm9wc2hhZG93L0Ryb3BTaGFkb3dGaWx0ZXInKSxcbiAgICBJbnZlcnRGaWx0ZXI6ICAgICAgIHJlcXVpcmUoJy4vaW52ZXJ0L0ludmVydEZpbHRlcicpLFxuICAgIE5vaXNlRmlsdGVyOiAgICAgICAgcmVxdWlyZSgnLi9ub2lzZS9Ob2lzZUZpbHRlcicpLFxuICAgIFBpeGVsYXRlRmlsdGVyOiAgICAgcmVxdWlyZSgnLi9waXhlbGF0ZS9QaXhlbGF0ZUZpbHRlcicpLFxuICAgIFJHQlNwbGl0RmlsdGVyOiAgICAgcmVxdWlyZSgnLi9yZ2IvUkdCU3BsaXRGaWx0ZXInKSxcbiAgICBTaG9ja3dhdmVGaWx0ZXI6ICAgIHJlcXVpcmUoJy4vc2hvY2t3YXZlL1Nob2Nrd2F2ZUZpbHRlcicpLFxuICAgIFNlcGlhRmlsdGVyOiAgICAgICAgcmVxdWlyZSgnLi9zZXBpYS9TZXBpYUZpbHRlcicpLFxuICAgIFNtYXJ0Qmx1ckZpbHRlcjogICAgcmVxdWlyZSgnLi9ibHVyL1NtYXJ0Qmx1ckZpbHRlcicpLFxuICAgIFRpbHRTaGlmdEZpbHRlcjogICAgcmVxdWlyZSgnLi90aWx0c2hpZnQvVGlsdFNoaWZ0RmlsdGVyJyksXG4gICAgVGlsdFNoaWZ0WEZpbHRlcjogICByZXF1aXJlKCcuL3RpbHRzaGlmdC9UaWx0U2hpZnRYRmlsdGVyJyksXG4gICAgVGlsdFNoaWZ0WUZpbHRlcjogICByZXF1aXJlKCcuL3RpbHRzaGlmdC9UaWx0U2hpZnRZRmlsdGVyJyksXG4gICAgVHdpc3RGaWx0ZXI6ICAgICAgICByZXF1aXJlKCcuL3R3aXN0L1R3aXN0RmlsdGVyJylcbn07XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uLy4uL2NvcmUnKTtcbi8vIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL3N1YnN0YWNrL2JyZnMvaXNzdWVzLzI1XG5cblxuLyoqXG4gKiBUaGlzIGludmVydHMgeW91ciBEaXNwbGF5IE9iamVjdHMgY29sb3JzLlxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5BYnN0cmFjdEZpbHRlclxuICogQG1lbWJlcm9mIFBJWEkuZmlsdGVyc1xuICovXG5mdW5jdGlvbiBJbnZlcnRGaWx0ZXIoKVxue1xuICAgIGNvcmUuQWJzdHJhY3RGaWx0ZXIuY2FsbCh0aGlzLFxuICAgICAgICAvLyB2ZXJ0ZXggc2hhZGVyXG4gICAgICAgIG51bGwsXG4gICAgICAgIC8vIGZyYWdtZW50IHNoYWRlclxuICAgICAgICBcInByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xcblxcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xcblxcbnVuaWZvcm0gZmxvYXQgaW52ZXJ0O1xcbnVuaWZvcm0gc2FtcGxlcjJEIHVTYW1wbGVyO1xcblxcbnZvaWQgbWFpbih2b2lkKVxcbntcXG4gICAgZ2xfRnJhZ0NvbG9yID0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2VGV4dHVyZUNvb3JkKTtcXG5cXG4gICAgZ2xfRnJhZ0NvbG9yLnJnYiA9IG1peCggKHZlYzMoMSktZ2xfRnJhZ0NvbG9yLnJnYikgKiBnbF9GcmFnQ29sb3IuYSwgZ2xfRnJhZ0NvbG9yLnJnYiwgMS4wIC0gaW52ZXJ0KTtcXG59XFxuXCIsXG4gICAgICAgIC8vIGN1c3RvbSB1bmlmb3Jtc1xuICAgICAgICB7XG4gICAgICAgICAgICBpbnZlcnQ6IHsgdHlwZTogJzFmJywgdmFsdWU6IDEgfVxuICAgICAgICB9XG4gICAgKTtcbn1cblxuSW52ZXJ0RmlsdGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoY29yZS5BYnN0cmFjdEZpbHRlci5wcm90b3R5cGUpO1xuSW52ZXJ0RmlsdGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IEludmVydEZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gSW52ZXJ0RmlsdGVyO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhJbnZlcnRGaWx0ZXIucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogVGhlIHN0cmVuZ3RoIG9mIHRoZSBpbnZlcnQuIGAxYCB3aWxsIGZ1bGx5IGludmVydCB0aGUgY29sb3JzLCBhbmRcbiAgICAgKiBgMGAgd2lsbCBtYWtlIHRoZSBvYmplY3QgaXRzIG5vcm1hbCBjb2xvci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLkludmVydEZpbHRlciNcbiAgICAgKi9cbiAgICBpbnZlcnQ6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy51bmlmb3Jtcy5pbnZlcnQudmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLmludmVydC52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfVxufSk7XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uLy4uL2NvcmUnKTtcbi8vIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL3N1YnN0YWNrL2JyZnMvaXNzdWVzLzI1XG5cblxuLyoqXG4gKiBAYXV0aG9yIFZpY28gQHZpY29jb3RlYVxuICogb3JpZ2luYWwgZmlsdGVyOiBodHRwczovL2dpdGh1Yi5jb20vZXZhbncvZ2xmeC5qcy9ibG9iL21hc3Rlci9zcmMvZmlsdGVycy9hZGp1c3Qvbm9pc2UuanNcbiAqL1xuXG4vKipcbiAqIEEgTm9pc2UgZWZmZWN0IGZpbHRlci5cbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQWJzdHJhY3RGaWx0ZXJcbiAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnNcbiAqL1xuZnVuY3Rpb24gTm9pc2VGaWx0ZXIoKVxue1xuICAgIGNvcmUuQWJzdHJhY3RGaWx0ZXIuY2FsbCh0aGlzLFxuICAgICAgICAvLyB2ZXJ0ZXggc2hhZGVyXG4gICAgICAgIG51bGwsXG4gICAgICAgIC8vIGZyYWdtZW50IHNoYWRlclxuICAgICAgICBcInByZWNpc2lvbiBoaWdocCBmbG9hdDtcXG5cXG52YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDtcXG52YXJ5aW5nIHZlYzQgdkNvbG9yO1xcblxcbnVuaWZvcm0gZmxvYXQgbm9pc2U7XFxudW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXI7XFxuXFxuZmxvYXQgcmFuZCh2ZWMyIGNvKVxcbntcXG4gICAgcmV0dXJuIGZyYWN0KHNpbihkb3QoY28ueHksIHZlYzIoMTIuOTg5OCwgNzguMjMzKSkpICogNDM3NTguNTQ1Myk7XFxufVxcblxcbnZvaWQgbWFpbigpXFxue1xcbiAgICB2ZWM0IGNvbG9yID0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2VGV4dHVyZUNvb3JkKTtcXG5cXG4gICAgZmxvYXQgZGlmZiA9IChyYW5kKHZUZXh0dXJlQ29vcmQpIC0gMC41KSAqIG5vaXNlO1xcblxcbiAgICBjb2xvci5yICs9IGRpZmY7XFxuICAgIGNvbG9yLmcgKz0gZGlmZjtcXG4gICAgY29sb3IuYiArPSBkaWZmO1xcblxcbiAgICBnbF9GcmFnQ29sb3IgPSBjb2xvcjtcXG59XFxuXCIsXG4gICAgICAgIC8vIGN1c3RvbSB1bmlmb3Jtc1xuICAgICAgICB7XG4gICAgICAgICAgICBub2lzZTogeyB0eXBlOiAnMWYnLCB2YWx1ZTogMC41IH1cbiAgICAgICAgfVxuICAgICk7XG59XG5cbk5vaXNlRmlsdGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoY29yZS5BYnN0cmFjdEZpbHRlci5wcm90b3R5cGUpO1xuTm9pc2VGaWx0ZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gTm9pc2VGaWx0ZXI7XG5tb2R1bGUuZXhwb3J0cyA9IE5vaXNlRmlsdGVyO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhOb2lzZUZpbHRlci5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBUaGUgYW1vdW50IG9mIG5vaXNlIHRvIGFwcGx5LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuTm9pc2VGaWx0ZXIjXG4gICAgICogQGRlZmF1bHQgMC41XG4gICAgICovXG4gICAgbm9pc2U6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy51bmlmb3Jtcy5ub2lzZS52YWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudW5pZm9ybXMubm9pc2UudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi8uLi9jb3JlJyk7XG4vLyBAc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9zdWJzdGFjay9icmZzL2lzc3Vlcy8yNVxuXG5cbi8qKlxuICogVGhpcyBmaWx0ZXIgYXBwbGllcyBhIHBpeGVsYXRlIGVmZmVjdCBtYWtpbmcgZGlzcGxheSBvYmplY3RzIGFwcGVhciAnYmxvY2t5Jy5cbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQWJzdHJhY3RGaWx0ZXJcbiAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnNcbiAqL1xuZnVuY3Rpb24gUGl4ZWxhdGVGaWx0ZXIoKVxue1xuICAgIGNvcmUuQWJzdHJhY3RGaWx0ZXIuY2FsbCh0aGlzLFxuICAgICAgICAvLyB2ZXJ0ZXggc2hhZGVyXG4gICAgICAgIG51bGwsXG4gICAgICAgIC8vIGZyYWdtZW50IHNoYWRlclxuICAgICAgICBcInByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xcblxcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xcblxcbnVuaWZvcm0gdmVjNCBkaW1lbnNpb25zO1xcbnVuaWZvcm0gdmVjMiBwaXhlbFNpemU7XFxudW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXI7XFxuXFxudm9pZCBtYWluKHZvaWQpXFxue1xcbiAgICB2ZWMyIGNvb3JkID0gdlRleHR1cmVDb29yZDtcXG5cXG4gICAgdmVjMiBzaXplID0gZGltZW5zaW9ucy54eSAvIHBpeGVsU2l6ZTtcXG5cXG4gICAgdmVjMiBjb2xvciA9IGZsb29yKCAoIHZUZXh0dXJlQ29vcmQgKiBzaXplICkgKSAvIHNpemUgKyBwaXhlbFNpemUvZGltZW5zaW9ucy54eSAqIDAuNTtcXG5cXG4gICAgZ2xfRnJhZ0NvbG9yID0gdGV4dHVyZTJEKHVTYW1wbGVyLCBjb2xvcik7XFxufVxcblwiLFxuICAgICAgICAvLyBjdXN0b20gdW5pZm9ybXNcbiAgICAgICAge1xuICAgICAgICAgICAgZGltZW5zaW9uczogeyB0eXBlOiAnNGZ2JywgIHZhbHVlOiBuZXcgRmxvYXQzMkFycmF5KFswLCAwLCAwLCAwXSkgfSxcbiAgICAgICAgICAgIHBpeGVsU2l6ZTogIHsgdHlwZTogJ3YyJywgICB2YWx1ZTogeyB4OiAxMCwgeTogMTAgfSB9XG4gICAgICAgIH1cbiAgICApO1xufVxuXG5QaXhlbGF0ZUZpbHRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuQWJzdHJhY3RGaWx0ZXIucHJvdG90eXBlKTtcblBpeGVsYXRlRmlsdGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFBpeGVsYXRlRmlsdGVyO1xubW9kdWxlLmV4cG9ydHMgPSBQaXhlbGF0ZUZpbHRlcjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoUGl4ZWxhdGVGaWx0ZXIucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogVGhpcyBhIHBvaW50IHRoYXQgZGVzY3JpYmVzIHRoZSBzaXplIG9mIHRoZSBibG9ja3MuXG4gICAgICogeCBpcyB0aGUgd2lkdGggb2YgdGhlIGJsb2NrIGFuZCB5IGlzIHRoZSBoZWlnaHQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlBvaW50fVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuUGl4ZWxhdGVGaWx0ZXIjXG4gICAgICovXG4gICAgc2l6ZToge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVuaWZvcm1zLnBpeGVsU2l6ZS52YWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudW5pZm9ybXMucGl4ZWxTaXplLnZhbHVlID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG59KTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vLi4vY29yZScpO1xuLy8gQHNlZSBodHRwczovL2dpdGh1Yi5jb20vc3Vic3RhY2svYnJmcy9pc3N1ZXMvMjVcblxuXG4vKipcbiAqIEFuIFJHQiBTcGxpdCBGaWx0ZXIuXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLkFic3RyYWN0RmlsdGVyXG4gKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzXG4gKi9cbmZ1bmN0aW9uIFJHQlNwbGl0RmlsdGVyKClcbntcbiAgICBjb3JlLkFic3RyYWN0RmlsdGVyLmNhbGwodGhpcyxcbiAgICAgICAgLy8gdmVydGV4IHNoYWRlclxuICAgICAgICBudWxsLFxuICAgICAgICAvLyBmcmFnbWVudCBzaGFkZXJcbiAgICAgICAgXCJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcXG5cXG52YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDtcXG5cXG51bmlmb3JtIHNhbXBsZXIyRCB1U2FtcGxlcjtcXG51bmlmb3JtIHZlYzQgZGltZW5zaW9ucztcXG51bmlmb3JtIHZlYzIgcmVkO1xcbnVuaWZvcm0gdmVjMiBncmVlbjtcXG51bmlmb3JtIHZlYzIgYmx1ZTtcXG5cXG52b2lkIG1haW4odm9pZClcXG57XFxuICAgZ2xfRnJhZ0NvbG9yLnIgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZUZXh0dXJlQ29vcmQgKyByZWQvZGltZW5zaW9ucy54eSkucjtcXG4gICBnbF9GcmFnQ29sb3IuZyA9IHRleHR1cmUyRCh1U2FtcGxlciwgdlRleHR1cmVDb29yZCArIGdyZWVuL2RpbWVuc2lvbnMueHkpLmc7XFxuICAgZ2xfRnJhZ0NvbG9yLmIgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZUZXh0dXJlQ29vcmQgKyBibHVlL2RpbWVuc2lvbnMueHkpLmI7XFxuICAgZ2xfRnJhZ0NvbG9yLmEgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZUZXh0dXJlQ29vcmQpLmE7XFxufVxcblwiLFxuICAgICAgICAvLyBjdXN0b20gdW5pZm9ybXNcbiAgICAgICAge1xuICAgICAgICAgICAgcmVkOiAgICAgICAgeyB0eXBlOiAndjInLCB2YWx1ZTogeyB4OiAyMCwgeTogMjAgfSB9LFxuICAgICAgICAgICAgZ3JlZW46ICAgICAgeyB0eXBlOiAndjInLCB2YWx1ZTogeyB4OiAtMjAsIHk6IDIwIH0gfSxcbiAgICAgICAgICAgIGJsdWU6ICAgICAgIHsgdHlwZTogJ3YyJywgdmFsdWU6IHsgeDogMjAsIHk6IC0yMCB9IH0sXG4gICAgICAgICAgICBkaW1lbnNpb25zOiB7IHR5cGU6ICc0ZnYnLCB2YWx1ZTogWzAsIDAsIDAsIDBdIH1cbiAgICAgICAgfVxuICAgICk7XG59XG5cblJHQlNwbGl0RmlsdGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoY29yZS5BYnN0cmFjdEZpbHRlci5wcm90b3R5cGUpO1xuUkdCU3BsaXRGaWx0ZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gUkdCU3BsaXRGaWx0ZXI7XG5tb2R1bGUuZXhwb3J0cyA9IFJHQlNwbGl0RmlsdGVyO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhSR0JTcGxpdEZpbHRlci5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBSZWQgY2hhbm5lbCBvZmZzZXQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlBvaW50fVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuUkdCU3BsaXRGaWx0ZXIjXG4gICAgICovXG4gICAgcmVkOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudW5pZm9ybXMucmVkLnZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy5yZWQudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBHcmVlbiBjaGFubmVsIG9mZnNldC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuUG9pbnR9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5SR0JTcGxpdEZpbHRlciNcbiAgICAgKi9cbiAgICBncmVlbjoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVuaWZvcm1zLmdyZWVuLnZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy5ncmVlbi52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIEJsdWUgb2Zmc2V0LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5Qb2ludH1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLlJHQlNwbGl0RmlsdGVyI1xuICAgICAqL1xuICAgIGJsdWU6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy51bmlmb3Jtcy5ibHVlLnZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy5ibHVlLnZhbHVlID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG59KTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vLi4vY29yZScpO1xuLy8gQHNlZSBodHRwczovL2dpdGh1Yi5jb20vc3Vic3RhY2svYnJmcy9pc3N1ZXMvMjVcblxuXG4vKipcbiAqIFRoaXMgYXBwbGllcyBhIHNlcGlhIGVmZmVjdCB0byB5b3VyIERpc3BsYXkgT2JqZWN0cy5cbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQWJzdHJhY3RGaWx0ZXJcbiAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnNcbiAqL1xuZnVuY3Rpb24gU2VwaWFGaWx0ZXIoKVxue1xuICAgIGNvcmUuQWJzdHJhY3RGaWx0ZXIuY2FsbCh0aGlzLFxuICAgICAgICAvLyB2ZXJ0ZXggc2hhZGVyXG4gICAgICAgIG51bGwsXG4gICAgICAgIC8vIGZyYWdtZW50IHNoYWRlclxuICAgICAgICBcInByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xcblxcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xcblxcbnVuaWZvcm0gc2FtcGxlcjJEIHVTYW1wbGVyO1xcbnVuaWZvcm0gZmxvYXQgc2VwaWE7XFxuXFxuY29uc3QgbWF0MyBzZXBpYU1hdHJpeCA9IG1hdDMoMC4zNTg4LCAwLjcwNDQsIDAuMTM2OCwgMC4yOTkwLCAwLjU4NzAsIDAuMTE0MCwgMC4yMzkyLCAwLjQ2OTYsIDAuMDkxMik7XFxuXFxudm9pZCBtYWluKHZvaWQpXFxue1xcbiAgIGdsX0ZyYWdDb2xvciA9IHRleHR1cmUyRCh1U2FtcGxlciwgdlRleHR1cmVDb29yZCk7XFxuICAgZ2xfRnJhZ0NvbG9yLnJnYiA9IG1peCggZ2xfRnJhZ0NvbG9yLnJnYiwgZ2xfRnJhZ0NvbG9yLnJnYiAqIHNlcGlhTWF0cml4LCBzZXBpYSk7XFxufVxcblwiLFxuICAgICAgICAvLyBjdXN0b20gdW5pZm9ybXNcbiAgICAgICAge1xuICAgICAgICAgICAgc2VwaWE6IHsgdHlwZTogJzFmJywgdmFsdWU6IDEgfVxuICAgICAgICB9XG4gICAgKTtcbn1cblxuU2VwaWFGaWx0ZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShjb3JlLkFic3RyYWN0RmlsdGVyLnByb3RvdHlwZSk7XG5TZXBpYUZpbHRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBTZXBpYUZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gU2VwaWFGaWx0ZXI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKFNlcGlhRmlsdGVyLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFRoZSBzdHJlbmd0aCBvZiB0aGUgc2VwaWEuIGAxYCB3aWxsIGFwcGx5IHRoZSBmdWxsIHNlcGlhIGVmZmVjdCwgYW5kXG4gICAgICogYDBgIHdpbGwgbWFrZSB0aGUgb2JqZWN0IGl0cyBub3JtYWwgY29sb3IuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5TZXBpYUZpbHRlciNcbiAgICAgKi9cbiAgICBzZXBpYToge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVuaWZvcm1zLnNlcGlhLnZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy5zZXBpYS52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfVxufSk7XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uLy4uL2NvcmUnKTtcbi8vIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL3N1YnN0YWNrL2JyZnMvaXNzdWVzLzI1XG5cblxuLyoqXG4gKiBUaGUgQ29sb3JNYXRyaXhGaWx0ZXIgY2xhc3MgbGV0cyB5b3UgYXBwbHkgYSA0eDQgbWF0cml4IHRyYW5zZm9ybWF0aW9uIG9uIHRoZSBSR0JBXG4gKiBjb2xvciBhbmQgYWxwaGEgdmFsdWVzIG9mIGV2ZXJ5IHBpeGVsIG9uIHlvdXIgZGlzcGxheU9iamVjdCB0byBwcm9kdWNlIGEgcmVzdWx0XG4gKiB3aXRoIGEgbmV3IHNldCBvZiBSR0JBIGNvbG9yIGFuZCBhbHBoYSB2YWx1ZXMuIEl0J3MgcHJldHR5IHBvd2VyZnVsIVxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5BYnN0cmFjdEZpbHRlclxuICogQG1lbWJlcm9mIFBJWEkuZmlsdGVyc1xuICovXG5mdW5jdGlvbiBTaG9ja3dhdmVGaWx0ZXIoKVxue1xuICAgIGNvcmUuQWJzdHJhY3RGaWx0ZXIuY2FsbCh0aGlzLFxuICAgICAgICAvLyB2ZXJ0ZXggc2hhZGVyXG4gICAgICAgIG51bGwsXG4gICAgICAgIC8vIGZyYWdtZW50IHNoYWRlclxuICAgICAgICBcInByZWNpc2lvbiBsb3dwIGZsb2F0O1xcblxcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xcblxcbnVuaWZvcm0gc2FtcGxlcjJEIHVTYW1wbGVyO1xcblxcbnVuaWZvcm0gdmVjMiBjZW50ZXI7XFxudW5pZm9ybSB2ZWMzIHBhcmFtczsgLy8gMTAuMCwgMC44LCAwLjFcXG51bmlmb3JtIGZsb2F0IHRpbWU7XFxuXFxudm9pZCBtYWluKClcXG57XFxuICAgIHZlYzIgdXYgPSB2VGV4dHVyZUNvb3JkO1xcbiAgICB2ZWMyIHRleENvb3JkID0gdXY7XFxuXFxuICAgIGZsb2F0IGRpc3QgPSBkaXN0YW5jZSh1diwgY2VudGVyKTtcXG5cXG4gICAgaWYgKCAoZGlzdCA8PSAodGltZSArIHBhcmFtcy56KSkgJiYgKGRpc3QgPj0gKHRpbWUgLSBwYXJhbXMueikpIClcXG4gICAge1xcbiAgICAgICAgZmxvYXQgZGlmZiA9IChkaXN0IC0gdGltZSk7XFxuICAgICAgICBmbG9hdCBwb3dEaWZmID0gMS4wIC0gcG93KGFicyhkaWZmKnBhcmFtcy54KSwgcGFyYW1zLnkpO1xcblxcbiAgICAgICAgZmxvYXQgZGlmZlRpbWUgPSBkaWZmICAqIHBvd0RpZmY7XFxuICAgICAgICB2ZWMyIGRpZmZVViA9IG5vcm1hbGl6ZSh1diAtIGNlbnRlcik7XFxuICAgICAgICB0ZXhDb29yZCA9IHV2ICsgKGRpZmZVViAqIGRpZmZUaW1lKTtcXG4gICAgfVxcblxcbiAgICBnbF9GcmFnQ29sb3IgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHRleENvb3JkKTtcXG59XFxuXCIsXG4gICAgICAgIC8vIGN1c3RvbSB1bmlmb3Jtc1xuICAgICAgICB7XG4gICAgICAgICAgICBjZW50ZXI6IHsgdHlwZTogJ3YyJywgdmFsdWU6IHsgeDogMC41LCB5OiAwLjUgfSB9LFxuICAgICAgICAgICAgcGFyYW1zOiB7IHR5cGU6ICd2MycsIHZhbHVlOiB7IHg6IDEwLCB5OiAwLjgsIHo6IDAuMSB9IH0sXG4gICAgICAgICAgICB0aW1lOiB7IHR5cGU6ICcxZicsIHZhbHVlOiAwIH1cbiAgICAgICAgfVxuICAgICk7XG59XG5cblNob2Nrd2F2ZUZpbHRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuQWJzdHJhY3RGaWx0ZXIucHJvdG90eXBlKTtcblNob2Nrd2F2ZUZpbHRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBTaG9ja3dhdmVGaWx0ZXI7XG5tb2R1bGUuZXhwb3J0cyA9IFNob2Nrd2F2ZUZpbHRlcjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoU2hvY2t3YXZlRmlsdGVyLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIGNlbnRlciBvZiB0aGUgc2hvY2t3YXZlIGluIG5vcm1hbGl6ZWQgc2NyZWVuIGNvb3Jkcy4gVGhhdCBpc1xuICAgICAqICgwLDApIGlzIHRoZSB0b3AtbGVmdCBhbmQgKDEsMSkgaXMgdGhlIGJvdHRvbSByaWdodC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge29iamVjdDxzdHJpbmcsIG51bWJlcj59XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5TaG9ja3dhdmVGaWx0ZXIjXG4gICAgICovXG4gICAgY2VudGVyOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudW5pZm9ybXMuY2VudGVyLnZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy5jZW50ZXIudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgcGFyYW1zIG9mIHRoZSBzaG9ja3dhdmUuIFRoZXNlIG1vZGlmeSB0aGUgbG9vayBhbmQgYmVoYXZpb3Igb2ZcbiAgICAgKiB0aGUgc2hvY2t3YXZlIGFzIGl0IHJpcHBsZXMgb3V0LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7b2JqZWN0PHN0cmluZywgbnVtYmVyPn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLlNob2Nrd2F2ZUZpbHRlciNcbiAgICAgKi9cbiAgICBwYXJhbXM6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy51bmlmb3Jtcy5wYXJhbXMudmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLnBhcmFtcy52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfSxcbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBlbGFwc2VkIHRpbWUgb2YgdGhlIHNob2Nrd2F2ZS4gVGhpcyBjb250cm9scyB0aGUgc3BlZWQgYXQgd2hpY2hcbiAgICAgKiB0aGUgc2hvY2t3YXZlIHJpcHBsZXMgb3V0LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuU2hvY2t3YXZlRmlsdGVyI1xuICAgICAqL1xuICAgIHRpbWU6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy51bmlmb3Jtcy50aW1lLnZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy50aW1lLnZhbHVlID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG59KTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vLi4vY29yZScpO1xuLy8gQHNlZSBodHRwczovL2dpdGh1Yi5jb20vc3Vic3RhY2svYnJmcy9pc3N1ZXMvMjVcblxuXG4vKipcbiAqIEBhdXRob3IgVmljbyBAdmljb2NvdGVhXG4gKiBvcmlnaW5hbCBmaWx0ZXIgaHR0cHM6Ly9naXRodWIuY29tL2V2YW53L2dsZnguanMvYmxvYi9tYXN0ZXIvc3JjL2ZpbHRlcnMvYmx1ci90aWx0c2hpZnQuanMgYnkgRXZhbiBXYWxsYWNlIDogaHR0cDovL21hZGVieWV2YW4uY29tL1xuICovXG5cbi8qKlxuICogQSBUaWx0U2hpZnRBeGlzRmlsdGVyLlxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5BYnN0cmFjdEZpbHRlclxuICogQG1lbWJlcm9mIFBJWEkuZmlsdGVyc1xuICovXG5mdW5jdGlvbiBUaWx0U2hpZnRBeGlzRmlsdGVyKClcbntcbiAgICBjb3JlLkFic3RyYWN0RmlsdGVyLmNhbGwodGhpcyxcbiAgICAgICAgLy8gdmVydGV4IHNoYWRlclxuICAgICAgICBudWxsLFxuICAgICAgICAvLyBmcmFnbWVudCBzaGFkZXJcbiAgICAgICAgXCJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcXG5cXG52YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDtcXG5cXG51bmlmb3JtIHNhbXBsZXIyRCB1U2FtcGxlcjtcXG51bmlmb3JtIGZsb2F0IGJsdXI7XFxudW5pZm9ybSBmbG9hdCBncmFkaWVudEJsdXI7XFxudW5pZm9ybSB2ZWMyIHN0YXJ0O1xcbnVuaWZvcm0gdmVjMiBlbmQ7XFxudW5pZm9ybSB2ZWMyIGRlbHRhO1xcbnVuaWZvcm0gdmVjMiB0ZXhTaXplO1xcblxcbmZsb2F0IHJhbmRvbSh2ZWMzIHNjYWxlLCBmbG9hdCBzZWVkKVxcbntcXG4gICAgcmV0dXJuIGZyYWN0KHNpbihkb3QoZ2xfRnJhZ0Nvb3JkLnh5eiArIHNlZWQsIHNjYWxlKSkgKiA0Mzc1OC41NDUzICsgc2VlZCk7XFxufVxcblxcbnZvaWQgbWFpbih2b2lkKVxcbntcXG4gICAgdmVjNCBjb2xvciA9IHZlYzQoMC4wKTtcXG4gICAgZmxvYXQgdG90YWwgPSAwLjA7XFxuXFxuICAgIGZsb2F0IG9mZnNldCA9IHJhbmRvbSh2ZWMzKDEyLjk4OTgsIDc4LjIzMywgMTUxLjcxODIpLCAwLjApO1xcbiAgICB2ZWMyIG5vcm1hbCA9IG5vcm1hbGl6ZSh2ZWMyKHN0YXJ0LnkgLSBlbmQueSwgZW5kLnggLSBzdGFydC54KSk7XFxuICAgIGZsb2F0IHJhZGl1cyA9IHNtb290aHN0ZXAoMC4wLCAxLjAsIGFicyhkb3QodlRleHR1cmVDb29yZCAqIHRleFNpemUgLSBzdGFydCwgbm9ybWFsKSkgLyBncmFkaWVudEJsdXIpICogYmx1cjtcXG5cXG4gICAgZm9yIChmbG9hdCB0ID0gLTMwLjA7IHQgPD0gMzAuMDsgdCsrKVxcbiAgICB7XFxuICAgICAgICBmbG9hdCBwZXJjZW50ID0gKHQgKyBvZmZzZXQgLSAwLjUpIC8gMzAuMDtcXG4gICAgICAgIGZsb2F0IHdlaWdodCA9IDEuMCAtIGFicyhwZXJjZW50KTtcXG4gICAgICAgIHZlYzQgc2FtcGxlID0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2VGV4dHVyZUNvb3JkICsgZGVsdGEgLyB0ZXhTaXplICogcGVyY2VudCAqIHJhZGl1cyk7XFxuICAgICAgICBzYW1wbGUucmdiICo9IHNhbXBsZS5hO1xcbiAgICAgICAgY29sb3IgKz0gc2FtcGxlICogd2VpZ2h0O1xcbiAgICAgICAgdG90YWwgKz0gd2VpZ2h0O1xcbiAgICB9XFxuXFxuICAgIGdsX0ZyYWdDb2xvciA9IGNvbG9yIC8gdG90YWw7XFxuICAgIGdsX0ZyYWdDb2xvci5yZ2IgLz0gZ2xfRnJhZ0NvbG9yLmEgKyAwLjAwMDAxO1xcbn1cXG5cIixcbiAgICAgICAgLy8gY3VzdG9tIHVuaWZvcm1zXG4gICAgICAgIHtcbiAgICAgICAgICAgIGJsdXI6ICAgICAgICAgICB7IHR5cGU6ICcxZicsIHZhbHVlOiAxMDAgfSxcbiAgICAgICAgICAgIGdyYWRpZW50Qmx1cjogICB7IHR5cGU6ICcxZicsIHZhbHVlOiA2MDAgfSxcbiAgICAgICAgICAgIHN0YXJ0OiAgICAgICAgICB7IHR5cGU6ICd2MicsIHZhbHVlOiB7IHg6IDAsICAgIHk6IHdpbmRvdy5pbm5lckhlaWdodCAvIDIgfSB9LFxuICAgICAgICAgICAgZW5kOiAgICAgICAgICAgIHsgdHlwZTogJ3YyJywgdmFsdWU6IHsgeDogNjAwLCAgeTogd2luZG93LmlubmVySGVpZ2h0IC8gMiB9IH0sXG4gICAgICAgICAgICBkZWx0YTogICAgICAgICAgeyB0eXBlOiAndjInLCB2YWx1ZTogeyB4OiAzMCwgICB5OiAzMCB9IH0sXG4gICAgICAgICAgICB0ZXhTaXplOiAgICAgICAgeyB0eXBlOiAndjInLCB2YWx1ZTogeyB4OiB3aW5kb3cuaW5uZXJXaWR0aCwgeTogd2luZG93LmlubmVySGVpZ2h0IH0gfVxuICAgICAgICB9XG4gICAgKTtcblxuICAgIHRoaXMudXBkYXRlRGVsdGEoKTtcbn1cblxuVGlsdFNoaWZ0QXhpc0ZpbHRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuQWJzdHJhY3RGaWx0ZXIucHJvdG90eXBlKTtcblRpbHRTaGlmdEF4aXNGaWx0ZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gVGlsdFNoaWZ0QXhpc0ZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gVGlsdFNoaWZ0QXhpc0ZpbHRlcjtcblxuLyoqXG4gKiBVcGRhdGVzIHRoZSBmaWx0ZXIgZGVsdGEgdmFsdWVzLlxuICogVGhpcyBpcyBvdmVycmlkZGVuIGluIHRoZSBYIGFuZCBZIGZpbHRlcnMsIGRvZXMgbm90aGluZyBmb3IgdGhpcyBjbGFzcy5cbiAqXG4gKi9cblRpbHRTaGlmdEF4aXNGaWx0ZXIucHJvdG90eXBlLnVwZGF0ZURlbHRhID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLnVuaWZvcm1zLmRlbHRhLnZhbHVlLnggPSAwO1xuICAgIHRoaXMudW5pZm9ybXMuZGVsdGEudmFsdWUueSA9IDA7XG59O1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhUaWx0U2hpZnRBeGlzRmlsdGVyLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFRoZSBzdHJlbmd0aCBvZiB0aGUgYmx1ci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLlRpbHRTaGlmdEF4aXNGaWx0ZXIjXG4gICAgICovXG4gICAgYmx1cjoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVuaWZvcm1zLmJsdXIudmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLmJsdXIudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBUaGUgc3RyZW5ndGggb2YgdGhlIGdyYWRpZW50IGJsdXIuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5UaWx0U2hpZnRBeGlzRmlsdGVyI1xuICAgICAqL1xuICAgIGdyYWRpZW50Qmx1cjoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVuaWZvcm1zLmdyYWRpZW50Qmx1ci52YWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudW5pZm9ybXMuZ3JhZGllbnRCbHVyLnZhbHVlID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVGhlIFggdmFsdWUgdG8gc3RhcnQgdGhlIGVmZmVjdCBhdC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuUG9pbnR9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5UaWx0U2hpZnRBeGlzRmlsdGVyI1xuICAgICAqL1xuICAgIHN0YXJ0OiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudW5pZm9ybXMuc3RhcnQudmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLnN0YXJ0LnZhbHVlID0gdmFsdWU7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZURlbHRhKCk7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVGhlIFggdmFsdWUgdG8gZW5kIHRoZSBlZmZlY3QgYXQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlBvaW50fVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuVGlsdFNoaWZ0QXhpc0ZpbHRlciNcbiAgICAgKi9cbiAgICBlbmQ6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy51bmlmb3Jtcy5lbmQudmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLmVuZC52YWx1ZSA9IHZhbHVlO1xuICAgICAgICAgICAgdGhpcy51cGRhdGVEZWx0YSgpO1xuICAgICAgICB9XG4gICAgfVxufSk7XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uLy4uL2NvcmUnKSxcbiAgICBUaWx0U2hpZnRYRmlsdGVyID0gcmVxdWlyZSgnLi9UaWx0U2hpZnRYRmlsdGVyJyksXG4gICAgVGlsdFNoaWZ0WUZpbHRlciA9IHJlcXVpcmUoJy4vVGlsdFNoaWZ0WUZpbHRlcicpO1xuXG4vKipcbiAqIEBhdXRob3IgVmljbyBAdmljb2NvdGVhXG4gKiBvcmlnaW5hbCBmaWx0ZXIgaHR0cHM6Ly9naXRodWIuY29tL2V2YW53L2dsZnguanMvYmxvYi9tYXN0ZXIvc3JjL2ZpbHRlcnMvYmx1ci90aWx0c2hpZnQuanMgYnkgRXZhbiBXYWxsYWNlIDogaHR0cDovL21hZGVieWV2YW4uY29tL1xuICovXG5cbi8qKlxuICogQSBUaWx0U2hpZnQgRmlsdGVyLiBNYW5hZ2VzIHRoZSBwYXNzIG9mIGJvdGggYSBUaWx0U2hpZnRYRmlsdGVyIGFuZCBUaWx0U2hpZnRZRmlsdGVyLlxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5BYnN0cmFjdEZpbHRlclxuICogQG1lbWJlcm9mIFBJWEkuZmlsdGVyc1xuICovXG5mdW5jdGlvbiBUaWx0U2hpZnRGaWx0ZXIoKVxue1xuICAgIGNvcmUuQWJzdHJhY3RGaWx0ZXIuY2FsbCh0aGlzKTtcblxuICAgIHRoaXMudGlsdFNoaWZ0WEZpbHRlciA9IG5ldyBUaWx0U2hpZnRYRmlsdGVyKCk7XG4gICAgdGhpcy50aWx0U2hpZnRZRmlsdGVyID0gbmV3IFRpbHRTaGlmdFlGaWx0ZXIoKTtcbn1cblxuVGlsdFNoaWZ0RmlsdGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoY29yZS5BYnN0cmFjdEZpbHRlci5wcm90b3R5cGUpO1xuVGlsdFNoaWZ0RmlsdGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFRpbHRTaGlmdEZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gVGlsdFNoaWZ0RmlsdGVyO1xuXG5UaWx0U2hpZnRGaWx0ZXIucHJvdG90eXBlLmFwcGx5RmlsdGVyID0gZnVuY3Rpb24gKHJlbmRlcmVyLCBpbnB1dCwgb3V0cHV0KVxue1xuICAgIHZhciByZW5kZXJUYXJnZXQgPSByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLmdldFJlbmRlclRhcmdldCh0cnVlKTtcblxuICAgIHRoaXMudGlsdFNoaWZ0WEZpbHRlci5hcHBseUZpbHRlcihyZW5kZXJlciwgaW5wdXQsIHJlbmRlclRhcmdldCk7XG5cbiAgICB0aGlzLnRpbHRTaGlmdFlGaWx0ZXIuYXBwbHlGaWx0ZXIocmVuZGVyZXIsIHJlbmRlclRhcmdldCwgb3V0cHV0KTtcblxuICAgIHJlbmRlcmVyLmZpbHRlck1hbmFnZXIucmV0dXJuUmVuZGVyVGFyZ2V0KHJlbmRlclRhcmdldCk7XG59O1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhUaWx0U2hpZnRGaWx0ZXIucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogVGhlIHN0cmVuZ3RoIG9mIHRoZSBibHVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuVGlsdFNoaWZ0RmlsdGVyI1xuICAgICAqL1xuICAgIGJsdXI6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy50aWx0U2hpZnRYRmlsdGVyLmJsdXI7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnRpbHRTaGlmdFhGaWx0ZXIuYmx1ciA9IHRoaXMudGlsdFNoaWZ0WUZpbHRlci5ibHVyID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVGhlIHN0cmVuZ3RoIG9mIHRoZSBncmFkaWVudCBibHVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuVGlsdFNoaWZ0RmlsdGVyI1xuICAgICAqL1xuICAgIGdyYWRpZW50Qmx1cjoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnRpbHRTaGlmdFhGaWx0ZXIuZ3JhZGllbnRCbHVyO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy50aWx0U2hpZnRYRmlsdGVyLmdyYWRpZW50Qmx1ciA9IHRoaXMudGlsdFNoaWZ0WUZpbHRlci5ncmFkaWVudEJsdXIgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBUaGUgWSB2YWx1ZSB0byBzdGFydCB0aGUgZWZmZWN0IGF0LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuVGlsdFNoaWZ0RmlsdGVyI1xuICAgICAqL1xuICAgIHN0YXJ0OiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudGlsdFNoaWZ0WEZpbHRlci5zdGFydDtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudGlsdFNoaWZ0WEZpbHRlci5zdGFydCA9IHRoaXMudGlsdFNoaWZ0WUZpbHRlci5zdGFydCA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFRoZSBZIHZhbHVlIHRvIGVuZCB0aGUgZWZmZWN0IGF0LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuVGlsdFNoaWZ0RmlsdGVyI1xuICAgICAqL1xuICAgIGVuZDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnRpbHRTaGlmdFhGaWx0ZXIuZW5kO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy50aWx0U2hpZnRYRmlsdGVyLmVuZCA9IHRoaXMudGlsdFNoaWZ0WUZpbHRlci5lbmQgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuIiwidmFyIFRpbHRTaGlmdEF4aXNGaWx0ZXIgPSByZXF1aXJlKCcuL1RpbHRTaGlmdEF4aXNGaWx0ZXInKTtcblxuLyoqXG4gKiBAYXV0aG9yIFZpY28gQHZpY29jb3RlYVxuICogb3JpZ2luYWwgZmlsdGVyIGh0dHBzOi8vZ2l0aHViLmNvbS9ldmFudy9nbGZ4LmpzL2Jsb2IvbWFzdGVyL3NyYy9maWx0ZXJzL2JsdXIvdGlsdHNoaWZ0LmpzIGJ5IEV2YW4gV2FsbGFjZSA6IGh0dHA6Ly9tYWRlYnlldmFuLmNvbS9cbiAqL1xuXG4vKipcbiAqIEEgVGlsdFNoaWZ0WEZpbHRlci5cbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuVGlsdFNoaWZ0QXhpc0ZpbHRlclxuICogQG1lbWJlcm9mIFBJWEkuZmlsdGVyc1xuICovXG5mdW5jdGlvbiBUaWx0U2hpZnRYRmlsdGVyKClcbntcbiAgICBUaWx0U2hpZnRBeGlzRmlsdGVyLmNhbGwodGhpcyk7XG59XG5cblRpbHRTaGlmdFhGaWx0ZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShUaWx0U2hpZnRBeGlzRmlsdGVyLnByb3RvdHlwZSk7XG5UaWx0U2hpZnRYRmlsdGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFRpbHRTaGlmdFhGaWx0ZXI7XG5tb2R1bGUuZXhwb3J0cyA9IFRpbHRTaGlmdFhGaWx0ZXI7XG5cbi8qKlxuICogVXBkYXRlcyB0aGUgZmlsdGVyIGRlbHRhIHZhbHVlcy5cbiAqXG4gKi9cblRpbHRTaGlmdFhGaWx0ZXIucHJvdG90eXBlLnVwZGF0ZURlbHRhID0gZnVuY3Rpb24gKClcbntcbiAgICB2YXIgZHggPSB0aGlzLnVuaWZvcm1zLmVuZC52YWx1ZS54IC0gdGhpcy51bmlmb3Jtcy5zdGFydC52YWx1ZS54O1xuICAgIHZhciBkeSA9IHRoaXMudW5pZm9ybXMuZW5kLnZhbHVlLnkgLSB0aGlzLnVuaWZvcm1zLnN0YXJ0LnZhbHVlLnk7XG4gICAgdmFyIGQgPSBNYXRoLnNxcnQoZHggKiBkeCArIGR5ICogZHkpO1xuXG4gICAgdGhpcy51bmlmb3Jtcy5kZWx0YS52YWx1ZS54ID0gZHggLyBkO1xuICAgIHRoaXMudW5pZm9ybXMuZGVsdGEudmFsdWUueSA9IGR5IC8gZDtcbn07XG4iLCJ2YXIgVGlsdFNoaWZ0QXhpc0ZpbHRlciA9IHJlcXVpcmUoJy4vVGlsdFNoaWZ0QXhpc0ZpbHRlcicpO1xuXG4vKipcbiAqIEBhdXRob3IgVmljbyBAdmljb2NvdGVhXG4gKiBvcmlnaW5hbCBmaWx0ZXIgaHR0cHM6Ly9naXRodWIuY29tL2V2YW53L2dsZnguanMvYmxvYi9tYXN0ZXIvc3JjL2ZpbHRlcnMvYmx1ci90aWx0c2hpZnQuanMgYnkgRXZhbiBXYWxsYWNlIDogaHR0cDovL21hZGVieWV2YW4uY29tL1xuICovXG5cbi8qKlxuICogQSBUaWx0U2hpZnRZRmlsdGVyLlxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5UaWx0U2hpZnRBeGlzRmlsdGVyXG4gKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzXG4gKi9cbmZ1bmN0aW9uIFRpbHRTaGlmdFlGaWx0ZXIoKVxue1xuICAgIFRpbHRTaGlmdEF4aXNGaWx0ZXIuY2FsbCh0aGlzKTtcbn1cblxuVGlsdFNoaWZ0WUZpbHRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFRpbHRTaGlmdEF4aXNGaWx0ZXIucHJvdG90eXBlKTtcblRpbHRTaGlmdFlGaWx0ZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gVGlsdFNoaWZ0WUZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gVGlsdFNoaWZ0WUZpbHRlcjtcblxuLyoqXG4gKiBVcGRhdGVzIHRoZSBmaWx0ZXIgZGVsdGEgdmFsdWVzLlxuICpcbiAqL1xuVGlsdFNoaWZ0WUZpbHRlci5wcm90b3R5cGUudXBkYXRlRGVsdGEgPSBmdW5jdGlvbiAoKVxue1xuICAgIHZhciBkeCA9IHRoaXMudW5pZm9ybXMuZW5kLnZhbHVlLnggLSB0aGlzLnVuaWZvcm1zLnN0YXJ0LnZhbHVlLng7XG4gICAgdmFyIGR5ID0gdGhpcy51bmlmb3Jtcy5lbmQudmFsdWUueSAtIHRoaXMudW5pZm9ybXMuc3RhcnQudmFsdWUueTtcbiAgICB2YXIgZCA9IE1hdGguc3FydChkeCAqIGR4ICsgZHkgKiBkeSk7XG5cbiAgICB0aGlzLnVuaWZvcm1zLmRlbHRhLnZhbHVlLnggPSAtZHkgLyBkO1xuICAgIHRoaXMudW5pZm9ybXMuZGVsdGEudmFsdWUueSA9IGR4IC8gZDtcbn07XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uLy4uL2NvcmUnKTtcbi8vIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL3N1YnN0YWNrL2JyZnMvaXNzdWVzLzI1XG5cblxuLyoqXG4gKiBUaGlzIGZpbHRlciBhcHBsaWVzIGEgdHdpc3QgZWZmZWN0IG1ha2luZyBkaXNwbGF5IG9iamVjdHMgYXBwZWFyIHR3aXN0ZWQgaW4gdGhlIGdpdmVuIGRpcmVjdGlvbi5cbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQWJzdHJhY3RGaWx0ZXJcbiAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnNcbiAqL1xuZnVuY3Rpb24gVHdpc3RGaWx0ZXIoKVxue1xuICAgIGNvcmUuQWJzdHJhY3RGaWx0ZXIuY2FsbCh0aGlzLFxuICAgICAgICAvLyB2ZXJ0ZXggc2hhZGVyXG4gICAgICAgIG51bGwsXG4gICAgICAgIC8vIGZyYWdtZW50IHNoYWRlclxuICAgICAgICBcInByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xcblxcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xcblxcbnVuaWZvcm0gc2FtcGxlcjJEIHVTYW1wbGVyO1xcbnVuaWZvcm0gZmxvYXQgcmFkaXVzO1xcbnVuaWZvcm0gZmxvYXQgYW5nbGU7XFxudW5pZm9ybSB2ZWMyIG9mZnNldDtcXG5cXG52b2lkIG1haW4odm9pZClcXG57XFxuICAgdmVjMiBjb29yZCA9IHZUZXh0dXJlQ29vcmQgLSBvZmZzZXQ7XFxuICAgZmxvYXQgZGlzdCA9IGxlbmd0aChjb29yZCk7XFxuXFxuICAgaWYgKGRpc3QgPCByYWRpdXMpXFxuICAge1xcbiAgICAgICBmbG9hdCByYXRpbyA9IChyYWRpdXMgLSBkaXN0KSAvIHJhZGl1cztcXG4gICAgICAgZmxvYXQgYW5nbGVNb2QgPSByYXRpbyAqIHJhdGlvICogYW5nbGU7XFxuICAgICAgIGZsb2F0IHMgPSBzaW4oYW5nbGVNb2QpO1xcbiAgICAgICBmbG9hdCBjID0gY29zKGFuZ2xlTW9kKTtcXG4gICAgICAgY29vcmQgPSB2ZWMyKGNvb3JkLnggKiBjIC0gY29vcmQueSAqIHMsIGNvb3JkLnggKiBzICsgY29vcmQueSAqIGMpO1xcbiAgIH1cXG5cXG4gICBnbF9GcmFnQ29sb3IgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIGNvb3JkK29mZnNldCk7XFxufVxcblwiLFxuICAgICAgICAvLyBjdXN0b20gdW5pZm9ybXNcbiAgICAgICAge1xuICAgICAgICAgICAgcmFkaXVzOiAgICAgeyB0eXBlOiAnMWYnLCB2YWx1ZTogMC41IH0sXG4gICAgICAgICAgICBhbmdsZTogICAgICB7IHR5cGU6ICcxZicsIHZhbHVlOiA1IH0sXG4gICAgICAgICAgICBvZmZzZXQ6ICAgICB7IHR5cGU6ICd2MicsIHZhbHVlOiB7IHg6IDAuNSwgeTogMC41IH0gfVxuICAgICAgICB9XG4gICAgKTtcbn1cblxuVHdpc3RGaWx0ZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShjb3JlLkFic3RyYWN0RmlsdGVyLnByb3RvdHlwZSk7XG5Ud2lzdEZpbHRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBUd2lzdEZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gVHdpc3RGaWx0ZXI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKFR3aXN0RmlsdGVyLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFRoaXMgcG9pbnQgZGVzY3JpYmVzIHRoZSB0aGUgb2Zmc2V0IG9mIHRoZSB0d2lzdC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuUG9pbnR9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5Ud2lzdEZpbHRlciNcbiAgICAgKi9cbiAgICBvZmZzZXQ6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy51bmlmb3Jtcy5vZmZzZXQudmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLm9mZnNldC52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFRoaXMgcmFkaXVzIG9mIHRoZSB0d2lzdC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLlR3aXN0RmlsdGVyI1xuICAgICAqL1xuICAgIHJhZGl1czoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVuaWZvcm1zLnJhZGl1cy52YWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudW5pZm9ybXMucmFkaXVzLnZhbHVlID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVGhpcyBhbmdsZSBvZiB0aGUgdHdpc3QuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5Ud2lzdEZpbHRlciNcbiAgICAgKi9cbiAgICBhbmdsZToge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVuaWZvcm1zLmFuZ2xlLnZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy5hbmdsZS52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfVxufSk7XG4iLCIvLyBydW4gdGhlIHBvbHlmaWxsc1xucmVxdWlyZSgnLi9wb2x5ZmlsbCcpO1xuXG52YXIgY29yZSA9IG1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9jb3JlJyk7XG5cbi8vIGFkZCBjb3JlIHBsdWdpbnMuXG5jb3JlLmV4dHJhcyAgICAgICAgID0gcmVxdWlyZSgnLi9leHRyYXMnKTtcbmNvcmUuZmlsdGVycyAgICAgICAgPSByZXF1aXJlKCcuL2ZpbHRlcnMnKTtcbmNvcmUuaW50ZXJhY3Rpb24gICAgPSByZXF1aXJlKCcuL2ludGVyYWN0aW9uJyk7XG5jb3JlLmxvYWRlcnMgICAgICAgID0gcmVxdWlyZSgnLi9sb2FkZXJzJyk7XG5jb3JlLm1lc2ggICAgICAgICAgID0gcmVxdWlyZSgnLi9tZXNoJyk7XG5jb3JlLmFjY2Vzc2liaWxpdHkgID0gcmVxdWlyZSgnLi9hY2Nlc3NpYmlsaXR5Jyk7XG5cbi8vIGV4cG9ydCBhIHByZW1hZGUgbG9hZGVyIGluc3RhbmNlXG4vKipcbiAqIEEgcHJlbWFkZSBpbnN0YW5jZSBvZiB0aGUgbG9hZGVyIHRoYXQgY2FuIGJlIHVzZWQgdG8gbG9hZGVyIHJlc291cmNlcy5cbiAqXG4gKiBAbmFtZSBsb2FkZXJcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcHJvcGVydHkge1BJWEkubG9hZGVycy5Mb2FkZXJ9XG4gKi9cbmNvcmUubG9hZGVyID0gbmV3IGNvcmUubG9hZGVycy5Mb2FkZXIoKTtcblxuLy8gbWl4aW4gdGhlIGRlcHJlY2F0aW9uIGZlYXR1cmVzLlxuT2JqZWN0LmFzc2lnbihjb3JlLCByZXF1aXJlKCcuL2RlcHJlY2F0aW9uJykpO1xuXG4vLyBBbHdheXMgZXhwb3J0IHBpeGkgZ2xvYmFsbHkuXG5nbG9iYWwuUElYSSA9IGNvcmU7XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uL2NvcmUnKTtcblxuLyoqXG4gKiBIb2xkcyBhbGwgaW5mb3JtYXRpb24gcmVsYXRlZCB0byBhbiBJbnRlcmFjdGlvbiBldmVudFxuICpcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWEkuaW50ZXJhY3Rpb25cbiAqL1xuZnVuY3Rpb24gSW50ZXJhY3Rpb25EYXRhKClcbntcbiAgICAvKipcbiAgICAgKiBUaGlzIHBvaW50IHN0b3JlcyB0aGUgZ2xvYmFsIGNvb3JkcyBvZiB3aGVyZSB0aGUgdG91Y2gvbW91c2UgZXZlbnQgaGFwcGVuZWRcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuUG9pbnR9XG4gICAgICovXG4gICAgdGhpcy5nbG9iYWwgPSBuZXcgY29yZS5Qb2ludCgpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHRhcmdldCBTcHJpdGUgdGhhdCB3YXMgaW50ZXJhY3RlZCB3aXRoXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlNwcml0ZX1cbiAgICAgKi9cbiAgICB0aGlzLnRhcmdldCA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBXaGVuIHBhc3NlZCB0byBhbiBldmVudCBoYW5kbGVyLCB0aGlzIHdpbGwgYmUgdGhlIG9yaWdpbmFsIERPTSBFdmVudCB0aGF0IHdhcyBjYXB0dXJlZFxuICAgICAqXG4gICAgICogQG1lbWJlciB7RXZlbnR9XG4gICAgICovXG4gICAgdGhpcy5vcmlnaW5hbEV2ZW50ID0gbnVsbDtcbn1cblxuSW50ZXJhY3Rpb25EYXRhLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IEludGVyYWN0aW9uRGF0YTtcbm1vZHVsZS5leHBvcnRzID0gSW50ZXJhY3Rpb25EYXRhO1xuXG4vKipcbiAqIFRoaXMgd2lsbCByZXR1cm4gdGhlIGxvY2FsIGNvb3JkaW5hdGVzIG9mIHRoZSBzcGVjaWZpZWQgZGlzcGxheU9iamVjdCBmb3IgdGhpcyBJbnRlcmFjdGlvbkRhdGFcbiAqXG4gKiBAcGFyYW0gZGlzcGxheU9iamVjdCB7UElYSS5EaXNwbGF5T2JqZWN0fSBUaGUgRGlzcGxheU9iamVjdCB0aGF0IHlvdSB3b3VsZCBsaWtlIHRoZSBsb2NhbCBjb29yZHMgb2ZmXG4gKiBAcGFyYW0gW3BvaW50XSB7UElYSS5Qb2ludH0gQSBQb2ludCBvYmplY3QgaW4gd2hpY2ggdG8gc3RvcmUgdGhlIHZhbHVlLCBvcHRpb25hbCAob3RoZXJ3aXNlIHdpbGwgY3JlYXRlIGEgbmV3IHBvaW50KVxuICogQHBhcmFtIFtnbG9iYWxQb3NdIHtQSVhJLlBvaW50fSBBIFBvaW50IG9iamVjdCBjb250YWluaW5nIHlvdXIgY3VzdG9tIGdsb2JhbCBjb29yZHMsIG9wdGlvbmFsIChvdGhlcndpc2Ugd2lsbCB1c2UgdGhlIGN1cnJlbnQgZ2xvYmFsIGNvb3JkcylcbiAqIEByZXR1cm4ge1BJWEkuUG9pbnR9IEEgcG9pbnQgY29udGFpbmluZyB0aGUgY29vcmRpbmF0ZXMgb2YgdGhlIEludGVyYWN0aW9uRGF0YSBwb3NpdGlvbiByZWxhdGl2ZSB0byB0aGUgRGlzcGxheU9iamVjdFxuICovXG5JbnRlcmFjdGlvbkRhdGEucHJvdG90eXBlLmdldExvY2FsUG9zaXRpb24gPSBmdW5jdGlvbiAoZGlzcGxheU9iamVjdCwgcG9pbnQsIGdsb2JhbFBvcylcbntcbiAgICByZXR1cm4gZGlzcGxheU9iamVjdC53b3JsZFRyYW5zZm9ybS5hcHBseUludmVyc2UoZ2xvYmFsUG9zIHx8IHRoaXMuZ2xvYmFsLCBwb2ludCk7XG59O1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi9jb3JlJyksXG4gICAgSW50ZXJhY3Rpb25EYXRhID0gcmVxdWlyZSgnLi9JbnRlcmFjdGlvbkRhdGEnKTtcblxuLy8gTWl4IGludGVyYWN0aXZlVGFyZ2V0IGludG8gY29yZS5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZVxuT2JqZWN0LmFzc2lnbihcbiAgICBjb3JlLkRpc3BsYXlPYmplY3QucHJvdG90eXBlLFxuICAgIHJlcXVpcmUoJy4vaW50ZXJhY3RpdmVUYXJnZXQnKVxuKTtcblxuLyoqXG4gKiBUaGUgaW50ZXJhY3Rpb24gbWFuYWdlciBkZWFscyB3aXRoIG1vdXNlIGFuZCB0b3VjaCBldmVudHMuIEFueSBEaXNwbGF5T2JqZWN0IGNhbiBiZSBpbnRlcmFjdGl2ZVxuICogaWYgaXRzIGludGVyYWN0aXZlIHBhcmFtZXRlciBpcyBzZXQgdG8gdHJ1ZVxuICogVGhpcyBtYW5hZ2VyIGFsc28gc3VwcG9ydHMgbXVsdGl0b3VjaC5cbiAqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJLmludGVyYWN0aW9uXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuQ2FudmFzUmVuZGVyZXJ8UElYSS5XZWJHTFJlbmRlcmVyfSBBIHJlZmVyZW5jZSB0byB0aGUgY3VycmVudCByZW5kZXJlclxuICogQHBhcmFtIFtvcHRpb25zXSB7b2JqZWN0fVxuICogQHBhcmFtIFtvcHRpb25zLmF1dG9QcmV2ZW50RGVmYXVsdD10cnVlXSB7Ym9vbGVhbn0gU2hvdWxkIHRoZSBtYW5hZ2VyIGF1dG9tYXRpY2FsbHkgcHJldmVudCBkZWZhdWx0IGJyb3dzZXIgYWN0aW9ucy5cbiAqIEBwYXJhbSBbb3B0aW9ucy5pbnRlcmFjdGlvbkZyZXF1ZW5jeT0xMF0ge251bWJlcn0gRnJlcXVlbmN5IGluY3JlYXNlcyB0aGUgaW50ZXJhY3Rpb24gZXZlbnRzIHdpbGwgYmUgY2hlY2tlZC5cbiAqL1xuZnVuY3Rpb24gSW50ZXJhY3Rpb25NYW5hZ2VyKHJlbmRlcmVyLCBvcHRpb25zKVxue1xuICAgIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuXG4gICAgLyoqXG4gICAgICogVGhlIHJlbmRlcmVyIHRoaXMgaW50ZXJhY3Rpb24gbWFuYWdlciB3b3JrcyBmb3IuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlN5c3RlbVJlbmRlcmVyfVxuICAgICAqL1xuICAgIHRoaXMucmVuZGVyZXIgPSByZW5kZXJlcjtcblxuICAgIC8qKlxuICAgICAqIFNob3VsZCBkZWZhdWx0IGJyb3dzZXIgYWN0aW9ucyBhdXRvbWF0aWNhbGx5IGJlIHByZXZlbnRlZC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICogQGRlZmF1bHQgdHJ1ZVxuICAgICAqL1xuICAgIHRoaXMuYXV0b1ByZXZlbnREZWZhdWx0ID0gb3B0aW9ucy5hdXRvUHJldmVudERlZmF1bHQgIT09IHVuZGVmaW5lZCA/IG9wdGlvbnMuYXV0b1ByZXZlbnREZWZhdWx0IDogdHJ1ZTtcblxuICAgIC8qKlxuICAgICAqIEFzIHRoaXMgZnJlcXVlbmN5IGluY3JlYXNlcyB0aGUgaW50ZXJhY3Rpb24gZXZlbnRzIHdpbGwgYmUgY2hlY2tlZCBtb3JlIG9mdGVuLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDEwXG4gICAgICovXG4gICAgdGhpcy5pbnRlcmFjdGlvbkZyZXF1ZW5jeSA9IG9wdGlvbnMuaW50ZXJhY3Rpb25GcmVxdWVuY3kgfHwgMTA7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgbW91c2UgZGF0YVxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5pbnRlcmFjdGlvbi5JbnRlcmFjdGlvbkRhdGF9XG4gICAgICovXG4gICAgdGhpcy5tb3VzZSA9IG5ldyBJbnRlcmFjdGlvbkRhdGEoKTtcblxuICAgIC8qKlxuICAgICAqIEFuIGV2ZW50IGRhdGEgb2JqZWN0IHRvIGhhbmRsZSBhbGwgdGhlIGV2ZW50IHRyYWNraW5nL2Rpc3BhdGNoaW5nXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtvYmplY3R9XG4gICAgICovXG4gICAgdGhpcy5ldmVudERhdGEgPSB7XG4gICAgICAgIHN0b3BwZWQ6IGZhbHNlLFxuICAgICAgICB0YXJnZXQ6IG51bGwsXG4gICAgICAgIHR5cGU6IG51bGwsXG4gICAgICAgIGRhdGE6IHRoaXMubW91c2UsXG4gICAgICAgIHN0b3BQcm9wYWdhdGlvbjpmdW5jdGlvbigpe1xuICAgICAgICAgICAgdGhpcy5zdG9wcGVkID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH07XG5cbiAgICAvKipcbiAgICAgKiBUaW55IGxpdHRsZSBpbnRlcmFjdGl2ZURhdGEgcG9vbCAhXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLmludGVyYWN0aW9uLkludGVyYWN0aW9uRGF0YVtdfVxuICAgICAqL1xuICAgIHRoaXMuaW50ZXJhY3RpdmVEYXRhUG9vbCA9IFtdO1xuXG4gICAgLyoqXG4gICAgICogVGhlIERPTSBlbGVtZW50IHRvIGJpbmQgdG8uXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtIVE1MRWxlbWVudH1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuaW50ZXJhY3Rpb25ET01FbGVtZW50ID0gbnVsbDtcblxuICAgIC8qKlxuICAgICAqIEhhdmUgZXZlbnRzIGJlZW4gYXR0YWNoZWQgdG8gdGhlIGRvbSBlbGVtZW50P1xuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuZXZlbnRzQWRkZWQgPSBmYWxzZTtcblxuICAgIC8vdGhpcyB3aWxsIG1ha2UgaXQgc28gdGhhdCB5b3UgZG9uJ3QgaGF2ZSB0byBjYWxsIGJpbmQgYWxsIHRoZSB0aW1lXG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtGdW5jdGlvbn1cbiAgICAgKi9cbiAgICB0aGlzLm9uTW91c2VVcCA9IHRoaXMub25Nb3VzZVVwLmJpbmQodGhpcyk7XG4gICAgdGhpcy5wcm9jZXNzTW91c2VVcCA9IHRoaXMucHJvY2Vzc01vdXNlVXAuYmluZCggdGhpcyApO1xuXG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtGdW5jdGlvbn1cbiAgICAgKi9cbiAgICB0aGlzLm9uTW91c2VEb3duID0gdGhpcy5vbk1vdXNlRG93bi5iaW5kKHRoaXMpO1xuICAgIHRoaXMucHJvY2Vzc01vdXNlRG93biA9IHRoaXMucHJvY2Vzc01vdXNlRG93bi5iaW5kKCB0aGlzICk7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtGdW5jdGlvbn1cbiAgICAgKi9cbiAgICB0aGlzLm9uTW91c2VNb3ZlID0gdGhpcy5vbk1vdXNlTW92ZS5iaW5kKCB0aGlzICk7XG4gICAgdGhpcy5wcm9jZXNzTW91c2VNb3ZlID0gdGhpcy5wcm9jZXNzTW91c2VNb3ZlLmJpbmQoIHRoaXMgKTtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge0Z1bmN0aW9ufVxuICAgICAqL1xuICAgIHRoaXMub25Nb3VzZU91dCA9IHRoaXMub25Nb3VzZU91dC5iaW5kKHRoaXMpO1xuICAgIHRoaXMucHJvY2Vzc01vdXNlT3Zlck91dCA9IHRoaXMucHJvY2Vzc01vdXNlT3Zlck91dC5iaW5kKCB0aGlzICk7XG5cblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge0Z1bmN0aW9ufVxuICAgICAqL1xuICAgIHRoaXMub25Ub3VjaFN0YXJ0ID0gdGhpcy5vblRvdWNoU3RhcnQuYmluZCh0aGlzKTtcbiAgICB0aGlzLnByb2Nlc3NUb3VjaFN0YXJ0ID0gdGhpcy5wcm9jZXNzVG91Y2hTdGFydC5iaW5kKHRoaXMpO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7RnVuY3Rpb259XG4gICAgICovXG4gICAgdGhpcy5vblRvdWNoRW5kID0gdGhpcy5vblRvdWNoRW5kLmJpbmQodGhpcyk7XG4gICAgdGhpcy5wcm9jZXNzVG91Y2hFbmQgPSB0aGlzLnByb2Nlc3NUb3VjaEVuZC5iaW5kKHRoaXMpO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7RnVuY3Rpb259XG4gICAgICovXG4gICAgdGhpcy5vblRvdWNoTW92ZSA9IHRoaXMub25Ub3VjaE1vdmUuYmluZCh0aGlzKTtcbiAgICB0aGlzLnByb2Nlc3NUb3VjaE1vdmUgPSB0aGlzLnByb2Nlc3NUb3VjaE1vdmUuYmluZCh0aGlzKTtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLmxhc3QgPSAwO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGNzcyBzdHlsZSBvZiB0aGUgY3Vyc29yIHRoYXQgaXMgYmVpbmcgdXNlZFxuICAgICAqIEBtZW1iZXIge3N0cmluZ31cbiAgICAgKi9cbiAgICB0aGlzLmN1cnJlbnRDdXJzb3JTdHlsZSA9ICdpbmhlcml0JztcblxuICAgIC8qKlxuICAgICAqIEludGVybmFsIGNhY2hlZCB2YXJcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlBvaW50fVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fdGVtcFBvaW50ID0gbmV3IGNvcmUuUG9pbnQoKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBjdXJyZW50IHJlc29sdXRpb25cbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy5yZXNvbHV0aW9uID0gMTtcblxuICAgIHRoaXMuc2V0VGFyZ2V0RWxlbWVudCh0aGlzLnJlbmRlcmVyLnZpZXcsIHRoaXMucmVuZGVyZXIucmVzb2x1dGlvbik7XG59XG5cbkludGVyYWN0aW9uTWFuYWdlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBJbnRlcmFjdGlvbk1hbmFnZXI7XG5tb2R1bGUuZXhwb3J0cyA9IEludGVyYWN0aW9uTWFuYWdlcjtcblxuLyoqXG4gKiBTZXRzIHRoZSBET00gZWxlbWVudCB3aGljaCB3aWxsIHJlY2VpdmUgbW91c2UvdG91Y2ggZXZlbnRzLiBUaGlzIGlzIHVzZWZ1bCBmb3Igd2hlbiB5b3UgaGF2ZVxuICogb3RoZXIgRE9NIGVsZW1lbnRzIG9uIHRvcCBvZiB0aGUgcmVuZGVyZXJzIENhbnZhcyBlbGVtZW50LiBXaXRoIHRoaXMgeW91J2xsIGJlIGJhbGUgdG8gZGVsZXRlZ2F0ZVxuICogYW5vdGhlciBET00gZWxlbWVudCB0byByZWNlaXZlIHRob3NlIGV2ZW50cy5cbiAqXG4gKiBAcGFyYW0gZWxlbWVudCB7SFRNTEVsZW1lbnR9IHRoZSBET00gZWxlbWVudCB3aGljaCB3aWxsIHJlY2VpdmUgbW91c2UgYW5kIHRvdWNoIGV2ZW50cy5cbiAqIEBwYXJhbSBbcmVzb2x1dGlvbj0xXSB7bnVtYmVyfSBUSGUgcmVzb2x1dGlvbiBvZiB0aGUgbmV3IGVsZW1lbnQgKHJlbGF0aXZlIHRvIHRoZSBjYW52YXMpLlxuICogQHByaXZhdGVcbiAqL1xuSW50ZXJhY3Rpb25NYW5hZ2VyLnByb3RvdHlwZS5zZXRUYXJnZXRFbGVtZW50ID0gZnVuY3Rpb24gKGVsZW1lbnQsIHJlc29sdXRpb24pXG57XG4gICAgdGhpcy5yZW1vdmVFdmVudHMoKTtcblxuICAgIHRoaXMuaW50ZXJhY3Rpb25ET01FbGVtZW50ID0gZWxlbWVudDtcblxuICAgIHRoaXMucmVzb2x1dGlvbiA9IHJlc29sdXRpb24gfHwgMTtcblxuICAgIHRoaXMuYWRkRXZlbnRzKCk7XG59O1xuXG4vKipcbiAqIFJlZ2lzdGVycyBhbGwgdGhlIERPTSBldmVudHNcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5JbnRlcmFjdGlvbk1hbmFnZXIucHJvdG90eXBlLmFkZEV2ZW50cyA9IGZ1bmN0aW9uICgpXG57XG4gICAgaWYgKCF0aGlzLmludGVyYWN0aW9uRE9NRWxlbWVudClcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb3JlLnRpY2tlci5zaGFyZWQuYWRkKHRoaXMudXBkYXRlLCB0aGlzKTtcblxuICAgIGlmICh3aW5kb3cubmF2aWdhdG9yLm1zUG9pbnRlckVuYWJsZWQpXG4gICAge1xuICAgICAgICB0aGlzLmludGVyYWN0aW9uRE9NRWxlbWVudC5zdHlsZVsnLW1zLWNvbnRlbnQtem9vbWluZyddID0gJ25vbmUnO1xuICAgICAgICB0aGlzLmludGVyYWN0aW9uRE9NRWxlbWVudC5zdHlsZVsnLW1zLXRvdWNoLWFjdGlvbiddID0gJ25vbmUnO1xuICAgIH1cblxuICAgIHdpbmRvdy5kb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdtb3VzZW1vdmUnLCAgICB0aGlzLm9uTW91c2VNb3ZlLCB0cnVlKTtcbiAgICB0aGlzLmludGVyYWN0aW9uRE9NRWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCdtb3VzZWRvd24nLCAgICB0aGlzLm9uTW91c2VEb3duLCB0cnVlKTtcbiAgICB0aGlzLmludGVyYWN0aW9uRE9NRWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCdtb3VzZW91dCcsICAgICB0aGlzLm9uTW91c2VPdXQsIHRydWUpO1xuXG4gICAgdGhpcy5pbnRlcmFjdGlvbkRPTUVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigndG91Y2hzdGFydCcsICAgdGhpcy5vblRvdWNoU3RhcnQsIHRydWUpO1xuICAgIHRoaXMuaW50ZXJhY3Rpb25ET01FbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ3RvdWNoZW5kJywgICAgIHRoaXMub25Ub3VjaEVuZCwgdHJ1ZSk7XG4gICAgdGhpcy5pbnRlcmFjdGlvbkRPTUVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigndG91Y2htb3ZlJywgICAgdGhpcy5vblRvdWNoTW92ZSwgdHJ1ZSk7XG5cbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignbW91c2V1cCcsICB0aGlzLm9uTW91c2VVcCwgdHJ1ZSk7XG5cbiAgICB0aGlzLmV2ZW50c0FkZGVkID0gdHJ1ZTtcbn07XG5cbi8qKlxuICogUmVtb3ZlcyBhbGwgdGhlIERPTSBldmVudHMgdGhhdCB3ZXJlIHByZXZpb3VzbHkgcmVnaXN0ZXJlZFxuICpcbiAqIEBwcml2YXRlXG4gKi9cbkludGVyYWN0aW9uTWFuYWdlci5wcm90b3R5cGUucmVtb3ZlRXZlbnRzID0gZnVuY3Rpb24gKClcbntcbiAgICBpZiAoIXRoaXMuaW50ZXJhY3Rpb25ET01FbGVtZW50KVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvcmUudGlja2VyLnNoYXJlZC5yZW1vdmUodGhpcy51cGRhdGUpO1xuXG4gICAgaWYgKHdpbmRvdy5uYXZpZ2F0b3IubXNQb2ludGVyRW5hYmxlZClcbiAgICB7XG4gICAgICAgIHRoaXMuaW50ZXJhY3Rpb25ET01FbGVtZW50LnN0eWxlWyctbXMtY29udGVudC16b29taW5nJ10gPSAnJztcbiAgICAgICAgdGhpcy5pbnRlcmFjdGlvbkRPTUVsZW1lbnQuc3R5bGVbJy1tcy10b3VjaC1hY3Rpb24nXSA9ICcnO1xuICAgIH1cblxuICAgIHdpbmRvdy5kb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdtb3VzZW1vdmUnLCB0aGlzLm9uTW91c2VNb3ZlLCB0cnVlKTtcbiAgICB0aGlzLmludGVyYWN0aW9uRE9NRWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdtb3VzZWRvd24nLCB0aGlzLm9uTW91c2VEb3duLCB0cnVlKTtcbiAgICB0aGlzLmludGVyYWN0aW9uRE9NRWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdtb3VzZW91dCcsICB0aGlzLm9uTW91c2VPdXQsIHRydWUpO1xuXG4gICAgdGhpcy5pbnRlcmFjdGlvbkRPTUVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigndG91Y2hzdGFydCcsIHRoaXMub25Ub3VjaFN0YXJ0LCB0cnVlKTtcbiAgICB0aGlzLmludGVyYWN0aW9uRE9NRWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCd0b3VjaGVuZCcsICB0aGlzLm9uVG91Y2hFbmQsIHRydWUpO1xuICAgIHRoaXMuaW50ZXJhY3Rpb25ET01FbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3RvdWNobW92ZScsIHRoaXMub25Ub3VjaE1vdmUsIHRydWUpO1xuXG4gICAgdGhpcy5pbnRlcmFjdGlvbkRPTUVsZW1lbnQgPSBudWxsO1xuXG4gICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21vdXNldXAnLCAgdGhpcy5vbk1vdXNlVXAsIHRydWUpO1xuXG4gICAgdGhpcy5ldmVudHNBZGRlZCA9IGZhbHNlO1xufTtcblxuLyoqXG4gKiBVcGRhdGVzIHRoZSBzdGF0ZSBvZiBpbnRlcmFjdGl2ZSBvYmplY3RzLlxuICogSW52b2tlZCBieSBhIHRocm90dGxlZCB0aWNrZXIgdXBkYXRlIGZyb21cbiAqIHtAbGluayBQSVhJLnRpY2tlci5zaGFyZWR9LlxuICpcbiAqIEBwYXJhbSBkZWx0YVRpbWUge251bWJlcn1cbiAqL1xuSW50ZXJhY3Rpb25NYW5hZ2VyLnByb3RvdHlwZS51cGRhdGUgPSBmdW5jdGlvbiAoZGVsdGFUaW1lKVxue1xuICAgIHRoaXMuX2RlbHRhVGltZSArPSBkZWx0YVRpbWU7XG5cbiAgICBpZiAodGhpcy5fZGVsdGFUaW1lIDwgdGhpcy5pbnRlcmFjdGlvbkZyZXF1ZW5jeSlcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLl9kZWx0YVRpbWUgPSAwO1xuXG4gICAgaWYgKCF0aGlzLmludGVyYWN0aW9uRE9NRWxlbWVudClcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBpZiB0aGUgdXNlciBtb3ZlIHRoZSBtb3VzZSB0aGlzIGNoZWNrIGhhcyBhbHJlYWR5IGJlZW4gZGZvbmUgdXNpbmcgdGhlIG1vdXNlIG1vdmUhXG4gICAgaWYodGhpcy5kaWRNb3ZlKVxuICAgIHtcbiAgICAgICAgdGhpcy5kaWRNb3ZlID0gZmFsc2U7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLmN1cnNvciA9ICdpbmhlcml0JztcblxuICAgIHRoaXMucHJvY2Vzc0ludGVyYWN0aXZlKHRoaXMubW91c2UuZ2xvYmFsLCB0aGlzLnJlbmRlcmVyLl9sYXN0T2JqZWN0UmVuZGVyZWQsIHRoaXMucHJvY2Vzc01vdXNlT3Zlck91dCwgdHJ1ZSApO1xuXG4gICAgaWYgKHRoaXMuY3VycmVudEN1cnNvclN0eWxlICE9PSB0aGlzLmN1cnNvcilcbiAgICB7XG4gICAgICAgIHRoaXMuY3VycmVudEN1cnNvclN0eWxlID0gdGhpcy5jdXJzb3I7XG4gICAgICAgIHRoaXMuaW50ZXJhY3Rpb25ET01FbGVtZW50LnN0eWxlLmN1cnNvciA9IHRoaXMuY3Vyc29yO1xuICAgIH1cblxuICAgIC8vVE9ET1xufTtcblxuLyoqXG4gKiBEaXNwYXRjaGVzIGFuIGV2ZW50IG9uIHRoZSBkaXNwbGF5IG9iamVjdCB0aGF0IHdhcyBpbnRlcmFjdGVkIHdpdGhcbiAqXG4gKiBAcGFyYW0gZGlzcGxheU9iamVjdCB7UElYSS5Db250YWluZXJ8UElYSS5TcHJpdGV8UElYSS5leHRyYXMuVGlsaW5nU3ByaXRlfSB0aGUgZGlzcGxheSBvYmplY3QgaW4gcXVlc3Rpb25cbiAqIEBwYXJhbSBldmVudFN0cmluZyB7c3RyaW5nfSB0aGUgbmFtZSBvZiB0aGUgZXZlbnQgKGUuZywgbW91c2Vkb3duKVxuICogQHBhcmFtIGV2ZW50RGF0YSB7b2JqZWN0fSB0aGUgZXZlbnQgZGF0YSBvYmplY3RcbiAqIEBwcml2YXRlXG4gKi9cbkludGVyYWN0aW9uTWFuYWdlci5wcm90b3R5cGUuZGlzcGF0Y2hFdmVudCA9IGZ1bmN0aW9uICggZGlzcGxheU9iamVjdCwgZXZlbnRTdHJpbmcsIGV2ZW50RGF0YSApXG57XG4gICAgaWYoIWV2ZW50RGF0YS5zdG9wcGVkKVxuICAgIHtcbiAgICAgICAgZXZlbnREYXRhLnRhcmdldCA9IGRpc3BsYXlPYmplY3Q7XG4gICAgICAgIGV2ZW50RGF0YS50eXBlID0gZXZlbnRTdHJpbmc7XG5cbiAgICAgICAgZGlzcGxheU9iamVjdC5lbWl0KCBldmVudFN0cmluZywgZXZlbnREYXRhICk7XG5cbiAgICAgICAgaWYoIGRpc3BsYXlPYmplY3RbZXZlbnRTdHJpbmddIClcbiAgICAgICAge1xuICAgICAgICAgICAgZGlzcGxheU9iamVjdFtldmVudFN0cmluZ10oIGV2ZW50RGF0YSApO1xuICAgICAgICB9XG4gICAgfVxufTtcblxuLyoqXG4gKiBNYXBzIHggYW5kIHkgY29vcmRzIGZyb20gYSBET00gb2JqZWN0IGFuZCBtYXBzIHRoZW0gY29ycmVjdGx5IHRvIHRoZSBwaXhpIHZpZXcuIFRoZSByZXN1bHRpbmcgdmFsdWUgaXMgc3RvcmVkIGluIHRoZSBwb2ludC5cbiAqIFRoaXMgdGFrZXMgaW50byBhY2NvdW50IHRoZSBmYWN0IHRoYXQgdGhlIERPTSBlbGVtZW50IGNvdWxkIGJlIHNjYWxlZCBhbmQgcG9zaXRpb25lZCBhbnl3aGVyZSBvbiB0aGUgc2NyZWVuLlxuICpcbiAqIEBwYXJhbSAge1BJWEkuUG9pbnR9IHBvaW50IHRoZSBwb2ludCB0aGF0IHRoZSByZXN1bHQgd2lsbCBiZSBzdG9yZWQgaW5cbiAqIEBwYXJhbSAge251bWJlcn0geCAgICAgdGhlIHggY29vcmQgb2YgdGhlIHBvc2l0aW9uIHRvIG1hcFxuICogQHBhcmFtICB7bnVtYmVyfSB5ICAgICB0aGUgeSBjb29yZCBvZiB0aGUgcG9zaXRpb24gdG8gbWFwXG4gKi9cbkludGVyYWN0aW9uTWFuYWdlci5wcm90b3R5cGUubWFwUG9zaXRpb25Ub1BvaW50ID0gZnVuY3Rpb24gKCBwb2ludCwgeCwgeSApXG57XG4gICAgdmFyIHJlY3QgPSB0aGlzLmludGVyYWN0aW9uRE9NRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICBwb2ludC54ID0gKCAoIHggLSByZWN0LmxlZnQgKSAqICh0aGlzLmludGVyYWN0aW9uRE9NRWxlbWVudC53aWR0aCAgLyByZWN0LndpZHRoICApICkgLyB0aGlzLnJlc29sdXRpb247XG4gICAgcG9pbnQueSA9ICggKCB5IC0gcmVjdC50b3AgICkgKiAodGhpcy5pbnRlcmFjdGlvbkRPTUVsZW1lbnQuaGVpZ2h0IC8gcmVjdC5oZWlnaHQgKSApIC8gdGhpcy5yZXNvbHV0aW9uO1xufTtcblxuLyoqXG4gKiBUaGlzIGZ1bmN0aW9uIGlzIHByb3ZpZGVzIGEgbmVhdCB3YXkgb2YgY3Jhd2xpbmcgdGhyb3VnaCB0aGUgc2NlbmUgZ3JhcGggYW5kIHJ1bm5pbmcgYSBzcGVjaWZpZWQgZnVuY3Rpb24gb24gYWxsIGludGVyYWN0aXZlIG9iamVjdHMgaXQgZmluZHMuXG4gKiBJdCB3aWxsIGFsc28gdGFrZSBjYXJlIG9mIGhpdCB0ZXN0aW5nIHRoZSBpbnRlcmFjdGl2ZSBvYmplY3RzIGFuZCBwYXNzZXMgdGhlIGhpdCBhY3Jvc3MgaW4gdGhlIGZ1bmN0aW9uLlxuICpcbiAqIEBwYXJhbSAge1BJWEkuUG9pbnR9IHBvaW50IHRoZSBwb2ludCB0aGF0IGlzIHRlc3RlZCBmb3IgY29sbGlzaW9uXG4gKiBAcGFyYW0gIHtQSVhJLkNvbnRhaW5lcnxQSVhJLlNwcml0ZXxQSVhJLmV4dHJhcy5UaWxpbmdTcHJpdGV9IGRpc3BsYXlPYmplY3QgdGhlIGRpc3BsYXlPYmplY3QgdGhhdCB3aWxsIGJlIGhpdCB0ZXN0IChyZWN1cmNzaXZseSBjcmF3bHMgaXRzIGNoaWxkcmVuKVxuICogQHBhcmFtICB7RnVuY3Rpb259IGZ1bmMgdGhlIGZ1bmN0aW9uIHRoYXQgd2lsbCBiZSBjYWxsZWQgb24gZWFjaCBpbnRlcmFjdGl2ZSBvYmplY3QuIFRoZSBkaXNwbGF5T2JqZWN0IGFuZCBoaXQgd2lsbCBiZSBwYXNzZWQgdG8gdGhlIGZ1bmN0aW9uXG4gKiBAcGFyYW0gIHtib29sZWFufSBoaXRUZXN0IHRoaXMgaW5kaWNhdGVzIGlmIHRoZSBvYmplY3RzIGluc2lkZSBzaG91bGQgYmUgaGl0IHRlc3QgYWdhaW5zdCB0aGUgcG9pbnRcbiAqIEByZXR1cm4ge2Jvb2xlYW59IHJldHVybnMgdHJ1ZSBpZiB0aGUgZGlzcGxheU9iamVjdCBoaXQgdGhlIHBvaW50XG4gKi9cbkludGVyYWN0aW9uTWFuYWdlci5wcm90b3R5cGUucHJvY2Vzc0ludGVyYWN0aXZlID0gZnVuY3Rpb24gKHBvaW50LCBkaXNwbGF5T2JqZWN0LCBmdW5jLCBoaXRUZXN0LCBpbnRlcmFjdGl2ZSlcbntcbiAgICBpZighZGlzcGxheU9iamVjdCB8fCAhZGlzcGxheU9iamVjdC52aXNpYmxlKVxuICAgIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIC8vIFRvb2sgYSBsaXR0bGUgd2hpbGUgdG8gcmV3b3JrIHRoaXMgZnVuY3Rpb24gY29ycmVjdGx5ISBCdXQgbm93IGl0IGlzIGRvbmUgYW5kIG5pY2UgYW5kIG9wdGltaXNlZC4gXl9eXG4gICAgLy8gXG4gICAgLy8gVGhpcyBmdW5jdGlvbiB3aWxsIG5vdyBsb29wIHRocm91Z2ggYWxsIG9iamVjdHMgYW5kIHRoZW4gb25seSBoaXQgdGVzdCB0aGUgb2JqZWN0cyBpdCBIQVMgdG8sIG5vdCBhbGwgb2YgdGhlbS4gTVVDSCBmYXN0ZXIuLlxuICAgIC8vIEFuIG9iamVjdCB3aWxsIGJlIGhpdCB0ZXN0IGlmIHRoZSBmb2xsb3dpbmcgaXMgdHJ1ZTpcbiAgICAvLyBcbiAgICAvLyAxOiBJdCBpcyBpbnRlcmFjdGl2ZS5cbiAgICAvLyAyOiBJdCBiZWxvbmdzIHRvIGEgcGFyZW50IHRoYXQgaXMgaW50ZXJhY3RpdmUgQU5EIG9uZSBvZiB0aGUgcGFyZW50cyBjaGlsZHJlbiBoYXZlIG5vdCBhbHJlYWR5IGJlZW4gaGl0LlxuICAgIC8vIFxuICAgIC8vIEFzIGFub3RoZXIgbGl0dGxlIG9wdGltaXNhdGlvbiBvbmNlIGFuIGludGVyYWN0aXZlIG9iamVjdCBoYXMgYmVlbiBoaXQgd2UgY2FuIGNhcnJ5IG9uIHRocm91Z2ggdGhlIHNjZW5lZ3JhcGgsIGJ1dCB3ZSBrbm93IHRoYXQgdGhlcmUgd2lsbCBiZSBubyBtb3JlIGhpdHMhIFNvIHdlIGNhbiBhdm9pZCBleHRyYSBoaXQgdGVzdHNcbiAgICAvLyBBIGZpbmFsIG9wdGltaXNhdGlvbiBpcyB0aGF0IGFuIG9iamVjdCBpcyBub3QgaGl0IHRlc3QgZGlyZWN0bHkgaWYgYSBjaGlsZCBoYXMgYWxyZWFkeSBiZWVuIGhpdC5cbiAgICBcbiAgICB2YXIgaGl0ID0gZmFsc2UsXG4gICAgICAgIGludGVyYWN0aXZlUGFyZW50ID0gaW50ZXJhY3RpdmUgPSBkaXNwbGF5T2JqZWN0LmludGVyYWN0aXZlIHx8IGludGVyYWN0aXZlO1xuXG4gICAgLy8gaWYgdGhlIGRpc3BsYXlvYmplY3QgaGFzIGEgaGl0QXJlYSwgdGhlbiBpdCBkb2VzIG5vdCBuZWVkIHRvIGhpdFRlc3QgY2hpbGRyZW4uXG4gICAgaWYoZGlzcGxheU9iamVjdC5oaXRBcmVhKVxuICAgIHtcbiAgICAgICAgaW50ZXJhY3RpdmVQYXJlbnQgPSBmYWxzZTtcbiAgICB9XG5cbiAgICAvLyAqKiBGUkVFIFRJUCAqKiEgSWYgYW4gb2JqZWN0IGlzIG5vdCBpbnRlcmFjdHRpdmUgb3IgaGFzIG5vIGJ1dHRvbnMgaW4gaXQgKHN1Y2ggYXMgYSBnYW1lIHNjZW5lISkgc2V0IGludGVyYWN0aXZlQ2hpbGRyZW4gdG8gZmFsc2UgZm9yIHRoYXQgZGlzcGxheU9iamVjdC5cbiAgICAvLyBUaGlzIHdpbGwgYWxsb3cgcGl4aSB0byBjb21wbGV0bHkgaWdub3JlIGFuZCBieXBhc3MgY2hlY2tpbmcgdGhlIGRpc3BsYXlPYmplY3RzIGNoaWxkcmVuLlxuICAgIGlmKGRpc3BsYXlPYmplY3QuaW50ZXJhY3RpdmVDaGlsZHJlbilcbiAgICB7ICAgICAgIFxuICAgICAgICB2YXIgY2hpbGRyZW4gPSBkaXNwbGF5T2JqZWN0LmNoaWxkcmVuO1xuICAgICAgICBcbiAgICAgICAgZm9yICh2YXIgaSA9IGNoaWxkcmVuLmxlbmd0aC0xOyBpID49IDA7IGktLSlcbiAgICAgICAge1xuICAgICAgICAgICAgLy8gdGltZSB0byBnZXQgcmVjdXJzaXZlLi4gaWYgdGhpcyBmdW5jdGlvbiB3aWxsIHJldHVybiBpZiBzb210aGluZyBpcyBoaXQuLlxuICAgICAgICAgICAgaWYoIHRoaXMucHJvY2Vzc0ludGVyYWN0aXZlKHBvaW50LCBjaGlsZHJlbltpXSwgZnVuYywgaGl0VGVzdCwgaW50ZXJhY3RpdmVQYXJlbnQpIClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBoaXQgPSB0cnVlO1xuXG4gICAgICAgICAgICAgICAgLy8gd2Ugbm8gbG9uZ2VyIG5lZWQgdG8gaGl0IHRlc3QgYW55IG1vcmUgb2JqZWN0cyBpbiB0aGlzIGNvbnRhaW5lciBhcyB3ZSB3ZSBub3cga25vdyB0aGUgcGFyZW50IGhhcyBiZWVuIGhpdFxuICAgICAgICAgICAgICAgIGludGVyYWN0aXZlUGFyZW50ID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgLy8gSWYgdGhlIGNoaWxkIGlzIGludGVyYWN0aXZlICwgdGhhdCBtZWFucyB0aGF0IHRoZSBvYmplY3QgaGl0IHdhcyBhY3R1YWxseSBpbnRlcmFjdGl2ZSBhbmQgbm90IGp1c3QgdGhlIGNoaWxkIG9mIGFuIGludGVyYWN0aXZlIG9iamVjdC4gXG4gICAgICAgICAgICAgICAgLy8gVGhpcyBtZWFucyB3ZSBubyBsb25nZXIgbmVlZCB0byBoaXQgdGVzdCBhbnl0aGluZyBlbHNlLiBXZSBzdGlsbCBuZWVkIHRvIHJ1biB0aHJvdWdoIGFsbCBvYmplY3RzLCBidXQgd2UgZG9uJ3QgbmVlZCB0byBwZXJmb3JtIGFueSBoaXQgdGVzdHMuXG4gICAgICAgICAgICAgICAgaWYoY2hpbGRyZW5baV0uaW50ZXJhY3RpdmUpXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBoaXRUZXN0ID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gbm8gcG9pbnQgcnVubmluZyB0aGlzIGlmIHRoZSBpdGVtIGlzIG5vdCBpbnRlcmFjdGl2ZSBvciBkb2VzIG5vdCBoYXZlIGFuIGludGVyYWN0aXZlIHBhcmVudC5cbiAgICBpZihpbnRlcmFjdGl2ZSlcbiAgICB7XG4gICAgICAgIC8vIGlmIHdlIGFyZSBoaXQgdGVzdGluZyAoYXMgaW4gd2UgaGF2ZSBubyBoaXQgYW55IG9iamVjdHMgeWV0KVxuICAgICAgICAvLyBXZSBhbHNvIGRvbid0IG5lZWQgdG8gd29ycnkgYWJvdXQgaGl0IHRlc3RpbmcgaWYgb25jZSBvZiB0aGUgZGlzcGxheU9iamVjdHMgY2hpbGRyZW4gaGFzIGFscmVhZHkgYmVlbiBoaXQhXG4gICAgICAgIGlmKGhpdFRlc3QgJiYgIWhpdClcbiAgICAgICAgeyAgXG4gICAgICAgICAgICBpZihkaXNwbGF5T2JqZWN0LmhpdEFyZWEpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgZGlzcGxheU9iamVjdC53b3JsZFRyYW5zZm9ybS5hcHBseUludmVyc2UocG9pbnQsICB0aGlzLl90ZW1wUG9pbnQpO1xuICAgICAgICAgICAgICAgIGhpdCA9IGRpc3BsYXlPYmplY3QuaGl0QXJlYS5jb250YWlucyggdGhpcy5fdGVtcFBvaW50LngsIHRoaXMuX3RlbXBQb2ludC55ICk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmKGRpc3BsYXlPYmplY3QuY29udGFpbnNQb2ludClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBoaXQgPSBkaXNwbGF5T2JqZWN0LmNvbnRhaW5zUG9pbnQocG9pbnQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYoZGlzcGxheU9iamVjdC5pbnRlcmFjdGl2ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgZnVuYyhkaXNwbGF5T2JqZWN0LCBoaXQpOyBcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBoaXQ7XG4gIFxufTtcblxuXG4vKipcbiAqIElzIGNhbGxlZCB3aGVuIHRoZSBtb3VzZSBidXR0b24gaXMgcHJlc3NlZCBkb3duIG9uIHRoZSByZW5kZXJlciBlbGVtZW50XG4gKlxuICogQHBhcmFtIGV2ZW50IHtFdmVudH0gVGhlIERPTSBldmVudCBvZiBhIG1vdXNlIGJ1dHRvbiBiZWluZyBwcmVzc2VkIGRvd25cbiAqIEBwcml2YXRlXG4gKi9cbkludGVyYWN0aW9uTWFuYWdlci5wcm90b3R5cGUub25Nb3VzZURvd24gPSBmdW5jdGlvbiAoZXZlbnQpXG57XG4gICAgdGhpcy5tb3VzZS5vcmlnaW5hbEV2ZW50ID0gZXZlbnQ7XG4gICAgdGhpcy5ldmVudERhdGEuZGF0YSA9IHRoaXMubW91c2U7XG4gICAgdGhpcy5ldmVudERhdGEuc3RvcHBlZCA9IGZhbHNlO1xuXG4gICAgLy8gVXBkYXRlIGludGVybmFsIG1vdXNlIHJlZmVyZW5jZVxuICAgIHRoaXMubWFwUG9zaXRpb25Ub1BvaW50KCB0aGlzLm1vdXNlLmdsb2JhbCwgZXZlbnQuY2xpZW50WCwgZXZlbnQuY2xpZW50WSk7XG5cbiAgICBpZiAodGhpcy5hdXRvUHJldmVudERlZmF1bHQpXG4gICAge1xuICAgICAgICB0aGlzLm1vdXNlLm9yaWdpbmFsRXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICB9XG5cbiAgICB0aGlzLnByb2Nlc3NJbnRlcmFjdGl2ZSh0aGlzLm1vdXNlLmdsb2JhbCwgdGhpcy5yZW5kZXJlci5fbGFzdE9iamVjdFJlbmRlcmVkLCB0aGlzLnByb2Nlc3NNb3VzZURvd24sIHRydWUgKTtcbn07XG5cbi8qKlxuICogUHJvY2Vzc2VzIHRoZSByZXN1bHQgb2YgdGhlIG1vdXNlIGRvd24gY2hlY2sgYW5kIGRpc3BhdGNoZXMgdGhlIGV2ZW50IGlmIG5lZWQgYmVcbiAqXG4gKiBAcGFyYW0gZGlzcGxheU9iamVjdCB7UElYSS5Db250YWluZXJ8UElYSS5TcHJpdGV8UElYSS5leHRyYXMuVGlsaW5nU3ByaXRlfSBUaGUgZGlzcGxheSBvYmplY3QgdGhhdCB3YXMgdGVzdGVkXG4gKiBAcGFyYW0gaGl0IHtib29sZWFufSB0aGUgcmVzdWx0IG9mIHRoZSBoaXQgdGVzdCBvbiB0aGUgZGlzcGF5IG9iamVjdFxuICogQHByaXZhdGVcbiAqL1xuSW50ZXJhY3Rpb25NYW5hZ2VyLnByb3RvdHlwZS5wcm9jZXNzTW91c2VEb3duID0gZnVuY3Rpb24gKCBkaXNwbGF5T2JqZWN0LCBoaXQgKVxue1xuICAgIHZhciBlID0gdGhpcy5tb3VzZS5vcmlnaW5hbEV2ZW50O1xuICAgIFxuICAgIHZhciBpc1JpZ2h0QnV0dG9uID0gZS5idXR0b24gPT09IDIgfHwgZS53aGljaCA9PT0gMztcblxuICAgIGlmKGhpdClcbiAgICB7XG4gICAgICAgIGRpc3BsYXlPYmplY3RbIGlzUmlnaHRCdXR0b24gPyAnX2lzUmlnaHREb3duJyA6ICdfaXNMZWZ0RG93bicgXSA9IHRydWU7XG4gICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudCggZGlzcGxheU9iamVjdCwgaXNSaWdodEJ1dHRvbiA/ICdyaWdodGRvd24nIDogJ21vdXNlZG93bicsIHRoaXMuZXZlbnREYXRhICk7XG4gICAgfVxufTtcblxuXG5cbi8qKlxuICogSXMgY2FsbGVkIHdoZW4gdGhlIG1vdXNlIGJ1dHRvbiBpcyByZWxlYXNlZCBvbiB0aGUgcmVuZGVyZXIgZWxlbWVudFxuICpcbiAqIEBwYXJhbSBldmVudCB7RXZlbnR9IFRoZSBET00gZXZlbnQgb2YgYSBtb3VzZSBidXR0b24gYmVpbmcgcmVsZWFzZWRcbiAqIEBwcml2YXRlXG4gKi9cbkludGVyYWN0aW9uTWFuYWdlci5wcm90b3R5cGUub25Nb3VzZVVwID0gZnVuY3Rpb24gKGV2ZW50KVxue1xuICAgIHRoaXMubW91c2Uub3JpZ2luYWxFdmVudCA9IGV2ZW50O1xuICAgIHRoaXMuZXZlbnREYXRhLmRhdGEgPSB0aGlzLm1vdXNlO1xuICAgIHRoaXMuZXZlbnREYXRhLnN0b3BwZWQgPSBmYWxzZTtcblxuICAgIC8vIFVwZGF0ZSBpbnRlcm5hbCBtb3VzZSByZWZlcmVuY2VcbiAgICB0aGlzLm1hcFBvc2l0aW9uVG9Qb2ludCggdGhpcy5tb3VzZS5nbG9iYWwsIGV2ZW50LmNsaWVudFgsIGV2ZW50LmNsaWVudFkpO1xuXG4gICAgdGhpcy5wcm9jZXNzSW50ZXJhY3RpdmUodGhpcy5tb3VzZS5nbG9iYWwsIHRoaXMucmVuZGVyZXIuX2xhc3RPYmplY3RSZW5kZXJlZCwgdGhpcy5wcm9jZXNzTW91c2VVcCwgdHJ1ZSApO1xufTtcblxuLyoqXG4gKiBQcm9jZXNzZXMgdGhlIHJlc3VsdCBvZiB0aGUgbW91c2UgdXAgY2hlY2sgYW5kIGRpc3BhdGNoZXMgdGhlIGV2ZW50IGlmIG5lZWQgYmVcbiAqXG4gKiBAcGFyYW0gZGlzcGxheU9iamVjdCB7UElYSS5Db250YWluZXJ8UElYSS5TcHJpdGV8UElYSS5leHRyYXMuVGlsaW5nU3ByaXRlfSBUaGUgZGlzcGxheSBvYmplY3QgdGhhdCB3YXMgdGVzdGVkXG4gKiBAcGFyYW0gaGl0IHtib29sZWFufSB0aGUgcmVzdWx0IG9mIHRoZSBoaXQgdGVzdCBvbiB0aGUgZGlzcGxheSBvYmplY3RcbiAqIEBwcml2YXRlXG4gKi9cbkludGVyYWN0aW9uTWFuYWdlci5wcm90b3R5cGUucHJvY2Vzc01vdXNlVXAgPSBmdW5jdGlvbiAoIGRpc3BsYXlPYmplY3QsIGhpdCApXG57XG4gICAgdmFyIGUgPSB0aGlzLm1vdXNlLm9yaWdpbmFsRXZlbnQ7XG5cbiAgICB2YXIgaXNSaWdodEJ1dHRvbiA9IGUuYnV0dG9uID09PSAyIHx8IGUud2hpY2ggPT09IDM7XG4gICAgdmFyIGlzRG93biA9ICBpc1JpZ2h0QnV0dG9uID8gJ19pc1JpZ2h0RG93bicgOiAnX2lzTGVmdERvd24nO1xuXG4gICAgaWYoaGl0KVxuICAgIHtcbiAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50KCBkaXNwbGF5T2JqZWN0LCBpc1JpZ2h0QnV0dG9uID8gJ3JpZ2h0dXAnIDogJ21vdXNldXAnLCB0aGlzLmV2ZW50RGF0YSApO1xuXG4gICAgICAgIGlmKCBkaXNwbGF5T2JqZWN0WyBpc0Rvd24gXSApXG4gICAgICAgIHtcbiAgICAgICAgICAgIGRpc3BsYXlPYmplY3RbIGlzRG93biBdID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLmRpc3BhdGNoRXZlbnQoIGRpc3BsYXlPYmplY3QsIGlzUmlnaHRCdXR0b24gPyAncmlnaHRjbGljaycgOiAnY2xpY2snLCB0aGlzLmV2ZW50RGF0YSApO1xuICAgICAgICB9XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIGlmKCBkaXNwbGF5T2JqZWN0WyBpc0Rvd24gXSApXG4gICAgICAgIHtcbiAgICAgICAgICAgIGRpc3BsYXlPYmplY3RbIGlzRG93biBdID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLmRpc3BhdGNoRXZlbnQoIGRpc3BsYXlPYmplY3QsIGlzUmlnaHRCdXR0b24gPyAncmlnaHR1cG91dHNpZGUnIDogJ21vdXNldXBvdXRzaWRlJywgdGhpcy5ldmVudERhdGEgKTtcbiAgICAgICAgfVxuICAgIH1cbn07XG5cblxuLyoqXG4gKiBJcyBjYWxsZWQgd2hlbiB0aGUgbW91c2UgbW92ZXMgYWNyb3NzIHRoZSByZW5kZXJlciBlbGVtZW50XG4gKlxuICogQHBhcmFtIGV2ZW50IHtFdmVudH0gVGhlIERPTSBldmVudCBvZiB0aGUgbW91c2UgbW92aW5nXG4gKiBAcHJpdmF0ZVxuICovXG5JbnRlcmFjdGlvbk1hbmFnZXIucHJvdG90eXBlLm9uTW91c2VNb3ZlID0gZnVuY3Rpb24gKGV2ZW50KVxue1xuICAgIHRoaXMubW91c2Uub3JpZ2luYWxFdmVudCA9IGV2ZW50O1xuICAgIHRoaXMuZXZlbnREYXRhLmRhdGEgPSB0aGlzLm1vdXNlO1xuICAgIHRoaXMuZXZlbnREYXRhLnN0b3BwZWQgPSBmYWxzZTtcblxuICAgIHRoaXMubWFwUG9zaXRpb25Ub1BvaW50KCB0aGlzLm1vdXNlLmdsb2JhbCwgZXZlbnQuY2xpZW50WCwgZXZlbnQuY2xpZW50WSk7XG5cbiAgICB0aGlzLmRpZE1vdmUgPSB0cnVlO1xuXG4gICAgdGhpcy5jdXJzb3IgPSAnaW5oZXJpdCc7XG5cbiAgICB0aGlzLnByb2Nlc3NJbnRlcmFjdGl2ZSh0aGlzLm1vdXNlLmdsb2JhbCwgdGhpcy5yZW5kZXJlci5fbGFzdE9iamVjdFJlbmRlcmVkLCB0aGlzLnByb2Nlc3NNb3VzZU1vdmUsIHRydWUgKTtcblxuICAgIGlmICh0aGlzLmN1cnJlbnRDdXJzb3JTdHlsZSAhPT0gdGhpcy5jdXJzb3IpXG4gICAge1xuICAgICAgICB0aGlzLmN1cnJlbnRDdXJzb3JTdHlsZSA9IHRoaXMuY3Vyc29yO1xuICAgICAgICB0aGlzLmludGVyYWN0aW9uRE9NRWxlbWVudC5zdHlsZS5jdXJzb3IgPSB0aGlzLmN1cnNvcjtcbiAgICB9XG5cbiAgICAvL1RPRE8gQlVHIGZvciBwYXJlbnRzIGluZXJhY3RpdmUgb2JqZWN0IChib3JkZXIgb3JkZXIgaXNzdWUpXG59O1xuXG4vKipcbiAqIFByb2Nlc3NlcyB0aGUgcmVzdWx0IG9mIHRoZSBtb3VzZSBtb3ZlIGNoZWNrIGFuZCBkaXNwYXRjaGVzIHRoZSBldmVudCBpZiBuZWVkIGJlXG4gKlxuICogQHBhcmFtIGRpc3BsYXlPYmplY3Qge1BJWEkuQ29udGFpbmVyfFBJWEkuU3ByaXRlfFBJWEkuZXh0cmFzLlRpbGluZ1Nwcml0ZX0gVGhlIGRpc3BsYXkgb2JqZWN0IHRoYXQgd2FzIHRlc3RlZFxuICogQHBhcmFtIGhpdCB7Ym9vbGVhbn0gdGhlIHJlc3VsdCBvZiB0aGUgaGl0IHRlc3Qgb24gdGhlIGRpc3BsYXkgb2JqZWN0XG4gKiBAcHJpdmF0ZVxuICovXG5JbnRlcmFjdGlvbk1hbmFnZXIucHJvdG90eXBlLnByb2Nlc3NNb3VzZU1vdmUgPSBmdW5jdGlvbiAoIGRpc3BsYXlPYmplY3QsIGhpdCApXG57XG4gICAgdGhpcy5kaXNwYXRjaEV2ZW50KCBkaXNwbGF5T2JqZWN0LCAnbW91c2Vtb3ZlJywgdGhpcy5ldmVudERhdGEpO1xuICAgIHRoaXMucHJvY2Vzc01vdXNlT3Zlck91dChkaXNwbGF5T2JqZWN0LCBoaXQpO1xufTtcblxuXG4vKipcbiAqIElzIGNhbGxlZCB3aGVuIHRoZSBtb3VzZSBpcyBtb3ZlZCBvdXQgb2YgdGhlIHJlbmRlcmVyIGVsZW1lbnRcbiAqXG4gKiBAcGFyYW0gZXZlbnQge0V2ZW50fSBUaGUgRE9NIGV2ZW50IG9mIGEgbW91c2UgYmVpbmcgbW92ZWQgb3V0XG4gKiBAcHJpdmF0ZVxuICovXG5JbnRlcmFjdGlvbk1hbmFnZXIucHJvdG90eXBlLm9uTW91c2VPdXQgPSBmdW5jdGlvbiAoZXZlbnQpXG57XG4gICAgdGhpcy5tb3VzZS5vcmlnaW5hbEV2ZW50ID0gZXZlbnQ7XG4gICAgdGhpcy5ldmVudERhdGEuc3RvcHBlZCA9IGZhbHNlO1xuXG4gICAgLy8gVXBkYXRlIGludGVybmFsIG1vdXNlIHJlZmVyZW5jZVxuICAgIHRoaXMubWFwUG9zaXRpb25Ub1BvaW50KCB0aGlzLm1vdXNlLmdsb2JhbCwgZXZlbnQuY2xpZW50WCwgZXZlbnQuY2xpZW50WSk7XG5cbiAgICB0aGlzLmludGVyYWN0aW9uRE9NRWxlbWVudC5zdHlsZS5jdXJzb3IgPSAnaW5oZXJpdCc7XG5cbiAgICAvLyBUT0RPIG9wdGltaXplIGJ5IG5vdCBjaGVjayBFVkVSWSBUSU1FISBtYXliZSBoYWxmIGFzIG9mdGVuPyAvL1xuICAgIHRoaXMubWFwUG9zaXRpb25Ub1BvaW50KCB0aGlzLm1vdXNlLmdsb2JhbCwgZXZlbnQuY2xpZW50WCwgZXZlbnQuY2xpZW50WSApO1xuXG4gICAgdGhpcy5wcm9jZXNzSW50ZXJhY3RpdmUoIHRoaXMubW91c2UuZ2xvYmFsLCB0aGlzLnJlbmRlcmVyLl9sYXN0T2JqZWN0UmVuZGVyZWQsIHRoaXMucHJvY2Vzc01vdXNlT3Zlck91dCwgZmFsc2UgKTtcbn07XG5cbi8qKlxuICogUHJvY2Vzc2VzIHRoZSByZXN1bHQgb2YgdGhlIG1vdXNlIG92ZXIvb3V0IGNoZWNrIGFuZCBkaXNwYXRjaGVzIHRoZSBldmVudCBpZiBuZWVkIGJlXG4gKlxuICogQHBhcmFtIGRpc3BsYXlPYmplY3Qge1BJWEkuQ29udGFpbmVyfFBJWEkuU3ByaXRlfFBJWEkuZXh0cmFzLlRpbGluZ1Nwcml0ZX0gVGhlIGRpc3BsYXkgb2JqZWN0IHRoYXQgd2FzIHRlc3RlZFxuICogQHBhcmFtIGhpdCB7Ym9vbGVhbn0gdGhlIHJlc3VsdCBvZiB0aGUgaGl0IHRlc3Qgb24gdGhlIGRpc3BsYXkgb2JqZWN0XG4gKiBAcHJpdmF0ZVxuICovXG5JbnRlcmFjdGlvbk1hbmFnZXIucHJvdG90eXBlLnByb2Nlc3NNb3VzZU92ZXJPdXQgPSBmdW5jdGlvbiAoIGRpc3BsYXlPYmplY3QsIGhpdCApXG57XG4gICAgaWYoaGl0KVxuICAgIHtcbiAgICAgICAgaWYoIWRpc3BsYXlPYmplY3QuX292ZXIpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGRpc3BsYXlPYmplY3QuX292ZXIgPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50KCBkaXNwbGF5T2JqZWN0LCAnbW91c2VvdmVyJywgdGhpcy5ldmVudERhdGEgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChkaXNwbGF5T2JqZWN0LmJ1dHRvbk1vZGUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuY3Vyc29yID0gZGlzcGxheU9iamVjdC5kZWZhdWx0Q3Vyc29yO1xuICAgICAgICB9XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIGlmKGRpc3BsYXlPYmplY3QuX292ZXIpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGRpc3BsYXlPYmplY3QuX292ZXIgPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudCggZGlzcGxheU9iamVjdCwgJ21vdXNlb3V0JywgdGhpcy5ldmVudERhdGEpO1xuICAgICAgICB9XG4gICAgfVxufTtcblxuXG4vKipcbiAqIElzIGNhbGxlZCB3aGVuIGEgdG91Y2ggaXMgc3RhcnRlZCBvbiB0aGUgcmVuZGVyZXIgZWxlbWVudFxuICpcbiAqIEBwYXJhbSBldmVudCB7RXZlbnR9IFRoZSBET00gZXZlbnQgb2YgYSB0b3VjaCBzdGFydGluZyBvbiB0aGUgcmVuZGVyZXIgdmlld1xuICogQHByaXZhdGVcbiAqL1xuSW50ZXJhY3Rpb25NYW5hZ2VyLnByb3RvdHlwZS5vblRvdWNoU3RhcnQgPSBmdW5jdGlvbiAoZXZlbnQpXG57XG4gICAgaWYgKHRoaXMuYXV0b1ByZXZlbnREZWZhdWx0KVxuICAgIHtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICB9XG5cbiAgICB2YXIgY2hhbmdlZFRvdWNoZXMgPSBldmVudC5jaGFuZ2VkVG91Y2hlcztcbiAgICB2YXIgY0xlbmd0aCA9IGNoYW5nZWRUb3VjaGVzLmxlbmd0aDtcblxuICAgIGZvciAodmFyIGk9MDsgaSA8IGNMZW5ndGg7IGkrKylcbiAgICB7XG4gICAgICAgIHZhciB0b3VjaEV2ZW50ID0gY2hhbmdlZFRvdWNoZXNbaV07XG4gICAgICAgIC8vVE9ETyBQT09MXG4gICAgICAgIHZhciB0b3VjaERhdGEgPSB0aGlzLmdldFRvdWNoRGF0YSggdG91Y2hFdmVudCApO1xuXG4gICAgICAgIHRvdWNoRGF0YS5vcmlnaW5hbEV2ZW50ID0gZXZlbnQ7XG5cbiAgICAgICAgdGhpcy5ldmVudERhdGEuZGF0YSA9IHRvdWNoRGF0YTtcbiAgICAgICAgdGhpcy5ldmVudERhdGEuc3RvcHBlZCA9IGZhbHNlO1xuXG4gICAgICAgIHRoaXMucHJvY2Vzc0ludGVyYWN0aXZlKCB0b3VjaERhdGEuZ2xvYmFsLCB0aGlzLnJlbmRlcmVyLl9sYXN0T2JqZWN0UmVuZGVyZWQsIHRoaXMucHJvY2Vzc1RvdWNoU3RhcnQsIHRydWUgKTtcblxuICAgICAgICB0aGlzLnJldHVyblRvdWNoRGF0YSggdG91Y2hEYXRhICk7XG4gICAgfVxufTtcblxuLyoqXG4gKiBQcm9jZXNzZXMgdGhlIHJlc3VsdCBvZiBhIHRvdWNoIGNoZWNrIGFuZCBkaXNwYXRjaGVzIHRoZSBldmVudCBpZiBuZWVkIGJlXG4gKlxuICogQHBhcmFtIGRpc3BsYXlPYmplY3Qge1BJWEkuQ29udGFpbmVyfFBJWEkuU3ByaXRlfFBJWEkuZXh0cmFzLlRpbGluZ1Nwcml0ZX0gVGhlIGRpc3BsYXkgb2JqZWN0IHRoYXQgd2FzIHRlc3RlZFxuICogQHBhcmFtIGhpdCB7Ym9vbGVhbn0gdGhlIHJlc3VsdCBvZiB0aGUgaGl0IHRlc3Qgb24gdGhlIGRpc3BsYXkgb2JqZWN0XG4gKiBAcHJpdmF0ZVxuICovXG5JbnRlcmFjdGlvbk1hbmFnZXIucHJvdG90eXBlLnByb2Nlc3NUb3VjaFN0YXJ0ID0gZnVuY3Rpb24gKCBkaXNwbGF5T2JqZWN0LCBoaXQgKVxue1xuICAgIGlmKGhpdClcbiAgICB7XG4gICAgICAgIGRpc3BsYXlPYmplY3QuX3RvdWNoRG93biA9IHRydWU7XG4gICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudCggZGlzcGxheU9iamVjdCwgJ3RvdWNoc3RhcnQnLCB0aGlzLmV2ZW50RGF0YSApO1xuICAgIH1cbn07XG5cblxuLyoqXG4gKiBJcyBjYWxsZWQgd2hlbiBhIHRvdWNoIGVuZHMgb24gdGhlIHJlbmRlcmVyIGVsZW1lbnRcbiAqXG4gKiBAcGFyYW0gZXZlbnQge0V2ZW50fSBUaGUgRE9NIGV2ZW50IG9mIGEgdG91Y2ggZW5kaW5nIG9uIHRoZSByZW5kZXJlciB2aWV3XG4gKi9cbkludGVyYWN0aW9uTWFuYWdlci5wcm90b3R5cGUub25Ub3VjaEVuZCA9IGZ1bmN0aW9uIChldmVudClcbntcbiAgICBpZiAodGhpcy5hdXRvUHJldmVudERlZmF1bHQpXG4gICAge1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIH1cblxuICAgIHZhciBjaGFuZ2VkVG91Y2hlcyA9IGV2ZW50LmNoYW5nZWRUb3VjaGVzO1xuICAgIHZhciBjTGVuZ3RoID0gY2hhbmdlZFRvdWNoZXMubGVuZ3RoO1xuXG4gICAgZm9yICh2YXIgaT0wOyBpIDwgY0xlbmd0aDsgaSsrKVxuICAgIHtcbiAgICAgICAgdmFyIHRvdWNoRXZlbnQgPSBjaGFuZ2VkVG91Y2hlc1tpXTtcblxuICAgICAgICB2YXIgdG91Y2hEYXRhID0gdGhpcy5nZXRUb3VjaERhdGEoIHRvdWNoRXZlbnQgKTtcblxuICAgICAgICB0b3VjaERhdGEub3JpZ2luYWxFdmVudCA9IGV2ZW50O1xuXG4gICAgICAgIC8vVE9ETyB0aGlzIHNob3VsZCBiZSBwYXNzZWQgYWxvbmcuLiBubyBzZXRcbiAgICAgICAgdGhpcy5ldmVudERhdGEuZGF0YSA9IHRvdWNoRGF0YTtcbiAgICAgICAgdGhpcy5ldmVudERhdGEuc3RvcHBlZCA9IGZhbHNlO1xuXG5cbiAgICAgICAgdGhpcy5wcm9jZXNzSW50ZXJhY3RpdmUoIHRvdWNoRGF0YS5nbG9iYWwsIHRoaXMucmVuZGVyZXIuX2xhc3RPYmplY3RSZW5kZXJlZCwgdGhpcy5wcm9jZXNzVG91Y2hFbmQsIHRydWUgKTtcblxuICAgICAgICB0aGlzLnJldHVyblRvdWNoRGF0YSggdG91Y2hEYXRhICk7XG4gICAgfVxufTtcblxuLyoqXG4gKiBQcm9jZXNzZXMgdGhlIHJlc3VsdCBvZiB0aGUgZW5kIG9mIGEgdG91Y2ggYW5kIGRpc3BhdGNoZXMgdGhlIGV2ZW50IGlmIG5lZWQgYmVcbiAqXG4gKiBAcGFyYW0gZGlzcGxheU9iamVjdCB7UElYSS5Db250YWluZXJ8UElYSS5TcHJpdGV8UElYSS5leHRyYXMuVGlsaW5nU3ByaXRlfSBUaGUgZGlzcGxheSBvYmplY3QgdGhhdCB3YXMgdGVzdGVkXG4gKiBAcGFyYW0gaGl0IHtib29sZWFufSB0aGUgcmVzdWx0IG9mIHRoZSBoaXQgdGVzdCBvbiB0aGUgZGlzcGxheSBvYmplY3RcbiAqIEBwcml2YXRlXG4gKi9cbkludGVyYWN0aW9uTWFuYWdlci5wcm90b3R5cGUucHJvY2Vzc1RvdWNoRW5kID0gZnVuY3Rpb24gKCBkaXNwbGF5T2JqZWN0LCBoaXQgKVxue1xuICAgIGlmKGhpdClcbiAgICB7XG4gICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudCggZGlzcGxheU9iamVjdCwgJ3RvdWNoZW5kJywgdGhpcy5ldmVudERhdGEgKTtcblxuICAgICAgICBpZiggZGlzcGxheU9iamVjdC5fdG91Y2hEb3duIClcbiAgICAgICAge1xuICAgICAgICAgICAgZGlzcGxheU9iamVjdC5fdG91Y2hEb3duID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLmRpc3BhdGNoRXZlbnQoIGRpc3BsYXlPYmplY3QsICd0YXAnLCB0aGlzLmV2ZW50RGF0YSApO1xuICAgICAgICB9XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIGlmKCBkaXNwbGF5T2JqZWN0Ll90b3VjaERvd24gKVxuICAgICAgICB7XG4gICAgICAgICAgICBkaXNwbGF5T2JqZWN0Ll90b3VjaERvd24gPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudCggZGlzcGxheU9iamVjdCwgJ3RvdWNoZW5kb3V0c2lkZScsIHRoaXMuZXZlbnREYXRhICk7XG4gICAgICAgIH1cbiAgICB9XG59O1xuXG4vKipcbiAqIElzIGNhbGxlZCB3aGVuIGEgdG91Y2ggaXMgbW92ZWQgYWNyb3NzIHRoZSByZW5kZXJlciBlbGVtZW50XG4gKlxuICogQHBhcmFtIGV2ZW50IHtFdmVudH0gVGhlIERPTSBldmVudCBvZiBhIHRvdWNoIG1vdmluZyBhY3Jvc3MgdGhlIHJlbmRlcmVyIHZpZXdcbiAqIEBwcml2YXRlXG4gKi9cbkludGVyYWN0aW9uTWFuYWdlci5wcm90b3R5cGUub25Ub3VjaE1vdmUgPSBmdW5jdGlvbiAoZXZlbnQpXG57XG4gICAgaWYgKHRoaXMuYXV0b1ByZXZlbnREZWZhdWx0KVxuICAgIHtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICB9XG5cbiAgICB2YXIgY2hhbmdlZFRvdWNoZXMgPSBldmVudC5jaGFuZ2VkVG91Y2hlcztcbiAgICB2YXIgY0xlbmd0aCA9IGNoYW5nZWRUb3VjaGVzLmxlbmd0aDtcblxuICAgIGZvciAodmFyIGk9MDsgaSA8IGNMZW5ndGg7IGkrKylcbiAgICB7XG4gICAgICAgIHZhciB0b3VjaEV2ZW50ID0gY2hhbmdlZFRvdWNoZXNbaV07XG5cbiAgICAgICAgdmFyIHRvdWNoRGF0YSA9IHRoaXMuZ2V0VG91Y2hEYXRhKCB0b3VjaEV2ZW50ICk7XG5cbiAgICAgICAgdG91Y2hEYXRhLm9yaWdpbmFsRXZlbnQgPSBldmVudDtcblxuICAgICAgICB0aGlzLmV2ZW50RGF0YS5kYXRhID0gdG91Y2hEYXRhO1xuICAgICAgICB0aGlzLmV2ZW50RGF0YS5zdG9wcGVkID0gZmFsc2U7XG5cbiAgICAgICAgdGhpcy5wcm9jZXNzSW50ZXJhY3RpdmUoIHRvdWNoRGF0YS5nbG9iYWwsIHRoaXMucmVuZGVyZXIuX2xhc3RPYmplY3RSZW5kZXJlZCwgdGhpcy5wcm9jZXNzVG91Y2hNb3ZlLCB0cnVlICk7XG5cbiAgICAgICAgdGhpcy5yZXR1cm5Ub3VjaERhdGEoIHRvdWNoRGF0YSApO1xuICAgIH1cbn07XG5cbi8qKlxuICogUHJvY2Vzc2VzIHRoZSByZXN1bHQgb2YgYSB0b3VjaCBtb3ZlIGNoZWNrIGFuZCBkaXNwYXRjaGVzIHRoZSBldmVudCBpZiBuZWVkIGJlXG4gKlxuICogQHBhcmFtIGRpc3BsYXlPYmplY3Qge1BJWEkuQ29udGFpbmVyfFBJWEkuU3ByaXRlfFBJWEkuZXh0cmFzLlRpbGluZ1Nwcml0ZX0gVGhlIGRpc3BsYXkgb2JqZWN0IHRoYXQgd2FzIHRlc3RlZFxuICogQHBhcmFtIGhpdCB7Ym9vbGVhbn0gdGhlIHJlc3VsdCBvZiB0aGUgaGl0IHRlc3Qgb24gdGhlIGRpc3BsYXkgb2JqZWN0XG4gKiBAcHJpdmF0ZVxuICovXG5JbnRlcmFjdGlvbk1hbmFnZXIucHJvdG90eXBlLnByb2Nlc3NUb3VjaE1vdmUgPSBmdW5jdGlvbiAoIGRpc3BsYXlPYmplY3QsIGhpdCApXG57XG4gICAgaGl0ID0gaGl0O1xuICAgIHRoaXMuZGlzcGF0Y2hFdmVudCggZGlzcGxheU9iamVjdCwgJ3RvdWNobW92ZScsIHRoaXMuZXZlbnREYXRhKTtcbn07XG5cbi8qKlxuICogR3JhYnMgYW4gaW50ZXJhY3Rpb24gZGF0YSBvYmplY3QgZnJvbSB0aGUgaW50ZXJuYWwgcG9vbFxuICpcbiAqIEBwYXJhbSB0b3VjaEV2ZW50IHtFdmVudERhdGF9IFRoZSB0b3VjaCBldmVudCB3ZSBuZWVkIHRvIHBhaXIgd2l0aCBhbiBpbnRlcmFjdGlvbkRhdGEgb2JqZWN0XG4gKlxuICogQHByaXZhdGVcbiAqL1xuSW50ZXJhY3Rpb25NYW5hZ2VyLnByb3RvdHlwZS5nZXRUb3VjaERhdGEgPSBmdW5jdGlvbiAodG91Y2hFdmVudClcbntcbiAgICB2YXIgdG91Y2hEYXRhID0gdGhpcy5pbnRlcmFjdGl2ZURhdGFQb29sLnBvcCgpO1xuXG4gICAgaWYoIXRvdWNoRGF0YSlcbiAgICB7XG4gICAgICAgIHRvdWNoRGF0YSA9IG5ldyBJbnRlcmFjdGlvbkRhdGEoKTtcbiAgICB9XG5cbiAgICB0b3VjaERhdGEuaWRlbnRpZmllciA9IHRvdWNoRXZlbnQuaWRlbnRpZmllcjtcbiAgICB0aGlzLm1hcFBvc2l0aW9uVG9Qb2ludCggdG91Y2hEYXRhLmdsb2JhbCwgdG91Y2hFdmVudC5jbGllbnRYLCB0b3VjaEV2ZW50LmNsaWVudFkgKTtcblxuICAgIGlmKG5hdmlnYXRvci5pc0NvY29vbkpTKVxuICAgIHtcbiAgICAgICAgdG91Y2hEYXRhLmdsb2JhbC54ID0gdG91Y2hEYXRhLmdsb2JhbC54IC8gdGhpcy5yZXNvbHV0aW9uO1xuICAgICAgICB0b3VjaERhdGEuZ2xvYmFsLnkgPSB0b3VjaERhdGEuZ2xvYmFsLnkgLyB0aGlzLnJlc29sdXRpb247XG4gICAgfVxuXG4gICAgdG91Y2hFdmVudC5nbG9iYWxYID0gdG91Y2hEYXRhLmdsb2JhbC54O1xuICAgIHRvdWNoRXZlbnQuZ2xvYmFsWSA9IHRvdWNoRGF0YS5nbG9iYWwueTtcblxuICAgIHJldHVybiB0b3VjaERhdGE7XG59O1xuXG4vKipcbiAqIFJldHVybnMgYW4gaW50ZXJhY3Rpb24gZGF0YSBvYmplY3QgdG8gdGhlIGludGVybmFsIHBvb2xcbiAqXG4gKiBAcGFyYW0gdG91Y2hEYXRhIHtQSVhJLmludGVyYWN0aW9uLkludGVyYWN0aW9uRGF0YX0gVGhlIHRvdWNoIGRhdGEgb2JqZWN0IHdlIHdhbnQgdG8gcmV0dXJuIHRvIHRoZSBwb29sXG4gKlxuICogQHByaXZhdGVcbiAqL1xuSW50ZXJhY3Rpb25NYW5hZ2VyLnByb3RvdHlwZS5yZXR1cm5Ub3VjaERhdGEgPSBmdW5jdGlvbiAoIHRvdWNoRGF0YSApXG57XG4gICAgdGhpcy5pbnRlcmFjdGl2ZURhdGFQb29sLnB1c2goIHRvdWNoRGF0YSApO1xufTtcblxuLyoqXG4gKiBEZXN0cm95cyB0aGUgaW50ZXJhY3Rpb24gbWFuYWdlclxuICpcbiAqL1xuSW50ZXJhY3Rpb25NYW5hZ2VyLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKCkge1xuICAgIHRoaXMucmVtb3ZlRXZlbnRzKCk7XG5cbiAgICB0aGlzLnJlbmRlcmVyID0gbnVsbDtcblxuICAgIHRoaXMubW91c2UgPSBudWxsO1xuXG4gICAgdGhpcy5ldmVudERhdGEgPSBudWxsO1xuXG4gICAgdGhpcy5pbnRlcmFjdGl2ZURhdGFQb29sID0gbnVsbDtcblxuICAgIHRoaXMuaW50ZXJhY3Rpb25ET01FbGVtZW50ID0gbnVsbDtcblxuICAgIHRoaXMub25Nb3VzZVVwID0gbnVsbDtcbiAgICB0aGlzLnByb2Nlc3NNb3VzZVVwID0gbnVsbDtcblxuXG4gICAgdGhpcy5vbk1vdXNlRG93biA9IG51bGw7XG4gICAgdGhpcy5wcm9jZXNzTW91c2VEb3duID0gbnVsbDtcblxuICAgIHRoaXMub25Nb3VzZU1vdmUgPSBudWxsO1xuICAgIHRoaXMucHJvY2Vzc01vdXNlTW92ZSA9IG51bGw7XG5cbiAgICB0aGlzLm9uTW91c2VPdXQgPSBudWxsO1xuICAgIHRoaXMucHJvY2Vzc01vdXNlT3Zlck91dCA9IG51bGw7XG5cblxuICAgIHRoaXMub25Ub3VjaFN0YXJ0ID0gbnVsbDtcbiAgICB0aGlzLnByb2Nlc3NUb3VjaFN0YXJ0ID0gbnVsbDtcblxuICAgIHRoaXMub25Ub3VjaEVuZCA9IG51bGw7XG4gICAgdGhpcy5wcm9jZXNzVG91Y2hFbmQgPSBudWxsO1xuXG4gICAgdGhpcy5vblRvdWNoTW92ZSA9IG51bGw7XG4gICAgdGhpcy5wcm9jZXNzVG91Y2hNb3ZlID0gbnVsbDtcblxuICAgIHRoaXMuX3RlbXBQb2ludCA9IG51bGw7XG59O1xuXG5jb3JlLldlYkdMUmVuZGVyZXIucmVnaXN0ZXJQbHVnaW4oJ2ludGVyYWN0aW9uJywgSW50ZXJhY3Rpb25NYW5hZ2VyKTtcbmNvcmUuQ2FudmFzUmVuZGVyZXIucmVnaXN0ZXJQbHVnaW4oJ2ludGVyYWN0aW9uJywgSW50ZXJhY3Rpb25NYW5hZ2VyKTtcbiIsIi8qKlxuICogQGZpbGUgICAgICAgIE1haW4gZXhwb3J0IG9mIHRoZSBQSVhJIGludGVyYWN0aW9ucyBsaWJyYXJ5XG4gKiBAYXV0aG9yICAgICAgTWF0IEdyb3ZlcyA8bWF0QGdvb2Rib3lkaWdpdGFsLmNvbT5cbiAqIEBjb3B5cmlnaHQgICAyMDEzLTIwMTUgR29vZEJveURpZ2l0YWxcbiAqIEBsaWNlbnNlICAgICB7QGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL3BpeGlqcy9waXhpLmpzL2Jsb2IvbWFzdGVyL0xJQ0VOU0V8TUlUIExpY2Vuc2V9XG4gKi9cblxuLyoqXG4gKiBAbmFtZXNwYWNlIFBJWEkuaW50ZXJhY3Rpb25cbiAqL1xubW9kdWxlLmV4cG9ydHMgPSB7XG4gICAgSW50ZXJhY3Rpb25EYXRhOiAgICByZXF1aXJlKCcuL0ludGVyYWN0aW9uRGF0YScpLFxuICAgIEludGVyYWN0aW9uTWFuYWdlcjogcmVxdWlyZSgnLi9JbnRlcmFjdGlvbk1hbmFnZXInKSxcbiAgICBpbnRlcmFjdGl2ZVRhcmdldDogIHJlcXVpcmUoJy4vaW50ZXJhY3RpdmVUYXJnZXQnKVxufTtcbiIsIi8qKlxuICogRGVmYXVsdCBwcm9wZXJ0eSB2YWx1ZXMgb2YgaW50ZXJhY3RpdmUgb2JqZWN0c1xuICogdXNlZCBieSB7QGxpbmsgUElYSS5pbnRlcmFjdGlvbi5JbnRlcmFjdGlvbk1hbmFnZXJ9LlxuICpcbiAqIEBtaXhpblxuICogQG1lbWJlcm9mIFBJWEkuaW50ZXJhY3Rpb25cbiAqIEBleGFtcGxlXG4gKiAgICAgIGZ1bmN0aW9uIE15T2JqZWN0KCkge31cbiAqXG4gKiAgICAgIE9iamVjdC5hc3NpZ24oXG4gKiAgICAgICAgICBNeU9iamVjdC5wcm90b3R5cGUsXG4gKiAgICAgICAgICBQSVhJLmludGVyYWN0aW9uLmludGVyYWN0aXZlVGFyZ2V0XG4gKiAgICAgICk7XG4gKi9cbnZhciBpbnRlcmFjdGl2ZVRhcmdldCA9IHtcbiAgICAvKipcbiAgICAgKiBAdG9kbyBOZWVkcyBkb2NzLlxuICAgICAqL1xuICAgIGludGVyYWN0aXZlOiBmYWxzZSxcbiAgICAvKipcbiAgICAgKiBAdG9kbyBOZWVkcyBkb2NzLlxuICAgICAqL1xuICAgIGJ1dHRvbk1vZGU6IGZhbHNlLFxuICAgIC8qKlxuICAgICAqIEB0b2RvIE5lZWRzIGRvY3MuXG4gICAgICovXG4gICAgaW50ZXJhY3RpdmVDaGlsZHJlbjogdHJ1ZSxcbiAgICAvKipcbiAgICAgKiBAdG9kbyBOZWVkcyBkb2NzLlxuICAgICAqL1xuICAgIGRlZmF1bHRDdXJzb3I6ICdwb2ludGVyJyxcblxuICAgIC8vIHNvbWUgaW50ZXJuYWwgY2hlY2tzLi5cblxuICAgIC8qKlxuICAgICAqIEB0b2RvIE5lZWRzIGRvY3MuXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICBfb3ZlcjogZmFsc2UsXG4gICAgLyoqXG4gICAgICogQHRvZG8gTmVlZHMgZG9jcy5cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIF90b3VjaERvd246IGZhbHNlXG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGludGVyYWN0aXZlVGFyZ2V0O1xuIiwidmFyIFJlc291cmNlID0gcmVxdWlyZSgncmVzb3VyY2UtbG9hZGVyJykuUmVzb3VyY2UsXG4gICAgY29yZSA9IHJlcXVpcmUoJy4uL2NvcmUnKSxcbiAgICBleHRyYXMgPSByZXF1aXJlKCcuLi9leHRyYXMnKSxcbiAgICBwYXRoID0gcmVxdWlyZSgncGF0aCcpO1xuXG5cbmZ1bmN0aW9uIHBhcnNlKHJlc291cmNlLCB0ZXh0dXJlKSB7XG4gICAgdmFyIGRhdGEgPSB7fTtcbiAgICB2YXIgaW5mbyA9IHJlc291cmNlLmRhdGEuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2luZm8nKVswXTtcbiAgICB2YXIgY29tbW9uID0gcmVzb3VyY2UuZGF0YS5nZXRFbGVtZW50c0J5VGFnTmFtZSgnY29tbW9uJylbMF07XG5cbiAgICBkYXRhLmZvbnQgPSBpbmZvLmdldEF0dHJpYnV0ZSgnZmFjZScpO1xuICAgIGRhdGEuc2l6ZSA9IHBhcnNlSW50KGluZm8uZ2V0QXR0cmlidXRlKCdzaXplJyksIDEwKTtcbiAgICBkYXRhLmxpbmVIZWlnaHQgPSBwYXJzZUludChjb21tb24uZ2V0QXR0cmlidXRlKCdsaW5lSGVpZ2h0JyksIDEwKTtcbiAgICBkYXRhLmNoYXJzID0ge307XG5cbiAgICAvL3BhcnNlIGxldHRlcnNcbiAgICB2YXIgbGV0dGVycyA9IHJlc291cmNlLmRhdGEuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2NoYXInKTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGV0dGVycy5sZW5ndGg7IGkrKylcbiAgICB7XG4gICAgICAgIHZhciBjaGFyQ29kZSA9IHBhcnNlSW50KGxldHRlcnNbaV0uZ2V0QXR0cmlidXRlKCdpZCcpLCAxMCk7XG5cbiAgICAgICAgdmFyIHRleHR1cmVSZWN0ID0gbmV3IGNvcmUuUmVjdGFuZ2xlKFxuICAgICAgICAgICAgcGFyc2VJbnQobGV0dGVyc1tpXS5nZXRBdHRyaWJ1dGUoJ3gnKSwgMTApICsgdGV4dHVyZS5mcmFtZS54LFxuICAgICAgICAgICAgcGFyc2VJbnQobGV0dGVyc1tpXS5nZXRBdHRyaWJ1dGUoJ3knKSwgMTApICsgdGV4dHVyZS5mcmFtZS55LFxuICAgICAgICAgICAgcGFyc2VJbnQobGV0dGVyc1tpXS5nZXRBdHRyaWJ1dGUoJ3dpZHRoJyksIDEwKSxcbiAgICAgICAgICAgIHBhcnNlSW50KGxldHRlcnNbaV0uZ2V0QXR0cmlidXRlKCdoZWlnaHQnKSwgMTApXG4gICAgICAgICk7XG5cbiAgICAgICAgZGF0YS5jaGFyc1tjaGFyQ29kZV0gPSB7XG4gICAgICAgICAgICB4T2Zmc2V0OiBwYXJzZUludChsZXR0ZXJzW2ldLmdldEF0dHJpYnV0ZSgneG9mZnNldCcpLCAxMCksXG4gICAgICAgICAgICB5T2Zmc2V0OiBwYXJzZUludChsZXR0ZXJzW2ldLmdldEF0dHJpYnV0ZSgneW9mZnNldCcpLCAxMCksXG4gICAgICAgICAgICB4QWR2YW5jZTogcGFyc2VJbnQobGV0dGVyc1tpXS5nZXRBdHRyaWJ1dGUoJ3hhZHZhbmNlJyksIDEwKSxcbiAgICAgICAgICAgIGtlcm5pbmc6IHt9LFxuICAgICAgICAgICAgdGV4dHVyZTogbmV3IGNvcmUuVGV4dHVyZSh0ZXh0dXJlLmJhc2VUZXh0dXJlLCB0ZXh0dXJlUmVjdClcblxuICAgICAgICB9O1xuICAgIH1cblxuICAgIC8vcGFyc2Uga2VybmluZ3NcbiAgICB2YXIga2VybmluZ3MgPSByZXNvdXJjZS5kYXRhLmdldEVsZW1lbnRzQnlUYWdOYW1lKCdrZXJuaW5nJyk7XG4gICAgZm9yIChpID0gMDsgaSA8IGtlcm5pbmdzLmxlbmd0aDsgaSsrKVxuICAgIHtcbiAgICAgICAgdmFyIGZpcnN0ID0gcGFyc2VJbnQoa2VybmluZ3NbaV0uZ2V0QXR0cmlidXRlKCdmaXJzdCcpLCAxMCk7XG4gICAgICAgIHZhciBzZWNvbmQgPSBwYXJzZUludChrZXJuaW5nc1tpXS5nZXRBdHRyaWJ1dGUoJ3NlY29uZCcpLCAxMCk7XG4gICAgICAgIHZhciBhbW91bnQgPSBwYXJzZUludChrZXJuaW5nc1tpXS5nZXRBdHRyaWJ1dGUoJ2Ftb3VudCcpLCAxMCk7XG5cbiAgICAgICAgZGF0YS5jaGFyc1tzZWNvbmRdLmtlcm5pbmdbZmlyc3RdID0gYW1vdW50O1xuICAgIH1cblxuICAgIHJlc291cmNlLmJpdG1hcEZvbnQgPSBkYXRhO1xuXG4gICAgLy8gSSdtIGxlYXZpbmcgdGhpcyBhcyBhIHRlbXBvcmFyeSBmaXggc28gd2UgY2FuIHRlc3QgdGhlIGJpdG1hcCBmb250cyBpbiB2M1xuICAgIC8vIGJ1dCBpdCdzIHZlcnkgbGlrZWx5IHRvIGNoYW5nZVxuICAgIGV4dHJhcy5CaXRtYXBUZXh0LmZvbnRzW2RhdGEuZm9udF0gPSBkYXRhO1xufVxuXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKClcbntcbiAgICByZXR1cm4gZnVuY3Rpb24gKHJlc291cmNlLCBuZXh0KVxuICAgIHtcbiAgICAgICAgLy8gc2tpcCBpZiBubyBkYXRhIG9yIG5vdCB4bWwgZGF0YVxuICAgICAgICBpZiAoIXJlc291cmNlLmRhdGEgfHwgIXJlc291cmNlLmlzWG1sKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gbmV4dCgpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gc2tpcCBpZiBub3QgYml0bWFwIGZvbnQgZGF0YSwgdXNpbmcgc29tZSBzaWxseSBkdWNrLXR5cGluZ1xuICAgICAgICBpZiAoXG4gICAgICAgICAgICByZXNvdXJjZS5kYXRhLmdldEVsZW1lbnRzQnlUYWdOYW1lKCdwYWdlJykubGVuZ3RoID09PSAwIHx8XG4gICAgICAgICAgICByZXNvdXJjZS5kYXRhLmdldEVsZW1lbnRzQnlUYWdOYW1lKCdpbmZvJykubGVuZ3RoID09PSAwIHx8XG4gICAgICAgICAgICByZXNvdXJjZS5kYXRhLmdldEVsZW1lbnRzQnlUYWdOYW1lKCdpbmZvJylbMF0uZ2V0QXR0cmlidXRlKCdmYWNlJykgPT09IG51bGxcbiAgICAgICAgICAgIClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIG5leHQoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciB4bWxVcmwgPSBwYXRoLmRpcm5hbWUocmVzb3VyY2UudXJsKTtcblxuICAgICAgICBpZiAoeG1sVXJsID09PSAnLicpIHtcbiAgICAgICAgICAgIHhtbFVybCA9ICcnO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuYmFzZVVybCAmJiB4bWxVcmwpIHtcbiAgICAgICAgICAgIC8vIGlmIGJhc2V1cmwgaGFzIGEgdHJhaWxpbmcgc2xhc2ggdGhlbiBhZGQgb25lIHRvIHhtbFVybCBzbyB0aGUgcmVwbGFjZSB3b3JrcyBiZWxvd1xuICAgICAgICAgICAgaWYgKHRoaXMuYmFzZVVybC5jaGFyQXQodGhpcy5iYXNlVXJsLmxlbmd0aCAtIDEpID09PSAnLycpIHtcbiAgICAgICAgICAgICAgICB4bWxVcmwgKz0gJy8nO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyByZW1vdmUgYmFzZVVybCBmcm9tIHhtbFVybFxuICAgICAgICAgICAgeG1sVXJsID0geG1sVXJsLnJlcGxhY2UodGhpcy5iYXNlVXJsLCAnJyk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBpZiB0aGVyZSBpcyBhbiB4bWxVcmwgbm93LCBpdCBuZWVkcyBhIHRyYWlsaW5nIHNsYXNoLiBFbnN1cmUgdGhhdCBpdCBkb2VzIGlmIHRoZSBzdHJpbmcgaXNuJ3QgZW1wdHkuXG4gICAgICAgIGlmICh4bWxVcmwgJiYgeG1sVXJsLmNoYXJBdCh4bWxVcmwubGVuZ3RoIC0gMSkgIT09ICcvJykge1xuICAgICAgICAgICAgeG1sVXJsICs9ICcvJztcbiAgICAgICAgfVxuICAgICAgICB2YXIgdGV4dHVyZVVybCA9IHhtbFVybCArIHJlc291cmNlLmRhdGEuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ3BhZ2UnKVswXS5nZXRBdHRyaWJ1dGUoJ2ZpbGUnKTtcbiAgICAgICAgaWYgKGNvcmUudXRpbHMuVGV4dHVyZUNhY2hlW3RleHR1cmVVcmxdKSB7XG4gICAgICAgICAgICAvL3JldXNlIGV4aXN0aW5nIHRleHR1cmVcbiAgICAgICAgICAgIHBhcnNlKHJlc291cmNlLCBjb3JlLnV0aWxzLlRleHR1cmVDYWNoZVt0ZXh0dXJlVXJsXSk7XG4gICAgICAgICAgICBuZXh0KCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB2YXIgbG9hZE9wdGlvbnMgPSB7XG4gICAgICAgICAgICAgICAgY3Jvc3NPcmlnaW46IHJlc291cmNlLmNyb3NzT3JpZ2luLFxuICAgICAgICAgICAgICAgIGxvYWRUeXBlOiBSZXNvdXJjZS5MT0FEX1RZUEUuSU1BR0UsXG4gICAgICAgICAgICAgICAgbWV0YWRhdGE6IHJlc291cmNlLm1ldGFkYXRhLmltYWdlTWV0YWRhdGFcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICAvLyBsb2FkIHRoZSB0ZXh0dXJlIGZvciB0aGUgZm9udFxuICAgICAgICAgICAgdGhpcy5hZGQocmVzb3VyY2UubmFtZSArICdfaW1hZ2UnLCB0ZXh0dXJlVXJsLCBsb2FkT3B0aW9ucywgZnVuY3Rpb24gKHJlcykge1xuICAgICAgICAgICAgICAgIHBhcnNlKHJlc291cmNlLCByZXMudGV4dHVyZSk7XG4gICAgICAgICAgICAgICAgbmV4dCgpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9O1xufTtcbiIsIi8qKlxuICogQGZpbGUgICAgICAgIE1haW4gZXhwb3J0IG9mIHRoZSBQSVhJIGxvYWRlcnMgbGlicmFyeVxuICogQGF1dGhvciAgICAgIE1hdCBHcm92ZXMgPG1hdEBnb29kYm95ZGlnaXRhbC5jb20+XG4gKiBAY29weXJpZ2h0ICAgMjAxMy0yMDE1IEdvb2RCb3lEaWdpdGFsXG4gKiBAbGljZW5zZSAgICAge0BsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9waXhpanMvcGl4aS5qcy9ibG9iL21hc3Rlci9MSUNFTlNFfE1JVCBMaWNlbnNlfVxuICovXG5cbi8qKlxuICogQG5hbWVzcGFjZSBQSVhJLmxvYWRlcnNcbiAqL1xubW9kdWxlLmV4cG9ydHMgPSB7XG4gICAgTG9hZGVyOiAgICAgICAgICAgICByZXF1aXJlKCcuL2xvYWRlcicpLFxuXG4gICAgLy8gcGFyc2Vyc1xuICAgIGJpdG1hcEZvbnRQYXJzZXI6ICAgcmVxdWlyZSgnLi9iaXRtYXBGb250UGFyc2VyJyksXG4gICAgc3ByaXRlc2hlZXRQYXJzZXI6ICByZXF1aXJlKCcuL3Nwcml0ZXNoZWV0UGFyc2VyJyksXG4gICAgdGV4dHVyZVBhcnNlcjogICAgICByZXF1aXJlKCcuL3RleHR1cmVQYXJzZXInKSxcbiAgICBSZXNvdXJjZTogICAgICAgICAgIHJlcXVpcmUoJ3Jlc291cmNlLWxvYWRlcicpLlJlc291cmNlXG59O1xuIiwidmFyIFJlc291cmNlTG9hZGVyID0gcmVxdWlyZSgncmVzb3VyY2UtbG9hZGVyJyksXG4gICAgdGV4dHVyZVBhcnNlciA9IHJlcXVpcmUoJy4vdGV4dHVyZVBhcnNlcicpLFxuICAgIHNwcml0ZXNoZWV0UGFyc2VyID0gcmVxdWlyZSgnLi9zcHJpdGVzaGVldFBhcnNlcicpLFxuICAgIGJpdG1hcEZvbnRQYXJzZXIgPSByZXF1aXJlKCcuL2JpdG1hcEZvbnRQYXJzZXInKTtcblxuLyoqXG4gKlxuICogVGhlIG5ldyBsb2FkZXIsIGV4dGVuZHMgUmVzb3VyY2UgTG9hZGVyIGJ5IENoYWQgRW5nbGVyIDogaHR0cHM6Ly9naXRodWIuY29tL2VuZ2xlcmNqL3Jlc291cmNlLWxvYWRlclxuICpcbiAqIGBgYGpzXG4gKiB2YXIgbG9hZGVyID0gUElYSS5sb2FkZXI7IC8vIHBpeGkgZXhwb3NlcyBhIHByZW1hZGUgaW5zdGFuY2UgZm9yIHlvdSB0byB1c2UuXG4gKiAvL29yXG4gKiB2YXIgbG9hZGVyID0gbmV3IFBJWEkubG9hZGVycy5Mb2FkZXIoKTsgLy8geW91IGNhbiBhbHNvIGNyZWF0ZSB5b3VyIG93biBpZiB5b3Ugd2FudFxuICpcbiAqIGxvYWRlci5hZGQoJ2J1bm55JyxcImRhdGEvYnVubnkucG5nXCIpO1xuICpcbiAqIGxvYWRlci5vbmNlKCdjb21wbGV0ZScsb25Bc3NldHNMb2FkZWQpO1xuICpcbiAqIGxvYWRlci5sb2FkKCk7XG4gKiBgYGBcbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuUmVzb3VyY2VMb2FkZXJcbiAqIEBtZW1iZXJvZiBQSVhJLmxvYWRlcnNcbiAqIEBwYXJhbSBbYmFzZVVybD0nJ10ge3N0cmluZ30gVGhlIGJhc2UgdXJsIGZvciBhbGwgcmVzb3VyY2VzIGxvYWRlZCBieSB0aGlzIGxvYWRlci5cbiAqIEBwYXJhbSBbY29uY3VycmVuY3k9MTBdIHtudW1iZXJ9IFRoZSBudW1iZXIgb2YgcmVzb3VyY2VzIHRvIGxvYWQgY29uY3VycmVudGx5LlxuICovXG5mdW5jdGlvbiBMb2FkZXIoYmFzZVVybCwgY29uY3VycmVuY3kpXG57XG4gICAgUmVzb3VyY2VMb2FkZXIuY2FsbCh0aGlzLCBiYXNlVXJsLCBjb25jdXJyZW5jeSk7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IExvYWRlci5fcGl4aU1pZGRsZXdhcmUubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgdGhpcy51c2UoTG9hZGVyLl9waXhpTWlkZGxld2FyZVtpXSgpKTtcbiAgICB9XG59XG5cbkxvYWRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFJlc291cmNlTG9hZGVyLnByb3RvdHlwZSk7XG5Mb2FkZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gTG9hZGVyO1xuXG5tb2R1bGUuZXhwb3J0cyA9IExvYWRlcjtcblxuTG9hZGVyLl9waXhpTWlkZGxld2FyZSA9IFtcbiAgICAvLyBwYXJzZSBhbnkgYmxvYiBpbnRvIG1vcmUgdXNhYmxlIG9iamVjdHMgKGUuZy4gSW1hZ2UpXG4gICAgUmVzb3VyY2VMb2FkZXIubWlkZGxld2FyZS5wYXJzaW5nLmJsb2IsXG4gICAgLy8gcGFyc2UgYW55IEltYWdlIG9iamVjdHMgaW50byB0ZXh0dXJlc1xuICAgIHRleHR1cmVQYXJzZXIsXG4gICAgLy8gcGFyc2UgYW55IHNwcml0ZXNoZWV0IGRhdGEgaW50byBtdWx0aXBsZSB0ZXh0dXJlc1xuICAgIHNwcml0ZXNoZWV0UGFyc2VyLFxuICAgIC8vIHBhcnNlIGFueSBzcHJpdGVzaGVldCBkYXRhIGludG8gbXVsdGlwbGUgdGV4dHVyZXNcbiAgICBiaXRtYXBGb250UGFyc2VyXG5dO1xuXG5Mb2FkZXIuYWRkUGl4aU1pZGRsZXdhcmUgPSBmdW5jdGlvbiAoZm4pIHtcbiAgICBMb2FkZXIuX3BpeGlNaWRkbGV3YXJlLnB1c2goZm4pO1xufTtcblxuLy8gQWRkIGN1c3RvbSBleHRlbnRpb25zXG52YXIgUmVzb3VyY2UgPSBSZXNvdXJjZUxvYWRlci5SZXNvdXJjZTtcblxuUmVzb3VyY2Uuc2V0RXh0ZW5zaW9uWGhyVHlwZSgnZm50JywgUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuRE9DVU1FTlQpO1xuIiwidmFyIFJlc291cmNlID0gcmVxdWlyZSgncmVzb3VyY2UtbG9hZGVyJykuUmVzb3VyY2UsXG4gICAgcGF0aCA9IHJlcXVpcmUoJ3BhdGgnKSxcbiAgICBjb3JlID0gcmVxdWlyZSgnLi4vY29yZScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICgpXG57XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChyZXNvdXJjZSwgbmV4dClcbiAgICB7XG4gICAgICAgIC8vIHNraXAgaWYgbm8gZGF0YSwgaXRzIG5vdCBqc29uLCBvciBpdCBpc24ndCBzcHJpdGVzaGVldCBkYXRhXG4gICAgICAgIGlmICghcmVzb3VyY2UuZGF0YSB8fCAhcmVzb3VyY2UuaXNKc29uIHx8ICFyZXNvdXJjZS5kYXRhLmZyYW1lcylcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIG5leHQoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBsb2FkT3B0aW9ucyA9IHtcbiAgICAgICAgICAgIGNyb3NzT3JpZ2luOiByZXNvdXJjZS5jcm9zc09yaWdpbixcbiAgICAgICAgICAgIGxvYWRUeXBlOiBSZXNvdXJjZS5MT0FEX1RZUEUuSU1BR0UsXG4gICAgICAgICAgICBtZXRhZGF0YTogcmVzb3VyY2UubWV0YWRhdGEuaW1hZ2VNZXRhZGF0YVxuICAgICAgICB9O1xuXG4gICAgICAgIHZhciByb3V0ZSA9IHBhdGguZGlybmFtZShyZXNvdXJjZS51cmwucmVwbGFjZSh0aGlzLmJhc2VVcmwsICcnKSk7XG5cbiAgICAgICAgdmFyIHJlc29sdXRpb24gPSBjb3JlLnV0aWxzLmdldFJlc29sdXRpb25PZlVybCggcmVzb3VyY2UudXJsICk7XG5cbiAgICAgICAgLy8gbG9hZCB0aGUgaW1hZ2UgZm9yIHRoaXMgc2hlZXRcbiAgICAgICAgdGhpcy5hZGQocmVzb3VyY2UubmFtZSArICdfaW1hZ2UnLCByb3V0ZSArICcvJyArIHJlc291cmNlLmRhdGEubWV0YS5pbWFnZSwgbG9hZE9wdGlvbnMsIGZ1bmN0aW9uIChyZXMpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJlc291cmNlLnRleHR1cmVzID0ge307XG5cbiAgICAgICAgICAgIHZhciBmcmFtZXMgPSByZXNvdXJjZS5kYXRhLmZyYW1lcztcblxuICAgICAgICAgICAgZm9yICh2YXIgaSBpbiBmcmFtZXMpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdmFyIHJlY3QgPSBmcmFtZXNbaV0uZnJhbWU7XG5cbiAgICAgICAgICAgICAgICBpZiAocmVjdClcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBzaXplID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHRyaW0gPSBudWxsO1xuXG4gICAgICAgICAgICAgICAgICAgIGlmIChmcmFtZXNbaV0ucm90YXRlZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZSA9IG5ldyBjb3JlLlJlY3RhbmdsZShyZWN0LngsIHJlY3QueSwgcmVjdC5oLCByZWN0LncpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZSA9IG5ldyBjb3JlLlJlY3RhbmdsZShyZWN0LngsIHJlY3QueSwgcmVjdC53LCByZWN0LmgpO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgLy8gIENoZWNrIHRvIHNlZSBpZiB0aGUgc3ByaXRlIGlzIHRyaW1tZWRcbiAgICAgICAgICAgICAgICAgICAgaWYgKGZyYW1lc1tpXS50cmltbWVkKVxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0cmltID0gbmV3IGNvcmUuUmVjdGFuZ2xlKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyYW1lc1tpXS5zcHJpdGVTb3VyY2VTaXplLnggLyByZXNvbHV0aW9uLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyYW1lc1tpXS5zcHJpdGVTb3VyY2VTaXplLnkgLyByZXNvbHV0aW9uLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyYW1lc1tpXS5zb3VyY2VTaXplLncgLyByZXNvbHV0aW9uLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyYW1lc1tpXS5zb3VyY2VTaXplLmggLyByZXNvbHV0aW9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIC8vIGZsaXAgdGhlIHdpZHRoIGFuZCBoZWlnaHQhXG4gICAgICAgICAgICAgICAgICAgIGlmIChmcmFtZXNbaV0ucm90YXRlZClcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHRlbXAgPSBzaXplLndpZHRoO1xuICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZS53aWR0aCA9IHNpemUuaGVpZ2h0O1xuICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZS5oZWlnaHQgPSB0ZW1wO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgc2l6ZS54IC89IHJlc29sdXRpb247XG4gICAgICAgICAgICAgICAgICAgIHNpemUueSAvPSByZXNvbHV0aW9uO1xuICAgICAgICAgICAgICAgICAgICBzaXplLndpZHRoIC89IHJlc29sdXRpb247XG4gICAgICAgICAgICAgICAgICAgIHNpemUuaGVpZ2h0IC89IHJlc29sdXRpb247XG5cbiAgICAgICAgICAgICAgICAgICAgcmVzb3VyY2UudGV4dHVyZXNbaV0gPSBuZXcgY29yZS5UZXh0dXJlKHJlcy50ZXh0dXJlLmJhc2VUZXh0dXJlLCBzaXplLCBzaXplLmNsb25lKCksIHRyaW0sIGZyYW1lc1tpXS5yb3RhdGVkKTtcblxuICAgICAgICAgICAgICAgICAgICAvLyBsZXRzIGFsc28gYWRkIHRoZSBmcmFtZSB0byBwaXhpJ3MgZ2xvYmFsIGNhY2hlIGZvciBmcm9tRnJhbWUgYW5kIGZyb21JbWFnZSBmdW5jdGlvbnNcbiAgICAgICAgICAgICAgICAgICAgY29yZS51dGlscy5UZXh0dXJlQ2FjaGVbaV0gPSByZXNvdXJjZS50ZXh0dXJlc1tpXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIG5leHQoKTtcbiAgICAgICAgfSk7XG4gICAgfTtcbn07XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uL2NvcmUnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoKVxue1xuICAgIHJldHVybiBmdW5jdGlvbiAocmVzb3VyY2UsIG5leHQpXG4gICAge1xuICAgICAgICAvLyBjcmVhdGUgYSBuZXcgdGV4dHVyZSBpZiB0aGUgZGF0YSBpcyBhbiBJbWFnZSBvYmplY3RcbiAgICAgICAgaWYgKHJlc291cmNlLmRhdGEgJiYgcmVzb3VyY2UuaXNJbWFnZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdmFyIGJhc2VUZXh0dXJlID0gbmV3IGNvcmUuQmFzZVRleHR1cmUocmVzb3VyY2UuZGF0YSwgbnVsbCwgY29yZS51dGlscy5nZXRSZXNvbHV0aW9uT2ZVcmwocmVzb3VyY2UudXJsKSk7XG4gICAgICAgICAgICBiYXNlVGV4dHVyZS5pbWFnZVVybCA9IHJlc291cmNlLnVybDtcbiAgICAgICAgICAgIHJlc291cmNlLnRleHR1cmUgPSBuZXcgY29yZS5UZXh0dXJlKGJhc2VUZXh0dXJlKTtcbiAgICAgICAgICAgIC8vIGxldHMgYWxzbyBhZGQgdGhlIGZyYW1lIHRvIHBpeGkncyBnbG9iYWwgY2FjaGUgZm9yIGZyb21GcmFtZSBhbmQgZnJvbUltYWdlIGZ1Y250aW9uc1xuICAgICAgICAgICAgY29yZS51dGlscy5CYXNlVGV4dHVyZUNhY2hlW3Jlc291cmNlLnVybF0gPSBiYXNlVGV4dHVyZTtcbiAgICAgICAgICAgIGNvcmUudXRpbHMuVGV4dHVyZUNhY2hlW3Jlc291cmNlLnVybF0gPSByZXNvdXJjZS50ZXh0dXJlO1xuICAgICAgICB9XG5cbiAgICAgICAgbmV4dCgpO1xuICAgIH07XG59O1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi9jb3JlJyksXG4gICAgdGVtcFBvaW50ID0gbmV3IGNvcmUuUG9pbnQoKSxcbiAgICB0ZW1wUG9seWdvbiA9IG5ldyBjb3JlLlBvbHlnb24oKTtcblxuLyoqXG4gKiBCYXNlIG1lc2ggY2xhc3NcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5Db250YWluZXJcbiAqIEBtZW1iZXJvZiBQSVhJLm1lc2hcbiAqIEBwYXJhbSB0ZXh0dXJlIHtQSVhJLlRleHR1cmV9IFRoZSB0ZXh0dXJlIHRvIHVzZVxuICogQHBhcmFtIFt2ZXJ0aWNlc10ge0Zsb2F0MzJBcnJheX0gaWYgeW91IHdhbnQgdG8gc3BlY2lmeSB0aGUgdmVydGljZXNcbiAqIEBwYXJhbSBbdXZzXSB7RmxvYXQzMkFycmF5fSBpZiB5b3Ugd2FudCB0byBzcGVjaWZ5IHRoZSB1dnNcbiAqIEBwYXJhbSBbaW5kaWNlc10ge1VpbnQxNkFycmF5fSBpZiB5b3Ugd2FudCB0byBzcGVjaWZ5IHRoZSBpbmRpY2VzXG4gKiBAcGFyYW0gW2RyYXdNb2RlXSB7bnVtYmVyfSB0aGUgZHJhd01vZGUsIGNhbiBiZSBhbnkgb2YgdGhlIE1lc2guRFJBV19NT0RFUyBjb25zdHNcbiAqL1xuZnVuY3Rpb24gTWVzaCh0ZXh0dXJlLCB2ZXJ0aWNlcywgdXZzLCBpbmRpY2VzLCBkcmF3TW9kZSlcbntcbiAgICBjb3JlLkNvbnRhaW5lci5jYWxsKHRoaXMpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHRleHR1cmUgb2YgdGhlIE1lc2hcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuVGV4dHVyZX1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX3RleHR1cmUgPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogVGhlIFV2cyBvZiB0aGUgTWVzaFxuICAgICAqXG4gICAgICogQG1lbWJlciB7RmxvYXQzMkFycmF5fVxuICAgICAqL1xuICAgIHRoaXMudXZzID0gdXZzIHx8IG5ldyBGbG9hdDMyQXJyYXkoWzAsIDAsXG4gICAgICAgIDEsIDAsXG4gICAgICAgIDEsIDEsXG4gICAgICAgIDAsIDFdKTtcblxuICAgIC8qKlxuICAgICAqIEFuIGFycmF5IG9mIHZlcnRpY2VzXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtGbG9hdDMyQXJyYXl9XG4gICAgICovXG4gICAgdGhpcy52ZXJ0aWNlcyA9IHZlcnRpY2VzIHx8IG5ldyBGbG9hdDMyQXJyYXkoWzAsIDAsXG4gICAgICAgIDEwMCwgMCxcbiAgICAgICAgMTAwLCAxMDAsXG4gICAgICAgIDAsIDEwMF0pO1xuXG4gICAgLypcbiAgICAgKiBAbWVtYmVyIHtVaW50MTZBcnJheX0gQW4gYXJyYXkgY29udGFpbmluZyB0aGUgaW5kaWNlcyBvZiB0aGUgdmVydGljZXNcbiAgICAgKi9cbiAgICAvLyAgVE9ETyBhdXRvIGdlbmVyYXRlIHRoaXMgYmFzZWQgb24gZHJhdyBtb2RlIVxuICAgIHRoaXMuaW5kaWNlcyA9IGluZGljZXMgfHwgbmV3IFVpbnQxNkFycmF5KFswLCAxLCAzLCAyXSk7XG5cbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIHRoZSBNZXNoIGlzIGRpcnR5IG9yIG5vdFxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKi9cbiAgICB0aGlzLmRpcnR5ID0gdHJ1ZTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBibGVuZCBtb2RlIHRvIGJlIGFwcGxpZWQgdG8gdGhlIHNwcml0ZS4gU2V0IHRvIGBQSVhJLkJMRU5EX01PREVTLk5PUk1BTGAgdG8gcmVtb3ZlIGFueSBibGVuZCBtb2RlLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IFBJWEkuQkxFTkRfTU9ERVMuTk9STUFMXG4gICAgICogQHNlZSBQSVhJLkJMRU5EX01PREVTXG4gICAgICovXG4gICAgdGhpcy5ibGVuZE1vZGUgPSBjb3JlLkJMRU5EX01PREVTLk5PUk1BTDtcblxuICAgIC8qKlxuICAgICAqIFRyaWFuZ2xlcyBpbiBjYW52YXMgbW9kZSBhcmUgYXV0b21hdGljYWxseSBhbnRpYWxpYXNlZCwgdXNlIHRoaXMgdmFsdWUgdG8gZm9yY2UgdHJpYW5nbGVzIHRvIG92ZXJsYXAgYSBiaXQgd2l0aCBlYWNoIG90aGVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMuY2FudmFzUGFkZGluZyA9IDA7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgd2F5IHRoZSBNZXNoIHNob3VsZCBiZSBkcmF3biwgY2FuIGJlIGFueSBvZiB0aGUge0BsaW5rIFBJWEkubWVzaC5NZXNoLkRSQVdfTU9ERVN9IGNvbnN0c1xuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBzZWUgUElYSS5tZXNoLk1lc2guRFJBV19NT0RFU1xuICAgICAqL1xuICAgIHRoaXMuZHJhd01vZGUgPSBkcmF3TW9kZSB8fCBNZXNoLkRSQVdfTU9ERVMuVFJJQU5HTEVfTUVTSDtcblxuICAgIC8vIHJ1biB0ZXh0dXJlIHNldHRlcjtcbiAgICB0aGlzLnRleHR1cmUgPSB0ZXh0dXJlO1xuXG4gICAgIC8qKlxuICAgICAqIFRoZSBkZWZhdWx0IHNoYWRlciB0aGF0IGlzIHVzZWQgaWYgYSBtZXNoIGRvZXNuJ3QgaGF2ZSBhIG1vcmUgc3BlY2lmaWMgb25lLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5TaGFkZXJ9XG4gICAgICovXG4gICAgdGhpcy5zaGFkZXIgPSBudWxsO1xufVxuXG4vLyBjb25zdHJ1Y3RvclxuTWVzaC5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuQ29udGFpbmVyLnByb3RvdHlwZSk7XG5NZXNoLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IE1lc2g7XG5tb2R1bGUuZXhwb3J0cyA9IE1lc2g7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKE1lc2gucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogVGhlIHRleHR1cmUgdGhhdCB0aGUgc3ByaXRlIGlzIHVzaW5nXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlRleHR1cmV9XG4gICAgICogQG1lbWJlcm9mIFBJWEkubWVzaC5NZXNoI1xuICAgICAqL1xuICAgIHRleHR1cmU6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gIHRoaXMuX3RleHR1cmU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICBpZiAodGhpcy5fdGV4dHVyZSA9PT0gdmFsdWUpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLl90ZXh0dXJlID0gdmFsdWU7XG5cbiAgICAgICAgICAgIGlmICh2YWx1ZSlcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAvLyB3YWl0IGZvciB0aGUgdGV4dHVyZSB0byBsb2FkXG4gICAgICAgICAgICAgICAgaWYgKHZhbHVlLmJhc2VUZXh0dXJlLmhhc0xvYWRlZClcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX29uVGV4dHVyZVVwZGF0ZSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICB2YWx1ZS5vbmNlKCd1cGRhdGUnLCB0aGlzLl9vblRleHR1cmVVcGRhdGUsIHRoaXMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn0pO1xuXG4vKipcbiAqIFJlbmRlcnMgdGhlIG9iamVjdCB1c2luZyB0aGUgV2ViR0wgcmVuZGVyZXJcbiAqXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcn0gYSByZWZlcmVuY2UgdG8gdGhlIFdlYkdMIHJlbmRlcmVyXG4gKiBAcHJpdmF0ZVxuICovXG5NZXNoLnByb3RvdHlwZS5fcmVuZGVyV2ViR0wgPSBmdW5jdGlvbiAocmVuZGVyZXIpXG57XG4gICAgcmVuZGVyZXIuc2V0T2JqZWN0UmVuZGVyZXIocmVuZGVyZXIucGx1Z2lucy5tZXNoKTtcbiAgICByZW5kZXJlci5wbHVnaW5zLm1lc2gucmVuZGVyKHRoaXMpO1xufTtcblxuLyoqXG4gKiBSZW5kZXJzIHRoZSBvYmplY3QgdXNpbmcgdGhlIENhbnZhcyByZW5kZXJlclxuICpcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5DYW52YXNSZW5kZXJlcn1cbiAqIEBwcml2YXRlXG4gKi9cbk1lc2gucHJvdG90eXBlLl9yZW5kZXJDYW52YXMgPSBmdW5jdGlvbiAocmVuZGVyZXIpXG57XG4gICAgdmFyIGNvbnRleHQgPSByZW5kZXJlci5jb250ZXh0O1xuXG4gICAgdmFyIHRyYW5zZm9ybSA9IHRoaXMud29ybGRUcmFuc2Zvcm07XG5cbiAgICBpZiAocmVuZGVyZXIucm91bmRQaXhlbHMpXG4gICAge1xuICAgICAgICBjb250ZXh0LnNldFRyYW5zZm9ybSh0cmFuc2Zvcm0uYSwgdHJhbnNmb3JtLmIsIHRyYW5zZm9ybS5jLCB0cmFuc2Zvcm0uZCwgdHJhbnNmb3JtLnR4IHwgMCwgdHJhbnNmb3JtLnR5IHwgMCk7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIGNvbnRleHQuc2V0VHJhbnNmb3JtKHRyYW5zZm9ybS5hLCB0cmFuc2Zvcm0uYiwgdHJhbnNmb3JtLmMsIHRyYW5zZm9ybS5kLCB0cmFuc2Zvcm0udHgsIHRyYW5zZm9ybS50eSk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuZHJhd01vZGUgPT09IE1lc2guRFJBV19NT0RFUy5UUklBTkdMRV9NRVNIKVxuICAgIHtcbiAgICAgICAgdGhpcy5fcmVuZGVyQ2FudmFzVHJpYW5nbGVNZXNoKGNvbnRleHQpO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICB0aGlzLl9yZW5kZXJDYW52YXNUcmlhbmdsZXMoY29udGV4dCk7XG4gICAgfVxufTtcblxuLyoqXG4gKiBEcmF3cyB0aGUgb2JqZWN0IGluIFRyaWFuZ2xlIE1lc2ggbW9kZSB1c2luZyBjYW52YXNcbiAqXG4gKiBAcGFyYW0gY29udGV4dCB7Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEfSB0aGUgY3VycmVudCBkcmF3aW5nIGNvbnRleHRcbiAqIEBwcml2YXRlXG4gKi9cbk1lc2gucHJvdG90eXBlLl9yZW5kZXJDYW52YXNUcmlhbmdsZU1lc2ggPSBmdW5jdGlvbiAoY29udGV4dClcbntcbiAgICAvLyBkcmF3IHRyaWFuZ2xlcyEhXG4gICAgdmFyIHZlcnRpY2VzID0gdGhpcy52ZXJ0aWNlcztcbiAgICB2YXIgdXZzID0gdGhpcy51dnM7XG5cbiAgICB2YXIgbGVuZ3RoID0gdmVydGljZXMubGVuZ3RoIC8gMjtcbiAgICAvLyB0aGlzLmNvdW50Kys7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aCAtIDI7IGkrKylcbiAgICB7XG4gICAgICAgIC8vIGRyYXcgc29tZSB0cmlhbmdsZXMhXG4gICAgICAgIHZhciBpbmRleCA9IGkgKiAyO1xuICAgICAgICB0aGlzLl9yZW5kZXJDYW52YXNEcmF3VHJpYW5nbGUoY29udGV4dCwgdmVydGljZXMsIHV2cywgaW5kZXgsIChpbmRleCArIDIpLCAoaW5kZXggKyA0KSk7XG4gICAgfVxufTtcblxuLyoqXG4gKiBEcmF3cyB0aGUgb2JqZWN0IGluIHRyaWFuZ2xlIG1vZGUgdXNpbmcgY2FudmFzXG4gKlxuICogQHBhcmFtIGNvbnRleHQge0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRH0gdGhlIGN1cnJlbnQgZHJhd2luZyBjb250ZXh0XG4gKiBAcHJpdmF0ZVxuICovXG5NZXNoLnByb3RvdHlwZS5fcmVuZGVyQ2FudmFzVHJpYW5nbGVzID0gZnVuY3Rpb24gKGNvbnRleHQpXG57XG4gICAgLy8gZHJhdyB0cmlhbmdsZXMhIVxuICAgIHZhciB2ZXJ0aWNlcyA9IHRoaXMudmVydGljZXM7XG4gICAgdmFyIHV2cyA9IHRoaXMudXZzO1xuICAgIHZhciBpbmRpY2VzID0gdGhpcy5pbmRpY2VzO1xuXG4gICAgdmFyIGxlbmd0aCA9IGluZGljZXMubGVuZ3RoO1xuICAgIC8vIHRoaXMuY291bnQrKztcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyBpICs9IDMpXG4gICAge1xuICAgICAgICAvLyBkcmF3IHNvbWUgdHJpYW5nbGVzIVxuICAgICAgICB2YXIgaW5kZXgwID0gaW5kaWNlc1tpXSAqIDIsIGluZGV4MSA9IGluZGljZXNbaSArIDFdICogMiwgaW5kZXgyID0gaW5kaWNlc1tpICsgMl0gKiAyO1xuICAgICAgICB0aGlzLl9yZW5kZXJDYW52YXNEcmF3VHJpYW5nbGUoY29udGV4dCwgdmVydGljZXMsIHV2cywgaW5kZXgwLCBpbmRleDEsIGluZGV4Mik7XG4gICAgfVxufTtcblxuLyoqXG4gKiBEcmF3cyBvbmUgb2YgdGhlIHRyaWFuZ2xlcyB0aGF0IGZvcm0gdGhpcyBNZXNoXG4gKlxuICogQHBhcmFtIGNvbnRleHQge0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRH0gdGhlIGN1cnJlbnQgZHJhd2luZyBjb250ZXh0XG4gKiBAcGFyYW0gdmVydGljZXMge0Zsb2F0MzJBcnJheX0gYSByZWZlcmVuY2UgdG8gdGhlIHZlcnRpY2VzIG9mIHRoZSBNZXNoXG4gKiBAcGFyYW0gdXZzIHtGbG9hdDMyQXJyYXl9IGEgcmVmZXJlbmNlIHRvIHRoZSB1dnMgb2YgdGhlIE1lc2hcbiAqIEBwYXJhbSBpbmRleDAge251bWJlcn0gdGhlIGluZGV4IG9mIHRoZSBmaXJzdCB2ZXJ0ZXhcbiAqIEBwYXJhbSBpbmRleDEge251bWJlcn0gdGhlIGluZGV4IG9mIHRoZSBzZWNvbmQgdmVydGV4XG4gKiBAcGFyYW0gaW5kZXgyIHtudW1iZXJ9IHRoZSBpbmRleCBvZiB0aGUgdGhpcmQgdmVydGV4XG4gKiBAcHJpdmF0ZVxuICovXG5NZXNoLnByb3RvdHlwZS5fcmVuZGVyQ2FudmFzRHJhd1RyaWFuZ2xlID0gZnVuY3Rpb24gKGNvbnRleHQsIHZlcnRpY2VzLCB1dnMsIGluZGV4MCwgaW5kZXgxLCBpbmRleDIpXG57XG4gICAgdmFyIHRleHR1cmVTb3VyY2UgPSB0aGlzLl90ZXh0dXJlLmJhc2VUZXh0dXJlLnNvdXJjZTtcbiAgICB2YXIgdGV4dHVyZVdpZHRoID0gdGhpcy5fdGV4dHVyZS5iYXNlVGV4dHVyZS53aWR0aDtcbiAgICB2YXIgdGV4dHVyZUhlaWdodCA9IHRoaXMuX3RleHR1cmUuYmFzZVRleHR1cmUuaGVpZ2h0O1xuXG4gICAgdmFyIHgwID0gdmVydGljZXNbaW5kZXgwXSwgeDEgPSB2ZXJ0aWNlc1tpbmRleDFdLCB4MiA9IHZlcnRpY2VzW2luZGV4Ml07XG4gICAgdmFyIHkwID0gdmVydGljZXNbaW5kZXgwICsgMV0sIHkxID0gdmVydGljZXNbaW5kZXgxICsgMV0sIHkyID0gdmVydGljZXNbaW5kZXgyICsgMV07XG5cbiAgICB2YXIgdTAgPSB1dnNbaW5kZXgwXSAqIHRleHR1cmVXaWR0aCwgdTEgPSB1dnNbaW5kZXgxXSAqIHRleHR1cmVXaWR0aCwgdTIgPSB1dnNbaW5kZXgyXSAqIHRleHR1cmVXaWR0aDtcbiAgICB2YXIgdjAgPSB1dnNbaW5kZXgwICsgMV0gKiB0ZXh0dXJlSGVpZ2h0LCB2MSA9IHV2c1tpbmRleDEgKyAxXSAqIHRleHR1cmVIZWlnaHQsIHYyID0gdXZzW2luZGV4MiArIDFdICogdGV4dHVyZUhlaWdodDtcblxuICAgIGlmICh0aGlzLmNhbnZhc1BhZGRpbmcgPiAwKVxuICAgIHtcbiAgICAgICAgdmFyIHBhZGRpbmdYID0gdGhpcy5jYW52YXNQYWRkaW5nIC8gdGhpcy53b3JsZFRyYW5zZm9ybS5hO1xuICAgICAgICB2YXIgcGFkZGluZ1kgPSB0aGlzLmNhbnZhc1BhZGRpbmcgLyB0aGlzLndvcmxkVHJhbnNmb3JtLmQ7XG4gICAgICAgIHZhciBjZW50ZXJYID0gKHgwICsgeDEgKyB4MikgLyAzO1xuICAgICAgICB2YXIgY2VudGVyWSA9ICh5MCArIHkxICsgeTIpIC8gMztcblxuICAgICAgICB2YXIgbm9ybVggPSB4MCAtIGNlbnRlclg7XG4gICAgICAgIHZhciBub3JtWSA9IHkwIC0gY2VudGVyWTtcblxuICAgICAgICB2YXIgZGlzdCA9IE1hdGguc3FydChub3JtWCAqIG5vcm1YICsgbm9ybVkgKiBub3JtWSk7XG4gICAgICAgIHgwID0gY2VudGVyWCArIChub3JtWCAvIGRpc3QpICogKGRpc3QgKyBwYWRkaW5nWCk7XG4gICAgICAgIHkwID0gY2VudGVyWSArIChub3JtWSAvIGRpc3QpICogKGRpc3QgKyBwYWRkaW5nWSk7XG5cbiAgICAgICAgLy9cblxuICAgICAgICBub3JtWCA9IHgxIC0gY2VudGVyWDtcbiAgICAgICAgbm9ybVkgPSB5MSAtIGNlbnRlclk7XG5cbiAgICAgICAgZGlzdCA9IE1hdGguc3FydChub3JtWCAqIG5vcm1YICsgbm9ybVkgKiBub3JtWSk7XG4gICAgICAgIHgxID0gY2VudGVyWCArIChub3JtWCAvIGRpc3QpICogKGRpc3QgKyBwYWRkaW5nWCk7XG4gICAgICAgIHkxID0gY2VudGVyWSArIChub3JtWSAvIGRpc3QpICogKGRpc3QgKyBwYWRkaW5nWSk7XG5cbiAgICAgICAgbm9ybVggPSB4MiAtIGNlbnRlclg7XG4gICAgICAgIG5vcm1ZID0geTIgLSBjZW50ZXJZO1xuXG4gICAgICAgIGRpc3QgPSBNYXRoLnNxcnQobm9ybVggKiBub3JtWCArIG5vcm1ZICogbm9ybVkpO1xuICAgICAgICB4MiA9IGNlbnRlclggKyAobm9ybVggLyBkaXN0KSAqIChkaXN0ICsgcGFkZGluZ1gpO1xuICAgICAgICB5MiA9IGNlbnRlclkgKyAobm9ybVkgLyBkaXN0KSAqIChkaXN0ICsgcGFkZGluZ1kpO1xuICAgIH1cblxuICAgIGNvbnRleHQuc2F2ZSgpO1xuICAgIGNvbnRleHQuYmVnaW5QYXRoKCk7XG5cblxuICAgIGNvbnRleHQubW92ZVRvKHgwLCB5MCk7XG4gICAgY29udGV4dC5saW5lVG8oeDEsIHkxKTtcbiAgICBjb250ZXh0LmxpbmVUbyh4MiwgeTIpO1xuXG4gICAgY29udGV4dC5jbG9zZVBhdGgoKTtcblxuICAgIGNvbnRleHQuY2xpcCgpO1xuXG4gICAgLy8gQ29tcHV0ZSBtYXRyaXggdHJhbnNmb3JtXG4gICAgdmFyIGRlbHRhID0gICh1MCAqIHYxKSAgICAgICsgKHYwICogdTIpICAgICAgKyAodTEgKiB2MikgICAgICAtICh2MSAqIHUyKSAgICAgIC0gKHYwICogdTEpICAgICAgLSAodTAgKiB2Mik7XG4gICAgdmFyIGRlbHRhQSA9ICh4MCAqIHYxKSAgICAgICsgKHYwICogeDIpICAgICAgKyAoeDEgKiB2MikgICAgICAtICh2MSAqIHgyKSAgICAgIC0gKHYwICogeDEpICAgICAgLSAoeDAgKiB2Mik7XG4gICAgdmFyIGRlbHRhQiA9ICh1MCAqIHgxKSAgICAgICsgKHgwICogdTIpICAgICAgKyAodTEgKiB4MikgICAgICAtICh4MSAqIHUyKSAgICAgIC0gKHgwICogdTEpICAgICAgLSAodTAgKiB4Mik7XG4gICAgdmFyIGRlbHRhQyA9ICh1MCAqIHYxICogeDIpICsgKHYwICogeDEgKiB1MikgKyAoeDAgKiB1MSAqIHYyKSAtICh4MCAqIHYxICogdTIpIC0gKHYwICogdTEgKiB4MikgLSAodTAgKiB4MSAqIHYyKTtcbiAgICB2YXIgZGVsdGFEID0gKHkwICogdjEpICAgICAgKyAodjAgKiB5MikgICAgICArICh5MSAqIHYyKSAgICAgIC0gKHYxICogeTIpICAgICAgLSAodjAgKiB5MSkgICAgICAtICh5MCAqIHYyKTtcbiAgICB2YXIgZGVsdGFFID0gKHUwICogeTEpICAgICAgKyAoeTAgKiB1MikgICAgICArICh1MSAqIHkyKSAgICAgIC0gKHkxICogdTIpICAgICAgLSAoeTAgKiB1MSkgICAgICAtICh1MCAqIHkyKTtcbiAgICB2YXIgZGVsdGFGID0gKHUwICogdjEgKiB5MikgKyAodjAgKiB5MSAqIHUyKSArICh5MCAqIHUxICogdjIpIC0gKHkwICogdjEgKiB1MikgLSAodjAgKiB1MSAqIHkyKSAtICh1MCAqIHkxICogdjIpO1xuXG4gICAgY29udGV4dC50cmFuc2Zvcm0oZGVsdGFBIC8gZGVsdGEsIGRlbHRhRCAvIGRlbHRhLFxuICAgICAgICBkZWx0YUIgLyBkZWx0YSwgZGVsdGFFIC8gZGVsdGEsXG4gICAgICAgIGRlbHRhQyAvIGRlbHRhLCBkZWx0YUYgLyBkZWx0YSk7XG5cbiAgICBjb250ZXh0LmRyYXdJbWFnZSh0ZXh0dXJlU291cmNlLCAwLCAwKTtcbiAgICBjb250ZXh0LnJlc3RvcmUoKTtcbn07XG5cblxuXG4vKipcbiAqIFJlbmRlcnMgYSBmbGF0IE1lc2hcbiAqXG4gKiBAcGFyYW0gTWVzaCB7UElYSS5tZXNoLk1lc2h9IFRoZSBNZXNoIHRvIHJlbmRlclxuICogQHByaXZhdGVcbiAqL1xuTWVzaC5wcm90b3R5cGUucmVuZGVyTWVzaEZsYXQgPSBmdW5jdGlvbiAoTWVzaClcbntcbiAgICB2YXIgY29udGV4dCA9IHRoaXMuY29udGV4dDtcbiAgICB2YXIgdmVydGljZXMgPSBNZXNoLnZlcnRpY2VzO1xuXG4gICAgdmFyIGxlbmd0aCA9IHZlcnRpY2VzLmxlbmd0aC8yO1xuICAgIC8vIHRoaXMuY291bnQrKztcblxuICAgIGNvbnRleHQuYmVnaW5QYXRoKCk7XG4gICAgZm9yICh2YXIgaT0xOyBpIDwgbGVuZ3RoLTI7IGkrKylcbiAgICB7XG4gICAgICAgIC8vIGRyYXcgc29tZSB0cmlhbmdsZXMhXG4gICAgICAgIHZhciBpbmRleCA9IGkqMjtcblxuICAgICAgICB2YXIgeDAgPSB2ZXJ0aWNlc1tpbmRleF0sICAgeDEgPSB2ZXJ0aWNlc1tpbmRleCsyXSwgeDIgPSB2ZXJ0aWNlc1tpbmRleCs0XTtcbiAgICAgICAgdmFyIHkwID0gdmVydGljZXNbaW5kZXgrMV0sIHkxID0gdmVydGljZXNbaW5kZXgrM10sIHkyID0gdmVydGljZXNbaW5kZXgrNV07XG5cbiAgICAgICAgY29udGV4dC5tb3ZlVG8oeDAsIHkwKTtcbiAgICAgICAgY29udGV4dC5saW5lVG8oeDEsIHkxKTtcbiAgICAgICAgY29udGV4dC5saW5lVG8oeDIsIHkyKTtcbiAgICB9XG5cbiAgICBjb250ZXh0LmZpbGxTdHlsZSA9ICcjRkYwMDAwJztcbiAgICBjb250ZXh0LmZpbGwoKTtcbiAgICBjb250ZXh0LmNsb3NlUGF0aCgpO1xufTtcblxuLyoqXG4gKiBXaGVuIHRoZSB0ZXh0dXJlIGlzIHVwZGF0ZWQsIHRoaXMgZXZlbnQgd2lsbCBmaXJlIHRvIHVwZGF0ZSB0aGUgc2NhbGUgYW5kIGZyYW1lXG4gKlxuICogQHBhcmFtIGV2ZW50XG4gKiBAcHJpdmF0ZVxuICovXG5NZXNoLnByb3RvdHlwZS5fb25UZXh0dXJlVXBkYXRlID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLnVwZGF0ZUZyYW1lID0gdHJ1ZTtcbn07XG5cbi8qKlxuICogUmV0dXJucyB0aGUgYm91bmRzIG9mIHRoZSBtZXNoIGFzIGEgcmVjdGFuZ2xlLiBUaGUgYm91bmRzIGNhbGN1bGF0aW9uIHRha2VzIHRoZSB3b3JsZFRyYW5zZm9ybSBpbnRvIGFjY291bnQuXG4gKlxuICogQHBhcmFtIG1hdHJpeCB7UElYSS5NYXRyaXh9IHRoZSB0cmFuc2Zvcm1hdGlvbiBtYXRyaXggb2YgdGhlIHNwcml0ZVxuICogQHJldHVybiB7UElYSS5SZWN0YW5nbGV9IHRoZSBmcmFtaW5nIHJlY3RhbmdsZVxuICovXG5NZXNoLnByb3RvdHlwZS5nZXRCb3VuZHMgPSBmdW5jdGlvbiAobWF0cml4KVxue1xuICAgIGlmICghdGhpcy5fY3VycmVudEJvdW5kcykge1xuICAgICAgICB2YXIgd29ybGRUcmFuc2Zvcm0gPSBtYXRyaXggfHwgdGhpcy53b3JsZFRyYW5zZm9ybTtcblxuICAgICAgICB2YXIgYSA9IHdvcmxkVHJhbnNmb3JtLmE7XG4gICAgICAgIHZhciBiID0gd29ybGRUcmFuc2Zvcm0uYjtcbiAgICAgICAgdmFyIGMgPSB3b3JsZFRyYW5zZm9ybS5jO1xuICAgICAgICB2YXIgZCA9IHdvcmxkVHJhbnNmb3JtLmQ7XG4gICAgICAgIHZhciB0eCA9IHdvcmxkVHJhbnNmb3JtLnR4O1xuICAgICAgICB2YXIgdHkgPSB3b3JsZFRyYW5zZm9ybS50eTtcblxuICAgICAgICB2YXIgbWF4WCA9IC1JbmZpbml0eTtcbiAgICAgICAgdmFyIG1heFkgPSAtSW5maW5pdHk7XG5cbiAgICAgICAgdmFyIG1pblggPSBJbmZpbml0eTtcbiAgICAgICAgdmFyIG1pblkgPSBJbmZpbml0eTtcblxuICAgICAgICB2YXIgdmVydGljZXMgPSB0aGlzLnZlcnRpY2VzO1xuICAgICAgICBmb3IgKHZhciBpID0gMCwgbiA9IHZlcnRpY2VzLmxlbmd0aDsgaSA8IG47IGkgKz0gMikge1xuICAgICAgICAgICAgdmFyIHJhd1ggPSB2ZXJ0aWNlc1tpXSwgcmF3WSA9IHZlcnRpY2VzW2kgKyAxXTtcbiAgICAgICAgICAgIHZhciB4ID0gKGEgKiByYXdYKSArIChjICogcmF3WSkgKyB0eDtcbiAgICAgICAgICAgIHZhciB5ID0gKGQgKiByYXdZKSArIChiICogcmF3WCkgKyB0eTtcblxuICAgICAgICAgICAgbWluWCA9IHggPCBtaW5YID8geCA6IG1pblg7XG4gICAgICAgICAgICBtaW5ZID0geSA8IG1pblkgPyB5IDogbWluWTtcblxuICAgICAgICAgICAgbWF4WCA9IHggPiBtYXhYID8geCA6IG1heFg7XG4gICAgICAgICAgICBtYXhZID0geSA+IG1heFkgPyB5IDogbWF4WTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChtaW5YID09PSAtSW5maW5pdHkgfHwgbWF4WSA9PT0gSW5maW5pdHkpIHtcbiAgICAgICAgICAgIHJldHVybiBjb3JlLlJlY3RhbmdsZS5FTVBUWTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBib3VuZHMgPSB0aGlzLl9ib3VuZHM7XG5cbiAgICAgICAgYm91bmRzLnggPSBtaW5YO1xuICAgICAgICBib3VuZHMud2lkdGggPSBtYXhYIC0gbWluWDtcblxuICAgICAgICBib3VuZHMueSA9IG1pblk7XG4gICAgICAgIGJvdW5kcy5oZWlnaHQgPSBtYXhZIC0gbWluWTtcblxuICAgICAgICAvLyBzdG9yZSBhIHJlZmVyZW5jZSBzbyB0aGF0IGlmIHRoaXMgZnVuY3Rpb24gZ2V0cyBjYWxsZWQgYWdhaW4gaW4gdGhlIHJlbmRlciBjeWNsZSB3ZSBkbyBub3QgaGF2ZSB0byByZWNhbGN1bGF0ZVxuICAgICAgICB0aGlzLl9jdXJyZW50Qm91bmRzID0gYm91bmRzO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLl9jdXJyZW50Qm91bmRzO1xufTtcblxuLyoqXG4gKiBUZXN0cyBpZiBhIHBvaW50IGlzIGluc2lkZSB0aGlzIG1lc2guIFdvcmtzIG9ubHkgZm9yIFRSSUFOR0xFX01FU0hcbiAqXG4gKiBAcGFyYW0gcG9pbnQge1BJWEkuUG9pbnR9IHRoZSBwb2ludCB0byB0ZXN0XG4gKiBAcmV0dXJuIHtib29sZWFufSB0aGUgcmVzdWx0IG9mIHRoZSB0ZXN0XG4gKi9cbk1lc2gucHJvdG90eXBlLmNvbnRhaW5zUG9pbnQgPSBmdW5jdGlvbiggcG9pbnQgKSB7XG4gICAgaWYgKCF0aGlzLmdldEJvdW5kcygpLmNvbnRhaW5zKHBvaW50LngsIHBvaW50LnkpKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgdGhpcy53b3JsZFRyYW5zZm9ybS5hcHBseUludmVyc2UocG9pbnQsICB0ZW1wUG9pbnQpO1xuXG4gICAgdmFyIHZlcnRpY2VzID0gdGhpcy52ZXJ0aWNlcztcbiAgICB2YXIgcG9pbnRzID0gdGVtcFBvbHlnb24ucG9pbnRzO1xuICAgIHZhciBpLCBsZW47XG5cbiAgICBpZiAodGhpcy5kcmF3TW9kZSA9PT0gTWVzaC5EUkFXX01PREVTLlRSSUFOR0xFUykge1xuICAgICAgICB2YXIgaW5kaWNlcyA9IHRoaXMuaW5kaWNlcztcbiAgICAgICAgbGVuID0gdGhpcy5pbmRpY2VzLmxlbmd0aDtcbiAgICAgICAgLy9UT0RPOiBpbmxpbmUgdGhpcy5cbiAgICAgICAgZm9yIChpPTA7aTxsZW47aSs9Mykge1xuICAgICAgICAgICAgdmFyIGluZDAgPSBpbmRpY2VzW2ldKjIsIGluZDEgPSBpbmRpY2VzW2krMV0qMiwgaW5kMiA9IGluZGljZXNbaSsyXSoyO1xuICAgICAgICAgICAgcG9pbnRzWzBdID0gdmVydGljZXNbaW5kMF07XG4gICAgICAgICAgICBwb2ludHNbMV0gPSB2ZXJ0aWNlc1tpbmQwKzFdO1xuICAgICAgICAgICAgcG9pbnRzWzJdID0gdmVydGljZXNbaW5kMV07XG4gICAgICAgICAgICBwb2ludHNbM10gPSB2ZXJ0aWNlc1tpbmQxKzFdO1xuICAgICAgICAgICAgcG9pbnRzWzRdID0gdmVydGljZXNbaW5kMl07XG4gICAgICAgICAgICBwb2ludHNbNV0gPSB2ZXJ0aWNlc1tpbmQyKzFdO1xuICAgICAgICAgICAgaWYgKHRlbXBQb2x5Z29uLmNvbnRhaW5zKHRlbXBQb2ludC54LCB0ZW1wUG9pbnQueSkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAgIGxlbiA9IHZlcnRpY2VzLmxlbmd0aDtcbiAgICAgICAgZm9yIChpPTA7aTxsZW47aSs9Nikge1xuICAgICAgICAgICAgcG9pbnRzWzBdID0gdmVydGljZXNbaV07XG4gICAgICAgICAgICBwb2ludHNbMV0gPSB2ZXJ0aWNlc1tpKzFdO1xuICAgICAgICAgICAgcG9pbnRzWzJdID0gdmVydGljZXNbaSsyXTtcbiAgICAgICAgICAgIHBvaW50c1szXSA9IHZlcnRpY2VzW2krM107XG4gICAgICAgICAgICBwb2ludHNbNF0gPSB2ZXJ0aWNlc1tpKzRdO1xuICAgICAgICAgICAgcG9pbnRzWzVdID0gdmVydGljZXNbaSs1XTtcbiAgICAgICAgICAgIGlmICh0ZW1wUG9seWdvbi5jb250YWlucyh0ZW1wUG9pbnQueCwgdGVtcFBvaW50LnkpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xufTtcblxuLyoqXG4gKiBEaWZmZXJlbnQgZHJhd2luZyBidWZmZXIgbW9kZXMgc3VwcG9ydGVkXG4gKlxuICogQHN0YXRpY1xuICogQGNvbnN0YW50XG4gKiBAcHJvcGVydHkge29iamVjdH0gRFJBV19NT0RFU1xuICogQHByb3BlcnR5IHtudW1iZXJ9IERSQVdfTU9ERVMuVFJJQU5HTEVfTUVTSFxuICogQHByb3BlcnR5IHtudW1iZXJ9IERSQVdfTU9ERVMuVFJJQU5HTEVTXG4gKi9cbk1lc2guRFJBV19NT0RFUyA9IHtcbiAgICBUUklBTkdMRV9NRVNIOiAwLFxuICAgIFRSSUFOR0xFUzogMVxufTtcbiIsInZhciBNZXNoID0gcmVxdWlyZSgnLi9NZXNoJyk7XG5cbi8qKlxuICogVGhlIFBsYW5lIGFsbG93cyB5b3UgdG8gZHJhdyBhIHRleHR1cmUgYWNyb3NzIHNldmVyYWwgcG9pbnRzIGFuZCB0aGVtIG1hbmlwdWxhdGUgdGhlc2UgcG9pbnRzXG4gKlxuICpgYGBqc1xuICogZm9yICh2YXIgaSA9IDA7IGkgPCAyMDsgaSsrKSB7XG4gKiAgICAgcG9pbnRzLnB1c2gobmV3IFBJWEkuUG9pbnQoaSAqIDUwLCAwKSk7XG4gKiB9O1xuICogdmFyIFBsYW5lID0gbmV3IFBJWEkuUGxhbmUoUElYSS5UZXh0dXJlLmZyb21JbWFnZShcInNuYWtlLnBuZ1wiKSwgcG9pbnRzKTtcbiAqICBgYGBcbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkubWVzaC5NZXNoXG4gKiBAbWVtYmVyb2YgUElYSS5tZXNoXG4gKiBAcGFyYW0ge1BJWEkuVGV4dHVyZX0gdGV4dHVyZSAtIFRoZSB0ZXh0dXJlIHRvIHVzZSBvbiB0aGUgUGxhbmUuXG4gKiBAcGFyYW0ge2ludH0gc2VnbWVudHNYIC0gVGhlIG51bWJlciBveCB4IHNlZ21lbnRzXG4gKiBAcGFyYW0ge2ludH0gc2VnbWVudHNZIC0gVGhlIG51bWJlciBvZiB5IHNlZ21lbnRzXG4gKlxuICovXG5mdW5jdGlvbiBQbGFuZSh0ZXh0dXJlLCBzZWdtZW50c1gsIHNlZ21lbnRzWSlcbntcbiAgICBNZXNoLmNhbGwodGhpcywgdGV4dHVyZSk7XG5cbiAgICAvKipcbiAgICAgKiBUcmFja2VyIGZvciBpZiB0aGUgUGxhbmUgaXMgcmVhZHkgdG8gYmUgZHJhd24uIE5lZWRlZCBiZWNhdXNlIE1lc2ggY3RvciBjYW5cbiAgICAgKiBjYWxsIF9vblRleHR1cmVVcGRhdGVkIHdoaWNoIGNvdWxkIGNhbGwgcmVmcmVzaCB0b28gZWFybHkuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fcmVhZHkgPSB0cnVlO1xuXG4gICAgdGhpcy5zZWdtZW50c1ggPSAgc2VnbWVudHNYIHx8IDEwO1xuICAgIHRoaXMuc2VnbWVudHNZID0gc2VnbWVudHNZIHx8IDEwO1xuXG4gICAgdGhpcy5kcmF3TW9kZSA9IE1lc2guRFJBV19NT0RFUy5UUklBTkdMRVM7XG4gICAgdGhpcy5yZWZyZXNoKCk7XG5cbn1cblxuXG4vLyBjb25zdHJ1Y3RvclxuUGxhbmUucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZSggTWVzaC5wcm90b3R5cGUgKTtcblBsYW5lLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFBsYW5lO1xubW9kdWxlLmV4cG9ydHMgPSBQbGFuZTtcblxuLyoqXG4gKiBSZWZyZXNoZXNcbiAqXG4gKi9cblBsYW5lLnByb3RvdHlwZS5yZWZyZXNoID0gZnVuY3Rpb24oKVxue1xuICAgIHZhciB0b3RhbCA9IHRoaXMuc2VnbWVudHNYICogdGhpcy5zZWdtZW50c1k7XG4gICAgdmFyIHZlcnRzID0gW107XG4gICAgdmFyIGNvbG9ycyA9IFtdO1xuICAgIHZhciB1dnMgPSBbXTtcbiAgICB2YXIgaW5kaWNlcyA9IFtdO1xuICAgIHZhciB0ZXh0dXJlID0gdGhpcy50ZXh0dXJlO1xuXG4gIC8vICB0ZXh0dXJlLndpZHRoID0gODAwIHRleHR1cmUud2lkdGggfHwgODAwO1xuIC8vICAgdGV4dHVyZS5oZWlnaHQgPSA4MDAvL3RleHR1cmUuaGVpZ2h0IHx8IDgwMDtcblxuICAgIHZhciBzZWdtZW50c1hTdWIgPSB0aGlzLnNlZ21lbnRzWCAtIDE7XG4gICAgdmFyIHNlZ21lbnRzWVN1YiA9IHRoaXMuc2VnbWVudHNZIC0gMTtcbiAgICB2YXIgaSA9IDA7XG5cbiAgICB2YXIgc2l6ZVggPSB0ZXh0dXJlLndpZHRoIC8gc2VnbWVudHNYU3ViO1xuICAgIHZhciBzaXplWSA9IHRleHR1cmUuaGVpZ2h0IC8gc2VnbWVudHNZU3ViO1xuXG4gICAgZm9yIChpID0gMDsgaSA8IHRvdGFsOyBpKyspIHtcblxuICAgICAgICB2YXIgeCA9IChpICUgdGhpcy5zZWdtZW50c1gpO1xuICAgICAgICB2YXIgeSA9ICggKGkgLyB0aGlzLnNlZ21lbnRzWCApIHwgMCApO1xuXG5cbiAgICAgICAgdmVydHMucHVzaCgoeCAqIHNpemVYKSxcbiAgICAgICAgICAgICAgICAgICAoeSAqIHNpemVZKSk7XG5cbiAgICAgICAgLy8gdGhpcyB3b3JrcyBmb3IgcmVjdGFuZ3VsYXIgdGV4dHVyZXMuIFxuICAgICAgICB1dnMucHVzaCh0ZXh0dXJlLl91dnMueDAgKyAodGV4dHVyZS5fdXZzLngxIC0gdGV4dHVyZS5fdXZzLngwKSAqICh4IC8gKHRoaXMuc2VnbWVudHNYLTEpKSwgdGV4dHVyZS5fdXZzLnkwICsgKHRleHR1cmUuX3V2cy55My10ZXh0dXJlLl91dnMueTApICogKHkvICh0aGlzLnNlZ21lbnRzWS0xKSkpO1xuICAgICAgfVxuXG4gICAgLy8gIGNvbnNcblxuICAgIHZhciB0b3RhbFN1YiA9IHNlZ21lbnRzWFN1YiAqIHNlZ21lbnRzWVN1YjtcblxuICAgIGZvciAoaSA9IDA7IGkgPCB0b3RhbFN1YjsgaSsrKSB7XG5cbiAgICAgICAgdmFyIHhwb3MgPSBpICUgc2VnbWVudHNYU3ViO1xuICAgICAgICB2YXIgeXBvcyA9IChpIC8gc2VnbWVudHNYU3ViICkgfCAwO1xuXG5cbiAgICAgICAgdmFyICB2YWx1ZSA9ICh5cG9zICogdGhpcy5zZWdtZW50c1gpICsgeHBvcztcbiAgICAgICAgdmFyICB2YWx1ZTIgPSAoeXBvcyAqIHRoaXMuc2VnbWVudHNYKSArIHhwb3MgKyAxO1xuICAgICAgICB2YXIgIHZhbHVlMyA9ICgoeXBvcysxKSAqIHRoaXMuc2VnbWVudHNYKSArIHhwb3M7XG4gICAgICAgIHZhciAgdmFsdWU0ID0gKCh5cG9zKzEpICogdGhpcy5zZWdtZW50c1gpICsgeHBvcyArIDE7XG5cbiAgICAgICAgaW5kaWNlcy5wdXNoKHZhbHVlLCB2YWx1ZTIsIHZhbHVlMyk7XG4gICAgICAgIGluZGljZXMucHVzaCh2YWx1ZTIsIHZhbHVlNCwgdmFsdWUzKTtcbiAgICB9XG5cblxuICAgIC8vY29uc29sZS5sb2coaW5kaWNlcylcbiAgICB0aGlzLnZlcnRpY2VzID0gbmV3IEZsb2F0MzJBcnJheSh2ZXJ0cyk7XG4gICAgdGhpcy51dnMgPSBuZXcgRmxvYXQzMkFycmF5KHV2cyk7XG4gICAgdGhpcy5jb2xvcnMgPSBuZXcgRmxvYXQzMkFycmF5KGNvbG9ycyk7XG4gICAgdGhpcy5pbmRpY2VzID0gbmV3IFVpbnQxNkFycmF5KGluZGljZXMpO1xufTtcblxuLyoqXG4gKiBDbGVhciB0ZXh0dXJlIFVWcyB3aGVuIG5ldyB0ZXh0dXJlIGlzIHNldFxuICpcbiAqIEBwcml2YXRlXG4gKi9cblBsYW5lLnByb3RvdHlwZS5fb25UZXh0dXJlVXBkYXRlID0gZnVuY3Rpb24gKClcbntcbiAgICBNZXNoLnByb3RvdHlwZS5fb25UZXh0dXJlVXBkYXRlLmNhbGwodGhpcyk7XG5cbiAgICAvLyB3YWl0IGZvciB0aGUgUGxhbmUgY3RvciB0byBmaW5pc2ggYmVmb3JlIGNhbGxpbmcgcmVmcmVzaFxuICAgIGlmICh0aGlzLl9yZWFkeSkge1xuICAgICAgICB0aGlzLnJlZnJlc2goKTtcbiAgICB9XG59O1xuIiwidmFyIE1lc2ggPSByZXF1aXJlKCcuL01lc2gnKTtcbnZhciBjb3JlID0gcmVxdWlyZSgnLi4vY29yZScpO1xuXG4vKipcbiAqIFRoZSByb3BlIGFsbG93cyB5b3UgdG8gZHJhdyBhIHRleHR1cmUgYWNyb3NzIHNldmVyYWwgcG9pbnRzIGFuZCB0aGVtIG1hbmlwdWxhdGUgdGhlc2UgcG9pbnRzXG4gKlxuICpgYGBqc1xuICogZm9yICh2YXIgaSA9IDA7IGkgPCAyMDsgaSsrKSB7XG4gKiAgICAgcG9pbnRzLnB1c2gobmV3IFBJWEkuUG9pbnQoaSAqIDUwLCAwKSk7XG4gKiB9O1xuICogdmFyIHJvcGUgPSBuZXcgUElYSS5Sb3BlKFBJWEkuVGV4dHVyZS5mcm9tSW1hZ2UoXCJzbmFrZS5wbmdcIiksIHBvaW50cyk7XG4gKiAgYGBgXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLm1lc2guTWVzaFxuICogQG1lbWJlcm9mIFBJWEkubWVzaFxuICogQHBhcmFtIHtQSVhJLlRleHR1cmV9IHRleHR1cmUgLSBUaGUgdGV4dHVyZSB0byB1c2Ugb24gdGhlIHJvcGUuXG4gKiBAcGFyYW0ge1BJWEkuUG9pbnRbXX0gcG9pbnRzIC0gQW4gYXJyYXkgb2Yge0BsaW5rIFBJWEkuUG9pbnR9IG9iamVjdHMgdG8gY29uc3RydWN0IHRoaXMgcm9wZS5cbiAqXG4gKi9cbmZ1bmN0aW9uIFJvcGUodGV4dHVyZSwgcG9pbnRzKVxue1xuICAgIE1lc2guY2FsbCh0aGlzLCB0ZXh0dXJlKTtcblxuICAgIC8qXG4gICAgICogQG1lbWJlciB7UElYSS5Qb2ludFtdfSBBbiBhcnJheSBvZiBwb2ludHMgdGhhdCBkZXRlcm1pbmUgdGhlIHJvcGVcbiAgICAgKi9cbiAgICB0aGlzLnBvaW50cyA9IHBvaW50cztcblxuICAgIC8qXG4gICAgICogQG1lbWJlciB7RmxvYXQzMkFycmF5fSBBbiBhcnJheSBvZiB2ZXJ0aWNlcyB1c2VkIHRvIGNvbnN0cnVjdCB0aGlzIHJvcGUuXG4gICAgICovXG4gICAgdGhpcy52ZXJ0aWNlcyA9IG5ldyBGbG9hdDMyQXJyYXkocG9pbnRzLmxlbmd0aCAqIDQpO1xuXG4gICAgLypcbiAgICAgKiBAbWVtYmVyIHtGbG9hdDMyQXJyYXl9IFRoZSBXZWJHTCBVdnMgb2YgdGhlIHJvcGUuXG4gICAgICovXG4gICAgdGhpcy51dnMgPSBuZXcgRmxvYXQzMkFycmF5KHBvaW50cy5sZW5ndGggKiA0KTtcblxuICAgIC8qXG4gICAgICogQG1lbWJlciB7RmxvYXQzMkFycmF5fSBBbiBhcnJheSBjb250YWluaW5nIHRoZSBjb2xvciBjb21wb25lbnRzXG4gICAgICovXG4gICAgdGhpcy5jb2xvcnMgPSBuZXcgRmxvYXQzMkFycmF5KHBvaW50cy5sZW5ndGggKiAyKTtcblxuICAgIC8qXG4gICAgICogQG1lbWJlciB7VWludDE2QXJyYXl9IEFuIGFycmF5IGNvbnRhaW5pbmcgdGhlIGluZGljZXMgb2YgdGhlIHZlcnRpY2VzXG4gICAgICovXG4gICAgdGhpcy5pbmRpY2VzID0gbmV3IFVpbnQxNkFycmF5KHBvaW50cy5sZW5ndGggKiAyKTtcblxuICAgIC8qKlxuICAgICAqIFRyYWNrZXIgZm9yIGlmIHRoZSByb3BlIGlzIHJlYWR5IHRvIGJlIGRyYXduLiBOZWVkZWQgYmVjYXVzZSBNZXNoIGN0b3IgY2FuXG4gICAgICogY2FsbCBfb25UZXh0dXJlVXBkYXRlZCB3aGljaCBjb3VsZCBjYWxsIHJlZnJlc2ggdG9vIGVhcmx5LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgICB0aGlzLl9yZWFkeSA9IHRydWU7XG5cbiAgICAgdGhpcy5yZWZyZXNoKCk7XG59XG5cblxuLy8gY29uc3RydWN0b3JcblJvcGUucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShNZXNoLnByb3RvdHlwZSk7XG5Sb3BlLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFJvcGU7XG5tb2R1bGUuZXhwb3J0cyA9IFJvcGU7XG5cbi8qKlxuICogUmVmcmVzaGVzXG4gKlxuICovXG5Sb3BlLnByb3RvdHlwZS5yZWZyZXNoID0gZnVuY3Rpb24gKClcbntcbiAgICB2YXIgcG9pbnRzID0gdGhpcy5wb2ludHM7XG5cbiAgICAvLyBpZiB0b28gbGl0dGxlIHBvaW50cywgb3IgdGV4dHVyZSBoYXNuJ3QgZ290IFVWcyBzZXQgeWV0IGp1c3QgbW92ZSBvbi5cbiAgICBpZiAocG9pbnRzLmxlbmd0aCA8IDEgfHwgIXRoaXMuX3RleHR1cmUuX3V2cylcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB2YXIgdXZzID0gdGhpcy51dnM7XG5cbiAgICB2YXIgaW5kaWNlcyA9IHRoaXMuaW5kaWNlcztcbiAgICB2YXIgY29sb3JzID0gdGhpcy5jb2xvcnM7XG5cbiAgICB2YXIgdGV4dHVyZVV2cyA9IHRoaXMuX3RleHR1cmUuX3V2cztcbiAgICB2YXIgb2Zmc2V0ID0gbmV3IGNvcmUuUG9pbnQodGV4dHVyZVV2cy54MCwgdGV4dHVyZVV2cy55MCk7XG4gICAgdmFyIGZhY3RvciA9IG5ldyBjb3JlLlBvaW50KHRleHR1cmVVdnMueDIgLSB0ZXh0dXJlVXZzLngwLCB0ZXh0dXJlVXZzLnkyIC0gdGV4dHVyZVV2cy55MCk7XG5cbiAgICB1dnNbMF0gPSAwICsgb2Zmc2V0Lng7XG4gICAgdXZzWzFdID0gMCArIG9mZnNldC55O1xuICAgIHV2c1syXSA9IDAgKyBvZmZzZXQueDtcbiAgICB1dnNbM10gPSAxICogZmFjdG9yLnkgKyBvZmZzZXQueTtcblxuICAgIGNvbG9yc1swXSA9IDE7XG4gICAgY29sb3JzWzFdID0gMTtcblxuICAgIGluZGljZXNbMF0gPSAwO1xuICAgIGluZGljZXNbMV0gPSAxO1xuXG4gICAgdmFyIHRvdGFsID0gcG9pbnRzLmxlbmd0aCxcbiAgICAgICAgcG9pbnQsIGluZGV4LCBhbW91bnQ7XG5cbiAgICBmb3IgKHZhciBpID0gMTsgaSA8IHRvdGFsOyBpKyspXG4gICAge1xuICAgICAgICBwb2ludCA9IHBvaW50c1tpXTtcbiAgICAgICAgaW5kZXggPSBpICogNDtcbiAgICAgICAgLy8gdGltZSB0byBkbyBzb21lIHNtYXJ0IGRyYXdpbmchXG4gICAgICAgIGFtb3VudCA9IGkgLyAodG90YWwtMSk7XG5cbiAgICAgICAgdXZzW2luZGV4XSA9IGFtb3VudCAqIGZhY3Rvci54ICsgb2Zmc2V0Lng7XG4gICAgICAgIHV2c1tpbmRleCsxXSA9IDAgKyBvZmZzZXQueTtcblxuICAgICAgICB1dnNbaW5kZXgrMl0gPSBhbW91bnQgKiBmYWN0b3IueCArIG9mZnNldC54O1xuICAgICAgICB1dnNbaW5kZXgrM10gPSAxICogZmFjdG9yLnkgKyBvZmZzZXQueTtcblxuICAgICAgICBpbmRleCA9IGkgKiAyO1xuICAgICAgICBjb2xvcnNbaW5kZXhdID0gMTtcbiAgICAgICAgY29sb3JzW2luZGV4KzFdID0gMTtcblxuICAgICAgICBpbmRleCA9IGkgKiAyO1xuICAgICAgICBpbmRpY2VzW2luZGV4XSA9IGluZGV4O1xuICAgICAgICBpbmRpY2VzW2luZGV4ICsgMV0gPSBpbmRleCArIDE7XG4gICAgfVxuXG4gICAgdGhpcy5kaXJ0eSA9IHRydWU7XG59O1xuXG4vKipcbiAqIENsZWFyIHRleHR1cmUgVVZzIHdoZW4gbmV3IHRleHR1cmUgaXMgc2V0XG4gKlxuICogQHByaXZhdGVcbiAqL1xuUm9wZS5wcm90b3R5cGUuX29uVGV4dHVyZVVwZGF0ZSA9IGZ1bmN0aW9uICgpXG57XG4gICAgTWVzaC5wcm90b3R5cGUuX29uVGV4dHVyZVVwZGF0ZS5jYWxsKHRoaXMpO1xuXG4gICAgLy8gd2FpdCBmb3IgdGhlIFJvcGUgY3RvciB0byBmaW5pc2ggYmVmb3JlIGNhbGxpbmcgcmVmcmVzaFxuICAgIGlmICh0aGlzLl9yZWFkeSkge1xuICAgICAgICB0aGlzLnJlZnJlc2goKTtcbiAgICB9XG59O1xuXG4vKipcbiAqIFVwZGF0ZXMgdGhlIG9iamVjdCB0cmFuc2Zvcm0gZm9yIHJlbmRlcmluZ1xuICpcbiAqIEBwcml2YXRlXG4gKi9cblJvcGUucHJvdG90eXBlLnVwZGF0ZVRyYW5zZm9ybSA9IGZ1bmN0aW9uICgpXG57XG4gICAgdmFyIHBvaW50cyA9IHRoaXMucG9pbnRzO1xuXG4gICAgaWYgKHBvaW50cy5sZW5ndGggPCAxKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHZhciBsYXN0UG9pbnQgPSBwb2ludHNbMF07XG4gICAgdmFyIG5leHRQb2ludDtcbiAgICB2YXIgcGVycFggPSAwO1xuICAgIHZhciBwZXJwWSA9IDA7XG5cbiAgICAvLyB0aGlzLmNvdW50IC09IDAuMjtcblxuICAgIHZhciB2ZXJ0aWNlcyA9IHRoaXMudmVydGljZXM7XG4gICAgdmFyIHRvdGFsID0gcG9pbnRzLmxlbmd0aCxcbiAgICAgICAgcG9pbnQsIGluZGV4LCByYXRpbywgcGVycExlbmd0aCwgbnVtO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0b3RhbDsgaSsrKVxuICAgIHtcbiAgICAgICAgcG9pbnQgPSBwb2ludHNbaV07XG4gICAgICAgIGluZGV4ID0gaSAqIDQ7XG5cbiAgICAgICAgaWYgKGkgPCBwb2ludHMubGVuZ3RoLTEpXG4gICAgICAgIHtcbiAgICAgICAgICAgIG5leHRQb2ludCA9IHBvaW50c1tpKzFdO1xuICAgICAgICB9XG4gICAgICAgIGVsc2VcbiAgICAgICAge1xuICAgICAgICAgICAgbmV4dFBvaW50ID0gcG9pbnQ7XG4gICAgICAgIH1cblxuICAgICAgICBwZXJwWSA9IC0obmV4dFBvaW50LnggLSBsYXN0UG9pbnQueCk7XG4gICAgICAgIHBlcnBYID0gbmV4dFBvaW50LnkgLSBsYXN0UG9pbnQueTtcblxuICAgICAgICByYXRpbyA9ICgxIC0gKGkgLyAodG90YWwtMSkpKSAqIDEwO1xuXG4gICAgICAgIGlmIChyYXRpbyA+IDEpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJhdGlvID0gMTtcbiAgICAgICAgfVxuXG4gICAgICAgIHBlcnBMZW5ndGggPSBNYXRoLnNxcnQocGVycFggKiBwZXJwWCArIHBlcnBZICogcGVycFkpO1xuICAgICAgICBudW0gPSB0aGlzLl90ZXh0dXJlLmhlaWdodCAvIDI7IC8vKDIwICsgTWF0aC5hYnMoTWF0aC5zaW4oKGkgKyB0aGlzLmNvdW50KSAqIDAuMykgKiA1MCkgKSogcmF0aW87XG4gICAgICAgIHBlcnBYIC89IHBlcnBMZW5ndGg7XG4gICAgICAgIHBlcnBZIC89IHBlcnBMZW5ndGg7XG5cbiAgICAgICAgcGVycFggKj0gbnVtO1xuICAgICAgICBwZXJwWSAqPSBudW07XG5cbiAgICAgICAgdmVydGljZXNbaW5kZXhdID0gcG9pbnQueCArIHBlcnBYO1xuICAgICAgICB2ZXJ0aWNlc1tpbmRleCsxXSA9IHBvaW50LnkgKyBwZXJwWTtcbiAgICAgICAgdmVydGljZXNbaW5kZXgrMl0gPSBwb2ludC54IC0gcGVycFg7XG4gICAgICAgIHZlcnRpY2VzW2luZGV4KzNdID0gcG9pbnQueSAtIHBlcnBZO1xuXG4gICAgICAgIGxhc3RQb2ludCA9IHBvaW50O1xuICAgIH1cblxuICAgIHRoaXMuY29udGFpbmVyVXBkYXRlVHJhbnNmb3JtKCk7XG59O1xuIiwiLyoqXG4gKiBAZmlsZSAgICAgICAgTWFpbiBleHBvcnQgb2YgdGhlIFBJWEkgZXh0cmFzIGxpYnJhcnlcbiAqIEBhdXRob3IgICAgICBNYXQgR3JvdmVzIDxtYXRAZ29vZGJveWRpZ2l0YWwuY29tPlxuICogQGNvcHlyaWdodCAgIDIwMTMtMjAxNSBHb29kQm95RGlnaXRhbFxuICogQGxpY2Vuc2UgICAgIHtAbGluayBodHRwczovL2dpdGh1Yi5jb20vcGl4aWpzL3BpeGkuanMvYmxvYi9tYXN0ZXIvTElDRU5TRXxNSVQgTGljZW5zZX1cbiAqL1xuXG4vKipcbiAqIEBuYW1lc3BhY2UgUElYSS5tZXNoXG4gKi9cbm1vZHVsZS5leHBvcnRzID0ge1xuICAgIE1lc2g6ICAgICAgICAgICByZXF1aXJlKCcuL01lc2gnKSxcbiAgICBQbGFuZTogICAgICAgICAgIHJlcXVpcmUoJy4vUGxhbmUnKSxcbiAgICBSb3BlOiAgICAgICAgICAgcmVxdWlyZSgnLi9Sb3BlJyksXG4gICAgTWVzaFJlbmRlcmVyOiAgIHJlcXVpcmUoJy4vd2ViZ2wvTWVzaFJlbmRlcmVyJyksXG4gICAgTWVzaFNoYWRlcjogICAgIHJlcXVpcmUoJy4vd2ViZ2wvTWVzaFNoYWRlcicpXG59O1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi8uLi9jb3JlJyksXG4gICAgTWVzaCA9IHJlcXVpcmUoJy4uL01lc2gnKTtcblxuLyoqXG4gKiBAYXV0aG9yIE1hdCBHcm92ZXNcbiAqXG4gKiBCaWcgdGhhbmtzIHRvIHRoZSB2ZXJ5IGNsZXZlciBNYXR0IERlc0xhdXJpZXJzIDxtYXR0ZGVzbD4gaHR0cHM6Ly9naXRodWIuY29tL21hdHRkZXNsL1xuICogZm9yIGNyZWF0aW5nIHRoZSBvcmlnaW5hbCBwaXhpIHZlcnNpb24hXG4gKiBBbHNvIGEgdGhhbmtzIHRvIGh0dHBzOi8vZ2l0aHViLmNvbS9iY2hldmFsaWVyIGZvciB0d2Vha2luZyB0aGUgdGludCBhbmQgYWxwaGEgc28gdGhhdCB0aGV5IG5vdyBzaGFyZSA0IGJ5dGVzIG9uIHRoZSB2ZXJ0ZXggYnVmZmVyXG4gKlxuICogSGVhdmlseSBpbnNwaXJlZCBieSBMaWJHRFgncyBNZXNoUmVuZGVyZXI6XG4gKiBodHRwczovL2dpdGh1Yi5jb20vbGliZ2R4L2xpYmdkeC9ibG9iL21hc3Rlci9nZHgvc3JjL2NvbS9iYWRsb2dpYy9nZHgvZ3JhcGhpY3MvZzJkL01lc2hSZW5kZXJlci5qYXZhXG4gKi9cblxuLyoqXG4gKlxuICogQGNsYXNzXG4gKiBAcHJpdmF0ZVxuICogQG1lbWJlcm9mIFBJWEkubWVzaFxuICogQGV4dGVuZHMgUElYSS5PYmplY3RSZW5kZXJlclxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLldlYkdMUmVuZGVyZXJ9IFRoZSByZW5kZXJlciB0aGlzIHNwcml0ZSBiYXRjaCB3b3JrcyBmb3IuXG4gKi9cbmZ1bmN0aW9uIE1lc2hSZW5kZXJlcihyZW5kZXJlcilcbntcbiAgICBjb3JlLk9iamVjdFJlbmRlcmVyLmNhbGwodGhpcywgcmVuZGVyZXIpO1xuXG5cbiAgICAvKipcbiAgICAgKiBIb2xkcyB0aGUgaW5kaWNlc1xuICAgICAqXG4gICAgICogQG1lbWJlciB7VWludDE2QXJyYXl9XG4gICAgICovXG4gICAgXG4gICAgdGhpcy5pbmRpY2VzID0gbmV3IFVpbnQxNkFycmF5KDE1MDAwKTtcblxuICAgIC8vVE9ETyB0aGlzIGNvdWxkIGJlIGEgc2luZ2xlIGJ1ZmZlciBzaGFyZWQgYW1vbmdzdCBhbGwgcmVuZGVyZXJzIGFzIHdlIHJldXNlIHRoaXMgc2V0IHVwIGluIG1vc3QgcmVuZGVyZXJzXG4gICAgZm9yICh2YXIgaT0wLCBqPTA7IGkgPCAxNTAwMDsgaSArPSA2LCBqICs9IDQpXG4gICAge1xuICAgICAgICB0aGlzLmluZGljZXNbaSArIDBdID0gaiArIDA7XG4gICAgICAgIHRoaXMuaW5kaWNlc1tpICsgMV0gPSBqICsgMTtcbiAgICAgICAgdGhpcy5pbmRpY2VzW2kgKyAyXSA9IGogKyAyO1xuICAgICAgICB0aGlzLmluZGljZXNbaSArIDNdID0gaiArIDA7XG4gICAgICAgIHRoaXMuaW5kaWNlc1tpICsgNF0gPSBqICsgMjtcbiAgICAgICAgdGhpcy5pbmRpY2VzW2kgKyA1XSA9IGogKyAzO1xuICAgIH1cblxuICAgIHRoaXMuY3VycmVudFNoYWRlciA9IG51bGw7XG59XG5cbk1lc2hSZW5kZXJlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuT2JqZWN0UmVuZGVyZXIucHJvdG90eXBlKTtcbk1lc2hSZW5kZXJlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBNZXNoUmVuZGVyZXI7XG5tb2R1bGUuZXhwb3J0cyA9IE1lc2hSZW5kZXJlcjtcblxuY29yZS5XZWJHTFJlbmRlcmVyLnJlZ2lzdGVyUGx1Z2luKCdtZXNoJywgTWVzaFJlbmRlcmVyKTtcblxuLyoqXG4gKiBTZXRzIHVwIHRoZSByZW5kZXJlciBjb250ZXh0IGFuZCBuZWNlc3NhcnkgYnVmZmVycy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIGdsIHtXZWJHTFJlbmRlcmluZ0NvbnRleHR9IHRoZSBjdXJyZW50IFdlYkdMIGRyYXdpbmcgY29udGV4dFxuICovXG5NZXNoUmVuZGVyZXIucHJvdG90eXBlLm9uQ29udGV4dENoYW5nZSA9IGZ1bmN0aW9uICgpXG57XG5cbn07XG5cbi8qKlxuICogUmVuZGVycyB0aGUgc3ByaXRlIG9iamVjdC5cbiAqXG4gKiBAcGFyYW0gbWVzaCB7UElYSS5tZXNoLk1lc2h9IHRoZSBtZXNoIHRvIHJlbmRlclxuICovXG5NZXNoUmVuZGVyZXIucHJvdG90eXBlLnJlbmRlciA9IGZ1bmN0aW9uIChtZXNoKVxue1xuICAgIGlmKCFtZXNoLl92ZXJ0ZXhCdWZmZXIpXG4gICAge1xuICAgICAgICB0aGlzLl9pbml0V2ViR0wobWVzaCk7XG4gICAgfVxuXG4gICAgdmFyIHJlbmRlcmVyID0gdGhpcy5yZW5kZXJlcixcbiAgICAgICAgZ2wgPSByZW5kZXJlci5nbCxcbiAgICAgICAgdGV4dHVyZSA9IG1lc2guX3RleHR1cmUuYmFzZVRleHR1cmUsXG4gICAgICAgIHNoYWRlciA9IG1lc2guc2hhZGVyOy8vIHx8IHJlbmRlcmVyLnNoYWRlck1hbmFnZXIucGx1Z2lucy5tZXNoU2hhZGVyO1xuXG4gICAgdmFyIGRyYXdNb2RlID0gbWVzaC5kcmF3TW9kZSA9PT0gTWVzaC5EUkFXX01PREVTLlRSSUFOR0xFX01FU0ggPyBnbC5UUklBTkdMRV9TVFJJUCA6IGdsLlRSSUFOR0xFUztcblxuICAgIHJlbmRlcmVyLmJsZW5kTW9kZU1hbmFnZXIuc2V0QmxlbmRNb2RlKG1lc2guYmxlbmRNb2RlKTtcblxuICAgIC8vVE9ETyBjYWNoZSBjdXN0b20gc3RhdGUuLlxuICAgIGlmICghc2hhZGVyKVxuICAgIHtcbiAgICAgICAgc2hhZGVyID0gcmVuZGVyZXIuc2hhZGVyTWFuYWdlci5wbHVnaW5zLm1lc2hTaGFkZXI7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHNoYWRlciA9IHNoYWRlci5zaGFkZXJzW2dsLmlkXSB8fCBzaGFkZXIuZ2V0U2hhZGVyKHJlbmRlcmVyKTsvLyA6IHNoYWRlcjtcbiAgICB9XG5cbiAgICB0aGlzLnJlbmRlcmVyLnNoYWRlck1hbmFnZXIuc2V0U2hhZGVyKHNoYWRlcik7XG5cbiAgICBzaGFkZXIudW5pZm9ybXMudHJhbnNsYXRpb25NYXRyaXgudmFsdWUgPSBtZXNoLndvcmxkVHJhbnNmb3JtLnRvQXJyYXkodHJ1ZSk7XG4gICAgc2hhZGVyLnVuaWZvcm1zLnByb2plY3Rpb25NYXRyaXgudmFsdWUgPSByZW5kZXJlci5jdXJyZW50UmVuZGVyVGFyZ2V0LnByb2plY3Rpb25NYXRyaXgudG9BcnJheSh0cnVlKTtcbiAgICBzaGFkZXIudW5pZm9ybXMuYWxwaGEudmFsdWUgPSBtZXNoLndvcmxkQWxwaGE7XG5cbiAgICBzaGFkZXIuc3luY1VuaWZvcm1zKCk7XG5cbiAgICBpZiAoIW1lc2guZGlydHkpXG4gICAge1xuXG4gICAgICAgIGdsLmJpbmRCdWZmZXIoZ2wuQVJSQVlfQlVGRkVSLCBtZXNoLl92ZXJ0ZXhCdWZmZXIpO1xuICAgICAgICBnbC5idWZmZXJTdWJEYXRhKGdsLkFSUkFZX0JVRkZFUiwgMCwgbWVzaC52ZXJ0aWNlcyk7XG4gICAgICAgIGdsLnZlcnRleEF0dHJpYlBvaW50ZXIoc2hhZGVyLmF0dHJpYnV0ZXMuYVZlcnRleFBvc2l0aW9uLCAyLCBnbC5GTE9BVCwgZmFsc2UsIDAsIDApO1xuXG4gICAgICAgIC8vIHVwZGF0ZSB0aGUgdXZzXG4gICAgICAgIGdsLmJpbmRCdWZmZXIoZ2wuQVJSQVlfQlVGRkVSLCBtZXNoLl91dkJ1ZmZlcik7XG4gICAgICAgIGdsLnZlcnRleEF0dHJpYlBvaW50ZXIoc2hhZGVyLmF0dHJpYnV0ZXMuYVRleHR1cmVDb29yZCwgMiwgZ2wuRkxPQVQsIGZhbHNlLCAwLCAwKTtcblxuXG4gICAgICAgIGdsLmFjdGl2ZVRleHR1cmUoZ2wuVEVYVFVSRTApO1xuXG4gICAgICAgaWYgKCF0ZXh0dXJlLl9nbFRleHR1cmVzW2dsLmlkXSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5yZW5kZXJlci51cGRhdGVUZXh0dXJlKHRleHR1cmUpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2VcbiAgICAgICAge1xuICAgICAgICAgICAgLy8gYmluZCB0aGUgY3VycmVudCB0ZXh0dXJlXG4gICAgICAgICAgICBnbC5iaW5kVGV4dHVyZShnbC5URVhUVVJFXzJELCB0ZXh0dXJlLl9nbFRleHR1cmVzW2dsLmlkXSk7XG4gICAgICAgIH1cblxuICAgICAgICBnbC5iaW5kQnVmZmVyKGdsLkVMRU1FTlRfQVJSQVlfQlVGRkVSLCBtZXNoLl9pbmRleEJ1ZmZlcik7XG4gICAgICAgIGdsLmJ1ZmZlclN1YkRhdGEoZ2wuRUxFTUVOVF9BUlJBWV9CVUZGRVIsIDAsIG1lc2guaW5kaWNlcyk7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG5cbiAgICAgICAgbWVzaC5kaXJ0eSA9IGZhbHNlO1xuICAgICAgICBnbC5iaW5kQnVmZmVyKGdsLkFSUkFZX0JVRkZFUiwgbWVzaC5fdmVydGV4QnVmZmVyKTtcbiAgICAgICAgZ2wuYnVmZmVyRGF0YShnbC5BUlJBWV9CVUZGRVIsIG1lc2gudmVydGljZXMsIGdsLlNUQVRJQ19EUkFXKTtcbiAgICAgICAgZ2wudmVydGV4QXR0cmliUG9pbnRlcihzaGFkZXIuYXR0cmlidXRlcy5hVmVydGV4UG9zaXRpb24sIDIsIGdsLkZMT0FULCBmYWxzZSwgMCwgMCk7XG5cbiAgICAgICAgLy8gdXBkYXRlIHRoZSB1dnNcbiAgICAgICAgZ2wuYmluZEJ1ZmZlcihnbC5BUlJBWV9CVUZGRVIsIG1lc2guX3V2QnVmZmVyKTtcbiAgICAgICAgZ2wuYnVmZmVyRGF0YShnbC5BUlJBWV9CVUZGRVIsIG1lc2gudXZzLCBnbC5TVEFUSUNfRFJBVyk7XG4gICAgICAgIGdsLnZlcnRleEF0dHJpYlBvaW50ZXIoc2hhZGVyLmF0dHJpYnV0ZXMuYVRleHR1cmVDb29yZCwgMiwgZ2wuRkxPQVQsIGZhbHNlLCAwLCAwKTtcblxuICAgICAgICAgZ2wuYWN0aXZlVGV4dHVyZShnbC5URVhUVVJFMCk7XG5cbiAgICAgICAgaWYgKCF0ZXh0dXJlLl9nbFRleHR1cmVzW2dsLmlkXSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5yZW5kZXJlci51cGRhdGVUZXh0dXJlKHRleHR1cmUpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2VcbiAgICAgICAge1xuICAgICAgICAgICAgLy8gYmluZCB0aGUgY3VycmVudCB0ZXh0dXJlXG4gICAgICAgICAgICBnbC5iaW5kVGV4dHVyZShnbC5URVhUVVJFXzJELCB0ZXh0dXJlLl9nbFRleHR1cmVzW2dsLmlkXSk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBkb250IG5lZWQgdG8gdXBsb2FkIVxuICAgICAgICBnbC5iaW5kQnVmZmVyKGdsLkVMRU1FTlRfQVJSQVlfQlVGRkVSLCBtZXNoLl9pbmRleEJ1ZmZlcik7XG4gICAgICAgIGdsLmJ1ZmZlckRhdGEoZ2wuRUxFTUVOVF9BUlJBWV9CVUZGRVIsIG1lc2guaW5kaWNlcywgZ2wuU1RBVElDX0RSQVcpO1xuXG4gICAgfVxuXG4gICAgZ2wuZHJhd0VsZW1lbnRzKGRyYXdNb2RlLCBtZXNoLmluZGljZXMubGVuZ3RoLCBnbC5VTlNJR05FRF9TSE9SVCwgMCk7XG5cbn07XG5cbi8qKlxuICogUHJlcGFyZXMgYWxsIHRoZSBidWZmZXJzIHRvIHJlbmRlciB0aGlzIG1lc2hcbiAqIEBwYXJhbSBtZXNoIHtQSVhJLm1lc2guTWVzaH0gdGhlIG1lc2ggdG8gcmVuZGVyXG4gKi9cbk1lc2hSZW5kZXJlci5wcm90b3R5cGUuX2luaXRXZWJHTCA9IGZ1bmN0aW9uIChtZXNoKVxue1xuICAgIC8vIGJ1aWxkIHRoZSBzdHJpcCFcbiAgICB2YXIgZ2wgPSB0aGlzLnJlbmRlcmVyLmdsO1xuXG4gICAgbWVzaC5fdmVydGV4QnVmZmVyID0gZ2wuY3JlYXRlQnVmZmVyKCk7XG4gICAgbWVzaC5faW5kZXhCdWZmZXIgPSBnbC5jcmVhdGVCdWZmZXIoKTtcbiAgICBtZXNoLl91dkJ1ZmZlciA9IGdsLmNyZWF0ZUJ1ZmZlcigpO1xuXG5cblxuICAgIGdsLmJpbmRCdWZmZXIoZ2wuQVJSQVlfQlVGRkVSLCBtZXNoLl92ZXJ0ZXhCdWZmZXIpO1xuICAgIGdsLmJ1ZmZlckRhdGEoZ2wuQVJSQVlfQlVGRkVSLCBtZXNoLnZlcnRpY2VzLCBnbC5EWU5BTUlDX0RSQVcpO1xuXG4gICAgZ2wuYmluZEJ1ZmZlcihnbC5BUlJBWV9CVUZGRVIsIG1lc2guX3V2QnVmZmVyKTtcbiAgICBnbC5idWZmZXJEYXRhKGdsLkFSUkFZX0JVRkZFUiwgIG1lc2gudXZzLCBnbC5TVEFUSUNfRFJBVyk7XG5cbiAgICBpZihtZXNoLmNvbG9ycyl7XG4gICAgICAgIG1lc2guX2NvbG9yQnVmZmVyID0gZ2wuY3JlYXRlQnVmZmVyKCk7XG4gICAgICAgIGdsLmJpbmRCdWZmZXIoZ2wuQVJSQVlfQlVGRkVSLCBtZXNoLl9jb2xvckJ1ZmZlcik7XG4gICAgICAgIGdsLmJ1ZmZlckRhdGEoZ2wuQVJSQVlfQlVGRkVSLCBtZXNoLmNvbG9ycywgZ2wuU1RBVElDX0RSQVcpO1xuICAgIH1cblxuICAgIGdsLmJpbmRCdWZmZXIoZ2wuRUxFTUVOVF9BUlJBWV9CVUZGRVIsIG1lc2guX2luZGV4QnVmZmVyKTtcbiAgICBnbC5idWZmZXJEYXRhKGdsLkVMRU1FTlRfQVJSQVlfQlVGRkVSLCBtZXNoLmluZGljZXMsIGdsLlNUQVRJQ19EUkFXKTtcbn07XG5cblxuLyoqXG4gKiBFbXB0aWVzIHRoZSBjdXJyZW50IGJhdGNoLlxuICpcbiAqL1xuTWVzaFJlbmRlcmVyLnByb3RvdHlwZS5mbHVzaCA9IGZ1bmN0aW9uICgpXG57XG5cbn07XG5cbi8qKlxuICogU3RhcnRzIGEgbmV3IG1lc2ggcmVuZGVyZXIuXG4gKlxuICovXG5NZXNoUmVuZGVyZXIucHJvdG90eXBlLnN0YXJ0ID0gZnVuY3Rpb24gKClcbntcbiAgICBcblxuICAgIHRoaXMuY3VycmVudFNoYWRlciA9IG51bGw7XG59O1xuXG4vKipcbiAqIERlc3Ryb3lzIHRoZSBNZXNoIHJlbmRlcmVyXG4gKlxuICovXG5NZXNoUmVuZGVyZXIucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoKVxue1xuICAgIGNvcmUuT2JqZWN0UmVuZGVyZXIucHJvdG90eXBlLmRlc3Ryb3kuY2FsbCh0aGlzKTtcbn07XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uLy4uL2NvcmUnKTtcblxuLyoqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuU2hhZGVyXG4gKiBAbWVtYmVyb2YgUElYSS5tZXNoXG4gKiBAcGFyYW0gc2hhZGVyTWFuYWdlciB7UElYSS5TaGFkZXJNYW5hZ2VyfSBUaGUgV2ViR0wgc2hhZGVyIG1hbmFnZXIgdGhpcyBzaGFkZXIgd29ya3MgZm9yLlxuICovXG5mdW5jdGlvbiBNZXNoU2hhZGVyKHNoYWRlck1hbmFnZXIpXG57XG4gICAgY29yZS5TaGFkZXIuY2FsbCh0aGlzLFxuICAgICAgICBzaGFkZXJNYW5hZ2VyLFxuICAgICAgICAvLyB2ZXJ0ZXggc2hhZGVyXG4gICAgICAgIFtcbiAgICAgICAgICAgICdwcmVjaXNpb24gbG93cCBmbG9hdDsnLFxuICAgICAgICAgICAgJ2F0dHJpYnV0ZSB2ZWMyIGFWZXJ0ZXhQb3NpdGlvbjsnLFxuICAgICAgICAgICAgJ2F0dHJpYnV0ZSB2ZWMyIGFUZXh0dXJlQ29vcmQ7JyxcblxuICAgICAgICAgICAgJ3VuaWZvcm0gbWF0MyB0cmFuc2xhdGlvbk1hdHJpeDsnLFxuICAgICAgICAgICAgJ3VuaWZvcm0gbWF0MyBwcm9qZWN0aW9uTWF0cml4OycsXG5cbiAgICAgICAgICAgICd2YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDsnLFxuXG4gICAgICAgICAgICAndm9pZCBtYWluKHZvaWQpeycsXG4gICAgICAgICAgICAnICAgZ2xfUG9zaXRpb24gPSB2ZWM0KChwcm9qZWN0aW9uTWF0cml4ICogdHJhbnNsYXRpb25NYXRyaXggKiB2ZWMzKGFWZXJ0ZXhQb3NpdGlvbiwgMS4wKSkueHksIDAuMCwgMS4wKTsnLFxuICAgICAgICAgICAgJyAgIHZUZXh0dXJlQ29vcmQgPSBhVGV4dHVyZUNvb3JkOycsXG4gICAgICAgICAgICAnfSdcbiAgICAgICAgXS5qb2luKCdcXG4nKSxcbiAgICAgICAgW1xuICAgICAgICAgICAgJ3ByZWNpc2lvbiBsb3dwIGZsb2F0OycsXG5cbiAgICAgICAgICAgICd2YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDsnLFxuICAgICAgICAgICAgJ3VuaWZvcm0gZmxvYXQgYWxwaGE7JyxcblxuICAgICAgICAgICAgJ3VuaWZvcm0gc2FtcGxlcjJEIHVTYW1wbGVyOycsXG5cbiAgICAgICAgICAgICd2b2lkIG1haW4odm9pZCl7JyxcbiAgICAgICAgICAgICcgICBnbF9GcmFnQ29sb3IgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZUZXh0dXJlQ29vcmQpICogYWxwaGEgOycsXG4gICAgICAgICAgICAnfSdcbiAgICAgICAgXS5qb2luKCdcXG4nKSxcbiAgICAgICAgLy8gY3VzdG9tIHVuaWZvcm1zXG4gICAgICAgIHtcbiAgICAgICAgICAgIGFscGhhOiAgeyB0eXBlOiAnMWYnLCB2YWx1ZTogMCB9LFxuICAgICAgICAgICAgdHJhbnNsYXRpb25NYXRyaXg6IHsgdHlwZTogJ21hdDMnLCB2YWx1ZTogbmV3IEZsb2F0MzJBcnJheSg5KSB9LFxuICAgICAgICAgICAgcHJvamVjdGlvbk1hdHJpeDogeyB0eXBlOiAnbWF0MycsIHZhbHVlOiBuZXcgRmxvYXQzMkFycmF5KDkpIH1cbiAgICAgICAgfSxcbiAgICAgICAgLy8gY3VzdG9tIGF0dHJpYnV0ZXNcbiAgICAgICAge1xuICAgICAgICAgICAgYVZlcnRleFBvc2l0aW9uOjAsXG4gICAgICAgICAgICBhVGV4dHVyZUNvb3JkOjBcbiAgICAgICAgfVxuICAgICk7XG59XG5cbk1lc2hTaGFkZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShjb3JlLlNoYWRlci5wcm90b3R5cGUpO1xuTWVzaFNoYWRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBNZXNoU2hhZGVyO1xubW9kdWxlLmV4cG9ydHMgPSBNZXNoU2hhZGVyO1xuXG5jb3JlLlNoYWRlck1hbmFnZXIucmVnaXN0ZXJQbHVnaW4oJ21lc2hTaGFkZXInLCBNZXNoU2hhZGVyKTtcbiIsIi8vIFJlZmVyZW5jZXM6XG4vLyBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9KYXZhU2NyaXB0L1JlZmVyZW5jZS9HbG9iYWxfT2JqZWN0cy9NYXRoL3NpZ25cblxuaWYgKCFNYXRoLnNpZ24pXG57XG4gICAgTWF0aC5zaWduID0gZnVuY3Rpb24gKHgpIHtcbiAgICAgICAgeCA9ICt4O1xuICAgICAgICBpZiAoeCA9PT0gMCB8fCBpc05hTih4KSlcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHg7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHggPiAwID8gMSA6IC0xO1xuICAgIH07XG59XG4iLCIvLyBSZWZlcmVuY2VzOlxuLy8gaHR0cHM6Ly9naXRodWIuY29tL3NpbmRyZXNvcmh1cy9vYmplY3QtYXNzaWduXG4vLyBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9KYXZhU2NyaXB0L1JlZmVyZW5jZS9HbG9iYWxfT2JqZWN0cy9PYmplY3QvYXNzaWduXG5cbmlmICghT2JqZWN0LmFzc2lnbilcbntcbiAgICBPYmplY3QuYXNzaWduID0gcmVxdWlyZSgnb2JqZWN0LWFzc2lnbicpO1xufVxuIiwicmVxdWlyZSgnLi9PYmplY3QuYXNzaWduJyk7XG5yZXF1aXJlKCcuL3JlcXVlc3RBbmltYXRpb25GcmFtZScpO1xucmVxdWlyZSgnLi9NYXRoLnNpZ24nKTtcbiIsIi8vIFJlZmVyZW5jZXM6XG4vLyBodHRwOi8vcGF1bGlyaXNoLmNvbS8yMDExL3JlcXVlc3RhbmltYXRpb25mcmFtZS1mb3Itc21hcnQtYW5pbWF0aW5nL1xuLy8gaHR0cHM6Ly9naXN0LmdpdGh1Yi5jb20vMTU3OTY3MVxuLy8gaHR0cDovL3VwZGF0ZXMuaHRtbDVyb2Nrcy5jb20vMjAxMi8wNS9yZXF1ZXN0QW5pbWF0aW9uRnJhbWUtQVBJLW5vdy13aXRoLXN1Yi1taWxsaXNlY29uZC1wcmVjaXNpb25cbi8vIGh0dHBzOi8vZ2lzdC5naXRodWIuY29tL3RpbWhhbGwvNDA3ODYxNFxuLy8gaHR0cHM6Ly9naXRodWIuY29tL0ZpbmFuY2lhbC1UaW1lcy9wb2x5ZmlsbC1zZXJ2aWNlL3RyZWUvbWFzdGVyL3BvbHlmaWxscy9yZXF1ZXN0QW5pbWF0aW9uRnJhbWVcblxuLy8gRXhwZWN0ZWQgdG8gYmUgdXNlZCB3aXRoIEJyb3dzZXJmaXlcbi8vIEJyb3dzZXJpZnkgYXV0b21hdGljYWxseSBkZXRlY3RzIHRoZSB1c2Ugb2YgYGdsb2JhbGAgYW5kIHBhc3NlcyB0aGVcbi8vIGNvcnJlY3QgcmVmZXJlbmNlIG9mIGBnbG9iYWxgLCBgc2VsZmAsIGFuZCBmaW5hbGx5IGB3aW5kb3dgXG5cbi8vIERhdGUubm93XG5pZiAoIShEYXRlLm5vdyAmJiBEYXRlLnByb3RvdHlwZS5nZXRUaW1lKSkge1xuICAgIERhdGUubm93ID0gZnVuY3Rpb24gbm93KCkge1xuICAgICAgICByZXR1cm4gbmV3IERhdGUoKS5nZXRUaW1lKCk7XG4gICAgfTtcbn1cblxuLy8gcGVyZm9ybWFuY2Uubm93XG5pZiAoIShnbG9iYWwucGVyZm9ybWFuY2UgJiYgZ2xvYmFsLnBlcmZvcm1hbmNlLm5vdykpIHtcbiAgICB2YXIgc3RhcnRUaW1lID0gRGF0ZS5ub3coKTtcbiAgICBpZiAoIWdsb2JhbC5wZXJmb3JtYW5jZSkge1xuICAgICAgICBnbG9iYWwucGVyZm9ybWFuY2UgPSB7fTtcbiAgICB9XG4gICAgZ2xvYmFsLnBlcmZvcm1hbmNlLm5vdyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIERhdGUubm93KCkgLSBzdGFydFRpbWU7XG4gICAgfTtcbn1cblxuLy8gcmVxdWVzdEFuaW1hdGlvbkZyYW1lXG52YXIgbGFzdFRpbWUgPSBEYXRlLm5vdygpO1xudmFyIHZlbmRvcnMgPSBbJ21zJywgJ21veicsICd3ZWJraXQnLCAnbyddO1xuXG5mb3IodmFyIHggPSAwOyB4IDwgdmVuZG9ycy5sZW5ndGggJiYgIWdsb2JhbC5yZXF1ZXN0QW5pbWF0aW9uRnJhbWU7ICsreCkge1xuICAgIGdsb2JhbC5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUgPSBnbG9iYWxbdmVuZG9yc1t4XSArICdSZXF1ZXN0QW5pbWF0aW9uRnJhbWUnXTtcbiAgICBnbG9iYWwuY2FuY2VsQW5pbWF0aW9uRnJhbWUgPSBnbG9iYWxbdmVuZG9yc1t4XSArICdDYW5jZWxBbmltYXRpb25GcmFtZSddIHx8XG4gICAgICAgIGdsb2JhbFt2ZW5kb3JzW3hdICsgJ0NhbmNlbFJlcXVlc3RBbmltYXRpb25GcmFtZSddO1xufVxuXG5pZiAoIWdsb2JhbC5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUpIHtcbiAgICBnbG9iYWwucmVxdWVzdEFuaW1hdGlvbkZyYW1lID0gZnVuY3Rpb24gKGNhbGxiYWNrKSB7XG4gICAgICAgIGlmICh0eXBlb2YgY2FsbGJhY2sgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoY2FsbGJhY2sgKyAnaXMgbm90IGEgZnVuY3Rpb24nKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBjdXJyZW50VGltZSA9IERhdGUubm93KCksXG4gICAgICAgICAgICBkZWxheSA9IDE2ICsgbGFzdFRpbWUgLSBjdXJyZW50VGltZTtcblxuICAgICAgICBpZiAoZGVsYXkgPCAwKSB7XG4gICAgICAgICAgICBkZWxheSA9IDA7XG4gICAgICAgIH1cblxuICAgICAgICBsYXN0VGltZSA9IGN1cnJlbnRUaW1lO1xuXG4gICAgICAgIHJldHVybiBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGxhc3RUaW1lID0gRGF0ZS5ub3coKTtcbiAgICAgICAgICAgIGNhbGxiYWNrKHBlcmZvcm1hbmNlLm5vdygpKTtcbiAgICAgICAgfSwgZGVsYXkpO1xuICAgIH07XG59XG5cbmlmICghZ2xvYmFsLmNhbmNlbEFuaW1hdGlvbkZyYW1lKSB7XG4gICAgZ2xvYmFsLmNhbmNlbEFuaW1hdGlvbkZyYW1lID0gZnVuY3Rpb24oaWQpIHtcbiAgICAgICAgY2xlYXJUaW1lb3V0KGlkKTtcbiAgICB9O1xufVxuIl19 +//# sourceMappingURL=data:application/json;charset:utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIm5vZGVfbW9kdWxlcy9icm93c2VyaWZ5L25vZGVfbW9kdWxlcy9icm93c2VyLXBhY2svX3ByZWx1ZGUuanMiLCIuLi9waXhpLWdsLWNvcmUvaW5kZXguanMiLCIuLi9waXhpLWdsLWNvcmUvbGliL0dMQnVmZmVyLmpzIiwiLi4vcGl4aS1nbC1jb3JlL2xpYi9HTEZyYW1lYnVmZmVyLmpzIiwiLi4vcGl4aS1nbC1jb3JlL2xpYi9HTFNoYWRlci5qcyIsIi4uL3BpeGktZ2wtY29yZS9saWIvR0xUZXh0dXJlLmpzIiwiLi4vcGl4aS1nbC1jb3JlL2xpYi9WZXJ0ZXhBcnJheU9iamVjdC5qcyIsIi4uL3BpeGktZ2wtY29yZS9saWIvY3JlYXRlQ29udGV4dC5qcyIsIi4uL3BpeGktZ2wtY29yZS9saWIvc2V0VmVydGV4QXR0cmliQXJyYXlzLmpzIiwiLi4vcGl4aS1nbC1jb3JlL2xpYi9zaGFkZXIvY29tcGlsZVByb2dyYW0uanMiLCIuLi9waXhpLWdsLWNvcmUvbGliL3NoYWRlci9kZWZhdWx0VmFsdWUuanMiLCIuLi9waXhpLWdsLWNvcmUvbGliL3NoYWRlci9leHRyYWN0QXR0cmlidXRlcy5qcyIsIi4uL3BpeGktZ2wtY29yZS9saWIvc2hhZGVyL2V4dHJhY3RVbmlmb3Jtcy5qcyIsIi4uL3BpeGktZ2wtY29yZS9saWIvc2hhZGVyL2dlbmVyYXRlVW5pZm9ybUFjY2Vzc09iamVjdC5qcyIsIi4uL3BpeGktZ2wtY29yZS9saWIvc2hhZGVyL21hcFNpemUuanMiLCIuLi9waXhpLWdsLWNvcmUvbGliL3NoYWRlci9tYXBUeXBlLmpzIiwibm9kZV9tb2R1bGVzL2FzeW5jL2xpYi9hc3luYy5qcyIsIm5vZGVfbW9kdWxlcy9icm93c2VyaWZ5L25vZGVfbW9kdWxlcy9wYXRoLWJyb3dzZXJpZnkvaW5kZXguanMiLCJub2RlX21vZHVsZXMvYnJvd3NlcmlmeS9ub2RlX21vZHVsZXMvcHJvY2Vzcy9icm93c2VyLmpzIiwibm9kZV9tb2R1bGVzL2Jyb3dzZXJpZnkvbm9kZV9tb2R1bGVzL3B1bnljb2RlL3B1bnljb2RlLmpzIiwibm9kZV9tb2R1bGVzL2Jyb3dzZXJpZnkvbm9kZV9tb2R1bGVzL3F1ZXJ5c3RyaW5nLWVzMy9kZWNvZGUuanMiLCJub2RlX21vZHVsZXMvYnJvd3NlcmlmeS9ub2RlX21vZHVsZXMvcXVlcnlzdHJpbmctZXMzL2VuY29kZS5qcyIsIm5vZGVfbW9kdWxlcy9icm93c2VyaWZ5L25vZGVfbW9kdWxlcy9xdWVyeXN0cmluZy1lczMvaW5kZXguanMiLCJub2RlX21vZHVsZXMvYnJvd3NlcmlmeS9ub2RlX21vZHVsZXMvdXJsL3VybC5qcyIsIm5vZGVfbW9kdWxlcy9lYXJjdXQvc3JjL2VhcmN1dC5qcyIsIm5vZGVfbW9kdWxlcy9ldmVudGVtaXR0ZXIzL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL29iamVjdC1hc3NpZ24vaW5kZXguanMiLCJub2RlX21vZHVsZXMvcmVzb3VyY2UtbG9hZGVyL25vZGVfbW9kdWxlcy9hc3luYy9saWIvYXN5bmMuanMiLCJub2RlX21vZHVsZXMvcmVzb3VyY2UtbG9hZGVyL3NyYy9Mb2FkZXIuanMiLCJub2RlX21vZHVsZXMvcmVzb3VyY2UtbG9hZGVyL3NyYy9SZXNvdXJjZS5qcyIsIm5vZGVfbW9kdWxlcy9yZXNvdXJjZS1sb2FkZXIvc3JjL2I2NC5qcyIsIm5vZGVfbW9kdWxlcy9yZXNvdXJjZS1sb2FkZXIvc3JjL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL3Jlc291cmNlLWxvYWRlci9zcmMvbWlkZGxld2FyZXMvY2FjaGluZy9tZW1vcnkuanMiLCJub2RlX21vZHVsZXMvcmVzb3VyY2UtbG9hZGVyL3NyYy9taWRkbGV3YXJlcy9wYXJzaW5nL2Jsb2IuanMiLCJwYWNrYWdlLmpzb24iLCJzcmMvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5TWFuYWdlci5qcyIsInNyYy9hY2Nlc3NpYmlsaXR5L2FjY2Vzc2libGVUYXJnZXQuanMiLCJzcmMvYWNjZXNzaWJpbGl0eS9pbmRleC5qcyIsInNyYy9jb3JlL2NvbnN0LmpzIiwic3JjL2NvcmUvZGlzcGxheS9Db250YWluZXIuanMiLCJzcmMvY29yZS9kaXNwbGF5L0Rpc3BsYXlPYmplY3QuanMiLCJzcmMvY29yZS9ncmFwaGljcy9HcmFwaGljcy5qcyIsInNyYy9jb3JlL2dyYXBoaWNzL0dyYXBoaWNzRGF0YS5qcyIsInNyYy9jb3JlL2dyYXBoaWNzL3dlYmdsL0dyYXBoaWNzUmVuZGVyZXIuanMiLCJzcmMvY29yZS9ncmFwaGljcy93ZWJnbC9XZWJHTEdyYXBoaWNzRGF0YS5qcyIsInNyYy9jb3JlL2dyYXBoaWNzL3dlYmdsL3NoYWRlcnMvUHJpbWl0aXZlU2hhZGVyLmpzIiwic3JjL2NvcmUvZ3JhcGhpY3Mvd2ViZ2wvdXRpbHMvYnVpbGRDaXJjbGUuanMiLCJzcmMvY29yZS9ncmFwaGljcy93ZWJnbC91dGlscy9idWlsZENvbXBsZXhQb2x5LmpzIiwic3JjL2NvcmUvZ3JhcGhpY3Mvd2ViZ2wvdXRpbHMvYnVpbGRMaW5lLmpzIiwic3JjL2NvcmUvZ3JhcGhpY3Mvd2ViZ2wvdXRpbHMvYnVpbGRQb2x5LmpzIiwic3JjL2NvcmUvZ3JhcGhpY3Mvd2ViZ2wvdXRpbHMvYnVpbGRSZWN0YW5nbGUuanMiLCJzcmMvY29yZS9ncmFwaGljcy93ZWJnbC91dGlscy9idWlsZFJvdW5kZWRSZWN0YW5nbGUuanMiLCJzcmMvY29yZS9pbmRleC5qcyIsInNyYy9jb3JlL21hdGgvTWF0cml4LmpzIiwic3JjL2NvcmUvbWF0aC9Qb2ludC5qcyIsInNyYy9jb3JlL21hdGgvaW5kZXguanMiLCJzcmMvY29yZS9tYXRoL3NoYXBlcy9DaXJjbGUuanMiLCJzcmMvY29yZS9tYXRoL3NoYXBlcy9FbGxpcHNlLmpzIiwic3JjL2NvcmUvbWF0aC9zaGFwZXMvUG9seWdvbi5qcyIsInNyYy9jb3JlL21hdGgvc2hhcGVzL1JlY3RhbmdsZS5qcyIsInNyYy9jb3JlL21hdGgvc2hhcGVzL1JvdW5kZWRSZWN0YW5nbGUuanMiLCJzcmMvY29yZS9wYXJ0aWNsZXMvUGFydGljbGVDb250YWluZXIuanMiLCJzcmMvY29yZS9wYXJ0aWNsZXMvd2ViZ2wvUGFydGljbGVCdWZmZXIuanMiLCJzcmMvY29yZS9wYXJ0aWNsZXMvd2ViZ2wvUGFydGljbGVSZW5kZXJlci5qcyIsInNyYy9jb3JlL3BhcnRpY2xlcy93ZWJnbC9QYXJ0aWNsZVNoYWRlci5qcyIsInNyYy9jb3JlL3JlbmRlcmVycy9TeXN0ZW1SZW5kZXJlci5qcyIsInNyYy9jb3JlL3JlbmRlcmVycy9jYW52YXMvQ2FudmFzUmVuZGVyZXIuanMiLCJzcmMvY29yZS9yZW5kZXJlcnMvY2FudmFzL3V0aWxzL0NhbnZhc0J1ZmZlci5qcyIsInNyYy9jb3JlL3JlbmRlcmVycy9jYW52YXMvdXRpbHMvQ2FudmFzR3JhcGhpY3MuanMiLCJzcmMvY29yZS9yZW5kZXJlcnMvY2FudmFzL3V0aWxzL0NhbnZhc01hc2tNYW5hZ2VyLmpzIiwic3JjL2NvcmUvcmVuZGVyZXJzL2NhbnZhcy91dGlscy9DYW52YXNUaW50ZXIuanMiLCJzcmMvY29yZS9yZW5kZXJlcnMvd2ViZ2wvVGV4dHVyZU1hbmFnZXIuanMiLCJzcmMvY29yZS9yZW5kZXJlcnMvd2ViZ2wvV2ViR0xSZW5kZXJlci5qcyIsInNyYy9jb3JlL3JlbmRlcmVycy93ZWJnbC9maWx0ZXJzL0Fic3RyYWN0RmlsdGVyLmpzIiwic3JjL2NvcmUvcmVuZGVyZXJzL3dlYmdsL2ZpbHRlcnMvRlhBQUZpbHRlci5qcyIsInNyYy9jb3JlL3JlbmRlcmVycy93ZWJnbC9maWx0ZXJzL1Nwcml0ZU1hc2tGaWx0ZXIuanMiLCJzcmMvY29yZS9yZW5kZXJlcnMvd2ViZ2wvbWFuYWdlcnMvQmxlbmRNb2RlTWFuYWdlci5qcyIsInNyYy9jb3JlL3JlbmRlcmVycy93ZWJnbC9tYW5hZ2Vycy9GaWx0ZXJNYW5hZ2VyLmpzIiwic3JjL2NvcmUvcmVuZGVyZXJzL3dlYmdsL21hbmFnZXJzL01hc2tNYW5hZ2VyLmpzIiwic3JjL2NvcmUvcmVuZGVyZXJzL3dlYmdsL21hbmFnZXJzL1NoYWRlck1hbmFnZXIuanMiLCJzcmMvY29yZS9yZW5kZXJlcnMvd2ViZ2wvbWFuYWdlcnMvU3RlbmNpbE1hbmFnZXIuanMiLCJzcmMvY29yZS9yZW5kZXJlcnMvd2ViZ2wvbWFuYWdlcnMvV2ViR0xNYW5hZ2VyLmpzIiwic3JjL2NvcmUvcmVuZGVyZXJzL3dlYmdsL3NoYWRlcnMvQ29tcGxleFByaW1pdGl2ZVNoYWRlci5qcyIsInNyYy9jb3JlL3JlbmRlcmVycy93ZWJnbC9zaGFkZXJzL1ByaW1pdGl2ZVNoYWRlci5qcyIsInNyYy9jb3JlL3JlbmRlcmVycy93ZWJnbC9zaGFkZXJzL1NoYWRlci5qcyIsInNyYy9jb3JlL3JlbmRlcmVycy93ZWJnbC9zaGFkZXJzL1RleHR1cmVTaGFkZXIuanMiLCJzcmMvY29yZS9yZW5kZXJlcnMvd2ViZ2wvc2hhZGVycy9fVGV4dHVyZVNoYWRlci5qcyIsInNyYy9jb3JlL3JlbmRlcmVycy93ZWJnbC91dGlscy9PYmplY3RSZW5kZXJlci5qcyIsInNyYy9jb3JlL3JlbmRlcmVycy93ZWJnbC91dGlscy9RdWFkLmpzIiwic3JjL2NvcmUvcmVuZGVyZXJzL3dlYmdsL3V0aWxzL1JlbmRlclRhcmdldC5qcyIsInNyYy9jb3JlL3JlbmRlcmVycy93ZWJnbC91dGlscy9TdGVuY2lsTWFza1N0YWNrLmpzIiwic3JjL2NvcmUvcmVuZGVyZXJzL3dlYmdsL3V0aWxzL21hcFdlYkdMQmxlbmRNb2Rlc1RvUGl4aS5qcyIsInNyYy9jb3JlL3JlbmRlcmVycy93ZWJnbC91dGlscy9tYXBXZWJHTERyYXdNb2Rlc1RvUGl4aS5qcyIsInNyYy9jb3JlL3Nwcml0ZXMvU3ByaXRlLmpzIiwic3JjL2NvcmUvc3ByaXRlcy93ZWJnbC9TcHJpdGVSZW5kZXJlci5qcyIsInNyYy9jb3JlL3Nwcml0ZXMvd2ViZ2wvZ2VuZXJhdGVNdWx0aVRleHR1cmVTaGFkZXIuanMiLCJzcmMvY29yZS90ZXh0L1RleHQuanMiLCJzcmMvY29yZS90ZXh0dXJlcy9CYXNlVGV4dHVyZS5qcyIsInNyYy9jb3JlL3RleHR1cmVzL1JlbmRlclRleHR1cmUuanMiLCJzcmMvY29yZS90ZXh0dXJlcy9UZXh0dXJlLmpzIiwic3JjL2NvcmUvdGV4dHVyZXMvVGV4dHVyZVV2cy5qcyIsInNyYy9jb3JlL3RleHR1cmVzL1ZpZGVvQmFzZVRleHR1cmUuanMiLCJzcmMvY29yZS90aWNrZXIvVGlja2VyLmpzIiwic3JjL2NvcmUvdGlja2VyL2luZGV4LmpzIiwic3JjL2NvcmUvdXRpbHMvY3JlYXRlSW5kaWNlc0ZvclF1YWRzLmpzIiwic3JjL2NvcmUvdXRpbHMvaW5kZXguanMiLCJzcmMvY29yZS91dGlscy9wbHVnaW5UYXJnZXQuanMiLCJzcmMvZGVwcmVjYXRpb24uanMiLCJzcmMvZXh0cmFzL0JpdG1hcFRleHQuanMiLCJzcmMvZXh0cmFzL01vdmllQ2xpcC5qcyIsInNyYy9leHRyYXMvVGlsaW5nU3ByaXRlLmpzIiwic3JjL2V4dHJhcy9jYWNoZUFzQml0bWFwLmpzIiwic3JjL2V4dHJhcy9nZXRDaGlsZEJ5TmFtZS5qcyIsInNyYy9leHRyYXMvZ2V0R2xvYmFsUG9zaXRpb24uanMiLCJzcmMvZXh0cmFzL2luZGV4LmpzIiwic3JjL2ZpbHRlcnMvYXNjaWkvQXNjaWlGaWx0ZXIuanMiLCJzcmMvZmlsdGVycy9ibG9vbS9CbG9vbUZpbHRlci5qcyIsInNyYy9maWx0ZXJzL2JsdXIvQmx1ckRpckZpbHRlci5qcyIsInNyYy9maWx0ZXJzL2JsdXIvQmx1ckZpbHRlci5qcyIsInNyYy9maWx0ZXJzL2JsdXIvQmx1clhGaWx0ZXIuanMiLCJzcmMvZmlsdGVycy9ibHVyL0JsdXJZRmlsdGVyLmpzIiwic3JjL2ZpbHRlcnMvYmx1ci9TbWFydEJsdXJGaWx0ZXIuanMiLCJzcmMvZmlsdGVycy9jb2xvci9Db2xvck1hdHJpeEZpbHRlci5qcyIsInNyYy9maWx0ZXJzL2NvbG9yL0NvbG9yU3RlcEZpbHRlci5qcyIsInNyYy9maWx0ZXJzL2NvbnZvbHV0aW9uL0NvbnZvbHV0aW9uRmlsdGVyLmpzIiwic3JjL2ZpbHRlcnMvY3Jvc3NoYXRjaC9Dcm9zc0hhdGNoRmlsdGVyLmpzIiwic3JjL2ZpbHRlcnMvZGlzcGxhY2VtZW50L0Rpc3BsYWNlbWVudEZpbHRlci5qcyIsInNyYy9maWx0ZXJzL2RvdC9Eb3RTY3JlZW5GaWx0ZXIuanMiLCJzcmMvZmlsdGVycy9kcm9wc2hhZG93L0JsdXJZVGludEZpbHRlci5qcyIsInNyYy9maWx0ZXJzL2Ryb3BzaGFkb3cvRHJvcFNoYWRvd0ZpbHRlci5qcyIsInNyYy9maWx0ZXJzL2dyYXkvR3JheUZpbHRlci5qcyIsInNyYy9maWx0ZXJzL2luZGV4LmpzIiwic3JjL2ZpbHRlcnMvaW52ZXJ0L0ludmVydEZpbHRlci5qcyIsInNyYy9maWx0ZXJzL25vaXNlL05vaXNlRmlsdGVyLmpzIiwic3JjL2ZpbHRlcnMvcGl4ZWxhdGUvUGl4ZWxhdGVGaWx0ZXIuanMiLCJzcmMvZmlsdGVycy9yZ2IvUkdCU3BsaXRGaWx0ZXIuanMiLCJzcmMvZmlsdGVycy9zZXBpYS9TZXBpYUZpbHRlci5qcyIsInNyYy9maWx0ZXJzL3Nob2Nrd2F2ZS9TaG9ja3dhdmVGaWx0ZXIuanMiLCJzcmMvZmlsdGVycy90aWx0c2hpZnQvVGlsdFNoaWZ0QXhpc0ZpbHRlci5qcyIsInNyYy9maWx0ZXJzL3RpbHRzaGlmdC9UaWx0U2hpZnRGaWx0ZXIuanMiLCJzcmMvZmlsdGVycy90aWx0c2hpZnQvVGlsdFNoaWZ0WEZpbHRlci5qcyIsInNyYy9maWx0ZXJzL3RpbHRzaGlmdC9UaWx0U2hpZnRZRmlsdGVyLmpzIiwic3JjL2ZpbHRlcnMvdHdpc3QvVHdpc3RGaWx0ZXIuanMiLCJzcmMvc3JjL2luZGV4LmpzIiwic3JjL2ludGVyYWN0aW9uL0ludGVyYWN0aW9uRGF0YS5qcyIsInNyYy9pbnRlcmFjdGlvbi9JbnRlcmFjdGlvbk1hbmFnZXIuanMiLCJzcmMvaW50ZXJhY3Rpb24vaW5kZXguanMiLCJzcmMvaW50ZXJhY3Rpb24vaW50ZXJhY3RpdmVUYXJnZXQuanMiLCJzcmMvbG9hZGVycy9iaXRtYXBGb250UGFyc2VyLmpzIiwic3JjL2xvYWRlcnMvaW5kZXguanMiLCJzcmMvbG9hZGVycy9sb2FkZXIuanMiLCJzcmMvbG9hZGVycy9zcHJpdGVzaGVldFBhcnNlci5qcyIsInNyYy9sb2FkZXJzL3RleHR1cmVQYXJzZXIuanMiLCJzcmMvbWVzaC9NZXNoLmpzIiwic3JjL21lc2gvUGxhbmUuanMiLCJzcmMvbWVzaC9Sb3BlLmpzIiwic3JjL21lc2gvaW5kZXguanMiLCJzcmMvbWVzaC93ZWJnbC9NZXNoUmVuZGVyZXIuanMiLCJzcmMvbWVzaC93ZWJnbC9NZXNoU2hhZGVyLmpzIiwic3JjL3BvbHlmaWxsL01hdGguc2lnbi5qcyIsInNyYy9wb2x5ZmlsbC9PYmplY3QuYXNzaWduLmpzIiwic3JjL3BvbHlmaWxsL2luZGV4LmpzIiwic3JjL3BvbHlmaWxsL3JlcXVlc3RBbmltYXRpb25GcmFtZS5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQ0FBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDMUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN4Q0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN2TUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2pIQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM5QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdERBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3pEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDMUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbENBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM3QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3RJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDaENBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQzlDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7QUM1dUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7OztBQ2hPQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUMzRkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7O0FDcmhCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNwRkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNyRkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNKQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbnNCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0a0JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdFFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUN2Q0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7OztBQ25tQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDeGNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNoeUJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDaEVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ1pBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNwQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMxREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ25aQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDN05BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3JvQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdm1CQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0b0NBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDM0ZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzlUQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDcEhBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNsREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNyRkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDckVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMxTkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM3REE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDckVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzlIQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM3RkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdGJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNwRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3BCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdEZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzdGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDckdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM1RkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDMUZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM3VEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzFOQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMxZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM1RUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuUUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzFRQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbEdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDaFdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzVEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzFQQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMxSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzNZQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDOUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNyREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQy9GQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMxQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbGNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNqSEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDeEtBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM3V0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdkNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzVEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzdEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzlnQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM3R0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMvRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3hEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN6SkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNqU0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMvQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ25DQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3RCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDem1CQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdldBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDN0RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDM21CQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuYkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDN2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDeGFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDL0VBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDM09BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNqV0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdERBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDL0JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuUkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3BFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzdWQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbFlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzlUQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNsY0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDOVFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNUJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNUJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbkJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdkRBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ25HQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzVHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzNGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNwRkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM1QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdGhCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDL0NBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN6RkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDeEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbEZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdEVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN6RkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQy9MQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDL0NBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDckNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2hEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDckRBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDakRBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3BGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNoREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3RGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMzSEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3BDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNwQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUNuRkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7OztBQzVCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDL0NBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDMTJCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNmQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDL0NBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN2SEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNURBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbEZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNwQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDMWRBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNUhBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbk5BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNqQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ25PQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDM0RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDUkE7QUFDQTtBQUNBO0FBQ0E7OztBQ0hBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6ImdlbmVyYXRlZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzQ29udGVudCI6WyIoZnVuY3Rpb24gZSh0LG4scil7ZnVuY3Rpb24gcyhvLHUpe2lmKCFuW29dKXtpZighdFtvXSl7dmFyIGE9dHlwZW9mIHJlcXVpcmU9PVwiZnVuY3Rpb25cIiYmcmVxdWlyZTtpZighdSYmYSlyZXR1cm4gYShvLCEwKTtpZihpKXJldHVybiBpKG8sITApO3ZhciBmPW5ldyBFcnJvcihcIkNhbm5vdCBmaW5kIG1vZHVsZSAnXCIrbytcIidcIik7dGhyb3cgZi5jb2RlPVwiTU9EVUxFX05PVF9GT1VORFwiLGZ9dmFyIGw9bltvXT17ZXhwb3J0czp7fX07dFtvXVswXS5jYWxsKGwuZXhwb3J0cyxmdW5jdGlvbihlKXt2YXIgbj10W29dWzFdW2VdO3JldHVybiBzKG4/bjplKX0sbCxsLmV4cG9ydHMsZSx0LG4scil9cmV0dXJuIG5bb10uZXhwb3J0c312YXIgaT10eXBlb2YgcmVxdWlyZT09XCJmdW5jdGlvblwiJiZyZXF1aXJlO2Zvcih2YXIgbz0wO288ci5sZW5ndGg7bysrKXMocltvXSk7cmV0dXJuIHN9KSIsIlxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcblxuICAgIGNyZWF0ZUNvbnRleHQ6IFx0XHRcdHJlcXVpcmUoJy4vbGliL2NyZWF0ZUNvbnRleHQnKSxcbiAgICBzZXRWZXJ0ZXhBdHRyaWJBcnJheXM6IFx0cmVxdWlyZSgnLi9saWIvc2V0VmVydGV4QXR0cmliQXJyYXlzJyksXG4gICAgXG4gICAgR0xCdWZmZXI6IFx0XHRcdFx0cmVxdWlyZSgnLi9saWIvR0xCdWZmZXInKSxcbiAgICBHTEZyYW1lYnVmZmVyOiBcdFx0XHRyZXF1aXJlKCcuL2xpYi9HTEZyYW1lYnVmZmVyJyksXG4gICAgR0xTaGFkZXI6IFx0XHRcdFx0cmVxdWlyZSgnLi9saWIvR0xTaGFkZXInKSxcbiAgICBHTFRleHR1cmU6IFx0XHRcdFx0cmVxdWlyZSgnLi9saWIvR0xUZXh0dXJlJyksXG4gICAgXG4gICAgVmVydGV4QXJyYXlPYmplY3Q6IFx0XHRyZXF1aXJlKCcuL2xpYi9WZXJ0ZXhBcnJheU9iamVjdCcpXG5cbn07IiwiXG4vKipcbiAqIEhlbHBlciBjbGFzcyB0byBjcmVhdGUgYSB3ZWJHTCBidWZmZXJcbiAqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gZ2wge1dlYkdMUmVuZGVyaW5nQ29udGV4dH1cbiAqL1xuXG52YXIgRU1QVFlfQVJSQVlfQlVGRkVSID0gbmV3IEFycmF5QnVmZmVyKDApO1xuXG52YXIgQnVmZmVyID0gZnVuY3Rpb24oZ2wsIHR5cGUsIGRhdGEsIGRyYXdUeXBlKVxue1xuXHR0aGlzLmdsID0gZ2w7XG5cblx0dGhpcy5idWZmZXIgPSBnbC5jcmVhdGVCdWZmZXIoKTtcblx0dGhpcy50eXBlID0gdHlwZSB8fCBnbC5BUlJBWV9CVUZGRVI7XG5cdHRoaXMuZHJhd1R5cGUgPSBkcmF3VHlwZSB8fCBnbC5TVEFUSUNfRFJBVztcblx0dGhpcy5kYXRhID0gRU1QVFlfQVJSQVlfQlVGRkVSO1xuXG5cdGlmKGRhdGEpXG5cdHtcblx0XHR0aGlzLnVwbG9hZChkYXRhKTtcblx0fVxufVxuXG5CdWZmZXIucHJvdG90eXBlLnVwbG9hZCA9IGZ1bmN0aW9uKGRhdGEsIG9mZnNldCwgZG9udEJpbmQpXG57XG5cdC8vIHRvZG8gLSBuZWVkZWQ/XG5cdC8vaWYoIWRvbnRCaW5kKVxuXHR0aGlzLmJpbmQoKTtcblxuXHR2YXIgZ2wgPSB0aGlzLmdsO1xuXHRcblx0ZGF0YSA9IGRhdGEgfHwgdGhpcy5kYXRhO1xuXHRvZmZzZXQgPSBvZmZzZXQgfHwgMDtcblxuXHRpZih0aGlzLmRhdGEuYnl0ZUxlbmd0aCA+PSBkYXRhLmJ5dGVMZW5ndGgpXG5cdHtcdFxuXHRcdGdsLmJ1ZmZlclN1YkRhdGEodGhpcy50eXBlLCBvZmZzZXQsIGRhdGEpO1xuXHR9XG5cdGVsc2Vcblx0e1xuXHRcdGdsLmJ1ZmZlckRhdGEodGhpcy50eXBlLCBkYXRhLCB0aGlzLmRyYXdUeXBlKTtcblx0fVxuXG5cdHRoaXMuZGF0YSA9IGRhdGE7XG59XG5cbkJ1ZmZlci5wcm90b3R5cGUuYmluZCA9IGZ1bmN0aW9uKClcbntcblx0dmFyIGdsID0gdGhpcy5nbDtcblx0Z2wuYmluZEJ1ZmZlcih0aGlzLnR5cGUsIHRoaXMuYnVmZmVyKTtcbn1cblxuQnVmZmVyLmNyZWF0ZVZlcnRleEJ1ZmZlciA9IGZ1bmN0aW9uKGdsLCBkYXRhLCBkcmF3VHlwZSlcbntcblx0cmV0dXJuIG5ldyBCdWZmZXIoZ2wsIGdsLkFSUkFZX0JVRkZFUiwgZGF0YSwgZHJhd1R5cGUpO1xufVxuXG5CdWZmZXIuY3JlYXRlSW5kZXhCdWZmZXIgPSBmdW5jdGlvbihnbCwgZGF0YSwgZHJhd1R5cGUpXG57XG5cdHJldHVybiBuZXcgQnVmZmVyKGdsLCBnbC5FTEVNRU5UX0FSUkFZX0JVRkZFUiwgZGF0YSwgZHJhd1R5cGUpO1xufVxuXG5CdWZmZXIuY3JlYXRlID0gZnVuY3Rpb24oZ2wsIHR5cGUsIGRhdGEsIGRyYXdUeXBlKVxue1xuXHRyZXR1cm4gbmV3IEJ1ZmZlcihnbCwgdHlwZSwgZHJhd1R5cGUpO1xufVxuXG4vL1RPRE8gRGVzdHJveS4uXG5cbm1vZHVsZS5leHBvcnRzID0gQnVmZmVyO1xuXG4iLCJcbnZhciBUZXh0dXJlID0gcmVxdWlyZSgnLi9HTFRleHR1cmUnKTtcblxuLyoqXG4gKiBIZWxwZXIgY2xhc3MgdG8gY3JlYXRlIGEgd2ViR0wgRnJhbWVidWZmZXJcbiAqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gZ2wge1dlYkdMUmVuZGVyaW5nQ29udGV4dH1cbiAqL1xuXG52YXIgRnJhbWVidWZmZXIgPSBmdW5jdGlvbihnbCwgd2lkdGgsIGhlaWdodClcbntcblx0dGhpcy5nbCA9IGdsO1xuXG5cdHRoaXMuZnJhbWVidWZmZXIgPSBnbC5jcmVhdGVGcmFtZWJ1ZmZlcigpO1xuXHRcblx0dGhpcy5zdGVuY2lsID0gbnVsbDtcblx0dGhpcy50ZXh0dXJlID0gbnVsbDtcblxuXHR0aGlzLndpZHRoID0gd2lkdGggfHwgMTAwO1xuXHR0aGlzLmhlaWdodCA9IGhlaWdodCB8fCAxMDA7XG59XG5cbkZyYW1lYnVmZmVyLnByb3RvdHlwZS5lbmFibGVUZXh0dXJlID0gZnVuY3Rpb24odGV4dHVyZSlcbntcblx0dmFyIGdsID0gdGhpcy5nbDtcblxuXHR0aGlzLnRleHR1cmUgPSB0ZXh0dXJlIHx8IG5ldyBUZXh0dXJlKGdsKTtcblxuXHR0aGlzLnRleHR1cmUuYmluZCgpO1xuXG5cdC8vZ2wudGV4SW1hZ2UyRChnbC5URVhUVVJFXzJELCAwLCBnbC5SR0JBLCAgdGhpcy53aWR0aCwgdGhpcy5oZWlnaHQsIDAsIGdsLlJHQkEsIGdsLlVOU0lHTkVEX0JZVEUsIG51bGwpO1xuXG5cdHRoaXMuYmluZCgpO1xuXG5cdGdsLmZyYW1lYnVmZmVyVGV4dHVyZTJEKGdsLkZSQU1FQlVGRkVSLCBnbC5DT0xPUl9BVFRBQ0hNRU5UMCwgZ2wuVEVYVFVSRV8yRCwgdGhpcy50ZXh0dXJlLnRleHR1cmUsIDApO1xufVxuXG5GcmFtZWJ1ZmZlci5wcm90b3R5cGUuZW5hYmxlU3RlbmNpbCA9IGZ1bmN0aW9uKClcbntcblx0aWYodGhpcy5zdGVuY2lsKXJldHVybjtcblxuXHR2YXIgZ2wgPSB0aGlzLmdsO1xuXG5cdHRoaXMuc3RlbmNpbCA9IGdsLmNyZWF0ZVJlbmRlcmJ1ZmZlcigpO1xuICAgIFxuICAgIGdsLmJpbmRSZW5kZXJidWZmZXIoZ2wuUkVOREVSQlVGRkVSLCB0aGlzLnN0ZW5jaWwpO1xuICAgIFxuICAgIC8vIFRPRE8uLiB0aGlzIGlzIGRlcHRoIEFORCBzdGVuY2lsP1xuICAgIGdsLmZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyKGdsLkZSQU1FQlVGRkVSLCBnbC5ERVBUSF9TVEVOQ0lMX0FUVEFDSE1FTlQsIGdsLlJFTkRFUkJVRkZFUiwgdGhpcy5zdGVuY2lsKTtcbiAgICBnbC5yZW5kZXJidWZmZXJTdG9yYWdlKGdsLlJFTkRFUkJVRkZFUiwgZ2wuREVQVEhfU1RFTkNJTCwgIHRoaXMud2lkdGggICwgdGhpcy5oZWlnaHQgKTtcbn1cblxuRnJhbWVidWZmZXIucHJvdG90eXBlLmNsZWFyID0gZnVuY3Rpb24oIHIsIGcsIGIsIGEgKVxue1xuXHR0aGlzLmJpbmQoKTtcblxuXHR2YXIgZ2wgPSB0aGlzLmdsO1xuICAgIFxuICAgIGdsLmNsZWFyQ29sb3IociwgZywgYiwgYSk7XG4gICAgZ2wuY2xlYXIoZ2wuQ09MT1JfQlVGRkVSX0JJVCk7XG59XG5cbkZyYW1lYnVmZmVyLnByb3RvdHlwZS5iaW5kID0gZnVuY3Rpb24oKVxue1xuXHR2YXIgZ2wgPSB0aGlzLmdsO1xuXHRnbC5iaW5kRnJhbWVidWZmZXIoZ2wuRlJBTUVCVUZGRVIsIHRoaXMuZnJhbWVidWZmZXIgKTtcdFxufVxuXG5GcmFtZWJ1ZmZlci5wcm90b3R5cGUudW5iaW5kID0gZnVuY3Rpb24oKVxue1xuXHRnbC5iaW5kRnJhbWVidWZmZXIoZ2wuRlJBTUVCVUZGRVIsIG51bGwgKTtcdFxufVxuXG5GcmFtZWJ1ZmZlci5wcm90b3R5cGUucmVzaXplID0gZnVuY3Rpb24od2lkdGgsIGhlaWdodClcbntcblx0dmFyIGdsID0gdGhpcy5nbDtcblxuXHR0aGlzLndpZHRoID0gd2lkdGg7XG5cdHRoaXMuaGVpZ2h0ID0gaGVpZ2h0O1xuXG5cdGlmICggdGhpcy50ZXh0dXJlIClcbiAgICB7XG4gICAgXHR0aGlzLnRleHR1cmUudXBsb2FkRGF0YShudWxsLCB3aWR0aCwgaGVpZ2h0KTtcblx0fVxuXG5cdGlmICggdGhpcy5zdGVuY2lsIClcbiAgICB7XG4gICAgICAgIC8vIHVwZGF0ZSB0aGUgc3RlbmNpbCBidWZmZXIgd2lkdGggYW5kIGhlaWdodFxuICAgICAgICBnbC5iaW5kUmVuZGVyYnVmZmVyKGdsLlJFTkRFUkJVRkZFUiwgdGhpcy5zdGVuY2lsKTtcbiAgICAgICAgZ2wucmVuZGVyYnVmZmVyU3RvcmFnZShnbC5SRU5ERVJCVUZGRVIsIGdsLkRFUFRIX1NURU5DSUwsIHdpZHRoLCBoZWlnaHQpO1xuICAgIH1cbn1cblxuRnJhbWVidWZmZXIucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbigpXG57XG5cdHZhciBnbCA9IHRoaXMuZ2w7XG5cdC8vVE9ET1xuXHRnbC5kZWxldGVGcmFtZWJ1ZmZlcih0aGlzLmZyYW1lYnVmZmVyKTtcbn1cblxuRnJhbWVidWZmZXIuY3JlYXRlUkdCQSA9IGZ1bmN0aW9uKGdsLCB3aWR0aCwgaGVpZ2h0LCBkYXRhKVxue1xuXHR2YXIgdGV4dHVyZSA9IFRleHR1cmUuZnJvbURhdGEoZ2wsIG51bGwsIHdpZHRoLCBoZWlnaHQpO1xuXHR0ZXh0dXJlLmVuYWJsZU5lYXJlc3RTY2FsaW5nKCk7XG4gICAgdGV4dHVyZS5lbmFibGVXcmFwQ2xhbXAoKTtcblxuICAgIC8vbm93IGNyZWF0ZSB0aGUgZnJhbWVidWZmZXIgb2JqZWN0IGFuZCBhdHRhY2ggdGhlIHRleHR1cmUgdG8gaXQuXG4gICAgdmFyIGZibyA9IG5ldyBGcmFtZWJ1ZmZlcihnbCwgd2lkdGgsIGhlaWdodCk7XG4gICAgZmJvLmVuYWJsZVRleHR1cmUodGV4dHVyZSk7XG5cbiAgICByZXR1cm4gZmJvO1xufVxuXG5GcmFtZWJ1ZmZlci5jcmVhdGVGbG9hdDMyID0gZnVuY3Rpb24oZ2wsIHdpZHRoLCBoZWlnaHQsIGRhdGEpXG57XG5cdC8vIGNyZWF0ZSBhIG5ldyB0ZXh0dXJlLi5cbiAgICB2YXIgdGV4dHVyZSA9IG5ldyBUZXh0dXJlLmZyb21EYXRhKGdsLCBkYXRhLCB3aWR0aCwgaGVpZ2h0KTtcbiAgICB0ZXh0dXJlLmVuYWJsZU5lYXJlc3RTY2FsaW5nKCk7XG4gICAgdGV4dHVyZS5lbmFibGVXcmFwQ2xhbXAoKTtcblxuICAgIC8vbm93IGNyZWF0ZSB0aGUgZnJhbWVidWZmZXIgb2JqZWN0IGFuZCBhdHRhY2ggdGhlIHRleHR1cmUgdG8gaXQuXG4gICAgdmFyIGZibyA9IG5ldyBGcmFtZWJ1ZmZlcihnbCwgd2lkdGgsIGhlaWdodCk7XG4gICAgZmJvLmVuYWJsZVRleHR1cmUodGV4dHVyZSlcblxuICAgIHJldHVybiBmYm87XG59XG5cbm1vZHVsZS5leHBvcnRzID0gRnJhbWVidWZmZXI7XG5cbiIsIlxudmFyIGNvbXBpbGVQcm9ncmFtID0gcmVxdWlyZSgnLi9zaGFkZXIvY29tcGlsZVByb2dyYW0nKSxcblx0ZXh0cmFjdEF0dHJpYnV0ZXMgPSByZXF1aXJlKCcuL3NoYWRlci9leHRyYWN0QXR0cmlidXRlcycpLFxuXHRleHRyYWN0VW5pZm9ybXMgPSByZXF1aXJlKCcuL3NoYWRlci9leHRyYWN0VW5pZm9ybXMnKSxcblx0Z2VuZXJhdGVVbmlmb3JtQWNjZXNzT2JqZWN0ID0gcmVxdWlyZSgnLi9zaGFkZXIvZ2VuZXJhdGVVbmlmb3JtQWNjZXNzT2JqZWN0Jyk7XG5cbi8qKlxuICogSGVscGVyIGNsYXNzIHRvIGNyZWF0ZSBhIHdlYkdMIFNoYWRlclxuICpcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqIEBwYXJhbSBnbCB7V2ViR0xSZW5kZXJpbmdDb250ZXh0fVxuICovXG52YXIgU2hhZGVyID0gZnVuY3Rpb24oZ2wsIHZlcnRleFNyYywgZnJhZ21lbnRTcmMpXG57XG5cdHRoaXMuZ2wgPSBnbDtcblxuXHQvLyBGaXJzdCBjb21waWxlIHRoZSBwcm9ncmFtLi5cblx0dGhpcy5wcm9ncmFtID0gY29tcGlsZVByb2dyYW0oZ2wsIHZlcnRleFNyYywgZnJhZ21lbnRTcmMpO1xuXG5cdC8vIG5leHQgZXh0cmFjdCB0aGUgYXR0cmlidXRlc1xuXHR0aGlzLmF0dHJpYnV0ZXMgPSBleHRyYWN0QXR0cmlidXRlcyhnbCwgdGhpcy5wcm9ncmFtKTsgXG5cbiAgICB2YXIgdW5pZm9ybURhdGEgPSBleHRyYWN0VW5pZm9ybXMoZ2wsIHRoaXMucHJvZ3JhbSk7XG5cbiAgICB0aGlzLnVuaWZvcm1zID0gZ2VuZXJhdGVVbmlmb3JtQWNjZXNzT2JqZWN0KCBnbCwgdW5pZm9ybURhdGEgKTtcbn1cblxuU2hhZGVyLnByb3RvdHlwZS5iaW5kID0gZnVuY3Rpb24oKVxue1xuXHR0aGlzLmdsLnVzZVByb2dyYW0odGhpcy5wcm9ncmFtKTtcbn1cblxuU2hhZGVyLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24oKVxue1xuXHR2YXIgZ2wgPSB0aGlzLmdsO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IFNoYWRlcjtcblxuIiwiXG4vKipcbiAqIEhlbHBlciBjbGFzcyB0byBjcmVhdGUgYSB3ZWJHTCBUZXh0dXJlXG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIGdsIHtXZWJHTFJlbmRlcmluZ0NvbnRleHR9IGEgV2ViR0wgY29udGV4dFxuICogQHBhcmFtIHdpZHRoIHtudW1iZXJ9IHRoZSB3aWR0aCBvZiB0aGUgdGV4dHVyZSBcbiAqIEBwYXJhbSBoZWlnaHQge251bWJlcn0gdGhlIGhlaWdodCBvZiB0aGUgdGV4dHVyZSBcbiAqIEBwYXJhbSBmb3JtYXQge251bWJlcn0gdGhlIHBpeGVsIGZvcm1hdCBvZiB0aGUgdGV4dHVyZS4gZGVmYXVsdHMgdG8gZ2wuUkdCQVxuICogQHBhcmFtIHR5cGUge251bWJlcn0gdGhlIGdsIHR5cGUgb2YgdGhlIHRleHR1cmUuIGRlZmF1bHRzIHRvIGdsLlVOU0lHTkVEX0JZVEVcbiAqL1xudmFyIFRleHR1cmUgPSBmdW5jdGlvbihnbCwgd2lkdGgsIGhlaWdodCwgZm9ybWF0LCB0eXBlKVxue1xuXHR0aGlzLmdsID0gZ2w7XG5cblx0dGhpcy50ZXh0dXJlID0gZ2wuY3JlYXRlVGV4dHVyZSgpO1xuXG5cdC8vIHNvbWUgc2V0dGluZ3MuLlxuXHR0aGlzLm1pcG1hcCA9IGZhbHNlO1xuXG5cdHRoaXMucHJlbXVsdGlwbHlBbHBoYSA9IGZhbHNlO1xuXG5cdHRoaXMud2lkdGggPSB3aWR0aCB8fCAwO1xuXHR0aGlzLmhlaWdodCA9IGhlaWdodCB8fCAwO1xuXG5cdHRoaXMuZm9ybWF0ID0gZm9ybWF0IHx8IGdsLlJHQkE7XG5cdHRoaXMudHlwZSA9IHR5cGUgfHwgZ2wuVU5TSUdORURfQllURTtcblxuXG59XG5cbi8qKlxuICogQHBhcmFtIHtQSVhJLmdsQ29yZS5UZXh0dXJlfSBbdmFybmFtZV0gW2Rlc2NyaXB0aW9uXVxuICovXG5UZXh0dXJlLnByb3RvdHlwZS51cGxvYWQgPSBmdW5jdGlvbihzb3VyY2UpXG57XG5cdHRoaXMuYmluZCgpO1xuXG5cdHZhciBnbCA9IHRoaXMuZ2w7XG5cblx0dGhpcy53aWR0aCA9IHNvdXJjZS53aWR0aDtcblx0dGhpcy5oZWlnaHQgPSBzb3VyY2UuaGVpZ2h0O1xuXG5cdGdsLnBpeGVsU3RvcmVpKGdsLlVOUEFDS19QUkVNVUxUSVBMWV9BTFBIQV9XRUJHTCwgdGhpcy5wcmVtdWx0aXBseUFscGhhKTtcbiAgICBnbC50ZXhJbWFnZTJEKGdsLlRFWFRVUkVfMkQsIDAsIHRoaXMuZm9ybWF0LCB0aGlzLmZvcm1hdCwgdGhpcy50eXBlLCBzb3VyY2UpO1xufVxuXG52YXIgRkxPQVRJTkdfUE9JTlRfQVZBSUxBQkxFID0gZmFsc2U7XG5cblRleHR1cmUucHJvdG90eXBlLnVwbG9hZERhdGEgPSBmdW5jdGlvbihkYXRhLCB3aWR0aCwgaGVpZ2h0KVxue1xuXHR0aGlzLmJpbmQoKTtcblx0XG5cdHRoaXMud2lkdGggPSB3aWR0aCB8fCB0aGlzLndpZHRoO1xuXHR0aGlzLmhlaWdodCA9IGhlaWdodCB8fCB0aGlzLmhlaWdodDtcblxuXHRpZihkYXRhIGluc3RhbmNlb2YgRmxvYXQzMkFycmF5KVxuXHR7XG5cdFx0aWYoIUZMT0FUSU5HX1BPSU5UX0FWQUlMQUJMRSlcblx0XHR7XG5cdFx0XHR2YXIgZXh0ID0gZ2wuZ2V0RXh0ZW5zaW9uKFwiT0VTX3RleHR1cmVfZmxvYXRcIik7XG5cdFx0XHRcblx0XHRcdGlmKGV4dClcblx0XHRcdHtcblx0XHRcdFx0RkxPQVRJTkdfUE9JTlRfQVZBSUxBQkxFID0gdHJ1ZTtcblx0XHRcdH1cblx0XHRcdGVsc2Vcblx0XHRcdHtcblx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKCdmbG9hdGluZyBwb2ludCB0ZXh0dXJlcyBub3QgYXZhaWxhYmxlJyk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0dGhpcy50eXBlID0gZ2wuRkxPQVQ7XG5cdH1cblx0ZWxzZVxuXHR7XG5cdFx0Ly8gVE9ETyBzdXBwb3J0IGZvciBvdGhlciB0eXBlc1xuXHRcdHRoaXMudHlwZSA9IGdsLlVOU0lHTkVEX0JZVEU7XG5cdH1cblxuXHQvLyB3aGF0IHR5cGUgb2YgZGF0YT9cblx0Z2wucGl4ZWxTdG9yZWkoZ2wuVU5QQUNLX1BSRU1VTFRJUExZX0FMUEhBX1dFQkdMLCB0aGlzLnByZW11bHRpcGx5QWxwaGEpO1xuXHRnbC50ZXhJbWFnZTJEKGdsLlRFWFRVUkVfMkQsIDAsIHRoaXMuZm9ybWF0LCAgdGhpcy53aWR0aCwgdGhpcy5oZWlnaHQsIDAsIHRoaXMuZm9ybWF0LCB0aGlzLnR5cGUsIGRhdGEgfHwgbnVsbCk7XG5cbn1cblxuVGV4dHVyZS5wcm90b3R5cGUuYmluZCA9IGZ1bmN0aW9uKGxvY2F0aW9uKVxue1xuXHR2YXIgZ2wgPSB0aGlzLmdsO1xuXG5cdGlmKGxvY2F0aW9uICE9PSB1bmRlZmluZWQpXG5cdHtcblx0XHRnbC5hY3RpdmVUZXh0dXJlKGdsLlRFWFRVUkUwICsgbG9jYXRpb24pO1xuXHR9XG5cblx0Z2wuYmluZFRleHR1cmUoZ2wuVEVYVFVSRV8yRCwgdGhpcy50ZXh0dXJlKTtcbn1cblxuVGV4dHVyZS5wcm90b3R5cGUudW5iaW5kID0gZnVuY3Rpb24oKVxue1xuXHR2YXIgZ2wgPSB0aGlzLmdsO1xuXHRnbC5iaW5kVGV4dHVyZShnbC5URVhUVVJFXzJELCBudWxsKTtcbn1cblxuVGV4dHVyZS5wcm90b3R5cGUubWluRmlsdGVyID0gZnVuY3Rpb24oIGxpbmVhciApXG57XG5cdHZhciBnbCA9IHRoaXMuZ2w7XG5cblx0dGhpcy5iaW5kKCk7XG5cblx0aWYodGhpcy5taXBtYXApXG5cdHtcblx0XHRnbC50ZXhQYXJhbWV0ZXJpKGdsLlRFWFRVUkVfMkQsIGdsLlRFWFRVUkVfTUlOX0ZJTFRFUiwgbGluZWFyID8gZ2wuTElORUFSX01JUE1BUF9MSU5FQVIgOiBnbC5ORUFSRVNUX01JUE1BUF9ORUFSRVNUKTtcblx0fVxuXHRlbHNlXG5cdHtcblx0XHRnbC50ZXhQYXJhbWV0ZXJpKGdsLlRFWFRVUkVfMkQsIGdsLlRFWFRVUkVfTUlOX0ZJTFRFUiwgbGluZWFyID8gZ2wuTElORUFSIDogZ2wuTkVBUkVTVCk7XG5cdH1cdFxufVxuXG5UZXh0dXJlLnByb3RvdHlwZS5tYWdGaWx0ZXIgPSBmdW5jdGlvbiggbGluZWFyIClcbntcblx0dmFyIGdsID0gdGhpcy5nbDtcblxuXHR0aGlzLmJpbmQoKTtcblxuXHRnbC50ZXhQYXJhbWV0ZXJpKGdsLlRFWFRVUkVfMkQsIGdsLlRFWFRVUkVfTUFHX0ZJTFRFUiwgbGluZWFyID8gZ2wuTElORUFSIDogZ2wuTkVBUkVTVCk7XG59XG5cblRleHR1cmUucHJvdG90eXBlLmVuYWJsZU1pcG1hcCA9IGZ1bmN0aW9uKClcbntcblx0dGhpcy5iaW5kKCk7XG5cblx0dGhpcy5taXBtYXAgPSB0cnVlO1xuXHRnbC5nZW5lcmF0ZU1pcG1hcChnbC5URVhUVVJFXzJEKTtcbn1cblxuVGV4dHVyZS5wcm90b3R5cGUuZW5hYmxlTGluZWFyU2NhbGluZyA9IGZ1bmN0aW9uKClcbntcblx0dGhpcy5taW5GaWx0ZXIodHJ1ZSk7XG5cdHRoaXMubWFnRmlsdGVyKHRydWUpO1xufVxuXG5UZXh0dXJlLnByb3RvdHlwZS5lbmFibGVOZWFyZXN0U2NhbGluZyA9IGZ1bmN0aW9uKClcbntcblx0dGhpcy5taW5GaWx0ZXIoZmFsc2UpO1xuXHR0aGlzLm1hZ0ZpbHRlcihmYWxzZSk7XG59XG5cblRleHR1cmUucHJvdG90eXBlLmVuYWJsZVdyYXBDbGFtcCA9IGZ1bmN0aW9uKClcbntcblx0dmFyIGdsID0gdGhpcy5nbDtcblxuXHR0aGlzLmJpbmQoKTtcblxuXHRnbC50ZXhQYXJhbWV0ZXJpKGdsLlRFWFRVUkVfMkQsIGdsLlRFWFRVUkVfV1JBUF9TLCBnbC5DTEFNUF9UT19FREdFKTtcbiAgICBnbC50ZXhQYXJhbWV0ZXJpKGdsLlRFWFRVUkVfMkQsIGdsLlRFWFRVUkVfV1JBUF9ULCBnbC5DTEFNUF9UT19FREdFKTtcbn1cblxuVGV4dHVyZS5wcm90b3R5cGUuZW5hYmxlV3JhcFJlcGVhdCA9IGZ1bmN0aW9uKClcbntcblx0dmFyIGdsID0gdGhpcy5nbDtcblxuXHR0aGlzLmJpbmQoKTtcblx0XG5cdGdsLnRleFBhcmFtZXRlcmkoZ2wuVEVYVFVSRV8yRCwgZ2wuVEVYVFVSRV9XUkFQX1MsIGdsLlJFUEVBVCk7XG4gICAgZ2wudGV4UGFyYW1ldGVyaShnbC5URVhUVVJFXzJELCBnbC5URVhUVVJFX1dSQVBfVCwgZ2wuUkVQRUFUKTtcbn1cblxuVGV4dHVyZS5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uKClcbntcblx0dmFyIGdsID0gdGhpcy5nbDtcblx0Ly9UT0RPXG5cdGdsLmRlbGV0ZVRleHR1cmUodGhpcy50ZXh0dXJlKTtcbn1cblxuLy9UZXh0dXJlLlxuVGV4dHVyZS5mcm9tU291cmNlID0gZnVuY3Rpb24oZ2wsIHNvdXJjZSwgcHJlbXVsdGlwbHlBbHBoYSlcbntcblx0dmFyIHRleHR1cmUgPSBuZXcgVGV4dHVyZShnbCk7XG5cdHRleHR1cmUucHJlbXVsdGlwbHlBbHBoYSA9IHByZW11bHRpcGx5QWxwaGEgfHwgZmFsc2U7XG5cdHRleHR1cmUudXBsb2FkKHNvdXJjZSk7XG5cblx0cmV0dXJuIHRleHR1cmU7XG59XG5cblRleHR1cmUuZnJvbURhdGEgPSBmdW5jdGlvbihnbCwgZGF0YSwgd2lkdGgsIGhlaWdodClcbntcblx0Ly9jb25zb2xlLmxvZyhkYXRhLCB3aWR0aCwgaGVpZ2h0KTtcblx0dmFyIHRleHR1cmUgPSBuZXcgVGV4dHVyZShnbCk7XG5cdHRleHR1cmUudXBsb2FkRGF0YShkYXRhLCB3aWR0aCwgaGVpZ2h0KTtcblxuXHRyZXR1cm4gdGV4dHVyZTtcbn1cblxuXG5tb2R1bGUuZXhwb3J0cyA9IFRleHR1cmU7XG5cbiIsIlxuLyoqXG4gKiBHZW5lcmljIE1hc2sgU3RhY2sgZGF0YSBzdHJ1Y3R1cmVcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqL1xuXG4vLyBzdGF0ZSBvYmplY3QvL1xuXG5cbmZ1bmN0aW9uIFZlcnRleEFycmF5T2JqZWN0KGdsKVxue1xuXHRcblx0dGhpcy5uYXRpdmVWYW9FeHRlbnNpb24gPSAoXG4gICAgICBnbC5nZXRFeHRlbnNpb24oJ09FU192ZXJ0ZXhfYXJyYXlfb2JqZWN0JykgfHxcbiAgICAgIGdsLmdldEV4dGVuc2lvbignTU9aX09FU192ZXJ0ZXhfYXJyYXlfb2JqZWN0JykgfHxcbiAgICAgIGdsLmdldEV4dGVuc2lvbignV0VCS0lUX09FU192ZXJ0ZXhfYXJyYXlfb2JqZWN0JylcbiAgICApO1xuXG4vL1x0dGhpcy5uYXRpdmVWYW9FeHRlbnNpb24gPSBudWxsO1xuXG5cdGlmKHRoaXMubmF0aXZlVmFvRXh0ZW5zaW9uKVxuXHR7XG5cdFx0dGhpcy5uYXRpdmVWYW8gPSB0aGlzLm5hdGl2ZVZhb0V4dGVuc2lvbi5jcmVhdGVWZXJ0ZXhBcnJheU9FUygpOyAgXG5cdH1cblxuXHR0aGlzLmdsID0gZ2w7XG5cblx0dGhpcy5hdHRyaWJ1dGVzID0gW107XG5cblx0dGhpcy5pbmRleEJ1ZmZlciA9IG51bGw7XG5cblx0dGhpcy5kaXJ0eSA9IGZhbHNlO1xuXG5cdFxufVxuXG5WZXJ0ZXhBcnJheU9iamVjdC5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBWZXJ0ZXhBcnJheU9iamVjdDtcbm1vZHVsZS5leHBvcnRzID0gVmVydGV4QXJyYXlPYmplY3Q7XG5cblZlcnRleEFycmF5T2JqZWN0LnByb3RvdHlwZS5iaW5kID0gZnVuY3Rpb24oKVxue1xuXHRpZih0aGlzLm5hdGl2ZVZhbylcblx0e1xuXHRcdHRoaXMubmF0aXZlVmFvRXh0ZW5zaW9uLmJpbmRWZXJ0ZXhBcnJheU9FUyh0aGlzLm5hdGl2ZVZhbyk7ICBcblxuXHRcdGlmKHRoaXMuZGlydHkpXG5cdFx0e1xuXHRcdFx0dGhpcy5kaXJ0eSA9IGZhbHNlO1xuXHRcdFx0dGhpcy5hY3RpdmF0ZSgpO1xuXHRcdH1cblx0fVxuXHRlbHNlXG5cdHtcblx0XHR0aGlzLmFjdGl2YXRlKCk7XG5cdH1cbn1cblxuVmVydGV4QXJyYXlPYmplY3QucHJvdG90eXBlLnVuYmluZCA9IGZ1bmN0aW9uKClcbntcblx0aWYodGhpcy5uYXRpdmVWYW8pXG5cdHtcblx0XHR0aGlzLm5hdGl2ZVZhb0V4dGVuc2lvbi5iaW5kVmVydGV4QXJyYXlPRVMobnVsbCk7XG5cdH1cbn1cblxuVmVydGV4QXJyYXlPYmplY3QucHJvdG90eXBlLmFjdGl2YXRlID0gZnVuY3Rpb24oKVxue1xuXHR2YXIgZ2wgPSB0aGlzLmdsO1xuXG5cdGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5hdHRyaWJ1dGVzLmxlbmd0aDsgaSsrKSBcblx0e1xuXHRcdHZhciBhdHRyaWIgPSB0aGlzLmF0dHJpYnV0ZXNbaV07XG5cdFx0YXR0cmliLmJ1ZmZlci5iaW5kKCk7XHRcblxuXHRcdGF0dHJpYi5hdHRyaWJ1dGUucG9pbnRlcihhdHRyaWIudHlwZSwgYXR0cmliLm5vcm1hbGl6ZWQsIGF0dHJpYi5zdHJpZGUsIGF0dHJpYi5zdGFydCk7IFxuXHRcdFxuXHRcdGdsLmVuYWJsZVZlcnRleEF0dHJpYkFycmF5KGF0dHJpYi5hdHRyaWJ1dGUubG9jYXRpb24pO1xuXHR9O1xuXG5cdHRoaXMuaW5kZXhCdWZmZXIuYmluZCgpO1xufVxuXG5WZXJ0ZXhBcnJheU9iamVjdC5wcm90b3R5cGUuYWRkQXR0cmlidXRlID0gZnVuY3Rpb24oYnVmZmVyLCBhdHRyaWJ1dGUsIHR5cGUsIG5vcm1hbGl6ZWQsIHN0cmlkZSwgc3RhcnQpXG57XG4gICAgdGhpcy5hdHRyaWJ1dGVzLnB1c2goe1xuICAgIFx0YnVmZmVyOiBcdGJ1ZmZlcixcbiAgICBcdGF0dHJpYnV0ZTogXHRhdHRyaWJ1dGUsXG5cbiAgICBcdGxvY2F0aW9uOiBcdGF0dHJpYnV0ZS5sb2NhdGlvbixcblx0IFx0dHlwZTogXHRcdHR5cGUgfHwgdGhpcy5nbC5GTE9BVCxcblx0IFx0bm9ybWFsaXplZDogbm9ybWFsaXplZCB8fCBmYWxzZSxcblx0IFx0c3RyaWRlOiBcdHN0cmlkZSB8fCAwLFxuXHQgXHRzdGFydDogXHRcdHN0YXJ0IHx8IDBcblx0fSlcblxuXHR0aGlzLmRpcnR5ID0gdHJ1ZTtcbn1cblxuXG5WZXJ0ZXhBcnJheU9iamVjdC5wcm90b3R5cGUuYWRkSW5kZXggPSBmdW5jdGlvbihidWZmZXIsIG9wdGlvbnMpXG57XG4gICAgdGhpcy5pbmRleEJ1ZmZlciA9IGJ1ZmZlcjtcblxuICAgIHRoaXMuZGlydHkgPSB0cnVlO1xufVxuXG5WZXJ0ZXhBcnJheU9iamVjdC5wcm90b3R5cGUuZHJhdyA9IGZ1bmN0aW9uKHR5cGUsIHNpemUsIHN0YXJ0KVxue1xuXHR2YXIgZ2wgPSB0aGlzLmdsO1xuXHRnbC5kcmF3RWxlbWVudHModHlwZSwgc2l6ZSwgZ2wuVU5TSUdORURfU0hPUlQsIHN0YXJ0KTtcbn1cblxuIiwiXG4vKipcbiAqIEhlbHBlciBjbGFzcyB0byBjcmVhdGUgYSB3ZWJHTCBDb250ZXh0XG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIGdsIHtXZWJHTFJlbmRlcmluZ0NvbnRleHR9XG4gKi9cblxudmFyIENPTlRFWFRfVUlEID0gMDtcblxudmFyIGNyZWF0ZUNvbnRleHQgPSBmdW5jdGlvbihjYW52YXMsIG9wdGlvbnMpXG57XG4gICAgZ2wgPSBjYW52YXMuZ2V0Q29udGV4dCgnd2ViZ2wnLCBvcHRpb25zKSB8fCBcbiAgICBcdCBjYW52YXMuZ2V0Q29udGV4dCgnZXhwZXJpbWVudGFsLXdlYmdsJywgb3B0aW9ucyk7XG5cbiAgICBpZiAoIWdsKVxuICAgIHtcbiAgICAgICAgLy8gZmFpbCwgbm90IGFibGUgdG8gZ2V0IGEgY29udGV4dFxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RoaXMgYnJvd3NlciBkb2VzIG5vdCBzdXBwb3J0IHdlYkdMLiBUcnkgdXNpbmcgdGhlIGNhbnZhcyByZW5kZXJlcicpO1xuICAgIH1cblxuICAgIC8vIG1pZ2h0IHdhbnQgdG8gcGhhc2UgdGhpcyBvdXQ/XG4gICAgZ2wuaWQgPSBDT05URVhUX1VJRCsrO1xuXG4gICAgcmV0dXJuIGdsO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGNyZWF0ZUNvbnRleHQ7XG5cbiIsIi8qKlxuICogR2VuZXJpYyBNYXNrIFN0YWNrIGRhdGEgc3RydWN0dXJlXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKi9cblxudmFyIEdMX01BUCA9IHt9O1xuXG5cbnZhciBzZXRWZXJ0ZXhBdHRyaWJBcnJheXMgPSBmdW5jdGlvbiAoZ2wsIGF0dHJpYnMpXG57XHRcbiAgIC8vIGNvbnNvbGUubG9nKGdsLmlkKVxuICAgIHZhciBkYXRhID0gR0xfTUFQW2dsLmlkXTtcblxuICAgIGlmKCFkYXRhKVxuICAgIHtcblx0ICAgdmFyIG1heEF0dHJpYnMgPSBnbC5nZXRQYXJhbWV0ZXIoZ2wuTUFYX1ZFUlRFWF9BVFRSSUJTKTtcblx0XHRkYXRhID0gR0xfTUFQW2dsLmlkXSA9IHt0ZW1wQXR0cmliU3RhdGU6bmV3IEFycmF5KG1heEF0dHJpYnMpXG5cdFx0XHRcdCBcdCBcdFx0ICAgLGF0dHJpYlN0YXRlOm5ldyBBcnJheShtYXhBdHRyaWJzKX07XG5cdH1cblx0XG4gICAgdmFyIGksXG4gICAgXHR0ZW1wQXR0cmliU3RhdGUgPSBkYXRhLnRlbXBBdHRyaWJTdGF0ZSxcbiAgICBcdGF0dHJpYlN0YXRlID0gZGF0YS5hdHRyaWJTdGF0ZTtcblxuICAgIGZvciAoaSA9IDA7IGkgPCB0ZW1wQXR0cmliU3RhdGUubGVuZ3RoOyBpKyspXG4gICAge1xuICAgICAgICB0ZW1wQXR0cmliU3RhdGVbaV0gPSBmYWxzZTtcbiAgICB9XG5cbiAgICAvLyBzZXQgdGhlIG5ldyBhdHRyaWJzXG4gICAgZm9yIChpIGluIGF0dHJpYnMpXG4gICAge1xuICAgICAgICB0ZW1wQXR0cmliU3RhdGVbYXR0cmlic1tpXS5sb2NhdGlvbl0gPSB0cnVlO1xuICAgIH1cblxuICAgIGZvciAoaSA9IDE7IGkgPCBhdHRyaWJTdGF0ZS5sZW5ndGg7IGkrKylcbiAgICB7XG4gICAgICAgIGlmIChhdHRyaWJTdGF0ZVtpXSAhPT0gdGVtcEF0dHJpYlN0YXRlW2ldKVxuICAgICAgICB7XG4gICAgICAgICAgICBhdHRyaWJTdGF0ZVtpXSA9IHRlbXBBdHRyaWJTdGF0ZVtpXTtcblxuICAgICAgICAgICAgaWYgKGRhdGEuYXR0cmliU3RhdGVbaV0pXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgZ2wuZW5hYmxlVmVydGV4QXR0cmliQXJyYXkoaSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgZ2wuZGlzYWJsZVZlcnRleEF0dHJpYkFycmF5KGkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxufTtcblxubW9kdWxlLmV4cG9ydHMgPSBzZXRWZXJ0ZXhBdHRyaWJBcnJheXM7IiwiXG5cblxuXG5jb21waWxlUHJvZ3JhbSA9IGZ1bmN0aW9uKGdsLCB2ZXJ0ZXhTcmMsIGZyYWdtZW50U3JjKVxue1xuICAgIHZhciBnbFZlcnRTaGFkZXIgPSBjb21waWxlU2hhZGVyKGdsLCBnbC5WRVJURVhfU0hBREVSLCB2ZXJ0ZXhTcmMpO1xuICAgIHZhciBnbEZyYWdTaGFkZXIgPSBjb21waWxlU2hhZGVyKGdsLCBnbC5GUkFHTUVOVF9TSEFERVIsIGZyYWdtZW50U3JjKTtcblxuICAgIHZhciBwcm9ncmFtID0gZ2wuY3JlYXRlUHJvZ3JhbSgpO1xuXG4gICAgZ2wuYXR0YWNoU2hhZGVyKHByb2dyYW0sIGdsVmVydFNoYWRlcik7XG4gICAgZ2wuYXR0YWNoU2hhZGVyKHByb2dyYW0sIGdsRnJhZ1NoYWRlcik7XG4gICAgZ2wubGlua1Byb2dyYW0ocHJvZ3JhbSk7XG5cbiAgICAvLyBpZiBsaW5raW5nIGZhaWxzLCB0aGVuIGxvZyBhbmQgY2xlYW51cFxuICAgIGlmICghZ2wuZ2V0UHJvZ3JhbVBhcmFtZXRlcihwcm9ncmFtLCBnbC5MSU5LX1NUQVRVUykpXG4gICAge1xuICAgICAgICBjb25zb2xlLmVycm9yKCdQaXhpLmpzIEVycm9yOiBDb3VsZCBub3QgaW5pdGlhbGl6ZSBzaGFkZXIuJyk7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ2dsLlZBTElEQVRFX1NUQVRVUycsIGdsLmdldFByb2dyYW1QYXJhbWV0ZXIocHJvZ3JhbSwgZ2wuVkFMSURBVEVfU1RBVFVTKSk7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ2dsLmdldEVycm9yKCknLCBnbC5nZXRFcnJvcigpKTtcblxuICAgICAgICAvLyBpZiB0aGVyZSBpcyBhIHByb2dyYW0gaW5mbyBsb2csIGxvZyBpdFxuICAgICAgICBpZiAoZ2wuZ2V0UHJvZ3JhbUluZm9Mb2cocHJvZ3JhbSkgIT09ICcnKVxuICAgICAgICB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ1BpeGkuanMgV2FybmluZzogZ2wuZ2V0UHJvZ3JhbUluZm9Mb2coKScsIGdsLmdldFByb2dyYW1JbmZvTG9nKHByb2dyYW0pKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGdsLmRlbGV0ZVByb2dyYW0ocHJvZ3JhbSk7XG4gICAgICAgIHByb2dyYW0gPSBudWxsO1xuICAgIH1cblxuICAgIC8vIGNsZWFuIHVwIHNvbWUgc2hhZGVyc1xuICAgIGdsLmRlbGV0ZVNoYWRlcihnbFZlcnRTaGFkZXIpO1xuICAgIGdsLmRlbGV0ZVNoYWRlcihnbEZyYWdTaGFkZXIpO1xuXG4gICAgcmV0dXJuIHByb2dyYW07XG59XG5cbnZhciBjb21waWxlU2hhZGVyID0gZnVuY3Rpb24gKGdsLCB0eXBlLCBzcmMpXG57XG4gICAgdmFyIHNoYWRlciA9IGdsLmNyZWF0ZVNoYWRlcih0eXBlKTtcblxuICAgIGdsLnNoYWRlclNvdXJjZShzaGFkZXIsIHNyYyk7XG4gICAgZ2wuY29tcGlsZVNoYWRlcihzaGFkZXIpO1xuXG4gICAgaWYgKCFnbC5nZXRTaGFkZXJQYXJhbWV0ZXIoc2hhZGVyLCBnbC5DT01QSUxFX1NUQVRVUykpXG4gICAge1xuICAgICAgICBjb25zb2xlLmxvZyhnbC5nZXRTaGFkZXJJbmZvTG9nKHNoYWRlcikpO1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICByZXR1cm4gc2hhZGVyO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBjb21waWxlUHJvZ3JhbTtcblxuIiwiXG5cbnZhciBkZWZhdWx0VmFsdWUgPSBmdW5jdGlvbih0eXBlLCBzaXplKSBcbntcbiAgICBzd2l0Y2ggKHR5cGUpXG4gICAge1xuICAgICAgICBjYXNlICdmbG9hdCc6XG4gICAgICAgICAgICByZXR1cm4gMDtcblxuICAgICAgICBjYXNlICd2ZWMyJzogXG4gICAgICAgICAgICByZXR1cm4gbmV3IEZsb2F0MzJBcnJheSgyICogc2l6ZSk7XG5cbiAgICAgICAgY2FzZSAndmVjMyc6XG4gICAgICAgICAgICByZXR1cm4gbmV3IEZsb2F0MzJBcnJheSgzICogc2l6ZSk7XG5cbiAgICAgICAgY2FzZSAndmVjNCc6ICAgICBcbiAgICAgICAgICAgIHJldHVybiBuZXcgRmxvYXQzMkFycmF5KDQgKiBzaXplKTtcbiAgICAgICAgICAgIFxuICAgICAgICBjYXNlICdpbnQnOlxuICAgICAgICBjYXNlICdzYW1wbGVyMkQnOlxuICAgICAgICAgICAgcmV0dXJuIDA7XG5cbiAgICAgICAgY2FzZSAnaXZlYzInOiAgIFxuICAgICAgICAgICAgcmV0dXJuIG5ldyBJbnQzMkFycmF5KDIgKiBzaXplKTtcblxuICAgICAgICBjYXNlICdpdmVjMyc6XG4gICAgICAgICAgICByZXR1cm4gbmV3IEludDMyQXJyYXkoMyAqIHNpemUpO1xuXG4gICAgICAgIGNhc2UgJ2l2ZWM0JzogXG4gICAgICAgICAgICByZXR1cm4gbmV3IEludDMyQXJyYXkoNCAqIHNpemUpO1xuXG4gICAgICAgIGNhc2UgJ2Jvb2wnOiAgICAgXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG5cbiAgICAgICAgY2FzZSAnYnZlYzInOlxuXG4gICAgICAgICAgICByZXR1cm4gYm9vbGVhbkFycmF5KCAyICogc2l6ZSk7XG5cbiAgICAgICAgY2FzZSAnYnZlYzMnOlxuICAgICAgICAgICAgcmV0dXJuIGJvb2xlYW5BcnJheSgzICogc2l6ZSk7XG5cbiAgICAgICAgY2FzZSAnYnZlYzQnOlxuICAgICAgICAgICAgcmV0dXJuIGJvb2xlYW5BcnJheSg0ICogc2l6ZSk7XG5cbiAgICAgICAgY2FzZSAnbWF0Mic6XG4gICAgICAgICAgICByZXR1cm4gbmV3IEZsb2F0MzJBcnJheShbMSwgMFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLDAsIDFdKTtcblxuICAgICAgICBjYXNlICdtYXQzJzogXG4gICAgICAgICAgICByZXR1cm4gbmV3IEZsb2F0MzJBcnJheShbMSwgMCwgMFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLDAsIDEsIDBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwwLCAwLCAxXSk7XG5cbiAgICAgICAgY2FzZSAnbWF0NCc6XG4gICAgICAgICAgICByZXR1cm4gbmV3IEZsb2F0MzJBcnJheShbMSwgMCwgMCwgMFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLDAsIDEsIDAsIDBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwwLCAwLCAxLCAwXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsMCwgMCwgMCwgMV0pO1xuICAgIH1cbn1cblxudmFyIGJvb2xlYW5BcnJheSA9IGZ1bmN0aW9uKHNpemUpXG57XG4gICAgdmFyIGFycmF5ID0gbmV3IEFycmF5KHNpemUpO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcnJheS5sZW5ndGg7IGkrKykgXG4gICAge1xuICAgICAgICBhcnJheVtpXSA9IGZhbHNlO1xuICAgIH07XG5cbiAgICByZXR1cm4gYXJyYXk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZGVmYXVsdFZhbHVlO1xuIiwiXG52YXIgbWFwVHlwZSA9IHJlcXVpcmUoJy4vbWFwVHlwZScpO1xudmFyIG1hcFNpemUgPSByZXF1aXJlKCcuL21hcFNpemUnKTtcblxudmFyIGV4dHJhY3RBdHRyaWJ1dGVzID0gZnVuY3Rpb24oZ2wsIHByb2dyYW0pXG57XG4gICAgdmFyIGF0dHJpYnV0ZXMgPSB7fTtcblxuICAgIHZhciB0b3RhbEF0dHJpYnV0ZXMgPSBnbC5nZXRQcm9ncmFtUGFyYW1ldGVyKHByb2dyYW0sIGdsLkFDVElWRV9BVFRSSUJVVEVTKVxuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0b3RhbEF0dHJpYnV0ZXM7IGkrKykgXG4gICAge1xuICAgICAgICB2YXIgYXR0cmliRGF0YSA9IGdsLmdldEFjdGl2ZUF0dHJpYihwcm9ncmFtLCBpKTtcbiAgICAgICAgdmFyIHR5cGUgPSBtYXBUeXBlKGdsLCBhdHRyaWJEYXRhLnR5cGUpO1xuXG4gICAgICAgIGF0dHJpYnV0ZXNbYXR0cmliRGF0YS5uYW1lXSA9IHtcbiAgICAgICAgICAgIHR5cGU6dHlwZSxcbiAgICAgICAgICAgIHNpemU6bWFwU2l6ZSh0eXBlKSxcbiAgICAgICAgICAgIGxvY2F0aW9uOmdsLmdldEF0dHJpYkxvY2F0aW9uKHByb2dyYW0sIGF0dHJpYkRhdGEubmFtZSksXG4gICAgICAgICAgICAvL1RPRE8gLSBtYWtlIGFuIGF0dHJpYnV0ZSBvYmplY3RcbiAgICAgICAgICAgIHBvaW50ZXI6ZnVuY3Rpb24odHlwZSwgbm9ybWFsaXplZCwgc3RyaWRlLCBzdGFydCl7XG5cbiAgICAgICAgICAgICAvLyAgIGNvbnNvbGUubG9nKHRoaXMubG9jYXRpb24pXG4gICAgICAgICAgICAgICAgZ2wudmVydGV4QXR0cmliUG9pbnRlcih0aGlzLmxvY2F0aW9uLHRoaXMuc2l6ZSwgdHlwZSB8fCBnbC5GTE9BVCwgbm9ybWFsaXplZCB8fCBmYWxzZSwgc3RyaWRlIHx8IDAsIHN0YXJ0IHx8IDApOyBcblxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfTtcblxuICAgIHJldHVybiBhdHRyaWJ1dGVzOyAgXG59XG5cbm1vZHVsZS5leHBvcnRzID0gZXh0cmFjdEF0dHJpYnV0ZXM7XG5cbiIsInZhciBtYXBUeXBlID0gcmVxdWlyZSgnLi9tYXBUeXBlJyk7XG52YXIgZGVmYXVsdFZhbHVlID0gcmVxdWlyZSgnLi9kZWZhdWx0VmFsdWUnKTtcblxuXG52YXIgZXh0cmFjdFVuaWZvcm1zID0gZnVuY3Rpb24oZ2wsIHByb2dyYW0pXG57XG5cdHZhciB1bmlmb3JtcyA9IHt9O1xuXHRcbiAgICB2YXIgdG90YWxVbmlmb3JtcyA9IGdsLmdldFByb2dyYW1QYXJhbWV0ZXIocHJvZ3JhbSwgZ2wuQUNUSVZFX1VOSUZPUk1TKVxuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0b3RhbFVuaWZvcm1zOyBpKyspIFxuICAgIHtcbiAgICBcdHZhciB1bmlmb3JtRGF0YSA9IGdsLmdldEFjdGl2ZVVuaWZvcm0ocHJvZ3JhbSwgaSk7XG4gICAgXHR2YXIgbmFtZSA9IHVuaWZvcm1EYXRhLm5hbWUucmVwbGFjZSgvXFxbLio/XFxdLywgXCJcIik7XG4gICAgICAgIHZhciB0eXBlID0gbWFwVHlwZShnbCwgdW5pZm9ybURhdGEudHlwZSApO1xuXG4gICAgXHR1bmlmb3Jtc1tuYW1lXSA9IHtcbiAgICBcdFx0dHlwZTp0eXBlLFxuICAgIFx0XHRzaXplOnVuaWZvcm1EYXRhLnNpemUsXG4gICAgXHRcdGxvY2F0aW9uOmdsLmdldFVuaWZvcm1Mb2NhdGlvbihwcm9ncmFtLCBuYW1lKSxcbiAgICBcdFx0dmFsdWU6ZGVmYXVsdFZhbHVlKHR5cGUsIHVuaWZvcm1EYXRhLnNpemUpXG4gICAgXHR9XG4gICAgfTtcblx0XG5cdHJldHVybiB1bmlmb3JtcztcdFxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGV4dHJhY3RVbmlmb3JtcztcblxuIiwiXG52YXIgZ2VuZXJhdGVVbmlmb3JtQWNjZXNzT2JqZWN0ID0gZnVuY3Rpb24oZ2wsIHVuaWZvcm1EYXRhKVxue1xuICAgIC8vIHRoaXMgaXMgdGhlIG9iamVjdCB3ZSB3aWxsIGJlIHNlbmRpbmcgYmFjay5cbiAgICAvLyBhbiBvYmplY3QgaGllcmFjaHkgd2lsbCBiZSBjcmVhdGVkIGZvciBzdHJ1Y3RzXG4gICAgdmFyIHVuaWZvcm1zID0ge2RhdGE6e319O1xuXG4gICAgdW5pZm9ybXMuZ2wgPSBnbDtcbiAgICBcbiAgICB2YXIgdW5pZm9ybUtleXM9IE9iamVjdC5rZXlzKHVuaWZvcm1EYXRhKTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdW5pZm9ybUtleXMubGVuZ3RoOyBpKyspIFxuICAgIHtcbiAgICAgICAgdmFyIGZ1bGxOYW1lID0gdW5pZm9ybUtleXNbaV1cblxuICAgICAgICB2YXIgbmFtZVRva2VucyA9IGZ1bGxOYW1lLnNwbGl0KCcuJyk7XG4gICAgICAgIHZhciBuYW1lID0gbmFtZVRva2Vuc1tuYW1lVG9rZW5zLmxlbmd0aCAtIDFdO1xuXG4gICAgICAgIHZhciB1bmlmb3JtR3JvdXAgPSBnZXRVbmlmb3JtR3JvdXAobmFtZVRva2VucywgdW5pZm9ybXMpO1xuXG4gICAgICAgIHZhciB1bmlmb3JtID0gIHVuaWZvcm1EYXRhW2Z1bGxOYW1lXTtcbiAgICAgICAgdW5pZm9ybUdyb3VwLmRhdGFbbmFtZV0gPSB1bmlmb3JtO1xuXG4gICAgICAgIHVuaWZvcm1Hcm91cC5nbCA9IGdsO1xuXG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh1bmlmb3JtR3JvdXAsIG5hbWUsIHtcbiAgICAgICAgICAgIGdldDogZ2VuZXJhdGVHZXR0ZXIobmFtZSksXG4gICAgICAgICAgICBzZXQ6IGdlbmVyYXRlU2V0dGVyKG5hbWUsIHVuaWZvcm0pXG4gICAgICAgIH0pXG4gICAgfTtcblxuICAgIHJldHVybiB1bmlmb3Jtcztcbn1cblxudmFyIGdlbmVyYXRlR2V0dGVyID0gZnVuY3Rpb24obmFtZSlcbntcblx0dmFyIHRlbXBsYXRlID0gZ2V0dGVyVGVtcGxhdGUucmVwbGFjZSgnJSUnLCBuYW1lKTtcblx0cmV0dXJuIG5ldyBGdW5jdGlvbih0ZW1wbGF0ZSk7XG59XG5cbnZhciBnZW5lcmF0ZVNldHRlciA9IGZ1bmN0aW9uKG5hbWUsIHVuaWZvcm0pXG57XG4gICAgdmFyIHRlbXBsYXRlID0gc2V0dGVyVGVtcGxhdGUucmVwbGFjZSgvJSUvZywgbmFtZSk7XG4gICAgdmFyIHNldFRlbXBsYXRlXG4gICAgXG4gICAgaWYodW5pZm9ybS5zaXplID09PSAxKVxuICAgIHtcbiAgICAgICAgc2V0VGVtcGxhdGUgPSBHTFNMX1RPX1NJTkdMRV9TRVRURVJTW3VuaWZvcm0udHlwZV07XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHNldFRlbXBsYXRlID0gR0xTTF9UT19BUlJBWV9TRVRURVJTW3VuaWZvcm0udHlwZV07XG4gICAgfVxuXG4gICAgaWYoc2V0VGVtcGxhdGUpXG4gICAge1xuICAgICAgICB0ZW1wbGF0ZSArPSBcIlxcbnRoaXMuZ2wuXCIgKyBzZXRUZW1wbGF0ZSArIFwiO1wiO1xuICAgIH1cblxuICBcdHJldHVybiBuZXcgRnVuY3Rpb24oJ3ZhbHVlJywgdGVtcGxhdGUpO1xufVxuXG52YXIgZ2V0VW5pZm9ybUdyb3VwID0gZnVuY3Rpb24obmFtZVRva2VucywgdW5pZm9ybSlcbntcbiAgICB2YXIgY3VyID0gdW5pZm9ybTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbmFtZVRva2Vucy5sZW5ndGggLSAxOyBpKyspIFxuICAgIHtcbiAgICAgICAgdmFyIG8gPSBjdXJbbmFtZVRva2Vuc1tpXV0gfHwge2RhdGE6e319O1xuICAgICAgICBjdXJbbmFtZVRva2Vuc1tpXV0gPSBvO1xuICAgICAgICBjdXIgPSBvO1xuICAgIH07XG5cbiAgICByZXR1cm4gY3VyXG59XG5cbnZhciBnZXR0ZXJUZW1wbGF0ZSA9IFtcbiAgICAncmV0dXJuIHRoaXMuZGF0YS4lJS52YWx1ZTsnLFxuXS5qb2luKCdcXG4nKTtcblxudmFyIHNldHRlclRlbXBsYXRlID0gW1xuICAgICd0aGlzLmRhdGEuJSUudmFsdWUgPSB2YWx1ZTsnLFxuICAgICd2YXIgbG9jYXRpb24gPSB0aGlzLmRhdGEuJSUubG9jYXRpb247J1xuXS5qb2luKCdcXG4nKTtcblxuXG52YXIgR0xTTF9UT19TSU5HTEVfU0VUVEVSUyA9IHtcblxuICAgICdmbG9hdCc6ICAgICd1bmlmb3JtMWYobG9jYXRpb24sIHZhbHVlKScsXG5cbiAgICAndmVjMic6ICAgICAndW5pZm9ybTJmKGxvY2F0aW9uLCB2YWx1ZVswXSwgdmFsdWVbMV0pJyxcbiAgICAndmVjMyc6ICAgICAndW5pZm9ybTNmKGxvY2F0aW9uLCB2YWx1ZVswXSwgdmFsdWVbMV0sIHZhbHVlWzJdKScsXG4gICAgJ3ZlYzQnOiAgICAgJ3VuaWZvcm00Zihsb2NhdGlvbiwgdmFsdWVbMF0sIHZhbHVlWzFdLCB2YWx1ZVsyXSwgdmFsdWVbM10pJyxcbiAgICBcdFxuICAgICdpbnQnOiAgICAgICd1bmlmb3JtMWkobG9jYXRpb24sIHZhbHVlKScsXG4gICAgJ2l2ZWMyJzogICAgJ3VuaWZvcm0yaShsb2NhdGlvbiwgdmFsdWVbMF0sIHZhbHVlWzFdKScsXG4gICAgJ2l2ZWMzJzogICAgJ3VuaWZvcm0zaShsb2NhdGlvbiwgdmFsdWVbMF0sIHZhbHVlWzFdLCB2YWx1ZVsyXSknLFxuICAgICdpdmVjNCc6ICAgICd1bmlmb3JtNGkobG9jYXRpb24sIHZhbHVlWzBdLCB2YWx1ZVsxXSwgdmFsdWVbMl0sIHZhbHVlWzNdKScsXG5cbiAgICAnYm9vbCc6ICAgICAndW5pZm9ybTFpKGxvY2F0aW9uLCB2YWx1ZSknLFxuICAgICdidmVjMic6ICAgICd1bmlmb3JtMmkobG9jYXRpb24sIHZhbHVlWzBdLCB2YWx1ZVsxXSknLFxuICAgICdidmVjMyc6ICAgICd1bmlmb3JtM2kobG9jYXRpb24sIHZhbHVlWzBdLCB2YWx1ZVsxXSwgdmFsdWVbMl0pJyxcbiAgICAnYnZlYzQnOiAgICAndW5pZm9ybTRpKGxvY2F0aW9uLCB2YWx1ZVswXSwgdmFsdWVbMV0sIHZhbHVlWzJdLCB2YWx1ZVszXSknLFxuXG4gICAgJ21hdDInOiAgICAgJ3VuaWZvcm1NYXRyaXgyZnYobG9jYXRpb24sIGZhbHNlLCB2YWx1ZSknLFxuICAgICdtYXQzJzogICAgICd1bmlmb3JtTWF0cml4M2Z2KGxvY2F0aW9uLCBmYWxzZSwgdmFsdWUpJyxcbiAgICAnbWF0NCc6ICAgICAndW5pZm9ybU1hdHJpeDRmdihsb2NhdGlvbiwgZmFsc2UsIHZhbHVlKScsXG5cbiAgICAnc2FtcGxlcjJEJzondW5pZm9ybTFpKGxvY2F0aW9uLCB2YWx1ZSknXG59XG5cbnZhciBHTFNMX1RPX0FSUkFZX1NFVFRFUlMgPSB7XG5cbiAgICAnZmxvYXQnOiAgICAndW5pZm9ybTFmdihsb2NhdGlvbiwgdmFsdWUpJyxcblxuICAgICd2ZWMyJzogICAgICd1bmlmb3JtMmZ2KGxvY2F0aW9uLCB2YWx1ZSknLFxuICAgICd2ZWMzJzogICAgICd1bmlmb3JtM2Z2KGxvY2F0aW9uLCB2YWx1ZSknLFxuICAgICd2ZWM0JzogICAgICd1bmlmb3JtNGZ2KGxvY2F0aW9uLCB2YWx1ZSknLFxuICAgIFx0XG4gICAgJ2ludCc6ICAgICAgJ3VuaWZvcm0xaXYobG9jYXRpb24sIHZhbHVlKScsXG4gICAgJ2l2ZWMyJzogICAgJ3VuaWZvcm0yaXYobG9jYXRpb24sIHZhbHVlKScsXG4gICAgJ2l2ZWMzJzogICAgJ3VuaWZvcm0zaXYobG9jYXRpb24sIHZhbHVlKScsXG4gICAgJ2l2ZWM0JzogICAgJ3VuaWZvcm00aXYobG9jYXRpb24sIHZhbHVlKScsXG5cbiAgICAnYm9vbCc6ICAgICAndW5pZm9ybTFpdihsb2NhdGlvbiwgdmFsdWUpJyxcbiAgICAnYnZlYzInOiAgICAndW5pZm9ybTJpdihsb2NhdGlvbiwgdmFsdWUpJyxcbiAgICAnYnZlYzMnOiAgICAndW5pZm9ybTNpdihsb2NhdGlvbiwgdmFsdWUpJyxcbiAgICAnYnZlYzQnOiAgICAndW5pZm9ybTRpdihsb2NhdGlvbiwgdmFsdWUpJyxcbiAgIFxuICAgICdzYW1wbGVyMkQnOid1bmlmb3JtMWl2KGxvY2F0aW9uLCB2YWx1ZSknXG59XG5cbm1vZHVsZS5leHBvcnRzID0gZ2VuZXJhdGVVbmlmb3JtQWNjZXNzT2JqZWN0O1xuXG4iLCJcblxudmFyIG1hcFNpemUgPSBmdW5jdGlvbih0eXBlKSBcbnsgXG4gICAgcmV0dXJuIEdMU0xfVE9fU0laRVt0eXBlXTtcbn1cblxuXG52YXIgR0xTTF9UT19TSVpFID0ge1xuICAgICdmbG9hdCc6ICAgIDEsXG4gICAgJ3ZlYzInOiAgICAgMixcbiAgICAndmVjMyc6ICAgICAzLFxuICAgICd2ZWM0JzogICAgIDQsXG5cbiAgICAnaW50JzogICAgICAxLFxuICAgICdpdmVjMic6ICAgIDIsXG4gICAgJ2l2ZWMzJzogICAgMyxcbiAgICAnaXZlYzQnOiAgICA0LFxuXG4gICAgJ2Jvb2wnOiAgICAgMSxcbiAgICAnYnZlYzInOiAgICAyLFxuICAgICdidmVjMyc6ICAgIDMsXG4gICAgJ2J2ZWM0JzogICAgNCxcblxuICAgICdtYXQyJzogICAgIDQsXG4gICAgJ21hdDMnOiAgICAgOSxcbiAgICAnbWF0NCc6ICAgICAxNixcblxuICAgICdzYW1wbGVyMkQnOiAgMVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IG1hcFNpemU7XG4iLCJcblxudmFyIG1hcFNpemUgPSBmdW5jdGlvbihnbCwgdHlwZSkgXG57XG4gICAgaWYoIUdMX1RBQkxFKSBcbiAgICB7XG4gICAgICAgIHZhciB0eXBlTmFtZXMgPSBPYmplY3Qua2V5cyhHTF9UT19HTFNMX1RZUEVTKTtcblxuICAgICAgICBHTF9UQUJMRSA9IHt9O1xuXG4gICAgICAgIGZvcih2YXIgaSA9IDA7IGkgPCB0eXBlTmFtZXMubGVuZ3RoOyArK2kpIFxuICAgICAgICB7XG4gICAgICAgICAgICB2YXIgdG4gPSB0eXBlTmFtZXNbaV07XG4gICAgICAgICAgICBHTF9UQUJMRVsgZ2xbdG5dIF0gPSBHTF9UT19HTFNMX1RZUEVTW3RuXTtcbiAgICAgICAgfVxuICAgIH1cblxuICByZXR1cm4gR0xfVEFCTEVbdHlwZV07XG59XG5cbnZhciBHTF9UQUJMRSA9IG51bGw7XG5cbnZhciBHTF9UT19HTFNMX1RZUEVTID0ge1xuICAnRkxPQVQnOiAgICAgICAnZmxvYXQnLFxuICAnRkxPQVRfVkVDMic6ICAndmVjMicsXG4gICdGTE9BVF9WRUMzJzogICd2ZWMzJyxcbiAgJ0ZMT0FUX1ZFQzQnOiAgJ3ZlYzQnLFxuXG4gICdJTlQnOiAgICAgICAgICdpbnQnLFxuICAnSU5UX1ZFQzInOiAgICAnaXZlYzInLFxuICAnSU5UX1ZFQzMnOiAgICAnaXZlYzMnLFxuICAnSU5UX1ZFQzQnOiAgICAnaXZlYzQnLFxuICBcbiAgJ0JPT0wnOiAgICAgICAgJ2Jvb2wnLFxuICAnQk9PTF9WRUMyJzogICAnYnZlYzInLFxuICAnQk9PTF9WRUMzJzogICAnYnZlYzMnLFxuICAnQk9PTF9WRUM0JzogICAnYnZlYzQnLFxuICBcbiAgJ0ZMT0FUX01BVDInOiAgJ21hdDInLFxuICAnRkxPQVRfTUFUMyc6ICAnbWF0MycsXG4gICdGTE9BVF9NQVQ0JzogICdtYXQ0JyxcbiAgXG4gICdTQU1QTEVSXzJEJzogICdzYW1wbGVyMkQnICBcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBtYXBTaXplO1xuIiwiLyohXG4gKiBhc3luY1xuICogaHR0cHM6Ly9naXRodWIuY29tL2Nhb2xhbi9hc3luY1xuICpcbiAqIENvcHlyaWdodCAyMDEwLTIwMTQgQ2FvbGFuIE1jTWFob25cbiAqIFJlbGVhc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZVxuICovXG4oZnVuY3Rpb24gKCkge1xuXG4gICAgdmFyIGFzeW5jID0ge307XG4gICAgZnVuY3Rpb24gbm9vcCgpIHt9XG4gICAgZnVuY3Rpb24gaWRlbnRpdHkodikge1xuICAgICAgICByZXR1cm4gdjtcbiAgICB9XG4gICAgZnVuY3Rpb24gdG9Cb29sKHYpIHtcbiAgICAgICAgcmV0dXJuICEhdjtcbiAgICB9XG4gICAgZnVuY3Rpb24gbm90SWQodikge1xuICAgICAgICByZXR1cm4gIXY7XG4gICAgfVxuXG4gICAgLy8gZ2xvYmFsIG9uIHRoZSBzZXJ2ZXIsIHdpbmRvdyBpbiB0aGUgYnJvd3NlclxuICAgIHZhciBwcmV2aW91c19hc3luYztcblxuICAgIC8vIEVzdGFibGlzaCB0aGUgcm9vdCBvYmplY3QsIGB3aW5kb3dgIChgc2VsZmApIGluIHRoZSBicm93c2VyLCBgZ2xvYmFsYFxuICAgIC8vIG9uIHRoZSBzZXJ2ZXIsIG9yIGB0aGlzYCBpbiBzb21lIHZpcnR1YWwgbWFjaGluZXMuIFdlIHVzZSBgc2VsZmBcbiAgICAvLyBpbnN0ZWFkIG9mIGB3aW5kb3dgIGZvciBgV2ViV29ya2VyYCBzdXBwb3J0LlxuICAgIHZhciByb290ID0gdHlwZW9mIHNlbGYgPT09ICdvYmplY3QnICYmIHNlbGYuc2VsZiA9PT0gc2VsZiAmJiBzZWxmIHx8XG4gICAgICAgICAgICB0eXBlb2YgZ2xvYmFsID09PSAnb2JqZWN0JyAmJiBnbG9iYWwuZ2xvYmFsID09PSBnbG9iYWwgJiYgZ2xvYmFsIHx8XG4gICAgICAgICAgICB0aGlzO1xuXG4gICAgaWYgKHJvb3QgIT0gbnVsbCkge1xuICAgICAgICBwcmV2aW91c19hc3luYyA9IHJvb3QuYXN5bmM7XG4gICAgfVxuXG4gICAgYXN5bmMubm9Db25mbGljdCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcm9vdC5hc3luYyA9IHByZXZpb3VzX2FzeW5jO1xuICAgICAgICByZXR1cm4gYXN5bmM7XG4gICAgfTtcblxuICAgIGZ1bmN0aW9uIG9ubHlfb25jZShmbikge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICBpZiAoZm4gPT09IG51bGwpIHRocm93IG5ldyBFcnJvcihcIkNhbGxiYWNrIHdhcyBhbHJlYWR5IGNhbGxlZC5cIik7XG4gICAgICAgICAgICBmbi5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgICAgICAgICAgZm4gPSBudWxsO1xuICAgICAgICB9O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIF9vbmNlKGZuKSB7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIGlmIChmbiA9PT0gbnVsbCkgcmV0dXJuO1xuICAgICAgICAgICAgZm4uYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICAgICAgICAgIGZuID0gbnVsbDtcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICAvLy8vIGNyb3NzLWJyb3dzZXIgY29tcGF0aWJsaXR5IGZ1bmN0aW9ucyAvLy8vXG5cbiAgICB2YXIgX3RvU3RyaW5nID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZztcblxuICAgIHZhciBfaXNBcnJheSA9IEFycmF5LmlzQXJyYXkgfHwgZnVuY3Rpb24gKG9iaikge1xuICAgICAgICByZXR1cm4gX3RvU3RyaW5nLmNhbGwob2JqKSA9PT0gJ1tvYmplY3QgQXJyYXldJztcbiAgICB9O1xuXG4gICAgLy8gUG9ydGVkIGZyb20gdW5kZXJzY29yZS5qcyBpc09iamVjdFxuICAgIHZhciBfaXNPYmplY3QgPSBmdW5jdGlvbihvYmopIHtcbiAgICAgICAgdmFyIHR5cGUgPSB0eXBlb2Ygb2JqO1xuICAgICAgICByZXR1cm4gdHlwZSA9PT0gJ2Z1bmN0aW9uJyB8fCB0eXBlID09PSAnb2JqZWN0JyAmJiAhIW9iajtcbiAgICB9O1xuXG4gICAgZnVuY3Rpb24gX2lzQXJyYXlMaWtlKGFycikge1xuICAgICAgICByZXR1cm4gX2lzQXJyYXkoYXJyKSB8fCAoXG4gICAgICAgICAgICAvLyBoYXMgYSBwb3NpdGl2ZSBpbnRlZ2VyIGxlbmd0aCBwcm9wZXJ0eVxuICAgICAgICAgICAgdHlwZW9mIGFyci5sZW5ndGggPT09IFwibnVtYmVyXCIgJiZcbiAgICAgICAgICAgIGFyci5sZW5ndGggPj0gMCAmJlxuICAgICAgICAgICAgYXJyLmxlbmd0aCAlIDEgPT09IDBcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBfYXJyYXlFYWNoKGFyciwgaXRlcmF0b3IpIHtcbiAgICAgICAgdmFyIGluZGV4ID0gLTEsXG4gICAgICAgICAgICBsZW5ndGggPSBhcnIubGVuZ3RoO1xuXG4gICAgICAgIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgICAgICAgICBpdGVyYXRvcihhcnJbaW5kZXhdLCBpbmRleCwgYXJyKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIF9tYXAoYXJyLCBpdGVyYXRvcikge1xuICAgICAgICB2YXIgaW5kZXggPSAtMSxcbiAgICAgICAgICAgIGxlbmd0aCA9IGFyci5sZW5ndGgsXG4gICAgICAgICAgICByZXN1bHQgPSBBcnJheShsZW5ndGgpO1xuXG4gICAgICAgIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgICAgICAgICByZXN1bHRbaW5kZXhdID0gaXRlcmF0b3IoYXJyW2luZGV4XSwgaW5kZXgsIGFycik7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBfcmFuZ2UoY291bnQpIHtcbiAgICAgICAgcmV0dXJuIF9tYXAoQXJyYXkoY291bnQpLCBmdW5jdGlvbiAodiwgaSkgeyByZXR1cm4gaTsgfSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gX3JlZHVjZShhcnIsIGl0ZXJhdG9yLCBtZW1vKSB7XG4gICAgICAgIF9hcnJheUVhY2goYXJyLCBmdW5jdGlvbiAoeCwgaSwgYSkge1xuICAgICAgICAgICAgbWVtbyA9IGl0ZXJhdG9yKG1lbW8sIHgsIGksIGEpO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIG1lbW87XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gX2ZvckVhY2hPZihvYmplY3QsIGl0ZXJhdG9yKSB7XG4gICAgICAgIF9hcnJheUVhY2goX2tleXMob2JqZWN0KSwgZnVuY3Rpb24gKGtleSkge1xuICAgICAgICAgICAgaXRlcmF0b3Iob2JqZWN0W2tleV0sIGtleSk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIF9pbmRleE9mKGFyciwgaXRlbSkge1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFyci5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgaWYgKGFycltpXSA9PT0gaXRlbSkgcmV0dXJuIGk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIC0xO1xuICAgIH1cblxuICAgIHZhciBfa2V5cyA9IE9iamVjdC5rZXlzIHx8IGZ1bmN0aW9uIChvYmopIHtcbiAgICAgICAgdmFyIGtleXMgPSBbXTtcbiAgICAgICAgZm9yICh2YXIgayBpbiBvYmopIHtcbiAgICAgICAgICAgIGlmIChvYmouaGFzT3duUHJvcGVydHkoaykpIHtcbiAgICAgICAgICAgICAgICBrZXlzLnB1c2goayk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGtleXM7XG4gICAgfTtcblxuICAgIGZ1bmN0aW9uIF9rZXlJdGVyYXRvcihjb2xsKSB7XG4gICAgICAgIHZhciBpID0gLTE7XG4gICAgICAgIHZhciBsZW47XG4gICAgICAgIHZhciBrZXlzO1xuICAgICAgICBpZiAoX2lzQXJyYXlMaWtlKGNvbGwpKSB7XG4gICAgICAgICAgICBsZW4gPSBjb2xsLmxlbmd0aDtcbiAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbiBuZXh0KCkge1xuICAgICAgICAgICAgICAgIGkrKztcbiAgICAgICAgICAgICAgICByZXR1cm4gaSA8IGxlbiA/IGkgOiBudWxsO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGtleXMgPSBfa2V5cyhjb2xsKTtcbiAgICAgICAgICAgIGxlbiA9IGtleXMubGVuZ3RoO1xuICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIG5leHQoKSB7XG4gICAgICAgICAgICAgICAgaSsrO1xuICAgICAgICAgICAgICAgIHJldHVybiBpIDwgbGVuID8ga2V5c1tpXSA6IG51bGw7XG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gU2ltaWxhciB0byBFUzYncyByZXN0IHBhcmFtIChodHRwOi8vYXJpeWEub2ZpbGFicy5jb20vMjAxMy8wMy9lczYtYW5kLXJlc3QtcGFyYW1ldGVyLmh0bWwpXG4gICAgLy8gVGhpcyBhY2N1bXVsYXRlcyB0aGUgYXJndW1lbnRzIHBhc3NlZCBpbnRvIGFuIGFycmF5LCBhZnRlciBhIGdpdmVuIGluZGV4LlxuICAgIC8vIEZyb20gdW5kZXJzY29yZS5qcyAoaHR0cHM6Ly9naXRodWIuY29tL2phc2hrZW5hcy91bmRlcnNjb3JlL3B1bGwvMjE0MCkuXG4gICAgZnVuY3Rpb24gX3Jlc3RQYXJhbShmdW5jLCBzdGFydEluZGV4KSB7XG4gICAgICAgIHN0YXJ0SW5kZXggPSBzdGFydEluZGV4ID09IG51bGwgPyBmdW5jLmxlbmd0aCAtIDEgOiArc3RhcnRJbmRleDtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgdmFyIGxlbmd0aCA9IE1hdGgubWF4KGFyZ3VtZW50cy5sZW5ndGggLSBzdGFydEluZGV4LCAwKTtcbiAgICAgICAgICAgIHZhciByZXN0ID0gQXJyYXkobGVuZ3RoKTtcbiAgICAgICAgICAgIGZvciAodmFyIGluZGV4ID0gMDsgaW5kZXggPCBsZW5ndGg7IGluZGV4KyspIHtcbiAgICAgICAgICAgICAgICByZXN0W2luZGV4XSA9IGFyZ3VtZW50c1tpbmRleCArIHN0YXJ0SW5kZXhdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgc3dpdGNoIChzdGFydEluZGV4KSB7XG4gICAgICAgICAgICAgICAgY2FzZSAwOiByZXR1cm4gZnVuYy5jYWxsKHRoaXMsIHJlc3QpO1xuICAgICAgICAgICAgICAgIGNhc2UgMTogcmV0dXJuIGZ1bmMuY2FsbCh0aGlzLCBhcmd1bWVudHNbMF0sIHJlc3QpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gQ3VycmVudGx5IHVudXNlZCBidXQgaGFuZGxlIGNhc2VzIG91dHNpZGUgb2YgdGhlIHN3aXRjaCBzdGF0ZW1lbnQ6XG4gICAgICAgICAgICAvLyB2YXIgYXJncyA9IEFycmF5KHN0YXJ0SW5kZXggKyAxKTtcbiAgICAgICAgICAgIC8vIGZvciAoaW5kZXggPSAwOyBpbmRleCA8IHN0YXJ0SW5kZXg7IGluZGV4KyspIHtcbiAgICAgICAgICAgIC8vICAgICBhcmdzW2luZGV4XSA9IGFyZ3VtZW50c1tpbmRleF07XG4gICAgICAgICAgICAvLyB9XG4gICAgICAgICAgICAvLyBhcmdzW3N0YXJ0SW5kZXhdID0gcmVzdDtcbiAgICAgICAgICAgIC8vIHJldHVybiBmdW5jLmFwcGx5KHRoaXMsIGFyZ3MpO1xuICAgICAgICB9O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIF93aXRob3V0SW5kZXgoaXRlcmF0b3IpIHtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICh2YWx1ZSwgaW5kZXgsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICByZXR1cm4gaXRlcmF0b3IodmFsdWUsIGNhbGxiYWNrKTtcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICAvLy8vIGV4cG9ydGVkIGFzeW5jIG1vZHVsZSBmdW5jdGlvbnMgLy8vL1xuXG4gICAgLy8vLyBuZXh0VGljayBpbXBsZW1lbnRhdGlvbiB3aXRoIGJyb3dzZXItY29tcGF0aWJsZSBmYWxsYmFjayAvLy8vXG5cbiAgICAvLyBjYXB0dXJlIHRoZSBnbG9iYWwgcmVmZXJlbmNlIHRvIGd1YXJkIGFnYWluc3QgZmFrZVRpbWVyIG1vY2tzXG4gICAgdmFyIF9zZXRJbW1lZGlhdGUgPSB0eXBlb2Ygc2V0SW1tZWRpYXRlID09PSAnZnVuY3Rpb24nICYmIHNldEltbWVkaWF0ZTtcblxuICAgIHZhciBfZGVsYXkgPSBfc2V0SW1tZWRpYXRlID8gZnVuY3Rpb24oZm4pIHtcbiAgICAgICAgLy8gbm90IGEgZGlyZWN0IGFsaWFzIGZvciBJRTEwIGNvbXBhdGliaWxpdHlcbiAgICAgICAgX3NldEltbWVkaWF0ZShmbik7XG4gICAgfSA6IGZ1bmN0aW9uKGZuKSB7XG4gICAgICAgIHNldFRpbWVvdXQoZm4sIDApO1xuICAgIH07XG5cbiAgICBpZiAodHlwZW9mIHByb2Nlc3MgPT09ICdvYmplY3QnICYmIHR5cGVvZiBwcm9jZXNzLm5leHRUaWNrID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIGFzeW5jLm5leHRUaWNrID0gcHJvY2Vzcy5uZXh0VGljaztcbiAgICB9IGVsc2Uge1xuICAgICAgICBhc3luYy5uZXh0VGljayA9IF9kZWxheTtcbiAgICB9XG4gICAgYXN5bmMuc2V0SW1tZWRpYXRlID0gX3NldEltbWVkaWF0ZSA/IF9kZWxheSA6IGFzeW5jLm5leHRUaWNrO1xuXG5cbiAgICBhc3luYy5mb3JFYWNoID1cbiAgICBhc3luYy5lYWNoID0gZnVuY3Rpb24gKGFyciwgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgIHJldHVybiBhc3luYy5lYWNoT2YoYXJyLCBfd2l0aG91dEluZGV4KGl0ZXJhdG9yKSwgY2FsbGJhY2spO1xuICAgIH07XG5cbiAgICBhc3luYy5mb3JFYWNoU2VyaWVzID1cbiAgICBhc3luYy5lYWNoU2VyaWVzID0gZnVuY3Rpb24gKGFyciwgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgIHJldHVybiBhc3luYy5lYWNoT2ZTZXJpZXMoYXJyLCBfd2l0aG91dEluZGV4KGl0ZXJhdG9yKSwgY2FsbGJhY2spO1xuICAgIH07XG5cblxuICAgIGFzeW5jLmZvckVhY2hMaW1pdCA9XG4gICAgYXN5bmMuZWFjaExpbWl0ID0gZnVuY3Rpb24gKGFyciwgbGltaXQsIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICByZXR1cm4gX2VhY2hPZkxpbWl0KGxpbWl0KShhcnIsIF93aXRob3V0SW5kZXgoaXRlcmF0b3IpLCBjYWxsYmFjayk7XG4gICAgfTtcblxuICAgIGFzeW5jLmZvckVhY2hPZiA9XG4gICAgYXN5bmMuZWFjaE9mID0gZnVuY3Rpb24gKG9iamVjdCwgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgIGNhbGxiYWNrID0gX29uY2UoY2FsbGJhY2sgfHwgbm9vcCk7XG4gICAgICAgIG9iamVjdCA9IG9iamVjdCB8fCBbXTtcblxuICAgICAgICB2YXIgaXRlciA9IF9rZXlJdGVyYXRvcihvYmplY3QpO1xuICAgICAgICB2YXIga2V5LCBjb21wbGV0ZWQgPSAwO1xuXG4gICAgICAgIHdoaWxlICgoa2V5ID0gaXRlcigpKSAhPSBudWxsKSB7XG4gICAgICAgICAgICBjb21wbGV0ZWQgKz0gMTtcbiAgICAgICAgICAgIGl0ZXJhdG9yKG9iamVjdFtrZXldLCBrZXksIG9ubHlfb25jZShkb25lKSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoY29tcGxldGVkID09PSAwKSBjYWxsYmFjayhudWxsKTtcblxuICAgICAgICBmdW5jdGlvbiBkb25lKGVycikge1xuICAgICAgICAgICAgY29tcGxldGVkLS07XG4gICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIENoZWNrIGtleSBpcyBudWxsIGluIGNhc2UgaXRlcmF0b3IgaXNuJ3QgZXhoYXVzdGVkXG4gICAgICAgICAgICAvLyBhbmQgZG9uZSByZXNvbHZlZCBzeW5jaHJvbm91c2x5LlxuICAgICAgICAgICAgZWxzZSBpZiAoa2V5ID09PSBudWxsICYmIGNvbXBsZXRlZCA8PSAwKSB7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2sobnVsbCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgYXN5bmMuZm9yRWFjaE9mU2VyaWVzID1cbiAgICBhc3luYy5lYWNoT2ZTZXJpZXMgPSBmdW5jdGlvbiAob2JqLCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgY2FsbGJhY2sgPSBfb25jZShjYWxsYmFjayB8fCBub29wKTtcbiAgICAgICAgb2JqID0gb2JqIHx8IFtdO1xuICAgICAgICB2YXIgbmV4dEtleSA9IF9rZXlJdGVyYXRvcihvYmopO1xuICAgICAgICB2YXIga2V5ID0gbmV4dEtleSgpO1xuICAgICAgICBmdW5jdGlvbiBpdGVyYXRlKCkge1xuICAgICAgICAgICAgdmFyIHN5bmMgPSB0cnVlO1xuICAgICAgICAgICAgaWYgKGtleSA9PT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBjYWxsYmFjayhudWxsKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGl0ZXJhdG9yKG9ialtrZXldLCBrZXksIG9ubHlfb25jZShmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAga2V5ID0gbmV4dEtleSgpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoa2V5ID09PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gY2FsbGJhY2sobnVsbCk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3luYykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFzeW5jLnNldEltbWVkaWF0ZShpdGVyYXRlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlcmF0ZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSkpO1xuICAgICAgICAgICAgc3luYyA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGl0ZXJhdGUoKTtcbiAgICB9O1xuXG5cblxuICAgIGFzeW5jLmZvckVhY2hPZkxpbWl0ID1cbiAgICBhc3luYy5lYWNoT2ZMaW1pdCA9IGZ1bmN0aW9uIChvYmosIGxpbWl0LCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgX2VhY2hPZkxpbWl0KGxpbWl0KShvYmosIGl0ZXJhdG9yLCBjYWxsYmFjayk7XG4gICAgfTtcblxuICAgIGZ1bmN0aW9uIF9lYWNoT2ZMaW1pdChsaW1pdCkge1xuXG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAob2JqLCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIGNhbGxiYWNrID0gX29uY2UoY2FsbGJhY2sgfHwgbm9vcCk7XG4gICAgICAgICAgICBvYmogPSBvYmogfHwgW107XG4gICAgICAgICAgICB2YXIgbmV4dEtleSA9IF9rZXlJdGVyYXRvcihvYmopO1xuICAgICAgICAgICAgaWYgKGxpbWl0IDw9IDApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gY2FsbGJhY2sobnVsbCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB2YXIgZG9uZSA9IGZhbHNlO1xuICAgICAgICAgICAgdmFyIHJ1bm5pbmcgPSAwO1xuICAgICAgICAgICAgdmFyIGVycm9yZWQgPSBmYWxzZTtcblxuICAgICAgICAgICAgKGZ1bmN0aW9uIHJlcGxlbmlzaCAoKSB7XG4gICAgICAgICAgICAgICAgaWYgKGRvbmUgJiYgcnVubmluZyA8PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBjYWxsYmFjayhudWxsKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB3aGlsZSAocnVubmluZyA8IGxpbWl0ICYmICFlcnJvcmVkKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBrZXkgPSBuZXh0S2V5KCk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChrZXkgPT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRvbmUgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJ1bm5pbmcgPD0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKG51bGwpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJ1bm5pbmcgKz0gMTtcbiAgICAgICAgICAgICAgICAgICAgaXRlcmF0b3Iob2JqW2tleV0sIGtleSwgb25seV9vbmNlKGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJ1bm5pbmcgLT0gMTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVwbGVuaXNoKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KSgpO1xuICAgICAgICB9O1xuICAgIH1cblxuXG4gICAgZnVuY3Rpb24gZG9QYXJhbGxlbChmbikge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKG9iaiwgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICByZXR1cm4gZm4oYXN5bmMuZWFjaE9mLCBvYmosIGl0ZXJhdG9yLCBjYWxsYmFjayk7XG4gICAgICAgIH07XG4gICAgfVxuICAgIGZ1bmN0aW9uIGRvUGFyYWxsZWxMaW1pdChmbikge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKG9iaiwgbGltaXQsIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICAgICAgcmV0dXJuIGZuKF9lYWNoT2ZMaW1pdChsaW1pdCksIG9iaiwgaXRlcmF0b3IsIGNhbGxiYWNrKTtcbiAgICAgICAgfTtcbiAgICB9XG4gICAgZnVuY3Rpb24gZG9TZXJpZXMoZm4pIHtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChvYmosIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICAgICAgcmV0dXJuIGZuKGFzeW5jLmVhY2hPZlNlcmllcywgb2JqLCBpdGVyYXRvciwgY2FsbGJhY2spO1xuICAgICAgICB9O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIF9hc3luY01hcChlYWNoZm4sIGFyciwgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgIGNhbGxiYWNrID0gX29uY2UoY2FsbGJhY2sgfHwgbm9vcCk7XG4gICAgICAgIGFyciA9IGFyciB8fCBbXTtcbiAgICAgICAgdmFyIHJlc3VsdHMgPSBfaXNBcnJheUxpa2UoYXJyKSA/IFtdIDoge307XG4gICAgICAgIGVhY2hmbihhcnIsIGZ1bmN0aW9uICh2YWx1ZSwgaW5kZXgsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICBpdGVyYXRvcih2YWx1ZSwgZnVuY3Rpb24gKGVyciwgdikge1xuICAgICAgICAgICAgICAgIHJlc3VsdHNbaW5kZXhdID0gdjtcbiAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgIGNhbGxiYWNrKGVyciwgcmVzdWx0cyk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGFzeW5jLm1hcCA9IGRvUGFyYWxsZWwoX2FzeW5jTWFwKTtcbiAgICBhc3luYy5tYXBTZXJpZXMgPSBkb1NlcmllcyhfYXN5bmNNYXApO1xuICAgIGFzeW5jLm1hcExpbWl0ID0gZG9QYXJhbGxlbExpbWl0KF9hc3luY01hcCk7XG5cbiAgICAvLyByZWR1Y2Ugb25seSBoYXMgYSBzZXJpZXMgdmVyc2lvbiwgYXMgZG9pbmcgcmVkdWNlIGluIHBhcmFsbGVsIHdvbid0XG4gICAgLy8gd29yayBpbiBtYW55IHNpdHVhdGlvbnMuXG4gICAgYXN5bmMuaW5qZWN0ID1cbiAgICBhc3luYy5mb2xkbCA9XG4gICAgYXN5bmMucmVkdWNlID0gZnVuY3Rpb24gKGFyciwgbWVtbywgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgIGFzeW5jLmVhY2hPZlNlcmllcyhhcnIsIGZ1bmN0aW9uICh4LCBpLCBjYWxsYmFjaykge1xuICAgICAgICAgICAgaXRlcmF0b3IobWVtbywgeCwgZnVuY3Rpb24gKGVyciwgdikge1xuICAgICAgICAgICAgICAgIG1lbW8gPSB2O1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSwgZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgY2FsbGJhY2soZXJyLCBtZW1vKTtcbiAgICAgICAgfSk7XG4gICAgfTtcblxuICAgIGFzeW5jLmZvbGRyID1cbiAgICBhc3luYy5yZWR1Y2VSaWdodCA9IGZ1bmN0aW9uIChhcnIsIG1lbW8sIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICB2YXIgcmV2ZXJzZWQgPSBfbWFwKGFyciwgaWRlbnRpdHkpLnJldmVyc2UoKTtcbiAgICAgICAgYXN5bmMucmVkdWNlKHJldmVyc2VkLCBtZW1vLCBpdGVyYXRvciwgY2FsbGJhY2spO1xuICAgIH07XG5cbiAgICBhc3luYy50cmFuc2Zvcm0gPSBmdW5jdGlvbiAoYXJyLCBtZW1vLCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDMpIHtcbiAgICAgICAgICAgIGNhbGxiYWNrID0gaXRlcmF0b3I7XG4gICAgICAgICAgICBpdGVyYXRvciA9IG1lbW87XG4gICAgICAgICAgICBtZW1vID0gX2lzQXJyYXkoYXJyKSA/IFtdIDoge307XG4gICAgICAgIH1cblxuICAgICAgICBhc3luYy5lYWNoT2YoYXJyLCBmdW5jdGlvbih2LCBrLCBjYikge1xuICAgICAgICAgICAgaXRlcmF0b3IobWVtbywgdiwgaywgY2IpO1xuICAgICAgICB9LCBmdW5jdGlvbihlcnIpIHtcbiAgICAgICAgICAgIGNhbGxiYWNrKGVyciwgbWVtbyk7XG4gICAgICAgIH0pO1xuICAgIH07XG5cbiAgICBmdW5jdGlvbiBfZmlsdGVyKGVhY2hmbiwgYXJyLCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgdmFyIHJlc3VsdHMgPSBbXTtcbiAgICAgICAgZWFjaGZuKGFyciwgZnVuY3Rpb24gKHgsIGluZGV4LCBjYWxsYmFjaykge1xuICAgICAgICAgICAgaXRlcmF0b3IoeCwgZnVuY3Rpb24gKHYpIHtcbiAgICAgICAgICAgICAgICBpZiAodikge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHRzLnB1c2goe2luZGV4OiBpbmRleCwgdmFsdWU6IHh9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2FsbGJhY2soKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBjYWxsYmFjayhfbWFwKHJlc3VsdHMuc29ydChmdW5jdGlvbiAoYSwgYikge1xuICAgICAgICAgICAgICAgIHJldHVybiBhLmluZGV4IC0gYi5pbmRleDtcbiAgICAgICAgICAgIH0pLCBmdW5jdGlvbiAoeCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB4LnZhbHVlO1xuICAgICAgICAgICAgfSkpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBhc3luYy5zZWxlY3QgPVxuICAgIGFzeW5jLmZpbHRlciA9IGRvUGFyYWxsZWwoX2ZpbHRlcik7XG5cbiAgICBhc3luYy5zZWxlY3RMaW1pdCA9XG4gICAgYXN5bmMuZmlsdGVyTGltaXQgPSBkb1BhcmFsbGVsTGltaXQoX2ZpbHRlcik7XG5cbiAgICBhc3luYy5zZWxlY3RTZXJpZXMgPVxuICAgIGFzeW5jLmZpbHRlclNlcmllcyA9IGRvU2VyaWVzKF9maWx0ZXIpO1xuXG4gICAgZnVuY3Rpb24gX3JlamVjdChlYWNoZm4sIGFyciwgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgIF9maWx0ZXIoZWFjaGZuLCBhcnIsIGZ1bmN0aW9uKHZhbHVlLCBjYikge1xuICAgICAgICAgICAgaXRlcmF0b3IodmFsdWUsIGZ1bmN0aW9uKHYpIHtcbiAgICAgICAgICAgICAgICBjYighdik7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSwgY2FsbGJhY2spO1xuICAgIH1cbiAgICBhc3luYy5yZWplY3QgPSBkb1BhcmFsbGVsKF9yZWplY3QpO1xuICAgIGFzeW5jLnJlamVjdExpbWl0ID0gZG9QYXJhbGxlbExpbWl0KF9yZWplY3QpO1xuICAgIGFzeW5jLnJlamVjdFNlcmllcyA9IGRvU2VyaWVzKF9yZWplY3QpO1xuXG4gICAgZnVuY3Rpb24gX2NyZWF0ZVRlc3RlcihlYWNoZm4sIGNoZWNrLCBnZXRSZXN1bHQpIHtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKGFyciwgbGltaXQsIGl0ZXJhdG9yLCBjYikge1xuICAgICAgICAgICAgZnVuY3Rpb24gZG9uZSgpIHtcbiAgICAgICAgICAgICAgICBpZiAoY2IpIGNiKGdldFJlc3VsdChmYWxzZSwgdm9pZCAwKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmdW5jdGlvbiBpdGVyYXRlZSh4LCBfLCBjYWxsYmFjaykge1xuICAgICAgICAgICAgICAgIGlmICghY2IpIHJldHVybiBjYWxsYmFjaygpO1xuICAgICAgICAgICAgICAgIGl0ZXJhdG9yKHgsIGZ1bmN0aW9uICh2KSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChjYiAmJiBjaGVjayh2KSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY2IoZ2V0UmVzdWx0KHRydWUsIHgpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNiID0gaXRlcmF0b3IgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPiAzKSB7XG4gICAgICAgICAgICAgICAgZWFjaGZuKGFyciwgbGltaXQsIGl0ZXJhdGVlLCBkb25lKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgY2IgPSBpdGVyYXRvcjtcbiAgICAgICAgICAgICAgICBpdGVyYXRvciA9IGxpbWl0O1xuICAgICAgICAgICAgICAgIGVhY2hmbihhcnIsIGl0ZXJhdGVlLCBkb25lKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBhc3luYy5hbnkgPVxuICAgIGFzeW5jLnNvbWUgPSBfY3JlYXRlVGVzdGVyKGFzeW5jLmVhY2hPZiwgdG9Cb29sLCBpZGVudGl0eSk7XG5cbiAgICBhc3luYy5zb21lTGltaXQgPSBfY3JlYXRlVGVzdGVyKGFzeW5jLmVhY2hPZkxpbWl0LCB0b0Jvb2wsIGlkZW50aXR5KTtcblxuICAgIGFzeW5jLmFsbCA9XG4gICAgYXN5bmMuZXZlcnkgPSBfY3JlYXRlVGVzdGVyKGFzeW5jLmVhY2hPZiwgbm90SWQsIG5vdElkKTtcblxuICAgIGFzeW5jLmV2ZXJ5TGltaXQgPSBfY3JlYXRlVGVzdGVyKGFzeW5jLmVhY2hPZkxpbWl0LCBub3RJZCwgbm90SWQpO1xuXG4gICAgZnVuY3Rpb24gX2ZpbmRHZXRSZXN1bHQodiwgeCkge1xuICAgICAgICByZXR1cm4geDtcbiAgICB9XG4gICAgYXN5bmMuZGV0ZWN0ID0gX2NyZWF0ZVRlc3Rlcihhc3luYy5lYWNoT2YsIGlkZW50aXR5LCBfZmluZEdldFJlc3VsdCk7XG4gICAgYXN5bmMuZGV0ZWN0U2VyaWVzID0gX2NyZWF0ZVRlc3Rlcihhc3luYy5lYWNoT2ZTZXJpZXMsIGlkZW50aXR5LCBfZmluZEdldFJlc3VsdCk7XG4gICAgYXN5bmMuZGV0ZWN0TGltaXQgPSBfY3JlYXRlVGVzdGVyKGFzeW5jLmVhY2hPZkxpbWl0LCBpZGVudGl0eSwgX2ZpbmRHZXRSZXN1bHQpO1xuXG4gICAgYXN5bmMuc29ydEJ5ID0gZnVuY3Rpb24gKGFyciwgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgIGFzeW5jLm1hcChhcnIsIGZ1bmN0aW9uICh4LCBjYWxsYmFjaykge1xuICAgICAgICAgICAgaXRlcmF0b3IoeCwgZnVuY3Rpb24gKGVyciwgY3JpdGVyaWEpIHtcbiAgICAgICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhudWxsLCB7dmFsdWU6IHgsIGNyaXRlcmlhOiBjcml0ZXJpYX0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LCBmdW5jdGlvbiAoZXJyLCByZXN1bHRzKSB7XG4gICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBjYWxsYmFjayhudWxsLCBfbWFwKHJlc3VsdHMuc29ydChjb21wYXJhdG9yKSwgZnVuY3Rpb24gKHgpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHgudmFsdWU7XG4gICAgICAgICAgICAgICAgfSkpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGZ1bmN0aW9uIGNvbXBhcmF0b3IobGVmdCwgcmlnaHQpIHtcbiAgICAgICAgICAgIHZhciBhID0gbGVmdC5jcml0ZXJpYSwgYiA9IHJpZ2h0LmNyaXRlcmlhO1xuICAgICAgICAgICAgcmV0dXJuIGEgPCBiID8gLTEgOiBhID4gYiA/IDEgOiAwO1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIGFzeW5jLmF1dG8gPSBmdW5jdGlvbiAodGFza3MsIGNvbmN1cnJlbmN5LCBjYWxsYmFjaykge1xuICAgICAgICBpZiAoIWNhbGxiYWNrKSB7XG4gICAgICAgICAgICAvLyBjb25jdXJyZW5jeSBpcyBvcHRpb25hbCwgc2hpZnQgdGhlIGFyZ3MuXG4gICAgICAgICAgICBjYWxsYmFjayA9IGNvbmN1cnJlbmN5O1xuICAgICAgICAgICAgY29uY3VycmVuY3kgPSBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGNhbGxiYWNrID0gX29uY2UoY2FsbGJhY2sgfHwgbm9vcCk7XG4gICAgICAgIHZhciBrZXlzID0gX2tleXModGFza3MpO1xuICAgICAgICB2YXIgcmVtYWluaW5nVGFza3MgPSBrZXlzLmxlbmd0aDtcbiAgICAgICAgaWYgKCFyZW1haW5pbmdUYXNrcykge1xuICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKG51bGwpO1xuICAgICAgICB9XG4gICAgICAgIGlmICghY29uY3VycmVuY3kpIHtcbiAgICAgICAgICAgIGNvbmN1cnJlbmN5ID0gcmVtYWluaW5nVGFza3M7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgcmVzdWx0cyA9IHt9O1xuICAgICAgICB2YXIgcnVubmluZ1Rhc2tzID0gMDtcblxuICAgICAgICB2YXIgbGlzdGVuZXJzID0gW107XG4gICAgICAgIGZ1bmN0aW9uIGFkZExpc3RlbmVyKGZuKSB7XG4gICAgICAgICAgICBsaXN0ZW5lcnMudW5zaGlmdChmbik7XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gcmVtb3ZlTGlzdGVuZXIoZm4pIHtcbiAgICAgICAgICAgIHZhciBpZHggPSBfaW5kZXhPZihsaXN0ZW5lcnMsIGZuKTtcbiAgICAgICAgICAgIGlmIChpZHggPj0gMCkgbGlzdGVuZXJzLnNwbGljZShpZHgsIDEpO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIHRhc2tDb21wbGV0ZSgpIHtcbiAgICAgICAgICAgIHJlbWFpbmluZ1Rhc2tzLS07XG4gICAgICAgICAgICBfYXJyYXlFYWNoKGxpc3RlbmVycy5zbGljZSgwKSwgZnVuY3Rpb24gKGZuKSB7XG4gICAgICAgICAgICAgICAgZm4oKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgYWRkTGlzdGVuZXIoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgaWYgKCFyZW1haW5pbmdUYXNrcykge1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrKG51bGwsIHJlc3VsdHMpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICBfYXJyYXlFYWNoKGtleXMsIGZ1bmN0aW9uIChrKSB7XG4gICAgICAgICAgICB2YXIgdGFzayA9IF9pc0FycmF5KHRhc2tzW2tdKSA/IHRhc2tzW2tdOiBbdGFza3Nba11dO1xuICAgICAgICAgICAgdmFyIHRhc2tDYWxsYmFjayA9IF9yZXN0UGFyYW0oZnVuY3Rpb24oZXJyLCBhcmdzKSB7XG4gICAgICAgICAgICAgICAgcnVubmluZ1Rhc2tzLS07XG4gICAgICAgICAgICAgICAgaWYgKGFyZ3MubGVuZ3RoIDw9IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgYXJncyA9IGFyZ3NbMF07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHNhZmVSZXN1bHRzID0ge307XG4gICAgICAgICAgICAgICAgICAgIF9mb3JFYWNoT2YocmVzdWx0cywgZnVuY3Rpb24odmFsLCBya2V5KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzYWZlUmVzdWx0c1tya2V5XSA9IHZhbDtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIHNhZmVSZXN1bHRzW2tdID0gYXJncztcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soZXJyLCBzYWZlUmVzdWx0cyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHRzW2tdID0gYXJncztcbiAgICAgICAgICAgICAgICAgICAgYXN5bmMuc2V0SW1tZWRpYXRlKHRhc2tDb21wbGV0ZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB2YXIgcmVxdWlyZXMgPSB0YXNrLnNsaWNlKDAsIHRhc2subGVuZ3RoIC0gMSk7XG4gICAgICAgICAgICAvLyBwcmV2ZW50IGRlYWQtbG9ja3NcbiAgICAgICAgICAgIHZhciBsZW4gPSByZXF1aXJlcy5sZW5ndGg7XG4gICAgICAgICAgICB2YXIgZGVwO1xuICAgICAgICAgICAgd2hpbGUgKGxlbi0tKSB7XG4gICAgICAgICAgICAgICAgaWYgKCEoZGVwID0gdGFza3NbcmVxdWlyZXNbbGVuXV0pKSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignSGFzIGluZXhpc3RhbnQgZGVwZW5kZW5jeScpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoX2lzQXJyYXkoZGVwKSAmJiBfaW5kZXhPZihkZXAsIGspID49IDApIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdIYXMgY3ljbGljIGRlcGVuZGVuY2llcycpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZ1bmN0aW9uIHJlYWR5KCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBydW5uaW5nVGFza3MgPCBjb25jdXJyZW5jeSAmJiBfcmVkdWNlKHJlcXVpcmVzLCBmdW5jdGlvbiAoYSwgeCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gKGEgJiYgcmVzdWx0cy5oYXNPd25Qcm9wZXJ0eSh4KSk7XG4gICAgICAgICAgICAgICAgfSwgdHJ1ZSkgJiYgIXJlc3VsdHMuaGFzT3duUHJvcGVydHkoayk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAocmVhZHkoKSkge1xuICAgICAgICAgICAgICAgIHJ1bm5pbmdUYXNrcysrO1xuICAgICAgICAgICAgICAgIHRhc2tbdGFzay5sZW5ndGggLSAxXSh0YXNrQ2FsbGJhY2ssIHJlc3VsdHMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgYWRkTGlzdGVuZXIobGlzdGVuZXIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZnVuY3Rpb24gbGlzdGVuZXIoKSB7XG4gICAgICAgICAgICAgICAgaWYgKHJlYWR5KCkpIHtcbiAgICAgICAgICAgICAgICAgICAgcnVubmluZ1Rhc2tzKys7XG4gICAgICAgICAgICAgICAgICAgIHJlbW92ZUxpc3RlbmVyKGxpc3RlbmVyKTtcbiAgICAgICAgICAgICAgICAgICAgdGFza1t0YXNrLmxlbmd0aCAtIDFdKHRhc2tDYWxsYmFjaywgcmVzdWx0cyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9O1xuXG5cblxuICAgIGFzeW5jLnJldHJ5ID0gZnVuY3Rpb24odGltZXMsIHRhc2ssIGNhbGxiYWNrKSB7XG4gICAgICAgIHZhciBERUZBVUxUX1RJTUVTID0gNTtcbiAgICAgICAgdmFyIERFRkFVTFRfSU5URVJWQUwgPSAwO1xuXG4gICAgICAgIHZhciBhdHRlbXB0cyA9IFtdO1xuXG4gICAgICAgIHZhciBvcHRzID0ge1xuICAgICAgICAgICAgdGltZXM6IERFRkFVTFRfVElNRVMsXG4gICAgICAgICAgICBpbnRlcnZhbDogREVGQVVMVF9JTlRFUlZBTFxuICAgICAgICB9O1xuXG4gICAgICAgIGZ1bmN0aW9uIHBhcnNlVGltZXMoYWNjLCB0KXtcbiAgICAgICAgICAgIGlmKHR5cGVvZiB0ID09PSAnbnVtYmVyJyl7XG4gICAgICAgICAgICAgICAgYWNjLnRpbWVzID0gcGFyc2VJbnQodCwgMTApIHx8IERFRkFVTFRfVElNRVM7XG4gICAgICAgICAgICB9IGVsc2UgaWYodHlwZW9mIHQgPT09ICdvYmplY3QnKXtcbiAgICAgICAgICAgICAgICBhY2MudGltZXMgPSBwYXJzZUludCh0LnRpbWVzLCAxMCkgfHwgREVGQVVMVF9USU1FUztcbiAgICAgICAgICAgICAgICBhY2MuaW50ZXJ2YWwgPSBwYXJzZUludCh0LmludGVydmFsLCAxMCkgfHwgREVGQVVMVF9JTlRFUlZBTDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdVbnN1cHBvcnRlZCBhcmd1bWVudCB0eXBlIGZvciBcXCd0aW1lc1xcJzogJyArIHR5cGVvZiB0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBsZW5ndGggPSBhcmd1bWVudHMubGVuZ3RoO1xuICAgICAgICBpZiAobGVuZ3RoIDwgMSB8fCBsZW5ndGggPiAzKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgYXJndW1lbnRzIC0gbXVzdCBiZSBlaXRoZXIgKHRhc2spLCAodGFzaywgY2FsbGJhY2spLCAodGltZXMsIHRhc2spIG9yICh0aW1lcywgdGFzaywgY2FsbGJhY2spJyk7XG4gICAgICAgIH0gZWxzZSBpZiAobGVuZ3RoIDw9IDIgJiYgdHlwZW9mIHRpbWVzID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICBjYWxsYmFjayA9IHRhc2s7XG4gICAgICAgICAgICB0YXNrID0gdGltZXM7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHR5cGVvZiB0aW1lcyAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgcGFyc2VUaW1lcyhvcHRzLCB0aW1lcyk7XG4gICAgICAgIH1cbiAgICAgICAgb3B0cy5jYWxsYmFjayA9IGNhbGxiYWNrO1xuICAgICAgICBvcHRzLnRhc2sgPSB0YXNrO1xuXG4gICAgICAgIGZ1bmN0aW9uIHdyYXBwZWRUYXNrKHdyYXBwZWRDYWxsYmFjaywgd3JhcHBlZFJlc3VsdHMpIHtcbiAgICAgICAgICAgIGZ1bmN0aW9uIHJldHJ5QXR0ZW1wdCh0YXNrLCBmaW5hbEF0dGVtcHQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24oc2VyaWVzQ2FsbGJhY2spIHtcbiAgICAgICAgICAgICAgICAgICAgdGFzayhmdW5jdGlvbihlcnIsIHJlc3VsdCl7XG4gICAgICAgICAgICAgICAgICAgICAgICBzZXJpZXNDYWxsYmFjayghZXJyIHx8IGZpbmFsQXR0ZW1wdCwge2VycjogZXJyLCByZXN1bHQ6IHJlc3VsdH0pO1xuICAgICAgICAgICAgICAgICAgICB9LCB3cmFwcGVkUmVzdWx0cyk7XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZnVuY3Rpb24gcmV0cnlJbnRlcnZhbChpbnRlcnZhbCl7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKHNlcmllc0NhbGxiYWNrKXtcbiAgICAgICAgICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpe1xuICAgICAgICAgICAgICAgICAgICAgICAgc2VyaWVzQ2FsbGJhY2sobnVsbCk7XG4gICAgICAgICAgICAgICAgICAgIH0sIGludGVydmFsKTtcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB3aGlsZSAob3B0cy50aW1lcykge1xuXG4gICAgICAgICAgICAgICAgdmFyIGZpbmFsQXR0ZW1wdCA9ICEob3B0cy50aW1lcy09MSk7XG4gICAgICAgICAgICAgICAgYXR0ZW1wdHMucHVzaChyZXRyeUF0dGVtcHQob3B0cy50YXNrLCBmaW5hbEF0dGVtcHQpKTtcbiAgICAgICAgICAgICAgICBpZighZmluYWxBdHRlbXB0ICYmIG9wdHMuaW50ZXJ2YWwgPiAwKXtcbiAgICAgICAgICAgICAgICAgICAgYXR0ZW1wdHMucHVzaChyZXRyeUludGVydmFsKG9wdHMuaW50ZXJ2YWwpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGFzeW5jLnNlcmllcyhhdHRlbXB0cywgZnVuY3Rpb24oZG9uZSwgZGF0YSl7XG4gICAgICAgICAgICAgICAgZGF0YSA9IGRhdGFbZGF0YS5sZW5ndGggLSAxXTtcbiAgICAgICAgICAgICAgICAod3JhcHBlZENhbGxiYWNrIHx8IG9wdHMuY2FsbGJhY2spKGRhdGEuZXJyLCBkYXRhLnJlc3VsdCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIElmIGEgY2FsbGJhY2sgaXMgcGFzc2VkLCBydW4gdGhpcyBhcyBhIGNvbnRyb2xsIGZsb3dcbiAgICAgICAgcmV0dXJuIG9wdHMuY2FsbGJhY2sgPyB3cmFwcGVkVGFzaygpIDogd3JhcHBlZFRhc2s7XG4gICAgfTtcblxuICAgIGFzeW5jLndhdGVyZmFsbCA9IGZ1bmN0aW9uICh0YXNrcywgY2FsbGJhY2spIHtcbiAgICAgICAgY2FsbGJhY2sgPSBfb25jZShjYWxsYmFjayB8fCBub29wKTtcbiAgICAgICAgaWYgKCFfaXNBcnJheSh0YXNrcykpIHtcbiAgICAgICAgICAgIHZhciBlcnIgPSBuZXcgRXJyb3IoJ0ZpcnN0IGFyZ3VtZW50IHRvIHdhdGVyZmFsbCBtdXN0IGJlIGFuIGFycmF5IG9mIGZ1bmN0aW9ucycpO1xuICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKGVycik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCF0YXNrcy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHJldHVybiBjYWxsYmFjaygpO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIHdyYXBJdGVyYXRvcihpdGVyYXRvcikge1xuICAgICAgICAgICAgcmV0dXJuIF9yZXN0UGFyYW0oZnVuY3Rpb24gKGVyciwgYXJncykge1xuICAgICAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2suYXBwbHkobnVsbCwgW2Vycl0uY29uY2F0KGFyZ3MpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBuZXh0ID0gaXRlcmF0b3IubmV4dCgpO1xuICAgICAgICAgICAgICAgICAgICBpZiAobmV4dCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgYXJncy5wdXNoKHdyYXBJdGVyYXRvcihuZXh0KSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhcmdzLnB1c2goY2FsbGJhY2spO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVuc3VyZUFzeW5jKGl0ZXJhdG9yKS5hcHBseShudWxsLCBhcmdzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICB3cmFwSXRlcmF0b3IoYXN5bmMuaXRlcmF0b3IodGFza3MpKSgpO1xuICAgIH07XG5cbiAgICBmdW5jdGlvbiBfcGFyYWxsZWwoZWFjaGZuLCB0YXNrcywgY2FsbGJhY2spIHtcbiAgICAgICAgY2FsbGJhY2sgPSBjYWxsYmFjayB8fCBub29wO1xuICAgICAgICB2YXIgcmVzdWx0cyA9IF9pc0FycmF5TGlrZSh0YXNrcykgPyBbXSA6IHt9O1xuXG4gICAgICAgIGVhY2hmbih0YXNrcywgZnVuY3Rpb24gKHRhc2ssIGtleSwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIHRhc2soX3Jlc3RQYXJhbShmdW5jdGlvbiAoZXJyLCBhcmdzKSB7XG4gICAgICAgICAgICAgICAgaWYgKGFyZ3MubGVuZ3RoIDw9IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgYXJncyA9IGFyZ3NbMF07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJlc3VsdHNba2V5XSA9IGFyZ3M7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgfSwgZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgY2FsbGJhY2soZXJyLCByZXN1bHRzKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgYXN5bmMucGFyYWxsZWwgPSBmdW5jdGlvbiAodGFza3MsIGNhbGxiYWNrKSB7XG4gICAgICAgIF9wYXJhbGxlbChhc3luYy5lYWNoT2YsIHRhc2tzLCBjYWxsYmFjayk7XG4gICAgfTtcblxuICAgIGFzeW5jLnBhcmFsbGVsTGltaXQgPSBmdW5jdGlvbih0YXNrcywgbGltaXQsIGNhbGxiYWNrKSB7XG4gICAgICAgIF9wYXJhbGxlbChfZWFjaE9mTGltaXQobGltaXQpLCB0YXNrcywgY2FsbGJhY2spO1xuICAgIH07XG5cbiAgICBhc3luYy5zZXJpZXMgPSBmdW5jdGlvbih0YXNrcywgY2FsbGJhY2spIHtcbiAgICAgICAgX3BhcmFsbGVsKGFzeW5jLmVhY2hPZlNlcmllcywgdGFza3MsIGNhbGxiYWNrKTtcbiAgICB9O1xuXG4gICAgYXN5bmMuaXRlcmF0b3IgPSBmdW5jdGlvbiAodGFza3MpIHtcbiAgICAgICAgZnVuY3Rpb24gbWFrZUNhbGxiYWNrKGluZGV4KSB7XG4gICAgICAgICAgICBmdW5jdGlvbiBmbigpIHtcbiAgICAgICAgICAgICAgICBpZiAodGFza3MubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgIHRhc2tzW2luZGV4XS5hcHBseShudWxsLCBhcmd1bWVudHMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gZm4ubmV4dCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZm4ubmV4dCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gKGluZGV4IDwgdGFza3MubGVuZ3RoIC0gMSkgPyBtYWtlQ2FsbGJhY2soaW5kZXggKyAxKTogbnVsbDtcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICByZXR1cm4gZm47XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG1ha2VDYWxsYmFjaygwKTtcbiAgICB9O1xuXG4gICAgYXN5bmMuYXBwbHkgPSBfcmVzdFBhcmFtKGZ1bmN0aW9uIChmbiwgYXJncykge1xuICAgICAgICByZXR1cm4gX3Jlc3RQYXJhbShmdW5jdGlvbiAoY2FsbEFyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybiBmbi5hcHBseShcbiAgICAgICAgICAgICAgICBudWxsLCBhcmdzLmNvbmNhdChjYWxsQXJncylcbiAgICAgICAgICAgICk7XG4gICAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgZnVuY3Rpb24gX2NvbmNhdChlYWNoZm4sIGFyciwgZm4sIGNhbGxiYWNrKSB7XG4gICAgICAgIHZhciByZXN1bHQgPSBbXTtcbiAgICAgICAgZWFjaGZuKGFyciwgZnVuY3Rpb24gKHgsIGluZGV4LCBjYikge1xuICAgICAgICAgICAgZm4oeCwgZnVuY3Rpb24gKGVyciwgeSkge1xuICAgICAgICAgICAgICAgIHJlc3VsdCA9IHJlc3VsdC5jb25jYXQoeSB8fCBbXSk7XG4gICAgICAgICAgICAgICAgY2IoZXJyKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICBjYWxsYmFjayhlcnIsIHJlc3VsdCk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBhc3luYy5jb25jYXQgPSBkb1BhcmFsbGVsKF9jb25jYXQpO1xuICAgIGFzeW5jLmNvbmNhdFNlcmllcyA9IGRvU2VyaWVzKF9jb25jYXQpO1xuXG4gICAgYXN5bmMud2hpbHN0ID0gZnVuY3Rpb24gKHRlc3QsIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICBjYWxsYmFjayA9IGNhbGxiYWNrIHx8IG5vb3A7XG4gICAgICAgIGlmICh0ZXN0KCkpIHtcbiAgICAgICAgICAgIHZhciBuZXh0ID0gX3Jlc3RQYXJhbShmdW5jdGlvbihlcnIsIGFyZ3MpIHtcbiAgICAgICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0ZXN0LmFwcGx5KHRoaXMsIGFyZ3MpKSB7XG4gICAgICAgICAgICAgICAgICAgIGl0ZXJhdG9yKG5leHQpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKG51bGwpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgaXRlcmF0b3IobmV4dCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjYWxsYmFjayhudWxsKTtcbiAgICAgICAgfVxuICAgIH07XG5cbiAgICBhc3luYy5kb1doaWxzdCA9IGZ1bmN0aW9uIChpdGVyYXRvciwgdGVzdCwgY2FsbGJhY2spIHtcbiAgICAgICAgdmFyIGNhbGxzID0gMDtcbiAgICAgICAgcmV0dXJuIGFzeW5jLndoaWxzdChmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIHJldHVybiArK2NhbGxzIDw9IDEgfHwgdGVzdC5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgICAgICB9LCBpdGVyYXRvciwgY2FsbGJhY2spO1xuICAgIH07XG5cbiAgICBhc3luYy51bnRpbCA9IGZ1bmN0aW9uICh0ZXN0LCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgcmV0dXJuIGFzeW5jLndoaWxzdChmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIHJldHVybiAhdGVzdC5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgICAgICB9LCBpdGVyYXRvciwgY2FsbGJhY2spO1xuICAgIH07XG5cbiAgICBhc3luYy5kb1VudGlsID0gZnVuY3Rpb24gKGl0ZXJhdG9yLCB0ZXN0LCBjYWxsYmFjaykge1xuICAgICAgICByZXR1cm4gYXN5bmMuZG9XaGlsc3QoaXRlcmF0b3IsIGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgcmV0dXJuICF0ZXN0LmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgICAgIH0sIGNhbGxiYWNrKTtcbiAgICB9O1xuXG4gICAgYXN5bmMuZHVyaW5nID0gZnVuY3Rpb24gKHRlc3QsIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICBjYWxsYmFjayA9IGNhbGxiYWNrIHx8IG5vb3A7XG5cbiAgICAgICAgdmFyIG5leHQgPSBfcmVzdFBhcmFtKGZ1bmN0aW9uKGVyciwgYXJncykge1xuICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGFyZ3MucHVzaChjaGVjayk7XG4gICAgICAgICAgICAgICAgdGVzdC5hcHBseSh0aGlzLCBhcmdzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgdmFyIGNoZWNrID0gZnVuY3Rpb24oZXJyLCB0cnV0aCkge1xuICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHRydXRoKSB7XG4gICAgICAgICAgICAgICAgaXRlcmF0b3IobmV4dCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrKG51bGwpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuXG4gICAgICAgIHRlc3QoY2hlY2spO1xuICAgIH07XG5cbiAgICBhc3luYy5kb0R1cmluZyA9IGZ1bmN0aW9uIChpdGVyYXRvciwgdGVzdCwgY2FsbGJhY2spIHtcbiAgICAgICAgdmFyIGNhbGxzID0gMDtcbiAgICAgICAgYXN5bmMuZHVyaW5nKGZ1bmN0aW9uKG5leHQpIHtcbiAgICAgICAgICAgIGlmIChjYWxscysrIDwgMSkge1xuICAgICAgICAgICAgICAgIG5leHQobnVsbCwgdHJ1ZSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRlc3QuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSwgaXRlcmF0b3IsIGNhbGxiYWNrKTtcbiAgICB9O1xuXG4gICAgZnVuY3Rpb24gX3F1ZXVlKHdvcmtlciwgY29uY3VycmVuY3ksIHBheWxvYWQpIHtcbiAgICAgICAgaWYgKGNvbmN1cnJlbmN5ID09IG51bGwpIHtcbiAgICAgICAgICAgIGNvbmN1cnJlbmN5ID0gMTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmKGNvbmN1cnJlbmN5ID09PSAwKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0NvbmN1cnJlbmN5IG11c3Qgbm90IGJlIHplcm8nKTtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBfaW5zZXJ0KHEsIGRhdGEsIHBvcywgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIGlmIChjYWxsYmFjayAhPSBudWxsICYmIHR5cGVvZiBjYWxsYmFjayAhPT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwidGFzayBjYWxsYmFjayBtdXN0IGJlIGEgZnVuY3Rpb25cIik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBxLnN0YXJ0ZWQgPSB0cnVlO1xuICAgICAgICAgICAgaWYgKCFfaXNBcnJheShkYXRhKSkge1xuICAgICAgICAgICAgICAgIGRhdGEgPSBbZGF0YV07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZihkYXRhLmxlbmd0aCA9PT0gMCAmJiBxLmlkbGUoKSkge1xuICAgICAgICAgICAgICAgIC8vIGNhbGwgZHJhaW4gaW1tZWRpYXRlbHkgaWYgdGhlcmUgYXJlIG5vIHRhc2tzXG4gICAgICAgICAgICAgICAgcmV0dXJuIGFzeW5jLnNldEltbWVkaWF0ZShmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgICAgcS5kcmFpbigpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgX2FycmF5RWFjaChkYXRhLCBmdW5jdGlvbih0YXNrKSB7XG4gICAgICAgICAgICAgICAgdmFyIGl0ZW0gPSB7XG4gICAgICAgICAgICAgICAgICAgIGRhdGE6IHRhc2ssXG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrOiBjYWxsYmFjayB8fCBub29wXG4gICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgIGlmIChwb3MpIHtcbiAgICAgICAgICAgICAgICAgICAgcS50YXNrcy51bnNoaWZ0KGl0ZW0pO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHEudGFza3MucHVzaChpdGVtKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAocS50YXNrcy5sZW5ndGggPT09IHEuY29uY3VycmVuY3kpIHtcbiAgICAgICAgICAgICAgICAgICAgcS5zYXR1cmF0ZWQoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGFzeW5jLnNldEltbWVkaWF0ZShxLnByb2Nlc3MpO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIF9uZXh0KHEsIHRhc2tzKSB7XG4gICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24oKXtcbiAgICAgICAgICAgICAgICB3b3JrZXJzIC09IDE7XG5cbiAgICAgICAgICAgICAgICB2YXIgcmVtb3ZlZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHZhciBhcmdzID0gYXJndW1lbnRzO1xuICAgICAgICAgICAgICAgIF9hcnJheUVhY2godGFza3MsIGZ1bmN0aW9uICh0YXNrKSB7XG4gICAgICAgICAgICAgICAgICAgIF9hcnJheUVhY2god29ya2Vyc0xpc3QsIGZ1bmN0aW9uICh3b3JrZXIsIGluZGV4KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAod29ya2VyID09PSB0YXNrICYmICFyZW1vdmVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd29ya2Vyc0xpc3Quc3BsaWNlKGluZGV4LCAxKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZW1vdmVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICAgICAgdGFzay5jYWxsYmFjay5hcHBseSh0YXNrLCBhcmdzKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBpZiAocS50YXNrcy5sZW5ndGggKyB3b3JrZXJzID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIHEuZHJhaW4oKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcS5wcm9jZXNzKCk7XG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIHdvcmtlcnMgPSAwO1xuICAgICAgICB2YXIgd29ya2Vyc0xpc3QgPSBbXTtcbiAgICAgICAgdmFyIHEgPSB7XG4gICAgICAgICAgICB0YXNrczogW10sXG4gICAgICAgICAgICBjb25jdXJyZW5jeTogY29uY3VycmVuY3ksXG4gICAgICAgICAgICBwYXlsb2FkOiBwYXlsb2FkLFxuICAgICAgICAgICAgc2F0dXJhdGVkOiBub29wLFxuICAgICAgICAgICAgZW1wdHk6IG5vb3AsXG4gICAgICAgICAgICBkcmFpbjogbm9vcCxcbiAgICAgICAgICAgIHN0YXJ0ZWQ6IGZhbHNlLFxuICAgICAgICAgICAgcGF1c2VkOiBmYWxzZSxcbiAgICAgICAgICAgIHB1c2g6IGZ1bmN0aW9uIChkYXRhLCBjYWxsYmFjaykge1xuICAgICAgICAgICAgICAgIF9pbnNlcnQocSwgZGF0YSwgZmFsc2UsIGNhbGxiYWNrKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBraWxsOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgcS5kcmFpbiA9IG5vb3A7XG4gICAgICAgICAgICAgICAgcS50YXNrcyA9IFtdO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHVuc2hpZnQ6IGZ1bmN0aW9uIChkYXRhLCBjYWxsYmFjaykge1xuICAgICAgICAgICAgICAgIF9pbnNlcnQocSwgZGF0YSwgdHJ1ZSwgY2FsbGJhY2spO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHByb2Nlc3M6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBpZiAoIXEucGF1c2VkICYmIHdvcmtlcnMgPCBxLmNvbmN1cnJlbmN5ICYmIHEudGFza3MubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgIHdoaWxlKHdvcmtlcnMgPCBxLmNvbmN1cnJlbmN5ICYmIHEudGFza3MubGVuZ3RoKXtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0YXNrcyA9IHEucGF5bG9hZCA/XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcS50YXNrcy5zcGxpY2UoMCwgcS5wYXlsb2FkKSA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcS50YXNrcy5zcGxpY2UoMCwgcS50YXNrcy5sZW5ndGgpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgZGF0YSA9IF9tYXAodGFza3MsIGZ1bmN0aW9uICh0YXNrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRhc2suZGF0YTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocS50YXNrcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBxLmVtcHR5KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB3b3JrZXJzICs9IDE7XG4gICAgICAgICAgICAgICAgICAgICAgICB3b3JrZXJzTGlzdC5wdXNoKHRhc2tzWzBdKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjYiA9IG9ubHlfb25jZShfbmV4dChxLCB0YXNrcykpO1xuICAgICAgICAgICAgICAgICAgICAgICAgd29ya2VyKGRhdGEsIGNiKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBsZW5ndGg6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcS50YXNrcy5sZW5ndGg7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcnVubmluZzogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB3b3JrZXJzO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHdvcmtlcnNMaXN0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHdvcmtlcnNMaXN0O1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGlkbGU6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBxLnRhc2tzLmxlbmd0aCArIHdvcmtlcnMgPT09IDA7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcGF1c2U6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBxLnBhdXNlZCA9IHRydWU7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcmVzdW1lOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgaWYgKHEucGF1c2VkID09PSBmYWxzZSkgeyByZXR1cm47IH1cbiAgICAgICAgICAgICAgICBxLnBhdXNlZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHZhciByZXN1bWVDb3VudCA9IE1hdGgubWluKHEuY29uY3VycmVuY3ksIHEudGFza3MubGVuZ3RoKTtcbiAgICAgICAgICAgICAgICAvLyBOZWVkIHRvIGNhbGwgcS5wcm9jZXNzIG9uY2UgcGVyIGNvbmN1cnJlbnRcbiAgICAgICAgICAgICAgICAvLyB3b3JrZXIgdG8gcHJlc2VydmUgZnVsbCBjb25jdXJyZW5jeSBhZnRlciBwYXVzZVxuICAgICAgICAgICAgICAgIGZvciAodmFyIHcgPSAxOyB3IDw9IHJlc3VtZUNvdW50OyB3KyspIHtcbiAgICAgICAgICAgICAgICAgICAgYXN5bmMuc2V0SW1tZWRpYXRlKHEucHJvY2Vzcyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gcTtcbiAgICB9XG5cbiAgICBhc3luYy5xdWV1ZSA9IGZ1bmN0aW9uICh3b3JrZXIsIGNvbmN1cnJlbmN5KSB7XG4gICAgICAgIHZhciBxID0gX3F1ZXVlKGZ1bmN0aW9uIChpdGVtcywgY2IpIHtcbiAgICAgICAgICAgIHdvcmtlcihpdGVtc1swXSwgY2IpO1xuICAgICAgICB9LCBjb25jdXJyZW5jeSwgMSk7XG5cbiAgICAgICAgcmV0dXJuIHE7XG4gICAgfTtcblxuICAgIGFzeW5jLnByaW9yaXR5UXVldWUgPSBmdW5jdGlvbiAod29ya2VyLCBjb25jdXJyZW5jeSkge1xuXG4gICAgICAgIGZ1bmN0aW9uIF9jb21wYXJlVGFza3MoYSwgYil7XG4gICAgICAgICAgICByZXR1cm4gYS5wcmlvcml0eSAtIGIucHJpb3JpdHk7XG4gICAgICAgIH1cblxuICAgICAgICBmdW5jdGlvbiBfYmluYXJ5U2VhcmNoKHNlcXVlbmNlLCBpdGVtLCBjb21wYXJlKSB7XG4gICAgICAgICAgICB2YXIgYmVnID0gLTEsXG4gICAgICAgICAgICAgICAgZW5kID0gc2VxdWVuY2UubGVuZ3RoIC0gMTtcbiAgICAgICAgICAgIHdoaWxlIChiZWcgPCBlbmQpIHtcbiAgICAgICAgICAgICAgICB2YXIgbWlkID0gYmVnICsgKChlbmQgLSBiZWcgKyAxKSA+Pj4gMSk7XG4gICAgICAgICAgICAgICAgaWYgKGNvbXBhcmUoaXRlbSwgc2VxdWVuY2VbbWlkXSkgPj0gMCkge1xuICAgICAgICAgICAgICAgICAgICBiZWcgPSBtaWQ7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgZW5kID0gbWlkIC0gMTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gYmVnO1xuICAgICAgICB9XG5cbiAgICAgICAgZnVuY3Rpb24gX2luc2VydChxLCBkYXRhLCBwcmlvcml0eSwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIGlmIChjYWxsYmFjayAhPSBudWxsICYmIHR5cGVvZiBjYWxsYmFjayAhPT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwidGFzayBjYWxsYmFjayBtdXN0IGJlIGEgZnVuY3Rpb25cIik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBxLnN0YXJ0ZWQgPSB0cnVlO1xuICAgICAgICAgICAgaWYgKCFfaXNBcnJheShkYXRhKSkge1xuICAgICAgICAgICAgICAgIGRhdGEgPSBbZGF0YV07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZihkYXRhLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICAgIC8vIGNhbGwgZHJhaW4gaW1tZWRpYXRlbHkgaWYgdGhlcmUgYXJlIG5vIHRhc2tzXG4gICAgICAgICAgICAgICAgcmV0dXJuIGFzeW5jLnNldEltbWVkaWF0ZShmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgICAgcS5kcmFpbigpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgX2FycmF5RWFjaChkYXRhLCBmdW5jdGlvbih0YXNrKSB7XG4gICAgICAgICAgICAgICAgdmFyIGl0ZW0gPSB7XG4gICAgICAgICAgICAgICAgICAgIGRhdGE6IHRhc2ssXG4gICAgICAgICAgICAgICAgICAgIHByaW9yaXR5OiBwcmlvcml0eSxcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2s6IHR5cGVvZiBjYWxsYmFjayA9PT0gJ2Z1bmN0aW9uJyA/IGNhbGxiYWNrIDogbm9vcFxuICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICBxLnRhc2tzLnNwbGljZShfYmluYXJ5U2VhcmNoKHEudGFza3MsIGl0ZW0sIF9jb21wYXJlVGFza3MpICsgMSwgMCwgaXRlbSk7XG5cbiAgICAgICAgICAgICAgICBpZiAocS50YXNrcy5sZW5ndGggPT09IHEuY29uY3VycmVuY3kpIHtcbiAgICAgICAgICAgICAgICAgICAgcS5zYXR1cmF0ZWQoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYXN5bmMuc2V0SW1tZWRpYXRlKHEucHJvY2Vzcyk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFN0YXJ0IHdpdGggYSBub3JtYWwgcXVldWVcbiAgICAgICAgdmFyIHEgPSBhc3luYy5xdWV1ZSh3b3JrZXIsIGNvbmN1cnJlbmN5KTtcblxuICAgICAgICAvLyBPdmVycmlkZSBwdXNoIHRvIGFjY2VwdCBzZWNvbmQgcGFyYW1ldGVyIHJlcHJlc2VudGluZyBwcmlvcml0eVxuICAgICAgICBxLnB1c2ggPSBmdW5jdGlvbiAoZGF0YSwgcHJpb3JpdHksIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICBfaW5zZXJ0KHEsIGRhdGEsIHByaW9yaXR5LCBjYWxsYmFjayk7XG4gICAgICAgIH07XG5cbiAgICAgICAgLy8gUmVtb3ZlIHVuc2hpZnQgZnVuY3Rpb25cbiAgICAgICAgZGVsZXRlIHEudW5zaGlmdDtcblxuICAgICAgICByZXR1cm4gcTtcbiAgICB9O1xuXG4gICAgYXN5bmMuY2FyZ28gPSBmdW5jdGlvbiAod29ya2VyLCBwYXlsb2FkKSB7XG4gICAgICAgIHJldHVybiBfcXVldWUod29ya2VyLCAxLCBwYXlsb2FkKTtcbiAgICB9O1xuXG4gICAgZnVuY3Rpb24gX2NvbnNvbGVfZm4obmFtZSkge1xuICAgICAgICByZXR1cm4gX3Jlc3RQYXJhbShmdW5jdGlvbiAoZm4sIGFyZ3MpIHtcbiAgICAgICAgICAgIGZuLmFwcGx5KG51bGwsIGFyZ3MuY29uY2F0KFtfcmVzdFBhcmFtKGZ1bmN0aW9uIChlcnIsIGFyZ3MpIHtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGNvbnNvbGUgPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb25zb2xlLmVycm9yKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihlcnIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKGNvbnNvbGVbbmFtZV0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIF9hcnJheUVhY2goYXJncywgZnVuY3Rpb24gKHgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlW25hbWVdKHgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KV0pKTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGFzeW5jLmxvZyA9IF9jb25zb2xlX2ZuKCdsb2cnKTtcbiAgICBhc3luYy5kaXIgPSBfY29uc29sZV9mbignZGlyJyk7XG4gICAgLyphc3luYy5pbmZvID0gX2NvbnNvbGVfZm4oJ2luZm8nKTtcbiAgICBhc3luYy53YXJuID0gX2NvbnNvbGVfZm4oJ3dhcm4nKTtcbiAgICBhc3luYy5lcnJvciA9IF9jb25zb2xlX2ZuKCdlcnJvcicpOyovXG5cbiAgICBhc3luYy5tZW1vaXplID0gZnVuY3Rpb24gKGZuLCBoYXNoZXIpIHtcbiAgICAgICAgdmFyIG1lbW8gPSB7fTtcbiAgICAgICAgdmFyIHF1ZXVlcyA9IHt9O1xuICAgICAgICBoYXNoZXIgPSBoYXNoZXIgfHwgaWRlbnRpdHk7XG4gICAgICAgIHZhciBtZW1vaXplZCA9IF9yZXN0UGFyYW0oZnVuY3Rpb24gbWVtb2l6ZWQoYXJncykge1xuICAgICAgICAgICAgdmFyIGNhbGxiYWNrID0gYXJncy5wb3AoKTtcbiAgICAgICAgICAgIHZhciBrZXkgPSBoYXNoZXIuYXBwbHkobnVsbCwgYXJncyk7XG4gICAgICAgICAgICBpZiAoa2V5IGluIG1lbW8pIHtcbiAgICAgICAgICAgICAgICBhc3luYy5zZXRJbW1lZGlhdGUoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjay5hcHBseShudWxsLCBtZW1vW2tleV0pO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoa2V5IGluIHF1ZXVlcykge1xuICAgICAgICAgICAgICAgIHF1ZXVlc1trZXldLnB1c2goY2FsbGJhY2spO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgcXVldWVzW2tleV0gPSBbY2FsbGJhY2tdO1xuICAgICAgICAgICAgICAgIGZuLmFwcGx5KG51bGwsIGFyZ3MuY29uY2F0KFtfcmVzdFBhcmFtKGZ1bmN0aW9uIChhcmdzKSB7XG4gICAgICAgICAgICAgICAgICAgIG1lbW9ba2V5XSA9IGFyZ3M7XG4gICAgICAgICAgICAgICAgICAgIHZhciBxID0gcXVldWVzW2tleV07XG4gICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBxdWV1ZXNba2V5XTtcbiAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDAsIGwgPSBxLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgcVtpXS5hcHBseShudWxsLCBhcmdzKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pXSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgbWVtb2l6ZWQubWVtbyA9IG1lbW87XG4gICAgICAgIG1lbW9pemVkLnVubWVtb2l6ZWQgPSBmbjtcbiAgICAgICAgcmV0dXJuIG1lbW9pemVkO1xuICAgIH07XG5cbiAgICBhc3luYy51bm1lbW9pemUgPSBmdW5jdGlvbiAoZm4pIHtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiAoZm4udW5tZW1vaXplZCB8fCBmbikuYXBwbHkobnVsbCwgYXJndW1lbnRzKTtcbiAgICAgICAgfTtcbiAgICB9O1xuXG4gICAgZnVuY3Rpb24gX3RpbWVzKG1hcHBlcikge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKGNvdW50LCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIG1hcHBlcihfcmFuZ2UoY291bnQpLCBpdGVyYXRvciwgY2FsbGJhY2spO1xuICAgICAgICB9O1xuICAgIH1cblxuICAgIGFzeW5jLnRpbWVzID0gX3RpbWVzKGFzeW5jLm1hcCk7XG4gICAgYXN5bmMudGltZXNTZXJpZXMgPSBfdGltZXMoYXN5bmMubWFwU2VyaWVzKTtcbiAgICBhc3luYy50aW1lc0xpbWl0ID0gZnVuY3Rpb24gKGNvdW50LCBsaW1pdCwgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgIHJldHVybiBhc3luYy5tYXBMaW1pdChfcmFuZ2UoY291bnQpLCBsaW1pdCwgaXRlcmF0b3IsIGNhbGxiYWNrKTtcbiAgICB9O1xuXG4gICAgYXN5bmMuc2VxID0gZnVuY3Rpb24gKC8qIGZ1bmN0aW9ucy4uLiAqLykge1xuICAgICAgICB2YXIgZm5zID0gYXJndW1lbnRzO1xuICAgICAgICByZXR1cm4gX3Jlc3RQYXJhbShmdW5jdGlvbiAoYXJncykge1xuICAgICAgICAgICAgdmFyIHRoYXQgPSB0aGlzO1xuXG4gICAgICAgICAgICB2YXIgY2FsbGJhY2sgPSBhcmdzW2FyZ3MubGVuZ3RoIC0gMV07XG4gICAgICAgICAgICBpZiAodHlwZW9mIGNhbGxiYWNrID09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICBhcmdzLnBvcCgpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBjYWxsYmFjayA9IG5vb3A7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGFzeW5jLnJlZHVjZShmbnMsIGFyZ3MsIGZ1bmN0aW9uIChuZXdhcmdzLCBmbiwgY2IpIHtcbiAgICAgICAgICAgICAgICBmbi5hcHBseSh0aGF0LCBuZXdhcmdzLmNvbmNhdChbX3Jlc3RQYXJhbShmdW5jdGlvbiAoZXJyLCBuZXh0YXJncykge1xuICAgICAgICAgICAgICAgICAgICBjYihlcnIsIG5leHRhcmdzKTtcbiAgICAgICAgICAgICAgICB9KV0pKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBmdW5jdGlvbiAoZXJyLCByZXN1bHRzKSB7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2suYXBwbHkodGhhdCwgW2Vycl0uY29uY2F0KHJlc3VsdHMpKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9O1xuXG4gICAgYXN5bmMuY29tcG9zZSA9IGZ1bmN0aW9uICgvKiBmdW5jdGlvbnMuLi4gKi8pIHtcbiAgICAgICAgcmV0dXJuIGFzeW5jLnNlcS5hcHBseShudWxsLCBBcnJheS5wcm90b3R5cGUucmV2ZXJzZS5jYWxsKGFyZ3VtZW50cykpO1xuICAgIH07XG5cblxuICAgIGZ1bmN0aW9uIF9hcHBseUVhY2goZWFjaGZuKSB7XG4gICAgICAgIHJldHVybiBfcmVzdFBhcmFtKGZ1bmN0aW9uKGZucywgYXJncykge1xuICAgICAgICAgICAgdmFyIGdvID0gX3Jlc3RQYXJhbShmdW5jdGlvbihhcmdzKSB7XG4gICAgICAgICAgICAgICAgdmFyIHRoYXQgPSB0aGlzO1xuICAgICAgICAgICAgICAgIHZhciBjYWxsYmFjayA9IGFyZ3MucG9wKCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGVhY2hmbihmbnMsIGZ1bmN0aW9uIChmbiwgXywgY2IpIHtcbiAgICAgICAgICAgICAgICAgICAgZm4uYXBwbHkodGhhdCwgYXJncy5jb25jYXQoW2NiXSkpO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgY2FsbGJhY2spO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBpZiAoYXJncy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZ28uYXBwbHkodGhpcywgYXJncyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZ287XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGFzeW5jLmFwcGx5RWFjaCA9IF9hcHBseUVhY2goYXN5bmMuZWFjaE9mKTtcbiAgICBhc3luYy5hcHBseUVhY2hTZXJpZXMgPSBfYXBwbHlFYWNoKGFzeW5jLmVhY2hPZlNlcmllcyk7XG5cblxuICAgIGFzeW5jLmZvcmV2ZXIgPSBmdW5jdGlvbiAoZm4sIGNhbGxiYWNrKSB7XG4gICAgICAgIHZhciBkb25lID0gb25seV9vbmNlKGNhbGxiYWNrIHx8IG5vb3ApO1xuICAgICAgICB2YXIgdGFzayA9IGVuc3VyZUFzeW5jKGZuKTtcbiAgICAgICAgZnVuY3Rpb24gbmV4dChlcnIpIHtcbiAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZG9uZShlcnIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGFzayhuZXh0KTtcbiAgICAgICAgfVxuICAgICAgICBuZXh0KCk7XG4gICAgfTtcblxuICAgIGZ1bmN0aW9uIGVuc3VyZUFzeW5jKGZuKSB7XG4gICAgICAgIHJldHVybiBfcmVzdFBhcmFtKGZ1bmN0aW9uIChhcmdzKSB7XG4gICAgICAgICAgICB2YXIgY2FsbGJhY2sgPSBhcmdzLnBvcCgpO1xuICAgICAgICAgICAgYXJncy5wdXNoKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICB2YXIgaW5uZXJBcmdzID0gYXJndW1lbnRzO1xuICAgICAgICAgICAgICAgIGlmIChzeW5jKSB7XG4gICAgICAgICAgICAgICAgICAgIGFzeW5jLnNldEltbWVkaWF0ZShmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjYWxsYmFjay5hcHBseShudWxsLCBpbm5lckFyZ3MpO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjay5hcHBseShudWxsLCBpbm5lckFyZ3MpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdmFyIHN5bmMgPSB0cnVlO1xuICAgICAgICAgICAgZm4uYXBwbHkodGhpcywgYXJncyk7XG4gICAgICAgICAgICBzeW5jID0gZmFsc2U7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGFzeW5jLmVuc3VyZUFzeW5jID0gZW5zdXJlQXN5bmM7XG5cbiAgICBhc3luYy5jb25zdGFudCA9IF9yZXN0UGFyYW0oZnVuY3Rpb24odmFsdWVzKSB7XG4gICAgICAgIHZhciBhcmdzID0gW251bGxdLmNvbmNhdCh2YWx1ZXMpO1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKGNhbGxiYWNrKSB7XG4gICAgICAgICAgICByZXR1cm4gY2FsbGJhY2suYXBwbHkodGhpcywgYXJncyk7XG4gICAgICAgIH07XG4gICAgfSk7XG5cbiAgICBhc3luYy53cmFwU3luYyA9XG4gICAgYXN5bmMuYXN5bmNpZnkgPSBmdW5jdGlvbiBhc3luY2lmeShmdW5jKSB7XG4gICAgICAgIHJldHVybiBfcmVzdFBhcmFtKGZ1bmN0aW9uIChhcmdzKSB7XG4gICAgICAgICAgICB2YXIgY2FsbGJhY2sgPSBhcmdzLnBvcCgpO1xuICAgICAgICAgICAgdmFyIHJlc3VsdDtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0ID0gZnVuYy5hcHBseSh0aGlzLCBhcmdzKTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gY2FsbGJhY2soZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBpZiByZXN1bHQgaXMgUHJvbWlzZSBvYmplY3RcbiAgICAgICAgICAgIGlmIChfaXNPYmplY3QocmVzdWx0KSAmJiB0eXBlb2YgcmVzdWx0LnRoZW4gPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICAgICAgICAgIHJlc3VsdC50aGVuKGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKG51bGwsIHZhbHVlKTtcbiAgICAgICAgICAgICAgICB9KVtcImNhdGNoXCJdKGZ1bmN0aW9uKGVycikge1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnIubWVzc2FnZSA/IGVyciA6IG5ldyBFcnJvcihlcnIpKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2sobnVsbCwgcmVzdWx0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfTtcblxuICAgIC8vIE5vZGUuanNcbiAgICBpZiAodHlwZW9mIG1vZHVsZSA9PT0gJ29iamVjdCcgJiYgbW9kdWxlLmV4cG9ydHMpIHtcbiAgICAgICAgbW9kdWxlLmV4cG9ydHMgPSBhc3luYztcbiAgICB9XG4gICAgLy8gQU1EIC8gUmVxdWlyZUpTXG4gICAgZWxzZSBpZiAodHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kKSB7XG4gICAgICAgIGRlZmluZShbXSwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIGFzeW5jO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgLy8gaW5jbHVkZWQgZGlyZWN0bHkgdmlhIDxzY3JpcHQ+IHRhZ1xuICAgIGVsc2Uge1xuICAgICAgICByb290LmFzeW5jID0gYXN5bmM7XG4gICAgfVxuXG59KCkpO1xuIiwiLy8gQ29weXJpZ2h0IEpveWVudCwgSW5jLiBhbmQgb3RoZXIgTm9kZSBjb250cmlidXRvcnMuXG4vL1xuLy8gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGFcbi8vIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGVcbi8vIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZ1xuLy8gd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLFxuLy8gZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdFxuLy8gcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlXG4vLyBmb2xsb3dpbmcgY29uZGl0aW9uczpcbi8vXG4vLyBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZFxuLy8gaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4vL1xuLy8gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTU1xuLy8gT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRlxuLy8gTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTlxuLy8gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sXG4vLyBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1Jcbi8vIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEVcbi8vIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG5cbi8vIHJlc29sdmVzIC4gYW5kIC4uIGVsZW1lbnRzIGluIGEgcGF0aCBhcnJheSB3aXRoIGRpcmVjdG9yeSBuYW1lcyB0aGVyZVxuLy8gbXVzdCBiZSBubyBzbGFzaGVzLCBlbXB0eSBlbGVtZW50cywgb3IgZGV2aWNlIG5hbWVzIChjOlxcKSBpbiB0aGUgYXJyYXlcbi8vIChzbyBhbHNvIG5vIGxlYWRpbmcgYW5kIHRyYWlsaW5nIHNsYXNoZXMgLSBpdCBkb2VzIG5vdCBkaXN0aW5ndWlzaFxuLy8gcmVsYXRpdmUgYW5kIGFic29sdXRlIHBhdGhzKVxuZnVuY3Rpb24gbm9ybWFsaXplQXJyYXkocGFydHMsIGFsbG93QWJvdmVSb290KSB7XG4gIC8vIGlmIHRoZSBwYXRoIHRyaWVzIHRvIGdvIGFib3ZlIHRoZSByb290LCBgdXBgIGVuZHMgdXAgPiAwXG4gIHZhciB1cCA9IDA7XG4gIGZvciAodmFyIGkgPSBwYXJ0cy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgIHZhciBsYXN0ID0gcGFydHNbaV07XG4gICAgaWYgKGxhc3QgPT09ICcuJykge1xuICAgICAgcGFydHMuc3BsaWNlKGksIDEpO1xuICAgIH0gZWxzZSBpZiAobGFzdCA9PT0gJy4uJykge1xuICAgICAgcGFydHMuc3BsaWNlKGksIDEpO1xuICAgICAgdXArKztcbiAgICB9IGVsc2UgaWYgKHVwKSB7XG4gICAgICBwYXJ0cy5zcGxpY2UoaSwgMSk7XG4gICAgICB1cC0tO1xuICAgIH1cbiAgfVxuXG4gIC8vIGlmIHRoZSBwYXRoIGlzIGFsbG93ZWQgdG8gZ28gYWJvdmUgdGhlIHJvb3QsIHJlc3RvcmUgbGVhZGluZyAuLnNcbiAgaWYgKGFsbG93QWJvdmVSb290KSB7XG4gICAgZm9yICg7IHVwLS07IHVwKSB7XG4gICAgICBwYXJ0cy51bnNoaWZ0KCcuLicpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBwYXJ0cztcbn1cblxuLy8gU3BsaXQgYSBmaWxlbmFtZSBpbnRvIFtyb290LCBkaXIsIGJhc2VuYW1lLCBleHRdLCB1bml4IHZlcnNpb25cbi8vICdyb290JyBpcyBqdXN0IGEgc2xhc2gsIG9yIG5vdGhpbmcuXG52YXIgc3BsaXRQYXRoUmUgPVxuICAgIC9eKFxcLz98KShbXFxzXFxTXSo/KSgoPzpcXC57MSwyfXxbXlxcL10rP3wpKFxcLlteLlxcL10qfCkpKD86W1xcL10qKSQvO1xudmFyIHNwbGl0UGF0aCA9IGZ1bmN0aW9uKGZpbGVuYW1lKSB7XG4gIHJldHVybiBzcGxpdFBhdGhSZS5leGVjKGZpbGVuYW1lKS5zbGljZSgxKTtcbn07XG5cbi8vIHBhdGgucmVzb2x2ZShbZnJvbSAuLi5dLCB0bylcbi8vIHBvc2l4IHZlcnNpb25cbmV4cG9ydHMucmVzb2x2ZSA9IGZ1bmN0aW9uKCkge1xuICB2YXIgcmVzb2x2ZWRQYXRoID0gJycsXG4gICAgICByZXNvbHZlZEFic29sdXRlID0gZmFsc2U7XG5cbiAgZm9yICh2YXIgaSA9IGFyZ3VtZW50cy5sZW5ndGggLSAxOyBpID49IC0xICYmICFyZXNvbHZlZEFic29sdXRlOyBpLS0pIHtcbiAgICB2YXIgcGF0aCA9IChpID49IDApID8gYXJndW1lbnRzW2ldIDogcHJvY2Vzcy5jd2QoKTtcblxuICAgIC8vIFNraXAgZW1wdHkgYW5kIGludmFsaWQgZW50cmllc1xuICAgIGlmICh0eXBlb2YgcGF0aCAhPT0gJ3N0cmluZycpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0FyZ3VtZW50cyB0byBwYXRoLnJlc29sdmUgbXVzdCBiZSBzdHJpbmdzJyk7XG4gICAgfSBlbHNlIGlmICghcGF0aCkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgcmVzb2x2ZWRQYXRoID0gcGF0aCArICcvJyArIHJlc29sdmVkUGF0aDtcbiAgICByZXNvbHZlZEFic29sdXRlID0gcGF0aC5jaGFyQXQoMCkgPT09ICcvJztcbiAgfVxuXG4gIC8vIEF0IHRoaXMgcG9pbnQgdGhlIHBhdGggc2hvdWxkIGJlIHJlc29sdmVkIHRvIGEgZnVsbCBhYnNvbHV0ZSBwYXRoLCBidXRcbiAgLy8gaGFuZGxlIHJlbGF0aXZlIHBhdGhzIHRvIGJlIHNhZmUgKG1pZ2h0IGhhcHBlbiB3aGVuIHByb2Nlc3MuY3dkKCkgZmFpbHMpXG5cbiAgLy8gTm9ybWFsaXplIHRoZSBwYXRoXG4gIHJlc29sdmVkUGF0aCA9IG5vcm1hbGl6ZUFycmF5KGZpbHRlcihyZXNvbHZlZFBhdGguc3BsaXQoJy8nKSwgZnVuY3Rpb24ocCkge1xuICAgIHJldHVybiAhIXA7XG4gIH0pLCAhcmVzb2x2ZWRBYnNvbHV0ZSkuam9pbignLycpO1xuXG4gIHJldHVybiAoKHJlc29sdmVkQWJzb2x1dGUgPyAnLycgOiAnJykgKyByZXNvbHZlZFBhdGgpIHx8ICcuJztcbn07XG5cbi8vIHBhdGgubm9ybWFsaXplKHBhdGgpXG4vLyBwb3NpeCB2ZXJzaW9uXG5leHBvcnRzLm5vcm1hbGl6ZSA9IGZ1bmN0aW9uKHBhdGgpIHtcbiAgdmFyIGlzQWJzb2x1dGUgPSBleHBvcnRzLmlzQWJzb2x1dGUocGF0aCksXG4gICAgICB0cmFpbGluZ1NsYXNoID0gc3Vic3RyKHBhdGgsIC0xKSA9PT0gJy8nO1xuXG4gIC8vIE5vcm1hbGl6ZSB0aGUgcGF0aFxuICBwYXRoID0gbm9ybWFsaXplQXJyYXkoZmlsdGVyKHBhdGguc3BsaXQoJy8nKSwgZnVuY3Rpb24ocCkge1xuICAgIHJldHVybiAhIXA7XG4gIH0pLCAhaXNBYnNvbHV0ZSkuam9pbignLycpO1xuXG4gIGlmICghcGF0aCAmJiAhaXNBYnNvbHV0ZSkge1xuICAgIHBhdGggPSAnLic7XG4gIH1cbiAgaWYgKHBhdGggJiYgdHJhaWxpbmdTbGFzaCkge1xuICAgIHBhdGggKz0gJy8nO1xuICB9XG5cbiAgcmV0dXJuIChpc0Fic29sdXRlID8gJy8nIDogJycpICsgcGF0aDtcbn07XG5cbi8vIHBvc2l4IHZlcnNpb25cbmV4cG9ydHMuaXNBYnNvbHV0ZSA9IGZ1bmN0aW9uKHBhdGgpIHtcbiAgcmV0dXJuIHBhdGguY2hhckF0KDApID09PSAnLyc7XG59O1xuXG4vLyBwb3NpeCB2ZXJzaW9uXG5leHBvcnRzLmpvaW4gPSBmdW5jdGlvbigpIHtcbiAgdmFyIHBhdGhzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAwKTtcbiAgcmV0dXJuIGV4cG9ydHMubm9ybWFsaXplKGZpbHRlcihwYXRocywgZnVuY3Rpb24ocCwgaW5kZXgpIHtcbiAgICBpZiAodHlwZW9mIHAgIT09ICdzdHJpbmcnKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdBcmd1bWVudHMgdG8gcGF0aC5qb2luIG11c3QgYmUgc3RyaW5ncycpO1xuICAgIH1cbiAgICByZXR1cm4gcDtcbiAgfSkuam9pbignLycpKTtcbn07XG5cblxuLy8gcGF0aC5yZWxhdGl2ZShmcm9tLCB0bylcbi8vIHBvc2l4IHZlcnNpb25cbmV4cG9ydHMucmVsYXRpdmUgPSBmdW5jdGlvbihmcm9tLCB0bykge1xuICBmcm9tID0gZXhwb3J0cy5yZXNvbHZlKGZyb20pLnN1YnN0cigxKTtcbiAgdG8gPSBleHBvcnRzLnJlc29sdmUodG8pLnN1YnN0cigxKTtcblxuICBmdW5jdGlvbiB0cmltKGFycikge1xuICAgIHZhciBzdGFydCA9IDA7XG4gICAgZm9yICg7IHN0YXJ0IDwgYXJyLmxlbmd0aDsgc3RhcnQrKykge1xuICAgICAgaWYgKGFycltzdGFydF0gIT09ICcnKSBicmVhaztcbiAgICB9XG5cbiAgICB2YXIgZW5kID0gYXJyLmxlbmd0aCAtIDE7XG4gICAgZm9yICg7IGVuZCA+PSAwOyBlbmQtLSkge1xuICAgICAgaWYgKGFycltlbmRdICE9PSAnJykgYnJlYWs7XG4gICAgfVxuXG4gICAgaWYgKHN0YXJ0ID4gZW5kKSByZXR1cm4gW107XG4gICAgcmV0dXJuIGFyci5zbGljZShzdGFydCwgZW5kIC0gc3RhcnQgKyAxKTtcbiAgfVxuXG4gIHZhciBmcm9tUGFydHMgPSB0cmltKGZyb20uc3BsaXQoJy8nKSk7XG4gIHZhciB0b1BhcnRzID0gdHJpbSh0by5zcGxpdCgnLycpKTtcblxuICB2YXIgbGVuZ3RoID0gTWF0aC5taW4oZnJvbVBhcnRzLmxlbmd0aCwgdG9QYXJ0cy5sZW5ndGgpO1xuICB2YXIgc2FtZVBhcnRzTGVuZ3RoID0gbGVuZ3RoO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgaWYgKGZyb21QYXJ0c1tpXSAhPT0gdG9QYXJ0c1tpXSkge1xuICAgICAgc2FtZVBhcnRzTGVuZ3RoID0gaTtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuXG4gIHZhciBvdXRwdXRQYXJ0cyA9IFtdO1xuICBmb3IgKHZhciBpID0gc2FtZVBhcnRzTGVuZ3RoOyBpIDwgZnJvbVBhcnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgb3V0cHV0UGFydHMucHVzaCgnLi4nKTtcbiAgfVxuXG4gIG91dHB1dFBhcnRzID0gb3V0cHV0UGFydHMuY29uY2F0KHRvUGFydHMuc2xpY2Uoc2FtZVBhcnRzTGVuZ3RoKSk7XG5cbiAgcmV0dXJuIG91dHB1dFBhcnRzLmpvaW4oJy8nKTtcbn07XG5cbmV4cG9ydHMuc2VwID0gJy8nO1xuZXhwb3J0cy5kZWxpbWl0ZXIgPSAnOic7XG5cbmV4cG9ydHMuZGlybmFtZSA9IGZ1bmN0aW9uKHBhdGgpIHtcbiAgdmFyIHJlc3VsdCA9IHNwbGl0UGF0aChwYXRoKSxcbiAgICAgIHJvb3QgPSByZXN1bHRbMF0sXG4gICAgICBkaXIgPSByZXN1bHRbMV07XG5cbiAgaWYgKCFyb290ICYmICFkaXIpIHtcbiAgICAvLyBObyBkaXJuYW1lIHdoYXRzb2V2ZXJcbiAgICByZXR1cm4gJy4nO1xuICB9XG5cbiAgaWYgKGRpcikge1xuICAgIC8vIEl0IGhhcyBhIGRpcm5hbWUsIHN0cmlwIHRyYWlsaW5nIHNsYXNoXG4gICAgZGlyID0gZGlyLnN1YnN0cigwLCBkaXIubGVuZ3RoIC0gMSk7XG4gIH1cblxuICByZXR1cm4gcm9vdCArIGRpcjtcbn07XG5cblxuZXhwb3J0cy5iYXNlbmFtZSA9IGZ1bmN0aW9uKHBhdGgsIGV4dCkge1xuICB2YXIgZiA9IHNwbGl0UGF0aChwYXRoKVsyXTtcbiAgLy8gVE9ETzogbWFrZSB0aGlzIGNvbXBhcmlzb24gY2FzZS1pbnNlbnNpdGl2ZSBvbiB3aW5kb3dzP1xuICBpZiAoZXh0ICYmIGYuc3Vic3RyKC0xICogZXh0Lmxlbmd0aCkgPT09IGV4dCkge1xuICAgIGYgPSBmLnN1YnN0cigwLCBmLmxlbmd0aCAtIGV4dC5sZW5ndGgpO1xuICB9XG4gIHJldHVybiBmO1xufTtcblxuXG5leHBvcnRzLmV4dG5hbWUgPSBmdW5jdGlvbihwYXRoKSB7XG4gIHJldHVybiBzcGxpdFBhdGgocGF0aClbM107XG59O1xuXG5mdW5jdGlvbiBmaWx0ZXIgKHhzLCBmKSB7XG4gICAgaWYgKHhzLmZpbHRlcikgcmV0dXJuIHhzLmZpbHRlcihmKTtcbiAgICB2YXIgcmVzID0gW107XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB4cy5sZW5ndGg7IGkrKykge1xuICAgICAgICBpZiAoZih4c1tpXSwgaSwgeHMpKSByZXMucHVzaCh4c1tpXSk7XG4gICAgfVxuICAgIHJldHVybiByZXM7XG59XG5cbi8vIFN0cmluZy5wcm90b3R5cGUuc3Vic3RyIC0gbmVnYXRpdmUgaW5kZXggZG9uJ3Qgd29yayBpbiBJRThcbnZhciBzdWJzdHIgPSAnYWInLnN1YnN0cigtMSkgPT09ICdiJ1xuICAgID8gZnVuY3Rpb24gKHN0ciwgc3RhcnQsIGxlbikgeyByZXR1cm4gc3RyLnN1YnN0cihzdGFydCwgbGVuKSB9XG4gICAgOiBmdW5jdGlvbiAoc3RyLCBzdGFydCwgbGVuKSB7XG4gICAgICAgIGlmIChzdGFydCA8IDApIHN0YXJ0ID0gc3RyLmxlbmd0aCArIHN0YXJ0O1xuICAgICAgICByZXR1cm4gc3RyLnN1YnN0cihzdGFydCwgbGVuKTtcbiAgICB9XG47XG4iLCIvLyBzaGltIGZvciB1c2luZyBwcm9jZXNzIGluIGJyb3dzZXJcblxudmFyIHByb2Nlc3MgPSBtb2R1bGUuZXhwb3J0cyA9IHt9O1xudmFyIHF1ZXVlID0gW107XG52YXIgZHJhaW5pbmcgPSBmYWxzZTtcbnZhciBjdXJyZW50UXVldWU7XG52YXIgcXVldWVJbmRleCA9IC0xO1xuXG5mdW5jdGlvbiBjbGVhblVwTmV4dFRpY2soKSB7XG4gICAgZHJhaW5pbmcgPSBmYWxzZTtcbiAgICBpZiAoY3VycmVudFF1ZXVlLmxlbmd0aCkge1xuICAgICAgICBxdWV1ZSA9IGN1cnJlbnRRdWV1ZS5jb25jYXQocXVldWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHF1ZXVlSW5kZXggPSAtMTtcbiAgICB9XG4gICAgaWYgKHF1ZXVlLmxlbmd0aCkge1xuICAgICAgICBkcmFpblF1ZXVlKCk7XG4gICAgfVxufVxuXG5mdW5jdGlvbiBkcmFpblF1ZXVlKCkge1xuICAgIGlmIChkcmFpbmluZykge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIHZhciB0aW1lb3V0ID0gc2V0VGltZW91dChjbGVhblVwTmV4dFRpY2spO1xuICAgIGRyYWluaW5nID0gdHJ1ZTtcblxuICAgIHZhciBsZW4gPSBxdWV1ZS5sZW5ndGg7XG4gICAgd2hpbGUobGVuKSB7XG4gICAgICAgIGN1cnJlbnRRdWV1ZSA9IHF1ZXVlO1xuICAgICAgICBxdWV1ZSA9IFtdO1xuICAgICAgICB3aGlsZSAoKytxdWV1ZUluZGV4IDwgbGVuKSB7XG4gICAgICAgICAgICBpZiAoY3VycmVudFF1ZXVlKSB7XG4gICAgICAgICAgICAgICAgY3VycmVudFF1ZXVlW3F1ZXVlSW5kZXhdLnJ1bigpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHF1ZXVlSW5kZXggPSAtMTtcbiAgICAgICAgbGVuID0gcXVldWUubGVuZ3RoO1xuICAgIH1cbiAgICBjdXJyZW50UXVldWUgPSBudWxsO1xuICAgIGRyYWluaW5nID0gZmFsc2U7XG4gICAgY2xlYXJUaW1lb3V0KHRpbWVvdXQpO1xufVxuXG5wcm9jZXNzLm5leHRUaWNrID0gZnVuY3Rpb24gKGZ1bikge1xuICAgIHZhciBhcmdzID0gbmV3IEFycmF5KGFyZ3VtZW50cy5sZW5ndGggLSAxKTtcbiAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGFyZ3NbaSAtIDFdID0gYXJndW1lbnRzW2ldO1xuICAgICAgICB9XG4gICAgfVxuICAgIHF1ZXVlLnB1c2gobmV3IEl0ZW0oZnVuLCBhcmdzKSk7XG4gICAgaWYgKHF1ZXVlLmxlbmd0aCA9PT0gMSAmJiAhZHJhaW5pbmcpIHtcbiAgICAgICAgc2V0VGltZW91dChkcmFpblF1ZXVlLCAwKTtcbiAgICB9XG59O1xuXG4vLyB2OCBsaWtlcyBwcmVkaWN0aWJsZSBvYmplY3RzXG5mdW5jdGlvbiBJdGVtKGZ1biwgYXJyYXkpIHtcbiAgICB0aGlzLmZ1biA9IGZ1bjtcbiAgICB0aGlzLmFycmF5ID0gYXJyYXk7XG59XG5JdGVtLnByb3RvdHlwZS5ydW4gPSBmdW5jdGlvbiAoKSB7XG4gICAgdGhpcy5mdW4uYXBwbHkobnVsbCwgdGhpcy5hcnJheSk7XG59O1xucHJvY2Vzcy50aXRsZSA9ICdicm93c2VyJztcbnByb2Nlc3MuYnJvd3NlciA9IHRydWU7XG5wcm9jZXNzLmVudiA9IHt9O1xucHJvY2Vzcy5hcmd2ID0gW107XG5wcm9jZXNzLnZlcnNpb24gPSAnJzsgLy8gZW1wdHkgc3RyaW5nIHRvIGF2b2lkIHJlZ2V4cCBpc3N1ZXNcbnByb2Nlc3MudmVyc2lvbnMgPSB7fTtcblxuZnVuY3Rpb24gbm9vcCgpIHt9XG5cbnByb2Nlc3Mub24gPSBub29wO1xucHJvY2Vzcy5hZGRMaXN0ZW5lciA9IG5vb3A7XG5wcm9jZXNzLm9uY2UgPSBub29wO1xucHJvY2Vzcy5vZmYgPSBub29wO1xucHJvY2Vzcy5yZW1vdmVMaXN0ZW5lciA9IG5vb3A7XG5wcm9jZXNzLnJlbW92ZUFsbExpc3RlbmVycyA9IG5vb3A7XG5wcm9jZXNzLmVtaXQgPSBub29wO1xuXG5wcm9jZXNzLmJpbmRpbmcgPSBmdW5jdGlvbiAobmFtZSkge1xuICAgIHRocm93IG5ldyBFcnJvcigncHJvY2Vzcy5iaW5kaW5nIGlzIG5vdCBzdXBwb3J0ZWQnKTtcbn07XG5cbnByb2Nlc3MuY3dkID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gJy8nIH07XG5wcm9jZXNzLmNoZGlyID0gZnVuY3Rpb24gKGRpcikge1xuICAgIHRocm93IG5ldyBFcnJvcigncHJvY2Vzcy5jaGRpciBpcyBub3Qgc3VwcG9ydGVkJyk7XG59O1xucHJvY2Vzcy51bWFzayA9IGZ1bmN0aW9uKCkgeyByZXR1cm4gMDsgfTtcbiIsIi8qISBodHRwczovL210aHMuYmUvcHVueWNvZGUgdjEuNC4wIGJ5IEBtYXRoaWFzICovXG47KGZ1bmN0aW9uKHJvb3QpIHtcblxuXHQvKiogRGV0ZWN0IGZyZWUgdmFyaWFibGVzICovXG5cdHZhciBmcmVlRXhwb3J0cyA9IHR5cGVvZiBleHBvcnRzID09ICdvYmplY3QnICYmIGV4cG9ydHMgJiZcblx0XHQhZXhwb3J0cy5ub2RlVHlwZSAmJiBleHBvcnRzO1xuXHR2YXIgZnJlZU1vZHVsZSA9IHR5cGVvZiBtb2R1bGUgPT0gJ29iamVjdCcgJiYgbW9kdWxlICYmXG5cdFx0IW1vZHVsZS5ub2RlVHlwZSAmJiBtb2R1bGU7XG5cdHZhciBmcmVlR2xvYmFsID0gdHlwZW9mIGdsb2JhbCA9PSAnb2JqZWN0JyAmJiBnbG9iYWw7XG5cdGlmIChcblx0XHRmcmVlR2xvYmFsLmdsb2JhbCA9PT0gZnJlZUdsb2JhbCB8fFxuXHRcdGZyZWVHbG9iYWwud2luZG93ID09PSBmcmVlR2xvYmFsIHx8XG5cdFx0ZnJlZUdsb2JhbC5zZWxmID09PSBmcmVlR2xvYmFsXG5cdCkge1xuXHRcdHJvb3QgPSBmcmVlR2xvYmFsO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoZSBgcHVueWNvZGVgIG9iamVjdC5cblx0ICogQG5hbWUgcHVueWNvZGVcblx0ICogQHR5cGUgT2JqZWN0XG5cdCAqL1xuXHR2YXIgcHVueWNvZGUsXG5cblx0LyoqIEhpZ2hlc3QgcG9zaXRpdmUgc2lnbmVkIDMyLWJpdCBmbG9hdCB2YWx1ZSAqL1xuXHRtYXhJbnQgPSAyMTQ3NDgzNjQ3LCAvLyBha2EuIDB4N0ZGRkZGRkYgb3IgMl4zMS0xXG5cblx0LyoqIEJvb3RzdHJpbmcgcGFyYW1ldGVycyAqL1xuXHRiYXNlID0gMzYsXG5cdHRNaW4gPSAxLFxuXHR0TWF4ID0gMjYsXG5cdHNrZXcgPSAzOCxcblx0ZGFtcCA9IDcwMCxcblx0aW5pdGlhbEJpYXMgPSA3Mixcblx0aW5pdGlhbE4gPSAxMjgsIC8vIDB4ODBcblx0ZGVsaW1pdGVyID0gJy0nLCAvLyAnXFx4MkQnXG5cblx0LyoqIFJlZ3VsYXIgZXhwcmVzc2lvbnMgKi9cblx0cmVnZXhQdW55Y29kZSA9IC9eeG4tLS8sXG5cdHJlZ2V4Tm9uQVNDSUkgPSAvW15cXHgyMC1cXHg3RV0vLCAvLyB1bnByaW50YWJsZSBBU0NJSSBjaGFycyArIG5vbi1BU0NJSSBjaGFyc1xuXHRyZWdleFNlcGFyYXRvcnMgPSAvW1xceDJFXFx1MzAwMlxcdUZGMEVcXHVGRjYxXS9nLCAvLyBSRkMgMzQ5MCBzZXBhcmF0b3JzXG5cblx0LyoqIEVycm9yIG1lc3NhZ2VzICovXG5cdGVycm9ycyA9IHtcblx0XHQnb3ZlcmZsb3cnOiAnT3ZlcmZsb3c6IGlucHV0IG5lZWRzIHdpZGVyIGludGVnZXJzIHRvIHByb2Nlc3MnLFxuXHRcdCdub3QtYmFzaWMnOiAnSWxsZWdhbCBpbnB1dCA+PSAweDgwIChub3QgYSBiYXNpYyBjb2RlIHBvaW50KScsXG5cdFx0J2ludmFsaWQtaW5wdXQnOiAnSW52YWxpZCBpbnB1dCdcblx0fSxcblxuXHQvKiogQ29udmVuaWVuY2Ugc2hvcnRjdXRzICovXG5cdGJhc2VNaW51c1RNaW4gPSBiYXNlIC0gdE1pbixcblx0Zmxvb3IgPSBNYXRoLmZsb29yLFxuXHRzdHJpbmdGcm9tQ2hhckNvZGUgPSBTdHJpbmcuZnJvbUNoYXJDb2RlLFxuXG5cdC8qKiBUZW1wb3JhcnkgdmFyaWFibGUgKi9cblx0a2V5O1xuXG5cdC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuXG5cdC8qKlxuXHQgKiBBIGdlbmVyaWMgZXJyb3IgdXRpbGl0eSBmdW5jdGlvbi5cblx0ICogQHByaXZhdGVcblx0ICogQHBhcmFtIHtTdHJpbmd9IHR5cGUgVGhlIGVycm9yIHR5cGUuXG5cdCAqIEByZXR1cm5zIHtFcnJvcn0gVGhyb3dzIGEgYFJhbmdlRXJyb3JgIHdpdGggdGhlIGFwcGxpY2FibGUgZXJyb3IgbWVzc2FnZS5cblx0ICovXG5cdGZ1bmN0aW9uIGVycm9yKHR5cGUpIHtcblx0XHR0aHJvdyBuZXcgUmFuZ2VFcnJvcihlcnJvcnNbdHlwZV0pO1xuXHR9XG5cblx0LyoqXG5cdCAqIEEgZ2VuZXJpYyBgQXJyYXkjbWFwYCB1dGlsaXR5IGZ1bmN0aW9uLlxuXHQgKiBAcHJpdmF0ZVxuXHQgKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gaXRlcmF0ZSBvdmVyLlxuXHQgKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFjayBUaGUgZnVuY3Rpb24gdGhhdCBnZXRzIGNhbGxlZCBmb3IgZXZlcnkgYXJyYXlcblx0ICogaXRlbS5cblx0ICogQHJldHVybnMge0FycmF5fSBBIG5ldyBhcnJheSBvZiB2YWx1ZXMgcmV0dXJuZWQgYnkgdGhlIGNhbGxiYWNrIGZ1bmN0aW9uLlxuXHQgKi9cblx0ZnVuY3Rpb24gbWFwKGFycmF5LCBmbikge1xuXHRcdHZhciBsZW5ndGggPSBhcnJheS5sZW5ndGg7XG5cdFx0dmFyIHJlc3VsdCA9IFtdO1xuXHRcdHdoaWxlIChsZW5ndGgtLSkge1xuXHRcdFx0cmVzdWx0W2xlbmd0aF0gPSBmbihhcnJheVtsZW5ndGhdKTtcblx0XHR9XG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fVxuXG5cdC8qKlxuXHQgKiBBIHNpbXBsZSBgQXJyYXkjbWFwYC1saWtlIHdyYXBwZXIgdG8gd29yayB3aXRoIGRvbWFpbiBuYW1lIHN0cmluZ3Mgb3IgZW1haWxcblx0ICogYWRkcmVzc2VzLlxuXHQgKiBAcHJpdmF0ZVxuXHQgKiBAcGFyYW0ge1N0cmluZ30gZG9tYWluIFRoZSBkb21haW4gbmFtZSBvciBlbWFpbCBhZGRyZXNzLlxuXHQgKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFjayBUaGUgZnVuY3Rpb24gdGhhdCBnZXRzIGNhbGxlZCBmb3IgZXZlcnlcblx0ICogY2hhcmFjdGVyLlxuXHQgKiBAcmV0dXJucyB7QXJyYXl9IEEgbmV3IHN0cmluZyBvZiBjaGFyYWN0ZXJzIHJldHVybmVkIGJ5IHRoZSBjYWxsYmFja1xuXHQgKiBmdW5jdGlvbi5cblx0ICovXG5cdGZ1bmN0aW9uIG1hcERvbWFpbihzdHJpbmcsIGZuKSB7XG5cdFx0dmFyIHBhcnRzID0gc3RyaW5nLnNwbGl0KCdAJyk7XG5cdFx0dmFyIHJlc3VsdCA9ICcnO1xuXHRcdGlmIChwYXJ0cy5sZW5ndGggPiAxKSB7XG5cdFx0XHQvLyBJbiBlbWFpbCBhZGRyZXNzZXMsIG9ubHkgdGhlIGRvbWFpbiBuYW1lIHNob3VsZCBiZSBwdW55Y29kZWQuIExlYXZlXG5cdFx0XHQvLyB0aGUgbG9jYWwgcGFydCAoaS5lLiBldmVyeXRoaW5nIHVwIHRvIGBAYCkgaW50YWN0LlxuXHRcdFx0cmVzdWx0ID0gcGFydHNbMF0gKyAnQCc7XG5cdFx0XHRzdHJpbmcgPSBwYXJ0c1sxXTtcblx0XHR9XG5cdFx0Ly8gQXZvaWQgYHNwbGl0KHJlZ2V4KWAgZm9yIElFOCBjb21wYXRpYmlsaXR5LiBTZWUgIzE3LlxuXHRcdHN0cmluZyA9IHN0cmluZy5yZXBsYWNlKHJlZ2V4U2VwYXJhdG9ycywgJ1xceDJFJyk7XG5cdFx0dmFyIGxhYmVscyA9IHN0cmluZy5zcGxpdCgnLicpO1xuXHRcdHZhciBlbmNvZGVkID0gbWFwKGxhYmVscywgZm4pLmpvaW4oJy4nKTtcblx0XHRyZXR1cm4gcmVzdWx0ICsgZW5jb2RlZDtcblx0fVxuXG5cdC8qKlxuXHQgKiBDcmVhdGVzIGFuIGFycmF5IGNvbnRhaW5pbmcgdGhlIG51bWVyaWMgY29kZSBwb2ludHMgb2YgZWFjaCBVbmljb2RlXG5cdCAqIGNoYXJhY3RlciBpbiB0aGUgc3RyaW5nLiBXaGlsZSBKYXZhU2NyaXB0IHVzZXMgVUNTLTIgaW50ZXJuYWxseSxcblx0ICogdGhpcyBmdW5jdGlvbiB3aWxsIGNvbnZlcnQgYSBwYWlyIG9mIHN1cnJvZ2F0ZSBoYWx2ZXMgKGVhY2ggb2Ygd2hpY2hcblx0ICogVUNTLTIgZXhwb3NlcyBhcyBzZXBhcmF0ZSBjaGFyYWN0ZXJzKSBpbnRvIGEgc2luZ2xlIGNvZGUgcG9pbnQsXG5cdCAqIG1hdGNoaW5nIFVURi0xNi5cblx0ICogQHNlZSBgcHVueWNvZGUudWNzMi5lbmNvZGVgXG5cdCAqIEBzZWUgPGh0dHBzOi8vbWF0aGlhc2J5bmVucy5iZS9ub3Rlcy9qYXZhc2NyaXB0LWVuY29kaW5nPlxuXHQgKiBAbWVtYmVyT2YgcHVueWNvZGUudWNzMlxuXHQgKiBAbmFtZSBkZWNvZGVcblx0ICogQHBhcmFtIHtTdHJpbmd9IHN0cmluZyBUaGUgVW5pY29kZSBpbnB1dCBzdHJpbmcgKFVDUy0yKS5cblx0ICogQHJldHVybnMge0FycmF5fSBUaGUgbmV3IGFycmF5IG9mIGNvZGUgcG9pbnRzLlxuXHQgKi9cblx0ZnVuY3Rpb24gdWNzMmRlY29kZShzdHJpbmcpIHtcblx0XHR2YXIgb3V0cHV0ID0gW10sXG5cdFx0ICAgIGNvdW50ZXIgPSAwLFxuXHRcdCAgICBsZW5ndGggPSBzdHJpbmcubGVuZ3RoLFxuXHRcdCAgICB2YWx1ZSxcblx0XHQgICAgZXh0cmE7XG5cdFx0d2hpbGUgKGNvdW50ZXIgPCBsZW5ndGgpIHtcblx0XHRcdHZhbHVlID0gc3RyaW5nLmNoYXJDb2RlQXQoY291bnRlcisrKTtcblx0XHRcdGlmICh2YWx1ZSA+PSAweEQ4MDAgJiYgdmFsdWUgPD0gMHhEQkZGICYmIGNvdW50ZXIgPCBsZW5ndGgpIHtcblx0XHRcdFx0Ly8gaGlnaCBzdXJyb2dhdGUsIGFuZCB0aGVyZSBpcyBhIG5leHQgY2hhcmFjdGVyXG5cdFx0XHRcdGV4dHJhID0gc3RyaW5nLmNoYXJDb2RlQXQoY291bnRlcisrKTtcblx0XHRcdFx0aWYgKChleHRyYSAmIDB4RkMwMCkgPT0gMHhEQzAwKSB7IC8vIGxvdyBzdXJyb2dhdGVcblx0XHRcdFx0XHRvdXRwdXQucHVzaCgoKHZhbHVlICYgMHgzRkYpIDw8IDEwKSArIChleHRyYSAmIDB4M0ZGKSArIDB4MTAwMDApO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdC8vIHVubWF0Y2hlZCBzdXJyb2dhdGU7IG9ubHkgYXBwZW5kIHRoaXMgY29kZSB1bml0LCBpbiBjYXNlIHRoZSBuZXh0XG5cdFx0XHRcdFx0Ly8gY29kZSB1bml0IGlzIHRoZSBoaWdoIHN1cnJvZ2F0ZSBvZiBhIHN1cnJvZ2F0ZSBwYWlyXG5cdFx0XHRcdFx0b3V0cHV0LnB1c2godmFsdWUpO1xuXHRcdFx0XHRcdGNvdW50ZXItLTtcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0b3V0cHV0LnB1c2godmFsdWUpO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gb3V0cHV0O1xuXHR9XG5cblx0LyoqXG5cdCAqIENyZWF0ZXMgYSBzdHJpbmcgYmFzZWQgb24gYW4gYXJyYXkgb2YgbnVtZXJpYyBjb2RlIHBvaW50cy5cblx0ICogQHNlZSBgcHVueWNvZGUudWNzMi5kZWNvZGVgXG5cdCAqIEBtZW1iZXJPZiBwdW55Y29kZS51Y3MyXG5cdCAqIEBuYW1lIGVuY29kZVxuXHQgKiBAcGFyYW0ge0FycmF5fSBjb2RlUG9pbnRzIFRoZSBhcnJheSBvZiBudW1lcmljIGNvZGUgcG9pbnRzLlxuXHQgKiBAcmV0dXJucyB7U3RyaW5nfSBUaGUgbmV3IFVuaWNvZGUgc3RyaW5nIChVQ1MtMikuXG5cdCAqL1xuXHRmdW5jdGlvbiB1Y3MyZW5jb2RlKGFycmF5KSB7XG5cdFx0cmV0dXJuIG1hcChhcnJheSwgZnVuY3Rpb24odmFsdWUpIHtcblx0XHRcdHZhciBvdXRwdXQgPSAnJztcblx0XHRcdGlmICh2YWx1ZSA+IDB4RkZGRikge1xuXHRcdFx0XHR2YWx1ZSAtPSAweDEwMDAwO1xuXHRcdFx0XHRvdXRwdXQgKz0gc3RyaW5nRnJvbUNoYXJDb2RlKHZhbHVlID4+PiAxMCAmIDB4M0ZGIHwgMHhEODAwKTtcblx0XHRcdFx0dmFsdWUgPSAweERDMDAgfCB2YWx1ZSAmIDB4M0ZGO1xuXHRcdFx0fVxuXHRcdFx0b3V0cHV0ICs9IHN0cmluZ0Zyb21DaGFyQ29kZSh2YWx1ZSk7XG5cdFx0XHRyZXR1cm4gb3V0cHV0O1xuXHRcdH0pLmpvaW4oJycpO1xuXHR9XG5cblx0LyoqXG5cdCAqIENvbnZlcnRzIGEgYmFzaWMgY29kZSBwb2ludCBpbnRvIGEgZGlnaXQvaW50ZWdlci5cblx0ICogQHNlZSBgZGlnaXRUb0Jhc2ljKClgXG5cdCAqIEBwcml2YXRlXG5cdCAqIEBwYXJhbSB7TnVtYmVyfSBjb2RlUG9pbnQgVGhlIGJhc2ljIG51bWVyaWMgY29kZSBwb2ludCB2YWx1ZS5cblx0ICogQHJldHVybnMge051bWJlcn0gVGhlIG51bWVyaWMgdmFsdWUgb2YgYSBiYXNpYyBjb2RlIHBvaW50IChmb3IgdXNlIGluXG5cdCAqIHJlcHJlc2VudGluZyBpbnRlZ2VycykgaW4gdGhlIHJhbmdlIGAwYCB0byBgYmFzZSAtIDFgLCBvciBgYmFzZWAgaWZcblx0ICogdGhlIGNvZGUgcG9pbnQgZG9lcyBub3QgcmVwcmVzZW50IGEgdmFsdWUuXG5cdCAqL1xuXHRmdW5jdGlvbiBiYXNpY1RvRGlnaXQoY29kZVBvaW50KSB7XG5cdFx0aWYgKGNvZGVQb2ludCAtIDQ4IDwgMTApIHtcblx0XHRcdHJldHVybiBjb2RlUG9pbnQgLSAyMjtcblx0XHR9XG5cdFx0aWYgKGNvZGVQb2ludCAtIDY1IDwgMjYpIHtcblx0XHRcdHJldHVybiBjb2RlUG9pbnQgLSA2NTtcblx0XHR9XG5cdFx0aWYgKGNvZGVQb2ludCAtIDk3IDwgMjYpIHtcblx0XHRcdHJldHVybiBjb2RlUG9pbnQgLSA5Nztcblx0XHR9XG5cdFx0cmV0dXJuIGJhc2U7XG5cdH1cblxuXHQvKipcblx0ICogQ29udmVydHMgYSBkaWdpdC9pbnRlZ2VyIGludG8gYSBiYXNpYyBjb2RlIHBvaW50LlxuXHQgKiBAc2VlIGBiYXNpY1RvRGlnaXQoKWBcblx0ICogQHByaXZhdGVcblx0ICogQHBhcmFtIHtOdW1iZXJ9IGRpZ2l0IFRoZSBudW1lcmljIHZhbHVlIG9mIGEgYmFzaWMgY29kZSBwb2ludC5cblx0ICogQHJldHVybnMge051bWJlcn0gVGhlIGJhc2ljIGNvZGUgcG9pbnQgd2hvc2UgdmFsdWUgKHdoZW4gdXNlZCBmb3Jcblx0ICogcmVwcmVzZW50aW5nIGludGVnZXJzKSBpcyBgZGlnaXRgLCB3aGljaCBuZWVkcyB0byBiZSBpbiB0aGUgcmFuZ2Vcblx0ICogYDBgIHRvIGBiYXNlIC0gMWAuIElmIGBmbGFnYCBpcyBub24temVybywgdGhlIHVwcGVyY2FzZSBmb3JtIGlzXG5cdCAqIHVzZWQ7IGVsc2UsIHRoZSBsb3dlcmNhc2UgZm9ybSBpcyB1c2VkLiBUaGUgYmVoYXZpb3IgaXMgdW5kZWZpbmVkXG5cdCAqIGlmIGBmbGFnYCBpcyBub24temVybyBhbmQgYGRpZ2l0YCBoYXMgbm8gdXBwZXJjYXNlIGZvcm0uXG5cdCAqL1xuXHRmdW5jdGlvbiBkaWdpdFRvQmFzaWMoZGlnaXQsIGZsYWcpIHtcblx0XHQvLyAgMC4uMjUgbWFwIHRvIEFTQ0lJIGEuLnogb3IgQS4uWlxuXHRcdC8vIDI2Li4zNSBtYXAgdG8gQVNDSUkgMC4uOVxuXHRcdHJldHVybiBkaWdpdCArIDIyICsgNzUgKiAoZGlnaXQgPCAyNikgLSAoKGZsYWcgIT0gMCkgPDwgNSk7XG5cdH1cblxuXHQvKipcblx0ICogQmlhcyBhZGFwdGF0aW9uIGZ1bmN0aW9uIGFzIHBlciBzZWN0aW9uIDMuNCBvZiBSRkMgMzQ5Mi5cblx0ICogaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzM0OTIjc2VjdGlvbi0zLjRcblx0ICogQHByaXZhdGVcblx0ICovXG5cdGZ1bmN0aW9uIGFkYXB0KGRlbHRhLCBudW1Qb2ludHMsIGZpcnN0VGltZSkge1xuXHRcdHZhciBrID0gMDtcblx0XHRkZWx0YSA9IGZpcnN0VGltZSA/IGZsb29yKGRlbHRhIC8gZGFtcCkgOiBkZWx0YSA+PiAxO1xuXHRcdGRlbHRhICs9IGZsb29yKGRlbHRhIC8gbnVtUG9pbnRzKTtcblx0XHRmb3IgKC8qIG5vIGluaXRpYWxpemF0aW9uICovOyBkZWx0YSA+IGJhc2VNaW51c1RNaW4gKiB0TWF4ID4+IDE7IGsgKz0gYmFzZSkge1xuXHRcdFx0ZGVsdGEgPSBmbG9vcihkZWx0YSAvIGJhc2VNaW51c1RNaW4pO1xuXHRcdH1cblx0XHRyZXR1cm4gZmxvb3IoayArIChiYXNlTWludXNUTWluICsgMSkgKiBkZWx0YSAvIChkZWx0YSArIHNrZXcpKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBDb252ZXJ0cyBhIFB1bnljb2RlIHN0cmluZyBvZiBBU0NJSS1vbmx5IHN5bWJvbHMgdG8gYSBzdHJpbmcgb2YgVW5pY29kZVxuXHQgKiBzeW1ib2xzLlxuXHQgKiBAbWVtYmVyT2YgcHVueWNvZGVcblx0ICogQHBhcmFtIHtTdHJpbmd9IGlucHV0IFRoZSBQdW55Y29kZSBzdHJpbmcgb2YgQVNDSUktb25seSBzeW1ib2xzLlxuXHQgKiBAcmV0dXJucyB7U3RyaW5nfSBUaGUgcmVzdWx0aW5nIHN0cmluZyBvZiBVbmljb2RlIHN5bWJvbHMuXG5cdCAqL1xuXHRmdW5jdGlvbiBkZWNvZGUoaW5wdXQpIHtcblx0XHQvLyBEb24ndCB1c2UgVUNTLTJcblx0XHR2YXIgb3V0cHV0ID0gW10sXG5cdFx0ICAgIGlucHV0TGVuZ3RoID0gaW5wdXQubGVuZ3RoLFxuXHRcdCAgICBvdXQsXG5cdFx0ICAgIGkgPSAwLFxuXHRcdCAgICBuID0gaW5pdGlhbE4sXG5cdFx0ICAgIGJpYXMgPSBpbml0aWFsQmlhcyxcblx0XHQgICAgYmFzaWMsXG5cdFx0ICAgIGosXG5cdFx0ICAgIGluZGV4LFxuXHRcdCAgICBvbGRpLFxuXHRcdCAgICB3LFxuXHRcdCAgICBrLFxuXHRcdCAgICBkaWdpdCxcblx0XHQgICAgdCxcblx0XHQgICAgLyoqIENhY2hlZCBjYWxjdWxhdGlvbiByZXN1bHRzICovXG5cdFx0ICAgIGJhc2VNaW51c1Q7XG5cblx0XHQvLyBIYW5kbGUgdGhlIGJhc2ljIGNvZGUgcG9pbnRzOiBsZXQgYGJhc2ljYCBiZSB0aGUgbnVtYmVyIG9mIGlucHV0IGNvZGVcblx0XHQvLyBwb2ludHMgYmVmb3JlIHRoZSBsYXN0IGRlbGltaXRlciwgb3IgYDBgIGlmIHRoZXJlIGlzIG5vbmUsIHRoZW4gY29weVxuXHRcdC8vIHRoZSBmaXJzdCBiYXNpYyBjb2RlIHBvaW50cyB0byB0aGUgb3V0cHV0LlxuXG5cdFx0YmFzaWMgPSBpbnB1dC5sYXN0SW5kZXhPZihkZWxpbWl0ZXIpO1xuXHRcdGlmIChiYXNpYyA8IDApIHtcblx0XHRcdGJhc2ljID0gMDtcblx0XHR9XG5cblx0XHRmb3IgKGogPSAwOyBqIDwgYmFzaWM7ICsraikge1xuXHRcdFx0Ly8gaWYgaXQncyBub3QgYSBiYXNpYyBjb2RlIHBvaW50XG5cdFx0XHRpZiAoaW5wdXQuY2hhckNvZGVBdChqKSA+PSAweDgwKSB7XG5cdFx0XHRcdGVycm9yKCdub3QtYmFzaWMnKTtcblx0XHRcdH1cblx0XHRcdG91dHB1dC5wdXNoKGlucHV0LmNoYXJDb2RlQXQoaikpO1xuXHRcdH1cblxuXHRcdC8vIE1haW4gZGVjb2RpbmcgbG9vcDogc3RhcnQganVzdCBhZnRlciB0aGUgbGFzdCBkZWxpbWl0ZXIgaWYgYW55IGJhc2ljIGNvZGVcblx0XHQvLyBwb2ludHMgd2VyZSBjb3BpZWQ7IHN0YXJ0IGF0IHRoZSBiZWdpbm5pbmcgb3RoZXJ3aXNlLlxuXG5cdFx0Zm9yIChpbmRleCA9IGJhc2ljID4gMCA/IGJhc2ljICsgMSA6IDA7IGluZGV4IDwgaW5wdXRMZW5ndGg7IC8qIG5vIGZpbmFsIGV4cHJlc3Npb24gKi8pIHtcblxuXHRcdFx0Ly8gYGluZGV4YCBpcyB0aGUgaW5kZXggb2YgdGhlIG5leHQgY2hhcmFjdGVyIHRvIGJlIGNvbnN1bWVkLlxuXHRcdFx0Ly8gRGVjb2RlIGEgZ2VuZXJhbGl6ZWQgdmFyaWFibGUtbGVuZ3RoIGludGVnZXIgaW50byBgZGVsdGFgLFxuXHRcdFx0Ly8gd2hpY2ggZ2V0cyBhZGRlZCB0byBgaWAuIFRoZSBvdmVyZmxvdyBjaGVja2luZyBpcyBlYXNpZXJcblx0XHRcdC8vIGlmIHdlIGluY3JlYXNlIGBpYCBhcyB3ZSBnbywgdGhlbiBzdWJ0cmFjdCBvZmYgaXRzIHN0YXJ0aW5nXG5cdFx0XHQvLyB2YWx1ZSBhdCB0aGUgZW5kIHRvIG9idGFpbiBgZGVsdGFgLlxuXHRcdFx0Zm9yIChvbGRpID0gaSwgdyA9IDEsIGsgPSBiYXNlOyAvKiBubyBjb25kaXRpb24gKi87IGsgKz0gYmFzZSkge1xuXG5cdFx0XHRcdGlmIChpbmRleCA+PSBpbnB1dExlbmd0aCkge1xuXHRcdFx0XHRcdGVycm9yKCdpbnZhbGlkLWlucHV0Jyk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRkaWdpdCA9IGJhc2ljVG9EaWdpdChpbnB1dC5jaGFyQ29kZUF0KGluZGV4KyspKTtcblxuXHRcdFx0XHRpZiAoZGlnaXQgPj0gYmFzZSB8fCBkaWdpdCA+IGZsb29yKChtYXhJbnQgLSBpKSAvIHcpKSB7XG5cdFx0XHRcdFx0ZXJyb3IoJ292ZXJmbG93Jyk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpICs9IGRpZ2l0ICogdztcblx0XHRcdFx0dCA9IGsgPD0gYmlhcyA/IHRNaW4gOiAoayA+PSBiaWFzICsgdE1heCA/IHRNYXggOiBrIC0gYmlhcyk7XG5cblx0XHRcdFx0aWYgKGRpZ2l0IDwgdCkge1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0YmFzZU1pbnVzVCA9IGJhc2UgLSB0O1xuXHRcdFx0XHRpZiAodyA+IGZsb29yKG1heEludCAvIGJhc2VNaW51c1QpKSB7XG5cdFx0XHRcdFx0ZXJyb3IoJ292ZXJmbG93Jyk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHR3ICo9IGJhc2VNaW51c1Q7XG5cblx0XHRcdH1cblxuXHRcdFx0b3V0ID0gb3V0cHV0Lmxlbmd0aCArIDE7XG5cdFx0XHRiaWFzID0gYWRhcHQoaSAtIG9sZGksIG91dCwgb2xkaSA9PSAwKTtcblxuXHRcdFx0Ly8gYGlgIHdhcyBzdXBwb3NlZCB0byB3cmFwIGFyb3VuZCBmcm9tIGBvdXRgIHRvIGAwYCxcblx0XHRcdC8vIGluY3JlbWVudGluZyBgbmAgZWFjaCB0aW1lLCBzbyB3ZSdsbCBmaXggdGhhdCBub3c6XG5cdFx0XHRpZiAoZmxvb3IoaSAvIG91dCkgPiBtYXhJbnQgLSBuKSB7XG5cdFx0XHRcdGVycm9yKCdvdmVyZmxvdycpO1xuXHRcdFx0fVxuXG5cdFx0XHRuICs9IGZsb29yKGkgLyBvdXQpO1xuXHRcdFx0aSAlPSBvdXQ7XG5cblx0XHRcdC8vIEluc2VydCBgbmAgYXQgcG9zaXRpb24gYGlgIG9mIHRoZSBvdXRwdXRcblx0XHRcdG91dHB1dC5zcGxpY2UoaSsrLCAwLCBuKTtcblxuXHRcdH1cblxuXHRcdHJldHVybiB1Y3MyZW5jb2RlKG91dHB1dCk7XG5cdH1cblxuXHQvKipcblx0ICogQ29udmVydHMgYSBzdHJpbmcgb2YgVW5pY29kZSBzeW1ib2xzIChlLmcuIGEgZG9tYWluIG5hbWUgbGFiZWwpIHRvIGFcblx0ICogUHVueWNvZGUgc3RyaW5nIG9mIEFTQ0lJLW9ubHkgc3ltYm9scy5cblx0ICogQG1lbWJlck9mIHB1bnljb2RlXG5cdCAqIEBwYXJhbSB7U3RyaW5nfSBpbnB1dCBUaGUgc3RyaW5nIG9mIFVuaWNvZGUgc3ltYm9scy5cblx0ICogQHJldHVybnMge1N0cmluZ30gVGhlIHJlc3VsdGluZyBQdW55Y29kZSBzdHJpbmcgb2YgQVNDSUktb25seSBzeW1ib2xzLlxuXHQgKi9cblx0ZnVuY3Rpb24gZW5jb2RlKGlucHV0KSB7XG5cdFx0dmFyIG4sXG5cdFx0ICAgIGRlbHRhLFxuXHRcdCAgICBoYW5kbGVkQ1BDb3VudCxcblx0XHQgICAgYmFzaWNMZW5ndGgsXG5cdFx0ICAgIGJpYXMsXG5cdFx0ICAgIGosXG5cdFx0ICAgIG0sXG5cdFx0ICAgIHEsXG5cdFx0ICAgIGssXG5cdFx0ICAgIHQsXG5cdFx0ICAgIGN1cnJlbnRWYWx1ZSxcblx0XHQgICAgb3V0cHV0ID0gW10sXG5cdFx0ICAgIC8qKiBgaW5wdXRMZW5ndGhgIHdpbGwgaG9sZCB0aGUgbnVtYmVyIG9mIGNvZGUgcG9pbnRzIGluIGBpbnB1dGAuICovXG5cdFx0ICAgIGlucHV0TGVuZ3RoLFxuXHRcdCAgICAvKiogQ2FjaGVkIGNhbGN1bGF0aW9uIHJlc3VsdHMgKi9cblx0XHQgICAgaGFuZGxlZENQQ291bnRQbHVzT25lLFxuXHRcdCAgICBiYXNlTWludXNULFxuXHRcdCAgICBxTWludXNUO1xuXG5cdFx0Ly8gQ29udmVydCB0aGUgaW5wdXQgaW4gVUNTLTIgdG8gVW5pY29kZVxuXHRcdGlucHV0ID0gdWNzMmRlY29kZShpbnB1dCk7XG5cblx0XHQvLyBDYWNoZSB0aGUgbGVuZ3RoXG5cdFx0aW5wdXRMZW5ndGggPSBpbnB1dC5sZW5ndGg7XG5cblx0XHQvLyBJbml0aWFsaXplIHRoZSBzdGF0ZVxuXHRcdG4gPSBpbml0aWFsTjtcblx0XHRkZWx0YSA9IDA7XG5cdFx0YmlhcyA9IGluaXRpYWxCaWFzO1xuXG5cdFx0Ly8gSGFuZGxlIHRoZSBiYXNpYyBjb2RlIHBvaW50c1xuXHRcdGZvciAoaiA9IDA7IGogPCBpbnB1dExlbmd0aDsgKytqKSB7XG5cdFx0XHRjdXJyZW50VmFsdWUgPSBpbnB1dFtqXTtcblx0XHRcdGlmIChjdXJyZW50VmFsdWUgPCAweDgwKSB7XG5cdFx0XHRcdG91dHB1dC5wdXNoKHN0cmluZ0Zyb21DaGFyQ29kZShjdXJyZW50VmFsdWUpKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRoYW5kbGVkQ1BDb3VudCA9IGJhc2ljTGVuZ3RoID0gb3V0cHV0Lmxlbmd0aDtcblxuXHRcdC8vIGBoYW5kbGVkQ1BDb3VudGAgaXMgdGhlIG51bWJlciBvZiBjb2RlIHBvaW50cyB0aGF0IGhhdmUgYmVlbiBoYW5kbGVkO1xuXHRcdC8vIGBiYXNpY0xlbmd0aGAgaXMgdGhlIG51bWJlciBvZiBiYXNpYyBjb2RlIHBvaW50cy5cblxuXHRcdC8vIEZpbmlzaCB0aGUgYmFzaWMgc3RyaW5nIC0gaWYgaXQgaXMgbm90IGVtcHR5IC0gd2l0aCBhIGRlbGltaXRlclxuXHRcdGlmIChiYXNpY0xlbmd0aCkge1xuXHRcdFx0b3V0cHV0LnB1c2goZGVsaW1pdGVyKTtcblx0XHR9XG5cblx0XHQvLyBNYWluIGVuY29kaW5nIGxvb3A6XG5cdFx0d2hpbGUgKGhhbmRsZWRDUENvdW50IDwgaW5wdXRMZW5ndGgpIHtcblxuXHRcdFx0Ly8gQWxsIG5vbi1iYXNpYyBjb2RlIHBvaW50cyA8IG4gaGF2ZSBiZWVuIGhhbmRsZWQgYWxyZWFkeS4gRmluZCB0aGUgbmV4dFxuXHRcdFx0Ly8gbGFyZ2VyIG9uZTpcblx0XHRcdGZvciAobSA9IG1heEludCwgaiA9IDA7IGogPCBpbnB1dExlbmd0aDsgKytqKSB7XG5cdFx0XHRcdGN1cnJlbnRWYWx1ZSA9IGlucHV0W2pdO1xuXHRcdFx0XHRpZiAoY3VycmVudFZhbHVlID49IG4gJiYgY3VycmVudFZhbHVlIDwgbSkge1xuXHRcdFx0XHRcdG0gPSBjdXJyZW50VmFsdWU7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0Ly8gSW5jcmVhc2UgYGRlbHRhYCBlbm91Z2ggdG8gYWR2YW5jZSB0aGUgZGVjb2RlcidzIDxuLGk+IHN0YXRlIHRvIDxtLDA+LFxuXHRcdFx0Ly8gYnV0IGd1YXJkIGFnYWluc3Qgb3ZlcmZsb3dcblx0XHRcdGhhbmRsZWRDUENvdW50UGx1c09uZSA9IGhhbmRsZWRDUENvdW50ICsgMTtcblx0XHRcdGlmIChtIC0gbiA+IGZsb29yKChtYXhJbnQgLSBkZWx0YSkgLyBoYW5kbGVkQ1BDb3VudFBsdXNPbmUpKSB7XG5cdFx0XHRcdGVycm9yKCdvdmVyZmxvdycpO1xuXHRcdFx0fVxuXG5cdFx0XHRkZWx0YSArPSAobSAtIG4pICogaGFuZGxlZENQQ291bnRQbHVzT25lO1xuXHRcdFx0biA9IG07XG5cblx0XHRcdGZvciAoaiA9IDA7IGogPCBpbnB1dExlbmd0aDsgKytqKSB7XG5cdFx0XHRcdGN1cnJlbnRWYWx1ZSA9IGlucHV0W2pdO1xuXG5cdFx0XHRcdGlmIChjdXJyZW50VmFsdWUgPCBuICYmICsrZGVsdGEgPiBtYXhJbnQpIHtcblx0XHRcdFx0XHRlcnJvcignb3ZlcmZsb3cnKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGlmIChjdXJyZW50VmFsdWUgPT0gbikge1xuXHRcdFx0XHRcdC8vIFJlcHJlc2VudCBkZWx0YSBhcyBhIGdlbmVyYWxpemVkIHZhcmlhYmxlLWxlbmd0aCBpbnRlZ2VyXG5cdFx0XHRcdFx0Zm9yIChxID0gZGVsdGEsIGsgPSBiYXNlOyAvKiBubyBjb25kaXRpb24gKi87IGsgKz0gYmFzZSkge1xuXHRcdFx0XHRcdFx0dCA9IGsgPD0gYmlhcyA/IHRNaW4gOiAoayA+PSBiaWFzICsgdE1heCA/IHRNYXggOiBrIC0gYmlhcyk7XG5cdFx0XHRcdFx0XHRpZiAocSA8IHQpIHtcblx0XHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRxTWludXNUID0gcSAtIHQ7XG5cdFx0XHRcdFx0XHRiYXNlTWludXNUID0gYmFzZSAtIHQ7XG5cdFx0XHRcdFx0XHRvdXRwdXQucHVzaChcblx0XHRcdFx0XHRcdFx0c3RyaW5nRnJvbUNoYXJDb2RlKGRpZ2l0VG9CYXNpYyh0ICsgcU1pbnVzVCAlIGJhc2VNaW51c1QsIDApKVxuXHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdHEgPSBmbG9vcihxTWludXNUIC8gYmFzZU1pbnVzVCk7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0b3V0cHV0LnB1c2goc3RyaW5nRnJvbUNoYXJDb2RlKGRpZ2l0VG9CYXNpYyhxLCAwKSkpO1xuXHRcdFx0XHRcdGJpYXMgPSBhZGFwdChkZWx0YSwgaGFuZGxlZENQQ291bnRQbHVzT25lLCBoYW5kbGVkQ1BDb3VudCA9PSBiYXNpY0xlbmd0aCk7XG5cdFx0XHRcdFx0ZGVsdGEgPSAwO1xuXHRcdFx0XHRcdCsraGFuZGxlZENQQ291bnQ7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0KytkZWx0YTtcblx0XHRcdCsrbjtcblxuXHRcdH1cblx0XHRyZXR1cm4gb3V0cHV0LmpvaW4oJycpO1xuXHR9XG5cblx0LyoqXG5cdCAqIENvbnZlcnRzIGEgUHVueWNvZGUgc3RyaW5nIHJlcHJlc2VudGluZyBhIGRvbWFpbiBuYW1lIG9yIGFuIGVtYWlsIGFkZHJlc3Ncblx0ICogdG8gVW5pY29kZS4gT25seSB0aGUgUHVueWNvZGVkIHBhcnRzIG9mIHRoZSBpbnB1dCB3aWxsIGJlIGNvbnZlcnRlZCwgaS5lLlxuXHQgKiBpdCBkb2Vzbid0IG1hdHRlciBpZiB5b3UgY2FsbCBpdCBvbiBhIHN0cmluZyB0aGF0IGhhcyBhbHJlYWR5IGJlZW5cblx0ICogY29udmVydGVkIHRvIFVuaWNvZGUuXG5cdCAqIEBtZW1iZXJPZiBwdW55Y29kZVxuXHQgKiBAcGFyYW0ge1N0cmluZ30gaW5wdXQgVGhlIFB1bnljb2RlZCBkb21haW4gbmFtZSBvciBlbWFpbCBhZGRyZXNzIHRvXG5cdCAqIGNvbnZlcnQgdG8gVW5pY29kZS5cblx0ICogQHJldHVybnMge1N0cmluZ30gVGhlIFVuaWNvZGUgcmVwcmVzZW50YXRpb24gb2YgdGhlIGdpdmVuIFB1bnljb2RlXG5cdCAqIHN0cmluZy5cblx0ICovXG5cdGZ1bmN0aW9uIHRvVW5pY29kZShpbnB1dCkge1xuXHRcdHJldHVybiBtYXBEb21haW4oaW5wdXQsIGZ1bmN0aW9uKHN0cmluZykge1xuXHRcdFx0cmV0dXJuIHJlZ2V4UHVueWNvZGUudGVzdChzdHJpbmcpXG5cdFx0XHRcdD8gZGVjb2RlKHN0cmluZy5zbGljZSg0KS50b0xvd2VyQ2FzZSgpKVxuXHRcdFx0XHQ6IHN0cmluZztcblx0XHR9KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBDb252ZXJ0cyBhIFVuaWNvZGUgc3RyaW5nIHJlcHJlc2VudGluZyBhIGRvbWFpbiBuYW1lIG9yIGFuIGVtYWlsIGFkZHJlc3MgdG9cblx0ICogUHVueWNvZGUuIE9ubHkgdGhlIG5vbi1BU0NJSSBwYXJ0cyBvZiB0aGUgZG9tYWluIG5hbWUgd2lsbCBiZSBjb252ZXJ0ZWQsXG5cdCAqIGkuZS4gaXQgZG9lc24ndCBtYXR0ZXIgaWYgeW91IGNhbGwgaXQgd2l0aCBhIGRvbWFpbiB0aGF0J3MgYWxyZWFkeSBpblxuXHQgKiBBU0NJSS5cblx0ICogQG1lbWJlck9mIHB1bnljb2RlXG5cdCAqIEBwYXJhbSB7U3RyaW5nfSBpbnB1dCBUaGUgZG9tYWluIG5hbWUgb3IgZW1haWwgYWRkcmVzcyB0byBjb252ZXJ0LCBhcyBhXG5cdCAqIFVuaWNvZGUgc3RyaW5nLlxuXHQgKiBAcmV0dXJucyB7U3RyaW5nfSBUaGUgUHVueWNvZGUgcmVwcmVzZW50YXRpb24gb2YgdGhlIGdpdmVuIGRvbWFpbiBuYW1lIG9yXG5cdCAqIGVtYWlsIGFkZHJlc3MuXG5cdCAqL1xuXHRmdW5jdGlvbiB0b0FTQ0lJKGlucHV0KSB7XG5cdFx0cmV0dXJuIG1hcERvbWFpbihpbnB1dCwgZnVuY3Rpb24oc3RyaW5nKSB7XG5cdFx0XHRyZXR1cm4gcmVnZXhOb25BU0NJSS50ZXN0KHN0cmluZylcblx0XHRcdFx0PyAneG4tLScgKyBlbmNvZGUoc3RyaW5nKVxuXHRcdFx0XHQ6IHN0cmluZztcblx0XHR9KTtcblx0fVxuXG5cdC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuXG5cdC8qKiBEZWZpbmUgdGhlIHB1YmxpYyBBUEkgKi9cblx0cHVueWNvZGUgPSB7XG5cdFx0LyoqXG5cdFx0ICogQSBzdHJpbmcgcmVwcmVzZW50aW5nIHRoZSBjdXJyZW50IFB1bnljb2RlLmpzIHZlcnNpb24gbnVtYmVyLlxuXHRcdCAqIEBtZW1iZXJPZiBwdW55Y29kZVxuXHRcdCAqIEB0eXBlIFN0cmluZ1xuXHRcdCAqL1xuXHRcdCd2ZXJzaW9uJzogJzEuMy4yJyxcblx0XHQvKipcblx0XHQgKiBBbiBvYmplY3Qgb2YgbWV0aG9kcyB0byBjb252ZXJ0IGZyb20gSmF2YVNjcmlwdCdzIGludGVybmFsIGNoYXJhY3RlclxuXHRcdCAqIHJlcHJlc2VudGF0aW9uIChVQ1MtMikgdG8gVW5pY29kZSBjb2RlIHBvaW50cywgYW5kIGJhY2suXG5cdFx0ICogQHNlZSA8aHR0cHM6Ly9tYXRoaWFzYnluZW5zLmJlL25vdGVzL2phdmFzY3JpcHQtZW5jb2Rpbmc+XG5cdFx0ICogQG1lbWJlck9mIHB1bnljb2RlXG5cdFx0ICogQHR5cGUgT2JqZWN0XG5cdFx0ICovXG5cdFx0J3VjczInOiB7XG5cdFx0XHQnZGVjb2RlJzogdWNzMmRlY29kZSxcblx0XHRcdCdlbmNvZGUnOiB1Y3MyZW5jb2RlXG5cdFx0fSxcblx0XHQnZGVjb2RlJzogZGVjb2RlLFxuXHRcdCdlbmNvZGUnOiBlbmNvZGUsXG5cdFx0J3RvQVNDSUknOiB0b0FTQ0lJLFxuXHRcdCd0b1VuaWNvZGUnOiB0b1VuaWNvZGVcblx0fTtcblxuXHQvKiogRXhwb3NlIGBwdW55Y29kZWAgKi9cblx0Ly8gU29tZSBBTUQgYnVpbGQgb3B0aW1pemVycywgbGlrZSByLmpzLCBjaGVjayBmb3Igc3BlY2lmaWMgY29uZGl0aW9uIHBhdHRlcm5zXG5cdC8vIGxpa2UgdGhlIGZvbGxvd2luZzpcblx0aWYgKFxuXHRcdHR5cGVvZiBkZWZpbmUgPT0gJ2Z1bmN0aW9uJyAmJlxuXHRcdHR5cGVvZiBkZWZpbmUuYW1kID09ICdvYmplY3QnICYmXG5cdFx0ZGVmaW5lLmFtZFxuXHQpIHtcblx0XHRkZWZpbmUoJ3B1bnljb2RlJywgZnVuY3Rpb24oKSB7XG5cdFx0XHRyZXR1cm4gcHVueWNvZGU7XG5cdFx0fSk7XG5cdH0gZWxzZSBpZiAoZnJlZUV4cG9ydHMgJiYgZnJlZU1vZHVsZSkge1xuXHRcdGlmIChtb2R1bGUuZXhwb3J0cyA9PSBmcmVlRXhwb3J0cykge1xuXHRcdFx0Ly8gaW4gTm9kZS5qcywgaW8uanMsIG9yIFJpbmdvSlMgdjAuOC4wK1xuXHRcdFx0ZnJlZU1vZHVsZS5leHBvcnRzID0gcHVueWNvZGU7XG5cdFx0fSBlbHNlIHtcblx0XHRcdC8vIGluIE5hcndoYWwgb3IgUmluZ29KUyB2MC43LjAtXG5cdFx0XHRmb3IgKGtleSBpbiBwdW55Y29kZSkge1xuXHRcdFx0XHRwdW55Y29kZS5oYXNPd25Qcm9wZXJ0eShrZXkpICYmIChmcmVlRXhwb3J0c1trZXldID0gcHVueWNvZGVba2V5XSk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9IGVsc2Uge1xuXHRcdC8vIGluIFJoaW5vIG9yIGEgd2ViIGJyb3dzZXJcblx0XHRyb290LnB1bnljb2RlID0gcHVueWNvZGU7XG5cdH1cblxufSh0aGlzKSk7XG4iLCIvLyBDb3B5cmlnaHQgSm95ZW50LCBJbmMuIGFuZCBvdGhlciBOb2RlIGNvbnRyaWJ1dG9ycy5cbi8vXG4vLyBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYVxuLy8gY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZVxuLy8gXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nXG4vLyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsXG4vLyBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0XG4vLyBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGVcbi8vIGZvbGxvd2luZyBjb25kaXRpb25zOlxuLy9cbi8vIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkXG4vLyBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbi8vXG4vLyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTXG4vLyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GXG4vLyBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOXG4vLyBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSxcbi8vIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUlxuLy8gT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRVxuLy8gVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cblxuJ3VzZSBzdHJpY3QnO1xuXG4vLyBJZiBvYmouaGFzT3duUHJvcGVydHkgaGFzIGJlZW4gb3ZlcnJpZGRlbiwgdGhlbiBjYWxsaW5nXG4vLyBvYmouaGFzT3duUHJvcGVydHkocHJvcCkgd2lsbCBicmVhay5cbi8vIFNlZTogaHR0cHM6Ly9naXRodWIuY29tL2pveWVudC9ub2RlL2lzc3Vlcy8xNzA3XG5mdW5jdGlvbiBoYXNPd25Qcm9wZXJ0eShvYmosIHByb3ApIHtcbiAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmosIHByb3ApO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKHFzLCBzZXAsIGVxLCBvcHRpb25zKSB7XG4gIHNlcCA9IHNlcCB8fCAnJic7XG4gIGVxID0gZXEgfHwgJz0nO1xuICB2YXIgb2JqID0ge307XG5cbiAgaWYgKHR5cGVvZiBxcyAhPT0gJ3N0cmluZycgfHwgcXMubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIG9iajtcbiAgfVxuXG4gIHZhciByZWdleHAgPSAvXFwrL2c7XG4gIHFzID0gcXMuc3BsaXQoc2VwKTtcblxuICB2YXIgbWF4S2V5cyA9IDEwMDA7XG4gIGlmIChvcHRpb25zICYmIHR5cGVvZiBvcHRpb25zLm1heEtleXMgPT09ICdudW1iZXInKSB7XG4gICAgbWF4S2V5cyA9IG9wdGlvbnMubWF4S2V5cztcbiAgfVxuXG4gIHZhciBsZW4gPSBxcy5sZW5ndGg7XG4gIC8vIG1heEtleXMgPD0gMCBtZWFucyB0aGF0IHdlIHNob3VsZCBub3QgbGltaXQga2V5cyBjb3VudFxuICBpZiAobWF4S2V5cyA+IDAgJiYgbGVuID4gbWF4S2V5cykge1xuICAgIGxlbiA9IG1heEtleXM7XG4gIH1cblxuICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgKytpKSB7XG4gICAgdmFyIHggPSBxc1tpXS5yZXBsYWNlKHJlZ2V4cCwgJyUyMCcpLFxuICAgICAgICBpZHggPSB4LmluZGV4T2YoZXEpLFxuICAgICAgICBrc3RyLCB2c3RyLCBrLCB2O1xuXG4gICAgaWYgKGlkeCA+PSAwKSB7XG4gICAgICBrc3RyID0geC5zdWJzdHIoMCwgaWR4KTtcbiAgICAgIHZzdHIgPSB4LnN1YnN0cihpZHggKyAxKTtcbiAgICB9IGVsc2Uge1xuICAgICAga3N0ciA9IHg7XG4gICAgICB2c3RyID0gJyc7XG4gICAgfVxuXG4gICAgayA9IGRlY29kZVVSSUNvbXBvbmVudChrc3RyKTtcbiAgICB2ID0gZGVjb2RlVVJJQ29tcG9uZW50KHZzdHIpO1xuXG4gICAgaWYgKCFoYXNPd25Qcm9wZXJ0eShvYmosIGspKSB7XG4gICAgICBvYmpba10gPSB2O1xuICAgIH0gZWxzZSBpZiAoaXNBcnJheShvYmpba10pKSB7XG4gICAgICBvYmpba10ucHVzaCh2KTtcbiAgICB9IGVsc2Uge1xuICAgICAgb2JqW2tdID0gW29ialtrXSwgdl07XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG9iajtcbn07XG5cbnZhciBpc0FycmF5ID0gQXJyYXkuaXNBcnJheSB8fCBmdW5jdGlvbiAoeHMpIHtcbiAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh4cykgPT09ICdbb2JqZWN0IEFycmF5XSc7XG59O1xuIiwiLy8gQ29weXJpZ2h0IEpveWVudCwgSW5jLiBhbmQgb3RoZXIgTm9kZSBjb250cmlidXRvcnMuXG4vL1xuLy8gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGFcbi8vIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGVcbi8vIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZ1xuLy8gd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLFxuLy8gZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdFxuLy8gcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlXG4vLyBmb2xsb3dpbmcgY29uZGl0aW9uczpcbi8vXG4vLyBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZFxuLy8gaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4vL1xuLy8gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTU1xuLy8gT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRlxuLy8gTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTlxuLy8gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sXG4vLyBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1Jcbi8vIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEVcbi8vIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG5cbid1c2Ugc3RyaWN0JztcblxudmFyIHN0cmluZ2lmeVByaW1pdGl2ZSA9IGZ1bmN0aW9uKHYpIHtcbiAgc3dpdGNoICh0eXBlb2Ygdikge1xuICAgIGNhc2UgJ3N0cmluZyc6XG4gICAgICByZXR1cm4gdjtcblxuICAgIGNhc2UgJ2Jvb2xlYW4nOlxuICAgICAgcmV0dXJuIHYgPyAndHJ1ZScgOiAnZmFsc2UnO1xuXG4gICAgY2FzZSAnbnVtYmVyJzpcbiAgICAgIHJldHVybiBpc0Zpbml0ZSh2KSA/IHYgOiAnJztcblxuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gJyc7XG4gIH1cbn07XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24ob2JqLCBzZXAsIGVxLCBuYW1lKSB7XG4gIHNlcCA9IHNlcCB8fCAnJic7XG4gIGVxID0gZXEgfHwgJz0nO1xuICBpZiAob2JqID09PSBudWxsKSB7XG4gICAgb2JqID0gdW5kZWZpbmVkO1xuICB9XG5cbiAgaWYgKHR5cGVvZiBvYmogPT09ICdvYmplY3QnKSB7XG4gICAgcmV0dXJuIG1hcChvYmplY3RLZXlzKG9iaiksIGZ1bmN0aW9uKGspIHtcbiAgICAgIHZhciBrcyA9IGVuY29kZVVSSUNvbXBvbmVudChzdHJpbmdpZnlQcmltaXRpdmUoaykpICsgZXE7XG4gICAgICBpZiAoaXNBcnJheShvYmpba10pKSB7XG4gICAgICAgIHJldHVybiBtYXAob2JqW2tdLCBmdW5jdGlvbih2KSB7XG4gICAgICAgICAgcmV0dXJuIGtzICsgZW5jb2RlVVJJQ29tcG9uZW50KHN0cmluZ2lmeVByaW1pdGl2ZSh2KSk7XG4gICAgICAgIH0pLmpvaW4oc2VwKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBrcyArIGVuY29kZVVSSUNvbXBvbmVudChzdHJpbmdpZnlQcmltaXRpdmUob2JqW2tdKSk7XG4gICAgICB9XG4gICAgfSkuam9pbihzZXApO1xuXG4gIH1cblxuICBpZiAoIW5hbWUpIHJldHVybiAnJztcbiAgcmV0dXJuIGVuY29kZVVSSUNvbXBvbmVudChzdHJpbmdpZnlQcmltaXRpdmUobmFtZSkpICsgZXEgK1xuICAgICAgICAgZW5jb2RlVVJJQ29tcG9uZW50KHN0cmluZ2lmeVByaW1pdGl2ZShvYmopKTtcbn07XG5cbnZhciBpc0FycmF5ID0gQXJyYXkuaXNBcnJheSB8fCBmdW5jdGlvbiAoeHMpIHtcbiAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh4cykgPT09ICdbb2JqZWN0IEFycmF5XSc7XG59O1xuXG5mdW5jdGlvbiBtYXAgKHhzLCBmKSB7XG4gIGlmICh4cy5tYXApIHJldHVybiB4cy5tYXAoZik7XG4gIHZhciByZXMgPSBbXTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCB4cy5sZW5ndGg7IGkrKykge1xuICAgIHJlcy5wdXNoKGYoeHNbaV0sIGkpKTtcbiAgfVxuICByZXR1cm4gcmVzO1xufVxuXG52YXIgb2JqZWN0S2V5cyA9IE9iamVjdC5rZXlzIHx8IGZ1bmN0aW9uIChvYmopIHtcbiAgdmFyIHJlcyA9IFtdO1xuICBmb3IgKHZhciBrZXkgaW4gb2JqKSB7XG4gICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmosIGtleSkpIHJlcy5wdXNoKGtleSk7XG4gIH1cbiAgcmV0dXJuIHJlcztcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbmV4cG9ydHMuZGVjb2RlID0gZXhwb3J0cy5wYXJzZSA9IHJlcXVpcmUoJy4vZGVjb2RlJyk7XG5leHBvcnRzLmVuY29kZSA9IGV4cG9ydHMuc3RyaW5naWZ5ID0gcmVxdWlyZSgnLi9lbmNvZGUnKTtcbiIsIi8vIENvcHlyaWdodCBKb3llbnQsIEluYy4gYW5kIG90aGVyIE5vZGUgY29udHJpYnV0b3JzLlxuLy9cbi8vIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhXG4vLyBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlXG4vLyBcIlNvZnR3YXJlXCIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmdcbi8vIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCxcbi8vIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXRcbi8vIHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZVxuLy8gZm9sbG93aW5nIGNvbmRpdGlvbnM6XG4vL1xuLy8gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWRcbi8vIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuLy9cbi8vIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1Ncbi8vIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0Zcbi8vIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU5cbi8vIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLFxuLy8gREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SXG4vLyBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFXG4vLyBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLlxuXG52YXIgcHVueWNvZGUgPSByZXF1aXJlKCdwdW55Y29kZScpO1xuXG5leHBvcnRzLnBhcnNlID0gdXJsUGFyc2U7XG5leHBvcnRzLnJlc29sdmUgPSB1cmxSZXNvbHZlO1xuZXhwb3J0cy5yZXNvbHZlT2JqZWN0ID0gdXJsUmVzb2x2ZU9iamVjdDtcbmV4cG9ydHMuZm9ybWF0ID0gdXJsRm9ybWF0O1xuXG5leHBvcnRzLlVybCA9IFVybDtcblxuZnVuY3Rpb24gVXJsKCkge1xuICB0aGlzLnByb3RvY29sID0gbnVsbDtcbiAgdGhpcy5zbGFzaGVzID0gbnVsbDtcbiAgdGhpcy5hdXRoID0gbnVsbDtcbiAgdGhpcy5ob3N0ID0gbnVsbDtcbiAgdGhpcy5wb3J0ID0gbnVsbDtcbiAgdGhpcy5ob3N0bmFtZSA9IG51bGw7XG4gIHRoaXMuaGFzaCA9IG51bGw7XG4gIHRoaXMuc2VhcmNoID0gbnVsbDtcbiAgdGhpcy5xdWVyeSA9IG51bGw7XG4gIHRoaXMucGF0aG5hbWUgPSBudWxsO1xuICB0aGlzLnBhdGggPSBudWxsO1xuICB0aGlzLmhyZWYgPSBudWxsO1xufVxuXG4vLyBSZWZlcmVuY2U6IFJGQyAzOTg2LCBSRkMgMTgwOCwgUkZDIDIzOTZcblxuLy8gZGVmaW5lIHRoZXNlIGhlcmUgc28gYXQgbGVhc3QgdGhleSBvbmx5IGhhdmUgdG8gYmVcbi8vIGNvbXBpbGVkIG9uY2Ugb24gdGhlIGZpcnN0IG1vZHVsZSBsb2FkLlxudmFyIHByb3RvY29sUGF0dGVybiA9IC9eKFthLXowLTkuKy1dKzopL2ksXG4gICAgcG9ydFBhdHRlcm4gPSAvOlswLTldKiQvLFxuXG4gICAgLy8gUkZDIDIzOTY6IGNoYXJhY3RlcnMgcmVzZXJ2ZWQgZm9yIGRlbGltaXRpbmcgVVJMcy5cbiAgICAvLyBXZSBhY3R1YWxseSBqdXN0IGF1dG8tZXNjYXBlIHRoZXNlLlxuICAgIGRlbGltcyA9IFsnPCcsICc+JywgJ1wiJywgJ2AnLCAnICcsICdcXHInLCAnXFxuJywgJ1xcdCddLFxuXG4gICAgLy8gUkZDIDIzOTY6IGNoYXJhY3RlcnMgbm90IGFsbG93ZWQgZm9yIHZhcmlvdXMgcmVhc29ucy5cbiAgICB1bndpc2UgPSBbJ3snLCAnfScsICd8JywgJ1xcXFwnLCAnXicsICdgJ10uY29uY2F0KGRlbGltcyksXG5cbiAgICAvLyBBbGxvd2VkIGJ5IFJGQ3MsIGJ1dCBjYXVzZSBvZiBYU1MgYXR0YWNrcy4gIEFsd2F5cyBlc2NhcGUgdGhlc2UuXG4gICAgYXV0b0VzY2FwZSA9IFsnXFwnJ10uY29uY2F0KHVud2lzZSksXG4gICAgLy8gQ2hhcmFjdGVycyB0aGF0IGFyZSBuZXZlciBldmVyIGFsbG93ZWQgaW4gYSBob3N0bmFtZS5cbiAgICAvLyBOb3RlIHRoYXQgYW55IGludmFsaWQgY2hhcnMgYXJlIGFsc28gaGFuZGxlZCwgYnV0IHRoZXNlXG4gICAgLy8gYXJlIHRoZSBvbmVzIHRoYXQgYXJlICpleHBlY3RlZCogdG8gYmUgc2Vlbiwgc28gd2UgZmFzdC1wYXRoXG4gICAgLy8gdGhlbS5cbiAgICBub25Ib3N0Q2hhcnMgPSBbJyUnLCAnLycsICc/JywgJzsnLCAnIyddLmNvbmNhdChhdXRvRXNjYXBlKSxcbiAgICBob3N0RW5kaW5nQ2hhcnMgPSBbJy8nLCAnPycsICcjJ10sXG4gICAgaG9zdG5hbWVNYXhMZW4gPSAyNTUsXG4gICAgaG9zdG5hbWVQYXJ0UGF0dGVybiA9IC9eW2EtejAtOUEtWl8tXXswLDYzfSQvLFxuICAgIGhvc3RuYW1lUGFydFN0YXJ0ID0gL14oW2EtejAtOUEtWl8tXXswLDYzfSkoLiopJC8sXG4gICAgLy8gcHJvdG9jb2xzIHRoYXQgY2FuIGFsbG93IFwidW5zYWZlXCIgYW5kIFwidW53aXNlXCIgY2hhcnMuXG4gICAgdW5zYWZlUHJvdG9jb2wgPSB7XG4gICAgICAnamF2YXNjcmlwdCc6IHRydWUsXG4gICAgICAnamF2YXNjcmlwdDonOiB0cnVlXG4gICAgfSxcbiAgICAvLyBwcm90b2NvbHMgdGhhdCBuZXZlciBoYXZlIGEgaG9zdG5hbWUuXG4gICAgaG9zdGxlc3NQcm90b2NvbCA9IHtcbiAgICAgICdqYXZhc2NyaXB0JzogdHJ1ZSxcbiAgICAgICdqYXZhc2NyaXB0Oic6IHRydWVcbiAgICB9LFxuICAgIC8vIHByb3RvY29scyB0aGF0IGFsd2F5cyBjb250YWluIGEgLy8gYml0LlxuICAgIHNsYXNoZWRQcm90b2NvbCA9IHtcbiAgICAgICdodHRwJzogdHJ1ZSxcbiAgICAgICdodHRwcyc6IHRydWUsXG4gICAgICAnZnRwJzogdHJ1ZSxcbiAgICAgICdnb3BoZXInOiB0cnVlLFxuICAgICAgJ2ZpbGUnOiB0cnVlLFxuICAgICAgJ2h0dHA6JzogdHJ1ZSxcbiAgICAgICdodHRwczonOiB0cnVlLFxuICAgICAgJ2Z0cDonOiB0cnVlLFxuICAgICAgJ2dvcGhlcjonOiB0cnVlLFxuICAgICAgJ2ZpbGU6JzogdHJ1ZVxuICAgIH0sXG4gICAgcXVlcnlzdHJpbmcgPSByZXF1aXJlKCdxdWVyeXN0cmluZycpO1xuXG5mdW5jdGlvbiB1cmxQYXJzZSh1cmwsIHBhcnNlUXVlcnlTdHJpbmcsIHNsYXNoZXNEZW5vdGVIb3N0KSB7XG4gIGlmICh1cmwgJiYgaXNPYmplY3QodXJsKSAmJiB1cmwgaW5zdGFuY2VvZiBVcmwpIHJldHVybiB1cmw7XG5cbiAgdmFyIHUgPSBuZXcgVXJsO1xuICB1LnBhcnNlKHVybCwgcGFyc2VRdWVyeVN0cmluZywgc2xhc2hlc0Rlbm90ZUhvc3QpO1xuICByZXR1cm4gdTtcbn1cblxuVXJsLnByb3RvdHlwZS5wYXJzZSA9IGZ1bmN0aW9uKHVybCwgcGFyc2VRdWVyeVN0cmluZywgc2xhc2hlc0Rlbm90ZUhvc3QpIHtcbiAgaWYgKCFpc1N0cmluZyh1cmwpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlBhcmFtZXRlciAndXJsJyBtdXN0IGJlIGEgc3RyaW5nLCBub3QgXCIgKyB0eXBlb2YgdXJsKTtcbiAgfVxuXG4gIHZhciByZXN0ID0gdXJsO1xuXG4gIC8vIHRyaW0gYmVmb3JlIHByb2NlZWRpbmcuXG4gIC8vIFRoaXMgaXMgdG8gc3VwcG9ydCBwYXJzZSBzdHVmZiBsaWtlIFwiICBodHRwOi8vZm9vLmNvbSAgXFxuXCJcbiAgcmVzdCA9IHJlc3QudHJpbSgpO1xuXG4gIHZhciBwcm90byA9IHByb3RvY29sUGF0dGVybi5leGVjKHJlc3QpO1xuICBpZiAocHJvdG8pIHtcbiAgICBwcm90byA9IHByb3RvWzBdO1xuICAgIHZhciBsb3dlclByb3RvID0gcHJvdG8udG9Mb3dlckNhc2UoKTtcbiAgICB0aGlzLnByb3RvY29sID0gbG93ZXJQcm90bztcbiAgICByZXN0ID0gcmVzdC5zdWJzdHIocHJvdG8ubGVuZ3RoKTtcbiAgfVxuXG4gIC8vIGZpZ3VyZSBvdXQgaWYgaXQncyBnb3QgYSBob3N0XG4gIC8vIHVzZXJAc2VydmVyIGlzICphbHdheXMqIGludGVycHJldGVkIGFzIGEgaG9zdG5hbWUsIGFuZCB1cmxcbiAgLy8gcmVzb2x1dGlvbiB3aWxsIHRyZWF0IC8vZm9vL2JhciBhcyBob3N0PWZvbyxwYXRoPWJhciBiZWNhdXNlIHRoYXQnc1xuICAvLyBob3cgdGhlIGJyb3dzZXIgcmVzb2x2ZXMgcmVsYXRpdmUgVVJMcy5cbiAgaWYgKHNsYXNoZXNEZW5vdGVIb3N0IHx8IHByb3RvIHx8IHJlc3QubWF0Y2goL15cXC9cXC9bXkBcXC9dK0BbXkBcXC9dKy8pKSB7XG4gICAgdmFyIHNsYXNoZXMgPSByZXN0LnN1YnN0cigwLCAyKSA9PT0gJy8vJztcbiAgICBpZiAoc2xhc2hlcyAmJiAhKHByb3RvICYmIGhvc3RsZXNzUHJvdG9jb2xbcHJvdG9dKSkge1xuICAgICAgcmVzdCA9IHJlc3Quc3Vic3RyKDIpO1xuICAgICAgdGhpcy5zbGFzaGVzID0gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICBpZiAoIWhvc3RsZXNzUHJvdG9jb2xbcHJvdG9dICYmXG4gICAgICAoc2xhc2hlcyB8fCAocHJvdG8gJiYgIXNsYXNoZWRQcm90b2NvbFtwcm90b10pKSkge1xuXG4gICAgLy8gdGhlcmUncyBhIGhvc3RuYW1lLlxuICAgIC8vIHRoZSBmaXJzdCBpbnN0YW5jZSBvZiAvLCA/LCA7LCBvciAjIGVuZHMgdGhlIGhvc3QuXG4gICAgLy9cbiAgICAvLyBJZiB0aGVyZSBpcyBhbiBAIGluIHRoZSBob3N0bmFtZSwgdGhlbiBub24taG9zdCBjaGFycyAqYXJlKiBhbGxvd2VkXG4gICAgLy8gdG8gdGhlIGxlZnQgb2YgdGhlIGxhc3QgQCBzaWduLCB1bmxlc3Mgc29tZSBob3N0LWVuZGluZyBjaGFyYWN0ZXJcbiAgICAvLyBjb21lcyAqYmVmb3JlKiB0aGUgQC1zaWduLlxuICAgIC8vIFVSTHMgYXJlIG9ibm94aW91cy5cbiAgICAvL1xuICAgIC8vIGV4OlxuICAgIC8vIGh0dHA6Ly9hQGJAYy8gPT4gdXNlcjphQGIgaG9zdDpjXG4gICAgLy8gaHR0cDovL2FAYj9AYyA9PiB1c2VyOmEgaG9zdDpjIHBhdGg6Lz9AY1xuXG4gICAgLy8gdjAuMTIgVE9ETyhpc2FhY3MpOiBUaGlzIGlzIG5vdCBxdWl0ZSBob3cgQ2hyb21lIGRvZXMgdGhpbmdzLlxuICAgIC8vIFJldmlldyBvdXIgdGVzdCBjYXNlIGFnYWluc3QgYnJvd3NlcnMgbW9yZSBjb21wcmVoZW5zaXZlbHkuXG5cbiAgICAvLyBmaW5kIHRoZSBmaXJzdCBpbnN0YW5jZSBvZiBhbnkgaG9zdEVuZGluZ0NoYXJzXG4gICAgdmFyIGhvc3RFbmQgPSAtMTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGhvc3RFbmRpbmdDaGFycy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGhlYyA9IHJlc3QuaW5kZXhPZihob3N0RW5kaW5nQ2hhcnNbaV0pO1xuICAgICAgaWYgKGhlYyAhPT0gLTEgJiYgKGhvc3RFbmQgPT09IC0xIHx8IGhlYyA8IGhvc3RFbmQpKVxuICAgICAgICBob3N0RW5kID0gaGVjO1xuICAgIH1cblxuICAgIC8vIGF0IHRoaXMgcG9pbnQsIGVpdGhlciB3ZSBoYXZlIGFuIGV4cGxpY2l0IHBvaW50IHdoZXJlIHRoZVxuICAgIC8vIGF1dGggcG9ydGlvbiBjYW5ub3QgZ28gcGFzdCwgb3IgdGhlIGxhc3QgQCBjaGFyIGlzIHRoZSBkZWNpZGVyLlxuICAgIHZhciBhdXRoLCBhdFNpZ247XG4gICAgaWYgKGhvc3RFbmQgPT09IC0xKSB7XG4gICAgICAvLyBhdFNpZ24gY2FuIGJlIGFueXdoZXJlLlxuICAgICAgYXRTaWduID0gcmVzdC5sYXN0SW5kZXhPZignQCcpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBhdFNpZ24gbXVzdCBiZSBpbiBhdXRoIHBvcnRpb24uXG4gICAgICAvLyBodHRwOi8vYUBiL2NAZCA9PiBob3N0OmIgYXV0aDphIHBhdGg6L2NAZFxuICAgICAgYXRTaWduID0gcmVzdC5sYXN0SW5kZXhPZignQCcsIGhvc3RFbmQpO1xuICAgIH1cblxuICAgIC8vIE5vdyB3ZSBoYXZlIGEgcG9ydGlvbiB3aGljaCBpcyBkZWZpbml0ZWx5IHRoZSBhdXRoLlxuICAgIC8vIFB1bGwgdGhhdCBvZmYuXG4gICAgaWYgKGF0U2lnbiAhPT0gLTEpIHtcbiAgICAgIGF1dGggPSByZXN0LnNsaWNlKDAsIGF0U2lnbik7XG4gICAgICByZXN0ID0gcmVzdC5zbGljZShhdFNpZ24gKyAxKTtcbiAgICAgIHRoaXMuYXV0aCA9IGRlY29kZVVSSUNvbXBvbmVudChhdXRoKTtcbiAgICB9XG5cbiAgICAvLyB0aGUgaG9zdCBpcyB0aGUgcmVtYWluaW5nIHRvIHRoZSBsZWZ0IG9mIHRoZSBmaXJzdCBub24taG9zdCBjaGFyXG4gICAgaG9zdEVuZCA9IC0xO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbm9uSG9zdENoYXJzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgaGVjID0gcmVzdC5pbmRleE9mKG5vbkhvc3RDaGFyc1tpXSk7XG4gICAgICBpZiAoaGVjICE9PSAtMSAmJiAoaG9zdEVuZCA9PT0gLTEgfHwgaGVjIDwgaG9zdEVuZCkpXG4gICAgICAgIGhvc3RFbmQgPSBoZWM7XG4gICAgfVxuICAgIC8vIGlmIHdlIHN0aWxsIGhhdmUgbm90IGhpdCBpdCwgdGhlbiB0aGUgZW50aXJlIHRoaW5nIGlzIGEgaG9zdC5cbiAgICBpZiAoaG9zdEVuZCA9PT0gLTEpXG4gICAgICBob3N0RW5kID0gcmVzdC5sZW5ndGg7XG5cbiAgICB0aGlzLmhvc3QgPSByZXN0LnNsaWNlKDAsIGhvc3RFbmQpO1xuICAgIHJlc3QgPSByZXN0LnNsaWNlKGhvc3RFbmQpO1xuXG4gICAgLy8gcHVsbCBvdXQgcG9ydC5cbiAgICB0aGlzLnBhcnNlSG9zdCgpO1xuXG4gICAgLy8gd2UndmUgaW5kaWNhdGVkIHRoYXQgdGhlcmUgaXMgYSBob3N0bmFtZSxcbiAgICAvLyBzbyBldmVuIGlmIGl0J3MgZW1wdHksIGl0IGhhcyB0byBiZSBwcmVzZW50LlxuICAgIHRoaXMuaG9zdG5hbWUgPSB0aGlzLmhvc3RuYW1lIHx8ICcnO1xuXG4gICAgLy8gaWYgaG9zdG5hbWUgYmVnaW5zIHdpdGggWyBhbmQgZW5kcyB3aXRoIF1cbiAgICAvLyBhc3N1bWUgdGhhdCBpdCdzIGFuIElQdjYgYWRkcmVzcy5cbiAgICB2YXIgaXB2Nkhvc3RuYW1lID0gdGhpcy5ob3N0bmFtZVswXSA9PT0gJ1snICYmXG4gICAgICAgIHRoaXMuaG9zdG5hbWVbdGhpcy5ob3N0bmFtZS5sZW5ndGggLSAxXSA9PT0gJ10nO1xuXG4gICAgLy8gdmFsaWRhdGUgYSBsaXR0bGUuXG4gICAgaWYgKCFpcHY2SG9zdG5hbWUpIHtcbiAgICAgIHZhciBob3N0cGFydHMgPSB0aGlzLmhvc3RuYW1lLnNwbGl0KC9cXC4vKTtcbiAgICAgIGZvciAodmFyIGkgPSAwLCBsID0gaG9zdHBhcnRzLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgICAgICB2YXIgcGFydCA9IGhvc3RwYXJ0c1tpXTtcbiAgICAgICAgaWYgKCFwYXJ0KSBjb250aW51ZTtcbiAgICAgICAgaWYgKCFwYXJ0Lm1hdGNoKGhvc3RuYW1lUGFydFBhdHRlcm4pKSB7XG4gICAgICAgICAgdmFyIG5ld3BhcnQgPSAnJztcbiAgICAgICAgICBmb3IgKHZhciBqID0gMCwgayA9IHBhcnQubGVuZ3RoOyBqIDwgazsgaisrKSB7XG4gICAgICAgICAgICBpZiAocGFydC5jaGFyQ29kZUF0KGopID4gMTI3KSB7XG4gICAgICAgICAgICAgIC8vIHdlIHJlcGxhY2Ugbm9uLUFTQ0lJIGNoYXIgd2l0aCBhIHRlbXBvcmFyeSBwbGFjZWhvbGRlclxuICAgICAgICAgICAgICAvLyB3ZSBuZWVkIHRoaXMgdG8gbWFrZSBzdXJlIHNpemUgb2YgaG9zdG5hbWUgaXMgbm90XG4gICAgICAgICAgICAgIC8vIGJyb2tlbiBieSByZXBsYWNpbmcgbm9uLUFTQ0lJIGJ5IG5vdGhpbmdcbiAgICAgICAgICAgICAgbmV3cGFydCArPSAneCc7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBuZXdwYXJ0ICs9IHBhcnRbal07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIC8vIHdlIHRlc3QgYWdhaW4gd2l0aCBBU0NJSSBjaGFyIG9ubHlcbiAgICAgICAgICBpZiAoIW5ld3BhcnQubWF0Y2goaG9zdG5hbWVQYXJ0UGF0dGVybikpIHtcbiAgICAgICAgICAgIHZhciB2YWxpZFBhcnRzID0gaG9zdHBhcnRzLnNsaWNlKDAsIGkpO1xuICAgICAgICAgICAgdmFyIG5vdEhvc3QgPSBob3N0cGFydHMuc2xpY2UoaSArIDEpO1xuICAgICAgICAgICAgdmFyIGJpdCA9IHBhcnQubWF0Y2goaG9zdG5hbWVQYXJ0U3RhcnQpO1xuICAgICAgICAgICAgaWYgKGJpdCkge1xuICAgICAgICAgICAgICB2YWxpZFBhcnRzLnB1c2goYml0WzFdKTtcbiAgICAgICAgICAgICAgbm90SG9zdC51bnNoaWZ0KGJpdFsyXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAobm90SG9zdC5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgcmVzdCA9ICcvJyArIG5vdEhvc3Quam9pbignLicpICsgcmVzdDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuaG9zdG5hbWUgPSB2YWxpZFBhcnRzLmpvaW4oJy4nKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0aGlzLmhvc3RuYW1lLmxlbmd0aCA+IGhvc3RuYW1lTWF4TGVuKSB7XG4gICAgICB0aGlzLmhvc3RuYW1lID0gJyc7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIGhvc3RuYW1lcyBhcmUgYWx3YXlzIGxvd2VyIGNhc2UuXG4gICAgICB0aGlzLmhvc3RuYW1lID0gdGhpcy5ob3N0bmFtZS50b0xvd2VyQ2FzZSgpO1xuICAgIH1cblxuICAgIGlmICghaXB2Nkhvc3RuYW1lKSB7XG4gICAgICAvLyBJRE5BIFN1cHBvcnQ6IFJldHVybnMgYSBwdW55IGNvZGVkIHJlcHJlc2VudGF0aW9uIG9mIFwiZG9tYWluXCIuXG4gICAgICAvLyBJdCBvbmx5IGNvbnZlcnRzIHRoZSBwYXJ0IG9mIHRoZSBkb21haW4gbmFtZSB0aGF0XG4gICAgICAvLyBoYXMgbm9uIEFTQ0lJIGNoYXJhY3RlcnMuIEkuZS4gaXQgZG9zZW50IG1hdHRlciBpZlxuICAgICAgLy8geW91IGNhbGwgaXQgd2l0aCBhIGRvbWFpbiB0aGF0IGFscmVhZHkgaXMgaW4gQVNDSUkuXG4gICAgICB2YXIgZG9tYWluQXJyYXkgPSB0aGlzLmhvc3RuYW1lLnNwbGl0KCcuJyk7XG4gICAgICB2YXIgbmV3T3V0ID0gW107XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGRvbWFpbkFycmF5Lmxlbmd0aDsgKytpKSB7XG4gICAgICAgIHZhciBzID0gZG9tYWluQXJyYXlbaV07XG4gICAgICAgIG5ld091dC5wdXNoKHMubWF0Y2goL1teQS1aYS16MC05Xy1dLykgP1xuICAgICAgICAgICAgJ3huLS0nICsgcHVueWNvZGUuZW5jb2RlKHMpIDogcyk7XG4gICAgICB9XG4gICAgICB0aGlzLmhvc3RuYW1lID0gbmV3T3V0LmpvaW4oJy4nKTtcbiAgICB9XG5cbiAgICB2YXIgcCA9IHRoaXMucG9ydCA/ICc6JyArIHRoaXMucG9ydCA6ICcnO1xuICAgIHZhciBoID0gdGhpcy5ob3N0bmFtZSB8fCAnJztcbiAgICB0aGlzLmhvc3QgPSBoICsgcDtcbiAgICB0aGlzLmhyZWYgKz0gdGhpcy5ob3N0O1xuXG4gICAgLy8gc3RyaXAgWyBhbmQgXSBmcm9tIHRoZSBob3N0bmFtZVxuICAgIC8vIHRoZSBob3N0IGZpZWxkIHN0aWxsIHJldGFpbnMgdGhlbSwgdGhvdWdoXG4gICAgaWYgKGlwdjZIb3N0bmFtZSkge1xuICAgICAgdGhpcy5ob3N0bmFtZSA9IHRoaXMuaG9zdG5hbWUuc3Vic3RyKDEsIHRoaXMuaG9zdG5hbWUubGVuZ3RoIC0gMik7XG4gICAgICBpZiAocmVzdFswXSAhPT0gJy8nKSB7XG4gICAgICAgIHJlc3QgPSAnLycgKyByZXN0O1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIG5vdyByZXN0IGlzIHNldCB0byB0aGUgcG9zdC1ob3N0IHN0dWZmLlxuICAvLyBjaG9wIG9mZiBhbnkgZGVsaW0gY2hhcnMuXG4gIGlmICghdW5zYWZlUHJvdG9jb2xbbG93ZXJQcm90b10pIHtcblxuICAgIC8vIEZpcnN0LCBtYWtlIDEwMCUgc3VyZSB0aGF0IGFueSBcImF1dG9Fc2NhcGVcIiBjaGFycyBnZXRcbiAgICAvLyBlc2NhcGVkLCBldmVuIGlmIGVuY29kZVVSSUNvbXBvbmVudCBkb2Vzbid0IHRoaW5rIHRoZXlcbiAgICAvLyBuZWVkIHRvIGJlLlxuICAgIGZvciAodmFyIGkgPSAwLCBsID0gYXV0b0VzY2FwZS5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICAgIHZhciBhZSA9IGF1dG9Fc2NhcGVbaV07XG4gICAgICB2YXIgZXNjID0gZW5jb2RlVVJJQ29tcG9uZW50KGFlKTtcbiAgICAgIGlmIChlc2MgPT09IGFlKSB7XG4gICAgICAgIGVzYyA9IGVzY2FwZShhZSk7XG4gICAgICB9XG4gICAgICByZXN0ID0gcmVzdC5zcGxpdChhZSkuam9pbihlc2MpO1xuICAgIH1cbiAgfVxuXG5cbiAgLy8gY2hvcCBvZmYgZnJvbSB0aGUgdGFpbCBmaXJzdC5cbiAgdmFyIGhhc2ggPSByZXN0LmluZGV4T2YoJyMnKTtcbiAgaWYgKGhhc2ggIT09IC0xKSB7XG4gICAgLy8gZ290IGEgZnJhZ21lbnQgc3RyaW5nLlxuICAgIHRoaXMuaGFzaCA9IHJlc3Quc3Vic3RyKGhhc2gpO1xuICAgIHJlc3QgPSByZXN0LnNsaWNlKDAsIGhhc2gpO1xuICB9XG4gIHZhciBxbSA9IHJlc3QuaW5kZXhPZignPycpO1xuICBpZiAocW0gIT09IC0xKSB7XG4gICAgdGhpcy5zZWFyY2ggPSByZXN0LnN1YnN0cihxbSk7XG4gICAgdGhpcy5xdWVyeSA9IHJlc3Quc3Vic3RyKHFtICsgMSk7XG4gICAgaWYgKHBhcnNlUXVlcnlTdHJpbmcpIHtcbiAgICAgIHRoaXMucXVlcnkgPSBxdWVyeXN0cmluZy5wYXJzZSh0aGlzLnF1ZXJ5KTtcbiAgICB9XG4gICAgcmVzdCA9IHJlc3Quc2xpY2UoMCwgcW0pO1xuICB9IGVsc2UgaWYgKHBhcnNlUXVlcnlTdHJpbmcpIHtcbiAgICAvLyBubyBxdWVyeSBzdHJpbmcsIGJ1dCBwYXJzZVF1ZXJ5U3RyaW5nIHN0aWxsIHJlcXVlc3RlZFxuICAgIHRoaXMuc2VhcmNoID0gJyc7XG4gICAgdGhpcy5xdWVyeSA9IHt9O1xuICB9XG4gIGlmIChyZXN0KSB0aGlzLnBhdGhuYW1lID0gcmVzdDtcbiAgaWYgKHNsYXNoZWRQcm90b2NvbFtsb3dlclByb3RvXSAmJlxuICAgICAgdGhpcy5ob3N0bmFtZSAmJiAhdGhpcy5wYXRobmFtZSkge1xuICAgIHRoaXMucGF0aG5hbWUgPSAnLyc7XG4gIH1cblxuICAvL3RvIHN1cHBvcnQgaHR0cC5yZXF1ZXN0XG4gIGlmICh0aGlzLnBhdGhuYW1lIHx8IHRoaXMuc2VhcmNoKSB7XG4gICAgdmFyIHAgPSB0aGlzLnBhdGhuYW1lIHx8ICcnO1xuICAgIHZhciBzID0gdGhpcy5zZWFyY2ggfHwgJyc7XG4gICAgdGhpcy5wYXRoID0gcCArIHM7XG4gIH1cblxuICAvLyBmaW5hbGx5LCByZWNvbnN0cnVjdCB0aGUgaHJlZiBiYXNlZCBvbiB3aGF0IGhhcyBiZWVuIHZhbGlkYXRlZC5cbiAgdGhpcy5ocmVmID0gdGhpcy5mb3JtYXQoKTtcbiAgcmV0dXJuIHRoaXM7XG59O1xuXG4vLyBmb3JtYXQgYSBwYXJzZWQgb2JqZWN0IGludG8gYSB1cmwgc3RyaW5nXG5mdW5jdGlvbiB1cmxGb3JtYXQob2JqKSB7XG4gIC8vIGVuc3VyZSBpdCdzIGFuIG9iamVjdCwgYW5kIG5vdCBhIHN0cmluZyB1cmwuXG4gIC8vIElmIGl0J3MgYW4gb2JqLCB0aGlzIGlzIGEgbm8tb3AuXG4gIC8vIHRoaXMgd2F5LCB5b3UgY2FuIGNhbGwgdXJsX2Zvcm1hdCgpIG9uIHN0cmluZ3NcbiAgLy8gdG8gY2xlYW4gdXAgcG90ZW50aWFsbHkgd29ua3kgdXJscy5cbiAgaWYgKGlzU3RyaW5nKG9iaikpIG9iaiA9IHVybFBhcnNlKG9iaik7XG4gIGlmICghKG9iaiBpbnN0YW5jZW9mIFVybCkpIHJldHVybiBVcmwucHJvdG90eXBlLmZvcm1hdC5jYWxsKG9iaik7XG4gIHJldHVybiBvYmouZm9ybWF0KCk7XG59XG5cblVybC5wcm90b3R5cGUuZm9ybWF0ID0gZnVuY3Rpb24oKSB7XG4gIHZhciBhdXRoID0gdGhpcy5hdXRoIHx8ICcnO1xuICBpZiAoYXV0aCkge1xuICAgIGF1dGggPSBlbmNvZGVVUklDb21wb25lbnQoYXV0aCk7XG4gICAgYXV0aCA9IGF1dGgucmVwbGFjZSgvJTNBL2ksICc6Jyk7XG4gICAgYXV0aCArPSAnQCc7XG4gIH1cblxuICB2YXIgcHJvdG9jb2wgPSB0aGlzLnByb3RvY29sIHx8ICcnLFxuICAgICAgcGF0aG5hbWUgPSB0aGlzLnBhdGhuYW1lIHx8ICcnLFxuICAgICAgaGFzaCA9IHRoaXMuaGFzaCB8fCAnJyxcbiAgICAgIGhvc3QgPSBmYWxzZSxcbiAgICAgIHF1ZXJ5ID0gJyc7XG5cbiAgaWYgKHRoaXMuaG9zdCkge1xuICAgIGhvc3QgPSBhdXRoICsgdGhpcy5ob3N0O1xuICB9IGVsc2UgaWYgKHRoaXMuaG9zdG5hbWUpIHtcbiAgICBob3N0ID0gYXV0aCArICh0aGlzLmhvc3RuYW1lLmluZGV4T2YoJzonKSA9PT0gLTEgP1xuICAgICAgICB0aGlzLmhvc3RuYW1lIDpcbiAgICAgICAgJ1snICsgdGhpcy5ob3N0bmFtZSArICddJyk7XG4gICAgaWYgKHRoaXMucG9ydCkge1xuICAgICAgaG9zdCArPSAnOicgKyB0aGlzLnBvcnQ7XG4gICAgfVxuICB9XG5cbiAgaWYgKHRoaXMucXVlcnkgJiZcbiAgICAgIGlzT2JqZWN0KHRoaXMucXVlcnkpICYmXG4gICAgICBPYmplY3Qua2V5cyh0aGlzLnF1ZXJ5KS5sZW5ndGgpIHtcbiAgICBxdWVyeSA9IHF1ZXJ5c3RyaW5nLnN0cmluZ2lmeSh0aGlzLnF1ZXJ5KTtcbiAgfVxuXG4gIHZhciBzZWFyY2ggPSB0aGlzLnNlYXJjaCB8fCAocXVlcnkgJiYgKCc/JyArIHF1ZXJ5KSkgfHwgJyc7XG5cbiAgaWYgKHByb3RvY29sICYmIHByb3RvY29sLnN1YnN0cigtMSkgIT09ICc6JykgcHJvdG9jb2wgKz0gJzonO1xuXG4gIC8vIG9ubHkgdGhlIHNsYXNoZWRQcm90b2NvbHMgZ2V0IHRoZSAvLy4gIE5vdCBtYWlsdG86LCB4bXBwOiwgZXRjLlxuICAvLyB1bmxlc3MgdGhleSBoYWQgdGhlbSB0byBiZWdpbiB3aXRoLlxuICBpZiAodGhpcy5zbGFzaGVzIHx8XG4gICAgICAoIXByb3RvY29sIHx8IHNsYXNoZWRQcm90b2NvbFtwcm90b2NvbF0pICYmIGhvc3QgIT09IGZhbHNlKSB7XG4gICAgaG9zdCA9ICcvLycgKyAoaG9zdCB8fCAnJyk7XG4gICAgaWYgKHBhdGhuYW1lICYmIHBhdGhuYW1lLmNoYXJBdCgwKSAhPT0gJy8nKSBwYXRobmFtZSA9ICcvJyArIHBhdGhuYW1lO1xuICB9IGVsc2UgaWYgKCFob3N0KSB7XG4gICAgaG9zdCA9ICcnO1xuICB9XG5cbiAgaWYgKGhhc2ggJiYgaGFzaC5jaGFyQXQoMCkgIT09ICcjJykgaGFzaCA9ICcjJyArIGhhc2g7XG4gIGlmIChzZWFyY2ggJiYgc2VhcmNoLmNoYXJBdCgwKSAhPT0gJz8nKSBzZWFyY2ggPSAnPycgKyBzZWFyY2g7XG5cbiAgcGF0aG5hbWUgPSBwYXRobmFtZS5yZXBsYWNlKC9bPyNdL2csIGZ1bmN0aW9uKG1hdGNoKSB7XG4gICAgcmV0dXJuIGVuY29kZVVSSUNvbXBvbmVudChtYXRjaCk7XG4gIH0pO1xuICBzZWFyY2ggPSBzZWFyY2gucmVwbGFjZSgnIycsICclMjMnKTtcblxuICByZXR1cm4gcHJvdG9jb2wgKyBob3N0ICsgcGF0aG5hbWUgKyBzZWFyY2ggKyBoYXNoO1xufTtcblxuZnVuY3Rpb24gdXJsUmVzb2x2ZShzb3VyY2UsIHJlbGF0aXZlKSB7XG4gIHJldHVybiB1cmxQYXJzZShzb3VyY2UsIGZhbHNlLCB0cnVlKS5yZXNvbHZlKHJlbGF0aXZlKTtcbn1cblxuVXJsLnByb3RvdHlwZS5yZXNvbHZlID0gZnVuY3Rpb24ocmVsYXRpdmUpIHtcbiAgcmV0dXJuIHRoaXMucmVzb2x2ZU9iamVjdCh1cmxQYXJzZShyZWxhdGl2ZSwgZmFsc2UsIHRydWUpKS5mb3JtYXQoKTtcbn07XG5cbmZ1bmN0aW9uIHVybFJlc29sdmVPYmplY3Qoc291cmNlLCByZWxhdGl2ZSkge1xuICBpZiAoIXNvdXJjZSkgcmV0dXJuIHJlbGF0aXZlO1xuICByZXR1cm4gdXJsUGFyc2Uoc291cmNlLCBmYWxzZSwgdHJ1ZSkucmVzb2x2ZU9iamVjdChyZWxhdGl2ZSk7XG59XG5cblVybC5wcm90b3R5cGUucmVzb2x2ZU9iamVjdCA9IGZ1bmN0aW9uKHJlbGF0aXZlKSB7XG4gIGlmIChpc1N0cmluZyhyZWxhdGl2ZSkpIHtcbiAgICB2YXIgcmVsID0gbmV3IFVybCgpO1xuICAgIHJlbC5wYXJzZShyZWxhdGl2ZSwgZmFsc2UsIHRydWUpO1xuICAgIHJlbGF0aXZlID0gcmVsO1xuICB9XG5cbiAgdmFyIHJlc3VsdCA9IG5ldyBVcmwoKTtcbiAgT2JqZWN0LmtleXModGhpcykuZm9yRWFjaChmdW5jdGlvbihrKSB7XG4gICAgcmVzdWx0W2tdID0gdGhpc1trXTtcbiAgfSwgdGhpcyk7XG5cbiAgLy8gaGFzaCBpcyBhbHdheXMgb3ZlcnJpZGRlbiwgbm8gbWF0dGVyIHdoYXQuXG4gIC8vIGV2ZW4gaHJlZj1cIlwiIHdpbGwgcmVtb3ZlIGl0LlxuICByZXN1bHQuaGFzaCA9IHJlbGF0aXZlLmhhc2g7XG5cbiAgLy8gaWYgdGhlIHJlbGF0aXZlIHVybCBpcyBlbXB0eSwgdGhlbiB0aGVyZSdzIG5vdGhpbmcgbGVmdCB0byBkbyBoZXJlLlxuICBpZiAocmVsYXRpdmUuaHJlZiA9PT0gJycpIHtcbiAgICByZXN1bHQuaHJlZiA9IHJlc3VsdC5mb3JtYXQoKTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgLy8gaHJlZnMgbGlrZSAvL2Zvby9iYXIgYWx3YXlzIGN1dCB0byB0aGUgcHJvdG9jb2wuXG4gIGlmIChyZWxhdGl2ZS5zbGFzaGVzICYmICFyZWxhdGl2ZS5wcm90b2NvbCkge1xuICAgIC8vIHRha2UgZXZlcnl0aGluZyBleGNlcHQgdGhlIHByb3RvY29sIGZyb20gcmVsYXRpdmVcbiAgICBPYmplY3Qua2V5cyhyZWxhdGl2ZSkuZm9yRWFjaChmdW5jdGlvbihrKSB7XG4gICAgICBpZiAoayAhPT0gJ3Byb3RvY29sJylcbiAgICAgICAgcmVzdWx0W2tdID0gcmVsYXRpdmVba107XG4gICAgfSk7XG5cbiAgICAvL3VybFBhcnNlIGFwcGVuZHMgdHJhaWxpbmcgLyB0byB1cmxzIGxpa2UgaHR0cDovL3d3dy5leGFtcGxlLmNvbVxuICAgIGlmIChzbGFzaGVkUHJvdG9jb2xbcmVzdWx0LnByb3RvY29sXSAmJlxuICAgICAgICByZXN1bHQuaG9zdG5hbWUgJiYgIXJlc3VsdC5wYXRobmFtZSkge1xuICAgICAgcmVzdWx0LnBhdGggPSByZXN1bHQucGF0aG5hbWUgPSAnLyc7XG4gICAgfVxuXG4gICAgcmVzdWx0LmhyZWYgPSByZXN1bHQuZm9ybWF0KCk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIGlmIChyZWxhdGl2ZS5wcm90b2NvbCAmJiByZWxhdGl2ZS5wcm90b2NvbCAhPT0gcmVzdWx0LnByb3RvY29sKSB7XG4gICAgLy8gaWYgaXQncyBhIGtub3duIHVybCBwcm90b2NvbCwgdGhlbiBjaGFuZ2luZ1xuICAgIC8vIHRoZSBwcm90b2NvbCBkb2VzIHdlaXJkIHRoaW5nc1xuICAgIC8vIGZpcnN0LCBpZiBpdCdzIG5vdCBmaWxlOiwgdGhlbiB3ZSBNVVNUIGhhdmUgYSBob3N0LFxuICAgIC8vIGFuZCBpZiB0aGVyZSB3YXMgYSBwYXRoXG4gICAgLy8gdG8gYmVnaW4gd2l0aCwgdGhlbiB3ZSBNVVNUIGhhdmUgYSBwYXRoLlxuICAgIC8vIGlmIGl0IGlzIGZpbGU6LCB0aGVuIHRoZSBob3N0IGlzIGRyb3BwZWQsXG4gICAgLy8gYmVjYXVzZSB0aGF0J3Mga25vd24gdG8gYmUgaG9zdGxlc3MuXG4gICAgLy8gYW55dGhpbmcgZWxzZSBpcyBhc3N1bWVkIHRvIGJlIGFic29sdXRlLlxuICAgIGlmICghc2xhc2hlZFByb3RvY29sW3JlbGF0aXZlLnByb3RvY29sXSkge1xuICAgICAgT2JqZWN0LmtleXMocmVsYXRpdmUpLmZvckVhY2goZnVuY3Rpb24oaykge1xuICAgICAgICByZXN1bHRba10gPSByZWxhdGl2ZVtrXTtcbiAgICAgIH0pO1xuICAgICAgcmVzdWx0LmhyZWYgPSByZXN1bHQuZm9ybWF0KCk7XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIHJlc3VsdC5wcm90b2NvbCA9IHJlbGF0aXZlLnByb3RvY29sO1xuICAgIGlmICghcmVsYXRpdmUuaG9zdCAmJiAhaG9zdGxlc3NQcm90b2NvbFtyZWxhdGl2ZS5wcm90b2NvbF0pIHtcbiAgICAgIHZhciByZWxQYXRoID0gKHJlbGF0aXZlLnBhdGhuYW1lIHx8ICcnKS5zcGxpdCgnLycpO1xuICAgICAgd2hpbGUgKHJlbFBhdGgubGVuZ3RoICYmICEocmVsYXRpdmUuaG9zdCA9IHJlbFBhdGguc2hpZnQoKSkpO1xuICAgICAgaWYgKCFyZWxhdGl2ZS5ob3N0KSByZWxhdGl2ZS5ob3N0ID0gJyc7XG4gICAgICBpZiAoIXJlbGF0aXZlLmhvc3RuYW1lKSByZWxhdGl2ZS5ob3N0bmFtZSA9ICcnO1xuICAgICAgaWYgKHJlbFBhdGhbMF0gIT09ICcnKSByZWxQYXRoLnVuc2hpZnQoJycpO1xuICAgICAgaWYgKHJlbFBhdGgubGVuZ3RoIDwgMikgcmVsUGF0aC51bnNoaWZ0KCcnKTtcbiAgICAgIHJlc3VsdC5wYXRobmFtZSA9IHJlbFBhdGguam9pbignLycpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXN1bHQucGF0aG5hbWUgPSByZWxhdGl2ZS5wYXRobmFtZTtcbiAgICB9XG4gICAgcmVzdWx0LnNlYXJjaCA9IHJlbGF0aXZlLnNlYXJjaDtcbiAgICByZXN1bHQucXVlcnkgPSByZWxhdGl2ZS5xdWVyeTtcbiAgICByZXN1bHQuaG9zdCA9IHJlbGF0aXZlLmhvc3QgfHwgJyc7XG4gICAgcmVzdWx0LmF1dGggPSByZWxhdGl2ZS5hdXRoO1xuICAgIHJlc3VsdC5ob3N0bmFtZSA9IHJlbGF0aXZlLmhvc3RuYW1lIHx8IHJlbGF0aXZlLmhvc3Q7XG4gICAgcmVzdWx0LnBvcnQgPSByZWxhdGl2ZS5wb3J0O1xuICAgIC8vIHRvIHN1cHBvcnQgaHR0cC5yZXF1ZXN0XG4gICAgaWYgKHJlc3VsdC5wYXRobmFtZSB8fCByZXN1bHQuc2VhcmNoKSB7XG4gICAgICB2YXIgcCA9IHJlc3VsdC5wYXRobmFtZSB8fCAnJztcbiAgICAgIHZhciBzID0gcmVzdWx0LnNlYXJjaCB8fCAnJztcbiAgICAgIHJlc3VsdC5wYXRoID0gcCArIHM7XG4gICAgfVxuICAgIHJlc3VsdC5zbGFzaGVzID0gcmVzdWx0LnNsYXNoZXMgfHwgcmVsYXRpdmUuc2xhc2hlcztcbiAgICByZXN1bHQuaHJlZiA9IHJlc3VsdC5mb3JtYXQoKTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgdmFyIGlzU291cmNlQWJzID0gKHJlc3VsdC5wYXRobmFtZSAmJiByZXN1bHQucGF0aG5hbWUuY2hhckF0KDApID09PSAnLycpLFxuICAgICAgaXNSZWxBYnMgPSAoXG4gICAgICAgICAgcmVsYXRpdmUuaG9zdCB8fFxuICAgICAgICAgIHJlbGF0aXZlLnBhdGhuYW1lICYmIHJlbGF0aXZlLnBhdGhuYW1lLmNoYXJBdCgwKSA9PT0gJy8nXG4gICAgICApLFxuICAgICAgbXVzdEVuZEFicyA9IChpc1JlbEFicyB8fCBpc1NvdXJjZUFicyB8fFxuICAgICAgICAgICAgICAgICAgICAocmVzdWx0Lmhvc3QgJiYgcmVsYXRpdmUucGF0aG5hbWUpKSxcbiAgICAgIHJlbW92ZUFsbERvdHMgPSBtdXN0RW5kQWJzLFxuICAgICAgc3JjUGF0aCA9IHJlc3VsdC5wYXRobmFtZSAmJiByZXN1bHQucGF0aG5hbWUuc3BsaXQoJy8nKSB8fCBbXSxcbiAgICAgIHJlbFBhdGggPSByZWxhdGl2ZS5wYXRobmFtZSAmJiByZWxhdGl2ZS5wYXRobmFtZS5zcGxpdCgnLycpIHx8IFtdLFxuICAgICAgcHN5Y2hvdGljID0gcmVzdWx0LnByb3RvY29sICYmICFzbGFzaGVkUHJvdG9jb2xbcmVzdWx0LnByb3RvY29sXTtcblxuICAvLyBpZiB0aGUgdXJsIGlzIGEgbm9uLXNsYXNoZWQgdXJsLCB0aGVuIHJlbGF0aXZlXG4gIC8vIGxpbmtzIGxpa2UgLi4vLi4gc2hvdWxkIGJlIGFibGVcbiAgLy8gdG8gY3Jhd2wgdXAgdG8gdGhlIGhvc3RuYW1lLCBhcyB3ZWxsLiAgVGhpcyBpcyBzdHJhbmdlLlxuICAvLyByZXN1bHQucHJvdG9jb2wgaGFzIGFscmVhZHkgYmVlbiBzZXQgYnkgbm93LlxuICAvLyBMYXRlciBvbiwgcHV0IHRoZSBmaXJzdCBwYXRoIHBhcnQgaW50byB0aGUgaG9zdCBmaWVsZC5cbiAgaWYgKHBzeWNob3RpYykge1xuICAgIHJlc3VsdC5ob3N0bmFtZSA9ICcnO1xuICAgIHJlc3VsdC5wb3J0ID0gbnVsbDtcbiAgICBpZiAocmVzdWx0Lmhvc3QpIHtcbiAgICAgIGlmIChzcmNQYXRoWzBdID09PSAnJykgc3JjUGF0aFswXSA9IHJlc3VsdC5ob3N0O1xuICAgICAgZWxzZSBzcmNQYXRoLnVuc2hpZnQocmVzdWx0Lmhvc3QpO1xuICAgIH1cbiAgICByZXN1bHQuaG9zdCA9ICcnO1xuICAgIGlmIChyZWxhdGl2ZS5wcm90b2NvbCkge1xuICAgICAgcmVsYXRpdmUuaG9zdG5hbWUgPSBudWxsO1xuICAgICAgcmVsYXRpdmUucG9ydCA9IG51bGw7XG4gICAgICBpZiAocmVsYXRpdmUuaG9zdCkge1xuICAgICAgICBpZiAocmVsUGF0aFswXSA9PT0gJycpIHJlbFBhdGhbMF0gPSByZWxhdGl2ZS5ob3N0O1xuICAgICAgICBlbHNlIHJlbFBhdGgudW5zaGlmdChyZWxhdGl2ZS5ob3N0KTtcbiAgICAgIH1cbiAgICAgIHJlbGF0aXZlLmhvc3QgPSBudWxsO1xuICAgIH1cbiAgICBtdXN0RW5kQWJzID0gbXVzdEVuZEFicyAmJiAocmVsUGF0aFswXSA9PT0gJycgfHwgc3JjUGF0aFswXSA9PT0gJycpO1xuICB9XG5cbiAgaWYgKGlzUmVsQWJzKSB7XG4gICAgLy8gaXQncyBhYnNvbHV0ZS5cbiAgICByZXN1bHQuaG9zdCA9IChyZWxhdGl2ZS5ob3N0IHx8IHJlbGF0aXZlLmhvc3QgPT09ICcnKSA/XG4gICAgICAgICAgICAgICAgICByZWxhdGl2ZS5ob3N0IDogcmVzdWx0Lmhvc3Q7XG4gICAgcmVzdWx0Lmhvc3RuYW1lID0gKHJlbGF0aXZlLmhvc3RuYW1lIHx8IHJlbGF0aXZlLmhvc3RuYW1lID09PSAnJykgP1xuICAgICAgICAgICAgICAgICAgICAgIHJlbGF0aXZlLmhvc3RuYW1lIDogcmVzdWx0Lmhvc3RuYW1lO1xuICAgIHJlc3VsdC5zZWFyY2ggPSByZWxhdGl2ZS5zZWFyY2g7XG4gICAgcmVzdWx0LnF1ZXJ5ID0gcmVsYXRpdmUucXVlcnk7XG4gICAgc3JjUGF0aCA9IHJlbFBhdGg7XG4gICAgLy8gZmFsbCB0aHJvdWdoIHRvIHRoZSBkb3QtaGFuZGxpbmcgYmVsb3cuXG4gIH0gZWxzZSBpZiAocmVsUGF0aC5sZW5ndGgpIHtcbiAgICAvLyBpdCdzIHJlbGF0aXZlXG4gICAgLy8gdGhyb3cgYXdheSB0aGUgZXhpc3RpbmcgZmlsZSwgYW5kIHRha2UgdGhlIG5ldyBwYXRoIGluc3RlYWQuXG4gICAgaWYgKCFzcmNQYXRoKSBzcmNQYXRoID0gW107XG4gICAgc3JjUGF0aC5wb3AoKTtcbiAgICBzcmNQYXRoID0gc3JjUGF0aC5jb25jYXQocmVsUGF0aCk7XG4gICAgcmVzdWx0LnNlYXJjaCA9IHJlbGF0aXZlLnNlYXJjaDtcbiAgICByZXN1bHQucXVlcnkgPSByZWxhdGl2ZS5xdWVyeTtcbiAgfSBlbHNlIGlmICghaXNOdWxsT3JVbmRlZmluZWQocmVsYXRpdmUuc2VhcmNoKSkge1xuICAgIC8vIGp1c3QgcHVsbCBvdXQgdGhlIHNlYXJjaC5cbiAgICAvLyBsaWtlIGhyZWY9Jz9mb28nLlxuICAgIC8vIFB1dCB0aGlzIGFmdGVyIHRoZSBvdGhlciB0d28gY2FzZXMgYmVjYXVzZSBpdCBzaW1wbGlmaWVzIHRoZSBib29sZWFuc1xuICAgIGlmIChwc3ljaG90aWMpIHtcbiAgICAgIHJlc3VsdC5ob3N0bmFtZSA9IHJlc3VsdC5ob3N0ID0gc3JjUGF0aC5zaGlmdCgpO1xuICAgICAgLy9vY2NhdGlvbmFseSB0aGUgYXV0aCBjYW4gZ2V0IHN0dWNrIG9ubHkgaW4gaG9zdFxuICAgICAgLy90aGlzIGVzcGVjaWFseSBoYXBwZW5zIGluIGNhc2VzIGxpa2VcbiAgICAgIC8vdXJsLnJlc29sdmVPYmplY3QoJ21haWx0bzpsb2NhbDFAZG9tYWluMScsICdsb2NhbDJAZG9tYWluMicpXG4gICAgICB2YXIgYXV0aEluSG9zdCA9IHJlc3VsdC5ob3N0ICYmIHJlc3VsdC5ob3N0LmluZGV4T2YoJ0AnKSA+IDAgP1xuICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQuaG9zdC5zcGxpdCgnQCcpIDogZmFsc2U7XG4gICAgICBpZiAoYXV0aEluSG9zdCkge1xuICAgICAgICByZXN1bHQuYXV0aCA9IGF1dGhJbkhvc3Quc2hpZnQoKTtcbiAgICAgICAgcmVzdWx0Lmhvc3QgPSByZXN1bHQuaG9zdG5hbWUgPSBhdXRoSW5Ib3N0LnNoaWZ0KCk7XG4gICAgICB9XG4gICAgfVxuICAgIHJlc3VsdC5zZWFyY2ggPSByZWxhdGl2ZS5zZWFyY2g7XG4gICAgcmVzdWx0LnF1ZXJ5ID0gcmVsYXRpdmUucXVlcnk7XG4gICAgLy90byBzdXBwb3J0IGh0dHAucmVxdWVzdFxuICAgIGlmICghaXNOdWxsKHJlc3VsdC5wYXRobmFtZSkgfHwgIWlzTnVsbChyZXN1bHQuc2VhcmNoKSkge1xuICAgICAgcmVzdWx0LnBhdGggPSAocmVzdWx0LnBhdGhuYW1lID8gcmVzdWx0LnBhdGhuYW1lIDogJycpICtcbiAgICAgICAgICAgICAgICAgICAgKHJlc3VsdC5zZWFyY2ggPyByZXN1bHQuc2VhcmNoIDogJycpO1xuICAgIH1cbiAgICByZXN1bHQuaHJlZiA9IHJlc3VsdC5mb3JtYXQoKTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgaWYgKCFzcmNQYXRoLmxlbmd0aCkge1xuICAgIC8vIG5vIHBhdGggYXQgYWxsLiAgZWFzeS5cbiAgICAvLyB3ZSd2ZSBhbHJlYWR5IGhhbmRsZWQgdGhlIG90aGVyIHN0dWZmIGFib3ZlLlxuICAgIHJlc3VsdC5wYXRobmFtZSA9IG51bGw7XG4gICAgLy90byBzdXBwb3J0IGh0dHAucmVxdWVzdFxuICAgIGlmIChyZXN1bHQuc2VhcmNoKSB7XG4gICAgICByZXN1bHQucGF0aCA9ICcvJyArIHJlc3VsdC5zZWFyY2g7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJlc3VsdC5wYXRoID0gbnVsbDtcbiAgICB9XG4gICAgcmVzdWx0LmhyZWYgPSByZXN1bHQuZm9ybWF0KCk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIC8vIGlmIGEgdXJsIEVORHMgaW4gLiBvciAuLiwgdGhlbiBpdCBtdXN0IGdldCBhIHRyYWlsaW5nIHNsYXNoLlxuICAvLyBob3dldmVyLCBpZiBpdCBlbmRzIGluIGFueXRoaW5nIGVsc2Ugbm9uLXNsYXNoeSxcbiAgLy8gdGhlbiBpdCBtdXN0IE5PVCBnZXQgYSB0cmFpbGluZyBzbGFzaC5cbiAgdmFyIGxhc3QgPSBzcmNQYXRoLnNsaWNlKC0xKVswXTtcbiAgdmFyIGhhc1RyYWlsaW5nU2xhc2ggPSAoXG4gICAgICAocmVzdWx0Lmhvc3QgfHwgcmVsYXRpdmUuaG9zdCkgJiYgKGxhc3QgPT09ICcuJyB8fCBsYXN0ID09PSAnLi4nKSB8fFxuICAgICAgbGFzdCA9PT0gJycpO1xuXG4gIC8vIHN0cmlwIHNpbmdsZSBkb3RzLCByZXNvbHZlIGRvdWJsZSBkb3RzIHRvIHBhcmVudCBkaXJcbiAgLy8gaWYgdGhlIHBhdGggdHJpZXMgdG8gZ28gYWJvdmUgdGhlIHJvb3QsIGB1cGAgZW5kcyB1cCA+IDBcbiAgdmFyIHVwID0gMDtcbiAgZm9yICh2YXIgaSA9IHNyY1BhdGgubGVuZ3RoOyBpID49IDA7IGktLSkge1xuICAgIGxhc3QgPSBzcmNQYXRoW2ldO1xuICAgIGlmIChsYXN0ID09ICcuJykge1xuICAgICAgc3JjUGF0aC5zcGxpY2UoaSwgMSk7XG4gICAgfSBlbHNlIGlmIChsYXN0ID09PSAnLi4nKSB7XG4gICAgICBzcmNQYXRoLnNwbGljZShpLCAxKTtcbiAgICAgIHVwKys7XG4gICAgfSBlbHNlIGlmICh1cCkge1xuICAgICAgc3JjUGF0aC5zcGxpY2UoaSwgMSk7XG4gICAgICB1cC0tO1xuICAgIH1cbiAgfVxuXG4gIC8vIGlmIHRoZSBwYXRoIGlzIGFsbG93ZWQgdG8gZ28gYWJvdmUgdGhlIHJvb3QsIHJlc3RvcmUgbGVhZGluZyAuLnNcbiAgaWYgKCFtdXN0RW5kQWJzICYmICFyZW1vdmVBbGxEb3RzKSB7XG4gICAgZm9yICg7IHVwLS07IHVwKSB7XG4gICAgICBzcmNQYXRoLnVuc2hpZnQoJy4uJyk7XG4gICAgfVxuICB9XG5cbiAgaWYgKG11c3RFbmRBYnMgJiYgc3JjUGF0aFswXSAhPT0gJycgJiZcbiAgICAgICghc3JjUGF0aFswXSB8fCBzcmNQYXRoWzBdLmNoYXJBdCgwKSAhPT0gJy8nKSkge1xuICAgIHNyY1BhdGgudW5zaGlmdCgnJyk7XG4gIH1cblxuICBpZiAoaGFzVHJhaWxpbmdTbGFzaCAmJiAoc3JjUGF0aC5qb2luKCcvJykuc3Vic3RyKC0xKSAhPT0gJy8nKSkge1xuICAgIHNyY1BhdGgucHVzaCgnJyk7XG4gIH1cblxuICB2YXIgaXNBYnNvbHV0ZSA9IHNyY1BhdGhbMF0gPT09ICcnIHx8XG4gICAgICAoc3JjUGF0aFswXSAmJiBzcmNQYXRoWzBdLmNoYXJBdCgwKSA9PT0gJy8nKTtcblxuICAvLyBwdXQgdGhlIGhvc3QgYmFja1xuICBpZiAocHN5Y2hvdGljKSB7XG4gICAgcmVzdWx0Lmhvc3RuYW1lID0gcmVzdWx0Lmhvc3QgPSBpc0Fic29sdXRlID8gJycgOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjUGF0aC5sZW5ndGggPyBzcmNQYXRoLnNoaWZ0KCkgOiAnJztcbiAgICAvL29jY2F0aW9uYWx5IHRoZSBhdXRoIGNhbiBnZXQgc3R1Y2sgb25seSBpbiBob3N0XG4gICAgLy90aGlzIGVzcGVjaWFseSBoYXBwZW5zIGluIGNhc2VzIGxpa2VcbiAgICAvL3VybC5yZXNvbHZlT2JqZWN0KCdtYWlsdG86bG9jYWwxQGRvbWFpbjEnLCAnbG9jYWwyQGRvbWFpbjInKVxuICAgIHZhciBhdXRoSW5Ib3N0ID0gcmVzdWx0Lmhvc3QgJiYgcmVzdWx0Lmhvc3QuaW5kZXhPZignQCcpID4gMCA/XG4gICAgICAgICAgICAgICAgICAgICByZXN1bHQuaG9zdC5zcGxpdCgnQCcpIDogZmFsc2U7XG4gICAgaWYgKGF1dGhJbkhvc3QpIHtcbiAgICAgIHJlc3VsdC5hdXRoID0gYXV0aEluSG9zdC5zaGlmdCgpO1xuICAgICAgcmVzdWx0Lmhvc3QgPSByZXN1bHQuaG9zdG5hbWUgPSBhdXRoSW5Ib3N0LnNoaWZ0KCk7XG4gICAgfVxuICB9XG5cbiAgbXVzdEVuZEFicyA9IG11c3RFbmRBYnMgfHwgKHJlc3VsdC5ob3N0ICYmIHNyY1BhdGgubGVuZ3RoKTtcblxuICBpZiAobXVzdEVuZEFicyAmJiAhaXNBYnNvbHV0ZSkge1xuICAgIHNyY1BhdGgudW5zaGlmdCgnJyk7XG4gIH1cblxuICBpZiAoIXNyY1BhdGgubGVuZ3RoKSB7XG4gICAgcmVzdWx0LnBhdGhuYW1lID0gbnVsbDtcbiAgICByZXN1bHQucGF0aCA9IG51bGw7XG4gIH0gZWxzZSB7XG4gICAgcmVzdWx0LnBhdGhuYW1lID0gc3JjUGF0aC5qb2luKCcvJyk7XG4gIH1cblxuICAvL3RvIHN1cHBvcnQgcmVxdWVzdC5odHRwXG4gIGlmICghaXNOdWxsKHJlc3VsdC5wYXRobmFtZSkgfHwgIWlzTnVsbChyZXN1bHQuc2VhcmNoKSkge1xuICAgIHJlc3VsdC5wYXRoID0gKHJlc3VsdC5wYXRobmFtZSA/IHJlc3VsdC5wYXRobmFtZSA6ICcnKSArXG4gICAgICAgICAgICAgICAgICAocmVzdWx0LnNlYXJjaCA/IHJlc3VsdC5zZWFyY2ggOiAnJyk7XG4gIH1cbiAgcmVzdWx0LmF1dGggPSByZWxhdGl2ZS5hdXRoIHx8IHJlc3VsdC5hdXRoO1xuICByZXN1bHQuc2xhc2hlcyA9IHJlc3VsdC5zbGFzaGVzIHx8IHJlbGF0aXZlLnNsYXNoZXM7XG4gIHJlc3VsdC5ocmVmID0gcmVzdWx0LmZvcm1hdCgpO1xuICByZXR1cm4gcmVzdWx0O1xufTtcblxuVXJsLnByb3RvdHlwZS5wYXJzZUhvc3QgPSBmdW5jdGlvbigpIHtcbiAgdmFyIGhvc3QgPSB0aGlzLmhvc3Q7XG4gIHZhciBwb3J0ID0gcG9ydFBhdHRlcm4uZXhlYyhob3N0KTtcbiAgaWYgKHBvcnQpIHtcbiAgICBwb3J0ID0gcG9ydFswXTtcbiAgICBpZiAocG9ydCAhPT0gJzonKSB7XG4gICAgICB0aGlzLnBvcnQgPSBwb3J0LnN1YnN0cigxKTtcbiAgICB9XG4gICAgaG9zdCA9IGhvc3Quc3Vic3RyKDAsIGhvc3QubGVuZ3RoIC0gcG9ydC5sZW5ndGgpO1xuICB9XG4gIGlmIChob3N0KSB0aGlzLmhvc3RuYW1lID0gaG9zdDtcbn07XG5cbmZ1bmN0aW9uIGlzU3RyaW5nKGFyZykge1xuICByZXR1cm4gdHlwZW9mIGFyZyA9PT0gXCJzdHJpbmdcIjtcbn1cblxuZnVuY3Rpb24gaXNPYmplY3QoYXJnKSB7XG4gIHJldHVybiB0eXBlb2YgYXJnID09PSAnb2JqZWN0JyAmJiBhcmcgIT09IG51bGw7XG59XG5cbmZ1bmN0aW9uIGlzTnVsbChhcmcpIHtcbiAgcmV0dXJuIGFyZyA9PT0gbnVsbDtcbn1cbmZ1bmN0aW9uIGlzTnVsbE9yVW5kZWZpbmVkKGFyZykge1xuICByZXR1cm4gIGFyZyA9PSBudWxsO1xufVxuIiwiJ3VzZSBzdHJpY3QnO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGVhcmN1dDtcblxuZnVuY3Rpb24gZWFyY3V0KGRhdGEsIGhvbGVJbmRpY2VzLCBkaW0pIHtcblxuICAgIGRpbSA9IGRpbSB8fCAyO1xuXG4gICAgdmFyIGhhc0hvbGVzID0gaG9sZUluZGljZXMgJiYgaG9sZUluZGljZXMubGVuZ3RoLFxuICAgICAgICBvdXRlckxlbiA9IGhhc0hvbGVzID8gaG9sZUluZGljZXNbMF0gKiBkaW0gOiBkYXRhLmxlbmd0aCxcbiAgICAgICAgb3V0ZXJOb2RlID0gbGlua2VkTGlzdChkYXRhLCAwLCBvdXRlckxlbiwgZGltLCB0cnVlKSxcbiAgICAgICAgdHJpYW5nbGVzID0gW107XG5cbiAgICBpZiAoIW91dGVyTm9kZSkgcmV0dXJuIHRyaWFuZ2xlcztcblxuICAgIHZhciBtaW5YLCBtaW5ZLCBtYXhYLCBtYXhZLCB4LCB5LCBzaXplO1xuXG4gICAgaWYgKGhhc0hvbGVzKSBvdXRlck5vZGUgPSBlbGltaW5hdGVIb2xlcyhkYXRhLCBob2xlSW5kaWNlcywgb3V0ZXJOb2RlLCBkaW0pO1xuXG4gICAgLy8gaWYgdGhlIHNoYXBlIGlzIG5vdCB0b28gc2ltcGxlLCB3ZSdsbCB1c2Ugei1vcmRlciBjdXJ2ZSBoYXNoIGxhdGVyOyBjYWxjdWxhdGUgcG9seWdvbiBiYm94XG4gICAgaWYgKGRhdGEubGVuZ3RoID4gODAgKiBkaW0pIHtcbiAgICAgICAgbWluWCA9IG1heFggPSBkYXRhWzBdO1xuICAgICAgICBtaW5ZID0gbWF4WSA9IGRhdGFbMV07XG5cbiAgICAgICAgZm9yICh2YXIgaSA9IGRpbTsgaSA8IG91dGVyTGVuOyBpICs9IGRpbSkge1xuICAgICAgICAgICAgeCA9IGRhdGFbaV07XG4gICAgICAgICAgICB5ID0gZGF0YVtpICsgMV07XG4gICAgICAgICAgICBpZiAoeCA8IG1pblgpIG1pblggPSB4O1xuICAgICAgICAgICAgaWYgKHkgPCBtaW5ZKSBtaW5ZID0geTtcbiAgICAgICAgICAgIGlmICh4ID4gbWF4WCkgbWF4WCA9IHg7XG4gICAgICAgICAgICBpZiAoeSA+IG1heFkpIG1heFkgPSB5O1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gbWluWCwgbWluWSBhbmQgc2l6ZSBhcmUgbGF0ZXIgdXNlZCB0byB0cmFuc2Zvcm0gY29vcmRzIGludG8gaW50ZWdlcnMgZm9yIHotb3JkZXIgY2FsY3VsYXRpb25cbiAgICAgICAgc2l6ZSA9IE1hdGgubWF4KG1heFggLSBtaW5YLCBtYXhZIC0gbWluWSk7XG4gICAgfVxuXG4gICAgZWFyY3V0TGlua2VkKG91dGVyTm9kZSwgdHJpYW5nbGVzLCBkaW0sIG1pblgsIG1pblksIHNpemUpO1xuXG4gICAgcmV0dXJuIHRyaWFuZ2xlcztcbn1cblxuLy8gY3JlYXRlIGEgY2lyY3VsYXIgZG91Ymx5IGxpbmtlZCBsaXN0IGZyb20gcG9seWdvbiBwb2ludHMgaW4gdGhlIHNwZWNpZmllZCB3aW5kaW5nIG9yZGVyXG5mdW5jdGlvbiBsaW5rZWRMaXN0KGRhdGEsIHN0YXJ0LCBlbmQsIGRpbSwgY2xvY2t3aXNlKSB7XG4gICAgdmFyIHN1bSA9IDAsXG4gICAgICAgIGksIGosIGxhc3Q7XG5cbiAgICAvLyBjYWxjdWxhdGUgb3JpZ2luYWwgd2luZGluZyBvcmRlciBvZiBhIHBvbHlnb24gcmluZ1xuICAgIGZvciAoaSA9IHN0YXJ0LCBqID0gZW5kIC0gZGltOyBpIDwgZW5kOyBpICs9IGRpbSkge1xuICAgICAgICBzdW0gKz0gKGRhdGFbal0gLSBkYXRhW2ldKSAqIChkYXRhW2kgKyAxXSArIGRhdGFbaiArIDFdKTtcbiAgICAgICAgaiA9IGk7XG4gICAgfVxuXG4gICAgLy8gbGluayBwb2ludHMgaW50byBjaXJjdWxhciBkb3VibHktbGlua2VkIGxpc3QgaW4gdGhlIHNwZWNpZmllZCB3aW5kaW5nIG9yZGVyXG4gICAgaWYgKGNsb2Nrd2lzZSA9PT0gKHN1bSA+IDApKSB7XG4gICAgICAgIGZvciAoaSA9IHN0YXJ0OyBpIDwgZW5kOyBpICs9IGRpbSkgbGFzdCA9IGluc2VydE5vZGUoaSwgZGF0YVtpXSwgZGF0YVtpICsgMV0sIGxhc3QpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIGZvciAoaSA9IGVuZCAtIGRpbTsgaSA+PSBzdGFydDsgaSAtPSBkaW0pIGxhc3QgPSBpbnNlcnROb2RlKGksIGRhdGFbaV0sIGRhdGFbaSArIDFdLCBsYXN0KTtcbiAgICB9XG5cbiAgICByZXR1cm4gbGFzdDtcbn1cblxuLy8gZWxpbWluYXRlIGNvbGluZWFyIG9yIGR1cGxpY2F0ZSBwb2ludHNcbmZ1bmN0aW9uIGZpbHRlclBvaW50cyhzdGFydCwgZW5kKSB7XG4gICAgaWYgKCFzdGFydCkgcmV0dXJuIHN0YXJ0O1xuICAgIGlmICghZW5kKSBlbmQgPSBzdGFydDtcblxuICAgIHZhciBwID0gc3RhcnQsXG4gICAgICAgIGFnYWluO1xuICAgIGRvIHtcbiAgICAgICAgYWdhaW4gPSBmYWxzZTtcblxuICAgICAgICBpZiAoIXAuc3RlaW5lciAmJiAoZXF1YWxzKHAsIHAubmV4dCkgfHwgYXJlYShwLnByZXYsIHAsIHAubmV4dCkgPT09IDApKSB7XG4gICAgICAgICAgICByZW1vdmVOb2RlKHApO1xuICAgICAgICAgICAgcCA9IGVuZCA9IHAucHJldjtcbiAgICAgICAgICAgIGlmIChwID09PSBwLm5leHQpIHJldHVybiBudWxsO1xuICAgICAgICAgICAgYWdhaW4gPSB0cnVlO1xuXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBwID0gcC5uZXh0O1xuICAgICAgICB9XG4gICAgfSB3aGlsZSAoYWdhaW4gfHwgcCAhPT0gZW5kKTtcblxuICAgIHJldHVybiBlbmQ7XG59XG5cbi8vIG1haW4gZWFyIHNsaWNpbmcgbG9vcCB3aGljaCB0cmlhbmd1bGF0ZXMgYSBwb2x5Z29uIChnaXZlbiBhcyBhIGxpbmtlZCBsaXN0KVxuZnVuY3Rpb24gZWFyY3V0TGlua2VkKGVhciwgdHJpYW5nbGVzLCBkaW0sIG1pblgsIG1pblksIHNpemUsIHBhc3MpIHtcbiAgICBpZiAoIWVhcikgcmV0dXJuO1xuXG4gICAgLy8gaW50ZXJsaW5rIHBvbHlnb24gbm9kZXMgaW4gei1vcmRlclxuICAgIGlmICghcGFzcyAmJiBzaXplKSBpbmRleEN1cnZlKGVhciwgbWluWCwgbWluWSwgc2l6ZSk7XG5cbiAgICB2YXIgc3RvcCA9IGVhcixcbiAgICAgICAgcHJldiwgbmV4dDtcblxuICAgIC8vIGl0ZXJhdGUgdGhyb3VnaCBlYXJzLCBzbGljaW5nIHRoZW0gb25lIGJ5IG9uZVxuICAgIHdoaWxlIChlYXIucHJldiAhPT0gZWFyLm5leHQpIHtcbiAgICAgICAgcHJldiA9IGVhci5wcmV2O1xuICAgICAgICBuZXh0ID0gZWFyLm5leHQ7XG5cbiAgICAgICAgaWYgKHNpemUgPyBpc0Vhckhhc2hlZChlYXIsIG1pblgsIG1pblksIHNpemUpIDogaXNFYXIoZWFyKSkge1xuICAgICAgICAgICAgLy8gY3V0IG9mZiB0aGUgdHJpYW5nbGVcbiAgICAgICAgICAgIHRyaWFuZ2xlcy5wdXNoKHByZXYuaSAvIGRpbSk7XG4gICAgICAgICAgICB0cmlhbmdsZXMucHVzaChlYXIuaSAvIGRpbSk7XG4gICAgICAgICAgICB0cmlhbmdsZXMucHVzaChuZXh0LmkgLyBkaW0pO1xuXG4gICAgICAgICAgICByZW1vdmVOb2RlKGVhcik7XG5cbiAgICAgICAgICAgIC8vIHNraXBwaW5nIHRoZSBuZXh0IHZlcnRpY2UgbGVhZHMgdG8gbGVzcyBzbGl2ZXIgdHJpYW5nbGVzXG4gICAgICAgICAgICBlYXIgPSBuZXh0Lm5leHQ7XG4gICAgICAgICAgICBzdG9wID0gbmV4dC5uZXh0O1xuXG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGVhciA9IG5leHQ7XG5cbiAgICAgICAgLy8gaWYgd2UgbG9vcGVkIHRocm91Z2ggdGhlIHdob2xlIHJlbWFpbmluZyBwb2x5Z29uIGFuZCBjYW4ndCBmaW5kIGFueSBtb3JlIGVhcnNcbiAgICAgICAgaWYgKGVhciA9PT0gc3RvcCkge1xuICAgICAgICAgICAgLy8gdHJ5IGZpbHRlcmluZyBwb2ludHMgYW5kIHNsaWNpbmcgYWdhaW5cbiAgICAgICAgICAgIGlmICghcGFzcykge1xuICAgICAgICAgICAgICAgIGVhcmN1dExpbmtlZChmaWx0ZXJQb2ludHMoZWFyKSwgdHJpYW5nbGVzLCBkaW0sIG1pblgsIG1pblksIHNpemUsIDEpO1xuXG4gICAgICAgICAgICAvLyBpZiB0aGlzIGRpZG4ndCB3b3JrLCB0cnkgY3VyaW5nIGFsbCBzbWFsbCBzZWxmLWludGVyc2VjdGlvbnMgbG9jYWxseVxuICAgICAgICAgICAgfSBlbHNlIGlmIChwYXNzID09PSAxKSB7XG4gICAgICAgICAgICAgICAgZWFyID0gY3VyZUxvY2FsSW50ZXJzZWN0aW9ucyhlYXIsIHRyaWFuZ2xlcywgZGltKTtcbiAgICAgICAgICAgICAgICBlYXJjdXRMaW5rZWQoZWFyLCB0cmlhbmdsZXMsIGRpbSwgbWluWCwgbWluWSwgc2l6ZSwgMik7XG5cbiAgICAgICAgICAgIC8vIGFzIGEgbGFzdCByZXNvcnQsIHRyeSBzcGxpdHRpbmcgdGhlIHJlbWFpbmluZyBwb2x5Z29uIGludG8gdHdvXG4gICAgICAgICAgICB9IGVsc2UgaWYgKHBhc3MgPT09IDIpIHtcbiAgICAgICAgICAgICAgICBzcGxpdEVhcmN1dChlYXIsIHRyaWFuZ2xlcywgZGltLCBtaW5YLCBtaW5ZLCBzaXplKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbi8vIGNoZWNrIHdoZXRoZXIgYSBwb2x5Z29uIG5vZGUgZm9ybXMgYSB2YWxpZCBlYXIgd2l0aCBhZGphY2VudCBub2Rlc1xuZnVuY3Rpb24gaXNFYXIoZWFyKSB7XG4gICAgdmFyIGEgPSBlYXIucHJldixcbiAgICAgICAgYiA9IGVhcixcbiAgICAgICAgYyA9IGVhci5uZXh0O1xuXG4gICAgaWYgKGFyZWEoYSwgYiwgYykgPj0gMCkgcmV0dXJuIGZhbHNlOyAvLyByZWZsZXgsIGNhbid0IGJlIGFuIGVhclxuXG4gICAgLy8gbm93IG1ha2Ugc3VyZSB3ZSBkb24ndCBoYXZlIG90aGVyIHBvaW50cyBpbnNpZGUgdGhlIHBvdGVudGlhbCBlYXJcbiAgICB2YXIgcCA9IGVhci5uZXh0Lm5leHQ7XG5cbiAgICB3aGlsZSAocCAhPT0gZWFyLnByZXYpIHtcbiAgICAgICAgaWYgKHBvaW50SW5UcmlhbmdsZShhLngsIGEueSwgYi54LCBiLnksIGMueCwgYy55LCBwLngsIHAueSkgJiZcbiAgICAgICAgICAgIGFyZWEocC5wcmV2LCBwLCBwLm5leHQpID49IDApIHJldHVybiBmYWxzZTtcbiAgICAgICAgcCA9IHAubmV4dDtcbiAgICB9XG5cbiAgICByZXR1cm4gdHJ1ZTtcbn1cblxuZnVuY3Rpb24gaXNFYXJIYXNoZWQoZWFyLCBtaW5YLCBtaW5ZLCBzaXplKSB7XG4gICAgdmFyIGEgPSBlYXIucHJldixcbiAgICAgICAgYiA9IGVhcixcbiAgICAgICAgYyA9IGVhci5uZXh0O1xuXG4gICAgaWYgKGFyZWEoYSwgYiwgYykgPj0gMCkgcmV0dXJuIGZhbHNlOyAvLyByZWZsZXgsIGNhbid0IGJlIGFuIGVhclxuXG4gICAgLy8gdHJpYW5nbGUgYmJveDsgbWluICYgbWF4IGFyZSBjYWxjdWxhdGVkIGxpa2UgdGhpcyBmb3Igc3BlZWRcbiAgICB2YXIgbWluVFggPSBhLnggPCBiLnggPyAoYS54IDwgYy54ID8gYS54IDogYy54KSA6IChiLnggPCBjLnggPyBiLnggOiBjLngpLFxuICAgICAgICBtaW5UWSA9IGEueSA8IGIueSA/IChhLnkgPCBjLnkgPyBhLnkgOiBjLnkpIDogKGIueSA8IGMueSA/IGIueSA6IGMueSksXG4gICAgICAgIG1heFRYID0gYS54ID4gYi54ID8gKGEueCA+IGMueCA/IGEueCA6IGMueCkgOiAoYi54ID4gYy54ID8gYi54IDogYy54KSxcbiAgICAgICAgbWF4VFkgPSBhLnkgPiBiLnkgPyAoYS55ID4gYy55ID8gYS55IDogYy55KSA6IChiLnkgPiBjLnkgPyBiLnkgOiBjLnkpO1xuXG4gICAgLy8gei1vcmRlciByYW5nZSBmb3IgdGhlIGN1cnJlbnQgdHJpYW5nbGUgYmJveDtcbiAgICB2YXIgbWluWiA9IHpPcmRlcihtaW5UWCwgbWluVFksIG1pblgsIG1pblksIHNpemUpLFxuICAgICAgICBtYXhaID0gek9yZGVyKG1heFRYLCBtYXhUWSwgbWluWCwgbWluWSwgc2l6ZSk7XG5cbiAgICAvLyBmaXJzdCBsb29rIGZvciBwb2ludHMgaW5zaWRlIHRoZSB0cmlhbmdsZSBpbiBpbmNyZWFzaW5nIHotb3JkZXJcbiAgICB2YXIgcCA9IGVhci5uZXh0WjtcblxuICAgIHdoaWxlIChwICYmIHAueiA8PSBtYXhaKSB7XG4gICAgICAgIGlmIChwICE9PSBlYXIucHJldiAmJiBwICE9PSBlYXIubmV4dCAmJlxuICAgICAgICAgICAgcG9pbnRJblRyaWFuZ2xlKGEueCwgYS55LCBiLngsIGIueSwgYy54LCBjLnksIHAueCwgcC55KSAmJlxuICAgICAgICAgICAgYXJlYShwLnByZXYsIHAsIHAubmV4dCkgPj0gMCkgcmV0dXJuIGZhbHNlO1xuICAgICAgICBwID0gcC5uZXh0WjtcbiAgICB9XG5cbiAgICAvLyB0aGVuIGxvb2sgZm9yIHBvaW50cyBpbiBkZWNyZWFzaW5nIHotb3JkZXJcbiAgICBwID0gZWFyLnByZXZaO1xuXG4gICAgd2hpbGUgKHAgJiYgcC56ID49IG1pblopIHtcbiAgICAgICAgaWYgKHAgIT09IGVhci5wcmV2ICYmIHAgIT09IGVhci5uZXh0ICYmXG4gICAgICAgICAgICBwb2ludEluVHJpYW5nbGUoYS54LCBhLnksIGIueCwgYi55LCBjLngsIGMueSwgcC54LCBwLnkpICYmXG4gICAgICAgICAgICBhcmVhKHAucHJldiwgcCwgcC5uZXh0KSA+PSAwKSByZXR1cm4gZmFsc2U7XG4gICAgICAgIHAgPSBwLnByZXZaO1xuICAgIH1cblxuICAgIHJldHVybiB0cnVlO1xufVxuXG4vLyBnbyB0aHJvdWdoIGFsbCBwb2x5Z29uIG5vZGVzIGFuZCBjdXJlIHNtYWxsIGxvY2FsIHNlbGYtaW50ZXJzZWN0aW9uc1xuZnVuY3Rpb24gY3VyZUxvY2FsSW50ZXJzZWN0aW9ucyhzdGFydCwgdHJpYW5nbGVzLCBkaW0pIHtcbiAgICB2YXIgcCA9IHN0YXJ0O1xuICAgIGRvIHtcbiAgICAgICAgdmFyIGEgPSBwLnByZXYsXG4gICAgICAgICAgICBiID0gcC5uZXh0Lm5leHQ7XG5cbiAgICAgICAgLy8gYSBzZWxmLWludGVyc2VjdGlvbiB3aGVyZSBlZGdlICh2W2ktMV0sdltpXSkgaW50ZXJzZWN0cyAodltpKzFdLHZbaSsyXSlcbiAgICAgICAgaWYgKGludGVyc2VjdHMoYSwgcCwgcC5uZXh0LCBiKSAmJiBsb2NhbGx5SW5zaWRlKGEsIGIpICYmIGxvY2FsbHlJbnNpZGUoYiwgYSkpIHtcblxuICAgICAgICAgICAgdHJpYW5nbGVzLnB1c2goYS5pIC8gZGltKTtcbiAgICAgICAgICAgIHRyaWFuZ2xlcy5wdXNoKHAuaSAvIGRpbSk7XG4gICAgICAgICAgICB0cmlhbmdsZXMucHVzaChiLmkgLyBkaW0pO1xuXG4gICAgICAgICAgICAvLyByZW1vdmUgdHdvIG5vZGVzIGludm9sdmVkXG4gICAgICAgICAgICByZW1vdmVOb2RlKHApO1xuICAgICAgICAgICAgcmVtb3ZlTm9kZShwLm5leHQpO1xuXG4gICAgICAgICAgICBwID0gc3RhcnQgPSBiO1xuICAgICAgICB9XG4gICAgICAgIHAgPSBwLm5leHQ7XG4gICAgfSB3aGlsZSAocCAhPT0gc3RhcnQpO1xuXG4gICAgcmV0dXJuIHA7XG59XG5cbi8vIHRyeSBzcGxpdHRpbmcgcG9seWdvbiBpbnRvIHR3byBhbmQgdHJpYW5ndWxhdGUgdGhlbSBpbmRlcGVuZGVudGx5XG5mdW5jdGlvbiBzcGxpdEVhcmN1dChzdGFydCwgdHJpYW5nbGVzLCBkaW0sIG1pblgsIG1pblksIHNpemUpIHtcbiAgICAvLyBsb29rIGZvciBhIHZhbGlkIGRpYWdvbmFsIHRoYXQgZGl2aWRlcyB0aGUgcG9seWdvbiBpbnRvIHR3b1xuICAgIHZhciBhID0gc3RhcnQ7XG4gICAgZG8ge1xuICAgICAgICB2YXIgYiA9IGEubmV4dC5uZXh0O1xuICAgICAgICB3aGlsZSAoYiAhPT0gYS5wcmV2KSB7XG4gICAgICAgICAgICBpZiAoYS5pICE9PSBiLmkgJiYgaXNWYWxpZERpYWdvbmFsKGEsIGIpKSB7XG4gICAgICAgICAgICAgICAgLy8gc3BsaXQgdGhlIHBvbHlnb24gaW4gdHdvIGJ5IHRoZSBkaWFnb25hbFxuICAgICAgICAgICAgICAgIHZhciBjID0gc3BsaXRQb2x5Z29uKGEsIGIpO1xuXG4gICAgICAgICAgICAgICAgLy8gZmlsdGVyIGNvbGluZWFyIHBvaW50cyBhcm91bmQgdGhlIGN1dHNcbiAgICAgICAgICAgICAgICBhID0gZmlsdGVyUG9pbnRzKGEsIGEubmV4dCk7XG4gICAgICAgICAgICAgICAgYyA9IGZpbHRlclBvaW50cyhjLCBjLm5leHQpO1xuXG4gICAgICAgICAgICAgICAgLy8gcnVuIGVhcmN1dCBvbiBlYWNoIGhhbGZcbiAgICAgICAgICAgICAgICBlYXJjdXRMaW5rZWQoYSwgdHJpYW5nbGVzLCBkaW0sIG1pblgsIG1pblksIHNpemUpO1xuICAgICAgICAgICAgICAgIGVhcmN1dExpbmtlZChjLCB0cmlhbmdsZXMsIGRpbSwgbWluWCwgbWluWSwgc2l6ZSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYiA9IGIubmV4dDtcbiAgICAgICAgfVxuICAgICAgICBhID0gYS5uZXh0O1xuICAgIH0gd2hpbGUgKGEgIT09IHN0YXJ0KTtcbn1cblxuLy8gbGluayBldmVyeSBob2xlIGludG8gdGhlIG91dGVyIGxvb3AsIHByb2R1Y2luZyBhIHNpbmdsZS1yaW5nIHBvbHlnb24gd2l0aG91dCBob2xlc1xuZnVuY3Rpb24gZWxpbWluYXRlSG9sZXMoZGF0YSwgaG9sZUluZGljZXMsIG91dGVyTm9kZSwgZGltKSB7XG4gICAgdmFyIHF1ZXVlID0gW10sXG4gICAgICAgIGksIGxlbiwgc3RhcnQsIGVuZCwgbGlzdDtcblxuICAgIGZvciAoaSA9IDAsIGxlbiA9IGhvbGVJbmRpY2VzLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICAgIHN0YXJ0ID0gaG9sZUluZGljZXNbaV0gKiBkaW07XG4gICAgICAgIGVuZCA9IGkgPCBsZW4gLSAxID8gaG9sZUluZGljZXNbaSArIDFdICogZGltIDogZGF0YS5sZW5ndGg7XG4gICAgICAgIGxpc3QgPSBsaW5rZWRMaXN0KGRhdGEsIHN0YXJ0LCBlbmQsIGRpbSwgZmFsc2UpO1xuICAgICAgICBpZiAobGlzdCA9PT0gbGlzdC5uZXh0KSBsaXN0LnN0ZWluZXIgPSB0cnVlO1xuICAgICAgICBxdWV1ZS5wdXNoKGdldExlZnRtb3N0KGxpc3QpKTtcbiAgICB9XG5cbiAgICBxdWV1ZS5zb3J0KGNvbXBhcmVYKTtcblxuICAgIC8vIHByb2Nlc3MgaG9sZXMgZnJvbSBsZWZ0IHRvIHJpZ2h0XG4gICAgZm9yIChpID0gMDsgaSA8IHF1ZXVlLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGVsaW1pbmF0ZUhvbGUocXVldWVbaV0sIG91dGVyTm9kZSk7XG4gICAgICAgIG91dGVyTm9kZSA9IGZpbHRlclBvaW50cyhvdXRlck5vZGUsIG91dGVyTm9kZS5uZXh0KTtcbiAgICB9XG5cbiAgICByZXR1cm4gb3V0ZXJOb2RlO1xufVxuXG5mdW5jdGlvbiBjb21wYXJlWChhLCBiKSB7XG4gICAgcmV0dXJuIGEueCAtIGIueDtcbn1cblxuLy8gZmluZCBhIGJyaWRnZSBiZXR3ZWVuIHZlcnRpY2VzIHRoYXQgY29ubmVjdHMgaG9sZSB3aXRoIGFuIG91dGVyIHJpbmcgYW5kIGFuZCBsaW5rIGl0XG5mdW5jdGlvbiBlbGltaW5hdGVIb2xlKGhvbGUsIG91dGVyTm9kZSkge1xuICAgIG91dGVyTm9kZSA9IGZpbmRIb2xlQnJpZGdlKGhvbGUsIG91dGVyTm9kZSk7XG4gICAgaWYgKG91dGVyTm9kZSkge1xuICAgICAgICB2YXIgYiA9IHNwbGl0UG9seWdvbihvdXRlck5vZGUsIGhvbGUpO1xuICAgICAgICBmaWx0ZXJQb2ludHMoYiwgYi5uZXh0KTtcbiAgICB9XG59XG5cbi8vIERhdmlkIEViZXJseSdzIGFsZ29yaXRobSBmb3IgZmluZGluZyBhIGJyaWRnZSBiZXR3ZWVuIGhvbGUgYW5kIG91dGVyIHBvbHlnb25cbmZ1bmN0aW9uIGZpbmRIb2xlQnJpZGdlKGhvbGUsIG91dGVyTm9kZSkge1xuICAgIHZhciBwID0gb3V0ZXJOb2RlLFxuICAgICAgICBoeCA9IGhvbGUueCxcbiAgICAgICAgaHkgPSBob2xlLnksXG4gICAgICAgIHF4ID0gLUluZmluaXR5LFxuICAgICAgICBtO1xuXG4gICAgLy8gZmluZCBhIHNlZ21lbnQgaW50ZXJzZWN0ZWQgYnkgYSByYXkgZnJvbSB0aGUgaG9sZSdzIGxlZnRtb3N0IHBvaW50IHRvIHRoZSBsZWZ0O1xuICAgIC8vIHNlZ21lbnQncyBlbmRwb2ludCB3aXRoIGxlc3NlciB4IHdpbGwgYmUgcG90ZW50aWFsIGNvbm5lY3Rpb24gcG9pbnRcbiAgICBkbyB7XG4gICAgICAgIGlmIChoeSA8PSBwLnkgJiYgaHkgPj0gcC5uZXh0LnkpIHtcbiAgICAgICAgICAgIHZhciB4ID0gcC54ICsgKGh5IC0gcC55KSAqIChwLm5leHQueCAtIHAueCkgLyAocC5uZXh0LnkgLSBwLnkpO1xuICAgICAgICAgICAgaWYgKHggPD0gaHggJiYgeCA+IHF4KSB7XG4gICAgICAgICAgICAgICAgcXggPSB4O1xuICAgICAgICAgICAgICAgIG0gPSBwLnggPCBwLm5leHQueCA/IHAgOiBwLm5leHQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcCA9IHAubmV4dDtcbiAgICB9IHdoaWxlIChwICE9PSBvdXRlck5vZGUpO1xuXG4gICAgaWYgKCFtKSByZXR1cm4gbnVsbDtcblxuICAgIC8vIGxvb2sgZm9yIHBvaW50cyBpbnNpZGUgdGhlIHRyaWFuZ2xlIG9mIGhvbGUgcG9pbnQsIHNlZ21lbnQgaW50ZXJzZWN0aW9uIGFuZCBlbmRwb2ludDtcbiAgICAvLyBpZiB0aGVyZSBhcmUgbm8gcG9pbnRzIGZvdW5kLCB3ZSBoYXZlIGEgdmFsaWQgY29ubmVjdGlvbjtcbiAgICAvLyBvdGhlcndpc2UgY2hvb3NlIHRoZSBwb2ludCBvZiB0aGUgbWluaW11bSBhbmdsZSB3aXRoIHRoZSByYXkgYXMgY29ubmVjdGlvbiBwb2ludFxuXG4gICAgdmFyIHN0b3AgPSBtLFxuICAgICAgICB0YW5NaW4gPSBJbmZpbml0eSxcbiAgICAgICAgdGFuO1xuXG4gICAgcCA9IG0ubmV4dDtcblxuICAgIHdoaWxlIChwICE9PSBzdG9wKSB7XG4gICAgICAgIGlmIChoeCA+PSBwLnggJiYgcC54ID49IG0ueCAmJlxuICAgICAgICAgICAgICAgIHBvaW50SW5UcmlhbmdsZShoeSA8IG0ueSA/IGh4IDogcXgsIGh5LCBtLngsIG0ueSwgaHkgPCBtLnkgPyBxeCA6IGh4LCBoeSwgcC54LCBwLnkpKSB7XG5cbiAgICAgICAgICAgIHRhbiA9IE1hdGguYWJzKGh5IC0gcC55KSAvIChoeCAtIHAueCk7IC8vIHRhbmdlbnRpYWxcblxuICAgICAgICAgICAgaWYgKCh0YW4gPCB0YW5NaW4gfHwgKHRhbiA9PT0gdGFuTWluICYmIHAueCA+IG0ueCkpICYmIGxvY2FsbHlJbnNpZGUocCwgaG9sZSkpIHtcbiAgICAgICAgICAgICAgICBtID0gcDtcbiAgICAgICAgICAgICAgICB0YW5NaW4gPSB0YW47XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBwID0gcC5uZXh0O1xuICAgIH1cblxuICAgIHJldHVybiBtO1xufVxuXG4vLyBpbnRlcmxpbmsgcG9seWdvbiBub2RlcyBpbiB6LW9yZGVyXG5mdW5jdGlvbiBpbmRleEN1cnZlKHN0YXJ0LCBtaW5YLCBtaW5ZLCBzaXplKSB7XG4gICAgdmFyIHAgPSBzdGFydDtcbiAgICBkbyB7XG4gICAgICAgIGlmIChwLnogPT09IG51bGwpIHAueiA9IHpPcmRlcihwLngsIHAueSwgbWluWCwgbWluWSwgc2l6ZSk7XG4gICAgICAgIHAucHJldlogPSBwLnByZXY7XG4gICAgICAgIHAubmV4dFogPSBwLm5leHQ7XG4gICAgICAgIHAgPSBwLm5leHQ7XG4gICAgfSB3aGlsZSAocCAhPT0gc3RhcnQpO1xuXG4gICAgcC5wcmV2Wi5uZXh0WiA9IG51bGw7XG4gICAgcC5wcmV2WiA9IG51bGw7XG5cbiAgICBzb3J0TGlua2VkKHApO1xufVxuXG4vLyBTaW1vbiBUYXRoYW0ncyBsaW5rZWQgbGlzdCBtZXJnZSBzb3J0IGFsZ29yaXRobVxuLy8gaHR0cDovL3d3dy5jaGlhcmsuZ3JlZW5lbmQub3JnLnVrL35zZ3RhdGhhbS9hbGdvcml0aG1zL2xpc3Rzb3J0Lmh0bWxcbmZ1bmN0aW9uIHNvcnRMaW5rZWQobGlzdCkge1xuICAgIHZhciBpLCBwLCBxLCBlLCB0YWlsLCBudW1NZXJnZXMsIHBTaXplLCBxU2l6ZSxcbiAgICAgICAgaW5TaXplID0gMTtcblxuICAgIGRvIHtcbiAgICAgICAgcCA9IGxpc3Q7XG4gICAgICAgIGxpc3QgPSBudWxsO1xuICAgICAgICB0YWlsID0gbnVsbDtcbiAgICAgICAgbnVtTWVyZ2VzID0gMDtcblxuICAgICAgICB3aGlsZSAocCkge1xuICAgICAgICAgICAgbnVtTWVyZ2VzKys7XG4gICAgICAgICAgICBxID0gcDtcbiAgICAgICAgICAgIHBTaXplID0gMDtcbiAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBpblNpemU7IGkrKykge1xuICAgICAgICAgICAgICAgIHBTaXplKys7XG4gICAgICAgICAgICAgICAgcSA9IHEubmV4dFo7XG4gICAgICAgICAgICAgICAgaWYgKCFxKSBicmVhaztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcVNpemUgPSBpblNpemU7XG5cbiAgICAgICAgICAgIHdoaWxlIChwU2l6ZSA+IDAgfHwgKHFTaXplID4gMCAmJiBxKSkge1xuXG4gICAgICAgICAgICAgICAgaWYgKHBTaXplID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIGUgPSBxO1xuICAgICAgICAgICAgICAgICAgICBxID0gcS5uZXh0WjtcbiAgICAgICAgICAgICAgICAgICAgcVNpemUtLTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHFTaXplID09PSAwIHx8ICFxKSB7XG4gICAgICAgICAgICAgICAgICAgIGUgPSBwO1xuICAgICAgICAgICAgICAgICAgICBwID0gcC5uZXh0WjtcbiAgICAgICAgICAgICAgICAgICAgcFNpemUtLTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHAueiA8PSBxLnopIHtcbiAgICAgICAgICAgICAgICAgICAgZSA9IHA7XG4gICAgICAgICAgICAgICAgICAgIHAgPSBwLm5leHRaO1xuICAgICAgICAgICAgICAgICAgICBwU2l6ZS0tO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGUgPSBxO1xuICAgICAgICAgICAgICAgICAgICBxID0gcS5uZXh0WjtcbiAgICAgICAgICAgICAgICAgICAgcVNpemUtLTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAodGFpbCkgdGFpbC5uZXh0WiA9IGU7XG4gICAgICAgICAgICAgICAgZWxzZSBsaXN0ID0gZTtcblxuICAgICAgICAgICAgICAgIGUucHJldlogPSB0YWlsO1xuICAgICAgICAgICAgICAgIHRhaWwgPSBlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBwID0gcTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRhaWwubmV4dFogPSBudWxsO1xuICAgICAgICBpblNpemUgKj0gMjtcblxuICAgIH0gd2hpbGUgKG51bU1lcmdlcyA+IDEpO1xuXG4gICAgcmV0dXJuIGxpc3Q7XG59XG5cbi8vIHotb3JkZXIgb2YgYSBwb2ludCBnaXZlbiBjb29yZHMgYW5kIHNpemUgb2YgdGhlIGRhdGEgYm91bmRpbmcgYm94XG5mdW5jdGlvbiB6T3JkZXIoeCwgeSwgbWluWCwgbWluWSwgc2l6ZSkge1xuICAgIC8vIGNvb3JkcyBhcmUgdHJhbnNmb3JtZWQgaW50byBub24tbmVnYXRpdmUgMTUtYml0IGludGVnZXIgcmFuZ2VcbiAgICB4ID0gMzI3NjcgKiAoeCAtIG1pblgpIC8gc2l6ZTtcbiAgICB5ID0gMzI3NjcgKiAoeSAtIG1pblkpIC8gc2l6ZTtcblxuICAgIHggPSAoeCB8ICh4IDw8IDgpKSAmIDB4MDBGRjAwRkY7XG4gICAgeCA9ICh4IHwgKHggPDwgNCkpICYgMHgwRjBGMEYwRjtcbiAgICB4ID0gKHggfCAoeCA8PCAyKSkgJiAweDMzMzMzMzMzO1xuICAgIHggPSAoeCB8ICh4IDw8IDEpKSAmIDB4NTU1NTU1NTU7XG5cbiAgICB5ID0gKHkgfCAoeSA8PCA4KSkgJiAweDAwRkYwMEZGO1xuICAgIHkgPSAoeSB8ICh5IDw8IDQpKSAmIDB4MEYwRjBGMEY7XG4gICAgeSA9ICh5IHwgKHkgPDwgMikpICYgMHgzMzMzMzMzMztcbiAgICB5ID0gKHkgfCAoeSA8PCAxKSkgJiAweDU1NTU1NTU1O1xuXG4gICAgcmV0dXJuIHggfCAoeSA8PCAxKTtcbn1cblxuLy8gZmluZCB0aGUgbGVmdG1vc3Qgbm9kZSBvZiBhIHBvbHlnb24gcmluZ1xuZnVuY3Rpb24gZ2V0TGVmdG1vc3Qoc3RhcnQpIHtcbiAgICB2YXIgcCA9IHN0YXJ0LFxuICAgICAgICBsZWZ0bW9zdCA9IHN0YXJ0O1xuICAgIGRvIHtcbiAgICAgICAgaWYgKHAueCA8IGxlZnRtb3N0LngpIGxlZnRtb3N0ID0gcDtcbiAgICAgICAgcCA9IHAubmV4dDtcbiAgICB9IHdoaWxlIChwICE9PSBzdGFydCk7XG5cbiAgICByZXR1cm4gbGVmdG1vc3Q7XG59XG5cbi8vIGNoZWNrIGlmIGEgcG9pbnQgbGllcyB3aXRoaW4gYSBjb252ZXggdHJpYW5nbGVcbmZ1bmN0aW9uIHBvaW50SW5UcmlhbmdsZShheCwgYXksIGJ4LCBieSwgY3gsIGN5LCBweCwgcHkpIHtcbiAgICByZXR1cm4gKGN4IC0gcHgpICogKGF5IC0gcHkpIC0gKGF4IC0gcHgpICogKGN5IC0gcHkpID49IDAgJiZcbiAgICAgICAgICAgKGF4IC0gcHgpICogKGJ5IC0gcHkpIC0gKGJ4IC0gcHgpICogKGF5IC0gcHkpID49IDAgJiZcbiAgICAgICAgICAgKGJ4IC0gcHgpICogKGN5IC0gcHkpIC0gKGN4IC0gcHgpICogKGJ5IC0gcHkpID49IDA7XG59XG5cbi8vIGNoZWNrIGlmIGEgZGlhZ29uYWwgYmV0d2VlbiB0d28gcG9seWdvbiBub2RlcyBpcyB2YWxpZCAobGllcyBpbiBwb2x5Z29uIGludGVyaW9yKVxuZnVuY3Rpb24gaXNWYWxpZERpYWdvbmFsKGEsIGIpIHtcbiAgICByZXR1cm4gZXF1YWxzKGEsIGIpIHx8IGEubmV4dC5pICE9PSBiLmkgJiYgYS5wcmV2LmkgIT09IGIuaSAmJiAhaW50ZXJzZWN0c1BvbHlnb24oYSwgYikgJiZcbiAgICAgICAgICAgbG9jYWxseUluc2lkZShhLCBiKSAmJiBsb2NhbGx5SW5zaWRlKGIsIGEpICYmIG1pZGRsZUluc2lkZShhLCBiKTtcbn1cblxuLy8gc2lnbmVkIGFyZWEgb2YgYSB0cmlhbmdsZVxuZnVuY3Rpb24gYXJlYShwLCBxLCByKSB7XG4gICAgcmV0dXJuIChxLnkgLSBwLnkpICogKHIueCAtIHEueCkgLSAocS54IC0gcC54KSAqIChyLnkgLSBxLnkpO1xufVxuXG4vLyBjaGVjayBpZiB0d28gcG9pbnRzIGFyZSBlcXVhbFxuZnVuY3Rpb24gZXF1YWxzKHAxLCBwMikge1xuICAgIHJldHVybiBwMS54ID09PSBwMi54ICYmIHAxLnkgPT09IHAyLnk7XG59XG5cbi8vIGNoZWNrIGlmIHR3byBzZWdtZW50cyBpbnRlcnNlY3RcbmZ1bmN0aW9uIGludGVyc2VjdHMocDEsIHExLCBwMiwgcTIpIHtcbiAgICByZXR1cm4gYXJlYShwMSwgcTEsIHAyKSA+IDAgIT09IGFyZWEocDEsIHExLCBxMikgPiAwICYmXG4gICAgICAgICAgIGFyZWEocDIsIHEyLCBwMSkgPiAwICE9PSBhcmVhKHAyLCBxMiwgcTEpID4gMDtcbn1cblxuLy8gY2hlY2sgaWYgYSBwb2x5Z29uIGRpYWdvbmFsIGludGVyc2VjdHMgYW55IHBvbHlnb24gc2VnbWVudHNcbmZ1bmN0aW9uIGludGVyc2VjdHNQb2x5Z29uKGEsIGIpIHtcbiAgICB2YXIgcCA9IGE7XG4gICAgZG8ge1xuICAgICAgICBpZiAocC5pICE9PSBhLmkgJiYgcC5uZXh0LmkgIT09IGEuaSAmJiBwLmkgIT09IGIuaSAmJiBwLm5leHQuaSAhPT0gYi5pICYmXG4gICAgICAgICAgICAgICAgaW50ZXJzZWN0cyhwLCBwLm5leHQsIGEsIGIpKSByZXR1cm4gdHJ1ZTtcbiAgICAgICAgcCA9IHAubmV4dDtcbiAgICB9IHdoaWxlIChwICE9PSBhKTtcblxuICAgIHJldHVybiBmYWxzZTtcbn1cblxuLy8gY2hlY2sgaWYgYSBwb2x5Z29uIGRpYWdvbmFsIGlzIGxvY2FsbHkgaW5zaWRlIHRoZSBwb2x5Z29uXG5mdW5jdGlvbiBsb2NhbGx5SW5zaWRlKGEsIGIpIHtcbiAgICByZXR1cm4gYXJlYShhLnByZXYsIGEsIGEubmV4dCkgPCAwID9cbiAgICAgICAgYXJlYShhLCBiLCBhLm5leHQpID49IDAgJiYgYXJlYShhLCBhLnByZXYsIGIpID49IDAgOlxuICAgICAgICBhcmVhKGEsIGIsIGEucHJldikgPCAwIHx8IGFyZWEoYSwgYS5uZXh0LCBiKSA8IDA7XG59XG5cbi8vIGNoZWNrIGlmIHRoZSBtaWRkbGUgcG9pbnQgb2YgYSBwb2x5Z29uIGRpYWdvbmFsIGlzIGluc2lkZSB0aGUgcG9seWdvblxuZnVuY3Rpb24gbWlkZGxlSW5zaWRlKGEsIGIpIHtcbiAgICB2YXIgcCA9IGEsXG4gICAgICAgIGluc2lkZSA9IGZhbHNlLFxuICAgICAgICBweCA9IChhLnggKyBiLngpIC8gMixcbiAgICAgICAgcHkgPSAoYS55ICsgYi55KSAvIDI7XG4gICAgZG8ge1xuICAgICAgICBpZiAoKChwLnkgPiBweSkgIT09IChwLm5leHQueSA+IHB5KSkgJiYgKHB4IDwgKHAubmV4dC54IC0gcC54KSAqIChweSAtIHAueSkgLyAocC5uZXh0LnkgLSBwLnkpICsgcC54KSlcbiAgICAgICAgICAgIGluc2lkZSA9ICFpbnNpZGU7XG4gICAgICAgIHAgPSBwLm5leHQ7XG4gICAgfSB3aGlsZSAocCAhPT0gYSk7XG5cbiAgICByZXR1cm4gaW5zaWRlO1xufVxuXG4vLyBsaW5rIHR3byBwb2x5Z29uIHZlcnRpY2VzIHdpdGggYSBicmlkZ2U7IGlmIHRoZSB2ZXJ0aWNlcyBiZWxvbmcgdG8gdGhlIHNhbWUgcmluZywgaXQgc3BsaXRzIHBvbHlnb24gaW50byB0d287XG4vLyBpZiBvbmUgYmVsb25ncyB0byB0aGUgb3V0ZXIgcmluZyBhbmQgYW5vdGhlciB0byBhIGhvbGUsIGl0IG1lcmdlcyBpdCBpbnRvIGEgc2luZ2xlIHJpbmdcbmZ1bmN0aW9uIHNwbGl0UG9seWdvbihhLCBiKSB7XG4gICAgdmFyIGEyID0gbmV3IE5vZGUoYS5pLCBhLngsIGEueSksXG4gICAgICAgIGIyID0gbmV3IE5vZGUoYi5pLCBiLngsIGIueSksXG4gICAgICAgIGFuID0gYS5uZXh0LFxuICAgICAgICBicCA9IGIucHJldjtcblxuICAgIGEubmV4dCA9IGI7XG4gICAgYi5wcmV2ID0gYTtcblxuICAgIGEyLm5leHQgPSBhbjtcbiAgICBhbi5wcmV2ID0gYTI7XG5cbiAgICBiMi5uZXh0ID0gYTI7XG4gICAgYTIucHJldiA9IGIyO1xuXG4gICAgYnAubmV4dCA9IGIyO1xuICAgIGIyLnByZXYgPSBicDtcblxuICAgIHJldHVybiBiMjtcbn1cblxuLy8gY3JlYXRlIGEgbm9kZSBhbmQgb3B0aW9uYWxseSBsaW5rIGl0IHdpdGggcHJldmlvdXMgb25lIChpbiBhIGNpcmN1bGFyIGRvdWJseSBsaW5rZWQgbGlzdClcbmZ1bmN0aW9uIGluc2VydE5vZGUoaSwgeCwgeSwgbGFzdCkge1xuICAgIHZhciBwID0gbmV3IE5vZGUoaSwgeCwgeSk7XG5cbiAgICBpZiAoIWxhc3QpIHtcbiAgICAgICAgcC5wcmV2ID0gcDtcbiAgICAgICAgcC5uZXh0ID0gcDtcblxuICAgIH0gZWxzZSB7XG4gICAgICAgIHAubmV4dCA9IGxhc3QubmV4dDtcbiAgICAgICAgcC5wcmV2ID0gbGFzdDtcbiAgICAgICAgbGFzdC5uZXh0LnByZXYgPSBwO1xuICAgICAgICBsYXN0Lm5leHQgPSBwO1xuICAgIH1cbiAgICByZXR1cm4gcDtcbn1cblxuZnVuY3Rpb24gcmVtb3ZlTm9kZShwKSB7XG4gICAgcC5uZXh0LnByZXYgPSBwLnByZXY7XG4gICAgcC5wcmV2Lm5leHQgPSBwLm5leHQ7XG5cbiAgICBpZiAocC5wcmV2WikgcC5wcmV2Wi5uZXh0WiA9IHAubmV4dFo7XG4gICAgaWYgKHAubmV4dFopIHAubmV4dFoucHJldlogPSBwLnByZXZaO1xufVxuXG5mdW5jdGlvbiBOb2RlKGksIHgsIHkpIHtcbiAgICAvLyB2ZXJ0aWNlIGluZGV4IGluIGNvb3JkaW5hdGVzIGFycmF5XG4gICAgdGhpcy5pID0gaTtcblxuICAgIC8vIHZlcnRleCBjb29yZGluYXRlc1xuICAgIHRoaXMueCA9IHg7XG4gICAgdGhpcy55ID0geTtcblxuICAgIC8vIHByZXZpb3VzIGFuZCBuZXh0IHZlcnRpY2Ugbm9kZXMgaW4gYSBwb2x5Z29uIHJpbmdcbiAgICB0aGlzLnByZXYgPSBudWxsO1xuICAgIHRoaXMubmV4dCA9IG51bGw7XG5cbiAgICAvLyB6LW9yZGVyIGN1cnZlIHZhbHVlXG4gICAgdGhpcy56ID0gbnVsbDtcblxuICAgIC8vIHByZXZpb3VzIGFuZCBuZXh0IG5vZGVzIGluIHotb3JkZXJcbiAgICB0aGlzLnByZXZaID0gbnVsbDtcbiAgICB0aGlzLm5leHRaID0gbnVsbDtcblxuICAgIC8vIGluZGljYXRlcyB3aGV0aGVyIHRoaXMgaXMgYSBzdGVpbmVyIHBvaW50XG4gICAgdGhpcy5zdGVpbmVyID0gZmFsc2U7XG59XG4iLCIndXNlIHN0cmljdCc7XG5cbi8vXG4vLyBXZSBzdG9yZSBvdXIgRUUgb2JqZWN0cyBpbiBhIHBsYWluIG9iamVjdCB3aG9zZSBwcm9wZXJ0aWVzIGFyZSBldmVudCBuYW1lcy5cbi8vIElmIGBPYmplY3QuY3JlYXRlKG51bGwpYCBpcyBub3Qgc3VwcG9ydGVkIHdlIHByZWZpeCB0aGUgZXZlbnQgbmFtZXMgd2l0aCBhXG4vLyBgfmAgdG8gbWFrZSBzdXJlIHRoYXQgdGhlIGJ1aWx0LWluIG9iamVjdCBwcm9wZXJ0aWVzIGFyZSBub3Qgb3ZlcnJpZGRlbiBvclxuLy8gdXNlZCBhcyBhbiBhdHRhY2sgdmVjdG9yLlxuLy8gV2UgYWxzbyBhc3N1bWUgdGhhdCBgT2JqZWN0LmNyZWF0ZShudWxsKWAgaXMgYXZhaWxhYmxlIHdoZW4gdGhlIGV2ZW50IG5hbWVcbi8vIGlzIGFuIEVTNiBTeW1ib2wuXG4vL1xudmFyIHByZWZpeCA9IHR5cGVvZiBPYmplY3QuY3JlYXRlICE9PSAnZnVuY3Rpb24nID8gJ34nIDogZmFsc2U7XG5cbi8qKlxuICogUmVwcmVzZW50YXRpb24gb2YgYSBzaW5nbGUgRXZlbnRFbWl0dGVyIGZ1bmN0aW9uLlxuICpcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZuIEV2ZW50IGhhbmRsZXIgdG8gYmUgY2FsbGVkLlxuICogQHBhcmFtIHtNaXhlZH0gY29udGV4dCBDb250ZXh0IGZvciBmdW5jdGlvbiBleGVjdXRpb24uXG4gKiBAcGFyYW0ge0Jvb2xlYW59IG9uY2UgT25seSBlbWl0IG9uY2VcbiAqIEBhcGkgcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBFRShmbiwgY29udGV4dCwgb25jZSkge1xuICB0aGlzLmZuID0gZm47XG4gIHRoaXMuY29udGV4dCA9IGNvbnRleHQ7XG4gIHRoaXMub25jZSA9IG9uY2UgfHwgZmFsc2U7XG59XG5cbi8qKlxuICogTWluaW1hbCBFdmVudEVtaXR0ZXIgaW50ZXJmYWNlIHRoYXQgaXMgbW9sZGVkIGFnYWluc3QgdGhlIE5vZGUuanNcbiAqIEV2ZW50RW1pdHRlciBpbnRlcmZhY2UuXG4gKlxuICogQGNvbnN0cnVjdG9yXG4gKiBAYXBpIHB1YmxpY1xuICovXG5mdW5jdGlvbiBFdmVudEVtaXR0ZXIoKSB7IC8qIE5vdGhpbmcgdG8gc2V0ICovIH1cblxuLyoqXG4gKiBIb2xkcyB0aGUgYXNzaWduZWQgRXZlbnRFbWl0dGVycyBieSBuYW1lLlxuICpcbiAqIEB0eXBlIHtPYmplY3R9XG4gKiBAcHJpdmF0ZVxuICovXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLl9ldmVudHMgPSB1bmRlZmluZWQ7XG5cbi8qKlxuICogUmV0dXJuIGEgbGlzdCBvZiBhc3NpZ25lZCBldmVudCBsaXN0ZW5lcnMuXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IGV2ZW50IFRoZSBldmVudHMgdGhhdCBzaG91bGQgYmUgbGlzdGVkLlxuICogQHBhcmFtIHtCb29sZWFufSBleGlzdHMgV2Ugb25seSBuZWVkIHRvIGtub3cgaWYgdGhlcmUgYXJlIGxpc3RlbmVycy5cbiAqIEByZXR1cm5zIHtBcnJheXxCb29sZWFufVxuICogQGFwaSBwdWJsaWNcbiAqL1xuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5saXN0ZW5lcnMgPSBmdW5jdGlvbiBsaXN0ZW5lcnMoZXZlbnQsIGV4aXN0cykge1xuICB2YXIgZXZ0ID0gcHJlZml4ID8gcHJlZml4ICsgZXZlbnQgOiBldmVudFxuICAgICwgYXZhaWxhYmxlID0gdGhpcy5fZXZlbnRzICYmIHRoaXMuX2V2ZW50c1tldnRdO1xuXG4gIGlmIChleGlzdHMpIHJldHVybiAhIWF2YWlsYWJsZTtcbiAgaWYgKCFhdmFpbGFibGUpIHJldHVybiBbXTtcbiAgaWYgKGF2YWlsYWJsZS5mbikgcmV0dXJuIFthdmFpbGFibGUuZm5dO1xuXG4gIGZvciAodmFyIGkgPSAwLCBsID0gYXZhaWxhYmxlLmxlbmd0aCwgZWUgPSBuZXcgQXJyYXkobCk7IGkgPCBsOyBpKyspIHtcbiAgICBlZVtpXSA9IGF2YWlsYWJsZVtpXS5mbjtcbiAgfVxuXG4gIHJldHVybiBlZTtcbn07XG5cbi8qKlxuICogRW1pdCBhbiBldmVudCB0byBhbGwgcmVnaXN0ZXJlZCBldmVudCBsaXN0ZW5lcnMuXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IGV2ZW50IFRoZSBuYW1lIG9mIHRoZSBldmVudC5cbiAqIEByZXR1cm5zIHtCb29sZWFufSBJbmRpY2F0aW9uIGlmIHdlJ3ZlIGVtaXR0ZWQgYW4gZXZlbnQuXG4gKiBAYXBpIHB1YmxpY1xuICovXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLmVtaXQgPSBmdW5jdGlvbiBlbWl0KGV2ZW50LCBhMSwgYTIsIGEzLCBhNCwgYTUpIHtcbiAgdmFyIGV2dCA9IHByZWZpeCA/IHByZWZpeCArIGV2ZW50IDogZXZlbnQ7XG5cbiAgaWYgKCF0aGlzLl9ldmVudHMgfHwgIXRoaXMuX2V2ZW50c1tldnRdKSByZXR1cm4gZmFsc2U7XG5cbiAgdmFyIGxpc3RlbmVycyA9IHRoaXMuX2V2ZW50c1tldnRdXG4gICAgLCBsZW4gPSBhcmd1bWVudHMubGVuZ3RoXG4gICAgLCBhcmdzXG4gICAgLCBpO1xuXG4gIGlmICgnZnVuY3Rpb24nID09PSB0eXBlb2YgbGlzdGVuZXJzLmZuKSB7XG4gICAgaWYgKGxpc3RlbmVycy5vbmNlKSB0aGlzLnJlbW92ZUxpc3RlbmVyKGV2ZW50LCBsaXN0ZW5lcnMuZm4sIHVuZGVmaW5lZCwgdHJ1ZSk7XG5cbiAgICBzd2l0Y2ggKGxlbikge1xuICAgICAgY2FzZSAxOiByZXR1cm4gbGlzdGVuZXJzLmZuLmNhbGwobGlzdGVuZXJzLmNvbnRleHQpLCB0cnVlO1xuICAgICAgY2FzZSAyOiByZXR1cm4gbGlzdGVuZXJzLmZuLmNhbGwobGlzdGVuZXJzLmNvbnRleHQsIGExKSwgdHJ1ZTtcbiAgICAgIGNhc2UgMzogcmV0dXJuIGxpc3RlbmVycy5mbi5jYWxsKGxpc3RlbmVycy5jb250ZXh0LCBhMSwgYTIpLCB0cnVlO1xuICAgICAgY2FzZSA0OiByZXR1cm4gbGlzdGVuZXJzLmZuLmNhbGwobGlzdGVuZXJzLmNvbnRleHQsIGExLCBhMiwgYTMpLCB0cnVlO1xuICAgICAgY2FzZSA1OiByZXR1cm4gbGlzdGVuZXJzLmZuLmNhbGwobGlzdGVuZXJzLmNvbnRleHQsIGExLCBhMiwgYTMsIGE0KSwgdHJ1ZTtcbiAgICAgIGNhc2UgNjogcmV0dXJuIGxpc3RlbmVycy5mbi5jYWxsKGxpc3RlbmVycy5jb250ZXh0LCBhMSwgYTIsIGEzLCBhNCwgYTUpLCB0cnVlO1xuICAgIH1cblxuICAgIGZvciAoaSA9IDEsIGFyZ3MgPSBuZXcgQXJyYXkobGVuIC0xKTsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICBhcmdzW2kgLSAxXSA9IGFyZ3VtZW50c1tpXTtcbiAgICB9XG5cbiAgICBsaXN0ZW5lcnMuZm4uYXBwbHkobGlzdGVuZXJzLmNvbnRleHQsIGFyZ3MpO1xuICB9IGVsc2Uge1xuICAgIHZhciBsZW5ndGggPSBsaXN0ZW5lcnMubGVuZ3RoXG4gICAgICAsIGo7XG5cbiAgICBmb3IgKGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmIChsaXN0ZW5lcnNbaV0ub25jZSkgdGhpcy5yZW1vdmVMaXN0ZW5lcihldmVudCwgbGlzdGVuZXJzW2ldLmZuLCB1bmRlZmluZWQsIHRydWUpO1xuXG4gICAgICBzd2l0Y2ggKGxlbikge1xuICAgICAgICBjYXNlIDE6IGxpc3RlbmVyc1tpXS5mbi5jYWxsKGxpc3RlbmVyc1tpXS5jb250ZXh0KTsgYnJlYWs7XG4gICAgICAgIGNhc2UgMjogbGlzdGVuZXJzW2ldLmZuLmNhbGwobGlzdGVuZXJzW2ldLmNvbnRleHQsIGExKTsgYnJlYWs7XG4gICAgICAgIGNhc2UgMzogbGlzdGVuZXJzW2ldLmZuLmNhbGwobGlzdGVuZXJzW2ldLmNvbnRleHQsIGExLCBhMik7IGJyZWFrO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIGlmICghYXJncykgZm9yIChqID0gMSwgYXJncyA9IG5ldyBBcnJheShsZW4gLTEpOyBqIDwgbGVuOyBqKyspIHtcbiAgICAgICAgICAgIGFyZ3NbaiAtIDFdID0gYXJndW1lbnRzW2pdO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGxpc3RlbmVyc1tpXS5mbi5hcHBseShsaXN0ZW5lcnNbaV0uY29udGV4dCwgYXJncyk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHRydWU7XG59O1xuXG4vKipcbiAqIFJlZ2lzdGVyIGEgbmV3IEV2ZW50TGlzdGVuZXIgZm9yIHRoZSBnaXZlbiBldmVudC5cbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gZXZlbnQgTmFtZSBvZiB0aGUgZXZlbnQuXG4gKiBAcGFyYW0ge0Z1bmN0b259IGZuIENhbGxiYWNrIGZ1bmN0aW9uLlxuICogQHBhcmFtIHtNaXhlZH0gY29udGV4dCBUaGUgY29udGV4dCBvZiB0aGUgZnVuY3Rpb24uXG4gKiBAYXBpIHB1YmxpY1xuICovXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLm9uID0gZnVuY3Rpb24gb24oZXZlbnQsIGZuLCBjb250ZXh0KSB7XG4gIHZhciBsaXN0ZW5lciA9IG5ldyBFRShmbiwgY29udGV4dCB8fCB0aGlzKVxuICAgICwgZXZ0ID0gcHJlZml4ID8gcHJlZml4ICsgZXZlbnQgOiBldmVudDtcblxuICBpZiAoIXRoaXMuX2V2ZW50cykgdGhpcy5fZXZlbnRzID0gcHJlZml4ID8ge30gOiBPYmplY3QuY3JlYXRlKG51bGwpO1xuICBpZiAoIXRoaXMuX2V2ZW50c1tldnRdKSB0aGlzLl9ldmVudHNbZXZ0XSA9IGxpc3RlbmVyO1xuICBlbHNlIHtcbiAgICBpZiAoIXRoaXMuX2V2ZW50c1tldnRdLmZuKSB0aGlzLl9ldmVudHNbZXZ0XS5wdXNoKGxpc3RlbmVyKTtcbiAgICBlbHNlIHRoaXMuX2V2ZW50c1tldnRdID0gW1xuICAgICAgdGhpcy5fZXZlbnRzW2V2dF0sIGxpc3RlbmVyXG4gICAgXTtcbiAgfVxuXG4gIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBBZGQgYW4gRXZlbnRMaXN0ZW5lciB0aGF0J3Mgb25seSBjYWxsZWQgb25jZS5cbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gZXZlbnQgTmFtZSBvZiB0aGUgZXZlbnQuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmbiBDYWxsYmFjayBmdW5jdGlvbi5cbiAqIEBwYXJhbSB7TWl4ZWR9IGNvbnRleHQgVGhlIGNvbnRleHQgb2YgdGhlIGZ1bmN0aW9uLlxuICogQGFwaSBwdWJsaWNcbiAqL1xuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5vbmNlID0gZnVuY3Rpb24gb25jZShldmVudCwgZm4sIGNvbnRleHQpIHtcbiAgdmFyIGxpc3RlbmVyID0gbmV3IEVFKGZuLCBjb250ZXh0IHx8IHRoaXMsIHRydWUpXG4gICAgLCBldnQgPSBwcmVmaXggPyBwcmVmaXggKyBldmVudCA6IGV2ZW50O1xuXG4gIGlmICghdGhpcy5fZXZlbnRzKSB0aGlzLl9ldmVudHMgPSBwcmVmaXggPyB7fSA6IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gIGlmICghdGhpcy5fZXZlbnRzW2V2dF0pIHRoaXMuX2V2ZW50c1tldnRdID0gbGlzdGVuZXI7XG4gIGVsc2Uge1xuICAgIGlmICghdGhpcy5fZXZlbnRzW2V2dF0uZm4pIHRoaXMuX2V2ZW50c1tldnRdLnB1c2gobGlzdGVuZXIpO1xuICAgIGVsc2UgdGhpcy5fZXZlbnRzW2V2dF0gPSBbXG4gICAgICB0aGlzLl9ldmVudHNbZXZ0XSwgbGlzdGVuZXJcbiAgICBdO1xuICB9XG5cbiAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIFJlbW92ZSBldmVudCBsaXN0ZW5lcnMuXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IGV2ZW50IFRoZSBldmVudCB3ZSB3YW50IHRvIHJlbW92ZS5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZuIFRoZSBsaXN0ZW5lciB0aGF0IHdlIG5lZWQgdG8gZmluZC5cbiAqIEBwYXJhbSB7TWl4ZWR9IGNvbnRleHQgT25seSByZW1vdmUgbGlzdGVuZXJzIG1hdGNoaW5nIHRoaXMgY29udGV4dC5cbiAqIEBwYXJhbSB7Qm9vbGVhbn0gb25jZSBPbmx5IHJlbW92ZSBvbmNlIGxpc3RlbmVycy5cbiAqIEBhcGkgcHVibGljXG4gKi9cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUucmVtb3ZlTGlzdGVuZXIgPSBmdW5jdGlvbiByZW1vdmVMaXN0ZW5lcihldmVudCwgZm4sIGNvbnRleHQsIG9uY2UpIHtcbiAgdmFyIGV2dCA9IHByZWZpeCA/IHByZWZpeCArIGV2ZW50IDogZXZlbnQ7XG5cbiAgaWYgKCF0aGlzLl9ldmVudHMgfHwgIXRoaXMuX2V2ZW50c1tldnRdKSByZXR1cm4gdGhpcztcblxuICB2YXIgbGlzdGVuZXJzID0gdGhpcy5fZXZlbnRzW2V2dF1cbiAgICAsIGV2ZW50cyA9IFtdO1xuXG4gIGlmIChmbikge1xuICAgIGlmIChsaXN0ZW5lcnMuZm4pIHtcbiAgICAgIGlmIChcbiAgICAgICAgICAgbGlzdGVuZXJzLmZuICE9PSBmblxuICAgICAgICB8fCAob25jZSAmJiAhbGlzdGVuZXJzLm9uY2UpXG4gICAgICAgIHx8IChjb250ZXh0ICYmIGxpc3RlbmVycy5jb250ZXh0ICE9PSBjb250ZXh0KVxuICAgICAgKSB7XG4gICAgICAgIGV2ZW50cy5wdXNoKGxpc3RlbmVycyk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGZvciAodmFyIGkgPSAwLCBsZW5ndGggPSBsaXN0ZW5lcnMubGVuZ3RoOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgIGxpc3RlbmVyc1tpXS5mbiAhPT0gZm5cbiAgICAgICAgICB8fCAob25jZSAmJiAhbGlzdGVuZXJzW2ldLm9uY2UpXG4gICAgICAgICAgfHwgKGNvbnRleHQgJiYgbGlzdGVuZXJzW2ldLmNvbnRleHQgIT09IGNvbnRleHQpXG4gICAgICAgICkge1xuICAgICAgICAgIGV2ZW50cy5wdXNoKGxpc3RlbmVyc1tpXSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvL1xuICAvLyBSZXNldCB0aGUgYXJyYXksIG9yIHJlbW92ZSBpdCBjb21wbGV0ZWx5IGlmIHdlIGhhdmUgbm8gbW9yZSBsaXN0ZW5lcnMuXG4gIC8vXG4gIGlmIChldmVudHMubGVuZ3RoKSB7XG4gICAgdGhpcy5fZXZlbnRzW2V2dF0gPSBldmVudHMubGVuZ3RoID09PSAxID8gZXZlbnRzWzBdIDogZXZlbnRzO1xuICB9IGVsc2Uge1xuICAgIGRlbGV0ZSB0aGlzLl9ldmVudHNbZXZ0XTtcbiAgfVxuXG4gIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBSZW1vdmUgYWxsIGxpc3RlbmVycyBvciBvbmx5IHRoZSBsaXN0ZW5lcnMgZm9yIHRoZSBzcGVjaWZpZWQgZXZlbnQuXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IGV2ZW50IFRoZSBldmVudCB3YW50IHRvIHJlbW92ZSBhbGwgbGlzdGVuZXJzIGZvci5cbiAqIEBhcGkgcHVibGljXG4gKi9cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUucmVtb3ZlQWxsTGlzdGVuZXJzID0gZnVuY3Rpb24gcmVtb3ZlQWxsTGlzdGVuZXJzKGV2ZW50KSB7XG4gIGlmICghdGhpcy5fZXZlbnRzKSByZXR1cm4gdGhpcztcblxuICBpZiAoZXZlbnQpIGRlbGV0ZSB0aGlzLl9ldmVudHNbcHJlZml4ID8gcHJlZml4ICsgZXZlbnQgOiBldmVudF07XG4gIGVsc2UgdGhpcy5fZXZlbnRzID0gcHJlZml4ID8ge30gOiBPYmplY3QuY3JlYXRlKG51bGwpO1xuXG4gIHJldHVybiB0aGlzO1xufTtcblxuLy9cbi8vIEFsaWFzIG1ldGhvZHMgbmFtZXMgYmVjYXVzZSBwZW9wbGUgcm9sbCBsaWtlIHRoYXQuXG4vL1xuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5vZmYgPSBFdmVudEVtaXR0ZXIucHJvdG90eXBlLnJlbW92ZUxpc3RlbmVyO1xuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5hZGRMaXN0ZW5lciA9IEV2ZW50RW1pdHRlci5wcm90b3R5cGUub247XG5cbi8vXG4vLyBUaGlzIGZ1bmN0aW9uIGRvZXNuJ3QgYXBwbHkgYW55bW9yZS5cbi8vXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLnNldE1heExpc3RlbmVycyA9IGZ1bmN0aW9uIHNldE1heExpc3RlbmVycygpIHtcbiAgcmV0dXJuIHRoaXM7XG59O1xuXG4vL1xuLy8gRXhwb3NlIHRoZSBwcmVmaXguXG4vL1xuRXZlbnRFbWl0dGVyLnByZWZpeGVkID0gcHJlZml4O1xuXG4vL1xuLy8gRXhwb3NlIHRoZSBtb2R1bGUuXG4vL1xuaWYgKCd1bmRlZmluZWQnICE9PSB0eXBlb2YgbW9kdWxlKSB7XG4gIG1vZHVsZS5leHBvcnRzID0gRXZlbnRFbWl0dGVyO1xufVxuIiwiLyogZXNsaW50LWRpc2FibGUgbm8tdW51c2VkLXZhcnMgKi9cbid1c2Ugc3RyaWN0JztcbnZhciBoYXNPd25Qcm9wZXJ0eSA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7XG52YXIgcHJvcElzRW51bWVyYWJsZSA9IE9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGU7XG5cbmZ1bmN0aW9uIHRvT2JqZWN0KHZhbCkge1xuXHRpZiAodmFsID09PSBudWxsIHx8IHZhbCA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0dGhyb3cgbmV3IFR5cGVFcnJvcignT2JqZWN0LmFzc2lnbiBjYW5ub3QgYmUgY2FsbGVkIHdpdGggbnVsbCBvciB1bmRlZmluZWQnKTtcblx0fVxuXG5cdHJldHVybiBPYmplY3QodmFsKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQsIHNvdXJjZSkge1xuXHR2YXIgZnJvbTtcblx0dmFyIHRvID0gdG9PYmplY3QodGFyZ2V0KTtcblx0dmFyIHN5bWJvbHM7XG5cblx0Zm9yICh2YXIgcyA9IDE7IHMgPCBhcmd1bWVudHMubGVuZ3RoOyBzKyspIHtcblx0XHRmcm9tID0gT2JqZWN0KGFyZ3VtZW50c1tzXSk7XG5cblx0XHRmb3IgKHZhciBrZXkgaW4gZnJvbSkge1xuXHRcdFx0aWYgKGhhc093blByb3BlcnR5LmNhbGwoZnJvbSwga2V5KSkge1xuXHRcdFx0XHR0b1trZXldID0gZnJvbVtrZXldO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7XG5cdFx0XHRzeW1ib2xzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhmcm9tKTtcblx0XHRcdGZvciAodmFyIGkgPSAwOyBpIDwgc3ltYm9scy5sZW5ndGg7IGkrKykge1xuXHRcdFx0XHRpZiAocHJvcElzRW51bWVyYWJsZS5jYWxsKGZyb20sIHN5bWJvbHNbaV0pKSB7XG5cdFx0XHRcdFx0dG9bc3ltYm9sc1tpXV0gPSBmcm9tW3N5bWJvbHNbaV1dO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIHRvO1xufTtcbiIsIi8qIVxuICogYXN5bmNcbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS9jYW9sYW4vYXN5bmNcbiAqXG4gKiBDb3B5cmlnaHQgMjAxMC0yMDE0IENhb2xhbiBNY01haG9uXG4gKiBSZWxlYXNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2VcbiAqL1xuLypqc2hpbnQgb25ldmFyOiBmYWxzZSwgaW5kZW50OjQgKi9cbi8qZ2xvYmFsIHNldEltbWVkaWF0ZTogZmFsc2UsIHNldFRpbWVvdXQ6IGZhbHNlLCBjb25zb2xlOiBmYWxzZSAqL1xuKGZ1bmN0aW9uICgpIHtcblxuICAgIHZhciBhc3luYyA9IHt9O1xuXG4gICAgLy8gZ2xvYmFsIG9uIHRoZSBzZXJ2ZXIsIHdpbmRvdyBpbiB0aGUgYnJvd3NlclxuICAgIHZhciByb290LCBwcmV2aW91c19hc3luYztcblxuICAgIHJvb3QgPSB0aGlzO1xuICAgIGlmIChyb290ICE9IG51bGwpIHtcbiAgICAgIHByZXZpb3VzX2FzeW5jID0gcm9vdC5hc3luYztcbiAgICB9XG5cbiAgICBhc3luYy5ub0NvbmZsaWN0ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByb290LmFzeW5jID0gcHJldmlvdXNfYXN5bmM7XG4gICAgICAgIHJldHVybiBhc3luYztcbiAgICB9O1xuXG4gICAgZnVuY3Rpb24gb25seV9vbmNlKGZuKSB7XG4gICAgICAgIHZhciBjYWxsZWQgPSBmYWxzZTtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgaWYgKGNhbGxlZCkgdGhyb3cgbmV3IEVycm9yKFwiQ2FsbGJhY2sgd2FzIGFscmVhZHkgY2FsbGVkLlwiKTtcbiAgICAgICAgICAgIGNhbGxlZCA9IHRydWU7XG4gICAgICAgICAgICBmbi5hcHBseShyb290LCBhcmd1bWVudHMpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8vLyBjcm9zcy1icm93c2VyIGNvbXBhdGlibGl0eSBmdW5jdGlvbnMgLy8vL1xuXG4gICAgdmFyIF90b1N0cmluZyA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7XG5cbiAgICB2YXIgX2lzQXJyYXkgPSBBcnJheS5pc0FycmF5IHx8IGZ1bmN0aW9uIChvYmopIHtcbiAgICAgICAgcmV0dXJuIF90b1N0cmluZy5jYWxsKG9iaikgPT09ICdbb2JqZWN0IEFycmF5XSc7XG4gICAgfTtcblxuICAgIHZhciBfZWFjaCA9IGZ1bmN0aW9uIChhcnIsIGl0ZXJhdG9yKSB7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXJyLmxlbmd0aDsgaSArPSAxKSB7XG4gICAgICAgICAgICBpdGVyYXRvcihhcnJbaV0sIGksIGFycik7XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgdmFyIF9tYXAgPSBmdW5jdGlvbiAoYXJyLCBpdGVyYXRvcikge1xuICAgICAgICBpZiAoYXJyLm1hcCkge1xuICAgICAgICAgICAgcmV0dXJuIGFyci5tYXAoaXRlcmF0b3IpO1xuICAgICAgICB9XG4gICAgICAgIHZhciByZXN1bHRzID0gW107XG4gICAgICAgIF9lYWNoKGFyciwgZnVuY3Rpb24gKHgsIGksIGEpIHtcbiAgICAgICAgICAgIHJlc3VsdHMucHVzaChpdGVyYXRvcih4LCBpLCBhKSk7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gcmVzdWx0cztcbiAgICB9O1xuXG4gICAgdmFyIF9yZWR1Y2UgPSBmdW5jdGlvbiAoYXJyLCBpdGVyYXRvciwgbWVtbykge1xuICAgICAgICBpZiAoYXJyLnJlZHVjZSkge1xuICAgICAgICAgICAgcmV0dXJuIGFyci5yZWR1Y2UoaXRlcmF0b3IsIG1lbW8pO1xuICAgICAgICB9XG4gICAgICAgIF9lYWNoKGFyciwgZnVuY3Rpb24gKHgsIGksIGEpIHtcbiAgICAgICAgICAgIG1lbW8gPSBpdGVyYXRvcihtZW1vLCB4LCBpLCBhKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBtZW1vO1xuICAgIH07XG5cbiAgICB2YXIgX2tleXMgPSBmdW5jdGlvbiAob2JqKSB7XG4gICAgICAgIGlmIChPYmplY3Qua2V5cykge1xuICAgICAgICAgICAgcmV0dXJuIE9iamVjdC5rZXlzKG9iaik7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIGtleXMgPSBbXTtcbiAgICAgICAgZm9yICh2YXIgayBpbiBvYmopIHtcbiAgICAgICAgICAgIGlmIChvYmouaGFzT3duUHJvcGVydHkoaykpIHtcbiAgICAgICAgICAgICAgICBrZXlzLnB1c2goayk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGtleXM7XG4gICAgfTtcblxuICAgIC8vLy8gZXhwb3J0ZWQgYXN5bmMgbW9kdWxlIGZ1bmN0aW9ucyAvLy8vXG5cbiAgICAvLy8vIG5leHRUaWNrIGltcGxlbWVudGF0aW9uIHdpdGggYnJvd3Nlci1jb21wYXRpYmxlIGZhbGxiYWNrIC8vLy9cbiAgICBpZiAodHlwZW9mIHByb2Nlc3MgPT09ICd1bmRlZmluZWQnIHx8ICEocHJvY2Vzcy5uZXh0VGljaykpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBzZXRJbW1lZGlhdGUgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIGFzeW5jLm5leHRUaWNrID0gZnVuY3Rpb24gKGZuKSB7XG4gICAgICAgICAgICAgICAgLy8gbm90IGEgZGlyZWN0IGFsaWFzIGZvciBJRTEwIGNvbXBhdGliaWxpdHlcbiAgICAgICAgICAgICAgICBzZXRJbW1lZGlhdGUoZm4pO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGFzeW5jLnNldEltbWVkaWF0ZSA9IGFzeW5jLm5leHRUaWNrO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgYXN5bmMubmV4dFRpY2sgPSBmdW5jdGlvbiAoZm4pIHtcbiAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KGZuLCAwKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBhc3luYy5zZXRJbW1lZGlhdGUgPSBhc3luYy5uZXh0VGljaztcbiAgICAgICAgfVxuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgYXN5bmMubmV4dFRpY2sgPSBwcm9jZXNzLm5leHRUaWNrO1xuICAgICAgICBpZiAodHlwZW9mIHNldEltbWVkaWF0ZSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgIGFzeW5jLnNldEltbWVkaWF0ZSA9IGZ1bmN0aW9uIChmbikge1xuICAgICAgICAgICAgICAvLyBub3QgYSBkaXJlY3QgYWxpYXMgZm9yIElFMTAgY29tcGF0aWJpbGl0eVxuICAgICAgICAgICAgICBzZXRJbW1lZGlhdGUoZm4pO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGFzeW5jLnNldEltbWVkaWF0ZSA9IGFzeW5jLm5leHRUaWNrO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgYXN5bmMuZWFjaCA9IGZ1bmN0aW9uIChhcnIsIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICBjYWxsYmFjayA9IGNhbGxiYWNrIHx8IGZ1bmN0aW9uICgpIHt9O1xuICAgICAgICBpZiAoIWFyci5sZW5ndGgpIHtcbiAgICAgICAgICAgIHJldHVybiBjYWxsYmFjaygpO1xuICAgICAgICB9XG4gICAgICAgIHZhciBjb21wbGV0ZWQgPSAwO1xuICAgICAgICBfZWFjaChhcnIsIGZ1bmN0aW9uICh4KSB7XG4gICAgICAgICAgICBpdGVyYXRvcih4LCBvbmx5X29uY2UoZG9uZSkgKTtcbiAgICAgICAgfSk7XG4gICAgICAgIGZ1bmN0aW9uIGRvbmUoZXJyKSB7XG4gICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgICBjYWxsYmFjayA9IGZ1bmN0aW9uICgpIHt9O1xuICAgICAgICAgIH1cbiAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgY29tcGxldGVkICs9IDE7XG4gICAgICAgICAgICAgIGlmIChjb21wbGV0ZWQgPj0gYXJyLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgY2FsbGJhY2soKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH07XG4gICAgYXN5bmMuZm9yRWFjaCA9IGFzeW5jLmVhY2g7XG5cbiAgICBhc3luYy5lYWNoU2VyaWVzID0gZnVuY3Rpb24gKGFyciwgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgIGNhbGxiYWNrID0gY2FsbGJhY2sgfHwgZnVuY3Rpb24gKCkge307XG4gICAgICAgIGlmICghYXJyLmxlbmd0aCkge1xuICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKCk7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIGNvbXBsZXRlZCA9IDA7XG4gICAgICAgIHZhciBpdGVyYXRlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgaXRlcmF0b3IoYXJyW2NvbXBsZXRlZF0sIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrID0gZnVuY3Rpb24gKCkge307XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBjb21wbGV0ZWQgKz0gMTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNvbXBsZXRlZCA+PSBhcnIubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgaXRlcmF0ZSgpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH07XG4gICAgICAgIGl0ZXJhdGUoKTtcbiAgICB9O1xuICAgIGFzeW5jLmZvckVhY2hTZXJpZXMgPSBhc3luYy5lYWNoU2VyaWVzO1xuXG4gICAgYXN5bmMuZWFjaExpbWl0ID0gZnVuY3Rpb24gKGFyciwgbGltaXQsIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICB2YXIgZm4gPSBfZWFjaExpbWl0KGxpbWl0KTtcbiAgICAgICAgZm4uYXBwbHkobnVsbCwgW2FyciwgaXRlcmF0b3IsIGNhbGxiYWNrXSk7XG4gICAgfTtcbiAgICBhc3luYy5mb3JFYWNoTGltaXQgPSBhc3luYy5lYWNoTGltaXQ7XG5cbiAgICB2YXIgX2VhY2hMaW1pdCA9IGZ1bmN0aW9uIChsaW1pdCkge1xuXG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAoYXJyLCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIGNhbGxiYWNrID0gY2FsbGJhY2sgfHwgZnVuY3Rpb24gKCkge307XG4gICAgICAgICAgICBpZiAoIWFyci5sZW5ndGggfHwgbGltaXQgPD0gMCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBjYWxsYmFjaygpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdmFyIGNvbXBsZXRlZCA9IDA7XG4gICAgICAgICAgICB2YXIgc3RhcnRlZCA9IDA7XG4gICAgICAgICAgICB2YXIgcnVubmluZyA9IDA7XG5cbiAgICAgICAgICAgIChmdW5jdGlvbiByZXBsZW5pc2ggKCkge1xuICAgICAgICAgICAgICAgIGlmIChjb21wbGV0ZWQgPj0gYXJyLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gY2FsbGJhY2soKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB3aGlsZSAocnVubmluZyA8IGxpbWl0ICYmIHN0YXJ0ZWQgPCBhcnIubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgIHN0YXJ0ZWQgKz0gMTtcbiAgICAgICAgICAgICAgICAgICAgcnVubmluZyArPSAxO1xuICAgICAgICAgICAgICAgICAgICBpdGVyYXRvcihhcnJbc3RhcnRlZCAtIDFdLCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayA9IGZ1bmN0aW9uICgpIHt9O1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcGxldGVkICs9IDE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcnVubmluZyAtPSAxO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb21wbGV0ZWQgPj0gYXJyLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVwbGVuaXNoKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KSgpO1xuICAgICAgICB9O1xuICAgIH07XG5cblxuICAgIHZhciBkb1BhcmFsbGVsID0gZnVuY3Rpb24gKGZuKSB7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7XG4gICAgICAgICAgICByZXR1cm4gZm4uYXBwbHkobnVsbCwgW2FzeW5jLmVhY2hdLmNvbmNhdChhcmdzKSk7XG4gICAgICAgIH07XG4gICAgfTtcbiAgICB2YXIgZG9QYXJhbGxlbExpbWl0ID0gZnVuY3Rpb24obGltaXQsIGZuKSB7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7XG4gICAgICAgICAgICByZXR1cm4gZm4uYXBwbHkobnVsbCwgW19lYWNoTGltaXQobGltaXQpXS5jb25jYXQoYXJncykpO1xuICAgICAgICB9O1xuICAgIH07XG4gICAgdmFyIGRvU2VyaWVzID0gZnVuY3Rpb24gKGZuKSB7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7XG4gICAgICAgICAgICByZXR1cm4gZm4uYXBwbHkobnVsbCwgW2FzeW5jLmVhY2hTZXJpZXNdLmNvbmNhdChhcmdzKSk7XG4gICAgICAgIH07XG4gICAgfTtcblxuXG4gICAgdmFyIF9hc3luY01hcCA9IGZ1bmN0aW9uIChlYWNoZm4sIGFyciwgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgIGFyciA9IF9tYXAoYXJyLCBmdW5jdGlvbiAoeCwgaSkge1xuICAgICAgICAgICAgcmV0dXJuIHtpbmRleDogaSwgdmFsdWU6IHh9O1xuICAgICAgICB9KTtcbiAgICAgICAgaWYgKCFjYWxsYmFjaykge1xuICAgICAgICAgICAgZWFjaGZuKGFyciwgZnVuY3Rpb24gKHgsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICAgICAgaXRlcmF0b3IoeC52YWx1ZSwgZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB2YXIgcmVzdWx0cyA9IFtdO1xuICAgICAgICAgICAgZWFjaGZuKGFyciwgZnVuY3Rpb24gKHgsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICAgICAgaXRlcmF0b3IoeC52YWx1ZSwgZnVuY3Rpb24gKGVyciwgdikge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHRzW3guaW5kZXhdID0gdjtcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0sIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnIsIHJlc3VsdHMpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIGFzeW5jLm1hcCA9IGRvUGFyYWxsZWwoX2FzeW5jTWFwKTtcbiAgICBhc3luYy5tYXBTZXJpZXMgPSBkb1NlcmllcyhfYXN5bmNNYXApO1xuICAgIGFzeW5jLm1hcExpbWl0ID0gZnVuY3Rpb24gKGFyciwgbGltaXQsIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICByZXR1cm4gX21hcExpbWl0KGxpbWl0KShhcnIsIGl0ZXJhdG9yLCBjYWxsYmFjayk7XG4gICAgfTtcblxuICAgIHZhciBfbWFwTGltaXQgPSBmdW5jdGlvbihsaW1pdCkge1xuICAgICAgICByZXR1cm4gZG9QYXJhbGxlbExpbWl0KGxpbWl0LCBfYXN5bmNNYXApO1xuICAgIH07XG5cbiAgICAvLyByZWR1Y2Ugb25seSBoYXMgYSBzZXJpZXMgdmVyc2lvbiwgYXMgZG9pbmcgcmVkdWNlIGluIHBhcmFsbGVsIHdvbid0XG4gICAgLy8gd29yayBpbiBtYW55IHNpdHVhdGlvbnMuXG4gICAgYXN5bmMucmVkdWNlID0gZnVuY3Rpb24gKGFyciwgbWVtbywgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgIGFzeW5jLmVhY2hTZXJpZXMoYXJyLCBmdW5jdGlvbiAoeCwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIGl0ZXJhdG9yKG1lbW8sIHgsIGZ1bmN0aW9uIChlcnIsIHYpIHtcbiAgICAgICAgICAgICAgICBtZW1vID0gdjtcbiAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgIGNhbGxiYWNrKGVyciwgbWVtbyk7XG4gICAgICAgIH0pO1xuICAgIH07XG4gICAgLy8gaW5qZWN0IGFsaWFzXG4gICAgYXN5bmMuaW5qZWN0ID0gYXN5bmMucmVkdWNlO1xuICAgIC8vIGZvbGRsIGFsaWFzXG4gICAgYXN5bmMuZm9sZGwgPSBhc3luYy5yZWR1Y2U7XG5cbiAgICBhc3luYy5yZWR1Y2VSaWdodCA9IGZ1bmN0aW9uIChhcnIsIG1lbW8sIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICB2YXIgcmV2ZXJzZWQgPSBfbWFwKGFyciwgZnVuY3Rpb24gKHgpIHtcbiAgICAgICAgICAgIHJldHVybiB4O1xuICAgICAgICB9KS5yZXZlcnNlKCk7XG4gICAgICAgIGFzeW5jLnJlZHVjZShyZXZlcnNlZCwgbWVtbywgaXRlcmF0b3IsIGNhbGxiYWNrKTtcbiAgICB9O1xuICAgIC8vIGZvbGRyIGFsaWFzXG4gICAgYXN5bmMuZm9sZHIgPSBhc3luYy5yZWR1Y2VSaWdodDtcblxuICAgIHZhciBfZmlsdGVyID0gZnVuY3Rpb24gKGVhY2hmbiwgYXJyLCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgdmFyIHJlc3VsdHMgPSBbXTtcbiAgICAgICAgYXJyID0gX21hcChhcnIsIGZ1bmN0aW9uICh4LCBpKSB7XG4gICAgICAgICAgICByZXR1cm4ge2luZGV4OiBpLCB2YWx1ZTogeH07XG4gICAgICAgIH0pO1xuICAgICAgICBlYWNoZm4oYXJyLCBmdW5jdGlvbiAoeCwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIGl0ZXJhdG9yKHgudmFsdWUsIGZ1bmN0aW9uICh2KSB7XG4gICAgICAgICAgICAgICAgaWYgKHYpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0cy5wdXNoKHgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgIGNhbGxiYWNrKF9tYXAocmVzdWx0cy5zb3J0KGZ1bmN0aW9uIChhLCBiKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGEuaW5kZXggLSBiLmluZGV4O1xuICAgICAgICAgICAgfSksIGZ1bmN0aW9uICh4KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHgudmFsdWU7XG4gICAgICAgICAgICB9KSk7XG4gICAgICAgIH0pO1xuICAgIH07XG4gICAgYXN5bmMuZmlsdGVyID0gZG9QYXJhbGxlbChfZmlsdGVyKTtcbiAgICBhc3luYy5maWx0ZXJTZXJpZXMgPSBkb1NlcmllcyhfZmlsdGVyKTtcbiAgICAvLyBzZWxlY3QgYWxpYXNcbiAgICBhc3luYy5zZWxlY3QgPSBhc3luYy5maWx0ZXI7XG4gICAgYXN5bmMuc2VsZWN0U2VyaWVzID0gYXN5bmMuZmlsdGVyU2VyaWVzO1xuXG4gICAgdmFyIF9yZWplY3QgPSBmdW5jdGlvbiAoZWFjaGZuLCBhcnIsIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICB2YXIgcmVzdWx0cyA9IFtdO1xuICAgICAgICBhcnIgPSBfbWFwKGFyciwgZnVuY3Rpb24gKHgsIGkpIHtcbiAgICAgICAgICAgIHJldHVybiB7aW5kZXg6IGksIHZhbHVlOiB4fTtcbiAgICAgICAgfSk7XG4gICAgICAgIGVhY2hmbihhcnIsIGZ1bmN0aW9uICh4LCBjYWxsYmFjaykge1xuICAgICAgICAgICAgaXRlcmF0b3IoeC52YWx1ZSwgZnVuY3Rpb24gKHYpIHtcbiAgICAgICAgICAgICAgICBpZiAoIXYpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0cy5wdXNoKHgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgIGNhbGxiYWNrKF9tYXAocmVzdWx0cy5zb3J0KGZ1bmN0aW9uIChhLCBiKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGEuaW5kZXggLSBiLmluZGV4O1xuICAgICAgICAgICAgfSksIGZ1bmN0aW9uICh4KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHgudmFsdWU7XG4gICAgICAgICAgICB9KSk7XG4gICAgICAgIH0pO1xuICAgIH07XG4gICAgYXN5bmMucmVqZWN0ID0gZG9QYXJhbGxlbChfcmVqZWN0KTtcbiAgICBhc3luYy5yZWplY3RTZXJpZXMgPSBkb1NlcmllcyhfcmVqZWN0KTtcblxuICAgIHZhciBfZGV0ZWN0ID0gZnVuY3Rpb24gKGVhY2hmbiwgYXJyLCBpdGVyYXRvciwgbWFpbl9jYWxsYmFjaykge1xuICAgICAgICBlYWNoZm4oYXJyLCBmdW5jdGlvbiAoeCwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIGl0ZXJhdG9yKHgsIGZ1bmN0aW9uIChyZXN1bHQpIHtcbiAgICAgICAgICAgICAgICBpZiAocmVzdWx0KSB7XG4gICAgICAgICAgICAgICAgICAgIG1haW5fY2FsbGJhY2soeCk7XG4gICAgICAgICAgICAgICAgICAgIG1haW5fY2FsbGJhY2sgPSBmdW5jdGlvbiAoKSB7fTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgIG1haW5fY2FsbGJhY2soKTtcbiAgICAgICAgfSk7XG4gICAgfTtcbiAgICBhc3luYy5kZXRlY3QgPSBkb1BhcmFsbGVsKF9kZXRlY3QpO1xuICAgIGFzeW5jLmRldGVjdFNlcmllcyA9IGRvU2VyaWVzKF9kZXRlY3QpO1xuXG4gICAgYXN5bmMuc29tZSA9IGZ1bmN0aW9uIChhcnIsIGl0ZXJhdG9yLCBtYWluX2NhbGxiYWNrKSB7XG4gICAgICAgIGFzeW5jLmVhY2goYXJyLCBmdW5jdGlvbiAoeCwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIGl0ZXJhdG9yKHgsIGZ1bmN0aW9uICh2KSB7XG4gICAgICAgICAgICAgICAgaWYgKHYpIHtcbiAgICAgICAgICAgICAgICAgICAgbWFpbl9jYWxsYmFjayh0cnVlKTtcbiAgICAgICAgICAgICAgICAgICAgbWFpbl9jYWxsYmFjayA9IGZ1bmN0aW9uICgpIHt9O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgIG1haW5fY2FsbGJhY2soZmFsc2UpO1xuICAgICAgICB9KTtcbiAgICB9O1xuICAgIC8vIGFueSBhbGlhc1xuICAgIGFzeW5jLmFueSA9IGFzeW5jLnNvbWU7XG5cbiAgICBhc3luYy5ldmVyeSA9IGZ1bmN0aW9uIChhcnIsIGl0ZXJhdG9yLCBtYWluX2NhbGxiYWNrKSB7XG4gICAgICAgIGFzeW5jLmVhY2goYXJyLCBmdW5jdGlvbiAoeCwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIGl0ZXJhdG9yKHgsIGZ1bmN0aW9uICh2KSB7XG4gICAgICAgICAgICAgICAgaWYgKCF2KSB7XG4gICAgICAgICAgICAgICAgICAgIG1haW5fY2FsbGJhY2soZmFsc2UpO1xuICAgICAgICAgICAgICAgICAgICBtYWluX2NhbGxiYWNrID0gZnVuY3Rpb24gKCkge307XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhbGxiYWNrKCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSwgZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgbWFpbl9jYWxsYmFjayh0cnVlKTtcbiAgICAgICAgfSk7XG4gICAgfTtcbiAgICAvLyBhbGwgYWxpYXNcbiAgICBhc3luYy5hbGwgPSBhc3luYy5ldmVyeTtcblxuICAgIGFzeW5jLnNvcnRCeSA9IGZ1bmN0aW9uIChhcnIsIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICBhc3luYy5tYXAoYXJyLCBmdW5jdGlvbiAoeCwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIGl0ZXJhdG9yKHgsIGZ1bmN0aW9uIChlcnIsIGNyaXRlcmlhKSB7XG4gICAgICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2sobnVsbCwge3ZhbHVlOiB4LCBjcml0ZXJpYTogY3JpdGVyaWF9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSwgZnVuY3Rpb24gKGVyciwgcmVzdWx0cykge1xuICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAgIHJldHVybiBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgdmFyIGZuID0gZnVuY3Rpb24gKGxlZnQsIHJpZ2h0KSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBhID0gbGVmdC5jcml0ZXJpYSwgYiA9IHJpZ2h0LmNyaXRlcmlhO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYSA8IGIgPyAtMSA6IGEgPiBiID8gMSA6IDA7XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICBjYWxsYmFjayhudWxsLCBfbWFwKHJlc3VsdHMuc29ydChmbiksIGZ1bmN0aW9uICh4KSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB4LnZhbHVlO1xuICAgICAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfTtcblxuICAgIGFzeW5jLmF1dG8gPSBmdW5jdGlvbiAodGFza3MsIGNhbGxiYWNrKSB7XG4gICAgICAgIGNhbGxiYWNrID0gY2FsbGJhY2sgfHwgZnVuY3Rpb24gKCkge307XG4gICAgICAgIHZhciBrZXlzID0gX2tleXModGFza3MpO1xuICAgICAgICB2YXIgcmVtYWluaW5nVGFza3MgPSBrZXlzLmxlbmd0aFxuICAgICAgICBpZiAoIXJlbWFpbmluZ1Rhc2tzKSB7XG4gICAgICAgICAgICByZXR1cm4gY2FsbGJhY2soKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciByZXN1bHRzID0ge307XG5cbiAgICAgICAgdmFyIGxpc3RlbmVycyA9IFtdO1xuICAgICAgICB2YXIgYWRkTGlzdGVuZXIgPSBmdW5jdGlvbiAoZm4pIHtcbiAgICAgICAgICAgIGxpc3RlbmVycy51bnNoaWZ0KGZuKTtcbiAgICAgICAgfTtcbiAgICAgICAgdmFyIHJlbW92ZUxpc3RlbmVyID0gZnVuY3Rpb24gKGZuKSB7XG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxpc3RlbmVycy5sZW5ndGg7IGkgKz0gMSkge1xuICAgICAgICAgICAgICAgIGlmIChsaXN0ZW5lcnNbaV0gPT09IGZuKSB7XG4gICAgICAgICAgICAgICAgICAgIGxpc3RlbmVycy5zcGxpY2UoaSwgMSk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIHZhciB0YXNrQ29tcGxldGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZW1haW5pbmdUYXNrcy0tXG4gICAgICAgICAgICBfZWFjaChsaXN0ZW5lcnMuc2xpY2UoMCksIGZ1bmN0aW9uIChmbikge1xuICAgICAgICAgICAgICAgIGZuKCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfTtcblxuICAgICAgICBhZGRMaXN0ZW5lcihmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBpZiAoIXJlbWFpbmluZ1Rhc2tzKSB7XG4gICAgICAgICAgICAgICAgdmFyIHRoZUNhbGxiYWNrID0gY2FsbGJhY2s7XG4gICAgICAgICAgICAgICAgLy8gcHJldmVudCBmaW5hbCBjYWxsYmFjayBmcm9tIGNhbGxpbmcgaXRzZWxmIGlmIGl0IGVycm9yc1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrID0gZnVuY3Rpb24gKCkge307XG5cbiAgICAgICAgICAgICAgICB0aGVDYWxsYmFjayhudWxsLCByZXN1bHRzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgX2VhY2goa2V5cywgZnVuY3Rpb24gKGspIHtcbiAgICAgICAgICAgIHZhciB0YXNrID0gX2lzQXJyYXkodGFza3Nba10pID8gdGFza3Nba106IFt0YXNrc1trXV07XG4gICAgICAgICAgICB2YXIgdGFza0NhbGxiYWNrID0gZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgICAgIHZhciBhcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKTtcbiAgICAgICAgICAgICAgICBpZiAoYXJncy5sZW5ndGggPD0gMSkge1xuICAgICAgICAgICAgICAgICAgICBhcmdzID0gYXJnc1swXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAgICAgICB2YXIgc2FmZVJlc3VsdHMgPSB7fTtcbiAgICAgICAgICAgICAgICAgICAgX2VhY2goX2tleXMocmVzdWx0cyksIGZ1bmN0aW9uKHJrZXkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNhZmVSZXN1bHRzW3JrZXldID0gcmVzdWx0c1tya2V5XTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIHNhZmVSZXN1bHRzW2tdID0gYXJncztcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soZXJyLCBzYWZlUmVzdWx0cyk7XG4gICAgICAgICAgICAgICAgICAgIC8vIHN0b3Agc3Vic2VxdWVudCBlcnJvcnMgaGl0dGluZyBjYWxsYmFjayBtdWx0aXBsZSB0aW1lc1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayA9IGZ1bmN0aW9uICgpIHt9O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0c1trXSA9IGFyZ3M7XG4gICAgICAgICAgICAgICAgICAgIGFzeW5jLnNldEltbWVkaWF0ZSh0YXNrQ29tcGxldGUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICB2YXIgcmVxdWlyZXMgPSB0YXNrLnNsaWNlKDAsIE1hdGguYWJzKHRhc2subGVuZ3RoIC0gMSkpIHx8IFtdO1xuICAgICAgICAgICAgdmFyIHJlYWR5ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBfcmVkdWNlKHJlcXVpcmVzLCBmdW5jdGlvbiAoYSwgeCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gKGEgJiYgcmVzdWx0cy5oYXNPd25Qcm9wZXJ0eSh4KSk7XG4gICAgICAgICAgICAgICAgfSwgdHJ1ZSkgJiYgIXJlc3VsdHMuaGFzT3duUHJvcGVydHkoayk7XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgaWYgKHJlYWR5KCkpIHtcbiAgICAgICAgICAgICAgICB0YXNrW3Rhc2subGVuZ3RoIC0gMV0odGFza0NhbGxiYWNrLCByZXN1bHRzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHZhciBsaXN0ZW5lciA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlYWR5KCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlbW92ZUxpc3RlbmVyKGxpc3RlbmVyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRhc2tbdGFzay5sZW5ndGggLSAxXSh0YXNrQ2FsbGJhY2ssIHJlc3VsdHMpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICBhZGRMaXN0ZW5lcihsaXN0ZW5lcik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH07XG5cbiAgICBhc3luYy5yZXRyeSA9IGZ1bmN0aW9uKHRpbWVzLCB0YXNrLCBjYWxsYmFjaykge1xuICAgICAgICB2YXIgREVGQVVMVF9USU1FUyA9IDU7XG4gICAgICAgIHZhciBhdHRlbXB0cyA9IFtdO1xuICAgICAgICAvLyBVc2UgZGVmYXVsdHMgaWYgdGltZXMgbm90IHBhc3NlZFxuICAgICAgICBpZiAodHlwZW9mIHRpbWVzID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICBjYWxsYmFjayA9IHRhc2s7XG4gICAgICAgICAgICB0YXNrID0gdGltZXM7XG4gICAgICAgICAgICB0aW1lcyA9IERFRkFVTFRfVElNRVM7XG4gICAgICAgIH1cbiAgICAgICAgLy8gTWFrZSBzdXJlIHRpbWVzIGlzIGEgbnVtYmVyXG4gICAgICAgIHRpbWVzID0gcGFyc2VJbnQodGltZXMsIDEwKSB8fCBERUZBVUxUX1RJTUVTO1xuICAgICAgICB2YXIgd3JhcHBlZFRhc2sgPSBmdW5jdGlvbih3cmFwcGVkQ2FsbGJhY2ssIHdyYXBwZWRSZXN1bHRzKSB7XG4gICAgICAgICAgICB2YXIgcmV0cnlBdHRlbXB0ID0gZnVuY3Rpb24odGFzaywgZmluYWxBdHRlbXB0KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKHNlcmllc0NhbGxiYWNrKSB7XG4gICAgICAgICAgICAgICAgICAgIHRhc2soZnVuY3Rpb24oZXJyLCByZXN1bHQpe1xuICAgICAgICAgICAgICAgICAgICAgICAgc2VyaWVzQ2FsbGJhY2soIWVyciB8fCBmaW5hbEF0dGVtcHQsIHtlcnI6IGVyciwgcmVzdWx0OiByZXN1bHR9KTtcbiAgICAgICAgICAgICAgICAgICAgfSwgd3JhcHBlZFJlc3VsdHMpO1xuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgd2hpbGUgKHRpbWVzKSB7XG4gICAgICAgICAgICAgICAgYXR0ZW1wdHMucHVzaChyZXRyeUF0dGVtcHQodGFzaywgISh0aW1lcy09MSkpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGFzeW5jLnNlcmllcyhhdHRlbXB0cywgZnVuY3Rpb24oZG9uZSwgZGF0YSl7XG4gICAgICAgICAgICAgICAgZGF0YSA9IGRhdGFbZGF0YS5sZW5ndGggLSAxXTtcbiAgICAgICAgICAgICAgICAod3JhcHBlZENhbGxiYWNrIHx8IGNhbGxiYWNrKShkYXRhLmVyciwgZGF0YS5yZXN1bHQpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gSWYgYSBjYWxsYmFjayBpcyBwYXNzZWQsIHJ1biB0aGlzIGFzIGEgY29udHJvbGwgZmxvd1xuICAgICAgICByZXR1cm4gY2FsbGJhY2sgPyB3cmFwcGVkVGFzaygpIDogd3JhcHBlZFRhc2tcbiAgICB9O1xuXG4gICAgYXN5bmMud2F0ZXJmYWxsID0gZnVuY3Rpb24gKHRhc2tzLCBjYWxsYmFjaykge1xuICAgICAgICBjYWxsYmFjayA9IGNhbGxiYWNrIHx8IGZ1bmN0aW9uICgpIHt9O1xuICAgICAgICBpZiAoIV9pc0FycmF5KHRhc2tzKSkge1xuICAgICAgICAgIHZhciBlcnIgPSBuZXcgRXJyb3IoJ0ZpcnN0IGFyZ3VtZW50IHRvIHdhdGVyZmFsbCBtdXN0IGJlIGFuIGFycmF5IG9mIGZ1bmN0aW9ucycpO1xuICAgICAgICAgIHJldHVybiBjYWxsYmFjayhlcnIpO1xuICAgICAgICB9XG4gICAgICAgIGlmICghdGFza3MubGVuZ3RoKSB7XG4gICAgICAgICAgICByZXR1cm4gY2FsbGJhY2soKTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgd3JhcEl0ZXJhdG9yID0gZnVuY3Rpb24gKGl0ZXJhdG9yKSB7XG4gICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2suYXBwbHkobnVsbCwgYXJndW1lbnRzKTtcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2sgPSBmdW5jdGlvbiAoKSB7fTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBhcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKTtcbiAgICAgICAgICAgICAgICAgICAgdmFyIG5leHQgPSBpdGVyYXRvci5uZXh0KCk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChuZXh0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhcmdzLnB1c2god3JhcEl0ZXJhdG9yKG5leHQpKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3MucHVzaChjYWxsYmFjayk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgYXN5bmMuc2V0SW1tZWRpYXRlKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGl0ZXJhdG9yLmFwcGx5KG51bGwsIGFyZ3MpO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9O1xuICAgICAgICB9O1xuICAgICAgICB3cmFwSXRlcmF0b3IoYXN5bmMuaXRlcmF0b3IodGFza3MpKSgpO1xuICAgIH07XG5cbiAgICB2YXIgX3BhcmFsbGVsID0gZnVuY3Rpb24oZWFjaGZuLCB0YXNrcywgY2FsbGJhY2spIHtcbiAgICAgICAgY2FsbGJhY2sgPSBjYWxsYmFjayB8fCBmdW5jdGlvbiAoKSB7fTtcbiAgICAgICAgaWYgKF9pc0FycmF5KHRhc2tzKSkge1xuICAgICAgICAgICAgZWFjaGZuLm1hcCh0YXNrcywgZnVuY3Rpb24gKGZuLCBjYWxsYmFjaykge1xuICAgICAgICAgICAgICAgIGlmIChmbikge1xuICAgICAgICAgICAgICAgICAgICBmbihmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoYXJncy5sZW5ndGggPD0gMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3MgPSBhcmdzWzBdO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2suY2FsbChudWxsLCBlcnIsIGFyZ3MpO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LCBjYWxsYmFjayk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB2YXIgcmVzdWx0cyA9IHt9O1xuICAgICAgICAgICAgZWFjaGZuLmVhY2goX2tleXModGFza3MpLCBmdW5jdGlvbiAoaywgY2FsbGJhY2spIHtcbiAgICAgICAgICAgICAgICB0YXNrc1trXShmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBhcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGFyZ3MubGVuZ3RoIDw9IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3MgPSBhcmdzWzBdO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdHNba10gPSBhcmdzO1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSwgZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrKGVyciwgcmVzdWx0cyk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH07XG5cbiAgICBhc3luYy5wYXJhbGxlbCA9IGZ1bmN0aW9uICh0YXNrcywgY2FsbGJhY2spIHtcbiAgICAgICAgX3BhcmFsbGVsKHsgbWFwOiBhc3luYy5tYXAsIGVhY2g6IGFzeW5jLmVhY2ggfSwgdGFza3MsIGNhbGxiYWNrKTtcbiAgICB9O1xuXG4gICAgYXN5bmMucGFyYWxsZWxMaW1pdCA9IGZ1bmN0aW9uKHRhc2tzLCBsaW1pdCwgY2FsbGJhY2spIHtcbiAgICAgICAgX3BhcmFsbGVsKHsgbWFwOiBfbWFwTGltaXQobGltaXQpLCBlYWNoOiBfZWFjaExpbWl0KGxpbWl0KSB9LCB0YXNrcywgY2FsbGJhY2spO1xuICAgIH07XG5cbiAgICBhc3luYy5zZXJpZXMgPSBmdW5jdGlvbiAodGFza3MsIGNhbGxiYWNrKSB7XG4gICAgICAgIGNhbGxiYWNrID0gY2FsbGJhY2sgfHwgZnVuY3Rpb24gKCkge307XG4gICAgICAgIGlmIChfaXNBcnJheSh0YXNrcykpIHtcbiAgICAgICAgICAgIGFzeW5jLm1hcFNlcmllcyh0YXNrcywgZnVuY3Rpb24gKGZuLCBjYWxsYmFjaykge1xuICAgICAgICAgICAgICAgIGlmIChmbikge1xuICAgICAgICAgICAgICAgICAgICBmbihmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoYXJncy5sZW5ndGggPD0gMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3MgPSBhcmdzWzBdO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2suY2FsbChudWxsLCBlcnIsIGFyZ3MpO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LCBjYWxsYmFjayk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB2YXIgcmVzdWx0cyA9IHt9O1xuICAgICAgICAgICAgYXN5bmMuZWFjaFNlcmllcyhfa2V5cyh0YXNrcyksIGZ1bmN0aW9uIChrLCBjYWxsYmFjaykge1xuICAgICAgICAgICAgICAgIHRhc2tzW2tdKGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGFyZ3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsIDEpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoYXJncy5sZW5ndGggPD0gMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgYXJncyA9IGFyZ3NbMF07XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0c1trXSA9IGFyZ3M7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9LCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2soZXJyLCByZXN1bHRzKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIGFzeW5jLml0ZXJhdG9yID0gZnVuY3Rpb24gKHRhc2tzKSB7XG4gICAgICAgIHZhciBtYWtlQ2FsbGJhY2sgPSBmdW5jdGlvbiAoaW5kZXgpIHtcbiAgICAgICAgICAgIHZhciBmbiA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBpZiAodGFza3MubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgIHRhc2tzW2luZGV4XS5hcHBseShudWxsLCBhcmd1bWVudHMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gZm4ubmV4dCgpO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGZuLm5leHQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIChpbmRleCA8IHRhc2tzLmxlbmd0aCAtIDEpID8gbWFrZUNhbGxiYWNrKGluZGV4ICsgMSk6IG51bGw7XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgcmV0dXJuIGZuO1xuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gbWFrZUNhbGxiYWNrKDApO1xuICAgIH07XG5cbiAgICBhc3luYy5hcHBseSA9IGZ1bmN0aW9uIChmbikge1xuICAgICAgICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMSk7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gZm4uYXBwbHkoXG4gICAgICAgICAgICAgICAgbnVsbCwgYXJncy5jb25jYXQoQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKSlcbiAgICAgICAgICAgICk7XG4gICAgICAgIH07XG4gICAgfTtcblxuICAgIHZhciBfY29uY2F0ID0gZnVuY3Rpb24gKGVhY2hmbiwgYXJyLCBmbiwgY2FsbGJhY2spIHtcbiAgICAgICAgdmFyIHIgPSBbXTtcbiAgICAgICAgZWFjaGZuKGFyciwgZnVuY3Rpb24gKHgsIGNiKSB7XG4gICAgICAgICAgICBmbih4LCBmdW5jdGlvbiAoZXJyLCB5KSB7XG4gICAgICAgICAgICAgICAgciA9IHIuY29uY2F0KHkgfHwgW10pO1xuICAgICAgICAgICAgICAgIGNiKGVycik7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSwgZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgY2FsbGJhY2soZXJyLCByKTtcbiAgICAgICAgfSk7XG4gICAgfTtcbiAgICBhc3luYy5jb25jYXQgPSBkb1BhcmFsbGVsKF9jb25jYXQpO1xuICAgIGFzeW5jLmNvbmNhdFNlcmllcyA9IGRvU2VyaWVzKF9jb25jYXQpO1xuXG4gICAgYXN5bmMud2hpbHN0ID0gZnVuY3Rpb24gKHRlc3QsIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICBpZiAodGVzdCgpKSB7XG4gICAgICAgICAgICBpdGVyYXRvcihmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYXN5bmMud2hpbHN0KHRlc3QsIGl0ZXJhdG9yLCBjYWxsYmFjayk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGNhbGxiYWNrKCk7XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgYXN5bmMuZG9XaGlsc3QgPSBmdW5jdGlvbiAoaXRlcmF0b3IsIHRlc3QsIGNhbGxiYWNrKSB7XG4gICAgICAgIGl0ZXJhdG9yKGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHZhciBhcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKTtcbiAgICAgICAgICAgIGlmICh0ZXN0LmFwcGx5KG51bGwsIGFyZ3MpKSB7XG4gICAgICAgICAgICAgICAgYXN5bmMuZG9XaGlsc3QoaXRlcmF0b3IsIHRlc3QsIGNhbGxiYWNrKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH07XG5cbiAgICBhc3luYy51bnRpbCA9IGZ1bmN0aW9uICh0ZXN0LCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgaWYgKCF0ZXN0KCkpIHtcbiAgICAgICAgICAgIGl0ZXJhdG9yKGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBhc3luYy51bnRpbCh0ZXN0LCBpdGVyYXRvciwgY2FsbGJhY2spO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIGFzeW5jLmRvVW50aWwgPSBmdW5jdGlvbiAoaXRlcmF0b3IsIHRlc3QsIGNhbGxiYWNrKSB7XG4gICAgICAgIGl0ZXJhdG9yKGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHZhciBhcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKTtcbiAgICAgICAgICAgIGlmICghdGVzdC5hcHBseShudWxsLCBhcmdzKSkge1xuICAgICAgICAgICAgICAgIGFzeW5jLmRvVW50aWwoaXRlcmF0b3IsIHRlc3QsIGNhbGxiYWNrKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH07XG5cbiAgICBhc3luYy5xdWV1ZSA9IGZ1bmN0aW9uICh3b3JrZXIsIGNvbmN1cnJlbmN5KSB7XG4gICAgICAgIGlmIChjb25jdXJyZW5jeSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBjb25jdXJyZW5jeSA9IDE7XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gX2luc2VydChxLCBkYXRhLCBwb3MsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgaWYgKCFxLnN0YXJ0ZWQpe1xuICAgICAgICAgICAgcS5zdGFydGVkID0gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKCFfaXNBcnJheShkYXRhKSkge1xuICAgICAgICAgICAgICBkYXRhID0gW2RhdGFdO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZihkYXRhLmxlbmd0aCA9PSAwKSB7XG4gICAgICAgICAgICAgLy8gY2FsbCBkcmFpbiBpbW1lZGlhdGVseSBpZiB0aGVyZSBhcmUgbm8gdGFza3NcbiAgICAgICAgICAgICByZXR1cm4gYXN5bmMuc2V0SW1tZWRpYXRlKGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgICBpZiAocS5kcmFpbikge1xuICAgICAgICAgICAgICAgICAgICAgcS5kcmFpbigpO1xuICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIF9lYWNoKGRhdGEsIGZ1bmN0aW9uKHRhc2spIHtcbiAgICAgICAgICAgICAgdmFyIGl0ZW0gPSB7XG4gICAgICAgICAgICAgICAgICBkYXRhOiB0YXNrLFxuICAgICAgICAgICAgICAgICAgY2FsbGJhY2s6IHR5cGVvZiBjYWxsYmFjayA9PT0gJ2Z1bmN0aW9uJyA/IGNhbGxiYWNrIDogbnVsbFxuICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgIGlmIChwb3MpIHtcbiAgICAgICAgICAgICAgICBxLnRhc2tzLnVuc2hpZnQoaXRlbSk7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcS50YXNrcy5wdXNoKGl0ZW0pO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgaWYgKHEuc2F0dXJhdGVkICYmIHEudGFza3MubGVuZ3RoID09PSBxLmNvbmN1cnJlbmN5KSB7XG4gICAgICAgICAgICAgICAgICBxLnNhdHVyYXRlZCgpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGFzeW5jLnNldEltbWVkaWF0ZShxLnByb2Nlc3MpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIHdvcmtlcnMgPSAwO1xuICAgICAgICB2YXIgcSA9IHtcbiAgICAgICAgICAgIHRhc2tzOiBbXSxcbiAgICAgICAgICAgIGNvbmN1cnJlbmN5OiBjb25jdXJyZW5jeSxcbiAgICAgICAgICAgIHNhdHVyYXRlZDogbnVsbCxcbiAgICAgICAgICAgIGVtcHR5OiBudWxsLFxuICAgICAgICAgICAgZHJhaW46IG51bGwsXG4gICAgICAgICAgICBzdGFydGVkOiBmYWxzZSxcbiAgICAgICAgICAgIHBhdXNlZDogZmFsc2UsXG4gICAgICAgICAgICBwdXNoOiBmdW5jdGlvbiAoZGF0YSwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgICAgX2luc2VydChxLCBkYXRhLCBmYWxzZSwgY2FsbGJhY2spO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGtpbGw6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgcS5kcmFpbiA9IG51bGw7XG4gICAgICAgICAgICAgIHEudGFza3MgPSBbXTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB1bnNoaWZ0OiBmdW5jdGlvbiAoZGF0YSwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgICAgX2luc2VydChxLCBkYXRhLCB0cnVlLCBjYWxsYmFjayk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcHJvY2VzczogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGlmICghcS5wYXVzZWQgJiYgd29ya2VycyA8IHEuY29uY3VycmVuY3kgJiYgcS50YXNrcy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHRhc2sgPSBxLnRhc2tzLnNoaWZ0KCk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChxLmVtcHR5ICYmIHEudGFza3MubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBxLmVtcHR5KCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgd29ya2VycyArPSAxO1xuICAgICAgICAgICAgICAgICAgICB2YXIgbmV4dCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHdvcmtlcnMgLT0gMTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0YXNrLmNhbGxiYWNrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFzay5jYWxsYmFjay5hcHBseSh0YXNrLCBhcmd1bWVudHMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHEuZHJhaW4gJiYgcS50YXNrcy5sZW5ndGggKyB3b3JrZXJzID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcS5kcmFpbigpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgcS5wcm9jZXNzKCk7XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIHZhciBjYiA9IG9ubHlfb25jZShuZXh0KTtcbiAgICAgICAgICAgICAgICAgICAgd29ya2VyKHRhc2suZGF0YSwgY2IpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBsZW5ndGg6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcS50YXNrcy5sZW5ndGg7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcnVubmluZzogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB3b3JrZXJzO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGlkbGU6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBxLnRhc2tzLmxlbmd0aCArIHdvcmtlcnMgPT09IDA7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcGF1c2U6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBpZiAocS5wYXVzZWQgPT09IHRydWUpIHsgcmV0dXJuOyB9XG4gICAgICAgICAgICAgICAgcS5wYXVzZWQgPSB0cnVlO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHJlc3VtZTogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGlmIChxLnBhdXNlZCA9PT0gZmFsc2UpIHsgcmV0dXJuOyB9XG4gICAgICAgICAgICAgICAgcS5wYXVzZWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAvLyBOZWVkIHRvIGNhbGwgcS5wcm9jZXNzIG9uY2UgcGVyIGNvbmN1cnJlbnRcbiAgICAgICAgICAgICAgICAvLyB3b3JrZXIgdG8gcHJlc2VydmUgZnVsbCBjb25jdXJyZW5jeSBhZnRlciBwYXVzZVxuICAgICAgICAgICAgICAgIGZvciAodmFyIHcgPSAxOyB3IDw9IHEuY29uY3VycmVuY3k7IHcrKykge1xuICAgICAgICAgICAgICAgICAgICBhc3luYy5zZXRJbW1lZGlhdGUocS5wcm9jZXNzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiBxO1xuICAgIH07XG5cbiAgICBhc3luYy5wcmlvcml0eVF1ZXVlID0gZnVuY3Rpb24gKHdvcmtlciwgY29uY3VycmVuY3kpIHtcblxuICAgICAgICBmdW5jdGlvbiBfY29tcGFyZVRhc2tzKGEsIGIpe1xuICAgICAgICAgIHJldHVybiBhLnByaW9yaXR5IC0gYi5wcmlvcml0eTtcbiAgICAgICAgfTtcblxuICAgICAgICBmdW5jdGlvbiBfYmluYXJ5U2VhcmNoKHNlcXVlbmNlLCBpdGVtLCBjb21wYXJlKSB7XG4gICAgICAgICAgdmFyIGJlZyA9IC0xLFxuICAgICAgICAgICAgICBlbmQgPSBzZXF1ZW5jZS5sZW5ndGggLSAxO1xuICAgICAgICAgIHdoaWxlIChiZWcgPCBlbmQpIHtcbiAgICAgICAgICAgIHZhciBtaWQgPSBiZWcgKyAoKGVuZCAtIGJlZyArIDEpID4+PiAxKTtcbiAgICAgICAgICAgIGlmIChjb21wYXJlKGl0ZW0sIHNlcXVlbmNlW21pZF0pID49IDApIHtcbiAgICAgICAgICAgICAgYmVnID0gbWlkO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgZW5kID0gbWlkIC0gMTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIGJlZztcbiAgICAgICAgfVxuXG4gICAgICAgIGZ1bmN0aW9uIF9pbnNlcnQocSwgZGF0YSwgcHJpb3JpdHksIGNhbGxiYWNrKSB7XG4gICAgICAgICAgaWYgKCFxLnN0YXJ0ZWQpe1xuICAgICAgICAgICAgcS5zdGFydGVkID0gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKCFfaXNBcnJheShkYXRhKSkge1xuICAgICAgICAgICAgICBkYXRhID0gW2RhdGFdO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZihkYXRhLmxlbmd0aCA9PSAwKSB7XG4gICAgICAgICAgICAgLy8gY2FsbCBkcmFpbiBpbW1lZGlhdGVseSBpZiB0aGVyZSBhcmUgbm8gdGFza3NcbiAgICAgICAgICAgICByZXR1cm4gYXN5bmMuc2V0SW1tZWRpYXRlKGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgICBpZiAocS5kcmFpbikge1xuICAgICAgICAgICAgICAgICAgICAgcS5kcmFpbigpO1xuICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIF9lYWNoKGRhdGEsIGZ1bmN0aW9uKHRhc2spIHtcbiAgICAgICAgICAgICAgdmFyIGl0ZW0gPSB7XG4gICAgICAgICAgICAgICAgICBkYXRhOiB0YXNrLFxuICAgICAgICAgICAgICAgICAgcHJpb3JpdHk6IHByaW9yaXR5LFxuICAgICAgICAgICAgICAgICAgY2FsbGJhY2s6IHR5cGVvZiBjYWxsYmFjayA9PT0gJ2Z1bmN0aW9uJyA/IGNhbGxiYWNrIDogbnVsbFxuICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgIHEudGFza3Muc3BsaWNlKF9iaW5hcnlTZWFyY2gocS50YXNrcywgaXRlbSwgX2NvbXBhcmVUYXNrcykgKyAxLCAwLCBpdGVtKTtcblxuICAgICAgICAgICAgICBpZiAocS5zYXR1cmF0ZWQgJiYgcS50YXNrcy5sZW5ndGggPT09IHEuY29uY3VycmVuY3kpIHtcbiAgICAgICAgICAgICAgICAgIHEuc2F0dXJhdGVkKCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgYXN5bmMuc2V0SW1tZWRpYXRlKHEucHJvY2Vzcyk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBTdGFydCB3aXRoIGEgbm9ybWFsIHF1ZXVlXG4gICAgICAgIHZhciBxID0gYXN5bmMucXVldWUod29ya2VyLCBjb25jdXJyZW5jeSk7XG5cbiAgICAgICAgLy8gT3ZlcnJpZGUgcHVzaCB0byBhY2NlcHQgc2Vjb25kIHBhcmFtZXRlciByZXByZXNlbnRpbmcgcHJpb3JpdHlcbiAgICAgICAgcS5wdXNoID0gZnVuY3Rpb24gKGRhdGEsIHByaW9yaXR5LCBjYWxsYmFjaykge1xuICAgICAgICAgIF9pbnNlcnQocSwgZGF0YSwgcHJpb3JpdHksIGNhbGxiYWNrKTtcbiAgICAgICAgfTtcblxuICAgICAgICAvLyBSZW1vdmUgdW5zaGlmdCBmdW5jdGlvblxuICAgICAgICBkZWxldGUgcS51bnNoaWZ0O1xuXG4gICAgICAgIHJldHVybiBxO1xuICAgIH07XG5cbiAgICBhc3luYy5jYXJnbyA9IGZ1bmN0aW9uICh3b3JrZXIsIHBheWxvYWQpIHtcbiAgICAgICAgdmFyIHdvcmtpbmcgICAgID0gZmFsc2UsXG4gICAgICAgICAgICB0YXNrcyAgICAgICA9IFtdO1xuXG4gICAgICAgIHZhciBjYXJnbyA9IHtcbiAgICAgICAgICAgIHRhc2tzOiB0YXNrcyxcbiAgICAgICAgICAgIHBheWxvYWQ6IHBheWxvYWQsXG4gICAgICAgICAgICBzYXR1cmF0ZWQ6IG51bGwsXG4gICAgICAgICAgICBlbXB0eTogbnVsbCxcbiAgICAgICAgICAgIGRyYWluOiBudWxsLFxuICAgICAgICAgICAgZHJhaW5lZDogdHJ1ZSxcbiAgICAgICAgICAgIHB1c2g6IGZ1bmN0aW9uIChkYXRhLCBjYWxsYmFjaykge1xuICAgICAgICAgICAgICAgIGlmICghX2lzQXJyYXkoZGF0YSkpIHtcbiAgICAgICAgICAgICAgICAgICAgZGF0YSA9IFtkYXRhXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgX2VhY2goZGF0YSwgZnVuY3Rpb24odGFzaykge1xuICAgICAgICAgICAgICAgICAgICB0YXNrcy5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGE6IHRhc2ssXG4gICAgICAgICAgICAgICAgICAgICAgICBjYWxsYmFjazogdHlwZW9mIGNhbGxiYWNrID09PSAnZnVuY3Rpb24nID8gY2FsbGJhY2sgOiBudWxsXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICBjYXJnby5kcmFpbmVkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIGlmIChjYXJnby5zYXR1cmF0ZWQgJiYgdGFza3MubGVuZ3RoID09PSBwYXlsb2FkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjYXJnby5zYXR1cmF0ZWQoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGFzeW5jLnNldEltbWVkaWF0ZShjYXJnby5wcm9jZXNzKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBwcm9jZXNzOiBmdW5jdGlvbiBwcm9jZXNzKCkge1xuICAgICAgICAgICAgICAgIGlmICh3b3JraW5nKSByZXR1cm47XG4gICAgICAgICAgICAgICAgaWYgKHRhc2tzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICBpZihjYXJnby5kcmFpbiAmJiAhY2FyZ28uZHJhaW5lZCkgY2FyZ28uZHJhaW4oKTtcbiAgICAgICAgICAgICAgICAgICAgY2FyZ28uZHJhaW5lZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB2YXIgdHMgPSB0eXBlb2YgcGF5bG9hZCA9PT0gJ251bWJlcidcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IHRhc2tzLnNwbGljZSgwLCBwYXlsb2FkKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogdGFza3Muc3BsaWNlKDAsIHRhc2tzLmxlbmd0aCk7XG5cbiAgICAgICAgICAgICAgICB2YXIgZHMgPSBfbWFwKHRzLCBmdW5jdGlvbiAodGFzaykge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGFzay5kYXRhO1xuICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgaWYoY2FyZ28uZW1wdHkpIGNhcmdvLmVtcHR5KCk7XG4gICAgICAgICAgICAgICAgd29ya2luZyA9IHRydWU7XG4gICAgICAgICAgICAgICAgd29ya2VyKGRzLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIHdvcmtpbmcgPSBmYWxzZTtcblxuICAgICAgICAgICAgICAgICAgICB2YXIgYXJncyA9IGFyZ3VtZW50cztcbiAgICAgICAgICAgICAgICAgICAgX2VhY2godHMsIGZ1bmN0aW9uIChkYXRhKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZGF0YS5jYWxsYmFjaykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEuY2FsbGJhY2suYXBwbHkobnVsbCwgYXJncyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgICAgIHByb2Nlc3MoKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBsZW5ndGg6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGFza3MubGVuZ3RoO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHJ1bm5pbmc6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gd29ya2luZztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIGNhcmdvO1xuICAgIH07XG5cbiAgICB2YXIgX2NvbnNvbGVfZm4gPSBmdW5jdGlvbiAobmFtZSkge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKGZuKSB7XG4gICAgICAgICAgICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMSk7XG4gICAgICAgICAgICBmbi5hcHBseShudWxsLCBhcmdzLmNvbmNhdChbZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgICAgIHZhciBhcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKTtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGNvbnNvbGUgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb25zb2xlLmVycm9yKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihlcnIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKGNvbnNvbGVbbmFtZV0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIF9lYWNoKGFyZ3MsIGZ1bmN0aW9uICh4KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZVtuYW1lXSh4KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfV0pKTtcbiAgICAgICAgfTtcbiAgICB9O1xuICAgIGFzeW5jLmxvZyA9IF9jb25zb2xlX2ZuKCdsb2cnKTtcbiAgICBhc3luYy5kaXIgPSBfY29uc29sZV9mbignZGlyJyk7XG4gICAgLyphc3luYy5pbmZvID0gX2NvbnNvbGVfZm4oJ2luZm8nKTtcbiAgICBhc3luYy53YXJuID0gX2NvbnNvbGVfZm4oJ3dhcm4nKTtcbiAgICBhc3luYy5lcnJvciA9IF9jb25zb2xlX2ZuKCdlcnJvcicpOyovXG5cbiAgICBhc3luYy5tZW1vaXplID0gZnVuY3Rpb24gKGZuLCBoYXNoZXIpIHtcbiAgICAgICAgdmFyIG1lbW8gPSB7fTtcbiAgICAgICAgdmFyIHF1ZXVlcyA9IHt9O1xuICAgICAgICBoYXNoZXIgPSBoYXNoZXIgfHwgZnVuY3Rpb24gKHgpIHtcbiAgICAgICAgICAgIHJldHVybiB4O1xuICAgICAgICB9O1xuICAgICAgICB2YXIgbWVtb2l6ZWQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7XG4gICAgICAgICAgICB2YXIgY2FsbGJhY2sgPSBhcmdzLnBvcCgpO1xuICAgICAgICAgICAgdmFyIGtleSA9IGhhc2hlci5hcHBseShudWxsLCBhcmdzKTtcbiAgICAgICAgICAgIGlmIChrZXkgaW4gbWVtbykge1xuICAgICAgICAgICAgICAgIGFzeW5jLm5leHRUaWNrKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2suYXBwbHkobnVsbCwgbWVtb1trZXldKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGtleSBpbiBxdWV1ZXMpIHtcbiAgICAgICAgICAgICAgICBxdWV1ZXNba2V5XS5wdXNoKGNhbGxiYWNrKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHF1ZXVlc1trZXldID0gW2NhbGxiYWNrXTtcbiAgICAgICAgICAgICAgICBmbi5hcHBseShudWxsLCBhcmdzLmNvbmNhdChbZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICBtZW1vW2tleV0gPSBhcmd1bWVudHM7XG4gICAgICAgICAgICAgICAgICAgIHZhciBxID0gcXVldWVzW2tleV07XG4gICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBxdWV1ZXNba2V5XTtcbiAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDAsIGwgPSBxLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICAgIHFbaV0uYXBwbHkobnVsbCwgYXJndW1lbnRzKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1dKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIG1lbW9pemVkLm1lbW8gPSBtZW1vO1xuICAgICAgICBtZW1vaXplZC51bm1lbW9pemVkID0gZm47XG4gICAgICAgIHJldHVybiBtZW1vaXplZDtcbiAgICB9O1xuXG4gICAgYXN5bmMudW5tZW1vaXplID0gZnVuY3Rpb24gKGZuKSB7XG4gICAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gKGZuLnVubWVtb2l6ZWQgfHwgZm4pLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7XG4gICAgICB9O1xuICAgIH07XG5cbiAgICBhc3luYy50aW1lcyA9IGZ1bmN0aW9uIChjb3VudCwgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgIHZhciBjb3VudGVyID0gW107XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY291bnQ7IGkrKykge1xuICAgICAgICAgICAgY291bnRlci5wdXNoKGkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBhc3luYy5tYXAoY291bnRlciwgaXRlcmF0b3IsIGNhbGxiYWNrKTtcbiAgICB9O1xuXG4gICAgYXN5bmMudGltZXNTZXJpZXMgPSBmdW5jdGlvbiAoY291bnQsIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICB2YXIgY291bnRlciA9IFtdO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNvdW50OyBpKyspIHtcbiAgICAgICAgICAgIGNvdW50ZXIucHVzaChpKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYXN5bmMubWFwU2VyaWVzKGNvdW50ZXIsIGl0ZXJhdG9yLCBjYWxsYmFjayk7XG4gICAgfTtcblxuICAgIGFzeW5jLnNlcSA9IGZ1bmN0aW9uICgvKiBmdW5jdGlvbnMuLi4gKi8pIHtcbiAgICAgICAgdmFyIGZucyA9IGFyZ3VtZW50cztcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHZhciB0aGF0ID0gdGhpcztcbiAgICAgICAgICAgIHZhciBhcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKTtcbiAgICAgICAgICAgIHZhciBjYWxsYmFjayA9IGFyZ3MucG9wKCk7XG4gICAgICAgICAgICBhc3luYy5yZWR1Y2UoZm5zLCBhcmdzLCBmdW5jdGlvbiAobmV3YXJncywgZm4sIGNiKSB7XG4gICAgICAgICAgICAgICAgZm4uYXBwbHkodGhhdCwgbmV3YXJncy5jb25jYXQoW2Z1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGVyciA9IGFyZ3VtZW50c1swXTtcbiAgICAgICAgICAgICAgICAgICAgdmFyIG5leHRhcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKTtcbiAgICAgICAgICAgICAgICAgICAgY2IoZXJyLCBuZXh0YXJncyk7XG4gICAgICAgICAgICAgICAgfV0pKVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGZ1bmN0aW9uIChlcnIsIHJlc3VsdHMpIHtcbiAgICAgICAgICAgICAgICBjYWxsYmFjay5hcHBseSh0aGF0LCBbZXJyXS5jb25jYXQocmVzdWx0cykpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH07XG4gICAgfTtcblxuICAgIGFzeW5jLmNvbXBvc2UgPSBmdW5jdGlvbiAoLyogZnVuY3Rpb25zLi4uICovKSB7XG4gICAgICByZXR1cm4gYXN5bmMuc2VxLmFwcGx5KG51bGwsIEFycmF5LnByb3RvdHlwZS5yZXZlcnNlLmNhbGwoYXJndW1lbnRzKSk7XG4gICAgfTtcblxuICAgIHZhciBfYXBwbHlFYWNoID0gZnVuY3Rpb24gKGVhY2hmbiwgZm5zIC8qYXJncy4uLiovKSB7XG4gICAgICAgIHZhciBnbyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHZhciB0aGF0ID0gdGhpcztcbiAgICAgICAgICAgIHZhciBhcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKTtcbiAgICAgICAgICAgIHZhciBjYWxsYmFjayA9IGFyZ3MucG9wKCk7XG4gICAgICAgICAgICByZXR1cm4gZWFjaGZuKGZucywgZnVuY3Rpb24gKGZuLCBjYikge1xuICAgICAgICAgICAgICAgIGZuLmFwcGx5KHRoYXQsIGFyZ3MuY29uY2F0KFtjYl0pKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjYWxsYmFjayk7XG4gICAgICAgIH07XG4gICAgICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID4gMikge1xuICAgICAgICAgICAgdmFyIGFyZ3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsIDIpO1xuICAgICAgICAgICAgcmV0dXJuIGdvLmFwcGx5KHRoaXMsIGFyZ3MpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIGdvO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBhc3luYy5hcHBseUVhY2ggPSBkb1BhcmFsbGVsKF9hcHBseUVhY2gpO1xuICAgIGFzeW5jLmFwcGx5RWFjaFNlcmllcyA9IGRvU2VyaWVzKF9hcHBseUVhY2gpO1xuXG4gICAgYXN5bmMuZm9yZXZlciA9IGZ1bmN0aW9uIChmbiwgY2FsbGJhY2spIHtcbiAgICAgICAgZnVuY3Rpb24gbmV4dChlcnIpIHtcbiAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICBpZiAoY2FsbGJhY2spIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRocm93IGVycjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZuKG5leHQpO1xuICAgICAgICB9XG4gICAgICAgIG5leHQoKTtcbiAgICB9O1xuXG4gICAgLy8gTm9kZS5qc1xuICAgIGlmICh0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJyAmJiBtb2R1bGUuZXhwb3J0cykge1xuICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IGFzeW5jO1xuICAgIH1cbiAgICAvLyBBTUQgLyBSZXF1aXJlSlNcbiAgICBlbHNlIGlmICh0eXBlb2YgZGVmaW5lICE9PSAndW5kZWZpbmVkJyAmJiBkZWZpbmUuYW1kKSB7XG4gICAgICAgIGRlZmluZShbXSwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIGFzeW5jO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgLy8gaW5jbHVkZWQgZGlyZWN0bHkgdmlhIDxzY3JpcHQ+IHRhZ1xuICAgIGVsc2Uge1xuICAgICAgICByb290LmFzeW5jID0gYXN5bmM7XG4gICAgfVxuXG59KCkpO1xuIiwidmFyIGFzeW5jICAgICAgID0gcmVxdWlyZSgnYXN5bmMnKSxcbiAgICB1cmxQYXJzZXIgICA9IHJlcXVpcmUoJ3VybCcpLFxuICAgIFJlc291cmNlICAgID0gcmVxdWlyZSgnLi9SZXNvdXJjZScpLFxuICAgIEV2ZW50RW1pdHRlciA9IHJlcXVpcmUoJ2V2ZW50ZW1pdHRlcjMnKTtcblxuLyoqXG4gKiBNYW5hZ2VzIHRoZSBzdGF0ZSBhbmQgbG9hZGluZyBvZiBtdWx0aXBsZSByZXNvdXJjZXMgdG8gbG9hZC5cbiAqXG4gKiBAY2xhc3NcbiAqIEBwYXJhbSBbYmFzZVVybD0nJ10ge3N0cmluZ30gVGhlIGJhc2UgdXJsIGZvciBhbGwgcmVzb3VyY2VzIGxvYWRlZCBieSB0aGlzIGxvYWRlci5cbiAqIEBwYXJhbSBbY29uY3VycmVuY3k9MTBdIHtudW1iZXJ9IFRoZSBudW1iZXIgb2YgcmVzb3VyY2VzIHRvIGxvYWQgY29uY3VycmVudGx5LlxuICovXG5mdW5jdGlvbiBMb2FkZXIoYmFzZVVybCwgY29uY3VycmVuY3kpIHtcbiAgICBFdmVudEVtaXR0ZXIuY2FsbCh0aGlzKTtcblxuICAgIGNvbmN1cnJlbmN5ID0gY29uY3VycmVuY3kgfHwgMTA7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYmFzZSB1cmwgZm9yIGFsbCByZXNvdXJjZXMgbG9hZGVkIGJ5IHRoaXMgbG9hZGVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7c3RyaW5nfVxuICAgICAqL1xuICAgIHRoaXMuYmFzZVVybCA9IGJhc2VVcmwgfHwgJyc7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgcHJvZ3Jlc3MgcGVyY2VudCBvZiB0aGUgbG9hZGVyIGdvaW5nIHRocm91Z2ggdGhlIHF1ZXVlLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMucHJvZ3Jlc3MgPSAwO1xuXG4gICAgLyoqXG4gICAgICogTG9hZGluZyBzdGF0ZSBvZiB0aGUgbG9hZGVyLCB0cnVlIGlmIGl0IGlzIGN1cnJlbnRseSBsb2FkaW5nIHJlc291cmNlcy5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICovXG4gICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgcGVyY2VudGFnZSBvZiB0b3RhbCBwcm9ncmVzcyB0aGF0IGEgc2luZ2xlIHJlc291cmNlIHJlcHJlc2VudHMuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy5fcHJvZ3Jlc3NDaHVuayA9IDA7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgbWlkZGxld2FyZSB0byBydW4gYmVmb3JlIGxvYWRpbmcgZWFjaCByZXNvdXJjZS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Z1bmN0aW9uW119XG4gICAgICovXG4gICAgdGhpcy5fYmVmb3JlTWlkZGxld2FyZSA9IFtdO1xuXG4gICAgLyoqXG4gICAgICogVGhlIG1pZGRsZXdhcmUgdG8gcnVuIGFmdGVyIGxvYWRpbmcgZWFjaCByZXNvdXJjZS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Z1bmN0aW9uW119XG4gICAgICovXG4gICAgdGhpcy5fYWZ0ZXJNaWRkbGV3YXJlID0gW107XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYF9sb2FkUmVzb3VyY2VgIGZ1bmN0aW9uIGJvdW5kIHdpdGggdGhpcyBvYmplY3QgY29udGV4dC5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQG1lbWJlciB7ZnVuY3Rpb259XG4gICAgICovXG4gICAgdGhpcy5fYm91bmRMb2FkUmVzb3VyY2UgPSB0aGlzLl9sb2FkUmVzb3VyY2UuYmluZCh0aGlzKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBgX29uTG9hZGAgZnVuY3Rpb24gYm91bmQgd2l0aCB0aGlzIG9iamVjdCBjb250ZXh0LlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAbWVtYmVyIHtmdW5jdGlvbn1cbiAgICAgKi9cbiAgICB0aGlzLl9ib3VuZE9uTG9hZCA9IHRoaXMuX29uTG9hZC5iaW5kKHRoaXMpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHJlc291cmNlIGJ1ZmZlciB0aGF0IGZpbGxzIHVudGlsIGBsb2FkYCBpcyBjYWxsZWQgdG8gc3RhcnQgbG9hZGluZyByZXNvdXJjZXMuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBtZW1iZXIge1Jlc291cmNlW119XG4gICAgICovXG4gICAgdGhpcy5fYnVmZmVyID0gW107XG5cbiAgICAvKipcbiAgICAgKiBVc2VkIHRvIHRyYWNrIGxvYWQgY29tcGxldGlvbi5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMuX251bVRvTG9hZCA9IDA7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgcmVzb3VyY2VzIHdhaXRpbmcgdG8gYmUgbG9hZGVkLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAbWVtYmVyIHtSZXNvdXJjZVtdfVxuICAgICAqL1xuICAgIHRoaXMuX3F1ZXVlID0gYXN5bmMucXVldWUodGhpcy5fYm91bmRMb2FkUmVzb3VyY2UsIGNvbmN1cnJlbmN5KTtcblxuICAgIC8qKlxuICAgICAqIEFsbCB0aGUgcmVzb3VyY2VzIGZvciB0aGlzIGxvYWRlciBrZXllZCBieSBuYW1lLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7b2JqZWN0PHN0cmluZywgUmVzb3VyY2U+fVxuICAgICAqL1xuICAgIHRoaXMucmVzb3VyY2VzID0ge307XG5cbiAgICAvKipcbiAgICAgKiBFbWl0dGVkIG9uY2UgcGVyIGxvYWRlZCBvciBlcnJvcmVkIHJlc291cmNlLlxuICAgICAqXG4gICAgICogQGV2ZW50IHByb2dyZXNzXG4gICAgICogQG1lbWJlcm9mIExvYWRlciNcbiAgICAgKi9cblxuICAgIC8qKlxuICAgICAqIEVtaXR0ZWQgb25jZSBwZXIgZXJyb3JlZCByZXNvdXJjZS5cbiAgICAgKlxuICAgICAqIEBldmVudCBlcnJvclxuICAgICAqIEBtZW1iZXJvZiBMb2FkZXIjXG4gICAgICovXG5cbiAgICAvKipcbiAgICAgKiBFbWl0dGVkIG9uY2UgcGVyIGxvYWRlZCByZXNvdXJjZS5cbiAgICAgKlxuICAgICAqIEBldmVudCBsb2FkXG4gICAgICogQG1lbWJlcm9mIExvYWRlciNcbiAgICAgKi9cblxuICAgIC8qKlxuICAgICAqIEVtaXR0ZWQgd2hlbiB0aGUgbG9hZGVyIGJlZ2lucyB0byBwcm9jZXNzIHRoZSBxdWV1ZS5cbiAgICAgKlxuICAgICAqIEBldmVudCBzdGFydFxuICAgICAqIEBtZW1iZXJvZiBMb2FkZXIjXG4gICAgICovXG5cbiAgICAvKipcbiAgICAgKiBFbWl0dGVkIHdoZW4gdGhlIHF1ZXVlZCByZXNvdXJjZXMgYWxsIGxvYWQuXG4gICAgICpcbiAgICAgKiBAZXZlbnQgY29tcGxldGVcbiAgICAgKiBAbWVtYmVyb2YgTG9hZGVyI1xuICAgICAqL1xufVxuXG5Mb2FkZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShFdmVudEVtaXR0ZXIucHJvdG90eXBlKTtcbkxvYWRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBMb2FkZXI7XG5tb2R1bGUuZXhwb3J0cyA9IExvYWRlcjtcblxuLyoqXG4gKiBBZGRzIGEgcmVzb3VyY2UgKG9yIG11bHRpcGxlIHJlc291cmNlcykgdG8gdGhlIGxvYWRlciBxdWV1ZS5cbiAqXG4gKiBUaGlzIGZ1bmN0aW9uIGNhbiB0YWtlIGEgd2lkZSB2YXJpZXR5IG9mIGRpZmZlcmVudCBwYXJhbWV0ZXJzLiBUaGUgb25seSB0aGluZyB0aGF0IGlzIGFsd2F5c1xuICogcmVxdWlyZWQgdGhlIHVybCB0byBsb2FkLiBBbGwgdGhlIGZvbGxvd2luZyB3aWxsIHdvcms6XG4gKlxuICogYGBganNcbiAqIGxvYWRlclxuICogICAgIC8vIG5vcm1hbCBwYXJhbSBzeW50YXhcbiAqICAgICAuYWRkKCdrZXknLCAnaHR0cDovLy4uLicsIGZ1bmN0aW9uICgpIHt9KVxuICogICAgIC5hZGQoJ2h0dHA6Ly8uLi4nLCBmdW5jdGlvbiAoKSB7fSlcbiAqICAgICAuYWRkKCdodHRwOi8vLi4uJylcbiAqXG4gKiAgICAgLy8gb2JqZWN0IHN5bnRheFxuICogICAgIC5hZGQoe1xuICogICAgICAgICBuYW1lOiAna2V5MicsXG4gKiAgICAgICAgIHVybDogJ2h0dHA6Ly8uLi4nXG4gKiAgICAgfSwgZnVuY3Rpb24gKCkge30pXG4gKiAgICAgLmFkZCh7XG4gKiAgICAgICAgIHVybDogJ2h0dHA6Ly8uLi4nXG4gKiAgICAgfSwgZnVuY3Rpb24gKCkge30pXG4gKiAgICAgLmFkZCh7XG4gKiAgICAgICAgIG5hbWU6ICdrZXkzJyxcbiAqICAgICAgICAgdXJsOiAnaHR0cDovLy4uLidcbiAqICAgICAgICAgb25Db21wbGV0ZTogZnVuY3Rpb24gKCkge31cbiAqICAgICB9KVxuICogICAgIC5hZGQoe1xuICogICAgICAgICB1cmw6ICdodHRwczovLy4uLicsXG4gKiAgICAgICAgIG9uQ29tcGxldGU6IGZ1bmN0aW9uICgpIHt9LFxuICogICAgICAgICBjcm9zc09yaWdpbjogdHJ1ZVxuICogICAgIH0pXG4gKlxuICogICAgIC8vIHlvdSBjYW4gYWxzbyBwYXNzIGFuIGFycmF5IG9mIG9iamVjdHMgb3IgdXJscyBvciBib3RoXG4gKiAgICAgLmFkZChbXG4gKiAgICAgICAgIHsgbmFtZTogJ2tleTQnLCB1cmw6ICdodHRwOi8vLi4uJywgb25Db21wbGV0ZTogZnVuY3Rpb24gKCkge30gfSxcbiAqICAgICAgICAgeyB1cmw6ICdodHRwOi8vLi4uJywgb25Db21wbGV0ZTogZnVuY3Rpb24gKCkge30gfSxcbiAqICAgICAgICAgJ2h0dHA6Ly8uLi4nXG4gKiAgICAgXSk7XG4gKiBgYGBcbiAqXG4gKiBAYWxpYXMgZW5xdWV1ZVxuICogQHBhcmFtIFtuYW1lXSB7c3RyaW5nfSBUaGUgbmFtZSBvZiB0aGUgcmVzb3VyY2UgdG8gbG9hZCwgaWYgbm90IHBhc3NlZCB0aGUgdXJsIGlzIHVzZWQuXG4gKiBAcGFyYW0gdXJsIHtzdHJpbmd9IFRoZSB1cmwgZm9yIHRoaXMgcmVzb3VyY2UsIHJlbGF0aXZlIHRvIHRoZSBiYXNlVXJsIG9mIHRoaXMgbG9hZGVyLlxuICogQHBhcmFtIFtvcHRpb25zXSB7b2JqZWN0fSBUaGUgb3B0aW9ucyBmb3IgdGhlIGxvYWQuXG4gKiBAcGFyYW0gW29wdGlvbnMuY3Jvc3NPcmlnaW5dIHtib29sZWFufSBJcyB0aGlzIHJlcXVlc3QgY3Jvc3Mtb3JpZ2luPyBEZWZhdWx0IGlzIHRvIGRldGVybWluZSBhdXRvbWF0aWNhbGx5LlxuICogQHBhcmFtIFtvcHRpb25zLmxvYWRUeXBlPVJlc291cmNlLkxPQURfVFlQRS5YSFJdIHtSZXNvdXJjZS5YSFJfTE9BRF9UWVBFfSBIb3cgc2hvdWxkIHRoaXMgcmVzb3VyY2UgYmUgbG9hZGVkP1xuICogQHBhcmFtIFtvcHRpb25zLnhoclR5cGU9UmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuREVGQVVMVF0ge1Jlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFfSBIb3cgc2hvdWxkIHRoZSBkYXRhIGJlaW5nXG4gKiAgICAgIGxvYWRlZCBiZSBpbnRlcnByZXRlZCB3aGVuIHVzaW5nIFhIUj9cbiAqIEBwYXJhbSBbY2FsbGJhY2tdIHtmdW5jdGlvbn0gRnVuY3Rpb24gdG8gY2FsbCB3aGVuIHRoaXMgc3BlY2lmaWMgcmVzb3VyY2UgY29tcGxldGVzIGxvYWRpbmcuXG4gKiBAcmV0dXJuIHtMb2FkZXJ9XG4gKi9cbkxvYWRlci5wcm90b3R5cGUuYWRkID0gTG9hZGVyLnByb3RvdHlwZS5lbnF1ZXVlID0gZnVuY3Rpb24gKG5hbWUsIHVybCwgb3B0aW9ucywgY2IpIHtcbiAgICAvLyBzcGVjaWFsIGNhc2Ugb2YgYW4gYXJyYXkgb2Ygb2JqZWN0cyBvciB1cmxzXG4gICAgaWYgKEFycmF5LmlzQXJyYXkobmFtZSkpIHtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBuYW1lLmxlbmd0aDsgKytpKSB7XG4gICAgICAgICAgICB0aGlzLmFkZChuYW1lW2ldKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIC8vIGlmIGFuIG9iamVjdCBpcyBwYXNzZWQgaW5zdGVhZCBvZiBwYXJhbXNcbiAgICBpZiAodHlwZW9mIG5hbWUgPT09ICdvYmplY3QnKSB7XG4gICAgICAgIGNiID0gdXJsIHx8IG5hbWUuY2FsbGJhY2sgfHwgbmFtZS5vbkNvbXBsZXRlO1xuICAgICAgICBvcHRpb25zID0gbmFtZTtcbiAgICAgICAgdXJsID0gbmFtZS51cmw7XG4gICAgICAgIG5hbWUgPSBuYW1lLm5hbWUgfHwgbmFtZS5rZXkgfHwgbmFtZS51cmw7XG4gICAgfVxuXG4gICAgLy8gY2FzZSB3aGVyZSBubyBuYW1lIGlzIHBhc3NlZCBzaGlmdCBhbGwgYXJncyBvdmVyIGJ5IG9uZS5cbiAgICBpZiAodHlwZW9mIHVybCAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgY2IgPSBvcHRpb25zO1xuICAgICAgICBvcHRpb25zID0gdXJsO1xuICAgICAgICB1cmwgPSBuYW1lO1xuICAgIH1cblxuICAgIC8vIG5vdyB0aGF0IHdlIHNoaWZ0ZWQgbWFrZSBzdXJlIHdlIGhhdmUgYSBwcm9wZXIgdXJsLlxuICAgIGlmICh0eXBlb2YgdXJsICE9PSAnc3RyaW5nJykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ05vIHVybCBwYXNzZWQgdG8gYWRkIHJlc291cmNlIHRvIGxvYWRlci4nKTtcbiAgICB9XG5cbiAgICAvLyBvcHRpb25zIGFyZSBvcHRpb25hbCBzbyBwZW9wbGUgbWlnaHQgcGFzcyBhIGZ1bmN0aW9uIGFuZCBubyBvcHRpb25zXG4gICAgaWYgKHR5cGVvZiBvcHRpb25zID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIGNiID0gb3B0aW9ucztcbiAgICAgICAgb3B0aW9ucyA9IG51bGw7XG4gICAgfVxuXG4gICAgLy8gY2hlY2sgaWYgcmVzb3VyY2UgYWxyZWFkeSBleGlzdHMuXG4gICAgaWYgKHRoaXMucmVzb3VyY2VzW25hbWVdKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignUmVzb3VyY2Ugd2l0aCBuYW1lIFwiJyArIG5hbWUgKyAnXCIgYWxyZWFkeSBleGlzdHMuJyk7XG4gICAgfVxuXG4gICAgLy8gYWRkIGJhc2UgdXJsIGlmIHRoaXMgaXNuJ3QgYW4gYWJzb2x1dGUgdXJsXG4gICAgdXJsID0gdGhpcy5faGFuZGxlQmFzZVVybCh1cmwpO1xuXG4gICAgLy8gY3JlYXRlIHRoZSBzdG9yZSB0aGUgcmVzb3VyY2VcbiAgICB0aGlzLnJlc291cmNlc1tuYW1lXSA9IG5ldyBSZXNvdXJjZShuYW1lLCB1cmwsIG9wdGlvbnMpO1xuXG4gICAgaWYgKHR5cGVvZiBjYiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB0aGlzLnJlc291cmNlc1tuYW1lXS5vbmNlKCdhZnRlck1pZGRsZXdhcmUnLCBjYik7XG4gICAgfVxuXG4gICAgdGhpcy5fbnVtVG9Mb2FkKys7XG5cbiAgICAvLyBpZiBhbHJlYWR5IGxvYWRpbmcgYWRkIGl0IHRvIHRoZSB3b3JrZXIgcXVldWVcbiAgICBpZiAodGhpcy5fcXVldWUuc3RhcnRlZCkge1xuICAgICAgICB0aGlzLl9xdWV1ZS5wdXNoKHRoaXMucmVzb3VyY2VzW25hbWVdKTtcbiAgICAgICAgdGhpcy5fcHJvZ3Jlc3NDaHVuayA9ICgxMDAgLSB0aGlzLnByb2dyZXNzKSAvICh0aGlzLl9xdWV1ZS5sZW5ndGgoKSArIHRoaXMuX3F1ZXVlLnJ1bm5pbmcoKSk7XG4gICAgfVxuICAgIC8vIG90aGVyd2lzZSBidWZmZXIgaXQgdG8gYmUgYWRkZWQgdG8gdGhlIHF1ZXVlIGxhdGVyXG4gICAgZWxzZSB7XG4gICAgICAgIHRoaXMuX2J1ZmZlci5wdXNoKHRoaXMucmVzb3VyY2VzW25hbWVdKTtcbiAgICAgICAgdGhpcy5fcHJvZ3Jlc3NDaHVuayA9IDEwMCAvIHRoaXMuX2J1ZmZlci5sZW5ndGg7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG5Mb2FkZXIucHJvdG90eXBlLl9oYW5kbGVCYXNlVXJsID0gZnVuY3Rpb24gKHVybCkge1xuICAgIHZhciBwYXJzZWRVcmwgPSB1cmxQYXJzZXIucGFyc2UodXJsKTtcblxuICAgIC8vIGFic29sdXRlIHVybCwganVzdCB1c2UgaXQgYXMgaXMuXG4gICAgaWYgKHBhcnNlZFVybC5wcm90b2NvbCB8fCBwYXJzZWRVcmwucGF0aG5hbWUuaW5kZXhPZignLy8nKSA9PT0gMCkge1xuICAgICAgICByZXR1cm4gdXJsO1xuICAgIH1cblxuICAgIC8vIGlmIGJhc2VVcmwgZG9lc24ndCBlbmQgaW4gc2xhc2ggYW5kIHVybCBkb2Vzbid0IHN0YXJ0IHdpdGggc2xhc2gsIHRoZW4gYWRkIGEgc2xhc2ggaW5iZXR3ZWVuXG4gICAgaWYgKFxuICAgICAgICB0aGlzLmJhc2VVcmwubGVuZ3RoICYmXG4gICAgICAgIHRoaXMuYmFzZVVybC5sYXN0SW5kZXhPZignLycpICE9PSB0aGlzLmJhc2VVcmwubGVuZ3RoIC0gMSAmJlxuICAgICAgICB1cmwuY2hhckF0KDApICE9PSAnLydcbiAgICApIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYmFzZVVybCArICcvJyArIHVybDtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHJldHVybiB0aGlzLmJhc2VVcmwgKyB1cmw7XG4gICAgfVxufTtcblxuXG4vKipcbiAqIFNldHMgdXAgYSBtaWRkbGV3YXJlIGZ1bmN0aW9uIHRoYXQgd2lsbCBydW4gKmJlZm9yZSogdGhlXG4gKiByZXNvdXJjZSBpcyBsb2FkZWQuXG4gKlxuICogQGFsaWFzIHByZVxuICogQHBhcmFtIG1pZGRsZXdhcmUge2Z1bmN0aW9ufSBUaGUgbWlkZGxld2FyZSBmdW5jdGlvbiB0byByZWdpc3Rlci5cbiAqIEByZXR1cm4ge0xvYWRlcn1cbiAqL1xuTG9hZGVyLnByb3RvdHlwZS5iZWZvcmUgPSBMb2FkZXIucHJvdG90eXBlLnByZSA9IGZ1bmN0aW9uIChmbikge1xuICAgIHRoaXMuX2JlZm9yZU1pZGRsZXdhcmUucHVzaChmbik7XG5cbiAgICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogU2V0cyB1cCBhIG1pZGRsZXdhcmUgZnVuY3Rpb24gdGhhdCB3aWxsIHJ1biAqYWZ0ZXIqIHRoZVxuICogcmVzb3VyY2UgaXMgbG9hZGVkLlxuICpcbiAqIEBhbGlhcyB1c2VcbiAqIEBwYXJhbSBtaWRkbGV3YXJlIHtmdW5jdGlvbn0gVGhlIG1pZGRsZXdhcmUgZnVuY3Rpb24gdG8gcmVnaXN0ZXIuXG4gKiBAcmV0dXJuIHtMb2FkZXJ9XG4gKi9cbkxvYWRlci5wcm90b3R5cGUuYWZ0ZXIgPSBMb2FkZXIucHJvdG90eXBlLnVzZSA9IGZ1bmN0aW9uIChmbikge1xuICAgIHRoaXMuX2FmdGVyTWlkZGxld2FyZS5wdXNoKGZuKTtcblxuICAgIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBSZXNldHMgdGhlIHF1ZXVlIG9mIHRoZSBsb2FkZXIgdG8gcHJlcGFyZSBmb3IgYSBuZXcgbG9hZC5cbiAqXG4gKiBAcmV0dXJuIHtMb2FkZXJ9XG4gKi9cbkxvYWRlci5wcm90b3R5cGUucmVzZXQgPSBmdW5jdGlvbiAoKSB7XG4gICAgLy8gdGhpcy5iYXNlVXJsID0gYmFzZVVybCB8fCAnJztcblxuICAgIHRoaXMucHJvZ3Jlc3MgPSAwO1xuXG4gICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XG5cbiAgICB0aGlzLl9wcm9ncmVzc0NodW5rID0gMDtcblxuICAgIC8vIHRoaXMuX2JlZm9yZU1pZGRsZXdhcmUubGVuZ3RoID0gMDtcbiAgICAvLyB0aGlzLl9hZnRlck1pZGRsZXdhcmUubGVuZ3RoID0gMDtcblxuICAgIHRoaXMuX2J1ZmZlci5sZW5ndGggPSAwO1xuXG4gICAgdGhpcy5fbnVtVG9Mb2FkID0gMDtcblxuICAgIHRoaXMuX3F1ZXVlLmtpbGwoKTtcbiAgICB0aGlzLl9xdWV1ZS5zdGFydGVkID0gZmFsc2U7XG5cbiAgICB0aGlzLnJlc291cmNlcyA9IHt9O1xufTtcblxuLyoqXG4gKiBTdGFydHMgbG9hZGluZyB0aGUgcXVldWVkIHJlc291cmNlcy5cbiAqXG4gKiBAZmlyZXMgc3RhcnRcbiAqIEBwYXJhbSBbY2FsbGJhY2tdIHtmdW5jdGlvbn0gT3B0aW9uYWwgY2FsbGJhY2sgdGhhdCB3aWxsIGJlIGJvdW5kIHRvIHRoZSBgY29tcGxldGVgIGV2ZW50LlxuICogQHJldHVybiB7TG9hZGVyfVxuICovXG5Mb2FkZXIucHJvdG90eXBlLmxvYWQgPSBmdW5jdGlvbiAoY2IpIHtcbiAgICAvLyByZWdpc3RlciBjb21wbGV0ZSBjYWxsYmFjayBpZiB0aGV5IHBhc3Mgb25lXG4gICAgaWYgKHR5cGVvZiBjYiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB0aGlzLm9uY2UoJ2NvbXBsZXRlJywgY2IpO1xuICAgIH1cblxuICAgIC8vIGlmIHRoZSBxdWV1ZSBoYXMgYWxyZWFkeSBzdGFydGVkIHdlIGFyZSBkb25lIGhlcmVcbiAgICBpZiAodGhpcy5fcXVldWUuc3RhcnRlZCkge1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICAvLyBub3RpZnkgb2Ygc3RhcnRcbiAgICB0aGlzLmVtaXQoJ3N0YXJ0JywgdGhpcyk7XG5cbiAgICAvLyBzdGFydCB0aGUgaW50ZXJuYWwgcXVldWVcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuX2J1ZmZlci5sZW5ndGg7ICsraSkge1xuICAgICAgICB0aGlzLl9xdWV1ZS5wdXNoKHRoaXMuX2J1ZmZlcltpXSk7XG4gICAgfVxuXG4gICAgLy8gZW1wdHkgdGhlIGJ1ZmZlclxuICAgIHRoaXMuX2J1ZmZlci5sZW5ndGggPSAwO1xuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIExvYWRzIGEgc2luZ2xlIHJlc291cmNlLlxuICpcbiAqIEBmaXJlcyBwcm9ncmVzc1xuICogQHByaXZhdGVcbiAqL1xuTG9hZGVyLnByb3RvdHlwZS5fbG9hZFJlc291cmNlID0gZnVuY3Rpb24gKHJlc291cmNlLCBkZXF1ZXVlKSB7XG4gICAgdmFyIHNlbGYgPSB0aGlzO1xuXG4gICAgcmVzb3VyY2UuX2RlcXVldWUgPSBkZXF1ZXVlO1xuXG4gICAgdGhpcy5fcnVuTWlkZGxld2FyZShyZXNvdXJjZSwgdGhpcy5fYmVmb3JlTWlkZGxld2FyZSwgZnVuY3Rpb24gKCkge1xuICAgICAgICAvLyByZXNvdXJjZS5vbigncHJvZ3Jlc3MnLCBzZWxmLmVtaXQuYmluZChzZWxmLCAncHJvZ3Jlc3MnKSk7XG5cbiAgICAgICAgcmVzb3VyY2UubG9hZChzZWxmLl9ib3VuZE9uTG9hZCk7XG4gICAgfSk7XG59O1xuXG4vKipcbiAqIENhbGxlZCBvbmNlIGVhY2ggcmVzb3VyY2UgaGFzIGxvYWRlZC5cbiAqXG4gKiBAZmlyZXMgY29tcGxldGVcbiAqIEBwcml2YXRlXG4gKi9cbkxvYWRlci5wcm90b3R5cGUuX29uQ29tcGxldGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgdGhpcy5lbWl0KCdjb21wbGV0ZScsIHRoaXMsIHRoaXMucmVzb3VyY2VzKTtcbn07XG5cbi8qKlxuICogQ2FsbGVkIGVhY2ggdGltZSBhIHJlc291cmNlcyBpcyBsb2FkZWQuXG4gKlxuICogQGZpcmVzIHByb2dyZXNzXG4gKiBAZmlyZXMgZXJyb3JcbiAqIEBmaXJlcyBsb2FkXG4gKiBAcHJpdmF0ZVxuICovXG5Mb2FkZXIucHJvdG90eXBlLl9vbkxvYWQgPSBmdW5jdGlvbiAocmVzb3VyY2UpIHtcbiAgICB0aGlzLnByb2dyZXNzICs9IHRoaXMuX3Byb2dyZXNzQ2h1bms7XG5cbiAgICB0aGlzLmVtaXQoJ3Byb2dyZXNzJywgdGhpcywgcmVzb3VyY2UpO1xuXG4gICAgLy8gcnVuIG1pZGRsZXdhcmUsIHRoaXMgKm11c3QqIGhhcHBlbiBiZWZvcmUgZGVxdWV1ZSBzbyBzdWItYXNzZXRzIGdldCBhZGRlZCBwcm9wZXJseVxuICAgIHRoaXMuX3J1bk1pZGRsZXdhcmUocmVzb3VyY2UsIHRoaXMuX2FmdGVyTWlkZGxld2FyZSwgZnVuY3Rpb24gKCkge1xuICAgICAgICByZXNvdXJjZS5lbWl0KCdhZnRlck1pZGRsZXdhcmUnLCByZXNvdXJjZSk7XG5cbiAgICAgICAgdGhpcy5fbnVtVG9Mb2FkLS07XG5cbiAgICAgICAgLy8gZG8gY29tcGxldGlvbiBjaGVja1xuICAgICAgICBpZiAodGhpcy5fbnVtVG9Mb2FkID09PSAwKSB7XG4gICAgICAgICAgICB0aGlzLnByb2dyZXNzID0gMTAwO1xuICAgICAgICAgICAgdGhpcy5fb25Db21wbGV0ZSgpO1xuICAgICAgICB9XG4gICAgICAgIFxuICAgICAgICBpZiAocmVzb3VyY2UuZXJyb3IpIHtcbiAgICAgICAgICAgIHRoaXMuZW1pdCgnZXJyb3InLCByZXNvdXJjZS5lcnJvciwgdGhpcywgcmVzb3VyY2UpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5lbWl0KCdsb2FkJywgdGhpcywgcmVzb3VyY2UpO1xuICAgICAgICB9XG4gICAgfSk7XG4gICAgXG5cblxuICAgIC8vIHJlbW92ZSB0aGlzIHJlc291cmNlIGZyb20gdGhlIGFzeW5jIHF1ZXVlXG4gICAgcmVzb3VyY2UuX2RlcXVldWUoKTtcbn07XG5cbi8qKlxuICogUnVuIG1pZGRsZXdhcmUgZnVuY3Rpb25zIG9uIGEgcmVzb3VyY2UuXG4gKlxuICogQHByaXZhdGVcbiAqL1xuTG9hZGVyLnByb3RvdHlwZS5fcnVuTWlkZGxld2FyZSA9IGZ1bmN0aW9uIChyZXNvdXJjZSwgZm5zLCBjYikge1xuICAgIHZhciBzZWxmID0gdGhpcztcblxuICAgIGFzeW5jLmVhY2hTZXJpZXMoZm5zLCBmdW5jdGlvbiAoZm4sIG5leHQpIHtcbiAgICAgICAgZm4uY2FsbChzZWxmLCByZXNvdXJjZSwgbmV4dCk7XG4gICAgfSwgY2IuYmluZCh0aGlzLCByZXNvdXJjZSkpO1xufTtcblxuTG9hZGVyLkxPQURfVFlQRSA9IFJlc291cmNlLkxPQURfVFlQRTtcbkxvYWRlci5YSFJfUkVBRFlfU1RBVEUgPSBSZXNvdXJjZS5YSFJfUkVBRFlfU1RBVEU7XG5Mb2FkZXIuWEhSX1JFU1BPTlNFX1RZUEUgPSBSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRTtcbiIsInZhciBFdmVudEVtaXR0ZXIgPSByZXF1aXJlKCdldmVudGVtaXR0ZXIzJyksXG4gICAgX3VybCA9IHJlcXVpcmUoJ3VybCcpLFxuICAgIC8vIHRlc3RzIGlzIENPUlMgaXMgc3VwcG9ydGVkIGluIFhIUiwgaWYgbm90IHdlIG5lZWQgdG8gdXNlIFhEUlxuICAgIHVzZVhkciA9ICEhKHdpbmRvdy5YRG9tYWluUmVxdWVzdCAmJiAhKCd3aXRoQ3JlZGVudGlhbHMnIGluIChuZXcgWE1MSHR0cFJlcXVlc3QoKSkpKSxcbiAgICB0ZW1wQW5jaG9yID0gbnVsbDtcblxuLyoqXG4gKiBNYW5hZ2VzIHRoZSBzdGF0ZSBhbmQgbG9hZGluZyBvZiBhIHNpbmdsZSByZXNvdXJjZSByZXByZXNlbnRlZCBieVxuICogYSBzaW5nbGUgVVJMLlxuICpcbiAqIEBjbGFzc1xuICogQHBhcmFtIG5hbWUge3N0cmluZ30gVGhlIG5hbWUgb2YgdGhlIHJlc291cmNlIHRvIGxvYWQuXG4gKiBAcGFyYW0gdXJsIHtzdHJpbmd8c3RyaW5nW119IFRoZSB1cmwgZm9yIHRoaXMgcmVzb3VyY2UsIGZvciBhdWRpby92aWRlbyBsb2FkcyB5b3UgY2FuIHBhc3MgYW4gYXJyYXkgb2Ygc291cmNlcy5cbiAqIEBwYXJhbSBbb3B0aW9uc10ge29iamVjdH0gVGhlIG9wdGlvbnMgZm9yIHRoZSBsb2FkLlxuICogQHBhcmFtIFtvcHRpb25zLmNyb3NzT3JpZ2luXSB7c3RyaW5nfGJvb2xlYW59IElzIHRoaXMgcmVxdWVzdCBjcm9zcy1vcmlnaW4/IERlZmF1bHQgaXMgdG8gZGV0ZXJtaW5lIGF1dG9tYXRpY2FsbHkuXG4gKiBAcGFyYW0gW29wdGlvbnMubG9hZFR5cGU9UmVzb3VyY2UuTE9BRF9UWVBFLlhIUl0ge1Jlc291cmNlLkxPQURfVFlQRX0gSG93IHNob3VsZCB0aGlzIHJlc291cmNlIGJlIGxvYWRlZD9cbiAqIEBwYXJhbSBbb3B0aW9ucy54aHJUeXBlPVJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkRFRkFVTFRdIHtSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRX0gSG93IHNob3VsZCB0aGUgZGF0YSBiZWluZ1xuICogICAgICBsb2FkZWQgYmUgaW50ZXJwcmV0ZWQgd2hlbiB1c2luZyBYSFI/XG4gKiBAcGFyYW0gW29wdGlvbnMubWV0YWRhdGFdIHtvYmplY3R9IEV4dHJhIGluZm8gZm9yIG1pZGRsZXdhcmUuXG4gKi9cbmZ1bmN0aW9uIFJlc291cmNlKG5hbWUsIHVybCwgb3B0aW9ucykge1xuICAgIEV2ZW50RW1pdHRlci5jYWxsKHRoaXMpO1xuXG4gICAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG5cbiAgICBpZiAodHlwZW9mIG5hbWUgIT09ICdzdHJpbmcnIHx8IHR5cGVvZiB1cmwgIT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignQm90aCBuYW1lIGFuZCB1cmwgYXJlIHJlcXVpcmVkIGZvciBjb25zdHJ1Y3RpbmcgYSByZXNvdXJjZS4nKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGUgbmFtZSBvZiB0aGlzIHJlc291cmNlLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7c3RyaW5nfVxuICAgICAqIEByZWFkb25seVxuICAgICAqL1xuICAgIHRoaXMubmFtZSA9IG5hbWU7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgdXJsIHVzZWQgdG8gbG9hZCB0aGlzIHJlc291cmNlLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7c3RyaW5nfVxuICAgICAqIEByZWFkb25seVxuICAgICAqL1xuICAgIHRoaXMudXJsID0gdXJsO1xuXG4gICAgLyoqXG4gICAgICogU3RvcmVzIHdoZXRoZXIgb3Igbm90IHRoaXMgdXJsIGlzIGEgZGF0YSB1cmwuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqIEByZWFkb25seVxuICAgICAqL1xuICAgIHRoaXMuaXNEYXRhVXJsID0gdGhpcy51cmwuaW5kZXhPZignZGF0YTonKSA9PT0gMDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBkYXRhIHRoYXQgd2FzIGxvYWRlZCBieSB0aGUgcmVzb3VyY2UuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHthbnl9XG4gICAgICovXG4gICAgdGhpcy5kYXRhID0gbnVsbDtcblxuICAgIC8qKlxuICAgICAqIElzIHRoaXMgcmVxdWVzdCBjcm9zcy1vcmlnaW4/IElmIHVuc2V0LCBkZXRlcm1pbmVkIGF1dG9tYXRpY2FsbHkuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtzdHJpbmd9XG4gICAgICovXG4gICAgdGhpcy5jcm9zc09yaWdpbiA9IG9wdGlvbnMuY3Jvc3NPcmlnaW4gPT09IHRydWUgPyAnYW5vbnltb3VzJyA6IG9wdGlvbnMuY3Jvc3NPcmlnaW47XG5cbiAgICAvKipcbiAgICAgKiBUaGUgbWV0aG9kIG9mIGxvYWRpbmcgdG8gdXNlIGZvciB0aGlzIHJlc291cmNlLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UmVzb3VyY2UuTE9BRF9UWVBFfVxuICAgICAqL1xuICAgIHRoaXMubG9hZFR5cGUgPSBvcHRpb25zLmxvYWRUeXBlIHx8IHRoaXMuX2RldGVybWluZUxvYWRUeXBlKCk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgdHlwZSB1c2VkIHRvIGxvYWQgdGhlIHJlc291cmNlIHZpYSBYSFIuIElmIHVuc2V0LCBkZXRlcm1pbmVkIGF1dG9tYXRpY2FsbHkuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtzdHJpbmd9XG4gICAgICovXG4gICAgdGhpcy54aHJUeXBlID0gb3B0aW9ucy54aHJUeXBlO1xuXG4gICAgLyoqXG4gICAgICogRXh0cmEgaW5mbyBmb3IgbWlkZGxld2FyZVxuICAgICAqXG4gICAgICogQG1lbWJlciB7b2JqZWN0fVxuICAgICAqL1xuICAgIHRoaXMubWV0YWRhdGEgPSBvcHRpb25zLm1ldGFkYXRhIHx8IHt9O1xuXG4gICAgLyoqXG4gICAgICogVGhlIGVycm9yIHRoYXQgb2NjdXJyZWQgd2hpbGUgbG9hZGluZyAoaWYgYW55KS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge0Vycm9yfVxuICAgICAqIEByZWFkb25seVxuICAgICAqL1xuICAgIHRoaXMuZXJyb3IgPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogVGhlIFhIUiBvYmplY3QgdGhhdCB3YXMgdXNlZCB0byBsb2FkIHRoaXMgcmVzb3VyY2UuIFRoaXMgaXMgb25seSBzZXRcbiAgICAgKiB3aGVuIGBsb2FkVHlwZWAgaXMgYFJlc291cmNlLkxPQURfVFlQRS5YSFJgLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7WE1MSHR0cFJlcXVlc3R9XG4gICAgICovXG4gICAgdGhpcy54aHIgPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogRGVzY3JpYmVzIGlmIHRoaXMgcmVzb3VyY2Ugd2FzIGxvYWRlZCBhcyBqc29uLiBPbmx5IHZhbGlkIGFmdGVyIHRoZSByZXNvdXJjZVxuICAgICAqIGhhcyBjb21wbGV0ZWx5IGxvYWRlZC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICovXG4gICAgdGhpcy5pc0pzb24gPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIERlc2NyaWJlcyBpZiB0aGlzIHJlc291cmNlIHdhcyBsb2FkZWQgYXMgeG1sLiBPbmx5IHZhbGlkIGFmdGVyIHRoZSByZXNvdXJjZVxuICAgICAqIGhhcyBjb21wbGV0ZWx5IGxvYWRlZC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICovXG4gICAgdGhpcy5pc1htbCA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogRGVzY3JpYmVzIGlmIHRoaXMgcmVzb3VyY2Ugd2FzIGxvYWRlZCBhcyBhbiBpbWFnZSB0YWcuIE9ubHkgdmFsaWQgYWZ0ZXIgdGhlIHJlc291cmNlXG4gICAgICogaGFzIGNvbXBsZXRlbHkgbG9hZGVkLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKi9cbiAgICB0aGlzLmlzSW1hZ2UgPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIERlc2NyaWJlcyBpZiB0aGlzIHJlc291cmNlIHdhcyBsb2FkZWQgYXMgYW4gYXVkaW8gdGFnLiBPbmx5IHZhbGlkIGFmdGVyIHRoZSByZXNvdXJjZVxuICAgICAqIGhhcyBjb21wbGV0ZWx5IGxvYWRlZC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICovXG4gICAgdGhpcy5pc0F1ZGlvID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBEZXNjcmliZXMgaWYgdGhpcyByZXNvdXJjZSB3YXMgbG9hZGVkIGFzIGEgdmlkZW8gdGFnLiBPbmx5IHZhbGlkIGFmdGVyIHRoZSByZXNvdXJjZVxuICAgICAqIGhhcyBjb21wbGV0ZWx5IGxvYWRlZC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICovXG4gICAgdGhpcy5pc1ZpZGVvID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYGRlcXVldWVgIG1ldGhvZCB0aGF0IHdpbGwgYmUgdXNlZCBhIHN0b3JhZ2UgcGxhY2UgZm9yIHRoZSBhc3luYyBxdWV1ZSBkZXF1ZXVlIG1ldGhvZFxuICAgICAqIHVzZWQgcHJpdmF0ZWx5IGJ5IHRoZSBsb2FkZXIuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtmdW5jdGlvbn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX2RlcXVldWUgPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGBjb21wbGV0ZWAgZnVuY3Rpb24gYm91bmQgdG8gdGhpcyByZXNvdXJjZSdzIGNvbnRleHQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtmdW5jdGlvbn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX2JvdW5kQ29tcGxldGUgPSB0aGlzLmNvbXBsZXRlLmJpbmQodGhpcyk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYF9vbkVycm9yYCBmdW5jdGlvbiBib3VuZCB0byB0aGlzIHJlc291cmNlJ3MgY29udGV4dC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Z1bmN0aW9ufVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fYm91bmRPbkVycm9yID0gdGhpcy5fb25FcnJvci5iaW5kKHRoaXMpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGBfb25Qcm9ncmVzc2AgZnVuY3Rpb24gYm91bmQgdG8gdGhpcyByZXNvdXJjZSdzIGNvbnRleHQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtmdW5jdGlvbn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX2JvdW5kT25Qcm9ncmVzcyA9IHRoaXMuX29uUHJvZ3Jlc3MuYmluZCh0aGlzKTtcblxuICAgIC8vIHhociBjYWxsYmFja3NcbiAgICB0aGlzLl9ib3VuZFhock9uRXJyb3IgPSB0aGlzLl94aHJPbkVycm9yLmJpbmQodGhpcyk7XG4gICAgdGhpcy5fYm91bmRYaHJPbkFib3J0ID0gdGhpcy5feGhyT25BYm9ydC5iaW5kKHRoaXMpO1xuICAgIHRoaXMuX2JvdW5kWGhyT25Mb2FkID0gdGhpcy5feGhyT25Mb2FkLmJpbmQodGhpcyk7XG4gICAgdGhpcy5fYm91bmRYZHJPblRpbWVvdXQgPSB0aGlzLl94ZHJPblRpbWVvdXQuYmluZCh0aGlzKTtcblxuICAgIC8qKlxuICAgICAqIEVtaXR0ZWQgd2hlbiB0aGUgcmVzb3VyY2UgYmVpbmdzIHRvIGxvYWQuXG4gICAgICpcbiAgICAgKiBAZXZlbnQgc3RhcnRcbiAgICAgKiBAbWVtYmVyb2YgUmVzb3VyY2UjXG4gICAgICovXG5cbiAgICAvKipcbiAgICAgKiBFbWl0dGVkIGVhY2ggdGltZSBwcm9ncmVzcyBvZiB0aGlzIHJlc291cmNlIGxvYWQgdXBkYXRlcy5cbiAgICAgKiBOb3QgYWxsIHJlc291cmNlcyB0eXBlcyBhbmQgbG9hZGVyIHN5c3RlbXMgY2FuIHN1cHBvcnQgdGhpcyBldmVudFxuICAgICAqIHNvIHNvbWV0aW1lcyBpdCBtYXkgbm90IGJlIGF2YWlsYWJsZS4gSWYgdGhlIHJlc291cmNlXG4gICAgICogaXMgYmVpbmcgbG9hZGVkIG9uIGEgbW9kZXJuIGJyb3dzZXIsIHVzaW5nIFhIUiwgYW5kIHRoZSByZW1vdGUgc2VydmVyXG4gICAgICogcHJvcGVybHkgc2V0cyBDb250ZW50LUxlbmd0aCBoZWFkZXJzLCB0aGVuIHRoaXMgd2lsbCBiZSBhdmFpbGFibGUuXG4gICAgICpcbiAgICAgKiBAZXZlbnQgcHJvZ3Jlc3NcbiAgICAgKiBAbWVtYmVyb2YgUmVzb3VyY2UjXG4gICAgICovXG5cbiAgICAvKipcbiAgICAgKiBFbWl0dGVkIG9uY2UgdGhpcyByZXNvdXJjZSBoYXMgbG9hZGVkLCBpZiB0aGVyZSB3YXMgYW4gZXJyb3IgaXQgd2lsbFxuICAgICAqIGJlIGluIHRoZSBgZXJyb3JgIHByb3BlcnR5LlxuICAgICAqXG4gICAgICogQGV2ZW50IGNvbXBsZXRlXG4gICAgICogQG1lbWJlcm9mIFJlc291cmNlI1xuICAgICAqL1xufVxuXG5SZXNvdXJjZS5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKEV2ZW50RW1pdHRlci5wcm90b3R5cGUpO1xuUmVzb3VyY2UucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gUmVzb3VyY2U7XG5tb2R1bGUuZXhwb3J0cyA9IFJlc291cmNlO1xuXG4vKipcbiAqIE1hcmtzIHRoZSByZXNvdXJjZSBhcyBjb21wbGV0ZS5cbiAqXG4gKiBAZmlyZXMgY29tcGxldGVcbiAqL1xuUmVzb3VyY2UucHJvdG90eXBlLmNvbXBsZXRlID0gZnVuY3Rpb24gKCkge1xuICAgIC8vIFRPRE86IENsZWFuIHRoaXMgdXAgaW4gYSB3cmFwcGVyIG9yIHNvbWV0aGluZy4uLmdyb3NzLi4uLlxuICAgIGlmICh0aGlzLmRhdGEgJiYgdGhpcy5kYXRhLnJlbW92ZUV2ZW50TGlzdGVuZXIpIHtcbiAgICAgICAgdGhpcy5kYXRhLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2Vycm9yJywgdGhpcy5fYm91bmRPbkVycm9yKTtcbiAgICAgICAgdGhpcy5kYXRhLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2xvYWQnLCB0aGlzLl9ib3VuZENvbXBsZXRlKTtcbiAgICAgICAgdGhpcy5kYXRhLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3Byb2dyZXNzJywgdGhpcy5fYm91bmRPblByb2dyZXNzKTtcbiAgICAgICAgdGhpcy5kYXRhLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2NhbnBsYXl0aHJvdWdoJywgdGhpcy5fYm91bmRDb21wbGV0ZSk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMueGhyKSB7XG4gICAgICAgIGlmICh0aGlzLnhoci5yZW1vdmVFdmVudExpc3RlbmVyKSB7XG4gICAgICAgICAgICB0aGlzLnhoci5yZW1vdmVFdmVudExpc3RlbmVyKCdlcnJvcicsIHRoaXMuX2JvdW5kWGhyT25FcnJvcik7XG4gICAgICAgICAgICB0aGlzLnhoci5yZW1vdmVFdmVudExpc3RlbmVyKCdhYm9ydCcsIHRoaXMuX2JvdW5kWGhyT25BYm9ydCk7XG4gICAgICAgICAgICB0aGlzLnhoci5yZW1vdmVFdmVudExpc3RlbmVyKCdwcm9ncmVzcycsIHRoaXMuX2JvdW5kT25Qcm9ncmVzcyk7XG4gICAgICAgICAgICB0aGlzLnhoci5yZW1vdmVFdmVudExpc3RlbmVyKCdsb2FkJywgdGhpcy5fYm91bmRYaHJPbkxvYWQpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy54aHIub25lcnJvciA9IG51bGw7XG4gICAgICAgICAgICB0aGlzLnhoci5vbnRpbWVvdXQgPSBudWxsO1xuICAgICAgICAgICAgdGhpcy54aHIub25wcm9ncmVzcyA9IG51bGw7XG4gICAgICAgICAgICB0aGlzLnhoci5vbmxvYWQgPSBudWxsO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5lbWl0KCdjb21wbGV0ZScsIHRoaXMpO1xufTtcblxuLyoqXG4gKiBLaWNrcyBvZmYgbG9hZGluZyBvZiB0aGlzIHJlc291cmNlLlxuICpcbiAqIEBmaXJlcyBzdGFydFxuICogQHBhcmFtIFtjYWxsYmFja10ge2Z1bmN0aW9ufSBPcHRpb25hbCBjYWxsYmFjayB0byBjYWxsIG9uY2UgdGhlIHJlc291cmNlIGlzIGxvYWRlZC5cbiAqL1xuUmVzb3VyY2UucHJvdG90eXBlLmxvYWQgPSBmdW5jdGlvbiAoY2IpIHtcbiAgICB0aGlzLmVtaXQoJ3N0YXJ0JywgdGhpcyk7XG5cbiAgICAvLyBpZiBhIGNhbGxiYWNrIGlzIHNldCwgbGlzdGVuIGZvciBjb21wbGV0ZSBldmVudFxuICAgIGlmIChjYikge1xuICAgICAgICB0aGlzLm9uY2UoJ2NvbXBsZXRlJywgY2IpO1xuICAgIH1cblxuICAgIC8vIGlmIHVuc2V0LCBkZXRlcm1pbmUgdGhlIHZhbHVlXG4gICAgaWYgKHRoaXMuY3Jvc3NPcmlnaW4gPT09IGZhbHNlIHx8IHR5cGVvZiB0aGlzLmNyb3NzT3JpZ2luICE9PSAnc3RyaW5nJykge1xuICAgICAgICB0aGlzLmNyb3NzT3JpZ2luID0gdGhpcy5fZGV0ZXJtaW5lQ3Jvc3NPcmlnaW4odGhpcy51cmwpO1xuICAgIH1cblxuICAgIHN3aXRjaCh0aGlzLmxvYWRUeXBlKSB7XG4gICAgICAgIGNhc2UgUmVzb3VyY2UuTE9BRF9UWVBFLklNQUdFOlxuICAgICAgICAgICAgdGhpcy5fbG9hZEltYWdlKCk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIFJlc291cmNlLkxPQURfVFlQRS5BVURJTzpcbiAgICAgICAgICAgIHRoaXMuX2xvYWRFbGVtZW50KCdhdWRpbycpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSBSZXNvdXJjZS5MT0FEX1RZUEUuVklERU86XG4gICAgICAgICAgICB0aGlzLl9sb2FkRWxlbWVudCgndmlkZW8nKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgUmVzb3VyY2UuTE9BRF9UWVBFLlhIUjpcbiAgICAgICAgICAgIC8qIGZhbGxzIHRocm91Z2ggKi9cbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIGlmICh1c2VYZHIgJiYgdGhpcy5jcm9zc09yaWdpbikge1xuICAgICAgICAgICAgICAgIHRoaXMuX2xvYWRYZHIoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuX2xvYWRYaHIoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGJyZWFrO1xuICAgIH1cbn07XG5cbi8qKlxuICogTG9hZHMgdGhpcyByZXNvdXJjZXMgdXNpbmcgYW4gSW1hZ2Ugb2JqZWN0LlxuICpcbiAqIEBwcml2YXRlXG4gKi9cblJlc291cmNlLnByb3RvdHlwZS5fbG9hZEltYWdlID0gZnVuY3Rpb24gKCkge1xuICAgIHRoaXMuZGF0YSA9IG5ldyBJbWFnZSgpO1xuXG4gICAgaWYgKHRoaXMuY3Jvc3NPcmlnaW4pIHtcbiAgICAgICAgdGhpcy5kYXRhLmNyb3NzT3JpZ2luID0gdGhpcy5jcm9zc09yaWdpbjtcbiAgICB9XG5cbiAgICB0aGlzLmRhdGEuc3JjID0gdGhpcy51cmw7XG5cbiAgICB0aGlzLmlzSW1hZ2UgPSB0cnVlO1xuXG4gICAgdGhpcy5kYXRhLmFkZEV2ZW50TGlzdGVuZXIoJ2Vycm9yJywgdGhpcy5fYm91bmRPbkVycm9yLCBmYWxzZSk7XG4gICAgdGhpcy5kYXRhLmFkZEV2ZW50TGlzdGVuZXIoJ2xvYWQnLCB0aGlzLl9ib3VuZENvbXBsZXRlLCBmYWxzZSk7XG4gICAgdGhpcy5kYXRhLmFkZEV2ZW50TGlzdGVuZXIoJ3Byb2dyZXNzJywgdGhpcy5fYm91bmRPblByb2dyZXNzLCBmYWxzZSk7XG59O1xuXG4vKipcbiAqIExvYWRzIHRoaXMgcmVzb3VyY2VzIHVzaW5nIGFuIEhUTUxBdWRpb0VsZW1lbnQgb3IgSFRNTFZpZGVvRWxlbWVudC5cbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5SZXNvdXJjZS5wcm90b3R5cGUuX2xvYWRFbGVtZW50ID0gZnVuY3Rpb24gKHR5cGUpIHtcbiAgICBpZiAodHlwZSA9PT0gJ2F1ZGlvJyAmJiB0eXBlb2YgQXVkaW8gIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIHRoaXMuZGF0YSA9IG5ldyBBdWRpbygpO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgdGhpcy5kYXRhID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCh0eXBlKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5kYXRhID09PSBudWxsKSB7XG4gICAgICAgIHRoaXMuZXJyb3IgPSBuZXcgRXJyb3IoJ1Vuc3VwcG9ydGVkIGVsZW1lbnQgJyArIHR5cGUpO1xuICAgICAgICB0aGlzLmNvbXBsZXRlKCk7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBzdXBwb3J0IGZvciBDb2Nvb25KUyBDYW52YXMrIHJ1bnRpbWUsIGxhY2tzIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NvdXJjZScpXG4gICAgaWYgKG5hdmlnYXRvci5pc0NvY29vbkpTKSB7XG4gICAgICAgIHRoaXMuZGF0YS5zcmMgPSBBcnJheS5pc0FycmF5KHRoaXMudXJsKSA/IHRoaXMudXJsWzBdIDogdGhpcy51cmw7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSh0aGlzLnVybCkpIHtcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy51cmwubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmRhdGEuYXBwZW5kQ2hpbGQodGhpcy5fY3JlYXRlU291cmNlKHR5cGUsIHRoaXMudXJsW2ldKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmRhdGEuYXBwZW5kQ2hpbGQodGhpcy5fY3JlYXRlU291cmNlKHR5cGUsIHRoaXMudXJsKSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzWydpcycgKyB0eXBlWzBdLnRvVXBwZXJDYXNlKCkgKyB0eXBlLnN1YnN0cmluZygxKV0gPSB0cnVlO1xuXG4gICAgdGhpcy5kYXRhLmFkZEV2ZW50TGlzdGVuZXIoJ2Vycm9yJywgdGhpcy5fYm91bmRPbkVycm9yLCBmYWxzZSk7XG4gICAgdGhpcy5kYXRhLmFkZEV2ZW50TGlzdGVuZXIoJ2xvYWQnLCB0aGlzLl9ib3VuZENvbXBsZXRlLCBmYWxzZSk7XG4gICAgdGhpcy5kYXRhLmFkZEV2ZW50TGlzdGVuZXIoJ3Byb2dyZXNzJywgdGhpcy5fYm91bmRPblByb2dyZXNzLCBmYWxzZSk7XG4gICAgdGhpcy5kYXRhLmFkZEV2ZW50TGlzdGVuZXIoJ2NhbnBsYXl0aHJvdWdoJywgdGhpcy5fYm91bmRDb21wbGV0ZSwgZmFsc2UpO1xuXG4gICAgdGhpcy5kYXRhLmxvYWQoKTtcbn07XG5cbi8qKlxuICogTG9hZHMgdGhpcyByZXNvdXJjZXMgdXNpbmcgYW4gWE1MSHR0cFJlcXVlc3QuXG4gKlxuICogQHByaXZhdGVcbiAqL1xuUmVzb3VyY2UucHJvdG90eXBlLl9sb2FkWGhyID0gZnVuY3Rpb24gKCkge1xuICAgIC8vIGlmIHVuc2V0LCBkZXRlcm1pbmUgdGhlIHZhbHVlXG4gICAgaWYgKHR5cGVvZiB0aGlzLnhoclR5cGUgIT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHRoaXMueGhyVHlwZSA9IHRoaXMuX2RldGVybWluZVhoclR5cGUoKTtcbiAgICB9XG5cbiAgICB2YXIgeGhyID0gdGhpcy54aHIgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTtcblxuICAgIC8vIHNldCB0aGUgcmVxdWVzdCB0eXBlIGFuZCB1cmxcbiAgICB4aHIub3BlbignR0VUJywgdGhpcy51cmwsIHRydWUpO1xuXG4gICAgLy8gbG9hZCBqc29uIGFzIHRleHQgYW5kIHBhcnNlIGl0IG91cnNlbHZlcy4gV2UgZG8gdGhpcyBiZWNhdXNlIHNvbWUgYnJvd3NlcnNcbiAgICAvLyAqY291Z2gqIHNhZmFyaSAqY291Z2gqIGNhbid0IGRlYWwgd2l0aCBpdC5cbiAgICBpZiAodGhpcy54aHJUeXBlID09PSBSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRS5KU09OIHx8IHRoaXMueGhyVHlwZSA9PT0gUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuRE9DVU1FTlQpIHtcbiAgICAgICAgeGhyLnJlc3BvbnNlVHlwZSA9IFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLlRFWFQ7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICB4aHIucmVzcG9uc2VUeXBlID0gdGhpcy54aHJUeXBlO1xuICAgIH1cblxuICAgIHhoci5hZGRFdmVudExpc3RlbmVyKCdlcnJvcicsIHRoaXMuX2JvdW5kWGhyT25FcnJvciwgZmFsc2UpO1xuICAgIHhoci5hZGRFdmVudExpc3RlbmVyKCdhYm9ydCcsIHRoaXMuX2JvdW5kWGhyT25BYm9ydCwgZmFsc2UpO1xuICAgIHhoci5hZGRFdmVudExpc3RlbmVyKCdwcm9ncmVzcycsIHRoaXMuX2JvdW5kT25Qcm9ncmVzcywgZmFsc2UpO1xuICAgIHhoci5hZGRFdmVudExpc3RlbmVyKCdsb2FkJywgdGhpcy5fYm91bmRYaHJPbkxvYWQsIGZhbHNlKTtcblxuICAgIHhoci5zZW5kKCk7XG59O1xuXG4vKipcbiAqIExvYWRzIHRoaXMgcmVzb3VyY2VzIHVzaW5nIGFuIFhEb21haW5SZXF1ZXN0LiBUaGlzIGlzIGhlcmUgYmVjYXVzZSB3ZSBuZWVkIHRvIHN1cHBvcnQgSUU5IChncm9zcykuXG4gKlxuICogQHByaXZhdGVcbiAqL1xuUmVzb3VyY2UucHJvdG90eXBlLl9sb2FkWGRyID0gZnVuY3Rpb24gKCkge1xuICAgIC8vIGlmIHVuc2V0LCBkZXRlcm1pbmUgdGhlIHZhbHVlXG4gICAgaWYgKHR5cGVvZiB0aGlzLnhoclR5cGUgIT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHRoaXMueGhyVHlwZSA9IHRoaXMuX2RldGVybWluZVhoclR5cGUoKTtcbiAgICB9XG5cbiAgICB2YXIgeGRyID0gdGhpcy54aHIgPSBuZXcgWERvbWFpblJlcXVlc3QoKTtcblxuICAgIC8vIFhEb21haW5SZXF1ZXN0IGhhcyBhIGZldyBxdWlya3MuIE9jY2FzaW9uYWxseSBpdCB3aWxsIGFib3J0IHJlcXVlc3RzXG4gICAgLy8gQSB3YXkgdG8gYXZvaWQgdGhpcyBpcyB0byBtYWtlIHN1cmUgQUxMIGNhbGxiYWNrcyBhcmUgc2V0IGV2ZW4gaWYgbm90IHVzZWRcbiAgICAvLyBNb3JlIGluZm8gaGVyZTogaHR0cDovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy8xNTc4Njk2Ni94ZG9tYWlucmVxdWVzdC1hYm9ydHMtcG9zdC1vbi1pZS05XG4gICAgeGRyLnRpbWVvdXQgPSA1MDAwO1xuXG4gICAgeGRyLm9uZXJyb3IgPSB0aGlzLl9ib3VuZFhock9uRXJyb3I7XG4gICAgeGRyLm9udGltZW91dCA9IHRoaXMuX2JvdW5kWGRyT25UaW1lb3V0O1xuICAgIHhkci5vbnByb2dyZXNzID0gdGhpcy5fYm91bmRPblByb2dyZXNzO1xuICAgIHhkci5vbmxvYWQgPSB0aGlzLl9ib3VuZFhock9uTG9hZDtcblxuICAgIHhkci5vcGVuKCdHRVQnLCB0aGlzLnVybCwgdHJ1ZSk7XG5cbiAgICAvLyAgTm90ZTogVGhlIHhkci5zZW5kKCkgY2FsbCBpcyB3cmFwcGVkIGluIGEgdGltZW91dCB0byBwcmV2ZW50IGFuIGlzc3VlIHdpdGggdGhlIGludGVyZmFjZSB3aGVyZSBzb21lIHJlcXVlc3RzIGFyZSBsb3N0XG4gICAgLy8gIGlmIG11bHRpcGxlIFhEb21haW5SZXF1ZXN0cyBhcmUgYmVpbmcgc2VudCBhdCB0aGUgc2FtZSB0aW1lLlxuICAgIC8vIFNvbWUgaW5mbyBoZXJlOiBodHRwczovL2dpdGh1Yi5jb20vcGhvdG9uc3Rvcm0vcGhhc2VyL2lzc3Vlcy8xMjQ4XG4gICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICAgIHhkci5zZW5kKCk7XG4gICAgfSwgMCk7XG59O1xuXG4vKipcbiAqIENyZWF0ZXMgYSBzb3VyY2UgdXNlZCBpbiBsb2FkaW5nIHZpYSBhbiBlbGVtZW50LlxuICpcbiAqIEBwYXJhbSB0eXBlIHtzdHJpbmd9IFRoZSBlbGVtZW50IHR5cGUgKHZpZGVvIG9yIGF1ZGlvKS5cbiAqIEBwYXJhbSB1cmwge3N0cmluZ30gVGhlIHNvdXJjZSBVUkwgdG8gbG9hZCBmcm9tLlxuICogQHBhcmFtIFttaW1lXSB7c3RyaW5nfSBUaGUgbWltZSB0eXBlIG9mIHRoZSB2aWRlb1xuICogQHByaXZhdGVcbiAqL1xuUmVzb3VyY2UucHJvdG90eXBlLl9jcmVhdGVTb3VyY2UgPSBmdW5jdGlvbiAodHlwZSwgdXJsLCBtaW1lKSB7XG4gICAgaWYgKCFtaW1lKSB7XG4gICAgICAgIG1pbWUgPSB0eXBlICsgJy8nICsgdXJsLnN1YnN0cih1cmwubGFzdEluZGV4T2YoJy4nKSArIDEpO1xuICAgIH1cblxuICAgIHZhciBzb3VyY2UgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzb3VyY2UnKTtcblxuICAgIHNvdXJjZS5zcmMgPSB1cmw7XG4gICAgc291cmNlLnR5cGUgPSBtaW1lO1xuXG4gICAgcmV0dXJuIHNvdXJjZTtcbn07XG5cbi8qKlxuICogQ2FsbGVkIGlmIGEgbG9hZCBlcnJvcnMgb3V0LlxuICpcbiAqIEBwYXJhbSBldmVudCB7RXZlbnR9IFRoZSBlcnJvciBldmVudCBmcm9tIHRoZSBlbGVtZW50IHRoYXQgZW1pdHMgaXQuXG4gKiBAcHJpdmF0ZVxuICovXG5SZXNvdXJjZS5wcm90b3R5cGUuX29uRXJyb3IgPSBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICB0aGlzLmVycm9yID0gbmV3IEVycm9yKCdGYWlsZWQgdG8gbG9hZCBlbGVtZW50IHVzaW5nICcgKyBldmVudC50YXJnZXQubm9kZU5hbWUpO1xuICAgIHRoaXMuY29tcGxldGUoKTtcbn07XG5cbi8qKlxuICogQ2FsbGVkIGlmIGEgbG9hZCBwcm9ncmVzcyBldmVudCBmaXJlcyBmb3IgeGhyL3hkci5cbiAqXG4gKiBAZmlyZXMgcHJvZ3Jlc3NcbiAqIEBwYXJhbSBldmVudCB7WE1MSHR0cFJlcXVlc3RQcm9ncmVzc0V2ZW50fEV2ZW50fVxuICogQHByaXZhdGVcbiAqL1xuUmVzb3VyY2UucHJvdG90eXBlLl9vblByb2dyZXNzID0gIGZ1bmN0aW9uIChldmVudCkge1xuICAgIGlmIChldmVudCAmJiBldmVudC5sZW5ndGhDb21wdXRhYmxlKSB7XG4gICAgICAgIHRoaXMuZW1pdCgncHJvZ3Jlc3MnLCB0aGlzLCBldmVudC5sb2FkZWQgLyBldmVudC50b3RhbCk7XG4gICAgfVxufTtcblxuLyoqXG4gKiBDYWxsZWQgaWYgYW4gZXJyb3IgZXZlbnQgZmlyZXMgZm9yIHhoci94ZHIuXG4gKlxuICogQHBhcmFtIGV2ZW50IHtYTUxIdHRwUmVxdWVzdEVycm9yRXZlbnR8RXZlbnR9XG4gKiBAcHJpdmF0ZVxuICovXG5SZXNvdXJjZS5wcm90b3R5cGUuX3hock9uRXJyb3IgPSBmdW5jdGlvbiAoKSB7XG4gICAgdGhpcy5lcnJvciA9IG5ldyBFcnJvcihcbiAgICAgICAgcmVxVHlwZSh0aGlzLnhocikgKyAnIFJlcXVlc3QgZmFpbGVkLiAnICtcbiAgICAgICAgJ1N0YXR1czogJyArIHRoaXMueGhyLnN0YXR1cyArICcsIHRleHQ6IFwiJyArIHRoaXMueGhyLnN0YXR1c1RleHQgKyAnXCInXG4gICAgKTtcblxuICAgIHRoaXMuY29tcGxldGUoKTtcbn07XG5cbi8qKlxuICogQ2FsbGVkIGlmIGFuIGFib3J0IGV2ZW50IGZpcmVzIGZvciB4aHIuXG4gKlxuICogQHBhcmFtIGV2ZW50IHtYTUxIdHRwUmVxdWVzdEFib3J0RXZlbnR9XG4gKiBAcHJpdmF0ZVxuICovXG5SZXNvdXJjZS5wcm90b3R5cGUuX3hock9uQWJvcnQgPSBmdW5jdGlvbiAoKSB7XG4gICAgdGhpcy5lcnJvciA9IG5ldyBFcnJvcihyZXFUeXBlKHRoaXMueGhyKSArICcgUmVxdWVzdCB3YXMgYWJvcnRlZCBieSB0aGUgdXNlci4nKTtcbiAgICB0aGlzLmNvbXBsZXRlKCk7XG59O1xuXG4vKipcbiAqIENhbGxlZCBpZiBhIHRpbWVvdXQgZXZlbnQgZmlyZXMgZm9yIHhkci5cbiAqXG4gKiBAcGFyYW0gZXZlbnQge0V2ZW50fVxuICogQHByaXZhdGVcbiAqL1xuUmVzb3VyY2UucHJvdG90eXBlLl94ZHJPblRpbWVvdXQgPSBmdW5jdGlvbiAoKSB7XG4gICAgdGhpcy5lcnJvciA9IG5ldyBFcnJvcihyZXFUeXBlKHRoaXMueGhyKSArICcgUmVxdWVzdCB0aW1lZCBvdXQuJyk7XG4gICAgdGhpcy5jb21wbGV0ZSgpO1xufTtcblxuLyoqXG4gKiBDYWxsZWQgd2hlbiBkYXRhIHN1Y2Nlc3NmdWxseSBsb2FkcyBmcm9tIGFuIHhoci94ZHIgcmVxdWVzdC5cbiAqXG4gKiBAcGFyYW0gZXZlbnQge1hNTEh0dHBSZXF1ZXN0TG9hZEV2ZW50fEV2ZW50fVxuICogQHByaXZhdGVcbiAqL1xuUmVzb3VyY2UucHJvdG90eXBlLl94aHJPbkxvYWQgPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHhociA9IHRoaXMueGhyLFxuICAgICAgICBzdGF0dXMgPSB4aHIuc3RhdHVzICE9PSB1bmRlZmluZWQgPyB4aHIuc3RhdHVzIDogMjAwOyAvL1hEUiBoYXMgbm8gYC5zdGF0dXNgLCBhc3N1bWUgMjAwLlxuXG4gICAgLy8gc3RhdHVzIGNhbiBiZSAwIHdoZW4gdXNpbmcgdGhlIGZpbGU6Ly8gcHJvdG9jb2wsIGFsc28gY2hlY2sgaWYgYSByZXNwb25zZSB3YXMgZm91bmRcbiAgICBpZiAoc3RhdHVzID09PSAyMDAgfHwgc3RhdHVzID09PSAyMDQgfHwgKHN0YXR1cyA9PT0gMCAmJiB4aHIucmVzcG9uc2VUZXh0Lmxlbmd0aCA+IDApKSB7XG4gICAgICAgIC8vIGlmIHRleHQsIGp1c3QgcmV0dXJuIGl0XG4gICAgICAgIGlmICh0aGlzLnhoclR5cGUgPT09IFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLlRFWFQpIHtcbiAgICAgICAgICAgIHRoaXMuZGF0YSA9IHhoci5yZXNwb25zZVRleHQ7XG4gICAgICAgIH1cbiAgICAgICAgLy8gaWYganNvbiwgcGFyc2UgaW50byBqc29uIG9iamVjdFxuICAgICAgICBlbHNlIGlmICh0aGlzLnhoclR5cGUgPT09IFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkpTT04pIHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgdGhpcy5kYXRhID0gSlNPTi5wYXJzZSh4aHIucmVzcG9uc2VUZXh0KTtcbiAgICAgICAgICAgICAgICB0aGlzLmlzSnNvbiA9IHRydWU7XG4gICAgICAgICAgICB9IGNhdGNoKGUpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmVycm9yID0gbmV3IEVycm9yKCdFcnJvciB0cnlpbmcgdG8gcGFyc2UgbG9hZGVkIGpzb246JywgZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8gaWYgeG1sLCBwYXJzZSBpbnRvIGFuIHhtbCBkb2N1bWVudCBvciBkaXYgZWxlbWVudFxuICAgICAgICBlbHNlIGlmICh0aGlzLnhoclR5cGUgPT09IFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkRPQ1VNRU5UKSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGlmICh3aW5kb3cuRE9NUGFyc2VyKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBkb21wYXJzZXIgPSBuZXcgRE9NUGFyc2VyKCk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGF0YSA9IGRvbXBhcnNlci5wYXJzZUZyb21TdHJpbmcoeGhyLnJlc3BvbnNlVGV4dCwgJ3RleHQveG1sJyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB2YXIgZGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgICAgICAgICAgICAgIGRpdi5pbm5lckhUTUwgPSB4aHIucmVzcG9uc2VUZXh0O1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmRhdGEgPSBkaXY7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXMuaXNYbWwgPSB0cnVlO1xuICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgIHRoaXMuZXJyb3IgPSBuZXcgRXJyb3IoJ0Vycm9yIHRyeWluZyB0byBwYXJzZSBsb2FkZWQgeG1sOicsIGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIG90aGVyIHR5cGVzIGp1c3QgcmV0dXJuIHRoZSByZXNwb25zZVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuZGF0YSA9IHhoci5yZXNwb25zZSB8fCB4aHIucmVzcG9uc2VUZXh0O1xuICAgICAgICB9XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICB0aGlzLmVycm9yID0gbmV3IEVycm9yKCdbJyArIHhoci5zdGF0dXMgKyAnXScgKyB4aHIuc3RhdHVzVGV4dCArICc6JyArIHhoci5yZXNwb25zZVVSTCk7XG4gICAgfVxuXG4gICAgdGhpcy5jb21wbGV0ZSgpO1xufTtcblxuZnVuY3Rpb24gcmVxVHlwZSh4aHIpIHtcbiAgICByZXR1cm4geGhyLnRvU3RyaW5nKCkucmVwbGFjZSgnb2JqZWN0ICcsICcnKTtcbn1cblxuLyoqXG4gKiBTZXRzIHRoZSBgY3Jvc3NPcmlnaW5gIHByb3BlcnR5IGZvciB0aGlzIHJlc291cmNlIGJhc2VkIG9uIGlmIHRoZSB1cmxcbiAqIGZvciB0aGlzIHJlc291cmNlIGlzIGNyb3NzLW9yaWdpbi4gSWYgY3Jvc3NPcmlnaW4gd2FzIG1hbnVhbGx5IHNldCwgdGhpc1xuICogZnVuY3Rpb24gZG9lcyBub3RoaW5nLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0gdXJsIHtzdHJpbmd9IFRoZSB1cmwgdG8gdGVzdC5cbiAqIEBwYXJhbSBbbG9jYXRpb249d2luZG93LmxvY2F0aW9uXSB7b2JqZWN0fSBUaGUgbG9jYXRpb24gb2JqZWN0IHRvIHRlc3QgYWdhaW5zdC5cbiAqIEByZXR1cm4ge3N0cmluZ30gVGhlIGNyb3NzT3JpZ2luIHZhbHVlIHRvIHVzZSAob3IgZW1wdHkgc3RyaW5nIGZvciBub25lKS5cbiAqL1xuUmVzb3VyY2UucHJvdG90eXBlLl9kZXRlcm1pbmVDcm9zc09yaWdpbiA9IGZ1bmN0aW9uICh1cmwsIGxvYykge1xuICAgIC8vIGRhdGE6IGFuZCBqYXZhc2NyaXB0OiB1cmxzIGFyZSBjb25zaWRlcmVkIHNhbWUtb3JpZ2luXG4gICAgaWYgKHVybC5pbmRleE9mKCdkYXRhOicpID09PSAwKSB7XG4gICAgICAgIHJldHVybiAnJztcbiAgICB9XG5cbiAgICAvLyBkZWZhdWx0IGlzIHdpbmRvdy5sb2NhdGlvblxuICAgIGxvYyA9IGxvYyB8fCB3aW5kb3cubG9jYXRpb247XG5cbiAgICBpZiAoIXRlbXBBbmNob3IpIHtcbiAgICAgICAgdGVtcEFuY2hvciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2EnKTtcbiAgICB9XG5cbiAgICAvLyBsZXQgdGhlIGJyb3dzZXIgZGV0ZXJtaW5lIHRoZSBmdWxsIGhyZWYgZm9yIHRoZSB1cmwgb2YgdGhpcyByZXNvdXJjZSBhbmQgdGhlblxuICAgIC8vIHBhcnNlIHdpdGggdGhlIG5vZGUgdXJsIGxpYiwgd2UgY2FuJ3QgdXNlIHRoZSBwcm9wZXJ0aWVzIG9mIHRoZSBhbmNob3IgZWxlbWVudFxuICAgIC8vIGJlY2F1c2UgdGhleSBkb24ndCB3b3JrIGluIElFOSA6KFxuICAgIHRlbXBBbmNob3IuaHJlZiA9IHVybDtcbiAgICB1cmwgPSBfdXJsLnBhcnNlKHRlbXBBbmNob3IuaHJlZik7XG5cbiAgICB2YXIgc2FtZVBvcnQgPSAoIXVybC5wb3J0ICYmIGxvYy5wb3J0ID09PSAnJykgfHwgKHVybC5wb3J0ID09PSBsb2MucG9ydCk7XG5cbiAgICAvLyBpZiBjcm9zcyBvcmlnaW5cbiAgICBpZiAodXJsLmhvc3RuYW1lICE9PSBsb2MuaG9zdG5hbWUgfHwgIXNhbWVQb3J0IHx8IHVybC5wcm90b2NvbCAhPT0gbG9jLnByb3RvY29sKSB7XG4gICAgICAgIHJldHVybiAnYW5vbnltb3VzJztcbiAgICB9XG5cbiAgICByZXR1cm4gJyc7XG59O1xuXG4vKipcbiAqIERldGVybWluZXMgdGhlIHJlc3BvbnNlVHlwZSBvZiBhbiBYSFIgcmVxdWVzdCBiYXNlZCBvbiB0aGUgZXh0ZW5zaW9uIG9mIHRoZVxuICogcmVzb3VyY2UgYmVpbmcgbG9hZGVkLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcmV0dXJuIHtSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRX0gVGhlIHJlc3BvbnNlVHlwZSB0byB1c2UuXG4gKi9cblJlc291cmNlLnByb3RvdHlwZS5fZGV0ZXJtaW5lWGhyVHlwZSA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gUmVzb3VyY2UuX3hoclR5cGVNYXBbdGhpcy5fZ2V0RXh0ZW5zaW9uKCldIHx8IFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLlRFWFQ7XG59O1xuXG5SZXNvdXJjZS5wcm90b3R5cGUuX2RldGVybWluZUxvYWRUeXBlID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBSZXNvdXJjZS5fbG9hZFR5cGVNYXBbdGhpcy5fZ2V0RXh0ZW5zaW9uKCldIHx8IFJlc291cmNlLkxPQURfVFlQRS5YSFI7XG59O1xuXG5SZXNvdXJjZS5wcm90b3R5cGUuX2dldEV4dGVuc2lvbiA9IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgdXJsID0gdGhpcy51cmwsXG4gICAgICAgIGV4dDtcblxuICAgIGlmICh0aGlzLmlzRGF0YVVybCkge1xuICAgICAgICB2YXIgc2xhc2hJbmRleCA9IHVybC5pbmRleE9mKCcvJyk7XG4gICAgICAgIGV4dCA9IHVybC5zdWJzdHJpbmcoc2xhc2hJbmRleCArIDEsIHVybC5pbmRleE9mKCc7Jywgc2xhc2hJbmRleCkpO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgdmFyIHF1ZXJ5U3RhcnQgPSB1cmwuaW5kZXhPZignPycpO1xuICAgICAgICBpZiAocXVlcnlTdGFydCAhPT0gLTEpIHtcbiAgICAgICAgICAgIHVybCA9IHVybC5zdWJzdHJpbmcoMCwgcXVlcnlTdGFydCk7XG4gICAgICAgIH1cblxuICAgICAgICBleHQgPSB1cmwuc3Vic3RyaW5nKHVybC5sYXN0SW5kZXhPZignLicpICsgMSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGV4dDtcbn07XG5cbi8qKlxuICogRGV0ZXJtaW5lcyB0aGUgbWltZSB0eXBlIG9mIGFuIFhIUiByZXF1ZXN0IGJhc2VkIG9uIHRoZSByZXNwb25zZVR5cGUgb2ZcbiAqIHJlc291cmNlIGJlaW5nIGxvYWRlZC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHJldHVybiB7c3RyaW5nfSBUaGUgbWltZSB0eXBlIHRvIHVzZS5cbiAqL1xuUmVzb3VyY2UucHJvdG90eXBlLl9nZXRNaW1lRnJvbVhoclR5cGUgPSBmdW5jdGlvbiAodHlwZSkge1xuICAgIHN3aXRjaCh0eXBlKSB7XG4gICAgICAgIGNhc2UgUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuQlVGRkVSOlxuICAgICAgICAgICAgcmV0dXJuICdhcHBsaWNhdGlvbi9vY3RldC1iaW5hcnknO1xuXG4gICAgICAgIGNhc2UgUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuQkxPQjpcbiAgICAgICAgICAgIHJldHVybiAnYXBwbGljYXRpb24vYmxvYic7XG5cbiAgICAgICAgY2FzZSBSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRS5ET0NVTUVOVDpcbiAgICAgICAgICAgIHJldHVybiAnYXBwbGljYXRpb24veG1sJztcblxuICAgICAgICBjYXNlIFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkpTT046XG4gICAgICAgICAgICByZXR1cm4gJ2FwcGxpY2F0aW9uL2pzb24nO1xuXG4gICAgICAgIGNhc2UgUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuREVGQVVMVDpcbiAgICAgICAgY2FzZSBSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRS5URVhUOlxuICAgICAgICAgICAgLyogZmFsbHMgdGhyb3VnaCAqL1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgcmV0dXJuICd0ZXh0L3BsYWluJztcblxuICAgIH1cbn07XG5cbi8qKlxuICogVGhlIHR5cGVzIG9mIGxvYWRpbmcgYSByZXNvdXJjZSBjYW4gdXNlLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBjb25zdGFudFxuICogQHByb3BlcnR5IHtvYmplY3R9IExPQURfVFlQRVxuICogQHByb3BlcnR5IHtudW1iZXJ9IExPQURfVFlQRS5YSFIgLSBVc2VzIFhNTEh0dHBSZXF1ZXN0IHRvIGxvYWQgdGhlIHJlc291cmNlLlxuICogQHByb3BlcnR5IHtudW1iZXJ9IExPQURfVFlQRS5JTUFHRSAtIFVzZXMgYW4gYEltYWdlYCBvYmplY3QgdG8gbG9hZCB0aGUgcmVzb3VyY2UuXG4gKiBAcHJvcGVydHkge251bWJlcn0gTE9BRF9UWVBFLkFVRElPIC0gVXNlcyBhbiBgQXVkaW9gIG9iamVjdCB0byBsb2FkIHRoZSByZXNvdXJjZS5cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBMT0FEX1RZUEUuVklERU8gLSBVc2VzIGEgYFZpZGVvYCBvYmplY3QgdG8gbG9hZCB0aGUgcmVzb3VyY2UuXG4gKi9cblJlc291cmNlLkxPQURfVFlQRSA9IHtcbiAgICBYSFI6ICAgIDEsXG4gICAgSU1BR0U6ICAyLFxuICAgIEFVRElPOiAgMyxcbiAgICBWSURFTzogIDRcbn07XG5cbi8qKlxuICogVGhlIFhIUiByZWFkeSBzdGF0ZXMsIHVzZWQgaW50ZXJuYWxseS5cbiAqXG4gKiBAc3RhdGljXG4gKiBAY29uc3RhbnRcbiAqIEBwcm9wZXJ0eSB7b2JqZWN0fSBYSFJfUkVBRFlfU1RBVEVcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBYSFJfUkVBRFlfU1RBVEUuVU5TRU5UIC0gb3BlbigpaGFzIG5vdCBiZWVuIGNhbGxlZCB5ZXQuXG4gKiBAcHJvcGVydHkge251bWJlcn0gWEhSX1JFQURZX1NUQVRFLk9QRU5FRCAtIHNlbmQoKWhhcyBub3QgYmVlbiBjYWxsZWQgeWV0LlxuICogQHByb3BlcnR5IHtudW1iZXJ9IFhIUl9SRUFEWV9TVEFURS5IRUFERVJTX1JFQ0VJVkVEIC0gc2VuZCgpIGhhcyBiZWVuIGNhbGxlZCwgYW5kIGhlYWRlcnMgYW5kIHN0YXR1cyBhcmUgYXZhaWxhYmxlLlxuICogQHByb3BlcnR5IHtudW1iZXJ9IFhIUl9SRUFEWV9TVEFURS5MT0FESU5HIC0gRG93bmxvYWRpbmc7IHJlc3BvbnNlVGV4dCBob2xkcyBwYXJ0aWFsIGRhdGEuXG4gKiBAcHJvcGVydHkge251bWJlcn0gWEhSX1JFQURZX1NUQVRFLkRPTkUgLSBUaGUgb3BlcmF0aW9uIGlzIGNvbXBsZXRlLlxuICovXG5SZXNvdXJjZS5YSFJfUkVBRFlfU1RBVEUgPSB7XG4gICAgVU5TRU5UOiAwLFxuICAgIE9QRU5FRDogMSxcbiAgICBIRUFERVJTX1JFQ0VJVkVEOiAyLFxuICAgIExPQURJTkc6IDMsXG4gICAgRE9ORTogNFxufTtcblxuLyoqXG4gKiBUaGUgWEhSIHJlYWR5IHN0YXRlcywgdXNlZCBpbnRlcm5hbGx5LlxuICpcbiAqIEBzdGF0aWNcbiAqIEBjb25zdGFudFxuICogQHByb3BlcnR5IHtvYmplY3R9IFhIUl9SRVNQT05TRV9UWVBFXG4gKiBAcHJvcGVydHkge3N0cmluZ30gWEhSX1JFU1BPTlNFX1RZUEUuREVGQVVMVCAtIGRlZmF1bHRzIHRvIHRleHRcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBYSFJfUkVTUE9OU0VfVFlQRS5CVUZGRVIgLSBBcnJheUJ1ZmZlclxuICogQHByb3BlcnR5IHtzdHJpbmd9IFhIUl9SRVNQT05TRV9UWVBFLkJMT0IgLSBCbG9iXG4gKiBAcHJvcGVydHkge3N0cmluZ30gWEhSX1JFU1BPTlNFX1RZUEUuRE9DVU1FTlQgLSBEb2N1bWVudFxuICogQHByb3BlcnR5IHtzdHJpbmd9IFhIUl9SRVNQT05TRV9UWVBFLkpTT04gLSBPYmplY3RcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBYSFJfUkVTUE9OU0VfVFlQRS5URVhUIC0gU3RyaW5nXG4gKi9cblJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFID0ge1xuICAgIERFRkFVTFQ6ICAgICd0ZXh0JyxcbiAgICBCVUZGRVI6ICAgICAnYXJyYXlidWZmZXInLFxuICAgIEJMT0I6ICAgICAgICdibG9iJyxcbiAgICBET0NVTUVOVDogICAnZG9jdW1lbnQnLFxuICAgIEpTT046ICAgICAgICdqc29uJyxcbiAgICBURVhUOiAgICAgICAndGV4dCdcbn07XG5cblJlc291cmNlLl9sb2FkVHlwZU1hcCA9IHtcbiAgICAnZ2lmJzogICAgICBSZXNvdXJjZS5MT0FEX1RZUEUuSU1BR0UsXG4gICAgJ3BuZyc6ICAgICAgUmVzb3VyY2UuTE9BRF9UWVBFLklNQUdFLFxuICAgICdibXAnOiAgICAgIFJlc291cmNlLkxPQURfVFlQRS5JTUFHRSxcbiAgICAnanBnJzogICAgICBSZXNvdXJjZS5MT0FEX1RZUEUuSU1BR0UsXG4gICAgJ2pwZWcnOiAgICAgUmVzb3VyY2UuTE9BRF9UWVBFLklNQUdFLFxuICAgICd0aWYnOiAgICAgIFJlc291cmNlLkxPQURfVFlQRS5JTUFHRSxcbiAgICAndGlmZic6ICAgICBSZXNvdXJjZS5MT0FEX1RZUEUuSU1BR0UsXG4gICAgJ3dlYnAnOiAgICAgUmVzb3VyY2UuTE9BRF9UWVBFLklNQUdFLFxuICAgICd0Z2EnOiAgICAgIFJlc291cmNlLkxPQURfVFlQRS5JTUFHRVxufTtcblxuUmVzb3VyY2UuX3hoclR5cGVNYXAgPSB7XG4gICAgLy8geG1sXG4gICAgJ3hodG1sJzogICAgUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuRE9DVU1FTlQsXG4gICAgJ2h0bWwnOiAgICAgUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuRE9DVU1FTlQsXG4gICAgJ2h0bSc6ICAgICAgUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuRE9DVU1FTlQsXG4gICAgJ3htbCc6ICAgICAgUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuRE9DVU1FTlQsXG4gICAgJ3RteCc6ICAgICAgUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuRE9DVU1FTlQsXG4gICAgJ3RzeCc6ICAgICAgUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuRE9DVU1FTlQsXG4gICAgJ3N2Zyc6ICAgICAgUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuRE9DVU1FTlQsXG5cbiAgICAvLyBpbWFnZXNcbiAgICAnZ2lmJzogICAgICBSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRS5CTE9CLFxuICAgICdwbmcnOiAgICAgIFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkJMT0IsXG4gICAgJ2JtcCc6ICAgICAgUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuQkxPQixcbiAgICAnanBnJzogICAgICBSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRS5CTE9CLFxuICAgICdqcGVnJzogICAgIFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkJMT0IsXG4gICAgJ3RpZic6ICAgICAgUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuQkxPQixcbiAgICAndGlmZic6ICAgICBSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRS5CTE9CLFxuICAgICd3ZWJwJzogICAgIFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkJMT0IsXG4gICAgJ3RnYSc6ICAgICAgUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuQkxPQixcblxuICAgIC8vIGpzb25cbiAgICAnanNvbic6ICAgICBSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRS5KU09OLFxuXG4gICAgLy8gdGV4dFxuICAgICd0ZXh0JzogICAgIFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLlRFWFQsXG4gICAgJ3R4dCc6ICAgICAgUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuVEVYVFxufTtcblxuLyoqXG4gKiBTZXRzIHRoZSBsb2FkIHR5cGUgdG8gYmUgdXNlZCBmb3IgYSBzcGVjaWZpYyBleHRlbnNpb24uXG4gKlxuICogQHN0YXRpY1xuICogQHBhcmFtIGV4dG5hbWUge3N0cmluZ30gVGhlIGV4dGVuc2lvbiB0byBzZXQgdGhlIHR5cGUgZm9yLCBlLmcuIFwicG5nXCIgb3IgXCJmbnRcIlxuICogQHBhcmFtIGxvYWRUeXBlIHtSZXNvdXJjZS5MT0FEX1RZUEV9IFRoZSBsb2FkIHR5cGUgdG8gc2V0IGl0IHRvLlxuICovXG5SZXNvdXJjZS5zZXRFeHRlbnNpb25Mb2FkVHlwZSA9IGZ1bmN0aW9uIChleHRuYW1lLCBsb2FkVHlwZSkge1xuICAgIHNldEV4dE1hcChSZXNvdXJjZS5fbG9hZFR5cGVNYXAsIGV4dG5hbWUsIGxvYWRUeXBlKTtcbn07XG5cbi8qKlxuICogU2V0cyB0aGUgbG9hZCB0eXBlIHRvIGJlIHVzZWQgZm9yIGEgc3BlY2lmaWMgZXh0ZW5zaW9uLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBwYXJhbSBleHRuYW1lIHtzdHJpbmd9IFRoZSBleHRlbnNpb24gdG8gc2V0IHRoZSB0eXBlIGZvciwgZS5nLiBcInBuZ1wiIG9yIFwiZm50XCJcbiAqIEBwYXJhbSB4aHJUeXBlIHtSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRX0gVGhlIHhociB0eXBlIHRvIHNldCBpdCB0by5cbiAqL1xuUmVzb3VyY2Uuc2V0RXh0ZW5zaW9uWGhyVHlwZSA9IGZ1bmN0aW9uIChleHRuYW1lLCB4aHJUeXBlKSB7XG4gICAgc2V0RXh0TWFwKFJlc291cmNlLl94aHJUeXBlTWFwLCBleHRuYW1lLCB4aHJUeXBlKTtcbn07XG5cbmZ1bmN0aW9uIHNldEV4dE1hcChtYXAsIGV4dG5hbWUsIHZhbCkge1xuICAgIGlmIChleHRuYW1lICYmIGV4dG5hbWUuaW5kZXhPZignLicpID09PSAwKSB7XG4gICAgICAgIGV4dG5hbWUgPSBleHRuYW1lLnN1YnN0cmluZygxKTtcbiAgICB9XG5cbiAgICBpZiAoIWV4dG5hbWUpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIG1hcFtleHRuYW1lXSA9IHZhbDtcbn1cbiIsIm1vZHVsZS5leHBvcnRzID0ge1xuXG4gICAgLy8gcHJpdmF0ZSBwcm9wZXJ0eVxuICAgIF9rZXlTdHI6IFwiQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkrLz1cIixcblxuICAgIGVuY29kZUJpbmFyeTogZnVuY3Rpb24gKGlucHV0KSB7XG4gICAgICAgIHZhciBvdXRwdXQgPSBcIlwiO1xuICAgICAgICB2YXIgYnl0ZWJ1ZmZlcjtcbiAgICAgICAgdmFyIGVuY29kZWRDaGFySW5kZXhlcyA9IG5ldyBBcnJheSg0KTtcbiAgICAgICAgdmFyIGlueCA9IDA7XG4gICAgICAgIHZhciBqbnggPSAwO1xuICAgICAgICB2YXIgcGFkZGluZ0J5dGVzID0gMDtcblxuICAgICAgICB3aGlsZSAoaW54IDwgaW5wdXQubGVuZ3RoKSB7XG4gICAgICAgICAgICAvLyBGaWxsIGJ5dGUgYnVmZmVyIGFycmF5XG4gICAgICAgICAgICBieXRlYnVmZmVyID0gbmV3IEFycmF5KDMpO1xuICAgICAgICAgICAgZm9yIChqbnggPSAwOyBqbnggPCBieXRlYnVmZmVyLmxlbmd0aDsgam54KyspIHtcbiAgICAgICAgICAgICAgICBpZiAoaW54IDwgaW5wdXQubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIHRocm93IGF3YXkgaGlnaC1vcmRlciBieXRlLCBhcyBkb2N1bWVudGVkIGF0OlxuICAgICAgICAgICAgICAgICAgICAvLyBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9Fbi9Vc2luZ19YTUxIdHRwUmVxdWVzdCNIYW5kbGluZ19iaW5hcnlfZGF0YVxuICAgICAgICAgICAgICAgICAgICBieXRlYnVmZmVyW2pueF0gPSBpbnB1dC5jaGFyQ29kZUF0KGlueCsrKSAmIDB4ZmY7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBieXRlYnVmZmVyW2pueF0gPSAwO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gR2V0IGVhY2ggZW5jb2RlZCBjaGFyYWN0ZXIsIDYgYml0cyBhdCBhIHRpbWVcbiAgICAgICAgICAgIC8vIGluZGV4IDE6IGZpcnN0IDYgYml0c1xuICAgICAgICAgICAgZW5jb2RlZENoYXJJbmRleGVzWzBdID0gYnl0ZWJ1ZmZlclswXSA+PiAyO1xuICAgICAgICAgICAgLy8gaW5kZXggMjogc2Vjb25kIDYgYml0cyAoMiBsZWFzdCBzaWduaWZpY2FudCBiaXRzIGZyb20gaW5wdXQgYnl0ZSAxICsgNCBtb3N0IHNpZ25pZmljYW50IGJpdHMgZnJvbSBieXRlIDIpXG4gICAgICAgICAgICBlbmNvZGVkQ2hhckluZGV4ZXNbMV0gPSAoKGJ5dGVidWZmZXJbMF0gJiAweDMpIDw8IDQpIHwgKGJ5dGVidWZmZXJbMV0gPj4gNCk7XG4gICAgICAgICAgICAvLyBpbmRleCAzOiB0aGlyZCA2IGJpdHMgKDQgbGVhc3Qgc2lnbmlmaWNhbnQgYml0cyBmcm9tIGlucHV0IGJ5dGUgMiArIDIgbW9zdCBzaWduaWZpY2FudCBiaXRzIGZyb20gYnl0ZSAzKVxuICAgICAgICAgICAgZW5jb2RlZENoYXJJbmRleGVzWzJdID0gKChieXRlYnVmZmVyWzFdICYgMHgwZikgPDwgMikgfCAoYnl0ZWJ1ZmZlclsyXSA+PiA2KTtcbiAgICAgICAgICAgIC8vIGluZGV4IDM6IGZvcnRoIDYgYml0cyAoNiBsZWFzdCBzaWduaWZpY2FudCBiaXRzIGZyb20gaW5wdXQgYnl0ZSAzKVxuICAgICAgICAgICAgZW5jb2RlZENoYXJJbmRleGVzWzNdID0gYnl0ZWJ1ZmZlclsyXSAmIDB4M2Y7XG5cbiAgICAgICAgICAgIC8vIERldGVybWluZSB3aGV0aGVyIHBhZGRpbmcgaGFwcGVuZWQsIGFuZCBhZGp1c3QgYWNjb3JkaW5nbHlcbiAgICAgICAgICAgIHBhZGRpbmdCeXRlcyA9IGlueCAtIChpbnB1dC5sZW5ndGggLSAxKTtcbiAgICAgICAgICAgIHN3aXRjaCAocGFkZGluZ0J5dGVzKSB7XG4gICAgICAgICAgICAgICAgY2FzZSAyOlxuICAgICAgICAgICAgICAgICAgICAvLyBTZXQgbGFzdCAyIGNoYXJhY3RlcnMgdG8gcGFkZGluZyBjaGFyXG4gICAgICAgICAgICAgICAgICAgIGVuY29kZWRDaGFySW5kZXhlc1szXSA9IDY0O1xuICAgICAgICAgICAgICAgICAgICBlbmNvZGVkQ2hhckluZGV4ZXNbMl0gPSA2NDtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICAgICAgICAgIC8vIFNldCBsYXN0IGNoYXJhY3RlciB0byBwYWRkaW5nIGNoYXJcbiAgICAgICAgICAgICAgICAgICAgZW5jb2RlZENoYXJJbmRleGVzWzNdID0gNjQ7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7IC8vIE5vIHBhZGRpbmcgLSBwcm9jZWVkXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIE5vdyB3ZSB3aWxsIGdyYWIgZWFjaCBhcHByb3ByaWF0ZSBjaGFyYWN0ZXIgb3V0IG9mIG91ciBrZXlzdHJpbmdcbiAgICAgICAgICAgIC8vIGJhc2VkIG9uIG91ciBpbmRleCBhcnJheSBhbmQgYXBwZW5kIGl0IHRvIHRoZSBvdXRwdXQgc3RyaW5nXG4gICAgICAgICAgICBmb3IgKGpueCA9IDA7IGpueCA8IGVuY29kZWRDaGFySW5kZXhlcy5sZW5ndGg7IGpueCsrKSB7XG4gICAgICAgICAgICAgICAgb3V0cHV0ICs9IHRoaXMuX2tleVN0ci5jaGFyQXQoZW5jb2RlZENoYXJJbmRleGVzW2pueF0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBvdXRwdXQ7XG4gICAgfVxufTtcbiIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9Mb2FkZXInKTtcblxubW9kdWxlLmV4cG9ydHMuUmVzb3VyY2UgPSByZXF1aXJlKCcuL1Jlc291cmNlJyk7XG5cbm1vZHVsZS5leHBvcnRzLm1pZGRsZXdhcmUgPSB7XG4gICAgY2FjaGluZzoge1xuICAgICAgICBtZW1vcnk6IHJlcXVpcmUoJy4vbWlkZGxld2FyZXMvY2FjaGluZy9tZW1vcnknKVxuICAgIH0sXG4gICAgcGFyc2luZzoge1xuICAgICAgICBibG9iOiByZXF1aXJlKCcuL21pZGRsZXdhcmVzL3BhcnNpbmcvYmxvYicpXG4gICAgfVxufTtcbiIsIi8vIGEgc2ltcGxlIGluLW1lbW9yeSBjYWNoZSBmb3IgcmVzb3VyY2VzXG52YXIgY2FjaGUgPSB7fTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChyZXNvdXJjZSwgbmV4dCkge1xuICAgICAgICAvLyBpZiBjYWNoZWQsIHRoZW4gc2V0IGRhdGEgYW5kIGNvbXBsZXRlIHRoZSByZXNvdXJjZVxuICAgICAgICBpZiAoY2FjaGVbcmVzb3VyY2UudXJsXSkge1xuICAgICAgICAgICAgcmVzb3VyY2UuZGF0YSA9IGNhY2hlW3Jlc291cmNlLnVybF07XG4gICAgICAgICAgICByZXNvdXJjZS5jb21wbGV0ZSgpO1xuICAgICAgICB9XG4gICAgICAgIC8vIGlmIG5vdCBjYWNoZWQsIHdhaXQgZm9yIGNvbXBsZXRlIGFuZCBzdG9yZSBpdCBpbiB0aGUgY2FjaGUuXG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcmVzb3VyY2Uub25jZSgnY29tcGxldGUnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICBjYWNoZVt0aGlzLnVybF0gPSB0aGlzLmRhdGE7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBcbiAgICAgICAgbmV4dCgpO1xuICAgIH07XG59O1xuIiwidmFyIFJlc291cmNlID0gcmVxdWlyZSgnLi4vLi4vUmVzb3VyY2UnKSxcbiAgICBiNjQgPSByZXF1aXJlKCcuLi8uLi9iNjQnKTtcblxud2luZG93LlVSTCA9IHdpbmRvdy5VUkwgfHwgd2luZG93LndlYmtpdFVSTDtcblxuLy8gYSBtaWRkbGV3YXJlIGZvciB0cmFuc2Zvcm1pbmcgWEhSIGxvYWRlZCBCbG9icyBpbnRvIG1vcmUgdXNlZnVsIG9iamVjdHNcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChyZXNvdXJjZSwgbmV4dCkge1xuICAgICAgICBpZiAoIXJlc291cmNlLmRhdGEpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXh0KCk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBpZiB0aGlzIHdhcyBhbiBYSFIgbG9hZCBvZiBhIGJsb2JcbiAgICAgICAgaWYgKHJlc291cmNlLnhociAmJiByZXNvdXJjZS54aHJUeXBlID09PSBSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRS5CTE9CKSB7XG4gICAgICAgICAgICAvLyBpZiB0aGVyZSBpcyBubyBibG9iIHN1cHBvcnQgd2UgcHJvYmFibHkgZ290IGEgYmluYXJ5IHN0cmluZyBiYWNrXG4gICAgICAgICAgICBpZiAoIXdpbmRvdy5CbG9iIHx8IHR5cGVvZiByZXNvdXJjZS5kYXRhID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgICAgIHZhciB0eXBlID0gcmVzb3VyY2UueGhyLmdldFJlc3BvbnNlSGVhZGVyKCdjb250ZW50LXR5cGUnKTtcblxuICAgICAgICAgICAgICAgIC8vIHRoaXMgaXMgYW4gaW1hZ2UsIGNvbnZlcnQgdGhlIGJpbmFyeSBzdHJpbmcgaW50byBhIGRhdGEgdXJsXG4gICAgICAgICAgICAgICAgaWYgKHR5cGUgJiYgdHlwZS5pbmRleE9mKCdpbWFnZScpID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc291cmNlLmRhdGEgPSBuZXcgSW1hZ2UoKTtcbiAgICAgICAgICAgICAgICAgICAgcmVzb3VyY2UuZGF0YS5zcmMgPSAnZGF0YTonICsgdHlwZSArICc7YmFzZTY0LCcgKyBiNjQuZW5jb2RlQmluYXJ5KHJlc291cmNlLnhoci5yZXNwb25zZVRleHQpO1xuXG4gICAgICAgICAgICAgICAgICAgIHJlc291cmNlLmlzSW1hZ2UgPSB0cnVlO1xuXG4gICAgICAgICAgICAgICAgICAgIC8vIHdhaXQgdW50aWwgdGhlIGltYWdlIGxvYWRzIGFuZCB0aGVuIGNhbGxiYWNrXG4gICAgICAgICAgICAgICAgICAgIHJlc291cmNlLmRhdGEub25sb2FkID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVzb3VyY2UuZGF0YS5vbmxvYWQgPSBudWxsO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBuZXh0KCk7XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gaWYgY29udGVudCB0eXBlIHNheXMgdGhpcyBpcyBhbiBpbWFnZSwgdGhlbiB3ZSBzaG91bGQgdHJhbnNmb3JtIHRoZSBibG9iIGludG8gYW4gSW1hZ2Ugb2JqZWN0XG4gICAgICAgICAgICBlbHNlIGlmIChyZXNvdXJjZS5kYXRhLnR5cGUuaW5kZXhPZignaW1hZ2UnKSA9PT0gMCkge1xuICAgICAgICAgICAgICAgIHZhciBzcmMgPSBVUkwuY3JlYXRlT2JqZWN0VVJMKHJlc291cmNlLmRhdGEpO1xuXG4gICAgICAgICAgICAgICAgcmVzb3VyY2UuYmxvYiA9IHJlc291cmNlLmRhdGE7XG4gICAgICAgICAgICAgICAgcmVzb3VyY2UuZGF0YSA9IG5ldyBJbWFnZSgpO1xuICAgICAgICAgICAgICAgIHJlc291cmNlLmRhdGEuc3JjID0gc3JjO1xuXG4gICAgICAgICAgICAgICAgcmVzb3VyY2UuaXNJbWFnZSA9IHRydWU7XG5cbiAgICAgICAgICAgICAgICAvLyBjbGVhbnVwIHRoZSBubyBsb25nZXIgdXNlZCBibG9iIGFmdGVyIHRoZSBpbWFnZSBsb2Fkc1xuICAgICAgICAgICAgICAgIHJlc291cmNlLmRhdGEub25sb2FkID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICBVUkwucmV2b2tlT2JqZWN0VVJMKHNyYyk7XG4gICAgICAgICAgICAgICAgICAgIHJlc291cmNlLmRhdGEub25sb2FkID0gbnVsbDtcblxuICAgICAgICAgICAgICAgICAgICBuZXh0KCk7XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIG5leHQoKTtcbiAgICAgICAgfVxuICAgIH07XG59O1xuIiwibW9kdWxlLmV4cG9ydHM9e1xuICBcIm5hbWVcIjogXCJwaXhpLmpzXCIsXG4gIFwidmVyc2lvblwiOiBcIjMuMC4xMC1kZXZcIixcbiAgXCJkZXNjcmlwdGlvblwiOiBcIlBpeGkuanMgaXMgYSBmYXN0IGxpZ2h0d2VpZ2h0IDJEIGxpYnJhcnkgdGhhdCB3b3JrcyBhY3Jvc3MgYWxsIGRldmljZXMuXCIsXG4gIFwiYXV0aG9yXCI6IFwiTWF0IEdyb3Zlc1wiLFxuICBcImNvbnRyaWJ1dG9yc1wiOiBbXG4gICAgXCJDaGFkIEVuZ2xlciA8Y2hhZEBwYW50aGVyZGV2LmNvbT5cIixcbiAgICBcIlJpY2hhcmQgRGF2ZXkgPHJkYXZleUBnbWFpbC5jb20+XCJcbiAgXSxcbiAgXCJtYWluXCI6IFwiLi9zcmMvaW5kZXguanNcIixcbiAgXCJob21lcGFnZVwiOiBcImh0dHA6Ly9nb29kYm95ZGlnaXRhbC5jb20vXCIsXG4gIFwiYnVnc1wiOiBcImh0dHBzOi8vZ2l0aHViLmNvbS9waXhpanMvcGl4aS5qcy9pc3N1ZXNcIixcbiAgXCJsaWNlbnNlXCI6IFwiTUlUXCIsXG4gIFwicmVwb3NpdG9yeVwiOiB7XG4gICAgXCJ0eXBlXCI6IFwiZ2l0XCIsXG4gICAgXCJ1cmxcIjogXCJodHRwczovL2dpdGh1Yi5jb20vcGl4aWpzL3BpeGkuanMuZ2l0XCJcbiAgfSxcbiAgXCJzY3JpcHRzXCI6IHtcbiAgICBcInN0YXJ0XCI6IFwiZ3VscCAmJiBndWxwIHdhdGNoXCIsXG4gICAgXCJ0ZXN0XCI6IFwiZ3VscCAmJiB0ZXN0ZW0gY2lcIixcbiAgICBcImJ1aWxkXCI6IFwiZ3VscFwiLFxuICAgIFwiZG9jc1wiOiBcImpzZG9jIC1jIC4vZ3VscC91dGlsL2pzZG9jLmNvbmYuanNvbiAtUiBSRUFETUUubWRcIlxuICB9LFxuICBcImZpbGVzXCI6IFtcbiAgICBcImJpbi9cIixcbiAgICBcInNyYy9cIixcbiAgICBcIkNPTlRSSUJVVElORy5tZFwiLFxuICAgIFwiTElDRU5TRVwiLFxuICAgIFwicGFja2FnZS5qc29uXCIsXG4gICAgXCJSRUFETUUubWRcIlxuICBdLFxuICBcImRlcGVuZGVuY2llc1wiOiB7XG4gICAgXCJhc3luY1wiOiBcIl4xLjUuMFwiLFxuICAgIFwiYnJmc1wiOiBcIl4xLjQuMVwiLFxuICAgIFwiZWFyY3V0XCI6IFwiXjIuMC43XCIsXG4gICAgXCJldmVudGVtaXR0ZXIzXCI6IFwiXjEuMS4xXCIsXG4gICAgXCJvYmplY3QtYXNzaWduXCI6IFwiXjQuMC4xXCIsXG4gICAgXCJwaXhpLWdsLWNvcmVcIjogXCJnaXQraHR0cHM6Ly9naXRodWIuY29tL0dvb2RCb3lEaWdpdGFsL3BpeGktZ2wtY29yZS5naXRcIixcbiAgICBcInJlc291cmNlLWxvYWRlclwiOiBcIl4xLjYuNFwiXG4gIH0sXG4gIFwiZGV2RGVwZW5kZW5jaWVzXCI6IHtcbiAgICBcImJyb3dzZXJpZnlcIjogXCJeMTEuMS4wXCIsXG4gICAgXCJjaGFpXCI6IFwiXjMuMi4wXCIsXG4gICAgXCJkZWxcIjogXCJeMi4wLjJcIixcbiAgICBcImd1bHBcIjogXCJeMy45LjBcIixcbiAgICBcImd1bHAtY2FjaGVkXCI6IFwiXjEuMS4wXCIsXG4gICAgXCJndWxwLWNvbmNhdFwiOiBcIl4yLjYuMFwiLFxuICAgIFwiZ3VscC1kZWJ1Z1wiOiBcIl4yLjEuMFwiLFxuICAgIFwiZ3VscC1oZWFkZXJcIjogXCJeMS43LjFcIixcbiAgICBcImd1bHAtanNoaW50XCI6IFwiXjEuMTEuMlwiLFxuICAgIFwiZ3VscC1taXJyb3JcIjogXCJeMC40LjBcIixcbiAgICBcImd1bHAtcGx1bWJlclwiOiBcIl4xLjAuMVwiLFxuICAgIFwiZ3VscC1yZW5hbWVcIjogXCJeMS4yLjJcIixcbiAgICBcImd1bHAtc291cmNlbWFwc1wiOiBcIl4xLjUuMlwiLFxuICAgIFwiZ3VscC11Z2xpZnlcIjogXCJeMS40LjFcIixcbiAgICBcImd1bHAtdXRpbFwiOiBcIl4zLjAuNlwiLFxuICAgIFwiamFndWFyanMtanNkb2NcIjogXCJnaXQraHR0cHM6Ly9naXRodWIuY29tL2Rhdmlkc2hpbWpzL2phZ3VhcmpzLWpzZG9jLmdpdFwiLFxuICAgIFwianNkb2NcIjogXCJeMy4zLjJcIixcbiAgICBcImpzaGludC1zdW1tYXJ5XCI6IFwiXjAuNC4wXCIsXG4gICAgXCJtaW5pbWlzdFwiOiBcIl4xLjIuMFwiLFxuICAgIFwibW9jaGFcIjogXCJeMi4zLjJcIixcbiAgICBcInJlcXVpcmUtZGlyXCI6IFwiXjAuMy4wXCIsXG4gICAgXCJydW4tc2VxdWVuY2VcIjogXCJeMS4xLjJcIixcbiAgICBcInRlc3RlbVwiOiBcIl4wLjkuNFwiLFxuICAgIFwidmlueWwtYnVmZmVyXCI6IFwiXjEuMC4wXCIsXG4gICAgXCJ2aW55bC1zb3VyY2Utc3RyZWFtXCI6IFwiXjEuMS4wXCIsXG4gICAgXCJ3YXRjaGlmeVwiOiBcIl4zLjQuMFwiXG4gIH0sXG4gIFwiYnJvd3NlcmlmeVwiOiB7XG4gICAgXCJ0cmFuc2Zvcm1cIjogW1xuICAgICAgXCJicmZzXCJcbiAgICBdXG4gIH1cbn1cbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vY29yZScpO1xuXG4vLyBhZGQgc29tZSBleHRyYSB2YXJpYWJsZXMgdG8gdGhlIGNvbnRhaW5lci4uXG5PYmplY3QuYXNzaWduKFxuICAgIGNvcmUuRGlzcGxheU9iamVjdC5wcm90b3R5cGUsXG4gICAgcmVxdWlyZSgnLi9hY2Nlc3NpYmxlVGFyZ2V0Jylcbik7XG5cblxuLyoqXG4gKiBUaGUgQWNjZXNzaWJpbGl0eSBtYW5hZ2VyIHJlYWNyZWF0ZXMgdGhlIGFiaWxpdHkgdG8gdGFiIGFuZCBhbmQgaGF2ZSBjb250ZW50IHJlYWQgYnkgc2NyZWVuIHJlYWRlcnMuIFRoaXMgaXMgdmVyeSBpbXBvcnRhbnQgYXMgaXQgY2FuIHBvc3NpYmx5IGhlbHAgcGVvcGxlIHdpdGggZGlzYWJpbGl0aWVzIGFjY2VzcyBwaXhpIGNvbnRlbnQuXG4gKiBNdWNoIGxpa2UgaW50ZXJhY3Rpb24gYW55IERpc3BsYXlPYmplY3QgY2FuIGJlIG1hZGUgYWNjZXNzaWJsZS4gVGhpcyBtYW5hZ2VyIHdpbGwgbWFwIHRoZSBldmVudHMgYXMgaWYgdGhlIG1vdXNlIHdhcyBiZWluZyB1c2VkLCBtaW5pbWl6aW5nIHRoZSBlZmZlcm90IHJlcXVpcmVkIHRvIGltcGxlbWVudC5cbiAqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuQ2FudmFzUmVuZGVyZXJ8UElYSS5XZWJHTFJlbmRlcmVyfSBBIHJlZmVyZW5jZSB0byB0aGUgY3VycmVudCByZW5kZXJlclxuICovXG5mdW5jdGlvbiBBY2Nlc3NpYmlsaXR5TWFuYWdlcihyZW5kZXJlcilcbntcblx0Ly8gZmlyc3Qgd2UgY3JlYXRlIGEgZGl2IHRoYXQgd2lsbCBzaXQgb3ZlciB0aGUgcGl4aSBlbGVtZW50LiBUaGlzIGlzIHdoZXJlIHRoZSBkaXYgb3ZlcmxheXMgd2lsbCBnby5cbiAgICB2YXIgZGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgXG4gICAgZGl2LnN0eWxlLndpZHRoID0gMTAwICsgJ3B4JztcbiAgICBkaXYuc3R5bGUuaGVpZ2h0ID0gMTAwICsgJ3B4JztcbiAgICBkaXYuc3R5bGUucG9zaXRpb24gPSAnYWJzb2x1dGUnO1xuICAgIGRpdi5zdHlsZS50b3AgPSAwO1xuICAgIGRpdi5zdHlsZS5sZWZ0ID0gMDtcbiAgIC8vXG4gICAgZGl2LnN0eWxlLnpJbmRleCA9IDI7XG4gICBcdFxuICAgXHQvKipcbiAgIFx0ICogVGhpcyBpcyB0aGUgZG9tIGVsZW1lbnQgdGhhdCB3aWxsIHNpdCBvdmVyIHRoZSBwaXhpIGVsZW1lbnQuIFRoaXMgaXMgd2hlcmUgdGhlIGRpdiBvdmVybGF5cyB3aWxsIGdvLlxuICAgXHQgKiBcbiAgIFx0ICogQHR5cGUge0hUTUxFbGVtZW50fVxuICAgXHQgKiBAcHJpdmF0ZVxuICAgXHQgKi9cbiAgIFx0dGhpcy5kaXYgPSBkaXY7XG5cbiAgIFx0LyoqXG4gICBcdCAqIEEgc2ltcGxlIHBvb2wgZm9yIHN0b3JpbmcgZGl2cy5cbiAgIFx0ICogXG4gICBcdCAqIEB0eXBlIHtBcnJheX1cbiAgIFx0ICogQHByaXZhdGVcbiAgIFx0ICovXG4gXHR0aGlzLnBvb2wgPSBbXTtcblxuIFx0LyoqXG4gXHQgKiBUaGlzIGlzIGEgdGljayB1c2VkIHRvIGNoZWNrIGlmIGFuIG9iamVjdCBpcyBubyBsb25nZXIgYmVpbmcgcmVuZGVyZWQuXG4gXHQgKiBcbiBcdCAqIEB0eXBlIHtOdW1iZXJ9XG4gXHQgKiBAcHJpdmF0ZVxuIFx0ICovXG4gICBcdHRoaXMucmVuZGVySWQgPSAwO1xuXG4gICBcdC8qKlxuICAgXHQgKiBTZXR0aW5nIHRoaXMgdG8gdHJ1ZSB3aWxsIHZpc3VhbGx5IHNob3cgdGhlIGRpdnNcbiAgIFx0ICogXG4gICBcdCAqIEB0eXBlIHtCb29sZWFufVxuICAgXHQgKi9cbiAgIFx0dGhpcy5kZWJ1ZyA9IGZhbHNlO1xuXG4gIFx0LyoqXG4gICAgICogVGhlIHJlbmRlcmVyIHRoaXMgYWNjZXNzaWJpbGl0eSBtYW5hZ2VyIHdvcmtzIGZvci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuU3lzdGVtUmVuZGVyZXJ9XG4gICAgICovXG4gICBcdHRoaXMucmVuZGVyZXIgPSByZW5kZXJlcjtcblxuICAgXHQvKipcbiAgICAgKiBUaGUgYXJyYXkgb2YgY3VycmVudGx5IGFjdGl2ZSBhY2Nlc3NpYmxlIGl0ZW1zLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7QXJyYXl9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgIFx0dGhpcy5jaGlsZHJlbiA9IFtdO1xuICAgXHRcbiAgIFx0LyoqXG4gICAgICogcHJlIGJpbmQgdGhlIGZ1bmN0aW9ucy4uXG4gICAgICovXG4gICBcdHRoaXMuX29uS2V5RG93biA9IHRoaXMuX29uS2V5RG93bi5iaW5kKHRoaXMpO1xuICAgXHR0aGlzLl9vbk1vdXNlTW92ZSA9IHRoaXMuX29uTW91c2VNb3ZlLmJpbmQodGhpcyk7XG4gICBcdFxuICAgXHQvKipcbiAgICAgKiBzdG9yZXMgdGhlIHN0YXRlIG9mIHRoZSBtYW5hZ2VyLiBJZiB0aGVyZSBhcmUgbm8gYWNjZXNzaWJsZSBvYmplY3RzIG9yIHRoZSBtb3VzZSBpcyBtb3ZpbmcgdGhlIHdpbGwgYmUgZmFsc2UuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtBcnJheX1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgXHR0aGlzLmlzQWN0aXZlID0gZmFsc2U7XG5cblxuICAgXHQvLyBsZXQgbGlzdGVuIGZvciB0YWIuLiBvbmNlIHByZXNzZWQgd2UgY2FuIGZpcmUgdXAgYW5kIHNob3cgdGhlIGFjY2Vzc2liaWxpdHkgbGF5ZXJcbiAgIFx0d2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLCB0aGlzLl9vbktleURvd24sIGZhbHNlKTtcbn1cblxuXG5BY2Nlc3NpYmlsaXR5TWFuYWdlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBBY2Nlc3NpYmlsaXR5TWFuYWdlcjtcbm1vZHVsZS5leHBvcnRzID0gQWNjZXNzaWJpbGl0eU1hbmFnZXI7XG5cbi8qKlxuICogQWN0aXZhdGluZyB3aWxsIGNhdXNlIHRoZSBBY2Nlc3NpYmlsaXR5IGxheWVyIHRvIGJlIHNob3duLiBUaGlzIGlzIGNhbGxlZCB3aGVuIGEgdXNlciBwcmVzZXMgdGhlIHRhYiBrZXlcbiAqIEBwcml2YXRlXG4gKi9cbkFjY2Vzc2liaWxpdHlNYW5hZ2VyLnByb3RvdHlwZS5hY3RpdmF0ZSA9IGZ1bmN0aW9uKClcbntcblx0aWYodGhpcy5pc0FjdGl2ZSlcblx0e1xuXHRcdHJldHVybjtcblx0fVxuXG5cdHRoaXMuaXNBY3RpdmUgPSB0cnVlO1xuXG5cdHdpbmRvdy5kb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdtb3VzZW1vdmUnLCB0aGlzLl9vbk1vdXNlTW92ZSwgdHJ1ZSk7XG5cdHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdrZXlkb3duJywgdGhpcy5fb25LZXlEb3duLCBmYWxzZSk7XG5cblx0dGhpcy5yZW5kZXJlci5vbigncG9zdHJlbmRlcicsIHRoaXMudXBkYXRlLCB0aGlzKTtcblxuXHR0aGlzLnJlbmRlcmVyLnZpZXcucGFyZW50Tm9kZS5hcHBlbmRDaGlsZCh0aGlzLmRpdik7XHRcbn07XG5cbi8qKlxuICogRGVhY3RpdmF0aW5nIHdpbGwgY2F1c2UgdGhlIEFjY2Vzc2liaWxpdHkgbGF5ZXIgdG8gYmUgaGlkZGVuLiBUaGlzIGlzIGNhbGxlZCB3aGVuIGEgdXNlciBtb3ZlcyB0aGUgbW91c2VcbiAqIEBwcml2YXRlXG4gKi9cbkFjY2Vzc2liaWxpdHlNYW5hZ2VyLnByb3RvdHlwZS5kZWFjdGl2YXRlID0gZnVuY3Rpb24oKVxue1xuXHRpZighdGhpcy5pc0FjdGl2ZSlcblx0e1xuXHRcdHJldHVybjtcblx0fVxuXG5cdHRoaXMuaXNBY3RpdmUgPSBmYWxzZTtcblxuXHR3aW5kb3cuZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignbW91c2Vtb3ZlJywgdGhpcy5fb25Nb3VzZU1vdmUpO1xuXHR3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsIHRoaXMuX29uS2V5RG93biwgZmFsc2UpO1xuXG5cdHRoaXMucmVuZGVyZXIub2ZmKCdwb3N0cmVuZGVyJywgdGhpcy51cGRhdGUpO1xuXG5cdHRoaXMuZGl2LnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodGhpcy5kaXYpO1xuXG59O1xuXG4vKipcbiAqIFRoaXMgcmVjdXJzaXZlIGZ1bmN0aW9uIHdpbGwgcnVuIHRocm91Z2h0IGhlIHNjZW5lIGdyYXBoIGFuZCBhZGQgYW55IG5ldyBhY2Nlc3NpYmxlIG9iamVjdHMgdG8gdGhlIERPTSBsYXllci5cbiAqIEBwYXJhbSBlbGVtZW50IHtQSVhJLkNvbnRhaW5lcnxQSVhJLlNwcml0ZXxQSVhJLmV4dHJhcy5UaWxpbmdTcHJpdGV9IHRoZSBEaXNwbGF5T2JqZWN0IHRvIGNoZWNrLlxuICogQHByaXZhdGVcbiAqL1xuQWNjZXNzaWJpbGl0eU1hbmFnZXIucHJvdG90eXBlLnVwZGF0ZUFjY2Vzc2libGVPYmplY3RzID0gZnVuY3Rpb24oZGlzcGxheU9iamVjdClcbntcblx0aWYoIWRpc3BsYXlPYmplY3QudmlzaWJsZSlcblx0e1xuXHRcdHJldHVybjtcblx0fVxuXG5cdGlmKGRpc3BsYXlPYmplY3QuYWNjZXNzaWJsZSAmJiBkaXNwbGF5T2JqZWN0LmludGVyYWN0aXZlKVxuXHR7XG5cdFx0aWYoIWRpc3BsYXlPYmplY3QuX2FjY2Vzc2libGVBY3RpdmUpXG5cdFx0e1xuXHRcdFx0dGhpcy5hZGRDaGlsZChkaXNwbGF5T2JqZWN0KTtcblx0XHR9XG5cdCAgIFx0XG5cdCAgIFx0ZGlzcGxheU9iamVjdC5yZW5kZXJJZCA9IHRoaXMucmVuZGVySWQ7XG5cdH1cblxuXHR2YXIgY2hpbGRyZW4gPSBkaXNwbGF5T2JqZWN0LmNoaWxkcmVuO1xuXG5cdGZvciAodmFyIGkgPSBjaGlsZHJlbi5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuXHRcdFxuXHRcdHRoaXMudXBkYXRlQWNjZXNzaWJsZU9iamVjdHMoY2hpbGRyZW5baV0pO1xuXHR9XG59O1xuXG5cbi8qKlxuICogQmVmb3JlIGVhY2ggcmVuZGVyIHRoaXMgZnVuY3Rpb24gd2lsbCBlbnN1cmUgdGhhdCBhbGwgZGl2cyBhcmUgbWFwcGVkIGNvcnJlY3RseSB0byB0aGVpciBEaXNwbGF5T2JqZWN0c1xuICogQHByaXZhdGVcbiAqL1xuQWNjZXNzaWJpbGl0eU1hbmFnZXIucHJvdG90eXBlLnVwZGF0ZSA9IGZ1bmN0aW9uKClcbntcblxuXHQvLyB1cGRhdGUgY2hpbGRyZW4uLi5cblx0dGhpcy51cGRhdGVBY2Nlc3NpYmxlT2JqZWN0cyh0aGlzLnJlbmRlcmVyLl9sYXN0T2JqZWN0UmVuZGVyZWQpO1xuXG5cdHZhciByZWN0ID0gdGhpcy5yZW5kZXJlci52aWV3LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuXHR2YXIgc3ggPSByZWN0LndpZHRoICAvIHRoaXMucmVuZGVyZXIud2lkdGg7XG5cdHZhciBzeSA9IHJlY3QuaGVpZ2h0IC8gdGhpcy5yZW5kZXJlci5oZWlnaHQ7XG5cblx0dmFyIGRpdiA9IHRoaXMuZGl2O1xuXG5cdGRpdi5zdHlsZS5sZWZ0ID0gcmVjdC5sZWZ0ICsgJ3B4Jztcblx0ZGl2LnN0eWxlLnRvcCA9IHJlY3QudG9wICsgJ3B4Jztcblx0ZGl2LnN0eWxlLndpZHRoID0gdGhpcy5yZW5kZXJlci53aWR0aCArICdweCc7XG5cdGRpdi5zdHlsZS5oZWlnaHQgPSB0aGlzLnJlbmRlcmVyLmhlaWdodCArICdweCc7XG5cblx0Zm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmNoaWxkcmVuLmxlbmd0aDsgaSsrKVxuXHR7XG5cblx0XHR2YXIgY2hpbGQgPSB0aGlzLmNoaWxkcmVuW2ldO1xuXG5cdFx0aWYoY2hpbGQucmVuZGVySWQgIT09IHRoaXMucmVuZGVySWQpXG5cdFx0e1xuXHRcdFx0Y2hpbGQuX2FjY2Vzc2libGVBY3RpdmUgPSBmYWxzZTtcblxuICAgICAgICAgICAgY29yZS51dGlscy5yZW1vdmVJdGVtcyh0aGlzLmNoaWxkcmVuLCBpLCAxKTtcblx0XHRcdHRoaXMuZGl2LnJlbW92ZUNoaWxkKCBjaGlsZC5fYWNjZXNzaWJsZURpdiApO1xuXHRcdFx0dGhpcy5wb29sLnB1c2goY2hpbGQuX2FjY2Vzc2libGVEaXYpO1xuXHRcdFx0Y2hpbGQuX2FjY2Vzc2libGVEaXYgPSBudWxsO1xuXG5cdFx0XHRpLS07XG5cblx0XHRcdGlmKHRoaXMuY2hpbGRyZW4ubGVuZ3RoID09PSAwKVxuXHRcdFx0e1xuXHRcdFx0XHR0aGlzLmRlYWN0aXZhdGUoKTtcblx0XHRcdH1cblx0XHR9XG5cdFx0ZWxzZVxuXHRcdHtcblx0XHRcdC8vIG1hcCBkaXYgdG8gZGlzcGxheS4uXG5cdFx0XHRkaXYgPSBjaGlsZC5fYWNjZXNzaWJsZURpdjtcblx0XHRcdHZhciBoaXRBcmVhID0gY2hpbGQuaGl0QXJlYTtcblx0XHRcdHZhciB3dCA9IGNoaWxkLndvcmxkVHJhbnNmb3JtO1xuXG5cdFx0XHRpZihjaGlsZC5oaXRBcmVhKVxuXHRcdFx0e1xuXHRcdFx0XHRkaXYuc3R5bGUubGVmdCA9ICgod3QudHggKyAoaGl0QXJlYS54ICogd3QuYSkpICogc3gpICsgJ3B4Jztcblx0XHRcdFx0ZGl2LnN0eWxlLnRvcCA9ICAoKHd0LnR5ICsgKGhpdEFyZWEueSAqIHd0LmQpKSAqIHN5KSArICAncHgnO1xuXG5cdFx0XHRcdGRpdi5zdHlsZS53aWR0aCA9IChoaXRBcmVhLndpZHRoICogd3QuYSAqIHN4KSArICdweCc7XG5cdFx0XHRcdGRpdi5zdHlsZS5oZWlnaHQgPSAoaGl0QXJlYS5oZWlnaHQgKiB3dC5kICogc3kpICsgJ3B4Jztcblx0XHRcdFxuXHRcdFx0fVxuXHRcdFx0ZWxzZVxuXHRcdFx0e1xuXHRcdFx0XHRoaXRBcmVhID0gY2hpbGQuZ2V0Qm91bmRzKCk7XG5cblx0XHRcdFx0dGhpcy5jYXBIaXRBcmVhKGhpdEFyZWEpO1xuXG5cdFx0XHRcdGRpdi5zdHlsZS5sZWZ0ID0gKGhpdEFyZWEueCAqIHN4KSArICdweCc7XG5cdFx0XHRcdGRpdi5zdHlsZS50b3AgPSAgKGhpdEFyZWEueSAqIHN5KSArICAncHgnO1xuXG5cdFx0XHRcdGRpdi5zdHlsZS53aWR0aCA9IChoaXRBcmVhLndpZHRoICogc3gpICsgJ3B4Jztcblx0XHRcdFx0ZGl2LnN0eWxlLmhlaWdodCA9IChoaXRBcmVhLmhlaWdodCAqIHN5KSArICdweCc7XG5cdFx0XHR9XHRcdFxuXHRcdH1cblx0fVxuXG5cdC8vIGluY3JlbWVudCB0aGUgcmVuZGVyIGlkLi5cblx0dGhpcy5yZW5kZXJJZCsrO1xufTtcblxuQWNjZXNzaWJpbGl0eU1hbmFnZXIucHJvdG90eXBlLmNhcEhpdEFyZWEgPSBmdW5jdGlvbiAoaGl0QXJlYSlcbntcbiAgICBpZiAoaGl0QXJlYS54IDwgMClcbiAgICB7XG4gICAgICAgIGhpdEFyZWEud2lkdGggKz0gaGl0QXJlYS54O1xuICAgICAgICBoaXRBcmVhLnggPSAwO1xuICAgIH1cblxuICAgIGlmIChoaXRBcmVhLnkgPCAwKVxuICAgIHtcbiAgICAgICAgaGl0QXJlYS5oZWlnaHQgKz0gaGl0QXJlYS55O1xuICAgICAgICBoaXRBcmVhLnkgPSAwO1xuICAgIH1cblxuICAgIGlmICggaGl0QXJlYS54ICsgaGl0QXJlYS53aWR0aCA+IHRoaXMucmVuZGVyZXIud2lkdGggKVxuICAgIHtcbiAgICAgICAgaGl0QXJlYS53aWR0aCA9IHRoaXMucmVuZGVyZXIud2lkdGggLSBoaXRBcmVhLng7XG4gICAgfVxuXG4gICAgaWYgKCBoaXRBcmVhLnkgKyBoaXRBcmVhLmhlaWdodCA+IHRoaXMucmVuZGVyZXIuaGVpZ2h0IClcbiAgICB7XG4gICAgICAgIGhpdEFyZWEuaGVpZ2h0ID0gdGhpcy5yZW5kZXJlci5oZWlnaHQgLSBoaXRBcmVhLnk7XG4gICAgfVxufTtcblxuXG4vKipcbiAqIEFkZHMgYSBEaXNwbGF5T2JqZWN0IHRvIHRoZSBhY2Nlc3NpYmlsaXR5IG1hbmFnZXJcbiAqIEBwcml2YXRlXG4gKi9cbkFjY2Vzc2liaWxpdHlNYW5hZ2VyLnByb3RvdHlwZS5hZGRDaGlsZCA9IGZ1bmN0aW9uKGRpc3BsYXlPYmplY3QpXG57XG4vL1x0dGhpcy5hY3RpdmF0ZSgpO1xuXHRcblx0dmFyIGRpdiA9IHRoaXMucG9vbC5wb3AoKTtcblxuXHRpZighZGl2KVxuXHR7XG5cdFx0ZGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYnV0dG9uJyk7IFxuXG5cdCAgICBkaXYuc3R5bGUud2lkdGggPSAxMDAgKyAncHgnO1xuXHQgICAgZGl2LnN0eWxlLmhlaWdodCA9IDEwMCArICdweCc7XG5cdCAgICBkaXYuc3R5bGUuYmFja2dyb3VuZENvbG9yID0gdGhpcy5kZWJ1ZyA/ICdyZ2JhKDI1NSwwLDAsMC41KScgOiAndHJhbnNwYXJlbnQnO1xuXHQgICAgZGl2LnN0eWxlLnBvc2l0aW9uID0gJ2Fic29sdXRlJztcblx0ICAgIGRpdi5zdHlsZS56SW5kZXggPSAyO1xuXHQgICAgZGl2LnN0eWxlLmJvcmRlclN0eWxlID0gJ25vbmUnO1xuXG5cdCAgICBcblx0ICAgIGRpdi5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIHRoaXMuX29uQ2xpY2suYmluZCh0aGlzKSk7XG5cdCAgICBkaXYuYWRkRXZlbnRMaXN0ZW5lcignZm9jdXMnLCB0aGlzLl9vbkZvY3VzLmJpbmQodGhpcykpO1xuXHQgICAgZGl2LmFkZEV2ZW50TGlzdGVuZXIoJ2ZvY3Vzb3V0JywgdGhpcy5fb25Gb2N1c091dC5iaW5kKHRoaXMpKTtcblx0fVxuXHQgICBcdFxuXG5cblxuXHRkaXYudGl0bGUgPSBkaXNwbGF5T2JqZWN0LmFjY2Vzc2libGVUaXRsZSB8fCAnZGlzcGxheU9iamVjdCAnICsgdGhpcy50YWJJbmRleDtcblxuXHQvL1xuXHRcblx0ZGlzcGxheU9iamVjdC5fYWNjZXNzaWJsZUFjdGl2ZSA9IHRydWU7XG5cdGRpc3BsYXlPYmplY3QuX2FjY2Vzc2libGVEaXYgPSBkaXY7XG5cdGRpdi5kaXNwbGF5T2JqZWN0ID0gZGlzcGxheU9iamVjdDtcblxuXG5cdHRoaXMuY2hpbGRyZW4ucHVzaChkaXNwbGF5T2JqZWN0KTtcblx0dGhpcy5kaXYuYXBwZW5kQ2hpbGQoIGRpc3BsYXlPYmplY3QuX2FjY2Vzc2libGVEaXYgKTtcblx0ZGlzcGxheU9iamVjdC5fYWNjZXNzaWJsZURpdi50YWJJbmRleCA9IGRpc3BsYXlPYmplY3QudGFiSW5kZXg7XG59O1xuXG5cbi8qKlxuICogTWFwcyB0aGUgZGl2IGJ1dHRvbiBwcmVzcyB0byBwaXhpJ3MgSW50ZXJhY3Rpb25NYW5hZ2VyIChjbGljaylcbiAqIEBwcml2YXRlXG4gKi9cbkFjY2Vzc2liaWxpdHlNYW5hZ2VyLnByb3RvdHlwZS5fb25DbGljayA9IGZ1bmN0aW9uKGUpXG57XG5cdHZhciBpbnRlcmFjdGlvbk1hbmFnZXIgPSB0aGlzLnJlbmRlcmVyLnBsdWdpbnMuaW50ZXJhY3Rpb247XG5cdGludGVyYWN0aW9uTWFuYWdlci5kaXNwYXRjaEV2ZW50KGUudGFyZ2V0LmRpc3BsYXlPYmplY3QsICdjbGljaycsIGludGVyYWN0aW9uTWFuYWdlci5ldmVudERhdGEpO1xufTtcblxuLyoqXG4gKiBNYXBzIHRoZSBkaXYgZm9jdXMgZXZlbnRzIHRvIHBpeGlzIEludGVyYWN0aW9uTWFuYWdlciAobW91c2VvdmVyKVxuICogQHByaXZhdGVcbiAqL1xuQWNjZXNzaWJpbGl0eU1hbmFnZXIucHJvdG90eXBlLl9vbkZvY3VzID0gZnVuY3Rpb24oZSlcbntcblx0dmFyIGludGVyYWN0aW9uTWFuYWdlciA9IHRoaXMucmVuZGVyZXIucGx1Z2lucy5pbnRlcmFjdGlvbjtcblx0aW50ZXJhY3Rpb25NYW5hZ2VyLmRpc3BhdGNoRXZlbnQoZS50YXJnZXQuZGlzcGxheU9iamVjdCwgJ21vdXNlb3ZlcicsIGludGVyYWN0aW9uTWFuYWdlci5ldmVudERhdGEpO1xufTtcblxuLyoqXG4gKiBNYXBzIHRoZSBkaXYgZm9jdXMgZXZlbnRzIHRvIHBpeGlzIEludGVyYWN0aW9uTWFuYWdlciAobW91c2VvdXQpXG4gKiBAcHJpdmF0ZVxuICovXG5BY2Nlc3NpYmlsaXR5TWFuYWdlci5wcm90b3R5cGUuX29uRm9jdXNPdXQgPSBmdW5jdGlvbihlKVxue1xuXHR2YXIgaW50ZXJhY3Rpb25NYW5hZ2VyID0gdGhpcy5yZW5kZXJlci5wbHVnaW5zLmludGVyYWN0aW9uO1xuXHRpbnRlcmFjdGlvbk1hbmFnZXIuZGlzcGF0Y2hFdmVudChlLnRhcmdldC5kaXNwbGF5T2JqZWN0LCAnbW91c2VvdXQnLCBpbnRlcmFjdGlvbk1hbmFnZXIuZXZlbnREYXRhKTtcbn07XG5cbi8qKlxuICogSXMgY2FsbGVkIHdoZW4gYSBrZXkgaXMgcHJlc3NlZFxuICpcbiAqIEBwcml2YXRlXG4gKi9cbkFjY2Vzc2liaWxpdHlNYW5hZ2VyLnByb3RvdHlwZS5fb25LZXlEb3duID0gZnVuY3Rpb24oZSlcbntcblx0aWYoZS5rZXlDb2RlICE9PSA5KVxuXHR7XG5cdFx0cmV0dXJuO1xuXHR9XG5cblx0dGhpcy5hY3RpdmF0ZSgpO1xufTtcblxuLyoqXG4gKiBJcyBjYWxsZWQgd2hlbiB0aGUgbW91c2UgbW92ZXMgYWNyb3NzIHRoZSByZW5kZXJlciBlbGVtZW50XG4gKlxuICogQHByaXZhdGVcbiAqL1xuQWNjZXNzaWJpbGl0eU1hbmFnZXIucHJvdG90eXBlLl9vbk1vdXNlTW92ZSA9IGZ1bmN0aW9uKClcbntcblx0dGhpcy5kZWFjdGl2YXRlKCk7XG59O1xuXG5cbi8qKlxuICogRGVzdHJveXMgdGhlIGFjY2Vzc2liaWxpdHkgbWFuYWdlclxuICpcbiAqL1xuQWNjZXNzaWJpbGl0eU1hbmFnZXIucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoKSBcbntcblx0dGhpcy5kaXYgPSBudWxsO1xuXG5cdGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5jaGlsZHJlbi5sZW5ndGg7IGkrKylcblx0e1xuXHRcdHRoaXMuY2hpbGRyZW5baV0uZGl2ID0gbnVsbDtcblx0fVxuXG5cdFxuXHR3aW5kb3cuZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignbW91c2Vtb3ZlJywgdGhpcy5fb25Nb3VzZU1vdmUpO1xuXHR3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsIHRoaXMuX29uS2V5RG93bik7XG5cdFx0XG5cdHRoaXMucG9vbCA9IG51bGw7XG5cdHRoaXMuY2hpbGRyZW4gPSBudWxsO1xuXHR0aGlzLnJlbmRlcmVyID0gbnVsbDtcblxufTtcblxuY29yZS5XZWJHTFJlbmRlcmVyLnJlZ2lzdGVyUGx1Z2luKCdhY2Nlc3NpYmlsaXR5JywgQWNjZXNzaWJpbGl0eU1hbmFnZXIpO1xuY29yZS5DYW52YXNSZW5kZXJlci5yZWdpc3RlclBsdWdpbignYWNjZXNzaWJpbGl0eScsIEFjY2Vzc2liaWxpdHlNYW5hZ2VyKTtcblxuIiwiLyoqXG4gKiBEZWZhdWx0IHByb3BlcnR5IHZhbHVlcyBvZiBhY2Nlc3NpYmxlIG9iamVjdHNcbiAqIHVzZWQgYnkge0BsaW5rIFBJWEkuYWNjZXNzaWJpbGl0eS5BY2Nlc3NpYmlsaXR5TWFuYWdlcn0uXG4gKlxuICogQG1peGluXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQGV4YW1wbGVcbiAqICAgICAgZnVuY3Rpb24gTXlPYmplY3QoKSB7fVxuICpcbiAqICAgICAgT2JqZWN0LmFzc2lnbihcbiAqICAgICAgICAgIE15T2JqZWN0LnByb3RvdHlwZSxcbiAqICAgICAgICAgIFBJWEkuYWNjZXNzaWJpbGl0eS5hY2Nlc3NpYmxlVGFyZ2V0XG4gKiAgICAgICk7XG4gKi9cbnZhciBhY2Nlc3NpYmxlVGFyZ2V0ID0ge1xuICAgIFxuICAgIC8qKlxuICAgICAqIEB0b2RvIE5lZWRzIGRvY3MuXG4gICAgICovXG4gICAgYWNjZXNzaWJsZTpmYWxzZSxcblxuICAgIC8qKlxuICAgICAqIEB0b2RvIE5lZWRzIGRvY3MuXG4gICAgICovXG4gICAgYWNjZXNzaWJsZVRpdGxlOm51bGwsXG5cbiAgICAvKipcbiAgICAgKiBAdG9kbyBOZWVkcyBkb2NzLlxuICAgICAqL1xuICAgIHRhYkluZGV4OjAsXG5cbiAgICAvKipcbiAgICAgKiBAdG9kbyBOZWVkcyBkb2NzLlxuICAgICAqL1xuICAgIF9hY2Nlc3NpYmxlQWN0aXZlOmZhbHNlLFxuXG4gICAgLyoqXG4gICAgICogQHRvZG8gTmVlZHMgZG9jcy5cbiAgICAgKi9cbiAgICBfYWNjZXNzaWJsZURpdjpmYWxzZVxuXG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGFjY2Vzc2libGVUYXJnZXQ7XG4iLCIvKipcbiAqIEBmaWxlICAgICAgICBNYWluIGV4cG9ydCBvZiB0aGUgUElYSSBhY2Nlc3NpYmlsaXR5IGxpYnJhcnlcbiAqIEBhdXRob3IgICAgICBNYXQgR3JvdmVzIDxtYXRAZ29vZGJveWRpZ2l0YWwuY29tPlxuICogQGNvcHlyaWdodCAgIDIwMTMtMjAxNSBHb29kQm95RGlnaXRhbFxuICogQGxpY2Vuc2UgICAgIHtAbGluayBodHRwczovL2dpdGh1Yi5jb20vcGl4aWpzL3BpeGkuanMvYmxvYi9tYXN0ZXIvTElDRU5TRXxNSVQgTGljZW5zZX1cbiAqL1xuXG4vKipcbiAqIEBuYW1lc3BhY2UgUElYSS5pbnRlcmFjdGlvblxuICovXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgICBhY2Nlc3NpYmxlVGFyZ2V0OiAgICAgcmVxdWlyZSgnLi9hY2Nlc3NpYmxlVGFyZ2V0JyksXG4gICAgQWNjZXNzaWJpbGl0eU1hbmFnZXI6IHJlcXVpcmUoJy4vQWNjZXNzaWJpbGl0eU1hbmFnZXInKVxufTtcbiIsIi8qKlxuICogQ29uc3RhbnQgdmFsdWVzIHVzZWQgaW4gcGl4aVxuICpcbiAqIEBsZW5kcyBQSVhJXG4gKi9cbnZhciBDT05TVCA9IHtcbiAgICAvKipcbiAgICAgKiBTdHJpbmcgb2YgdGhlIGN1cnJlbnQgUElYSSB2ZXJzaW9uXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQGNvbnN0YW50XG4gICAgICogQHByb3BlcnR5IHtzdHJpbmd9IFZFUlNJT05cbiAgICAgKi9cbiAgICBWRVJTSU9OOiByZXF1aXJlKCcuLi8uLi9wYWNrYWdlLmpzb24nKS52ZXJzaW9uLFxuXG4gICAgLyoqXG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IFBJXzIgLSBUd28gUGlcbiAgICAgKiBAY29uc3RhbnRcbiAgICAgKiBAc3RhdGljXG4gICAgICovXG4gICAgUElfMjogTWF0aC5QSSAqIDIsXG5cbiAgICAvKipcbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gUkFEX1RPX0RFRyAtIENvbnN0YW50IGNvbnZlcnNpb24gZmFjdG9yIGZvciBjb252ZXJ0aW5nIHJhZGlhbnMgdG8gZGVncmVlc1xuICAgICAqIEBjb25zdGFudFxuICAgICAqIEBzdGF0aWNcbiAgICAgKi9cbiAgICBSQURfVE9fREVHOiAxODAgLyBNYXRoLlBJLFxuXG4gICAgLyoqXG4gICAgICogQHByb3BlcnR5IHtOdW1iZXJ9IERFR19UT19SQUQgLSBDb25zdGFudCBjb252ZXJzaW9uIGZhY3RvciBmb3IgY29udmVydGluZyBkZWdyZWVzIHRvIHJhZGlhbnNcbiAgICAgKiBAY29uc3RhbnRcbiAgICAgKiBAc3RhdGljXG4gICAgICovXG4gICAgREVHX1RPX1JBRDogTWF0aC5QSSAvIDE4MCxcblxuICAgIC8qKlxuICAgICAqIFRhcmdldCBmcmFtZXMgcGVyIG1pbGxpc2Vjb25kLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBjb25zdGFudFxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBUQVJHRVRfRlBNUz0wLjA2XG4gICAgICovXG4gICAgVEFSR0VUX0ZQTVM6IDAuMDYsXG5cbiAgICAvKipcbiAgICAgKiBDb25zdGFudCB0byBpZGVudGlmeSB0aGUgUmVuZGVyZXIgVHlwZS5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAY29uc3RhbnRcbiAgICAgKiBAcHJvcGVydHkge29iamVjdH0gUkVOREVSRVJfVFlQRVxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBSRU5ERVJFUl9UWVBFLlVOS05PV05cbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gUkVOREVSRVJfVFlQRS5XRUJHTFxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBSRU5ERVJFUl9UWVBFLkNBTlZBU1xuICAgICAqL1xuICAgIFJFTkRFUkVSX1RZUEU6IHtcbiAgICAgICAgVU5LTk9XTjogICAgMCxcbiAgICAgICAgV0VCR0w6ICAgICAgMSxcbiAgICAgICAgQ0FOVkFTOiAgICAgMlxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBWYXJpb3VzIGJsZW5kIG1vZGVzIHN1cHBvcnRlZCBieSBQSVhJLiBJTVBPUlRBTlQgLSBUaGUgV2ViR0wgcmVuZGVyZXIgb25seSBzdXBwb3J0c1xuICAgICAqIHRoZSBOT1JNQUwsIEFERCwgTVVMVElQTFkgYW5kIFNDUkVFTiBibGVuZCBtb2Rlcy4gQW55dGhpbmcgZWxzZSB3aWxsIHNpbGVudGx5IGFjdCBsaWtlXG4gICAgICogTk9STUFMLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBjb25zdGFudFxuICAgICAqIEBwcm9wZXJ0eSB7b2JqZWN0fSBCTEVORF9NT0RFU1xuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBCTEVORF9NT0RFUy5OT1JNQUxcbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gQkxFTkRfTU9ERVMuQUREXG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IEJMRU5EX01PREVTLk1VTFRJUExZXG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IEJMRU5EX01PREVTLlNDUkVFTlxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBCTEVORF9NT0RFUy5PVkVSTEFZXG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IEJMRU5EX01PREVTLkRBUktFTlxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBCTEVORF9NT0RFUy5MSUdIVEVOXG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IEJMRU5EX01PREVTLkNPTE9SX0RPREdFXG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IEJMRU5EX01PREVTLkNPTE9SX0JVUk5cbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gQkxFTkRfTU9ERVMuSEFSRF9MSUdIVFxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBCTEVORF9NT0RFUy5TT0ZUX0xJR0hUXG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IEJMRU5EX01PREVTLkRJRkZFUkVOQ0VcbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gQkxFTkRfTU9ERVMuRVhDTFVTSU9OXG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IEJMRU5EX01PREVTLkhVRVxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBCTEVORF9NT0RFUy5TQVRVUkFUSU9OXG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IEJMRU5EX01PREVTLkNPTE9SXG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IEJMRU5EX01PREVTLkxVTUlOT1NJVFlcbiAgICAgKi9cbiAgICBCTEVORF9NT0RFUzoge1xuICAgICAgICBOT1JNQUw6ICAgICAgICAgMCxcbiAgICAgICAgQUREOiAgICAgICAgICAgIDEsXG4gICAgICAgIE1VTFRJUExZOiAgICAgICAyLFxuICAgICAgICBTQ1JFRU46ICAgICAgICAgMyxcbiAgICAgICAgT1ZFUkxBWTogICAgICAgIDQsXG4gICAgICAgIERBUktFTjogICAgICAgICA1LFxuICAgICAgICBMSUdIVEVOOiAgICAgICAgNixcbiAgICAgICAgQ09MT1JfRE9ER0U6ICAgIDcsXG4gICAgICAgIENPTE9SX0JVUk46ICAgICA4LFxuICAgICAgICBIQVJEX0xJR0hUOiAgICAgOSxcbiAgICAgICAgU09GVF9MSUdIVDogICAgIDEwLFxuICAgICAgICBESUZGRVJFTkNFOiAgICAgMTEsXG4gICAgICAgIEVYQ0xVU0lPTjogICAgICAxMixcbiAgICAgICAgSFVFOiAgICAgICAgICAgIDEzLFxuICAgICAgICBTQVRVUkFUSU9OOiAgICAgMTQsXG4gICAgICAgIENPTE9SOiAgICAgICAgICAxNSxcbiAgICAgICAgTFVNSU5PU0lUWTogICAgIDE2XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFZhcmlvdXMgd2ViZ2wgZHJhdyBtb2Rlcy4gVGhlc2UgY2FuIGJlIHVzZWQgdG8gc3BlY2lmeSB3aGljaCBHTCBkcmF3TW9kZSB0byB1c2VcbiAgICAgKiB1bmRlciBjZXJ0YWluIHNpdHVhdGlvbnMgYW5kIHJlbmRlcmVycy5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAY29uc3RhbnRcbiAgICAgKiBAcHJvcGVydHkge29iamVjdH0gRFJBV19NT0RFU1xuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBEUkFXX01PREVTLlBPSU5UU1xuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBEUkFXX01PREVTLkxJTkVTXG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IERSQVdfTU9ERVMuTElORV9MT09QXG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IERSQVdfTU9ERVMuTElORV9TVFJJUFxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBEUkFXX01PREVTLlRSSUFOR0xFU1xuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBEUkFXX01PREVTLlRSSUFOR0xFX1NUUklQXG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IERSQVdfTU9ERVMuVFJJQU5HTEVfRkFOXG4gICAgICovXG4gICAgRFJBV19NT0RFUzoge1xuICAgICAgICBQT0lOVFM6ICAgICAgICAgMCxcbiAgICAgICAgTElORVM6ICAgICAgICAgIDEsXG4gICAgICAgIExJTkVfTE9PUDogICAgICAyLFxuICAgICAgICBMSU5FX1NUUklQOiAgICAgMyxcbiAgICAgICAgVFJJQU5HTEVTOiAgICAgIDQsXG4gICAgICAgIFRSSUFOR0xFX1NUUklQOiA1LFxuICAgICAgICBUUklBTkdMRV9GQU46ICAgNlxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBUaGUgc2NhbGUgbW9kZXMgdGhhdCBhcmUgc3VwcG9ydGVkIGJ5IHBpeGkuXG4gICAgICpcbiAgICAgKiBUaGUgREVGQVVMVCBzY2FsZSBtb2RlIGFmZmVjdHMgdGhlIGRlZmF1bHQgc2NhbGluZyBtb2RlIG9mIGZ1dHVyZSBvcGVyYXRpb25zLlxuICAgICAqIEl0IGNhbiBiZSByZS1hc3NpZ25lZCB0byBlaXRoZXIgTElORUFSIG9yIE5FQVJFU1QsIGRlcGVuZGluZyB1cG9uIHN1aXRhYmlsaXR5LlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBjb25zdGFudFxuICAgICAqIEBwcm9wZXJ0eSB7b2JqZWN0fSBTQ0FMRV9NT0RFU1xuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBTQ0FMRV9NT0RFUy5ERUZBVUxUPUxJTkVBUlxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBTQ0FMRV9NT0RFUy5MSU5FQVIgU21vb3RoIHNjYWxpbmdcbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gU0NBTEVfTU9ERVMuTkVBUkVTVCBQaXhlbGF0aW5nIHNjYWxpbmdcbiAgICAgKi9cbiAgICBTQ0FMRV9NT0RFUzoge1xuICAgICAgICBERUZBVUxUOiAgICAwLFxuICAgICAgICBMSU5FQVI6ICAgICAwLFxuICAgICAgICBORUFSRVNUOiAgICAxXG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFRoZSBwcmVmaXggdGhhdCBkZW5vdGVzIGEgVVJMIGlzIGZvciBhIHJldGluYSBhc3NldFxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBjb25zdGFudFxuICAgICAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBSRVRJTkFfUFJFRklYXG4gICAgICovXG4gICAgLy9leGFtcGxlOiAnQDJ4JyxcbiAgICBSRVRJTkFfUFJFRklYOiAvQCguKyl4LyxcblxuICAgIFJFU09MVVRJT046MSxcblxuICAgIEZJTFRFUl9SRVNPTFVUSU9OOjEsXG5cbiAgICAvKipcbiAgICAgKiBUaGUgZGVmYXVsdCByZW5kZXIgb3B0aW9ucyBpZiBub25lIGFyZSBzdXBwbGllZCB0byB7QGxpbmsgUElYSS5XZWJHTFJlbmRlcmVyfVxuICAgICAqIG9yIHtAbGluayBQSVhJLkNhbnZhc1JlbmRlcmVyfS5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAY29uc3RhbnRcbiAgICAgKiBAcHJvcGVydHkge29iamVjdH0gREVGQVVMVF9SRU5ERVJfT1BUSU9OU1xuICAgICAqIEBwcm9wZXJ0eSB7SFRNTENhbnZhc0VsZW1lbnR9IERFRkFVTFRfUkVOREVSX09QVElPTlMudmlldz1udWxsXG4gICAgICogQHByb3BlcnR5IHtib29sZWFufSBERUZBVUxUX1JFTkRFUl9PUFRJT05TLnRyYW5zcGFyZW50PWZhbHNlXG4gICAgICogQHByb3BlcnR5IHtib29sZWFufSBERUZBVUxUX1JFTkRFUl9PUFRJT05TLmFudGlhbGlhcz1mYWxzZVxuICAgICAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gREVGQVVMVF9SRU5ERVJfT1BUSU9OUy5mb3JjZUZYQUE9ZmFsc2VcbiAgICAgKiBAcHJvcGVydHkge2Jvb2xlYW59IERFRkFVTFRfUkVOREVSX09QVElPTlMucHJlc2VydmVEcmF3aW5nQnVmZmVyPWZhbHNlXG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IERFRkFVTFRfUkVOREVSX09QVElPTlMucmVzb2x1dGlvbj0xXG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IERFRkFVTFRfUkVOREVSX09QVElPTlMuYmFja2dyb3VuZENvbG9yPTB4MDAwMDAwXG4gICAgICogQHByb3BlcnR5IHtib29sZWFufSBERUZBVUxUX1JFTkRFUl9PUFRJT05TLmNsZWFyQmVmb3JlUmVuZGVyPXRydWVcbiAgICAgKiBAcHJvcGVydHkge2Jvb2xlYW59IERFRkFVTFRfUkVOREVSX09QVElPTlMuYXV0b1Jlc2l6ZT1mYWxzZVxuICAgICAqL1xuICAgIERFRkFVTFRfUkVOREVSX09QVElPTlM6IHtcbiAgICAgICAgdmlldzogbnVsbCxcbiAgICAgICAgcmVzb2x1dGlvbjogMSxcbiAgICAgICAgYW50aWFsaWFzOiBmYWxzZSxcbiAgICAgICAgZm9yY2VGWEFBOiBmYWxzZSxcbiAgICAgICAgYXV0b1Jlc2l6ZTogZmFsc2UsXG4gICAgICAgIHRyYW5zcGFyZW50OiBmYWxzZSxcbiAgICAgICAgYmFja2dyb3VuZENvbG9yOiAweDAwMDAwMCxcbiAgICAgICAgY2xlYXJCZWZvcmVSZW5kZXI6IHRydWUsXG4gICAgICAgIHByZXNlcnZlRHJhd2luZ0J1ZmZlcjogZmFsc2UsXG4gICAgICAgIHJvdW5kUGl4ZWxzOiBmYWxzZVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBDb25zdGFudHMgdGhhdCBpZGVudGlmeSBzaGFwZXMsIG1haW5seSB0byBwcmV2ZW50IGBpbnN0YW5jZW9mYCBjYWxscy5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAY29uc3RhbnRcbiAgICAgKiBAcHJvcGVydHkge29iamVjdH0gU0hBUEVTXG4gICAgICogQHByb3BlcnR5IHtvYmplY3R9IFNIQVBFUy5QT0xZPTBcbiAgICAgKiBAcHJvcGVydHkge29iamVjdH0gU0hBUEVTLlJFQ1Q9MVxuICAgICAqIEBwcm9wZXJ0eSB7b2JqZWN0fSBTSEFQRVMuQ0lSQz0yXG4gICAgICogQHByb3BlcnR5IHtvYmplY3R9IFNIQVBFUy5FTElQPTNcbiAgICAgKiBAcHJvcGVydHkge29iamVjdH0gU0hBUEVTLlJSRUM9NFxuICAgICAqL1xuICAgIFNIQVBFUzoge1xuICAgICAgICBQT0xZOiAwLFxuICAgICAgICBSRUNUOiAxLFxuICAgICAgICBDSVJDOiAyLFxuICAgICAgICBFTElQOiAzLFxuICAgICAgICBSUkVDOiA0XG4gICAgfSxcblxuICAgIC8vIFRPRE86IG1heWJlIGNoYW5nZSB0byBTUFJJVEUuQkFUQ0hfU0laRTogMjAwMFxuICAgIC8vIFRPRE86IG1heWJlIGFkZCBQQVJUSUNMRS5CQVRDSF9TSVpFOiAxNTAwMFxuICAgIFNQUklURV9CQVRDSF9TSVpFOiAyMDAwIC8vbmljZSBiYWxhbmNlIGJldHdlZW4gbW9iaWxlIGFuZCBkZXNrdG9wIG1hY2hpbmVzXG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IENPTlNUO1xuIiwidmFyIG1hdGggPSByZXF1aXJlKCcuLi9tYXRoJyksXG4gICAgdXRpbHMgPSByZXF1aXJlKCcuLi91dGlscycpLFxuICAgIERpc3BsYXlPYmplY3QgPSByZXF1aXJlKCcuL0Rpc3BsYXlPYmplY3QnKSxcbiAgICBSZW5kZXJUZXh0dXJlID0gcmVxdWlyZSgnLi4vdGV4dHVyZXMvUmVuZGVyVGV4dHVyZScpLFxuICAgIF90ZW1wTWF0cml4ID0gbmV3IG1hdGguTWF0cml4KCk7XG5cbi8qKlxuICogQSBDb250YWluZXIgcmVwcmVzZW50cyBhIGNvbGxlY3Rpb24gb2YgZGlzcGxheSBvYmplY3RzLlxuICogSXQgaXMgdGhlIGJhc2UgY2xhc3Mgb2YgYWxsIGRpc3BsYXkgb2JqZWN0cyB0aGF0IGFjdCBhcyBhIGNvbnRhaW5lciBmb3Igb3RoZXIgb2JqZWN0cy5cbiAqXG4gKmBgYGpzXG4gKiB2YXIgY29udGFpbmVyID0gbmV3IFBJWEkuQ29udGFpbmVyKCk7XG4gKiBjb250YWluZXIuYWRkQ2hpbGQoc3ByaXRlKTtcbiAqIGBgYFxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLkRpc3BsYXlPYmplY3RcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKi9cbmZ1bmN0aW9uIENvbnRhaW5lcigpXG57XG4gICAgRGlzcGxheU9iamVjdC5jYWxsKHRoaXMpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGFycmF5IG9mIGNoaWxkcmVuIG9mIHRoaXMgY29udGFpbmVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5EaXNwbGF5T2JqZWN0W119XG4gICAgICogQHJlYWRvbmx5XG4gICAgICovXG4gICAgdGhpcy5jaGlsZHJlbiA9IFtdO1xufVxuXG4vLyBjb25zdHJ1Y3RvclxuQ29udGFpbmVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoRGlzcGxheU9iamVjdC5wcm90b3R5cGUpO1xuQ29udGFpbmVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IENvbnRhaW5lcjtcbm1vZHVsZS5leHBvcnRzID0gQ29udGFpbmVyO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhDb250YWluZXIucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogVGhlIHdpZHRoIG9mIHRoZSBDb250YWluZXIsIHNldHRpbmcgdGhpcyB3aWxsIGFjdHVhbGx5IG1vZGlmeSB0aGUgc2NhbGUgdG8gYWNoaWV2ZSB0aGUgdmFsdWUgc2V0XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuQ29udGFpbmVyI1xuICAgICAqL1xuICAgIHdpZHRoOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuc2NhbGUueCAqIHRoaXMuZ2V0TG9jYWxCb3VuZHMoKS53aWR0aDtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcblxuICAgICAgICAgICAgdmFyIHdpZHRoID0gdGhpcy5nZXRMb2NhbEJvdW5kcygpLndpZHRoO1xuXG4gICAgICAgICAgICBpZiAod2lkdGggIT09IDApXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdGhpcy5zY2FsZS54ID0gdmFsdWUgLyB3aWR0aDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNjYWxlLnggPSAxO1xuICAgICAgICAgICAgfVxuXG5cbiAgICAgICAgICAgIHRoaXMuX3dpZHRoID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVGhlIGhlaWdodCBvZiB0aGUgQ29udGFpbmVyLCBzZXR0aW5nIHRoaXMgd2lsbCBhY3R1YWxseSBtb2RpZnkgdGhlIHNjYWxlIHRvIGFjaGlldmUgdGhlIHZhbHVlIHNldFxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLkNvbnRhaW5lciNcbiAgICAgKi9cbiAgICBoZWlnaHQ6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gIHRoaXMuc2NhbGUueSAqIHRoaXMuZ2V0TG9jYWxCb3VuZHMoKS5oZWlnaHQ7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG5cbiAgICAgICAgICAgIHZhciBoZWlnaHQgPSB0aGlzLmdldExvY2FsQm91bmRzKCkuaGVpZ2h0O1xuXG4gICAgICAgICAgICBpZiAoaGVpZ2h0ICE9PSAwKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHRoaXMuc2NhbGUueSA9IHZhbHVlIC8gaGVpZ2h0IDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNjYWxlLnkgPSAxO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLl9oZWlnaHQgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuXG4vKipcbiAqIE92ZXJyaWRhYmxlIG1ldGhvZCB0aGF0IGNhbiBiZSB1c2VkIGJ5IENvbnRhaW5lciBzdWJjbGFzc2VzIHdoZW5ldmVyIHRoZSBjaGlsZHJlbiBhcnJheSBpcyBtb2RpZmllZFxuICpcbiAqIEBwcml2YXRlXG4gKi9cbkNvbnRhaW5lci5wcm90b3R5cGUub25DaGlsZHJlbkNoYW5nZSA9IGZ1bmN0aW9uICgpIHt9O1xuXG4vKipcbiAqIEFkZHMgYSBjaGlsZCB0byB0aGUgY29udGFpbmVyLlxuICogXG4gKiBZb3UgY2FuIGFsc28gYWRkIG11bHRwbGUgaXRlbXMgbGlrZSBzbzogbXlDb250YWluZXIuYWRkQ2hpbGQodGhpbmtPbmUsIHRoaW5nVHdvLCB0aGluZ1RocmVlKVxuICogQHBhcmFtIGNoaWxkIHtQSVhJLkRpc3BsYXlPYmplY3R9IFRoZSBEaXNwbGF5T2JqZWN0IHRvIGFkZCB0byB0aGUgY29udGFpbmVyXG4gKiBAcmV0dXJuIHtQSVhJLkRpc3BsYXlPYmplY3R9IFRoZSBjaGlsZCB0aGF0IHdhcyBhZGRlZC5cbiAqL1xuQ29udGFpbmVyLnByb3RvdHlwZS5hZGRDaGlsZCA9IGZ1bmN0aW9uIChjaGlsZClcbnsgXG4gICAgdmFyIGFyZ3VtZW50c0xlbmd0aCA9IGFyZ3VtZW50cy5sZW5ndGg7XG5cbiAgICAvLyBpZiB0aGVyZSBpcyBvbmx5IG9uZSBhcmd1bWVudCB3ZSBjYW4gYnlwYXNzIGxvb3BpbmcgdGhyb3VnaCB0aGUgdGhlbVxuICAgIGlmKGFyZ3VtZW50c0xlbmd0aCA+IDEpXG4gICAge1xuICAgICAgICAvLyBsb29wIHRocm91Z2ggdGhlIGFyZ3VtZW50cyBwcm9wZXJ0eSBhbmQgYWRkIGFsbCBjaGlsZHJlblxuICAgICAgICAvLyB1c2UgaXQgdGhlIHJpZ2h0IHdheSAoLmxlbmd0aCBhbmQgW2ldKSBzbyB0aGF0IHRoaXMgZnVuY3Rpb24gY2FuIHN0aWxsIGJlIG9wdGltaXNlZCBieSBKUyBydW50aW1lc1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFyZ3VtZW50c0xlbmd0aDsgaSsrKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmFkZENoaWxkKCBhcmd1bWVudHNbaV0gKTtcbiAgICAgICAgfVxuICAgIH0gICAgIFxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIC8vIGlmIHRoZSBjaGlsZCBoYXMgYSBwYXJlbnQgdGhlbiBsZXRzIHJlbW92ZSBpdCBhcyBQaXhpIG9iamVjdHMgY2FuIG9ubHkgZXhpc3QgaW4gb25lIHBsYWNlXG4gICAgICAgIGlmIChjaGlsZC5wYXJlbnQpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNoaWxkLnBhcmVudC5yZW1vdmVDaGlsZChjaGlsZCk7XG4gICAgICAgIH1cblxuICAgICAgICBjaGlsZC5wYXJlbnQgPSB0aGlzO1xuICAgICAgICBcbiAgICAgICAgdGhpcy5jaGlsZHJlbi5wdXNoKGNoaWxkKTtcblxuICAgICAgICAvLyBUT0RPIC0gbGV0cyBlaXRoZXIgZG8gYWxsIGNhbGxiYWNrcyBvciBhbGwgZXZlbnRzLi4gbm90IGJvdGghXG4gICAgICAgIHRoaXMub25DaGlsZHJlbkNoYW5nZSh0aGlzLmNoaWxkcmVuLmxlbmd0aC0xKTtcbiAgICAgICAgY2hpbGQuZW1pdCgnYWRkZWQnLCB0aGlzKTtcbiAgICB9XG5cbiAgICByZXR1cm4gY2hpbGQ7XG59O1xuXG4vKipcbiAqIEFkZHMgYSBjaGlsZCB0byB0aGUgY29udGFpbmVyIGF0IGEgc3BlY2lmaWVkIGluZGV4LiBJZiB0aGUgaW5kZXggaXMgb3V0IG9mIGJvdW5kcyBhbiBlcnJvciB3aWxsIGJlIHRocm93blxuICpcbiAqIEBwYXJhbSBjaGlsZCB7UElYSS5EaXNwbGF5T2JqZWN0fSBUaGUgY2hpbGQgdG8gYWRkXG4gKiBAcGFyYW0gaW5kZXgge251bWJlcn0gVGhlIGluZGV4IHRvIHBsYWNlIHRoZSBjaGlsZCBpblxuICogQHJldHVybiB7UElYSS5EaXNwbGF5T2JqZWN0fSBUaGUgY2hpbGQgdGhhdCB3YXMgYWRkZWQuXG4gKi9cbkNvbnRhaW5lci5wcm90b3R5cGUuYWRkQ2hpbGRBdCA9IGZ1bmN0aW9uIChjaGlsZCwgaW5kZXgpXG57XG4gICAgaWYgKGluZGV4ID49IDAgJiYgaW5kZXggPD0gdGhpcy5jaGlsZHJlbi5sZW5ndGgpXG4gICAge1xuICAgICAgICBpZiAoY2hpbGQucGFyZW50KVxuICAgICAgICB7XG4gICAgICAgICAgICBjaGlsZC5wYXJlbnQucmVtb3ZlQ2hpbGQoY2hpbGQpO1xuICAgICAgICB9XG5cbiAgICAgICAgY2hpbGQucGFyZW50ID0gdGhpcztcblxuICAgICAgICB0aGlzLmNoaWxkcmVuLnNwbGljZShpbmRleCwgMCwgY2hpbGQpO1xuXG4gICAgICAgIC8vIFRPRE8gLSBsZXRzIGVpdGhlciBkbyBhbGwgY2FsbGJhY2tzIG9yIGFsbCBldmVudHMuLiBub3QgYm90aCFcbiAgICAgICAgdGhpcy5vbkNoaWxkcmVuQ2hhbmdlKGluZGV4KTtcbiAgICAgICAgY2hpbGQuZW1pdCgnYWRkZWQnLCB0aGlzKTtcblxuICAgICAgICByZXR1cm4gY2hpbGQ7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihjaGlsZCArICdhZGRDaGlsZEF0OiBUaGUgaW5kZXggJysgaW5kZXggKycgc3VwcGxpZWQgaXMgb3V0IG9mIGJvdW5kcyAnICsgdGhpcy5jaGlsZHJlbi5sZW5ndGgpO1xuICAgIH1cbn07XG5cbi8qKlxuICogU3dhcHMgdGhlIHBvc2l0aW9uIG9mIDIgRGlzcGxheSBPYmplY3RzIHdpdGhpbiB0aGlzIGNvbnRhaW5lci5cbiAqXG4gKiBAcGFyYW0gY2hpbGQge1BJWEkuRGlzcGxheU9iamVjdH1cbiAqIEBwYXJhbSBjaGlsZDIge1BJWEkuRGlzcGxheU9iamVjdH1cbiAqL1xuQ29udGFpbmVyLnByb3RvdHlwZS5zd2FwQ2hpbGRyZW4gPSBmdW5jdGlvbiAoY2hpbGQsIGNoaWxkMilcbntcbiAgICBpZiAoY2hpbGQgPT09IGNoaWxkMilcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB2YXIgaW5kZXgxID0gdGhpcy5nZXRDaGlsZEluZGV4KGNoaWxkKTtcbiAgICB2YXIgaW5kZXgyID0gdGhpcy5nZXRDaGlsZEluZGV4KGNoaWxkMik7XG5cbiAgICBpZiAoaW5kZXgxIDwgMCB8fCBpbmRleDIgPCAwKVxuICAgIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdzd2FwQ2hpbGRyZW46IEJvdGggdGhlIHN1cHBsaWVkIERpc3BsYXlPYmplY3RzIG11c3QgYmUgY2hpbGRyZW4gb2YgdGhlIGNhbGxlci4nKTtcbiAgICB9XG5cbiAgICB0aGlzLmNoaWxkcmVuW2luZGV4MV0gPSBjaGlsZDI7XG4gICAgdGhpcy5jaGlsZHJlbltpbmRleDJdID0gY2hpbGQ7XG4gICAgdGhpcy5vbkNoaWxkcmVuQ2hhbmdlKGluZGV4MSA8IGluZGV4MiA/IGluZGV4MSA6IGluZGV4Mik7XG59O1xuXG4vKipcbiAqIFJldHVybnMgdGhlIGluZGV4IHBvc2l0aW9uIG9mIGEgY2hpbGQgRGlzcGxheU9iamVjdCBpbnN0YW5jZVxuICpcbiAqIEBwYXJhbSBjaGlsZCB7UElYSS5EaXNwbGF5T2JqZWN0fSBUaGUgRGlzcGxheU9iamVjdCBpbnN0YW5jZSB0byBpZGVudGlmeVxuICogQHJldHVybiB7bnVtYmVyfSBUaGUgaW5kZXggcG9zaXRpb24gb2YgdGhlIGNoaWxkIGRpc3BsYXkgb2JqZWN0IHRvIGlkZW50aWZ5XG4gKi9cbkNvbnRhaW5lci5wcm90b3R5cGUuZ2V0Q2hpbGRJbmRleCA9IGZ1bmN0aW9uIChjaGlsZClcbntcbiAgICB2YXIgaW5kZXggPSB0aGlzLmNoaWxkcmVuLmluZGV4T2YoY2hpbGQpO1xuXG4gICAgaWYgKGluZGV4ID09PSAtMSlcbiAgICB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignVGhlIHN1cHBsaWVkIERpc3BsYXlPYmplY3QgbXVzdCBiZSBhIGNoaWxkIG9mIHRoZSBjYWxsZXInKTtcbiAgICB9XG5cbiAgICByZXR1cm4gaW5kZXg7XG59O1xuXG4vKipcbiAqIENoYW5nZXMgdGhlIHBvc2l0aW9uIG9mIGFuIGV4aXN0aW5nIGNoaWxkIGluIHRoZSBkaXNwbGF5IG9iamVjdCBjb250YWluZXJcbiAqXG4gKiBAcGFyYW0gY2hpbGQge1BJWEkuRGlzcGxheU9iamVjdH0gVGhlIGNoaWxkIERpc3BsYXlPYmplY3QgaW5zdGFuY2UgZm9yIHdoaWNoIHlvdSB3YW50IHRvIGNoYW5nZSB0aGUgaW5kZXggbnVtYmVyXG4gKiBAcGFyYW0gaW5kZXgge251bWJlcn0gVGhlIHJlc3VsdGluZyBpbmRleCBudW1iZXIgZm9yIHRoZSBjaGlsZCBkaXNwbGF5IG9iamVjdFxuICovXG5Db250YWluZXIucHJvdG90eXBlLnNldENoaWxkSW5kZXggPSBmdW5jdGlvbiAoY2hpbGQsIGluZGV4KVxue1xuICAgIGlmIChpbmRleCA8IDAgfHwgaW5kZXggPj0gdGhpcy5jaGlsZHJlbi5sZW5ndGgpXG4gICAge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RoZSBzdXBwbGllZCBpbmRleCBpcyBvdXQgb2YgYm91bmRzJyk7XG4gICAgfVxuXG4gICAgdmFyIGN1cnJlbnRJbmRleCA9IHRoaXMuZ2V0Q2hpbGRJbmRleChjaGlsZCk7XG5cbiAgICB1dGlscy5yZW1vdmVJdGVtcyh0aGlzLmNoaWxkcmVuLCBjdXJyZW50SW5kZXgsIDEpOyAvLyByZW1vdmUgZnJvbSBvbGQgcG9zaXRpb25cbiAgICB0aGlzLmNoaWxkcmVuLnNwbGljZShpbmRleCwgMCwgY2hpbGQpOyAvL2FkZCBhdCBuZXcgcG9zaXRpb25cbiAgICB0aGlzLm9uQ2hpbGRyZW5DaGFuZ2UoaW5kZXgpO1xufTtcblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBjaGlsZCBhdCB0aGUgc3BlY2lmaWVkIGluZGV4XG4gKlxuICogQHBhcmFtIGluZGV4IHtudW1iZXJ9IFRoZSBpbmRleCB0byBnZXQgdGhlIGNoaWxkIGF0XG4gKiBAcmV0dXJuIHtQSVhJLkRpc3BsYXlPYmplY3R9IFRoZSBjaGlsZCBhdCB0aGUgZ2l2ZW4gaW5kZXgsIGlmIGFueS5cbiAqL1xuQ29udGFpbmVyLnByb3RvdHlwZS5nZXRDaGlsZEF0ID0gZnVuY3Rpb24gKGluZGV4KVxue1xuICAgIGlmIChpbmRleCA8IDAgfHwgaW5kZXggPj0gdGhpcy5jaGlsZHJlbi5sZW5ndGgpXG4gICAge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2dldENoaWxkQXQ6IFN1cHBsaWVkIGluZGV4ICcgKyBpbmRleCArICcgZG9lcyBub3QgZXhpc3QgaW4gdGhlIGNoaWxkIGxpc3QsIG9yIHRoZSBzdXBwbGllZCBEaXNwbGF5T2JqZWN0IGlzIG5vdCBhIGNoaWxkIG9mIHRoZSBjYWxsZXInKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5jaGlsZHJlbltpbmRleF07XG59O1xuXG4vKipcbiAqIFJlbW92ZXMgYSBjaGlsZCBmcm9tIHRoZSBjb250YWluZXIuXG4gKlxuICogQHBhcmFtIGNoaWxkIHtQSVhJLkRpc3BsYXlPYmplY3R9IFRoZSBEaXNwbGF5T2JqZWN0IHRvIHJlbW92ZVxuICogQHJldHVybiB7UElYSS5EaXNwbGF5T2JqZWN0fSBUaGUgY2hpbGQgdGhhdCB3YXMgcmVtb3ZlZC5cbiAqL1xuQ29udGFpbmVyLnByb3RvdHlwZS5yZW1vdmVDaGlsZCA9IGZ1bmN0aW9uIChjaGlsZClcbntcbiAgICB2YXIgYXJndW1lbnRzTGVuZ3RoID0gYXJndW1lbnRzLmxlbmd0aDtcblxuICAgIC8vIGlmIHRoZXJlIGlzIG9ubHkgb25lIGFyZ3VtZW50IHdlIGNhbiBieXBhc3MgbG9vcGluZyB0aHJvdWdoIHRoZSB0aGVtXG4gICAgaWYoYXJndW1lbnRzTGVuZ3RoID4gMSlcbiAgICB7XG4gICAgICAgIC8vIGxvb3AgdGhyb3VnaCB0aGUgYXJndW1lbnRzIHByb3BlcnR5IGFuZCBhZGQgYWxsIGNoaWxkcmVuXG4gICAgICAgIC8vIHVzZSBpdCB0aGUgcmlnaHQgd2F5ICgubGVuZ3RoIGFuZCBbaV0pIHNvIHRoYXQgdGhpcyBmdW5jdGlvbiBjYW4gc3RpbGwgYmUgb3B0aW1pc2VkIGJ5IEpTIHJ1bnRpbWVzXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXJndW1lbnRzTGVuZ3RoOyBpKyspXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMucmVtb3ZlQ2hpbGQoIGFyZ3VtZW50c1tpXSApO1xuICAgICAgICB9XG4gICAgfSAgICAgXG4gICAgZWxzZVxuICAgIHsgICBcbiAgICAgICAgdmFyIGluZGV4ID0gdGhpcy5jaGlsZHJlbi5pbmRleE9mKGNoaWxkKTtcblxuICAgICAgICBpZiAoaW5kZXggPT09IC0xKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjaGlsZC5wYXJlbnQgPSBudWxsO1xuICAgICAgICB1dGlscy5yZW1vdmVJdGVtcyh0aGlzLmNoaWxkcmVuLCBpbmRleCwgMSk7XG5cbiAgICAgICAgLy8gVE9ETyAtIGxldHMgZWl0aGVyIGRvIGFsbCBjYWxsYmFja3Mgb3IgYWxsIGV2ZW50cy4uIG5vdCBib3RoIVxuICAgICAgICB0aGlzLm9uQ2hpbGRyZW5DaGFuZ2UoaW5kZXgpO1xuICAgICAgICBjaGlsZC5lbWl0KCdyZW1vdmVkJywgdGhpcyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGNoaWxkO1xufTtcblxuLyoqXG4gKiBSZW1vdmVzIGEgY2hpbGQgZnJvbSB0aGUgc3BlY2lmaWVkIGluZGV4IHBvc2l0aW9uLlxuICpcbiAqIEBwYXJhbSBpbmRleCB7bnVtYmVyfSBUaGUgaW5kZXggdG8gZ2V0IHRoZSBjaGlsZCBmcm9tXG4gKiBAcmV0dXJuIHtQSVhJLkRpc3BsYXlPYmplY3R9IFRoZSBjaGlsZCB0aGF0IHdhcyByZW1vdmVkLlxuICovXG5Db250YWluZXIucHJvdG90eXBlLnJlbW92ZUNoaWxkQXQgPSBmdW5jdGlvbiAoaW5kZXgpXG57XG4gICAgdmFyIGNoaWxkID0gdGhpcy5nZXRDaGlsZEF0KGluZGV4KTtcblxuICAgIGNoaWxkLnBhcmVudCA9IG51bGw7XG4gICAgdXRpbHMucmVtb3ZlSXRlbXModGhpcy5jaGlsZHJlbiwgaW5kZXgsIDEpO1xuXG4gICAgLy8gVE9ETyAtIGxldHMgZWl0aGVyIGRvIGFsbCBjYWxsYmFja3Mgb3IgYWxsIGV2ZW50cy4uIG5vdCBib3RoIVxuICAgIHRoaXMub25DaGlsZHJlbkNoYW5nZShpbmRleCk7XG4gICAgY2hpbGQuZW1pdCgncmVtb3ZlZCcsIHRoaXMpO1xuXG4gICAgcmV0dXJuIGNoaWxkO1xufTtcblxuLyoqXG4gKiBSZW1vdmVzIGFsbCBjaGlsZHJlbiBmcm9tIHRoaXMgY29udGFpbmVyIHRoYXQgYXJlIHdpdGhpbiB0aGUgYmVnaW4gYW5kIGVuZCBpbmRleGVzLlxuICpcbiAqIEBwYXJhbSBiZWdpbkluZGV4IHtudW1iZXJ9IFRoZSBiZWdpbm5pbmcgcG9zaXRpb24uIERlZmF1bHQgdmFsdWUgaXMgMC5cbiAqIEBwYXJhbSBlbmRJbmRleCB7bnVtYmVyfSBUaGUgZW5kaW5nIHBvc2l0aW9uLiBEZWZhdWx0IHZhbHVlIGlzIHNpemUgb2YgdGhlIGNvbnRhaW5lci5cbiAqL1xuQ29udGFpbmVyLnByb3RvdHlwZS5yZW1vdmVDaGlsZHJlbiA9IGZ1bmN0aW9uIChiZWdpbkluZGV4LCBlbmRJbmRleClcbntcbiAgICB2YXIgYmVnaW4gPSBiZWdpbkluZGV4IHx8IDA7XG4gICAgdmFyIGVuZCA9IHR5cGVvZiBlbmRJbmRleCA9PT0gJ251bWJlcicgPyBlbmRJbmRleCA6IHRoaXMuY2hpbGRyZW4ubGVuZ3RoO1xuICAgIHZhciByYW5nZSA9IGVuZCAtIGJlZ2luO1xuICAgIHZhciByZW1vdmVkLCBpO1xuXG4gICAgaWYgKHJhbmdlID4gMCAmJiByYW5nZSA8PSBlbmQpXG4gICAge1xuICAgICAgICByZW1vdmVkID0gdGhpcy5jaGlsZHJlbi5zcGxpY2UoYmVnaW4sIHJhbmdlKTtcblxuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgcmVtb3ZlZC5sZW5ndGg7ICsraSlcbiAgICAgICAge1xuICAgICAgICAgICAgcmVtb3ZlZFtpXS5wYXJlbnQgPSBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5vbkNoaWxkcmVuQ2hhbmdlKGJlZ2luSW5kZXgpO1xuXG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCByZW1vdmVkLmxlbmd0aDsgKytpKVxuICAgICAgICB7XG4gICAgICAgICAgICByZW1vdmVkW2ldLmVtaXQoJ3JlbW92ZWQnLCB0aGlzKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiByZW1vdmVkO1xuICAgIH1cbiAgICBlbHNlIGlmIChyYW5nZSA9PT0gMCAmJiB0aGlzLmNoaWxkcmVuLmxlbmd0aCA9PT0gMClcbiAgICB7XG4gICAgICAgIHJldHVybiBbXTtcbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ3JlbW92ZUNoaWxkcmVuOiBudW1lcmljIHZhbHVlcyBhcmUgb3V0c2lkZSB0aGUgYWNjZXB0YWJsZSByYW5nZS4nKTtcbiAgICB9XG59O1xuXG4vKipcbiAqIFVzZWZ1bCBmdW5jdGlvbiB0aGF0IHJldHVybnMgYSB0ZXh0dXJlIG9mIHRoZSBkaXNwbGF5IG9iamVjdCB0aGF0IGNhbiB0aGVuIGJlIHVzZWQgdG8gY3JlYXRlIHNwcml0ZXNcbiAqIFRoaXMgY2FuIGJlIHF1aXRlIHVzZWZ1bCBpZiB5b3VyIGRpc3BsYXlPYmplY3QgaXMgc3RhdGljIC8gY29tcGxpY2F0ZWQgYW5kIG5lZWRzIHRvIGJlIHJldXNlZCBtdWx0aXBsZSB0aW1lcy5cbiAqXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuQ2FudmFzUmVuZGVyZXJ8UElYSS5XZWJHTFJlbmRlcmVyfSBUaGUgcmVuZGVyZXIgdXNlZCB0byBnZW5lcmF0ZSB0aGUgdGV4dHVyZS5cbiAqIEBwYXJhbSByZXNvbHV0aW9uIHtudW1iZXJ9IFRoZSByZXNvbHV0aW9uIG9mIHRoZSB0ZXh0dXJlIGJlaW5nIGdlbmVyYXRlZFxuICogQHBhcmFtIHNjYWxlTW9kZSB7bnVtYmVyfSBTZWUge0BsaW5rIFBJWEkuU0NBTEVfTU9ERVN9IGZvciBwb3NzaWJsZSB2YWx1ZXNcbiAqIEByZXR1cm4ge1BJWEkuVGV4dHVyZX0gYSB0ZXh0dXJlIG9mIHRoZSBkaXNwbGF5IG9iamVjdFxuICovXG5Db250YWluZXIucHJvdG90eXBlLmdlbmVyYXRlVGV4dHVyZSA9IGZ1bmN0aW9uIChyZW5kZXJlciwgcmVzb2x1dGlvbiwgc2NhbGVNb2RlKVxue1xuICAgIHZhciBib3VuZHMgPSB0aGlzLmdldExvY2FsQm91bmRzKCk7XG5cbiAgICB2YXIgcmVuZGVyVGV4dHVyZSA9IG5ldyBSZW5kZXJUZXh0dXJlKHJlbmRlcmVyLCBib3VuZHMud2lkdGggfCAwLCBib3VuZHMuaGVpZ2h0IHwgMCwgc2NhbGVNb2RlLCByZXNvbHV0aW9uKTtcblxuICAgIF90ZW1wTWF0cml4LnR4ID0gLWJvdW5kcy54O1xuICAgIF90ZW1wTWF0cml4LnR5ID0gLWJvdW5kcy55O1xuXG4gICAgcmVuZGVyVGV4dHVyZS5yZW5kZXIodGhpcywgX3RlbXBNYXRyaXgpO1xuXG4gICAgcmV0dXJuIHJlbmRlclRleHR1cmU7XG59O1xuXG4vKlxuICogVXBkYXRlcyB0aGUgdHJhbnNmb3JtIG9uIGFsbCBjaGlsZHJlbiBvZiB0aGlzIGNvbnRhaW5lciBmb3IgcmVuZGVyaW5nXG4gKlxuICogQHByaXZhdGVcbiAqL1xuQ29udGFpbmVyLnByb3RvdHlwZS51cGRhdGVUcmFuc2Zvcm0gPSBmdW5jdGlvbiAoKVxue1xuICAgIGlmICghdGhpcy52aXNpYmxlKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuZGlzcGxheU9iamVjdFVwZGF0ZVRyYW5zZm9ybSgpO1xuXG4gICAgZm9yICh2YXIgaSA9IDAsIGogPSB0aGlzLmNoaWxkcmVuLmxlbmd0aDsgaSA8IGo7ICsraSlcbiAgICB7XG4gICAgICAgIHRoaXMuY2hpbGRyZW5baV0udXBkYXRlVHJhbnNmb3JtKCk7XG4gICAgfVxuXG4gICAgdGhpcy5kaXJ0eVRyYW5zZm9ybSA9IGZhbHNlO1xufTtcblxuLy8gcGVyZm9ybWFuY2UgaW5jcmVhc2UgdG8gYXZvaWQgdXNpbmcgY2FsbC4uICgxMHggZmFzdGVyKVxuQ29udGFpbmVyLnByb3RvdHlwZS5jb250YWluZXJVcGRhdGVUcmFuc2Zvcm0gPSBDb250YWluZXIucHJvdG90eXBlLnVwZGF0ZVRyYW5zZm9ybTtcblxuLyoqXG4gKiBSZXRyaWV2ZXMgdGhlIGJvdW5kcyBvZiB0aGUgQ29udGFpbmVyIGFzIGEgcmVjdGFuZ2xlLiBUaGUgYm91bmRzIGNhbGN1bGF0aW9uIHRha2VzIGFsbCB2aXNpYmxlIGNoaWxkcmVuIGludG8gY29uc2lkZXJhdGlvbi5cbiAqXG4gKiBAcmV0dXJuIHtQSVhJLlJlY3RhbmdsZX0gVGhlIHJlY3Rhbmd1bGFyIGJvdW5kaW5nIGFyZWFcbiAqL1xuQ29udGFpbmVyLnByb3RvdHlwZS5nZXRCb3VuZHMgPSBmdW5jdGlvbiAoKVxue1xuICAgIGlmKCF0aGlzLl9jdXJyZW50Qm91bmRzKVxuICAgIHtcblxuICAgICAgICBpZiAodGhpcy5jaGlsZHJlbi5sZW5ndGggPT09IDApXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiBtYXRoLlJlY3RhbmdsZS5FTVBUWTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFRPRE8gdGhlIGJvdW5kcyBoYXZlIGFscmVhZHkgYmVlbiBjYWxjdWxhdGVkIHRoaXMgcmVuZGVyIHNlc3Npb24gc28gcmV0dXJuIHdoYXQgd2UgaGF2ZVxuXG4gICAgICAgIHZhciBtaW5YID0gSW5maW5pdHk7XG4gICAgICAgIHZhciBtaW5ZID0gSW5maW5pdHk7XG5cbiAgICAgICAgdmFyIG1heFggPSAtSW5maW5pdHk7XG4gICAgICAgIHZhciBtYXhZID0gLUluZmluaXR5O1xuXG4gICAgICAgIHZhciBjaGlsZEJvdW5kcztcbiAgICAgICAgdmFyIGNoaWxkTWF4WDtcbiAgICAgICAgdmFyIGNoaWxkTWF4WTtcblxuICAgICAgICB2YXIgY2hpbGRWaXNpYmxlID0gZmFsc2U7XG5cbiAgICAgICAgZm9yICh2YXIgaSA9IDAsIGogPSB0aGlzLmNoaWxkcmVuLmxlbmd0aDsgaSA8IGo7ICsraSlcbiAgICAgICAge1xuICAgICAgICAgICAgdmFyIGNoaWxkID0gdGhpcy5jaGlsZHJlbltpXTtcblxuICAgICAgICAgICAgaWYgKCFjaGlsZC52aXNpYmxlKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjaGlsZFZpc2libGUgPSB0cnVlO1xuXG4gICAgICAgICAgICBjaGlsZEJvdW5kcyA9IHRoaXMuY2hpbGRyZW5baV0uZ2V0Qm91bmRzKCk7XG5cbiAgICAgICAgICAgIG1pblggPSBtaW5YIDwgY2hpbGRCb3VuZHMueCA/IG1pblggOiBjaGlsZEJvdW5kcy54O1xuICAgICAgICAgICAgbWluWSA9IG1pblkgPCBjaGlsZEJvdW5kcy55ID8gbWluWSA6IGNoaWxkQm91bmRzLnk7XG5cbiAgICAgICAgICAgIGNoaWxkTWF4WCA9IGNoaWxkQm91bmRzLndpZHRoICsgY2hpbGRCb3VuZHMueDtcbiAgICAgICAgICAgIGNoaWxkTWF4WSA9IGNoaWxkQm91bmRzLmhlaWdodCArIGNoaWxkQm91bmRzLnk7XG5cbiAgICAgICAgICAgIG1heFggPSBtYXhYID4gY2hpbGRNYXhYID8gbWF4WCA6IGNoaWxkTWF4WDtcbiAgICAgICAgICAgIG1heFkgPSBtYXhZID4gY2hpbGRNYXhZID8gbWF4WSA6IGNoaWxkTWF4WTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghY2hpbGRWaXNpYmxlKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gbWF0aC5SZWN0YW5nbGUuRU1QVFk7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgYm91bmRzID0gdGhpcy5fYm91bmRzO1xuXG4gICAgICAgIGJvdW5kcy54ID0gbWluWDtcbiAgICAgICAgYm91bmRzLnkgPSBtaW5ZO1xuICAgICAgICBib3VuZHMud2lkdGggPSBtYXhYIC0gbWluWDtcbiAgICAgICAgYm91bmRzLmhlaWdodCA9IG1heFkgLSBtaW5ZO1xuXG4gICAgICAgIHRoaXMuX2N1cnJlbnRCb3VuZHMgPSBib3VuZHM7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuX2N1cnJlbnRCb3VuZHM7XG59O1xuXG5Db250YWluZXIucHJvdG90eXBlLmNvbnRhaW5lckdldEJvdW5kcyA9IENvbnRhaW5lci5wcm90b3R5cGUuZ2V0Qm91bmRzO1xuXG4vKipcbiAqIFJldHJpZXZlcyB0aGUgbm9uLWdsb2JhbCBsb2NhbCBib3VuZHMgb2YgdGhlIENvbnRhaW5lciBhcyBhIHJlY3RhbmdsZS5cbiAqIFRoZSBjYWxjdWxhdGlvbiB0YWtlcyBhbGwgdmlzaWJsZSBjaGlsZHJlbiBpbnRvIGNvbnNpZGVyYXRpb24uXG4gKlxuICogQHJldHVybiB7UElYSS5SZWN0YW5nbGV9IFRoZSByZWN0YW5ndWxhciBib3VuZGluZyBhcmVhXG4gKi9cbkNvbnRhaW5lci5wcm90b3R5cGUuZ2V0TG9jYWxCb3VuZHMgPSBmdW5jdGlvbiAoKVxue1xuICAgIHZhciBtYXRyaXhDYWNoZSA9IHRoaXMud29ybGRUcmFuc2Zvcm07XG5cbiAgICB0aGlzLndvcmxkVHJhbnNmb3JtID0gbWF0aC5NYXRyaXguSURFTlRJVFk7XG5cbiAgICBmb3IgKHZhciBpID0gMCwgaiA9IHRoaXMuY2hpbGRyZW4ubGVuZ3RoOyBpIDwgajsgKytpKVxuICAgIHtcbiAgICAgICAgdGhpcy5jaGlsZHJlbltpXS51cGRhdGVUcmFuc2Zvcm0oKTtcbiAgICB9XG5cbiAgICB0aGlzLndvcmxkVHJhbnNmb3JtID0gbWF0cml4Q2FjaGU7XG5cbiAgICB0aGlzLl9jdXJyZW50Qm91bmRzID0gbnVsbDtcblxuICAgIHJldHVybiB0aGlzLmdldEJvdW5kcyggbWF0aC5NYXRyaXguSURFTlRJVFkgKTtcbn07XG5cbi8qKlxuICogUmVuZGVycyB0aGUgb2JqZWN0IHVzaW5nIHRoZSBXZWJHTCByZW5kZXJlclxuICpcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5XZWJHTFJlbmRlcmVyfSBUaGUgcmVuZGVyZXJcbiAqL1xuQ29udGFpbmVyLnByb3RvdHlwZS5yZW5kZXJXZWJHTCA9IGZ1bmN0aW9uIChyZW5kZXJlcilcbntcblxuICAgIC8vIGlmIHRoZSBvYmplY3QgaXMgbm90IHZpc2libGUgb3IgdGhlIGFscGhhIGlzIDAgdGhlbiBubyBuZWVkIHRvIHJlbmRlciB0aGlzIGVsZW1lbnRcbiAgICBpZiAoIXRoaXMudmlzaWJsZSB8fCB0aGlzLndvcmxkQWxwaGEgPD0gMCB8fCAhdGhpcy5yZW5kZXJhYmxlKVxuICAgIHtcbiAgICAgIFxuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFyIGksIGo7XG5cbiAgICAvLyBkbyBhIHF1aWNrIGNoZWNrIHRvIHNlZSBpZiB0aGlzIGVsZW1lbnQgaGFzIGEgbWFzayBvciBhIGZpbHRlci5cbiAgICBpZiAodGhpcy5fbWFzayB8fCB0aGlzLl9maWx0ZXJzKVxuICAgIHtcbiAgICAgICAgcmVuZGVyZXIuY3VycmVudFJlbmRlcmVyLmZsdXNoKCk7XG5cbiAgICAgICAgLy8gcHVzaCBmaWx0ZXIgZmlyc3QgYXMgd2UgbmVlZCB0byBlbnN1cmUgdGhlIHN0ZW5jaWwgYnVmZmVyIGlzIGNvcnJlY3QgZm9yIGFueSBtYXNraW5nXG4gICAgICAgIGlmICh0aGlzLl9maWx0ZXJzICYmIHRoaXMuX2ZpbHRlcnMubGVuZ3RoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLnB1c2hGaWx0ZXIodGhpcywgdGhpcy5fZmlsdGVycyk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5fbWFzaylcbiAgICAgICAge1xuICAgICAgICAgICAgcmVuZGVyZXIubWFza01hbmFnZXIucHVzaE1hc2sodGhpcywgdGhpcy5fbWFzayk7XG4gICAgICAgIH1cblxuICAgICAgICByZW5kZXJlci5jdXJyZW50UmVuZGVyZXIuc3RhcnQoKTtcblxuICAgICAgICAvLyBhZGQgdGhpcyBvYmplY3QgdG8gdGhlIGJhdGNoLCBvbmx5IHJlbmRlcmVkIGlmIGl0IGhhcyBhIHRleHR1cmUuXG4gICAgICAgIHRoaXMuX3JlbmRlcldlYkdMKHJlbmRlcmVyKTtcblxuICAgICAgICAvLyBub3cgbG9vcCB0aHJvdWdoIHRoZSBjaGlsZHJlbiBhbmQgbWFrZSBzdXJlIHRoZXkgZ2V0IHJlbmRlcmVkXG4gICAgICAgIGZvciAoaSA9IDAsIGogPSB0aGlzLmNoaWxkcmVuLmxlbmd0aDsgaSA8IGo7IGkrKylcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5jaGlsZHJlbltpXS5yZW5kZXJXZWJHTChyZW5kZXJlcik7XG4gICAgICAgIH1cblxuICAgICAgICByZW5kZXJlci5jdXJyZW50UmVuZGVyZXIuZmx1c2goKTtcblxuICAgICAgICBpZiAodGhpcy5fbWFzaylcbiAgICAgICAge1xuICAgICAgICAgICAgcmVuZGVyZXIubWFza01hbmFnZXIucG9wTWFzayh0aGlzLCB0aGlzLl9tYXNrKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLl9maWx0ZXJzKVxuICAgICAgICB7XG4gICAgICAgICAgICByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLnBvcEZpbHRlcigpO1xuXG4gICAgICAgIH1cbiAgICAgICAgcmVuZGVyZXIuY3VycmVudFJlbmRlcmVyLnN0YXJ0KCk7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHRoaXMuX3JlbmRlcldlYkdMKHJlbmRlcmVyKTtcblxuICAgICAgICAvLyBzaW1wbGUgcmVuZGVyIGNoaWxkcmVuIVxuICAgICAgICBmb3IgKGkgPSAwLCBqID0gdGhpcy5jaGlsZHJlbi5sZW5ndGg7IGkgPCBqOyArK2kpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuY2hpbGRyZW5baV0ucmVuZGVyV2ViR0wocmVuZGVyZXIpO1xuICAgICAgICB9XG4gICAgfVxufTtcblxuLyoqXG4gKiBUbyBiZSBvdmVycmlkZGVuIGJ5IHRoZSBzdWJjbGFzc1xuICpcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5XZWJHTFJlbmRlcmVyfSBUaGUgcmVuZGVyZXJcbiAqIEBwcml2YXRlXG4gKi9cbkNvbnRhaW5lci5wcm90b3R5cGUuX3JlbmRlcldlYkdMID0gZnVuY3Rpb24gKHJlbmRlcmVyKSAvLyBqc2hpbnQgdW51c2VkOmZhbHNlXG57XG4gICAgLy8gdGhpcyBpcyB3aGVyZSBjb250ZW50IGl0c2VsZiBnZXRzIHJlbmRlcmVkLi4uXG59O1xuXG4vKipcbiAqIFRvIGJlIG92ZXJyaWRkZW4gYnkgdGhlIHN1YmNsYXNzXG4gKlxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLkNhbnZhc1JlbmRlcmVyfSBUaGUgcmVuZGVyZXJcbiAqIEBwcml2YXRlXG4gKi9cbkNvbnRhaW5lci5wcm90b3R5cGUuX3JlbmRlckNhbnZhcyA9IGZ1bmN0aW9uIChyZW5kZXJlcikgLy8ganNoaW50IHVudXNlZDpmYWxzZVxue1xuICAgIC8vIHRoaXMgaXMgd2hlcmUgY29udGVudCBpdHNlbGYgZ2V0cyByZW5kZXJlZC4uLlxufTtcblxuXG4vKipcbiAqIFJlbmRlcnMgdGhlIG9iamVjdCB1c2luZyB0aGUgQ2FudmFzIHJlbmRlcmVyXG4gKlxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLkNhbnZhc1JlbmRlcmVyfSBUaGUgcmVuZGVyZXJcbiAqL1xuQ29udGFpbmVyLnByb3RvdHlwZS5yZW5kZXJDYW52YXMgPSBmdW5jdGlvbiAocmVuZGVyZXIpXG57XG4gICAgLy8gaWYgbm90IHZpc2libGUgb3IgdGhlIGFscGhhIGlzIDAgdGhlbiBubyBuZWVkIHRvIHJlbmRlciB0aGlzXG4gICAgaWYgKCF0aGlzLnZpc2libGUgfHwgdGhpcy5hbHBoYSA8PSAwIHx8ICF0aGlzLnJlbmRlcmFibGUpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX21hc2spXG4gICAge1xuICAgICAgICByZW5kZXJlci5tYXNrTWFuYWdlci5wdXNoTWFzayh0aGlzLl9tYXNrLCByZW5kZXJlcik7XG4gICAgfVxuXG4gICAgdGhpcy5fcmVuZGVyQ2FudmFzKHJlbmRlcmVyKTtcbiAgICBmb3IgKHZhciBpID0gMCwgaiA9IHRoaXMuY2hpbGRyZW4ubGVuZ3RoOyBpIDwgajsgKytpKVxuICAgIHtcbiAgICAgICAgdGhpcy5jaGlsZHJlbltpXS5yZW5kZXJDYW52YXMocmVuZGVyZXIpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLl9tYXNrKVxuICAgIHtcbiAgICAgICAgcmVuZGVyZXIubWFza01hbmFnZXIucG9wTWFzayhyZW5kZXJlcik7XG4gICAgfVxufTtcblxuLyoqXG4gKiBEZXN0cm95cyB0aGUgY29udGFpbmVyXG4gKiBAcGFyYW0gW2Rlc3Ryb3lDaGlsZHJlbj1mYWxzZV0ge2Jvb2xlYW59IGlmIHNldCB0byB0cnVlLCBhbGwgdGhlIGNoaWxkcmVuIHdpbGwgaGF2ZSB0aGVpciBkZXN0cm95IG1ldGhvZCBjYWxsZWQgYXMgd2VsbFxuICovXG5Db250YWluZXIucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoZGVzdHJveUNoaWxkcmVuKVxue1xuICAgIERpc3BsYXlPYmplY3QucHJvdG90eXBlLmRlc3Ryb3kuY2FsbCh0aGlzKTtcblxuICAgIGlmIChkZXN0cm95Q2hpbGRyZW4pXG4gICAge1xuICAgICAgICBmb3IgKHZhciBpID0gMCwgaiA9IHRoaXMuY2hpbGRyZW4ubGVuZ3RoOyBpIDwgajsgKytpKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmNoaWxkcmVuW2ldLmRlc3Ryb3koZGVzdHJveUNoaWxkcmVuKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMucmVtb3ZlQ2hpbGRyZW4oKTtcblxuICAgIHRoaXMuY2hpbGRyZW4gPSBudWxsO1xufTtcbiIsInZhciBtYXRoID0gcmVxdWlyZSgnLi4vbWF0aCcpLFxuICAgIFJlbmRlclRleHR1cmUgPSByZXF1aXJlKCcuLi90ZXh0dXJlcy9SZW5kZXJUZXh0dXJlJyksXG4gICAgRXZlbnRFbWl0dGVyID0gcmVxdWlyZSgnZXZlbnRlbWl0dGVyMycpLFxuICAgIENPTlNUID0gcmVxdWlyZSgnLi4vY29uc3QnKSxcbiAgICBfdGVtcE1hdHJpeCA9IG5ldyBtYXRoLk1hdHJpeCgpLFxuICAgIF90ZW1wRGlzcGxheU9iamVjdFBhcmVudCA9IHt3b3JsZFRyYW5zZm9ybTpuZXcgbWF0aC5NYXRyaXgoKSwgd29ybGRBbHBoYToxLCBjaGlsZHJlbjpbXX07XG5cblxuLyoqXG4gKiBUaGUgYmFzZSBjbGFzcyBmb3IgYWxsIG9iamVjdHMgdGhhdCBhcmUgcmVuZGVyZWQgb24gdGhlIHNjcmVlbi5cbiAqIFRoaXMgaXMgYW4gYWJzdHJhY3QgY2xhc3MgYW5kIHNob3VsZCBub3QgYmUgdXNlZCBvbiBpdHMgb3duIHJhdGhlciBpdCBzaG91bGQgYmUgZXh0ZW5kZWQuXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBFdmVudEVtaXR0ZXJcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKi9cbmZ1bmN0aW9uIERpc3BsYXlPYmplY3QoKVxue1xuICAgIEV2ZW50RW1pdHRlci5jYWxsKHRoaXMpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGNvb3JkaW5hdGUgb2YgdGhlIG9iamVjdCByZWxhdGl2ZSB0byB0aGUgbG9jYWwgY29vcmRpbmF0ZXMgb2YgdGhlIHBhcmVudC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuUG9pbnR9XG4gICAgICovXG4gICAgdGhpcy5wb3NpdGlvbiA9IG5ldyBtYXRoLlBvaW50KCk7XG4gICAgdGhpcy5fcG9zaXRpb24gPSBuZXcgQ2FjaGVQb2ludCh0aGlzKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBzY2FsZSBmYWN0b3Igb2YgdGhlIG9iamVjdC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuUG9pbnR9XG4gICAgICovXG4gICAgdGhpcy5zY2FsZSA9IG5ldyBtYXRoLlBvaW50KDEsIDEpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHBpdm90IHBvaW50IG9mIHRoZSBkaXNwbGF5T2JqZWN0IHRoYXQgaXQgcm90YXRlcyBhcm91bmRcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuUG9pbnR9XG4gICAgICovXG4gICAgdGhpcy5waXZvdCA9IG5ldyBtYXRoLlBvaW50KDAsIDApO1xuXG5cbiAgICAvKipcbiAgICAgKiBUaGUgc2tldyBmYWN0b3IgZm9yIHRoZSBvYmplY3QgaW4gcmFkaWFucy5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuUG9pbnR9XG4gICAgICovXG4gICAgdGhpcy5za2V3ID0gbmV3IG1hdGguUG9pbnQoMCwgMCk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgcm90YXRpb24gb2YgdGhlIG9iamVjdCBpbiByYWRpYW5zLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMuX3JvdGF0aW9uID0gMDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBvcGFjaXR5IG9mIHRoZSBvYmplY3QuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy5hbHBoYSA9IDE7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgdmlzaWJpbGl0eSBvZiB0aGUgb2JqZWN0LiBJZiBmYWxzZSB0aGUgb2JqZWN0IHdpbGwgbm90IGJlIGRyYXduLCBhbmRcbiAgICAgKiB0aGUgdXBkYXRlVHJhbnNmb3JtIGZ1bmN0aW9uIHdpbGwgbm90IGJlIGNhbGxlZC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICovXG4gICAgdGhpcy52aXNpYmxlID0gdHJ1ZTtcblxuICAgIC8qKlxuICAgICAqIENhbiB0aGlzIG9iamVjdCBiZSByZW5kZXJlZCwgaWYgZmFsc2UgdGhlIG9iamVjdCB3aWxsIG5vdCBiZSBkcmF3biBidXQgdGhlIHVwZGF0ZVRyYW5zZm9ybVxuICAgICAqIG1ldGhvZHMgd2lsbCBzdGlsbCBiZSBjYWxsZWQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqL1xuICAgIHRoaXMucmVuZGVyYWJsZSA9IHRydWU7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgZGlzcGxheSBvYmplY3QgY29udGFpbmVyIHRoYXQgY29udGFpbnMgdGhpcyBkaXNwbGF5IG9iamVjdC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuQ29udGFpbmVyfVxuICAgICAqIEByZWFkT25seVxuICAgICAqL1xuICAgIHRoaXMucGFyZW50ID0gbnVsbDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBtdWx0aXBsaWVkIGFscGhhIG9mIHRoZSBkaXNwbGF5T2JqZWN0XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQHJlYWRPbmx5XG4gICAgICovXG4gICAgdGhpcy53b3JsZEFscGhhID0gMTtcblxuICAgIC8qKlxuICAgICAqIEN1cnJlbnQgdHJhbnNmb3JtIG9mIHRoZSBvYmplY3QgYmFzZWQgb24gd29ybGQgKHBhcmVudCkgZmFjdG9yc1xuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5NYXRyaXh9XG4gICAgICogQHJlYWRPbmx5XG4gICAgICovXG4gICAgdGhpcy53b3JsZFRyYW5zZm9ybSA9IG5ldyBtYXRoLk1hdHJpeCgpO1xuICAgIHRoaXMubG9jYWxUcmFuc2Zvcm0gPSBuZXcgbWF0aC5NYXRyaXgoKTtcblxuXG4gICAgLyoqXG4gICAgICogVGhlIGFyZWEgdGhlIGZpbHRlciBpcyBhcHBsaWVkIHRvLiBUaGlzIGlzIHVzZWQgYXMgbW9yZSBvZiBhbiBvcHRpbWlzYXRpb25cbiAgICAgKiByYXRoZXIgdGhhbiBmaWd1cmluZyBvdXQgdGhlIGRpbWVuc2lvbnMgb2YgdGhlIGRpc3BsYXlPYmplY3QgZWFjaCBmcmFtZSB5b3UgY2FuIHNldCB0aGlzIHJlY3RhbmdsZVxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5SZWN0YW5nbGV9XG4gICAgICovXG4gICAgdGhpcy5maWx0ZXJBcmVhID0gbnVsbDtcblxuICAgIC8qKlxuICAgICAqIGNhY2hlZCBzaW4gcm90YXRpb25cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX3NyID0gMDtcblxuICAgIC8qKlxuICAgICAqIGNhY2hlZCBjb3Mgcm90YXRpb25cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX2NyID0gMTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBvcmlnaW5hbCwgY2FjaGVkIGJvdW5kcyBvZiB0aGUgb2JqZWN0XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlJlY3RhbmdsZX1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX2JvdW5kcyA9IG5ldyBtYXRoLlJlY3RhbmdsZSgwLCAwLCAxLCAxKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBtb3N0IHVwLXRvLWRhdGUgYm91bmRzIG9mIHRoZSBvYmplY3RcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuUmVjdGFuZ2xlfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fY3VycmVudEJvdW5kcyA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgb3JpZ2luYWwsIGNhY2hlZCBtYXNrIG9mIHRoZSBvYmplY3RcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuUmVjdGFuZ2xlfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fbWFzayA9IG51bGw7XG5cbiAgICB0aGlzLmRpcnR5VHJhbnNmb3JtID0gdHJ1ZTtcbn1cblxuLy8gY29uc3RydWN0b3JcbkRpc3BsYXlPYmplY3QucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShFdmVudEVtaXR0ZXIucHJvdG90eXBlKTtcbkRpc3BsYXlPYmplY3QucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gRGlzcGxheU9iamVjdDtcbm1vZHVsZS5leHBvcnRzID0gRGlzcGxheU9iamVjdDtcblxudmFyIENhY2hlUG9pbnQgPSBmdW5jdGlvbihkb2Mpe1xuICAgIFxuICAgIHRoaXMuZG9jID0gZG9jO1xuXG4gICAgdGhpcy54ID0gMDtcbiAgICB0aGlzLnkgPSAwO1xufVxuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhDYWNoZVBvaW50LnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFRoZSBwb3NpdGlvbiBvZiB0aGUgZGlzcGxheU9iamVjdCBvbiB0aGUgeCBheGlzIHJlbGF0aXZlIHRvIHRoZSBsb2NhbCBjb29yZGluYXRlcyBvZiB0aGUgcGFyZW50LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLkRpc3BsYXlPYmplY3QjXG4gICAgICovXG4gICAgeDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmRvYy5wb3NpdGlvbi54O1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5kb2MucG9zaXRpb24ueCA9IHZhbHVlO1xuICAgICAgICAgICAgdGhpcy5kb2MuZGlydHlUcmFuc2Zvcm0gPSB0cnVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIHk6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5kb2MucG9zaWl0b24ueTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuZG9jLnBvc2l0aW9uLnkgPSB2YWx1ZTtcbiAgICAgICAgICAgIHRoaXMuZG9jLmRpcnR5VHJhbnNmb3JtID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuXG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKERpc3BsYXlPYmplY3QucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogVGhlIHBvc2l0aW9uIG9mIHRoZSBkaXNwbGF5T2JqZWN0IG9uIHRoZSB4IGF4aXMgcmVsYXRpdmUgdG8gdGhlIGxvY2FsIGNvb3JkaW5hdGVzIG9mIHRoZSBwYXJlbnQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuRGlzcGxheU9iamVjdCNcbiAgICAgKi9cbiAgICB4OiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMucG9zaXRpb24ueDtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMucG9zaXRpb24ueCA9IHZhbHVlO1xuICAgICAgICAgICAgdGhpcy5kaXJ0eVRyYW5zZm9ybSA9IHRydWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVGhlIHBvc2l0aW9uIG9mIHRoZSBkaXNwbGF5T2JqZWN0IG9uIHRoZSB5IGF4aXMgcmVsYXRpdmUgdG8gdGhlIGxvY2FsIGNvb3JkaW5hdGVzIG9mIHRoZSBwYXJlbnQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuRGlzcGxheU9iamVjdCNcbiAgICAgKi9cbiAgICB5OiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMucG9zaXRpb24ueTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMucG9zaXRpb24ueSA9IHZhbHVlO1xuICAgICAgICAgICAgdGhpcy5kaXJ0eVRyYW5zZm9ybSA9IHRydWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgc2NhbGVYOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuc2NhbGUueDtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuc2NhbGUueCA9IHZhbHVlO1xuICAgICAgICAgICAgdGhpcy5kaXJ0eVRyYW5zZm9ybSA9IHRydWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVGhlIHBvc2l0aW9uIG9mIHRoZSBkaXNwbGF5T2JqZWN0IG9uIHRoZSB5IGF4aXMgcmVsYXRpdmUgdG8gdGhlIGxvY2FsIGNvb3JkaW5hdGVzIG9mIHRoZSBwYXJlbnQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuRGlzcGxheU9iamVjdCNcbiAgICAgKi9cbiAgICBzY2FsZVk6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5zY2FsZS55O1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5zY2FsZS55ID0gdmFsdWU7XG4gICAgICAgICAgICB0aGlzLmRpcnR5VHJhbnNmb3JtID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICByb3RhdGlvbjoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9yb3RhdGlvbjtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuX3JvdGF0aW9uID0gdmFsdWU7XG4gICAgICAgICAgICB0aGlzLmRpcnR5VHJhbnNmb3JtID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMuX3NyID0gTWF0aC5zaW4odmFsdWUpO1xuICAgICAgICAgICAgdGhpcy5fY3IgPSBNYXRoLmNvcyh2YWx1ZSk7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVGhlIHBvc2l0aW9uIG9mIHRoZSBkaXNwbGF5T2JqZWN0IG9uIHRoZSB5IGF4aXMgcmVsYXRpdmUgdG8gdGhlIGxvY2FsIGNvb3JkaW5hdGVzIG9mIHRoZSBwYXJlbnQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuRGlzcGxheU9iamVjdCNcbiAgICAgKi9cbiAgICBzY2FsZVk6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5zY2FsZS55O1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5zY2FsZS55ID0gdmFsdWU7XG4gICAgICAgICAgICB0aGlzLmRpcnR5VHJhbnNmb3JtID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBJbmRpY2F0ZXMgaWYgdGhlIHNwcml0ZSBpcyBnbG9iYWxseSB2aXNpYmxlLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5EaXNwbGF5T2JqZWN0I1xuICAgICAqIEByZWFkb25seVxuICAgICAqL1xuICAgIHdvcmxkVmlzaWJsZToge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHZhciBpdGVtID0gdGhpcztcblxuICAgICAgICAgICAgZG8ge1xuICAgICAgICAgICAgICAgIGlmICghaXRlbS52aXNpYmxlKVxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGl0ZW0gPSBpdGVtLnBhcmVudDtcbiAgICAgICAgICAgIH0gd2hpbGUgKGl0ZW0pO1xuXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBTZXRzIGEgbWFzayBmb3IgdGhlIGRpc3BsYXlPYmplY3QuIEEgbWFzayBpcyBhbiBvYmplY3QgdGhhdCBsaW1pdHMgdGhlIHZpc2liaWxpdHkgb2YgYW4gb2JqZWN0IHRvIHRoZSBzaGFwZSBvZiB0aGUgbWFzayBhcHBsaWVkIHRvIGl0LlxuICAgICAqIEluIFBJWEkgYSByZWd1bGFyIG1hc2sgbXVzdCBiZSBhIFBJWEkuR3JhcGhpY3Mgb3IgYSBQSVhJLlNwcml0ZSBvYmplY3QuIFRoaXMgYWxsb3dzIGZvciBtdWNoIGZhc3RlciBtYXNraW5nIGluIGNhbnZhcyBhcyBpdCB1dGlsaXNlcyBzaGFwZSBjbGlwcGluZy5cbiAgICAgKiBUbyByZW1vdmUgYSBtYXNrLCBzZXQgdGhpcyBwcm9wZXJ0eSB0byBudWxsLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5HcmFwaGljc3xQSVhJLlNwcml0ZX1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5EaXNwbGF5T2JqZWN0I1xuICAgICAqL1xuICAgIG1hc2s6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fbWFzaztcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGlmICh0aGlzLl9tYXNrKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHRoaXMuX21hc2sucmVuZGVyYWJsZSA9IHRydWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuX21hc2sgPSB2YWx1ZTtcblxuICAgICAgICAgICAgaWYgKHRoaXMuX21hc2spXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdGhpcy5fbWFzay5yZW5kZXJhYmxlID0gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgZmlsdGVycyBmb3IgdGhlIGRpc3BsYXlPYmplY3QuXG4gICAgICogKiBJTVBPUlRBTlQ6IFRoaXMgaXMgYSB3ZWJHTCBvbmx5IGZlYXR1cmUgYW5kIHdpbGwgYmUgaWdub3JlZCBieSB0aGUgY2FudmFzIHJlbmRlcmVyLlxuICAgICAqIFRvIHJlbW92ZSBmaWx0ZXJzIHNpbXBseSBzZXQgdGhpcyBwcm9wZXJ0eSB0byAnbnVsbCdcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuQWJzdHJhY3RGaWx0ZXJbXX1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5EaXNwbGF5T2JqZWN0I1xuICAgICAqL1xuICAgIGZpbHRlcnM6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fZmlsdGVycyAmJiB0aGlzLl9maWx0ZXJzLnNsaWNlKCk7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLl9maWx0ZXJzID0gdmFsdWUgJiYgdmFsdWUuc2xpY2UoKTtcbiAgICAgICAgfVxuICAgIH1cblxufSk7XG5cbi8qXG4gKiBVcGRhdGVzIHRoZSBvYmplY3QgdHJhbnNmb3JtIGZvciByZW5kZXJpbmdcbiAqXG4gKiBUT0RPIC0gT3B0aW1pemF0aW9uIHBhc3MhXG4gKi9cbkRpc3BsYXlPYmplY3QucHJvdG90eXBlLnVwZGF0ZVRyYW5zZm9ybSA9IGZ1bmN0aW9uICgpXG57XG4gICAgdmFyIHB0ID0gdGhpcy5wYXJlbnQud29ybGRUcmFuc2Zvcm07XG4gICAgdmFyIHd0ID0gdGhpcy53b3JsZFRyYW5zZm9ybTtcbiAgICB2YXIgbHQgPSB0aGlzLmxvY2FsVHJhbnNmb3JtO1xuXG4gICAgaWYodGhpcy5kaXJ0eVRyYW5zZm9ybSlcbiAgICB7XG4gICAgICAgIC8vIGdldCB0aGUgbWF0cml4IHZhbHVlcyBvZiB0aGUgZGlzcGxheW9iamVjdCBiYXNlZCBvbiBpdHMgdHJhbnNmb3JtIHByb3BlcnRpZXMuLlxuICAgICAgICBsdC5hICA9ICB0aGlzLl9jciAqIHRoaXMuc2NhbGUueDtcbiAgICAgICAgbHQuYiAgPSAgdGhpcy5fc3IgKiB0aGlzLnNjYWxlLng7XG4gICAgICAgIGx0LmMgID0gLXRoaXMuX3NyICogdGhpcy5zY2FsZS55O1xuICAgICAgICBsdC5kICA9ICB0aGlzLl9jciAqIHRoaXMuc2NhbGUueTtcbiAgICAgICAgbHQudHggPSAgdGhpcy5wb3NpdGlvbi54IC0gKHRoaXMucGl2b3QueCAqIGx0LmEgKyB0aGlzLnBpdm90LnkgKiBsdC5jKTtcbiAgICAgICAgbHQudHkgPSAgdGhpcy5wb3NpdGlvbi55IC0gKHRoaXMucGl2b3QueCAqIGx0LmIgKyB0aGlzLnBpdm90LnkgKiBsdC5kKTtcbiAgICB9XG5cbiAgICBpZih0aGlzLmRpcnR5VHJhbnNmb3JtIHx8IHRoaXMucGFyZW50LmRpcnR5VHJhbnNmb3JtKVxuICAgIHsgICAgICBcbiAgICAgICAgLy8gY29uY2F0IHRoZSBwYXJlbnQgbWF0cml4IHdpdGggdGhlIG9iamVjdHMgdHJhbnNmb3JtLlxuICAgICAgICB3dC5hICA9IGx0LmEgICogcHQuYSArIGx0LmIgICogcHQuYztcbiAgICAgICAgd3QuYiAgPSBsdC5hICAqIHB0LmIgKyBsdC5iICAqIHB0LmQ7XG4gICAgICAgIHd0LmMgID0gbHQuYyAgKiBwdC5hICsgbHQuZCAgKiBwdC5jO1xuICAgICAgICB3dC5kICA9IGx0LmMgICogcHQuYiArIGx0LmQgICogcHQuZDtcbiAgICAgICAgd3QudHggPSBsdC50eCAqIHB0LmEgKyBsdC50eSAqIHB0LmMgKyBwdC50eDtcbiAgICAgICAgd3QudHkgPSBsdC50eCAqIHB0LmIgKyBsdC50eSAqIHB0LmQgKyBwdC50eTsgICAgICAgXG4gICAgXG4gICAgICAgIHRoaXMuX2N1cnJlbnRCb3VuZHMgPSBudWxsO1xuICAgIH1cblxuICAgIC8vIG11bHRpcGx5IHRoZSBhbHBoYXMuLlxuICAgIHRoaXMud29ybGRBbHBoYSA9IHRoaXMuYWxwaGEgKiB0aGlzLnBhcmVudC53b3JsZEFscGhhO1xuXG4gICAgLy8gcmVzZXQgdGhlIGJvdW5kcyBlYWNoIHRpbWUgdGhpcyBpcyBjYWxsZWQhXG4gICAgXG59O1xuXG4vLyBwZXJmb3JtYW5jZSBpbmNyZWFzZSB0byBhdm9pZCB1c2luZyBjYWxsLi4gKDEweCBmYXN0ZXIpXG5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS5kaXNwbGF5T2JqZWN0VXBkYXRlVHJhbnNmb3JtID0gRGlzcGxheU9iamVjdC5wcm90b3R5cGUudXBkYXRlVHJhbnNmb3JtO1xuXG4vKipcbiAqXG4gKlxuICogUmV0cmlldmVzIHRoZSBib3VuZHMgb2YgdGhlIGRpc3BsYXlPYmplY3QgYXMgYSByZWN0YW5nbGUgb2JqZWN0XG4gKlxuICogQHBhcmFtIG1hdHJpeCB7UElYSS5NYXRyaXh9XG4gKiBAcmV0dXJuIHtQSVhJLlJlY3RhbmdsZX0gdGhlIHJlY3Rhbmd1bGFyIGJvdW5kaW5nIGFyZWFcbiAqL1xuRGlzcGxheU9iamVjdC5wcm90b3R5cGUuZ2V0Qm91bmRzID0gZnVuY3Rpb24gKG1hdHJpeCkgLy8ganNoaW50IHVudXNlZDpmYWxzZVxue1xuICAgIHJldHVybiBtYXRoLlJlY3RhbmdsZS5FTVBUWTtcbn07XG5cbi8qKlxuICogUmV0cmlldmVzIHRoZSBsb2NhbCBib3VuZHMgb2YgdGhlIGRpc3BsYXlPYmplY3QgYXMgYSByZWN0YW5nbGUgb2JqZWN0XG4gKlxuICogQHJldHVybiB7UElYSS5SZWN0YW5nbGV9IHRoZSByZWN0YW5ndWxhciBib3VuZGluZyBhcmVhXG4gKi9cbkRpc3BsYXlPYmplY3QucHJvdG90eXBlLmdldExvY2FsQm91bmRzID0gZnVuY3Rpb24gKClcbntcbiAgICByZXR1cm4gdGhpcy5nZXRCb3VuZHMobWF0aC5NYXRyaXguSURFTlRJVFkpO1xufTtcblxuLyoqXG4gKiBDYWxjdWxhdGVzIHRoZSBnbG9iYWwgcG9zaXRpb24gb2YgdGhlIGRpc3BsYXkgb2JqZWN0XG4gKlxuICogQHBhcmFtIHBvc2l0aW9uIHtQSVhJLlBvaW50fSBUaGUgd29ybGQgb3JpZ2luIHRvIGNhbGN1bGF0ZSBmcm9tXG4gKiBAcmV0dXJuIHtQSVhJLlBvaW50fSBBIHBvaW50IG9iamVjdCByZXByZXNlbnRpbmcgdGhlIHBvc2l0aW9uIG9mIHRoaXMgb2JqZWN0XG4gKi9cbkRpc3BsYXlPYmplY3QucHJvdG90eXBlLnRvR2xvYmFsID0gZnVuY3Rpb24gKHBvc2l0aW9uKVxue1xuICAgIC8vIHRoaXMgcGFyZW50IGNoZWNrIGlzIGZvciBqdXN0IGluIGNhc2UgdGhlIGl0ZW0gaXMgYSByb290IG9iamVjdC5cbiAgICAvLyBJZiBpdCBpcyB3ZSBuZWVkIHRvIGdpdmUgaXQgYSB0ZW1wb3JhcnkgcGFyZW50IHNvIHRoYXQgZGlzcGxheU9iamVjdFVwZGF0ZVRyYW5zZm9ybSB3b3JrcyBjb3JyZWN0bHlcbiAgICAvLyB0aGlzIGlzIG1haW5seSB0byBhdm9pZCBhIHBhcmVudCBjaGVjayBpbiB0aGUgbWFpbiBsb29wLiBFdmVyeSBsaXR0bGUgaGVscHMgZm9yIHBlcmZvcm1hbmNlIDopXG4gICAgaWYoIXRoaXMucGFyZW50KVxuICAgIHtcbiAgICAgICAgdGhpcy5wYXJlbnQgPSBfdGVtcERpc3BsYXlPYmplY3RQYXJlbnQ7XG4gICAgICAgIHRoaXMuZGlzcGxheU9iamVjdFVwZGF0ZVRyYW5zZm9ybSgpO1xuICAgICAgICB0aGlzLnBhcmVudCA9IG51bGw7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHRoaXMuZGlzcGxheU9iamVjdFVwZGF0ZVRyYW5zZm9ybSgpO1xuICAgIH1cblxuICAgIC8vIGRvbid0IG5lZWQgdG8gdXBkYXRlIHRoZSBsb3RcbiAgICByZXR1cm4gdGhpcy53b3JsZFRyYW5zZm9ybS5hcHBseShwb3NpdGlvbik7XG59O1xuXG4vKipcbiAqIENhbGN1bGF0ZXMgdGhlIGxvY2FsIHBvc2l0aW9uIG9mIHRoZSBkaXNwbGF5IG9iamVjdCByZWxhdGl2ZSB0byBhbm90aGVyIHBvaW50XG4gKlxuICogQHBhcmFtIHBvc2l0aW9uIHtQSVhJLlBvaW50fSBUaGUgd29ybGQgb3JpZ2luIHRvIGNhbGN1bGF0ZSBmcm9tXG4gKiBAcGFyYW0gW2Zyb21dIHtQSVhJLkRpc3BsYXlPYmplY3R9IFRoZSBEaXNwbGF5T2JqZWN0IHRvIGNhbGN1bGF0ZSB0aGUgZ2xvYmFsIHBvc2l0aW9uIGZyb21cbiAqIEBwYXJhbSBbcG9pbnRdIHtQSVhJLlBvaW50fSBBIFBvaW50IG9iamVjdCBpbiB3aGljaCB0byBzdG9yZSB0aGUgdmFsdWUsIG9wdGlvbmFsIChvdGhlcndpc2Ugd2lsbCBjcmVhdGUgYSBuZXcgUG9pbnQpXG4gKiBAcmV0dXJuIHtQSVhJLlBvaW50fSBBIHBvaW50IG9iamVjdCByZXByZXNlbnRpbmcgdGhlIHBvc2l0aW9uIG9mIHRoaXMgb2JqZWN0XG4gKi9cbkRpc3BsYXlPYmplY3QucHJvdG90eXBlLnRvTG9jYWwgPSBmdW5jdGlvbiAocG9zaXRpb24sIGZyb20sIHBvaW50KVxue1xuICAgIGlmIChmcm9tKVxuICAgIHtcbiAgICAgICAgcG9zaXRpb24gPSBmcm9tLnRvR2xvYmFsKHBvc2l0aW9uKTtcbiAgICB9XG5cbiAgICAvLyB0aGlzIHBhcmVudCBjaGVjayBpcyBmb3IganVzdCBpbiBjYXNlIHRoZSBpdGVtIGlzIGEgcm9vdCBvYmplY3QuXG4gICAgLy8gSWYgaXQgaXMgd2UgbmVlZCB0byBnaXZlIGl0IGEgdGVtcG9yYXJ5IHBhcmVudCBzbyB0aGF0IGRpc3BsYXlPYmplY3RVcGRhdGVUcmFuc2Zvcm0gd29ya3MgY29ycmVjdGx5XG4gICAgLy8gdGhpcyBpcyBtYWlubHkgdG8gYXZvaWQgYSBwYXJlbnQgY2hlY2sgaW4gdGhlIG1haW4gbG9vcC4gRXZlcnkgbGl0dGxlIGhlbHBzIGZvciBwZXJmb3JtYW5jZSA6KVxuICAgIGlmKCF0aGlzLnBhcmVudClcbiAgICB7XG4gICAgICAgIHRoaXMucGFyZW50ID0gX3RlbXBEaXNwbGF5T2JqZWN0UGFyZW50O1xuICAgICAgICB0aGlzLmRpc3BsYXlPYmplY3RVcGRhdGVUcmFuc2Zvcm0oKTtcbiAgICAgICAgdGhpcy5wYXJlbnQgPSBudWxsO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICB0aGlzLmRpc3BsYXlPYmplY3RVcGRhdGVUcmFuc2Zvcm0oKTtcbiAgICB9XG5cbiAgICAvLyBzaW1wbHkgYXBwbHkgdGhlIG1hdHJpeC4uXG4gICAgcmV0dXJuIHRoaXMud29ybGRUcmFuc2Zvcm0uYXBwbHlJbnZlcnNlKHBvc2l0aW9uLCBwb2ludCk7XG59O1xuXG4vKipcbiAqIFJlbmRlcnMgdGhlIG9iamVjdCB1c2luZyB0aGUgV2ViR0wgcmVuZGVyZXJcbiAqXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcn0gVGhlIHJlbmRlcmVyXG4gKiBAcHJpdmF0ZVxuICovXG5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS5yZW5kZXJXZWJHTCA9IGZ1bmN0aW9uIChyZW5kZXJlcikgLy8ganNoaW50IHVudXNlZDpmYWxzZVxue1xuICAgIC8vIE9WRVJXUklURTtcbn07XG5cbi8qKlxuICogUmVuZGVycyB0aGUgb2JqZWN0IHVzaW5nIHRoZSBDYW52YXMgcmVuZGVyZXJcbiAqXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuQ2FudmFzUmVuZGVyZXJ9IFRoZSByZW5kZXJlclxuICogQHByaXZhdGVcbiAqL1xuRGlzcGxheU9iamVjdC5wcm90b3R5cGUucmVuZGVyQ2FudmFzID0gZnVuY3Rpb24gKHJlbmRlcmVyKSAvLyBqc2hpbnQgdW51c2VkOmZhbHNlXG57XG4gICAgLy8gT1ZFUldSSVRFO1xufTtcbi8qKlxuICogVXNlZnVsIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyBhIHRleHR1cmUgb2YgdGhlIGRpc3BsYXkgb2JqZWN0IHRoYXQgY2FuIHRoZW4gYmUgdXNlZCB0byBjcmVhdGUgc3ByaXRlc1xuICogVGhpcyBjYW4gYmUgcXVpdGUgdXNlZnVsIGlmIHlvdXIgZGlzcGxheU9iamVjdCBpcyBzdGF0aWMgLyBjb21wbGljYXRlZCBhbmQgbmVlZHMgdG8gYmUgcmV1c2VkIG11bHRpcGxlIHRpbWVzLlxuICpcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5DYW52YXNSZW5kZXJlcnxQSVhJLldlYkdMUmVuZGVyZXJ9IFRoZSByZW5kZXJlciB1c2VkIHRvIGdlbmVyYXRlIHRoZSB0ZXh0dXJlLlxuICogQHBhcmFtIHNjYWxlTW9kZSB7bnVtYmVyfSBTZWUge0BsaW5rIFBJWEkuU0NBTEVfTU9ERVN9IGZvciBwb3NzaWJsZSB2YWx1ZXNcbiAqIEBwYXJhbSByZXNvbHV0aW9uIHtudW1iZXJ9IFRoZSByZXNvbHV0aW9uIG9mIHRoZSB0ZXh0dXJlIGJlaW5nIGdlbmVyYXRlZFxuICogQHJldHVybiB7UElYSS5UZXh0dXJlfSBhIHRleHR1cmUgb2YgdGhlIGRpc3BsYXkgb2JqZWN0XG4gKi9cbkRpc3BsYXlPYmplY3QucHJvdG90eXBlLmdlbmVyYXRlVGV4dHVyZSA9IGZ1bmN0aW9uIChyZW5kZXJlciwgc2NhbGVNb2RlLCByZXNvbHV0aW9uKVxue1xuICAgIHZhciBib3VuZHMgPSB0aGlzLmdldExvY2FsQm91bmRzKCk7XG5cbiAgICB2YXIgcmVuZGVyVGV4dHVyZSA9IG5ldyBSZW5kZXJUZXh0dXJlKHJlbmRlcmVyLCBib3VuZHMud2lkdGggfCAwLCBib3VuZHMuaGVpZ2h0IHwgMCwgc2NhbGVNb2RlLCByZXNvbHV0aW9uKTtcblxuICAgIF90ZW1wTWF0cml4LnR4ID0gLWJvdW5kcy54O1xuICAgIF90ZW1wTWF0cml4LnR5ID0gLWJvdW5kcy55O1xuXG4gICAgcmVuZGVyVGV4dHVyZS5yZW5kZXIodGhpcywgX3RlbXBNYXRyaXgpO1xuXG4gICAgcmV0dXJuIHJlbmRlclRleHR1cmU7XG59O1xuXG4vKipcbiAqIFNldCB0aGUgcGFyZW50IENvbnRhaW5lciBvZiB0aGlzIERpc3BsYXlPYmplY3RcbiAqXG4gKiBAcGFyYW0gY29udGFpbmVyIHtDb250YWluZXJ9IFRoZSBDb250YWluZXIgdG8gYWRkIHRoaXMgRGlzcGxheU9iamVjdCB0b1xuICogQHJldHVybiB7Q29udGFpbmVyfSBUaGUgQ29udGFpbmVyIHRoYXQgdGhpcyBEaXNwbGF5T2JqZWN0IHdhcyBhZGRlZCB0b1xuICovXG5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS5zZXRQYXJlbnQgPSBmdW5jdGlvbiAoY29udGFpbmVyKVxue1xuICAgIGlmICghY29udGFpbmVyIHx8ICFjb250YWluZXIuYWRkQ2hpbGQpXG4gICAge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3NldFBhcmVudDogQXJndW1lbnQgbXVzdCBiZSBhIENvbnRhaW5lcicpO1xuICAgIH1cblxuICAgIGNvbnRhaW5lci5hZGRDaGlsZCh0aGlzKTtcbiAgICByZXR1cm4gY29udGFpbmVyO1xufTtcblxuLyoqXG4gKiBDb252ZW5pZW5jZSBmdW5jdGlvbiB0byBzZXQgdGhlIHBvc3Rpb24sIHNjYWxlLCBza2V3IGFuZCBwaXZvdCBhdCBvbmNlLlxuICpcbiAqIEBwYXJhbSBbeD0wXSB7bnVtYmVyfSBUaGUgWCBwb3NpdGlvblxuICogQHBhcmFtIFt5PTBdIHtudW1iZXJ9IFRoZSBZIHBvc2l0aW9uXG4gKiBAcGFyYW0gW3NjYWxlWD0xXSB7bnVtYmVyfSBUaGUgWCBzY2FsZSB2YWx1ZVxuICogQHBhcmFtIFtzY2FsZVk9MV0ge251bWJlcn0gVGhlIFkgc2NhbGUgdmFsdWVcbiAqIEBwYXJhbSBbcm90YXRpb249MF0ge251bWJlcn0gVGhlIHJvdGF0aW9uXG4gKiBAcGFyYW0gW3NrZXdYPTBdIHtudW1iZXJ9IFRoZSBYIHNrZXcgdmFsdWVcbiAqIEBwYXJhbSBbc2tld1k9MF0ge251bWJlcn0gVGhlIFkgc2tldyB2YWx1ZVxuICogQHBhcmFtIFtwaXZvdFg9MF0ge251bWJlcn0gVGhlIFggcGl2b3QgdmFsdWVcbiAqIEBwYXJhbSBbcGl2b3RZPTBdIHtudW1iZXJ9IFRoZSBZIHBpdm90IHZhbHVlXG4gKiBAcmV0dXJuIHtQSVhJLkRpc3BsYXlPYmplY3R9XG4gKi9cbkRpc3BsYXlPYmplY3QucHJvdG90eXBlLnNldFRyYW5zZm9ybSA9IGZ1bmN0aW9uKHgsIHksIHNjYWxlWCwgc2NhbGVZLCByb3RhdGlvbiwgc2tld1gsIHNrZXdZLCBwaXZvdFgsIHBpdm90WSkgLy9qc2hpbnQgaWdub3JlOmxpbmVcbntcbiAgICB0aGlzLnBvc2l0aW9uLnggPSB4IHx8IDA7XG4gICAgdGhpcy5wb3NpdGlvbi55ID0geSB8fCAwO1xuICAgIHRoaXMuc2NhbGUueCA9ICFzY2FsZVggPyAxIDogc2NhbGVYO1xuICAgIHRoaXMuc2NhbGUueSA9ICFzY2FsZVkgPyAxIDogc2NhbGVZO1xuICAgIHRoaXMucm90YXRpb24gPSByb3RhdGlvbiB8fCAwO1xuICAgIHRoaXMuc2tldy54ID0gc2tld1ggfHwgMDtcbiAgICB0aGlzLnNrZXcueSA9IHNrZXdZIHx8IDA7XG4gICAgdGhpcy5waXZvdC54ID0gcGl2b3RYIHx8IDA7XG4gICAgdGhpcy5waXZvdC55ID0gcGl2b3RZIHx8IDA7XG4gICAgdGhpcy5kaXJ0eVRyYW5zZm9ybSA9IHRydWU7XG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIEJhc2UgZGVzdHJveSBtZXRob2QgZm9yIGdlbmVyaWMgZGlzcGxheSBvYmplY3RzXG4gKlxuICovXG5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKClcbntcblxuICAgIHRoaXMucG9zaXRpb24gPSBudWxsO1xuICAgIHRoaXMuc2NhbGUgPSBudWxsO1xuICAgIHRoaXMucGl2b3QgPSBudWxsO1xuICAgIHRoaXMuc2tldyA9IG51bGw7XG5cbiAgICB0aGlzLnBhcmVudCA9IG51bGw7XG5cbiAgICB0aGlzLl9ib3VuZHMgPSBudWxsO1xuICAgIHRoaXMuX2N1cnJlbnRCb3VuZHMgPSBudWxsO1xuICAgIHRoaXMuX21hc2sgPSBudWxsO1xuXG4gICAgdGhpcy53b3JsZFRyYW5zZm9ybSA9IG51bGw7XG4gICAgdGhpcy5maWx0ZXJBcmVhID0gbnVsbDtcbn07XG4iLCJ2YXIgQ29udGFpbmVyID0gcmVxdWlyZSgnLi4vZGlzcGxheS9Db250YWluZXInKSxcbiAgICBUZXh0dXJlID0gcmVxdWlyZSgnLi4vdGV4dHVyZXMvVGV4dHVyZScpLFxuICAgIENhbnZhc0J1ZmZlciA9IHJlcXVpcmUoJy4uL3JlbmRlcmVycy9jYW52YXMvdXRpbHMvQ2FudmFzQnVmZmVyJyksXG4gICAgQ2FudmFzR3JhcGhpY3MgPSByZXF1aXJlKCcuLi9yZW5kZXJlcnMvY2FudmFzL3V0aWxzL0NhbnZhc0dyYXBoaWNzJyksXG4gICAgR3JhcGhpY3NEYXRhID0gcmVxdWlyZSgnLi9HcmFwaGljc0RhdGEnKSxcbiAgICBtYXRoID0gcmVxdWlyZSgnLi4vbWF0aCcpLFxuICAgIENPTlNUID0gcmVxdWlyZSgnLi4vY29uc3QnKSxcbiAgICB0ZW1wUG9pbnQgPSBuZXcgbWF0aC5Qb2ludCgpO1xuXG4vKipcbiAqIFRoZSBHcmFwaGljcyBjbGFzcyBjb250YWlucyBtZXRob2RzIHVzZWQgdG8gZHJhdyBwcmltaXRpdmUgc2hhcGVzIHN1Y2ggYXMgbGluZXMsIGNpcmNsZXMgYW5kXG4gKiByZWN0YW5nbGVzIHRvIHRoZSBkaXNwbGF5LCBhbmQgdG8gY29sb3IgYW5kIGZpbGwgdGhlbS5cbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQ29udGFpbmVyXG4gKiBAbWVtYmVyb2YgUElYSVxuICovXG5mdW5jdGlvbiBHcmFwaGljcygpXG57XG4gICAgQ29udGFpbmVyLmNhbGwodGhpcyk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYWxwaGEgdmFsdWUgdXNlZCB3aGVuIGZpbGxpbmcgdGhlIEdyYXBoaWNzIG9iamVjdC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAxXG4gICAgICovXG4gICAgdGhpcy5maWxsQWxwaGEgPSAxO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHdpZHRoICh0aGlja25lc3MpIG9mIGFueSBsaW5lcyBkcmF3bi5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAwXG4gICAgICovXG4gICAgdGhpcy5saW5lV2lkdGggPSAwO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGNvbG9yIG9mIGFueSBsaW5lcyBkcmF3bi5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge3N0cmluZ31cbiAgICAgKiBAZGVmYXVsdCAwXG4gICAgICovXG4gICAgdGhpcy5saW5lQ29sb3IgPSAwO1xuXG4gICAgLyoqXG4gICAgICogR3JhcGhpY3MgZGF0YVxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5HcmFwaGljc0RhdGFbXX1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuZ3JhcGhpY3NEYXRhID0gW107XG5cbiAgICAvKipcbiAgICAgKiBUaGUgdGludCBhcHBsaWVkIHRvIHRoZSBncmFwaGljIHNoYXBlLiBUaGlzIGlzIGEgaGV4IHZhbHVlLiBBcHBseSBhIHZhbHVlIG9mIDB4RkZGRkZGIHRvIHJlc2V0IHRoZSB0aW50LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDB4RkZGRkZGXG4gICAgICovXG4gICAgdGhpcy50aW50ID0gMHhGRkZGRkY7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgcHJldmlvdXMgdGludCBhcHBsaWVkIHRvIHRoZSBncmFwaGljIHNoYXBlLiBVc2VkIHRvIGNvbXBhcmUgdG8gdGhlIGN1cnJlbnQgdGludCBhbmQgY2hlY2sgaWYgdGhlcmVzIGNoYW5nZS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBkZWZhdWx0IDB4RkZGRkZGXG4gICAgICovXG4gICAgdGhpcy5fcHJldlRpbnQgPSAweEZGRkZGRjtcblxuICAgIC8qKlxuICAgICAqIFRoZSBibGVuZCBtb2RlIHRvIGJlIGFwcGxpZWQgdG8gdGhlIGdyYXBoaWMgc2hhcGUuIEFwcGx5IGEgdmFsdWUgb2YgYFBJWEkuQkxFTkRfTU9ERVMuTk9STUFMYCB0byByZXNldCB0aGUgYmxlbmQgbW9kZS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCBQSVhJLkJMRU5EX01PREVTLk5PUk1BTDtcbiAgICAgKiBAc2VlIFBJWEkuQkxFTkRfTU9ERVNcbiAgICAgKi9cbiAgICB0aGlzLmJsZW5kTW9kZSA9IENPTlNULkJMRU5EX01PREVTLk5PUk1BTDtcblxuICAgIC8qKlxuICAgICAqIEN1cnJlbnQgcGF0aFxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5HcmFwaGljc0RhdGF9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLmN1cnJlbnRQYXRoID0gbnVsbDtcblxuICAgIC8qKlxuICAgICAqIEFycmF5IGNvbnRhaW5pbmcgc29tZSBXZWJHTC1yZWxhdGVkIHByb3BlcnRpZXMgdXNlZCBieSB0aGUgV2ViR0wgcmVuZGVyZXIuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtvYmplY3Q8bnVtYmVyLCBvYmplY3Q+fVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgLy8gVE9ETyAtIF93ZWJnbCBzaG91bGQgdXNlIGEgcHJvdG90eXBlIG9iamVjdCwgbm90IGEgcmFuZG9tIHVuZG9jdW1lbnRlZCBvYmplY3QuLi5cbiAgICB0aGlzLl93ZWJHTCA9IHt9O1xuXG4gICAgLyoqXG4gICAgICogV2hldGhlciB0aGlzIHNoYXBlIGlzIGJlaW5nIHVzZWQgYXMgYSBtYXNrLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKi9cbiAgICB0aGlzLmlzTWFzayA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGJvdW5kcycgcGFkZGluZyB1c2VkIGZvciBib3VuZHMgY2FsY3VsYXRpb24uXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy5ib3VuZHNQYWRkaW5nID0gMDtcblxuICAgIC8qKlxuICAgICAqIEEgY2FjaGUgb2YgdGhlIGxvY2FsIGJvdW5kcyB0byBwcmV2ZW50IHJlY2FsY3VsYXRpb24uXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlJlY3RhbmdsZX1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX2xvY2FsQm91bmRzID0gbmV3IG1hdGguUmVjdGFuZ2xlKDAsMCwxLDEpO1xuXG4gICAgLyoqXG4gICAgICogVXNlZCB0byBkZXRlY3QgaWYgdGhlIGdyYXBoaWNzIG9iamVjdCBoYXMgY2hhbmdlZC4gSWYgdGhpcyBpcyBzZXQgdG8gdHJ1ZSB0aGVuIHRoZSBncmFwaGljc1xuICAgICAqIG9iamVjdCB3aWxsIGJlIHJlY2FsY3VsYXRlZC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLmRpcnR5ID0gdHJ1ZTtcblxuICAgIC8qKlxuICAgICAqIFVzZWQgdG8gZGV0ZWN0IGlmIHRoZSBXZWJHTCBncmFwaGljcyBvYmplY3QgaGFzIGNoYW5nZWQuIElmIHRoaXMgaXMgc2V0IHRvIHRydWUgdGhlbiB0aGVcbiAgICAgKiBncmFwaGljcyBvYmplY3Qgd2lsbCBiZSByZWNhbGN1bGF0ZWQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5nbERpcnR5ID0gZmFsc2U7XG5cbiAgICB0aGlzLmJvdW5kc0RpcnR5ID0gdHJ1ZTtcblxuICAgIC8qKlxuICAgICAqIFVzZWQgdG8gZGV0ZWN0IGlmIHRoZSBjYWNoZWQgc3ByaXRlIG9iamVjdCBuZWVkcyB0byBiZSB1cGRhdGVkLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuY2FjaGVkU3ByaXRlRGlydHkgPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIFdoZW4gY2FjaGVBc0JpdG1hcCBpcyBzZXQgdG8gdHJ1ZSB0aGUgZ3JhcGhpY3Mgb2JqZWN0IHdpbGwgYmUgcmVuZGVyZWQgYXMgaWYgaXQgd2FzIGEgc3ByaXRlLlxuICAgICAqIFRoaXMgaXMgdXNlZnVsIGlmIHlvdXIgZ3JhcGhpY3MgZWxlbWVudCBkb2VzIG5vdCBjaGFuZ2Ugb2Z0ZW4sIGFzIGl0IHdpbGwgc3BlZWQgdXAgdGhlIHJlbmRlcmluZ1xuICAgICAqIG9mIHRoZSBvYmplY3QgaW4gZXhjaGFuZ2UgZm9yIHRha2luZyB1cCB0ZXh0dXJlIG1lbW9yeS4gSXQgaXMgYWxzbyB1c2VmdWwgaWYgeW91IG5lZWQgdGhlIGdyYXBoaWNzXG4gICAgICogb2JqZWN0IHRvIGJlIGFudGktYWxpYXNlZCwgYmVjYXVzZSBpdCB3aWxsIGJlIHJlbmRlcmVkIHVzaW5nIGNhbnZhcy4gVGhpcyBpcyBub3QgcmVjb21tZW5kZWQgaWZcbiAgICAgKiB5b3UgYXJlIGNvbnN0YW50bHkgcmVkcmF3aW5nIHRoZSBncmFwaGljcyBlbGVtZW50LlxuICAgICAqXG4gICAgICogQG5hbWUgY2FjaGVBc0JpdG1hcFxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICogQG1lbWJlcm9mIFBJWEkuR3JhcGhpY3MjXG4gICAgICogQGRlZmF1bHQgZmFsc2VcbiAgICAgKi9cbn1cblxuLy8gY29uc3RydWN0b3JcbkdyYXBoaWNzLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoQ29udGFpbmVyLnByb3RvdHlwZSk7XG5HcmFwaGljcy5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBHcmFwaGljcztcbm1vZHVsZS5leHBvcnRzID0gR3JhcGhpY3M7XG5cbi8qKlxuICogQ3JlYXRlcyBhIG5ldyBHcmFwaGljcyBvYmplY3Qgd2l0aCB0aGUgc2FtZSB2YWx1ZXMgYXMgdGhpcyBvbmUuXG4gKiBOb3RlIHRoYXQgdGhlIG9ubHkgdGhlIHByb3BlcnRpZXMgb2YgdGhlIG9iamVjdCBhcmUgY2xvbmVkLCBub3QgaXRzIHRyYW5zZm9ybSAocG9zaXRpb24sc2NhbGUsZXRjKVxuICpcbiAqIEByZXR1cm4ge1BJWEkuR3JhcGhpY3N9XG4gKi9cbkdyYXBoaWNzLnByb3RvdHlwZS5jbG9uZSA9IGZ1bmN0aW9uICgpXG57XG4gICAgdmFyIGNsb25lID0gbmV3IEdyYXBoaWNzKCk7XG5cbiAgICBjbG9uZS5yZW5kZXJhYmxlICAgID0gdGhpcy5yZW5kZXJhYmxlO1xuICAgIGNsb25lLmZpbGxBbHBoYSAgICAgPSB0aGlzLmZpbGxBbHBoYTtcbiAgICBjbG9uZS5saW5lV2lkdGggICAgID0gdGhpcy5saW5lV2lkdGg7XG4gICAgY2xvbmUubGluZUNvbG9yICAgICA9IHRoaXMubGluZUNvbG9yO1xuICAgIGNsb25lLnRpbnQgICAgICAgICAgPSB0aGlzLnRpbnQ7XG4gICAgY2xvbmUuYmxlbmRNb2RlICAgICA9IHRoaXMuYmxlbmRNb2RlO1xuICAgIGNsb25lLmlzTWFzayAgICAgICAgPSB0aGlzLmlzTWFzaztcbiAgICBjbG9uZS5ib3VuZHNQYWRkaW5nID0gdGhpcy5ib3VuZHNQYWRkaW5nO1xuICAgIGNsb25lLmRpcnR5ICAgICAgICAgPSB0cnVlO1xuICAgIGNsb25lLmdsRGlydHkgICAgICAgPSB0cnVlO1xuICAgIGNsb25lLmNhY2hlZFNwcml0ZURpcnR5ID0gdGhpcy5jYWNoZWRTcHJpdGVEaXJ0eTtcblxuICAgIC8vIGNvcHkgZ3JhcGhpY3MgZGF0YVxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5ncmFwaGljc0RhdGEubGVuZ3RoOyArK2kpXG4gICAge1xuICAgICAgICBjbG9uZS5ncmFwaGljc0RhdGEucHVzaCh0aGlzLmdyYXBoaWNzRGF0YVtpXS5jbG9uZSgpKTtcbiAgICB9XG5cbiAgICBjbG9uZS5jdXJyZW50UGF0aCA9IGNsb25lLmdyYXBoaWNzRGF0YVtjbG9uZS5ncmFwaGljc0RhdGEubGVuZ3RoIC0gMV07XG5cbiAgICBjbG9uZS51cGRhdGVMb2NhbEJvdW5kcygpO1xuXG4gICAgcmV0dXJuIGNsb25lO1xufTtcblxuLyoqXG4gKiBTcGVjaWZpZXMgdGhlIGxpbmUgc3R5bGUgdXNlZCBmb3Igc3Vic2VxdWVudCBjYWxscyB0byBHcmFwaGljcyBtZXRob2RzIHN1Y2ggYXMgdGhlIGxpbmVUbygpIG1ldGhvZCBvciB0aGUgZHJhd0NpcmNsZSgpIG1ldGhvZC5cbiAqXG4gKiBAcGFyYW0gbGluZVdpZHRoIHtudW1iZXJ9IHdpZHRoIG9mIHRoZSBsaW5lIHRvIGRyYXcsIHdpbGwgdXBkYXRlIHRoZSBvYmplY3RzIHN0b3JlZCBzdHlsZVxuICogQHBhcmFtIGNvbG9yIHtudW1iZXJ9IGNvbG9yIG9mIHRoZSBsaW5lIHRvIGRyYXcsIHdpbGwgdXBkYXRlIHRoZSBvYmplY3RzIHN0b3JlZCBzdHlsZVxuICogQHBhcmFtIGFscGhhIHtudW1iZXJ9IGFscGhhIG9mIHRoZSBsaW5lIHRvIGRyYXcsIHdpbGwgdXBkYXRlIHRoZSBvYmplY3RzIHN0b3JlZCBzdHlsZVxuICogQHJldHVybiB7UElYSS5HcmFwaGljc31cbiAqL1xuR3JhcGhpY3MucHJvdG90eXBlLmxpbmVTdHlsZSA9IGZ1bmN0aW9uIChsaW5lV2lkdGgsIGNvbG9yLCBhbHBoYSlcbntcbiAgICB0aGlzLmxpbmVXaWR0aCA9IGxpbmVXaWR0aCB8fCAwO1xuICAgIHRoaXMubGluZUNvbG9yID0gY29sb3IgfHwgMDtcbiAgICB0aGlzLmxpbmVBbHBoYSA9IChhbHBoYSA9PT0gdW5kZWZpbmVkKSA/IDEgOiBhbHBoYTtcblxuICAgIGlmICh0aGlzLmN1cnJlbnRQYXRoKVxuICAgIHtcbiAgICAgICAgaWYgKHRoaXMuY3VycmVudFBhdGguc2hhcGUucG9pbnRzLmxlbmd0aClcbiAgICAgICAge1xuICAgICAgICAgICAgLy8gaGFsZndheSB0aHJvdWdoIGEgbGluZT8gc3RhcnQgYSBuZXcgb25lIVxuICAgICAgICAgICAgdmFyIHNoYXBlID0gbmV3IG1hdGguUG9seWdvbih0aGlzLmN1cnJlbnRQYXRoLnNoYXBlLnBvaW50cy5zbGljZSgtMikpO1xuICAgICAgICAgICAgc2hhcGUuY2xvc2VkID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLmRyYXdTaGFwZShzaGFwZSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgICAvLyBvdGhlcndpc2UgaXRzIGVtcHR5IHNvIGxldHMganVzdCBzZXQgdGhlIGxpbmUgcHJvcGVydGllc1xuICAgICAgICAgICAgdGhpcy5jdXJyZW50UGF0aC5saW5lV2lkdGggPSB0aGlzLmxpbmVXaWR0aDtcbiAgICAgICAgICAgIHRoaXMuY3VycmVudFBhdGgubGluZUNvbG9yID0gdGhpcy5saW5lQ29sb3I7XG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRQYXRoLmxpbmVBbHBoYSA9IHRoaXMubGluZUFscGhhO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIE1vdmVzIHRoZSBjdXJyZW50IGRyYXdpbmcgcG9zaXRpb24gdG8geCwgeS5cbiAqXG4gKiBAcGFyYW0geCB7bnVtYmVyfSB0aGUgWCBjb29yZGluYXRlIHRvIG1vdmUgdG9cbiAqIEBwYXJhbSB5IHtudW1iZXJ9IHRoZSBZIGNvb3JkaW5hdGUgdG8gbW92ZSB0b1xuICogQHJldHVybiB7UElYSS5HcmFwaGljc31cbiAgKi9cbkdyYXBoaWNzLnByb3RvdHlwZS5tb3ZlVG8gPSBmdW5jdGlvbiAoeCwgeSlcbntcbiAgICB2YXIgc2hhcGUgPSBuZXcgbWF0aC5Qb2x5Z29uKFt4LHldKTtcbiAgICBzaGFwZS5jbG9zZWQgPSBmYWxzZTtcbiAgICB0aGlzLmRyYXdTaGFwZShzaGFwZSk7XG5cbiAgICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogRHJhd3MgYSBsaW5lIHVzaW5nIHRoZSBjdXJyZW50IGxpbmUgc3R5bGUgZnJvbSB0aGUgY3VycmVudCBkcmF3aW5nIHBvc2l0aW9uIHRvICh4LCB5KTtcbiAqIFRoZSBjdXJyZW50IGRyYXdpbmcgcG9zaXRpb24gaXMgdGhlbiBzZXQgdG8gKHgsIHkpLlxuICpcbiAqIEBwYXJhbSB4IHtudW1iZXJ9IHRoZSBYIGNvb3JkaW5hdGUgdG8gZHJhdyB0b1xuICogQHBhcmFtIHkge251bWJlcn0gdGhlIFkgY29vcmRpbmF0ZSB0byBkcmF3IHRvXG4gKiBAcmV0dXJuIHtQSVhJLkdyYXBoaWNzfVxuICovXG5HcmFwaGljcy5wcm90b3R5cGUubGluZVRvID0gZnVuY3Rpb24gKHgsIHkpXG57XG4gICAgdGhpcy5jdXJyZW50UGF0aC5zaGFwZS5wb2ludHMucHVzaCh4LCB5KTtcbiAgICB0aGlzLmRpcnR5ID0gdHJ1ZTtcblxuICAgIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBDYWxjdWxhdGUgdGhlIHBvaW50cyBmb3IgYSBxdWFkcmF0aWMgYmV6aWVyIGN1cnZlIGFuZCB0aGVuIGRyYXdzIGl0LlxuICogQmFzZWQgb246IGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vcXVlc3Rpb25zLzc4NTA5Ny9ob3ctZG8taS1pbXBsZW1lbnQtYS1iZXppZXItY3VydmUtaW4tY1xuICpcbiAqIEBwYXJhbSBjcFgge251bWJlcn0gQ29udHJvbCBwb2ludCB4XG4gKiBAcGFyYW0gY3BZIHtudW1iZXJ9IENvbnRyb2wgcG9pbnQgeVxuICogQHBhcmFtIHRvWCB7bnVtYmVyfSBEZXN0aW5hdGlvbiBwb2ludCB4XG4gKiBAcGFyYW0gdG9ZIHtudW1iZXJ9IERlc3RpbmF0aW9uIHBvaW50IHlcbiAqIEByZXR1cm4ge1BJWEkuR3JhcGhpY3N9XG4gKi9cbkdyYXBoaWNzLnByb3RvdHlwZS5xdWFkcmF0aWNDdXJ2ZVRvID0gZnVuY3Rpb24gKGNwWCwgY3BZLCB0b1gsIHRvWSlcbntcbiAgICBpZiAodGhpcy5jdXJyZW50UGF0aClcbiAgICB7XG4gICAgICAgIGlmICh0aGlzLmN1cnJlbnRQYXRoLnNoYXBlLnBvaW50cy5sZW5ndGggPT09IDApXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuY3VycmVudFBhdGguc2hhcGUucG9pbnRzID0gWzAsIDBdO1xuICAgICAgICB9XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHRoaXMubW92ZVRvKDAsMCk7XG4gICAgfVxuXG4gICAgdmFyIHhhLFxuICAgICAgICB5YSxcbiAgICAgICAgbiA9IDIwLFxuICAgICAgICBwb2ludHMgPSB0aGlzLmN1cnJlbnRQYXRoLnNoYXBlLnBvaW50cztcblxuICAgIGlmIChwb2ludHMubGVuZ3RoID09PSAwKVxuICAgIHtcbiAgICAgICAgdGhpcy5tb3ZlVG8oMCwgMCk7XG4gICAgfVxuXG4gICAgdmFyIGZyb21YID0gcG9pbnRzW3BvaW50cy5sZW5ndGgtMl07XG4gICAgdmFyIGZyb21ZID0gcG9pbnRzW3BvaW50cy5sZW5ndGgtMV07XG5cbiAgICB2YXIgaiA9IDA7XG4gICAgZm9yICh2YXIgaSA9IDE7IGkgPD0gbjsgKytpKVxuICAgIHtcbiAgICAgICAgaiA9IGkgLyBuO1xuXG4gICAgICAgIHhhID0gZnJvbVggKyAoIChjcFggLSBmcm9tWCkgKiBqICk7XG4gICAgICAgIHlhID0gZnJvbVkgKyAoIChjcFkgLSBmcm9tWSkgKiBqICk7XG5cbiAgICAgICAgcG9pbnRzLnB1c2goIHhhICsgKCAoKGNwWCArICggKHRvWCAtIGNwWCkgKiBqICkpIC0geGEpICogaiApLFxuICAgICAgICAgICAgICAgICAgICAgeWEgKyAoICgoY3BZICsgKCAodG9ZIC0gY3BZKSAqIGogKSkgLSB5YSkgKiBqICkgKTtcbiAgICB9XG5cbiAgICB0aGlzLmRpcnR5ID0gdGhpcy5ib3VuZHNEaXJ0eSA9IHRydWU7XG5cbiAgICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogQ2FsY3VsYXRlIHRoZSBwb2ludHMgZm9yIGEgYmV6aWVyIGN1cnZlIGFuZCB0aGVuIGRyYXdzIGl0LlxuICpcbiAqIEBwYXJhbSBjcFgge251bWJlcn0gQ29udHJvbCBwb2ludCB4XG4gKiBAcGFyYW0gY3BZIHtudW1iZXJ9IENvbnRyb2wgcG9pbnQgeVxuICogQHBhcmFtIGNwWDIge251bWJlcn0gU2Vjb25kIENvbnRyb2wgcG9pbnQgeFxuICogQHBhcmFtIGNwWTIge251bWJlcn0gU2Vjb25kIENvbnRyb2wgcG9pbnQgeVxuICogQHBhcmFtIHRvWCB7bnVtYmVyfSBEZXN0aW5hdGlvbiBwb2ludCB4XG4gKiBAcGFyYW0gdG9ZIHtudW1iZXJ9IERlc3RpbmF0aW9uIHBvaW50IHlcbiAqIEByZXR1cm4ge1BJWEkuR3JhcGhpY3N9XG4gKi9cbkdyYXBoaWNzLnByb3RvdHlwZS5iZXppZXJDdXJ2ZVRvID0gZnVuY3Rpb24gKGNwWCwgY3BZLCBjcFgyLCBjcFkyLCB0b1gsIHRvWSlcbntcbiAgICBpZiAodGhpcy5jdXJyZW50UGF0aClcbiAgICB7XG4gICAgICAgIGlmICh0aGlzLmN1cnJlbnRQYXRoLnNoYXBlLnBvaW50cy5sZW5ndGggPT09IDApXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuY3VycmVudFBhdGguc2hhcGUucG9pbnRzID0gWzAsIDBdO1xuICAgICAgICB9XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHRoaXMubW92ZVRvKDAsMCk7XG4gICAgfVxuXG4gICAgdmFyIG4gPSAyMCxcbiAgICAgICAgZHQsXG4gICAgICAgIGR0MixcbiAgICAgICAgZHQzLFxuICAgICAgICB0MixcbiAgICAgICAgdDMsXG4gICAgICAgIHBvaW50cyA9IHRoaXMuY3VycmVudFBhdGguc2hhcGUucG9pbnRzO1xuXG4gICAgdmFyIGZyb21YID0gcG9pbnRzW3BvaW50cy5sZW5ndGgtMl07XG4gICAgdmFyIGZyb21ZID0gcG9pbnRzW3BvaW50cy5sZW5ndGgtMV07XG5cbiAgICB2YXIgaiA9IDA7XG5cbiAgICBmb3IgKHZhciBpID0gMTsgaSA8PSBuOyArK2kpXG4gICAge1xuICAgICAgICBqID0gaSAvIG47XG5cbiAgICAgICAgZHQgPSAoMSAtIGopO1xuICAgICAgICBkdDIgPSBkdCAqIGR0O1xuICAgICAgICBkdDMgPSBkdDIgKiBkdDtcblxuICAgICAgICB0MiA9IGogKiBqO1xuICAgICAgICB0MyA9IHQyICogajtcblxuICAgICAgICBwb2ludHMucHVzaCggZHQzICogZnJvbVggKyAzICogZHQyICogaiAqIGNwWCArIDMgKiBkdCAqIHQyICogY3BYMiArIHQzICogdG9YLFxuICAgICAgICAgICAgICAgICAgICAgZHQzICogZnJvbVkgKyAzICogZHQyICogaiAqIGNwWSArIDMgKiBkdCAqIHQyICogY3BZMiArIHQzICogdG9ZKTtcbiAgICB9XG5cbiAgICB0aGlzLmRpcnR5ID0gdGhpcy5ib3VuZHNEaXJ0eSA9IHRydWU7XG5cbiAgICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogVGhlIGFyY1RvKCkgbWV0aG9kIGNyZWF0ZXMgYW4gYXJjL2N1cnZlIGJldHdlZW4gdHdvIHRhbmdlbnRzIG9uIHRoZSBjYW52YXMuXG4gKlxuICogXCJib3Jyb3dlZFwiIGZyb20gaHR0cHM6Ly9jb2RlLmdvb2dsZS5jb20vcC9meGNhbnZhcy8gLSB0aGFua3MgZ29vZ2xlIVxuICpcbiAqIEBwYXJhbSB4MSB7bnVtYmVyfSBUaGUgeC1jb29yZGluYXRlIG9mIHRoZSBiZWdpbm5pbmcgb2YgdGhlIGFyY1xuICogQHBhcmFtIHkxIHtudW1iZXJ9IFRoZSB5LWNvb3JkaW5hdGUgb2YgdGhlIGJlZ2lubmluZyBvZiB0aGUgYXJjXG4gKiBAcGFyYW0geDIge251bWJlcn0gVGhlIHgtY29vcmRpbmF0ZSBvZiB0aGUgZW5kIG9mIHRoZSBhcmNcbiAqIEBwYXJhbSB5MiB7bnVtYmVyfSBUaGUgeS1jb29yZGluYXRlIG9mIHRoZSBlbmQgb2YgdGhlIGFyY1xuICogQHBhcmFtIHJhZGl1cyB7bnVtYmVyfSBUaGUgcmFkaXVzIG9mIHRoZSBhcmNcbiAqIEByZXR1cm4ge1BJWEkuR3JhcGhpY3N9XG4gKi9cbkdyYXBoaWNzLnByb3RvdHlwZS5hcmNUbyA9IGZ1bmN0aW9uICh4MSwgeTEsIHgyLCB5MiwgcmFkaXVzKVxue1xuICAgIGlmICh0aGlzLmN1cnJlbnRQYXRoKVxuICAgIHtcbiAgICAgICAgaWYgKHRoaXMuY3VycmVudFBhdGguc2hhcGUucG9pbnRzLmxlbmd0aCA9PT0gMClcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5jdXJyZW50UGF0aC5zaGFwZS5wb2ludHMucHVzaCh4MSwgeTEpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHRoaXMubW92ZVRvKHgxLCB5MSk7XG4gICAgfVxuXG4gICAgdmFyIHBvaW50cyA9IHRoaXMuY3VycmVudFBhdGguc2hhcGUucG9pbnRzLFxuICAgICAgICBmcm9tWCA9IHBvaW50c1twb2ludHMubGVuZ3RoLTJdLFxuICAgICAgICBmcm9tWSA9IHBvaW50c1twb2ludHMubGVuZ3RoLTFdLFxuICAgICAgICBhMSA9IGZyb21ZIC0geTEsXG4gICAgICAgIGIxID0gZnJvbVggLSB4MSxcbiAgICAgICAgYTIgPSB5MiAgIC0geTEsXG4gICAgICAgIGIyID0geDIgICAtIHgxLFxuICAgICAgICBtbSA9IE1hdGguYWJzKGExICogYjIgLSBiMSAqIGEyKTtcblxuICAgIGlmIChtbSA8IDEuMGUtOCB8fCByYWRpdXMgPT09IDApXG4gICAge1xuICAgICAgICBpZiAocG9pbnRzW3BvaW50cy5sZW5ndGgtMl0gIT09IHgxIHx8IHBvaW50c1twb2ludHMubGVuZ3RoLTFdICE9PSB5MSlcbiAgICAgICAge1xuICAgICAgICAgICAgcG9pbnRzLnB1c2goeDEsIHkxKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICB2YXIgZGQgPSBhMSAqIGExICsgYjEgKiBiMSxcbiAgICAgICAgICAgIGNjID0gYTIgKiBhMiArIGIyICogYjIsXG4gICAgICAgICAgICB0dCA9IGExICogYTIgKyBiMSAqIGIyLFxuICAgICAgICAgICAgazEgPSByYWRpdXMgKiBNYXRoLnNxcnQoZGQpIC8gbW0sXG4gICAgICAgICAgICBrMiA9IHJhZGl1cyAqIE1hdGguc3FydChjYykgLyBtbSxcbiAgICAgICAgICAgIGoxID0gazEgKiB0dCAvIGRkLFxuICAgICAgICAgICAgajIgPSBrMiAqIHR0IC8gY2MsXG4gICAgICAgICAgICBjeCA9IGsxICogYjIgKyBrMiAqIGIxLFxuICAgICAgICAgICAgY3kgPSBrMSAqIGEyICsgazIgKiBhMSxcbiAgICAgICAgICAgIHB4ID0gYjEgKiAoazIgKyBqMSksXG4gICAgICAgICAgICBweSA9IGExICogKGsyICsgajEpLFxuICAgICAgICAgICAgcXggPSBiMiAqIChrMSArIGoyKSxcbiAgICAgICAgICAgIHF5ID0gYTIgKiAoazEgKyBqMiksXG4gICAgICAgICAgICBzdGFydEFuZ2xlID0gTWF0aC5hdGFuMihweSAtIGN5LCBweCAtIGN4KSxcbiAgICAgICAgICAgIGVuZEFuZ2xlICAgPSBNYXRoLmF0YW4yKHF5IC0gY3ksIHF4IC0gY3gpO1xuXG4gICAgICAgIHRoaXMuYXJjKGN4ICsgeDEsIGN5ICsgeTEsIHJhZGl1cywgc3RhcnRBbmdsZSwgZW5kQW5nbGUsIGIxICogYTIgPiBiMiAqIGExKTtcbiAgICB9XG5cbiAgICB0aGlzLmRpcnR5ID0gdGhpcy5ib3VuZHNEaXJ0eSA9IHRydWU7XG5cbiAgICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogVGhlIGFyYyBtZXRob2QgY3JlYXRlcyBhbiBhcmMvY3VydmUgKHVzZWQgdG8gY3JlYXRlIGNpcmNsZXMsIG9yIHBhcnRzIG9mIGNpcmNsZXMpLlxuICpcbiAqIEBwYXJhbSBjeCB7bnVtYmVyfSBUaGUgeC1jb29yZGluYXRlIG9mIHRoZSBjZW50ZXIgb2YgdGhlIGNpcmNsZVxuICogQHBhcmFtIGN5IHtudW1iZXJ9IFRoZSB5LWNvb3JkaW5hdGUgb2YgdGhlIGNlbnRlciBvZiB0aGUgY2lyY2xlXG4gKiBAcGFyYW0gcmFkaXVzIHtudW1iZXJ9IFRoZSByYWRpdXMgb2YgdGhlIGNpcmNsZVxuICogQHBhcmFtIHN0YXJ0QW5nbGUge251bWJlcn0gVGhlIHN0YXJ0aW5nIGFuZ2xlLCBpbiByYWRpYW5zICgwIGlzIGF0IHRoZSAzIG8nY2xvY2sgcG9zaXRpb24gb2YgdGhlIGFyYydzIGNpcmNsZSlcbiAqIEBwYXJhbSBlbmRBbmdsZSB7bnVtYmVyfSBUaGUgZW5kaW5nIGFuZ2xlLCBpbiByYWRpYW5zXG4gKiBAcGFyYW0gYW50aWNsb2Nrd2lzZSB7Ym9vbGVhbn0gT3B0aW9uYWwuIFNwZWNpZmllcyB3aGV0aGVyIHRoZSBkcmF3aW5nIHNob3VsZCBiZSBjb3VudGVyY2xvY2t3aXNlIG9yIGNsb2Nrd2lzZS4gRmFsc2UgaXMgZGVmYXVsdCwgYW5kIGluZGljYXRlcyBjbG9ja3dpc2UsIHdoaWxlIHRydWUgaW5kaWNhdGVzIGNvdW50ZXItY2xvY2t3aXNlLlxuICogQHJldHVybiB7UElYSS5HcmFwaGljc31cbiAqL1xuR3JhcGhpY3MucHJvdG90eXBlLmFyYyA9IGZ1bmN0aW9uKGN4LCBjeSwgcmFkaXVzLCBzdGFydEFuZ2xlLCBlbmRBbmdsZSwgYW50aWNsb2Nrd2lzZSlcbntcbiAgICBhbnRpY2xvY2t3aXNlID0gYW50aWNsb2Nrd2lzZSB8fCBmYWxzZTtcblxuICAgIGlmIChzdGFydEFuZ2xlID09PSBlbmRBbmdsZSlcbiAgICB7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIGlmKCAhYW50aWNsb2Nrd2lzZSAmJiBlbmRBbmdsZSA8PSBzdGFydEFuZ2xlIClcbiAgICB7XG4gICAgICAgIGVuZEFuZ2xlICs9IE1hdGguUEkgKiAyO1xuICAgIH1cbiAgICBlbHNlIGlmKCBhbnRpY2xvY2t3aXNlICYmIHN0YXJ0QW5nbGUgPD0gZW5kQW5nbGUgKVxuICAgIHtcbiAgICAgICAgc3RhcnRBbmdsZSArPSBNYXRoLlBJICogMjtcbiAgICB9XG5cbiAgICB2YXIgc3dlZXAgPSBhbnRpY2xvY2t3aXNlID8gKHN0YXJ0QW5nbGUgLSBlbmRBbmdsZSkgKiAtMSA6IChlbmRBbmdsZSAtIHN0YXJ0QW5nbGUpO1xuICAgIHZhciBzZWdzID0gIE1hdGguY2VpbChNYXRoLmFicyhzd2VlcCkgLyAoTWF0aC5QSSAqIDIpKSAqIDQwO1xuXG4gICAgaWYoc3dlZXAgPT09IDApXG4gICAge1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICB2YXIgc3RhcnRYID0gY3ggKyBNYXRoLmNvcyhzdGFydEFuZ2xlKSAqIHJhZGl1cztcbiAgICB2YXIgc3RhcnRZID0gY3kgKyBNYXRoLnNpbihzdGFydEFuZ2xlKSAqIHJhZGl1cztcblxuICAgIGlmICh0aGlzLmN1cnJlbnRQYXRoKVxuICAgIHtcbiAgICAgICAgdGhpcy5jdXJyZW50UGF0aC5zaGFwZS5wb2ludHMucHVzaChzdGFydFgsIHN0YXJ0WSk7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHRoaXMubW92ZVRvKHN0YXJ0WCwgc3RhcnRZKTtcbiAgICB9XG5cbiAgICB2YXIgcG9pbnRzID0gdGhpcy5jdXJyZW50UGF0aC5zaGFwZS5wb2ludHM7XG5cbiAgICB2YXIgdGhldGEgPSBzd2VlcC8oc2VncyoyKTtcbiAgICB2YXIgdGhldGEyID0gdGhldGEqMjtcblxuICAgIHZhciBjVGhldGEgPSBNYXRoLmNvcyh0aGV0YSk7XG4gICAgdmFyIHNUaGV0YSA9IE1hdGguc2luKHRoZXRhKTtcblxuICAgIHZhciBzZWdNaW51cyA9IHNlZ3MgLSAxO1xuXG4gICAgdmFyIHJlbWFpbmRlciA9ICggc2VnTWludXMgJSAxICkgLyBzZWdNaW51cztcblxuICAgIGZvcih2YXIgaT0wOyBpPD1zZWdNaW51czsgaSsrKVxuICAgIHtcbiAgICAgICAgdmFyIHJlYWwgPSAgaSArIHJlbWFpbmRlciAqIGk7XG5cblxuICAgICAgICB2YXIgYW5nbGUgPSAoKHRoZXRhKSArIHN0YXJ0QW5nbGUgKyAodGhldGEyICogcmVhbCkpO1xuXG4gICAgICAgIHZhciBjID0gTWF0aC5jb3MoYW5nbGUpO1xuICAgICAgICB2YXIgcyA9IC1NYXRoLnNpbihhbmdsZSk7XG5cbiAgICAgICAgcG9pbnRzLnB1c2goKCAoY1RoZXRhICogIGMpICsgKHNUaGV0YSAqIHMpICkgKiByYWRpdXMgKyBjeCxcbiAgICAgICAgICAgICAgICAgICAgKCAoY1RoZXRhICogLXMpICsgKHNUaGV0YSAqIGMpICkgKiByYWRpdXMgKyBjeSk7XG4gICAgfVxuXG4gICAgdGhpcy5kaXJ0eSA9IHRoaXMuYm91bmRzRGlydHkgPSB0cnVlO1xuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIFNwZWNpZmllcyBhIHNpbXBsZSBvbmUtY29sb3IgZmlsbCB0aGF0IHN1YnNlcXVlbnQgY2FsbHMgdG8gb3RoZXIgR3JhcGhpY3MgbWV0aG9kc1xuICogKHN1Y2ggYXMgbGluZVRvKCkgb3IgZHJhd0NpcmNsZSgpKSB1c2Ugd2hlbiBkcmF3aW5nLlxuICpcbiAqIEBwYXJhbSBjb2xvciB7bnVtYmVyfSB0aGUgY29sb3Igb2YgdGhlIGZpbGxcbiAqIEBwYXJhbSBhbHBoYSB7bnVtYmVyfSB0aGUgYWxwaGEgb2YgdGhlIGZpbGxcbiAqIEByZXR1cm4ge1BJWEkuR3JhcGhpY3N9XG4gKi9cbkdyYXBoaWNzLnByb3RvdHlwZS5iZWdpbkZpbGwgPSBmdW5jdGlvbiAoY29sb3IsIGFscGhhKVxue1xuICAgIHRoaXMuZmlsbGluZyA9IHRydWU7XG4gICAgdGhpcy5maWxsQ29sb3IgPSBjb2xvciB8fCAwO1xuICAgIHRoaXMuZmlsbEFscGhhID0gKGFscGhhID09PSB1bmRlZmluZWQpID8gMSA6IGFscGhhO1xuXG4gICAgaWYgKHRoaXMuY3VycmVudFBhdGgpXG4gICAge1xuICAgICAgICBpZiAodGhpcy5jdXJyZW50UGF0aC5zaGFwZS5wb2ludHMubGVuZ3RoIDw9IDIpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuY3VycmVudFBhdGguZmlsbCA9IHRoaXMuZmlsbGluZztcbiAgICAgICAgICAgIHRoaXMuY3VycmVudFBhdGguZmlsbENvbG9yID0gdGhpcy5maWxsQ29sb3I7XG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRQYXRoLmZpbGxBbHBoYSA9IHRoaXMuZmlsbEFscGhhO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBBcHBsaWVzIGEgZmlsbCB0byB0aGUgbGluZXMgYW5kIHNoYXBlcyB0aGF0IHdlcmUgYWRkZWQgc2luY2UgdGhlIGxhc3QgY2FsbCB0byB0aGUgYmVnaW5GaWxsKCkgbWV0aG9kLlxuICpcbiAqIEByZXR1cm4ge0dyYXBoaWNzfVxuICovXG5HcmFwaGljcy5wcm90b3R5cGUuZW5kRmlsbCA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy5maWxsaW5nID0gZmFsc2U7XG4gICAgdGhpcy5maWxsQ29sb3IgPSBudWxsO1xuICAgIHRoaXMuZmlsbEFscGhhID0gMTtcblxuICAgIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKlxuICogQHBhcmFtIHgge251bWJlcn0gVGhlIFggY29vcmQgb2YgdGhlIHRvcC1sZWZ0IG9mIHRoZSByZWN0YW5nbGVcbiAqIEBwYXJhbSB5IHtudW1iZXJ9IFRoZSBZIGNvb3JkIG9mIHRoZSB0b3AtbGVmdCBvZiB0aGUgcmVjdGFuZ2xlXG4gKiBAcGFyYW0gd2lkdGgge251bWJlcn0gVGhlIHdpZHRoIG9mIHRoZSByZWN0YW5nbGVcbiAqIEBwYXJhbSBoZWlnaHQge251bWJlcn0gVGhlIGhlaWdodCBvZiB0aGUgcmVjdGFuZ2xlXG4gKiBAcmV0dXJuIHtQSVhJLkdyYXBoaWNzfVxuICovXG5HcmFwaGljcy5wcm90b3R5cGUuZHJhd1JlY3QgPSBmdW5jdGlvbiAoIHgsIHksIHdpZHRoLCBoZWlnaHQgKVxue1xuICAgIHRoaXMuZHJhd1NoYXBlKG5ldyBtYXRoLlJlY3RhbmdsZSh4LHksIHdpZHRoLCBoZWlnaHQpKTtcblxuICAgIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKlxuICogQHBhcmFtIHgge251bWJlcn0gVGhlIFggY29vcmQgb2YgdGhlIHRvcC1sZWZ0IG9mIHRoZSByZWN0YW5nbGVcbiAqIEBwYXJhbSB5IHtudW1iZXJ9IFRoZSBZIGNvb3JkIG9mIHRoZSB0b3AtbGVmdCBvZiB0aGUgcmVjdGFuZ2xlXG4gKiBAcGFyYW0gd2lkdGgge251bWJlcn0gVGhlIHdpZHRoIG9mIHRoZSByZWN0YW5nbGVcbiAqIEBwYXJhbSBoZWlnaHQge251bWJlcn0gVGhlIGhlaWdodCBvZiB0aGUgcmVjdGFuZ2xlXG4gKiBAcGFyYW0gcmFkaXVzIHtudW1iZXJ9IFJhZGl1cyBvZiB0aGUgcmVjdGFuZ2xlIGNvcm5lcnNcbiAqIEByZXR1cm4ge1BJWEkuR3JhcGhpY3N9XG4gKi9cbkdyYXBoaWNzLnByb3RvdHlwZS5kcmF3Um91bmRlZFJlY3QgPSBmdW5jdGlvbiAoIHgsIHksIHdpZHRoLCBoZWlnaHQsIHJhZGl1cyApXG57XG4gICAgdGhpcy5kcmF3U2hhcGUobmV3IG1hdGguUm91bmRlZFJlY3RhbmdsZSh4LCB5LCB3aWR0aCwgaGVpZ2h0LCByYWRpdXMpKTtcblxuICAgIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBEcmF3cyBhIGNpcmNsZS5cbiAqXG4gKiBAcGFyYW0geCB7bnVtYmVyfSBUaGUgWCBjb29yZGluYXRlIG9mIHRoZSBjZW50ZXIgb2YgdGhlIGNpcmNsZVxuICogQHBhcmFtIHkge251bWJlcn0gVGhlIFkgY29vcmRpbmF0ZSBvZiB0aGUgY2VudGVyIG9mIHRoZSBjaXJjbGVcbiAqIEBwYXJhbSByYWRpdXMge251bWJlcn0gVGhlIHJhZGl1cyBvZiB0aGUgY2lyY2xlXG4gKiBAcmV0dXJuIHtQSVhJLkdyYXBoaWNzfVxuICovXG5HcmFwaGljcy5wcm90b3R5cGUuZHJhd0NpcmNsZSA9IGZ1bmN0aW9uICh4LCB5LCByYWRpdXMpXG57XG4gICAgdGhpcy5kcmF3U2hhcGUobmV3IG1hdGguQ2lyY2xlKHgseSwgcmFkaXVzKSk7XG5cbiAgICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogRHJhd3MgYW4gZWxsaXBzZS5cbiAqXG4gKiBAcGFyYW0geCB7bnVtYmVyfSBUaGUgWCBjb29yZGluYXRlIG9mIHRoZSBjZW50ZXIgb2YgdGhlIGVsbGlwc2VcbiAqIEBwYXJhbSB5IHtudW1iZXJ9IFRoZSBZIGNvb3JkaW5hdGUgb2YgdGhlIGNlbnRlciBvZiB0aGUgZWxsaXBzZVxuICogQHBhcmFtIHdpZHRoIHtudW1iZXJ9IFRoZSBoYWxmIHdpZHRoIG9mIHRoZSBlbGxpcHNlXG4gKiBAcGFyYW0gaGVpZ2h0IHtudW1iZXJ9IFRoZSBoYWxmIGhlaWdodCBvZiB0aGUgZWxsaXBzZVxuICogQHJldHVybiB7UElYSS5HcmFwaGljc31cbiAqL1xuR3JhcGhpY3MucHJvdG90eXBlLmRyYXdFbGxpcHNlID0gZnVuY3Rpb24gKHgsIHksIHdpZHRoLCBoZWlnaHQpXG57XG4gICAgdGhpcy5kcmF3U2hhcGUobmV3IG1hdGguRWxsaXBzZSh4LCB5LCB3aWR0aCwgaGVpZ2h0KSk7XG5cbiAgICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogRHJhd3MgYSBwb2x5Z29uIHVzaW5nIHRoZSBnaXZlbiBwYXRoLlxuICpcbiAqIEBwYXJhbSBwYXRoIHtudW1iZXJbXXxQSVhJLlBvaW50W119IFRoZSBwYXRoIGRhdGEgdXNlZCB0byBjb25zdHJ1Y3QgdGhlIHBvbHlnb24uXG4gKiBAcmV0dXJuIHtQSVhJLkdyYXBoaWNzfVxuICovXG5HcmFwaGljcy5wcm90b3R5cGUuZHJhd1BvbHlnb24gPSBmdW5jdGlvbiAocGF0aClcbntcbiAgICAvLyBwcmV2ZW50cyBhbiBhcmd1bWVudCBhc3NpZ25tZW50IGRlb3B0XG4gICAgLy8gc2VlIHNlY3Rpb24gMy4xOiBodHRwczovL2dpdGh1Yi5jb20vcGV0a2FhbnRvbm92L2JsdWViaXJkL3dpa2kvT3B0aW1pemF0aW9uLWtpbGxlcnMjMy1tYW5hZ2luZy1hcmd1bWVudHNcbiAgICB2YXIgcG9pbnRzID0gcGF0aDtcblxuICAgIHZhciBjbG9zZWQgPSB0cnVlO1xuXG4gICAgaWYgKHBvaW50cyBpbnN0YW5jZW9mIG1hdGguUG9seWdvbilcbiAgICB7XG4gICAgICAgIGNsb3NlZCA9IHBvaW50cy5jbG9zZWQ7XG4gICAgICAgIHBvaW50cyA9IHBvaW50cy5wb2ludHM7XG4gICAgfVxuXG4gICAgaWYgKCFBcnJheS5pc0FycmF5KHBvaW50cykpXG4gICAge1xuICAgICAgICAvLyBwcmV2ZW50cyBhbiBhcmd1bWVudCBsZWFrIGRlb3B0XG4gICAgICAgIC8vIHNlZSBzZWN0aW9uIDMuMjogaHR0cHM6Ly9naXRodWIuY29tL3BldGthYW50b25vdi9ibHVlYmlyZC93aWtpL09wdGltaXphdGlvbi1raWxsZXJzIzMtbWFuYWdpbmctYXJndW1lbnRzXG4gICAgICAgIHBvaW50cyA9IG5ldyBBcnJheShhcmd1bWVudHMubGVuZ3RoKTtcblxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHBvaW50cy5sZW5ndGg7ICsraSlcbiAgICAgICAge1xuICAgICAgICAgICAgcG9pbnRzW2ldID0gYXJndW1lbnRzW2ldO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgdmFyIHNoYXBlID0gbmV3IG1hdGguUG9seWdvbihwb2ludHMpO1xuICAgIHNoYXBlLmNsb3NlZCA9IGNsb3NlZDtcblxuICAgIHRoaXMuZHJhd1NoYXBlKHNoYXBlKTtcblxuICAgIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBDbGVhcnMgdGhlIGdyYXBoaWNzIHRoYXQgd2VyZSBkcmF3biB0byB0aGlzIEdyYXBoaWNzIG9iamVjdCwgYW5kIHJlc2V0cyBmaWxsIGFuZCBsaW5lIHN0eWxlIHNldHRpbmdzLlxuICpcbiAqIEByZXR1cm4ge1BJWEkuR3JhcGhpY3N9XG4gKi9cbkdyYXBoaWNzLnByb3RvdHlwZS5jbGVhciA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy5saW5lV2lkdGggPSAwO1xuICAgIHRoaXMuZmlsbGluZyA9IGZhbHNlO1xuXG4gICAgdGhpcy5kaXJ0eSA9IHRydWU7XG4gICAgdGhpcy5jbGVhckRpcnR5ID0gdHJ1ZTtcbiAgICB0aGlzLmdyYXBoaWNzRGF0YSA9IFtdO1xuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIFVzZWZ1bCBmdW5jdGlvbiB0aGF0IHJldHVybnMgYSB0ZXh0dXJlIG9mIHRoZSBncmFwaGljcyBvYmplY3QgdGhhdCBjYW4gdGhlbiBiZSB1c2VkIHRvIGNyZWF0ZSBzcHJpdGVzXG4gKiBUaGlzIGNhbiBiZSBxdWl0ZSB1c2VmdWwgaWYgeW91ciBnZW9tZXRyeSBpcyBjb21wbGljYXRlZCBhbmQgbmVlZHMgdG8gYmUgcmV1c2VkIG11bHRpcGxlIHRpbWVzLlxuICpcbiAqIEBwYXJhbSByZXNvbHV0aW9uIHtudW1iZXJ9IFRoZSByZXNvbHV0aW9uIG9mIHRoZSB0ZXh0dXJlIGJlaW5nIGdlbmVyYXRlZFxuICogQHBhcmFtIHNjYWxlTW9kZSB7bnVtYmVyfSBTaG91bGQgYmUgb25lIG9mIHRoZSBzY2FsZU1vZGUgY29uc3RzXG4gKiBAcmV0dXJuIHtQSVhJLlRleHR1cmV9IGEgdGV4dHVyZSBvZiB0aGUgZ3JhcGhpY3Mgb2JqZWN0XG4gKi9cbkdyYXBoaWNzLnByb3RvdHlwZS5nZW5lcmF0ZVRleHR1cmUgPSBmdW5jdGlvbiAocmVuZGVyZXIsIHJlc29sdXRpb24sIHNjYWxlTW9kZSlcbntcblxuICAgIHJlc29sdXRpb24gPSByZXNvbHV0aW9uIHx8IDE7XG5cbiAgICB2YXIgYm91bmRzID0gdGhpcy5nZXRMb2NhbEJvdW5kcygpO1xuXG4gICAgdmFyIGNhbnZhc0J1ZmZlciA9IG5ldyBDYW52YXNCdWZmZXIoYm91bmRzLndpZHRoICogcmVzb2x1dGlvbiwgYm91bmRzLmhlaWdodCAqIHJlc29sdXRpb24pO1xuXG4gICAgdmFyIHRleHR1cmUgPSBUZXh0dXJlLmZyb21DYW52YXMoY2FudmFzQnVmZmVyLmNhbnZhcywgc2NhbGVNb2RlKTtcbiAgICB0ZXh0dXJlLmJhc2VUZXh0dXJlLnJlc29sdXRpb24gPSByZXNvbHV0aW9uO1xuXG4gICAgY2FudmFzQnVmZmVyLmNvbnRleHQuc2NhbGUocmVzb2x1dGlvbiwgcmVzb2x1dGlvbik7XG5cbiAgICBjYW52YXNCdWZmZXIuY29udGV4dC50cmFuc2xhdGUoLWJvdW5kcy54LC1ib3VuZHMueSk7XG5cbiAgICBDYW52YXNHcmFwaGljcy5yZW5kZXJHcmFwaGljcyh0aGlzLCBjYW52YXNCdWZmZXIuY29udGV4dCk7XG5cbiAgICByZXR1cm4gdGV4dHVyZTtcbn07XG5cbi8qKlxuICogUmVuZGVycyB0aGUgb2JqZWN0IHVzaW5nIHRoZSBXZWJHTCByZW5kZXJlclxuICpcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5XZWJHTFJlbmRlcmVyfVxuICogQHByaXZhdGVcbiAqL1xuR3JhcGhpY3MucHJvdG90eXBlLl9yZW5kZXJXZWJHTCA9IGZ1bmN0aW9uIChyZW5kZXJlcilcbntcbiAgICAvLyBpZiB0aGUgc3ByaXRlIGlzIG5vdCB2aXNpYmxlIG9yIHRoZSBhbHBoYSBpcyAwIHRoZW4gbm8gbmVlZCB0byByZW5kZXIgdGhpcyBlbGVtZW50XG5cbiAgICBpZiAodGhpcy5nbERpcnR5KVxuICAgIHtcbiAgICAgICAgdGhpcy5kaXJ0eSA9IHRydWU7XG4gICAgICAgIHRoaXMuZ2xEaXJ0eSA9IGZhbHNlO1xuICAgIH1cblxuICAgIHJlbmRlcmVyLnNldE9iamVjdFJlbmRlcmVyKHJlbmRlcmVyLnBsdWdpbnMuZ3JhcGhpY3MpO1xuICAgIHJlbmRlcmVyLnBsdWdpbnMuZ3JhcGhpY3MucmVuZGVyKHRoaXMpO1xuXG59O1xuXG4vKipcbiAqIFJlbmRlcnMgdGhlIG9iamVjdCB1c2luZyB0aGUgQ2FudmFzIHJlbmRlcmVyXG4gKlxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLkNhbnZhc1JlbmRlcmVyfVxuICogQHByaXZhdGVcbiAqL1xuR3JhcGhpY3MucHJvdG90eXBlLl9yZW5kZXJDYW52YXMgPSBmdW5jdGlvbiAocmVuZGVyZXIpXG57XG4gICAgaWYgKHRoaXMuaXNNYXNrID09PSB0cnVlKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIGlmIHRoZSB0aW50IGhhcyBjaGFuZ2VkLCBzZXQgdGhlIGdyYXBoaWNzIG9iamVjdCB0byBkaXJ0eS5cbiAgICBpZiAodGhpcy5fcHJldlRpbnQgIT09IHRoaXMudGludCkge1xuICAgICAgICB0aGlzLmRpcnR5ID0gdHJ1ZTtcbiAgICB9XG5cbiAgICAvLyB0aGlzIGNvZGUgbWF5IHN0aWxsIGJlIG5lZWRlZCBzbyBsZWF2aW5nIGZvciBub3cuLlxuICAgIC8vXG4gICAgLypcbiAgICBpZiAodGhpcy5fY2FjaGVBc0JpdG1hcClcbiAgICB7XG4gICAgICAgIGlmICh0aGlzLmRpcnR5IHx8IHRoaXMuY2FjaGVkU3ByaXRlRGlydHkpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuX2dlbmVyYXRlQ2FjaGVkU3ByaXRlKCk7XG5cbiAgICAgICAgICAgIC8vIHdlIHdpbGwgYWxzbyBuZWVkIHRvIHVwZGF0ZSB0aGUgdGV4dHVyZVxuICAgICAgICAgICAgdGhpcy51cGRhdGVDYWNoZWRTcHJpdGVUZXh0dXJlKCk7XG5cbiAgICAgICAgICAgIHRoaXMuY2FjaGVkU3ByaXRlRGlydHkgPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMuZGlydHkgPSBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX2NhY2hlZFNwcml0ZS5hbHBoYSA9IHRoaXMuYWxwaGE7XG5cbiAgICAgICAgU3ByaXRlLnByb3RvdHlwZS5fcmVuZGVyQ2FudmFzLmNhbGwodGhpcy5fY2FjaGVkU3ByaXRlLCByZW5kZXJlcik7XG5cbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICAqL1xuICAgIHZhciBjb250ZXh0ID0gcmVuZGVyZXIuY29udGV4dDtcbiAgICB2YXIgdHJhbnNmb3JtID0gdGhpcy53b3JsZFRyYW5zZm9ybTtcblxuICAgIHZhciBjb21wb3NpdGVPcGVyYXRpb24gPSByZW5kZXJlci5ibGVuZE1vZGVzW3RoaXMuYmxlbmRNb2RlXTtcbiAgICBpZiAoY29tcG9zaXRlT3BlcmF0aW9uICE9PSBjb250ZXh0Lmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbilcbiAgICB7XG4gICAgICAgIGNvbnRleHQuZ2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uID0gY29tcG9zaXRlT3BlcmF0aW9uO1xuICAgIH1cblxuICAgIHZhciByZXNvbHV0aW9uID0gcmVuZGVyZXIucmVzb2x1dGlvbjtcbiAgICBjb250ZXh0LnNldFRyYW5zZm9ybShcbiAgICAgICAgdHJhbnNmb3JtLmEgKiByZXNvbHV0aW9uLFxuICAgICAgICB0cmFuc2Zvcm0uYiAqIHJlc29sdXRpb24sXG4gICAgICAgIHRyYW5zZm9ybS5jICogcmVzb2x1dGlvbixcbiAgICAgICAgdHJhbnNmb3JtLmQgKiByZXNvbHV0aW9uLFxuICAgICAgICB0cmFuc2Zvcm0udHggKiByZXNvbHV0aW9uLFxuICAgICAgICB0cmFuc2Zvcm0udHkgKiByZXNvbHV0aW9uXG4gICAgKTtcblxuICAgIENhbnZhc0dyYXBoaWNzLnJlbmRlckdyYXBoaWNzKHRoaXMsIGNvbnRleHQpO1xufTtcblxuLyoqXG4gKiBSZXRyaWV2ZXMgdGhlIGJvdW5kcyBvZiB0aGUgZ3JhcGhpYyBzaGFwZSBhcyBhIHJlY3RhbmdsZSBvYmplY3RcbiAqXG4gKiBAcGFyYW0gW21hdHJpeF0ge1BJWEkuTWF0cml4fSBUaGUgd29ybGQgdHJhbnNmb3JtIG1hdHJpeCB0byB1c2UsIGRlZmF1bHRzIHRvIHRoaXNcbiAqICBvYmplY3QncyB3b3JsZFRyYW5zZm9ybS5cbiAqIEByZXR1cm4ge1BJWEkuUmVjdGFuZ2xlfSB0aGUgcmVjdGFuZ3VsYXIgYm91bmRpbmcgYXJlYVxuICovXG5HcmFwaGljcy5wcm90b3R5cGUuZ2V0Qm91bmRzID0gZnVuY3Rpb24gKG1hdHJpeClcbntcbiAgICBpZighdGhpcy5fY3VycmVudEJvdW5kcylcbiAgICB7XG5cbiAgICAgICAgLy8gcmV0dXJuIGFuIGVtcHR5IG9iamVjdCBpZiB0aGUgaXRlbSBpcyBhIG1hc2shXG4gICAgICAgIGlmICghdGhpcy5yZW5kZXJhYmxlKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gbWF0aC5SZWN0YW5nbGUuRU1QVFk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5ib3VuZHNEaXJ0eSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51cGRhdGVMb2NhbEJvdW5kcygpO1xuXG4gICAgICAgICAgICB0aGlzLmdsRGlydHkgPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy5jYWNoZWRTcHJpdGVEaXJ0eSA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLmJvdW5kc0RpcnR5ID0gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgYm91bmRzID0gdGhpcy5fbG9jYWxCb3VuZHM7XG5cbiAgICAgICAgdmFyIHcwID0gYm91bmRzLng7XG4gICAgICAgIHZhciB3MSA9IGJvdW5kcy53aWR0aCArIGJvdW5kcy54O1xuXG4gICAgICAgIHZhciBoMCA9IGJvdW5kcy55O1xuICAgICAgICB2YXIgaDEgPSBib3VuZHMuaGVpZ2h0ICsgYm91bmRzLnk7XG5cbiAgICAgICAgdmFyIHdvcmxkVHJhbnNmb3JtID0gbWF0cml4IHx8IHRoaXMud29ybGRUcmFuc2Zvcm07XG5cbiAgICAgICAgdmFyIGEgPSB3b3JsZFRyYW5zZm9ybS5hO1xuICAgICAgICB2YXIgYiA9IHdvcmxkVHJhbnNmb3JtLmI7XG4gICAgICAgIHZhciBjID0gd29ybGRUcmFuc2Zvcm0uYztcbiAgICAgICAgdmFyIGQgPSB3b3JsZFRyYW5zZm9ybS5kO1xuICAgICAgICB2YXIgdHggPSB3b3JsZFRyYW5zZm9ybS50eDtcbiAgICAgICAgdmFyIHR5ID0gd29ybGRUcmFuc2Zvcm0udHk7XG5cbiAgICAgICAgdmFyIHgxID0gYSAqIHcxICsgYyAqIGgxICsgdHg7XG4gICAgICAgIHZhciB5MSA9IGQgKiBoMSArIGIgKiB3MSArIHR5O1xuXG4gICAgICAgIHZhciB4MiA9IGEgKiB3MCArIGMgKiBoMSArIHR4O1xuICAgICAgICB2YXIgeTIgPSBkICogaDEgKyBiICogdzAgKyB0eTtcblxuICAgICAgICB2YXIgeDMgPSBhICogdzAgKyBjICogaDAgKyB0eDtcbiAgICAgICAgdmFyIHkzID0gZCAqIGgwICsgYiAqIHcwICsgdHk7XG5cbiAgICAgICAgdmFyIHg0ID0gIGEgKiB3MSArIGMgKiBoMCArIHR4O1xuICAgICAgICB2YXIgeTQgPSAgZCAqIGgwICsgYiAqIHcxICsgdHk7XG5cbiAgICAgICAgdmFyIG1heFggPSB4MTtcbiAgICAgICAgdmFyIG1heFkgPSB5MTtcblxuICAgICAgICB2YXIgbWluWCA9IHgxO1xuICAgICAgICB2YXIgbWluWSA9IHkxO1xuXG4gICAgICAgIG1pblggPSB4MiA8IG1pblggPyB4MiA6IG1pblg7XG4gICAgICAgIG1pblggPSB4MyA8IG1pblggPyB4MyA6IG1pblg7XG4gICAgICAgIG1pblggPSB4NCA8IG1pblggPyB4NCA6IG1pblg7XG5cbiAgICAgICAgbWluWSA9IHkyIDwgbWluWSA/IHkyIDogbWluWTtcbiAgICAgICAgbWluWSA9IHkzIDwgbWluWSA/IHkzIDogbWluWTtcbiAgICAgICAgbWluWSA9IHk0IDwgbWluWSA/IHk0IDogbWluWTtcblxuICAgICAgICBtYXhYID0geDIgPiBtYXhYID8geDIgOiBtYXhYO1xuICAgICAgICBtYXhYID0geDMgPiBtYXhYID8geDMgOiBtYXhYO1xuICAgICAgICBtYXhYID0geDQgPiBtYXhYID8geDQgOiBtYXhYO1xuXG4gICAgICAgIG1heFkgPSB5MiA+IG1heFkgPyB5MiA6IG1heFk7XG4gICAgICAgIG1heFkgPSB5MyA+IG1heFkgPyB5MyA6IG1heFk7XG4gICAgICAgIG1heFkgPSB5NCA+IG1heFkgPyB5NCA6IG1heFk7XG5cbiAgICAgICAgdGhpcy5fYm91bmRzLnggPSBtaW5YO1xuICAgICAgICB0aGlzLl9ib3VuZHMud2lkdGggPSBtYXhYIC0gbWluWDtcblxuICAgICAgICB0aGlzLl9ib3VuZHMueSA9IG1pblk7XG4gICAgICAgIHRoaXMuX2JvdW5kcy5oZWlnaHQgPSBtYXhZIC0gbWluWTtcblxuICAgICAgICB0aGlzLl9jdXJyZW50Qm91bmRzID0gdGhpcy5fYm91bmRzO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLl9jdXJyZW50Qm91bmRzO1xufTtcblxuLyoqXG4qIFRlc3RzIGlmIGEgcG9pbnQgaXMgaW5zaWRlIHRoaXMgZ3JhcGhpY3Mgb2JqZWN0XG4qXG4qIEBwYXJhbSBwb2ludCB7UElYSS5Qb2ludH0gdGhlIHBvaW50IHRvIHRlc3RcbiogQHJldHVybiB7Ym9vbGVhbn0gdGhlIHJlc3VsdCBvZiB0aGUgdGVzdFxuKi9cbkdyYXBoaWNzLnByb3RvdHlwZS5jb250YWluc1BvaW50ID0gZnVuY3Rpb24oIHBvaW50IClcbntcbiAgICB0aGlzLndvcmxkVHJhbnNmb3JtLmFwcGx5SW52ZXJzZShwb2ludCwgIHRlbXBQb2ludCk7XG5cbiAgICB2YXIgZ3JhcGhpY3NEYXRhID0gdGhpcy5ncmFwaGljc0RhdGE7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGdyYXBoaWNzRGF0YS5sZW5ndGg7IGkrKylcbiAgICB7XG4gICAgICAgIHZhciBkYXRhID0gZ3JhcGhpY3NEYXRhW2ldO1xuXG4gICAgICAgIGlmICghZGF0YS5maWxsKVxuICAgICAgICB7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIG9ubHkgZGVhbCB3aXRoIGZpbGxzLi5cbiAgICAgICAgaWYgKGRhdGEuc2hhcGUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGlmICggZGF0YS5zaGFwZS5jb250YWlucyggdGVtcFBvaW50LngsIHRlbXBQb2ludC55ICkgKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xufTtcblxuLyoqXG4gKiBVcGRhdGUgdGhlIGJvdW5kcyBvZiB0aGUgb2JqZWN0XG4gKlxuICovXG5HcmFwaGljcy5wcm90b3R5cGUudXBkYXRlTG9jYWxCb3VuZHMgPSBmdW5jdGlvbiAoKVxue1xuICAgIHZhciBtaW5YID0gSW5maW5pdHk7XG4gICAgdmFyIG1heFggPSAtSW5maW5pdHk7XG5cbiAgICB2YXIgbWluWSA9IEluZmluaXR5O1xuICAgIHZhciBtYXhZID0gLUluZmluaXR5O1xuXG4gICAgaWYgKHRoaXMuZ3JhcGhpY3NEYXRhLmxlbmd0aClcbiAgICB7XG4gICAgICAgIHZhciBzaGFwZSwgcG9pbnRzLCB4LCB5LCB3LCBoO1xuXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5ncmFwaGljc0RhdGEubGVuZ3RoOyBpKyspXG4gICAgICAgIHtcbiAgICAgICAgICAgIHZhciBkYXRhID0gdGhpcy5ncmFwaGljc0RhdGFbaV07XG4gICAgICAgICAgICB2YXIgdHlwZSA9IGRhdGEudHlwZTtcbiAgICAgICAgICAgIHZhciBsaW5lV2lkdGggPSBkYXRhLmxpbmVXaWR0aDtcbiAgICAgICAgICAgIHNoYXBlID0gZGF0YS5zaGFwZTtcblxuICAgICAgICAgICAgaWYgKHR5cGUgPT09IENPTlNULlNIQVBFUy5SRUNUIHx8IHR5cGUgPT09IENPTlNULlNIQVBFUy5SUkVDKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHggPSBzaGFwZS54IC0gbGluZVdpZHRoLzI7XG4gICAgICAgICAgICAgICAgeSA9IHNoYXBlLnkgLSBsaW5lV2lkdGgvMjtcbiAgICAgICAgICAgICAgICB3ID0gc2hhcGUud2lkdGggKyBsaW5lV2lkdGg7XG4gICAgICAgICAgICAgICAgaCA9IHNoYXBlLmhlaWdodCArIGxpbmVXaWR0aDtcblxuICAgICAgICAgICAgICAgIG1pblggPSB4IDwgbWluWCA/IHggOiBtaW5YO1xuICAgICAgICAgICAgICAgIG1heFggPSB4ICsgdyA+IG1heFggPyB4ICsgdyA6IG1heFg7XG5cbiAgICAgICAgICAgICAgICBtaW5ZID0geSA8IG1pblkgPyB5IDogbWluWTtcbiAgICAgICAgICAgICAgICBtYXhZID0geSArIGggPiBtYXhZID8geSArIGggOiBtYXhZO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAodHlwZSA9PT0gQ09OU1QuU0hBUEVTLkNJUkMpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgeCA9IHNoYXBlLng7XG4gICAgICAgICAgICAgICAgeSA9IHNoYXBlLnk7XG4gICAgICAgICAgICAgICAgdyA9IHNoYXBlLnJhZGl1cyArIGxpbmVXaWR0aC8yO1xuICAgICAgICAgICAgICAgIGggPSBzaGFwZS5yYWRpdXMgKyBsaW5lV2lkdGgvMjtcblxuICAgICAgICAgICAgICAgIG1pblggPSB4IC0gdyA8IG1pblggPyB4IC0gdyA6IG1pblg7XG4gICAgICAgICAgICAgICAgbWF4WCA9IHggKyB3ID4gbWF4WCA/IHggKyB3IDogbWF4WDtcblxuICAgICAgICAgICAgICAgIG1pblkgPSB5IC0gaCA8IG1pblkgPyB5IC0gaCA6IG1pblk7XG4gICAgICAgICAgICAgICAgbWF4WSA9IHkgKyBoID4gbWF4WSA/IHkgKyBoIDogbWF4WTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKHR5cGUgPT09IENPTlNULlNIQVBFUy5FTElQKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHggPSBzaGFwZS54O1xuICAgICAgICAgICAgICAgIHkgPSBzaGFwZS55O1xuICAgICAgICAgICAgICAgIHcgPSBzaGFwZS53aWR0aCArIGxpbmVXaWR0aC8yO1xuICAgICAgICAgICAgICAgIGggPSBzaGFwZS5oZWlnaHQgKyBsaW5lV2lkdGgvMjtcblxuICAgICAgICAgICAgICAgIG1pblggPSB4IC0gdyA8IG1pblggPyB4IC0gdyA6IG1pblg7XG4gICAgICAgICAgICAgICAgbWF4WCA9IHggKyB3ID4gbWF4WCA/IHggKyB3IDogbWF4WDtcblxuICAgICAgICAgICAgICAgIG1pblkgPSB5IC0gaCA8IG1pblkgPyB5IC0gaCA6IG1pblk7XG4gICAgICAgICAgICAgICAgbWF4WSA9IHkgKyBoID4gbWF4WSA/IHkgKyBoIDogbWF4WTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAvLyBQT0xZXG4gICAgICAgICAgICAgICAgcG9pbnRzID0gc2hhcGUucG9pbnRzO1xuXG4gICAgICAgICAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBwb2ludHMubGVuZ3RoOyBqICs9IDIpXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICB4ID0gcG9pbnRzW2pdO1xuICAgICAgICAgICAgICAgICAgICB5ID0gcG9pbnRzW2orMV07XG5cbiAgICAgICAgICAgICAgICAgICAgbWluWCA9IHgtbGluZVdpZHRoIDwgbWluWCA/IHgtbGluZVdpZHRoIDogbWluWDtcbiAgICAgICAgICAgICAgICAgICAgbWF4WCA9IHgrbGluZVdpZHRoID4gbWF4WCA/IHgrbGluZVdpZHRoIDogbWF4WDtcblxuICAgICAgICAgICAgICAgICAgICBtaW5ZID0geS1saW5lV2lkdGggPCBtaW5ZID8geS1saW5lV2lkdGggOiBtaW5ZO1xuICAgICAgICAgICAgICAgICAgICBtYXhZID0geStsaW5lV2lkdGggPiBtYXhZID8geStsaW5lV2lkdGggOiBtYXhZO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICBtaW5YID0gMDtcbiAgICAgICAgbWF4WCA9IDA7XG4gICAgICAgIG1pblkgPSAwO1xuICAgICAgICBtYXhZID0gMDtcbiAgICB9XG5cbiAgICB2YXIgcGFkZGluZyA9IHRoaXMuYm91bmRzUGFkZGluZztcblxuICAgIHRoaXMuX2xvY2FsQm91bmRzLnggPSBtaW5YIC0gcGFkZGluZztcbiAgICB0aGlzLl9sb2NhbEJvdW5kcy53aWR0aCA9IChtYXhYIC0gbWluWCkgKyBwYWRkaW5nICogMjtcblxuICAgIHRoaXMuX2xvY2FsQm91bmRzLnkgPSBtaW5ZIC0gcGFkZGluZztcbiAgICB0aGlzLl9sb2NhbEJvdW5kcy5oZWlnaHQgPSAobWF4WSAtIG1pblkpICsgcGFkZGluZyAqIDI7XG59O1xuXG4vKipcbiAqIEdlbmVyYXRlcyB0aGUgY2FjaGVkIHNwcml0ZSB3aGVuIHRoZSBzcHJpdGUgaGFzIGNhY2hlQXNCaXRtYXAgPSB0cnVlXG4gKlxuICogQHByaXZhdGVcbiAqL1xuLypcbkdyYXBoaWNzLnByb3RvdHlwZS5fZ2VuZXJhdGVDYWNoZWRTcHJpdGUgPSBmdW5jdGlvbiAoKVxue1xuICAgIHZhciBib3VuZHMgPSB0aGlzLmdldExvY2FsQm91bmRzKCk7XG5cbiAgICBpZiAoIXRoaXMuX2NhY2hlZFNwcml0ZSlcbiAgICB7XG4gICAgICAgIHZhciBjYW52YXNCdWZmZXIgPSBuZXcgQ2FudmFzQnVmZmVyKGJvdW5kcy53aWR0aCwgYm91bmRzLmhlaWdodCk7XG4gICAgICAgIHZhciB0ZXh0dXJlID0gVGV4dHVyZS5mcm9tQ2FudmFzKGNhbnZhc0J1ZmZlci5jYW52YXMpO1xuXG4gICAgICAgIHRoaXMuX2NhY2hlZFNwcml0ZSA9IG5ldyBTcHJpdGUodGV4dHVyZSk7XG4gICAgICAgIHRoaXMuX2NhY2hlZFNwcml0ZS5idWZmZXIgPSBjYW52YXNCdWZmZXI7XG5cbiAgICAgICAgdGhpcy5fY2FjaGVkU3ByaXRlLndvcmxkVHJhbnNmb3JtID0gdGhpcy53b3JsZFRyYW5zZm9ybTtcbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgdGhpcy5fY2FjaGVkU3ByaXRlLmJ1ZmZlci5yZXNpemUoYm91bmRzLndpZHRoLCBib3VuZHMuaGVpZ2h0KTtcbiAgICB9XG5cbiAgICAvLyBsZXZlcmFnZSB0aGUgYW5jaG9yIHRvIGFjY291bnQgZm9yIHRoZSBvZmZzZXQgb2YgdGhlIGVsZW1lbnRcbiAgICB0aGlzLl9jYWNoZWRTcHJpdGUuYW5jaG9yLnggPSAtKCBib3VuZHMueCAvIGJvdW5kcy53aWR0aCApO1xuICAgIHRoaXMuX2NhY2hlZFNwcml0ZS5hbmNob3IueSA9IC0oIGJvdW5kcy55IC8gYm91bmRzLmhlaWdodCApO1xuXG4gICAgLy8gdGhpcy5fY2FjaGVkU3ByaXRlLmJ1ZmZlci5jb250ZXh0LnNhdmUoKTtcbiAgICB0aGlzLl9jYWNoZWRTcHJpdGUuYnVmZmVyLmNvbnRleHQudHJhbnNsYXRlKC1ib3VuZHMueCwtYm91bmRzLnkpO1xuXG4gICAgLy8gbWFrZSBzdXJlIHdlIHNldCB0aGUgYWxwaGEgb2YgdGhlIGdyYXBoaWNzIHRvIDEgZm9yIHRoZSByZW5kZXIuLlxuICAgIHRoaXMud29ybGRBbHBoYSA9IDE7XG5cbiAgICAvLyBub3cgcmVuZGVyIHRoZSBncmFwaGljLi5cbiAgICBDYW52YXNHcmFwaGljcy5yZW5kZXJHcmFwaGljcyh0aGlzLCB0aGlzLl9jYWNoZWRTcHJpdGUuYnVmZmVyLmNvbnRleHQpO1xuXG4gICAgdGhpcy5fY2FjaGVkU3ByaXRlLmFscGhhID0gdGhpcy5hbHBoYTtcbn07XG4qL1xuLyoqXG4gKiBVcGRhdGVzIHRleHR1cmUgc2l6ZSBiYXNlZCBvbiBjYW52YXMgc2l6ZVxuICpcbiAqIEBwcml2YXRlXG4gKi9cbi8qXG5HcmFwaGljcy5wcm90b3R5cGUudXBkYXRlQ2FjaGVkU3ByaXRlVGV4dHVyZSA9IGZ1bmN0aW9uICgpXG57XG4gICAgdmFyIGNhY2hlZFNwcml0ZSA9IHRoaXMuX2NhY2hlZFNwcml0ZTtcbiAgICB2YXIgdGV4dHVyZSA9IGNhY2hlZFNwcml0ZS50ZXh0dXJlO1xuICAgIHZhciBjYW52YXMgPSBjYWNoZWRTcHJpdGUuYnVmZmVyLmNhbnZhcztcblxuICAgIHRleHR1cmUuYmFzZVRleHR1cmUud2lkdGggPSBjYW52YXMud2lkdGg7XG4gICAgdGV4dHVyZS5iYXNlVGV4dHVyZS5oZWlnaHQgPSBjYW52YXMuaGVpZ2h0O1xuICAgIHRleHR1cmUuY3JvcC53aWR0aCA9IHRleHR1cmUuZnJhbWUud2lkdGggPSBjYW52YXMud2lkdGg7XG4gICAgdGV4dHVyZS5jcm9wLmhlaWdodCA9IHRleHR1cmUuZnJhbWUuaGVpZ2h0ID0gY2FudmFzLmhlaWdodDtcblxuICAgIGNhY2hlZFNwcml0ZS5fd2lkdGggPSBjYW52YXMud2lkdGg7XG4gICAgY2FjaGVkU3ByaXRlLl9oZWlnaHQgPSBjYW52YXMuaGVpZ2h0O1xuXG4gICAgLy8gdXBkYXRlIHRoZSBkaXJ0eSBiYXNlIHRleHR1cmVzXG4gICAgdGV4dHVyZS5iYXNlVGV4dHVyZS5kaXJ0eSgpO1xufTsqL1xuXG4vKipcbiAqIERlc3Ryb3lzIGEgcHJldmlvdXMgY2FjaGVkIHNwcml0ZS5cbiAqXG4gKi9cbi8qXG5HcmFwaGljcy5wcm90b3R5cGUuZGVzdHJveUNhY2hlZFNwcml0ZSA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy5fY2FjaGVkU3ByaXRlLnRleHR1cmUuZGVzdHJveSh0cnVlKTtcblxuICAgIC8vIGxldCB0aGUgZ2MgY29sbGVjdCB0aGUgdW51c2VkIHNwcml0ZVxuICAgIC8vIFRPRE8gY291bGQgYmUgb2JqZWN0IHBvb2xlZCFcbiAgICB0aGlzLl9jYWNoZWRTcHJpdGUgPSBudWxsO1xufTsqL1xuXG4vKipcbiAqIERyYXdzIHRoZSBnaXZlbiBzaGFwZSB0byB0aGlzIEdyYXBoaWNzIG9iamVjdC4gQ2FuIGJlIGFueSBvZiBDaXJjbGUsIFJlY3RhbmdsZSwgRWxsaXBzZSwgTGluZSBvciBQb2x5Z29uLlxuICpcbiAqIEBwYXJhbSBzaGFwZSB7UElYSS5DaXJjbGV8UElYSS5SZWN0YW5nbGV8UElYSS5FbGxpcHNlfFBJWEkuTGluZXxQSVhJLlBvbHlnb259IFRoZSBzaGFwZSBvYmplY3QgdG8gZHJhdy5cbiAqIEByZXR1cm4ge1BJWEkuR3JhcGhpY3NEYXRhfSBUaGUgZ2VuZXJhdGVkIEdyYXBoaWNzRGF0YSBvYmplY3QuXG4gKi9cbkdyYXBoaWNzLnByb3RvdHlwZS5kcmF3U2hhcGUgPSBmdW5jdGlvbiAoc2hhcGUpXG57XG4gICAgaWYgKHRoaXMuY3VycmVudFBhdGgpXG4gICAge1xuICAgICAgICAvLyBjaGVjayBjdXJyZW50IHBhdGghXG4gICAgICAgIGlmICh0aGlzLmN1cnJlbnRQYXRoLnNoYXBlLnBvaW50cy5sZW5ndGggPD0gMilcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5ncmFwaGljc0RhdGEucG9wKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLmN1cnJlbnRQYXRoID0gbnVsbDtcblxuICAgIHZhciBkYXRhID0gbmV3IEdyYXBoaWNzRGF0YSh0aGlzLmxpbmVXaWR0aCwgdGhpcy5saW5lQ29sb3IsIHRoaXMubGluZUFscGhhLCB0aGlzLmZpbGxDb2xvciwgdGhpcy5maWxsQWxwaGEsIHRoaXMuZmlsbGluZywgc2hhcGUpO1xuXG4gICAgdGhpcy5ncmFwaGljc0RhdGEucHVzaChkYXRhKTtcblxuICAgIGlmIChkYXRhLnR5cGUgPT09IENPTlNULlNIQVBFUy5QT0xZKVxuICAgIHtcbiAgICAgICAgZGF0YS5zaGFwZS5jbG9zZWQgPSBkYXRhLnNoYXBlLmNsb3NlZCB8fCB0aGlzLmZpbGxpbmc7XG4gICAgICAgIHRoaXMuY3VycmVudFBhdGggPSBkYXRhO1xuICAgIH1cblxuICAgIHRoaXMuZGlydHkgPSB0aGlzLmJvdW5kc0RpcnR5ID0gdHJ1ZTtcblxuICAgIHJldHVybiBkYXRhO1xufTtcblxuLyoqXG4gKiBEZXN0cm95cyB0aGUgR3JhcGhpY3Mgb2JqZWN0LlxuICovXG5HcmFwaGljcy5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uICgpIHtcbiAgICBDb250YWluZXIucHJvdG90eXBlLmRlc3Ryb3kuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcblxuICAgIC8vIGRlc3Ryb3kgZWFjaCBvZiB0aGUgR3JhcGhpY3NEYXRhIG9iamVjdHNcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuZ3JhcGhpY3NEYXRhLmxlbmd0aDsgKytpKSB7XG4gICAgICAgIHRoaXMuZ3JhcGhpY3NEYXRhW2ldLmRlc3Ryb3koKTtcbiAgICB9XG5cbiAgICAvLyBmb3IgZWFjaCB3ZWJnbCBkYXRhIGVudHJ5LCBkZXN0cm95IHRoZSBXZWJHTEdyYXBoaWNzRGF0YVxuICAgIGZvciAodmFyIGlkIGluIHRoaXMuX3dlYmdsKSB7XG4gICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgdGhpcy5fd2ViZ2xbaWRdLmRhdGEubGVuZ3RoOyArK2opIHtcbiAgICAgICAgICAgIHRoaXMuX3dlYmdsW2lkXS5kYXRhW2pdLmRlc3Ryb3koKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMuZ3JhcGhpY3NEYXRhID0gbnVsbDtcblxuICAgIHRoaXMuY3VycmVudFBhdGggPSBudWxsO1xuICAgIHRoaXMuX3dlYmdsID0gbnVsbDtcbiAgICB0aGlzLl9sb2NhbEJvdW5kcyA9IG51bGw7XG59O1xuIiwiLyoqXG4gKiBBIEdyYXBoaWNzRGF0YSBvYmplY3QuXG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIGxpbmVXaWR0aCB7bnVtYmVyfSB0aGUgd2lkdGggb2YgdGhlIGxpbmUgdG8gZHJhd1xuICogQHBhcmFtIGxpbmVDb2xvciB7bnVtYmVyfSB0aGUgY29sb3Igb2YgdGhlIGxpbmUgdG8gZHJhd1xuICogQHBhcmFtIGxpbmVBbHBoYSB7bnVtYmVyfSB0aGUgYWxwaGEgb2YgdGhlIGxpbmUgdG8gZHJhd1xuICogQHBhcmFtIGZpbGxDb2xvciB7bnVtYmVyfSB0aGUgY29sb3Igb2YgdGhlIGZpbGxcbiAqIEBwYXJhbSBmaWxsQWxwaGEge251bWJlcn0gdGhlIGFscGhhIG9mIHRoZSBmaWxsXG4gKiBAcGFyYW0gZmlsbCAgICAgIHtib29sZWFufSB3aGV0aGVyIG9yIG5vdCB0aGUgc2hhcGUgaXMgZmlsbGVkIHdpdGggYSBjb2xvdXJcbiAqIEBwYXJhbSBzaGFwZSAgICAge0NpcmNsZXxSZWN0YW5nbGV8RWxsaXBzZXxMaW5lfFBvbHlnb259IFRoZSBzaGFwZSBvYmplY3QgdG8gZHJhdy5cbiAqL1xuZnVuY3Rpb24gR3JhcGhpY3NEYXRhKGxpbmVXaWR0aCwgbGluZUNvbG9yLCBsaW5lQWxwaGEsIGZpbGxDb2xvciwgZmlsbEFscGhhLCBmaWxsLCBzaGFwZSlcbntcbiAgICAvKlxuICAgICAqIEBtZW1iZXIge251bWJlcn0gdGhlIHdpZHRoIG9mIHRoZSBsaW5lIHRvIGRyYXdcbiAgICAgKi9cbiAgICB0aGlzLmxpbmVXaWR0aCA9IGxpbmVXaWR0aDtcblxuICAgIC8qXG4gICAgICogQG1lbWJlciB7bnVtYmVyfSB0aGUgY29sb3Igb2YgdGhlIGxpbmUgdG8gZHJhd1xuICAgICAqL1xuICAgIHRoaXMubGluZUNvbG9yID0gbGluZUNvbG9yO1xuICAgIC8qXG4gICAgICogQG1lbWJlciB7bnVtYmVyfSB0aGUgYWxwaGEgb2YgdGhlIGxpbmUgdG8gZHJhd1xuICAgICAqL1xuICAgIHRoaXMubGluZUFscGhhID0gbGluZUFscGhhO1xuICAgIC8qXG4gICAgICogQG1lbWJlciB7bnVtYmVyfSBjYWNoZWQgdGludCBvZiB0aGUgbGluZSB0byBkcmF3XG4gICAgICovXG4gICAgdGhpcy5fbGluZVRpbnQgPSBsaW5lQ29sb3I7XG5cbiAgICAvKlxuICAgICAqIEBtZW1iZXIge251bWJlcn0gdGhlIGNvbG9yIG9mIHRoZSBmaWxsXG4gICAgICovXG4gICAgdGhpcy5maWxsQ29sb3IgPSBmaWxsQ29sb3I7XG5cbiAgICAvKlxuICAgICAqIEBtZW1iZXIge251bWJlcn0gdGhlIGFscGhhIG9mIHRoZSBmaWxsXG4gICAgICovXG4gICAgdGhpcy5maWxsQWxwaGEgPSBmaWxsQWxwaGE7XG5cbiAgICAvKlxuICAgICAqIEBtZW1iZXIge251bWJlcn0gY2FjaGVkIHRpbnQgb2YgdGhlIGZpbGxcbiAgICAgKi9cbiAgICB0aGlzLl9maWxsVGludCA9IGZpbGxDb2xvcjtcblxuICAgIC8qXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn0gd2hldGhlciBvciBub3QgdGhlIHNoYXBlIGlzIGZpbGxlZCB3aXRoIGEgY29sb3VyXG4gICAgICovXG4gICAgdGhpcy5maWxsID0gZmlsbDtcblxuICAgIC8qXG4gICAgICogQG1lbWJlciB7UElYSS5DaXJjbGV8UElYSS5SZWN0YW5nbGV8UElYSS5FbGxpcHNlfFBJWEkuTGluZXxQSVhJLlBvbHlnb259IFRoZSBzaGFwZSBvYmplY3QgdG8gZHJhdy5cbiAgICAgKi9cbiAgICB0aGlzLnNoYXBlID0gc2hhcGU7XG5cbiAgICAvKlxuICAgICAqIEBtZW1iZXIge251bWJlcn0gVGhlIHR5cGUgb2YgdGhlIHNoYXBlLCBzZWUgdGhlIENvbnN0LlNoYXBlcyBmaWxlIGZvciBhbGwgdGhlIGV4aXN0aW5nIHR5cGVzLFxuICAgICAqL1xuICAgIHRoaXMudHlwZSA9IHNoYXBlLnR5cGU7XG59XG5cbkdyYXBoaWNzRGF0YS5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBHcmFwaGljc0RhdGE7XG5tb2R1bGUuZXhwb3J0cyA9IEdyYXBoaWNzRGF0YTtcblxuLyoqXG4gKiBDcmVhdGVzIGEgbmV3IEdyYXBoaWNzRGF0YSBvYmplY3Qgd2l0aCB0aGUgc2FtZSB2YWx1ZXMgYXMgdGhpcyBvbmUuXG4gKlxuICogQHJldHVybiB7UElYSS5HcmFwaGljc0RhdGF9XG4gKi9cbkdyYXBoaWNzRGF0YS5wcm90b3R5cGUuY2xvbmUgPSBmdW5jdGlvbiAoKVxue1xuICAgIHJldHVybiBuZXcgR3JhcGhpY3NEYXRhKFxuICAgICAgICB0aGlzLmxpbmVXaWR0aCxcbiAgICAgICAgdGhpcy5saW5lQ29sb3IsXG4gICAgICAgIHRoaXMubGluZUFscGhhLFxuICAgICAgICB0aGlzLmZpbGxDb2xvcixcbiAgICAgICAgdGhpcy5maWxsQWxwaGEsXG4gICAgICAgIHRoaXMuZmlsbCxcbiAgICAgICAgdGhpcy5zaGFwZVxuICAgICk7XG59O1xuXG4vKipcbiAqIERlc3Ryb3lzIHRoZSBHcmFwaGljcyBkYXRhLlxuICovXG5HcmFwaGljc0RhdGEucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoKSB7XG4gICAgdGhpcy5zaGFwZSA9IG51bGw7XG59O1xuIiwidmFyIHV0aWxzID0gcmVxdWlyZSgnLi4vLi4vdXRpbHMnKSxcbiAgICBtYXRoID0gcmVxdWlyZSgnLi4vLi4vbWF0aCcpLFxuICAgIENPTlNUID0gcmVxdWlyZSgnLi4vLi4vY29uc3QnKSxcbiAgICBPYmplY3RSZW5kZXJlciA9IHJlcXVpcmUoJy4uLy4uL3JlbmRlcmVycy93ZWJnbC91dGlscy9PYmplY3RSZW5kZXJlcicpLFxuICAgIFdlYkdMUmVuZGVyZXIgPSByZXF1aXJlKCcuLi8uLi9yZW5kZXJlcnMvd2ViZ2wvV2ViR0xSZW5kZXJlcicpLFxuICAgIFdlYkdMR3JhcGhpY3NEYXRhID0gcmVxdWlyZSgnLi9XZWJHTEdyYXBoaWNzRGF0YScpLFxuICAgIFByaW1pdGl2ZVNoYWRlciA9IHJlcXVpcmUoJy4vc2hhZGVycy9QcmltaXRpdmVTaGFkZXInKSxcblxuICAgIC8vIHNvbWUgZHJhd2luZyBmdW5jdGlvbnMuLlxuICAgIGJ1aWxkTGluZSA9IHJlcXVpcmUoJy4vdXRpbHMvYnVpbGRMaW5lJyk7XG4gICAgYnVpbGRQb2x5ID0gcmVxdWlyZSgnLi91dGlscy9idWlsZFBvbHknKTtcbiAgICBidWlsZENvbXBsZXhQb2x5ID0gcmVxdWlyZSgnLi91dGlscy9idWlsZENvbXBsZXhQb2x5Jyk7XG4gICAgYnVpbGRSZWN0YW5nbGUgPSByZXF1aXJlKCcuL3V0aWxzL2J1aWxkUmVjdGFuZ2xlJyk7XG4gICAgYnVpbGRSb3VuZGVkUmVjdGFuZ2xlID0gcmVxdWlyZSgnLi91dGlscy9idWlsZFJvdW5kZWRSZWN0YW5nbGUnKTtcbiAgICBidWlsZENpcmNsZSA9IHJlcXVpcmUoJy4vdXRpbHMvYnVpbGRDaXJjbGUnKTtcblxuICAgIGVhcmN1dCA9IHJlcXVpcmUoJ2VhcmN1dCcpO1xuXG4vKipcbiAqIFJlbmRlcnMgdGhlIGdyYXBoaWNzIG9iamVjdC5cbiAqXG4gKiBAY2xhc3NcbiAqIEBwcml2YXRlXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQGV4dGVuZHMgUElYSS5PYmplY3RSZW5kZXJlclxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLldlYkdMUmVuZGVyZXJ9IFRoZSByZW5kZXJlciB0aGlzIG9iamVjdCByZW5kZXJlciB3b3JrcyBmb3IuXG4gKi9cbmZ1bmN0aW9uIEdyYXBoaWNzUmVuZGVyZXIocmVuZGVyZXIpXG57XG4gICAgT2JqZWN0UmVuZGVyZXIuY2FsbCh0aGlzLCByZW5kZXJlcik7XG5cbiAgICB0aGlzLmdyYXBoaWNzRGF0YVBvb2wgPSBbXTtcblxuICAgIHRoaXMucHJpbWl0aXZlU2hhZGVyID0gbnVsbDtcbiAgICB0aGlzLmNvbXBsZXhQcmltaXRpdmVTaGFkZXIgPSBudWxsO1xuXG4gICAgdGhpcy5nbCA9IHJlbmRlcmVyLmdsO1xuXG4gICAgLyoqXG4gICAgICogVGhpcyBpcyB0aGUgbWF4aW11bSBudW1iZXIgb2YgcG9pbnRzIGEgcG9seSBjYW4gY29udGFpbiBiZWZvcmUgaXQgaXMgcmVuZGVyZWQgYXMgYSBjb21wbGV4IHBvbHlnb24gKHVzaW5nIHRoZSBzdGVuY2lsIGJ1ZmZlcilcbiAgICAgKiBAdHlwZSB7TnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMubWF4aW11bVNpbXBsZVBvbHlTaXplID0gMjAwO1xufVxuXG5HcmFwaGljc1JlbmRlcmVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoT2JqZWN0UmVuZGVyZXIucHJvdG90eXBlKTtcbkdyYXBoaWNzUmVuZGVyZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gR3JhcGhpY3NSZW5kZXJlcjtcbm1vZHVsZS5leHBvcnRzID0gR3JhcGhpY3NSZW5kZXJlcjtcblxuV2ViR0xSZW5kZXJlci5yZWdpc3RlclBsdWdpbignZ3JhcGhpY3MnLCBHcmFwaGljc1JlbmRlcmVyKTtcblxuLyoqXG4gKiBDYWxsZWQgd2hlbiB0aGVyZSBpcyBhIFdlYkdMIGNvbnRleHQgY2hhbmdlXG4gKlxuICogQHByaXZhdGVcbiAqXG4gKi9cbkdyYXBoaWNzUmVuZGVyZXIucHJvdG90eXBlLm9uQ29udGV4dENoYW5nZSA9IGZ1bmN0aW9uKClcbntcbiAgICB0aGlzLmdsID0gdGhpcy5yZW5kZXJlci5nbDtcbiAgICB0aGlzLnByaW1pdGl2ZVNoYWRlciA9IG5ldyBQcmltaXRpdmVTaGFkZXIodGhpcy5nbClcbn07XG5cbi8qKlxuICogRGVzdHJveXMgdGhpcyByZW5kZXJlci5cbiAqXG4gKi9cbkdyYXBoaWNzUmVuZGVyZXIucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoKSB7XG4gICAgT2JqZWN0UmVuZGVyZXIucHJvdG90eXBlLmRlc3Ryb3kuY2FsbCh0aGlzKTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5ncmFwaGljc0RhdGFQb29sLmxlbmd0aDsgKytpKSB7XG4gICAgICAgIHRoaXMuZ3JhcGhpY3NEYXRhUG9vbFtpXS5kZXN0cm95KCk7XG4gICAgfVxuXG4gICAgdGhpcy5ncmFwaGljc0RhdGFQb29sID0gbnVsbDtcbn07XG5cbi8qKlxuICogUmVuZGVycyBhIGdyYXBoaWNzIG9iamVjdC5cbiAqXG4gKiBAcGFyYW0gZ3JhcGhpY3Mge1BJWEkuR3JhcGhpY3N9IFRoZSBncmFwaGljcyBvYmplY3QgdG8gcmVuZGVyLlxuICovXG5HcmFwaGljc1JlbmRlcmVyLnByb3RvdHlwZS5yZW5kZXIgPSBmdW5jdGlvbihncmFwaGljcylcbntcbiAgICB2YXIgcmVuZGVyZXIgPSB0aGlzLnJlbmRlcmVyO1xuICAgIHZhciBnbCA9IHJlbmRlcmVyLmdsO1xuXG4gICAgdmFyIHdlYkdMRGF0YTtcbiAgLy8gIGNvbnNvbGUubG9nKGdyYXBoaWNzKVxuICAgIGlmIChncmFwaGljcy5kaXJ0eSB8fCAhZ3JhcGhpY3MuX3dlYkdMW2dsLmlkXSlcbiAgICB7XG4gICAgICAgIHRoaXMudXBkYXRlR3JhcGhpY3MoZ3JhcGhpY3MpO1xuICAgIH1cblxuICAgIHZhciB3ZWJHTCA9IGdyYXBoaWNzLl93ZWJHTFtnbC5pZF07XG5cbiAgICAvLyBUaGlzICBjb3VsZCBiZSBzcGVlZGVkIHVwIGZvciBzdXJlIVxuXG4gICAgcmVuZGVyZXIuYmxlbmRNb2RlTWFuYWdlci5zZXRCbGVuZE1vZGUoIGdyYXBoaWNzLmJsZW5kTW9kZSApO1xuXG4vLyAgICB2YXIgbWF0cml4ID0gIGdyYXBoaWNzLndvcmxkVHJhbnNmb3JtLmNsb25lKCk7XG4vLyAgICB2YXIgbWF0cml4ID0gIHJlbmRlcmVyLmN1cnJlbnRSZW5kZXJUYXJnZXQucHJvamVjdGlvbk1hdHJpeC5jbG9uZSgpO1xuLy8gICAgbWF0cml4LmFwcGVuZChncmFwaGljcy53b3JsZFRyYW5zZm9ybSk7XG5cbiAgICBmb3IgKHZhciBpID0gMCwgbiA9IHdlYkdMLmRhdGEubGVuZ3RoOyBpIDwgbjsgaSsrKVxuICAgIHtcbiAgICAgICAgd2ViR0xEYXRhID0gd2ViR0wuZGF0YVtpXTtcblxuICAgICAgICBpZiAod2ViR0wuZGF0YVtpXS5tb2RlID09PSAxKVxuICAgICAgICB7XG4gICAgICAgICAgICAvL1RPRE8gZml4IHRoaXMgb25lIVxuICAgICAgICAgICAgXG4gICAgICAgICAgICAvKlxuICAgICAgICAgICAgcmVuZGVyZXIuc3RlbmNpbE1hbmFnZXIucHVzaFN0ZW5jaWwoZ3JhcGhpY3MsIHdlYkdMRGF0YSk7XG5cbiAgICAgICAgICAgIGdsLnVuaWZvcm0xZihyZW5kZXJlci5zaGFkZXJNYW5hZ2VyLmNvbXBsZXhQcmltaXRpdmVTaGFkZXIudW5pZm9ybXMuYWxwaGEuX2xvY2F0aW9uLCBncmFwaGljcy53b3JsZEFscGhhICogd2ViR0xEYXRhLmFscGhhKTtcblxuICAgICAgICAgICAgLy8gcmVuZGVyIHF1YWQuLlxuICAgICAgICAgICAgZ2wuZHJhd0VsZW1lbnRzKGdsLlRSSUFOR0xFX0ZBTiwgNCwgZ2wuVU5TSUdORURfU0hPUlQsICggd2ViR0xEYXRhLmluZGljZXMubGVuZ3RoIC0gNCApICogMiApO1xuXG4gICAgICAgICAgICByZW5kZXJlci5zdGVuY2lsTWFuYWdlci5wb3BTdGVuY2lsKGdyYXBoaWNzLCB3ZWJHTERhdGEpO1xuICAgICAgICAgICAgKi9cbiAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgIHtcblxuICAgICAgICAgICAgc2hhZGVyID0gdGhpcy5wcmltaXRpdmVTaGFkZXI7XG5cbiAgICAgICAgICAgIHJlbmRlcmVyLmJpbmRTaGFkZXIoc2hhZGVyKVxuXG4gICAgICAgICAgICBzaGFkZXIudW5pZm9ybXMudHJhbnNsYXRpb25NYXRyaXggPSBncmFwaGljcy53b3JsZFRyYW5zZm9ybS50b0FycmF5KHRydWUpO1xuICAgICAgICAgICAgc2hhZGVyLnVuaWZvcm1zLnRpbnQgPSB1dGlscy5oZXgycmdiKGdyYXBoaWNzLnRpbnQpO1xuICAgICAgICAgICAgc2hhZGVyLnVuaWZvcm1zLmFscGhhID0gZ3JhcGhpY3Mud29ybGRBbHBoYTtcblxuXG4gICAgICAgICAgICBnbC5iaW5kQnVmZmVyKGdsLkFSUkFZX0JVRkZFUiwgd2ViR0xEYXRhLmJ1ZmZlcik7XG5cbiAgICAgICAgICAgIHNoYWRlciA9IHRoaXMucHJpbWl0aXZlU2hhZGVyO1xuXG4gICAgICAgICAgICBzaGFkZXIuYXR0cmlidXRlcy5hVmVydGV4UG9zaXRpb24ucG9pbnRlcihnbC5GTE9BVCwgZmFsc2UsIDQgKiA2LCAwKTtcbiAgICAgICAgICAgIHNoYWRlci5hdHRyaWJ1dGVzLmFDb2xvci5wb2ludGVyKGdsLkZMT0FULCBmYWxzZSwgNCAqIDYsIDIgKiA0KTtcblxuICAgICAgICAgICAgZ2wuZW5hYmxlVmVydGV4QXR0cmliQXJyYXkoc2hhZGVyLmF0dHJpYnV0ZXMuYVZlcnRleFBvc2l0aW9uLmxvY2F0aW9uKTtcbiAgICAgICAgICAgIGdsLmVuYWJsZVZlcnRleEF0dHJpYkFycmF5KHNoYWRlci5hdHRyaWJ1dGVzLmFDb2xvci5sb2NhdGlvbik7XG5cbiAgICAgICAgICAgIC8vIHNldCB0aGUgaW5kZXggYnVmZmVyIVxuICAgICAgICAgICAgZ2wuYmluZEJ1ZmZlcihnbC5FTEVNRU5UX0FSUkFZX0JVRkZFUiwgd2ViR0xEYXRhLmluZGV4QnVmZmVyKTtcbiAgICAgICAgICAgIGdsLmRyYXdFbGVtZW50cyhnbC5UUklBTkdMRV9TVFJJUCwgIHdlYkdMRGF0YS5pbmRpY2VzLmxlbmd0aCwgZ2wuVU5TSUdORURfU0hPUlQsIDAgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJlbmRlcmVyLmRyYXdDb3VudCsrO1xuICAgIH1cbn07XG5cbi8qKlxuICogVXBkYXRlcyB0aGUgZ3JhcGhpY3Mgb2JqZWN0XG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSBncmFwaGljcyB7UElYSS5HcmFwaGljc30gVGhlIGdyYXBoaWNzIG9iamVjdCB0byB1cGRhdGVcbiAqL1xuR3JhcGhpY3NSZW5kZXJlci5wcm90b3R5cGUudXBkYXRlR3JhcGhpY3MgPSBmdW5jdGlvbihncmFwaGljcylcbntcbiAgICB2YXIgZ2wgPSB0aGlzLnJlbmRlcmVyLmdsO1xuXG4gICAgIC8vIGdldCB0aGUgY29udGV4dHMgZ3JhcGhpY3Mgb2JqZWN0XG4gICAgdmFyIHdlYkdMID0gZ3JhcGhpY3MuX3dlYkdMW2dsLmlkXTtcblxuICAgIC8vIGlmIHRoZSBncmFwaGljcyBvYmplY3QgZG9lcyBub3QgZXhpc3QgaW4gdGhlIHdlYkdMIGNvbnRleHQgdGltZSB0byBjcmVhdGUgaXQhXG4gICAgaWYgKCF3ZWJHTClcbiAgICB7XG4gICAgICAgIHdlYkdMID0gZ3JhcGhpY3MuX3dlYkdMW2dsLmlkXSA9IHtsYXN0SW5kZXg6MCwgZGF0YTpbXSwgZ2w6Z2x9O1xuICAgIH1cblxuICAgXG4gICAgLy8gZmxhZyB0aGUgZ3JhcGhpY3MgYXMgbm90IGRpcnR5IGFzIHdlIGFyZSBhYm91dCB0byB1cGRhdGUgaXQuLi5cbiAgICBncmFwaGljcy5kaXJ0eSA9IGZhbHNlO1xuXG4gICAgdmFyIGk7XG5cbiAgICAvLyBpZiB0aGUgdXNlciBjbGVhcmVkIHRoZSBncmFwaGljcyBvYmplY3Qgd2Ugd2lsbCBuZWVkIHRvIGNsZWFyIGV2ZXJ5IG9iamVjdFxuICAgIGlmIChncmFwaGljcy5jbGVhckRpcnR5KVxuICAgIHtcbiAgICAgICAgZ3JhcGhpY3MuY2xlYXJEaXJ0eSA9IGZhbHNlO1xuXG4gICAgICAgIC8vIGxvb3AgdGhyb3VnaCBhbmQgcmV0dXJuIGFsbCB0aGUgd2ViR0xEYXRhcyB0byB0aGUgb2JqZWN0IHBvb2wgc28gdGhhbiBjYW4gYmUgcmV1c2VkIGxhdGVyIG9uXG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCB3ZWJHTC5kYXRhLmxlbmd0aDsgaSsrKVxuICAgICAgICB7XG4gICAgICAgICAgICB2YXIgZ3JhcGhpY3NEYXRhID0gd2ViR0wuZGF0YVtpXTtcbiAgICAgICAgICAgIGdyYXBoaWNzRGF0YS5yZXNldCgpO1xuICAgICAgICAgICAgdGhpcy5ncmFwaGljc0RhdGFQb29sLnB1c2goIGdyYXBoaWNzRGF0YSApO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gY2xlYXIgdGhlIGFycmF5IGFuZCByZXNldCB0aGUgaW5kZXguLlxuICAgICAgICB3ZWJHTC5kYXRhID0gW107XG4gICAgICAgIHdlYkdMLmxhc3RJbmRleCA9IDA7XG4gICAgfVxuXG4gICAgdmFyIHdlYkdMRGF0YTtcblxuICAgIC8vIGxvb3AgdGhyb3VnaCB0aGUgZ3JhcGhpY3MgZGF0YXMgYW5kIGNvbnN0cnVjdCBlYWNoIG9uZS4uXG4gICAgLy8gaWYgdGhlIG9iamVjdCBpcyBhIGNvbXBsZXggZmlsbCB0aGVuIHRoZSBuZXcgc3RlbmNpbCBidWZmZXIgdGVjaG5pcXVlIHdpbGwgYmUgdXNlZFxuICAgIC8vIG90aGVyIHdpc2UgZ3JhcGhpY3Mgb2JqZWN0cyB3aWxsIGJlIHB1c2hlZCBpbnRvIGEgYmF0Y2guLlxuICAgIGZvciAoaSA9IHdlYkdMLmxhc3RJbmRleDsgaSA8IGdyYXBoaWNzLmdyYXBoaWNzRGF0YS5sZW5ndGg7IGkrKylcbiAgICB7XG4gICAgICAgIHZhciBkYXRhID0gZ3JhcGhpY3MuZ3JhcGhpY3NEYXRhW2ldO1xuXG4gICAgICAgIGlmIChkYXRhLnR5cGUgPT09IENPTlNULlNIQVBFUy5QT0xZKVxuICAgICAgICB7XG4gICAgICAgICAgICAvLyBuZWVkIHRvIGFkZCB0aGUgcG9pbnRzIHRoZSB0aGUgZ3JhcGhpY3Mgb2JqZWN0Li5cbiAgICAgICAgICAgIGRhdGEucG9pbnRzID0gZGF0YS5zaGFwZS5wb2ludHMuc2xpY2UoKTtcbiAgICAgICAgICAgIGlmIChkYXRhLnNoYXBlLmNsb3NlZClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAvLyBjbG9zZSB0aGUgcG9seSBpZiB0aGUgdmFsdWUgaXMgdHJ1ZSFcbiAgICAgICAgICAgICAgICBpZiAoZGF0YS5wb2ludHNbMF0gIT09IGRhdGEucG9pbnRzW2RhdGEucG9pbnRzLmxlbmd0aC0yXSB8fCBkYXRhLnBvaW50c1sxXSAhPT0gZGF0YS5wb2ludHNbZGF0YS5wb2ludHMubGVuZ3RoLTFdKVxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgZGF0YS5wb2ludHMucHVzaChkYXRhLnBvaW50c1swXSwgZGF0YS5wb2ludHNbMV0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gTUFLRSBTVVJFIFdFIEhBVkUgVEhFIENPUlJFQ1QgVFlQRS4uXG4gICAgICAgICAgICBpZiAoZGF0YS5maWxsKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGlmIChkYXRhLnBvaW50cy5sZW5ndGggPj0gNilcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChkYXRhLnBvaW50cy5sZW5ndGggPCB0aGlzLm1heGltdW1TaW1wbGVQb2x5U2l6ZSAqIDIpXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHdlYkdMRGF0YSA9IHRoaXMuc3dpdGNoTW9kZSh3ZWJHTCwgMCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjYW5EcmF3VXNpbmdTaW1wbGUgPSBidWlsZFBvbHkoZGF0YSwgd2ViR0xEYXRhKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFjYW5EcmF3VXNpbmdTaW1wbGUpXG4gICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd2ViR0xEYXRhID0gdGhpcy5zd2l0Y2hNb2RlKHdlYkdMLCAxKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWlsZENvbXBsZXhQb2x5KGRhdGEsIHdlYkdMRGF0YSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHdlYkdMRGF0YSA9IHRoaXMuc3dpdGNoTW9kZSh3ZWJHTCwgMSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBidWlsZENvbXBsZXhQb2x5KGRhdGEsIHdlYkdMRGF0YSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChkYXRhLmxpbmVXaWR0aCA+IDApXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgd2ViR0xEYXRhID0gdGhpcy5zd2l0Y2hNb2RlKHdlYkdMLCAwKTtcbiAgICAgICAgICAgICAgICBidWlsZExpbmUoZGF0YSwgd2ViR0xEYXRhKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgIHtcbiAgICAgICAgICAgIHdlYkdMRGF0YSA9IHRoaXMuc3dpdGNoTW9kZSh3ZWJHTCwgMCk7XG5cbiAgICAgICAgICAgIGlmIChkYXRhLnR5cGUgPT09IENPTlNULlNIQVBFUy5SRUNUKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGJ1aWxkUmVjdGFuZ2xlKGRhdGEsIHdlYkdMRGF0YSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChkYXRhLnR5cGUgPT09IENPTlNULlNIQVBFUy5DSVJDIHx8IGRhdGEudHlwZSA9PT0gQ09OU1QuU0hBUEVTLkVMSVApXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgYnVpbGRDaXJjbGUoZGF0YSwgd2ViR0xEYXRhKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGRhdGEudHlwZSA9PT0gQ09OU1QuU0hBUEVTLlJSRUMpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgYnVpbGRSb3VuZGVkUmVjdGFuZ2xlKGRhdGEsIHdlYkdMRGF0YSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICB3ZWJHTC5sYXN0SW5kZXgrKztcbiAgICB9XG5cbiAgICAvLyB1cGxvYWQgYWxsIHRoZSBkaXJ0eSBkYXRhLi4uXG4gICAgZm9yIChpID0gMDsgaSA8IHdlYkdMLmRhdGEubGVuZ3RoOyBpKyspXG4gICAge1xuICAgICAgICB3ZWJHTERhdGEgPSB3ZWJHTC5kYXRhW2ldO1xuXG4gICAgICAgIGlmICh3ZWJHTERhdGEuZGlydHkpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHdlYkdMRGF0YS51cGxvYWQoKTtcbiAgICAgICAgfVxuICAgIH1cbn07XG5cbi8qKlxuICpcbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHdlYkdMIHtXZWJHTFJlbmRlcmluZ0NvbnRleHR9IHRoZSBjdXJyZW50IFdlYkdMIGRyYXdpbmcgY29udGV4dFxuICogQHBhcmFtIHR5cGUge251bWJlcn0gVE9ETyBAQWx2aW5cbiAqL1xuR3JhcGhpY3NSZW5kZXJlci5wcm90b3R5cGUuc3dpdGNoTW9kZSA9IGZ1bmN0aW9uICh3ZWJHTCwgdHlwZSlcbntcbiAgICB2YXIgd2ViR0xEYXRhO1xuXG4gICAgaWYgKCF3ZWJHTC5kYXRhLmxlbmd0aClcbiAgICB7XG4gICAgICAgIHdlYkdMRGF0YSA9IHRoaXMuZ3JhcGhpY3NEYXRhUG9vbC5wb3AoKSB8fCBuZXcgV2ViR0xHcmFwaGljc0RhdGEod2ViR0wuZ2wpO1xuICAgICAgICB3ZWJHTERhdGEubW9kZSA9IHR5cGU7XG4gICAgICAgIHdlYkdMLmRhdGEucHVzaCh3ZWJHTERhdGEpO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICB3ZWJHTERhdGEgPSB3ZWJHTC5kYXRhW3dlYkdMLmRhdGEubGVuZ3RoLTFdO1xuXG4gICAgICAgIGlmICgod2ViR0xEYXRhLnBvaW50cy5sZW5ndGggPiAzMjAwMDApIHx8IHdlYkdMRGF0YS5tb2RlICE9PSB0eXBlIHx8IHR5cGUgPT09IDEpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHdlYkdMRGF0YSA9IHRoaXMuZ3JhcGhpY3NEYXRhUG9vbC5wb3AoKSB8fCBuZXcgV2ViR0xHcmFwaGljc0RhdGEod2ViR0wuZ2wpO1xuICAgICAgICAgICAgd2ViR0xEYXRhLm1vZGUgPSB0eXBlO1xuICAgICAgICAgICAgd2ViR0wuZGF0YS5wdXNoKHdlYkdMRGF0YSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB3ZWJHTERhdGEuZGlydHkgPSB0cnVlO1xuXG4gICAgcmV0dXJuIHdlYkdMRGF0YTtcbn07XG5cbiIsIi8qKlxuICogQW4gb2JqZWN0IGNvbnRhaW5pbmcgV2ViR0wgc3BlY2lmaWMgcHJvcGVydGllcyB0byBiZSB1c2VkIGJ5IHRoZSBXZWJHTCByZW5kZXJlclxuICpcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqIEBwYXJhbSBnbCB7V2ViR0xSZW5kZXJpbmdDb250ZXh0fSB0aGUgY3VycmVudCBXZWJHTCBkcmF3aW5nIGNvbnRleHRcbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIFdlYkdMR3JhcGhpY3NEYXRhKGdsKSB7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgY3VycmVudCBXZWJHTCBkcmF3aW5nIGNvbnRleHRcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1dlYkdMUmVuZGVyaW5nQ29udGV4dH1cbiAgICAgKi9cbiAgICB0aGlzLmdsID0gZ2w7XG5cbiAgICAvL1RPRE8gZG9lcyB0aGlzIG5lZWQgdG8gYmUgc3BsaXQgYmVmb3JlIHVwbG9kaW5nPz9cbiAgICAvKipcbiAgICAgKiBBbiBhcnJheSBvZiBjb2xvciBjb21wb25lbnRzIChyLGcsYilcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJbXX1cbiAgICAgKi9cbiAgICB0aGlzLmNvbG9yID0gWzAsMCwwXTsgLy8gY29sb3Igc3BsaXQhXG5cbiAgICAvKipcbiAgICAgKiBBbiBhcnJheSBvZiBwb2ludHMgdG8gZHJhd1xuICAgICAqIEBtZW1iZXIge1BJWEkuUG9pbnRbXX1cbiAgICAgKi9cbiAgICB0aGlzLnBvaW50cyA9IFtdO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGluZGljZXMgb2YgdGhlIHZlcnRpY2VzXG4gICAgICogQG1lbWJlciB7bnVtYmVyW119XG4gICAgICovXG4gICAgdGhpcy5pbmRpY2VzID0gW107XG4gICAgLyoqXG4gICAgICogVGhlIG1haW4gYnVmZmVyXG4gICAgICogQG1lbWJlciB7V2ViR0xCdWZmZXJ9XG4gICAgICovXG4gICAgdGhpcy5idWZmZXIgPSBnbC5jcmVhdGVCdWZmZXIoKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBpbmRleCBidWZmZXJcbiAgICAgKiBAbWVtYmVyIHtXZWJHTEJ1ZmZlcn1cbiAgICAgKi9cbiAgICB0aGlzLmluZGV4QnVmZmVyID0gZ2wuY3JlYXRlQnVmZmVyKCk7XG5cbiAgICAvKipcbiAgICAgKiB0b2RvIEBhbHZpblxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLm1vZGUgPSAxO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGFscGhhIG9mIHRoZSBncmFwaGljc1xuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLmFscGhhID0gMTtcblxuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgdGhpcyBncmFwaGljcyBpcyBkaXJ0eSBvciBub3RcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqL1xuICAgIHRoaXMuZGlydHkgPSB0cnVlO1xuXG4gICAgdGhpcy5nbFBvaW50cyA9IG51bGw7XG4gICAgdGhpcy5nbEluZGljZXMgPSBudWxsO1xufVxuXG5XZWJHTEdyYXBoaWNzRGF0YS5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBXZWJHTEdyYXBoaWNzRGF0YTtcbm1vZHVsZS5leHBvcnRzID0gV2ViR0xHcmFwaGljc0RhdGE7XG5cbi8qKlxuICogUmVzZXRzIHRoZSB2ZXJ0aWNlcyBhbmQgdGhlIGluZGljZXNcbiAqL1xuV2ViR0xHcmFwaGljc0RhdGEucHJvdG90eXBlLnJlc2V0ID0gZnVuY3Rpb24gKCkge1xuICAgIHRoaXMucG9pbnRzLmxlbmd0aCA9IDA7XG4gICAgdGhpcy5pbmRpY2VzLmxlbmd0aCA9IDA7XG59O1xuXG4vKipcbiAqIEJpbmRzIHRoZSBidWZmZXJzIGFuZCB1cGxvYWRzIHRoZSBkYXRhXG4gKi9cbldlYkdMR3JhcGhpY3NEYXRhLnByb3RvdHlwZS51cGxvYWQgPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGdsID0gdGhpcy5nbDtcblxuLy8gICAgdGhpcy5sYXN0SW5kZXggPSBncmFwaGljcy5ncmFwaGljc0RhdGEubGVuZ3RoO1xuICAgIHRoaXMuZ2xQb2ludHMgPSBuZXcgRmxvYXQzMkFycmF5KHRoaXMucG9pbnRzKTtcblxuICAgIGdsLmJpbmRCdWZmZXIoZ2wuQVJSQVlfQlVGRkVSLCB0aGlzLmJ1ZmZlcik7XG4gICAgZ2wuYnVmZmVyRGF0YShnbC5BUlJBWV9CVUZGRVIsIHRoaXMuZ2xQb2ludHMsIGdsLlNUQVRJQ19EUkFXKTtcblxuICAgIHRoaXMuZ2xJbmRpY2VzID0gbmV3IFVpbnQxNkFycmF5KHRoaXMuaW5kaWNlcyk7XG5cbiAgICBnbC5iaW5kQnVmZmVyKGdsLkVMRU1FTlRfQVJSQVlfQlVGRkVSLCB0aGlzLmluZGV4QnVmZmVyKTtcbiAgICBnbC5idWZmZXJEYXRhKGdsLkVMRU1FTlRfQVJSQVlfQlVGRkVSLCB0aGlzLmdsSW5kaWNlcywgZ2wuU1RBVElDX0RSQVcpO1xuXG4gICAgdGhpcy5kaXJ0eSA9IGZhbHNlO1xufTtcblxuV2ViR0xHcmFwaGljc0RhdGEucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoKSB7XG4gICAgdGhpcy5jb2xvciA9IG51bGw7XG4gICAgdGhpcy5wb2ludHMgPSBudWxsO1xuICAgIHRoaXMuaW5kaWNlcyA9IG51bGw7XG5cbiAgICB0aGlzLmdsLmRlbGV0ZUJ1ZmZlcih0aGlzLmJ1ZmZlcik7XG4gICAgdGhpcy5nbC5kZWxldGVCdWZmZXIodGhpcy5pbmRleEJ1ZmZlcik7XG4gICAgXG4gICAgdGhpcy5nbCA9IG51bGw7XG5cbiAgICB0aGlzLmJ1ZmZlciA9IG51bGw7XG4gICAgdGhpcy5pbmRleEJ1ZmZlciA9IG51bGw7XG5cbiAgICB0aGlzLmdsUG9pbnRzID0gbnVsbDtcbiAgICB0aGlzLmdsSW5kaWNlcyA9IG51bGw7XG59O1xuIiwidmFyIFNoYWRlciA9IHJlcXVpcmUoJ3BpeGktZ2wtY29yZScpLkdMU2hhZGVyO1xuXG4vKipcbiAqIFRoaXMgc2hhZGVyIGlzIHVzZWQgdG8gZHJhdyBzaW1wbGUgcHJpbWl0aXZlIHNoYXBlcyBmb3Ige0BsaW5rIFBJWEkuR3JhcGhpY3N9LlxuICpcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqIEBleHRlbmRzIFBJWEkuU2hhZGVyXG4gKiBAcGFyYW0gc2hhZGVyTWFuYWdlciB7U2hhZGVyTWFuYWdlcn0gVGhlIHdlYmdsIHNoYWRlciBtYW5hZ2VyIHRoaXMgc2hhZGVyIHdvcmtzIGZvci5cbiAqL1xuZnVuY3Rpb24gUHJpbWl0aXZlU2hhZGVyKGdsKVxue1xuICAgIFNoYWRlci5jYWxsKHRoaXMsXG4gICAgICAgIGdsLFxuICAgICAgICAvLyB2ZXJ0ZXggc2hhZGVyXG4gICAgICAgIFtcbiAgICAgICAgICAgICdhdHRyaWJ1dGUgdmVjMiBhVmVydGV4UG9zaXRpb247JyxcbiAgICAgICAgICAgICdhdHRyaWJ1dGUgdmVjNCBhQ29sb3I7JyxcblxuICAgICAgICAgICAgJ3VuaWZvcm0gbWF0MyB0cmFuc2xhdGlvbk1hdHJpeDsnLFxuICAgICAgICAgICAgJ3VuaWZvcm0gbWF0MyBwcm9qZWN0aW9uTWF0cml4OycsXG5cbiAgICAgICAgICAgICd1bmlmb3JtIGZsb2F0IGFscGhhOycsXG4gICAgICAgICAgICAndW5pZm9ybSBmbG9hdCBmbGlwWTsnLFxuICAgICAgICAgICAgJ3VuaWZvcm0gdmVjMyB0aW50OycsXG5cbiAgICAgICAgICAgICd2YXJ5aW5nIHZlYzQgdkNvbG9yOycsXG5cbiAgICAgICAgICAgICd2b2lkIG1haW4odm9pZCl7JyxcbiAgICAgICAgICAgICcgICBnbF9Qb3NpdGlvbiA9IHZlYzQoKHByb2plY3Rpb25NYXRyaXggKiB0cmFuc2xhdGlvbk1hdHJpeCAqIHZlYzMoYVZlcnRleFBvc2l0aW9uLCAxLjApKS54eSwgMC4wLCAxLjApOycsXG4gICAgICAgICAgICAnICAgdkNvbG9yID0gYUNvbG9yICogdmVjNCh0aW50ICogYWxwaGEsIGFscGhhKTsnLFxuICAgICAgICAgICAgJ30nXG4gICAgICAgIF0uam9pbignXFxuJyksXG4gICAgICAgIC8vIGZyYWdtZW50IHNoYWRlclxuICAgICAgICBbXG4gICAgICAgICAgICAncHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7JyxcblxuICAgICAgICAgICAgJ3ZhcnlpbmcgdmVjNCB2Q29sb3I7JyxcblxuICAgICAgICAgICAgJ3ZvaWQgbWFpbih2b2lkKXsnLFxuICAgICAgICAgICAgJyAgIGdsX0ZyYWdDb2xvciA9IHZDb2xvcjsnLFxuICAgICAgICAgICAgJ30nXG4gICAgICAgIF0uam9pbignXFxuJylcbiAgICApO1xufVxuXG5QcmltaXRpdmVTaGFkZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShTaGFkZXIucHJvdG90eXBlKTtcblByaW1pdGl2ZVNoYWRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBQcmltaXRpdmVTaGFkZXI7XG5cbm1vZHVsZS5leHBvcnRzID0gUHJpbWl0aXZlU2hhZGVyO1xuIiwidmFyIGJ1aWxkTGluZSA9IHJlcXVpcmUoJy4vYnVpbGRMaW5lJyksXG4gICAgdXRpbHMgPSByZXF1aXJlKCcuLi8uLi8uLi91dGlscycpO1xuXG4vKipcbiAqIEJ1aWxkcyBhIGNpcmNsZSB0byBkcmF3XG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSBncmFwaGljc0RhdGEge1BJWEkuR3JhcGhpY3N9IFRoZSBncmFwaGljcyBvYmplY3QgdG8gZHJhd1xuICogQHBhcmFtIHdlYkdMRGF0YSB7b2JqZWN0fSBhbiBvYmplY3QgY29udGFpbmluZyBhbGwgdGhlIHdlYkdMLXNwZWNpZmljIGluZm9ybWF0aW9uIHRvIGNyZWF0ZSB0aGlzIHNoYXBlXG4gKi9cbnZhciBidWlsZENpcmNsZSA9IGZ1bmN0aW9uIChncmFwaGljc0RhdGEsIHdlYkdMRGF0YSlcbntcbiAgICAvLyBuZWVkIHRvIGNvbnZlcnQgcG9pbnRzIHRvIGEgbmljZSByZWd1bGFyIGRhdGFcbiAgICB2YXIgY2lyY2xlRGF0YSA9IGdyYXBoaWNzRGF0YS5zaGFwZTtcbiAgICB2YXIgeCA9IGNpcmNsZURhdGEueDtcbiAgICB2YXIgeSA9IGNpcmNsZURhdGEueTtcbiAgICB2YXIgd2lkdGg7XG4gICAgdmFyIGhlaWdodDtcblxuICAgIC8vIFRPRE8gLSBiaXQgaGFja3k/P1xuICAgIGlmIChncmFwaGljc0RhdGEudHlwZSA9PT0gQ09OU1QuU0hBUEVTLkNJUkMpXG4gICAge1xuICAgICAgICB3aWR0aCA9IGNpcmNsZURhdGEucmFkaXVzO1xuICAgICAgICBoZWlnaHQgPSBjaXJjbGVEYXRhLnJhZGl1cztcbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgd2lkdGggPSBjaXJjbGVEYXRhLndpZHRoO1xuICAgICAgICBoZWlnaHQgPSBjaXJjbGVEYXRhLmhlaWdodDtcbiAgICB9XG5cbiAgICB2YXIgdG90YWxTZWdzID0gTWF0aC5mbG9vcigzMCAqIE1hdGguc3FydChjaXJjbGVEYXRhLnJhZGl1cykpIHx8IE1hdGguZmxvb3IoMTUgKiBNYXRoLnNxcnQoY2lyY2xlRGF0YS53aWR0aCArIGNpcmNsZURhdGEuaGVpZ2h0KSk7XG4gICAgdmFyIHNlZyA9IChNYXRoLlBJICogMikgLyB0b3RhbFNlZ3MgO1xuXG4gICAgdmFyIGkgPSAwO1xuXG4gICAgaWYgKGdyYXBoaWNzRGF0YS5maWxsKVxuICAgIHtcbiAgICAgICAgdmFyIGNvbG9yID0gdXRpbHMuaGV4MnJnYihncmFwaGljc0RhdGEuZmlsbENvbG9yKTtcbiAgICAgICAgdmFyIGFscGhhID0gZ3JhcGhpY3NEYXRhLmZpbGxBbHBoYTtcblxuICAgICAgICB2YXIgciA9IGNvbG9yWzBdICogYWxwaGE7XG4gICAgICAgIHZhciBnID0gY29sb3JbMV0gKiBhbHBoYTtcbiAgICAgICAgdmFyIGIgPSBjb2xvclsyXSAqIGFscGhhO1xuXG4gICAgICAgIHZhciB2ZXJ0cyA9IHdlYkdMRGF0YS5wb2ludHM7XG4gICAgICAgIHZhciBpbmRpY2VzID0gd2ViR0xEYXRhLmluZGljZXM7XG5cbiAgICAgICAgdmFyIHZlY1BvcyA9IHZlcnRzLmxlbmd0aC82O1xuXG4gICAgICAgIGluZGljZXMucHVzaCh2ZWNQb3MpO1xuXG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCB0b3RhbFNlZ3MgKyAxIDsgaSsrKVxuICAgICAgICB7XG4gICAgICAgICAgICB2ZXJ0cy5wdXNoKHgseSwgciwgZywgYiwgYWxwaGEpO1xuXG4gICAgICAgICAgICB2ZXJ0cy5wdXNoKHggKyBNYXRoLnNpbihzZWcgKiBpKSAqIHdpZHRoLFxuICAgICAgICAgICAgICAgICAgICAgICB5ICsgTWF0aC5jb3Moc2VnICogaSkgKiBoZWlnaHQsXG4gICAgICAgICAgICAgICAgICAgICAgIHIsIGcsIGIsIGFscGhhKTtcblxuICAgICAgICAgICAgaW5kaWNlcy5wdXNoKHZlY1BvcysrLCB2ZWNQb3MrKyk7XG4gICAgICAgIH1cblxuICAgICAgICBpbmRpY2VzLnB1c2godmVjUG9zLTEpO1xuICAgIH1cblxuICAgIGlmIChncmFwaGljc0RhdGEubGluZVdpZHRoKVxuICAgIHtcbiAgICAgICAgdmFyIHRlbXBQb2ludHMgPSBncmFwaGljc0RhdGEucG9pbnRzO1xuXG4gICAgICAgIGdyYXBoaWNzRGF0YS5wb2ludHMgPSBbXTtcblxuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgdG90YWxTZWdzICsgMTsgaSsrKVxuICAgICAgICB7XG4gICAgICAgICAgICBncmFwaGljc0RhdGEucG9pbnRzLnB1c2goeCArIE1hdGguc2luKHNlZyAqIGkpICogd2lkdGgsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeSArIE1hdGguY29zKHNlZyAqIGkpICogaGVpZ2h0KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGJ1aWxkTGluZShncmFwaGljc0RhdGEsIHdlYkdMRGF0YSk7XG5cbiAgICAgICAgZ3JhcGhpY3NEYXRhLnBvaW50cyA9IHRlbXBQb2ludHM7XG4gICAgfVxufTtcblxuXG5tb2R1bGUuZXhwb3J0cyA9IGJ1aWxkQ2lyY2xlOyIsInZhciBidWlsZExpbmUgPSByZXF1aXJlKCcuL2J1aWxkTGluZScpLFxuICAgIHV0aWxzID0gcmVxdWlyZSgnLi4vLi4vLi4vdXRpbHMnKTtcbiAgICBcblxuXG4vKipcbiAqIEJ1aWxkcyBhIGNvbXBsZXggcG9seWdvbiB0byBkcmF3XG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSBncmFwaGljc0RhdGEge1BJWEkuR3JhcGhpY3N9IFRoZSBncmFwaGljcyBvYmplY3QgY29udGFpbmluZyBhbGwgdGhlIG5lY2Vzc2FyeSBwcm9wZXJ0aWVzXG4gKiBAcGFyYW0gd2ViR0xEYXRhIHtvYmplY3R9IGFuIG9iamVjdCBjb250YWluaW5nIGFsbCB0aGUgd2ViR0wtc3BlY2lmaWMgaW5mb3JtYXRpb24gdG8gY3JlYXRlIHRoaXMgc2hhcGVcbiAqL1xudmFyIGJ1aWxkQ29tcGxleFBvbHkgPSBmdW5jdGlvbiAoZ3JhcGhpY3NEYXRhLCB3ZWJHTERhdGEpXG57XG4gICAgLy9UT0RPIC0gbm8gbmVlZCB0byBjb3B5IHRoaXMgYXMgaXQgZ2V0cyB0dXJuZWQgaW50byBhIEZMb2F0MzJBcnJheSBhbnl3YXlzLi5cbiAgICB2YXIgcG9pbnRzID0gZ3JhcGhpY3NEYXRhLnBvaW50cy5zbGljZSgpO1xuXG4gICAgaWYgKHBvaW50cy5sZW5ndGggPCA2KVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIGdldCBmaXJzdCBhbmQgbGFzdCBwb2ludC4uIGZpZ3VyZSBvdXQgdGhlIG1pZGRsZSFcbiAgICB2YXIgaW5kaWNlcyA9IHdlYkdMRGF0YS5pbmRpY2VzO1xuICAgIHdlYkdMRGF0YS5wb2ludHMgPSBwb2ludHM7XG4gICAgd2ViR0xEYXRhLmFscGhhID0gZ3JhcGhpY3NEYXRhLmZpbGxBbHBoYTtcbiAgICB3ZWJHTERhdGEuY29sb3IgPSB1dGlscy5oZXgycmdiKGdyYXBoaWNzRGF0YS5maWxsQ29sb3IpO1xuXG4gICAgLy8gY2FsY2xhdGUgdGhlIGJvdW5kcy4uXG4gICAgdmFyIG1pblggPSBJbmZpbml0eTtcbiAgICB2YXIgbWF4WCA9IC1JbmZpbml0eTtcblxuICAgIHZhciBtaW5ZID0gSW5maW5pdHk7XG4gICAgdmFyIG1heFkgPSAtSW5maW5pdHk7XG5cbiAgICB2YXIgeCx5O1xuXG4gICAgLy8gZ2V0IHNpemUuLlxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcG9pbnRzLmxlbmd0aDsgaSs9MilcbiAgICB7XG4gICAgICAgIHggPSBwb2ludHNbaV07XG4gICAgICAgIHkgPSBwb2ludHNbaSsxXTtcblxuICAgICAgICBtaW5YID0geCA8IG1pblggPyB4IDogbWluWDtcbiAgICAgICAgbWF4WCA9IHggPiBtYXhYID8geCA6IG1heFg7XG5cbiAgICAgICAgbWluWSA9IHkgPCBtaW5ZID8geSA6IG1pblk7XG4gICAgICAgIG1heFkgPSB5ID4gbWF4WSA/IHkgOiBtYXhZO1xuICAgIH1cblxuICAgIC8vIGFkZCBhIHF1YWQgdG8gdGhlIGVuZCBjb3MgdGhlcmUgaXMgbm8gcG9pbnQgbWFraW5nIGFub3RoZXIgYnVmZmVyIVxuICAgIHBvaW50cy5wdXNoKG1pblgsIG1pblksXG4gICAgICAgICAgICAgICAgbWF4WCwgbWluWSxcbiAgICAgICAgICAgICAgICBtYXhYLCBtYXhZLFxuICAgICAgICAgICAgICAgIG1pblgsIG1heFkpO1xuXG4gICAgLy8gcHVzaCBhIHF1YWQgb250byB0aGUgZW5kLi5cblxuICAgIC8vVE9ETyAtIHRoaXMgYWludCBuZWVkZWQhXG4gICAgdmFyIGxlbmd0aCA9IHBvaW50cy5sZW5ndGggLyAyO1xuICAgIGZvciAoaSA9IDA7IGkgPCBsZW5ndGg7IGkrKylcbiAgICB7XG4gICAgICAgIGluZGljZXMucHVzaCggaSApO1xuICAgIH1cblxufTtcblxuXG5cbm1vZHVsZS5leHBvcnRzID0gYnVpbGRDb21wbGV4UG9seTsiLCJ2YXIgbWF0aCA9IHJlcXVpcmUoJy4uLy4uLy4uL21hdGgnKSxcbiAgICB1dGlscyA9IHJlcXVpcmUoJy4uLy4uLy4uL3V0aWxzJyk7XG5cbi8qKlxuICogQnVpbGRzIGEgbGluZSB0byBkcmF3XG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSBncmFwaGljc0RhdGEge1BJWEkuR3JhcGhpY3N9IFRoZSBncmFwaGljcyBvYmplY3QgY29udGFpbmluZyBhbGwgdGhlIG5lY2Vzc2FyeSBwcm9wZXJ0aWVzXG4gKiBAcGFyYW0gd2ViR0xEYXRhIHtvYmplY3R9IGFuIG9iamVjdCBjb250YWluaW5nIGFsbCB0aGUgd2ViR0wtc3BlY2lmaWMgaW5mb3JtYXRpb24gdG8gY3JlYXRlIHRoaXMgc2hhcGVcbiAqL1xudmFyIGJ1aWxkTGluZSA9IGZ1bmN0aW9uIChncmFwaGljc0RhdGEsIHdlYkdMRGF0YSlcbntcbiAgICAvLyBUT0RPIE9QVElNSVNFIVxuICAgIHZhciBpID0gMDtcbiAgICB2YXIgcG9pbnRzID0gZ3JhcGhpY3NEYXRhLnBvaW50cztcblxuICAgIGlmIChwb2ludHMubGVuZ3RoID09PSAwKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICAvLyBpZiB0aGUgbGluZSB3aWR0aCBpcyBhbiBvZGQgbnVtYmVyIGFkZCAwLjUgdG8gYWxpZ24gdG8gYSB3aG9sZSBwaXhlbFxuICAgIC8vIGNvbW1lbnRpbmcgdGhpcyBvdXQgZml4ZXMgIzcxMSBhbmQgIzE2MjBcbiAgICAvLyBpZiAoZ3JhcGhpY3NEYXRhLmxpbmVXaWR0aCUyKVxuICAgIC8vIHtcbiAgICAvLyAgICAgZm9yIChpID0gMDsgaSA8IHBvaW50cy5sZW5ndGg7IGkrKylcbiAgICAvLyAgICAge1xuICAgIC8vICAgICAgICAgcG9pbnRzW2ldICs9IDAuNTtcbiAgICAvLyAgICAgfVxuICAgIC8vIH1cblxuICAgIC8vIGdldCBmaXJzdCBhbmQgbGFzdCBwb2ludC4uIGZpZ3VyZSBvdXQgdGhlIG1pZGRsZSFcbiAgICB2YXIgZmlyc3RQb2ludCA9IG5ldyBtYXRoLlBvaW50KHBvaW50c1swXSwgcG9pbnRzWzFdKTtcbiAgICB2YXIgbGFzdFBvaW50ID0gbmV3IG1hdGguUG9pbnQocG9pbnRzW3BvaW50cy5sZW5ndGggLSAyXSwgcG9pbnRzW3BvaW50cy5sZW5ndGggLSAxXSk7XG5cbiAgICAvLyBpZiB0aGUgZmlyc3QgcG9pbnQgaXMgdGhlIGxhc3QgcG9pbnQgLSBnb25uYSBoYXZlIGlzc3VlcyA6KVxuICAgIGlmIChmaXJzdFBvaW50LnggPT09IGxhc3RQb2ludC54ICYmIGZpcnN0UG9pbnQueSA9PT0gbGFzdFBvaW50LnkpXG4gICAge1xuICAgICAgICAvLyBuZWVkIHRvIGNsb25lIGFzIHdlIGFyZSBnb2luZyB0byBzbGlnaHRseSBtb2RpZnkgdGhlIHNoYXBlLi5cbiAgICAgICAgcG9pbnRzID0gcG9pbnRzLnNsaWNlKCk7XG5cbiAgICAgICAgcG9pbnRzLnBvcCgpO1xuICAgICAgICBwb2ludHMucG9wKCk7XG5cbiAgICAgICAgbGFzdFBvaW50ID0gbmV3IG1hdGguUG9pbnQocG9pbnRzW3BvaW50cy5sZW5ndGggLSAyXSwgcG9pbnRzW3BvaW50cy5sZW5ndGggLSAxXSk7XG5cbiAgICAgICAgdmFyIG1pZFBvaW50WCA9IGxhc3RQb2ludC54ICsgKGZpcnN0UG9pbnQueCAtIGxhc3RQb2ludC54KSAqMC41O1xuICAgICAgICB2YXIgbWlkUG9pbnRZID0gbGFzdFBvaW50LnkgKyAoZmlyc3RQb2ludC55IC0gbGFzdFBvaW50LnkpICowLjU7XG5cbiAgICAgICAgcG9pbnRzLnVuc2hpZnQobWlkUG9pbnRYLCBtaWRQb2ludFkpO1xuICAgICAgICBwb2ludHMucHVzaChtaWRQb2ludFgsIG1pZFBvaW50WSk7XG4gICAgfVxuXG4gICAgdmFyIHZlcnRzID0gd2ViR0xEYXRhLnBvaW50cztcbiAgICB2YXIgaW5kaWNlcyA9IHdlYkdMRGF0YS5pbmRpY2VzO1xuICAgIHZhciBsZW5ndGggPSBwb2ludHMubGVuZ3RoIC8gMjtcbiAgICB2YXIgaW5kZXhDb3VudCA9IHBvaW50cy5sZW5ndGg7XG4gICAgdmFyIGluZGV4U3RhcnQgPSB2ZXJ0cy5sZW5ndGgvNjtcblxuICAgIC8vIERSQVcgdGhlIExpbmVcbiAgICB2YXIgd2lkdGggPSBncmFwaGljc0RhdGEubGluZVdpZHRoIC8gMjtcblxuICAgIC8vIHNvcnQgY29sb3JcbiAgICB2YXIgY29sb3IgPSB1dGlscy5oZXgycmdiKGdyYXBoaWNzRGF0YS5saW5lQ29sb3IpO1xuICAgIHZhciBhbHBoYSA9IGdyYXBoaWNzRGF0YS5saW5lQWxwaGE7XG4gICAgdmFyIHIgPSBjb2xvclswXSAqIGFscGhhO1xuICAgIHZhciBnID0gY29sb3JbMV0gKiBhbHBoYTtcbiAgICB2YXIgYiA9IGNvbG9yWzJdICogYWxwaGE7XG5cbiAgICB2YXIgcHgsIHB5LCBwMXgsIHAxeSwgcDJ4LCBwMnksIHAzeCwgcDN5O1xuICAgIHZhciBwZXJweCwgcGVycHksIHBlcnAyeCwgcGVycDJ5LCBwZXJwM3gsIHBlcnAzeTtcbiAgICB2YXIgYTEsIGIxLCBjMSwgYTIsIGIyLCBjMjtcbiAgICB2YXIgZGVub20sIHBkaXN0LCBkaXN0O1xuXG4gICAgcDF4ID0gcG9pbnRzWzBdO1xuICAgIHAxeSA9IHBvaW50c1sxXTtcblxuICAgIHAyeCA9IHBvaW50c1syXTtcbiAgICBwMnkgPSBwb2ludHNbM107XG5cbiAgICBwZXJweCA9IC0ocDF5IC0gcDJ5KTtcbiAgICBwZXJweSA9ICBwMXggLSBwMng7XG5cbiAgICBkaXN0ID0gTWF0aC5zcXJ0KHBlcnB4KnBlcnB4ICsgcGVycHkqcGVycHkpO1xuXG4gICAgcGVycHggLz0gZGlzdDtcbiAgICBwZXJweSAvPSBkaXN0O1xuICAgIHBlcnB4ICo9IHdpZHRoO1xuICAgIHBlcnB5ICo9IHdpZHRoO1xuXG4gICAgLy8gc3RhcnRcbiAgICB2ZXJ0cy5wdXNoKHAxeCAtIHBlcnB4ICwgcDF5IC0gcGVycHksXG4gICAgICAgICAgICAgICAgciwgZywgYiwgYWxwaGEpO1xuXG4gICAgdmVydHMucHVzaChwMXggKyBwZXJweCAsIHAxeSArIHBlcnB5LFxuICAgICAgICAgICAgICAgIHIsIGcsIGIsIGFscGhhKTtcblxuICAgIGZvciAoaSA9IDE7IGkgPCBsZW5ndGgtMTsgaSsrKVxuICAgIHtcbiAgICAgICAgcDF4ID0gcG9pbnRzWyhpLTEpKjJdO1xuICAgICAgICBwMXkgPSBwb2ludHNbKGktMSkqMiArIDFdO1xuXG4gICAgICAgIHAyeCA9IHBvaW50c1soaSkqMl07XG4gICAgICAgIHAyeSA9IHBvaW50c1soaSkqMiArIDFdO1xuXG4gICAgICAgIHAzeCA9IHBvaW50c1soaSsxKSoyXTtcbiAgICAgICAgcDN5ID0gcG9pbnRzWyhpKzEpKjIgKyAxXTtcblxuICAgICAgICBwZXJweCA9IC0ocDF5IC0gcDJ5KTtcbiAgICAgICAgcGVycHkgPSBwMXggLSBwMng7XG5cbiAgICAgICAgZGlzdCA9IE1hdGguc3FydChwZXJweCpwZXJweCArIHBlcnB5KnBlcnB5KTtcbiAgICAgICAgcGVycHggLz0gZGlzdDtcbiAgICAgICAgcGVycHkgLz0gZGlzdDtcbiAgICAgICAgcGVycHggKj0gd2lkdGg7XG4gICAgICAgIHBlcnB5ICo9IHdpZHRoO1xuXG4gICAgICAgIHBlcnAyeCA9IC0ocDJ5IC0gcDN5KTtcbiAgICAgICAgcGVycDJ5ID0gcDJ4IC0gcDN4O1xuXG4gICAgICAgIGRpc3QgPSBNYXRoLnNxcnQocGVycDJ4KnBlcnAyeCArIHBlcnAyeSpwZXJwMnkpO1xuICAgICAgICBwZXJwMnggLz0gZGlzdDtcbiAgICAgICAgcGVycDJ5IC89IGRpc3Q7XG4gICAgICAgIHBlcnAyeCAqPSB3aWR0aDtcbiAgICAgICAgcGVycDJ5ICo9IHdpZHRoO1xuXG4gICAgICAgIGExID0gKC1wZXJweSArIHAxeSkgLSAoLXBlcnB5ICsgcDJ5KTtcbiAgICAgICAgYjEgPSAoLXBlcnB4ICsgcDJ4KSAtICgtcGVycHggKyBwMXgpO1xuICAgICAgICBjMSA9ICgtcGVycHggKyBwMXgpICogKC1wZXJweSArIHAyeSkgLSAoLXBlcnB4ICsgcDJ4KSAqICgtcGVycHkgKyBwMXkpO1xuICAgICAgICBhMiA9ICgtcGVycDJ5ICsgcDN5KSAtICgtcGVycDJ5ICsgcDJ5KTtcbiAgICAgICAgYjIgPSAoLXBlcnAyeCArIHAyeCkgLSAoLXBlcnAyeCArIHAzeCk7XG4gICAgICAgIGMyID0gKC1wZXJwMnggKyBwM3gpICogKC1wZXJwMnkgKyBwMnkpIC0gKC1wZXJwMnggKyBwMngpICogKC1wZXJwMnkgKyBwM3kpO1xuXG4gICAgICAgIGRlbm9tID0gYTEqYjIgLSBhMipiMTtcblxuICAgICAgICBpZiAoTWF0aC5hYnMoZGVub20pIDwgMC4xIClcbiAgICAgICAge1xuXG4gICAgICAgICAgICBkZW5vbSs9MTAuMTtcbiAgICAgICAgICAgIHZlcnRzLnB1c2gocDJ4IC0gcGVycHggLCBwMnkgLSBwZXJweSxcbiAgICAgICAgICAgICAgICByLCBnLCBiLCBhbHBoYSk7XG5cbiAgICAgICAgICAgIHZlcnRzLnB1c2gocDJ4ICsgcGVycHggLCBwMnkgKyBwZXJweSxcbiAgICAgICAgICAgICAgICByLCBnLCBiLCBhbHBoYSk7XG5cbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgcHggPSAoYjEqYzIgLSBiMipjMSkvZGVub207XG4gICAgICAgIHB5ID0gKGEyKmMxIC0gYTEqYzIpL2Rlbm9tO1xuXG5cbiAgICAgICAgcGRpc3QgPSAocHggLXAyeCkgKiAocHggLXAyeCkgKyAocHkgLXAyeSkgKiAocHkgLXAyeSk7XG5cblxuICAgICAgICBpZiAocGRpc3QgPiAxNDAgKiAxNDApXG4gICAgICAgIHtcbiAgICAgICAgICAgIHBlcnAzeCA9IHBlcnB4IC0gcGVycDJ4O1xuICAgICAgICAgICAgcGVycDN5ID0gcGVycHkgLSBwZXJwMnk7XG5cbiAgICAgICAgICAgIGRpc3QgPSBNYXRoLnNxcnQocGVycDN4KnBlcnAzeCArIHBlcnAzeSpwZXJwM3kpO1xuICAgICAgICAgICAgcGVycDN4IC89IGRpc3Q7XG4gICAgICAgICAgICBwZXJwM3kgLz0gZGlzdDtcbiAgICAgICAgICAgIHBlcnAzeCAqPSB3aWR0aDtcbiAgICAgICAgICAgIHBlcnAzeSAqPSB3aWR0aDtcblxuICAgICAgICAgICAgdmVydHMucHVzaChwMnggLSBwZXJwM3gsIHAyeSAtcGVycDN5KTtcbiAgICAgICAgICAgIHZlcnRzLnB1c2gociwgZywgYiwgYWxwaGEpO1xuXG4gICAgICAgICAgICB2ZXJ0cy5wdXNoKHAyeCArIHBlcnAzeCwgcDJ5ICtwZXJwM3kpO1xuICAgICAgICAgICAgdmVydHMucHVzaChyLCBnLCBiLCBhbHBoYSk7XG5cbiAgICAgICAgICAgIHZlcnRzLnB1c2gocDJ4IC0gcGVycDN4LCBwMnkgLXBlcnAzeSk7XG4gICAgICAgICAgICB2ZXJ0cy5wdXNoKHIsIGcsIGIsIGFscGhhKTtcblxuICAgICAgICAgICAgaW5kZXhDb3VudCsrO1xuICAgICAgICB9XG4gICAgICAgIGVsc2VcbiAgICAgICAge1xuXG4gICAgICAgICAgICB2ZXJ0cy5wdXNoKHB4ICwgcHkpO1xuICAgICAgICAgICAgdmVydHMucHVzaChyLCBnLCBiLCBhbHBoYSk7XG5cbiAgICAgICAgICAgIHZlcnRzLnB1c2gocDJ4IC0gKHB4LXAyeCksIHAyeSAtIChweSAtIHAyeSkpO1xuICAgICAgICAgICAgdmVydHMucHVzaChyLCBnLCBiLCBhbHBoYSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwMXggPSBwb2ludHNbKGxlbmd0aC0yKSoyXTtcbiAgICBwMXkgPSBwb2ludHNbKGxlbmd0aC0yKSoyICsgMV07XG5cbiAgICBwMnggPSBwb2ludHNbKGxlbmd0aC0xKSoyXTtcbiAgICBwMnkgPSBwb2ludHNbKGxlbmd0aC0xKSoyICsgMV07XG5cbiAgICBwZXJweCA9IC0ocDF5IC0gcDJ5KTtcbiAgICBwZXJweSA9IHAxeCAtIHAyeDtcblxuICAgIGRpc3QgPSBNYXRoLnNxcnQocGVycHgqcGVycHggKyBwZXJweSpwZXJweSk7XG4gICAgcGVycHggLz0gZGlzdDtcbiAgICBwZXJweSAvPSBkaXN0O1xuICAgIHBlcnB4ICo9IHdpZHRoO1xuICAgIHBlcnB5ICo9IHdpZHRoO1xuXG4gICAgdmVydHMucHVzaChwMnggLSBwZXJweCAsIHAyeSAtIHBlcnB5KTtcbiAgICB2ZXJ0cy5wdXNoKHIsIGcsIGIsIGFscGhhKTtcblxuICAgIHZlcnRzLnB1c2gocDJ4ICsgcGVycHggLCBwMnkgKyBwZXJweSk7XG4gICAgdmVydHMucHVzaChyLCBnLCBiLCBhbHBoYSk7XG5cbiAgICBpbmRpY2VzLnB1c2goaW5kZXhTdGFydCk7XG5cbiAgICBmb3IgKGkgPSAwOyBpIDwgaW5kZXhDb3VudDsgaSsrKVxuICAgIHtcbiAgICAgICAgaW5kaWNlcy5wdXNoKGluZGV4U3RhcnQrKyk7XG4gICAgfVxuXG4gICAgaW5kaWNlcy5wdXNoKGluZGV4U3RhcnQtMSk7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGJ1aWxkTGluZTsiLCJ2YXIgdXRpbHMgPSByZXF1aXJlKCcuLi8uLi8uLi91dGlscycpO1xuXG4vKipcbiAqIEJ1aWxkcyBhIHBvbHlnb24gdG8gZHJhd1xuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0gZ3JhcGhpY3NEYXRhIHtQSVhJLldlYkdMR3JhcGhpY3NEYXRhfSBUaGUgZ3JhcGhpY3Mgb2JqZWN0IGNvbnRhaW5pbmcgYWxsIHRoZSBuZWNlc3NhcnkgcHJvcGVydGllc1xuICogQHBhcmFtIHdlYkdMRGF0YSB7b2JqZWN0fSBhbiBvYmplY3QgY29udGFpbmluZyBhbGwgdGhlIHdlYkdMLXNwZWNpZmljIGluZm9ybWF0aW9uIHRvIGNyZWF0ZSB0aGlzIHNoYXBlXG4gKi9cbnZhciBidWlsZFBvbHkgPSBmdW5jdGlvbiAoZ3JhcGhpY3NEYXRhLCB3ZWJHTERhdGEpXG57XG4gICAgdmFyIHBvaW50cyA9IGdyYXBoaWNzRGF0YS5wb2ludHM7XG5cbiAgICBpZiAocG9pbnRzLmxlbmd0aCA8IDYpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gZ2V0IGZpcnN0IGFuZCBsYXN0IHBvaW50Li4gZmlndXJlIG91dCB0aGUgbWlkZGxlIVxuICAgIHZhciB2ZXJ0cyA9IHdlYkdMRGF0YS5wb2ludHM7XG4gICAgdmFyIGluZGljZXMgPSB3ZWJHTERhdGEuaW5kaWNlcztcblxuICAgIHZhciBsZW5ndGggPSBwb2ludHMubGVuZ3RoIC8gMjtcblxuICAgIC8vIHNvcnQgY29sb3JcbiAgICB2YXIgY29sb3IgPSB1dGlscy5oZXgycmdiKGdyYXBoaWNzRGF0YS5maWxsQ29sb3IpO1xuICAgIHZhciBhbHBoYSA9IGdyYXBoaWNzRGF0YS5maWxsQWxwaGE7XG4gICAgdmFyIHIgPSBjb2xvclswXSAqIGFscGhhO1xuICAgIHZhciBnID0gY29sb3JbMV0gKiBhbHBoYTtcbiAgICB2YXIgYiA9IGNvbG9yWzJdICogYWxwaGE7XG5cbiAgICB2YXIgdHJpYW5nbGVzID0gZWFyY3V0KHBvaW50cywgbnVsbCwgMik7XG5cbiAgICBpZiAoIXRyaWFuZ2xlcykge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgdmFyIHZlcnRQb3MgPSB2ZXJ0cy5sZW5ndGggLyA2O1xuXG4gICAgdmFyIGkgPSAwO1xuXG4gICAgZm9yIChpID0gMDsgaSA8IHRyaWFuZ2xlcy5sZW5ndGg7IGkrPTMpXG4gICAge1xuICAgICAgICBpbmRpY2VzLnB1c2godHJpYW5nbGVzW2ldICsgdmVydFBvcyk7XG4gICAgICAgIGluZGljZXMucHVzaCh0cmlhbmdsZXNbaV0gKyB2ZXJ0UG9zKTtcbiAgICAgICAgaW5kaWNlcy5wdXNoKHRyaWFuZ2xlc1tpKzFdICsgdmVydFBvcyk7XG4gICAgICAgIGluZGljZXMucHVzaCh0cmlhbmdsZXNbaSsyXSArdmVydFBvcyk7XG4gICAgICAgIGluZGljZXMucHVzaCh0cmlhbmdsZXNbaSsyXSArIHZlcnRQb3MpO1xuICAgIH1cblxuICAgIGZvciAoaSA9IDA7IGkgPCBsZW5ndGg7IGkrKylcbiAgICB7XG4gICAgICAgIHZlcnRzLnB1c2gocG9pbnRzW2kgKiAyXSwgcG9pbnRzW2kgKiAyICsgMV0sXG4gICAgICAgICAgICAgICAgICAgciwgZywgYiwgYWxwaGEpO1xuICAgIH1cblxuICAgIHJldHVybiB0cnVlO1xufTtcblxuXG5tb2R1bGUuZXhwb3J0cyA9IGJ1aWxkUG9seTtcbiIsInZhciBidWlsZExpbmUgPSByZXF1aXJlKCcuL2J1aWxkTGluZScpLFxuICAgIHV0aWxzID0gcmVxdWlyZSgnLi4vLi4vLi4vdXRpbHMnKTtcblxuLyoqXG4gKiBCdWlsZHMgYSByZWN0YW5nbGUgdG8gZHJhd1xuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0gZ3JhcGhpY3NEYXRhIHtQSVhJLkdyYXBoaWNzfSBUaGUgZ3JhcGhpY3Mgb2JqZWN0IGNvbnRhaW5pbmcgYWxsIHRoZSBuZWNlc3NhcnkgcHJvcGVydGllc1xuICogQHBhcmFtIHdlYkdMRGF0YSB7b2JqZWN0fSBhbiBvYmplY3QgY29udGFpbmluZyBhbGwgdGhlIHdlYkdMLXNwZWNpZmljIGluZm9ybWF0aW9uIHRvIGNyZWF0ZSB0aGlzIHNoYXBlXG4gKi9cbnZhciBidWlsZFJlY3RhbmdsZSA9IGZ1bmN0aW9uIChncmFwaGljc0RhdGEsIHdlYkdMRGF0YSlcbntcbiAgICAvLyAtLS0gLy9cbiAgICAvLyBuZWVkIHRvIGNvbnZlcnQgcG9pbnRzIHRvIGEgbmljZSByZWd1bGFyIGRhdGFcbiAgICAvL1xuICAgIHZhciByZWN0RGF0YSA9IGdyYXBoaWNzRGF0YS5zaGFwZTtcbiAgICB2YXIgeCA9IHJlY3REYXRhLng7XG4gICAgdmFyIHkgPSByZWN0RGF0YS55O1xuICAgIHZhciB3aWR0aCA9IHJlY3REYXRhLndpZHRoO1xuICAgIHZhciBoZWlnaHQgPSByZWN0RGF0YS5oZWlnaHQ7XG5cbiAgICBpZiAoZ3JhcGhpY3NEYXRhLmZpbGwpXG4gICAge1xuICAgICAgICB2YXIgY29sb3IgPSB1dGlscy5oZXgycmdiKGdyYXBoaWNzRGF0YS5maWxsQ29sb3IpO1xuICAgICAgICB2YXIgYWxwaGEgPSBncmFwaGljc0RhdGEuZmlsbEFscGhhO1xuXG4gICAgICAgIHZhciByID0gY29sb3JbMF0gKiBhbHBoYTtcbiAgICAgICAgdmFyIGcgPSBjb2xvclsxXSAqIGFscGhhO1xuICAgICAgICB2YXIgYiA9IGNvbG9yWzJdICogYWxwaGE7XG5cbiAgICAgICAgdmFyIHZlcnRzID0gd2ViR0xEYXRhLnBvaW50cztcbiAgICAgICAgdmFyIGluZGljZXMgPSB3ZWJHTERhdGEuaW5kaWNlcztcblxuICAgICAgICB2YXIgdmVydFBvcyA9IHZlcnRzLmxlbmd0aC82O1xuXG4gICAgICAgIC8vIHN0YXJ0XG4gICAgICAgIHZlcnRzLnB1c2goeCwgeSk7XG4gICAgICAgIHZlcnRzLnB1c2gociwgZywgYiwgYWxwaGEpO1xuXG4gICAgICAgIHZlcnRzLnB1c2goeCArIHdpZHRoLCB5KTtcbiAgICAgICAgdmVydHMucHVzaChyLCBnLCBiLCBhbHBoYSk7XG5cbiAgICAgICAgdmVydHMucHVzaCh4ICwgeSArIGhlaWdodCk7XG4gICAgICAgIHZlcnRzLnB1c2gociwgZywgYiwgYWxwaGEpO1xuXG4gICAgICAgIHZlcnRzLnB1c2goeCArIHdpZHRoLCB5ICsgaGVpZ2h0KTtcbiAgICAgICAgdmVydHMucHVzaChyLCBnLCBiLCBhbHBoYSk7XG5cbiAgICAgICAgLy8gaW5zZXJ0IDIgZGVhZCB0cmlhbmdsZXMuLlxuICAgICAgICBpbmRpY2VzLnB1c2godmVydFBvcywgdmVydFBvcywgdmVydFBvcysxLCB2ZXJ0UG9zKzIsIHZlcnRQb3MrMywgdmVydFBvcyszKTtcbiAgICB9XG5cbiAgICBpZiAoZ3JhcGhpY3NEYXRhLmxpbmVXaWR0aClcbiAgICB7XG4gICAgICAgIHZhciB0ZW1wUG9pbnRzID0gZ3JhcGhpY3NEYXRhLnBvaW50cztcblxuICAgICAgICBncmFwaGljc0RhdGEucG9pbnRzID0gW3gsIHksXG4gICAgICAgICAgICAgICAgICB4ICsgd2lkdGgsIHksXG4gICAgICAgICAgICAgICAgICB4ICsgd2lkdGgsIHkgKyBoZWlnaHQsXG4gICAgICAgICAgICAgICAgICB4LCB5ICsgaGVpZ2h0LFxuICAgICAgICAgICAgICAgICAgeCwgeV07XG5cblxuICAgICAgICBidWlsZExpbmUoZ3JhcGhpY3NEYXRhLCB3ZWJHTERhdGEpO1xuXG4gICAgICAgIGdyYXBoaWNzRGF0YS5wb2ludHMgPSB0ZW1wUG9pbnRzO1xuICAgIH1cbn07XG5cbm1vZHVsZS5leHBvcnRzID0gYnVpbGRSZWN0YW5nbGU7IiwidmFyIGJ1aWxkTGluZSA9IHJlcXVpcmUoJy4vYnVpbGRMaW5lJyksXG4gICAgdXRpbHMgPSByZXF1aXJlKCcuLi8uLi8uLi91dGlscycpO1xuICAgIFxuLyoqXG4gKiBCdWlsZHMgYSByb3VuZGVkIHJlY3RhbmdsZSB0byBkcmF3XG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSBncmFwaGljc0RhdGEge1BJWEkuR3JhcGhpY3N9IFRoZSBncmFwaGljcyBvYmplY3QgY29udGFpbmluZyBhbGwgdGhlIG5lY2Vzc2FyeSBwcm9wZXJ0aWVzXG4gKiBAcGFyYW0gd2ViR0xEYXRhIHtvYmplY3R9IGFuIG9iamVjdCBjb250YWluaW5nIGFsbCB0aGUgd2ViR0wtc3BlY2lmaWMgaW5mb3JtYXRpb24gdG8gY3JlYXRlIHRoaXMgc2hhcGVcbiAqL1xuYnVpbGRSb3VuZGVkUmVjdGFuZ2xlID0gZnVuY3Rpb24gKGdyYXBoaWNzRGF0YSwgd2ViR0xEYXRhKVxue1xuICAgIHZhciBycmVjdERhdGEgPSBncmFwaGljc0RhdGEuc2hhcGU7XG4gICAgdmFyIHggPSBycmVjdERhdGEueDtcbiAgICB2YXIgeSA9IHJyZWN0RGF0YS55O1xuICAgIHZhciB3aWR0aCA9IHJyZWN0RGF0YS53aWR0aDtcbiAgICB2YXIgaGVpZ2h0ID0gcnJlY3REYXRhLmhlaWdodDtcblxuICAgIHZhciByYWRpdXMgPSBycmVjdERhdGEucmFkaXVzO1xuXG4gICAgdmFyIHJlY1BvaW50cyA9IFtdO1xuICAgIHJlY1BvaW50cy5wdXNoKHgsIHkgKyByYWRpdXMpO1xuICAgIHRoaXMucXVhZHJhdGljQmV6aWVyQ3VydmUoeCwgeSArIGhlaWdodCAtIHJhZGl1cywgeCwgeSArIGhlaWdodCwgeCArIHJhZGl1cywgeSArIGhlaWdodCwgcmVjUG9pbnRzKTtcbiAgICB0aGlzLnF1YWRyYXRpY0JlemllckN1cnZlKHggKyB3aWR0aCAtIHJhZGl1cywgeSArIGhlaWdodCwgeCArIHdpZHRoLCB5ICsgaGVpZ2h0LCB4ICsgd2lkdGgsIHkgKyBoZWlnaHQgLSByYWRpdXMsIHJlY1BvaW50cyk7XG4gICAgdGhpcy5xdWFkcmF0aWNCZXppZXJDdXJ2ZSh4ICsgd2lkdGgsIHkgKyByYWRpdXMsIHggKyB3aWR0aCwgeSwgeCArIHdpZHRoIC0gcmFkaXVzLCB5LCByZWNQb2ludHMpO1xuICAgIHRoaXMucXVhZHJhdGljQmV6aWVyQ3VydmUoeCArIHJhZGl1cywgeSwgeCwgeSwgeCwgeSArIHJhZGl1cyArIDAuMDAwMDAwMDAwMSwgcmVjUG9pbnRzKTtcblxuICAgIC8vIHRoaXMgdGlueSBudW1iZXIgZGVhbHMgd2l0aCB0aGUgaXNzdWUgdGhhdCBvY2N1cnMgd2hlbiBwb2ludHMgb3ZlcmxhcCBhbmQgZWFyY3V0IGZhaWxzIHRvIHRyaWFuZ3VsYXRlIHRoZSBpdGVtLlxuICAgIC8vIFRPRE8gLSBmaXggdGhpcyBwcm9wZXJseSwgdGhpcyBpcyBub3QgdmVyeSBlbGVnYW50Li4gYnV0IGl0IHdvcmtzIGZvciBub3cuXG5cbiAgICBpZiAoZ3JhcGhpY3NEYXRhLmZpbGwpXG4gICAge1xuICAgICAgICB2YXIgY29sb3IgPSB1dGlscy5oZXgycmdiKGdyYXBoaWNzRGF0YS5maWxsQ29sb3IpO1xuICAgICAgICB2YXIgYWxwaGEgPSBncmFwaGljc0RhdGEuZmlsbEFscGhhO1xuXG4gICAgICAgIHZhciByID0gY29sb3JbMF0gKiBhbHBoYTtcbiAgICAgICAgdmFyIGcgPSBjb2xvclsxXSAqIGFscGhhO1xuICAgICAgICB2YXIgYiA9IGNvbG9yWzJdICogYWxwaGE7XG5cbiAgICAgICAgdmFyIHZlcnRzID0gd2ViR0xEYXRhLnBvaW50cztcbiAgICAgICAgdmFyIGluZGljZXMgPSB3ZWJHTERhdGEuaW5kaWNlcztcblxuICAgICAgICB2YXIgdmVjUG9zID0gdmVydHMubGVuZ3RoLzY7XG5cbiAgICAgICAgdmFyIHRyaWFuZ2xlcyA9IGVhcmN1dChyZWNQb2ludHMsIG51bGwsIDIpO1xuXG4gICAgICAgIHZhciBpID0gMDtcbiAgICAgICAgZm9yIChpID0gMDsgaSA8IHRyaWFuZ2xlcy5sZW5ndGg7IGkrPTMpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGluZGljZXMucHVzaCh0cmlhbmdsZXNbaV0gKyB2ZWNQb3MpO1xuICAgICAgICAgICAgaW5kaWNlcy5wdXNoKHRyaWFuZ2xlc1tpXSArIHZlY1Bvcyk7XG4gICAgICAgICAgICBpbmRpY2VzLnB1c2godHJpYW5nbGVzW2krMV0gKyB2ZWNQb3MpO1xuICAgICAgICAgICAgaW5kaWNlcy5wdXNoKHRyaWFuZ2xlc1tpKzJdICsgdmVjUG9zKTtcbiAgICAgICAgICAgIGluZGljZXMucHVzaCh0cmlhbmdsZXNbaSsyXSArIHZlY1Bvcyk7XG4gICAgICAgIH1cblxuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgcmVjUG9pbnRzLmxlbmd0aDsgaSsrKVxuICAgICAgICB7XG4gICAgICAgICAgICB2ZXJ0cy5wdXNoKHJlY1BvaW50c1tpXSwgcmVjUG9pbnRzWysraV0sIHIsIGcsIGIsIGFscGhhKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGlmIChncmFwaGljc0RhdGEubGluZVdpZHRoKVxuICAgIHtcbiAgICAgICAgdmFyIHRlbXBQb2ludHMgPSBncmFwaGljc0RhdGEucG9pbnRzO1xuXG4gICAgICAgIGdyYXBoaWNzRGF0YS5wb2ludHMgPSByZWNQb2ludHM7XG5cbiAgICAgICAgdGhpcy5idWlsZExpbmUoZ3JhcGhpY3NEYXRhLCB3ZWJHTERhdGEpO1xuXG4gICAgICAgIGdyYXBoaWNzRGF0YS5wb2ludHMgPSB0ZW1wUG9pbnRzO1xuICAgIH1cbn07XG5cbi8qKlxuICogQ2FsY3VsYXRlIHRoZSBwb2ludHMgZm9yIGEgcXVhZHJhdGljIGJlemllciBjdXJ2ZS4gKGhlbHBlciBmdW5jdGlvbi4uKVxuICogQmFzZWQgb246IGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vcXVlc3Rpb25zLzc4NTA5Ny9ob3ctZG8taS1pbXBsZW1lbnQtYS1iZXppZXItY3VydmUtaW4tY1xuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0gZnJvbVgge251bWJlcn0gT3JpZ2luIHBvaW50IHhcbiAqIEBwYXJhbSBmcm9tWSB7bnVtYmVyfSBPcmlnaW4gcG9pbnQgeFxuICogQHBhcmFtIGNwWCB7bnVtYmVyfSBDb250cm9sIHBvaW50IHhcbiAqIEBwYXJhbSBjcFkge251bWJlcn0gQ29udHJvbCBwb2ludCB5XG4gKiBAcGFyYW0gdG9YIHtudW1iZXJ9IERlc3RpbmF0aW9uIHBvaW50IHhcbiAqIEBwYXJhbSB0b1kge251bWJlcn0gRGVzdGluYXRpb24gcG9pbnQgeVxuICogQHBhcmFtIFtvdXRdIHtudW1iZXJbXX0gVGhlIG91dHB1dCBhcnJheSB0byBhZGQgcG9pbnRzIGludG8uIElmIG5vdCBwYXNzZWQsIGEgbmV3IGFycmF5IGlzIGNyZWF0ZWQuXG4gKiBAcmV0dXJuIHtudW1iZXJbXX0gYW4gYXJyYXkgb2YgcG9pbnRzXG4gKi9cbnF1YWRyYXRpY0JlemllckN1cnZlID0gZnVuY3Rpb24gKGZyb21YLCBmcm9tWSwgY3BYLCBjcFksIHRvWCwgdG9ZLCBvdXQpXG57XG4gICAgdmFyIHhhLFxuICAgICAgICB5YSxcbiAgICAgICAgeGIsXG4gICAgICAgIHliLFxuICAgICAgICB4LFxuICAgICAgICB5LFxuICAgICAgICBuID0gMjAsXG4gICAgICAgIHBvaW50cyA9IG91dCB8fCBbXTtcblxuICAgIGZ1bmN0aW9uIGdldFB0KG4xICwgbjIsIHBlcmMpIHtcbiAgICAgICAgdmFyIGRpZmYgPSBuMiAtIG4xO1xuXG4gICAgICAgIHJldHVybiBuMSArICggZGlmZiAqIHBlcmMgKTtcbiAgICB9XG5cbiAgICB2YXIgaiA9IDA7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPD0gbjsgaSsrICkge1xuICAgICAgICBqID0gaSAvIG47XG5cbiAgICAgICAgLy8gVGhlIEdyZWVuIExpbmVcbiAgICAgICAgeGEgPSBnZXRQdCggZnJvbVggLCBjcFggLCBqICk7XG4gICAgICAgIHlhID0gZ2V0UHQoIGZyb21ZICwgY3BZICwgaiApO1xuICAgICAgICB4YiA9IGdldFB0KCBjcFggLCB0b1ggLCBqICk7XG4gICAgICAgIHliID0gZ2V0UHQoIGNwWSAsIHRvWSAsIGogKTtcblxuICAgICAgICAvLyBUaGUgQmxhY2sgRG90XG4gICAgICAgIHggPSBnZXRQdCggeGEgLCB4YiAsIGogKTtcbiAgICAgICAgeSA9IGdldFB0KCB5YSAsIHliICwgaiApO1xuXG4gICAgICAgIHBvaW50cy5wdXNoKHgsIHkpO1xuICAgIH1cblxuICAgIHJldHVybiBwb2ludHM7XG59O1xuXG5cbm1vZHVsZS5leHBvcnRzID0gYnVpbGRSb3VuZGVkUmVjdGFuZ2xlOyIsIi8qKlxuICogQGZpbGUgICAgICAgIE1haW4gZXhwb3J0IG9mIHRoZSBQSVhJIGNvcmUgbGlicmFyeVxuICogQGF1dGhvciAgICAgIE1hdCBHcm92ZXMgPG1hdEBnb29kYm95ZGlnaXRhbC5jb20+XG4gKiBAY29weXJpZ2h0ICAgMjAxMy0yMDE1IEdvb2RCb3lEaWdpdGFsXG4gKiBAbGljZW5zZSAgICAge0BsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9waXhpanMvcGl4aS5qcy9ibG9iL21hc3Rlci9MSUNFTlNFfE1JVCBMaWNlbnNlfVxuICovXG5cbi8qKlxuICogQG5hbWVzcGFjZSBQSVhJXG4gKi9cbi8vIGV4cG9ydCBjb3JlIGFuZCBjb25zdC4gV2UgYXNzaWduIGNvcmUgdG8gY29uc3Qgc28gdGhhdCB0aGUgbm9uLXJlZmVyZW5jZSB0eXBlcyBpbiBjb25zdCByZW1haW4gaW4tdGFjdFxudmFyIGNvcmUgPSBtb2R1bGUuZXhwb3J0cyA9IE9iamVjdC5hc3NpZ24ocmVxdWlyZSgnLi9jb25zdCcpLCByZXF1aXJlKCcuL21hdGgnKSwge1xuICAgIC8vIHV0aWxzXG4gICAgdXRpbHM6IHJlcXVpcmUoJy4vdXRpbHMnKSxcbiAgICB0aWNrZXI6IHJlcXVpcmUoJy4vdGlja2VyJyksXG5cbiAgICAvLyBkaXNwbGF5XG4gICAgRGlzcGxheU9iamVjdDogICAgICAgICAgcmVxdWlyZSgnLi9kaXNwbGF5L0Rpc3BsYXlPYmplY3QnKSxcbiAgICBDb250YWluZXI6ICAgICAgICAgICAgICByZXF1aXJlKCcuL2Rpc3BsYXkvQ29udGFpbmVyJyksXG5cbiAgICAvLyBzcHJpdGVzXG4gICAgU3ByaXRlOiAgICAgICAgICAgICAgICAgcmVxdWlyZSgnLi9zcHJpdGVzL1Nwcml0ZScpLFxuICAgIFBhcnRpY2xlQ29udGFpbmVyOiAgICAgIHJlcXVpcmUoJy4vcGFydGljbGVzL1BhcnRpY2xlQ29udGFpbmVyJyksXG4gICAgU3ByaXRlUmVuZGVyZXI6ICAgICAgICAgcmVxdWlyZSgnLi9zcHJpdGVzL3dlYmdsL1Nwcml0ZVJlbmRlcmVyJyksXG4gICAgUGFydGljbGVSZW5kZXJlcjogICAgICAgcmVxdWlyZSgnLi9wYXJ0aWNsZXMvd2ViZ2wvUGFydGljbGVSZW5kZXJlcicpLFxuXG4gICAgLy8gdGV4dFxuICAgIFRleHQ6ICAgICAgICAgICAgICAgICAgIHJlcXVpcmUoJy4vdGV4dC9UZXh0JyksXG5cbiAgICAvLyBwcmltaXRpdmVzXG4gICAgR3JhcGhpY3M6ICAgICAgICAgICAgICAgcmVxdWlyZSgnLi9ncmFwaGljcy9HcmFwaGljcycpLFxuICAgIEdyYXBoaWNzRGF0YTogICAgICAgICAgIHJlcXVpcmUoJy4vZ3JhcGhpY3MvR3JhcGhpY3NEYXRhJyksXG4gICAgR3JhcGhpY3NSZW5kZXJlcjogICAgICAgcmVxdWlyZSgnLi9ncmFwaGljcy93ZWJnbC9HcmFwaGljc1JlbmRlcmVyJyksXG5cbiAgICAvLyB0ZXh0dXJlc1xuICAgIFRleHR1cmU6ICAgICAgICAgICAgICAgIHJlcXVpcmUoJy4vdGV4dHVyZXMvVGV4dHVyZScpLFxuICAgIEJhc2VUZXh0dXJlOiAgICAgICAgICAgIHJlcXVpcmUoJy4vdGV4dHVyZXMvQmFzZVRleHR1cmUnKSxcbiAgICBSZW5kZXJUZXh0dXJlOiAgICAgICAgICByZXF1aXJlKCcuL3RleHR1cmVzL1JlbmRlclRleHR1cmUnKSxcbiAgICBWaWRlb0Jhc2VUZXh0dXJlOiAgICAgICByZXF1aXJlKCcuL3RleHR1cmVzL1ZpZGVvQmFzZVRleHR1cmUnKSxcbiAgICBUZXh0dXJlVXZzOiAgICAgICAgICAgICByZXF1aXJlKCcuL3RleHR1cmVzL1RleHR1cmVVdnMnKSxcblxuICAgIC8vIHJlbmRlcmVycyAtIGNhbnZhc1xuICAgIENhbnZhc1JlbmRlcmVyOiAgICAgICAgIHJlcXVpcmUoJy4vcmVuZGVyZXJzL2NhbnZhcy9DYW52YXNSZW5kZXJlcicpLFxuICAgIENhbnZhc0dyYXBoaWNzOiAgICAgICAgIHJlcXVpcmUoJy4vcmVuZGVyZXJzL2NhbnZhcy91dGlscy9DYW52YXNHcmFwaGljcycpLFxuICAgIENhbnZhc0J1ZmZlcjogICAgICAgICAgIHJlcXVpcmUoJy4vcmVuZGVyZXJzL2NhbnZhcy91dGlscy9DYW52YXNCdWZmZXInKSxcblxuICAgIC8vIHJlbmRlcmVycyAtIHdlYmdsXG4gICAgV2ViR0xSZW5kZXJlcjogICAgICAgICAgcmVxdWlyZSgnLi9yZW5kZXJlcnMvd2ViZ2wvV2ViR0xSZW5kZXJlcicpLFxuICAgIFdlYkdMTWFuYWdlcjogICAgICAgICAgcmVxdWlyZSgnLi9yZW5kZXJlcnMvd2ViZ2wvbWFuYWdlcnMvV2ViR0xNYW5hZ2VyJyksXG4gICAgU2hhZGVyTWFuYWdlcjogICAgICAgICAgcmVxdWlyZSgnLi9yZW5kZXJlcnMvd2ViZ2wvbWFuYWdlcnMvU2hhZGVyTWFuYWdlcicpLFxuICAgIFNoYWRlcjogICAgICAgICAgICAgICAgIHJlcXVpcmUoJy4vcmVuZGVyZXJzL3dlYmdsL3NoYWRlcnMvU2hhZGVyJyksXG4gICAgT2JqZWN0UmVuZGVyZXI6ICAgICAgICAgcmVxdWlyZSgnLi9yZW5kZXJlcnMvd2ViZ2wvdXRpbHMvT2JqZWN0UmVuZGVyZXInKSxcbiAgICBSZW5kZXJUYXJnZXQ6ICAgICAgICAgICByZXF1aXJlKCcuL3JlbmRlcmVycy93ZWJnbC91dGlscy9SZW5kZXJUYXJnZXQnKSxcblxuICAgIC8vIGZpbHRlcnMgLSB3ZWJnbFxuICAgIEFic3RyYWN0RmlsdGVyOiAgICAgICAgIHJlcXVpcmUoJy4vcmVuZGVyZXJzL3dlYmdsL2ZpbHRlcnMvQWJzdHJhY3RGaWx0ZXInKSxcbiAgICBGWEFBRmlsdGVyOiAgICAgICAgICAgICByZXF1aXJlKCcuL3JlbmRlcmVycy93ZWJnbC9maWx0ZXJzL0ZYQUFGaWx0ZXInKSxcbiAgICBTcHJpdGVNYXNrRmlsdGVyOiAgICAgICByZXF1aXJlKCcuL3JlbmRlcmVycy93ZWJnbC9maWx0ZXJzL1Nwcml0ZU1hc2tGaWx0ZXInKSxcblxuICAgIGdsQ29yZTogICAgICAgICAgICAgICAgICAgcmVxdWlyZSgncGl4aS1nbC1jb3JlJyksXG5cbiAgICAvKipcbiAgICAgKiBUaGlzIGhlbHBlciBmdW5jdGlvbiB3aWxsIGF1dG9tYXRpY2FsbHkgZGV0ZWN0IHdoaWNoIHJlbmRlcmVyIHlvdSBzaG91bGQgYmUgdXNpbmcuXG4gICAgICogV2ViR0wgaXMgdGhlIHByZWZlcnJlZCByZW5kZXJlciBhcyBpdCBpcyBhIGxvdCBmYXN0ZXIuIElmIHdlYkdMIGlzIG5vdCBzdXBwb3J0ZWQgYnlcbiAgICAgKiB0aGUgYnJvd3NlciB0aGVuIHRoaXMgZnVuY3Rpb24gd2lsbCByZXR1cm4gYSBjYW52YXMgcmVuZGVyZXJcbiAgICAgKlxuICAgICAqIEBtZW1iZXJvZiBQSVhJXG4gICAgICogQHBhcmFtIHdpZHRoPTgwMCB7bnVtYmVyfSB0aGUgd2lkdGggb2YgdGhlIHJlbmRlcmVycyB2aWV3XG4gICAgICogQHBhcmFtIGhlaWdodD02MDAge251bWJlcn0gdGhlIGhlaWdodCBvZiB0aGUgcmVuZGVyZXJzIHZpZXdcbiAgICAgKiBAcGFyYW0gW29wdGlvbnNdIHtvYmplY3R9IFRoZSBvcHRpb25hbCByZW5kZXJlciBwYXJhbWV0ZXJzXG4gICAgICogQHBhcmFtIFtvcHRpb25zLnZpZXddIHtIVE1MQ2FudmFzRWxlbWVudH0gdGhlIGNhbnZhcyB0byB1c2UgYXMgYSB2aWV3LCBvcHRpb25hbFxuICAgICAqIEBwYXJhbSBbb3B0aW9ucy50cmFuc3BhcmVudD1mYWxzZV0ge2Jvb2xlYW59IElmIHRoZSByZW5kZXIgdmlldyBpcyB0cmFuc3BhcmVudCwgZGVmYXVsdCBmYWxzZVxuICAgICAqIEBwYXJhbSBbb3B0aW9ucy5hbnRpYWxpYXM9ZmFsc2VdIHtib29sZWFufSBzZXRzIGFudGlhbGlhcyAob25seSBhcHBsaWNhYmxlIGluIGNocm9tZSBhdCB0aGUgbW9tZW50KVxuICAgICAqIEBwYXJhbSBbb3B0aW9ucy5wcmVzZXJ2ZURyYXdpbmdCdWZmZXI9ZmFsc2VdIHtib29sZWFufSBlbmFibGVzIGRyYXdpbmcgYnVmZmVyIHByZXNlcnZhdGlvbiwgZW5hYmxlIHRoaXMgaWYgeW91XG4gICAgICogICAgICBuZWVkIHRvIGNhbGwgdG9EYXRhVXJsIG9uIHRoZSB3ZWJnbCBjb250ZXh0XG4gICAgICogQHBhcmFtIFtvcHRpb25zLnJlc29sdXRpb249MV0ge251bWJlcn0gdGhlIHJlc29sdXRpb24gb2YgdGhlIHJlbmRlcmVyLCByZXRpbmEgd291bGQgYmUgMlxuICAgICAqIEBwYXJhbSBbbm9XZWJHTD1mYWxzZV0ge2Jvb2xlYW59IHByZXZlbnRzIHNlbGVjdGlvbiBvZiBXZWJHTCByZW5kZXJlciwgZXZlbiBpZiBzdWNoIGlzIHByZXNlbnRcbiAgICAgKlxuICAgICAqIEByZXR1cm4ge1dlYkdMUmVuZGVyZXJ8Q2FudmFzUmVuZGVyZXJ9IFJldHVybnMgV2ViR0wgcmVuZGVyZXIgaWYgYXZhaWxhYmxlLCBvdGhlcndpc2UgQ2FudmFzUmVuZGVyZXJcbiAgICAgKi9cbiAgICBhdXRvRGV0ZWN0UmVuZGVyZXI6IGZ1bmN0aW9uICh3aWR0aCwgaGVpZ2h0LCBvcHRpb25zLCBub1dlYkdMKVxuICAgIHtcbiAgICAgICAgd2lkdGggPSB3aWR0aCB8fCA4MDA7XG4gICAgICAgIGhlaWdodCA9IGhlaWdodCB8fCA2MDA7XG5cbiAgICAgICAgaWYgKCFub1dlYkdMICYmIGNvcmUudXRpbHMuaXNXZWJHTFN1cHBvcnRlZCgpKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IGNvcmUuV2ViR0xSZW5kZXJlcih3aWR0aCwgaGVpZ2h0LCBvcHRpb25zKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBuZXcgY29yZS5DYW52YXNSZW5kZXJlcih3aWR0aCwgaGVpZ2h0LCBvcHRpb25zKTtcbiAgICB9XG59KTtcbiIsIi8vIEB0b2RvIC0gaWdub3JlIHRoZSB0b28gbWFueSBwYXJhbWV0ZXJzIHdhcm5pbmcgZm9yIG5vd1xuLy8gc2hvdWxkIGVpdGhlciBmaXggaXQgb3IgY2hhbmdlIHRoZSBqc2hpbnQgY29uZmlnXG4vLyBqc2hpbnQgLVcwNzJcblxudmFyIFBvaW50ID0gcmVxdWlyZSgnLi9Qb2ludCcpO1xuXG4vKipcbiAqIFRoZSBwaXhpIE1hdHJpeCBjbGFzcyBhcyBhbiBvYmplY3QsIHdoaWNoIG1ha2VzIGl0IGEgbG90IGZhc3RlcixcbiAqIGhlcmUgaXMgYSByZXByZXNlbnRhdGlvbiBvZiBpdCA6XG4gKiB8IGEgfCBiIHwgdHh8XG4gKiB8IGMgfCBkIHwgdHl8XG4gKiB8IDAgfCAwIHwgMSB8XG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICovXG5mdW5jdGlvbiBNYXRyaXgoKVxue1xuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAxXG4gICAgICovXG4gICAgdGhpcy5hID0gMTtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAwXG4gICAgICovXG4gICAgdGhpcy5iID0gMDtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAwXG4gICAgICovXG4gICAgdGhpcy5jID0gMDtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAxXG4gICAgICovXG4gICAgdGhpcy5kID0gMTtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAwXG4gICAgICovXG4gICAgdGhpcy50eCA9IDA7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMFxuICAgICAqL1xuICAgIHRoaXMudHkgPSAwO1xufVxuXG5NYXRyaXgucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gTWF0cml4O1xubW9kdWxlLmV4cG9ydHMgPSBNYXRyaXg7XG5cbi8qKlxuICogQ3JlYXRlcyBhIE1hdHJpeCBvYmplY3QgYmFzZWQgb24gdGhlIGdpdmVuIGFycmF5LiBUaGUgRWxlbWVudCB0byBNYXRyaXggbWFwcGluZyBvcmRlciBpcyBhcyBmb2xsb3dzOlxuICpcbiAqIGEgPSBhcnJheVswXVxuICogYiA9IGFycmF5WzFdXG4gKiBjID0gYXJyYXlbM11cbiAqIGQgPSBhcnJheVs0XVxuICogdHggPSBhcnJheVsyXVxuICogdHkgPSBhcnJheVs1XVxuICpcbiAqIEBwYXJhbSBhcnJheSB7bnVtYmVyW119IFRoZSBhcnJheSB0aGF0IHRoZSBtYXRyaXggd2lsbCBiZSBwb3B1bGF0ZWQgZnJvbS5cbiAqL1xuTWF0cml4LnByb3RvdHlwZS5mcm9tQXJyYXkgPSBmdW5jdGlvbiAoYXJyYXkpXG57XG4gICAgdGhpcy5hID0gYXJyYXlbMF07XG4gICAgdGhpcy5iID0gYXJyYXlbMV07XG4gICAgdGhpcy5jID0gYXJyYXlbM107XG4gICAgdGhpcy5kID0gYXJyYXlbNF07XG4gICAgdGhpcy50eCA9IGFycmF5WzJdO1xuICAgIHRoaXMudHkgPSBhcnJheVs1XTtcbn07XG5cblxuLyoqXG4gKiBzZXRzIHRoZSBtYXRyaXggcHJvcGVydGllc1xuICpcbiAqIEBwYXJhbSB7bnVtYmVyfSBhXG4gKiBAcGFyYW0ge251bWJlcn0gYlxuICogQHBhcmFtIHtudW1iZXJ9IGNcbiAqIEBwYXJhbSB7bnVtYmVyfSBkXG4gKiBAcGFyYW0ge251bWJlcn0gdHhcbiAqIEBwYXJhbSB7bnVtYmVyfSB0eVxuICpcbiAqIEByZXR1cm4ge1BJWEkuTWF0cml4fSBUaGlzIG1hdHJpeC4gR29vZCBmb3IgY2hhaW5pbmcgbWV0aG9kIGNhbGxzLlxuICovXG5NYXRyaXgucHJvdG90eXBlLnNldCA9IGZ1bmN0aW9uIChhLCBiLCBjLCBkLCB0eCwgdHkpXG57XG4gICAgdGhpcy5hID0gYTtcbiAgICB0aGlzLmIgPSBiO1xuICAgIHRoaXMuYyA9IGM7XG4gICAgdGhpcy5kID0gZDtcbiAgICB0aGlzLnR4ID0gdHg7XG4gICAgdGhpcy50eSA9IHR5O1xuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG5cbi8qKlxuICogQ3JlYXRlcyBhbiBhcnJheSBmcm9tIHRoZSBjdXJyZW50IE1hdHJpeCBvYmplY3QuXG4gKlxuICogQHBhcmFtIHRyYW5zcG9zZSB7Ym9vbGVhbn0gV2hldGhlciB3ZSBuZWVkIHRvIHRyYW5zcG9zZSB0aGUgbWF0cml4IG9yIG5vdFxuICogQHBhcmFtIFtvdXRdIHtBcnJheX0gSWYgcHJvdmlkZWQgdGhlIGFycmF5IHdpbGwgYmUgYXNzaWduZWQgdG8gb3V0XG4gKiBAcmV0dXJuIHtudW1iZXJbXX0gdGhlIG5ld2x5IGNyZWF0ZWQgYXJyYXkgd2hpY2ggY29udGFpbnMgdGhlIG1hdHJpeFxuICovXG5NYXRyaXgucHJvdG90eXBlLnRvQXJyYXkgPSBmdW5jdGlvbiAodHJhbnNwb3NlLCBvdXQpXG57XG4gICAgaWYgKCF0aGlzLmFycmF5KVxuICAgIHtcbiAgICAgICAgdGhpcy5hcnJheSA9IG5ldyBGbG9hdDMyQXJyYXkoOSk7XG4gICAgfVxuXG4gICAgdmFyIGFycmF5ID0gb3V0IHx8IHRoaXMuYXJyYXk7XG5cbiAgICBpZiAodHJhbnNwb3NlKVxuICAgIHtcbiAgICAgICAgYXJyYXlbMF0gPSB0aGlzLmE7XG4gICAgICAgIGFycmF5WzFdID0gdGhpcy5iO1xuICAgICAgICBhcnJheVsyXSA9IDA7XG4gICAgICAgIGFycmF5WzNdID0gdGhpcy5jO1xuICAgICAgICBhcnJheVs0XSA9IHRoaXMuZDtcbiAgICAgICAgYXJyYXlbNV0gPSAwO1xuICAgICAgICBhcnJheVs2XSA9IHRoaXMudHg7XG4gICAgICAgIGFycmF5WzddID0gdGhpcy50eTtcbiAgICAgICAgYXJyYXlbOF0gPSAxO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICBhcnJheVswXSA9IHRoaXMuYTtcbiAgICAgICAgYXJyYXlbMV0gPSB0aGlzLmM7XG4gICAgICAgIGFycmF5WzJdID0gdGhpcy50eDtcbiAgICAgICAgYXJyYXlbM10gPSB0aGlzLmI7XG4gICAgICAgIGFycmF5WzRdID0gdGhpcy5kO1xuICAgICAgICBhcnJheVs1XSA9IHRoaXMudHk7XG4gICAgICAgIGFycmF5WzZdID0gMDtcbiAgICAgICAgYXJyYXlbN10gPSAwO1xuICAgICAgICBhcnJheVs4XSA9IDE7XG4gICAgfVxuXG4gICAgcmV0dXJuIGFycmF5O1xufTtcblxuLyoqXG4gKiBHZXQgYSBuZXcgcG9zaXRpb24gd2l0aCB0aGUgY3VycmVudCB0cmFuc2Zvcm1hdGlvbiBhcHBsaWVkLlxuICogQ2FuIGJlIHVzZWQgdG8gZ28gZnJvbSBhIGNoaWxkJ3MgY29vcmRpbmF0ZSBzcGFjZSB0byB0aGUgd29ybGQgY29vcmRpbmF0ZSBzcGFjZS4gKGUuZy4gcmVuZGVyaW5nKVxuICpcbiAqIEBwYXJhbSBwb3Mge1BJWEkuUG9pbnR9IFRoZSBvcmlnaW5cbiAqIEBwYXJhbSBbbmV3UG9zXSB7UElYSS5Qb2ludH0gVGhlIHBvaW50IHRoYXQgdGhlIG5ldyBwb3NpdGlvbiBpcyBhc3NpZ25lZCB0byAoYWxsb3dlZCB0byBiZSBzYW1lIGFzIGlucHV0KVxuICogQHJldHVybiB7UElYSS5Qb2ludH0gVGhlIG5ldyBwb2ludCwgdHJhbnNmb3JtZWQgdGhyb3VnaCB0aGlzIG1hdHJpeFxuICovXG5NYXRyaXgucHJvdG90eXBlLmFwcGx5ID0gZnVuY3Rpb24gKHBvcywgbmV3UG9zKVxue1xuICAgIG5ld1BvcyA9IG5ld1BvcyB8fCBuZXcgUG9pbnQoKTtcblxuICAgIHZhciB4ID0gcG9zLng7XG4gICAgdmFyIHkgPSBwb3MueTtcblxuICAgIG5ld1Bvcy54ID0gdGhpcy5hICogeCArIHRoaXMuYyAqIHkgKyB0aGlzLnR4O1xuICAgIG5ld1Bvcy55ID0gdGhpcy5iICogeCArIHRoaXMuZCAqIHkgKyB0aGlzLnR5O1xuXG4gICAgcmV0dXJuIG5ld1Bvcztcbn07XG5cbi8qKlxuICogR2V0IGEgbmV3IHBvc2l0aW9uIHdpdGggdGhlIGludmVyc2Ugb2YgdGhlIGN1cnJlbnQgdHJhbnNmb3JtYXRpb24gYXBwbGllZC5cbiAqIENhbiBiZSB1c2VkIHRvIGdvIGZyb20gdGhlIHdvcmxkIGNvb3JkaW5hdGUgc3BhY2UgdG8gYSBjaGlsZCdzIGNvb3JkaW5hdGUgc3BhY2UuIChlLmcuIGlucHV0KVxuICpcbiAqIEBwYXJhbSBwb3Mge1BJWEkuUG9pbnR9IFRoZSBvcmlnaW5cbiAqIEBwYXJhbSBbbmV3UG9zXSB7UElYSS5Qb2ludH0gVGhlIHBvaW50IHRoYXQgdGhlIG5ldyBwb3NpdGlvbiBpcyBhc3NpZ25lZCB0byAoYWxsb3dlZCB0byBiZSBzYW1lIGFzIGlucHV0KVxuICogQHJldHVybiB7UElYSS5Qb2ludH0gVGhlIG5ldyBwb2ludCwgaW52ZXJzZS10cmFuc2Zvcm1lZCB0aHJvdWdoIHRoaXMgbWF0cml4XG4gKi9cbk1hdHJpeC5wcm90b3R5cGUuYXBwbHlJbnZlcnNlID0gZnVuY3Rpb24gKHBvcywgbmV3UG9zKVxue1xuICAgIG5ld1BvcyA9IG5ld1BvcyB8fCBuZXcgUG9pbnQoKTtcblxuICAgIHZhciBpZCA9IDEgLyAodGhpcy5hICogdGhpcy5kICsgdGhpcy5jICogLXRoaXMuYik7XG5cbiAgICB2YXIgeCA9IHBvcy54O1xuICAgIHZhciB5ID0gcG9zLnk7XG5cbiAgICBuZXdQb3MueCA9IHRoaXMuZCAqIGlkICogeCArIC10aGlzLmMgKiBpZCAqIHkgKyAodGhpcy50eSAqIHRoaXMuYyAtIHRoaXMudHggKiB0aGlzLmQpICogaWQ7XG4gICAgbmV3UG9zLnkgPSB0aGlzLmEgKiBpZCAqIHkgKyAtdGhpcy5iICogaWQgKiB4ICsgKC10aGlzLnR5ICogdGhpcy5hICsgdGhpcy50eCAqIHRoaXMuYikgKiBpZDtcblxuICAgIHJldHVybiBuZXdQb3M7XG59O1xuXG4vKipcbiAqIFRyYW5zbGF0ZXMgdGhlIG1hdHJpeCBvbiB0aGUgeCBhbmQgeS5cbiAqXG4gKiBAcGFyYW0ge251bWJlcn0geFxuICogQHBhcmFtIHtudW1iZXJ9IHlcbiAqIEByZXR1cm4ge1BJWEkuTWF0cml4fSBUaGlzIG1hdHJpeC4gR29vZCBmb3IgY2hhaW5pbmcgbWV0aG9kIGNhbGxzLlxuICovXG5NYXRyaXgucHJvdG90eXBlLnRyYW5zbGF0ZSA9IGZ1bmN0aW9uICh4LCB5KVxue1xuICAgIHRoaXMudHggKz0geDtcbiAgICB0aGlzLnR5ICs9IHk7XG5cbiAgICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogQXBwbGllcyBhIHNjYWxlIHRyYW5zZm9ybWF0aW9uIHRvIHRoZSBtYXRyaXguXG4gKlxuICogQHBhcmFtIHtudW1iZXJ9IHggVGhlIGFtb3VudCB0byBzY2FsZSBob3Jpem9udGFsbHlcbiAqIEBwYXJhbSB7bnVtYmVyfSB5IFRoZSBhbW91bnQgdG8gc2NhbGUgdmVydGljYWxseVxuICogQHJldHVybiB7UElYSS5NYXRyaXh9IFRoaXMgbWF0cml4LiBHb29kIGZvciBjaGFpbmluZyBtZXRob2QgY2FsbHMuXG4gKi9cbk1hdHJpeC5wcm90b3R5cGUuc2NhbGUgPSBmdW5jdGlvbiAoeCwgeSlcbntcbiAgICB0aGlzLmEgKj0geDtcbiAgICB0aGlzLmQgKj0geTtcbiAgICB0aGlzLmMgKj0geDtcbiAgICB0aGlzLmIgKj0geTtcbiAgICB0aGlzLnR4ICo9IHg7XG4gICAgdGhpcy50eSAqPSB5O1xuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG5cbi8qKlxuICogQXBwbGllcyBhIHJvdGF0aW9uIHRyYW5zZm9ybWF0aW9uIHRvIHRoZSBtYXRyaXguXG4gKlxuICogQHBhcmFtIHtudW1iZXJ9IGFuZ2xlIC0gVGhlIGFuZ2xlIGluIHJhZGlhbnMuXG4gKiBAcmV0dXJuIHtQSVhJLk1hdHJpeH0gVGhpcyBtYXRyaXguIEdvb2QgZm9yIGNoYWluaW5nIG1ldGhvZCBjYWxscy5cbiAqL1xuTWF0cml4LnByb3RvdHlwZS5yb3RhdGUgPSBmdW5jdGlvbiAoYW5nbGUpXG57XG4gICAgdmFyIGNvcyA9IE1hdGguY29zKCBhbmdsZSApO1xuICAgIHZhciBzaW4gPSBNYXRoLnNpbiggYW5nbGUgKTtcblxuICAgIHZhciBhMSA9IHRoaXMuYTtcbiAgICB2YXIgYzEgPSB0aGlzLmM7XG4gICAgdmFyIHR4MSA9IHRoaXMudHg7XG5cbiAgICB0aGlzLmEgPSBhMSAqIGNvcy10aGlzLmIgKiBzaW47XG4gICAgdGhpcy5iID0gYTEgKiBzaW4rdGhpcy5iICogY29zO1xuICAgIHRoaXMuYyA9IGMxICogY29zLXRoaXMuZCAqIHNpbjtcbiAgICB0aGlzLmQgPSBjMSAqIHNpbit0aGlzLmQgKiBjb3M7XG4gICAgdGhpcy50eCA9IHR4MSAqIGNvcyAtIHRoaXMudHkgKiBzaW47XG4gICAgdGhpcy50eSA9IHR4MSAqIHNpbiArIHRoaXMudHkgKiBjb3M7XG5cbiAgICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogQXBwZW5kcyB0aGUgZ2l2ZW4gTWF0cml4IHRvIHRoaXMgTWF0cml4LlxuICpcbiAqIEBwYXJhbSB7UElYSS5NYXRyaXh9IG1hdHJpeFxuICogQHJldHVybiB7UElYSS5NYXRyaXh9IFRoaXMgbWF0cml4LiBHb29kIGZvciBjaGFpbmluZyBtZXRob2QgY2FsbHMuXG4gKi9cbk1hdHJpeC5wcm90b3R5cGUuYXBwZW5kID0gZnVuY3Rpb24gKG1hdHJpeClcbntcbiAgICB2YXIgYTEgPSB0aGlzLmE7XG4gICAgdmFyIGIxID0gdGhpcy5iO1xuICAgIHZhciBjMSA9IHRoaXMuYztcbiAgICB2YXIgZDEgPSB0aGlzLmQ7XG5cbiAgICB0aGlzLmEgID0gbWF0cml4LmEgKiBhMSArIG1hdHJpeC5iICogYzE7XG4gICAgdGhpcy5iICA9IG1hdHJpeC5hICogYjEgKyBtYXRyaXguYiAqIGQxO1xuICAgIHRoaXMuYyAgPSBtYXRyaXguYyAqIGExICsgbWF0cml4LmQgKiBjMTtcbiAgICB0aGlzLmQgID0gbWF0cml4LmMgKiBiMSArIG1hdHJpeC5kICogZDE7XG5cbiAgICB0aGlzLnR4ID0gbWF0cml4LnR4ICogYTEgKyBtYXRyaXgudHkgKiBjMSArIHRoaXMudHg7XG4gICAgdGhpcy50eSA9IG1hdHJpeC50eCAqIGIxICsgbWF0cml4LnR5ICogZDEgKyB0aGlzLnR5O1xuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIFNldHMgdGhlIG1hdHJpeCBiYXNlZCBvbiBhbGwgdGhlIGF2YWlsYWJsZSBwcm9wZXJ0aWVzXG4gKlxuICogQHBhcmFtIHtudW1iZXJ9IHhcbiAqIEBwYXJhbSB7bnVtYmVyfSB5XG4gKiBAcGFyYW0ge251bWJlcn0gcGl2b3RYXG4gKiBAcGFyYW0ge251bWJlcn0gcGl2b3RZXG4gKiBAcGFyYW0ge251bWJlcn0gc2NhbGVYXG4gKiBAcGFyYW0ge251bWJlcn0gc2NhbGVZXG4gKiBAcGFyYW0ge251bWJlcn0gcm90YXRpb25cbiAqIEBwYXJhbSB7bnVtYmVyfSBza2V3WFxuICogQHBhcmFtIHtudW1iZXJ9IHNrZXdZXG4gKlxuICogQHJldHVybiB7UElYSS5NYXRyaXh9IFRoaXMgbWF0cml4LiBHb29kIGZvciBjaGFpbmluZyBtZXRob2QgY2FsbHMuXG4gKi9cbk1hdHJpeC5wcm90b3R5cGUuc2V0VHJhbnNmb3JtID0gZnVuY3Rpb24gKHgsIHksIHBpdm90WCwgcGl2b3RZLCBzY2FsZVgsIHNjYWxlWSwgcm90YXRpb24sIHNrZXdYLCBza2V3WSlcbntcbiAgICB2YXIgYSwgYiwgYywgZCwgc3IsIGNyLCBjeSwgc3ksIG5zeCwgY3g7XG5cbiAgICBzciAgPSBNYXRoLnNpbihyb3RhdGlvbik7XG4gICAgY3IgID0gTWF0aC5jb3Mocm90YXRpb24pO1xuICAgIGN5ICA9IE1hdGguY29zKHNrZXdZKTtcbiAgICBzeSAgPSBNYXRoLnNpbihza2V3WSk7XG4gICAgbnN4ID0gLU1hdGguc2luKHNrZXdYKTtcbiAgICBjeCAgPSAgTWF0aC5jb3Moc2tld1gpO1xuXG4gICAgYSAgPSAgY3IgKiBzY2FsZVg7XG4gICAgYiAgPSAgc3IgKiBzY2FsZVg7XG4gICAgYyAgPSAtc3IgKiBzY2FsZVk7XG4gICAgZCAgPSAgY3IgKiBzY2FsZVk7XG5cbiAgICB0aGlzLmEgID0gY3kgKiBhICsgc3kgKiBjO1xuICAgIHRoaXMuYiAgPSBjeSAqIGIgKyBzeSAqIGQ7XG4gICAgdGhpcy5jICA9IG5zeCAqIGEgKyBjeCAqIGM7XG4gICAgdGhpcy5kICA9IG5zeCAqIGIgKyBjeCAqIGQ7XG5cbiAgICB0aGlzLnR4ID0geCArICggcGl2b3RYICogYSArIHBpdm90WSAqIGMgKTtcbiAgICB0aGlzLnR5ID0geSArICggcGl2b3RYICogYiArIHBpdm90WSAqIGQgKTtcblxuICAgIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBQcmVwZW5kcyB0aGUgZ2l2ZW4gTWF0cml4IHRvIHRoaXMgTWF0cml4LlxuICpcbiAqIEBwYXJhbSB7UElYSS5NYXRyaXh9IG1hdHJpeFxuICogQHJldHVybiB7UElYSS5NYXRyaXh9IFRoaXMgbWF0cml4LiBHb29kIGZvciBjaGFpbmluZyBtZXRob2QgY2FsbHMuXG4gKi9cbk1hdHJpeC5wcm90b3R5cGUucHJlcGVuZCA9IGZ1bmN0aW9uKG1hdHJpeClcbntcbiAgICB2YXIgdHgxID0gdGhpcy50eDtcblxuICAgIGlmIChtYXRyaXguYSAhPT0gMSB8fCBtYXRyaXguYiAhPT0gMCB8fCBtYXRyaXguYyAhPT0gMCB8fCBtYXRyaXguZCAhPT0gMSlcbiAgICB7XG4gICAgICAgIHZhciBhMSA9IHRoaXMuYTtcbiAgICAgICAgdmFyIGMxID0gdGhpcy5jO1xuICAgICAgICB0aGlzLmEgID0gYTEqbWF0cml4LmErdGhpcy5iKm1hdHJpeC5jO1xuICAgICAgICB0aGlzLmIgID0gYTEqbWF0cml4LmIrdGhpcy5iKm1hdHJpeC5kO1xuICAgICAgICB0aGlzLmMgID0gYzEqbWF0cml4LmErdGhpcy5kKm1hdHJpeC5jO1xuICAgICAgICB0aGlzLmQgID0gYzEqbWF0cml4LmIrdGhpcy5kKm1hdHJpeC5kO1xuICAgIH1cblxuICAgIHRoaXMudHggPSB0eDEqbWF0cml4LmErdGhpcy50eSptYXRyaXguYyttYXRyaXgudHg7XG4gICAgdGhpcy50eSA9IHR4MSptYXRyaXguYit0aGlzLnR5Km1hdHJpeC5kK21hdHJpeC50eTtcblxuICAgIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBJbnZlcnRzIHRoaXMgbWF0cml4XG4gKlxuICogQHJldHVybiB7UElYSS5NYXRyaXh9IFRoaXMgbWF0cml4LiBHb29kIGZvciBjaGFpbmluZyBtZXRob2QgY2FsbHMuXG4gKi9cbk1hdHJpeC5wcm90b3R5cGUuaW52ZXJ0ID0gZnVuY3Rpb24oKVxue1xuICAgIHZhciBhMSA9IHRoaXMuYTtcbiAgICB2YXIgYjEgPSB0aGlzLmI7XG4gICAgdmFyIGMxID0gdGhpcy5jO1xuICAgIHZhciBkMSA9IHRoaXMuZDtcbiAgICB2YXIgdHgxID0gdGhpcy50eDtcbiAgICB2YXIgbiA9IGExKmQxLWIxKmMxO1xuXG4gICAgdGhpcy5hID0gZDEvbjtcbiAgICB0aGlzLmIgPSAtYjEvbjtcbiAgICB0aGlzLmMgPSAtYzEvbjtcbiAgICB0aGlzLmQgPSBhMS9uO1xuICAgIHRoaXMudHggPSAoYzEqdGhpcy50eS1kMSp0eDEpL247XG4gICAgdGhpcy50eSA9IC0oYTEqdGhpcy50eS1iMSp0eDEpL247XG5cbiAgICByZXR1cm4gdGhpcztcbn07XG5cblxuLyoqXG4gKiBSZXNldHMgdGhpcyBNYXRpeCB0byBhbiBpZGVudGl0eSAoZGVmYXVsdCkgbWF0cml4LlxuICpcbiAqIEByZXR1cm4ge1BJWEkuTWF0cml4fSBUaGlzIG1hdHJpeC4gR29vZCBmb3IgY2hhaW5pbmcgbWV0aG9kIGNhbGxzLlxuICovXG5NYXRyaXgucHJvdG90eXBlLmlkZW50aXR5ID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLmEgPSAxO1xuICAgIHRoaXMuYiA9IDA7XG4gICAgdGhpcy5jID0gMDtcbiAgICB0aGlzLmQgPSAxO1xuICAgIHRoaXMudHggPSAwO1xuICAgIHRoaXMudHkgPSAwO1xuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIENyZWF0ZXMgYSBuZXcgTWF0cml4IG9iamVjdCB3aXRoIHRoZSBzYW1lIHZhbHVlcyBhcyB0aGlzIG9uZS5cbiAqXG4gKiBAcmV0dXJuIHtQSVhJLk1hdHJpeH0gQSBjb3B5IG9mIHRoaXMgbWF0cml4LiBHb29kIGZvciBjaGFpbmluZyBtZXRob2QgY2FsbHMuXG4gKi9cbk1hdHJpeC5wcm90b3R5cGUuY2xvbmUgPSBmdW5jdGlvbiAoKVxue1xuICAgIHZhciBtYXRyaXggPSBuZXcgTWF0cml4KCk7XG4gICAgbWF0cml4LmEgPSB0aGlzLmE7XG4gICAgbWF0cml4LmIgPSB0aGlzLmI7XG4gICAgbWF0cml4LmMgPSB0aGlzLmM7XG4gICAgbWF0cml4LmQgPSB0aGlzLmQ7XG4gICAgbWF0cml4LnR4ID0gdGhpcy50eDtcbiAgICBtYXRyaXgudHkgPSB0aGlzLnR5O1xuXG4gICAgcmV0dXJuIG1hdHJpeDtcbn07XG5cbi8qKlxuICogQ2hhbmdlcyB0aGUgdmFsdWVzIG9mIHRoZSBnaXZlbiBtYXRyaXggdG8gYmUgdGhlIHNhbWUgYXMgdGhlIG9uZXMgaW4gdGhpcyBtYXRyaXhcbiAqXG4gKiBAcmV0dXJuIHtQSVhJLk1hdHJpeH0gVGhlIG1hdHJpeCBnaXZlbiBpbiBwYXJhbWV0ZXIgd2l0aCBpdHMgdmFsdWVzIHVwZGF0ZWQuXG4gKi9cbk1hdHJpeC5wcm90b3R5cGUuY29weSA9IGZ1bmN0aW9uIChtYXRyaXgpXG57XG4gICAgbWF0cml4LmEgPSB0aGlzLmE7XG4gICAgbWF0cml4LmIgPSB0aGlzLmI7XG4gICAgbWF0cml4LmMgPSB0aGlzLmM7XG4gICAgbWF0cml4LmQgPSB0aGlzLmQ7XG4gICAgbWF0cml4LnR4ID0gdGhpcy50eDtcbiAgICBtYXRyaXgudHkgPSB0aGlzLnR5O1xuXG4gICAgcmV0dXJuIG1hdHJpeDtcbn07XG5cbi8qKlxuICogQSBkZWZhdWx0IChpZGVudGl0eSkgbWF0cml4XG4gKlxuICogQHN0YXRpY1xuICogQGNvbnN0XG4gKi9cbk1hdHJpeC5JREVOVElUWSA9IG5ldyBNYXRyaXgoKTtcblxuLyoqXG4gKiBBIHRlbXAgbWF0cml4XG4gKlxuICogQHN0YXRpY1xuICogQGNvbnN0XG4gKi9cbk1hdHJpeC5URU1QX01BVFJJWCA9IG5ldyBNYXRyaXgoKTtcbiIsIi8qKlxuICogVGhlIFBvaW50IG9iamVjdCByZXByZXNlbnRzIGEgbG9jYXRpb24gaW4gYSB0d28tZGltZW5zaW9uYWwgY29vcmRpbmF0ZSBzeXN0ZW0sIHdoZXJlIHggcmVwcmVzZW50c1xuICogdGhlIGhvcml6b250YWwgYXhpcyBhbmQgeSByZXByZXNlbnRzIHRoZSB2ZXJ0aWNhbCBheGlzLlxuICpcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqIEBwYXJhbSBbeD0wXSB7bnVtYmVyfSBwb3NpdGlvbiBvZiB0aGUgcG9pbnQgb24gdGhlIHggYXhpc1xuICogQHBhcmFtIFt5PTBdIHtudW1iZXJ9IHBvc2l0aW9uIG9mIHRoZSBwb2ludCBvbiB0aGUgeSBheGlzXG4gKi9cbmZ1bmN0aW9uIFBvaW50KHgsIHkpXG57XG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDBcbiAgICAgKi9cbiAgICB0aGlzLnggPSB4IHx8IDA7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMFxuICAgICAqL1xuICAgIHRoaXMueSA9IHkgfHwgMDtcbn1cblxuUG9pbnQucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gUG9pbnQ7XG5tb2R1bGUuZXhwb3J0cyA9IFBvaW50O1xuXG4vKipcbiAqIENyZWF0ZXMgYSBjbG9uZSBvZiB0aGlzIHBvaW50XG4gKlxuICogQHJldHVybiB7UElYSS5Qb2ludH0gYSBjb3B5IG9mIHRoZSBwb2ludFxuICovXG5Qb2ludC5wcm90b3R5cGUuY2xvbmUgPSBmdW5jdGlvbiAoKVxue1xuICAgIHJldHVybiBuZXcgUG9pbnQodGhpcy54LCB0aGlzLnkpO1xufTtcblxuLyoqXG4gKiBDb3BpZXMgeCBhbmQgeSBmcm9tIHRoZSBnaXZlbiBwb2ludFxuICpcbiAqIEBwYXJhbSBwIHtQSVhJLlBvaW50fVxuICovXG5Qb2ludC5wcm90b3R5cGUuY29weSA9IGZ1bmN0aW9uIChwKSB7XG4gICAgdGhpcy5zZXQocC54LCBwLnkpO1xufTtcblxuLyoqXG4gKiBSZXR1cm5zIHRydWUgaWYgdGhlIGdpdmVuIHBvaW50IGlzIGVxdWFsIHRvIHRoaXMgcG9pbnRcbiAqXG4gKiBAcGFyYW0gcCB7UElYSS5Qb2ludH1cbiAqIEByZXR1cm5zIHtib29sZWFufVxuICovXG5Qb2ludC5wcm90b3R5cGUuZXF1YWxzID0gZnVuY3Rpb24gKHApIHtcbiAgICByZXR1cm4gKHAueCA9PT0gdGhpcy54KSAmJiAocC55ID09PSB0aGlzLnkpO1xufTtcblxuLyoqXG4gKiBTZXRzIHRoZSBwb2ludCB0byBhIG5ldyB4IGFuZCB5IHBvc2l0aW9uLlxuICogSWYgeSBpcyBvbWl0dGVkLCBib3RoIHggYW5kIHkgd2lsbCBiZSBzZXQgdG8geC5cbiAqXG4gKiBAcGFyYW0gW3g9MF0ge251bWJlcn0gcG9zaXRpb24gb2YgdGhlIHBvaW50IG9uIHRoZSB4IGF4aXNcbiAqIEBwYXJhbSBbeT0wXSB7bnVtYmVyfSBwb3NpdGlvbiBvZiB0aGUgcG9pbnQgb24gdGhlIHkgYXhpc1xuICovXG5Qb2ludC5wcm90b3R5cGUuc2V0ID0gZnVuY3Rpb24gKHgsIHkpXG57XG4gICAgdGhpcy54ID0geCB8fCAwO1xuICAgIHRoaXMueSA9IHkgfHwgKCAoeSAhPT0gMCkgPyB0aGlzLnggOiAwICkgO1xufTtcbiIsIi8qKlxuICogTWF0aCBjbGFzc2VzIGFuZCB1dGlsaXRpZXMgbWl4ZWQgaW50byBQSVhJIG5hbWVzcGFjZS5cbiAqXG4gKiBAbGVuZHMgUElYSVxuICovXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgICAvLyBUaGVzZSB3aWxsIGJlIG1peGVkIHRvIGJlIG1hZGUgcHVibGljbHkgYXZhaWxhYmxlLFxuICAgIC8vIHdoaWxlIHRoaXMgbW9kdWxlIGlzIHVzZWQgaW50ZXJuYWxseSBpbiBjb3JlXG4gICAgLy8gdG8gYXZvaWQgY2lyY3VsYXIgZGVwZW5kZW5jaWVzIGFuZCBjdXQgZG93biBvblxuICAgIC8vIGludGVybmFsIG1vZHVsZSByZXF1aXJlcy5cblxuICAgIFBvaW50OiAgICAgIHJlcXVpcmUoJy4vUG9pbnQnKSxcbiAgICBNYXRyaXg6ICAgICByZXF1aXJlKCcuL01hdHJpeCcpLFxuXG4gICAgQ2lyY2xlOiAgICAgcmVxdWlyZSgnLi9zaGFwZXMvQ2lyY2xlJyksXG4gICAgRWxsaXBzZTogICAgcmVxdWlyZSgnLi9zaGFwZXMvRWxsaXBzZScpLFxuICAgIFBvbHlnb246ICAgIHJlcXVpcmUoJy4vc2hhcGVzL1BvbHlnb24nKSxcbiAgICBSZWN0YW5nbGU6ICByZXF1aXJlKCcuL3NoYXBlcy9SZWN0YW5nbGUnKSxcbiAgICBSb3VuZGVkUmVjdGFuZ2xlOiByZXF1aXJlKCcuL3NoYXBlcy9Sb3VuZGVkUmVjdGFuZ2xlJylcbn07XG4iLCJ2YXIgUmVjdGFuZ2xlID0gcmVxdWlyZSgnLi9SZWN0YW5nbGUnKSxcbiAgICBDT05TVCA9IHJlcXVpcmUoJy4uLy4uL2NvbnN0Jyk7XG5cbi8qKlxuICogVGhlIENpcmNsZSBvYmplY3QgY2FuIGJlIHVzZWQgdG8gc3BlY2lmeSBhIGhpdCBhcmVhIGZvciBkaXNwbGF5T2JqZWN0c1xuICpcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqIEBwYXJhbSB4IHtudW1iZXJ9IFRoZSBYIGNvb3JkaW5hdGUgb2YgdGhlIGNlbnRlciBvZiB0aGlzIGNpcmNsZVxuICogQHBhcmFtIHkge251bWJlcn0gVGhlIFkgY29vcmRpbmF0ZSBvZiB0aGUgY2VudGVyIG9mIHRoaXMgY2lyY2xlXG4gKiBAcGFyYW0gcmFkaXVzIHtudW1iZXJ9IFRoZSByYWRpdXMgb2YgdGhlIGNpcmNsZVxuICovXG5mdW5jdGlvbiBDaXJjbGUoeCwgeSwgcmFkaXVzKVxue1xuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAwXG4gICAgICovXG4gICAgdGhpcy54ID0geCB8fCAwO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDBcbiAgICAgKi9cbiAgICB0aGlzLnkgPSB5IHx8IDA7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMFxuICAgICAqL1xuICAgIHRoaXMucmFkaXVzID0gcmFkaXVzIHx8IDA7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgdHlwZSBvZiB0aGUgb2JqZWN0LCBtYWlubHkgdXNlZCB0byBhdm9pZCBgaW5zdGFuY2VvZmAgY2hlY2tzXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy50eXBlID0gQ09OU1QuU0hBUEVTLkNJUkM7XG59XG5cbkNpcmNsZS5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBDaXJjbGU7XG5tb2R1bGUuZXhwb3J0cyA9IENpcmNsZTtcblxuLyoqXG4gKiBDcmVhdGVzIGEgY2xvbmUgb2YgdGhpcyBDaXJjbGUgaW5zdGFuY2VcbiAqXG4gKiBAcmV0dXJuIHtQSVhJLkNpcmNsZX0gYSBjb3B5IG9mIHRoZSBDaXJjbGVcbiAqL1xuQ2lyY2xlLnByb3RvdHlwZS5jbG9uZSA9IGZ1bmN0aW9uICgpXG57XG4gICAgcmV0dXJuIG5ldyBDaXJjbGUodGhpcy54LCB0aGlzLnksIHRoaXMucmFkaXVzKTtcbn07XG5cbi8qKlxuICogQ2hlY2tzIHdoZXRoZXIgdGhlIHggYW5kIHkgY29vcmRpbmF0ZXMgZ2l2ZW4gYXJlIGNvbnRhaW5lZCB3aXRoaW4gdGhpcyBjaXJjbGVcbiAqXG4gKiBAcGFyYW0geCB7bnVtYmVyfSBUaGUgWCBjb29yZGluYXRlIG9mIHRoZSBwb2ludCB0byB0ZXN0XG4gKiBAcGFyYW0geSB7bnVtYmVyfSBUaGUgWSBjb29yZGluYXRlIG9mIHRoZSBwb2ludCB0byB0ZXN0XG4gKiBAcmV0dXJuIHtib29sZWFufSBXaGV0aGVyIHRoZSB4L3kgY29vcmRpbmF0ZXMgYXJlIHdpdGhpbiB0aGlzIENpcmNsZVxuICovXG5DaXJjbGUucHJvdG90eXBlLmNvbnRhaW5zID0gZnVuY3Rpb24gKHgsIHkpXG57XG4gICAgaWYgKHRoaXMucmFkaXVzIDw9IDApXG4gICAge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgdmFyIGR4ID0gKHRoaXMueCAtIHgpLFxuICAgICAgICBkeSA9ICh0aGlzLnkgLSB5KSxcbiAgICAgICAgcjIgPSB0aGlzLnJhZGl1cyAqIHRoaXMucmFkaXVzO1xuXG4gICAgZHggKj0gZHg7XG4gICAgZHkgKj0gZHk7XG5cbiAgICByZXR1cm4gKGR4ICsgZHkgPD0gcjIpO1xufTtcblxuLyoqXG4qIFJldHVybnMgdGhlIGZyYW1pbmcgcmVjdGFuZ2xlIG9mIHRoZSBjaXJjbGUgYXMgYSBSZWN0YW5nbGUgb2JqZWN0XG4qXG4qIEByZXR1cm4ge1BJWEkuUmVjdGFuZ2xlfSB0aGUgZnJhbWluZyByZWN0YW5nbGVcbiovXG5DaXJjbGUucHJvdG90eXBlLmdldEJvdW5kcyA9IGZ1bmN0aW9uICgpXG57XG4gICAgcmV0dXJuIG5ldyBSZWN0YW5nbGUodGhpcy54IC0gdGhpcy5yYWRpdXMsIHRoaXMueSAtIHRoaXMucmFkaXVzLCB0aGlzLnJhZGl1cyAqIDIsIHRoaXMucmFkaXVzICogMik7XG59O1xuIiwidmFyIFJlY3RhbmdsZSA9IHJlcXVpcmUoJy4vUmVjdGFuZ2xlJyksXG4gICAgQ09OU1QgPSByZXF1aXJlKCcuLi8uLi9jb25zdCcpO1xuXG4vKipcbiAqIFRoZSBFbGxpcHNlIG9iamVjdCBjYW4gYmUgdXNlZCB0byBzcGVjaWZ5IGEgaGl0IGFyZWEgZm9yIGRpc3BsYXlPYmplY3RzXG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIHgge251bWJlcn0gVGhlIFggY29vcmRpbmF0ZSBvZiB0aGUgY2VudGVyIG9mIHRoZSBlbGxpcHNlXG4gKiBAcGFyYW0geSB7bnVtYmVyfSBUaGUgWSBjb29yZGluYXRlIG9mIHRoZSBjZW50ZXIgb2YgdGhlIGVsbGlwc2VcbiAqIEBwYXJhbSB3aWR0aCB7bnVtYmVyfSBUaGUgaGFsZiB3aWR0aCBvZiB0aGlzIGVsbGlwc2VcbiAqIEBwYXJhbSBoZWlnaHQge251bWJlcn0gVGhlIGhhbGYgaGVpZ2h0IG9mIHRoaXMgZWxsaXBzZVxuICovXG5mdW5jdGlvbiBFbGxpcHNlKHgsIHksIHdpZHRoLCBoZWlnaHQpXG57XG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDBcbiAgICAgKi9cbiAgICB0aGlzLnggPSB4IHx8IDA7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMFxuICAgICAqL1xuICAgIHRoaXMueSA9IHkgfHwgMDtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAwXG4gICAgICovXG4gICAgdGhpcy53aWR0aCA9IHdpZHRoIHx8IDA7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMFxuICAgICAqL1xuICAgIHRoaXMuaGVpZ2h0ID0gaGVpZ2h0IHx8IDA7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgdHlwZSBvZiB0aGUgb2JqZWN0LCBtYWlubHkgdXNlZCB0byBhdm9pZCBgaW5zdGFuY2VvZmAgY2hlY2tzXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy50eXBlID0gQ09OU1QuU0hBUEVTLkVMSVA7XG59XG5cbkVsbGlwc2UucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gRWxsaXBzZTtcbm1vZHVsZS5leHBvcnRzID0gRWxsaXBzZTtcblxuLyoqXG4gKiBDcmVhdGVzIGEgY2xvbmUgb2YgdGhpcyBFbGxpcHNlIGluc3RhbmNlXG4gKlxuICogQHJldHVybiB7UElYSS5FbGxpcHNlfSBhIGNvcHkgb2YgdGhlIGVsbGlwc2VcbiAqL1xuRWxsaXBzZS5wcm90b3R5cGUuY2xvbmUgPSBmdW5jdGlvbiAoKVxue1xuICAgIHJldHVybiBuZXcgRWxsaXBzZSh0aGlzLngsIHRoaXMueSwgdGhpcy53aWR0aCwgdGhpcy5oZWlnaHQpO1xufTtcblxuLyoqXG4gKiBDaGVja3Mgd2hldGhlciB0aGUgeCBhbmQgeSBjb29yZGluYXRlcyBnaXZlbiBhcmUgY29udGFpbmVkIHdpdGhpbiB0aGlzIGVsbGlwc2VcbiAqXG4gKiBAcGFyYW0geCB7bnVtYmVyfSBUaGUgWCBjb29yZGluYXRlIG9mIHRoZSBwb2ludCB0byB0ZXN0XG4gKiBAcGFyYW0geSB7bnVtYmVyfSBUaGUgWSBjb29yZGluYXRlIG9mIHRoZSBwb2ludCB0byB0ZXN0XG4gKiBAcmV0dXJuIHtib29sZWFufSBXaGV0aGVyIHRoZSB4L3kgY29vcmRzIGFyZSB3aXRoaW4gdGhpcyBlbGxpcHNlXG4gKi9cbkVsbGlwc2UucHJvdG90eXBlLmNvbnRhaW5zID0gZnVuY3Rpb24gKHgsIHkpXG57XG4gICAgaWYgKHRoaXMud2lkdGggPD0gMCB8fCB0aGlzLmhlaWdodCA8PSAwKVxuICAgIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIC8vbm9ybWFsaXplIHRoZSBjb29yZHMgdG8gYW4gZWxsaXBzZSB3aXRoIGNlbnRlciAwLDBcbiAgICB2YXIgbm9ybXggPSAoKHggLSB0aGlzLngpIC8gdGhpcy53aWR0aCksXG4gICAgICAgIG5vcm15ID0gKCh5IC0gdGhpcy55KSAvIHRoaXMuaGVpZ2h0KTtcblxuICAgIG5vcm14ICo9IG5vcm14O1xuICAgIG5vcm15ICo9IG5vcm15O1xuXG4gICAgcmV0dXJuIChub3JteCArIG5vcm15IDw9IDEpO1xufTtcblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBmcmFtaW5nIHJlY3RhbmdsZSBvZiB0aGUgZWxsaXBzZSBhcyBhIFJlY3RhbmdsZSBvYmplY3RcbiAqXG4gKiBAcmV0dXJuIHtQSVhJLlJlY3RhbmdsZX0gdGhlIGZyYW1pbmcgcmVjdGFuZ2xlXG4gKi9cbkVsbGlwc2UucHJvdG90eXBlLmdldEJvdW5kcyA9IGZ1bmN0aW9uICgpXG57XG4gICAgcmV0dXJuIG5ldyBSZWN0YW5nbGUodGhpcy54IC0gdGhpcy53aWR0aCwgdGhpcy55IC0gdGhpcy5oZWlnaHQsIHRoaXMud2lkdGgsIHRoaXMuaGVpZ2h0KTtcbn07XG4iLCJ2YXIgUG9pbnQgPSByZXF1aXJlKCcuLi9Qb2ludCcpLFxuICAgIENPTlNUID0gcmVxdWlyZSgnLi4vLi4vY29uc3QnKTtcblxuLyoqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gcG9pbnRzIHtQSVhJLlBvaW50W118bnVtYmVyW118Li4uUElYSS5Qb2ludHwuLi5udW1iZXJ9IFRoaXMgY2FuIGJlIGFuIGFycmF5IG9mIFBvaW50cyB0aGF0IGZvcm0gdGhlIHBvbHlnb24sXG4gKiAgICAgIGEgZmxhdCBhcnJheSBvZiBudW1iZXJzIHRoYXQgd2lsbCBiZSBpbnRlcnByZXRlZCBhcyBbeCx5LCB4LHksIC4uLl0sIG9yIHRoZSBhcmd1bWVudHMgcGFzc2VkIGNhbiBiZVxuICogICAgICBhbGwgdGhlIHBvaW50cyBvZiB0aGUgcG9seWdvbiBlLmcuIGBuZXcgUElYSS5Qb2x5Z29uKG5ldyBQSVhJLlBvaW50KCksIG5ldyBQSVhJLlBvaW50KCksIC4uLilgLCBvciB0aGVcbiAqICAgICAgYXJndW1lbnRzIHBhc3NlZCBjYW4gYmUgZmxhdCB4LHkgdmFsdWVzIGUuZy4gYG5ldyBQb2x5Z29uKHgseSwgeCx5LCB4LHksIC4uLilgIHdoZXJlIGB4YCBhbmQgYHlgIGFyZVxuICogICAgICBOdW1iZXJzLlxuICovXG5mdW5jdGlvbiBQb2x5Z29uKHBvaW50c18pXG57XG4gICAgLy8gcHJldmVudHMgYW4gYXJndW1lbnQgYXNzaWdubWVudCBkZW9wdFxuICAgIC8vIHNlZSBzZWN0aW9uIDMuMTogaHR0cHM6Ly9naXRodWIuY29tL3BldGthYW50b25vdi9ibHVlYmlyZC93aWtpL09wdGltaXphdGlvbi1raWxsZXJzIzMtbWFuYWdpbmctYXJndW1lbnRzXG4gICAgdmFyIHBvaW50cyA9IHBvaW50c187XG5cbiAgICAvL2lmIHBvaW50cyBpc24ndCBhbiBhcnJheSwgdXNlIGFyZ3VtZW50cyBhcyB0aGUgYXJyYXlcbiAgICBpZiAoIUFycmF5LmlzQXJyYXkocG9pbnRzKSlcbiAgICB7XG4gICAgICAgIC8vIHByZXZlbnRzIGFuIGFyZ3VtZW50IGxlYWsgZGVvcHRcbiAgICAgICAgLy8gc2VlIHNlY3Rpb24gMy4yOiBodHRwczovL2dpdGh1Yi5jb20vcGV0a2FhbnRvbm92L2JsdWViaXJkL3dpa2kvT3B0aW1pemF0aW9uLWtpbGxlcnMjMy1tYW5hZ2luZy1hcmd1bWVudHNcbiAgICAgICAgcG9pbnRzID0gbmV3IEFycmF5KGFyZ3VtZW50cy5sZW5ndGgpO1xuXG4gICAgICAgIGZvciAodmFyIGEgPSAwOyBhIDwgcG9pbnRzLmxlbmd0aDsgKythKSB7XG4gICAgICAgICAgICBwb2ludHNbYV0gPSBhcmd1bWVudHNbYV07XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBpZiB0aGlzIGlzIGFuIGFycmF5IG9mIHBvaW50cywgY29udmVydCBpdCB0byBhIGZsYXQgYXJyYXkgb2YgbnVtYmVyc1xuICAgIGlmIChwb2ludHNbMF0gaW5zdGFuY2VvZiBQb2ludClcbiAgICB7XG4gICAgICAgIHZhciBwID0gW107XG4gICAgICAgIGZvciAodmFyIGkgPSAwLCBpbCA9IHBvaW50cy5sZW5ndGg7IGkgPCBpbDsgaSsrKVxuICAgICAgICB7XG4gICAgICAgICAgICBwLnB1c2gocG9pbnRzW2ldLngsIHBvaW50c1tpXS55KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHBvaW50cyA9IHA7XG4gICAgfVxuXG4gICAgdGhpcy5jbG9zZWQgPSB0cnVlO1xuXG4gICAgLyoqXG4gICAgICogQW4gYXJyYXkgb2YgdGhlIHBvaW50cyBvZiB0aGlzIHBvbHlnb25cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcltdfVxuICAgICAqL1xuICAgIHRoaXMucG9pbnRzID0gcG9pbnRzO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHR5cGUgb2YgdGhlIG9iamVjdCwgbWFpbmx5IHVzZWQgdG8gYXZvaWQgYGluc3RhbmNlb2ZgIGNoZWNrc1xuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMudHlwZSA9IENPTlNULlNIQVBFUy5QT0xZO1xufVxuXG5Qb2x5Z29uLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFBvbHlnb247XG5tb2R1bGUuZXhwb3J0cyA9IFBvbHlnb247XG5cbi8qKlxuICogQ3JlYXRlcyBhIGNsb25lIG9mIHRoaXMgcG9seWdvblxuICpcbiAqIEByZXR1cm4ge1BJWEkuUG9seWdvbn0gYSBjb3B5IG9mIHRoZSBwb2x5Z29uXG4gKi9cblBvbHlnb24ucHJvdG90eXBlLmNsb25lID0gZnVuY3Rpb24gKClcbntcbiAgICByZXR1cm4gbmV3IFBvbHlnb24odGhpcy5wb2ludHMuc2xpY2UoKSk7XG59O1xuXG4vKipcbiAqIENoZWNrcyB3aGV0aGVyIHRoZSB4IGFuZCB5IGNvb3JkaW5hdGVzIHBhc3NlZCB0byB0aGlzIGZ1bmN0aW9uIGFyZSBjb250YWluZWQgd2l0aGluIHRoaXMgcG9seWdvblxuICpcbiAqIEBwYXJhbSB4IHtudW1iZXJ9IFRoZSBYIGNvb3JkaW5hdGUgb2YgdGhlIHBvaW50IHRvIHRlc3RcbiAqIEBwYXJhbSB5IHtudW1iZXJ9IFRoZSBZIGNvb3JkaW5hdGUgb2YgdGhlIHBvaW50IHRvIHRlc3RcbiAqIEByZXR1cm4ge2Jvb2xlYW59IFdoZXRoZXIgdGhlIHgveSBjb29yZGluYXRlcyBhcmUgd2l0aGluIHRoaXMgcG9seWdvblxuICovXG5Qb2x5Z29uLnByb3RvdHlwZS5jb250YWlucyA9IGZ1bmN0aW9uICh4LCB5KVxue1xuICAgIHZhciBpbnNpZGUgPSBmYWxzZTtcblxuICAgIC8vIHVzZSBzb21lIHJheWNhc3RpbmcgdG8gdGVzdCBoaXRzXG4gICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL3N1YnN0YWNrL3BvaW50LWluLXBvbHlnb24vYmxvYi9tYXN0ZXIvaW5kZXguanNcbiAgICB2YXIgbGVuZ3RoID0gdGhpcy5wb2ludHMubGVuZ3RoIC8gMjtcblxuICAgIGZvciAodmFyIGkgPSAwLCBqID0gbGVuZ3RoIC0gMTsgaSA8IGxlbmd0aDsgaiA9IGkrKylcbiAgICB7XG4gICAgICAgIHZhciB4aSA9IHRoaXMucG9pbnRzW2kgKiAyXSwgeWkgPSB0aGlzLnBvaW50c1tpICogMiArIDFdLFxuICAgICAgICAgICAgeGogPSB0aGlzLnBvaW50c1tqICogMl0sIHlqID0gdGhpcy5wb2ludHNbaiAqIDIgKyAxXSxcbiAgICAgICAgICAgIGludGVyc2VjdCA9ICgoeWkgPiB5KSAhPT0gKHlqID4geSkpICYmICh4IDwgKHhqIC0geGkpICogKHkgLSB5aSkgLyAoeWogLSB5aSkgKyB4aSk7XG5cbiAgICAgICAgaWYgKGludGVyc2VjdClcbiAgICAgICAge1xuICAgICAgICAgICAgaW5zaWRlID0gIWluc2lkZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBpbnNpZGU7XG59O1xuIiwidmFyIENPTlNUID0gcmVxdWlyZSgnLi4vLi4vY29uc3QnKTtcblxuLyoqXG4gKiB0aGUgUmVjdGFuZ2xlIG9iamVjdCBpcyBhbiBhcmVhIGRlZmluZWQgYnkgaXRzIHBvc2l0aW9uLCBhcyBpbmRpY2F0ZWQgYnkgaXRzIHRvcC1sZWZ0IGNvcm5lciBwb2ludCAoeCwgeSkgYW5kIGJ5IGl0cyB3aWR0aCBhbmQgaXRzIGhlaWdodC5cbiAqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0geCB7bnVtYmVyfSBUaGUgWCBjb29yZGluYXRlIG9mIHRoZSB1cHBlci1sZWZ0IGNvcm5lciBvZiB0aGUgcmVjdGFuZ2xlXG4gKiBAcGFyYW0geSB7bnVtYmVyfSBUaGUgWSBjb29yZGluYXRlIG9mIHRoZSB1cHBlci1sZWZ0IGNvcm5lciBvZiB0aGUgcmVjdGFuZ2xlXG4gKiBAcGFyYW0gd2lkdGgge251bWJlcn0gVGhlIG92ZXJhbGwgd2lkdGggb2YgdGhpcyByZWN0YW5nbGVcbiAqIEBwYXJhbSBoZWlnaHQge251bWJlcn0gVGhlIG92ZXJhbGwgaGVpZ2h0IG9mIHRoaXMgcmVjdGFuZ2xlXG4gKi9cbmZ1bmN0aW9uIFJlY3RhbmdsZSh4LCB5LCB3aWR0aCwgaGVpZ2h0KVxue1xuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAwXG4gICAgICovXG4gICAgdGhpcy54ID0geCB8fCAwO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDBcbiAgICAgKi9cbiAgICB0aGlzLnkgPSB5IHx8IDA7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMFxuICAgICAqL1xuICAgIHRoaXMud2lkdGggPSB3aWR0aCB8fCAwO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDBcbiAgICAgKi9cbiAgICB0aGlzLmhlaWdodCA9IGhlaWdodCB8fCAwO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHR5cGUgb2YgdGhlIG9iamVjdCwgbWFpbmx5IHVzZWQgdG8gYXZvaWQgYGluc3RhbmNlb2ZgIGNoZWNrc1xuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMudHlwZSA9IENPTlNULlNIQVBFUy5SRUNUO1xufVxuXG5SZWN0YW5nbGUucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gUmVjdGFuZ2xlO1xubW9kdWxlLmV4cG9ydHMgPSBSZWN0YW5nbGU7XG5cbi8qKlxuICogQSBjb25zdGFudCBlbXB0eSByZWN0YW5nbGUuXG4gKlxuICogQHN0YXRpY1xuICogQGNvbnN0YW50XG4gKi9cblJlY3RhbmdsZS5FTVBUWSA9IG5ldyBSZWN0YW5nbGUoMCwgMCwgMCwgMCk7XG5cblxuLyoqXG4gKiBDcmVhdGVzIGEgY2xvbmUgb2YgdGhpcyBSZWN0YW5nbGVcbiAqXG4gKiBAcmV0dXJuIHtQSVhJLlJlY3RhbmdsZX0gYSBjb3B5IG9mIHRoZSByZWN0YW5nbGVcbiAqL1xuUmVjdGFuZ2xlLnByb3RvdHlwZS5jbG9uZSA9IGZ1bmN0aW9uICgpXG57XG4gICAgcmV0dXJuIG5ldyBSZWN0YW5nbGUodGhpcy54LCB0aGlzLnksIHRoaXMud2lkdGgsIHRoaXMuaGVpZ2h0KTtcbn07XG5cbi8qKlxuICogQ2hlY2tzIHdoZXRoZXIgdGhlIHggYW5kIHkgY29vcmRpbmF0ZXMgZ2l2ZW4gYXJlIGNvbnRhaW5lZCB3aXRoaW4gdGhpcyBSZWN0YW5nbGVcbiAqXG4gKiBAcGFyYW0geCB7bnVtYmVyfSBUaGUgWCBjb29yZGluYXRlIG9mIHRoZSBwb2ludCB0byB0ZXN0XG4gKiBAcGFyYW0geSB7bnVtYmVyfSBUaGUgWSBjb29yZGluYXRlIG9mIHRoZSBwb2ludCB0byB0ZXN0XG4gKiBAcmV0dXJuIHtib29sZWFufSBXaGV0aGVyIHRoZSB4L3kgY29vcmRpbmF0ZXMgYXJlIHdpdGhpbiB0aGlzIFJlY3RhbmdsZVxuICovXG5SZWN0YW5nbGUucHJvdG90eXBlLmNvbnRhaW5zID0gZnVuY3Rpb24gKHgsIHkpXG57XG4gICAgaWYgKHRoaXMud2lkdGggPD0gMCB8fCB0aGlzLmhlaWdodCA8PSAwKVxuICAgIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGlmICh4ID49IHRoaXMueCAmJiB4IDwgdGhpcy54ICsgdGhpcy53aWR0aClcbiAgICB7XG4gICAgICAgIGlmICh5ID49IHRoaXMueSAmJiB5IDwgdGhpcy55ICsgdGhpcy5oZWlnaHQpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xufTtcbiIsInZhciBDT05TVCA9IHJlcXVpcmUoJy4uLy4uL2NvbnN0Jyk7XG5cbi8qKlxuICogVGhlIFJvdW5kZWQgUmVjdGFuZ2xlIG9iamVjdCBpcyBhbiBhcmVhIHRoYXQgaGFzIG5pY2Ugcm91bmRlZCBjb3JuZXJzLCBhcyBpbmRpY2F0ZWQgYnkgaXRzIHRvcC1sZWZ0IGNvcm5lciBwb2ludCAoeCwgeSkgYW5kIGJ5IGl0cyB3aWR0aCBhbmQgaXRzIGhlaWdodCBhbmQgaXRzIHJhZGl1cy5cbiAqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0geCB7bnVtYmVyfSBUaGUgWCBjb29yZGluYXRlIG9mIHRoZSB1cHBlci1sZWZ0IGNvcm5lciBvZiB0aGUgcm91bmRlZCByZWN0YW5nbGVcbiAqIEBwYXJhbSB5IHtudW1iZXJ9IFRoZSBZIGNvb3JkaW5hdGUgb2YgdGhlIHVwcGVyLWxlZnQgY29ybmVyIG9mIHRoZSByb3VuZGVkIHJlY3RhbmdsZVxuICogQHBhcmFtIHdpZHRoIHtudW1iZXJ9IFRoZSBvdmVyYWxsIHdpZHRoIG9mIHRoaXMgcm91bmRlZCByZWN0YW5nbGVcbiAqIEBwYXJhbSBoZWlnaHQge251bWJlcn0gVGhlIG92ZXJhbGwgaGVpZ2h0IG9mIHRoaXMgcm91bmRlZCByZWN0YW5nbGVcbiAqIEBwYXJhbSByYWRpdXMge251bWJlcn0gQ29udHJvbHMgdGhlIHJhZGl1cyBvZiB0aGUgcm91bmRlZCBjb3JuZXJzXG4gKi9cbmZ1bmN0aW9uIFJvdW5kZWRSZWN0YW5nbGUoeCwgeSwgd2lkdGgsIGhlaWdodCwgcmFkaXVzKVxue1xuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAwXG4gICAgICovXG4gICAgdGhpcy54ID0geCB8fCAwO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDBcbiAgICAgKi9cbiAgICB0aGlzLnkgPSB5IHx8IDA7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMFxuICAgICAqL1xuICAgIHRoaXMud2lkdGggPSB3aWR0aCB8fCAwO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDBcbiAgICAgKi9cbiAgICB0aGlzLmhlaWdodCA9IGhlaWdodCB8fCAwO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDIwXG4gICAgICovXG4gICAgdGhpcy5yYWRpdXMgPSByYWRpdXMgfHwgMjA7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgdHlwZSBvZiB0aGUgb2JqZWN0LCBtYWlubHkgdXNlZCB0byBhdm9pZCBgaW5zdGFuY2VvZmAgY2hlY2tzXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy50eXBlID0gQ09OU1QuU0hBUEVTLlJSRUM7XG59XG5cblJvdW5kZWRSZWN0YW5nbGUucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gUm91bmRlZFJlY3RhbmdsZTtcbm1vZHVsZS5leHBvcnRzID0gUm91bmRlZFJlY3RhbmdsZTtcblxuLyoqXG4gKiBDcmVhdGVzIGEgY2xvbmUgb2YgdGhpcyBSb3VuZGVkIFJlY3RhbmdsZVxuICpcbiAqIEByZXR1cm4ge1BJWEkuUm91bmRlZFJlY3RhbmdsZX0gYSBjb3B5IG9mIHRoZSByb3VuZGVkIHJlY3RhbmdsZVxuICovXG5Sb3VuZGVkUmVjdGFuZ2xlLnByb3RvdHlwZS5jbG9uZSA9IGZ1bmN0aW9uICgpXG57XG4gICAgcmV0dXJuIG5ldyBSb3VuZGVkUmVjdGFuZ2xlKHRoaXMueCwgdGhpcy55LCB0aGlzLndpZHRoLCB0aGlzLmhlaWdodCwgdGhpcy5yYWRpdXMpO1xufTtcblxuLyoqXG4gKiBDaGVja3Mgd2hldGhlciB0aGUgeCBhbmQgeSBjb29yZGluYXRlcyBnaXZlbiBhcmUgY29udGFpbmVkIHdpdGhpbiB0aGlzIFJvdW5kZWQgUmVjdGFuZ2xlXG4gKlxuICogQHBhcmFtIHgge251bWJlcn0gVGhlIFggY29vcmRpbmF0ZSBvZiB0aGUgcG9pbnQgdG8gdGVzdFxuICogQHBhcmFtIHkge251bWJlcn0gVGhlIFkgY29vcmRpbmF0ZSBvZiB0aGUgcG9pbnQgdG8gdGVzdFxuICogQHJldHVybiB7Ym9vbGVhbn0gV2hldGhlciB0aGUgeC95IGNvb3JkaW5hdGVzIGFyZSB3aXRoaW4gdGhpcyBSb3VuZGVkIFJlY3RhbmdsZVxuICovXG5Sb3VuZGVkUmVjdGFuZ2xlLnByb3RvdHlwZS5jb250YWlucyA9IGZ1bmN0aW9uICh4LCB5KVxue1xuICAgIGlmICh0aGlzLndpZHRoIDw9IDAgfHwgdGhpcy5oZWlnaHQgPD0gMClcbiAgICB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBpZiAoeCA+PSB0aGlzLnggJiYgeCA8PSB0aGlzLnggKyB0aGlzLndpZHRoKVxuICAgIHtcbiAgICAgICAgaWYgKHkgPj0gdGhpcy55ICYmIHkgPD0gdGhpcy55ICsgdGhpcy5oZWlnaHQpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xufTtcbiIsInZhciBDb250YWluZXIgPSByZXF1aXJlKCcuLi9kaXNwbGF5L0NvbnRhaW5lcicpLFxuICAgIENPTlNUID0gcmVxdWlyZSgnLi4vY29uc3QnKTtcblxuLyoqXG4gKiBUaGUgUGFydGljbGVDb250YWluZXIgY2xhc3MgaXMgYSByZWFsbHkgZmFzdCB2ZXJzaW9uIG9mIHRoZSBDb250YWluZXIgYnVpbHQgc29sZWx5IGZvciBzcGVlZCxcbiAqIHNvIHVzZSB3aGVuIHlvdSBuZWVkIGEgbG90IG9mIHNwcml0ZXMgb3IgcGFydGljbGVzLiBUaGUgdHJhZGVvZmYgb2YgdGhlIFBhcnRpY2xlQ29udGFpbmVyIGlzIHRoYXQgYWR2YW5jZWRcbiAqIGZ1bmN0aW9uYWxpdHkgd2lsbCBub3Qgd29yay4gUGFydGljbGVDb250YWluZXIgaW1wbGVtZW50cyBvbmx5IHRoZSBiYXNpYyBvYmplY3QgdHJhbnNmb3JtIChwb3NpdGlvbiwgc2NhbGUsIHJvdGF0aW9uKS5cbiAqIEFueSBvdGhlciBmdW5jdGlvbmFsaXR5IGxpa2UgdGludGluZywgbWFza2luZywgZXRjIHdpbGwgbm90IHdvcmsgb24gc3ByaXRlcyBpbiB0aGlzIGJhdGNoLlxuICpcbiAqIEl0J3MgZXh0cmVtZWx5IGVhc3kgdG8gdXNlIDpcbiAqXG4gKiBgYGBqc1xuICogdmFyIGNvbnRhaW5lciA9IG5ldyBQYXJ0aWNsZUNvbnRhaW5lcigpO1xuICpcbiAqIGZvciAodmFyIGkgPSAwOyBpIDwgMTAwOyArK2kpXG4gKiB7XG4gKiAgICAgdmFyIHNwcml0ZSA9IG5ldyBQSVhJLlNwcml0ZS5mcm9tSW1hZ2UoXCJteUltYWdlLnBuZ1wiKTtcbiAqICAgICBjb250YWluZXIuYWRkQ2hpbGQoc3ByaXRlKTtcbiAqIH1cbiAqIGBgYFxuICpcbiAqIEFuZCBoZXJlIHlvdSBoYXZlIGEgaHVuZHJlZCBzcHJpdGVzIHRoYXQgd2lsbCBiZSByZW5kZXJlciBhdCB0aGUgc3BlZWQgb2YgbGlnaHQuXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLkNvbnRhaW5lclxuICogQG1lbWJlcm9mIFBJWElcbiAqIEBwYXJhbSBbbWF4U2l6ZT0xNTAwMF0ge251bWJlcn0gVGhlIG1heGltdW0gbnVtYmVyIG9mIHBhcnRpY2xlcyB0aGF0IGNhbiBiZSByZW5kZXJlciBieSB0aGUgY29udGFpbmVyLlxuICogQHBhcmFtIFtwcm9wZXJ0aWVzXSB7b2JqZWN0fSBUaGUgcHJvcGVydGllcyBvZiBjaGlsZHJlbiB0aGF0IHNob3VsZCBiZSB1cGxvYWRlZCB0byB0aGUgZ3B1IGFuZCBhcHBsaWVkLlxuICogQHBhcmFtIFtwcm9wZXJ0aWVzLnNjYWxlPWZhbHNlXSB7Ym9vbGVhbn0gV2hlbiB0cnVlLCBzY2FsZSBiZSB1cGxvYWRlZCBhbmQgYXBwbGllZC5cbiAqIEBwYXJhbSBbcHJvcGVydGllcy5wb3NpdGlvbj10cnVlXSB7Ym9vbGVhbn0gV2hlbiB0cnVlLCBwb3NpdGlvbiBiZSB1cGxvYWRlZCBhbmQgYXBwbGllZC5cbiAqIEBwYXJhbSBbcHJvcGVydGllcy5yb3RhdGlvbj1mYWxzZV0ge2Jvb2xlYW59IFdoZW4gdHJ1ZSwgcm90YXRpb24gYmUgdXBsb2FkZWQgYW5kIGFwcGxpZWQuXG4gKiBAcGFyYW0gW3Byb3BlcnRpZXMudXZzPWZhbHNlXSB7Ym9vbGVhbn0gV2hlbiB0cnVlLCB1dnMgYmUgdXBsb2FkZWQgYW5kIGFwcGxpZWQuXG4gKiBAcGFyYW0gW3Byb3BlcnRpZXMuYWxwaGE9ZmFsc2VdIHtib29sZWFufSBXaGVuIHRydWUsIGFscGhhIGJlIHVwbG9hZGVkIGFuZCBhcHBsaWVkLlxuICogQHBhcmFtIFtiYXRjaFNpemU9MTUwMDBdIHtudW1iZXJ9IE51bWJlciBvZiBwYXJ0aWNsZXMgcGVyIGJhdGNoLlxuICovXG5mdW5jdGlvbiBQYXJ0aWNsZUNvbnRhaW5lcihtYXhTaXplLCBwcm9wZXJ0aWVzLCBiYXRjaFNpemUpXG57XG4gICAgQ29udGFpbmVyLmNhbGwodGhpcyk7XG5cbiAgICBiYXRjaFNpemUgPSBiYXRjaFNpemUgfHwgMTUwMDA7IC8vQ09OU1QuU1BSSVRFX0JBVENIX1NJWkU7IC8vIDIwMDAgaXMgYSBuaWNlIGJhbGFuY2UgYmV0d2VlbiBtb2JpbGUgLyBkZXNrdG9wXG4gICAgbWF4U2l6ZSA9IG1heFNpemUgfHwgMTUwMDA7XG5cbiAgICAvLyBNYWtpbmcgc3VyZSB0aGUgYmF0Y2ggc2l6ZSBpcyB2YWxpZFxuICAgIC8vIDY1NTM1IGlzIG1heCB2ZXJ0ZXggaW5kZXggaW4gdGhlIGluZGV4IGJ1ZmZlciAoc2VlIFBhcnRpY2xlUmVuZGVyZXIpXG4gICAgLy8gc28gbWF4IG51bWJlciBvZiBwYXJ0aWNsZXMgaXMgNjU1MzYgLyA0ID0gMTYzODRcbiAgICB2YXIgbWF4QmF0Y2hTaXplID0gMTYzODQ7XG4gICAgaWYgKGJhdGNoU2l6ZSA+IG1heEJhdGNoU2l6ZSkge1xuICAgICAgICBiYXRjaFNpemUgPSBtYXhCYXRjaFNpemU7XG4gICAgfVxuXG4gICAgaWYgKGJhdGNoU2l6ZSA+IG1heFNpemUpIHtcbiAgICAgICAgYmF0Y2hTaXplID0gbWF4U2l6ZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTZXQgcHJvcGVydGllcyB0byBiZSBkeW5hbWljICh0cnVlKSAvIHN0YXRpYyAoZmFsc2UpXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFuW119XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9wcm9wZXJ0aWVzID0gW2ZhbHNlLCB0cnVlLCBmYWxzZSwgZmFsc2UsIGZhbHNlXTtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX21heFNpemUgPSBtYXhTaXplO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fYmF0Y2hTaXplID0gYmF0Y2hTaXplO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7V2ViR0xCdWZmZXJ9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9idWZmZXJzID0gbnVsbDtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX2J1ZmZlclRvVXBkYXRlID0gMDtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICpcbiAgICAgKi9cbiAgICB0aGlzLmludGVyYWN0aXZlQ2hpbGRyZW4gPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBibGVuZCBtb2RlIHRvIGJlIGFwcGxpZWQgdG8gdGhlIHNwcml0ZS4gQXBwbHkgYSB2YWx1ZSBvZiBgUElYSS5CTEVORF9NT0RFUy5OT1JNQUxgIHRvIHJlc2V0IHRoZSBibGVuZCBtb2RlLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IFBJWEkuQkxFTkRfTU9ERVMuTk9STUFMXG4gICAgICogQHNlZSBQSVhJLkJMRU5EX01PREVTXG4gICAgICovXG4gICAgdGhpcy5ibGVuZE1vZGUgPSBDT05TVC5CTEVORF9NT0RFUy5OT1JNQUw7XG5cbiAgICAvKipcbiAgICAgKiBVc2VkIGZvciBjYW52YXMgcmVuZGVyZXJpbmcuIElmIHRydWUgdGhlbiB0aGUgZWxlbWVudHMgd2lsbCBiZSBwb3NpdGlvbmVkIGF0IHRoZSBuZWFyZXN0IHBpeGVsLiBUaGlzIHByb3ZpZGVzIGEgbmljZSBzcGVlZCBib29zdC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICogQGRlZmF1bHQgdHJ1ZTtcbiAgICAgKi9cbiAgICB0aGlzLnJvdW5kUGl4ZWxzID0gdHJ1ZTtcblxuICAgIHRoaXMuc2V0UHJvcGVydGllcyhwcm9wZXJ0aWVzKTtcbn1cblxuUGFydGljbGVDb250YWluZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShDb250YWluZXIucHJvdG90eXBlKTtcblBhcnRpY2xlQ29udGFpbmVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFBhcnRpY2xlQ29udGFpbmVyO1xubW9kdWxlLmV4cG9ydHMgPSBQYXJ0aWNsZUNvbnRhaW5lcjtcblxuLyoqXG4gKiBTZXRzIHRoZSBwcml2YXRlIHByb3BlcnRpZXMgYXJyYXkgdG8gZHluYW1pYyAvIHN0YXRpYyBiYXNlZCBvbiB0aGUgcGFzc2VkIHByb3BlcnRpZXMgb2JqZWN0XG4gKlxuICogQHBhcmFtIHByb3BlcnRpZXMge29iamVjdH0gVGhlIHByb3BlcnRpZXMgdG8gYmUgdXBsb2FkZWRcbiAqL1xuUGFydGljbGVDb250YWluZXIucHJvdG90eXBlLnNldFByb3BlcnRpZXMgPSBmdW5jdGlvbihwcm9wZXJ0aWVzKVxue1xuICAgIGlmICggcHJvcGVydGllcyApIHtcbiAgICAgICAgdGhpcy5fcHJvcGVydGllc1swXSA9ICdzY2FsZScgaW4gcHJvcGVydGllcyA/ICEhcHJvcGVydGllcy5zY2FsZSA6IHRoaXMuX3Byb3BlcnRpZXNbMF07XG4gICAgICAgIHRoaXMuX3Byb3BlcnRpZXNbMV0gPSAncG9zaXRpb24nIGluIHByb3BlcnRpZXMgPyAhIXByb3BlcnRpZXMucG9zaXRpb24gOiB0aGlzLl9wcm9wZXJ0aWVzWzFdO1xuICAgICAgICB0aGlzLl9wcm9wZXJ0aWVzWzJdID0gJ3JvdGF0aW9uJyBpbiBwcm9wZXJ0aWVzID8gISFwcm9wZXJ0aWVzLnJvdGF0aW9uIDogdGhpcy5fcHJvcGVydGllc1syXTtcbiAgICAgICAgdGhpcy5fcHJvcGVydGllc1szXSA9ICd1dnMnIGluIHByb3BlcnRpZXMgPyAhIXByb3BlcnRpZXMudXZzIDogdGhpcy5fcHJvcGVydGllc1szXTtcbiAgICAgICAgdGhpcy5fcHJvcGVydGllc1s0XSA9ICdhbHBoYScgaW4gcHJvcGVydGllcyA/ICEhcHJvcGVydGllcy5hbHBoYSA6IHRoaXMuX3Byb3BlcnRpZXNbNF07XG4gICAgfVxufTtcblxuLyoqXG4gKiBVcGRhdGVzIHRoZSBvYmplY3QgdHJhbnNmb3JtIGZvciByZW5kZXJpbmdcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5QYXJ0aWNsZUNvbnRhaW5lci5wcm90b3R5cGUudXBkYXRlVHJhbnNmb3JtID0gZnVuY3Rpb24gKClcbntcblxuICAgIC8vIFRPRE8gZG9uJ3QgbmVlZCB0byFcbiAgICB0aGlzLmRpc3BsYXlPYmplY3RVcGRhdGVUcmFuc2Zvcm0oKTtcbiAgICAvLyAgUElYSS5Db250YWluZXIucHJvdG90eXBlLnVwZGF0ZVRyYW5zZm9ybS5jYWxsKCB0aGlzICk7XG59O1xuXG4vKipcbiAqIFJlbmRlcnMgdGhlIGNvbnRhaW5lciB1c2luZyB0aGUgV2ViR0wgcmVuZGVyZXJcbiAqXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcn0gVGhlIHdlYmdsIHJlbmRlcmVyXG4gKiBAcHJpdmF0ZVxuICovXG5QYXJ0aWNsZUNvbnRhaW5lci5wcm90b3R5cGUucmVuZGVyV2ViR0wgPSBmdW5jdGlvbiAocmVuZGVyZXIpXG57XG4gICAgaWYgKCF0aGlzLnZpc2libGUgfHwgdGhpcy53b3JsZEFscGhhIDw9IDAgfHwgIXRoaXMuY2hpbGRyZW4ubGVuZ3RoIHx8ICF0aGlzLnJlbmRlcmFibGUpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgcmVuZGVyZXIuc2V0T2JqZWN0UmVuZGVyZXIoIHJlbmRlcmVyLnBsdWdpbnMucGFydGljbGUgKTtcbiAgICByZW5kZXJlci5wbHVnaW5zLnBhcnRpY2xlLnJlbmRlciggdGhpcyApO1xufTtcblxuLyoqXG4gKiBTZXQgdGhlIGZsYWcgdGhhdCBzdGF0aWMgZGF0YSBzaG91bGQgYmUgdXBkYXRlZCB0byB0cnVlXG4gKlxuICogQHByaXZhdGVcbiAqL1xuUGFydGljbGVDb250YWluZXIucHJvdG90eXBlLm9uQ2hpbGRyZW5DaGFuZ2UgPSBmdW5jdGlvbiAoc21hbGxlc3RDaGlsZEluZGV4KVxue1xuICAgIHZhciBidWZmZXJJbmRleCA9IE1hdGguZmxvb3Ioc21hbGxlc3RDaGlsZEluZGV4IC8gdGhpcy5fYmF0Y2hTaXplKTtcbiAgICBpZiAoYnVmZmVySW5kZXggPCB0aGlzLl9idWZmZXJUb1VwZGF0ZSkge1xuICAgICAgICB0aGlzLl9idWZmZXJUb1VwZGF0ZSA9IGJ1ZmZlckluZGV4O1xuICAgIH1cbn07XG5cbi8qKlxuICogUmVuZGVycyB0aGUgb2JqZWN0IHVzaW5nIHRoZSBDYW52YXMgcmVuZGVyZXJcbiAqXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuQ2FudmFzUmVuZGVyZXJ9IFRoZSBjYW52YXMgcmVuZGVyZXJcbiAqIEBwcml2YXRlXG4gKi9cblBhcnRpY2xlQ29udGFpbmVyLnByb3RvdHlwZS5yZW5kZXJDYW52YXMgPSBmdW5jdGlvbiAocmVuZGVyZXIpXG57XG4gICAgaWYgKCF0aGlzLnZpc2libGUgfHwgdGhpcy53b3JsZEFscGhhIDw9IDAgfHwgIXRoaXMuY2hpbGRyZW4ubGVuZ3RoIHx8ICF0aGlzLnJlbmRlcmFibGUpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFyIGNvbnRleHQgPSByZW5kZXJlci5jb250ZXh0O1xuICAgIHZhciB0cmFuc2Zvcm0gPSB0aGlzLndvcmxkVHJhbnNmb3JtO1xuICAgIHZhciBpc1JvdGF0ZWQgPSB0cnVlO1xuXG4gICAgdmFyIHBvc2l0aW9uWCA9IDA7XG4gICAgdmFyIHBvc2l0aW9uWSA9IDA7XG5cbiAgICB2YXIgZmluYWxXaWR0aCA9IDA7XG4gICAgdmFyIGZpbmFsSGVpZ2h0ID0gMDtcblxuICAgIHZhciBjb21wb3NpdGVPcGVyYXRpb24gPSByZW5kZXJlci5ibGVuZE1vZGVzW3RoaXMuYmxlbmRNb2RlXTtcbiAgICBpZiAoY29tcG9zaXRlT3BlcmF0aW9uICE9PSBjb250ZXh0Lmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbilcbiAgICB7XG4gICAgICAgIGNvbnRleHQuZ2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uID0gY29tcG9zaXRlT3BlcmF0aW9uO1xuICAgIH1cblxuICAgIGNvbnRleHQuZ2xvYmFsQWxwaGEgPSB0aGlzLndvcmxkQWxwaGE7XG5cbiAgICB0aGlzLmRpc3BsYXlPYmplY3RVcGRhdGVUcmFuc2Zvcm0oKTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5jaGlsZHJlbi5sZW5ndGg7ICsraSlcbiAgICB7XG4gICAgICAgIHZhciBjaGlsZCA9IHRoaXMuY2hpbGRyZW5baV07XG5cbiAgICAgICAgaWYgKCFjaGlsZC52aXNpYmxlKVxuICAgICAgICB7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBmcmFtZSA9IGNoaWxkLnRleHR1cmUuZnJhbWU7XG5cbiAgICAgICAgY29udGV4dC5nbG9iYWxBbHBoYSA9IHRoaXMud29ybGRBbHBoYSAqIGNoaWxkLmFscGhhO1xuXG4gICAgICAgIGlmIChjaGlsZC5yb3RhdGlvbiAlIChNYXRoLlBJICogMikgPT09IDApXG4gICAgICAgIHtcbiAgICAgICAgICAgIC8vIHRoaXMgaXMgdGhlIGZhc3Rlc3QgIHdheSB0byBvcHRpbWlzZSEgLSBpZiByb3RhdGlvbiBpcyAwIHRoZW4gd2UgY2FuIGF2b2lkIGFueSBraW5kIG9mIHNldFRyYW5zZm9ybSBjYWxsXG4gICAgICAgICAgICBpZiAoaXNSb3RhdGVkKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGNvbnRleHQuc2V0VHJhbnNmb3JtKFxuICAgICAgICAgICAgICAgICAgICB0cmFuc2Zvcm0uYSxcbiAgICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtLmIsXG4gICAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybS5jLFxuICAgICAgICAgICAgICAgICAgICB0cmFuc2Zvcm0uZCxcbiAgICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtLnR4LFxuICAgICAgICAgICAgICAgICAgICB0cmFuc2Zvcm0udHlcbiAgICAgICAgICAgICAgICApO1xuXG4gICAgICAgICAgICAgICAgaXNSb3RhdGVkID0gZmFsc2U7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHBvc2l0aW9uWCA9ICgoY2hpbGQuYW5jaG9yLngpICogKC1mcmFtZS53aWR0aCAqIGNoaWxkLnNjYWxlLngpICsgY2hpbGQucG9zaXRpb24ueCAgKyAwLjUpO1xuICAgICAgICAgICAgcG9zaXRpb25ZID0gKChjaGlsZC5hbmNob3IueSkgKiAoLWZyYW1lLmhlaWdodCAqIGNoaWxkLnNjYWxlLnkpICsgY2hpbGQucG9zaXRpb24ueSAgKyAwLjUpO1xuXG4gICAgICAgICAgICBmaW5hbFdpZHRoID0gZnJhbWUud2lkdGggKiBjaGlsZC5zY2FsZS54O1xuICAgICAgICAgICAgZmluYWxIZWlnaHQgPSBmcmFtZS5oZWlnaHQgKiBjaGlsZC5zY2FsZS55O1xuXG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgICBpZiAoIWlzUm90YXRlZClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBpc1JvdGF0ZWQgPSB0cnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjaGlsZC5kaXNwbGF5T2JqZWN0VXBkYXRlVHJhbnNmb3JtKCk7XG5cbiAgICAgICAgICAgIHZhciBjaGlsZFRyYW5zZm9ybSA9IGNoaWxkLndvcmxkVHJhbnNmb3JtO1xuXG4gICAgICAgICAgICBpZiAocmVuZGVyZXIucm91bmRQaXhlbHMpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29udGV4dC5zZXRUcmFuc2Zvcm0oXG4gICAgICAgICAgICAgICAgICAgIGNoaWxkVHJhbnNmb3JtLmEsXG4gICAgICAgICAgICAgICAgICAgIGNoaWxkVHJhbnNmb3JtLmIsXG4gICAgICAgICAgICAgICAgICAgIGNoaWxkVHJhbnNmb3JtLmMsXG4gICAgICAgICAgICAgICAgICAgIGNoaWxkVHJhbnNmb3JtLmQsXG4gICAgICAgICAgICAgICAgICAgIGNoaWxkVHJhbnNmb3JtLnR4IHwgMCxcbiAgICAgICAgICAgICAgICAgICAgY2hpbGRUcmFuc2Zvcm0udHkgfCAwXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb250ZXh0LnNldFRyYW5zZm9ybShcbiAgICAgICAgICAgICAgICAgICAgY2hpbGRUcmFuc2Zvcm0uYSxcbiAgICAgICAgICAgICAgICAgICAgY2hpbGRUcmFuc2Zvcm0uYixcbiAgICAgICAgICAgICAgICAgICAgY2hpbGRUcmFuc2Zvcm0uYyxcbiAgICAgICAgICAgICAgICAgICAgY2hpbGRUcmFuc2Zvcm0uZCxcbiAgICAgICAgICAgICAgICAgICAgY2hpbGRUcmFuc2Zvcm0udHgsXG4gICAgICAgICAgICAgICAgICAgIGNoaWxkVHJhbnNmb3JtLnR5XG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcG9zaXRpb25YID0gKChjaGlsZC5hbmNob3IueCkgKiAoLWZyYW1lLndpZHRoKSArIDAuNSk7XG4gICAgICAgICAgICBwb3NpdGlvblkgPSAoKGNoaWxkLmFuY2hvci55KSAqICgtZnJhbWUuaGVpZ2h0KSArIDAuNSk7XG5cbiAgICAgICAgICAgIGZpbmFsV2lkdGggPSBmcmFtZS53aWR0aDtcbiAgICAgICAgICAgIGZpbmFsSGVpZ2h0ID0gZnJhbWUuaGVpZ2h0O1xuICAgICAgICB9XG5cbiAgICAgICAgY29udGV4dC5kcmF3SW1hZ2UoXG4gICAgICAgICAgICBjaGlsZC50ZXh0dXJlLmJhc2VUZXh0dXJlLnNvdXJjZSxcbiAgICAgICAgICAgIGZyYW1lLngsXG4gICAgICAgICAgICBmcmFtZS55LFxuICAgICAgICAgICAgZnJhbWUud2lkdGgsXG4gICAgICAgICAgICBmcmFtZS5oZWlnaHQsXG4gICAgICAgICAgICBwb3NpdGlvblgsXG4gICAgICAgICAgICBwb3NpdGlvblksXG4gICAgICAgICAgICBmaW5hbFdpZHRoLFxuICAgICAgICAgICAgZmluYWxIZWlnaHRcbiAgICAgICAgKTtcbiAgICB9XG59O1xuXG4vKipcbiAqIERlc3Ryb3lzIHRoZSBjb250YWluZXJcbiAqXG4gKiBAcGFyYW0gW2Rlc3Ryb3lDaGlsZHJlbj1mYWxzZV0ge2Jvb2xlYW59IGlmIHNldCB0byB0cnVlLCBhbGwgdGhlIGNoaWxkcmVuIHdpbGwgaGF2ZSB0aGVpciBkZXN0cm95IG1ldGhvZCBjYWxsZWQgYXMgd2VsbFxuICovXG5QYXJ0aWNsZUNvbnRhaW5lci5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uICgpIHtcbiAgICBDb250YWluZXIucHJvdG90eXBlLmRlc3Ryb3kuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcblxuICAgIGlmICh0aGlzLl9idWZmZXJzKSB7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5fYnVmZmVycy5sZW5ndGg7ICsraSkge1xuICAgICAgICAgICAgdGhpcy5fYnVmZmVyc1tpXS5kZXN0cm95KCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLl9wcm9wZXJ0aWVzID0gbnVsbDtcbiAgICB0aGlzLl9idWZmZXJzID0gbnVsbDtcbn07XG4iLCJcbi8qKlxuICogQGF1dGhvciBNYXQgR3JvdmVzXG4gKlxuICogQmlnIHRoYW5rcyB0byB0aGUgdmVyeSBjbGV2ZXIgTWF0dCBEZXNMYXVyaWVycyA8bWF0dGRlc2w+IGh0dHBzOi8vZ2l0aHViLmNvbS9tYXR0ZGVzbC9cbiAqIGZvciBjcmVhdGluZyB0aGUgb3JpZ2luYWwgcGl4aSB2ZXJzaW9uIVxuICogQWxzbyBhIHRoYW5rcyB0byBodHRwczovL2dpdGh1Yi5jb20vYmNoZXZhbGllciBmb3IgdHdlYWtpbmcgdGhlIHRpbnQgYW5kIGFscGhhIHNvIHRoYXQgdGhleSBub3cgc2hhcmUgNCBieXRlcyBvbiB0aGUgdmVydGV4IGJ1ZmZlclxuICpcbiAqIEhlYXZpbHkgaW5zcGlyZWQgYnkgTGliR0RYJ3MgUGFydGljbGVCdWZmZXI6XG4gKiBodHRwczovL2dpdGh1Yi5jb20vbGliZ2R4L2xpYmdkeC9ibG9iL21hc3Rlci9nZHgvc3JjL2NvbS9iYWRsb2dpYy9nZHgvZ3JhcGhpY3MvZzJkL1BhcnRpY2xlQnVmZmVyLmphdmFcbiAqL1xuXG4vKipcbiAqIFRoZSBwYXJ0aWNsZSBidWZmZXIgbWFuYWdlcyB0aGUgc3RhdGljIGFuZCBkeW5hbWljIGJ1ZmZlcnMgZm9yIGEgcGFydGljbGUgY29udGFpbmVyLlxuICpcbiAqIEBjbGFzc1xuICogQHByaXZhdGVcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKi9cbmZ1bmN0aW9uIFBhcnRpY2xlQnVmZmVyKGdsLCBwcm9wZXJ0aWVzLCBkeW5hbWljUHJvcGVydHlGbGFncywgc2l6ZSlcbntcbiAgICAvKipcbiAgICAgKiBUaGUgY3VycmVudCBXZWJHTCBkcmF3aW5nIGNvbnRleHQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtXZWJHTFJlbmRlcmluZ0NvbnRleHR9XG4gICAgICovXG4gICAgdGhpcy5nbCA9IGdsO1xuXG4gICAgLyoqXG4gICAgICogU2l6ZSBvZiBhIHNpbmdsZSB2ZXJ0ZXguXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy52ZXJ0U2l6ZSA9IDI7XG5cbiAgICAvKipcbiAgICAgKiBTaXplIG9mIGEgc2luZ2xlIHZlcnRleCBpbiBieXRlcy5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLnZlcnRCeXRlU2l6ZSA9IHRoaXMudmVydFNpemUgKiA0O1xuXG4gICAgLyoqXG4gICAgICogVGhlIG51bWJlciBvZiBwYXJ0aWNsZXMgdGhlIGJ1ZmZlciBjYW4gaG9sZFxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMuc2l6ZSA9IHNpemU7XG5cbiAgICAvKipcbiAgICAgKiBBIGxpc3Qgb2YgdGhlIHByb3BlcnRpZXMgdGhhdCBhcmUgZHluYW1pYy5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge29iamVjdFtdfVxuICAgICAqL1xuICAgIHRoaXMuZHluYW1pY1Byb3BlcnRpZXMgPSBbXTtcblxuICAgIC8qKlxuICAgICAqIEEgbGlzdCBvZiB0aGUgcHJvcGVydGllcyB0aGF0IGFyZSBzdGF0aWMuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtvYmplY3RbXX1cbiAgICAgKi9cbiAgICB0aGlzLnN0YXRpY1Byb3BlcnRpZXMgPSBbXTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcGVydGllcy5sZW5ndGg7IGkrKylcbiAgICB7XG4gICAgICAgIHZhciBwcm9wZXJ0eSA9IHByb3BlcnRpZXNbaV07XG5cbiAgICAgICAgaWYoZHluYW1pY1Byb3BlcnR5RmxhZ3NbaV0pXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuZHluYW1pY1Byb3BlcnRpZXMucHVzaChwcm9wZXJ0eSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnN0YXRpY1Byb3BlcnRpZXMucHVzaChwcm9wZXJ0eSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLnN0YXRpY1N0cmlkZSA9IDA7XG4gICAgdGhpcy5zdGF0aWNCdWZmZXIgPSBudWxsO1xuICAgIHRoaXMuc3RhdGljRGF0YSA9IG51bGw7XG5cbiAgICB0aGlzLmR5bmFtaWNTdHJpZGUgPSAwO1xuICAgIHRoaXMuZHluYW1pY0J1ZmZlciA9IG51bGw7XG4gICAgdGhpcy5keW5hbWljRGF0YSA9IG51bGw7XG5cbiAgICB0aGlzLmluaXRCdWZmZXJzKCk7XG5cbn1cblxuUGFydGljbGVCdWZmZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gUGFydGljbGVCdWZmZXI7XG5tb2R1bGUuZXhwb3J0cyA9IFBhcnRpY2xlQnVmZmVyO1xuXG4vKipcbiAqIFNldHMgdXAgdGhlIHJlbmRlcmVyIGNvbnRleHQgYW5kIG5lY2Vzc2FyeSBidWZmZXJzLlxuICpcbiAqIEBwcml2YXRlXG4gKi9cblBhcnRpY2xlQnVmZmVyLnByb3RvdHlwZS5pbml0QnVmZmVycyA9IGZ1bmN0aW9uICgpXG57XG4gICAgdmFyIGdsID0gdGhpcy5nbDtcbiAgICB2YXIgaTtcbiAgICB2YXIgcHJvcGVydHk7XG5cbiAgICB2YXIgZHluYW1pY09mZnNldCA9IDA7XG4gICAgdGhpcy5keW5hbWljU3RyaWRlID0gMDtcblxuICAgIGZvciAoaSA9IDA7IGkgPCB0aGlzLmR5bmFtaWNQcm9wZXJ0aWVzLmxlbmd0aDsgaSsrKVxuICAgIHtcbiAgICAgICAgcHJvcGVydHkgPSB0aGlzLmR5bmFtaWNQcm9wZXJ0aWVzW2ldO1xuXG4gICAgICAgIHByb3BlcnR5Lm9mZnNldCA9IGR5bmFtaWNPZmZzZXQ7XG4gICAgICAgIGR5bmFtaWNPZmZzZXQgKz0gcHJvcGVydHkuc2l6ZTtcbiAgICAgICAgdGhpcy5keW5hbWljU3RyaWRlICs9IHByb3BlcnR5LnNpemU7XG4gICAgfVxuXG4gICAgdGhpcy5keW5hbWljRGF0YSA9IG5ldyBGbG9hdDMyQXJyYXkoIHRoaXMuc2l6ZSAqIHRoaXMuZHluYW1pY1N0cmlkZSAqIDQpO1xuICAgIHRoaXMuZHluYW1pY0J1ZmZlciA9IGdsLmNyZWF0ZUJ1ZmZlcigpO1xuXG4gICAgZ2wuYmluZEJ1ZmZlcihnbC5BUlJBWV9CVUZGRVIsIHRoaXMuZHluYW1pY0J1ZmZlcik7XG4gICAgZ2wuYnVmZmVyRGF0YShnbC5BUlJBWV9CVUZGRVIsIHRoaXMuZHluYW1pY0RhdGEsIGdsLkRZTkFNSUNfRFJBVyk7XG5cblxuICAgIC8vIHN0YXRpYyAvL1xuICAgIHZhciBzdGF0aWNPZmZzZXQgPSAwO1xuICAgIHRoaXMuc3RhdGljU3RyaWRlID0gMDtcblxuICAgIGZvciAoaSA9IDA7IGkgPCB0aGlzLnN0YXRpY1Byb3BlcnRpZXMubGVuZ3RoOyBpKyspXG4gICAge1xuICAgICAgICBwcm9wZXJ0eSA9IHRoaXMuc3RhdGljUHJvcGVydGllc1tpXTtcblxuICAgICAgICBwcm9wZXJ0eS5vZmZzZXQgPSBzdGF0aWNPZmZzZXQ7XG4gICAgICAgIHN0YXRpY09mZnNldCArPSBwcm9wZXJ0eS5zaXplO1xuICAgICAgICB0aGlzLnN0YXRpY1N0cmlkZSArPSBwcm9wZXJ0eS5zaXplO1xuICAgIH1cblxuICAgIHRoaXMuc3RhdGljRGF0YSA9IG5ldyBGbG9hdDMyQXJyYXkoIHRoaXMuc2l6ZSAqIHRoaXMuc3RhdGljU3RyaWRlICogNCk7XG4gICAgdGhpcy5zdGF0aWNCdWZmZXIgPSBnbC5jcmVhdGVCdWZmZXIoKTtcblxuICAgIGdsLmJpbmRCdWZmZXIoZ2wuQVJSQVlfQlVGRkVSLCB0aGlzLnN0YXRpY0J1ZmZlcik7XG4gICAgZ2wuYnVmZmVyRGF0YShnbC5BUlJBWV9CVUZGRVIsIHRoaXMuc3RhdGljRGF0YSwgZ2wuRFlOQU1JQ19EUkFXKTtcbn07XG5cbi8qKlxuICogVXBsb2FkcyB0aGUgZHluYW1pYyBwcm9wZXJ0aWVzLlxuICpcbiAqL1xuUGFydGljbGVCdWZmZXIucHJvdG90eXBlLnVwbG9hZER5bmFtaWMgPSBmdW5jdGlvbihjaGlsZHJlbiwgc3RhcnRJbmRleCwgYW1vdW50KVxue1xuICAgIHZhciBnbCA9IHRoaXMuZ2w7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuZHluYW1pY1Byb3BlcnRpZXMubGVuZ3RoOyBpKyspXG4gICAge1xuICAgICAgICB2YXIgcHJvcGVydHkgPSB0aGlzLmR5bmFtaWNQcm9wZXJ0aWVzW2ldO1xuICAgICAgICBwcm9wZXJ0eS51cGxvYWRGdW5jdGlvbihjaGlsZHJlbiwgc3RhcnRJbmRleCwgYW1vdW50LCB0aGlzLmR5bmFtaWNEYXRhLCB0aGlzLmR5bmFtaWNTdHJpZGUsIHByb3BlcnR5Lm9mZnNldCk7XG4gICAgfVxuXG4gICAgZ2wuYmluZEJ1ZmZlcihnbC5BUlJBWV9CVUZGRVIsIHRoaXMuZHluYW1pY0J1ZmZlcik7XG4gICAgZ2wuYnVmZmVyU3ViRGF0YShnbC5BUlJBWV9CVUZGRVIsIDAsIHRoaXMuZHluYW1pY0RhdGEpO1xufTtcblxuLyoqXG4gKiBVcGxvYWRzIHRoZSBzdGF0aWMgcHJvcGVydGllcy5cbiAqXG4gKi9cblBhcnRpY2xlQnVmZmVyLnByb3RvdHlwZS51cGxvYWRTdGF0aWMgPSBmdW5jdGlvbihjaGlsZHJlbiwgc3RhcnRJbmRleCwgYW1vdW50KVxue1xuICAgIHZhciBnbCA9IHRoaXMuZ2w7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuc3RhdGljUHJvcGVydGllcy5sZW5ndGg7IGkrKylcbiAgICB7XG4gICAgICAgIHZhciBwcm9wZXJ0eSA9IHRoaXMuc3RhdGljUHJvcGVydGllc1tpXTtcbiAgICAgICAgcHJvcGVydHkudXBsb2FkRnVuY3Rpb24oY2hpbGRyZW4sIHN0YXJ0SW5kZXgsIGFtb3VudCwgdGhpcy5zdGF0aWNEYXRhLCB0aGlzLnN0YXRpY1N0cmlkZSwgcHJvcGVydHkub2Zmc2V0KTtcbiAgICB9XG5cbiAgICBnbC5iaW5kQnVmZmVyKGdsLkFSUkFZX0JVRkZFUiwgdGhpcy5zdGF0aWNCdWZmZXIpO1xuICAgIGdsLmJ1ZmZlclN1YkRhdGEoZ2wuQVJSQVlfQlVGRkVSLCAwLCB0aGlzLnN0YXRpY0RhdGEpO1xufTtcblxuLyoqXG4gKiBCaW5kcyB0aGUgYnVmZmVycyB0byB0aGUgR1BVXG4gKlxuICovXG5QYXJ0aWNsZUJ1ZmZlci5wcm90b3R5cGUuYmluZCA9IGZ1bmN0aW9uICgpXG57XG4gICAgdmFyIGdsID0gdGhpcy5nbDtcbiAgICB2YXIgaSwgcHJvcGVydHk7XG5cbiAgICBnbC5iaW5kQnVmZmVyKGdsLkFSUkFZX0JVRkZFUiwgdGhpcy5keW5hbWljQnVmZmVyKTtcblxuICAgIGZvciAoaSA9IDA7IGkgPCB0aGlzLmR5bmFtaWNQcm9wZXJ0aWVzLmxlbmd0aDsgaSsrKVxuICAgIHtcbiAgICAgICAgcHJvcGVydHkgPSB0aGlzLmR5bmFtaWNQcm9wZXJ0aWVzW2ldO1xuICAgICAgICBnbC52ZXJ0ZXhBdHRyaWJQb2ludGVyKHByb3BlcnR5LmF0dHJpYnV0ZSwgcHJvcGVydHkuc2l6ZSwgZ2wuRkxPQVQsIGZhbHNlLCB0aGlzLmR5bmFtaWNTdHJpZGUgKiA0LCBwcm9wZXJ0eS5vZmZzZXQgKiA0KTtcbiAgICB9XG5cbiAgICBnbC5iaW5kQnVmZmVyKGdsLkFSUkFZX0JVRkZFUiwgdGhpcy5zdGF0aWNCdWZmZXIpO1xuXG4gICAgZm9yIChpID0gMDsgaSA8IHRoaXMuc3RhdGljUHJvcGVydGllcy5sZW5ndGg7IGkrKylcbiAgICB7XG4gICAgICAgIHByb3BlcnR5ID0gdGhpcy5zdGF0aWNQcm9wZXJ0aWVzW2ldO1xuICAgICAgICBnbC52ZXJ0ZXhBdHRyaWJQb2ludGVyKHByb3BlcnR5LmF0dHJpYnV0ZSwgcHJvcGVydHkuc2l6ZSwgZ2wuRkxPQVQsIGZhbHNlLCB0aGlzLnN0YXRpY1N0cmlkZSAqIDQsIHByb3BlcnR5Lm9mZnNldCAqIDQpO1xuICAgIH1cbn07XG5cbi8qKlxuICogRGVzdHJveXMgdGhlIFBhcnRpY2xlQnVmZmVyLlxuICpcbiAqL1xuUGFydGljbGVCdWZmZXIucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoKVxue1xuICAgIHRoaXMuZHluYW1pY1Byb3BlcnRpZXMgPSBudWxsO1xuICAgIHRoaXMuZHluYW1pY0RhdGEgPSBudWxsO1xuICAgIHRoaXMuZ2wuZGVsZXRlQnVmZmVyKHRoaXMuZHluYW1pY0J1ZmZlcik7XG5cbiAgICB0aGlzLnN0YXRpY1Byb3BlcnRpZXMgPSBudWxsO1xuICAgIHRoaXMuc3RhdGljRGF0YSA9IG51bGw7XG4gICAgdGhpcy5nbC5kZWxldGVCdWZmZXIodGhpcy5zdGF0aWNCdWZmZXIpO1xufTtcbiIsInZhciBPYmplY3RSZW5kZXJlciA9IHJlcXVpcmUoJy4uLy4uL3JlbmRlcmVycy93ZWJnbC91dGlscy9PYmplY3RSZW5kZXJlcicpLFxuICAgIFdlYkdMUmVuZGVyZXIgPSByZXF1aXJlKCcuLi8uLi9yZW5kZXJlcnMvd2ViZ2wvV2ViR0xSZW5kZXJlcicpLFxuICAgIFBhcnRpY2xlU2hhZGVyID0gcmVxdWlyZSgnLi9QYXJ0aWNsZVNoYWRlcicpLFxuICAgIFBhcnRpY2xlQnVmZmVyID0gcmVxdWlyZSgnLi9QYXJ0aWNsZUJ1ZmZlcicpLFxuICAgIG1hdGggICAgICAgICAgICA9IHJlcXVpcmUoJy4uLy4uL21hdGgnKTtcblxuLyoqXG4gKiBAYXV0aG9yIE1hdCBHcm92ZXNcbiAqXG4gKiBCaWcgdGhhbmtzIHRvIHRoZSB2ZXJ5IGNsZXZlciBNYXR0IERlc0xhdXJpZXJzIDxtYXR0ZGVzbD4gaHR0cHM6Ly9naXRodWIuY29tL21hdHRkZXNsL1xuICogZm9yIGNyZWF0aW5nIHRoZSBvcmlnaW5hbCBwaXhpIHZlcnNpb24hXG4gKiBBbHNvIGEgdGhhbmtzIHRvIGh0dHBzOi8vZ2l0aHViLmNvbS9iY2hldmFsaWVyIGZvciB0d2Vha2luZyB0aGUgdGludCBhbmQgYWxwaGEgc28gdGhhdCB0aGV5IG5vdyBzaGFyZSA0IGJ5dGVzIG9uIHRoZSB2ZXJ0ZXggYnVmZmVyXG4gKlxuICogSGVhdmlseSBpbnNwaXJlZCBieSBMaWJHRFgncyBQYXJ0aWNsZVJlbmRlcmVyOlxuICogaHR0cHM6Ly9naXRodWIuY29tL2xpYmdkeC9saWJnZHgvYmxvYi9tYXN0ZXIvZ2R4L3NyYy9jb20vYmFkbG9naWMvZ2R4L2dyYXBoaWNzL2cyZC9QYXJ0aWNsZVJlbmRlcmVyLmphdmFcbiAqL1xuXG4vKipcbiAqXG4gKiBAY2xhc3NcbiAqIEBwcml2YXRlXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLldlYkdMUmVuZGVyZXJ9IFRoZSByZW5kZXJlciB0aGlzIHNwcml0ZSBiYXRjaCB3b3JrcyBmb3IuXG4gKi9cbmZ1bmN0aW9uIFBhcnRpY2xlUmVuZGVyZXIocmVuZGVyZXIpXG57XG4gICAgT2JqZWN0UmVuZGVyZXIuY2FsbCh0aGlzLCByZW5kZXJlcik7XG5cbiAgICAvLyA2NTUzNSBpcyBtYXggdmVydGV4IGluZGV4IGluIHRoZSBpbmRleCBidWZmZXIgKHNlZSBQYXJ0aWNsZVJlbmRlcmVyKVxuICAgIC8vIHNvIG1heCBudW1iZXIgb2YgcGFydGljbGVzIGlzIDY1NTM2IC8gNCA9IDE2Mzg0XG4gICAgLy8gYW5kIG1heCBudW1iZXIgb2YgZWxlbWVudCBpbiB0aGUgaW5kZXggYnVmZmVyIGlzIDE2Mzg0ICogNiA9IDk4MzA0XG4gICAgLy8gQ3JlYXRpbmcgYSBmdWxsIGluZGV4IGJ1ZmZlciwgb3ZlcmhlYWQgaXMgOTgzMDQgKiAyID0gMTk2S29cbiAgICB2YXIgbnVtSW5kaWNlcyA9IDk4MzA0O1xuXG4gICAgLyoqXG4gICAgICogSG9sZHMgdGhlIGluZGljZXNcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1VpbnQxNkFycmF5fVxuICAgICAqL1xuICAgIHRoaXMuaW5kaWNlcyA9IG5ldyBVaW50MTZBcnJheShudW1JbmRpY2VzKTtcblxuICAgIGZvciAodmFyIGk9MCwgaj0wOyBpIDwgbnVtSW5kaWNlczsgaSArPSA2LCBqICs9IDQpXG4gICAge1xuICAgICAgICB0aGlzLmluZGljZXNbaSArIDBdID0gaiArIDA7XG4gICAgICAgIHRoaXMuaW5kaWNlc1tpICsgMV0gPSBqICsgMTtcbiAgICAgICAgdGhpcy5pbmRpY2VzW2kgKyAyXSA9IGogKyAyO1xuICAgICAgICB0aGlzLmluZGljZXNbaSArIDNdID0gaiArIDA7XG4gICAgICAgIHRoaXMuaW5kaWNlc1tpICsgNF0gPSBqICsgMjtcbiAgICAgICAgdGhpcy5pbmRpY2VzW2kgKyA1XSA9IGogKyAzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoZSBkZWZhdWx0IHNoYWRlciB0aGF0IGlzIHVzZWQgaWYgYSBzcHJpdGUgZG9lc24ndCBoYXZlIGEgbW9yZSBzcGVjaWZpYyBvbmUuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlNoYWRlcn1cbiAgICAgKi9cbiAgICB0aGlzLnNoYWRlciA9IG51bGw7XG5cbiAgICB0aGlzLmluZGV4QnVmZmVyID0gbnVsbDtcblxuICAgIHRoaXMucHJvcGVydGllcyA9IG51bGw7XG5cbiAgICB0aGlzLnRlbXBNYXRyaXggPSBuZXcgbWF0aC5NYXRyaXgoKTtcbn1cblxuUGFydGljbGVSZW5kZXJlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKE9iamVjdFJlbmRlcmVyLnByb3RvdHlwZSk7XG5QYXJ0aWNsZVJlbmRlcmVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFBhcnRpY2xlUmVuZGVyZXI7XG5tb2R1bGUuZXhwb3J0cyA9IFBhcnRpY2xlUmVuZGVyZXI7XG5cbldlYkdMUmVuZGVyZXIucmVnaXN0ZXJQbHVnaW4oJ3BhcnRpY2xlJywgUGFydGljbGVSZW5kZXJlcik7XG5cbi8qKlxuICogV2hlbiB0aGVyZSBpcyBhIFdlYkdMIGNvbnRleHQgY2hhbmdlXG4gKlxuICogQHByaXZhdGVcbiAqL1xuUGFydGljbGVSZW5kZXJlci5wcm90b3R5cGUub25Db250ZXh0Q2hhbmdlID0gZnVuY3Rpb24gKClcbntcbiAgICB2YXIgZ2wgPSB0aGlzLnJlbmRlcmVyLmdsO1xuXG4gICAgLy8gc2V0dXAgZGVmYXVsdCBzaGFkZXJcbiAgICB0aGlzLnNoYWRlciA9IG5ldyBQYXJ0aWNsZVNoYWRlcih0aGlzLnJlbmRlcmVyLnNoYWRlck1hbmFnZXIpO1xuXG4gICAgdGhpcy5pbmRleEJ1ZmZlciA9IGdsLmNyZWF0ZUJ1ZmZlcigpO1xuXG4gICAgLy8gNjU1MzUgaXMgbWF4IGluZGV4LCBzbyA2NTUzNSAvIDYgPSAxMDkyMi5cblxuICAgIC8vdXBsb2FkIHRoZSBpbmRleCBkYXRhXG4gICAgZ2wuYmluZEJ1ZmZlcihnbC5FTEVNRU5UX0FSUkFZX0JVRkZFUiwgdGhpcy5pbmRleEJ1ZmZlcik7XG4gICAgZ2wuYnVmZmVyRGF0YShnbC5FTEVNRU5UX0FSUkFZX0JVRkZFUiwgdGhpcy5pbmRpY2VzLCBnbC5TVEFUSUNfRFJBVyk7XG5cbiAgICB0aGlzLnByb3BlcnRpZXMgPSBbXG4gICAgICAgIC8vIHZlcnRpY2VzRGF0YVxuICAgICAgICB7XG4gICAgICAgICAgICBhdHRyaWJ1dGU6dGhpcy5zaGFkZXIuYXR0cmlidXRlcy5hVmVydGV4UG9zaXRpb24sXG4gICAgICAgICAgICBzaXplOjIsXG4gICAgICAgICAgICB1cGxvYWRGdW5jdGlvbjp0aGlzLnVwbG9hZFZlcnRpY2VzLFxuICAgICAgICAgICAgb2Zmc2V0OjBcbiAgICAgICAgfSxcbiAgICAgICAgLy8gcG9zaXRpb25EYXRhXG4gICAgICAgIHtcbiAgICAgICAgICAgIGF0dHJpYnV0ZTp0aGlzLnNoYWRlci5hdHRyaWJ1dGVzLmFQb3NpdGlvbkNvb3JkLFxuICAgICAgICAgICAgc2l6ZToyLFxuICAgICAgICAgICAgdXBsb2FkRnVuY3Rpb246dGhpcy51cGxvYWRQb3NpdGlvbixcbiAgICAgICAgICAgIG9mZnNldDowXG4gICAgICAgIH0sXG4gICAgICAgIC8vIHJvdGF0aW9uRGF0YVxuICAgICAgICB7XG4gICAgICAgICAgICBhdHRyaWJ1dGU6dGhpcy5zaGFkZXIuYXR0cmlidXRlcy5hUm90YXRpb24sXG4gICAgICAgICAgICBzaXplOjEsXG4gICAgICAgICAgICB1cGxvYWRGdW5jdGlvbjp0aGlzLnVwbG9hZFJvdGF0aW9uLFxuICAgICAgICAgICAgb2Zmc2V0OjBcbiAgICAgICAgfSxcbiAgICAgICAgLy8gdXZzRGF0YVxuICAgICAgICB7XG4gICAgICAgICAgICBhdHRyaWJ1dGU6dGhpcy5zaGFkZXIuYXR0cmlidXRlcy5hVGV4dHVyZUNvb3JkLFxuICAgICAgICAgICAgc2l6ZToyLFxuICAgICAgICAgICAgdXBsb2FkRnVuY3Rpb246dGhpcy51cGxvYWRVdnMsXG4gICAgICAgICAgICBvZmZzZXQ6MFxuICAgICAgICB9LFxuICAgICAgICAvLyBhbHBoYURhdGFcbiAgICAgICAge1xuICAgICAgICAgICAgYXR0cmlidXRlOnRoaXMuc2hhZGVyLmF0dHJpYnV0ZXMuYUNvbG9yLFxuICAgICAgICAgICAgc2l6ZToxLFxuICAgICAgICAgICAgdXBsb2FkRnVuY3Rpb246dGhpcy51cGxvYWRBbHBoYSxcbiAgICAgICAgICAgIG9mZnNldDowXG4gICAgICAgIH1cbiAgICBdO1xufTtcblxuLyoqXG4gKiBTdGFydHMgYSBuZXcgcGFydGljbGUgYmF0Y2guXG4gKlxuICovXG5QYXJ0aWNsZVJlbmRlcmVyLnByb3RvdHlwZS5zdGFydCA9IGZ1bmN0aW9uICgpXG57XG4gICAgdmFyIGdsID0gdGhpcy5yZW5kZXJlci5nbDtcblxuICAgIC8vIGJpbmQgdGhlIG1haW4gdGV4dHVyZVxuICAgIGdsLmFjdGl2ZVRleHR1cmUoZ2wuVEVYVFVSRTApO1xuXG4gICAgLy8gYmluZCB0aGUgYnVmZmVyc1xuXG4gICAgZ2wuYmluZEJ1ZmZlcihnbC5FTEVNRU5UX0FSUkFZX0JVRkZFUiwgdGhpcy5pbmRleEJ1ZmZlcik7XG5cbiAgICB2YXIgc2hhZGVyID0gdGhpcy5zaGFkZXI7XG5cbiAgICB0aGlzLnJlbmRlcmVyLnNoYWRlck1hbmFnZXIuc2V0U2hhZGVyKHNoYWRlcik7XG59O1xuXG5cbi8qKlxuICogUmVuZGVycyB0aGUgcGFydGljbGUgY29udGFpbmVyIG9iamVjdC5cbiAqXG4gKiBAcGFyYW0gY29udGFpbmVyIHtQSVhJLlBhcnRpY2xlQ29udGFpbmVyfSBUaGUgY29udGFpbmVyIHRvIHJlbmRlciB1c2luZyB0aGlzIFBhcnRpY2xlUmVuZGVyZXJcbiAqL1xuUGFydGljbGVSZW5kZXJlci5wcm90b3R5cGUucmVuZGVyID0gZnVuY3Rpb24gKGNvbnRhaW5lcilcbntcbiAgICB2YXIgY2hpbGRyZW4gPSBjb250YWluZXIuY2hpbGRyZW4sXG4gICAgICAgIHRvdGFsQ2hpbGRyZW4gPSBjaGlsZHJlbi5sZW5ndGgsXG4gICAgICAgIG1heFNpemUgPSBjb250YWluZXIuX21heFNpemUsXG4gICAgICAgIGJhdGNoU2l6ZSA9IGNvbnRhaW5lci5fYmF0Y2hTaXplO1xuXG4gICAgaWYodG90YWxDaGlsZHJlbiA9PT0gMClcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgZWxzZSBpZih0b3RhbENoaWxkcmVuID4gbWF4U2l6ZSlcbiAgICB7XG4gICAgICAgIHRvdGFsQ2hpbGRyZW4gPSBtYXhTaXplO1xuICAgIH1cblxuICAgIGlmKCFjb250YWluZXIuX2J1ZmZlcnMpXG4gICAge1xuICAgICAgICBjb250YWluZXIuX2J1ZmZlcnMgPSB0aGlzLmdlbmVyYXRlQnVmZmVycyggY29udGFpbmVyICk7XG4gICAgfVxuXG4gICAgLy8gaWYgdGhlIHV2cyBoYXZlIG5vdCB1cGRhdGVkIHRoZW4gbm8gcG9pbnQgcmVuZGVyaW5nIGp1c3QgeWV0IVxuICAgIHRoaXMucmVuZGVyZXIuYmxlbmRNb2RlTWFuYWdlci5zZXRCbGVuZE1vZGUoY29udGFpbmVyLmJsZW5kTW9kZSk7XG5cbiAgICB2YXIgZ2wgPSB0aGlzLnJlbmRlcmVyLmdsO1xuXG4gICAgdmFyIG0gPSAgY29udGFpbmVyLndvcmxkVHJhbnNmb3JtLmNvcHkoIHRoaXMudGVtcE1hdHJpeCApO1xuICAgIG0ucHJlcGVuZCggdGhpcy5yZW5kZXJlci5jdXJyZW50UmVuZGVyVGFyZ2V0LnByb2plY3Rpb25NYXRyaXggKTtcbiAgICBnbC51bmlmb3JtTWF0cml4M2Z2KHRoaXMuc2hhZGVyLnVuaWZvcm1zLnByb2plY3Rpb25NYXRyaXguX2xvY2F0aW9uLCBmYWxzZSwgbS50b0FycmF5KHRydWUpKTtcbiAgICBnbC51bmlmb3JtMWYodGhpcy5zaGFkZXIudW5pZm9ybXMudUFscGhhLl9sb2NhdGlvbiwgY29udGFpbmVyLndvcmxkQWxwaGEpO1xuXG5cbiAgICAvLyBtYWtlIHN1cmUgdGhlIHRleHR1cmUgaXMgYm91bmQuLlxuICAgIHZhciBiYXNlVGV4dHVyZSA9IGNoaWxkcmVuWzBdLl90ZXh0dXJlLmJhc2VUZXh0dXJlO1xuXG4gICAgaWYgKCFiYXNlVGV4dHVyZS5fZ2xUZXh0dXJlc1tnbC5pZF0pXG4gICAge1xuICAgICAgICAvLyBpZiB0aGUgdGV4dHVyZSBoYXMgbm90IHVwZGF0ZWQgdGhlbiBsZXRzIG5vdCB1cGxvYWQgYW55IHN0YXRpYyBwcm9wZXJ0aWVzXG4gICAgICAgIGlmKCF0aGlzLnJlbmRlcmVyLnVwZGF0ZVRleHR1cmUoYmFzZVRleHR1cmUpKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZighY29udGFpbmVyLl9wcm9wZXJ0aWVzWzBdIHx8ICFjb250YWluZXIuX3Byb3BlcnRpZXNbM10pXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNvbnRhaW5lci5fYnVmZmVyVG9VcGRhdGUgPSAwO1xuICAgICAgICB9XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIGdsLmJpbmRUZXh0dXJlKGdsLlRFWFRVUkVfMkQsIGJhc2VUZXh0dXJlLl9nbFRleHR1cmVzW2dsLmlkXSk7XG4gICAgfVxuXG4gICAgLy8gbm93IGxldHMgdXBsb2FkIGFuZCByZW5kZXIgdGhlIGJ1ZmZlcnMuLlxuICAgIGZvciAodmFyIGkgPSAwLCBqID0gMDsgaSA8IHRvdGFsQ2hpbGRyZW47IGkgKz0gYmF0Y2hTaXplLCBqICs9IDEpXG4gICAge1xuICAgICAgICB2YXIgYW1vdW50ID0gKCB0b3RhbENoaWxkcmVuIC0gaSk7XG4gICAgICAgIGlmKGFtb3VudCA+IGJhdGNoU2l6ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgYW1vdW50ID0gYmF0Y2hTaXplO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGJ1ZmZlciA9IGNvbnRhaW5lci5fYnVmZmVyc1tqXTtcblxuICAgICAgICAvLyB3ZSBhbHdheXMgdXBsb2FkIHRoZSBkeW5hbWljXG4gICAgICAgIGJ1ZmZlci51cGxvYWREeW5hbWljKGNoaWxkcmVuLCBpLCBhbW91bnQpO1xuXG4gICAgICAgIC8vIHdlIG9ubHkgdXBsb2FkIHRoZSBzdGF0aWMgY29udGVudCB3aGVuIHdlIGhhdmUgdG8hXG4gICAgICAgIGlmKGNvbnRhaW5lci5fYnVmZmVyVG9VcGRhdGUgPT09IGopXG4gICAgICAgIHtcbiAgICAgICAgICAgIGJ1ZmZlci51cGxvYWRTdGF0aWMoY2hpbGRyZW4sIGksIGFtb3VudCk7XG4gICAgICAgICAgICBjb250YWluZXIuX2J1ZmZlclRvVXBkYXRlID0gaiArIDE7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBiaW5kIHRoZSBidWZmZXJcbiAgICAgICAgYnVmZmVyLmJpbmQoIHRoaXMuc2hhZGVyICk7XG5cbiAgICAgICAgIC8vIG5vdyBkcmF3IHRob3NlIHN1Y2thcyFcbiAgICAgICAgZ2wuZHJhd0VsZW1lbnRzKGdsLlRSSUFOR0xFUywgYW1vdW50ICogNiwgZ2wuVU5TSUdORURfU0hPUlQsIDApO1xuICAgICAgICB0aGlzLnJlbmRlcmVyLmRyYXdDb3VudCsrO1xuICAgIH1cbn07XG5cbi8qKlxuICogQ3JlYXRlcyBvbmUgcGFydGljbGUgYnVmZmVyIGZvciBlYWNoIGNoaWxkIGluIHRoZSBjb250YWluZXIgd2Ugd2FudCB0byByZW5kZXIgYW5kIHVwZGF0ZXMgaW50ZXJuYWwgcHJvcGVydGllc1xuICpcbiAqIEBwYXJhbSBjb250YWluZXIge1BJWEkuUGFydGljbGVDb250YWluZXJ9IFRoZSBjb250YWluZXIgdG8gcmVuZGVyIHVzaW5nIHRoaXMgUGFydGljbGVSZW5kZXJlclxuICovXG5QYXJ0aWNsZVJlbmRlcmVyLnByb3RvdHlwZS5nZW5lcmF0ZUJ1ZmZlcnMgPSBmdW5jdGlvbiAoY29udGFpbmVyKVxue1xuICAgIHZhciBnbCA9IHRoaXMucmVuZGVyZXIuZ2wsXG4gICAgICAgIGJ1ZmZlcnMgPSBbXSxcbiAgICAgICAgc2l6ZSA9IGNvbnRhaW5lci5fbWF4U2l6ZSxcbiAgICAgICAgYmF0Y2hTaXplID0gY29udGFpbmVyLl9iYXRjaFNpemUsXG4gICAgICAgIGR5bmFtaWNQcm9wZXJ0eUZsYWdzID0gY29udGFpbmVyLl9wcm9wZXJ0aWVzLFxuICAgICAgICBpO1xuXG4gICAgZm9yIChpID0gMDsgaSA8IHNpemU7IGkgKz0gYmF0Y2hTaXplKVxuICAgIHtcbiAgICAgICAgYnVmZmVycy5wdXNoKG5ldyBQYXJ0aWNsZUJ1ZmZlcihnbCwgdGhpcy5wcm9wZXJ0aWVzLCBkeW5hbWljUHJvcGVydHlGbGFncywgYmF0Y2hTaXplKSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGJ1ZmZlcnM7XG59O1xuXG4vKipcbiAqIFVwbG9hZHMgdGhlIHZlcnRpY2llcy5cbiAqXG4gKiBAcGFyYW0gY2hpbGRyZW4ge1BJWEkuRGlzcGxheU9iamVjdFtdfSB0aGUgYXJyYXkgb2YgZGlzcGxheSBvYmplY3RzIHRvIHJlbmRlclxuICogQHBhcmFtIHN0YXJ0SW5kZXgge251bWJlcn0gdGhlIGluZGV4IHRvIHN0YXJ0IGZyb20gaW4gdGhlIGNoaWxkcmVuIGFycmF5XG4gKiBAcGFyYW0gYW1vdW50IHtudW1iZXJ9IHRoZSBhbW91bnQgb2YgY2hpbGRyZW4gdGhhdCB3aWxsIGhhdmUgdGhlaXIgdmVydGljZXMgdXBsb2FkZWRcbiAqIEBwYXJhbSBhcnJheSB7bnVtYmVyW119XG4gKiBAcGFyYW0gc3RyaWRlIHtudW1iZXJ9XG4gKiBAcGFyYW0gb2Zmc2V0IHtudW1iZXJ9XG4gKi9cblBhcnRpY2xlUmVuZGVyZXIucHJvdG90eXBlLnVwbG9hZFZlcnRpY2VzID0gZnVuY3Rpb24gKGNoaWxkcmVuLCBzdGFydEluZGV4LCBhbW91bnQsIGFycmF5LCBzdHJpZGUsIG9mZnNldClcbntcbiAgICB2YXIgc3ByaXRlLFxuICAgICAgICB0ZXh0dXJlLFxuICAgICAgICB0cmltLFxuICAgICAgICBzeCxcbiAgICAgICAgc3ksXG4gICAgICAgIHcwLCB3MSwgaDAsIGgxO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhbW91bnQ7IGkrKykge1xuXG4gICAgICAgIHNwcml0ZSA9IGNoaWxkcmVuW3N0YXJ0SW5kZXggKyBpXTtcbiAgICAgICAgdGV4dHVyZSA9IHNwcml0ZS5fdGV4dHVyZTtcbiAgICAgICAgc3ggPSBzcHJpdGUuc2NhbGUueDtcbiAgICAgICAgc3kgPSBzcHJpdGUuc2NhbGUueTtcblxuICAgICAgICBpZiAodGV4dHVyZS50cmltKVxuICAgICAgICB7XG4gICAgICAgICAgICAvLyBpZiB0aGUgc3ByaXRlIGlzIHRyaW1tZWQgdGhlbiB3ZSBuZWVkIHRvIGFkZCB0aGUgZXh0cmEgc3BhY2UgYmVmb3JlIHRyYW5zZm9ybWluZyB0aGUgc3ByaXRlIGNvb3Jkcy4uXG4gICAgICAgICAgICB0cmltID0gdGV4dHVyZS50cmltO1xuXG4gICAgICAgICAgICB3MSA9IHRyaW0ueCAtIHNwcml0ZS5hbmNob3IueCAqIHRyaW0ud2lkdGg7XG4gICAgICAgICAgICB3MCA9IHcxICsgdGV4dHVyZS5jcm9wLndpZHRoO1xuXG4gICAgICAgICAgICBoMSA9IHRyaW0ueSAtIHNwcml0ZS5hbmNob3IueSAqIHRyaW0uaGVpZ2h0O1xuICAgICAgICAgICAgaDAgPSBoMSArIHRleHR1cmUuY3JvcC5oZWlnaHQ7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgICB3MCA9ICh0ZXh0dXJlLl9mcmFtZS53aWR0aCApICogKDEtc3ByaXRlLmFuY2hvci54KTtcbiAgICAgICAgICAgIHcxID0gKHRleHR1cmUuX2ZyYW1lLndpZHRoICkgKiAtc3ByaXRlLmFuY2hvci54O1xuXG4gICAgICAgICAgICBoMCA9IHRleHR1cmUuX2ZyYW1lLmhlaWdodCAqICgxLXNwcml0ZS5hbmNob3IueSk7XG4gICAgICAgICAgICBoMSA9IHRleHR1cmUuX2ZyYW1lLmhlaWdodCAqIC1zcHJpdGUuYW5jaG9yLnk7XG4gICAgICAgIH1cblxuICAgICAgICBhcnJheVtvZmZzZXRdID0gdzEgKiBzeDtcbiAgICAgICAgYXJyYXlbb2Zmc2V0ICsgMV0gPSBoMSAqIHN5O1xuXG4gICAgICAgIGFycmF5W29mZnNldCArIHN0cmlkZV0gPSB3MCAqIHN4O1xuICAgICAgICBhcnJheVtvZmZzZXQgKyBzdHJpZGUgKyAxXSA9IGgxICogc3k7XG5cbiAgICAgICAgYXJyYXlbb2Zmc2V0ICsgc3RyaWRlICogMl0gPSB3MCAqIHN4O1xuICAgICAgICBhcnJheVtvZmZzZXQgKyBzdHJpZGUgKiAyICsgMV0gPSBoMCAqIHN5O1xuXG4gICAgICAgIGFycmF5W29mZnNldCArIHN0cmlkZSAqIDNdID0gdzEgKiBzeDtcbiAgICAgICAgYXJyYXlbb2Zmc2V0ICsgc3RyaWRlICogMyArIDFdID0gaDAgKiBzeTtcblxuICAgICAgICBvZmZzZXQgKz0gc3RyaWRlICogNDtcbiAgICB9XG5cbn07XG5cbi8qKlxuICpcbiAqIEBwYXJhbSBjaGlsZHJlbiB7UElYSS5EaXNwbGF5T2JqZWN0W119IHRoZSBhcnJheSBvZiBkaXNwbGF5IG9iamVjdHMgdG8gcmVuZGVyXG4gKiBAcGFyYW0gc3RhcnRJbmRleCB7bnVtYmVyfSB0aGUgaW5kZXggdG8gc3RhcnQgZnJvbSBpbiB0aGUgY2hpbGRyZW4gYXJyYXlcbiAqIEBwYXJhbSBhbW91bnQge251bWJlcn0gdGhlIGFtb3VudCBvZiBjaGlsZHJlbiB0aGF0IHdpbGwgaGF2ZSB0aGVpciBwb3NpdGlvbnMgdXBsb2FkZWRcbiAqIEBwYXJhbSBhcnJheSB7bnVtYmVyW119XG4gKiBAcGFyYW0gc3RyaWRlIHtudW1iZXJ9XG4gKiBAcGFyYW0gb2Zmc2V0IHtudW1iZXJ9XG4gKi9cblBhcnRpY2xlUmVuZGVyZXIucHJvdG90eXBlLnVwbG9hZFBvc2l0aW9uID0gZnVuY3Rpb24gKGNoaWxkcmVuLHN0YXJ0SW5kZXgsIGFtb3VudCwgYXJyYXksIHN0cmlkZSwgb2Zmc2V0KVxue1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYW1vdW50OyBpKyspXG4gICAge1xuICAgICAgICB2YXIgc3ByaXRlUG9zaXRpb24gPSBjaGlsZHJlbltzdGFydEluZGV4ICsgaV0ucG9zaXRpb247XG5cbiAgICAgICAgYXJyYXlbb2Zmc2V0XSA9IHNwcml0ZVBvc2l0aW9uLng7XG4gICAgICAgIGFycmF5W29mZnNldCArIDFdID0gc3ByaXRlUG9zaXRpb24ueTtcblxuICAgICAgICBhcnJheVtvZmZzZXQgKyBzdHJpZGVdID0gc3ByaXRlUG9zaXRpb24ueDtcbiAgICAgICAgYXJyYXlbb2Zmc2V0ICsgc3RyaWRlICsgMV0gPSBzcHJpdGVQb3NpdGlvbi55O1xuXG4gICAgICAgIGFycmF5W29mZnNldCArIHN0cmlkZSAqIDJdID0gc3ByaXRlUG9zaXRpb24ueDtcbiAgICAgICAgYXJyYXlbb2Zmc2V0ICsgc3RyaWRlICogMiArIDFdID0gc3ByaXRlUG9zaXRpb24ueTtcblxuICAgICAgICBhcnJheVtvZmZzZXQgKyBzdHJpZGUgKiAzXSA9IHNwcml0ZVBvc2l0aW9uLng7XG4gICAgICAgIGFycmF5W29mZnNldCArIHN0cmlkZSAqIDMgKyAxXSA9IHNwcml0ZVBvc2l0aW9uLnk7XG5cbiAgICAgICAgb2Zmc2V0ICs9IHN0cmlkZSAqIDQ7XG4gICAgfVxuXG59O1xuXG4vKipcbiAqXG4gKiBAcGFyYW0gY2hpbGRyZW4ge1BJWEkuRGlzcGxheU9iamVjdFtdfSB0aGUgYXJyYXkgb2YgZGlzcGxheSBvYmplY3RzIHRvIHJlbmRlclxuICogQHBhcmFtIHN0YXJ0SW5kZXgge251bWJlcn0gdGhlIGluZGV4IHRvIHN0YXJ0IGZyb20gaW4gdGhlIGNoaWxkcmVuIGFycmF5XG4gKiBAcGFyYW0gYW1vdW50IHtudW1iZXJ9IHRoZSBhbW91bnQgb2YgY2hpbGRyZW4gdGhhdCB3aWxsIGhhdmUgdGhlaXIgcm90YXRpb24gdXBsb2FkZWRcbiAqIEBwYXJhbSBhcnJheSB7bnVtYmVyW119XG4gKiBAcGFyYW0gc3RyaWRlIHtudW1iZXJ9XG4gKiBAcGFyYW0gb2Zmc2V0IHtudW1iZXJ9XG4gKi9cblBhcnRpY2xlUmVuZGVyZXIucHJvdG90eXBlLnVwbG9hZFJvdGF0aW9uID0gZnVuY3Rpb24gKGNoaWxkcmVuLHN0YXJ0SW5kZXgsIGFtb3VudCwgYXJyYXksIHN0cmlkZSwgb2Zmc2V0KVxue1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYW1vdW50OyBpKyspXG4gICAge1xuICAgICAgICB2YXIgc3ByaXRlUm90YXRpb24gPSBjaGlsZHJlbltzdGFydEluZGV4ICsgaV0ucm90YXRpb247XG5cblxuICAgICAgICBhcnJheVtvZmZzZXRdID0gc3ByaXRlUm90YXRpb247XG4gICAgICAgIGFycmF5W29mZnNldCArIHN0cmlkZV0gPSBzcHJpdGVSb3RhdGlvbjtcbiAgICAgICAgYXJyYXlbb2Zmc2V0ICsgc3RyaWRlICogMl0gPSBzcHJpdGVSb3RhdGlvbjtcbiAgICAgICAgYXJyYXlbb2Zmc2V0ICsgc3RyaWRlICogM10gPSBzcHJpdGVSb3RhdGlvbjtcblxuICAgICAgICBvZmZzZXQgKz0gc3RyaWRlICogNDtcbiAgICB9XG59O1xuXG4vKipcbiAqXG4gKiBAcGFyYW0gY2hpbGRyZW4ge1BJWEkuRGlzcGxheU9iamVjdFtdfSB0aGUgYXJyYXkgb2YgZGlzcGxheSBvYmplY3RzIHRvIHJlbmRlclxuICogQHBhcmFtIHN0YXJ0SW5kZXgge251bWJlcn0gdGhlIGluZGV4IHRvIHN0YXJ0IGZyb20gaW4gdGhlIGNoaWxkcmVuIGFycmF5XG4gKiBAcGFyYW0gYW1vdW50IHtudW1iZXJ9IHRoZSBhbW91bnQgb2YgY2hpbGRyZW4gdGhhdCB3aWxsIGhhdmUgdGhlaXIgVXZzIHVwbG9hZGVkXG4gKiBAcGFyYW0gYXJyYXkge251bWJlcltdfVxuICogQHBhcmFtIHN0cmlkZSB7bnVtYmVyfVxuICogQHBhcmFtIG9mZnNldCB7bnVtYmVyfVxuICovXG5QYXJ0aWNsZVJlbmRlcmVyLnByb3RvdHlwZS51cGxvYWRVdnMgPSBmdW5jdGlvbiAoY2hpbGRyZW4sc3RhcnRJbmRleCwgYW1vdW50LCBhcnJheSwgc3RyaWRlLCBvZmZzZXQpXG57XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhbW91bnQ7IGkrKylcbiAgICB7XG4gICAgICAgIHZhciB0ZXh0dXJlVXZzID0gY2hpbGRyZW5bc3RhcnRJbmRleCArIGldLl90ZXh0dXJlLl91dnM7XG5cbiAgICAgICAgaWYgKHRleHR1cmVVdnMpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGFycmF5W29mZnNldF0gPSB0ZXh0dXJlVXZzLngwO1xuICAgICAgICAgICAgYXJyYXlbb2Zmc2V0ICsgMV0gPSB0ZXh0dXJlVXZzLnkwO1xuXG4gICAgICAgICAgICBhcnJheVtvZmZzZXQgKyBzdHJpZGVdID0gdGV4dHVyZVV2cy54MTtcbiAgICAgICAgICAgIGFycmF5W29mZnNldCArIHN0cmlkZSArIDFdID0gdGV4dHVyZVV2cy55MTtcblxuICAgICAgICAgICAgYXJyYXlbb2Zmc2V0ICsgc3RyaWRlICogMl0gPSB0ZXh0dXJlVXZzLngyO1xuICAgICAgICAgICAgYXJyYXlbb2Zmc2V0ICsgc3RyaWRlICogMiArIDFdID0gdGV4dHVyZVV2cy55MjtcblxuICAgICAgICAgICAgYXJyYXlbb2Zmc2V0ICsgc3RyaWRlICogM10gPSB0ZXh0dXJlVXZzLngzO1xuICAgICAgICAgICAgYXJyYXlbb2Zmc2V0ICsgc3RyaWRlICogMyArIDFdID0gdGV4dHVyZVV2cy55MztcblxuICAgICAgICAgICAgb2Zmc2V0ICs9IHN0cmlkZSAqIDQ7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgICAvL1RPRE8geW91IGtub3cgdGhpcyBjYW4gYmUgZWFzaWVyIVxuICAgICAgICAgICAgYXJyYXlbb2Zmc2V0XSA9IDA7XG4gICAgICAgICAgICBhcnJheVtvZmZzZXQgKyAxXSA9IDA7XG5cbiAgICAgICAgICAgIGFycmF5W29mZnNldCArIHN0cmlkZV0gPSAwO1xuICAgICAgICAgICAgYXJyYXlbb2Zmc2V0ICsgc3RyaWRlICsgMV0gPSAwO1xuXG4gICAgICAgICAgICBhcnJheVtvZmZzZXQgKyBzdHJpZGUgKiAyXSA9IDA7XG4gICAgICAgICAgICBhcnJheVtvZmZzZXQgKyBzdHJpZGUgKiAyICsgMV0gPSAwO1xuXG4gICAgICAgICAgICBhcnJheVtvZmZzZXQgKyBzdHJpZGUgKiAzXSA9IDA7XG4gICAgICAgICAgICBhcnJheVtvZmZzZXQgKyBzdHJpZGUgKiAzICsgMV0gPSAwO1xuXG4gICAgICAgICAgICBvZmZzZXQgKz0gc3RyaWRlICogNDtcbiAgICAgICAgfVxuICAgIH1cbn07XG5cbi8qKlxuICpcbiAqIEBwYXJhbSBjaGlsZHJlbiB7UElYSS5EaXNwbGF5T2JqZWN0W119IHRoZSBhcnJheSBvZiBkaXNwbGF5IG9iamVjdHMgdG8gcmVuZGVyXG4gKiBAcGFyYW0gc3RhcnRJbmRleCB7bnVtYmVyfSB0aGUgaW5kZXggdG8gc3RhcnQgZnJvbSBpbiB0aGUgY2hpbGRyZW4gYXJyYXlcbiAqIEBwYXJhbSBhbW91bnQge251bWJlcn0gdGhlIGFtb3VudCBvZiBjaGlsZHJlbiB0aGF0IHdpbGwgaGF2ZSB0aGVpciBhbHBoYSB1cGxvYWRlZFxuICogQHBhcmFtIGFycmF5IHtudW1iZXJbXX1cbiAqIEBwYXJhbSBzdHJpZGUge251bWJlcn1cbiAqIEBwYXJhbSBvZmZzZXQge251bWJlcn1cbiAqL1xuUGFydGljbGVSZW5kZXJlci5wcm90b3R5cGUudXBsb2FkQWxwaGEgPSBmdW5jdGlvbiAoY2hpbGRyZW4sc3RhcnRJbmRleCwgYW1vdW50LCBhcnJheSwgc3RyaWRlLCBvZmZzZXQpXG57XG4gICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYW1vdW50OyBpKyspXG4gICAgIHtcbiAgICAgICAgdmFyIHNwcml0ZUFscGhhID0gY2hpbGRyZW5bc3RhcnRJbmRleCArIGldLmFscGhhO1xuXG4gICAgICAgIGFycmF5W29mZnNldF0gPSBzcHJpdGVBbHBoYTtcbiAgICAgICAgYXJyYXlbb2Zmc2V0ICsgc3RyaWRlXSA9IHNwcml0ZUFscGhhO1xuICAgICAgICBhcnJheVtvZmZzZXQgKyBzdHJpZGUgKiAyXSA9IHNwcml0ZUFscGhhO1xuICAgICAgICBhcnJheVtvZmZzZXQgKyBzdHJpZGUgKiAzXSA9IHNwcml0ZUFscGhhO1xuXG4gICAgICAgIG9mZnNldCArPSBzdHJpZGUgKiA0O1xuICAgIH1cbn07XG5cblxuLyoqXG4gKiBEZXN0cm95cyB0aGUgUGFydGljbGVSZW5kZXJlci5cbiAqXG4gKi9cblBhcnRpY2xlUmVuZGVyZXIucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoKVxue1xuICAgIGlmICh0aGlzLnJlbmRlcmVyLmdsKSB7XG4gICAgICAgIHRoaXMucmVuZGVyZXIuZ2wuZGVsZXRlQnVmZmVyKHRoaXMuaW5kZXhCdWZmZXIpO1xuICAgIH1cblxuICAgIE9iamVjdFJlbmRlcmVyLnByb3RvdHlwZS5kZXN0cm95LmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG5cbiAgICB0aGlzLnNoYWRlci5kZXN0cm95KCk7XG5cbiAgICB0aGlzLmluZGljZXMgPSBudWxsO1xuICAgIHRoaXMudGVtcE1hdHJpeCA9IG51bGw7XG59O1xuIiwidmFyIFRleHR1cmVTaGFkZXIgPSByZXF1aXJlKCcuLi8uLi9yZW5kZXJlcnMvd2ViZ2wvc2hhZGVycy9UZXh0dXJlU2hhZGVyJyk7XG5cbi8qKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLlRleHR1cmVTaGFkZXJcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gc2hhZGVyTWFuYWdlciB7U2hhZGVyTWFuYWdlcn0gVGhlIHdlYmdsIHNoYWRlciBtYW5hZ2VyIHRoaXMgc2hhZGVyIHdvcmtzIGZvci5cbiAqL1xuZnVuY3Rpb24gUGFydGljbGVTaGFkZXIoc2hhZGVyTWFuYWdlcilcbntcbiAgICBUZXh0dXJlU2hhZGVyLmNhbGwodGhpcyxcbiAgICAgICAgc2hhZGVyTWFuYWdlcixcbiAgICAgICAgLy8gdmVydGV4IHNoYWRlclxuICAgICAgICBbXG4gICAgICAgICAgICAnYXR0cmlidXRlIHZlYzIgYVZlcnRleFBvc2l0aW9uOycsXG4gICAgICAgICAgICAnYXR0cmlidXRlIHZlYzIgYVRleHR1cmVDb29yZDsnLFxuICAgICAgICAgICAgJ2F0dHJpYnV0ZSBmbG9hdCBhQ29sb3I7JyxcblxuICAgICAgICAgICAgJ2F0dHJpYnV0ZSB2ZWMyIGFQb3NpdGlvbkNvb3JkOycsXG4gICAgICAgICAgICAnYXR0cmlidXRlIHZlYzIgYVNjYWxlOycsXG4gICAgICAgICAgICAnYXR0cmlidXRlIGZsb2F0IGFSb3RhdGlvbjsnLFxuXG4gICAgICAgICAgICAndW5pZm9ybSBtYXQzIHByb2plY3Rpb25NYXRyaXg7JyxcblxuICAgICAgICAgICAgJ3ZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkOycsXG4gICAgICAgICAgICAndmFyeWluZyBmbG9hdCB2Q29sb3I7JyxcblxuICAgICAgICAgICAgJ3ZvaWQgbWFpbih2b2lkKXsnLFxuICAgICAgICAgICAgJyAgIHZlYzIgdiA9IGFWZXJ0ZXhQb3NpdGlvbjsnLFxuXG4gICAgICAgICAgICAnICAgdi54ID0gKGFWZXJ0ZXhQb3NpdGlvbi54KSAqIGNvcyhhUm90YXRpb24pIC0gKGFWZXJ0ZXhQb3NpdGlvbi55KSAqIHNpbihhUm90YXRpb24pOycsXG4gICAgICAgICAgICAnICAgdi55ID0gKGFWZXJ0ZXhQb3NpdGlvbi54KSAqIHNpbihhUm90YXRpb24pICsgKGFWZXJ0ZXhQb3NpdGlvbi55KSAqIGNvcyhhUm90YXRpb24pOycsXG4gICAgICAgICAgICAnICAgdiA9IHYgKyBhUG9zaXRpb25Db29yZDsnLFxuXG4gICAgICAgICAgICAnICAgZ2xfUG9zaXRpb24gPSB2ZWM0KChwcm9qZWN0aW9uTWF0cml4ICogdmVjMyh2LCAxLjApKS54eSwgMC4wLCAxLjApOycsXG5cbiAgICAgICAgICAgICcgICB2VGV4dHVyZUNvb3JkID0gYVRleHR1cmVDb29yZDsnLFxuICAgICAgICAgICAgJyAgIHZDb2xvciA9IGFDb2xvcjsnLFxuICAgICAgICAgICAgJ30nXG4gICAgICAgIF0uam9pbignXFxuJyksXG4gICAgICAgIC8vIGhlbGxvXG4gICAgICAgICBbXG4gICAgICAgICAgICAncHJlY2lzaW9uIGxvd3AgZmxvYXQ7JyxcblxuICAgICAgICAgICAgJ3ZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkOycsXG4gICAgICAgICAgICAndmFyeWluZyBmbG9hdCB2Q29sb3I7JyxcblxuICAgICAgICAgICAgJ3VuaWZvcm0gc2FtcGxlcjJEIHVTYW1wbGVyOycsXG4gICAgICAgICAgICAndW5pZm9ybSBmbG9hdCB1QWxwaGE7JyxcblxuICAgICAgICAgICAgJ3ZvaWQgbWFpbih2b2lkKXsnLFxuICAgICAgICAgICAgJyAgdmVjNCBjb2xvciA9IHRleHR1cmUyRCh1U2FtcGxlciwgdlRleHR1cmVDb29yZCkgKiB2Q29sb3IgKiB1QWxwaGE7JyxcbiAgICAgICAgICAgICcgIGlmIChjb2xvci5hID09IDAuMCkgZGlzY2FyZDsnLFxuICAgICAgICAgICAgJyAgZ2xfRnJhZ0NvbG9yID0gY29sb3I7JyxcbiAgICAgICAgICAgICd9J1xuICAgICAgICBdLmpvaW4oJ1xcbicpLFxuICAgICAgICAvLyBjdXN0b20gdW5pZm9ybXNcbiAgICAgICAge1xuICAgICAgICAgICAgdUFscGhhOiAgeyB0eXBlOiAnMWYnLCB2YWx1ZTogMSB9XG4gICAgICAgIH0sXG4gICAgICAgIC8vIGN1c3RvbSBhdHRyaWJ1dGVzXG4gICAgICAgIHtcbiAgICAgICAgICAgIGFQb3NpdGlvbkNvb3JkOiAwLFxuICAgICAgICAgICAvLyBhU2NhbGU6ICAgICAgICAgMCxcbiAgICAgICAgICAgIGFSb3RhdGlvbjogICAgICAwXG4gICAgICAgIH1cbiAgICApO1xuXG4gICAgLy8gVEVNUCBIQUNLXG5cbn1cblxuUGFydGljbGVTaGFkZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShUZXh0dXJlU2hhZGVyLnByb3RvdHlwZSk7XG5QYXJ0aWNsZVNoYWRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBQYXJ0aWNsZVNoYWRlcjtcblxubW9kdWxlLmV4cG9ydHMgPSBQYXJ0aWNsZVNoYWRlcjtcbiIsInZhciB1dGlscyA9IHJlcXVpcmUoJy4uL3V0aWxzJyksXG4gICAgbWF0aCA9IHJlcXVpcmUoJy4uL21hdGgnKSxcbiAgICBDT05TVCA9IHJlcXVpcmUoJy4uL2NvbnN0JyksXG4gICAgRXZlbnRFbWl0dGVyID0gcmVxdWlyZSgnZXZlbnRlbWl0dGVyMycpO1xuXG4vKipcbiAqIFRoZSBDYW52YXNSZW5kZXJlciBkcmF3cyB0aGUgc2NlbmUgYW5kIGFsbCBpdHMgY29udGVudCBvbnRvIGEgMmQgY2FudmFzLiBUaGlzIHJlbmRlcmVyIHNob3VsZCBiZSB1c2VkIGZvciBicm93c2VycyB0aGF0IGRvIG5vdCBzdXBwb3J0IHdlYkdMLlxuICogRG9uJ3QgZm9yZ2V0IHRvIGFkZCB0aGUgQ2FudmFzUmVuZGVyZXIudmlldyB0byB5b3VyIERPTSBvciB5b3Ugd2lsbCBub3Qgc2VlIGFueXRoaW5nIDopXG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIHN5c3RlbSB7c3RyaW5nfSBUaGUgbmFtZSBvZiB0aGUgc3lzdGVtIHRoaXMgcmVuZGVyZXIgaXMgZm9yLlxuICogQHBhcmFtIFt3aWR0aD04MDBdIHtudW1iZXJ9IHRoZSB3aWR0aCBvZiB0aGUgY2FudmFzIHZpZXdcbiAqIEBwYXJhbSBbaGVpZ2h0PTYwMF0ge251bWJlcn0gdGhlIGhlaWdodCBvZiB0aGUgY2FudmFzIHZpZXdcbiAqIEBwYXJhbSBbb3B0aW9uc10ge29iamVjdH0gVGhlIG9wdGlvbmFsIHJlbmRlcmVyIHBhcmFtZXRlcnNcbiAqIEBwYXJhbSBbb3B0aW9ucy52aWV3XSB7SFRNTENhbnZhc0VsZW1lbnR9IHRoZSBjYW52YXMgdG8gdXNlIGFzIGEgdmlldywgb3B0aW9uYWxcbiAqIEBwYXJhbSBbb3B0aW9ucy50cmFuc3BhcmVudD1mYWxzZV0ge2Jvb2xlYW59IElmIHRoZSByZW5kZXIgdmlldyBpcyB0cmFuc3BhcmVudCwgZGVmYXVsdCBmYWxzZVxuICogQHBhcmFtIFtvcHRpb25zLmF1dG9SZXNpemU9ZmFsc2VdIHtib29sZWFufSBJZiB0aGUgcmVuZGVyIHZpZXcgaXMgYXV0b21hdGljYWxseSByZXNpemVkLCBkZWZhdWx0IGZhbHNlXG4gKiBAcGFyYW0gW29wdGlvbnMuYW50aWFsaWFzPWZhbHNlXSB7Ym9vbGVhbn0gc2V0cyBhbnRpYWxpYXMgKG9ubHkgYXBwbGljYWJsZSBpbiBjaHJvbWUgYXQgdGhlIG1vbWVudClcbiAqIEBwYXJhbSBbb3B0aW9ucy5yZXNvbHV0aW9uPTFdIHtudW1iZXJ9IHRoZSByZXNvbHV0aW9uIG9mIHRoZSByZW5kZXJlciByZXRpbmEgd291bGQgYmUgMlxuICogQHBhcmFtIFtvcHRpb25zLmNsZWFyQmVmb3JlUmVuZGVyPXRydWVdIHtib29sZWFufSBUaGlzIHNldHMgaWYgdGhlIENhbnZhc1JlbmRlcmVyIHdpbGwgY2xlYXIgdGhlIGNhbnZhcyBvclxuICogICAgICBub3QgYmVmb3JlIHRoZSBuZXcgcmVuZGVyIHBhc3MuXG4gKiBAcGFyYW0gW29wdGlvbnMuYmFja2dyb3VuZENvbG9yPTB4MDAwMDAwXSB7bnVtYmVyfSBUaGUgYmFja2dyb3VuZCBjb2xvciBvZiB0aGUgcmVuZGVyZWQgYXJlYSAoc2hvd24gaWYgbm90IHRyYW5zcGFyZW50KS5cbiAqIEBwYXJhbSBbb3B0aW9ucy5yb3VuZFBpeGVscz1mYWxzZV0ge2Jvb2xlYW59IElmIHRydWUgUGl4aSB3aWxsIE1hdGguZmxvb3IoKSB4L3kgdmFsdWVzIHdoZW4gcmVuZGVyaW5nLCBzdG9wcGluZyBwaXhlbCBpbnRlcnBvbGF0aW9uLlxuICovXG5mdW5jdGlvbiBTeXN0ZW1SZW5kZXJlcihzeXN0ZW0sIHdpZHRoLCBoZWlnaHQsIG9wdGlvbnMpXG57XG4gICAgRXZlbnRFbWl0dGVyLmNhbGwodGhpcyk7XG5cbiAgICB1dGlscy5zYXlIZWxsbyhzeXN0ZW0pO1xuXG4gICAgLy8gcHJlcGFyZSBvcHRpb25zXG4gICAgaWYgKG9wdGlvbnMpXG4gICAge1xuICAgICAgICBmb3IgKHZhciBpIGluIENPTlNULkRFRkFVTFRfUkVOREVSX09QVElPTlMpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGlmICh0eXBlb2Ygb3B0aW9uc1tpXSA9PT0gJ3VuZGVmaW5lZCcpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgb3B0aW9uc1tpXSA9IENPTlNULkRFRkFVTFRfUkVOREVSX09QVElPTlNbaV07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgb3B0aW9ucyA9IENPTlNULkRFRkFVTFRfUkVOREVSX09QVElPTlM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhlIHR5cGUgb2YgdGhlIHJlbmRlcmVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IFBJWEkuUkVOREVSRVJfVFlQRS5VTktOT1dOXG4gICAgICogQHNlZSBQSVhJLlJFTkRFUkVSX1RZUEVcbiAgICAgKi9cbiAgICB0aGlzLnR5cGUgPSBDT05TVC5SRU5ERVJFUl9UWVBFLlVOS05PV047XG5cbiAgICAvKipcbiAgICAgKiBUaGUgd2lkdGggb2YgdGhlIGNhbnZhcyB2aWV3XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgODAwXG4gICAgICovXG4gICAgdGhpcy53aWR0aCA9IHdpZHRoIHx8IDgwMDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBoZWlnaHQgb2YgdGhlIGNhbnZhcyB2aWV3XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgNjAwXG4gICAgICovXG4gICAgdGhpcy5oZWlnaHQgPSBoZWlnaHQgfHwgNjAwO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGNhbnZhcyBlbGVtZW50IHRoYXQgZXZlcnl0aGluZyBpcyBkcmF3biB0b1xuICAgICAqXG4gICAgICogQG1lbWJlciB7SFRNTENhbnZhc0VsZW1lbnR9XG4gICAgICovXG4gICAgdGhpcy52aWV3ID0gb3B0aW9ucy52aWV3IHx8IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NhbnZhcycpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHJlc29sdXRpb24gb2YgdGhlIHJlbmRlcmVyXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMVxuICAgICAqL1xuICAgIHRoaXMucmVzb2x1dGlvbiA9IG9wdGlvbnMucmVzb2x1dGlvbjtcblxuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgdGhlIHJlbmRlciB2aWV3IGlzIHRyYW5zcGFyZW50XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqL1xuICAgIHRoaXMudHJhbnNwYXJlbnQgPSBvcHRpb25zLnRyYW5zcGFyZW50O1xuXG4gICAgLyoqXG4gICAgICogV2hldGhlciB0aGUgcmVuZGVyIHZpZXcgc2hvdWxkIGJlIHJlc2l6ZWQgYXV0b21hdGljYWxseVxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKi9cbiAgICB0aGlzLmF1dG9SZXNpemUgPSBvcHRpb25zLmF1dG9SZXNpemUgfHwgZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBUcmFja3MgdGhlIGJsZW5kIG1vZGVzIHVzZWZ1bCBmb3IgdGhpcyByZW5kZXJlci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge29iamVjdDxzdHJpbmcsIG1peGVkPn1cbiAgICAgKi9cbiAgICB0aGlzLmJsZW5kTW9kZXMgPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHZhbHVlIG9mIHRoZSBwcmVzZXJ2ZURyYXdpbmdCdWZmZXIgZmxhZyBhZmZlY3RzIHdoZXRoZXIgb3Igbm90IHRoZSBjb250ZW50cyBvZiB0aGUgc3RlbmNpbCBidWZmZXIgaXMgcmV0YWluZWQgYWZ0ZXIgcmVuZGVyaW5nLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKi9cbiAgICB0aGlzLnByZXNlcnZlRHJhd2luZ0J1ZmZlciA9IG9wdGlvbnMucHJlc2VydmVEcmF3aW5nQnVmZmVyO1xuXG4gICAgLyoqXG4gICAgICogVGhpcyBzZXRzIGlmIHRoZSBDYW52YXNSZW5kZXJlciB3aWxsIGNsZWFyIHRoZSBjYW52YXMgb3Igbm90IGJlZm9yZSB0aGUgbmV3IHJlbmRlciBwYXNzLlxuICAgICAqIElmIHRoZSBzY2VuZSBpcyBOT1QgdHJhbnNwYXJlbnQgUGl4aSB3aWxsIHVzZSBhIGNhbnZhcyBzaXplZCBmaWxsUmVjdCBvcGVyYXRpb24gZXZlcnkgZnJhbWUgdG8gc2V0IHRoZSBjYW52YXMgYmFja2dyb3VuZCBjb2xvci5cbiAgICAgKiBJZiB0aGUgc2NlbmUgaXMgdHJhbnNwYXJlbnQgUGl4aSB3aWxsIHVzZSBjbGVhclJlY3QgdG8gY2xlYXIgdGhlIGNhbnZhcyBldmVyeSBmcmFtZS5cbiAgICAgKiBEaXNhYmxlIHRoaXMgYnkgc2V0dGluZyB0aGlzIHRvIGZhbHNlLiBGb3IgZXhhbXBsZSBpZiB5b3VyIGdhbWUgaGFzIGEgY2FudmFzIGZpbGxpbmcgYmFja2dyb3VuZCBpbWFnZSB5b3Ugb2Z0ZW4gZG9uJ3QgbmVlZCB0aGlzIHNldC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICogQGRlZmF1bHRcbiAgICAgKi9cbiAgICB0aGlzLmNsZWFyQmVmb3JlUmVuZGVyID0gb3B0aW9ucy5jbGVhckJlZm9yZVJlbmRlcjtcblxuICAgIC8qKlxuICAgICAqIElmIHRydWUgUGl4aSB3aWxsIE1hdGguZmxvb3IoKSB4L3kgdmFsdWVzIHdoZW4gcmVuZGVyaW5nLCBzdG9wcGluZyBwaXhlbCBpbnRlcnBvbGF0aW9uLlxuICAgICAqIEhhbmR5IGZvciBjcmlzcCBwaXhlbCBhcnQgYW5kIHNwZWVkIG9uIGxlZ2FjeSBkZXZpY2VzLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKi9cbiAgICB0aGlzLnJvdW5kUGl4ZWxzID0gb3B0aW9ucy5yb3VuZFBpeGVscztcblxuICAgIC8qKlxuICAgICAqIFRoZSBiYWNrZ3JvdW5kIGNvbG9yIGFzIGEgbnVtYmVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fYmFja2dyb3VuZENvbG9yID0gMHgwMDAwMDA7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYmFja2dyb3VuZCBjb2xvciBhcyBhbiBbUiwgRywgQl0gYXJyYXkuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJbXX1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX2JhY2tncm91bmRDb2xvclJnYmEgPSBbMCwgMCwgMCwgMF07XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYmFja2dyb3VuZCBjb2xvciBhcyBhIHN0cmluZy5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge3N0cmluZ31cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX2JhY2tncm91bmRDb2xvclN0cmluZyA9ICcjMDAwMDAwJztcblxuICAgIHRoaXMuYmFja2dyb3VuZENvbG9yID0gb3B0aW9ucy5iYWNrZ3JvdW5kQ29sb3IgfHwgdGhpcy5fYmFja2dyb3VuZENvbG9yOyAvLyBydW4gYmcgY29sb3Igc2V0dGVyXG5cbiAgICAvKipcbiAgICAgKiBUaGlzIHRlbXBvcmFyeSBkaXNwbGF5IG9iamVjdCB1c2VkIGFzIHRoZSBwYXJlbnQgb2YgdGhlIGN1cnJlbnRseSBiZWluZyByZW5kZXJlZCBpdGVtXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLkRpc3BsYXlPYmplY3R9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl90ZW1wRGlzcGxheU9iamVjdFBhcmVudCA9IHt3b3JsZFRyYW5zZm9ybTpuZXcgbWF0aC5NYXRyaXgoKSwgd29ybGRBbHBoYToxLCBjaGlsZHJlbjpbXX07XG5cbiAgICAvKipcbiAgICAgKiBUaGUgbGFzdCByb290IG9iamVjdCB0aGF0IHRoZSByZW5kZXJlciB0cmllZCB0byByZW5kZXIuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLkRpc3BsYXlPYmplY3R9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9sYXN0T2JqZWN0UmVuZGVyZWQgPSB0aGlzLl90ZW1wRGlzcGxheU9iamVjdFBhcmVudDtcbn1cblxuLy8gY29uc3RydWN0b3JcblN5c3RlbVJlbmRlcmVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoRXZlbnRFbWl0dGVyLnByb3RvdHlwZSk7XG5TeXN0ZW1SZW5kZXJlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBTeXN0ZW1SZW5kZXJlcjtcbm1vZHVsZS5leHBvcnRzID0gU3lzdGVtUmVuZGVyZXI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKFN5c3RlbVJlbmRlcmVyLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFRoZSBiYWNrZ3JvdW5kIGNvbG9yIHRvIGZpbGwgaWYgbm90IHRyYW5zcGFyZW50XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuU3lzdGVtUmVuZGVyZXIjXG4gICAgICovXG4gICAgYmFja2dyb3VuZENvbG9yOlxuICAgIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fYmFja2dyb3VuZENvbG9yO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWwpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuX2JhY2tncm91bmRDb2xvciA9IHZhbDtcbiAgICAgICAgICAgIHRoaXMuX2JhY2tncm91bmRDb2xvclN0cmluZyA9IHV0aWxzLmhleDJzdHJpbmcodmFsKTtcbiAgICAgICAgICAgIHV0aWxzLmhleDJyZ2IodmFsLCB0aGlzLl9iYWNrZ3JvdW5kQ29sb3JSZ2JhKTtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuXG4vKipcbiAqIFJlc2l6ZXMgdGhlIGNhbnZhcyB2aWV3IHRvIHRoZSBzcGVjaWZpZWQgd2lkdGggYW5kIGhlaWdodFxuICpcbiAqIEBwYXJhbSB3aWR0aCB7bnVtYmVyfSB0aGUgbmV3IHdpZHRoIG9mIHRoZSBjYW52YXMgdmlld1xuICogQHBhcmFtIGhlaWdodCB7bnVtYmVyfSB0aGUgbmV3IGhlaWdodCBvZiB0aGUgY2FudmFzIHZpZXdcbiAqL1xuU3lzdGVtUmVuZGVyZXIucHJvdG90eXBlLnJlc2l6ZSA9IGZ1bmN0aW9uICh3aWR0aCwgaGVpZ2h0KSB7XG4gICAgdGhpcy53aWR0aCA9IHdpZHRoICogdGhpcy5yZXNvbHV0aW9uO1xuICAgIHRoaXMuaGVpZ2h0ID0gaGVpZ2h0ICogdGhpcy5yZXNvbHV0aW9uO1xuXG4gICAgdGhpcy52aWV3LndpZHRoID0gdGhpcy53aWR0aDtcbiAgICB0aGlzLnZpZXcuaGVpZ2h0ID0gdGhpcy5oZWlnaHQ7XG5cbiAgICBpZiAodGhpcy5hdXRvUmVzaXplKVxuICAgIHtcbiAgICAgICAgdGhpcy52aWV3LnN0eWxlLndpZHRoID0gdGhpcy53aWR0aCAvIHRoaXMucmVzb2x1dGlvbiArICdweCc7XG4gICAgICAgIHRoaXMudmlldy5zdHlsZS5oZWlnaHQgPSB0aGlzLmhlaWdodCAvIHRoaXMucmVzb2x1dGlvbiArICdweCc7XG4gICAgfVxufTtcblxuLyoqXG4gKiBSZW1vdmVzIGV2ZXJ5dGhpbmcgZnJvbSB0aGUgcmVuZGVyZXIgYW5kIG9wdGlvbmFsbHkgcmVtb3ZlcyB0aGUgQ2FudmFzIERPTSBlbGVtZW50LlxuICpcbiAqIEBwYXJhbSBbcmVtb3ZlVmlldz1mYWxzZV0ge2Jvb2xlYW59IFJlbW92ZXMgdGhlIENhbnZhcyBlbGVtZW50IGZyb20gdGhlIERPTS5cbiAqL1xuU3lzdGVtUmVuZGVyZXIucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAocmVtb3ZlVmlldykge1xuICAgIGlmIChyZW1vdmVWaWV3ICYmIHRoaXMudmlldy5wYXJlbnROb2RlKVxuICAgIHtcbiAgICAgICAgdGhpcy52aWV3LnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodGhpcy52aWV3KTtcbiAgICB9XG5cbiAgICB0aGlzLnR5cGUgPSBDT05TVC5SRU5ERVJFUl9UWVBFLlVOS05PV047XG5cbiAgICB0aGlzLndpZHRoID0gMDtcbiAgICB0aGlzLmhlaWdodCA9IDA7XG5cbiAgICB0aGlzLnZpZXcgPSBudWxsO1xuXG4gICAgdGhpcy5yZXNvbHV0aW9uID0gMDtcblxuICAgIHRoaXMudHJhbnNwYXJlbnQgPSBmYWxzZTtcblxuICAgIHRoaXMuYXV0b1Jlc2l6ZSA9IGZhbHNlO1xuXG4gICAgdGhpcy5ibGVuZE1vZGVzID0gbnVsbDtcblxuICAgIHRoaXMucHJlc2VydmVEcmF3aW5nQnVmZmVyID0gZmFsc2U7XG4gICAgdGhpcy5jbGVhckJlZm9yZVJlbmRlciA9IGZhbHNlO1xuXG4gICAgdGhpcy5yb3VuZFBpeGVscyA9IGZhbHNlO1xuXG4gICAgdGhpcy5fYmFja2dyb3VuZENvbG9yID0gMDtcbiAgICB0aGlzLl9iYWNrZ3JvdW5kQ29sb3JSZ2JhID0gbnVsbDtcbiAgICB0aGlzLl9iYWNrZ3JvdW5kQ29sb3JTdHJpbmcgPSBudWxsO1xufTtcbiIsInZhciBTeXN0ZW1SZW5kZXJlciA9IHJlcXVpcmUoJy4uL1N5c3RlbVJlbmRlcmVyJyksXG4gICAgQ2FudmFzTWFza01hbmFnZXIgPSByZXF1aXJlKCcuL3V0aWxzL0NhbnZhc01hc2tNYW5hZ2VyJyksXG4gICAgdXRpbHMgPSByZXF1aXJlKCcuLi8uLi91dGlscycpLFxuICAgIG1hdGggPSByZXF1aXJlKCcuLi8uLi9tYXRoJyksXG4gICAgQ09OU1QgPSByZXF1aXJlKCcuLi8uLi9jb25zdCcpO1xuXG4vKipcbiAqIFRoZSBDYW52YXNSZW5kZXJlciBkcmF3cyB0aGUgc2NlbmUgYW5kIGFsbCBpdHMgY29udGVudCBvbnRvIGEgMmQgY2FudmFzLiBUaGlzIHJlbmRlcmVyIHNob3VsZCBiZSB1c2VkIGZvciBicm93c2VycyB0aGF0IGRvIG5vdCBzdXBwb3J0IHdlYkdMLlxuICogRG9uJ3QgZm9yZ2V0IHRvIGFkZCB0aGUgQ2FudmFzUmVuZGVyZXIudmlldyB0byB5b3VyIERPTSBvciB5b3Ugd2lsbCBub3Qgc2VlIGFueXRoaW5nIDopXG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQGV4dGVuZHMgUElYSS5TeXN0ZW1SZW5kZXJlclxuICogQHBhcmFtIFt3aWR0aD04MDBdIHtudW1iZXJ9IHRoZSB3aWR0aCBvZiB0aGUgY2FudmFzIHZpZXdcbiAqIEBwYXJhbSBbaGVpZ2h0PTYwMF0ge251bWJlcn0gdGhlIGhlaWdodCBvZiB0aGUgY2FudmFzIHZpZXdcbiAqIEBwYXJhbSBbb3B0aW9uc10ge29iamVjdH0gVGhlIG9wdGlvbmFsIHJlbmRlcmVyIHBhcmFtZXRlcnNcbiAqIEBwYXJhbSBbb3B0aW9ucy52aWV3XSB7SFRNTENhbnZhc0VsZW1lbnR9IHRoZSBjYW52YXMgdG8gdXNlIGFzIGEgdmlldywgb3B0aW9uYWxcbiAqIEBwYXJhbSBbb3B0aW9ucy50cmFuc3BhcmVudD1mYWxzZV0ge2Jvb2xlYW59IElmIHRoZSByZW5kZXIgdmlldyBpcyB0cmFuc3BhcmVudCwgZGVmYXVsdCBmYWxzZVxuICogQHBhcmFtIFtvcHRpb25zLmF1dG9SZXNpemU9ZmFsc2VdIHtib29sZWFufSBJZiB0aGUgcmVuZGVyIHZpZXcgaXMgYXV0b21hdGljYWxseSByZXNpemVkLCBkZWZhdWx0IGZhbHNlXG4gKiBAcGFyYW0gW29wdGlvbnMuYW50aWFsaWFzPWZhbHNlXSB7Ym9vbGVhbn0gc2V0cyBhbnRpYWxpYXMgKG9ubHkgYXBwbGljYWJsZSBpbiBjaHJvbWUgYXQgdGhlIG1vbWVudClcbiAqIEBwYXJhbSBbb3B0aW9ucy5yZXNvbHV0aW9uPTFdIHtudW1iZXJ9IHRoZSByZXNvbHV0aW9uIG9mIHRoZSByZW5kZXJlciByZXRpbmEgd291bGQgYmUgMlxuICogQHBhcmFtIFtvcHRpb25zLmNsZWFyQmVmb3JlUmVuZGVyPXRydWVdIHtib29sZWFufSBUaGlzIHNldHMgaWYgdGhlIENhbnZhc1JlbmRlcmVyIHdpbGwgY2xlYXIgdGhlIGNhbnZhcyBvclxuICogICAgICBub3QgYmVmb3JlIHRoZSBuZXcgcmVuZGVyIHBhc3MuXG4gKiBAcGFyYW0gW29wdGlvbnMucm91bmRQaXhlbHM9ZmFsc2VdIHtib29sZWFufSBJZiB0cnVlIFBpeGkgd2lsbCBNYXRoLmZsb29yKCkgeC95IHZhbHVlcyB3aGVuIHJlbmRlcmluZywgc3RvcHBpbmcgcGl4ZWwgaW50ZXJwb2xhdGlvbi5cbiAqL1xuZnVuY3Rpb24gQ2FudmFzUmVuZGVyZXIod2lkdGgsIGhlaWdodCwgb3B0aW9ucylcbntcbiAgICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcblxuICAgIFN5c3RlbVJlbmRlcmVyLmNhbGwodGhpcywgJ0NhbnZhcycsIHdpZHRoLCBoZWlnaHQsIG9wdGlvbnMpO1xuXG4gICAgdGhpcy50eXBlID0gQ09OU1QuUkVOREVSRVJfVFlQRS5DQU5WQVM7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgY2FudmFzIDJkIGNvbnRleHQgdGhhdCBldmVyeXRoaW5nIGlzIGRyYXduIHdpdGguXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtDYW52YXNSZW5kZXJpbmdDb250ZXh0MkR9XG4gICAgICovXG4gICAgdGhpcy5jb250ZXh0ID0gdGhpcy52aWV3LmdldENvbnRleHQoJzJkJywgeyBhbHBoYTogdGhpcy50cmFuc3BhcmVudCB9KTtcblxuICAgIC8qKlxuICAgICAqIEJvb2xlYW4gZmxhZyBjb250cm9sbGluZyBjYW52YXMgcmVmcmVzaC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICovXG4gICAgdGhpcy5yZWZyZXNoID0gdHJ1ZTtcblxuICAgIC8qKlxuICAgICAqIEluc3RhbmNlIG9mIGEgQ2FudmFzTWFza01hbmFnZXIsIGhhbmRsZXMgbWFza2luZyB3aGVuIHVzaW5nIHRoZSBjYW52YXMgcmVuZGVyZXIuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLkNhbnZhc01hc2tNYW5hZ2VyfVxuICAgICAqL1xuICAgIHRoaXMubWFza01hbmFnZXIgPSBuZXcgQ2FudmFzTWFza01hbmFnZXIoKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBjYW52YXMgcHJvcGVydHkgdXNlZCB0byBzZXQgdGhlIGNhbnZhcyBzbW9vdGhpbmcgcHJvcGVydHkuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtzdHJpbmd9XG4gICAgICovXG4gICAgdGhpcy5zbW9vdGhQcm9wZXJ0eSA9ICdpbWFnZVNtb290aGluZ0VuYWJsZWQnO1xuXG4gICAgaWYgKCF0aGlzLmNvbnRleHQuaW1hZ2VTbW9vdGhpbmdFbmFibGVkKVxuICAgIHtcbiAgICAgICAgaWYgKHRoaXMuY29udGV4dC53ZWJraXRJbWFnZVNtb290aGluZ0VuYWJsZWQpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuc21vb3RoUHJvcGVydHkgPSAnd2Via2l0SW1hZ2VTbW9vdGhpbmdFbmFibGVkJztcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh0aGlzLmNvbnRleHQubW96SW1hZ2VTbW9vdGhpbmdFbmFibGVkKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnNtb290aFByb3BlcnR5ID0gJ21vekltYWdlU21vb3RoaW5nRW5hYmxlZCc7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodGhpcy5jb250ZXh0Lm9JbWFnZVNtb290aGluZ0VuYWJsZWQpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuc21vb3RoUHJvcGVydHkgPSAnb0ltYWdlU21vb3RoaW5nRW5hYmxlZCc7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodGhpcy5jb250ZXh0Lm1zSW1hZ2VTbW9vdGhpbmdFbmFibGVkKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnNtb290aFByb3BlcnR5ID0gJ21zSW1hZ2VTbW9vdGhpbmdFbmFibGVkJztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMuaW5pdFBsdWdpbnMoKTtcblxuICAgIHRoaXMuX21hcEJsZW5kTW9kZXMoKTtcblxuICAgIC8qKlxuICAgICAqIFRoaXMgdGVtcG9yYXJ5IGRpc3BsYXkgb2JqZWN0IHVzZWQgYXMgdGhlIHBhcmVudCBvZiB0aGUgY3VycmVudGx5IGJlaW5nIHJlbmRlcmVkIGl0ZW1cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuRGlzcGxheU9iamVjdH1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX3RlbXBEaXNwbGF5T2JqZWN0UGFyZW50ID0ge1xuICAgICAgICB3b3JsZFRyYW5zZm9ybTogbmV3IG1hdGguTWF0cml4KCksXG4gICAgICAgIHdvcmxkQWxwaGE6IDFcbiAgICB9O1xuXG5cbiAgICB0aGlzLnJlc2l6ZSh3aWR0aCwgaGVpZ2h0KTtcbn1cblxuLy8gY29uc3RydWN0b3JcbkNhbnZhc1JlbmRlcmVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoU3lzdGVtUmVuZGVyZXIucHJvdG90eXBlKTtcbkNhbnZhc1JlbmRlcmVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IENhbnZhc1JlbmRlcmVyO1xubW9kdWxlLmV4cG9ydHMgPSBDYW52YXNSZW5kZXJlcjtcbnV0aWxzLnBsdWdpblRhcmdldC5taXhpbihDYW52YXNSZW5kZXJlcik7XG5cbi8qKlxuICogUmVuZGVycyB0aGUgb2JqZWN0IHRvIHRoaXMgY2FudmFzIHZpZXdcbiAqXG4gKiBAcGFyYW0gb2JqZWN0IHtQSVhJLkRpc3BsYXlPYmplY3R9IHRoZSBvYmplY3QgdG8gYmUgcmVuZGVyZWRcbiAqL1xuQ2FudmFzUmVuZGVyZXIucHJvdG90eXBlLnJlbmRlciA9IGZ1bmN0aW9uIChvYmplY3QpXG57XG4gICAgdGhpcy5lbWl0KCdwcmVyZW5kZXInKTtcblxuICAgIHZhciBjYWNoZVBhcmVudCA9IG9iamVjdC5wYXJlbnQ7XG5cbiAgICB0aGlzLl9sYXN0T2JqZWN0UmVuZGVyZWQgPSBvYmplY3Q7XG5cbiAgICBvYmplY3QucGFyZW50ID0gdGhpcy5fdGVtcERpc3BsYXlPYmplY3RQYXJlbnQ7XG5cbiAgICAvLyB1cGRhdGUgdGhlIHNjZW5lIGdyYXBoXG4gICAgb2JqZWN0LnVwZGF0ZVRyYW5zZm9ybSgpO1xuXG4gICAgb2JqZWN0LnBhcmVudCA9IGNhY2hlUGFyZW50O1xuXG4gICAgdGhpcy5jb250ZXh0LnNldFRyYW5zZm9ybSgxLCAwLCAwLCAxLCAwLCAwKTtcblxuICAgIHRoaXMuY29udGV4dC5nbG9iYWxBbHBoYSA9IDE7XG5cbiAgICB0aGlzLmNvbnRleHQuZ2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uID0gdGhpcy5ibGVuZE1vZGVzW0NPTlNULkJMRU5EX01PREVTLk5PUk1BTF07XG5cbiAgICBpZiAobmF2aWdhdG9yLmlzQ29jb29uSlMgJiYgdGhpcy52aWV3LnNjcmVlbmNhbnZhcylcbiAgICB7XG4gICAgICAgIHRoaXMuY29udGV4dC5maWxsU3R5bGUgPSAnYmxhY2snO1xuICAgICAgICB0aGlzLmNvbnRleHQuY2xlYXIoKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5jbGVhckJlZm9yZVJlbmRlcilcbiAgICB7XG4gICAgICAgIGlmICh0aGlzLnRyYW5zcGFyZW50KVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmNvbnRleHQuY2xlYXJSZWN0KDAsIDAsIHRoaXMud2lkdGgsIHRoaXMuaGVpZ2h0KTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuY29udGV4dC5maWxsU3R5bGUgPSB0aGlzLl9iYWNrZ3JvdW5kQ29sb3JTdHJpbmc7XG4gICAgICAgICAgICB0aGlzLmNvbnRleHQuZmlsbFJlY3QoMCwgMCwgdGhpcy53aWR0aCAsIHRoaXMuaGVpZ2h0KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMucmVuZGVyRGlzcGxheU9iamVjdChvYmplY3QsIHRoaXMuY29udGV4dCk7XG5cbiAgICB0aGlzLmVtaXQoJ3Bvc3RyZW5kZXInKTtcbn07XG5cbi8qKlxuICogUmVtb3ZlcyBldmVyeXRoaW5nIGZyb20gdGhlIHJlbmRlcmVyIGFuZCBvcHRpb25hbGx5IHJlbW92ZXMgdGhlIENhbnZhcyBET00gZWxlbWVudC5cbiAqXG4gKiBAcGFyYW0gW3JlbW92ZVZpZXc9ZmFsc2VdIHtib29sZWFufSBSZW1vdmVzIHRoZSBDYW52YXMgZWxlbWVudCBmcm9tIHRoZSBET00uXG4gKi9cbkNhbnZhc1JlbmRlcmVyLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKHJlbW92ZVZpZXcpXG57XG4gICAgdGhpcy5kZXN0cm95UGx1Z2lucygpO1xuXG4gICAgLy8gY2FsbCB0aGUgYmFzZSBkZXN0cm95XG4gICAgU3lzdGVtUmVuZGVyZXIucHJvdG90eXBlLmRlc3Ryb3kuY2FsbCh0aGlzLCByZW1vdmVWaWV3KTtcblxuICAgIHRoaXMuY29udGV4dCA9IG51bGw7XG5cbiAgICB0aGlzLnJlZnJlc2ggPSB0cnVlO1xuXG4gICAgdGhpcy5tYXNrTWFuYWdlci5kZXN0cm95KCk7XG4gICAgdGhpcy5tYXNrTWFuYWdlciA9IG51bGw7XG5cbiAgICB0aGlzLnNtb290aFByb3BlcnR5ID0gbnVsbDtcbn07XG5cbi8qKlxuICogUmVuZGVycyBhIGRpc3BsYXkgb2JqZWN0XG4gKlxuICogQHBhcmFtIGRpc3BsYXlPYmplY3Qge1BJWEkuRGlzcGxheU9iamVjdH0gVGhlIGRpc3BsYXlPYmplY3QgdG8gcmVuZGVyXG4gKiBAcHJpdmF0ZVxuICovXG5DYW52YXNSZW5kZXJlci5wcm90b3R5cGUucmVuZGVyRGlzcGxheU9iamVjdCA9IGZ1bmN0aW9uIChkaXNwbGF5T2JqZWN0LCBjb250ZXh0KVxue1xuICAgIHZhciB0ZW1wQ29udGV4dCA9IHRoaXMuY29udGV4dDtcblxuICAgIHRoaXMuY29udGV4dCA9IGNvbnRleHQ7XG4gICAgZGlzcGxheU9iamVjdC5yZW5kZXJDYW52YXModGhpcyk7XG4gICAgdGhpcy5jb250ZXh0ID0gdGVtcENvbnRleHQ7XG59O1xuXG4vKipcbiAqIEBleHRlbmRzIFBJWEkuU3lzdGVtUmVuZGVyZXIjcmVzaXplXG4gKlxuICogQHBhcmFtIHtudW1iZXJ9IHdcbiAqIEBwYXJhbSB7bnVtYmVyfSBoXG4gKi9cbkNhbnZhc1JlbmRlcmVyLnByb3RvdHlwZS5yZXNpemUgPSBmdW5jdGlvbiAodywgaClcbntcbiAgICBTeXN0ZW1SZW5kZXJlci5wcm90b3R5cGUucmVzaXplLmNhbGwodGhpcywgdywgaCk7XG5cbiAgICAvL3Jlc2V0IHRoZSBzY2FsZSBtb2RlLi4gb2RkbHkgdGhpcyBzZWVtcyB0byBiZSByZXNldCB3aGVuIHRoZSBjYW52YXMgaXMgcmVzaXplZC5cbiAgICAvL3N1cmVseSBhIGJyb3dzZXIgYnVnPz8gTGV0IHBpeGkgZml4IHRoYXQgZm9yIHlvdS4uXG4gICAgaWYodGhpcy5zbW9vdGhQcm9wZXJ0eSlcbiAgICB7XG4gICAgICAgIHRoaXMuY29udGV4dFt0aGlzLnNtb290aFByb3BlcnR5XSA9IChDT05TVC5TQ0FMRV9NT0RFUy5ERUZBVUxUID09PSBDT05TVC5TQ0FMRV9NT0RFUy5MSU5FQVIpO1xuICAgIH1cblxufTtcblxuLyoqXG4gKiBNYXBzIFBpeGkgYmxlbmQgbW9kZXMgdG8gY2FudmFzIGJsZW5kIG1vZGVzLlxuICpcbiAqIEBwcml2YXRlXG4gKi9cbkNhbnZhc1JlbmRlcmVyLnByb3RvdHlwZS5fbWFwQmxlbmRNb2RlcyA9IGZ1bmN0aW9uICgpXG57XG4gICAgaWYgKCF0aGlzLmJsZW5kTW9kZXMpXG4gICAge1xuICAgICAgICB0aGlzLmJsZW5kTW9kZXMgPSB7fTtcblxuICAgICAgICBpZiAodXRpbHMuY2FuVXNlTmV3Q2FudmFzQmxlbmRNb2RlcygpKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuTk9STUFMXSAgICAgICAgPSAnc291cmNlLW92ZXInO1xuICAgICAgICAgICAgdGhpcy5ibGVuZE1vZGVzW0NPTlNULkJMRU5EX01PREVTLkFERF0gICAgICAgICAgID0gJ2xpZ2h0ZXInOyAvL0lTIFRISVMgT0s/Pz9cbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5NVUxUSVBMWV0gICAgICA9ICdtdWx0aXBseSc7XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuU0NSRUVOXSAgICAgICAgPSAnc2NyZWVuJztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5PVkVSTEFZXSAgICAgICA9ICdvdmVybGF5JztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5EQVJLRU5dICAgICAgICA9ICdkYXJrZW4nO1xuICAgICAgICAgICAgdGhpcy5ibGVuZE1vZGVzW0NPTlNULkJMRU5EX01PREVTLkxJR0hURU5dICAgICAgID0gJ2xpZ2h0ZW4nO1xuICAgICAgICAgICAgdGhpcy5ibGVuZE1vZGVzW0NPTlNULkJMRU5EX01PREVTLkNPTE9SX0RPREdFXSAgID0gJ2NvbG9yLWRvZGdlJztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5DT0xPUl9CVVJOXSAgICA9ICdjb2xvci1idXJuJztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5IQVJEX0xJR0hUXSAgICA9ICdoYXJkLWxpZ2h0JztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5TT0ZUX0xJR0hUXSAgICA9ICdzb2Z0LWxpZ2h0JztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5ESUZGRVJFTkNFXSAgICA9ICdkaWZmZXJlbmNlJztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5FWENMVVNJT05dICAgICA9ICdleGNsdXNpb24nO1xuICAgICAgICAgICAgdGhpcy5ibGVuZE1vZGVzW0NPTlNULkJMRU5EX01PREVTLkhVRV0gICAgICAgICAgID0gJ2h1ZSc7XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuU0FUVVJBVElPTl0gICAgPSAnc2F0dXJhdGUnO1xuICAgICAgICAgICAgdGhpcy5ibGVuZE1vZGVzW0NPTlNULkJMRU5EX01PREVTLkNPTE9SXSAgICAgICAgID0gJ2NvbG9yJztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5MVU1JTk9TSVRZXSAgICA9ICdsdW1pbm9zaXR5JztcbiAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgIHtcbiAgICAgICAgICAgIC8vIHRoaXMgbWVhbnMgdGhhdCB0aGUgYnJvd3NlciBkb2VzIG5vdCBzdXBwb3J0IHRoZSBjb29sIG5ldyBibGVuZCBtb2RlcyBpbiBjYW52YXMgJ2NvdWdoJyBpZSAnY291Z2gnXG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuTk9STUFMXSAgICAgICAgPSAnc291cmNlLW92ZXInO1xuICAgICAgICAgICAgdGhpcy5ibGVuZE1vZGVzW0NPTlNULkJMRU5EX01PREVTLkFERF0gICAgICAgICAgID0gJ2xpZ2h0ZXInOyAvL0lTIFRISVMgT0s/Pz9cbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5NVUxUSVBMWV0gICAgICA9ICdzb3VyY2Utb3Zlcic7XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuU0NSRUVOXSAgICAgICAgPSAnc291cmNlLW92ZXInO1xuICAgICAgICAgICAgdGhpcy5ibGVuZE1vZGVzW0NPTlNULkJMRU5EX01PREVTLk9WRVJMQVldICAgICAgID0gJ3NvdXJjZS1vdmVyJztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5EQVJLRU5dICAgICAgICA9ICdzb3VyY2Utb3Zlcic7XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuTElHSFRFTl0gICAgICAgPSAnc291cmNlLW92ZXInO1xuICAgICAgICAgICAgdGhpcy5ibGVuZE1vZGVzW0NPTlNULkJMRU5EX01PREVTLkNPTE9SX0RPREdFXSAgID0gJ3NvdXJjZS1vdmVyJztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5DT0xPUl9CVVJOXSAgICA9ICdzb3VyY2Utb3Zlcic7XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuSEFSRF9MSUdIVF0gICAgPSAnc291cmNlLW92ZXInO1xuICAgICAgICAgICAgdGhpcy5ibGVuZE1vZGVzW0NPTlNULkJMRU5EX01PREVTLlNPRlRfTElHSFRdICAgID0gJ3NvdXJjZS1vdmVyJztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5ESUZGRVJFTkNFXSAgICA9ICdzb3VyY2Utb3Zlcic7XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuRVhDTFVTSU9OXSAgICAgPSAnc291cmNlLW92ZXInO1xuICAgICAgICAgICAgdGhpcy5ibGVuZE1vZGVzW0NPTlNULkJMRU5EX01PREVTLkhVRV0gICAgICAgICAgID0gJ3NvdXJjZS1vdmVyJztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5TQVRVUkFUSU9OXSAgICA9ICdzb3VyY2Utb3Zlcic7XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuQ09MT1JdICAgICAgICAgPSAnc291cmNlLW92ZXInO1xuICAgICAgICAgICAgdGhpcy5ibGVuZE1vZGVzW0NPTlNULkJMRU5EX01PREVTLkxVTUlOT1NJVFldICAgID0gJ3NvdXJjZS1vdmVyJztcbiAgICAgICAgfVxuICAgIH1cbn07XG4iLCIvKipcbiAqIENyZWF0ZXMgYSBDYW52YXMgZWxlbWVudCBvZiB0aGUgZ2l2ZW4gc2l6ZS5cbiAqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gd2lkdGgge251bWJlcn0gdGhlIHdpZHRoIGZvciB0aGUgbmV3bHkgY3JlYXRlZCBjYW52YXNcbiAqIEBwYXJhbSBoZWlnaHQge251bWJlcn0gdGhlIGhlaWdodCBmb3IgdGhlIG5ld2x5IGNyZWF0ZWQgY2FudmFzXG4gKi9cbmZ1bmN0aW9uIENhbnZhc0J1ZmZlcih3aWR0aCwgaGVpZ2h0KVxue1xuICAgIC8qKlxuICAgICAqIFRoZSBDYW52YXMgb2JqZWN0IHRoYXQgYmVsb25ncyB0byB0aGlzIENhbnZhc0J1ZmZlci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge0hUTUxDYW52YXNFbGVtZW50fVxuICAgICAqL1xuICAgIHRoaXMuY2FudmFzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnY2FudmFzJyk7XG5cbiAgICAvKipcbiAgICAgKiBBIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRCBvYmplY3QgcmVwcmVzZW50aW5nIGEgdHdvLWRpbWVuc2lvbmFsIHJlbmRlcmluZyBjb250ZXh0LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEfVxuICAgICAqL1xuICAgIHRoaXMuY29udGV4dCA9IHRoaXMuY2FudmFzLmdldENvbnRleHQoJzJkJyk7XG5cbiAgICB0aGlzLmNhbnZhcy53aWR0aCA9IHdpZHRoO1xuICAgIHRoaXMuY2FudmFzLmhlaWdodCA9IGhlaWdodDtcbn1cblxuQ2FudmFzQnVmZmVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IENhbnZhc0J1ZmZlcjtcbm1vZHVsZS5leHBvcnRzID0gQ2FudmFzQnVmZmVyO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhDYW52YXNCdWZmZXIucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogVGhlIHdpZHRoIG9mIHRoZSBjYW52YXMgYnVmZmVyIGluIHBpeGVscy5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5DYW52YXNCdWZmZXIjXG4gICAgICovXG4gICAgd2lkdGg6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jYW52YXMud2lkdGg7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbClcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5jYW52YXMud2lkdGggPSB2YWw7XG4gICAgICAgIH1cbiAgICB9LFxuICAgIC8qKlxuICAgICAqIFRoZSBoZWlnaHQgb2YgdGhlIGNhbnZhcyBidWZmZXIgaW4gcGl4ZWxzLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLkNhbnZhc0J1ZmZlciNcbiAgICAgKi9cbiAgICBoZWlnaHQ6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jYW52YXMuaGVpZ2h0O1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWwpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuY2FudmFzLmhlaWdodCA9IHZhbDtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuXG4vKipcbiAqIENsZWFycyB0aGUgY2FudmFzIHRoYXQgd2FzIGNyZWF0ZWQgYnkgdGhlIENhbnZhc0J1ZmZlciBjbGFzcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5DYW52YXNCdWZmZXIucHJvdG90eXBlLmNsZWFyID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLmNvbnRleHQuc2V0VHJhbnNmb3JtKDEsIDAsIDAsIDEsIDAsIDApO1xuICAgIHRoaXMuY29udGV4dC5jbGVhclJlY3QoMCwwLCB0aGlzLmNhbnZhcy53aWR0aCwgdGhpcy5jYW52YXMuaGVpZ2h0KTtcbn07XG5cbi8qKlxuICogUmVzaXplcyB0aGUgY2FudmFzIHRvIHRoZSBzcGVjaWZpZWQgd2lkdGggYW5kIGhlaWdodC5cbiAqXG4gKiBAcGFyYW0gd2lkdGgge251bWJlcn0gdGhlIG5ldyB3aWR0aCBvZiB0aGUgY2FudmFzXG4gKiBAcGFyYW0gaGVpZ2h0IHtudW1iZXJ9IHRoZSBuZXcgaGVpZ2h0IG9mIHRoZSBjYW52YXNcbiAqL1xuQ2FudmFzQnVmZmVyLnByb3RvdHlwZS5yZXNpemUgPSBmdW5jdGlvbiAod2lkdGgsIGhlaWdodClcbntcbiAgICB0aGlzLmNhbnZhcy53aWR0aCA9IHdpZHRoO1xuICAgIHRoaXMuY2FudmFzLmhlaWdodCA9IGhlaWdodDtcbn07XG5cbi8qKlxuICogRGVzdHJveXMgdGhpcyBjYW52YXMuXG4gKlxuICovXG5DYW52YXNCdWZmZXIucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoKVxue1xuICAgIHRoaXMuY29udGV4dCA9IG51bGw7XG4gICAgdGhpcy5jYW52YXMgPSBudWxsO1xufTtcbiIsInZhciBDT05TVCA9IHJlcXVpcmUoJy4uLy4uLy4uL2NvbnN0Jyk7XG5cbi8qKlxuICogQSBzZXQgb2YgZnVuY3Rpb25zIHVzZWQgYnkgdGhlIGNhbnZhcyByZW5kZXJlciB0byBkcmF3IHRoZSBwcmltaXRpdmUgZ3JhcGhpY3MgZGF0YS5cbiAqIEBzdGF0aWNcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqL1xudmFyIENhbnZhc0dyYXBoaWNzID0ge307XG5tb2R1bGUuZXhwb3J0cyA9IENhbnZhc0dyYXBoaWNzO1xuXG4vKlxuICogUmVuZGVycyBhIEdyYXBoaWNzIG9iamVjdCB0byBhIGNhbnZhcy5cbiAqXG4gKiBAcGFyYW0gZ3JhcGhpY3Mge1BJWEkuR3JhcGhpY3N9IHRoZSBhY3R1YWwgZ3JhcGhpY3Mgb2JqZWN0IHRvIHJlbmRlclxuICogQHBhcmFtIGNvbnRleHQge0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRH0gdGhlIDJkIGRyYXdpbmcgbWV0aG9kIG9mIHRoZSBjYW52YXNcbiAqL1xuQ2FudmFzR3JhcGhpY3MucmVuZGVyR3JhcGhpY3MgPSBmdW5jdGlvbiAoZ3JhcGhpY3MsIGNvbnRleHQpXG57XG4gICAgdmFyIHdvcmxkQWxwaGEgPSBncmFwaGljcy53b3JsZEFscGhhO1xuXG4gICAgaWYgKGdyYXBoaWNzLmRpcnR5KVxuICAgIHtcbiAgICAgICAgdGhpcy51cGRhdGVHcmFwaGljc1RpbnQoZ3JhcGhpY3MpO1xuICAgICAgICBncmFwaGljcy5kaXJ0eSA9IGZhbHNlO1xuICAgIH1cblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZ3JhcGhpY3MuZ3JhcGhpY3NEYXRhLmxlbmd0aDsgaSsrKVxuICAgIHtcbiAgICAgICAgdmFyIGRhdGEgPSBncmFwaGljcy5ncmFwaGljc0RhdGFbaV07XG4gICAgICAgIHZhciBzaGFwZSA9IGRhdGEuc2hhcGU7XG5cbiAgICAgICAgdmFyIGZpbGxDb2xvciA9IGRhdGEuX2ZpbGxUaW50O1xuICAgICAgICB2YXIgbGluZUNvbG9yID0gZGF0YS5fbGluZVRpbnQ7XG5cbiAgICAgICAgY29udGV4dC5saW5lV2lkdGggPSBkYXRhLmxpbmVXaWR0aDtcblxuICAgICAgICBpZiAoZGF0YS50eXBlID09PSBDT05TVC5TSEFQRVMuUE9MWSlcbiAgICAgICAge1xuICAgICAgICAgICAgY29udGV4dC5iZWdpblBhdGgoKTtcblxuICAgICAgICAgICAgdmFyIHBvaW50cyA9IHNoYXBlLnBvaW50cztcblxuICAgICAgICAgICAgY29udGV4dC5tb3ZlVG8ocG9pbnRzWzBdLCBwb2ludHNbMV0pO1xuXG4gICAgICAgICAgICBmb3IgKHZhciBqPTE7IGogPCBwb2ludHMubGVuZ3RoLzI7IGorKylcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb250ZXh0LmxpbmVUbyhwb2ludHNbaiAqIDJdLCBwb2ludHNbaiAqIDIgKyAxXSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChzaGFwZS5jbG9zZWQpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29udGV4dC5saW5lVG8ocG9pbnRzWzBdLCBwb2ludHNbMV0pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBpZiB0aGUgZmlyc3QgYW5kIGxhc3QgcG9pbnQgYXJlIHRoZSBzYW1lIGNsb3NlIHRoZSBwYXRoIC0gbXVjaCBuZWF0ZXIgOilcbiAgICAgICAgICAgIGlmIChwb2ludHNbMF0gPT09IHBvaW50c1twb2ludHMubGVuZ3RoLTJdICYmIHBvaW50c1sxXSA9PT0gcG9pbnRzW3BvaW50cy5sZW5ndGgtMV0pXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29udGV4dC5jbG9zZVBhdGgoKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGRhdGEuZmlsbClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb250ZXh0Lmdsb2JhbEFscGhhID0gZGF0YS5maWxsQWxwaGEgKiB3b3JsZEFscGhhO1xuICAgICAgICAgICAgICAgIGNvbnRleHQuZmlsbFN0eWxlID0gJyMnICsgKCcwMDAwMCcgKyAoIGZpbGxDb2xvciB8IDApLnRvU3RyaW5nKDE2KSkuc3Vic3RyKC02KTtcbiAgICAgICAgICAgICAgICBjb250ZXh0LmZpbGwoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChkYXRhLmxpbmVXaWR0aClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb250ZXh0Lmdsb2JhbEFscGhhID0gZGF0YS5saW5lQWxwaGEgKiB3b3JsZEFscGhhO1xuICAgICAgICAgICAgICAgIGNvbnRleHQuc3Ryb2tlU3R5bGUgPSAnIycgKyAoJzAwMDAwJyArICggbGluZUNvbG9yIHwgMCkudG9TdHJpbmcoMTYpKS5zdWJzdHIoLTYpO1xuICAgICAgICAgICAgICAgIGNvbnRleHQuc3Ryb2tlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoZGF0YS50eXBlID09PSBDT05TVC5TSEFQRVMuUkVDVClcbiAgICAgICAge1xuXG4gICAgICAgICAgICBpZiAoZGF0YS5maWxsQ29sb3IgfHwgZGF0YS5maWxsQ29sb3IgPT09IDApXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29udGV4dC5nbG9iYWxBbHBoYSA9IGRhdGEuZmlsbEFscGhhICogd29ybGRBbHBoYTtcbiAgICAgICAgICAgICAgICBjb250ZXh0LmZpbGxTdHlsZSA9ICcjJyArICgnMDAwMDAnICsgKCBmaWxsQ29sb3IgfCAwKS50b1N0cmluZygxNikpLnN1YnN0cigtNik7XG4gICAgICAgICAgICAgICAgY29udGV4dC5maWxsUmVjdChzaGFwZS54LCBzaGFwZS55LCBzaGFwZS53aWR0aCwgc2hhcGUuaGVpZ2h0KTtcblxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGRhdGEubGluZVdpZHRoKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGNvbnRleHQuZ2xvYmFsQWxwaGEgPSBkYXRhLmxpbmVBbHBoYSAqIHdvcmxkQWxwaGE7XG4gICAgICAgICAgICAgICAgY29udGV4dC5zdHJva2VTdHlsZSA9ICcjJyArICgnMDAwMDAnICsgKCBsaW5lQ29sb3IgfCAwKS50b1N0cmluZygxNikpLnN1YnN0cigtNik7XG4gICAgICAgICAgICAgICAgY29udGV4dC5zdHJva2VSZWN0KHNoYXBlLngsIHNoYXBlLnksIHNoYXBlLndpZHRoLCBzaGFwZS5oZWlnaHQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGRhdGEudHlwZSA9PT0gQ09OU1QuU0hBUEVTLkNJUkMpXG4gICAgICAgIHtcbiAgICAgICAgICAgIC8vIFRPRE8gLSBuZWVkIHRvIGJlIFVuZGVmaW5lZCFcbiAgICAgICAgICAgIGNvbnRleHQuYmVnaW5QYXRoKCk7XG4gICAgICAgICAgICBjb250ZXh0LmFyYyhzaGFwZS54LCBzaGFwZS55LCBzaGFwZS5yYWRpdXMsMCwyKk1hdGguUEkpO1xuICAgICAgICAgICAgY29udGV4dC5jbG9zZVBhdGgoKTtcblxuICAgICAgICAgICAgaWYgKGRhdGEuZmlsbClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb250ZXh0Lmdsb2JhbEFscGhhID0gZGF0YS5maWxsQWxwaGEgKiB3b3JsZEFscGhhO1xuICAgICAgICAgICAgICAgIGNvbnRleHQuZmlsbFN0eWxlID0gJyMnICsgKCcwMDAwMCcgKyAoIGZpbGxDb2xvciB8IDApLnRvU3RyaW5nKDE2KSkuc3Vic3RyKC02KTtcbiAgICAgICAgICAgICAgICBjb250ZXh0LmZpbGwoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChkYXRhLmxpbmVXaWR0aClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb250ZXh0Lmdsb2JhbEFscGhhID0gZGF0YS5saW5lQWxwaGEgKiB3b3JsZEFscGhhO1xuICAgICAgICAgICAgICAgIGNvbnRleHQuc3Ryb2tlU3R5bGUgPSAnIycgKyAoJzAwMDAwJyArICggbGluZUNvbG9yIHwgMCkudG9TdHJpbmcoMTYpKS5zdWJzdHIoLTYpO1xuICAgICAgICAgICAgICAgIGNvbnRleHQuc3Ryb2tlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoZGF0YS50eXBlID09PSBDT05TVC5TSEFQRVMuRUxJUClcbiAgICAgICAge1xuICAgICAgICAgICAgLy8gZWxsaXBzZSBjb2RlIHRha2VuIGZyb206IGh0dHA6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvMjE3Mjc5OC9ob3ctdG8tZHJhdy1hbi1vdmFsLWluLWh0bWw1LWNhbnZhc1xuXG4gICAgICAgICAgICB2YXIgdyA9IHNoYXBlLndpZHRoICogMjtcbiAgICAgICAgICAgIHZhciBoID0gc2hhcGUuaGVpZ2h0ICogMjtcblxuICAgICAgICAgICAgdmFyIHggPSBzaGFwZS54IC0gdy8yO1xuICAgICAgICAgICAgdmFyIHkgPSBzaGFwZS55IC0gaC8yO1xuXG4gICAgICAgICAgICBjb250ZXh0LmJlZ2luUGF0aCgpO1xuXG4gICAgICAgICAgICB2YXIga2FwcGEgPSAwLjU1MjI4NDgsXG4gICAgICAgICAgICAgICAgb3ggPSAodyAvIDIpICoga2FwcGEsIC8vIGNvbnRyb2wgcG9pbnQgb2Zmc2V0IGhvcml6b250YWxcbiAgICAgICAgICAgICAgICBveSA9IChoIC8gMikgKiBrYXBwYSwgLy8gY29udHJvbCBwb2ludCBvZmZzZXQgdmVydGljYWxcbiAgICAgICAgICAgICAgICB4ZSA9IHggKyB3LCAgICAgICAgICAgLy8geC1lbmRcbiAgICAgICAgICAgICAgICB5ZSA9IHkgKyBoLCAgICAgICAgICAgLy8geS1lbmRcbiAgICAgICAgICAgICAgICB4bSA9IHggKyB3IC8gMiwgICAgICAgLy8geC1taWRkbGVcbiAgICAgICAgICAgICAgICB5bSA9IHkgKyBoIC8gMjsgICAgICAgLy8geS1taWRkbGVcblxuICAgICAgICAgICAgY29udGV4dC5tb3ZlVG8oeCwgeW0pO1xuICAgICAgICAgICAgY29udGV4dC5iZXppZXJDdXJ2ZVRvKHgsIHltIC0gb3ksIHhtIC0gb3gsIHksIHhtLCB5KTtcbiAgICAgICAgICAgIGNvbnRleHQuYmV6aWVyQ3VydmVUbyh4bSArIG94LCB5LCB4ZSwgeW0gLSBveSwgeGUsIHltKTtcbiAgICAgICAgICAgIGNvbnRleHQuYmV6aWVyQ3VydmVUbyh4ZSwgeW0gKyBveSwgeG0gKyBveCwgeWUsIHhtLCB5ZSk7XG4gICAgICAgICAgICBjb250ZXh0LmJlemllckN1cnZlVG8oeG0gLSBveCwgeWUsIHgsIHltICsgb3ksIHgsIHltKTtcblxuICAgICAgICAgICAgY29udGV4dC5jbG9zZVBhdGgoKTtcblxuICAgICAgICAgICAgaWYgKGRhdGEuZmlsbClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb250ZXh0Lmdsb2JhbEFscGhhID0gZGF0YS5maWxsQWxwaGEgKiB3b3JsZEFscGhhO1xuICAgICAgICAgICAgICAgIGNvbnRleHQuZmlsbFN0eWxlID0gJyMnICsgKCcwMDAwMCcgKyAoIGZpbGxDb2xvciB8IDApLnRvU3RyaW5nKDE2KSkuc3Vic3RyKC02KTtcbiAgICAgICAgICAgICAgICBjb250ZXh0LmZpbGwoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChkYXRhLmxpbmVXaWR0aClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb250ZXh0Lmdsb2JhbEFscGhhID0gZGF0YS5saW5lQWxwaGEgKiB3b3JsZEFscGhhO1xuICAgICAgICAgICAgICAgIGNvbnRleHQuc3Ryb2tlU3R5bGUgPSAnIycgKyAoJzAwMDAwJyArICggbGluZUNvbG9yIHwgMCkudG9TdHJpbmcoMTYpKS5zdWJzdHIoLTYpO1xuICAgICAgICAgICAgICAgIGNvbnRleHQuc3Ryb2tlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoZGF0YS50eXBlID09PSBDT05TVC5TSEFQRVMuUlJFQylcbiAgICAgICAge1xuICAgICAgICAgICAgdmFyIHJ4ID0gc2hhcGUueDtcbiAgICAgICAgICAgIHZhciByeSA9IHNoYXBlLnk7XG4gICAgICAgICAgICB2YXIgd2lkdGggPSBzaGFwZS53aWR0aDtcbiAgICAgICAgICAgIHZhciBoZWlnaHQgPSBzaGFwZS5oZWlnaHQ7XG4gICAgICAgICAgICB2YXIgcmFkaXVzID0gc2hhcGUucmFkaXVzO1xuXG4gICAgICAgICAgICB2YXIgbWF4UmFkaXVzID0gTWF0aC5taW4od2lkdGgsIGhlaWdodCkgLyAyIHwgMDtcbiAgICAgICAgICAgIHJhZGl1cyA9IHJhZGl1cyA+IG1heFJhZGl1cyA/IG1heFJhZGl1cyA6IHJhZGl1cztcblxuICAgICAgICAgICAgY29udGV4dC5iZWdpblBhdGgoKTtcbiAgICAgICAgICAgIGNvbnRleHQubW92ZVRvKHJ4LCByeSArIHJhZGl1cyk7XG4gICAgICAgICAgICBjb250ZXh0LmxpbmVUbyhyeCwgcnkgKyBoZWlnaHQgLSByYWRpdXMpO1xuICAgICAgICAgICAgY29udGV4dC5xdWFkcmF0aWNDdXJ2ZVRvKHJ4LCByeSArIGhlaWdodCwgcnggKyByYWRpdXMsIHJ5ICsgaGVpZ2h0KTtcbiAgICAgICAgICAgIGNvbnRleHQubGluZVRvKHJ4ICsgd2lkdGggLSByYWRpdXMsIHJ5ICsgaGVpZ2h0KTtcbiAgICAgICAgICAgIGNvbnRleHQucXVhZHJhdGljQ3VydmVUbyhyeCArIHdpZHRoLCByeSArIGhlaWdodCwgcnggKyB3aWR0aCwgcnkgKyBoZWlnaHQgLSByYWRpdXMpO1xuICAgICAgICAgICAgY29udGV4dC5saW5lVG8ocnggKyB3aWR0aCwgcnkgKyByYWRpdXMpO1xuICAgICAgICAgICAgY29udGV4dC5xdWFkcmF0aWNDdXJ2ZVRvKHJ4ICsgd2lkdGgsIHJ5LCByeCArIHdpZHRoIC0gcmFkaXVzLCByeSk7XG4gICAgICAgICAgICBjb250ZXh0LmxpbmVUbyhyeCArIHJhZGl1cywgcnkpO1xuICAgICAgICAgICAgY29udGV4dC5xdWFkcmF0aWNDdXJ2ZVRvKHJ4LCByeSwgcngsIHJ5ICsgcmFkaXVzKTtcbiAgICAgICAgICAgIGNvbnRleHQuY2xvc2VQYXRoKCk7XG5cbiAgICAgICAgICAgIGlmIChkYXRhLmZpbGxDb2xvciB8fCBkYXRhLmZpbGxDb2xvciA9PT0gMClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb250ZXh0Lmdsb2JhbEFscGhhID0gZGF0YS5maWxsQWxwaGEgKiB3b3JsZEFscGhhO1xuICAgICAgICAgICAgICAgIGNvbnRleHQuZmlsbFN0eWxlID0gJyMnICsgKCcwMDAwMCcgKyAoIGZpbGxDb2xvciB8IDApLnRvU3RyaW5nKDE2KSkuc3Vic3RyKC02KTtcbiAgICAgICAgICAgICAgICBjb250ZXh0LmZpbGwoKTtcblxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGRhdGEubGluZVdpZHRoKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGNvbnRleHQuZ2xvYmFsQWxwaGEgPSBkYXRhLmxpbmVBbHBoYSAqIHdvcmxkQWxwaGE7XG4gICAgICAgICAgICAgICAgY29udGV4dC5zdHJva2VTdHlsZSA9ICcjJyArICgnMDAwMDAnICsgKCBsaW5lQ29sb3IgfCAwKS50b1N0cmluZygxNikpLnN1YnN0cigtNik7XG4gICAgICAgICAgICAgICAgY29udGV4dC5zdHJva2UoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn07XG5cbi8qXG4gKiBSZW5kZXJzIGEgZ3JhcGhpY3MgbWFza1xuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0gZ3JhcGhpY3Mge1BJWEkuR3JhcGhpY3N9IHRoZSBncmFwaGljcyB3aGljaCB3aWxsIGJlIHVzZWQgYXMgYSBtYXNrXG4gKiBAcGFyYW0gY29udGV4dCB7Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEfSB0aGUgY29udGV4dCAyZCBtZXRob2Qgb2YgdGhlIGNhbnZhc1xuICovXG5DYW52YXNHcmFwaGljcy5yZW5kZXJHcmFwaGljc01hc2sgPSBmdW5jdGlvbiAoZ3JhcGhpY3MsIGNvbnRleHQpXG57XG4gICAgdmFyIGxlbiA9IGdyYXBoaWNzLmdyYXBoaWNzRGF0YS5sZW5ndGg7XG5cbiAgICBpZiAobGVuID09PSAwKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnRleHQuYmVnaW5QYXRoKCk7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgaSsrKVxuICAgIHtcbiAgICAgICAgdmFyIGRhdGEgPSBncmFwaGljcy5ncmFwaGljc0RhdGFbaV07XG4gICAgICAgIHZhciBzaGFwZSA9IGRhdGEuc2hhcGU7XG5cbiAgICAgICAgaWYgKGRhdGEudHlwZSA9PT0gQ09OU1QuU0hBUEVTLlBPTFkpXG4gICAgICAgIHtcblxuICAgICAgICAgICAgdmFyIHBvaW50cyA9IHNoYXBlLnBvaW50cztcblxuICAgICAgICAgICAgY29udGV4dC5tb3ZlVG8ocG9pbnRzWzBdLCBwb2ludHNbMV0pO1xuXG4gICAgICAgICAgICBmb3IgKHZhciBqPTE7IGogPCBwb2ludHMubGVuZ3RoLzI7IGorKylcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb250ZXh0LmxpbmVUbyhwb2ludHNbaiAqIDJdLCBwb2ludHNbaiAqIDIgKyAxXSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIGlmIHRoZSBmaXJzdCBhbmQgbGFzdCBwb2ludCBhcmUgdGhlIHNhbWUgY2xvc2UgdGhlIHBhdGggLSBtdWNoIG5lYXRlciA6KVxuICAgICAgICAgICAgaWYgKHBvaW50c1swXSA9PT0gcG9pbnRzW3BvaW50cy5sZW5ndGgtMl0gJiYgcG9pbnRzWzFdID09PSBwb2ludHNbcG9pbnRzLmxlbmd0aC0xXSlcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb250ZXh0LmNsb3NlUGF0aCgpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoZGF0YS50eXBlID09PSBDT05TVC5TSEFQRVMuUkVDVClcbiAgICAgICAge1xuICAgICAgICAgICAgY29udGV4dC5yZWN0KHNoYXBlLngsIHNoYXBlLnksIHNoYXBlLndpZHRoLCBzaGFwZS5oZWlnaHQpO1xuICAgICAgICAgICAgY29udGV4dC5jbG9zZVBhdGgoKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChkYXRhLnR5cGUgPT09IENPTlNULlNIQVBFUy5DSVJDKVxuICAgICAgICB7XG4gICAgICAgICAgICAvLyBUT0RPIC0gbmVlZCB0byBiZSBVbmRlZmluZWQhXG4gICAgICAgICAgICBjb250ZXh0LmFyYyhzaGFwZS54LCBzaGFwZS55LCBzaGFwZS5yYWRpdXMsIDAsIDIgKiBNYXRoLlBJKTtcbiAgICAgICAgICAgIGNvbnRleHQuY2xvc2VQYXRoKCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoZGF0YS50eXBlID09PSBDT05TVC5TSEFQRVMuRUxJUClcbiAgICAgICAge1xuXG4gICAgICAgICAgICAvLyBlbGxpcHNlIGNvZGUgdGFrZW4gZnJvbTogaHR0cDovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy8yMTcyNzk4L2hvdy10by1kcmF3LWFuLW92YWwtaW4taHRtbDUtY2FudmFzXG5cbiAgICAgICAgICAgIHZhciB3ID0gc2hhcGUud2lkdGggKiAyO1xuICAgICAgICAgICAgdmFyIGggPSBzaGFwZS5oZWlnaHQgKiAyO1xuXG4gICAgICAgICAgICB2YXIgeCA9IHNoYXBlLnggLSB3LzI7XG4gICAgICAgICAgICB2YXIgeSA9IHNoYXBlLnkgLSBoLzI7XG5cbiAgICAgICAgICAgIHZhciBrYXBwYSA9IDAuNTUyMjg0OCxcbiAgICAgICAgICAgICAgICBveCA9ICh3IC8gMikgKiBrYXBwYSwgLy8gY29udHJvbCBwb2ludCBvZmZzZXQgaG9yaXpvbnRhbFxuICAgICAgICAgICAgICAgIG95ID0gKGggLyAyKSAqIGthcHBhLCAvLyBjb250cm9sIHBvaW50IG9mZnNldCB2ZXJ0aWNhbFxuICAgICAgICAgICAgICAgIHhlID0geCArIHcsICAgICAgICAgICAvLyB4LWVuZFxuICAgICAgICAgICAgICAgIHllID0geSArIGgsICAgICAgICAgICAvLyB5LWVuZFxuICAgICAgICAgICAgICAgIHhtID0geCArIHcgLyAyLCAgICAgICAvLyB4LW1pZGRsZVxuICAgICAgICAgICAgICAgIHltID0geSArIGggLyAyOyAgICAgICAvLyB5LW1pZGRsZVxuXG4gICAgICAgICAgICBjb250ZXh0Lm1vdmVUbyh4LCB5bSk7XG4gICAgICAgICAgICBjb250ZXh0LmJlemllckN1cnZlVG8oeCwgeW0gLSBveSwgeG0gLSBveCwgeSwgeG0sIHkpO1xuICAgICAgICAgICAgY29udGV4dC5iZXppZXJDdXJ2ZVRvKHhtICsgb3gsIHksIHhlLCB5bSAtIG95LCB4ZSwgeW0pO1xuICAgICAgICAgICAgY29udGV4dC5iZXppZXJDdXJ2ZVRvKHhlLCB5bSArIG95LCB4bSArIG94LCB5ZSwgeG0sIHllKTtcbiAgICAgICAgICAgIGNvbnRleHQuYmV6aWVyQ3VydmVUbyh4bSAtIG94LCB5ZSwgeCwgeW0gKyBveSwgeCwgeW0pO1xuICAgICAgICAgICAgY29udGV4dC5jbG9zZVBhdGgoKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChkYXRhLnR5cGUgPT09IENPTlNULlNIQVBFUy5SUkVDKVxuICAgICAgICB7XG5cbiAgICAgICAgICAgIHZhciByeCA9IHNoYXBlLng7XG4gICAgICAgICAgICB2YXIgcnkgPSBzaGFwZS55O1xuICAgICAgICAgICAgdmFyIHdpZHRoID0gc2hhcGUud2lkdGg7XG4gICAgICAgICAgICB2YXIgaGVpZ2h0ID0gc2hhcGUuaGVpZ2h0O1xuICAgICAgICAgICAgdmFyIHJhZGl1cyA9IHNoYXBlLnJhZGl1cztcblxuICAgICAgICAgICAgdmFyIG1heFJhZGl1cyA9IE1hdGgubWluKHdpZHRoLCBoZWlnaHQpIC8gMiB8IDA7XG4gICAgICAgICAgICByYWRpdXMgPSByYWRpdXMgPiBtYXhSYWRpdXMgPyBtYXhSYWRpdXMgOiByYWRpdXM7XG5cbiAgICAgICAgICAgIGNvbnRleHQubW92ZVRvKHJ4LCByeSArIHJhZGl1cyk7XG4gICAgICAgICAgICBjb250ZXh0LmxpbmVUbyhyeCwgcnkgKyBoZWlnaHQgLSByYWRpdXMpO1xuICAgICAgICAgICAgY29udGV4dC5xdWFkcmF0aWNDdXJ2ZVRvKHJ4LCByeSArIGhlaWdodCwgcnggKyByYWRpdXMsIHJ5ICsgaGVpZ2h0KTtcbiAgICAgICAgICAgIGNvbnRleHQubGluZVRvKHJ4ICsgd2lkdGggLSByYWRpdXMsIHJ5ICsgaGVpZ2h0KTtcbiAgICAgICAgICAgIGNvbnRleHQucXVhZHJhdGljQ3VydmVUbyhyeCArIHdpZHRoLCByeSArIGhlaWdodCwgcnggKyB3aWR0aCwgcnkgKyBoZWlnaHQgLSByYWRpdXMpO1xuICAgICAgICAgICAgY29udGV4dC5saW5lVG8ocnggKyB3aWR0aCwgcnkgKyByYWRpdXMpO1xuICAgICAgICAgICAgY29udGV4dC5xdWFkcmF0aWNDdXJ2ZVRvKHJ4ICsgd2lkdGgsIHJ5LCByeCArIHdpZHRoIC0gcmFkaXVzLCByeSk7XG4gICAgICAgICAgICBjb250ZXh0LmxpbmVUbyhyeCArIHJhZGl1cywgcnkpO1xuICAgICAgICAgICAgY29udGV4dC5xdWFkcmF0aWNDdXJ2ZVRvKHJ4LCByeSwgcngsIHJ5ICsgcmFkaXVzKTtcbiAgICAgICAgICAgIGNvbnRleHQuY2xvc2VQYXRoKCk7XG4gICAgICAgIH1cbiAgICB9XG59O1xuXG4vKlxuICogVXBkYXRlcyB0aGUgdGludCBvZiBhIGdyYXBoaWNzIG9iamVjdFxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0gZ3JhcGhpY3Mge1BJWEkuR3JhcGhpY3N9IHRoZSBncmFwaGljcyB0aGF0IHdpbGwgaGF2ZSBpdHMgdGludCB1cGRhdGVkXG4gKlxuICovXG5DYW52YXNHcmFwaGljcy51cGRhdGVHcmFwaGljc1RpbnQgPSBmdW5jdGlvbiAoZ3JhcGhpY3MpXG57XG4gICAgaWYgKGdyYXBoaWNzLnRpbnQgPT09IDB4RkZGRkZGICYmIGdyYXBoaWNzLl9wcmV2VGludCA9PT0gZ3JhcGhpY3MudGludClcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgZ3JhcGhpY3MuX3ByZXZUaW50ID0gZ3JhcGhpY3MudGludDtcblxuICAgIHZhciB0aW50UiA9IChncmFwaGljcy50aW50ID4+IDE2ICYgMHhGRikgLyAyNTU7XG4gICAgdmFyIHRpbnRHID0gKGdyYXBoaWNzLnRpbnQgPj4gOCAmIDB4RkYpIC8gMjU1O1xuICAgIHZhciB0aW50QiA9IChncmFwaGljcy50aW50ICYgMHhGRikvIDI1NTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZ3JhcGhpY3MuZ3JhcGhpY3NEYXRhLmxlbmd0aDsgaSsrKVxuICAgIHtcbiAgICAgICAgdmFyIGRhdGEgPSBncmFwaGljcy5ncmFwaGljc0RhdGFbaV07XG5cbiAgICAgICAgdmFyIGZpbGxDb2xvciA9IGRhdGEuZmlsbENvbG9yIHwgMDtcbiAgICAgICAgdmFyIGxpbmVDb2xvciA9IGRhdGEubGluZUNvbG9yIHwgMDtcblxuICAgICAgICAvKlxuICAgICAgICB2YXIgY29sb3JSID0gKGZpbGxDb2xvciA+PiAxNiAmIDB4RkYpIC8gMjU1O1xuICAgICAgICB2YXIgY29sb3JHID0gKGZpbGxDb2xvciA+PiA4ICYgMHhGRikgLyAyNTU7XG4gICAgICAgIHZhciBjb2xvckIgPSAoZmlsbENvbG9yICYgMHhGRikgLyAyNTU7XG5cbiAgICAgICAgY29sb3JSICo9IHRpbnRSO1xuICAgICAgICBjb2xvckcgKj0gdGludEc7XG4gICAgICAgIGNvbG9yQiAqPSB0aW50QjtcblxuICAgICAgICBmaWxsQ29sb3IgPSAoKGNvbG9yUioyNTUgPDwgMTYpICsgKGNvbG9yRyoyNTUgPDwgOCkgKyBjb2xvckIqMjU1KTtcblxuICAgICAgICBjb2xvclIgPSAobGluZUNvbG9yID4+IDE2ICYgMHhGRikgLyAyNTU7XG4gICAgICAgIGNvbG9yRyA9IChsaW5lQ29sb3IgPj4gOCAmIDB4RkYpIC8gMjU1O1xuICAgICAgICBjb2xvckIgPSAobGluZUNvbG9yICYgMHhGRikgLyAyNTU7XG5cbiAgICAgICAgY29sb3JSICo9IHRpbnRSO1xuICAgICAgICBjb2xvckcgKj0gdGludEc7XG4gICAgICAgIGNvbG9yQiAqPSB0aW50QjtcblxuICAgICAgICBsaW5lQ29sb3IgPSAoKGNvbG9yUioyNTUgPDwgMTYpICsgKGNvbG9yRyoyNTUgPDwgOCkgKyBjb2xvckIqMjU1KTtcbiAgICAgICAgKi9cblxuICAgICAgICAvLyBzdXBlciBpbmxpbmUgY29zIGltIGFuIG9wdGltaXphdGlvbiBOQVpJIDopXG4gICAgICAgIGRhdGEuX2ZpbGxUaW50ID0gKCgoZmlsbENvbG9yID4+IDE2ICYgMHhGRikgLyAyNTUgKiB0aW50UioyNTUgPDwgMTYpICsgKChmaWxsQ29sb3IgPj4gOCAmIDB4RkYpIC8gMjU1ICogdGludEcqMjU1IDw8IDgpICsgIChmaWxsQ29sb3IgJiAweEZGKSAvIDI1NSAqIHRpbnRCKjI1NSk7XG4gICAgICAgIGRhdGEuX2xpbmVUaW50ID0gKCgobGluZUNvbG9yID4+IDE2ICYgMHhGRikgLyAyNTUgKiB0aW50UioyNTUgPDwgMTYpICsgKChsaW5lQ29sb3IgPj4gOCAmIDB4RkYpIC8gMjU1ICogdGludEcqMjU1IDw8IDgpICsgIChsaW5lQ29sb3IgJiAweEZGKSAvIDI1NSAqIHRpbnRCKjI1NSk7XG5cbiAgICB9XG59O1xuXG4iLCJ2YXIgQ2FudmFzR3JhcGhpY3MgPSByZXF1aXJlKCcuL0NhbnZhc0dyYXBoaWNzJyk7XG5cbi8qKlxuICogQSBzZXQgb2YgZnVuY3Rpb25zIHVzZWQgdG8gaGFuZGxlIG1hc2tpbmcuXG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICovXG5mdW5jdGlvbiBDYW52YXNNYXNrTWFuYWdlcigpXG57fVxuXG5DYW52YXNNYXNrTWFuYWdlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBDYW52YXNNYXNrTWFuYWdlcjtcbm1vZHVsZS5leHBvcnRzID0gQ2FudmFzTWFza01hbmFnZXI7XG5cbi8qKlxuICogVGhpcyBtZXRob2QgYWRkcyBpdCB0byB0aGUgY3VycmVudCBzdGFjayBvZiBtYXNrcy5cbiAqXG4gKiBAcGFyYW0gbWFza0RhdGEge29iamVjdH0gdGhlIG1hc2tEYXRhIHRoYXQgd2lsbCBiZSBwdXNoZWRcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5XZWJHTFJlbmRlcmVyfFBJWEkuQ2FudmFzUmVuZGVyZXJ9IFRoZSByZW5kZXJlciBjb250ZXh0IHRvIHVzZS5cbiAqL1xuQ2FudmFzTWFza01hbmFnZXIucHJvdG90eXBlLnB1c2hNYXNrID0gZnVuY3Rpb24gKG1hc2tEYXRhLCByZW5kZXJlcilcbntcblxuICAgIHJlbmRlcmVyLmNvbnRleHQuc2F2ZSgpO1xuXG4gICAgdmFyIGNhY2hlQWxwaGEgPSBtYXNrRGF0YS5hbHBoYTtcbiAgICB2YXIgdHJhbnNmb3JtID0gbWFza0RhdGEud29ybGRUcmFuc2Zvcm07XG4gICAgdmFyIHJlc29sdXRpb24gPSByZW5kZXJlci5yZXNvbHV0aW9uO1xuXG4gICAgcmVuZGVyZXIuY29udGV4dC5zZXRUcmFuc2Zvcm0oXG4gICAgICAgIHRyYW5zZm9ybS5hICogcmVzb2x1dGlvbixcbiAgICAgICAgdHJhbnNmb3JtLmIgKiByZXNvbHV0aW9uLFxuICAgICAgICB0cmFuc2Zvcm0uYyAqIHJlc29sdXRpb24sXG4gICAgICAgIHRyYW5zZm9ybS5kICogcmVzb2x1dGlvbixcbiAgICAgICAgdHJhbnNmb3JtLnR4ICogcmVzb2x1dGlvbixcbiAgICAgICAgdHJhbnNmb3JtLnR5ICogcmVzb2x1dGlvblxuICAgICk7XG5cbiAgICAvL1RPRE8gc3Vwb3J0IHNwcml0ZSBhbHBoYSBtYXNrcz8/XG4gICAgLy9sb3RzIG9mIGVmZm9ydCByZXF1aXJlZC4gSWYgZGVtYW5kIGlzIGdyZWF0IGVub3VnaC4uXG4gICAgaWYoIW1hc2tEYXRhLnRleHR1cmUpXG4gICAge1xuICAgICAgICBDYW52YXNHcmFwaGljcy5yZW5kZXJHcmFwaGljc01hc2sobWFza0RhdGEsIHJlbmRlcmVyLmNvbnRleHQpO1xuICAgICAgICByZW5kZXJlci5jb250ZXh0LmNsaXAoKTtcbiAgICB9XG5cbiAgICBtYXNrRGF0YS53b3JsZEFscGhhID0gY2FjaGVBbHBoYTtcbn07XG5cbi8qKlxuICogUmVzdG9yZXMgdGhlIGN1cnJlbnQgZHJhd2luZyBjb250ZXh0IHRvIHRoZSBzdGF0ZSBpdCB3YXMgYmVmb3JlIHRoZSBtYXNrIHdhcyBhcHBsaWVkLlxuICpcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5XZWJHTFJlbmRlcmVyfFBJWEkuQ2FudmFzUmVuZGVyZXJ9IFRoZSByZW5kZXJlciBjb250ZXh0IHRvIHVzZS5cbiAqL1xuQ2FudmFzTWFza01hbmFnZXIucHJvdG90eXBlLnBvcE1hc2sgPSBmdW5jdGlvbiAocmVuZGVyZXIpXG57XG4gICAgcmVuZGVyZXIuY29udGV4dC5yZXN0b3JlKCk7XG59O1xuXG5DYW52YXNNYXNrTWFuYWdlci5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uICgpIHt9O1xuIiwidmFyIHV0aWxzID0gcmVxdWlyZSgnLi4vLi4vLi4vdXRpbHMnKTtcblxuLyoqXG4gKiBVdGlsaXR5IG1ldGhvZHMgZm9yIFNwcml0ZS9UZXh0dXJlIHRpbnRpbmcuXG4gKiBAc3RhdGljXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKi9cbnZhciBDYW52YXNUaW50ZXIgPSB7fTtcbm1vZHVsZS5leHBvcnRzID0gQ2FudmFzVGludGVyO1xuXG4vKipcbiAqIEJhc2ljYWxseSB0aGlzIG1ldGhvZCBqdXN0IG5lZWRzIGEgc3ByaXRlIGFuZCBhIGNvbG9yIGFuZCB0aW50cyB0aGUgc3ByaXRlIHdpdGggdGhlIGdpdmVuIGNvbG9yLlxuICpcbiAqIEBwYXJhbSBzcHJpdGUge1BJWEkuU3ByaXRlfSB0aGUgc3ByaXRlIHRvIHRpbnRcbiAqIEBwYXJhbSBjb2xvciB7bnVtYmVyfSB0aGUgY29sb3IgdG8gdXNlIHRvIHRpbnQgdGhlIHNwcml0ZSB3aXRoXG4gKiBAcmV0dXJuIHtIVE1MQ2FudmFzRWxlbWVudH0gVGhlIHRpbnRlZCBjYW52YXNcbiAqL1xuQ2FudmFzVGludGVyLmdldFRpbnRlZFRleHR1cmUgPSBmdW5jdGlvbiAoc3ByaXRlLCBjb2xvcilcbntcbiAgICB2YXIgdGV4dHVyZSA9IHNwcml0ZS50ZXh0dXJlO1xuXG4gICAgY29sb3IgPSBDYW52YXNUaW50ZXIucm91bmRDb2xvcihjb2xvcik7XG5cbiAgICB2YXIgc3RyaW5nQ29sb3IgPSAnIycgKyAoJzAwMDAwJyArICggY29sb3IgfCAwKS50b1N0cmluZygxNikpLnN1YnN0cigtNik7XG5cbiAgICB0ZXh0dXJlLnRpbnRDYWNoZSA9IHRleHR1cmUudGludENhY2hlIHx8IHt9O1xuXG4gICAgaWYgKHRleHR1cmUudGludENhY2hlW3N0cmluZ0NvbG9yXSlcbiAgICB7XG4gICAgICAgIHJldHVybiB0ZXh0dXJlLnRpbnRDYWNoZVtzdHJpbmdDb2xvcl07XG4gICAgfVxuXG4gICAgIC8vIGNsb25lIHRleHR1cmUuLlxuICAgIHZhciBjYW52YXMgPSBDYW52YXNUaW50ZXIuY2FudmFzIHx8IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NhbnZhcycpO1xuXG4gICAgLy9DYW52YXNUaW50ZXIudGludFdpdGhQZXJQaXhlbCh0ZXh0dXJlLCBzdHJpbmdDb2xvciwgY2FudmFzKTtcbiAgICBDYW52YXNUaW50ZXIudGludE1ldGhvZCh0ZXh0dXJlLCBjb2xvciwgY2FudmFzKTtcblxuICAgIGlmIChDYW52YXNUaW50ZXIuY29udmVydFRpbnRUb0ltYWdlKVxuICAgIHtcbiAgICAgICAgLy8gaXMgdGhpcyBiZXR0ZXI/XG4gICAgICAgIHZhciB0aW50SW1hZ2UgPSBuZXcgSW1hZ2UoKTtcbiAgICAgICAgdGludEltYWdlLnNyYyA9IGNhbnZhcy50b0RhdGFVUkwoKTtcblxuICAgICAgICB0ZXh0dXJlLnRpbnRDYWNoZVtzdHJpbmdDb2xvcl0gPSB0aW50SW1hZ2U7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHRleHR1cmUudGludENhY2hlW3N0cmluZ0NvbG9yXSA9IGNhbnZhcztcbiAgICAgICAgLy8gaWYgd2UgYXJlIG5vdCBjb252ZXJ0aW5nIHRoZSB0ZXh0dXJlIHRvIGFuIGltYWdlIHRoZW4gd2UgbmVlZCB0byBsb3NlIHRoZSByZWZlcmVuY2UgdG8gdGhlIGNhbnZhc1xuICAgICAgICBDYW52YXNUaW50ZXIuY2FudmFzID0gbnVsbDtcbiAgICB9XG5cbiAgICByZXR1cm4gY2FudmFzO1xufTtcblxuLyoqXG4gKiBUaW50IGEgdGV4dHVyZSB1c2luZyB0aGUgJ211bHRpcGx5JyBvcGVyYXRpb24uXG4gKlxuICogQHBhcmFtIHRleHR1cmUge1BJWEkuVGV4dHVyZX0gdGhlIHRleHR1cmUgdG8gdGludFxuICogQHBhcmFtIGNvbG9yIHtudW1iZXJ9IHRoZSBjb2xvciB0byB1c2UgdG8gdGludCB0aGUgc3ByaXRlIHdpdGhcbiAqIEBwYXJhbSBjYW52YXMge0hUTUxDYW52YXNFbGVtZW50fSB0aGUgY3VycmVudCBjYW52YXNcbiAqL1xuQ2FudmFzVGludGVyLnRpbnRXaXRoTXVsdGlwbHkgPSBmdW5jdGlvbiAodGV4dHVyZSwgY29sb3IsIGNhbnZhcylcbntcbiAgICB2YXIgY29udGV4dCA9IGNhbnZhcy5nZXRDb250ZXh0KCAnMmQnICk7XG5cbiAgICB2YXIgcmVzb2x1dGlvbiA9IHRleHR1cmUuYmFzZVRleHR1cmUucmVzb2x1dGlvbjtcblxuICAgIHZhciBjcm9wID0gdGV4dHVyZS5jcm9wLmNsb25lKCk7XG4gICAgY3JvcC54ICo9IHJlc29sdXRpb247XG4gICAgY3JvcC55ICo9IHJlc29sdXRpb247XG4gICAgY3JvcC53aWR0aCAqPSByZXNvbHV0aW9uO1xuICAgIGNyb3AuaGVpZ2h0ICo9IHJlc29sdXRpb247XG5cbiAgICBjYW52YXMud2lkdGggPSBjcm9wLndpZHRoO1xuICAgIGNhbnZhcy5oZWlnaHQgPSBjcm9wLmhlaWdodDtcblxuICAgIGNvbnRleHQuZmlsbFN0eWxlID0gJyMnICsgKCcwMDAwMCcgKyAoIGNvbG9yIHwgMCkudG9TdHJpbmcoMTYpKS5zdWJzdHIoLTYpO1xuXG4gICAgY29udGV4dC5maWxsUmVjdCgwLCAwLCBjcm9wLndpZHRoLCBjcm9wLmhlaWdodCk7XG5cbiAgICBjb250ZXh0Lmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbiA9ICdtdWx0aXBseSc7XG5cbiAgICBjb250ZXh0LmRyYXdJbWFnZShcbiAgICAgICAgdGV4dHVyZS5iYXNlVGV4dHVyZS5zb3VyY2UsXG4gICAgICAgIGNyb3AueCxcbiAgICAgICAgY3JvcC55LFxuICAgICAgICBjcm9wLndpZHRoLFxuICAgICAgICBjcm9wLmhlaWdodCxcbiAgICAgICAgMCxcbiAgICAgICAgMCxcbiAgICAgICAgY3JvcC53aWR0aCxcbiAgICAgICAgY3JvcC5oZWlnaHRcbiAgICApO1xuXG4gICAgY29udGV4dC5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb24gPSAnZGVzdGluYXRpb24tYXRvcCc7XG5cbiAgICBjb250ZXh0LmRyYXdJbWFnZShcbiAgICAgICAgdGV4dHVyZS5iYXNlVGV4dHVyZS5zb3VyY2UsXG4gICAgICAgIGNyb3AueCxcbiAgICAgICAgY3JvcC55LFxuICAgICAgICBjcm9wLndpZHRoLFxuICAgICAgICBjcm9wLmhlaWdodCxcbiAgICAgICAgMCxcbiAgICAgICAgMCxcbiAgICAgICAgY3JvcC53aWR0aCxcbiAgICAgICAgY3JvcC5oZWlnaHRcbiAgICApO1xufTtcblxuLyoqXG4gKiBUaW50IGEgdGV4dHVyZSB1c2luZyB0aGUgJ292ZXJsYXknIG9wZXJhdGlvbi5cbiAqXG4gKiBAcGFyYW0gdGV4dHVyZSB7UElYSS5UZXh0dXJlfSB0aGUgdGV4dHVyZSB0byB0aW50XG4gKiBAcGFyYW0gY29sb3Ige251bWJlcn0gdGhlIGNvbG9yIHRvIHVzZSB0byB0aW50IHRoZSBzcHJpdGUgd2l0aFxuICogQHBhcmFtIGNhbnZhcyB7SFRNTENhbnZhc0VsZW1lbnR9IHRoZSBjdXJyZW50IGNhbnZhc1xuICovXG5DYW52YXNUaW50ZXIudGludFdpdGhPdmVybGF5ID0gZnVuY3Rpb24gKHRleHR1cmUsIGNvbG9yLCBjYW52YXMpXG57XG4gICAgdmFyIGNvbnRleHQgPSBjYW52YXMuZ2V0Q29udGV4dCggJzJkJyApO1xuXG4gICAgdmFyIHJlc29sdXRpb24gPSB0ZXh0dXJlLmJhc2VUZXh0dXJlLnJlc29sdXRpb247XG5cbiAgICB2YXIgY3JvcCA9IHRleHR1cmUuY3JvcC5jbG9uZSgpO1xuICAgIGNyb3AueCAqPSByZXNvbHV0aW9uO1xuICAgIGNyb3AueSAqPSByZXNvbHV0aW9uO1xuICAgIGNyb3Aud2lkdGggKj0gcmVzb2x1dGlvbjtcbiAgICBjcm9wLmhlaWdodCAqPSByZXNvbHV0aW9uO1xuXG4gICAgY2FudmFzLndpZHRoID0gY3JvcC53aWR0aDtcbiAgICBjYW52YXMuaGVpZ2h0ID0gY3JvcC5oZWlnaHQ7XG5cbiAgICBjb250ZXh0Lmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbiA9ICdjb3B5JztcbiAgICBjb250ZXh0LmZpbGxTdHlsZSA9ICcjJyArICgnMDAwMDAnICsgKCBjb2xvciB8IDApLnRvU3RyaW5nKDE2KSkuc3Vic3RyKC02KTtcbiAgICBjb250ZXh0LmZpbGxSZWN0KDAsIDAsIGNyb3Aud2lkdGgsIGNyb3AuaGVpZ2h0KTtcblxuICAgIGNvbnRleHQuZ2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uID0gJ2Rlc3RpbmF0aW9uLWF0b3AnO1xuICAgIGNvbnRleHQuZHJhd0ltYWdlKFxuICAgICAgICB0ZXh0dXJlLmJhc2VUZXh0dXJlLnNvdXJjZSxcbiAgICAgICAgY3JvcC54LFxuICAgICAgICBjcm9wLnksXG4gICAgICAgIGNyb3Aud2lkdGgsXG4gICAgICAgIGNyb3AuaGVpZ2h0LFxuICAgICAgICAwLFxuICAgICAgICAwLFxuICAgICAgICBjcm9wLndpZHRoLFxuICAgICAgICBjcm9wLmhlaWdodFxuICAgICk7XG5cbiAgICAvLyBjb250ZXh0Lmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbiA9ICdjb3B5Jztcbn07XG5cbi8qKlxuICogVGludCBhIHRleHR1cmUgcGl4ZWwgcGVyIHBpeGVsLlxuICpcbiAqIEBwYXJhbSB0ZXh0dXJlIHtQSVhJLlRleHR1cmV9IHRoZSB0ZXh0dXJlIHRvIHRpbnRcbiAqIEBwYXJhbSBjb2xvciB7bnVtYmVyfSB0aGUgY29sb3IgdG8gdXNlIHRvIHRpbnQgdGhlIHNwcml0ZSB3aXRoXG4gKiBAcGFyYW0gY2FudmFzIHtIVE1MQ2FudmFzRWxlbWVudH0gdGhlIGN1cnJlbnQgY2FudmFzXG4gKi9cbkNhbnZhc1RpbnRlci50aW50V2l0aFBlclBpeGVsID0gZnVuY3Rpb24gKHRleHR1cmUsIGNvbG9yLCBjYW52YXMpXG57XG4gICAgdmFyIGNvbnRleHQgPSBjYW52YXMuZ2V0Q29udGV4dCggJzJkJyApO1xuXG4gICAgdmFyIHJlc29sdXRpb24gPSB0ZXh0dXJlLmJhc2VUZXh0dXJlLnJlc29sdXRpb247XG5cbiAgICB2YXIgY3JvcCA9IHRleHR1cmUuY3JvcC5jbG9uZSgpO1xuICAgIGNyb3AueCAqPSByZXNvbHV0aW9uO1xuICAgIGNyb3AueSAqPSByZXNvbHV0aW9uO1xuICAgIGNyb3Aud2lkdGggKj0gcmVzb2x1dGlvbjtcbiAgICBjcm9wLmhlaWdodCAqPSByZXNvbHV0aW9uO1xuXG4gICAgY2FudmFzLndpZHRoID0gY3JvcC53aWR0aDtcbiAgICBjYW52YXMuaGVpZ2h0ID0gY3JvcC5oZWlnaHQ7XG5cbiAgICBjb250ZXh0Lmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbiA9ICdjb3B5JztcbiAgICBjb250ZXh0LmRyYXdJbWFnZShcbiAgICAgICAgdGV4dHVyZS5iYXNlVGV4dHVyZS5zb3VyY2UsXG4gICAgICAgIGNyb3AueCxcbiAgICAgICAgY3JvcC55LFxuICAgICAgICBjcm9wLndpZHRoLFxuICAgICAgICBjcm9wLmhlaWdodCxcbiAgICAgICAgMCxcbiAgICAgICAgMCxcbiAgICAgICAgY3JvcC53aWR0aCxcbiAgICAgICAgY3JvcC5oZWlnaHRcbiAgICApO1xuXG4gICAgdmFyIHJnYlZhbHVlcyA9IHV0aWxzLmhleDJyZ2IoY29sb3IpO1xuICAgIHZhciByID0gcmdiVmFsdWVzWzBdLCBnID0gcmdiVmFsdWVzWzFdLCBiID0gcmdiVmFsdWVzWzJdO1xuXG4gICAgdmFyIHBpeGVsRGF0YSA9IGNvbnRleHQuZ2V0SW1hZ2VEYXRhKDAsIDAsIGNyb3Aud2lkdGgsIGNyb3AuaGVpZ2h0KTtcblxuICAgIHZhciBwaXhlbHMgPSBwaXhlbERhdGEuZGF0YTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcGl4ZWxzLmxlbmd0aDsgaSArPSA0KVxuICAgIHtcbiAgICAgICAgcGl4ZWxzW2krMF0gKj0gcjtcbiAgICAgICAgcGl4ZWxzW2krMV0gKj0gZztcbiAgICAgICAgcGl4ZWxzW2krMl0gKj0gYjtcbiAgICB9XG5cbiAgICBjb250ZXh0LnB1dEltYWdlRGF0YShwaXhlbERhdGEsIDAsIDApO1xufTtcblxuLyoqXG4gKiBSb3VuZHMgdGhlIHNwZWNpZmllZCBjb2xvciBhY2NvcmRpbmcgdG8gdGhlIENhbnZhc1RpbnRlci5jYWNoZVN0ZXBzUGVyQ29sb3JDaGFubmVsLlxuICpcbiAqIEBwYXJhbSBjb2xvciB7bnVtYmVyfSB0aGUgY29sb3IgdG8gcm91bmQsIHNob3VsZCBiZSBhIGhleCBjb2xvclxuICovXG5DYW52YXNUaW50ZXIucm91bmRDb2xvciA9IGZ1bmN0aW9uIChjb2xvcilcbntcbiAgICB2YXIgc3RlcCA9IENhbnZhc1RpbnRlci5jYWNoZVN0ZXBzUGVyQ29sb3JDaGFubmVsO1xuXG4gICAgdmFyIHJnYlZhbHVlcyA9IHV0aWxzLmhleDJyZ2IoY29sb3IpO1xuXG4gICAgcmdiVmFsdWVzWzBdID0gTWF0aC5taW4oMjU1LCAocmdiVmFsdWVzWzBdIC8gc3RlcCkgKiBzdGVwKTtcbiAgICByZ2JWYWx1ZXNbMV0gPSBNYXRoLm1pbigyNTUsIChyZ2JWYWx1ZXNbMV0gLyBzdGVwKSAqIHN0ZXApO1xuICAgIHJnYlZhbHVlc1syXSA9IE1hdGgubWluKDI1NSwgKHJnYlZhbHVlc1syXSAvIHN0ZXApICogc3RlcCk7XG5cbiAgICByZXR1cm4gdXRpbHMucmdiMmhleChyZ2JWYWx1ZXMpO1xufTtcblxuLyoqXG4gKiBOdW1iZXIgb2Ygc3RlcHMgd2hpY2ggd2lsbCBiZSB1c2VkIGFzIGEgY2FwIHdoZW4gcm91bmRpbmcgY29sb3JzLlxuICpcbiAqIEBtZW1iZXJcbiAqL1xuQ2FudmFzVGludGVyLmNhY2hlU3RlcHNQZXJDb2xvckNoYW5uZWwgPSA4O1xuXG4vKipcbiAqIFRpbnQgY2FjaGUgYm9vbGVhbiBmbGFnLlxuICpcbiAqIEBtZW1iZXJcbiAqL1xuQ2FudmFzVGludGVyLmNvbnZlcnRUaW50VG9JbWFnZSA9IGZhbHNlO1xuXG4vKipcbiAqIFdoZXRoZXIgb3Igbm90IHRoZSBDYW52YXMgQmxlbmRNb2RlcyBhcmUgc3VwcG9ydGVkLCBjb25zZXF1ZW50bHkgdGhlIGFiaWxpdHkgdG8gdGludCB1c2luZyB0aGUgbXVsdGlwbHkgbWV0aG9kLlxuICpcbiAqIEBtZW1iZXJcbiAqL1xuQ2FudmFzVGludGVyLmNhblVzZU11bHRpcGx5ID0gdXRpbHMuY2FuVXNlTmV3Q2FudmFzQmxlbmRNb2RlcygpO1xuXG4vKipcbiAqIFRoZSB0aW50aW5nIG1ldGhvZCB0aGF0IHdpbGwgYmUgdXNlZC5cbiAqXG4gKi9cbkNhbnZhc1RpbnRlci50aW50TWV0aG9kID0gQ2FudmFzVGludGVyLmNhblVzZU11bHRpcGx5ID8gQ2FudmFzVGludGVyLnRpbnRXaXRoTXVsdGlwbHkgOiAgQ2FudmFzVGludGVyLnRpbnRXaXRoUGVyUGl4ZWw7XG4iLCJ2YXIgR0xUZXh0dXJlID0gcmVxdWlyZSgncGl4aS1nbC1jb3JlJykuR0xUZXh0dXJlLFxuXHR1dGlscyA9IHJlcXVpcmUoJy4uLy4uL3V0aWxzJyk7XG5cbi8qKlxuICogSGVscGVyIGNsYXNzIHRvIGNyZWF0ZSBhIHdlYkdMIFRleHR1cmVcbiAqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gZ2wge1dlYkdMUmVuZGVyaW5nQ29udGV4dH1cbiAqL1xuXG52YXIgVGV4dHVyZU1hbmFnZXIgPSBmdW5jdGlvbihnbClcbntcblx0dGhpcy5nbCA9IGdsO1xuXG5cdC8vIHRyYWNrIHRleHR1cmVzIGluIHRoZSByZW5kZXJlciBzbyB3ZSBjYW4gbm8gbG9uZ2VyIGxpc3RlbiB0byB0aGVtIG9uIGRlc3RydWN0aW9uLlxuXHR0aGlzLl9tYW5hZ2VkVGV4dHVyZXMgPSBbXTtcbiAgICB0aGlzLmdsVGV4dHVyZXMgPSB7fTtcblxufVxuXG5UZXh0dXJlTWFuYWdlci5wcm90b3R5cGUuYmluZFRleHR1cmUgPSBmdW5jdGlvbih0ZXh0dXJlKVxue1xuXG59XG5cblxuVGV4dHVyZU1hbmFnZXIucHJvdG90eXBlLmdldFRleHR1cmUgPSBmdW5jdGlvbih0ZXh0dXJlKVxue1xuXG59XG5cbi8qKlxuICogVXBkYXRlcyBhbmQvb3IgQ3JlYXRlcyBhIFdlYkdMIHRleHR1cmUgZm9yIHRoZSByZW5kZXJlcidzIGNvbnRleHQuXG4gKlxuICogQHBhcmFtIHRleHR1cmUge1BJWEkuQmFzZVRleHR1cmV8UElYSS5UZXh0dXJlfSB0aGUgdGV4dHVyZSB0byB1cGRhdGVcbiAqL1xuVGV4dHVyZU1hbmFnZXIucHJvdG90eXBlLnVwZGF0ZVRleHR1cmUgPSBmdW5jdGlvbih0ZXh0dXJlKVxue1xuXHR0ZXh0dXJlID0gdGV4dHVyZS5iYXNlVGV4dHVyZSB8fCB0ZXh0dXJlO1xuXG5cdGlmICghdGV4dHVyZS5oYXNMb2FkZWQpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgXG4gICAgdmFyIGdsID0gdGhpcy5nbDtcbiAgICB2YXIgZ2xUZXh0dXJlID0gdGhpcy5nbFRleHR1cmVzW3RleHR1cmUudWlkXS8vdGV4dHVyZS5fZ2xUZXh0dXJlc1tnbC5pZF07XG5cbiAgICBpZiAoIWdsVGV4dHVyZSlcbiAgICB7XG4gICAgICAgIGdsVGV4dHVyZSA9IG5ldyBHTFRleHR1cmUoZ2wpO1xuICAgICAgICBnbFRleHR1cmUucHJlbXVsdGlwbHlBbHBoYSA9IHRydWVcbiAgICAgICAgdGV4dHVyZS5fZ2xUZXh0dXJlc1tnbC5pZF0gPSBnbFRleHR1cmU7XG5cbiAgICAgICAvLyB0aGlzLmdsVGV4dHVyZXNbdGV4dHVyZS51aWRdID0gZ2xUZXh0dXJlO1xuXG4gICAgICAgIHRleHR1cmUub24oJ3VwZGF0ZScsIHRoaXMudXBkYXRlVGV4dHVyZSwgdGhpcyk7XG4gICAgICAgIHRleHR1cmUub24oJ2Rpc3Bvc2UnLCB0aGlzLmRlc3Ryb3lUZXh0dXJlLCB0aGlzKTtcbiAgICAgICAgXG4gICAgICAgIHRoaXMuX21hbmFnZWRUZXh0dXJlcy5wdXNoKHRleHR1cmUpO1xuICAgIH1cblxuICAgIGdsVGV4dHVyZS51cGxvYWQodGV4dHVyZS5zb3VyY2UpO1xuICAgIFxuICAgIC8vVE9ETyBjaGVjayBpcyBwb3dlciBvZiB0d28uLlxuICAgIGdsVGV4dHVyZS5lbmFibGVXcmFwQ2xhbXAoKTtcblxuXG4gICAgLy8gVE9ETyBjaGVjayBmb3Igc2NhbGluZyB0eXBlXG4gICAgZ2xUZXh0dXJlLmVuYWJsZUxpbmVhclNjYWxpbmcoKTtcblxuICAgIHJldHVybiAgdGV4dHVyZS5fZ2xUZXh0dXJlc1tnbC5pZF07XG59XG5cbi8qKlxuICogRGVsZXRlcyB0aGUgdGV4dHVyZSBmcm9tIFdlYkdMXG4gKlxuICogQHBhcmFtIHRleHR1cmUge1BJWEkuQmFzZVRleHR1cmV8UElYSS5UZXh0dXJlfSB0aGUgdGV4dHVyZSB0byBkZXN0cm95XG4gKi9cblRleHR1cmVNYW5hZ2VyLnByb3RvdHlwZS5kZXN0cm95VGV4dHVyZSA9IGZ1bmN0aW9uKHRleHR1cmUsIF9za2lwUmVtb3ZlKVxue1xuXHR0ZXh0dXJlID0gdGV4dHVyZS5iYXNlVGV4dHVyZSB8fCB0ZXh0dXJlO1xuXG4gICAgaWYgKCF0ZXh0dXJlLmhhc0xvYWRlZClcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAodGV4dHVyZS5fZ2xUZXh0dXJlc1t0aGlzLmdsLmlkXSlcbiAgICB7XG4gICAgICAgIHRleHR1cmUuX2dsVGV4dHVyZXNbdGhpcy5nbC5pZF0uZGVzdHJveSgpO1xuICAgICAgICB0ZXh0dXJlLm9mZigndXBkYXRlJywgdGhpcy51cGRhdGVUZXh0dXJlLCB0aGlzKTtcbiAgICAgICAgdGV4dHVyZS5vZmYoJ2Rpc3Bvc2UnLCB0aGlzLmRlc3Ryb3lUZXh0dXJlLCB0aGlzKTtcblxuXG4gICAgICAgIGRlbGV0ZSB0ZXh0dXJlLl9nbFRleHR1cmVzW3RoaXMuZ2wuaWRdO1xuXG4gICAgICAgIGlmICghX3NraXBSZW1vdmUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHZhciBpID0gdGhpcy5fbWFuYWdlZFRleHR1cmVzLmluZGV4T2YodGV4dHVyZSk7XG4gICAgICAgICAgICBpZiAoaSAhPT0gLTEpIHtcbiAgICAgICAgICAgICAgICB1dGlscy5yZW1vdmVJdGVtcyh0aGlzLl9tYW5hZ2VkVGV4dHVyZXMsIGksIDEpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxufVxuXG5UZXh0dXJlTWFuYWdlci5wcm90b3R5cGUucmVtb3ZlQWxsID0gZnVuY3Rpb24oKVxue1xuXHQvLyBlbXB0eSBhbGwgdGhlIG9sZCBnbCB0ZXh0dXJlcyBhcyB0aGV5IGFyZSB1c2VsZXNzIG5vd1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5fbWFuYWdlZFRleHR1cmVzLmxlbmd0aDsgKytpKVxuICAgIHtcbiAgICAgICAgdmFyIHRleHR1cmUgPSB0aGlzLl9tYW5hZ2VkVGV4dHVyZXNbaV07XG4gICAgICAgIGlmICh0ZXh0dXJlLl9nbFRleHR1cmVzW3RoaXMuZ2wuaWRdKVxuICAgICAgICB7XG4gICAgICAgICAgICBkZWxldGUgdGV4dHVyZS5fZ2xUZXh0dXJlc1t0aGlzLmdsLmlkXTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuVGV4dHVyZU1hbmFnZXIucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbigpXG57XG4gICAgLy8gZGVzdHJveSBtYW5hZ2VkIHRleHR1cmVzXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLl9tYW5hZ2VkVGV4dHVyZXMubGVuZ3RoOyArK2kpXG4gICAge1xuICAgICAgICB2YXIgdGV4dHVyZSA9IHRoaXMuX21hbmFnZWRUZXh0dXJlc1tpXTtcbiAgICAgICAgdGhpcy5kZXN0cm95VGV4dHVyZSh0ZXh0dXJlLCB0cnVlKTtcbiAgICAgICAgdGV4dHVyZS5vZmYoJ3VwZGF0ZScsIHRoaXMudXBkYXRlVGV4dHVyZSwgdGhpcyk7XG4gICAgICAgIHRleHR1cmUub2ZmKCdkaXNwb3NlJywgdGhpcy5kZXN0cm95VGV4dHVyZSwgdGhpcyk7XG4gICAgfVxuXG4gICAgdGhpcy5fbWFuYWdlZFRleHR1cmVzID0gbnVsbDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBUZXh0dXJlTWFuYWdlcjtcblxuIiwidmFyIFN5c3RlbVJlbmRlcmVyID0gcmVxdWlyZSgnLi4vU3lzdGVtUmVuZGVyZXInKSxcbiAgICBTaGFkZXJNYW5hZ2VyID0gcmVxdWlyZSgnLi9tYW5hZ2Vycy9TaGFkZXJNYW5hZ2VyJyksXG4gICAgTWFza01hbmFnZXIgPSByZXF1aXJlKCcuL21hbmFnZXJzL01hc2tNYW5hZ2VyJyksXG4gICAgU3RlbmNpbE1hbmFnZXIgPSByZXF1aXJlKCcuL21hbmFnZXJzL1N0ZW5jaWxNYW5hZ2VyJyksXG4gICAgRmlsdGVyTWFuYWdlciA9IHJlcXVpcmUoJy4vbWFuYWdlcnMvRmlsdGVyTWFuYWdlcicpLFxuICAgIEJsZW5kTW9kZU1hbmFnZXIgPSByZXF1aXJlKCcuL21hbmFnZXJzL0JsZW5kTW9kZU1hbmFnZXInKSxcbiAgICBSZW5kZXJUYXJnZXQgPSByZXF1aXJlKCcuL3V0aWxzL1JlbmRlclRhcmdldCcpLFxuICAgIE9iamVjdFJlbmRlcmVyID0gcmVxdWlyZSgnLi91dGlscy9PYmplY3RSZW5kZXJlcicpLFxuICAgIEZYQUFGaWx0ZXIgPSByZXF1aXJlKCcuL2ZpbHRlcnMvRlhBQUZpbHRlcicpLFxuICAgIFRleHR1cmVNYW5hZ2VyID0gcmVxdWlyZSgnLi9UZXh0dXJlTWFuYWdlcicpLFxuICAgIGNyZWF0ZUNvbnRleHQgPSByZXF1aXJlKCdwaXhpLWdsLWNvcmUnKS5jcmVhdGVDb250ZXh0LFxuICAgIG1hcFdlYkdMQmxlbmRNb2Rlc1RvUGl4aSA9IHJlcXVpcmUoJy4vdXRpbHMvbWFwV2ViR0xCbGVuZE1vZGVzVG9QaXhpJyksXG4gICAgbWFwV2ViR0xEcmF3TW9kZXNUb1BpeGkgPSByZXF1aXJlKCcuL3V0aWxzL21hcFdlYkdMRHJhd01vZGVzVG9QaXhpJyksXG4gICAgdXRpbHMgPSByZXF1aXJlKCcuLi8uLi91dGlscycpLFxuICAgIENPTlNUID0gcmVxdWlyZSgnLi4vLi4vY29uc3QnKTtcblxuLyoqXG4gKiBUaGUgV2ViR0xSZW5kZXJlciBkcmF3cyB0aGUgc2NlbmUgYW5kIGFsbCBpdHMgY29udGVudCBvbnRvIGEgd2ViR0wgZW5hYmxlZCBjYW52YXMuIFRoaXMgcmVuZGVyZXJcbiAqIHNob3VsZCBiZSB1c2VkIGZvciBicm93c2VycyB0aGF0IHN1cHBvcnQgd2ViR0wuIFRoaXMgUmVuZGVyIHdvcmtzIGJ5IGF1dG9tYXRpY2FsbHkgbWFuYWdpbmcgd2ViR0xCYXRjaHMuXG4gKiBTbyBubyBuZWVkIGZvciBTcHJpdGUgQmF0Y2hlcyBvciBTcHJpdGUgQ2xvdWRzLlxuICogRG9uJ3QgZm9yZ2V0IHRvIGFkZCB0aGUgdmlldyB0byB5b3VyIERPTSBvciB5b3Ugd2lsbCBub3Qgc2VlIGFueXRoaW5nIDopXG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQGV4dGVuZHMgUElYSS5TeXN0ZW1SZW5kZXJlclxuICogQHBhcmFtIFt3aWR0aD0wXSB7bnVtYmVyfSB0aGUgd2lkdGggb2YgdGhlIGNhbnZhcyB2aWV3XG4gKiBAcGFyYW0gW2hlaWdodD0wXSB7bnVtYmVyfSB0aGUgaGVpZ2h0IG9mIHRoZSBjYW52YXMgdmlld1xuICogQHBhcmFtIFtvcHRpb25zXSB7b2JqZWN0fSBUaGUgb3B0aW9uYWwgcmVuZGVyZXIgcGFyYW1ldGVyc1xuICogQHBhcmFtIFtvcHRpb25zLnZpZXddIHtIVE1MQ2FudmFzRWxlbWVudH0gdGhlIGNhbnZhcyB0byB1c2UgYXMgYSB2aWV3LCBvcHRpb25hbFxuICogQHBhcmFtIFtvcHRpb25zLnRyYW5zcGFyZW50PWZhbHNlXSB7Ym9vbGVhbn0gSWYgdGhlIHJlbmRlciB2aWV3IGlzIHRyYW5zcGFyZW50LCBkZWZhdWx0IGZhbHNlXG4gKiBAcGFyYW0gW29wdGlvbnMuYXV0b1Jlc2l6ZT1mYWxzZV0ge2Jvb2xlYW59IElmIHRoZSByZW5kZXIgdmlldyBpcyBhdXRvbWF0aWNhbGx5IHJlc2l6ZWQsIGRlZmF1bHQgZmFsc2VcbiAqIEBwYXJhbSBbb3B0aW9ucy5hbnRpYWxpYXM9ZmFsc2VdIHtib29sZWFufSBzZXRzIGFudGlhbGlhcy4gSWYgbm90IGF2YWlsYWJsZSBuYXRpdmVseSB0aGVuIEZYQUEgYW50aWFsaWFzaW5nIGlzIHVzZWRcbiAqIEBwYXJhbSBbb3B0aW9ucy5mb3JjZUZYQUE9ZmFsc2VdIHtib29sZWFufSBmb3JjZXMgRlhBQSBhbnRpYWxpYXNpbmcgdG8gYmUgdXNlZCBvdmVyIG5hdGl2ZS4gRlhBQSBpcyBmYXN0ZXIsIGJ1dCBtYXkgbm90IGFsd2F5cyBsb29rIGFzIGdyZWF0XG4gKiBAcGFyYW0gW29wdGlvbnMucmVzb2x1dGlvbj0xXSB7bnVtYmVyfSB0aGUgcmVzb2x1dGlvbiBvZiB0aGUgcmVuZGVyZXIgcmV0aW5hIHdvdWxkIGJlIDJcbiAqIEBwYXJhbSBbb3B0aW9ucy5jbGVhckJlZm9yZVJlbmRlcj10cnVlXSB7Ym9vbGVhbn0gVGhpcyBzZXRzIGlmIHRoZSBDYW52YXNSZW5kZXJlciB3aWxsIGNsZWFyIHRoZSBjYW52YXMgb3JcbiAqICAgICAgbm90IGJlZm9yZSB0aGUgbmV3IHJlbmRlciBwYXNzLiBJZiB5b3Ugd2lzaCB0byBzZXQgdGhpcyB0byBmYWxzZSwgeW91ICptdXN0KiBzZXQgcHJlc2VydmVEcmF3aW5nQnVmZmVyIHRvIGB0cnVlYC5cbiAqIEBwYXJhbSBbb3B0aW9ucy5wcmVzZXJ2ZURyYXdpbmdCdWZmZXI9ZmFsc2VdIHtib29sZWFufSBlbmFibGVzIGRyYXdpbmcgYnVmZmVyIHByZXNlcnZhdGlvbiwgZW5hYmxlIHRoaXMgaWZcbiAqICAgICAgeW91IG5lZWQgdG8gY2FsbCB0b0RhdGFVcmwgb24gdGhlIHdlYmdsIGNvbnRleHQuXG4gKiBAcGFyYW0gW29wdGlvbnMucm91bmRQaXhlbHM9ZmFsc2VdIHtib29sZWFufSBJZiB0cnVlIFBpeGkgd2lsbCBNYXRoLmZsb29yKCkgeC95IHZhbHVlcyB3aGVuIHJlbmRlcmluZywgc3RvcHBpbmcgcGl4ZWwgaW50ZXJwb2xhdGlvbi5cbiAqL1xuZnVuY3Rpb24gV2ViR0xSZW5kZXJlcih3aWR0aCwgaGVpZ2h0LCBvcHRpb25zKVxue1xuICAgIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuXG4gICAgU3lzdGVtUmVuZGVyZXIuY2FsbCh0aGlzLCAnV2ViR0wnLCB3aWR0aCwgaGVpZ2h0LCBvcHRpb25zKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSB0eXBlIG9mIHRoaXMgcmVuZGVyZXIgYXMgYSBzdGFuZGFyZGlzZWQgY29uc3RcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn0vL1xuICAgICAqXG4gICAgICovXG4gICAgdGhpcy50eXBlID0gQ09OU1QuUkVOREVSRVJfVFlQRS5XRUJHTDtcblxuICAgIHRoaXMuaGFuZGxlQ29udGV4dExvc3QgPSB0aGlzLmhhbmRsZUNvbnRleHRMb3N0LmJpbmQodGhpcyk7XG4gICAgdGhpcy5oYW5kbGVDb250ZXh0UmVzdG9yZWQgPSB0aGlzLmhhbmRsZUNvbnRleHRSZXN0b3JlZC5iaW5kKHRoaXMpO1xuXG4gICAgdGhpcy52aWV3LmFkZEV2ZW50TGlzdGVuZXIoJ3dlYmdsY29udGV4dGxvc3QnLCB0aGlzLmhhbmRsZUNvbnRleHRMb3N0LCBmYWxzZSk7XG4gICAgdGhpcy52aWV3LmFkZEV2ZW50TGlzdGVuZXIoJ3dlYmdsY29udGV4dHJlc3RvcmVkJywgdGhpcy5oYW5kbGVDb250ZXh0UmVzdG9yZWQsIGZhbHNlKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBvcHRpb25zIHBhc3NlZCBpbiB0byBjcmVhdGUgYSBuZXcgd2ViZ2wgY29udGV4dC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge29iamVjdH1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX2NvbnRleHRPcHRpb25zID0ge1xuICAgICAgICBhbHBoYTogdGhpcy50cmFuc3BhcmVudCxcbiAgICAgICAgYW50aWFsaWFzOiBvcHRpb25zLmFudGlhbGlhcyxcbiAgICAgICAgcHJlbXVsdGlwbGllZEFscGhhOiB0aGlzLnRyYW5zcGFyZW50ICYmIHRoaXMudHJhbnNwYXJlbnQgIT09ICdub3RNdWx0aXBsaWVkJyxcbiAgICAgICAgc3RlbmNpbDogdHJ1ZSxcbiAgICAgICAgcHJlc2VydmVEcmF3aW5nQnVmZmVyOiBvcHRpb25zLnByZXNlcnZlRHJhd2luZ0J1ZmZlclxuICAgIH07XG5cbiAgICB0aGlzLl9iYWNrZ3JvdW5kQ29sb3JSZ2JhWzNdID0gdGhpcy50cmFuc3BhcmVudCA/IDAgOiAxO1xuXG4gICAgLyoqXG4gICAgICogRGVhbHMgd2l0aCBtYW5hZ2luZyB0aGUgc2hhZGVyIHByb2dyYW1zIGFuZCB0aGVpciBhdHRyaWJzLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5TaGFkZXJNYW5hZ2VyfVxuICAgICAqL1xuICAgIHRoaXMuc2hhZGVyTWFuYWdlciA9IG5ldyBTaGFkZXJNYW5hZ2VyKHRoaXMpO1xuXG4gICAgLyoqXG4gICAgICogTWFuYWdlcyB0aGUgbWFza3MgdXNpbmcgdGhlIHN0ZW5jaWwgYnVmZmVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5NYXNrTWFuYWdlcn1cbiAgICAgKi9cbiAgICB0aGlzLm1hc2tNYW5hZ2VyID0gbmV3IE1hc2tNYW5hZ2VyKHRoaXMpO1xuXG4gICAgLyoqXG4gICAgICogTWFuYWdlcyB0aGUgc3RlbmNpbCBidWZmZXIuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlN0ZW5jaWxNYW5hZ2VyfVxuICAgICAqL1xuICAgIHRoaXMuc3RlbmNpbE1hbmFnZXIgPSBuZXcgU3RlbmNpbE1hbmFnZXIodGhpcyk7XG5cbiAgICAvKipcbiAgICAgKiBNYW5hZ2VzIHRoZSBmaWx0ZXJzLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5GaWx0ZXJNYW5hZ2VyfVxuICAgICAqL1xuICAgIHRoaXMuZmlsdGVyTWFuYWdlciA9IG5ldyBGaWx0ZXJNYW5hZ2VyKHRoaXMpO1xuXG4gICAgLyoqXG4gICAgICogTWFuYWdlcyB0aGUgYmxlbmRNb2Rlc1xuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5CbGVuZE1vZGVNYW5hZ2VyfVxuICAgICAqL1xuICAgIHRoaXMuYmxlbmRNb2RlTWFuYWdlciA9IG5ldyBCbGVuZE1vZGVNYW5hZ2VyKHRoaXMpO1xuXG4gICAgXG4gICAgLyoqXG4gICAgICogVGhlIGN1cnJlbnRseSBhY3RpdmUgT2JqZWN0UmVuZGVyZXIuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLk9iamVjdFJlbmRlcmVyfVxuICAgICAqL1xuICAgIHRoaXMuY3VycmVudFJlbmRlcmVyID0gbmV3IE9iamVjdFJlbmRlcmVyKHRoaXMpO1xuXG4gICAgdGhpcy5pbml0UGx1Z2lucygpO1xuXG4gICAgLy8gaW5pdGlhbGl6ZSB0aGUgY29udGV4dCBzbyBpdCBpcyByZWFkeSBmb3IgdGhlIG1hbmFnZXJzLlxuICAgIHRoaXMuZ2wgPSBjcmVhdGVDb250ZXh0KHRoaXMudmlldywgdGhpcy5fY29udGV4dE9wdGlvbnMpO1xuXG4gICAgdGhpcy5faW5pdENvbnRleHQoKTtcblxuICAgIC8vIG1hcCBzb21lIHdlYkdMIGJsZW5kIGFuZCBkcmF3bW9kZXMuLlxuICAgIHRoaXMuYmxlbmRNb2RlcyA9IG1hcFdlYkdMQmxlbmRNb2Rlc1RvUGl4aShnbCk7XG4gICAgdGhpcy5kcmF3TW9kZXMgPSBtYXBXZWJHTERyYXdNb2Rlc1RvUGl4aShnbClcblxuICAgIHRoaXMuX2FjdGl2ZVNoYWRlciA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBIb2xkcyB0aGUgY3VycmVudCByZW5kZXIgdGFyZ2V0XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlJlbmRlclRhcmdldH1cbiAgICAgKi9cbiAgICB0aGlzLl9hY3RpdmVSZW5kZXJUYXJnZXQgPSBudWxsO1xuICAgIHRoaXMuX2FjdGl2ZVRleHR1cmVMb2NhdGlvbiA9IG51bGw7XG4gICAgdGhpcy5fYWN0aXZlVGV4dHVyZSA9IG51bGw7XG59XG5cbi8vIGNvbnN0cnVjdG9yXG5XZWJHTFJlbmRlcmVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoU3lzdGVtUmVuZGVyZXIucHJvdG90eXBlKTtcbldlYkdMUmVuZGVyZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gV2ViR0xSZW5kZXJlcjtcbm1vZHVsZS5leHBvcnRzID0gV2ViR0xSZW5kZXJlcjtcbnV0aWxzLnBsdWdpblRhcmdldC5taXhpbihXZWJHTFJlbmRlcmVyKTtcblxuLyoqXG4gKiBDcmVhdGVzIHRoZSBXZWJHTCBjb250ZXh0XG4gKlxuICogQHByaXZhdGVcbiAqL1xuV2ViR0xSZW5kZXJlci5wcm90b3R5cGUuX2luaXRDb250ZXh0ID0gZnVuY3Rpb24gKClcbntcbiAgICB2YXIgZ2wgPSB0aGlzLmdsO1xuXG4gICAgLy8gY3JlYXRlIGEgdGV4dHVyZSBtYW5hZ2VyLi4uXG4gICAgdGhpcy50ZXh0dXJlTWFuYWdlciA9IG5ldyBUZXh0dXJlTWFuYWdlcihnbCk7XG5cbiAgICAvLyBzZXQgdXAgdGhlIGRlZmF1bHQgcGl4aSBzZXR0aW5ncy4uXG4gICAgZ2wuZGlzYWJsZShnbC5ERVBUSF9URVNUKTtcbiAgICBnbC5kaXNhYmxlKGdsLkNVTExfRkFDRSk7XG4gICAgZ2wuZW5hYmxlKGdsLkJMRU5EKTtcblxuXG4gICAgdGhpcy5yb290UmVuZGVyVGFyZ2V0ID0gbmV3IFJlbmRlclRhcmdldChnbCwgdGhpcy53aWR0aCwgdGhpcy5oZWlnaHQsIG51bGwsIHRoaXMucmVzb2x1dGlvbiwgdHJ1ZSk7XG4gICAgdGhpcy5yb290UmVuZGVyVGFyZ2V0LmNsZWFyQ29sb3IgPSB0aGlzLl9iYWNrZ3JvdW5kQ29sb3JSZ2JhO1xuICAgIFxuICAgIHRoaXMuYmluZFJlbmRlclRhcmdldCh0aGlzLnJvb3RSZW5kZXJUYXJnZXQpO1xuXG4gICAgdGhpcy5lbWl0KCdjb250ZXh0JywgZ2wpO1xuXG4gICAgLy8gc2V0dXAgdGhlIHdpZHRoL2hlaWdodCBwcm9wZXJ0aWVzIGFuZCBnbCB2aWV3cG9ydFxuICAgIHRoaXMucmVzaXplKHRoaXMud2lkdGgsIHRoaXMuaGVpZ2h0KTsgICAgXG59O1xuXG4vKipcbiAqIFJlbmRlcnMgdGhlIG9iamVjdCB0byBpdHMgd2ViR0wgdmlld1xuICpcbiAqIEBwYXJhbSBvYmplY3Qge1BJWEkuRGlzcGxheU9iamVjdH0gdGhlIG9iamVjdCB0byBiZSByZW5kZXJlZFxuICovXG5XZWJHTFJlbmRlcmVyLnByb3RvdHlwZS5yZW5kZXIgPSBmdW5jdGlvbiAoZGlzcGxheU9iamVjdClcbntcbiAgICB0aGlzLmVtaXQoJ3ByZXJlbmRlcicpO1xuXG4gICAgLy8gbm8gcG9pbnQgcmVuZGVyaW5nIGlmIG91ciBjb250ZXh0IGhhcyBiZWVuIGJsb3duIHVwIVxuICAgIGlmICh0aGlzLmdsLmlzQ29udGV4dExvc3QoKSlcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLl9sYXN0T2JqZWN0UmVuZGVyZWQgPSBkaXNwbGF5T2JqZWN0O1xuXG4gICAgdmFyIGNhY2hlUGFyZW50ID0gZGlzcGxheU9iamVjdC5wYXJlbnQ7XG4gICAgZGlzcGxheU9iamVjdC5wYXJlbnQgPSB0aGlzLl90ZW1wRGlzcGxheU9iamVjdFBhcmVudDtcbiAgICAvLyB1cGRhdGUgdGhlIHNjZW5lIGdyYXBoXG4gICAgZGlzcGxheU9iamVjdC51cGRhdGVUcmFuc2Zvcm0oKTtcbiAgICBkaXNwbGF5T2JqZWN0LnBhcmVudCA9IGNhY2hlUGFyZW50O1xuXG4gICAgdGhpcy5yZW5kZXJEaXNwbGF5T2JqZWN0KGRpc3BsYXlPYmplY3QsIHRoaXMucm9vdFJlbmRlclRhcmdldCwgdGhpcy5jbGVhckJlZm9yZVJlbmRlcik7Ly90aGlzLnByb2plY3Rpb24pO1xuXG4gICAgdGhpcy5lbWl0KCdwb3N0cmVuZGVyJyk7XG59O1xuXG4vKipcbiAqIFJlbmRlcnMgYSBEaXNwbGF5IE9iamVjdC5cbiAqXG4gKiBAcGFyYW0gZGlzcGxheU9iamVjdCB7UElYSS5EaXNwbGF5T2JqZWN0fSBUaGUgRGlzcGxheU9iamVjdCB0byByZW5kZXJcbiAqIEBwYXJhbSByZW5kZXJUYXJnZXQge1BJWEkuUmVuZGVyVGFyZ2V0fSBUaGUgcmVuZGVyIHRhcmdldCB0byB1c2UgdG8gcmVuZGVyIHRoaXMgZGlzcGxheSBvYmplY3RcbiAqXG4gKi9cbldlYkdMUmVuZGVyZXIucHJvdG90eXBlLnJlbmRlckRpc3BsYXlPYmplY3QgPSBmdW5jdGlvbiAoZGlzcGxheU9iamVjdCwgcmVuZGVyVGFyZ2V0LCBjbGVhcikvL3Byb2plY3Rpb24sIGJ1ZmZlcilcbntcbiAgICB0aGlzLmJpbmRSZW5kZXJUYXJnZXQocmVuZGVyVGFyZ2V0KTtcblxuICAgIGlmKGNsZWFyKVxuICAgIHtcbiAgICAgICAgcmVuZGVyVGFyZ2V0LmNsZWFyKCk7XG4gICAgfVxuXG4gICAgLy8gc3RhcnQgdGhlIGZpbHRlciBtYW5hZ2VyXG4gICAgdGhpcy5maWx0ZXJNYW5hZ2VyLnNldEZpbHRlclN0YWNrKCByZW5kZXJUYXJnZXQuZmlsdGVyU3RhY2sgKTtcblxuICAgIC8vIHJlbmRlciB0aGUgc2NlbmUhXG4gICAgZGlzcGxheU9iamVjdC5yZW5kZXJXZWJHTCh0aGlzKTtcblxuICAgIC8vIGZpbmlzaCB0aGUgY3VycmVudCByZW5kZXJlci4uXG4gICAgdGhpcy5jdXJyZW50UmVuZGVyZXIuZmx1c2goKTtcbn07XG5cbi8qKlxuICogQ2hhbmdlcyB0aGUgY3VycmVudCByZW5kZXJlciB0byB0aGUgb25lIGdpdmVuIGluIHBhcmFtZXRlclxuICpcbiAqIEBwYXJhbSBvYmplY3RSZW5kZXJlciB7UElYSS5PYmplY3RSZW5kZXJlcn0gVGhlIG9iamVjdCByZW5kZXJlciB0byB1c2UuXG4gKi9cbldlYkdMUmVuZGVyZXIucHJvdG90eXBlLnNldE9iamVjdFJlbmRlcmVyID0gZnVuY3Rpb24gKG9iamVjdFJlbmRlcmVyKVxue1xuICAgIGlmICh0aGlzLmN1cnJlbnRSZW5kZXJlciA9PT0gb2JqZWN0UmVuZGVyZXIpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5jdXJyZW50UmVuZGVyZXIuc3RvcCgpO1xuICAgIHRoaXMuY3VycmVudFJlbmRlcmVyID0gb2JqZWN0UmVuZGVyZXI7XG4gICAgdGhpcy5jdXJyZW50UmVuZGVyZXIuc3RhcnQoKTtcbn07XG5cbi8qKlxuICogUmVzaXplcyB0aGUgd2ViR0wgdmlldyB0byB0aGUgc3BlY2lmaWVkIHdpZHRoIGFuZCBoZWlnaHQuXG4gKlxuICogQHBhcmFtIHdpZHRoIHtudW1iZXJ9IHRoZSBuZXcgd2lkdGggb2YgdGhlIHdlYkdMIHZpZXdcbiAqIEBwYXJhbSBoZWlnaHQge251bWJlcn0gdGhlIG5ldyBoZWlnaHQgb2YgdGhlIHdlYkdMIHZpZXdcbiAqL1xuV2ViR0xSZW5kZXJlci5wcm90b3R5cGUucmVzaXplID0gZnVuY3Rpb24gKHdpZHRoLCBoZWlnaHQpXG57XG4gICAgU3lzdGVtUmVuZGVyZXIucHJvdG90eXBlLnJlc2l6ZS5jYWxsKHRoaXMsIHdpZHRoLCBoZWlnaHQpO1xuXG4gICAgdGhpcy5maWx0ZXJNYW5hZ2VyLnJlc2l6ZSh3aWR0aCwgaGVpZ2h0KTtcbiAgICB0aGlzLnJvb3RSZW5kZXJUYXJnZXQucmVzaXplKHdpZHRoLCBoZWlnaHQpO1xuXG4gICAgaWYodGhpcy5jdXJyZW50UmVuZGVyVGFyZ2V0ID09PSB0aGlzLnJlbmRlclRhcmdldClcbiAgICB7XG4gICAgICAgIHRoaXMucm9vdFJlbmRlclRhcmdldC5hY3RpdmF0ZSgpO1xuICAgIH1cbn07XG5cbi8qKlxuICogQ2hhbmdlcyB0aGUgY3VycmVudCByZW5kZXIgdGFyZ2V0IHRvIHRoZSBvbmUgZ2l2ZW4gaW4gcGFyYW1ldGVyXG4gKlxuICogQHBhcmFtIHJlbmRlclRhcmdldCB7UElYSS5SZW5kZXJUYXJnZXR9IHRoZSBuZXcgcmVuZGVyIHRhcmdldFxuICovXG5XZWJHTFJlbmRlcmVyLnByb3RvdHlwZS5iaW5kUmVuZGVyVGFyZ2V0ID0gZnVuY3Rpb24gKHJlbmRlclRhcmdldCkvL3Byb2plY3Rpb24sIGJ1ZmZlcilcbntcbiAgICBpZihyZW5kZXJUYXJnZXQgIT09IHRoaXMuX2FjdGl2ZVJlbmRlclRhcmdldClcbiAgICB7XG4gICAgICAgIHRoaXMuX2FjdGl2ZVJlbmRlclRhcmdldCA9IHJlbmRlclRhcmdldDtcblxuICAgICAgICBpZih0aGlzLl9hY3RpdmVTaGFkZXIpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuX2FjdGl2ZVNoYWRlci51bmlmb3Jtcy5wcm9qZWN0aW9uTWF0cml4ID0gcmVuZGVyVGFyZ2V0LnByb2plY3Rpb25NYXRyaXgudG9BcnJheSh0cnVlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJlbmRlclRhcmdldC5hY3RpdmF0ZSgpO1xuXG4gICAgICAgIHRoaXMuc3RlbmNpbE1hbmFnZXIuc2V0TWFza1N0YWNrKCByZW5kZXJUYXJnZXQuc3RlbmNpbE1hc2tTdGFjayApO1xuICAgIH1cbn1cblxuV2ViR0xSZW5kZXJlci5wcm90b3R5cGUuYmluZFNoYWRlciA9IGZ1bmN0aW9uIChzaGFkZXIpLy9wcm9qZWN0aW9uLCBidWZmZXIpXG57XG4gICAgLy9UT0RPIGNhY2hlXG4gICAgaWYodGhpcy5fYWN0aXZlU2hhZGVyICE9PSBzaGFkZXIpXG4gICAge1xuICAgICAgICB0aGlzLl9hY3RpdmVTaGFkZXIgPSBzaGFkZXI7XG4gICAgICAgIHNoYWRlci5iaW5kKCk7XG5cbiAgICAgICAgLy8gYXV0b21hdGljYWxseSBzZXQgdGhlIHByb2plY3Rpb24gbWF0cml4XG4gICAgICAgIHNoYWRlci51bmlmb3Jtcy5wcm9qZWN0aW9uTWF0cml4ID0gdGhpcy5fYWN0aXZlUmVuZGVyVGFyZ2V0LnByb2plY3Rpb25NYXRyaXgudG9BcnJheSh0cnVlKTtcbiAgICB9XG59XG5cblxuV2ViR0xSZW5kZXJlci5wcm90b3R5cGUuYmluZFRleHR1cmUgPSBmdW5jdGlvbiAodGV4dHVyZSwgbG9jYXRpb24pXG57XG4gICAgdmFyIGdsID0gdGhpcy5nbDtcblxuICAgIC8vVE9ETyB0ZXN0IHBlcmYgb2YgY2FjaGU/XG4gICAgbG9jYXRpb24gPSBsb2NhdGlvbiB8fCAwO1xuXG4gICAgaWYodGhpcy5fYWN0aXZlVGV4dHVyZUxvY2F0aW9uICE9PSBsb2NhdGlvbikvL1xuICAgIHtcbiAgICAgICAgdGhpcy5fYWN0aXZlVGV4dHVyZUxvY2F0aW9uID0gbG9jYXRpb25cbiAgICAgICAgZ2wuYWN0aXZlVGV4dHVyZShnbC5URVhUVVJFMCArIGxvY2F0aW9uICk7XG4gICAgfVxuXG4gICAgLy9UT0RPIC0gY2FuIHdlIGNhY2hlIHRoaXMgdGV4dHVyZSB0b28/XG4gICAgdGhpcy5fYWN0aXZlVGV4dHVyZSA9IHRleHR1cmU7ICAgICAgXG4gICAgXG4gICAgaWYgKCF0ZXh0dXJlLl9nbFRleHR1cmVzW2dsLmlkXSlcbiAgICB7XG4gICAgICAgIC8vIHRoaXMgd2lsbCBhbHNvIGJpbmQgdGhlIHRleHR1cmUuLlxuICAgICAgICB0aGlzLnRleHR1cmVNYW5hZ2VyLnVwZGF0ZVRleHR1cmUodGV4dHVyZSk7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7ICAgXG4gICAgICAgIC8vIGJpbmQgdGhlIGN1cnJlbnQgdGV4dHVyZVxuICAgICAgICB0ZXh0dXJlLl9nbFRleHR1cmVzW2dsLmlkXS5iaW5kKCk7XG4gICAgfVxufVxuXG5cbi8qKlxuICogSGFuZGxlcyBhIGxvc3Qgd2ViZ2wgY29udGV4dFxuICpcbiAqIEBwcml2YXRlXG4gKi9cbldlYkdMUmVuZGVyZXIucHJvdG90eXBlLmhhbmRsZUNvbnRleHRMb3N0ID0gZnVuY3Rpb24gKGV2ZW50KVxue1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG59O1xuXG4vKipcbiAqIEhhbmRsZXMgYSByZXN0b3JlZCB3ZWJnbCBjb250ZXh0XG4gKlxuICogQHByaXZhdGVcbiAqL1xuV2ViR0xSZW5kZXJlci5wcm90b3R5cGUuaGFuZGxlQ29udGV4dFJlc3RvcmVkID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLl9pbml0Q29udGV4dCgpO1xuICAgIHRoaXMudGV4dHVyZU1hbmFnZXIucmVtb3ZlQWxsKCk7XG59O1xuXG4vKipcbiAqIFJlbW92ZXMgZXZlcnl0aGluZyBmcm9tIHRoZSByZW5kZXJlciAoZXZlbnQgbGlzdGVuZXJzLCBzcHJpdGViYXRjaCwgZXRjLi4uKVxuICpcbiAqIEBwYXJhbSBbcmVtb3ZlVmlldz1mYWxzZV0ge2Jvb2xlYW59IFJlbW92ZXMgdGhlIENhbnZhcyBlbGVtZW50IGZyb20gdGhlIERPTS5cbiAqL1xuV2ViR0xSZW5kZXJlci5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uIChyZW1vdmVWaWV3KVxue1xuICAgIHRoaXMuZGVzdHJveVBsdWdpbnMoKTtcblxuICAgIC8vIHJlbW92ZSBsaXN0ZW5lcnNcbiAgICB0aGlzLnZpZXcucmVtb3ZlRXZlbnRMaXN0ZW5lcignd2ViZ2xjb250ZXh0bG9zdCcsIHRoaXMuaGFuZGxlQ29udGV4dExvc3QpO1xuICAgIHRoaXMudmlldy5yZW1vdmVFdmVudExpc3RlbmVyKCd3ZWJnbGNvbnRleHRyZXN0b3JlZCcsIHRoaXMuaGFuZGxlQ29udGV4dFJlc3RvcmVkKTtcblxuICAgIHRoaXMudGV4dHVyZU1hbmFnZXIuZGVzdHJveUFsbCgpO1xuXG4gICAgLy8gY2FsbCBiYXNlIGRlc3Ryb3lcbiAgICBTeXN0ZW1SZW5kZXJlci5wcm90b3R5cGUuZGVzdHJveS5jYWxsKHRoaXMsIHJlbW92ZVZpZXcpO1xuXG4gICAgdGhpcy51aWQgPSAwO1xuXG4gICAgLy8gZGVzdHJveSB0aGUgbWFuYWdlcnNcbiAgICB0aGlzLnNoYWRlck1hbmFnZXIuZGVzdHJveSgpO1xuICAgIHRoaXMubWFza01hbmFnZXIuZGVzdHJveSgpO1xuICAgIHRoaXMuc3RlbmNpbE1hbmFnZXIuZGVzdHJveSgpO1xuICAgIHRoaXMuZmlsdGVyTWFuYWdlci5kZXN0cm95KCk7XG4gICAgdGhpcy5ibGVuZE1vZGVNYW5hZ2VyLmRlc3Ryb3koKTtcblxuICAgIHRoaXMuc2hhZGVyTWFuYWdlciA9IG51bGw7XG4gICAgdGhpcy5tYXNrTWFuYWdlciA9IG51bGw7XG4gICAgdGhpcy5maWx0ZXJNYW5hZ2VyID0gbnVsbDtcbiAgICB0aGlzLmJsZW5kTW9kZU1hbmFnZXIgPSBudWxsO1xuICAgIHRoaXMuY3VycmVudFJlbmRlcmVyID0gbnVsbDtcblxuICAgIHRoaXMuaGFuZGxlQ29udGV4dExvc3QgPSBudWxsO1xuICAgIHRoaXMuaGFuZGxlQ29udGV4dFJlc3RvcmVkID0gbnVsbDtcblxuICAgIHRoaXMuX2NvbnRleHRPcHRpb25zID0gbnVsbDtcblxuICAgIHRoaXMuZ2wudXNlUHJvZ3JhbShudWxsKTtcbiAgICB0aGlzLmdsID0gbnVsbDtcbn07XG5cbiIsInZhciBEZWZhdWx0U2hhZGVyID0gcmVxdWlyZSgnLi4vc2hhZGVycy9UZXh0dXJlU2hhZGVyJyk7XG5cbi8qKlxuICogVGhpcyBpcyB0aGUgYmFzZSBjbGFzcyBmb3IgY3JlYXRpbmcgYSBQSVhJIGZpbHRlci4gQ3VycmVudGx5IG9ubHkgV2ViR0wgc3VwcG9ydHMgZmlsdGVycy5cbiAqIElmIHlvdSB3YW50IHRvIG1ha2UgYSBjdXN0b20gZmlsdGVyIHRoaXMgc2hvdWxkIGJlIHlvdXIgYmFzZSBjbGFzcy5cbiAqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gdmVydGV4U3JjIHtzdHJpbmd8c3RyaW5nW119IFRoZSB2ZXJ0ZXggc2hhZGVyIHNvdXJjZSBhcyBhbiBhcnJheSBvZiBzdHJpbmdzLlxuICogQHBhcmFtIGZyYWdtZW50U3JjIHtzdHJpbmd8c3RyaW5nW119IFRoZSBmcmFnbWVudCBzaGFkZXIgc291cmNlIGFzIGFuIGFycmF5IG9mIHN0cmluZ3MuXG4gKiBAcGFyYW0gdW5pZm9ybXMge29iamVjdH0gQW4gb2JqZWN0IGNvbnRhaW5pbmcgdGhlIHVuaWZvcm1zIGZvciB0aGlzIGZpbHRlci5cbiAqL1xuZnVuY3Rpb24gQWJzdHJhY3RGaWx0ZXIodmVydGV4U3JjLCBmcmFnbWVudFNyYywgdW5pZm9ybXMpXG57XG5cbiAgICAvKipcbiAgICAgKiBBbiBhcnJheSBvZiBzaGFkZXJzXG4gICAgICogQG1lbWJlciB7UElYSS5TaGFkZXJbXX1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuc2hhZGVycyA9IFtdO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGV4dHJhIHBhZGRpbmcgdGhhdCB0aGUgZmlsdGVyIG1pZ2h0IG5lZWRcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy5wYWRkaW5nID0gMDtcblxuICAgIC8qKlxuICAgICAqIFRoZSB1bmlmb3JtcyBhcyBhbiBvYmplY3RcbiAgICAgKiBAbWVtYmVyIHtvYmplY3R9XG4gICAgICovXG4gICAgdGhpcy51bmlmb3JtcyA9IHVuaWZvcm1zIHx8IHt9O1xuXG5cbiAgICAvKipcbiAgICAgKiBUaGUgY29kZSBvZiB0aGUgdmVydGV4IHNoYWRlclxuICAgICAqIEBtZW1iZXIge3N0cmluZ1tdfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy52ZXJ0ZXhTcmMgPSB2ZXJ0ZXhTcmMgfHwgRGVmYXVsdFNoYWRlci5kZWZhdWx0VmVydGV4U3JjO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGNvZGUgb2YgdGhlIGZyYW1lbnQgc2hhZGVyXG4gICAgICogQG1lbWJlciB7c3RyaW5nW119XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLmZyYWdtZW50U3JjID0gZnJhZ21lbnRTcmMgfHwgRGVmYXVsdFNoYWRlci5kZWZhdWx0RnJhZ21lbnRTcmM7XG5cbiAgICAvL1RPRE8gYSByZW1pbmRlciAtIHdvdWxkIGJlIGNvb2wgdG8gaGF2ZSBsb3dlciByZXMgZmlsdGVycyBhcyB0aGlzIHdvdWxkIGdpdmUgYmV0dGVyIHBlcmZvcm1hbmNlLlxuXG4gICAgLy90eXBlb2YgZnJhZ21lbnRTcmMgPT09ICdzdHJpbmcnID8gZnJhZ21lbnRTcmMuc3BsaXQoJycpIDogKGZyYWdtZW50U3JjIHx8IFtdKTtcblxufVxuXG5BYnN0cmFjdEZpbHRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBBYnN0cmFjdEZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gQWJzdHJhY3RGaWx0ZXI7XG5cbi8qKlxuICogR3JhYnMgYSBzaGFkZXIgZnJvbSB0aGUgY3VycmVudCByZW5kZXJlclxuICpcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5XZWJHTFJlbmRlcmVyfSBUaGUgcmVuZGVyZXIgdG8gcmV0cmlldmUgdGhlIHNoYWRlciBmcm9tXG4gKi9cbkFic3RyYWN0RmlsdGVyLnByb3RvdHlwZS5nZXRTaGFkZXIgPSBmdW5jdGlvbiAocmVuZGVyZXIpXG57XG4gICAgdmFyIGdsID0gcmVuZGVyZXIuZ2w7XG5cbiAgICB2YXIgc2hhZGVyID0gdGhpcy5zaGFkZXJzW2dsLmlkXTtcblxuICAgIGlmICghc2hhZGVyKVxuICAgIHtcbiAgICAgICAgc2hhZGVyID0gbmV3IERlZmF1bHRTaGFkZXIocmVuZGVyZXIuc2hhZGVyTWFuYWdlcixcbiAgICAgICAgICAgIHRoaXMudmVydGV4U3JjLFxuICAgICAgICAgICAgdGhpcy5mcmFnbWVudFNyYyxcbiAgICAgICAgICAgIHRoaXMudW5pZm9ybXMsXG4gICAgICAgICAgICB0aGlzLmF0dHJpYnV0ZXNcbiAgICAgICAgKTtcblxuICAgICAgICB0aGlzLnNoYWRlcnNbZ2wuaWRdID0gc2hhZGVyO1xuICAgIH1cblxuICAgIHJldHVybiBzaGFkZXI7XG59O1xuXG4vKipcbiAqIEFwcGxpZXMgdGhlIGZpbHRlclxuICpcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5XZWJHTFJlbmRlcmVyfSBUaGUgcmVuZGVyZXIgdG8gcmV0cmlldmUgdGhlIGZpbHRlciBmcm9tXG4gKiBAcGFyYW0gaW5wdXQge1BJWEkuUmVuZGVyVGFyZ2V0fVxuICogQHBhcmFtIG91dHB1dCB7UElYSS5SZW5kZXJUYXJnZXR9XG4gKiBAcGFyYW0gY2xlYXIge2Jvb2xlYW59IFdoZXRoZXIgb3Igbm90IHdlIHdhbnQgdG8gY2xlYXIgdGhlIG91dHB1dFRhcmdldFxuICovXG5BYnN0cmFjdEZpbHRlci5wcm90b3R5cGUuYXBwbHlGaWx0ZXIgPSBmdW5jdGlvbiAocmVuZGVyZXIsIGlucHV0LCBvdXRwdXQsIGNsZWFyKVxue1xuICAgIHZhciBzaGFkZXIgPSB0aGlzLmdldFNoYWRlcihyZW5kZXJlcik7XG5cbiAgICByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLmFwcGx5RmlsdGVyKHNoYWRlciwgaW5wdXQsIG91dHB1dCwgY2xlYXIpO1xufTtcblxuLyoqXG4gKiBTeW5jcyBhIHVuaWZvcm0gYmV0d2VlbiB0aGUgY2xhc3Mgb2JqZWN0IGFuZCB0aGUgc2hhZGVycy5cbiAqXG4gKi9cbkFic3RyYWN0RmlsdGVyLnByb3RvdHlwZS5zeW5jVW5pZm9ybSA9IGZ1bmN0aW9uICh1bmlmb3JtKVxue1xuICAgIGZvciAodmFyIGkgPSAwLCBqID0gdGhpcy5zaGFkZXJzLmxlbmd0aDsgaSA8IGo7ICsraSlcbiAgICB7XG4gICAgICAgIHRoaXMuc2hhZGVyc1tpXS5zeW5jVW5pZm9ybSh1bmlmb3JtKTtcbiAgICB9XG59O1xuIiwidmFyIEFic3RyYWN0RmlsdGVyID0gcmVxdWlyZSgnLi9BYnN0cmFjdEZpbHRlcicpO1xuLy8gQHNlZSBodHRwczovL2dpdGh1Yi5jb20vc3Vic3RhY2svYnJmcy9pc3N1ZXMvMjVcblxuXG4vKipcbiAqXG4gKiBCYXNpYyBGWEFBIGltcGxlbWVudGF0aW9uIGJhc2VkIG9uIHRoZSBjb2RlIG9uIGdlZWtzM2QuY29tIHdpdGggdGhlXG4gKiBtb2RpZmljYXRpb24gdGhhdCB0aGUgdGV4dHVyZTJETG9kIHN0dWZmIHdhcyByZW1vdmVkIHNpbmNlIGl0J3NcbiAqIHVuc3VwcG9ydGVkIGJ5IFdlYkdMLlxuICpcbiAqIC0tXG4gKiBGcm9tOlxuICogaHR0cHM6Ly9naXRodWIuY29tL21pdHN1aGlrby93ZWJnbC1tZWluY3JhZnRcbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQWJzdHJhY3RGaWx0ZXJcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKlxuICovXG5mdW5jdGlvbiBGWEFBRmlsdGVyKClcbntcbiAgICBBYnN0cmFjdEZpbHRlci5jYWxsKHRoaXMsXG4gICAgICAgIC8vIHZlcnRleCBzaGFkZXJcbiAgICAgICAgXCJcXG5wcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcXG5cXG5hdHRyaWJ1dGUgdmVjMiBhVmVydGV4UG9zaXRpb247XFxuYXR0cmlidXRlIHZlYzIgYVRleHR1cmVDb29yZDtcXG5hdHRyaWJ1dGUgdmVjNCBhQ29sb3I7XFxuXFxudW5pZm9ybSBtYXQzIHByb2plY3Rpb25NYXRyaXg7XFxudW5pZm9ybSB2ZWMyIHJlc29sdXRpb247XFxuXFxudmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7XFxudmFyeWluZyB2ZWM0IHZDb2xvcjtcXG5cXG52YXJ5aW5nIHZlYzIgdlJlc29sdXRpb247XFxuXFxuLy90ZXhjb29yZHMgY29tcHV0ZWQgaW4gdmVydGV4IHN0ZXBcXG4vL3RvIGF2b2lkIGRlcGVuZGVudCB0ZXh0dXJlIHJlYWRzXFxudmFyeWluZyB2ZWMyIHZfcmdiTlc7XFxudmFyeWluZyB2ZWMyIHZfcmdiTkU7XFxudmFyeWluZyB2ZWMyIHZfcmdiU1c7XFxudmFyeWluZyB2ZWMyIHZfcmdiU0U7XFxudmFyeWluZyB2ZWMyIHZfcmdiTTtcXG5cXG5cXG52b2lkIHRleGNvb3Jkcyh2ZWMyIGZyYWdDb29yZCwgdmVjMiByZXNvbHV0aW9uLFxcbiAgICAgICAgICAgIG91dCB2ZWMyIHZfcmdiTlcsIG91dCB2ZWMyIHZfcmdiTkUsXFxuICAgICAgICAgICAgb3V0IHZlYzIgdl9yZ2JTVywgb3V0IHZlYzIgdl9yZ2JTRSxcXG4gICAgICAgICAgICBvdXQgdmVjMiB2X3JnYk0pIHtcXG4gICAgdmVjMiBpbnZlcnNlVlAgPSAxLjAgLyByZXNvbHV0aW9uLnh5O1xcbiAgICB2X3JnYk5XID0gKGZyYWdDb29yZCArIHZlYzIoLTEuMCwgLTEuMCkpICogaW52ZXJzZVZQO1xcbiAgICB2X3JnYk5FID0gKGZyYWdDb29yZCArIHZlYzIoMS4wLCAtMS4wKSkgKiBpbnZlcnNlVlA7XFxuICAgIHZfcmdiU1cgPSAoZnJhZ0Nvb3JkICsgdmVjMigtMS4wLCAxLjApKSAqIGludmVyc2VWUDtcXG4gICAgdl9yZ2JTRSA9IChmcmFnQ29vcmQgKyB2ZWMyKDEuMCwgMS4wKSkgKiBpbnZlcnNlVlA7XFxuICAgIHZfcmdiTSA9IHZlYzIoZnJhZ0Nvb3JkICogaW52ZXJzZVZQKTtcXG59XFxuXFxudm9pZCBtYWluKHZvaWQpe1xcbiAgIGdsX1Bvc2l0aW9uID0gdmVjNCgocHJvamVjdGlvbk1hdHJpeCAqIHZlYzMoYVZlcnRleFBvc2l0aW9uLCAxLjApKS54eSwgMC4wLCAxLjApO1xcbiAgIHZUZXh0dXJlQ29vcmQgPSBhVGV4dHVyZUNvb3JkO1xcbiAgIHZDb2xvciA9IHZlYzQoYUNvbG9yLnJnYiAqIGFDb2xvci5hLCBhQ29sb3IuYSk7XFxuICAgdlJlc29sdXRpb24gPSByZXNvbHV0aW9uO1xcblxcbiAgIC8vY29tcHV0ZSB0aGUgdGV4dHVyZSBjb29yZHMgYW5kIHNlbmQgdGhlbSB0byB2YXJ5aW5nc1xcbiAgIHRleGNvb3JkcyhhVGV4dHVyZUNvb3JkICogcmVzb2x1dGlvbiwgcmVzb2x1dGlvbiwgdl9yZ2JOVywgdl9yZ2JORSwgdl9yZ2JTVywgdl9yZ2JTRSwgdl9yZ2JNKTtcXG59XFxuXCIsXG4gICAgICAgIC8vIGZyYWdtZW50IHNoYWRlclxuICAgICAgICBcInByZWNpc2lvbiBsb3dwIGZsb2F0O1xcblxcblxcbi8qKlxcbkJhc2ljIEZYQUEgaW1wbGVtZW50YXRpb24gYmFzZWQgb24gdGhlIGNvZGUgb24gZ2Vla3MzZC5jb20gd2l0aCB0aGVcXG5tb2RpZmljYXRpb24gdGhhdCB0aGUgdGV4dHVyZTJETG9kIHN0dWZmIHdhcyByZW1vdmVkIHNpbmNlIGl0J3NcXG51bnN1cHBvcnRlZCBieSBXZWJHTC5cXG5cXG4tLVxcblxcbkZyb206XFxuaHR0cHM6Ly9naXRodWIuY29tL21pdHN1aGlrby93ZWJnbC1tZWluY3JhZnRcXG5cXG5Db3B5cmlnaHQgKGMpIDIwMTEgYnkgQXJtaW4gUm9uYWNoZXIuXFxuXFxuU29tZSByaWdodHMgcmVzZXJ2ZWQuXFxuXFxuUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0XFxubW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZVxcbm1ldDpcXG5cXG4gICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodFxcbiAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci5cXG5cXG4gICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlXFxuICAgICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmdcXG4gICAgICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWRcXG4gICAgICB3aXRoIHRoZSBkaXN0cmlidXRpb24uXFxuXFxuICAgICogVGhlIG5hbWVzIG9mIHRoZSBjb250cmlidXRvcnMgbWF5IG5vdCBiZSB1c2VkIHRvIGVuZG9yc2Ugb3JcXG4gICAgICBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWNcXG4gICAgICBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uXFxuXFxuVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SU1xcblxcXCJBUyBJU1xcXCIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UXFxuTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SXFxuQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFRcXG5PV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCxcXG5TUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UXFxuTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsXFxuREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZXFxuVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVFxcbihJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRVxcbk9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuXFxuKi9cXG5cXG4jaWZuZGVmIEZYQUFfUkVEVUNFX01JTlxcbiAgICAjZGVmaW5lIEZYQUFfUkVEVUNFX01JTiAgICgxLjAvIDEyOC4wKVxcbiNlbmRpZlxcbiNpZm5kZWYgRlhBQV9SRURVQ0VfTVVMXFxuICAgICNkZWZpbmUgRlhBQV9SRURVQ0VfTVVMICAgKDEuMCAvIDguMClcXG4jZW5kaWZcXG4jaWZuZGVmIEZYQUFfU1BBTl9NQVhcXG4gICAgI2RlZmluZSBGWEFBX1NQQU5fTUFYICAgICA4LjBcXG4jZW5kaWZcXG5cXG4vL29wdGltaXplZCB2ZXJzaW9uIGZvciBtb2JpbGUsIHdoZXJlIGRlcGVuZGVudFxcbi8vdGV4dHVyZSByZWFkcyBjYW4gYmUgYSBib3R0bGVuZWNrXFxudmVjNCBmeGFhKHNhbXBsZXIyRCB0ZXgsIHZlYzIgZnJhZ0Nvb3JkLCB2ZWMyIHJlc29sdXRpb24sXFxuICAgICAgICAgICAgdmVjMiB2X3JnYk5XLCB2ZWMyIHZfcmdiTkUsXFxuICAgICAgICAgICAgdmVjMiB2X3JnYlNXLCB2ZWMyIHZfcmdiU0UsXFxuICAgICAgICAgICAgdmVjMiB2X3JnYk0pIHtcXG4gICAgdmVjNCBjb2xvcjtcXG4gICAgbWVkaXVtcCB2ZWMyIGludmVyc2VWUCA9IHZlYzIoMS4wIC8gcmVzb2x1dGlvbi54LCAxLjAgLyByZXNvbHV0aW9uLnkpO1xcbiAgICB2ZWMzIHJnYk5XID0gdGV4dHVyZTJEKHRleCwgdl9yZ2JOVykueHl6O1xcbiAgICB2ZWMzIHJnYk5FID0gdGV4dHVyZTJEKHRleCwgdl9yZ2JORSkueHl6O1xcbiAgICB2ZWMzIHJnYlNXID0gdGV4dHVyZTJEKHRleCwgdl9yZ2JTVykueHl6O1xcbiAgICB2ZWMzIHJnYlNFID0gdGV4dHVyZTJEKHRleCwgdl9yZ2JTRSkueHl6O1xcbiAgICB2ZWM0IHRleENvbG9yID0gdGV4dHVyZTJEKHRleCwgdl9yZ2JNKTtcXG4gICAgdmVjMyByZ2JNICA9IHRleENvbG9yLnh5ejtcXG4gICAgdmVjMyBsdW1hID0gdmVjMygwLjI5OSwgMC41ODcsIDAuMTE0KTtcXG4gICAgZmxvYXQgbHVtYU5XID0gZG90KHJnYk5XLCBsdW1hKTtcXG4gICAgZmxvYXQgbHVtYU5FID0gZG90KHJnYk5FLCBsdW1hKTtcXG4gICAgZmxvYXQgbHVtYVNXID0gZG90KHJnYlNXLCBsdW1hKTtcXG4gICAgZmxvYXQgbHVtYVNFID0gZG90KHJnYlNFLCBsdW1hKTtcXG4gICAgZmxvYXQgbHVtYU0gID0gZG90KHJnYk0sICBsdW1hKTtcXG4gICAgZmxvYXQgbHVtYU1pbiA9IG1pbihsdW1hTSwgbWluKG1pbihsdW1hTlcsIGx1bWFORSksIG1pbihsdW1hU1csIGx1bWFTRSkpKTtcXG4gICAgZmxvYXQgbHVtYU1heCA9IG1heChsdW1hTSwgbWF4KG1heChsdW1hTlcsIGx1bWFORSksIG1heChsdW1hU1csIGx1bWFTRSkpKTtcXG5cXG4gICAgbWVkaXVtcCB2ZWMyIGRpcjtcXG4gICAgZGlyLnggPSAtKChsdW1hTlcgKyBsdW1hTkUpIC0gKGx1bWFTVyArIGx1bWFTRSkpO1xcbiAgICBkaXIueSA9ICAoKGx1bWFOVyArIGx1bWFTVykgLSAobHVtYU5FICsgbHVtYVNFKSk7XFxuXFxuICAgIGZsb2F0IGRpclJlZHVjZSA9IG1heCgobHVtYU5XICsgbHVtYU5FICsgbHVtYVNXICsgbHVtYVNFKSAqXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAoMC4yNSAqIEZYQUFfUkVEVUNFX01VTCksIEZYQUFfUkVEVUNFX01JTik7XFxuXFxuICAgIGZsb2F0IHJjcERpck1pbiA9IDEuMCAvIChtaW4oYWJzKGRpci54KSwgYWJzKGRpci55KSkgKyBkaXJSZWR1Y2UpO1xcbiAgICBkaXIgPSBtaW4odmVjMihGWEFBX1NQQU5fTUFYLCBGWEFBX1NQQU5fTUFYKSxcXG4gICAgICAgICAgICAgIG1heCh2ZWMyKC1GWEFBX1NQQU5fTUFYLCAtRlhBQV9TUEFOX01BWCksXFxuICAgICAgICAgICAgICBkaXIgKiByY3BEaXJNaW4pKSAqIGludmVyc2VWUDtcXG5cXG4gICAgdmVjMyByZ2JBID0gMC41ICogKFxcbiAgICAgICAgdGV4dHVyZTJEKHRleCwgZnJhZ0Nvb3JkICogaW52ZXJzZVZQICsgZGlyICogKDEuMCAvIDMuMCAtIDAuNSkpLnh5eiArXFxuICAgICAgICB0ZXh0dXJlMkQodGV4LCBmcmFnQ29vcmQgKiBpbnZlcnNlVlAgKyBkaXIgKiAoMi4wIC8gMy4wIC0gMC41KSkueHl6KTtcXG4gICAgdmVjMyByZ2JCID0gcmdiQSAqIDAuNSArIDAuMjUgKiAoXFxuICAgICAgICB0ZXh0dXJlMkQodGV4LCBmcmFnQ29vcmQgKiBpbnZlcnNlVlAgKyBkaXIgKiAtMC41KS54eXogK1xcbiAgICAgICAgdGV4dHVyZTJEKHRleCwgZnJhZ0Nvb3JkICogaW52ZXJzZVZQICsgZGlyICogMC41KS54eXopO1xcblxcbiAgICBmbG9hdCBsdW1hQiA9IGRvdChyZ2JCLCBsdW1hKTtcXG4gICAgaWYgKChsdW1hQiA8IGx1bWFNaW4pIHx8IChsdW1hQiA+IGx1bWFNYXgpKVxcbiAgICAgICAgY29sb3IgPSB2ZWM0KHJnYkEsIHRleENvbG9yLmEpO1xcbiAgICBlbHNlXFxuICAgICAgICBjb2xvciA9IHZlYzQocmdiQiwgdGV4Q29sb3IuYSk7XFxuICAgIHJldHVybiBjb2xvcjtcXG59XFxuXFxuXFxudmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7XFxudmFyeWluZyB2ZWM0IHZDb2xvcjtcXG52YXJ5aW5nIHZlYzIgdlJlc29sdXRpb247XFxuXFxuLy90ZXhjb29yZHMgY29tcHV0ZWQgaW4gdmVydGV4IHN0ZXBcXG4vL3RvIGF2b2lkIGRlcGVuZGVudCB0ZXh0dXJlIHJlYWRzXFxudmFyeWluZyB2ZWMyIHZfcmdiTlc7XFxudmFyeWluZyB2ZWMyIHZfcmdiTkU7XFxudmFyeWluZyB2ZWMyIHZfcmdiU1c7XFxudmFyeWluZyB2ZWMyIHZfcmdiU0U7XFxudmFyeWluZyB2ZWMyIHZfcmdiTTtcXG5cXG51bmlmb3JtIHNhbXBsZXIyRCB1U2FtcGxlcjtcXG5cXG5cXG52b2lkIG1haW4odm9pZCl7XFxuXFxuICAgIGdsX0ZyYWdDb2xvciA9IGZ4YWEodVNhbXBsZXIsIHZUZXh0dXJlQ29vcmQgKiB2UmVzb2x1dGlvbiwgdlJlc29sdXRpb24sIHZfcmdiTlcsIHZfcmdiTkUsIHZfcmdiU1csIHZfcmdiU0UsIHZfcmdiTSk7XFxuXFxufVxcblwiLFxuICAgICAgICAvLyB1bmlmb3Jtc1xuICAgICAgICB7XG4gICAgICAgICAgICByZXNvbHV0aW9uOiB7IHR5cGU6ICd2MicsIHZhbHVlOiB7IHg6IDEsIHk6IDEgfSB9XG4gICAgICAgIH1cbiAgICApO1xuXG59XG5cbkZYQUFGaWx0ZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShBYnN0cmFjdEZpbHRlci5wcm90b3R5cGUpO1xuRlhBQUZpbHRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBGWEFBRmlsdGVyO1xubW9kdWxlLmV4cG9ydHMgPSBGWEFBRmlsdGVyO1xuXG4vKipcbiAqIEFwcGxpZXMgdGhlIGZpbHRlclxuICpcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5XZWJHTFJlbmRlcmVyfSBUaGUgcmVuZGVyZXIgdG8gcmV0cmlldmUgdGhlIGZpbHRlciBmcm9tXG4gKiBAcGFyYW0gaW5wdXQge1BJWEkuUmVuZGVyVGFyZ2V0fVxuICogQHBhcmFtIG91dHB1dCB7UElYSS5SZW5kZXJUYXJnZXR9XG4gKi9cbkZYQUFGaWx0ZXIucHJvdG90eXBlLmFwcGx5RmlsdGVyID0gZnVuY3Rpb24gKHJlbmRlcmVyLCBpbnB1dCwgb3V0cHV0KVxue1xuICAgIHZhciBmaWx0ZXJNYW5hZ2VyID0gcmVuZGVyZXIuZmlsdGVyTWFuYWdlcjtcblxuICAgIHZhciBzaGFkZXIgPSB0aGlzLmdldFNoYWRlciggcmVuZGVyZXIgKTtcbiAgICAgLy8gZHJhdyB0aGUgZmlsdGVyLi4uXG4gICAgZmlsdGVyTWFuYWdlci5hcHBseUZpbHRlcihzaGFkZXIsIGlucHV0LCBvdXRwdXQpO1xufTtcbiIsInZhciBBYnN0cmFjdEZpbHRlciA9IHJlcXVpcmUoJy4vQWJzdHJhY3RGaWx0ZXInKSxcbiAgICBtYXRoID0gIHJlcXVpcmUoJy4uLy4uLy4uL21hdGgnKTtcblxuLy8gQHNlZSBodHRwczovL2dpdGh1Yi5jb20vc3Vic3RhY2svYnJmcy9pc3N1ZXMvMjVcblxuXG4vKipcbiAqIFRoZSBTcHJpdGVNYXNrRmlsdGVyIGNsYXNzXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLkFic3RyYWN0RmlsdGVyXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIHNwcml0ZSB7UElYSS5TcHJpdGV9IHRoZSB0YXJnZXQgc3ByaXRlXG4gKi9cbmZ1bmN0aW9uIFNwcml0ZU1hc2tGaWx0ZXIoc3ByaXRlKVxue1xuICAgIHZhciBtYXNrTWF0cml4ID0gbmV3IG1hdGguTWF0cml4KCk7XG5cbiAgICBBYnN0cmFjdEZpbHRlci5jYWxsKHRoaXMsXG4gICAgICAgIFwiYXR0cmlidXRlIHZlYzIgYVZlcnRleFBvc2l0aW9uO1xcbmF0dHJpYnV0ZSB2ZWMyIGFUZXh0dXJlQ29vcmQ7XFxuYXR0cmlidXRlIHZlYzQgYUNvbG9yO1xcblxcbnVuaWZvcm0gbWF0MyBwcm9qZWN0aW9uTWF0cml4O1xcbnVuaWZvcm0gbWF0MyBvdGhlck1hdHJpeDtcXG5cXG52YXJ5aW5nIHZlYzIgdk1hc2tDb29yZDtcXG52YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDtcXG52YXJ5aW5nIHZlYzQgdkNvbG9yO1xcblxcbnZvaWQgbWFpbih2b2lkKVxcbntcXG4gICAgZ2xfUG9zaXRpb24gPSB2ZWM0KChwcm9qZWN0aW9uTWF0cml4ICogdmVjMyhhVmVydGV4UG9zaXRpb24sIDEuMCkpLnh5LCAwLjAsIDEuMCk7XFxuICAgIHZUZXh0dXJlQ29vcmQgPSBhVGV4dHVyZUNvb3JkO1xcbiAgICB2TWFza0Nvb3JkID0gKCBvdGhlck1hdHJpeCAqIHZlYzMoIGFUZXh0dXJlQ29vcmQsIDEuMCkgICkueHk7XFxuICAgIHZDb2xvciA9IHZlYzQoYUNvbG9yLnJnYiAqIGFDb2xvci5hLCBhQ29sb3IuYSk7XFxufVxcblwiLFxuICAgICAgICBcInByZWNpc2lvbiBsb3dwIGZsb2F0O1xcblxcbnZhcnlpbmcgdmVjMiB2TWFza0Nvb3JkO1xcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xcbnZhcnlpbmcgdmVjNCB2Q29sb3I7XFxuXFxudW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXI7XFxudW5pZm9ybSBmbG9hdCBhbHBoYTtcXG51bmlmb3JtIHNhbXBsZXIyRCBtYXNrO1xcblxcbnZvaWQgbWFpbih2b2lkKVxcbntcXG4gICAgLy8gY2hlY2sgY2xpcCEgdGhpcyB3aWxsIHN0b3AgdGhlIG1hc2sgYmxlZWRpbmcgb3V0IGZyb20gdGhlIGVkZ2VzXFxuICAgIHZlYzIgdGV4dCA9IGFicyggdk1hc2tDb29yZCAtIDAuNSApO1xcbiAgICB0ZXh0ID0gc3RlcCgwLjUsIHRleHQpO1xcbiAgICBmbG9hdCBjbGlwID0gMS4wIC0gbWF4KHRleHQueSwgdGV4dC54KTtcXG4gICAgdmVjNCBvcmlnaW5hbCA9IHRleHR1cmUyRCh1U2FtcGxlciwgdlRleHR1cmVDb29yZCk7XFxuICAgIHZlYzQgbWFza3kgPSB0ZXh0dXJlMkQobWFzaywgdk1hc2tDb29yZCk7XFxuICAgIG9yaWdpbmFsICo9IChtYXNreS5yICogbWFza3kuYSAqIGFscGhhICogY2xpcCk7XFxuICAgIGdsX0ZyYWdDb2xvciA9IG9yaWdpbmFsO1xcbn1cXG5cIixcbiAgICAgICAge1xuICAgICAgICAgICAgbWFzazogICAgICAgICAgIHsgdHlwZTogJ3NhbXBsZXIyRCcsIHZhbHVlOiBzcHJpdGUuX3RleHR1cmUgfSxcbiAgICAgICAgICAgIGFscGhhOiAgICAgICAgICB7IHR5cGU6ICdmJywgdmFsdWU6IDF9LFxuICAgICAgICAgICAgb3RoZXJNYXRyaXg6ICAgIHsgdHlwZTogJ21hdDMnLCB2YWx1ZTogbWFza01hdHJpeC50b0FycmF5KHRydWUpIH1cbiAgICAgICAgfVxuICAgICk7XG5cbiAgICB0aGlzLm1hc2tTcHJpdGUgPSBzcHJpdGU7XG4gICAgdGhpcy5tYXNrTWF0cml4ID0gbWFza01hdHJpeDtcbn1cblxuU3ByaXRlTWFza0ZpbHRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKEFic3RyYWN0RmlsdGVyLnByb3RvdHlwZSk7XG5TcHJpdGVNYXNrRmlsdGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFNwcml0ZU1hc2tGaWx0ZXI7XG5tb2R1bGUuZXhwb3J0cyA9IFNwcml0ZU1hc2tGaWx0ZXI7XG5cbi8qKlxuICogQXBwbGllcyB0aGUgZmlsdGVyXG4gKlxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLldlYkdMUmVuZGVyZXJ9IFRoZSByZW5kZXJlciB0byByZXRyaWV2ZSB0aGUgZmlsdGVyIGZyb21cbiAqIEBwYXJhbSBpbnB1dCB7UElYSS5SZW5kZXJUYXJnZXR9XG4gKiBAcGFyYW0gb3V0cHV0IHtQSVhJLlJlbmRlclRhcmdldH1cbiAqL1xuU3ByaXRlTWFza0ZpbHRlci5wcm90b3R5cGUuYXBwbHlGaWx0ZXIgPSBmdW5jdGlvbiAocmVuZGVyZXIsIGlucHV0LCBvdXRwdXQpXG57XG4gICAgdmFyIGZpbHRlck1hbmFnZXIgPSByZW5kZXJlci5maWx0ZXJNYW5hZ2VyO1xuXG4gICAgdGhpcy51bmlmb3Jtcy5tYXNrLnZhbHVlID0gdGhpcy5tYXNrU3ByaXRlLl90ZXh0dXJlO1xuXG4gICAgZmlsdGVyTWFuYWdlci5jYWxjdWxhdGVNYXBwZWRNYXRyaXgoaW5wdXQuZnJhbWUsIHRoaXMubWFza1Nwcml0ZSwgdGhpcy5tYXNrTWF0cml4KTtcblxuICAgIHRoaXMudW5pZm9ybXMub3RoZXJNYXRyaXgudmFsdWUgPSB0aGlzLm1hc2tNYXRyaXgudG9BcnJheSh0cnVlKTtcbiAgICB0aGlzLnVuaWZvcm1zLmFscGhhLnZhbHVlID0gdGhpcy5tYXNrU3ByaXRlLndvcmxkQWxwaGE7XG5cbiAgICB2YXIgc2hhZGVyID0gdGhpcy5nZXRTaGFkZXIocmVuZGVyZXIpO1xuICAgICAvLyBkcmF3IHRoZSBmaWx0ZXIuLi5cbiAgICBmaWx0ZXJNYW5hZ2VyLmFwcGx5RmlsdGVyKHNoYWRlciwgaW5wdXQsIG91dHB1dCk7XG59O1xuXG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKFNwcml0ZU1hc2tGaWx0ZXIucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogVGhlIHRleHR1cmUgdXNlZCBmb3IgdGhlIGRpc3BsYWNlbWVudCBtYXAuIE11c3QgYmUgcG93ZXIgb2YgMiBzaXplZCB0ZXh0dXJlLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5UZXh0dXJlfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLlNwcml0ZU1hc2tGaWx0ZXIjXG4gICAgICovXG4gICAgbWFwOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudW5pZm9ybXMubWFzay52YWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudW5pZm9ybXMubWFzay52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFRoZSBvZmZzZXQgdXNlZCB0byBtb3ZlIHRoZSBkaXNwbGFjZW1lbnQgbWFwLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5Qb2ludH1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5TcHJpdGVNYXNrRmlsdGVyI1xuICAgICAqL1xuICAgIG9mZnNldDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudW5pZm9ybXMub2Zmc2V0LnZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLm9mZnNldC52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfVxufSk7XG4iLCJ2YXIgV2ViR0xNYW5hZ2VyID0gcmVxdWlyZSgnLi9XZWJHTE1hbmFnZXInKTtcblxuLyoqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAZXh0ZW5kcyBQSVhJLldlYkdsTWFuYWdlclxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLldlYkdMUmVuZGVyZXJ9IFRoZSByZW5kZXJlciB0aGlzIG1hbmFnZXIgd29ya3MgZm9yLlxuICovXG5mdW5jdGlvbiBCbGVuZE1vZGVNYW5hZ2VyKHJlbmRlcmVyKVxue1xuICAgIFdlYkdMTWFuYWdlci5jYWxsKHRoaXMsIHJlbmRlcmVyKTtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLmN1cnJlbnRCbGVuZE1vZGUgPSA5OTk5OTtcbn1cblxuQmxlbmRNb2RlTWFuYWdlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFdlYkdMTWFuYWdlci5wcm90b3R5cGUpO1xuQmxlbmRNb2RlTWFuYWdlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBCbGVuZE1vZGVNYW5hZ2VyO1xubW9kdWxlLmV4cG9ydHMgPSBCbGVuZE1vZGVNYW5hZ2VyO1xuXG4vKipcbiAqIFNldHMtdXAgdGhlIGdpdmVuIGJsZW5kTW9kZSBmcm9tIFdlYkdMJ3MgcG9pbnQgb2Ygdmlldy5cbiAqXG4gKiBAcGFyYW0gYmxlbmRNb2RlIHtudW1iZXJ9IHRoZSBibGVuZE1vZGUsIHNob3VsZCBiZSBhIFBpeGkgY29uc3QsIHN1Y2ggYXMgYFBJWEkuQkxFTkRfTU9ERVMuQUREYC4gU2VlXG4gKiAge0BsaW5rIFBJWEkuQkxFTkRfTU9ERVN9IGZvciBwb3NzaWJsZSB2YWx1ZXMuXG4gKi9cbkJsZW5kTW9kZU1hbmFnZXIucHJvdG90eXBlLnNldEJsZW5kTW9kZSA9IGZ1bmN0aW9uIChibGVuZE1vZGUpXG57XG4gICAgaWYgKHRoaXMuY3VycmVudEJsZW5kTW9kZSA9PT0gYmxlbmRNb2RlKVxuICAgIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHRoaXMuY3VycmVudEJsZW5kTW9kZSA9IGJsZW5kTW9kZTtcblxuICAgIHZhciBtb2RlID0gdGhpcy5yZW5kZXJlci5ibGVuZE1vZGVzW3RoaXMuY3VycmVudEJsZW5kTW9kZV07XG4gICAgdGhpcy5yZW5kZXJlci5nbC5ibGVuZEZ1bmMobW9kZVswXSwgbW9kZVsxXSk7XG5cbiAgICByZXR1cm4gdHJ1ZTtcbn07XG4iLCJ2YXIgV2ViR0xNYW5hZ2VyID0gcmVxdWlyZSgnLi9XZWJHTE1hbmFnZXInKSxcbiAgICBSZW5kZXJUYXJnZXQgPSByZXF1aXJlKCcuLi91dGlscy9SZW5kZXJUYXJnZXQnKSxcbiAgICBDT05TVCA9IHJlcXVpcmUoJy4uLy4uLy4uL2NvbnN0JyksXG4gICAgUXVhZCA9IHJlcXVpcmUoJy4uL3V0aWxzL1F1YWQnKSxcbiAgICBtYXRoID0gIHJlcXVpcmUoJy4uLy4uLy4uL21hdGgnKTtcblxuLyoqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAZXh0ZW5kcyBQSVhJLldlYkdMTWFuYWdlclxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLldlYkdMUmVuZGVyZXJ9IFRoZSByZW5kZXJlciB0aGlzIG1hbmFnZXIgd29ya3MgZm9yLlxuICovXG5mdW5jdGlvbiBGaWx0ZXJNYW5hZ2VyKHJlbmRlcmVyKVxue1xuICAgIFdlYkdMTWFuYWdlci5jYWxsKHRoaXMsIHJlbmRlcmVyKTtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge29iamVjdFtdfVxuICAgICAqL1xuICAgIHRoaXMuZmlsdGVyU3RhY2sgPSBbXTtcblxuICAgIHRoaXMuZmlsdGVyU3RhY2sucHVzaCh7XG4gICAgICAgIHJlbmRlclRhcmdldDpyZW5kZXJlci5jdXJyZW50UmVuZGVyVGFyZ2V0LFxuICAgICAgICBmaWx0ZXI6W10sXG4gICAgICAgIGJvdW5kczpudWxsXG4gICAgfSk7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlJlbmRlclRhcmdldFtdfVxuICAgICAqL1xuICAgIHRoaXMudGV4dHVyZVBvb2wgPSBbXTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBzaXplIG9mIHRoZSB0ZXh0dXJlXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlJlY3RhbmdsZX1cbiAgICAgKi9cbiAgICAvLyBsaXN0ZW4gZm9yIGNvbnRleHQgYW5kIHVwZGF0ZSBuZWNlc3NhcnkgYnVmZmVyc1xuICAgIC8vVE9ETyBtYWtlIHRoaXMgZHluYW1pYyFcbiAgICAvL1RPRE8gdGVzdCB0aGlzIG91dCBieSBmb3JjZXMgcG93ZXIgb2YgdHdvP1xuICAgIHRoaXMudGV4dHVyZVNpemUgPSBuZXcgbWF0aC5SZWN0YW5nbGUoMCwgMCwgcmVuZGVyZXIud2lkdGgsIHJlbmRlcmVyLmhlaWdodCk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgY3VycmVudCBmcmFtZVxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5SZWN0YW5nbGV9XG4gICAgICovXG4gICAgdGhpcy5jdXJyZW50RnJhbWUgPSBudWxsO1xufVxuXG5GaWx0ZXJNYW5hZ2VyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoV2ViR0xNYW5hZ2VyLnByb3RvdHlwZSk7XG5GaWx0ZXJNYW5hZ2VyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IEZpbHRlck1hbmFnZXI7XG5tb2R1bGUuZXhwb3J0cyA9IEZpbHRlck1hbmFnZXI7XG5cblxuLyoqXG4gKiBDYWxsZWQgd2hlbiB0aGVyZSBpcyBhIFdlYkdMIGNvbnRleHQgY2hhbmdlLlxuICpcbiAqL1xuRmlsdGVyTWFuYWdlci5wcm90b3R5cGUub25Db250ZXh0Q2hhbmdlID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLnRleHR1cmVQb29sLmxlbmd0aCA9IDA7XG5cbiAgICB2YXIgZ2wgPSB0aGlzLnJlbmRlcmVyLmdsO1xuICAgIHRoaXMucXVhZCA9IG5ldyBRdWFkKGdsKTtcbn07XG5cbi8qKlxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLldlYkdMUmVuZGVyZXJ9XG4gKiBAcGFyYW0gYnVmZmVyIHtBcnJheUJ1ZmZlcn1cbiAqL1xuRmlsdGVyTWFuYWdlci5wcm90b3R5cGUuc2V0RmlsdGVyU3RhY2sgPSBmdW5jdGlvbiAoIGZpbHRlclN0YWNrIClcbntcbiAgICB0aGlzLmZpbHRlclN0YWNrID0gZmlsdGVyU3RhY2s7XG59O1xuXG4vKipcbiAqIEFwcGxpZXMgdGhlIGZpbHRlciBhbmQgYWRkcyBpdCB0byB0aGUgY3VycmVudCBmaWx0ZXIgc3RhY2suXG4gKlxuICogQHBhcmFtIHRhcmdldCB7UElYSS5EaXNwbGF5T2JqZWN0fVxuICogQHBhcmFtIGZpbHRlcnMge1BJWEkuQWJzdHJhY3RGaWxlcltdfSB0aGUgZmlsdGVycyB0aGF0IHdpbGwgYmUgcHVzaGVkIHRvIHRoZSBjdXJyZW50IGZpbHRlciBzdGFja1xuICovXG5GaWx0ZXJNYW5hZ2VyLnByb3RvdHlwZS5wdXNoRmlsdGVyID0gZnVuY3Rpb24gKHRhcmdldCwgZmlsdGVycylcbntcbiAgICAvLyBnZXQgdGhlIGJvdW5kcyBvZiB0aGUgb2JqZWN0Li5cbiAgICAvLyBUT0RPIHJlcGxhY2UgY2xvbmUgd2l0aCBhIGNvcHkgdG8gc2F2ZSBvYmplY3QgY3JlYXRpb25cbiAgICB2YXIgYm91bmRzID0gdGFyZ2V0LmZpbHRlckFyZWEgPyB0YXJnZXQuZmlsdGVyQXJlYS5jbG9uZSgpIDogdGFyZ2V0LmdldEJvdW5kcygpO1xuXG4gICAgLy9ib3VuZHMgPSBib3VuZHMuY2xvbmUoKTtcblxuICAgIC8vIHJvdW5kIG9mZiB0aGUgcmVjdGFuZ2xlIHRvIGdldCBhIG5pY2Ugc21vb29vb29vdGggZmlsdGVyIDopXG4gICAgYm91bmRzLnggPSBib3VuZHMueCB8IDA7XG4gICAgYm91bmRzLnkgPSBib3VuZHMueSB8IDA7XG4gICAgYm91bmRzLndpZHRoID0gYm91bmRzLndpZHRoIHwgMDtcbiAgICBib3VuZHMuaGVpZ2h0ID0gYm91bmRzLmhlaWdodCB8IDA7XG5cblxuICAgIC8vIHBhZGRpbmchXG4gICAgdmFyIHBhZGRpbmcgPSBmaWx0ZXJzWzBdLnBhZGRpbmcgfCAwO1xuICAgIGJvdW5kcy54IC09IHBhZGRpbmc7XG4gICAgYm91bmRzLnkgLT0gcGFkZGluZztcbiAgICBib3VuZHMud2lkdGggKz0gcGFkZGluZyAqIDI7XG4gICAgYm91bmRzLmhlaWdodCArPSBwYWRkaW5nICogMjtcblxuXG4gICAgaWYodGhpcy5yZW5kZXJlci5jdXJyZW50UmVuZGVyVGFyZ2V0LnRyYW5zZm9ybSlcbiAgICB7XG4gICAgICAgIC8vVE9ETyB0aGlzIHdpbGwgYnJlYWsgaWYgdGhlIHJlbmRlclRleHR1cmUgdHJhbnNmb3JtIGlzIGFueXRoaW5nIG90aGVyIHRoYW4gYSB0cmFuc2xhdGlvbi5cbiAgICAgICAgLy9XaWxsIG5lZWQgdG8gdGFrZSB0aGUgZnVsbCBtYXRyaXggdHJhbnNmb3JtIGludG8gYWNvdW50Li5cbiAgICAgICAgdmFyIHRyYW5zZm9ybSA9IHRoaXMucmVuZGVyZXIuY3VycmVudFJlbmRlclRhcmdldC50cmFuc2Zvcm07XG5cbiAgICAgICAgYm91bmRzLnggKz0gdHJhbnNmb3JtLnR4O1xuICAgICAgICBib3VuZHMueSArPSB0cmFuc2Zvcm0udHk7XG5cbiAgICAgICAgdGhpcy5jYXBGaWx0ZXJBcmVhKCBib3VuZHMgKTtcblxuICAgICAgICBib3VuZHMueCAtPSB0cmFuc2Zvcm0udHg7XG4gICAgICAgIGJvdW5kcy55IC09IHRyYW5zZm9ybS50eTtcbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgIHRoaXMuY2FwRmlsdGVyQXJlYSggYm91bmRzICk7XG4gICAgfVxuXG4gICAgaWYoYm91bmRzLndpZHRoID4gMCAmJiBib3VuZHMuaGVpZ2h0ID4gMClcbiAgICB7XG4gICAgICAgIHRoaXMuY3VycmVudEZyYW1lID0gYm91bmRzO1xuXG4gICAgICAgIHZhciB0ZXh0dXJlID0gdGhpcy5nZXRSZW5kZXJUYXJnZXQoKTtcblxuICAgICAgICB0aGlzLnJlbmRlcmVyLnNldFJlbmRlclRhcmdldCh0ZXh0dXJlKTtcblxuICAgICAgICAvLyBjbGVhciB0aGUgdGV4dHVyZS4uXG4gICAgICAgIHRleHR1cmUuY2xlYXIoKTtcblxuICAgICAgICAvLyBUT0RPIGdldCByaWQgb2Ygb2JqZWN0IGNyZWF0aW9uIVxuICAgICAgICB0aGlzLmZpbHRlclN0YWNrLnB1c2goe1xuICAgICAgICAgICAgcmVuZGVyVGFyZ2V0OiB0ZXh0dXJlLFxuICAgICAgICAgICAgZmlsdGVyOiBmaWx0ZXJzXG4gICAgICAgIH0pO1xuXG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIC8vIHB1c2ggc29tdGhpbmcgb24gdG8gdGhlIHN0YWNrIHRoYXQgaXMgZW1wdHlcbiAgICAgICAgdGhpcy5maWx0ZXJTdGFjay5wdXNoKHtcbiAgICAgICAgICAgIHJlbmRlclRhcmdldDogbnVsbCxcbiAgICAgICAgICAgIGZpbHRlcjogZmlsdGVyc1xuICAgICAgICB9KTtcbiAgICB9XG59O1xuXG5cbi8qKlxuICogUmVtb3ZlcyB0aGUgbGFzdCBmaWx0ZXIgZnJvbSB0aGUgZmlsdGVyIHN0YWNrIGFuZCByZXR1cm5zIGl0LlxuICpcbiAqL1xuRmlsdGVyTWFuYWdlci5wcm90b3R5cGUucG9wRmlsdGVyID0gZnVuY3Rpb24gKClcbntcbiAgICB2YXIgZmlsdGVyRGF0YSA9IHRoaXMuZmlsdGVyU3RhY2sucG9wKCk7XG4gICAgdmFyIHByZXZpb3VzRmlsdGVyRGF0YSA9IHRoaXMuZmlsdGVyU3RhY2tbdGhpcy5maWx0ZXJTdGFjay5sZW5ndGgtMV07XG5cbiAgICB2YXIgaW5wdXQgPSBmaWx0ZXJEYXRhLnJlbmRlclRhcmdldDtcblxuICAgIC8vIGlmIHRoZSByZW5kZXJUYXJnZXQgaXMgbnVsbCB0aGVuIHdlIGRvbid0IGFwcGx5IHRoZSBmaWx0ZXIgYXMgaXRzIG9mZnNjcmVlblxuICAgIGlmKCFmaWx0ZXJEYXRhLnJlbmRlclRhcmdldClcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB2YXIgb3V0cHV0ID0gcHJldmlvdXNGaWx0ZXJEYXRhLnJlbmRlclRhcmdldDtcblxuICAgIC8vIHVzZSBwcm9ncmFtXG4gICAgdmFyIGdsID0gdGhpcy5yZW5kZXJlci5nbDtcblxuXG4gICAgdGhpcy5jdXJyZW50RnJhbWUgPSBpbnB1dC5mcmFtZTtcblxuICAgIHRoaXMucXVhZC5tYXAodGhpcy50ZXh0dXJlU2l6ZSwgaW5wdXQuZnJhbWUpO1xuXG5cbiAgICAvLyBUT0RPLi4gdGhpcyBwcm9iYWJseSBvbmx5IG5lZWRzIHRvIGJlIGRvbmUgb25jZSFcbiAgICBnbC5iaW5kQnVmZmVyKGdsLkFSUkFZX0JVRkZFUiwgdGhpcy5xdWFkLnZlcnRleEJ1ZmZlcik7XG4gICAgZ2wuYmluZEJ1ZmZlcihnbC5FTEVNRU5UX0FSUkFZX0JVRkZFUiwgdGhpcy5xdWFkLmluZGV4QnVmZmVyKTtcblxuICAgIHZhciBmaWx0ZXJzID0gZmlsdGVyRGF0YS5maWx0ZXI7XG5cbiAgICAvLyBhc3N1bWluZyBhbGwgZmlsdGVycyBmb2xsb3cgdGhlIGNvcnJlY3QgZm9ybWF0Pz9cbiAgICBnbC52ZXJ0ZXhBdHRyaWJQb2ludGVyKHRoaXMucmVuZGVyZXIuc2hhZGVyTWFuYWdlci5kZWZhdWx0U2hhZGVyLmF0dHJpYnV0ZXMuYVZlcnRleFBvc2l0aW9uLCAyLCBnbC5GTE9BVCwgZmFsc2UsIDAsIDApO1xuICAgIGdsLnZlcnRleEF0dHJpYlBvaW50ZXIodGhpcy5yZW5kZXJlci5zaGFkZXJNYW5hZ2VyLmRlZmF1bHRTaGFkZXIuYXR0cmlidXRlcy5hVGV4dHVyZUNvb3JkLCAyLCBnbC5GTE9BVCwgZmFsc2UsIDAsIDIgKiA0ICogNCk7XG4gICAgZ2wudmVydGV4QXR0cmliUG9pbnRlcih0aGlzLnJlbmRlcmVyLnNoYWRlck1hbmFnZXIuZGVmYXVsdFNoYWRlci5hdHRyaWJ1dGVzLmFDb2xvciwgNCwgZ2wuRkxPQVQsIGZhbHNlLCAwLCA0ICogNCAqIDQpO1xuXG4gICAgLy8gcmVzdG9yZSB0aGUgbm9ybWFsIGJsZW5kbW9kZSFcbiAgICB0aGlzLnJlbmRlcmVyLmJsZW5kTW9kZU1hbmFnZXIuc2V0QmxlbmRNb2RlKENPTlNULkJMRU5EX01PREVTLk5PUk1BTCk7XG5cbiAgICBpZiAoZmlsdGVycy5sZW5ndGggPT09IDEpXG4gICAge1xuICAgICAgICAvLyBUT0RPIChjZW5nbGVyKSAtIFRoZXJlIGhhcyB0byBiZSBhIGJldHRlciB3YXkgdGhlbiBzZXR0aW5nIHRoaXMgZWFjaCB0aW1lP1xuICAgICAgICBpZiAoZmlsdGVyc1swXS51bmlmb3Jtcy5kaW1lbnNpb25zKVxuICAgICAgICB7XG4gICAgICAgICAgICBmaWx0ZXJzWzBdLnVuaWZvcm1zLmRpbWVuc2lvbnMudmFsdWVbMF0gPSB0aGlzLnJlbmRlcmVyLndpZHRoO1xuICAgICAgICAgICAgZmlsdGVyc1swXS51bmlmb3Jtcy5kaW1lbnNpb25zLnZhbHVlWzFdID0gdGhpcy5yZW5kZXJlci5oZWlnaHQ7XG4gICAgICAgICAgICBmaWx0ZXJzWzBdLnVuaWZvcm1zLmRpbWVuc2lvbnMudmFsdWVbMl0gPSB0aGlzLnF1YWQudmVydGljZXNbMF07XG4gICAgICAgICAgICBmaWx0ZXJzWzBdLnVuaWZvcm1zLmRpbWVuc2lvbnMudmFsdWVbM10gPSB0aGlzLnF1YWQudmVydGljZXNbNV07XG4gICAgICAgIH1cblxuICAgICAgICBmaWx0ZXJzWzBdLmFwcGx5RmlsdGVyKCB0aGlzLnJlbmRlcmVyLCBpbnB1dCwgb3V0cHV0ICk7XG4gICAgICAgIHRoaXMucmV0dXJuUmVuZGVyVGFyZ2V0KCBpbnB1dCApO1xuXG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHZhciBmbGlwVGV4dHVyZSA9IGlucHV0O1xuICAgICAgICB2YXIgZmxvcFRleHR1cmUgPSB0aGlzLmdldFJlbmRlclRhcmdldCh0cnVlKTtcblxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGZpbHRlcnMubGVuZ3RoLTE7IGkrKylcbiAgICAgICAge1xuICAgICAgICAgICAgdmFyIGZpbHRlciA9IGZpbHRlcnNbaV07XG5cbiAgICAgICAgICAgIC8vIFRPRE8gKGNlbmdsZXIpIC0gVGhlcmUgaGFzIHRvIGJlIGEgYmV0dGVyIHdheSB0aGVuIHNldHRpbmcgdGhpcyBlYWNoIHRpbWU/XG4gICAgICAgICAgICBpZiAoZmlsdGVyLnVuaWZvcm1zLmRpbWVuc2lvbnMpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgZmlsdGVyLnVuaWZvcm1zLmRpbWVuc2lvbnMudmFsdWVbMF0gPSB0aGlzLnJlbmRlcmVyLndpZHRoO1xuICAgICAgICAgICAgICAgIGZpbHRlci51bmlmb3Jtcy5kaW1lbnNpb25zLnZhbHVlWzFdID0gdGhpcy5yZW5kZXJlci5oZWlnaHQ7XG4gICAgICAgICAgICAgICAgZmlsdGVyLnVuaWZvcm1zLmRpbWVuc2lvbnMudmFsdWVbMl0gPSB0aGlzLnF1YWQudmVydGljZXNbMF07XG4gICAgICAgICAgICAgICAgZmlsdGVyLnVuaWZvcm1zLmRpbWVuc2lvbnMudmFsdWVbM10gPSB0aGlzLnF1YWQudmVydGljZXNbNV07XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGZpbHRlci5hcHBseUZpbHRlciggdGhpcy5yZW5kZXJlciwgZmxpcFRleHR1cmUsIGZsb3BUZXh0dXJlICk7XG5cbiAgICAgICAgICAgIHZhciB0ZW1wID0gZmxpcFRleHR1cmU7XG4gICAgICAgICAgICBmbGlwVGV4dHVyZSA9IGZsb3BUZXh0dXJlO1xuICAgICAgICAgICAgZmxvcFRleHR1cmUgPSB0ZW1wO1xuICAgICAgICB9XG5cbiAgICAgICAgZmlsdGVyc1tmaWx0ZXJzLmxlbmd0aC0xXS5hcHBseUZpbHRlciggdGhpcy5yZW5kZXJlciwgZmxpcFRleHR1cmUsIG91dHB1dCApO1xuXG4gICAgICAgIHRoaXMucmV0dXJuUmVuZGVyVGFyZ2V0KCBmbGlwVGV4dHVyZSApO1xuICAgICAgICB0aGlzLnJldHVyblJlbmRlclRhcmdldCggZmxvcFRleHR1cmUgKTtcbiAgICB9XG5cbiAgICByZXR1cm4gZmlsdGVyRGF0YS5maWx0ZXI7XG59O1xuXG4vKipcbiAqIEdyYWJzIGFuIHJlbmRlciB0YXJnZXQgZnJvbSB0aGUgaW50ZXJuYWwgcG9vbFxuICpcbiAqIEBwYXJhbSBjbGVhciB7Ym9vbGVhbn0gV2hldGhlciBvciBub3Qgd2UgbmVlZCB0byBjbGVhciB0aGUgUmVuZGVyVGFyZ2V0XG4gKiBAcmV0dXJuIHtSZW5kZXJUYXJnZXR9XG4gKi9cbkZpbHRlck1hbmFnZXIucHJvdG90eXBlLmdldFJlbmRlclRhcmdldCA9IGZ1bmN0aW9uICggY2xlYXIgKVxue1xuICAgIHZhciByZW5kZXJUYXJnZXQgPSB0aGlzLnRleHR1cmVQb29sLnBvcCgpIHx8IG5ldyBSZW5kZXJUYXJnZXQodGhpcy5yZW5kZXJlci5nbCwgdGhpcy50ZXh0dXJlU2l6ZS53aWR0aCwgdGhpcy50ZXh0dXJlU2l6ZS5oZWlnaHQsIENPTlNULlNDQUxFX01PREVTLkxJTkVBUiwgdGhpcy5yZW5kZXJlci5yZXNvbHV0aW9uICogQ09OU1QuRklMVEVSX1JFU09MVVRJT04pO1xuICAgIHJlbmRlclRhcmdldC5mcmFtZSA9IHRoaXMuY3VycmVudEZyYW1lO1xuXG4gICAgaWYgKGNsZWFyKVxuICAgIHtcbiAgICAgICAgcmVuZGVyVGFyZ2V0LmNsZWFyKHRydWUpO1xuICAgIH1cblxuICAgIHJldHVybiByZW5kZXJUYXJnZXQ7XG59O1xuXG4vKlxuICogUmV0dXJucyBhIFJlbmRlclRhcmdldCB0byB0aGUgaW50ZXJuYWwgcG9vbFxuICogQHBhcmFtIHJlbmRlclRhcmdldCB7UmVuZGVyVGFyZ2V0fSBUaGUgUmVuZGVyVGFyZ2V0IHdlIHdhbnQgdG8gcmV0dXJuIHRvIHRoZSBwb29sXG4gKi9cbkZpbHRlck1hbmFnZXIucHJvdG90eXBlLnJldHVyblJlbmRlclRhcmdldCA9IGZ1bmN0aW9uIChyZW5kZXJUYXJnZXQpXG57XG4gICAgdGhpcy50ZXh0dXJlUG9vbC5wdXNoKCByZW5kZXJUYXJnZXQgKTtcbn07XG5cbi8qXG4gKiBBcHBsaWVzIHRoZSBmaWx0ZXJcbiAqIEBwYXJhbSBzaGFkZXIge1NoYWRlcn0gVGhlIHNoYWRlciB0byB1cGxvYWRcbiAqIEBwYXJhbSBpbnB1dFRhcmdldCB7UmVuZGVyVGFyZ2V0fVxuICogQHBhcmFtIG91dHB1dFRhcmdldCB7UmVuZGVyVGFyZ2V0fVxuICogQHBhcmFtIGNsZWFyIHtib29sZWFufSBXaGV0aGVyIG9yIG5vdCB3ZSB3YW50IHRvIGNsZWFyIHRoZSBvdXRwdXRUYXJnZXRcbiAqL1xuRmlsdGVyTWFuYWdlci5wcm90b3R5cGUuYXBwbHlGaWx0ZXIgPSBmdW5jdGlvbiAoc2hhZGVyLCBpbnB1dFRhcmdldCwgb3V0cHV0VGFyZ2V0LCBjbGVhcilcbntcbiAgICB2YXIgZ2wgPSB0aGlzLnJlbmRlcmVyLmdsO1xuXG4gICAgdGhpcy5yZW5kZXJlci5zZXRSZW5kZXJUYXJnZXQob3V0cHV0VGFyZ2V0KTtcblxuICAgIGlmIChjbGVhcilcbiAgICB7XG4gICAgICAgIG91dHB1dFRhcmdldC5jbGVhcigpO1xuICAgIH1cblxuICAgIC8vIHNldCB0aGUgc2hhZGVyXG4gICAgdGhpcy5yZW5kZXJlci5zaGFkZXJNYW5hZ2VyLnNldFNoYWRlcihzaGFkZXIpO1xuXG4gICAgLy8gVE9ETyAoY2VuZ2xlcikgLSBDYW4gdGhpcyBiZSBjYWNoZWQgYW5kIG5vdCBgdG9BcnJheWBlZCBlYWNoIGZyYW1lP1xuICAgIHNoYWRlci51bmlmb3Jtcy5wcm9qZWN0aW9uTWF0cml4LnZhbHVlID0gdGhpcy5yZW5kZXJlci5jdXJyZW50UmVuZGVyVGFyZ2V0LnByb2plY3Rpb25NYXRyaXgudG9BcnJheSh0cnVlKTtcblxuICAgIC8vVE9ETyBjYW4gdGhpcyBiZSBvcHRpbWlzZWQ/XG4gICAgc2hhZGVyLnN5bmNVbmlmb3JtcygpO1xuLypcbiAgICBnbC52ZXJ0ZXhBdHRyaWJQb2ludGVyKHNoYWRlci5hdHRyaWJ1dGVzLmFWZXJ0ZXhQb3NpdGlvbiwgMiwgZ2wuRkxPQVQsIGZhbHNlLCAwLCAwKTtcbiAgICBnbC52ZXJ0ZXhBdHRyaWJQb2ludGVyKHNoYWRlci5hdHRyaWJ1dGVzLmFUZXh0dXJlQ29vcmQsIDIsIGdsLkZMT0FULCBmYWxzZSwgMCwgMiAqIDQgKiA0KTtcbiAgICBnbC52ZXJ0ZXhBdHRyaWJQb2ludGVyKHNoYWRlci5hdHRyaWJ1dGVzLmFDb2xvciwgNCwgZ2wuRkxPQVQsIGZhbHNlLCAwLCA0ICogNCAqIDQpO1xuKi9cblxuICAgIGdsLmFjdGl2ZVRleHR1cmUoZ2wuVEVYVFVSRTApO1xuICAgIGdsLmJpbmRUZXh0dXJlKGdsLlRFWFRVUkVfMkQsIGlucHV0VGFyZ2V0LnRleHR1cmUpO1xuXG4gICAgZ2wuZHJhd0VsZW1lbnRzKGdsLlRSSUFOR0xFUywgNiwgZ2wuVU5TSUdORURfU0hPUlQsIDAgKTtcbiAgICB0aGlzLnJlbmRlcmVyLmRyYXdDb3VudCsrO1xufTtcblxuLypcbiAqIENhbGN1bGF0ZXMgdGhlIG1hcHBlZCBtYXRyaXhcbiAqIEBwYXJhbSBmaWx0ZXJBcmVhIHtSZWN0YW5nbGV9IFRoZSBmaWx0ZXIgYXJlYVxuICogQHBhcmFtIHNwcml0ZSB7U3ByaXRlfSB0aGUgdGFyZ2V0IHNwcml0ZVxuICogQHBhcmFtIG91dHB1dE1hdHJpeCB7TWF0cml4fSBAYWx2aW5cbiAqL1xuLy8gVE9ETyBwbGF5aW5nIGFyb3VuZCBoZXJlLi4gdGhpcyBpcyB0ZW1wb3JhcnkgLSAod2lsbCBlbmQgdXAgaW4gdGhlIHNoYWRlcilcbkZpbHRlck1hbmFnZXIucHJvdG90eXBlLmNhbGN1bGF0ZU1hcHBlZE1hdHJpeCA9IGZ1bmN0aW9uIChmaWx0ZXJBcmVhLCBzcHJpdGUsIG91dHB1dE1hdHJpeClcbntcbiAgICB2YXIgd29ybGRUcmFuc2Zvcm0gPSBzcHJpdGUud29ybGRUcmFuc2Zvcm0uY29weShtYXRoLk1hdHJpeC5URU1QX01BVFJJWCksXG4gICAgdGV4dHVyZSA9IHNwcml0ZS5fdGV4dHVyZS5iYXNlVGV4dHVyZTtcblxuICAgIHZhciBtYXBwZWRNYXRyaXggPSBvdXRwdXRNYXRyaXguaWRlbnRpdHkoKTtcblxuICAgIC8vIHNjYWxlLi5cbiAgICB2YXIgcmF0aW8gPSB0aGlzLnRleHR1cmVTaXplLmhlaWdodCAvIHRoaXMudGV4dHVyZVNpemUud2lkdGg7XG5cbiAgICBtYXBwZWRNYXRyaXgudHJhbnNsYXRlKGZpbHRlckFyZWEueCAvIHRoaXMudGV4dHVyZVNpemUud2lkdGgsIGZpbHRlckFyZWEueSAvIHRoaXMudGV4dHVyZVNpemUuaGVpZ2h0ICk7XG5cbiAgICBtYXBwZWRNYXRyaXguc2NhbGUoMSAsIHJhdGlvKTtcblxuICAgIHZhciB0cmFuc2xhdGVTY2FsZVggPSAodGhpcy50ZXh0dXJlU2l6ZS53aWR0aCAvIHRleHR1cmUud2lkdGgpO1xuICAgIHZhciB0cmFuc2xhdGVTY2FsZVkgPSAodGhpcy50ZXh0dXJlU2l6ZS5oZWlnaHQgLyB0ZXh0dXJlLmhlaWdodCk7XG5cbiAgICB3b3JsZFRyYW5zZm9ybS50eCAvPSB0ZXh0dXJlLndpZHRoICogdHJhbnNsYXRlU2NhbGVYO1xuICAgIHdvcmxkVHJhbnNmb3JtLnR5IC89IHRleHR1cmUud2lkdGggKiB0cmFuc2xhdGVTY2FsZVg7XG5cbiAgICB3b3JsZFRyYW5zZm9ybS5pbnZlcnQoKTtcblxuICAgIG1hcHBlZE1hdHJpeC5wcmVwZW5kKHdvcmxkVHJhbnNmb3JtKTtcblxuICAgIC8vIGFwcGx5IGludmVyc2Ugc2NhbGUuLlxuICAgIG1hcHBlZE1hdHJpeC5zY2FsZSgxICwgMS9yYXRpbyk7XG5cbiAgICBtYXBwZWRNYXRyaXguc2NhbGUoIHRyYW5zbGF0ZVNjYWxlWCAsIHRyYW5zbGF0ZVNjYWxlWSApO1xuXG4gICAgbWFwcGVkTWF0cml4LnRyYW5zbGF0ZShzcHJpdGUuYW5jaG9yLngsIHNwcml0ZS5hbmNob3IueSk7XG5cbiAgICByZXR1cm4gbWFwcGVkTWF0cml4O1xuXG4gICAgLy8gS2VlcGluZyB0aGUgb3JnaW5hbCBhcyBhIHJlbWluZGVyIHRvIG1lIG9uIGhvdyB0aGlzIHdvcmtzIVxuICAgIC8vXG4gICAgLy8gdmFyIG0gPSBuZXcgbWF0aC5NYXRyaXgoKTtcblxuICAgIC8vIC8vIHNjYWxlLi5cbiAgICAvLyB2YXIgcmF0aW8gPSB0aGlzLnRleHR1cmVTaXplLmhlaWdodCAvIHRoaXMudGV4dHVyZVNpemUud2lkdGg7XG5cbiAgICAvLyBtLnRyYW5zbGF0ZShmaWx0ZXJBcmVhLnggLyB0aGlzLnRleHR1cmVTaXplLndpZHRoLCBmaWx0ZXJBcmVhLnkgLyB0aGlzLnRleHR1cmVTaXplLmhlaWdodCk7XG5cblxuICAgIC8vIG0uc2NhbGUoMSAsIHJhdGlvKTtcblxuXG4gICAgLy8gdmFyIHRyYW5zZm9ybSA9IHd0LmNsb25lKCk7XG5cbiAgICAvLyB2YXIgdHJhbnNsYXRlU2NhbGVYID0gKHRoaXMudGV4dHVyZVNpemUud2lkdGggLyA2MjApO1xuICAgIC8vIHZhciB0cmFuc2xhdGVTY2FsZVkgPSAodGhpcy50ZXh0dXJlU2l6ZS5oZWlnaHQgLyAzODApO1xuXG4gICAgLy8gdHJhbnNmb3JtLnR4IC89IDYyMCAqIHRyYW5zbGF0ZVNjYWxlWDtcbiAgICAvLyB0cmFuc2Zvcm0udHkgLz0gNjIwICogdHJhbnNsYXRlU2NhbGVYO1xuXG4gICAgLy8gdHJhbnNmb3JtLmludmVydCgpO1xuXG4gICAgLy8gdHJhbnNmb3JtLmFwcGVuZChtKTtcblxuICAgIC8vIC8vIGFwcGx5IGludmVyc2Ugc2NhbGUuLlxuICAgIC8vIHRyYW5zZm9ybS5zY2FsZSgxICwgMS9yYXRpbyk7XG5cbiAgICAvLyB0cmFuc2Zvcm0uc2NhbGUoIHRyYW5zbGF0ZVNjYWxlWCAsIHRyYW5zbGF0ZVNjYWxlWSApO1xuXG4gICAgLy8gcmV0dXJuIHRyYW5zZm9ybTtcbn07XG5cbi8qXG4gKiBDb25zdHJhaW5zIHRoZSBmaWx0ZXIgYXJlYSB0byB0aGUgdGV4dHVyZSBzaXplXG4gKiBAcGFyYW0gZmlsdGVyQXJlYSB7UmVjdGFuZ2xlfSBUaGUgZmlsdGVyIGFyZWEgd2Ugd2FudCB0byBjYXBcbiAqL1xuRmlsdGVyTWFuYWdlci5wcm90b3R5cGUuY2FwRmlsdGVyQXJlYSA9IGZ1bmN0aW9uIChmaWx0ZXJBcmVhKVxue1xuICAgIGlmIChmaWx0ZXJBcmVhLnggPCAwKVxuICAgIHtcbiAgICAgICAgZmlsdGVyQXJlYS53aWR0aCArPSBmaWx0ZXJBcmVhLng7XG4gICAgICAgIGZpbHRlckFyZWEueCA9IDA7XG4gICAgfVxuXG4gICAgaWYgKGZpbHRlckFyZWEueSA8IDApXG4gICAge1xuICAgICAgICBmaWx0ZXJBcmVhLmhlaWdodCArPSBmaWx0ZXJBcmVhLnk7XG4gICAgICAgIGZpbHRlckFyZWEueSA9IDA7XG4gICAgfVxuXG4gICAgaWYgKCBmaWx0ZXJBcmVhLnggKyBmaWx0ZXJBcmVhLndpZHRoID4gdGhpcy50ZXh0dXJlU2l6ZS53aWR0aCApXG4gICAge1xuICAgICAgICBmaWx0ZXJBcmVhLndpZHRoID0gdGhpcy50ZXh0dXJlU2l6ZS53aWR0aCAtIGZpbHRlckFyZWEueDtcbiAgICB9XG5cbiAgICBpZiAoIGZpbHRlckFyZWEueSArIGZpbHRlckFyZWEuaGVpZ2h0ID4gdGhpcy50ZXh0dXJlU2l6ZS5oZWlnaHQgKVxuICAgIHtcbiAgICAgICAgZmlsdGVyQXJlYS5oZWlnaHQgPSB0aGlzLnRleHR1cmVTaXplLmhlaWdodCAtIGZpbHRlckFyZWEueTtcbiAgICB9XG59O1xuXG4vKlxuICogUmVzaXplcyBhbGwgdGhlIHJlbmRlciB0YXJnZXRzIGluIHRoZSBwb29sXG4gKiBAcGFyYW0gd2lkdGgge251bWJlcn0gdGhlIG5ldyB3aWR0aFxuICogQHBhcmFtIGhlaWdodCB7bnVtYmVyfSB0aGUgbmV3IGhlaWdodFxuICovXG5GaWx0ZXJNYW5hZ2VyLnByb3RvdHlwZS5yZXNpemUgPSBmdW5jdGlvbiAoIHdpZHRoLCBoZWlnaHQgKVxue1xuICAgIHRoaXMudGV4dHVyZVNpemUud2lkdGggPSB3aWR0aDtcbiAgICB0aGlzLnRleHR1cmVTaXplLmhlaWdodCA9IGhlaWdodDtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy50ZXh0dXJlUG9vbC5sZW5ndGg7IGkrKylcbiAgICB7XG4gICAgICAgIHRoaXMudGV4dHVyZVBvb2xbaV0ucmVzaXplKCB3aWR0aCwgaGVpZ2h0ICk7XG4gICAgfVxufTtcblxuLyoqXG4gKiBEZXN0cm95cyB0aGUgZmlsdGVyIGFuZCByZW1vdmVzIGl0IGZyb20gdGhlIGZpbHRlciBzdGFjay5cbiAqXG4gKi9cbkZpbHRlck1hbmFnZXIucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoKVxue1xuICAgIHRoaXMucXVhZC5kZXN0cm95KCk7XG4gICAgXG4gICAgV2ViR0xNYW5hZ2VyLnByb3RvdHlwZS5kZXN0cm95LmNhbGwodGhpcyk7XG4gICAgXG4gICAgdGhpcy5maWx0ZXJTdGFjayA9IG51bGw7XG4gICAgdGhpcy5vZmZzZXRZID0gMDtcblxuICAgIC8vIGRlc3Ryb3kgdGV4dHVyZXNcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMudGV4dHVyZVBvb2wubGVuZ3RoOyBpKyspXG4gICAge1xuICAgICAgICB0aGlzLnRleHR1cmVQb29sW2ldLmRlc3Ryb3koKTtcbiAgICB9XG5cbiAgICB0aGlzLnRleHR1cmVQb29sID0gbnVsbDtcbn07XG4iLCJ2YXIgV2ViR0xNYW5hZ2VyID0gcmVxdWlyZSgnLi9XZWJHTE1hbmFnZXInKSxcbiAgICBBbHBoYU1hc2tGaWx0ZXIgPSByZXF1aXJlKCcuLi9maWx0ZXJzL1Nwcml0ZU1hc2tGaWx0ZXInKTtcblxuLyoqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcn0gVGhlIHJlbmRlcmVyIHRoaXMgbWFuYWdlciB3b3JrcyBmb3IuXG4gKi9cbmZ1bmN0aW9uIE1hc2tNYW5hZ2VyKHJlbmRlcmVyKVxue1xuICAgIFdlYkdMTWFuYWdlci5jYWxsKHRoaXMsIHJlbmRlcmVyKTtcblxuICAgIHRoaXMuc3RlbmNpbFN0YWNrID0gW107XG4gICAgdGhpcy5yZXZlcnNlID0gdHJ1ZTtcbiAgICB0aGlzLmNvdW50ID0gMDtcblxuICAgIHRoaXMuYWxwaGFNYXNrUG9vbCA9IFtdO1xufVxuXG5NYXNrTWFuYWdlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFdlYkdMTWFuYWdlci5wcm90b3R5cGUpO1xuTWFza01hbmFnZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gTWFza01hbmFnZXI7XG5tb2R1bGUuZXhwb3J0cyA9IE1hc2tNYW5hZ2VyO1xuXG4vKipcbiAqIEFwcGxpZXMgdGhlIE1hc2sgYW5kIGFkZHMgaXQgdG8gdGhlIGN1cnJlbnQgZmlsdGVyIHN0YWNrLlxuICpcbiAqIEBwYXJhbSBncmFwaGljcyB7UElYSS5HcmFwaGljc31cbiAqIEBwYXJhbSB3ZWJHTERhdGEge2FueVtdfVxuICovXG5NYXNrTWFuYWdlci5wcm90b3R5cGUucHVzaE1hc2sgPSBmdW5jdGlvbiAodGFyZ2V0LCBtYXNrRGF0YSlcbntcbiAgICBpZiAobWFza0RhdGEudGV4dHVyZSlcbiAgICB7XG4gICAgICAgIHRoaXMucHVzaFNwcml0ZU1hc2sodGFyZ2V0LCBtYXNrRGF0YSk7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHRoaXMucHVzaFN0ZW5jaWxNYXNrKHRhcmdldCwgbWFza0RhdGEpO1xuICAgIH1cblxufTtcblxuLyoqXG4gKiBSZW1vdmVzIHRoZSBsYXN0IG1hc2sgZnJvbSB0aGUgbWFzayBzdGFjayBhbmQgZG9lc24ndCByZXR1cm4gaXQuXG4gKlxuICogQHBhcmFtIHRhcmdldCB7UElYSS5SZW5kZXJUYXJnZXR9XG4gKiBAcGFyYW0gbWFza0RhdGEge2FueVtdfVxuICovXG5NYXNrTWFuYWdlci5wcm90b3R5cGUucG9wTWFzayA9IGZ1bmN0aW9uICh0YXJnZXQsIG1hc2tEYXRhKVxue1xuICAgIGlmIChtYXNrRGF0YS50ZXh0dXJlKVxuICAgIHtcbiAgICAgICAgdGhpcy5wb3BTcHJpdGVNYXNrKHRhcmdldCwgbWFza0RhdGEpO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICB0aGlzLnBvcFN0ZW5jaWxNYXNrKHRhcmdldCwgbWFza0RhdGEpO1xuICAgIH1cbn07XG5cbi8qKlxuICogQXBwbGllcyB0aGUgTWFzayBhbmQgYWRkcyBpdCB0byB0aGUgY3VycmVudCBmaWx0ZXIgc3RhY2suXG4gKlxuICogQHBhcmFtIHRhcmdldCB7UElYSS5SZW5kZXJUYXJnZXR9XG4gKiBAcGFyYW0gbWFza0RhdGEge2FueVtdfVxuICovXG5NYXNrTWFuYWdlci5wcm90b3R5cGUucHVzaFNwcml0ZU1hc2sgPSBmdW5jdGlvbiAodGFyZ2V0LCBtYXNrRGF0YSlcbntcbiAgICB2YXIgYWxwaGFNYXNrRmlsdGVyID0gdGhpcy5hbHBoYU1hc2tQb29sLnBvcCgpO1xuXG4gICAgaWYgKCFhbHBoYU1hc2tGaWx0ZXIpXG4gICAge1xuICAgICAgICBhbHBoYU1hc2tGaWx0ZXIgPSBbbmV3IEFscGhhTWFza0ZpbHRlcihtYXNrRGF0YSldO1xuICAgIH1cblxuICAgIGFscGhhTWFza0ZpbHRlclswXS5tYXNrU3ByaXRlID0gbWFza0RhdGE7XG4gICAgdGhpcy5yZW5kZXJlci5maWx0ZXJNYW5hZ2VyLnB1c2hGaWx0ZXIodGFyZ2V0LCBhbHBoYU1hc2tGaWx0ZXIpO1xufTtcblxuLyoqXG4gKiBSZW1vdmVzIHRoZSBsYXN0IGZpbHRlciBmcm9tIHRoZSBmaWx0ZXIgc3RhY2sgYW5kIGRvZXNuJ3QgcmV0dXJuIGl0LlxuICpcbiAqL1xuTWFza01hbmFnZXIucHJvdG90eXBlLnBvcFNwcml0ZU1hc2sgPSBmdW5jdGlvbiAoKVxue1xuICAgIHZhciBmaWx0ZXJzID0gdGhpcy5yZW5kZXJlci5maWx0ZXJNYW5hZ2VyLnBvcEZpbHRlcigpO1xuXG4gICAgdGhpcy5hbHBoYU1hc2tQb29sLnB1c2goZmlsdGVycyk7XG59O1xuXG5cbi8qKlxuICogQXBwbGllcyB0aGUgTWFzayBhbmQgYWRkcyBpdCB0byB0aGUgY3VycmVudCBmaWx0ZXIgc3RhY2suXG4gKlxuICogQHBhcmFtIHRhcmdldCB7UElYSS5SZW5kZXJUYXJnZXR9XG4gKiBAcGFyYW0gbWFza0RhdGEge2FueVtdfVxuICovXG5NYXNrTWFuYWdlci5wcm90b3R5cGUucHVzaFN0ZW5jaWxNYXNrID0gZnVuY3Rpb24gKHRhcmdldCwgbWFza0RhdGEpXG57XG4gICAgdGhpcy5yZW5kZXJlci5zdGVuY2lsTWFuYWdlci5wdXNoTWFzayhtYXNrRGF0YSk7XG59O1xuXG4vKipcbiAqIFJlbW92ZXMgdGhlIGxhc3QgZmlsdGVyIGZyb20gdGhlIGZpbHRlciBzdGFjayBhbmQgZG9lc24ndCByZXR1cm4gaXQuXG4gKlxuICogQHBhcmFtIHRhcmdldCB7UElYSS5SZW5kZXJUYXJnZXR9XG4gKiBAcGFyYW0gbWFza0RhdGEge2FueVtdfVxuICovXG5NYXNrTWFuYWdlci5wcm90b3R5cGUucG9wU3RlbmNpbE1hc2sgPSBmdW5jdGlvbiAodGFyZ2V0LCBtYXNrRGF0YSlcbntcbiAgICB0aGlzLnJlbmRlcmVyLnN0ZW5jaWxNYW5hZ2VyLnBvcE1hc2sobWFza0RhdGEpO1xufTtcblxuIiwidmFyIFdlYkdMTWFuYWdlciA9IHJlcXVpcmUoJy4vV2ViR0xNYW5hZ2VyJyksXG4gICAgVGV4dHVyZVNoYWRlciA9IHJlcXVpcmUoJy4uL3NoYWRlcnMvVGV4dHVyZVNoYWRlcicpLFxuICAgIENvbXBsZXhQcmltaXRpdmVTaGFkZXIgPSByZXF1aXJlKCcuLi9zaGFkZXJzL0NvbXBsZXhQcmltaXRpdmVTaGFkZXInKSxcbiAgICBQcmltaXRpdmVTaGFkZXIgPSByZXF1aXJlKCcuLi9zaGFkZXJzL1ByaW1pdGl2ZVNoYWRlcicpLFxuICAgIHV0aWxzID0gcmVxdWlyZSgnLi4vLi4vLi4vdXRpbHMnKTtcblxuLyoqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAZXh0ZW5kcyBQSVhJLldlYkdMTWFuYWdlclxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLldlYkdMUmVuZGVyZXJ9IFRoZSByZW5kZXJlciB0aGlzIG1hbmFnZXIgd29ya3MgZm9yLlxuICovXG5mdW5jdGlvbiBTaGFkZXJNYW5hZ2VyKHJlbmRlcmVyKVxue1xuICAgIFdlYkdMTWFuYWdlci5jYWxsKHRoaXMsIHJlbmRlcmVyKTtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLm1heEF0dGlicyA9IDEwO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7YW55W119XG4gICAgICovXG4gICAgdGhpcy5hdHRyaWJTdGF0ZSA9IFtdO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7YW55W119XG4gICAgICovXG4gICAgdGhpcy50ZW1wQXR0cmliU3RhdGUgPSBbXTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5tYXhBdHRpYnM7IGkrKylcbiAgICB7XG4gICAgICAgIHRoaXMuYXR0cmliU3RhdGVbaV0gPSBmYWxzZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHthbnlbXX1cbiAgICAgKi9cbiAgICB0aGlzLnN0YWNrID0gW107XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9jdXJyZW50SWQgPSAtMTtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge1BJWEkuU2hhZGVyfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5jdXJyZW50U2hhZGVyID0gbnVsbDtcblxuLy8gICAgdGhpcy5pbml0UGx1Z2lucygpO1xufVxuXG5TaGFkZXJNYW5hZ2VyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoV2ViR0xNYW5hZ2VyLnByb3RvdHlwZSk7XG5TaGFkZXJNYW5hZ2VyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFNoYWRlck1hbmFnZXI7XG51dGlscy5wbHVnaW5UYXJnZXQubWl4aW4oU2hhZGVyTWFuYWdlcik7XG5cbm1vZHVsZS5leHBvcnRzID0gU2hhZGVyTWFuYWdlcjtcblxuLyoqXG4gKiBDYWxsZWQgd2hlbiB0aGVyZSBpcyBhIFdlYkdMIGNvbnRleHQgY2hhbmdlLlxuICpcbiAqL1xuU2hhZGVyTWFuYWdlci5wcm90b3R5cGUub25Db250ZXh0Q2hhbmdlID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLmluaXRQbHVnaW5zKCk7XG5cbiAgICB2YXIgZ2wgPSB0aGlzLnJlbmRlcmVyLmdsO1xuXG4gICAgLy8gZ2V0IHRoZSBtYXhpbXVtIG51bWJlciBvZiBhdHRyaWJ1dGUgY29ycmVjdGx5IGFzIHRoaXMgdGVuZHMgdG8gdmFyeVxuICAgIHRoaXMubWF4QXR0aWJzID0gZ2wuZ2V0UGFyYW1ldGVyKGdsLk1BWF9WRVJURVhfQVRUUklCUyk7XG5cbiAgICB0aGlzLmF0dHJpYlN0YXRlID0gW107XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMubWF4QXR0aWJzOyBpKyspXG4gICAge1xuICAgICAgICB0aGlzLmF0dHJpYlN0YXRlW2ldID0gZmFsc2U7XG4gICAgfVxuXG4gICAgLy8gVE9ETyAtIFdoeSBhcmUgdGhlc2Ugbm90IHBsdWdpbnM/IFdlIGNhbid0IGRlY291cGxlIHByaW1pdGl2ZXMgdW5sZXNzIHRoZXkgYXJlLi4uLlxuICAgIHRoaXMuZGVmYXVsdFNoYWRlciA9IG5ldyBUZXh0dXJlU2hhZGVyKHRoaXMpO1xuICAgIHRoaXMucHJpbWl0aXZlU2hhZGVyID0gbmV3IFByaW1pdGl2ZVNoYWRlcih0aGlzKTtcbiAgICB0aGlzLmNvbXBsZXhQcmltaXRpdmVTaGFkZXIgPSBuZXcgQ29tcGxleFByaW1pdGl2ZVNoYWRlcih0aGlzKTtcbn07XG5cbi8qKlxuICogVGFrZXMgdGhlIGF0dHJpYnV0ZXMgZ2l2ZW4gaW4gcGFyYW1ldGVycyBhbmQgdXBsb2FkcyB0aGVtLlxuICpcbiAqIEBwYXJhbSBhdHRyaWJzIHthbnlbXX0gYXR0cmlic1xuICovXG5TaGFkZXJNYW5hZ2VyLnByb3RvdHlwZS5zZXRBdHRyaWJzID0gZnVuY3Rpb24gKGF0dHJpYnMpXG57XG4gICAgLy8gcmVzZXQgdGVtcCBzdGF0ZVxuICAgIHZhciBpO1xuXG4gICAgZm9yIChpID0gMDsgaSA8IHRoaXMudGVtcEF0dHJpYlN0YXRlLmxlbmd0aDsgaSsrKVxuICAgIHtcbiAgICAgICAgdGhpcy50ZW1wQXR0cmliU3RhdGVbaV0gPSBmYWxzZTtcbiAgICB9XG5cbiAgICAvLyBzZXQgdGhlIG5ldyBhdHRyaWJzXG4gICAgZm9yICh2YXIgYSBpbiBhdHRyaWJzKVxuICAgIHtcbiAgICAgICAgdGhpcy50ZW1wQXR0cmliU3RhdGVbYXR0cmlic1thXV0gPSB0cnVlO1xuICAgIH1cblxuICAgIHZhciBnbCA9IHRoaXMucmVuZGVyZXIuZ2w7XG5cbiAgICBmb3IgKGkgPSAwOyBpIDwgdGhpcy5hdHRyaWJTdGF0ZS5sZW5ndGg7IGkrKylcbiAgICB7XG4gICAgICAgIGlmICh0aGlzLmF0dHJpYlN0YXRlW2ldICE9PSB0aGlzLnRlbXBBdHRyaWJTdGF0ZVtpXSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5hdHRyaWJTdGF0ZVtpXSA9IHRoaXMudGVtcEF0dHJpYlN0YXRlW2ldO1xuXG4gICAgICAgICAgICBpZiAodGhpcy5hdHRyaWJTdGF0ZVtpXSlcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBnbC5lbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBnbC5kaXNhYmxlVmVydGV4QXR0cmliQXJyYXkoaSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG59O1xuXG4vKipcbiAqIFNldHMgdGhlIGN1cnJlbnQgc2hhZGVyLlxuICpcbiAqIEBwYXJhbSBzaGFkZXIge1BJWEkuU2hhZGVyfSB0aGUgc2hhZGVyIHRvIHVwbG9hZFxuICovXG5TaGFkZXJNYW5hZ2VyLnByb3RvdHlwZS5zZXRTaGFkZXIgPSBmdW5jdGlvbiAoc2hhZGVyKVxue1xuICAgIHJldHVybjtcbiAgICBpZiAodGhpcy5fY3VycmVudElkID09PSBzaGFkZXIudWlkKVxuICAgIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHRoaXMuX2N1cnJlbnRJZCA9IHNoYWRlci51aWQ7XG5cbiAgICB0aGlzLmN1cnJlbnRTaGFkZXIgPSBzaGFkZXI7XG5cbiAgICB0aGlzLnJlbmRlcmVyLmdsLnVzZVByb2dyYW0oc2hhZGVyLnByb2dyYW0pO1xuICAgIHRoaXMuc2V0QXR0cmlicyhzaGFkZXIuYXR0cmlidXRlcyk7XG5cbiAgICByZXR1cm4gdHJ1ZTtcbn07XG5cbi8qKlxuICogRGVzdHJveXMgdGhpcyBvYmplY3QuXG4gKlxuICovXG5TaGFkZXJNYW5hZ2VyLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLnByaW1pdGl2ZVNoYWRlci5kZXN0cm95KCk7XG4gICAgdGhpcy5jb21wbGV4UHJpbWl0aXZlU2hhZGVyLmRlc3Ryb3koKTtcbiAgICBXZWJHTE1hbmFnZXIucHJvdG90eXBlLmRlc3Ryb3kuY2FsbCh0aGlzKTtcblxuICAgIHRoaXMuZGVzdHJveVBsdWdpbnMoKTtcblxuICAgIHRoaXMuYXR0cmliU3RhdGUgPSBudWxsO1xuXG4gICAgdGhpcy50ZW1wQXR0cmliU3RhdGUgPSBudWxsO1xufTtcbiIsInZhciBXZWJHTE1hbmFnZXIgPSByZXF1aXJlKCcuL1dlYkdMTWFuYWdlcicpLFxuICAgIHV0aWxzID0gcmVxdWlyZSgnLi4vLi4vLi4vdXRpbHMnKTtcblxuLyoqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcn0gVGhlIHJlbmRlcmVyIHRoaXMgbWFuYWdlciB3b3JrcyBmb3IuXG4gKi9cbmZ1bmN0aW9uIFdlYkdMTWFza01hbmFnZXIocmVuZGVyZXIpXG57XG4gICAgV2ViR0xNYW5hZ2VyLmNhbGwodGhpcywgcmVuZGVyZXIpO1xuICAgIHRoaXMuc3RlbmNpbE1hc2tTdGFjayA9IG51bGw7XG59XG5cbldlYkdMTWFza01hbmFnZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShXZWJHTE1hbmFnZXIucHJvdG90eXBlKTtcbldlYkdMTWFza01hbmFnZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gV2ViR0xNYXNrTWFuYWdlcjtcbm1vZHVsZS5leHBvcnRzID0gV2ViR0xNYXNrTWFuYWdlcjtcblxuLyoqXG4gKiBDaGFuZ2VzIHRoZSBtYXNrIHN0YWNrIHRoYXQgaXMgdXNlZCBieSB0aGlzIG1hbmFnZXIuXG4gKlxuICogQHBhcmFtIHN0ZW5jaWxNYXNrU3RhY2sge1BJWEkuU3RlbmNpbE1hc2tTdGFja30gVGhlIG1hc2sgc3RhY2tcbiAqL1xuV2ViR0xNYXNrTWFuYWdlci5wcm90b3R5cGUuc2V0TWFza1N0YWNrID0gZnVuY3Rpb24gKCBzdGVuY2lsTWFza1N0YWNrIClcbntcbiAgICB0aGlzLnN0ZW5jaWxNYXNrU3RhY2sgPSBzdGVuY2lsTWFza1N0YWNrO1xuXG4gICAgdmFyIGdsID0gdGhpcy5yZW5kZXJlci5nbDtcblxuICAgIGlmIChzdGVuY2lsTWFza1N0YWNrLnN0ZW5jaWxTdGFjay5sZW5ndGggPT09IDApXG4gICAge1xuICAgICAgICBnbC5kaXNhYmxlKGdsLlNURU5DSUxfVEVTVCk7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIGdsLmVuYWJsZShnbC5TVEVOQ0lMX1RFU1QpO1xuICAgIH1cbn07XG5cbi8qKlxuICogQXBwbGllcyB0aGUgTWFzayBhbmQgYWRkcyBpdCB0byB0aGUgY3VycmVudCBmaWx0ZXIgc3RhY2suIEBhbHZpblxuICpcbiAqIEBwYXJhbSBncmFwaGljcyB7UElYSS5HcmFwaGljc31cbiAqIEBwYXJhbSB3ZWJHTERhdGEge2FueVtdfVxuICovXG5XZWJHTE1hc2tNYW5hZ2VyLnByb3RvdHlwZS5wdXNoU3RlbmNpbCA9IGZ1bmN0aW9uIChncmFwaGljcywgd2ViR0xEYXRhKVxue1xuICAgIHRoaXMucmVuZGVyZXIuX2FjdGl2ZVJlbmRlclRhcmdldC5hdHRhY2hTdGVuY2lsQnVmZmVyKCk7XG5cbiAgICB2YXIgZ2wgPSB0aGlzLnJlbmRlcmVyLmdsLFxuICAgICAgICBzbXMgPSB0aGlzLnN0ZW5jaWxNYXNrU3RhY2s7XG5cbiAgICB0aGlzLmJpbmRHcmFwaGljcyhncmFwaGljcywgd2ViR0xEYXRhKTtcblxuICAgIGlmIChzbXMuc3RlbmNpbFN0YWNrLmxlbmd0aCA9PT0gMClcbiAgICB7XG4gICAgICAgIGdsLmVuYWJsZShnbC5TVEVOQ0lMX1RFU1QpO1xuICAgICAgICBnbC5jbGVhcihnbC5TVEVOQ0lMX0JVRkZFUl9CSVQpO1xuICAgICAgICBzbXMucmV2ZXJzZSA9IHRydWU7XG4gICAgICAgIHNtcy5jb3VudCA9IDA7XG4gICAgfVxuXG4gICAgc21zLnN0ZW5jaWxTdGFjay5wdXNoKHdlYkdMRGF0YSk7XG5cbiAgICB2YXIgbGV2ZWwgPSBzbXMuY291bnQ7XG5cbiAgICBnbC5jb2xvck1hc2soZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UpO1xuXG4gICAgZ2wuc3RlbmNpbEZ1bmMoZ2wuQUxXQVlTLDAsMHhGRik7XG4gICAgZ2wuc3RlbmNpbE9wKGdsLktFRVAsZ2wuS0VFUCxnbC5JTlZFUlQpO1xuXG4gICAgLy8gZHJhdyB0aGUgdHJpYW5nbGUgc3RyaXAhXG5cbiAgICBpZiAod2ViR0xEYXRhLm1vZGUgPT09IDEpXG4gICAge1xuICAgICAgICBnbC5kcmF3RWxlbWVudHMoZ2wuVFJJQU5HTEVfRkFOLCAgd2ViR0xEYXRhLmluZGljZXMubGVuZ3RoIC0gNCwgZ2wuVU5TSUdORURfU0hPUlQsIDAgKTtcblxuICAgICAgICBpZiAoc21zLnJldmVyc2UpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGdsLnN0ZW5jaWxGdW5jKGdsLkVRVUFMLCAweEZGIC0gbGV2ZWwsIDB4RkYpO1xuICAgICAgICAgICAgZ2wuc3RlbmNpbE9wKGdsLktFRVAsZ2wuS0VFUCxnbC5ERUNSKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgIHtcbiAgICAgICAgICAgIGdsLnN0ZW5jaWxGdW5jKGdsLkVRVUFMLGxldmVsLCAweEZGKTtcbiAgICAgICAgICAgIGdsLnN0ZW5jaWxPcChnbC5LRUVQLGdsLktFRVAsZ2wuSU5DUik7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBkcmF3IGEgcXVhZCB0byBpbmNyZW1lbnQuLlxuICAgICAgICBnbC5kcmF3RWxlbWVudHMoZ2wuVFJJQU5HTEVfRkFOLCA0LCBnbC5VTlNJR05FRF9TSE9SVCwgKCB3ZWJHTERhdGEuaW5kaWNlcy5sZW5ndGggLSA0ICkgKiAyICk7XG5cbiAgICAgICAgaWYgKHNtcy5yZXZlcnNlKVxuICAgICAgICB7XG4gICAgICAgICAgICBnbC5zdGVuY2lsRnVuYyhnbC5FUVVBTCwweEZGLShsZXZlbCsxKSwgMHhGRik7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgICBnbC5zdGVuY2lsRnVuYyhnbC5FUVVBTCxsZXZlbCsxLCAweEZGKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHNtcy5yZXZlcnNlID0gIXNtcy5yZXZlcnNlO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICBpZiAoIXNtcy5yZXZlcnNlKVxuICAgICAgICB7XG4gICAgICAgICAgICBnbC5zdGVuY2lsRnVuYyhnbC5FUVVBTCwgMHhGRiAtIGxldmVsLCAweEZGKTtcbiAgICAgICAgICAgIGdsLnN0ZW5jaWxPcChnbC5LRUVQLGdsLktFRVAsZ2wuREVDUik7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgICBnbC5zdGVuY2lsRnVuYyhnbC5FUVVBTCxsZXZlbCwgMHhGRik7XG4gICAgICAgICAgICBnbC5zdGVuY2lsT3AoZ2wuS0VFUCxnbC5LRUVQLGdsLklOQ1IpO1xuICAgICAgICB9XG5cbiAgICAgICAgZ2wuZHJhd0VsZW1lbnRzKGdsLlRSSUFOR0xFX1NUUklQLCAgd2ViR0xEYXRhLmluZGljZXMubGVuZ3RoLCBnbC5VTlNJR05FRF9TSE9SVCwgMCApO1xuXG4gICAgICAgIGlmICghc21zLnJldmVyc2UpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGdsLnN0ZW5jaWxGdW5jKGdsLkVRVUFMLDB4RkYtKGxldmVsKzEpLCAweEZGKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgIHtcbiAgICAgICAgICAgIGdsLnN0ZW5jaWxGdW5jKGdsLkVRVUFMLGxldmVsKzEsIDB4RkYpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZ2wuY29sb3JNYXNrKHRydWUsIHRydWUsIHRydWUsIHRydWUpO1xuICAgIGdsLnN0ZW5jaWxPcChnbC5LRUVQLGdsLktFRVAsZ2wuS0VFUCk7XG5cbiAgICBzbXMuY291bnQrKztcbn07XG5cbi8qKlxuICogVE9ETyB0aGlzIGRvZXMgbm90IGJlbG9uZyBoZXJlIVxuICpcbiAqIEBwYXJhbSBncmFwaGljcyB7UElYSS5HcmFwaGljc31cbiAqIEBwYXJhbSB3ZWJHTERhdGEge2FueVtdfVxuICovXG5XZWJHTE1hc2tNYW5hZ2VyLnByb3RvdHlwZS5iaW5kR3JhcGhpY3MgPSBmdW5jdGlvbiAoZ3JhcGhpY3MsIHdlYkdMRGF0YSlcbntcbiAgICAvL2lmICh0aGlzLl9jdXJyZW50R3JhcGhpY3MgPT09IGdyYXBoaWNzKXJldHVybjtcbiAgICB2YXIgZ2wgPSB0aGlzLnJlbmRlcmVyLmdsO1xuXG4gICAgIC8vIGJpbmQgdGhlIGdyYXBoaWNzIG9iamVjdC4uXG4gICAgdmFyIHNoYWRlciA9IHRoaXMucmVuZGVyZXIucGx1Z2lucy5ncmFwaGljcy5wcmltaXRpdmVTaGFkZXI7XG5cbiAgICBpZiAod2ViR0xEYXRhLm1vZGUgPT09IDEpXG4gICAge1xuICAgICAgICAvKlxuICAgICAgICBzaGFkZXIgPSB0aGlzLnJlbmRlcmVyLnNoYWRlck1hbmFnZXIuY29tcGxleFByaW1pdGl2ZVNoYWRlcjtcblxuICAgICAgICB0aGlzLnJlbmRlcmVyLnNoYWRlck1hbmFnZXIuc2V0U2hhZGVyKHNoYWRlcik7XG5cbiAgICAgICAgZ2wudW5pZm9ybU1hdHJpeDNmdihzaGFkZXIudW5pZm9ybXMudHJhbnNsYXRpb25NYXRyaXguX2xvY2F0aW9uLCBmYWxzZSwgZ3JhcGhpY3Mud29ybGRUcmFuc2Zvcm0udG9BcnJheSh0cnVlKSk7XG5cbiAgICAgICAgZ2wudW5pZm9ybU1hdHJpeDNmdihzaGFkZXIudW5pZm9ybXMucHJvamVjdGlvbk1hdHJpeC5fbG9jYXRpb24sIGZhbHNlLCB0aGlzLnJlbmRlcmVyLmN1cnJlbnRSZW5kZXJUYXJnZXQucHJvamVjdGlvbk1hdHJpeC50b0FycmF5KHRydWUpKTtcblxuICAgICAgICBnbC51bmlmb3JtM2Z2KHNoYWRlci51bmlmb3Jtcy50aW50Ll9sb2NhdGlvbiwgdXRpbHMuaGV4MnJnYihncmFwaGljcy50aW50KSk7XG5cbiAgICAgICAgZ2wudW5pZm9ybTNmdihzaGFkZXIudW5pZm9ybXMuY29sb3IuX2xvY2F0aW9uLCB3ZWJHTERhdGEuY29sb3IpO1xuXG4gICAgICAgIGdsLnVuaWZvcm0xZihzaGFkZXIudW5pZm9ybXMuYWxwaGEuX2xvY2F0aW9uLCBncmFwaGljcy53b3JsZEFscGhhKTtcblxuICAgICAgICBnbC5iaW5kQnVmZmVyKGdsLkFSUkFZX0JVRkZFUiwgd2ViR0xEYXRhLmJ1ZmZlcik7XG5cbiAgICAgICAgZ2wudmVydGV4QXR0cmliUG9pbnRlcihzaGFkZXIuYXR0cmlidXRlcy5hVmVydGV4UG9zaXRpb24sIDIsIGdsLkZMT0FULCBmYWxzZSwgNCAqIDIsIDApO1xuXG4gICAgICAgIC8vIG5vdyBkbyB0aGUgcmVzdC4uXG4gICAgICAgIC8vIHNldCB0aGUgaW5kZXggYnVmZmVyIVxuICAgICAgICBnbC5iaW5kQnVmZmVyKGdsLkVMRU1FTlRfQVJSQVlfQlVGRkVSLCB3ZWJHTERhdGEuaW5kZXhCdWZmZXIpO1xuICAgICovXG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIC8vdGhpcy5yZW5kZXJlci5zaGFkZXJNYW5hZ2VyLmFjdGl2YXRlUHJpbWl0aXZlU2hhZGVyKCk7XG4vLyAgICAgICAgc2hhZGVyID0gdGhpcy5yZW5kZXJlci5zaGFkZXJNYW5hZ2VyLnByaW1pdGl2ZVNoYWRlcjtcbiAgICAgICBcbiAgICAgICAgdGhpcy5yZW5kZXJlci5iaW5kU2hhZGVyKHNoYWRlcilcblxuICAgICAgICBzaGFkZXIudW5pZm9ybXMudHJhbnNsYXRpb25NYXRyaXggPSBncmFwaGljcy53b3JsZFRyYW5zZm9ybS50b0FycmF5KHRydWUpO1xuICAgICAgICBzaGFkZXIudW5pZm9ybXMudGludCA9IHV0aWxzLmhleDJyZ2IoZ3JhcGhpY3MudGludCk7XG4gICAgICAgIHNoYWRlci51bmlmb3Jtcy5hbHBoYSA9IGdyYXBoaWNzLndvcmxkQWxwaGE7XG5cblxuICAgICAgICBnbC5iaW5kQnVmZmVyKGdsLkFSUkFZX0JVRkZFUiwgd2ViR0xEYXRhLmJ1ZmZlcik7XG5cblxuICAgICAgICBzaGFkZXIuYXR0cmlidXRlcy5hVmVydGV4UG9zaXRpb24ucG9pbnRlcihnbC5GTE9BVCwgZmFsc2UsIDQgKiA2LCAwKTtcbiAgICAgICAgc2hhZGVyLmF0dHJpYnV0ZXMuYUNvbG9yLnBvaW50ZXIoZ2wuRkxPQVQsIGZhbHNlLCA0ICogNiwgMiAqIDQpO1xuXG4gICAgICAgIGdsLmVuYWJsZVZlcnRleEF0dHJpYkFycmF5KHNoYWRlci5hdHRyaWJ1dGVzLmFWZXJ0ZXhQb3NpdGlvbi5sb2NhdGlvbik7XG4gICAgICAgIGdsLmVuYWJsZVZlcnRleEF0dHJpYkFycmF5KHNoYWRlci5hdHRyaWJ1dGVzLmFDb2xvci5sb2NhdGlvbik7XG5cbiAgICAgICAgLy8gc2V0IHRoZSBpbmRleCBidWZmZXIhXG4gICAgICAgIGdsLmJpbmRCdWZmZXIoZ2wuRUxFTUVOVF9BUlJBWV9CVUZGRVIsIHdlYkdMRGF0YS5pbmRleEJ1ZmZlcik7XG4vLyAgICAgICAgZ2wuZHJhd0VsZW1lbnRzKGdsLlRSSUFOR0xFX1NUUklQLCAgd2ViR0xEYXRhLmluZGljZXMubGVuZ3RoLCBnbC5VTlNJR05FRF9TSE9SVCwgMCApO1xuXG5cbiAgICAgIC8qICB0aGlzLnJlbmRlcmVyLnNoYWRlck1hbmFnZXIuc2V0U2hhZGVyKHNoYWRlcik7XG5cbiAgICAgICAgZ2wudW5pZm9ybU1hdHJpeDNmdihzaGFkZXIudW5pZm9ybXMudHJhbnNsYXRpb25NYXRyaXguX2xvY2F0aW9uLCBmYWxzZSwgZ3JhcGhpY3Mud29ybGRUcmFuc2Zvcm0udG9BcnJheSh0cnVlKSk7XG5cbiAgICAgICAgZ2wudW5pZm9ybU1hdHJpeDNmdihzaGFkZXIudW5pZm9ybXMucHJvamVjdGlvbk1hdHJpeC5fbG9jYXRpb24sIGZhbHNlLCB0aGlzLnJlbmRlcmVyLmN1cnJlbnRSZW5kZXJUYXJnZXQucHJvamVjdGlvbk1hdHJpeC50b0FycmF5KHRydWUpKTtcblxuICAgICAgICBnbC51bmlmb3JtM2Z2KHNoYWRlci51bmlmb3Jtcy50aW50Ll9sb2NhdGlvbiwgdXRpbHMuaGV4MnJnYihncmFwaGljcy50aW50KSk7XG5cbiAgICAgICAgZ2wudW5pZm9ybTFmKHNoYWRlci51bmlmb3Jtcy5hbHBoYS5fbG9jYXRpb24sIGdyYXBoaWNzLndvcmxkQWxwaGEpO1xuXG4gICAgICAgIGdsLmJpbmRCdWZmZXIoZ2wuQVJSQVlfQlVGRkVSLCB3ZWJHTERhdGEuYnVmZmVyKTtcblxuICAgICAgICBnbC52ZXJ0ZXhBdHRyaWJQb2ludGVyKHNoYWRlci5hdHRyaWJ1dGVzLmFWZXJ0ZXhQb3NpdGlvbiwgMiwgZ2wuRkxPQVQsIGZhbHNlLCA0ICogNiwgMCk7XG4gICAgICAgIGdsLnZlcnRleEF0dHJpYlBvaW50ZXIoc2hhZGVyLmF0dHJpYnV0ZXMuYUNvbG9yLCA0LCBnbC5GTE9BVCwgZmFsc2UsNCAqIDYsIDIgKiA0KTtcblxuICAgICAgICAvLyBzZXQgdGhlIGluZGV4IGJ1ZmZlciFcbiAgICAgICAgZ2wuYmluZEJ1ZmZlcihnbC5FTEVNRU5UX0FSUkFZX0JVRkZFUiwgd2ViR0xEYXRhLmluZGV4QnVmZmVyKTsqL1xuICAgIH1cbn07XG5cbi8qKlxuICogVE9ETyBAYWx2aW5cbiAqIEBwYXJhbSBncmFwaGljcyB7UElYSS5HcmFwaGljc31cbiAqIEBwYXJhbSB3ZWJHTERhdGEge2FueVtdfVxuICovXG5XZWJHTE1hc2tNYW5hZ2VyLnByb3RvdHlwZS5wb3BTdGVuY2lsID0gZnVuY3Rpb24gKGdyYXBoaWNzLCB3ZWJHTERhdGEpXG57XG4gICAgdmFyIGdsID0gdGhpcy5yZW5kZXJlci5nbCxcbiAgICAgICAgc21zID0gdGhpcy5zdGVuY2lsTWFza1N0YWNrO1xuXG4gICAgc21zLnN0ZW5jaWxTdGFjay5wb3AoKTtcblxuICAgIHNtcy5jb3VudC0tO1xuXG4gICAgaWYgKHNtcy5zdGVuY2lsU3RhY2subGVuZ3RoID09PSAwKVxuICAgIHtcbiAgICAgICAgLy8gdGhlIHN0YWNrIGlzIGVtcHR5IVxuICAgICAgICBnbC5kaXNhYmxlKGdsLlNURU5DSUxfVEVTVCk7XG5cbiAgICB9XG4gICAgZWxzZVxuICAgIHtcblxuICAgICAgICB2YXIgbGV2ZWwgPSBzbXMuY291bnQ7XG5cbiAgICAgICAgdGhpcy5iaW5kR3JhcGhpY3MoZ3JhcGhpY3MsIHdlYkdMRGF0YSk7XG5cbiAgICAgICAgZ2wuY29sb3JNYXNrKGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlKTtcblxuICAgICAgICBpZiAod2ViR0xEYXRhLm1vZGUgPT09IDEpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHNtcy5yZXZlcnNlID0gIXNtcy5yZXZlcnNlO1xuXG4gICAgICAgICAgICBpZiAoc21zLnJldmVyc2UpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgZ2wuc3RlbmNpbEZ1bmMoZ2wuRVFVQUwsIDB4RkYgLSAobGV2ZWwrMSksIDB4RkYpO1xuICAgICAgICAgICAgICAgIGdsLnN0ZW5jaWxPcChnbC5LRUVQLGdsLktFRVAsZ2wuSU5DUik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgZ2wuc3RlbmNpbEZ1bmMoZ2wuRVFVQUwsbGV2ZWwrMSwgMHhGRik7XG4gICAgICAgICAgICAgICAgZ2wuc3RlbmNpbE9wKGdsLktFRVAsZ2wuS0VFUCxnbC5ERUNSKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gZHJhdyBhIHF1YWQgdG8gaW5jcmVtZW50Li5cbiAgICAgICAgICAgIGdsLmRyYXdFbGVtZW50cyhnbC5UUklBTkdMRV9GQU4sIDQsIGdsLlVOU0lHTkVEX1NIT1JULCAoIHdlYkdMRGF0YS5pbmRpY2VzLmxlbmd0aCAtIDQgKSAqIDIgKTtcblxuICAgICAgICAgICAgZ2wuc3RlbmNpbEZ1bmMoZ2wuQUxXQVlTLDAsMHhGRik7XG4gICAgICAgICAgICBnbC5zdGVuY2lsT3AoZ2wuS0VFUCxnbC5LRUVQLGdsLklOVkVSVCk7XG5cbiAgICAgICAgICAgIC8vIGRyYXcgdGhlIHRyaWFuZ2xlIHN0cmlwIVxuICAgICAgICAgICAgZ2wuZHJhd0VsZW1lbnRzKGdsLlRSSUFOR0xFX0ZBTiwgIHdlYkdMRGF0YS5pbmRpY2VzLmxlbmd0aCAtIDQsIGdsLlVOU0lHTkVEX1NIT1JULCAwICk7XG5cbiAgICAgICAgICAgIHRoaXMucmVuZGVyZXIuZHJhd0NvdW50ICs9IDI7XG5cbiAgICAgICAgICAgIGlmICghc21zLnJldmVyc2UpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgZ2wuc3RlbmNpbEZ1bmMoZ2wuRVFVQUwsMHhGRi0obGV2ZWwpLCAweEZGKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBnbC5zdGVuY2lsRnVuYyhnbC5FUVVBTCxsZXZlbCwgMHhGRik7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgIHtcbiAgICAgICAgICAvLyAgY29uc29sZS5sb2coXCI8PD4+XCIpXG4gICAgICAgICAgICBpZiAoIXNtcy5yZXZlcnNlKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGdsLnN0ZW5jaWxGdW5jKGdsLkVRVUFMLCAweEZGIC0gKGxldmVsKzEpLCAweEZGKTtcbiAgICAgICAgICAgICAgICBnbC5zdGVuY2lsT3AoZ2wuS0VFUCxnbC5LRUVQLGdsLklOQ1IpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGdsLnN0ZW5jaWxGdW5jKGdsLkVRVUFMLGxldmVsKzEsIDB4RkYpO1xuICAgICAgICAgICAgICAgIGdsLnN0ZW5jaWxPcChnbC5LRUVQLGdsLktFRVAsZ2wuREVDUik7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGdsLmRyYXdFbGVtZW50cyhnbC5UUklBTkdMRV9TVFJJUCwgIHdlYkdMRGF0YS5pbmRpY2VzLmxlbmd0aCwgZ2wuVU5TSUdORURfU0hPUlQsIDAgKTtcblxuICAgICAgICAgICAgdGhpcy5yZW5kZXJlci5kcmF3Q291bnQrKztcblxuICAgICAgICAgICAgaWYgKCFzbXMucmV2ZXJzZSlcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBnbC5zdGVuY2lsRnVuYyhnbC5FUVVBTCwweEZGLShsZXZlbCksIDB4RkYpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGdsLnN0ZW5jaWxGdW5jKGdsLkVRVUFMLGxldmVsLCAweEZGKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGdsLmNvbG9yTWFzayh0cnVlLCB0cnVlLCB0cnVlLCB0cnVlKTtcbiAgICAgICAgZ2wuc3RlbmNpbE9wKGdsLktFRVAsZ2wuS0VFUCxnbC5LRUVQKTtcblxuXG4gICAgfVxufTtcblxuLyoqXG4gKiBEZXN0cm95cyB0aGUgbWFzayBzdGFjay5cbiAqXG4gKi9cbldlYkdMTWFza01hbmFnZXIucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoKVxue1xuICAgIFdlYkdMTWFuYWdlci5wcm90b3R5cGUuZGVzdHJveS5jYWxsKHRoaXMpO1xuXG4gICAgdGhpcy5zdGVuY2lsTWFza1N0YWNrLnN0ZW5jaWxTdGFjayA9IG51bGw7XG59O1xuXG4vKipcbiAqIEFwcGxpZXMgdGhlIE1hc2sgYW5kIGFkZHMgaXQgdG8gdGhlIGN1cnJlbnQgZmlsdGVyIHN0YWNrLlxuICpcbiAqIEBwYXJhbSBtYXNrRGF0YSB7YW55W119IFRoZSBtYXNrIGRhdGEgc3RydWN0dXJlIHRvIHVzZVxuICovXG5XZWJHTE1hc2tNYW5hZ2VyLnByb3RvdHlwZS5wdXNoTWFzayA9IGZ1bmN0aW9uIChtYXNrRGF0YSlcbntcbiAgICB0aGlzLnJlbmRlcmVyLnNldE9iamVjdFJlbmRlcmVyKHRoaXMucmVuZGVyZXIucGx1Z2lucy5ncmFwaGljcyk7XG4gICAgXG4gICAgLy9UT0RPIEZJWFxuICAgIGlmIChtYXNrRGF0YS5kaXJ0eSlcbiAgICB7XG4gICAgICAgIHRoaXMucmVuZGVyZXIucGx1Z2lucy5ncmFwaGljcy51cGRhdGVHcmFwaGljcyhtYXNrRGF0YSwgdGhpcy5yZW5kZXJlci5nbCk7XG4gICAgfVxuXG4gICAgaWYgKCFtYXNrRGF0YS5fd2ViR0xbdGhpcy5yZW5kZXJlci5nbC5pZF0uZGF0YS5sZW5ndGgpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5wdXNoU3RlbmNpbChtYXNrRGF0YSwgbWFza0RhdGEuX3dlYkdMW3RoaXMucmVuZGVyZXIuZ2wuaWRdLmRhdGFbMF0pO1xufTtcblxuLyoqXG4gKiBSZW1vdmVzIHRoZSBsYXN0IGZpbHRlciBmcm9tIHRoZSBmaWx0ZXIgc3RhY2sgYW5kIGRvZXNuJ3QgcmV0dXJuIGl0LlxuICpcbiAqIEBwYXJhbSBtYXNrRGF0YSB7YW55W119XG4gKi9cbldlYkdMTWFza01hbmFnZXIucHJvdG90eXBlLnBvcE1hc2sgPSBmdW5jdGlvbiAobWFza0RhdGEpXG57XG4gICAgdGhpcy5yZW5kZXJlci5zZXRPYmplY3RSZW5kZXJlcih0aGlzLnJlbmRlcmVyLnBsdWdpbnMuZ3JhcGhpY3MpO1xuXG4gICAgdGhpcy5wb3BTdGVuY2lsKG1hc2tEYXRhLCBtYXNrRGF0YS5fd2ViR0xbdGhpcy5yZW5kZXJlci5nbC5pZF0uZGF0YVswXSk7XG59O1xuXG4iLCIvKipcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5XZWJHTFJlbmRlcmVyfSBUaGUgcmVuZGVyZXIgdGhpcyBtYW5hZ2VyIHdvcmtzIGZvci5cbiAqL1xuZnVuY3Rpb24gV2ViR0xNYW5hZ2VyKHJlbmRlcmVyKVxue1xuICAgIC8qKlxuICAgICAqIFRoZSByZW5kZXJlciB0aGlzIG1hbmFnZXIgd29ya3MgZm9yLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5XZWJHTFJlbmRlcmVyfVxuICAgICAqL1xuICAgIHRoaXMucmVuZGVyZXIgPSByZW5kZXJlcjtcblxuICAgIHRoaXMucmVuZGVyZXIub24oJ2NvbnRleHQnLCB0aGlzLm9uQ29udGV4dENoYW5nZSwgdGhpcyk7XG59XG5cbldlYkdMTWFuYWdlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBXZWJHTE1hbmFnZXI7XG5tb2R1bGUuZXhwb3J0cyA9IFdlYkdMTWFuYWdlcjtcblxuLyoqXG4gKiBHZW5lcmljIG1ldGhvZCBjYWxsZWQgd2hlbiB0aGVyZSBpcyBhIFdlYkdMIGNvbnRleHQgY2hhbmdlLlxuICpcbiAqL1xuV2ViR0xNYW5hZ2VyLnByb3RvdHlwZS5vbkNvbnRleHRDaGFuZ2UgPSBmdW5jdGlvbiAoKVxue1xuXHQvLyBkbyBzb21lIGNvZGVzIGluaXQhXG59O1xuXG4vKipcbiAqIEdlbmVyaWMgZGVzdHJveSBtZXRob2RzIHRvIGJlIG92ZXJyaWRkZW4gYnkgdGhlIHN1YmNsYXNzXG4gKlxuICovXG5XZWJHTE1hbmFnZXIucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoKVxue1xuICAgIHRoaXMucmVuZGVyZXIub2ZmKCdjb250ZXh0JywgdGhpcy5vbkNvbnRleHRDaGFuZ2UsIHRoaXMpO1xuXG4gICAgdGhpcy5yZW5kZXJlciA9IG51bGw7XG59O1xuIiwidmFyIFNoYWRlciA9IHJlcXVpcmUoJy4vU2hhZGVyJyk7XG5cbi8qKlxuICogVGhpcyBzaGFkZXIgaXMgdXNlZCB0byBkcmF3IGNvbXBsZXggcHJpbWl0aXZlIHNoYXBlcyBmb3Ige0BsaW5rIFBJWEkuR3JhcGhpY3N9LlxuICpcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqIEBleHRlbmRzIFBJWEkuU2hhZGVyXG4gKiBAcGFyYW0gc2hhZGVyTWFuYWdlciB7UElYSS5TaGFkZXJNYW5hZ2VyfSBUaGUgd2ViZ2wgc2hhZGVyIG1hbmFnZXIgdGhpcyBzaGFkZXIgd29ya3MgZm9yLlxuICovXG5mdW5jdGlvbiBDb21wbGV4UHJpbWl0aXZlU2hhZGVyKHNoYWRlck1hbmFnZXIpXG57XG4gICAgU2hhZGVyLmNhbGwodGhpcyxcbiAgICAgICAgc2hhZGVyTWFuYWdlcixcbiAgICAgICAgLy8gdmVydGV4IHNoYWRlclxuICAgICAgICBbXG4gICAgICAgICAgICAnYXR0cmlidXRlIHZlYzIgYVZlcnRleFBvc2l0aW9uOycsXG5cbiAgICAgICAgICAgICd1bmlmb3JtIG1hdDMgdHJhbnNsYXRpb25NYXRyaXg7JyxcbiAgICAgICAgICAgICd1bmlmb3JtIG1hdDMgcHJvamVjdGlvbk1hdHJpeDsnLFxuXG4gICAgICAgICAgICAndW5pZm9ybSB2ZWMzIHRpbnQ7JyxcbiAgICAgICAgICAgICd1bmlmb3JtIGZsb2F0IGFscGhhOycsXG4gICAgICAgICAgICAndW5pZm9ybSB2ZWMzIGNvbG9yOycsXG5cbiAgICAgICAgICAgICd2YXJ5aW5nIHZlYzQgdkNvbG9yOycsXG5cbiAgICAgICAgICAgICd2b2lkIG1haW4odm9pZCl7JyxcbiAgICAgICAgICAgICcgICBnbF9Qb3NpdGlvbiA9IHZlYzQoKHByb2plY3Rpb25NYXRyaXggKiB0cmFuc2xhdGlvbk1hdHJpeCAqIHZlYzMoYVZlcnRleFBvc2l0aW9uLCAxLjApKS54eSwgMC4wLCAxLjApOycsXG4gICAgICAgICAgICAnICAgdkNvbG9yID0gdmVjNChjb2xvciAqIGFscGhhICogdGludCwgYWxwaGEpOycsLy9cIiAqIHZlYzQodGludCAqIGFscGhhLCBhbHBoYSk7JyxcbiAgICAgICAgICAgICd9J1xuICAgICAgICBdLmpvaW4oJ1xcbicpLFxuICAgICAgICAvLyBmcmFnbWVudCBzaGFkZXJcbiAgICAgICAgW1xuICAgICAgICAgICAgJ3ByZWNpc2lvbiBtZWRpdW1wIGZsb2F0OycsXG5cbiAgICAgICAgICAgICd2YXJ5aW5nIHZlYzQgdkNvbG9yOycsXG5cbiAgICAgICAgICAgICd2b2lkIG1haW4odm9pZCl7JyxcbiAgICAgICAgICAgICcgICBnbF9GcmFnQ29sb3IgPSB2Q29sb3I7JyxcbiAgICAgICAgICAgICd9J1xuICAgICAgICBdLmpvaW4oJ1xcbicpLFxuICAgICAgICAvLyBjdXN0b20gdW5pZm9ybXNcbiAgICAgICAge1xuICAgICAgICAgICAgdGludDogICB7IHR5cGU6ICczZicsIHZhbHVlOiBbMCwgMCwgMF0gfSxcbiAgICAgICAgICAgIGFscGhhOiAgeyB0eXBlOiAnMWYnLCB2YWx1ZTogMCB9LFxuICAgICAgICAgICAgY29sb3I6ICB7IHR5cGU6ICczZicsIHZhbHVlOiBbMCwwLDBdIH0sXG4gICAgICAgICAgICB0cmFuc2xhdGlvbk1hdHJpeDogeyB0eXBlOiAnbWF0MycsIHZhbHVlOiBuZXcgRmxvYXQzMkFycmF5KDkpIH0sXG4gICAgICAgICAgICBwcm9qZWN0aW9uTWF0cml4OiB7IHR5cGU6ICdtYXQzJywgdmFsdWU6IG5ldyBGbG9hdDMyQXJyYXkoOSkgfVxuICAgICAgICB9LFxuICAgICAgICAvLyBhdHRyaWJ1dGVzXG4gICAgICAgIHtcbiAgICAgICAgICAgIGFWZXJ0ZXhQb3NpdGlvbjowXG4gICAgICAgIH1cbiAgICApO1xufVxuXG5Db21wbGV4UHJpbWl0aXZlU2hhZGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoU2hhZGVyLnByb3RvdHlwZSk7XG5Db21wbGV4UHJpbWl0aXZlU2hhZGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IENvbXBsZXhQcmltaXRpdmVTaGFkZXI7XG5tb2R1bGUuZXhwb3J0cyA9IENvbXBsZXhQcmltaXRpdmVTaGFkZXI7XG4iLCJ2YXIgU2hhZGVyID0gcmVxdWlyZSgnLi9TaGFkZXInKTtcblxuLyoqXG4gKiBUaGlzIHNoYWRlciBpcyB1c2VkIHRvIGRyYXcgc2ltcGxlIHByaW1pdGl2ZSBzaGFwZXMgZm9yIHtAbGluayBQSVhJLkdyYXBoaWNzfS5cbiAqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAZXh0ZW5kcyBQSVhJLlNoYWRlclxuICogQHBhcmFtIHNoYWRlck1hbmFnZXIge1NoYWRlck1hbmFnZXJ9IFRoZSB3ZWJnbCBzaGFkZXIgbWFuYWdlciB0aGlzIHNoYWRlciB3b3JrcyBmb3IuXG4gKi9cbmZ1bmN0aW9uIFByaW1pdGl2ZVNoYWRlcihzaGFkZXJNYW5hZ2VyKVxue1xuICAgIFNoYWRlci5jYWxsKHRoaXMsXG4gICAgICAgIHNoYWRlck1hbmFnZXIsXG4gICAgICAgIC8vIHZlcnRleCBzaGFkZXJcbiAgICAgICAgW1xuICAgICAgICAgICAgJ2F0dHJpYnV0ZSB2ZWMyIGFWZXJ0ZXhQb3NpdGlvbjsnLFxuICAgICAgICAgICAgJ2F0dHJpYnV0ZSB2ZWM0IGFDb2xvcjsnLFxuXG4gICAgICAgICAgICAndW5pZm9ybSBtYXQzIHRyYW5zbGF0aW9uTWF0cml4OycsXG4gICAgICAgICAgICAndW5pZm9ybSBtYXQzIHByb2plY3Rpb25NYXRyaXg7JyxcblxuICAgICAgICAgICAgJ3VuaWZvcm0gZmxvYXQgYWxwaGE7JyxcbiAgICAgICAgICAgICd1bmlmb3JtIGZsb2F0IGZsaXBZOycsXG4gICAgICAgICAgICAndW5pZm9ybSB2ZWMzIHRpbnQ7JyxcblxuICAgICAgICAgICAgJ3ZhcnlpbmcgdmVjNCB2Q29sb3I7JyxcblxuICAgICAgICAgICAgJ3ZvaWQgbWFpbih2b2lkKXsnLFxuICAgICAgICAgICAgJyAgIGdsX1Bvc2l0aW9uID0gdmVjNCgocHJvamVjdGlvbk1hdHJpeCAqIHRyYW5zbGF0aW9uTWF0cml4ICogdmVjMyhhVmVydGV4UG9zaXRpb24sIDEuMCkpLnh5LCAwLjAsIDEuMCk7JyxcbiAgICAgICAgICAgICcgICB2Q29sb3IgPSBhQ29sb3IgKiB2ZWM0KHRpbnQgKiBhbHBoYSwgYWxwaGEpOycsXG4gICAgICAgICAgICAnfSdcbiAgICAgICAgXS5qb2luKCdcXG4nKSxcbiAgICAgICAgLy8gZnJhZ21lbnQgc2hhZGVyXG4gICAgICAgIFtcbiAgICAgICAgICAgICdwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDsnLFxuXG4gICAgICAgICAgICAndmFyeWluZyB2ZWM0IHZDb2xvcjsnLFxuXG4gICAgICAgICAgICAndm9pZCBtYWluKHZvaWQpeycsXG4gICAgICAgICAgICAnICAgZ2xfRnJhZ0NvbG9yID0gdkNvbG9yOycsXG4gICAgICAgICAgICAnfSdcbiAgICAgICAgXS5qb2luKCdcXG4nKSxcbiAgICAgICAgLy8gY3VzdG9tIHVuaWZvcm1zXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRpbnQ6ICAgeyB0eXBlOiAnM2YnLCB2YWx1ZTogWzAsIDAsIDBdIH0sXG4gICAgICAgICAgICBhbHBoYTogIHsgdHlwZTogJzFmJywgdmFsdWU6IDAgfSxcbiAgICAgICAgICAgIHRyYW5zbGF0aW9uTWF0cml4OiB7IHR5cGU6ICdtYXQzJywgdmFsdWU6IG5ldyBGbG9hdDMyQXJyYXkoOSkgfSxcbiAgICAgICAgICAgIHByb2plY3Rpb25NYXRyaXg6IHsgdHlwZTogJ21hdDMnLCB2YWx1ZTogbmV3IEZsb2F0MzJBcnJheSg5KSB9XG4gICAgICAgIH0sXG4gICAgICAgIC8vIGN1c3RvbSBhdHRyaWJ1dGVzXG4gICAgICAgIHtcbiAgICAgICAgICAgIGFWZXJ0ZXhQb3NpdGlvbjowLFxuICAgICAgICAgICAgYUNvbG9yOjBcbiAgICAgICAgfVxuICAgICk7XG59XG5cblByaW1pdGl2ZVNoYWRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFNoYWRlci5wcm90b3R5cGUpO1xuUHJpbWl0aXZlU2hhZGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFByaW1pdGl2ZVNoYWRlcjtcbm1vZHVsZS5leHBvcnRzID0gUHJpbWl0aXZlU2hhZGVyO1xuIiwiLypnbG9iYWwgY29uc29sZSAqL1xudmFyIHV0aWxzID0gcmVxdWlyZSgnLi4vLi4vLi4vdXRpbHMnKTtcblxuLyoqXG4gKiBCYXNlIHNoYWRlciBjbGFzcyBmb3IgUElYSSBtYW5hZ2VkIHNoYWRlcnMuXG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIHNoYWRlck1hbmFnZXIge1BJWEkuU2hhZGVyTWFuYWdlcn0gVGhlIHdlYmdsIHNoYWRlciBtYW5hZ2VyIHRoaXMgc2hhZGVyIHdvcmtzIGZvci5cbiAqIEBwYXJhbSBbdmVydGV4U3JjXSB7c3RyaW5nfSBUaGUgc291cmNlIG9mIHRoZSB2ZXJ0ZXggc2hhZGVyLlxuICogQHBhcmFtIFtmcmFnbWVudFNyY10ge3N0cmluZ30gVGhlIHNvdXJjZSBvZiB0aGUgZnJhZ21lbnQgc2hhZGVyLlxuICogQHBhcmFtIFt1bmlmb3Jtc10ge29iamVjdH0gVW5pZm9ybXMgZm9yIHRoaXMgc2hhZGVyLlxuICogQHBhcmFtIFthdHRyaWJ1dGVzXSB7b2JqZWN0fSBBdHRyaWJ1dGVzIGZvciB0aGlzIHNoYWRlci5cbiAqL1xuZnVuY3Rpb24gU2hhZGVyKHNoYWRlck1hbmFnZXIsIHZlcnRleFNyYywgZnJhZ21lbnRTcmMsIHVuaWZvcm1zLCBhdHRyaWJ1dGVzKVxue1xuICAgIGlmICghdmVydGV4U3JjIHx8ICFmcmFnbWVudFNyYylcbiAgICB7XG4gICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1BpeGkuanMgRXJyb3IuIFNoYWRlciByZXF1aXJlcyB2ZXJ0ZXhTcmMgYW5kIGZyYWdtZW50U3JjJyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQSB1bmlxdWUgaWRcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQHJlYWRvbmx5XG4gICAgICovXG4gICAgdGhpcy51aWQgPSB1dGlscy51aWQoKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBjdXJyZW50IFdlYkdMIGRyYXdpbmcgY29udGV4dFxuICAgICAqIEBtZW1iZXIge1dlYkdMUmVuZGVyaW5nQ29udGV4dH1cbiAgICAgKiBAcmVhZG9ubHlcbiAgICAgKi9cbiAgICB0aGlzLmdsID0gc2hhZGVyTWFuYWdlci5yZW5kZXJlci5nbDtcblxuICAgIC8vVE9ETyBtYXliZSB3ZSBzaG91bGQgcGFzcyByZW5kZXJlciByYXRoZXIgdGhhbiBzaGFkZXIgbWFuZ2VyPz8gZm9vZCBmb3IgdGhvdWdodC4uXG4gICAgdGhpcy5zaGFkZXJNYW5hZ2VyID0gc2hhZGVyTWFuYWdlcjtcblxuICAgIC8qKlxuICAgICAqIFRoZSBXZWJHTCBwcm9ncmFtLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7V2ViR0xQcm9ncmFtfVxuICAgICAqIEByZWFkb25seVxuICAgICAqL1xuICAgIHRoaXMucHJvZ3JhbSA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgdW5pZm9ybXMgYXMgYW4gb2JqZWN0XG4gICAgICogQG1lbWJlciB7b2JqZWN0fVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy51bmlmb3JtcyA9IHVuaWZvcm1zIHx8IHt9O1xuXG4gICAgLyoqXG4gICAgICogVGhlIGF0dHJpYnV0ZXMgYXMgYW4gb2JqZWN0XG4gICAgICogQG1lbWJlciB7b2JqZWN0fVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5hdHRyaWJ1dGVzID0gYXR0cmlidXRlcyB8fCB7fTtcblxuICAgIC8qKlxuICAgICAqIEludGVybmFsIHRleHR1cmUgY291bnRlclxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMudGV4dHVyZUNvdW50ID0gMTtcblxuICAgIC8qKlxuICAgICAqIFRoZSB2ZXJ0ZXggc2hhZGVyIGFzIGFuIGFycmF5IG9mIHN0cmluZ3NcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge3N0cmluZ31cbiAgICAgKi9cbiAgICB0aGlzLnZlcnRleFNyYyA9IHZlcnRleFNyYztcblxuICAgIC8qKlxuICAgICAqIFRoZSBmcmFnbWVudCBzaGFkZXIgYXMgYW4gYXJyYXkgb2Ygc3RyaW5nc1xuICAgICAqXG4gICAgICogQG1lbWJlciB7c3RyaW5nfVxuICAgICAqL1xuICAgIHRoaXMuZnJhZ21lbnRTcmMgPSBmcmFnbWVudFNyYztcblxuICAgIHRoaXMuaW5pdCgpO1xufVxuXG5TaGFkZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gU2hhZGVyO1xubW9kdWxlLmV4cG9ydHMgPSBTaGFkZXI7XG5cbi8qKlxuICogQ3JlYXRlcyB0aGUgc2hhZGVyIGFuZCB1c2VzIGl0XG4gKlxuICovXG5TaGFkZXIucHJvdG90eXBlLmluaXQgPSBmdW5jdGlvbiAoKVxue1xuICAgIHRoaXMuY29tcGlsZSgpO1xuXG4gICAgdGhpcy5nbC51c2VQcm9ncmFtKHRoaXMucHJvZ3JhbSk7XG5cbiAgICB0aGlzLmNhY2hlVW5pZm9ybUxvY2F0aW9ucyhPYmplY3Qua2V5cyh0aGlzLnVuaWZvcm1zKSk7XG4gICAgdGhpcy5jYWNoZUF0dHJpYnV0ZUxvY2F0aW9ucyhPYmplY3Qua2V5cyh0aGlzLmF0dHJpYnV0ZXMpKTtcbn07XG5cbi8qKlxuICogQ2FjaGVzIHRoZSBsb2NhdGlvbnMgb2YgdGhlIHVuaWZvcm0gZm9yIHJldXNlLlxuICpcbiAqIEBwYXJhbSBrZXlzIHtzdHJpbmd9IHRoZSB1bmlmb3JtcyB0byBjYWNoZVxuICovXG5TaGFkZXIucHJvdG90eXBlLmNhY2hlVW5pZm9ybUxvY2F0aW9ucyA9IGZ1bmN0aW9uIChrZXlzKVxue1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7ICsraSlcbiAgICB7XG4gICAgICAgIHRoaXMudW5pZm9ybXNba2V5c1tpXV0uX2xvY2F0aW9uID0gdGhpcy5nbC5nZXRVbmlmb3JtTG9jYXRpb24odGhpcy5wcm9ncmFtLCBrZXlzW2ldKTtcbiAgICB9XG59O1xuXG4vKipcbiAqIENhY2hlcyB0aGUgbG9jYXRpb25zIG9mIHRoZSBhdHRyaWJ1dGUgZm9yIHJldXNlLlxuICpcbiAqIEBwYXJhbSBrZXlzIHtzdHJpbmd9IHRoZSBhdHRyaWJ1dGVzIHRvIGNhY2hlXG4gKi9cblNoYWRlci5wcm90b3R5cGUuY2FjaGVBdHRyaWJ1dGVMb2NhdGlvbnMgPSBmdW5jdGlvbiAoa2V5cylcbntcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyArK2kpXG4gICAge1xuICAgICAgICB0aGlzLmF0dHJpYnV0ZXNba2V5c1tpXV0gPSB0aGlzLmdsLmdldEF0dHJpYkxvY2F0aW9uKHRoaXMucHJvZ3JhbSwga2V5c1tpXSk7XG4gICAgfVxuXG4gICAgLy8gVE9ETzogQ2hlY2sgaWYgdGhpcyBpcyBuZWVkZWQgYW55bW9yZS4uLlxuXG4gICAgLy8gQmVnaW4gd29yc3QgaGFjayBldmEgLy9cblxuICAgIC8vIFdIWT8/PyBPTkxZIG9uIG15IGNocm9tZSBwaXhlbCB0aGUgbGluZSBhYm92ZSByZXR1cm5zIC0xIHdoZW4gdXNpbmcgZmlsdGVycz9cbiAgICAvLyBtYXliZSBpdHMgc29tZXRoaW5nIHRvIGRvIHdpdGggdGhlIGN1cnJlbnQgc3RhdGUgb2YgdGhlIGdsIGNvbnRleHQuXG4gICAgLy8gSSdtIGNvbnZpbmNlZCB0aGlzIGlzIGEgYnVnIGluIHRoZSBjaHJvbWUgYnJvd3NlciBhcyB0aGVyZSBpcyBOTyByZWFzb24gd2h5IHRoaXMgc2hvdWxkIGJlIHJldHVybmluZyAtMSBlc3BlY2lhbGx5IGFzIGl0IG9ubHkgbWFuaWZlc3RzIG9uIG15IGNocm9tZSBwaXhlbFxuICAgIC8vIElmIHRoZXJlcyBhbnkgd2ViR0wgcGVvcGxlIHRoYXQga25vdyB3aHkgY291bGQgaGFwcGVuIHBsZWFzZSBoZWxwIDopXG4gICAgLy8gaWYgKHRoaXMuYXR0cmlidXRlcy5hQ29sb3IgPT09IC0xKXtcbiAgICAvLyAgICAgdGhpcy5hdHRyaWJ1dGVzLmFDb2xvciA9IDI7XG4gICAgLy8gfVxuXG4gICAgLy8gRW5kIHdvcnN0IGhhY2sgZXZhIC8vXG59O1xuXG4vKipcbiAqIEF0dGFjaGVzIHRoZSBzaGFkZXJzIGFuZCBjcmVhdGVzIHRoZSBwcm9ncmFtLlxuICpcbiAqIEByZXR1cm4ge1dlYkdMUHJvZ3JhbX1cbiAqL1xuU2hhZGVyLnByb3RvdHlwZS5jb21waWxlID0gZnVuY3Rpb24gKClcbntcbiAgICB2YXIgZ2wgPSB0aGlzLmdsO1xuXG4gICAgdmFyIGdsVmVydFNoYWRlciA9IHRoaXMuX2dsQ29tcGlsZShnbC5WRVJURVhfU0hBREVSLCB0aGlzLnZlcnRleFNyYyk7XG4gICAgdmFyIGdsRnJhZ1NoYWRlciA9IHRoaXMuX2dsQ29tcGlsZShnbC5GUkFHTUVOVF9TSEFERVIsIHRoaXMuZnJhZ21lbnRTcmMpO1xuXG4gICAgdmFyIHByb2dyYW0gPSBnbC5jcmVhdGVQcm9ncmFtKCk7XG5cbiAgICBnbC5hdHRhY2hTaGFkZXIocHJvZ3JhbSwgZ2xWZXJ0U2hhZGVyKTtcbiAgICBnbC5hdHRhY2hTaGFkZXIocHJvZ3JhbSwgZ2xGcmFnU2hhZGVyKTtcbiAgICBnbC5saW5rUHJvZ3JhbShwcm9ncmFtKTtcblxuICAgIC8vIGlmIGxpbmtpbmcgZmFpbHMsIHRoZW4gbG9nIGFuZCBjbGVhbnVwXG4gICAgaWYgKCFnbC5nZXRQcm9ncmFtUGFyYW1ldGVyKHByb2dyYW0sIGdsLkxJTktfU1RBVFVTKSlcbiAgICB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ1BpeGkuanMgRXJyb3I6IENvdWxkIG5vdCBpbml0aWFsaXplIHNoYWRlci4nKTtcbiAgICAgICAgY29uc29sZS5lcnJvcignZ2wuVkFMSURBVEVfU1RBVFVTJywgZ2wuZ2V0UHJvZ3JhbVBhcmFtZXRlcihwcm9ncmFtLCBnbC5WQUxJREFURV9TVEFUVVMpKTtcbiAgICAgICAgY29uc29sZS5lcnJvcignZ2wuZ2V0RXJyb3IoKScsIGdsLmdldEVycm9yKCkpO1xuXG4gICAgICAgIC8vIGlmIHRoZXJlIGlzIGEgcHJvZ3JhbSBpbmZvIGxvZywgbG9nIGl0XG4gICAgICAgIGlmIChnbC5nZXRQcm9ncmFtSW5mb0xvZyhwcm9ncmFtKSAhPT0gJycpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignUGl4aS5qcyBXYXJuaW5nOiBnbC5nZXRQcm9ncmFtSW5mb0xvZygpJywgZ2wuZ2V0UHJvZ3JhbUluZm9Mb2cocHJvZ3JhbSkpO1xuICAgICAgICB9XG5cbiAgICAgICAgZ2wuZGVsZXRlUHJvZ3JhbShwcm9ncmFtKTtcbiAgICAgICAgcHJvZ3JhbSA9IG51bGw7XG4gICAgfVxuXG4gICAgLy8gY2xlYW4gdXAgc29tZSBzaGFkZXJzXG4gICAgZ2wuZGVsZXRlU2hhZGVyKGdsVmVydFNoYWRlcik7XG4gICAgZ2wuZGVsZXRlU2hhZGVyKGdsRnJhZ1NoYWRlcik7XG5cbiAgICByZXR1cm4gKHRoaXMucHJvZ3JhbSA9IHByb2dyYW0pO1xufTtcblxuLyoqXG4qIEFkZHMgYSBuZXcgdW5pZm9ybVxuKlxuKiBAcGFyYW0gdW5pZm9ybSB7b2JqZWN0fSB0aGUgbmV3IHVuaWZvcm0gdG8gYXR0YWNoXG4qL1xuU2hhZGVyLnByb3RvdHlwZS5zeW5jVW5pZm9ybSA9IGZ1bmN0aW9uICh1bmlmb3JtKVxue1xuICAgIHZhciBsb2NhdGlvbiA9IHVuaWZvcm0uX2xvY2F0aW9uLFxuICAgICAgICB2YWx1ZSA9IHVuaWZvcm0udmFsdWUsXG4gICAgICAgIGdsID0gdGhpcy5nbCxcbiAgICAgICAgaSwgaWw7XG5cbiAgICBzd2l0Y2ggKHVuaWZvcm0udHlwZSlcbiAgICB7XG4gICAgICAgIGNhc2UgJ2InOlxuICAgICAgICBjYXNlICdib29sJzpcbiAgICAgICAgY2FzZSAnYm9vbGVhbic6XG4gICAgICAgICAgICBnbC51bmlmb3JtMWkobG9jYXRpb24sIHZhbHVlID8gMSA6IDApO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLy8gc2luZ2xlIGludCB2YWx1ZVxuICAgICAgICBjYXNlICdpJzpcbiAgICAgICAgY2FzZSAnMWknOlxuICAgICAgICAgICAgZ2wudW5pZm9ybTFpKGxvY2F0aW9uLCB2YWx1ZSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAvLyBzaW5nbGUgZmxvYXQgdmFsdWVcbiAgICAgICAgY2FzZSAnZic6XG4gICAgICAgIGNhc2UgJzFmJzpcbiAgICAgICAgICAgIGdsLnVuaWZvcm0xZihsb2NhdGlvbiwgdmFsdWUpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLy8gRmxvYXQzMkFycmF5KDIpIG9yIEpTIEFycnJheVxuICAgICAgICBjYXNlICcyZic6XG4gICAgICAgICAgICBnbC51bmlmb3JtMmYobG9jYXRpb24sIHZhbHVlWzBdLCB2YWx1ZVsxXSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAvLyBGbG9hdDMyQXJyYXkoMykgb3IgSlMgQXJycmF5XG4gICAgICAgIGNhc2UgJzNmJzpcbiAgICAgICAgICAgIGdsLnVuaWZvcm0zZihsb2NhdGlvbiwgdmFsdWVbMF0sIHZhbHVlWzFdLCB2YWx1ZVsyXSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAvLyBGbG9hdDMyQXJyYXkoNCkgb3IgSlMgQXJycmF5XG4gICAgICAgIGNhc2UgJzRmJzpcbiAgICAgICAgICAgIGdsLnVuaWZvcm00Zihsb2NhdGlvbiwgdmFsdWVbMF0sIHZhbHVlWzFdLCB2YWx1ZVsyXSwgdmFsdWVbM10pO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLy8gYSAyRCBQb2ludCBvYmplY3RcbiAgICAgICAgY2FzZSAndjInOlxuICAgICAgICAgICAgZ2wudW5pZm9ybTJmKGxvY2F0aW9uLCB2YWx1ZS54LCB2YWx1ZS55KTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIC8vIGEgM0QgUG9pbnQgb2JqZWN0XG4gICAgICAgIGNhc2UgJ3YzJzpcbiAgICAgICAgICAgIGdsLnVuaWZvcm0zZihsb2NhdGlvbiwgdmFsdWUueCwgdmFsdWUueSwgdmFsdWUueik7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAvLyBhIDREIFBvaW50IG9iamVjdFxuICAgICAgICBjYXNlICd2NCc6XG4gICAgICAgICAgICBnbC51bmlmb3JtNGYobG9jYXRpb24sIHZhbHVlLngsIHZhbHVlLnksIHZhbHVlLnosIHZhbHVlLncpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLy8gSW50MzJBcnJheSBvciBKUyBBcnJheVxuICAgICAgICBjYXNlICcxaXYnOlxuICAgICAgICAgICAgZ2wudW5pZm9ybTFpdihsb2NhdGlvbiwgdmFsdWUpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLy8gSW50MzJBcnJheSBvciBKUyBBcnJheVxuICAgICAgICBjYXNlICcyaXYnOlxuICAgICAgICAgICAgZ2wudW5pZm9ybTJpdihsb2NhdGlvbiwgdmFsdWUpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLy8gSW50MzJBcnJheSBvciBKUyBBcnJheVxuICAgICAgICBjYXNlICczaXYnOlxuICAgICAgICAgICAgZ2wudW5pZm9ybTNpdihsb2NhdGlvbiwgdmFsdWUpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLy8gSW50MzJBcnJheSBvciBKUyBBcnJheVxuICAgICAgICBjYXNlICc0aXYnOlxuICAgICAgICAgICAgZ2wudW5pZm9ybTRpdihsb2NhdGlvbiwgdmFsdWUpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLy8gRmxvYXQzMkFycmF5IG9yIEpTIEFycmF5XG4gICAgICAgIGNhc2UgJzFmdic6XG4gICAgICAgICAgICBnbC51bmlmb3JtMWZ2KGxvY2F0aW9uLCB2YWx1ZSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAvLyBGbG9hdDMyQXJyYXkgb3IgSlMgQXJyYXlcbiAgICAgICAgY2FzZSAnMmZ2JzpcbiAgICAgICAgICAgIGdsLnVuaWZvcm0yZnYobG9jYXRpb24sIHZhbHVlKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIC8vIEZsb2F0MzJBcnJheSBvciBKUyBBcnJheVxuICAgICAgICBjYXNlICczZnYnOlxuICAgICAgICAgICAgZ2wudW5pZm9ybTNmdihsb2NhdGlvbiwgdmFsdWUpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLy8gRmxvYXQzMkFycmF5IG9yIEpTIEFycmF5XG4gICAgICAgIGNhc2UgJzRmdic6XG4gICAgICAgICAgICBnbC51bmlmb3JtNGZ2KGxvY2F0aW9uLCB2YWx1ZSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAvLyBGbG9hdDMyQXJyYXkgb3IgSlMgQXJyYXlcbiAgICAgICAgY2FzZSAnbTInOlxuICAgICAgICBjYXNlICdtYXQyJzpcbiAgICAgICAgY2FzZSAnTWF0cml4MmZ2JzpcbiAgICAgICAgICAgIGdsLnVuaWZvcm1NYXRyaXgyZnYobG9jYXRpb24sIHVuaWZvcm0udHJhbnNwb3NlLCB2YWx1ZSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAvLyBGbG9hdDMyQXJyYXkgb3IgSlMgQXJyYXlcbiAgICAgICAgY2FzZSAnbTMnOlxuICAgICAgICBjYXNlICdtYXQzJzpcbiAgICAgICAgY2FzZSAnTWF0cml4M2Z2JzpcblxuICAgICAgICAgICAgZ2wudW5pZm9ybU1hdHJpeDNmdihsb2NhdGlvbiwgdW5pZm9ybS50cmFuc3Bvc2UsIHZhbHVlKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIC8vIEZsb2F0MzJBcnJheSBvciBKUyBBcnJheVxuICAgICAgICBjYXNlICdtNCc6XG4gICAgICAgIGNhc2UgJ21hdDQnOlxuICAgICAgICBjYXNlICdNYXRyaXg0ZnYnOlxuICAgICAgICAgICAgZ2wudW5pZm9ybU1hdHJpeDRmdihsb2NhdGlvbiwgdW5pZm9ybS50cmFuc3Bvc2UsIHZhbHVlKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIC8vIGEgQ29sb3IgVmFsdWVcbiAgICAgICAgY2FzZSAnYyc6XG4gICAgICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJylcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB2YWx1ZSA9IHV0aWxzLmhleDJyZ2IodmFsdWUpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBnbC51bmlmb3JtM2YobG9jYXRpb24sIHZhbHVlWzBdLCB2YWx1ZVsxXSwgdmFsdWVbMl0pO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLy8gZmxhdCBhcnJheSBvZiBpbnRlZ2VycyAoSlMgb3IgdHlwZWQgYXJyYXkpXG4gICAgICAgIGNhc2UgJ2l2MSc6XG4gICAgICAgICAgICBnbC51bmlmb3JtMWl2KGxvY2F0aW9uLCB2YWx1ZSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAvLyBmbGF0IGFycmF5IG9mIGludGVnZXJzIHdpdGggMyB4IE4gc2l6ZSAoSlMgb3IgdHlwZWQgYXJyYXkpXG4gICAgICAgIGNhc2UgJ2l2JzpcbiAgICAgICAgICAgIGdsLnVuaWZvcm0zaXYobG9jYXRpb24sIHZhbHVlKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIC8vIGZsYXQgYXJyYXkgb2YgZmxvYXRzIChKUyBvciB0eXBlZCBhcnJheSlcbiAgICAgICAgY2FzZSAnZnYxJzpcbiAgICAgICAgICAgIGdsLnVuaWZvcm0xZnYobG9jYXRpb24sIHZhbHVlKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIC8vIGZsYXQgYXJyYXkgb2YgZmxvYXRzIHdpdGggMyB4IE4gc2l6ZSAoSlMgb3IgdHlwZWQgYXJyYXkpXG4gICAgICAgIGNhc2UgJ2Z2JzpcbiAgICAgICAgICAgIGdsLnVuaWZvcm0zZnYobG9jYXRpb24sIHZhbHVlKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIC8vIGFycmF5IG9mIDJEIFBvaW50IG9iamVjdHNcbiAgICAgICAgY2FzZSAndjJ2JzpcbiAgICAgICAgICAgIGlmICghdW5pZm9ybS5fYXJyYXkpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdW5pZm9ybS5fYXJyYXkgPSBuZXcgRmxvYXQzMkFycmF5KDIgKiB2YWx1ZS5sZW5ndGgpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBmb3IgKGkgPSAwLCBpbCA9IHZhbHVlLmxlbmd0aDsgaSA8IGlsOyArK2kpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdW5pZm9ybS5fYXJyYXlbaSAqIDJdICAgICAgID0gdmFsdWVbaV0ueDtcbiAgICAgICAgICAgICAgICB1bmlmb3JtLl9hcnJheVtpICogMiArIDFdICAgPSB2YWx1ZVtpXS55O1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBnbC51bmlmb3JtMmZ2KGxvY2F0aW9uLCB1bmlmb3JtLl9hcnJheSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAvLyBhcnJheSBvZiAzRCBQb2ludCBvYmplY3RzXG4gICAgICAgIGNhc2UgJ3Yzdic6XG4gICAgICAgICAgICBpZiAoIXVuaWZvcm0uX2FycmF5KVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHVuaWZvcm0uX2FycmF5ID0gbmV3IEZsb2F0MzJBcnJheSgzICogdmFsdWUubGVuZ3RoKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZm9yIChpID0gMCwgaWwgPSB2YWx1ZS5sZW5ndGg7IGkgPCBpbDsgKytpKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHVuaWZvcm0uX2FycmF5W2kgKiAzXSAgICAgICA9IHZhbHVlW2ldLng7XG4gICAgICAgICAgICAgICAgdW5pZm9ybS5fYXJyYXlbaSAqIDMgKyAxXSAgID0gdmFsdWVbaV0ueTtcbiAgICAgICAgICAgICAgICB1bmlmb3JtLl9hcnJheVtpICogMyArIDJdICAgPSB2YWx1ZVtpXS56O1xuXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGdsLnVuaWZvcm0zZnYobG9jYXRpb24sIHVuaWZvcm0uX2FycmF5KTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIC8vIGFycmF5IG9mIDREIFBvaW50IG9iamVjdHNcbiAgICAgICAgY2FzZSAndjR2JzpcbiAgICAgICAgICAgIGlmICghdW5pZm9ybS5fYXJyYXkpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdW5pZm9ybS5fYXJyYXkgPSBuZXcgRmxvYXQzMkFycmF5KDQgKiB2YWx1ZS5sZW5ndGgpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBmb3IgKGkgPSAwLCBpbCA9IHZhbHVlLmxlbmd0aDsgaSA8IGlsOyArK2kpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdW5pZm9ybS5fYXJyYXlbaSAqIDRdICAgICAgID0gdmFsdWVbaV0ueDtcbiAgICAgICAgICAgICAgICB1bmlmb3JtLl9hcnJheVtpICogNCArIDFdICAgPSB2YWx1ZVtpXS55O1xuICAgICAgICAgICAgICAgIHVuaWZvcm0uX2FycmF5W2kgKiA0ICsgMl0gICA9IHZhbHVlW2ldLno7XG4gICAgICAgICAgICAgICAgdW5pZm9ybS5fYXJyYXlbaSAqIDQgKyAzXSAgID0gdmFsdWVbaV0udztcblxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBnbC51bmlmb3JtNGZ2KGxvY2F0aW9uLCB1bmlmb3JtLl9hcnJheSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAvLyBQSVhJLlRleHR1cmVcbiAgICAgICAgY2FzZSAndCc6XG4gICAgICAgIGNhc2UgJ3NhbXBsZXIyRCc6XG5cbiAgICAgICAgICAgIGlmICghdW5pZm9ybS52YWx1ZSB8fCAhdW5pZm9ybS52YWx1ZS5iYXNlVGV4dHVyZS5oYXNMb2FkZWQpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIGFjdGl2YXRlIHRoaXMgdGV4dHVyZVxuICAgICAgICAgICAgZ2wuYWN0aXZlVGV4dHVyZShnbFsnVEVYVFVSRScgKyB0aGlzLnRleHR1cmVDb3VudF0pO1xuXG4gICAgICAgICAgICB2YXIgdGV4dHVyZSA9IHVuaWZvcm0udmFsdWUuYmFzZVRleHR1cmUuX2dsVGV4dHVyZXNbZ2wuaWRdO1xuXG4gICAgICAgICAgICBpZiAoIXRleHR1cmUpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdGhpcy5pbml0U2FtcGxlcjJEKHVuaWZvcm0pO1xuXG4gICAgICAgICAgICAgICAgLy8gc2V0IHRoZSB0ZXh0dXIgdG8gdGhlIG5ld2x5IGNyZWF0ZWQgb25lLi5cbiAgICAgICAgICAgICAgICB0ZXh0dXJlID0gdW5pZm9ybS52YWx1ZS5iYXNlVGV4dHVyZS5fZ2xUZXh0dXJlc1tnbC5pZF07XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIGJpbmQgdGhlIHRleHR1cmVcbiAgICAgICAgICAgIGdsLmJpbmRUZXh0dXJlKGdsLlRFWFRVUkVfMkQsIHRleHR1cmUpO1xuXG4gICAgICAgICAgICAvLyBzZXQgdW5pZm9ybSB0byB0ZXh0dXJlIGluZGV4XG4gICAgICAgICAgICBnbC51bmlmb3JtMWkodW5pZm9ybS5fbG9jYXRpb24sIHRoaXMudGV4dHVyZUNvdW50KTtcblxuICAgICAgICAgICAgLy8gaW5jcmVtZW50IG5leHQgdGV4dHVyZSBpZFxuICAgICAgICAgICAgdGhpcy50ZXh0dXJlQ291bnQrKztcblxuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignUGl4aS5qcyBTaGFkZXIgV2FybmluZzogVW5rbm93biB1bmlmb3JtIHR5cGU6ICcgKyB1bmlmb3JtLnR5cGUpO1xuICAgIH1cbn07XG5cbi8qKlxuICogVXBkYXRlcyB0aGUgc2hhZGVyIHVuaWZvcm0gdmFsdWVzLlxuICpcbiAqL1xuU2hhZGVyLnByb3RvdHlwZS5zeW5jVW5pZm9ybXMgPSBmdW5jdGlvbiAoKVxue1xuICAgIHRoaXMudGV4dHVyZUNvdW50ID0gMTtcblxuICAgIGZvciAodmFyIGtleSBpbiB0aGlzLnVuaWZvcm1zKVxuICAgIHtcbiAgICAgICAgdGhpcy5zeW5jVW5pZm9ybSh0aGlzLnVuaWZvcm1zW2tleV0pO1xuICAgIH1cbn07XG5cblxuLyoqXG4gKiBJbml0aWFsaXNlcyBhIFNhbXBsZXIyRCB1bmlmb3JtICh3aGljaCBtYXkgb25seSBiZSBhdmFpbGFibGUgbGF0ZXIgb24gYWZ0ZXIgaW5pdFVuaWZvcm1zIG9uY2UgdGhlIHRleHR1cmUgaGFzIGxvYWRlZClcbiAqXG4gKi9cblNoYWRlci5wcm90b3R5cGUuaW5pdFNhbXBsZXIyRCA9IGZ1bmN0aW9uICh1bmlmb3JtKVxue1xuICAgIHZhciBnbCA9IHRoaXMuZ2w7XG5cbiAgICB2YXIgdGV4dHVyZSA9IHVuaWZvcm0udmFsdWUuYmFzZVRleHR1cmU7XG5cbiAgICBpZighdGV4dHVyZS5oYXNMb2FkZWQpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG5cblxuICAgIGlmICh1bmlmb3JtLnRleHR1cmVEYXRhKVxuICAgIHtcblxuICAgICAgICAvL1RPRE8gbW92ZSB0aGlzLi4uXG4gICAgICAgIHZhciBkYXRhID0gdW5pZm9ybS50ZXh0dXJlRGF0YTtcblxuICAgICAgICB0ZXh0dXJlLl9nbFRleHR1cmVzW2dsLmlkXSA9IGdsLmNyZWF0ZVRleHR1cmUoKTtcblxuICAgICAgICBnbC5iaW5kVGV4dHVyZShnbC5URVhUVVJFXzJELCB0ZXh0dXJlLl9nbFRleHR1cmVzW2dsLmlkXSk7XG5cbiAgICAgICAgZ2wucGl4ZWxTdG9yZWkoZ2wuVU5QQUNLX1BSRU1VTFRJUExZX0FMUEhBX1dFQkdMLCB0ZXh0dXJlLnByZW11bHRpcGxpZWRBbHBoYSk7XG4gICAgICAgIC8vIEdMVGV4dHVyZSA9IG1hZyBsaW5lYXIsIG1pbiBsaW5lYXJfbWlwbWFwX2xpbmVhciwgd3JhcCByZXBlYXQgKyBnbC5nZW5lcmF0ZU1pcG1hcChnbC5URVhUVVJFXzJEKTtcbiAgICAgICAgLy8gR0xUZXh0dXJlTGluZWFyID0gbWFnL21pbiBsaW5lYXIsIHdyYXAgY2xhbXBcbiAgICAgICAgLy8gR0xUZXh0dXJlTmVhcmVzdFJlcGVhdCA9IG1hZy9taW4gTkVBUkVTVCwgd3JhcCByZXBlYXRcbiAgICAgICAgLy8gR0xUZXh0dXJlTmVhcmVzdCA9IG1hZy9taW4gbmVhcmVzdCwgd3JhcCBjbGFtcFxuICAgICAgICAvLyBBdWRpb1RleHR1cmUgPSB3aGF0ZXZlciArIGx1bWluYW5jZSArIHdpZHRoIDUxMiwgaGVpZ2h0IDIsIGJvcmRlciAwXG4gICAgICAgIC8vIEtleVRleHR1cmUgPSB3aGF0ZXZlciArIGx1bWluYW5jZSArIHdpZHRoIDI1NiwgaGVpZ2h0IDIsIGJvcmRlciAwXG5cbiAgICAgICAgLy8gIG1hZ0ZpbHRlciBjYW4gYmU6IGdsLkxJTkVBUiwgZ2wuTElORUFSX01JUE1BUF9MSU5FQVIgb3IgZ2wuTkVBUkVTVFxuICAgICAgICAvLyAgd3JhcFMvVCBjYW4gYmU6IGdsLkNMQU1QX1RPX0VER0Ugb3IgZ2wuUkVQRUFUXG5cbiAgICAgICAgZ2wudGV4SW1hZ2UyRChnbC5URVhUVVJFXzJELCAwLCBkYXRhLmx1bWluYW5jZSA/IGdsLkxVTUlOQU5DRSA6IGdsLlJHQkEsIGdsLlJHQkEsIGdsLlVOU0lHTkVEX0JZVEUsIHRleHR1cmUuc291cmNlKTtcblxuICAgICAgICBnbC50ZXhQYXJhbWV0ZXJpKGdsLlRFWFRVUkVfMkQsIGdsLlRFWFRVUkVfTUFHX0ZJTFRFUiwgZGF0YS5tYWdGaWx0ZXIgPyBkYXRhLm1hZ0ZpbHRlciA6IGdsLkxJTkVBUiApO1xuICAgICAgICBnbC50ZXhQYXJhbWV0ZXJpKGdsLlRFWFRVUkVfMkQsIGdsLlRFWFRVUkVfTUlOX0ZJTFRFUiwgZGF0YS53cmFwUyA/IGRhdGEud3JhcFMgOiBnbC5DTEFNUF9UT19FREdFICk7XG5cbiAgICAgICAgZ2wudGV4UGFyYW1ldGVyaShnbC5URVhUVVJFXzJELCBnbC5URVhUVVJFX1dSQVBfVCwgZGF0YS53cmFwUyA/IGRhdGEud3JhcFMgOiBnbC5DTEFNUF9UT19FREdFKTtcbiAgICAgICAgZ2wudGV4UGFyYW1ldGVyaShnbC5URVhUVVJFXzJELCBnbC5URVhUVVJFX1dSQVBfUywgZGF0YS53cmFwVCA/IGRhdGEud3JhcFQgOiBnbC5DTEFNUF9UT19FREdFKTtcbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgdGhpcy5zaGFkZXJNYW5hZ2VyLnJlbmRlcmVyLnVwZGF0ZVRleHR1cmUodGV4dHVyZSk7XG4gICAgfVxufTtcblxuLyoqXG4gKiBEZXN0cm95cyB0aGUgc2hhZGVyLlxuICpcbiAqL1xuU2hhZGVyLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLmdsLmRlbGV0ZVByb2dyYW0odGhpcy5wcm9ncmFtKTtcblxuICAgIHRoaXMuZ2wgPSBudWxsO1xuICAgIHRoaXMudW5pZm9ybXMgPSBudWxsO1xuICAgIHRoaXMuYXR0cmlidXRlcyA9IG51bGw7XG5cbiAgICB0aGlzLnZlcnRleFNyYyA9IG51bGw7XG4gICAgdGhpcy5mcmFnbWVudFNyYyA9IG51bGw7XG59O1xuXG5TaGFkZXIucHJvdG90eXBlLl9nbENvbXBpbGUgPSBmdW5jdGlvbiAodHlwZSwgc3JjKVxue1xuICAgIHZhciBzaGFkZXIgPSB0aGlzLmdsLmNyZWF0ZVNoYWRlcih0eXBlKTtcblxuICAgIHRoaXMuZ2wuc2hhZGVyU291cmNlKHNoYWRlciwgc3JjKTtcbiAgICB0aGlzLmdsLmNvbXBpbGVTaGFkZXIoc2hhZGVyKTtcblxuICAgIGlmICghdGhpcy5nbC5nZXRTaGFkZXJQYXJhbWV0ZXIoc2hhZGVyLCB0aGlzLmdsLkNPTVBJTEVfU1RBVFVTKSlcbiAgICB7XG4gICAgICAgIGNvbnNvbGUubG9nKHRoaXMuZ2wuZ2V0U2hhZGVySW5mb0xvZyhzaGFkZXIpKTtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgcmV0dXJuIHNoYWRlcjtcbn07XG4iLCJ2YXIgU2hhZGVyID0gcmVxdWlyZSgnLi9TaGFkZXInKTtcblxuLyoqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAZXh0ZW5kcyBQSVhJLlNoYWRlclxuICogQHBhcmFtIHNoYWRlck1hbmFnZXIge1BJWEkuU2hhZGVyTWFuYWdlcn0gVGhlIHdlYmdsIHNoYWRlciBtYW5hZ2VyIHRoaXMgc2hhZGVyIHdvcmtzIGZvci5cbiAqIEBwYXJhbSBbdmVydGV4U3JjXSB7c3RyaW5nfSBUaGUgc291cmNlIG9mIHRoZSB2ZXJ0ZXggc2hhZGVyLlxuICogQHBhcmFtIFtmcmFnbWVudFNyY10ge3N0cmluZ30gVGhlIHNvdXJjZSBvZiB0aGUgZnJhZ21lbnQgc2hhZGVyLlxuICogQHBhcmFtIFtjdXN0b21Vbmlmb3Jtc10ge29iamVjdH0gQ3VzdG9tIHVuaWZvcm1zIHRvIHVzZSB0byBhdWdtZW50IHRoZSBidWlsdC1pbiBvbmVzLlxuICogQHBhcmFtIFtmcmFnbWVudFNyY10ge3N0cmluZ30gVGhlIHNvdXJjZSBvZiB0aGUgZnJhZ21lbnQgc2hhZGVyLlxuICovXG5mdW5jdGlvbiBUZXh0dXJlU2hhZGVyKHNoYWRlck1hbmFnZXIsIHZlcnRleFNyYywgZnJhZ21lbnRTcmMsIGN1c3RvbVVuaWZvcm1zLCBjdXN0b21BdHRyaWJ1dGVzKVxue1xuICAgIHZhciB1bmlmb3JtcyA9IHtcblxuICAgICAgICB1U2FtcGxlcjogICAgICAgICAgIHsgdHlwZTogJ3NhbXBsZXIyRCcsIHZhbHVlOiAwIH0sXG4gICAgICAgIHByb2plY3Rpb25NYXRyaXg6ICAgeyB0eXBlOiAnbWF0MycsIHZhbHVlOiBuZXcgRmxvYXQzMkFycmF5KFsxLCAwLCAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgMSwgMCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsIDAsIDFdKSB9XG4gICAgfTtcblxuICAgIGlmIChjdXN0b21Vbmlmb3JtcylcbiAgICB7XG4gICAgICAgIGZvciAodmFyIHUgaW4gY3VzdG9tVW5pZm9ybXMpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHVuaWZvcm1zW3VdID0gY3VzdG9tVW5pZm9ybXNbdV07XG4gICAgICAgIH1cbiAgICB9XG5cblxuICAgIHZhciBhdHRyaWJ1dGVzID0ge1xuICAgICAgICBhVmVydGV4UG9zaXRpb246ICAgIDAsXG4gICAgICAgIGFUZXh0dXJlQ29vcmQ6ICAgICAgMCxcbiAgICAgICAgYUNvbG9yOiAgICAgICAgICAgICAwXG4gICAgfTtcblxuICAgIGlmIChjdXN0b21BdHRyaWJ1dGVzKVxuICAgIHtcbiAgICAgICAgZm9yICh2YXIgYSBpbiBjdXN0b21BdHRyaWJ1dGVzKVxuICAgICAgICB7XG4gICAgICAgICAgICBhdHRyaWJ1dGVzW2FdID0gY3VzdG9tQXR0cmlidXRlc1thXTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoZSB2ZXJ0ZXggc2hhZGVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7c3RyaW5nfVxuICAgICAqL1xuICAgIHZlcnRleFNyYyA9IHZlcnRleFNyYyB8fCBUZXh0dXJlU2hhZGVyLmRlZmF1bHRWZXJ0ZXhTcmM7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgZnJhZ21lbnQgc2hhZGVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7c3RyaW5nfVxuICAgICAqL1xuICAgIGZyYWdtZW50U3JjID0gZnJhZ21lbnRTcmMgfHwgVGV4dHVyZVNoYWRlci5kZWZhdWx0RnJhZ21lbnRTcmM7XG5cbiAgICBTaGFkZXIuY2FsbCh0aGlzLCBzaGFkZXJNYW5hZ2VyLCB2ZXJ0ZXhTcmMsIGZyYWdtZW50U3JjLCB1bmlmb3JtcywgYXR0cmlidXRlcyk7XG59XG5cbi8vIGNvbnN0cnVjdG9yXG5UZXh0dXJlU2hhZGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoU2hhZGVyLnByb3RvdHlwZSk7XG5UZXh0dXJlU2hhZGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFRleHR1cmVTaGFkZXI7XG5tb2R1bGUuZXhwb3J0cyA9IFRleHR1cmVTaGFkZXI7XG5cbi8qKlxuICogVGhlIGRlZmF1bHQgdmVydGV4IHNoYWRlciBzb3VyY2VcbiAqXG4gKiBAc3RhdGljXG4gKiBAY29uc3RhbnRcbiAqL1xuVGV4dHVyZVNoYWRlci5kZWZhdWx0VmVydGV4U3JjID0gW1xuICAgICdwcmVjaXNpb24gbG93cCBmbG9hdDsnLFxuICAgICdhdHRyaWJ1dGUgdmVjMiBhVmVydGV4UG9zaXRpb247JyxcbiAgICAnYXR0cmlidXRlIHZlYzIgYVRleHR1cmVDb29yZDsnLFxuICAgICdhdHRyaWJ1dGUgdmVjNCBhQ29sb3I7JyxcblxuICAgICd1bmlmb3JtIG1hdDMgcHJvamVjdGlvbk1hdHJpeDsnLFxuXG4gICAgJ3ZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkOycsXG4gICAgJ3ZhcnlpbmcgdmVjNCB2Q29sb3I7JyxcblxuICAgICd2b2lkIG1haW4odm9pZCl7JyxcbiAgICAnICAgZ2xfUG9zaXRpb24gPSB2ZWM0KChwcm9qZWN0aW9uTWF0cml4ICogdmVjMyhhVmVydGV4UG9zaXRpb24sIDEuMCkpLnh5LCAwLjAsIDEuMCk7JyxcbiAgICAnICAgdlRleHR1cmVDb29yZCA9IGFUZXh0dXJlQ29vcmQ7JyxcbiAgICAnICAgdkNvbG9yID0gdmVjNChhQ29sb3IucmdiICogYUNvbG9yLmEsIGFDb2xvci5hKTsnLFxuICAgICd9J1xuXS5qb2luKCdcXG4nKTtcblxuLyoqXG4gKiBUaGUgZGVmYXVsdCBmcmFnbWVudCBzaGFkZXIgc291cmNlXG4gKlxuICogQHN0YXRpY1xuICogQGNvbnN0YW50XG4gKi9cblRleHR1cmVTaGFkZXIuZGVmYXVsdEZyYWdtZW50U3JjID0gW1xuICAgICdwcmVjaXNpb24gbG93cCBmbG9hdDsnLFxuXG4gICAgJ3ZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkOycsXG4gICAgJ3ZhcnlpbmcgdmVjNCB2Q29sb3I7JyxcblxuICAgICd1bmlmb3JtIHNhbXBsZXIyRCB1U2FtcGxlcjsnLFxuXG4gICAgJ3ZvaWQgbWFpbih2b2lkKXsnLFxuICAgICcgICBnbF9GcmFnQ29sb3IgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZUZXh0dXJlQ29vcmQpICogdkNvbG9yIDsnLFxuICAgICd9J1xuXS5qb2luKCdcXG4nKTtcbiIsInZhciBTaGFkZXIgPSByZXF1aXJlKCdwaXhpLWdsLWNvcmUnKS5HTFNoYWRlcjtcblxuLyoqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAZXh0ZW5kcyBQSVhJLlNoYWRlclxuICogQHBhcmFtIHNoYWRlck1hbmFnZXIge1BJWEkuU2hhZGVyTWFuYWdlcn0gVGhlIHdlYmdsIHNoYWRlciBtYW5hZ2VyIHRoaXMgc2hhZGVyIHdvcmtzIGZvci5cbiAqIEBwYXJhbSBbdmVydGV4U3JjXSB7c3RyaW5nfSBUaGUgc291cmNlIG9mIHRoZSB2ZXJ0ZXggc2hhZGVyLlxuICogQHBhcmFtIFtmcmFnbWVudFNyY10ge3N0cmluZ30gVGhlIHNvdXJjZSBvZiB0aGUgZnJhZ21lbnQgc2hhZGVyLlxuICogQHBhcmFtIFtjdXN0b21Vbmlmb3Jtc10ge29iamVjdH0gQ3VzdG9tIHVuaWZvcm1zIHRvIHVzZSB0byBhdWdtZW50IHRoZSBidWlsdC1pbiBvbmVzLlxuICogQHBhcmFtIFtmcmFnbWVudFNyY10ge3N0cmluZ30gVGhlIHNvdXJjZSBvZiB0aGUgZnJhZ21lbnQgc2hhZGVyLlxuICovXG5mdW5jdGlvbiBUZXh0dXJlU2hhZGVyKGdsKVxue1xuICAgIC8qKlxuICAgICAqIFRoZSB2ZXJ0ZXggc2hhZGVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7c3RyaW5nfVxuICAgICAqL1xuICAgIHZlcnRleFNyYyA9IFRleHR1cmVTaGFkZXIuZGVmYXVsdFZlcnRleFNyYztcblxuICAgIC8qKlxuICAgICAqIFRoZSBmcmFnbWVudCBzaGFkZXIuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtzdHJpbmd9XG4gICAgICovXG4gICAgZnJhZ21lbnRTcmMgPSBUZXh0dXJlU2hhZGVyLmRlZmF1bHRGcmFnbWVudFNyYztcblxuICAgIFNoYWRlci5jYWxsKHRoaXMsIGdsLCB2ZXJ0ZXhTcmMsIGZyYWdtZW50U3JjKTsvLywgdW5pZm9ybXMsIGF0dHJpYnV0ZXMpO1xuXG59XG5cbi8vIGNvbnN0cnVjdG9yXG5UZXh0dXJlU2hhZGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoU2hhZGVyLnByb3RvdHlwZSk7XG5UZXh0dXJlU2hhZGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFRleHR1cmVTaGFkZXI7XG5tb2R1bGUuZXhwb3J0cyA9IFRleHR1cmVTaGFkZXI7XG5cbi8qKlxuICogVGhlIGRlZmF1bHQgdmVydGV4IHNoYWRlciBzb3VyY2VcbiAqXG4gKiBAc3RhdGljXG4gKiBAY29uc3RhbnRcbiAqL1xuVGV4dHVyZVNoYWRlci5kZWZhdWx0VmVydGV4U3JjID0gW1xuICAgICdwcmVjaXNpb24gbG93cCBmbG9hdDsnLFxuICAgICdhdHRyaWJ1dGUgdmVjMiBhVmVydGV4UG9zaXRpb247JyxcbiAgICAnYXR0cmlidXRlIHZlYzIgYVRleHR1cmVDb29yZDsnLFxuICAgICdhdHRyaWJ1dGUgdmVjNCBhQ29sb3I7JyxcblxuICAgICd1bmlmb3JtIG1hdDMgcHJvamVjdGlvbk1hdHJpeDsnLFxuXG4gICAgJ3ZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkOycsXG4gICAgJ3ZhcnlpbmcgdmVjNCB2Q29sb3I7JyxcblxuICAgICd2b2lkIG1haW4odm9pZCl7JyxcbiAgICAnICAgZ2xfUG9zaXRpb24gPSB2ZWM0KChwcm9qZWN0aW9uTWF0cml4ICogdmVjMyhhVmVydGV4UG9zaXRpb24sIDEuMCkpLnh5LCAwLjAsIDEuMCk7JyxcbiAgICAnICAgdlRleHR1cmVDb29yZCA9IGFUZXh0dXJlQ29vcmQ7JyxcbiAgICAnICAgdkNvbG9yID0gdmVjNChhQ29sb3IucmdiICogYUNvbG9yLmEsIGFDb2xvci5hKTsnLFxuICAgICd9J1xuXS5qb2luKCdcXG4nKTtcblxuLyoqXG4gKiBUaGUgZGVmYXVsdCBmcmFnbWVudCBzaGFkZXIgc291cmNlXG4gKlxuICogQHN0YXRpY1xuICogQGNvbnN0YW50XG4gKi9cblRleHR1cmVTaGFkZXIuZGVmYXVsdEZyYWdtZW50U3JjID0gW1xuICAgICdwcmVjaXNpb24gbG93cCBmbG9hdDsnLFxuXG4gICAgJ3ZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkOycsXG4gICAgJ3ZhcnlpbmcgdmVjNCB2Q29sb3I7JyxcblxuICAgICd1bmlmb3JtIHNhbXBsZXIyRCB1U2FtcGxlcjsnLFxuXG4gICAgJ3ZvaWQgbWFpbih2b2lkKXsnLFxuICAgICcgICBnbF9GcmFnQ29sb3IgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZUZXh0dXJlQ29vcmQpICogdkNvbG9yIDsnLFxuICAgICd9J1xuXS5qb2luKCdcXG4nKTtcbiIsInZhciBXZWJHTE1hbmFnZXIgPSByZXF1aXJlKCcuLi9tYW5hZ2Vycy9XZWJHTE1hbmFnZXInKTtcblxuLyoqXG4gKiBCYXNlIGZvciBhIGNvbW1vbiBvYmplY3QgcmVuZGVyZXIgdGhhdCBjYW4gYmUgdXNlZCBhcyBhIHN5c3RlbSByZW5kZXJlciBwbHVnaW4uXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLldlYkdMTWFuYWdlclxuICogQG1lbWJlcm9mIFBJWElcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5XZWJHTFJlbmRlcmVyfSBUaGUgcmVuZGVyZXIgdGhpcyBvYmplY3QgcmVuZGVyZXIgd29ya3MgZm9yLlxuICovXG5mdW5jdGlvbiBPYmplY3RSZW5kZXJlcihyZW5kZXJlcilcbntcbiAgICBXZWJHTE1hbmFnZXIuY2FsbCh0aGlzLCByZW5kZXJlcik7XG59XG5cblxuT2JqZWN0UmVuZGVyZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShXZWJHTE1hbmFnZXIucHJvdG90eXBlKTtcbk9iamVjdFJlbmRlcmVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IE9iamVjdFJlbmRlcmVyO1xubW9kdWxlLmV4cG9ydHMgPSBPYmplY3RSZW5kZXJlcjtcblxuLyoqXG4gKiBTdGFydHMgdGhlIHJlbmRlcmVyIGFuZCBzZXRzIHRoZSBzaGFkZXJcbiAqXG4gKi9cbk9iamVjdFJlbmRlcmVyLnByb3RvdHlwZS5zdGFydCA9IGZ1bmN0aW9uICgpXG57XG4gICAgLy8gc2V0IHRoZSBzaGFkZXIuLlxufTtcblxuLyoqXG4gKiBTdG9wcyB0aGUgcmVuZGVyZXJcbiAqXG4gKi9cbk9iamVjdFJlbmRlcmVyLnByb3RvdHlwZS5zdG9wID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLmZsdXNoKCk7XG59O1xuXG4vKipcbiAqIGZsdXNoZXNcbiAqXG4gKi9cbk9iamVjdFJlbmRlcmVyLnByb3RvdHlwZS5mbHVzaCA9IGZ1bmN0aW9uICgpXG57XG4gICAgLy8gZmx1c2ghXG59O1xuXG4vKipcbiAqIFJlbmRlcnMgYW4gb2JqZWN0XG4gKlxuICogQHBhcmFtIG9iamVjdCB7UElYSS5EaXNwbGF5T2JqZWN0fSBUaGUgb2JqZWN0IHRvIHJlbmRlci5cbiAqL1xuT2JqZWN0UmVuZGVyZXIucHJvdG90eXBlLnJlbmRlciA9IGZ1bmN0aW9uIChvYmplY3QpIC8vIGpzaGludCB1bnVzZWQ6ZmFsc2VcbntcbiAgICAvLyByZW5kZXIgdGhlIG9iamVjdFxufTtcbiIsIi8qKlxuICogSGVscGVyIGNsYXNzIHRvIGNyZWF0ZSBhIHF1YWRcbiAqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gZ2wge1dlYkdMUmVuZGVyaW5nQ29udGV4dH0gVGhlIGdsIGNvbnRleHQgZm9yIHRoaXMgcXVhZCB0byB1c2UuXG4gKi9cbmZ1bmN0aW9uIFF1YWQoZ2wpXG57XG4gICAgLypcbiAgICAgKiB0aGUgY3VycmVudCBXZWJHTCBkcmF3aW5nIGNvbnRleHRcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1dlYkdMUmVuZGVyaW5nQ29udGV4dH1cbiAgICAgKi9cbiAgICB0aGlzLmdsID0gZ2w7XG5cbi8vICAgIHRoaXMudGV4dHVyZXMgPSBuZXcgVGV4dHVyZVV2cygpO1xuXG4gICAgLyoqXG4gICAgICogQW4gYXJyYXkgb2YgdmVydGljZXNcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge0Zsb2F0MzJBcnJheX1cbiAgICAgKi9cbiAgICB0aGlzLnZlcnRpY2VzID0gbmV3IEZsb2F0MzJBcnJheShbXG4gICAgICAgIDAsMCxcbiAgICAgICAgMjAwLDAsXG4gICAgICAgIDIwMCwyMDAsXG4gICAgICAgIDAsMjAwXG4gICAgXSk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgVXZzIG9mIHRoZSBxdWFkXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtGbG9hdDMyQXJyYXl9XG4gICAgICovXG4gICAgdGhpcy51dnMgPSBuZXcgRmxvYXQzMkFycmF5KFtcbiAgICAgICAgMCwwLFxuICAgICAgICAxLDAsXG4gICAgICAgIDEsMSxcbiAgICAgICAgMCwxXG4gICAgXSk7XG5cbi8vICAgIHZhciB3aGl0ZSA9ICgweEZGRkZGRiA+PiAxNikgKyAoMHhGRkZGRkYgJiAweGZmMDApICsgKCgweEZGRkZGRiAmIDB4ZmYpIDw8IDE2KSArICgxICogMjU1IDw8IDI0KTtcbiAgICAvL1RPRE8gY29udmVydCB0aGlzIHRvIGEgMzIgdW5zaWduZWQgaW50IGFycmF5XG4gICAgLyoqXG4gICAgICogVGhlIGNvbG9yIGNvbXBvbmVudHMgb2YgdGhlIHRyaWFuZ2xlc1xuICAgICAqXG4gICAgICogQG1lbWJlciB7RmxvYXQzMkFycmF5fVxuICAgICAqL1xuICAgIHRoaXMuY29sb3JzID0gbmV3IEZsb2F0MzJBcnJheShbXG4gICAgICAgIDEsMSwxLDEsXG4gICAgICAgIDEsMSwxLDEsXG4gICAgICAgIDEsMSwxLDEsXG4gICAgICAgIDEsMSwxLDFcbiAgICBdKTtcblxuICAgIC8qXG4gICAgICogQG1lbWJlciB7VWludDE2QXJyYXl9IEFuIGFycmF5IGNvbnRhaW5pbmcgdGhlIGluZGljZXMgb2YgdGhlIHZlcnRpY2VzXG4gICAgICovXG4gICAgdGhpcy5pbmRpY2VzID0gbmV3IFVpbnQxNkFycmF5KFtcbiAgICAgICAgMCwgMSwgMiwgMCwgMywgMlxuICAgIF0pO1xuXG4gICAgLypcbiAgICAgKiBAbWVtYmVyIHtXZWJHTEJ1ZmZlcn0gVGhlIHZlcnRleCBidWZmZXJcbiAgICAgKi9cbiAgICB0aGlzLnZlcnRleEJ1ZmZlciA9IGdsLmNyZWF0ZUJ1ZmZlcigpO1xuXG4gICAgLypcbiAgICAgKiBAbWVtYmVyIHtXZWJHTEJ1ZmZlcn0gVGhlIGluZGV4IGJ1ZmZlclxuICAgICAqL1xuICAgIHRoaXMuaW5kZXhCdWZmZXIgPSBnbC5jcmVhdGVCdWZmZXIoKTtcblxuICAgIGdsLmJpbmRCdWZmZXIoZ2wuQVJSQVlfQlVGRkVSLCB0aGlzLnZlcnRleEJ1ZmZlcik7XG4gICAgZ2wuYnVmZmVyRGF0YShnbC5BUlJBWV9CVUZGRVIsICg4ICsgOCArIDE2KSAqIDQsIGdsLkRZTkFNSUNfRFJBVyk7XG5cbiAgICBnbC5iaW5kQnVmZmVyKGdsLkVMRU1FTlRfQVJSQVlfQlVGRkVSLCB0aGlzLmluZGV4QnVmZmVyKTtcbiAgICBnbC5idWZmZXJEYXRhKGdsLkVMRU1FTlRfQVJSQVlfQlVGRkVSLCB0aGlzLmluZGljZXMsIGdsLlNUQVRJQ19EUkFXKTtcblxuICAgIHRoaXMudXBsb2FkKCk7XG59XG5cblF1YWQucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gUXVhZDtcblxuLyoqXG4gKiBNYXBzIHR3byBSZWN0YW5nbGUgdG8gdGhlIHF1YWRcbiAqIEBwYXJhbSByZWN0IHtQSVhJLlJlY3RhbmdsZX0gdGhlIGZpcnN0IHJlY3RhbmdsZVxuICogQHBhcmFtIHJlY3QyIHtQSVhJLlJlY3RhbmdsZX0gdGhlIHNlY29uZCByZWN0YW5nbGVcbiAqL1xuUXVhZC5wcm90b3R5cGUubWFwID0gZnVuY3Rpb24ocmVjdCwgcmVjdDIpXG57XG4gICAgdmFyIHggPSAwOyAvL3JlY3QyLnggLyByZWN0LndpZHRoO1xuICAgIHZhciB5ID0gMDsgLy9yZWN0Mi55IC8gcmVjdC5oZWlnaHQ7XG5cbiAgICB0aGlzLnV2c1swXSA9IHg7XG4gICAgdGhpcy51dnNbMV0gPSB5O1xuXG4gICAgdGhpcy51dnNbMl0gPSB4ICsgcmVjdDIud2lkdGggLyByZWN0LndpZHRoO1xuICAgIHRoaXMudXZzWzNdID0geTtcblxuICAgIHRoaXMudXZzWzRdID0geCArIHJlY3QyLndpZHRoIC8gcmVjdC53aWR0aDtcbiAgICB0aGlzLnV2c1s1XSA9IHkgKyByZWN0Mi5oZWlnaHQgLyByZWN0LmhlaWdodDtcblxuICAgIHRoaXMudXZzWzZdID0geDtcbiAgICB0aGlzLnV2c1s3XSA9IHkgKyByZWN0Mi5oZWlnaHQgLyByZWN0LmhlaWdodDtcblxuICAgIC8vLyAtLS0tLVxuICAgIHggPSByZWN0Mi54O1xuICAgIHkgPSByZWN0Mi55O1xuXG4gICAgdGhpcy52ZXJ0aWNlc1swXSA9IHg7XG4gICAgdGhpcy52ZXJ0aWNlc1sxXSA9IHk7XG5cbiAgICB0aGlzLnZlcnRpY2VzWzJdID0geCArIHJlY3QyLndpZHRoO1xuICAgIHRoaXMudmVydGljZXNbM10gPSB5O1xuXG4gICAgdGhpcy52ZXJ0aWNlc1s0XSA9IHggKyByZWN0Mi53aWR0aDtcbiAgICB0aGlzLnZlcnRpY2VzWzVdID0geSArIHJlY3QyLmhlaWdodDtcblxuICAgIHRoaXMudmVydGljZXNbNl0gPSB4O1xuICAgIHRoaXMudmVydGljZXNbN10gPSB5ICsgcmVjdDIuaGVpZ2h0O1xuXG4gICAgdGhpcy51cGxvYWQoKTtcbn07XG5cbi8qKlxuICogQmluZHMgdGhlIGJ1ZmZlciBhbmQgdXBsb2FkcyB0aGUgZGF0YVxuICovXG5RdWFkLnByb3RvdHlwZS51cGxvYWQgPSBmdW5jdGlvbigpXG57XG4gICAgdmFyIGdsID0gdGhpcy5nbDtcblxuICAgIC8vIFRPRE8gY291bGQgcHJvYmFibHkgYmUgcHVzaGVkIGludG8gb25lIHVwbG9hZCFcbiAgICBnbC5iaW5kQnVmZmVyKCBnbC5BUlJBWV9CVUZGRVIsIHRoaXMudmVydGV4QnVmZmVyICk7XG5cbiAgICBnbC5idWZmZXJTdWJEYXRhKGdsLkFSUkFZX0JVRkZFUiwgMCwgdGhpcy52ZXJ0aWNlcyk7XG5cbiAgICBnbC5idWZmZXJTdWJEYXRhKGdsLkFSUkFZX0JVRkZFUiwgOCAqIDQsIHRoaXMudXZzKTtcblxuICAgIGdsLmJ1ZmZlclN1YkRhdGEoZ2wuQVJSQVlfQlVGRkVSLCAoOCArIDgpICogNCwgdGhpcy5jb2xvcnMpO1xufTtcblxuUXVhZC5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uKClcbntcbiAgICB2YXIgZ2wgPSB0aGlzLmdsO1xuICAgIFxuICAgICBnbC5kZWxldGVCdWZmZXIodGhpcy52ZXJ0ZXhCdWZmZXIpO1xuICAgICBnbC5kZWxldGVCdWZmZXIodGhpcy5pbmRleEJ1ZmZlcik7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IFF1YWQ7XG5cblxuIiwidmFyIG1hdGggPSByZXF1aXJlKCcuLi8uLi8uLi9tYXRoJyksXG4gICAgdXRpbHMgPSByZXF1aXJlKCcuLi8uLi8uLi91dGlscycpLFxuICAgIENPTlNUID0gcmVxdWlyZSgnLi4vLi4vLi4vY29uc3QnKSxcbiAgICAgICAgXG4gICAgR0xUZXh0dXJlID0gcmVxdWlyZSgncGl4aS1nbC1jb3JlJykuR0xUZXh0dXJlLFxuICAgIEdMRnJhbWVidWZmZXIgPSByZXF1aXJlKCdwaXhpLWdsLWNvcmUnKS5HTEZyYW1lYnVmZmVyLFxuICAgIFxuICAgIFN0ZW5jaWxNYXNrU3RhY2sgPSByZXF1aXJlKCcuL1N0ZW5jaWxNYXNrU3RhY2snKTtcblxuLyoqXG4gKiBAYXV0aG9yIE1hdCBHcm92ZXMgaHR0cDovL21hdGdyb3Zlcy5jb20vIEBEb29ybWF0MjNcbiAqL1xuXG4vKipcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqIEBwYXJhbSBnbCB7V2ViR0xSZW5kZXJpbmdDb250ZXh0fSB0aGUgY3VycmVudCBXZWJHTCBkcmF3aW5nIGNvbnRleHRcbiAqIEBwYXJhbSB3aWR0aCB7bnVtYmVyfSB0aGUgaG9yaXpvbnRhbCByYW5nZSBvZiB0aGUgZmlsdGVyXG4gKiBAcGFyYW0gaGVpZ2h0IHtudW1iZXJ9IHRoZSB2ZXJ0aWNhbCByYW5nZSBvZiB0aGUgZmlsdGVyXG4gKiBAcGFyYW0gc2NhbGVNb2RlIHtudW1iZXJ9IFNlZSB7QGxpbmsgUElYSS5TQ0FMRV9NT0RFU30gZm9yIHBvc3NpYmxlIHZhbHVlc1xuICogQHBhcmFtIHJlc29sdXRpb24ge251bWJlcn0gdGhlIGN1cnJlbnQgcmVzb2x1dGlvblxuICogQHBhcmFtIHJvb3Qge2Jvb2xlYW59IFdoZXRoZXIgdGhpcyBvYmplY3QgaXMgdGhlIHJvb3QgZWxlbWVudCBvciBub3RcbiAqL1xudmFyIFJlbmRlclRhcmdldCA9IGZ1bmN0aW9uKGdsLCB3aWR0aCwgaGVpZ2h0LCBzY2FsZU1vZGUsIHJlc29sdXRpb24sIHJvb3QpXG57XG4gICAgLy9UT0RPIFJlc29sdXRpb24gY291bGQgZ28gaGVyZSAoIGVnIGxvdyByZXMgYmx1cnMgKVxuXG4gICAgLyoqXG4gICAgICogVGhlIGN1cnJlbnQgV2ViR0wgZHJhd2luZyBjb250ZXh0LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7V2ViR0xSZW5kZXJpbmdDb250ZXh0fVxuICAgICAqL1xuICAgIHRoaXMuZ2wgPSBnbDtcblxuICAgIC8vIG5leHQgdGltZSB0byBjcmVhdGUgYSBmcmFtZSBidWZmZXIgYW5kIHRleHR1cmVcblxuICAgIC8qKlxuICAgICAqIEEgZnJhbWUgYnVmZmVyXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtXZWJHTEZyYW1lQnVmZmVyfVxuICAgICAqL1xuICAgIHRoaXMuZnJhbWVCdWZmZXIgPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHRleHR1cmVcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuVGV4dHVyZX1cbiAgICAgKi9cbiAgICB0aGlzLnRleHR1cmUgPSBudWxsO1xuXG4gICAgdGhpcy5jbGVhckNvbG9yID0gWzAsIDAsIDAsIDBdO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHNpemUgb2YgdGhlIG9iamVjdCBhcyBhIHJlY3RhbmdsZVxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5SZWN0YW5nbGV9XG4gICAgICovXG4gICAgdGhpcy5zaXplID0gbmV3IG1hdGguUmVjdGFuZ2xlKDAsIDAsIDEsIDEpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGN1cnJlbnQgcmVzb2x1dGlvblxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMucmVzb2x1dGlvbiA9IHJlc29sdXRpb24gfHwgQ09OU1QuUkVTT0xVVElPTjtcblxuICAgIC8qKlxuICAgICAqIFRoZSBwcm9qZWN0aW9uIG1hdHJpeFxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5NYXRyaXh9XG4gICAgICovXG4gICAgdGhpcy5wcm9qZWN0aW9uTWF0cml4ID0gbmV3IG1hdGguTWF0cml4KCk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgb2JqZWN0J3MgdHJhbnNmb3JtXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLk1hdHJpeH1cbiAgICAgKi9cbiAgICB0aGlzLnRyYW5zZm9ybSA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgZnJhbWUuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlJlY3RhbmdsZX1cbiAgICAgKi9cbiAgICB0aGlzLmZyYW1lID0gbnVsbDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBzdGVuY2lsIGJ1ZmZlciBzdG9yZXMgbWFza2luZyBkYXRhIGZvciB0aGUgcmVuZGVyIHRhcmdldFxuICAgICAqXG4gICAgICogQG1lbWJlciB7V2ViR0xSZW5kZXJCdWZmZXJ9XG4gICAgICovXG4gICAgdGhpcy5zdGVuY2lsQnVmZmVyID0gbnVsbDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBkYXRhIHN0cnVjdHVyZSBmb3IgdGhlIHN0ZW5jaWwgbWFza3NcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuU3RlbmNpbE1hc2tTdGFja31cbiAgICAgKi9cbiAgICB0aGlzLnN0ZW5jaWxNYXNrU3RhY2sgPSBuZXcgU3RlbmNpbE1hc2tTdGFjaygpO1xuXG4gICAgLyoqXG4gICAgICogU3RvcmVzIGZpbHRlciBkYXRhIGZvciB0aGUgcmVuZGVyIHRhcmdldFxuICAgICAqXG4gICAgICogQG1lbWJlciB7b2JqZWN0W119XG4gICAgICovXG4gICAgdGhpcy5maWx0ZXJTdGFjayA9IFtcbiAgICAgICAge1xuICAgICAgICAgICAgcmVuZGVyVGFyZ2V0OnRoaXMsXG4gICAgICAgICAgICBmaWx0ZXI6W10sXG4gICAgICAgICAgICBib3VuZHM6dGhpcy5zaXplXG4gICAgICAgIH1cbiAgICBdO1xuXG5cbiAgICAvKipcbiAgICAgKiBUaGUgc2NhbGUgbW9kZS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCBQSVhJLlNDQUxFX01PREVTLkRFRkFVTFRcbiAgICAgKiBAc2VlIFBJWEkuU0NBTEVfTU9ERVNcbiAgICAgKi9cbiAgICB0aGlzLnNjYWxlTW9kZSA9IHNjYWxlTW9kZSB8fCBDT05TVC5TQ0FMRV9NT0RFUy5ERUZBVUxUO1xuXG4gICAgLyoqXG4gICAgICogV2hldGhlciB0aGlzIG9iamVjdCBpcyB0aGUgcm9vdCBlbGVtZW50IG9yIG5vdFxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKi9cbiAgICB0aGlzLnJvb3QgPSByb290O1xuXG4gICAgdGhpcy5mcmFtZUJ1ZmZlciA9IEdMRnJhbWVidWZmZXIuY3JlYXRlUkdCQShnbCwgMTAwLCAxMDApO1xuICAgIGlmKHRoaXMuZnJhbWVCdWZmZXIpdGhpcy5mcmFtZUJ1ZmZlci51bmJpbmQoKTtcblxuICAgLy8gdGhpcy5mcmFtZUJ1ZmZlciA9IHtmcmFtZWJ1ZmZlcjpudWxsLCBiaW5kOmZ1bmN0aW9uKCl7fSwgY2xlYXI6ZnVuY3Rpb24oKXt9LCByZXNpemU6ZnVuY3Rpb24oKXt9fS8vbmV3IEdMRnJhbWVidWZmZXIuY3JlYXRlUkdCQShnbCwgMTAwLCAxMDApO1xuXG5cblxuICAgIGlmICghdGhpcy5yb290KVxuICAgIHtcbiAgICAgICAgLypcbiAgICAgICAgICAgIEEgZnJhbWUgYnVmZmVyIG5lZWRzIGEgdGFyZ2V0IHRvIHJlbmRlciB0by4uXG4gICAgICAgICAgICBjcmVhdGUgYSB0ZXh0dXJlIGFuZCBiaW5kIGl0IGF0dGFjaCBpdCB0byB0aGUgZnJhbWVidWZmZXIuLlxuICAgICAgICAgKi9cbiAgICAgICAgXG4gICAgICAgIC8vIGNyZWF0ZSBhIHRleHR1cmUgdG8gYmluZCBhdHRhY2ggdG8gdGhlIGZyYW1lQnVmZmVyLi5cbiAgICAgICAgdmFyIHRleHR1cmUgPSBuZXcgR0xUZXh0dXJlKGdsKTtcblxuICAgICAgICB0ZXh0dXJlLmVuYWJsZUxpbmVhclNjYWxpbmcoKVxuICAgICAgICB0ZXh0dXJlLmVuYWJsZVdyYXBDbGFtcCgpXG5cbiAgICAgICAgdGhpcy5mcmFtZUJ1ZmZlci5lbmFibGVUZXh0dXJlKHRleHR1cmUpO1xuXG4gICAgICAgIC8vIFRPRE8gY2hhbmdlIVxuICAgICAgICAvLyB0aGlzIGlzIHVzZWQgYnkgdGhlIGJhc2UgdGV4dHVyZVxuICAgICAgICB0aGlzLnRleHR1cmUgPSB0ZXh0dXJlLnRleHR1cmU7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIC8vIG1ha2UgaXQgYSBudWxsIGZyYW1lYnVmZmVyLi5cbiAgICAgICAgdGhpcy5mcmFtZUJ1ZmZlci5mcmFtZWJ1ZmZlciA9IG51bGw7XG4gICAgfVxuXG4gICAgdGhpcy5yZXNpemUod2lkdGgsIGhlaWdodCk7XG59O1xuXG5SZW5kZXJUYXJnZXQucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gUmVuZGVyVGFyZ2V0O1xubW9kdWxlLmV4cG9ydHMgPSBSZW5kZXJUYXJnZXQ7XG5cbi8qKlxuICogQ2xlYXJzIHRoZSBmaWx0ZXIgdGV4dHVyZS5cbiAqXG4gKiBAcGFyYW0gW2JpbmQ9ZmFsc2VdIHtib29sZWFufSBTaG91bGQgd2UgYmluZCBvdXIgZnJhbWVidWZmZXIgYmVmb3JlIGNsZWFyaW5nP1xuICovXG5SZW5kZXJUYXJnZXQucHJvdG90eXBlLmNsZWFyID0gZnVuY3Rpb24oY2xlYXJDb2xvcilcbntcbiAgICB2YXIgY2MgPSBjbGVhckNvbG9yIHx8IHRoaXMuY2xlYXJDb2xvclxuICAgIHRoaXMuZnJhbWVCdWZmZXIuY2xlYXIoY2NbMF0sY2NbMV0sY2NbMl0sY2NbM10pLy9yLGcsYixhKTtcbn07XG5cbi8qKlxuICogQmluZHMgdGhlIHN0ZW5jaWwgYnVmZmVyLlxuICpcbiAqL1xuUmVuZGVyVGFyZ2V0LnByb3RvdHlwZS5hdHRhY2hTdGVuY2lsQnVmZmVyID0gZnVuY3Rpb24oKVxue1xuICAgIC8vVE9ETyBjaGVjayBpZiBzdGVuY2lsIGlzIGRvbmU/XG4gICAgLyoqXG4gICAgICogVGhlIHN0ZW5jaWwgYnVmZmVyIGlzIHVzZWQgZm9yIG1hc2tpbmcgaW4gcGl4aVxuICAgICAqIGxldHMgY3JlYXRlIG9uZSBhbmQgdGhlbiBhZGQgYXR0YWNoIGl0IHRvIHRoZSBmcmFtZWJ1ZmZlci4uXG4gICAgICovXG4gICAgaWYgKCF0aGlzLnJvb3QpXG4gICAge1xuICAgICAgICB0aGlzLmZyYW1lQnVmZmVyLmVuYWJsZVN0ZW5jaWwoKTtcbiAgICB9XG59O1xuXG4vKipcbiAqIEJpbmRzIHRoZSBidWZmZXJzIGFuZCBpbml0aWFsaXNlcyB0aGUgdmlld3BvcnQuXG4gKlxuICovXG5SZW5kZXJUYXJnZXQucHJvdG90eXBlLmFjdGl2YXRlID0gZnVuY3Rpb24oKVxue1xuICAgIC8vVE9PRCByZWZhY3RvciB1c2FnZSBvZiBmcmFtZS4uXG4gICAgdmFyIGdsID0gdGhpcy5nbDtcblxuICAgIHRoaXMuZnJhbWVCdWZmZXIuYmluZCgpO1xuXG5cbiAgICB2YXIgcHJvamVjdGlvbkZyYW1lID0gdGhpcy5mcmFtZSB8fCB0aGlzLnNpemU7XG5cbiAgICAvLyBUT0RPIGFkZCBhIGRpcnR5IGZsYWcgdG8gdGhpcyBvZiBhIHNldHRlciBmb3IgdGhlIGZyYW1lP1xuICAgIHRoaXMuY2FsY3VsYXRlUHJvamVjdGlvbiggcHJvamVjdGlvbkZyYW1lICk7XG5cbiAgICBpZih0aGlzLnRyYW5zZm9ybSlcbiAgICB7XG4gICAgICAgIHRoaXMucHJvamVjdGlvbk1hdHJpeC5hcHBlbmQodGhpcy50cmFuc2Zvcm0pO1xuICAgIH1cblxuICAgIGdsLnZpZXdwb3J0KDAsMCwgcHJvamVjdGlvbkZyYW1lLndpZHRoICogdGhpcy5yZXNvbHV0aW9uLCBwcm9qZWN0aW9uRnJhbWUuaGVpZ2h0ICogdGhpcy5yZXNvbHV0aW9uKTtcbn07XG5cbi8qKlxuICogVXBkYXRlcyB0aGUgcHJvamVjdGlvbiBtYXRyaXggYmFzZWQgb24gYSBwcm9qZWN0aW9uIGZyYW1lICh3aGljaCBpcyBhIHJlY3RhbmdsZSlcbiAqXG4gKi9cblJlbmRlclRhcmdldC5wcm90b3R5cGUuY2FsY3VsYXRlUHJvamVjdGlvbiA9IGZ1bmN0aW9uIChwcm9qZWN0aW9uRnJhbWUpXG57XG4gICAgdmFyIHBtID0gdGhpcy5wcm9qZWN0aW9uTWF0cml4O1xuXG4gICAgcG0uaWRlbnRpdHkoKTtcblxuICAgIGlmICghdGhpcy5yb290KVxuICAgIHtcbiAgICAgICAgcG0uYSA9IDEgLyBwcm9qZWN0aW9uRnJhbWUud2lkdGgqMjtcbiAgICAgICAgcG0uZCA9IDEgLyBwcm9qZWN0aW9uRnJhbWUuaGVpZ2h0KjI7XG5cbiAgICAgICAgcG0udHggPSAtMSAtIHByb2plY3Rpb25GcmFtZS54ICogcG0uYTtcbiAgICAgICAgcG0udHkgPSAtMSAtIHByb2plY3Rpb25GcmFtZS55ICogcG0uZDtcbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgcG0uYSA9IDEgLyBwcm9qZWN0aW9uRnJhbWUud2lkdGgqMjtcbiAgICAgICAgcG0uZCA9IC0xIC8gcHJvamVjdGlvbkZyYW1lLmhlaWdodCoyO1xuXG4gICAgICAgIHBtLnR4ID0gLTEgLSBwcm9qZWN0aW9uRnJhbWUueCAqIHBtLmE7XG4gICAgICAgIHBtLnR5ID0gMSAtIHByb2plY3Rpb25GcmFtZS55ICogcG0uZDtcbiAgICB9XG59O1xuXG4vKipcbiAqIFJlc2l6ZXMgdGhlIHRleHR1cmUgdG8gdGhlIHNwZWNpZmllZCB3aWR0aCBhbmQgaGVpZ2h0XG4gKlxuICogQHBhcmFtIHdpZHRoIHtOdW1iZXJ9IHRoZSBuZXcgd2lkdGggb2YgdGhlIHRleHR1cmVcbiAqIEBwYXJhbSBoZWlnaHQge051bWJlcn0gdGhlIG5ldyBoZWlnaHQgb2YgdGhlIHRleHR1cmVcbiAqL1xuUmVuZGVyVGFyZ2V0LnByb3RvdHlwZS5yZXNpemUgPSBmdW5jdGlvbiAod2lkdGgsIGhlaWdodClcbntcbiAgICB3aWR0aCA9IHdpZHRoIHwgMDtcbiAgICBoZWlnaHQgPSBoZWlnaHQgfCAwO1xuXG4gICAgaWYgKHRoaXMuc2l6ZS53aWR0aCA9PT0gd2lkdGggJiYgdGhpcy5zaXplLmhlaWdodCA9PT0gaGVpZ2h0KSBcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLnNpemUud2lkdGggPSB3aWR0aDtcbiAgICB0aGlzLnNpemUuaGVpZ2h0ID0gaGVpZ2h0O1xuXG4gICAgdGhpcy5mcmFtZUJ1ZmZlci5yZXNpemUod2lkdGggKiB0aGlzLnJlc29sdXRpb24sIGhlaWdodCAqIHRoaXMucmVzb2x1dGlvbik7XG4gICAgXG4gICAgdmFyIHByb2plY3Rpb25GcmFtZSA9IHRoaXMuZnJhbWUgfHwgdGhpcy5zaXplO1xuXG4gICAgdGhpcy5jYWxjdWxhdGVQcm9qZWN0aW9uKCBwcm9qZWN0aW9uRnJhbWUgKTtcbn07XG5cbi8qKlxuICogRGVzdHJveXMgdGhlIHJlbmRlciB0YXJnZXQuXG4gKlxuICovXG5SZW5kZXJUYXJnZXQucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoKVxue1xuICAgIHZhciBnbCA9IHRoaXMuZ2w7XG4gICAgXG4gICAgdGhpcy5mcmFtZUJ1ZmZlci5kZXN0cm95KCk7XG5cbiAgICB0aGlzLmZyYW1lQnVmZmVyID0gbnVsbDtcbiAgICB0aGlzLnRleHR1cmUgPSBudWxsO1xufTtcbiIsIi8qKlxuICogR2VuZXJpYyBNYXNrIFN0YWNrIGRhdGEgc3RydWN0dXJlXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKi9cbmZ1bmN0aW9uIFN0ZW5jaWxNYXNrU3RhY2soKVxue1xuXHQvKipcbiAgICAgKiBUaGUgYWN0dWFsIHN0YWNrXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHthbnlbXX1cbiAgICAgKi9cbiAgICB0aGlzLnN0ZW5jaWxTdGFjayA9IFtdO1xuXG4gICAgLyoqXG4gICAgICogVE9ETyBAYWx2aW5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICovXG4gICAgdGhpcy5yZXZlcnNlID0gdHJ1ZTtcblxuICAgIC8qKlxuICAgICAqIEludGVybmFsIGNvdW50XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy5jb3VudCA9IDA7XG59XG5cblN0ZW5jaWxNYXNrU3RhY2sucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gU3RlbmNpbE1hc2tTdGFjaztcbm1vZHVsZS5leHBvcnRzID0gU3RlbmNpbE1hc2tTdGFjaztcbiIsIkNPTlNUID0gcmVxdWlyZSgnLi4vLi4vLi4vY29uc3QnKTtcblxuLyoqXG4gKiBNYXBzIGdsIGJsZW5kIGNvbWJpbmF0aW9ucyB0byBXZWJHTFxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICovXG5mdW5jdGlvbiBtYXBXZWJHTEJsZW5kTW9kZXNUb1BpeGkoZ2wsIG9iamVjdClcbntcbiAgICBvYmplY3QgPSBvYmplY3QgfHwge307XG5cbiAgICAvL1RPRE8gLSBwcmVtdWx0aXBseSBhbHBoYSB3b3VsZCBiZSBkaWZmZXJlbnQuXG4gICAgLy9hZGQgYSBib29sZWFuIGZvciB0aGF0IVxuICAgIG9iamVjdFtDT05TVC5CTEVORF9NT0RFUy5OT1JNQUxdICAgICAgICA9IFtnbC5PTkUsICAgICAgIGdsLk9ORV9NSU5VU19TUkNfQUxQSEFdO1xuICAgIG9iamVjdFtDT05TVC5CTEVORF9NT0RFUy5BRERdICAgICAgICAgICA9IFtnbC5TUkNfQUxQSEEsIGdsLkRTVF9BTFBIQV07XG4gICAgb2JqZWN0W0NPTlNULkJMRU5EX01PREVTLk1VTFRJUExZXSAgICAgID0gW2dsLkRTVF9DT0xPUiwgZ2wuT05FX01JTlVTX1NSQ19BTFBIQV07XG4gICAgb2JqZWN0W0NPTlNULkJMRU5EX01PREVTLlNDUkVFTl0gICAgICAgID0gW2dsLlNSQ19BTFBIQSwgZ2wuT05FXTtcbiAgICBvYmplY3RbQ09OU1QuQkxFTkRfTU9ERVMuT1ZFUkxBWV0gICAgICAgPSBbZ2wuT05FLCAgICAgICBnbC5PTkVfTUlOVVNfU1JDX0FMUEhBXTtcbiAgICBvYmplY3RbQ09OU1QuQkxFTkRfTU9ERVMuREFSS0VOXSAgICAgICAgPSBbZ2wuT05FLCAgICAgICBnbC5PTkVfTUlOVVNfU1JDX0FMUEhBXTtcbiAgICBvYmplY3RbQ09OU1QuQkxFTkRfTU9ERVMuTElHSFRFTl0gICAgICAgPSBbZ2wuT05FLCAgICAgICBnbC5PTkVfTUlOVVNfU1JDX0FMUEhBXTtcbiAgICBvYmplY3RbQ09OU1QuQkxFTkRfTU9ERVMuQ09MT1JfRE9ER0VdICAgPSBbZ2wuT05FLCAgICAgICBnbC5PTkVfTUlOVVNfU1JDX0FMUEhBXTtcbiAgICBvYmplY3RbQ09OU1QuQkxFTkRfTU9ERVMuQ09MT1JfQlVSTl0gICAgPSBbZ2wuT05FLCAgICAgICBnbC5PTkVfTUlOVVNfU1JDX0FMUEhBXTtcbiAgICBvYmplY3RbQ09OU1QuQkxFTkRfTU9ERVMuSEFSRF9MSUdIVF0gICAgPSBbZ2wuT05FLCAgICAgICBnbC5PTkVfTUlOVVNfU1JDX0FMUEhBXTtcbiAgICBvYmplY3RbQ09OU1QuQkxFTkRfTU9ERVMuU09GVF9MSUdIVF0gICAgPSBbZ2wuT05FLCAgICAgICBnbC5PTkVfTUlOVVNfU1JDX0FMUEhBXTtcbiAgICBvYmplY3RbQ09OU1QuQkxFTkRfTU9ERVMuRElGRkVSRU5DRV0gICAgPSBbZ2wuT05FLCAgICAgICBnbC5PTkVfTUlOVVNfU1JDX0FMUEhBXTtcbiAgICBvYmplY3RbQ09OU1QuQkxFTkRfTU9ERVMuRVhDTFVTSU9OXSAgICAgPSBbZ2wuT05FLCAgICAgICBnbC5PTkVfTUlOVVNfU1JDX0FMUEhBXTtcbiAgICBvYmplY3RbQ09OU1QuQkxFTkRfTU9ERVMuSFVFXSAgICAgICAgICAgPSBbZ2wuT05FLCAgICAgICBnbC5PTkVfTUlOVVNfU1JDX0FMUEhBXTtcbiAgICBvYmplY3RbQ09OU1QuQkxFTkRfTU9ERVMuU0FUVVJBVElPTl0gICAgPSBbZ2wuT05FLCAgICAgICBnbC5PTkVfTUlOVVNfU1JDX0FMUEhBXTtcbiAgICBvYmplY3RbQ09OU1QuQkxFTkRfTU9ERVMuQ09MT1JdICAgICAgICAgPSBbZ2wuT05FLCAgICAgICBnbC5PTkVfTUlOVVNfU1JDX0FMUEhBXTtcbiAgICBvYmplY3RbQ09OU1QuQkxFTkRfTU9ERVMuTFVNSU5PU0lUWV0gICAgPSBbZ2wuT05FLCAgICAgICBnbC5PTkVfTUlOVVNfU1JDX0FMUEhBXTtcblxuICAgIHJldHVybiBvYmplY3Q7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gbWFwV2ViR0xCbGVuZE1vZGVzVG9QaXhpO1xuIiwiQ09OU1QgPSByZXF1aXJlKCcuLi8uLi8uLi9jb25zdCcpO1xuXG4vKipcbiAqIEdlbmVyaWMgTWFzayBTdGFjayBkYXRhIHN0cnVjdHVyZVxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICovXG5mdW5jdGlvbiBtYXBXZWJHTERyYXdNb2Rlc1RvUGl4aShnbCwgb2JqZWN0KVxue1xuXHRvYmplY3Q9IG9iamVjdCB8fCB7fTtcblxuICAgIG9iamVjdFtDT05TVC5EUkFXX01PREVTLlBPSU5UU10gICAgICAgICA9IGdsLlBPSU5UUztcbiAgICBvYmplY3RbQ09OU1QuRFJBV19NT0RFUy5MSU5FU10gICAgICAgICAgPSBnbC5MSU5FUztcbiAgICBvYmplY3RbQ09OU1QuRFJBV19NT0RFUy5MSU5FX0xPT1BdICAgICAgPSBnbC5MSU5FX0xPT1A7XG4gICAgb2JqZWN0W0NPTlNULkRSQVdfTU9ERVMuTElORV9TVFJJUF0gICAgID0gZ2wuTElORV9TVFJJUDtcbiAgICBvYmplY3RbQ09OU1QuRFJBV19NT0RFUy5UUklBTkdMRVNdICAgICAgPSBnbC5UUklBTkdMRVM7XG4gICAgb2JqZWN0W0NPTlNULkRSQVdfTU9ERVMuVFJJQU5HTEVfU1RSSVBdID0gZ2wuVFJJQU5HTEVfU1RSSVA7XG4gICAgb2JqZWN0W0NPTlNULkRSQVdfTU9ERVMuVFJJQU5HTEVfRkFOXSAgID0gZ2wuVFJJQU5HTEVfRkFOO1xuXG59XG5cbm1vZHVsZS5leHBvcnRzID0gbWFwV2ViR0xEcmF3TW9kZXNUb1BpeGk7XG4iLCJ2YXIgbWF0aCA9IHJlcXVpcmUoJy4uL21hdGgnKSxcbiAgICBUZXh0dXJlID0gcmVxdWlyZSgnLi4vdGV4dHVyZXMvVGV4dHVyZScpLFxuICAgIENvbnRhaW5lciA9IHJlcXVpcmUoJy4uL2Rpc3BsYXkvQ29udGFpbmVyJyksXG4gICAgQ2FudmFzVGludGVyID0gcmVxdWlyZSgnLi4vcmVuZGVyZXJzL2NhbnZhcy91dGlscy9DYW52YXNUaW50ZXInKSxcbiAgICB1dGlscyA9IHJlcXVpcmUoJy4uL3V0aWxzJyksXG4gICAgQ09OU1QgPSByZXF1aXJlKCcuLi9jb25zdCcpLFxuICAgIHRlbXBQb2ludCA9IG5ldyBtYXRoLlBvaW50KCk7XG5cbi8qKlxuICogVGhlIFNwcml0ZSBvYmplY3QgaXMgdGhlIGJhc2UgZm9yIGFsbCB0ZXh0dXJlZCBvYmplY3RzIHRoYXQgYXJlIHJlbmRlcmVkIHRvIHRoZSBzY3JlZW5cbiAqXG4gKiBBIHNwcml0ZSBjYW4gYmUgY3JlYXRlZCBkaXJlY3RseSBmcm9tIGFuIGltYWdlIGxpa2UgdGhpczpcbiAqXG4gKiBgYGBqc1xuICogdmFyIHNwcml0ZSA9IG5ldyBQSVhJLlNwcml0ZS5mcm9tSW1hZ2UoJ2Fzc2V0cy9pbWFnZS5wbmcnKTtcbiAqIGBgYFxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5Db250YWluZXJcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gdGV4dHVyZSB7UElYSS5UZXh0dXJlfSBUaGUgdGV4dHVyZSBmb3IgdGhpcyBzcHJpdGVcbiAqL1xuZnVuY3Rpb24gU3ByaXRlKHRleHR1cmUpXG57XG4gICAgQ29udGFpbmVyLmNhbGwodGhpcyk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYW5jaG9yIHNldHMgdGhlIG9yaWdpbiBwb2ludCBvZiB0aGUgdGV4dHVyZS5cbiAgICAgKiBUaGUgZGVmYXVsdCBpcyAwLDAgdGhpcyBtZWFucyB0aGUgdGV4dHVyZSdzIG9yaWdpbiBpcyB0aGUgdG9wIGxlZnRcbiAgICAgKiBTZXR0aW5nIHRoZSBhbmNob3IgdG8gMC41LDAuNSBtZWFucyB0aGUgdGV4dHVyZSdzIG9yaWdpbiBpcyBjZW50ZXJlZFxuICAgICAqIFNldHRpbmcgdGhlIGFuY2hvciB0byAxLDEgd291bGQgbWVhbiB0aGUgdGV4dHVyZSdzIG9yaWdpbiBwb2ludCB3aWxsIGJlIHRoZSBib3R0b20gcmlnaHQgY29ybmVyXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlBvaW50fVxuICAgICAqL1xuICAgIHRoaXMuYW5jaG9yID0gbmV3IG1hdGguUG9pbnQoKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSB0ZXh0dXJlIHRoYXQgdGhlIHNwcml0ZSBpcyB1c2luZ1xuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5UZXh0dXJlfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fdGV4dHVyZSA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgd2lkdGggb2YgdGhlIHNwcml0ZSAodGhpcyBpcyBpbml0aWFsbHkgc2V0IGJ5IHRoZSB0ZXh0dXJlKVxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fd2lkdGggPSAwO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGhlaWdodCBvZiB0aGUgc3ByaXRlICh0aGlzIGlzIGluaXRpYWxseSBzZXQgYnkgdGhlIHRleHR1cmUpXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9oZWlnaHQgPSAwO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHRpbnQgYXBwbGllZCB0byB0aGUgc3ByaXRlLiBUaGlzIGlzIGEgaGV4IHZhbHVlLiBBIHZhbHVlIG9mIDB4RkZGRkZGIHdpbGwgcmVtb3ZlIGFueSB0aW50IGVmZmVjdC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAweEZGRkZGRlxuICAgICAqL1xuICAgIHRoaXMudGludCA9IDB4RkZGRkZGO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGJsZW5kIG1vZGUgdG8gYmUgYXBwbGllZCB0byB0aGUgc3ByaXRlLiBBcHBseSBhIHZhbHVlIG9mIGBQSVhJLkJMRU5EX01PREVTLk5PUk1BTGAgdG8gcmVzZXQgdGhlIGJsZW5kIG1vZGUuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgUElYSS5CTEVORF9NT0RFUy5OT1JNQUxcbiAgICAgKiBAc2VlIFBJWEkuQkxFTkRfTU9ERVNcbiAgICAgKi9cbiAgICB0aGlzLmJsZW5kTW9kZSA9IENPTlNULkJMRU5EX01PREVTLk5PUk1BTDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBzaGFkZXIgdGhhdCB3aWxsIGJlIHVzZWQgdG8gcmVuZGVyIHRoZSBzcHJpdGUuIFNldCB0byBudWxsIHRvIHJlbW92ZSBhIGN1cnJlbnQgc2hhZGVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5BYnN0cmFjdEZpbHRlcnxQSVhJLlNoYWRlcn1cbiAgICAgKi9cbiAgICB0aGlzLnNoYWRlciA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBBbiBpbnRlcm5hbCBjYWNoZWQgdmFsdWUgb2YgdGhlIHRpbnQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMHhGRkZGRkZcbiAgICAgKi9cbiAgICB0aGlzLmNhY2hlZFRpbnQgPSAweEZGRkZGRjtcblxuICAgIC8vIGNhbGwgdGV4dHVyZSBzZXR0ZXJcbiAgICB0aGlzLnRleHR1cmUgPSB0ZXh0dXJlIHx8IFRleHR1cmUuRU1QVFk7XG4gICAgdGhpcy50ZXh0dXJlRGlydHkgPSB0cnVlXG4gICAgdGhpcy52ZXJ0ZXhEaXJ0eSA9IHRydWU7XG4gICAgdGhpcy52ZXJ0ZXhEYXRhID0gbmV3IEZsb2F0MzJBcnJheSg4KTtcbn1cblxuLy8gY29uc3RydWN0b3JcblNwcml0ZS5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKENvbnRhaW5lci5wcm90b3R5cGUpO1xuU3ByaXRlLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFNwcml0ZTtcbm1vZHVsZS5leHBvcnRzID0gU3ByaXRlO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhTcHJpdGUucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogVGhlIHdpZHRoIG9mIHRoZSBzcHJpdGUsIHNldHRpbmcgdGhpcyB3aWxsIGFjdHVhbGx5IG1vZGlmeSB0aGUgc2NhbGUgdG8gYWNoaWV2ZSB0aGUgdmFsdWUgc2V0XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuU3ByaXRlI1xuICAgICAqL1xuICAgIHdpZHRoOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIE1hdGguYWJzKHRoaXMuc2NhbGUueCkgKiB0aGlzLnRleHR1cmUuX2ZyYW1lLndpZHRoO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdmFyIHNpZ24gPSB1dGlscy5zaWduKHRoaXMuc2NhbGUueCkgfHwgMTtcbiAgICAgICAgICAgIHRoaXMuc2NhbGUueCA9IHNpZ24gKiB2YWx1ZSAvIHRoaXMudGV4dHVyZS5fZnJhbWUud2lkdGg7XG4gICAgICAgICAgICB0aGlzLl93aWR0aCA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFRoZSBoZWlnaHQgb2YgdGhlIHNwcml0ZSwgc2V0dGluZyB0aGlzIHdpbGwgYWN0dWFsbHkgbW9kaWZ5IHRoZSBzY2FsZSB0byBhY2hpZXZlIHRoZSB2YWx1ZSBzZXRcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5TcHJpdGUjXG4gICAgICovXG4gICAgaGVpZ2h0OiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuICBNYXRoLmFicyh0aGlzLnNjYWxlLnkpICogdGhpcy50ZXh0dXJlLl9mcmFtZS5oZWlnaHQ7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB2YXIgc2lnbiA9IHV0aWxzLnNpZ24odGhpcy5zY2FsZS55KSB8fCAxO1xuICAgICAgICAgICAgdGhpcy5zY2FsZS55ID0gc2lnbiAqIHZhbHVlIC8gdGhpcy50ZXh0dXJlLl9mcmFtZS5oZWlnaHQ7XG4gICAgICAgICAgICB0aGlzLl9oZWlnaHQgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBUaGUgdGV4dHVyZSB0aGF0IHRoZSBzcHJpdGUgaXMgdXNpbmdcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuVGV4dHVyZX1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5TcHJpdGUjXG4gICAgICovXG4gICAgdGV4dHVyZToge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiAgdGhpcy5fdGV4dHVyZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGlmICh0aGlzLl90ZXh0dXJlID09PSB2YWx1ZSlcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuX3RleHR1cmUgPSB2YWx1ZTtcbiAgICAgICAgICAgIHRoaXMuY2FjaGVkVGludCA9IDB4RkZGRkZGO1xuXG4gICAgICAgICAgICB0aGlzLnRleHR1cmVEaXJ0eSA9IHRydWU7XG5cbiAgICAgICAgICAgIGlmICh2YWx1ZSlcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAvLyB3YWl0IGZvciB0aGUgdGV4dHVyZSB0byBsb2FkXG4gICAgICAgICAgICAgICAgaWYgKHZhbHVlLmJhc2VUZXh0dXJlLmhhc0xvYWRlZClcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX29uVGV4dHVyZVVwZGF0ZSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICB2YWx1ZS5vbmNlKCd1cGRhdGUnLCB0aGlzLl9vblRleHR1cmVVcGRhdGUsIHRoaXMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn0pO1xuXG4vKipcbiAqIFdoZW4gdGhlIHRleHR1cmUgaXMgdXBkYXRlZCwgdGhpcyBldmVudCB3aWxsIGZpcmUgdG8gdXBkYXRlIHRoZSBzY2FsZSBhbmQgZnJhbWVcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5TcHJpdGUucHJvdG90eXBlLl9vblRleHR1cmVVcGRhdGUgPSBmdW5jdGlvbiAoKVxue1xuICAgIHRoaXMudGV4dHVyZURpcnR5ID0gdHJ1ZTtcblxuICAgIC8vIHNvIGlmIF93aWR0aCBpcyAwIHRoZW4gd2lkdGggd2FzIG5vdCBzZXQuLlxuICAgIGlmICh0aGlzLl93aWR0aClcbiAgICB7XG4gICAgICAgIHRoaXMuc2NhbGUueCA9IHV0aWxzLnNpZ24odGhpcy5zY2FsZS54KSAqIHRoaXMuX3dpZHRoIC8gdGhpcy50ZXh0dXJlLmZyYW1lLndpZHRoO1xuICAgIH1cblxuICAgIGlmICh0aGlzLl9oZWlnaHQpXG4gICAge1xuICAgICAgICB0aGlzLnNjYWxlLnkgPSB1dGlscy5zaWduKHRoaXMuc2NhbGUueSkgKiB0aGlzLl9oZWlnaHQgLyB0aGlzLnRleHR1cmUuZnJhbWUuaGVpZ2h0O1xuICAgIH1cbn07XG5cblNwcml0ZS5wcm90b3R5cGUuY2FjbHVsYXRlVmVydGljZXMgPSBmdW5jdGlvbiAoKVxue1xuXG4gICAgdmFyIHRleHR1cmUgPSB0aGlzLl90ZXh0dXJlLFxuICAgICAgICB3dCA9IHRoaXMud29ybGRUcmFuc2Zvcm0sXG4gICAgICAgIGEgPSB3dC5hLCBiID0gd3QuYiwgYyA9IHd0LmMsIGQgPSB3dC5kLCB0eCA9IHd0LnR4LCB0eSA9IHd0LnR5LFxuICAgICAgICB2ZXJ0ZXhEYXRhID0gdGhpcy52ZXJ0ZXhEYXRhLFxuICAgICAgICB3MCwgdzEsIGgwLCBoMSxcbiAgICAgICAgdHJpbSA9IHRleHR1cmUudHJpbTtcbiAgICBcbiAgICBpZiAodHJpbSlcbiAgICB7XG4gICAgICAgIC8vIGlmIHRoZSBzcHJpdGUgaXMgdHJpbW1lZCBhbmQgaXMgbm90IGEgdGlsaW5nc3ByaXRlIHRoZW4gd2UgbmVlZCB0byBhZGQgdGhlIGV4dHJhIHNwYWNlIGJlZm9yZSB0cmFuc2Zvcm1pbmcgdGhlIHNwcml0ZSBjb29yZHMuLlxuICAgICAgICB3MSA9IHRyaW0ueCAtIHRoaXMuYW5jaG9yLnggKiB0cmltLndpZHRoO1xuICAgICAgICB3MCA9IHcxICsgdGV4dHVyZS5jcm9wLndpZHRoO1xuXG4gICAgICAgIGgxID0gdHJpbS55IC0gdGhpcy5hbmNob3IueSAqIHRyaW0uaGVpZ2h0O1xuICAgICAgICBoMCA9IGgxICsgdGV4dHVyZS5jcm9wLmhlaWdodDtcblxuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICB3MCA9ICh0ZXh0dXJlLl9mcmFtZS53aWR0aCApICogKDEtdGhpcy5hbmNob3IueCk7XG4gICAgICAgIHcxID0gKHRleHR1cmUuX2ZyYW1lLndpZHRoICkgKiAtdGhpcy5hbmNob3IueDtcblxuICAgICAgICBoMCA9IHRleHR1cmUuX2ZyYW1lLmhlaWdodCAqICgxLXRoaXMuYW5jaG9yLnkpO1xuICAgICAgICBoMSA9IHRleHR1cmUuX2ZyYW1lLmhlaWdodCAqIC10aGlzLmFuY2hvci55O1xuICAgIH1cblxuICAgIC8vIHh5XG4gICAgdmVydGV4RGF0YVswXSA9IGEgKiB3MSArIGMgKiBoMSArIHR4O1xuICAgIHZlcnRleERhdGFbMV0gPSBkICogaDEgKyBiICogdzEgKyB0eTtcblxuICAgIC8vIHh5XG4gICAgdmVydGV4RGF0YVsyXSA9IGEgKiB3MCArIGMgKiBoMSArIHR4O1xuICAgIHZlcnRleERhdGFbM10gPSBkICogaDEgKyBiICogdzAgKyB0eTtcblxuICAgICAvLyB4eVxuICAgIHZlcnRleERhdGFbNF0gPSBhICogdzAgKyBjICogaDAgKyB0eDtcbiAgICB2ZXJ0ZXhEYXRhWzVdID0gZCAqIGgwICsgYiAqIHcwICsgdHk7XG5cbiAgICAvLyB4eVxuICAgIHZlcnRleERhdGFbNl0gPSBhICogdzEgKyBjICogaDAgKyB0eDtcbiAgICB2ZXJ0ZXhEYXRhWzddID0gZCAqIGgwICsgYiAqIHcxICsgdHk7XG5cblxufVxuXG4vKipcbipcbiogUmVuZGVycyB0aGUgb2JqZWN0IHVzaW5nIHRoZSBXZWJHTCByZW5kZXJlclxuKlxuKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcn1cbiogQHByaXZhdGVcbiovXG5TcHJpdGUucHJvdG90eXBlLl9yZW5kZXJXZWJHTCA9IGZ1bmN0aW9uIChyZW5kZXJlcilcbntcbiAgICBpZih0aGlzLnRleHR1cmVEaXJ0eSlcbiAgICB7XG4gICAgICAgIHRoaXMudGV4dHVyZURpcnR5ID0gZmFsc2U7XG5cbiAgICAgICAgdGhpcy5fb25UZXh0dXJlVXBkYXRlKCk7XG4gICAgICAgIFxuICAgICAgICB0aGlzLnZlcnRleERpcnR5ID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBpZih0aGlzLnZlcnRleERpcnR5KVxuICAgIHtcbiAgICAgICAgdGhpcy52ZXJ0ZXhEaXJ0eSA9IGZhbHNlO1xuXG4gICAgICAgIC8vIHNldCB0aGUgdmVydGV4IGRhdGFcbiAgICAgICAgdGhpcy5jYWNsdWxhdGVWZXJ0aWNlcygpO1xuXG4gICAgfVxuICAgIFxuICAgIHJlbmRlcmVyLnNldE9iamVjdFJlbmRlcmVyKHJlbmRlcmVyLnBsdWdpbnMuc3ByaXRlKTtcbiAgICByZW5kZXJlci5wbHVnaW5zLnNwcml0ZS5yZW5kZXIodGhpcyk7XG59O1xuXG4vKipcbiAqIFJldHVybnMgdGhlIGJvdW5kcyBvZiB0aGUgU3ByaXRlIGFzIGEgcmVjdGFuZ2xlLiBUaGUgYm91bmRzIGNhbGN1bGF0aW9uIHRha2VzIHRoZSB3b3JsZFRyYW5zZm9ybSBpbnRvIGFjY291bnQuXG4gKlxuICogQHBhcmFtIG1hdHJpeCB7UElYSS5NYXRyaXh9IHRoZSB0cmFuc2Zvcm1hdGlvbiBtYXRyaXggb2YgdGhlIHNwcml0ZVxuICogQHJldHVybiB7UElYSS5SZWN0YW5nbGV9IHRoZSBmcmFtaW5nIHJlY3RhbmdsZVxuICovXG5TcHJpdGUucHJvdG90eXBlLmdldEJvdW5kcyA9IGZ1bmN0aW9uIChtYXRyaXgpXG57XG4gICAgaWYoIXRoaXMuX2N1cnJlbnRCb3VuZHMpXG4gICAge1xuICAgICAgICBpZih0aGlzLnZlcnRleERpcnR5KVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnZlcnRleERpcnR5ID0gZmFsc2U7XG5cbiAgICAgICAgICAgIC8vIHNldCB0aGUgdmVydGV4IGRhdGFcbiAgICAgICAgICAgIHRoaXMuY2FjbHVsYXRlVmVydGljZXMoKTtcblxuICAgICAgICB9XG5cbiAgICAgICAgdmFyIG1pblgsXG4gICAgICAgICAgICBtYXhYLFxuICAgICAgICAgICAgbWluWSxcbiAgICAgICAgICAgIG1heFksXG4gICAgICAgICAgICB2ZXJ0ZXhEYXRhID0gdGhpcy52ZXJ0ZXhEYXRhO1xuXG4gICAgICAgIHZhciB4MSA9IHZlcnRleERhdGFbMF1cbiAgICAgICAgdmFyIHkxID0gdmVydGV4RGF0YVsxXVxuXG4gICAgICAgIHZhciB4MiA9IHZlcnRleERhdGFbMl1cbiAgICAgICAgdmFyIHkyID0gdmVydGV4RGF0YVszXVxuXG4gICAgICAgIHZhciB4MyA9IHZlcnRleERhdGFbNF1cbiAgICAgICAgdmFyIHkzID0gdmVydGV4RGF0YVs1XVxuXG4gICAgICAgIHZhciB4NCA9IHZlcnRleERhdGFbNl1cbiAgICAgICAgdmFyIHk0ID0gdmVydGV4RGF0YVs3XVxuXG4gICAgICAgIG1pblggPSB4MTtcbiAgICAgICAgbWluWCA9IHgyIDwgbWluWCA/IHgyIDogbWluWDtcbiAgICAgICAgbWluWCA9IHgzIDwgbWluWCA/IHgzIDogbWluWDtcbiAgICAgICAgbWluWCA9IHg0IDwgbWluWCA/IHg0IDogbWluWDtcblxuICAgICAgICBtaW5ZID0geTE7XG4gICAgICAgIG1pblkgPSB5MiA8IG1pblkgPyB5MiA6IG1pblk7XG4gICAgICAgIG1pblkgPSB5MyA8IG1pblkgPyB5MyA6IG1pblk7XG4gICAgICAgIG1pblkgPSB5NCA8IG1pblkgPyB5NCA6IG1pblk7XG5cbiAgICAgICAgbWF4WCA9IHgxO1xuICAgICAgICBtYXhYID0geDIgPiBtYXhYID8geDIgOiBtYXhYO1xuICAgICAgICBtYXhYID0geDMgPiBtYXhYID8geDMgOiBtYXhYO1xuICAgICAgICBtYXhYID0geDQgPiBtYXhYID8geDQgOiBtYXhYO1xuXG4gICAgICAgIG1heFkgPSB5MTtcbiAgICAgICAgbWF4WSA9IHkyID4gbWF4WSA/IHkyIDogbWF4WTtcbiAgICAgICAgbWF4WSA9IHkzID4gbWF4WSA/IHkzIDogbWF4WTtcbiAgICAgICAgbWF4WSA9IHk0ID4gbWF4WSA/IHk0IDogbWF4WTtcblxuICAgICAgICAvLyBjaGVjayBmb3IgY2hpbGRyZW5cbiAgICAgICAgaWYodGhpcy5jaGlsZHJlbi5sZW5ndGgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHZhciBjaGlsZEJvdW5kcyA9IHRoaXMuY29udGFpbmVyR2V0Qm91bmRzKCk7XG5cbiAgICAgICAgICAgIHcwID0gY2hpbGRCb3VuZHMueDtcbiAgICAgICAgICAgIHcxID0gY2hpbGRCb3VuZHMueCArIGNoaWxkQm91bmRzLndpZHRoO1xuICAgICAgICAgICAgaDAgPSBjaGlsZEJvdW5kcy55O1xuICAgICAgICAgICAgaDEgPSBjaGlsZEJvdW5kcy55ICsgY2hpbGRCb3VuZHMuaGVpZ2h0O1xuXG4gICAgICAgICAgICBtaW5YID0gKG1pblggPCB3MCkgPyBtaW5YIDogdzA7XG4gICAgICAgICAgICBtaW5ZID0gKG1pblkgPCBoMCkgPyBtaW5ZIDogaDA7XG5cbiAgICAgICAgICAgIG1heFggPSAobWF4WCA+IHcxKSA/IG1heFggOiB3MTtcbiAgICAgICAgICAgIG1heFkgPSAobWF4WSA+IGgxKSA/IG1heFkgOiBoMTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBib3VuZHMgPSB0aGlzLl9ib3VuZHM7XG5cbiAgICAgICAgYm91bmRzLnggPSBtaW5YO1xuICAgICAgICBib3VuZHMud2lkdGggPSBtYXhYIC0gbWluWDtcblxuICAgICAgICBib3VuZHMueSA9IG1pblk7XG4gICAgICAgIGJvdW5kcy5oZWlnaHQgPSBtYXhZIC0gbWluWTtcblxuICAgICAgICAvLyBzdG9yZSBhIHJlZmVyZW5jZSBzbyB0aGF0IGlmIHRoaXMgZnVuY3Rpb24gZ2V0cyBjYWxsZWQgYWdhaW4gaW4gdGhlIHJlbmRlciBjeWNsZSB3ZSBkbyBub3QgaGF2ZSB0byByZWNhbGN1bGF0ZVxuICAgICAgICB0aGlzLl9jdXJyZW50Qm91bmRzID0gYm91bmRzO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLl9jdXJyZW50Qm91bmRzO1xufTtcblxuLyoqXG4gKiBHZXRzIHRoZSBsb2NhbCBib3VuZHMgb2YgdGhlIHNwcml0ZSBvYmplY3QuXG4gKlxuICovXG5TcHJpdGUucHJvdG90eXBlLmdldExvY2FsQm91bmRzID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLl9ib3VuZHMueCA9IC10aGlzLl90ZXh0dXJlLl9mcmFtZS53aWR0aCAqIHRoaXMuYW5jaG9yLng7XG4gICAgdGhpcy5fYm91bmRzLnkgPSAtdGhpcy5fdGV4dHVyZS5fZnJhbWUuaGVpZ2h0ICogdGhpcy5hbmNob3IueTtcbiAgICB0aGlzLl9ib3VuZHMud2lkdGggPSB0aGlzLl90ZXh0dXJlLl9mcmFtZS53aWR0aDtcbiAgICB0aGlzLl9ib3VuZHMuaGVpZ2h0ID0gdGhpcy5fdGV4dHVyZS5fZnJhbWUuaGVpZ2h0O1xuICAgIHJldHVybiB0aGlzLl9ib3VuZHM7XG59O1xuXG4vKipcbiogVGVzdHMgaWYgYSBwb2ludCBpcyBpbnNpZGUgdGhpcyBzcHJpdGVcbipcbiogQHBhcmFtIHBvaW50IHtQSVhJLlBvaW50fSB0aGUgcG9pbnQgdG8gdGVzdFxuKiBAcmV0dXJuIHtib29sZWFufSB0aGUgcmVzdWx0IG9mIHRoZSB0ZXN0XG4qL1xuU3ByaXRlLnByb3RvdHlwZS5jb250YWluc1BvaW50ID0gZnVuY3Rpb24oIHBvaW50IClcbntcbiAgICB0aGlzLndvcmxkVHJhbnNmb3JtLmFwcGx5SW52ZXJzZShwb2ludCwgIHRlbXBQb2ludCk7XG5cbiAgICB2YXIgd2lkdGggPSB0aGlzLl90ZXh0dXJlLl9mcmFtZS53aWR0aDtcbiAgICB2YXIgaGVpZ2h0ID0gdGhpcy5fdGV4dHVyZS5fZnJhbWUuaGVpZ2h0O1xuICAgIHZhciB4MSA9IC13aWR0aCAqIHRoaXMuYW5jaG9yLng7XG4gICAgdmFyIHkxO1xuXG4gICAgaWYgKCB0ZW1wUG9pbnQueCA+IHgxICYmIHRlbXBQb2ludC54IDwgeDEgKyB3aWR0aCApXG4gICAge1xuICAgICAgICB5MSA9IC1oZWlnaHQgKiB0aGlzLmFuY2hvci55O1xuXG4gICAgICAgIGlmICggdGVtcFBvaW50LnkgPiB5MSAmJiB0ZW1wUG9pbnQueSA8IHkxICsgaGVpZ2h0IClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2U7XG59O1xuXG4vKipcbiogUmVuZGVycyB0aGUgb2JqZWN0IHVzaW5nIHRoZSBDYW52YXMgcmVuZGVyZXJcbipcbiogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLkNhbnZhc1JlbmRlcmVyfSBUaGUgcmVuZGVyZXJcbiogQHByaXZhdGVcbiovXG5TcHJpdGUucHJvdG90eXBlLl9yZW5kZXJDYW52YXMgPSBmdW5jdGlvbiAocmVuZGVyZXIpXG57XG4gICAgaWYgKHRoaXMudGV4dHVyZS5jcm9wLndpZHRoIDw9IDAgfHwgdGhpcy50ZXh0dXJlLmNyb3AuaGVpZ2h0IDw9IDApXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFyIGNvbXBvc2l0ZU9wZXJhdGlvbiA9IHJlbmRlcmVyLmJsZW5kTW9kZXNbdGhpcy5ibGVuZE1vZGVdO1xuICAgIGlmIChjb21wb3NpdGVPcGVyYXRpb24gIT09IHJlbmRlcmVyLmNvbnRleHQuZ2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uKVxuICAgIHtcbiAgICAgICAgcmVuZGVyZXIuY29udGV4dC5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb24gPSBjb21wb3NpdGVPcGVyYXRpb247XG4gICAgfVxuXG4gICAgLy8gIElnbm9yZSBudWxsIHNvdXJjZXNcbiAgICBpZiAodGhpcy50ZXh0dXJlLnZhbGlkKVxuICAgIHtcbiAgICAgICAgdmFyIHRleHR1cmUgPSB0aGlzLl90ZXh0dXJlLFxuICAgICAgICAgICAgd3QgPSB0aGlzLndvcmxkVHJhbnNmb3JtLFxuICAgICAgICAgICAgZHgsXG4gICAgICAgICAgICBkeSxcbiAgICAgICAgICAgIHdpZHRoLFxuICAgICAgICAgICAgaGVpZ2h0O1xuXG4gICAgICAgIHJlbmRlcmVyLmNvbnRleHQuZ2xvYmFsQWxwaGEgPSB0aGlzLndvcmxkQWxwaGE7XG5cbiAgICAgICAgLy8gSWYgc21vb3RoaW5nRW5hYmxlZCBpcyBzdXBwb3J0ZWQgYW5kIHdlIG5lZWQgdG8gY2hhbmdlIHRoZSBzbW9vdGhpbmcgcHJvcGVydHkgZm9yIHRoaXMgdGV4dHVyZVxuICAgICAgICB2YXIgc21vb3RoaW5nRW5hYmxlZCA9IHRleHR1cmUuYmFzZVRleHR1cmUuc2NhbGVNb2RlID09PSBDT05TVC5TQ0FMRV9NT0RFUy5MSU5FQVI7XG4gICAgICAgIGlmIChyZW5kZXJlci5zbW9vdGhQcm9wZXJ0eSAmJiByZW5kZXJlci5jb250ZXh0W3JlbmRlcmVyLnNtb290aFByb3BlcnR5XSAhPT0gc21vb3RoaW5nRW5hYmxlZClcbiAgICAgICAge1xuICAgICAgICAgICAgcmVuZGVyZXIuY29udGV4dFtyZW5kZXJlci5zbW9vdGhQcm9wZXJ0eV0gPSBzbW9vdGhpbmdFbmFibGVkO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gSWYgdGhlIHRleHR1cmUgaXMgdHJpbW1lZCB3ZSBvZmZzZXQgYnkgdGhlIHRyaW0geC95LCBvdGhlcndpc2Ugd2UgdXNlIHRoZSBmcmFtZSBkaW1lbnNpb25zXG5cbiAgICAgICAgaWYodGV4dHVyZS5yb3RhdGUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHdpZHRoID0gdGV4dHVyZS5jcm9wLmhlaWdodDtcbiAgICAgICAgICAgIGhlaWdodCA9IHRleHR1cmUuY3JvcC53aWR0aDtcblxuICAgICAgICAgICAgZHggPSAodGV4dHVyZS50cmltKSA/IHRleHR1cmUudHJpbS55IC0gdGhpcy5hbmNob3IueSAqIHRleHR1cmUudHJpbS5oZWlnaHQgOiB0aGlzLmFuY2hvci55ICogLXRleHR1cmUuX2ZyYW1lLmhlaWdodDtcbiAgICAgICAgICAgIGR5ID0gKHRleHR1cmUudHJpbSkgPyB0ZXh0dXJlLnRyaW0ueCAtIHRoaXMuYW5jaG9yLnggKiB0ZXh0dXJlLnRyaW0ud2lkdGggOiB0aGlzLmFuY2hvci54ICogLXRleHR1cmUuX2ZyYW1lLndpZHRoO1xuICAgICAgIFxuICAgICAgICAgICAgZHggKz0gd2lkdGg7XG5cbiAgICAgICAgICAgIHd0LnR4ID0gZHkgKiB3dC5hICsgZHggKiB3dC5jICsgd3QudHg7XG4gICAgICAgICAgICB3dC50eSA9IGR5ICogd3QuYiArIGR4ICogd3QuZCArIHd0LnR5O1xuXG4gICAgICAgICAgICB2YXIgdGVtcCA9IHd0LmE7XG4gICAgICAgICAgICB3dC5hICA9IC13dC5jO1xuICAgICAgICAgICAgd3QuYyAgPSAgdGVtcDtcblxuICAgICAgICAgICAgdGVtcCA9IHd0LmI7XG4gICAgICAgICAgICB3dC5iICA9IC13dC5kO1xuICAgICAgICAgICAgd3QuZCAgPSAgdGVtcDtcblxuICAgICAgICAgICAgLy8gdGhlIGFuY2hvciBoYXMgYWxyZWFkeSBiZWVuIGFwcGxpZWQgYWJvdmUsIHNvIGxldHMgc2V0IGl0IHRvIHplcm9cbiAgICAgICAgICAgIGR4ID0gMDtcbiAgICAgICAgICAgIGR5ID0gMDtcblxuICAgICAgICB9XG4gICAgICAgIGVsc2VcbiAgICAgICAge1xuICAgICAgICAgICAgd2lkdGggPSB0ZXh0dXJlLmNyb3Aud2lkdGg7XG4gICAgICAgICAgICBoZWlnaHQgPSB0ZXh0dXJlLmNyb3AuaGVpZ2h0O1xuXG4gICAgICAgICAgICBkeCA9ICh0ZXh0dXJlLnRyaW0pID8gdGV4dHVyZS50cmltLnggLSB0aGlzLmFuY2hvci54ICogdGV4dHVyZS50cmltLndpZHRoIDogdGhpcy5hbmNob3IueCAqIC10ZXh0dXJlLl9mcmFtZS53aWR0aDtcbiAgICAgICAgICAgIGR5ID0gKHRleHR1cmUudHJpbSkgPyB0ZXh0dXJlLnRyaW0ueSAtIHRoaXMuYW5jaG9yLnkgKiB0ZXh0dXJlLnRyaW0uaGVpZ2h0IDogdGhpcy5hbmNob3IueSAqIC10ZXh0dXJlLl9mcmFtZS5oZWlnaHQ7XG4gICAgICAgIH1cblxuXG5cbiAgICAgICAgLy8gQWxsb3cgZm9yIHBpeGVsIHJvdW5kaW5nXG4gICAgICAgIGlmIChyZW5kZXJlci5yb3VuZFBpeGVscylcbiAgICAgICAge1xuICAgICAgICAgICAgcmVuZGVyZXIuY29udGV4dC5zZXRUcmFuc2Zvcm0oXG4gICAgICAgICAgICAgICAgd3QuYSxcbiAgICAgICAgICAgICAgICB3dC5iLFxuICAgICAgICAgICAgICAgIHd0LmMsXG4gICAgICAgICAgICAgICAgd3QuZCxcbiAgICAgICAgICAgICAgICAod3QudHggKiByZW5kZXJlci5yZXNvbHV0aW9uKSB8IDAsXG4gICAgICAgICAgICAgICAgKHd0LnR5ICogcmVuZGVyZXIucmVzb2x1dGlvbikgfCAwXG4gICAgICAgICAgICApO1xuXG4gICAgICAgICAgICBkeCA9IGR4IHwgMDtcbiAgICAgICAgICAgIGR5ID0gZHkgfCAwO1xuICAgICAgICB9XG4gICAgICAgIGVsc2VcbiAgICAgICAge1xuXG4gICAgICAgICAgICByZW5kZXJlci5jb250ZXh0LnNldFRyYW5zZm9ybShcbiAgICAgICAgICAgICAgICB3dC5hLFxuICAgICAgICAgICAgICAgIHd0LmIsXG4gICAgICAgICAgICAgICAgd3QuYyxcbiAgICAgICAgICAgICAgICB3dC5kLFxuICAgICAgICAgICAgICAgIHd0LnR4ICogcmVuZGVyZXIucmVzb2x1dGlvbixcbiAgICAgICAgICAgICAgICB3dC50eSAqIHJlbmRlcmVyLnJlc29sdXRpb25cbiAgICAgICAgICAgICk7XG5cblxuICAgICAgICB9XG5cbiAgICAgICAgdmFyIHJlc29sdXRpb24gPSB0ZXh0dXJlLmJhc2VUZXh0dXJlLnJlc29sdXRpb247XG5cbiAgICAgICAgaWYgKHRoaXMudGludCAhPT0gMHhGRkZGRkYpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmNhY2hlZFRpbnQgIT09IHRoaXMudGludClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB0aGlzLmNhY2hlZFRpbnQgPSB0aGlzLnRpbnQ7XG5cbiAgICAgICAgICAgICAgICAvLyBUT0RPIGNsZWFuIHVwIGNhY2hpbmcgLSBob3cgdG8gY2xlYW4gdXAgdGhlIGNhY2hlcz9cbiAgICAgICAgICAgICAgICB0aGlzLnRpbnRlZFRleHR1cmUgPSBDYW52YXNUaW50ZXIuZ2V0VGludGVkVGV4dHVyZSh0aGlzLCB0aGlzLnRpbnQpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZW5kZXJlci5jb250ZXh0LmRyYXdJbWFnZShcbiAgICAgICAgICAgICAgICB0aGlzLnRpbnRlZFRleHR1cmUsXG4gICAgICAgICAgICAgICAgMCxcbiAgICAgICAgICAgICAgICAwLFxuICAgICAgICAgICAgICAgIHdpZHRoICogcmVzb2x1dGlvbixcbiAgICAgICAgICAgICAgICBoZWlnaHQgKiByZXNvbHV0aW9uLFxuICAgICAgICAgICAgICAgIGR4ICogcmVuZGVyZXIucmVzb2x1dGlvbixcbiAgICAgICAgICAgICAgICBkeSAqIHJlbmRlcmVyLnJlc29sdXRpb24sXG4gICAgICAgICAgICAgICAgd2lkdGggKiByZW5kZXJlci5yZXNvbHV0aW9uLFxuICAgICAgICAgICAgICAgIGhlaWdodCAqIHJlbmRlcmVyLnJlc29sdXRpb25cbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgICByZW5kZXJlci5jb250ZXh0LmRyYXdJbWFnZShcbiAgICAgICAgICAgICAgICB0ZXh0dXJlLmJhc2VUZXh0dXJlLnNvdXJjZSxcbiAgICAgICAgICAgICAgICB0ZXh0dXJlLmNyb3AueCAqIHJlc29sdXRpb24sXG4gICAgICAgICAgICAgICAgdGV4dHVyZS5jcm9wLnkgKiByZXNvbHV0aW9uLFxuICAgICAgICAgICAgICAgIHdpZHRoICogcmVzb2x1dGlvbixcbiAgICAgICAgICAgICAgICBoZWlnaHQgKiByZXNvbHV0aW9uLFxuICAgICAgICAgICAgICAgIGR4ICAqIHJlbmRlcmVyLnJlc29sdXRpb24sXG4gICAgICAgICAgICAgICAgZHkgICogcmVuZGVyZXIucmVzb2x1dGlvbixcbiAgICAgICAgICAgICAgICB3aWR0aCAqIHJlbmRlcmVyLnJlc29sdXRpb24sXG4gICAgICAgICAgICAgICAgaGVpZ2h0ICogcmVuZGVyZXIucmVzb2x1dGlvblxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgIH1cbn07XG5cbi8qKlxuICogRGVzdHJveXMgdGhpcyBzcHJpdGUgYW5kIG9wdGlvbmFsbHkgaXRzIHRleHR1cmVcbiAqXG4gKiBAcGFyYW0gW2Rlc3Ryb3lUZXh0dXJlPWZhbHNlXSB7Ym9vbGVhbn0gU2hvdWxkIGl0IGRlc3Ryb3kgdGhlIGN1cnJlbnQgdGV4dHVyZSBvZiB0aGUgc3ByaXRlIGFzIHdlbGxcbiAqIEBwYXJhbSBbZGVzdHJveUJhc2VUZXh0dXJlPWZhbHNlXSB7Ym9vbGVhbn0gU2hvdWxkIGl0IGRlc3Ryb3kgdGhlIGJhc2UgdGV4dHVyZSBvZiB0aGUgc3ByaXRlIGFzIHdlbGxcbiAqL1xuU3ByaXRlLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKGRlc3Ryb3lUZXh0dXJlLCBkZXN0cm95QmFzZVRleHR1cmUpXG57XG4gICAgQ29udGFpbmVyLnByb3RvdHlwZS5kZXN0cm95LmNhbGwodGhpcyk7XG5cbiAgICB0aGlzLmFuY2hvciA9IG51bGw7XG5cbiAgICBpZiAoZGVzdHJveVRleHR1cmUpXG4gICAge1xuICAgICAgICB0aGlzLl90ZXh0dXJlLmRlc3Ryb3koZGVzdHJveUJhc2VUZXh0dXJlKTtcbiAgICB9XG5cbiAgICB0aGlzLl90ZXh0dXJlID0gbnVsbDtcbiAgICB0aGlzLnNoYWRlciA9IG51bGw7XG59O1xuXG4vLyBzb21lIGhlbHBlciBmdW5jdGlvbnMuLlxuXG4vKipcbiAqIEhlbHBlciBmdW5jdGlvbiB0aGF0IGNyZWF0ZXMgYSBzcHJpdGUgdGhhdCB3aWxsIGNvbnRhaW4gYSB0ZXh0dXJlIGZyb20gdGhlIFRleHR1cmVDYWNoZSBiYXNlZCBvbiB0aGUgZnJhbWVJZFxuICogVGhlIGZyYW1lIGlkcyBhcmUgY3JlYXRlZCB3aGVuIGEgVGV4dHVyZSBwYWNrZXIgZmlsZSBoYXMgYmVlbiBsb2FkZWRcbiAqXG4gKiBAc3RhdGljXG4gKiBAcGFyYW0gZnJhbWVJZCB7c3RyaW5nfSBUaGUgZnJhbWUgSWQgb2YgdGhlIHRleHR1cmUgaW4gdGhlIGNhY2hlXG4gKiBAcGFyYW0gW2Nyb3Nzb3JpZ2luPShhdXRvKV0ge2Jvb2xlYW59IGlmIHlvdSB3YW50IHRvIHNwZWNpZnkgdGhlIGNyb3NzLW9yaWdpbiBwYXJhbWV0ZXJcbiAqIEBwYXJhbSBbc2NhbGVNb2RlPVBJWEkuU0NBTEVfTU9ERVMuREVGQVVMVF0ge251bWJlcn0gaWYgeW91IHdhbnQgdG8gc3BlY2lmeSB0aGUgc2NhbGUgbW9kZSwgc2VlIHtAbGluayBQSVhJLlNDQUxFX01PREVTfSBmb3IgcG9zc2libGUgdmFsdWVzXG4gKiBAcmV0dXJuIHtQSVhJLlNwcml0ZX0gQSBuZXcgU3ByaXRlIHVzaW5nIGEgdGV4dHVyZSBmcm9tIHRoZSB0ZXh0dXJlIGNhY2hlIG1hdGNoaW5nIHRoZSBmcmFtZUlkXG4gKi9cblNwcml0ZS5mcm9tRnJhbWUgPSBmdW5jdGlvbiAoZnJhbWVJZClcbntcbiAgICB2YXIgdGV4dHVyZSA9IHV0aWxzLlRleHR1cmVDYWNoZVtmcmFtZUlkXTtcblxuICAgIGlmICghdGV4dHVyZSlcbiAgICB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignVGhlIGZyYW1lSWQgXCInICsgZnJhbWVJZCArICdcIiBkb2VzIG5vdCBleGlzdCBpbiB0aGUgdGV4dHVyZSBjYWNoZScpO1xuICAgIH1cblxuICAgIHJldHVybiBuZXcgU3ByaXRlKHRleHR1cmUpO1xufTtcblxuLyoqXG4gKiBIZWxwZXIgZnVuY3Rpb24gdGhhdCBjcmVhdGVzIGEgc3ByaXRlIHRoYXQgd2lsbCBjb250YWluIGEgdGV4dHVyZSBiYXNlZCBvbiBhbiBpbWFnZSB1cmxcbiAqIElmIHRoZSBpbWFnZSBpcyBub3QgaW4gdGhlIHRleHR1cmUgY2FjaGUgaXQgd2lsbCBiZSBsb2FkZWRcbiAqXG4gKiBAc3RhdGljXG4gKiBAcGFyYW0gaW1hZ2VJZCB7c3RyaW5nfSBUaGUgaW1hZ2UgdXJsIG9mIHRoZSB0ZXh0dXJlXG4gKiBAcmV0dXJuIHtQSVhJLlNwcml0ZX0gQSBuZXcgU3ByaXRlIHVzaW5nIGEgdGV4dHVyZSBmcm9tIHRoZSB0ZXh0dXJlIGNhY2hlIG1hdGNoaW5nIHRoZSBpbWFnZSBpZFxuICovXG5TcHJpdGUuZnJvbUltYWdlID0gZnVuY3Rpb24gKGltYWdlSWQsIGNyb3Nzb3JpZ2luLCBzY2FsZU1vZGUpXG57XG4gICAgcmV0dXJuIG5ldyBTcHJpdGUoVGV4dHVyZS5mcm9tSW1hZ2UoaW1hZ2VJZCwgY3Jvc3NvcmlnaW4sIHNjYWxlTW9kZSkpO1xufTtcbiIsInZhciBPYmplY3RSZW5kZXJlciA9IHJlcXVpcmUoJy4uLy4uL3JlbmRlcmVycy93ZWJnbC91dGlscy9PYmplY3RSZW5kZXJlcicpLFxuICAgIFdlYkdMUmVuZGVyZXIgPSByZXF1aXJlKCcuLi8uLi9yZW5kZXJlcnMvd2ViZ2wvV2ViR0xSZW5kZXJlcicpLFxuICAgIFRleHR1cmVTaGFkZXIgPSByZXF1aXJlKCcuLi8uLi9yZW5kZXJlcnMvd2ViZ2wvc2hhZGVycy9fVGV4dHVyZVNoYWRlcicpLFxuICAgIGNyZWF0ZUluZGljZXNGb3JRdWFkcyA9IHJlcXVpcmUoJy4uLy4uL3V0aWxzL2NyZWF0ZUluZGljZXNGb3JRdWFkcycpLFxuICAgIGdlbmVyYXRlTXVsdGlUZXh0dXJlU2hhZGVyID0gcmVxdWlyZSgnLi9nZW5lcmF0ZU11bHRpVGV4dHVyZVNoYWRlcicpLFxuICAgIENPTlNUID0gcmVxdWlyZSgnLi4vLi4vY29uc3QnKSxcbiAgICBnbENvcmUgPSByZXF1aXJlKCdwaXhpLWdsLWNvcmUnKTtcblxuLyoqXG4gKiBAYXV0aG9yIE1hdCBHcm92ZXNcbiAqXG4gKiBCaWcgdGhhbmtzIHRvIHRoZSB2ZXJ5IGNsZXZlciBNYXR0IERlc0xhdXJpZXJzIDxtYXR0ZGVzbD4gaHR0cHM6Ly9naXRodWIuY29tL21hdHRkZXNsL1xuICogZm9yIGNyZWF0aW5nIHRoZSBvcmlnaW5hbCBwaXhpIHZlcnNpb24hXG4gKiBBbHNvIGEgdGhhbmtzIHRvIGh0dHBzOi8vZ2l0aHViLmNvbS9iY2hldmFsaWVyIGZvciB0d2Vha2luZyB0aGUgdGludCBhbmQgYWxwaGEgc28gdGhhdCB0aGV5IG5vdyBzaGFyZSA0IGJ5dGVzIG9uIHRoZSB2ZXJ0ZXggYnVmZmVyXG4gKlxuICogSGVhdmlseSBpbnNwaXJlZCBieSBMaWJHRFgncyBTcHJpdGVSZW5kZXJlcjpcbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS9saWJnZHgvbGliZ2R4L2Jsb2IvbWFzdGVyL2dkeC9zcmMvY29tL2JhZGxvZ2ljL2dkeC9ncmFwaGljcy9nMmQvU3ByaXRlUmVuZGVyZXIuamF2YVxuICovXG5cbi8qKlxuICogUmVuZGVyZXIgZGVkaWNhdGVkIHRvIGRyYXdpbmcgYW5kIGJhdGNoaW5nIHNwcml0ZXMuXG4gKlxuICogQGNsYXNzXG4gKiBAcHJpdmF0ZVxuICogQG1lbWJlcm9mIFBJWElcbiAqIEBleHRlbmRzIFBJWEkuT2JqZWN0UmVuZGVyZXJcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5XZWJHTFJlbmRlcmVyfSBUaGUgcmVuZGVyZXIgdGhpcyBzcHJpdGUgYmF0Y2ggd29ya3MgZm9yLlxuICovXG5mdW5jdGlvbiBTcHJpdGVSZW5kZXJlcihyZW5kZXJlcilcbntcbiAgICBPYmplY3RSZW5kZXJlci5jYWxsKHRoaXMsIHJlbmRlcmVyKTtcblxuICAgIC8qKlxuICAgICAqIE51bWJlciBvZiB2YWx1ZXMgc2VudCBpbiB0aGUgdmVydGV4IGJ1ZmZlci5cbiAgICAgKiBwb3NpdGlvblgsIHBvc2l0aW9uWSwgY29sb3JSLCBjb2xvckcsIGNvbG9yQiA9IDVcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLnZlcnRTaXplID0gNTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBzaXplIG9mIHRoZSB2ZXJ0ZXggaW5mb3JtYXRpb24gaW4gYnl0ZXMuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy52ZXJ0Qnl0ZVNpemUgPSB0aGlzLnZlcnRTaXplICogNDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBudW1iZXIgb2YgaW1hZ2VzIGluIHRoZSBTcHJpdGVCYXRjaCBiZWZvcmUgaXQgZmx1c2hlcy5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLnNpemUgPSBDT05TVC5TUFJJVEVfQkFUQ0hfU0laRTsgLy8gMjAwMCBpcyBhIG5pY2UgYmFsYW5jZSBiZXR3ZWVuIG1vYmlsZSAvIGRlc2t0b3BcblxuICAgIC8vIHRoZSB0b3RhbCBudW1iZXIgb2YgYnl0ZXMgaW4gb3VyIGJhdGNoXG4gICAgdmFyIG51bVZlcnRzID0gKHRoaXMuc2l6ZSAqIDQpICogdGhpcy52ZXJ0Qnl0ZVNpemU7XG5cbiAgICAvLyB0aGUgdG90YWwgbnVtYmVyIG9mIGluZGljZXMgaW4gb3VyIGJhdGNoLCB0aGVyZSBhcmUgNiBwb2ludHMgcGVyIHF1YWQuXG4gICAgdmFyIG51bUluZGljZXMgPSB0aGlzLnNpemUgKiA2O1xuXG4gICAgLyoqXG4gICAgICogSG9sZHMgdGhlIHZlcnRleCBkYXRhIHRoYXQgd2lsbCBiZSBzZW50IHRvIHRoZSB2ZXJ0ZXggc2hhZGVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7QXJyYXlCdWZmZXJ9XG4gICAgICovXG4gICAgdGhpcy52ZXJ0aWNlcyA9IG5ldyBBcnJheUJ1ZmZlcihudW1WZXJ0cyk7XG5cbiAgICAvKipcbiAgICAgKiBWaWV3IG9uIHRoZSB2ZXJ0aWNlcyBhcyBhIEZsb2F0MzJBcnJheSBmb3IgcG9zaXRpb25zXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtGbG9hdDMyQXJyYXl9XG4gICAgICovXG4gICAgdGhpcy5wb3NpdGlvbnMgPSBuZXcgRmxvYXQzMkFycmF5KHRoaXMudmVydGljZXMpO1xuICAgIFxuICAgIC8qKlxuICAgICAqIFZpZXcgb24gdGhlIHZlcnRpY2VzIGFzIGEgVWludDMyQXJyYXkgZm9yIHV2c1xuICAgICAqXG4gICAgICogQG1lbWJlciB7RmxvYXQzMkFycmF5fVxuICAgICAqL1xuICAgIHRoaXMudXZzID0gbmV3IFVpbnQzMkFycmF5KHRoaXMudmVydGljZXMpO1xuXG4gICAgLyoqXG4gICAgICogVmlldyBvbiB0aGUgdmVydGljZXMgYXMgYSBVaW50MzJBcnJheSBmb3IgY29sb3JzXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtVaW50MzJBcnJheX1cbiAgICAgKi9cbiAgICB0aGlzLmNvbG9ycyA9IG5ldyBVaW50MzJBcnJheSh0aGlzLnZlcnRpY2VzKTtcblxuICAgIC8qKlxuICAgICAqIEhvbGRzIHRoZSBpbmRpY2VzIG9mIHRoZSBnZW9tZXRyeSAocXVhZHMpIHRvIGRyYXdcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1VpbnQxNkFycmF5fVxuICAgICAqL1xuICAgIHRoaXMuaW5kaWNlcyA9IGNyZWF0ZUluZGljZXNGb3JRdWFkcyh0aGlzLnNpemUpXG5cbiAgICAvKipcbiAgICAgKiBUaGUgZGVmYXVsdCBzaGFkZXIgdGhhdCBpcyB1c2VkIGlmIGEgc3ByaXRlIGRvZXNuJ3QgaGF2ZSBhIG1vcmUgc3BlY2lmaWMgb25lLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5TaGFkZXJ9XG4gICAgICovXG4gICAgdGhpcy5zaGFkZXIgPSBudWxsO1xuXG4gICAgdGhpcy50ZXh0dXJlQ291bnQgPSAwO1xuICAgIHRoaXMuY3VycmVudEluZGV4ID0gMDtcbiAgXG4gICAgdGhpcy5ncm91cENvdW50ID0gMDtcbiAgICB0aGlzLmdyb3VwcyA9IFtdO1xuICAgIFxuICAgIC8vVE9ETyAtIDMwMCBpcyBhIGJpdCBtYWdpYywgZmlndXJlIG91dCBhIG5pY2VyIGFtb3VudCFcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuc2l6ZTsgaSsrKSBcbiAgICB7XG4gICAgICAgIHRoaXMuZ3JvdXBzW2ldID0ge3RleHR1cmVzOltdLCB0ZXh0dXJlQ291bnQ6MCwgaWRzOltdLCBzaXplOjAsIHN0YXJ0OjAsIGJsZW5kOjB9OyBcbiAgICB9O1xuICAgIFxuICAgIHRoaXMuY3VycmVudEdyb3VwID0gdGhpcy5ncm91cHNbdGhpcy5ncm91cENvdW50KytdO1xuXG4gICAgdGhpcy5jdXJyZW50VGV4dHVyZSA9IG51bGw7ICAgIFxufVxuXG5cblNwcml0ZVJlbmRlcmVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoT2JqZWN0UmVuZGVyZXIucHJvdG90eXBlKTtcblNwcml0ZVJlbmRlcmVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFNwcml0ZVJlbmRlcmVyO1xubW9kdWxlLmV4cG9ydHMgPSBTcHJpdGVSZW5kZXJlcjtcblxuV2ViR0xSZW5kZXJlci5yZWdpc3RlclBsdWdpbignc3ByaXRlJywgU3ByaXRlUmVuZGVyZXIpO1xuXG4vKipcbiAqIFNldHMgdXAgdGhlIHJlbmRlcmVyIGNvbnRleHQgYW5kIG5lY2Vzc2FyeSBidWZmZXJzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0gZ2wge1dlYkdMUmVuZGVyaW5nQ29udGV4dH0gdGhlIGN1cnJlbnQgV2ViR0wgZHJhd2luZyBjb250ZXh0XG4gKi9cblNwcml0ZVJlbmRlcmVyLnByb3RvdHlwZS5vbkNvbnRleHRDaGFuZ2UgPSBmdW5jdGlvbiAoKVxue1xuICAgIHZhciBnbCA9IHRoaXMucmVuZGVyZXIuZ2w7XG5cbiAgICB0aGlzLk1BWF9URVhUVUVTID0gZ2wuZ2V0UGFyYW1ldGVyKGdsLk1BWF9URVhUVVJFX0lNQUdFX1VOSVRTKTtcblxuICAgIHRoaXMuX3NoYWRlciA9IGdlbmVyYXRlTXVsdGlUZXh0dXJlU2hhZGVyKGdsLCB0aGlzLk1BWF9URVhUVUVTKS8vbmV3IFRleHR1cmVTaGFkZXIoZ2wpO1xuXG4gICAgLy8gc2V0dXAgZGVmYXVsdCBzaGFkZXJcbiAgICB0aGlzLnNoYWRlciA9IHRoaXMucmVuZGVyZXIuc2hhZGVyTWFuYWdlci5kZWZhdWx0U2hhZGVyO1xuXG4gICAgLy8gY3JlYXRlIGEgY291cGxlIG9mIGJ1ZmZlcnNcbiAgICB0aGlzLnZlcnRleEJ1ZmZlciA9IGdsQ29yZS5HTEJ1ZmZlci5jcmVhdGVWZXJ0ZXhCdWZmZXIoZ2wsIG51bGwsIGdsLkRZTkFNSUNfRFJBVyk7XG4gICAgdGhpcy5pbmRleEJ1ZmZlciA9IGdsQ29yZS5HTEJ1ZmZlci5jcmVhdGVJbmRleEJ1ZmZlcihnbCwgdGhpcy5pbmRpY2VzLCBnbC5TVEFUSUNfRFJBVyk7XG5cbiAgICAvLyBidWlsZCB0aGUgdmFvIG9iamVjdCB0aGF0IHdpbGwgcmVuZGVyLi5cbiAgICB0aGlzLnZhbyA9IG5ldyBnbENvcmUuVmVydGV4QXJyYXlPYmplY3QoZ2wpO1xuXG4gICAgdGhpcy52YW8uYWRkSW5kZXgodGhpcy5pbmRleEJ1ZmZlcik7XG4gICAgdGhpcy52YW8uYWRkQXR0cmlidXRlKHRoaXMudmVydGV4QnVmZmVyLCB0aGlzLl9zaGFkZXIuYXR0cmlidXRlcy5hVmVydGV4UG9zaXRpb24sIGdsLkZMT0FULCBmYWxzZSwgdGhpcy52ZXJ0Qnl0ZVNpemUsIDApO1xuICAgIHRoaXMudmFvLmFkZEF0dHJpYnV0ZSh0aGlzLnZlcnRleEJ1ZmZlciwgdGhpcy5fc2hhZGVyLmF0dHJpYnV0ZXMuYVRleHR1cmVDb29yZCwgZ2wuVU5TSUdORURfU0hPUlQsIHRydWUsIHRoaXMudmVydEJ5dGVTaXplLCAyICogNCk7XG4gICAgdGhpcy52YW8uYWRkQXR0cmlidXRlKHRoaXMudmVydGV4QnVmZmVyLCB0aGlzLl9zaGFkZXIuYXR0cmlidXRlcy5hQ29sb3IsIGdsLlVOU0lHTkVEX0JZVEUsIHRydWUsIHRoaXMudmVydEJ5dGVTaXplLCAzICogNCk7XG4gICAgdGhpcy52YW8uYWRkQXR0cmlidXRlKHRoaXMudmVydGV4QnVmZmVyLCB0aGlzLl9zaGFkZXIuYXR0cmlidXRlcy5hVGV4dHVyZUlkLCBnbC5GTE9BVCwgZmFsc2UsIHRoaXMudmVydEJ5dGVTaXplLCA0ICogNCk7XG5cbiAgICB0aGlzLmN1cnJlbnRCbGVuZE1vZGUgPSA5OTk5OTtcbn07XG5cbi8qKlxuICogUmVuZGVycyB0aGUgc3ByaXRlIG9iamVjdC5cbiAqXG4gKiBAcGFyYW0gc3ByaXRlIHtQSVhJLlNwcml0ZX0gdGhlIHNwcml0ZSB0byByZW5kZXIgd2hlbiB1c2luZyB0aGlzIHNwcml0ZWJhdGNoXG4gKi9cblNwcml0ZVJlbmRlcmVyLnByb3RvdHlwZS5yZW5kZXIgPSBmdW5jdGlvbiAoc3ByaXRlKVxue1xuICAgIC8vVE9ETyBzZXQgYmxlbmQgbW9kZXMuLlxuICAgIC8vIGNoZWNrIHRleHR1cmUuLlxuICAgIGlmICh0aGlzLmN1cnJlbnRJbmRleCA+PSB0aGlzLnNpemUpXG4gICAge1xuICAgICAgICB0aGlzLmZsdXNoKCk7XG4gICAgfVxuXG4gIFxuICAgIC8vIGdldCB0aGUgdXZzIGZvciB0aGUgdGV4dHVyZVxuICAgXG5cbiAgICAvLyBpZiB0aGUgdXZzIGhhdmUgbm90IHVwZGF0ZWQgdGhlbiBubyBwb2ludCByZW5kZXJpbmcganVzdCB5ZXQhXG4gICAgaWYgKCFzcHJpdGUudGV4dHVyZS5fdXZzKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgICAvLyBwdXNoIGEgdGV4dHVyZS5cbiAgICAvLyBpbmNyZW1lbnQgdGhlIGJhdGNoc2l6ZVxuICAgIHZhciBuZXh0VGV4dHVyZSA9ICBzcHJpdGUudGV4dHVyZS5iYXNlVGV4dHVyZTtcbiAgICB2YXIgY3VycmVudEdyb3VwID0gdGhpcy5jdXJyZW50R3JvdXA7XG4gICAgdmFyIGk7XG5cbiAgICBpZih0aGlzLmN1cnJlbnRUZXh0dXJlICE9PSBuZXh0VGV4dHVyZSlcbiAgICB7XG4gICAgICAgIHRoaXMuY3VycmVudFRleHR1cmUgPSBuZXh0VGV4dHVyZTtcbiAgICAgICAgXG4gICAgICAgIGlmKCFuZXh0VGV4dHVyZS5fZW5hYmxlZClcbiAgICAgICAge1xuICAgICAgICAgICAgbmV4dFRleHR1cmUuX2VuYWJsZWQgPSB0cnVlO1xuICAgICAgICAgICAgbmV4dFRleHR1cmUuX2lkID0gdGhpcy50ZXh0dXJlQ291bnQ7XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIGlmKHRoaXMudGV4dHVyZUNvdW50ID09PSB0aGlzLk1BWF9URVhUVUVTKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGZvciAoIGkgPSAwOyBpIDwgY3VycmVudEdyb3VwLnRleHR1cmVDb3VudDsgaSsrKSBcbiAgICAgICAgICAgICAgICB7ICAgICBcbiAgICAgICAgICAgICAgICAgICAgY3VycmVudEdyb3VwLnRleHR1cmVzW2ldLl9lbmFibGVkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgIHRoaXMudGV4dHVyZUNvdW50ID0gMDtcblxuICAgICAgICAgICAgICAgIGN1cnJlbnRHcm91cC5zaXplID0gdGhpcy5jdXJyZW50SW5kZXggLSBjdXJyZW50R3JvdXAuc3RhcnQ7XG4gICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICBjdXJyZW50R3JvdXAgPSB0aGlzLmN1cnJlbnRHcm91cCA9IHRoaXMuZ3JvdXBzW3RoaXMuZ3JvdXBDb3VudCsrXTtcbiAgICAgICAgICAgICAgICBjdXJyZW50R3JvdXAudGV4dHVyZUNvdW50ID0gMDtcbiAgICAgICAgICAgICAgICBjdXJyZW50R3JvdXAuc3RhcnQgPSB0aGlzLmN1cnJlbnRJbmRleDtcbiAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY3VycmVudEdyb3VwLnRleHR1cmVzW2N1cnJlbnRHcm91cC50ZXh0dXJlQ291bnQrK10gPSBuZXh0VGV4dHVyZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMudGV4dHVyZUNvdW50Kys7XG4gICAgfVxuXG4gICAgLy8gVE9ETyB0cmltPz9cbiAgICB2YXIgaW5kZXggPSB0aGlzLmN1cnJlbnRJbmRleCAqIHRoaXMudmVydEJ5dGVTaXplO1xuXG4gICAgdGhpcy5jdXJyZW50SW5kZXgrKztcblxuICAgIC8vIHVwbG9hZCB0aGUgc3ByaXRlIGVsZW1ldG5zLi4uXG4gICAgLy8gdGhleSBoYXZlIGFsbCByZWFkeSBiZWVuIGNhbGN1bGF0ZWQgc28gd2UganVzdCBuZWVkIHRvIHB1c2ggdGhlbSBpbnRvIHRoZSBidWZmZXIuXG4gICAgdmFyIGNvbG9ycyA9IHRoaXMuY29sb3JzO1xuICAgIHZhciBwb3NpdGlvbnMgPSB0aGlzLnBvc2l0aW9ucztcbiAgICB2YXIgdmVydGV4RGF0YSA9IHNwcml0ZS52ZXJ0ZXhEYXRhXG4gICAgdmFyIHRpbnQgPSAoc3ByaXRlLnRpbnQgPj4gMTYpICsgKHNwcml0ZS50aW50ICYgMHhmZjAwKSArICgoc3ByaXRlLnRpbnQgJiAweGZmKSA8PCAxNikgKyAoc3ByaXRlLndvcmxkQWxwaGEgKiAyNTUgPDwgMjQpO1xuICAgIHZhciB1dnMgPSBzcHJpdGUudGV4dHVyZS5fdXZzLnV2c191aW50MzI7XG4gICAgLy94eVxuICAgIHBvc2l0aW9uc1tpbmRleCsrXSA9IHZlcnRleERhdGFbMF07XG4gICAgcG9zaXRpb25zW2luZGV4KytdID0gdmVydGV4RGF0YVsxXTtcbiAgICB0aGlzLnV2c1tpbmRleCsrXSA9IHV2c1swXTtcbiAgICBjb2xvcnNbaW5kZXgrK10gPSB0aW50O1xuICAgIHBvc2l0aW9uc1tpbmRleCsrXSA9IG5leHRUZXh0dXJlLl9pZDsgXG4gICAgXG4gICAgLy8geHlcbiAgICBwb3NpdGlvbnNbaW5kZXgrK10gPSB2ZXJ0ZXhEYXRhWzJdO1xuICAgIHBvc2l0aW9uc1tpbmRleCsrXSA9IHZlcnRleERhdGFbM107XG4gICAgdGhpcy51dnNbaW5kZXgrK10gPSB1dnNbMV07XG4gICAgY29sb3JzW2luZGV4KytdID0gdGludDtcbiAgICBwb3NpdGlvbnNbaW5kZXgrK10gPSBuZXh0VGV4dHVyZS5faWQ7XG5cbiAgICAgLy8geHlcbiAgICBwb3NpdGlvbnNbaW5kZXgrK10gPSB2ZXJ0ZXhEYXRhWzRdO1xuICAgIHBvc2l0aW9uc1tpbmRleCsrXSA9IHZlcnRleERhdGFbNV07XG4gICAgdGhpcy51dnNbaW5kZXgrK10gPSB1dnNbMl07XG4gICAgY29sb3JzW2luZGV4KytdID0gdGludDtcbiAgICBwb3NpdGlvbnNbaW5kZXgrK10gPSBuZXh0VGV4dHVyZS5faWQ7XG5cbiAgICAvLyB4eVxuICAgIHBvc2l0aW9uc1tpbmRleCsrXSA9IHZlcnRleERhdGFbNl07XG4gICAgcG9zaXRpb25zW2luZGV4KytdID0gdmVydGV4RGF0YVs3XTtcbiAgICB0aGlzLnV2c1tpbmRleCsrXSA9IHV2c1szXTtcbiAgICBjb2xvcnNbaW5kZXgrK10gPSB0aW50O1xuICAgIHBvc2l0aW9uc1tpbmRleCsrXSA9IG5leHRUZXh0dXJlLl9pZDtcbn07XG5cbi8qKlxuICogUmVuZGVycyB0aGUgY29udGVudCBhbmQgZW1wdGllcyB0aGUgY3VycmVudCBiYXRjaC5cbiAqXG4gKi9cblNwcml0ZVJlbmRlcmVyLnByb3RvdHlwZS5mbHVzaCA9IGZ1bmN0aW9uICgpXG57XG4gICAgaWYgKHRoaXMuY3VycmVudEluZGV4ID09PSAwKXJldHVybjtcblxuICAgIHZhciBnbCA9IHRoaXMucmVuZGVyZXIuZ2w7XG5cblxuICAgIHRoaXMuY3VycmVudEdyb3VwLnNpemUgPSB0aGlzLmN1cnJlbnRJbmRleCAtIHRoaXMuY3VycmVudEdyb3VwLnN0YXJ0O1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5jdXJyZW50R3JvdXAudGV4dHVyZUNvdW50OyBpKyspIFxuICAgIHsgICAgIFxuICAgICAgICB0aGlzLmN1cnJlbnRHcm91cC50ZXh0dXJlc1tpXS5fZW5hYmxlZCA9IGZhbHNlO1xuICAgIH07XG4gICBcbiAgICAvLyBkbyBzb21lIHNtYXJ0IGFycmF5IHN0dWZmLi5cbiAgICAvLyBkb3VibGUgc2l6ZSBzbyB3ZSBkb250IGFsd2F5IHN1YmFycmF5IHRoZSBlbGVtZW50cy4uXG4gICAgLy8gdXBsb2FkIHRoZSB2ZXJ0cyB0byB0aGUgYnVmZmVyXG4gICAgaWYgKHRoaXMuY3VycmVudEJhdGNoU2l6ZSA+ICggdGhpcy5zaXplICogMC41ICkgKVxuICAgIHtcbiAgICAgICAgdGhpcy52ZXJ0ZXhCdWZmZXIudXBsb2FkKHRoaXMudmVydGljZXMsIDAsIHRydWUpO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICAvLyBvIGsgLi4gc3ViIGFycmF5IGlzIFNMT1c+P1xuICAgICAgICB2YXIgdmlldyA9IHRoaXMucG9zaXRpb25zLnN1YmFycmF5KDAsIHRoaXMuY3VycmVudEluZGV4ICogdGhpcy52ZXJ0Qnl0ZVNpemUpO1xuICAgICAgICB0aGlzLnZlcnRleEJ1ZmZlci51cGxvYWQodmlldywgMCwgdHJ1ZSk7XG4gICAgfVxuXG4gICAgLy8gYmluZCBzaGFkZXIuLlxuICAgIHRoaXMucmVuZGVyZXIuYmluZFNoYWRlcih0aGlzLl9zaGFkZXIpO1xuICAgIHRoaXMucmVuZGVyZXIuYmxlbmRNb2RlTWFuYWdlci5zZXRCbGVuZE1vZGUoIDAgKTtcblxuICAgIC8vLyByZW5kZXIgdGhlIGdyb3Vwcy4uXG4gICAgZm9yIChpID0gMDsgaSA8IHRoaXMuZ3JvdXBDb3VudDsgaSsrKSB7XG4gICAgICAgIFxuICAgICAgICB2YXIgZ3JvdXAgPSB0aGlzLmdyb3Vwc1tpXTtcblxuICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IGdyb3VwLnRleHR1cmVDb3VudDsgaisrKSB7XG4gICAgICAgICAgICB0aGlzLnJlbmRlcmVyLmJpbmRUZXh0dXJlKGdyb3VwLnRleHR1cmVzW2pdLCBqKTtcbiAgICAgICAgfTtcblxuICAgICAgICBnbC5kcmF3RWxlbWVudHMoZ2wuVFJJQU5HTEVTLCBncm91cC5zaXplICogNiwgZ2wuVU5TSUdORURfU0hPUlQsIGdyb3VwLnN0YXJ0ICogNiAqIDIpO1xuICAgIH07XG5cbiAgICAvLyByZXNldCBlbGVtZW50cyBmb3IgdGhlIG5leHQgZmx1c2hcbiAgICB0aGlzLmN1cnJlbnRUZXh0dXJlID0gbnVsbDtcbiAgICB0aGlzLmN1cnJlbnRJbmRleCA9IDA7XG4gICAgdGhpcy50ZXh0dXJlQ291bnQgPSAwO1xuICAgIHRoaXMuZ3JvdXBDb3VudCA9IDA7XG4gICAgXG4gICAgdGhpcy5jdXJyZW50R3JvdXAgPSB0aGlzLmdyb3Vwc1t0aGlzLmdyb3VwQ291bnQrK107XG4gICAgdGhpcy5jdXJyZW50R3JvdXAudGV4dHVyZUNvdW50ID0gMDtcbn07XG5cbi8qKlxuICogU3RhcnRzIGEgbmV3IHNwcml0ZSBiYXRjaC5cbiAqXG4gKi9cblNwcml0ZVJlbmRlcmVyLnByb3RvdHlwZS5zdGFydCA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy52YW8uYmluZCgpO1xufTtcblxuU3ByaXRlUmVuZGVyZXIucHJvdG90eXBlLnN0b3AgPSBmdW5jdGlvbiAoKVxue1xuICAgIHRoaXMuZmx1c2goKTtcbiAgICB0aGlzLnZhby51bmJpbmQoKTtcbn07XG4vKipcbiAqIERlc3Ryb3lzIHRoZSBTcHJpdGVCYXRjaC5cbiAqXG4gKi9cblNwcml0ZVJlbmRlcmVyLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLnZlcnRleEJ1ZmZlci5kZXN0cm95KCk7XG4gICAgdGhpcy5pbmRleEJ1ZmZlci5kZXN0cm95KCk7XG5cbiAgICBPYmplY3RSZW5kZXJlci5wcm90b3R5cGUuZGVzdHJveS5jYWxsKHRoaXMpO1xuXG4gICAgdGhpcy5zaGFkZXIuZGVzdHJveSgpO1xuXG4gICAgdGhpcy5yZW5kZXJlciA9IG51bGw7XG5cbiAgICB0aGlzLnZlcnRpY2VzID0gbnVsbDtcbiAgICB0aGlzLnBvc2l0aW9ucyA9IG51bGw7XG4gICAgdGhpcy5jb2xvcnMgPSBudWxsO1xuICAgIHRoaXMuaW5kaWNlcyA9IG51bGw7XG5cbiAgICB0aGlzLnZlcnRleEJ1ZmZlciA9IG51bGw7XG4gICAgdGhpcy5pbmRleEJ1ZmZlciA9IG51bGw7XG5cbiAgICB0aGlzLnNwcml0ZXMgPSBudWxsO1xuICAgIHRoaXMuc2hhZGVyID0gbnVsbDtcbn07XG4iLCJ2YXIgU2hhZGVyID0gcmVxdWlyZSgncGl4aS1nbC1jb3JlJykuR0xTaGFkZXI7XG5cblxuZnVuY3Rpb24gZ2VuZXJhdGVNdWx0aVRleHR1cmVTaGFkZXIoZ2wsIG1heFRleHR1cmVzKVxue1xuICAgIHZhciB2ZXJ0ZXhTcmMgPSBcInByZWNpc2lvbiBsb3dwIGZsb2F0O1xcbmF0dHJpYnV0ZSB2ZWMyIGFWZXJ0ZXhQb3NpdGlvbjtcXG5hdHRyaWJ1dGUgdmVjMiBhVGV4dHVyZUNvb3JkO1xcbmF0dHJpYnV0ZSB2ZWM0IGFDb2xvcjtcXG5hdHRyaWJ1dGUgZmxvYXQgYVRleHR1cmVJZDtcXG5cXG51bmlmb3JtIG1hdDMgcHJvamVjdGlvbk1hdHJpeDtcXG5cXG52YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDtcXG52YXJ5aW5nIHZlYzQgdkNvbG9yO1xcbnZhcnlpbmcgZmxvYXQgdlRleHR1cmVJZDtcXG5cXG52b2lkIG1haW4odm9pZCl7XFxuICAgZ2xfUG9zaXRpb24gPSB2ZWM0KChwcm9qZWN0aW9uTWF0cml4ICogdmVjMyhhVmVydGV4UG9zaXRpb24sIDEuMCkpLnh5LCAwLjAsIDEuMCk7XFxuICAgdlRleHR1cmVDb29yZCA9IGFUZXh0dXJlQ29vcmQ7XFxuICAgdlRleHR1cmVJZCA9IGFUZXh0dXJlSWQ7XFxuICAgdkNvbG9yID0gdmVjNChhQ29sb3IucmdiICogYUNvbG9yLmEsIGFDb2xvci5hKTtcXG59XCI7XG4gICAgdmFyIGZyYWdtZW50U3JjID0gJ3ByZWNpc2lvbiBsb3dwIGZsb2F0O1xcblxcbicgKyBnZW5lcmF0ZVNhbXBsZVNyYyhtYXhUZXh0dXJlcykgKyBcIlxcblxcblwiICsgZnJhZ1RlbXBsYXRlXG5cbiAgICBmcmFnbWVudFNyYyA9IGZyYWdtZW50U3JjLnJlcGxhY2UoL1xcJVxcJS9naSwgJzE2Jyk7XG5cbiAgICB2YXIgc2hhZGVyID0gbmV3IFNoYWRlcihnbCwgdmVydGV4U3JjLCBmcmFnbWVudFNyYyk7XG5cblxuICAgIHZhciBzYW1wbGVWYWx1ZXMgPSBbXTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG1heFRleHR1cmVzOyBpKyspIHtcbiAgICAgICAgc2FtcGxlVmFsdWVzW2ldID0gaTtcbiAgICB9O1xuXG4gICAgc2hhZGVyLmJpbmQoKTtcbiAgICBzaGFkZXIudW5pZm9ybXMudVNhbXBsZXJzID0gc2FtcGxlVmFsdWVzO1xuXG4gICAgcmV0dXJuIHNoYWRlcjtcbn1cblxuZnVuY3Rpb24gZ2VuZXJhdGVTYW1wbGVTcmMobWF4VGV4dHVyZXMpXG57XG4gICAgdmFyIHNyYyA9ICd2ZWM0IGdldFNhbXBsZUZyb21BcnJheShzYW1wbGVyMkQgdGV4dHVyZXNbJSVdLCBpbnQgbmR4LCB2ZWMyIHV2KSB7XFxuXFxudmVjNCBjb2xvcjsnXG5cbiAgICBzcmMgKz0gJ1xcbic7XG4gICAgc3JjICs9ICdcXG4nO1xuICAgIFxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbWF4VGV4dHVyZXM7IGkrKykgXG4gICAge1xuICAgICAgICBpZihpID4gMClzcmMgKz0gJ1xcbmVsc2UgJztcbiAgICAgICAgaWYoaSA8IG1heFRleHR1cmVzLTEpc3JjICs9ICdpZihuZHggPT0gJyArIGkgKyAnKSc7XG4gICAgICAgIHNyYyArPSAnXFxueyc7XG4gICAgICAgIHNyYyArPSAnXFxuXFx0Y29sb3IgPSB0ZXh0dXJlMkQodGV4dHVyZXNbJytpKyddLCB1dik7JztcbiAgICAgICAgc3JjICs9ICdcXG59JztcbiAgICB9O1xuXG4gICAgc3JjICs9ICdcXG4nO1xuICAgIHNyYyArPSAnXFxuJztcbiAgICBzcmMgKz0gJ3JldHVybiBjb2xvcjsnO1xuICAgIHNyYyArPSAnXFxufSc7XG5cbiAgICByZXR1cm4gc3JjO1xufVxuXG52YXIgZnJhZ1RlbXBsYXRlID0gW1xuXG4gICAgJ3ZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkOycsXG4gICAgJ3ZhcnlpbmcgdmVjNCB2Q29sb3I7JyxcbiAgICAndmFyeWluZyBmbG9hdCB2VGV4dHVyZUlkOycsXG4gICAgJ3VuaWZvcm0gc2FtcGxlcjJEIHVTYW1wbGVyc1slJV07JyxcblxuICAgICd2b2lkIG1haW4odm9pZCl7JyxcbiAgICAgICAgJ2dsX0ZyYWdDb2xvciA9IGdldFNhbXBsZUZyb21BcnJheSh1U2FtcGxlcnMsIGludCh2VGV4dHVyZUlkKSwgdlRleHR1cmVDb29yZCkgKiB2Q29sb3I7JyxcbiAgICAnfSdcbl0uam9pbignXFxuJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZ2VuZXJhdGVNdWx0aVRleHR1cmVTaGFkZXI7XG4iLCJ2YXIgU3ByaXRlID0gcmVxdWlyZSgnLi4vc3ByaXRlcy9TcHJpdGUnKSxcbiAgICBUZXh0dXJlID0gcmVxdWlyZSgnLi4vdGV4dHVyZXMvVGV4dHVyZScpLFxuICAgIG1hdGggPSByZXF1aXJlKCcuLi9tYXRoJyksXG4gICAgdXRpbHMgPSByZXF1aXJlKCcuLi91dGlscycpLFxuICAgIENPTlNUID0gcmVxdWlyZSgnLi4vY29uc3QnKTtcblxuLyoqXG4gKiBBIFRleHQgT2JqZWN0IHdpbGwgY3JlYXRlIGEgbGluZSBvciBtdWx0aXBsZSBsaW5lcyBvZiB0ZXh0LiBUbyBzcGxpdCBhIGxpbmUgeW91IGNhbiB1c2UgJ1xcbicgaW4geW91ciB0ZXh0IHN0cmluZyxcbiAqIG9yIGFkZCBhIHdvcmRXcmFwIHByb3BlcnR5IHNldCB0byB0cnVlIGFuZCBhbmQgd29yZFdyYXBXaWR0aCBwcm9wZXJ0eSB3aXRoIGEgdmFsdWUgaW4gdGhlIHN0eWxlIG9iamVjdC5cbiAqXG4gKiBBIFRleHQgY2FuIGJlIGNyZWF0ZWQgZGlyZWN0bHkgZnJvbSBhIHN0cmluZyBhbmQgYSBzdHlsZSBvYmplY3RcbiAqXG4gKiBgYGBqc1xuICogdmFyIHRleHQgPSBuZXcgUElYSS5UZXh0KCdUaGlzIGlzIGEgcGl4aSB0ZXh0Jyx7Zm9udCA6ICcyNHB4IEFyaWFsJywgZmlsbCA6IDB4ZmYxMDEwLCBhbGlnbiA6ICdjZW50ZXInfSk7XG4gKiBgYGBcbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuU3ByaXRlXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIHRleHQge3N0cmluZ30gVGhlIGNvcHkgdGhhdCB5b3Ugd291bGQgbGlrZSB0aGUgdGV4dCB0byBkaXNwbGF5XG4gKiBAcGFyYW0gW3N0eWxlXSB7b2JqZWN0fSBUaGUgc3R5bGUgcGFyYW1ldGVyc1xuICogQHBhcmFtIFtzdHlsZS5mb250XSB7c3RyaW5nfSBkZWZhdWx0ICdib2xkIDIwcHggQXJpYWwnIFRoZSBzdHlsZSBhbmQgc2l6ZSBvZiB0aGUgZm9udFxuICogQHBhcmFtIFtzdHlsZS5maWxsPSdibGFjayddIHtTdHJpbmd8TnVtYmVyfSBBIGNhbnZhcyBmaWxsc3R5bGUgdGhhdCB3aWxsIGJlIHVzZWQgb24gdGhlIHRleHQgZS5nICdyZWQnLCAnIzAwRkYwMCdcbiAqIEBwYXJhbSBbc3R5bGUuYWxpZ249J2xlZnQnXSB7c3RyaW5nfSBBbGlnbm1lbnQgZm9yIG11bHRpbGluZSB0ZXh0ICgnbGVmdCcsICdjZW50ZXInIG9yICdyaWdodCcpLCBkb2VzIG5vdCBhZmZlY3Qgc2luZ2xlIGxpbmUgdGV4dFxuICogQHBhcmFtIFtzdHlsZS5zdHJva2VdIHtTdHJpbmd8TnVtYmVyfSBBIGNhbnZhcyBmaWxsc3R5bGUgdGhhdCB3aWxsIGJlIHVzZWQgb24gdGhlIHRleHQgc3Ryb2tlIGUuZyAnYmx1ZScsICcjRkNGRjAwJ1xuICogQHBhcmFtIFtzdHlsZS5zdHJva2VUaGlja25lc3M9MF0ge251bWJlcn0gQSBudW1iZXIgdGhhdCByZXByZXNlbnRzIHRoZSB0aGlja25lc3Mgb2YgdGhlIHN0cm9rZS4gRGVmYXVsdCBpcyAwIChubyBzdHJva2UpXG4gKiBAcGFyYW0gW3N0eWxlLndvcmRXcmFwPWZhbHNlXSB7Ym9vbGVhbn0gSW5kaWNhdGVzIGlmIHdvcmQgd3JhcCBzaG91bGQgYmUgdXNlZFxuICogQHBhcmFtIFtzdHlsZS53b3JkV3JhcFdpZHRoPTEwMF0ge251bWJlcn0gVGhlIHdpZHRoIGF0IHdoaWNoIHRleHQgd2lsbCB3cmFwLCBpdCBuZWVkcyB3b3JkV3JhcCB0byBiZSBzZXQgdG8gdHJ1ZVxuICogQHBhcmFtIFtzdHlsZS5saW5lSGVpZ2h0XSB7bnVtYmVyfSBUaGUgbGluZSBoZWlnaHQsIGEgbnVtYmVyIHRoYXQgcmVwcmVzZW50cyB0aGUgdmVydGljYWwgc3BhY2UgdGhhdCBhIGxldHRlciB1c2VzXG4gKiBAcGFyYW0gW3N0eWxlLmRyb3BTaGFkb3c9ZmFsc2VdIHtib29sZWFufSBTZXQgYSBkcm9wIHNoYWRvdyBmb3IgdGhlIHRleHRcbiAqIEBwYXJhbSBbc3R5bGUuZHJvcFNoYWRvd0NvbG9yPScjMDAwMDAwJ10ge3N0cmluZ30gQSBmaWxsIHN0eWxlIHRvIGJlIHVzZWQgb24gdGhlIGRyb3BzaGFkb3cgZS5nICdyZWQnLCAnIzAwRkYwMCdcbiAqIEBwYXJhbSBbc3R5bGUuZHJvcFNoYWRvd0FuZ2xlPU1hdGguUEkvNF0ge251bWJlcn0gU2V0IGEgYW5nbGUgb2YgdGhlIGRyb3Agc2hhZG93XG4gKiBAcGFyYW0gW3N0eWxlLmRyb3BTaGFkb3dEaXN0YW5jZT01XSB7bnVtYmVyfSBTZXQgYSBkaXN0YW5jZSBvZiB0aGUgZHJvcCBzaGFkb3dcbiAqIEBwYXJhbSBbc3R5bGUuZHJvcFNoYWRvd0JsdXI9MF0ge251bWJlcn0gU2V0IGEgc2hhZG93IGJsdXIgcmFkaXVzXG4gKiBAcGFyYW0gW3N0eWxlLnBhZGRpbmc9MF0ge251bWJlcn0gT2NjYXNpb25hbGx5IHNvbWUgZm9udHMgYXJlIGNyb3BwZWQgb24gdG9wIG9yIGJvdHRvbS4gQWRkaW5nIHNvbWUgcGFkZGluZyB3aWxsXG4gKiAgICAgIHByZXZlbnQgdGhpcyBmcm9tIGhhcHBlbmluZyBieSBhZGRpbmcgcGFkZGluZyB0byB0aGUgdG9wIGFuZCBib3R0b20gb2YgdGV4dCBoZWlnaHQuXG4gKiBAcGFyYW0gW3N0eWxlLnRleHRCYXNlbGluZT0nYWxwaGFiZXRpYyddIHtzdHJpbmd9IFRoZSBiYXNlbGluZSBvZiB0aGUgdGV4dCB0aGF0IGlzIHJlbmRlcmVkLlxuICogQHBhcmFtIFtzdHlsZS5saW5lSm9pbj0nbWl0ZXInXSB7c3RyaW5nfSBUaGUgbGluZUpvaW4gcHJvcGVydHkgc2V0cyB0aGUgdHlwZSBvZiBjb3JuZXIgY3JlYXRlZCwgaXQgY2FuIHJlc29sdmVcbiAqICAgICAgc3Bpa2VkIHRleHQgaXNzdWVzLiBEZWZhdWx0IGlzICdtaXRlcicgKGNyZWF0ZXMgYSBzaGFycCBjb3JuZXIpLlxuICogQHBhcmFtIFtzdHlsZS5taXRlckxpbWl0PTEwXSB7bnVtYmVyfSBUaGUgbWl0ZXIgbGltaXQgdG8gdXNlIHdoZW4gdXNpbmcgdGhlICdtaXRlcicgbGluZUpvaW4gbW9kZS4gVGhpcyBjYW4gcmVkdWNlXG4gKiAgICAgIG9yIGluY3JlYXNlIHRoZSBzcGlraW5lc3Mgb2YgcmVuZGVyZWQgdGV4dC5cbiAqL1xuZnVuY3Rpb24gVGV4dCh0ZXh0LCBzdHlsZSwgcmVzb2x1dGlvbilcbntcbiAgICAvKipcbiAgICAgKiBUaGUgY2FudmFzIGVsZW1lbnQgdGhhdCBldmVyeXRoaW5nIGlzIGRyYXduIHRvXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtIVE1MQ2FudmFzRWxlbWVudH1cbiAgICAgKi9cbiAgICB0aGlzLmNhbnZhcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NhbnZhcycpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGNhbnZhcyAyZCBjb250ZXh0IHRoYXQgZXZlcnl0aGluZyBpcyBkcmF3biB3aXRoXG4gICAgICogQG1lbWJlciB7SFRNTENhbnZhc0VsZW1lbnR9XG4gICAgICovXG4gICAgdGhpcy5jb250ZXh0ID0gdGhpcy5jYW52YXMuZ2V0Q29udGV4dCgnMmQnKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSByZXNvbHV0aW9uIG9mIHRoZSBjYW52YXMuXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMucmVzb2x1dGlvbiA9IHJlc29sdXRpb24gfHwgQ09OU1QuUkVTT0xVVElPTjtcblxuICAgIC8qKlxuICAgICAqIFByaXZhdGUgdHJhY2tlciBmb3IgdGhlIGN1cnJlbnQgdGV4dC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge3N0cmluZ31cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX3RleHQgPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogUHJpdmF0ZSB0cmFja2VyIGZvciB0aGUgY3VycmVudCBzdHlsZS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge29iamVjdH1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX3N0eWxlID0gbnVsbDtcblxuICAgIHZhciB0ZXh0dXJlID0gVGV4dHVyZS5mcm9tQ2FudmFzKHRoaXMuY2FudmFzKTtcbiAgICB0ZXh0dXJlLnRyaW0gPSBuZXcgbWF0aC5SZWN0YW5nbGUoKTtcbiAgICBTcHJpdGUuY2FsbCh0aGlzLCB0ZXh0dXJlKTtcblxuICAgIHRoaXMudGV4dCA9IHRleHQ7XG4gICAgdGhpcy5zdHlsZSA9IHN0eWxlO1xufVxuXG4vLyBjb25zdHJ1Y3RvclxuVGV4dC5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFNwcml0ZS5wcm90b3R5cGUpO1xuVGV4dC5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBUZXh0O1xubW9kdWxlLmV4cG9ydHMgPSBUZXh0O1xuXG5UZXh0LmZvbnRQcm9wZXJ0aWVzQ2FjaGUgPSB7fTtcblRleHQuZm9udFByb3BlcnRpZXNDYW52YXMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdjYW52YXMnKTtcblRleHQuZm9udFByb3BlcnRpZXNDb250ZXh0ID0gVGV4dC5mb250UHJvcGVydGllc0NhbnZhcy5nZXRDb250ZXh0KCcyZCcpO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhUZXh0LnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFRoZSB3aWR0aCBvZiB0aGUgVGV4dCwgc2V0dGluZyB0aGlzIHdpbGwgYWN0dWFsbHkgbW9kaWZ5IHRoZSBzY2FsZSB0byBhY2hpZXZlIHRoZSB2YWx1ZSBzZXRcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5UZXh0I1xuICAgICAqL1xuICAgIHdpZHRoOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgaWYgKHRoaXMuZGlydHkpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdGhpcy51cGRhdGVUZXh0KCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiB0aGlzLnNjYWxlLnggKiB0aGlzLl90ZXh0dXJlLl9mcmFtZS53aWR0aDtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuc2NhbGUueCA9IHZhbHVlIC8gdGhpcy5fdGV4dHVyZS5fZnJhbWUud2lkdGg7XG4gICAgICAgICAgICB0aGlzLl93aWR0aCA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFRoZSBoZWlnaHQgb2YgdGhlIFRleHQsIHNldHRpbmcgdGhpcyB3aWxsIGFjdHVhbGx5IG1vZGlmeSB0aGUgc2NhbGUgdG8gYWNoaWV2ZSB0aGUgdmFsdWUgc2V0XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuVGV4dCNcbiAgICAgKi9cbiAgICBoZWlnaHQ6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICBpZiAodGhpcy5kaXJ0eSlcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZVRleHQoKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuICB0aGlzLnNjYWxlLnkgKiB0aGlzLl90ZXh0dXJlLl9mcmFtZS5oZWlnaHQ7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnNjYWxlLnkgPSB2YWx1ZSAvIHRoaXMuX3RleHR1cmUuX2ZyYW1lLmhlaWdodDtcbiAgICAgICAgICAgIHRoaXMuX2hlaWdodCA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFNldCB0aGUgc3R5bGUgb2YgdGhlIHRleHRcbiAgICAgKlxuICAgICAqIEBwYXJhbSBbc3R5bGVdIHtvYmplY3R9IFRoZSBzdHlsZSBwYXJhbWV0ZXJzXG4gICAgICogQHBhcmFtIFtzdHlsZS5mb250PSdib2xkIDIwcHQgQXJpYWwnXSB7c3RyaW5nfSBUaGUgc3R5bGUgYW5kIHNpemUgb2YgdGhlIGZvbnRcbiAgICAgKiBAcGFyYW0gW3N0eWxlLmZpbGw9J2JsYWNrJ10ge3N0cmluZ3xudW1iZXJ9IEEgY2FudmFzIGZpbGxzdHlsZSB0aGF0IHdpbGwgYmUgdXNlZCBvbiB0aGUgdGV4dCBlZyAncmVkJywgJyMwMEZGMDAnXG4gICAgICogQHBhcmFtIFtzdHlsZS5hbGlnbj0nbGVmdCddIHtzdHJpbmd9IEFsaWdubWVudCBmb3IgbXVsdGlsaW5lIHRleHQgKCdsZWZ0JywgJ2NlbnRlcicgb3IgJ3JpZ2h0JyksIGRvZXMgbm90IGFmZmVjdCBzaW5nbGUgbGluZSB0ZXh0XG4gICAgICogQHBhcmFtIFtzdHlsZS5zdHJva2U9J2JsYWNrJ10ge3N0cmluZ3xudW1iZXJ9IEEgY2FudmFzIGZpbGxzdHlsZSB0aGF0IHdpbGwgYmUgdXNlZCBvbiB0aGUgdGV4dCBzdHJva2UgZWcgJ2JsdWUnLCAnI0ZDRkYwMCdcbiAgICAgKiBAcGFyYW0gW3N0eWxlLnN0cm9rZVRoaWNrbmVzcz0wXSB7bnVtYmVyfSBBIG51bWJlciB0aGF0IHJlcHJlc2VudHMgdGhlIHRoaWNrbmVzcyBvZiB0aGUgc3Ryb2tlLiBEZWZhdWx0IGlzIDAgKG5vIHN0cm9rZSlcbiAgICAgKiBAcGFyYW0gW3N0eWxlLndvcmRXcmFwPWZhbHNlXSB7Ym9vbGVhbn0gSW5kaWNhdGVzIGlmIHdvcmQgd3JhcCBzaG91bGQgYmUgdXNlZFxuICAgICAqIEBwYXJhbSBbc3R5bGUud29yZFdyYXBXaWR0aD0xMDBdIHtudW1iZXJ9IFRoZSB3aWR0aCBhdCB3aGljaCB0ZXh0IHdpbGwgd3JhcFxuICAgICAqIEBwYXJhbSBbc3R5bGUubGluZUhlaWdodF0ge251bWJlcn0gVGhlIGxpbmUgaGVpZ2h0LCBhIG51bWJlciB0aGF0IHJlcHJlc2VudHMgdGhlIHZlcnRpY2FsIHNwYWNlIHRoYXQgYSBsZXR0ZXIgdXNlc1xuICAgICAqIEBwYXJhbSBbc3R5bGUuZHJvcFNoYWRvdz1mYWxzZV0ge2Jvb2xlYW59IFNldCBhIGRyb3Agc2hhZG93IGZvciB0aGUgdGV4dFxuICAgICAqIEBwYXJhbSBbc3R5bGUuZHJvcFNoYWRvd0NvbG9yPScjMDAwMDAwJ10ge3N0cmluZ3xudW1iZXJ9IEEgZmlsbCBzdHlsZSB0byBiZSB1c2VkIG9uIHRoZSBkcm9wc2hhZG93IGUuZyAncmVkJywgJyMwMEZGMDAnXG4gICAgICogQHBhcmFtIFtzdHlsZS5kcm9wU2hhZG93QW5nbGU9TWF0aC5QSS82XSB7bnVtYmVyfSBTZXQgYSBhbmdsZSBvZiB0aGUgZHJvcCBzaGFkb3dcbiAgICAgKiBAcGFyYW0gW3N0eWxlLmRyb3BTaGFkb3dEaXN0YW5jZT01XSB7bnVtYmVyfSBTZXQgYSBkaXN0YW5jZSBvZiB0aGUgZHJvcCBzaGFkb3dcbiAgICAgKiBAcGFyYW0gW3N0eWxlLmRyb3BTaGFkb3dCbHVyPTBdIHtudW1iZXJ9IFNldCBhIHNoYWRvdyBibHVyIHJhZGl1c1xuICAgICAqIEBwYXJhbSBbc3R5bGUucGFkZGluZz0wXSB7bnVtYmVyfSBPY2Nhc2lvbmFsbHkgc29tZSBmb250cyBhcmUgY3JvcHBlZCBvbiB0b3Agb3IgYm90dG9tLiBBZGRpbmcgc29tZSBwYWRkaW5nIHdpbGxcbiAgICAgKiAgICAgIHByZXZlbnQgdGhpcyBmcm9tIGhhcHBlbmluZyBieSBhZGRpbmcgcGFkZGluZyB0byB0aGUgdG9wIGFuZCBib3R0b20gb2YgdGV4dCBoZWlnaHQuXG4gICAgICogQHBhcmFtIFtzdHlsZS50ZXh0QmFzZWxpbmU9J2FscGhhYmV0aWMnXSB7c3RyaW5nfSBUaGUgYmFzZWxpbmUgb2YgdGhlIHRleHQgdGhhdCBpcyByZW5kZXJlZC5cbiAgICAgKiBAcGFyYW0gW3N0eWxlLmxpbmVKb2luPSdtaXRlciddIHtzdHJpbmd9IFRoZSBsaW5lSm9pbiBwcm9wZXJ0eSBzZXRzIHRoZSB0eXBlIG9mIGNvcm5lciBjcmVhdGVkLCBpdCBjYW4gcmVzb2x2ZVxuICAgICAqICAgICAgc3Bpa2VkIHRleHQgaXNzdWVzLiBEZWZhdWx0IGlzICdtaXRlcicgKGNyZWF0ZXMgYSBzaGFycCBjb3JuZXIpLlxuICAgICAqIEBwYXJhbSBbc3R5bGUubWl0ZXJMaW1pdD0xMF0ge251bWJlcn0gVGhlIG1pdGVyIGxpbWl0IHRvIHVzZSB3aGVuIHVzaW5nIHRoZSAnbWl0ZXInIGxpbmVKb2luIG1vZGUuIFRoaXMgY2FuIHJlZHVjZVxuICAgICAqICAgICAgb3IgaW5jcmVhc2UgdGhlIHNwaWtpbmVzcyBvZiByZW5kZXJlZCB0ZXh0LlxuICAgICAqIEBtZW1iZXJvZiBQSVhJLlRleHQjXG4gICAgICovXG4gICAgc3R5bGU6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fc3R5bGU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHN0eWxlKVxuICAgICAgICB7XG4gICAgICAgICAgICBzdHlsZSA9IHN0eWxlIHx8IHt9O1xuXG4gICAgICAgICAgICBpZiAodHlwZW9mIHN0eWxlLmZpbGwgPT09ICdudW1iZXInKSB7XG4gICAgICAgICAgICAgICAgc3R5bGUuZmlsbCA9IHV0aWxzLmhleDJzdHJpbmcoc3R5bGUuZmlsbCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICh0eXBlb2Ygc3R5bGUuc3Ryb2tlID09PSAnbnVtYmVyJykge1xuICAgICAgICAgICAgICAgIHN0eWxlLnN0cm9rZSA9IHV0aWxzLmhleDJzdHJpbmcoc3R5bGUuc3Ryb2tlKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHR5cGVvZiBzdHlsZS5kcm9wU2hhZG93Q29sb3IgPT09ICdudW1iZXInKSB7XG4gICAgICAgICAgICAgICAgc3R5bGUuZHJvcFNoYWRvd0NvbG9yID0gdXRpbHMuaGV4MnN0cmluZyhzdHlsZS5kcm9wU2hhZG93Q29sb3IpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBzdHlsZS5mb250ID0gc3R5bGUuZm9udCB8fCAnYm9sZCAyMHB0IEFyaWFsJztcbiAgICAgICAgICAgIHN0eWxlLmZpbGwgPSBzdHlsZS5maWxsIHx8ICdibGFjayc7XG4gICAgICAgICAgICBzdHlsZS5hbGlnbiA9IHN0eWxlLmFsaWduIHx8ICdsZWZ0JztcbiAgICAgICAgICAgIHN0eWxlLnN0cm9rZSA9IHN0eWxlLnN0cm9rZSB8fCAnYmxhY2snOyAvL3Byb3ZpZGUgYSBkZWZhdWx0LCBzZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9waXhpanMvcGl4aS5qcy9pc3N1ZXMvMTM2XG4gICAgICAgICAgICBzdHlsZS5zdHJva2VUaGlja25lc3MgPSBzdHlsZS5zdHJva2VUaGlja25lc3MgfHwgMDtcbiAgICAgICAgICAgIHN0eWxlLndvcmRXcmFwID0gc3R5bGUud29yZFdyYXAgfHwgZmFsc2U7XG4gICAgICAgICAgICBzdHlsZS53b3JkV3JhcFdpZHRoID0gc3R5bGUud29yZFdyYXBXaWR0aCB8fCAxMDA7XG5cbiAgICAgICAgICAgIHN0eWxlLmRyb3BTaGFkb3cgPSBzdHlsZS5kcm9wU2hhZG93IHx8IGZhbHNlO1xuICAgICAgICAgICAgc3R5bGUuZHJvcFNoYWRvd0NvbG9yID0gc3R5bGUuZHJvcFNoYWRvd0NvbG9yIHx8ICcjMDAwMDAwJztcbiAgICAgICAgICAgIHN0eWxlLmRyb3BTaGFkb3dBbmdsZSA9IHN0eWxlLmRyb3BTaGFkb3dBbmdsZSAhPT0gdW5kZWZpbmVkID8gc3R5bGUuZHJvcFNoYWRvd0FuZ2xlIDogTWF0aC5QSSAvIDY7XG4gICAgICAgICAgICBzdHlsZS5kcm9wU2hhZG93RGlzdGFuY2UgPSBzdHlsZS5kcm9wU2hhZG93RGlzdGFuY2UgIT09IHVuZGVmaW5lZCA/IHN0eWxlLmRyb3BTaGFkb3dEaXN0YW5jZSA6IDU7XG4gICAgICAgICAgICBzdHlsZS5kcm9wU2hhZG93Qmx1ciA9IHN0eWxlLmRyb3BTaGFkb3dCbHVyICE9PSB1bmRlZmluZWQgPyBzdHlsZS5kcm9wU2hhZG93Qmx1ciA6IDA7IC8vc2hhZG93Qmx1ciBpcyAnMCcgYnkgZGVmYXVsdCBhY2NvcmRpbmcgdG8gSFRNTFxuXG4gICAgICAgICAgICBzdHlsZS5wYWRkaW5nID0gc3R5bGUucGFkZGluZyB8fCAwO1xuXG4gICAgICAgICAgICBzdHlsZS50ZXh0QmFzZWxpbmUgPSBzdHlsZS50ZXh0QmFzZWxpbmUgfHwgJ2FscGhhYmV0aWMnO1xuXG4gICAgICAgICAgICBzdHlsZS5saW5lSm9pbiA9IHN0eWxlLmxpbmVKb2luIHx8ICdtaXRlcic7XG4gICAgICAgICAgICBzdHlsZS5taXRlckxpbWl0ID0gc3R5bGUubWl0ZXJMaW1pdCB8fCAxMDtcblxuICAgICAgICAgICAgdGhpcy5fc3R5bGUgPSBzdHlsZTtcbiAgICAgICAgICAgIHRoaXMuZGlydHkgPSB0cnVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFNldCB0aGUgY29weSBmb3IgdGhlIHRleHQgb2JqZWN0LiBUbyBzcGxpdCBhIGxpbmUgeW91IGNhbiB1c2UgJ1xcbicuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gdGV4dCB7c3RyaW5nfSBUaGUgY29weSB0aGF0IHlvdSB3b3VsZCBsaWtlIHRoZSB0ZXh0IHRvIGRpc3BsYXlcbiAgICAgKiBAbWVtYmVyb2YgUElYSS5UZXh0I1xuICAgICAqL1xuICAgIHRleHQ6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbigpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl90ZXh0O1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh0ZXh0KXtcbiAgICAgICAgICAgIHRleHQgPSB0ZXh0LnRvU3RyaW5nKCkgfHwgJyAnO1xuICAgICAgICAgICAgaWYgKHRoaXMuX3RleHQgPT09IHRleHQpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5fdGV4dCA9IHRleHQ7XG4gICAgICAgICAgICB0aGlzLmRpcnR5ID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuXG4vKipcbiAqIFJlbmRlcnMgdGV4dCBhbmQgdXBkYXRlcyBpdCB3aGVuIG5lZWRlZFxuICpcbiAqIEBwcml2YXRlXG4gKi9cblRleHQucHJvdG90eXBlLnVwZGF0ZVRleHQgPSBmdW5jdGlvbiAoKVxue1xuICAgIHZhciBzdHlsZSA9IHRoaXMuX3N0eWxlO1xuICAgIHRoaXMuY29udGV4dC5mb250ID0gc3R5bGUuZm9udDtcblxuICAgIC8vIHdvcmQgd3JhcFxuICAgIC8vIHByZXNlcnZlIG9yaWdpbmFsIHRleHRcbiAgICB2YXIgb3V0cHV0VGV4dCA9IHN0eWxlLndvcmRXcmFwID8gdGhpcy53b3JkV3JhcCh0aGlzLl90ZXh0KSA6IHRoaXMuX3RleHQ7XG5cbiAgICAvLyBzcGxpdCB0ZXh0IGludG8gbGluZXNcbiAgICB2YXIgbGluZXMgPSBvdXRwdXRUZXh0LnNwbGl0KC8oPzpcXHJcXG58XFxyfFxcbikvKTtcblxuICAgIC8vIGNhbGN1bGF0ZSB0ZXh0IHdpZHRoXG4gICAgdmFyIGxpbmVXaWR0aHMgPSBuZXcgQXJyYXkobGluZXMubGVuZ3RoKTtcbiAgICB2YXIgbWF4TGluZVdpZHRoID0gMDtcbiAgICB2YXIgZm9udFByb3BlcnRpZXMgPSB0aGlzLmRldGVybWluZUZvbnRQcm9wZXJ0aWVzKHN0eWxlLmZvbnQpO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGluZXMubGVuZ3RoOyBpKyspXG4gICAge1xuICAgICAgICB2YXIgbGluZVdpZHRoID0gdGhpcy5jb250ZXh0Lm1lYXN1cmVUZXh0KGxpbmVzW2ldKS53aWR0aDtcbiAgICAgICAgbGluZVdpZHRoc1tpXSA9IGxpbmVXaWR0aDtcbiAgICAgICAgbWF4TGluZVdpZHRoID0gTWF0aC5tYXgobWF4TGluZVdpZHRoLCBsaW5lV2lkdGgpO1xuICAgIH1cblxuICAgIHZhciB3aWR0aCA9IG1heExpbmVXaWR0aCArIHN0eWxlLnN0cm9rZVRoaWNrbmVzcztcbiAgICBpZiAoc3R5bGUuZHJvcFNoYWRvdylcbiAgICB7XG4gICAgICAgIHdpZHRoICs9IHN0eWxlLmRyb3BTaGFkb3dEaXN0YW5jZTtcbiAgICB9XG5cbiAgICB0aGlzLmNhbnZhcy53aWR0aCA9ICggd2lkdGggKyB0aGlzLmNvbnRleHQubGluZVdpZHRoICkgKiB0aGlzLnJlc29sdXRpb247XG5cbiAgICAvLyBjYWxjdWxhdGUgdGV4dCBoZWlnaHRcbiAgICB2YXIgbGluZUhlaWdodCA9IHRoaXMuc3R5bGUubGluZUhlaWdodCB8fCBmb250UHJvcGVydGllcy5mb250U2l6ZSArIHN0eWxlLnN0cm9rZVRoaWNrbmVzcztcblxuICAgIHZhciBoZWlnaHQgPSBsaW5lSGVpZ2h0ICogbGluZXMubGVuZ3RoO1xuICAgIGlmIChzdHlsZS5kcm9wU2hhZG93KVxuICAgIHtcbiAgICAgICAgaGVpZ2h0ICs9IHN0eWxlLmRyb3BTaGFkb3dEaXN0YW5jZTtcbiAgICB9XG5cbiAgICB0aGlzLmNhbnZhcy5oZWlnaHQgPSAoIGhlaWdodCArIHRoaXMuX3N0eWxlLnBhZGRpbmcgKiAyICkgKiB0aGlzLnJlc29sdXRpb247XG5cbiAgICB0aGlzLmNvbnRleHQuc2NhbGUoIHRoaXMucmVzb2x1dGlvbiwgdGhpcy5yZXNvbHV0aW9uKTtcblxuICAgIGlmIChuYXZpZ2F0b3IuaXNDb2Nvb25KUylcbiAgICB7XG4gICAgICAgIHRoaXMuY29udGV4dC5jbGVhclJlY3QoMCwgMCwgdGhpcy5jYW52YXMud2lkdGgsIHRoaXMuY2FudmFzLmhlaWdodCk7XG5cbiAgICB9XG5cbiAgICAvL3RoaXMuY29udGV4dC5maWxsU3R5bGU9XCIjRkYwMDAwXCI7XG4gICAgLy90aGlzLmNvbnRleHQuZmlsbFJlY3QoMCwgMCwgdGhpcy5jYW52YXMud2lkdGgsIHRoaXMuY2FudmFzLmhlaWdodCk7XG5cbiAgICB0aGlzLmNvbnRleHQuZm9udCA9IHN0eWxlLmZvbnQ7XG4gICAgdGhpcy5jb250ZXh0LnN0cm9rZVN0eWxlID0gc3R5bGUuc3Ryb2tlO1xuICAgIHRoaXMuY29udGV4dC5saW5lV2lkdGggPSBzdHlsZS5zdHJva2VUaGlja25lc3M7XG4gICAgdGhpcy5jb250ZXh0LnRleHRCYXNlbGluZSA9IHN0eWxlLnRleHRCYXNlbGluZTtcbiAgICB0aGlzLmNvbnRleHQubGluZUpvaW4gPSBzdHlsZS5saW5lSm9pbjtcbiAgICB0aGlzLmNvbnRleHQubWl0ZXJMaW1pdCA9IHN0eWxlLm1pdGVyTGltaXQ7XG5cbiAgICB2YXIgbGluZVBvc2l0aW9uWDtcbiAgICB2YXIgbGluZVBvc2l0aW9uWTtcblxuICAgIGlmIChzdHlsZS5kcm9wU2hhZG93KVxuICAgIHtcbiAgICAgICAgaWYgKHN0eWxlLmRyb3BTaGFkb3dCbHVyID4gMCkge1xuICAgICAgICAgICAgdGhpcy5jb250ZXh0LnNoYWRvd0NvbG9yID0gc3R5bGUuZHJvcFNoYWRvd0NvbG9yO1xuICAgICAgICAgICAgdGhpcy5jb250ZXh0LnNoYWRvd0JsdXIgPSBzdHlsZS5kcm9wU2hhZG93Qmx1cjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuY29udGV4dC5maWxsU3R5bGUgPSBzdHlsZS5kcm9wU2hhZG93Q29sb3I7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgeFNoYWRvd09mZnNldCA9IE1hdGguY29zKHN0eWxlLmRyb3BTaGFkb3dBbmdsZSkgKiBzdHlsZS5kcm9wU2hhZG93RGlzdGFuY2U7XG4gICAgICAgIHZhciB5U2hhZG93T2Zmc2V0ID0gTWF0aC5zaW4oc3R5bGUuZHJvcFNoYWRvd0FuZ2xlKSAqIHN0eWxlLmRyb3BTaGFkb3dEaXN0YW5jZTtcblxuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbGluZXMubGVuZ3RoOyBpKyspXG4gICAgICAgIHtcbiAgICAgICAgICAgIGxpbmVQb3NpdGlvblggPSBzdHlsZS5zdHJva2VUaGlja25lc3MgLyAyO1xuICAgICAgICAgICAgbGluZVBvc2l0aW9uWSA9IChzdHlsZS5zdHJva2VUaGlja25lc3MgLyAyICsgaSAqIGxpbmVIZWlnaHQpICsgZm9udFByb3BlcnRpZXMuYXNjZW50O1xuXG4gICAgICAgICAgICBpZiAoc3R5bGUuYWxpZ24gPT09ICdyaWdodCcpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgbGluZVBvc2l0aW9uWCArPSBtYXhMaW5lV2lkdGggLSBsaW5lV2lkdGhzW2ldO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoc3R5bGUuYWxpZ24gPT09ICdjZW50ZXInKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGxpbmVQb3NpdGlvblggKz0gKG1heExpbmVXaWR0aCAtIGxpbmVXaWR0aHNbaV0pIC8gMjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHN0eWxlLmZpbGwpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdGhpcy5jb250ZXh0LmZpbGxUZXh0KGxpbmVzW2ldLCBsaW5lUG9zaXRpb25YICsgeFNoYWRvd09mZnNldCwgbGluZVBvc2l0aW9uWSArIHlTaGFkb3dPZmZzZXQgKyB0aGlzLl9zdHlsZS5wYWRkaW5nKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vc2V0IGNhbnZhcyB0ZXh0IHN0eWxlc1xuICAgIHRoaXMuY29udGV4dC5maWxsU3R5bGUgPSBzdHlsZS5maWxsO1xuXG4gICAgLy9kcmF3IGxpbmVzIGxpbmUgYnkgbGluZVxuICAgIGZvciAoaSA9IDA7IGkgPCBsaW5lcy5sZW5ndGg7IGkrKylcbiAgICB7XG4gICAgICAgIGxpbmVQb3NpdGlvblggPSBzdHlsZS5zdHJva2VUaGlja25lc3MgLyAyO1xuICAgICAgICBsaW5lUG9zaXRpb25ZID0gKHN0eWxlLnN0cm9rZVRoaWNrbmVzcyAvIDIgKyBpICogbGluZUhlaWdodCkgKyBmb250UHJvcGVydGllcy5hc2NlbnQ7XG5cbiAgICAgICAgaWYgKHN0eWxlLmFsaWduID09PSAncmlnaHQnKVxuICAgICAgICB7XG4gICAgICAgICAgICBsaW5lUG9zaXRpb25YICs9IG1heExpbmVXaWR0aCAtIGxpbmVXaWR0aHNbaV07XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoc3R5bGUuYWxpZ24gPT09ICdjZW50ZXInKVxuICAgICAgICB7XG4gICAgICAgICAgICBsaW5lUG9zaXRpb25YICs9IChtYXhMaW5lV2lkdGggLSBsaW5lV2lkdGhzW2ldKSAvIDI7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoc3R5bGUuc3Ryb2tlICYmIHN0eWxlLnN0cm9rZVRoaWNrbmVzcylcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5jb250ZXh0LnN0cm9rZVRleHQobGluZXNbaV0sIGxpbmVQb3NpdGlvblgsIGxpbmVQb3NpdGlvblkgKyB0aGlzLl9zdHlsZS5wYWRkaW5nKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChzdHlsZS5maWxsKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmNvbnRleHQuZmlsbFRleHQobGluZXNbaV0sIGxpbmVQb3NpdGlvblgsIGxpbmVQb3NpdGlvblkgKyB0aGlzLl9zdHlsZS5wYWRkaW5nKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMudXBkYXRlVGV4dHVyZSgpO1xufTtcblxuLyoqXG4gKiBVcGRhdGVzIHRleHR1cmUgc2l6ZSBiYXNlZCBvbiBjYW52YXMgc2l6ZVxuICpcbiAqIEBwcml2YXRlXG4gKi9cblRleHQucHJvdG90eXBlLnVwZGF0ZVRleHR1cmUgPSBmdW5jdGlvbiAoKVxue1xuICAgIHZhciB0ZXh0dXJlID0gdGhpcy5fdGV4dHVyZTtcblxuICAgIHRleHR1cmUuYmFzZVRleHR1cmUuaGFzTG9hZGVkID0gdHJ1ZTtcbiAgICB0ZXh0dXJlLmJhc2VUZXh0dXJlLnJlc29sdXRpb24gPSB0aGlzLnJlc29sdXRpb247XG5cbiAgICB0ZXh0dXJlLmJhc2VUZXh0dXJlLndpZHRoID0gdGhpcy5jYW52YXMud2lkdGggLyB0aGlzLnJlc29sdXRpb247XG4gICAgdGV4dHVyZS5iYXNlVGV4dHVyZS5oZWlnaHQgPSB0aGlzLmNhbnZhcy5oZWlnaHQgLyB0aGlzLnJlc29sdXRpb247XG4gICAgdGV4dHVyZS5jcm9wLndpZHRoID0gdGV4dHVyZS5fZnJhbWUud2lkdGggPSB0aGlzLmNhbnZhcy53aWR0aCAvIHRoaXMucmVzb2x1dGlvbjtcbiAgICB0ZXh0dXJlLmNyb3AuaGVpZ2h0ID0gdGV4dHVyZS5fZnJhbWUuaGVpZ2h0ID0gdGhpcy5jYW52YXMuaGVpZ2h0IC8gdGhpcy5yZXNvbHV0aW9uO1xuXG4gICAgdGV4dHVyZS50cmltLnggPSAwO1xuICAgIHRleHR1cmUudHJpbS55ID0gLXRoaXMuX3N0eWxlLnBhZGRpbmc7XG5cbiAgICB0ZXh0dXJlLnRyaW0ud2lkdGggPSB0ZXh0dXJlLl9mcmFtZS53aWR0aDtcbiAgICB0ZXh0dXJlLnRyaW0uaGVpZ2h0ID0gdGV4dHVyZS5fZnJhbWUuaGVpZ2h0IC0gdGhpcy5fc3R5bGUucGFkZGluZyoyO1xuXG4gICAgdGhpcy5fd2lkdGggPSB0aGlzLmNhbnZhcy53aWR0aCAvIHRoaXMucmVzb2x1dGlvbjtcbiAgICB0aGlzLl9oZWlnaHQgPSB0aGlzLmNhbnZhcy5oZWlnaHQgLyB0aGlzLnJlc29sdXRpb247XG5cbiAgICB0ZXh0dXJlLmJhc2VUZXh0dXJlLmVtaXQoJ3VwZGF0ZScsICB0ZXh0dXJlLmJhc2VUZXh0dXJlKTtcblxuICAgIHRoaXMuZGlydHkgPSBmYWxzZTtcbn07XG5cbi8qKlxuICogUmVuZGVycyB0aGUgb2JqZWN0IHVzaW5nIHRoZSBXZWJHTCByZW5kZXJlclxuICpcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5XZWJHTFJlbmRlcmVyfVxuICovXG5UZXh0LnByb3RvdHlwZS5yZW5kZXJXZWJHTCA9IGZ1bmN0aW9uIChyZW5kZXJlcilcbntcbiAgICBpZiAodGhpcy5kaXJ0eSlcbiAgICB7XG4gICAgICAgIC8vdGhpcy5yZXNvbHV0aW9uID0gMS8vcmVuZGVyZXIucmVzb2x1dGlvbjtcblxuICAgICAgICB0aGlzLnVwZGF0ZVRleHQoKTtcbiAgICB9XG5cbiAgICBTcHJpdGUucHJvdG90eXBlLnJlbmRlcldlYkdMLmNhbGwodGhpcywgcmVuZGVyZXIpO1xufTtcblxuLyoqXG4gKiBSZW5kZXJzIHRoZSBvYmplY3QgdXNpbmcgdGhlIENhbnZhcyByZW5kZXJlclxuICpcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5DYW52YXNSZW5kZXJlcn1cbiAqIEBwcml2YXRlXG4gKi9cblRleHQucHJvdG90eXBlLl9yZW5kZXJDYW52YXMgPSBmdW5jdGlvbiAocmVuZGVyZXIpXG57XG4gICAgaWYgKHRoaXMuZGlydHkpXG4gICAge1xuICAgICAvLyAgIHRoaXMucmVzb2x1dGlvbiA9IDEvL3JlbmRlcmVyLnJlc29sdXRpb247XG5cbiAgICAgICAgdGhpcy51cGRhdGVUZXh0KCk7XG4gICAgfVxuXG4gICAgU3ByaXRlLnByb3RvdHlwZS5fcmVuZGVyQ2FudmFzLmNhbGwodGhpcywgcmVuZGVyZXIpO1xufTtcblxuLyoqXG4gKiBDYWxjdWxhdGVzIHRoZSBhc2NlbnQsIGRlc2NlbnQgYW5kIGZvbnRTaXplIG9mIGEgZ2l2ZW4gZm9udFN0eWxlXG4gKlxuICogQHBhcmFtIGZvbnRTdHlsZSB7b2JqZWN0fVxuICogQHByaXZhdGVcbiAqL1xuVGV4dC5wcm90b3R5cGUuZGV0ZXJtaW5lRm9udFByb3BlcnRpZXMgPSBmdW5jdGlvbiAoZm9udFN0eWxlKVxue1xuICAgIHZhciBwcm9wZXJ0aWVzID0gVGV4dC5mb250UHJvcGVydGllc0NhY2hlW2ZvbnRTdHlsZV07XG5cbiAgICBpZiAoIXByb3BlcnRpZXMpXG4gICAge1xuICAgICAgICBwcm9wZXJ0aWVzID0ge307XG5cbiAgICAgICAgdmFyIGNhbnZhcyA9IFRleHQuZm9udFByb3BlcnRpZXNDYW52YXM7XG4gICAgICAgIHZhciBjb250ZXh0ID0gVGV4dC5mb250UHJvcGVydGllc0NvbnRleHQ7XG5cbiAgICAgICAgY29udGV4dC5mb250ID0gZm9udFN0eWxlO1xuXG4gICAgICAgIHZhciB3aWR0aCA9IE1hdGguY2VpbChjb250ZXh0Lm1lYXN1cmVUZXh0KCd8TcOJcScpLndpZHRoKTtcbiAgICAgICAgdmFyIGJhc2VsaW5lID0gTWF0aC5jZWlsKGNvbnRleHQubWVhc3VyZVRleHQoJ00nKS53aWR0aCk7XG4gICAgICAgIHZhciBoZWlnaHQgPSAyICogYmFzZWxpbmU7XG5cbiAgICAgICAgYmFzZWxpbmUgPSBiYXNlbGluZSAqIDEuNCB8IDA7XG5cbiAgICAgICAgY2FudmFzLndpZHRoID0gd2lkdGg7XG4gICAgICAgIGNhbnZhcy5oZWlnaHQgPSBoZWlnaHQ7XG5cbiAgICAgICAgY29udGV4dC5maWxsU3R5bGUgPSAnI2YwMCc7XG4gICAgICAgIGNvbnRleHQuZmlsbFJlY3QoMCwgMCwgd2lkdGgsIGhlaWdodCk7XG5cbiAgICAgICAgY29udGV4dC5mb250ID0gZm9udFN0eWxlO1xuXG4gICAgICAgIGNvbnRleHQudGV4dEJhc2VsaW5lID0gJ2FscGhhYmV0aWMnO1xuICAgICAgICBjb250ZXh0LmZpbGxTdHlsZSA9ICcjMDAwJztcbiAgICAgICAgY29udGV4dC5maWxsVGV4dCgnfE3DiXEnLCAwLCBiYXNlbGluZSk7XG5cbiAgICAgICAgdmFyIGltYWdlZGF0YSA9IGNvbnRleHQuZ2V0SW1hZ2VEYXRhKDAsIDAsIHdpZHRoLCBoZWlnaHQpLmRhdGE7XG4gICAgICAgIHZhciBwaXhlbHMgPSBpbWFnZWRhdGEubGVuZ3RoO1xuICAgICAgICB2YXIgbGluZSA9IHdpZHRoICogNDtcblxuICAgICAgICB2YXIgaSwgajtcblxuICAgICAgICB2YXIgaWR4ID0gMDtcbiAgICAgICAgdmFyIHN0b3AgPSBmYWxzZTtcblxuICAgICAgICAvLyBhc2NlbnQuIHNjYW4gZnJvbSB0b3AgdG8gYm90dG9tIHVudGlsIHdlIGZpbmQgYSBub24gcmVkIHBpeGVsXG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCBiYXNlbGluZTsgaSsrKVxuICAgICAgICB7XG4gICAgICAgICAgICBmb3IgKGogPSAwOyBqIDwgbGluZTsgaiArPSA0KVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGlmIChpbWFnZWRhdGFbaWR4ICsgal0gIT09IDI1NSlcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIHN0b3AgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIXN0b3ApXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgaWR4ICs9IGxpbmU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBwcm9wZXJ0aWVzLmFzY2VudCA9IGJhc2VsaW5lIC0gaTtcblxuICAgICAgICBpZHggPSBwaXhlbHMgLSBsaW5lO1xuICAgICAgICBzdG9wID0gZmFsc2U7XG5cbiAgICAgICAgLy8gZGVzY2VudC4gc2NhbiBmcm9tIGJvdHRvbSB0byB0b3AgdW50aWwgd2UgZmluZCBhIG5vbiByZWQgcGl4ZWxcbiAgICAgICAgZm9yIChpID0gaGVpZ2h0OyBpID4gYmFzZWxpbmU7IGktLSlcbiAgICAgICAge1xuICAgICAgICAgICAgZm9yIChqID0gMDsgaiA8IGxpbmU7IGogKz0gNClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBpZiAoaW1hZ2VkYXRhW2lkeCArIGpdICE9PSAyNTUpXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBzdG9wID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCFzdG9wKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGlkeCAtPSBsaW5lO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcHJvcGVydGllcy5kZXNjZW50ID0gaSAtIGJhc2VsaW5lO1xuICAgICAgICBwcm9wZXJ0aWVzLmZvbnRTaXplID0gcHJvcGVydGllcy5hc2NlbnQgKyBwcm9wZXJ0aWVzLmRlc2NlbnQ7XG5cbiAgICAgICAgVGV4dC5mb250UHJvcGVydGllc0NhY2hlW2ZvbnRTdHlsZV0gPSBwcm9wZXJ0aWVzO1xuICAgIH1cblxuICAgIHJldHVybiBwcm9wZXJ0aWVzO1xufTtcblxuLyoqXG4gKiBBcHBsaWVzIG5ld2xpbmVzIHRvIGEgc3RyaW5nIHRvIGhhdmUgaXQgb3B0aW1hbGx5IGZpdCBpbnRvIHRoZSBob3Jpem9udGFsXG4gKiBib3VuZHMgc2V0IGJ5IHRoZSBUZXh0IG9iamVjdCdzIHdvcmRXcmFwV2lkdGggcHJvcGVydHkuXG4gKlxuICogQHBhcmFtIHRleHQge3N0cmluZ31cbiAqIEBwcml2YXRlXG4gKi9cblRleHQucHJvdG90eXBlLndvcmRXcmFwID0gZnVuY3Rpb24gKHRleHQpXG57XG4gICAgLy8gR3JlZWR5IHdyYXBwaW5nIGFsZ29yaXRobSB0aGF0IHdpbGwgd3JhcCB3b3JkcyBhcyB0aGUgbGluZSBncm93cyBsb25nZXJcbiAgICAvLyB0aGFuIGl0cyBob3Jpem9udGFsIGJvdW5kcy5cbiAgICB2YXIgcmVzdWx0ID0gJyc7XG4gICAgdmFyIGxpbmVzID0gdGV4dC5zcGxpdCgnXFxuJyk7XG4gICAgdmFyIHdvcmRXcmFwV2lkdGggPSB0aGlzLl9zdHlsZS53b3JkV3JhcFdpZHRoO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGluZXMubGVuZ3RoOyBpKyspXG4gICAge1xuICAgICAgICB2YXIgc3BhY2VMZWZ0ID0gd29yZFdyYXBXaWR0aDtcbiAgICAgICAgdmFyIHdvcmRzID0gbGluZXNbaV0uc3BsaXQoJyAnKTtcbiAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCB3b3Jkcy5sZW5ndGg7IGorKylcbiAgICAgICAge1xuICAgICAgICAgICAgdmFyIHdvcmRXaWR0aCA9IHRoaXMuY29udGV4dC5tZWFzdXJlVGV4dCh3b3Jkc1tqXSkud2lkdGg7XG4gICAgICAgICAgICB2YXIgd29yZFdpZHRoV2l0aFNwYWNlID0gd29yZFdpZHRoICsgdGhpcy5jb250ZXh0Lm1lYXN1cmVUZXh0KCcgJykud2lkdGg7XG4gICAgICAgICAgICBpZiAoaiA9PT0gMCB8fCB3b3JkV2lkdGhXaXRoU3BhY2UgPiBzcGFjZUxlZnQpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgLy8gU2tpcCBwcmludGluZyB0aGUgbmV3bGluZSBpZiBpdCdzIHRoZSBmaXJzdCB3b3JkIG9mIHRoZSBsaW5lIHRoYXQgaXNcbiAgICAgICAgICAgICAgICAvLyBncmVhdGVyIHRoYW4gdGhlIHdvcmQgd3JhcCB3aWR0aC5cbiAgICAgICAgICAgICAgICBpZiAoaiA+IDApXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQgKz0gJ1xcbic7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJlc3VsdCArPSB3b3Jkc1tqXTtcbiAgICAgICAgICAgICAgICBzcGFjZUxlZnQgPSB3b3JkV3JhcFdpZHRoIC0gd29yZFdpZHRoO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHNwYWNlTGVmdCAtPSB3b3JkV2lkdGhXaXRoU3BhY2U7XG4gICAgICAgICAgICAgICAgcmVzdWx0ICs9ICcgJyArIHdvcmRzW2pdO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGkgPCBsaW5lcy5sZW5ndGgtMSlcbiAgICAgICAge1xuICAgICAgICAgICAgcmVzdWx0ICs9ICdcXG4nO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG59O1xuXG4vKipcbiAqIFJldHVybnMgdGhlIGJvdW5kcyBvZiB0aGUgVGV4dCBhcyBhIHJlY3RhbmdsZS4gVGhlIGJvdW5kcyBjYWxjdWxhdGlvbiB0YWtlcyB0aGUgd29ybGRUcmFuc2Zvcm0gaW50byBhY2NvdW50LlxuICpcbiAqIEBwYXJhbSBtYXRyaXgge1BJWEkuTWF0cml4fSB0aGUgdHJhbnNmb3JtYXRpb24gbWF0cml4IG9mIHRoZSBUZXh0XG4gKiBAcmV0dXJuIHtQSVhJLlJlY3RhbmdsZX0gdGhlIGZyYW1pbmcgcmVjdGFuZ2xlXG4gKi9cblRleHQucHJvdG90eXBlLmdldEJvdW5kcyA9IGZ1bmN0aW9uIChtYXRyaXgpXG57XG4gICAgaWYgKHRoaXMuZGlydHkpXG4gICAge1xuICAgICAgICB0aGlzLnVwZGF0ZVRleHQoKTtcbiAgICB9XG5cbiAgICByZXR1cm4gU3ByaXRlLnByb3RvdHlwZS5nZXRCb3VuZHMuY2FsbCh0aGlzLCBtYXRyaXgpO1xufTtcblxuLyoqXG4gKiBEZXN0cm95cyB0aGlzIHRleHQgb2JqZWN0LlxuICpcbiAqIEBwYXJhbSBbZGVzdHJveUJhc2VUZXh0dXJlPXRydWVdIHtib29sZWFufSB3aGV0aGVyIHRvIGRlc3Ryb3kgdGhlIGJhc2UgdGV4dHVyZSBhcyB3ZWxsXG4gKi9cblRleHQucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoZGVzdHJveUJhc2VUZXh0dXJlKVxue1xuICAgIC8vIG1ha2Ugc3VyZSB0byByZXNldCB0aGUgdGhlIGNvbnRleHQgYW5kIGNhbnZhcy4uIGRvbnQgd2FudCB0aGlzIGhhbmdpbmcgYXJvdW5kIGluIG1lbW9yeSFcbiAgICB0aGlzLmNvbnRleHQgPSBudWxsO1xuICAgIHRoaXMuY2FudmFzID0gbnVsbDtcblxuICAgIHRoaXMuX3N0eWxlID0gbnVsbDtcblxuICAgIHRoaXMuX3RleHR1cmUuZGVzdHJveShkZXN0cm95QmFzZVRleHR1cmUgPT09IHVuZGVmaW5lZCA/IHRydWUgOiBkZXN0cm95QmFzZVRleHR1cmUpO1xufTtcbiIsInZhciB1dGlscyA9IHJlcXVpcmUoJy4uL3V0aWxzJyksXG4gICAgQ09OU1QgPSByZXF1aXJlKCcuLi9jb25zdCcpLFxuICAgIEV2ZW50RW1pdHRlciA9IHJlcXVpcmUoJ2V2ZW50ZW1pdHRlcjMnKTtcblxuLyoqXG4gKiBBIHRleHR1cmUgc3RvcmVzIHRoZSBpbmZvcm1hdGlvbiB0aGF0IHJlcHJlc2VudHMgYW4gaW1hZ2UuIEFsbCB0ZXh0dXJlcyBoYXZlIGEgYmFzZSB0ZXh0dXJlLlxuICpcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqIEBwYXJhbSBzb3VyY2Uge0ltYWdlfENhbnZhc30gdGhlIHNvdXJjZSBvYmplY3Qgb2YgdGhlIHRleHR1cmUuXG4gKiBAcGFyYW0gW3NjYWxlTW9kZT1QSVhJLlNDQUxFX01PREVTLkRFRkFVTFRdIHtudW1iZXJ9IFNlZSB7QGxpbmsgUElYSS5TQ0FMRV9NT0RFU30gZm9yIHBvc3NpYmxlIHZhbHVlc1xuICogQHBhcmFtIHJlc29sdXRpb24ge251bWJlcn0gdGhlIHJlc29sdXRpb24gb2YgdGhlIHRleHR1cmUgZm9yIGRldmljZXMgd2l0aCBkaWZmZXJlbnQgcGl4ZWwgcmF0aW9zXG4gKi9cbmZ1bmN0aW9uIEJhc2VUZXh0dXJlKHNvdXJjZSwgc2NhbGVNb2RlLCByZXNvbHV0aW9uKVxue1xuICAgIEV2ZW50RW1pdHRlci5jYWxsKHRoaXMpO1xuXG4gICAgdGhpcy51aWQgPSB1dGlscy51aWQoKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBSZXNvbHV0aW9uIG9mIHRoZSB0ZXh0dXJlLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMucmVzb2x1dGlvbiA9IHJlc29sdXRpb24gfHwgMTtcblxuICAgIC8qKlxuICAgICAqIFRoZSB3aWR0aCBvZiB0aGUgYmFzZSB0ZXh0dXJlIHNldCB3aGVuIHRoZSBpbWFnZSBoYXMgbG9hZGVkXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQHJlYWRPbmx5XG4gICAgICovXG4gICAgdGhpcy53aWR0aCA9IDEwMDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBoZWlnaHQgb2YgdGhlIGJhc2UgdGV4dHVyZSBzZXQgd2hlbiB0aGUgaW1hZ2UgaGFzIGxvYWRlZFxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEByZWFkT25seVxuICAgICAqL1xuICAgIHRoaXMuaGVpZ2h0ID0gMTAwO1xuXG4gICAgLy8gVE9ETyBkb2NzXG4gICAgLy8gdXNlZCB0byBzdG9yZSB0aGUgYWN0dWFsIGRpbWVuc2lvbnMgb2YgdGhlIHNvdXJjZVxuICAgIC8qKlxuICAgICAqIFVzZWQgdG8gc3RvcmUgdGhlIGFjdHVhbCB3aWR0aCBvZiB0aGUgc291cmNlIG9mIHRoaXMgdGV4dHVyZVxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEByZWFkT25seVxuICAgICAqL1xuICAgIHRoaXMucmVhbFdpZHRoID0gMTAwO1xuICAgIC8qKlxuICAgICAqIFVzZWQgdG8gc3RvcmUgdGhlIGFjdHVhbCBoZWlnaHQgb2YgdGhlIHNvdXJjZSBvZiB0aGlzIHRleHR1cmVcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAcmVhZE9ubHlcbiAgICAgKi9cbiAgICB0aGlzLnJlYWxIZWlnaHQgPSAxMDA7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgc2NhbGUgbW9kZSB0byBhcHBseSB3aGVuIHNjYWxpbmcgdGhpcyB0ZXh0dXJlXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgUElYSS5TQ0FMRV9NT0RFUy5MSU5FQVJcbiAgICAgKiBAc2VlIFBJWEkuU0NBTEVfTU9ERVNcbiAgICAgKi9cbiAgICB0aGlzLnNjYWxlTW9kZSA9IHNjYWxlTW9kZSB8fCBDT05TVC5TQ0FMRV9NT0RFUy5ERUZBVUxUO1xuXG4gICAgLyoqXG4gICAgICogU2V0IHRvIHRydWUgb25jZSB0aGUgYmFzZSB0ZXh0dXJlIGhhcyBzdWNjZXNzZnVsbHkgbG9hZGVkLlxuICAgICAqXG4gICAgICogVGhpcyBpcyBuZXZlciB0cnVlIGlmIHRoZSB1bmRlcmx5aW5nIHNvdXJjZSBmYWlscyB0byBsb2FkIG9yIGhhcyBubyB0ZXh0dXJlIGRhdGEuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqIEByZWFkT25seVxuICAgICAqL1xuICAgIHRoaXMuaGFzTG9hZGVkID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBTZXQgdG8gdHJ1ZSBpZiB0aGUgc291cmNlIGlzIGN1cnJlbnRseSBsb2FkaW5nLlxuICAgICAqXG4gICAgICogSWYgYW4gSW1hZ2Ugc291cmNlIGlzIGxvYWRpbmcgdGhlICdsb2FkZWQnIG9yICdlcnJvcicgZXZlbnQgd2lsbCBiZVxuICAgICAqIGRpc3BhdGNoZWQgd2hlbiB0aGUgb3BlcmF0aW9uIGVuZHMuIEFuIHVuZGVyeWxpbmcgc291cmNlIHRoYXQgaXNcbiAgICAgKiBpbW1lZGlhdGVseS1hdmFpbGFibGUgYnlwYXNzZXMgbG9hZGluZyBlbnRpcmVseS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICogQHJlYWRvbmx5XG4gICAgICovXG4gICAgdGhpcy5pc0xvYWRpbmcgPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBpbWFnZSBzb3VyY2UgdGhhdCBpcyB1c2VkIHRvIGNyZWF0ZSB0aGUgdGV4dHVyZS5cbiAgICAgKlxuICAgICAqIFRPRE86IE1ha2UgdGhpcyBhIHNldHRlciB0aGF0IGNhbGxzIGxvYWRTb3VyY2UoKTtcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge0ltYWdlfENhbnZhc31cbiAgICAgKiBAcmVhZG9ubHlcbiAgICAgKi9cbiAgICB0aGlzLnNvdXJjZSA9IG51bGw7IC8vIHNldCBpbiBsb2FkU291cmNlLCBpZiBhdCBhbGxcblxuICAgIC8qKlxuICAgICAqIENvbnRyb2xzIGlmIFJHQiBjaGFubmVscyBzaG91bGQgYmUgcHJlLW11bHRpcGxpZWQgYnkgQWxwaGEgIChXZWJHTCBvbmx5KVxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKiBAZGVmYXVsdCB0cnVlXG4gICAgICovXG4gICAgdGhpcy5wcmVtdWx0aXBsaWVkQWxwaGEgPSB0cnVlO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7c3RyaW5nfVxuICAgICAqL1xuICAgIHRoaXMuaW1hZ2VVcmwgPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogV2V0aGVyIG9yIG5vdCB0aGUgdGV4dHVyZSBpcyBhIHBvd2VyIG9mIHR3bywgdHJ5IHRvIHVzZSBwb3dlciBvZiB0d28gdGV4dHVyZXMgYXMgbXVjaCBhcyB5b3UgY2FuXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuaXNQb3dlck9mVHdvID0gZmFsc2U7XG5cbiAgICAvLyB1c2VkIGZvciB3ZWJHTFxuXG4gICAgLyoqXG4gICAgICpcbiAgICAgKiBTZXQgdGhpcyB0byB0cnVlIGlmIGEgbWlwbWFwIG9mIHRoaXMgdGV4dHVyZSBuZWVkcyB0byBiZSBnZW5lcmF0ZWQuIFRoaXMgdmFsdWUgbmVlZHMgdG8gYmUgc2V0IGJlZm9yZSB0aGUgdGV4dHVyZSBpcyB1c2VkXG4gICAgICogQWxzbyB0aGUgdGV4dHVyZSBtdXN0IGJlIGEgcG93ZXIgb2YgdHdvIHNpemUgdG8gd29ya1xuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKi9cbiAgICB0aGlzLm1pcG1hcCA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogQSBtYXAgb2YgcmVuZGVyZXIgSURzIHRvIHdlYmdsIHRleHR1cmVzXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtvYmplY3Q8bnVtYmVyLCBXZWJHTFRleHR1cmU+fVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fZ2xUZXh0dXJlcyA9IHt9O1xuICAgIHRoaXMuX2FjdGl2ZSA9IGZhbHNlO1xuICAgIHRoaXMuX2lkID0gMDtcbiAgICBcbiAgICAvLyBpZiBubyBzb3VyY2UgcGFzc2VkIGRvbid0IHRyeSB0byBsb2FkXG4gICAgaWYgKHNvdXJjZSlcbiAgICB7XG4gICAgICAgIHRoaXMubG9hZFNvdXJjZShzb3VyY2UpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEZpcmVkIHdoZW4gYSBub3QtaW1tZWRpYXRlbHktYXZhaWxhYmxlIHNvdXJjZSBmaW5pc2hlcyBsb2FkaW5nLlxuICAgICAqXG4gICAgICogQGV2ZW50IGxvYWRlZFxuICAgICAqIEBtZW1iZXJvZiBQSVhJLkJhc2VUZXh0dXJlI1xuICAgICAqIEBwcm90ZWN0ZWRcbiAgICAgKi9cblxuICAgIC8qKlxuICAgICAqIEZpcmVkIHdoZW4gYSBub3QtaW1tZWRpYXRlbHktYXZhaWxhYmxlIHNvdXJjZSBmYWlscyB0byBsb2FkLlxuICAgICAqXG4gICAgICogQGV2ZW50IGVycm9yXG4gICAgICogQG1lbWJlcm9mIFBJWEkuQmFzZVRleHR1cmUjXG4gICAgICogQHByb3RlY3RlZFxuICAgICAqL1xufVxuXG5CYXNlVGV4dHVyZS5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKEV2ZW50RW1pdHRlci5wcm90b3R5cGUpO1xuQmFzZVRleHR1cmUucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gQmFzZVRleHR1cmU7XG5tb2R1bGUuZXhwb3J0cyA9IEJhc2VUZXh0dXJlO1xuXG4vKipcbiAqIFVwZGF0ZXMgdGhlIHRleHR1cmUgb24gYWxsIHRoZSB3ZWJnbCByZW5kZXJlcnMsIHRoaXMgYWxzbyBhc3N1bWVzIHRoZSBzcmMgaGFzIGNoYW5nZWQuXG4gKlxuICogQGZpcmVzIHVwZGF0ZVxuICovXG5CYXNlVGV4dHVyZS5wcm90b3R5cGUudXBkYXRlID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLnJlYWxXaWR0aCA9IHRoaXMuc291cmNlLm5hdHVyYWxXaWR0aCB8fCB0aGlzLnNvdXJjZS53aWR0aDtcbiAgICB0aGlzLnJlYWxIZWlnaHQgPSB0aGlzLnNvdXJjZS5uYXR1cmFsSGVpZ2h0IHx8IHRoaXMuc291cmNlLmhlaWdodDtcblxuICAgIHRoaXMud2lkdGggPSB0aGlzLnJlYWxXaWR0aCAvIHRoaXMucmVzb2x1dGlvbjtcbiAgICB0aGlzLmhlaWdodCA9IHRoaXMucmVhbEhlaWdodCAvIHRoaXMucmVzb2x1dGlvbjtcblxuICAgIHRoaXMuaXNQb3dlck9mVHdvID0gdXRpbHMuaXNQb3dlck9mVHdvKHRoaXMucmVhbFdpZHRoLCB0aGlzLnJlYWxIZWlnaHQpO1xuXG4gICAgdGhpcy5lbWl0KCd1cGRhdGUnLCB0aGlzKTtcbn07XG5cbi8qKlxuICogTG9hZCBhIHNvdXJjZS5cbiAqXG4gKiBJZiB0aGUgc291cmNlIGlzIG5vdC1pbW1lZGlhdGVseS1hdmFpbGFibGUsIHN1Y2ggYXMgYW4gaW1hZ2UgdGhhdCBuZWVkcyB0byBiZVxuICogZG93bmxvYWRlZCwgdGhlbiB0aGUgJ2xvYWRlZCcgb3IgJ2Vycm9yJyBldmVudCB3aWxsIGJlIGRpc3BhdGNoZWQgaW4gdGhlIGZ1dHVyZVxuICogYW5kIGBoYXNMb2FkZWRgIHdpbGwgcmVtYWluIGZhbHNlIGFmdGVyIHRoaXMgY2FsbC5cbiAqXG4gKiBUaGUgbG9naWMgc3RhdGUgYWZ0ZXIgY2FsbGluZyBgbG9hZFNvdXJjZWAgZGlyZWN0bHkgb3IgaW5kaXJlY3RseSAoZWcuIGBmcm9tSW1hZ2VgLCBgbmV3IEJhc2VUZXh0dXJlYCkgaXM6XG4gKlxuICogICAgIGlmICh0ZXh0dXJlLmhhc0xvYWRlZClcbiB7XG4gKiAgICAgICAgLy8gdGV4dHVyZSByZWFkeSBmb3IgdXNlXG4gKiAgICAgfSBlbHNlIGlmICh0ZXh0dXJlLmlzTG9hZGluZylcbiB7XG4gKiAgICAgICAgLy8gbGlzdGVuIHRvICdsb2FkZWQnIGFuZC9vciAnZXJyb3InIGV2ZW50cyBvbiB0ZXh0dXJlXG4gKiAgICAgfSBlbHNlIHtcbiAqICAgICAgICAvLyBub3QgbG9hZGluZywgbm90IGdvaW5nIHRvIGxvYWQgVU5MRVNTIHRoZSBzb3VyY2UgaXMgcmVsb2FkZWRcbiAqICAgICAgICAvLyAoaXQgbWF5IHN0aWxsIG1ha2Ugc2Vuc2UgdG8gbGlzdGVuIHRvIHRoZSBldmVudHMpXG4gKiAgICAgfVxuICpcbiAqIEBwcm90ZWN0ZWRcbiAqIEBwYXJhbSBzb3VyY2Uge0ltYWdlfENhbnZhc30gdGhlIHNvdXJjZSBvYmplY3Qgb2YgdGhlIHRleHR1cmUuXG4gKi9cbkJhc2VUZXh0dXJlLnByb3RvdHlwZS5sb2FkU291cmNlID0gZnVuY3Rpb24gKHNvdXJjZSlcbntcbiAgICB2YXIgd2FzTG9hZGluZyA9IHRoaXMuaXNMb2FkaW5nO1xuICAgIHRoaXMuaGFzTG9hZGVkID0gZmFsc2U7XG4gICAgdGhpcy5pc0xvYWRpbmcgPSBmYWxzZTtcblxuICAgIGlmICh3YXNMb2FkaW5nICYmIHRoaXMuc291cmNlKVxuICAgIHtcbiAgICAgICAgdGhpcy5zb3VyY2Uub25sb2FkID0gbnVsbDtcbiAgICAgICAgdGhpcy5zb3VyY2Uub25lcnJvciA9IG51bGw7XG4gICAgfVxuXG4gICAgdGhpcy5zb3VyY2UgPSBzb3VyY2U7XG5cbiAgICAvLyBBcHBseSBzb3VyY2UgaWYgbG9hZGVkLiBPdGhlcndpc2Ugc2V0dXAgYXBwcm9wcmlhdGUgbG9hZGluZyBtb25pdG9ycy5cbiAgICBpZiAoKHRoaXMuc291cmNlLmNvbXBsZXRlIHx8IHRoaXMuc291cmNlLmdldENvbnRleHQpICYmIHRoaXMuc291cmNlLndpZHRoICYmIHRoaXMuc291cmNlLmhlaWdodClcbiAgICB7XG4gICAgICAgIHRoaXMuX3NvdXJjZUxvYWRlZCgpO1xuICAgIH1cbiAgICBlbHNlIGlmICghc291cmNlLmdldENvbnRleHQpXG4gICAge1xuXG4gICAgICAgIC8vIEltYWdlIGZhaWwgLyBub3QgcmVhZHlcbiAgICAgICAgdGhpcy5pc0xvYWRpbmcgPSB0cnVlO1xuXG4gICAgICAgIHZhciBzY29wZSA9IHRoaXM7XG5cbiAgICAgICAgc291cmNlLm9ubG9hZCA9IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHNvdXJjZS5vbmxvYWQgPSBudWxsO1xuICAgICAgICAgICAgc291cmNlLm9uZXJyb3IgPSBudWxsO1xuXG4gICAgICAgICAgICBpZiAoIXNjb3BlLmlzTG9hZGluZylcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHNjb3BlLmlzTG9hZGluZyA9IGZhbHNlO1xuICAgICAgICAgICAgc2NvcGUuX3NvdXJjZUxvYWRlZCgpO1xuXG4gICAgICAgICAgICBzY29wZS5lbWl0KCdsb2FkZWQnLCBzY29wZSk7XG4gICAgICAgIH07XG5cbiAgICAgICAgc291cmNlLm9uZXJyb3IgPSBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICBzb3VyY2Uub25sb2FkID0gbnVsbDtcbiAgICAgICAgICAgIHNvdXJjZS5vbmVycm9yID0gbnVsbDtcblxuICAgICAgICAgICAgaWYgKCFzY29wZS5pc0xvYWRpbmcpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBzY29wZS5pc0xvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgICAgIHNjb3BlLmVtaXQoJ2Vycm9yJywgc2NvcGUpO1xuICAgICAgICB9O1xuXG4gICAgICAgIC8vIFBlciBodHRwOi8vd3d3LnczLm9yZy9UUi9odG1sNS9lbWJlZGRlZC1jb250ZW50LTAuaHRtbCN0aGUtaW1nLWVsZW1lbnRcbiAgICAgICAgLy8gICBcIlRoZSB2YWx1ZSBvZiBgY29tcGxldGVgIGNhbiB0aHVzIGNoYW5nZSB3aGlsZSBhIHNjcmlwdCBpcyBleGVjdXRpbmcuXCJcbiAgICAgICAgLy8gU28gY29tcGxldGUgbmVlZHMgdG8gYmUgcmUtY2hlY2tlZCBhZnRlciB0aGUgY2FsbGJhY2tzIGhhdmUgYmVlbiBhZGRlZC4uXG4gICAgICAgIC8vIE5PVEU6IGNvbXBsZXRlIHdpbGwgYmUgdHJ1ZSBpZiB0aGUgaW1hZ2UgaGFzIG5vIHNyYyBzbyBiZXN0IHRvIGNoZWNrIGlmIHRoZSBzcmMgaXMgc2V0LlxuICAgICAgICBpZiAoc291cmNlLmNvbXBsZXRlICYmIHNvdXJjZS5zcmMpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuaXNMb2FkaW5nID0gZmFsc2U7XG5cbiAgICAgICAgICAgIC8vIC4uYW5kIGlmIHdlJ3JlIGNvbXBsZXRlIG5vdywgbm8gbmVlZCBmb3IgY2FsbGJhY2tzXG4gICAgICAgICAgICBzb3VyY2Uub25sb2FkID0gbnVsbDtcbiAgICAgICAgICAgIHNvdXJjZS5vbmVycm9yID0gbnVsbDtcblxuICAgICAgICAgICAgaWYgKHNvdXJjZS53aWR0aCAmJiBzb3VyY2UuaGVpZ2h0KVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHRoaXMuX3NvdXJjZUxvYWRlZCgpO1xuXG4gICAgICAgICAgICAgICAgLy8gSWYgYW55IHByZXZpb3VzIHN1YnNjcmliZXJzIHBvc3NpYmxlXG4gICAgICAgICAgICAgICAgaWYgKHdhc0xvYWRpbmcpXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmVtaXQoJ2xvYWRlZCcsIHRoaXMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAvLyBJZiBhbnkgcHJldmlvdXMgc3Vic2NyaWJlcnMgcG9zc2libGVcbiAgICAgICAgICAgICAgICBpZiAod2FzTG9hZGluZylcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZW1pdCgnZXJyb3InLCB0aGlzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG59O1xuXG4vKipcbiAqIFVzZWQgaW50ZXJuYWxseSB0byB1cGRhdGUgdGhlIHdpZHRoLCBoZWlnaHQsIGFuZCBzb21lIG90aGVyIHRyYWNraW5nIHZhcnMgb25jZVxuICogYSBzb3VyY2UgaGFzIHN1Y2Nlc3NmdWxseSBsb2FkZWQuXG4gKlxuICogQHByaXZhdGVcbiAqL1xuQmFzZVRleHR1cmUucHJvdG90eXBlLl9zb3VyY2VMb2FkZWQgPSBmdW5jdGlvbiAoKVxue1xuICAgIHRoaXMuaGFzTG9hZGVkID0gdHJ1ZTtcbiAgICB0aGlzLnVwZGF0ZSgpO1xufTtcblxuLyoqXG4gKiBEZXN0cm95cyB0aGlzIGJhc2UgdGV4dHVyZVxuICpcbiAqL1xuQmFzZVRleHR1cmUucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoKVxue1xuICAgIGlmICh0aGlzLmltYWdlVXJsKVxuICAgIHtcbiAgICAgICAgZGVsZXRlIHV0aWxzLkJhc2VUZXh0dXJlQ2FjaGVbdGhpcy5pbWFnZVVybF07XG4gICAgICAgIGRlbGV0ZSB1dGlscy5UZXh0dXJlQ2FjaGVbdGhpcy5pbWFnZVVybF07XG5cbiAgICAgICAgdGhpcy5pbWFnZVVybCA9IG51bGw7XG5cbiAgICAgICAgaWYgKCFuYXZpZ2F0b3IuaXNDb2Nvb25KUylcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5zb3VyY2Uuc3JjID0gJyc7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZWxzZSBpZiAodGhpcy5zb3VyY2UgJiYgdGhpcy5zb3VyY2UuX3BpeGlJZClcbiAgICB7XG4gICAgICAgIGRlbGV0ZSB1dGlscy5CYXNlVGV4dHVyZUNhY2hlW3RoaXMuc291cmNlLl9waXhpSWRdO1xuICAgIH1cblxuICAgIHRoaXMuc291cmNlID0gbnVsbDtcblxuICAgIHRoaXMuZGlzcG9zZSgpO1xufTtcblxuLyoqXG4gKiBGcmVlcyB0aGUgdGV4dHVyZSBmcm9tIFdlYkdMIG1lbW9yeSB3aXRob3V0IGRlc3Ryb3lpbmcgdGhpcyB0ZXh0dXJlIG9iamVjdC5cbiAqIFRoaXMgbWVhbnMgeW91IGNhbiBzdGlsbCB1c2UgdGhlIHRleHR1cmUgbGF0ZXIgd2hpY2ggd2lsbCB1cGxvYWQgaXQgdG8gR1BVXG4gKiBtZW1vcnkgYWdhaW4uXG4gKlxuICovXG5CYXNlVGV4dHVyZS5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy5lbWl0KCdkaXNwb3NlJywgdGhpcyk7XG5cbiAgICAvLyB0aGlzIHNob3VsZCBubyBsb25nZXIgYmUgbmVlZGVkLCB0aGUgcmVuZGVyZXJzIHNob3VsZCBjbGVhbnVwIGFsbCB0aGUgZ2wgdGV4dHVyZXMuXG4gICAgLy8gdGhpcy5fZ2xUZXh0dXJlcyA9IHt9O1xufTtcblxuLyoqXG4gKiBDaGFuZ2VzIHRoZSBzb3VyY2UgaW1hZ2Ugb2YgdGhlIHRleHR1cmUuXG4gKiBUaGUgb3JpZ2luYWwgc291cmNlIG11c3QgYmUgYW4gSW1hZ2UgZWxlbWVudC5cbiAqXG4gKiBAcGFyYW0gbmV3U3JjIHtzdHJpbmd9IHRoZSBwYXRoIG9mIHRoZSBpbWFnZVxuICovXG5CYXNlVGV4dHVyZS5wcm90b3R5cGUudXBkYXRlU291cmNlSW1hZ2UgPSBmdW5jdGlvbiAobmV3U3JjKVxue1xuICAgIHRoaXMuc291cmNlLnNyYyA9IG5ld1NyYztcblxuICAgIHRoaXMubG9hZFNvdXJjZSh0aGlzLnNvdXJjZSk7XG59O1xuXG4vKipcbiAqIEhlbHBlciBmdW5jdGlvbiB0aGF0IGNyZWF0ZXMgYSBiYXNlIHRleHR1cmUgZnJvbSB0aGUgZ2l2ZW4gaW1hZ2UgdXJsLlxuICogSWYgdGhlIGltYWdlIGlzIG5vdCBpbiB0aGUgYmFzZSB0ZXh0dXJlIGNhY2hlIGl0IHdpbGwgYmUgY3JlYXRlZCBhbmQgbG9hZGVkLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBwYXJhbSBpbWFnZVVybCB7c3RyaW5nfSBUaGUgaW1hZ2UgdXJsIG9mIHRoZSB0ZXh0dXJlXG4gKiBAcGFyYW0gW2Nyb3Nzb3JpZ2luPShhdXRvKV0ge2Jvb2xlYW59IFNob3VsZCB1c2UgYW5vbnltb3VzIENPUlM/IERlZmF1bHRzIHRvIHRydWUgaWYgdGhlIFVSTCBpcyBub3QgYSBkYXRhLVVSSS5cbiAqIEBwYXJhbSBbc2NhbGVNb2RlPVBJWEkuU0NBTEVfTU9ERVMuREVGQVVMVF0ge251bWJlcn0gU2VlIHtAbGluayBQSVhJLlNDQUxFX01PREVTfSBmb3IgcG9zc2libGUgdmFsdWVzXG4gKiBAcmV0dXJuIFBJWEkuQmFzZVRleHR1cmVcbiAqL1xuQmFzZVRleHR1cmUuZnJvbUltYWdlID0gZnVuY3Rpb24gKGltYWdlVXJsLCBjcm9zc29yaWdpbiwgc2NhbGVNb2RlKVxue1xuICAgIHZhciBiYXNlVGV4dHVyZSA9IHV0aWxzLkJhc2VUZXh0dXJlQ2FjaGVbaW1hZ2VVcmxdO1xuXG4gICAgaWYgKGNyb3Nzb3JpZ2luID09PSB1bmRlZmluZWQgJiYgaW1hZ2VVcmwuaW5kZXhPZignZGF0YTonKSAhPT0gMClcbiAgICB7XG4gICAgICAgIGNyb3Nzb3JpZ2luID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBpZiAoIWJhc2VUZXh0dXJlKVxuICAgIHtcbiAgICAgICAgLy8gbmV3IEltYWdlKCkgYnJlYWtzIHRleCBsb2FkaW5nIGluIHNvbWUgdmVyc2lvbnMgb2YgQ2hyb21lLlxuICAgICAgICAvLyBTZWUgaHR0cHM6Ly9jb2RlLmdvb2dsZS5jb20vcC9jaHJvbWl1bS9pc3N1ZXMvZGV0YWlsP2lkPTIzODA3MVxuICAgICAgICB2YXIgaW1hZ2UgPSBuZXcgSW1hZ2UoKTsvL2RvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2ltZycpO1xuICAgICAgICBpZiAoY3Jvc3NvcmlnaW4pXG4gICAgICAgIHtcbiAgICAgICAgICAgIGltYWdlLmNyb3NzT3JpZ2luID0gJyc7XG4gICAgICAgIH1cblxuICAgICAgICBiYXNlVGV4dHVyZSA9IG5ldyBCYXNlVGV4dHVyZShpbWFnZSwgc2NhbGVNb2RlKTtcbiAgICAgICAgYmFzZVRleHR1cmUuaW1hZ2VVcmwgPSBpbWFnZVVybDtcblxuICAgICAgICBpbWFnZS5zcmMgPSBpbWFnZVVybDtcblxuICAgICAgICB1dGlscy5CYXNlVGV4dHVyZUNhY2hlW2ltYWdlVXJsXSA9IGJhc2VUZXh0dXJlO1xuXG4gICAgICAgIC8vIGlmIHRoZXJlIGlzIGFuIEAyeCBhdCB0aGUgZW5kIG9mIHRoZSB1cmwgd2UgYXJlIGdvaW5nIHRvIGFzc3VtZSBpdHMgYSBoaWdocmVzIGltYWdlXG4gICAgICAgIGJhc2VUZXh0dXJlLnJlc29sdXRpb24gPSB1dGlscy5nZXRSZXNvbHV0aW9uT2ZVcmwoaW1hZ2VVcmwpO1xuICAgIH1cblxuICAgIHJldHVybiBiYXNlVGV4dHVyZTtcbn07XG5cbi8qKlxuICogSGVscGVyIGZ1bmN0aW9uIHRoYXQgY3JlYXRlcyBhIGJhc2UgdGV4dHVyZSBmcm9tIHRoZSBnaXZlbiBjYW52YXMgZWxlbWVudC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAcGFyYW0gY2FudmFzIHtDYW52YXN9IFRoZSBjYW52YXMgZWxlbWVudCBzb3VyY2Ugb2YgdGhlIHRleHR1cmVcbiAqIEBwYXJhbSBzY2FsZU1vZGUge251bWJlcn0gU2VlIHtAbGluayBQSVhJLlNDQUxFX01PREVTfSBmb3IgcG9zc2libGUgdmFsdWVzXG4gKiBAcmV0dXJuIFBJWEkuQmFzZVRleHR1cmVcbiAqL1xuQmFzZVRleHR1cmUuZnJvbUNhbnZhcyA9IGZ1bmN0aW9uIChjYW52YXMsIHNjYWxlTW9kZSlcbntcbiAgICBpZiAoIWNhbnZhcy5fcGl4aUlkKVxuICAgIHtcbiAgICAgICAgY2FudmFzLl9waXhpSWQgPSAnY2FudmFzXycgKyB1dGlscy51aWQoKTtcbiAgICB9XG5cbiAgICB2YXIgYmFzZVRleHR1cmUgPSB1dGlscy5CYXNlVGV4dHVyZUNhY2hlW2NhbnZhcy5fcGl4aUlkXTtcblxuICAgIGlmICghYmFzZVRleHR1cmUpXG4gICAge1xuICAgICAgICBiYXNlVGV4dHVyZSA9IG5ldyBCYXNlVGV4dHVyZShjYW52YXMsIHNjYWxlTW9kZSk7XG4gICAgICAgIHV0aWxzLkJhc2VUZXh0dXJlQ2FjaGVbY2FudmFzLl9waXhpSWRdID0gYmFzZVRleHR1cmU7XG4gICAgfVxuXG4gICAgcmV0dXJuIGJhc2VUZXh0dXJlO1xufTtcbiIsInZhciBCYXNlVGV4dHVyZSA9IHJlcXVpcmUoJy4vQmFzZVRleHR1cmUnKSxcbiAgICBUZXh0dXJlID0gcmVxdWlyZSgnLi9UZXh0dXJlJyksXG4gICAgUmVuZGVyVGFyZ2V0ID0gcmVxdWlyZSgnLi4vcmVuZGVyZXJzL3dlYmdsL3V0aWxzL1JlbmRlclRhcmdldCcpLFxuICAgIEZpbHRlck1hbmFnZXIgPSByZXF1aXJlKCcuLi9yZW5kZXJlcnMvd2ViZ2wvbWFuYWdlcnMvRmlsdGVyTWFuYWdlcicpLFxuICAgIENhbnZhc0J1ZmZlciA9IHJlcXVpcmUoJy4uL3JlbmRlcmVycy9jYW52YXMvdXRpbHMvQ2FudmFzQnVmZmVyJyksXG4gICAgbWF0aCA9IHJlcXVpcmUoJy4uL21hdGgnKSxcbiAgICBDT05TVCA9IHJlcXVpcmUoJy4uL2NvbnN0JyksXG4gICAgdGVtcE1hdHJpeCA9IG5ldyBtYXRoLk1hdHJpeCgpO1xuXG4vKipcbiAqIEEgUmVuZGVyVGV4dHVyZSBpcyBhIHNwZWNpYWwgdGV4dHVyZSB0aGF0IGFsbG93cyBhbnkgUGl4aSBkaXNwbGF5IG9iamVjdCB0byBiZSByZW5kZXJlZCB0byBpdC5cbiAqXG4gKiBfX0hpbnRfXzogQWxsIERpc3BsYXlPYmplY3RzIChpLmUuIFNwcml0ZXMpIHRoYXQgcmVuZGVyIHRvIGEgUmVuZGVyVGV4dHVyZSBzaG91bGQgYmUgcHJlbG9hZGVkXG4gKiBvdGhlcndpc2UgYmxhY2sgcmVjdGFuZ2xlcyB3aWxsIGJlIGRyYXduIGluc3RlYWQuXG4gKlxuICogQSBSZW5kZXJUZXh0dXJlIHRha2VzIGEgc25hcHNob3Qgb2YgYW55IERpc3BsYXkgT2JqZWN0IGdpdmVuIHRvIGl0cyByZW5kZXIgbWV0aG9kLiBUaGUgcG9zaXRpb25cbiAqIGFuZCByb3RhdGlvbiBvZiB0aGUgZ2l2ZW4gRGlzcGxheSBPYmplY3RzIGlzIGlnbm9yZWQuIEZvciBleGFtcGxlOlxuICpcbiAqIGBgYGpzXG4gKiB2YXIgcmVuZGVyZXIgPSBQSVhJLmF1dG9EZXRlY3RSZW5kZXJlcigxMDI0LCAxMDI0LCB7IHZpZXc6IGNhbnZhcywgcmF0aW86IDEgfSk7XG4gKiB2YXIgcmVuZGVyVGV4dHVyZSA9IG5ldyBQSVhJLlJlbmRlclRleHR1cmUocmVuZGVyZXIsIDgwMCwgNjAwKTtcbiAqIHZhciBzcHJpdGUgPSBQSVhJLlNwcml0ZS5mcm9tSW1hZ2UoXCJzcGluT2JqXzAxLnBuZ1wiKTtcbiAqXG4gKiBzcHJpdGUucG9zaXRpb24ueCA9IDgwMC8yO1xuICogc3ByaXRlLnBvc2l0aW9uLnkgPSA2MDAvMjtcbiAqIHNwcml0ZS5hbmNob3IueCA9IDAuNTtcbiAqIHNwcml0ZS5hbmNob3IueSA9IDAuNTtcbiAqXG4gKiByZW5kZXJUZXh0dXJlLnJlbmRlcihzcHJpdGUpO1xuICogYGBgXG4gKlxuICogVGhlIFNwcml0ZSBpbiB0aGlzIGNhc2Ugd2lsbCBiZSByZW5kZXJlZCB0byBhIHBvc2l0aW9uIG9mIDAsMC4gVG8gcmVuZGVyIHRoaXMgc3ByaXRlIGF0IGl0cyBhY3R1YWxcbiAqIHBvc2l0aW9uIGEgQ29udGFpbmVyIHNob3VsZCBiZSB1c2VkOlxuICpcbiAqIGBgYGpzXG4gKiB2YXIgZG9jID0gbmV3IFBJWEkuQ29udGFpbmVyKCk7XG4gKlxuICogZG9jLmFkZENoaWxkKHNwcml0ZSk7XG4gKlxuICogcmVuZGVyVGV4dHVyZS5yZW5kZXIoZG9jKTsgIC8vIFJlbmRlcnMgdG8gY2VudGVyIG9mIHJlbmRlclRleHR1cmVcbiAqIGBgYFxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5UZXh0dXJlXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLkNhbnZhc1JlbmRlcmVyfFBJWEkuV2ViR0xSZW5kZXJlcn0gVGhlIHJlbmRlcmVyIHVzZWQgZm9yIHRoaXMgUmVuZGVyVGV4dHVyZVxuICogQHBhcmFtIFt3aWR0aD0xMDBdIHtudW1iZXJ9IFRoZSB3aWR0aCBvZiB0aGUgcmVuZGVyIHRleHR1cmVcbiAqIEBwYXJhbSBbaGVpZ2h0PTEwMF0ge251bWJlcn0gVGhlIGhlaWdodCBvZiB0aGUgcmVuZGVyIHRleHR1cmVcbiAqIEBwYXJhbSBbc2NhbGVNb2RlXSB7bnVtYmVyfSBTZWUge0BsaW5rIFBJWEkuU0NBTEVfTU9ERVN9IGZvciBwb3NzaWJsZSB2YWx1ZXNcbiAqIEBwYXJhbSBbcmVzb2x1dGlvbj0xXSB7bnVtYmVyfSBUaGUgcmVzb2x1dGlvbiBvZiB0aGUgdGV4dHVyZSBiZWluZyBnZW5lcmF0ZWRcbiAqL1xuZnVuY3Rpb24gUmVuZGVyVGV4dHVyZShyZW5kZXJlciwgd2lkdGgsIGhlaWdodCwgc2NhbGVNb2RlLCByZXNvbHV0aW9uKVxue1xuICAgIGlmICghcmVuZGVyZXIpXG4gICAge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1VuYWJsZSB0byBjcmVhdGUgUmVuZGVyVGV4dHVyZSwgeW91IG11c3QgcGFzcyBhIHJlbmRlcmVyIGludG8gdGhlIGNvbnN0cnVjdG9yLicpO1xuICAgIH1cblxuICAgIHdpZHRoID0gd2lkdGggfHwgMTAwO1xuICAgIGhlaWdodCA9IGhlaWdodCB8fCAxMDA7XG4gICAgcmVzb2x1dGlvbiA9IHJlc29sdXRpb24gfHwgQ09OU1QuUkVTT0xVVElPTjtcblxuICAgIC8qKlxuICAgICAqIFRoZSBiYXNlIHRleHR1cmUgb2JqZWN0IHRoYXQgdGhpcyB0ZXh0dXJlIHVzZXNcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge0Jhc2VUZXh0dXJlfVxuICAgICAqL1xuICAgIHZhciBiYXNlVGV4dHVyZSA9IG5ldyBCYXNlVGV4dHVyZSgpO1xuICAgIGJhc2VUZXh0dXJlLndpZHRoID0gd2lkdGg7XG4gICAgYmFzZVRleHR1cmUuaGVpZ2h0ID0gaGVpZ2h0O1xuICAgIGJhc2VUZXh0dXJlLnJlc29sdXRpb24gPSByZXNvbHV0aW9uO1xuICAgIGJhc2VUZXh0dXJlLnNjYWxlTW9kZSA9IHNjYWxlTW9kZSB8fCBDT05TVC5TQ0FMRV9NT0RFUy5ERUZBVUxUO1xuICAgIGJhc2VUZXh0dXJlLmhhc0xvYWRlZCA9IHRydWU7XG5cblxuICAgIFRleHR1cmUuY2FsbCh0aGlzLFxuICAgICAgICBiYXNlVGV4dHVyZSxcbiAgICAgICAgbmV3IG1hdGguUmVjdGFuZ2xlKDAsIDAsIHdpZHRoLCBoZWlnaHQpXG4gICAgKTtcblxuXG4gICAgLyoqXG4gICAgICogVGhlIHdpdGggb2YgdGhlIHJlbmRlciB0ZXh0dXJlXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy53aWR0aCA9IHdpZHRoO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGhlaWdodCBvZiB0aGUgcmVuZGVyIHRleHR1cmVcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLmhlaWdodCA9IGhlaWdodDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBSZXNvbHV0aW9uIG9mIHRoZSB0ZXh0dXJlLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMucmVzb2x1dGlvbiA9IHJlc29sdXRpb247XG5cbiAgICAvKipcbiAgICAgKiBEcmF3L3JlbmRlciB0aGUgZ2l2ZW4gRGlzcGxheU9iamVjdCBvbnRvIHRoZSB0ZXh0dXJlLlxuICAgICAqXG4gICAgICogVGhlIGRpc3BsYXlPYmplY3QgYW5kIGRlc2NlbmRlbnRzIGFyZSB0cmFuc2Zvcm1lZCBkdXJpbmcgdGhpcyBvcGVyYXRpb24uXG4gICAgICogSWYgYHVwZGF0ZVRyYW5zZm9ybWAgaXMgdHJ1ZSB0aGVuIHRoZSB0cmFuc2Zvcm1hdGlvbnMgd2lsbCBiZSByZXN0b3JlZCBiZWZvcmUgdGhlXG4gICAgICogbWV0aG9kIHJldHVybnMuIE90aGVyd2lzZSBpdCBpcyB1cCB0byB0aGUgY2FsbGluZyBjb2RlIHRvIGNvcnJlY3RseSB1c2Ugb3IgcmVzZXRcbiAgICAgKiB0aGUgdHJhbnNmb3JtZWQgZGlzcGxheSBvYmplY3RzLlxuICAgICAqXG4gICAgICogVGhlIGRpc3BsYXkgb2JqZWN0IGlzIGFsd2F5cyByZW5kZXJlZCB3aXRoIGEgd29ybGRBbHBoYSB2YWx1ZSBvZiAxLlxuICAgICAqXG4gICAgICogQG1ldGhvZFxuICAgICAqIEBwYXJhbSBkaXNwbGF5T2JqZWN0IHtQSVhJLkRpc3BsYXlPYmplY3R9IFRoZSBkaXNwbGF5IG9iamVjdCB0byByZW5kZXIgdGhpcyB0ZXh0dXJlIG9uXG4gICAgICogQHBhcmFtIFttYXRyaXhdIHtQSVhJLk1hdHJpeH0gT3B0aW9uYWwgbWF0cml4IHRvIGFwcGx5IHRvIHRoZSBkaXNwbGF5IG9iamVjdCBiZWZvcmUgcmVuZGVyaW5nLlxuICAgICAqIEBwYXJhbSBbY2xlYXI9ZmFsc2VdIHtib29sZWFufSBJZiB0cnVlIHRoZSB0ZXh0dXJlIHdpbGwgYmUgY2xlYXJlZCBiZWZvcmUgdGhlIGRpc3BsYXlPYmplY3QgaXMgZHJhd25cbiAgICAgKiBAcGFyYW0gW3VwZGF0ZVRyYW5zZm9ybT10cnVlXSB7Ym9vbGVhbn0gSWYgdHJ1ZSB0aGUgZGlzcGxheU9iamVjdCdzIHdvcmxkVHJhbnNmb3JtL3dvcmxkQWxwaGEgYW5kIGFsbCBjaGlsZHJlblxuICAgICAqICB0cmFuc2Zvcm1hdGlvbnMgd2lsbCBiZSByZXN0b3JlZC4gTm90IHJlc3RvcmluZyB0aGlzIGluZm9ybWF0aW9uIHdpbGwgYmUgYSBsaXR0bGUgZmFzdGVyLlxuICAgICAqL1xuICAgIHRoaXMucmVuZGVyID0gbnVsbDtcblxuICAgIC8qKlxuICAgICAqIFRoZSByZW5kZXJlciB0aGlzIFJlbmRlclRleHR1cmUgdXNlcy4gQSBSZW5kZXJUZXh0dXJlIGNhbiBvbmx5IGJlbG9uZyB0byBvbmUgcmVuZGVyZXIgYXQgdGhlIG1vbWVudCBpZiBpdHMgd2ViR0wuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLkNhbnZhc1JlbmRlcmVyfFBJWEkuV2ViR0xSZW5kZXJlcn1cbiAgICAgKi9cbiAgICB0aGlzLnJlbmRlcmVyID0gcmVuZGVyZXI7XG5cbiAgICBpZiAodGhpcy5yZW5kZXJlci50eXBlID09PSBDT05TVC5SRU5ERVJFUl9UWVBFLldFQkdMKVxuICAgIHtcbiAgICAgICAgdmFyIGdsID0gdGhpcy5yZW5kZXJlci5nbDtcblxuICAgICAgICB0aGlzLnRleHR1cmVCdWZmZXIgPSBuZXcgUmVuZGVyVGFyZ2V0KGdsLCB0aGlzLndpZHRoLCB0aGlzLmhlaWdodCwgYmFzZVRleHR1cmUuc2NhbGVNb2RlLCB0aGlzLnJlc29sdXRpb24pOy8vLCB0aGlzLmJhc2VUZXh0dXJlLnNjYWxlTW9kZSk7XG4gICAgICAgIHRoaXMuYmFzZVRleHR1cmUuX2dsVGV4dHVyZXNbZ2wuaWRdID0gdGhpcy50ZXh0dXJlQnVmZmVyLnRleHR1cmU7XG5cbiAgICAgICAgLy9UT0RPIHJlZmFjdG9yIGZpbHRlciBtYW5hZ2VyLi4gYXMgcmVhbGx5IGl0cyBubyBsb25nZXIgYSBtYW5hZ2VyIGlmIHdlIHVzZSBpdCBoZXJlLi5cbiAgICAgICAgdGhpcy5maWx0ZXJNYW5hZ2VyID0gbmV3IEZpbHRlck1hbmFnZXIodGhpcy5yZW5kZXJlcik7XG4gICAgICAgIHRoaXMuZmlsdGVyTWFuYWdlci5vbkNvbnRleHRDaGFuZ2UoKTtcbiAgICAgICAgdGhpcy5maWx0ZXJNYW5hZ2VyLnJlc2l6ZSh3aWR0aCwgaGVpZ2h0KTtcbiAgICAgICAgdGhpcy5yZW5kZXIgPSB0aGlzLnJlbmRlcldlYkdMO1xuXG4gICAgICAgIC8vIHRoZSBjcmVhdGlvbiBvZiBhIGZpbHRlciBtYW5hZ2VyIHVuYmluZHMgdGhlIGJ1ZmZlcnMuLlxuICAgICAgICB0aGlzLnJlbmRlcmVyLmN1cnJlbnRSZW5kZXJlci5zdGFydCgpO1xuICAgICAgICB0aGlzLnJlbmRlcmVyLmN1cnJlbnRSZW5kZXJUYXJnZXQuYWN0aXZhdGUoKTtcbiAgICB9XG4gICAgZWxzZVxuICAgIHtcblxuICAgICAgICB0aGlzLnJlbmRlciA9IHRoaXMucmVuZGVyQ2FudmFzO1xuICAgICAgICB0aGlzLnRleHR1cmVCdWZmZXIgPSBuZXcgQ2FudmFzQnVmZmVyKHRoaXMud2lkdGgqIHRoaXMucmVzb2x1dGlvbiwgdGhpcy5oZWlnaHQqIHRoaXMucmVzb2x1dGlvbik7XG4gICAgICAgIHRoaXMuYmFzZVRleHR1cmUuc291cmNlID0gdGhpcy50ZXh0dXJlQnVmZmVyLmNhbnZhcztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqL1xuICAgIHRoaXMudmFsaWQgPSB0cnVlO1xuXG4gICAgdGhpcy5fdXBkYXRlVXZzKCk7XG59XG5cblJlbmRlclRleHR1cmUucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShUZXh0dXJlLnByb3RvdHlwZSk7XG5SZW5kZXJUZXh0dXJlLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFJlbmRlclRleHR1cmU7XG5tb2R1bGUuZXhwb3J0cyA9IFJlbmRlclRleHR1cmU7XG5cbi8qKlxuICogUmVzaXplcyB0aGUgUmVuZGVyVGV4dHVyZS5cbiAqXG4gKiBAcGFyYW0gd2lkdGgge251bWJlcn0gVGhlIHdpZHRoIHRvIHJlc2l6ZSB0by5cbiAqIEBwYXJhbSBoZWlnaHQge251bWJlcn0gVGhlIGhlaWdodCB0byByZXNpemUgdG8uXG4gKiBAcGFyYW0gdXBkYXRlQmFzZSB7Ym9vbGVhbn0gU2hvdWxkIHRoZSBiYXNlVGV4dHVyZS53aWR0aCBhbmQgaGVpZ2h0IHZhbHVlcyBiZSByZXNpemVkIGFzIHdlbGw/XG4gKi9cblJlbmRlclRleHR1cmUucHJvdG90eXBlLnJlc2l6ZSA9IGZ1bmN0aW9uICh3aWR0aCwgaGVpZ2h0LCB1cGRhdGVCYXNlKVxue1xuICAgIGlmICh3aWR0aCA9PT0gdGhpcy53aWR0aCAmJiBoZWlnaHQgPT09IHRoaXMuaGVpZ2h0KVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMudmFsaWQgPSAod2lkdGggPiAwICYmIGhlaWdodCA+IDApO1xuXG4gICAgdGhpcy53aWR0aCA9IHRoaXMuX2ZyYW1lLndpZHRoID0gdGhpcy5jcm9wLndpZHRoID0gd2lkdGg7XG4gICAgdGhpcy5oZWlnaHQgPSAgdGhpcy5fZnJhbWUuaGVpZ2h0ID0gdGhpcy5jcm9wLmhlaWdodCA9IGhlaWdodDtcblxuICAgIGlmICh1cGRhdGVCYXNlKVxuICAgIHtcbiAgICAgICAgdGhpcy5iYXNlVGV4dHVyZS53aWR0aCA9IHRoaXMud2lkdGg7XG4gICAgICAgIHRoaXMuYmFzZVRleHR1cmUuaGVpZ2h0ID0gdGhpcy5oZWlnaHQ7XG4gICAgfVxuXG4gICAgaWYgKCF0aGlzLnZhbGlkKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMudGV4dHVyZUJ1ZmZlci5yZXNpemUodGhpcy53aWR0aCwgdGhpcy5oZWlnaHQpO1xuXG4gICAgaWYodGhpcy5maWx0ZXJNYW5hZ2VyKVxuICAgIHtcbiAgICAgICAgdGhpcy5maWx0ZXJNYW5hZ2VyLnJlc2l6ZSh0aGlzLndpZHRoLCB0aGlzLmhlaWdodCk7XG4gICAgfVxufTtcblxuLyoqXG4gKiBDbGVhcnMgdGhlIFJlbmRlclRleHR1cmUuXG4gKlxuICovXG5SZW5kZXJUZXh0dXJlLnByb3RvdHlwZS5jbGVhciA9IGZ1bmN0aW9uICgpXG57XG4gICAgaWYgKCF0aGlzLnZhbGlkKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnJlbmRlcmVyLnR5cGUgPT09IENPTlNULlJFTkRFUkVSX1RZUEUuV0VCR0wpXG4gICAge1xuICAgICAgICB0aGlzLnJlbmRlcmVyLmdsLmJpbmRGcmFtZWJ1ZmZlcih0aGlzLnJlbmRlcmVyLmdsLkZSQU1FQlVGRkVSLCB0aGlzLnRleHR1cmVCdWZmZXIuZnJhbWVCdWZmZXIpO1xuICAgIH1cblxuICAgIHRoaXMudGV4dHVyZUJ1ZmZlci5jbGVhcigpO1xufTtcblxuLyoqXG4gKiBJbnRlcm5hbCBtZXRob2QgYXNzaWduZWQgdG8gdGhlIGByZW5kZXJgIHByb3BlcnR5IGlmIHVzaW5nIGEgQ2FudmFzUmVuZGVyZXIuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSBkaXNwbGF5T2JqZWN0IHtQSVhJLkRpc3BsYXlPYmplY3R9IFRoZSBkaXNwbGF5IG9iamVjdCB0byByZW5kZXIgdGhpcyB0ZXh0dXJlIG9uXG4gKiBAcGFyYW0gW21hdHJpeF0ge1BJWEkuTWF0cml4fSBPcHRpb25hbCBtYXRyaXggdG8gYXBwbHkgdG8gdGhlIGRpc3BsYXkgb2JqZWN0IGJlZm9yZSByZW5kZXJpbmcuXG4gKiBAcGFyYW0gW2NsZWFyPWZhbHNlXSB7Ym9vbGVhbn0gSWYgdHJ1ZSB0aGUgdGV4dHVyZSB3aWxsIGJlIGNsZWFyZWQgYmVmb3JlIHRoZSBkaXNwbGF5T2JqZWN0IGlzIGRyYXduXG4gKiBAcGFyYW0gW3VwZGF0ZVRyYW5zZm9ybT10cnVlXSB7Ym9vbGVhbn0gSWYgdHJ1ZSB0aGUgZGlzcGxheU9iamVjdCdzIHdvcmxkVHJhbnNmb3JtL3dvcmxkQWxwaGEgYW5kIGFsbCBjaGlsZHJlblxuICogIHRyYW5zZm9ybWF0aW9ucyB3aWxsIGJlIHJlc3RvcmVkLiBOb3QgcmVzdG9yaW5nIHRoaXMgaW5mb3JtYXRpb24gd2lsbCBiZSBhIGxpdHRsZSBmYXN0ZXIuXG4gKi9cblJlbmRlclRleHR1cmUucHJvdG90eXBlLnJlbmRlcldlYkdMID0gZnVuY3Rpb24gKGRpc3BsYXlPYmplY3QsIG1hdHJpeCwgY2xlYXIsIHVwZGF0ZVRyYW5zZm9ybSlcbntcbiAgICBpZiAoIXRoaXMudmFsaWQpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG5cbiAgICB1cGRhdGVUcmFuc2Zvcm0gPSAodXBkYXRlVHJhbnNmb3JtICE9PSB1bmRlZmluZWQpID8gdXBkYXRlVHJhbnNmb3JtIDogdHJ1ZTsvLyF1cGRhdGVUcmFuc2Zvcm07XG5cbiAgICB0aGlzLnRleHR1cmVCdWZmZXIudHJhbnNmb3JtID0gbWF0cml4O1xuXG4gICAgLy9UT0RPIG5vdCBhIGZhbiB0aGF0IHRoaXMgaXMgaGVyZS4uLiBpdCB3aWxsIG1vdmUhXG4gICAgdGhpcy50ZXh0dXJlQnVmZmVyLmFjdGl2YXRlKCk7XG5cbiAgICAvLyBzZXRXb3JsZCBBbHBoYSB0byBlbnN1cmUgdGhhdCB0aGUgb2JqZWN0IGlzIHJlbmRlcmVyIGF0IGZ1bGwgb3BhY2l0eVxuICAgIGRpc3BsYXlPYmplY3Qud29ybGRBbHBoYSA9IDE7XG5cbiAgICBpZiAodXBkYXRlVHJhbnNmb3JtKVxuICAgIHtcblxuICAgICAgICAvLyByZXNldCB0aGUgbWF0cml4IG9mIHRoZSBkaXNwbGF0eU9iamVjdC4uXG4gICAgICAgIGRpc3BsYXlPYmplY3Qud29ybGRUcmFuc2Zvcm0uaWRlbnRpdHkoKTtcblxuICAgICAgICBkaXNwbGF5T2JqZWN0LmN1cnJlbnRCb3VuZHMgPSBudWxsO1xuXG4gICAgICAgIC8vIFRpbWUgdG8gdXBkYXRlIGFsbCB0aGUgY2hpbGRyZW4gb2YgdGhlIGRpc3BsYXlPYmplY3Qgd2l0aCB0aGUgbmV3IG1hdHJpeC4uXG4gICAgICAgIHZhciBjaGlsZHJlbiA9IGRpc3BsYXlPYmplY3QuY2hpbGRyZW47XG4gICAgICAgIHZhciBpLCBqO1xuXG4gICAgICAgIGZvciAoaSA9IDAsIGogPSBjaGlsZHJlbi5sZW5ndGg7IGkgPCBqOyArK2kpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNoaWxkcmVuW2ldLnVwZGF0ZVRyYW5zZm9ybSgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy9UT0RPIHJlbmFtZSB0ZXh0dXJlQnVmZmVyIHRvIHJlbmRlclRhcmdldC4uXG4gICAgdmFyIHRlbXAgPSAgdGhpcy5yZW5kZXJlci5maWx0ZXJNYW5hZ2VyO1xuXG4gICAgdGhpcy5yZW5kZXJlci5maWx0ZXJNYW5hZ2VyID0gdGhpcy5maWx0ZXJNYW5hZ2VyO1xuICAgIHRoaXMucmVuZGVyZXIucmVuZGVyRGlzcGxheU9iamVjdChkaXNwbGF5T2JqZWN0LCB0aGlzLnRleHR1cmVCdWZmZXIsIGNsZWFyKTtcblxuICAgIHRoaXMucmVuZGVyZXIuZmlsdGVyTWFuYWdlciA9IHRlbXA7XG59O1xuXG5cbi8qKlxuICogSW50ZXJuYWwgbWV0aG9kIGFzc2lnbmVkIHRvIHRoZSBgcmVuZGVyYCBwcm9wZXJ0eSBpZiB1c2luZyBhIENhbnZhc1JlbmRlcmVyLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0gZGlzcGxheU9iamVjdCB7UElYSS5EaXNwbGF5T2JqZWN0fSBUaGUgZGlzcGxheSBvYmplY3QgdG8gcmVuZGVyIHRoaXMgdGV4dHVyZSBvblxuICogQHBhcmFtIFttYXRyaXhdIHtQSVhJLk1hdHJpeH0gT3B0aW9uYWwgbWF0cml4IHRvIGFwcGx5IHRvIHRoZSBkaXNwbGF5IG9iamVjdCBiZWZvcmUgcmVuZGVyaW5nLlxuICogQHBhcmFtIFtjbGVhcl0ge2Jvb2xlYW59IElmIHRydWUgdGhlIHRleHR1cmUgd2lsbCBiZSBjbGVhcmVkIGJlZm9yZSB0aGUgZGlzcGxheU9iamVjdCBpcyBkcmF3blxuICovXG5SZW5kZXJUZXh0dXJlLnByb3RvdHlwZS5yZW5kZXJDYW52YXMgPSBmdW5jdGlvbiAoZGlzcGxheU9iamVjdCwgbWF0cml4LCBjbGVhciwgdXBkYXRlVHJhbnNmb3JtKVxue1xuICAgIGlmICghdGhpcy52YWxpZClcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB1cGRhdGVUcmFuc2Zvcm0gPSAhIXVwZGF0ZVRyYW5zZm9ybTtcblxuICAgIHZhciB3dCA9IHRlbXBNYXRyaXg7XG5cbiAgICB3dC5pZGVudGl0eSgpO1xuXG4gICAgaWYgKG1hdHJpeClcbiAgICB7XG4gICAgICAgIHd0LmFwcGVuZChtYXRyaXgpO1xuICAgIH1cblxuICAgIHZhciBjYWNoZWRXdCA9IGRpc3BsYXlPYmplY3Qud29ybGRUcmFuc2Zvcm07XG4gICAgZGlzcGxheU9iamVjdC53b3JsZFRyYW5zZm9ybSA9IHd0O1xuXG4gICAgLy8gc2V0V29ybGQgQWxwaGEgdG8gZW5zdXJlIHRoYXQgdGhlIG9iamVjdCBpcyByZW5kZXJlciBhdCBmdWxsIG9wYWNpdHlcbiAgICBkaXNwbGF5T2JqZWN0LndvcmxkQWxwaGEgPSAxO1xuXG4gICAgLy8gVGltZSB0byB1cGRhdGUgYWxsIHRoZSBjaGlsZHJlbiBvZiB0aGUgZGlzcGxheU9iamVjdCB3aXRoIHRoZSBuZXcgbWF0cml4Li5cbiAgICB2YXIgY2hpbGRyZW4gPSBkaXNwbGF5T2JqZWN0LmNoaWxkcmVuO1xuICAgIHZhciBpLCBqO1xuXG4gICAgZm9yIChpID0gMCwgaiA9IGNoaWxkcmVuLmxlbmd0aDsgaSA8IGo7ICsraSlcbiAgICB7XG4gICAgICAgIGNoaWxkcmVuW2ldLnVwZGF0ZVRyYW5zZm9ybSgpO1xuICAgIH1cblxuICAgIGlmIChjbGVhcilcbiAgICB7XG4gICAgICAgIHRoaXMudGV4dHVyZUJ1ZmZlci5jbGVhcigpO1xuICAgIH1cblxuXG4vLyAgICB0aGlzLnRleHR1cmVCdWZmZXIuXG4gICAgdmFyIGNvbnRleHQgPSB0aGlzLnRleHR1cmVCdWZmZXIuY29udGV4dDtcblxuICAgIHZhciByZWFsUmVzb2x1dGlvbiA9IHRoaXMucmVuZGVyZXIucmVzb2x1dGlvbjtcblxuICAgIHRoaXMucmVuZGVyZXIucmVzb2x1dGlvbiA9IHRoaXMucmVzb2x1dGlvbjtcblxuICAgIHRoaXMucmVuZGVyZXIucmVuZGVyRGlzcGxheU9iamVjdChkaXNwbGF5T2JqZWN0LCBjb250ZXh0KTtcblxuICAgIHRoaXMucmVuZGVyZXIucmVzb2x1dGlvbiA9IHJlYWxSZXNvbHV0aW9uO1xuXG4gICAgaWYoZGlzcGxheU9iamVjdC53b3JsZFRyYW5zZm9ybSA9PT0gd3QpXG4gICAge1xuICAgICAgICAvLyBmaXhlcyBjYWNoZUFzQml0bWFwIEhhcHBlbmluZyBkdXJpbmcgdGhlIGFib3ZlLi5cbiAgICAgICAgZGlzcGxheU9iamVjdC53b3JsZFRyYW5zZm9ybSA9IGNhY2hlZFd0O1xuICAgIH1cblxufTtcblxuLyoqXG4gKiBEZXN0cm95cyB0aGlzIHRleHR1cmVcbiAqXG4gKiBAcGFyYW0gZGVzdHJveUJhc2Uge2Jvb2xlYW59IFdoZXRoZXIgdG8gZGVzdHJveSB0aGUgYmFzZSB0ZXh0dXJlIGFzIHdlbGxcbiAqL1xuUmVuZGVyVGV4dHVyZS5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uICgpXG57XG4gICAgVGV4dHVyZS5wcm90b3R5cGUuZGVzdHJveS5jYWxsKHRoaXMsIHRydWUpO1xuXG4gICAgdGhpcy50ZXh0dXJlQnVmZmVyLmRlc3Ryb3koKTtcblxuICAgIC8vIGRlc3Ryb3kgdGhlIGZpbHRlcm1hbmFnZXIuLlxuICAgIGlmKHRoaXMuZmlsdGVyTWFuYWdlcilcbiAgICB7XG4gICAgICAgIHRoaXMuZmlsdGVyTWFuYWdlci5kZXN0cm95KCk7XG4gICAgfVxuXG4gICAgdGhpcy5yZW5kZXJlciA9IG51bGw7XG59O1xuXG4vKipcbiAqIFdpbGwgcmV0dXJuIGEgSFRNTCBJbWFnZSBvZiB0aGUgdGV4dHVyZVxuICpcbiAqIEByZXR1cm4ge0ltYWdlfVxuICovXG5SZW5kZXJUZXh0dXJlLnByb3RvdHlwZS5nZXRJbWFnZSA9IGZ1bmN0aW9uICgpXG57XG4gICAgdmFyIGltYWdlID0gbmV3IEltYWdlKCk7XG4gICAgaW1hZ2Uuc3JjID0gdGhpcy5nZXRCYXNlNjQoKTtcbiAgICByZXR1cm4gaW1hZ2U7XG59O1xuXG4vKipcbiAqIFdpbGwgcmV0dXJuIGEgYSBiYXNlNjQgZW5jb2RlZCBzdHJpbmcgb2YgdGhpcyB0ZXh0dXJlLiBJdCB3b3JrcyBieSBjYWxsaW5nIFJlbmRlclRleHR1cmUuZ2V0Q2FudmFzIGFuZCB0aGVuIHJ1bm5pbmcgdG9EYXRhVVJMIG9uIHRoYXQuXG4gKlxuICogQHJldHVybiB7c3RyaW5nfSBBIGJhc2U2NCBlbmNvZGVkIHN0cmluZyBvZiB0aGUgdGV4dHVyZS5cbiAqL1xuUmVuZGVyVGV4dHVyZS5wcm90b3R5cGUuZ2V0QmFzZTY0ID0gZnVuY3Rpb24gKClcbntcbiAgICByZXR1cm4gdGhpcy5nZXRDYW52YXMoKS50b0RhdGFVUkwoKTtcbn07XG5cbi8qKlxuICogQ3JlYXRlcyBhIENhbnZhcyBlbGVtZW50LCByZW5kZXJzIHRoaXMgUmVuZGVyVGV4dHVyZSB0byBpdCBhbmQgdGhlbiByZXR1cm5zIGl0LlxuICpcbiAqIEByZXR1cm4ge0hUTUxDYW52YXNFbGVtZW50fSBBIENhbnZhcyBlbGVtZW50IHdpdGggdGhlIHRleHR1cmUgcmVuZGVyZWQgb24uXG4gKi9cblJlbmRlclRleHR1cmUucHJvdG90eXBlLmdldENhbnZhcyA9IGZ1bmN0aW9uICgpXG57XG4gICAgaWYgKHRoaXMucmVuZGVyZXIudHlwZSA9PT0gQ09OU1QuUkVOREVSRVJfVFlQRS5XRUJHTClcbiAgICB7XG4gICAgICAgIHZhciBnbCA9IHRoaXMucmVuZGVyZXIuZ2w7XG4gICAgICAgIHZhciB3aWR0aCA9IHRoaXMudGV4dHVyZUJ1ZmZlci5zaXplLndpZHRoO1xuICAgICAgICB2YXIgaGVpZ2h0ID0gdGhpcy50ZXh0dXJlQnVmZmVyLnNpemUuaGVpZ2h0O1xuXG4gICAgICAgIHZhciB3ZWJHTFBpeGVscyA9IG5ldyBVaW50OEFycmF5KDQgKiB3aWR0aCAqIGhlaWdodCk7XG5cbiAgICAgICAgZ2wuYmluZEZyYW1lYnVmZmVyKGdsLkZSQU1FQlVGRkVSLCB0aGlzLnRleHR1cmVCdWZmZXIuZnJhbWVCdWZmZXIpO1xuICAgICAgICBnbC5yZWFkUGl4ZWxzKDAsIDAsIHdpZHRoLCBoZWlnaHQsIGdsLlJHQkEsIGdsLlVOU0lHTkVEX0JZVEUsIHdlYkdMUGl4ZWxzKTtcbiAgICAgICAgZ2wuYmluZEZyYW1lYnVmZmVyKGdsLkZSQU1FQlVGRkVSLCBudWxsKTtcblxuICAgICAgICB2YXIgdGVtcENhbnZhcyA9IG5ldyBDYW52YXNCdWZmZXIod2lkdGgsIGhlaWdodCk7XG4gICAgICAgIHZhciBjYW52YXNEYXRhID0gdGVtcENhbnZhcy5jb250ZXh0LmdldEltYWdlRGF0YSgwLCAwLCB3aWR0aCwgaGVpZ2h0KTtcbiAgICAgICAgY2FudmFzRGF0YS5kYXRhLnNldCh3ZWJHTFBpeGVscyk7XG5cbiAgICAgICAgdGVtcENhbnZhcy5jb250ZXh0LnB1dEltYWdlRGF0YShjYW52YXNEYXRhLCAwLCAwKTtcblxuICAgICAgICByZXR1cm4gdGVtcENhbnZhcy5jYW52YXM7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHJldHVybiB0aGlzLnRleHR1cmVCdWZmZXIuY2FudmFzO1xuICAgIH1cbn07XG5cbi8qKlxuICogV2lsbCByZXR1cm4gYSBvbmUtZGltZW5zaW9uYWwgYXJyYXkgY29udGFpbmluZyB0aGUgcGl4ZWwgZGF0YSBvZiB0aGUgZW50aXJlIHRleHR1cmUgaW4gUkdCQSBvcmRlciwgd2l0aCBpbnRlZ2VyIHZhbHVlcyBiZXR3ZWVuIDAgYW5kIDI1NSAoaW5jbHVkZWQpLlxuICpcbiAqIEByZXR1cm4ge1VpbnQ4Q2xhbXBlZEFycmF5fVxuICovXG5SZW5kZXJUZXh0dXJlLnByb3RvdHlwZS5nZXRQaXhlbHMgPSBmdW5jdGlvbiAoKVxue1xuICAgIHZhciB3aWR0aCwgaGVpZ2h0O1xuXG4gICAgaWYgKHRoaXMucmVuZGVyZXIudHlwZSA9PT0gQ09OU1QuUkVOREVSRVJfVFlQRS5XRUJHTClcbiAgICB7XG4gICAgICAgIHZhciBnbCA9IHRoaXMucmVuZGVyZXIuZ2w7XG4gICAgICAgIHdpZHRoID0gdGhpcy50ZXh0dXJlQnVmZmVyLnNpemUud2lkdGg7XG4gICAgICAgIGhlaWdodCA9IHRoaXMudGV4dHVyZUJ1ZmZlci5zaXplLmhlaWdodDtcblxuICAgICAgICB2YXIgd2ViR0xQaXhlbHMgPSBuZXcgVWludDhBcnJheSg0ICogd2lkdGggKiBoZWlnaHQpO1xuXG4gICAgICAgIGdsLmJpbmRGcmFtZWJ1ZmZlcihnbC5GUkFNRUJVRkZFUiwgdGhpcy50ZXh0dXJlQnVmZmVyLmZyYW1lQnVmZmVyKTtcbiAgICAgICAgZ2wucmVhZFBpeGVscygwLCAwLCB3aWR0aCwgaGVpZ2h0LCBnbC5SR0JBLCBnbC5VTlNJR05FRF9CWVRFLCB3ZWJHTFBpeGVscyk7XG4gICAgICAgIGdsLmJpbmRGcmFtZWJ1ZmZlcihnbC5GUkFNRUJVRkZFUiwgbnVsbCk7XG5cbiAgICAgICAgcmV0dXJuIHdlYkdMUGl4ZWxzO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICB3aWR0aCA9IHRoaXMudGV4dHVyZUJ1ZmZlci5jYW52YXMud2lkdGg7XG4gICAgICAgIGhlaWdodCA9IHRoaXMudGV4dHVyZUJ1ZmZlci5jYW52YXMuaGVpZ2h0O1xuXG4gICAgICAgIHJldHVybiB0aGlzLnRleHR1cmVCdWZmZXIuY2FudmFzLmdldENvbnRleHQoJzJkJykuZ2V0SW1hZ2VEYXRhKDAsIDAsIHdpZHRoLCBoZWlnaHQpLmRhdGE7XG4gICAgfVxufTtcblxuLyoqXG4gKiBXaWxsIHJldHVybiBhIG9uZS1kaW1lbnNpb25hbCBhcnJheSBjb250YWluaW5nIHRoZSBwaXhlbCBkYXRhIG9mIGEgcGl4ZWwgd2l0aGluIHRoZSB0ZXh0dXJlIGluIFJHQkEgb3JkZXIsIHdpdGggaW50ZWdlciB2YWx1ZXMgYmV0d2VlbiAwIGFuZCAyNTUgKGluY2x1ZGVkKS5cbiAqXG4gKiBAcGFyYW0geCB7bnVtYmVyfSBUaGUgeCBjb29yZGluYXRlIG9mIHRoZSBwaXhlbCB0byByZXRyaWV2ZS5cbiAqIEBwYXJhbSB5IHtudW1iZXJ9IFRoZSB5IGNvb3JkaW5hdGUgb2YgdGhlIHBpeGVsIHRvIHJldHJpZXZlLlxuICogQHJldHVybiB7VWludDhDbGFtcGVkQXJyYXl9XG4gKi9cblJlbmRlclRleHR1cmUucHJvdG90eXBlLmdldFBpeGVsID0gZnVuY3Rpb24gKHgsIHkpXG57XG4gICAgaWYgKHRoaXMucmVuZGVyZXIudHlwZSA9PT0gQ09OU1QuUkVOREVSRVJfVFlQRS5XRUJHTClcbiAgICB7XG4gICAgICAgIHZhciBnbCA9IHRoaXMucmVuZGVyZXIuZ2w7XG5cbiAgICAgICAgdmFyIHdlYkdMUGl4ZWxzID0gbmV3IFVpbnQ4QXJyYXkoNCk7XG5cbiAgICAgICAgZ2wuYmluZEZyYW1lYnVmZmVyKGdsLkZSQU1FQlVGRkVSLCB0aGlzLnRleHR1cmVCdWZmZXIuZnJhbWVCdWZmZXIpO1xuICAgICAgICBnbC5yZWFkUGl4ZWxzKHgsIHksIDEsIDEsIGdsLlJHQkEsIGdsLlVOU0lHTkVEX0JZVEUsIHdlYkdMUGl4ZWxzKTtcbiAgICAgICAgZ2wuYmluZEZyYW1lYnVmZmVyKGdsLkZSQU1FQlVGRkVSLCBudWxsKTtcblxuICAgICAgICByZXR1cm4gd2ViR0xQaXhlbHM7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHJldHVybiB0aGlzLnRleHR1cmVCdWZmZXIuY2FudmFzLmdldENvbnRleHQoJzJkJykuZ2V0SW1hZ2VEYXRhKHgsIHksIDEsIDEpLmRhdGE7XG4gICAgfVxufTtcbiIsInZhciBCYXNlVGV4dHVyZSA9IHJlcXVpcmUoJy4vQmFzZVRleHR1cmUnKSxcbiAgICBWaWRlb0Jhc2VUZXh0dXJlID0gcmVxdWlyZSgnLi9WaWRlb0Jhc2VUZXh0dXJlJyksXG4gICAgVGV4dHVyZVV2cyA9IHJlcXVpcmUoJy4vVGV4dHVyZVV2cycpLFxuICAgIEV2ZW50RW1pdHRlciA9IHJlcXVpcmUoJ2V2ZW50ZW1pdHRlcjMnKSxcbiAgICBtYXRoID0gcmVxdWlyZSgnLi4vbWF0aCcpLFxuICAgIHV0aWxzID0gcmVxdWlyZSgnLi4vdXRpbHMnKTtcblxuLyoqXG4gKiBBIHRleHR1cmUgc3RvcmVzIHRoZSBpbmZvcm1hdGlvbiB0aGF0IHJlcHJlc2VudHMgYW4gaW1hZ2Ugb3IgcGFydCBvZiBhbiBpbWFnZS4gSXQgY2Fubm90IGJlIGFkZGVkXG4gKiB0byB0aGUgZGlzcGxheSBsaXN0IGRpcmVjdGx5LiBJbnN0ZWFkIHVzZSBpdCBhcyB0aGUgdGV4dHVyZSBmb3IgYSBTcHJpdGUuIElmIG5vIGZyYW1lIGlzIHByb3ZpZGVkIHRoZW4gdGhlIHdob2xlIGltYWdlIGlzIHVzZWQuXG4gKlxuICogWW91IGNhbiBkaXJlY3RseSBjcmVhdGUgYSB0ZXh0dXJlIGZyb20gYW4gaW1hZ2UgYW5kIHRoZW4gcmV1c2UgaXQgbXVsdGlwbGUgdGltZXMgbGlrZSB0aGlzIDpcbiAqXG4gKiBgYGBqc1xuICogdmFyIHRleHR1cmUgPSBQSVhJLlRleHR1cmUuZnJvbUltYWdlKCdhc3NldHMvaW1hZ2UucG5nJyk7XG4gKiB2YXIgc3ByaXRlMSA9IG5ldyBQSVhJLlNwcml0ZSh0ZXh0dXJlKTtcbiAqIHZhciBzcHJpdGUyID0gbmV3IFBJWEkuU3ByaXRlKHRleHR1cmUpO1xuICogYGBgXG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIGJhc2VUZXh0dXJlIHtQSVhJLkJhc2VUZXh0dXJlfSBUaGUgYmFzZSB0ZXh0dXJlIHNvdXJjZSB0byBjcmVhdGUgdGhlIHRleHR1cmUgZnJvbVxuICogQHBhcmFtIFtmcmFtZV0ge1BJWEkuUmVjdGFuZ2xlfSBUaGUgcmVjdGFuZ2xlIGZyYW1lIG9mIHRoZSB0ZXh0dXJlIHRvIHNob3dcbiAqIEBwYXJhbSBbY3JvcF0ge1BJWEkuUmVjdGFuZ2xlfSBUaGUgYXJlYSBvZiBvcmlnaW5hbCB0ZXh0dXJlXG4gKiBAcGFyYW0gW3RyaW1dIHtQSVhJLlJlY3RhbmdsZX0gVHJpbW1lZCB0ZXh0dXJlIHJlY3RhbmdsZVxuICogQHBhcmFtIFtyb3RhdGVdIHtib29sZWFufSBpbmRpY2F0ZXMgd2hldGhlciB0aGUgdGV4dHVyZSBzaG91bGQgYmUgcm90YXRlZCBieSA5MCBkZWdyZWVzICggdXNlZCBieSB0ZXh0dXJlIHBhY2tlciApXG4gKi9cbmZ1bmN0aW9uIFRleHR1cmUoYmFzZVRleHR1cmUsIGZyYW1lLCBjcm9wLCB0cmltLCByb3RhdGUpXG57XG4gICAgRXZlbnRFbWl0dGVyLmNhbGwodGhpcyk7XG5cbiAgICAvKipcbiAgICAgKiBEb2VzIHRoaXMgVGV4dHVyZSBoYXZlIGFueSBmcmFtZSBkYXRhIGFzc2lnbmVkIHRvIGl0P1xuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKi9cbiAgICB0aGlzLm5vRnJhbWUgPSBmYWxzZTtcblxuICAgIGlmICghZnJhbWUpXG4gICAge1xuICAgICAgICB0aGlzLm5vRnJhbWUgPSB0cnVlO1xuICAgICAgICBmcmFtZSA9IG5ldyBtYXRoLlJlY3RhbmdsZSgwLCAwLCAxLCAxKTtcbiAgICB9XG5cbiAgICBpZiAoYmFzZVRleHR1cmUgaW5zdGFuY2VvZiBUZXh0dXJlKVxuICAgIHtcbiAgICAgICAgYmFzZVRleHR1cmUgPSBiYXNlVGV4dHVyZS5iYXNlVGV4dHVyZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYmFzZSB0ZXh0dXJlIHRoYXQgdGhpcyB0ZXh0dXJlIHVzZXMuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLkJhc2VUZXh0dXJlfVxuICAgICAqL1xuICAgIHRoaXMuYmFzZVRleHR1cmUgPSBiYXNlVGV4dHVyZTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBmcmFtZSBzcGVjaWZpZXMgdGhlIHJlZ2lvbiBvZiB0aGUgYmFzZSB0ZXh0dXJlIHRoYXQgdGhpcyB0ZXh0dXJlIHVzZXNcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuUmVjdGFuZ2xlfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fZnJhbWUgPSBmcmFtZTtcblxuICAgIC8qKlxuICAgICAqIFRoZSB0ZXh0dXJlIHRyaW0gZGF0YS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuUmVjdGFuZ2xlfVxuICAgICAqL1xuICAgIHRoaXMudHJpbSA9IHRyaW07XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIHdpbGwgbGV0IHRoZSByZW5kZXJlciBrbm93IGlmIHRoZSB0ZXh0dXJlIGlzIHZhbGlkLiBJZiBpdCdzIG5vdCB0aGVuIGl0IGNhbm5vdCBiZSByZW5kZXJlZC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICovXG4gICAgdGhpcy52YWxpZCA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogVGhpcyB3aWxsIGxldCBhIHJlbmRlcmVyIGtub3cgdGhhdCBhIHRleHR1cmUgaGFzIGJlZW4gdXBkYXRlZCAodXNlZCBtYWlubHkgZm9yIHdlYkdMIHV2IHVwZGF0ZXMpXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqL1xuICAgIHRoaXMucmVxdWlyZXNVcGRhdGUgPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBXZWJHTCBVViBkYXRhIGNhY2hlLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5UZXh0dXJlVXZzfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fdXZzID0gbnVsbDtcblxuICAgIC8qKlxuICAgICAqIFRoZSB3aWR0aCBvZiB0aGUgVGV4dHVyZSBpbiBwaXhlbHMuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy53aWR0aCA9IDA7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgaGVpZ2h0IG9mIHRoZSBUZXh0dXJlIGluIHBpeGVscy5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLmhlaWdodCA9IDA7XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIGlzIHRoZSBhcmVhIG9mIHRoZSBCYXNlVGV4dHVyZSBpbWFnZSB0byBhY3R1YWxseSBjb3B5IHRvIHRoZSBDYW52YXMgLyBXZWJHTCB3aGVuIHJlbmRlcmluZyxcbiAgICAgKiBpcnJlc3BlY3RpdmUgb2YgdGhlIGFjdHVhbCBmcmFtZSBzaXplIG9yIHBsYWNlbWVudCAod2hpY2ggY2FuIGJlIGluZmx1ZW5jZWQgYnkgdHJpbW1lZCB0ZXh0dXJlIGF0bGFzZXMpXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlJlY3RhbmdsZX1cbiAgICAgKi9cbiAgICB0aGlzLmNyb3AgPSBjcm9wIHx8IGZyYW1lOy8vbmV3IG1hdGguUmVjdGFuZ2xlKDAsIDAsIDEsIDEpO1xuXG4gICAgLyoqXG4gICAgICogSW5kaWNhdGVzIHdoZXRoZXIgdGhlIHRleHR1cmUgc2hvdWxkIGJlIHJvdGF0ZWQgYnkgOTAgZGVncmVlc1xuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqL1xuICAgIHRoaXMucm90YXRlID0gISFyb3RhdGU7XG5cbiAgICBpZiAoYmFzZVRleHR1cmUuaGFzTG9hZGVkKVxuICAgIHtcbiAgICAgICAgaWYgKHRoaXMubm9GcmFtZSlcbiAgICAgICAge1xuICAgICAgICAgICAgZnJhbWUgPSBuZXcgbWF0aC5SZWN0YW5nbGUoMCwgMCwgYmFzZVRleHR1cmUud2lkdGgsIGJhc2VUZXh0dXJlLmhlaWdodCk7XG5cbiAgICAgICAgICAgIC8vIGlmIHRoZXJlIGlzIG5vIGZyYW1lIHdlIHNob3VsZCBtb25pdG9yIGZvciBhbnkgYmFzZSB0ZXh0dXJlIGNoYW5nZXMuLlxuICAgICAgICAgICAgYmFzZVRleHR1cmUub24oJ3VwZGF0ZScsIHRoaXMub25CYXNlVGV4dHVyZVVwZGF0ZWQsIHRoaXMpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZnJhbWUgPSBmcmFtZTtcbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgYmFzZVRleHR1cmUub25jZSgnbG9hZGVkJywgdGhpcy5vbkJhc2VUZXh0dXJlTG9hZGVkLCB0aGlzKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBGaXJlZCB3aGVuIHRoZSB0ZXh0dXJlIGlzIHVwZGF0ZWQuIFRoaXMgaGFwcGVucyBpZiB0aGUgZnJhbWUgb3IgdGhlIGJhc2VUZXh0dXJlIGlzIHVwZGF0ZWQuXG4gICAgICpcbiAgICAgKiBAZXZlbnQgdXBkYXRlXG4gICAgICogQG1lbWJlcm9mIFBJWEkuVGV4dHVyZSNcbiAgICAgKiBAcHJvdGVjdGVkXG4gICAgICovXG59XG5cblRleHR1cmUucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShFdmVudEVtaXR0ZXIucHJvdG90eXBlKTtcblRleHR1cmUucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gVGV4dHVyZTtcbm1vZHVsZS5leHBvcnRzID0gVGV4dHVyZTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoVGV4dHVyZS5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBUaGUgZnJhbWUgc3BlY2lmaWVzIHRoZSByZWdpb24gb2YgdGhlIGJhc2UgdGV4dHVyZSB0aGF0IHRoaXMgdGV4dHVyZSB1c2VzLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5SZWN0YW5nbGV9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuVGV4dHVyZSNcbiAgICAgKi9cbiAgICBmcmFtZToge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9mcmFtZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAoZnJhbWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuX2ZyYW1lID0gZnJhbWU7XG5cbiAgICAgICAgICAgIHRoaXMubm9GcmFtZSA9IGZhbHNlO1xuXG4gICAgICAgICAgICB0aGlzLndpZHRoID0gZnJhbWUud2lkdGg7XG4gICAgICAgICAgICB0aGlzLmhlaWdodCA9IGZyYW1lLmhlaWdodDtcblxuICAgICAgICAgICAgaWYgKCF0aGlzLnRyaW0gJiYgIXRoaXMucm90YXRlICYmIChmcmFtZS54ICsgZnJhbWUud2lkdGggPiB0aGlzLmJhc2VUZXh0dXJlLndpZHRoIHx8IGZyYW1lLnkgKyBmcmFtZS5oZWlnaHQgPiB0aGlzLmJhc2VUZXh0dXJlLmhlaWdodCkpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdUZXh0dXJlIEVycm9yOiBmcmFtZSBkb2VzIG5vdCBmaXQgaW5zaWRlIHRoZSBiYXNlIFRleHR1cmUgZGltZW5zaW9ucyAnICsgdGhpcyk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vdGhpcy52YWxpZCA9IGZyYW1lICYmIGZyYW1lLndpZHRoICYmIGZyYW1lLmhlaWdodCAmJiB0aGlzLmJhc2VUZXh0dXJlLnNvdXJjZSAmJiB0aGlzLmJhc2VUZXh0dXJlLmhhc0xvYWRlZDtcbiAgICAgICAgICAgIHRoaXMudmFsaWQgPSBmcmFtZSAmJiBmcmFtZS53aWR0aCAmJiBmcmFtZS5oZWlnaHQgJiYgdGhpcy5iYXNlVGV4dHVyZS5oYXNMb2FkZWQ7XG5cbiAgICAgICAgICAgIGlmICh0aGlzLnRyaW0pXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdGhpcy53aWR0aCA9IHRoaXMudHJpbS53aWR0aDtcbiAgICAgICAgICAgICAgICB0aGlzLmhlaWdodCA9IHRoaXMudHJpbS5oZWlnaHQ7XG4gICAgICAgICAgICAgICAgdGhpcy5fZnJhbWUud2lkdGggPSB0aGlzLnRyaW0ud2lkdGg7XG4gICAgICAgICAgICAgICAgdGhpcy5fZnJhbWUuaGVpZ2h0ID0gdGhpcy50cmltLmhlaWdodDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB0aGlzLmNyb3AgPSBmcmFtZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHRoaXMudmFsaWQpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdGhpcy5fdXBkYXRlVXZzKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG59KTtcblxuLyoqXG4gKiBVcGRhdGVzIHRoaXMgdGV4dHVyZSBvbiB0aGUgZ3B1LlxuICpcbiAqL1xuVGV4dHVyZS5wcm90b3R5cGUudXBkYXRlID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLmJhc2VUZXh0dXJlLnVwZGF0ZSgpO1xufTtcblxuLyoqXG4gKiBDYWxsZWQgd2hlbiB0aGUgYmFzZSB0ZXh0dXJlIGlzIGxvYWRlZFxuICpcbiAqIEBwcml2YXRlXG4gKi9cblRleHR1cmUucHJvdG90eXBlLm9uQmFzZVRleHR1cmVMb2FkZWQgPSBmdW5jdGlvbiAoYmFzZVRleHR1cmUpXG57XG4gICAgLy8gVE9ETyB0aGlzIGNvZGUgbG9va3MgY29uZnVzaW5nLi4gYm9vIHRvIGFidXNpbmcgZ2V0dGVycyBhbmQgc2V0dGVyc3MhXG4gICAgaWYgKHRoaXMubm9GcmFtZSlcbiAgICB7XG4gICAgICAgIHRoaXMuZnJhbWUgPSBuZXcgbWF0aC5SZWN0YW5nbGUoMCwgMCwgYmFzZVRleHR1cmUud2lkdGgsIGJhc2VUZXh0dXJlLmhlaWdodCk7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHRoaXMuZnJhbWUgPSB0aGlzLl9mcmFtZTtcbiAgICB9XG5cbiAgICB0aGlzLmVtaXQoJ3VwZGF0ZScsIHRoaXMpO1xufTtcblxuLyoqXG4gKiBDYWxsZWQgd2hlbiB0aGUgYmFzZSB0ZXh0dXJlIGlzIHVwZGF0ZWRcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5UZXh0dXJlLnByb3RvdHlwZS5vbkJhc2VUZXh0dXJlVXBkYXRlZCA9IGZ1bmN0aW9uIChiYXNlVGV4dHVyZSlcbntcbiAgICB0aGlzLl9mcmFtZS53aWR0aCA9IGJhc2VUZXh0dXJlLndpZHRoO1xuICAgIHRoaXMuX2ZyYW1lLmhlaWdodCA9IGJhc2VUZXh0dXJlLmhlaWdodDtcblxuICAgIHRoaXMuZW1pdCgndXBkYXRlJywgdGhpcyk7XG59O1xuXG4vKipcbiAqIERlc3Ryb3lzIHRoaXMgdGV4dHVyZVxuICpcbiAqIEBwYXJhbSBbZGVzdHJveUJhc2U9ZmFsc2VdIHtib29sZWFufSBXaGV0aGVyIHRvIGRlc3Ryb3kgdGhlIGJhc2UgdGV4dHVyZSBhcyB3ZWxsXG4gKi9cblRleHR1cmUucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoZGVzdHJveUJhc2UpXG57XG4gICAgaWYgKHRoaXMuYmFzZVRleHR1cmUpXG4gICAge1xuICAgICAgICBpZiAoZGVzdHJveUJhc2UpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuYmFzZVRleHR1cmUuZGVzdHJveSgpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5iYXNlVGV4dHVyZS5vZmYoJ3VwZGF0ZScsIHRoaXMub25CYXNlVGV4dHVyZVVwZGF0ZWQsIHRoaXMpO1xuICAgICAgICB0aGlzLmJhc2VUZXh0dXJlLm9mZignbG9hZGVkJywgdGhpcy5vbkJhc2VUZXh0dXJlTG9hZGVkLCB0aGlzKTtcblxuICAgICAgICB0aGlzLmJhc2VUZXh0dXJlID0gbnVsbDtcbiAgICB9XG5cbiAgICB0aGlzLl9mcmFtZSA9IG51bGw7XG4gICAgdGhpcy5fdXZzID0gbnVsbDtcbiAgICB0aGlzLnRyaW0gPSBudWxsO1xuICAgIHRoaXMuY3JvcCA9IG51bGw7XG5cbiAgICB0aGlzLnZhbGlkID0gZmFsc2U7XG5cbiAgICB0aGlzLm9mZignZGlzcG9zZScsIHRoaXMuZGlzcG9zZSwgdGhpcyk7XG4gICAgdGhpcy5vZmYoJ3VwZGF0ZScsIHRoaXMudXBkYXRlLCB0aGlzKTtcbn07XG5cbi8qKlxuICogQ3JlYXRlcyBhIG5ldyB0ZXh0dXJlIG9iamVjdCB0aGF0IGFjdHMgdGhlIHNhbWUgYXMgdGhpcyBvbmUuXG4gKlxuICogQHJldHVybiB7UElYSS5UZXh0dXJlfVxuICovXG5UZXh0dXJlLnByb3RvdHlwZS5jbG9uZSA9IGZ1bmN0aW9uICgpXG57XG4gICAgcmV0dXJuIG5ldyBUZXh0dXJlKHRoaXMuYmFzZVRleHR1cmUsIHRoaXMuZnJhbWUsIHRoaXMuY3JvcCwgdGhpcy50cmltLCB0aGlzLnJvdGF0ZSk7XG59O1xuXG4vKipcbiAqIFVwZGF0ZXMgdGhlIGludGVybmFsIFdlYkdMIFVWIGNhY2hlLlxuICpcbiAqIEBwcml2YXRlXG4gKi9cblRleHR1cmUucHJvdG90eXBlLl91cGRhdGVVdnMgPSBmdW5jdGlvbiAoKVxue1xuICAgIGlmICghdGhpcy5fdXZzKVxuICAgIHtcbiAgICAgICAgdGhpcy5fdXZzID0gbmV3IFRleHR1cmVVdnMoKTtcbiAgICB9XG5cbiAgICB0aGlzLl91dnMuc2V0KHRoaXMuY3JvcCwgdGhpcy5iYXNlVGV4dHVyZSwgdGhpcy5yb3RhdGUpO1xufTtcblxuLyoqXG4gKiBIZWxwZXIgZnVuY3Rpb24gdGhhdCBjcmVhdGVzIGEgVGV4dHVyZSBvYmplY3QgZnJvbSB0aGUgZ2l2ZW4gaW1hZ2UgdXJsLlxuICogSWYgdGhlIGltYWdlIGlzIG5vdCBpbiB0aGUgdGV4dHVyZSBjYWNoZSBpdCB3aWxsIGJlICBjcmVhdGVkIGFuZCBsb2FkZWQuXG4gKlxuICogQHN0YXRpY1xuICogQHBhcmFtIGltYWdlVXJsIHtzdHJpbmd9IFRoZSBpbWFnZSB1cmwgb2YgdGhlIHRleHR1cmVcbiAqIEBwYXJhbSBjcm9zc29yaWdpbiB7Ym9vbGVhbn0gV2hldGhlciByZXF1ZXN0cyBzaG91bGQgYmUgdHJlYXRlZCBhcyBjcm9zc29yaWdpblxuICogQHBhcmFtIHNjYWxlTW9kZSB7bnVtYmVyfSBTZWUge0BsaW5rIFBJWEkuU0NBTEVfTU9ERVN9IGZvciBwb3NzaWJsZSB2YWx1ZXNcbiAqIEByZXR1cm4ge1BJWEkuVGV4dHVyZX0gVGhlIG5ld2x5IGNyZWF0ZWQgdGV4dHVyZVxuICovXG5UZXh0dXJlLmZyb21JbWFnZSA9IGZ1bmN0aW9uIChpbWFnZVVybCwgY3Jvc3NvcmlnaW4sIHNjYWxlTW9kZSlcbntcbiAgICB2YXIgdGV4dHVyZSA9IHV0aWxzLlRleHR1cmVDYWNoZVtpbWFnZVVybF07XG5cbiAgICBpZiAoIXRleHR1cmUpXG4gICAge1xuICAgICAgICB0ZXh0dXJlID0gbmV3IFRleHR1cmUoQmFzZVRleHR1cmUuZnJvbUltYWdlKGltYWdlVXJsLCBjcm9zc29yaWdpbiwgc2NhbGVNb2RlKSk7XG4gICAgICAgIHV0aWxzLlRleHR1cmVDYWNoZVtpbWFnZVVybF0gPSB0ZXh0dXJlO1xuICAgIH1cblxuICAgIHJldHVybiB0ZXh0dXJlO1xufTtcblxuLyoqXG4gKiBIZWxwZXIgZnVuY3Rpb24gdGhhdCBjcmVhdGVzIGEgc3ByaXRlIHRoYXQgd2lsbCBjb250YWluIGEgdGV4dHVyZSBmcm9tIHRoZSBUZXh0dXJlQ2FjaGUgYmFzZWQgb24gdGhlIGZyYW1lSWRcbiAqIFRoZSBmcmFtZSBpZHMgYXJlIGNyZWF0ZWQgd2hlbiBhIFRleHR1cmUgcGFja2VyIGZpbGUgaGFzIGJlZW4gbG9hZGVkXG4gKlxuICogQHN0YXRpY1xuICogQHBhcmFtIGZyYW1lSWQge3N0cmluZ30gVGhlIGZyYW1lIElkIG9mIHRoZSB0ZXh0dXJlIGluIHRoZSBjYWNoZVxuICogQHJldHVybiB7UElYSS5UZXh0dXJlfSBUaGUgbmV3bHkgY3JlYXRlZCB0ZXh0dXJlXG4gKi9cblRleHR1cmUuZnJvbUZyYW1lID0gZnVuY3Rpb24gKGZyYW1lSWQpXG57XG4gICAgdmFyIHRleHR1cmUgPSB1dGlscy5UZXh0dXJlQ2FjaGVbZnJhbWVJZF07XG5cbiAgICBpZiAoIXRleHR1cmUpXG4gICAge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RoZSBmcmFtZUlkIFwiJyArIGZyYW1lSWQgKyAnXCIgZG9lcyBub3QgZXhpc3QgaW4gdGhlIHRleHR1cmUgY2FjaGUnKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGV4dHVyZTtcbn07XG5cbi8qKlxuICogSGVscGVyIGZ1bmN0aW9uIHRoYXQgY3JlYXRlcyBhIG5ldyBUZXh0dXJlIGJhc2VkIG9uIHRoZSBnaXZlbiBjYW52YXMgZWxlbWVudC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAcGFyYW0gY2FudmFzIHtDYW52YXN9IFRoZSBjYW52YXMgZWxlbWVudCBzb3VyY2Ugb2YgdGhlIHRleHR1cmVcbiAqIEBwYXJhbSBzY2FsZU1vZGUge251bWJlcn0gU2VlIHtAbGluayBQSVhJLlNDQUxFX01PREVTfSBmb3IgcG9zc2libGUgdmFsdWVzXG4gKiBAcmV0dXJuIHtQSVhJLlRleHR1cmV9XG4gKi9cblRleHR1cmUuZnJvbUNhbnZhcyA9IGZ1bmN0aW9uIChjYW52YXMsIHNjYWxlTW9kZSlcbntcbiAgICByZXR1cm4gbmV3IFRleHR1cmUoQmFzZVRleHR1cmUuZnJvbUNhbnZhcyhjYW52YXMsIHNjYWxlTW9kZSkpO1xufTtcblxuLyoqXG4gKiBIZWxwZXIgZnVuY3Rpb24gdGhhdCBjcmVhdGVzIGEgbmV3IFRleHR1cmUgYmFzZWQgb24gdGhlIGdpdmVuIHZpZGVvIGVsZW1lbnQuXG4gKlxuICogQHN0YXRpY1xuICogQHBhcmFtIHZpZGVvIHtIVE1MVmlkZW9FbGVtZW50fVxuICogQHBhcmFtIHNjYWxlTW9kZSB7bnVtYmVyfSBTZWUge0BsaW5rIFBJWEkuU0NBTEVfTU9ERVN9IGZvciBwb3NzaWJsZSB2YWx1ZXNcbiAqIEByZXR1cm4ge1BJWEkuVGV4dHVyZX0gQSBUZXh0dXJlXG4gKi9cblRleHR1cmUuZnJvbVZpZGVvID0gZnVuY3Rpb24gKHZpZGVvLCBzY2FsZU1vZGUpXG57XG4gICAgaWYgKHR5cGVvZiB2aWRlbyA9PT0gJ3N0cmluZycpXG4gICAge1xuICAgICAgICByZXR1cm4gVGV4dHVyZS5mcm9tVmlkZW9VcmwodmlkZW8sIHNjYWxlTW9kZSk7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHJldHVybiBuZXcgVGV4dHVyZShWaWRlb0Jhc2VUZXh0dXJlLmZyb21WaWRlbyh2aWRlbywgc2NhbGVNb2RlKSk7XG4gICAgfVxufTtcblxuLyoqXG4gKiBIZWxwZXIgZnVuY3Rpb24gdGhhdCBjcmVhdGVzIGEgbmV3IFRleHR1cmUgYmFzZWQgb24gdGhlIHZpZGVvIHVybC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAcGFyYW0gdmlkZW9Vcmwge3N0cmluZ31cbiAqIEBwYXJhbSBzY2FsZU1vZGUge251bWJlcn0gU2VlIHtAbGluayBQSVhJLlNDQUxFX01PREVTfSBmb3IgcG9zc2libGUgdmFsdWVzXG4gKiBAcmV0dXJuIHtQSVhJLlRleHR1cmV9IEEgVGV4dHVyZVxuICovXG5UZXh0dXJlLmZyb21WaWRlb1VybCA9IGZ1bmN0aW9uICh2aWRlb1VybCwgc2NhbGVNb2RlKVxue1xuICAgIHJldHVybiBuZXcgVGV4dHVyZShWaWRlb0Jhc2VUZXh0dXJlLmZyb21VcmwodmlkZW9VcmwsIHNjYWxlTW9kZSkpO1xufTtcblxuLyoqXG4gKiBBZGRzIGEgdGV4dHVyZSB0byB0aGUgZ2xvYmFsIHV0aWxzLlRleHR1cmVDYWNoZS4gVGhpcyBjYWNoZSBpcyBzaGFyZWQgYWNyb3NzIHRoZSB3aG9sZSBQSVhJIG9iamVjdC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAcGFyYW0gdGV4dHVyZSB7UElYSS5UZXh0dXJlfSBUaGUgVGV4dHVyZSB0byBhZGQgdG8gdGhlIGNhY2hlLlxuICogQHBhcmFtIGlkIHtzdHJpbmd9IFRoZSBpZCB0aGF0IHRoZSB0ZXh0dXJlIHdpbGwgYmUgc3RvcmVkIGFnYWluc3QuXG4gKi9cblRleHR1cmUuYWRkVGV4dHVyZVRvQ2FjaGUgPSBmdW5jdGlvbiAodGV4dHVyZSwgaWQpXG57XG4gICAgdXRpbHMuVGV4dHVyZUNhY2hlW2lkXSA9IHRleHR1cmU7XG59O1xuXG4vKipcbiAqIFJlbW92ZSBhIHRleHR1cmUgZnJvbSB0aGUgZ2xvYmFsIHV0aWxzLlRleHR1cmVDYWNoZS5cbiAqXG4gKiBAc3RhdGljXG4gKiBAcGFyYW0gaWQge3N0cmluZ30gVGhlIGlkIG9mIHRoZSB0ZXh0dXJlIHRvIGJlIHJlbW92ZWRcbiAqIEByZXR1cm4ge1BJWEkuVGV4dHVyZX0gVGhlIHRleHR1cmUgdGhhdCB3YXMgcmVtb3ZlZFxuICovXG5UZXh0dXJlLnJlbW92ZVRleHR1cmVGcm9tQ2FjaGUgPSBmdW5jdGlvbiAoaWQpXG57XG4gICAgdmFyIHRleHR1cmUgPSB1dGlscy5UZXh0dXJlQ2FjaGVbaWRdO1xuXG4gICAgZGVsZXRlIHV0aWxzLlRleHR1cmVDYWNoZVtpZF07XG4gICAgZGVsZXRlIHV0aWxzLkJhc2VUZXh0dXJlQ2FjaGVbaWRdO1xuXG4gICAgcmV0dXJuIHRleHR1cmU7XG59O1xuXG4vKipcbiAqIEFuIGVtcHR5IHRleHR1cmUsIHVzZWQgb2Z0ZW4gdG8gbm90IGhhdmUgdG8gY3JlYXRlIG11bHRpcGxlIGVtcHR5IHRleHR1cmVzLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBjb25zdGFudFxuICovXG5UZXh0dXJlLkVNUFRZID0gbmV3IFRleHR1cmUobmV3IEJhc2VUZXh0dXJlKCkpO1xuIiwiXG4vKipcbiAqIEEgc3RhbmRhcmQgb2JqZWN0IHRvIHN0b3JlIHRoZSBVdnMgb2YgYSB0ZXh0dXJlXG4gKlxuICogQGNsYXNzXG4gKiBAcHJpdmF0ZVxuICogQG1lbWJlcm9mIFBJWElcbiAqL1xuZnVuY3Rpb24gVGV4dHVyZVV2cygpXG57XG4gICAgdGhpcy54MCA9IDA7XG4gICAgdGhpcy55MCA9IDA7XG5cbiAgICB0aGlzLngxID0gMTtcbiAgICB0aGlzLnkxID0gMDtcblxuICAgIHRoaXMueDIgPSAxO1xuICAgIHRoaXMueTIgPSAxO1xuXG4gICAgdGhpcy54MyA9IDA7XG4gICAgdGhpcy55MyA9IDE7XG5cbiAgICB0aGlzLnh5MF91aW50MzIgPSAwO1xuICAgIHRoaXMueHkxX3VpbnQzMiA9IDA7XG4gICAgdGhpcy54eTJfdWludDMyID0gMDtcbiAgICB0aGlzLnh5M191aW50MzIgPSAwO1xuXG4gICAgdGhpcy51dnNfdWludDMyID0gbmV3IFVpbnQzMkFycmF5KDQpXG59XG5cbm1vZHVsZS5leHBvcnRzID0gVGV4dHVyZVV2cztcblxuLyoqXG4gKiBTZXRzIHRoZSB0ZXh0dXJlIFV2cyBiYXNlZCBvbiB0aGUgZ2l2ZW4gZnJhbWUgaW5mb3JtYXRpb25cbiAqIEBwYXJhbSBmcmFtZSB7UElYSS5SZWN0YW5nbGV9XG4gKiBAcGFyYW0gYmFzZUZyYW1lIHtQSVhJLlJlY3RhbmdsZX1cbiAqIEBwYXJhbSByb3RhdGUge2Jvb2xlYW59IFdoZXRoZXIgb3Igbm90IHRoZSBmcmFtZSBpcyByb3RhdGVkXG4gKiBAcHJpdmF0ZVxuICovXG5UZXh0dXJlVXZzLnByb3RvdHlwZS5zZXQgPSBmdW5jdGlvbiAoZnJhbWUsIGJhc2VGcmFtZSwgcm90YXRlKVxue1xuICAgIHZhciB0dyA9IGJhc2VGcmFtZS53aWR0aDtcbiAgICB2YXIgdGggPSBiYXNlRnJhbWUuaGVpZ2h0O1xuXG4gICAgaWYocm90YXRlKVxuICAgIHtcbiAgICAgICAgdGhpcy54MCA9IChmcmFtZS54ICsgZnJhbWUuaGVpZ2h0KSAvIHR3O1xuICAgICAgICB0aGlzLnkwID0gZnJhbWUueSAvIHRoO1xuXG4gICAgICAgIHRoaXMueDEgPSAoZnJhbWUueCArIGZyYW1lLmhlaWdodCkgLyB0dztcbiAgICAgICAgdGhpcy55MSA9IChmcmFtZS55ICsgZnJhbWUud2lkdGgpIC8gdGg7XG5cbiAgICAgICAgdGhpcy54MiA9IGZyYW1lLnggLyB0dztcbiAgICAgICAgdGhpcy55MiA9IChmcmFtZS55ICsgZnJhbWUud2lkdGgpIC8gdGg7XG5cbiAgICAgICAgdGhpcy54MyA9IGZyYW1lLnggLyB0dztcbiAgICAgICAgdGhpcy55MyA9IGZyYW1lLnkgLyB0aDtcbiAgICB9XG4gICAgZWxzZVxuICAgIHtcblxuICAgICAgICB0aGlzLngwID0gZnJhbWUueCAvIHR3O1xuICAgICAgICB0aGlzLnkwID0gZnJhbWUueSAvIHRoO1xuXG4gICAgICAgIHRoaXMueDEgPSAoZnJhbWUueCArIGZyYW1lLndpZHRoKSAvIHR3O1xuICAgICAgICB0aGlzLnkxID0gZnJhbWUueSAvIHRoO1xuXG4gICAgICAgIHRoaXMueDIgPSAoZnJhbWUueCArIGZyYW1lLndpZHRoKSAvIHR3O1xuICAgICAgICB0aGlzLnkyID0gKGZyYW1lLnkgKyBmcmFtZS5oZWlnaHQpIC8gdGg7XG5cbiAgICAgICAgdGhpcy54MyA9IGZyYW1lLnggLyB0dztcbiAgICAgICAgdGhpcy55MyA9IChmcmFtZS55ICsgZnJhbWUuaGVpZ2h0KSAvIHRoO1xuICAgIH1cblxuICAgIHRoaXMudXZzX3VpbnQzMlswXSA9ICgoKHRoaXMueTAgKiA2NTUzNSkgJiAweEZGRkYpIDw8IDE2KSB8ICgodGhpcy54MCAqIDY1NTM1KSAmIDB4RkZGRik7XG4gICAgdGhpcy51dnNfdWludDMyWzFdID0gKCgodGhpcy55MSAqIDY1NTM1KSAmIDB4RkZGRikgPDwgMTYpIHwgKCh0aGlzLngxICogNjU1MzUpICYgMHhGRkZGKTtcbiAgICB0aGlzLnV2c191aW50MzJbMl0gPSAoKCh0aGlzLnkyICogNjU1MzUpICYgMHhGRkZGKSA8PCAxNikgfCAoKHRoaXMueDIgKiA2NTUzNSkgJiAweEZGRkYpO1xuICAgIHRoaXMudXZzX3VpbnQzMlszXSA9ICgoKHRoaXMueTMgKiA2NTUzNSkgJiAweEZGRkYpIDw8IDE2KSB8ICgodGhpcy54MyAqIDY1NTM1KSAmIDB4RkZGRik7XG59O1xuIiwidmFyIEJhc2VUZXh0dXJlID0gcmVxdWlyZSgnLi9CYXNlVGV4dHVyZScpLFxuICAgIHV0aWxzID0gcmVxdWlyZSgnLi4vdXRpbHMnKTtcblxuLyoqXG4gKiBBIHRleHR1cmUgb2YgYSBbcGxheWluZ10gVmlkZW8uXG4gKlxuICogVmlkZW8gYmFzZSB0ZXh0dXJlcyBtaW1pYyBQaXhpIEJhc2VUZXh0dXJlLmZyb20uLi4uIG1ldGhvZCBpbiB0aGVpciBjcmVhdGlvbiBwcm9jZXNzLlxuICpcbiAqIFRoaXMgY2FuIGJlIHVzZWQgaW4gc2V2ZXJhbCB3YXlzLCBzdWNoIGFzOlxuICpcbiAqIGBgYGpzXG4gKiB2YXIgdGV4dHVyZSA9IFBJWEkuVmlkZW9CYXNlVGV4dHVyZS5mcm9tVXJsKCdodHRwOi8vbXlkb21haW4uY29tL3ZpZGVvLm1wNCcpO1xuICpcbiAqIHZhciB0ZXh0dXJlID0gUElYSS5WaWRlb0Jhc2VUZXh0dXJlLmZyb21VcmwoeyBzcmM6ICdodHRwOi8vbXlkb21haW4uY29tL3ZpZGVvLm1wNCcsIG1pbWU6ICd2aWRlby9tcDQnIH0pO1xuICpcbiAqIHZhciB0ZXh0dXJlID0gUElYSS5WaWRlb0Jhc2VUZXh0dXJlLmZyb21VcmxzKFsnL3ZpZGVvLndlYm0nLCAnL3ZpZGVvLm1wNCddKTtcbiAqXG4gKiB2YXIgdGV4dHVyZSA9IFBJWEkuVmlkZW9CYXNlVGV4dHVyZS5mcm9tVXJscyhbXG4gKiAgICAgeyBzcmM6ICcvdmlkZW8ud2VibScsIG1pbWU6ICd2aWRlby93ZWJtJyB9LFxuICogICAgIHsgc3JjOiAnL3ZpZGVvLm1wNCcsIG1pbWU6ICd2aWRlby9tcDQnIH1cbiAqIF0pO1xuICogYGBgXG4gKlxuICogU2VlIHRoZSBbXCJkZXVzXCIgZGVtb10oaHR0cDovL3d3dy5nb29kYm95ZGlnaXRhbC5jb20vcGl4aWpzL2V4YW1wbGVzL2RldXMvKS5cbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQmFzZVRleHR1cmVcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gc291cmNlIHtIVE1MVmlkZW9FbGVtZW50fVxuICogQHBhcmFtIFtzY2FsZU1vZGVdIHtudW1iZXJ9IFNlZSB7QGxpbmsgUElYSS5TQ0FMRV9NT0RFU30gZm9yIHBvc3NpYmxlIHZhbHVlc1xuICovXG5mdW5jdGlvbiBWaWRlb0Jhc2VUZXh0dXJlKHNvdXJjZSwgc2NhbGVNb2RlKVxue1xuICAgIGlmICghc291cmNlKVxuICAgIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdObyB2aWRlbyBzb3VyY2UgZWxlbWVudCBzcGVjaWZpZWQuJyk7XG4gICAgfVxuXG4gICAgLy8gaG9vayBpbiBoZXJlIHRvIGNoZWNrIGlmIHZpZGVvIGlzIGFscmVhZHkgYXZhaWxhYmxlLlxuICAgIC8vIEJhc2VUZXh0dXJlIGxvb2tzIGZvciBhIHNvdXJjZS5jb21wbGV0ZSBib29sZWFuLCBwbHVzIHdpZHRoICYgaGVpZ2h0LlxuXG4gICAgaWYgKChzb3VyY2UucmVhZHlTdGF0ZSA9PT0gc291cmNlLkhBVkVfRU5PVUdIX0RBVEEgfHwgc291cmNlLnJlYWR5U3RhdGUgPT09IHNvdXJjZS5IQVZFX0ZVVFVSRV9EQVRBKSAmJiBzb3VyY2Uud2lkdGggJiYgc291cmNlLmhlaWdodClcbiAgICB7XG4gICAgICAgIHNvdXJjZS5jb21wbGV0ZSA9IHRydWU7XG4gICAgfVxuXG4gICAgQmFzZVRleHR1cmUuY2FsbCh0aGlzLCBzb3VyY2UsIHNjYWxlTW9kZSk7XG5cbiAgICAvKipcbiAgICAgKiBTaG91bGQgdGhlIGJhc2UgdGV4dHVyZSBhdXRvbWF0aWNhbGx5IHVwZGF0ZSBpdHNlbGYsIHNldCB0byB0cnVlIGJ5IGRlZmF1bHRcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICogQGRlZmF1bHQgdHJ1ZVxuICAgICAqL1xuICAgIHRoaXMuYXV0b1VwZGF0ZSA9IGZhbHNlO1xuXG4gICAgdGhpcy5fb25VcGRhdGUgPSB0aGlzLl9vblVwZGF0ZS5iaW5kKHRoaXMpO1xuICAgIHRoaXMuX29uQ2FuUGxheSA9IHRoaXMuX29uQ2FuUGxheS5iaW5kKHRoaXMpO1xuXG4gICAgaWYgKCFzb3VyY2UuY29tcGxldGUpXG4gICAge1xuICAgICAgICBzb3VyY2UuYWRkRXZlbnRMaXN0ZW5lcignY2FucGxheScsIHRoaXMuX29uQ2FuUGxheSk7XG4gICAgICAgIHNvdXJjZS5hZGRFdmVudExpc3RlbmVyKCdjYW5wbGF5dGhyb3VnaCcsIHRoaXMuX29uQ2FuUGxheSk7XG5cbiAgICAgICAgLy8gc3RhcnRlZCBwbGF5aW5nLi5cbiAgICAgICAgc291cmNlLmFkZEV2ZW50TGlzdGVuZXIoJ3BsYXknLCB0aGlzLl9vblBsYXlTdGFydC5iaW5kKHRoaXMpKTtcbiAgICAgICAgc291cmNlLmFkZEV2ZW50TGlzdGVuZXIoJ3BhdXNlJywgdGhpcy5fb25QbGF5U3RvcC5iaW5kKHRoaXMpKTtcbiAgICB9XG5cbiAgICB0aGlzLl9fbG9hZGVkID0gZmFsc2U7XG59XG5cblZpZGVvQmFzZVRleHR1cmUucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShCYXNlVGV4dHVyZS5wcm90b3R5cGUpO1xuVmlkZW9CYXNlVGV4dHVyZS5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBWaWRlb0Jhc2VUZXh0dXJlO1xubW9kdWxlLmV4cG9ydHMgPSBWaWRlb0Jhc2VUZXh0dXJlO1xuXG4vKipcbiAqIFRoZSBpbnRlcm5hbCB1cGRhdGUgbG9vcCBvZiB0aGUgdmlkZW8gYmFzZSB0ZXh0dXJlLCBvbmx5IHJ1bnMgd2hlbiBhdXRvVXBkYXRlIGlzIHNldCB0byB0cnVlXG4gKlxuICogQHByaXZhdGVcbiAqL1xuVmlkZW9CYXNlVGV4dHVyZS5wcm90b3R5cGUuX29uVXBkYXRlID0gZnVuY3Rpb24gKClcbntcbiAgICBpZiAodGhpcy5hdXRvVXBkYXRlKVxuICAgIHtcbiAgICAgICAgd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZSh0aGlzLl9vblVwZGF0ZSk7XG4gICAgICAgIHRoaXMudXBkYXRlKCk7XG4gICAgfVxufTtcblxuLyoqXG4gKiBSdW5zIHRoZSB1cGRhdGUgbG9vcCB3aGVuIHRoZSB2aWRlbyBpcyByZWFkeSB0byBwbGF5XG4gKlxuICogQHByaXZhdGVcbiAqL1xuVmlkZW9CYXNlVGV4dHVyZS5wcm90b3R5cGUuX29uUGxheVN0YXJ0ID0gZnVuY3Rpb24gKClcbntcbiAgICBpZiAoIXRoaXMuYXV0b1VwZGF0ZSlcbiAgICB7XG4gICAgICAgIHdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUodGhpcy5fb25VcGRhdGUpO1xuICAgICAgICB0aGlzLmF1dG9VcGRhdGUgPSB0cnVlO1xuICAgIH1cbn07XG5cbi8qKlxuICogRmlyZWQgd2hlbiBhIHBhdXNlIGV2ZW50IGlzIHRyaWdnZXJlZCwgc3RvcHMgdGhlIHVwZGF0ZSBsb29wXG4gKlxuICogQHByaXZhdGVcbiAqL1xuVmlkZW9CYXNlVGV4dHVyZS5wcm90b3R5cGUuX29uUGxheVN0b3AgPSBmdW5jdGlvbiAoKVxue1xuICAgIHRoaXMuYXV0b1VwZGF0ZSA9IGZhbHNlO1xufTtcblxuLyoqXG4gKiBGaXJlZCB3aGVuIHRoZSB2aWRlbyBpcyBsb2FkZWQgYW5kIHJlYWR5IHRvIHBsYXlcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5WaWRlb0Jhc2VUZXh0dXJlLnByb3RvdHlwZS5fb25DYW5QbGF5ID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLmhhc0xvYWRlZCA9IHRydWU7XG5cbiAgICBpZiAodGhpcy5zb3VyY2UpXG4gICAge1xuICAgICAgICB0aGlzLnNvdXJjZS5yZW1vdmVFdmVudExpc3RlbmVyKCdjYW5wbGF5JywgdGhpcy5fb25DYW5QbGF5KTtcbiAgICAgICAgdGhpcy5zb3VyY2UucmVtb3ZlRXZlbnRMaXN0ZW5lcignY2FucGxheXRocm91Z2gnLCB0aGlzLl9vbkNhblBsYXkpO1xuXG4gICAgICAgIHRoaXMud2lkdGggPSB0aGlzLnNvdXJjZS52aWRlb1dpZHRoO1xuICAgICAgICB0aGlzLmhlaWdodCA9IHRoaXMuc291cmNlLnZpZGVvSGVpZ2h0O1xuXG4gICAgICAgIHRoaXMuc291cmNlLnBsYXkoKTtcblxuICAgICAgICAvLyBwcmV2ZW50IG11bHRpcGxlIGxvYWRlZCBkaXNwYXRjaGVzLi5cbiAgICAgICAgaWYgKCF0aGlzLl9fbG9hZGVkKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLl9fbG9hZGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMuZW1pdCgnbG9hZGVkJywgdGhpcyk7XG4gICAgICAgIH1cbiAgICB9XG59O1xuXG4vKipcbiAqIERlc3Ryb3lzIHRoaXMgdGV4dHVyZVxuICpcbiAqL1xuVmlkZW9CYXNlVGV4dHVyZS5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uICgpXG57XG4gICAgaWYgKHRoaXMuc291cmNlICYmIHRoaXMuc291cmNlLl9waXhpSWQpXG4gICAge1xuICAgICAgICBkZWxldGUgdXRpbHMuQmFzZVRleHR1cmVDYWNoZVsgdGhpcy5zb3VyY2UuX3BpeGlJZCBdO1xuICAgICAgICBkZWxldGUgdGhpcy5zb3VyY2UuX3BpeGlJZDtcbiAgICB9XG5cbiAgICBCYXNlVGV4dHVyZS5wcm90b3R5cGUuZGVzdHJveS5jYWxsKHRoaXMpO1xufTtcblxuLyoqXG4gKiBNaW1pYyBQaXhpIEJhc2VUZXh0dXJlLmZyb20uLi4uIG1ldGhvZC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAcGFyYW0gdmlkZW8ge0hUTUxWaWRlb0VsZW1lbnR9XG4gKiBAcGFyYW0gc2NhbGVNb2RlIHtudW1iZXJ9IFNlZSB7QGxpbmsgUElYSS5TQ0FMRV9NT0RFU30gZm9yIHBvc3NpYmxlIHZhbHVlc1xuICogQHJldHVybiB7UElYSS5WaWRlb0Jhc2VUZXh0dXJlfVxuICovXG5WaWRlb0Jhc2VUZXh0dXJlLmZyb21WaWRlbyA9IGZ1bmN0aW9uICh2aWRlbywgc2NhbGVNb2RlKVxue1xuICAgIGlmICghdmlkZW8uX3BpeGlJZClcbiAgICB7XG4gICAgICAgIHZpZGVvLl9waXhpSWQgPSAndmlkZW9fJyArIHV0aWxzLnVpZCgpO1xuICAgIH1cblxuICAgIHZhciBiYXNlVGV4dHVyZSA9IHV0aWxzLkJhc2VUZXh0dXJlQ2FjaGVbdmlkZW8uX3BpeGlJZF07XG5cbiAgICBpZiAoIWJhc2VUZXh0dXJlKVxuICAgIHtcbiAgICAgICAgYmFzZVRleHR1cmUgPSBuZXcgVmlkZW9CYXNlVGV4dHVyZSh2aWRlbywgc2NhbGVNb2RlKTtcbiAgICAgICAgdXRpbHMuQmFzZVRleHR1cmVDYWNoZVsgdmlkZW8uX3BpeGlJZCBdID0gYmFzZVRleHR1cmU7XG4gICAgfVxuXG4gICAgcmV0dXJuIGJhc2VUZXh0dXJlO1xufTtcblxuLyoqXG4gKiBIZWxwZXIgZnVuY3Rpb24gdGhhdCBjcmVhdGVzIGEgbmV3IEJhc2VUZXh0dXJlIGJhc2VkIG9uIHRoZSBnaXZlbiB2aWRlbyBlbGVtZW50LlxuICogVGhpcyBCYXNlVGV4dHVyZSBjYW4gdGhlbiBiZSB1c2VkIHRvIGNyZWF0ZSBhIHRleHR1cmVcbiAqXG4gKiBAc3RhdGljXG4gKiBAcGFyYW0gdmlkZW9TcmMge3N0cmluZ3xvYmplY3R8c3RyaW5nW118b2JqZWN0W119IFRoZSBVUkwocykgZm9yIHRoZSB2aWRlby5cbiAqIEBwYXJhbSBbdmlkZW9TcmMuc3JjXSB7c3RyaW5nfSBPbmUgb2YgdGhlIHNvdXJjZSB1cmxzIGZvciB0aGUgdmlkZW9cbiAqIEBwYXJhbSBbdmlkZW9TcmMubWltZV0ge3N0cmluZ30gVGhlIG1pbWV0eXBlIG9mIHRoZSB2aWRlbyAoZS5nLiAndmlkZW8vbXA0JykuIElmIG5vdCBzcGVjaWZpZWRcbiAqICB0aGUgdXJsJ3MgZXh0ZW5zaW9uIHdpbGwgYmUgdXNlZCBhcyB0aGUgc2Vjb25kIHBhcnQgb2YgdGhlIG1pbWUgdHlwZS5cbiAqIEBwYXJhbSBzY2FsZU1vZGUge251bWJlcn0gU2VlIHtAbGluayBQSVhJLlNDQUxFX01PREVTfSBmb3IgcG9zc2libGUgdmFsdWVzXG4gKiBAcmV0dXJuIHtQSVhJLlZpZGVvQmFzZVRleHR1cmV9XG4gKi9cblZpZGVvQmFzZVRleHR1cmUuZnJvbVVybCA9IGZ1bmN0aW9uICh2aWRlb1NyYywgc2NhbGVNb2RlKVxue1xuICAgIHZhciB2aWRlbyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3ZpZGVvJyk7XG5cbiAgICAvLyBhcnJheSBvZiBvYmplY3RzIG9yIHN0cmluZ3NcbiAgICBpZiAoQXJyYXkuaXNBcnJheSh2aWRlb1NyYykpXG4gICAge1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHZpZGVvU3JjLmxlbmd0aDsgKytpKVxuICAgICAgICB7XG4gICAgICAgICAgICB2aWRlby5hcHBlbmRDaGlsZChjcmVhdGVTb3VyY2UodmlkZW9TcmNbaV0uc3JjIHx8IHZpZGVvU3JjW2ldLCB2aWRlb1NyY1tpXS5taW1lKSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLy8gc2luZ2xlIG9iamVjdCBvciBzdHJpbmdcbiAgICBlbHNlXG4gICAge1xuICAgICAgICB2aWRlby5hcHBlbmRDaGlsZChjcmVhdGVTb3VyY2UodmlkZW9TcmMuc3JjIHx8IHZpZGVvU3JjLCB2aWRlb1NyYy5taW1lKSk7XG4gICAgfVxuXG4gICAgdmlkZW8ubG9hZCgpO1xuICAgIHZpZGVvLnBsYXkoKTtcblxuICAgIHJldHVybiBWaWRlb0Jhc2VUZXh0dXJlLmZyb21WaWRlbyh2aWRlbywgc2NhbGVNb2RlKTtcbn07XG5cblZpZGVvQmFzZVRleHR1cmUuZnJvbVVybHMgPSBWaWRlb0Jhc2VUZXh0dXJlLmZyb21Vcmw7XG5cbmZ1bmN0aW9uIGNyZWF0ZVNvdXJjZShwYXRoLCB0eXBlKVxue1xuICAgIGlmICghdHlwZSlcbiAgICB7XG4gICAgICAgIHR5cGUgPSAndmlkZW8vJyArIHBhdGguc3Vic3RyKHBhdGgubGFzdEluZGV4T2YoJy4nKSArIDEpO1xuICAgIH1cblxuICAgIHZhciBzb3VyY2UgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzb3VyY2UnKTtcblxuICAgIHNvdXJjZS5zcmMgPSBwYXRoO1xuICAgIHNvdXJjZS50eXBlID0gdHlwZTtcblxuICAgIHJldHVybiBzb3VyY2U7XG59XG4iLCJ2YXIgQ09OU1QgPSByZXF1aXJlKCcuLi9jb25zdCcpLFxuICAgIEV2ZW50RW1pdHRlciA9IHJlcXVpcmUoJ2V2ZW50ZW1pdHRlcjMnKSxcbiAgICAvLyBJbnRlcm5hbCBldmVudCB1c2VkIGJ5IGNvbXBvc2VkIGVtaXR0ZXJcbiAgICBUSUNLID0gJ3RpY2snO1xuXG4vKipcbiAqIEEgVGlja2VyIGNsYXNzIHRoYXQgcnVucyBhbiB1cGRhdGUgbG9vcCB0aGF0IG90aGVyIG9iamVjdHMgbGlzdGVuIHRvLlxuICogVGhpcyBjbGFzcyBpcyBjb21wb3NlZCBhcm91bmQgYW4gRXZlbnRFbWl0dGVyIG9iamVjdCB0byBhZGQgbGlzdGVuZXJzXG4gKiBtZWFudCBmb3IgZXhlY3V0aW9uIG9uIHRoZSBuZXh0IHJlcXVlc3RlZCBhbmltYXRpb24gZnJhbWUuXG4gKiBBbmltYXRpb24gZnJhbWVzIGFyZSByZXF1ZXN0ZWQgb25seSB3aGVuIG5lY2Vzc2FyeSxcbiAqIGUuZy4gV2hlbiB0aGUgdGlja2VyIGlzIHN0YXJ0ZWQgYW5kIHRoZSBlbWl0dGVyIGhhcyBsaXN0ZW5lcnMuXG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSS50aWNrZXJcbiAqL1xuZnVuY3Rpb24gVGlja2VyKClcbntcbiAgICB2YXIgX3RoaXMgPSB0aGlzO1xuXG4gICAgLyoqXG4gICAgICogSW50ZXJuYWwgdGljayBtZXRob2QgYm91bmQgdG8gdGlja2VyIGluc3RhbmNlLlxuICAgICAqIFRoaXMgaXMgYmVjYXVzZSBpbiBlYXJseSAyMDE1LCBGdW5jdGlvbi5iaW5kXG4gICAgICogaXMgc3RpbGwgNjAlIHNsb3dlciBpbiBoaWdoIHBlcmZvcm1hbmNlIHNjZW5hcmlvcy5cbiAgICAgKiBBbHNvIHNlcGFyYXRpbmcgZnJhbWUgcmVxdWVzdHMgZnJvbSB1cGRhdGUgbWV0aG9kXG4gICAgICogc28gbGlzdGVuZXJzIG1heSBiZSBjYWxsZWQgYXQgYW55IHRpbWUgYW5kIHdpdGhcbiAgICAgKiBhbnkgYW5pbWF0aW9uIEFQSSwganVzdCBpbnZva2UgdGlja2VyLnVwZGF0ZSh0aW1lKS5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fdGljayA9IGZ1bmN0aW9uIF90aWNrKHRpbWUpIHtcblxuICAgICAgICBfdGhpcy5fcmVxdWVzdElkID0gbnVsbDtcblxuICAgICAgICBpZiAoX3RoaXMuc3RhcnRlZClcbiAgICAgICAge1xuICAgICAgICAgICAgLy8gSW52b2tlIGxpc3RlbmVycyBub3dcbiAgICAgICAgICAgIF90aGlzLnVwZGF0ZSh0aW1lKTtcbiAgICAgICAgICAgIC8vIExpc3RlbmVyIHNpZGUgZWZmZWN0cyBtYXkgaGF2ZSBtb2RpZmllZCB0aWNrZXIgc3RhdGUuXG4gICAgICAgICAgICBpZiAoX3RoaXMuc3RhcnRlZCAmJiBfdGhpcy5fcmVxdWVzdElkID09PSBudWxsICYmIF90aGlzLl9lbWl0dGVyLmxpc3RlbmVycyhUSUNLLCB0cnVlKSlcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBfdGhpcy5fcmVxdWVzdElkID0gcmVxdWVzdEFuaW1hdGlvbkZyYW1lKF90aGlzLl90aWNrKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH07XG5cbiAgICAvKipcbiAgICAgKiBJbnRlcm5hbCBlbWl0dGVyIHVzZWQgdG8gZmlyZSAndGljaycgZXZlbnRcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX2VtaXR0ZXIgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgICAvKipcbiAgICAgKiBJbnRlcm5hbCBjdXJyZW50IGZyYW1lIHJlcXVlc3QgSURcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX3JlcXVlc3RJZCA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBJbnRlcm5hbCB2YWx1ZSBtYW5hZ2VkIGJ5IG1pbkZQUyBwcm9wZXJ0eSBzZXR0ZXIgYW5kIGdldHRlci5cbiAgICAgKiBUaGlzIGlzIHRoZSBtYXhpbXVtIGFsbG93ZWQgbWlsbGlzZWNvbmRzIGJldHdlZW4gdXBkYXRlcy5cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX21heEVsYXBzZWRNUyA9IDEwMDtcblxuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgb3Igbm90IHRoaXMgdGlja2VyIHNob3VsZCBpbnZva2UgdGhlIG1ldGhvZFxuICAgICAqIHtAbGluayBQSVhJLnRpY2tlci5UaWNrZXIjc3RhcnR9IGF1dG9tYXRpY2FsbHlcbiAgICAgKiB3aGVuIGEgbGlzdGVuZXIgaXMgYWRkZWQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqIEBkZWZhdWx0IGZhbHNlXG4gICAgICovXG4gICAgdGhpcy5hdXRvU3RhcnQgPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIFNjYWxhciB0aW1lIHZhbHVlIGZyb20gbGFzdCBmcmFtZSB0byB0aGlzIGZyYW1lLlxuICAgICAqIFRoaXMgdmFsdWUgaXMgY2FwcGVkIGJ5IHNldHRpbmcge0BsaW5rIFBJWEkudGlja2VyLlRpY2tlciNtaW5GUFN9XG4gICAgICogYW5kIGlzIHNjYWxlZCB3aXRoIHtAbGluayBQSVhJLnRpY2tlci5UaWNrZXIjc3BlZWR9LlxuICAgICAqICoqTm90ZToqKiBUaGUgY2FwIG1heSBiZSBleGNlZWRlZCBieSBzY2FsaW5nLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDFcbiAgICAgKi9cbiAgICB0aGlzLmRlbHRhVGltZSA9IDE7XG5cbiAgICAvKipcbiAgICAgKiBUaW1lIGVsYXBzZWQgaW4gbWlsbGlzZWNvbmRzIGZyb20gbGFzdCBmcmFtZSB0byB0aGlzIGZyYW1lLlxuICAgICAqIE9wcG9zZWQgdG8gd2hhdCB0aGUgc2NhbGFyIHtAbGluayBQSVhJLnRpY2tlci5UaWNrZXIjZGVsdGFUaW1lfVxuICAgICAqIGlzIGJhc2VkLCB0aGlzIHZhbHVlIGlzIG5laXRoZXIgY2FwcGVkIG5vciBzY2FsZWQuXG4gICAgICogSWYgdGhlIHBsYXRmb3JtIHN1cHBvcnRzIERPTUhpZ2hSZXNUaW1lU3RhbXAsXG4gICAgICogdGhpcyB2YWx1ZSB3aWxsIGhhdmUgYSBwcmVjaXNpb24gb2YgMSDCtXMuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtET01IaWdoUmVzVGltZVN0YW1wfG51bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAxIC8gVEFSR0VUX0ZQTVNcbiAgICAgKi9cbiAgICB0aGlzLmVsYXBzZWRNUyA9IDEgLyBDT05TVC5UQVJHRVRfRlBNUzsgLy8gZGVmYXVsdCB0byB0YXJnZXQgZnJhbWUgdGltZVxuXG4gICAgLyoqXG4gICAgICogVGhlIGxhc3QgdGltZSB7QGxpbmsgUElYSS50aWNrZXIuVGlja2VyI3VwZGF0ZX0gd2FzIGludm9rZWQuXG4gICAgICogVGhpcyB2YWx1ZSBpcyBhbHNvIHJlc2V0IGludGVybmFsbHkgb3V0c2lkZSBvZiBpbnZva2luZ1xuICAgICAqIHVwZGF0ZSwgYnV0IG9ubHkgd2hlbiBhIG5ldyBhbmltYXRpb24gZnJhbWUgaXMgcmVxdWVzdGVkLlxuICAgICAqIElmIHRoZSBwbGF0Zm9ybSBzdXBwb3J0cyBET01IaWdoUmVzVGltZVN0YW1wLFxuICAgICAqIHRoaXMgdmFsdWUgd2lsbCBoYXZlIGEgcHJlY2lzaW9uIG9mIDEgwrVzLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7RE9NSGlnaFJlc1RpbWVTdGFtcHxudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMFxuICAgICAqL1xuICAgIHRoaXMubGFzdFRpbWUgPSAwO1xuXG4gICAgLyoqXG4gICAgICogRmFjdG9yIG9mIGN1cnJlbnQge0BsaW5rIFBJWEkudGlja2VyLlRpY2tlciNkZWx0YVRpbWV9LlxuICAgICAqIEBleGFtcGxlXG4gICAgICogLy8gU2NhbGVzIHRpY2tlci5kZWx0YVRpbWUgdG8gd2hhdCB3b3VsZCBiZVxuICAgICAqIC8vIHRoZSBlcXVpdmFsZW50IG9mIGFwcHJveGltYXRlbHkgMTIwIEZQU1xuICAgICAqIHRpY2tlci5zcGVlZCA9IDI7XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMVxuICAgICAqL1xuICAgIHRoaXMuc3BlZWQgPSAxO1xuXG4gICAgLyoqXG4gICAgICogV2hldGhlciBvciBub3QgdGhpcyB0aWNrZXIgaGFzIGJlZW4gc3RhcnRlZC5cbiAgICAgKiBgdHJ1ZWAgaWYge0BsaW5rIFBJWEkudGlja2VyLlRpY2tlciNzdGFydH0gaGFzIGJlZW4gY2FsbGVkLlxuICAgICAqIGBmYWxzZWAgaWYge0BsaW5rIFBJWEkudGlja2VyLlRpY2tlciNzdG9wfSBoYXMgYmVlbiBjYWxsZWQuXG4gICAgICogV2hpbGUgYGZhbHNlYCwgdGhpcyB2YWx1ZSBtYXkgY2hhbmdlIHRvIGB0cnVlYCBpbiB0aGVcbiAgICAgKiBldmVudCBvZiB7QGxpbmsgUElYSS50aWNrZXIuVGlja2VyI2F1dG9TdGFydH0gYmVpbmcgYHRydWVgXG4gICAgICogYW5kIGEgbGlzdGVuZXIgaXMgYWRkZWQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqIEBkZWZhdWx0IGZhbHNlXG4gICAgICovXG4gICAgdGhpcy5zdGFydGVkID0gZmFsc2U7XG59XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKFRpY2tlci5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBUaGUgZnJhbWVzIHBlciBzZWNvbmQgYXQgd2hpY2ggdGhpcyB0aWNrZXIgaXMgcnVubmluZy5cbiAgICAgKiBUaGUgZGVmYXVsdCBpcyBhcHByb3hpbWF0ZWx5IDYwIGluIG1vc3QgbW9kZXJuIGJyb3dzZXJzLlxuICAgICAqICoqTm90ZToqKiBUaGlzIGRvZXMgbm90IGZhY3RvciBpbiB0aGUgdmFsdWUgb2ZcbiAgICAgKiB7QGxpbmsgUElYSS50aWNrZXIuVGlja2VyI3NwZWVkfSwgd2hpY2ggaXMgc3BlY2lmaWNcbiAgICAgKiB0byBzY2FsaW5nIHtAbGluayBQSVhJLnRpY2tlci5UaWNrZXIjZGVsdGFUaW1lfS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXJcbiAgICAgKiBAbWVtYmVyb2YgUElYSS50aWNrZXIuVGlja2VyI1xuICAgICAqIEByZWFkb25seVxuICAgICAqL1xuICAgIEZQUzoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIDEwMDAgLyB0aGlzLmVsYXBzZWRNUztcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBNYW5hZ2VzIHRoZSBtYXhpbXVtIGFtb3VudCBvZiBtaWxsaXNlY29uZHMgYWxsb3dlZCB0b1xuICAgICAqIGVsYXBzZSBiZXR3ZWVuIGludm9raW5nIHtAbGluayBQSVhJLnRpY2tlci5UaWNrZXIjdXBkYXRlfS5cbiAgICAgKiBUaGlzIHZhbHVlIGlzIHVzZWQgdG8gY2FwIHtAbGluayBQSVhJLnRpY2tlci5UaWNrZXIjZGVsdGFUaW1lfSxcbiAgICAgKiBidXQgZG9lcyBub3QgZWZmZWN0IHRoZSBtZWFzdXJlZCB2YWx1ZSBvZiB7QGxpbmsgUElYSS50aWNrZXIuVGlja2VyI0ZQU30uXG4gICAgICogV2hlbiBzZXR0aW5nIHRoaXMgcHJvcGVydHkgaXQgaXMgY2xhbXBlZCB0byBhIHZhbHVlIGJldHdlZW5cbiAgICAgKiBgMGAgYW5kIGBQSVhJLlRBUkdFVF9GUE1TICogMTAwMGAuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyXG4gICAgICogQG1lbWJlcm9mIFBJWEkudGlja2VyLlRpY2tlciNcbiAgICAgKiBAZGVmYXVsdCAxMFxuICAgICAqL1xuICAgIG1pbkZQUzoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIDEwMDAgLyB0aGlzLl9tYXhFbGFwc2VkTVM7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24oZnBzKVxuICAgICAgICB7XG4gICAgICAgICAgICAvLyBDbGFtcDogMCB0byBUQVJHRVRfRlBNU1xuICAgICAgICAgICAgdmFyIG1pbkZQTVMgPSBNYXRoLm1pbihNYXRoLm1heCgwLCBmcHMpIC8gMTAwMCwgQ09OU1QuVEFSR0VUX0ZQTVMpO1xuICAgICAgICAgICAgdGhpcy5fbWF4RWxhcHNlZE1TID0gMSAvIG1pbkZQTVM7XG4gICAgICAgIH1cbiAgICB9XG59KTtcblxuLyoqXG4gKiBDb25kaXRpb25hbGx5IHJlcXVlc3RzIGEgbmV3IGFuaW1hdGlvbiBmcmFtZS5cbiAqIElmIGEgZnJhbWUgaGFzIG5vdCBhbHJlYWR5IGJlZW4gcmVxdWVzdGVkLCBhbmQgaWYgdGhlIGludGVybmFsXG4gKiBlbWl0dGVyIGhhcyBsaXN0ZW5lcnMsIGEgbmV3IGZyYW1lIGlzIHJlcXVlc3RlZC5cbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5UaWNrZXIucHJvdG90eXBlLl9yZXF1ZXN0SWZOZWVkZWQgPSBmdW5jdGlvbiBfcmVxdWVzdElmTmVlZGVkKClcbntcbiAgICBpZiAodGhpcy5fcmVxdWVzdElkID09PSBudWxsICYmIHRoaXMuX2VtaXR0ZXIubGlzdGVuZXJzKFRJQ0ssIHRydWUpKVxuICAgIHtcbiAgICAgICAgLy8gZW5zdXJlIGNhbGxiYWNrcyBnZXQgY29ycmVjdCBkZWx0YVxuICAgICAgICB0aGlzLmxhc3RUaW1lID0gcGVyZm9ybWFuY2Uubm93KCk7XG4gICAgICAgIHRoaXMuX3JlcXVlc3RJZCA9IHJlcXVlc3RBbmltYXRpb25GcmFtZSh0aGlzLl90aWNrKTtcbiAgICB9XG59O1xuXG4vKipcbiAqIENvbmRpdGlvbmFsbHkgY2FuY2VscyBhIHBlbmRpbmcgYW5pbWF0aW9uIGZyYW1lLlxuICpcbiAqIEBwcml2YXRlXG4gKi9cblRpY2tlci5wcm90b3R5cGUuX2NhbmNlbElmTmVlZGVkID0gZnVuY3Rpb24gX2NhbmNlbElmTmVlZGVkKClcbntcbiAgICBpZiAodGhpcy5fcmVxdWVzdElkICE9PSBudWxsKVxuICAgIHtcbiAgICAgICAgY2FuY2VsQW5pbWF0aW9uRnJhbWUodGhpcy5fcmVxdWVzdElkKTtcbiAgICAgICAgdGhpcy5fcmVxdWVzdElkID0gbnVsbDtcbiAgICB9XG59O1xuXG4vKipcbiAqIENvbmRpdGlvbmFsbHkgcmVxdWVzdHMgYSBuZXcgYW5pbWF0aW9uIGZyYW1lLlxuICogSWYgdGhlIHRpY2tlciBoYXMgYmVlbiBzdGFydGVkIGl0IGNoZWNrcyBpZiBhIGZyYW1lIGhhcyBub3QgYWxyZWFkeVxuICogYmVlbiByZXF1ZXN0ZWQsIGFuZCBpZiB0aGUgaW50ZXJuYWwgZW1pdHRlciBoYXMgbGlzdGVuZXJzLiBJZiB0aGVzZVxuICogY29uZGl0aW9ucyBhcmUgbWV0LCBhIG5ldyBmcmFtZSBpcyByZXF1ZXN0ZWQuIElmIHRoZSB0aWNrZXIgaGFzIG5vdFxuICogYmVlbiBzdGFydGVkLCBidXQgYXV0b1N0YXJ0IGlzIGB0cnVlYCwgdGhlbiB0aGUgdGlja2VyIHN0YXJ0cyBub3csXG4gKiBhbmQgY29udGludWVzIHdpdGggdGhlIHByZXZpb3VzIGNvbmRpdGlvbnMgdG8gcmVxdWVzdCBhIG5ldyBmcmFtZS5cbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5UaWNrZXIucHJvdG90eXBlLl9zdGFydElmUG9zc2libGUgPSBmdW5jdGlvbiBfc3RhcnRJZlBvc3NpYmxlKClcbntcbiAgICBpZiAodGhpcy5zdGFydGVkKVxuICAgIHtcbiAgICAgICAgdGhpcy5fcmVxdWVzdElmTmVlZGVkKCk7XG4gICAgfVxuICAgIGVsc2UgaWYgKHRoaXMuYXV0b1N0YXJ0KVxuICAgIHtcbiAgICAgICAgdGhpcy5zdGFydCgpO1xuICAgIH1cbn07XG5cbi8qKlxuICogQ2FsbHMge0BsaW5rIG1vZHVsZTpldmVudGVtaXR0ZXIzLkV2ZW50RW1pdHRlciNvbn0gaW50ZXJuYWxseSBmb3IgdGhlXG4gKiBpbnRlcm5hbCAndGljaycgZXZlbnQuIEl0IGNoZWNrcyBpZiB0aGUgZW1pdHRlciBoYXMgbGlzdGVuZXJzLFxuICogYW5kIGlmIHNvIGl0IHJlcXVlc3RzIGEgbmV3IGFuaW1hdGlvbiBmcmFtZSBhdCB0aGlzIHBvaW50LlxuICpcbiAqIEBwYXJhbSBmbiB7RnVuY3Rpb259IFRoZSBsaXN0ZW5lciBmdW5jdGlvbiB0byBiZSBhZGRlZCBmb3IgdXBkYXRlc1xuICogQHBhcmFtIFtjb250ZXh0XSB7RnVuY3Rpb259IFRoZSBsaXN0ZW5lciBjb250ZXh0XG4gKiBAcmV0dXJucyB7UElYSS50aWNrZXIuVGlja2VyfSB0aGlzXG4gKi9cblRpY2tlci5wcm90b3R5cGUuYWRkID0gZnVuY3Rpb24gYWRkKGZuLCBjb250ZXh0KVxue1xuICAgIHRoaXMuX2VtaXR0ZXIub24oVElDSywgZm4sIGNvbnRleHQpO1xuXG4gICAgdGhpcy5fc3RhcnRJZlBvc3NpYmxlKCk7XG5cbiAgICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogQ2FsbHMge0BsaW5rIG1vZHVsZTpldmVudGVtaXR0ZXIzLkV2ZW50RW1pdHRlciNvbmNlfSBpbnRlcm5hbGx5IGZvciB0aGVcbiAqIGludGVybmFsICd0aWNrJyBldmVudC4gSXQgY2hlY2tzIGlmIHRoZSBlbWl0dGVyIGhhcyBsaXN0ZW5lcnMsXG4gKiBhbmQgaWYgc28gaXQgcmVxdWVzdHMgYSBuZXcgYW5pbWF0aW9uIGZyYW1lIGF0IHRoaXMgcG9pbnQuXG4gKlxuICogQHBhcmFtIGZuIHtGdW5jdGlvbn0gVGhlIGxpc3RlbmVyIGZ1bmN0aW9uIHRvIGJlIGFkZGVkIGZvciBvbmUgdXBkYXRlXG4gKiBAcGFyYW0gW2NvbnRleHRdIHtGdW5jdGlvbn0gVGhlIGxpc3RlbmVyIGNvbnRleHRcbiAqIEByZXR1cm5zIHtQSVhJLnRpY2tlci5UaWNrZXJ9IHRoaXNcbiAqL1xuVGlja2VyLnByb3RvdHlwZS5hZGRPbmNlID0gZnVuY3Rpb24gYWRkT25jZShmbiwgY29udGV4dClcbntcbiAgICB0aGlzLl9lbWl0dGVyLm9uY2UoVElDSywgZm4sIGNvbnRleHQpO1xuXG4gICAgdGhpcy5fc3RhcnRJZlBvc3NpYmxlKCk7XG5cbiAgICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogQ2FsbHMge0BsaW5rIG1vZHVsZTpldmVudGVtaXR0ZXIzLkV2ZW50RW1pdHRlciNvZmZ9IGludGVybmFsbHkgZm9yICd0aWNrJyBldmVudC5cbiAqIEl0IGNoZWNrcyBpZiB0aGUgZW1pdHRlciBoYXMgbGlzdGVuZXJzIGZvciAndGljaycgZXZlbnQuXG4gKiBJZiBpdCBkb2VzLCB0aGVuIGl0IGNhbmNlbHMgdGhlIGFuaW1hdGlvbiBmcmFtZS5cbiAqXG4gKiBAcGFyYW0gW2ZuXSB7RnVuY3Rpb259IFRoZSBsaXN0ZW5lciBmdW5jdGlvbiB0byBiZSByZW1vdmVkXG4gKiBAcGFyYW0gW2NvbnRleHRdIHtGdW5jdGlvbn0gVGhlIGxpc3RlbmVyIGNvbnRleHQgdG8gYmUgcmVtb3ZlZFxuICogQHJldHVybnMge1BJWEkudGlja2VyLlRpY2tlcn0gdGhpc1xuICovXG5UaWNrZXIucHJvdG90eXBlLnJlbW92ZSA9IGZ1bmN0aW9uIHJlbW92ZShmbiwgY29udGV4dClcbntcbiAgICB0aGlzLl9lbWl0dGVyLm9mZihUSUNLLCBmbiwgY29udGV4dCk7XG5cbiAgICBpZiAoIXRoaXMuX2VtaXR0ZXIubGlzdGVuZXJzKFRJQ0ssIHRydWUpKVxuICAgIHtcbiAgICAgICAgdGhpcy5fY2FuY2VsSWZOZWVkZWQoKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogU3RhcnRzIHRoZSB0aWNrZXIuIElmIHRoZSB0aWNrZXIgaGFzIGxpc3RlbmVyc1xuICogYSBuZXcgYW5pbWF0aW9uIGZyYW1lIGlzIHJlcXVlc3RlZCBhdCB0aGlzIHBvaW50LlxuICovXG5UaWNrZXIucHJvdG90eXBlLnN0YXJ0ID0gZnVuY3Rpb24gc3RhcnQoKVxue1xuICAgIGlmICghdGhpcy5zdGFydGVkKVxuICAgIHtcbiAgICAgICAgdGhpcy5zdGFydGVkID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5fcmVxdWVzdElmTmVlZGVkKCk7XG4gICAgfVxufTtcblxuLyoqXG4gKiBTdG9wcyB0aGUgdGlja2VyLiBJZiB0aGUgdGlja2VyIGhhcyByZXF1ZXN0ZWRcbiAqIGFuIGFuaW1hdGlvbiBmcmFtZSBpdCBpcyBjYW5jZWxlZCBhdCB0aGlzIHBvaW50LlxuICovXG5UaWNrZXIucHJvdG90eXBlLnN0b3AgPSBmdW5jdGlvbiBzdG9wKClcbntcbiAgICBpZiAodGhpcy5zdGFydGVkKVxuICAgIHtcbiAgICAgICAgdGhpcy5zdGFydGVkID0gZmFsc2U7XG4gICAgICAgIHRoaXMuX2NhbmNlbElmTmVlZGVkKCk7XG4gICAgfVxufTtcblxuLyoqXG4gKiBUcmlnZ2VycyBhbiB1cGRhdGUuIEFuIHVwZGF0ZSBlbnRhaWxzIHNldHRpbmcgdGhlXG4gKiBjdXJyZW50IHtAbGluayBQSVhJLnRpY2tlci5UaWNrZXIjZWxhcHNlZE1TfSxcbiAqIHRoZSBjdXJyZW50IHtAbGluayBQSVhJLnRpY2tlci5UaWNrZXIjZGVsdGFUaW1lfSxcbiAqIGludm9raW5nIGFsbCBsaXN0ZW5lcnMgd2l0aCBjdXJyZW50IGRlbHRhVGltZSxcbiAqIGFuZCB0aGVuIGZpbmFsbHkgc2V0dGluZyB7QGxpbmsgUElYSS50aWNrZXIuVGlja2VyI2xhc3RUaW1lfVxuICogd2l0aCB0aGUgdmFsdWUgb2YgY3VycmVudFRpbWUgdGhhdCB3YXMgcHJvdmlkZWQuXG4gKiBUaGlzIG1ldGhvZCB3aWxsIGJlIGNhbGxlZCBhdXRvbWF0aWNhbGx5IGJ5IGFuaW1hdGlvblxuICogZnJhbWUgY2FsbGJhY2tzIGlmIHRoZSB0aWNrZXIgaW5zdGFuY2UgaGFzIGJlZW4gc3RhcnRlZFxuICogYW5kIGxpc3RlbmVycyBhcmUgYWRkZWQuXG4gKlxuICogQHBhcmFtIFtjdXJyZW50VGltZT1wZXJmb3JtYW5jZS5ub3coKV0ge0RPTUhpZ2hSZXNUaW1lU3RhbXB8bnVtYmVyfSB0aGUgY3VycmVudCB0aW1lIG9mIGV4ZWN1dGlvblxuICovXG5UaWNrZXIucHJvdG90eXBlLnVwZGF0ZSA9IGZ1bmN0aW9uIHVwZGF0ZShjdXJyZW50VGltZSlcbntcbiAgICB2YXIgZWxhcHNlZE1TO1xuXG4gICAgLy8gQWxsb3cgY2FsbGluZyB1cGRhdGUgZGlyZWN0bHkgd2l0aCBkZWZhdWx0IGN1cnJlbnRUaW1lLlxuICAgIGN1cnJlbnRUaW1lID0gY3VycmVudFRpbWUgfHwgcGVyZm9ybWFuY2Uubm93KCk7XG4gICAgLy8gU2F2ZSB1bmNhcHBlZCBlbGFwc2VkTVMgZm9yIG1lYXN1cmVtZW50XG4gICAgZWxhcHNlZE1TID0gdGhpcy5lbGFwc2VkTVMgPSBjdXJyZW50VGltZSAtIHRoaXMubGFzdFRpbWU7XG5cbiAgICAvLyBjYXAgdGhlIG1pbGxpc2Vjb25kcyBlbGFwc2VkIHVzZWQgZm9yIGRlbHRhVGltZVxuICAgIGlmIChlbGFwc2VkTVMgPiB0aGlzLl9tYXhFbGFwc2VkTVMpXG4gICAge1xuICAgICAgICBlbGFwc2VkTVMgPSB0aGlzLl9tYXhFbGFwc2VkTVM7XG4gICAgfVxuXG4gICAgdGhpcy5kZWx0YVRpbWUgPSBlbGFwc2VkTVMgKiBDT05TVC5UQVJHRVRfRlBNUyAqIHRoaXMuc3BlZWQ7XG5cbiAgICAvLyBJbnZva2UgbGlzdGVuZXJzIGFkZGVkIHRvIGludGVybmFsIGVtaXR0ZXJcbiAgICB0aGlzLl9lbWl0dGVyLmVtaXQoVElDSywgdGhpcy5kZWx0YVRpbWUpO1xuXG4gICAgdGhpcy5sYXN0VGltZSA9IGN1cnJlbnRUaW1lO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBUaWNrZXI7XG4iLCJ2YXIgVGlja2VyID0gcmVxdWlyZSgnLi9UaWNrZXInKTtcblxuLyoqXG4gKiBUaGUgc2hhcmVkIHRpY2tlciBpbnN0YW5jZSB1c2VkIGJ5IHtAbGluayBQSVhJLmV4dHJhcy5Nb3ZpZUNsaXB9LlxuICogYW5kIGJ5IHtAbGluayBQSVhJLmludGVyYWN0aW9uLkludGVyYWN0aW9uTWFuYWdlcn0uXG4gKiBUaGUgcHJvcGVydHkge0BsaW5rIFBJWEkudGlja2VyLlRpY2tlciNhdXRvU3RhcnR9IGlzIHNldCB0byBgdHJ1ZWBcbiAqIGZvciB0aGlzIGluc3RhbmNlLiBQbGVhc2UgZm9sbG93IHRoZSBleGFtcGxlcyBmb3IgdXNhZ2UsIGluY2x1ZGluZ1xuICogaG93IHRvIG9wdC1vdXQgb2YgYXV0by1zdGFydGluZyB0aGUgc2hhcmVkIHRpY2tlci5cbiAqXG4gKiBAZXhhbXBsZVxuICogdmFyIHRpY2tlciA9IFBJWEkudGlja2VyLnNoYXJlZDtcbiAqIC8vIFNldCB0aGlzIHRvIHByZXZlbnQgc3RhcnRpbmcgdGhpcyB0aWNrZXIgd2hlbiBsaXN0ZW5lcnMgYXJlIGFkZGVkLlxuICogLy8gQnkgZGVmYXVsdCB0aGlzIGlzIHRydWUgb25seSBmb3IgdGhlIFBJWEkudGlja2VyLnNoYXJlZCBpbnN0YW5jZS5cbiAqIHRpY2tlci5hdXRvU3RhcnQgPSBmYWxzZTtcbiAqIC8vIEZZSSwgY2FsbCB0aGlzIHRvIGVuc3VyZSB0aGUgdGlja2VyIGlzIHN0b3BwZWQuIEl0IHNob3VsZCBiZSBzdG9wcGVkXG4gKiAvLyBpZiB5b3UgaGF2ZSBub3QgYXR0ZW1wdGVkIHRvIHJlbmRlciBhbnl0aGluZyB5ZXQuXG4gKiB0aWNrZXIuc3RvcCgpO1xuICogLy8gQ2FsbCB0aGlzIHdoZW4geW91IGFyZSByZWFkeSBmb3IgYSBydW5uaW5nIHNoYXJlZCB0aWNrZXIuXG4gKiB0aWNrZXIuc3RhcnQoKTtcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gWW91IG1heSB1c2UgdGhlIHNoYXJlZCB0aWNrZXIgdG8gcmVuZGVyLi4uXG4gKiB2YXIgcmVuZGVyZXIgPSBQSVhJLmF1dG9EZXRlY3RSZW5kZXJlcig4MDAsIDYwMCk7XG4gKiB2YXIgc3RhZ2UgPSBuZXcgUElYSS5Db250YWluZXIoKTtcbiAqIHZhciBpbnRlcmFjdGlvbk1hbmFnZXIgPSBQSVhJLmludGVyYWN0aW9uLkludGVyYWN0aW9uTWFuYWdlcihyZW5kZXJlcik7XG4gKiBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKHJlbmRlcmVyLnZpZXcpO1xuICogdGlja2VyLmFkZChmdW5jdGlvbiAodGltZSkge1xuICogICAgIHJlbmRlcmVyLnJlbmRlcihzdGFnZSk7XG4gKiB9KTtcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gT3IgeW91IGNhbiBqdXN0IHVwZGF0ZSBpdCBtYW51YWxseS5cbiAqIHRpY2tlci5hdXRvU3RhcnQgPSBmYWxzZTtcbiAqIHRpY2tlci5zdG9wKCk7XG4gKiBmdW5jdGlvbiBhbmltYXRlKHRpbWUpIHtcbiAqICAgICB0aWNrZXIudXBkYXRlKHRpbWUpO1xuICogICAgIHJlbmRlcmVyLnJlbmRlcihzdGFnZSk7XG4gKiAgICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKGFuaW1hdGUpO1xuICogfVxuICogYW5pbWF0ZShwZXJmb3JtYW5jZS5ub3coKSk7XG4gKlxuICogQHR5cGUge1BJWEkudGlja2VyLlRpY2tlcn1cbiAqIEBtZW1iZXJvZiBQSVhJLnRpY2tlclxuICovXG52YXIgc2hhcmVkID0gbmV3IFRpY2tlcigpO1xuc2hhcmVkLmF1dG9TdGFydCA9IHRydWU7XG5cbi8qKlxuICogQG5hbWVzcGFjZSBQSVhJLnRpY2tlclxuICovXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgICBzaGFyZWQ6IHNoYXJlZCxcbiAgICBUaWNrZXI6IFRpY2tlclxufTtcbiIsIi8qKlxuICogR2VuZXJpYyBNYXNrIFN0YWNrIGRhdGEgc3RydWN0dXJlXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKi9cblxudmFyIEdMX01BUCA9IHt9O1xuXG5cbnZhciBjcmVhdGVJbmRpY2VzRm9yUXVhZHMgPSBmdW5jdGlvbiAoc2l6ZSlcbntcbiAgICAvLyB0aGUgdG90YWwgbnVtYmVyIG9mIGluZGljZXMgaW4gb3VyIGFycmF5LCB0aGVyZSBhcmUgNiBwb2ludHMgcGVyIHF1YWQuXG4gICBcbiAgICB2YXIgdG90YWxJbmRpY2VzID0gc2l6ZSAqIDY7XG5cbiAgICB2YXIgaW5kaWNlcyA9IG5ldyBVaW50MTZBcnJheSh0b3RhbEluZGljZXMpO1xuXG5cdC8vIGZpbGwgdGhlIGluZGljZXMgd2l0aCB0aGUgcXVhZHMgdG8gZHJhd1xuICAgIGZvciAodmFyIGk9MCwgaj0wOyBpIDwgdG90YWxJbmRpY2VzOyBpICs9IDYsIGogKz0gNClcbiAgICB7XG4gICAgICAgIGluZGljZXNbaSArIDBdID0gaiArIDA7XG4gICAgICAgIGluZGljZXNbaSArIDFdID0gaiArIDE7XG4gICAgICAgIGluZGljZXNbaSArIDJdID0gaiArIDI7XG4gICAgICAgIGluZGljZXNbaSArIDNdID0gaiArIDA7XG4gICAgICAgIGluZGljZXNbaSArIDRdID0gaiArIDI7XG4gICAgICAgIGluZGljZXNbaSArIDVdID0gaiArIDM7XG4gICAgfVxuXG4gICAgcmV0dXJuIGluZGljZXM7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGNyZWF0ZUluZGljZXNGb3JRdWFkczsiLCJ2YXIgQ09OU1QgPSByZXF1aXJlKCcuLi9jb25zdCcpO1xuXG4vKipcbiAqIEBuYW1lc3BhY2UgUElYSS51dGlsc1xuICovXG52YXIgdXRpbHMgPSBtb2R1bGUuZXhwb3J0cyA9IHtcbiAgICBfdWlkOiAwLFxuICAgIF9zYWlkSGVsbG86IGZhbHNlLFxuXG4gICAgRXZlbnRFbWl0dGVyOiAgIHJlcXVpcmUoJ2V2ZW50ZW1pdHRlcjMnKSxcbiAgICBwbHVnaW5UYXJnZXQ6ICAgcmVxdWlyZSgnLi9wbHVnaW5UYXJnZXQnKSxcbiAgICBhc3luYzogICAgICAgICAgcmVxdWlyZSgnYXN5bmMnKSxcblxuICAgIC8qKlxuICAgICAqIEdldHMgdGhlIG5leHQgdW5pcXVlIGlkZW50aWZpZXJcbiAgICAgKlxuICAgICAqIEByZXR1cm4ge251bWJlcn0gVGhlIG5leHQgdW5pcXVlIGlkZW50aWZpZXIgdG8gdXNlLlxuICAgICAqL1xuICAgIHVpZDogZnVuY3Rpb24gKClcbiAgICB7XG4gICAgICAgIHJldHVybiArK3V0aWxzLl91aWQ7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIENvbnZlcnRzIGEgaGV4IGNvbG9yIG51bWJlciB0byBhbiBbUiwgRywgQl0gYXJyYXlcbiAgICAgKlxuICAgICAqIEBwYXJhbSBoZXgge251bWJlcn1cbiAgICAgKiBAcGFyYW0gIHtudW1iZXJbXX0gW291dD1bXV1cbiAgICAgKiBAcmV0dXJuIHtudW1iZXJbXX0gQW4gYXJyYXkgcmVwcmVzZW50aW5nIHRoZSBbUiwgRywgQl0gb2YgdGhlIGNvbG9yLlxuICAgICAqL1xuICAgIGhleDJyZ2I6IGZ1bmN0aW9uIChoZXgsIG91dClcbiAgICB7XG4gICAgICAgIG91dCA9IG91dCB8fCBbXTtcblxuICAgICAgICBvdXRbMF0gPSAoaGV4ID4+IDE2ICYgMHhGRikgLyAyNTU7XG4gICAgICAgIG91dFsxXSA9IChoZXggPj4gOCAmIDB4RkYpIC8gMjU1O1xuICAgICAgICBvdXRbMl0gPSAoaGV4ICYgMHhGRikgLyAyNTU7XG5cbiAgICAgICAgcmV0dXJuIG91dDtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQ29udmVydHMgYSBoZXggY29sb3IgbnVtYmVyIHRvIGEgc3RyaW5nLlxuICAgICAqXG4gICAgICogQHBhcmFtIGhleCB7bnVtYmVyfVxuICAgICAqIEByZXR1cm4ge3N0cmluZ30gVGhlIHN0cmluZyBjb2xvci5cbiAgICAgKi9cbiAgICBoZXgyc3RyaW5nOiBmdW5jdGlvbiAoaGV4KVxuICAgIHtcbiAgICAgICAgaGV4ID0gaGV4LnRvU3RyaW5nKDE2KTtcbiAgICAgICAgaGV4ID0gJzAwMDAwMCcuc3Vic3RyKDAsIDYgLSBoZXgubGVuZ3RoKSArIGhleDtcblxuICAgICAgICByZXR1cm4gJyMnICsgaGV4O1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBDb252ZXJ0cyBhIGNvbG9yIGFzIGFuIFtSLCBHLCBCXSBhcnJheSB0byBhIGhleCBudW1iZXJcbiAgICAgKlxuICAgICAqIEBwYXJhbSByZ2Ige251bWJlcltdfVxuICAgICAqIEByZXR1cm4ge251bWJlcn0gVGhlIGNvbG9yIG51bWJlclxuICAgICAqL1xuICAgIHJnYjJoZXg6IGZ1bmN0aW9uIChyZ2IpXG4gICAge1xuICAgICAgICByZXR1cm4gKChyZ2JbMF0qMjU1IDw8IDE2KSArIChyZ2JbMV0qMjU1IDw8IDgpICsgcmdiWzJdKjI1NSk7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIENoZWNrcyB3aGV0aGVyIHRoZSBDYW52YXMgQmxlbmRNb2RlcyBhcmUgc3VwcG9ydGVkIGJ5IHRoZSBjdXJyZW50IGJyb3dzZXJcbiAgICAgKlxuICAgICAqIEByZXR1cm4ge2Jvb2xlYW59IHdoZXRoZXIgdGhleSBhcmUgc3VwcG9ydGVkXG4gICAgICovXG4gICAgY2FuVXNlTmV3Q2FudmFzQmxlbmRNb2RlczogZnVuY3Rpb24gKClcbiAgICB7XG4gICAgICAgIGlmICh0eXBlb2YgZG9jdW1lbnQgPT09ICd1bmRlZmluZWQnKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgcG5nSGVhZCA9ICdkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQUFRQUFBQUJBUU1BQUFERDhwMk9BQUFBQTFCTVZFWC8nO1xuICAgICAgICB2YXIgcG5nRW5kID0gJ0FBQUFDa2xFUVZRSTEyTmdBQUFBQWdBQjRpRzhNd0FBQUFCSlJVNUVya0pnZ2c9PSc7XG5cbiAgICAgICAgdmFyIG1hZ2VudGEgPSBuZXcgSW1hZ2UoKTtcbiAgICAgICAgbWFnZW50YS5zcmMgPSBwbmdIZWFkICsgJ0FQODA0T2E2JyArIHBuZ0VuZDtcblxuICAgICAgICB2YXIgeWVsbG93ID0gbmV3IEltYWdlKCk7XG4gICAgICAgIHllbGxvdy5zcmMgPSBwbmdIZWFkICsgJy93Q0t4dlJGJyArIHBuZ0VuZDtcblxuICAgICAgICB2YXIgY2FudmFzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnY2FudmFzJyk7XG4gICAgICAgIGNhbnZhcy53aWR0aCA9IDY7XG4gICAgICAgIGNhbnZhcy5oZWlnaHQgPSAxO1xuXG4gICAgICAgIHZhciBjb250ZXh0ID0gY2FudmFzLmdldENvbnRleHQoJzJkJyk7XG4gICAgICAgIGNvbnRleHQuZ2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uID0gJ211bHRpcGx5JztcbiAgICAgICAgY29udGV4dC5kcmF3SW1hZ2UobWFnZW50YSwgMCwgMCk7XG4gICAgICAgIGNvbnRleHQuZHJhd0ltYWdlKHllbGxvdywgMiwgMCk7XG5cbiAgICAgICAgdmFyIGRhdGEgPSBjb250ZXh0LmdldEltYWdlRGF0YSgyLDAsMSwxKS5kYXRhO1xuXG4gICAgICAgIHJldHVybiAoZGF0YVswXSA9PT0gMjU1ICYmIGRhdGFbMV0gPT09IDAgJiYgZGF0YVsyXSA9PT0gMCk7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIEdpdmVuIGEgbnVtYmVyLCB0aGlzIGZ1bmN0aW9uIHJldHVybnMgdGhlIGNsb3Nlc3QgbnVtYmVyIHRoYXQgaXMgYSBwb3dlciBvZiB0d29cbiAgICAgKiB0aGlzIGZ1bmN0aW9uIGlzIHRha2VuIGZyb20gU3RhcmxpbmcgRnJhbWV3b3JrIGFzIGl0cyBwcmV0dHkgbmVhdCA7KVxuICAgICAqXG4gICAgICogQHBhcmFtIG51bWJlciB7bnVtYmVyfVxuICAgICAqIEByZXR1cm4ge251bWJlcn0gdGhlIGNsb3Nlc3QgbnVtYmVyIHRoYXQgaXMgYSBwb3dlciBvZiB0d29cbiAgICAgKi9cbiAgICBnZXROZXh0UG93ZXJPZlR3bzogZnVuY3Rpb24gKG51bWJlcilcbiAgICB7XG4gICAgICAgIC8vIHNlZTogaHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9Qb3dlcl9vZl90d28jRmFzdF9hbGdvcml0aG1fdG9fY2hlY2tfaWZfYV9wb3NpdGl2ZV9udW1iZXJfaXNfYV9wb3dlcl9vZl90d29cbiAgICAgICAgaWYgKG51bWJlciA+IDAgJiYgKG51bWJlciAmIChudW1iZXIgLSAxKSkgPT09IDApXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiBudW1iZXI7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgICB2YXIgcmVzdWx0ID0gMTtcblxuICAgICAgICAgICAgd2hpbGUgKHJlc3VsdCA8IG51bWJlcilcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICByZXN1bHQgPDw9IDE7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogY2hlY2tzIGlmIHRoZSBnaXZlbiB3aWR0aCBhbmQgaGVpZ2h0IG1ha2UgYSBwb3dlciBvZiB0d28gcmVjdGFuZ2xlXG4gICAgICpcbiAgICAgKiBAcGFyYW0gd2lkdGgge251bWJlcn1cbiAgICAgKiBAcGFyYW0gaGVpZ2h0IHtudW1iZXJ9XG4gICAgICogQHJldHVybiB7Ym9vbGVhbn1cbiAgICAgKi9cbiAgICBpc1Bvd2VyT2ZUd286IGZ1bmN0aW9uICh3aWR0aCwgaGVpZ2h0KVxuICAgIHtcbiAgICAgICAgcmV0dXJuICh3aWR0aCA+IDAgJiYgKHdpZHRoICYgKHdpZHRoIC0gMSkpID09PSAwICYmIGhlaWdodCA+IDAgJiYgKGhlaWdodCAmIChoZWlnaHQgLSAxKSkgPT09IDApO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBnZXQgdGhlIHJlc29sdXRpb24gb2YgYW4gYXNzZXQgYnkgbG9va2luZyBmb3IgdGhlIHByZWZpeFxuICAgICAqIHVzZWQgYnkgc3ByaXRlc2hlZXRzIGFuZCBpbWFnZSB1cmxzXG4gICAgICpcbiAgICAgKiBAcGFyYW0gdXJsIHtzdHJpbmd9IHRoZSBpbWFnZSBwYXRoXG4gICAgICogQHJldHVybiB7bnVtYmVyfVxuICAgICAqL1xuICAgIGdldFJlc29sdXRpb25PZlVybDogZnVuY3Rpb24gKHVybClcbiAgICB7XG4gICAgICAgIHZhciByZXNvbHV0aW9uID0gQ09OU1QuUkVUSU5BX1BSRUZJWC5leGVjKHVybCk7XG5cbiAgICAgICAgaWYgKHJlc29sdXRpb24pXG4gICAgICAgIHtcbiAgICAgICAgICAgcmV0dXJuIHBhcnNlRmxvYXQocmVzb2x1dGlvblsxXSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gMTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogTG9ncyBvdXQgdGhlIHZlcnNpb24gYW5kIHJlbmRlcmVyIGluZm9ybWF0aW9uIGZvciB0aGlzIHJ1bm5pbmcgaW5zdGFuY2Ugb2YgUElYSS5cbiAgICAgKiBJZiB5b3UgZG9uJ3Qgd2FudCB0byBzZWUgdGhpcyBtZXNzYWdlIHlvdSBjYW4gc2V0IGBQSVhJLnV0aWxzLl9zYWlkSGVsbG8gPSB0cnVlO2BcbiAgICAgKiBzbyB0aGUgbGlicmFyeSB0aGlua3MgaXQgYWxyZWFkeSBzYWlkIGl0LiBLZWVwIGluIG1pbmQgdGhhdCBkb2luZyB0aGF0IHdpbGwgZm9yZXZlclxuICAgICAqIG1ha2VzIHlvdSBhIGplcmsgZmFjZS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSB0eXBlIC0gVGhlIHN0cmluZyByZW5kZXJlciB0eXBlIHRvIGxvZy5cbiAgICAgKiBAY29uc3RhbnRcbiAgICAgKiBAc3RhdGljXG4gICAgICovXG4gICAgc2F5SGVsbG86IGZ1bmN0aW9uICh0eXBlKVxuICAgIHtcbiAgICAgICAgaWYgKHV0aWxzLl9zYWlkSGVsbG8pXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChuYXZpZ2F0b3IudXNlckFnZW50LnRvTG93ZXJDYXNlKCkuaW5kZXhPZignY2hyb21lJykgPiAtMSlcbiAgICAgICAge1xuICAgICAgICAgICAgdmFyIGFyZ3MgPSBbXG4gICAgICAgICAgICAgICAgJ1xcbiAlYyAlYyAlYyBQaXhpLmpzICcgKyBDT05TVC5WRVJTSU9OICsgJyAtIOKcsCAnICsgdHlwZSArICcg4pywICAlYyAnICsgJyAlYyAnICsgJyBodHRwOi8vd3d3LnBpeGlqcy5jb20vICAlYyAlYyDimaUlY+KZpSVj4pmlIFxcblxcbicsXG4gICAgICAgICAgICAgICAgJ2JhY2tncm91bmQ6ICNmZjY2YTU7IHBhZGRpbmc6NXB4IDA7JyxcbiAgICAgICAgICAgICAgICAnYmFja2dyb3VuZDogI2ZmNjZhNTsgcGFkZGluZzo1cHggMDsnLFxuICAgICAgICAgICAgICAgICdjb2xvcjogI2ZmNjZhNTsgYmFja2dyb3VuZDogIzAzMDMwNzsgcGFkZGluZzo1cHggMDsnLFxuICAgICAgICAgICAgICAgICdiYWNrZ3JvdW5kOiAjZmY2NmE1OyBwYWRkaW5nOjVweCAwOycsXG4gICAgICAgICAgICAgICAgJ2JhY2tncm91bmQ6ICNmZmMzZGM7IHBhZGRpbmc6NXB4IDA7JyxcbiAgICAgICAgICAgICAgICAnYmFja2dyb3VuZDogI2ZmNjZhNTsgcGFkZGluZzo1cHggMDsnLFxuICAgICAgICAgICAgICAgICdjb2xvcjogI2ZmMjQyNDsgYmFja2dyb3VuZDogI2ZmZjsgcGFkZGluZzo1cHggMDsnLFxuICAgICAgICAgICAgICAgICdjb2xvcjogI2ZmMjQyNDsgYmFja2dyb3VuZDogI2ZmZjsgcGFkZGluZzo1cHggMDsnLFxuICAgICAgICAgICAgICAgICdjb2xvcjogI2ZmMjQyNDsgYmFja2dyb3VuZDogI2ZmZjsgcGFkZGluZzo1cHggMDsnXG4gICAgICAgICAgICBdO1xuXG4gICAgICAgICAgICB3aW5kb3cuY29uc29sZS5sb2cuYXBwbHkoY29uc29sZSwgYXJncyk7IC8vanNoaW50IGlnbm9yZTpsaW5lXG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAod2luZG93LmNvbnNvbGUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHdpbmRvdy5jb25zb2xlLmxvZygnUGl4aS5qcyAnICsgQ09OU1QuVkVSU0lPTiArICcgLSAnICsgdHlwZSArICcgLSBodHRwOi8vd3d3LnBpeGlqcy5jb20vJyk7IC8vanNoaW50IGlnbm9yZTpsaW5lXG4gICAgICAgIH1cblxuICAgICAgICB1dGlscy5fc2FpZEhlbGxvID0gdHJ1ZTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogSGVscGVyIGZvciBjaGVja2luZyBmb3Igd2ViZ2wgc3VwcG9ydFxuICAgICAqXG4gICAgICogQHJldHVybiB7Ym9vbGVhbn1cbiAgICAgKi9cbiAgICBpc1dlYkdMU3VwcG9ydGVkOiBmdW5jdGlvbiAoKVxuICAgIHtcbiAgICAgICAgdmFyIGNvbnRleHRPcHRpb25zID0geyBzdGVuY2lsOiB0cnVlIH07XG4gICAgICAgIHRyeVxuICAgICAgICB7XG4gICAgICAgICAgICBpZiAoIXdpbmRvdy5XZWJHTFJlbmRlcmluZ0NvbnRleHQpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB2YXIgY2FudmFzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnY2FudmFzJyksXG4gICAgICAgICAgICAgICAgZ2wgPSBjYW52YXMuZ2V0Q29udGV4dCgnd2ViZ2wnLCBjb250ZXh0T3B0aW9ucykgfHwgY2FudmFzLmdldENvbnRleHQoJ2V4cGVyaW1lbnRhbC13ZWJnbCcsIGNvbnRleHRPcHRpb25zKTtcblxuICAgICAgICAgICAgcmV0dXJuICEhKGdsICYmIGdsLmdldENvbnRleHRBdHRyaWJ1dGVzKCkuc3RlbmNpbCk7XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHNpZ24gb2YgbnVtYmVyXG4gICAgICpcbiAgICAgKiBAcGFyYW0gbiB7bnVtYmVyfVxuICAgICAqIEByZXR1cm5zIHtudW1iZXJ9IDAgaWYgbiBpcyAwLCAtMSBpZiBuIGlzIG5lZ2F0aXZlLCAxIGlmIG4gaSBwb3NpdGl2ZVxuICAgICAqL1xuICAgIHNpZ246IGZ1bmN0aW9uIChuKVxuICAgIHtcbiAgICAgICAgcmV0dXJuIG4gPyAobiA8IDAgPyAtMSA6IDEpIDogMDtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogcmVtb3ZlSXRlbXNcbiAgICAgKlxuICAgICAqIEBwYXJhbSB7YXJyYXl9IGFyciBUaGUgdGFyZ2V0IGFycmF5XG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHN0YXJ0SWR4IFRoZSBpbmRleCB0byBiZWdpbiByZW1vdmluZyBmcm9tIChpbmNsdXNpdmUpXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHJlbW92ZUNvdW50IEhvdyBtYW55IGl0ZW1zIHRvIHJlbW92ZVxuICAgICAqL1xuICAgIHJlbW92ZUl0ZW1zOiBmdW5jdGlvbiAoYXJyLCBzdGFydElkeCwgcmVtb3ZlQ291bnQpXG4gICAge1xuICAgICAgICB2YXIgbGVuZ3RoID0gYXJyLmxlbmd0aDtcblxuICAgICAgICBpZiAoc3RhcnRJZHggPj0gbGVuZ3RoIHx8IHJlbW92ZUNvdW50ID09PSAwKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICByZW1vdmVDb3VudCA9IChzdGFydElkeCtyZW1vdmVDb3VudCA+IGxlbmd0aCA/IGxlbmd0aC1zdGFydElkeCA6IHJlbW92ZUNvdW50KTtcbiAgICAgICAgZm9yICh2YXIgaSA9IHN0YXJ0SWR4LCBsZW4gPSBsZW5ndGgtcmVtb3ZlQ291bnQ7IGkgPCBsZW47ICsraSlcbiAgICAgICAge1xuICAgICAgICAgICAgYXJyW2ldID0gYXJyW2kgKyByZW1vdmVDb3VudF07XG4gICAgICAgIH1cblxuICAgICAgICBhcnIubGVuZ3RoID0gbGVuO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBAdG9kbyBEZXNjcmliZSBwcm9wZXJ0eSB1c2FnZVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgVGV4dHVyZUNhY2hlOiB7fSxcblxuICAgIC8qKlxuICAgICAqIEB0b2RvIERlc2NyaWJlIHByb3BlcnR5IHVzYWdlXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICBCYXNlVGV4dHVyZUNhY2hlOiB7fVxufTtcbiIsIi8qKlxuICogTWl4aW5zIGZ1bmN0aW9uYWxpdHkgdG8gbWFrZSBhbiBvYmplY3QgaGF2ZSBcInBsdWdpbnNcIi5cbiAqXG4gKiBAbWl4aW5cbiAqIEBtZW1iZXJvZiBQSVhJLnV0aWxzXG4gKiBAcGFyYW0gb2JqIHtvYmplY3R9IFRoZSBvYmplY3QgdG8gbWl4IGludG8uXG4gKiBAZXhhbXBsZVxuICogICAgICBmdW5jdGlvbiBNeU9iamVjdCgpIHt9XG4gKlxuICogICAgICBwbHVnaW5UYXJnZXQubWl4aW4oTXlPYmplY3QpO1xuICovXG5mdW5jdGlvbiBwbHVnaW5UYXJnZXQob2JqKVxue1xuICAgIG9iai5fX3BsdWdpbnMgPSB7fTtcblxuICAgIC8qKlxuICAgICAqIEFkZHMgYSBwbHVnaW4gdG8gYW4gb2JqZWN0XG4gICAgICpcbiAgICAgKiBAcGFyYW0gcGx1Z2luTmFtZSB7c3RyaW5nfSBUaGUgZXZlbnRzIHRoYXQgc2hvdWxkIGJlIGxpc3RlZC5cbiAgICAgKiBAcGFyYW0gY3RvciB7RnVuY3Rpb259IFRoZSBjb25zdHJ1Y3RvciBmdW5jdGlvbiBmb3IgdGhlIHBsdWdpbi5cbiAgICAgKi9cbiAgICBvYmoucmVnaXN0ZXJQbHVnaW4gPSBmdW5jdGlvbiAocGx1Z2luTmFtZSwgY3RvcilcbiAgICB7XG4gICAgICAgIG9iai5fX3BsdWdpbnNbcGx1Z2luTmFtZV0gPSBjdG9yO1xuICAgIH07XG5cbiAgICAvKipcbiAgICAgKiBJbnN0YW50aWF0ZXMgYWxsIHRoZSBwbHVnaW5zIG9mIHRoaXMgb2JqZWN0XG4gICAgICpcbiAgICAgKi9cbiAgICBvYmoucHJvdG90eXBlLmluaXRQbHVnaW5zID0gZnVuY3Rpb24gKClcbiAgICB7XG4gICAgICAgIHRoaXMucGx1Z2lucyA9IHRoaXMucGx1Z2lucyB8fCB7fTtcblxuICAgICAgICBmb3IgKHZhciBvIGluIG9iai5fX3BsdWdpbnMpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMucGx1Z2luc1tvXSA9IG5ldyAob2JqLl9fcGx1Z2luc1tvXSkodGhpcyk7XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgLyoqXG4gICAgICogUmVtb3ZlcyBhbGwgdGhlIHBsdWdpbnMgb2YgdGhpcyBvYmplY3RcbiAgICAgKlxuICAgICAqL1xuICAgIG9iai5wcm90b3R5cGUuZGVzdHJveVBsdWdpbnMgPSBmdW5jdGlvbiAoKVxuICAgIHtcbiAgICAgICAgZm9yICh2YXIgbyBpbiB0aGlzLnBsdWdpbnMpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMucGx1Z2luc1tvXS5kZXN0cm95KCk7XG4gICAgICAgICAgICB0aGlzLnBsdWdpbnNbb10gPSBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5wbHVnaW5zID0gbnVsbDtcbiAgICB9O1xufVxuXG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICAgIC8qKlxuICAgICAqIE1peGVzIGluIHRoZSBwcm9wZXJ0aWVzIG9mIHRoZSBwbHVnaW5UYXJnZXQgaW50byBhbm90aGVyIG9iamVjdFxuICAgICAqXG4gICAgICogQHBhcmFtIG9iamVjdCB7b2JqZWN0fSBUaGUgb2JqIHRvIG1peCBpbnRvXG4gICAgICovXG4gICAgbWl4aW46IGZ1bmN0aW9uIG1peGluKG9iailcbiAgICB7XG4gICAgICAgIHBsdWdpblRhcmdldChvYmopO1xuICAgIH1cbn07XG4iLCIvKmdsb2JhbCBjb25zb2xlICovXG52YXIgY29yZSA9IHJlcXVpcmUoJy4vY29yZScpLFxuICAgIG1lc2ggPSByZXF1aXJlKCcuL21lc2gnKSxcbiAgICBleHRyYXMgPSByZXF1aXJlKCcuL2V4dHJhcycpLFxuICAgIGZpbHRlcnMgPSByZXF1aXJlKCcuL2ZpbHRlcnMnKTtcblxuLyoqXG4gKiBAY2xhc3NcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBTcHJpdGVCYXRjaFxuICogQG1lbWJlcm9mIFBJWElcbiAqIEBzZWUgUElYSS5QYXJ0aWNsZUNvbnRhaW5lclxuICogQHRocm93cyB7UmVmZXJlbmNlRXJyb3J9IFNwcml0ZUJhdGNoIGRvZXMgbm90IGV4aXN0IGFueSBtb3JlLCBwbGVhc2UgdXNlIHRoZSBuZXcgUGFydGljbGVDb250YWluZXIgaW5zdGVhZC5cbiAqIEBkZXByZWNhdGVkIHNpbmNlIHZlcnNpb24gMy4wLjBcbiAqL1xuY29yZS5TcHJpdGVCYXRjaCA9IGZ1bmN0aW9uKClcbntcbiAgICB0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoJ1Nwcml0ZUJhdGNoIGRvZXMgbm90IGV4aXN0IGFueSBtb3JlLCBwbGVhc2UgdXNlIHRoZSBuZXcgUGFydGljbGVDb250YWluZXIgaW5zdGVhZC4nKTtcbn07XG5cbi8qKlxuICogQGNsYXNzXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgQXNzZXRMb2FkZXJcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAc2VlIFBJWEkubG9hZGVycy5Mb2FkZXJcbiAqIEB0aHJvd3Mge1JlZmVyZW5jZUVycm9yfSBUaGUgbG9hZGVyIHN5c3RlbSB3YXMgb3ZlcmhhdWxlZCBpbiBwaXhpIHYzLCBwbGVhc2Ugc2VlIHRoZSBuZXcgUElYSS5sb2FkZXJzLkxvYWRlciBjbGFzcy5cbiAqIEBkZXByZWNhdGVkIHNpbmNlIHZlcnNpb24gMy4wLjBcbiAqL1xuY29yZS5Bc3NldExvYWRlciA9IGZ1bmN0aW9uKClcbntcbiAgICB0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoJ1RoZSBsb2FkZXIgc3lzdGVtIHdhcyBvdmVyaGF1bGVkIGluIHBpeGkgdjMsIHBsZWFzZSBzZWUgdGhlIG5ldyBQSVhJLmxvYWRlcnMuTG9hZGVyIGNsYXNzLicpO1xufTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoY29yZSwge1xuXG4gICAgLyoqXG4gICAgICogQGNsYXNzXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAbmFtZSBTdGFnZVxuICAgICAqIEBtZW1iZXJvZiBQSVhJXG4gICAgICogQHNlZSBQSVhJLkNvbnRhaW5lclxuICAgICAqIEBkZXByZWNhdGVkIHNpbmNlIHZlcnNpb24gMy4wLjBcbiAgICAgKi9cbiAgICBTdGFnZToge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uKClcbiAgICAgICAge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKCdZb3UgZG8gbm90IG5lZWQgdG8gdXNlIGEgUElYSSBTdGFnZSBhbnkgbW9yZSwgeW91IGNhbiBzaW1wbHkgcmVuZGVyIGFueSBjb250YWluZXIuJyk7XG4gICAgICAgICAgICByZXR1cm4gY29yZS5Db250YWluZXI7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQGNsYXNzXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAbmFtZSBEaXNwbGF5T2JqZWN0Q29udGFpbmVyXG4gICAgICogQG1lbWJlcm9mIFBJWElcbiAgICAgKiBAc2VlIFBJWEkuQ29udGFpbmVyXG4gICAgICogQGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiAzLjAuMFxuICAgICAqL1xuICAgIERpc3BsYXlPYmplY3RDb250YWluZXI6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbigpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignRGlzcGxheU9iamVjdENvbnRhaW5lciBoYXMgYmVlbiBzaG9ydGVuZWQgdG8gQ29udGFpbmVyLCBwbGVhc2UgdXNlIENvbnRhaW5lciBmcm9tIG5vdyBvbi4nKTtcbiAgICAgICAgICAgIHJldHVybiBjb3JlLkNvbnRhaW5lcjtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBAY2xhc3NcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBuYW1lIFN0cmlwXG4gICAgICogQG1lbWJlcm9mIFBJWElcbiAgICAgKiBAc2VlIFBJWEkubWVzaC5NZXNoXG4gICAgICogQGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiAzLjAuMFxuICAgICAqL1xuICAgIFN0cmlwOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24oKVxuICAgICAgICB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ1RoZSBTdHJpcCBjbGFzcyBoYXMgYmVlbiByZW5hbWVkIHRvIE1lc2ggYW5kIG1vdmVkIHRvIG1lc2guTWVzaCwgcGxlYXNlIHVzZSBtZXNoLk1lc2ggZnJvbSBub3cgb24uJyk7XG4gICAgICAgICAgICByZXR1cm4gbWVzaC5NZXNoO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIEBjbGFzc1xuICAgICAqIEBwcml2YXRlXG4gICAgICogQG5hbWUgUm9wZVxuICAgICAqIEBtZW1iZXJvZiBQSVhJXG4gICAgICogQHNlZSBQSVhJLm1lc2guUm9wZVxuICAgICAqIEBkZXByZWNhdGVkIHNpbmNlIHZlcnNpb24gMy4wLjBcbiAgICAgKi9cbiAgICBSb3BlOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24oKVxuICAgICAgICB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ1RoZSBSb3BlIGNsYXNzIGhhcyBiZWVuIG1vdmVkIHRvIG1lc2guUm9wZSwgcGxlYXNlIHVzZSBtZXNoLlJvcGUgZnJvbSBub3cgb24uJyk7XG4gICAgICAgICAgICByZXR1cm4gbWVzaC5Sb3BlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIEBjbGFzc1xuICAgICAqIEBwcml2YXRlXG4gICAgICogQG5hbWUgTW92aWVDbGlwXG4gICAgICogQG1lbWJlcm9mIFBJWElcbiAgICAgKiBAc2VlIFBJWEkuZXh0cmFzLk1vdmllQ2xpcFxuICAgICAqIEBkZXByZWNhdGVkIHNpbmNlIHZlcnNpb24gMy4wLjBcbiAgICAgKi9cbiAgICBNb3ZpZUNsaXA6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbigpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignVGhlIE1vdmllQ2xpcCBjbGFzcyBoYXMgYmVlbiBtb3ZlZCB0byBleHRyYXMuTW92aWVDbGlwLCBwbGVhc2UgdXNlIGV4dHJhcy5Nb3ZpZUNsaXAgZnJvbSBub3cgb24uJyk7XG4gICAgICAgICAgICByZXR1cm4gZXh0cmFzLk1vdmllQ2xpcDtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBAY2xhc3NcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBuYW1lIFRpbGluZ1Nwcml0ZVxuICAgICAqIEBtZW1iZXJvZiBQSVhJXG4gICAgICogQHNlZSBQSVhJLmV4dHJhcy5UaWxpbmdTcHJpdGVcbiAgICAgKiBAZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDMuMC4wXG4gICAgICovXG4gICAgVGlsaW5nU3ByaXRlOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24oKVxuICAgICAgICB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ1RoZSBUaWxpbmdTcHJpdGUgY2xhc3MgaGFzIGJlZW4gbW92ZWQgdG8gZXh0cmFzLlRpbGluZ1Nwcml0ZSwgcGxlYXNlIHVzZSBleHRyYXMuVGlsaW5nU3ByaXRlIGZyb20gbm93IG9uLicpO1xuICAgICAgICAgICAgcmV0dXJuIGV4dHJhcy5UaWxpbmdTcHJpdGU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQGNsYXNzXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAbmFtZSBCaXRtYXBUZXh0XG4gICAgICogQG1lbWJlcm9mIFBJWElcbiAgICAgKiBAc2VlIFBJWEkuZXh0cmFzLkJpdG1hcFRleHRcbiAgICAgKiBAZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDMuMC4wXG4gICAgICovXG4gICAgQml0bWFwVGV4dDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uKClcbiAgICAgICAge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKCdUaGUgQml0bWFwVGV4dCBjbGFzcyBoYXMgYmVlbiBtb3ZlZCB0byBleHRyYXMuQml0bWFwVGV4dCwgcGxlYXNlIHVzZSBleHRyYXMuQml0bWFwVGV4dCBmcm9tIG5vdyBvbi4nKTtcbiAgICAgICAgICAgIHJldHVybiBleHRyYXMuQml0bWFwVGV4dDtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBAY2xhc3NcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBuYW1lIGJsZW5kTW9kZXNcbiAgICAgKiBAbWVtYmVyb2YgUElYSVxuICAgICAqIEBzZWUgUElYSS5CTEVORF9NT0RFU1xuICAgICAqIEBkZXByZWNhdGVkIHNpbmNlIHZlcnNpb24gMy4wLjBcbiAgICAgKi9cbiAgICBibGVuZE1vZGVzOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24oKVxuICAgICAgICB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ1RoZSBibGVuZE1vZGVzIGhhcyBiZWVuIG1vdmVkIHRvIEJMRU5EX01PREVTLCBwbGVhc2UgdXNlIEJMRU5EX01PREVTIGZyb20gbm93IG9uLicpO1xuICAgICAgICAgICAgcmV0dXJuIGNvcmUuQkxFTkRfTU9ERVM7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQGNsYXNzXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAbmFtZSBzY2FsZU1vZGVzXG4gICAgICogQG1lbWJlcm9mIFBJWElcbiAgICAgKiBAc2VlIFBJWEkuU0NBTEVfTU9ERVNcbiAgICAgKiBAZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDMuMC4wXG4gICAgICovXG4gICAgc2NhbGVNb2Rlczoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uKClcbiAgICAgICAge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKCdUaGUgc2NhbGVNb2RlcyBoYXMgYmVlbiBtb3ZlZCB0byBTQ0FMRV9NT0RFUywgcGxlYXNlIHVzZSBTQ0FMRV9NT0RFUyBmcm9tIG5vdyBvbi4nKTtcbiAgICAgICAgICAgIHJldHVybiBjb3JlLlNDQUxFX01PREVTO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIEBjbGFzc1xuICAgICAqIEBwcml2YXRlXG4gICAgICogQG5hbWUgQmFzZVRleHR1cmVDYWNoZVxuICAgICAqIEBtZW1iZXJvZiBQSVhJXG4gICAgICogQHNlZSBQSVhJLnV0aWxzLkJhc2VUZXh0dXJlQ2FjaGVcbiAgICAgKiBAZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDMuMC4wXG4gICAgICovXG4gICAgQmFzZVRleHR1cmVDYWNoZToge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignVGhlIEJhc2VUZXh0dXJlQ2FjaGUgY2xhc3MgaGFzIGJlZW4gbW92ZWQgdG8gdXRpbHMuQmFzZVRleHR1cmVDYWNoZSwgcGxlYXNlIHVzZSB1dGlscy5CYXNlVGV4dHVyZUNhY2hlIGZyb20gbm93IG9uLicpO1xuICAgICAgICAgICAgcmV0dXJuIGNvcmUudXRpbHMuQmFzZVRleHR1cmVDYWNoZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBAY2xhc3NcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBuYW1lIFRleHR1cmVDYWNoZVxuICAgICAqIEBtZW1iZXJvZiBQSVhJXG4gICAgICogQHNlZSBQSVhJLnV0aWxzLlRleHR1cmVDYWNoZVxuICAgICAqIEBkZXByZWNhdGVkIHNpbmNlIHZlcnNpb24gMy4wLjBcbiAgICAgKi9cbiAgICBUZXh0dXJlQ2FjaGU6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ1RoZSBUZXh0dXJlQ2FjaGUgY2xhc3MgaGFzIGJlZW4gbW92ZWQgdG8gdXRpbHMuVGV4dHVyZUNhY2hlLCBwbGVhc2UgdXNlIHV0aWxzLlRleHR1cmVDYWNoZSBmcm9tIG5vdyBvbi4nKTtcbiAgICAgICAgICAgIHJldHVybiBjb3JlLnV0aWxzLlRleHR1cmVDYWNoZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBAbmFtZXNwYWNlXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAbmFtZSBtYXRoXG4gICAgICogQG1lbWJlcm9mIFBJWElcbiAgICAgKiBAc2VlIFBJWElcbiAgICAgKiBAZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDMuMC42XG4gICAgICovXG4gICAgbWF0aDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignVGhlIG1hdGggbmFtZXNwYWNlIGlzIGRlcHJlY2F0ZWQsIHBsZWFzZSBhY2Nlc3MgbWVtYmVycyBhbHJlYWR5IGFjY2Vzc2libGUgb24gUElYSS4nKTtcbiAgICAgICAgICAgIHJldHVybiBjb3JlO1xuICAgICAgICB9XG4gICAgfVxufSk7XG5cbi8qKlxuICogQG1ldGhvZFxuICogQHByaXZhdGVcbiAqIEBuYW1lIFBJWEkuU3ByaXRlI3NldFRleHR1cmVcbiAqIEBzZWUgUElYSS5TcHJpdGUjdGV4dHVyZVxuICogQGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiAzLjAuMFxuICovXG5jb3JlLlNwcml0ZS5wcm90b3R5cGUuc2V0VGV4dHVyZSA9IGZ1bmN0aW9uKHRleHR1cmUpXG57XG4gICAgdGhpcy50ZXh0dXJlID0gdGV4dHVyZTtcbiAgICBjb25zb2xlLndhcm4oJ3NldFRleHR1cmUgaXMgbm93IGRlcHJlY2F0ZWQsIHBsZWFzZSB1c2UgdGhlIHRleHR1cmUgcHJvcGVydHksIGUuZyA6IHNwcml0ZS50ZXh0dXJlID0gdGV4dHVyZTsnKTtcbn07XG5cbi8qKlxuICogQG1ldGhvZFxuICogQG5hbWUgUElYSS5leHRyYXMuQml0bWFwVGV4dCNzZXRUZXh0XG4gKiBAc2VlIFBJWEkuZXh0cmFzLkJpdG1hcFRleHQjdGV4dFxuICogQGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiAzLjAuMFxuICovXG5leHRyYXMuQml0bWFwVGV4dC5wcm90b3R5cGUuc2V0VGV4dCA9IGZ1bmN0aW9uKHRleHQpXG57XG4gICAgdGhpcy50ZXh0ID0gdGV4dDtcbiAgICBjb25zb2xlLndhcm4oJ3NldFRleHQgaXMgbm93IGRlcHJlY2F0ZWQsIHBsZWFzZSB1c2UgdGhlIHRleHQgcHJvcGVydHksIGUuZyA6IG15Qml0bWFwVGV4dC50ZXh0ID0gXFwnbXkgdGV4dFxcJzsnKTtcbn07XG5cbi8qKlxuICogQG1ldGhvZFxuICogQG5hbWUgUElYSS5UZXh0I3NldFRleHRcbiAqIEBzZWUgUElYSS5UZXh0I3RleHRcbiAqIEBkZXByZWNhdGVkIHNpbmNlIHZlcnNpb24gMy4wLjBcbiAqL1xuY29yZS5UZXh0LnByb3RvdHlwZS5zZXRUZXh0ID0gZnVuY3Rpb24odGV4dClcbntcbiAgICB0aGlzLnRleHQgPSB0ZXh0O1xuICAgIGNvbnNvbGUud2Fybignc2V0VGV4dCBpcyBub3cgZGVwcmVjYXRlZCwgcGxlYXNlIHVzZSB0aGUgdGV4dCBwcm9wZXJ0eSwgZS5nIDogbXlUZXh0LnRleHQgPSBcXCdteSB0ZXh0XFwnOycpO1xufTtcblxuLyoqXG4gKiBAbWV0aG9kXG4gKiBAbmFtZSBQSVhJLlRleHQjc2V0U3R5bGVcbiAqIEBzZWUgUElYSS5UZXh0I3N0eWxlXG4gKiBAZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDMuMC4wXG4gKi9cbmNvcmUuVGV4dC5wcm90b3R5cGUuc2V0U3R5bGUgPSBmdW5jdGlvbihzdHlsZSlcbntcbiAgICB0aGlzLnN0eWxlID0gc3R5bGU7XG4gICAgY29uc29sZS53YXJuKCdzZXRTdHlsZSBpcyBub3cgZGVwcmVjYXRlZCwgcGxlYXNlIHVzZSB0aGUgc3R5bGUgcHJvcGVydHksIGUuZyA6IG15VGV4dC5zdHlsZSA9IHN0eWxlOycpO1xufTtcblxuLyoqXG4gKiBAbWV0aG9kXG4gKiBAbmFtZSBQSVhJLlRleHR1cmUjc2V0RnJhbWVcbiAqIEBzZWUgUElYSS5UZXh0dXJlI3NldEZyYW1lXG4gKiBAZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDMuMC4wXG4gKi9cbmNvcmUuVGV4dHVyZS5wcm90b3R5cGUuc2V0RnJhbWUgPSBmdW5jdGlvbihmcmFtZSlcbntcbiAgICB0aGlzLmZyYW1lID0gZnJhbWU7XG4gICAgY29uc29sZS53YXJuKCdzZXRGcmFtZSBpcyBub3cgZGVwcmVjYXRlZCwgcGxlYXNlIHVzZSB0aGUgZnJhbWUgcHJvcGVydHksIGUuZyA6IG15VGV4dHVyZS5mcmFtZSA9IGZyYW1lOycpO1xufTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoZmlsdGVycywge1xuXG4gICAgLyoqXG4gICAgICogQGNsYXNzXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAbmFtZSBQSVhJLmZpbHRlcnMuQWJzdHJhY3RGaWx0ZXJcbiAgICAgKiBAc2VlIFBJWEkuQWJzdHJhY3RGaWx0ZXJcbiAgICAgKiBAZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDMuMC42XG4gICAgICovXG4gICAgQWJzdHJhY3RGaWx0ZXI6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbigpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignZmlsdGVycy5BYnN0cmFjdEZpbHRlciBpcyBhbiB1bmRvY3VtZW50ZWQgYWxpYXMsIHBsZWFzZSB1c2UgQWJzdHJhY3RGaWx0ZXIgZnJvbSBub3cgb24uJyk7XG4gICAgICAgICAgICByZXR1cm4gY29yZS5BYnN0cmFjdEZpbHRlcjtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBAY2xhc3NcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBuYW1lIFBJWEkuZmlsdGVycy5GWEFBRmlsdGVyXG4gICAgICogQHNlZSBQSVhJLkZYQUFGaWx0ZXJcbiAgICAgKiBAZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDMuMC42XG4gICAgICovXG4gICAgRlhBQUZpbHRlcjoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uKClcbiAgICAgICAge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKCdmaWx0ZXJzLkZYQUFGaWx0ZXIgaXMgYW4gdW5kb2N1bWVudGVkIGFsaWFzLCBwbGVhc2UgdXNlIEZYQUFGaWx0ZXIgZnJvbSBub3cgb24uJyk7XG4gICAgICAgICAgICByZXR1cm4gY29yZS5GWEFBRmlsdGVyO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIEBjbGFzc1xuICAgICAqIEBwcml2YXRlXG4gICAgICogQG5hbWUgUElYSS5maWx0ZXJzLlNwcml0ZU1hc2tGaWx0ZXJcbiAgICAgKiBAc2VlIFBJWEkuU3ByaXRlTWFza0ZpbHRlclxuICAgICAqIEBkZXByZWNhdGVkIHNpbmNlIHZlcnNpb24gMy4wLjZcbiAgICAgKi9cbiAgICBTcHJpdGVNYXNrRmlsdGVyOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24oKVxuICAgICAgICB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ2ZpbHRlcnMuU3ByaXRlTWFza0ZpbHRlciBpcyBhbiB1bmRvY3VtZW50ZWQgYWxpYXMsIHBsZWFzZSB1c2UgU3ByaXRlTWFza0ZpbHRlciBmcm9tIG5vdyBvbi4nKTtcbiAgICAgICAgICAgIHJldHVybiBjb3JlLlNwcml0ZU1hc2tGaWx0ZXI7XG4gICAgICAgIH1cbiAgICB9XG59KTtcblxuLyoqXG4gKiBAbWV0aG9kXG4gKiBAbmFtZSBQSVhJLnV0aWxzLnV1aWRcbiAqIEBzZWUgUElYSS51dGlscy51aWRcbiAqIEBkZXByZWNhdGVkIHNpbmNlIHZlcnNpb24gMy4wLjZcbiAqL1xuY29yZS51dGlscy51dWlkID0gZnVuY3Rpb24gKClcbntcbiAgICBjb25zb2xlLndhcm4oJ3V0aWxzLnV1aWQoKSBpcyBkZXByZWNhdGVkLCBwbGVhc2UgdXNlIHV0aWxzLnVpZCgpIGZyb20gbm93IG9uLicpO1xuICAgIHJldHVybiBjb3JlLnV0aWxzLnVpZCgpO1xufTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vY29yZScpO1xuXG4vKipcbiAqIEEgQml0bWFwVGV4dCBvYmplY3Qgd2lsbCBjcmVhdGUgYSBsaW5lIG9yIG11bHRpcGxlIGxpbmVzIG9mIHRleHQgdXNpbmcgYml0bWFwIGZvbnQuIFRvXG4gKiBzcGxpdCBhIGxpbmUgeW91IGNhbiB1c2UgJ1xcbicsICdcXHInIG9yICdcXHJcXG4nIGluIHlvdXIgc3RyaW5nLiBZb3UgY2FuIGdlbmVyYXRlIHRoZSBmbnQgZmlsZXMgdXNpbmc6XG4gKlxuICogQSBCaXRtYXBUZXh0IGNhbiBvbmx5IGJlIGNyZWF0ZWQgd2hlbiB0aGUgZm9udCBpcyBsb2FkZWRcbiAqXG4gKiBgYGBqc1xuICogLy8gaW4gdGhpcyBjYXNlIHRoZSBmb250IGlzIGluIGEgZmlsZSBjYWxsZWQgJ2Rlc3lyZWwuZm50J1xuICogdmFyIGJpdG1hcFRleHQgPSBuZXcgUElYSS5leHRyYXMuQml0bWFwVGV4dChcInRleHQgdXNpbmcgYSBmYW5jeSBmb250IVwiLCB7Zm9udDogXCIzNXB4IERlc3lyZWxcIiwgYWxpZ246IFwicmlnaHRcIn0pO1xuICogYGBgXG4gKlxuICpcbiAqIGh0dHA6Ly93d3cuYW5nZWxjb2RlLmNvbS9wcm9kdWN0cy9ibWZvbnQvIGZvciB3aW5kb3dzIG9yXG4gKiBodHRwOi8vd3d3LmJtZ2x5cGguY29tLyBmb3IgbWFjLlxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5Db250YWluZXJcbiAqIEBtZW1iZXJvZiBQSVhJLmV4dHJhc1xuICogQHBhcmFtIHRleHQge3N0cmluZ30gVGhlIGNvcHkgdGhhdCB5b3Ugd291bGQgbGlrZSB0aGUgdGV4dCB0byBkaXNwbGF5XG4gKiBAcGFyYW0gc3R5bGUge29iamVjdH0gVGhlIHN0eWxlIHBhcmFtZXRlcnNcbiAqIEBwYXJhbSBzdHlsZS5mb250IHtzdHJpbmd8b2JqZWN0fSBUaGUgZm9udCBkZXNjcmlwdG9yIGZvciB0aGUgb2JqZWN0LCBjYW4gYmUgcGFzc2VkIGFzIGEgc3RyaW5nIG9mIGZvcm1cbiAqICAgICAgXCIyNHB4IEZvbnROYW1lXCIgb3IgXCJGb250TmFtZVwiIG9yIGFzIGFuIG9iamVjdCB3aXRoIGV4cGxpY2l0IG5hbWUvc2l6ZSBwcm9wZXJ0aWVzLlxuICogQHBhcmFtIFtzdHlsZS5mb250Lm5hbWVdIHtzdHJpbmd9IFRoZSBiaXRtYXAgZm9udCBpZFxuICogQHBhcmFtIFtzdHlsZS5mb250LnNpemVdIHtudW1iZXJ9IFRoZSBzaXplIG9mIHRoZSBmb250IGluIHBpeGVscywgZS5nLiAyNFxuICogQHBhcmFtIFtzdHlsZS5hbGlnbj0nbGVmdCddIHtzdHJpbmd9IEFsaWdubWVudCBmb3IgbXVsdGlsaW5lIHRleHQgKCdsZWZ0JywgJ2NlbnRlcicgb3IgJ3JpZ2h0JyksIGRvZXMgbm90IGFmZmVjdFxuICogICAgICBzaW5nbGUgbGluZSB0ZXh0XG4gKiBAcGFyYW0gW3N0eWxlLnRpbnQ9MHhGRkZGRkZdIHtudW1iZXJ9IFRoZSB0aW50IGNvbG9yXG4gKi9cbmZ1bmN0aW9uIEJpdG1hcFRleHQodGV4dCwgc3R5bGUpXG57XG4gICAgY29yZS5Db250YWluZXIuY2FsbCh0aGlzKTtcblxuICAgIHN0eWxlID0gc3R5bGUgfHwge307XG5cbiAgICAvKipcbiAgICAgKiBUaGUgd2lkdGggb2YgdGhlIG92ZXJhbGwgdGV4dCwgZGlmZmVyZW50IGZyb20gZm9udFNpemUsXG4gICAgICogd2hpY2ggaXMgZGVmaW5lZCBpbiB0aGUgc3R5bGUgb2JqZWN0XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQHJlYWRPbmx5XG4gICAgICovXG4gICAgdGhpcy50ZXh0V2lkdGggPSAwO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGhlaWdodCBvZiB0aGUgb3ZlcmFsbCB0ZXh0LCBkaWZmZXJlbnQgZnJvbSBmb250U2l6ZSxcbiAgICAgKiB3aGljaCBpcyBkZWZpbmVkIGluIHRoZSBzdHlsZSBvYmplY3RcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAcmVhZE9ubHlcbiAgICAgKi9cbiAgICB0aGlzLnRleHRIZWlnaHQgPSAwO1xuXG4gICAgLyoqXG4gICAgICogUHJpdmF0ZSB0cmFja2VyIGZvciB0aGUgbGV0dGVyIHNwcml0ZSBwb29sLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5TcHJpdGVbXX1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX2dseXBocyA9IFtdO1xuXG4gICAgLyoqXG4gICAgICogUHJpdmF0ZSB0cmFja2VyIGZvciB0aGUgY3VycmVudCBzdHlsZS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge29iamVjdH1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX2ZvbnQgPSB7XG4gICAgICAgIHRpbnQ6IHN0eWxlLnRpbnQgIT09IHVuZGVmaW5lZCA/IHN0eWxlLnRpbnQgOiAweEZGRkZGRixcbiAgICAgICAgYWxpZ246IHN0eWxlLmFsaWduIHx8ICdsZWZ0JyxcbiAgICAgICAgbmFtZTogbnVsbCxcbiAgICAgICAgc2l6ZTogMFxuICAgIH07XG5cbiAgICAvKipcbiAgICAgKiBQcml2YXRlIHRyYWNrZXIgZm9yIHRoZSBjdXJyZW50IGZvbnQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtvYmplY3R9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLmZvbnQgPSBzdHlsZS5mb250OyAvLyBydW4gZm9udCBzZXR0ZXJcblxuICAgIC8qKlxuICAgICAqIFByaXZhdGUgdHJhY2tlciBmb3IgdGhlIGN1cnJlbnQgdGV4dC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge3N0cmluZ31cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX3RleHQgPSB0ZXh0O1xuXG4gICAgLyoqXG4gICAgICogVGhlIG1heCB3aWR0aCBvZiB0aGlzIGJpdG1hcCB0ZXh0IGluIHBpeGVscy4gSWYgdGhlIHRleHQgcHJvdmlkZWQgaXMgbG9uZ2VyIHRoYW4gdGhlIHZhbHVlIHByb3ZpZGVkLCBsaW5lIGJyZWFrcyB3aWxsIGJlIGF1dG9tYXRpY2FsbHkgaW5zZXJ0ZWQgaW4gdGhlIGxhc3Qgd2hpdGVzcGFjZS5cbiAgICAgKiBEaXNhYmxlIGJ5IHNldHRpbmcgdmFsdWUgdG8gMFxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMubWF4V2lkdGggPSAwO1xuXG4gICAgLyoqXG4gICAgICogVGhlIG1heCBsaW5lIGhlaWdodC4gVGhpcyBpcyB1c2VmdWwgd2hlbiB0cnlpbmcgdG8gdXNlIHRoZSB0b3RhbCBoZWlnaHQgb2YgdGhlIFRleHQsIGllOiB3aGVuIHRyeWluZyB0byB2ZXJ0aWNhbGx5IGFsaWduLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMubWF4TGluZUhlaWdodCA9IDA7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgZGlydHkgc3RhdGUgb2YgdGhpcyBvYmplY3QuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqL1xuICAgIHRoaXMuZGlydHkgPSBmYWxzZTtcblxuICAgIHRoaXMudXBkYXRlVGV4dCgpO1xufVxuXG4vLyBjb25zdHJ1Y3RvclxuQml0bWFwVGV4dC5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuQ29udGFpbmVyLnByb3RvdHlwZSk7XG5CaXRtYXBUZXh0LnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IEJpdG1hcFRleHQ7XG5tb2R1bGUuZXhwb3J0cyA9IEJpdG1hcFRleHQ7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKEJpdG1hcFRleHQucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogVGhlIHRpbnQgb2YgdGhlIEJpdG1hcFRleHQgb2JqZWN0XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZXh0cmFzLkJpdG1hcFRleHQjXG4gICAgICovXG4gICAgdGludDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9mb250LnRpbnQ7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLl9mb250LnRpbnQgPSAodHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJyAmJiB2YWx1ZSA+PSAwKSA/IHZhbHVlIDogMHhGRkZGRkY7XG5cbiAgICAgICAgICAgIHRoaXMuZGlydHkgPSB0cnVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFRoZSBhbGlnbm1lbnQgb2YgdGhlIEJpdG1hcFRleHQgb2JqZWN0XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtzdHJpbmd9XG4gICAgICogQGRlZmF1bHQgJ2xlZnQnXG4gICAgICogQG1lbWJlcm9mIFBJWEkuZXh0cmFzLkJpdG1hcFRleHQjXG4gICAgICovXG4gICAgYWxpZ246IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fZm9udC5hbGlnbjtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuX2ZvbnQuYWxpZ24gPSB2YWx1ZSB8fCAnbGVmdCc7XG5cbiAgICAgICAgICAgIHRoaXMuZGlydHkgPSB0cnVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFRoZSBmb250IGRlc2NyaXB0b3Igb2YgdGhlIEJpdG1hcFRleHQgb2JqZWN0XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtGb250fVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmV4dHJhcy5CaXRtYXBUZXh0I1xuICAgICAqL1xuICAgIGZvbnQ6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fZm9udDtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGlmICghdmFsdWUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICAgICAgdmFsdWUgPSB2YWx1ZS5zcGxpdCgnICcpO1xuXG4gICAgICAgICAgICAgICAgdGhpcy5fZm9udC5uYW1lID0gdmFsdWUubGVuZ3RoID09PSAxID8gdmFsdWVbMF0gOiB2YWx1ZS5zbGljZSgxKS5qb2luKCcgJyk7XG4gICAgICAgICAgICAgICAgdGhpcy5fZm9udC5zaXplID0gdmFsdWUubGVuZ3RoID49IDIgPyBwYXJzZUludCh2YWx1ZVswXSwgMTApIDogQml0bWFwVGV4dC5mb250c1t0aGlzLl9mb250Lm5hbWVdLnNpemU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9mb250Lm5hbWUgPSB2YWx1ZS5uYW1lO1xuICAgICAgICAgICAgICAgIHRoaXMuX2ZvbnQuc2l6ZSA9IHR5cGVvZiB2YWx1ZS5zaXplID09PSAnbnVtYmVyJyA/IHZhbHVlLnNpemUgOiBwYXJzZUludCh2YWx1ZS5zaXplLCAxMCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuZGlydHkgPSB0cnVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFRoZSB0ZXh0IG9mIHRoZSBCaXRtYXBUZXh0IG9iamVjdFxuICAgICAqXG4gICAgICogQG1lbWJlciB7c3RyaW5nfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmV4dHJhcy5CaXRtYXBUZXh0I1xuICAgICAqL1xuICAgIHRleHQ6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fdGV4dDtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHZhbHVlID0gdmFsdWUudG9TdHJpbmcoKSB8fCAnICc7XG4gICAgICAgICAgICBpZiAodGhpcy5fdGV4dCA9PT0gdmFsdWUpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5fdGV4dCA9IHZhbHVlO1xuICAgICAgICAgICAgdGhpcy5kaXJ0eSA9IHRydWU7XG4gICAgICAgIH1cbiAgICB9XG59KTtcblxuLyoqXG4gKiBSZW5kZXJzIHRleHQgYW5kIHVwZGF0ZXMgaXQgd2hlbiBuZWVkZWRcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5CaXRtYXBUZXh0LnByb3RvdHlwZS51cGRhdGVUZXh0ID0gZnVuY3Rpb24gKClcbntcbiAgICB2YXIgZGF0YSA9IEJpdG1hcFRleHQuZm9udHNbdGhpcy5fZm9udC5uYW1lXTtcbiAgICB2YXIgcG9zID0gbmV3IGNvcmUuUG9pbnQoKTtcbiAgICB2YXIgcHJldkNoYXJDb2RlID0gbnVsbDtcbiAgICB2YXIgY2hhcnMgPSBbXTtcbiAgICB2YXIgbGFzdExpbmVXaWR0aCA9IDA7XG4gICAgdmFyIG1heExpbmVXaWR0aCA9IDA7XG4gICAgdmFyIGxpbmVXaWR0aHMgPSBbXTtcbiAgICB2YXIgbGluZSA9IDA7XG4gICAgdmFyIHNjYWxlID0gdGhpcy5fZm9udC5zaXplIC8gZGF0YS5zaXplO1xuICAgIHZhciBsYXN0U3BhY2UgPSAtMTtcbiAgICB2YXIgbWF4TGluZUhlaWdodCA9IDA7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMudGV4dC5sZW5ndGg7IGkrKylcbiAgICB7XG4gICAgICAgIHZhciBjaGFyQ29kZSA9IHRoaXMudGV4dC5jaGFyQ29kZUF0KGkpO1xuICAgICAgICBsYXN0U3BhY2UgPSAvKFxccykvLnRlc3QodGhpcy50ZXh0LmNoYXJBdChpKSkgPyBpIDogbGFzdFNwYWNlO1xuXG4gICAgICAgIGlmICgvKD86XFxyXFxufFxccnxcXG4pLy50ZXN0KHRoaXMudGV4dC5jaGFyQXQoaSkpKVxuICAgICAgICB7XG4gICAgICAgICAgICBsaW5lV2lkdGhzLnB1c2gobGFzdExpbmVXaWR0aCk7XG4gICAgICAgICAgICBtYXhMaW5lV2lkdGggPSBNYXRoLm1heChtYXhMaW5lV2lkdGgsIGxhc3RMaW5lV2lkdGgpO1xuICAgICAgICAgICAgbGluZSsrO1xuXG4gICAgICAgICAgICBwb3MueCA9IDA7XG4gICAgICAgICAgICBwb3MueSArPSBkYXRhLmxpbmVIZWlnaHQ7XG4gICAgICAgICAgICBwcmV2Q2hhckNvZGUgPSBudWxsO1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAobGFzdFNwYWNlICE9PSAtMSAmJiB0aGlzLm1heFdpZHRoID4gMCAmJiBwb3MueCAqIHNjYWxlID4gdGhpcy5tYXhXaWR0aClcbiAgICAgICAge1xuICAgICAgICAgICAgY29yZS51dGlscy5yZW1vdmVJdGVtcyhjaGFycywgbGFzdFNwYWNlLCBpIC0gbGFzdFNwYWNlKTtcbiAgICAgICAgICAgIGkgPSBsYXN0U3BhY2U7XG4gICAgICAgICAgICBsYXN0U3BhY2UgPSAtMTtcblxuICAgICAgICAgICAgbGluZVdpZHRocy5wdXNoKGxhc3RMaW5lV2lkdGgpO1xuICAgICAgICAgICAgbWF4TGluZVdpZHRoID0gTWF0aC5tYXgobWF4TGluZVdpZHRoLCBsYXN0TGluZVdpZHRoKTtcbiAgICAgICAgICAgIGxpbmUrKztcblxuICAgICAgICAgICAgcG9zLnggPSAwO1xuICAgICAgICAgICAgcG9zLnkgKz0gZGF0YS5saW5lSGVpZ2h0O1xuICAgICAgICAgICAgcHJldkNoYXJDb2RlID0gbnVsbDtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGNoYXJEYXRhID0gZGF0YS5jaGFyc1tjaGFyQ29kZV07XG5cbiAgICAgICAgaWYgKCFjaGFyRGF0YSlcbiAgICAgICAge1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAocHJldkNoYXJDb2RlICYmIGNoYXJEYXRhLmtlcm5pbmdbcHJldkNoYXJDb2RlXSlcbiAgICAgICAge1xuICAgICAgICAgICAgcG9zLnggKz0gY2hhckRhdGEua2VybmluZ1twcmV2Q2hhckNvZGVdO1xuICAgICAgICB9XG5cbiAgICAgICAgY2hhcnMucHVzaCh7dGV4dHVyZTpjaGFyRGF0YS50ZXh0dXJlLCBsaW5lOiBsaW5lLCBjaGFyQ29kZTogY2hhckNvZGUsIHBvc2l0aW9uOiBuZXcgY29yZS5Qb2ludChwb3MueCArIGNoYXJEYXRhLnhPZmZzZXQsIHBvcy55ICsgY2hhckRhdGEueU9mZnNldCl9KTtcbiAgICAgICAgbGFzdExpbmVXaWR0aCA9IHBvcy54ICsgKGNoYXJEYXRhLnRleHR1cmUud2lkdGggKyBjaGFyRGF0YS54T2Zmc2V0KTtcbiAgICAgICAgcG9zLnggKz0gY2hhckRhdGEueEFkdmFuY2U7XG4gICAgICAgIG1heExpbmVIZWlnaHQgPSBNYXRoLm1heChtYXhMaW5lSGVpZ2h0LCAoY2hhckRhdGEueU9mZnNldCArIGNoYXJEYXRhLnRleHR1cmUuaGVpZ2h0KSk7XG4gICAgICAgIHByZXZDaGFyQ29kZSA9IGNoYXJDb2RlO1xuICAgIH1cblxuICAgIGxpbmVXaWR0aHMucHVzaChsYXN0TGluZVdpZHRoKTtcbiAgICBtYXhMaW5lV2lkdGggPSBNYXRoLm1heChtYXhMaW5lV2lkdGgsIGxhc3RMaW5lV2lkdGgpO1xuXG4gICAgdmFyIGxpbmVBbGlnbk9mZnNldHMgPSBbXTtcblxuICAgIGZvciAoaSA9IDA7IGkgPD0gbGluZTsgaSsrKVxuICAgIHtcbiAgICAgICAgdmFyIGFsaWduT2Zmc2V0ID0gMDtcblxuICAgICAgICBpZiAodGhpcy5fZm9udC5hbGlnbiA9PT0gJ3JpZ2h0JylcbiAgICAgICAge1xuICAgICAgICAgICAgYWxpZ25PZmZzZXQgPSBtYXhMaW5lV2lkdGggLSBsaW5lV2lkdGhzW2ldO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHRoaXMuX2ZvbnQuYWxpZ24gPT09ICdjZW50ZXInKVxuICAgICAgICB7XG4gICAgICAgICAgICBhbGlnbk9mZnNldCA9IChtYXhMaW5lV2lkdGggLSBsaW5lV2lkdGhzW2ldKSAvIDI7XG4gICAgICAgIH1cblxuICAgICAgICBsaW5lQWxpZ25PZmZzZXRzLnB1c2goYWxpZ25PZmZzZXQpO1xuICAgIH1cblxuICAgIHZhciBsZW5DaGFycyA9IGNoYXJzLmxlbmd0aDtcbiAgICB2YXIgdGludCA9IHRoaXMudGludDtcblxuICAgIGZvciAoaSA9IDA7IGkgPCBsZW5DaGFyczsgaSsrKVxuICAgIHtcbiAgICAgICAgdmFyIGMgPSB0aGlzLl9nbHlwaHNbaV07IC8vIGdldCB0aGUgbmV4dCBnbHlwaCBzcHJpdGVcblxuICAgICAgICBpZiAoYylcbiAgICAgICAge1xuICAgICAgICAgICAgYy50ZXh0dXJlID0gY2hhcnNbaV0udGV4dHVyZTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgIHtcbiAgICAgICAgICAgIGMgPSBuZXcgY29yZS5TcHJpdGUoY2hhcnNbaV0udGV4dHVyZSk7XG4gICAgICAgICAgICB0aGlzLl9nbHlwaHMucHVzaChjKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGMucG9zaXRpb24ueCA9IChjaGFyc1tpXS5wb3NpdGlvbi54ICsgbGluZUFsaWduT2Zmc2V0c1tjaGFyc1tpXS5saW5lXSkgKiBzY2FsZTtcbiAgICAgICAgYy5wb3NpdGlvbi55ID0gY2hhcnNbaV0ucG9zaXRpb24ueSAqIHNjYWxlO1xuICAgICAgICBjLnNjYWxlLnggPSBjLnNjYWxlLnkgPSBzY2FsZTtcbiAgICAgICAgYy50aW50ID0gdGludDtcblxuICAgICAgICBpZiAoIWMucGFyZW50KVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmFkZENoaWxkKGMpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gcmVtb3ZlIHVubmVjZXNzYXJ5IGNoaWxkcmVuLlxuICAgIGZvciAoaSA9IGxlbkNoYXJzOyBpIDwgdGhpcy5fZ2x5cGhzLmxlbmd0aDsgKytpKVxuICAgIHtcbiAgICAgICAgdGhpcy5yZW1vdmVDaGlsZCh0aGlzLl9nbHlwaHNbaV0pO1xuICAgIH1cblxuICAgIHRoaXMudGV4dFdpZHRoID0gbWF4TGluZVdpZHRoICogc2NhbGU7XG4gICAgdGhpcy50ZXh0SGVpZ2h0ID0gKHBvcy55ICsgZGF0YS5saW5lSGVpZ2h0KSAqIHNjYWxlO1xuICAgIHRoaXMubWF4TGluZUhlaWdodCA9IG1heExpbmVIZWlnaHQgKiBzY2FsZTtcbn07XG5cbi8qKlxuICogVXBkYXRlcyB0aGUgdHJhbnNmb3JtIG9mIHRoaXMgb2JqZWN0XG4gKlxuICogQHByaXZhdGVcbiAqL1xuQml0bWFwVGV4dC5wcm90b3R5cGUudXBkYXRlVHJhbnNmb3JtID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLnZhbGlkYXRlKCk7XG4gICAgdGhpcy5jb250YWluZXJVcGRhdGVUcmFuc2Zvcm0oKTtcbn07XG5cbi8qKlxuICogVmFsaWRhdGVzIHRleHQgYmVmb3JlIGNhbGxpbmcgcGFyZW50J3MgZ2V0TG9jYWxCb3VuZHNcbiAqXG4gKiBAcmV0dXJuIHtQSVhJLlJlY3RhbmdsZX0gVGhlIHJlY3Rhbmd1bGFyIGJvdW5kaW5nIGFyZWFcbiAqL1xuXG5CaXRtYXBUZXh0LnByb3RvdHlwZS5nZXRMb2NhbEJvdW5kcyA9IGZ1bmN0aW9uKClcbntcbiAgICB0aGlzLnZhbGlkYXRlKCk7XG4gICAgcmV0dXJuIGNvcmUuQ29udGFpbmVyLnByb3RvdHlwZS5nZXRMb2NhbEJvdW5kcy5jYWxsKHRoaXMpO1xufTtcblxuLyoqXG4gKiBVcGRhdGVzIHRleHQgd2hlbiBuZWVkZWRcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5CaXRtYXBUZXh0LnByb3RvdHlwZS52YWxpZGF0ZSA9IGZ1bmN0aW9uKClcbntcbiAgICBpZiAodGhpcy5kaXJ0eSlcbiAgICB7XG4gICAgICAgIHRoaXMudXBkYXRlVGV4dCgpO1xuICAgICAgICB0aGlzLmRpcnR5ID0gZmFsc2U7XG4gICAgfVxufTtcblxuQml0bWFwVGV4dC5mb250cyA9IHt9O1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi9jb3JlJyk7XG5cbi8qKlxuICogQSBNb3ZpZUNsaXAgaXMgYSBzaW1wbGUgd2F5IHRvIGRpc3BsYXkgYW4gYW5pbWF0aW9uIGRlcGljdGVkIGJ5IGEgbGlzdCBvZiB0ZXh0dXJlcy5cbiAqXG4gKiBgYGBqc1xuICogdmFyIGFsaWVuSW1hZ2VzID0gW1wiaW1hZ2Vfc2VxdWVuY2VfMDEucG5nXCIsXCJpbWFnZV9zZXF1ZW5jZV8wMi5wbmdcIixcImltYWdlX3NlcXVlbmNlXzAzLnBuZ1wiLFwiaW1hZ2Vfc2VxdWVuY2VfMDQucG5nXCJdO1xuICogdmFyIHRleHR1cmVBcnJheSA9IFtdO1xuICpcbiAqIGZvciAodmFyIGk9MDsgaSA8IDQ7IGkrKylcbiAqIHtcbiAqICAgICAgdmFyIHRleHR1cmUgPSBQSVhJLlRleHR1cmUuZnJvbUltYWdlKGFsaWVuSW1hZ2VzW2ldKTtcbiAqICAgICAgdGV4dHVyZUFycmF5LnB1c2godGV4dHVyZSk7XG4gKiB9O1xuICpcbiAqIHZhciBtYyA9IG5ldyBQSVhJLk1vdmllQ2xpcCh0ZXh0dXJlQXJyYXkpO1xuICogYGBgXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLlNwcml0ZVxuICogQG1lbWJlcm9mIFBJWEkuZXh0cmFzXG4gKiBAcGFyYW0gdGV4dHVyZXMge1BJWEkuVGV4dHVyZVtdfE9iamVjdFtdfSBhbiBhcnJheSBvZiB7QGxpbmsgUElYSS5UZXh0dXJlfSBvciBmcmFtZSBvYmplY3RzIHRoYXQgbWFrZSB1cCB0aGUgYW5pbWF0aW9uXG4gKiBAcGFyYW0gdGV4dHVyZXNbXS50ZXh0dXJlIHtQSVhJLlRleHR1cmV9IHRoZSB7QGxpbmsgUElYSS5UZXh0dXJlfSBvZiB0aGUgZnJhbWVcbiAqIEBwYXJhbSB0ZXh0dXJlc1tdLnRpbWUge251bWJlcn0gdGhlIGR1cmF0aW9uIG9mIHRoZSBmcmFtZSBpbiBtc1xuICovXG5mdW5jdGlvbiBNb3ZpZUNsaXAodGV4dHVyZXMpXG57XG4gICAgY29yZS5TcHJpdGUuY2FsbCh0aGlzLCB0ZXh0dXJlc1swXSBpbnN0YW5jZW9mIGNvcmUuVGV4dHVyZSA/IHRleHR1cmVzWzBdIDogdGV4dHVyZXNbMF0udGV4dHVyZSk7XG5cbiAgICAvKipcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX3RleHR1cmVzID0gbnVsbDtcblxuICAgIC8qKlxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fZHVyYXRpb25zID0gbnVsbDtcblxuICAgIHRoaXMudGV4dHVyZXMgPSB0ZXh0dXJlcztcblxuICAgIC8qKlxuICAgICAqIFRoZSBzcGVlZCB0aGF0IHRoZSBNb3ZpZUNsaXAgd2lsbCBwbGF5IGF0LiBIaWdoZXIgaXMgZmFzdGVyLCBsb3dlciBpcyBzbG93ZXJcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAxXG4gICAgICovXG4gICAgdGhpcy5hbmltYXRpb25TcGVlZCA9IDE7XG5cbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIG9yIG5vdCB0aGUgbW92aWUgY2xpcCByZXBlYXRzIGFmdGVyIHBsYXlpbmcuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqIEBkZWZhdWx0IHRydWVcbiAgICAgKi9cbiAgICB0aGlzLmxvb3AgPSB0cnVlO1xuXG4gICAgLyoqXG4gICAgICogRnVuY3Rpb24gdG8gY2FsbCB3aGVuIGEgTW92aWVDbGlwIGZpbmlzaGVzIHBsYXlpbmdcbiAgICAgKlxuICAgICAqIEBtZXRob2RcbiAgICAgKiBAbWVtYmVyb2YgUElYSS5leHRyYXMuTW92aWVDbGlwI1xuICAgICAqL1xuICAgIHRoaXMub25Db21wbGV0ZSA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBFbGFwc2VkIHRpbWUgc2luY2UgYW5pbWF0aW9uIGhhcyBiZWVuIHN0YXJ0ZWQsIHVzZWQgaW50ZXJuYWxseSB0byBkaXNwbGF5IGN1cnJlbnQgdGV4dHVyZVxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fY3VycmVudFRpbWUgPSAwO1xuXG4gICAgLyoqXG4gICAgICogSW5kaWNhdGVzIGlmIHRoZSBNb3ZpZUNsaXAgaXMgY3VycmVudGx5IHBsYXlpbmdcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICogQHJlYWRvbmx5XG4gICAgICovXG4gICAgdGhpcy5wbGF5aW5nID0gZmFsc2U7XG59XG5cbi8vIGNvbnN0cnVjdG9yXG5Nb3ZpZUNsaXAucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShjb3JlLlNwcml0ZS5wcm90b3R5cGUpO1xuTW92aWVDbGlwLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IE1vdmllQ2xpcDtcbm1vZHVsZS5leHBvcnRzID0gTW92aWVDbGlwO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhNb3ZpZUNsaXAucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogdG90YWxGcmFtZXMgaXMgdGhlIHRvdGFsIG51bWJlciBvZiBmcmFtZXMgaW4gdGhlIE1vdmllQ2xpcC4gVGhpcyBpcyB0aGUgc2FtZSBhcyBudW1iZXIgb2YgdGV4dHVyZXNcbiAgICAgKiBhc3NpZ25lZCB0byB0aGUgTW92aWVDbGlwLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmV4dHJhcy5Nb3ZpZUNsaXAjXG4gICAgICogQGRlZmF1bHQgMFxuICAgICAqIEByZWFkb25seVxuICAgICAqL1xuICAgIHRvdGFsRnJhbWVzOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24oKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fdGV4dHVyZXMubGVuZ3RoO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFRoZSBhcnJheSBvZiB0ZXh0dXJlcyB1c2VkIGZvciB0aGlzIE1vdmllQ2xpcFxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5UZXh0dXJlW119XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZXh0cmFzLk1vdmllQ2xpcCNcbiAgICAgKlxuICAgICAqL1xuICAgIHRleHR1cmVzOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3RleHR1cmVzO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgaWYodmFsdWVbMF0gaW5zdGFuY2VvZiBjb3JlLlRleHR1cmUpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdGhpcy5fdGV4dHVyZXMgPSB2YWx1ZTtcbiAgICAgICAgICAgICAgICB0aGlzLl9kdXJhdGlvbnMgPSBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHRoaXMuX3RleHR1cmVzID0gW107XG4gICAgICAgICAgICAgICAgdGhpcy5fZHVyYXRpb25zID0gW107XG4gICAgICAgICAgICAgICAgZm9yKHZhciBpID0gMDsgaSA8IHZhbHVlLmxlbmd0aDsgaSsrKVxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fdGV4dHVyZXMucHVzaCh2YWx1ZVtpXS50ZXh0dXJlKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fZHVyYXRpb25zLnB1c2godmFsdWVbaV0udGltZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICogVGhlIE1vdmllQ2xpcHMgY3VycmVudCBmcmFtZSBpbmRleFxuICAgICpcbiAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAqIEBtZW1iZXJvZiBQSVhJLmV4dHJhcy5Nb3ZpZUNsaXAjXG4gICAgKiBAcmVhZG9ubHlcbiAgICAqL1xuICAgIGN1cnJlbnRGcmFtZToge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHZhciBjdXJyZW50RnJhbWUgPSBNYXRoLmZsb29yKHRoaXMuX2N1cnJlbnRUaW1lKSAlIHRoaXMuX3RleHR1cmVzLmxlbmd0aDtcbiAgICAgICAgICAgIGlmIChjdXJyZW50RnJhbWUgPCAwKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGN1cnJlbnRGcmFtZSArPSB0aGlzLl90ZXh0dXJlcy5sZW5ndGg7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gY3VycmVudEZyYW1lO1xuICAgICAgICB9XG4gICAgfVxuXG59KTtcblxuLyoqXG4gKiBTdG9wcyB0aGUgTW92aWVDbGlwXG4gKlxuICovXG5Nb3ZpZUNsaXAucHJvdG90eXBlLnN0b3AgPSBmdW5jdGlvbiAoKVxue1xuICAgIGlmKCF0aGlzLnBsYXlpbmcpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5wbGF5aW5nID0gZmFsc2U7XG4gICAgY29yZS50aWNrZXIuc2hhcmVkLnJlbW92ZSh0aGlzLnVwZGF0ZSwgdGhpcyk7XG59O1xuXG4vKipcbiAqIFBsYXlzIHRoZSBNb3ZpZUNsaXBcbiAqXG4gKi9cbk1vdmllQ2xpcC5wcm90b3R5cGUucGxheSA9IGZ1bmN0aW9uICgpXG57XG4gICAgaWYodGhpcy5wbGF5aW5nKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMucGxheWluZyA9IHRydWU7XG4gICAgY29yZS50aWNrZXIuc2hhcmVkLmFkZCh0aGlzLnVwZGF0ZSwgdGhpcyk7XG59O1xuXG4vKipcbiAqIFN0b3BzIHRoZSBNb3ZpZUNsaXAgYW5kIGdvZXMgdG8gYSBzcGVjaWZpYyBmcmFtZVxuICpcbiAqIEBwYXJhbSBmcmFtZU51bWJlciB7bnVtYmVyfSBmcmFtZSBpbmRleCB0byBzdG9wIGF0XG4gKi9cbk1vdmllQ2xpcC5wcm90b3R5cGUuZ290b0FuZFN0b3AgPSBmdW5jdGlvbiAoZnJhbWVOdW1iZXIpXG57XG4gICAgdGhpcy5zdG9wKCk7XG5cbiAgICB0aGlzLl9jdXJyZW50VGltZSA9IGZyYW1lTnVtYmVyO1xuXG4gICAgdGhpcy5fdGV4dHVyZSA9IHRoaXMuX3RleHR1cmVzW3RoaXMuY3VycmVudEZyYW1lXTtcbn07XG5cbi8qKlxuICogR29lcyB0byBhIHNwZWNpZmljIGZyYW1lIGFuZCBiZWdpbnMgcGxheWluZyB0aGUgTW92aWVDbGlwXG4gKlxuICogQHBhcmFtIGZyYW1lTnVtYmVyIHtudW1iZXJ9IGZyYW1lIGluZGV4IHRvIHN0YXJ0IGF0XG4gKi9cbk1vdmllQ2xpcC5wcm90b3R5cGUuZ290b0FuZFBsYXkgPSBmdW5jdGlvbiAoZnJhbWVOdW1iZXIpXG57XG4gICAgdGhpcy5fY3VycmVudFRpbWUgPSBmcmFtZU51bWJlcjtcblxuICAgIHRoaXMucGxheSgpO1xufTtcblxuLypcbiAqIFVwZGF0ZXMgdGhlIG9iamVjdCB0cmFuc2Zvcm0gZm9yIHJlbmRlcmluZ1xuICogQHByaXZhdGVcbiAqL1xuTW92aWVDbGlwLnByb3RvdHlwZS51cGRhdGUgPSBmdW5jdGlvbiAoZGVsdGFUaW1lKVxue1xuICAgIHZhciBlbGFwc2VkID0gdGhpcy5hbmltYXRpb25TcGVlZCAqIGRlbHRhVGltZTtcblxuICAgIGlmICh0aGlzLl9kdXJhdGlvbnMgIT09IG51bGwpXG4gICAge1xuICAgICAgICB2YXIgbGFnID0gdGhpcy5fY3VycmVudFRpbWUgJSAxICogdGhpcy5fZHVyYXRpb25zW3RoaXMuY3VycmVudEZyYW1lXTtcblxuICAgICAgICBsYWcgKz0gZWxhcHNlZCAvIDYwICogMTAwMDtcblxuICAgICAgICB3aGlsZSAobGFnIDwgMClcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5fY3VycmVudFRpbWUtLTtcbiAgICAgICAgICAgIGxhZyArPSB0aGlzLl9kdXJhdGlvbnNbdGhpcy5jdXJyZW50RnJhbWVdO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIHNpZ24gPSBNYXRoLnNpZ24odGhpcy5hbmltYXRpb25TcGVlZCAqIGRlbHRhVGltZSk7XG4gICAgICAgIHRoaXMuX2N1cnJlbnRUaW1lID0gTWF0aC5mbG9vcih0aGlzLl9jdXJyZW50VGltZSk7XG5cbiAgICAgICAgd2hpbGUgKGxhZyA+PSB0aGlzLl9kdXJhdGlvbnNbdGhpcy5jdXJyZW50RnJhbWVdKVxuICAgICAgICB7XG4gICAgICAgICAgICBsYWcgLT0gdGhpcy5fZHVyYXRpb25zW3RoaXMuY3VycmVudEZyYW1lXSAqIHNpZ247XG4gICAgICAgICAgICB0aGlzLl9jdXJyZW50VGltZSArPSBzaWduO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fY3VycmVudFRpbWUgKz0gbGFnIC8gdGhpcy5fZHVyYXRpb25zW3RoaXMuY3VycmVudEZyYW1lXTtcbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgdGhpcy5fY3VycmVudFRpbWUgKz0gZWxhcHNlZDtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5fY3VycmVudFRpbWUgPCAwICYmICF0aGlzLmxvb3ApXG4gICAge1xuICAgICAgICB0aGlzLmdvdG9BbmRTdG9wKDApO1xuXG4gICAgICAgIGlmICh0aGlzLm9uQ29tcGxldGUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMub25Db21wbGV0ZSgpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGVsc2UgaWYgKHRoaXMuX2N1cnJlbnRUaW1lID49IHRoaXMuX3RleHR1cmVzLmxlbmd0aCAmJiAhdGhpcy5sb29wKVxuICAgIHtcbiAgICAgICAgdGhpcy5nb3RvQW5kU3RvcCh0aGlzLl90ZXh0dXJlcy5sZW5ndGggLSAxKTtcblxuICAgICAgICBpZiAodGhpcy5vbkNvbXBsZXRlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLm9uQ29tcGxldGUoKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICB0aGlzLl90ZXh0dXJlID0gdGhpcy5fdGV4dHVyZXNbdGhpcy5jdXJyZW50RnJhbWVdO1xuICAgIH1cblxufTtcblxuLypcbiAqIFN0b3BzIHRoZSBNb3ZpZUNsaXAgYW5kIGRlc3Ryb3lzIGl0XG4gKlxuICovXG5Nb3ZpZUNsaXAucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoIClcbntcbiAgICB0aGlzLnN0b3AoKTtcbiAgICBjb3JlLlNwcml0ZS5wcm90b3R5cGUuZGVzdHJveS5jYWxsKHRoaXMpO1xufTtcblxuLyoqXG4gKiBBIHNob3J0IGhhbmQgd2F5IG9mIGNyZWF0aW5nIGEgbW92aWVjbGlwIGZyb20gYW4gYXJyYXkgb2YgZnJhbWUgaWRzXG4gKlxuICogQHN0YXRpY1xuICogQHBhcmFtIGZyYW1lcyB7c3RyaW5nW119IHRoZSBhcnJheSBvZiBmcmFtZXMgaWRzIHRoZSBtb3ZpZWNsaXAgd2lsbCB1c2UgYXMgaXRzIHRleHR1cmUgZnJhbWVzXG4gKi9cbk1vdmllQ2xpcC5mcm9tRnJhbWVzID0gZnVuY3Rpb24gKGZyYW1lcylcbntcbiAgICB2YXIgdGV4dHVyZXMgPSBbXTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZnJhbWVzLmxlbmd0aDsgKytpKVxuICAgIHtcbiAgICAgICAgdGV4dHVyZXMucHVzaChuZXcgY29yZS5UZXh0dXJlLmZyb21GcmFtZShmcmFtZXNbaV0pKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IE1vdmllQ2xpcCh0ZXh0dXJlcyk7XG59O1xuXG4vKipcbiAqIEEgc2hvcnQgaGFuZCB3YXkgb2YgY3JlYXRpbmcgYSBtb3ZpZWNsaXAgZnJvbSBhbiBhcnJheSBvZiBpbWFnZSBpZHNcbiAqXG4gKiBAc3RhdGljXG4gKiBAcGFyYW0gaW1hZ2VzIHtzdHJpbmdbXX0gdGhlIGFycmF5IG9mIGltYWdlIHVybHMgdGhlIG1vdmllY2xpcCB3aWxsIHVzZSBhcyBpdHMgdGV4dHVyZSBmcmFtZXNcbiAqL1xuTW92aWVDbGlwLmZyb21JbWFnZXMgPSBmdW5jdGlvbiAoaW1hZ2VzKVxue1xuICAgIHZhciB0ZXh0dXJlcyA9IFtdO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBpbWFnZXMubGVuZ3RoOyArK2kpXG4gICAge1xuICAgICAgICB0ZXh0dXJlcy5wdXNoKG5ldyBjb3JlLlRleHR1cmUuZnJvbUltYWdlKGltYWdlc1tpXSkpO1xuICAgIH1cblxuICAgIHJldHVybiBuZXcgTW92aWVDbGlwKHRleHR1cmVzKTtcbn07IiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi9jb3JlJyksXG4gICAgLy8gYSBzcHJpdGUgdXNlIGRmb3IgcmVuZGVyaW5nIHRleHR1cmVzLi5cbiAgICB0ZW1wUG9pbnQgPSBuZXcgY29yZS5Qb2ludCgpLFxuICAgIENhbnZhc1RpbnRlciA9IHJlcXVpcmUoJy4uL2NvcmUvcmVuZGVyZXJzL2NhbnZhcy91dGlscy9DYW52YXNUaW50ZXInKTtcblxuLyoqXG4gKiBBIHRpbGluZyBzcHJpdGUgaXMgYSBmYXN0IHdheSBvZiByZW5kZXJpbmcgYSB0aWxpbmcgaW1hZ2VcbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuU3ByaXRlXG4gKiBAbWVtYmVyb2YgUElYSS5leHRyYXNcbiAqIEBwYXJhbSB0ZXh0dXJlIHtUZXh0dXJlfSB0aGUgdGV4dHVyZSBvZiB0aGUgdGlsaW5nIHNwcml0ZVxuICogQHBhcmFtIHdpZHRoIHtudW1iZXJ9ICB0aGUgd2lkdGggb2YgdGhlIHRpbGluZyBzcHJpdGVcbiAqIEBwYXJhbSBoZWlnaHQge251bWJlcn0gdGhlIGhlaWdodCBvZiB0aGUgdGlsaW5nIHNwcml0ZVxuICovXG5mdW5jdGlvbiBUaWxpbmdTcHJpdGUodGV4dHVyZSwgd2lkdGgsIGhlaWdodClcbntcbiAgICBjb3JlLlNwcml0ZS5jYWxsKHRoaXMsIHRleHR1cmUpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHNjYWxpbmcgb2YgdGhlIGltYWdlIHRoYXQgaXMgYmVpbmcgdGlsZWRcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuUG9pbnR9XG4gICAgICovXG4gICAgdGhpcy50aWxlU2NhbGUgPSBuZXcgY29yZS5Qb2ludCgxLDEpO1xuXG5cbiAgICAvKipcbiAgICAgKiBUaGUgb2Zmc2V0IHBvc2l0aW9uIG9mIHRoZSBpbWFnZSB0aGF0IGlzIGJlaW5nIHRpbGVkXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlBvaW50fVxuICAgICAqL1xuICAgIHRoaXMudGlsZVBvc2l0aW9uID0gbmV3IGNvcmUuUG9pbnQoMCwwKTtcblxuICAgIC8vLy8vIHByaXZhdGVcblxuICAgIC8qKlxuICAgICAqIFRoZSB3aXRoIG9mIHRoZSB0aWxpbmcgc3ByaXRlXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl93aWR0aCA9IHdpZHRoIHx8IDEwMDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBoZWlnaHQgb2YgdGhlIHRpbGluZyBzcHJpdGVcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX2hlaWdodCA9IGhlaWdodCB8fCAxMDA7XG5cbiAgICAvKipcbiAgICAgKiBBbiBpbnRlcm5hbCBXZWJHTCBVViBjYWNoZS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuVGV4dHVyZVV2c31cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX3V2cyA9IG5ldyBjb3JlLlRleHR1cmVVdnMoKTtcblxuICAgIHRoaXMuX2NhbnZhc1BhdHRlcm4gPSBudWxsO1xuXG4gICAgLy9UT0RPIG1vdmUuLlxuICAgIHRoaXMuc2hhZGVyID0gbmV3IGNvcmUuQWJzdHJhY3RGaWx0ZXIoXG5cbiAgICAgIFtcbiAgICAgICAgJ3ByZWNpc2lvbiBsb3dwIGZsb2F0OycsXG4gICAgICAgICdhdHRyaWJ1dGUgdmVjMiBhVmVydGV4UG9zaXRpb247JyxcbiAgICAgICAgJ2F0dHJpYnV0ZSB2ZWMyIGFUZXh0dXJlQ29vcmQ7JyxcbiAgICAgICAgJ2F0dHJpYnV0ZSB2ZWM0IGFDb2xvcjsnLFxuXG4gICAgICAgICd1bmlmb3JtIG1hdDMgcHJvamVjdGlvbk1hdHJpeDsnLFxuXG4gICAgICAgICd1bmlmb3JtIHZlYzQgdUZyYW1lOycsXG4gICAgICAgICd1bmlmb3JtIHZlYzQgdVRyYW5zZm9ybTsnLFxuXG4gICAgICAgICd2YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDsnLFxuICAgICAgICAndmFyeWluZyB2ZWM0IHZDb2xvcjsnLFxuXG4gICAgICAgICd2b2lkIG1haW4odm9pZCl7JyxcbiAgICAgICAgJyAgIGdsX1Bvc2l0aW9uID0gdmVjNCgocHJvamVjdGlvbk1hdHJpeCAqIHZlYzMoYVZlcnRleFBvc2l0aW9uLCAxLjApKS54eSwgMC4wLCAxLjApOycsXG5cbiAgICAgICAgJyAgIHZlYzIgY29vcmQgPSBhVGV4dHVyZUNvb3JkOycsXG4gICAgICAgICcgICBjb29yZCAtPSB1VHJhbnNmb3JtLnh5OycsXG4gICAgICAgICcgICBjb29yZCAvPSB1VHJhbnNmb3JtLnp3OycsXG4gICAgICAgICcgICB2VGV4dHVyZUNvb3JkID0gY29vcmQ7JyxcblxuICAgICAgICAnICAgdkNvbG9yID0gdmVjNChhQ29sb3IucmdiICogYUNvbG9yLmEsIGFDb2xvci5hKTsnLFxuICAgICAgICAnfSdcbiAgICAgIF0uam9pbignXFxuJyksXG4gICAgICBbXG4gICAgICAgICdwcmVjaXNpb24gbG93cCBmbG9hdDsnLFxuXG4gICAgICAgICd2YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDsnLFxuICAgICAgICAndmFyeWluZyB2ZWM0IHZDb2xvcjsnLFxuXG4gICAgICAgICd1bmlmb3JtIHNhbXBsZXIyRCB1U2FtcGxlcjsnLFxuICAgICAgICAndW5pZm9ybSB2ZWM0IHVGcmFtZTsnLFxuICAgICAgICAndW5pZm9ybSB2ZWMyIHVQaXhlbFNpemU7JyxcblxuICAgICAgICAndm9pZCBtYWluKHZvaWQpeycsXG5cbiAgICAgICAgJyAgIHZlYzIgY29vcmQgPSBtb2QodlRleHR1cmVDb29yZCwgdUZyYW1lLnp3KTsnLFxuICAgICAgICAnICAgY29vcmQgPSBjbGFtcChjb29yZCwgdVBpeGVsU2l6ZSwgdUZyYW1lLnp3IC0gdVBpeGVsU2l6ZSk7JyxcbiAgICAgICAgJyAgIGNvb3JkICs9IHVGcmFtZS54eTsnLFxuXG4gICAgICAgICcgICBnbF9GcmFnQ29sb3IgPSAgdGV4dHVyZTJEKHVTYW1wbGVyLCBjb29yZCkgKiB2Q29sb3IgOycsXG4gICAgICAgICd9J1xuICAgICAgXS5qb2luKCdcXG4nKSxcblxuICAgICAgICAgICAgLy8gc2V0IHRoZSB1bmlmb3Jtc1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHVGcmFtZTogeyB0eXBlOiAnNGZ2JywgdmFsdWU6IFswLDAsMSwxXSB9LFxuICAgICAgICAgICAgICAgIHVUcmFuc2Zvcm06IHsgdHlwZTogJzRmdicsIHZhbHVlOiBbMCwwLDEsMV0gfSxcbiAgICAgICAgICAgICAgICB1UGl4ZWxTaXplIDogeyB0eXBlIDogJzJmdicsIHZhbHVlOiBbMSwgMV19XG4gICAgICAgICAgICB9XG4gICAgICApO1xufVxuXG5UaWxpbmdTcHJpdGUucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShjb3JlLlNwcml0ZS5wcm90b3R5cGUpO1xuVGlsaW5nU3ByaXRlLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFRpbGluZ1Nwcml0ZTtcbm1vZHVsZS5leHBvcnRzID0gVGlsaW5nU3ByaXRlO1xuXG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKFRpbGluZ1Nwcml0ZS5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBUaGUgd2lkdGggb2YgdGhlIHNwcml0ZSwgc2V0dGluZyB0aGlzIHdpbGwgYWN0dWFsbHkgbW9kaWZ5IHRoZSBzY2FsZSB0byBhY2hpZXZlIHRoZSB2YWx1ZSBzZXRcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5leHRyYXMuVGlsaW5nU3ByaXRlI1xuICAgICAqL1xuICAgIHdpZHRoOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3dpZHRoO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5fd2lkdGggPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBUaGUgaGVpZ2h0IG9mIHRoZSBUaWxpbmdTcHJpdGUsIHNldHRpbmcgdGhpcyB3aWxsIGFjdHVhbGx5IG1vZGlmeSB0aGUgc2NhbGUgdG8gYWNoaWV2ZSB0aGUgdmFsdWUgc2V0XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZXh0cmFzLlRpbGluZ1Nwcml0ZSNcbiAgICAgKi9cbiAgICBoZWlnaHQ6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5faGVpZ2h0O1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5faGVpZ2h0ID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG59KTtcblxuVGlsaW5nU3ByaXRlLnByb3RvdHlwZS5fb25UZXh0dXJlVXBkYXRlID0gZnVuY3Rpb24gKClcbntcbiAgICByZXR1cm47XG59O1xuXG5cbi8qKlxuICogUmVuZGVycyB0aGUgb2JqZWN0IHVzaW5nIHRoZSBXZWJHTCByZW5kZXJlclxuICpcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5XZWJHTFJlbmRlcmVyfVxuICogQHByaXZhdGVcbiAqL1xuVGlsaW5nU3ByaXRlLnByb3RvdHlwZS5fcmVuZGVyV2ViR0wgPSBmdW5jdGlvbiAocmVuZGVyZXIpXG57XG4gICAgLy8gdHdlYWsgb3VyIHRleHR1cmUgdGVtcG9yYXJpbHkuLlxuICAgIHZhciB0ZXh0dXJlID0gdGhpcy5fdGV4dHVyZTtcblxuICAgIGlmKCF0ZXh0dXJlIHx8ICF0ZXh0dXJlLl91dnMpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFyIHRlbXBVdnMgPSB0ZXh0dXJlLl91dnMsXG4gICAgICAgIHRlbXBXaWR0aCA9IHRleHR1cmUuX2ZyYW1lLndpZHRoLFxuICAgICAgICB0ZW1wSGVpZ2h0ID0gdGV4dHVyZS5fZnJhbWUuaGVpZ2h0LFxuICAgICAgICB0dyA9IHRleHR1cmUuYmFzZVRleHR1cmUud2lkdGgsXG4gICAgICAgIHRoID0gdGV4dHVyZS5iYXNlVGV4dHVyZS5oZWlnaHQ7XG5cbiAgICB0ZXh0dXJlLl91dnMgPSB0aGlzLl91dnM7XG4gICAgdGV4dHVyZS5fZnJhbWUud2lkdGggPSB0aGlzLndpZHRoO1xuICAgIHRleHR1cmUuX2ZyYW1lLmhlaWdodCA9IHRoaXMuaGVpZ2h0O1xuXG4gICAgdGhpcy5zaGFkZXIudW5pZm9ybXMudVBpeGVsU2l6ZS52YWx1ZVswXSA9IDEuMC90dztcbiAgICB0aGlzLnNoYWRlci51bmlmb3Jtcy51UGl4ZWxTaXplLnZhbHVlWzFdID0gMS4wL3RoO1xuXG4gICAgdGhpcy5zaGFkZXIudW5pZm9ybXMudUZyYW1lLnZhbHVlWzBdID0gdGVtcFV2cy54MDtcbiAgICB0aGlzLnNoYWRlci51bmlmb3Jtcy51RnJhbWUudmFsdWVbMV0gPSB0ZW1wVXZzLnkwO1xuICAgIHRoaXMuc2hhZGVyLnVuaWZvcm1zLnVGcmFtZS52YWx1ZVsyXSA9IHRlbXBVdnMueDEgLSB0ZW1wVXZzLngwO1xuICAgIHRoaXMuc2hhZGVyLnVuaWZvcm1zLnVGcmFtZS52YWx1ZVszXSA9IHRlbXBVdnMueTIgLSB0ZW1wVXZzLnkwO1xuXG4gICAgdGhpcy5zaGFkZXIudW5pZm9ybXMudVRyYW5zZm9ybS52YWx1ZVswXSA9ICh0aGlzLnRpbGVQb3NpdGlvbi54ICUgKHRlbXBXaWR0aCAqIHRoaXMudGlsZVNjYWxlLngpKSAvIHRoaXMuX3dpZHRoO1xuICAgIHRoaXMuc2hhZGVyLnVuaWZvcm1zLnVUcmFuc2Zvcm0udmFsdWVbMV0gPSAodGhpcy50aWxlUG9zaXRpb24ueSAlICh0ZW1wSGVpZ2h0ICogdGhpcy50aWxlU2NhbGUueSkpIC8gdGhpcy5faGVpZ2h0O1xuICAgIHRoaXMuc2hhZGVyLnVuaWZvcm1zLnVUcmFuc2Zvcm0udmFsdWVbMl0gPSAoIHR3IC8gdGhpcy5fd2lkdGggKSAqIHRoaXMudGlsZVNjYWxlLng7XG4gICAgdGhpcy5zaGFkZXIudW5pZm9ybXMudVRyYW5zZm9ybS52YWx1ZVszXSA9ICggdGggLyB0aGlzLl9oZWlnaHQgKSAqIHRoaXMudGlsZVNjYWxlLnk7XG5cbiAgICByZW5kZXJlci5zZXRPYmplY3RSZW5kZXJlcihyZW5kZXJlci5wbHVnaW5zLnNwcml0ZSk7XG4gICAgcmVuZGVyZXIucGx1Z2lucy5zcHJpdGUucmVuZGVyKHRoaXMpO1xuXG4gICAgdGV4dHVyZS5fdXZzID0gdGVtcFV2cztcbiAgICB0ZXh0dXJlLl9mcmFtZS53aWR0aCA9IHRlbXBXaWR0aDtcbiAgICB0ZXh0dXJlLl9mcmFtZS5oZWlnaHQgPSB0ZW1wSGVpZ2h0O1xufTtcblxuLyoqXG4gKiBSZW5kZXJzIHRoZSBvYmplY3QgdXNpbmcgdGhlIENhbnZhcyByZW5kZXJlclxuICpcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5DYW52YXNSZW5kZXJlcn0gYSByZWZlcmVuY2UgdG8gdGhlIGNhbnZhcyByZW5kZXJlclxuICogQHByaXZhdGVcbiAqL1xuVGlsaW5nU3ByaXRlLnByb3RvdHlwZS5fcmVuZGVyQ2FudmFzID0gZnVuY3Rpb24gKHJlbmRlcmVyKVxue1xuICAgIHZhciB0ZXh0dXJlID0gdGhpcy5fdGV4dHVyZTtcblxuICAgIGlmICghdGV4dHVyZS5iYXNlVGV4dHVyZS5oYXNMb2FkZWQpXG4gICAge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHZhciBjb250ZXh0ID0gcmVuZGVyZXIuY29udGV4dCxcbiAgICAgICAgdHJhbnNmb3JtID0gdGhpcy53b3JsZFRyYW5zZm9ybSxcbiAgICAgICAgcmVzb2x1dGlvbiA9IHJlbmRlcmVyLnJlc29sdXRpb24sXG4gICAgICAgIGJhc2VUZXh0dXJlID0gdGV4dHVyZS5iYXNlVGV4dHVyZSxcbiAgICAgICAgbW9kWCA9ICh0aGlzLnRpbGVQb3NpdGlvbi54IC8gdGhpcy50aWxlU2NhbGUueCkgJSB0ZXh0dXJlLl9mcmFtZS53aWR0aCxcbiAgICAgICAgbW9kWSA9ICh0aGlzLnRpbGVQb3NpdGlvbi55IC8gdGhpcy50aWxlU2NhbGUueSkgJSB0ZXh0dXJlLl9mcmFtZS5oZWlnaHQ7XG5cbiAgICAvLyBjcmVhdGUgYSBuaWNlIHNoaW55IHBhdHRlcm4hXG4gICAgLy8gVE9ETyB0aGlzIG5lZWRzIHRvIGJlIHJlZnJlc2hlZCBpZiB0ZXh0dXJlIGNoYW5nZXMuLlxuICAgIGlmKCF0aGlzLl9jYW52YXNQYXR0ZXJuKVxuICAgIHtcbiAgICAgICAgLy8gY3V0IGFuIG9iamVjdCBmcm9tIGEgc3ByaXRlc2hlZXQuLlxuICAgICAgICB2YXIgdGVtcENhbnZhcyA9IG5ldyBjb3JlLkNhbnZhc0J1ZmZlcih0ZXh0dXJlLl9mcmFtZS53aWR0aCwgdGV4dHVyZS5fZnJhbWUuaGVpZ2h0KTtcblxuICAgICAgICAvLyBUaW50IHRoZSB0aWxpbmcgc3ByaXRlXG4gICAgICAgIGlmICh0aGlzLnRpbnQgIT09IDB4RkZGRkZGKVxuICAgICAgICB7XG4gICAgICAgICAgICBpZiAodGhpcy5jYWNoZWRUaW50ICE9PSB0aGlzLnRpbnQpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdGhpcy5jYWNoZWRUaW50ID0gdGhpcy50aW50O1xuXG4gICAgICAgICAgICAgICAgdGhpcy50aW50ZWRUZXh0dXJlID0gQ2FudmFzVGludGVyLmdldFRpbnRlZFRleHR1cmUodGhpcywgdGhpcy50aW50KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRlbXBDYW52YXMuY29udGV4dC5kcmF3SW1hZ2UodGhpcy50aW50ZWRUZXh0dXJlLCAwLCAwKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRlbXBDYW52YXMuY29udGV4dC5kcmF3SW1hZ2UoYmFzZVRleHR1cmUuc291cmNlLCAtdGV4dHVyZS5fZnJhbWUueCwgLXRleHR1cmUuX2ZyYW1lLnkpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX2NhbnZhc1BhdHRlcm4gPSB0ZW1wQ2FudmFzLmNvbnRleHQuY3JlYXRlUGF0dGVybiggdGVtcENhbnZhcy5jYW52YXMsICdyZXBlYXQnICk7XG4gICAgfVxuXG4gICAgLy8gc2V0IGNvbnRleHQgc3RhdGUuLlxuICAgIGNvbnRleHQuZ2xvYmFsQWxwaGEgPSB0aGlzLndvcmxkQWxwaGE7XG4gICAgY29udGV4dC5zZXRUcmFuc2Zvcm0odHJhbnNmb3JtLmEgKiByZXNvbHV0aW9uLFxuICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2Zvcm0uYiAqIHJlc29sdXRpb24sXG4gICAgICAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybS5jICogcmVzb2x1dGlvbixcbiAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtLmQgKiByZXNvbHV0aW9uLFxuICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2Zvcm0udHggKiByZXNvbHV0aW9uLFxuICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2Zvcm0udHkgKiByZXNvbHV0aW9uKTtcblxuICAgIC8vIFRPRE8gLSB0aGlzIHNob3VsZCBiZSByb2xsZWQgaW50byB0aGUgc2V0VHJhbnNmb3JtIGFib3ZlLi5cbiAgICBjb250ZXh0LnNjYWxlKHRoaXMudGlsZVNjYWxlLngsdGhpcy50aWxlU2NhbGUueSk7XG5cbiAgICBjb250ZXh0LnRyYW5zbGF0ZShtb2RYICsgKHRoaXMuYW5jaG9yLnggKiAtdGhpcy5fd2lkdGggKSxcbiAgICAgICAgICAgICAgICAgICAgICBtb2RZICsgKHRoaXMuYW5jaG9yLnkgKiAtdGhpcy5faGVpZ2h0KSk7XG5cbiAgICAvLyBjaGVjayBibGVuZCBtb2RlXG4gICAgdmFyIGNvbXBvc2l0ZU9wZXJhdGlvbiA9IHJlbmRlcmVyLmJsZW5kTW9kZXNbdGhpcy5ibGVuZE1vZGVdO1xuICAgIGlmIChjb21wb3NpdGVPcGVyYXRpb24gIT09IHJlbmRlcmVyLmNvbnRleHQuZ2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uKVxuICAgIHtcbiAgICAgICAgY29udGV4dC5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb24gPSBjb21wb3NpdGVPcGVyYXRpb247XG4gICAgfVxuXG4gICAgLy8gZmlsbCB0aGUgcGF0dGVybiFcbiAgICBjb250ZXh0LmZpbGxTdHlsZSA9IHRoaXMuX2NhbnZhc1BhdHRlcm47XG4gICAgY29udGV4dC5maWxsUmVjdCgtbW9kWCxcbiAgICAgICAgICAgICAgICAgICAgIC1tb2RZLFxuICAgICAgICAgICAgICAgICAgICAgdGhpcy5fd2lkdGggLyB0aGlzLnRpbGVTY2FsZS54LFxuICAgICAgICAgICAgICAgICAgICAgdGhpcy5faGVpZ2h0IC8gdGhpcy50aWxlU2NhbGUueSk7XG5cblxuICAgIC8vVE9ETyAtIHByZXR0eSBzdXJlIHRoaXMgY2FuIGJlIGRlbGV0ZWQuLi5cbiAgICAvL2NvbnRleHQudHJhbnNsYXRlKC10aGlzLnRpbGVQb3NpdGlvbi54ICsgKHRoaXMuYW5jaG9yLnggKiB0aGlzLl93aWR0aCksIC10aGlzLnRpbGVQb3NpdGlvbi55ICsgKHRoaXMuYW5jaG9yLnkgKiB0aGlzLl9oZWlnaHQpKTtcbiAgICAvL2NvbnRleHQuc2NhbGUoMSAvIHRoaXMudGlsZVNjYWxlLngsIDEgLyB0aGlzLnRpbGVTY2FsZS55KTtcbn07XG5cblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBmcmFtaW5nIHJlY3RhbmdsZSBvZiB0aGUgc3ByaXRlIGFzIGEgUmVjdGFuZ2xlIG9iamVjdFxuKlxuICogQHJldHVybiB7UElYSS5SZWN0YW5nbGV9IHRoZSBmcmFtaW5nIHJlY3RhbmdsZVxuICovXG5UaWxpbmdTcHJpdGUucHJvdG90eXBlLmdldEJvdW5kcyA9IGZ1bmN0aW9uICgpXG57XG4gICAgdmFyIHdpZHRoID0gdGhpcy5fd2lkdGg7XG4gICAgdmFyIGhlaWdodCA9IHRoaXMuX2hlaWdodDtcblxuICAgIHZhciB3MCA9IHdpZHRoICogKDEtdGhpcy5hbmNob3IueCk7XG4gICAgdmFyIHcxID0gd2lkdGggKiAtdGhpcy5hbmNob3IueDtcblxuICAgIHZhciBoMCA9IGhlaWdodCAqICgxLXRoaXMuYW5jaG9yLnkpO1xuICAgIHZhciBoMSA9IGhlaWdodCAqIC10aGlzLmFuY2hvci55O1xuXG4gICAgdmFyIHdvcmxkVHJhbnNmb3JtID0gdGhpcy53b3JsZFRyYW5zZm9ybTtcblxuICAgIHZhciBhID0gd29ybGRUcmFuc2Zvcm0uYTtcbiAgICB2YXIgYiA9IHdvcmxkVHJhbnNmb3JtLmI7XG4gICAgdmFyIGMgPSB3b3JsZFRyYW5zZm9ybS5jO1xuICAgIHZhciBkID0gd29ybGRUcmFuc2Zvcm0uZDtcbiAgICB2YXIgdHggPSB3b3JsZFRyYW5zZm9ybS50eDtcbiAgICB2YXIgdHkgPSB3b3JsZFRyYW5zZm9ybS50eTtcblxuICAgIHZhciB4MSA9IGEgKiB3MSArIGMgKiBoMSArIHR4O1xuICAgIHZhciB5MSA9IGQgKiBoMSArIGIgKiB3MSArIHR5O1xuXG4gICAgdmFyIHgyID0gYSAqIHcwICsgYyAqIGgxICsgdHg7XG4gICAgdmFyIHkyID0gZCAqIGgxICsgYiAqIHcwICsgdHk7XG5cbiAgICB2YXIgeDMgPSBhICogdzAgKyBjICogaDAgKyB0eDtcbiAgICB2YXIgeTMgPSBkICogaDAgKyBiICogdzAgKyB0eTtcblxuICAgIHZhciB4NCA9ICBhICogdzEgKyBjICogaDAgKyB0eDtcbiAgICB2YXIgeTQgPSAgZCAqIGgwICsgYiAqIHcxICsgdHk7XG5cbiAgICB2YXIgbWluWCxcbiAgICAgICAgbWF4WCxcbiAgICAgICAgbWluWSxcbiAgICAgICAgbWF4WTtcblxuICAgIG1pblggPSB4MTtcbiAgICBtaW5YID0geDIgPCBtaW5YID8geDIgOiBtaW5YO1xuICAgIG1pblggPSB4MyA8IG1pblggPyB4MyA6IG1pblg7XG4gICAgbWluWCA9IHg0IDwgbWluWCA/IHg0IDogbWluWDtcblxuICAgIG1pblkgPSB5MTtcbiAgICBtaW5ZID0geTIgPCBtaW5ZID8geTIgOiBtaW5ZO1xuICAgIG1pblkgPSB5MyA8IG1pblkgPyB5MyA6IG1pblk7XG4gICAgbWluWSA9IHk0IDwgbWluWSA/IHk0IDogbWluWTtcblxuICAgIG1heFggPSB4MTtcbiAgICBtYXhYID0geDIgPiBtYXhYID8geDIgOiBtYXhYO1xuICAgIG1heFggPSB4MyA+IG1heFggPyB4MyA6IG1heFg7XG4gICAgbWF4WCA9IHg0ID4gbWF4WCA/IHg0IDogbWF4WDtcblxuICAgIG1heFkgPSB5MTtcbiAgICBtYXhZID0geTIgPiBtYXhZID8geTIgOiBtYXhZO1xuICAgIG1heFkgPSB5MyA+IG1heFkgPyB5MyA6IG1heFk7XG4gICAgbWF4WSA9IHk0ID4gbWF4WSA/IHk0IDogbWF4WTtcblxuICAgIHZhciBib3VuZHMgPSB0aGlzLl9ib3VuZHM7XG5cbiAgICBib3VuZHMueCA9IG1pblg7XG4gICAgYm91bmRzLndpZHRoID0gbWF4WCAtIG1pblg7XG5cbiAgICBib3VuZHMueSA9IG1pblk7XG4gICAgYm91bmRzLmhlaWdodCA9IG1heFkgLSBtaW5ZO1xuXG4gICAgLy8gc3RvcmUgYSByZWZlcmVuY2Ugc28gdGhhdCBpZiB0aGlzIGZ1bmN0aW9uIGdldHMgY2FsbGVkIGFnYWluIGluIHRoZSByZW5kZXIgY3ljbGUgd2UgZG8gbm90IGhhdmUgdG8gcmVjYWxjdWxhdGVcbiAgICB0aGlzLl9jdXJyZW50Qm91bmRzID0gYm91bmRzO1xuXG4gICAgcmV0dXJuIGJvdW5kcztcbn07XG5cbi8qKlxuICogQ2hlY2tzIGlmIGEgcG9pbnQgaXMgaW5zaWRlIHRoaXMgdGlsaW5nIHNwcml0ZVxuICogQHBhcmFtIHBvaW50IHtQSVhJLlBvaW50fSB0aGUgcG9pbnQgdG8gY2hlY2tcbiAqL1xuVGlsaW5nU3ByaXRlLnByb3RvdHlwZS5jb250YWluc1BvaW50ID0gZnVuY3Rpb24oIHBvaW50IClcbntcbiAgICB0aGlzLndvcmxkVHJhbnNmb3JtLmFwcGx5SW52ZXJzZShwb2ludCwgIHRlbXBQb2ludCk7XG5cbiAgICB2YXIgd2lkdGggPSB0aGlzLl93aWR0aDtcbiAgICB2YXIgaGVpZ2h0ID0gdGhpcy5faGVpZ2h0O1xuICAgIHZhciB4MSA9IC13aWR0aCAqIHRoaXMuYW5jaG9yLng7XG4gICAgdmFyIHkxO1xuXG4gICAgaWYgKCB0ZW1wUG9pbnQueCA+IHgxICYmIHRlbXBQb2ludC54IDwgeDEgKyB3aWR0aCApXG4gICAge1xuICAgICAgICB5MSA9IC1oZWlnaHQgKiB0aGlzLmFuY2hvci55O1xuXG4gICAgICAgIGlmICggdGVtcFBvaW50LnkgPiB5MSAmJiB0ZW1wUG9pbnQueSA8IHkxICsgaGVpZ2h0IClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2U7XG59O1xuXG4vKipcbiAqIERlc3Ryb3lzIHRoaXMgdGlsaW5nIHNwcml0ZVxuICpcbiAqL1xuVGlsaW5nU3ByaXRlLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKCkge1xuICAgIGNvcmUuU3ByaXRlLnByb3RvdHlwZS5kZXN0cm95LmNhbGwodGhpcyk7XG5cbiAgICB0aGlzLnRpbGVTY2FsZSA9IG51bGw7XG4gICAgdGhpcy5fdGlsZVNjYWxlT2Zmc2V0ID0gbnVsbDtcbiAgICB0aGlzLnRpbGVQb3NpdGlvbiA9IG51bGw7XG5cbiAgICB0aGlzLl91dnMgPSBudWxsO1xufTtcblxuLyoqXG4gKiBIZWxwZXIgZnVuY3Rpb24gdGhhdCBjcmVhdGVzIGEgdGlsaW5nIHNwcml0ZSB0aGF0IHdpbGwgdXNlIGEgdGV4dHVyZSBmcm9tIHRoZSBUZXh0dXJlQ2FjaGUgYmFzZWQgb24gdGhlIGZyYW1lSWRcbiAqIFRoZSBmcmFtZSBpZHMgYXJlIGNyZWF0ZWQgd2hlbiBhIFRleHR1cmUgcGFja2VyIGZpbGUgaGFzIGJlZW4gbG9hZGVkXG4gKlxuICogQHN0YXRpY1xuICogQHBhcmFtIGZyYW1lSWQge3N0cmluZ30gVGhlIGZyYW1lIElkIG9mIHRoZSB0ZXh0dXJlIGluIHRoZSBjYWNoZVxuICogQHJldHVybiB7UElYSS5leHRyYXMuVGlsaW5nU3ByaXRlfSBBIG5ldyBUaWxpbmdTcHJpdGUgdXNpbmcgYSB0ZXh0dXJlIGZyb20gdGhlIHRleHR1cmUgY2FjaGUgbWF0Y2hpbmcgdGhlIGZyYW1lSWRcbiAqIEBwYXJhbSB3aWR0aCB7bnVtYmVyfSAgdGhlIHdpZHRoIG9mIHRoZSB0aWxpbmcgc3ByaXRlXG4gKiBAcGFyYW0gaGVpZ2h0IHtudW1iZXJ9IHRoZSBoZWlnaHQgb2YgdGhlIHRpbGluZyBzcHJpdGVcbiAqL1xuVGlsaW5nU3ByaXRlLmZyb21GcmFtZSA9IGZ1bmN0aW9uIChmcmFtZUlkLHdpZHRoLGhlaWdodClcbntcbiAgICB2YXIgdGV4dHVyZSA9IGNvcmUudXRpbHMuVGV4dHVyZUNhY2hlW2ZyYW1lSWRdO1xuXG4gICAgaWYgKCF0ZXh0dXJlKVxuICAgIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdUaGUgZnJhbWVJZCBcIicgKyBmcmFtZUlkICsgJ1wiIGRvZXMgbm90IGV4aXN0IGluIHRoZSB0ZXh0dXJlIGNhY2hlICcgKyB0aGlzKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IFRpbGluZ1Nwcml0ZSh0ZXh0dXJlLHdpZHRoLGhlaWdodCk7XG59O1xuXG4vKipcbiAqIEhlbHBlciBmdW5jdGlvbiB0aGF0IGNyZWF0ZXMgYSBzcHJpdGUgdGhhdCB3aWxsIGNvbnRhaW4gYSB0ZXh0dXJlIGJhc2VkIG9uIGFuIGltYWdlIHVybFxuICogSWYgdGhlIGltYWdlIGlzIG5vdCBpbiB0aGUgdGV4dHVyZSBjYWNoZSBpdCB3aWxsIGJlIGxvYWRlZFxuICpcbiAqIEBzdGF0aWNcbiAqIEBwYXJhbSBpbWFnZUlkIHtzdHJpbmd9IFRoZSBpbWFnZSB1cmwgb2YgdGhlIHRleHR1cmVcbiAqIEBwYXJhbSB3aWR0aCB7bnVtYmVyfSAgdGhlIHdpZHRoIG9mIHRoZSB0aWxpbmcgc3ByaXRlXG4gKiBAcGFyYW0gaGVpZ2h0IHtudW1iZXJ9IHRoZSBoZWlnaHQgb2YgdGhlIHRpbGluZyBzcHJpdGVcbiAqIEBwYXJhbSBbY3Jvc3NvcmlnaW49KGF1dG8pXSB7Ym9vbGVhbn0gaWYgeW91IHdhbnQgdG8gc3BlY2lmeSB0aGUgY3Jvc3Mtb3JpZ2luIHBhcmFtZXRlclxuICogQHBhcmFtIFtzY2FsZU1vZGU9UElYSS5TQ0FMRV9NT0RFUy5ERUZBVUxUXSB7bnVtYmVyfSBpZiB5b3Ugd2FudCB0byBzcGVjaWZ5IHRoZSBzY2FsZSBtb2RlLCBzZWUge0BsaW5rIFBJWEkuU0NBTEVfTU9ERVN9IGZvciBwb3NzaWJsZSB2YWx1ZXNcbiAqIEByZXR1cm4ge1BJWEkuZXh0cmFzLlRpbGluZ1Nwcml0ZX0gQSBuZXcgVGlsaW5nU3ByaXRlIHVzaW5nIGEgdGV4dHVyZSBmcm9tIHRoZSB0ZXh0dXJlIGNhY2hlIG1hdGNoaW5nIHRoZSBpbWFnZSBpZFxuICovXG5UaWxpbmdTcHJpdGUuZnJvbUltYWdlID0gZnVuY3Rpb24gKGltYWdlSWQsIHdpZHRoLCBoZWlnaHQsIGNyb3Nzb3JpZ2luLCBzY2FsZU1vZGUpXG57XG4gICAgcmV0dXJuIG5ldyBUaWxpbmdTcHJpdGUoY29yZS5UZXh0dXJlLmZyb21JbWFnZShpbWFnZUlkLCBjcm9zc29yaWdpbiwgc2NhbGVNb2RlKSx3aWR0aCxoZWlnaHQpO1xufTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vY29yZScpLFxuICAgIERpc3BsYXlPYmplY3QgPSBjb3JlLkRpc3BsYXlPYmplY3QsXG4gICAgX3RlbXBNYXRyaXggPSBuZXcgY29yZS5NYXRyaXgoKTtcblxuRGlzcGxheU9iamVjdC5wcm90b3R5cGUuX2NhY2hlQXNCaXRtYXAgPSBmYWxzZTtcbkRpc3BsYXlPYmplY3QucHJvdG90eXBlLl9vcmlnaW5hbFJlbmRlcldlYkdMID0gbnVsbDtcbkRpc3BsYXlPYmplY3QucHJvdG90eXBlLl9vcmlnaW5hbFJlbmRlckNhbnZhcyA9IG51bGw7XG5cbkRpc3BsYXlPYmplY3QucHJvdG90eXBlLl9vcmlnaW5hbFVwZGF0ZVRyYW5zZm9ybSA9IG51bGw7XG5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS5fb3JpZ2luYWxIaXRUZXN0ID0gbnVsbDtcbkRpc3BsYXlPYmplY3QucHJvdG90eXBlLl9vcmlnaW5hbERlc3Ryb3kgPSBudWxsO1xuRGlzcGxheU9iamVjdC5wcm90b3R5cGUuX2NhY2hlZFNwcml0ZSA9IG51bGw7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKERpc3BsYXlPYmplY3QucHJvdG90eXBlLCB7XG5cbiAgICAvKipcbiAgICAgKiBTZXQgdGhpcyB0byB0cnVlIGlmIHlvdSB3YW50IHRoaXMgZGlzcGxheSBvYmplY3QgdG8gYmUgY2FjaGVkIGFzIGEgYml0bWFwLlxuICAgICAqIFRoaXMgYmFzaWNhbGx5IHRha2VzIGEgc25hcCBzaG90IG9mIHRoZSBkaXNwbGF5IG9iamVjdCBhcyBpdCBpcyBhdCB0aGF0IG1vbWVudC4gSXQgY2FuIHByb3ZpZGUgYSBwZXJmb3JtYW5jZSBiZW5lZml0IGZvciBjb21wbGV4IHN0YXRpYyBkaXNwbGF5T2JqZWN0cy5cbiAgICAgKiBUbyByZW1vdmUgc2ltcGx5IHNldCB0aGlzIHByb3BlcnR5IHRvICdmYWxzZSdcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICogQG1lbWJlcm9mIFBJWEkuRGlzcGxheU9iamVjdCNcbiAgICAgKi9cbiAgICBjYWNoZUFzQml0bWFwOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2NhY2hlQXNCaXRtYXA7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICBpZiAodGhpcy5fY2FjaGVBc0JpdG1hcCA9PT0gdmFsdWUpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLl9jYWNoZUFzQml0bWFwID0gdmFsdWU7XG5cbiAgICAgICAgICAgIGlmICh2YWx1ZSlcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9vcmlnaW5hbFJlbmRlcldlYkdMID0gdGhpcy5yZW5kZXJXZWJHTDtcbiAgICAgICAgICAgICAgICB0aGlzLl9vcmlnaW5hbFJlbmRlckNhbnZhcyA9IHRoaXMucmVuZGVyQ2FudmFzO1xuXG4gICAgICAgICAgICAgICAgdGhpcy5fb3JpZ2luYWxVcGRhdGVUcmFuc2Zvcm0gPSB0aGlzLnVwZGF0ZVRyYW5zZm9ybTtcbiAgICAgICAgICAgICAgICB0aGlzLl9vcmlnaW5hbEdldEJvdW5kcyA9IHRoaXMuZ2V0Qm91bmRzO1xuXG4gICAgICAgICAgICAgICAgdGhpcy5fb3JpZ2luYWxEZXN0cm95ID0gdGhpcy5kZXN0cm95O1xuXG4gICAgICAgICAgICAgICAgdGhpcy5fb3JpZ2luYWxDb250YWluc1BvaW50ID0gdGhpcy5jb250YWluc1BvaW50O1xuXG4gICAgICAgICAgICAgICAgdGhpcy5yZW5kZXJXZWJHTCA9IHRoaXMuX3JlbmRlckNhY2hlZFdlYkdMO1xuICAgICAgICAgICAgICAgIHRoaXMucmVuZGVyQ2FudmFzID0gdGhpcy5fcmVuZGVyQ2FjaGVkQ2FudmFzO1xuXG4gICAgICAgICAgICAgICAgdGhpcy5kZXN0cm95ID0gdGhpcy5fY2FjaGVBc0JpdG1hcERlc3Ryb3k7XG5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5fY2FjaGVkU3ByaXRlKVxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fZGVzdHJveUNhY2hlZERpc3BsYXlPYmplY3QoKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB0aGlzLnJlbmRlcldlYkdMID0gdGhpcy5fb3JpZ2luYWxSZW5kZXJXZWJHTDtcbiAgICAgICAgICAgICAgICB0aGlzLnJlbmRlckNhbnZhcyA9IHRoaXMuX29yaWdpbmFsUmVuZGVyQ2FudmFzO1xuICAgICAgICAgICAgICAgIHRoaXMuZ2V0Qm91bmRzID0gdGhpcy5fb3JpZ2luYWxHZXRCb3VuZHM7XG5cbiAgICAgICAgICAgICAgICB0aGlzLmRlc3Ryb3kgPSB0aGlzLl9vcmlnaW5hbERlc3Ryb3k7XG5cbiAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZVRyYW5zZm9ybSA9IHRoaXMuX29yaWdpbmFsVXBkYXRlVHJhbnNmb3JtO1xuICAgICAgICAgICAgICAgIHRoaXMuY29udGFpbnNQb2ludCA9IHRoaXMuX29yaWdpbmFsQ29udGFpbnNQb2ludDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn0pO1xuLyoqXG4qIFJlbmRlcnMgYSBjYWNoZWQgdmVyc2lvbiBvZiB0aGUgc3ByaXRlIHdpdGggV2ViR0xcbipcbiogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLldlYkdMUmVuZGVyZXJ9IHRoZSBXZWJHTCByZW5kZXJlclxuKiBAcHJpdmF0ZVxuKi9cbkRpc3BsYXlPYmplY3QucHJvdG90eXBlLl9yZW5kZXJDYWNoZWRXZWJHTCA9IGZ1bmN0aW9uIChyZW5kZXJlcilcbntcbiAgICBpZiAoIXRoaXMudmlzaWJsZSB8fCB0aGlzLndvcmxkQWxwaGEgPD0gMCB8fCAhdGhpcy5yZW5kZXJhYmxlKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuX2luaXRDYWNoZWREaXNwbGF5T2JqZWN0KCByZW5kZXJlciApO1xuXG4gICAgdGhpcy5fY2FjaGVkU3ByaXRlLndvcmxkQWxwaGEgPSB0aGlzLndvcmxkQWxwaGE7XG5cbiAgICByZW5kZXJlci5zZXRPYmplY3RSZW5kZXJlcihyZW5kZXJlci5wbHVnaW5zLnNwcml0ZSk7XG4gICAgcmVuZGVyZXIucGx1Z2lucy5zcHJpdGUucmVuZGVyKCB0aGlzLl9jYWNoZWRTcHJpdGUgKTtcbn07XG5cbi8qKlxuKiBQcmVwYXJlcyB0aGUgV2ViR0wgcmVuZGVyZXIgdG8gY2FjaGUgdGhlIHNwcml0ZVxuKlxuKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcn0gdGhlIFdlYkdMIHJlbmRlcmVyXG4qIEBwcml2YXRlXG4qL1xuRGlzcGxheU9iamVjdC5wcm90b3R5cGUuX2luaXRDYWNoZWREaXNwbGF5T2JqZWN0ID0gZnVuY3Rpb24gKHJlbmRlcmVyKVxue1xuICAgIGlmKHRoaXMuX2NhY2hlZFNwcml0ZSlcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBmaXJzdCB3ZSBmbHVzaCBhbnl0aGluZyBsZWZ0IGluIHRoZSByZW5kZXJlciAob3RoZXJ3aXNlIGl0IHdvdWxkIGdldCByZW5kZXJlZCB0byB0aGUgY2FjaGVkIHRleHR1cmUpXG4gICAgcmVuZGVyZXIuY3VycmVudFJlbmRlcmVyLmZsdXNoKCk7XG4gICAgLy90aGlzLmZpbHRlcnM9IFtdO1xuICAgIC8vIG5leHQgd2UgZmluZCB0aGUgZGltZW5zaW9ucyBvZiB0aGUgdW50cmFuc2Zvcm1lZCBvYmplY3RcbiAgICAvLyB0aGlzIGZ1bmN0aW9uIGFsc28gY2FsbHMgdXBkYXRldHJhbnNmb3JtIG9uIGFsbCBpdHMgY2hpbGRyZW4gYXMgcGFydCBvZiB0aGUgbWVhc3VyaW5nLiBUaGlzIG1lYW5zIHdlIGRvbid0IG5lZWQgdG8gdXBkYXRlIHRoZSB0cmFuc2Zvcm0gYWdhaW4gaW4gdGhpcyBmdW5jdGlvblxuICAgIC8vIFRPRE8gcGFzcyBhbiBvYmplY3QgdG8gY2xvbmUgdG9vPyBzYXZlcyBoYXZpbmcgdG8gY3JlYXRlIGEgbmV3IG9uZSBlYWNoIHRpbWUhXG4gICAgdmFyIGJvdW5kcyA9IHRoaXMuZ2V0TG9jYWxCb3VuZHMoKS5jbG9uZSgpO1xuXG4gICAgLy8gYWRkIHNvbWUgcGFkZGluZyFcbiAgICBpZih0aGlzLl9maWx0ZXJzKVxuICAgIHtcbiAgICAgICAgdmFyIHBhZGRpbmcgPSB0aGlzLl9maWx0ZXJzWzBdLnBhZGRpbmc7XG4gICAgICAgIGJvdW5kcy54IC09IHBhZGRpbmc7XG4gICAgICAgIGJvdW5kcy55IC09IHBhZGRpbmc7XG5cbiAgICAgICAgYm91bmRzLndpZHRoICs9IHBhZGRpbmcgKiAyO1xuICAgICAgICBib3VuZHMuaGVpZ2h0ICs9IHBhZGRpbmcgKiAyO1xuICAgIH1cblxuICAgIC8vIGZvciBub3cgd2UgY2FjaGUgdGhlIGN1cnJlbnQgcmVuZGVyVGFyZ2V0IHRoYXQgdGhlIHdlYkdMIHJlbmRlcmVyIGlzIGN1cnJlbnRseSB1c2luZy5cbiAgICAvLyB0aGlzIGNvdWxkIGJlIG1vcmUgZWxlZ2VudC4uXG4gICAgdmFyIGNhY2hlZFJlbmRlclRhcmdldCA9IHJlbmRlcmVyLmN1cnJlbnRSZW5kZXJUYXJnZXQ7XG4gICAgLy8gV2UgYWxzbyBzdG9yZSB0aGUgZmlsdGVyIHN0YWNrIC0gSSB3aWxsIGRlZmluaXRlbHkgbG9vayB0byBjaGFuZ2UgaG93IHRoaXMgd29ya3MgYSBsaXR0bGUgbGF0ZXIgZG93biB0aGUgbGluZS5cbiAgICB2YXIgc3RhY2sgPSByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLmZpbHRlclN0YWNrO1xuXG4gICAgLy8gdGhpcyByZW5kZXJUZXh0dXJlIHdpbGwgYmUgdXNlZCB0byBzdG9yZSB0aGUgY2FjaGVkIERpc3BsYXlPYmplY3RcbiAgICB2YXIgcmVuZGVyVGV4dHVyZSA9IG5ldyBjb3JlLlJlbmRlclRleHR1cmUocmVuZGVyZXIsIGJvdW5kcy53aWR0aCB8IDAsIGJvdW5kcy5oZWlnaHQgfCAwKTtcblxuICAgIC8vIG5lZWQgdG8gc2V0IC8vXG4gICAgdmFyIG0gPSBfdGVtcE1hdHJpeDtcblxuICAgIG0udHggPSAtYm91bmRzLng7XG4gICAgbS50eSA9IC1ib3VuZHMueTtcblxuXG5cbiAgICAvLyBzZXQgYWxsIHByb3BlcnRpZXMgdG8gdGhlcmUgb3JpZ2luYWwgc28gd2UgY2FuIHJlbmRlciB0byBhIHRleHR1cmVcbiAgICB0aGlzLnJlbmRlcldlYkdMID0gdGhpcy5fb3JpZ2luYWxSZW5kZXJXZWJHTDtcblxuICAgIHJlbmRlclRleHR1cmUucmVuZGVyKHRoaXMsIG0sIHRydWUsIHRydWUpO1xuXG4gICAgLy8gbm93IHJlc3RvcmUgdGhlIHN0YXRlIGJlIHNldHRpbmcgdGhlIG5ldyBwcm9wZXJ0aWVzXG4gICAgcmVuZGVyZXIuc2V0UmVuZGVyVGFyZ2V0KGNhY2hlZFJlbmRlclRhcmdldCk7XG4gICAgcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5maWx0ZXJTdGFjayA9IHN0YWNrO1xuXG4gICAgdGhpcy5yZW5kZXJXZWJHTCAgICAgPSB0aGlzLl9yZW5kZXJDYWNoZWRXZWJHTDtcbiAgICB0aGlzLnVwZGF0ZVRyYW5zZm9ybSA9IHRoaXMuZGlzcGxheU9iamVjdFVwZGF0ZVRyYW5zZm9ybTtcbiAgICB0aGlzLmdldEJvdW5kcyAgICAgICA9IHRoaXMuX2dldENhY2hlZEJvdW5kcztcblxuXG4gICAgLy8gY3JlYXRlIG91ciBjYWNoZWQgc3ByaXRlXG4gICAgdGhpcy5fY2FjaGVkU3ByaXRlID0gbmV3IGNvcmUuU3ByaXRlKHJlbmRlclRleHR1cmUpO1xuICAgIHRoaXMuX2NhY2hlZFNwcml0ZS53b3JsZFRyYW5zZm9ybSA9IHRoaXMud29ybGRUcmFuc2Zvcm07XG4gICAgdGhpcy5fY2FjaGVkU3ByaXRlLmFuY2hvci54ID0gLSggYm91bmRzLnggLyBib3VuZHMud2lkdGggKTtcbiAgICB0aGlzLl9jYWNoZWRTcHJpdGUuYW5jaG9yLnkgPSAtKCBib3VuZHMueSAvIGJvdW5kcy5oZWlnaHQgKTtcblxuICAgIC8vIHJlc3RvcmUgdGhlIHRyYW5zZm9ybSBvZiB0aGUgY2FjaGVkIHNwcml0ZSB0byBhdm9pZCB0aGUgbmFzdHkgZmxpY2tlci4uXG4gICAgdGhpcy51cGRhdGVUcmFuc2Zvcm0oKTtcblxuICAgIC8vIG1hcCB0aGUgaGl0IHRlc3QuLlxuICAgIHRoaXMuY29udGFpbnNQb2ludCA9IHRoaXMuX2NhY2hlZFNwcml0ZS5jb250YWluc1BvaW50LmJpbmQodGhpcy5fY2FjaGVkU3ByaXRlKTtcbn07XG5cbi8qKlxuKiBSZW5kZXJzIGEgY2FjaGVkIHZlcnNpb24gb2YgdGhlIHNwcml0ZSB3aXRoIGNhbnZhc1xuKlxuKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuQ2FudmFzUmVuZGVyZXJ9IHRoZSBDYW52YXMgcmVuZGVyZXJcbiogQHByaXZhdGVcbiovXG5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS5fcmVuZGVyQ2FjaGVkQ2FudmFzID0gZnVuY3Rpb24gKHJlbmRlcmVyKVxue1xuICAgIGlmICghdGhpcy52aXNpYmxlIHx8IHRoaXMud29ybGRBbHBoYSA8PSAwIHx8ICF0aGlzLnJlbmRlcmFibGUpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5faW5pdENhY2hlZERpc3BsYXlPYmplY3RDYW52YXMoIHJlbmRlcmVyICk7XG5cbiAgICB0aGlzLl9jYWNoZWRTcHJpdGUud29ybGRBbHBoYSA9IHRoaXMud29ybGRBbHBoYTtcblxuICAgIHRoaXMuX2NhY2hlZFNwcml0ZS5yZW5kZXJDYW52YXMocmVuZGVyZXIpO1xufTtcblxuLy9UT0RPIHRoaXMgY2FuIGJlIHRoZSBzYW1lIGFzIHRoZSB3ZWJHTCB2ZXJpc29uLi4gd2lsbCBuZWVkIHRvIGRvIGEgbGl0dGxlIHR3ZWFraW5nIGZpcnN0IHRob3VnaC4uXG4vKipcbiogUHJlcGFyZXMgdGhlIENhbnZhcyByZW5kZXJlciB0byBjYWNoZSB0aGUgc3ByaXRlXG4qXG4qIEBwYXJhbSByZW5kZXJlciB7UElYSS5DYW52YXNSZW5kZXJlcn0gdGhlIENhbnZhcyByZW5kZXJlclxuKiBAcHJpdmF0ZVxuKi9cbkRpc3BsYXlPYmplY3QucHJvdG90eXBlLl9pbml0Q2FjaGVkRGlzcGxheU9iamVjdENhbnZhcyA9IGZ1bmN0aW9uIChyZW5kZXJlcilcbntcbiAgICBpZih0aGlzLl9jYWNoZWRTcHJpdGUpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy9nZXQgYm91bmRzIGFjdHVhbGx5IHRyYW5zZm9ybXMgdGhlIG9iamVjdCBmb3IgdXMgYWxyZWFkeSFcbiAgICB2YXIgYm91bmRzID0gdGhpcy5nZXRMb2NhbEJvdW5kcygpO1xuXG4gICAgdmFyIGNhY2hlZFJlbmRlclRhcmdldCA9IHJlbmRlcmVyLmNvbnRleHQ7XG5cbiAgICB2YXIgcmVuZGVyVGV4dHVyZSA9IG5ldyBjb3JlLlJlbmRlclRleHR1cmUocmVuZGVyZXIsIGJvdW5kcy53aWR0aCB8IDAsIGJvdW5kcy5oZWlnaHQgfCAwKTtcblxuICAgIC8vIG5lZWQgdG8gc2V0IC8vXG4gICAgdmFyIG0gPSBfdGVtcE1hdHJpeDtcblxuICAgIG0udHggPSAtYm91bmRzLng7XG4gICAgbS50eSA9IC1ib3VuZHMueTtcblxuICAgIC8vIHNldCBhbGwgcHJvcGVydGllcyB0byB0aGVyZSBvcmlnaW5hbCBzbyB3ZSBjYW4gcmVuZGVyIHRvIGEgdGV4dHVyZVxuICAgIHRoaXMucmVuZGVyQ2FudmFzID0gdGhpcy5fb3JpZ2luYWxSZW5kZXJDYW52YXM7XG5cbiAgICByZW5kZXJUZXh0dXJlLnJlbmRlcih0aGlzLCBtLCB0cnVlKTtcblxuICAgIC8vIG5vdyByZXN0b3JlIHRoZSBzdGF0ZSBiZSBzZXR0aW5nIHRoZSBuZXcgcHJvcGVydGllc1xuICAgIHJlbmRlcmVyLmNvbnRleHQgPSBjYWNoZWRSZW5kZXJUYXJnZXQ7XG5cbiAgICB0aGlzLnJlbmRlckNhbnZhcyA9IHRoaXMuX3JlbmRlckNhY2hlZENhbnZhcztcbiAgICB0aGlzLnVwZGF0ZVRyYW5zZm9ybSA9IHRoaXMuZGlzcGxheU9iamVjdFVwZGF0ZVRyYW5zZm9ybTtcbiAgICB0aGlzLmdldEJvdW5kcyAgPSB0aGlzLl9nZXRDYWNoZWRCb3VuZHM7XG5cblxuICAgIC8vIGNyZWF0ZSBvdXIgY2FjaGVkIHNwcml0ZVxuICAgIHRoaXMuX2NhY2hlZFNwcml0ZSA9IG5ldyBjb3JlLlNwcml0ZShyZW5kZXJUZXh0dXJlKTtcbiAgICB0aGlzLl9jYWNoZWRTcHJpdGUud29ybGRUcmFuc2Zvcm0gPSB0aGlzLndvcmxkVHJhbnNmb3JtO1xuICAgIHRoaXMuX2NhY2hlZFNwcml0ZS5hbmNob3IueCA9IC0oIGJvdW5kcy54IC8gYm91bmRzLndpZHRoICk7XG4gICAgdGhpcy5fY2FjaGVkU3ByaXRlLmFuY2hvci55ID0gLSggYm91bmRzLnkgLyBib3VuZHMuaGVpZ2h0ICk7XG5cbiAgICB0aGlzLnVwZGF0ZVRyYW5zZm9ybSgpO1xuXG4gICAgdGhpcy5jb250YWluc1BvaW50ID0gdGhpcy5fY2FjaGVkU3ByaXRlLmNvbnRhaW5zUG9pbnQuYmluZCh0aGlzLl9jYWNoZWRTcHJpdGUpO1xufTtcblxuLyoqXG4qIENhbGN1bGF0ZXMgdGhlIGJvdW5kcyBvZiB0aGUgY2FjaGVkIHNwcml0ZVxuKlxuKiBAcHJpdmF0ZVxuKi9cbkRpc3BsYXlPYmplY3QucHJvdG90eXBlLl9nZXRDYWNoZWRCb3VuZHMgPSBmdW5jdGlvbiAoKVxue1xuICAgIHRoaXMuX2NhY2hlZFNwcml0ZS5fY3VycmVudEJvdW5kcyA9IG51bGw7XG5cbiAgICByZXR1cm4gdGhpcy5fY2FjaGVkU3ByaXRlLmdldEJvdW5kcygpO1xufTtcblxuLyoqXG4qIERlc3Ryb3lzIHRoZSBjYWNoZWQgc3ByaXRlLlxuKlxuKiBAcHJpdmF0ZVxuKi9cbkRpc3BsYXlPYmplY3QucHJvdG90eXBlLl9kZXN0cm95Q2FjaGVkRGlzcGxheU9iamVjdCA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy5fY2FjaGVkU3ByaXRlLl90ZXh0dXJlLmRlc3Ryb3koKTtcbiAgICB0aGlzLl9jYWNoZWRTcHJpdGUgPSBudWxsO1xufTtcblxuRGlzcGxheU9iamVjdC5wcm90b3R5cGUuX2NhY2hlQXNCaXRtYXBEZXN0cm95ID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLmNhY2hlQXNCaXRtYXAgPSBmYWxzZTtcbiAgICB0aGlzLl9vcmlnaW5hbERlc3Ryb3koKTtcbn07XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uL2NvcmUnKTtcblxuLyoqXG4gKiBUaGUgaW5zdGFuY2UgbmFtZSBvZiB0aGUgb2JqZWN0LlxuICpcbiAqIEBtZW1iZXJvZiBQSVhJLkRpc3BsYXlPYmplY3QjXG4gKiBAbWVtYmVyIHtzdHJpbmd9XG4gKi9cbmNvcmUuRGlzcGxheU9iamVjdC5wcm90b3R5cGUubmFtZSA9IG51bGw7XG5cbi8qKlxuKiBSZXR1cm5zIHRoZSBkaXNwbGF5IG9iamVjdCBpbiB0aGUgY29udGFpbmVyXG4qXG4qIEBtZW1iZXJvZiBQSVhJLkNvbnRhaW5lciNcbiogQHBhcmFtIG5hbWUge3N0cmluZ30gaW5zdGFuY2UgbmFtZVxuKiBAcmV0dXJuIHtQSVhJLkRpc3BsYXlPYmplY3R9XG4qL1xuY29yZS5Db250YWluZXIucHJvdG90eXBlLmdldENoaWxkQnlOYW1lID0gZnVuY3Rpb24gKG5hbWUpXG57XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmNoaWxkcmVuLmxlbmd0aDsgaSsrKVxuICAgIHtcbiAgICAgICAgaWYgKHRoaXMuY2hpbGRyZW5baV0ubmFtZSA9PT0gbmFtZSlcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY2hpbGRyZW5baV07XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG59O1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi9jb3JlJyk7XG5cbi8qKlxuKiBSZXR1cm5zIHRoZSBnbG9iYWwgcG9zaXRpb24gb2YgdGhlIGRpc3BsYXlPYmplY3RcbipcbiogQG1lbWJlcm9mIFBJWEkuRGlzcGxheU9iamVjdCNcbiogQHBhcmFtIHBvaW50IHtQb2ludH0gdGhlIHBvaW50IHRvIHdyaXRlIHRoZSBnbG9iYWwgdmFsdWUgdG8uIElmIG51bGwgYSBuZXcgcG9pbnQgd2lsbCBiZSByZXR1cm5lZFxuKiBAcmV0dXJuIHtQb2ludH1cbiovXG5jb3JlLkRpc3BsYXlPYmplY3QucHJvdG90eXBlLmdldEdsb2JhbFBvc2l0aW9uID0gZnVuY3Rpb24gKHBvaW50KVxue1xuICAgIHBvaW50ID0gcG9pbnQgfHwgbmV3IGNvcmUuUG9pbnQoKTtcblxuICAgIGlmKHRoaXMucGFyZW50KVxuICAgIHtcbiAgICAgICAgdGhpcy5kaXNwbGF5T2JqZWN0VXBkYXRlVHJhbnNmb3JtKCk7XG5cbiAgICAgICAgcG9pbnQueCA9IHRoaXMud29ybGRUcmFuc2Zvcm0udHg7XG4gICAgICAgIHBvaW50LnkgPSB0aGlzLndvcmxkVHJhbnNmb3JtLnR5O1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICBwb2ludC54ID0gdGhpcy5wb3NpdGlvbi54O1xuICAgICAgICBwb2ludC55ID0gdGhpcy5wb3NpdGlvbi55O1xuICAgIH1cblxuICAgIHJldHVybiBwb2ludDtcbn07XG4iLCIvKipcbiAqIEBmaWxlICAgICAgICBNYWluIGV4cG9ydCBvZiB0aGUgUElYSSBleHRyYXMgbGlicmFyeVxuICogQGF1dGhvciAgICAgIE1hdCBHcm92ZXMgPG1hdEBnb29kYm95ZGlnaXRhbC5jb20+XG4gKiBAY29weXJpZ2h0ICAgMjAxMy0yMDE1IEdvb2RCb3lEaWdpdGFsXG4gKiBAbGljZW5zZSAgICAge0BsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9waXhpanMvcGl4aS5qcy9ibG9iL21hc3Rlci9MSUNFTlNFfE1JVCBMaWNlbnNlfVxuICovXG5cbnJlcXVpcmUoJy4vY2FjaGVBc0JpdG1hcCcpO1xucmVxdWlyZSgnLi9nZXRDaGlsZEJ5TmFtZScpO1xucmVxdWlyZSgnLi9nZXRHbG9iYWxQb3NpdGlvbicpO1xuXG4vKipcbiAqIEBuYW1lc3BhY2UgUElYSS5leHRyYXNcbiAqL1xubW9kdWxlLmV4cG9ydHMgPSB7XG4gICAgTW92aWVDbGlwOiAgICAgIHJlcXVpcmUoJy4vTW92aWVDbGlwJyksXG4gICAgVGlsaW5nU3ByaXRlOiAgIHJlcXVpcmUoJy4vVGlsaW5nU3ByaXRlJyksXG4gICAgQml0bWFwVGV4dDogICAgIHJlcXVpcmUoJy4vQml0bWFwVGV4dCcpXG59O1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi8uLi9jb3JlJyk7XG4vLyBAc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9zdWJzdGFjay9icmZzL2lzc3Vlcy8yNVxuXG5cbi8vIFRPRE8gKGNlbmdsZXIpIC0gVGhlIFkgaXMgZmxpcHBlZCBpbiB0aGlzIHNoYWRlciBmb3Igc29tZSByZWFzb24uXG5cbi8qKlxuICogQGF1dGhvciBWaWNvIEB2aWNvY290ZWFcbiAqIG9yaWdpbmFsIHNoYWRlciA6IGh0dHBzOi8vd3d3LnNoYWRlcnRveS5jb20vdmlldy9sc3NHRGogYnkgQG1vdkFYMTNoXG4gKi9cblxuLyoqXG4gKiBBbiBBU0NJSSBmaWx0ZXIuXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLkFic3RyYWN0RmlsdGVyXG4gKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzXG4gKi9cbmZ1bmN0aW9uIEFzY2lpRmlsdGVyKClcbntcbiAgICBjb3JlLkFic3RyYWN0RmlsdGVyLmNhbGwodGhpcyxcbiAgICAgICAgLy8gdmVydGV4IHNoYWRlclxuICAgICAgICBudWxsLFxuICAgICAgICAvLyBmcmFnbWVudCBzaGFkZXJcbiAgICAgICAgXCJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcXG5cXG51bmlmb3JtIHZlYzQgZGltZW5zaW9ucztcXG51bmlmb3JtIGZsb2F0IHBpeGVsU2l6ZTtcXG51bmlmb3JtIHNhbXBsZXIyRCB1U2FtcGxlcjtcXG5cXG5mbG9hdCBjaGFyYWN0ZXIoZmxvYXQgbiwgdmVjMiBwKVxcbntcXG4gICAgcCA9IGZsb29yKHAqdmVjMig0LjAsIC00LjApICsgMi41KTtcXG4gICAgaWYgKGNsYW1wKHAueCwgMC4wLCA0LjApID09IHAueCAmJiBjbGFtcChwLnksIDAuMCwgNC4wKSA9PSBwLnkpXFxuICAgIHtcXG4gICAgICAgIGlmIChpbnQobW9kKG4vZXhwMihwLnggKyA1LjAqcC55KSwgMi4wKSkgPT0gMSkgcmV0dXJuIDEuMDtcXG4gICAgfVxcbiAgICByZXR1cm4gMC4wO1xcbn1cXG5cXG52b2lkIG1haW4oKVxcbntcXG4gICAgdmVjMiB1diA9IGdsX0ZyYWdDb29yZC54eTtcXG5cXG4gICAgdmVjMyBjb2wgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIGZsb29yKCB1diAvIHBpeGVsU2l6ZSApICogcGl4ZWxTaXplIC8gZGltZW5zaW9ucy54eSkucmdiO1xcblxcbiAgICBmbG9hdCBncmF5ID0gKGNvbC5yICsgY29sLmcgKyBjb2wuYikgLyAzLjA7XFxuXFxuICAgIGZsb2F0IG4gPSAgNjU1MzYuMDsgICAgICAgICAgICAgLy8gLlxcbiAgICBpZiAoZ3JheSA+IDAuMikgbiA9IDY1NjAwLjA7ICAgIC8vIDpcXG4gICAgaWYgKGdyYXkgPiAwLjMpIG4gPSAzMzI3NzIuMDsgICAvLyAqXFxuICAgIGlmIChncmF5ID4gMC40KSBuID0gMTUyNTUwODYuMDsgLy8gb1xcbiAgICBpZiAoZ3JheSA+IDAuNSkgbiA9IDIzMzg1MTY0LjA7IC8vICZcXG4gICAgaWYgKGdyYXkgPiAwLjYpIG4gPSAxNTI1MjAxNC4wOyAvLyA4XFxuICAgIGlmIChncmF5ID4gMC43KSBuID0gMTMxOTk0NTIuMDsgLy8gQFxcbiAgICBpZiAoZ3JheSA+IDAuOCkgbiA9IDExNTEyODEwLjA7IC8vICNcXG5cXG4gICAgdmVjMiBwID0gbW9kKCB1diAvICggcGl4ZWxTaXplICogMC41ICksIDIuMCkgLSB2ZWMyKDEuMCk7XFxuICAgIGNvbCA9IGNvbCAqIGNoYXJhY3RlcihuLCBwKTtcXG5cXG4gICAgZ2xfRnJhZ0NvbG9yID0gdmVjNChjb2wsIDEuMCk7XFxufVxcblwiLFxuICAgICAgICAvLyBjdXN0b20gdW5pZm9ybXNcbiAgICAgICAge1xuICAgICAgICAgICAgZGltZW5zaW9uczogeyB0eXBlOiAnNGZ2JywgdmFsdWU6IG5ldyBGbG9hdDMyQXJyYXkoWzAsIDAsIDAsIDBdKSB9LFxuICAgICAgICAgICAgcGl4ZWxTaXplOiAgeyB0eXBlOiAnMWYnLCB2YWx1ZTogOCB9XG4gICAgICAgIH1cbiAgICApO1xufVxuXG5Bc2NpaUZpbHRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuQWJzdHJhY3RGaWx0ZXIucHJvdG90eXBlKTtcbkFzY2lpRmlsdGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IEFzY2lpRmlsdGVyO1xubW9kdWxlLmV4cG9ydHMgPSBBc2NpaUZpbHRlcjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoQXNjaWlGaWx0ZXIucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogVGhlIHBpeGVsIHNpemUgdXNlZCBieSB0aGUgZmlsdGVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuQXNjaWlGaWx0ZXIjXG4gICAgICovXG4gICAgc2l6ZToge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVuaWZvcm1zLnBpeGVsU2l6ZS52YWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudW5pZm9ybXMucGl4ZWxTaXplLnZhbHVlID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG59KTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vLi4vY29yZScpLFxuICAgIEJsdXJYRmlsdGVyID0gcmVxdWlyZSgnLi4vYmx1ci9CbHVyWEZpbHRlcicpLFxuICAgIEJsdXJZRmlsdGVyID0gcmVxdWlyZSgnLi4vYmx1ci9CbHVyWUZpbHRlcicpO1xuXG4vKipcbiAqIFRoZSBCbG9vbUZpbHRlciBhcHBsaWVzIGEgR2F1c3NpYW4gYmx1ciB0byBhbiBvYmplY3QuXG4gKiBUaGUgc3RyZW5ndGggb2YgdGhlIGJsdXIgY2FuIGJlIHNldCBmb3IgeC0gYW5kIHktYXhpcyBzZXBhcmF0ZWx5LlxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5BYnN0cmFjdEZpbHRlclxuICogQG1lbWJlcm9mIFBJWEkuZmlsdGVyc1xuICovXG5mdW5jdGlvbiBCbG9vbUZpbHRlcigpXG57XG4gICAgY29yZS5BYnN0cmFjdEZpbHRlci5jYWxsKHRoaXMpO1xuXG4gICAgdGhpcy5ibHVyWEZpbHRlciA9IG5ldyBCbHVyWEZpbHRlcigpO1xuICAgIHRoaXMuYmx1cllGaWx0ZXIgPSBuZXcgQmx1cllGaWx0ZXIoKTtcblxuICAgIHRoaXMuZGVmYXVsdEZpbHRlciA9IG5ldyBjb3JlLkFic3RyYWN0RmlsdGVyKCk7XG59XG5cbkJsb29tRmlsdGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoY29yZS5BYnN0cmFjdEZpbHRlci5wcm90b3R5cGUpO1xuQmxvb21GaWx0ZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gQmxvb21GaWx0ZXI7XG5tb2R1bGUuZXhwb3J0cyA9IEJsb29tRmlsdGVyO1xuXG5CbG9vbUZpbHRlci5wcm90b3R5cGUuYXBwbHlGaWx0ZXIgPSBmdW5jdGlvbiAocmVuZGVyZXIsIGlucHV0LCBvdXRwdXQpXG57XG4gICAgdmFyIHJlbmRlclRhcmdldCA9IHJlbmRlcmVyLmZpbHRlck1hbmFnZXIuZ2V0UmVuZGVyVGFyZ2V0KHRydWUpO1xuXG4gICAgLy9UT0RPIC0gY29weVRleFN1YkltYWdlMkQgY291bGQgYmUgdXNlZCBoZXJlP1xuICAgIHRoaXMuZGVmYXVsdEZpbHRlci5hcHBseUZpbHRlcihyZW5kZXJlciwgaW5wdXQsIG91dHB1dCk7XG5cbiAgICB0aGlzLmJsdXJYRmlsdGVyLmFwcGx5RmlsdGVyKHJlbmRlcmVyLCBpbnB1dCwgcmVuZGVyVGFyZ2V0KTtcblxuICAgIHJlbmRlcmVyLmJsZW5kTW9kZU1hbmFnZXIuc2V0QmxlbmRNb2RlKGNvcmUuQkxFTkRfTU9ERVMuU0NSRUVOKTtcblxuICAgIHRoaXMuYmx1cllGaWx0ZXIuYXBwbHlGaWx0ZXIocmVuZGVyZXIsIHJlbmRlclRhcmdldCwgb3V0cHV0KTtcblxuICAgIHJlbmRlcmVyLmJsZW5kTW9kZU1hbmFnZXIuc2V0QmxlbmRNb2RlKGNvcmUuQkxFTkRfTU9ERVMuTk9STUFMKTtcblxuICAgIHJlbmRlcmVyLmZpbHRlck1hbmFnZXIucmV0dXJuUmVuZGVyVGFyZ2V0KHJlbmRlclRhcmdldCk7XG59O1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhCbG9vbUZpbHRlci5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBzdHJlbmd0aCBvZiBib3RoIHRoZSBibHVyWCBhbmQgYmx1clkgcHJvcGVydGllcyBzaW11bHRhbmVvdXNseVxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJPZiBQSVhJLmZpbHRlcnMuQmxvb21GaWx0ZXIjXG4gICAgICogQGRlZmF1bHQgMlxuICAgICAqL1xuICAgIGJsdXI6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5ibHVyWEZpbHRlci5ibHVyO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5ibHVyWEZpbHRlci5ibHVyID0gdGhpcy5ibHVyWUZpbHRlci5ibHVyID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgc3RyZW5ndGggb2YgdGhlIGJsdXJYIHByb3BlcnR5XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlck9mIFBJWEkuZmlsdGVycy5CbG9vbUZpbHRlciNcbiAgICAgKiBAZGVmYXVsdCAyXG4gICAgICovXG4gICAgYmx1clg6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5ibHVyWEZpbHRlci5ibHVyO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5ibHVyWEZpbHRlci5ibHVyID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgc3RyZW5ndGggb2YgdGhlIGJsdXJZIHByb3BlcnR5XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlck9mIFBJWEkuZmlsdGVycy5CbG9vbUZpbHRlciNcbiAgICAgKiBAZGVmYXVsdCAyXG4gICAgICovXG4gICAgYmx1clk6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5ibHVyWUZpbHRlci5ibHVyO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5ibHVyWUZpbHRlci5ibHVyID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG59KTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vLi4vY29yZScpO1xuXG5cbi8qKlxuICogVGhlIEJsdXJEaXJGaWx0ZXIgYXBwbGllcyBhIEdhdXNzaWFuIGJsdXIgdG93YXJkIGEgZGlyZWN0aW9uIHRvIGFuIG9iamVjdC5cbiAqXG4gKiBAY2xhc3NcbiAqIEBwYXJhbSB7bnVtYmVyfSBkaXJYXG4gKiBAcGFyYW0ge251bWJlcn0gZGlyWVxuICogQGV4dGVuZHMgUElYSS5BYnN0cmFjdEZpbHRlclxuICogQG1lbWJlcm9mIFBJWEkuZmlsdGVyc1xuICovXG5mdW5jdGlvbiBCbHVyRGlyRmlsdGVyKGRpclgsIGRpclkpXG57XG4gICAgY29yZS5BYnN0cmFjdEZpbHRlci5jYWxsKHRoaXMsXG4gICAgICAgIC8vIHZlcnRleCBzaGFkZXJcbiAgICAgICAgXCJhdHRyaWJ1dGUgdmVjMiBhVmVydGV4UG9zaXRpb247XFxuYXR0cmlidXRlIHZlYzIgYVRleHR1cmVDb29yZDtcXG5hdHRyaWJ1dGUgdmVjNCBhQ29sb3I7XFxuXFxudW5pZm9ybSBmbG9hdCBzdHJlbmd0aDtcXG51bmlmb3JtIGZsb2F0IGRpclg7XFxudW5pZm9ybSBmbG9hdCBkaXJZO1xcbnVuaWZvcm0gbWF0MyBwcm9qZWN0aW9uTWF0cml4O1xcblxcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xcbnZhcnlpbmcgdmVjNCB2Q29sb3I7XFxudmFyeWluZyB2ZWMyIHZCbHVyVGV4Q29vcmRzWzNdO1xcblxcbnZvaWQgbWFpbih2b2lkKVxcbntcXG4gICAgZ2xfUG9zaXRpb24gPSB2ZWM0KChwcm9qZWN0aW9uTWF0cml4ICogdmVjMygoYVZlcnRleFBvc2l0aW9uKSwgMS4wKSkueHksIDAuMCwgMS4wKTtcXG4gICAgdlRleHR1cmVDb29yZCA9IGFUZXh0dXJlQ29vcmQ7XFxuXFxuICAgIHZCbHVyVGV4Q29vcmRzWzBdID0gYVRleHR1cmVDb29yZCArIHZlYzIoICgwLjAwNCAqIHN0cmVuZ3RoKSAqIGRpclgsICgwLjAwNCAqIHN0cmVuZ3RoKSAqIGRpclkgKTtcXG4gICAgdkJsdXJUZXhDb29yZHNbMV0gPSBhVGV4dHVyZUNvb3JkICsgdmVjMiggKDAuMDA4ICogc3RyZW5ndGgpICogZGlyWCwgKDAuMDA4ICogc3RyZW5ndGgpICogZGlyWSApO1xcbiAgICB2Qmx1clRleENvb3Jkc1syXSA9IGFUZXh0dXJlQ29vcmQgKyB2ZWMyKCAoMC4wMTIgKiBzdHJlbmd0aCkgKiBkaXJYLCAoMC4wMTIgKiBzdHJlbmd0aCkgKiBkaXJZICk7XFxuXFxuICAgIHZDb2xvciA9IHZlYzQoYUNvbG9yLnJnYiAqIGFDb2xvci5hLCBhQ29sb3IuYSk7XFxufVxcblwiLFxuICAgICAgICAvLyBmcmFnbWVudCBzaGFkZXJcbiAgICAgICAgXCJwcmVjaXNpb24gbG93cCBmbG9hdDtcXG5cXG52YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDtcXG52YXJ5aW5nIHZlYzIgdkJsdXJUZXhDb29yZHNbM107XFxudmFyeWluZyB2ZWM0IHZDb2xvcjtcXG5cXG51bmlmb3JtIHNhbXBsZXIyRCB1U2FtcGxlcjtcXG5cXG52b2lkIG1haW4odm9pZClcXG57XFxuICAgIGdsX0ZyYWdDb2xvciA9IHZlYzQoMC4wKTtcXG5cXG4gICAgZ2xfRnJhZ0NvbG9yICs9IHRleHR1cmUyRCh1U2FtcGxlciwgdlRleHR1cmVDb29yZCAgICAgKSAqIDAuMzk4OTQyMjgwNDAxNDMyNztcXG4gICAgZ2xfRnJhZ0NvbG9yICs9IHRleHR1cmUyRCh1U2FtcGxlciwgdkJsdXJUZXhDb29yZHNbIDBdKSAqIDAuMjQxOTcwNzI0NTE5MTQ1NDtcXG4gICAgZ2xfRnJhZ0NvbG9yICs9IHRleHR1cmUyRCh1U2FtcGxlciwgdkJsdXJUZXhDb29yZHNbIDFdKSAqIDAuMDUzOTkwOTY2NTEzMTg5ODU7XFxuICAgIGdsX0ZyYWdDb2xvciArPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZCbHVyVGV4Q29vcmRzWyAyXSkgKiAwLjAwNDQzMTg0ODQxMTkzODM0MTtcXG59XFxuXCIsXG4gICAgICAgIC8vIHNldCB0aGUgdW5pZm9ybXNcbiAgICAgICAge1xuICAgICAgICAgICAgc3RyZW5ndGg6IHsgdHlwZTogJzFmJywgdmFsdWU6IDEgfSxcbiAgICAgICAgICAgIGRpclg6IHsgdHlwZTogJzFmJywgdmFsdWU6IGRpclggfHwgMCB9LFxuICAgICAgICAgICAgZGlyWTogeyB0eXBlOiAnMWYnLCB2YWx1ZTogZGlyWSB8fCAwIH1cbiAgICAgICAgfVxuICAgICk7XG5cbiAgICB0aGlzLmRlZmF1bHRGaWx0ZXIgPSBuZXcgY29yZS5BYnN0cmFjdEZpbHRlcigpO1xuXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgbnVtYmVyIG9mIHBhc3NlcyBmb3IgYmx1ci4gTW9yZSBwYXNzZXMgbWVhbnMgaGlnaGVyIHF1YWlsaXR5IGJsdXJpbmcuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMVxuICAgICAqL1xuICAgIHRoaXMucGFzc2VzID0gMTtcblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIFggZGlyZWN0aW9uIG9mIHRoZSBibHVyXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMFxuICAgICAqL1xuICAgIHRoaXMuZGlyWCA9IGRpclggfHwgMDtcblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIFkgZGlyZWN0aW9uIG9mIHRoZSBibHVyXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMFxuICAgICAqL1xuICAgIHRoaXMuZGlyWSA9IGRpclkgfHwgMDtcblxuICAgIHRoaXMuc3RyZW5ndGggPSA0O1xufVxuXG5CbHVyRGlyRmlsdGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoY29yZS5BYnN0cmFjdEZpbHRlci5wcm90b3R5cGUpO1xuQmx1ckRpckZpbHRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBCbHVyRGlyRmlsdGVyO1xubW9kdWxlLmV4cG9ydHMgPSBCbHVyRGlyRmlsdGVyO1xuXG5CbHVyRGlyRmlsdGVyLnByb3RvdHlwZS5hcHBseUZpbHRlciA9IGZ1bmN0aW9uIChyZW5kZXJlciwgaW5wdXQsIG91dHB1dCwgY2xlYXIpIHtcblxuICAgIHZhciBzaGFkZXIgPSB0aGlzLmdldFNoYWRlcihyZW5kZXJlcik7XG5cbiAgICB0aGlzLnVuaWZvcm1zLnN0cmVuZ3RoLnZhbHVlID0gdGhpcy5zdHJlbmd0aCAvIDQgLyB0aGlzLnBhc3NlcyAqIChpbnB1dC5mcmFtZS53aWR0aCAvIGlucHV0LnNpemUud2lkdGgpO1xuXG4gICAgaWYgKHRoaXMucGFzc2VzID09PSAxKSB7XG4gICAgICAgIHJlbmRlcmVyLmZpbHRlck1hbmFnZXIuYXBwbHlGaWx0ZXIoc2hhZGVyLCBpbnB1dCwgb3V0cHV0LCBjbGVhcik7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgdmFyIHJlbmRlclRhcmdldCA9IHJlbmRlcmVyLmZpbHRlck1hbmFnZXIuZ2V0UmVuZGVyVGFyZ2V0KHRydWUpO1xuXG4gICAgICAgIHJlbmRlcmVyLmZpbHRlck1hbmFnZXIuYXBwbHlGaWx0ZXIoc2hhZGVyLCBpbnB1dCwgcmVuZGVyVGFyZ2V0LCBjbGVhcik7XG5cbiAgICAgICAgZm9yKHZhciBpID0gMDsgaSA8IHRoaXMucGFzc2VzLTI7IGkrKylcbiAgICAgICAge1xuICAgICAgICAgICAgLy90aGlzLnVuaWZvcm1zLnN0cmVuZ3RoLnZhbHVlID0gdGhpcy5zdHJlbmd0aCAvIDQgLyAodGhpcy5wYXNzZXMrKGkqMikpICogKGlucHV0LmZyYW1lLndpZHRoIC8gaW5wdXQuc2l6ZS53aWR0aCk7XG4gICAgICAgICAgICByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLmFwcGx5RmlsdGVyKHNoYWRlciwgcmVuZGVyVGFyZ2V0LCByZW5kZXJUYXJnZXQsIGNsZWFyKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJlbmRlcmVyLmZpbHRlck1hbmFnZXIuYXBwbHlGaWx0ZXIoc2hhZGVyLCByZW5kZXJUYXJnZXQsIG91dHB1dCwgY2xlYXIpO1xuXG4gICAgICAgIHJlbmRlcmVyLmZpbHRlck1hbmFnZXIucmV0dXJuUmVuZGVyVGFyZ2V0KHJlbmRlclRhcmdldCk7XG4gICAgfVxufTtcblxuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhCbHVyRGlyRmlsdGVyLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIHN0cmVuZ3RoIG9mIGJvdGggdGhlIGJsdXIuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5CbHVyRGlyRmlsdGVyI1xuICAgICAqIEBkZWZhdWx0IDJcbiAgICAgKi9cbiAgICBibHVyOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuc3RyZW5ndGg7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnBhZGRpbmcgPSB2YWx1ZSAqIDAuNTtcbiAgICAgICAgICAgIHRoaXMuc3RyZW5ndGggPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgWCBkaXJlY3Rpb24gb2YgdGhlIGJsdXIuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5CbHVyWUZpbHRlciNcbiAgICAgKiBAZGVmYXVsdCAwXG4gICAgICovXG4gICAgZGlyWDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmRpclg7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLmRpclgudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgWSBkaXJlY3Rpb24gb2YgdGhlIGJsdXIuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5CbHVyRGlyRmlsdGVyI1xuICAgICAqIEBkZWZhdWx0IDBcbiAgICAgKi9cbiAgICBkaXJZOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZGlyWTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudW5pZm9ybXMuZGlyWS52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfVxufSk7XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uLy4uL2NvcmUnKSxcbiAgICBCbHVyWEZpbHRlciA9IHJlcXVpcmUoJy4vQmx1clhGaWx0ZXInKSxcbiAgICBCbHVyWUZpbHRlciA9IHJlcXVpcmUoJy4vQmx1cllGaWx0ZXInKTtcblxuLyoqXG4gKiBUaGUgQmx1ckZpbHRlciBhcHBsaWVzIGEgR2F1c3NpYW4gYmx1ciB0byBhbiBvYmplY3QuXG4gKiBUaGUgc3RyZW5ndGggb2YgdGhlIGJsdXIgY2FuIGJlIHNldCBmb3IgeC0gYW5kIHktYXhpcyBzZXBhcmF0ZWx5LlxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5BYnN0cmFjdEZpbHRlclxuICogQG1lbWJlcm9mIFBJWEkuZmlsdGVyc1xuICovXG5mdW5jdGlvbiBCbHVyRmlsdGVyKClcbntcbiAgICBjb3JlLkFic3RyYWN0RmlsdGVyLmNhbGwodGhpcyk7XG5cbiAgICB0aGlzLmJsdXJYRmlsdGVyID0gbmV3IEJsdXJYRmlsdGVyKCk7XG4gICAgdGhpcy5ibHVyWUZpbHRlciA9IG5ldyBCbHVyWUZpbHRlcigpO1xufVxuXG5CbHVyRmlsdGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoY29yZS5BYnN0cmFjdEZpbHRlci5wcm90b3R5cGUpO1xuQmx1ckZpbHRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBCbHVyRmlsdGVyO1xubW9kdWxlLmV4cG9ydHMgPSBCbHVyRmlsdGVyO1xuXG5CbHVyRmlsdGVyLnByb3RvdHlwZS5hcHBseUZpbHRlciA9IGZ1bmN0aW9uIChyZW5kZXJlciwgaW5wdXQsIG91dHB1dClcbntcbiAgICB2YXIgcmVuZGVyVGFyZ2V0ID0gcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5nZXRSZW5kZXJUYXJnZXQodHJ1ZSk7XG5cbiAgICB0aGlzLmJsdXJYRmlsdGVyLmFwcGx5RmlsdGVyKHJlbmRlcmVyLCBpbnB1dCwgcmVuZGVyVGFyZ2V0KTtcbiAgICB0aGlzLmJsdXJZRmlsdGVyLmFwcGx5RmlsdGVyKHJlbmRlcmVyLCByZW5kZXJUYXJnZXQsIG91dHB1dCk7XG5cbiAgICByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLnJldHVyblJlbmRlclRhcmdldChyZW5kZXJUYXJnZXQpO1xufTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoQmx1ckZpbHRlci5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBzdHJlbmd0aCBvZiBib3RoIHRoZSBibHVyWCBhbmQgYmx1clkgcHJvcGVydGllcyBzaW11bHRhbmVvdXNseVxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJPZiBQSVhJLmZpbHRlcnMuQmx1ckZpbHRlciNcbiAgICAgKiBAZGVmYXVsdCAyXG4gICAgICovXG4gICAgYmx1cjoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmJsdXJYRmlsdGVyLmJsdXI7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnBhZGRpbmcgPSBNYXRoLmFicyh2YWx1ZSkgKiAwLjU7XG4gICAgICAgICAgICB0aGlzLmJsdXJYRmlsdGVyLmJsdXIgPSB0aGlzLmJsdXJZRmlsdGVyLmJsdXIgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBudW1iZXIgb2YgcGFzc2VzIGZvciBibHVyLiBNb3JlIHBhc3NlcyBtZWFucyBoaWdoZXIgcXVhaWxpdHkgYmx1cmluZy5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLkJsdXJZRmlsdGVyI1xuICAgICAqIEBkZWZhdWx0IDFcbiAgICAgKi9cbiAgICBwYXNzZXM6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gIHRoaXMuYmx1clhGaWx0ZXIucGFzc2VzO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5ibHVyWEZpbHRlci5wYXNzZXMgPSB0aGlzLmJsdXJZRmlsdGVyLnBhc3NlcyA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIHN0cmVuZ3RoIG9mIHRoZSBibHVyWCBwcm9wZXJ0eVxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJPZiBQSVhJLmZpbHRlcnMuQmx1ckZpbHRlciNcbiAgICAgKiBAZGVmYXVsdCAyXG4gICAgICovXG4gICAgYmx1clg6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5ibHVyWEZpbHRlci5ibHVyO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5ibHVyWEZpbHRlci5ibHVyID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgc3RyZW5ndGggb2YgdGhlIGJsdXJZIHByb3BlcnR5XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlck9mIFBJWEkuZmlsdGVycy5CbHVyRmlsdGVyI1xuICAgICAqIEBkZWZhdWx0IDJcbiAgICAgKi9cbiAgICBibHVyWToge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmJsdXJZRmlsdGVyLmJsdXI7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmJsdXJZRmlsdGVyLmJsdXIgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi8uLi9jb3JlJyk7XG4vLyBAc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9zdWJzdGFjay9icmZzL2lzc3Vlcy8yNVxuXG5cbi8qKlxuICogVGhlIEJsdXJYRmlsdGVyIGFwcGxpZXMgYSBob3Jpem9udGFsIEdhdXNzaWFuIGJsdXIgdG8gYW4gb2JqZWN0LlxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5BYnN0cmFjdEZpbHRlclxuICogQG1lbWJlcm9mIFBJWEkuZmlsdGVyc1xuICovXG5mdW5jdGlvbiBCbHVyWEZpbHRlcigpXG57XG4gICAgY29yZS5BYnN0cmFjdEZpbHRlci5jYWxsKHRoaXMsXG4gICAgICAgIC8vIHZlcnRleCBzaGFkZXJcbiAgICAgICAgXCJhdHRyaWJ1dGUgdmVjMiBhVmVydGV4UG9zaXRpb247XFxuYXR0cmlidXRlIHZlYzIgYVRleHR1cmVDb29yZDtcXG5hdHRyaWJ1dGUgdmVjNCBhQ29sb3I7XFxuXFxudW5pZm9ybSBmbG9hdCBzdHJlbmd0aDtcXG51bmlmb3JtIG1hdDMgcHJvamVjdGlvbk1hdHJpeDtcXG5cXG52YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDtcXG52YXJ5aW5nIHZlYzQgdkNvbG9yO1xcbnZhcnlpbmcgdmVjMiB2Qmx1clRleENvb3Jkc1s2XTtcXG5cXG52b2lkIG1haW4odm9pZClcXG57XFxuICAgIGdsX1Bvc2l0aW9uID0gdmVjNCgocHJvamVjdGlvbk1hdHJpeCAqIHZlYzMoKGFWZXJ0ZXhQb3NpdGlvbiksIDEuMCkpLnh5LCAwLjAsIDEuMCk7XFxuICAgIHZUZXh0dXJlQ29vcmQgPSBhVGV4dHVyZUNvb3JkO1xcblxcbiAgICB2Qmx1clRleENvb3Jkc1sgMF0gPSBhVGV4dHVyZUNvb3JkICsgdmVjMigtMC4wMTIgKiBzdHJlbmd0aCwgMC4wKTtcXG4gICAgdkJsdXJUZXhDb29yZHNbIDFdID0gYVRleHR1cmVDb29yZCArIHZlYzIoLTAuMDA4ICogc3RyZW5ndGgsIDAuMCk7XFxuICAgIHZCbHVyVGV4Q29vcmRzWyAyXSA9IGFUZXh0dXJlQ29vcmQgKyB2ZWMyKC0wLjAwNCAqIHN0cmVuZ3RoLCAwLjApO1xcbiAgICB2Qmx1clRleENvb3Jkc1sgM10gPSBhVGV4dHVyZUNvb3JkICsgdmVjMiggMC4wMDQgKiBzdHJlbmd0aCwgMC4wKTtcXG4gICAgdkJsdXJUZXhDb29yZHNbIDRdID0gYVRleHR1cmVDb29yZCArIHZlYzIoIDAuMDA4ICogc3RyZW5ndGgsIDAuMCk7XFxuICAgIHZCbHVyVGV4Q29vcmRzWyA1XSA9IGFUZXh0dXJlQ29vcmQgKyB2ZWMyKCAwLjAxMiAqIHN0cmVuZ3RoLCAwLjApO1xcblxcbiAgICB2Q29sb3IgPSB2ZWM0KGFDb2xvci5yZ2IgKiBhQ29sb3IuYSwgYUNvbG9yLmEpO1xcbn1cXG5cIixcbiAgICAgICAgLy8gZnJhZ21lbnQgc2hhZGVyXG4gICAgICAgIFwicHJlY2lzaW9uIGxvd3AgZmxvYXQ7XFxuXFxudmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7XFxudmFyeWluZyB2ZWMyIHZCbHVyVGV4Q29vcmRzWzZdO1xcbnZhcnlpbmcgdmVjNCB2Q29sb3I7XFxuXFxudW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXI7XFxuXFxudm9pZCBtYWluKHZvaWQpXFxue1xcbiAgICBnbF9GcmFnQ29sb3IgPSB2ZWM0KDAuMCk7XFxuXFxuICAgIGdsX0ZyYWdDb2xvciArPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZCbHVyVGV4Q29vcmRzWyAwXSkqMC4wMDQ0MzE4NDg0MTE5MzgzNDE7XFxuICAgIGdsX0ZyYWdDb2xvciArPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZCbHVyVGV4Q29vcmRzWyAxXSkqMC4wNTM5OTA5NjY1MTMxODk4NTtcXG4gICAgZ2xfRnJhZ0NvbG9yICs9IHRleHR1cmUyRCh1U2FtcGxlciwgdkJsdXJUZXhDb29yZHNbIDJdKSowLjI0MTk3MDcyNDUxOTE0NTQ7XFxuICAgIGdsX0ZyYWdDb2xvciArPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZUZXh0dXJlQ29vcmQgICAgICkqMC4zOTg5NDIyODA0MDE0MzI3O1xcbiAgICBnbF9GcmFnQ29sb3IgKz0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2Qmx1clRleENvb3Jkc1sgM10pKjAuMjQxOTcwNzI0NTE5MTQ1NDtcXG4gICAgZ2xfRnJhZ0NvbG9yICs9IHRleHR1cmUyRCh1U2FtcGxlciwgdkJsdXJUZXhDb29yZHNbIDRdKSowLjA1Mzk5MDk2NjUxMzE4OTg1O1xcbiAgICBnbF9GcmFnQ29sb3IgKz0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2Qmx1clRleENvb3Jkc1sgNV0pKjAuMDA0NDMxODQ4NDExOTM4MzQxO1xcbn1cXG5cIixcbiAgICAgICAgLy8gc2V0IHRoZSB1bmlmb3Jtc1xuICAgICAgICB7XG4gICAgICAgICAgICBzdHJlbmd0aDogeyB0eXBlOiAnMWYnLCB2YWx1ZTogMSB9XG4gICAgICAgIH1cbiAgICApO1xuXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgbnVtYmVyIG9mIHBhc3NlcyBmb3IgYmx1ci4gTW9yZSBwYXNzZXMgbWVhbnMgaGlnaGVyIHF1YWlsaXR5IGJsdXJpbmcuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMVxuICAgICAqL1xuICAgIHRoaXMucGFzc2VzID0gMTtcblxuICAgIHRoaXMuc3RyZW5ndGggPSA0O1xufVxuXG5CbHVyWEZpbHRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuQWJzdHJhY3RGaWx0ZXIucHJvdG90eXBlKTtcbkJsdXJYRmlsdGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IEJsdXJYRmlsdGVyO1xubW9kdWxlLmV4cG9ydHMgPSBCbHVyWEZpbHRlcjtcblxuQmx1clhGaWx0ZXIucHJvdG90eXBlLmFwcGx5RmlsdGVyID0gZnVuY3Rpb24gKHJlbmRlcmVyLCBpbnB1dCwgb3V0cHV0LCBjbGVhcilcbntcbiAgICB2YXIgc2hhZGVyID0gdGhpcy5nZXRTaGFkZXIocmVuZGVyZXIpO1xuXG4gICAgdGhpcy51bmlmb3Jtcy5zdHJlbmd0aC52YWx1ZSA9IHRoaXMuc3RyZW5ndGggLyA0IC8gdGhpcy5wYXNzZXMgKiAoaW5wdXQuZnJhbWUud2lkdGggLyBpbnB1dC5zaXplLndpZHRoKTtcblxuICAgIGlmKHRoaXMucGFzc2VzID09PSAxKVxuICAgIHtcbiAgICAgICAgcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5hcHBseUZpbHRlcihzaGFkZXIsIGlucHV0LCBvdXRwdXQsIGNsZWFyKTtcbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgdmFyIHJlbmRlclRhcmdldCA9IHJlbmRlcmVyLmZpbHRlck1hbmFnZXIuZ2V0UmVuZGVyVGFyZ2V0KHRydWUpO1xuICAgICAgICB2YXIgZmxpcCA9IGlucHV0O1xuICAgICAgICB2YXIgZmxvcCA9IHJlbmRlclRhcmdldDtcblxuICAgICAgICBmb3IodmFyIGkgPSAwOyBpIDwgdGhpcy5wYXNzZXMtMTsgaSsrKVxuICAgICAgICB7XG4gICAgICAgICAgICByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLmFwcGx5RmlsdGVyKHNoYWRlciwgZmxpcCwgZmxvcCwgdHJ1ZSk7XG5cbiAgICAgICAgICAgdmFyIHRlbXAgPSBmbG9wO1xuICAgICAgICAgICBmbG9wID0gZmxpcDtcbiAgICAgICAgICAgZmxpcCA9IHRlbXA7XG4gICAgICAgIH1cblxuICAgICAgICByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLmFwcGx5RmlsdGVyKHNoYWRlciwgZmxpcCwgb3V0cHV0LCBjbGVhcik7XG5cbiAgICAgICAgcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5yZXR1cm5SZW5kZXJUYXJnZXQocmVuZGVyVGFyZ2V0KTtcbiAgICB9XG59O1xuXG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKEJsdXJYRmlsdGVyLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIHN0cmVuZ3RoIG9mIGJvdGggdGhlIGJsdXIuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5CbHVyWEZpbHRlciNcbiAgICAgKiBAZGVmYXVsdCAyXG4gICAgICovXG4gICAgYmx1cjoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiAgdGhpcy5zdHJlbmd0aDtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMucGFkZGluZyA9ICBNYXRoLmFicyh2YWx1ZSkgKiAwLjU7XG4gICAgICAgICAgICB0aGlzLnN0cmVuZ3RoID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG59KTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vLi4vY29yZScpO1xuLy8gQHNlZSBodHRwczovL2dpdGh1Yi5jb20vc3Vic3RhY2svYnJmcy9pc3N1ZXMvMjVcblxuXG4vKipcbiAqIFRoZSBCbHVyWUZpbHRlciBhcHBsaWVzIGEgaG9yaXpvbnRhbCBHYXVzc2lhbiBibHVyIHRvIGFuIG9iamVjdC5cbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQWJzdHJhY3RGaWx0ZXJcbiAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnNcbiAqL1xuZnVuY3Rpb24gQmx1cllGaWx0ZXIoKVxue1xuICAgIGNvcmUuQWJzdHJhY3RGaWx0ZXIuY2FsbCh0aGlzLFxuICAgICAgICAvLyB2ZXJ0ZXggc2hhZGVyXG4gICAgICAgIFwiYXR0cmlidXRlIHZlYzIgYVZlcnRleFBvc2l0aW9uO1xcbmF0dHJpYnV0ZSB2ZWMyIGFUZXh0dXJlQ29vcmQ7XFxuYXR0cmlidXRlIHZlYzQgYUNvbG9yO1xcblxcbnVuaWZvcm0gZmxvYXQgc3RyZW5ndGg7XFxudW5pZm9ybSBtYXQzIHByb2plY3Rpb25NYXRyaXg7XFxuXFxudmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7XFxudmFyeWluZyB2ZWM0IHZDb2xvcjtcXG52YXJ5aW5nIHZlYzIgdkJsdXJUZXhDb29yZHNbNl07XFxuXFxudm9pZCBtYWluKHZvaWQpXFxue1xcbiAgICBnbF9Qb3NpdGlvbiA9IHZlYzQoKHByb2plY3Rpb25NYXRyaXggKiB2ZWMzKChhVmVydGV4UG9zaXRpb24pLCAxLjApKS54eSwgMC4wLCAxLjApO1xcbiAgICB2VGV4dHVyZUNvb3JkID0gYVRleHR1cmVDb29yZDtcXG5cXG4gICAgdkJsdXJUZXhDb29yZHNbIDBdID0gYVRleHR1cmVDb29yZCArIHZlYzIoMC4wLCAtMC4wMTIgKiBzdHJlbmd0aCk7XFxuICAgIHZCbHVyVGV4Q29vcmRzWyAxXSA9IGFUZXh0dXJlQ29vcmQgKyB2ZWMyKDAuMCwgLTAuMDA4ICogc3RyZW5ndGgpO1xcbiAgICB2Qmx1clRleENvb3Jkc1sgMl0gPSBhVGV4dHVyZUNvb3JkICsgdmVjMigwLjAsIC0wLjAwNCAqIHN0cmVuZ3RoKTtcXG4gICAgdkJsdXJUZXhDb29yZHNbIDNdID0gYVRleHR1cmVDb29yZCArIHZlYzIoMC4wLCAgMC4wMDQgKiBzdHJlbmd0aCk7XFxuICAgIHZCbHVyVGV4Q29vcmRzWyA0XSA9IGFUZXh0dXJlQ29vcmQgKyB2ZWMyKDAuMCwgIDAuMDA4ICogc3RyZW5ndGgpO1xcbiAgICB2Qmx1clRleENvb3Jkc1sgNV0gPSBhVGV4dHVyZUNvb3JkICsgdmVjMigwLjAsICAwLjAxMiAqIHN0cmVuZ3RoKTtcXG5cXG4gICB2Q29sb3IgPSB2ZWM0KGFDb2xvci5yZ2IgKiBhQ29sb3IuYSwgYUNvbG9yLmEpO1xcbn1cXG5cIixcbiAgICAgICAgLy8gZnJhZ21lbnQgc2hhZGVyXG4gICAgICAgIFwicHJlY2lzaW9uIGxvd3AgZmxvYXQ7XFxuXFxudmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7XFxudmFyeWluZyB2ZWMyIHZCbHVyVGV4Q29vcmRzWzZdO1xcbnZhcnlpbmcgdmVjNCB2Q29sb3I7XFxuXFxudW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXI7XFxuXFxudm9pZCBtYWluKHZvaWQpXFxue1xcbiAgICBnbF9GcmFnQ29sb3IgPSB2ZWM0KDAuMCk7XFxuXFxuICAgIGdsX0ZyYWdDb2xvciArPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZCbHVyVGV4Q29vcmRzWyAwXSkqMC4wMDQ0MzE4NDg0MTE5MzgzNDE7XFxuICAgIGdsX0ZyYWdDb2xvciArPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZCbHVyVGV4Q29vcmRzWyAxXSkqMC4wNTM5OTA5NjY1MTMxODk4NTtcXG4gICAgZ2xfRnJhZ0NvbG9yICs9IHRleHR1cmUyRCh1U2FtcGxlciwgdkJsdXJUZXhDb29yZHNbIDJdKSowLjI0MTk3MDcyNDUxOTE0NTQ7XFxuICAgIGdsX0ZyYWdDb2xvciArPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZUZXh0dXJlQ29vcmQgICAgICkqMC4zOTg5NDIyODA0MDE0MzI3O1xcbiAgICBnbF9GcmFnQ29sb3IgKz0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2Qmx1clRleENvb3Jkc1sgM10pKjAuMjQxOTcwNzI0NTE5MTQ1NDtcXG4gICAgZ2xfRnJhZ0NvbG9yICs9IHRleHR1cmUyRCh1U2FtcGxlciwgdkJsdXJUZXhDb29yZHNbIDRdKSowLjA1Mzk5MDk2NjUxMzE4OTg1O1xcbiAgICBnbF9GcmFnQ29sb3IgKz0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2Qmx1clRleENvb3Jkc1sgNV0pKjAuMDA0NDMxODQ4NDExOTM4MzQxO1xcbn1cXG5cIixcbiAgICAgICAgLy8gc2V0IHRoZSB1bmlmb3Jtc1xuICAgICAgICB7XG4gICAgICAgICAgICBzdHJlbmd0aDogeyB0eXBlOiAnMWYnLCB2YWx1ZTogMSB9XG4gICAgICAgIH1cbiAgICApO1xuXG4gICAgdGhpcy5wYXNzZXMgPSAxO1xuICAgIHRoaXMuc3RyZW5ndGggPSA0O1xufVxuXG5CbHVyWUZpbHRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuQWJzdHJhY3RGaWx0ZXIucHJvdG90eXBlKTtcbkJsdXJZRmlsdGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IEJsdXJZRmlsdGVyO1xubW9kdWxlLmV4cG9ydHMgPSBCbHVyWUZpbHRlcjtcblxuQmx1cllGaWx0ZXIucHJvdG90eXBlLmFwcGx5RmlsdGVyID0gZnVuY3Rpb24gKHJlbmRlcmVyLCBpbnB1dCwgb3V0cHV0LCBjbGVhcilcbntcbiAgICB2YXIgc2hhZGVyID0gdGhpcy5nZXRTaGFkZXIocmVuZGVyZXIpO1xuXG4gICAgdGhpcy51bmlmb3Jtcy5zdHJlbmd0aC52YWx1ZSA9IE1hdGguYWJzKHRoaXMuc3RyZW5ndGgpIC8gNCAvIHRoaXMucGFzc2VzICogKGlucHV0LmZyYW1lLmhlaWdodCAvIGlucHV0LnNpemUuaGVpZ2h0KTtcblxuICAgIGlmKHRoaXMucGFzc2VzID09PSAxKVxuICAgIHtcbiAgICAgICAgcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5hcHBseUZpbHRlcihzaGFkZXIsIGlucHV0LCBvdXRwdXQsIGNsZWFyKTtcbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgdmFyIHJlbmRlclRhcmdldCA9IHJlbmRlcmVyLmZpbHRlck1hbmFnZXIuZ2V0UmVuZGVyVGFyZ2V0KHRydWUpO1xuICAgICAgICB2YXIgZmxpcCA9IGlucHV0O1xuICAgICAgICB2YXIgZmxvcCA9IHJlbmRlclRhcmdldDtcblxuICAgICAgICBmb3IodmFyIGkgPSAwOyBpIDwgdGhpcy5wYXNzZXMtMTsgaSsrKVxuICAgICAgICB7XG4gICAgICAgICAgICByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLmFwcGx5RmlsdGVyKHNoYWRlciwgZmxpcCwgZmxvcCwgdHJ1ZSk7XG5cbiAgICAgICAgICAgdmFyIHRlbXAgPSBmbG9wO1xuICAgICAgICAgICBmbG9wID0gZmxpcDtcbiAgICAgICAgICAgZmxpcCA9IHRlbXA7XG4gICAgICAgIH1cblxuICAgICAgICByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLmFwcGx5RmlsdGVyKHNoYWRlciwgZmxpcCwgb3V0cHV0LCBjbGVhcik7XG5cbiAgICAgICAgcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5yZXR1cm5SZW5kZXJUYXJnZXQocmVuZGVyVGFyZ2V0KTtcbiAgICB9XG59O1xuXG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKEJsdXJZRmlsdGVyLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIHN0cmVuZ3RoIG9mIGJvdGggdGhlIGJsdXIuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5CbHVyWUZpbHRlciNcbiAgICAgKiBAZGVmYXVsdCAyXG4gICAgICovXG4gICAgYmx1cjoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiAgdGhpcy5zdHJlbmd0aDtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMucGFkZGluZyA9IE1hdGguYWJzKHZhbHVlKSAqIDAuNTtcbiAgICAgICAgICAgIHRoaXMuc3RyZW5ndGggPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi8uLi9jb3JlJyk7XG4vLyBAc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9zdWJzdGFjay9icmZzL2lzc3Vlcy8yNVxuXG5cbi8qKlxuICogQSBTbWFydCBCbHVyIEZpbHRlci5cbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQWJzdHJhY3RGaWx0ZXJcbiAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnNcbiAqL1xuZnVuY3Rpb24gU21hcnRCbHVyRmlsdGVyKClcbntcbiAgICBjb3JlLkFic3RyYWN0RmlsdGVyLmNhbGwodGhpcyxcbiAgICAgICAgLy8gdmVydGV4IHNoYWRlclxuICAgICAgICBudWxsLFxuICAgICAgICAvLyBmcmFnbWVudCBzaGFkZXJcbiAgICAgICAgXCJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcXG5cXG52YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDtcXG5cXG51bmlmb3JtIHNhbXBsZXIyRCB1U2FtcGxlcjtcXG51bmlmb3JtIHZlYzIgZGVsdGE7XFxuXFxuZmxvYXQgcmFuZG9tKHZlYzMgc2NhbGUsIGZsb2F0IHNlZWQpXFxue1xcbiAgICByZXR1cm4gZnJhY3Qoc2luKGRvdChnbF9GcmFnQ29vcmQueHl6ICsgc2VlZCwgc2NhbGUpKSAqIDQzNzU4LjU0NTMgKyBzZWVkKTtcXG59XFxuXFxudm9pZCBtYWluKHZvaWQpXFxue1xcbiAgICB2ZWM0IGNvbG9yID0gdmVjNCgwLjApO1xcbiAgICBmbG9hdCB0b3RhbCA9IDAuMDtcXG5cXG4gICAgZmxvYXQgb2Zmc2V0ID0gcmFuZG9tKHZlYzMoMTIuOTg5OCwgNzguMjMzLCAxNTEuNzE4MiksIDAuMCk7XFxuXFxuICAgIGZvciAoZmxvYXQgdCA9IC0zMC4wOyB0IDw9IDMwLjA7IHQrKylcXG4gICAge1xcbiAgICAgICAgZmxvYXQgcGVyY2VudCA9ICh0ICsgb2Zmc2V0IC0gMC41KSAvIDMwLjA7XFxuICAgICAgICBmbG9hdCB3ZWlnaHQgPSAxLjAgLSBhYnMocGVyY2VudCk7XFxuICAgICAgICB2ZWM0IHNhbXBsZSA9IHRleHR1cmUyRCh1U2FtcGxlciwgdlRleHR1cmVDb29yZCArIGRlbHRhICogcGVyY2VudCk7XFxuICAgICAgICBzYW1wbGUucmdiICo9IHNhbXBsZS5hO1xcbiAgICAgICAgY29sb3IgKz0gc2FtcGxlICogd2VpZ2h0O1xcbiAgICAgICAgdG90YWwgKz0gd2VpZ2h0O1xcbiAgICB9XFxuXFxuICAgIGdsX0ZyYWdDb2xvciA9IGNvbG9yIC8gdG90YWw7XFxuICAgIGdsX0ZyYWdDb2xvci5yZ2IgLz0gZ2xfRnJhZ0NvbG9yLmEgKyAwLjAwMDAxO1xcbn1cXG5cIixcbiAgICAgICAgLy8gdW5pZm9ybXNcbiAgICAgICAge1xuICAgICAgICAgIGRlbHRhOiB7IHR5cGU6ICd2MicsIHZhbHVlOiB7IHg6IDAuMSwgeTogMC4wIH0gfVxuICAgICAgICB9XG4gICAgKTtcbn1cblxuU21hcnRCbHVyRmlsdGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoY29yZS5BYnN0cmFjdEZpbHRlci5wcm90b3R5cGUpO1xuU21hcnRCbHVyRmlsdGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFNtYXJ0Qmx1ckZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gU21hcnRCbHVyRmlsdGVyO1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi8uLi9jb3JlJyk7XG4vLyBAc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9zdWJzdGFjay9icmZzL2lzc3Vlcy8yNVxuXG5cbi8qKlxuICogVGhlIENvbG9yTWF0cml4RmlsdGVyIGNsYXNzIGxldHMgeW91IGFwcGx5IGEgNXg0IG1hdHJpeCB0cmFuc2Zvcm1hdGlvbiBvbiB0aGUgUkdCQVxuICogY29sb3IgYW5kIGFscGhhIHZhbHVlcyBvZiBldmVyeSBwaXhlbCBvbiB5b3VyIGRpc3BsYXlPYmplY3QgdG8gcHJvZHVjZSBhIHJlc3VsdFxuICogd2l0aCBhIG5ldyBzZXQgb2YgUkdCQSBjb2xvciBhbmQgYWxwaGEgdmFsdWVzLiBJdCdzIHByZXR0eSBwb3dlcmZ1bCFcbiAqXG4gKiBgYGBqc1xuICogIHZhciBjb2xvck1hdHJpeCA9IG5ldyBQSVhJLkNvbG9yTWF0cml4RmlsdGVyKCk7XG4gKiAgY29udGFpbmVyLmZpbHRlcnMgPSBbY29sb3JNYXRyaXhdO1xuICogIGNvbG9yTWF0cml4LmNvbnRyYXN0KDIpO1xuICogYGBgXG4gKiBAYXV0aG9yIENsw6ltZW50IENoZW5lYmF1bHQgPGNsZW1lbnRAZ29vZGJveWRpZ2l0YWwuY29tPlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLkFic3RyYWN0RmlsdGVyXG4gKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzXG4gKi9cbmZ1bmN0aW9uIENvbG9yTWF0cml4RmlsdGVyKClcbntcbiAgICBjb3JlLkFic3RyYWN0RmlsdGVyLmNhbGwodGhpcyxcbiAgICAgICAgLy8gdmVydGV4IHNoYWRlclxuICAgICAgICBudWxsLFxuICAgICAgICAvLyBmcmFnbWVudCBzaGFkZXJcbiAgICAgICAgXCJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcXG5cXG52YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDtcXG51bmlmb3JtIHNhbXBsZXIyRCB1U2FtcGxlcjtcXG51bmlmb3JtIGZsb2F0IG1bMjVdO1xcblxcbnZvaWQgbWFpbih2b2lkKVxcbntcXG5cXG4gICAgdmVjNCBjID0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2VGV4dHVyZUNvb3JkKTtcXG5cXG4gICAgZ2xfRnJhZ0NvbG9yLnIgPSAobVswXSAqIGMucik7XFxuICAgICAgICBnbF9GcmFnQ29sb3IuciArPSAobVsxXSAqIGMuZyk7XFxuICAgICAgICBnbF9GcmFnQ29sb3IuciArPSAobVsyXSAqIGMuYik7XFxuICAgICAgICBnbF9GcmFnQ29sb3IuciArPSAobVszXSAqIGMuYSk7XFxuICAgICAgICBnbF9GcmFnQ29sb3IuciArPSBtWzRdO1xcblxcbiAgICBnbF9GcmFnQ29sb3IuZyA9IChtWzVdICogYy5yKTtcXG4gICAgICAgIGdsX0ZyYWdDb2xvci5nICs9IChtWzZdICogYy5nKTtcXG4gICAgICAgIGdsX0ZyYWdDb2xvci5nICs9IChtWzddICogYy5iKTtcXG4gICAgICAgIGdsX0ZyYWdDb2xvci5nICs9IChtWzhdICogYy5hKTtcXG4gICAgICAgIGdsX0ZyYWdDb2xvci5nICs9IG1bOV07XFxuXFxuICAgICBnbF9GcmFnQ29sb3IuYiA9IChtWzEwXSAqIGMucik7XFxuICAgICAgICBnbF9GcmFnQ29sb3IuYiArPSAobVsxMV0gKiBjLmcpO1xcbiAgICAgICAgZ2xfRnJhZ0NvbG9yLmIgKz0gKG1bMTJdICogYy5iKTtcXG4gICAgICAgIGdsX0ZyYWdDb2xvci5iICs9IChtWzEzXSAqIGMuYSk7XFxuICAgICAgICBnbF9GcmFnQ29sb3IuYiArPSBtWzE0XTtcXG5cXG4gICAgIGdsX0ZyYWdDb2xvci5hID0gKG1bMTVdICogYy5yKTtcXG4gICAgICAgIGdsX0ZyYWdDb2xvci5hICs9IChtWzE2XSAqIGMuZyk7XFxuICAgICAgICBnbF9GcmFnQ29sb3IuYSArPSAobVsxN10gKiBjLmIpO1xcbiAgICAgICAgZ2xfRnJhZ0NvbG9yLmEgKz0gKG1bMThdICogYy5hKTtcXG4gICAgICAgIGdsX0ZyYWdDb2xvci5hICs9IG1bMTldO1xcblxcbn1cXG5cIixcbiAgICAgICAgLy8gY3VzdG9tIHVuaWZvcm1zXG4gICAgICAgIHtcbiAgICAgICAgICAgIG06IHtcbiAgICAgICAgICAgICAgICB0eXBlOiAnMWZ2JywgdmFsdWU6IFtcbiAgICAgICAgICAgICAgICAgICAgMSwgMCwgMCwgMCwgMCxcbiAgICAgICAgICAgICAgICAgICAgMCwgMSwgMCwgMCwgMCxcbiAgICAgICAgICAgICAgICAgICAgMCwgMCwgMSwgMCwgMCxcbiAgICAgICAgICAgICAgICAgICAgMCwgMCwgMCwgMSwgMFxuICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICk7XG59XG5cbkNvbG9yTWF0cml4RmlsdGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoY29yZS5BYnN0cmFjdEZpbHRlci5wcm90b3R5cGUpO1xuQ29sb3JNYXRyaXhGaWx0ZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gQ29sb3JNYXRyaXhGaWx0ZXI7XG5tb2R1bGUuZXhwb3J0cyA9IENvbG9yTWF0cml4RmlsdGVyO1xuXG5cbi8qKlxuICogVHJhbnNmb3JtcyBjdXJyZW50IG1hdHJpeCBhbmQgc2V0IHRoZSBuZXcgb25lXG4gKlxuICogQHBhcmFtIG1hdHJpeCB7bnVtYmVyW119IChtYXQgNXg0KVxuICogQHBhcmFtIG11bHRpcGx5IHtib29sZWFufSBpZiB0cnVlLCBjdXJyZW50IG1hdHJpeCBhbmQgbWF0cml4IGFyZSBtdWx0aXBsaWVkLiBJZiBmYWxzZSwganVzdCBzZXQgdGhlIGN1cnJlbnQgbWF0cml4IHdpdGggQHBhcmFtIG1hdHJpeFxuICovXG5Db2xvck1hdHJpeEZpbHRlci5wcm90b3R5cGUuX2xvYWRNYXRyaXggPSBmdW5jdGlvbiAobWF0cml4LCBtdWx0aXBseSlcbntcbiAgICBtdWx0aXBseSA9ICEhbXVsdGlwbHk7XG5cbiAgICB2YXIgbmV3TWF0cml4ID0gbWF0cml4O1xuXG4gICAgaWYgKG11bHRpcGx5KSB7XG4gICAgICAgIHRoaXMuX211bHRpcGx5KG5ld01hdHJpeCwgdGhpcy51bmlmb3Jtcy5tLnZhbHVlLCBtYXRyaXgpO1xuICAgICAgICBuZXdNYXRyaXggPSB0aGlzLl9jb2xvck1hdHJpeChuZXdNYXRyaXgpO1xuICAgIH1cblxuICAgIC8vIHNldCB0aGUgbmV3IG1hdHJpeFxuICAgIHRoaXMudW5pZm9ybXMubS52YWx1ZSA9IG5ld01hdHJpeDtcbn07XG5cbi8qKlxuICogTXVsdGlwbGllcyB0d28gbWF0NSdzXG4gKlxuICogQHBhcmFtIG91dCB7bnVtYmVyW119IChtYXQgNXg0KSB0aGUgcmVjZWl2aW5nIG1hdHJpeFxuICogQHBhcmFtIGEge251bWJlcltdfSAobWF0IDV4NCkgdGhlIGZpcnN0IG9wZXJhbmRcbiAqIEBwYXJhbSBiIHtudW1iZXJbXX0gKG1hdCA1eDQpIHRoZSBzZWNvbmQgb3BlcmFuZFxuICogQHJldHVybnMgb3V0IHtudW1iZXJbXX0gKG1hdCA1eDQpXG4gKi9cbkNvbG9yTWF0cml4RmlsdGVyLnByb3RvdHlwZS5fbXVsdGlwbHkgPSBmdW5jdGlvbiAob3V0LCBhLCBiKVxue1xuXG4gICAgLy8gUmVkIENoYW5uZWxcbiAgICBvdXRbMF0gPSAoYVswXSAqIGJbMF0pICsgKGFbMV0gKiBiWzVdKSArIChhWzJdICogYlsxMF0pICsgKGFbM10gKiBiWzE1XSk7XG4gICAgb3V0WzFdID0gKGFbMF0gKiBiWzFdKSArIChhWzFdICogYls2XSkgKyAoYVsyXSAqIGJbMTFdKSArIChhWzNdICogYlsxNl0pO1xuICAgIG91dFsyXSA9IChhWzBdICogYlsyXSkgKyAoYVsxXSAqIGJbN10pICsgKGFbMl0gKiBiWzEyXSkgKyAoYVszXSAqIGJbMTddKTtcbiAgICBvdXRbM10gPSAoYVswXSAqIGJbM10pICsgKGFbMV0gKiBiWzhdKSArIChhWzJdICogYlsxM10pICsgKGFbM10gKiBiWzE4XSk7XG4gICAgb3V0WzRdID0gKGFbMF0gKiBiWzRdKSArIChhWzFdICogYls5XSkgKyAoYVsyXSAqIGJbMTRdKSArIChhWzNdICogYlsxOV0pO1xuXG4gICAgLy8gR3JlZW4gQ2hhbm5lbFxuICAgIG91dFs1XSA9IChhWzVdICogYlswXSkgKyAoYVs2XSAqIGJbNV0pICsgKGFbN10gKiBiWzEwXSkgKyAoYVs4XSAqIGJbMTVdKTtcbiAgICBvdXRbNl0gPSAoYVs1XSAqIGJbMV0pICsgKGFbNl0gKiBiWzZdKSArIChhWzddICogYlsxMV0pICsgKGFbOF0gKiBiWzE2XSk7XG4gICAgb3V0WzddID0gKGFbNV0gKiBiWzJdKSArIChhWzZdICogYls3XSkgKyAoYVs3XSAqIGJbMTJdKSArIChhWzhdICogYlsxN10pO1xuICAgIG91dFs4XSA9IChhWzVdICogYlszXSkgKyAoYVs2XSAqIGJbOF0pICsgKGFbN10gKiBiWzEzXSkgKyAoYVs4XSAqIGJbMThdKTtcbiAgICBvdXRbOV0gPSAoYVs1XSAqIGJbNF0pICsgKGFbNl0gKiBiWzldKSArIChhWzddICogYlsxNF0pICsgKGFbOF0gKiBiWzE5XSk7XG5cbiAgICAvLyBCbHVlIENoYW5uZWxcbiAgICBvdXRbMTBdID0gKGFbMTBdICogYlswXSkgKyAoYVsxMV0gKiBiWzVdKSArIChhWzEyXSAqIGJbMTBdKSArIChhWzEzXSAqIGJbMTVdKTtcbiAgICBvdXRbMTFdID0gKGFbMTBdICogYlsxXSkgKyAoYVsxMV0gKiBiWzZdKSArIChhWzEyXSAqIGJbMTFdKSArIChhWzEzXSAqIGJbMTZdKTtcbiAgICBvdXRbMTJdID0gKGFbMTBdICogYlsyXSkgKyAoYVsxMV0gKiBiWzddKSArIChhWzEyXSAqIGJbMTJdKSArIChhWzEzXSAqIGJbMTddKTtcbiAgICBvdXRbMTNdID0gKGFbMTBdICogYlszXSkgKyAoYVsxMV0gKiBiWzhdKSArIChhWzEyXSAqIGJbMTNdKSArIChhWzEzXSAqIGJbMThdKTtcbiAgICBvdXRbMTRdID0gKGFbMTBdICogYls0XSkgKyAoYVsxMV0gKiBiWzldKSArIChhWzEyXSAqIGJbMTRdKSArIChhWzEzXSAqIGJbMTldKTtcblxuICAgIC8vIEFscGhhIENoYW5uZWxcbiAgICBvdXRbMTVdID0gKGFbMTVdICogYlswXSkgKyAoYVsxNl0gKiBiWzVdKSArIChhWzE3XSAqIGJbMTBdKSArIChhWzE4XSAqIGJbMTVdKTtcbiAgICBvdXRbMTZdID0gKGFbMTVdICogYlsxXSkgKyAoYVsxNl0gKiBiWzZdKSArIChhWzE3XSAqIGJbMTFdKSArIChhWzE4XSAqIGJbMTZdKTtcbiAgICBvdXRbMTddID0gKGFbMTVdICogYlsyXSkgKyAoYVsxNl0gKiBiWzddKSArIChhWzE3XSAqIGJbMTJdKSArIChhWzE4XSAqIGJbMTddKTtcbiAgICBvdXRbMThdID0gKGFbMTVdICogYlszXSkgKyAoYVsxNl0gKiBiWzhdKSArIChhWzE3XSAqIGJbMTNdKSArIChhWzE4XSAqIGJbMThdKTtcbiAgICBvdXRbMTldID0gKGFbMTVdICogYls0XSkgKyAoYVsxNl0gKiBiWzldKSArIChhWzE3XSAqIGJbMTRdKSArIChhWzE4XSAqIGJbMTldKTtcblxuICAgIHJldHVybiBvdXQ7XG59O1xuXG4vKipcbiAqIENyZWF0ZSBhIEZsb2F0MzIgQXJyYXkgYW5kIG5vcm1hbGl6ZSB0aGUgb2Zmc2V0IGNvbXBvbmVudCB0byAwLTFcbiAqXG4gKiBAcGFyYW0gbWF0cml4IHtudW1iZXJbXX0gKG1hdCA1eDQpXG4gKiBAcmV0dXJuIG0ge251bWJlcltdfSAobWF0IDV4NCkgd2l0aCBhbGwgdmFsdWVzIGJldHdlZW4gMC0xXG4gKi9cbkNvbG9yTWF0cml4RmlsdGVyLnByb3RvdHlwZS5fY29sb3JNYXRyaXggPSBmdW5jdGlvbiAobWF0cml4KVxue1xuICAgIC8vIENyZWF0ZSBhIEZsb2F0MzIgQXJyYXkgYW5kIG5vcm1hbGl6ZSB0aGUgb2Zmc2V0IGNvbXBvbmVudCB0byAwLTFcbiAgICB2YXIgbSA9IG5ldyBGbG9hdDMyQXJyYXkobWF0cml4KTtcbiAgICBtWzRdIC89IDI1NTtcbiAgICBtWzldIC89IDI1NTtcbiAgICBtWzE0XSAvPSAyNTU7XG4gICAgbVsxOV0gLz0gMjU1O1xuXG4gICAgcmV0dXJuIG07XG59O1xuXG4vKipcbiAqIEFkanVzdHMgYnJpZ2h0bmVzc1xuICpcbiAqIEBwYXJhbSBiIHtudW1iZXJ9IHZhbHVlIG9mIHRoZSBicmlndGhuZXNzICgwIGlzIGJsYWNrKVxuICogQHBhcmFtIG11bHRpcGx5IHtib29sZWFufSByZWZlciB0byAuX2xvYWRNYXRyaXgoKSBtZXRob2RcbiAqL1xuQ29sb3JNYXRyaXhGaWx0ZXIucHJvdG90eXBlLmJyaWdodG5lc3MgPSBmdW5jdGlvbiAoYiwgbXVsdGlwbHkpXG57XG4gICAgdmFyIG1hdHJpeCA9IFtcbiAgICAgICAgYiwgMCwgMCwgMCwgMCxcbiAgICAgICAgMCwgYiwgMCwgMCwgMCxcbiAgICAgICAgMCwgMCwgYiwgMCwgMCxcbiAgICAgICAgMCwgMCwgMCwgMSwgMFxuICAgIF07XG5cbiAgICB0aGlzLl9sb2FkTWF0cml4KG1hdHJpeCwgbXVsdGlwbHkpO1xufTtcblxuLyoqXG4gKiBTZXQgdGhlIG1hdHJpY2VzIGluIGdyZXkgc2NhbGVzXG4gKlxuICogQHBhcmFtIHNjYWxlIHtudW1iZXJ9IHZhbHVlIG9mIHRoZSBncmV5ICgwIGlzIGJsYWNrKVxuICogQHBhcmFtIG11bHRpcGx5IHtib29sZWFufSByZWZlciB0byAuX2xvYWRNYXRyaXgoKSBtZXRob2RcbiAqL1xuQ29sb3JNYXRyaXhGaWx0ZXIucHJvdG90eXBlLmdyZXlzY2FsZSA9IGZ1bmN0aW9uIChzY2FsZSwgbXVsdGlwbHkpXG57XG4gICAgdmFyIG1hdHJpeCA9IFtcbiAgICAgICAgc2NhbGUsIHNjYWxlLCBzY2FsZSwgMCwgMCxcbiAgICAgICAgc2NhbGUsIHNjYWxlLCBzY2FsZSwgMCwgMCxcbiAgICAgICAgc2NhbGUsIHNjYWxlLCBzY2FsZSwgMCwgMCxcbiAgICAgICAgMCwgMCwgMCwgMSwgMFxuICAgIF07XG5cbiAgICB0aGlzLl9sb2FkTWF0cml4KG1hdHJpeCwgbXVsdGlwbHkpO1xufTtcbi8vQW1lcmljYW5pemVkIGFsaWFzXG5Db2xvck1hdHJpeEZpbHRlci5wcm90b3R5cGUuZ3JheXNjYWxlID0gQ29sb3JNYXRyaXhGaWx0ZXIucHJvdG90eXBlLmdyZXlzY2FsZTtcblxuLyoqXG4gKiBTZXQgdGhlIGJsYWNrIGFuZCB3aGl0ZSBtYXRyaWNlXG4gKiBNdWx0aXBseSB0aGUgY3VycmVudCBtYXRyaXhcbiAqXG4gKiBAcGFyYW0gbXVsdGlwbHkge2Jvb2xlYW59IHJlZmVyIHRvIC5fbG9hZE1hdHJpeCgpIG1ldGhvZFxuICovXG5Db2xvck1hdHJpeEZpbHRlci5wcm90b3R5cGUuYmxhY2tBbmRXaGl0ZSA9IGZ1bmN0aW9uIChtdWx0aXBseSlcbntcbiAgICB2YXIgbWF0cml4ID0gW1xuICAgICAgICAwLjMsIDAuNiwgMC4xLCAwLCAwLFxuICAgICAgICAwLjMsIDAuNiwgMC4xLCAwLCAwLFxuICAgICAgICAwLjMsIDAuNiwgMC4xLCAwLCAwLFxuICAgICAgICAwLCAwLCAwLCAxLCAwXG4gICAgXTtcblxuICAgIHRoaXMuX2xvYWRNYXRyaXgobWF0cml4LCBtdWx0aXBseSk7XG59O1xuXG4vKipcbiAqIFNldCB0aGUgaHVlIHByb3BlcnR5IG9mIHRoZSBjb2xvclxuICpcbiAqIEBwYXJhbSByb3RhdGlvbiB7bnVtYmVyfSBpbiBkZWdyZWVzXG4gKiBAcGFyYW0gbXVsdGlwbHkge2Jvb2xlYW59IHJlZmVyIHRvIC5fbG9hZE1hdHJpeCgpIG1ldGhvZFxuICovXG5Db2xvck1hdHJpeEZpbHRlci5wcm90b3R5cGUuaHVlID0gZnVuY3Rpb24gKHJvdGF0aW9uLCBtdWx0aXBseSlcbntcbiAgICByb3RhdGlvbiA9IChyb3RhdGlvbiB8fCAwKSAvIDE4MCAqIE1hdGguUEk7XG4gICAgdmFyIGNvcyA9IE1hdGguY29zKHJvdGF0aW9uKSxcbiAgICAgICAgc2luID0gTWF0aC5zaW4ocm90YXRpb24pO1xuXG4gICAgLy8gbHVtaW5hbmNlUmVkLCBsdW1pbmFuY2VHcmVlbiwgbHVtaW5hbmNlQmx1ZVxuICAgIHZhciBsdW1SID0gMC4yMTMsIC8vIG9yIDAuMzA4NlxuICAgICAgICBsdW1HID0gMC43MTUsIC8vIG9yIDAuNjA5NFxuICAgICAgICBsdW1CID0gMC4wNzI7IC8vIG9yIDAuMDgyMFxuXG4gICAgdmFyIG1hdHJpeCA9IFtcbiAgICAgICAgbHVtUiArIGNvcyAqICgxIC0gbHVtUikgKyBzaW4gKiAoLWx1bVIpLCBsdW1HICsgY29zICogKC1sdW1HKSArIHNpbiAqICgtbHVtRyksIGx1bUIgKyBjb3MgKiAoLWx1bUIpICsgc2luICogKDEgLSBsdW1CKSwgMCwgMCxcbiAgICAgICAgbHVtUiArIGNvcyAqICgtbHVtUikgKyBzaW4gKiAoMC4xNDMpLCBsdW1HICsgY29zICogKDEgLSBsdW1HKSArIHNpbiAqICgwLjE0MCksIGx1bUIgKyBjb3MgKiAoLWx1bUIpICsgc2luICogKC0wLjI4MyksIDAsIDAsXG4gICAgICAgIGx1bVIgKyBjb3MgKiAoLWx1bVIpICsgc2luICogKC0oMSAtIGx1bVIpKSwgbHVtRyArIGNvcyAqICgtbHVtRykgKyBzaW4gKiAobHVtRyksIGx1bUIgKyBjb3MgKiAoMSAtIGx1bUIpICsgc2luICogKGx1bUIpLCAwLCAwLFxuICAgICAgICAwLCAwLCAwLCAxLCAwXG4gICAgXTtcblxuICAgIHRoaXMuX2xvYWRNYXRyaXgobWF0cml4LCBtdWx0aXBseSk7XG59O1xuXG5cbi8qKlxuICogU2V0IHRoZSBjb250cmFzdCBtYXRyaXgsIGluY3JlYXNlIHRoZSBzZXBhcmF0aW9uIGJldHdlZW4gZGFyayBhbmQgYnJpZ2h0XG4gKiBJbmNyZWFzZSBjb250cmFzdCA6IHNoYWRvd3MgZGFya2VyIGFuZCBoaWdobGlnaHRzIGJyaWdodGVyXG4gKiBEZWNyZWFzZSBjb250cmFzdCA6IGJyaW5nIHRoZSBzaGFkb3dzIHVwIGFuZCB0aGUgaGlnaGxpZ2h0cyBkb3duXG4gKlxuICogQHBhcmFtIGFtb3VudCB7bnVtYmVyfSB2YWx1ZSBvZiB0aGUgY29udHJhc3RcbiAqIEBwYXJhbSBtdWx0aXBseSB7Ym9vbGVhbn0gcmVmZXIgdG8gLl9sb2FkTWF0cml4KCkgbWV0aG9kXG4gKi9cbkNvbG9yTWF0cml4RmlsdGVyLnByb3RvdHlwZS5jb250cmFzdCA9IGZ1bmN0aW9uIChhbW91bnQsIG11bHRpcGx5KVxue1xuICAgIHZhciB2ID0gKGFtb3VudCB8fCAwKSArIDE7XG4gICAgdmFyIG8gPSAtMTI4ICogKHYgLSAxKTtcblxuICAgIHZhciBtYXRyaXggPSBbXG4gICAgICAgIHYsIDAsIDAsIDAsIG8sXG4gICAgICAgIDAsIHYsIDAsIDAsIG8sXG4gICAgICAgIDAsIDAsIHYsIDAsIG8sXG4gICAgICAgIDAsIDAsIDAsIDEsIDBcbiAgICBdO1xuXG4gICAgdGhpcy5fbG9hZE1hdHJpeChtYXRyaXgsIG11bHRpcGx5KTtcbn07XG5cbi8qKlxuICogU2V0IHRoZSBzYXR1cmF0aW9uIG1hdHJpeCwgaW5jcmVhc2UgdGhlIHNlcGFyYXRpb24gYmV0d2VlbiBjb2xvcnNcbiAqIEluY3JlYXNlIHNhdHVyYXRpb24gOiBpbmNyZWFzZSBjb250cmFzdCwgYnJpZ2h0bmVzcywgYW5kIHNoYXJwbmVzc1xuICpcbiAqIEBwYXJhbSBhbW91bnQge251bWJlcn1cbiAqIEBwYXJhbSBtdWx0aXBseSB7Ym9vbGVhbn0gcmVmZXIgdG8gLl9sb2FkTWF0cml4KCkgbWV0aG9kXG4gKi9cbkNvbG9yTWF0cml4RmlsdGVyLnByb3RvdHlwZS5zYXR1cmF0ZSA9IGZ1bmN0aW9uIChhbW91bnQsIG11bHRpcGx5KVxue1xuICAgIHZhciB4ID0gKGFtb3VudCB8fCAwKSAqIDIgLyAzICsgMTtcbiAgICB2YXIgeSA9ICgoeCAtIDEpICogLTAuNSk7XG5cbiAgICB2YXIgbWF0cml4ID0gW1xuICAgICAgICB4LCB5LCB5LCAwLCAwLFxuICAgICAgICB5LCB4LCB5LCAwLCAwLFxuICAgICAgICB5LCB5LCB4LCAwLCAwLFxuICAgICAgICAwLCAwLCAwLCAxLCAwXG4gICAgXTtcblxuICAgIHRoaXMuX2xvYWRNYXRyaXgobWF0cml4LCBtdWx0aXBseSk7XG59O1xuXG4vKipcbiAqIERlc2F0dXJhdGUgaW1hZ2UgKHJlbW92ZSBjb2xvcilcbiAqXG4gKiBDYWxsIHRoZSBzYXR1cmF0ZSBmdW5jdGlvblxuICpcbiAqIEBwYXJhbSBtdWx0aXBseSB7Ym9vbGVhbn0gcmVmZXIgdG8gLl9sb2FkTWF0cml4KCkgbWV0aG9kXG4gKi9cbkNvbG9yTWF0cml4RmlsdGVyLnByb3RvdHlwZS5kZXNhdHVyYXRlID0gZnVuY3Rpb24gKG11bHRpcGx5KSAvLyBqc2hpbnQgdW51c2VkOmZhbHNlXG57XG4gICAgdGhpcy5zYXR1cmF0ZSgtMSk7XG59O1xuXG4vKipcbiAqIE5lZ2F0aXZlIGltYWdlIChpbnZlcnNlIG9mIGNsYXNzaWMgcmdiIG1hdHJpeClcbiAqXG4gKiBAcGFyYW0gbXVsdGlwbHkge2Jvb2xlYW59IHJlZmVyIHRvIC5fbG9hZE1hdHJpeCgpIG1ldGhvZFxuICovXG5Db2xvck1hdHJpeEZpbHRlci5wcm90b3R5cGUubmVnYXRpdmUgPSBmdW5jdGlvbiAobXVsdGlwbHkpXG57XG4gICAgdmFyIG1hdHJpeCA9IFtcbiAgICAgICAgMCwgMSwgMSwgMCwgMCxcbiAgICAgICAgMSwgMCwgMSwgMCwgMCxcbiAgICAgICAgMSwgMSwgMCwgMCwgMCxcbiAgICAgICAgMCwgMCwgMCwgMSwgMFxuICAgIF07XG5cbiAgICB0aGlzLl9sb2FkTWF0cml4KG1hdHJpeCwgbXVsdGlwbHkpO1xufTtcblxuLyoqXG4gKiBTZXBpYSBpbWFnZVxuICpcbiAqIEBwYXJhbSBtdWx0aXBseSB7Ym9vbGVhbn0gcmVmZXIgdG8gLl9sb2FkTWF0cml4KCkgbWV0aG9kXG4gKi9cbkNvbG9yTWF0cml4RmlsdGVyLnByb3RvdHlwZS5zZXBpYSA9IGZ1bmN0aW9uIChtdWx0aXBseSlcbntcbiAgICB2YXIgbWF0cml4ID0gW1xuICAgICAgICAwLjM5MywgMC43Njg5OTk5LCAwLjE4ODk5OTk5LCAwLCAwLFxuICAgICAgICAwLjM0OSwgMC42ODU5OTk5LCAwLjE2Nzk5OTk5LCAwLCAwLFxuICAgICAgICAwLjI3MiwgMC41MzM5OTk5LCAwLjEzMDk5OTk5LCAwLCAwLFxuICAgICAgICAwLCAwLCAwLCAxLCAwXG4gICAgXTtcblxuICAgIHRoaXMuX2xvYWRNYXRyaXgobWF0cml4LCBtdWx0aXBseSk7XG59O1xuXG4vKipcbiAqIENvbG9yIG1vdGlvbiBwaWN0dXJlIHByb2Nlc3MgaW52ZW50ZWQgaW4gMTkxNiAodGhhbmtzIERvbWluaWMgU3phYmxld3NraSlcbiAqXG4gKiBAcGFyYW0gbXVsdGlwbHkge2Jvb2xlYW59IHJlZmVyIHRvIC5fbG9hZE1hdHJpeCgpIG1ldGhvZFxuICovXG5Db2xvck1hdHJpeEZpbHRlci5wcm90b3R5cGUudGVjaG5pY29sb3IgPSBmdW5jdGlvbiAobXVsdGlwbHkpXG57XG4gICAgdmFyIG1hdHJpeCA9IFtcbiAgICAgICAgMS45MTI1Mjc3ODkxNDU2MDgzLCAtMC44NTQ1MzQ0OTc2OTUxNjQ1LCAtMC4wOTE1NTUwODQ4Mjc1NTU4NSwgMCwgMTEuNzkzNjAzNDM0Mzc3MzM3LFxuICAgICAgICAtMC4zMDg3ODMzMzg1OTI4MDk3LCAxLjc2NTg5MDg1NTU0NTg0MjgsIC0wLjEwNjAxNzQzMDc0NzIyMjQ1LCAwLCAtNzAuMzUyMDUxNjE0NjEzOTgsXG4gICAgICAgIC0wLjIzMTEwMzM3NzU0ODYxNiwgLTAuNzUwMTg5OTE5NzQ0MDIxMiwgMS44NDc1OTc4MTYxMDgxODksIDAsIDMwLjk1MDk0MDg2OTQ5MTEzOCxcbiAgICAgICAgMCwgMCwgMCwgMSwgMFxuICAgIF07XG5cbiAgICB0aGlzLl9sb2FkTWF0cml4KG1hdHJpeCwgbXVsdGlwbHkpO1xufTtcblxuLyoqXG4gKiBQb2xhcm9pZCBmaWx0ZXJcbiAqXG4gKiBAcGFyYW0gbXVsdGlwbHkge2Jvb2xlYW59IHJlZmVyIHRvIC5fbG9hZE1hdHJpeCgpIG1ldGhvZFxuICovXG5Db2xvck1hdHJpeEZpbHRlci5wcm90b3R5cGUucG9sYXJvaWQgPSBmdW5jdGlvbiAobXVsdGlwbHkpXG57XG4gICAgdmFyIG1hdHJpeCA9IFtcbiAgICAgICAgMS40MzgsIC0wLjA2MiwgLTAuMDYyLCAwLCAwLFxuICAgICAgICAtMC4xMjIsIDEuMzc4LCAtMC4xMjIsIDAsIDAsXG4gICAgICAgIC0wLjAxNiwgLTAuMDE2LCAxLjQ4MywgMCwgMCxcbiAgICAgICAgMCwgMCwgMCwgMSwgMFxuICAgIF07XG5cbiAgICB0aGlzLl9sb2FkTWF0cml4KG1hdHJpeCwgbXVsdGlwbHkpO1xufTtcblxuLyoqXG4gKiBGaWx0ZXIgd2hvIHRyYW5zZm9ybXMgOiBSZWQgLT4gQmx1ZSBhbmQgQmx1ZSAtPiBSZWRcbiAqXG4gKiBAcGFyYW0gbXVsdGlwbHkge2Jvb2xlYW59IHJlZmVyIHRvIC5fbG9hZE1hdHJpeCgpIG1ldGhvZFxuICovXG5Db2xvck1hdHJpeEZpbHRlci5wcm90b3R5cGUudG9CR1IgPSBmdW5jdGlvbiAobXVsdGlwbHkpXG57XG4gICAgdmFyIG1hdHJpeCA9IFtcbiAgICAgICAgMCwgMCwgMSwgMCwgMCxcbiAgICAgICAgMCwgMSwgMCwgMCwgMCxcbiAgICAgICAgMSwgMCwgMCwgMCwgMCxcbiAgICAgICAgMCwgMCwgMCwgMSwgMFxuICAgIF07XG5cbiAgICB0aGlzLl9sb2FkTWF0cml4KG1hdHJpeCwgbXVsdGlwbHkpO1xufTtcblxuLyoqXG4gKiBDb2xvciByZXZlcnNhbCBmaWxtIGludHJvZHVjZWQgYnkgRWFzdG1hbiBLb2RhayBpbiAxOTM1LiAodGhhbmtzIERvbWluaWMgU3phYmxld3NraSlcbiAqXG4gKiBAcGFyYW0gbXVsdGlwbHkge2Jvb2xlYW59IHJlZmVyIHRvIC5fbG9hZE1hdHJpeCgpIG1ldGhvZFxuICovXG5Db2xvck1hdHJpeEZpbHRlci5wcm90b3R5cGUua29kYWNocm9tZSA9IGZ1bmN0aW9uIChtdWx0aXBseSlcbntcbiAgICB2YXIgbWF0cml4ID0gW1xuICAgICAgICAxLjEyODU1ODIzOTY1OTM1MjUsIC0wLjM5NjczODIyODM2MDEzNDgsIC0wLjAzOTkyNTU5MTcyOTIxNzkzLCAwLCA2My43Mjk1ODc2MjE5NjUwMixcbiAgICAgICAgLTAuMTY0MDQzMzk5NjIyNDQ2MTYsIDEuMDgzNTI1MTU2NjI5MTMwNCwgLTAuMDU0OTg4MDUxMTU2MzMxMzIsIDAsIDI0LjczMjQwNzg5NjcwNjIwMyxcbiAgICAgICAgLTAuMTY3ODYwMTA3MDYxNTU3NjMsIC0wLjU2MDM0MTYyNzc2OTUyNDgsIDEuNjAxNDg1MDc2MTk2NDk0MywgMCwgMzUuNjI5ODI4MDc0NjA5NDYsXG4gICAgICAgIDAsIDAsIDAsIDEsIDBcbiAgICBdO1xuXG4gICAgdGhpcy5fbG9hZE1hdHJpeChtYXRyaXgsIG11bHRpcGx5KTtcbn07XG5cbi8qKlxuICogQnJvd24gZGVsaWNpb3VzIGJyb3duaSBmaWx0ZXIgKHRoYW5rcyBEb21pbmljIFN6YWJsZXdza2kpXG4gKlxuICogQHBhcmFtIG11bHRpcGx5IHtib29sZWFufSByZWZlciB0byAuX2xvYWRNYXRyaXgoKSBtZXRob2RcbiAqL1xuQ29sb3JNYXRyaXhGaWx0ZXIucHJvdG90eXBlLmJyb3duaSA9IGZ1bmN0aW9uIChtdWx0aXBseSlcbntcbiAgICB2YXIgbWF0cml4ID0gW1xuICAgICAgICAwLjU5OTcwMjM0OTgxNTk3MTUsIDAuMzQ1NTMyNDMwNDgzOTEyNjMsIC0wLjI3MDgyOTg2NzQ1MzgwNDIsIDAsIDQ3LjQzMTkyODU1NjAwODczLFxuICAgICAgICAtMC4wMzc3MDMyNDk4Mzc3ODMxNTcsIDAuODYwOTU3NzU4Nzk5MjY0MSwgMC4xNTA1OTU1MjM4ODQ1OTkxMywgMCwgLTM2Ljk2ODQxNDk4MzE5MTI3LFxuICAgICAgICAwLjI0MTEzNjM1MTI4MTUzMzM1LCAtMC4wNzQ0MTAzNzkwODQyMjQ5MiwgMC40NDk3MjE4MjA2NDg3NzE1MywgMCwgLTcuNTYyMDc1Mjc3NTkxMjgzLFxuICAgICAgICAwLCAwLCAwLCAxLCAwXG4gICAgXTtcblxuICAgIHRoaXMuX2xvYWRNYXRyaXgobWF0cml4LCBtdWx0aXBseSk7XG59O1xuXG4vKlxuICogVmludGFnZSBmaWx0ZXIgKHRoYW5rcyBEb21pbmljIFN6YWJsZXdza2kpXG4gKlxuICogQHBhcmFtIG11bHRpcGx5IHtib29sZWFufSByZWZlciB0byAuX2xvYWRNYXRyaXgoKSBtZXRob2RcbiAqL1xuQ29sb3JNYXRyaXhGaWx0ZXIucHJvdG90eXBlLnZpbnRhZ2UgPSBmdW5jdGlvbiAobXVsdGlwbHkpXG57XG4gICAgdmFyIG1hdHJpeCA9IFtcbiAgICAgICAgMC42Mjc5MzQ1NjM1NjA1OTk0LCAwLjMyMDIxODM0MjA4MTkzNjcsIC0wLjAzOTY1NDA4MjExMzEyNDUzLCAwLCA5LjY1MTI4NTgzNTI5NDEyMyxcbiAgICAgICAgMC4wMjU3ODM5NzcwNDgwODg2OCwgMC42NDQxMTg4NjQ0Mzc0NzcxLCAwLjAzMjU5MTI3NjE2MTQ5Mjk0LCAwLCA3LjQ2MjgyOTE3NjQ3MDU5MSxcbiAgICAgICAgMC4wNDY2MDU1NTU2NzgyNzE5LCAtMC4wODUxMjMyOTg3MjQ3ODkxLCAwLjUyNDE2NDgwMTg3MDA0NjUsIDAsIDUuMTU5MTkwNTg4MjM1Mjk2LFxuICAgICAgICAwLCAwLCAwLCAxLCAwXG4gICAgXTtcblxuICAgIHRoaXMuX2xvYWRNYXRyaXgobWF0cml4LCBtdWx0aXBseSk7XG59O1xuXG4vKlxuICogV2UgZG9uJ3Qga25vdyBleGFjdGx5IHdoYXQgaXQgZG9lcywga2luZCBvZiBncmFkaWVudCBtYXAsIGJ1dCBmdW5ueSB0byBwbGF5IHdpdGghXG4gKlxuICogQHBhcmFtIGRlc2F0dXJhdGlvbiB7bnVtYmVyfVxuICogQHBhcmFtIHRvbmVkIHtudW1iZXJ9XG4gKiBAcGFyYW0gbGlnaHRDb2xvciB7c3RyaW5nfSAoZXhhbXBsZSA6IFwiMHhGRkU1ODBcIilcbiAqIEBwYXJhbSBkYXJrQ29sb3Ige3N0cmluZ30gIChleGFtcGxlIDogXCIweEZGRTU4MFwiKVxuICpcbiAqIEBwYXJhbSBtdWx0aXBseSB7Ym9vbGVhbn0gcmVmZXIgdG8gLl9sb2FkTWF0cml4KCkgbWV0aG9kXG4gKi9cbkNvbG9yTWF0cml4RmlsdGVyLnByb3RvdHlwZS5jb2xvclRvbmUgPSBmdW5jdGlvbiAoZGVzYXR1cmF0aW9uLCB0b25lZCwgbGlnaHRDb2xvciwgZGFya0NvbG9yLCBtdWx0aXBseSlcbntcbiAgICBkZXNhdHVyYXRpb24gPSBkZXNhdHVyYXRpb24gfHwgMC4yO1xuICAgIHRvbmVkID0gdG9uZWQgfHwgMC4xNTtcbiAgICBsaWdodENvbG9yID0gbGlnaHRDb2xvciB8fCAweEZGRTU4MDtcbiAgICBkYXJrQ29sb3IgPSBkYXJrQ29sb3IgfHwgMHgzMzgwMDA7XG5cbiAgICB2YXIgbFIgPSAoKGxpZ2h0Q29sb3IgPj4gMTYpICYgMHhGRikgLyAyNTU7XG4gICAgdmFyIGxHID0gKChsaWdodENvbG9yID4+IDgpICYgMHhGRikgLyAyNTU7XG4gICAgdmFyIGxCID0gKGxpZ2h0Q29sb3IgJiAweEZGKSAvIDI1NTtcblxuICAgIHZhciBkUiA9ICgoZGFya0NvbG9yID4+IDE2KSAmIDB4RkYpIC8gMjU1O1xuICAgIHZhciBkRyA9ICgoZGFya0NvbG9yID4+IDgpICYgMHhGRikgLyAyNTU7XG4gICAgdmFyIGRCID0gKGRhcmtDb2xvciAmIDB4RkYpIC8gMjU1O1xuXG4gICAgdmFyIG1hdHJpeCA9IFtcbiAgICAgICAgMC4zLCAwLjU5LCAwLjExLCAwLCAwLFxuICAgICAgICBsUiwgbEcsIGxCLCBkZXNhdHVyYXRpb24sIDAsXG4gICAgICAgIGRSLCBkRywgZEIsIHRvbmVkLCAwLFxuICAgICAgICBsUiAtIGRSLCBsRyAtIGRHLCBsQiAtIGRCLCAwLCAwXG4gICAgXTtcblxuICAgIHRoaXMuX2xvYWRNYXRyaXgobWF0cml4LCBtdWx0aXBseSk7XG59O1xuXG4vKlxuICogTmlnaHQgZWZmZWN0XG4gKlxuICogQHBhcmFtIGludGVuc2l0eSB7bnVtYmVyfVxuICogQHBhcmFtIG11bHRpcGx5IHtib29sZWFufSByZWZlciB0byAuX2xvYWRNYXRyaXgoKSBtZXRob2RcbiAqL1xuQ29sb3JNYXRyaXhGaWx0ZXIucHJvdG90eXBlLm5pZ2h0ID0gZnVuY3Rpb24gKGludGVuc2l0eSwgbXVsdGlwbHkpXG57XG4gICAgaW50ZW5zaXR5ID0gaW50ZW5zaXR5IHx8IDAuMTtcbiAgICB2YXIgbWF0cml4ID0gW1xuICAgICAgICBpbnRlbnNpdHkgKiAoIC0yLjApLCAtaW50ZW5zaXR5LCAwLCAwLCAwLFxuICAgICAgICAtaW50ZW5zaXR5LCAwLCBpbnRlbnNpdHksIDAsIDAsXG4gICAgICAgIDAsIGludGVuc2l0eSwgaW50ZW5zaXR5ICogMi4wLCAwLCAwLFxuICAgICAgICAwLCAwLCAwLCAxLCAwXG4gICAgXTtcblxuICAgIHRoaXMuX2xvYWRNYXRyaXgobWF0cml4LCBtdWx0aXBseSk7XG59O1xuXG5cbi8qXG4gKiBQcmVkYXRvciBlZmZlY3RcbiAqXG4gKiBFcmFzZSB0aGUgY3VycmVudCBtYXRyaXggYnkgc2V0dGluZyBhIG5ldyBpbmRlcGVudCBvbmVcbiAqXG4gKiBAcGFyYW0gYW1vdW50IHtudW1iZXJ9IGhvdyBtdWNoIHRoZSBwcmVkYXRvciBmZWVscyBoaXMgZnV0dXJlIHZpY3RpbVxuICogQHBhcmFtIG11bHRpcGx5IHtib29sZWFufSByZWZlciB0byAuX2xvYWRNYXRyaXgoKSBtZXRob2RcbiAqL1xuQ29sb3JNYXRyaXhGaWx0ZXIucHJvdG90eXBlLnByZWRhdG9yID0gZnVuY3Rpb24gKGFtb3VudCwgbXVsdGlwbHkpXG57XG4gICAgdmFyIG1hdHJpeCA9IFtcbiAgICAgICAgMTEuMjI0MTMwNjMwNDkzMTY0ICogYW1vdW50LCAtNC43OTQ0ODY5OTk1MTE3MTkgKiBhbW91bnQsIC0yLjg3NDYxMTg1NDU1MzIyMjcgKiBhbW91bnQsIDAgKiBhbW91bnQsIDAuNDAzNDI0MzgyMjA5Nzc3ODMgKiBhbW91bnQsXG4gICAgICAgIC0zLjYzMzA2OTc1MzY0Njg1MDYgKiBhbW91bnQsIDkuMTkzMTU3MTk2MDQ0OTIyICogYW1vdW50LCAtMi45NTE4MTA4MzY3OTE5OTIgKiBhbW91bnQsIDAgKiBhbW91bnQsIC0xLjMxNjEzNTA0ODg2NjI3MiAqIGFtb3VudCxcbiAgICAgICAgLTMuMjE4NDE5NzkwMjY3OTQ0MyAqIGFtb3VudCwgLTQuMjM3NTAzMDUxNzU3ODEyNSAqIGFtb3VudCwgNy40NzY0NDgwNTkwODIwMzEgKiBhbW91bnQsIDAgKiBhbW91bnQsIDAuODA0NDQ1OTIyMzc0NzI1MyAqIGFtb3VudCxcbiAgICAgICAgMCwgMCwgMCwgMSwgMFxuICAgIF07XG5cbiAgICB0aGlzLl9sb2FkTWF0cml4KG1hdHJpeCwgbXVsdGlwbHkpO1xufTtcblxuLypcbiAqIExTRCBlZmZlY3RcbiAqXG4gKiBNdWx0aXBseSB0aGUgY3VycmVudCBtYXRyaXhcbiAqXG4gKiBAcGFyYW0gYW1vdW50IHtudW1iZXJ9IEhvdyBjcmF6eSBpcyB5b3VyIGVmZmVjdFxuICogQHBhcmFtIG11bHRpcGx5IHtib29sZWFufSByZWZlciB0byAuX2xvYWRNYXRyaXgoKSBtZXRob2RcbiAqL1xuQ29sb3JNYXRyaXhGaWx0ZXIucHJvdG90eXBlLmxzZCA9IGZ1bmN0aW9uIChtdWx0aXBseSlcbntcbiAgICB2YXIgbWF0cml4ID0gW1xuICAgICAgICAyLCAtMC40LCAwLjUsIDAsIDAsXG4gICAgICAgIC0wLjUsIDIsIC0wLjQsIDAsIDAsXG4gICAgICAgIC0wLjQsIC0wLjUsIDMsIDAsIDAsXG4gICAgICAgIDAsIDAsIDAsIDEsIDBcbiAgICBdO1xuXG4gICAgdGhpcy5fbG9hZE1hdHJpeChtYXRyaXgsIG11bHRpcGx5KTtcbn07XG5cbi8qXG4gKiBFcmFzZSB0aGUgY3VycmVudCBtYXRyaXggYnkgc2V0dGluZyB0aGUgZGVmYXVsdCBvbmVcbiAqXG4gKi9cbkNvbG9yTWF0cml4RmlsdGVyLnByb3RvdHlwZS5yZXNldCA9IGZ1bmN0aW9uICgpXG57XG4gICAgdmFyIG1hdHJpeCA9IFtcbiAgICAgICAgMSwgMCwgMCwgMCwgMCxcbiAgICAgICAgMCwgMSwgMCwgMCwgMCxcbiAgICAgICAgMCwgMCwgMSwgMCwgMCxcbiAgICAgICAgMCwgMCwgMCwgMSwgMFxuICAgIF07XG5cbiAgICB0aGlzLl9sb2FkTWF0cml4KG1hdHJpeCwgZmFsc2UpO1xufTtcblxuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhDb2xvck1hdHJpeEZpbHRlci5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBtYXRyaXggb2YgdGhlIGNvbG9yIG1hdHJpeCBmaWx0ZXJcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcltdfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuQ29sb3JNYXRyaXhGaWx0ZXIjXG4gICAgICogQGRlZmF1bHQgWzEsIDAsIDAsIDAsIDAsIDAsIDEsIDAsIDAsIDAsIDAsIDAsIDEsIDAsIDAsIDAsIDAsIDAsIDEsIDBdXG4gICAgICovXG4gICAgbWF0cml4OiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudW5pZm9ybXMubS52YWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudW5pZm9ybXMubS52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfVxufSk7XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uLy4uL2NvcmUnKTtcbi8vIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL3N1YnN0YWNrL2JyZnMvaXNzdWVzLzI1XG5cblxuLyoqXG4gKiBUaGlzIGxvd2VycyB0aGUgY29sb3IgZGVwdGggb2YgeW91ciBpbWFnZSBieSB0aGUgZ2l2ZW4gYW1vdW50LCBwcm9kdWNpbmcgYW4gaW1hZ2Ugd2l0aCBhIHNtYWxsZXIgcGFsZXR0ZS5cbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQWJzdHJhY3RGaWx0ZXJcbiAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnNcbiAqL1xuZnVuY3Rpb24gQ29sb3JTdGVwRmlsdGVyKClcbntcbiAgICBjb3JlLkFic3RyYWN0RmlsdGVyLmNhbGwodGhpcyxcbiAgICAgICAgLy8gdmVydGV4IHNoYWRlclxuICAgICAgICBudWxsLFxuICAgICAgICAvLyBmcmFnbWVudCBzaGFkZXJcbiAgICAgICAgXCJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcXG5cXG52YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDtcXG5cXG51bmlmb3JtIHNhbXBsZXIyRCB1U2FtcGxlcjtcXG51bmlmb3JtIGZsb2F0IHN0ZXA7XFxuXFxudm9pZCBtYWluKHZvaWQpXFxue1xcbiAgICB2ZWM0IGNvbG9yID0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2VGV4dHVyZUNvb3JkKTtcXG5cXG4gICAgY29sb3IgPSBmbG9vcihjb2xvciAqIHN0ZXApIC8gc3RlcDtcXG5cXG4gICAgZ2xfRnJhZ0NvbG9yID0gY29sb3I7XFxufVxcblwiLFxuICAgICAgICAvLyBjdXN0b20gdW5pZm9ybXNcbiAgICAgICAge1xuICAgICAgICAgICAgc3RlcDogeyB0eXBlOiAnMWYnLCB2YWx1ZTogNSB9XG4gICAgICAgIH1cbiAgICApO1xufVxuXG5Db2xvclN0ZXBGaWx0ZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShjb3JlLkFic3RyYWN0RmlsdGVyLnByb3RvdHlwZSk7XG5Db2xvclN0ZXBGaWx0ZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gQ29sb3JTdGVwRmlsdGVyO1xubW9kdWxlLmV4cG9ydHMgPSBDb2xvclN0ZXBGaWx0ZXI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKENvbG9yU3RlcEZpbHRlci5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBUaGUgbnVtYmVyIG9mIHN0ZXBzIHRvIHJlZHVjZSB0aGUgcGFsZXR0ZSBieS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLkNvbG9yU3RlcEZpbHRlciNcbiAgICAgKi9cbiAgICBzdGVwOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudW5pZm9ybXMuc3RlcC52YWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudW5pZm9ybXMuc3RlcC52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfVxufSk7XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uLy4uL2NvcmUnKTtcbi8vIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL3N1YnN0YWNrL2JyZnMvaXNzdWVzLzI1XG5cblxuLyoqXG4gKiBUaGUgQ29udm9sdXRpb25GaWx0ZXIgY2xhc3MgYXBwbGllcyBhIG1hdHJpeCBjb252b2x1dGlvbiBmaWx0ZXIgZWZmZWN0LlxuICogQSBjb252b2x1dGlvbiBjb21iaW5lcyBwaXhlbHMgaW4gdGhlIGlucHV0IGltYWdlIHdpdGggbmVpZ2hib3JpbmcgcGl4ZWxzIHRvIHByb2R1Y2UgYSBuZXcgaW1hZ2UuXG4gKiBBIHdpZGUgdmFyaWV0eSBvZiBpbWFnZSBlZmZlY3RzIGNhbiBiZSBhY2hpZXZlZCB0aHJvdWdoIGNvbnZvbHV0aW9ucywgaW5jbHVkaW5nIGJsdXJyaW5nLCBlZGdlXG4gKiBkZXRlY3Rpb24sIHNoYXJwZW5pbmcsIGVtYm9zc2luZywgYW5kIGJldmVsaW5nLiBUaGUgbWF0cml4IHNob3VsZCBiZSBzcGVjaWZpZWQgYXMgYSA5IHBvaW50IEFycmF5LlxuICogU2VlIGh0dHA6Ly9kb2NzLmdpbXAub3JnL2VuL3BsdWctaW4tY29udm1hdHJpeC5odG1sIGZvciBtb3JlIGluZm8uXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLkFic3RyYWN0RmlsdGVyXG4gKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzXG4gKiBAcGFyYW0gbWF0cml4IHtudW1iZXJbXX0gQW4gYXJyYXkgb2YgdmFsdWVzIHVzZWQgZm9yIG1hdHJpeCB0cmFuc2Zvcm1hdGlvbi4gU3BlY2lmaWVkIGFzIGEgOSBwb2ludCBBcnJheS5cbiAqIEBwYXJhbSB3aWR0aCB7bnVtYmVyfSBXaWR0aCBvZiB0aGUgb2JqZWN0IHlvdSBhcmUgdHJhbnNmb3JtaW5nXG4gKiBAcGFyYW0gaGVpZ2h0IHtudW1iZXJ9IEhlaWdodCBvZiB0aGUgb2JqZWN0IHlvdSBhcmUgdHJhbnNmb3JtaW5nXG4gKi9cbmZ1bmN0aW9uIENvbnZvbHV0aW9uRmlsdGVyKG1hdHJpeCwgd2lkdGgsIGhlaWdodClcbntcbiAgICBjb3JlLkFic3RyYWN0RmlsdGVyLmNhbGwodGhpcyxcbiAgICAgICAgLy8gdmVydGV4IHNoYWRlclxuICAgICAgICBudWxsLFxuICAgICAgICAvLyBmcmFnbWVudCBzaGFkZXJcbiAgICAgICAgXCJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcXG5cXG52YXJ5aW5nIG1lZGl1bXAgdmVjMiB2VGV4dHVyZUNvb3JkO1xcblxcbnVuaWZvcm0gc2FtcGxlcjJEIHVTYW1wbGVyO1xcbnVuaWZvcm0gdmVjMiB0ZXhlbFNpemU7XFxudW5pZm9ybSBmbG9hdCBtYXRyaXhbOV07XFxuXFxudm9pZCBtYWluKHZvaWQpXFxue1xcbiAgIHZlYzQgYzExID0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2VGV4dHVyZUNvb3JkIC0gdGV4ZWxTaXplKTsgLy8gdG9wIGxlZnRcXG4gICB2ZWM0IGMxMiA9IHRleHR1cmUyRCh1U2FtcGxlciwgdmVjMih2VGV4dHVyZUNvb3JkLngsIHZUZXh0dXJlQ29vcmQueSAtIHRleGVsU2l6ZS55KSk7IC8vIHRvcCBjZW50ZXJcXG4gICB2ZWM0IGMxMyA9IHRleHR1cmUyRCh1U2FtcGxlciwgdmVjMih2VGV4dHVyZUNvb3JkLnggKyB0ZXhlbFNpemUueCwgdlRleHR1cmVDb29yZC55IC0gdGV4ZWxTaXplLnkpKTsgLy8gdG9wIHJpZ2h0XFxuXFxuICAgdmVjNCBjMjEgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZlYzIodlRleHR1cmVDb29yZC54IC0gdGV4ZWxTaXplLngsIHZUZXh0dXJlQ29vcmQueSkpOyAvLyBtaWQgbGVmdFxcbiAgIHZlYzQgYzIyID0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2VGV4dHVyZUNvb3JkKTsgLy8gbWlkIGNlbnRlclxcbiAgIHZlYzQgYzIzID0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2ZWMyKHZUZXh0dXJlQ29vcmQueCArIHRleGVsU2l6ZS54LCB2VGV4dHVyZUNvb3JkLnkpKTsgLy8gbWlkIHJpZ2h0XFxuXFxuICAgdmVjNCBjMzEgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZlYzIodlRleHR1cmVDb29yZC54IC0gdGV4ZWxTaXplLngsIHZUZXh0dXJlQ29vcmQueSArIHRleGVsU2l6ZS55KSk7IC8vIGJvdHRvbSBsZWZ0XFxuICAgdmVjNCBjMzIgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZlYzIodlRleHR1cmVDb29yZC54LCB2VGV4dHVyZUNvb3JkLnkgKyB0ZXhlbFNpemUueSkpOyAvLyBib3R0b20gY2VudGVyXFxuICAgdmVjNCBjMzMgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZUZXh0dXJlQ29vcmQgKyB0ZXhlbFNpemUpOyAvLyBib3R0b20gcmlnaHRcXG5cXG4gICBnbF9GcmFnQ29sb3IgPVxcbiAgICAgICBjMTEgKiBtYXRyaXhbMF0gKyBjMTIgKiBtYXRyaXhbMV0gKyBjMTMgKiBtYXRyaXhbMl0gK1xcbiAgICAgICBjMjEgKiBtYXRyaXhbM10gKyBjMjIgKiBtYXRyaXhbNF0gKyBjMjMgKiBtYXRyaXhbNV0gK1xcbiAgICAgICBjMzEgKiBtYXRyaXhbNl0gKyBjMzIgKiBtYXRyaXhbN10gKyBjMzMgKiBtYXRyaXhbOF07XFxuXFxuICAgZ2xfRnJhZ0NvbG9yLmEgPSBjMjIuYTtcXG59XFxuXCIsXG4gICAgICAgIC8vIGN1c3RvbSB1bmlmb3Jtc1xuICAgICAgICB7XG4gICAgICAgICAgICBtYXRyaXg6ICAgICB7IHR5cGU6ICcxZnYnLCB2YWx1ZTogbmV3IEZsb2F0MzJBcnJheShtYXRyaXgpIH0sXG4gICAgICAgICAgICB0ZXhlbFNpemU6ICB7IHR5cGU6ICd2MicsIHZhbHVlOiB7IHg6IDEgLyB3aWR0aCwgeTogMSAvIGhlaWdodCB9IH1cbiAgICAgICAgfVxuICAgICk7XG59XG5cbkNvbnZvbHV0aW9uRmlsdGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoY29yZS5BYnN0cmFjdEZpbHRlci5wcm90b3R5cGUpO1xuQ29udm9sdXRpb25GaWx0ZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gQ29udm9sdXRpb25GaWx0ZXI7XG5tb2R1bGUuZXhwb3J0cyA9IENvbnZvbHV0aW9uRmlsdGVyO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhDb252b2x1dGlvbkZpbHRlci5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBBbiBhcnJheSBvZiB2YWx1ZXMgdXNlZCBmb3IgbWF0cml4IHRyYW5zZm9ybWF0aW9uLiBTcGVjaWZpZWQgYXMgYSA5IHBvaW50IEFycmF5LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyW119XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5Db252b2x1dGlvbkZpbHRlciNcbiAgICAgKi9cbiAgICBtYXRyaXg6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy51bmlmb3Jtcy5tYXRyaXgudmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLm1hdHJpeC52YWx1ZSA9IG5ldyBGbG9hdDMyQXJyYXkodmFsdWUpO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFdpZHRoIG9mIHRoZSBvYmplY3QgeW91IGFyZSB0cmFuc2Zvcm1pbmdcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLkNvbnZvbHV0aW9uRmlsdGVyI1xuICAgICAqL1xuICAgIHdpZHRoOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIDEvdGhpcy51bmlmb3Jtcy50ZXhlbFNpemUudmFsdWUueDtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudW5pZm9ybXMudGV4ZWxTaXplLnZhbHVlLnggPSAxL3ZhbHVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIEhlaWdodCBvZiB0aGUgb2JqZWN0IHlvdSBhcmUgdHJhbnNmb3JtaW5nXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5Db252b2x1dGlvbkZpbHRlciNcbiAgICAgKi9cbiAgICBoZWlnaHQ6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gMS90aGlzLnVuaWZvcm1zLnRleGVsU2l6ZS52YWx1ZS55O1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy50ZXhlbFNpemUudmFsdWUueSA9IDEvdmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG59KTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vLi4vY29yZScpO1xuLy8gQHNlZSBodHRwczovL2dpdGh1Yi5jb20vc3Vic3RhY2svYnJmcy9pc3N1ZXMvMjVcblxuXG4vKipcbiAqIEEgQ3Jvc3MgSGF0Y2ggZWZmZWN0IGZpbHRlci5cbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQWJzdHJhY3RGaWx0ZXJcbiAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnNcbiAqL1xuZnVuY3Rpb24gQ3Jvc3NIYXRjaEZpbHRlcigpXG57XG4gICAgY29yZS5BYnN0cmFjdEZpbHRlci5jYWxsKHRoaXMsXG4gICAgICAgIC8vIHZlcnRleCBzaGFkZXJcbiAgICAgICAgbnVsbCxcbiAgICAgICAgLy8gZnJhZ21lbnQgc2hhZGVyXG4gICAgICAgIFwicHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XFxuXFxudmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7XFxuXFxudW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXI7XFxuXFxudm9pZCBtYWluKHZvaWQpXFxue1xcbiAgICBmbG9hdCBsdW0gPSBsZW5ndGgodGV4dHVyZTJEKHVTYW1wbGVyLCB2VGV4dHVyZUNvb3JkLnh5KS5yZ2IpO1xcblxcbiAgICBnbF9GcmFnQ29sb3IgPSB2ZWM0KDEuMCwgMS4wLCAxLjAsIDEuMCk7XFxuXFxuICAgIGlmIChsdW0gPCAxLjAwKVxcbiAgICB7XFxuICAgICAgICBpZiAobW9kKGdsX0ZyYWdDb29yZC54ICsgZ2xfRnJhZ0Nvb3JkLnksIDEwLjApID09IDAuMClcXG4gICAgICAgIHtcXG4gICAgICAgICAgICBnbF9GcmFnQ29sb3IgPSB2ZWM0KDAuMCwgMC4wLCAwLjAsIDEuMCk7XFxuICAgICAgICB9XFxuICAgIH1cXG5cXG4gICAgaWYgKGx1bSA8IDAuNzUpXFxuICAgIHtcXG4gICAgICAgIGlmIChtb2QoZ2xfRnJhZ0Nvb3JkLnggLSBnbF9GcmFnQ29vcmQueSwgMTAuMCkgPT0gMC4wKVxcbiAgICAgICAge1xcbiAgICAgICAgICAgIGdsX0ZyYWdDb2xvciA9IHZlYzQoMC4wLCAwLjAsIDAuMCwgMS4wKTtcXG4gICAgICAgIH1cXG4gICAgfVxcblxcbiAgICBpZiAobHVtIDwgMC41MClcXG4gICAge1xcbiAgICAgICAgaWYgKG1vZChnbF9GcmFnQ29vcmQueCArIGdsX0ZyYWdDb29yZC55IC0gNS4wLCAxMC4wKSA9PSAwLjApXFxuICAgICAgICB7XFxuICAgICAgICAgICAgZ2xfRnJhZ0NvbG9yID0gdmVjNCgwLjAsIDAuMCwgMC4wLCAxLjApO1xcbiAgICAgICAgfVxcbiAgICB9XFxuXFxuICAgIGlmIChsdW0gPCAwLjMpXFxuICAgIHtcXG4gICAgICAgIGlmIChtb2QoZ2xfRnJhZ0Nvb3JkLnggLSBnbF9GcmFnQ29vcmQueSAtIDUuMCwgMTAuMCkgPT0gMC4wKVxcbiAgICAgICAge1xcbiAgICAgICAgICAgIGdsX0ZyYWdDb2xvciA9IHZlYzQoMC4wLCAwLjAsIDAuMCwgMS4wKTtcXG4gICAgICAgIH1cXG4gICAgfVxcbn1cXG5cIlxuICAgICk7XG59XG5cbkNyb3NzSGF0Y2hGaWx0ZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShjb3JlLkFic3RyYWN0RmlsdGVyLnByb3RvdHlwZSk7XG5Dcm9zc0hhdGNoRmlsdGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IENyb3NzSGF0Y2hGaWx0ZXI7XG5tb2R1bGUuZXhwb3J0cyA9IENyb3NzSGF0Y2hGaWx0ZXI7XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uLy4uL2NvcmUnKTtcbi8vIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL3N1YnN0YWNrL2JyZnMvaXNzdWVzLzI1XG5cblxuLyoqXG4gKiBUaGUgRGlzcGxhY2VtZW50RmlsdGVyIGNsYXNzIHVzZXMgdGhlIHBpeGVsIHZhbHVlcyBmcm9tIHRoZSBzcGVjaWZpZWQgdGV4dHVyZSAoY2FsbGVkIHRoZSBkaXNwbGFjZW1lbnQgbWFwKSB0byBwZXJmb3JtIGEgZGlzcGxhY2VtZW50IG9mIGFuIG9iamVjdC5cbiAqIFlvdSBjYW4gdXNlIHRoaXMgZmlsdGVyIHRvIGFwcGx5IGFsbCBtYW5vciBvZiBjcmF6eSB3YXJwaW5nIGVmZmVjdHNcbiAqIEN1cnJlbnRseSB0aGUgciBwcm9wZXJ0eSBvZiB0aGUgdGV4dHVyZSBpcyB1c2VkIHRvIG9mZnNldCB0aGUgeCBhbmQgdGhlIGcgcHJvcGVydHkgb2YgdGhlIHRleHR1cmUgaXMgdXNlZCB0byBvZmZzZXQgdGhlIHkuXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLkFic3RyYWN0RmlsdGVyXG4gKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzXG4gKiBAcGFyYW0gc3ByaXRlIHtQSVhJLlNwcml0ZX0gdGhlIHNwcml0ZSB1c2VkIGZvciB0aGUgZGlzcGxhY2VtZW50IG1hcC4gKG1ha2Ugc3VyZSBpdHMgYWRkZWQgdG8gdGhlIHNjZW5lISlcbiAqL1xuZnVuY3Rpb24gRGlzcGxhY2VtZW50RmlsdGVyKHNwcml0ZSwgc2NhbGUpXG57XG4gICAgdmFyIG1hc2tNYXRyaXggPSBuZXcgY29yZS5NYXRyaXgoKTtcbiAgICBzcHJpdGUucmVuZGVyYWJsZSA9IGZhbHNlO1xuXG4gICAgY29yZS5BYnN0cmFjdEZpbHRlci5jYWxsKHRoaXMsXG4gICAgICAgIC8vIHZlcnRleCBzaGFkZXJcbiAgICAgICAgXCJhdHRyaWJ1dGUgdmVjMiBhVmVydGV4UG9zaXRpb247XFxuYXR0cmlidXRlIHZlYzIgYVRleHR1cmVDb29yZDtcXG5hdHRyaWJ1dGUgdmVjNCBhQ29sb3I7XFxuXFxudW5pZm9ybSBtYXQzIHByb2plY3Rpb25NYXRyaXg7XFxudW5pZm9ybSBtYXQzIG90aGVyTWF0cml4O1xcblxcbnZhcnlpbmcgdmVjMiB2TWFwQ29vcmQ7XFxudmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7XFxudmFyeWluZyB2ZWM0IHZDb2xvcjtcXG5cXG52b2lkIG1haW4odm9pZClcXG57XFxuICAgZ2xfUG9zaXRpb24gPSB2ZWM0KChwcm9qZWN0aW9uTWF0cml4ICogdmVjMyhhVmVydGV4UG9zaXRpb24sIDEuMCkpLnh5LCAwLjAsIDEuMCk7XFxuICAgdlRleHR1cmVDb29yZCA9IGFUZXh0dXJlQ29vcmQ7XFxuICAgdk1hcENvb3JkID0gKCBvdGhlck1hdHJpeCAqIHZlYzMoIGFUZXh0dXJlQ29vcmQsIDEuMCkgICkueHk7XFxuICAgdkNvbG9yID0gdmVjNChhQ29sb3IucmdiICogYUNvbG9yLmEsIGFDb2xvci5hKTtcXG59XFxuXCIsXG4gICAgICAgIC8vIGZyYWdtZW50IHNoYWRlclxuICAgICAgICBcInByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xcblxcbnZhcnlpbmcgdmVjMiB2TWFwQ29vcmQ7XFxudmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7XFxudmFyeWluZyB2ZWM0IHZDb2xvcjtcXG5cXG51bmlmb3JtIHZlYzIgc2NhbGU7XFxuXFxudW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXI7XFxudW5pZm9ybSBzYW1wbGVyMkQgbWFwU2FtcGxlcjtcXG5cXG52b2lkIG1haW4odm9pZClcXG57XFxuICAgdmVjNCBtYXAgPSAgdGV4dHVyZTJEKG1hcFNhbXBsZXIsIHZNYXBDb29yZCk7XFxuXFxuICAgbWFwIC09IDAuNTtcXG4gICBtYXAueHkgKj0gc2NhbGU7XFxuXFxuICAgZ2xfRnJhZ0NvbG9yID0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2ZWMyKHZUZXh0dXJlQ29vcmQueCArIG1hcC54LCB2VGV4dHVyZUNvb3JkLnkgKyBtYXAueSkpO1xcbn1cXG5cIixcbiAgICAgICAgLy8gdW5pZm9ybXNcbiAgICAgICAge1xuICAgICAgICAgICAgbWFwU2FtcGxlcjogICAgIHsgdHlwZTogJ3NhbXBsZXIyRCcsIHZhbHVlOiBzcHJpdGUudGV4dHVyZSB9LFxuICAgICAgICAgICAgb3RoZXJNYXRyaXg6ICAgIHsgdHlwZTogJ21hdDMnLCB2YWx1ZTogbWFza01hdHJpeC50b0FycmF5KHRydWUpIH0sXG4gICAgICAgICAgICBzY2FsZTogICAgICAgICAgeyB0eXBlOiAndjInLCB2YWx1ZTogeyB4OiAxLCB5OiAxIH0gfVxuICAgICAgICB9XG4gICAgKTtcblxuICAgIHRoaXMubWFza1Nwcml0ZSA9IHNwcml0ZTtcbiAgICB0aGlzLm1hc2tNYXRyaXggPSBtYXNrTWF0cml4O1xuXG4gICAgaWYgKHNjYWxlID09PSBudWxsIHx8IHNjYWxlID09PSB1bmRlZmluZWQpXG4gICAge1xuICAgICAgICBzY2FsZSA9IDIwO1xuICAgIH1cblxuICAgIHRoaXMuc2NhbGUgPSBuZXcgY29yZS5Qb2ludChzY2FsZSwgc2NhbGUpO1xufVxuXG5EaXNwbGFjZW1lbnRGaWx0ZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShjb3JlLkFic3RyYWN0RmlsdGVyLnByb3RvdHlwZSk7XG5EaXNwbGFjZW1lbnRGaWx0ZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gRGlzcGxhY2VtZW50RmlsdGVyO1xubW9kdWxlLmV4cG9ydHMgPSBEaXNwbGFjZW1lbnRGaWx0ZXI7XG5cbkRpc3BsYWNlbWVudEZpbHRlci5wcm90b3R5cGUuYXBwbHlGaWx0ZXIgPSBmdW5jdGlvbiAocmVuZGVyZXIsIGlucHV0LCBvdXRwdXQpXG57XG4gICAgdmFyIGZpbHRlck1hbmFnZXIgPSByZW5kZXJlci5maWx0ZXJNYW5hZ2VyO1xuXG4gICAgZmlsdGVyTWFuYWdlci5jYWxjdWxhdGVNYXBwZWRNYXRyaXgoaW5wdXQuZnJhbWUsIHRoaXMubWFza1Nwcml0ZSwgdGhpcy5tYXNrTWF0cml4KTtcblxuICAgIHRoaXMudW5pZm9ybXMub3RoZXJNYXRyaXgudmFsdWUgPSB0aGlzLm1hc2tNYXRyaXgudG9BcnJheSh0cnVlKTtcbiAgICB0aGlzLnVuaWZvcm1zLnNjYWxlLnZhbHVlLnggPSB0aGlzLnNjYWxlLnggKiAoMS9pbnB1dC5mcmFtZS53aWR0aCk7XG4gICAgdGhpcy51bmlmb3Jtcy5zY2FsZS52YWx1ZS55ID0gdGhpcy5zY2FsZS55ICogKDEvaW5wdXQuZnJhbWUuaGVpZ2h0KTtcblxuICAgIHZhciBzaGFkZXIgPSB0aGlzLmdldFNoYWRlcihyZW5kZXJlcik7XG4gICAgIC8vIGRyYXcgdGhlIGZpbHRlci4uLlxuICAgIGZpbHRlck1hbmFnZXIuYXBwbHlGaWx0ZXIoc2hhZGVyLCBpbnB1dCwgb3V0cHV0KTtcbn07XG5cblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoRGlzcGxhY2VtZW50RmlsdGVyLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFRoZSB0ZXh0dXJlIHVzZWQgZm9yIHRoZSBkaXNwbGFjZW1lbnQgbWFwLiBNdXN0IGJlIHBvd2VyIG9mIDIgc2l6ZWQgdGV4dHVyZS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuVGV4dHVyZX1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLkRpc3BsYWNlbWVudEZpbHRlciNcbiAgICAgKi9cbiAgICBtYXA6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy51bmlmb3Jtcy5tYXBTYW1wbGVyLnZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy5tYXBTYW1wbGVyLnZhbHVlID0gdmFsdWU7XG5cbiAgICAgICAgfVxuICAgIH1cbn0pO1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi8uLi9jb3JlJyk7XG4vLyBAc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9zdWJzdGFjay9icmZzL2lzc3Vlcy8yNVxuXG5cbi8qKlxuICogQGF1dGhvciBNYXQgR3JvdmVzIGh0dHA6Ly9tYXRncm92ZXMuY29tLyBARG9vcm1hdDIzXG4gKiBvcmlnaW5hbCBmaWx0ZXI6IGh0dHBzOi8vZ2l0aHViLmNvbS9ldmFudy9nbGZ4LmpzL2Jsb2IvbWFzdGVyL3NyYy9maWx0ZXJzL2Z1bi9kb3RzY3JlZW4uanNcbiAqL1xuXG4vKipcbiAqIFRoaXMgZmlsdGVyIGFwcGxpZXMgYSBkb3RzY3JlZW4gZWZmZWN0IG1ha2luZyBkaXNwbGF5IG9iamVjdHMgYXBwZWFyIHRvIGJlIG1hZGUgb3V0IG9mXG4gKiBibGFjayBhbmQgd2hpdGUgaGFsZnRvbmUgZG90cyBsaWtlIGFuIG9sZCBwcmludGVyLlxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5BYnN0cmFjdEZpbHRlclxuICogQG1lbWJlcm9mIFBJWEkuZmlsdGVyc1xuICovXG5mdW5jdGlvbiBEb3RTY3JlZW5GaWx0ZXIoKVxue1xuICAgIGNvcmUuQWJzdHJhY3RGaWx0ZXIuY2FsbCh0aGlzLFxuICAgICAgICAvLyB2ZXJ0ZXggc2hhZGVyXG4gICAgICAgIG51bGwsXG4gICAgICAgIC8vIGZyYWdtZW50IHNoYWRlclxuICAgICAgICBcInByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xcblxcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xcbnZhcnlpbmcgdmVjNCB2Q29sb3I7XFxuXFxudW5pZm9ybSB2ZWM0IGRpbWVuc2lvbnM7XFxudW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXI7XFxuXFxudW5pZm9ybSBmbG9hdCBhbmdsZTtcXG51bmlmb3JtIGZsb2F0IHNjYWxlO1xcblxcbmZsb2F0IHBhdHRlcm4oKVxcbntcXG4gICBmbG9hdCBzID0gc2luKGFuZ2xlKSwgYyA9IGNvcyhhbmdsZSk7XFxuICAgdmVjMiB0ZXggPSB2VGV4dHVyZUNvb3JkICogZGltZW5zaW9ucy54eTtcXG4gICB2ZWMyIHBvaW50ID0gdmVjMihcXG4gICAgICAgYyAqIHRleC54IC0gcyAqIHRleC55LFxcbiAgICAgICBzICogdGV4LnggKyBjICogdGV4LnlcXG4gICApICogc2NhbGU7XFxuICAgcmV0dXJuIChzaW4ocG9pbnQueCkgKiBzaW4ocG9pbnQueSkpICogNC4wO1xcbn1cXG5cXG52b2lkIG1haW4oKVxcbntcXG4gICB2ZWM0IGNvbG9yID0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2VGV4dHVyZUNvb3JkKTtcXG4gICBmbG9hdCBhdmVyYWdlID0gKGNvbG9yLnIgKyBjb2xvci5nICsgY29sb3IuYikgLyAzLjA7XFxuICAgZ2xfRnJhZ0NvbG9yID0gdmVjNCh2ZWMzKGF2ZXJhZ2UgKiAxMC4wIC0gNS4wICsgcGF0dGVybigpKSwgY29sb3IuYSk7XFxufVxcblwiLFxuICAgICAgICAvLyBjdXN0b20gdW5pZm9ybXNcbiAgICAgICAge1xuICAgICAgICAgICAgc2NhbGU6ICAgICAgeyB0eXBlOiAnMWYnLCB2YWx1ZTogMSB9LFxuICAgICAgICAgICAgYW5nbGU6ICAgICAgeyB0eXBlOiAnMWYnLCB2YWx1ZTogNSB9LFxuICAgICAgICAgICAgZGltZW5zaW9uczogeyB0eXBlOiAnNGZ2JywgdmFsdWU6IFswLCAwLCAwLCAwXSB9XG4gICAgICAgIH1cbiAgICApO1xufVxuXG5Eb3RTY3JlZW5GaWx0ZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShjb3JlLkFic3RyYWN0RmlsdGVyLnByb3RvdHlwZSk7XG5Eb3RTY3JlZW5GaWx0ZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gRG90U2NyZWVuRmlsdGVyO1xubW9kdWxlLmV4cG9ydHMgPSBEb3RTY3JlZW5GaWx0ZXI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKERvdFNjcmVlbkZpbHRlci5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBUaGUgc2NhbGUgb2YgdGhlIGVmZmVjdC5cbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5Eb3RTY3JlZW5GaWx0ZXIjXG4gICAgICovXG4gICAgc2NhbGU6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy51bmlmb3Jtcy5zY2FsZS52YWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudW5pZm9ybXMuc2NhbGUudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBUaGUgcmFkaXVzIG9mIHRoZSBlZmZlY3QuXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuRG90U2NyZWVuRmlsdGVyI1xuICAgICAqL1xuICAgIGFuZ2xlOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudW5pZm9ybXMuYW5nbGUudmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLmFuZ2xlLnZhbHVlID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG59KTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vLi4vY29yZScpO1xuXG4vLyBAc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9zdWJzdGFjay9icmZzL2lzc3Vlcy8yNVxuXG5cbi8qKlxuICogVGhlIEJsdXJZVGludEZpbHRlciBhcHBsaWVzIGEgdmVydGljYWwgR2F1c3NpYW4gYmx1ciB0byBhbiBvYmplY3QuXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLkFic3RyYWN0RmlsdGVyXG4gKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzXG4gKi9cbmZ1bmN0aW9uIEJsdXJZVGludEZpbHRlcigpXG57XG4gICAgY29yZS5BYnN0cmFjdEZpbHRlci5jYWxsKHRoaXMsXG4gICAgICAgIC8vIHZlcnRleCBzaGFkZXJcbiAgICAgICAgXCJhdHRyaWJ1dGUgdmVjMiBhVmVydGV4UG9zaXRpb247XFxuYXR0cmlidXRlIHZlYzIgYVRleHR1cmVDb29yZDtcXG5hdHRyaWJ1dGUgdmVjNCBhQ29sb3I7XFxuXFxudW5pZm9ybSBmbG9hdCBzdHJlbmd0aDtcXG51bmlmb3JtIHZlYzIgb2Zmc2V0O1xcblxcbnVuaWZvcm0gbWF0MyBwcm9qZWN0aW9uTWF0cml4O1xcblxcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xcbnZhcnlpbmcgdmVjNCB2Q29sb3I7XFxudmFyeWluZyB2ZWMyIHZCbHVyVGV4Q29vcmRzWzZdO1xcblxcbnZvaWQgbWFpbih2b2lkKVxcbntcXG4gICAgZ2xfUG9zaXRpb24gPSB2ZWM0KChwcm9qZWN0aW9uTWF0cml4ICogdmVjMygoYVZlcnRleFBvc2l0aW9uK29mZnNldCksIDEuMCkpLnh5LCAwLjAsIDEuMCk7XFxuICAgIHZUZXh0dXJlQ29vcmQgPSBhVGV4dHVyZUNvb3JkO1xcblxcbiAgICB2Qmx1clRleENvb3Jkc1sgMF0gPSBhVGV4dHVyZUNvb3JkICsgdmVjMigwLjAsIC0wLjAxMiAqIHN0cmVuZ3RoKTtcXG4gICAgdkJsdXJUZXhDb29yZHNbIDFdID0gYVRleHR1cmVDb29yZCArIHZlYzIoMC4wLCAtMC4wMDggKiBzdHJlbmd0aCk7XFxuICAgIHZCbHVyVGV4Q29vcmRzWyAyXSA9IGFUZXh0dXJlQ29vcmQgKyB2ZWMyKDAuMCwgLTAuMDA0ICogc3RyZW5ndGgpO1xcbiAgICB2Qmx1clRleENvb3Jkc1sgM10gPSBhVGV4dHVyZUNvb3JkICsgdmVjMigwLjAsICAwLjAwNCAqIHN0cmVuZ3RoKTtcXG4gICAgdkJsdXJUZXhDb29yZHNbIDRdID0gYVRleHR1cmVDb29yZCArIHZlYzIoMC4wLCAgMC4wMDggKiBzdHJlbmd0aCk7XFxuICAgIHZCbHVyVGV4Q29vcmRzWyA1XSA9IGFUZXh0dXJlQ29vcmQgKyB2ZWMyKDAuMCwgIDAuMDEyICogc3RyZW5ndGgpO1xcblxcbiAgIHZDb2xvciA9IHZlYzQoYUNvbG9yLnJnYiAqIGFDb2xvci5hLCBhQ29sb3IuYSk7XFxufVxcblwiLFxuICAgICAgICAvLyBmcmFnbWVudCBzaGFkZXJcbiAgICAgICAgXCJwcmVjaXNpb24gbG93cCBmbG9hdDtcXG5cXG52YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDtcXG52YXJ5aW5nIHZlYzIgdkJsdXJUZXhDb29yZHNbNl07XFxudmFyeWluZyB2ZWM0IHZDb2xvcjtcXG5cXG51bmlmb3JtIHZlYzMgY29sb3I7XFxudW5pZm9ybSBmbG9hdCBhbHBoYTtcXG5cXG51bmlmb3JtIHNhbXBsZXIyRCB1U2FtcGxlcjtcXG5cXG52b2lkIG1haW4odm9pZClcXG57XFxuICAgIHZlYzQgc3VtID0gdmVjNCgwLjApO1xcblxcbiAgICBzdW0gKz0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2Qmx1clRleENvb3Jkc1sgMF0pKjAuMDA0NDMxODQ4NDExOTM4MzQxO1xcbiAgICBzdW0gKz0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2Qmx1clRleENvb3Jkc1sgMV0pKjAuMDUzOTkwOTY2NTEzMTg5ODU7XFxuICAgIHN1bSArPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZCbHVyVGV4Q29vcmRzWyAyXSkqMC4yNDE5NzA3MjQ1MTkxNDU0O1xcbiAgICBzdW0gKz0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2VGV4dHVyZUNvb3JkICAgICApKjAuMzk4OTQyMjgwNDAxNDMyNztcXG4gICAgc3VtICs9IHRleHR1cmUyRCh1U2FtcGxlciwgdkJsdXJUZXhDb29yZHNbIDNdKSowLjI0MTk3MDcyNDUxOTE0NTQ7XFxuICAgIHN1bSArPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZCbHVyVGV4Q29vcmRzWyA0XSkqMC4wNTM5OTA5NjY1MTMxODk4NTtcXG4gICAgc3VtICs9IHRleHR1cmUyRCh1U2FtcGxlciwgdkJsdXJUZXhDb29yZHNbIDVdKSowLjAwNDQzMTg0ODQxMTkzODM0MTtcXG5cXG4gICAgZ2xfRnJhZ0NvbG9yID0gdmVjNCggY29sb3IucmdiICogc3VtLmEgKiBhbHBoYSwgc3VtLmEgKiBhbHBoYSApO1xcbn1cXG5cIixcbiAgICAgICAgLy8gc2V0IHRoZSB1bmlmb3Jtc1xuICAgICAgICB7XG4gICAgICAgICAgICBibHVyOiB7IHR5cGU6ICcxZicsIHZhbHVlOiAxIC8gNTEyIH0sXG4gICAgICAgICAgICBjb2xvcjogeyB0eXBlOiAnYycsIHZhbHVlOiBbMCwwLDBdfSxcbiAgICAgICAgICAgIGFscGhhOiB7IHR5cGU6ICcxZicsIHZhbHVlOiAwLjcgfSxcbiAgICAgICAgICAgIG9mZnNldDogeyB0eXBlOiAnMmYnLCB2YWx1ZTpbNSwgNV19LFxuICAgICAgICAgICAgc3RyZW5ndGg6IHsgdHlwZTogJzFmJywgdmFsdWU6MX1cbiAgICAgICAgfVxuICAgICk7XG5cbiAgICB0aGlzLnBhc3NlcyA9IDE7XG4gICAgdGhpcy5zdHJlbmd0aCA9IDQ7XG59XG5cbkJsdXJZVGludEZpbHRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuQWJzdHJhY3RGaWx0ZXIucHJvdG90eXBlKTtcbkJsdXJZVGludEZpbHRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBCbHVyWVRpbnRGaWx0ZXI7XG5tb2R1bGUuZXhwb3J0cyA9IEJsdXJZVGludEZpbHRlcjtcblxuQmx1cllUaW50RmlsdGVyLnByb3RvdHlwZS5hcHBseUZpbHRlciA9IGZ1bmN0aW9uIChyZW5kZXJlciwgaW5wdXQsIG91dHB1dCwgY2xlYXIpXG57XG4gICAgdmFyIHNoYWRlciA9IHRoaXMuZ2V0U2hhZGVyKHJlbmRlcmVyKTtcblxuICAgIHRoaXMudW5pZm9ybXMuc3RyZW5ndGgudmFsdWUgPSB0aGlzLnN0cmVuZ3RoIC8gNCAvIHRoaXMucGFzc2VzICogKGlucHV0LmZyYW1lLmhlaWdodCAvIGlucHV0LnNpemUuaGVpZ2h0KTtcblxuICAgIGlmKHRoaXMucGFzc2VzID09PSAxKVxuICAgIHtcbiAgICAgICAgcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5hcHBseUZpbHRlcihzaGFkZXIsIGlucHV0LCBvdXRwdXQsIGNsZWFyKTtcbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgdmFyIHJlbmRlclRhcmdldCA9IHJlbmRlcmVyLmZpbHRlck1hbmFnZXIuZ2V0UmVuZGVyVGFyZ2V0KHRydWUpO1xuICAgICAgICB2YXIgZmxpcCA9IGlucHV0O1xuICAgICAgICB2YXIgZmxvcCA9IHJlbmRlclRhcmdldDtcblxuICAgICAgICBmb3IodmFyIGkgPSAwOyBpIDwgdGhpcy5wYXNzZXMtMTsgaSsrKVxuICAgICAgICB7XG4gICAgICAgICAgICByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLmFwcGx5RmlsdGVyKHNoYWRlciwgZmxpcCwgZmxvcCwgY2xlYXIpO1xuXG4gICAgICAgICAgIHZhciB0ZW1wID0gZmxvcDtcbiAgICAgICAgICAgZmxvcCA9IGZsaXA7XG4gICAgICAgICAgIGZsaXAgPSB0ZW1wO1xuICAgICAgICB9XG5cbiAgICAgICAgcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5hcHBseUZpbHRlcihzaGFkZXIsIGZsaXAsIG91dHB1dCwgY2xlYXIpO1xuXG4gICAgICAgIHJlbmRlcmVyLmZpbHRlck1hbmFnZXIucmV0dXJuUmVuZGVyVGFyZ2V0KHJlbmRlclRhcmdldCk7XG4gICAgfVxufTtcblxuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhCbHVyWVRpbnRGaWx0ZXIucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgc3RyZW5ndGggb2YgYm90aCB0aGUgYmx1ci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLkJsdXJZVGludEZpbHRlciNcbiAgICAgKiBAZGVmYXVsdCAyXG4gICAgICovXG4gICAgYmx1cjoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiAgdGhpcy5zdHJlbmd0aDtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMucGFkZGluZyA9IHZhbHVlICogMC41O1xuICAgICAgICAgICAgdGhpcy5zdHJlbmd0aCA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfVxufSk7XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uLy4uL2NvcmUnKSxcbiAgICBCbHVyWEZpbHRlciA9IHJlcXVpcmUoJy4uL2JsdXIvQmx1clhGaWx0ZXInKSxcbiAgICBCbHVyWVRpbnRGaWx0ZXIgPSByZXF1aXJlKCcuL0JsdXJZVGludEZpbHRlcicpO1xuXG4vKipcbiAqIFRoZSBEcm9wU2hhZG93RmlsdGVyIGFwcGxpZXMgYSBHYXVzc2lhbiBibHVyIHRvIGFuIG9iamVjdC5cbiAqIFRoZSBzdHJlbmd0aCBvZiB0aGUgYmx1ciBjYW4gYmUgc2V0IGZvciB4LSBhbmQgeS1heGlzIHNlcGFyYXRlbHkuXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLkFic3RyYWN0RmlsdGVyXG4gKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzXG4gKi9cbmZ1bmN0aW9uIERyb3BTaGFkb3dGaWx0ZXIoKVxue1xuICAgIGNvcmUuQWJzdHJhY3RGaWx0ZXIuY2FsbCh0aGlzKTtcblxuICAgIHRoaXMuYmx1clhGaWx0ZXIgPSBuZXcgQmx1clhGaWx0ZXIoKTtcbiAgICB0aGlzLmJsdXJZVGludEZpbHRlciA9IG5ldyBCbHVyWVRpbnRGaWx0ZXIoKTtcblxuICAgIHRoaXMuZGVmYXVsdEZpbHRlciA9IG5ldyBjb3JlLkFic3RyYWN0RmlsdGVyKCk7XG5cbiAgICB0aGlzLnBhZGRpbmcgPSAzMDtcblxuICAgIHRoaXMuX2RpcnR5UG9zaXRpb24gPSB0cnVlO1xuICAgIHRoaXMuX2FuZ2xlID0gNDUgKiBNYXRoLlBJIC8gMTgwO1xuICAgIHRoaXMuX2Rpc3RhbmNlID0gMTA7XG4gICAgdGhpcy5hbHBoYSA9IDAuNzU7XG4gICAgdGhpcy5oaWRlT2JqZWN0ID0gZmFsc2U7XG4gICAgdGhpcy5ibGVuZE1vZGUgPSBjb3JlLkJMRU5EX01PREVTLk1VTFRJUExZO1xufVxuXG5Ecm9wU2hhZG93RmlsdGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoY29yZS5BYnN0cmFjdEZpbHRlci5wcm90b3R5cGUpO1xuRHJvcFNoYWRvd0ZpbHRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBEcm9wU2hhZG93RmlsdGVyO1xubW9kdWxlLmV4cG9ydHMgPSBEcm9wU2hhZG93RmlsdGVyO1xuXG5Ecm9wU2hhZG93RmlsdGVyLnByb3RvdHlwZS5hcHBseUZpbHRlciA9IGZ1bmN0aW9uIChyZW5kZXJlciwgaW5wdXQsIG91dHB1dClcbntcbiAgICB2YXIgcmVuZGVyVGFyZ2V0ID0gcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5nZXRSZW5kZXJUYXJnZXQodHJ1ZSk7XG5cbiAgICAvL1RPRE8gLSBjb3B5VGV4U3ViSW1hZ2UyRCBjb3VsZCBiZSB1c2VkIGhlcmU/XG4gICAgaWYodGhpcy5fZGlydHlQb3NpdGlvbilcbiAgICB7XG4gICAgICAgIHRoaXMuX2RpcnR5UG9zaXRpb24gPSBmYWxzZTtcblxuICAgICAgICB0aGlzLmJsdXJZVGludEZpbHRlci51bmlmb3Jtcy5vZmZzZXQudmFsdWVbMF0gPSBNYXRoLnNpbih0aGlzLl9hbmdsZSkgKiB0aGlzLl9kaXN0YW5jZTtcbiAgICAgICAgdGhpcy5ibHVyWVRpbnRGaWx0ZXIudW5pZm9ybXMub2Zmc2V0LnZhbHVlWzFdID0gTWF0aC5jb3ModGhpcy5fYW5nbGUpICogdGhpcy5fZGlzdGFuY2U7XG4gICAgfVxuXG4gICAgdGhpcy5ibHVyWEZpbHRlci5hcHBseUZpbHRlcihyZW5kZXJlciwgaW5wdXQsIHJlbmRlclRhcmdldCk7XG5cbiAgICByZW5kZXJlci5ibGVuZE1vZGVNYW5hZ2VyLnNldEJsZW5kTW9kZSh0aGlzLmJsZW5kTW9kZSk7XG5cbiAgICB0aGlzLmJsdXJZVGludEZpbHRlci5hcHBseUZpbHRlcihyZW5kZXJlciwgcmVuZGVyVGFyZ2V0LCBvdXRwdXQpO1xuXG4gICAgcmVuZGVyZXIuYmxlbmRNb2RlTWFuYWdlci5zZXRCbGVuZE1vZGUoY29yZS5CTEVORF9NT0RFUy5OT1JNQUwpO1xuXG4gICAgaWYoIXRoaXMuaGlkZU9iamVjdClcbiAgICB7XG5cbiAgICAgICAgdGhpcy5kZWZhdWx0RmlsdGVyLmFwcGx5RmlsdGVyKHJlbmRlcmVyLCBpbnB1dCwgb3V0cHV0KTtcbiAgICB9XG5cblxuICAgIHJlbmRlcmVyLmZpbHRlck1hbmFnZXIucmV0dXJuUmVuZGVyVGFyZ2V0KHJlbmRlclRhcmdldCk7XG59O1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhEcm9wU2hhZG93RmlsdGVyLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIHN0cmVuZ3RoIG9mIGJvdGggdGhlIGJsdXJYIGFuZCBibHVyWSBwcm9wZXJ0aWVzIHNpbXVsdGFuZW91c2x5XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlck9mIFBJWEkuZmlsdGVycy5Ecm9wU2hhZG93RmlsdGVyI1xuICAgICAqIEBkZWZhdWx0IDJcbiAgICAgKi9cbiAgICBibHVyOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuYmx1clhGaWx0ZXIuYmx1cjtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuYmx1clhGaWx0ZXIuYmx1ciA9IHRoaXMuYmx1cllUaW50RmlsdGVyLmJsdXIgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBzdHJlbmd0aCBvZiB0aGUgYmx1clggcHJvcGVydHlcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyT2YgUElYSS5maWx0ZXJzLkRyb3BTaGFkb3dGaWx0ZXIjXG4gICAgICogQGRlZmF1bHQgMlxuICAgICAqL1xuICAgIGJsdXJYOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuYmx1clhGaWx0ZXIuYmx1cjtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuYmx1clhGaWx0ZXIuYmx1ciA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIHN0cmVuZ3RoIG9mIHRoZSBibHVyWSBwcm9wZXJ0eVxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJPZiBQSVhJLmZpbHRlcnMuRHJvcFNoYWRvd0ZpbHRlciNcbiAgICAgKiBAZGVmYXVsdCAyXG4gICAgICovXG4gICAgYmx1clk6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5ibHVyWVRpbnRGaWx0ZXIuYmx1cjtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuYmx1cllUaW50RmlsdGVyLmJsdXIgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBjb2xvciBvZiB0aGUgc2hhZG93XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlck9mIFBJWEkuZmlsdGVycy5Ecm9wU2hhZG93RmlsdGVyI1xuICAgICAqL1xuICAgIGNvbG9yOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuICBjb3JlLnV0aWxzLnJnYjJoZXgoIHRoaXMuYmx1cllUaW50RmlsdGVyLnVuaWZvcm1zLmNvbG9yLnZhbHVlICk7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmJsdXJZVGludEZpbHRlci51bmlmb3Jtcy5jb2xvci52YWx1ZSA9IGNvcmUudXRpbHMuaGV4MnJnYih2YWx1ZSk7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgYWxwaGEgb2YgdGhlIHNoYWRvd1xuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJPZiBQSVhJLmZpbHRlcnMuRHJvcFNoYWRvd0ZpbHRlciNcbiAgICAgKi9cbiAgICBhbHBoYToge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiAgdGhpcy5ibHVyWVRpbnRGaWx0ZXIudW5pZm9ybXMuYWxwaGEudmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmJsdXJZVGludEZpbHRlci51bmlmb3Jtcy5hbHBoYS52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIGRpc3RhbmNlIG9mIHRoZSBzaGFkb3dcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyT2YgUElYSS5maWx0ZXJzLkRyb3BTaGFkb3dGaWx0ZXIjXG4gICAgICovXG4gICAgZGlzdGFuY2U6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gIHRoaXMuX2Rpc3RhbmNlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5fZGlydHlQb3NpdGlvbiA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLl9kaXN0YW5jZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIGFuZ2xlIG9mIHRoZSBzaGFkb3dcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyT2YgUElYSS5maWx0ZXJzLkRyb3BTaGFkb3dGaWx0ZXIjXG4gICAgICovXG4gICAgYW5nbGU6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gIHRoaXMuX2FuZ2xlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5fZGlydHlQb3NpdGlvbiA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLl9hbmdsZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfVxufSk7XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uLy4uL2NvcmUnKTtcbi8vIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL3N1YnN0YWNrL2JyZnMvaXNzdWVzLzI1XG5cblxuLyoqXG4gKiBUaGlzIGdyZXlzY2FsZXMgdGhlIHBhbGV0dGUgb2YgeW91ciBEaXNwbGF5IE9iamVjdHMuXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLkFic3RyYWN0RmlsdGVyXG4gKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzXG4gKi9cbmZ1bmN0aW9uIEdyYXlGaWx0ZXIoKVxue1xuICAgIGNvcmUuQWJzdHJhY3RGaWx0ZXIuY2FsbCh0aGlzLFxuICAgICAgICAvLyB2ZXJ0ZXggc2hhZGVyXG4gICAgICAgIG51bGwsXG4gICAgICAgIC8vIGZyYWdtZW50IHNoYWRlclxuICAgICAgICBcInByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xcblxcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xcbnZhcnlpbmcgdmVjNCB2Q29sb3I7XFxuXFxudW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXI7XFxudW5pZm9ybSBmbG9hdCBncmF5O1xcblxcbnZvaWQgbWFpbih2b2lkKVxcbntcXG4gICBnbF9GcmFnQ29sb3IgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZUZXh0dXJlQ29vcmQpO1xcbiAgIGdsX0ZyYWdDb2xvci5yZ2IgPSBtaXgoZ2xfRnJhZ0NvbG9yLnJnYiwgdmVjMygwLjIxMjYqZ2xfRnJhZ0NvbG9yLnIgKyAwLjcxNTIqZ2xfRnJhZ0NvbG9yLmcgKyAwLjA3MjIqZ2xfRnJhZ0NvbG9yLmIpLCBncmF5KTtcXG59XFxuXCIsXG4gICAgICAgIC8vIHNldCB0aGUgdW5pZm9ybXNcbiAgICAgICAge1xuICAgICAgICAgICAgZ3JheTogeyB0eXBlOiAnMWYnLCB2YWx1ZTogMSB9XG4gICAgICAgIH1cbiAgICApO1xufVxuXG5HcmF5RmlsdGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoY29yZS5BYnN0cmFjdEZpbHRlci5wcm90b3R5cGUpO1xuR3JheUZpbHRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBHcmF5RmlsdGVyO1xubW9kdWxlLmV4cG9ydHMgPSBHcmF5RmlsdGVyO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhHcmF5RmlsdGVyLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFRoZSBzdHJlbmd0aCBvZiB0aGUgZ3JheS4gMSB3aWxsIG1ha2UgdGhlIG9iamVjdCBibGFjayBhbmQgd2hpdGUsIDAgd2lsbCBtYWtlIHRoZSBvYmplY3QgaXRzIG5vcm1hbCBjb2xvci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLkdyYXlGaWx0ZXIjXG4gICAgICovXG4gICAgZ3JheToge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVuaWZvcm1zLmdyYXkudmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLmdyYXkudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuIiwiLyoqXG4gKiBAZmlsZSAgICAgICAgTWFpbiBleHBvcnQgb2YgdGhlIFBJWEkgZmlsdGVycyBsaWJyYXJ5XG4gKiBAYXV0aG9yICAgICAgTWF0IEdyb3ZlcyA8bWF0QGdvb2Rib3lkaWdpdGFsLmNvbT5cbiAqIEBjb3B5cmlnaHQgICAyMDEzLTIwMTUgR29vZEJveURpZ2l0YWxcbiAqIEBsaWNlbnNlICAgICB7QGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL3BpeGlqcy9waXhpLmpzL2Jsb2IvbWFzdGVyL0xJQ0VOU0V8TUlUIExpY2Vuc2V9XG4gKi9cblxuLyoqXG4gKiBAbmFtZXNwYWNlIFBJWEkuZmlsdGVyc1xuICovXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgICBBc2NpaUZpbHRlcjogICAgICAgIHJlcXVpcmUoJy4vYXNjaWkvQXNjaWlGaWx0ZXInKSxcbiAgICBCbG9vbUZpbHRlcjogICAgICAgIHJlcXVpcmUoJy4vYmxvb20vQmxvb21GaWx0ZXInKSxcbiAgICBCbHVyRmlsdGVyOiAgICAgICAgIHJlcXVpcmUoJy4vYmx1ci9CbHVyRmlsdGVyJyksXG4gICAgQmx1clhGaWx0ZXI6ICAgICAgICByZXF1aXJlKCcuL2JsdXIvQmx1clhGaWx0ZXInKSxcbiAgICBCbHVyWUZpbHRlcjogICAgICAgIHJlcXVpcmUoJy4vYmx1ci9CbHVyWUZpbHRlcicpLFxuICAgIEJsdXJEaXJGaWx0ZXI6ICAgICAgcmVxdWlyZSgnLi9ibHVyL0JsdXJEaXJGaWx0ZXInKSxcbiAgICBDb2xvck1hdHJpeEZpbHRlcjogIHJlcXVpcmUoJy4vY29sb3IvQ29sb3JNYXRyaXhGaWx0ZXInKSxcbiAgICBDb2xvclN0ZXBGaWx0ZXI6ICAgIHJlcXVpcmUoJy4vY29sb3IvQ29sb3JTdGVwRmlsdGVyJyksXG4gICAgQ29udm9sdXRpb25GaWx0ZXI6ICByZXF1aXJlKCcuL2NvbnZvbHV0aW9uL0NvbnZvbHV0aW9uRmlsdGVyJyksXG4gICAgQ3Jvc3NIYXRjaEZpbHRlcjogICByZXF1aXJlKCcuL2Nyb3NzaGF0Y2gvQ3Jvc3NIYXRjaEZpbHRlcicpLFxuICAgIERpc3BsYWNlbWVudEZpbHRlcjogcmVxdWlyZSgnLi9kaXNwbGFjZW1lbnQvRGlzcGxhY2VtZW50RmlsdGVyJyksXG4gICAgRG90U2NyZWVuRmlsdGVyOiAgICByZXF1aXJlKCcuL2RvdC9Eb3RTY3JlZW5GaWx0ZXInKSxcbiAgICBHcmF5RmlsdGVyOiAgICAgICAgIHJlcXVpcmUoJy4vZ3JheS9HcmF5RmlsdGVyJyksXG4gICAgRHJvcFNoYWRvd0ZpbHRlcjogICByZXF1aXJlKCcuL2Ryb3BzaGFkb3cvRHJvcFNoYWRvd0ZpbHRlcicpLFxuICAgIEludmVydEZpbHRlcjogICAgICAgcmVxdWlyZSgnLi9pbnZlcnQvSW52ZXJ0RmlsdGVyJyksXG4gICAgTm9pc2VGaWx0ZXI6ICAgICAgICByZXF1aXJlKCcuL25vaXNlL05vaXNlRmlsdGVyJyksXG4gICAgUGl4ZWxhdGVGaWx0ZXI6ICAgICByZXF1aXJlKCcuL3BpeGVsYXRlL1BpeGVsYXRlRmlsdGVyJyksXG4gICAgUkdCU3BsaXRGaWx0ZXI6ICAgICByZXF1aXJlKCcuL3JnYi9SR0JTcGxpdEZpbHRlcicpLFxuICAgIFNob2Nrd2F2ZUZpbHRlcjogICAgcmVxdWlyZSgnLi9zaG9ja3dhdmUvU2hvY2t3YXZlRmlsdGVyJyksXG4gICAgU2VwaWFGaWx0ZXI6ICAgICAgICByZXF1aXJlKCcuL3NlcGlhL1NlcGlhRmlsdGVyJyksXG4gICAgU21hcnRCbHVyRmlsdGVyOiAgICByZXF1aXJlKCcuL2JsdXIvU21hcnRCbHVyRmlsdGVyJyksXG4gICAgVGlsdFNoaWZ0RmlsdGVyOiAgICByZXF1aXJlKCcuL3RpbHRzaGlmdC9UaWx0U2hpZnRGaWx0ZXInKSxcbiAgICBUaWx0U2hpZnRYRmlsdGVyOiAgIHJlcXVpcmUoJy4vdGlsdHNoaWZ0L1RpbHRTaGlmdFhGaWx0ZXInKSxcbiAgICBUaWx0U2hpZnRZRmlsdGVyOiAgIHJlcXVpcmUoJy4vdGlsdHNoaWZ0L1RpbHRTaGlmdFlGaWx0ZXInKSxcbiAgICBUd2lzdEZpbHRlcjogICAgICAgIHJlcXVpcmUoJy4vdHdpc3QvVHdpc3RGaWx0ZXInKVxufTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vLi4vY29yZScpO1xuLy8gQHNlZSBodHRwczovL2dpdGh1Yi5jb20vc3Vic3RhY2svYnJmcy9pc3N1ZXMvMjVcblxuXG4vKipcbiAqIFRoaXMgaW52ZXJ0cyB5b3VyIERpc3BsYXkgT2JqZWN0cyBjb2xvcnMuXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLkFic3RyYWN0RmlsdGVyXG4gKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzXG4gKi9cbmZ1bmN0aW9uIEludmVydEZpbHRlcigpXG57XG4gICAgY29yZS5BYnN0cmFjdEZpbHRlci5jYWxsKHRoaXMsXG4gICAgICAgIC8vIHZlcnRleCBzaGFkZXJcbiAgICAgICAgbnVsbCxcbiAgICAgICAgLy8gZnJhZ21lbnQgc2hhZGVyXG4gICAgICAgIFwicHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XFxuXFxudmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7XFxuXFxudW5pZm9ybSBmbG9hdCBpbnZlcnQ7XFxudW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXI7XFxuXFxudm9pZCBtYWluKHZvaWQpXFxue1xcbiAgICBnbF9GcmFnQ29sb3IgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZUZXh0dXJlQ29vcmQpO1xcblxcbiAgICBnbF9GcmFnQ29sb3IucmdiID0gbWl4KCAodmVjMygxKS1nbF9GcmFnQ29sb3IucmdiKSAqIGdsX0ZyYWdDb2xvci5hLCBnbF9GcmFnQ29sb3IucmdiLCAxLjAgLSBpbnZlcnQpO1xcbn1cXG5cIixcbiAgICAgICAgLy8gY3VzdG9tIHVuaWZvcm1zXG4gICAgICAgIHtcbiAgICAgICAgICAgIGludmVydDogeyB0eXBlOiAnMWYnLCB2YWx1ZTogMSB9XG4gICAgICAgIH1cbiAgICApO1xufVxuXG5JbnZlcnRGaWx0ZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShjb3JlLkFic3RyYWN0RmlsdGVyLnByb3RvdHlwZSk7XG5JbnZlcnRGaWx0ZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gSW52ZXJ0RmlsdGVyO1xubW9kdWxlLmV4cG9ydHMgPSBJbnZlcnRGaWx0ZXI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKEludmVydEZpbHRlci5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBUaGUgc3RyZW5ndGggb2YgdGhlIGludmVydC4gYDFgIHdpbGwgZnVsbHkgaW52ZXJ0IHRoZSBjb2xvcnMsIGFuZFxuICAgICAqIGAwYCB3aWxsIG1ha2UgdGhlIG9iamVjdCBpdHMgbm9ybWFsIGNvbG9yLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuSW52ZXJ0RmlsdGVyI1xuICAgICAqL1xuICAgIGludmVydDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVuaWZvcm1zLmludmVydC52YWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudW5pZm9ybXMuaW52ZXJ0LnZhbHVlID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG59KTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vLi4vY29yZScpO1xuLy8gQHNlZSBodHRwczovL2dpdGh1Yi5jb20vc3Vic3RhY2svYnJmcy9pc3N1ZXMvMjVcblxuXG4vKipcbiAqIEBhdXRob3IgVmljbyBAdmljb2NvdGVhXG4gKiBvcmlnaW5hbCBmaWx0ZXI6IGh0dHBzOi8vZ2l0aHViLmNvbS9ldmFudy9nbGZ4LmpzL2Jsb2IvbWFzdGVyL3NyYy9maWx0ZXJzL2FkanVzdC9ub2lzZS5qc1xuICovXG5cbi8qKlxuICogQSBOb2lzZSBlZmZlY3QgZmlsdGVyLlxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5BYnN0cmFjdEZpbHRlclxuICogQG1lbWJlcm9mIFBJWEkuZmlsdGVyc1xuICovXG5mdW5jdGlvbiBOb2lzZUZpbHRlcigpXG57XG4gICAgY29yZS5BYnN0cmFjdEZpbHRlci5jYWxsKHRoaXMsXG4gICAgICAgIC8vIHZlcnRleCBzaGFkZXJcbiAgICAgICAgbnVsbCxcbiAgICAgICAgLy8gZnJhZ21lbnQgc2hhZGVyXG4gICAgICAgIFwicHJlY2lzaW9uIGhpZ2hwIGZsb2F0O1xcblxcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xcbnZhcnlpbmcgdmVjNCB2Q29sb3I7XFxuXFxudW5pZm9ybSBmbG9hdCBub2lzZTtcXG51bmlmb3JtIHNhbXBsZXIyRCB1U2FtcGxlcjtcXG5cXG5mbG9hdCByYW5kKHZlYzIgY28pXFxue1xcbiAgICByZXR1cm4gZnJhY3Qoc2luKGRvdChjby54eSwgdmVjMigxMi45ODk4LCA3OC4yMzMpKSkgKiA0Mzc1OC41NDUzKTtcXG59XFxuXFxudm9pZCBtYWluKClcXG57XFxuICAgIHZlYzQgY29sb3IgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZUZXh0dXJlQ29vcmQpO1xcblxcbiAgICBmbG9hdCBkaWZmID0gKHJhbmQodlRleHR1cmVDb29yZCkgLSAwLjUpICogbm9pc2U7XFxuXFxuICAgIGNvbG9yLnIgKz0gZGlmZjtcXG4gICAgY29sb3IuZyArPSBkaWZmO1xcbiAgICBjb2xvci5iICs9IGRpZmY7XFxuXFxuICAgIGdsX0ZyYWdDb2xvciA9IGNvbG9yO1xcbn1cXG5cIixcbiAgICAgICAgLy8gY3VzdG9tIHVuaWZvcm1zXG4gICAgICAgIHtcbiAgICAgICAgICAgIG5vaXNlOiB7IHR5cGU6ICcxZicsIHZhbHVlOiAwLjUgfVxuICAgICAgICB9XG4gICAgKTtcbn1cblxuTm9pc2VGaWx0ZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShjb3JlLkFic3RyYWN0RmlsdGVyLnByb3RvdHlwZSk7XG5Ob2lzZUZpbHRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBOb2lzZUZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gTm9pc2VGaWx0ZXI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKE5vaXNlRmlsdGVyLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFRoZSBhbW91bnQgb2Ygbm9pc2UgdG8gYXBwbHkuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5Ob2lzZUZpbHRlciNcbiAgICAgKiBAZGVmYXVsdCAwLjVcbiAgICAgKi9cbiAgICBub2lzZToge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVuaWZvcm1zLm5vaXNlLnZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy5ub2lzZS52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfVxufSk7XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uLy4uL2NvcmUnKTtcbi8vIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL3N1YnN0YWNrL2JyZnMvaXNzdWVzLzI1XG5cblxuLyoqXG4gKiBUaGlzIGZpbHRlciBhcHBsaWVzIGEgcGl4ZWxhdGUgZWZmZWN0IG1ha2luZyBkaXNwbGF5IG9iamVjdHMgYXBwZWFyICdibG9ja3knLlxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5BYnN0cmFjdEZpbHRlclxuICogQG1lbWJlcm9mIFBJWEkuZmlsdGVyc1xuICovXG5mdW5jdGlvbiBQaXhlbGF0ZUZpbHRlcigpXG57XG4gICAgY29yZS5BYnN0cmFjdEZpbHRlci5jYWxsKHRoaXMsXG4gICAgICAgIC8vIHZlcnRleCBzaGFkZXJcbiAgICAgICAgbnVsbCxcbiAgICAgICAgLy8gZnJhZ21lbnQgc2hhZGVyXG4gICAgICAgIFwicHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XFxuXFxudmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7XFxuXFxudW5pZm9ybSB2ZWM0IGRpbWVuc2lvbnM7XFxudW5pZm9ybSB2ZWMyIHBpeGVsU2l6ZTtcXG51bmlmb3JtIHNhbXBsZXIyRCB1U2FtcGxlcjtcXG5cXG52b2lkIG1haW4odm9pZClcXG57XFxuICAgIHZlYzIgY29vcmQgPSB2VGV4dHVyZUNvb3JkO1xcblxcbiAgICB2ZWMyIHNpemUgPSBkaW1lbnNpb25zLnh5IC8gcGl4ZWxTaXplO1xcblxcbiAgICB2ZWMyIGNvbG9yID0gZmxvb3IoICggdlRleHR1cmVDb29yZCAqIHNpemUgKSApIC8gc2l6ZSArIHBpeGVsU2l6ZS9kaW1lbnNpb25zLnh5ICogMC41O1xcblxcbiAgICBnbF9GcmFnQ29sb3IgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIGNvbG9yKTtcXG59XFxuXCIsXG4gICAgICAgIC8vIGN1c3RvbSB1bmlmb3Jtc1xuICAgICAgICB7XG4gICAgICAgICAgICBkaW1lbnNpb25zOiB7IHR5cGU6ICc0ZnYnLCAgdmFsdWU6IG5ldyBGbG9hdDMyQXJyYXkoWzAsIDAsIDAsIDBdKSB9LFxuICAgICAgICAgICAgcGl4ZWxTaXplOiAgeyB0eXBlOiAndjInLCAgIHZhbHVlOiB7IHg6IDEwLCB5OiAxMCB9IH1cbiAgICAgICAgfVxuICAgICk7XG59XG5cblBpeGVsYXRlRmlsdGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoY29yZS5BYnN0cmFjdEZpbHRlci5wcm90b3R5cGUpO1xuUGl4ZWxhdGVGaWx0ZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gUGl4ZWxhdGVGaWx0ZXI7XG5tb2R1bGUuZXhwb3J0cyA9IFBpeGVsYXRlRmlsdGVyO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhQaXhlbGF0ZUZpbHRlci5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBUaGlzIGEgcG9pbnQgdGhhdCBkZXNjcmliZXMgdGhlIHNpemUgb2YgdGhlIGJsb2Nrcy5cbiAgICAgKiB4IGlzIHRoZSB3aWR0aCBvZiB0aGUgYmxvY2sgYW5kIHkgaXMgdGhlIGhlaWdodC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuUG9pbnR9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5QaXhlbGF0ZUZpbHRlciNcbiAgICAgKi9cbiAgICBzaXplOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudW5pZm9ybXMucGl4ZWxTaXplLnZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy5waXhlbFNpemUudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi8uLi9jb3JlJyk7XG4vLyBAc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9zdWJzdGFjay9icmZzL2lzc3Vlcy8yNVxuXG5cbi8qKlxuICogQW4gUkdCIFNwbGl0IEZpbHRlci5cbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQWJzdHJhY3RGaWx0ZXJcbiAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnNcbiAqL1xuZnVuY3Rpb24gUkdCU3BsaXRGaWx0ZXIoKVxue1xuICAgIGNvcmUuQWJzdHJhY3RGaWx0ZXIuY2FsbCh0aGlzLFxuICAgICAgICAvLyB2ZXJ0ZXggc2hhZGVyXG4gICAgICAgIG51bGwsXG4gICAgICAgIC8vIGZyYWdtZW50IHNoYWRlclxuICAgICAgICBcInByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xcblxcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xcblxcbnVuaWZvcm0gc2FtcGxlcjJEIHVTYW1wbGVyO1xcbnVuaWZvcm0gdmVjNCBkaW1lbnNpb25zO1xcbnVuaWZvcm0gdmVjMiByZWQ7XFxudW5pZm9ybSB2ZWMyIGdyZWVuO1xcbnVuaWZvcm0gdmVjMiBibHVlO1xcblxcbnZvaWQgbWFpbih2b2lkKVxcbntcXG4gICBnbF9GcmFnQ29sb3IuciA9IHRleHR1cmUyRCh1U2FtcGxlciwgdlRleHR1cmVDb29yZCArIHJlZC9kaW1lbnNpb25zLnh5KS5yO1xcbiAgIGdsX0ZyYWdDb2xvci5nID0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2VGV4dHVyZUNvb3JkICsgZ3JlZW4vZGltZW5zaW9ucy54eSkuZztcXG4gICBnbF9GcmFnQ29sb3IuYiA9IHRleHR1cmUyRCh1U2FtcGxlciwgdlRleHR1cmVDb29yZCArIGJsdWUvZGltZW5zaW9ucy54eSkuYjtcXG4gICBnbF9GcmFnQ29sb3IuYSA9IHRleHR1cmUyRCh1U2FtcGxlciwgdlRleHR1cmVDb29yZCkuYTtcXG59XFxuXCIsXG4gICAgICAgIC8vIGN1c3RvbSB1bmlmb3Jtc1xuICAgICAgICB7XG4gICAgICAgICAgICByZWQ6ICAgICAgICB7IHR5cGU6ICd2MicsIHZhbHVlOiB7IHg6IDIwLCB5OiAyMCB9IH0sXG4gICAgICAgICAgICBncmVlbjogICAgICB7IHR5cGU6ICd2MicsIHZhbHVlOiB7IHg6IC0yMCwgeTogMjAgfSB9LFxuICAgICAgICAgICAgYmx1ZTogICAgICAgeyB0eXBlOiAndjInLCB2YWx1ZTogeyB4OiAyMCwgeTogLTIwIH0gfSxcbiAgICAgICAgICAgIGRpbWVuc2lvbnM6IHsgdHlwZTogJzRmdicsIHZhbHVlOiBbMCwgMCwgMCwgMF0gfVxuICAgICAgICB9XG4gICAgKTtcbn1cblxuUkdCU3BsaXRGaWx0ZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShjb3JlLkFic3RyYWN0RmlsdGVyLnByb3RvdHlwZSk7XG5SR0JTcGxpdEZpbHRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBSR0JTcGxpdEZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gUkdCU3BsaXRGaWx0ZXI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKFJHQlNwbGl0RmlsdGVyLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFJlZCBjaGFubmVsIG9mZnNldC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuUG9pbnR9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5SR0JTcGxpdEZpbHRlciNcbiAgICAgKi9cbiAgICByZWQ6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy51bmlmb3Jtcy5yZWQudmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLnJlZC52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIEdyZWVuIGNoYW5uZWwgb2Zmc2V0LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5Qb2ludH1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLlJHQlNwbGl0RmlsdGVyI1xuICAgICAqL1xuICAgIGdyZWVuOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudW5pZm9ybXMuZ3JlZW4udmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLmdyZWVuLnZhbHVlID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQmx1ZSBvZmZzZXQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlBvaW50fVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuUkdCU3BsaXRGaWx0ZXIjXG4gICAgICovXG4gICAgYmx1ZToge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVuaWZvcm1zLmJsdWUudmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLmJsdWUudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi8uLi9jb3JlJyk7XG4vLyBAc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9zdWJzdGFjay9icmZzL2lzc3Vlcy8yNVxuXG5cbi8qKlxuICogVGhpcyBhcHBsaWVzIGEgc2VwaWEgZWZmZWN0IHRvIHlvdXIgRGlzcGxheSBPYmplY3RzLlxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5BYnN0cmFjdEZpbHRlclxuICogQG1lbWJlcm9mIFBJWEkuZmlsdGVyc1xuICovXG5mdW5jdGlvbiBTZXBpYUZpbHRlcigpXG57XG4gICAgY29yZS5BYnN0cmFjdEZpbHRlci5jYWxsKHRoaXMsXG4gICAgICAgIC8vIHZlcnRleCBzaGFkZXJcbiAgICAgICAgbnVsbCxcbiAgICAgICAgLy8gZnJhZ21lbnQgc2hhZGVyXG4gICAgICAgIFwicHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XFxuXFxudmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7XFxuXFxudW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXI7XFxudW5pZm9ybSBmbG9hdCBzZXBpYTtcXG5cXG5jb25zdCBtYXQzIHNlcGlhTWF0cml4ID0gbWF0MygwLjM1ODgsIDAuNzA0NCwgMC4xMzY4LCAwLjI5OTAsIDAuNTg3MCwgMC4xMTQwLCAwLjIzOTIsIDAuNDY5NiwgMC4wOTEyKTtcXG5cXG52b2lkIG1haW4odm9pZClcXG57XFxuICAgZ2xfRnJhZ0NvbG9yID0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2VGV4dHVyZUNvb3JkKTtcXG4gICBnbF9GcmFnQ29sb3IucmdiID0gbWl4KCBnbF9GcmFnQ29sb3IucmdiLCBnbF9GcmFnQ29sb3IucmdiICogc2VwaWFNYXRyaXgsIHNlcGlhKTtcXG59XFxuXCIsXG4gICAgICAgIC8vIGN1c3RvbSB1bmlmb3Jtc1xuICAgICAgICB7XG4gICAgICAgICAgICBzZXBpYTogeyB0eXBlOiAnMWYnLCB2YWx1ZTogMSB9XG4gICAgICAgIH1cbiAgICApO1xufVxuXG5TZXBpYUZpbHRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuQWJzdHJhY3RGaWx0ZXIucHJvdG90eXBlKTtcblNlcGlhRmlsdGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFNlcGlhRmlsdGVyO1xubW9kdWxlLmV4cG9ydHMgPSBTZXBpYUZpbHRlcjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoU2VwaWFGaWx0ZXIucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogVGhlIHN0cmVuZ3RoIG9mIHRoZSBzZXBpYS4gYDFgIHdpbGwgYXBwbHkgdGhlIGZ1bGwgc2VwaWEgZWZmZWN0LCBhbmRcbiAgICAgKiBgMGAgd2lsbCBtYWtlIHRoZSBvYmplY3QgaXRzIG5vcm1hbCBjb2xvci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLlNlcGlhRmlsdGVyI1xuICAgICAqL1xuICAgIHNlcGlhOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudW5pZm9ybXMuc2VwaWEudmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLnNlcGlhLnZhbHVlID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG59KTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vLi4vY29yZScpO1xuLy8gQHNlZSBodHRwczovL2dpdGh1Yi5jb20vc3Vic3RhY2svYnJmcy9pc3N1ZXMvMjVcblxuXG4vKipcbiAqIFRoZSBDb2xvck1hdHJpeEZpbHRlciBjbGFzcyBsZXRzIHlvdSBhcHBseSBhIDR4NCBtYXRyaXggdHJhbnNmb3JtYXRpb24gb24gdGhlIFJHQkFcbiAqIGNvbG9yIGFuZCBhbHBoYSB2YWx1ZXMgb2YgZXZlcnkgcGl4ZWwgb24geW91ciBkaXNwbGF5T2JqZWN0IHRvIHByb2R1Y2UgYSByZXN1bHRcbiAqIHdpdGggYSBuZXcgc2V0IG9mIFJHQkEgY29sb3IgYW5kIGFscGhhIHZhbHVlcy4gSXQncyBwcmV0dHkgcG93ZXJmdWwhXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLkFic3RyYWN0RmlsdGVyXG4gKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzXG4gKi9cbmZ1bmN0aW9uIFNob2Nrd2F2ZUZpbHRlcigpXG57XG4gICAgY29yZS5BYnN0cmFjdEZpbHRlci5jYWxsKHRoaXMsXG4gICAgICAgIC8vIHZlcnRleCBzaGFkZXJcbiAgICAgICAgbnVsbCxcbiAgICAgICAgLy8gZnJhZ21lbnQgc2hhZGVyXG4gICAgICAgIFwicHJlY2lzaW9uIGxvd3AgZmxvYXQ7XFxuXFxudmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7XFxuXFxudW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXI7XFxuXFxudW5pZm9ybSB2ZWMyIGNlbnRlcjtcXG51bmlmb3JtIHZlYzMgcGFyYW1zOyAvLyAxMC4wLCAwLjgsIDAuMVxcbnVuaWZvcm0gZmxvYXQgdGltZTtcXG5cXG52b2lkIG1haW4oKVxcbntcXG4gICAgdmVjMiB1diA9IHZUZXh0dXJlQ29vcmQ7XFxuICAgIHZlYzIgdGV4Q29vcmQgPSB1djtcXG5cXG4gICAgZmxvYXQgZGlzdCA9IGRpc3RhbmNlKHV2LCBjZW50ZXIpO1xcblxcbiAgICBpZiAoIChkaXN0IDw9ICh0aW1lICsgcGFyYW1zLnopKSAmJiAoZGlzdCA+PSAodGltZSAtIHBhcmFtcy56KSkgKVxcbiAgICB7XFxuICAgICAgICBmbG9hdCBkaWZmID0gKGRpc3QgLSB0aW1lKTtcXG4gICAgICAgIGZsb2F0IHBvd0RpZmYgPSAxLjAgLSBwb3coYWJzKGRpZmYqcGFyYW1zLngpLCBwYXJhbXMueSk7XFxuXFxuICAgICAgICBmbG9hdCBkaWZmVGltZSA9IGRpZmYgICogcG93RGlmZjtcXG4gICAgICAgIHZlYzIgZGlmZlVWID0gbm9ybWFsaXplKHV2IC0gY2VudGVyKTtcXG4gICAgICAgIHRleENvb3JkID0gdXYgKyAoZGlmZlVWICogZGlmZlRpbWUpO1xcbiAgICB9XFxuXFxuICAgIGdsX0ZyYWdDb2xvciA9IHRleHR1cmUyRCh1U2FtcGxlciwgdGV4Q29vcmQpO1xcbn1cXG5cIixcbiAgICAgICAgLy8gY3VzdG9tIHVuaWZvcm1zXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNlbnRlcjogeyB0eXBlOiAndjInLCB2YWx1ZTogeyB4OiAwLjUsIHk6IDAuNSB9IH0sXG4gICAgICAgICAgICBwYXJhbXM6IHsgdHlwZTogJ3YzJywgdmFsdWU6IHsgeDogMTAsIHk6IDAuOCwgejogMC4xIH0gfSxcbiAgICAgICAgICAgIHRpbWU6IHsgdHlwZTogJzFmJywgdmFsdWU6IDAgfVxuICAgICAgICB9XG4gICAgKTtcbn1cblxuU2hvY2t3YXZlRmlsdGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoY29yZS5BYnN0cmFjdEZpbHRlci5wcm90b3R5cGUpO1xuU2hvY2t3YXZlRmlsdGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFNob2Nrd2F2ZUZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gU2hvY2t3YXZlRmlsdGVyO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhTaG9ja3dhdmVGaWx0ZXIucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgY2VudGVyIG9mIHRoZSBzaG9ja3dhdmUgaW4gbm9ybWFsaXplZCBzY3JlZW4gY29vcmRzLiBUaGF0IGlzXG4gICAgICogKDAsMCkgaXMgdGhlIHRvcC1sZWZ0IGFuZCAoMSwxKSBpcyB0aGUgYm90dG9tIHJpZ2h0LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7b2JqZWN0PHN0cmluZywgbnVtYmVyPn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLlNob2Nrd2F2ZUZpbHRlciNcbiAgICAgKi9cbiAgICBjZW50ZXI6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy51bmlmb3Jtcy5jZW50ZXIudmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLmNlbnRlci52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfSxcbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBwYXJhbXMgb2YgdGhlIHNob2Nrd2F2ZS4gVGhlc2UgbW9kaWZ5IHRoZSBsb29rIGFuZCBiZWhhdmlvciBvZlxuICAgICAqIHRoZSBzaG9ja3dhdmUgYXMgaXQgcmlwcGxlcyBvdXQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtvYmplY3Q8c3RyaW5nLCBudW1iZXI+fVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuU2hvY2t3YXZlRmlsdGVyI1xuICAgICAqL1xuICAgIHBhcmFtczoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVuaWZvcm1zLnBhcmFtcy52YWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudW5pZm9ybXMucGFyYW1zLnZhbHVlID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9LFxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIGVsYXBzZWQgdGltZSBvZiB0aGUgc2hvY2t3YXZlLiBUaGlzIGNvbnRyb2xzIHRoZSBzcGVlZCBhdCB3aGljaFxuICAgICAqIHRoZSBzaG9ja3dhdmUgcmlwcGxlcyBvdXQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5TaG9ja3dhdmVGaWx0ZXIjXG4gICAgICovXG4gICAgdGltZToge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVuaWZvcm1zLnRpbWUudmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLnRpbWUudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi8uLi9jb3JlJyk7XG4vLyBAc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9zdWJzdGFjay9icmZzL2lzc3Vlcy8yNVxuXG5cbi8qKlxuICogQGF1dGhvciBWaWNvIEB2aWNvY290ZWFcbiAqIG9yaWdpbmFsIGZpbHRlciBodHRwczovL2dpdGh1Yi5jb20vZXZhbncvZ2xmeC5qcy9ibG9iL21hc3Rlci9zcmMvZmlsdGVycy9ibHVyL3RpbHRzaGlmdC5qcyBieSBFdmFuIFdhbGxhY2UgOiBodHRwOi8vbWFkZWJ5ZXZhbi5jb20vXG4gKi9cblxuLyoqXG4gKiBBIFRpbHRTaGlmdEF4aXNGaWx0ZXIuXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLkFic3RyYWN0RmlsdGVyXG4gKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzXG4gKi9cbmZ1bmN0aW9uIFRpbHRTaGlmdEF4aXNGaWx0ZXIoKVxue1xuICAgIGNvcmUuQWJzdHJhY3RGaWx0ZXIuY2FsbCh0aGlzLFxuICAgICAgICAvLyB2ZXJ0ZXggc2hhZGVyXG4gICAgICAgIG51bGwsXG4gICAgICAgIC8vIGZyYWdtZW50IHNoYWRlclxuICAgICAgICBcInByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xcblxcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xcblxcbnVuaWZvcm0gc2FtcGxlcjJEIHVTYW1wbGVyO1xcbnVuaWZvcm0gZmxvYXQgYmx1cjtcXG51bmlmb3JtIGZsb2F0IGdyYWRpZW50Qmx1cjtcXG51bmlmb3JtIHZlYzIgc3RhcnQ7XFxudW5pZm9ybSB2ZWMyIGVuZDtcXG51bmlmb3JtIHZlYzIgZGVsdGE7XFxudW5pZm9ybSB2ZWMyIHRleFNpemU7XFxuXFxuZmxvYXQgcmFuZG9tKHZlYzMgc2NhbGUsIGZsb2F0IHNlZWQpXFxue1xcbiAgICByZXR1cm4gZnJhY3Qoc2luKGRvdChnbF9GcmFnQ29vcmQueHl6ICsgc2VlZCwgc2NhbGUpKSAqIDQzNzU4LjU0NTMgKyBzZWVkKTtcXG59XFxuXFxudm9pZCBtYWluKHZvaWQpXFxue1xcbiAgICB2ZWM0IGNvbG9yID0gdmVjNCgwLjApO1xcbiAgICBmbG9hdCB0b3RhbCA9IDAuMDtcXG5cXG4gICAgZmxvYXQgb2Zmc2V0ID0gcmFuZG9tKHZlYzMoMTIuOTg5OCwgNzguMjMzLCAxNTEuNzE4MiksIDAuMCk7XFxuICAgIHZlYzIgbm9ybWFsID0gbm9ybWFsaXplKHZlYzIoc3RhcnQueSAtIGVuZC55LCBlbmQueCAtIHN0YXJ0LngpKTtcXG4gICAgZmxvYXQgcmFkaXVzID0gc21vb3Roc3RlcCgwLjAsIDEuMCwgYWJzKGRvdCh2VGV4dHVyZUNvb3JkICogdGV4U2l6ZSAtIHN0YXJ0LCBub3JtYWwpKSAvIGdyYWRpZW50Qmx1cikgKiBibHVyO1xcblxcbiAgICBmb3IgKGZsb2F0IHQgPSAtMzAuMDsgdCA8PSAzMC4wOyB0KyspXFxuICAgIHtcXG4gICAgICAgIGZsb2F0IHBlcmNlbnQgPSAodCArIG9mZnNldCAtIDAuNSkgLyAzMC4wO1xcbiAgICAgICAgZmxvYXQgd2VpZ2h0ID0gMS4wIC0gYWJzKHBlcmNlbnQpO1xcbiAgICAgICAgdmVjNCBzYW1wbGUgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZUZXh0dXJlQ29vcmQgKyBkZWx0YSAvIHRleFNpemUgKiBwZXJjZW50ICogcmFkaXVzKTtcXG4gICAgICAgIHNhbXBsZS5yZ2IgKj0gc2FtcGxlLmE7XFxuICAgICAgICBjb2xvciArPSBzYW1wbGUgKiB3ZWlnaHQ7XFxuICAgICAgICB0b3RhbCArPSB3ZWlnaHQ7XFxuICAgIH1cXG5cXG4gICAgZ2xfRnJhZ0NvbG9yID0gY29sb3IgLyB0b3RhbDtcXG4gICAgZ2xfRnJhZ0NvbG9yLnJnYiAvPSBnbF9GcmFnQ29sb3IuYSArIDAuMDAwMDE7XFxufVxcblwiLFxuICAgICAgICAvLyBjdXN0b20gdW5pZm9ybXNcbiAgICAgICAge1xuICAgICAgICAgICAgYmx1cjogICAgICAgICAgIHsgdHlwZTogJzFmJywgdmFsdWU6IDEwMCB9LFxuICAgICAgICAgICAgZ3JhZGllbnRCbHVyOiAgIHsgdHlwZTogJzFmJywgdmFsdWU6IDYwMCB9LFxuICAgICAgICAgICAgc3RhcnQ6ICAgICAgICAgIHsgdHlwZTogJ3YyJywgdmFsdWU6IHsgeDogMCwgICAgeTogd2luZG93LmlubmVySGVpZ2h0IC8gMiB9IH0sXG4gICAgICAgICAgICBlbmQ6ICAgICAgICAgICAgeyB0eXBlOiAndjInLCB2YWx1ZTogeyB4OiA2MDAsICB5OiB3aW5kb3cuaW5uZXJIZWlnaHQgLyAyIH0gfSxcbiAgICAgICAgICAgIGRlbHRhOiAgICAgICAgICB7IHR5cGU6ICd2MicsIHZhbHVlOiB7IHg6IDMwLCAgIHk6IDMwIH0gfSxcbiAgICAgICAgICAgIHRleFNpemU6ICAgICAgICB7IHR5cGU6ICd2MicsIHZhbHVlOiB7IHg6IHdpbmRvdy5pbm5lcldpZHRoLCB5OiB3aW5kb3cuaW5uZXJIZWlnaHQgfSB9XG4gICAgICAgIH1cbiAgICApO1xuXG4gICAgdGhpcy51cGRhdGVEZWx0YSgpO1xufVxuXG5UaWx0U2hpZnRBeGlzRmlsdGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoY29yZS5BYnN0cmFjdEZpbHRlci5wcm90b3R5cGUpO1xuVGlsdFNoaWZ0QXhpc0ZpbHRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBUaWx0U2hpZnRBeGlzRmlsdGVyO1xubW9kdWxlLmV4cG9ydHMgPSBUaWx0U2hpZnRBeGlzRmlsdGVyO1xuXG4vKipcbiAqIFVwZGF0ZXMgdGhlIGZpbHRlciBkZWx0YSB2YWx1ZXMuXG4gKiBUaGlzIGlzIG92ZXJyaWRkZW4gaW4gdGhlIFggYW5kIFkgZmlsdGVycywgZG9lcyBub3RoaW5nIGZvciB0aGlzIGNsYXNzLlxuICpcbiAqL1xuVGlsdFNoaWZ0QXhpc0ZpbHRlci5wcm90b3R5cGUudXBkYXRlRGVsdGEgPSBmdW5jdGlvbiAoKVxue1xuICAgIHRoaXMudW5pZm9ybXMuZGVsdGEudmFsdWUueCA9IDA7XG4gICAgdGhpcy51bmlmb3Jtcy5kZWx0YS52YWx1ZS55ID0gMDtcbn07XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKFRpbHRTaGlmdEF4aXNGaWx0ZXIucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogVGhlIHN0cmVuZ3RoIG9mIHRoZSBibHVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuVGlsdFNoaWZ0QXhpc0ZpbHRlciNcbiAgICAgKi9cbiAgICBibHVyOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudW5pZm9ybXMuYmx1ci52YWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudW5pZm9ybXMuYmx1ci52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFRoZSBzdHJlbmd0aCBvZiB0aGUgZ3JhZGllbnQgYmx1ci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLlRpbHRTaGlmdEF4aXNGaWx0ZXIjXG4gICAgICovXG4gICAgZ3JhZGllbnRCbHVyOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudW5pZm9ybXMuZ3JhZGllbnRCbHVyLnZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy5ncmFkaWVudEJsdXIudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBUaGUgWCB2YWx1ZSB0byBzdGFydCB0aGUgZWZmZWN0IGF0LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5Qb2ludH1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLlRpbHRTaGlmdEF4aXNGaWx0ZXIjXG4gICAgICovXG4gICAgc3RhcnQ6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy51bmlmb3Jtcy5zdGFydC52YWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudW5pZm9ybXMuc3RhcnQudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlRGVsdGEoKTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBUaGUgWCB2YWx1ZSB0byBlbmQgdGhlIGVmZmVjdCBhdC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuUG9pbnR9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5UaWx0U2hpZnRBeGlzRmlsdGVyI1xuICAgICAqL1xuICAgIGVuZDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVuaWZvcm1zLmVuZC52YWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudW5pZm9ybXMuZW5kLnZhbHVlID0gdmFsdWU7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZURlbHRhKCk7XG4gICAgICAgIH1cbiAgICB9XG59KTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vLi4vY29yZScpLFxuICAgIFRpbHRTaGlmdFhGaWx0ZXIgPSByZXF1aXJlKCcuL1RpbHRTaGlmdFhGaWx0ZXInKSxcbiAgICBUaWx0U2hpZnRZRmlsdGVyID0gcmVxdWlyZSgnLi9UaWx0U2hpZnRZRmlsdGVyJyk7XG5cbi8qKlxuICogQGF1dGhvciBWaWNvIEB2aWNvY290ZWFcbiAqIG9yaWdpbmFsIGZpbHRlciBodHRwczovL2dpdGh1Yi5jb20vZXZhbncvZ2xmeC5qcy9ibG9iL21hc3Rlci9zcmMvZmlsdGVycy9ibHVyL3RpbHRzaGlmdC5qcyBieSBFdmFuIFdhbGxhY2UgOiBodHRwOi8vbWFkZWJ5ZXZhbi5jb20vXG4gKi9cblxuLyoqXG4gKiBBIFRpbHRTaGlmdCBGaWx0ZXIuIE1hbmFnZXMgdGhlIHBhc3Mgb2YgYm90aCBhIFRpbHRTaGlmdFhGaWx0ZXIgYW5kIFRpbHRTaGlmdFlGaWx0ZXIuXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLkFic3RyYWN0RmlsdGVyXG4gKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzXG4gKi9cbmZ1bmN0aW9uIFRpbHRTaGlmdEZpbHRlcigpXG57XG4gICAgY29yZS5BYnN0cmFjdEZpbHRlci5jYWxsKHRoaXMpO1xuXG4gICAgdGhpcy50aWx0U2hpZnRYRmlsdGVyID0gbmV3IFRpbHRTaGlmdFhGaWx0ZXIoKTtcbiAgICB0aGlzLnRpbHRTaGlmdFlGaWx0ZXIgPSBuZXcgVGlsdFNoaWZ0WUZpbHRlcigpO1xufVxuXG5UaWx0U2hpZnRGaWx0ZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShjb3JlLkFic3RyYWN0RmlsdGVyLnByb3RvdHlwZSk7XG5UaWx0U2hpZnRGaWx0ZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gVGlsdFNoaWZ0RmlsdGVyO1xubW9kdWxlLmV4cG9ydHMgPSBUaWx0U2hpZnRGaWx0ZXI7XG5cblRpbHRTaGlmdEZpbHRlci5wcm90b3R5cGUuYXBwbHlGaWx0ZXIgPSBmdW5jdGlvbiAocmVuZGVyZXIsIGlucHV0LCBvdXRwdXQpXG57XG4gICAgdmFyIHJlbmRlclRhcmdldCA9IHJlbmRlcmVyLmZpbHRlck1hbmFnZXIuZ2V0UmVuZGVyVGFyZ2V0KHRydWUpO1xuXG4gICAgdGhpcy50aWx0U2hpZnRYRmlsdGVyLmFwcGx5RmlsdGVyKHJlbmRlcmVyLCBpbnB1dCwgcmVuZGVyVGFyZ2V0KTtcblxuICAgIHRoaXMudGlsdFNoaWZ0WUZpbHRlci5hcHBseUZpbHRlcihyZW5kZXJlciwgcmVuZGVyVGFyZ2V0LCBvdXRwdXQpO1xuXG4gICAgcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5yZXR1cm5SZW5kZXJUYXJnZXQocmVuZGVyVGFyZ2V0KTtcbn07XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKFRpbHRTaGlmdEZpbHRlci5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBUaGUgc3RyZW5ndGggb2YgdGhlIGJsdXIuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5UaWx0U2hpZnRGaWx0ZXIjXG4gICAgICovXG4gICAgYmx1cjoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnRpbHRTaGlmdFhGaWx0ZXIuYmx1cjtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudGlsdFNoaWZ0WEZpbHRlci5ibHVyID0gdGhpcy50aWx0U2hpZnRZRmlsdGVyLmJsdXIgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBUaGUgc3RyZW5ndGggb2YgdGhlIGdyYWRpZW50IGJsdXIuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5UaWx0U2hpZnRGaWx0ZXIjXG4gICAgICovXG4gICAgZ3JhZGllbnRCbHVyOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudGlsdFNoaWZ0WEZpbHRlci5ncmFkaWVudEJsdXI7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnRpbHRTaGlmdFhGaWx0ZXIuZ3JhZGllbnRCbHVyID0gdGhpcy50aWx0U2hpZnRZRmlsdGVyLmdyYWRpZW50Qmx1ciA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFRoZSBZIHZhbHVlIHRvIHN0YXJ0IHRoZSBlZmZlY3QgYXQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5UaWx0U2hpZnRGaWx0ZXIjXG4gICAgICovXG4gICAgc3RhcnQ6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy50aWx0U2hpZnRYRmlsdGVyLnN0YXJ0O1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy50aWx0U2hpZnRYRmlsdGVyLnN0YXJ0ID0gdGhpcy50aWx0U2hpZnRZRmlsdGVyLnN0YXJ0ID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVGhlIFkgdmFsdWUgdG8gZW5kIHRoZSBlZmZlY3QgYXQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5UaWx0U2hpZnRGaWx0ZXIjXG4gICAgICovXG4gICAgZW5kOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudGlsdFNoaWZ0WEZpbHRlci5lbmQ7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnRpbHRTaGlmdFhGaWx0ZXIuZW5kID0gdGhpcy50aWx0U2hpZnRZRmlsdGVyLmVuZCA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfVxufSk7XG4iLCJ2YXIgVGlsdFNoaWZ0QXhpc0ZpbHRlciA9IHJlcXVpcmUoJy4vVGlsdFNoaWZ0QXhpc0ZpbHRlcicpO1xuXG4vKipcbiAqIEBhdXRob3IgVmljbyBAdmljb2NvdGVhXG4gKiBvcmlnaW5hbCBmaWx0ZXIgaHR0cHM6Ly9naXRodWIuY29tL2V2YW53L2dsZnguanMvYmxvYi9tYXN0ZXIvc3JjL2ZpbHRlcnMvYmx1ci90aWx0c2hpZnQuanMgYnkgRXZhbiBXYWxsYWNlIDogaHR0cDovL21hZGVieWV2YW4uY29tL1xuICovXG5cbi8qKlxuICogQSBUaWx0U2hpZnRYRmlsdGVyLlxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5UaWx0U2hpZnRBeGlzRmlsdGVyXG4gKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzXG4gKi9cbmZ1bmN0aW9uIFRpbHRTaGlmdFhGaWx0ZXIoKVxue1xuICAgIFRpbHRTaGlmdEF4aXNGaWx0ZXIuY2FsbCh0aGlzKTtcbn1cblxuVGlsdFNoaWZ0WEZpbHRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFRpbHRTaGlmdEF4aXNGaWx0ZXIucHJvdG90eXBlKTtcblRpbHRTaGlmdFhGaWx0ZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gVGlsdFNoaWZ0WEZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gVGlsdFNoaWZ0WEZpbHRlcjtcblxuLyoqXG4gKiBVcGRhdGVzIHRoZSBmaWx0ZXIgZGVsdGEgdmFsdWVzLlxuICpcbiAqL1xuVGlsdFNoaWZ0WEZpbHRlci5wcm90b3R5cGUudXBkYXRlRGVsdGEgPSBmdW5jdGlvbiAoKVxue1xuICAgIHZhciBkeCA9IHRoaXMudW5pZm9ybXMuZW5kLnZhbHVlLnggLSB0aGlzLnVuaWZvcm1zLnN0YXJ0LnZhbHVlLng7XG4gICAgdmFyIGR5ID0gdGhpcy51bmlmb3Jtcy5lbmQudmFsdWUueSAtIHRoaXMudW5pZm9ybXMuc3RhcnQudmFsdWUueTtcbiAgICB2YXIgZCA9IE1hdGguc3FydChkeCAqIGR4ICsgZHkgKiBkeSk7XG5cbiAgICB0aGlzLnVuaWZvcm1zLmRlbHRhLnZhbHVlLnggPSBkeCAvIGQ7XG4gICAgdGhpcy51bmlmb3Jtcy5kZWx0YS52YWx1ZS55ID0gZHkgLyBkO1xufTtcbiIsInZhciBUaWx0U2hpZnRBeGlzRmlsdGVyID0gcmVxdWlyZSgnLi9UaWx0U2hpZnRBeGlzRmlsdGVyJyk7XG5cbi8qKlxuICogQGF1dGhvciBWaWNvIEB2aWNvY290ZWFcbiAqIG9yaWdpbmFsIGZpbHRlciBodHRwczovL2dpdGh1Yi5jb20vZXZhbncvZ2xmeC5qcy9ibG9iL21hc3Rlci9zcmMvZmlsdGVycy9ibHVyL3RpbHRzaGlmdC5qcyBieSBFdmFuIFdhbGxhY2UgOiBodHRwOi8vbWFkZWJ5ZXZhbi5jb20vXG4gKi9cblxuLyoqXG4gKiBBIFRpbHRTaGlmdFlGaWx0ZXIuXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLlRpbHRTaGlmdEF4aXNGaWx0ZXJcbiAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnNcbiAqL1xuZnVuY3Rpb24gVGlsdFNoaWZ0WUZpbHRlcigpXG57XG4gICAgVGlsdFNoaWZ0QXhpc0ZpbHRlci5jYWxsKHRoaXMpO1xufVxuXG5UaWx0U2hpZnRZRmlsdGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoVGlsdFNoaWZ0QXhpc0ZpbHRlci5wcm90b3R5cGUpO1xuVGlsdFNoaWZ0WUZpbHRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBUaWx0U2hpZnRZRmlsdGVyO1xubW9kdWxlLmV4cG9ydHMgPSBUaWx0U2hpZnRZRmlsdGVyO1xuXG4vKipcbiAqIFVwZGF0ZXMgdGhlIGZpbHRlciBkZWx0YSB2YWx1ZXMuXG4gKlxuICovXG5UaWx0U2hpZnRZRmlsdGVyLnByb3RvdHlwZS51cGRhdGVEZWx0YSA9IGZ1bmN0aW9uICgpXG57XG4gICAgdmFyIGR4ID0gdGhpcy51bmlmb3Jtcy5lbmQudmFsdWUueCAtIHRoaXMudW5pZm9ybXMuc3RhcnQudmFsdWUueDtcbiAgICB2YXIgZHkgPSB0aGlzLnVuaWZvcm1zLmVuZC52YWx1ZS55IC0gdGhpcy51bmlmb3Jtcy5zdGFydC52YWx1ZS55O1xuICAgIHZhciBkID0gTWF0aC5zcXJ0KGR4ICogZHggKyBkeSAqIGR5KTtcblxuICAgIHRoaXMudW5pZm9ybXMuZGVsdGEudmFsdWUueCA9IC1keSAvIGQ7XG4gICAgdGhpcy51bmlmb3Jtcy5kZWx0YS52YWx1ZS55ID0gZHggLyBkO1xufTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vLi4vY29yZScpO1xuLy8gQHNlZSBodHRwczovL2dpdGh1Yi5jb20vc3Vic3RhY2svYnJmcy9pc3N1ZXMvMjVcblxuXG4vKipcbiAqIFRoaXMgZmlsdGVyIGFwcGxpZXMgYSB0d2lzdCBlZmZlY3QgbWFraW5nIGRpc3BsYXkgb2JqZWN0cyBhcHBlYXIgdHdpc3RlZCBpbiB0aGUgZ2l2ZW4gZGlyZWN0aW9uLlxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5BYnN0cmFjdEZpbHRlclxuICogQG1lbWJlcm9mIFBJWEkuZmlsdGVyc1xuICovXG5mdW5jdGlvbiBUd2lzdEZpbHRlcigpXG57XG4gICAgY29yZS5BYnN0cmFjdEZpbHRlci5jYWxsKHRoaXMsXG4gICAgICAgIC8vIHZlcnRleCBzaGFkZXJcbiAgICAgICAgbnVsbCxcbiAgICAgICAgLy8gZnJhZ21lbnQgc2hhZGVyXG4gICAgICAgIFwicHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XFxuXFxudmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7XFxuXFxudW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXI7XFxudW5pZm9ybSBmbG9hdCByYWRpdXM7XFxudW5pZm9ybSBmbG9hdCBhbmdsZTtcXG51bmlmb3JtIHZlYzIgb2Zmc2V0O1xcblxcbnZvaWQgbWFpbih2b2lkKVxcbntcXG4gICB2ZWMyIGNvb3JkID0gdlRleHR1cmVDb29yZCAtIG9mZnNldDtcXG4gICBmbG9hdCBkaXN0ID0gbGVuZ3RoKGNvb3JkKTtcXG5cXG4gICBpZiAoZGlzdCA8IHJhZGl1cylcXG4gICB7XFxuICAgICAgIGZsb2F0IHJhdGlvID0gKHJhZGl1cyAtIGRpc3QpIC8gcmFkaXVzO1xcbiAgICAgICBmbG9hdCBhbmdsZU1vZCA9IHJhdGlvICogcmF0aW8gKiBhbmdsZTtcXG4gICAgICAgZmxvYXQgcyA9IHNpbihhbmdsZU1vZCk7XFxuICAgICAgIGZsb2F0IGMgPSBjb3MoYW5nbGVNb2QpO1xcbiAgICAgICBjb29yZCA9IHZlYzIoY29vcmQueCAqIGMgLSBjb29yZC55ICogcywgY29vcmQueCAqIHMgKyBjb29yZC55ICogYyk7XFxuICAgfVxcblxcbiAgIGdsX0ZyYWdDb2xvciA9IHRleHR1cmUyRCh1U2FtcGxlciwgY29vcmQrb2Zmc2V0KTtcXG59XFxuXCIsXG4gICAgICAgIC8vIGN1c3RvbSB1bmlmb3Jtc1xuICAgICAgICB7XG4gICAgICAgICAgICByYWRpdXM6ICAgICB7IHR5cGU6ICcxZicsIHZhbHVlOiAwLjUgfSxcbiAgICAgICAgICAgIGFuZ2xlOiAgICAgIHsgdHlwZTogJzFmJywgdmFsdWU6IDUgfSxcbiAgICAgICAgICAgIG9mZnNldDogICAgIHsgdHlwZTogJ3YyJywgdmFsdWU6IHsgeDogMC41LCB5OiAwLjUgfSB9XG4gICAgICAgIH1cbiAgICApO1xufVxuXG5Ud2lzdEZpbHRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuQWJzdHJhY3RGaWx0ZXIucHJvdG90eXBlKTtcblR3aXN0RmlsdGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFR3aXN0RmlsdGVyO1xubW9kdWxlLmV4cG9ydHMgPSBUd2lzdEZpbHRlcjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoVHdpc3RGaWx0ZXIucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogVGhpcyBwb2ludCBkZXNjcmliZXMgdGhlIHRoZSBvZmZzZXQgb2YgdGhlIHR3aXN0LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5Qb2ludH1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLlR3aXN0RmlsdGVyI1xuICAgICAqL1xuICAgIG9mZnNldDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVuaWZvcm1zLm9mZnNldC52YWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudW5pZm9ybXMub2Zmc2V0LnZhbHVlID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVGhpcyByYWRpdXMgb2YgdGhlIHR3aXN0LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuVHdpc3RGaWx0ZXIjXG4gICAgICovXG4gICAgcmFkaXVzOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudW5pZm9ybXMucmFkaXVzLnZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy5yYWRpdXMudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBUaGlzIGFuZ2xlIG9mIHRoZSB0d2lzdC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLlR3aXN0RmlsdGVyI1xuICAgICAqL1xuICAgIGFuZ2xlOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudW5pZm9ybXMuYW5nbGUudmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLmFuZ2xlLnZhbHVlID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG59KTtcbiIsIi8vIHJ1biB0aGUgcG9seWZpbGxzXG5yZXF1aXJlKCcuL3BvbHlmaWxsJyk7XG5cbnZhciBjb3JlID0gbW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL2NvcmUnKTtcblxuLy8gYWRkIGNvcmUgcGx1Z2lucy5cbmNvcmUuZXh0cmFzICAgICAgICAgPSByZXF1aXJlKCcuL2V4dHJhcycpO1xuY29yZS5maWx0ZXJzICAgICAgICA9IHJlcXVpcmUoJy4vZmlsdGVycycpO1xuY29yZS5pbnRlcmFjdGlvbiAgICA9IHJlcXVpcmUoJy4vaW50ZXJhY3Rpb24nKTtcbmNvcmUubG9hZGVycyAgICAgICAgPSByZXF1aXJlKCcuL2xvYWRlcnMnKTtcbmNvcmUubWVzaCAgICAgICAgICAgPSByZXF1aXJlKCcuL21lc2gnKTtcbmNvcmUuYWNjZXNzaWJpbGl0eSAgPSByZXF1aXJlKCcuL2FjY2Vzc2liaWxpdHknKTtcblxuLy8gZXhwb3J0IGEgcHJlbWFkZSBsb2FkZXIgaW5zdGFuY2Vcbi8qKlxuICogQSBwcmVtYWRlIGluc3RhbmNlIG9mIHRoZSBsb2FkZXIgdGhhdCBjYW4gYmUgdXNlZCB0byBsb2FkZXIgcmVzb3VyY2VzLlxuICpcbiAqIEBuYW1lIGxvYWRlclxuICogQG1lbWJlcm9mIFBJWElcbiAqIEBwcm9wZXJ0eSB7UElYSS5sb2FkZXJzLkxvYWRlcn1cbiAqL1xuY29yZS5sb2FkZXIgPSBuZXcgY29yZS5sb2FkZXJzLkxvYWRlcigpO1xuXG4vLyBtaXhpbiB0aGUgZGVwcmVjYXRpb24gZmVhdHVyZXMuXG5PYmplY3QuYXNzaWduKGNvcmUsIHJlcXVpcmUoJy4vZGVwcmVjYXRpb24nKSk7XG5cbi8vIEFsd2F5cyBleHBvcnQgcGl4aSBnbG9iYWxseS5cbmdsb2JhbC5QSVhJID0gY29yZTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vY29yZScpO1xuXG4vKipcbiAqIEhvbGRzIGFsbCBpbmZvcm1hdGlvbiByZWxhdGVkIHRvIGFuIEludGVyYWN0aW9uIGV2ZW50XG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSS5pbnRlcmFjdGlvblxuICovXG5mdW5jdGlvbiBJbnRlcmFjdGlvbkRhdGEoKVxue1xuICAgIC8qKlxuICAgICAqIFRoaXMgcG9pbnQgc3RvcmVzIHRoZSBnbG9iYWwgY29vcmRzIG9mIHdoZXJlIHRoZSB0b3VjaC9tb3VzZSBldmVudCBoYXBwZW5lZFxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5Qb2ludH1cbiAgICAgKi9cbiAgICB0aGlzLmdsb2JhbCA9IG5ldyBjb3JlLlBvaW50KCk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgdGFyZ2V0IFNwcml0ZSB0aGF0IHdhcyBpbnRlcmFjdGVkIHdpdGhcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuU3ByaXRlfVxuICAgICAqL1xuICAgIHRoaXMudGFyZ2V0ID0gbnVsbDtcblxuICAgIC8qKlxuICAgICAqIFdoZW4gcGFzc2VkIHRvIGFuIGV2ZW50IGhhbmRsZXIsIHRoaXMgd2lsbCBiZSB0aGUgb3JpZ2luYWwgRE9NIEV2ZW50IHRoYXQgd2FzIGNhcHR1cmVkXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtFdmVudH1cbiAgICAgKi9cbiAgICB0aGlzLm9yaWdpbmFsRXZlbnQgPSBudWxsO1xufVxuXG5JbnRlcmFjdGlvbkRhdGEucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gSW50ZXJhY3Rpb25EYXRhO1xubW9kdWxlLmV4cG9ydHMgPSBJbnRlcmFjdGlvbkRhdGE7XG5cbi8qKlxuICogVGhpcyB3aWxsIHJldHVybiB0aGUgbG9jYWwgY29vcmRpbmF0ZXMgb2YgdGhlIHNwZWNpZmllZCBkaXNwbGF5T2JqZWN0IGZvciB0aGlzIEludGVyYWN0aW9uRGF0YVxuICpcbiAqIEBwYXJhbSBkaXNwbGF5T2JqZWN0IHtQSVhJLkRpc3BsYXlPYmplY3R9IFRoZSBEaXNwbGF5T2JqZWN0IHRoYXQgeW91IHdvdWxkIGxpa2UgdGhlIGxvY2FsIGNvb3JkcyBvZmZcbiAqIEBwYXJhbSBbcG9pbnRdIHtQSVhJLlBvaW50fSBBIFBvaW50IG9iamVjdCBpbiB3aGljaCB0byBzdG9yZSB0aGUgdmFsdWUsIG9wdGlvbmFsIChvdGhlcndpc2Ugd2lsbCBjcmVhdGUgYSBuZXcgcG9pbnQpXG4gKiBAcGFyYW0gW2dsb2JhbFBvc10ge1BJWEkuUG9pbnR9IEEgUG9pbnQgb2JqZWN0IGNvbnRhaW5pbmcgeW91ciBjdXN0b20gZ2xvYmFsIGNvb3Jkcywgb3B0aW9uYWwgKG90aGVyd2lzZSB3aWxsIHVzZSB0aGUgY3VycmVudCBnbG9iYWwgY29vcmRzKVxuICogQHJldHVybiB7UElYSS5Qb2ludH0gQSBwb2ludCBjb250YWluaW5nIHRoZSBjb29yZGluYXRlcyBvZiB0aGUgSW50ZXJhY3Rpb25EYXRhIHBvc2l0aW9uIHJlbGF0aXZlIHRvIHRoZSBEaXNwbGF5T2JqZWN0XG4gKi9cbkludGVyYWN0aW9uRGF0YS5wcm90b3R5cGUuZ2V0TG9jYWxQb3NpdGlvbiA9IGZ1bmN0aW9uIChkaXNwbGF5T2JqZWN0LCBwb2ludCwgZ2xvYmFsUG9zKVxue1xuICAgIHJldHVybiBkaXNwbGF5T2JqZWN0LndvcmxkVHJhbnNmb3JtLmFwcGx5SW52ZXJzZShnbG9iYWxQb3MgfHwgdGhpcy5nbG9iYWwsIHBvaW50KTtcbn07XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uL2NvcmUnKSxcbiAgICBJbnRlcmFjdGlvbkRhdGEgPSByZXF1aXJlKCcuL0ludGVyYWN0aW9uRGF0YScpO1xuXG4vLyBNaXggaW50ZXJhY3RpdmVUYXJnZXQgaW50byBjb3JlLkRpc3BsYXlPYmplY3QucHJvdG90eXBlXG5PYmplY3QuYXNzaWduKFxuICAgIGNvcmUuRGlzcGxheU9iamVjdC5wcm90b3R5cGUsXG4gICAgcmVxdWlyZSgnLi9pbnRlcmFjdGl2ZVRhcmdldCcpXG4pO1xuXG4vKipcbiAqIFRoZSBpbnRlcmFjdGlvbiBtYW5hZ2VyIGRlYWxzIHdpdGggbW91c2UgYW5kIHRvdWNoIGV2ZW50cy4gQW55IERpc3BsYXlPYmplY3QgY2FuIGJlIGludGVyYWN0aXZlXG4gKiBpZiBpdHMgaW50ZXJhY3RpdmUgcGFyYW1ldGVyIGlzIHNldCB0byB0cnVlXG4gKiBUaGlzIG1hbmFnZXIgYWxzbyBzdXBwb3J0cyBtdWx0aXRvdWNoLlxuICpcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWEkuaW50ZXJhY3Rpb25cbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5DYW52YXNSZW5kZXJlcnxQSVhJLldlYkdMUmVuZGVyZXJ9IEEgcmVmZXJlbmNlIHRvIHRoZSBjdXJyZW50IHJlbmRlcmVyXG4gKiBAcGFyYW0gW29wdGlvbnNdIHtvYmplY3R9XG4gKiBAcGFyYW0gW29wdGlvbnMuYXV0b1ByZXZlbnREZWZhdWx0PXRydWVdIHtib29sZWFufSBTaG91bGQgdGhlIG1hbmFnZXIgYXV0b21hdGljYWxseSBwcmV2ZW50IGRlZmF1bHQgYnJvd3NlciBhY3Rpb25zLlxuICogQHBhcmFtIFtvcHRpb25zLmludGVyYWN0aW9uRnJlcXVlbmN5PTEwXSB7bnVtYmVyfSBGcmVxdWVuY3kgaW5jcmVhc2VzIHRoZSBpbnRlcmFjdGlvbiBldmVudHMgd2lsbCBiZSBjaGVja2VkLlxuICovXG5mdW5jdGlvbiBJbnRlcmFjdGlvbk1hbmFnZXIocmVuZGVyZXIsIG9wdGlvbnMpXG57XG4gICAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG5cbiAgICAvKipcbiAgICAgKiBUaGUgcmVuZGVyZXIgdGhpcyBpbnRlcmFjdGlvbiBtYW5hZ2VyIHdvcmtzIGZvci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuU3lzdGVtUmVuZGVyZXJ9XG4gICAgICovXG4gICAgdGhpcy5yZW5kZXJlciA9IHJlbmRlcmVyO1xuXG4gICAgLyoqXG4gICAgICogU2hvdWxkIGRlZmF1bHQgYnJvd3NlciBhY3Rpb25zIGF1dG9tYXRpY2FsbHkgYmUgcHJldmVudGVkLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKiBAZGVmYXVsdCB0cnVlXG4gICAgICovXG4gICAgdGhpcy5hdXRvUHJldmVudERlZmF1bHQgPSBvcHRpb25zLmF1dG9QcmV2ZW50RGVmYXVsdCAhPT0gdW5kZWZpbmVkID8gb3B0aW9ucy5hdXRvUHJldmVudERlZmF1bHQgOiB0cnVlO1xuXG4gICAgLyoqXG4gICAgICogQXMgdGhpcyBmcmVxdWVuY3kgaW5jcmVhc2VzIHRoZSBpbnRlcmFjdGlvbiBldmVudHMgd2lsbCBiZSBjaGVja2VkIG1vcmUgb2Z0ZW4uXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMTBcbiAgICAgKi9cbiAgICB0aGlzLmludGVyYWN0aW9uRnJlcXVlbmN5ID0gb3B0aW9ucy5pbnRlcmFjdGlvbkZyZXF1ZW5jeSB8fCAxMDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBtb3VzZSBkYXRhXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLmludGVyYWN0aW9uLkludGVyYWN0aW9uRGF0YX1cbiAgICAgKi9cbiAgICB0aGlzLm1vdXNlID0gbmV3IEludGVyYWN0aW9uRGF0YSgpO1xuXG4gICAgLyoqXG4gICAgICogQW4gZXZlbnQgZGF0YSBvYmplY3QgdG8gaGFuZGxlIGFsbCB0aGUgZXZlbnQgdHJhY2tpbmcvZGlzcGF0Y2hpbmdcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge29iamVjdH1cbiAgICAgKi9cbiAgICB0aGlzLmV2ZW50RGF0YSA9IHtcbiAgICAgICAgc3RvcHBlZDogZmFsc2UsXG4gICAgICAgIHRhcmdldDogbnVsbCxcbiAgICAgICAgdHlwZTogbnVsbCxcbiAgICAgICAgZGF0YTogdGhpcy5tb3VzZSxcbiAgICAgICAgc3RvcFByb3BhZ2F0aW9uOmZ1bmN0aW9uKCl7XG4gICAgICAgICAgICB0aGlzLnN0b3BwZWQgPSB0cnVlO1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIC8qKlxuICAgICAqIFRpbnkgbGl0dGxlIGludGVyYWN0aXZlRGF0YSBwb29sICFcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuaW50ZXJhY3Rpb24uSW50ZXJhY3Rpb25EYXRhW119XG4gICAgICovXG4gICAgdGhpcy5pbnRlcmFjdGl2ZURhdGFQb29sID0gW107XG5cbiAgICAvKipcbiAgICAgKiBUaGUgRE9NIGVsZW1lbnQgdG8gYmluZCB0by5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge0hUTUxFbGVtZW50fVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5pbnRlcmFjdGlvbkRPTUVsZW1lbnQgPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogSGF2ZSBldmVudHMgYmVlbiBhdHRhY2hlZCB0byB0aGUgZG9tIGVsZW1lbnQ/XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5ldmVudHNBZGRlZCA9IGZhbHNlO1xuXG4gICAgLy90aGlzIHdpbGwgbWFrZSBpdCBzbyB0aGF0IHlvdSBkb24ndCBoYXZlIHRvIGNhbGwgYmluZCBhbGwgdGhlIHRpbWVcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge0Z1bmN0aW9ufVxuICAgICAqL1xuICAgIHRoaXMub25Nb3VzZVVwID0gdGhpcy5vbk1vdXNlVXAuYmluZCh0aGlzKTtcbiAgICB0aGlzLnByb2Nlc3NNb3VzZVVwID0gdGhpcy5wcm9jZXNzTW91c2VVcC5iaW5kKCB0aGlzICk7XG5cblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge0Z1bmN0aW9ufVxuICAgICAqL1xuICAgIHRoaXMub25Nb3VzZURvd24gPSB0aGlzLm9uTW91c2VEb3duLmJpbmQodGhpcyk7XG4gICAgdGhpcy5wcm9jZXNzTW91c2VEb3duID0gdGhpcy5wcm9jZXNzTW91c2VEb3duLmJpbmQoIHRoaXMgKTtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge0Z1bmN0aW9ufVxuICAgICAqL1xuICAgIHRoaXMub25Nb3VzZU1vdmUgPSB0aGlzLm9uTW91c2VNb3ZlLmJpbmQoIHRoaXMgKTtcbiAgICB0aGlzLnByb2Nlc3NNb3VzZU1vdmUgPSB0aGlzLnByb2Nlc3NNb3VzZU1vdmUuYmluZCggdGhpcyApO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7RnVuY3Rpb259XG4gICAgICovXG4gICAgdGhpcy5vbk1vdXNlT3V0ID0gdGhpcy5vbk1vdXNlT3V0LmJpbmQodGhpcyk7XG4gICAgdGhpcy5wcm9jZXNzTW91c2VPdmVyT3V0ID0gdGhpcy5wcm9jZXNzTW91c2VPdmVyT3V0LmJpbmQoIHRoaXMgKTtcblxuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7RnVuY3Rpb259XG4gICAgICovXG4gICAgdGhpcy5vblRvdWNoU3RhcnQgPSB0aGlzLm9uVG91Y2hTdGFydC5iaW5kKHRoaXMpO1xuICAgIHRoaXMucHJvY2Vzc1RvdWNoU3RhcnQgPSB0aGlzLnByb2Nlc3NUb3VjaFN0YXJ0LmJpbmQodGhpcyk7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtGdW5jdGlvbn1cbiAgICAgKi9cbiAgICB0aGlzLm9uVG91Y2hFbmQgPSB0aGlzLm9uVG91Y2hFbmQuYmluZCh0aGlzKTtcbiAgICB0aGlzLnByb2Nlc3NUb3VjaEVuZCA9IHRoaXMucHJvY2Vzc1RvdWNoRW5kLmJpbmQodGhpcyk7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtGdW5jdGlvbn1cbiAgICAgKi9cbiAgICB0aGlzLm9uVG91Y2hNb3ZlID0gdGhpcy5vblRvdWNoTW92ZS5iaW5kKHRoaXMpO1xuICAgIHRoaXMucHJvY2Vzc1RvdWNoTW92ZSA9IHRoaXMucHJvY2Vzc1RvdWNoTW92ZS5iaW5kKHRoaXMpO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMubGFzdCA9IDA7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgY3NzIHN0eWxlIG9mIHRoZSBjdXJzb3IgdGhhdCBpcyBiZWluZyB1c2VkXG4gICAgICogQG1lbWJlciB7c3RyaW5nfVxuICAgICAqL1xuICAgIHRoaXMuY3VycmVudEN1cnNvclN0eWxlID0gJ2luaGVyaXQnO1xuXG4gICAgLyoqXG4gICAgICogSW50ZXJuYWwgY2FjaGVkIHZhclxuICAgICAqIEBtZW1iZXIge1BJWEkuUG9pbnR9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl90ZW1wUG9pbnQgPSBuZXcgY29yZS5Qb2ludCgpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGN1cnJlbnQgcmVzb2x1dGlvblxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLnJlc29sdXRpb24gPSAxO1xuXG4gICAgdGhpcy5zZXRUYXJnZXRFbGVtZW50KHRoaXMucmVuZGVyZXIudmlldywgdGhpcy5yZW5kZXJlci5yZXNvbHV0aW9uKTtcbn1cblxuSW50ZXJhY3Rpb25NYW5hZ2VyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IEludGVyYWN0aW9uTWFuYWdlcjtcbm1vZHVsZS5leHBvcnRzID0gSW50ZXJhY3Rpb25NYW5hZ2VyO1xuXG4vKipcbiAqIFNldHMgdGhlIERPTSBlbGVtZW50IHdoaWNoIHdpbGwgcmVjZWl2ZSBtb3VzZS90b3VjaCBldmVudHMuIFRoaXMgaXMgdXNlZnVsIGZvciB3aGVuIHlvdSBoYXZlXG4gKiBvdGhlciBET00gZWxlbWVudHMgb24gdG9wIG9mIHRoZSByZW5kZXJlcnMgQ2FudmFzIGVsZW1lbnQuIFdpdGggdGhpcyB5b3UnbGwgYmUgYmFsZSB0byBkZWxldGVnYXRlXG4gKiBhbm90aGVyIERPTSBlbGVtZW50IHRvIHJlY2VpdmUgdGhvc2UgZXZlbnRzLlxuICpcbiAqIEBwYXJhbSBlbGVtZW50IHtIVE1MRWxlbWVudH0gdGhlIERPTSBlbGVtZW50IHdoaWNoIHdpbGwgcmVjZWl2ZSBtb3VzZSBhbmQgdG91Y2ggZXZlbnRzLlxuICogQHBhcmFtIFtyZXNvbHV0aW9uPTFdIHtudW1iZXJ9IFRIZSByZXNvbHV0aW9uIG9mIHRoZSBuZXcgZWxlbWVudCAocmVsYXRpdmUgdG8gdGhlIGNhbnZhcykuXG4gKiBAcHJpdmF0ZVxuICovXG5JbnRlcmFjdGlvbk1hbmFnZXIucHJvdG90eXBlLnNldFRhcmdldEVsZW1lbnQgPSBmdW5jdGlvbiAoZWxlbWVudCwgcmVzb2x1dGlvbilcbntcbiAgICB0aGlzLnJlbW92ZUV2ZW50cygpO1xuXG4gICAgdGhpcy5pbnRlcmFjdGlvbkRPTUVsZW1lbnQgPSBlbGVtZW50O1xuXG4gICAgdGhpcy5yZXNvbHV0aW9uID0gcmVzb2x1dGlvbiB8fCAxO1xuXG4gICAgdGhpcy5hZGRFdmVudHMoKTtcbn07XG5cbi8qKlxuICogUmVnaXN0ZXJzIGFsbCB0aGUgRE9NIGV2ZW50c1xuICpcbiAqIEBwcml2YXRlXG4gKi9cbkludGVyYWN0aW9uTWFuYWdlci5wcm90b3R5cGUuYWRkRXZlbnRzID0gZnVuY3Rpb24gKClcbntcbiAgICBpZiAoIXRoaXMuaW50ZXJhY3Rpb25ET01FbGVtZW50KVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvcmUudGlja2VyLnNoYXJlZC5hZGQodGhpcy51cGRhdGUsIHRoaXMpO1xuXG4gICAgaWYgKHdpbmRvdy5uYXZpZ2F0b3IubXNQb2ludGVyRW5hYmxlZClcbiAgICB7XG4gICAgICAgIHRoaXMuaW50ZXJhY3Rpb25ET01FbGVtZW50LnN0eWxlWyctbXMtY29udGVudC16b29taW5nJ10gPSAnbm9uZSc7XG4gICAgICAgIHRoaXMuaW50ZXJhY3Rpb25ET01FbGVtZW50LnN0eWxlWyctbXMtdG91Y2gtYWN0aW9uJ10gPSAnbm9uZSc7XG4gICAgfVxuXG4gICAgd2luZG93LmRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlbW92ZScsICAgIHRoaXMub25Nb3VzZU1vdmUsIHRydWUpO1xuICAgIHRoaXMuaW50ZXJhY3Rpb25ET01FbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlZG93bicsICAgIHRoaXMub25Nb3VzZURvd24sIHRydWUpO1xuICAgIHRoaXMuaW50ZXJhY3Rpb25ET01FbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlb3V0JywgICAgIHRoaXMub25Nb3VzZU91dCwgdHJ1ZSk7XG5cbiAgICB0aGlzLmludGVyYWN0aW9uRE9NRWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCd0b3VjaHN0YXJ0JywgICB0aGlzLm9uVG91Y2hTdGFydCwgdHJ1ZSk7XG4gICAgdGhpcy5pbnRlcmFjdGlvbkRPTUVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigndG91Y2hlbmQnLCAgICAgdGhpcy5vblRvdWNoRW5kLCB0cnVlKTtcbiAgICB0aGlzLmludGVyYWN0aW9uRE9NRWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCd0b3VjaG1vdmUnLCAgICB0aGlzLm9uVG91Y2hNb3ZlLCB0cnVlKTtcblxuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdtb3VzZXVwJywgIHRoaXMub25Nb3VzZVVwLCB0cnVlKTtcblxuICAgIHRoaXMuZXZlbnRzQWRkZWQgPSB0cnVlO1xufTtcblxuLyoqXG4gKiBSZW1vdmVzIGFsbCB0aGUgRE9NIGV2ZW50cyB0aGF0IHdlcmUgcHJldmlvdXNseSByZWdpc3RlcmVkXG4gKlxuICogQHByaXZhdGVcbiAqL1xuSW50ZXJhY3Rpb25NYW5hZ2VyLnByb3RvdHlwZS5yZW1vdmVFdmVudHMgPSBmdW5jdGlvbiAoKVxue1xuICAgIGlmICghdGhpcy5pbnRlcmFjdGlvbkRPTUVsZW1lbnQpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29yZS50aWNrZXIuc2hhcmVkLnJlbW92ZSh0aGlzLnVwZGF0ZSk7XG5cbiAgICBpZiAod2luZG93Lm5hdmlnYXRvci5tc1BvaW50ZXJFbmFibGVkKVxuICAgIHtcbiAgICAgICAgdGhpcy5pbnRlcmFjdGlvbkRPTUVsZW1lbnQuc3R5bGVbJy1tcy1jb250ZW50LXpvb21pbmcnXSA9ICcnO1xuICAgICAgICB0aGlzLmludGVyYWN0aW9uRE9NRWxlbWVudC5zdHlsZVsnLW1zLXRvdWNoLWFjdGlvbiddID0gJyc7XG4gICAgfVxuXG4gICAgd2luZG93LmRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21vdXNlbW92ZScsIHRoaXMub25Nb3VzZU1vdmUsIHRydWUpO1xuICAgIHRoaXMuaW50ZXJhY3Rpb25ET01FbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21vdXNlZG93bicsIHRoaXMub25Nb3VzZURvd24sIHRydWUpO1xuICAgIHRoaXMuaW50ZXJhY3Rpb25ET01FbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21vdXNlb3V0JywgIHRoaXMub25Nb3VzZU91dCwgdHJ1ZSk7XG5cbiAgICB0aGlzLmludGVyYWN0aW9uRE9NRWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCd0b3VjaHN0YXJ0JywgdGhpcy5vblRvdWNoU3RhcnQsIHRydWUpO1xuICAgIHRoaXMuaW50ZXJhY3Rpb25ET01FbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3RvdWNoZW5kJywgIHRoaXMub25Ub3VjaEVuZCwgdHJ1ZSk7XG4gICAgdGhpcy5pbnRlcmFjdGlvbkRPTUVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigndG91Y2htb3ZlJywgdGhpcy5vblRvdWNoTW92ZSwgdHJ1ZSk7XG5cbiAgICB0aGlzLmludGVyYWN0aW9uRE9NRWxlbWVudCA9IG51bGw7XG5cbiAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcignbW91c2V1cCcsICB0aGlzLm9uTW91c2VVcCwgdHJ1ZSk7XG5cbiAgICB0aGlzLmV2ZW50c0FkZGVkID0gZmFsc2U7XG59O1xuXG4vKipcbiAqIFVwZGF0ZXMgdGhlIHN0YXRlIG9mIGludGVyYWN0aXZlIG9iamVjdHMuXG4gKiBJbnZva2VkIGJ5IGEgdGhyb3R0bGVkIHRpY2tlciB1cGRhdGUgZnJvbVxuICoge0BsaW5rIFBJWEkudGlja2VyLnNoYXJlZH0uXG4gKlxuICogQHBhcmFtIGRlbHRhVGltZSB7bnVtYmVyfVxuICovXG5JbnRlcmFjdGlvbk1hbmFnZXIucHJvdG90eXBlLnVwZGF0ZSA9IGZ1bmN0aW9uIChkZWx0YVRpbWUpXG57XG4gICAgdGhpcy5fZGVsdGFUaW1lICs9IGRlbHRhVGltZTtcblxuICAgIGlmICh0aGlzLl9kZWx0YVRpbWUgPCB0aGlzLmludGVyYWN0aW9uRnJlcXVlbmN5KVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuX2RlbHRhVGltZSA9IDA7XG5cbiAgICBpZiAoIXRoaXMuaW50ZXJhY3Rpb25ET01FbGVtZW50KVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIGlmIHRoZSB1c2VyIG1vdmUgdGhlIG1vdXNlIHRoaXMgY2hlY2sgaGFzIGFscmVhZHkgYmVlbiBkZm9uZSB1c2luZyB0aGUgbW91c2UgbW92ZSFcbiAgICBpZih0aGlzLmRpZE1vdmUpXG4gICAge1xuICAgICAgICB0aGlzLmRpZE1vdmUgPSBmYWxzZTtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuY3Vyc29yID0gJ2luaGVyaXQnO1xuXG4gICAgdGhpcy5wcm9jZXNzSW50ZXJhY3RpdmUodGhpcy5tb3VzZS5nbG9iYWwsIHRoaXMucmVuZGVyZXIuX2xhc3RPYmplY3RSZW5kZXJlZCwgdGhpcy5wcm9jZXNzTW91c2VPdmVyT3V0LCB0cnVlICk7XG5cbiAgICBpZiAodGhpcy5jdXJyZW50Q3Vyc29yU3R5bGUgIT09IHRoaXMuY3Vyc29yKVxuICAgIHtcbiAgICAgICAgdGhpcy5jdXJyZW50Q3Vyc29yU3R5bGUgPSB0aGlzLmN1cnNvcjtcbiAgICAgICAgdGhpcy5pbnRlcmFjdGlvbkRPTUVsZW1lbnQuc3R5bGUuY3Vyc29yID0gdGhpcy5jdXJzb3I7XG4gICAgfVxuXG4gICAgLy9UT0RPXG59O1xuXG4vKipcbiAqIERpc3BhdGNoZXMgYW4gZXZlbnQgb24gdGhlIGRpc3BsYXkgb2JqZWN0IHRoYXQgd2FzIGludGVyYWN0ZWQgd2l0aFxuICpcbiAqIEBwYXJhbSBkaXNwbGF5T2JqZWN0IHtQSVhJLkNvbnRhaW5lcnxQSVhJLlNwcml0ZXxQSVhJLmV4dHJhcy5UaWxpbmdTcHJpdGV9IHRoZSBkaXNwbGF5IG9iamVjdCBpbiBxdWVzdGlvblxuICogQHBhcmFtIGV2ZW50U3RyaW5nIHtzdHJpbmd9IHRoZSBuYW1lIG9mIHRoZSBldmVudCAoZS5nLCBtb3VzZWRvd24pXG4gKiBAcGFyYW0gZXZlbnREYXRhIHtvYmplY3R9IHRoZSBldmVudCBkYXRhIG9iamVjdFxuICogQHByaXZhdGVcbiAqL1xuSW50ZXJhY3Rpb25NYW5hZ2VyLnByb3RvdHlwZS5kaXNwYXRjaEV2ZW50ID0gZnVuY3Rpb24gKCBkaXNwbGF5T2JqZWN0LCBldmVudFN0cmluZywgZXZlbnREYXRhIClcbntcbiAgICBpZighZXZlbnREYXRhLnN0b3BwZWQpXG4gICAge1xuICAgICAgICBldmVudERhdGEudGFyZ2V0ID0gZGlzcGxheU9iamVjdDtcbiAgICAgICAgZXZlbnREYXRhLnR5cGUgPSBldmVudFN0cmluZztcblxuICAgICAgICBkaXNwbGF5T2JqZWN0LmVtaXQoIGV2ZW50U3RyaW5nLCBldmVudERhdGEgKTtcblxuICAgICAgICBpZiggZGlzcGxheU9iamVjdFtldmVudFN0cmluZ10gKVxuICAgICAgICB7XG4gICAgICAgICAgICBkaXNwbGF5T2JqZWN0W2V2ZW50U3RyaW5nXSggZXZlbnREYXRhICk7XG4gICAgICAgIH1cbiAgICB9XG59O1xuXG4vKipcbiAqIE1hcHMgeCBhbmQgeSBjb29yZHMgZnJvbSBhIERPTSBvYmplY3QgYW5kIG1hcHMgdGhlbSBjb3JyZWN0bHkgdG8gdGhlIHBpeGkgdmlldy4gVGhlIHJlc3VsdGluZyB2YWx1ZSBpcyBzdG9yZWQgaW4gdGhlIHBvaW50LlxuICogVGhpcyB0YWtlcyBpbnRvIGFjY291bnQgdGhlIGZhY3QgdGhhdCB0aGUgRE9NIGVsZW1lbnQgY291bGQgYmUgc2NhbGVkIGFuZCBwb3NpdGlvbmVkIGFueXdoZXJlIG9uIHRoZSBzY3JlZW4uXG4gKlxuICogQHBhcmFtICB7UElYSS5Qb2ludH0gcG9pbnQgdGhlIHBvaW50IHRoYXQgdGhlIHJlc3VsdCB3aWxsIGJlIHN0b3JlZCBpblxuICogQHBhcmFtICB7bnVtYmVyfSB4ICAgICB0aGUgeCBjb29yZCBvZiB0aGUgcG9zaXRpb24gdG8gbWFwXG4gKiBAcGFyYW0gIHtudW1iZXJ9IHkgICAgIHRoZSB5IGNvb3JkIG9mIHRoZSBwb3NpdGlvbiB0byBtYXBcbiAqL1xuSW50ZXJhY3Rpb25NYW5hZ2VyLnByb3RvdHlwZS5tYXBQb3NpdGlvblRvUG9pbnQgPSBmdW5jdGlvbiAoIHBvaW50LCB4LCB5IClcbntcbiAgICB2YXIgcmVjdCA9IHRoaXMuaW50ZXJhY3Rpb25ET01FbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgIHBvaW50LnggPSAoICggeCAtIHJlY3QubGVmdCApICogKHRoaXMuaW50ZXJhY3Rpb25ET01FbGVtZW50LndpZHRoICAvIHJlY3Qud2lkdGggICkgKSAvIHRoaXMucmVzb2x1dGlvbjtcbiAgICBwb2ludC55ID0gKCAoIHkgLSByZWN0LnRvcCAgKSAqICh0aGlzLmludGVyYWN0aW9uRE9NRWxlbWVudC5oZWlnaHQgLyByZWN0LmhlaWdodCApICkgLyB0aGlzLnJlc29sdXRpb247XG59O1xuXG4vKipcbiAqIFRoaXMgZnVuY3Rpb24gaXMgcHJvdmlkZXMgYSBuZWF0IHdheSBvZiBjcmF3bGluZyB0aHJvdWdoIHRoZSBzY2VuZSBncmFwaCBhbmQgcnVubmluZyBhIHNwZWNpZmllZCBmdW5jdGlvbiBvbiBhbGwgaW50ZXJhY3RpdmUgb2JqZWN0cyBpdCBmaW5kcy5cbiAqIEl0IHdpbGwgYWxzbyB0YWtlIGNhcmUgb2YgaGl0IHRlc3RpbmcgdGhlIGludGVyYWN0aXZlIG9iamVjdHMgYW5kIHBhc3NlcyB0aGUgaGl0IGFjcm9zcyBpbiB0aGUgZnVuY3Rpb24uXG4gKlxuICogQHBhcmFtICB7UElYSS5Qb2ludH0gcG9pbnQgdGhlIHBvaW50IHRoYXQgaXMgdGVzdGVkIGZvciBjb2xsaXNpb25cbiAqIEBwYXJhbSAge1BJWEkuQ29udGFpbmVyfFBJWEkuU3ByaXRlfFBJWEkuZXh0cmFzLlRpbGluZ1Nwcml0ZX0gZGlzcGxheU9iamVjdCB0aGUgZGlzcGxheU9iamVjdCB0aGF0IHdpbGwgYmUgaGl0IHRlc3QgKHJlY3VyY3Npdmx5IGNyYXdscyBpdHMgY2hpbGRyZW4pXG4gKiBAcGFyYW0gIHtGdW5jdGlvbn0gZnVuYyB0aGUgZnVuY3Rpb24gdGhhdCB3aWxsIGJlIGNhbGxlZCBvbiBlYWNoIGludGVyYWN0aXZlIG9iamVjdC4gVGhlIGRpc3BsYXlPYmplY3QgYW5kIGhpdCB3aWxsIGJlIHBhc3NlZCB0byB0aGUgZnVuY3Rpb25cbiAqIEBwYXJhbSAge2Jvb2xlYW59IGhpdFRlc3QgdGhpcyBpbmRpY2F0ZXMgaWYgdGhlIG9iamVjdHMgaW5zaWRlIHNob3VsZCBiZSBoaXQgdGVzdCBhZ2FpbnN0IHRoZSBwb2ludFxuICogQHJldHVybiB7Ym9vbGVhbn0gcmV0dXJucyB0cnVlIGlmIHRoZSBkaXNwbGF5T2JqZWN0IGhpdCB0aGUgcG9pbnRcbiAqL1xuSW50ZXJhY3Rpb25NYW5hZ2VyLnByb3RvdHlwZS5wcm9jZXNzSW50ZXJhY3RpdmUgPSBmdW5jdGlvbiAocG9pbnQsIGRpc3BsYXlPYmplY3QsIGZ1bmMsIGhpdFRlc3QsIGludGVyYWN0aXZlKVxue1xuICAgIGlmKCFkaXNwbGF5T2JqZWN0IHx8ICFkaXNwbGF5T2JqZWN0LnZpc2libGUpXG4gICAge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgLy8gVG9vayBhIGxpdHRsZSB3aGlsZSB0byByZXdvcmsgdGhpcyBmdW5jdGlvbiBjb3JyZWN0bHkhIEJ1dCBub3cgaXQgaXMgZG9uZSBhbmQgbmljZSBhbmQgb3B0aW1pc2VkLiBeX15cbiAgICAvLyBcbiAgICAvLyBUaGlzIGZ1bmN0aW9uIHdpbGwgbm93IGxvb3AgdGhyb3VnaCBhbGwgb2JqZWN0cyBhbmQgdGhlbiBvbmx5IGhpdCB0ZXN0IHRoZSBvYmplY3RzIGl0IEhBUyB0bywgbm90IGFsbCBvZiB0aGVtLiBNVUNIIGZhc3Rlci4uXG4gICAgLy8gQW4gb2JqZWN0IHdpbGwgYmUgaGl0IHRlc3QgaWYgdGhlIGZvbGxvd2luZyBpcyB0cnVlOlxuICAgIC8vIFxuICAgIC8vIDE6IEl0IGlzIGludGVyYWN0aXZlLlxuICAgIC8vIDI6IEl0IGJlbG9uZ3MgdG8gYSBwYXJlbnQgdGhhdCBpcyBpbnRlcmFjdGl2ZSBBTkQgb25lIG9mIHRoZSBwYXJlbnRzIGNoaWxkcmVuIGhhdmUgbm90IGFscmVhZHkgYmVlbiBoaXQuXG4gICAgLy8gXG4gICAgLy8gQXMgYW5vdGhlciBsaXR0bGUgb3B0aW1pc2F0aW9uIG9uY2UgYW4gaW50ZXJhY3RpdmUgb2JqZWN0IGhhcyBiZWVuIGhpdCB3ZSBjYW4gY2Fycnkgb24gdGhyb3VnaCB0aGUgc2NlbmVncmFwaCwgYnV0IHdlIGtub3cgdGhhdCB0aGVyZSB3aWxsIGJlIG5vIG1vcmUgaGl0cyEgU28gd2UgY2FuIGF2b2lkIGV4dHJhIGhpdCB0ZXN0c1xuICAgIC8vIEEgZmluYWwgb3B0aW1pc2F0aW9uIGlzIHRoYXQgYW4gb2JqZWN0IGlzIG5vdCBoaXQgdGVzdCBkaXJlY3RseSBpZiBhIGNoaWxkIGhhcyBhbHJlYWR5IGJlZW4gaGl0LlxuICAgIFxuICAgIHZhciBoaXQgPSBmYWxzZSxcbiAgICAgICAgaW50ZXJhY3RpdmVQYXJlbnQgPSBpbnRlcmFjdGl2ZSA9IGRpc3BsYXlPYmplY3QuaW50ZXJhY3RpdmUgfHwgaW50ZXJhY3RpdmU7XG5cbiAgICAvLyBpZiB0aGUgZGlzcGxheW9iamVjdCBoYXMgYSBoaXRBcmVhLCB0aGVuIGl0IGRvZXMgbm90IG5lZWQgdG8gaGl0VGVzdCBjaGlsZHJlbi5cbiAgICBpZihkaXNwbGF5T2JqZWN0LmhpdEFyZWEpXG4gICAge1xuICAgICAgICBpbnRlcmFjdGl2ZVBhcmVudCA9IGZhbHNlO1xuICAgIH1cblxuICAgIC8vICoqIEZSRUUgVElQICoqISBJZiBhbiBvYmplY3QgaXMgbm90IGludGVyYWN0dGl2ZSBvciBoYXMgbm8gYnV0dG9ucyBpbiBpdCAoc3VjaCBhcyBhIGdhbWUgc2NlbmUhKSBzZXQgaW50ZXJhY3RpdmVDaGlsZHJlbiB0byBmYWxzZSBmb3IgdGhhdCBkaXNwbGF5T2JqZWN0LlxuICAgIC8vIFRoaXMgd2lsbCBhbGxvdyBwaXhpIHRvIGNvbXBsZXRseSBpZ25vcmUgYW5kIGJ5cGFzcyBjaGVja2luZyB0aGUgZGlzcGxheU9iamVjdHMgY2hpbGRyZW4uXG4gICAgaWYoZGlzcGxheU9iamVjdC5pbnRlcmFjdGl2ZUNoaWxkcmVuKVxuICAgIHsgICAgICAgXG4gICAgICAgIHZhciBjaGlsZHJlbiA9IGRpc3BsYXlPYmplY3QuY2hpbGRyZW47XG4gICAgICAgIFxuICAgICAgICBmb3IgKHZhciBpID0gY2hpbGRyZW4ubGVuZ3RoLTE7IGkgPj0gMDsgaS0tKVxuICAgICAgICB7XG4gICAgICAgICAgICAvLyB0aW1lIHRvIGdldCByZWN1cnNpdmUuLiBpZiB0aGlzIGZ1bmN0aW9uIHdpbGwgcmV0dXJuIGlmIHNvbXRoaW5nIGlzIGhpdC4uXG4gICAgICAgICAgICBpZiggdGhpcy5wcm9jZXNzSW50ZXJhY3RpdmUocG9pbnQsIGNoaWxkcmVuW2ldLCBmdW5jLCBoaXRUZXN0LCBpbnRlcmFjdGl2ZVBhcmVudCkgKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGhpdCA9IHRydWU7XG5cbiAgICAgICAgICAgICAgICAvLyB3ZSBubyBsb25nZXIgbmVlZCB0byBoaXQgdGVzdCBhbnkgbW9yZSBvYmplY3RzIGluIHRoaXMgY29udGFpbmVyIGFzIHdlIHdlIG5vdyBrbm93IHRoZSBwYXJlbnQgaGFzIGJlZW4gaGl0XG4gICAgICAgICAgICAgICAgaW50ZXJhY3RpdmVQYXJlbnQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAvLyBJZiB0aGUgY2hpbGQgaXMgaW50ZXJhY3RpdmUgLCB0aGF0IG1lYW5zIHRoYXQgdGhlIG9iamVjdCBoaXQgd2FzIGFjdHVhbGx5IGludGVyYWN0aXZlIGFuZCBub3QganVzdCB0aGUgY2hpbGQgb2YgYW4gaW50ZXJhY3RpdmUgb2JqZWN0LiBcbiAgICAgICAgICAgICAgICAvLyBUaGlzIG1lYW5zIHdlIG5vIGxvbmdlciBuZWVkIHRvIGhpdCB0ZXN0IGFueXRoaW5nIGVsc2UuIFdlIHN0aWxsIG5lZWQgdG8gcnVuIHRocm91Z2ggYWxsIG9iamVjdHMsIGJ1dCB3ZSBkb24ndCBuZWVkIHRvIHBlcmZvcm0gYW55IGhpdCB0ZXN0cy5cbiAgICAgICAgICAgICAgICBpZihjaGlsZHJlbltpXS5pbnRlcmFjdGl2ZSlcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIGhpdFRlc3QgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBubyBwb2ludCBydW5uaW5nIHRoaXMgaWYgdGhlIGl0ZW0gaXMgbm90IGludGVyYWN0aXZlIG9yIGRvZXMgbm90IGhhdmUgYW4gaW50ZXJhY3RpdmUgcGFyZW50LlxuICAgIGlmKGludGVyYWN0aXZlKVxuICAgIHtcbiAgICAgICAgLy8gaWYgd2UgYXJlIGhpdCB0ZXN0aW5nIChhcyBpbiB3ZSBoYXZlIG5vIGhpdCBhbnkgb2JqZWN0cyB5ZXQpXG4gICAgICAgIC8vIFdlIGFsc28gZG9uJ3QgbmVlZCB0byB3b3JyeSBhYm91dCBoaXQgdGVzdGluZyBpZiBvbmNlIG9mIHRoZSBkaXNwbGF5T2JqZWN0cyBjaGlsZHJlbiBoYXMgYWxyZWFkeSBiZWVuIGhpdCFcbiAgICAgICAgaWYoaGl0VGVzdCAmJiAhaGl0KVxuICAgICAgICB7ICBcbiAgICAgICAgICAgIGlmKGRpc3BsYXlPYmplY3QuaGl0QXJlYSlcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBkaXNwbGF5T2JqZWN0LndvcmxkVHJhbnNmb3JtLmFwcGx5SW52ZXJzZShwb2ludCwgIHRoaXMuX3RlbXBQb2ludCk7XG4gICAgICAgICAgICAgICAgaGl0ID0gZGlzcGxheU9iamVjdC5oaXRBcmVhLmNvbnRhaW5zKCB0aGlzLl90ZW1wUG9pbnQueCwgdGhpcy5fdGVtcFBvaW50LnkgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYoZGlzcGxheU9iamVjdC5jb250YWluc1BvaW50KVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGhpdCA9IGRpc3BsYXlPYmplY3QuY29udGFpbnNQb2ludChwb2ludCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZihkaXNwbGF5T2JqZWN0LmludGVyYWN0aXZlKVxuICAgICAgICB7XG4gICAgICAgICAgICBmdW5jKGRpc3BsYXlPYmplY3QsIGhpdCk7IFxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGhpdDtcbiAgXG59O1xuXG5cbi8qKlxuICogSXMgY2FsbGVkIHdoZW4gdGhlIG1vdXNlIGJ1dHRvbiBpcyBwcmVzc2VkIGRvd24gb24gdGhlIHJlbmRlcmVyIGVsZW1lbnRcbiAqXG4gKiBAcGFyYW0gZXZlbnQge0V2ZW50fSBUaGUgRE9NIGV2ZW50IG9mIGEgbW91c2UgYnV0dG9uIGJlaW5nIHByZXNzZWQgZG93blxuICogQHByaXZhdGVcbiAqL1xuSW50ZXJhY3Rpb25NYW5hZ2VyLnByb3RvdHlwZS5vbk1vdXNlRG93biA9IGZ1bmN0aW9uIChldmVudClcbntcbiAgICB0aGlzLm1vdXNlLm9yaWdpbmFsRXZlbnQgPSBldmVudDtcbiAgICB0aGlzLmV2ZW50RGF0YS5kYXRhID0gdGhpcy5tb3VzZTtcbiAgICB0aGlzLmV2ZW50RGF0YS5zdG9wcGVkID0gZmFsc2U7XG5cbiAgICAvLyBVcGRhdGUgaW50ZXJuYWwgbW91c2UgcmVmZXJlbmNlXG4gICAgdGhpcy5tYXBQb3NpdGlvblRvUG9pbnQoIHRoaXMubW91c2UuZ2xvYmFsLCBldmVudC5jbGllbnRYLCBldmVudC5jbGllbnRZKTtcblxuICAgIGlmICh0aGlzLmF1dG9QcmV2ZW50RGVmYXVsdClcbiAgICB7XG4gICAgICAgIHRoaXMubW91c2Uub3JpZ2luYWxFdmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIH1cblxuICAgIHRoaXMucHJvY2Vzc0ludGVyYWN0aXZlKHRoaXMubW91c2UuZ2xvYmFsLCB0aGlzLnJlbmRlcmVyLl9sYXN0T2JqZWN0UmVuZGVyZWQsIHRoaXMucHJvY2Vzc01vdXNlRG93biwgdHJ1ZSApO1xufTtcblxuLyoqXG4gKiBQcm9jZXNzZXMgdGhlIHJlc3VsdCBvZiB0aGUgbW91c2UgZG93biBjaGVjayBhbmQgZGlzcGF0Y2hlcyB0aGUgZXZlbnQgaWYgbmVlZCBiZVxuICpcbiAqIEBwYXJhbSBkaXNwbGF5T2JqZWN0IHtQSVhJLkNvbnRhaW5lcnxQSVhJLlNwcml0ZXxQSVhJLmV4dHJhcy5UaWxpbmdTcHJpdGV9IFRoZSBkaXNwbGF5IG9iamVjdCB0aGF0IHdhcyB0ZXN0ZWRcbiAqIEBwYXJhbSBoaXQge2Jvb2xlYW59IHRoZSByZXN1bHQgb2YgdGhlIGhpdCB0ZXN0IG9uIHRoZSBkaXNwYXkgb2JqZWN0XG4gKiBAcHJpdmF0ZVxuICovXG5JbnRlcmFjdGlvbk1hbmFnZXIucHJvdG90eXBlLnByb2Nlc3NNb3VzZURvd24gPSBmdW5jdGlvbiAoIGRpc3BsYXlPYmplY3QsIGhpdCApXG57XG4gICAgdmFyIGUgPSB0aGlzLm1vdXNlLm9yaWdpbmFsRXZlbnQ7XG4gICAgXG4gICAgdmFyIGlzUmlnaHRCdXR0b24gPSBlLmJ1dHRvbiA9PT0gMiB8fCBlLndoaWNoID09PSAzO1xuXG4gICAgaWYoaGl0KVxuICAgIHtcbiAgICAgICAgZGlzcGxheU9iamVjdFsgaXNSaWdodEJ1dHRvbiA/ICdfaXNSaWdodERvd24nIDogJ19pc0xlZnREb3duJyBdID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50KCBkaXNwbGF5T2JqZWN0LCBpc1JpZ2h0QnV0dG9uID8gJ3JpZ2h0ZG93bicgOiAnbW91c2Vkb3duJywgdGhpcy5ldmVudERhdGEgKTtcbiAgICB9XG59O1xuXG5cblxuLyoqXG4gKiBJcyBjYWxsZWQgd2hlbiB0aGUgbW91c2UgYnV0dG9uIGlzIHJlbGVhc2VkIG9uIHRoZSByZW5kZXJlciBlbGVtZW50XG4gKlxuICogQHBhcmFtIGV2ZW50IHtFdmVudH0gVGhlIERPTSBldmVudCBvZiBhIG1vdXNlIGJ1dHRvbiBiZWluZyByZWxlYXNlZFxuICogQHByaXZhdGVcbiAqL1xuSW50ZXJhY3Rpb25NYW5hZ2VyLnByb3RvdHlwZS5vbk1vdXNlVXAgPSBmdW5jdGlvbiAoZXZlbnQpXG57XG4gICAgdGhpcy5tb3VzZS5vcmlnaW5hbEV2ZW50ID0gZXZlbnQ7XG4gICAgdGhpcy5ldmVudERhdGEuZGF0YSA9IHRoaXMubW91c2U7XG4gICAgdGhpcy5ldmVudERhdGEuc3RvcHBlZCA9IGZhbHNlO1xuXG4gICAgLy8gVXBkYXRlIGludGVybmFsIG1vdXNlIHJlZmVyZW5jZVxuICAgIHRoaXMubWFwUG9zaXRpb25Ub1BvaW50KCB0aGlzLm1vdXNlLmdsb2JhbCwgZXZlbnQuY2xpZW50WCwgZXZlbnQuY2xpZW50WSk7XG5cbiAgICB0aGlzLnByb2Nlc3NJbnRlcmFjdGl2ZSh0aGlzLm1vdXNlLmdsb2JhbCwgdGhpcy5yZW5kZXJlci5fbGFzdE9iamVjdFJlbmRlcmVkLCB0aGlzLnByb2Nlc3NNb3VzZVVwLCB0cnVlICk7XG59O1xuXG4vKipcbiAqIFByb2Nlc3NlcyB0aGUgcmVzdWx0IG9mIHRoZSBtb3VzZSB1cCBjaGVjayBhbmQgZGlzcGF0Y2hlcyB0aGUgZXZlbnQgaWYgbmVlZCBiZVxuICpcbiAqIEBwYXJhbSBkaXNwbGF5T2JqZWN0IHtQSVhJLkNvbnRhaW5lcnxQSVhJLlNwcml0ZXxQSVhJLmV4dHJhcy5UaWxpbmdTcHJpdGV9IFRoZSBkaXNwbGF5IG9iamVjdCB0aGF0IHdhcyB0ZXN0ZWRcbiAqIEBwYXJhbSBoaXQge2Jvb2xlYW59IHRoZSByZXN1bHQgb2YgdGhlIGhpdCB0ZXN0IG9uIHRoZSBkaXNwbGF5IG9iamVjdFxuICogQHByaXZhdGVcbiAqL1xuSW50ZXJhY3Rpb25NYW5hZ2VyLnByb3RvdHlwZS5wcm9jZXNzTW91c2VVcCA9IGZ1bmN0aW9uICggZGlzcGxheU9iamVjdCwgaGl0IClcbntcbiAgICB2YXIgZSA9IHRoaXMubW91c2Uub3JpZ2luYWxFdmVudDtcblxuICAgIHZhciBpc1JpZ2h0QnV0dG9uID0gZS5idXR0b24gPT09IDIgfHwgZS53aGljaCA9PT0gMztcbiAgICB2YXIgaXNEb3duID0gIGlzUmlnaHRCdXR0b24gPyAnX2lzUmlnaHREb3duJyA6ICdfaXNMZWZ0RG93bic7XG5cbiAgICBpZihoaXQpXG4gICAge1xuICAgICAgICB0aGlzLmRpc3BhdGNoRXZlbnQoIGRpc3BsYXlPYmplY3QsIGlzUmlnaHRCdXR0b24gPyAncmlnaHR1cCcgOiAnbW91c2V1cCcsIHRoaXMuZXZlbnREYXRhICk7XG5cbiAgICAgICAgaWYoIGRpc3BsYXlPYmplY3RbIGlzRG93biBdIClcbiAgICAgICAge1xuICAgICAgICAgICAgZGlzcGxheU9iamVjdFsgaXNEb3duIF0gPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudCggZGlzcGxheU9iamVjdCwgaXNSaWdodEJ1dHRvbiA/ICdyaWdodGNsaWNrJyA6ICdjbGljaycsIHRoaXMuZXZlbnREYXRhICk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgaWYoIGRpc3BsYXlPYmplY3RbIGlzRG93biBdIClcbiAgICAgICAge1xuICAgICAgICAgICAgZGlzcGxheU9iamVjdFsgaXNEb3duIF0gPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudCggZGlzcGxheU9iamVjdCwgaXNSaWdodEJ1dHRvbiA/ICdyaWdodHVwb3V0c2lkZScgOiAnbW91c2V1cG91dHNpZGUnLCB0aGlzLmV2ZW50RGF0YSApO1xuICAgICAgICB9XG4gICAgfVxufTtcblxuXG4vKipcbiAqIElzIGNhbGxlZCB3aGVuIHRoZSBtb3VzZSBtb3ZlcyBhY3Jvc3MgdGhlIHJlbmRlcmVyIGVsZW1lbnRcbiAqXG4gKiBAcGFyYW0gZXZlbnQge0V2ZW50fSBUaGUgRE9NIGV2ZW50IG9mIHRoZSBtb3VzZSBtb3ZpbmdcbiAqIEBwcml2YXRlXG4gKi9cbkludGVyYWN0aW9uTWFuYWdlci5wcm90b3R5cGUub25Nb3VzZU1vdmUgPSBmdW5jdGlvbiAoZXZlbnQpXG57XG4gICAgdGhpcy5tb3VzZS5vcmlnaW5hbEV2ZW50ID0gZXZlbnQ7XG4gICAgdGhpcy5ldmVudERhdGEuZGF0YSA9IHRoaXMubW91c2U7XG4gICAgdGhpcy5ldmVudERhdGEuc3RvcHBlZCA9IGZhbHNlO1xuXG4gICAgdGhpcy5tYXBQb3NpdGlvblRvUG9pbnQoIHRoaXMubW91c2UuZ2xvYmFsLCBldmVudC5jbGllbnRYLCBldmVudC5jbGllbnRZKTtcblxuICAgIHRoaXMuZGlkTW92ZSA9IHRydWU7XG5cbiAgICB0aGlzLmN1cnNvciA9ICdpbmhlcml0JztcblxuICAgIHRoaXMucHJvY2Vzc0ludGVyYWN0aXZlKHRoaXMubW91c2UuZ2xvYmFsLCB0aGlzLnJlbmRlcmVyLl9sYXN0T2JqZWN0UmVuZGVyZWQsIHRoaXMucHJvY2Vzc01vdXNlTW92ZSwgdHJ1ZSApO1xuXG4gICAgaWYgKHRoaXMuY3VycmVudEN1cnNvclN0eWxlICE9PSB0aGlzLmN1cnNvcilcbiAgICB7XG4gICAgICAgIHRoaXMuY3VycmVudEN1cnNvclN0eWxlID0gdGhpcy5jdXJzb3I7XG4gICAgICAgIHRoaXMuaW50ZXJhY3Rpb25ET01FbGVtZW50LnN0eWxlLmN1cnNvciA9IHRoaXMuY3Vyc29yO1xuICAgIH1cblxuICAgIC8vVE9ETyBCVUcgZm9yIHBhcmVudHMgaW5lcmFjdGl2ZSBvYmplY3QgKGJvcmRlciBvcmRlciBpc3N1ZSlcbn07XG5cbi8qKlxuICogUHJvY2Vzc2VzIHRoZSByZXN1bHQgb2YgdGhlIG1vdXNlIG1vdmUgY2hlY2sgYW5kIGRpc3BhdGNoZXMgdGhlIGV2ZW50IGlmIG5lZWQgYmVcbiAqXG4gKiBAcGFyYW0gZGlzcGxheU9iamVjdCB7UElYSS5Db250YWluZXJ8UElYSS5TcHJpdGV8UElYSS5leHRyYXMuVGlsaW5nU3ByaXRlfSBUaGUgZGlzcGxheSBvYmplY3QgdGhhdCB3YXMgdGVzdGVkXG4gKiBAcGFyYW0gaGl0IHtib29sZWFufSB0aGUgcmVzdWx0IG9mIHRoZSBoaXQgdGVzdCBvbiB0aGUgZGlzcGxheSBvYmplY3RcbiAqIEBwcml2YXRlXG4gKi9cbkludGVyYWN0aW9uTWFuYWdlci5wcm90b3R5cGUucHJvY2Vzc01vdXNlTW92ZSA9IGZ1bmN0aW9uICggZGlzcGxheU9iamVjdCwgaGl0IClcbntcbiAgICB0aGlzLmRpc3BhdGNoRXZlbnQoIGRpc3BsYXlPYmplY3QsICdtb3VzZW1vdmUnLCB0aGlzLmV2ZW50RGF0YSk7XG4gICAgdGhpcy5wcm9jZXNzTW91c2VPdmVyT3V0KGRpc3BsYXlPYmplY3QsIGhpdCk7XG59O1xuXG5cbi8qKlxuICogSXMgY2FsbGVkIHdoZW4gdGhlIG1vdXNlIGlzIG1vdmVkIG91dCBvZiB0aGUgcmVuZGVyZXIgZWxlbWVudFxuICpcbiAqIEBwYXJhbSBldmVudCB7RXZlbnR9IFRoZSBET00gZXZlbnQgb2YgYSBtb3VzZSBiZWluZyBtb3ZlZCBvdXRcbiAqIEBwcml2YXRlXG4gKi9cbkludGVyYWN0aW9uTWFuYWdlci5wcm90b3R5cGUub25Nb3VzZU91dCA9IGZ1bmN0aW9uIChldmVudClcbntcbiAgICB0aGlzLm1vdXNlLm9yaWdpbmFsRXZlbnQgPSBldmVudDtcbiAgICB0aGlzLmV2ZW50RGF0YS5zdG9wcGVkID0gZmFsc2U7XG5cbiAgICAvLyBVcGRhdGUgaW50ZXJuYWwgbW91c2UgcmVmZXJlbmNlXG4gICAgdGhpcy5tYXBQb3NpdGlvblRvUG9pbnQoIHRoaXMubW91c2UuZ2xvYmFsLCBldmVudC5jbGllbnRYLCBldmVudC5jbGllbnRZKTtcblxuICAgIHRoaXMuaW50ZXJhY3Rpb25ET01FbGVtZW50LnN0eWxlLmN1cnNvciA9ICdpbmhlcml0JztcblxuICAgIC8vIFRPRE8gb3B0aW1pemUgYnkgbm90IGNoZWNrIEVWRVJZIFRJTUUhIG1heWJlIGhhbGYgYXMgb2Z0ZW4/IC8vXG4gICAgdGhpcy5tYXBQb3NpdGlvblRvUG9pbnQoIHRoaXMubW91c2UuZ2xvYmFsLCBldmVudC5jbGllbnRYLCBldmVudC5jbGllbnRZICk7XG5cbiAgICB0aGlzLnByb2Nlc3NJbnRlcmFjdGl2ZSggdGhpcy5tb3VzZS5nbG9iYWwsIHRoaXMucmVuZGVyZXIuX2xhc3RPYmplY3RSZW5kZXJlZCwgdGhpcy5wcm9jZXNzTW91c2VPdmVyT3V0LCBmYWxzZSApO1xufTtcblxuLyoqXG4gKiBQcm9jZXNzZXMgdGhlIHJlc3VsdCBvZiB0aGUgbW91c2Ugb3Zlci9vdXQgY2hlY2sgYW5kIGRpc3BhdGNoZXMgdGhlIGV2ZW50IGlmIG5lZWQgYmVcbiAqXG4gKiBAcGFyYW0gZGlzcGxheU9iamVjdCB7UElYSS5Db250YWluZXJ8UElYSS5TcHJpdGV8UElYSS5leHRyYXMuVGlsaW5nU3ByaXRlfSBUaGUgZGlzcGxheSBvYmplY3QgdGhhdCB3YXMgdGVzdGVkXG4gKiBAcGFyYW0gaGl0IHtib29sZWFufSB0aGUgcmVzdWx0IG9mIHRoZSBoaXQgdGVzdCBvbiB0aGUgZGlzcGxheSBvYmplY3RcbiAqIEBwcml2YXRlXG4gKi9cbkludGVyYWN0aW9uTWFuYWdlci5wcm90b3R5cGUucHJvY2Vzc01vdXNlT3Zlck91dCA9IGZ1bmN0aW9uICggZGlzcGxheU9iamVjdCwgaGl0IClcbntcbiAgICBpZihoaXQpXG4gICAge1xuICAgICAgICBpZighZGlzcGxheU9iamVjdC5fb3ZlcilcbiAgICAgICAge1xuICAgICAgICAgICAgZGlzcGxheU9iamVjdC5fb3ZlciA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLmRpc3BhdGNoRXZlbnQoIGRpc3BsYXlPYmplY3QsICdtb3VzZW92ZXInLCB0aGlzLmV2ZW50RGF0YSApO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGRpc3BsYXlPYmplY3QuYnV0dG9uTW9kZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5jdXJzb3IgPSBkaXNwbGF5T2JqZWN0LmRlZmF1bHRDdXJzb3I7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgaWYoZGlzcGxheU9iamVjdC5fb3ZlcilcbiAgICAgICAge1xuICAgICAgICAgICAgZGlzcGxheU9iamVjdC5fb3ZlciA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50KCBkaXNwbGF5T2JqZWN0LCAnbW91c2VvdXQnLCB0aGlzLmV2ZW50RGF0YSk7XG4gICAgICAgIH1cbiAgICB9XG59O1xuXG5cbi8qKlxuICogSXMgY2FsbGVkIHdoZW4gYSB0b3VjaCBpcyBzdGFydGVkIG9uIHRoZSByZW5kZXJlciBlbGVtZW50XG4gKlxuICogQHBhcmFtIGV2ZW50IHtFdmVudH0gVGhlIERPTSBldmVudCBvZiBhIHRvdWNoIHN0YXJ0aW5nIG9uIHRoZSByZW5kZXJlciB2aWV3XG4gKiBAcHJpdmF0ZVxuICovXG5JbnRlcmFjdGlvbk1hbmFnZXIucHJvdG90eXBlLm9uVG91Y2hTdGFydCA9IGZ1bmN0aW9uIChldmVudClcbntcbiAgICBpZiAodGhpcy5hdXRvUHJldmVudERlZmF1bHQpXG4gICAge1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIH1cblxuICAgIHZhciBjaGFuZ2VkVG91Y2hlcyA9IGV2ZW50LmNoYW5nZWRUb3VjaGVzO1xuICAgIHZhciBjTGVuZ3RoID0gY2hhbmdlZFRvdWNoZXMubGVuZ3RoO1xuXG4gICAgZm9yICh2YXIgaT0wOyBpIDwgY0xlbmd0aDsgaSsrKVxuICAgIHtcbiAgICAgICAgdmFyIHRvdWNoRXZlbnQgPSBjaGFuZ2VkVG91Y2hlc1tpXTtcbiAgICAgICAgLy9UT0RPIFBPT0xcbiAgICAgICAgdmFyIHRvdWNoRGF0YSA9IHRoaXMuZ2V0VG91Y2hEYXRhKCB0b3VjaEV2ZW50ICk7XG5cbiAgICAgICAgdG91Y2hEYXRhLm9yaWdpbmFsRXZlbnQgPSBldmVudDtcblxuICAgICAgICB0aGlzLmV2ZW50RGF0YS5kYXRhID0gdG91Y2hEYXRhO1xuICAgICAgICB0aGlzLmV2ZW50RGF0YS5zdG9wcGVkID0gZmFsc2U7XG5cbiAgICAgICAgdGhpcy5wcm9jZXNzSW50ZXJhY3RpdmUoIHRvdWNoRGF0YS5nbG9iYWwsIHRoaXMucmVuZGVyZXIuX2xhc3RPYmplY3RSZW5kZXJlZCwgdGhpcy5wcm9jZXNzVG91Y2hTdGFydCwgdHJ1ZSApO1xuXG4gICAgICAgIHRoaXMucmV0dXJuVG91Y2hEYXRhKCB0b3VjaERhdGEgKTtcbiAgICB9XG59O1xuXG4vKipcbiAqIFByb2Nlc3NlcyB0aGUgcmVzdWx0IG9mIGEgdG91Y2ggY2hlY2sgYW5kIGRpc3BhdGNoZXMgdGhlIGV2ZW50IGlmIG5lZWQgYmVcbiAqXG4gKiBAcGFyYW0gZGlzcGxheU9iamVjdCB7UElYSS5Db250YWluZXJ8UElYSS5TcHJpdGV8UElYSS5leHRyYXMuVGlsaW5nU3ByaXRlfSBUaGUgZGlzcGxheSBvYmplY3QgdGhhdCB3YXMgdGVzdGVkXG4gKiBAcGFyYW0gaGl0IHtib29sZWFufSB0aGUgcmVzdWx0IG9mIHRoZSBoaXQgdGVzdCBvbiB0aGUgZGlzcGxheSBvYmplY3RcbiAqIEBwcml2YXRlXG4gKi9cbkludGVyYWN0aW9uTWFuYWdlci5wcm90b3R5cGUucHJvY2Vzc1RvdWNoU3RhcnQgPSBmdW5jdGlvbiAoIGRpc3BsYXlPYmplY3QsIGhpdCApXG57XG4gICAgaWYoaGl0KVxuICAgIHtcbiAgICAgICAgZGlzcGxheU9iamVjdC5fdG91Y2hEb3duID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50KCBkaXNwbGF5T2JqZWN0LCAndG91Y2hzdGFydCcsIHRoaXMuZXZlbnREYXRhICk7XG4gICAgfVxufTtcblxuXG4vKipcbiAqIElzIGNhbGxlZCB3aGVuIGEgdG91Y2ggZW5kcyBvbiB0aGUgcmVuZGVyZXIgZWxlbWVudFxuICpcbiAqIEBwYXJhbSBldmVudCB7RXZlbnR9IFRoZSBET00gZXZlbnQgb2YgYSB0b3VjaCBlbmRpbmcgb24gdGhlIHJlbmRlcmVyIHZpZXdcbiAqL1xuSW50ZXJhY3Rpb25NYW5hZ2VyLnByb3RvdHlwZS5vblRvdWNoRW5kID0gZnVuY3Rpb24gKGV2ZW50KVxue1xuICAgIGlmICh0aGlzLmF1dG9QcmV2ZW50RGVmYXVsdClcbiAgICB7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgfVxuXG4gICAgdmFyIGNoYW5nZWRUb3VjaGVzID0gZXZlbnQuY2hhbmdlZFRvdWNoZXM7XG4gICAgdmFyIGNMZW5ndGggPSBjaGFuZ2VkVG91Y2hlcy5sZW5ndGg7XG5cbiAgICBmb3IgKHZhciBpPTA7IGkgPCBjTGVuZ3RoOyBpKyspXG4gICAge1xuICAgICAgICB2YXIgdG91Y2hFdmVudCA9IGNoYW5nZWRUb3VjaGVzW2ldO1xuXG4gICAgICAgIHZhciB0b3VjaERhdGEgPSB0aGlzLmdldFRvdWNoRGF0YSggdG91Y2hFdmVudCApO1xuXG4gICAgICAgIHRvdWNoRGF0YS5vcmlnaW5hbEV2ZW50ID0gZXZlbnQ7XG5cbiAgICAgICAgLy9UT0RPIHRoaXMgc2hvdWxkIGJlIHBhc3NlZCBhbG9uZy4uIG5vIHNldFxuICAgICAgICB0aGlzLmV2ZW50RGF0YS5kYXRhID0gdG91Y2hEYXRhO1xuICAgICAgICB0aGlzLmV2ZW50RGF0YS5zdG9wcGVkID0gZmFsc2U7XG5cblxuICAgICAgICB0aGlzLnByb2Nlc3NJbnRlcmFjdGl2ZSggdG91Y2hEYXRhLmdsb2JhbCwgdGhpcy5yZW5kZXJlci5fbGFzdE9iamVjdFJlbmRlcmVkLCB0aGlzLnByb2Nlc3NUb3VjaEVuZCwgdHJ1ZSApO1xuXG4gICAgICAgIHRoaXMucmV0dXJuVG91Y2hEYXRhKCB0b3VjaERhdGEgKTtcbiAgICB9XG59O1xuXG4vKipcbiAqIFByb2Nlc3NlcyB0aGUgcmVzdWx0IG9mIHRoZSBlbmQgb2YgYSB0b3VjaCBhbmQgZGlzcGF0Y2hlcyB0aGUgZXZlbnQgaWYgbmVlZCBiZVxuICpcbiAqIEBwYXJhbSBkaXNwbGF5T2JqZWN0IHtQSVhJLkNvbnRhaW5lcnxQSVhJLlNwcml0ZXxQSVhJLmV4dHJhcy5UaWxpbmdTcHJpdGV9IFRoZSBkaXNwbGF5IG9iamVjdCB0aGF0IHdhcyB0ZXN0ZWRcbiAqIEBwYXJhbSBoaXQge2Jvb2xlYW59IHRoZSByZXN1bHQgb2YgdGhlIGhpdCB0ZXN0IG9uIHRoZSBkaXNwbGF5IG9iamVjdFxuICogQHByaXZhdGVcbiAqL1xuSW50ZXJhY3Rpb25NYW5hZ2VyLnByb3RvdHlwZS5wcm9jZXNzVG91Y2hFbmQgPSBmdW5jdGlvbiAoIGRpc3BsYXlPYmplY3QsIGhpdCApXG57XG4gICAgaWYoaGl0KVxuICAgIHtcbiAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50KCBkaXNwbGF5T2JqZWN0LCAndG91Y2hlbmQnLCB0aGlzLmV2ZW50RGF0YSApO1xuXG4gICAgICAgIGlmKCBkaXNwbGF5T2JqZWN0Ll90b3VjaERvd24gKVxuICAgICAgICB7XG4gICAgICAgICAgICBkaXNwbGF5T2JqZWN0Ll90b3VjaERvd24gPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudCggZGlzcGxheU9iamVjdCwgJ3RhcCcsIHRoaXMuZXZlbnREYXRhICk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgaWYoIGRpc3BsYXlPYmplY3QuX3RvdWNoRG93biApXG4gICAgICAgIHtcbiAgICAgICAgICAgIGRpc3BsYXlPYmplY3QuX3RvdWNoRG93biA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50KCBkaXNwbGF5T2JqZWN0LCAndG91Y2hlbmRvdXRzaWRlJywgdGhpcy5ldmVudERhdGEgKTtcbiAgICAgICAgfVxuICAgIH1cbn07XG5cbi8qKlxuICogSXMgY2FsbGVkIHdoZW4gYSB0b3VjaCBpcyBtb3ZlZCBhY3Jvc3MgdGhlIHJlbmRlcmVyIGVsZW1lbnRcbiAqXG4gKiBAcGFyYW0gZXZlbnQge0V2ZW50fSBUaGUgRE9NIGV2ZW50IG9mIGEgdG91Y2ggbW92aW5nIGFjcm9zcyB0aGUgcmVuZGVyZXIgdmlld1xuICogQHByaXZhdGVcbiAqL1xuSW50ZXJhY3Rpb25NYW5hZ2VyLnByb3RvdHlwZS5vblRvdWNoTW92ZSA9IGZ1bmN0aW9uIChldmVudClcbntcbiAgICBpZiAodGhpcy5hdXRvUHJldmVudERlZmF1bHQpXG4gICAge1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIH1cblxuICAgIHZhciBjaGFuZ2VkVG91Y2hlcyA9IGV2ZW50LmNoYW5nZWRUb3VjaGVzO1xuICAgIHZhciBjTGVuZ3RoID0gY2hhbmdlZFRvdWNoZXMubGVuZ3RoO1xuXG4gICAgZm9yICh2YXIgaT0wOyBpIDwgY0xlbmd0aDsgaSsrKVxuICAgIHtcbiAgICAgICAgdmFyIHRvdWNoRXZlbnQgPSBjaGFuZ2VkVG91Y2hlc1tpXTtcblxuICAgICAgICB2YXIgdG91Y2hEYXRhID0gdGhpcy5nZXRUb3VjaERhdGEoIHRvdWNoRXZlbnQgKTtcblxuICAgICAgICB0b3VjaERhdGEub3JpZ2luYWxFdmVudCA9IGV2ZW50O1xuXG4gICAgICAgIHRoaXMuZXZlbnREYXRhLmRhdGEgPSB0b3VjaERhdGE7XG4gICAgICAgIHRoaXMuZXZlbnREYXRhLnN0b3BwZWQgPSBmYWxzZTtcblxuICAgICAgICB0aGlzLnByb2Nlc3NJbnRlcmFjdGl2ZSggdG91Y2hEYXRhLmdsb2JhbCwgdGhpcy5yZW5kZXJlci5fbGFzdE9iamVjdFJlbmRlcmVkLCB0aGlzLnByb2Nlc3NUb3VjaE1vdmUsIHRydWUgKTtcblxuICAgICAgICB0aGlzLnJldHVyblRvdWNoRGF0YSggdG91Y2hEYXRhICk7XG4gICAgfVxufTtcblxuLyoqXG4gKiBQcm9jZXNzZXMgdGhlIHJlc3VsdCBvZiBhIHRvdWNoIG1vdmUgY2hlY2sgYW5kIGRpc3BhdGNoZXMgdGhlIGV2ZW50IGlmIG5lZWQgYmVcbiAqXG4gKiBAcGFyYW0gZGlzcGxheU9iamVjdCB7UElYSS5Db250YWluZXJ8UElYSS5TcHJpdGV8UElYSS5leHRyYXMuVGlsaW5nU3ByaXRlfSBUaGUgZGlzcGxheSBvYmplY3QgdGhhdCB3YXMgdGVzdGVkXG4gKiBAcGFyYW0gaGl0IHtib29sZWFufSB0aGUgcmVzdWx0IG9mIHRoZSBoaXQgdGVzdCBvbiB0aGUgZGlzcGxheSBvYmplY3RcbiAqIEBwcml2YXRlXG4gKi9cbkludGVyYWN0aW9uTWFuYWdlci5wcm90b3R5cGUucHJvY2Vzc1RvdWNoTW92ZSA9IGZ1bmN0aW9uICggZGlzcGxheU9iamVjdCwgaGl0IClcbntcbiAgICBoaXQgPSBoaXQ7XG4gICAgdGhpcy5kaXNwYXRjaEV2ZW50KCBkaXNwbGF5T2JqZWN0LCAndG91Y2htb3ZlJywgdGhpcy5ldmVudERhdGEpO1xufTtcblxuLyoqXG4gKiBHcmFicyBhbiBpbnRlcmFjdGlvbiBkYXRhIG9iamVjdCBmcm9tIHRoZSBpbnRlcm5hbCBwb29sXG4gKlxuICogQHBhcmFtIHRvdWNoRXZlbnQge0V2ZW50RGF0YX0gVGhlIHRvdWNoIGV2ZW50IHdlIG5lZWQgdG8gcGFpciB3aXRoIGFuIGludGVyYWN0aW9uRGF0YSBvYmplY3RcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5JbnRlcmFjdGlvbk1hbmFnZXIucHJvdG90eXBlLmdldFRvdWNoRGF0YSA9IGZ1bmN0aW9uICh0b3VjaEV2ZW50KVxue1xuICAgIHZhciB0b3VjaERhdGEgPSB0aGlzLmludGVyYWN0aXZlRGF0YVBvb2wucG9wKCk7XG5cbiAgICBpZighdG91Y2hEYXRhKVxuICAgIHtcbiAgICAgICAgdG91Y2hEYXRhID0gbmV3IEludGVyYWN0aW9uRGF0YSgpO1xuICAgIH1cblxuICAgIHRvdWNoRGF0YS5pZGVudGlmaWVyID0gdG91Y2hFdmVudC5pZGVudGlmaWVyO1xuICAgIHRoaXMubWFwUG9zaXRpb25Ub1BvaW50KCB0b3VjaERhdGEuZ2xvYmFsLCB0b3VjaEV2ZW50LmNsaWVudFgsIHRvdWNoRXZlbnQuY2xpZW50WSApO1xuXG4gICAgaWYobmF2aWdhdG9yLmlzQ29jb29uSlMpXG4gICAge1xuICAgICAgICB0b3VjaERhdGEuZ2xvYmFsLnggPSB0b3VjaERhdGEuZ2xvYmFsLnggLyB0aGlzLnJlc29sdXRpb247XG4gICAgICAgIHRvdWNoRGF0YS5nbG9iYWwueSA9IHRvdWNoRGF0YS5nbG9iYWwueSAvIHRoaXMucmVzb2x1dGlvbjtcbiAgICB9XG5cbiAgICB0b3VjaEV2ZW50Lmdsb2JhbFggPSB0b3VjaERhdGEuZ2xvYmFsLng7XG4gICAgdG91Y2hFdmVudC5nbG9iYWxZID0gdG91Y2hEYXRhLmdsb2JhbC55O1xuXG4gICAgcmV0dXJuIHRvdWNoRGF0YTtcbn07XG5cbi8qKlxuICogUmV0dXJucyBhbiBpbnRlcmFjdGlvbiBkYXRhIG9iamVjdCB0byB0aGUgaW50ZXJuYWwgcG9vbFxuICpcbiAqIEBwYXJhbSB0b3VjaERhdGEge1BJWEkuaW50ZXJhY3Rpb24uSW50ZXJhY3Rpb25EYXRhfSBUaGUgdG91Y2ggZGF0YSBvYmplY3Qgd2Ugd2FudCB0byByZXR1cm4gdG8gdGhlIHBvb2xcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5JbnRlcmFjdGlvbk1hbmFnZXIucHJvdG90eXBlLnJldHVyblRvdWNoRGF0YSA9IGZ1bmN0aW9uICggdG91Y2hEYXRhIClcbntcbiAgICB0aGlzLmludGVyYWN0aXZlRGF0YVBvb2wucHVzaCggdG91Y2hEYXRhICk7XG59O1xuXG4vKipcbiAqIERlc3Ryb3lzIHRoZSBpbnRlcmFjdGlvbiBtYW5hZ2VyXG4gKlxuICovXG5JbnRlcmFjdGlvbk1hbmFnZXIucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoKSB7XG4gICAgdGhpcy5yZW1vdmVFdmVudHMoKTtcblxuICAgIHRoaXMucmVuZGVyZXIgPSBudWxsO1xuXG4gICAgdGhpcy5tb3VzZSA9IG51bGw7XG5cbiAgICB0aGlzLmV2ZW50RGF0YSA9IG51bGw7XG5cbiAgICB0aGlzLmludGVyYWN0aXZlRGF0YVBvb2wgPSBudWxsO1xuXG4gICAgdGhpcy5pbnRlcmFjdGlvbkRPTUVsZW1lbnQgPSBudWxsO1xuXG4gICAgdGhpcy5vbk1vdXNlVXAgPSBudWxsO1xuICAgIHRoaXMucHJvY2Vzc01vdXNlVXAgPSBudWxsO1xuXG5cbiAgICB0aGlzLm9uTW91c2VEb3duID0gbnVsbDtcbiAgICB0aGlzLnByb2Nlc3NNb3VzZURvd24gPSBudWxsO1xuXG4gICAgdGhpcy5vbk1vdXNlTW92ZSA9IG51bGw7XG4gICAgdGhpcy5wcm9jZXNzTW91c2VNb3ZlID0gbnVsbDtcblxuICAgIHRoaXMub25Nb3VzZU91dCA9IG51bGw7XG4gICAgdGhpcy5wcm9jZXNzTW91c2VPdmVyT3V0ID0gbnVsbDtcblxuXG4gICAgdGhpcy5vblRvdWNoU3RhcnQgPSBudWxsO1xuICAgIHRoaXMucHJvY2Vzc1RvdWNoU3RhcnQgPSBudWxsO1xuXG4gICAgdGhpcy5vblRvdWNoRW5kID0gbnVsbDtcbiAgICB0aGlzLnByb2Nlc3NUb3VjaEVuZCA9IG51bGw7XG5cbiAgICB0aGlzLm9uVG91Y2hNb3ZlID0gbnVsbDtcbiAgICB0aGlzLnByb2Nlc3NUb3VjaE1vdmUgPSBudWxsO1xuXG4gICAgdGhpcy5fdGVtcFBvaW50ID0gbnVsbDtcbn07XG5cbmNvcmUuV2ViR0xSZW5kZXJlci5yZWdpc3RlclBsdWdpbignaW50ZXJhY3Rpb24nLCBJbnRlcmFjdGlvbk1hbmFnZXIpO1xuY29yZS5DYW52YXNSZW5kZXJlci5yZWdpc3RlclBsdWdpbignaW50ZXJhY3Rpb24nLCBJbnRlcmFjdGlvbk1hbmFnZXIpO1xuIiwiLyoqXG4gKiBAZmlsZSAgICAgICAgTWFpbiBleHBvcnQgb2YgdGhlIFBJWEkgaW50ZXJhY3Rpb25zIGxpYnJhcnlcbiAqIEBhdXRob3IgICAgICBNYXQgR3JvdmVzIDxtYXRAZ29vZGJveWRpZ2l0YWwuY29tPlxuICogQGNvcHlyaWdodCAgIDIwMTMtMjAxNSBHb29kQm95RGlnaXRhbFxuICogQGxpY2Vuc2UgICAgIHtAbGluayBodHRwczovL2dpdGh1Yi5jb20vcGl4aWpzL3BpeGkuanMvYmxvYi9tYXN0ZXIvTElDRU5TRXxNSVQgTGljZW5zZX1cbiAqL1xuXG4vKipcbiAqIEBuYW1lc3BhY2UgUElYSS5pbnRlcmFjdGlvblxuICovXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgICBJbnRlcmFjdGlvbkRhdGE6ICAgIHJlcXVpcmUoJy4vSW50ZXJhY3Rpb25EYXRhJyksXG4gICAgSW50ZXJhY3Rpb25NYW5hZ2VyOiByZXF1aXJlKCcuL0ludGVyYWN0aW9uTWFuYWdlcicpLFxuICAgIGludGVyYWN0aXZlVGFyZ2V0OiAgcmVxdWlyZSgnLi9pbnRlcmFjdGl2ZVRhcmdldCcpXG59O1xuIiwiLyoqXG4gKiBEZWZhdWx0IHByb3BlcnR5IHZhbHVlcyBvZiBpbnRlcmFjdGl2ZSBvYmplY3RzXG4gKiB1c2VkIGJ5IHtAbGluayBQSVhJLmludGVyYWN0aW9uLkludGVyYWN0aW9uTWFuYWdlcn0uXG4gKlxuICogQG1peGluXG4gKiBAbWVtYmVyb2YgUElYSS5pbnRlcmFjdGlvblxuICogQGV4YW1wbGVcbiAqICAgICAgZnVuY3Rpb24gTXlPYmplY3QoKSB7fVxuICpcbiAqICAgICAgT2JqZWN0LmFzc2lnbihcbiAqICAgICAgICAgIE15T2JqZWN0LnByb3RvdHlwZSxcbiAqICAgICAgICAgIFBJWEkuaW50ZXJhY3Rpb24uaW50ZXJhY3RpdmVUYXJnZXRcbiAqICAgICAgKTtcbiAqL1xudmFyIGludGVyYWN0aXZlVGFyZ2V0ID0ge1xuICAgIC8qKlxuICAgICAqIEB0b2RvIE5lZWRzIGRvY3MuXG4gICAgICovXG4gICAgaW50ZXJhY3RpdmU6IGZhbHNlLFxuICAgIC8qKlxuICAgICAqIEB0b2RvIE5lZWRzIGRvY3MuXG4gICAgICovXG4gICAgYnV0dG9uTW9kZTogZmFsc2UsXG4gICAgLyoqXG4gICAgICogQHRvZG8gTmVlZHMgZG9jcy5cbiAgICAgKi9cbiAgICBpbnRlcmFjdGl2ZUNoaWxkcmVuOiB0cnVlLFxuICAgIC8qKlxuICAgICAqIEB0b2RvIE5lZWRzIGRvY3MuXG4gICAgICovXG4gICAgZGVmYXVsdEN1cnNvcjogJ3BvaW50ZXInLFxuXG4gICAgLy8gc29tZSBpbnRlcm5hbCBjaGVja3MuLlxuXG4gICAgLyoqXG4gICAgICogQHRvZG8gTmVlZHMgZG9jcy5cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIF9vdmVyOiBmYWxzZSxcbiAgICAvKipcbiAgICAgKiBAdG9kbyBOZWVkcyBkb2NzLlxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgX3RvdWNoRG93bjogZmFsc2Vcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gaW50ZXJhY3RpdmVUYXJnZXQ7XG4iLCJ2YXIgUmVzb3VyY2UgPSByZXF1aXJlKCdyZXNvdXJjZS1sb2FkZXInKS5SZXNvdXJjZSxcbiAgICBjb3JlID0gcmVxdWlyZSgnLi4vY29yZScpLFxuICAgIGV4dHJhcyA9IHJlcXVpcmUoJy4uL2V4dHJhcycpLFxuICAgIHBhdGggPSByZXF1aXJlKCdwYXRoJyk7XG5cblxuZnVuY3Rpb24gcGFyc2UocmVzb3VyY2UsIHRleHR1cmUpIHtcbiAgICB2YXIgZGF0YSA9IHt9O1xuICAgIHZhciBpbmZvID0gcmVzb3VyY2UuZGF0YS5nZXRFbGVtZW50c0J5VGFnTmFtZSgnaW5mbycpWzBdO1xuICAgIHZhciBjb21tb24gPSByZXNvdXJjZS5kYXRhLmdldEVsZW1lbnRzQnlUYWdOYW1lKCdjb21tb24nKVswXTtcblxuICAgIGRhdGEuZm9udCA9IGluZm8uZ2V0QXR0cmlidXRlKCdmYWNlJyk7XG4gICAgZGF0YS5zaXplID0gcGFyc2VJbnQoaW5mby5nZXRBdHRyaWJ1dGUoJ3NpemUnKSwgMTApO1xuICAgIGRhdGEubGluZUhlaWdodCA9IHBhcnNlSW50KGNvbW1vbi5nZXRBdHRyaWJ1dGUoJ2xpbmVIZWlnaHQnKSwgMTApO1xuICAgIGRhdGEuY2hhcnMgPSB7fTtcblxuICAgIC8vcGFyc2UgbGV0dGVyc1xuICAgIHZhciBsZXR0ZXJzID0gcmVzb3VyY2UuZGF0YS5nZXRFbGVtZW50c0J5VGFnTmFtZSgnY2hhcicpO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZXR0ZXJzLmxlbmd0aDsgaSsrKVxuICAgIHtcbiAgICAgICAgdmFyIGNoYXJDb2RlID0gcGFyc2VJbnQobGV0dGVyc1tpXS5nZXRBdHRyaWJ1dGUoJ2lkJyksIDEwKTtcblxuICAgICAgICB2YXIgdGV4dHVyZVJlY3QgPSBuZXcgY29yZS5SZWN0YW5nbGUoXG4gICAgICAgICAgICBwYXJzZUludChsZXR0ZXJzW2ldLmdldEF0dHJpYnV0ZSgneCcpLCAxMCkgKyB0ZXh0dXJlLmZyYW1lLngsXG4gICAgICAgICAgICBwYXJzZUludChsZXR0ZXJzW2ldLmdldEF0dHJpYnV0ZSgneScpLCAxMCkgKyB0ZXh0dXJlLmZyYW1lLnksXG4gICAgICAgICAgICBwYXJzZUludChsZXR0ZXJzW2ldLmdldEF0dHJpYnV0ZSgnd2lkdGgnKSwgMTApLFxuICAgICAgICAgICAgcGFyc2VJbnQobGV0dGVyc1tpXS5nZXRBdHRyaWJ1dGUoJ2hlaWdodCcpLCAxMClcbiAgICAgICAgKTtcblxuICAgICAgICBkYXRhLmNoYXJzW2NoYXJDb2RlXSA9IHtcbiAgICAgICAgICAgIHhPZmZzZXQ6IHBhcnNlSW50KGxldHRlcnNbaV0uZ2V0QXR0cmlidXRlKCd4b2Zmc2V0JyksIDEwKSxcbiAgICAgICAgICAgIHlPZmZzZXQ6IHBhcnNlSW50KGxldHRlcnNbaV0uZ2V0QXR0cmlidXRlKCd5b2Zmc2V0JyksIDEwKSxcbiAgICAgICAgICAgIHhBZHZhbmNlOiBwYXJzZUludChsZXR0ZXJzW2ldLmdldEF0dHJpYnV0ZSgneGFkdmFuY2UnKSwgMTApLFxuICAgICAgICAgICAga2VybmluZzoge30sXG4gICAgICAgICAgICB0ZXh0dXJlOiBuZXcgY29yZS5UZXh0dXJlKHRleHR1cmUuYmFzZVRleHR1cmUsIHRleHR1cmVSZWN0KVxuXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgLy9wYXJzZSBrZXJuaW5nc1xuICAgIHZhciBrZXJuaW5ncyA9IHJlc291cmNlLmRhdGEuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2tlcm5pbmcnKTtcbiAgICBmb3IgKGkgPSAwOyBpIDwga2VybmluZ3MubGVuZ3RoOyBpKyspXG4gICAge1xuICAgICAgICB2YXIgZmlyc3QgPSBwYXJzZUludChrZXJuaW5nc1tpXS5nZXRBdHRyaWJ1dGUoJ2ZpcnN0JyksIDEwKTtcbiAgICAgICAgdmFyIHNlY29uZCA9IHBhcnNlSW50KGtlcm5pbmdzW2ldLmdldEF0dHJpYnV0ZSgnc2Vjb25kJyksIDEwKTtcbiAgICAgICAgdmFyIGFtb3VudCA9IHBhcnNlSW50KGtlcm5pbmdzW2ldLmdldEF0dHJpYnV0ZSgnYW1vdW50JyksIDEwKTtcblxuICAgICAgICBkYXRhLmNoYXJzW3NlY29uZF0ua2VybmluZ1tmaXJzdF0gPSBhbW91bnQ7XG4gICAgfVxuXG4gICAgcmVzb3VyY2UuYml0bWFwRm9udCA9IGRhdGE7XG5cbiAgICAvLyBJJ20gbGVhdmluZyB0aGlzIGFzIGEgdGVtcG9yYXJ5IGZpeCBzbyB3ZSBjYW4gdGVzdCB0aGUgYml0bWFwIGZvbnRzIGluIHYzXG4gICAgLy8gYnV0IGl0J3MgdmVyeSBsaWtlbHkgdG8gY2hhbmdlXG4gICAgZXh0cmFzLkJpdG1hcFRleHQuZm9udHNbZGF0YS5mb250XSA9IGRhdGE7XG59XG5cblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoKVxue1xuICAgIHJldHVybiBmdW5jdGlvbiAocmVzb3VyY2UsIG5leHQpXG4gICAge1xuICAgICAgICAvLyBza2lwIGlmIG5vIGRhdGEgb3Igbm90IHhtbCBkYXRhXG4gICAgICAgIGlmICghcmVzb3VyY2UuZGF0YSB8fCAhcmVzb3VyY2UuaXNYbWwpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiBuZXh0KCk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBza2lwIGlmIG5vdCBiaXRtYXAgZm9udCBkYXRhLCB1c2luZyBzb21lIHNpbGx5IGR1Y2stdHlwaW5nXG4gICAgICAgIGlmIChcbiAgICAgICAgICAgIHJlc291cmNlLmRhdGEuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ3BhZ2UnKS5sZW5ndGggPT09IDAgfHxcbiAgICAgICAgICAgIHJlc291cmNlLmRhdGEuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2luZm8nKS5sZW5ndGggPT09IDAgfHxcbiAgICAgICAgICAgIHJlc291cmNlLmRhdGEuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2luZm8nKVswXS5nZXRBdHRyaWJ1dGUoJ2ZhY2UnKSA9PT0gbnVsbFxuICAgICAgICAgICAgKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gbmV4dCgpO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIHhtbFVybCA9IHBhdGguZGlybmFtZShyZXNvdXJjZS51cmwpO1xuXG4gICAgICAgIGlmICh4bWxVcmwgPT09ICcuJykge1xuICAgICAgICAgICAgeG1sVXJsID0gJyc7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5iYXNlVXJsICYmIHhtbFVybCkge1xuICAgICAgICAgICAgLy8gaWYgYmFzZXVybCBoYXMgYSB0cmFpbGluZyBzbGFzaCB0aGVuIGFkZCBvbmUgdG8geG1sVXJsIHNvIHRoZSByZXBsYWNlIHdvcmtzIGJlbG93XG4gICAgICAgICAgICBpZiAodGhpcy5iYXNlVXJsLmNoYXJBdCh0aGlzLmJhc2VVcmwubGVuZ3RoIC0gMSkgPT09ICcvJykge1xuICAgICAgICAgICAgICAgIHhtbFVybCArPSAnLyc7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIHJlbW92ZSBiYXNlVXJsIGZyb20geG1sVXJsXG4gICAgICAgICAgICB4bWxVcmwgPSB4bWxVcmwucmVwbGFjZSh0aGlzLmJhc2VVcmwsICcnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGlmIHRoZXJlIGlzIGFuIHhtbFVybCBub3csIGl0IG5lZWRzIGEgdHJhaWxpbmcgc2xhc2guIEVuc3VyZSB0aGF0IGl0IGRvZXMgaWYgdGhlIHN0cmluZyBpc24ndCBlbXB0eS5cbiAgICAgICAgaWYgKHhtbFVybCAmJiB4bWxVcmwuY2hhckF0KHhtbFVybC5sZW5ndGggLSAxKSAhPT0gJy8nKSB7XG4gICAgICAgICAgICB4bWxVcmwgKz0gJy8nO1xuICAgICAgICB9XG4gICAgICAgIHZhciB0ZXh0dXJlVXJsID0geG1sVXJsICsgcmVzb3VyY2UuZGF0YS5nZXRFbGVtZW50c0J5VGFnTmFtZSgncGFnZScpWzBdLmdldEF0dHJpYnV0ZSgnZmlsZScpO1xuICAgICAgICBpZiAoY29yZS51dGlscy5UZXh0dXJlQ2FjaGVbdGV4dHVyZVVybF0pIHtcbiAgICAgICAgICAgIC8vcmV1c2UgZXhpc3RpbmcgdGV4dHVyZVxuICAgICAgICAgICAgcGFyc2UocmVzb3VyY2UsIGNvcmUudXRpbHMuVGV4dHVyZUNhY2hlW3RleHR1cmVVcmxdKTtcbiAgICAgICAgICAgIG5leHQoKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHZhciBsb2FkT3B0aW9ucyA9IHtcbiAgICAgICAgICAgICAgICBjcm9zc09yaWdpbjogcmVzb3VyY2UuY3Jvc3NPcmlnaW4sXG4gICAgICAgICAgICAgICAgbG9hZFR5cGU6IFJlc291cmNlLkxPQURfVFlQRS5JTUFHRSxcbiAgICAgICAgICAgICAgICBtZXRhZGF0YTogcmVzb3VyY2UubWV0YWRhdGEuaW1hZ2VNZXRhZGF0YVxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIC8vIGxvYWQgdGhlIHRleHR1cmUgZm9yIHRoZSBmb250XG4gICAgICAgICAgICB0aGlzLmFkZChyZXNvdXJjZS5uYW1lICsgJ19pbWFnZScsIHRleHR1cmVVcmwsIGxvYWRPcHRpb25zLCBmdW5jdGlvbiAocmVzKSB7XG4gICAgICAgICAgICAgICAgcGFyc2UocmVzb3VyY2UsIHJlcy50ZXh0dXJlKTtcbiAgICAgICAgICAgICAgICBuZXh0KCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH07XG59O1xuIiwiLyoqXG4gKiBAZmlsZSAgICAgICAgTWFpbiBleHBvcnQgb2YgdGhlIFBJWEkgbG9hZGVycyBsaWJyYXJ5XG4gKiBAYXV0aG9yICAgICAgTWF0IEdyb3ZlcyA8bWF0QGdvb2Rib3lkaWdpdGFsLmNvbT5cbiAqIEBjb3B5cmlnaHQgICAyMDEzLTIwMTUgR29vZEJveURpZ2l0YWxcbiAqIEBsaWNlbnNlICAgICB7QGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL3BpeGlqcy9waXhpLmpzL2Jsb2IvbWFzdGVyL0xJQ0VOU0V8TUlUIExpY2Vuc2V9XG4gKi9cblxuLyoqXG4gKiBAbmFtZXNwYWNlIFBJWEkubG9hZGVyc1xuICovXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgICBMb2FkZXI6ICAgICAgICAgICAgIHJlcXVpcmUoJy4vbG9hZGVyJyksXG5cbiAgICAvLyBwYXJzZXJzXG4gICAgYml0bWFwRm9udFBhcnNlcjogICByZXF1aXJlKCcuL2JpdG1hcEZvbnRQYXJzZXInKSxcbiAgICBzcHJpdGVzaGVldFBhcnNlcjogIHJlcXVpcmUoJy4vc3ByaXRlc2hlZXRQYXJzZXInKSxcbiAgICB0ZXh0dXJlUGFyc2VyOiAgICAgIHJlcXVpcmUoJy4vdGV4dHVyZVBhcnNlcicpLFxuICAgIFJlc291cmNlOiAgICAgICAgICAgcmVxdWlyZSgncmVzb3VyY2UtbG9hZGVyJykuUmVzb3VyY2Vcbn07XG4iLCJ2YXIgUmVzb3VyY2VMb2FkZXIgPSByZXF1aXJlKCdyZXNvdXJjZS1sb2FkZXInKSxcbiAgICB0ZXh0dXJlUGFyc2VyID0gcmVxdWlyZSgnLi90ZXh0dXJlUGFyc2VyJyksXG4gICAgc3ByaXRlc2hlZXRQYXJzZXIgPSByZXF1aXJlKCcuL3Nwcml0ZXNoZWV0UGFyc2VyJyksXG4gICAgYml0bWFwRm9udFBhcnNlciA9IHJlcXVpcmUoJy4vYml0bWFwRm9udFBhcnNlcicpO1xuXG4vKipcbiAqXG4gKiBUaGUgbmV3IGxvYWRlciwgZXh0ZW5kcyBSZXNvdXJjZSBMb2FkZXIgYnkgQ2hhZCBFbmdsZXIgOiBodHRwczovL2dpdGh1Yi5jb20vZW5nbGVyY2ovcmVzb3VyY2UtbG9hZGVyXG4gKlxuICogYGBganNcbiAqIHZhciBsb2FkZXIgPSBQSVhJLmxvYWRlcjsgLy8gcGl4aSBleHBvc2VzIGEgcHJlbWFkZSBpbnN0YW5jZSBmb3IgeW91IHRvIHVzZS5cbiAqIC8vb3JcbiAqIHZhciBsb2FkZXIgPSBuZXcgUElYSS5sb2FkZXJzLkxvYWRlcigpOyAvLyB5b3UgY2FuIGFsc28gY3JlYXRlIHlvdXIgb3duIGlmIHlvdSB3YW50XG4gKlxuICogbG9hZGVyLmFkZCgnYnVubnknLFwiZGF0YS9idW5ueS5wbmdcIik7XG4gKlxuICogbG9hZGVyLm9uY2UoJ2NvbXBsZXRlJyxvbkFzc2V0c0xvYWRlZCk7XG4gKlxuICogbG9hZGVyLmxvYWQoKTtcbiAqIGBgYFxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5SZXNvdXJjZUxvYWRlclxuICogQG1lbWJlcm9mIFBJWEkubG9hZGVyc1xuICogQHBhcmFtIFtiYXNlVXJsPScnXSB7c3RyaW5nfSBUaGUgYmFzZSB1cmwgZm9yIGFsbCByZXNvdXJjZXMgbG9hZGVkIGJ5IHRoaXMgbG9hZGVyLlxuICogQHBhcmFtIFtjb25jdXJyZW5jeT0xMF0ge251bWJlcn0gVGhlIG51bWJlciBvZiByZXNvdXJjZXMgdG8gbG9hZCBjb25jdXJyZW50bHkuXG4gKi9cbmZ1bmN0aW9uIExvYWRlcihiYXNlVXJsLCBjb25jdXJyZW5jeSlcbntcbiAgICBSZXNvdXJjZUxvYWRlci5jYWxsKHRoaXMsIGJhc2VVcmwsIGNvbmN1cnJlbmN5KTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgTG9hZGVyLl9waXhpTWlkZGxld2FyZS5sZW5ndGg7ICsraSkge1xuICAgICAgICB0aGlzLnVzZShMb2FkZXIuX3BpeGlNaWRkbGV3YXJlW2ldKCkpO1xuICAgIH1cbn1cblxuTG9hZGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoUmVzb3VyY2VMb2FkZXIucHJvdG90eXBlKTtcbkxvYWRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBMb2FkZXI7XG5cbm1vZHVsZS5leHBvcnRzID0gTG9hZGVyO1xuXG5Mb2FkZXIuX3BpeGlNaWRkbGV3YXJlID0gW1xuICAgIC8vIHBhcnNlIGFueSBibG9iIGludG8gbW9yZSB1c2FibGUgb2JqZWN0cyAoZS5nLiBJbWFnZSlcbiAgICBSZXNvdXJjZUxvYWRlci5taWRkbGV3YXJlLnBhcnNpbmcuYmxvYixcbiAgICAvLyBwYXJzZSBhbnkgSW1hZ2Ugb2JqZWN0cyBpbnRvIHRleHR1cmVzXG4gICAgdGV4dHVyZVBhcnNlcixcbiAgICAvLyBwYXJzZSBhbnkgc3ByaXRlc2hlZXQgZGF0YSBpbnRvIG11bHRpcGxlIHRleHR1cmVzXG4gICAgc3ByaXRlc2hlZXRQYXJzZXIsXG4gICAgLy8gcGFyc2UgYW55IHNwcml0ZXNoZWV0IGRhdGEgaW50byBtdWx0aXBsZSB0ZXh0dXJlc1xuICAgIGJpdG1hcEZvbnRQYXJzZXJcbl07XG5cbkxvYWRlci5hZGRQaXhpTWlkZGxld2FyZSA9IGZ1bmN0aW9uIChmbikge1xuICAgIExvYWRlci5fcGl4aU1pZGRsZXdhcmUucHVzaChmbik7XG59O1xuXG4vLyBBZGQgY3VzdG9tIGV4dGVudGlvbnNcbnZhciBSZXNvdXJjZSA9IFJlc291cmNlTG9hZGVyLlJlc291cmNlO1xuXG5SZXNvdXJjZS5zZXRFeHRlbnNpb25YaHJUeXBlKCdmbnQnLCBSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRS5ET0NVTUVOVCk7XG4iLCJ2YXIgUmVzb3VyY2UgPSByZXF1aXJlKCdyZXNvdXJjZS1sb2FkZXInKS5SZXNvdXJjZSxcbiAgICBwYXRoID0gcmVxdWlyZSgncGF0aCcpLFxuICAgIGNvcmUgPSByZXF1aXJlKCcuLi9jb3JlJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKClcbntcbiAgICByZXR1cm4gZnVuY3Rpb24gKHJlc291cmNlLCBuZXh0KVxuICAgIHtcbiAgICAgICAgLy8gc2tpcCBpZiBubyBkYXRhLCBpdHMgbm90IGpzb24sIG9yIGl0IGlzbid0IHNwcml0ZXNoZWV0IGRhdGFcbiAgICAgICAgaWYgKCFyZXNvdXJjZS5kYXRhIHx8ICFyZXNvdXJjZS5pc0pzb24gfHwgIXJlc291cmNlLmRhdGEuZnJhbWVzKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gbmV4dCgpO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGxvYWRPcHRpb25zID0ge1xuICAgICAgICAgICAgY3Jvc3NPcmlnaW46IHJlc291cmNlLmNyb3NzT3JpZ2luLFxuICAgICAgICAgICAgbG9hZFR5cGU6IFJlc291cmNlLkxPQURfVFlQRS5JTUFHRSxcbiAgICAgICAgICAgIG1ldGFkYXRhOiByZXNvdXJjZS5tZXRhZGF0YS5pbWFnZU1ldGFkYXRhXG4gICAgICAgIH07XG5cbiAgICAgICAgdmFyIHJvdXRlID0gcGF0aC5kaXJuYW1lKHJlc291cmNlLnVybC5yZXBsYWNlKHRoaXMuYmFzZVVybCwgJycpKTtcblxuICAgICAgICB2YXIgcmVzb2x1dGlvbiA9IGNvcmUudXRpbHMuZ2V0UmVzb2x1dGlvbk9mVXJsKCByZXNvdXJjZS51cmwgKTtcblxuICAgICAgICAvLyBsb2FkIHRoZSBpbWFnZSBmb3IgdGhpcyBzaGVldFxuICAgICAgICB0aGlzLmFkZChyZXNvdXJjZS5uYW1lICsgJ19pbWFnZScsIHJvdXRlICsgJy8nICsgcmVzb3VyY2UuZGF0YS5tZXRhLmltYWdlLCBsb2FkT3B0aW9ucywgZnVuY3Rpb24gKHJlcylcbiAgICAgICAge1xuICAgICAgICAgICAgcmVzb3VyY2UudGV4dHVyZXMgPSB7fTtcblxuICAgICAgICAgICAgdmFyIGZyYW1lcyA9IHJlc291cmNlLmRhdGEuZnJhbWVzO1xuXG4gICAgICAgICAgICBmb3IgKHZhciBpIGluIGZyYW1lcylcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB2YXIgcmVjdCA9IGZyYW1lc1tpXS5mcmFtZTtcblxuICAgICAgICAgICAgICAgIGlmIChyZWN0KVxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHNpemUgPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICB2YXIgdHJpbSA9IG51bGw7XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKGZyYW1lc1tpXS5yb3RhdGVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzaXplID0gbmV3IGNvcmUuUmVjdGFuZ2xlKHJlY3QueCwgcmVjdC55LCByZWN0LmgsIHJlY3Qudyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzaXplID0gbmV3IGNvcmUuUmVjdGFuZ2xlKHJlY3QueCwgcmVjdC55LCByZWN0LncsIHJlY3QuaCk7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAvLyAgQ2hlY2sgdG8gc2VlIGlmIHRoZSBzcHJpdGUgaXMgdHJpbW1lZFxuICAgICAgICAgICAgICAgICAgICBpZiAoZnJhbWVzW2ldLnRyaW1tZWQpXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRyaW0gPSBuZXcgY29yZS5SZWN0YW5nbGUoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJhbWVzW2ldLnNwcml0ZVNvdXJjZVNpemUueCAvIHJlc29sdXRpb24sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJhbWVzW2ldLnNwcml0ZVNvdXJjZVNpemUueSAvIHJlc29sdXRpb24sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJhbWVzW2ldLnNvdXJjZVNpemUudyAvIHJlc29sdXRpb24sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJhbWVzW2ldLnNvdXJjZVNpemUuaCAvIHJlc29sdXRpb25cbiAgICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgLy8gZmxpcCB0aGUgd2lkdGggYW5kIGhlaWdodCFcbiAgICAgICAgICAgICAgICAgICAgaWYgKGZyYW1lc1tpXS5yb3RhdGVkKVxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgdGVtcCA9IHNpemUud2lkdGg7XG4gICAgICAgICAgICAgICAgICAgICAgICBzaXplLndpZHRoID0gc2l6ZS5oZWlnaHQ7XG4gICAgICAgICAgICAgICAgICAgICAgICBzaXplLmhlaWdodCA9IHRlbXA7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBzaXplLnggLz0gcmVzb2x1dGlvbjtcbiAgICAgICAgICAgICAgICAgICAgc2l6ZS55IC89IHJlc29sdXRpb247XG4gICAgICAgICAgICAgICAgICAgIHNpemUud2lkdGggLz0gcmVzb2x1dGlvbjtcbiAgICAgICAgICAgICAgICAgICAgc2l6ZS5oZWlnaHQgLz0gcmVzb2x1dGlvbjtcblxuICAgICAgICAgICAgICAgICAgICByZXNvdXJjZS50ZXh0dXJlc1tpXSA9IG5ldyBjb3JlLlRleHR1cmUocmVzLnRleHR1cmUuYmFzZVRleHR1cmUsIHNpemUsIHNpemUuY2xvbmUoKSwgdHJpbSwgZnJhbWVzW2ldLnJvdGF0ZWQpO1xuXG4gICAgICAgICAgICAgICAgICAgIC8vIGxldHMgYWxzbyBhZGQgdGhlIGZyYW1lIHRvIHBpeGkncyBnbG9iYWwgY2FjaGUgZm9yIGZyb21GcmFtZSBhbmQgZnJvbUltYWdlIGZ1bmN0aW9uc1xuICAgICAgICAgICAgICAgICAgICBjb3JlLnV0aWxzLlRleHR1cmVDYWNoZVtpXSA9IHJlc291cmNlLnRleHR1cmVzW2ldO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgbmV4dCgpO1xuICAgICAgICB9KTtcbiAgICB9O1xufTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vY29yZScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICgpXG57XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChyZXNvdXJjZSwgbmV4dClcbiAgICB7XG4gICAgICAgIC8vIGNyZWF0ZSBhIG5ldyB0ZXh0dXJlIGlmIHRoZSBkYXRhIGlzIGFuIEltYWdlIG9iamVjdFxuICAgICAgICBpZiAocmVzb3VyY2UuZGF0YSAmJiByZXNvdXJjZS5pc0ltYWdlKVxuICAgICAgICB7XG4gICAgICAgICAgICB2YXIgYmFzZVRleHR1cmUgPSBuZXcgY29yZS5CYXNlVGV4dHVyZShyZXNvdXJjZS5kYXRhLCBudWxsLCBjb3JlLnV0aWxzLmdldFJlc29sdXRpb25PZlVybChyZXNvdXJjZS51cmwpKTtcbiAgICAgICAgICAgIGJhc2VUZXh0dXJlLmltYWdlVXJsID0gcmVzb3VyY2UudXJsO1xuICAgICAgICAgICAgcmVzb3VyY2UudGV4dHVyZSA9IG5ldyBjb3JlLlRleHR1cmUoYmFzZVRleHR1cmUpO1xuICAgICAgICAgICAgLy8gbGV0cyBhbHNvIGFkZCB0aGUgZnJhbWUgdG8gcGl4aSdzIGdsb2JhbCBjYWNoZSBmb3IgZnJvbUZyYW1lIGFuZCBmcm9tSW1hZ2UgZnVjbnRpb25zXG4gICAgICAgICAgICBjb3JlLnV0aWxzLkJhc2VUZXh0dXJlQ2FjaGVbcmVzb3VyY2UudXJsXSA9IGJhc2VUZXh0dXJlO1xuICAgICAgICAgICAgY29yZS51dGlscy5UZXh0dXJlQ2FjaGVbcmVzb3VyY2UudXJsXSA9IHJlc291cmNlLnRleHR1cmU7XG4gICAgICAgIH1cblxuICAgICAgICBuZXh0KCk7XG4gICAgfTtcbn07XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uL2NvcmUnKSxcbiAgICB0ZW1wUG9pbnQgPSBuZXcgY29yZS5Qb2ludCgpLFxuICAgIHRlbXBQb2x5Z29uID0gbmV3IGNvcmUuUG9seWdvbigpO1xuXG4vKipcbiAqIEJhc2UgbWVzaCBjbGFzc1xuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLkNvbnRhaW5lclxuICogQG1lbWJlcm9mIFBJWEkubWVzaFxuICogQHBhcmFtIHRleHR1cmUge1BJWEkuVGV4dHVyZX0gVGhlIHRleHR1cmUgdG8gdXNlXG4gKiBAcGFyYW0gW3ZlcnRpY2VzXSB7RmxvYXQzMkFycmF5fSBpZiB5b3Ugd2FudCB0byBzcGVjaWZ5IHRoZSB2ZXJ0aWNlc1xuICogQHBhcmFtIFt1dnNdIHtGbG9hdDMyQXJyYXl9IGlmIHlvdSB3YW50IHRvIHNwZWNpZnkgdGhlIHV2c1xuICogQHBhcmFtIFtpbmRpY2VzXSB7VWludDE2QXJyYXl9IGlmIHlvdSB3YW50IHRvIHNwZWNpZnkgdGhlIGluZGljZXNcbiAqIEBwYXJhbSBbZHJhd01vZGVdIHtudW1iZXJ9IHRoZSBkcmF3TW9kZSwgY2FuIGJlIGFueSBvZiB0aGUgTWVzaC5EUkFXX01PREVTIGNvbnN0c1xuICovXG5mdW5jdGlvbiBNZXNoKHRleHR1cmUsIHZlcnRpY2VzLCB1dnMsIGluZGljZXMsIGRyYXdNb2RlKVxue1xuICAgIGNvcmUuQ29udGFpbmVyLmNhbGwodGhpcyk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgdGV4dHVyZSBvZiB0aGUgTWVzaFxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5UZXh0dXJlfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fdGV4dHVyZSA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgVXZzIG9mIHRoZSBNZXNoXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtGbG9hdDMyQXJyYXl9XG4gICAgICovXG4gICAgdGhpcy51dnMgPSB1dnMgfHwgbmV3IEZsb2F0MzJBcnJheShbMCwgMCxcbiAgICAgICAgMSwgMCxcbiAgICAgICAgMSwgMSxcbiAgICAgICAgMCwgMV0pO1xuXG4gICAgLyoqXG4gICAgICogQW4gYXJyYXkgb2YgdmVydGljZXNcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge0Zsb2F0MzJBcnJheX1cbiAgICAgKi9cbiAgICB0aGlzLnZlcnRpY2VzID0gdmVydGljZXMgfHwgbmV3IEZsb2F0MzJBcnJheShbMCwgMCxcbiAgICAgICAgMTAwLCAwLFxuICAgICAgICAxMDAsIDEwMCxcbiAgICAgICAgMCwgMTAwXSk7XG5cbiAgICAvKlxuICAgICAqIEBtZW1iZXIge1VpbnQxNkFycmF5fSBBbiBhcnJheSBjb250YWluaW5nIHRoZSBpbmRpY2VzIG9mIHRoZSB2ZXJ0aWNlc1xuICAgICAqL1xuICAgIC8vICBUT0RPIGF1dG8gZ2VuZXJhdGUgdGhpcyBiYXNlZCBvbiBkcmF3IG1vZGUhXG4gICAgdGhpcy5pbmRpY2VzID0gaW5kaWNlcyB8fCBuZXcgVWludDE2QXJyYXkoWzAsIDEsIDMsIDJdKTtcblxuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgdGhlIE1lc2ggaXMgZGlydHkgb3Igbm90XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqL1xuICAgIHRoaXMuZGlydHkgPSB0cnVlO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGJsZW5kIG1vZGUgdG8gYmUgYXBwbGllZCB0byB0aGUgc3ByaXRlLiBTZXQgdG8gYFBJWEkuQkxFTkRfTU9ERVMuTk9STUFMYCB0byByZW1vdmUgYW55IGJsZW5kIG1vZGUuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgUElYSS5CTEVORF9NT0RFUy5OT1JNQUxcbiAgICAgKiBAc2VlIFBJWEkuQkxFTkRfTU9ERVNcbiAgICAgKi9cbiAgICB0aGlzLmJsZW5kTW9kZSA9IGNvcmUuQkxFTkRfTU9ERVMuTk9STUFMO1xuXG4gICAgLyoqXG4gICAgICogVHJpYW5nbGVzIGluIGNhbnZhcyBtb2RlIGFyZSBhdXRvbWF0aWNhbGx5IGFudGlhbGlhc2VkLCB1c2UgdGhpcyB2YWx1ZSB0byBmb3JjZSB0cmlhbmdsZXMgdG8gb3ZlcmxhcCBhIGJpdCB3aXRoIGVhY2ggb3RoZXIuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy5jYW52YXNQYWRkaW5nID0gMDtcblxuICAgIC8qKlxuICAgICAqIFRoZSB3YXkgdGhlIE1lc2ggc2hvdWxkIGJlIGRyYXduLCBjYW4gYmUgYW55IG9mIHRoZSB7QGxpbmsgUElYSS5tZXNoLk1lc2guRFJBV19NT0RFU30gY29uc3RzXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQHNlZSBQSVhJLm1lc2guTWVzaC5EUkFXX01PREVTXG4gICAgICovXG4gICAgdGhpcy5kcmF3TW9kZSA9IGRyYXdNb2RlIHx8IE1lc2guRFJBV19NT0RFUy5UUklBTkdMRV9NRVNIO1xuXG4gICAgLy8gcnVuIHRleHR1cmUgc2V0dGVyO1xuICAgIHRoaXMudGV4dHVyZSA9IHRleHR1cmU7XG5cbiAgICAgLyoqXG4gICAgICogVGhlIGRlZmF1bHQgc2hhZGVyIHRoYXQgaXMgdXNlZCBpZiBhIG1lc2ggZG9lc24ndCBoYXZlIGEgbW9yZSBzcGVjaWZpYyBvbmUuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlNoYWRlcn1cbiAgICAgKi9cbiAgICB0aGlzLnNoYWRlciA9IG51bGw7XG59XG5cbi8vIGNvbnN0cnVjdG9yXG5NZXNoLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoY29yZS5Db250YWluZXIucHJvdG90eXBlKTtcbk1lc2gucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gTWVzaDtcbm1vZHVsZS5leHBvcnRzID0gTWVzaDtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoTWVzaC5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBUaGUgdGV4dHVyZSB0aGF0IHRoZSBzcHJpdGUgaXMgdXNpbmdcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuVGV4dHVyZX1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5tZXNoLk1lc2gjXG4gICAgICovXG4gICAgdGV4dHVyZToge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiAgdGhpcy5fdGV4dHVyZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGlmICh0aGlzLl90ZXh0dXJlID09PSB2YWx1ZSlcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuX3RleHR1cmUgPSB2YWx1ZTtcblxuICAgICAgICAgICAgaWYgKHZhbHVlKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIC8vIHdhaXQgZm9yIHRoZSB0ZXh0dXJlIHRvIGxvYWRcbiAgICAgICAgICAgICAgICBpZiAodmFsdWUuYmFzZVRleHR1cmUuaGFzTG9hZGVkKVxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fb25UZXh0dXJlVXBkYXRlKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlLm9uY2UoJ3VwZGF0ZScsIHRoaXMuX29uVGV4dHVyZVVwZGF0ZSwgdGhpcyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxufSk7XG5cbi8qKlxuICogUmVuZGVycyB0aGUgb2JqZWN0IHVzaW5nIHRoZSBXZWJHTCByZW5kZXJlclxuICpcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5XZWJHTFJlbmRlcmVyfSBhIHJlZmVyZW5jZSB0byB0aGUgV2ViR0wgcmVuZGVyZXJcbiAqIEBwcml2YXRlXG4gKi9cbk1lc2gucHJvdG90eXBlLl9yZW5kZXJXZWJHTCA9IGZ1bmN0aW9uIChyZW5kZXJlcilcbntcbiAgICByZW5kZXJlci5zZXRPYmplY3RSZW5kZXJlcihyZW5kZXJlci5wbHVnaW5zLm1lc2gpO1xuICAgIHJlbmRlcmVyLnBsdWdpbnMubWVzaC5yZW5kZXIodGhpcyk7XG59O1xuXG4vKipcbiAqIFJlbmRlcnMgdGhlIG9iamVjdCB1c2luZyB0aGUgQ2FudmFzIHJlbmRlcmVyXG4gKlxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLkNhbnZhc1JlbmRlcmVyfVxuICogQHByaXZhdGVcbiAqL1xuTWVzaC5wcm90b3R5cGUuX3JlbmRlckNhbnZhcyA9IGZ1bmN0aW9uIChyZW5kZXJlcilcbntcbiAgICB2YXIgY29udGV4dCA9IHJlbmRlcmVyLmNvbnRleHQ7XG5cbiAgICB2YXIgdHJhbnNmb3JtID0gdGhpcy53b3JsZFRyYW5zZm9ybTtcblxuICAgIGlmIChyZW5kZXJlci5yb3VuZFBpeGVscylcbiAgICB7XG4gICAgICAgIGNvbnRleHQuc2V0VHJhbnNmb3JtKHRyYW5zZm9ybS5hLCB0cmFuc2Zvcm0uYiwgdHJhbnNmb3JtLmMsIHRyYW5zZm9ybS5kLCB0cmFuc2Zvcm0udHggfCAwLCB0cmFuc2Zvcm0udHkgfCAwKTtcbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgY29udGV4dC5zZXRUcmFuc2Zvcm0odHJhbnNmb3JtLmEsIHRyYW5zZm9ybS5iLCB0cmFuc2Zvcm0uYywgdHJhbnNmb3JtLmQsIHRyYW5zZm9ybS50eCwgdHJhbnNmb3JtLnR5KTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5kcmF3TW9kZSA9PT0gTWVzaC5EUkFXX01PREVTLlRSSUFOR0xFX01FU0gpXG4gICAge1xuICAgICAgICB0aGlzLl9yZW5kZXJDYW52YXNUcmlhbmdsZU1lc2goY29udGV4dCk7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHRoaXMuX3JlbmRlckNhbnZhc1RyaWFuZ2xlcyhjb250ZXh0KTtcbiAgICB9XG59O1xuXG4vKipcbiAqIERyYXdzIHRoZSBvYmplY3QgaW4gVHJpYW5nbGUgTWVzaCBtb2RlIHVzaW5nIGNhbnZhc1xuICpcbiAqIEBwYXJhbSBjb250ZXh0IHtDYW52YXNSZW5kZXJpbmdDb250ZXh0MkR9IHRoZSBjdXJyZW50IGRyYXdpbmcgY29udGV4dFxuICogQHByaXZhdGVcbiAqL1xuTWVzaC5wcm90b3R5cGUuX3JlbmRlckNhbnZhc1RyaWFuZ2xlTWVzaCA9IGZ1bmN0aW9uIChjb250ZXh0KVxue1xuICAgIC8vIGRyYXcgdHJpYW5nbGVzISFcbiAgICB2YXIgdmVydGljZXMgPSB0aGlzLnZlcnRpY2VzO1xuICAgIHZhciB1dnMgPSB0aGlzLnV2cztcblxuICAgIHZhciBsZW5ndGggPSB2ZXJ0aWNlcy5sZW5ndGggLyAyO1xuICAgIC8vIHRoaXMuY291bnQrKztcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoIC0gMjsgaSsrKVxuICAgIHtcbiAgICAgICAgLy8gZHJhdyBzb21lIHRyaWFuZ2xlcyFcbiAgICAgICAgdmFyIGluZGV4ID0gaSAqIDI7XG4gICAgICAgIHRoaXMuX3JlbmRlckNhbnZhc0RyYXdUcmlhbmdsZShjb250ZXh0LCB2ZXJ0aWNlcywgdXZzLCBpbmRleCwgKGluZGV4ICsgMiksIChpbmRleCArIDQpKTtcbiAgICB9XG59O1xuXG4vKipcbiAqIERyYXdzIHRoZSBvYmplY3QgaW4gdHJpYW5nbGUgbW9kZSB1c2luZyBjYW52YXNcbiAqXG4gKiBAcGFyYW0gY29udGV4dCB7Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEfSB0aGUgY3VycmVudCBkcmF3aW5nIGNvbnRleHRcbiAqIEBwcml2YXRlXG4gKi9cbk1lc2gucHJvdG90eXBlLl9yZW5kZXJDYW52YXNUcmlhbmdsZXMgPSBmdW5jdGlvbiAoY29udGV4dClcbntcbiAgICAvLyBkcmF3IHRyaWFuZ2xlcyEhXG4gICAgdmFyIHZlcnRpY2VzID0gdGhpcy52ZXJ0aWNlcztcbiAgICB2YXIgdXZzID0gdGhpcy51dnM7XG4gICAgdmFyIGluZGljZXMgPSB0aGlzLmluZGljZXM7XG5cbiAgICB2YXIgbGVuZ3RoID0gaW5kaWNlcy5sZW5ndGg7XG4gICAgLy8gdGhpcy5jb3VudCsrO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7IGkgKz0gMylcbiAgICB7XG4gICAgICAgIC8vIGRyYXcgc29tZSB0cmlhbmdsZXMhXG4gICAgICAgIHZhciBpbmRleDAgPSBpbmRpY2VzW2ldICogMiwgaW5kZXgxID0gaW5kaWNlc1tpICsgMV0gKiAyLCBpbmRleDIgPSBpbmRpY2VzW2kgKyAyXSAqIDI7XG4gICAgICAgIHRoaXMuX3JlbmRlckNhbnZhc0RyYXdUcmlhbmdsZShjb250ZXh0LCB2ZXJ0aWNlcywgdXZzLCBpbmRleDAsIGluZGV4MSwgaW5kZXgyKTtcbiAgICB9XG59O1xuXG4vKipcbiAqIERyYXdzIG9uZSBvZiB0aGUgdHJpYW5nbGVzIHRoYXQgZm9ybSB0aGlzIE1lc2hcbiAqXG4gKiBAcGFyYW0gY29udGV4dCB7Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEfSB0aGUgY3VycmVudCBkcmF3aW5nIGNvbnRleHRcbiAqIEBwYXJhbSB2ZXJ0aWNlcyB7RmxvYXQzMkFycmF5fSBhIHJlZmVyZW5jZSB0byB0aGUgdmVydGljZXMgb2YgdGhlIE1lc2hcbiAqIEBwYXJhbSB1dnMge0Zsb2F0MzJBcnJheX0gYSByZWZlcmVuY2UgdG8gdGhlIHV2cyBvZiB0aGUgTWVzaFxuICogQHBhcmFtIGluZGV4MCB7bnVtYmVyfSB0aGUgaW5kZXggb2YgdGhlIGZpcnN0IHZlcnRleFxuICogQHBhcmFtIGluZGV4MSB7bnVtYmVyfSB0aGUgaW5kZXggb2YgdGhlIHNlY29uZCB2ZXJ0ZXhcbiAqIEBwYXJhbSBpbmRleDIge251bWJlcn0gdGhlIGluZGV4IG9mIHRoZSB0aGlyZCB2ZXJ0ZXhcbiAqIEBwcml2YXRlXG4gKi9cbk1lc2gucHJvdG90eXBlLl9yZW5kZXJDYW52YXNEcmF3VHJpYW5nbGUgPSBmdW5jdGlvbiAoY29udGV4dCwgdmVydGljZXMsIHV2cywgaW5kZXgwLCBpbmRleDEsIGluZGV4MilcbntcbiAgICB2YXIgdGV4dHVyZVNvdXJjZSA9IHRoaXMuX3RleHR1cmUuYmFzZVRleHR1cmUuc291cmNlO1xuICAgIHZhciB0ZXh0dXJlV2lkdGggPSB0aGlzLl90ZXh0dXJlLmJhc2VUZXh0dXJlLndpZHRoO1xuICAgIHZhciB0ZXh0dXJlSGVpZ2h0ID0gdGhpcy5fdGV4dHVyZS5iYXNlVGV4dHVyZS5oZWlnaHQ7XG5cbiAgICB2YXIgeDAgPSB2ZXJ0aWNlc1tpbmRleDBdLCB4MSA9IHZlcnRpY2VzW2luZGV4MV0sIHgyID0gdmVydGljZXNbaW5kZXgyXTtcbiAgICB2YXIgeTAgPSB2ZXJ0aWNlc1tpbmRleDAgKyAxXSwgeTEgPSB2ZXJ0aWNlc1tpbmRleDEgKyAxXSwgeTIgPSB2ZXJ0aWNlc1tpbmRleDIgKyAxXTtcblxuICAgIHZhciB1MCA9IHV2c1tpbmRleDBdICogdGV4dHVyZVdpZHRoLCB1MSA9IHV2c1tpbmRleDFdICogdGV4dHVyZVdpZHRoLCB1MiA9IHV2c1tpbmRleDJdICogdGV4dHVyZVdpZHRoO1xuICAgIHZhciB2MCA9IHV2c1tpbmRleDAgKyAxXSAqIHRleHR1cmVIZWlnaHQsIHYxID0gdXZzW2luZGV4MSArIDFdICogdGV4dHVyZUhlaWdodCwgdjIgPSB1dnNbaW5kZXgyICsgMV0gKiB0ZXh0dXJlSGVpZ2h0O1xuXG4gICAgaWYgKHRoaXMuY2FudmFzUGFkZGluZyA+IDApXG4gICAge1xuICAgICAgICB2YXIgcGFkZGluZ1ggPSB0aGlzLmNhbnZhc1BhZGRpbmcgLyB0aGlzLndvcmxkVHJhbnNmb3JtLmE7XG4gICAgICAgIHZhciBwYWRkaW5nWSA9IHRoaXMuY2FudmFzUGFkZGluZyAvIHRoaXMud29ybGRUcmFuc2Zvcm0uZDtcbiAgICAgICAgdmFyIGNlbnRlclggPSAoeDAgKyB4MSArIHgyKSAvIDM7XG4gICAgICAgIHZhciBjZW50ZXJZID0gKHkwICsgeTEgKyB5MikgLyAzO1xuXG4gICAgICAgIHZhciBub3JtWCA9IHgwIC0gY2VudGVyWDtcbiAgICAgICAgdmFyIG5vcm1ZID0geTAgLSBjZW50ZXJZO1xuXG4gICAgICAgIHZhciBkaXN0ID0gTWF0aC5zcXJ0KG5vcm1YICogbm9ybVggKyBub3JtWSAqIG5vcm1ZKTtcbiAgICAgICAgeDAgPSBjZW50ZXJYICsgKG5vcm1YIC8gZGlzdCkgKiAoZGlzdCArIHBhZGRpbmdYKTtcbiAgICAgICAgeTAgPSBjZW50ZXJZICsgKG5vcm1ZIC8gZGlzdCkgKiAoZGlzdCArIHBhZGRpbmdZKTtcblxuICAgICAgICAvL1xuXG4gICAgICAgIG5vcm1YID0geDEgLSBjZW50ZXJYO1xuICAgICAgICBub3JtWSA9IHkxIC0gY2VudGVyWTtcblxuICAgICAgICBkaXN0ID0gTWF0aC5zcXJ0KG5vcm1YICogbm9ybVggKyBub3JtWSAqIG5vcm1ZKTtcbiAgICAgICAgeDEgPSBjZW50ZXJYICsgKG5vcm1YIC8gZGlzdCkgKiAoZGlzdCArIHBhZGRpbmdYKTtcbiAgICAgICAgeTEgPSBjZW50ZXJZICsgKG5vcm1ZIC8gZGlzdCkgKiAoZGlzdCArIHBhZGRpbmdZKTtcblxuICAgICAgICBub3JtWCA9IHgyIC0gY2VudGVyWDtcbiAgICAgICAgbm9ybVkgPSB5MiAtIGNlbnRlclk7XG5cbiAgICAgICAgZGlzdCA9IE1hdGguc3FydChub3JtWCAqIG5vcm1YICsgbm9ybVkgKiBub3JtWSk7XG4gICAgICAgIHgyID0gY2VudGVyWCArIChub3JtWCAvIGRpc3QpICogKGRpc3QgKyBwYWRkaW5nWCk7XG4gICAgICAgIHkyID0gY2VudGVyWSArIChub3JtWSAvIGRpc3QpICogKGRpc3QgKyBwYWRkaW5nWSk7XG4gICAgfVxuXG4gICAgY29udGV4dC5zYXZlKCk7XG4gICAgY29udGV4dC5iZWdpblBhdGgoKTtcblxuXG4gICAgY29udGV4dC5tb3ZlVG8oeDAsIHkwKTtcbiAgICBjb250ZXh0LmxpbmVUbyh4MSwgeTEpO1xuICAgIGNvbnRleHQubGluZVRvKHgyLCB5Mik7XG5cbiAgICBjb250ZXh0LmNsb3NlUGF0aCgpO1xuXG4gICAgY29udGV4dC5jbGlwKCk7XG5cbiAgICAvLyBDb21wdXRlIG1hdHJpeCB0cmFuc2Zvcm1cbiAgICB2YXIgZGVsdGEgPSAgKHUwICogdjEpICAgICAgKyAodjAgKiB1MikgICAgICArICh1MSAqIHYyKSAgICAgIC0gKHYxICogdTIpICAgICAgLSAodjAgKiB1MSkgICAgICAtICh1MCAqIHYyKTtcbiAgICB2YXIgZGVsdGFBID0gKHgwICogdjEpICAgICAgKyAodjAgKiB4MikgICAgICArICh4MSAqIHYyKSAgICAgIC0gKHYxICogeDIpICAgICAgLSAodjAgKiB4MSkgICAgICAtICh4MCAqIHYyKTtcbiAgICB2YXIgZGVsdGFCID0gKHUwICogeDEpICAgICAgKyAoeDAgKiB1MikgICAgICArICh1MSAqIHgyKSAgICAgIC0gKHgxICogdTIpICAgICAgLSAoeDAgKiB1MSkgICAgICAtICh1MCAqIHgyKTtcbiAgICB2YXIgZGVsdGFDID0gKHUwICogdjEgKiB4MikgKyAodjAgKiB4MSAqIHUyKSArICh4MCAqIHUxICogdjIpIC0gKHgwICogdjEgKiB1MikgLSAodjAgKiB1MSAqIHgyKSAtICh1MCAqIHgxICogdjIpO1xuICAgIHZhciBkZWx0YUQgPSAoeTAgKiB2MSkgICAgICArICh2MCAqIHkyKSAgICAgICsgKHkxICogdjIpICAgICAgLSAodjEgKiB5MikgICAgICAtICh2MCAqIHkxKSAgICAgIC0gKHkwICogdjIpO1xuICAgIHZhciBkZWx0YUUgPSAodTAgKiB5MSkgICAgICArICh5MCAqIHUyKSAgICAgICsgKHUxICogeTIpICAgICAgLSAoeTEgKiB1MikgICAgICAtICh5MCAqIHUxKSAgICAgIC0gKHUwICogeTIpO1xuICAgIHZhciBkZWx0YUYgPSAodTAgKiB2MSAqIHkyKSArICh2MCAqIHkxICogdTIpICsgKHkwICogdTEgKiB2MikgLSAoeTAgKiB2MSAqIHUyKSAtICh2MCAqIHUxICogeTIpIC0gKHUwICogeTEgKiB2Mik7XG5cbiAgICBjb250ZXh0LnRyYW5zZm9ybShkZWx0YUEgLyBkZWx0YSwgZGVsdGFEIC8gZGVsdGEsXG4gICAgICAgIGRlbHRhQiAvIGRlbHRhLCBkZWx0YUUgLyBkZWx0YSxcbiAgICAgICAgZGVsdGFDIC8gZGVsdGEsIGRlbHRhRiAvIGRlbHRhKTtcblxuICAgIGNvbnRleHQuZHJhd0ltYWdlKHRleHR1cmVTb3VyY2UsIDAsIDApO1xuICAgIGNvbnRleHQucmVzdG9yZSgpO1xufTtcblxuXG5cbi8qKlxuICogUmVuZGVycyBhIGZsYXQgTWVzaFxuICpcbiAqIEBwYXJhbSBNZXNoIHtQSVhJLm1lc2guTWVzaH0gVGhlIE1lc2ggdG8gcmVuZGVyXG4gKiBAcHJpdmF0ZVxuICovXG5NZXNoLnByb3RvdHlwZS5yZW5kZXJNZXNoRmxhdCA9IGZ1bmN0aW9uIChNZXNoKVxue1xuICAgIHZhciBjb250ZXh0ID0gdGhpcy5jb250ZXh0O1xuICAgIHZhciB2ZXJ0aWNlcyA9IE1lc2gudmVydGljZXM7XG5cbiAgICB2YXIgbGVuZ3RoID0gdmVydGljZXMubGVuZ3RoLzI7XG4gICAgLy8gdGhpcy5jb3VudCsrO1xuXG4gICAgY29udGV4dC5iZWdpblBhdGgoKTtcbiAgICBmb3IgKHZhciBpPTE7IGkgPCBsZW5ndGgtMjsgaSsrKVxuICAgIHtcbiAgICAgICAgLy8gZHJhdyBzb21lIHRyaWFuZ2xlcyFcbiAgICAgICAgdmFyIGluZGV4ID0gaSoyO1xuXG4gICAgICAgIHZhciB4MCA9IHZlcnRpY2VzW2luZGV4XSwgICB4MSA9IHZlcnRpY2VzW2luZGV4KzJdLCB4MiA9IHZlcnRpY2VzW2luZGV4KzRdO1xuICAgICAgICB2YXIgeTAgPSB2ZXJ0aWNlc1tpbmRleCsxXSwgeTEgPSB2ZXJ0aWNlc1tpbmRleCszXSwgeTIgPSB2ZXJ0aWNlc1tpbmRleCs1XTtcblxuICAgICAgICBjb250ZXh0Lm1vdmVUbyh4MCwgeTApO1xuICAgICAgICBjb250ZXh0LmxpbmVUbyh4MSwgeTEpO1xuICAgICAgICBjb250ZXh0LmxpbmVUbyh4MiwgeTIpO1xuICAgIH1cblxuICAgIGNvbnRleHQuZmlsbFN0eWxlID0gJyNGRjAwMDAnO1xuICAgIGNvbnRleHQuZmlsbCgpO1xuICAgIGNvbnRleHQuY2xvc2VQYXRoKCk7XG59O1xuXG4vKipcbiAqIFdoZW4gdGhlIHRleHR1cmUgaXMgdXBkYXRlZCwgdGhpcyBldmVudCB3aWxsIGZpcmUgdG8gdXBkYXRlIHRoZSBzY2FsZSBhbmQgZnJhbWVcbiAqXG4gKiBAcGFyYW0gZXZlbnRcbiAqIEBwcml2YXRlXG4gKi9cbk1lc2gucHJvdG90eXBlLl9vblRleHR1cmVVcGRhdGUgPSBmdW5jdGlvbiAoKVxue1xuICAgIHRoaXMudXBkYXRlRnJhbWUgPSB0cnVlO1xufTtcblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBib3VuZHMgb2YgdGhlIG1lc2ggYXMgYSByZWN0YW5nbGUuIFRoZSBib3VuZHMgY2FsY3VsYXRpb24gdGFrZXMgdGhlIHdvcmxkVHJhbnNmb3JtIGludG8gYWNjb3VudC5cbiAqXG4gKiBAcGFyYW0gbWF0cml4IHtQSVhJLk1hdHJpeH0gdGhlIHRyYW5zZm9ybWF0aW9uIG1hdHJpeCBvZiB0aGUgc3ByaXRlXG4gKiBAcmV0dXJuIHtQSVhJLlJlY3RhbmdsZX0gdGhlIGZyYW1pbmcgcmVjdGFuZ2xlXG4gKi9cbk1lc2gucHJvdG90eXBlLmdldEJvdW5kcyA9IGZ1bmN0aW9uIChtYXRyaXgpXG57XG4gICAgaWYgKCF0aGlzLl9jdXJyZW50Qm91bmRzKSB7XG4gICAgICAgIHZhciB3b3JsZFRyYW5zZm9ybSA9IG1hdHJpeCB8fCB0aGlzLndvcmxkVHJhbnNmb3JtO1xuXG4gICAgICAgIHZhciBhID0gd29ybGRUcmFuc2Zvcm0uYTtcbiAgICAgICAgdmFyIGIgPSB3b3JsZFRyYW5zZm9ybS5iO1xuICAgICAgICB2YXIgYyA9IHdvcmxkVHJhbnNmb3JtLmM7XG4gICAgICAgIHZhciBkID0gd29ybGRUcmFuc2Zvcm0uZDtcbiAgICAgICAgdmFyIHR4ID0gd29ybGRUcmFuc2Zvcm0udHg7XG4gICAgICAgIHZhciB0eSA9IHdvcmxkVHJhbnNmb3JtLnR5O1xuXG4gICAgICAgIHZhciBtYXhYID0gLUluZmluaXR5O1xuICAgICAgICB2YXIgbWF4WSA9IC1JbmZpbml0eTtcblxuICAgICAgICB2YXIgbWluWCA9IEluZmluaXR5O1xuICAgICAgICB2YXIgbWluWSA9IEluZmluaXR5O1xuXG4gICAgICAgIHZhciB2ZXJ0aWNlcyA9IHRoaXMudmVydGljZXM7XG4gICAgICAgIGZvciAodmFyIGkgPSAwLCBuID0gdmVydGljZXMubGVuZ3RoOyBpIDwgbjsgaSArPSAyKSB7XG4gICAgICAgICAgICB2YXIgcmF3WCA9IHZlcnRpY2VzW2ldLCByYXdZID0gdmVydGljZXNbaSArIDFdO1xuICAgICAgICAgICAgdmFyIHggPSAoYSAqIHJhd1gpICsgKGMgKiByYXdZKSArIHR4O1xuICAgICAgICAgICAgdmFyIHkgPSAoZCAqIHJhd1kpICsgKGIgKiByYXdYKSArIHR5O1xuXG4gICAgICAgICAgICBtaW5YID0geCA8IG1pblggPyB4IDogbWluWDtcbiAgICAgICAgICAgIG1pblkgPSB5IDwgbWluWSA/IHkgOiBtaW5ZO1xuXG4gICAgICAgICAgICBtYXhYID0geCA+IG1heFggPyB4IDogbWF4WDtcbiAgICAgICAgICAgIG1heFkgPSB5ID4gbWF4WSA/IHkgOiBtYXhZO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG1pblggPT09IC1JbmZpbml0eSB8fCBtYXhZID09PSBJbmZpbml0eSkge1xuICAgICAgICAgICAgcmV0dXJuIGNvcmUuUmVjdGFuZ2xlLkVNUFRZO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGJvdW5kcyA9IHRoaXMuX2JvdW5kcztcblxuICAgICAgICBib3VuZHMueCA9IG1pblg7XG4gICAgICAgIGJvdW5kcy53aWR0aCA9IG1heFggLSBtaW5YO1xuXG4gICAgICAgIGJvdW5kcy55ID0gbWluWTtcbiAgICAgICAgYm91bmRzLmhlaWdodCA9IG1heFkgLSBtaW5ZO1xuXG4gICAgICAgIC8vIHN0b3JlIGEgcmVmZXJlbmNlIHNvIHRoYXQgaWYgdGhpcyBmdW5jdGlvbiBnZXRzIGNhbGxlZCBhZ2FpbiBpbiB0aGUgcmVuZGVyIGN5Y2xlIHdlIGRvIG5vdCBoYXZlIHRvIHJlY2FsY3VsYXRlXG4gICAgICAgIHRoaXMuX2N1cnJlbnRCb3VuZHMgPSBib3VuZHM7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuX2N1cnJlbnRCb3VuZHM7XG59O1xuXG4vKipcbiAqIFRlc3RzIGlmIGEgcG9pbnQgaXMgaW5zaWRlIHRoaXMgbWVzaC4gV29ya3Mgb25seSBmb3IgVFJJQU5HTEVfTUVTSFxuICpcbiAqIEBwYXJhbSBwb2ludCB7UElYSS5Qb2ludH0gdGhlIHBvaW50IHRvIHRlc3RcbiAqIEByZXR1cm4ge2Jvb2xlYW59IHRoZSByZXN1bHQgb2YgdGhlIHRlc3RcbiAqL1xuTWVzaC5wcm90b3R5cGUuY29udGFpbnNQb2ludCA9IGZ1bmN0aW9uKCBwb2ludCApIHtcbiAgICBpZiAoIXRoaXMuZ2V0Qm91bmRzKCkuY29udGFpbnMocG9pbnQueCwgcG9pbnQueSkpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICB0aGlzLndvcmxkVHJhbnNmb3JtLmFwcGx5SW52ZXJzZShwb2ludCwgIHRlbXBQb2ludCk7XG5cbiAgICB2YXIgdmVydGljZXMgPSB0aGlzLnZlcnRpY2VzO1xuICAgIHZhciBwb2ludHMgPSB0ZW1wUG9seWdvbi5wb2ludHM7XG4gICAgdmFyIGksIGxlbjtcblxuICAgIGlmICh0aGlzLmRyYXdNb2RlID09PSBNZXNoLkRSQVdfTU9ERVMuVFJJQU5HTEVTKSB7XG4gICAgICAgIHZhciBpbmRpY2VzID0gdGhpcy5pbmRpY2VzO1xuICAgICAgICBsZW4gPSB0aGlzLmluZGljZXMubGVuZ3RoO1xuICAgICAgICAvL1RPRE86IGlubGluZSB0aGlzLlxuICAgICAgICBmb3IgKGk9MDtpPGxlbjtpKz0zKSB7XG4gICAgICAgICAgICB2YXIgaW5kMCA9IGluZGljZXNbaV0qMiwgaW5kMSA9IGluZGljZXNbaSsxXSoyLCBpbmQyID0gaW5kaWNlc1tpKzJdKjI7XG4gICAgICAgICAgICBwb2ludHNbMF0gPSB2ZXJ0aWNlc1tpbmQwXTtcbiAgICAgICAgICAgIHBvaW50c1sxXSA9IHZlcnRpY2VzW2luZDArMV07XG4gICAgICAgICAgICBwb2ludHNbMl0gPSB2ZXJ0aWNlc1tpbmQxXTtcbiAgICAgICAgICAgIHBvaW50c1szXSA9IHZlcnRpY2VzW2luZDErMV07XG4gICAgICAgICAgICBwb2ludHNbNF0gPSB2ZXJ0aWNlc1tpbmQyXTtcbiAgICAgICAgICAgIHBvaW50c1s1XSA9IHZlcnRpY2VzW2luZDIrMV07XG4gICAgICAgICAgICBpZiAodGVtcFBvbHlnb24uY29udGFpbnModGVtcFBvaW50LngsIHRlbXBQb2ludC55KSkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgICAgbGVuID0gdmVydGljZXMubGVuZ3RoO1xuICAgICAgICBmb3IgKGk9MDtpPGxlbjtpKz02KSB7XG4gICAgICAgICAgICBwb2ludHNbMF0gPSB2ZXJ0aWNlc1tpXTtcbiAgICAgICAgICAgIHBvaW50c1sxXSA9IHZlcnRpY2VzW2krMV07XG4gICAgICAgICAgICBwb2ludHNbMl0gPSB2ZXJ0aWNlc1tpKzJdO1xuICAgICAgICAgICAgcG9pbnRzWzNdID0gdmVydGljZXNbaSszXTtcbiAgICAgICAgICAgIHBvaW50c1s0XSA9IHZlcnRpY2VzW2krNF07XG4gICAgICAgICAgICBwb2ludHNbNV0gPSB2ZXJ0aWNlc1tpKzVdO1xuICAgICAgICAgICAgaWYgKHRlbXBQb2x5Z29uLmNvbnRhaW5zKHRlbXBQb2ludC54LCB0ZW1wUG9pbnQueSkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG59O1xuXG4vKipcbiAqIERpZmZlcmVudCBkcmF3aW5nIGJ1ZmZlciBtb2RlcyBzdXBwb3J0ZWRcbiAqXG4gKiBAc3RhdGljXG4gKiBAY29uc3RhbnRcbiAqIEBwcm9wZXJ0eSB7b2JqZWN0fSBEUkFXX01PREVTXG4gKiBAcHJvcGVydHkge251bWJlcn0gRFJBV19NT0RFUy5UUklBTkdMRV9NRVNIXG4gKiBAcHJvcGVydHkge251bWJlcn0gRFJBV19NT0RFUy5UUklBTkdMRVNcbiAqL1xuTWVzaC5EUkFXX01PREVTID0ge1xuICAgIFRSSUFOR0xFX01FU0g6IDAsXG4gICAgVFJJQU5HTEVTOiAxXG59O1xuIiwidmFyIE1lc2ggPSByZXF1aXJlKCcuL01lc2gnKTtcblxuLyoqXG4gKiBUaGUgUGxhbmUgYWxsb3dzIHlvdSB0byBkcmF3IGEgdGV4dHVyZSBhY3Jvc3Mgc2V2ZXJhbCBwb2ludHMgYW5kIHRoZW0gbWFuaXB1bGF0ZSB0aGVzZSBwb2ludHNcbiAqXG4gKmBgYGpzXG4gKiBmb3IgKHZhciBpID0gMDsgaSA8IDIwOyBpKyspIHtcbiAqICAgICBwb2ludHMucHVzaChuZXcgUElYSS5Qb2ludChpICogNTAsIDApKTtcbiAqIH07XG4gKiB2YXIgUGxhbmUgPSBuZXcgUElYSS5QbGFuZShQSVhJLlRleHR1cmUuZnJvbUltYWdlKFwic25ha2UucG5nXCIpLCBwb2ludHMpO1xuICogIGBgYFxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5tZXNoLk1lc2hcbiAqIEBtZW1iZXJvZiBQSVhJLm1lc2hcbiAqIEBwYXJhbSB7UElYSS5UZXh0dXJlfSB0ZXh0dXJlIC0gVGhlIHRleHR1cmUgdG8gdXNlIG9uIHRoZSBQbGFuZS5cbiAqIEBwYXJhbSB7aW50fSBzZWdtZW50c1ggLSBUaGUgbnVtYmVyIG94IHggc2VnbWVudHNcbiAqIEBwYXJhbSB7aW50fSBzZWdtZW50c1kgLSBUaGUgbnVtYmVyIG9mIHkgc2VnbWVudHNcbiAqXG4gKi9cbmZ1bmN0aW9uIFBsYW5lKHRleHR1cmUsIHNlZ21lbnRzWCwgc2VnbWVudHNZKVxue1xuICAgIE1lc2guY2FsbCh0aGlzLCB0ZXh0dXJlKTtcblxuICAgIC8qKlxuICAgICAqIFRyYWNrZXIgZm9yIGlmIHRoZSBQbGFuZSBpcyByZWFkeSB0byBiZSBkcmF3bi4gTmVlZGVkIGJlY2F1c2UgTWVzaCBjdG9yIGNhblxuICAgICAqIGNhbGwgX29uVGV4dHVyZVVwZGF0ZWQgd2hpY2ggY291bGQgY2FsbCByZWZyZXNoIHRvbyBlYXJseS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9yZWFkeSA9IHRydWU7XG5cbiAgICB0aGlzLnNlZ21lbnRzWCA9ICBzZWdtZW50c1ggfHwgMTA7XG4gICAgdGhpcy5zZWdtZW50c1kgPSBzZWdtZW50c1kgfHwgMTA7XG5cbiAgICB0aGlzLmRyYXdNb2RlID0gTWVzaC5EUkFXX01PREVTLlRSSUFOR0xFUztcbiAgICB0aGlzLnJlZnJlc2goKTtcblxufVxuXG5cbi8vIGNvbnN0cnVjdG9yXG5QbGFuZS5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKCBNZXNoLnByb3RvdHlwZSApO1xuUGxhbmUucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gUGxhbmU7XG5tb2R1bGUuZXhwb3J0cyA9IFBsYW5lO1xuXG4vKipcbiAqIFJlZnJlc2hlc1xuICpcbiAqL1xuUGxhbmUucHJvdG90eXBlLnJlZnJlc2ggPSBmdW5jdGlvbigpXG57XG4gICAgdmFyIHRvdGFsID0gdGhpcy5zZWdtZW50c1ggKiB0aGlzLnNlZ21lbnRzWTtcbiAgICB2YXIgdmVydHMgPSBbXTtcbiAgICB2YXIgY29sb3JzID0gW107XG4gICAgdmFyIHV2cyA9IFtdO1xuICAgIHZhciBpbmRpY2VzID0gW107XG4gICAgdmFyIHRleHR1cmUgPSB0aGlzLnRleHR1cmU7XG5cbiAgLy8gIHRleHR1cmUud2lkdGggPSA4MDAgdGV4dHVyZS53aWR0aCB8fCA4MDA7XG4gLy8gICB0ZXh0dXJlLmhlaWdodCA9IDgwMC8vdGV4dHVyZS5oZWlnaHQgfHwgODAwO1xuXG4gICAgdmFyIHNlZ21lbnRzWFN1YiA9IHRoaXMuc2VnbWVudHNYIC0gMTtcbiAgICB2YXIgc2VnbWVudHNZU3ViID0gdGhpcy5zZWdtZW50c1kgLSAxO1xuICAgIHZhciBpID0gMDtcblxuICAgIHZhciBzaXplWCA9IHRleHR1cmUud2lkdGggLyBzZWdtZW50c1hTdWI7XG4gICAgdmFyIHNpemVZID0gdGV4dHVyZS5oZWlnaHQgLyBzZWdtZW50c1lTdWI7XG5cbiAgICBmb3IgKGkgPSAwOyBpIDwgdG90YWw7IGkrKykge1xuXG4gICAgICAgIHZhciB4ID0gKGkgJSB0aGlzLnNlZ21lbnRzWCk7XG4gICAgICAgIHZhciB5ID0gKCAoaSAvIHRoaXMuc2VnbWVudHNYICkgfCAwICk7XG5cblxuICAgICAgICB2ZXJ0cy5wdXNoKCh4ICogc2l6ZVgpLFxuICAgICAgICAgICAgICAgICAgICh5ICogc2l6ZVkpKTtcblxuICAgICAgICAvLyB0aGlzIHdvcmtzIGZvciByZWN0YW5ndWxhciB0ZXh0dXJlcy4gXG4gICAgICAgIHV2cy5wdXNoKHRleHR1cmUuX3V2cy54MCArICh0ZXh0dXJlLl91dnMueDEgLSB0ZXh0dXJlLl91dnMueDApICogKHggLyAodGhpcy5zZWdtZW50c1gtMSkpLCB0ZXh0dXJlLl91dnMueTAgKyAodGV4dHVyZS5fdXZzLnkzLXRleHR1cmUuX3V2cy55MCkgKiAoeS8gKHRoaXMuc2VnbWVudHNZLTEpKSk7XG4gICAgICB9XG5cbiAgICAvLyAgY29uc1xuXG4gICAgdmFyIHRvdGFsU3ViID0gc2VnbWVudHNYU3ViICogc2VnbWVudHNZU3ViO1xuXG4gICAgZm9yIChpID0gMDsgaSA8IHRvdGFsU3ViOyBpKyspIHtcblxuICAgICAgICB2YXIgeHBvcyA9IGkgJSBzZWdtZW50c1hTdWI7XG4gICAgICAgIHZhciB5cG9zID0gKGkgLyBzZWdtZW50c1hTdWIgKSB8IDA7XG5cblxuICAgICAgICB2YXIgIHZhbHVlID0gKHlwb3MgKiB0aGlzLnNlZ21lbnRzWCkgKyB4cG9zO1xuICAgICAgICB2YXIgIHZhbHVlMiA9ICh5cG9zICogdGhpcy5zZWdtZW50c1gpICsgeHBvcyArIDE7XG4gICAgICAgIHZhciAgdmFsdWUzID0gKCh5cG9zKzEpICogdGhpcy5zZWdtZW50c1gpICsgeHBvcztcbiAgICAgICAgdmFyICB2YWx1ZTQgPSAoKHlwb3MrMSkgKiB0aGlzLnNlZ21lbnRzWCkgKyB4cG9zICsgMTtcblxuICAgICAgICBpbmRpY2VzLnB1c2godmFsdWUsIHZhbHVlMiwgdmFsdWUzKTtcbiAgICAgICAgaW5kaWNlcy5wdXNoKHZhbHVlMiwgdmFsdWU0LCB2YWx1ZTMpO1xuICAgIH1cblxuXG4gICAgLy9jb25zb2xlLmxvZyhpbmRpY2VzKVxuICAgIHRoaXMudmVydGljZXMgPSBuZXcgRmxvYXQzMkFycmF5KHZlcnRzKTtcbiAgICB0aGlzLnV2cyA9IG5ldyBGbG9hdDMyQXJyYXkodXZzKTtcbiAgICB0aGlzLmNvbG9ycyA9IG5ldyBGbG9hdDMyQXJyYXkoY29sb3JzKTtcbiAgICB0aGlzLmluZGljZXMgPSBuZXcgVWludDE2QXJyYXkoaW5kaWNlcyk7XG59O1xuXG4vKipcbiAqIENsZWFyIHRleHR1cmUgVVZzIHdoZW4gbmV3IHRleHR1cmUgaXMgc2V0XG4gKlxuICogQHByaXZhdGVcbiAqL1xuUGxhbmUucHJvdG90eXBlLl9vblRleHR1cmVVcGRhdGUgPSBmdW5jdGlvbiAoKVxue1xuICAgIE1lc2gucHJvdG90eXBlLl9vblRleHR1cmVVcGRhdGUuY2FsbCh0aGlzKTtcblxuICAgIC8vIHdhaXQgZm9yIHRoZSBQbGFuZSBjdG9yIHRvIGZpbmlzaCBiZWZvcmUgY2FsbGluZyByZWZyZXNoXG4gICAgaWYgKHRoaXMuX3JlYWR5KSB7XG4gICAgICAgIHRoaXMucmVmcmVzaCgpO1xuICAgIH1cbn07XG4iLCJ2YXIgTWVzaCA9IHJlcXVpcmUoJy4vTWVzaCcpO1xudmFyIGNvcmUgPSByZXF1aXJlKCcuLi9jb3JlJyk7XG5cbi8qKlxuICogVGhlIHJvcGUgYWxsb3dzIHlvdSB0byBkcmF3IGEgdGV4dHVyZSBhY3Jvc3Mgc2V2ZXJhbCBwb2ludHMgYW5kIHRoZW0gbWFuaXB1bGF0ZSB0aGVzZSBwb2ludHNcbiAqXG4gKmBgYGpzXG4gKiBmb3IgKHZhciBpID0gMDsgaSA8IDIwOyBpKyspIHtcbiAqICAgICBwb2ludHMucHVzaChuZXcgUElYSS5Qb2ludChpICogNTAsIDApKTtcbiAqIH07XG4gKiB2YXIgcm9wZSA9IG5ldyBQSVhJLlJvcGUoUElYSS5UZXh0dXJlLmZyb21JbWFnZShcInNuYWtlLnBuZ1wiKSwgcG9pbnRzKTtcbiAqICBgYGBcbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkubWVzaC5NZXNoXG4gKiBAbWVtYmVyb2YgUElYSS5tZXNoXG4gKiBAcGFyYW0ge1BJWEkuVGV4dHVyZX0gdGV4dHVyZSAtIFRoZSB0ZXh0dXJlIHRvIHVzZSBvbiB0aGUgcm9wZS5cbiAqIEBwYXJhbSB7UElYSS5Qb2ludFtdfSBwb2ludHMgLSBBbiBhcnJheSBvZiB7QGxpbmsgUElYSS5Qb2ludH0gb2JqZWN0cyB0byBjb25zdHJ1Y3QgdGhpcyByb3BlLlxuICpcbiAqL1xuZnVuY3Rpb24gUm9wZSh0ZXh0dXJlLCBwb2ludHMpXG57XG4gICAgTWVzaC5jYWxsKHRoaXMsIHRleHR1cmUpO1xuXG4gICAgLypcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlBvaW50W119IEFuIGFycmF5IG9mIHBvaW50cyB0aGF0IGRldGVybWluZSB0aGUgcm9wZVxuICAgICAqL1xuICAgIHRoaXMucG9pbnRzID0gcG9pbnRzO1xuXG4gICAgLypcbiAgICAgKiBAbWVtYmVyIHtGbG9hdDMyQXJyYXl9IEFuIGFycmF5IG9mIHZlcnRpY2VzIHVzZWQgdG8gY29uc3RydWN0IHRoaXMgcm9wZS5cbiAgICAgKi9cbiAgICB0aGlzLnZlcnRpY2VzID0gbmV3IEZsb2F0MzJBcnJheShwb2ludHMubGVuZ3RoICogNCk7XG5cbiAgICAvKlxuICAgICAqIEBtZW1iZXIge0Zsb2F0MzJBcnJheX0gVGhlIFdlYkdMIFV2cyBvZiB0aGUgcm9wZS5cbiAgICAgKi9cbiAgICB0aGlzLnV2cyA9IG5ldyBGbG9hdDMyQXJyYXkocG9pbnRzLmxlbmd0aCAqIDQpO1xuXG4gICAgLypcbiAgICAgKiBAbWVtYmVyIHtGbG9hdDMyQXJyYXl9IEFuIGFycmF5IGNvbnRhaW5pbmcgdGhlIGNvbG9yIGNvbXBvbmVudHNcbiAgICAgKi9cbiAgICB0aGlzLmNvbG9ycyA9IG5ldyBGbG9hdDMyQXJyYXkocG9pbnRzLmxlbmd0aCAqIDIpO1xuXG4gICAgLypcbiAgICAgKiBAbWVtYmVyIHtVaW50MTZBcnJheX0gQW4gYXJyYXkgY29udGFpbmluZyB0aGUgaW5kaWNlcyBvZiB0aGUgdmVydGljZXNcbiAgICAgKi9cbiAgICB0aGlzLmluZGljZXMgPSBuZXcgVWludDE2QXJyYXkocG9pbnRzLmxlbmd0aCAqIDIpO1xuXG4gICAgLyoqXG4gICAgICogVHJhY2tlciBmb3IgaWYgdGhlIHJvcGUgaXMgcmVhZHkgdG8gYmUgZHJhd24uIE5lZWRlZCBiZWNhdXNlIE1lc2ggY3RvciBjYW5cbiAgICAgKiBjYWxsIF9vblRleHR1cmVVcGRhdGVkIHdoaWNoIGNvdWxkIGNhbGwgcmVmcmVzaCB0b28gZWFybHkuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgIHRoaXMuX3JlYWR5ID0gdHJ1ZTtcblxuICAgICB0aGlzLnJlZnJlc2goKTtcbn1cblxuXG4vLyBjb25zdHJ1Y3RvclxuUm9wZS5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKE1lc2gucHJvdG90eXBlKTtcblJvcGUucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gUm9wZTtcbm1vZHVsZS5leHBvcnRzID0gUm9wZTtcblxuLyoqXG4gKiBSZWZyZXNoZXNcbiAqXG4gKi9cblJvcGUucHJvdG90eXBlLnJlZnJlc2ggPSBmdW5jdGlvbiAoKVxue1xuICAgIHZhciBwb2ludHMgPSB0aGlzLnBvaW50cztcblxuICAgIC8vIGlmIHRvbyBsaXR0bGUgcG9pbnRzLCBvciB0ZXh0dXJlIGhhc24ndCBnb3QgVVZzIHNldCB5ZXQganVzdCBtb3ZlIG9uLlxuICAgIGlmIChwb2ludHMubGVuZ3RoIDwgMSB8fCAhdGhpcy5fdGV4dHVyZS5fdXZzKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHZhciB1dnMgPSB0aGlzLnV2cztcblxuICAgIHZhciBpbmRpY2VzID0gdGhpcy5pbmRpY2VzO1xuICAgIHZhciBjb2xvcnMgPSB0aGlzLmNvbG9ycztcblxuICAgIHZhciB0ZXh0dXJlVXZzID0gdGhpcy5fdGV4dHVyZS5fdXZzO1xuICAgIHZhciBvZmZzZXQgPSBuZXcgY29yZS5Qb2ludCh0ZXh0dXJlVXZzLngwLCB0ZXh0dXJlVXZzLnkwKTtcbiAgICB2YXIgZmFjdG9yID0gbmV3IGNvcmUuUG9pbnQodGV4dHVyZVV2cy54MiAtIHRleHR1cmVVdnMueDAsIHRleHR1cmVVdnMueTIgLSB0ZXh0dXJlVXZzLnkwKTtcblxuICAgIHV2c1swXSA9IDAgKyBvZmZzZXQueDtcbiAgICB1dnNbMV0gPSAwICsgb2Zmc2V0Lnk7XG4gICAgdXZzWzJdID0gMCArIG9mZnNldC54O1xuICAgIHV2c1szXSA9IDEgKiBmYWN0b3IueSArIG9mZnNldC55O1xuXG4gICAgY29sb3JzWzBdID0gMTtcbiAgICBjb2xvcnNbMV0gPSAxO1xuXG4gICAgaW5kaWNlc1swXSA9IDA7XG4gICAgaW5kaWNlc1sxXSA9IDE7XG5cbiAgICB2YXIgdG90YWwgPSBwb2ludHMubGVuZ3RoLFxuICAgICAgICBwb2ludCwgaW5kZXgsIGFtb3VudDtcblxuICAgIGZvciAodmFyIGkgPSAxOyBpIDwgdG90YWw7IGkrKylcbiAgICB7XG4gICAgICAgIHBvaW50ID0gcG9pbnRzW2ldO1xuICAgICAgICBpbmRleCA9IGkgKiA0O1xuICAgICAgICAvLyB0aW1lIHRvIGRvIHNvbWUgc21hcnQgZHJhd2luZyFcbiAgICAgICAgYW1vdW50ID0gaSAvICh0b3RhbC0xKTtcblxuICAgICAgICB1dnNbaW5kZXhdID0gYW1vdW50ICogZmFjdG9yLnggKyBvZmZzZXQueDtcbiAgICAgICAgdXZzW2luZGV4KzFdID0gMCArIG9mZnNldC55O1xuXG4gICAgICAgIHV2c1tpbmRleCsyXSA9IGFtb3VudCAqIGZhY3Rvci54ICsgb2Zmc2V0Lng7XG4gICAgICAgIHV2c1tpbmRleCszXSA9IDEgKiBmYWN0b3IueSArIG9mZnNldC55O1xuXG4gICAgICAgIGluZGV4ID0gaSAqIDI7XG4gICAgICAgIGNvbG9yc1tpbmRleF0gPSAxO1xuICAgICAgICBjb2xvcnNbaW5kZXgrMV0gPSAxO1xuXG4gICAgICAgIGluZGV4ID0gaSAqIDI7XG4gICAgICAgIGluZGljZXNbaW5kZXhdID0gaW5kZXg7XG4gICAgICAgIGluZGljZXNbaW5kZXggKyAxXSA9IGluZGV4ICsgMTtcbiAgICB9XG5cbiAgICB0aGlzLmRpcnR5ID0gdHJ1ZTtcbn07XG5cbi8qKlxuICogQ2xlYXIgdGV4dHVyZSBVVnMgd2hlbiBuZXcgdGV4dHVyZSBpcyBzZXRcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5Sb3BlLnByb3RvdHlwZS5fb25UZXh0dXJlVXBkYXRlID0gZnVuY3Rpb24gKClcbntcbiAgICBNZXNoLnByb3RvdHlwZS5fb25UZXh0dXJlVXBkYXRlLmNhbGwodGhpcyk7XG5cbiAgICAvLyB3YWl0IGZvciB0aGUgUm9wZSBjdG9yIHRvIGZpbmlzaCBiZWZvcmUgY2FsbGluZyByZWZyZXNoXG4gICAgaWYgKHRoaXMuX3JlYWR5KSB7XG4gICAgICAgIHRoaXMucmVmcmVzaCgpO1xuICAgIH1cbn07XG5cbi8qKlxuICogVXBkYXRlcyB0aGUgb2JqZWN0IHRyYW5zZm9ybSBmb3IgcmVuZGVyaW5nXG4gKlxuICogQHByaXZhdGVcbiAqL1xuUm9wZS5wcm90b3R5cGUudXBkYXRlVHJhbnNmb3JtID0gZnVuY3Rpb24gKClcbntcbiAgICB2YXIgcG9pbnRzID0gdGhpcy5wb2ludHM7XG5cbiAgICBpZiAocG9pbnRzLmxlbmd0aCA8IDEpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFyIGxhc3RQb2ludCA9IHBvaW50c1swXTtcbiAgICB2YXIgbmV4dFBvaW50O1xuICAgIHZhciBwZXJwWCA9IDA7XG4gICAgdmFyIHBlcnBZID0gMDtcblxuICAgIC8vIHRoaXMuY291bnQgLT0gMC4yO1xuXG4gICAgdmFyIHZlcnRpY2VzID0gdGhpcy52ZXJ0aWNlcztcbiAgICB2YXIgdG90YWwgPSBwb2ludHMubGVuZ3RoLFxuICAgICAgICBwb2ludCwgaW5kZXgsIHJhdGlvLCBwZXJwTGVuZ3RoLCBudW07XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRvdGFsOyBpKyspXG4gICAge1xuICAgICAgICBwb2ludCA9IHBvaW50c1tpXTtcbiAgICAgICAgaW5kZXggPSBpICogNDtcblxuICAgICAgICBpZiAoaSA8IHBvaW50cy5sZW5ndGgtMSlcbiAgICAgICAge1xuICAgICAgICAgICAgbmV4dFBvaW50ID0gcG9pbnRzW2krMV07XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgICBuZXh0UG9pbnQgPSBwb2ludDtcbiAgICAgICAgfVxuXG4gICAgICAgIHBlcnBZID0gLShuZXh0UG9pbnQueCAtIGxhc3RQb2ludC54KTtcbiAgICAgICAgcGVycFggPSBuZXh0UG9pbnQueSAtIGxhc3RQb2ludC55O1xuXG4gICAgICAgIHJhdGlvID0gKDEgLSAoaSAvICh0b3RhbC0xKSkpICogMTA7XG5cbiAgICAgICAgaWYgKHJhdGlvID4gMSlcbiAgICAgICAge1xuICAgICAgICAgICAgcmF0aW8gPSAxO1xuICAgICAgICB9XG5cbiAgICAgICAgcGVycExlbmd0aCA9IE1hdGguc3FydChwZXJwWCAqIHBlcnBYICsgcGVycFkgKiBwZXJwWSk7XG4gICAgICAgIG51bSA9IHRoaXMuX3RleHR1cmUuaGVpZ2h0IC8gMjsgLy8oMjAgKyBNYXRoLmFicyhNYXRoLnNpbigoaSArIHRoaXMuY291bnQpICogMC4zKSAqIDUwKSApKiByYXRpbztcbiAgICAgICAgcGVycFggLz0gcGVycExlbmd0aDtcbiAgICAgICAgcGVycFkgLz0gcGVycExlbmd0aDtcblxuICAgICAgICBwZXJwWCAqPSBudW07XG4gICAgICAgIHBlcnBZICo9IG51bTtcblxuICAgICAgICB2ZXJ0aWNlc1tpbmRleF0gPSBwb2ludC54ICsgcGVycFg7XG4gICAgICAgIHZlcnRpY2VzW2luZGV4KzFdID0gcG9pbnQueSArIHBlcnBZO1xuICAgICAgICB2ZXJ0aWNlc1tpbmRleCsyXSA9IHBvaW50LnggLSBwZXJwWDtcbiAgICAgICAgdmVydGljZXNbaW5kZXgrM10gPSBwb2ludC55IC0gcGVycFk7XG5cbiAgICAgICAgbGFzdFBvaW50ID0gcG9pbnQ7XG4gICAgfVxuXG4gICAgdGhpcy5jb250YWluZXJVcGRhdGVUcmFuc2Zvcm0oKTtcbn07XG4iLCIvKipcbiAqIEBmaWxlICAgICAgICBNYWluIGV4cG9ydCBvZiB0aGUgUElYSSBleHRyYXMgbGlicmFyeVxuICogQGF1dGhvciAgICAgIE1hdCBHcm92ZXMgPG1hdEBnb29kYm95ZGlnaXRhbC5jb20+XG4gKiBAY29weXJpZ2h0ICAgMjAxMy0yMDE1IEdvb2RCb3lEaWdpdGFsXG4gKiBAbGljZW5zZSAgICAge0BsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9waXhpanMvcGl4aS5qcy9ibG9iL21hc3Rlci9MSUNFTlNFfE1JVCBMaWNlbnNlfVxuICovXG5cbi8qKlxuICogQG5hbWVzcGFjZSBQSVhJLm1lc2hcbiAqL1xubW9kdWxlLmV4cG9ydHMgPSB7XG4gICAgTWVzaDogICAgICAgICAgIHJlcXVpcmUoJy4vTWVzaCcpLFxuICAgIFBsYW5lOiAgICAgICAgICAgcmVxdWlyZSgnLi9QbGFuZScpLFxuICAgIFJvcGU6ICAgICAgICAgICByZXF1aXJlKCcuL1JvcGUnKSxcbiAgICBNZXNoUmVuZGVyZXI6ICAgcmVxdWlyZSgnLi93ZWJnbC9NZXNoUmVuZGVyZXInKSxcbiAgICBNZXNoU2hhZGVyOiAgICAgcmVxdWlyZSgnLi93ZWJnbC9NZXNoU2hhZGVyJylcbn07XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uLy4uL2NvcmUnKSxcbiAgICBNZXNoID0gcmVxdWlyZSgnLi4vTWVzaCcpO1xuXG4vKipcbiAqIEBhdXRob3IgTWF0IEdyb3Zlc1xuICpcbiAqIEJpZyB0aGFua3MgdG8gdGhlIHZlcnkgY2xldmVyIE1hdHQgRGVzTGF1cmllcnMgPG1hdHRkZXNsPiBodHRwczovL2dpdGh1Yi5jb20vbWF0dGRlc2wvXG4gKiBmb3IgY3JlYXRpbmcgdGhlIG9yaWdpbmFsIHBpeGkgdmVyc2lvbiFcbiAqIEFsc28gYSB0aGFua3MgdG8gaHR0cHM6Ly9naXRodWIuY29tL2JjaGV2YWxpZXIgZm9yIHR3ZWFraW5nIHRoZSB0aW50IGFuZCBhbHBoYSBzbyB0aGF0IHRoZXkgbm93IHNoYXJlIDQgYnl0ZXMgb24gdGhlIHZlcnRleCBidWZmZXJcbiAqXG4gKiBIZWF2aWx5IGluc3BpcmVkIGJ5IExpYkdEWCdzIE1lc2hSZW5kZXJlcjpcbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS9saWJnZHgvbGliZ2R4L2Jsb2IvbWFzdGVyL2dkeC9zcmMvY29tL2JhZGxvZ2ljL2dkeC9ncmFwaGljcy9nMmQvTWVzaFJlbmRlcmVyLmphdmFcbiAqL1xuXG4vKipcbiAqXG4gKiBAY2xhc3NcbiAqIEBwcml2YXRlXG4gKiBAbWVtYmVyb2YgUElYSS5tZXNoXG4gKiBAZXh0ZW5kcyBQSVhJLk9iamVjdFJlbmRlcmVyXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcn0gVGhlIHJlbmRlcmVyIHRoaXMgc3ByaXRlIGJhdGNoIHdvcmtzIGZvci5cbiAqL1xuZnVuY3Rpb24gTWVzaFJlbmRlcmVyKHJlbmRlcmVyKVxue1xuICAgIGNvcmUuT2JqZWN0UmVuZGVyZXIuY2FsbCh0aGlzLCByZW5kZXJlcik7XG5cblxuICAgIC8qKlxuICAgICAqIEhvbGRzIHRoZSBpbmRpY2VzXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtVaW50MTZBcnJheX1cbiAgICAgKi9cbiAgICBcbiAgICB0aGlzLmluZGljZXMgPSBuZXcgVWludDE2QXJyYXkoMTUwMDApO1xuXG4gICAgLy9UT0RPIHRoaXMgY291bGQgYmUgYSBzaW5nbGUgYnVmZmVyIHNoYXJlZCBhbW9uZ3N0IGFsbCByZW5kZXJlcnMgYXMgd2UgcmV1c2UgdGhpcyBzZXQgdXAgaW4gbW9zdCByZW5kZXJlcnNcbiAgICBmb3IgKHZhciBpPTAsIGo9MDsgaSA8IDE1MDAwOyBpICs9IDYsIGogKz0gNClcbiAgICB7XG4gICAgICAgIHRoaXMuaW5kaWNlc1tpICsgMF0gPSBqICsgMDtcbiAgICAgICAgdGhpcy5pbmRpY2VzW2kgKyAxXSA9IGogKyAxO1xuICAgICAgICB0aGlzLmluZGljZXNbaSArIDJdID0gaiArIDI7XG4gICAgICAgIHRoaXMuaW5kaWNlc1tpICsgM10gPSBqICsgMDtcbiAgICAgICAgdGhpcy5pbmRpY2VzW2kgKyA0XSA9IGogKyAyO1xuICAgICAgICB0aGlzLmluZGljZXNbaSArIDVdID0gaiArIDM7XG4gICAgfVxuXG4gICAgdGhpcy5jdXJyZW50U2hhZGVyID0gbnVsbDtcbn1cblxuTWVzaFJlbmRlcmVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoY29yZS5PYmplY3RSZW5kZXJlci5wcm90b3R5cGUpO1xuTWVzaFJlbmRlcmVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IE1lc2hSZW5kZXJlcjtcbm1vZHVsZS5leHBvcnRzID0gTWVzaFJlbmRlcmVyO1xuXG5jb3JlLldlYkdMUmVuZGVyZXIucmVnaXN0ZXJQbHVnaW4oJ21lc2gnLCBNZXNoUmVuZGVyZXIpO1xuXG4vKipcbiAqIFNldHMgdXAgdGhlIHJlbmRlcmVyIGNvbnRleHQgYW5kIG5lY2Vzc2FyeSBidWZmZXJzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0gZ2wge1dlYkdMUmVuZGVyaW5nQ29udGV4dH0gdGhlIGN1cnJlbnQgV2ViR0wgZHJhd2luZyBjb250ZXh0XG4gKi9cbk1lc2hSZW5kZXJlci5wcm90b3R5cGUub25Db250ZXh0Q2hhbmdlID0gZnVuY3Rpb24gKClcbntcblxufTtcblxuLyoqXG4gKiBSZW5kZXJzIHRoZSBzcHJpdGUgb2JqZWN0LlxuICpcbiAqIEBwYXJhbSBtZXNoIHtQSVhJLm1lc2guTWVzaH0gdGhlIG1lc2ggdG8gcmVuZGVyXG4gKi9cbk1lc2hSZW5kZXJlci5wcm90b3R5cGUucmVuZGVyID0gZnVuY3Rpb24gKG1lc2gpXG57XG4gICAgaWYoIW1lc2guX3ZlcnRleEJ1ZmZlcilcbiAgICB7XG4gICAgICAgIHRoaXMuX2luaXRXZWJHTChtZXNoKTtcbiAgICB9XG5cbiAgICB2YXIgcmVuZGVyZXIgPSB0aGlzLnJlbmRlcmVyLFxuICAgICAgICBnbCA9IHJlbmRlcmVyLmdsLFxuICAgICAgICB0ZXh0dXJlID0gbWVzaC5fdGV4dHVyZS5iYXNlVGV4dHVyZSxcbiAgICAgICAgc2hhZGVyID0gbWVzaC5zaGFkZXI7Ly8gfHwgcmVuZGVyZXIuc2hhZGVyTWFuYWdlci5wbHVnaW5zLm1lc2hTaGFkZXI7XG5cbiAgICB2YXIgZHJhd01vZGUgPSBtZXNoLmRyYXdNb2RlID09PSBNZXNoLkRSQVdfTU9ERVMuVFJJQU5HTEVfTUVTSCA/IGdsLlRSSUFOR0xFX1NUUklQIDogZ2wuVFJJQU5HTEVTO1xuXG4gICAgcmVuZGVyZXIuYmxlbmRNb2RlTWFuYWdlci5zZXRCbGVuZE1vZGUobWVzaC5ibGVuZE1vZGUpO1xuXG4gICAgLy9UT0RPIGNhY2hlIGN1c3RvbSBzdGF0ZS4uXG4gICAgaWYgKCFzaGFkZXIpXG4gICAge1xuICAgICAgICBzaGFkZXIgPSByZW5kZXJlci5zaGFkZXJNYW5hZ2VyLnBsdWdpbnMubWVzaFNoYWRlcjtcbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgc2hhZGVyID0gc2hhZGVyLnNoYWRlcnNbZ2wuaWRdIHx8IHNoYWRlci5nZXRTaGFkZXIocmVuZGVyZXIpOy8vIDogc2hhZGVyO1xuICAgIH1cblxuICAgIHRoaXMucmVuZGVyZXIuc2hhZGVyTWFuYWdlci5zZXRTaGFkZXIoc2hhZGVyKTtcblxuICAgIHNoYWRlci51bmlmb3Jtcy50cmFuc2xhdGlvbk1hdHJpeC52YWx1ZSA9IG1lc2gud29ybGRUcmFuc2Zvcm0udG9BcnJheSh0cnVlKTtcbiAgICBzaGFkZXIudW5pZm9ybXMucHJvamVjdGlvbk1hdHJpeC52YWx1ZSA9IHJlbmRlcmVyLmN1cnJlbnRSZW5kZXJUYXJnZXQucHJvamVjdGlvbk1hdHJpeC50b0FycmF5KHRydWUpO1xuICAgIHNoYWRlci51bmlmb3Jtcy5hbHBoYS52YWx1ZSA9IG1lc2gud29ybGRBbHBoYTtcblxuICAgIHNoYWRlci5zeW5jVW5pZm9ybXMoKTtcblxuICAgIGlmICghbWVzaC5kaXJ0eSlcbiAgICB7XG5cbiAgICAgICAgZ2wuYmluZEJ1ZmZlcihnbC5BUlJBWV9CVUZGRVIsIG1lc2guX3ZlcnRleEJ1ZmZlcik7XG4gICAgICAgIGdsLmJ1ZmZlclN1YkRhdGEoZ2wuQVJSQVlfQlVGRkVSLCAwLCBtZXNoLnZlcnRpY2VzKTtcbiAgICAgICAgZ2wudmVydGV4QXR0cmliUG9pbnRlcihzaGFkZXIuYXR0cmlidXRlcy5hVmVydGV4UG9zaXRpb24sIDIsIGdsLkZMT0FULCBmYWxzZSwgMCwgMCk7XG5cbiAgICAgICAgLy8gdXBkYXRlIHRoZSB1dnNcbiAgICAgICAgZ2wuYmluZEJ1ZmZlcihnbC5BUlJBWV9CVUZGRVIsIG1lc2guX3V2QnVmZmVyKTtcbiAgICAgICAgZ2wudmVydGV4QXR0cmliUG9pbnRlcihzaGFkZXIuYXR0cmlidXRlcy5hVGV4dHVyZUNvb3JkLCAyLCBnbC5GTE9BVCwgZmFsc2UsIDAsIDApO1xuXG5cbiAgICAgICAgZ2wuYWN0aXZlVGV4dHVyZShnbC5URVhUVVJFMCk7XG5cbiAgICAgICBpZiAoIXRleHR1cmUuX2dsVGV4dHVyZXNbZ2wuaWRdKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnJlbmRlcmVyLnVwZGF0ZVRleHR1cmUodGV4dHVyZSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgICAvLyBiaW5kIHRoZSBjdXJyZW50IHRleHR1cmVcbiAgICAgICAgICAgIGdsLmJpbmRUZXh0dXJlKGdsLlRFWFRVUkVfMkQsIHRleHR1cmUuX2dsVGV4dHVyZXNbZ2wuaWRdKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGdsLmJpbmRCdWZmZXIoZ2wuRUxFTUVOVF9BUlJBWV9CVUZGRVIsIG1lc2guX2luZGV4QnVmZmVyKTtcbiAgICAgICAgZ2wuYnVmZmVyU3ViRGF0YShnbC5FTEVNRU5UX0FSUkFZX0JVRkZFUiwgMCwgbWVzaC5pbmRpY2VzKTtcbiAgICB9XG4gICAgZWxzZVxuICAgIHtcblxuICAgICAgICBtZXNoLmRpcnR5ID0gZmFsc2U7XG4gICAgICAgIGdsLmJpbmRCdWZmZXIoZ2wuQVJSQVlfQlVGRkVSLCBtZXNoLl92ZXJ0ZXhCdWZmZXIpO1xuICAgICAgICBnbC5idWZmZXJEYXRhKGdsLkFSUkFZX0JVRkZFUiwgbWVzaC52ZXJ0aWNlcywgZ2wuU1RBVElDX0RSQVcpO1xuICAgICAgICBnbC52ZXJ0ZXhBdHRyaWJQb2ludGVyKHNoYWRlci5hdHRyaWJ1dGVzLmFWZXJ0ZXhQb3NpdGlvbiwgMiwgZ2wuRkxPQVQsIGZhbHNlLCAwLCAwKTtcblxuICAgICAgICAvLyB1cGRhdGUgdGhlIHV2c1xuICAgICAgICBnbC5iaW5kQnVmZmVyKGdsLkFSUkFZX0JVRkZFUiwgbWVzaC5fdXZCdWZmZXIpO1xuICAgICAgICBnbC5idWZmZXJEYXRhKGdsLkFSUkFZX0JVRkZFUiwgbWVzaC51dnMsIGdsLlNUQVRJQ19EUkFXKTtcbiAgICAgICAgZ2wudmVydGV4QXR0cmliUG9pbnRlcihzaGFkZXIuYXR0cmlidXRlcy5hVGV4dHVyZUNvb3JkLCAyLCBnbC5GTE9BVCwgZmFsc2UsIDAsIDApO1xuXG4gICAgICAgICBnbC5hY3RpdmVUZXh0dXJlKGdsLlRFWFRVUkUwKTtcblxuICAgICAgICBpZiAoIXRleHR1cmUuX2dsVGV4dHVyZXNbZ2wuaWRdKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnJlbmRlcmVyLnVwZGF0ZVRleHR1cmUodGV4dHVyZSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgICAvLyBiaW5kIHRoZSBjdXJyZW50IHRleHR1cmVcbiAgICAgICAgICAgIGdsLmJpbmRUZXh0dXJlKGdsLlRFWFRVUkVfMkQsIHRleHR1cmUuX2dsVGV4dHVyZXNbZ2wuaWRdKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGRvbnQgbmVlZCB0byB1cGxvYWQhXG4gICAgICAgIGdsLmJpbmRCdWZmZXIoZ2wuRUxFTUVOVF9BUlJBWV9CVUZGRVIsIG1lc2guX2luZGV4QnVmZmVyKTtcbiAgICAgICAgZ2wuYnVmZmVyRGF0YShnbC5FTEVNRU5UX0FSUkFZX0JVRkZFUiwgbWVzaC5pbmRpY2VzLCBnbC5TVEFUSUNfRFJBVyk7XG5cbiAgICB9XG5cbiAgICBnbC5kcmF3RWxlbWVudHMoZHJhd01vZGUsIG1lc2guaW5kaWNlcy5sZW5ndGgsIGdsLlVOU0lHTkVEX1NIT1JULCAwKTtcblxufTtcblxuLyoqXG4gKiBQcmVwYXJlcyBhbGwgdGhlIGJ1ZmZlcnMgdG8gcmVuZGVyIHRoaXMgbWVzaFxuICogQHBhcmFtIG1lc2gge1BJWEkubWVzaC5NZXNofSB0aGUgbWVzaCB0byByZW5kZXJcbiAqL1xuTWVzaFJlbmRlcmVyLnByb3RvdHlwZS5faW5pdFdlYkdMID0gZnVuY3Rpb24gKG1lc2gpXG57XG4gICAgLy8gYnVpbGQgdGhlIHN0cmlwIVxuICAgIHZhciBnbCA9IHRoaXMucmVuZGVyZXIuZ2w7XG5cbiAgICBtZXNoLl92ZXJ0ZXhCdWZmZXIgPSBnbC5jcmVhdGVCdWZmZXIoKTtcbiAgICBtZXNoLl9pbmRleEJ1ZmZlciA9IGdsLmNyZWF0ZUJ1ZmZlcigpO1xuICAgIG1lc2guX3V2QnVmZmVyID0gZ2wuY3JlYXRlQnVmZmVyKCk7XG5cblxuXG4gICAgZ2wuYmluZEJ1ZmZlcihnbC5BUlJBWV9CVUZGRVIsIG1lc2guX3ZlcnRleEJ1ZmZlcik7XG4gICAgZ2wuYnVmZmVyRGF0YShnbC5BUlJBWV9CVUZGRVIsIG1lc2gudmVydGljZXMsIGdsLkRZTkFNSUNfRFJBVyk7XG5cbiAgICBnbC5iaW5kQnVmZmVyKGdsLkFSUkFZX0JVRkZFUiwgbWVzaC5fdXZCdWZmZXIpO1xuICAgIGdsLmJ1ZmZlckRhdGEoZ2wuQVJSQVlfQlVGRkVSLCAgbWVzaC51dnMsIGdsLlNUQVRJQ19EUkFXKTtcblxuICAgIGlmKG1lc2guY29sb3JzKXtcbiAgICAgICAgbWVzaC5fY29sb3JCdWZmZXIgPSBnbC5jcmVhdGVCdWZmZXIoKTtcbiAgICAgICAgZ2wuYmluZEJ1ZmZlcihnbC5BUlJBWV9CVUZGRVIsIG1lc2guX2NvbG9yQnVmZmVyKTtcbiAgICAgICAgZ2wuYnVmZmVyRGF0YShnbC5BUlJBWV9CVUZGRVIsIG1lc2guY29sb3JzLCBnbC5TVEFUSUNfRFJBVyk7XG4gICAgfVxuXG4gICAgZ2wuYmluZEJ1ZmZlcihnbC5FTEVNRU5UX0FSUkFZX0JVRkZFUiwgbWVzaC5faW5kZXhCdWZmZXIpO1xuICAgIGdsLmJ1ZmZlckRhdGEoZ2wuRUxFTUVOVF9BUlJBWV9CVUZGRVIsIG1lc2guaW5kaWNlcywgZ2wuU1RBVElDX0RSQVcpO1xufTtcblxuXG4vKipcbiAqIEVtcHRpZXMgdGhlIGN1cnJlbnQgYmF0Y2guXG4gKlxuICovXG5NZXNoUmVuZGVyZXIucHJvdG90eXBlLmZsdXNoID0gZnVuY3Rpb24gKClcbntcblxufTtcblxuLyoqXG4gKiBTdGFydHMgYSBuZXcgbWVzaCByZW5kZXJlci5cbiAqXG4gKi9cbk1lc2hSZW5kZXJlci5wcm90b3R5cGUuc3RhcnQgPSBmdW5jdGlvbiAoKVxue1xuICAgIFxuXG4gICAgdGhpcy5jdXJyZW50U2hhZGVyID0gbnVsbDtcbn07XG5cbi8qKlxuICogRGVzdHJveXMgdGhlIE1lc2ggcmVuZGVyZXJcbiAqXG4gKi9cbk1lc2hSZW5kZXJlci5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uICgpXG57XG4gICAgY29yZS5PYmplY3RSZW5kZXJlci5wcm90b3R5cGUuZGVzdHJveS5jYWxsKHRoaXMpO1xufTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vLi4vY29yZScpO1xuXG4vKipcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5TaGFkZXJcbiAqIEBtZW1iZXJvZiBQSVhJLm1lc2hcbiAqIEBwYXJhbSBzaGFkZXJNYW5hZ2VyIHtQSVhJLlNoYWRlck1hbmFnZXJ9IFRoZSBXZWJHTCBzaGFkZXIgbWFuYWdlciB0aGlzIHNoYWRlciB3b3JrcyBmb3IuXG4gKi9cbmZ1bmN0aW9uIE1lc2hTaGFkZXIoc2hhZGVyTWFuYWdlcilcbntcbiAgICBjb3JlLlNoYWRlci5jYWxsKHRoaXMsXG4gICAgICAgIHNoYWRlck1hbmFnZXIsXG4gICAgICAgIC8vIHZlcnRleCBzaGFkZXJcbiAgICAgICAgW1xuICAgICAgICAgICAgJ3ByZWNpc2lvbiBsb3dwIGZsb2F0OycsXG4gICAgICAgICAgICAnYXR0cmlidXRlIHZlYzIgYVZlcnRleFBvc2l0aW9uOycsXG4gICAgICAgICAgICAnYXR0cmlidXRlIHZlYzIgYVRleHR1cmVDb29yZDsnLFxuXG4gICAgICAgICAgICAndW5pZm9ybSBtYXQzIHRyYW5zbGF0aW9uTWF0cml4OycsXG4gICAgICAgICAgICAndW5pZm9ybSBtYXQzIHByb2plY3Rpb25NYXRyaXg7JyxcblxuICAgICAgICAgICAgJ3ZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkOycsXG5cbiAgICAgICAgICAgICd2b2lkIG1haW4odm9pZCl7JyxcbiAgICAgICAgICAgICcgICBnbF9Qb3NpdGlvbiA9IHZlYzQoKHByb2plY3Rpb25NYXRyaXggKiB0cmFuc2xhdGlvbk1hdHJpeCAqIHZlYzMoYVZlcnRleFBvc2l0aW9uLCAxLjApKS54eSwgMC4wLCAxLjApOycsXG4gICAgICAgICAgICAnICAgdlRleHR1cmVDb29yZCA9IGFUZXh0dXJlQ29vcmQ7JyxcbiAgICAgICAgICAgICd9J1xuICAgICAgICBdLmpvaW4oJ1xcbicpLFxuICAgICAgICBbXG4gICAgICAgICAgICAncHJlY2lzaW9uIGxvd3AgZmxvYXQ7JyxcblxuICAgICAgICAgICAgJ3ZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkOycsXG4gICAgICAgICAgICAndW5pZm9ybSBmbG9hdCBhbHBoYTsnLFxuXG4gICAgICAgICAgICAndW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXI7JyxcblxuICAgICAgICAgICAgJ3ZvaWQgbWFpbih2b2lkKXsnLFxuICAgICAgICAgICAgJyAgIGdsX0ZyYWdDb2xvciA9IHRleHR1cmUyRCh1U2FtcGxlciwgdlRleHR1cmVDb29yZCkgKiBhbHBoYSA7JyxcbiAgICAgICAgICAgICd9J1xuICAgICAgICBdLmpvaW4oJ1xcbicpLFxuICAgICAgICAvLyBjdXN0b20gdW5pZm9ybXNcbiAgICAgICAge1xuICAgICAgICAgICAgYWxwaGE6ICB7IHR5cGU6ICcxZicsIHZhbHVlOiAwIH0sXG4gICAgICAgICAgICB0cmFuc2xhdGlvbk1hdHJpeDogeyB0eXBlOiAnbWF0MycsIHZhbHVlOiBuZXcgRmxvYXQzMkFycmF5KDkpIH0sXG4gICAgICAgICAgICBwcm9qZWN0aW9uTWF0cml4OiB7IHR5cGU6ICdtYXQzJywgdmFsdWU6IG5ldyBGbG9hdDMyQXJyYXkoOSkgfVxuICAgICAgICB9LFxuICAgICAgICAvLyBjdXN0b20gYXR0cmlidXRlc1xuICAgICAgICB7XG4gICAgICAgICAgICBhVmVydGV4UG9zaXRpb246MCxcbiAgICAgICAgICAgIGFUZXh0dXJlQ29vcmQ6MFxuICAgICAgICB9XG4gICAgKTtcbn1cblxuTWVzaFNoYWRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuU2hhZGVyLnByb3RvdHlwZSk7XG5NZXNoU2hhZGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IE1lc2hTaGFkZXI7XG5tb2R1bGUuZXhwb3J0cyA9IE1lc2hTaGFkZXI7XG5cbmNvcmUuU2hhZGVyTWFuYWdlci5yZWdpc3RlclBsdWdpbignbWVzaFNoYWRlcicsIE1lc2hTaGFkZXIpO1xuIiwiLy8gUmVmZXJlbmNlczpcbi8vIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0phdmFTY3JpcHQvUmVmZXJlbmNlL0dsb2JhbF9PYmplY3RzL01hdGgvc2lnblxuXG5pZiAoIU1hdGguc2lnbilcbntcbiAgICBNYXRoLnNpZ24gPSBmdW5jdGlvbiAoeCkge1xuICAgICAgICB4ID0gK3g7XG4gICAgICAgIGlmICh4ID09PSAwIHx8IGlzTmFOKHgpKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4geDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4geCA+IDAgPyAxIDogLTE7XG4gICAgfTtcbn1cbiIsIi8vIFJlZmVyZW5jZXM6XG4vLyBodHRwczovL2dpdGh1Yi5jb20vc2luZHJlc29yaHVzL29iamVjdC1hc3NpZ25cbi8vIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0phdmFTY3JpcHQvUmVmZXJlbmNlL0dsb2JhbF9PYmplY3RzL09iamVjdC9hc3NpZ25cblxuaWYgKCFPYmplY3QuYXNzaWduKVxue1xuICAgIE9iamVjdC5hc3NpZ24gPSByZXF1aXJlKCdvYmplY3QtYXNzaWduJyk7XG59XG4iLCJyZXF1aXJlKCcuL09iamVjdC5hc3NpZ24nKTtcbnJlcXVpcmUoJy4vcmVxdWVzdEFuaW1hdGlvbkZyYW1lJyk7XG5yZXF1aXJlKCcuL01hdGguc2lnbicpO1xuIiwiLy8gUmVmZXJlbmNlczpcbi8vIGh0dHA6Ly9wYXVsaXJpc2guY29tLzIwMTEvcmVxdWVzdGFuaW1hdGlvbmZyYW1lLWZvci1zbWFydC1hbmltYXRpbmcvXG4vLyBodHRwczovL2dpc3QuZ2l0aHViLmNvbS8xNTc5NjcxXG4vLyBodHRwOi8vdXBkYXRlcy5odG1sNXJvY2tzLmNvbS8yMDEyLzA1L3JlcXVlc3RBbmltYXRpb25GcmFtZS1BUEktbm93LXdpdGgtc3ViLW1pbGxpc2Vjb25kLXByZWNpc2lvblxuLy8gaHR0cHM6Ly9naXN0LmdpdGh1Yi5jb20vdGltaGFsbC80MDc4NjE0XG4vLyBodHRwczovL2dpdGh1Yi5jb20vRmluYW5jaWFsLVRpbWVzL3BvbHlmaWxsLXNlcnZpY2UvdHJlZS9tYXN0ZXIvcG9seWZpbGxzL3JlcXVlc3RBbmltYXRpb25GcmFtZVxuXG4vLyBFeHBlY3RlZCB0byBiZSB1c2VkIHdpdGggQnJvd3NlcmZpeVxuLy8gQnJvd3NlcmlmeSBhdXRvbWF0aWNhbGx5IGRldGVjdHMgdGhlIHVzZSBvZiBgZ2xvYmFsYCBhbmQgcGFzc2VzIHRoZVxuLy8gY29ycmVjdCByZWZlcmVuY2Ugb2YgYGdsb2JhbGAsIGBzZWxmYCwgYW5kIGZpbmFsbHkgYHdpbmRvd2BcblxuLy8gRGF0ZS5ub3dcbmlmICghKERhdGUubm93ICYmIERhdGUucHJvdG90eXBlLmdldFRpbWUpKSB7XG4gICAgRGF0ZS5ub3cgPSBmdW5jdGlvbiBub3coKSB7XG4gICAgICAgIHJldHVybiBuZXcgRGF0ZSgpLmdldFRpbWUoKTtcbiAgICB9O1xufVxuXG4vLyBwZXJmb3JtYW5jZS5ub3dcbmlmICghKGdsb2JhbC5wZXJmb3JtYW5jZSAmJiBnbG9iYWwucGVyZm9ybWFuY2Uubm93KSkge1xuICAgIHZhciBzdGFydFRpbWUgPSBEYXRlLm5vdygpO1xuICAgIGlmICghZ2xvYmFsLnBlcmZvcm1hbmNlKSB7XG4gICAgICAgIGdsb2JhbC5wZXJmb3JtYW5jZSA9IHt9O1xuICAgIH1cbiAgICBnbG9iYWwucGVyZm9ybWFuY2Uubm93ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gRGF0ZS5ub3coKSAtIHN0YXJ0VGltZTtcbiAgICB9O1xufVxuXG4vLyByZXF1ZXN0QW5pbWF0aW9uRnJhbWVcbnZhciBsYXN0VGltZSA9IERhdGUubm93KCk7XG52YXIgdmVuZG9ycyA9IFsnbXMnLCAnbW96JywgJ3dlYmtpdCcsICdvJ107XG5cbmZvcih2YXIgeCA9IDA7IHggPCB2ZW5kb3JzLmxlbmd0aCAmJiAhZ2xvYmFsLnJlcXVlc3RBbmltYXRpb25GcmFtZTsgKyt4KSB7XG4gICAgZ2xvYmFsLnJlcXVlc3RBbmltYXRpb25GcmFtZSA9IGdsb2JhbFt2ZW5kb3JzW3hdICsgJ1JlcXVlc3RBbmltYXRpb25GcmFtZSddO1xuICAgIGdsb2JhbC5jYW5jZWxBbmltYXRpb25GcmFtZSA9IGdsb2JhbFt2ZW5kb3JzW3hdICsgJ0NhbmNlbEFuaW1hdGlvbkZyYW1lJ10gfHxcbiAgICAgICAgZ2xvYmFsW3ZlbmRvcnNbeF0gKyAnQ2FuY2VsUmVxdWVzdEFuaW1hdGlvbkZyYW1lJ107XG59XG5cbmlmICghZ2xvYmFsLnJlcXVlc3RBbmltYXRpb25GcmFtZSkge1xuICAgIGdsb2JhbC5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUgPSBmdW5jdGlvbiAoY2FsbGJhY2spIHtcbiAgICAgICAgaWYgKHR5cGVvZiBjYWxsYmFjayAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihjYWxsYmFjayArICdpcyBub3QgYSBmdW5jdGlvbicpO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGN1cnJlbnRUaW1lID0gRGF0ZS5ub3coKSxcbiAgICAgICAgICAgIGRlbGF5ID0gMTYgKyBsYXN0VGltZSAtIGN1cnJlbnRUaW1lO1xuXG4gICAgICAgIGlmIChkZWxheSA8IDApIHtcbiAgICAgICAgICAgIGRlbGF5ID0gMDtcbiAgICAgICAgfVxuXG4gICAgICAgIGxhc3RUaW1lID0gY3VycmVudFRpbWU7XG5cbiAgICAgICAgcmV0dXJuIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgbGFzdFRpbWUgPSBEYXRlLm5vdygpO1xuICAgICAgICAgICAgY2FsbGJhY2socGVyZm9ybWFuY2Uubm93KCkpO1xuICAgICAgICB9LCBkZWxheSk7XG4gICAgfTtcbn1cblxuaWYgKCFnbG9iYWwuY2FuY2VsQW5pbWF0aW9uRnJhbWUpIHtcbiAgICBnbG9iYWwuY2FuY2VsQW5pbWF0aW9uRnJhbWUgPSBmdW5jdGlvbihpZCkge1xuICAgICAgICBjbGVhclRpbWVvdXQoaWQpO1xuICAgIH07XG59XG4iXX0= //# sourceMappingURL=pixi.js.map diff --git a/bin/pixi.min.js b/bin/pixi.min.js index f7a788e..d59cd98 100644 --- a/bin/pixi.min.js +++ b/bin/pixi.min.js @@ -1,11 +1,11 @@ -!function(t){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=t();else if("function"==typeof define&&define.amd)define([],t);else{var e;e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:this,e.PIXI=t()}}(function(){var t;return function e(t,r,i){function n(s,a){if(!r[s]){if(!t[s]){var h="function"==typeof require&&require;if(!a&&h)return h(s,!0);if(o)return o(s,!0);var u=new Error("Cannot find module '"+s+"'");throw u.code="MODULE_NOT_FOUND",u}var l=r[s]={exports:{}};t[s][0].call(l.exports,function(e){var r=t[s][1][e];return n(r?r:e)},l,l.exports,e,t,r,i)}return r[s].exports}for(var o="function"==typeof require&&require,s=0;s=t.byteLength?i.bufferSubData(this.type,e,t):i.bufferData(this.type,t,this.drawType),this.data=t},n.prototype.bind=function(){var t=this.gl;t.bindBuffer(this.type,this.buffer)},n.createVertexBuffer=function(t,e,r){return new n(t,t.ARRAY_BUFFER,e,r)},n.createIndexBuffer=function(t,e,r){return new n(t,t.ELEMENT_ARRAY_BUFFER,e,r)},n.create=function(t,e,r,i){return new n(t,e,i)},e.exports=n},{}],3:[function(t,e,r){var i=t("./GLTexture"),n=function(t,e,r){this.gl=t,this.framebuffer=t.createFramebuffer(),this.stencil=null,this.texture=null,this.width=e||100,this.height=r||100};n.prototype.enableTexture=function(t){var e=this.gl;this.texture=t||new i(e),this.texture.bind(),this.bind(),e.framebufferTexture2D(e.FRAMEBUFFER,e.COLOR_ATTACHMENT0,e.TEXTURE_2D,this.texture.texture,0)},n.prototype.enableStencil=function(){if(!this.stencil){var t=this.gl;this.stencil=t.createRenderbuffer(),t.bindRenderbuffer(t.RENDERBUFFER,this.stencil),t.framebufferRenderbuffer(t.FRAMEBUFFER,t.DEPTH_STENCIL_ATTACHMENT,t.RENDERBUFFER,this.stencil),t.renderbufferStorage(t.RENDERBUFFER,t.DEPTH_STENCIL,this.width,this.height)}},n.prototype.clear=function(t,e,r,i){this.bind();var n=this.gl;n.clearColor(t,e,r,i),n.clear(n.COLOR_BUFFER_BIT)},n.prototype.bind=function(){var t=this.gl;t.bindFramebuffer(t.FRAMEBUFFER,this.framebuffer)},n.prototype.unbind=function(){gl.bindFramebuffer(gl.FRAMEBUFFER,null)},n.prototype.resize=function(t,e){var r=this.gl;this.width=t,this.height=e,this.texture&&(this.texture.bind(),r.texImage2D(r.TEXTURE_2D,0,this.format,t,e,0,this.format,this.type,null)),this.stencil&&(r.bindRenderbuffer(r.RENDERBUFFER,this.stencil),r.renderbufferStorage(r.RENDERBUFFER,r.DEPTH_STENCIL,t,e))},n.prototype.destroy=function(){var t=this.gl;t.deleteFramebuffer(this.framebuffer)},n.createRGBA=function(t,e,r,o){var s=new i(t,e,r);s.enableNearestScaling(),s.enableWrapClamp(),t.texImage2D(t.TEXTURE_2D,0,t.RGBA,e,r,0,t.RGBA,t.UNSIGNED_BYTE,o);var a=new n(t,e,r);return a.enableTexture(s),a},n.createFloat32=function(t,e,r,o){var s=new i.fromData(t,o,e,r);s.enableNearestScaling(),s.enableWrapClamp();var a=new n(t,e,r);return a.enableTexture(s),a},e.exports=n},{"./GLTexture":5}],4:[function(t,e,r){var i=t("./shader/compileProgram"),n=t("./shader/extractAttributes"),o=t("./shader/extractUniforms"),s=t("./shader/generateUniformAccessObject"),a=function(t,e,r){this.gl=t,this.program=i(t,e,r),this.attributes=n(t,this.program);var a=o(t,this.program);this.uniforms=s(t,a)};a.prototype.bind=function(){this.gl.useProgram(this.program)},a.prototype.destroy=function(){this.gl},e.exports=a},{"./shader/compileProgram":9,"./shader/extractAttributes":11,"./shader/extractUniforms":12,"./shader/generateUniformAccessObject":13}],5:[function(t,e,r){var i=function(t,e,r,i,n){this.gl=t,this.texture=t.createTexture(),this.mipmap=!1,this.premultiplyAlpha=!1,this.width=e||0,this.height=r||0,this.format=i||t.RGBA,this.type=n||t.UNSIGNED_BYTE};i.prototype.upload=function(t){this.bind();var e=this.gl;this.width=t.width,this.height=t.height,e.pixelStorei(e.UNPACK_PREMULTIPLY_ALPHA_WEBGL,this.premultiplyAlpha),e.texImage2D(e.TEXTURE_2D,0,this.format,this.format,this.type,t)};var n=!1;i.prototype.uploadData=function(t,e,r){if(this.bind(),this.width=e||this.width,this.height=r||this.height,t instanceof Float32Array){if(!n){var i=gl.getExtension("OES_texture_float");if(!i)throw new Error("floating point textures not available");n=!0}this.type=gl.FLOAT}else this.type=gl.UNSIGNED_BYTE;gl.pixelStorei(gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL,this.premultiplyAlpha),gl.texImage2D(gl.TEXTURE_2D,0,this.format,this.width,this.height,0,this.format,this.type,t)},i.prototype.bind=function(t){var e=this.gl;void 0!==t&&e.activeTexture(e.TEXTURE0+t),e.bindTexture(e.TEXTURE_2D,this.texture)},i.prototype.unbind=function(){var t=this.gl;t.bindTexture(t.TEXTURE_2D,null)},i.prototype.minFilter=function(t){var e=this.gl;this.bind(),this.mipmap?e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MIN_FILTER,t?e.LINEAR_MIPMAP_LINEAR:e.NEAREST_MIPMAP_NEAREST):e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MIN_FILTER,t?e.LINEAR:e.NEAREST)},i.prototype.magFilter=function(t){var e=this.gl;this.bind(),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MAG_FILTER,t?e.LINEAR:e.NEAREST)},i.prototype.enableMipmap=function(){this.bind(),this.mipmap=!0,gl.generateMipmap(gl.TEXTURE_2D)},i.prototype.enableLinearScaling=function(){this.minFilter(!0),this.magFilter(!0)},i.prototype.enableNearestScaling=function(){this.minFilter(!1),this.magFilter(!1)},i.prototype.enableWrapClamp=function(){var t=this.gl;this.bind(),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_WRAP_S,t.CLAMP_TO_EDGE),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_WRAP_T,t.CLAMP_TO_EDGE)},i.prototype.enableWrapRepeat=function(){var t=this.gl;this.bind(),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_WRAP_S,t.REPEAT),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_WRAP_T,t.REPEAT)},i.prototype.destroy=function(){var t=this.gl;t.deleteTexture(this.texture)},i.fromSource=function(t,e,r){var n=new i(t);return n.premultiplyAlpha=r||!1,n.upload(e),n},i.fromData=function(t,e,r,n){var o=new i(t);return o.uploadData(e,r,n),o},e.exports=i},{}],6:[function(t,e,r){function i(t){this.nativeVaoExtension=t.getExtension("OES_vertex_array_object")||t.getExtension("MOZ_OES_vertex_array_object")||t.getExtension("WEBKIT_OES_vertex_array_object"),this.nativeVaoExtension&&(this.nativeVao=this.nativeVaoExtension.createVertexArrayOES()),this.gl=t,this.attributes=[],this.indexBuffer=null,this.dirty=!1}i.prototype.constructor=i,e.exports=i,i.prototype.bind=function(){this.nativeVao?(this.nativeVaoExtension.bindVertexArrayOES(this.nativeVao),this.dirty&&(this.dirty=!1,this.activate())):this.activate()},i.prototype.unbind=function(){this.nativeVao&&this.nativeVaoExtension.bindVertexArrayOES(null)},i.prototype.activate=function(){for(var t=this.gl,e=0;es;s++){var a=t.getActiveAttrib(e,s),h=i(t,a.type);r[a.name]={type:h,size:n(h),location:t.getAttribLocation(e,a.name),pointer:function(e,r,i,n){t.vertexAttribPointer(this.location,this.size,e||t.FLOAT,r||!1,i||0,n||0)}}}return r};e.exports=o},{"./mapSize":14,"./mapType":15}],12:[function(t,e,r){var i=t("./mapType"),n=t("./defaultValue"),o=function(t,e){for(var r={},o=t.getProgramParameter(e,t.ACTIVE_UNIFORMS),s=0;o>s;s++){var a=t.getActiveUniform(e,s),h=a.name.replace(/\[.*?\]/,""),u=i(t,a.type);r[h]={type:u,size:a.size,location:t.getUniformLocation(e,h),value:n(u,a.size)}}return r};e.exports=o},{"./defaultValue":10,"./mapType":15}],13:[function(t,e,r){var i=function(t,e){var r={data:{}};r.gl=t;for(var i=Object.keys(e),a=0;a=0&&t.length%1===0}function c(t,e){for(var r=-1,i=t.length;++ri?i:null}):(r=Y(t),e=r.length,function(){return i++,e>i?r[i]:null})}function y(t,e){return e=null==e?t.length-1:+e,function(){for(var r=Math.max(arguments.length-e,0),i=Array(r),n=0;r>n;n++)i[n]=arguments[n+e];switch(e){case 0:return t.call(this,i);case 1:return t.call(this,arguments[0],i)}}}function x(t){return function(e,r,i){return t(e,i)}}function b(t){return function(e,r,i){i=u(i||n),e=e||[];var o=m(e);if(0>=t)return i(null);var s=!1,a=0,l=!1;!function c(){if(s&&0>=a)return i(null);for(;t>a&&!l;){var n=o();if(null===n)return s=!0,void(0>=a&&i(null));a+=1,r(e[n],n,h(function(t){a-=1,t?(i(t),l=!0):c()}))}}()}}function _(t){return function(e,r,i){return t(N.eachOf,e,r,i)}}function T(t){return function(e,r,i,n){return t(b(r),e,i,n)}}function E(t){return function(e,r,i){return t(N.eachOfSeries,e,r,i)}}function S(t,e,r,i){i=u(i||n),e=e||[];var o=l(e)?[]:{};t(e,function(t,e,i){r(t,function(t,r){o[e]=r,i(t)})},function(t){i(t,o)})}function w(t,e,r,i){var n=[];t(e,function(t,e,i){r(t,function(r){r&&n.push({index:e,value:t}),i()})},function(){i(p(n.sort(function(t,e){return t.index-e.index}),function(t){return t.value}))})}function C(t,e,r,i){w(t,e,function(t,e){r(t,function(t){e(!t)})},i)}function A(t,e,r){return function(i,n,o,s){function a(){s&&s(r(!1,void 0))}function h(t,i,n){return s?void o(t,function(i){s&&e(i)&&(s(r(!0,t)),s=o=!1),n()}):n()}arguments.length>3?t(i,n,h,a):(s=o,o=n,t(i,h,a))}}function M(t,e){return e}function R(t,e,r){r=r||n;var i=l(e)?[]:{};t(e,function(t,e,r){t(y(function(t,n){n.length<=1&&(n=n[0]),i[e]=n,r(t)}))},function(t){r(t,i)})}function O(t,e,r,i){var n=[];t(e,function(t,e,i){r(t,function(t,e){n=n.concat(e||[]),i(t)})},function(t){i(t,n)})}function D(t,e,r){function i(t,e,r,i){if(null!=i&&"function"!=typeof i)throw new Error("task callback must be a function");return t.started=!0,j(e)||(e=[e]),0===e.length&&t.idle()?N.setImmediate(function(){t.drain()}):(c(e,function(e){var o={data:e,callback:i||n};r?t.tasks.unshift(o):t.tasks.push(o),t.tasks.length===t.concurrency&&t.saturated()}),void N.setImmediate(t.process))}function o(t,e){return function(){s-=1;var r=!1,i=arguments;c(e,function(t){c(a,function(e,i){e!==t||r||(a.splice(i,1),r=!0)}),t.callback.apply(t,i)}),t.tasks.length+s===0&&t.drain(),t.process()}}if(null==e)e=1;else if(0===e)throw new Error("Concurrency must not be zero");var s=0,a=[],u={tasks:[],concurrency:e,payload:r,saturated:n,empty:n,drain:n,started:!1,paused:!1,push:function(t,e){i(u,t,!1,e)},kill:function(){u.drain=n,u.tasks=[]},unshift:function(t,e){i(u,t,!0,e)},process:function(){if(!u.paused&&s=e;e++)N.setImmediate(u.process)}}};return u}function P(t){return y(function(e,r){e.apply(null,r.concat([y(function(e,r){"object"==typeof console&&(e?console.error&&console.error(e):console[t]&&c(r,function(e){console[t](e)}))})]))})}function F(t){return function(e,r,i){t(d(e),r,i)}}function L(t){return y(function(e,r){var i=y(function(r){var i=this,n=r.pop();return t(e,function(t,e,n){t.apply(i,r.concat([n]))},n)});return r.length?i.apply(this,r):i})}function B(t){return y(function(e){var r=e.pop();e.push(function(){var t=arguments;i?N.setImmediate(function(){r.apply(null,t)}):r.apply(null,t)});var i=!0;t.apply(this,e),i=!1})}var I,N={},U="object"==typeof self&&self.self===self&&self||"object"==typeof i&&i.global===i&&i||this;null!=U&&(I=U.async),N.noConflict=function(){return U.async=I,N};var k=Object.prototype.toString,j=Array.isArray||function(t){return"[object Array]"===k.call(t)},G=function(t){var e=typeof t;return"function"===e||"object"===e&&!!t},Y=Object.keys||function(t){var e=[];for(var r in t)t.hasOwnProperty(r)&&e.push(r);return e},X="function"==typeof setImmediate&&setImmediate,z=X?function(t){X(t)}:function(t){setTimeout(t,0)};"object"==typeof e&&"function"==typeof e.nextTick?N.nextTick=e.nextTick:N.nextTick=z,N.setImmediate=X?z:N.nextTick,N.forEach=N.each=function(t,e,r){return N.eachOf(t,x(e),r)},N.forEachSeries=N.eachSeries=function(t,e,r){return N.eachOfSeries(t,x(e),r)},N.forEachLimit=N.eachLimit=function(t,e,r,i){return b(e)(t,x(r),i)},N.forEachOf=N.eachOf=function(t,e,r){function i(t){a--,t?r(t):null===o&&0>=a&&r(null)}r=u(r||n),t=t||[];for(var o,s=m(t),a=0;null!=(o=s());)a+=1,e(t[o],o,h(i));0===a&&r(null)},N.forEachOfSeries=N.eachOfSeries=function(t,e,r){function i(){var n=!0;return null===s?r(null):(e(t[s],s,h(function(t){if(t)r(t);else{if(s=o(),null===s)return r(null);n?N.setImmediate(i):i()}})),void(n=!1))}r=u(r||n),t=t||[];var o=m(t),s=o();i()},N.forEachOfLimit=N.eachOfLimit=function(t,e,r,i){b(e)(t,r,i)},N.map=_(S),N.mapSeries=E(S),N.mapLimit=T(S),N.inject=N.foldl=N.reduce=function(t,e,r,i){N.eachOfSeries(t,function(t,i,n){r(e,t,function(t,r){e=r,n(t)})},function(t){i(t,e)})},N.foldr=N.reduceRight=function(t,e,r,i){var n=p(t,o).reverse();N.reduce(n,e,r,i)},N.transform=function(t,e,r,i){3===arguments.length&&(i=r,r=e,e=j(t)?[]:{}),N.eachOf(t,function(t,i,n){r(e,t,i,n)},function(t){i(t,e)})},N.select=N.filter=_(w),N.selectLimit=N.filterLimit=T(w),N.selectSeries=N.filterSeries=E(w),N.reject=_(C),N.rejectLimit=T(C),N.rejectSeries=E(C),N.any=N.some=A(N.eachOf,s,o),N.someLimit=A(N.eachOfLimit,s,o),N.all=N.every=A(N.eachOf,a,a),N.everyLimit=A(N.eachOfLimit,a,a),N.detect=A(N.eachOf,o,M),N.detectSeries=A(N.eachOfSeries,o,M),N.detectLimit=A(N.eachOfLimit,o,M),N.sortBy=function(t,e,r){function i(t,e){var r=t.criteria,i=e.criteria;return i>r?-1:r>i?1:0}N.map(t,function(t,r){e(t,function(e,i){e?r(e):r(null,{value:t,criteria:i})})},function(t,e){return t?r(t):void r(null,p(e.sort(i),function(t){return t.value}))})},N.auto=function(t,e,r){function i(t){d.unshift(t)}function o(t){var e=g(d,t);e>=0&&d.splice(e,1)}function s(){h--,c(d.slice(0),function(t){t()})}r||(r=e,e=null),r=u(r||n);var a=Y(t),h=a.length;if(!h)return r(null);e||(e=h);var l={},p=0,d=[];i(function(){h||r(null,l)}),c(a,function(n){function a(){return e>p&&f(m,function(t,e){return t&&l.hasOwnProperty(e)},!0)&&!l.hasOwnProperty(n)}function h(){a()&&(p++,o(h),c[c.length-1](d,l))}for(var u,c=j(t[n])?t[n]:[t[n]],d=y(function(t,e){if(p--,e.length<=1&&(e=e[0]),t){var i={};v(l,function(t,e){i[e]=t}),i[n]=e,r(t,i)}else l[n]=e,N.setImmediate(s)}),m=c.slice(0,c.length-1),x=m.length;x--;){if(!(u=t[m[x]]))throw new Error("Has inexistant dependency");if(j(u)&&g(u,n)>=0)throw new Error("Has cyclic dependencies")}a()?(p++,c[c.length-1](d,l)):i(h)})},N.retry=function(t,e,r){function i(t,e){if("number"==typeof e)t.times=parseInt(e,10)||o;else{if("object"!=typeof e)throw new Error("Unsupported argument type for 'times': "+typeof e);t.times=parseInt(e.times,10)||o,t.interval=parseInt(e.interval,10)||s}}function n(t,e){function r(t,r){return function(i){t(function(t,e){i(!t||r,{err:t,result:e})},e)}}function i(t){return function(e){setTimeout(function(){e(null)},t)}}for(;h.times;){var n=!(h.times-=1);a.push(r(h.task,n)),!n&&h.interval>0&&a.push(i(h.interval))}N.series(a,function(e,r){r=r[r.length-1],(t||h.callback)(r.err,r.result)})}var o=5,s=0,a=[],h={times:o,interval:s},u=arguments.length;if(1>u||u>3)throw new Error("Invalid arguments - must be either (task), (task, callback), (times, task) or (times, task, callback)");return 2>=u&&"function"==typeof t&&(r=e,e=t),"function"!=typeof t&&i(h,t),h.callback=r,h.task=e,h.callback?n():n},N.waterfall=function(t,e){function r(t){return y(function(i,n){if(i)e.apply(null,[i].concat(n));else{var o=t.next();o?n.push(r(o)):n.push(e),B(t).apply(null,n)}})}if(e=u(e||n),!j(t)){var i=new Error("First argument to waterfall must be an array of functions");return e(i)}return t.length?void r(N.iterator(t))():e()},N.parallel=function(t,e){R(N.eachOf,t,e)},N.parallelLimit=function(t,e,r){R(b(e),t,r)},N.series=function(t,e){R(N.eachOfSeries,t,e)},N.iterator=function(t){function e(r){function i(){return t.length&&t[r].apply(null,arguments),i.next()}return i.next=function(){return ri;){var o=i+(n-i+1>>>1);r(e,t[o])>=0?i=o:n=o-1}return i}function o(t,e,o,s){if(null!=s&&"function"!=typeof s)throw new Error("task callback must be a function");return t.started=!0,j(e)||(e=[e]),0===e.length?N.setImmediate(function(){t.drain()}):void c(e,function(e){var a={data:e,priority:o,callback:"function"==typeof s?s:n};t.tasks.splice(i(t.tasks,a,r)+1,0,a),t.tasks.length===t.concurrency&&t.saturated(),N.setImmediate(t.process)})}var s=N.queue(t,e);return s.push=function(t,e,r){o(s,t,e,r)},delete s.unshift,s},N.cargo=function(t,e){return D(t,1,e)},N.log=P("log"),N.dir=P("dir"),N.memoize=function(t,e){var r={},i={};e=e||o;var n=y(function(n){var o=n.pop(),s=e.apply(null,n);s in r?N.setImmediate(function(){o.apply(null,r[s])}):s in i?i[s].push(o):(i[s]=[o],t.apply(null,n.concat([y(function(t){r[s]=t;var e=i[s];delete i[s];for(var n=0,o=e.length;o>n;n++)e[n].apply(null,t)})])))});return n.memo=r,n.unmemoized=t,n},N.unmemoize=function(t){return function(){return(t.unmemoized||t).apply(null,arguments)}},N.times=F(N.map),N.timesSeries=F(N.mapSeries),N.timesLimit=function(t,e,r,i){return N.mapLimit(d(t),e,r,i)},N.seq=function(){var t=arguments;return y(function(e){var r=this,i=e[e.length-1];"function"==typeof i?e.pop():i=n,N.reduce(t,e,function(t,e,i){e.apply(r,t.concat([y(function(t,e){i(t,e)})]))},function(t,e){i.apply(r,[t].concat(e))})})},N.compose=function(){return N.seq.apply(null,Array.prototype.reverse.call(arguments))},N.applyEach=L(N.eachOf),N.applyEachSeries=L(N.eachOfSeries),N.forever=function(t,e){function r(t){return t?i(t):void o(r)}var i=h(e||n),o=B(t);r()},N.ensureAsync=B,N.constant=y(function(t){var e=[null].concat(t);return function(t){return t.apply(this,e)}}),N.wrapSync=N.asyncify=function(t){return y(function(e){var r,i=e.pop();try{r=t.apply(this,e)}catch(n){return i(n)}G(r)&&"function"==typeof r.then?r.then(function(t){i(null,t)})["catch"](function(t){i(t.message?t:new Error(t))}):i(null,r)})},"object"==typeof r&&r.exports?r.exports=N:"function"==typeof t&&t.amd?t([],function(){return N}):U.async=N}()}).call(this,e("_process"),"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{_process:18}],17:[function(t,e,r){(function(t){function e(t,e){for(var r=0,i=t.length-1;i>=0;i--){var n=t[i];"."===n?t.splice(i,1):".."===n?(t.splice(i,1),r++):r&&(t.splice(i,1),r--)}if(e)for(;r--;r)t.unshift("..");return t}function i(t,e){if(t.filter)return t.filter(e);for(var r=[],i=0;i=-1&&!n;o--){var s=o>=0?arguments[o]:t.cwd();if("string"!=typeof s)throw new TypeError("Arguments to path.resolve must be strings");s&&(r=s+"/"+r,n="/"===s.charAt(0))}return r=e(i(r.split("/"),function(t){return!!t}),!n).join("/"),(n?"/":"")+r||"."},r.normalize=function(t){var n=r.isAbsolute(t),o="/"===s(t,-1);return t=e(i(t.split("/"),function(t){return!!t}),!n).join("/"),t||n||(t="."),t&&o&&(t+="/"),(n?"/":"")+t},r.isAbsolute=function(t){return"/"===t.charAt(0)},r.join=function(){var t=Array.prototype.slice.call(arguments,0);return r.normalize(i(t,function(t,e){if("string"!=typeof t)throw new TypeError("Arguments to path.join must be strings");return t}).join("/"))},r.relative=function(t,e){function i(t){for(var e=0;e=0&&""===t[r];r--);return e>r?[]:t.slice(e,r-e+1)}t=r.resolve(t).substr(1),e=r.resolve(e).substr(1);for(var n=i(t.split("/")),o=i(e.split("/")),s=Math.min(n.length,o.length),a=s,h=0;s>h;h++)if(n[h]!==o[h]){a=h;break}for(var u=[],h=a;he&&(e=t.length+e),t.substr(e,r)}}).call(this,t("_process"))},{_process:18}],18:[function(t,e,r){function i(){l=!1,a.length?u=a.concat(u):c=-1,u.length&&n()}function n(){if(!l){var t=setTimeout(i);l=!0;for(var e=u.length;e;){for(a=u,u=[];++c1)for(var r=1;r1&&(i=r[0]+"@",t=r[1]),t=t.replace(F,".");var n=t.split("."),o=s(n,e).join(".");return i+o}function h(t){for(var e,r,i=[],n=0,o=t.length;o>n;)e=t.charCodeAt(n++),e>=55296&&56319>=e&&o>n?(r=t.charCodeAt(n++),56320==(64512&r)?i.push(((1023&e)<<10)+(1023&r)+65536):(i.push(e),n--)):i.push(e);return i}function u(t){return s(t,function(t){var e="";return t>65535&&(t-=65536,e+=N(t>>>10&1023|55296),t=56320|1023&t),e+=N(t)}).join("")}function l(t){return 10>t-48?t-22:26>t-65?t-65:26>t-97?t-97:E}function c(t,e){return t+22+75*(26>t)-((0!=e)<<5)}function p(t,e,r){var i=0;for(t=r?I(t/A):t>>1,t+=I(t/e);t>B*w>>1;i+=E)t=I(t/B);return I(i+(B+1)*t/(t+C))}function d(t){var e,r,i,n,s,a,h,c,d,f,v=[],g=t.length,m=0,y=R,x=M;for(r=t.lastIndexOf(O),0>r&&(r=0),i=0;r>i;++i)t.charCodeAt(i)>=128&&o("not-basic"),v.push(t.charCodeAt(i));for(n=r>0?r+1:0;g>n;){for(s=m,a=1,h=E;n>=g&&o("invalid-input"),c=l(t.charCodeAt(n++)),(c>=E||c>I((T-m)/a))&&o("overflow"),m+=c*a,d=x>=h?S:h>=x+w?w:h-x,!(d>c);h+=E)f=E-d,a>I(T/f)&&o("overflow"),a*=f;e=v.length+1,x=p(m-s,e,0==s),I(m/e)>T-y&&o("overflow"),y+=I(m/e),m%=e,v.splice(m++,0,y)}return u(v)}function f(t){var e,r,i,n,s,a,u,l,d,f,v,g,m,y,x,b=[];for(t=h(t),g=t.length,e=R,r=0,s=M,a=0;g>a;++a)v=t[a],128>v&&b.push(N(v));for(i=n=b.length,n&&b.push(O);g>i;){for(u=T,a=0;g>a;++a)v=t[a],v>=e&&u>v&&(u=v);for(m=i+1,u-e>I((T-r)/m)&&o("overflow"),r+=(u-e)*m,e=u,a=0;g>a;++a)if(v=t[a],e>v&&++r>T&&o("overflow"),v==e){for(l=r,d=E;f=s>=d?S:d>=s+w?w:d-s,!(f>l);d+=E)x=l-f,y=E-f,b.push(N(c(f+x%y,0))),l=I(x/y);b.push(N(c(l,0))),s=p(r,m,i==n),r=0,++i}++r,++e}return b.join("")}function v(t){return a(t,function(t){return D.test(t)?d(t.slice(4).toLowerCase()):t})}function g(t){return a(t,function(t){return P.test(t)?"xn--"+f(t):t})}var m="object"==typeof i&&i&&!i.nodeType&&i,y="object"==typeof r&&r&&!r.nodeType&&r,x="object"==typeof e&&e;(x.global===x||x.window===x||x.self===x)&&(n=x);var b,_,T=2147483647,E=36,S=1,w=26,C=38,A=700,M=72,R=128,O="-",D=/^xn--/,P=/[^\x20-\x7E]/,F=/[\x2E\u3002\uFF0E\uFF61]/g,L={overflow:"Overflow: input needs wider integers to process","not-basic":"Illegal input >= 0x80 (not a basic code point)","invalid-input":"Invalid input"},B=E-S,I=Math.floor,N=String.fromCharCode;if(b={version:"1.3.2",ucs2:{decode:h,encode:u},decode:d,encode:f,toASCII:g,toUnicode:v},"function"==typeof t&&"object"==typeof t.amd&&t.amd)t("punycode",function(){return b});else if(m&&y)if(r.exports==m)y.exports=b;else for(_ in b)b.hasOwnProperty(_)&&(m[_]=b[_]);else n.punycode=b}(this)}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{}],20:[function(t,e,r){"use strict";function i(t,e){return Object.prototype.hasOwnProperty.call(t,e)}e.exports=function(t,e,r,o){e=e||"&",r=r||"=";var s={};if("string"!=typeof t||0===t.length)return s;var a=/\+/g;t=t.split(e);var h=1e3;o&&"number"==typeof o.maxKeys&&(h=o.maxKeys);var u=t.length;h>0&&u>h&&(u=h);for(var l=0;u>l;++l){var c,p,d,f,v=t[l].replace(a,"%20"),g=v.indexOf(r);g>=0?(c=v.substr(0,g),p=v.substr(g+1)):(c=v, -p=""),d=decodeURIComponent(c),f=decodeURIComponent(p),i(s,d)?n(s[d])?s[d].push(f):s[d]=[s[d],f]:s[d]=f}return s};var n=Array.isArray||function(t){return"[object Array]"===Object.prototype.toString.call(t)}},{}],21:[function(t,e,r){"use strict";function i(t,e){if(t.map)return t.map(e);for(var r=[],i=0;i",'"',"`"," ","\r","\n"," "],g=["{","}","|","\\","^","`"].concat(v),m=["'"].concat(g),y=["%","/","?",";","#"].concat(m),x=["/","?","#"],b=255,_=/^[a-z0-9A-Z_-]{0,63}$/,T=/^([a-z0-9A-Z_-]{0,63})(.*)$/,E={javascript:!0,"javascript:":!0},S={javascript:!0,"javascript:":!0},w={http:!0,https:!0,ftp:!0,gopher:!0,file:!0,"http:":!0,"https:":!0,"ftp:":!0,"gopher:":!0,"file:":!0},C=t("querystring");i.prototype.parse=function(t,e,r){if(!h(t))throw new TypeError("Parameter 'url' must be a string, not "+typeof t);var i=t;i=i.trim();var n=d.exec(i);if(n){n=n[0];var o=n.toLowerCase();this.protocol=o,i=i.substr(n.length)}if(r||n||i.match(/^\/\/[^@\/]+@[^@\/]+/)){var s="//"===i.substr(0,2);!s||n&&S[n]||(i=i.substr(2),this.slashes=!0)}if(!S[n]&&(s||n&&!w[n])){for(var a=-1,u=0;ul)&&(a=l)}var c,f;f=-1===a?i.lastIndexOf("@"):i.lastIndexOf("@",a),-1!==f&&(c=i.slice(0,f),i=i.slice(f+1),this.auth=decodeURIComponent(c)),a=-1;for(var u=0;ul)&&(a=l)}-1===a&&(a=i.length),this.host=i.slice(0,a),i=i.slice(a),this.parseHost(),this.hostname=this.hostname||"";var v="["===this.hostname[0]&&"]"===this.hostname[this.hostname.length-1];if(!v)for(var g=this.hostname.split(/\./),u=0,A=g.length;A>u;u++){var M=g[u];if(M&&!M.match(_)){for(var R="",O=0,D=M.length;D>O;O++)R+=M.charCodeAt(O)>127?"x":M[O];if(!R.match(_)){var P=g.slice(0,u),F=g.slice(u+1),L=M.match(T);L&&(P.push(L[1]),F.unshift(L[2])),F.length&&(i="/"+F.join(".")+i),this.hostname=P.join(".");break}}}if(this.hostname.length>b?this.hostname="":this.hostname=this.hostname.toLowerCase(),!v){for(var B=this.hostname.split("."),I=[],u=0;uu;u++){var j=m[u],G=encodeURIComponent(j);G===j&&(G=escape(j)),i=i.split(j).join(G)}var Y=i.indexOf("#");-1!==Y&&(this.hash=i.substr(Y),i=i.slice(0,Y));var X=i.indexOf("?");if(-1!==X?(this.search=i.substr(X),this.query=i.substr(X+1),e&&(this.query=C.parse(this.query)),i=i.slice(0,X)):e&&(this.search="",this.query={}),i&&(this.pathname=i),w[o]&&this.hostname&&!this.pathname&&(this.pathname="/"),this.pathname||this.search){var U=this.pathname||"",N=this.search||"";this.path=U+N}return this.href=this.format(),this},i.prototype.format=function(){var t=this.auth||"";t&&(t=encodeURIComponent(t),t=t.replace(/%3A/i,":"),t+="@");var e=this.protocol||"",r=this.pathname||"",i=this.hash||"",n=!1,o="";this.host?n=t+this.host:this.hostname&&(n=t+(-1===this.hostname.indexOf(":")?this.hostname:"["+this.hostname+"]"),this.port&&(n+=":"+this.port)),this.query&&u(this.query)&&Object.keys(this.query).length&&(o=C.stringify(this.query));var s=this.search||o&&"?"+o||"";return e&&":"!==e.substr(-1)&&(e+=":"),this.slashes||(!e||w[e])&&n!==!1?(n="//"+(n||""),r&&"/"!==r.charAt(0)&&(r="/"+r)):n||(n=""),i&&"#"!==i.charAt(0)&&(i="#"+i),s&&"?"!==s.charAt(0)&&(s="?"+s),r=r.replace(/[?#]/g,function(t){return encodeURIComponent(t)}),s=s.replace("#","%23"),e+n+r+s+i},i.prototype.resolve=function(t){return this.resolveObject(n(t,!1,!0)).format()},i.prototype.resolveObject=function(t){if(h(t)){var e=new i;e.parse(t,!1,!0),t=e}var r=new i;if(Object.keys(this).forEach(function(t){r[t]=this[t]},this),r.hash=t.hash,""===t.href)return r.href=r.format(),r;if(t.slashes&&!t.protocol)return Object.keys(t).forEach(function(e){"protocol"!==e&&(r[e]=t[e])}),w[r.protocol]&&r.hostname&&!r.pathname&&(r.path=r.pathname="/"),r.href=r.format(),r;if(t.protocol&&t.protocol!==r.protocol){if(!w[t.protocol])return Object.keys(t).forEach(function(e){r[e]=t[e]}),r.href=r.format(),r;if(r.protocol=t.protocol,t.host||S[t.protocol])r.pathname=t.pathname;else{for(var n=(t.pathname||"").split("/");n.length&&!(t.host=n.shift()););t.host||(t.host=""),t.hostname||(t.hostname=""),""!==n[0]&&n.unshift(""),n.length<2&&n.unshift(""),r.pathname=n.join("/")}if(r.search=t.search,r.query=t.query,r.host=t.host||"",r.auth=t.auth,r.hostname=t.hostname||t.host,r.port=t.port,r.pathname||r.search){var o=r.pathname||"",s=r.search||"";r.path=o+s}return r.slashes=r.slashes||t.slashes,r.href=r.format(),r}var a=r.pathname&&"/"===r.pathname.charAt(0),u=t.host||t.pathname&&"/"===t.pathname.charAt(0),p=u||a||r.host&&t.pathname,d=p,f=r.pathname&&r.pathname.split("/")||[],n=t.pathname&&t.pathname.split("/")||[],v=r.protocol&&!w[r.protocol];if(v&&(r.hostname="",r.port=null,r.host&&(""===f[0]?f[0]=r.host:f.unshift(r.host)),r.host="",t.protocol&&(t.hostname=null,t.port=null,t.host&&(""===n[0]?n[0]=t.host:n.unshift(t.host)),t.host=null),p=p&&(""===n[0]||""===f[0])),u)r.host=t.host||""===t.host?t.host:r.host,r.hostname=t.hostname||""===t.hostname?t.hostname:r.hostname,r.search=t.search,r.query=t.query,f=n;else if(n.length)f||(f=[]),f.pop(),f=f.concat(n),r.search=t.search,r.query=t.query;else if(!c(t.search)){if(v){r.hostname=r.host=f.shift();var g=r.host&&r.host.indexOf("@")>0?r.host.split("@"):!1;g&&(r.auth=g.shift(),r.host=r.hostname=g.shift())}return r.search=t.search,r.query=t.query,l(r.pathname)&&l(r.search)||(r.path=(r.pathname?r.pathname:"")+(r.search?r.search:"")),r.href=r.format(),r}if(!f.length)return r.pathname=null,r.search?r.path="/"+r.search:r.path=null,r.href=r.format(),r;for(var m=f.slice(-1)[0],y=(r.host||t.host)&&("."===m||".."===m)||""===m,x=0,b=f.length;b>=0;b--)m=f[b],"."==m?f.splice(b,1):".."===m?(f.splice(b,1),x++):x&&(f.splice(b,1),x--);if(!p&&!d)for(;x--;x)f.unshift("..");!p||""===f[0]||f[0]&&"/"===f[0].charAt(0)||f.unshift(""),y&&"/"!==f.join("/").substr(-1)&&f.push("");var _=""===f[0]||f[0]&&"/"===f[0].charAt(0);if(v){r.hostname=r.host=_?"":f.length?f.shift():"";var g=r.host&&r.host.indexOf("@")>0?r.host.split("@"):!1;g&&(r.auth=g.shift(),r.host=r.hostname=g.shift())}return p=p||r.host&&f.length,p&&!_&&f.unshift(""),f.length?r.pathname=f.join("/"):(r.pathname=null,r.path=null),l(r.pathname)&&l(r.search)||(r.path=(r.pathname?r.pathname:"")+(r.search?r.search:"")),r.auth=t.auth||r.auth,r.slashes=r.slashes||t.slashes,r.href=r.format(),r},i.prototype.parseHost=function(){var t=this.host,e=f.exec(t);e&&(e=e[0],":"!==e&&(this.port=e.substr(1)),t=t.substr(0,t.length-e.length)),t&&(this.hostname=t)}},{punycode:19,querystring:22}],24:[function(t,e,r){"use strict";function i(t,e,r){r=r||2;var i=e&&e.length,o=i?e[0]*r:t.length,a=n(t,0,o,r,!0),h=[];if(!a)return h;var u,l,p,d,f,v,g;if(i&&(a=c(t,e,a,r)),t.length>80*r){u=p=t[0],l=d=t[1];for(var m=r;o>m;m+=r)f=t[m],v=t[m+1],u>f&&(u=f),l>v&&(l=v),f>p&&(p=f),v>d&&(d=v);g=Math.max(p-u,d-l)}return s(a,h,r,u,l,g),h}function n(t,e,r,i,n){var o,s,a,h=0;for(o=e,s=r-i;r>o;o+=i)h+=(t[s]-t[o])*(t[o+1]+t[s+1]),s=o;if(n===h>0)for(o=e;r>o;o+=i)a=M(o,t[o],t[o+1],a);else for(o=r-i;o>=e;o-=i)a=M(o,t[o],t[o+1],a);return a}function o(t,e){if(!t)return t;e||(e=t);var r,i=t;do if(r=!1,i.steiner||!T(i,i.next)&&0!==_(i.prev,i,i.next))i=i.next;else{if(R(i),i=e=i.prev,i===i.next)return null;r=!0}while(r||i!==e);return e}function s(t,e,r,i,n,c,p){if(t){!p&&c&&v(t,i,n,c);for(var d,f,g=t;t.prev!==t.next;)if(d=t.prev,f=t.next,c?h(t,i,n,c):a(t))e.push(d.i/r),e.push(t.i/r),e.push(f.i/r),R(t),t=f.next,g=f.next;else if(t=f,t===g){p?1===p?(t=u(t,e,r),s(t,e,r,i,n,c,2)):2===p&&l(t,e,r,i,n,c):s(o(t),e,r,i,n,c,1);break}}}function a(t){var e=t.prev,r=t,i=t.next;if(_(e,r,i)>=0)return!1;for(var n=t.next.next;n!==t.prev;){if(x(e.x,e.y,r.x,r.y,i.x,i.y,n.x,n.y)&&_(n.prev,n,n.next)>=0)return!1;n=n.next}return!0}function h(t,e,r,i){var n=t.prev,o=t,s=t.next;if(_(n,o,s)>=0)return!1;for(var a=n.xo.x?n.x>s.x?n.x:s.x:o.x>s.x?o.x:s.x,l=n.y>o.y?n.y>s.y?n.y:s.y:o.y>s.y?o.y:s.y,c=m(a,h,e,r,i),p=m(u,l,e,r,i),d=t.nextZ;d&&d.z<=p;){if(d!==t.prev&&d!==t.next&&x(n.x,n.y,o.x,o.y,s.x,s.y,d.x,d.y)&&_(d.prev,d,d.next)>=0)return!1;d=d.nextZ}for(d=t.prevZ;d&&d.z>=c;){if(d!==t.prev&&d!==t.next&&x(n.x,n.y,o.x,o.y,s.x,s.y,d.x,d.y)&&_(d.prev,d,d.next)>=0)return!1;d=d.prevZ}return!0}function u(t,e,r){var i=t;do{var n=i.prev,o=i.next.next;E(n,i,i.next,o)&&w(n,o)&&w(o,n)&&(e.push(n.i/r),e.push(i.i/r),e.push(o.i/r),R(i),R(i.next),i=t=o),i=i.next}while(i!==t);return i}function l(t,e,r,i,n,a){var h=t;do{for(var u=h.next.next;u!==h.prev;){if(h.i!==u.i&&b(h,u)){var l=A(h,u);return h=o(h,h.next),l=o(l,l.next),s(h,e,r,i,n,a),void s(l,e,r,i,n,a)}u=u.next}h=h.next}while(h!==t)}function c(t,e,r,i){var s,a,h,u,l,c=[];for(s=0,a=e.length;a>s;s++)h=e[s]*i,u=a-1>s?e[s+1]*i:t.length,l=n(t,h,u,i,!1),l===l.next&&(l.steiner=!0),c.push(y(l));for(c.sort(p),s=0;s=i.next.y){var a=i.x+(o-i.y)*(i.next.x-i.x)/(i.next.y-i.y);n>=a&&a>s&&(s=a,r=i.x=i.x&&i.x>=r.x&&x(oh||h===l&&i.x>r.x)&&w(i,t)&&(r=i,l=h)),i=i.next;return r}function v(t,e,r,i){var n=t;do null===n.z&&(n.z=m(n.x,n.y,e,r,i)),n.prevZ=n.prev,n.nextZ=n.next,n=n.next;while(n!==t);n.prevZ.nextZ=null,n.prevZ=null,g(n)}function g(t){var e,r,i,n,o,s,a,h,u=1;do{for(r=t,t=null,o=null,s=0;r;){for(s++,i=r,a=0,e=0;u>e&&(a++,i=i.nextZ,i);e++);for(h=u;a>0||h>0&&i;)0===a?(n=i,i=i.nextZ,h--):0!==h&&i?r.z<=i.z?(n=r,r=r.nextZ,a--):(n=i,i=i.nextZ,h--):(n=r,r=r.nextZ,a--),o?o.nextZ=n:t=n,n.prevZ=o,o=n;r=i}o.nextZ=null,u*=2}while(s>1);return t}function m(t,e,r,i,n){return t=32767*(t-r)/n,e=32767*(e-i)/n,t=16711935&(t|t<<8),t=252645135&(t|t<<4),t=858993459&(t|t<<2),t=1431655765&(t|t<<1),e=16711935&(e|e<<8),e=252645135&(e|e<<4),e=858993459&(e|e<<2),e=1431655765&(e|e<<1),t|e<<1}function y(t){var e=t,r=t;do e.x=0&&(t-s)*(i-a)-(r-s)*(e-a)>=0&&(r-s)*(o-a)-(n-s)*(i-a)>=0}function b(t,e){return T(t,e)||t.next.i!==e.i&&t.prev.i!==e.i&&!S(t,e)&&w(t,e)&&w(e,t)&&C(t,e)}function _(t,e,r){return(e.y-t.y)*(r.x-e.x)-(e.x-t.x)*(r.y-e.y)}function T(t,e){return t.x===e.x&&t.y===e.y}function E(t,e,r,i){return _(t,e,r)>0!=_(t,e,i)>0&&_(r,i,t)>0!=_(r,i,e)>0}function S(t,e){var r=t;do{if(r.i!==t.i&&r.next.i!==t.i&&r.i!==e.i&&r.next.i!==e.i&&E(r,r.next,t,e))return!0;r=r.next}while(r!==t);return!1}function w(t,e){return _(t.prev,t,t.next)<0?_(t,e,t.next)>=0&&_(t,t.prev,e)>=0:_(t,e,t.prev)<0||_(t,t.next,e)<0}function C(t,e){var r=t,i=!1,n=(t.x+e.x)/2,o=(t.y+e.y)/2;do r.y>o!=r.next.y>o&&n<(r.next.x-r.x)*(o-r.y)/(r.next.y-r.y)+r.x&&(i=!i),r=r.next;while(r!==t);return i}function A(t,e){var r=new O(t.i,t.x,t.y),i=new O(e.i,e.x,e.y),n=t.next,o=e.prev;return t.next=e,e.prev=t,r.next=n,n.prev=r,i.next=r,r.prev=i,o.next=i,i.prev=o,i}function M(t,e,r,i){var n=new O(t,e,r);return i?(n.next=i.next,n.prev=i,i.next.prev=n,i.next=n):(n.prev=n,n.next=n),n}function R(t){t.next.prev=t.prev,t.prev.next=t.next,t.prevZ&&(t.prevZ.nextZ=t.nextZ),t.nextZ&&(t.nextZ.prevZ=t.prevZ)}function O(t,e,r){this.i=t,this.x=e,this.y=r,this.prev=null,this.next=null,this.z=null,this.prevZ=null,this.nextZ=null,this.steiner=!1}e.exports=i},{}],25:[function(t,e,r){"use strict";function i(t,e,r){this.fn=t,this.context=e,this.once=r||!1}function n(){}var o="function"!=typeof Object.create?"~":!1;n.prototype._events=void 0,n.prototype.listeners=function(t,e){var r=o?o+t:t,i=this._events&&this._events[r];if(e)return!!i;if(!i)return[];if(i.fn)return[i.fn];for(var n=0,s=i.length,a=new Array(s);s>n;n++)a[n]=i[n].fn;return a},n.prototype.emit=function(t,e,r,i,n,s){var a=o?o+t:t;if(!this._events||!this._events[a])return!1;var h,u,l=this._events[a],c=arguments.length;if("function"==typeof l.fn){switch(l.once&&this.removeListener(t,l.fn,void 0,!0),c){case 1:return l.fn.call(l.context),!0;case 2:return l.fn.call(l.context,e),!0;case 3:return l.fn.call(l.context,e,r),!0;case 4:return l.fn.call(l.context,e,r,i),!0;case 5:return l.fn.call(l.context,e,r,i,n),!0;case 6:return l.fn.call(l.context,e,r,i,n,s),!0}for(u=1,h=new Array(c-1);c>u;u++)h[u-1]=arguments[u];l.fn.apply(l.context,h)}else{var p,d=l.length;for(u=0;d>u;u++)switch(l[u].once&&this.removeListener(t,l[u].fn,void 0,!0),c){case 1:l[u].fn.call(l[u].context);break;case 2:l[u].fn.call(l[u].context,e);break;case 3:l[u].fn.call(l[u].context,e,r);break;default:if(!h)for(p=1,h=new Array(c-1);c>p;p++)h[p-1]=arguments[p];l[u].fn.apply(l[u].context,h)}}return!0},n.prototype.on=function(t,e,r){var n=new i(e,r||this),s=o?o+t:t;return this._events||(this._events=o?{}:Object.create(null)),this._events[s]?this._events[s].fn?this._events[s]=[this._events[s],n]:this._events[s].push(n):this._events[s]=n,this},n.prototype.once=function(t,e,r){var n=new i(e,r||this,!0),s=o?o+t:t;return this._events||(this._events=o?{}:Object.create(null)),this._events[s]?this._events[s].fn?this._events[s]=[this._events[s],n]:this._events[s].push(n):this._events[s]=n,this},n.prototype.removeListener=function(t,e,r,i){var n=o?o+t:t;if(!this._events||!this._events[n])return this;var s=this._events[n],a=[];if(e)if(s.fn)(s.fn!==e||i&&!s.once||r&&s.context!==r)&&a.push(s);else for(var h=0,u=s.length;u>h;h++)(s[h].fn!==e||i&&!s[h].once||r&&s[h].context!==r)&&a.push(s[h]);return a.length?this._events[n]=1===a.length?a[0]:a:delete this._events[n],this},n.prototype.removeAllListeners=function(t){return this._events?(t?delete this._events[o?o+t:t]:this._events=o?{}:Object.create(null),this):this},n.prototype.off=n.prototype.removeListener,n.prototype.addListener=n.prototype.on,n.prototype.setMaxListeners=function(){return this},n.prefixed=o,"undefined"!=typeof e&&(e.exports=n)},{}],26:[function(t,e,r){"use strict";function i(t){if(null===t||void 0===t)throw new TypeError("Object.assign cannot be called with null or undefined");return Object(t)}var n=Object.prototype.hasOwnProperty,o=Object.prototype.propertyIsEnumerable;e.exports=Object.assign||function(t,e){for(var r,s,a=i(t),h=1;h=t.length&&r())}if(r=r||function(){},!t.length)return r();var o=0;u(t,function(t){e(t,i(n))})},s.forEach=s.each,s.eachSeries=function(t,e,r){if(r=r||function(){},!t.length)return r();var i=0,n=function(){e(t[i],function(e){e?(r(e),r=function(){}):(i+=1,i>=t.length?r():n())})};n()},s.forEachSeries=s.eachSeries,s.eachLimit=function(t,e,r,i){var n=d(e);n.apply(null,[t,r,i])},s.forEachLimit=s.eachLimit;var d=function(t){return function(e,r,i){if(i=i||function(){},!e.length||0>=t)return i();var n=0,o=0,s=0;!function a(){if(n>=e.length)return i();for(;t>s&&o=e.length?i():a())})}()}},f=function(t){return function(){var e=Array.prototype.slice.call(arguments);return t.apply(null,[s.each].concat(e))}},v=function(t,e){return function(){var r=Array.prototype.slice.call(arguments);return e.apply(null,[d(t)].concat(r))}},g=function(t){return function(){var e=Array.prototype.slice.call(arguments);return t.apply(null,[s.eachSeries].concat(e))}},m=function(t,e,r,i){if(e=l(e,function(t,e){return{index:e,value:t}}),i){var n=[];t(e,function(t,e){r(t.value,function(r,i){n[t.index]=i,e(r)})},function(t){i(t,n)})}else t(e,function(t,e){r(t.value,function(t){e(t)})})};s.map=f(m),s.mapSeries=g(m),s.mapLimit=function(t,e,r,i){return y(e)(t,r,i)};var y=function(t){return v(t,m)};s.reduce=function(t,e,r,i){s.eachSeries(t,function(t,i){r(e,t,function(t,r){e=r,i(t)})},function(t){i(t,e)})},s.inject=s.reduce,s.foldl=s.reduce,s.reduceRight=function(t,e,r,i){var n=l(t,function(t){return t}).reverse();s.reduce(n,e,r,i)},s.foldr=s.reduceRight;var x=function(t,e,r,i){var n=[];e=l(e,function(t,e){return{index:e,value:t}}),t(e,function(t,e){r(t.value,function(r){r&&n.push(t),e()})},function(t){i(l(n.sort(function(t,e){return t.index-e.index}),function(t){return t.value}))})};s.filter=f(x),s.filterSeries=g(x),s.select=s.filter,s.selectSeries=s.filterSeries;var b=function(t,e,r,i){var n=[];e=l(e,function(t,e){return{index:e,value:t}}),t(e,function(t,e){r(t.value,function(r){r||n.push(t),e()})},function(t){i(l(n.sort(function(t,e){return t.index-e.index}),function(t){return t.value}))})};s.reject=f(b),s.rejectSeries=g(b);var _=function(t,e,r,i){t(e,function(t,e){r(t,function(r){r?(i(t),i=function(){}):e()})},function(t){i()})};s.detect=f(_),s.detectSeries=g(_),s.some=function(t,e,r){s.each(t,function(t,i){e(t,function(t){t&&(r(!0),r=function(){}),i()})},function(t){r(!1)})},s.any=s.some,s.every=function(t,e,r){s.each(t,function(t,i){e(t,function(t){t||(r(!1),r=function(){}),i()})},function(t){r(!0)})},s.all=s.every,s.sortBy=function(t,e,r){s.map(t,function(t,r){e(t,function(e,i){e?r(e):r(null,{value:t,criteria:i})})},function(t,e){if(t)return r(t);var i=function(t,e){var r=t.criteria,i=e.criteria;return i>r?-1:r>i?1:0};r(null,l(e.sort(i),function(t){return t.value}))})},s.auto=function(t,e){e=e||function(){};var r=p(t),i=r.length;if(!i)return e();var n={},o=[],a=function(t){o.unshift(t)},l=function(t){for(var e=0;ei;){var o=i+(n-i+1>>>1);r(e,t[o])>=0?i=o:n=o-1}return i}function n(t,e,n,o){return t.started||(t.started=!0),h(e)||(e=[e]),0==e.length?s.setImmediate(function(){t.drain&&t.drain()}):void u(e,function(e){var a={data:e,priority:n,callback:"function"==typeof o?o:null};t.tasks.splice(i(t.tasks,a,r)+1,0,a),t.saturated&&t.tasks.length===t.concurrency&&t.saturated(),s.setImmediate(t.process)})}var o=s.queue(t,e);return o.push=function(t,e,r){n(o,t,e,r)},delete o.unshift,o},s.cargo=function(t,e){var r=!1,i=[],n={tasks:i,payload:e,saturated:null,empty:null,drain:null,drained:!0,push:function(t,r){h(t)||(t=[t]),u(t,function(t){i.push({data:t,callback:"function"==typeof r?r:null}),n.drained=!1,n.saturated&&i.length===e&&n.saturated()}),s.setImmediate(n.process)},process:function o(){if(!r){if(0===i.length)return n.drain&&!n.drained&&n.drain(),void(n.drained=!0);var s="number"==typeof e?i.splice(0,e):i.splice(0,i.length),a=l(s,function(t){return t.data});n.empty&&n.empty(),r=!0,t(a,function(){r=!1;var t=arguments;u(s,function(e){e.callback&&e.callback.apply(null,t)}),o()})}},length:function(){return i.length},running:function(){return r}};return n};var S=function(t){return function(e){var r=Array.prototype.slice.call(arguments,1);e.apply(null,r.concat([function(e){var r=Array.prototype.slice.call(arguments,1);"undefined"!=typeof console&&(e?console.error&&console.error(e):console[t]&&u(r,function(e){console[t](e)}))}]))}};s.log=S("log"),s.dir=S("dir"),s.memoize=function(t,e){var r={},i={};e=e||function(t){return t};var n=function(){var n=Array.prototype.slice.call(arguments),o=n.pop(),a=e.apply(null,n);a in r?s.nextTick(function(){o.apply(null,r[a])}):a in i?i[a].push(o):(i[a]=[o],t.apply(null,n.concat([function(){r[a]=arguments;var t=i[a];delete i[a];for(var e=0,n=t.length;n>e;e++)t[e].apply(null,arguments)}])))};return n.memo=r,n.unmemoized=t,n},s.unmemoize=function(t){return function(){return(t.unmemoized||t).apply(null,arguments)}},s.times=function(t,e,r){for(var i=[],n=0;t>n;n++)i.push(n);return s.map(i,e,r)},s.timesSeries=function(t,e,r){for(var i=[],n=0;t>n;n++)i.push(n);return s.mapSeries(i,e,r)},s.seq=function(){var t=arguments;return function(){var e=this,r=Array.prototype.slice.call(arguments),i=r.pop();s.reduce(t,r,function(t,r,i){r.apply(e,t.concat([function(){var t=arguments[0],e=Array.prototype.slice.call(arguments,1);i(t,e)}]))},function(t,r){i.apply(e,[t].concat(r))})}},s.compose=function(){return s.seq.apply(null,Array.prototype.reverse.call(arguments))};var w=function(t,e){var r=function(){var r=this,i=Array.prototype.slice.call(arguments),n=i.pop();return t(e,function(t,e){t.apply(r,i.concat([e]))},n)};if(arguments.length>2){var i=Array.prototype.slice.call(arguments,2);return r.apply(this,i)}return r};s.applyEach=f(w),s.applyEachSeries=g(w),s.forever=function(t,e){function r(i){if(i){if(e)return e(i);throw i}t(r)}r()},"undefined"!=typeof r&&r.exports?r.exports=s:"undefined"!=typeof t&&t.amd?t([],function(){return s}):n.async=s}()}).call(this,e("_process"))},{_process:18}],28:[function(t,e,r){function i(t,e){a.call(this),e=e||10,this.baseUrl=t||"",this.progress=0,this.loading=!1,this._progressChunk=0,this._beforeMiddleware=[],this._afterMiddleware=[],this._boundLoadResource=this._loadResource.bind(this),this._boundOnLoad=this._onLoad.bind(this),this._buffer=[],this._numToLoad=0,this._queue=n.queue(this._boundLoadResource,e),this.resources={}}var n=t("async"),o=t("url"),s=t("./Resource"),a=t("eventemitter3");i.prototype=Object.create(a.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.add=i.prototype.enqueue=function(t,e,r,i){if(Array.isArray(t)){for(var n=0;n0)if(this.xhrType===i.XHR_RESPONSE_TYPE.TEXT)this.data=t.responseText;else if(this.xhrType===i.XHR_RESPONSE_TYPE.JSON)try{this.data=JSON.parse(t.responseText),this.isJson=!0}catch(r){this.error=new Error("Error trying to parse loaded json:",r)}else if(this.xhrType===i.XHR_RESPONSE_TYPE.DOCUMENT)try{if(window.DOMParser){var n=new DOMParser;this.data=n.parseFromString(t.responseText,"text/xml")}else{var o=document.createElement("div");o.innerHTML=t.responseText,this.data=o}this.isXml=!0}catch(r){this.error=new Error("Error trying to parse loaded xml:",r)}else this.data=t.response||t.responseText;else this.error=new Error("["+t.status+"]"+t.statusText+":"+t.responseURL);this.complete()},i.prototype._determineCrossOrigin=function(t,e){if(0===t.indexOf("data:"))return"";e=e||window.location,u||(u=document.createElement("a")),u.href=t,t=a.parse(u.href);var r=!t.port&&""===e.port||t.port===e.port;return t.hostname===e.hostname&&r&&t.protocol===e.protocol?"":"anonymous"},i.prototype._determineXhrType=function(){return i._xhrTypeMap[this._getExtension()]||i.XHR_RESPONSE_TYPE.TEXT},i.prototype._determineLoadType=function(){return i._loadTypeMap[this._getExtension()]||i.LOAD_TYPE.XHR},i.prototype._getExtension=function(){var t,e=this.url;if(this.isDataUrl){var r=e.indexOf("/");t=e.substring(r+1,e.indexOf(";",r))}else{var i=e.indexOf("?");-1!==i&&(e=e.substring(0,i)),t=e.substring(e.lastIndexOf(".")+1)}return t},i.prototype._getMimeFromXhrType=function(t){switch(t){case i.XHR_RESPONSE_TYPE.BUFFER:return"application/octet-binary";case i.XHR_RESPONSE_TYPE.BLOB:return"application/blob";case i.XHR_RESPONSE_TYPE.DOCUMENT:return"application/xml";case i.XHR_RESPONSE_TYPE.JSON:return"application/json";case i.XHR_RESPONSE_TYPE.DEFAULT:case i.XHR_RESPONSE_TYPE.TEXT:default:return"text/plain"}},i.LOAD_TYPE={XHR:1,IMAGE:2,AUDIO:3,VIDEO:4},i.XHR_READY_STATE={UNSENT:0,OPENED:1,HEADERS_RECEIVED:2,LOADING:3,DONE:4},i.XHR_RESPONSE_TYPE={DEFAULT:"text",BUFFER:"arraybuffer",BLOB:"blob",DOCUMENT:"document",JSON:"json",TEXT:"text"},i._loadTypeMap={gif:i.LOAD_TYPE.IMAGE,png:i.LOAD_TYPE.IMAGE,bmp:i.LOAD_TYPE.IMAGE,jpg:i.LOAD_TYPE.IMAGE,jpeg:i.LOAD_TYPE.IMAGE,tif:i.LOAD_TYPE.IMAGE,tiff:i.LOAD_TYPE.IMAGE,webp:i.LOAD_TYPE.IMAGE,tga:i.LOAD_TYPE.IMAGE},i._xhrTypeMap={xhtml:i.XHR_RESPONSE_TYPE.DOCUMENT,html:i.XHR_RESPONSE_TYPE.DOCUMENT,htm:i.XHR_RESPONSE_TYPE.DOCUMENT,xml:i.XHR_RESPONSE_TYPE.DOCUMENT,tmx:i.XHR_RESPONSE_TYPE.DOCUMENT,tsx:i.XHR_RESPONSE_TYPE.DOCUMENT,svg:i.XHR_RESPONSE_TYPE.DOCUMENT,gif:i.XHR_RESPONSE_TYPE.BLOB,png:i.XHR_RESPONSE_TYPE.BLOB,bmp:i.XHR_RESPONSE_TYPE.BLOB,jpg:i.XHR_RESPONSE_TYPE.BLOB,jpeg:i.XHR_RESPONSE_TYPE.BLOB,tif:i.XHR_RESPONSE_TYPE.BLOB,tiff:i.XHR_RESPONSE_TYPE.BLOB,webp:i.XHR_RESPONSE_TYPE.BLOB,tga:i.XHR_RESPONSE_TYPE.BLOB,json:i.XHR_RESPONSE_TYPE.JSON,text:i.XHR_RESPONSE_TYPE.TEXT,txt:i.XHR_RESPONSE_TYPE.TEXT},i.setExtensionLoadType=function(t,e){o(i._loadTypeMap,t,e)},i.setExtensionXhrType=function(t,e){o(i._xhrTypeMap,t,e)}},{eventemitter3:25,url:23}],30:[function(t,e,r){e.exports={_keyStr:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",encodeBinary:function(t){for(var e,r="",i=new Array(4),n=0,o=0,s=0;n>2,i[1]=(3&e[0])<<4|e[1]>>4,i[2]=(15&e[1])<<2|e[2]>>6,i[3]=63&e[2],s=n-(t.length-1)){case 2:i[3]=64,i[2]=64;break;case 1:i[3]=64}for(o=0;o","Richard Davey "],main:"./src/index.js",homepage:"http://goodboydigital.com/",bugs:"https://github.com/pixijs/pixi.js/issues",license:"MIT",repository:{type:"git",url:"https://github.com/pixijs/pixi.js.git"},scripts:{start:"gulp && gulp watch",test:"gulp && testem ci",build:"gulp",docs:"jsdoc -c ./gulp/util/jsdoc.conf.json -R README.md"},files:["bin/","src/","CONTRIBUTING.md","LICENSE","package.json","README.md"],dependencies:{async:"^1.5.0",brfs:"^1.4.1",earcut:"^2.0.7",eventemitter3:"^1.1.1","object-assign":"^4.0.1","pixi-gl-core":"git+https://github.com/GoodBoyDigital/pixi-gl-core.git","resource-loader":"^1.6.4"},devDependencies:{browserify:"^11.1.0",chai:"^3.2.0",del:"^2.0.2",gulp:"^3.9.0","gulp-cached":"^1.1.0","gulp-concat":"^2.6.0","gulp-debug":"^2.1.0","gulp-header":"^1.7.1","gulp-jshint":"^1.11.2","gulp-mirror":"^0.4.0","gulp-plumber":"^1.0.1","gulp-rename":"^1.2.2","gulp-sourcemaps":"^1.5.2","gulp-uglify":"^1.4.1","gulp-util":"^3.0.6","jaguarjs-jsdoc":"git+https://github.com/davidshimjs/jaguarjs-jsdoc.git",jsdoc:"^3.3.2","jshint-summary":"^0.4.0",minimist:"^1.2.0",mocha:"^2.3.2","require-dir":"^0.3.0","run-sequence":"^1.1.2",testem:"^0.9.4","vinyl-buffer":"^1.0.0","vinyl-source-stream":"^1.1.0",watchify:"^3.4.0"},browserify:{transform:["brfs"]}}},{}],35:[function(t,e,r){function i(t){var e=document.createElement("div");e.style.width="100px",e.style.height="100px",e.style.position="absolute",e.style.top=0,e.style.left=0,e.style.zIndex=2,this.div=e,this.pool=[],this.renderId=0,this.debug=!1,this.renderer=t,this.children=[],this._onKeyDown=this._onKeyDown.bind(this),this._onMouseMove=this._onMouseMove.bind(this),this.isActive=!1,window.addEventListener("keydown",this._onKeyDown,!1)}var n=t("../core");Object.assign(n.DisplayObject.prototype,t("./accessibleTarget")),i.prototype.constructor=i,e.exports=i,i.prototype.activate=function(){this.isActive||(this.isActive=!0,window.document.addEventListener("mousemove",this._onMouseMove,!0),window.removeEventListener("keydown",this._onKeyDown,!1),this.renderer.on("postrender",this.update,this),this.renderer.view.parentNode.appendChild(this.div))},i.prototype.deactivate=function(){this.isActive&&(this.isActive=!1,window.document.removeEventListener("mousemove",this._onMouseMove),window.addEventListener("keydown",this._onKeyDown,!1),this.renderer.off("postrender",this.update),this.div.parentNode.removeChild(this.div))},i.prototype.updateAccessibleObjects=function(t){if(t.visible){t.accessible&&t.interactive&&(t._accessibleActive||this.addChild(t),t.renderId=this.renderId);for(var e=t.children,r=e.length-1;r>=0;r--)this.updateAccessibleObjects(e[r])}},i.prototype.update=function(){this.updateAccessibleObjects(this.renderer._lastObjectRendered);var t=this.renderer.view.getBoundingClientRect(),e=t.width/this.renderer.width,r=t.height/this.renderer.height,i=this.div;i.style.left=t.left+"px",i.style.top=t.top+"px",i.style.width=this.renderer.width+"px",i.style.height=this.renderer.height+"px";for(var o=0;othis.renderer.width&&(t.width=this.renderer.width-t.x),t.y+t.height>this.renderer.height&&(t.height=this.renderer.height-t.y)},i.prototype.addChild=function(t){var e=this.pool.pop();e||(e=document.createElement("button"),e.style.width="100px",e.style.height="100px",e.style.backgroundColor=this.debug?"rgba(255,0,0,0.5)":"transparent",e.style.position="absolute",e.style.zIndex=2,e.style.borderStyle="none",e.addEventListener("click",this._onClick.bind(this)),e.addEventListener("focus",this._onFocus.bind(this)),e.addEventListener("focusout",this._onFocusOut.bind(this))),e.title=t.accessibleTitle||"displayObject "+this.tabIndex,t._accessibleActive=!0,t._accessibleDiv=e,e.displayObject=t,this.children.push(t),this.div.appendChild(t._accessibleDiv),t._accessibleDiv.tabIndex=t.tabIndex},i.prototype._onClick=function(t){var e=this.renderer.plugins.interaction;e.dispatchEvent(t.target.displayObject,"click",e.eventData)},i.prototype._onFocus=function(t){var e=this.renderer.plugins.interaction;e.dispatchEvent(t.target.displayObject,"mouseover",e.eventData)},i.prototype._onFocusOut=function(t){var e=this.renderer.plugins.interaction;e.dispatchEvent(t.target.displayObject,"mouseout",e.eventData)},i.prototype._onKeyDown=function(t){9===t.keyCode&&this.activate()},i.prototype._onMouseMove=function(){this.deactivate()},i.prototype.destroy=function(){this.div=null;for(var t=0;t1)for(var r=0;e>r;r++)this.addChild(arguments[r]);else t.parent&&t.parent.removeChild(t),t.parent=this,this.children.push(t),this.onChildrenChange(this.children.length-1),t.emit("added",this);return t},i.prototype.addChildAt=function(t,e){if(e>=0&&e<=this.children.length)return t.parent&&t.parent.removeChild(t),t.parent=this,this.children.splice(e,0,t),this.onChildrenChange(e),t.emit("added",this),t;throw new Error(t+"addChildAt: The index "+e+" supplied is out of bounds "+this.children.length)},i.prototype.swapChildren=function(t,e){if(t!==e){var r=this.getChildIndex(t),i=this.getChildIndex(e);if(0>r||0>i)throw new Error("swapChildren: Both the supplied DisplayObjects must be children of the caller.");this.children[r]=e,this.children[i]=t,this.onChildrenChange(i>r?r:i)}},i.prototype.getChildIndex=function(t){var e=this.children.indexOf(t);if(-1===e)throw new Error("The supplied DisplayObject must be a child of the caller");return e},i.prototype.setChildIndex=function(t,e){if(0>e||e>=this.children.length)throw new Error("The supplied index is out of bounds");var r=this.getChildIndex(t);o.removeItems(this.children,r,1),this.children.splice(e,0,t),this.onChildrenChange(e)},i.prototype.getChildAt=function(t){if(0>t||t>=this.children.length)throw new Error("getChildAt: Supplied index "+t+" does not exist in the child list, or the supplied DisplayObject is not a child of the caller");return this.children[t]},i.prototype.removeChild=function(t){var e=arguments.length;if(e>1)for(var r=0;e>r;r++)this.removeChild(arguments[r]);else{var i=this.children.indexOf(t);if(-1===i)return;t.parent=null,o.removeItems(this.children,i,1),this.onChildrenChange(i),t.emit("removed",this)}return t},i.prototype.removeChildAt=function(t){var e=this.getChildAt(t);return e.parent=null,o.removeItems(this.children,t,1),this.onChildrenChange(t),e.emit("removed",this),e},i.prototype.removeChildren=function(t,e){var r,i,n=t||0,o="number"==typeof e?e:this.children.length,s=o-n;if(s>0&&o>=s){for(r=this.children.splice(n,s),i=0;it;++t)this.children[t].updateTransform();this.dirty=!1}},i.prototype.containerUpdateTransform=i.prototype.updateTransform,i.prototype.getBounds=function(){if(!this._currentBounds){if(0===this.children.length)return n.Rectangle.EMPTY;for(var t,e,r,i=1/0,o=1/0,s=-(1/0),a=-(1/0),h=!1,u=0,l=this.children.length;l>u;++u){var c=this.children[u];c.visible&&(h=!0,t=this.children[u].getBounds(),i=ie?s:e,a=a>r?a:r)}if(!h)return n.Rectangle.EMPTY;var p=this._bounds;p.x=i,p.y=o,p.width=s-i,p.height=a-o,this._currentBounds=p}return this._currentBounds},i.prototype.containerGetBounds=i.prototype.getBounds,i.prototype.getLocalBounds=function(){var t=this.worldTransform;this.worldTransform=n.Matrix.IDENTITY;for(var e=0,r=this.children.length;r>e;++e)this.children[e].updateTransform();return this.worldTransform=t,this._currentBounds=null,this.getBounds(n.Matrix.IDENTITY)},i.prototype.renderWebGL=function(t){if(this.visible&&!(this.worldAlpha<=0)&&this.renderable){var e,r;if(this._mask||this._filters){for(t.currentRenderer.flush(),this._filters&&this._filters.length&&t.filterManager.pushFilter(this,this._filters),this._mask&&t.maskManager.pushMask(this,this._mask),t.currentRenderer.start(),this._renderWebGL(t),e=0,r=this.children.length;r>e;e++)this.children[e].renderWebGL(t);t.currentRenderer.flush(),this._mask&&t.maskManager.popMask(this,this._mask),this._filters&&t.filterManager.popFilter(),t.currentRenderer.start()}else for(this._renderWebGL(t),e=0,r=this.children.length;r>e;++e)this.children[e].renderWebGL(t)}},i.prototype._renderWebGL=function(t){},i.prototype._renderCanvas=function(t){},i.prototype.renderCanvas=function(t){if(this.visible&&!(this.alpha<=0)&&this.renderable){this._mask&&t.maskManager.pushMask(this._mask,t),this._renderCanvas(t);for(var e=0,r=this.children.length;r>e;++e)this.children[e].renderCanvas(t);this._mask&&t.maskManager.popMask(t)}},i.prototype.destroy=function(t){if(s.prototype.destroy.call(this),t)for(var e=0,r=this.children.length;r>e;++e)this.children[e].destroy(t);this.removeChildren(),this.children=null}},{"../math":48,"../textures/RenderTexture":91,"../utils":98,"./DisplayObject":40}],40:[function(t,e,r){function i(){s.call(this),this.position=new n.Point,this.scale=new n.Point(1,1),this.pivot=new n.Point(0,0),this.skew=new n.Point(0,0),this._rotation=0,this.alpha=1,this.visible=!0,this.renderable=!0,this.parent=null,this.worldAlpha=1,this.worldTransform=new n.Matrix,this.localTransform=new n.Matrix,this.filterArea=null,this._sr=0,this._cr=1,this._bounds=new n.Rectangle(0,0,1,1),this._currentBounds=null,this._mask=null,this.dirty=!0}var n=t("../math"),o=t("../textures/RenderTexture"),s=t("eventemitter3"),a=(t("../const"),new n.Matrix),h={worldTransform:new n.Matrix,worldAlpha:1,children:[]};i.prototype=Object.create(s.prototype),i.prototype.constructor=i,e.exports=i,Object.defineProperties(i.prototype,{x:{get:function(){return this.position.x},set:function(t){this.position.x=t,this.dirty=!0}},y:{get:function(){return this.position.y},set:function(t){this.position.y=t,this.dirty=!0}},scaleX:{get:function(){return this.scale.x},set:function(t){this.scale.x=t,this.dirty=!0}},scaleY:{get:function(){return this.scale.y},set:function(t){this.scale.y=t,this.dirty=!0}},rotation:{get:function(){return this._rotation},set:function(t){this._rotation=t,this.dirty=!0,this._sr=Math.sin(t),this._cr=Math.cos(t)}},scaleY:{get:function(){return this.scale.y},set:function(t){this.scale.y=t,this.dirty=!0}},worldVisible:{get:function(){var t=this;do{if(!t.visible)return!1;t=t.parent}while(t);return!0}},mask:{get:function(){return this._mask},set:function(t){this._mask&&(this._mask.renderable=!0),this._mask=t,this._mask&&(this._mask.renderable=!1)}},filters:{get:function(){return this._filters&&this._filters.slice()},set:function(t){this._filters=t&&t.slice()}}}),i.prototype.updateTransform=function(){var t=this.parent.worldTransform,e=this.worldTransform,r=this.localTransform;this.dirty&&(r.a=this._cr*this.scale.x,r.b=this._sr*this.scale.x,r.c=-this._sr*this.scale.y,r.d=this._cr*this.scale.y,r.tx=this.position.x-(this.pivot.x*r.a+this.pivot.y*r.c),r.ty=this.position.y-(this.pivot.x*r.b+this.pivot.y*r.d)),(this.dirty||this.parent.dirty)&&(e.a=r.a*t.a+r.b*t.c,e.b=r.a*t.b+r.b*t.d,e.c=r.c*t.a+r.d*t.c,e.d=r.c*t.b+r.d*t.d,e.tx=r.tx*t.a+r.ty*t.c+t.tx,e.ty=r.tx*t.b+r.ty*t.d+t.ty,this._currentBounds=null),this.worldAlpha=this.alpha*this.parent.worldAlpha},i.prototype.displayObjectUpdateTransform=i.prototype.updateTransform,i.prototype.getBounds=function(t){return n.Rectangle.EMPTY},i.prototype.getLocalBounds=function(){return this.getBounds(n.Matrix.IDENTITY)},i.prototype.toGlobal=function(t){return this.parent?this.displayObjectUpdateTransform():(this.parent=h,this.displayObjectUpdateTransform(),this.parent=null),this.worldTransform.apply(t)},i.prototype.toLocal=function(t,e,r){return e&&(t=e.toGlobal(t)),this.parent?this.displayObjectUpdateTransform():(this.parent=h,this.displayObjectUpdateTransform(),this.parent=null),this.worldTransform.applyInverse(t,r)},i.prototype.renderWebGL=function(t){},i.prototype.renderCanvas=function(t){},i.prototype.generateTexture=function(t,e,r){var i=this.getLocalBounds(),n=new o(t,0|i.width,0|i.height,e,r);return a.tx=-i.x,a.ty=-i.y,n.render(this,a),n},i.prototype.setParent=function(t){if(!t||!t.addChild)throw new Error("setParent: Argument must be a Container");return t.addChild(this),t},i.prototype.setTransform=function(t,e,r,i,n,o,s,a,h){return this.position.x=t||0,this.position.y=e||0,this.scale.x=r?r:1,this.scale.y=i?i:1,this.rotation=n||0,this.skew.x=o||0,this.skew.y=s||0,this.pivot.x=a||0,this.pivot.y=h||0,this.dirty=!0,this},i.prototype.destroy=function(){this.position=null,this.scale=null,this.pivot=null,this.skew=null,this.parent=null,this._bounds=null,this._currentBounds=null,this._mask=null,this.worldTransform=null,this.filterArea=null}},{"../const":38,"../math":48,"../textures/RenderTexture":91,eventemitter3:25}],41:[function(t,e,r){function i(){n.call(this),this.fillAlpha=1,this.lineWidth=0,this.lineColor=0,this.graphicsData=[],this.tint=16777215,this._prevTint=16777215,this.blendMode=l.BLEND_MODES.NORMAL,this.currentPath=null,this._webGL={},this.isMask=!1,this.boundsPadding=0,this._localBounds=new u.Rectangle(0,0,1,1),this.dirty=!0,this.glDirty=!1,this.boundsDirty=!0,this.cachedSpriteDirty=!1}var n=t("../display/Container"),o=t("../textures/Texture"),s=t("../renderers/canvas/utils/CanvasBuffer"),a=t("../renderers/canvas/utils/CanvasGraphics"),h=t("./GraphicsData"),u=t("../math"),l=t("../const"),c=new u.Point;i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.clone=function(){var t=new i;t.renderable=this.renderable,t.fillAlpha=this.fillAlpha,t.lineWidth=this.lineWidth,t.lineColor=this.lineColor,t.tint=this.tint,t.blendMode=this.blendMode,t.isMask=this.isMask,t.boundsPadding=this.boundsPadding,t.dirty=!0,t.glDirty=!0,t.cachedSpriteDirty=this.cachedSpriteDirty;for(var e=0;e=c;++c)l=c/s,n=h+(t-h)*l,o=u+(e-u)*l,a.push(n+(t+(r-t)*l-n)*l,o+(e+(i-e)*l-o)*l);return this.dirty=this.boundsDirty=!0,this},i.prototype.bezierCurveTo=function(t,e,r,i,n,o){this.currentPath?0===this.currentPath.shape.points.length&&(this.currentPath.shape.points=[0,0]):this.moveTo(0,0);for(var s,a,h,u,l,c=20,p=this.currentPath.shape.points,d=p[p.length-2],f=p[p.length-1],v=0,g=1;c>=g;++g)v=g/c,s=1-v,a=s*s,h=a*s,u=v*v,l=u*v,p.push(h*d+3*a*v*t+3*s*u*r+l*n,h*f+3*a*v*e+3*s*u*i+l*o);return this.dirty=this.boundsDirty=!0,this},i.prototype.arcTo=function(t,e,r,i,n){this.currentPath?0===this.currentPath.shape.points.length&&this.currentPath.shape.points.push(t,e):this.moveTo(t,e);var o=this.currentPath.shape.points,s=o[o.length-2],a=o[o.length-1],h=a-e,u=s-t,l=i-e,c=r-t,p=Math.abs(h*c-u*l);if(1e-8>p||0===n)(o[o.length-2]!==t||o[o.length-1]!==e)&&o.push(t,e);else{var d=h*h+u*u,f=l*l+c*c,v=h*l+u*c,g=n*Math.sqrt(d)/p,m=n*Math.sqrt(f)/p,y=g*v/d,x=m*v/f,b=g*c+m*u,_=g*l+m*h,T=u*(m+y),E=h*(m+y),S=c*(g+x),w=l*(g+x),C=Math.atan2(E-_,T-b),A=Math.atan2(w-_,S-b);this.arc(b+t,_+e,n,C,A,u*l>c*h)}return this.dirty=this.boundsDirty=!0,this},i.prototype.arc=function(t,e,r,i,n,o){if(o=o||!1,i===n)return this;!o&&i>=n?n+=2*Math.PI:o&&n>=i&&(i+=2*Math.PI);var s=o?-1*(i-n):n-i,a=40*Math.ceil(Math.abs(s)/(2*Math.PI));if(0===s)return this;var h=t+Math.cos(i)*r,u=e+Math.sin(i)*r;this.currentPath?this.currentPath.shape.points.push(h,u):this.moveTo(h,u);for(var l=this.currentPath.shape.points,c=s/(2*a),p=2*c,d=Math.cos(c),f=Math.sin(c),v=a-1,g=v%1/v,m=0;v>=m;m++){var y=m+g*m,x=c+i+p*y,b=Math.cos(x),_=-Math.sin(x);l.push((d*b+f*_)*r+t,(d*-_+f*b)*r+e)}return this.dirty=this.boundsDirty=!0,this},i.prototype.beginFill=function(t,e){return this.filling=!0,this.fillColor=t||0,this.fillAlpha=void 0===e?1:e,this.currentPath&&this.currentPath.shape.points.length<=2&&(this.currentPath.fill=this.filling,this.currentPath.fillColor=this.fillColor,this.currentPath.fillAlpha=this.fillAlpha),this},i.prototype.endFill=function(){return this.filling=!1,this.fillColor=null,this.fillAlpha=1,this},i.prototype.drawRect=function(t,e,r,i){return this.drawShape(new u.Rectangle(t,e,r,i)),this},i.prototype.drawRoundedRect=function(t,e,r,i,n){return this.drawShape(new u.RoundedRectangle(t,e,r,i,n)),this},i.prototype.drawCircle=function(t,e,r){return this.drawShape(new u.Circle(t,e,r)),this},i.prototype.drawEllipse=function(t,e,r,i){return this.drawShape(new u.Ellipse(t,e,r,i)),this},i.prototype.drawPolygon=function(t){var e=t,r=!0;if(e instanceof u.Polygon&&(r=e.closed,e=e.points),!Array.isArray(e)){e=new Array(arguments.length);for(var i=0;ig?g:S,S=S>y?y:S,S=S>b?b:S,w=w>m?m:w,w=w>x?x:w,w=w>_?_:w,T=g>T?g:T,T=y>T?y:T,T=b>T?b:T,E=m>E?m:E,E=x>E?x:E,E=_>E?_:E,this._bounds.x=S,this._bounds.width=T-S,this._bounds.y=w,this._bounds.height=E-w,this._currentBounds=this._bounds}return this._currentBounds},i.prototype.containsPoint=function(t){this.worldTransform.applyInverse(t,c);for(var e=this.graphicsData,r=0;rs?s:t,e=s+h>e?s+h:e,r=r>a?a:r,i=a+u>i?a+u:i;else if(d===l.SHAPES.CIRC)s=n.x,a=n.y,h=n.radius+f/2,u=n.radius+f/2,t=t>s-h?s-h:t,e=s+h>e?s+h:e,r=r>a-u?a-u:r,i=a+u>i?a+u:i;else if(d===l.SHAPES.ELIP)s=n.x,a=n.y,h=n.width+f/2,u=n.height+f/2,t=t>s-h?s-h:t,e=s+h>e?s+h:e,r=r>a-u?a-u:r,i=a+u>i?a+u:i;else{o=n.points;for(var v=0;vs-f?s-f:t,e=s+f>e?s+f:e,r=r>a-f?a-f:r,i=a+f>i?a+f:i}}else t=0,e=0,r=0,i=0;var g=this.boundsPadding;this._localBounds.x=t-g,this._localBounds.width=e-t+2*g,this._localBounds.y=r-g,this._localBounds.height=i-r+2*g},i.prototype.drawShape=function(t){this.currentPath&&this.currentPath.shape.points.length<=2&&this.graphicsData.pop(),this.currentPath=null;var e=new h(this.lineWidth,this.lineColor,this.lineAlpha,this.fillColor,this.fillAlpha,this.filling,t);return this.graphicsData.push(e),e.type===l.SHAPES.POLY&&(e.shape.closed=e.shape.closed||this.filling,this.currentPath=e),this.dirty=this.boundsDirty=!0,e},i.prototype.destroy=function(){n.prototype.destroy.apply(this,arguments);for(var t=0;ta;a++)e=s.data[a],1===s.data[a].mode?(r.stencilManager.pushStencil(t,e),i.uniform1f(r.shaderManager.complexPrimitiveShader.uniforms.alpha._location,t.worldAlpha*e.alpha),i.drawElements(i.TRIANGLE_FAN,4,i.UNSIGNED_SHORT,2*(e.indices.length-4)),r.stencilManager.popStencil(t,e)):(o=r.shaderManager.primitiveShader,r.shaderManager.setShader(o),i.uniformMatrix3fv(o.uniforms.translationMatrix._location,!1,t.worldTransform.toArray(!0)),i.uniformMatrix3fv(o.uniforms.projectionMatrix._location,!1,r.currentRenderTarget.projectionMatrix.toArray(!0)),i.uniform3fv(o.uniforms.tint._location,n.hex2rgb(t.tint)),i.uniform1f(o.uniforms.alpha._location,t.worldAlpha),i.bindBuffer(i.ARRAY_BUFFER,e.buffer),i.vertexAttribPointer(o.attributes.aVertexPosition,2,i.FLOAT,!1,24,0),i.vertexAttribPointer(o.attributes.aColor,4,i.FLOAT,!1,24,8),i.bindBuffer(i.ELEMENT_ARRAY_BUFFER,e.indexBuffer),i.drawElements(i.TRIANGLE_STRIP,e.indices.length,i.UNSIGNED_SHORT,0)),r.drawCount++},i.prototype.updateGraphics=function(t){var e=this.renderer.gl,r=t._webGL[e.id];r||(r=t._webGL[e.id]={lastIndex:0,data:[],gl:e}),t.dirty=!1;var i;if(t.clearDirty){for(t.clearDirty=!1,i=0;i=6)if(a.points.length<2*this.maximumSimplePolySize){o=this.switchMode(r,0);var h=this.buildPoly(a,o);h||(o=this.switchMode(r,1),this.buildComplexPoly(a,o))}else o=this.switchMode(r,1),this.buildComplexPoly(a,o);a.lineWidth>0&&(o=this.switchMode(r,0),this.buildLine(a,o))}else o=this.switchMode(r,0),a.type===s.SHAPES.RECT?this.buildRectangle(a,o):a.type===s.SHAPES.CIRC||a.type===s.SHAPES.ELIP?this.buildCircle(a,o):a.type===s.SHAPES.RREC&&this.buildRoundedRectangle(a,o);r.lastIndex++}for(i=0;i32e4||r.mode!==e||1===e)&&(r=this.graphicsDataPool.pop()||new u(t.gl),r.mode=e,t.data.push(r))):(r=this.graphicsDataPool.pop()||new u(t.gl),r.mode=e,t.data.push(r)),r.dirty=!0,r},i.prototype.buildRectangle=function(t,e){var r=t.shape,i=r.x,o=r.y,s=r.width,a=r.height;if(t.fill){var h=n.hex2rgb(t.fillColor),u=t.fillAlpha,l=h[0]*u,c=h[1]*u,p=h[2]*u,d=e.points,f=e.indices,v=d.length/6;d.push(i,o),d.push(l,c,p,u),d.push(i+s,o),d.push(l,c,p,u),d.push(i,o+a),d.push(l,c,p,u),d.push(i+s,o+a),d.push(l,c,p,u),f.push(v,v,v+1,v+2,v+3,v+3)}if(t.lineWidth){var g=t.points;t.points=[i,o,i+s,o,i+s,o+a,i,o+a,i,o],this.buildLine(t,e),t.points=g}},i.prototype.buildRoundedRectangle=function(t,e){var r=t.shape,i=r.x,o=r.y,s=r.width,a=r.height,h=r.radius,u=[];if(u.push(i,o+h),this.quadraticBezierCurve(i,o+a-h,i,o+a,i+h,o+a,u),this.quadraticBezierCurve(i+s-h,o+a,i+s,o+a,i+s,o+a-h,u),this.quadraticBezierCurve(i+s,o+h,i+s,o,i+s-h,o,u),this.quadraticBezierCurve(i+h,o,i,o,i,o+h+1e-10,u),t.fill){var c=n.hex2rgb(t.fillColor),p=t.fillAlpha,d=c[0]*p,f=c[1]*p,v=c[2]*p,g=e.points,m=e.indices,y=g.length/6,x=l(u,null,2),b=0;for(b=0;b=m;m++)g=m/f,h=a(t,r,g),u=a(e,i,g),l=a(r,n,g),c=a(i,o,g),p=a(h,l,g),d=a(u,c,g),v.push(p,d);return v},i.prototype.buildCircle=function(t,e){var r,i,o=t.shape,a=o.x,h=o.y;t.type===s.SHAPES.CIRC?(r=o.radius,i=o.radius):(r=o.width,i=o.height);var u=Math.floor(30*Math.sqrt(o.radius))||Math.floor(15*Math.sqrt(o.width+o.height)),l=2*Math.PI/u,c=0;if(t.fill){var p=n.hex2rgb(t.fillColor),d=t.fillAlpha,f=p[0]*d,v=p[1]*d,g=p[2]*d,m=e.points,y=e.indices,x=m.length/6;for(y.push(x),c=0;u+1>c;c++)m.push(a,h,f,v,g,d),m.push(a+Math.sin(l*c)*r,h+Math.cos(l*c)*i,f,v,g,d),y.push(x++,x++);y.push(x-1)}if(t.lineWidth){var b=t.points;for(t.points=[],c=0;u+1>c;c++)t.points.push(a+Math.sin(l*c)*r,h+Math.cos(l*c)*i);this.buildLine(t,e),t.points=b}},i.prototype.buildLine=function(t,e){var r=0,i=t.points;if(0!==i.length){var s=new o.Point(i[0],i[1]),a=new o.Point(i[i.length-2],i[i.length-1]);if(s.x===a.x&&s.y===a.y){i=i.slice(),i.pop(),i.pop(),a=new o.Point(i[i.length-2],i[i.length-1]);var h=a.x+.5*(s.x-a.x),u=a.y+.5*(s.y-a.y);i.unshift(h,u),i.push(h,u)}var l,c,p,d,f,v,g,m,y,x,b,_,T,E,S,w,C,A,M,R,O,D,P,F=e.points,L=e.indices,B=i.length/2,I=i.length,N=F.length/6,U=t.lineWidth/2,k=n.hex2rgb(t.lineColor),j=t.lineAlpha,G=k[0]*j,Y=k[1]*j,X=k[2]*j;for(p=i[0],d=i[1],f=i[2],v=i[3],y=-(d-v),x=p-f,P=Math.sqrt(y*y+x*x),y/=P,x/=P,y*=U,x*=U,F.push(p-y,d-x,G,Y,X,j),F.push(p+y,d+x,G,Y,X,j),r=1;B-1>r;r++)p=i[2*(r-1)],d=i[2*(r-1)+1],f=i[2*r],v=i[2*r+1],g=i[2*(r+1)],m=i[2*(r+1)+1],y=-(d-v),x=p-f,P=Math.sqrt(y*y+x*x),y/=P,x/=P,y*=U,x*=U,b=-(v-m),_=f-g,P=Math.sqrt(b*b+_*_),b/=P,_/=P,b*=U,_*=U,S=-x+d-(-x+v),w=-y+f-(-y+p),C=(-y+p)*(-x+v)-(-y+f)*(-x+d),A=-_+m-(-_+v),M=-b+f-(-b+g),R=(-b+g)*(-_+v)-(-b+f)*(-_+m),O=S*M-A*w,Math.abs(O)<.1?(O+=10.1,F.push(f-y,v-x,G,Y,X,j),F.push(f+y,v+x,G,Y,X,j)):(l=(w*R-M*C)/O,c=(A*C-S*R)/O,D=(l-f)*(l-f)+(c-v)*(c-v),D>19600?(T=y-b,E=x-_,P=Math.sqrt(T*T+E*E),T/=P,E/=P,T*=U,E*=U,F.push(f-T,v-E),F.push(G,Y,X,j),F.push(f+T,v+E),F.push(G,Y,X,j),F.push(f-T,v-E),F.push(G,Y,X,j),I++):(F.push(l,c),F.push(G,Y,X,j),F.push(f-(l-f),v-(c-v)),F.push(G,Y,X,j)));for(p=i[2*(B-2)],d=i[2*(B-2)+1],f=i[2*(B-1)],v=i[2*(B-1)+1],y=-(d-v),x=p-f,P=Math.sqrt(y*y+x*x),y/=P,x/=P,y*=U,x*=U,F.push(f-y,v-x),F.push(G,Y,X,j),F.push(f+y,v+x),F.push(G,Y,X,j),L.push(N),r=0;I>r;r++)L.push(N++);L.push(N-1)}},i.prototype.buildComplexPoly=function(t,e){var r=t.points.slice();if(!(r.length<6)){var i=e.indices;e.points=r,e.alpha=t.fillAlpha,e.color=n.hex2rgb(t.fillColor);for(var o,s,a=1/0,h=-(1/0),u=1/0,l=-(1/0),c=0;co?o:a,h=o>h?o:h,u=u>s?s:u,l=s>l?s:l;r.push(a,u,h,u,h,l,a,l);var p=r.length/2;for(c=0;p>c;c++)i.push(c)}},i.prototype.buildPoly=function(t,e){var r=t.points;if(!(r.length<6)){var i=e.points,o=e.indices,s=r.length/2,a=n.hex2rgb(t.fillColor),h=t.fillAlpha,u=a[0]*h,c=a[1]*h,p=a[2]*h,d=l(r,null,2);if(!d)return!1;var f=i.length/6,v=0;for(v=0;vv;v++)i.push(r[2*v],r[2*v+1],u,c,p,h);return!0}}},{"../../const":38,"../../math":48,"../../renderers/webgl/WebGLRenderer":65,"../../renderers/webgl/utils/ObjectRenderer":80,"../../utils":98,"./WebGLGraphicsData":44,earcut:24}],44:[function(t,e,r){function i(t){this.gl=t,this.color=[0,0,0],this.points=[],this.indices=[],this.buffer=t.createBuffer(),this.indexBuffer=t.createBuffer(),this.mode=1,this.alpha=1,this.dirty=!0,this.glPoints=null,this.glIndices=null}i.prototype.constructor=i,e.exports=i,i.prototype.reset=function(){this.points.length=0,this.indices.length=0},i.prototype.upload=function(){var t=this.gl;this.glPoints=new Float32Array(this.points),t.bindBuffer(t.ARRAY_BUFFER,this.buffer),t.bufferData(t.ARRAY_BUFFER,this.glPoints,t.STATIC_DRAW),this.glIndices=new Uint16Array(this.indices),t.bindBuffer(t.ELEMENT_ARRAY_BUFFER,this.indexBuffer),t.bufferData(t.ELEMENT_ARRAY_BUFFER,this.glIndices,t.STATIC_DRAW),this.dirty=!1},i.prototype.destroy=function(){this.color=null,this.points=null,this.indices=null,this.gl.deleteBuffer(this.buffer),this.gl.deleteBuffer(this.indexBuffer),this.gl=null,this.buffer=null,this.indexBuffer=null,this.glPoints=null,this.glIndices=null}},{}],45:[function(t,e,r){var i=e.exports=Object.assign(t("./const"),t("./math"),{utils:t("./utils"),ticker:t("./ticker"),DisplayObject:t("./display/DisplayObject"),Container:t("./display/Container"),Sprite:t("./sprites/Sprite"),ParticleContainer:t("./particles/ParticleContainer"),SpriteRenderer:t("./sprites/webgl/SpriteRenderer"),ParticleRenderer:t("./particles/webgl/ParticleRenderer"),Text:t("./text/Text"),Graphics:t("./graphics/Graphics"),GraphicsData:t("./graphics/GraphicsData"),GraphicsRenderer:t("./graphics/webgl/GraphicsRenderer"),Texture:t("./textures/Texture"),BaseTexture:t("./textures/BaseTexture"),RenderTexture:t("./textures/RenderTexture"),VideoBaseTexture:t("./textures/VideoBaseTexture"),TextureUvs:t("./textures/TextureUvs"),CanvasRenderer:t("./renderers/canvas/CanvasRenderer"),CanvasGraphics:t("./renderers/canvas/utils/CanvasGraphics"),CanvasBuffer:t("./renderers/canvas/utils/CanvasBuffer"),WebGLRenderer:t("./renderers/webgl/WebGLRenderer"),WebGLManager:t("./renderers/webgl/managers/WebGLManager"),ShaderManager:t("./renderers/webgl/managers/ShaderManager"),Shader:t("./renderers/webgl/shaders/Shader"),ObjectRenderer:t("./renderers/webgl/utils/ObjectRenderer"),RenderTarget:t("./renderers/webgl/utils/RenderTarget"),AbstractFilter:t("./renderers/webgl/filters/AbstractFilter"),FXAAFilter:t("./renderers/webgl/filters/FXAAFilter"),SpriteMaskFilter:t("./renderers/webgl/filters/SpriteMaskFilter"),glCore:t("pixi-gl-core"),autoDetectRenderer:function(t,e,r,n){return t=t||800,e=e||600,!n&&i.utils.isWebGLSupported()?new i.WebGLRenderer(t,e,r):new i.CanvasRenderer(t,e,r)}})},{"./const":38,"./display/Container":39,"./display/DisplayObject":40,"./graphics/Graphics":41,"./graphics/GraphicsData":42,"./graphics/webgl/GraphicsRenderer":43,"./math":48,"./particles/ParticleContainer":54,"./particles/webgl/ParticleRenderer":56,"./renderers/canvas/CanvasRenderer":59,"./renderers/canvas/utils/CanvasBuffer":60,"./renderers/canvas/utils/CanvasGraphics":61,"./renderers/webgl/WebGLRenderer":65,"./renderers/webgl/filters/AbstractFilter":66,"./renderers/webgl/filters/FXAAFilter":67,"./renderers/webgl/filters/SpriteMaskFilter":68,"./renderers/webgl/managers/ShaderManager":72,"./renderers/webgl/managers/WebGLManager":74,"./renderers/webgl/shaders/Shader":77,"./renderers/webgl/utils/ObjectRenderer":80,"./renderers/webgl/utils/RenderTarget":82,"./sprites/Sprite":86,"./sprites/webgl/SpriteRenderer":87,"./text/Text":89,"./textures/BaseTexture":90,"./textures/RenderTexture":91,"./textures/Texture":92,"./textures/TextureUvs":93,"./textures/VideoBaseTexture":94,"./ticker":96,"./utils":98,"pixi-gl-core":1}],46:[function(t,e,r){function i(){this.a=1,this.b=0,this.c=0,this.d=1,this.tx=0,this.ty=0}var n=t("./Point");i.prototype.constructor=i,e.exports=i,i.prototype.fromArray=function(t){this.a=t[0],this.b=t[1],this.c=t[3],this.d=t[4],this.tx=t[2],this.ty=t[5]},i.prototype.set=function(t,e,r,i,n,o){return this.a=t,this.b=e,this.c=r,this.d=i,this.tx=n,this.ty=o,this},i.prototype.toArray=function(t,e){this.array||(this.array=new Float32Array(9));var r=e||this.array;return t?(r[0]=this.a,r[1]=this.b,r[2]=0,r[3]=this.c,r[4]=this.d,r[5]=0,r[6]=this.tx,r[7]=this.ty,r[8]=1):(r[0]=this.a,r[1]=this.c,r[2]=this.tx,r[3]=this.b,r[4]=this.d,r[5]=this.ty,r[6]=0,r[7]=0,r[8]=1),r},i.prototype.apply=function(t,e){e=e||new n;var r=t.x,i=t.y;return e.x=this.a*r+this.c*i+this.tx,e.y=this.b*r+this.d*i+this.ty,e},i.prototype.applyInverse=function(t,e){e=e||new n;var r=1/(this.a*this.d+this.c*-this.b),i=t.x,o=t.y;return e.x=this.d*r*i+-this.c*r*o+(this.ty*this.c-this.tx*this.d)*r,e.y=this.a*r*o+-this.b*r*i+(-this.ty*this.a+this.tx*this.b)*r,e},i.prototype.translate=function(t,e){return this.tx+=t,this.ty+=e,this},i.prototype.scale=function(t,e){return this.a*=t,this.d*=e,this.c*=t,this.b*=e,this.tx*=t,this.ty*=e,this},i.prototype.rotate=function(t){var e=Math.cos(t),r=Math.sin(t),i=this.a,n=this.c,o=this.tx;return this.a=i*e-this.b*r,this.b=i*r+this.b*e,this.c=n*e-this.d*r,this.d=n*r+this.d*e,this.tx=o*e-this.ty*r,this.ty=o*r+this.ty*e,this},i.prototype.append=function(t){var e=this.a,r=this.b,i=this.c,n=this.d;return this.a=t.a*e+t.b*i,this.b=t.a*r+t.b*n,this.c=t.c*e+t.d*i,this.d=t.c*r+t.d*n,this.tx=t.tx*e+t.ty*i+this.tx,this.ty=t.tx*r+t.ty*n+this.ty,this},i.prototype.setTransform=function(t,e,r,i,n,o,s,a,h){var u,l,c,p,d,f,v,g,m,y;return d=Math.sin(s),f=Math.cos(s),v=Math.cos(h),g=Math.sin(h),m=-Math.sin(a),y=Math.cos(a),u=f*n,l=d*n,c=-d*o,p=f*o,this.a=v*u+g*c,this.b=v*l+g*p,this.c=m*u+y*c,this.d=m*l+y*p,this.tx=t+(r*u+i*c),this.ty=e+(r*l+i*p),this},i.prototype.prepend=function(t){var e=this.tx;if(1!==t.a||0!==t.b||0!==t.c||1!==t.d){var r=this.a,i=this.c;this.a=r*t.a+this.b*t.c,this.b=r*t.b+this.b*t.d,this.c=i*t.a+this.d*t.c,this.d=i*t.b+this.d*t.d}return this.tx=e*t.a+this.ty*t.c+t.tx,this.ty=e*t.b+this.ty*t.d+t.ty,this},i.prototype.invert=function(){var t=this.a,e=this.b,r=this.c,i=this.d,n=this.tx,o=t*i-e*r;return this.a=i/o,this.b=-e/o,this.c=-r/o,this.d=t/o,this.tx=(r*this.ty-i*n)/o,this.ty=-(t*this.ty-e*n)/o,this},i.prototype.identity=function(){return this.a=1,this.b=0,this.c=0,this.d=1,this.tx=0,this.ty=0,this},i.prototype.clone=function(){var t=new i;return t.a=this.a,t.b=this.b,t.c=this.c,t.d=this.d,t.tx=this.tx,t.ty=this.ty,t},i.prototype.copy=function(t){return t.a=this.a,t.b=this.b,t.c=this.c,t.d=this.d,t.tx=this.tx,t.ty=this.ty,t},i.IDENTITY=new i,i.TEMP_MATRIX=new i},{"./Point":47}],47:[function(t,e,r){function i(t,e){this.x=t||0,this.y=e||0}i.prototype.constructor=i,e.exports=i,i.prototype.clone=function(){return new i(this.x,this.y)},i.prototype.copy=function(t){this.set(t.x,t.y)},i.prototype.equals=function(t){return t.x===this.x&&t.y===this.y},i.prototype.set=function(t,e){this.x=t||0,this.y=e||(0!==e?this.x:0)}},{}],48:[function(t,e,r){e.exports={Point:t("./Point"),Matrix:t("./Matrix"),Circle:t("./shapes/Circle"),Ellipse:t("./shapes/Ellipse"),Polygon:t("./shapes/Polygon"),Rectangle:t("./shapes/Rectangle"),RoundedRectangle:t("./shapes/RoundedRectangle")}},{"./Matrix":46,"./Point":47,"./shapes/Circle":49,"./shapes/Ellipse":50,"./shapes/Polygon":51,"./shapes/Rectangle":52,"./shapes/RoundedRectangle":53}],49:[function(t,e,r){function i(t,e,r){this.x=t||0,this.y=e||0,this.radius=r||0,this.type=o.SHAPES.CIRC}var n=t("./Rectangle"),o=t("../../const");i.prototype.constructor=i,e.exports=i,i.prototype.clone=function(){return new i(this.x,this.y,this.radius)},i.prototype.contains=function(t,e){if(this.radius<=0)return!1;var r=this.x-t,i=this.y-e,n=this.radius*this.radius;return r*=r,i*=i,n>=r+i},i.prototype.getBounds=function(){return new n(this.x-this.radius,this.y-this.radius,2*this.radius,2*this.radius)}},{"../../const":38,"./Rectangle":52}],50:[function(t,e,r){function i(t,e,r,i){this.x=t||0,this.y=e||0,this.width=r||0,this.height=i||0,this.type=o.SHAPES.ELIP}var n=t("./Rectangle"),o=t("../../const");i.prototype.constructor=i,e.exports=i,i.prototype.clone=function(){return new i(this.x,this.y,this.width,this.height)},i.prototype.contains=function(t,e){if(this.width<=0||this.height<=0)return!1;var r=(t-this.x)/this.width,i=(e-this.y)/this.height;return r*=r,i*=i,1>=r+i},i.prototype.getBounds=function(){return new n(this.x-this.width,this.y-this.height,this.width,this.height)}},{"../../const":38,"./Rectangle":52}],51:[function(t,e,r){function i(t){var e=t;if(!Array.isArray(e)){e=new Array(arguments.length);for(var r=0;rs;s++)i.push(e[s].x,e[s].y);e=i}this.closed=!0,this.points=e,this.type=o.SHAPES.POLY}var n=t("../Point"),o=t("../../const");i.prototype.constructor=i,e.exports=i,i.prototype.clone=function(){return new i(this.points.slice())},i.prototype.contains=function(t,e){for(var r=!1,i=this.points.length/2,n=0,o=i-1;i>n;o=n++){var s=this.points[2*n],a=this.points[2*n+1],h=this.points[2*o],u=this.points[2*o+1],l=a>e!=u>e&&(h-s)*(e-a)/(u-a)+s>t;l&&(r=!r)}return r}},{"../../const":38,"../Point":47}],52:[function(t,e,r){function i(t,e,r,i){this.x=t||0,this.y=e||0,this.width=r||0,this.height=i||0,this.type=n.SHAPES.RECT}var n=t("../../const");i.prototype.constructor=i,e.exports=i,i.EMPTY=new i(0,0,0,0),i.prototype.clone=function(){return new i(this.x,this.y,this.width,this.height)},i.prototype.contains=function(t,e){return this.width<=0||this.height<=0?!1:t>=this.x&&t=this.y&&e=this.x&&t<=this.x+this.width&&e>=this.y&&e<=this.y+this.height?!0:!1}},{"../../const":38}],54:[function(t,e,r){function i(t,e,r){n.call(this),r=r||15e3,t=t||15e3;var i=16384;r>i&&(r=i),r>t&&(r=t),this._properties=[!1,!0,!1,!1,!1],this._maxSize=t,this._batchSize=r,this._buffers=null,this._bufferToUpdate=0,this.interactiveChildren=!1,this.blendMode=o.BLEND_MODES.NORMAL,this.roundPixels=!0,this.setProperties(e)}var n=t("../display/Container"),o=t("../const");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.setProperties=function(t){t&&(this._properties[0]="scale"in t?!!t.scale:this._properties[0],this._properties[1]="position"in t?!!t.position:this._properties[1],this._properties[2]="rotation"in t?!!t.rotation:this._properties[2],this._properties[3]="uvs"in t?!!t.uvs:this._properties[3],this._properties[4]="alpha"in t?!!t.alpha:this._properties[4])},i.prototype.updateTransform=function(){this.displayObjectUpdateTransform()},i.prototype.renderWebGL=function(t){this.visible&&!(this.worldAlpha<=0)&&this.children.length&&this.renderable&&(t.setObjectRenderer(t.plugins.particle),t.plugins.particle.render(this))},i.prototype.onChildrenChange=function(t){var e=Math.floor(t/this._batchSize);er;r+=6,i+=4)this.indices[r+0]=i+0,this.indices[r+1]=i+1,this.indices[r+2]=i+2,this.indices[r+3]=i+0,this.indices[r+4]=i+2,this.indices[r+5]=i+3;this.shader=null,this.indexBuffer=null,this.properties=null,this.tempMatrix=new h.Matrix}var n=t("../../renderers/webgl/utils/ObjectRenderer"),o=t("../../renderers/webgl/WebGLRenderer"),s=t("./ParticleShader"),a=t("./ParticleBuffer"),h=t("../../math");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,o.registerPlugin("particle",i),i.prototype.onContextChange=function(){var t=this.renderer.gl;this.shader=new s(this.renderer.shaderManager),this.indexBuffer=t.createBuffer(),t.bindBuffer(t.ELEMENT_ARRAY_BUFFER,this.indexBuffer),t.bufferData(t.ELEMENT_ARRAY_BUFFER,this.indices,t.STATIC_DRAW),this.properties=[{attribute:this.shader.attributes.aVertexPosition,size:2,uploadFunction:this.uploadVertices,offset:0},{attribute:this.shader.attributes.aPositionCoord,size:2,uploadFunction:this.uploadPosition,offset:0},{attribute:this.shader.attributes.aRotation,size:1,uploadFunction:this.uploadRotation,offset:0},{attribute:this.shader.attributes.aTextureCoord,size:2,uploadFunction:this.uploadUvs,offset:0},{attribute:this.shader.attributes.aColor,size:1,uploadFunction:this.uploadAlpha,offset:0}]},i.prototype.start=function(){var t=this.renderer.gl;t.activeTexture(t.TEXTURE0),t.bindBuffer(t.ELEMENT_ARRAY_BUFFER,this.indexBuffer);var e=this.shader;this.renderer.shaderManager.setShader(e)},i.prototype.render=function(t){var e=t.children,r=e.length,i=t._maxSize,n=t._batchSize;if(0!==r){r>i&&(r=i),t._buffers||(t._buffers=this.generateBuffers(t)),this.renderer.blendModeManager.setBlendMode(t.blendMode);var o=this.renderer.gl,s=t.worldTransform.copy(this.tempMatrix);s.prepend(this.renderer.currentRenderTarget.projectionMatrix),o.uniformMatrix3fv(this.shader.uniforms.projectionMatrix._location,!1,s.toArray(!0)),o.uniform1f(this.shader.uniforms.uAlpha._location,t.worldAlpha);var a=e[0]._texture.baseTexture;if(a._glTextures[o.id])o.bindTexture(o.TEXTURE_2D,a._glTextures[o.id]);else{if(!this.renderer.updateTexture(a))return;t._properties[0]&&t._properties[3]||(t._bufferToUpdate=0)}for(var h=0,u=0;r>h;h+=n,u+=1){var l=r-h;l>n&&(l=n);var c=t._buffers[u];c.uploadDynamic(e,h,l),t._bufferToUpdate===u&&(c.uploadStatic(e,h,l),t._bufferToUpdate=u+1),c.bind(this.shader),o.drawElements(o.TRIANGLES,6*l,o.UNSIGNED_SHORT,0),this.renderer.drawCount++}}},i.prototype.generateBuffers=function(t){var e,r=this.renderer.gl,i=[],n=t._maxSize,o=t._batchSize,s=t._properties;for(e=0;n>e;e+=o)i.push(new a(r,this.properties,s,o));return i},i.prototype.uploadVertices=function(t,e,r,i,n,o){for(var s,a,h,u,l,c,p,d,f,v=0;r>v;v++)s=t[e+v],a=s._texture,u=s.scale.x,l=s.scale.y,a.trim?(h=a.trim,p=h.x-s.anchor.x*h.width,c=p+a.crop.width,f=h.y-s.anchor.y*h.height,d=f+a.crop.height):(c=a._frame.width*(1-s.anchor.x),p=a._frame.width*-s.anchor.x,d=a._frame.height*(1-s.anchor.y),f=a._frame.height*-s.anchor.y),i[o]=p*u,i[o+1]=f*l,i[o+n]=c*u,i[o+n+1]=f*l,i[o+2*n]=c*u,i[o+2*n+1]=d*l,i[o+3*n]=p*u,i[o+3*n+1]=d*l,o+=4*n},i.prototype.uploadPosition=function(t,e,r,i,n,o){for(var s=0;r>s;s++){var a=t[e+s].position;i[o]=a.x,i[o+1]=a.y,i[o+n]=a.x,i[o+n+1]=a.y,i[o+2*n]=a.x,i[o+2*n+1]=a.y,i[o+3*n]=a.x,i[o+3*n+1]=a.y,o+=4*n}},i.prototype.uploadRotation=function(t,e,r,i,n,o){for(var s=0;r>s;s++){var a=t[e+s].rotation;i[o]=a,i[o+n]=a,i[o+2*n]=a,i[o+3*n]=a,o+=4*n}},i.prototype.uploadUvs=function(t,e,r,i,n,o){for(var s=0;r>s;s++){var a=t[e+s]._texture._uvs;a?(i[o]=a.x0,i[o+1]=a.y0,i[o+n]=a.x1,i[o+n+1]=a.y1,i[o+2*n]=a.x2,i[o+2*n+1]=a.y2,i[o+3*n]=a.x3,i[o+3*n+1]=a.y3,o+=4*n):(i[o]=0,i[o+1]=0,i[o+n]=0,i[o+n+1]=0,i[o+2*n]=0,i[o+2*n+1]=0,i[o+3*n]=0,i[o+3*n+1]=0,o+=4*n)}},i.prototype.uploadAlpha=function(t,e,r,i,n,o){for(var s=0;r>s;s++){var a=t[e+s].alpha;i[o]=a,i[o+n]=a,i[o+2*n]=a,i[o+3*n]=a,o+=4*n}},i.prototype.destroy=function(){this.renderer.gl&&this.renderer.gl.deleteBuffer(this.indexBuffer),n.prototype.destroy.apply(this,arguments),this.shader.destroy(),this.indices=null,this.tempMatrix=null}},{"../../math":48,"../../renderers/webgl/WebGLRenderer":65,"../../renderers/webgl/utils/ObjectRenderer":80,"./ParticleBuffer":55,"./ParticleShader":57}],57:[function(t,e,r){function i(t){n.call(this,t,["attribute vec2 aVertexPosition;","attribute vec2 aTextureCoord;","attribute float aColor;","attribute vec2 aPositionCoord;","attribute vec2 aScale;","attribute float aRotation;","uniform mat3 projectionMatrix;","varying vec2 vTextureCoord;","varying float vColor;","void main(void){"," vec2 v = aVertexPosition;"," v.x = (aVertexPosition.x) * cos(aRotation) - (aVertexPosition.y) * sin(aRotation);"," v.y = (aVertexPosition.x) * sin(aRotation) + (aVertexPosition.y) * cos(aRotation);"," v = v + aPositionCoord;"," gl_Position = vec4((projectionMatrix * vec3(v, 1.0)).xy, 0.0, 1.0);"," vTextureCoord = aTextureCoord;"," vColor = aColor;","}"].join("\n"),["precision lowp float;","varying vec2 vTextureCoord;","varying float vColor;","uniform sampler2D uSampler;","uniform float uAlpha;","void main(void){"," vec4 color = texture2D(uSampler, vTextureCoord) * vColor * uAlpha;"," if (color.a == 0.0) discard;"," gl_FragColor = color;","}"].join("\n"),{uAlpha:{type:"1f",value:1}},{aPositionCoord:0,aRotation:0})}var n=t("../../renderers/webgl/shaders/TextureShader");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i},{"../../renderers/webgl/shaders/TextureShader":78}],58:[function(t,e,r){function i(t,e,r,i){if(a.call(this),n.sayHello(t),i)for(var h in s.DEFAULT_RENDER_OPTIONS)"undefined"==typeof i[h]&&(i[h]=s.DEFAULT_RENDER_OPTIONS[h]);else i=s.DEFAULT_RENDER_OPTIONS;this.type=s.RENDERER_TYPE.UNKNOWN,this.width=e||800,this.height=r||600,this.view=i.view||document.createElement("canvas"),this.resolution=i.resolution,this.transparent=i.transparent,this.autoResize=i.autoResize||!1,this.blendModes=null,this.preserveDrawingBuffer=i.preserveDrawingBuffer,this.clearBeforeRender=i.clearBeforeRender,this.roundPixels=i.roundPixels,this._backgroundColor=0,this._backgroundColorRgba=[0,0,0,0],this._backgroundColorString="#000000",this.backgroundColor=i.backgroundColor||this._backgroundColor,this._tempDisplayObjectParent={worldTransform:new o.Matrix,worldAlpha:1,children:[]},this._lastObjectRendered=this._tempDisplayObjectParent}var n=t("../utils"),o=t("../math"),s=t("../const"),a=t("eventemitter3");i.prototype=Object.create(a.prototype),i.prototype.constructor=i,e.exports=i,Object.defineProperties(i.prototype,{backgroundColor:{get:function(){return this._backgroundColor},set:function(t){this._backgroundColor=t,this._backgroundColorString=n.hex2string(t),n.hex2rgb(t,this._backgroundColorRgba)}}}),i.prototype.resize=function(t,e){this.width=t*this.resolution,this.height=e*this.resolution,this.view.width=this.width,this.view.height=this.height,this.autoResize&&(this.view.style.width=this.width/this.resolution+"px",this.view.style.height=this.height/this.resolution+"px")},i.prototype.destroy=function(t){t&&this.view.parentNode&&this.view.parentNode.removeChild(this.view),this.type=s.RENDERER_TYPE.UNKNOWN,this.width=0,this.height=0,this.view=null,this.resolution=0,this.transparent=!1,this.autoResize=!1,this.blendModes=null,this.preserveDrawingBuffer=!1,this.clearBeforeRender=!1,this.roundPixels=!1,this._backgroundColor=0, -this._backgroundColorRgba=null,this._backgroundColorString=null}},{"../const":38,"../math":48,"../utils":98,eventemitter3:25}],59:[function(t,e,r){function i(t,e,r){r=r||{},n.call(this,"Canvas",t,e,r),this.type=h.RENDERER_TYPE.CANVAS,this.context=this.view.getContext("2d",{alpha:this.transparent}),this.refresh=!0,this.maskManager=new o,this.smoothProperty="imageSmoothingEnabled",this.context.imageSmoothingEnabled||(this.context.webkitImageSmoothingEnabled?this.smoothProperty="webkitImageSmoothingEnabled":this.context.mozImageSmoothingEnabled?this.smoothProperty="mozImageSmoothingEnabled":this.context.oImageSmoothingEnabled?this.smoothProperty="oImageSmoothingEnabled":this.context.msImageSmoothingEnabled&&(this.smoothProperty="msImageSmoothingEnabled")),this.initPlugins(),this._mapBlendModes(),this._tempDisplayObjectParent={worldTransform:new a.Matrix,worldAlpha:1},this.resize(t,e)}var n=t("../SystemRenderer"),o=t("./utils/CanvasMaskManager"),s=t("../../utils"),a=t("../../math"),h=t("../../const");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,s.pluginTarget.mixin(i),i.prototype.render=function(t){this.emit("prerender");var e=t.parent;this._lastObjectRendered=t,t.parent=this._tempDisplayObjectParent,t.updateTransform(),t.parent=e,this.context.setTransform(1,0,0,1,0,0),this.context.globalAlpha=1,this.context.globalCompositeOperation=this.blendModes[h.BLEND_MODES.NORMAL],navigator.isCocoonJS&&this.view.screencanvas&&(this.context.fillStyle="black",this.context.clear()),this.clearBeforeRender&&(this.transparent?this.context.clearRect(0,0,this.width,this.height):(this.context.fillStyle=this._backgroundColorString,this.context.fillRect(0,0,this.width,this.height))),this.renderDisplayObject(t,this.context),this.emit("postrender")},i.prototype.destroy=function(t){this.destroyPlugins(),n.prototype.destroy.call(this,t),this.context=null,this.refresh=!0,this.maskManager.destroy(),this.maskManager=null,this.smoothProperty=null},i.prototype.renderDisplayObject=function(t,e){var r=this.context;this.context=e,t.renderCanvas(this),this.context=r},i.prototype.resize=function(t,e){n.prototype.resize.call(this,t,e),this.smoothProperty&&(this.context[this.smoothProperty]=h.SCALE_MODES.DEFAULT===h.SCALE_MODES.LINEAR)},i.prototype._mapBlendModes=function(){this.blendModes||(this.blendModes={},s.canUseNewCanvasBlendModes()?(this.blendModes[h.BLEND_MODES.NORMAL]="source-over",this.blendModes[h.BLEND_MODES.ADD]="lighter",this.blendModes[h.BLEND_MODES.MULTIPLY]="multiply",this.blendModes[h.BLEND_MODES.SCREEN]="screen",this.blendModes[h.BLEND_MODES.OVERLAY]="overlay",this.blendModes[h.BLEND_MODES.DARKEN]="darken",this.blendModes[h.BLEND_MODES.LIGHTEN]="lighten",this.blendModes[h.BLEND_MODES.COLOR_DODGE]="color-dodge",this.blendModes[h.BLEND_MODES.COLOR_BURN]="color-burn",this.blendModes[h.BLEND_MODES.HARD_LIGHT]="hard-light",this.blendModes[h.BLEND_MODES.SOFT_LIGHT]="soft-light",this.blendModes[h.BLEND_MODES.DIFFERENCE]="difference",this.blendModes[h.BLEND_MODES.EXCLUSION]="exclusion",this.blendModes[h.BLEND_MODES.HUE]="hue",this.blendModes[h.BLEND_MODES.SATURATION]="saturate",this.blendModes[h.BLEND_MODES.COLOR]="color",this.blendModes[h.BLEND_MODES.LUMINOSITY]="luminosity"):(this.blendModes[h.BLEND_MODES.NORMAL]="source-over",this.blendModes[h.BLEND_MODES.ADD]="lighter",this.blendModes[h.BLEND_MODES.MULTIPLY]="source-over",this.blendModes[h.BLEND_MODES.SCREEN]="source-over",this.blendModes[h.BLEND_MODES.OVERLAY]="source-over",this.blendModes[h.BLEND_MODES.DARKEN]="source-over",this.blendModes[h.BLEND_MODES.LIGHTEN]="source-over",this.blendModes[h.BLEND_MODES.COLOR_DODGE]="source-over",this.blendModes[h.BLEND_MODES.COLOR_BURN]="source-over",this.blendModes[h.BLEND_MODES.HARD_LIGHT]="source-over",this.blendModes[h.BLEND_MODES.SOFT_LIGHT]="source-over",this.blendModes[h.BLEND_MODES.DIFFERENCE]="source-over",this.blendModes[h.BLEND_MODES.EXCLUSION]="source-over",this.blendModes[h.BLEND_MODES.HUE]="source-over",this.blendModes[h.BLEND_MODES.SATURATION]="source-over",this.blendModes[h.BLEND_MODES.COLOR]="source-over",this.blendModes[h.BLEND_MODES.LUMINOSITY]="source-over"))}},{"../../const":38,"../../math":48,"../../utils":98,"../SystemRenderer":58,"./utils/CanvasMaskManager":62}],60:[function(t,e,r){function i(t,e){this.canvas=document.createElement("canvas"),this.context=this.canvas.getContext("2d"),this.canvas.width=t,this.canvas.height=e}i.prototype.constructor=i,e.exports=i,Object.defineProperties(i.prototype,{width:{get:function(){return this.canvas.width},set:function(t){this.canvas.width=t}},height:{get:function(){return this.canvas.height},set:function(t){this.canvas.height=t}}}),i.prototype.clear=function(){this.context.setTransform(1,0,0,1,0,0),this.context.clearRect(0,0,this.canvas.width,this.canvas.height)},i.prototype.resize=function(t,e){this.canvas.width=t,this.canvas.height=e},i.prototype.destroy=function(){this.context=null,this.canvas=null}},{}],61:[function(t,e,r){var i=t("../../../const"),n={};e.exports=n,n.renderGraphics=function(t,e){var r=t.worldAlpha;t.dirty&&(this.updateGraphicsTint(t),t.dirty=!1);for(var n=0;nA?A:C,e.beginPath(),e.moveTo(T,E+C),e.lineTo(T,E+w-C),e.quadraticCurveTo(T,E+w,T+C,E+w),e.lineTo(T+S-C,E+w),e.quadraticCurveTo(T+S,E+w,T+S,E+w-C),e.lineTo(T+S,E+C),e.quadraticCurveTo(T+S,E,T+S-C,E),e.lineTo(T+C,E),e.quadraticCurveTo(T,E,T,E+C),e.closePath(),(o.fillColor||0===o.fillColor)&&(e.globalAlpha=o.fillAlpha*r,e.fillStyle="#"+("00000"+(0|a).toString(16)).substr(-6),e.fill()),o.lineWidth&&(e.globalAlpha=o.lineAlpha*r,e.strokeStyle="#"+("00000"+(0|h).toString(16)).substr(-6),e.stroke())}}},n.renderGraphicsMask=function(t,e){var r=t.graphicsData.length;if(0!==r){e.beginPath();for(var n=0;r>n;n++){var o=t.graphicsData[n],s=o.shape;if(o.type===i.SHAPES.POLY){var a=s.points;e.moveTo(a[0],a[1]);for(var h=1;hw?w:S,e.moveTo(b,_+S),e.lineTo(b,_+E-S),e.quadraticCurveTo(b,_+E,b+S,_+E),e.lineTo(b+T-S,_+E),e.quadraticCurveTo(b+T,_+E,b+T,_+E-S),e.lineTo(b+T,_+S),e.quadraticCurveTo(b+T,_,b+T-S,_),e.lineTo(b+S,_),e.quadraticCurveTo(b,_,b,_+S),e.closePath()}}}},n.updateGraphicsTint=function(t){if(16777215!==t.tint||t._prevTint!==t.tint){t._prevTint=t.tint;for(var e=(t.tint>>16&255)/255,r=(t.tint>>8&255)/255,i=(255&t.tint)/255,n=0;n>16&255)/255*e*255<<16)+((s>>8&255)/255*r*255<<8)+(255&s)/255*i*255,o._lineTint=((a>>16&255)/255*e*255<<16)+((a>>8&255)/255*r*255<<8)+(255&a)/255*i*255}}}},{"../../../const":38}],62:[function(t,e,r){function i(){}var n=t("./CanvasGraphics");i.prototype.constructor=i,e.exports=i,i.prototype.pushMask=function(t,e){e.context.save();var r=t.alpha,i=t.worldTransform,o=e.resolution;e.context.setTransform(i.a*o,i.b*o,i.c*o,i.d*o,i.tx*o,i.ty*o),t.texture||(n.renderGraphicsMask(t,e.context),e.context.clip()),t.worldAlpha=r},i.prototype.popMask=function(t){t.context.restore()},i.prototype.destroy=function(){}},{"./CanvasGraphics":61}],63:[function(t,e,r){var i=t("../../../utils"),n={};e.exports=n,n.getTintedTexture=function(t,e){var r=t.texture;e=n.roundColor(e);var i="#"+("00000"+(0|e).toString(16)).substr(-6);if(r.tintCache=r.tintCache||{},r.tintCache[i])return r.tintCache[i];var o=n.canvas||document.createElement("canvas");if(n.tintMethod(r,e,o),n.convertTintToImage){var s=new Image;s.src=o.toDataURL(),r.tintCache[i]=s}else r.tintCache[i]=o,n.canvas=null;return o},n.tintWithMultiply=function(t,e,r){var i=r.getContext("2d"),n=t.baseTexture.resolution,o=t.crop.clone();o.x*=n,o.y*=n,o.width*=n,o.height*=n,r.width=o.width,r.height=o.height,i.fillStyle="#"+("00000"+(0|e).toString(16)).substr(-6),i.fillRect(0,0,o.width,o.height),i.globalCompositeOperation="multiply",i.drawImage(t.baseTexture.source,o.x,o.y,o.width,o.height,0,0,o.width,o.height),i.globalCompositeOperation="destination-atop",i.drawImage(t.baseTexture.source,o.x,o.y,o.width,o.height,0,0,o.width,o.height)},n.tintWithOverlay=function(t,e,r){var i=r.getContext("2d"),n=t.baseTexture.resolution,o=t.crop.clone();o.x*=n,o.y*=n,o.width*=n,o.height*=n,r.width=o.width,r.height=o.height,i.globalCompositeOperation="copy",i.fillStyle="#"+("00000"+(0|e).toString(16)).substr(-6),i.fillRect(0,0,o.width,o.height),i.globalCompositeOperation="destination-atop",i.drawImage(t.baseTexture.source,o.x,o.y,o.width,o.height,0,0,o.width,o.height)},n.tintWithPerPixel=function(t,e,r){var n=r.getContext("2d"),o=t.baseTexture.resolution,s=t.crop.clone();s.x*=o,s.y*=o,s.width*=o,s.height*=o,r.width=s.width,r.height=s.height,n.globalCompositeOperation="copy",n.drawImage(t.baseTexture.source,s.x,s.y,s.width,s.height,0,0,s.width,s.height);for(var a=i.hex2rgb(e),h=a[0],u=a[1],l=a[2],c=n.getImageData(0,0,s.width,s.height),p=c.data,d=0;de;++e)this.shaders[e].syncUniform(t)}},{"../shaders/TextureShader":78}],67:[function(t,e,r){function i(){n.call(this,"\nprecision mediump float;\n\nattribute vec2 aVertexPosition;\nattribute vec2 aTextureCoord;\nattribute vec4 aColor;\n\nuniform mat3 projectionMatrix;\nuniform vec2 resolution;\n\nvarying vec2 vTextureCoord;\nvarying vec4 vColor;\n\nvarying vec2 vResolution;\n\n//texcoords computed in vertex step\n//to avoid dependent texture reads\nvarying vec2 v_rgbNW;\nvarying vec2 v_rgbNE;\nvarying vec2 v_rgbSW;\nvarying vec2 v_rgbSE;\nvarying vec2 v_rgbM;\n\n\nvoid texcoords(vec2 fragCoord, vec2 resolution,\n out vec2 v_rgbNW, out vec2 v_rgbNE,\n out vec2 v_rgbSW, out vec2 v_rgbSE,\n out vec2 v_rgbM) {\n vec2 inverseVP = 1.0 / resolution.xy;\n v_rgbNW = (fragCoord + vec2(-1.0, -1.0)) * inverseVP;\n v_rgbNE = (fragCoord + vec2(1.0, -1.0)) * inverseVP;\n v_rgbSW = (fragCoord + vec2(-1.0, 1.0)) * inverseVP;\n v_rgbSE = (fragCoord + vec2(1.0, 1.0)) * inverseVP;\n v_rgbM = vec2(fragCoord * inverseVP);\n}\n\nvoid main(void){\n gl_Position = vec4((projectionMatrix * vec3(aVertexPosition, 1.0)).xy, 0.0, 1.0);\n vTextureCoord = aTextureCoord;\n vColor = vec4(aColor.rgb * aColor.a, aColor.a);\n vResolution = resolution;\n\n //compute the texture coords and send them to varyings\n texcoords(aTextureCoord * resolution, resolution, v_rgbNW, v_rgbNE, v_rgbSW, v_rgbSE, v_rgbM);\n}\n",'precision lowp float;\n\n\n/**\nBasic FXAA implementation based on the code on geeks3d.com with the\nmodification that the texture2DLod stuff was removed since it\'s\nunsupported by WebGL.\n\n--\n\nFrom:\nhttps://github.com/mitsuhiko/webgl-meincraft\n\nCopyright (c) 2011 by Armin Ronacher.\n\nSome rights reserved.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are\nmet:\n\n * Redistributions of source code must retain the above copyright\n notice, this list of conditions and the following disclaimer.\n\n * Redistributions in binary form must reproduce the above\n copyright notice, this list of conditions and the following\n disclaimer in the documentation and/or other materials provided\n with the distribution.\n\n * The names of the contributors may not be used to endorse or\n promote products derived from this software without specific\n prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\nLIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\nA PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\nOWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\nSPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\nLIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\nDATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\nTHEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\nOF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n*/\n\n#ifndef FXAA_REDUCE_MIN\n #define FXAA_REDUCE_MIN (1.0/ 128.0)\n#endif\n#ifndef FXAA_REDUCE_MUL\n #define FXAA_REDUCE_MUL (1.0 / 8.0)\n#endif\n#ifndef FXAA_SPAN_MAX\n #define FXAA_SPAN_MAX 8.0\n#endif\n\n//optimized version for mobile, where dependent\n//texture reads can be a bottleneck\nvec4 fxaa(sampler2D tex, vec2 fragCoord, vec2 resolution,\n vec2 v_rgbNW, vec2 v_rgbNE,\n vec2 v_rgbSW, vec2 v_rgbSE,\n vec2 v_rgbM) {\n vec4 color;\n mediump vec2 inverseVP = vec2(1.0 / resolution.x, 1.0 / resolution.y);\n vec3 rgbNW = texture2D(tex, v_rgbNW).xyz;\n vec3 rgbNE = texture2D(tex, v_rgbNE).xyz;\n vec3 rgbSW = texture2D(tex, v_rgbSW).xyz;\n vec3 rgbSE = texture2D(tex, v_rgbSE).xyz;\n vec4 texColor = texture2D(tex, v_rgbM);\n vec3 rgbM = texColor.xyz;\n vec3 luma = vec3(0.299, 0.587, 0.114);\n float lumaNW = dot(rgbNW, luma);\n float lumaNE = dot(rgbNE, luma);\n float lumaSW = dot(rgbSW, luma);\n float lumaSE = dot(rgbSE, luma);\n float lumaM = dot(rgbM, luma);\n float lumaMin = min(lumaM, min(min(lumaNW, lumaNE), min(lumaSW, lumaSE)));\n float lumaMax = max(lumaM, max(max(lumaNW, lumaNE), max(lumaSW, lumaSE)));\n\n mediump vec2 dir;\n dir.x = -((lumaNW + lumaNE) - (lumaSW + lumaSE));\n dir.y = ((lumaNW + lumaSW) - (lumaNE + lumaSE));\n\n float dirReduce = max((lumaNW + lumaNE + lumaSW + lumaSE) *\n (0.25 * FXAA_REDUCE_MUL), FXAA_REDUCE_MIN);\n\n float rcpDirMin = 1.0 / (min(abs(dir.x), abs(dir.y)) + dirReduce);\n dir = min(vec2(FXAA_SPAN_MAX, FXAA_SPAN_MAX),\n max(vec2(-FXAA_SPAN_MAX, -FXAA_SPAN_MAX),\n dir * rcpDirMin)) * inverseVP;\n\n vec3 rgbA = 0.5 * (\n texture2D(tex, fragCoord * inverseVP + dir * (1.0 / 3.0 - 0.5)).xyz +\n texture2D(tex, fragCoord * inverseVP + dir * (2.0 / 3.0 - 0.5)).xyz);\n vec3 rgbB = rgbA * 0.5 + 0.25 * (\n texture2D(tex, fragCoord * inverseVP + dir * -0.5).xyz +\n texture2D(tex, fragCoord * inverseVP + dir * 0.5).xyz);\n\n float lumaB = dot(rgbB, luma);\n if ((lumaB < lumaMin) || (lumaB > lumaMax))\n color = vec4(rgbA, texColor.a);\n else\n color = vec4(rgbB, texColor.a);\n return color;\n}\n\n\nvarying vec2 vTextureCoord;\nvarying vec4 vColor;\nvarying vec2 vResolution;\n\n//texcoords computed in vertex step\n//to avoid dependent texture reads\nvarying vec2 v_rgbNW;\nvarying vec2 v_rgbNE;\nvarying vec2 v_rgbSW;\nvarying vec2 v_rgbSE;\nvarying vec2 v_rgbM;\n\nuniform sampler2D uSampler;\n\n\nvoid main(void){\n\n gl_FragColor = fxaa(uSampler, vTextureCoord * vResolution, vResolution, v_rgbNW, v_rgbNE, v_rgbSW, v_rgbSE, v_rgbM);\n\n}\n',{resolution:{type:"v2",value:{x:1,y:1}}})}var n=t("./AbstractFilter");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.applyFilter=function(t,e,r){var i=t.filterManager,n=this.getShader(t);i.applyFilter(n,e,r)}},{"./AbstractFilter":66}],68:[function(t,e,r){function i(t){var e=new o.Matrix;n.call(this,"attribute vec2 aVertexPosition;\nattribute vec2 aTextureCoord;\nattribute vec4 aColor;\n\nuniform mat3 projectionMatrix;\nuniform mat3 otherMatrix;\n\nvarying vec2 vMaskCoord;\nvarying vec2 vTextureCoord;\nvarying vec4 vColor;\n\nvoid main(void)\n{\n gl_Position = vec4((projectionMatrix * vec3(aVertexPosition, 1.0)).xy, 0.0, 1.0);\n vTextureCoord = aTextureCoord;\n vMaskCoord = ( otherMatrix * vec3( aTextureCoord, 1.0) ).xy;\n vColor = vec4(aColor.rgb * aColor.a, aColor.a);\n}\n","precision lowp float;\n\nvarying vec2 vMaskCoord;\nvarying vec2 vTextureCoord;\nvarying vec4 vColor;\n\nuniform sampler2D uSampler;\nuniform float alpha;\nuniform sampler2D mask;\n\nvoid main(void)\n{\n // check clip! this will stop the mask bleeding out from the edges\n vec2 text = abs( vMaskCoord - 0.5 );\n text = step(0.5, text);\n float clip = 1.0 - max(text.y, text.x);\n vec4 original = texture2D(uSampler, vTextureCoord);\n vec4 masky = texture2D(mask, vMaskCoord);\n original *= (masky.r * masky.a * alpha * clip);\n gl_FragColor = original;\n}\n",{mask:{type:"sampler2D",value:t._texture},alpha:{type:"f",value:1},otherMatrix:{type:"mat3",value:e.toArray(!0)}}),this.maskSprite=t,this.maskMatrix=e}var n=t("./AbstractFilter"),o=t("../../../math");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.applyFilter=function(t,e,r){var i=t.filterManager;this.uniforms.mask.value=this.maskSprite._texture,i.calculateMappedMatrix(e.frame,this.maskSprite,this.maskMatrix),this.uniforms.otherMatrix.value=this.maskMatrix.toArray(!0),this.uniforms.alpha.value=this.maskSprite.worldAlpha;var n=this.getShader(t);i.applyFilter(n,e,r)},Object.defineProperties(i.prototype,{map:{get:function(){return this.uniforms.mask.value},set:function(t){this.uniforms.mask.value=t}},offset:{get:function(){return this.uniforms.offset.value},set:function(t){this.uniforms.offset.value=t}}})},{"../../../math":48,"./AbstractFilter":66}],69:[function(t,e,r){function i(t){n.call(this,t),this.currentBlendMode=99999}var n=t("./WebGLManager");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.setBlendMode=function(t){if(this.currentBlendMode===t)return!1;this.currentBlendMode=t;var e=this.renderer.blendModes[this.currentBlendMode];return this.renderer.gl.blendFunc(e[0],e[1]),!0}},{"./WebGLManager":74}],70:[function(t,e,r){function i(t){n.call(this,t),this.filterStack=[],this.filterStack.push({renderTarget:t.currentRenderTarget,filter:[],bounds:null}),this.texturePool=[],this.textureSize=new h.Rectangle(0,0,t.width,t.height),this.currentFrame=null}var n=t("./WebGLManager"),o=t("../utils/RenderTarget"),s=t("../../../const"),a=t("../utils/Quad"),h=t("../../../math");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.onContextChange=function(){this.texturePool.length=0;var t=this.renderer.gl;this.quad=new a(t)},i.prototype.setFilterStack=function(t){this.filterStack=t},i.prototype.pushFilter=function(t,e){var r=t.filterArea?t.filterArea.clone():t.getBounds();r.x=0|r.x,r.y=0|r.y,r.width=0|r.width,r.height=0|r.height;var i=0|e[0].padding;if(r.x-=i,r.y-=i,r.width+=2*i,r.height+=2*i,this.renderer.currentRenderTarget.transform){var n=this.renderer.currentRenderTarget.transform;r.x+=n.tx,r.y+=n.ty,this.capFilterArea(r),r.x-=n.tx,r.y-=n.ty}else this.capFilterArea(r);if(r.width>0&&r.height>0){this.currentFrame=r;var o=this.getRenderTarget();this.renderer.setRenderTarget(o),o.clear(),this.filterStack.push({renderTarget:o,filter:e})}else this.filterStack.push({renderTarget:null,filter:e})},i.prototype.popFilter=function(){var t=this.filterStack.pop(),e=this.filterStack[this.filterStack.length-1],r=t.renderTarget;if(t.renderTarget){var i=e.renderTarget,n=this.renderer.gl;this.currentFrame=r.frame,this.quad.map(this.textureSize,r.frame),n.bindBuffer(n.ARRAY_BUFFER,this.quad.vertexBuffer),n.bindBuffer(n.ELEMENT_ARRAY_BUFFER,this.quad.indexBuffer);var o=t.filter;if(n.vertexAttribPointer(this.renderer.shaderManager.defaultShader.attributes.aVertexPosition,2,n.FLOAT,!1,0,0),n.vertexAttribPointer(this.renderer.shaderManager.defaultShader.attributes.aTextureCoord,2,n.FLOAT,!1,0,32),n.vertexAttribPointer(this.renderer.shaderManager.defaultShader.attributes.aColor,4,n.FLOAT,!1,0,64),this.renderer.blendModeManager.setBlendMode(s.BLEND_MODES.NORMAL),1===o.length)o[0].uniforms.dimensions&&(o[0].uniforms.dimensions.value[0]=this.renderer.width,o[0].uniforms.dimensions.value[1]=this.renderer.height,o[0].uniforms.dimensions.value[2]=this.quad.vertices[0],o[0].uniforms.dimensions.value[3]=this.quad.vertices[5]),o[0].applyFilter(this.renderer,r,i),this.returnRenderTarget(r);else{for(var a=r,h=this.getRenderTarget(!0),u=0;uthis.textureSize.width&&(t.width=this.textureSize.width-t.x),t.y+t.height>this.textureSize.height&&(t.height=this.textureSize.height-t.y)},i.prototype.resize=function(t,e){this.textureSize.width=t,this.textureSize.height=e;for(var r=0;re;++e)t._array[2*e]=o[e].x,t._array[2*e+1]=o[e].y;s.uniform2fv(i,t._array);break;case"v3v":for(t._array||(t._array=new Float32Array(3*o.length)),e=0,r=o.length;r>e;++e)t._array[3*e]=o[e].x,t._array[3*e+1]=o[e].y,t._array[3*e+2]=o[e].z;s.uniform3fv(i,t._array);break;case"v4v":for(t._array||(t._array=new Float32Array(4*o.length)),e=0,r=o.length;r>e;++e)t._array[4*e]=o[e].x,t._array[4*e+1]=o[e].y,t._array[4*e+2]=o[e].z,t._array[4*e+3]=o[e].w;s.uniform4fv(i,t._array);break;case"t":case"sampler2D":if(!t.value||!t.value.baseTexture.hasLoaded)break;s.activeTexture(s["TEXTURE"+this.textureCount]);var a=t.value.baseTexture._glTextures[s.id];a||(this.initSampler2D(t),a=t.value.baseTexture._glTextures[s.id]),s.bindTexture(s.TEXTURE_2D,a),s.uniform1i(t._location,this.textureCount),this.textureCount++;break;default:console.warn("Pixi.js Shader Warning: Unknown uniform type: "+t.type)}},i.prototype.syncUniforms=function(){this.textureCount=1;for(var t in this.uniforms)this.syncUniform(this.uniforms[t])},i.prototype.initSampler2D=function(t){var e=this.gl,r=t.value.baseTexture;if(r.hasLoaded)if(t.textureData){var i=t.textureData;r._glTextures[e.id]=e.createTexture(),e.bindTexture(e.TEXTURE_2D,r._glTextures[e.id]),e.pixelStorei(e.UNPACK_PREMULTIPLY_ALPHA_WEBGL,r.premultipliedAlpha),e.texImage2D(e.TEXTURE_2D,0,i.luminance?e.LUMINANCE:e.RGBA,e.RGBA,e.UNSIGNED_BYTE,r.source),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MAG_FILTER,i.magFilter?i.magFilter:e.LINEAR),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MIN_FILTER,i.wrapS?i.wrapS:e.CLAMP_TO_EDGE),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,i.wrapS?i.wrapS:e.CLAMP_TO_EDGE),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,i.wrapT?i.wrapT:e.CLAMP_TO_EDGE)}else this.shaderManager.renderer.updateTexture(r)},i.prototype.destroy=function(){this.gl.deleteProgram(this.program),this.gl=null,this.uniforms=null,this.attributes=null,this.vertexSrc=null,this.fragmentSrc=null},i.prototype._glCompile=function(t,e){var r=this.gl.createShader(t);return this.gl.shaderSource(r,e),this.gl.compileShader(r),this.gl.getShaderParameter(r,this.gl.COMPILE_STATUS)?r:(console.log(this.gl.getShaderInfoLog(r)),null)}},{"../../../utils":98}],78:[function(t,e,r){function i(t,e,r,o,s){var a={uSampler:{type:"sampler2D",value:0},projectionMatrix:{type:"mat3",value:new Float32Array([1,0,0,0,1,0,0,0,1])}};if(o)for(var h in o)a[h]=o[h];var u={aVertexPosition:0,aTextureCoord:0,aColor:0};if(s)for(var l in s)u[l]=s[l];e=e||i.defaultVertexSrc,r=r||i.defaultFragmentSrc,n.call(this,t,e,r,a,u)}var n=t("./Shader");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.defaultVertexSrc=["precision lowp float;","attribute vec2 aVertexPosition;","attribute vec2 aTextureCoord;","attribute vec4 aColor;","uniform mat3 projectionMatrix;","varying vec2 vTextureCoord;","varying vec4 vColor;","void main(void){"," gl_Position = vec4((projectionMatrix * vec3(aVertexPosition, 1.0)).xy, 0.0, 1.0);"," vTextureCoord = aTextureCoord;"," vColor = vec4(aColor.rgb * aColor.a, aColor.a);","}"].join("\n"),i.defaultFragmentSrc=["precision lowp float;","varying vec2 vTextureCoord;","varying vec4 vColor;","uniform sampler2D uSampler;","void main(void){"," gl_FragColor = texture2D(uSampler, vTextureCoord) * vColor ;","}"].join("\n")},{"./Shader":77}],79:[function(t,e,r){function i(t){vertexSrc=i.defaultVertexSrc,fragmentSrc=i.defaultFragmentSrc,console.log(fragmentSrc),n.call(this,t,vertexSrc,fragmentSrc)}var n=t("pixi-gl-core").GLShader;i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.defaultVertexSrc=["precision lowp float;","attribute vec2 aVertexPosition;","attribute vec2 aTextureCoord;","attribute vec4 aColor;","uniform mat3 projectionMatrix;","varying vec2 vTextureCoord;","varying vec4 vColor;","void main(void){"," gl_Position = vec4((projectionMatrix * vec3(aVertexPosition, 1.0)).xy, 0.0, 1.0);"," vTextureCoord = aTextureCoord;"," vColor = vec4(aColor.rgb * aColor.a, aColor.a);","}"].join("\n"),i.defaultFragmentSrc=["precision lowp float;","varying vec2 vTextureCoord;","varying vec4 vColor;","uniform sampler2D uSampler;","void main(void){"," gl_FragColor = texture2D(uSampler, vTextureCoord) * vColor ;","}"].join("\n")},{"pixi-gl-core":1}],80:[function(t,e,r){function i(t){n.call(this,t)}var n=t("../managers/WebGLManager");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.start=function(){},i.prototype.stop=function(){this.flush()},i.prototype.flush=function(){},i.prototype.render=function(t){}},{"../managers/WebGLManager":74}],81:[function(t,e,r){function i(t){this.gl=t,this.vertices=new Float32Array([0,0,200,0,200,200,0,200]),this.uvs=new Float32Array([0,0,1,0,1,1,0,1]),this.colors=new Float32Array([1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]),this.indices=new Uint16Array([0,1,2,0,3,2]),this.vertexBuffer=t.createBuffer(),this.indexBuffer=t.createBuffer(),t.bindBuffer(t.ARRAY_BUFFER,this.vertexBuffer),t.bufferData(t.ARRAY_BUFFER,128,t.DYNAMIC_DRAW),t.bindBuffer(t.ELEMENT_ARRAY_BUFFER,this.indexBuffer),t.bufferData(t.ELEMENT_ARRAY_BUFFER,this.indices,t.STATIC_DRAW),this.upload()}i.prototype.constructor=i,i.prototype.map=function(t,e){var r=0,i=0;this.uvs[0]=r,this.uvs[1]=i,this.uvs[2]=r+e.width/t.width,this.uvs[3]=i,this.uvs[4]=r+e.width/t.width,this.uvs[5]=i+e.height/t.height,this.uvs[6]=r,this.uvs[7]=i+e.height/t.height,r=e.x,i=e.y,this.vertices[0]=r,this.vertices[1]=i,this.vertices[2]=r+e.width,this.vertices[3]=i,this.vertices[4]=r+e.width,this.vertices[5]=i+e.height,this.vertices[6]=r,this.vertices[7]=i+e.height,this.upload()},i.prototype.upload=function(){var t=this.gl;t.bindBuffer(t.ARRAY_BUFFER,this.vertexBuffer),t.bufferSubData(t.ARRAY_BUFFER,0,this.vertices),t.bufferSubData(t.ARRAY_BUFFER,32,this.uvs),t.bufferSubData(t.ARRAY_BUFFER,64,this.colors)},i.prototype.destroy=function(){var t=this.gl;t.deleteBuffer(this.vertexBuffer),t.deleteBuffer(this.indexBuffer)},e.exports=i},{}],82:[function(t,e,r){var i=t("../../../math"),n=(t("../../../utils"),t("../../../const")),o=t("pixi-gl-core").GLTexture,s=t("pixi-gl-core").GLFramebuffer,a=t("./StencilMaskStack"),h=function(t,e,r,h,u,l){if(this.gl=t,this.frameBuffer=null,this.texture=null,this.clearColor=[0,0,0,0],this.size=new i.Rectangle(0,0,1,1),this.resolution=u||n.RESOLUTION,this.projectionMatrix=new i.Matrix,this.transform=null,this.frame=null,this.stencilBuffer=null,this.stencilMaskStack=new a,this.filterStack=[{renderTarget:this,filter:[],bounds:this.size}],this.scaleMode=h||n.SCALE_MODES.DEFAULT,this.root=l,this.frameBuffer=new s.createRGBA(t,100,100),this.root)this.frameBuffer.framebuffer=null;else{var c=new o(t);c.enableLinearScaling(),c.enableWrapClamp(),this.frameBuffer.enableTexture(c),this.texture=c.texture}this.resize(e,r)};h.prototype.constructor=h,e.exports=h,h.prototype.clear=function(t){var e=t||this.clearColor;this.frameBuffer.clear(e[0],e[1],e[2],e[3])},h.prototype.attachStencilBuffer=function(){this.root||this.frameBuffer.enableStencil()},h.prototype.activate=function(){var t=this.gl;this.frameBuffer.bind();var e=this.frame||this.size;this.calculateProjection(e),this.transform&&this.projectionMatrix.append(this.transform),t.viewport(0,0,e.width*this.resolution,e.height*this.resolution)},h.prototype.calculateProjection=function(t){var e=this.projectionMatrix;e.identity(),this.root?(e.a=1/t.width*2,e.d=-1/t.height*2,e.tx=-1-t.x*e.a,e.ty=1-t.y*e.d):(e.a=1/t.width*2,e.d=1/t.height*2,e.tx=-1-t.x*e.a,e.ty=-1-t.y*e.d)},h.prototype.resize=function(t,e){if(t=0|t,e=0|e,this.size.width!==t||this.size.height!==e){this.size.width=t,this.size.height=e,this.frameBuffer.resize(t*this.resolution,e*this.resolution);var r=this.frame||this.size;this.calculateProjection(r)}},h.prototype.destroy=function(){this.gl;this.frameBuffer.destroy(),this.frameBuffer=null,this.texture=null}},{"../../../const":38,"../../../math":48,"../../../utils":98,"./StencilMaskStack":83,"pixi-gl-core":1}],83:[function(t,e,r){function i(){this.stencilStack=[],this.reverse=!0,this.count=0}i.prototype.constructor=i,e.exports=i},{}],84:[function(t,e,r){function i(t,e){return e=e||{},e[CONST.BLEND_MODES.NORMAL]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.ADD]=[t.SRC_ALPHA,t.DST_ALPHA],e[CONST.BLEND_MODES.MULTIPLY]=[t.DST_COLOR,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.SCREEN]=[t.SRC_ALPHA,t.ONE],e[CONST.BLEND_MODES.OVERLAY]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.DARKEN]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.LIGHTEN]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.COLOR_DODGE]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.COLOR_BURN]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.HARD_LIGHT]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.SOFT_LIGHT]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.DIFFERENCE]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.EXCLUSION]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.HUE]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.SATURATION]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.COLOR]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.LUMINOSITY]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e}CONST=t("../../../const"),e.exports=i},{"../../../const":38}],85:[function(t,e,r){function i(t,e){e=e||{},e[CONST.DRAW_MODES.POINTS]=t.POINTS,e[CONST.DRAW_MODES.LINES]=t.LINES,e[CONST.DRAW_MODES.LINE_LOOP]=t.LINE_LOOP,e[CONST.DRAW_MODES.LINE_STRIP]=t.LINE_STRIP,e[CONST.DRAW_MODES.TRIANGLES]=t.TRIANGLES,e[CONST.DRAW_MODES.TRIANGLE_STRIP]=t.TRIANGLE_STRIP,e[CONST.DRAW_MODES.TRIANGLE_FAN]=t.TRIANGLE_FAN}CONST=t("../../../const"),e.exports=i},{"../../../const":38}],86:[function(t,e,r){function i(t){s.call(this),this.anchor=new n.Point,this._texture=null,this._width=0,this._height=0,this.tint=16777215,this.blendMode=u.BLEND_MODES.NORMAL,this.shader=null,this.cachedTint=16777215,this.texture=t||o.EMPTY,this.textureDirty=!0,this.vertexDirty=!0,this.vertexData=new Float32Array(8)}var n=t("../math"),o=t("../textures/Texture"),s=t("../display/Container"),a=t("../renderers/canvas/utils/CanvasTinter"),h=t("../utils"),u=t("../const"),l=new n.Point;i.prototype=Object.create(s.prototype),i.prototype.constructor=i,e.exports=i,Object.defineProperties(i.prototype,{width:{get:function(){return Math.abs(this.scale.x)*this.texture._frame.width},set:function(t){var e=h.sign(this.scale.x)||1;this.scale.x=e*t/this.texture._frame.width,this._width=t}},height:{get:function(){return Math.abs(this.scale.y)*this.texture._frame.height},set:function(t){var e=h.sign(this.scale.y)||1;this.scale.y=e*t/this.texture._frame.height,this._height=t}},texture:{get:function(){return this._texture},set:function(t){this._texture!==t&&(this._texture=t,this.cachedTint=16777215,this.textureDirty=!0,t&&(t.baseTexture.hasLoaded?this._onTextureUpdate():t.once("update",this._onTextureUpdate,this)))}}}),i.prototype._onTextureUpdate=function(){this.textureDirty=!0,this._width&&(this.scale.x=h.sign(this.scale.x)*this._width/this.texture.frame.width),this._height&&(this.scale.y=h.sign(this.scale.y)*this._height/this.texture.frame.height)},i.prototype.caclulateVertices=function(){var t,e,r,i,n=this._texture,o=this.worldTransform,s=o.a,a=o.b,h=o.c,u=o.d,l=o.tx,c=o.ty,p=this.vertexData,d=n.trim;d?(e=d.x-this.anchor.x*d.width,t=e+n.crop.width,i=d.y-this.anchor.y*d.height,r=i+n.crop.height):(t=n._frame.width*(1-this.anchor.x),e=n._frame.width*-this.anchor.x,r=n._frame.height*(1-this.anchor.y),i=n._frame.height*-this.anchor.y),p[0]=s*e+h*i+l,p[1]=u*i+a*e+c,p[2]=s*t+h*i+l,p[3]=u*i+a*t+c,p[4]=s*t+h*r+l,p[5]=u*r+a*t+c,p[6]=s*e+h*r+l,p[7]=u*r+a*e+c},i.prototype._renderWebGL=function(t){this.textureDirty&&(this.textureDirty=!1,this._onTextureUpdate(),this.vertexDirty=!0),this.vertexDirty&&(this.vertexDirty=!1,this.caclulateVertices()),t.setObjectRenderer(t.plugins.sprite),t.plugins.sprite.render(this)},i.prototype.getBounds=function(t){if(!this._currentBounds){this.vertexDirty&&(this.vertexDirty=!1,this.caclulateVertices());var e,r,i,n,o=this.vertexData,s=o[0],a=o[1],h=o[2],u=o[3],l=o[4],c=o[5],p=o[6],d=o[7];if(e=s,e=e>h?h:e,e=e>l?l:e,e=e>p?p:e,i=a,i=i>u?u:i,i=i>c?c:i,i=i>d?d:i,r=s,r=h>r?h:r,r=l>r?l:r,r=p>r?p:r,n=a,n=u>n?u:n,n=c>n?c:n,n=d>n?d:n,this.children.length){var f=this.containerGetBounds();w0=f.x,w1=f.x+f.width,h0=f.y,h1=f.y+f.height,e=ew1?r:w1,n=n>h1?n:h1}var v=this._bounds;v.x=e,v.width=r-e,v.y=i,v.height=n-i,this._currentBounds=v}return this._currentBounds},i.prototype.getLocalBounds=function(){return this._bounds.x=-this._texture._frame.width*this.anchor.x,this._bounds.y=-this._texture._frame.height*this.anchor.y,this._bounds.width=this._texture._frame.width,this._bounds.height=this._texture._frame.height,this._bounds},i.prototype.containsPoint=function(t){this.worldTransform.applyInverse(t,l);var e,r=this._texture._frame.width,i=this._texture._frame.height,n=-r*this.anchor.x;return l.x>n&&l.xe&&l.yr;r++)this.groups[r]={textures:[],textureCount:0,ids:[],size:0,start:0,blend:0};this.currentGroup=this.groups[this.groupCount++],this.currentTexture=null}var n=t("../../renderers/webgl/utils/ObjectRenderer"),o=t("../../renderers/webgl/WebGLRenderer"),s=(t("../../renderers/webgl/shaders/_TextureShader"),t("../../utils/createIndicesForQuads")),a=t("./generateMultiTextureShader"),h=t("../../const"),u=t("pixi-gl-core"),l=2;i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,o.registerPlugin("sprite",i),i.prototype.onContextChange=function(){var t=this.renderer.gl;this._shader=a(t,l),this.shader=this.renderer.shaderManager.defaultShader,this.vertexBuffer=u.GLBuffer.createVertexBuffer(t,null,t.DYNAMIC_DRAW),this.indexBuffer=u.GLBuffer.createIndexBuffer(t,this.indices,t.STATIC_DRAW),this.vao=new u.VertexArrayObject(t),this.vao.addIndex(this.indexBuffer),this.vao.addAttribute(this.vertexBuffer,this._shader.attributes.aVertexPosition,t.FLOAT,!1,this.vertByteSize,0),this.vao.addAttribute(this.vertexBuffer,this._shader.attributes.aTextureCoord,t.UNSIGNED_SHORT,!0,this.vertByteSize,8),this.vao.addAttribute(this.vertexBuffer,this._shader.attributes.aColor,t.UNSIGNED_BYTE,!0,this.vertByteSize,12),this.vao.addAttribute(this.vertexBuffer,this._shader.attributes.aTextureId,t.FLOAT,!1,this.vertByteSize,16),this.currentBlendMode=99999},i.prototype.render=function(t){this.currentIndex>=this.size&&this.flush();var e=t.texture._uvs;if(e){var r=(this.groups,t.texture.baseTexture),i=this.currentGroup;if(this.currentTexture!==r&&(this.currentTexture=r,!r._enabled)){if(r._enabled=!0,r._id=this.textureCount,this.textureCount===l){for(var n=0;n>16)+(65280&t.tint)+((255&t.tint)<<16)+(255*t.worldAlpha<<24);a[o++]=h[0],a[o++]=h[1],this.uvs[o++]=e.uvs_uint32[0],s[o++]=u,a[o++]=r._id,a[o++]=h[2],a[o++]=h[3],this.uvs[o++]=e.uvs_uint32[1],s[o++]=u,a[o++]=r._id,a[o++]=h[4],a[o++]=h[5],this.uvs[o++]=e.uvs_uint32[2],s[o++]=u,a[o++]=r._id,a[o++]=h[6],a[o++]=h[7],this.uvs[o++]=e.uvs_uint32[3],s[o++]=u,a[o++]=r._id,this.sprites[this.currentBatchSize++]=t}},i.prototype.renderSprites=function(t){for(var e=0;e.5*this.size)this.vertexBuffer.upload(this.vertices,0,!0);else{var e=this.positions.subarray(0,this.currentIndex*this.vertByteSize);this.vertexBuffer.upload(e,0,!0)}for(this.renderer.bindShader(this._shader),this.renderer.blendModeManager.setBlendMode(0),t=0;tu;u++)h[u]=u;return a.bind(),a.uniforms.uSamplers=h,a}function n(t){var e="vec4 getSampleFromArray(sampler2D textures[%%], int ndx, vec2 uv) {\n\nvec4 color;";e+="\n", -e+="\n";for(var r=0;t>r;r++)r>0&&(e+="\nelse "),t-1>r&&(e+="if(ndx == "+r+")"),e+="\n{",e+="\n color = texture2D(textures["+r+"], uv);",e+="\n}";return e+="\n",e+="\n",e+="return color;",e+="\n}"}var o=t("pixi-gl-core").GLShader,s=["varying vec2 vTextureCoord;","varying vec4 vColor;","varying float vTextureId;","uniform sampler2D uSamplers[%%];","void main(void){","gl_FragColor = getSampleFromArray(uSamplers, int(vTextureId), vTextureCoord) * vColor;","}"].join("\n");e.exports=i},{"pixi-gl-core":1}],89:[function(t,e,r){function i(t,e,r){this.canvas=document.createElement("canvas"),this.context=this.canvas.getContext("2d"),this.resolution=r||h.RESOLUTION,this._text=null,this._style=null;var i=o.fromCanvas(this.canvas);i.trim=new s.Rectangle,n.call(this,i),this.text=t,this.style=e}var n=t("../sprites/Sprite"),o=t("../textures/Texture"),s=t("../math"),a=t("../utils"),h=t("../const");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.fontPropertiesCache={},i.fontPropertiesCanvas=document.createElement("canvas"),i.fontPropertiesContext=i.fontPropertiesCanvas.getContext("2d"),Object.defineProperties(i.prototype,{width:{get:function(){return this.dirty&&this.updateText(),this.scale.x*this._texture._frame.width},set:function(t){this.scale.x=t/this._texture._frame.width,this._width=t}},height:{get:function(){return this.dirty&&this.updateText(),this.scale.y*this._texture._frame.height},set:function(t){this.scale.y=t/this._texture._frame.height,this._height=t}},style:{get:function(){return this._style},set:function(t){t=t||{},"number"==typeof t.fill&&(t.fill=a.hex2string(t.fill)),"number"==typeof t.stroke&&(t.stroke=a.hex2string(t.stroke)),"number"==typeof t.dropShadowColor&&(t.dropShadowColor=a.hex2string(t.dropShadowColor)),t.font=t.font||"bold 20pt Arial",t.fill=t.fill||"black",t.align=t.align||"left",t.stroke=t.stroke||"black",t.strokeThickness=t.strokeThickness||0,t.wordWrap=t.wordWrap||!1,t.wordWrapWidth=t.wordWrapWidth||100,t.dropShadow=t.dropShadow||!1,t.dropShadowColor=t.dropShadowColor||"#000000",t.dropShadowAngle=void 0!==t.dropShadowAngle?t.dropShadowAngle:Math.PI/6,t.dropShadowDistance=void 0!==t.dropShadowDistance?t.dropShadowDistance:5,t.dropShadowBlur=void 0!==t.dropShadowBlur?t.dropShadowBlur:0,t.padding=t.padding||0,t.textBaseline=t.textBaseline||"alphabetic",t.lineJoin=t.lineJoin||"miter",t.miterLimit=t.miterLimit||10,this._style=t,this.dirty=!0}},text:{get:function(){return this._text},set:function(t){t=t.toString()||" ",this._text!==t&&(this._text=t,this.dirty=!0)}}}),i.prototype.updateText=function(){var t=this._style;this.context.font=t.font;for(var e=t.wordWrap?this.wordWrap(this._text):this._text,r=e.split(/(?:\r\n|\r|\n)/),i=new Array(r.length),n=0,o=this.determineFontProperties(t.font),s=0;s0?(this.context.shadowColor=t.dropShadowColor,this.context.shadowBlur=t.dropShadowBlur):this.context.fillStyle=t.dropShadowColor;var d=Math.cos(t.dropShadowAngle)*t.dropShadowDistance,f=Math.sin(t.dropShadowAngle)*t.dropShadowDistance;for(s=0;sh;h++){for(u=0;p>u;u+=4)if(255!==l[d+u]){f=!0;break}if(f)break;d+=p}for(e.ascent=s-h,d=c-p,f=!1,h=a;h>s;h--){for(u=0;p>u;u+=4)if(255!==l[d+u]){f=!0;break}if(f)break;d-=p}e.descent=h-s,e.fontSize=e.ascent+e.descent,i.fontPropertiesCache[t]=e}return e},i.prototype.wordWrap=function(t){for(var e="",r=t.split("\n"),i=this._style.wordWrapWidth,n=0;no?(a>0&&(e+="\n"),e+=s[a],o=i-h):(o-=u,e+=" "+s[a])}n0&&e>0,this.width=this._frame.width=this.crop.width=t,this.height=this._frame.height=this.crop.height=e,r&&(this.baseTexture.width=this.width,this.baseTexture.height=this.height),this.valid&&(this.textureBuffer.resize(this.width,this.height),this.filterManager&&this.filterManager.resize(this.width,this.height)))},i.prototype.clear=function(){this.valid&&(this.renderer.type===l.RENDERER_TYPE.WEBGL&&this.renderer.gl.bindFramebuffer(this.renderer.gl.FRAMEBUFFER,this.textureBuffer.frameBuffer),this.textureBuffer.clear())},i.prototype.renderWebGL=function(t,e,r,i){if(this.valid){if(i=void 0!==i?i:!0,this.textureBuffer.transform=e,this.textureBuffer.activate(),t.worldAlpha=1,i){t.worldTransform.identity(),t.currentBounds=null;var n,o,s=t.children;for(n=0,o=s.length;o>n;++n)s[n].updateTransform()}var a=this.renderer.filterManager;this.renderer.filterManager=this.filterManager,this.renderer.renderDisplayObject(t,this.textureBuffer,r),this.renderer.filterManager=a}},i.prototype.renderCanvas=function(t,e,r,i){if(this.valid){i=!!i;var n=c;n.identity(),e&&n.append(e);var o=t.worldTransform;t.worldTransform=n,t.worldAlpha=1;var s,a,h=t.children;for(s=0,a=h.length;a>s;++s)h[s].updateTransform();r&&this.textureBuffer.clear();var u=this.textureBuffer.context,l=this.renderer.resolution;this.renderer.resolution=this.resolution,this.renderer.renderDisplayObject(t,u),this.renderer.resolution=l,t.worldTransform===n&&(t.worldTransform=o)}},i.prototype.destroy=function(){o.prototype.destroy.call(this,!0),this.textureBuffer.destroy(),this.filterManager&&this.filterManager.destroy(),this.renderer=null},i.prototype.getImage=function(){var t=new Image;return t.src=this.getBase64(),t},i.prototype.getBase64=function(){return this.getCanvas().toDataURL()},i.prototype.getCanvas=function(){if(this.renderer.type===l.RENDERER_TYPE.WEBGL){var t=this.renderer.gl,e=this.textureBuffer.size.width,r=this.textureBuffer.size.height,i=new Uint8Array(4*e*r);t.bindFramebuffer(t.FRAMEBUFFER,this.textureBuffer.frameBuffer),t.readPixels(0,0,e,r,t.RGBA,t.UNSIGNED_BYTE,i),t.bindFramebuffer(t.FRAMEBUFFER,null);var n=new h(e,r),o=n.context.getImageData(0,0,e,r);return o.data.set(i),n.context.putImageData(o,0,0),n.canvas}return this.textureBuffer.canvas},i.prototype.getPixels=function(){var t,e;if(this.renderer.type===l.RENDERER_TYPE.WEBGL){var r=this.renderer.gl;t=this.textureBuffer.size.width,e=this.textureBuffer.size.height;var i=new Uint8Array(4*t*e);return r.bindFramebuffer(r.FRAMEBUFFER,this.textureBuffer.frameBuffer),r.readPixels(0,0,t,e,r.RGBA,r.UNSIGNED_BYTE,i),r.bindFramebuffer(r.FRAMEBUFFER,null),i}return t=this.textureBuffer.canvas.width,e=this.textureBuffer.canvas.height,this.textureBuffer.canvas.getContext("2d").getImageData(0,0,t,e).data},i.prototype.getPixel=function(t,e){if(this.renderer.type===l.RENDERER_TYPE.WEBGL){var r=this.renderer.gl,i=new Uint8Array(4);return r.bindFramebuffer(r.FRAMEBUFFER,this.textureBuffer.frameBuffer),r.readPixels(t,e,1,1,r.RGBA,r.UNSIGNED_BYTE,i),r.bindFramebuffer(r.FRAMEBUFFER,null),i}return this.textureBuffer.canvas.getContext("2d").getImageData(t,e,1,1).data}},{"../const":38,"../math":48,"../renderers/canvas/utils/CanvasBuffer":60,"../renderers/webgl/managers/FilterManager":70,"../renderers/webgl/utils/RenderTarget":82,"./BaseTexture":90,"./Texture":92}],92:[function(t,e,r){function i(t,e,r,n,o){a.call(this),this.noFrame=!1,e||(this.noFrame=!0,e=new h.Rectangle(0,0,1,1)),t instanceof i&&(t=t.baseTexture),this.baseTexture=t,this._frame=e,this.trim=n,this.valid=!1,this.requiresUpdate=!1,this._uvs=null,this.width=0,this.height=0,this.crop=r||e,this.rotate=!!o,t.hasLoaded?(this.noFrame&&(e=new h.Rectangle(0,0,t.width,t.height),t.on("update",this.onBaseTextureUpdated,this)),this.frame=e):t.once("loaded",this.onBaseTextureLoaded,this)}var n=t("./BaseTexture"),o=t("./VideoBaseTexture"),s=t("./TextureUvs"),a=t("eventemitter3"),h=t("../math"),u=t("../utils");i.prototype=Object.create(a.prototype),i.prototype.constructor=i,e.exports=i,Object.defineProperties(i.prototype,{frame:{get:function(){return this._frame},set:function(t){if(this._frame=t,this.noFrame=!1,this.width=t.width,this.height=t.height,!this.trim&&!this.rotate&&(t.x+t.width>this.baseTexture.width||t.y+t.height>this.baseTexture.height))throw new Error("Texture Error: frame does not fit inside the base Texture dimensions "+this);this.valid=t&&t.width&&t.height&&this.baseTexture.hasLoaded,this.trim?(this.width=this.trim.width,this.height=this.trim.height,this._frame.width=this.trim.width,this._frame.height=this.trim.height):this.crop=t,this.valid&&this._updateUvs()}}}),i.prototype.update=function(){this.baseTexture.update()},i.prototype.onBaseTextureLoaded=function(t){this.noFrame?this.frame=new h.Rectangle(0,0,t.width,t.height):this.frame=this._frame,this.emit("update",this)},i.prototype.onBaseTextureUpdated=function(t){this._frame.width=t.width,this._frame.height=t.height,this.emit("update",this)},i.prototype.destroy=function(t){this.baseTexture&&(t&&this.baseTexture.destroy(),this.baseTexture.off("update",this.onBaseTextureUpdated,this),this.baseTexture.off("loaded",this.onBaseTextureLoaded,this),this.baseTexture=null),this._frame=null,this._uvs=null,this.trim=null,this.crop=null,this.valid=!1,this.off("dispose",this.dispose,this),this.off("update",this.update,this)},i.prototype.clone=function(){return new i(this.baseTexture,this.frame,this.crop,this.trim,this.rotate)},i.prototype._updateUvs=function(){this._uvs||(this._uvs=new s),this._uvs.set(this.crop,this.baseTexture,this.rotate)},i.fromImage=function(t,e,r){var o=u.TextureCache[t];return o||(o=new i(n.fromImage(t,e,r)),u.TextureCache[t]=o),o},i.fromFrame=function(t){var e=u.TextureCache[t];if(!e)throw new Error('The frameId "'+t+'" does not exist in the texture cache');return e},i.fromCanvas=function(t,e){return new i(n.fromCanvas(t,e))},i.fromVideo=function(t,e){return"string"==typeof t?i.fromVideoUrl(t,e):new i(o.fromVideo(t,e))},i.fromVideoUrl=function(t,e){return new i(o.fromUrl(t,e))},i.addTextureToCache=function(t,e){u.TextureCache[e]=t},i.removeTextureFromCache=function(t){var e=u.TextureCache[t];return delete u.TextureCache[t],delete u.BaseTextureCache[t],e},i.EMPTY=new i(new n)},{"../math":48,"../utils":98,"./BaseTexture":90,"./TextureUvs":93,"./VideoBaseTexture":94,eventemitter3:25}],93:[function(t,e,r){function i(){this.x0=0,this.y0=0,this.x1=1,this.y1=0,this.x2=1,this.y2=1,this.x3=0,this.y3=1,this.xy0_uint32=0,this.xy1_uint32=0,this.xy2_uint32=0,this.xy3_uint32=0,this.uvs_uint32=new Uint32Array(4)}e.exports=i,i.prototype.set=function(t,e,r){var i=e.width,n=e.height;r?(this.x0=(t.x+t.height)/i,this.y0=t.y/n,this.x1=(t.x+t.height)/i,this.y1=(t.y+t.width)/n,this.x2=t.x/i,this.y2=(t.y+t.width)/n,this.x3=t.x/i,this.y3=t.y/n):(this.x0=t.x/i,this.y0=t.y/n,this.x1=(t.x+t.width)/i,this.y1=t.y/n,this.x2=(t.x+t.width)/i,this.y2=(t.y+t.height)/n,this.x3=t.x/i,this.y3=(t.y+t.height)/n),this.uvs_uint32[0]=(65535*this.y0&65535)<<16|65535*this.x0&65535,this.uvs_uint32[1]=(65535*this.y1&65535)<<16|65535*this.x1&65535,this.uvs_uint32[2]=(65535*this.y2&65535)<<16|65535*this.x2&65535,this.uvs_uint32[3]=(65535*this.y3&65535)<<16|65535*this.x3&65535}},{}],94:[function(t,e,r){function i(t,e){if(!t)throw new Error("No video source element specified.");(t.readyState===t.HAVE_ENOUGH_DATA||t.readyState===t.HAVE_FUTURE_DATA)&&t.width&&t.height&&(t.complete=!0),o.call(this,t,e),this.autoUpdate=!1,this._onUpdate=this._onUpdate.bind(this),this._onCanPlay=this._onCanPlay.bind(this),t.complete||(t.addEventListener("canplay",this._onCanPlay),t.addEventListener("canplaythrough",this._onCanPlay),t.addEventListener("play",this._onPlayStart.bind(this)),t.addEventListener("pause",this._onPlayStop.bind(this))),this.__loaded=!1}function n(t,e){e||(e="video/"+t.substr(t.lastIndexOf(".")+1));var r=document.createElement("source");return r.src=t,r.type=e,r}var o=t("./BaseTexture"),s=t("../utils");i.prototype=Object.create(o.prototype),i.prototype.constructor=i,e.exports=i,i.prototype._onUpdate=function(){this.autoUpdate&&(window.requestAnimationFrame(this._onUpdate),this.update())},i.prototype._onPlayStart=function(){this.autoUpdate||(window.requestAnimationFrame(this._onUpdate),this.autoUpdate=!0)},i.prototype._onPlayStop=function(){this.autoUpdate=!1},i.prototype._onCanPlay=function(){this.hasLoaded=!0,this.source&&(this.source.removeEventListener("canplay",this._onCanPlay),this.source.removeEventListener("canplaythrough",this._onCanPlay),this.width=this.source.videoWidth,this.height=this.source.videoHeight,this.source.play(),this.__loaded||(this.__loaded=!0,this.emit("loaded",this)))},i.prototype.destroy=function(){this.source&&this.source._pixiId&&(delete s.BaseTextureCache[this.source._pixiId],delete this.source._pixiId),o.prototype.destroy.call(this)},i.fromVideo=function(t,e){t._pixiId||(t._pixiId="video_"+s.uid());var r=s.BaseTextureCache[t._pixiId];return r||(r=new i(t,e),s.BaseTextureCache[t._pixiId]=r),r},i.fromUrl=function(t,e){var r=document.createElement("video");if(Array.isArray(t))for(var o=0;othis._maxElapsedMS&&(e=this._maxElapsedMS),this.deltaTime=e*n.TARGET_FPMS*this.speed,this._emitter.emit(s,this.deltaTime),this.lastTime=t},e.exports=i},{"../const":38,eventemitter3:25}],96:[function(t,e,r){var i=t("./Ticker"),n=new i;n.autoStart=!0,e.exports={shared:n,Ticker:i}},{"./Ticker":95}],97:[function(t,e,r){var i=function(t){for(var e=6*t,r=new Uint16Array(e),i=0,n=0;e>i;i+=6,n+=4)r[i+0]=n+0,r[i+1]=n+1,r[i+2]=n+2,r[i+3]=n+0,r[i+4]=n+2,r[i+5]=n+3;return r};e.exports=i},{}],98:[function(t,e,r){var i=t("../const"),n=e.exports={_uid:0,_saidHello:!1,EventEmitter:t("eventemitter3"),pluginTarget:t("./pluginTarget"),async:t("async"),uid:function(){return++n._uid},hex2rgb:function(t,e){return e=e||[],e[0]=(t>>16&255)/255,e[1]=(t>>8&255)/255,e[2]=(255&t)/255,e},hex2string:function(t){return t=t.toString(16),t="000000".substr(0,6-t.length)+t,"#"+t},rgb2hex:function(t){return(255*t[0]<<16)+(255*t[1]<<8)+255*t[2]},canUseNewCanvasBlendModes:function(){if("undefined"==typeof document)return!1;var t="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAQAAAABAQMAAADD8p2OAAAAA1BMVEX/",e="AAAACklEQVQI12NgAAAAAgAB4iG8MwAAAABJRU5ErkJggg==",r=new Image;r.src=t+"AP804Oa6"+e;var i=new Image;i.src=t+"/wCKxvRF"+e;var n=document.createElement("canvas");n.width=6,n.height=1;var o=n.getContext("2d");o.globalCompositeOperation="multiply",o.drawImage(r,0,0),o.drawImage(i,2,0);var s=o.getImageData(2,0,1,1).data;return 255===s[0]&&0===s[1]&&0===s[2]},getNextPowerOfTwo:function(t){if(t>0&&0===(t&t-1))return t;for(var e=1;t>e;)e<<=1;return e},isPowerOfTwo:function(t,e){return t>0&&0===(t&t-1)&&e>0&&0===(e&e-1)},getResolutionOfUrl:function(t){var e=i.RETINA_PREFIX.exec(t);return e?parseFloat(e[1]):1},sayHello:function(t){if(!n._saidHello){if(navigator.userAgent.toLowerCase().indexOf("chrome")>-1){var e=["\n %c %c %c Pixi.js "+i.VERSION+" - ✰ "+t+" ✰ %c %c http://www.pixijs.com/ %c %c ♥%c♥%c♥ \n\n","background: #ff66a5; padding:5px 0;","background: #ff66a5; padding:5px 0;","color: #ff66a5; background: #030307; padding:5px 0;","background: #ff66a5; padding:5px 0;","background: #ffc3dc; padding:5px 0;","background: #ff66a5; padding:5px 0;","color: #ff2424; background: #fff; padding:5px 0;","color: #ff2424; background: #fff; padding:5px 0;","color: #ff2424; background: #fff; padding:5px 0;"];window.console.log.apply(console,e)}else window.console&&window.console.log("Pixi.js "+i.VERSION+" - "+t+" - http://www.pixijs.com/");n._saidHello=!0}},isWebGLSupported:function(){var t={stencil:!0};try{if(!window.WebGLRenderingContext)return!1;var e=document.createElement("canvas"),r=e.getContext("webgl",t)||e.getContext("experimental-webgl",t);return!(!r||!r.getContextAttributes().stencil)}catch(i){return!1}},sign:function(t){return t?0>t?-1:1:0},removeItems:function(t,e,r){var i=t.length;if(!(e>=i||0===r)){r=e+r>i?i-e:r;for(var n=e,o=i-r;o>n;++n)t[n]=t[n+r];t.length=o}},TextureCache:{},BaseTextureCache:{}}},{"../const":38,"./pluginTarget":99,async:16,eventemitter3:25}],99:[function(t,e,r){function i(t){t.__plugins={},t.registerPlugin=function(e,r){t.__plugins[e]=r},t.prototype.initPlugins=function(){this.plugins=this.plugins||{};for(var e in t.__plugins)this.plugins[e]=new t.__plugins[e](this)},t.prototype.destroyPlugins=function(){for(var t in this.plugins)this.plugins[t].destroy(),this.plugins[t]=null;this.plugins=null}}e.exports={mixin:function(t){i(t)}}},{}],100:[function(t,e,r){var i=t("./core"),n=t("./mesh"),o=t("./extras"),s=t("./filters");i.SpriteBatch=function(){throw new ReferenceError("SpriteBatch does not exist any more, please use the new ParticleContainer instead.")},i.AssetLoader=function(){throw new ReferenceError("The loader system was overhauled in pixi v3, please see the new PIXI.loaders.Loader class.")},Object.defineProperties(i,{Stage:{get:function(){return console.warn("You do not need to use a PIXI Stage any more, you can simply render any container."),i.Container}},DisplayObjectContainer:{get:function(){return console.warn("DisplayObjectContainer has been shortened to Container, please use Container from now on."),i.Container}},Strip:{get:function(){return console.warn("The Strip class has been renamed to Mesh and moved to mesh.Mesh, please use mesh.Mesh from now on."),n.Mesh}},Rope:{get:function(){return console.warn("The Rope class has been moved to mesh.Rope, please use mesh.Rope from now on."),n.Rope}},MovieClip:{get:function(){return console.warn("The MovieClip class has been moved to extras.MovieClip, please use extras.MovieClip from now on."),o.MovieClip}},TilingSprite:{get:function(){return console.warn("The TilingSprite class has been moved to extras.TilingSprite, please use extras.TilingSprite from now on."),o.TilingSprite}},BitmapText:{get:function(){return console.warn("The BitmapText class has been moved to extras.BitmapText, please use extras.BitmapText from now on."),o.BitmapText}},blendModes:{get:function(){return console.warn("The blendModes has been moved to BLEND_MODES, please use BLEND_MODES from now on."),i.BLEND_MODES}},scaleModes:{get:function(){return console.warn("The scaleModes has been moved to SCALE_MODES, please use SCALE_MODES from now on."),i.SCALE_MODES}},BaseTextureCache:{get:function(){return console.warn("The BaseTextureCache class has been moved to utils.BaseTextureCache, please use utils.BaseTextureCache from now on."),i.utils.BaseTextureCache}},TextureCache:{get:function(){return console.warn("The TextureCache class has been moved to utils.TextureCache, please use utils.TextureCache from now on."),i.utils.TextureCache}},math:{get:function(){return console.warn("The math namespace is deprecated, please access members already accessible on PIXI."),i}}}),i.Sprite.prototype.setTexture=function(t){this.texture=t,console.warn("setTexture is now deprecated, please use the texture property, e.g : sprite.texture = texture;")},o.BitmapText.prototype.setText=function(t){this.text=t,console.warn("setText is now deprecated, please use the text property, e.g : myBitmapText.text = 'my text';")},i.Text.prototype.setText=function(t){this.text=t,console.warn("setText is now deprecated, please use the text property, e.g : myText.text = 'my text';")},i.Text.prototype.setStyle=function(t){this.style=t,console.warn("setStyle is now deprecated, please use the style property, e.g : myText.style = style;")},i.Texture.prototype.setFrame=function(t){this.frame=t,console.warn("setFrame is now deprecated, please use the frame property, e.g : myTexture.frame = frame;")},Object.defineProperties(s,{AbstractFilter:{get:function(){return console.warn("filters.AbstractFilter is an undocumented alias, please use AbstractFilter from now on."),i.AbstractFilter}},FXAAFilter:{get:function(){return console.warn("filters.FXAAFilter is an undocumented alias, please use FXAAFilter from now on."),i.FXAAFilter}},SpriteMaskFilter:{get:function(){return console.warn("filters.SpriteMaskFilter is an undocumented alias, please use SpriteMaskFilter from now on."),i.SpriteMaskFilter}}}),i.utils.uuid=function(){return console.warn("utils.uuid() is deprecated, please use utils.uid() from now on."),i.utils.uid()}},{"./core":45,"./extras":107,"./filters":124,"./mesh":149}],101:[function(t,e,r){function i(t,e){n.Container.call(this),e=e||{},this.textWidth=0,this.textHeight=0,this._glyphs=[],this._font={tint:void 0!==e.tint?e.tint:16777215,align:e.align||"left",name:null,size:0},this.font=e.font,this._text=t,this.maxWidth=0,this.maxLineHeight=0,this.dirty=!1,this.updateText()}var n=t("../core");i.prototype=Object.create(n.Container.prototype),i.prototype.constructor=i,e.exports=i,Object.defineProperties(i.prototype,{tint:{get:function(){return this._font.tint},set:function(t){this._font.tint="number"==typeof t&&t>=0?t:16777215,this.dirty=!0}},align:{get:function(){return this._font.align},set:function(t){this._font.align=t||"left",this.dirty=!0}},font:{get:function(){return this._font},set:function(t){t&&("string"==typeof t?(t=t.split(" "),this._font.name=1===t.length?t[0]:t.slice(1).join(" "),this._font.size=t.length>=2?parseInt(t[0],10):i.fonts[this._font.name].size):(this._font.name=t.name,this._font.size="number"==typeof t.size?t.size:parseInt(t.size,10)),this.dirty=!0)}},text:{get:function(){return this._text},set:function(t){t=t.toString()||" ",this._text!==t&&(this._text=t,this.dirty=!0)}}}),i.prototype.updateText=function(){for(var t=i.fonts[this._font.name],e=new n.Point,r=null,o=[],s=0,a=0,h=[],u=0,l=this._font.size/t.size,c=-1,p=0,d=0;d0&&e.x*l>this.maxWidth)n.utils.removeItems(o,c,d-c),d=c,c=-1,h.push(s),a=Math.max(a,s),u++,e.x=0,e.y+=t.lineHeight,r=null;else{var v=t.chars[f];v&&(r&&v.kerning[r]&&(e.x+=v.kerning[r]),o.push({texture:v.texture,line:u,charCode:f,position:new n.Point(e.x+v.xOffset,e.y+v.yOffset)}),s=e.x+(v.texture.width+v.xOffset),e.x+=v.xAdvance,p=Math.max(p,v.yOffset+v.texture.height),r=f)}}h.push(s),a=Math.max(a,s);var g=[];for(d=0;u>=d;d++){var m=0;"right"===this._font.align?m=a-h[d]:"center"===this._font.align&&(m=(a-h[d])/2),g.push(m)}var y=o.length,x=this.tint;for(d=0;y>d;d++){var b=this._glyphs[d];b?b.texture=o[d].texture:(b=new n.Sprite(o[d].texture),this._glyphs.push(b)),b.position.x=(o[d].position.x+g[o[d].line])*l,b.position.y=o[d].position.y*l,b.scale.x=b.scale.y=l,b.tint=x,b.parent||this.addChild(b)}for(d=y;dt&&(t+=this._textures.length),t}}}),i.prototype.stop=function(){this.playing&&(this.playing=!1,n.ticker.shared.remove(this.update,this))},i.prototype.play=function(){this.playing||(this.playing=!0,n.ticker.shared.add(this.update,this))},i.prototype.gotoAndStop=function(t){this.stop(),this._currentTime=t,this._texture=this._textures[this.currentFrame]},i.prototype.gotoAndPlay=function(t){this._currentTime=t,this.play()},i.prototype.update=function(t){var e=this.animationSpeed*t;if(null!==this._durations){var r=this._currentTime%1*this._durations[this.currentFrame];for(r+=e/60*1e3;0>r;)this._currentTime--,r+=this._durations[this.currentFrame];var i=Math.sign(this.animationSpeed*t);for(this._currentTime=Math.floor(this._currentTime);r>=this._durations[this.currentFrame];)r-=this._durations[this.currentFrame]*i,this._currentTime+=i;this._currentTime+=r/this._durations[this.currentFrame]}else this._currentTime+=e;this._currentTime<0&&!this.loop?(this.gotoAndStop(0),this.onComplete&&this.onComplete()):this._currentTime>=this._textures.length&&!this.loop?(this.gotoAndStop(this._textures.length-1),this.onComplete&&this.onComplete()):this._texture=this._textures[this.currentFrame]},i.prototype.destroy=function(){this.stop(),n.Sprite.prototype.destroy.call(this)},i.fromFrames=function(t){for(var e=[],r=0;rx?x:t,t=t>_?_:t,t=t>E?E:t,r=y,r=r>b?b:r,r=r>T?T:r,r=r>S?S:r,e=m,e=x>e?x:e,e=_>e?_:e,e=E>e?E:e,i=y,i=b>i?b:i,i=T>i?T:i,i=S>i?S:i;var w=this._bounds;return w.x=t,w.width=e-t,w.y=r,w.height=i-r,this._currentBounds=w,w},i.prototype.containsPoint=function(t){this.worldTransform.applyInverse(t,o);var e,r=this._width,i=this._height,n=-r*this.anchor.x;return o.x>n&&o.xe&&o.y 0.2) n = 65600.0; // :\n if (gray > 0.3) n = 332772.0; // *\n if (gray > 0.4) n = 15255086.0; // o\n if (gray > 0.5) n = 23385164.0; // &\n if (gray > 0.6) n = 15252014.0; // 8\n if (gray > 0.7) n = 13199452.0; // @\n if (gray > 0.8) n = 11512810.0; // #\n\n vec2 p = mod( uv / ( pixelSize * 0.5 ), 2.0) - vec2(1.0);\n col = col * character(n, p);\n\n gl_FragColor = vec4(col, 1.0);\n}\n",{dimensions:{type:"4fv",value:new Float32Array([0,0,0,0])},pixelSize:{type:"1f",value:8}})}var n=t("../../core");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i,Object.defineProperties(i.prototype,{size:{get:function(){return this.uniforms.pixelSize.value},set:function(t){this.uniforms.pixelSize.value=t}}})},{"../../core":45}],109:[function(t,e,r){function i(){n.AbstractFilter.call(this),this.blurXFilter=new o,this.blurYFilter=new s,this.defaultFilter=new n.AbstractFilter}var n=t("../../core"),o=t("../blur/BlurXFilter"),s=t("../blur/BlurYFilter");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.applyFilter=function(t,e,r){var i=t.filterManager.getRenderTarget(!0);this.defaultFilter.applyFilter(t,e,r),this.blurXFilter.applyFilter(t,e,i),t.blendModeManager.setBlendMode(n.BLEND_MODES.SCREEN),this.blurYFilter.applyFilter(t,i,r),t.blendModeManager.setBlendMode(n.BLEND_MODES.NORMAL),t.filterManager.returnRenderTarget(i)},Object.defineProperties(i.prototype,{blur:{get:function(){return this.blurXFilter.blur},set:function(t){this.blurXFilter.blur=this.blurYFilter.blur=t}},blurX:{get:function(){return this.blurXFilter.blur},set:function(t){this.blurXFilter.blur=t}},blurY:{get:function(){return this.blurYFilter.blur},set:function(t){this.blurYFilter.blur=t}}})},{"../../core":45,"../blur/BlurXFilter":112,"../blur/BlurYFilter":113}],110:[function(t,e,r){function i(t,e){n.AbstractFilter.call(this,"attribute vec2 aVertexPosition;\nattribute vec2 aTextureCoord;\nattribute vec4 aColor;\n\nuniform float strength;\nuniform float dirX;\nuniform float dirY;\nuniform mat3 projectionMatrix;\n\nvarying vec2 vTextureCoord;\nvarying vec4 vColor;\nvarying vec2 vBlurTexCoords[3];\n\nvoid main(void)\n{\n gl_Position = vec4((projectionMatrix * vec3((aVertexPosition), 1.0)).xy, 0.0, 1.0);\n vTextureCoord = aTextureCoord;\n\n vBlurTexCoords[0] = aTextureCoord + vec2( (0.004 * strength) * dirX, (0.004 * strength) * dirY );\n vBlurTexCoords[1] = aTextureCoord + vec2( (0.008 * strength) * dirX, (0.008 * strength) * dirY );\n vBlurTexCoords[2] = aTextureCoord + vec2( (0.012 * strength) * dirX, (0.012 * strength) * dirY );\n\n vColor = vec4(aColor.rgb * aColor.a, aColor.a);\n}\n","precision lowp float;\n\nvarying vec2 vTextureCoord;\nvarying vec2 vBlurTexCoords[3];\nvarying vec4 vColor;\n\nuniform sampler2D uSampler;\n\nvoid main(void)\n{\n gl_FragColor = vec4(0.0);\n\n gl_FragColor += texture2D(uSampler, vTextureCoord ) * 0.3989422804014327;\n gl_FragColor += texture2D(uSampler, vBlurTexCoords[ 0]) * 0.2419707245191454;\n gl_FragColor += texture2D(uSampler, vBlurTexCoords[ 1]) * 0.05399096651318985;\n gl_FragColor += texture2D(uSampler, vBlurTexCoords[ 2]) * 0.004431848411938341;\n}\n",{strength:{type:"1f",value:1},dirX:{type:"1f",value:t||0},dirY:{type:"1f",value:e||0}}),this.defaultFilter=new n.AbstractFilter,this.passes=1,this.dirX=t||0,this.dirY=e||0,this.strength=4}var n=t("../../core");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.applyFilter=function(t,e,r,i){var n=this.getShader(t);if(this.uniforms.strength.value=this.strength/4/this.passes*(e.frame.width/e.size.width),1===this.passes)t.filterManager.applyFilter(n,e,r,i);else{var o=t.filterManager.getRenderTarget(!0);t.filterManager.applyFilter(n,e,o,i);for(var s=0;s>16&255)/255,s=(r>>8&255)/255,a=(255&r)/255,h=(i>>16&255)/255,u=(i>>8&255)/255,l=(255&i)/255,c=[.3,.59,.11,0,0,o,s,a,t,0,h,u,l,e,0,o-h,s-u,a-l,0,0];this._loadMatrix(c,n)},i.prototype.night=function(t,e){t=t||.1;var r=[-2*t,-t,0,0,0,-t,0,t,0,0,0,t,2*t,0,0,0,0,0,1,0];this._loadMatrix(r,e)},i.prototype.predator=function(t,e){var r=[11.224130630493164*t,-4.794486999511719*t,-2.8746118545532227*t,0*t,.40342438220977783*t,-3.6330697536468506*t,9.193157196044922*t,-2.951810836791992*t,0*t,-1.316135048866272*t,-3.2184197902679443*t,-4.2375030517578125*t,7.476448059082031*t,0*t,.8044459223747253*t,0,0,0,1,0];this._loadMatrix(r,e)},i.prototype.lsd=function(t){var e=[2,-.4,.5,0,0,-.5,2,-.4,0,0,-.4,-.5,3,0,0,0,0,0,1,0];this._loadMatrix(e,t)},i.prototype.reset=function(){var t=[1,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,1,0];this._loadMatrix(t,!1)},Object.defineProperties(i.prototype,{matrix:{get:function(){return this.uniforms.m.value},set:function(t){this.uniforms.m.value=t}}})},{"../../core":45}],116:[function(t,e,r){function i(){n.AbstractFilter.call(this,null,"precision mediump float;\n\nvarying vec2 vTextureCoord;\n\nuniform sampler2D uSampler;\nuniform float step;\n\nvoid main(void)\n{\n vec4 color = texture2D(uSampler, vTextureCoord);\n\n color = floor(color * step) / step;\n\n gl_FragColor = color;\n}\n",{step:{type:"1f",value:5}})}var n=t("../../core");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i,Object.defineProperties(i.prototype,{step:{get:function(){return this.uniforms.step.value},set:function(t){this.uniforms.step.value=t}}})},{"../../core":45}],117:[function(t,e,r){function i(t,e,r){n.AbstractFilter.call(this,null,"precision mediump float;\n\nvarying mediump vec2 vTextureCoord;\n\nuniform sampler2D uSampler;\nuniform vec2 texelSize;\nuniform float matrix[9];\n\nvoid main(void)\n{\n vec4 c11 = texture2D(uSampler, vTextureCoord - texelSize); // top left\n vec4 c12 = texture2D(uSampler, vec2(vTextureCoord.x, vTextureCoord.y - texelSize.y)); // top center\n vec4 c13 = texture2D(uSampler, vec2(vTextureCoord.x + texelSize.x, vTextureCoord.y - texelSize.y)); // top right\n\n vec4 c21 = texture2D(uSampler, vec2(vTextureCoord.x - texelSize.x, vTextureCoord.y)); // mid left\n vec4 c22 = texture2D(uSampler, vTextureCoord); // mid center\n vec4 c23 = texture2D(uSampler, vec2(vTextureCoord.x + texelSize.x, vTextureCoord.y)); // mid right\n\n vec4 c31 = texture2D(uSampler, vec2(vTextureCoord.x - texelSize.x, vTextureCoord.y + texelSize.y)); // bottom left\n vec4 c32 = texture2D(uSampler, vec2(vTextureCoord.x, vTextureCoord.y + texelSize.y)); // bottom center\n vec4 c33 = texture2D(uSampler, vTextureCoord + texelSize); // bottom right\n\n gl_FragColor =\n c11 * matrix[0] + c12 * matrix[1] + c13 * matrix[2] +\n c21 * matrix[3] + c22 * matrix[4] + c23 * matrix[5] +\n c31 * matrix[6] + c32 * matrix[7] + c33 * matrix[8];\n\n gl_FragColor.a = c22.a;\n}\n",{matrix:{type:"1fv",value:new Float32Array(t)},texelSize:{type:"v2",value:{x:1/e,y:1/r}}})}var n=t("../../core");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i,Object.defineProperties(i.prototype,{matrix:{get:function(){return this.uniforms.matrix.value},set:function(t){this.uniforms.matrix.value=new Float32Array(t)}},width:{get:function(){return 1/this.uniforms.texelSize.value.x},set:function(t){this.uniforms.texelSize.value.x=1/t}},height:{get:function(){return 1/this.uniforms.texelSize.value.y},set:function(t){this.uniforms.texelSize.value.y=1/t}}})},{"../../core":45 -}],118:[function(t,e,r){function i(){n.AbstractFilter.call(this,null,"precision mediump float;\n\nvarying vec2 vTextureCoord;\n\nuniform sampler2D uSampler;\n\nvoid main(void)\n{\n float lum = length(texture2D(uSampler, vTextureCoord.xy).rgb);\n\n gl_FragColor = vec4(1.0, 1.0, 1.0, 1.0);\n\n if (lum < 1.00)\n {\n if (mod(gl_FragCoord.x + gl_FragCoord.y, 10.0) == 0.0)\n {\n gl_FragColor = vec4(0.0, 0.0, 0.0, 1.0);\n }\n }\n\n if (lum < 0.75)\n {\n if (mod(gl_FragCoord.x - gl_FragCoord.y, 10.0) == 0.0)\n {\n gl_FragColor = vec4(0.0, 0.0, 0.0, 1.0);\n }\n }\n\n if (lum < 0.50)\n {\n if (mod(gl_FragCoord.x + gl_FragCoord.y - 5.0, 10.0) == 0.0)\n {\n gl_FragColor = vec4(0.0, 0.0, 0.0, 1.0);\n }\n }\n\n if (lum < 0.3)\n {\n if (mod(gl_FragCoord.x - gl_FragCoord.y - 5.0, 10.0) == 0.0)\n {\n gl_FragColor = vec4(0.0, 0.0, 0.0, 1.0);\n }\n }\n}\n")}var n=t("../../core");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i},{"../../core":45}],119:[function(t,e,r){function i(t,e){var r=new n.Matrix;t.renderable=!1,n.AbstractFilter.call(this,"attribute vec2 aVertexPosition;\nattribute vec2 aTextureCoord;\nattribute vec4 aColor;\n\nuniform mat3 projectionMatrix;\nuniform mat3 otherMatrix;\n\nvarying vec2 vMapCoord;\nvarying vec2 vTextureCoord;\nvarying vec4 vColor;\n\nvoid main(void)\n{\n gl_Position = vec4((projectionMatrix * vec3(aVertexPosition, 1.0)).xy, 0.0, 1.0);\n vTextureCoord = aTextureCoord;\n vMapCoord = ( otherMatrix * vec3( aTextureCoord, 1.0) ).xy;\n vColor = vec4(aColor.rgb * aColor.a, aColor.a);\n}\n","precision mediump float;\n\nvarying vec2 vMapCoord;\nvarying vec2 vTextureCoord;\nvarying vec4 vColor;\n\nuniform vec2 scale;\n\nuniform sampler2D uSampler;\nuniform sampler2D mapSampler;\n\nvoid main(void)\n{\n vec4 map = texture2D(mapSampler, vMapCoord);\n\n map -= 0.5;\n map.xy *= scale;\n\n gl_FragColor = texture2D(uSampler, vec2(vTextureCoord.x + map.x, vTextureCoord.y + map.y));\n}\n",{mapSampler:{type:"sampler2D",value:t.texture},otherMatrix:{type:"mat3",value:r.toArray(!0)},scale:{type:"v2",value:{x:1,y:1}}}),this.maskSprite=t,this.maskMatrix=r,(null===e||void 0===e)&&(e=20),this.scale=new n.Point(e,e)}var n=t("../../core");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.applyFilter=function(t,e,r){var i=t.filterManager;i.calculateMappedMatrix(e.frame,this.maskSprite,this.maskMatrix),this.uniforms.otherMatrix.value=this.maskMatrix.toArray(!0),this.uniforms.scale.value.x=this.scale.x*(1/e.frame.width),this.uniforms.scale.value.y=this.scale.y*(1/e.frame.height);var n=this.getShader(t);i.applyFilter(n,e,r)},Object.defineProperties(i.prototype,{map:{get:function(){return this.uniforms.mapSampler.value},set:function(t){this.uniforms.mapSampler.value=t}}})},{"../../core":45}],120:[function(t,e,r){function i(){n.AbstractFilter.call(this,null,"precision mediump float;\n\nvarying vec2 vTextureCoord;\nvarying vec4 vColor;\n\nuniform vec4 dimensions;\nuniform sampler2D uSampler;\n\nuniform float angle;\nuniform float scale;\n\nfloat pattern()\n{\n float s = sin(angle), c = cos(angle);\n vec2 tex = vTextureCoord * dimensions.xy;\n vec2 point = vec2(\n c * tex.x - s * tex.y,\n s * tex.x + c * tex.y\n ) * scale;\n return (sin(point.x) * sin(point.y)) * 4.0;\n}\n\nvoid main()\n{\n vec4 color = texture2D(uSampler, vTextureCoord);\n float average = (color.r + color.g + color.b) / 3.0;\n gl_FragColor = vec4(vec3(average * 10.0 - 5.0 + pattern()), color.a);\n}\n",{scale:{type:"1f",value:1},angle:{type:"1f",value:5},dimensions:{type:"4fv",value:[0,0,0,0]}})}var n=t("../../core");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i,Object.defineProperties(i.prototype,{scale:{get:function(){return this.uniforms.scale.value},set:function(t){this.uniforms.scale.value=t}},angle:{get:function(){return this.uniforms.angle.value},set:function(t){this.uniforms.angle.value=t}}})},{"../../core":45}],121:[function(t,e,r){function i(){n.AbstractFilter.call(this,"attribute vec2 aVertexPosition;\nattribute vec2 aTextureCoord;\nattribute vec4 aColor;\n\nuniform float strength;\nuniform vec2 offset;\n\nuniform mat3 projectionMatrix;\n\nvarying vec2 vTextureCoord;\nvarying vec4 vColor;\nvarying vec2 vBlurTexCoords[6];\n\nvoid main(void)\n{\n gl_Position = vec4((projectionMatrix * vec3((aVertexPosition+offset), 1.0)).xy, 0.0, 1.0);\n vTextureCoord = aTextureCoord;\n\n vBlurTexCoords[ 0] = aTextureCoord + vec2(0.0, -0.012 * strength);\n vBlurTexCoords[ 1] = aTextureCoord + vec2(0.0, -0.008 * strength);\n vBlurTexCoords[ 2] = aTextureCoord + vec2(0.0, -0.004 * strength);\n vBlurTexCoords[ 3] = aTextureCoord + vec2(0.0, 0.004 * strength);\n vBlurTexCoords[ 4] = aTextureCoord + vec2(0.0, 0.008 * strength);\n vBlurTexCoords[ 5] = aTextureCoord + vec2(0.0, 0.012 * strength);\n\n vColor = vec4(aColor.rgb * aColor.a, aColor.a);\n}\n","precision lowp float;\n\nvarying vec2 vTextureCoord;\nvarying vec2 vBlurTexCoords[6];\nvarying vec4 vColor;\n\nuniform vec3 color;\nuniform float alpha;\n\nuniform sampler2D uSampler;\n\nvoid main(void)\n{\n vec4 sum = vec4(0.0);\n\n sum += texture2D(uSampler, vBlurTexCoords[ 0])*0.004431848411938341;\n sum += texture2D(uSampler, vBlurTexCoords[ 1])*0.05399096651318985;\n sum += texture2D(uSampler, vBlurTexCoords[ 2])*0.2419707245191454;\n sum += texture2D(uSampler, vTextureCoord )*0.3989422804014327;\n sum += texture2D(uSampler, vBlurTexCoords[ 3])*0.2419707245191454;\n sum += texture2D(uSampler, vBlurTexCoords[ 4])*0.05399096651318985;\n sum += texture2D(uSampler, vBlurTexCoords[ 5])*0.004431848411938341;\n\n gl_FragColor = vec4( color.rgb * sum.a * alpha, sum.a * alpha );\n}\n",{blur:{type:"1f",value:1/512},color:{type:"c",value:[0,0,0]},alpha:{type:"1f",value:.7},offset:{type:"2f",value:[5,5]},strength:{type:"1f",value:1}}),this.passes=1,this.strength=4}var n=t("../../core");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.applyFilter=function(t,e,r,i){var n=this.getShader(t);if(this.uniforms.strength.value=this.strength/4/this.passes*(e.frame.height/e.size.height),1===this.passes)t.filterManager.applyFilter(n,e,r,i);else{for(var o=t.filterManager.getRenderTarget(!0),s=e,a=o,h=0;h= (time - params.z)) )\n {\n float diff = (dist - time);\n float powDiff = 1.0 - pow(abs(diff*params.x), params.y);\n\n float diffTime = diff * powDiff;\n vec2 diffUV = normalize(uv - center);\n texCoord = uv + (diffUV * diffTime);\n }\n\n gl_FragColor = texture2D(uSampler, texCoord);\n}\n",{center:{type:"v2",value:{x:.5,y:.5}},params:{type:"v3",value:{x:10,y:.8,z:.1}},time:{type:"1f",value:0}})}var n=t("../../core");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i,Object.defineProperties(i.prototype,{center:{get:function(){return this.uniforms.center.value},set:function(t){this.uniforms.center.value=t}},params:{get:function(){return this.uniforms.params.value},set:function(t){this.uniforms.params.value=t}},time:{get:function(){return this.uniforms.time.value},set:function(t){this.uniforms.time.value=t}}})},{"../../core":45}],131:[function(t,e,r){function i(){n.AbstractFilter.call(this,null,"precision mediump float;\n\nvarying vec2 vTextureCoord;\n\nuniform sampler2D uSampler;\nuniform float blur;\nuniform float gradientBlur;\nuniform vec2 start;\nuniform vec2 end;\nuniform vec2 delta;\nuniform vec2 texSize;\n\nfloat random(vec3 scale, float seed)\n{\n return fract(sin(dot(gl_FragCoord.xyz + seed, scale)) * 43758.5453 + seed);\n}\n\nvoid main(void)\n{\n vec4 color = vec4(0.0);\n float total = 0.0;\n\n float offset = random(vec3(12.9898, 78.233, 151.7182), 0.0);\n vec2 normal = normalize(vec2(start.y - end.y, end.x - start.x));\n float radius = smoothstep(0.0, 1.0, abs(dot(vTextureCoord * texSize - start, normal)) / gradientBlur) * blur;\n\n for (float t = -30.0; t <= 30.0; t++)\n {\n float percent = (t + offset - 0.5) / 30.0;\n float weight = 1.0 - abs(percent);\n vec4 sample = texture2D(uSampler, vTextureCoord + delta / texSize * percent * radius);\n sample.rgb *= sample.a;\n color += sample * weight;\n total += weight;\n }\n\n gl_FragColor = color / total;\n gl_FragColor.rgb /= gl_FragColor.a + 0.00001;\n}\n",{blur:{type:"1f",value:100},gradientBlur:{type:"1f",value:600},start:{type:"v2",value:{x:0,y:window.innerHeight/2}},end:{type:"v2",value:{x:600,y:window.innerHeight/2}},delta:{type:"v2",value:{x:30,y:30}},texSize:{type:"v2",value:{x:window.innerWidth,y:window.innerHeight}}}),this.updateDelta()}var n=t("../../core");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.updateDelta=function(){this.uniforms.delta.value.x=0,this.uniforms.delta.value.y=0},Object.defineProperties(i.prototype,{blur:{get:function(){return this.uniforms.blur.value},set:function(t){this.uniforms.blur.value=t}},gradientBlur:{get:function(){return this.uniforms.gradientBlur.value},set:function(t){this.uniforms.gradientBlur.value=t}},start:{get:function(){return this.uniforms.start.value},set:function(t){this.uniforms.start.value=t,this.updateDelta()}},end:{get:function(){return this.uniforms.end.value},set:function(t){this.uniforms.end.value=t,this.updateDelta()}}})},{"../../core":45}],132:[function(t,e,r){function i(){n.AbstractFilter.call(this),this.tiltShiftXFilter=new o,this.tiltShiftYFilter=new s}var n=t("../../core"),o=t("./TiltShiftXFilter"),s=t("./TiltShiftYFilter");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.applyFilter=function(t,e,r){var i=t.filterManager.getRenderTarget(!0);this.tiltShiftXFilter.applyFilter(t,e,i),this.tiltShiftYFilter.applyFilter(t,i,r),t.filterManager.returnRenderTarget(i)},Object.defineProperties(i.prototype,{blur:{get:function(){return this.tiltShiftXFilter.blur},set:function(t){this.tiltShiftXFilter.blur=this.tiltShiftYFilter.blur=t}},gradientBlur:{get:function(){return this.tiltShiftXFilter.gradientBlur},set:function(t){this.tiltShiftXFilter.gradientBlur=this.tiltShiftYFilter.gradientBlur=t}},start:{get:function(){return this.tiltShiftXFilter.start},set:function(t){this.tiltShiftXFilter.start=this.tiltShiftYFilter.start=t}},end:{get:function(){return this.tiltShiftXFilter.end},set:function(t){this.tiltShiftXFilter.end=this.tiltShiftYFilter.end=t}}})},{"../../core":45,"./TiltShiftXFilter":133,"./TiltShiftYFilter":134}],133:[function(t,e,r){function i(){n.call(this)}var n=t("./TiltShiftAxisFilter");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.updateDelta=function(){var t=this.uniforms.end.value.x-this.uniforms.start.value.x,e=this.uniforms.end.value.y-this.uniforms.start.value.y,r=Math.sqrt(t*t+e*e);this.uniforms.delta.value.x=t/r,this.uniforms.delta.value.y=e/r}},{"./TiltShiftAxisFilter":131}],134:[function(t,e,r){function i(){n.call(this)}var n=t("./TiltShiftAxisFilter");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.updateDelta=function(){var t=this.uniforms.end.value.x-this.uniforms.start.value.x,e=this.uniforms.end.value.y-this.uniforms.start.value.y,r=Math.sqrt(t*t+e*e);this.uniforms.delta.value.x=-e/r,this.uniforms.delta.value.y=t/r}},{"./TiltShiftAxisFilter":131}],135:[function(t,e,r){function i(){n.AbstractFilter.call(this,null,"precision mediump float;\n\nvarying vec2 vTextureCoord;\n\nuniform sampler2D uSampler;\nuniform float radius;\nuniform float angle;\nuniform vec2 offset;\n\nvoid main(void)\n{\n vec2 coord = vTextureCoord - offset;\n float dist = length(coord);\n\n if (dist < radius)\n {\n float ratio = (radius - dist) / radius;\n float angleMod = ratio * ratio * angle;\n float s = sin(angleMod);\n float c = cos(angleMod);\n coord = vec2(coord.x * c - coord.y * s, coord.x * s + coord.y * c);\n }\n\n gl_FragColor = texture2D(uSampler, coord+offset);\n}\n",{radius:{type:"1f",value:.5},angle:{type:"1f",value:5},offset:{type:"v2",value:{x:.5,y:.5}}})}var n=t("../../core");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i,Object.defineProperties(i.prototype,{offset:{get:function(){return this.uniforms.offset.value},set:function(t){this.uniforms.offset.value=t}},radius:{get:function(){return this.uniforms.radius.value},set:function(t){this.uniforms.radius.value=t}},angle:{get:function(){return this.uniforms.angle.value},set:function(t){this.uniforms.angle.value=t}}})},{"../../core":45}],136:[function(t,e,r){(function(r){t("./polyfill");var i=e.exports=t("./core");i.extras=t("./extras"),i.filters=t("./filters"),i.interaction=t("./interaction"),i.loaders=t("./loaders"),i.mesh=t("./mesh"),i.accessibility=t("./accessibility"),i.loader=new i.loaders.Loader,Object.assign(i,t("./deprecation")),r.PIXI=i}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{"./accessibility":37,"./core":45,"./deprecation":100,"./extras":107,"./filters":124,"./interaction":139,"./loaders":142,"./mesh":149,"./polyfill":154}],137:[function(t,e,r){function i(){this.global=new n.Point,this.target=null,this.originalEvent=null}var n=t("../core");i.prototype.constructor=i,e.exports=i,i.prototype.getLocalPosition=function(t,e,r){return t.worldTransform.applyInverse(r||this.global,e)}},{"../core":45}],138:[function(t,e,r){function i(t,e){e=e||{},this.renderer=t,this.autoPreventDefault=void 0!==e.autoPreventDefault?e.autoPreventDefault:!0,this.interactionFrequency=e.interactionFrequency||10,this.mouse=new o,this.eventData={stopped:!1,target:null,type:null,data:this.mouse,stopPropagation:function(){this.stopped=!0}},this.interactiveDataPool=[],this.interactionDOMElement=null,this.eventsAdded=!1,this.onMouseUp=this.onMouseUp.bind(this),this.processMouseUp=this.processMouseUp.bind(this),this.onMouseDown=this.onMouseDown.bind(this),this.processMouseDown=this.processMouseDown.bind(this),this.onMouseMove=this.onMouseMove.bind(this),this.processMouseMove=this.processMouseMove.bind(this),this.onMouseOut=this.onMouseOut.bind(this),this.processMouseOverOut=this.processMouseOverOut.bind(this),this.onTouchStart=this.onTouchStart.bind(this),this.processTouchStart=this.processTouchStart.bind(this),this.onTouchEnd=this.onTouchEnd.bind(this),this.processTouchEnd=this.processTouchEnd.bind(this),this.onTouchMove=this.onTouchMove.bind(this),this.processTouchMove=this.processTouchMove.bind(this),this.last=0,this.currentCursorStyle="inherit",this._tempPoint=new n.Point,this.resolution=1,this.setTargetElement(this.renderer.view,this.renderer.resolution)}var n=t("../core"),o=t("./InteractionData");Object.assign(n.DisplayObject.prototype,t("./interactiveTarget")),i.prototype.constructor=i,e.exports=i,i.prototype.setTargetElement=function(t,e){this.removeEvents(),this.interactionDOMElement=t,this.resolution=e||1,this.addEvents()},i.prototype.addEvents=function(){this.interactionDOMElement&&(n.ticker.shared.add(this.update,this),window.navigator.msPointerEnabled&&(this.interactionDOMElement.style["-ms-content-zooming"]="none",this.interactionDOMElement.style["-ms-touch-action"]="none"),window.document.addEventListener("mousemove",this.onMouseMove,!0),this.interactionDOMElement.addEventListener("mousedown",this.onMouseDown,!0),this.interactionDOMElement.addEventListener("mouseout",this.onMouseOut,!0),this.interactionDOMElement.addEventListener("touchstart",this.onTouchStart,!0),this.interactionDOMElement.addEventListener("touchend",this.onTouchEnd,!0),this.interactionDOMElement.addEventListener("touchmove",this.onTouchMove,!0),window.addEventListener("mouseup",this.onMouseUp,!0),this.eventsAdded=!0)},i.prototype.removeEvents=function(){this.interactionDOMElement&&(n.ticker.shared.remove(this.update),window.navigator.msPointerEnabled&&(this.interactionDOMElement.style["-ms-content-zooming"]="",this.interactionDOMElement.style["-ms-touch-action"]=""),window.document.removeEventListener("mousemove",this.onMouseMove,!0),this.interactionDOMElement.removeEventListener("mousedown",this.onMouseDown,!0),this.interactionDOMElement.removeEventListener("mouseout",this.onMouseOut,!0),this.interactionDOMElement.removeEventListener("touchstart",this.onTouchStart,!0),this.interactionDOMElement.removeEventListener("touchend",this.onTouchEnd,!0),this.interactionDOMElement.removeEventListener("touchmove",this.onTouchMove,!0),this.interactionDOMElement=null,window.removeEventListener("mouseup",this.onMouseUp,!0),this.eventsAdded=!1)},i.prototype.update=function(t){if(this._deltaTime+=t,!(this._deltaTime=0;h--)this.processInteractive(t,a[h],r,i,s)&&(o=!0,s=!1,a[h].interactive&&(i=!1));return n&&(i&&!o&&(e.hitArea?(e.worldTransform.applyInverse(t,this._tempPoint),o=e.hitArea.contains(this._tempPoint.x,this._tempPoint.y)):e.containsPoint&&(o=e.containsPoint(t))),e.interactive&&r(e,o)),o},i.prototype.onMouseDown=function(t){this.mouse.originalEvent=t,this.eventData.data=this.mouse,this.eventData.stopped=!1,this.mapPositionToPoint(this.mouse.global,t.clientX,t.clientY),this.autoPreventDefault&&this.mouse.originalEvent.preventDefault(),this.processInteractive(this.mouse.global,this.renderer._lastObjectRendered,this.processMouseDown,!0)},i.prototype.processMouseDown=function(t,e){var r=this.mouse.originalEvent,i=2===r.button||3===r.which;e&&(t[i?"_isRightDown":"_isLeftDown"]=!0,this.dispatchEvent(t,i?"rightdown":"mousedown",this.eventData))},i.prototype.onMouseUp=function(t){this.mouse.originalEvent=t,this.eventData.data=this.mouse,this.eventData.stopped=!1,this.mapPositionToPoint(this.mouse.global,t.clientX,t.clientY),this.processInteractive(this.mouse.global,this.renderer._lastObjectRendered,this.processMouseUp,!0)},i.prototype.processMouseUp=function(t,e){var r=this.mouse.originalEvent,i=2===r.button||3===r.which,n=i?"_isRightDown":"_isLeftDown";e?(this.dispatchEvent(t,i?"rightup":"mouseup",this.eventData),t[n]&&(t[n]=!1,this.dispatchEvent(t,i?"rightclick":"click",this.eventData))):t[n]&&(t[n]=!1,this.dispatchEvent(t,i?"rightupoutside":"mouseupoutside",this.eventData))},i.prototype.onMouseMove=function(t){this.mouse.originalEvent=t,this.eventData.data=this.mouse,this.eventData.stopped=!1,this.mapPositionToPoint(this.mouse.global,t.clientX,t.clientY),this.didMove=!0,this.cursor="inherit",this.processInteractive(this.mouse.global,this.renderer._lastObjectRendered,this.processMouseMove,!0),this.currentCursorStyle!==this.cursor&&(this.currentCursorStyle=this.cursor,this.interactionDOMElement.style.cursor=this.cursor)},i.prototype.processMouseMove=function(t,e){this.dispatchEvent(t,"mousemove",this.eventData),this.processMouseOverOut(t,e)},i.prototype.onMouseOut=function(t){this.mouse.originalEvent=t,this.eventData.stopped=!1,this.mapPositionToPoint(this.mouse.global,t.clientX,t.clientY),this.interactionDOMElement.style.cursor="inherit",this.mapPositionToPoint(this.mouse.global,t.clientX,t.clientY),this.processInteractive(this.mouse.global,this.renderer._lastObjectRendered,this.processMouseOverOut,!1)},i.prototype.processMouseOverOut=function(t,e){e?(t._over||(t._over=!0,this.dispatchEvent(t,"mouseover",this.eventData)),t.buttonMode&&(this.cursor=t.defaultCursor)):t._over&&(t._over=!1,this.dispatchEvent(t,"mouseout",this.eventData))},i.prototype.onTouchStart=function(t){this.autoPreventDefault&&t.preventDefault();for(var e=t.changedTouches,r=e.length,i=0;r>i;i++){var n=e[i],o=this.getTouchData(n);o.originalEvent=t,this.eventData.data=o,this.eventData.stopped=!1,this.processInteractive(o.global,this.renderer._lastObjectRendered,this.processTouchStart,!0),this.returnTouchData(o)}},i.prototype.processTouchStart=function(t,e){e&&(t._touchDown=!0,this.dispatchEvent(t,"touchstart",this.eventData))},i.prototype.onTouchEnd=function(t){this.autoPreventDefault&&t.preventDefault();for(var e=t.changedTouches,r=e.length,i=0;r>i;i++){var n=e[i],o=this.getTouchData(n);o.originalEvent=t,this.eventData.data=o,this.eventData.stopped=!1,this.processInteractive(o.global,this.renderer._lastObjectRendered,this.processTouchEnd,!0),this.returnTouchData(o)}},i.prototype.processTouchEnd=function(t,e){e?(this.dispatchEvent(t,"touchend",this.eventData),t._touchDown&&(t._touchDown=!1,this.dispatchEvent(t,"tap",this.eventData))):t._touchDown&&(t._touchDown=!1,this.dispatchEvent(t,"touchendoutside",this.eventData))},i.prototype.onTouchMove=function(t){this.autoPreventDefault&&t.preventDefault();for(var e=t.changedTouches,r=e.length,i=0;r>i;i++){var n=e[i],o=this.getTouchData(n);o.originalEvent=t,this.eventData.data=o,this.eventData.stopped=!1,this.processInteractive(o.global,this.renderer._lastObjectRendered,this.processTouchMove,!0),this.returnTouchData(o)}},i.prototype.processTouchMove=function(t,e){e=e,this.dispatchEvent(t,"touchmove",this.eventData)},i.prototype.getTouchData=function(t){var e=this.interactiveDataPool.pop();return e||(e=new o),e.identifier=t.identifier,this.mapPositionToPoint(e.global,t.clientX,t.clientY),navigator.isCocoonJS&&(e.global.x=e.global.x/this.resolution,e.global.y=e.global.y/this.resolution),t.globalX=e.global.x,t.globalY=e.global.y,e},i.prototype.returnTouchData=function(t){ -this.interactiveDataPool.push(t)},i.prototype.destroy=function(){this.removeEvents(),this.renderer=null,this.mouse=null,this.eventData=null,this.interactiveDataPool=null,this.interactionDOMElement=null,this.onMouseUp=null,this.processMouseUp=null,this.onMouseDown=null,this.processMouseDown=null,this.onMouseMove=null,this.processMouseMove=null,this.onMouseOut=null,this.processMouseOverOut=null,this.onTouchStart=null,this.processTouchStart=null,this.onTouchEnd=null,this.processTouchEnd=null,this.onTouchMove=null,this.processTouchMove=null,this._tempPoint=null},n.WebGLRenderer.registerPlugin("interaction",i),n.CanvasRenderer.registerPlugin("interaction",i)},{"../core":45,"./InteractionData":137,"./interactiveTarget":140}],139:[function(t,e,r){e.exports={InteractionData:t("./InteractionData"),InteractionManager:t("./InteractionManager"),interactiveTarget:t("./interactiveTarget")}},{"./InteractionData":137,"./InteractionManager":138,"./interactiveTarget":140}],140:[function(t,e,r){var i={interactive:!1,buttonMode:!1,interactiveChildren:!0,defaultCursor:"pointer",_over:!1,_touchDown:!1};e.exports=i},{}],141:[function(t,e,r){function i(t,e){var r={},i=t.data.getElementsByTagName("info")[0],n=t.data.getElementsByTagName("common")[0];r.font=i.getAttribute("face"),r.size=parseInt(i.getAttribute("size"),10),r.lineHeight=parseInt(n.getAttribute("lineHeight"),10),r.chars={};for(var a=t.data.getElementsByTagName("char"),h=0;hn;n++){var o=2*n;this._renderCanvasDrawTriangle(t,e,r,o,o+2,o+4)}},i.prototype._renderCanvasTriangles=function(t){for(var e=this.vertices,r=this.uvs,i=this.indices,n=i.length,o=0;n>o;o+=3){var s=2*i[o],a=2*i[o+1],h=2*i[o+2];this._renderCanvasDrawTriangle(t,e,r,s,a,h)}},i.prototype._renderCanvasDrawTriangle=function(t,e,r,i,n,o){var s=this._texture.baseTexture.source,a=this._texture.baseTexture.width,h=this._texture.baseTexture.height,u=e[i],l=e[n],c=e[o],p=e[i+1],d=e[n+1],f=e[o+1],v=r[i]*a,g=r[n]*a,m=r[o]*a,y=r[i+1]*h,x=r[n+1]*h,b=r[o+1]*h;if(this.canvasPadding>0){var _=this.canvasPadding/this.worldTransform.a,T=this.canvasPadding/this.worldTransform.d,E=(u+l+c)/3,S=(p+d+f)/3,w=u-E,C=p-S,A=Math.sqrt(w*w+C*C);u=E+w/A*(A+_),p=S+C/A*(A+T),w=l-E,C=d-S,A=Math.sqrt(w*w+C*C),l=E+w/A*(A+_),d=S+C/A*(A+T),w=c-E,C=f-S,A=Math.sqrt(w*w+C*C),c=E+w/A*(A+_),f=S+C/A*(A+T)}t.save(),t.beginPath(),t.moveTo(u,p),t.lineTo(l,d),t.lineTo(c,f),t.closePath(),t.clip();var M=v*x+y*m+g*b-x*m-y*g-v*b,R=u*x+y*c+l*b-x*c-y*l-u*b,O=v*l+u*m+g*c-l*m-u*g-v*c,D=v*x*c+y*l*m+u*g*b-u*x*m-y*g*c-v*l*b,P=p*x+y*f+d*b-x*f-y*d-p*b,F=v*d+p*m+g*f-d*m-p*g-v*f,L=v*x*f+y*d*m+p*g*b-p*x*m-y*g*f-v*d*b;t.transform(R/M,P/M,O/M,F/M,D/M,L/M),t.drawImage(s,0,0),t.restore()},i.prototype.renderMeshFlat=function(t){var e=this.context,r=t.vertices,i=r.length/2;e.beginPath();for(var n=1;i-2>n;n++){var o=2*n,s=r[o],a=r[o+2],h=r[o+4],u=r[o+1],l=r[o+3],c=r[o+5];e.moveTo(s,u),e.lineTo(a,l),e.lineTo(h,c)}e.fillStyle="#FF0000",e.fill(),e.closePath()},i.prototype._onTextureUpdate=function(){this.updateFrame=!0},i.prototype.getBounds=function(t){if(!this._currentBounds){for(var e=t||this.worldTransform,r=e.a,i=e.b,o=e.c,s=e.d,a=e.tx,h=e.ty,u=-(1/0),l=-(1/0),c=1/0,p=1/0,d=this.vertices,f=0,v=d.length;v>f;f+=2){var g=d[f],m=d[f+1],y=r*g+o*m+a,x=s*m+i*g+h;c=c>y?y:c,p=p>x?x:p,u=y>u?y:u,l=x>l?x:l}if(c===-(1/0)||l===1/0)return n.Rectangle.EMPTY;var b=this._bounds;b.x=c,b.width=u-c,b.y=p,b.height=l-p,this._currentBounds=b}return this._currentBounds},i.prototype.containsPoint=function(t){if(!this.getBounds().contains(t.x,t.y))return!1;this.worldTransform.applyInverse(t,o);var e,r,n=this.vertices,a=s.points;if(this.drawMode===i.DRAW_MODES.TRIANGLES){var h=this.indices;for(r=this.indices.length,e=0;r>e;e+=3){var u=2*h[e],l=2*h[e+1],c=2*h[e+2];if(a[0]=n[u],a[1]=n[u+1],a[2]=n[l],a[3]=n[l+1],a[4]=n[c],a[5]=n[c+1],s.contains(o.x,o.y))return!0}}else for(r=n.length,e=0;r>e;e+=6)if(a[0]=n[e],a[1]=n[e+1],a[2]=n[e+2],a[3]=n[e+3],a[4]=n[e+4],a[5]=n[e+5],s.contains(o.x,o.y))return!0;return!1},i.DRAW_MODES={TRIANGLE_MESH:0,TRIANGLES:1}},{"../core":45}],147:[function(t,e,r){function i(t,e,r){n.call(this,t),this._ready=!0,this.segmentsX=e||10,this.segmentsY=r||10,this.drawMode=n.DRAW_MODES.TRIANGLES,this.refresh()}var n=t("./Mesh");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.refresh=function(){var t=this.segmentsX*this.segmentsY,e=[],r=[],i=[],n=[],o=this.texture,s=this.segmentsX-1,a=this.segmentsY-1,h=0,u=o.width/s,l=o.height/a;for(h=0;t>h;h++){var c=h%this.segmentsX,p=h/this.segmentsX|0;e.push(c*u,p*l),i.push(o._uvs.x0+(o._uvs.x1-o._uvs.x0)*(c/(this.segmentsX-1)),o._uvs.y0+(o._uvs.y3-o._uvs.y0)*(p/(this.segmentsY-1)))}var d=s*a;for(h=0;d>h;h++){var f=h%s,v=h/s|0,g=v*this.segmentsX+f,m=v*this.segmentsX+f+1,y=(v+1)*this.segmentsX+f,x=(v+1)*this.segmentsX+f+1;n.push(g,m,y),n.push(m,x,y)}this.vertices=new Float32Array(e),this.uvs=new Float32Array(i),this.colors=new Float32Array(r),this.indices=new Uint16Array(n)},i.prototype._onTextureUpdate=function(){n.prototype._onTextureUpdate.call(this),this._ready&&this.refresh()}},{"./Mesh":146}],148:[function(t,e,r){function i(t,e){n.call(this,t),this.points=e,this.vertices=new Float32Array(4*e.length),this.uvs=new Float32Array(4*e.length),this.colors=new Float32Array(2*e.length),this.indices=new Uint16Array(2*e.length),this._ready=!0,this.refresh()}var n=t("./Mesh"),o=t("../core");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.refresh=function(){var t=this.points;if(!(t.length<1)&&this._texture._uvs){var e=this.uvs,r=this.indices,i=this.colors,n=this._texture._uvs,s=new o.Point(n.x0,n.y0),a=new o.Point(n.x2-n.x0,n.y2-n.y0);e[0]=0+s.x,e[1]=0+s.y,e[2]=0+s.x,e[3]=1*a.y+s.y,i[0]=1,i[1]=1,r[0]=0,r[1]=1;for(var h,u,l,c=t.length,p=1;c>p;p++)h=t[p],u=4*p,l=p/(c-1),e[u]=l*a.x+s.x,e[u+1]=0+s.y,e[u+2]=l*a.x+s.x,e[u+3]=1*a.y+s.y,u=2*p,i[u]=1,i[u+1]=1,u=2*p,r[u]=u,r[u+1]=u+1;this.dirty=!0}},i.prototype._onTextureUpdate=function(){n.prototype._onTextureUpdate.call(this),this._ready&&this.refresh()},i.prototype.updateTransform=function(){var t=this.points;if(!(t.length<1)){for(var e,r,i,n,o,s,a=t[0],h=0,u=0,l=this.vertices,c=t.length,p=0;c>p;p++)r=t[p],i=4*p,e=p1&&(n=1),o=Math.sqrt(h*h+u*u),s=this._texture.height/2,h/=o,u/=o,h*=s,u*=s,l[i]=r.x+h,l[i+1]=r.y+u,l[i+2]=r.x-h,l[i+3]=r.y-u,a=r;this.containerUpdateTransform()}}},{"../core":45,"./Mesh":146}],149:[function(t,e,r){e.exports={Mesh:t("./Mesh"),Plane:t("./Plane"),Rope:t("./Rope"),MeshRenderer:t("./webgl/MeshRenderer"),MeshShader:t("./webgl/MeshShader")}},{"./Mesh":146,"./Plane":147,"./Rope":148,"./webgl/MeshRenderer":150,"./webgl/MeshShader":151}],150:[function(t,e,r){function i(t){n.ObjectRenderer.call(this,t),this.indices=new Uint16Array(15e3);for(var e=0,r=0;15e3>e;e+=6,r+=4)this.indices[e+0]=r+0,this.indices[e+1]=r+1,this.indices[e+2]=r+2,this.indices[e+3]=r+0,this.indices[e+4]=r+2,this.indices[e+5]=r+3;this.currentShader=null}var n=t("../../core"),o=t("../Mesh");i.prototype=Object.create(n.ObjectRenderer.prototype),i.prototype.constructor=i,e.exports=i,n.WebGLRenderer.registerPlugin("mesh",i),i.prototype.onContextChange=function(){},i.prototype.render=function(t){t._vertexBuffer||this._initWebGL(t);var e=this.renderer,r=e.gl,i=t._texture.baseTexture,n=t.shader,s=t.drawMode===o.DRAW_MODES.TRIANGLE_MESH?r.TRIANGLE_STRIP:r.TRIANGLES;e.blendModeManager.setBlendMode(t.blendMode),n=n?n.shaders[r.id]||n.getShader(e):e.shaderManager.plugins.meshShader,this.renderer.shaderManager.setShader(n),n.uniforms.translationMatrix.value=t.worldTransform.toArray(!0),n.uniforms.projectionMatrix.value=e.currentRenderTarget.projectionMatrix.toArray(!0),n.uniforms.alpha.value=t.worldAlpha,n.syncUniforms(),t.dirty?(t.dirty=!1,r.bindBuffer(r.ARRAY_BUFFER,t._vertexBuffer),r.bufferData(r.ARRAY_BUFFER,t.vertices,r.STATIC_DRAW),r.vertexAttribPointer(n.attributes.aVertexPosition,2,r.FLOAT,!1,0,0),r.bindBuffer(r.ARRAY_BUFFER,t._uvBuffer),r.bufferData(r.ARRAY_BUFFER,t.uvs,r.STATIC_DRAW),r.vertexAttribPointer(n.attributes.aTextureCoord,2,r.FLOAT,!1,0,0),r.activeTexture(r.TEXTURE0),i._glTextures[r.id]?r.bindTexture(r.TEXTURE_2D,i._glTextures[r.id]):this.renderer.updateTexture(i),r.bindBuffer(r.ELEMENT_ARRAY_BUFFER,t._indexBuffer),r.bufferData(r.ELEMENT_ARRAY_BUFFER,t.indices,r.STATIC_DRAW)):(r.bindBuffer(r.ARRAY_BUFFER,t._vertexBuffer),r.bufferSubData(r.ARRAY_BUFFER,0,t.vertices),r.vertexAttribPointer(n.attributes.aVertexPosition,2,r.FLOAT,!1,0,0),r.bindBuffer(r.ARRAY_BUFFER,t._uvBuffer),r.vertexAttribPointer(n.attributes.aTextureCoord,2,r.FLOAT,!1,0,0),r.activeTexture(r.TEXTURE0),i._glTextures[r.id]?r.bindTexture(r.TEXTURE_2D,i._glTextures[r.id]):this.renderer.updateTexture(i),r.bindBuffer(r.ELEMENT_ARRAY_BUFFER,t._indexBuffer),r.bufferSubData(r.ELEMENT_ARRAY_BUFFER,0,t.indices)),r.drawElements(s,t.indices.length,r.UNSIGNED_SHORT,0)},i.prototype._initWebGL=function(t){var e=this.renderer.gl;t._vertexBuffer=e.createBuffer(),t._indexBuffer=e.createBuffer(),t._uvBuffer=e.createBuffer(),e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferData(e.ARRAY_BUFFER,t.vertices,e.DYNAMIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferData(e.ARRAY_BUFFER,t.uvs,e.STATIC_DRAW),t.colors&&(t._colorBuffer=e.createBuffer(),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.bufferData(e.ARRAY_BUFFER,t.colors,e.STATIC_DRAW)),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer),e.bufferData(e.ELEMENT_ARRAY_BUFFER,t.indices,e.STATIC_DRAW)},i.prototype.flush=function(){},i.prototype.start=function(){this.currentShader=null},i.prototype.destroy=function(){n.ObjectRenderer.prototype.destroy.call(this)}},{"../../core":45,"../Mesh":146}],151:[function(t,e,r){function i(t){n.Shader.call(this,t,["precision lowp float;","attribute vec2 aVertexPosition;","attribute vec2 aTextureCoord;","uniform mat3 translationMatrix;","uniform mat3 projectionMatrix;","varying vec2 vTextureCoord;","void main(void){"," gl_Position = vec4((projectionMatrix * translationMatrix * vec3(aVertexPosition, 1.0)).xy, 0.0, 1.0);"," vTextureCoord = aTextureCoord;","}"].join("\n"),["precision lowp float;","varying vec2 vTextureCoord;","uniform float alpha;","uniform sampler2D uSampler;","void main(void){"," gl_FragColor = texture2D(uSampler, vTextureCoord) * alpha ;","}"].join("\n"),{alpha:{type:"1f",value:0},translationMatrix:{type:"mat3",value:new Float32Array(9)},projectionMatrix:{type:"mat3",value:new Float32Array(9)}},{aVertexPosition:0,aTextureCoord:0})}var n=t("../../core");i.prototype=Object.create(n.Shader.prototype),i.prototype.constructor=i,e.exports=i,n.ShaderManager.registerPlugin("meshShader",i)},{"../../core":45}],152:[function(t,e,r){Math.sign||(Math.sign=function(t){return t=+t,0===t||isNaN(t)?t:t>0?1:-1})},{}],153:[function(t,e,r){Object.assign||(Object.assign=t("object-assign"))},{"object-assign":26}],154:[function(t,e,r){t("./Object.assign"),t("./requestAnimationFrame"),t("./Math.sign")},{"./Math.sign":152,"./Object.assign":153,"./requestAnimationFrame":155}],155:[function(t,e,r){(function(t){if(Date.now&&Date.prototype.getTime||(Date.now=function(){return(new Date).getTime()}),!t.performance||!t.performance.now){var e=Date.now();t.performance||(t.performance={}),t.performance.now=function(){return Date.now()-e}}for(var r=Date.now(),i=["ms","moz","webkit","o"],n=0;ni&&(i=0),r=e,setTimeout(function(){r=Date.now(),t(performance.now())},i)}),t.cancelAnimationFrame||(t.cancelAnimationFrame=function(t){clearTimeout(t)})}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{}]},{},[136])(136)}); +!function(t){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=t();else if("function"==typeof define&&define.amd)define([],t);else{var e;e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:this,e.PIXI=t()}}(function(){var t;return function e(t,r,i){function n(s,a){if(!r[s]){if(!t[s]){var h="function"==typeof require&&require;if(!a&&h)return h(s,!0);if(o)return o(s,!0);var u=new Error("Cannot find module '"+s+"'");throw u.code="MODULE_NOT_FOUND",u}var l=r[s]={exports:{}};t[s][0].call(l.exports,function(e){var r=t[s][1][e];return n(r?r:e)},l,l.exports,e,t,r,i)}return r[s].exports}for(var o="function"==typeof require&&require,s=0;s=t.byteLength?i.bufferSubData(this.type,e,t):i.bufferData(this.type,t,this.drawType),this.data=t},n.prototype.bind=function(){var t=this.gl;t.bindBuffer(this.type,this.buffer)},n.createVertexBuffer=function(t,e,r){return new n(t,t.ARRAY_BUFFER,e,r)},n.createIndexBuffer=function(t,e,r){return new n(t,t.ELEMENT_ARRAY_BUFFER,e,r)},n.create=function(t,e,r,i){return new n(t,e,i)},e.exports=n},{}],3:[function(t,e,r){var i=t("./GLTexture"),n=function(t,e,r){this.gl=t,this.framebuffer=t.createFramebuffer(),this.stencil=null,this.texture=null,this.width=e||100,this.height=r||100};n.prototype.enableTexture=function(t){var e=this.gl;this.texture=t||new i(e),this.texture.bind(),this.bind(),e.framebufferTexture2D(e.FRAMEBUFFER,e.COLOR_ATTACHMENT0,e.TEXTURE_2D,this.texture.texture,0)},n.prototype.enableStencil=function(){if(!this.stencil){var t=this.gl;this.stencil=t.createRenderbuffer(),t.bindRenderbuffer(t.RENDERBUFFER,this.stencil),t.framebufferRenderbuffer(t.FRAMEBUFFER,t.DEPTH_STENCIL_ATTACHMENT,t.RENDERBUFFER,this.stencil),t.renderbufferStorage(t.RENDERBUFFER,t.DEPTH_STENCIL,this.width,this.height)}},n.prototype.clear=function(t,e,r,i){this.bind();var n=this.gl;n.clearColor(t,e,r,i),n.clear(n.COLOR_BUFFER_BIT)},n.prototype.bind=function(){var t=this.gl;t.bindFramebuffer(t.FRAMEBUFFER,this.framebuffer)},n.prototype.unbind=function(){gl.bindFramebuffer(gl.FRAMEBUFFER,null)},n.prototype.resize=function(t,e){var r=this.gl;this.width=t,this.height=e,this.texture&&this.texture.uploadData(null,t,e),this.stencil&&(r.bindRenderbuffer(r.RENDERBUFFER,this.stencil),r.renderbufferStorage(r.RENDERBUFFER,r.DEPTH_STENCIL,t,e))},n.prototype.destroy=function(){var t=this.gl;t.deleteFramebuffer(this.framebuffer)},n.createRGBA=function(t,e,r,o){var s=i.fromData(t,null,e,r);s.enableNearestScaling(),s.enableWrapClamp();var a=new n(t,e,r);return a.enableTexture(s),a},n.createFloat32=function(t,e,r,o){var s=new i.fromData(t,o,e,r);s.enableNearestScaling(),s.enableWrapClamp();var a=new n(t,e,r);return a.enableTexture(s),a},e.exports=n},{"./GLTexture":5}],4:[function(t,e,r){var i=t("./shader/compileProgram"),n=t("./shader/extractAttributes"),o=t("./shader/extractUniforms"),s=t("./shader/generateUniformAccessObject"),a=function(t,e,r){this.gl=t,this.program=i(t,e,r),this.attributes=n(t,this.program);var a=o(t,this.program);this.uniforms=s(t,a)};a.prototype.bind=function(){this.gl.useProgram(this.program)},a.prototype.destroy=function(){this.gl},e.exports=a},{"./shader/compileProgram":9,"./shader/extractAttributes":11,"./shader/extractUniforms":12,"./shader/generateUniformAccessObject":13}],5:[function(t,e,r){var i=function(t,e,r,i,n){this.gl=t,this.texture=t.createTexture(),this.mipmap=!1,this.premultiplyAlpha=!1,this.width=e||0,this.height=r||0,this.format=i||t.RGBA,this.type=n||t.UNSIGNED_BYTE};i.prototype.upload=function(t){this.bind();var e=this.gl;this.width=t.width,this.height=t.height,e.pixelStorei(e.UNPACK_PREMULTIPLY_ALPHA_WEBGL,this.premultiplyAlpha),e.texImage2D(e.TEXTURE_2D,0,this.format,this.format,this.type,t)};var n=!1;i.prototype.uploadData=function(t,e,r){if(this.bind(),this.width=e||this.width,this.height=r||this.height,t instanceof Float32Array){if(!n){var i=gl.getExtension("OES_texture_float");if(!i)throw new Error("floating point textures not available");n=!0}this.type=gl.FLOAT}else this.type=gl.UNSIGNED_BYTE;gl.pixelStorei(gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL,this.premultiplyAlpha),gl.texImage2D(gl.TEXTURE_2D,0,this.format,this.width,this.height,0,this.format,this.type,t||null)},i.prototype.bind=function(t){var e=this.gl;void 0!==t&&e.activeTexture(e.TEXTURE0+t),e.bindTexture(e.TEXTURE_2D,this.texture)},i.prototype.unbind=function(){var t=this.gl;t.bindTexture(t.TEXTURE_2D,null)},i.prototype.minFilter=function(t){var e=this.gl;this.bind(),this.mipmap?e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MIN_FILTER,t?e.LINEAR_MIPMAP_LINEAR:e.NEAREST_MIPMAP_NEAREST):e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MIN_FILTER,t?e.LINEAR:e.NEAREST)},i.prototype.magFilter=function(t){var e=this.gl;this.bind(),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MAG_FILTER,t?e.LINEAR:e.NEAREST)},i.prototype.enableMipmap=function(){this.bind(),this.mipmap=!0,gl.generateMipmap(gl.TEXTURE_2D)},i.prototype.enableLinearScaling=function(){this.minFilter(!0),this.magFilter(!0)},i.prototype.enableNearestScaling=function(){this.minFilter(!1),this.magFilter(!1)},i.prototype.enableWrapClamp=function(){var t=this.gl;this.bind(),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_WRAP_S,t.CLAMP_TO_EDGE),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_WRAP_T,t.CLAMP_TO_EDGE)},i.prototype.enableWrapRepeat=function(){var t=this.gl;this.bind(),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_WRAP_S,t.REPEAT),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_WRAP_T,t.REPEAT)},i.prototype.destroy=function(){var t=this.gl;t.deleteTexture(this.texture)},i.fromSource=function(t,e,r){var n=new i(t);return n.premultiplyAlpha=r||!1,n.upload(e),n},i.fromData=function(t,e,r,n){var o=new i(t);return o.uploadData(e,r,n),o},e.exports=i},{}],6:[function(t,e,r){function i(t){this.nativeVaoExtension=t.getExtension("OES_vertex_array_object")||t.getExtension("MOZ_OES_vertex_array_object")||t.getExtension("WEBKIT_OES_vertex_array_object"),this.nativeVaoExtension&&(this.nativeVao=this.nativeVaoExtension.createVertexArrayOES()),this.gl=t,this.attributes=[],this.indexBuffer=null,this.dirty=!1}i.prototype.constructor=i,e.exports=i,i.prototype.bind=function(){this.nativeVao?(this.nativeVaoExtension.bindVertexArrayOES(this.nativeVao),this.dirty&&(this.dirty=!1,this.activate())):this.activate()},i.prototype.unbind=function(){this.nativeVao&&this.nativeVaoExtension.bindVertexArrayOES(null)},i.prototype.activate=function(){for(var t=this.gl,e=0;es;s++){var a=t.getActiveAttrib(e,s),h=i(t,a.type);r[a.name]={type:h,size:n(h),location:t.getAttribLocation(e,a.name),pointer:function(e,r,i,n){t.vertexAttribPointer(this.location,this.size,e||t.FLOAT,r||!1,i||0,n||0)}}}return r};e.exports=o},{"./mapSize":14,"./mapType":15}],12:[function(t,e,r){var i=t("./mapType"),n=t("./defaultValue"),o=function(t,e){for(var r={},o=t.getProgramParameter(e,t.ACTIVE_UNIFORMS),s=0;o>s;s++){var a=t.getActiveUniform(e,s),h=a.name.replace(/\[.*?\]/,""),u=i(t,a.type);r[h]={type:u,size:a.size,location:t.getUniformLocation(e,h),value:n(u,a.size)}}return r};e.exports=o},{"./defaultValue":10,"./mapType":15}],13:[function(t,e,r){var i=function(t,e){var r={data:{}};r.gl=t;for(var i=Object.keys(e),a=0;a=0&&t.length%1===0}function c(t,e){for(var r=-1,i=t.length;++ri?i:null}):(r=X(t),e=r.length,function(){return i++,e>i?r[i]:null})}function y(t,e){return e=null==e?t.length-1:+e,function(){for(var r=Math.max(arguments.length-e,0),i=Array(r),n=0;r>n;n++)i[n]=arguments[n+e];switch(e){case 0:return t.call(this,i);case 1:return t.call(this,arguments[0],i)}}}function x(t){return function(e,r,i){return t(e,i)}}function b(t){return function(e,r,i){i=u(i||n),e=e||[];var o=m(e);if(0>=t)return i(null);var s=!1,a=0,l=!1;!function c(){if(s&&0>=a)return i(null);for(;t>a&&!l;){var n=o();if(null===n)return s=!0,void(0>=a&&i(null));a+=1,r(e[n],n,h(function(t){a-=1,t?(i(t),l=!0):c()}))}}()}}function _(t){return function(e,r,i){return t(N.eachOf,e,r,i)}}function T(t){return function(e,r,i,n){return t(b(r),e,i,n)}}function E(t){return function(e,r,i){return t(N.eachOfSeries,e,r,i)}}function S(t,e,r,i){i=u(i||n),e=e||[];var o=l(e)?[]:{};t(e,function(t,e,i){r(t,function(t,r){o[e]=r,i(t)})},function(t){i(t,o)})}function w(t,e,r,i){var n=[];t(e,function(t,e,i){r(t,function(r){r&&n.push({index:e,value:t}),i()})},function(){i(p(n.sort(function(t,e){return t.index-e.index}),function(t){return t.value}))})}function C(t,e,r,i){w(t,e,function(t,e){r(t,function(t){e(!t)})},i)}function A(t,e,r){return function(i,n,o,s){function a(){s&&s(r(!1,void 0))}function h(t,i,n){return s?void o(t,function(i){s&&e(i)&&(s(r(!0,t)),s=o=!1),n()}):n()}arguments.length>3?t(i,n,h,a):(s=o,o=n,t(i,h,a))}}function M(t,e){return e}function R(t,e,r){r=r||n;var i=l(e)?[]:{};t(e,function(t,e,r){t(y(function(t,n){n.length<=1&&(n=n[0]),i[e]=n,r(t)}))},function(t){r(t,i)})}function O(t,e,r,i){var n=[];t(e,function(t,e,i){r(t,function(t,e){n=n.concat(e||[]),i(t)})},function(t){i(t,n)})}function P(t,e,r){function i(t,e,r,i){if(null!=i&&"function"!=typeof i)throw new Error("task callback must be a function");return t.started=!0,j(e)||(e=[e]),0===e.length&&t.idle()?N.setImmediate(function(){t.drain()}):(c(e,function(e){var o={data:e,callback:i||n};r?t.tasks.unshift(o):t.tasks.push(o),t.tasks.length===t.concurrency&&t.saturated()}),void N.setImmediate(t.process))}function o(t,e){return function(){s-=1;var r=!1,i=arguments;c(e,function(t){c(a,function(e,i){e!==t||r||(a.splice(i,1),r=!0)}),t.callback.apply(t,i)}),t.tasks.length+s===0&&t.drain(),t.process()}}if(null==e)e=1;else if(0===e)throw new Error("Concurrency must not be zero");var s=0,a=[],u={tasks:[],concurrency:e,payload:r,saturated:n,empty:n,drain:n,started:!1,paused:!1,push:function(t,e){i(u,t,!1,e)},kill:function(){u.drain=n,u.tasks=[]},unshift:function(t,e){i(u,t,!0,e)},process:function(){if(!u.paused&&s=e;e++)N.setImmediate(u.process)}}};return u}function D(t){return y(function(e,r){e.apply(null,r.concat([y(function(e,r){"object"==typeof console&&(e?console.error&&console.error(e):console[t]&&c(r,function(e){console[t](e)}))})]))})}function F(t){return function(e,r,i){t(d(e),r,i)}}function L(t){return y(function(e,r){var i=y(function(r){var i=this,n=r.pop();return t(e,function(t,e,n){t.apply(i,r.concat([n]))},n)});return r.length?i.apply(this,r):i})}function B(t){return y(function(e){var r=e.pop();e.push(function(){var t=arguments;i?N.setImmediate(function(){r.apply(null,t)}):r.apply(null,t)});var i=!0;t.apply(this,e),i=!1})}var I,N={},U="object"==typeof self&&self.self===self&&self||"object"==typeof i&&i.global===i&&i||this;null!=U&&(I=U.async),N.noConflict=function(){return U.async=I,N};var k=Object.prototype.toString,j=Array.isArray||function(t){return"[object Array]"===k.call(t)},G=function(t){var e=typeof t;return"function"===e||"object"===e&&!!t},X=Object.keys||function(t){var e=[];for(var r in t)t.hasOwnProperty(r)&&e.push(r);return e},Y="function"==typeof setImmediate&&setImmediate,z=Y?function(t){Y(t)}:function(t){setTimeout(t,0)};"object"==typeof e&&"function"==typeof e.nextTick?N.nextTick=e.nextTick:N.nextTick=z,N.setImmediate=Y?z:N.nextTick,N.forEach=N.each=function(t,e,r){return N.eachOf(t,x(e),r)},N.forEachSeries=N.eachSeries=function(t,e,r){return N.eachOfSeries(t,x(e),r)},N.forEachLimit=N.eachLimit=function(t,e,r,i){return b(e)(t,x(r),i)},N.forEachOf=N.eachOf=function(t,e,r){function i(t){a--,t?r(t):null===o&&0>=a&&r(null)}r=u(r||n),t=t||[];for(var o,s=m(t),a=0;null!=(o=s());)a+=1,e(t[o],o,h(i));0===a&&r(null)},N.forEachOfSeries=N.eachOfSeries=function(t,e,r){function i(){var n=!0;return null===s?r(null):(e(t[s],s,h(function(t){if(t)r(t);else{if(s=o(),null===s)return r(null);n?N.setImmediate(i):i()}})),void(n=!1))}r=u(r||n),t=t||[];var o=m(t),s=o();i()},N.forEachOfLimit=N.eachOfLimit=function(t,e,r,i){b(e)(t,r,i)},N.map=_(S),N.mapSeries=E(S),N.mapLimit=T(S),N.inject=N.foldl=N.reduce=function(t,e,r,i){N.eachOfSeries(t,function(t,i,n){r(e,t,function(t,r){e=r,n(t)})},function(t){i(t,e)})},N.foldr=N.reduceRight=function(t,e,r,i){var n=p(t,o).reverse();N.reduce(n,e,r,i)},N.transform=function(t,e,r,i){3===arguments.length&&(i=r,r=e,e=j(t)?[]:{}),N.eachOf(t,function(t,i,n){r(e,t,i,n)},function(t){i(t,e)})},N.select=N.filter=_(w),N.selectLimit=N.filterLimit=T(w),N.selectSeries=N.filterSeries=E(w),N.reject=_(C),N.rejectLimit=T(C),N.rejectSeries=E(C),N.any=N.some=A(N.eachOf,s,o),N.someLimit=A(N.eachOfLimit,s,o),N.all=N.every=A(N.eachOf,a,a),N.everyLimit=A(N.eachOfLimit,a,a),N.detect=A(N.eachOf,o,M),N.detectSeries=A(N.eachOfSeries,o,M),N.detectLimit=A(N.eachOfLimit,o,M),N.sortBy=function(t,e,r){function i(t,e){var r=t.criteria,i=e.criteria;return i>r?-1:r>i?1:0}N.map(t,function(t,r){e(t,function(e,i){e?r(e):r(null,{value:t,criteria:i})})},function(t,e){return t?r(t):void r(null,p(e.sort(i),function(t){return t.value}))})},N.auto=function(t,e,r){function i(t){d.unshift(t)}function o(t){var e=g(d,t);e>=0&&d.splice(e,1)}function s(){h--,c(d.slice(0),function(t){t()})}r||(r=e,e=null),r=u(r||n);var a=X(t),h=a.length;if(!h)return r(null);e||(e=h);var l={},p=0,d=[];i(function(){h||r(null,l)}),c(a,function(n){function a(){return e>p&&f(m,function(t,e){return t&&l.hasOwnProperty(e)},!0)&&!l.hasOwnProperty(n)}function h(){a()&&(p++,o(h),c[c.length-1](d,l))}for(var u,c=j(t[n])?t[n]:[t[n]],d=y(function(t,e){if(p--,e.length<=1&&(e=e[0]),t){var i={};v(l,function(t,e){i[e]=t}),i[n]=e,r(t,i)}else l[n]=e,N.setImmediate(s)}),m=c.slice(0,c.length-1),x=m.length;x--;){if(!(u=t[m[x]]))throw new Error("Has inexistant dependency");if(j(u)&&g(u,n)>=0)throw new Error("Has cyclic dependencies")}a()?(p++,c[c.length-1](d,l)):i(h)})},N.retry=function(t,e,r){function i(t,e){if("number"==typeof e)t.times=parseInt(e,10)||o;else{if("object"!=typeof e)throw new Error("Unsupported argument type for 'times': "+typeof e);t.times=parseInt(e.times,10)||o,t.interval=parseInt(e.interval,10)||s}}function n(t,e){function r(t,r){return function(i){t(function(t,e){i(!t||r,{err:t,result:e})},e)}}function i(t){return function(e){setTimeout(function(){e(null)},t)}}for(;h.times;){var n=!(h.times-=1);a.push(r(h.task,n)),!n&&h.interval>0&&a.push(i(h.interval))}N.series(a,function(e,r){r=r[r.length-1],(t||h.callback)(r.err,r.result)})}var o=5,s=0,a=[],h={times:o,interval:s},u=arguments.length;if(1>u||u>3)throw new Error("Invalid arguments - must be either (task), (task, callback), (times, task) or (times, task, callback)");return 2>=u&&"function"==typeof t&&(r=e,e=t),"function"!=typeof t&&i(h,t),h.callback=r,h.task=e,h.callback?n():n},N.waterfall=function(t,e){function r(t){return y(function(i,n){if(i)e.apply(null,[i].concat(n));else{var o=t.next();o?n.push(r(o)):n.push(e),B(t).apply(null,n)}})}if(e=u(e||n),!j(t)){var i=new Error("First argument to waterfall must be an array of functions");return e(i)}return t.length?void r(N.iterator(t))():e()},N.parallel=function(t,e){R(N.eachOf,t,e)},N.parallelLimit=function(t,e,r){R(b(e),t,r)},N.series=function(t,e){R(N.eachOfSeries,t,e)},N.iterator=function(t){function e(r){function i(){return t.length&&t[r].apply(null,arguments),i.next()}return i.next=function(){return ri;){var o=i+(n-i+1>>>1);r(e,t[o])>=0?i=o:n=o-1}return i}function o(t,e,o,s){if(null!=s&&"function"!=typeof s)throw new Error("task callback must be a function");return t.started=!0,j(e)||(e=[e]),0===e.length?N.setImmediate(function(){t.drain()}):void c(e,function(e){var a={data:e,priority:o,callback:"function"==typeof s?s:n};t.tasks.splice(i(t.tasks,a,r)+1,0,a),t.tasks.length===t.concurrency&&t.saturated(),N.setImmediate(t.process)})}var s=N.queue(t,e);return s.push=function(t,e,r){o(s,t,e,r)},delete s.unshift,s},N.cargo=function(t,e){return P(t,1,e)},N.log=D("log"),N.dir=D("dir"),N.memoize=function(t,e){var r={},i={};e=e||o;var n=y(function(n){var o=n.pop(),s=e.apply(null,n);s in r?N.setImmediate(function(){o.apply(null,r[s])}):s in i?i[s].push(o):(i[s]=[o],t.apply(null,n.concat([y(function(t){r[s]=t;var e=i[s];delete i[s];for(var n=0,o=e.length;o>n;n++)e[n].apply(null,t)})])))});return n.memo=r,n.unmemoized=t,n},N.unmemoize=function(t){return function(){return(t.unmemoized||t).apply(null,arguments)}},N.times=F(N.map),N.timesSeries=F(N.mapSeries),N.timesLimit=function(t,e,r,i){return N.mapLimit(d(t),e,r,i)},N.seq=function(){var t=arguments;return y(function(e){var r=this,i=e[e.length-1];"function"==typeof i?e.pop():i=n,N.reduce(t,e,function(t,e,i){e.apply(r,t.concat([y(function(t,e){i(t,e)})]))},function(t,e){i.apply(r,[t].concat(e))})})},N.compose=function(){return N.seq.apply(null,Array.prototype.reverse.call(arguments))},N.applyEach=L(N.eachOf),N.applyEachSeries=L(N.eachOfSeries),N.forever=function(t,e){function r(t){return t?i(t):void o(r)}var i=h(e||n),o=B(t);r()},N.ensureAsync=B,N.constant=y(function(t){var e=[null].concat(t);return function(t){return t.apply(this,e)}}),N.wrapSync=N.asyncify=function(t){return y(function(e){var r,i=e.pop();try{r=t.apply(this,e)}catch(n){return i(n)}G(r)&&"function"==typeof r.then?r.then(function(t){i(null,t)})["catch"](function(t){i(t.message?t:new Error(t))}):i(null,r)})},"object"==typeof r&&r.exports?r.exports=N:"function"==typeof t&&t.amd?t([],function(){return N}):U.async=N}()}).call(this,e("_process"),"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{_process:18}],17:[function(t,e,r){(function(t){function e(t,e){for(var r=0,i=t.length-1;i>=0;i--){var n=t[i];"."===n?t.splice(i,1):".."===n?(t.splice(i,1),r++):r&&(t.splice(i,1),r--)}if(e)for(;r--;r)t.unshift("..");return t}function i(t,e){if(t.filter)return t.filter(e);for(var r=[],i=0;i=-1&&!n;o--){var s=o>=0?arguments[o]:t.cwd();if("string"!=typeof s)throw new TypeError("Arguments to path.resolve must be strings");s&&(r=s+"/"+r,n="/"===s.charAt(0))}return r=e(i(r.split("/"),function(t){return!!t}),!n).join("/"),(n?"/":"")+r||"."},r.normalize=function(t){var n=r.isAbsolute(t),o="/"===s(t,-1);return t=e(i(t.split("/"),function(t){return!!t}),!n).join("/"),t||n||(t="."),t&&o&&(t+="/"),(n?"/":"")+t},r.isAbsolute=function(t){return"/"===t.charAt(0)},r.join=function(){var t=Array.prototype.slice.call(arguments,0);return r.normalize(i(t,function(t,e){if("string"!=typeof t)throw new TypeError("Arguments to path.join must be strings");return t}).join("/"))},r.relative=function(t,e){function i(t){for(var e=0;e=0&&""===t[r];r--);return e>r?[]:t.slice(e,r-e+1)}t=r.resolve(t).substr(1),e=r.resolve(e).substr(1);for(var n=i(t.split("/")),o=i(e.split("/")),s=Math.min(n.length,o.length),a=s,h=0;s>h;h++)if(n[h]!==o[h]){a=h;break}for(var u=[],h=a;he&&(e=t.length+e),t.substr(e,r)}}).call(this,t("_process"))},{_process:18}],18:[function(t,e,r){function i(){l=!1,a.length?u=a.concat(u):c=-1,u.length&&n()}function n(){if(!l){var t=setTimeout(i);l=!0;for(var e=u.length;e;){for(a=u,u=[];++c1)for(var r=1;r1&&(i=r[0]+"@",t=r[1]),t=t.replace(F,".");var n=t.split("."),o=s(n,e).join(".");return i+o}function h(t){for(var e,r,i=[],n=0,o=t.length;o>n;)e=t.charCodeAt(n++),e>=55296&&56319>=e&&o>n?(r=t.charCodeAt(n++),56320==(64512&r)?i.push(((1023&e)<<10)+(1023&r)+65536):(i.push(e),n--)):i.push(e);return i}function u(t){return s(t,function(t){var e="";return t>65535&&(t-=65536,e+=N(t>>>10&1023|55296),t=56320|1023&t),e+=N(t)}).join("")}function l(t){return 10>t-48?t-22:26>t-65?t-65:26>t-97?t-97:E}function c(t,e){return t+22+75*(26>t)-((0!=e)<<5)}function p(t,e,r){var i=0;for(t=r?I(t/A):t>>1,t+=I(t/e);t>B*w>>1;i+=E)t=I(t/B);return I(i+(B+1)*t/(t+C))}function d(t){var e,r,i,n,s,a,h,c,d,f,v=[],g=t.length,m=0,y=R,x=M;for(r=t.lastIndexOf(O),0>r&&(r=0),i=0;r>i;++i)t.charCodeAt(i)>=128&&o("not-basic"),v.push(t.charCodeAt(i));for(n=r>0?r+1:0;g>n;){for(s=m,a=1,h=E;n>=g&&o("invalid-input"),c=l(t.charCodeAt(n++)),(c>=E||c>I((T-m)/a))&&o("overflow"),m+=c*a,d=x>=h?S:h>=x+w?w:h-x,!(d>c);h+=E)f=E-d,a>I(T/f)&&o("overflow"),a*=f;e=v.length+1,x=p(m-s,e,0==s),I(m/e)>T-y&&o("overflow"),y+=I(m/e),m%=e,v.splice(m++,0,y)}return u(v)}function f(t){var e,r,i,n,s,a,u,l,d,f,v,g,m,y,x,b=[];for(t=h(t),g=t.length,e=R,r=0,s=M,a=0;g>a;++a)v=t[a],128>v&&b.push(N(v));for(i=n=b.length,n&&b.push(O);g>i;){for(u=T,a=0;g>a;++a)v=t[a],v>=e&&u>v&&(u=v);for(m=i+1,u-e>I((T-r)/m)&&o("overflow"),r+=(u-e)*m,e=u,a=0;g>a;++a)if(v=t[a],e>v&&++r>T&&o("overflow"),v==e){for(l=r,d=E;f=s>=d?S:d>=s+w?w:d-s,!(f>l);d+=E)x=l-f,y=E-f,b.push(N(c(f+x%y,0))),l=I(x/y);b.push(N(c(l,0))),s=p(r,m,i==n),r=0,++i}++r,++e}return b.join("")}function v(t){return a(t,function(t){return P.test(t)?d(t.slice(4).toLowerCase()):t})}function g(t){return a(t,function(t){return D.test(t)?"xn--"+f(t):t})}var m="object"==typeof i&&i&&!i.nodeType&&i,y="object"==typeof r&&r&&!r.nodeType&&r,x="object"==typeof e&&e;(x.global===x||x.window===x||x.self===x)&&(n=x);var b,_,T=2147483647,E=36,S=1,w=26,C=38,A=700,M=72,R=128,O="-",P=/^xn--/,D=/[^\x20-\x7E]/,F=/[\x2E\u3002\uFF0E\uFF61]/g,L={overflow:"Overflow: input needs wider integers to process","not-basic":"Illegal input >= 0x80 (not a basic code point)","invalid-input":"Invalid input"},B=E-S,I=Math.floor,N=String.fromCharCode;if(b={version:"1.3.2",ucs2:{decode:h,encode:u},decode:d,encode:f,toASCII:g,toUnicode:v},"function"==typeof t&&"object"==typeof t.amd&&t.amd)t("punycode",function(){return b});else if(m&&y)if(r.exports==m)y.exports=b;else for(_ in b)b.hasOwnProperty(_)&&(m[_]=b[_]);else n.punycode=b}(this)}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{}],20:[function(t,e,r){"use strict";function i(t,e){return Object.prototype.hasOwnProperty.call(t,e)}e.exports=function(t,e,r,o){e=e||"&",r=r||"=";var s={};if("string"!=typeof t||0===t.length)return s;var a=/\+/g;t=t.split(e);var h=1e3;o&&"number"==typeof o.maxKeys&&(h=o.maxKeys);var u=t.length;h>0&&u>h&&(u=h);for(var l=0;u>l;++l){var c,p,d,f,v=t[l].replace(a,"%20"),g=v.indexOf(r);g>=0?(c=v.substr(0,g),p=v.substr(g+1)):(c=v,p=""),d=decodeURIComponent(c), +f=decodeURIComponent(p),i(s,d)?n(s[d])?s[d].push(f):s[d]=[s[d],f]:s[d]=f}return s};var n=Array.isArray||function(t){return"[object Array]"===Object.prototype.toString.call(t)}},{}],21:[function(t,e,r){"use strict";function i(t,e){if(t.map)return t.map(e);for(var r=[],i=0;i",'"',"`"," ","\r","\n"," "],g=["{","}","|","\\","^","`"].concat(v),m=["'"].concat(g),y=["%","/","?",";","#"].concat(m),x=["/","?","#"],b=255,_=/^[a-z0-9A-Z_-]{0,63}$/,T=/^([a-z0-9A-Z_-]{0,63})(.*)$/,E={javascript:!0,"javascript:":!0},S={javascript:!0,"javascript:":!0},w={http:!0,https:!0,ftp:!0,gopher:!0,file:!0,"http:":!0,"https:":!0,"ftp:":!0,"gopher:":!0,"file:":!0},C=t("querystring");i.prototype.parse=function(t,e,r){if(!h(t))throw new TypeError("Parameter 'url' must be a string, not "+typeof t);var i=t;i=i.trim();var n=d.exec(i);if(n){n=n[0];var o=n.toLowerCase();this.protocol=o,i=i.substr(n.length)}if(r||n||i.match(/^\/\/[^@\/]+@[^@\/]+/)){var s="//"===i.substr(0,2);!s||n&&S[n]||(i=i.substr(2),this.slashes=!0)}if(!S[n]&&(s||n&&!w[n])){for(var a=-1,u=0;ul)&&(a=l)}var c,f;f=-1===a?i.lastIndexOf("@"):i.lastIndexOf("@",a),-1!==f&&(c=i.slice(0,f),i=i.slice(f+1),this.auth=decodeURIComponent(c)),a=-1;for(var u=0;ul)&&(a=l)}-1===a&&(a=i.length),this.host=i.slice(0,a),i=i.slice(a),this.parseHost(),this.hostname=this.hostname||"";var v="["===this.hostname[0]&&"]"===this.hostname[this.hostname.length-1];if(!v)for(var g=this.hostname.split(/\./),u=0,A=g.length;A>u;u++){var M=g[u];if(M&&!M.match(_)){for(var R="",O=0,P=M.length;P>O;O++)R+=M.charCodeAt(O)>127?"x":M[O];if(!R.match(_)){var D=g.slice(0,u),F=g.slice(u+1),L=M.match(T);L&&(D.push(L[1]),F.unshift(L[2])),F.length&&(i="/"+F.join(".")+i),this.hostname=D.join(".");break}}}if(this.hostname.length>b?this.hostname="":this.hostname=this.hostname.toLowerCase(),!v){for(var B=this.hostname.split("."),I=[],u=0;uu;u++){var j=m[u],G=encodeURIComponent(j);G===j&&(G=escape(j)),i=i.split(j).join(G)}var X=i.indexOf("#");-1!==X&&(this.hash=i.substr(X),i=i.slice(0,X));var Y=i.indexOf("?");if(-1!==Y?(this.search=i.substr(Y),this.query=i.substr(Y+1),e&&(this.query=C.parse(this.query)),i=i.slice(0,Y)):e&&(this.search="",this.query={}),i&&(this.pathname=i),w[o]&&this.hostname&&!this.pathname&&(this.pathname="/"),this.pathname||this.search){var U=this.pathname||"",N=this.search||"";this.path=U+N}return this.href=this.format(),this},i.prototype.format=function(){var t=this.auth||"";t&&(t=encodeURIComponent(t),t=t.replace(/%3A/i,":"),t+="@");var e=this.protocol||"",r=this.pathname||"",i=this.hash||"",n=!1,o="";this.host?n=t+this.host:this.hostname&&(n=t+(-1===this.hostname.indexOf(":")?this.hostname:"["+this.hostname+"]"),this.port&&(n+=":"+this.port)),this.query&&u(this.query)&&Object.keys(this.query).length&&(o=C.stringify(this.query));var s=this.search||o&&"?"+o||"";return e&&":"!==e.substr(-1)&&(e+=":"),this.slashes||(!e||w[e])&&n!==!1?(n="//"+(n||""),r&&"/"!==r.charAt(0)&&(r="/"+r)):n||(n=""),i&&"#"!==i.charAt(0)&&(i="#"+i),s&&"?"!==s.charAt(0)&&(s="?"+s),r=r.replace(/[?#]/g,function(t){return encodeURIComponent(t)}),s=s.replace("#","%23"),e+n+r+s+i},i.prototype.resolve=function(t){return this.resolveObject(n(t,!1,!0)).format()},i.prototype.resolveObject=function(t){if(h(t)){var e=new i;e.parse(t,!1,!0),t=e}var r=new i;if(Object.keys(this).forEach(function(t){r[t]=this[t]},this),r.hash=t.hash,""===t.href)return r.href=r.format(),r;if(t.slashes&&!t.protocol)return Object.keys(t).forEach(function(e){"protocol"!==e&&(r[e]=t[e])}),w[r.protocol]&&r.hostname&&!r.pathname&&(r.path=r.pathname="/"),r.href=r.format(),r;if(t.protocol&&t.protocol!==r.protocol){if(!w[t.protocol])return Object.keys(t).forEach(function(e){r[e]=t[e]}),r.href=r.format(),r;if(r.protocol=t.protocol,t.host||S[t.protocol])r.pathname=t.pathname;else{for(var n=(t.pathname||"").split("/");n.length&&!(t.host=n.shift()););t.host||(t.host=""),t.hostname||(t.hostname=""),""!==n[0]&&n.unshift(""),n.length<2&&n.unshift(""),r.pathname=n.join("/")}if(r.search=t.search,r.query=t.query,r.host=t.host||"",r.auth=t.auth,r.hostname=t.hostname||t.host,r.port=t.port,r.pathname||r.search){var o=r.pathname||"",s=r.search||"";r.path=o+s}return r.slashes=r.slashes||t.slashes,r.href=r.format(),r}var a=r.pathname&&"/"===r.pathname.charAt(0),u=t.host||t.pathname&&"/"===t.pathname.charAt(0),p=u||a||r.host&&t.pathname,d=p,f=r.pathname&&r.pathname.split("/")||[],n=t.pathname&&t.pathname.split("/")||[],v=r.protocol&&!w[r.protocol];if(v&&(r.hostname="",r.port=null,r.host&&(""===f[0]?f[0]=r.host:f.unshift(r.host)),r.host="",t.protocol&&(t.hostname=null,t.port=null,t.host&&(""===n[0]?n[0]=t.host:n.unshift(t.host)),t.host=null),p=p&&(""===n[0]||""===f[0])),u)r.host=t.host||""===t.host?t.host:r.host,r.hostname=t.hostname||""===t.hostname?t.hostname:r.hostname,r.search=t.search,r.query=t.query,f=n;else if(n.length)f||(f=[]),f.pop(),f=f.concat(n),r.search=t.search,r.query=t.query;else if(!c(t.search)){if(v){r.hostname=r.host=f.shift();var g=r.host&&r.host.indexOf("@")>0?r.host.split("@"):!1;g&&(r.auth=g.shift(),r.host=r.hostname=g.shift())}return r.search=t.search,r.query=t.query,l(r.pathname)&&l(r.search)||(r.path=(r.pathname?r.pathname:"")+(r.search?r.search:"")),r.href=r.format(),r}if(!f.length)return r.pathname=null,r.search?r.path="/"+r.search:r.path=null,r.href=r.format(),r;for(var m=f.slice(-1)[0],y=(r.host||t.host)&&("."===m||".."===m)||""===m,x=0,b=f.length;b>=0;b--)m=f[b],"."==m?f.splice(b,1):".."===m?(f.splice(b,1),x++):x&&(f.splice(b,1),x--);if(!p&&!d)for(;x--;x)f.unshift("..");!p||""===f[0]||f[0]&&"/"===f[0].charAt(0)||f.unshift(""),y&&"/"!==f.join("/").substr(-1)&&f.push("");var _=""===f[0]||f[0]&&"/"===f[0].charAt(0);if(v){r.hostname=r.host=_?"":f.length?f.shift():"";var g=r.host&&r.host.indexOf("@")>0?r.host.split("@"):!1;g&&(r.auth=g.shift(),r.host=r.hostname=g.shift())}return p=p||r.host&&f.length,p&&!_&&f.unshift(""),f.length?r.pathname=f.join("/"):(r.pathname=null,r.path=null),l(r.pathname)&&l(r.search)||(r.path=(r.pathname?r.pathname:"")+(r.search?r.search:"")),r.auth=t.auth||r.auth,r.slashes=r.slashes||t.slashes,r.href=r.format(),r},i.prototype.parseHost=function(){var t=this.host,e=f.exec(t);e&&(e=e[0],":"!==e&&(this.port=e.substr(1)),t=t.substr(0,t.length-e.length)),t&&(this.hostname=t)}},{punycode:19,querystring:22}],24:[function(t,e,r){"use strict";function i(t,e,r){r=r||2;var i=e&&e.length,o=i?e[0]*r:t.length,a=n(t,0,o,r,!0),h=[];if(!a)return h;var u,l,p,d,f,v,g;if(i&&(a=c(t,e,a,r)),t.length>80*r){u=p=t[0],l=d=t[1];for(var m=r;o>m;m+=r)f=t[m],v=t[m+1],u>f&&(u=f),l>v&&(l=v),f>p&&(p=f),v>d&&(d=v);g=Math.max(p-u,d-l)}return s(a,h,r,u,l,g),h}function n(t,e,r,i,n){var o,s,a,h=0;for(o=e,s=r-i;r>o;o+=i)h+=(t[s]-t[o])*(t[o+1]+t[s+1]),s=o;if(n===h>0)for(o=e;r>o;o+=i)a=M(o,t[o],t[o+1],a);else for(o=r-i;o>=e;o-=i)a=M(o,t[o],t[o+1],a);return a}function o(t,e){if(!t)return t;e||(e=t);var r,i=t;do if(r=!1,i.steiner||!T(i,i.next)&&0!==_(i.prev,i,i.next))i=i.next;else{if(R(i),i=e=i.prev,i===i.next)return null;r=!0}while(r||i!==e);return e}function s(t,e,r,i,n,c,p){if(t){!p&&c&&v(t,i,n,c);for(var d,f,g=t;t.prev!==t.next;)if(d=t.prev,f=t.next,c?h(t,i,n,c):a(t))e.push(d.i/r),e.push(t.i/r),e.push(f.i/r),R(t),t=f.next,g=f.next;else if(t=f,t===g){p?1===p?(t=u(t,e,r),s(t,e,r,i,n,c,2)):2===p&&l(t,e,r,i,n,c):s(o(t),e,r,i,n,c,1);break}}}function a(t){var e=t.prev,r=t,i=t.next;if(_(e,r,i)>=0)return!1;for(var n=t.next.next;n!==t.prev;){if(x(e.x,e.y,r.x,r.y,i.x,i.y,n.x,n.y)&&_(n.prev,n,n.next)>=0)return!1;n=n.next}return!0}function h(t,e,r,i){var n=t.prev,o=t,s=t.next;if(_(n,o,s)>=0)return!1;for(var a=n.xo.x?n.x>s.x?n.x:s.x:o.x>s.x?o.x:s.x,l=n.y>o.y?n.y>s.y?n.y:s.y:o.y>s.y?o.y:s.y,c=m(a,h,e,r,i),p=m(u,l,e,r,i),d=t.nextZ;d&&d.z<=p;){if(d!==t.prev&&d!==t.next&&x(n.x,n.y,o.x,o.y,s.x,s.y,d.x,d.y)&&_(d.prev,d,d.next)>=0)return!1;d=d.nextZ}for(d=t.prevZ;d&&d.z>=c;){if(d!==t.prev&&d!==t.next&&x(n.x,n.y,o.x,o.y,s.x,s.y,d.x,d.y)&&_(d.prev,d,d.next)>=0)return!1;d=d.prevZ}return!0}function u(t,e,r){var i=t;do{var n=i.prev,o=i.next.next;E(n,i,i.next,o)&&w(n,o)&&w(o,n)&&(e.push(n.i/r),e.push(i.i/r),e.push(o.i/r),R(i),R(i.next),i=t=o),i=i.next}while(i!==t);return i}function l(t,e,r,i,n,a){var h=t;do{for(var u=h.next.next;u!==h.prev;){if(h.i!==u.i&&b(h,u)){var l=A(h,u);return h=o(h,h.next),l=o(l,l.next),s(h,e,r,i,n,a),void s(l,e,r,i,n,a)}u=u.next}h=h.next}while(h!==t)}function c(t,e,r,i){var s,a,h,u,l,c=[];for(s=0,a=e.length;a>s;s++)h=e[s]*i,u=a-1>s?e[s+1]*i:t.length,l=n(t,h,u,i,!1),l===l.next&&(l.steiner=!0),c.push(y(l));for(c.sort(p),s=0;s=i.next.y){var a=i.x+(o-i.y)*(i.next.x-i.x)/(i.next.y-i.y);n>=a&&a>s&&(s=a,r=i.x=i.x&&i.x>=r.x&&x(oh||h===l&&i.x>r.x)&&w(i,t)&&(r=i,l=h)),i=i.next;return r}function v(t,e,r,i){var n=t;do null===n.z&&(n.z=m(n.x,n.y,e,r,i)),n.prevZ=n.prev,n.nextZ=n.next,n=n.next;while(n!==t);n.prevZ.nextZ=null,n.prevZ=null,g(n)}function g(t){var e,r,i,n,o,s,a,h,u=1;do{for(r=t,t=null,o=null,s=0;r;){for(s++,i=r,a=0,e=0;u>e&&(a++,i=i.nextZ,i);e++);for(h=u;a>0||h>0&&i;)0===a?(n=i,i=i.nextZ,h--):0!==h&&i?r.z<=i.z?(n=r,r=r.nextZ,a--):(n=i,i=i.nextZ,h--):(n=r,r=r.nextZ,a--),o?o.nextZ=n:t=n,n.prevZ=o,o=n;r=i}o.nextZ=null,u*=2}while(s>1);return t}function m(t,e,r,i,n){return t=32767*(t-r)/n,e=32767*(e-i)/n,t=16711935&(t|t<<8),t=252645135&(t|t<<4),t=858993459&(t|t<<2),t=1431655765&(t|t<<1),e=16711935&(e|e<<8),e=252645135&(e|e<<4),e=858993459&(e|e<<2),e=1431655765&(e|e<<1),t|e<<1}function y(t){var e=t,r=t;do e.x=0&&(t-s)*(i-a)-(r-s)*(e-a)>=0&&(r-s)*(o-a)-(n-s)*(i-a)>=0}function b(t,e){return T(t,e)||t.next.i!==e.i&&t.prev.i!==e.i&&!S(t,e)&&w(t,e)&&w(e,t)&&C(t,e)}function _(t,e,r){return(e.y-t.y)*(r.x-e.x)-(e.x-t.x)*(r.y-e.y)}function T(t,e){return t.x===e.x&&t.y===e.y}function E(t,e,r,i){return _(t,e,r)>0!=_(t,e,i)>0&&_(r,i,t)>0!=_(r,i,e)>0}function S(t,e){var r=t;do{if(r.i!==t.i&&r.next.i!==t.i&&r.i!==e.i&&r.next.i!==e.i&&E(r,r.next,t,e))return!0;r=r.next}while(r!==t);return!1}function w(t,e){return _(t.prev,t,t.next)<0?_(t,e,t.next)>=0&&_(t,t.prev,e)>=0:_(t,e,t.prev)<0||_(t,t.next,e)<0}function C(t,e){var r=t,i=!1,n=(t.x+e.x)/2,o=(t.y+e.y)/2;do r.y>o!=r.next.y>o&&n<(r.next.x-r.x)*(o-r.y)/(r.next.y-r.y)+r.x&&(i=!i),r=r.next;while(r!==t);return i}function A(t,e){var r=new O(t.i,t.x,t.y),i=new O(e.i,e.x,e.y),n=t.next,o=e.prev;return t.next=e,e.prev=t,r.next=n,n.prev=r,i.next=r,r.prev=i,o.next=i,i.prev=o,i}function M(t,e,r,i){var n=new O(t,e,r);return i?(n.next=i.next,n.prev=i,i.next.prev=n,i.next=n):(n.prev=n,n.next=n),n}function R(t){t.next.prev=t.prev,t.prev.next=t.next,t.prevZ&&(t.prevZ.nextZ=t.nextZ),t.nextZ&&(t.nextZ.prevZ=t.prevZ)}function O(t,e,r){this.i=t,this.x=e,this.y=r,this.prev=null,this.next=null,this.z=null,this.prevZ=null,this.nextZ=null,this.steiner=!1}e.exports=i},{}],25:[function(t,e,r){"use strict";function i(t,e,r){this.fn=t,this.context=e,this.once=r||!1}function n(){}var o="function"!=typeof Object.create?"~":!1;n.prototype._events=void 0,n.prototype.listeners=function(t,e){var r=o?o+t:t,i=this._events&&this._events[r];if(e)return!!i;if(!i)return[];if(i.fn)return[i.fn];for(var n=0,s=i.length,a=new Array(s);s>n;n++)a[n]=i[n].fn;return a},n.prototype.emit=function(t,e,r,i,n,s){var a=o?o+t:t;if(!this._events||!this._events[a])return!1;var h,u,l=this._events[a],c=arguments.length;if("function"==typeof l.fn){switch(l.once&&this.removeListener(t,l.fn,void 0,!0),c){case 1:return l.fn.call(l.context),!0;case 2:return l.fn.call(l.context,e),!0;case 3:return l.fn.call(l.context,e,r),!0;case 4:return l.fn.call(l.context,e,r,i),!0;case 5:return l.fn.call(l.context,e,r,i,n),!0;case 6:return l.fn.call(l.context,e,r,i,n,s),!0}for(u=1,h=new Array(c-1);c>u;u++)h[u-1]=arguments[u];l.fn.apply(l.context,h)}else{var p,d=l.length;for(u=0;d>u;u++)switch(l[u].once&&this.removeListener(t,l[u].fn,void 0,!0),c){case 1:l[u].fn.call(l[u].context);break;case 2:l[u].fn.call(l[u].context,e);break;case 3:l[u].fn.call(l[u].context,e,r);break;default:if(!h)for(p=1,h=new Array(c-1);c>p;p++)h[p-1]=arguments[p];l[u].fn.apply(l[u].context,h)}}return!0},n.prototype.on=function(t,e,r){var n=new i(e,r||this),s=o?o+t:t;return this._events||(this._events=o?{}:Object.create(null)),this._events[s]?this._events[s].fn?this._events[s]=[this._events[s],n]:this._events[s].push(n):this._events[s]=n,this},n.prototype.once=function(t,e,r){var n=new i(e,r||this,!0),s=o?o+t:t;return this._events||(this._events=o?{}:Object.create(null)),this._events[s]?this._events[s].fn?this._events[s]=[this._events[s],n]:this._events[s].push(n):this._events[s]=n,this},n.prototype.removeListener=function(t,e,r,i){var n=o?o+t:t;if(!this._events||!this._events[n])return this;var s=this._events[n],a=[];if(e)if(s.fn)(s.fn!==e||i&&!s.once||r&&s.context!==r)&&a.push(s);else for(var h=0,u=s.length;u>h;h++)(s[h].fn!==e||i&&!s[h].once||r&&s[h].context!==r)&&a.push(s[h]);return a.length?this._events[n]=1===a.length?a[0]:a:delete this._events[n],this},n.prototype.removeAllListeners=function(t){return this._events?(t?delete this._events[o?o+t:t]:this._events=o?{}:Object.create(null),this):this},n.prototype.off=n.prototype.removeListener,n.prototype.addListener=n.prototype.on,n.prototype.setMaxListeners=function(){return this},n.prefixed=o,"undefined"!=typeof e&&(e.exports=n)},{}],26:[function(t,e,r){"use strict";function i(t){if(null===t||void 0===t)throw new TypeError("Object.assign cannot be called with null or undefined");return Object(t)}var n=Object.prototype.hasOwnProperty,o=Object.prototype.propertyIsEnumerable;e.exports=Object.assign||function(t,e){for(var r,s,a=i(t),h=1;h=t.length&&r())}if(r=r||function(){},!t.length)return r();var o=0;u(t,function(t){e(t,i(n))})},s.forEach=s.each,s.eachSeries=function(t,e,r){if(r=r||function(){},!t.length)return r();var i=0,n=function(){e(t[i],function(e){e?(r(e),r=function(){}):(i+=1,i>=t.length?r():n())})};n()},s.forEachSeries=s.eachSeries,s.eachLimit=function(t,e,r,i){var n=d(e);n.apply(null,[t,r,i])},s.forEachLimit=s.eachLimit;var d=function(t){return function(e,r,i){if(i=i||function(){},!e.length||0>=t)return i();var n=0,o=0,s=0;!function a(){if(n>=e.length)return i();for(;t>s&&o=e.length?i():a())})}()}},f=function(t){return function(){var e=Array.prototype.slice.call(arguments);return t.apply(null,[s.each].concat(e))}},v=function(t,e){return function(){var r=Array.prototype.slice.call(arguments);return e.apply(null,[d(t)].concat(r))}},g=function(t){return function(){var e=Array.prototype.slice.call(arguments);return t.apply(null,[s.eachSeries].concat(e))}},m=function(t,e,r,i){if(e=l(e,function(t,e){return{index:e,value:t}}),i){var n=[];t(e,function(t,e){r(t.value,function(r,i){n[t.index]=i,e(r)})},function(t){i(t,n)})}else t(e,function(t,e){r(t.value,function(t){e(t)})})};s.map=f(m),s.mapSeries=g(m),s.mapLimit=function(t,e,r,i){return y(e)(t,r,i)};var y=function(t){return v(t,m)};s.reduce=function(t,e,r,i){s.eachSeries(t,function(t,i){r(e,t,function(t,r){e=r,i(t)})},function(t){i(t,e)})},s.inject=s.reduce,s.foldl=s.reduce,s.reduceRight=function(t,e,r,i){var n=l(t,function(t){return t}).reverse();s.reduce(n,e,r,i)},s.foldr=s.reduceRight;var x=function(t,e,r,i){var n=[];e=l(e,function(t,e){return{index:e,value:t}}),t(e,function(t,e){r(t.value,function(r){r&&n.push(t),e()})},function(t){i(l(n.sort(function(t,e){return t.index-e.index}),function(t){return t.value}))})};s.filter=f(x),s.filterSeries=g(x),s.select=s.filter,s.selectSeries=s.filterSeries;var b=function(t,e,r,i){var n=[];e=l(e,function(t,e){return{index:e,value:t}}),t(e,function(t,e){r(t.value,function(r){r||n.push(t),e()})},function(t){i(l(n.sort(function(t,e){return t.index-e.index}),function(t){return t.value}))})};s.reject=f(b),s.rejectSeries=g(b);var _=function(t,e,r,i){t(e,function(t,e){r(t,function(r){r?(i(t),i=function(){}):e()})},function(t){i()})};s.detect=f(_),s.detectSeries=g(_),s.some=function(t,e,r){s.each(t,function(t,i){e(t,function(t){t&&(r(!0),r=function(){}),i()})},function(t){r(!1)})},s.any=s.some,s.every=function(t,e,r){s.each(t,function(t,i){e(t,function(t){t||(r(!1),r=function(){}),i()})},function(t){r(!0)})},s.all=s.every,s.sortBy=function(t,e,r){s.map(t,function(t,r){e(t,function(e,i){e?r(e):r(null,{value:t,criteria:i})})},function(t,e){if(t)return r(t);var i=function(t,e){var r=t.criteria,i=e.criteria;return i>r?-1:r>i?1:0};r(null,l(e.sort(i),function(t){return t.value}))})},s.auto=function(t,e){e=e||function(){};var r=p(t),i=r.length;if(!i)return e();var n={},o=[],a=function(t){o.unshift(t)},l=function(t){for(var e=0;ei;){var o=i+(n-i+1>>>1);r(e,t[o])>=0?i=o:n=o-1}return i}function n(t,e,n,o){return t.started||(t.started=!0),h(e)||(e=[e]),0==e.length?s.setImmediate(function(){t.drain&&t.drain()}):void u(e,function(e){var a={data:e,priority:n,callback:"function"==typeof o?o:null};t.tasks.splice(i(t.tasks,a,r)+1,0,a),t.saturated&&t.tasks.length===t.concurrency&&t.saturated(),s.setImmediate(t.process)})}var o=s.queue(t,e);return o.push=function(t,e,r){n(o,t,e,r)},delete o.unshift,o},s.cargo=function(t,e){var r=!1,i=[],n={tasks:i,payload:e,saturated:null,empty:null,drain:null,drained:!0,push:function(t,r){h(t)||(t=[t]),u(t,function(t){i.push({data:t,callback:"function"==typeof r?r:null}),n.drained=!1,n.saturated&&i.length===e&&n.saturated()}),s.setImmediate(n.process)},process:function o(){if(!r){if(0===i.length)return n.drain&&!n.drained&&n.drain(),void(n.drained=!0);var s="number"==typeof e?i.splice(0,e):i.splice(0,i.length),a=l(s,function(t){return t.data});n.empty&&n.empty(),r=!0,t(a,function(){r=!1;var t=arguments;u(s,function(e){e.callback&&e.callback.apply(null,t)}),o()})}},length:function(){return i.length},running:function(){return r}};return n};var S=function(t){return function(e){var r=Array.prototype.slice.call(arguments,1);e.apply(null,r.concat([function(e){var r=Array.prototype.slice.call(arguments,1);"undefined"!=typeof console&&(e?console.error&&console.error(e):console[t]&&u(r,function(e){console[t](e)}))}]))}};s.log=S("log"),s.dir=S("dir"),s.memoize=function(t,e){var r={},i={};e=e||function(t){return t};var n=function(){var n=Array.prototype.slice.call(arguments),o=n.pop(),a=e.apply(null,n);a in r?s.nextTick(function(){o.apply(null,r[a])}):a in i?i[a].push(o):(i[a]=[o],t.apply(null,n.concat([function(){r[a]=arguments;var t=i[a];delete i[a];for(var e=0,n=t.length;n>e;e++)t[e].apply(null,arguments)}])))};return n.memo=r,n.unmemoized=t,n},s.unmemoize=function(t){return function(){return(t.unmemoized||t).apply(null,arguments)}},s.times=function(t,e,r){for(var i=[],n=0;t>n;n++)i.push(n);return s.map(i,e,r)},s.timesSeries=function(t,e,r){for(var i=[],n=0;t>n;n++)i.push(n);return s.mapSeries(i,e,r)},s.seq=function(){var t=arguments;return function(){var e=this,r=Array.prototype.slice.call(arguments),i=r.pop();s.reduce(t,r,function(t,r,i){r.apply(e,t.concat([function(){var t=arguments[0],e=Array.prototype.slice.call(arguments,1);i(t,e)}]))},function(t,r){i.apply(e,[t].concat(r))})}},s.compose=function(){return s.seq.apply(null,Array.prototype.reverse.call(arguments))};var w=function(t,e){var r=function(){var r=this,i=Array.prototype.slice.call(arguments),n=i.pop();return t(e,function(t,e){t.apply(r,i.concat([e]))},n)};if(arguments.length>2){var i=Array.prototype.slice.call(arguments,2);return r.apply(this,i)}return r};s.applyEach=f(w),s.applyEachSeries=g(w),s.forever=function(t,e){function r(i){if(i){if(e)return e(i);throw i}t(r)}r()},"undefined"!=typeof r&&r.exports?r.exports=s:"undefined"!=typeof t&&t.amd?t([],function(){return s}):n.async=s}()}).call(this,e("_process"))},{_process:18}],28:[function(t,e,r){function i(t,e){a.call(this),e=e||10,this.baseUrl=t||"",this.progress=0,this.loading=!1,this._progressChunk=0,this._beforeMiddleware=[],this._afterMiddleware=[],this._boundLoadResource=this._loadResource.bind(this),this._boundOnLoad=this._onLoad.bind(this),this._buffer=[],this._numToLoad=0,this._queue=n.queue(this._boundLoadResource,e),this.resources={}}var n=t("async"),o=t("url"),s=t("./Resource"),a=t("eventemitter3");i.prototype=Object.create(a.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.add=i.prototype.enqueue=function(t,e,r,i){if(Array.isArray(t)){for(var n=0;n0)if(this.xhrType===i.XHR_RESPONSE_TYPE.TEXT)this.data=t.responseText;else if(this.xhrType===i.XHR_RESPONSE_TYPE.JSON)try{this.data=JSON.parse(t.responseText),this.isJson=!0}catch(r){this.error=new Error("Error trying to parse loaded json:",r)}else if(this.xhrType===i.XHR_RESPONSE_TYPE.DOCUMENT)try{if(window.DOMParser){var n=new DOMParser;this.data=n.parseFromString(t.responseText,"text/xml")}else{var o=document.createElement("div");o.innerHTML=t.responseText,this.data=o}this.isXml=!0}catch(r){this.error=new Error("Error trying to parse loaded xml:",r)}else this.data=t.response||t.responseText;else this.error=new Error("["+t.status+"]"+t.statusText+":"+t.responseURL);this.complete()},i.prototype._determineCrossOrigin=function(t,e){if(0===t.indexOf("data:"))return"";e=e||window.location,u||(u=document.createElement("a")),u.href=t,t=a.parse(u.href);var r=!t.port&&""===e.port||t.port===e.port;return t.hostname===e.hostname&&r&&t.protocol===e.protocol?"":"anonymous"},i.prototype._determineXhrType=function(){return i._xhrTypeMap[this._getExtension()]||i.XHR_RESPONSE_TYPE.TEXT},i.prototype._determineLoadType=function(){return i._loadTypeMap[this._getExtension()]||i.LOAD_TYPE.XHR},i.prototype._getExtension=function(){var t,e=this.url;if(this.isDataUrl){var r=e.indexOf("/");t=e.substring(r+1,e.indexOf(";",r))}else{var i=e.indexOf("?");-1!==i&&(e=e.substring(0,i)),t=e.substring(e.lastIndexOf(".")+1)}return t},i.prototype._getMimeFromXhrType=function(t){switch(t){case i.XHR_RESPONSE_TYPE.BUFFER:return"application/octet-binary";case i.XHR_RESPONSE_TYPE.BLOB:return"application/blob";case i.XHR_RESPONSE_TYPE.DOCUMENT:return"application/xml";case i.XHR_RESPONSE_TYPE.JSON:return"application/json";case i.XHR_RESPONSE_TYPE.DEFAULT:case i.XHR_RESPONSE_TYPE.TEXT:default:return"text/plain"}},i.LOAD_TYPE={XHR:1,IMAGE:2,AUDIO:3,VIDEO:4},i.XHR_READY_STATE={UNSENT:0,OPENED:1,HEADERS_RECEIVED:2,LOADING:3,DONE:4},i.XHR_RESPONSE_TYPE={DEFAULT:"text",BUFFER:"arraybuffer",BLOB:"blob",DOCUMENT:"document",JSON:"json",TEXT:"text"},i._loadTypeMap={gif:i.LOAD_TYPE.IMAGE,png:i.LOAD_TYPE.IMAGE,bmp:i.LOAD_TYPE.IMAGE,jpg:i.LOAD_TYPE.IMAGE,jpeg:i.LOAD_TYPE.IMAGE,tif:i.LOAD_TYPE.IMAGE,tiff:i.LOAD_TYPE.IMAGE,webp:i.LOAD_TYPE.IMAGE,tga:i.LOAD_TYPE.IMAGE},i._xhrTypeMap={xhtml:i.XHR_RESPONSE_TYPE.DOCUMENT,html:i.XHR_RESPONSE_TYPE.DOCUMENT,htm:i.XHR_RESPONSE_TYPE.DOCUMENT,xml:i.XHR_RESPONSE_TYPE.DOCUMENT,tmx:i.XHR_RESPONSE_TYPE.DOCUMENT,tsx:i.XHR_RESPONSE_TYPE.DOCUMENT,svg:i.XHR_RESPONSE_TYPE.DOCUMENT,gif:i.XHR_RESPONSE_TYPE.BLOB,png:i.XHR_RESPONSE_TYPE.BLOB,bmp:i.XHR_RESPONSE_TYPE.BLOB,jpg:i.XHR_RESPONSE_TYPE.BLOB,jpeg:i.XHR_RESPONSE_TYPE.BLOB,tif:i.XHR_RESPONSE_TYPE.BLOB,tiff:i.XHR_RESPONSE_TYPE.BLOB,webp:i.XHR_RESPONSE_TYPE.BLOB,tga:i.XHR_RESPONSE_TYPE.BLOB,json:i.XHR_RESPONSE_TYPE.JSON,text:i.XHR_RESPONSE_TYPE.TEXT,txt:i.XHR_RESPONSE_TYPE.TEXT},i.setExtensionLoadType=function(t,e){o(i._loadTypeMap,t,e)},i.setExtensionXhrType=function(t,e){o(i._xhrTypeMap,t,e)}},{eventemitter3:25,url:23}],30:[function(t,e,r){e.exports={_keyStr:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",encodeBinary:function(t){for(var e,r="",i=new Array(4),n=0,o=0,s=0;n>2,i[1]=(3&e[0])<<4|e[1]>>4,i[2]=(15&e[1])<<2|e[2]>>6,i[3]=63&e[2],s=n-(t.length-1)){case 2:i[3]=64,i[2]=64;break;case 1:i[3]=64}for(o=0;o","Richard Davey "],main:"./src/index.js",homepage:"http://goodboydigital.com/",bugs:"https://github.com/pixijs/pixi.js/issues",license:"MIT",repository:{type:"git",url:"https://github.com/pixijs/pixi.js.git"},scripts:{start:"gulp && gulp watch",test:"gulp && testem ci",build:"gulp",docs:"jsdoc -c ./gulp/util/jsdoc.conf.json -R README.md"},files:["bin/","src/","CONTRIBUTING.md","LICENSE","package.json","README.md"],dependencies:{async:"^1.5.0",brfs:"^1.4.1",earcut:"^2.0.7",eventemitter3:"^1.1.1","object-assign":"^4.0.1","pixi-gl-core":"git+https://github.com/GoodBoyDigital/pixi-gl-core.git","resource-loader":"^1.6.4"},devDependencies:{browserify:"^11.1.0",chai:"^3.2.0",del:"^2.0.2",gulp:"^3.9.0","gulp-cached":"^1.1.0","gulp-concat":"^2.6.0","gulp-debug":"^2.1.0","gulp-header":"^1.7.1","gulp-jshint":"^1.11.2","gulp-mirror":"^0.4.0","gulp-plumber":"^1.0.1","gulp-rename":"^1.2.2","gulp-sourcemaps":"^1.5.2","gulp-uglify":"^1.4.1","gulp-util":"^3.0.6","jaguarjs-jsdoc":"git+https://github.com/davidshimjs/jaguarjs-jsdoc.git",jsdoc:"^3.3.2","jshint-summary":"^0.4.0",minimist:"^1.2.0",mocha:"^2.3.2","require-dir":"^0.3.0","run-sequence":"^1.1.2",testem:"^0.9.4","vinyl-buffer":"^1.0.0","vinyl-source-stream":"^1.1.0",watchify:"^3.4.0"},browserify:{transform:["brfs"]}}},{}],35:[function(t,e,r){function i(t){var e=document.createElement("div");e.style.width="100px",e.style.height="100px",e.style.position="absolute",e.style.top=0,e.style.left=0,e.style.zIndex=2,this.div=e,this.pool=[],this.renderId=0,this.debug=!1,this.renderer=t,this.children=[],this._onKeyDown=this._onKeyDown.bind(this),this._onMouseMove=this._onMouseMove.bind(this),this.isActive=!1,window.addEventListener("keydown",this._onKeyDown,!1)}var n=t("../core");Object.assign(n.DisplayObject.prototype,t("./accessibleTarget")),i.prototype.constructor=i,e.exports=i,i.prototype.activate=function(){this.isActive||(this.isActive=!0,window.document.addEventListener("mousemove",this._onMouseMove,!0),window.removeEventListener("keydown",this._onKeyDown,!1),this.renderer.on("postrender",this.update,this),this.renderer.view.parentNode.appendChild(this.div))},i.prototype.deactivate=function(){this.isActive&&(this.isActive=!1,window.document.removeEventListener("mousemove",this._onMouseMove),window.addEventListener("keydown",this._onKeyDown,!1),this.renderer.off("postrender",this.update),this.div.parentNode.removeChild(this.div))},i.prototype.updateAccessibleObjects=function(t){if(t.visible){t.accessible&&t.interactive&&(t._accessibleActive||this.addChild(t),t.renderId=this.renderId);for(var e=t.children,r=e.length-1;r>=0;r--)this.updateAccessibleObjects(e[r])}},i.prototype.update=function(){this.updateAccessibleObjects(this.renderer._lastObjectRendered);var t=this.renderer.view.getBoundingClientRect(),e=t.width/this.renderer.width,r=t.height/this.renderer.height,i=this.div;i.style.left=t.left+"px",i.style.top=t.top+"px",i.style.width=this.renderer.width+"px",i.style.height=this.renderer.height+"px";for(var o=0;othis.renderer.width&&(t.width=this.renderer.width-t.x),t.y+t.height>this.renderer.height&&(t.height=this.renderer.height-t.y)},i.prototype.addChild=function(t){var e=this.pool.pop();e||(e=document.createElement("button"),e.style.width="100px",e.style.height="100px",e.style.backgroundColor=this.debug?"rgba(255,0,0,0.5)":"transparent",e.style.position="absolute",e.style.zIndex=2,e.style.borderStyle="none",e.addEventListener("click",this._onClick.bind(this)),e.addEventListener("focus",this._onFocus.bind(this)),e.addEventListener("focusout",this._onFocusOut.bind(this))),e.title=t.accessibleTitle||"displayObject "+this.tabIndex,t._accessibleActive=!0,t._accessibleDiv=e,e.displayObject=t,this.children.push(t),this.div.appendChild(t._accessibleDiv),t._accessibleDiv.tabIndex=t.tabIndex},i.prototype._onClick=function(t){var e=this.renderer.plugins.interaction;e.dispatchEvent(t.target.displayObject,"click",e.eventData)},i.prototype._onFocus=function(t){var e=this.renderer.plugins.interaction;e.dispatchEvent(t.target.displayObject,"mouseover",e.eventData)},i.prototype._onFocusOut=function(t){var e=this.renderer.plugins.interaction;e.dispatchEvent(t.target.displayObject,"mouseout",e.eventData)},i.prototype._onKeyDown=function(t){9===t.keyCode&&this.activate()},i.prototype._onMouseMove=function(){this.deactivate()},i.prototype.destroy=function(){this.div=null;for(var t=0;t1)for(var r=0;e>r;r++)this.addChild(arguments[r]);else t.parent&&t.parent.removeChild(t),t.parent=this,this.children.push(t),this.onChildrenChange(this.children.length-1),t.emit("added",this);return t},i.prototype.addChildAt=function(t,e){if(e>=0&&e<=this.children.length)return t.parent&&t.parent.removeChild(t),t.parent=this,this.children.splice(e,0,t),this.onChildrenChange(e),t.emit("added",this),t;throw new Error(t+"addChildAt: The index "+e+" supplied is out of bounds "+this.children.length)},i.prototype.swapChildren=function(t,e){if(t!==e){var r=this.getChildIndex(t),i=this.getChildIndex(e);if(0>r||0>i)throw new Error("swapChildren: Both the supplied DisplayObjects must be children of the caller.");this.children[r]=e,this.children[i]=t,this.onChildrenChange(i>r?r:i)}},i.prototype.getChildIndex=function(t){var e=this.children.indexOf(t);if(-1===e)throw new Error("The supplied DisplayObject must be a child of the caller");return e},i.prototype.setChildIndex=function(t,e){if(0>e||e>=this.children.length)throw new Error("The supplied index is out of bounds");var r=this.getChildIndex(t);o.removeItems(this.children,r,1),this.children.splice(e,0,t),this.onChildrenChange(e)},i.prototype.getChildAt=function(t){if(0>t||t>=this.children.length)throw new Error("getChildAt: Supplied index "+t+" does not exist in the child list, or the supplied DisplayObject is not a child of the caller");return this.children[t]},i.prototype.removeChild=function(t){var e=arguments.length;if(e>1)for(var r=0;e>r;r++)this.removeChild(arguments[r]);else{var i=this.children.indexOf(t);if(-1===i)return;t.parent=null,o.removeItems(this.children,i,1),this.onChildrenChange(i),t.emit("removed",this)}return t},i.prototype.removeChildAt=function(t){var e=this.getChildAt(t);return e.parent=null,o.removeItems(this.children,t,1),this.onChildrenChange(t),e.emit("removed",this),e},i.prototype.removeChildren=function(t,e){var r,i,n=t||0,o="number"==typeof e?e:this.children.length,s=o-n;if(s>0&&o>=s){for(r=this.children.splice(n,s),i=0;it;++t)this.children[t].updateTransform();this.dirtyTransform=!1}},i.prototype.containerUpdateTransform=i.prototype.updateTransform,i.prototype.getBounds=function(){if(!this._currentBounds){if(0===this.children.length)return n.Rectangle.EMPTY;for(var t,e,r,i=1/0,o=1/0,s=-(1/0),a=-(1/0),h=!1,u=0,l=this.children.length;l>u;++u){var c=this.children[u];c.visible&&(h=!0,t=this.children[u].getBounds(),i=ie?s:e,a=a>r?a:r)}if(!h)return n.Rectangle.EMPTY;var p=this._bounds;p.x=i,p.y=o,p.width=s-i,p.height=a-o,this._currentBounds=p}return this._currentBounds},i.prototype.containerGetBounds=i.prototype.getBounds,i.prototype.getLocalBounds=function(){var t=this.worldTransform;this.worldTransform=n.Matrix.IDENTITY;for(var e=0,r=this.children.length;r>e;++e)this.children[e].updateTransform();return this.worldTransform=t,this._currentBounds=null,this.getBounds(n.Matrix.IDENTITY)},i.prototype.renderWebGL=function(t){if(this.visible&&!(this.worldAlpha<=0)&&this.renderable){var e,r;if(this._mask||this._filters){for(t.currentRenderer.flush(),this._filters&&this._filters.length&&t.filterManager.pushFilter(this,this._filters),this._mask&&t.maskManager.pushMask(this,this._mask),t.currentRenderer.start(),this._renderWebGL(t),e=0,r=this.children.length;r>e;e++)this.children[e].renderWebGL(t);t.currentRenderer.flush(),this._mask&&t.maskManager.popMask(this,this._mask),this._filters&&t.filterManager.popFilter(),t.currentRenderer.start()}else for(this._renderWebGL(t),e=0,r=this.children.length;r>e;++e)this.children[e].renderWebGL(t)}},i.prototype._renderWebGL=function(t){},i.prototype._renderCanvas=function(t){},i.prototype.renderCanvas=function(t){if(this.visible&&!(this.alpha<=0)&&this.renderable){this._mask&&t.maskManager.pushMask(this._mask,t),this._renderCanvas(t);for(var e=0,r=this.children.length;r>e;++e)this.children[e].renderCanvas(t);this._mask&&t.maskManager.popMask(t)}},i.prototype.destroy=function(t){if(s.prototype.destroy.call(this),t)for(var e=0,r=this.children.length;r>e;++e)this.children[e].destroy(t);this.removeChildren(),this.children=null}},{"../math":55,"../textures/RenderTexture":98,"../utils":105,"./DisplayObject":40}],40:[function(t,e,r){function i(){s.call(this),this.position=new n.Point,this._position=new u(this),this.scale=new n.Point(1,1),this.pivot=new n.Point(0,0),this.skew=new n.Point(0,0),this._rotation=0,this.alpha=1,this.visible=!0,this.renderable=!0,this.parent=null,this.worldAlpha=1,this.worldTransform=new n.Matrix,this.localTransform=new n.Matrix,this.filterArea=null,this._sr=0,this._cr=1,this._bounds=new n.Rectangle(0,0,1,1),this._currentBounds=null,this._mask=null,this.dirtyTransform=!0}var n=t("../math"),o=t("../textures/RenderTexture"),s=t("eventemitter3"),a=(t("../const"),new n.Matrix),h={worldTransform:new n.Matrix,worldAlpha:1,children:[]};i.prototype=Object.create(s.prototype),i.prototype.constructor=i,e.exports=i;var u=function(t){this.doc=t,this.x=0,this.y=0};Object.defineProperties(u.prototype,{x:{get:function(){return this.doc.position.x},set:function(t){this.doc.position.x=t,this.doc.dirtyTransform=!0}},y:{get:function(){return this.doc.posiiton.y},set:function(t){this.doc.position.y=t,this.doc.dirtyTransform=!0}}}),Object.defineProperties(i.prototype,{x:{get:function(){return this.position.x},set:function(t){this.position.x=t,this.dirtyTransform=!0}},y:{get:function(){return this.position.y},set:function(t){this.position.y=t,this.dirtyTransform=!0}},scaleX:{get:function(){return this.scale.x},set:function(t){this.scale.x=t,this.dirtyTransform=!0}},scaleY:{get:function(){return this.scale.y},set:function(t){this.scale.y=t,this.dirtyTransform=!0}},rotation:{get:function(){return this._rotation},set:function(t){this._rotation=t,this.dirtyTransform=!0,this._sr=Math.sin(t),this._cr=Math.cos(t)}},scaleY:{get:function(){return this.scale.y},set:function(t){this.scale.y=t,this.dirtyTransform=!0}},worldVisible:{get:function(){var t=this;do{if(!t.visible)return!1;t=t.parent}while(t);return!0}},mask:{get:function(){return this._mask},set:function(t){this._mask&&(this._mask.renderable=!0),this._mask=t,this._mask&&(this._mask.renderable=!1)}},filters:{get:function(){return this._filters&&this._filters.slice()},set:function(t){this._filters=t&&t.slice()}}}),i.prototype.updateTransform=function(){var t=this.parent.worldTransform,e=this.worldTransform,r=this.localTransform;this.dirtyTransform&&(r.a=this._cr*this.scale.x,r.b=this._sr*this.scale.x,r.c=-this._sr*this.scale.y,r.d=this._cr*this.scale.y,r.tx=this.position.x-(this.pivot.x*r.a+this.pivot.y*r.c),r.ty=this.position.y-(this.pivot.x*r.b+this.pivot.y*r.d)),(this.dirtyTransform||this.parent.dirtyTransform)&&(e.a=r.a*t.a+r.b*t.c,e.b=r.a*t.b+r.b*t.d,e.c=r.c*t.a+r.d*t.c,e.d=r.c*t.b+r.d*t.d,e.tx=r.tx*t.a+r.ty*t.c+t.tx,e.ty=r.tx*t.b+r.ty*t.d+t.ty,this._currentBounds=null),this.worldAlpha=this.alpha*this.parent.worldAlpha},i.prototype.displayObjectUpdateTransform=i.prototype.updateTransform,i.prototype.getBounds=function(t){return n.Rectangle.EMPTY},i.prototype.getLocalBounds=function(){return this.getBounds(n.Matrix.IDENTITY)},i.prototype.toGlobal=function(t){return this.parent?this.displayObjectUpdateTransform():(this.parent=h,this.displayObjectUpdateTransform(),this.parent=null),this.worldTransform.apply(t)},i.prototype.toLocal=function(t,e,r){return e&&(t=e.toGlobal(t)),this.parent?this.displayObjectUpdateTransform():(this.parent=h,this.displayObjectUpdateTransform(),this.parent=null),this.worldTransform.applyInverse(t,r)},i.prototype.renderWebGL=function(t){},i.prototype.renderCanvas=function(t){},i.prototype.generateTexture=function(t,e,r){var i=this.getLocalBounds(),n=new o(t,0|i.width,0|i.height,e,r);return a.tx=-i.x,a.ty=-i.y,n.render(this,a),n},i.prototype.setParent=function(t){if(!t||!t.addChild)throw new Error("setParent: Argument must be a Container");return t.addChild(this),t},i.prototype.setTransform=function(t,e,r,i,n,o,s,a,h){return this.position.x=t||0,this.position.y=e||0,this.scale.x=r?r:1,this.scale.y=i?i:1,this.rotation=n||0,this.skew.x=o||0,this.skew.y=s||0,this.pivot.x=a||0,this.pivot.y=h||0,this.dirtyTransform=!0,this},i.prototype.destroy=function(){this.position=null,this.scale=null,this.pivot=null,this.skew=null,this.parent=null,this._bounds=null,this._currentBounds=null,this._mask=null,this.worldTransform=null,this.filterArea=null}},{"../const":38,"../math":55,"../textures/RenderTexture":98,eventemitter3:25}],41:[function(t,e,r){function i(){n.call(this),this.fillAlpha=1,this.lineWidth=0,this.lineColor=0,this.graphicsData=[],this.tint=16777215,this._prevTint=16777215,this.blendMode=l.BLEND_MODES.NORMAL,this.currentPath=null,this._webGL={},this.isMask=!1,this.boundsPadding=0,this._localBounds=new u.Rectangle(0,0,1,1),this.dirty=!0,this.glDirty=!1,this.boundsDirty=!0,this.cachedSpriteDirty=!1}var n=t("../display/Container"),o=t("../textures/Texture"),s=t("../renderers/canvas/utils/CanvasBuffer"),a=t("../renderers/canvas/utils/CanvasGraphics"),h=t("./GraphicsData"),u=t("../math"),l=t("../const"),c=new u.Point;i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.clone=function(){var t=new i;t.renderable=this.renderable,t.fillAlpha=this.fillAlpha,t.lineWidth=this.lineWidth,t.lineColor=this.lineColor,t.tint=this.tint,t.blendMode=this.blendMode,t.isMask=this.isMask,t.boundsPadding=this.boundsPadding,t.dirty=!0,t.glDirty=!0,t.cachedSpriteDirty=this.cachedSpriteDirty;for(var e=0;e=c;++c)l=c/s,n=h+(t-h)*l,o=u+(e-u)*l,a.push(n+(t+(r-t)*l-n)*l,o+(e+(i-e)*l-o)*l);return this.dirty=this.boundsDirty=!0,this},i.prototype.bezierCurveTo=function(t,e,r,i,n,o){this.currentPath?0===this.currentPath.shape.points.length&&(this.currentPath.shape.points=[0,0]):this.moveTo(0,0);for(var s,a,h,u,l,c=20,p=this.currentPath.shape.points,d=p[p.length-2],f=p[p.length-1],v=0,g=1;c>=g;++g)v=g/c,s=1-v,a=s*s,h=a*s,u=v*v,l=u*v,p.push(h*d+3*a*v*t+3*s*u*r+l*n,h*f+3*a*v*e+3*s*u*i+l*o);return this.dirty=this.boundsDirty=!0,this},i.prototype.arcTo=function(t,e,r,i,n){this.currentPath?0===this.currentPath.shape.points.length&&this.currentPath.shape.points.push(t,e):this.moveTo(t,e);var o=this.currentPath.shape.points,s=o[o.length-2],a=o[o.length-1],h=a-e,u=s-t,l=i-e,c=r-t,p=Math.abs(h*c-u*l);if(1e-8>p||0===n)(o[o.length-2]!==t||o[o.length-1]!==e)&&o.push(t,e);else{var d=h*h+u*u,f=l*l+c*c,v=h*l+u*c,g=n*Math.sqrt(d)/p,m=n*Math.sqrt(f)/p,y=g*v/d,x=m*v/f,b=g*c+m*u,_=g*l+m*h,T=u*(m+y),E=h*(m+y),S=c*(g+x),w=l*(g+x),C=Math.atan2(E-_,T-b),A=Math.atan2(w-_,S-b);this.arc(b+t,_+e,n,C,A,u*l>c*h)}return this.dirty=this.boundsDirty=!0,this},i.prototype.arc=function(t,e,r,i,n,o){if(o=o||!1,i===n)return this;!o&&i>=n?n+=2*Math.PI:o&&n>=i&&(i+=2*Math.PI);var s=o?-1*(i-n):n-i,a=40*Math.ceil(Math.abs(s)/(2*Math.PI));if(0===s)return this;var h=t+Math.cos(i)*r,u=e+Math.sin(i)*r;this.currentPath?this.currentPath.shape.points.push(h,u):this.moveTo(h,u);for(var l=this.currentPath.shape.points,c=s/(2*a),p=2*c,d=Math.cos(c),f=Math.sin(c),v=a-1,g=v%1/v,m=0;v>=m;m++){var y=m+g*m,x=c+i+p*y,b=Math.cos(x),_=-Math.sin(x);l.push((d*b+f*_)*r+t,(d*-_+f*b)*r+e)}return this.dirty=this.boundsDirty=!0,this},i.prototype.beginFill=function(t,e){return this.filling=!0,this.fillColor=t||0,this.fillAlpha=void 0===e?1:e,this.currentPath&&this.currentPath.shape.points.length<=2&&(this.currentPath.fill=this.filling,this.currentPath.fillColor=this.fillColor,this.currentPath.fillAlpha=this.fillAlpha),this},i.prototype.endFill=function(){return this.filling=!1,this.fillColor=null,this.fillAlpha=1,this},i.prototype.drawRect=function(t,e,r,i){return this.drawShape(new u.Rectangle(t,e,r,i)),this},i.prototype.drawRoundedRect=function(t,e,r,i,n){return this.drawShape(new u.RoundedRectangle(t,e,r,i,n)),this},i.prototype.drawCircle=function(t,e,r){return this.drawShape(new u.Circle(t,e,r)),this},i.prototype.drawEllipse=function(t,e,r,i){return this.drawShape(new u.Ellipse(t,e,r,i)),this},i.prototype.drawPolygon=function(t){var e=t,r=!0;if(e instanceof u.Polygon&&(r=e.closed,e=e.points),!Array.isArray(e)){e=new Array(arguments.length);for(var i=0;ig?g:S,S=S>y?y:S,S=S>b?b:S,w=w>m?m:w,w=w>x?x:w,w=w>_?_:w,T=g>T?g:T,T=y>T?y:T,T=b>T?b:T,E=m>E?m:E,E=x>E?x:E,E=_>E?_:E,this._bounds.x=S,this._bounds.width=T-S,this._bounds.y=w,this._bounds.height=E-w,this._currentBounds=this._bounds}return this._currentBounds},i.prototype.containsPoint=function(t){this.worldTransform.applyInverse(t,c); +for(var e=this.graphicsData,r=0;rs?s:t,e=s+h>e?s+h:e,r=r>a?a:r,i=a+u>i?a+u:i;else if(d===l.SHAPES.CIRC)s=n.x,a=n.y,h=n.radius+f/2,u=n.radius+f/2,t=t>s-h?s-h:t,e=s+h>e?s+h:e,r=r>a-u?a-u:r,i=a+u>i?a+u:i;else if(d===l.SHAPES.ELIP)s=n.x,a=n.y,h=n.width+f/2,u=n.height+f/2,t=t>s-h?s-h:t,e=s+h>e?s+h:e,r=r>a-u?a-u:r,i=a+u>i?a+u:i;else{o=n.points;for(var v=0;vs-f?s-f:t,e=s+f>e?s+f:e,r=r>a-f?a-f:r,i=a+f>i?a+f:i}}else t=0,e=0,r=0,i=0;var g=this.boundsPadding;this._localBounds.x=t-g,this._localBounds.width=e-t+2*g,this._localBounds.y=r-g,this._localBounds.height=i-r+2*g},i.prototype.drawShape=function(t){this.currentPath&&this.currentPath.shape.points.length<=2&&this.graphicsData.pop(),this.currentPath=null;var e=new h(this.lineWidth,this.lineColor,this.lineAlpha,this.fillColor,this.fillAlpha,this.filling,t);return this.graphicsData.push(e),e.type===l.SHAPES.POLY&&(e.shape.closed=e.shape.closed||this.filling,this.currentPath=e),this.dirty=this.boundsDirty=!0,e},i.prototype.destroy=function(){n.prototype.destroy.apply(this,arguments);for(var t=0;ts;s++)e=o.data[s],1===o.data[s].mode||(shader=this.primitiveShader,r.bindShader(shader),shader.uniforms.translationMatrix=t.worldTransform.toArray(!0),shader.uniforms.tint=n.hex2rgb(t.tint),shader.uniforms.alpha=t.worldAlpha,i.bindBuffer(i.ARRAY_BUFFER,e.buffer),shader=this.primitiveShader,shader.attributes.aVertexPosition.pointer(i.FLOAT,!1,24,0),shader.attributes.aColor.pointer(i.FLOAT,!1,24,8),i.enableVertexAttribArray(shader.attributes.aVertexPosition.location),i.enableVertexAttribArray(shader.attributes.aColor.location),i.bindBuffer(i.ELEMENT_ARRAY_BUFFER,e.indexBuffer),i.drawElements(i.TRIANGLE_STRIP,e.indices.length,i.UNSIGNED_SHORT,0)),r.drawCount++},i.prototype.updateGraphics=function(t){var e=this.renderer.gl,r=t._webGL[e.id];r||(r=t._webGL[e.id]={lastIndex:0,data:[],gl:e}),t.dirty=!1;var i;if(t.clearDirty){for(t.clearDirty=!1,i=0;i=6)if(a.points.length<2*this.maximumSimplePolySize){s=this.switchMode(r,0);var h=buildPoly(a,s);h||(s=this.switchMode(r,1),buildComplexPoly(a,s))}else s=this.switchMode(r,1),buildComplexPoly(a,s);a.lineWidth>0&&(s=this.switchMode(r,0),l(a,s))}else s=this.switchMode(r,0),a.type===o.SHAPES.RECT?buildRectangle(a,s):a.type===o.SHAPES.CIRC||a.type===o.SHAPES.ELIP?buildCircle(a,s):a.type===o.SHAPES.RREC&&buildRoundedRectangle(a,s);r.lastIndex++}for(i=0;i32e4||r.mode!==e||1===e)&&(r=this.graphicsDataPool.pop()||new h(t.gl),r.mode=e,t.data.push(r))):(r=this.graphicsDataPool.pop()||new h(t.gl),r.mode=e,t.data.push(r)),r.dirty=!0,r}},{"../../const":38,"../../math":55,"../../renderers/webgl/WebGLRenderer":72,"../../renderers/webgl/utils/ObjectRenderer":87,"../../utils":105,"./WebGLGraphicsData":44,"./shaders/PrimitiveShader":45,"./utils/buildCircle":46,"./utils/buildComplexPoly":47,"./utils/buildLine":48,"./utils/buildPoly":49,"./utils/buildRectangle":50,"./utils/buildRoundedRectangle":51,earcut:24}],44:[function(t,e,r){function i(t){this.gl=t,this.color=[0,0,0],this.points=[],this.indices=[],this.buffer=t.createBuffer(),this.indexBuffer=t.createBuffer(),this.mode=1,this.alpha=1,this.dirty=!0,this.glPoints=null,this.glIndices=null}i.prototype.constructor=i,e.exports=i,i.prototype.reset=function(){this.points.length=0,this.indices.length=0},i.prototype.upload=function(){var t=this.gl;this.glPoints=new Float32Array(this.points),t.bindBuffer(t.ARRAY_BUFFER,this.buffer),t.bufferData(t.ARRAY_BUFFER,this.glPoints,t.STATIC_DRAW),this.glIndices=new Uint16Array(this.indices),t.bindBuffer(t.ELEMENT_ARRAY_BUFFER,this.indexBuffer),t.bufferData(t.ELEMENT_ARRAY_BUFFER,this.glIndices,t.STATIC_DRAW),this.dirty=!1},i.prototype.destroy=function(){this.color=null,this.points=null,this.indices=null,this.gl.deleteBuffer(this.buffer),this.gl.deleteBuffer(this.indexBuffer),this.gl=null,this.buffer=null,this.indexBuffer=null,this.glPoints=null,this.glIndices=null}},{}],45:[function(t,e,r){function i(t){n.call(this,t,["attribute vec2 aVertexPosition;","attribute vec4 aColor;","uniform mat3 translationMatrix;","uniform mat3 projectionMatrix;","uniform float alpha;","uniform float flipY;","uniform vec3 tint;","varying vec4 vColor;","void main(void){"," gl_Position = vec4((projectionMatrix * translationMatrix * vec3(aVertexPosition, 1.0)).xy, 0.0, 1.0);"," vColor = aColor * vec4(tint * alpha, alpha);","}"].join("\n"),["precision mediump float;","varying vec4 vColor;","void main(void){"," gl_FragColor = vColor;","}"].join("\n"))}var n=t("pixi-gl-core").GLShader;i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i},{"pixi-gl-core":1}],46:[function(t,e,r){var i=t("./buildLine"),n=t("../../../utils"),o=function(t,e){var r,o,s=t.shape,a=s.x,h=s.y;t.type===CONST.SHAPES.CIRC?(r=s.radius,o=s.radius):(r=s.width,o=s.height);var u=Math.floor(30*Math.sqrt(s.radius))||Math.floor(15*Math.sqrt(s.width+s.height)),l=2*Math.PI/u,c=0;if(t.fill){var p=n.hex2rgb(t.fillColor),d=t.fillAlpha,f=p[0]*d,v=p[1]*d,g=p[2]*d,m=e.points,y=e.indices,x=m.length/6;for(y.push(x),c=0;u+1>c;c++)m.push(a,h,f,v,g,d),m.push(a+Math.sin(l*c)*r,h+Math.cos(l*c)*o,f,v,g,d),y.push(x++,x++);y.push(x-1)}if(t.lineWidth){var b=t.points;for(t.points=[],c=0;u+1>c;c++)t.points.push(a+Math.sin(l*c)*r,h+Math.cos(l*c)*o);i(t,e),t.points=b}};e.exports=o},{"../../../utils":105,"./buildLine":48}],47:[function(t,e,r){var i=(t("./buildLine"),t("../../../utils")),n=function(t,e){var r=t.points.slice();if(!(r.length<6)){var n=e.indices;e.points=r,e.alpha=t.fillAlpha,e.color=i.hex2rgb(t.fillColor);for(var o,s,a=1/0,h=-(1/0),u=1/0,l=-(1/0),c=0;co?o:a,h=o>h?o:h,u=u>s?s:u,l=s>l?s:l;r.push(a,u,h,u,h,l,a,l);var p=r.length/2;for(c=0;p>c;c++)n.push(c)}};e.exports=n},{"../../../utils":105,"./buildLine":48}],48:[function(t,e,r){var i=t("../../../math"),n=t("../../../utils"),o=function(t,e){var r=0,o=t.points;if(0!==o.length){var s=new i.Point(o[0],o[1]),a=new i.Point(o[o.length-2],o[o.length-1]);if(s.x===a.x&&s.y===a.y){o=o.slice(),o.pop(),o.pop(),a=new i.Point(o[o.length-2],o[o.length-1]);var h=a.x+.5*(s.x-a.x),u=a.y+.5*(s.y-a.y);o.unshift(h,u),o.push(h,u)}var l,c,p,d,f,v,g,m,y,x,b,_,T,E,S,w,C,A,M,R,O,P,D,F=e.points,L=e.indices,B=o.length/2,I=o.length,N=F.length/6,U=t.lineWidth/2,k=n.hex2rgb(t.lineColor),j=t.lineAlpha,G=k[0]*j,X=k[1]*j,Y=k[2]*j;for(p=o[0],d=o[1],f=o[2],v=o[3],y=-(d-v),x=p-f,D=Math.sqrt(y*y+x*x),y/=D,x/=D,y*=U,x*=U,F.push(p-y,d-x,G,X,Y,j),F.push(p+y,d+x,G,X,Y,j),r=1;B-1>r;r++)p=o[2*(r-1)],d=o[2*(r-1)+1],f=o[2*r],v=o[2*r+1],g=o[2*(r+1)],m=o[2*(r+1)+1],y=-(d-v),x=p-f,D=Math.sqrt(y*y+x*x),y/=D,x/=D,y*=U,x*=U,b=-(v-m),_=f-g,D=Math.sqrt(b*b+_*_),b/=D,_/=D,b*=U,_*=U,S=-x+d-(-x+v),w=-y+f-(-y+p),C=(-y+p)*(-x+v)-(-y+f)*(-x+d),A=-_+m-(-_+v),M=-b+f-(-b+g),R=(-b+g)*(-_+v)-(-b+f)*(-_+m),O=S*M-A*w,Math.abs(O)<.1?(O+=10.1,F.push(f-y,v-x,G,X,Y,j),F.push(f+y,v+x,G,X,Y,j)):(l=(w*R-M*C)/O,c=(A*C-S*R)/O,P=(l-f)*(l-f)+(c-v)*(c-v),P>19600?(T=y-b,E=x-_,D=Math.sqrt(T*T+E*E),T/=D,E/=D,T*=U,E*=U,F.push(f-T,v-E),F.push(G,X,Y,j),F.push(f+T,v+E),F.push(G,X,Y,j),F.push(f-T,v-E),F.push(G,X,Y,j),I++):(F.push(l,c),F.push(G,X,Y,j),F.push(f-(l-f),v-(c-v)),F.push(G,X,Y,j)));for(p=o[2*(B-2)],d=o[2*(B-2)+1],f=o[2*(B-1)],v=o[2*(B-1)+1],y=-(d-v),x=p-f,D=Math.sqrt(y*y+x*x),y/=D,x/=D,y*=U,x*=U,F.push(f-y,v-x),F.push(G,X,Y,j),F.push(f+y,v+x),F.push(G,X,Y,j),L.push(N),r=0;I>r;r++)L.push(N++);L.push(N-1)}};e.exports=o},{"../../../math":55,"../../../utils":105}],49:[function(t,e,r){var i=t("../../../utils"),n=function(t,e){var r=t.points;if(!(r.length<6)){var n=e.points,o=e.indices,s=r.length/2,a=i.hex2rgb(t.fillColor),h=t.fillAlpha,u=a[0]*h,l=a[1]*h,c=a[2]*h,p=earcut(r,null,2);if(!p)return!1;var d=n.length/6,f=0;for(f=0;ff;f++)n.push(r[2*f],r[2*f+1],u,l,c,h);return!0}};e.exports=n},{"../../../utils":105}],50:[function(t,e,r){var i=t("./buildLine"),n=t("../../../utils"),o=function(t,e){var r=t.shape,o=r.x,s=r.y,a=r.width,h=r.height;if(t.fill){var u=n.hex2rgb(t.fillColor),l=t.fillAlpha,c=u[0]*l,p=u[1]*l,d=u[2]*l,f=e.points,v=e.indices,g=f.length/6;f.push(o,s),f.push(c,p,d,l),f.push(o+a,s),f.push(c,p,d,l),f.push(o,s+h),f.push(c,p,d,l),f.push(o+a,s+h),f.push(c,p,d,l),v.push(g,g,g+1,g+2,g+3,g+3)}if(t.lineWidth){var m=t.points;t.points=[o,s,o+a,s,o+a,s+h,o,s+h,o,s],i(t,e),t.points=m}};e.exports=o},{"../../../utils":105,"./buildLine":48}],51:[function(t,e,r){var i=(t("./buildLine"),t("../../../utils"));buildRoundedRectangle=function(t,e){var r=t.shape,n=r.x,o=r.y,s=r.width,a=r.height,h=r.radius,u=[];if(u.push(n,o+h),this.quadraticBezierCurve(n,o+a-h,n,o+a,n+h,o+a,u),this.quadraticBezierCurve(n+s-h,o+a,n+s,o+a,n+s,o+a-h,u),this.quadraticBezierCurve(n+s,o+h,n+s,o,n+s-h,o,u),this.quadraticBezierCurve(n+h,o,n,o,n,o+h+1e-10,u),t.fill){var l=i.hex2rgb(t.fillColor),c=t.fillAlpha,p=l[0]*c,d=l[1]*c,f=l[2]*c,v=e.points,g=e.indices,m=v.length/6,y=earcut(u,null,2),x=0;for(x=0;x=m;m++)g=m/f,h=a(t,r,g),u=a(e,i,g),l=a(r,n,g),c=a(i,o,g),p=a(h,l,g),d=a(u,c,g),v.push(p,d);return v},e.exports=buildRoundedRectangle},{"../../../utils":105,"./buildLine":48}],52:[function(t,e,r){var i=e.exports=Object.assign(t("./const"),t("./math"),{utils:t("./utils"),ticker:t("./ticker"),DisplayObject:t("./display/DisplayObject"),Container:t("./display/Container"),Sprite:t("./sprites/Sprite"),ParticleContainer:t("./particles/ParticleContainer"),SpriteRenderer:t("./sprites/webgl/SpriteRenderer"),ParticleRenderer:t("./particles/webgl/ParticleRenderer"),Text:t("./text/Text"),Graphics:t("./graphics/Graphics"),GraphicsData:t("./graphics/GraphicsData"),GraphicsRenderer:t("./graphics/webgl/GraphicsRenderer"),Texture:t("./textures/Texture"),BaseTexture:t("./textures/BaseTexture"),RenderTexture:t("./textures/RenderTexture"),VideoBaseTexture:t("./textures/VideoBaseTexture"),TextureUvs:t("./textures/TextureUvs"),CanvasRenderer:t("./renderers/canvas/CanvasRenderer"),CanvasGraphics:t("./renderers/canvas/utils/CanvasGraphics"),CanvasBuffer:t("./renderers/canvas/utils/CanvasBuffer"),WebGLRenderer:t("./renderers/webgl/WebGLRenderer"),WebGLManager:t("./renderers/webgl/managers/WebGLManager"),ShaderManager:t("./renderers/webgl/managers/ShaderManager"),Shader:t("./renderers/webgl/shaders/Shader"),ObjectRenderer:t("./renderers/webgl/utils/ObjectRenderer"),RenderTarget:t("./renderers/webgl/utils/RenderTarget"),AbstractFilter:t("./renderers/webgl/filters/AbstractFilter"),FXAAFilter:t("./renderers/webgl/filters/FXAAFilter"),SpriteMaskFilter:t("./renderers/webgl/filters/SpriteMaskFilter"),glCore:t("pixi-gl-core"),autoDetectRenderer:function(t,e,r,n){return t=t||800,e=e||600,!n&&i.utils.isWebGLSupported()?new i.WebGLRenderer(t,e,r):new i.CanvasRenderer(t,e,r)}})},{"./const":38,"./display/Container":39,"./display/DisplayObject":40,"./graphics/Graphics":41,"./graphics/GraphicsData":42,"./graphics/webgl/GraphicsRenderer":43,"./math":55,"./particles/ParticleContainer":61,"./particles/webgl/ParticleRenderer":63,"./renderers/canvas/CanvasRenderer":66,"./renderers/canvas/utils/CanvasBuffer":67,"./renderers/canvas/utils/CanvasGraphics":68,"./renderers/webgl/WebGLRenderer":72,"./renderers/webgl/filters/AbstractFilter":73,"./renderers/webgl/filters/FXAAFilter":74,"./renderers/webgl/filters/SpriteMaskFilter":75,"./renderers/webgl/managers/ShaderManager":79,"./renderers/webgl/managers/WebGLManager":81,"./renderers/webgl/shaders/Shader":84,"./renderers/webgl/utils/ObjectRenderer":87,"./renderers/webgl/utils/RenderTarget":89,"./sprites/Sprite":93,"./sprites/webgl/SpriteRenderer":94,"./text/Text":96,"./textures/BaseTexture":97,"./textures/RenderTexture":98,"./textures/Texture":99,"./textures/TextureUvs":100,"./textures/VideoBaseTexture":101,"./ticker":103,"./utils":105,"pixi-gl-core":1}],53:[function(t,e,r){function i(){this.a=1,this.b=0,this.c=0,this.d=1,this.tx=0,this.ty=0}var n=t("./Point");i.prototype.constructor=i,e.exports=i,i.prototype.fromArray=function(t){this.a=t[0],this.b=t[1],this.c=t[3],this.d=t[4],this.tx=t[2],this.ty=t[5]},i.prototype.set=function(t,e,r,i,n,o){return this.a=t,this.b=e,this.c=r,this.d=i,this.tx=n,this.ty=o,this},i.prototype.toArray=function(t,e){this.array||(this.array=new Float32Array(9));var r=e||this.array;return t?(r[0]=this.a,r[1]=this.b,r[2]=0,r[3]=this.c,r[4]=this.d,r[5]=0,r[6]=this.tx,r[7]=this.ty,r[8]=1):(r[0]=this.a,r[1]=this.c,r[2]=this.tx,r[3]=this.b,r[4]=this.d,r[5]=this.ty,r[6]=0,r[7]=0,r[8]=1),r},i.prototype.apply=function(t,e){e=e||new n;var r=t.x,i=t.y;return e.x=this.a*r+this.c*i+this.tx,e.y=this.b*r+this.d*i+this.ty,e},i.prototype.applyInverse=function(t,e){e=e||new n;var r=1/(this.a*this.d+this.c*-this.b),i=t.x,o=t.y;return e.x=this.d*r*i+-this.c*r*o+(this.ty*this.c-this.tx*this.d)*r,e.y=this.a*r*o+-this.b*r*i+(-this.ty*this.a+this.tx*this.b)*r,e},i.prototype.translate=function(t,e){return this.tx+=t,this.ty+=e,this},i.prototype.scale=function(t,e){return this.a*=t,this.d*=e,this.c*=t,this.b*=e,this.tx*=t,this.ty*=e,this},i.prototype.rotate=function(t){var e=Math.cos(t),r=Math.sin(t),i=this.a,n=this.c,o=this.tx;return this.a=i*e-this.b*r,this.b=i*r+this.b*e,this.c=n*e-this.d*r,this.d=n*r+this.d*e,this.tx=o*e-this.ty*r,this.ty=o*r+this.ty*e,this},i.prototype.append=function(t){var e=this.a,r=this.b,i=this.c,n=this.d;return this.a=t.a*e+t.b*i,this.b=t.a*r+t.b*n,this.c=t.c*e+t.d*i,this.d=t.c*r+t.d*n,this.tx=t.tx*e+t.ty*i+this.tx,this.ty=t.tx*r+t.ty*n+this.ty,this},i.prototype.setTransform=function(t,e,r,i,n,o,s,a,h){var u,l,c,p,d,f,v,g,m,y;return d=Math.sin(s),f=Math.cos(s),v=Math.cos(h),g=Math.sin(h),m=-Math.sin(a),y=Math.cos(a),u=f*n,l=d*n,c=-d*o,p=f*o,this.a=v*u+g*c,this.b=v*l+g*p,this.c=m*u+y*c,this.d=m*l+y*p,this.tx=t+(r*u+i*c),this.ty=e+(r*l+i*p),this},i.prototype.prepend=function(t){var e=this.tx;if(1!==t.a||0!==t.b||0!==t.c||1!==t.d){var r=this.a,i=this.c;this.a=r*t.a+this.b*t.c,this.b=r*t.b+this.b*t.d,this.c=i*t.a+this.d*t.c,this.d=i*t.b+this.d*t.d}return this.tx=e*t.a+this.ty*t.c+t.tx,this.ty=e*t.b+this.ty*t.d+t.ty,this},i.prototype.invert=function(){var t=this.a,e=this.b,r=this.c,i=this.d,n=this.tx,o=t*i-e*r;return this.a=i/o,this.b=-e/o,this.c=-r/o,this.d=t/o,this.tx=(r*this.ty-i*n)/o,this.ty=-(t*this.ty-e*n)/o,this},i.prototype.identity=function(){return this.a=1,this.b=0,this.c=0,this.d=1,this.tx=0,this.ty=0,this},i.prototype.clone=function(){var t=new i;return t.a=this.a,t.b=this.b,t.c=this.c,t.d=this.d,t.tx=this.tx,t.ty=this.ty,t},i.prototype.copy=function(t){return t.a=this.a,t.b=this.b,t.c=this.c,t.d=this.d,t.tx=this.tx,t.ty=this.ty,t},i.IDENTITY=new i,i.TEMP_MATRIX=new i},{"./Point":54}],54:[function(t,e,r){function i(t,e){this.x=t||0,this.y=e||0}i.prototype.constructor=i,e.exports=i,i.prototype.clone=function(){return new i(this.x,this.y)},i.prototype.copy=function(t){this.set(t.x,t.y)},i.prototype.equals=function(t){return t.x===this.x&&t.y===this.y},i.prototype.set=function(t,e){this.x=t||0,this.y=e||(0!==e?this.x:0)}},{}],55:[function(t,e,r){e.exports={Point:t("./Point"),Matrix:t("./Matrix"),Circle:t("./shapes/Circle"),Ellipse:t("./shapes/Ellipse"),Polygon:t("./shapes/Polygon"),Rectangle:t("./shapes/Rectangle"),RoundedRectangle:t("./shapes/RoundedRectangle")}},{"./Matrix":53,"./Point":54,"./shapes/Circle":56,"./shapes/Ellipse":57,"./shapes/Polygon":58,"./shapes/Rectangle":59,"./shapes/RoundedRectangle":60}],56:[function(t,e,r){function i(t,e,r){this.x=t||0,this.y=e||0,this.radius=r||0,this.type=o.SHAPES.CIRC}var n=t("./Rectangle"),o=t("../../const");i.prototype.constructor=i,e.exports=i,i.prototype.clone=function(){return new i(this.x,this.y,this.radius)},i.prototype.contains=function(t,e){if(this.radius<=0)return!1;var r=this.x-t,i=this.y-e,n=this.radius*this.radius;return r*=r,i*=i,n>=r+i},i.prototype.getBounds=function(){return new n(this.x-this.radius,this.y-this.radius,2*this.radius,2*this.radius)}},{"../../const":38,"./Rectangle":59}],57:[function(t,e,r){function i(t,e,r,i){this.x=t||0,this.y=e||0,this.width=r||0,this.height=i||0,this.type=o.SHAPES.ELIP}var n=t("./Rectangle"),o=t("../../const");i.prototype.constructor=i,e.exports=i,i.prototype.clone=function(){return new i(this.x,this.y,this.width,this.height)},i.prototype.contains=function(t,e){if(this.width<=0||this.height<=0)return!1;var r=(t-this.x)/this.width,i=(e-this.y)/this.height;return r*=r,i*=i,1>=r+i},i.prototype.getBounds=function(){return new n(this.x-this.width,this.y-this.height,this.width,this.height)}},{"../../const":38,"./Rectangle":59}],58:[function(t,e,r){function i(t){var e=t;if(!Array.isArray(e)){e=new Array(arguments.length);for(var r=0;rs;s++)i.push(e[s].x,e[s].y);e=i}this.closed=!0,this.points=e,this.type=o.SHAPES.POLY}var n=t("../Point"),o=t("../../const");i.prototype.constructor=i,e.exports=i,i.prototype.clone=function(){return new i(this.points.slice())},i.prototype.contains=function(t,e){for(var r=!1,i=this.points.length/2,n=0,o=i-1;i>n;o=n++){var s=this.points[2*n],a=this.points[2*n+1],h=this.points[2*o],u=this.points[2*o+1],l=a>e!=u>e&&(h-s)*(e-a)/(u-a)+s>t;l&&(r=!r)}return r}},{"../../const":38,"../Point":54}],59:[function(t,e,r){function i(t,e,r,i){this.x=t||0,this.y=e||0,this.width=r||0,this.height=i||0,this.type=n.SHAPES.RECT}var n=t("../../const");i.prototype.constructor=i,e.exports=i,i.EMPTY=new i(0,0,0,0),i.prototype.clone=function(){return new i(this.x,this.y,this.width,this.height)},i.prototype.contains=function(t,e){return this.width<=0||this.height<=0?!1:t>=this.x&&t=this.y&&e=this.x&&t<=this.x+this.width&&e>=this.y&&e<=this.y+this.height?!0:!1}},{"../../const":38}],61:[function(t,e,r){function i(t,e,r){n.call(this),r=r||15e3,t=t||15e3;var i=16384;r>i&&(r=i),r>t&&(r=t),this._properties=[!1,!0,!1,!1,!1],this._maxSize=t,this._batchSize=r,this._buffers=null,this._bufferToUpdate=0,this.interactiveChildren=!1,this.blendMode=o.BLEND_MODES.NORMAL,this.roundPixels=!0,this.setProperties(e)}var n=t("../display/Container"),o=t("../const");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.setProperties=function(t){t&&(this._properties[0]="scale"in t?!!t.scale:this._properties[0],this._properties[1]="position"in t?!!t.position:this._properties[1],this._properties[2]="rotation"in t?!!t.rotation:this._properties[2],this._properties[3]="uvs"in t?!!t.uvs:this._properties[3],this._properties[4]="alpha"in t?!!t.alpha:this._properties[4])},i.prototype.updateTransform=function(){this.displayObjectUpdateTransform()},i.prototype.renderWebGL=function(t){this.visible&&!(this.worldAlpha<=0)&&this.children.length&&this.renderable&&(t.setObjectRenderer(t.plugins.particle),t.plugins.particle.render(this))},i.prototype.onChildrenChange=function(t){var e=Math.floor(t/this._batchSize);er;r+=6,i+=4)this.indices[r+0]=i+0,this.indices[r+1]=i+1,this.indices[r+2]=i+2,this.indices[r+3]=i+0,this.indices[r+4]=i+2,this.indices[r+5]=i+3;this.shader=null,this.indexBuffer=null,this.properties=null,this.tempMatrix=new h.Matrix}var n=t("../../renderers/webgl/utils/ObjectRenderer"),o=t("../../renderers/webgl/WebGLRenderer"),s=t("./ParticleShader"),a=t("./ParticleBuffer"),h=t("../../math");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,o.registerPlugin("particle",i),i.prototype.onContextChange=function(){var t=this.renderer.gl;this.shader=new s(this.renderer.shaderManager),this.indexBuffer=t.createBuffer(),t.bindBuffer(t.ELEMENT_ARRAY_BUFFER,this.indexBuffer),t.bufferData(t.ELEMENT_ARRAY_BUFFER,this.indices,t.STATIC_DRAW),this.properties=[{attribute:this.shader.attributes.aVertexPosition,size:2,uploadFunction:this.uploadVertices,offset:0},{attribute:this.shader.attributes.aPositionCoord,size:2,uploadFunction:this.uploadPosition,offset:0},{attribute:this.shader.attributes.aRotation,size:1,uploadFunction:this.uploadRotation,offset:0},{attribute:this.shader.attributes.aTextureCoord,size:2,uploadFunction:this.uploadUvs,offset:0},{attribute:this.shader.attributes.aColor,size:1,uploadFunction:this.uploadAlpha,offset:0}]},i.prototype.start=function(){var t=this.renderer.gl;t.activeTexture(t.TEXTURE0),t.bindBuffer(t.ELEMENT_ARRAY_BUFFER,this.indexBuffer);var e=this.shader;this.renderer.shaderManager.setShader(e)},i.prototype.render=function(t){var e=t.children,r=e.length,i=t._maxSize,n=t._batchSize;if(0!==r){r>i&&(r=i),t._buffers||(t._buffers=this.generateBuffers(t)),this.renderer.blendModeManager.setBlendMode(t.blendMode);var o=this.renderer.gl,s=t.worldTransform.copy(this.tempMatrix);s.prepend(this.renderer.currentRenderTarget.projectionMatrix),o.uniformMatrix3fv(this.shader.uniforms.projectionMatrix._location,!1,s.toArray(!0)),o.uniform1f(this.shader.uniforms.uAlpha._location,t.worldAlpha);var a=e[0]._texture.baseTexture;if(a._glTextures[o.id])o.bindTexture(o.TEXTURE_2D,a._glTextures[o.id]);else{if(!this.renderer.updateTexture(a))return;t._properties[0]&&t._properties[3]||(t._bufferToUpdate=0)}for(var h=0,u=0;r>h;h+=n,u+=1){var l=r-h;l>n&&(l=n);var c=t._buffers[u];c.uploadDynamic(e,h,l),t._bufferToUpdate===u&&(c.uploadStatic(e,h,l),t._bufferToUpdate=u+1),c.bind(this.shader),o.drawElements(o.TRIANGLES,6*l,o.UNSIGNED_SHORT,0),this.renderer.drawCount++}}},i.prototype.generateBuffers=function(t){var e,r=this.renderer.gl,i=[],n=t._maxSize,o=t._batchSize,s=t._properties;for(e=0;n>e;e+=o)i.push(new a(r,this.properties,s,o));return i},i.prototype.uploadVertices=function(t,e,r,i,n,o){for(var s,a,h,u,l,c,p,d,f,v=0;r>v;v++)s=t[e+v],a=s._texture,u=s.scale.x,l=s.scale.y,a.trim?(h=a.trim,p=h.x-s.anchor.x*h.width,c=p+a.crop.width,f=h.y-s.anchor.y*h.height,d=f+a.crop.height):(c=a._frame.width*(1-s.anchor.x),p=a._frame.width*-s.anchor.x,d=a._frame.height*(1-s.anchor.y),f=a._frame.height*-s.anchor.y),i[o]=p*u,i[o+1]=f*l,i[o+n]=c*u,i[o+n+1]=f*l,i[o+2*n]=c*u,i[o+2*n+1]=d*l,i[o+3*n]=p*u,i[o+3*n+1]=d*l,o+=4*n},i.prototype.uploadPosition=function(t,e,r,i,n,o){for(var s=0;r>s;s++){var a=t[e+s].position;i[o]=a.x,i[o+1]=a.y,i[o+n]=a.x,i[o+n+1]=a.y,i[o+2*n]=a.x,i[o+2*n+1]=a.y,i[o+3*n]=a.x,i[o+3*n+1]=a.y,o+=4*n}},i.prototype.uploadRotation=function(t,e,r,i,n,o){for(var s=0;r>s;s++){var a=t[e+s].rotation;i[o]=a,i[o+n]=a,i[o+2*n]=a,i[o+3*n]=a,o+=4*n}},i.prototype.uploadUvs=function(t,e,r,i,n,o){for(var s=0;r>s;s++){var a=t[e+s]._texture._uvs;a?(i[o]=a.x0,i[o+1]=a.y0,i[o+n]=a.x1,i[o+n+1]=a.y1,i[o+2*n]=a.x2,i[o+2*n+1]=a.y2,i[o+3*n]=a.x3,i[o+3*n+1]=a.y3,o+=4*n):(i[o]=0,i[o+1]=0,i[o+n]=0,i[o+n+1]=0,i[o+2*n]=0,i[o+2*n+1]=0,i[o+3*n]=0,i[o+3*n+1]=0,o+=4*n)}},i.prototype.uploadAlpha=function(t,e,r,i,n,o){for(var s=0;r>s;s++){var a=t[e+s].alpha;i[o]=a,i[o+n]=a,i[o+2*n]=a,i[o+3*n]=a,o+=4*n}},i.prototype.destroy=function(){this.renderer.gl&&this.renderer.gl.deleteBuffer(this.indexBuffer),n.prototype.destroy.apply(this,arguments),this.shader.destroy(),this.indices=null,this.tempMatrix=null}},{"../../math":55,"../../renderers/webgl/WebGLRenderer":72,"../../renderers/webgl/utils/ObjectRenderer":87,"./ParticleBuffer":62,"./ParticleShader":64}],64:[function(t,e,r){function i(t){n.call(this,t,["attribute vec2 aVertexPosition;","attribute vec2 aTextureCoord;","attribute float aColor;","attribute vec2 aPositionCoord;","attribute vec2 aScale;","attribute float aRotation;","uniform mat3 projectionMatrix;","varying vec2 vTextureCoord;","varying float vColor;","void main(void){"," vec2 v = aVertexPosition;"," v.x = (aVertexPosition.x) * cos(aRotation) - (aVertexPosition.y) * sin(aRotation);"," v.y = (aVertexPosition.x) * sin(aRotation) + (aVertexPosition.y) * cos(aRotation);"," v = v + aPositionCoord;"," gl_Position = vec4((projectionMatrix * vec3(v, 1.0)).xy, 0.0, 1.0);"," vTextureCoord = aTextureCoord;"," vColor = aColor;","}"].join("\n"),["precision lowp float;","varying vec2 vTextureCoord;","varying float vColor;","uniform sampler2D uSampler;","uniform float uAlpha;","void main(void){"," vec4 color = texture2D(uSampler, vTextureCoord) * vColor * uAlpha;"," if (color.a == 0.0) discard;"," gl_FragColor = color;","}"].join("\n"),{uAlpha:{type:"1f",value:1}},{aPositionCoord:0,aRotation:0})}var n=t("../../renderers/webgl/shaders/TextureShader");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i},{"../../renderers/webgl/shaders/TextureShader":85}],65:[function(t,e,r){ +function i(t,e,r,i){if(a.call(this),n.sayHello(t),i)for(var h in s.DEFAULT_RENDER_OPTIONS)"undefined"==typeof i[h]&&(i[h]=s.DEFAULT_RENDER_OPTIONS[h]);else i=s.DEFAULT_RENDER_OPTIONS;this.type=s.RENDERER_TYPE.UNKNOWN,this.width=e||800,this.height=r||600,this.view=i.view||document.createElement("canvas"),this.resolution=i.resolution,this.transparent=i.transparent,this.autoResize=i.autoResize||!1,this.blendModes=null,this.preserveDrawingBuffer=i.preserveDrawingBuffer,this.clearBeforeRender=i.clearBeforeRender,this.roundPixels=i.roundPixels,this._backgroundColor=0,this._backgroundColorRgba=[0,0,0,0],this._backgroundColorString="#000000",this.backgroundColor=i.backgroundColor||this._backgroundColor,this._tempDisplayObjectParent={worldTransform:new o.Matrix,worldAlpha:1,children:[]},this._lastObjectRendered=this._tempDisplayObjectParent}var n=t("../utils"),o=t("../math"),s=t("../const"),a=t("eventemitter3");i.prototype=Object.create(a.prototype),i.prototype.constructor=i,e.exports=i,Object.defineProperties(i.prototype,{backgroundColor:{get:function(){return this._backgroundColor},set:function(t){this._backgroundColor=t,this._backgroundColorString=n.hex2string(t),n.hex2rgb(t,this._backgroundColorRgba)}}}),i.prototype.resize=function(t,e){this.width=t*this.resolution,this.height=e*this.resolution,this.view.width=this.width,this.view.height=this.height,this.autoResize&&(this.view.style.width=this.width/this.resolution+"px",this.view.style.height=this.height/this.resolution+"px")},i.prototype.destroy=function(t){t&&this.view.parentNode&&this.view.parentNode.removeChild(this.view),this.type=s.RENDERER_TYPE.UNKNOWN,this.width=0,this.height=0,this.view=null,this.resolution=0,this.transparent=!1,this.autoResize=!1,this.blendModes=null,this.preserveDrawingBuffer=!1,this.clearBeforeRender=!1,this.roundPixels=!1,this._backgroundColor=0,this._backgroundColorRgba=null,this._backgroundColorString=null}},{"../const":38,"../math":55,"../utils":105,eventemitter3:25}],66:[function(t,e,r){function i(t,e,r){r=r||{},n.call(this,"Canvas",t,e,r),this.type=h.RENDERER_TYPE.CANVAS,this.context=this.view.getContext("2d",{alpha:this.transparent}),this.refresh=!0,this.maskManager=new o,this.smoothProperty="imageSmoothingEnabled",this.context.imageSmoothingEnabled||(this.context.webkitImageSmoothingEnabled?this.smoothProperty="webkitImageSmoothingEnabled":this.context.mozImageSmoothingEnabled?this.smoothProperty="mozImageSmoothingEnabled":this.context.oImageSmoothingEnabled?this.smoothProperty="oImageSmoothingEnabled":this.context.msImageSmoothingEnabled&&(this.smoothProperty="msImageSmoothingEnabled")),this.initPlugins(),this._mapBlendModes(),this._tempDisplayObjectParent={worldTransform:new a.Matrix,worldAlpha:1},this.resize(t,e)}var n=t("../SystemRenderer"),o=t("./utils/CanvasMaskManager"),s=t("../../utils"),a=t("../../math"),h=t("../../const");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,s.pluginTarget.mixin(i),i.prototype.render=function(t){this.emit("prerender");var e=t.parent;this._lastObjectRendered=t,t.parent=this._tempDisplayObjectParent,t.updateTransform(),t.parent=e,this.context.setTransform(1,0,0,1,0,0),this.context.globalAlpha=1,this.context.globalCompositeOperation=this.blendModes[h.BLEND_MODES.NORMAL],navigator.isCocoonJS&&this.view.screencanvas&&(this.context.fillStyle="black",this.context.clear()),this.clearBeforeRender&&(this.transparent?this.context.clearRect(0,0,this.width,this.height):(this.context.fillStyle=this._backgroundColorString,this.context.fillRect(0,0,this.width,this.height))),this.renderDisplayObject(t,this.context),this.emit("postrender")},i.prototype.destroy=function(t){this.destroyPlugins(),n.prototype.destroy.call(this,t),this.context=null,this.refresh=!0,this.maskManager.destroy(),this.maskManager=null,this.smoothProperty=null},i.prototype.renderDisplayObject=function(t,e){var r=this.context;this.context=e,t.renderCanvas(this),this.context=r},i.prototype.resize=function(t,e){n.prototype.resize.call(this,t,e),this.smoothProperty&&(this.context[this.smoothProperty]=h.SCALE_MODES.DEFAULT===h.SCALE_MODES.LINEAR)},i.prototype._mapBlendModes=function(){this.blendModes||(this.blendModes={},s.canUseNewCanvasBlendModes()?(this.blendModes[h.BLEND_MODES.NORMAL]="source-over",this.blendModes[h.BLEND_MODES.ADD]="lighter",this.blendModes[h.BLEND_MODES.MULTIPLY]="multiply",this.blendModes[h.BLEND_MODES.SCREEN]="screen",this.blendModes[h.BLEND_MODES.OVERLAY]="overlay",this.blendModes[h.BLEND_MODES.DARKEN]="darken",this.blendModes[h.BLEND_MODES.LIGHTEN]="lighten",this.blendModes[h.BLEND_MODES.COLOR_DODGE]="color-dodge",this.blendModes[h.BLEND_MODES.COLOR_BURN]="color-burn",this.blendModes[h.BLEND_MODES.HARD_LIGHT]="hard-light",this.blendModes[h.BLEND_MODES.SOFT_LIGHT]="soft-light",this.blendModes[h.BLEND_MODES.DIFFERENCE]="difference",this.blendModes[h.BLEND_MODES.EXCLUSION]="exclusion",this.blendModes[h.BLEND_MODES.HUE]="hue",this.blendModes[h.BLEND_MODES.SATURATION]="saturate",this.blendModes[h.BLEND_MODES.COLOR]="color",this.blendModes[h.BLEND_MODES.LUMINOSITY]="luminosity"):(this.blendModes[h.BLEND_MODES.NORMAL]="source-over",this.blendModes[h.BLEND_MODES.ADD]="lighter",this.blendModes[h.BLEND_MODES.MULTIPLY]="source-over",this.blendModes[h.BLEND_MODES.SCREEN]="source-over",this.blendModes[h.BLEND_MODES.OVERLAY]="source-over",this.blendModes[h.BLEND_MODES.DARKEN]="source-over",this.blendModes[h.BLEND_MODES.LIGHTEN]="source-over",this.blendModes[h.BLEND_MODES.COLOR_DODGE]="source-over",this.blendModes[h.BLEND_MODES.COLOR_BURN]="source-over",this.blendModes[h.BLEND_MODES.HARD_LIGHT]="source-over",this.blendModes[h.BLEND_MODES.SOFT_LIGHT]="source-over",this.blendModes[h.BLEND_MODES.DIFFERENCE]="source-over",this.blendModes[h.BLEND_MODES.EXCLUSION]="source-over",this.blendModes[h.BLEND_MODES.HUE]="source-over",this.blendModes[h.BLEND_MODES.SATURATION]="source-over",this.blendModes[h.BLEND_MODES.COLOR]="source-over",this.blendModes[h.BLEND_MODES.LUMINOSITY]="source-over"))}},{"../../const":38,"../../math":55,"../../utils":105,"../SystemRenderer":65,"./utils/CanvasMaskManager":69}],67:[function(t,e,r){function i(t,e){this.canvas=document.createElement("canvas"),this.context=this.canvas.getContext("2d"),this.canvas.width=t,this.canvas.height=e}i.prototype.constructor=i,e.exports=i,Object.defineProperties(i.prototype,{width:{get:function(){return this.canvas.width},set:function(t){this.canvas.width=t}},height:{get:function(){return this.canvas.height},set:function(t){this.canvas.height=t}}}),i.prototype.clear=function(){this.context.setTransform(1,0,0,1,0,0),this.context.clearRect(0,0,this.canvas.width,this.canvas.height)},i.prototype.resize=function(t,e){this.canvas.width=t,this.canvas.height=e},i.prototype.destroy=function(){this.context=null,this.canvas=null}},{}],68:[function(t,e,r){var i=t("../../../const"),n={};e.exports=n,n.renderGraphics=function(t,e){var r=t.worldAlpha;t.dirty&&(this.updateGraphicsTint(t),t.dirty=!1);for(var n=0;nA?A:C,e.beginPath(),e.moveTo(T,E+C),e.lineTo(T,E+w-C),e.quadraticCurveTo(T,E+w,T+C,E+w),e.lineTo(T+S-C,E+w),e.quadraticCurveTo(T+S,E+w,T+S,E+w-C),e.lineTo(T+S,E+C),e.quadraticCurveTo(T+S,E,T+S-C,E),e.lineTo(T+C,E),e.quadraticCurveTo(T,E,T,E+C),e.closePath(),(o.fillColor||0===o.fillColor)&&(e.globalAlpha=o.fillAlpha*r,e.fillStyle="#"+("00000"+(0|a).toString(16)).substr(-6),e.fill()),o.lineWidth&&(e.globalAlpha=o.lineAlpha*r,e.strokeStyle="#"+("00000"+(0|h).toString(16)).substr(-6),e.stroke())}}},n.renderGraphicsMask=function(t,e){var r=t.graphicsData.length;if(0!==r){e.beginPath();for(var n=0;r>n;n++){var o=t.graphicsData[n],s=o.shape;if(o.type===i.SHAPES.POLY){var a=s.points;e.moveTo(a[0],a[1]);for(var h=1;hw?w:S,e.moveTo(b,_+S),e.lineTo(b,_+E-S),e.quadraticCurveTo(b,_+E,b+S,_+E),e.lineTo(b+T-S,_+E),e.quadraticCurveTo(b+T,_+E,b+T,_+E-S),e.lineTo(b+T,_+S),e.quadraticCurveTo(b+T,_,b+T-S,_),e.lineTo(b+S,_),e.quadraticCurveTo(b,_,b,_+S),e.closePath()}}}},n.updateGraphicsTint=function(t){if(16777215!==t.tint||t._prevTint!==t.tint){t._prevTint=t.tint;for(var e=(t.tint>>16&255)/255,r=(t.tint>>8&255)/255,i=(255&t.tint)/255,n=0;n>16&255)/255*e*255<<16)+((s>>8&255)/255*r*255<<8)+(255&s)/255*i*255,o._lineTint=((a>>16&255)/255*e*255<<16)+((a>>8&255)/255*r*255<<8)+(255&a)/255*i*255}}}},{"../../../const":38}],69:[function(t,e,r){function i(){}var n=t("./CanvasGraphics");i.prototype.constructor=i,e.exports=i,i.prototype.pushMask=function(t,e){e.context.save();var r=t.alpha,i=t.worldTransform,o=e.resolution;e.context.setTransform(i.a*o,i.b*o,i.c*o,i.d*o,i.tx*o,i.ty*o),t.texture||(n.renderGraphicsMask(t,e.context),e.context.clip()),t.worldAlpha=r},i.prototype.popMask=function(t){t.context.restore()},i.prototype.destroy=function(){}},{"./CanvasGraphics":68}],70:[function(t,e,r){var i=t("../../../utils"),n={};e.exports=n,n.getTintedTexture=function(t,e){var r=t.texture;e=n.roundColor(e);var i="#"+("00000"+(0|e).toString(16)).substr(-6);if(r.tintCache=r.tintCache||{},r.tintCache[i])return r.tintCache[i];var o=n.canvas||document.createElement("canvas");if(n.tintMethod(r,e,o),n.convertTintToImage){var s=new Image;s.src=o.toDataURL(),r.tintCache[i]=s}else r.tintCache[i]=o,n.canvas=null;return o},n.tintWithMultiply=function(t,e,r){var i=r.getContext("2d"),n=t.baseTexture.resolution,o=t.crop.clone();o.x*=n,o.y*=n,o.width*=n,o.height*=n,r.width=o.width,r.height=o.height,i.fillStyle="#"+("00000"+(0|e).toString(16)).substr(-6),i.fillRect(0,0,o.width,o.height),i.globalCompositeOperation="multiply",i.drawImage(t.baseTexture.source,o.x,o.y,o.width,o.height,0,0,o.width,o.height),i.globalCompositeOperation="destination-atop",i.drawImage(t.baseTexture.source,o.x,o.y,o.width,o.height,0,0,o.width,o.height)},n.tintWithOverlay=function(t,e,r){var i=r.getContext("2d"),n=t.baseTexture.resolution,o=t.crop.clone();o.x*=n,o.y*=n,o.width*=n,o.height*=n,r.width=o.width,r.height=o.height,i.globalCompositeOperation="copy",i.fillStyle="#"+("00000"+(0|e).toString(16)).substr(-6),i.fillRect(0,0,o.width,o.height),i.globalCompositeOperation="destination-atop",i.drawImage(t.baseTexture.source,o.x,o.y,o.width,o.height,0,0,o.width,o.height)},n.tintWithPerPixel=function(t,e,r){var n=r.getContext("2d"),o=t.baseTexture.resolution,s=t.crop.clone();s.x*=o,s.y*=o,s.width*=o,s.height*=o,r.width=s.width,r.height=s.height,n.globalCompositeOperation="copy",n.drawImage(t.baseTexture.source,s.x,s.y,s.width,s.height,0,0,s.width,s.height);for(var a=i.hex2rgb(e),h=a[0],u=a[1],l=a[2],c=n.getImageData(0,0,s.width,s.height),p=c.data,d=0;de;++e)this.shaders[e].syncUniform(t)}},{"../shaders/TextureShader":85}],74:[function(t,e,r){function i(){n.call(this,"\nprecision mediump float;\n\nattribute vec2 aVertexPosition;\nattribute vec2 aTextureCoord;\nattribute vec4 aColor;\n\nuniform mat3 projectionMatrix;\nuniform vec2 resolution;\n\nvarying vec2 vTextureCoord;\nvarying vec4 vColor;\n\nvarying vec2 vResolution;\n\n//texcoords computed in vertex step\n//to avoid dependent texture reads\nvarying vec2 v_rgbNW;\nvarying vec2 v_rgbNE;\nvarying vec2 v_rgbSW;\nvarying vec2 v_rgbSE;\nvarying vec2 v_rgbM;\n\n\nvoid texcoords(vec2 fragCoord, vec2 resolution,\n out vec2 v_rgbNW, out vec2 v_rgbNE,\n out vec2 v_rgbSW, out vec2 v_rgbSE,\n out vec2 v_rgbM) {\n vec2 inverseVP = 1.0 / resolution.xy;\n v_rgbNW = (fragCoord + vec2(-1.0, -1.0)) * inverseVP;\n v_rgbNE = (fragCoord + vec2(1.0, -1.0)) * inverseVP;\n v_rgbSW = (fragCoord + vec2(-1.0, 1.0)) * inverseVP;\n v_rgbSE = (fragCoord + vec2(1.0, 1.0)) * inverseVP;\n v_rgbM = vec2(fragCoord * inverseVP);\n}\n\nvoid main(void){\n gl_Position = vec4((projectionMatrix * vec3(aVertexPosition, 1.0)).xy, 0.0, 1.0);\n vTextureCoord = aTextureCoord;\n vColor = vec4(aColor.rgb * aColor.a, aColor.a);\n vResolution = resolution;\n\n //compute the texture coords and send them to varyings\n texcoords(aTextureCoord * resolution, resolution, v_rgbNW, v_rgbNE, v_rgbSW, v_rgbSE, v_rgbM);\n}\n",'precision lowp float;\n\n\n/**\nBasic FXAA implementation based on the code on geeks3d.com with the\nmodification that the texture2DLod stuff was removed since it\'s\nunsupported by WebGL.\n\n--\n\nFrom:\nhttps://github.com/mitsuhiko/webgl-meincraft\n\nCopyright (c) 2011 by Armin Ronacher.\n\nSome rights reserved.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are\nmet:\n\n * Redistributions of source code must retain the above copyright\n notice, this list of conditions and the following disclaimer.\n\n * Redistributions in binary form must reproduce the above\n copyright notice, this list of conditions and the following\n disclaimer in the documentation and/or other materials provided\n with the distribution.\n\n * The names of the contributors may not be used to endorse or\n promote products derived from this software without specific\n prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\nLIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\nA PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\nOWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\nSPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\nLIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\nDATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\nTHEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\nOF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n*/\n\n#ifndef FXAA_REDUCE_MIN\n #define FXAA_REDUCE_MIN (1.0/ 128.0)\n#endif\n#ifndef FXAA_REDUCE_MUL\n #define FXAA_REDUCE_MUL (1.0 / 8.0)\n#endif\n#ifndef FXAA_SPAN_MAX\n #define FXAA_SPAN_MAX 8.0\n#endif\n\n//optimized version for mobile, where dependent\n//texture reads can be a bottleneck\nvec4 fxaa(sampler2D tex, vec2 fragCoord, vec2 resolution,\n vec2 v_rgbNW, vec2 v_rgbNE,\n vec2 v_rgbSW, vec2 v_rgbSE,\n vec2 v_rgbM) {\n vec4 color;\n mediump vec2 inverseVP = vec2(1.0 / resolution.x, 1.0 / resolution.y);\n vec3 rgbNW = texture2D(tex, v_rgbNW).xyz;\n vec3 rgbNE = texture2D(tex, v_rgbNE).xyz;\n vec3 rgbSW = texture2D(tex, v_rgbSW).xyz;\n vec3 rgbSE = texture2D(tex, v_rgbSE).xyz;\n vec4 texColor = texture2D(tex, v_rgbM);\n vec3 rgbM = texColor.xyz;\n vec3 luma = vec3(0.299, 0.587, 0.114);\n float lumaNW = dot(rgbNW, luma);\n float lumaNE = dot(rgbNE, luma);\n float lumaSW = dot(rgbSW, luma);\n float lumaSE = dot(rgbSE, luma);\n float lumaM = dot(rgbM, luma);\n float lumaMin = min(lumaM, min(min(lumaNW, lumaNE), min(lumaSW, lumaSE)));\n float lumaMax = max(lumaM, max(max(lumaNW, lumaNE), max(lumaSW, lumaSE)));\n\n mediump vec2 dir;\n dir.x = -((lumaNW + lumaNE) - (lumaSW + lumaSE));\n dir.y = ((lumaNW + lumaSW) - (lumaNE + lumaSE));\n\n float dirReduce = max((lumaNW + lumaNE + lumaSW + lumaSE) *\n (0.25 * FXAA_REDUCE_MUL), FXAA_REDUCE_MIN);\n\n float rcpDirMin = 1.0 / (min(abs(dir.x), abs(dir.y)) + dirReduce);\n dir = min(vec2(FXAA_SPAN_MAX, FXAA_SPAN_MAX),\n max(vec2(-FXAA_SPAN_MAX, -FXAA_SPAN_MAX),\n dir * rcpDirMin)) * inverseVP;\n\n vec3 rgbA = 0.5 * (\n texture2D(tex, fragCoord * inverseVP + dir * (1.0 / 3.0 - 0.5)).xyz +\n texture2D(tex, fragCoord * inverseVP + dir * (2.0 / 3.0 - 0.5)).xyz);\n vec3 rgbB = rgbA * 0.5 + 0.25 * (\n texture2D(tex, fragCoord * inverseVP + dir * -0.5).xyz +\n texture2D(tex, fragCoord * inverseVP + dir * 0.5).xyz);\n\n float lumaB = dot(rgbB, luma);\n if ((lumaB < lumaMin) || (lumaB > lumaMax))\n color = vec4(rgbA, texColor.a);\n else\n color = vec4(rgbB, texColor.a);\n return color;\n}\n\n\nvarying vec2 vTextureCoord;\nvarying vec4 vColor;\nvarying vec2 vResolution;\n\n//texcoords computed in vertex step\n//to avoid dependent texture reads\nvarying vec2 v_rgbNW;\nvarying vec2 v_rgbNE;\nvarying vec2 v_rgbSW;\nvarying vec2 v_rgbSE;\nvarying vec2 v_rgbM;\n\nuniform sampler2D uSampler;\n\n\nvoid main(void){\n\n gl_FragColor = fxaa(uSampler, vTextureCoord * vResolution, vResolution, v_rgbNW, v_rgbNE, v_rgbSW, v_rgbSE, v_rgbM);\n\n}\n',{resolution:{type:"v2",value:{x:1,y:1}}})}var n=t("./AbstractFilter");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.applyFilter=function(t,e,r){var i=t.filterManager,n=this.getShader(t);i.applyFilter(n,e,r)}},{"./AbstractFilter":73}],75:[function(t,e,r){function i(t){var e=new o.Matrix;n.call(this,"attribute vec2 aVertexPosition;\nattribute vec2 aTextureCoord;\nattribute vec4 aColor;\n\nuniform mat3 projectionMatrix;\nuniform mat3 otherMatrix;\n\nvarying vec2 vMaskCoord;\nvarying vec2 vTextureCoord;\nvarying vec4 vColor;\n\nvoid main(void)\n{\n gl_Position = vec4((projectionMatrix * vec3(aVertexPosition, 1.0)).xy, 0.0, 1.0);\n vTextureCoord = aTextureCoord;\n vMaskCoord = ( otherMatrix * vec3( aTextureCoord, 1.0) ).xy;\n vColor = vec4(aColor.rgb * aColor.a, aColor.a);\n}\n","precision lowp float;\n\nvarying vec2 vMaskCoord;\nvarying vec2 vTextureCoord;\nvarying vec4 vColor;\n\nuniform sampler2D uSampler;\nuniform float alpha;\nuniform sampler2D mask;\n\nvoid main(void)\n{\n // check clip! this will stop the mask bleeding out from the edges\n vec2 text = abs( vMaskCoord - 0.5 );\n text = step(0.5, text);\n float clip = 1.0 - max(text.y, text.x);\n vec4 original = texture2D(uSampler, vTextureCoord);\n vec4 masky = texture2D(mask, vMaskCoord);\n original *= (masky.r * masky.a * alpha * clip);\n gl_FragColor = original;\n}\n",{mask:{type:"sampler2D",value:t._texture},alpha:{type:"f",value:1},otherMatrix:{type:"mat3",value:e.toArray(!0)}}),this.maskSprite=t,this.maskMatrix=e}var n=t("./AbstractFilter"),o=t("../../../math");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.applyFilter=function(t,e,r){var i=t.filterManager;this.uniforms.mask.value=this.maskSprite._texture,i.calculateMappedMatrix(e.frame,this.maskSprite,this.maskMatrix),this.uniforms.otherMatrix.value=this.maskMatrix.toArray(!0),this.uniforms.alpha.value=this.maskSprite.worldAlpha;var n=this.getShader(t);i.applyFilter(n,e,r)},Object.defineProperties(i.prototype,{map:{get:function(){return this.uniforms.mask.value},set:function(t){this.uniforms.mask.value=t}},offset:{get:function(){return this.uniforms.offset.value},set:function(t){this.uniforms.offset.value=t}}})},{"../../../math":55,"./AbstractFilter":73}],76:[function(t,e,r){function i(t){n.call(this,t),this.currentBlendMode=99999}var n=t("./WebGLManager");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.setBlendMode=function(t){if(this.currentBlendMode===t)return!1;this.currentBlendMode=t;var e=this.renderer.blendModes[this.currentBlendMode];return this.renderer.gl.blendFunc(e[0],e[1]),!0}},{"./WebGLManager":81}],77:[function(t,e,r){function i(t){n.call(this,t),this.filterStack=[],this.filterStack.push({renderTarget:t.currentRenderTarget,filter:[],bounds:null}),this.texturePool=[],this.textureSize=new h.Rectangle(0,0,t.width,t.height),this.currentFrame=null}var n=t("./WebGLManager"),o=t("../utils/RenderTarget"),s=t("../../../const"),a=t("../utils/Quad"),h=t("../../../math");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.onContextChange=function(){this.texturePool.length=0;var t=this.renderer.gl;this.quad=new a(t)},i.prototype.setFilterStack=function(t){this.filterStack=t},i.prototype.pushFilter=function(t,e){var r=t.filterArea?t.filterArea.clone():t.getBounds();r.x=0|r.x,r.y=0|r.y,r.width=0|r.width,r.height=0|r.height;var i=0|e[0].padding;if(r.x-=i,r.y-=i,r.width+=2*i,r.height+=2*i,this.renderer.currentRenderTarget.transform){var n=this.renderer.currentRenderTarget.transform;r.x+=n.tx,r.y+=n.ty,this.capFilterArea(r),r.x-=n.tx,r.y-=n.ty}else this.capFilterArea(r);if(r.width>0&&r.height>0){this.currentFrame=r;var o=this.getRenderTarget();this.renderer.setRenderTarget(o),o.clear(),this.filterStack.push({renderTarget:o,filter:e})}else this.filterStack.push({renderTarget:null,filter:e})},i.prototype.popFilter=function(){var t=this.filterStack.pop(),e=this.filterStack[this.filterStack.length-1],r=t.renderTarget;if(t.renderTarget){var i=e.renderTarget,n=this.renderer.gl;this.currentFrame=r.frame,this.quad.map(this.textureSize,r.frame),n.bindBuffer(n.ARRAY_BUFFER,this.quad.vertexBuffer),n.bindBuffer(n.ELEMENT_ARRAY_BUFFER,this.quad.indexBuffer);var o=t.filter;if(n.vertexAttribPointer(this.renderer.shaderManager.defaultShader.attributes.aVertexPosition,2,n.FLOAT,!1,0,0),n.vertexAttribPointer(this.renderer.shaderManager.defaultShader.attributes.aTextureCoord,2,n.FLOAT,!1,0,32),n.vertexAttribPointer(this.renderer.shaderManager.defaultShader.attributes.aColor,4,n.FLOAT,!1,0,64),this.renderer.blendModeManager.setBlendMode(s.BLEND_MODES.NORMAL),1===o.length)o[0].uniforms.dimensions&&(o[0].uniforms.dimensions.value[0]=this.renderer.width,o[0].uniforms.dimensions.value[1]=this.renderer.height,o[0].uniforms.dimensions.value[2]=this.quad.vertices[0],o[0].uniforms.dimensions.value[3]=this.quad.vertices[5]),o[0].applyFilter(this.renderer,r,i),this.returnRenderTarget(r);else{for(var a=r,h=this.getRenderTarget(!0),u=0;uthis.textureSize.width&&(t.width=this.textureSize.width-t.x),t.y+t.height>this.textureSize.height&&(t.height=this.textureSize.height-t.y)},i.prototype.resize=function(t,e){this.textureSize.width=t,this.textureSize.height=e;for(var r=0;re;++e)t._array[2*e]=o[e].x,t._array[2*e+1]=o[e].y;s.uniform2fv(i,t._array);break;case"v3v":for(t._array||(t._array=new Float32Array(3*o.length)),e=0,r=o.length;r>e;++e)t._array[3*e]=o[e].x,t._array[3*e+1]=o[e].y,t._array[3*e+2]=o[e].z;s.uniform3fv(i,t._array);break;case"v4v":for(t._array||(t._array=new Float32Array(4*o.length)),e=0,r=o.length;r>e;++e)t._array[4*e]=o[e].x,t._array[4*e+1]=o[e].y,t._array[4*e+2]=o[e].z,t._array[4*e+3]=o[e].w;s.uniform4fv(i,t._array);break;case"t":case"sampler2D":if(!t.value||!t.value.baseTexture.hasLoaded)break;s.activeTexture(s["TEXTURE"+this.textureCount]);var a=t.value.baseTexture._glTextures[s.id];a||(this.initSampler2D(t),a=t.value.baseTexture._glTextures[s.id]),s.bindTexture(s.TEXTURE_2D,a),s.uniform1i(t._location,this.textureCount),this.textureCount++;break;default:console.warn("Pixi.js Shader Warning: Unknown uniform type: "+t.type)}},i.prototype.syncUniforms=function(){this.textureCount=1;for(var t in this.uniforms)this.syncUniform(this.uniforms[t])},i.prototype.initSampler2D=function(t){var e=this.gl,r=t.value.baseTexture;if(r.hasLoaded)if(t.textureData){var i=t.textureData;r._glTextures[e.id]=e.createTexture(),e.bindTexture(e.TEXTURE_2D,r._glTextures[e.id]),e.pixelStorei(e.UNPACK_PREMULTIPLY_ALPHA_WEBGL,r.premultipliedAlpha),e.texImage2D(e.TEXTURE_2D,0,i.luminance?e.LUMINANCE:e.RGBA,e.RGBA,e.UNSIGNED_BYTE,r.source),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MAG_FILTER,i.magFilter?i.magFilter:e.LINEAR),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MIN_FILTER,i.wrapS?i.wrapS:e.CLAMP_TO_EDGE),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,i.wrapS?i.wrapS:e.CLAMP_TO_EDGE),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,i.wrapT?i.wrapT:e.CLAMP_TO_EDGE)}else this.shaderManager.renderer.updateTexture(r)},i.prototype.destroy=function(){this.gl.deleteProgram(this.program),this.gl=null,this.uniforms=null,this.attributes=null,this.vertexSrc=null,this.fragmentSrc=null},i.prototype._glCompile=function(t,e){var r=this.gl.createShader(t);return this.gl.shaderSource(r,e),this.gl.compileShader(r),this.gl.getShaderParameter(r,this.gl.COMPILE_STATUS)?r:(console.log(this.gl.getShaderInfoLog(r)),null)}},{"../../../utils":105}],85:[function(t,e,r){function i(t,e,r,o,s){var a={uSampler:{type:"sampler2D",value:0},projectionMatrix:{type:"mat3",value:new Float32Array([1,0,0,0,1,0,0,0,1])}};if(o)for(var h in o)a[h]=o[h];var u={aVertexPosition:0,aTextureCoord:0,aColor:0};if(s)for(var l in s)u[l]=s[l];e=e||i.defaultVertexSrc,r=r||i.defaultFragmentSrc,n.call(this,t,e,r,a,u)}var n=t("./Shader");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.defaultVertexSrc=["precision lowp float;","attribute vec2 aVertexPosition;","attribute vec2 aTextureCoord;","attribute vec4 aColor;","uniform mat3 projectionMatrix;","varying vec2 vTextureCoord;","varying vec4 vColor;","void main(void){"," gl_Position = vec4((projectionMatrix * vec3(aVertexPosition, 1.0)).xy, 0.0, 1.0);"," vTextureCoord = aTextureCoord;"," vColor = vec4(aColor.rgb * aColor.a, aColor.a);","}"].join("\n"),i.defaultFragmentSrc=["precision lowp float;","varying vec2 vTextureCoord;","varying vec4 vColor;","uniform sampler2D uSampler;","void main(void){"," gl_FragColor = texture2D(uSampler, vTextureCoord) * vColor ;","}"].join("\n")},{"./Shader":84}],86:[function(t,e,r){function i(t){vertexSrc=i.defaultVertexSrc,fragmentSrc=i.defaultFragmentSrc,n.call(this,t,vertexSrc,fragmentSrc)}var n=t("pixi-gl-core").GLShader;i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.defaultVertexSrc=["precision lowp float;","attribute vec2 aVertexPosition;","attribute vec2 aTextureCoord;","attribute vec4 aColor;","uniform mat3 projectionMatrix;","varying vec2 vTextureCoord;","varying vec4 vColor;","void main(void){"," gl_Position = vec4((projectionMatrix * vec3(aVertexPosition, 1.0)).xy, 0.0, 1.0);"," vTextureCoord = aTextureCoord;"," vColor = vec4(aColor.rgb * aColor.a, aColor.a);","}"].join("\n"),i.defaultFragmentSrc=["precision lowp float;","varying vec2 vTextureCoord;","varying vec4 vColor;","uniform sampler2D uSampler;","void main(void){"," gl_FragColor = texture2D(uSampler, vTextureCoord) * vColor ;","}"].join("\n")},{"pixi-gl-core":1}],87:[function(t,e,r){function i(t){n.call(this,t)}var n=t("../managers/WebGLManager");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.start=function(){},i.prototype.stop=function(){this.flush()},i.prototype.flush=function(){},i.prototype.render=function(t){}},{"../managers/WebGLManager":81}],88:[function(t,e,r){function i(t){this.gl=t,this.vertices=new Float32Array([0,0,200,0,200,200,0,200]),this.uvs=new Float32Array([0,0,1,0,1,1,0,1]),this.colors=new Float32Array([1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]),this.indices=new Uint16Array([0,1,2,0,3,2]),this.vertexBuffer=t.createBuffer(),this.indexBuffer=t.createBuffer(),t.bindBuffer(t.ARRAY_BUFFER,this.vertexBuffer),t.bufferData(t.ARRAY_BUFFER,128,t.DYNAMIC_DRAW),t.bindBuffer(t.ELEMENT_ARRAY_BUFFER,this.indexBuffer),t.bufferData(t.ELEMENT_ARRAY_BUFFER,this.indices,t.STATIC_DRAW),this.upload()}i.prototype.constructor=i,i.prototype.map=function(t,e){var r=0,i=0;this.uvs[0]=r,this.uvs[1]=i,this.uvs[2]=r+e.width/t.width,this.uvs[3]=i,this.uvs[4]=r+e.width/t.width,this.uvs[5]=i+e.height/t.height,this.uvs[6]=r,this.uvs[7]=i+e.height/t.height,r=e.x,i=e.y,this.vertices[0]=r,this.vertices[1]=i,this.vertices[2]=r+e.width,this.vertices[3]=i,this.vertices[4]=r+e.width,this.vertices[5]=i+e.height,this.vertices[6]=r,this.vertices[7]=i+e.height,this.upload()},i.prototype.upload=function(){var t=this.gl;t.bindBuffer(t.ARRAY_BUFFER,this.vertexBuffer),t.bufferSubData(t.ARRAY_BUFFER,0,this.vertices),t.bufferSubData(t.ARRAY_BUFFER,32,this.uvs),t.bufferSubData(t.ARRAY_BUFFER,64,this.colors)},i.prototype.destroy=function(){var t=this.gl;t.deleteBuffer(this.vertexBuffer),t.deleteBuffer(this.indexBuffer)},e.exports=i},{}],89:[function(t,e,r){var i=t("../../../math"),n=(t("../../../utils"),t("../../../const")),o=t("pixi-gl-core").GLTexture,s=t("pixi-gl-core").GLFramebuffer,a=t("./StencilMaskStack"),h=function(t,e,r,h,u,l){if(this.gl=t,this.frameBuffer=null,this.texture=null,this.clearColor=[0,0,0,0],this.size=new i.Rectangle(0,0,1,1),this.resolution=u||n.RESOLUTION,this.projectionMatrix=new i.Matrix,this.transform=null,this.frame=null,this.stencilBuffer=null,this.stencilMaskStack=new a,this.filterStack=[{renderTarget:this,filter:[],bounds:this.size}],this.scaleMode=h||n.SCALE_MODES.DEFAULT,this.root=l,this.frameBuffer=s.createRGBA(t,100,100),this.frameBuffer&&this.frameBuffer.unbind(),this.root)this.frameBuffer.framebuffer=null;else{var c=new o(t);c.enableLinearScaling(),c.enableWrapClamp(),this.frameBuffer.enableTexture(c),this.texture=c.texture}this.resize(e,r)};h.prototype.constructor=h,e.exports=h,h.prototype.clear=function(t){var e=t||this.clearColor;this.frameBuffer.clear(e[0],e[1],e[2],e[3])},h.prototype.attachStencilBuffer=function(){this.root||this.frameBuffer.enableStencil()},h.prototype.activate=function(){var t=this.gl;this.frameBuffer.bind();var e=this.frame||this.size;this.calculateProjection(e),this.transform&&this.projectionMatrix.append(this.transform),t.viewport(0,0,e.width*this.resolution,e.height*this.resolution)},h.prototype.calculateProjection=function(t){var e=this.projectionMatrix;e.identity(),this.root?(e.a=1/t.width*2,e.d=-1/t.height*2,e.tx=-1-t.x*e.a,e.ty=1-t.y*e.d):(e.a=1/t.width*2,e.d=1/t.height*2,e.tx=-1-t.x*e.a,e.ty=-1-t.y*e.d)},h.prototype.resize=function(t,e){if(t=0|t,e=0|e,this.size.width!==t||this.size.height!==e){this.size.width=t,this.size.height=e,this.frameBuffer.resize(t*this.resolution,e*this.resolution);var r=this.frame||this.size;this.calculateProjection(r)}},h.prototype.destroy=function(){this.gl;this.frameBuffer.destroy(),this.frameBuffer=null,this.texture=null}},{"../../../const":38,"../../../math":55,"../../../utils":105,"./StencilMaskStack":90,"pixi-gl-core":1}],90:[function(t,e,r){function i(){this.stencilStack=[],this.reverse=!0,this.count=0}i.prototype.constructor=i,e.exports=i},{}],91:[function(t,e,r){function i(t,e){return e=e||{},e[CONST.BLEND_MODES.NORMAL]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.ADD]=[t.SRC_ALPHA,t.DST_ALPHA],e[CONST.BLEND_MODES.MULTIPLY]=[t.DST_COLOR,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.SCREEN]=[t.SRC_ALPHA,t.ONE],e[CONST.BLEND_MODES.OVERLAY]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.DARKEN]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.LIGHTEN]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.COLOR_DODGE]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.COLOR_BURN]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.HARD_LIGHT]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.SOFT_LIGHT]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.DIFFERENCE]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.EXCLUSION]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.HUE]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.SATURATION]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.COLOR]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.LUMINOSITY]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e}CONST=t("../../../const"),e.exports=i},{"../../../const":38}],92:[function(t,e,r){function i(t,e){e=e||{},e[CONST.DRAW_MODES.POINTS]=t.POINTS,e[CONST.DRAW_MODES.LINES]=t.LINES,e[CONST.DRAW_MODES.LINE_LOOP]=t.LINE_LOOP,e[CONST.DRAW_MODES.LINE_STRIP]=t.LINE_STRIP,e[CONST.DRAW_MODES.TRIANGLES]=t.TRIANGLES,e[CONST.DRAW_MODES.TRIANGLE_STRIP]=t.TRIANGLE_STRIP,e[CONST.DRAW_MODES.TRIANGLE_FAN]=t.TRIANGLE_FAN}CONST=t("../../../const"),e.exports=i},{"../../../const":38}],93:[function(t,e,r){function i(t){s.call(this),this.anchor=new n.Point,this._texture=null,this._width=0,this._height=0,this.tint=16777215,this.blendMode=u.BLEND_MODES.NORMAL,this.shader=null,this.cachedTint=16777215,this.texture=t||o.EMPTY,this.textureDirty=!0,this.vertexDirty=!0,this.vertexData=new Float32Array(8)}var n=t("../math"),o=t("../textures/Texture"),s=t("../display/Container"),a=t("../renderers/canvas/utils/CanvasTinter"),h=t("../utils"),u=t("../const"),l=new n.Point;i.prototype=Object.create(s.prototype),i.prototype.constructor=i,e.exports=i,Object.defineProperties(i.prototype,{width:{get:function(){return Math.abs(this.scale.x)*this.texture._frame.width},set:function(t){var e=h.sign(this.scale.x)||1;this.scale.x=e*t/this.texture._frame.width,this._width=t}},height:{get:function(){return Math.abs(this.scale.y)*this.texture._frame.height},set:function(t){var e=h.sign(this.scale.y)||1;this.scale.y=e*t/this.texture._frame.height,this._height=t}},texture:{get:function(){return this._texture},set:function(t){this._texture!==t&&(this._texture=t,this.cachedTint=16777215,this.textureDirty=!0,t&&(t.baseTexture.hasLoaded?this._onTextureUpdate():t.once("update",this._onTextureUpdate,this)))}}}),i.prototype._onTextureUpdate=function(){this.textureDirty=!0,this._width&&(this.scale.x=h.sign(this.scale.x)*this._width/this.texture.frame.width),this._height&&(this.scale.y=h.sign(this.scale.y)*this._height/this.texture.frame.height)},i.prototype.caclulateVertices=function(){var t,e,r,i,n=this._texture,o=this.worldTransform,s=o.a,a=o.b,h=o.c,u=o.d,l=o.tx,c=o.ty,p=this.vertexData,d=n.trim;d?(e=d.x-this.anchor.x*d.width,t=e+n.crop.width,i=d.y-this.anchor.y*d.height,r=i+n.crop.height):(t=n._frame.width*(1-this.anchor.x),e=n._frame.width*-this.anchor.x,r=n._frame.height*(1-this.anchor.y),i=n._frame.height*-this.anchor.y),p[0]=s*e+h*i+l,p[1]=u*i+a*e+c,p[2]=s*t+h*i+l,p[3]=u*i+a*t+c,p[4]=s*t+h*r+l,p[5]=u*r+a*t+c,p[6]=s*e+h*r+l,p[7]=u*r+a*e+c},i.prototype._renderWebGL=function(t){this.textureDirty&&(this.textureDirty=!1,this._onTextureUpdate(),this.vertexDirty=!0),this.vertexDirty&&(this.vertexDirty=!1,this.caclulateVertices()),t.setObjectRenderer(t.plugins.sprite),t.plugins.sprite.render(this)},i.prototype.getBounds=function(t){if(!this._currentBounds){this.vertexDirty&&(this.vertexDirty=!1,this.caclulateVertices());var e,r,i,n,o=this.vertexData,s=o[0],a=o[1],h=o[2],u=o[3],l=o[4],c=o[5],p=o[6],d=o[7];if(e=s,e=e>h?h:e,e=e>l?l:e,e=e>p?p:e,i=a,i=i>u?u:i,i=i>c?c:i,i=i>d?d:i,r=s,r=h>r?h:r,r=l>r?l:r,r=p>r?p:r,n=a,n=u>n?u:n,n=c>n?c:n,n=d>n?d:n,this.children.length){var f=this.containerGetBounds();w0=f.x,w1=f.x+f.width,h0=f.y,h1=f.y+f.height,e=ew1?r:w1,n=n>h1?n:h1}var v=this._bounds;v.x=e,v.width=r-e,v.y=i,v.height=n-i,this._currentBounds=v}return this._currentBounds},i.prototype.getLocalBounds=function(){return this._bounds.x=-this._texture._frame.width*this.anchor.x,this._bounds.y=-this._texture._frame.height*this.anchor.y,this._bounds.width=this._texture._frame.width,this._bounds.height=this._texture._frame.height,this._bounds},i.prototype.containsPoint=function(t){this.worldTransform.applyInverse(t,l);var e,r=this._texture._frame.width,i=this._texture._frame.height,n=-r*this.anchor.x;return l.x>n&&l.xe&&l.y=this.size&&this.flush(),t.texture._uvs){var e,r=t.texture.baseTexture,i=this.currentGroup;if(this.currentTexture!==r){if(this.currentTexture=r,!r._enabled){if(r._enabled=!0,r._id=this.textureCount,this.textureCount===this.MAX_TEXTUES){for(e=0;e>16)+(65280&t.tint)+((255&t.tint)<<16)+(255*t.worldAlpha<<24),u=t.texture._uvs.uvs_uint32;s[n++]=a[0],s[n++]=a[1],this.uvs[n++]=u[0],o[n++]=h,s[n++]=r._id,s[n++]=a[2],s[n++]=a[3],this.uvs[n++]=u[1],o[n++]=h,s[n++]=r._id,s[n++]=a[4],s[n++]=a[5],this.uvs[n++]=u[2],o[n++]=h,s[n++]=r._id,s[n++]=a[6],s[n++]=a[7],this.uvs[n++]=u[3],o[n++]=h,s[n++]=r._id}},i.prototype.flush=function(){if(0!==this.currentIndex){var t=this.renderer.gl;this.currentGroup.size=this.currentIndex-this.currentGroup.start;for(var e=0;e.5*this.size)this.vertexBuffer.upload(this.vertices,0,!0);else{var r=this.positions.subarray(0,this.currentIndex*this.vertByteSize);this.vertexBuffer.upload(r,0,!0)}for(this.renderer.bindShader(this._shader),this.renderer.blendModeManager.setBlendMode(0),e=0;eu;u++)h[u]=u;return a.bind(),a.uniforms.uSamplers=h,a}function n(t){var e="vec4 getSampleFromArray(sampler2D textures[%%], int ndx, vec2 uv) {\n\nvec4 color;";e+="\n",e+="\n";for(var r=0;t>r;r++)r>0&&(e+="\nelse "),t-1>r&&(e+="if(ndx == "+r+")"),e+="\n{",e+="\n color = texture2D(textures["+r+"], uv);",e+="\n}";return e+="\n",e+="\n",e+="return color;",e+="\n}"}var o=t("pixi-gl-core").GLShader,s=["varying vec2 vTextureCoord;","varying vec4 vColor;","varying float vTextureId;","uniform sampler2D uSamplers[%%];","void main(void){","gl_FragColor = getSampleFromArray(uSamplers, int(vTextureId), vTextureCoord) * vColor;","}"].join("\n");e.exports=i},{"pixi-gl-core":1}],96:[function(t,e,r){function i(t,e,r){this.canvas=document.createElement("canvas"),this.context=this.canvas.getContext("2d"),this.resolution=r||h.RESOLUTION,this._text=null,this._style=null;var i=o.fromCanvas(this.canvas);i.trim=new s.Rectangle,n.call(this,i),this.text=t,this.style=e}var n=t("../sprites/Sprite"),o=t("../textures/Texture"),s=t("../math"),a=t("../utils"),h=t("../const");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.fontPropertiesCache={},i.fontPropertiesCanvas=document.createElement("canvas"),i.fontPropertiesContext=i.fontPropertiesCanvas.getContext("2d"),Object.defineProperties(i.prototype,{width:{get:function(){return this.dirty&&this.updateText(),this.scale.x*this._texture._frame.width},set:function(t){this.scale.x=t/this._texture._frame.width,this._width=t}},height:{get:function(){return this.dirty&&this.updateText(),this.scale.y*this._texture._frame.height},set:function(t){this.scale.y=t/this._texture._frame.height,this._height=t}},style:{get:function(){return this._style},set:function(t){t=t||{},"number"==typeof t.fill&&(t.fill=a.hex2string(t.fill)),"number"==typeof t.stroke&&(t.stroke=a.hex2string(t.stroke)),"number"==typeof t.dropShadowColor&&(t.dropShadowColor=a.hex2string(t.dropShadowColor)),t.font=t.font||"bold 20pt Arial",t.fill=t.fill||"black",t.align=t.align||"left",t.stroke=t.stroke||"black",t.strokeThickness=t.strokeThickness||0,t.wordWrap=t.wordWrap||!1,t.wordWrapWidth=t.wordWrapWidth||100,t.dropShadow=t.dropShadow||!1,t.dropShadowColor=t.dropShadowColor||"#000000",t.dropShadowAngle=void 0!==t.dropShadowAngle?t.dropShadowAngle:Math.PI/6,t.dropShadowDistance=void 0!==t.dropShadowDistance?t.dropShadowDistance:5,t.dropShadowBlur=void 0!==t.dropShadowBlur?t.dropShadowBlur:0,t.padding=t.padding||0,t.textBaseline=t.textBaseline||"alphabetic",t.lineJoin=t.lineJoin||"miter",t.miterLimit=t.miterLimit||10,this._style=t,this.dirty=!0}},text:{get:function(){return this._text},set:function(t){t=t.toString()||" ",this._text!==t&&(this._text=t,this.dirty=!0)}}}),i.prototype.updateText=function(){var t=this._style;this.context.font=t.font;for(var e=t.wordWrap?this.wordWrap(this._text):this._text,r=e.split(/(?:\r\n|\r|\n)/),i=new Array(r.length),n=0,o=this.determineFontProperties(t.font),s=0;s0?(this.context.shadowColor=t.dropShadowColor,this.context.shadowBlur=t.dropShadowBlur):this.context.fillStyle=t.dropShadowColor;var d=Math.cos(t.dropShadowAngle)*t.dropShadowDistance,f=Math.sin(t.dropShadowAngle)*t.dropShadowDistance;for(s=0;sh;h++){for(u=0;p>u;u+=4)if(255!==l[d+u]){f=!0;break}if(f)break;d+=p}for(e.ascent=s-h,d=c-p,f=!1,h=a;h>s;h--){for(u=0;p>u;u+=4)if(255!==l[d+u]){f=!0;break}if(f)break;d-=p}e.descent=h-s,e.fontSize=e.ascent+e.descent,i.fontPropertiesCache[t]=e}return e},i.prototype.wordWrap=function(t){for(var e="",r=t.split("\n"),i=this._style.wordWrapWidth,n=0;no?(a>0&&(e+="\n"),e+=s[a],o=i-h):(o-=u,e+=" "+s[a])}n0&&e>0,this.width=this._frame.width=this.crop.width=t,this.height=this._frame.height=this.crop.height=e,r&&(this.baseTexture.width=this.width,this.baseTexture.height=this.height),this.valid&&(this.textureBuffer.resize(this.width,this.height),this.filterManager&&this.filterManager.resize(this.width,this.height)))},i.prototype.clear=function(){this.valid&&(this.renderer.type===l.RENDERER_TYPE.WEBGL&&this.renderer.gl.bindFramebuffer(this.renderer.gl.FRAMEBUFFER,this.textureBuffer.frameBuffer),this.textureBuffer.clear())},i.prototype.renderWebGL=function(t,e,r,i){if(this.valid){if(i=void 0!==i?i:!0,this.textureBuffer.transform=e,this.textureBuffer.activate(),t.worldAlpha=1,i){t.worldTransform.identity(),t.currentBounds=null;var n,o,s=t.children;for(n=0,o=s.length;o>n;++n)s[n].updateTransform()}var a=this.renderer.filterManager;this.renderer.filterManager=this.filterManager,this.renderer.renderDisplayObject(t,this.textureBuffer,r),this.renderer.filterManager=a}},i.prototype.renderCanvas=function(t,e,r,i){if(this.valid){i=!!i;var n=c;n.identity(),e&&n.append(e);var o=t.worldTransform;t.worldTransform=n,t.worldAlpha=1;var s,a,h=t.children;for(s=0,a=h.length;a>s;++s)h[s].updateTransform();r&&this.textureBuffer.clear();var u=this.textureBuffer.context,l=this.renderer.resolution;this.renderer.resolution=this.resolution,this.renderer.renderDisplayObject(t,u),this.renderer.resolution=l,t.worldTransform===n&&(t.worldTransform=o)}},i.prototype.destroy=function(){o.prototype.destroy.call(this,!0),this.textureBuffer.destroy(),this.filterManager&&this.filterManager.destroy(),this.renderer=null},i.prototype.getImage=function(){var t=new Image;return t.src=this.getBase64(),t},i.prototype.getBase64=function(){return this.getCanvas().toDataURL()},i.prototype.getCanvas=function(){if(this.renderer.type===l.RENDERER_TYPE.WEBGL){var t=this.renderer.gl,e=this.textureBuffer.size.width,r=this.textureBuffer.size.height,i=new Uint8Array(4*e*r);t.bindFramebuffer(t.FRAMEBUFFER,this.textureBuffer.frameBuffer),t.readPixels(0,0,e,r,t.RGBA,t.UNSIGNED_BYTE,i),t.bindFramebuffer(t.FRAMEBUFFER,null);var n=new h(e,r),o=n.context.getImageData(0,0,e,r);return o.data.set(i),n.context.putImageData(o,0,0),n.canvas}return this.textureBuffer.canvas},i.prototype.getPixels=function(){var t,e;if(this.renderer.type===l.RENDERER_TYPE.WEBGL){var r=this.renderer.gl;t=this.textureBuffer.size.width,e=this.textureBuffer.size.height;var i=new Uint8Array(4*t*e);return r.bindFramebuffer(r.FRAMEBUFFER,this.textureBuffer.frameBuffer),r.readPixels(0,0,t,e,r.RGBA,r.UNSIGNED_BYTE,i),r.bindFramebuffer(r.FRAMEBUFFER,null),i}return t=this.textureBuffer.canvas.width,e=this.textureBuffer.canvas.height,this.textureBuffer.canvas.getContext("2d").getImageData(0,0,t,e).data},i.prototype.getPixel=function(t,e){if(this.renderer.type===l.RENDERER_TYPE.WEBGL){var r=this.renderer.gl,i=new Uint8Array(4);return r.bindFramebuffer(r.FRAMEBUFFER,this.textureBuffer.frameBuffer),r.readPixels(t,e,1,1,r.RGBA,r.UNSIGNED_BYTE,i),r.bindFramebuffer(r.FRAMEBUFFER,null),i}return this.textureBuffer.canvas.getContext("2d").getImageData(t,e,1,1).data}},{"../const":38,"../math":55,"../renderers/canvas/utils/CanvasBuffer":67,"../renderers/webgl/managers/FilterManager":77,"../renderers/webgl/utils/RenderTarget":89,"./BaseTexture":97,"./Texture":99}],99:[function(t,e,r){function i(t,e,r,n,o){a.call(this),this.noFrame=!1,e||(this.noFrame=!0,e=new h.Rectangle(0,0,1,1)),t instanceof i&&(t=t.baseTexture),this.baseTexture=t,this._frame=e,this.trim=n,this.valid=!1,this.requiresUpdate=!1,this._uvs=null,this.width=0,this.height=0,this.crop=r||e,this.rotate=!!o,t.hasLoaded?(this.noFrame&&(e=new h.Rectangle(0,0,t.width,t.height),t.on("update",this.onBaseTextureUpdated,this)),this.frame=e):t.once("loaded",this.onBaseTextureLoaded,this)}var n=t("./BaseTexture"),o=t("./VideoBaseTexture"),s=t("./TextureUvs"),a=t("eventemitter3"),h=t("../math"),u=t("../utils");i.prototype=Object.create(a.prototype),i.prototype.constructor=i,e.exports=i,Object.defineProperties(i.prototype,{frame:{get:function(){return this._frame},set:function(t){if(this._frame=t,this.noFrame=!1,this.width=t.width,this.height=t.height,!this.trim&&!this.rotate&&(t.x+t.width>this.baseTexture.width||t.y+t.height>this.baseTexture.height))throw new Error("Texture Error: frame does not fit inside the base Texture dimensions "+this);this.valid=t&&t.width&&t.height&&this.baseTexture.hasLoaded,this.trim?(this.width=this.trim.width,this.height=this.trim.height,this._frame.width=this.trim.width,this._frame.height=this.trim.height):this.crop=t,this.valid&&this._updateUvs()}}}),i.prototype.update=function(){this.baseTexture.update()},i.prototype.onBaseTextureLoaded=function(t){this.noFrame?this.frame=new h.Rectangle(0,0,t.width,t.height):this.frame=this._frame,this.emit("update",this)},i.prototype.onBaseTextureUpdated=function(t){this._frame.width=t.width,this._frame.height=t.height,this.emit("update",this)},i.prototype.destroy=function(t){this.baseTexture&&(t&&this.baseTexture.destroy(),this.baseTexture.off("update",this.onBaseTextureUpdated,this),this.baseTexture.off("loaded",this.onBaseTextureLoaded,this),this.baseTexture=null),this._frame=null,this._uvs=null,this.trim=null,this.crop=null,this.valid=!1,this.off("dispose",this.dispose,this),this.off("update",this.update,this)},i.prototype.clone=function(){return new i(this.baseTexture,this.frame,this.crop,this.trim,this.rotate)},i.prototype._updateUvs=function(){this._uvs||(this._uvs=new s),this._uvs.set(this.crop,this.baseTexture,this.rotate)},i.fromImage=function(t,e,r){var o=u.TextureCache[t];return o||(o=new i(n.fromImage(t,e,r)),u.TextureCache[t]=o),o},i.fromFrame=function(t){var e=u.TextureCache[t];if(!e)throw new Error('The frameId "'+t+'" does not exist in the texture cache');return e},i.fromCanvas=function(t,e){return new i(n.fromCanvas(t,e))},i.fromVideo=function(t,e){return"string"==typeof t?i.fromVideoUrl(t,e):new i(o.fromVideo(t,e))},i.fromVideoUrl=function(t,e){return new i(o.fromUrl(t,e))},i.addTextureToCache=function(t,e){u.TextureCache[e]=t},i.removeTextureFromCache=function(t){var e=u.TextureCache[t];return delete u.TextureCache[t],delete u.BaseTextureCache[t],e},i.EMPTY=new i(new n)},{"../math":55,"../utils":105,"./BaseTexture":97,"./TextureUvs":100,"./VideoBaseTexture":101,eventemitter3:25}],100:[function(t,e,r){function i(){this.x0=0,this.y0=0,this.x1=1,this.y1=0,this.x2=1,this.y2=1,this.x3=0,this.y3=1,this.xy0_uint32=0,this.xy1_uint32=0,this.xy2_uint32=0,this.xy3_uint32=0,this.uvs_uint32=new Uint32Array(4)}e.exports=i,i.prototype.set=function(t,e,r){var i=e.width,n=e.height;r?(this.x0=(t.x+t.height)/i,this.y0=t.y/n,this.x1=(t.x+t.height)/i,this.y1=(t.y+t.width)/n,this.x2=t.x/i,this.y2=(t.y+t.width)/n,this.x3=t.x/i,this.y3=t.y/n):(this.x0=t.x/i,this.y0=t.y/n,this.x1=(t.x+t.width)/i,this.y1=t.y/n,this.x2=(t.x+t.width)/i,this.y2=(t.y+t.height)/n,this.x3=t.x/i,this.y3=(t.y+t.height)/n),this.uvs_uint32[0]=(65535*this.y0&65535)<<16|65535*this.x0&65535,this.uvs_uint32[1]=(65535*this.y1&65535)<<16|65535*this.x1&65535,this.uvs_uint32[2]=(65535*this.y2&65535)<<16|65535*this.x2&65535,this.uvs_uint32[3]=(65535*this.y3&65535)<<16|65535*this.x3&65535}},{}],101:[function(t,e,r){function i(t,e){if(!t)throw new Error("No video source element specified.");(t.readyState===t.HAVE_ENOUGH_DATA||t.readyState===t.HAVE_FUTURE_DATA)&&t.width&&t.height&&(t.complete=!0),o.call(this,t,e),this.autoUpdate=!1,this._onUpdate=this._onUpdate.bind(this),this._onCanPlay=this._onCanPlay.bind(this),t.complete||(t.addEventListener("canplay",this._onCanPlay),t.addEventListener("canplaythrough",this._onCanPlay),t.addEventListener("play",this._onPlayStart.bind(this)),t.addEventListener("pause",this._onPlayStop.bind(this))),this.__loaded=!1}function n(t,e){e||(e="video/"+t.substr(t.lastIndexOf(".")+1));var r=document.createElement("source");return r.src=t,r.type=e,r}var o=t("./BaseTexture"),s=t("../utils");i.prototype=Object.create(o.prototype),i.prototype.constructor=i,e.exports=i,i.prototype._onUpdate=function(){this.autoUpdate&&(window.requestAnimationFrame(this._onUpdate),this.update())},i.prototype._onPlayStart=function(){this.autoUpdate||(window.requestAnimationFrame(this._onUpdate),this.autoUpdate=!0)},i.prototype._onPlayStop=function(){this.autoUpdate=!1},i.prototype._onCanPlay=function(){this.hasLoaded=!0,this.source&&(this.source.removeEventListener("canplay",this._onCanPlay),this.source.removeEventListener("canplaythrough",this._onCanPlay),this.width=this.source.videoWidth,this.height=this.source.videoHeight,this.source.play(),this.__loaded||(this.__loaded=!0,this.emit("loaded",this)))},i.prototype.destroy=function(){this.source&&this.source._pixiId&&(delete s.BaseTextureCache[this.source._pixiId],delete this.source._pixiId),o.prototype.destroy.call(this)},i.fromVideo=function(t,e){t._pixiId||(t._pixiId="video_"+s.uid());var r=s.BaseTextureCache[t._pixiId];return r||(r=new i(t,e),s.BaseTextureCache[t._pixiId]=r),r},i.fromUrl=function(t,e){var r=document.createElement("video");if(Array.isArray(t))for(var o=0;othis._maxElapsedMS&&(e=this._maxElapsedMS),this.deltaTime=e*n.TARGET_FPMS*this.speed,this._emitter.emit(s,this.deltaTime),this.lastTime=t},e.exports=i},{"../const":38,eventemitter3:25}],103:[function(t,e,r){var i=t("./Ticker"),n=new i;n.autoStart=!0,e.exports={shared:n,Ticker:i}},{"./Ticker":102}],104:[function(t,e,r){var i=function(t){for(var e=6*t,r=new Uint16Array(e),i=0,n=0;e>i;i+=6,n+=4)r[i+0]=n+0,r[i+1]=n+1,r[i+2]=n+2,r[i+3]=n+0,r[i+4]=n+2,r[i+5]=n+3;return r};e.exports=i},{}],105:[function(t,e,r){var i=t("../const"),n=e.exports={_uid:0,_saidHello:!1,EventEmitter:t("eventemitter3"),pluginTarget:t("./pluginTarget"),async:t("async"),uid:function(){return++n._uid},hex2rgb:function(t,e){return e=e||[],e[0]=(t>>16&255)/255,e[1]=(t>>8&255)/255,e[2]=(255&t)/255,e},hex2string:function(t){return t=t.toString(16),t="000000".substr(0,6-t.length)+t,"#"+t},rgb2hex:function(t){return(255*t[0]<<16)+(255*t[1]<<8)+255*t[2]},canUseNewCanvasBlendModes:function(){if("undefined"==typeof document)return!1;var t="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAQAAAABAQMAAADD8p2OAAAAA1BMVEX/",e="AAAACklEQVQI12NgAAAAAgAB4iG8MwAAAABJRU5ErkJggg==",r=new Image;r.src=t+"AP804Oa6"+e;var i=new Image;i.src=t+"/wCKxvRF"+e;var n=document.createElement("canvas");n.width=6,n.height=1;var o=n.getContext("2d");o.globalCompositeOperation="multiply",o.drawImage(r,0,0),o.drawImage(i,2,0);var s=o.getImageData(2,0,1,1).data;return 255===s[0]&&0===s[1]&&0===s[2]},getNextPowerOfTwo:function(t){if(t>0&&0===(t&t-1))return t;for(var e=1;t>e;)e<<=1;return e},isPowerOfTwo:function(t,e){return t>0&&0===(t&t-1)&&e>0&&0===(e&e-1)},getResolutionOfUrl:function(t){var e=i.RETINA_PREFIX.exec(t);return e?parseFloat(e[1]):1},sayHello:function(t){if(!n._saidHello){if(navigator.userAgent.toLowerCase().indexOf("chrome")>-1){var e=["\n %c %c %c Pixi.js "+i.VERSION+" - ✰ "+t+" ✰ %c %c http://www.pixijs.com/ %c %c ♥%c♥%c♥ \n\n","background: #ff66a5; padding:5px 0;","background: #ff66a5; padding:5px 0;","color: #ff66a5; background: #030307; padding:5px 0;","background: #ff66a5; padding:5px 0;","background: #ffc3dc; padding:5px 0;","background: #ff66a5; padding:5px 0;","color: #ff2424; background: #fff; padding:5px 0;","color: #ff2424; background: #fff; padding:5px 0;","color: #ff2424; background: #fff; padding:5px 0;"];window.console.log.apply(console,e)}else window.console&&window.console.log("Pixi.js "+i.VERSION+" - "+t+" - http://www.pixijs.com/");n._saidHello=!0}},isWebGLSupported:function(){var t={stencil:!0};try{if(!window.WebGLRenderingContext)return!1;var e=document.createElement("canvas"),r=e.getContext("webgl",t)||e.getContext("experimental-webgl",t);return!(!r||!r.getContextAttributes().stencil)}catch(i){return!1}},sign:function(t){return t?0>t?-1:1:0},removeItems:function(t,e,r){var i=t.length;if(!(e>=i||0===r)){r=e+r>i?i-e:r;for(var n=e,o=i-r;o>n;++n)t[n]=t[n+r];t.length=o}},TextureCache:{},BaseTextureCache:{}}},{"../const":38,"./pluginTarget":106,async:16,eventemitter3:25}],106:[function(t,e,r){function i(t){t.__plugins={},t.registerPlugin=function(e,r){t.__plugins[e]=r},t.prototype.initPlugins=function(){this.plugins=this.plugins||{};for(var e in t.__plugins)this.plugins[e]=new t.__plugins[e](this)},t.prototype.destroyPlugins=function(){for(var t in this.plugins)this.plugins[t].destroy(),this.plugins[t]=null;this.plugins=null}}e.exports={mixin:function(t){i(t)}}},{}],107:[function(t,e,r){var i=t("./core"),n=t("./mesh"),o=t("./extras"),s=t("./filters");i.SpriteBatch=function(){throw new ReferenceError("SpriteBatch does not exist any more, please use the new ParticleContainer instead.")},i.AssetLoader=function(){throw new ReferenceError("The loader system was overhauled in pixi v3, please see the new PIXI.loaders.Loader class.")},Object.defineProperties(i,{Stage:{get:function(){return console.warn("You do not need to use a PIXI Stage any more, you can simply render any container."),i.Container}},DisplayObjectContainer:{get:function(){return console.warn("DisplayObjectContainer has been shortened to Container, please use Container from now on."),i.Container}},Strip:{get:function(){return console.warn("The Strip class has been renamed to Mesh and moved to mesh.Mesh, please use mesh.Mesh from now on."),n.Mesh}},Rope:{get:function(){return console.warn("The Rope class has been moved to mesh.Rope, please use mesh.Rope from now on."),n.Rope}},MovieClip:{get:function(){return console.warn("The MovieClip class has been moved to extras.MovieClip, please use extras.MovieClip from now on."),o.MovieClip}},TilingSprite:{get:function(){return console.warn("The TilingSprite class has been moved to extras.TilingSprite, please use extras.TilingSprite from now on."),o.TilingSprite}},BitmapText:{get:function(){return console.warn("The BitmapText class has been moved to extras.BitmapText, please use extras.BitmapText from now on."),o.BitmapText}},blendModes:{get:function(){return console.warn("The blendModes has been moved to BLEND_MODES, please use BLEND_MODES from now on."),i.BLEND_MODES}},scaleModes:{get:function(){return console.warn("The scaleModes has been moved to SCALE_MODES, please use SCALE_MODES from now on."),i.SCALE_MODES}},BaseTextureCache:{get:function(){return console.warn("The BaseTextureCache class has been moved to utils.BaseTextureCache, please use utils.BaseTextureCache from now on."),i.utils.BaseTextureCache}},TextureCache:{get:function(){return console.warn("The TextureCache class has been moved to utils.TextureCache, please use utils.TextureCache from now on."),i.utils.TextureCache}},math:{get:function(){return console.warn("The math namespace is deprecated, please access members already accessible on PIXI."),i}}}),i.Sprite.prototype.setTexture=function(t){this.texture=t,console.warn("setTexture is now deprecated, please use the texture property, e.g : sprite.texture = texture;")},o.BitmapText.prototype.setText=function(t){this.text=t,console.warn("setText is now deprecated, please use the text property, e.g : myBitmapText.text = 'my text';")},i.Text.prototype.setText=function(t){this.text=t,console.warn("setText is now deprecated, please use the text property, e.g : myText.text = 'my text';")},i.Text.prototype.setStyle=function(t){this.style=t,console.warn("setStyle is now deprecated, please use the style property, e.g : myText.style = style;")},i.Texture.prototype.setFrame=function(t){this.frame=t,console.warn("setFrame is now deprecated, please use the frame property, e.g : myTexture.frame = frame;")},Object.defineProperties(s,{AbstractFilter:{get:function(){return console.warn("filters.AbstractFilter is an undocumented alias, please use AbstractFilter from now on."),i.AbstractFilter}},FXAAFilter:{get:function(){return console.warn("filters.FXAAFilter is an undocumented alias, please use FXAAFilter from now on."),i.FXAAFilter}},SpriteMaskFilter:{get:function(){return console.warn("filters.SpriteMaskFilter is an undocumented alias, please use SpriteMaskFilter from now on."),i.SpriteMaskFilter}}}),i.utils.uuid=function(){return console.warn("utils.uuid() is deprecated, please use utils.uid() from now on."),i.utils.uid()}},{"./core":52,"./extras":114,"./filters":131,"./mesh":156}],108:[function(t,e,r){function i(t,e){n.Container.call(this),e=e||{},this.textWidth=0,this.textHeight=0,this._glyphs=[],this._font={tint:void 0!==e.tint?e.tint:16777215,align:e.align||"left",name:null,size:0},this.font=e.font,this._text=t,this.maxWidth=0,this.maxLineHeight=0,this.dirty=!1,this.updateText()}var n=t("../core");i.prototype=Object.create(n.Container.prototype),i.prototype.constructor=i,e.exports=i,Object.defineProperties(i.prototype,{tint:{get:function(){return this._font.tint},set:function(t){this._font.tint="number"==typeof t&&t>=0?t:16777215,this.dirty=!0}},align:{get:function(){return this._font.align},set:function(t){this._font.align=t||"left",this.dirty=!0}},font:{get:function(){return this._font},set:function(t){t&&("string"==typeof t?(t=t.split(" "),this._font.name=1===t.length?t[0]:t.slice(1).join(" "),this._font.size=t.length>=2?parseInt(t[0],10):i.fonts[this._font.name].size):(this._font.name=t.name,this._font.size="number"==typeof t.size?t.size:parseInt(t.size,10)),this.dirty=!0)}},text:{get:function(){return this._text},set:function(t){t=t.toString()||" ",this._text!==t&&(this._text=t,this.dirty=!0)}}}),i.prototype.updateText=function(){for(var t=i.fonts[this._font.name],e=new n.Point,r=null,o=[],s=0,a=0,h=[],u=0,l=this._font.size/t.size,c=-1,p=0,d=0;d0&&e.x*l>this.maxWidth)n.utils.removeItems(o,c,d-c),d=c,c=-1,h.push(s),a=Math.max(a,s),u++,e.x=0,e.y+=t.lineHeight,r=null;else{var v=t.chars[f];v&&(r&&v.kerning[r]&&(e.x+=v.kerning[r]),o.push({texture:v.texture,line:u,charCode:f,position:new n.Point(e.x+v.xOffset,e.y+v.yOffset)}),s=e.x+(v.texture.width+v.xOffset),e.x+=v.xAdvance,p=Math.max(p,v.yOffset+v.texture.height),r=f)}}h.push(s),a=Math.max(a,s);var g=[];for(d=0;u>=d;d++){var m=0;"right"===this._font.align?m=a-h[d]:"center"===this._font.align&&(m=(a-h[d])/2),g.push(m)}var y=o.length,x=this.tint;for(d=0;y>d;d++){var b=this._glyphs[d];b?b.texture=o[d].texture:(b=new n.Sprite(o[d].texture),this._glyphs.push(b)),b.position.x=(o[d].position.x+g[o[d].line])*l,b.position.y=o[d].position.y*l, +b.scale.x=b.scale.y=l,b.tint=x,b.parent||this.addChild(b)}for(d=y;dt&&(t+=this._textures.length),t}}}),i.prototype.stop=function(){this.playing&&(this.playing=!1,n.ticker.shared.remove(this.update,this))},i.prototype.play=function(){this.playing||(this.playing=!0,n.ticker.shared.add(this.update,this))},i.prototype.gotoAndStop=function(t){this.stop(),this._currentTime=t,this._texture=this._textures[this.currentFrame]},i.prototype.gotoAndPlay=function(t){this._currentTime=t,this.play()},i.prototype.update=function(t){var e=this.animationSpeed*t;if(null!==this._durations){var r=this._currentTime%1*this._durations[this.currentFrame];for(r+=e/60*1e3;0>r;)this._currentTime--,r+=this._durations[this.currentFrame];var i=Math.sign(this.animationSpeed*t);for(this._currentTime=Math.floor(this._currentTime);r>=this._durations[this.currentFrame];)r-=this._durations[this.currentFrame]*i,this._currentTime+=i;this._currentTime+=r/this._durations[this.currentFrame]}else this._currentTime+=e;this._currentTime<0&&!this.loop?(this.gotoAndStop(0),this.onComplete&&this.onComplete()):this._currentTime>=this._textures.length&&!this.loop?(this.gotoAndStop(this._textures.length-1),this.onComplete&&this.onComplete()):this._texture=this._textures[this.currentFrame]},i.prototype.destroy=function(){this.stop(),n.Sprite.prototype.destroy.call(this)},i.fromFrames=function(t){for(var e=[],r=0;rx?x:t,t=t>_?_:t,t=t>E?E:t,r=y,r=r>b?b:r,r=r>T?T:r,r=r>S?S:r,e=m,e=x>e?x:e,e=_>e?_:e,e=E>e?E:e,i=y,i=b>i?b:i,i=T>i?T:i,i=S>i?S:i;var w=this._bounds;return w.x=t,w.width=e-t,w.y=r,w.height=i-r,this._currentBounds=w,w},i.prototype.containsPoint=function(t){this.worldTransform.applyInverse(t,o);var e,r=this._width,i=this._height,n=-r*this.anchor.x;return o.x>n&&o.xe&&o.y 0.2) n = 65600.0; // :\n if (gray > 0.3) n = 332772.0; // *\n if (gray > 0.4) n = 15255086.0; // o\n if (gray > 0.5) n = 23385164.0; // &\n if (gray > 0.6) n = 15252014.0; // 8\n if (gray > 0.7) n = 13199452.0; // @\n if (gray > 0.8) n = 11512810.0; // #\n\n vec2 p = mod( uv / ( pixelSize * 0.5 ), 2.0) - vec2(1.0);\n col = col * character(n, p);\n\n gl_FragColor = vec4(col, 1.0);\n}\n",{dimensions:{type:"4fv",value:new Float32Array([0,0,0,0])},pixelSize:{type:"1f",value:8}})}var n=t("../../core");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i,Object.defineProperties(i.prototype,{size:{get:function(){return this.uniforms.pixelSize.value},set:function(t){this.uniforms.pixelSize.value=t}}})},{"../../core":52}],116:[function(t,e,r){function i(){n.AbstractFilter.call(this),this.blurXFilter=new o,this.blurYFilter=new s,this.defaultFilter=new n.AbstractFilter}var n=t("../../core"),o=t("../blur/BlurXFilter"),s=t("../blur/BlurYFilter");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.applyFilter=function(t,e,r){var i=t.filterManager.getRenderTarget(!0);this.defaultFilter.applyFilter(t,e,r),this.blurXFilter.applyFilter(t,e,i),t.blendModeManager.setBlendMode(n.BLEND_MODES.SCREEN),this.blurYFilter.applyFilter(t,i,r),t.blendModeManager.setBlendMode(n.BLEND_MODES.NORMAL),t.filterManager.returnRenderTarget(i)},Object.defineProperties(i.prototype,{blur:{get:function(){return this.blurXFilter.blur},set:function(t){this.blurXFilter.blur=this.blurYFilter.blur=t}},blurX:{get:function(){return this.blurXFilter.blur},set:function(t){this.blurXFilter.blur=t}},blurY:{get:function(){return this.blurYFilter.blur},set:function(t){this.blurYFilter.blur=t}}})},{"../../core":52,"../blur/BlurXFilter":119,"../blur/BlurYFilter":120}],117:[function(t,e,r){function i(t,e){n.AbstractFilter.call(this,"attribute vec2 aVertexPosition;\nattribute vec2 aTextureCoord;\nattribute vec4 aColor;\n\nuniform float strength;\nuniform float dirX;\nuniform float dirY;\nuniform mat3 projectionMatrix;\n\nvarying vec2 vTextureCoord;\nvarying vec4 vColor;\nvarying vec2 vBlurTexCoords[3];\n\nvoid main(void)\n{\n gl_Position = vec4((projectionMatrix * vec3((aVertexPosition), 1.0)).xy, 0.0, 1.0);\n vTextureCoord = aTextureCoord;\n\n vBlurTexCoords[0] = aTextureCoord + vec2( (0.004 * strength) * dirX, (0.004 * strength) * dirY );\n vBlurTexCoords[1] = aTextureCoord + vec2( (0.008 * strength) * dirX, (0.008 * strength) * dirY );\n vBlurTexCoords[2] = aTextureCoord + vec2( (0.012 * strength) * dirX, (0.012 * strength) * dirY );\n\n vColor = vec4(aColor.rgb * aColor.a, aColor.a);\n}\n","precision lowp float;\n\nvarying vec2 vTextureCoord;\nvarying vec2 vBlurTexCoords[3];\nvarying vec4 vColor;\n\nuniform sampler2D uSampler;\n\nvoid main(void)\n{\n gl_FragColor = vec4(0.0);\n\n gl_FragColor += texture2D(uSampler, vTextureCoord ) * 0.3989422804014327;\n gl_FragColor += texture2D(uSampler, vBlurTexCoords[ 0]) * 0.2419707245191454;\n gl_FragColor += texture2D(uSampler, vBlurTexCoords[ 1]) * 0.05399096651318985;\n gl_FragColor += texture2D(uSampler, vBlurTexCoords[ 2]) * 0.004431848411938341;\n}\n",{strength:{type:"1f",value:1},dirX:{type:"1f",value:t||0},dirY:{type:"1f",value:e||0}}),this.defaultFilter=new n.AbstractFilter,this.passes=1,this.dirX=t||0,this.dirY=e||0,this.strength=4}var n=t("../../core");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.applyFilter=function(t,e,r,i){var n=this.getShader(t);if(this.uniforms.strength.value=this.strength/4/this.passes*(e.frame.width/e.size.width),1===this.passes)t.filterManager.applyFilter(n,e,r,i);else{var o=t.filterManager.getRenderTarget(!0);t.filterManager.applyFilter(n,e,o,i);for(var s=0;s>16&255)/255,s=(r>>8&255)/255,a=(255&r)/255,h=(i>>16&255)/255,u=(i>>8&255)/255,l=(255&i)/255,c=[.3,.59,.11,0,0,o,s,a,t,0,h,u,l,e,0,o-h,s-u,a-l,0,0];this._loadMatrix(c,n)},i.prototype.night=function(t,e){t=t||.1;var r=[-2*t,-t,0,0,0,-t,0,t,0,0,0,t,2*t,0,0,0,0,0,1,0];this._loadMatrix(r,e)},i.prototype.predator=function(t,e){var r=[11.224130630493164*t,-4.794486999511719*t,-2.8746118545532227*t,0*t,.40342438220977783*t,-3.6330697536468506*t,9.193157196044922*t,-2.951810836791992*t,0*t,-1.316135048866272*t,-3.2184197902679443*t,-4.2375030517578125*t,7.476448059082031*t,0*t,.8044459223747253*t,0,0,0,1,0];this._loadMatrix(r,e)},i.prototype.lsd=function(t){var e=[2,-.4,.5,0,0,-.5,2,-.4,0,0,-.4,-.5,3,0,0,0,0,0,1,0];this._loadMatrix(e,t)},i.prototype.reset=function(){var t=[1,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,1,0];this._loadMatrix(t,!1)},Object.defineProperties(i.prototype,{matrix:{get:function(){return this.uniforms.m.value},set:function(t){this.uniforms.m.value=t}}})},{"../../core":52}],123:[function(t,e,r){function i(){n.AbstractFilter.call(this,null,"precision mediump float;\n\nvarying vec2 vTextureCoord;\n\nuniform sampler2D uSampler;\nuniform float step;\n\nvoid main(void)\n{\n vec4 color = texture2D(uSampler, vTextureCoord);\n\n color = floor(color * step) / step;\n\n gl_FragColor = color;\n}\n",{step:{type:"1f",value:5}})}var n=t("../../core");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i,Object.defineProperties(i.prototype,{step:{get:function(){return this.uniforms.step.value},set:function(t){this.uniforms.step.value=t}}})},{"../../core":52}],124:[function(t,e,r){function i(t,e,r){n.AbstractFilter.call(this,null,"precision mediump float;\n\nvarying mediump vec2 vTextureCoord;\n\nuniform sampler2D uSampler;\nuniform vec2 texelSize;\nuniform float matrix[9];\n\nvoid main(void)\n{\n vec4 c11 = texture2D(uSampler, vTextureCoord - texelSize); // top left\n vec4 c12 = texture2D(uSampler, vec2(vTextureCoord.x, vTextureCoord.y - texelSize.y)); // top center\n vec4 c13 = texture2D(uSampler, vec2(vTextureCoord.x + texelSize.x, vTextureCoord.y - texelSize.y)); // top right\n\n vec4 c21 = texture2D(uSampler, vec2(vTextureCoord.x - texelSize.x, vTextureCoord.y)); // mid left\n vec4 c22 = texture2D(uSampler, vTextureCoord); // mid center\n vec4 c23 = texture2D(uSampler, vec2(vTextureCoord.x + texelSize.x, vTextureCoord.y)); // mid right\n\n vec4 c31 = texture2D(uSampler, vec2(vTextureCoord.x - texelSize.x, vTextureCoord.y + texelSize.y)); // bottom left\n vec4 c32 = texture2D(uSampler, vec2(vTextureCoord.x, vTextureCoord.y + texelSize.y)); // bottom center\n vec4 c33 = texture2D(uSampler, vTextureCoord + texelSize); // bottom right\n\n gl_FragColor =\n c11 * matrix[0] + c12 * matrix[1] + c13 * matrix[2] +\n c21 * matrix[3] + c22 * matrix[4] + c23 * matrix[5] +\n c31 * matrix[6] + c32 * matrix[7] + c33 * matrix[8];\n\n gl_FragColor.a = c22.a;\n}\n",{ +matrix:{type:"1fv",value:new Float32Array(t)},texelSize:{type:"v2",value:{x:1/e,y:1/r}}})}var n=t("../../core");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i,Object.defineProperties(i.prototype,{matrix:{get:function(){return this.uniforms.matrix.value},set:function(t){this.uniforms.matrix.value=new Float32Array(t)}},width:{get:function(){return 1/this.uniforms.texelSize.value.x},set:function(t){this.uniforms.texelSize.value.x=1/t}},height:{get:function(){return 1/this.uniforms.texelSize.value.y},set:function(t){this.uniforms.texelSize.value.y=1/t}}})},{"../../core":52}],125:[function(t,e,r){function i(){n.AbstractFilter.call(this,null,"precision mediump float;\n\nvarying vec2 vTextureCoord;\n\nuniform sampler2D uSampler;\n\nvoid main(void)\n{\n float lum = length(texture2D(uSampler, vTextureCoord.xy).rgb);\n\n gl_FragColor = vec4(1.0, 1.0, 1.0, 1.0);\n\n if (lum < 1.00)\n {\n if (mod(gl_FragCoord.x + gl_FragCoord.y, 10.0) == 0.0)\n {\n gl_FragColor = vec4(0.0, 0.0, 0.0, 1.0);\n }\n }\n\n if (lum < 0.75)\n {\n if (mod(gl_FragCoord.x - gl_FragCoord.y, 10.0) == 0.0)\n {\n gl_FragColor = vec4(0.0, 0.0, 0.0, 1.0);\n }\n }\n\n if (lum < 0.50)\n {\n if (mod(gl_FragCoord.x + gl_FragCoord.y - 5.0, 10.0) == 0.0)\n {\n gl_FragColor = vec4(0.0, 0.0, 0.0, 1.0);\n }\n }\n\n if (lum < 0.3)\n {\n if (mod(gl_FragCoord.x - gl_FragCoord.y - 5.0, 10.0) == 0.0)\n {\n gl_FragColor = vec4(0.0, 0.0, 0.0, 1.0);\n }\n }\n}\n")}var n=t("../../core");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i},{"../../core":52}],126:[function(t,e,r){function i(t,e){var r=new n.Matrix;t.renderable=!1,n.AbstractFilter.call(this,"attribute vec2 aVertexPosition;\nattribute vec2 aTextureCoord;\nattribute vec4 aColor;\n\nuniform mat3 projectionMatrix;\nuniform mat3 otherMatrix;\n\nvarying vec2 vMapCoord;\nvarying vec2 vTextureCoord;\nvarying vec4 vColor;\n\nvoid main(void)\n{\n gl_Position = vec4((projectionMatrix * vec3(aVertexPosition, 1.0)).xy, 0.0, 1.0);\n vTextureCoord = aTextureCoord;\n vMapCoord = ( otherMatrix * vec3( aTextureCoord, 1.0) ).xy;\n vColor = vec4(aColor.rgb * aColor.a, aColor.a);\n}\n","precision mediump float;\n\nvarying vec2 vMapCoord;\nvarying vec2 vTextureCoord;\nvarying vec4 vColor;\n\nuniform vec2 scale;\n\nuniform sampler2D uSampler;\nuniform sampler2D mapSampler;\n\nvoid main(void)\n{\n vec4 map = texture2D(mapSampler, vMapCoord);\n\n map -= 0.5;\n map.xy *= scale;\n\n gl_FragColor = texture2D(uSampler, vec2(vTextureCoord.x + map.x, vTextureCoord.y + map.y));\n}\n",{mapSampler:{type:"sampler2D",value:t.texture},otherMatrix:{type:"mat3",value:r.toArray(!0)},scale:{type:"v2",value:{x:1,y:1}}}),this.maskSprite=t,this.maskMatrix=r,(null===e||void 0===e)&&(e=20),this.scale=new n.Point(e,e)}var n=t("../../core");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.applyFilter=function(t,e,r){var i=t.filterManager;i.calculateMappedMatrix(e.frame,this.maskSprite,this.maskMatrix),this.uniforms.otherMatrix.value=this.maskMatrix.toArray(!0),this.uniforms.scale.value.x=this.scale.x*(1/e.frame.width),this.uniforms.scale.value.y=this.scale.y*(1/e.frame.height);var n=this.getShader(t);i.applyFilter(n,e,r)},Object.defineProperties(i.prototype,{map:{get:function(){return this.uniforms.mapSampler.value},set:function(t){this.uniforms.mapSampler.value=t}}})},{"../../core":52}],127:[function(t,e,r){function i(){n.AbstractFilter.call(this,null,"precision mediump float;\n\nvarying vec2 vTextureCoord;\nvarying vec4 vColor;\n\nuniform vec4 dimensions;\nuniform sampler2D uSampler;\n\nuniform float angle;\nuniform float scale;\n\nfloat pattern()\n{\n float s = sin(angle), c = cos(angle);\n vec2 tex = vTextureCoord * dimensions.xy;\n vec2 point = vec2(\n c * tex.x - s * tex.y,\n s * tex.x + c * tex.y\n ) * scale;\n return (sin(point.x) * sin(point.y)) * 4.0;\n}\n\nvoid main()\n{\n vec4 color = texture2D(uSampler, vTextureCoord);\n float average = (color.r + color.g + color.b) / 3.0;\n gl_FragColor = vec4(vec3(average * 10.0 - 5.0 + pattern()), color.a);\n}\n",{scale:{type:"1f",value:1},angle:{type:"1f",value:5},dimensions:{type:"4fv",value:[0,0,0,0]}})}var n=t("../../core");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i,Object.defineProperties(i.prototype,{scale:{get:function(){return this.uniforms.scale.value},set:function(t){this.uniforms.scale.value=t}},angle:{get:function(){return this.uniforms.angle.value},set:function(t){this.uniforms.angle.value=t}}})},{"../../core":52}],128:[function(t,e,r){function i(){n.AbstractFilter.call(this,"attribute vec2 aVertexPosition;\nattribute vec2 aTextureCoord;\nattribute vec4 aColor;\n\nuniform float strength;\nuniform vec2 offset;\n\nuniform mat3 projectionMatrix;\n\nvarying vec2 vTextureCoord;\nvarying vec4 vColor;\nvarying vec2 vBlurTexCoords[6];\n\nvoid main(void)\n{\n gl_Position = vec4((projectionMatrix * vec3((aVertexPosition+offset), 1.0)).xy, 0.0, 1.0);\n vTextureCoord = aTextureCoord;\n\n vBlurTexCoords[ 0] = aTextureCoord + vec2(0.0, -0.012 * strength);\n vBlurTexCoords[ 1] = aTextureCoord + vec2(0.0, -0.008 * strength);\n vBlurTexCoords[ 2] = aTextureCoord + vec2(0.0, -0.004 * strength);\n vBlurTexCoords[ 3] = aTextureCoord + vec2(0.0, 0.004 * strength);\n vBlurTexCoords[ 4] = aTextureCoord + vec2(0.0, 0.008 * strength);\n vBlurTexCoords[ 5] = aTextureCoord + vec2(0.0, 0.012 * strength);\n\n vColor = vec4(aColor.rgb * aColor.a, aColor.a);\n}\n","precision lowp float;\n\nvarying vec2 vTextureCoord;\nvarying vec2 vBlurTexCoords[6];\nvarying vec4 vColor;\n\nuniform vec3 color;\nuniform float alpha;\n\nuniform sampler2D uSampler;\n\nvoid main(void)\n{\n vec4 sum = vec4(0.0);\n\n sum += texture2D(uSampler, vBlurTexCoords[ 0])*0.004431848411938341;\n sum += texture2D(uSampler, vBlurTexCoords[ 1])*0.05399096651318985;\n sum += texture2D(uSampler, vBlurTexCoords[ 2])*0.2419707245191454;\n sum += texture2D(uSampler, vTextureCoord )*0.3989422804014327;\n sum += texture2D(uSampler, vBlurTexCoords[ 3])*0.2419707245191454;\n sum += texture2D(uSampler, vBlurTexCoords[ 4])*0.05399096651318985;\n sum += texture2D(uSampler, vBlurTexCoords[ 5])*0.004431848411938341;\n\n gl_FragColor = vec4( color.rgb * sum.a * alpha, sum.a * alpha );\n}\n",{blur:{type:"1f",value:1/512},color:{type:"c",value:[0,0,0]},alpha:{type:"1f",value:.7},offset:{type:"2f",value:[5,5]},strength:{type:"1f",value:1}}),this.passes=1,this.strength=4}var n=t("../../core");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.applyFilter=function(t,e,r,i){var n=this.getShader(t);if(this.uniforms.strength.value=this.strength/4/this.passes*(e.frame.height/e.size.height),1===this.passes)t.filterManager.applyFilter(n,e,r,i);else{for(var o=t.filterManager.getRenderTarget(!0),s=e,a=o,h=0;h= (time - params.z)) )\n {\n float diff = (dist - time);\n float powDiff = 1.0 - pow(abs(diff*params.x), params.y);\n\n float diffTime = diff * powDiff;\n vec2 diffUV = normalize(uv - center);\n texCoord = uv + (diffUV * diffTime);\n }\n\n gl_FragColor = texture2D(uSampler, texCoord);\n}\n",{center:{type:"v2",value:{x:.5,y:.5}},params:{type:"v3",value:{x:10,y:.8,z:.1}},time:{type:"1f",value:0}})}var n=t("../../core");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i,Object.defineProperties(i.prototype,{center:{get:function(){return this.uniforms.center.value},set:function(t){this.uniforms.center.value=t}},params:{get:function(){return this.uniforms.params.value},set:function(t){this.uniforms.params.value=t}},time:{get:function(){return this.uniforms.time.value},set:function(t){this.uniforms.time.value=t}}})},{"../../core":52}],138:[function(t,e,r){function i(){n.AbstractFilter.call(this,null,"precision mediump float;\n\nvarying vec2 vTextureCoord;\n\nuniform sampler2D uSampler;\nuniform float blur;\nuniform float gradientBlur;\nuniform vec2 start;\nuniform vec2 end;\nuniform vec2 delta;\nuniform vec2 texSize;\n\nfloat random(vec3 scale, float seed)\n{\n return fract(sin(dot(gl_FragCoord.xyz + seed, scale)) * 43758.5453 + seed);\n}\n\nvoid main(void)\n{\n vec4 color = vec4(0.0);\n float total = 0.0;\n\n float offset = random(vec3(12.9898, 78.233, 151.7182), 0.0);\n vec2 normal = normalize(vec2(start.y - end.y, end.x - start.x));\n float radius = smoothstep(0.0, 1.0, abs(dot(vTextureCoord * texSize - start, normal)) / gradientBlur) * blur;\n\n for (float t = -30.0; t <= 30.0; t++)\n {\n float percent = (t + offset - 0.5) / 30.0;\n float weight = 1.0 - abs(percent);\n vec4 sample = texture2D(uSampler, vTextureCoord + delta / texSize * percent * radius);\n sample.rgb *= sample.a;\n color += sample * weight;\n total += weight;\n }\n\n gl_FragColor = color / total;\n gl_FragColor.rgb /= gl_FragColor.a + 0.00001;\n}\n",{blur:{type:"1f",value:100},gradientBlur:{type:"1f",value:600},start:{type:"v2",value:{x:0,y:window.innerHeight/2}},end:{type:"v2",value:{x:600,y:window.innerHeight/2}},delta:{type:"v2",value:{x:30,y:30}},texSize:{type:"v2",value:{x:window.innerWidth,y:window.innerHeight}}}),this.updateDelta()}var n=t("../../core");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.updateDelta=function(){this.uniforms.delta.value.x=0,this.uniforms.delta.value.y=0},Object.defineProperties(i.prototype,{blur:{get:function(){return this.uniforms.blur.value},set:function(t){this.uniforms.blur.value=t}},gradientBlur:{get:function(){return this.uniforms.gradientBlur.value},set:function(t){this.uniforms.gradientBlur.value=t}},start:{get:function(){return this.uniforms.start.value},set:function(t){this.uniforms.start.value=t,this.updateDelta()}},end:{get:function(){return this.uniforms.end.value},set:function(t){this.uniforms.end.value=t,this.updateDelta()}}})},{"../../core":52}],139:[function(t,e,r){function i(){n.AbstractFilter.call(this),this.tiltShiftXFilter=new o,this.tiltShiftYFilter=new s}var n=t("../../core"),o=t("./TiltShiftXFilter"),s=t("./TiltShiftYFilter");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.applyFilter=function(t,e,r){var i=t.filterManager.getRenderTarget(!0);this.tiltShiftXFilter.applyFilter(t,e,i),this.tiltShiftYFilter.applyFilter(t,i,r),t.filterManager.returnRenderTarget(i)},Object.defineProperties(i.prototype,{blur:{get:function(){return this.tiltShiftXFilter.blur},set:function(t){this.tiltShiftXFilter.blur=this.tiltShiftYFilter.blur=t}},gradientBlur:{get:function(){return this.tiltShiftXFilter.gradientBlur},set:function(t){this.tiltShiftXFilter.gradientBlur=this.tiltShiftYFilter.gradientBlur=t}},start:{get:function(){return this.tiltShiftXFilter.start},set:function(t){this.tiltShiftXFilter.start=this.tiltShiftYFilter.start=t}},end:{get:function(){return this.tiltShiftXFilter.end},set:function(t){this.tiltShiftXFilter.end=this.tiltShiftYFilter.end=t}}})},{"../../core":52,"./TiltShiftXFilter":140,"./TiltShiftYFilter":141}],140:[function(t,e,r){function i(){n.call(this)}var n=t("./TiltShiftAxisFilter");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.updateDelta=function(){var t=this.uniforms.end.value.x-this.uniforms.start.value.x,e=this.uniforms.end.value.y-this.uniforms.start.value.y,r=Math.sqrt(t*t+e*e);this.uniforms.delta.value.x=t/r,this.uniforms.delta.value.y=e/r}},{"./TiltShiftAxisFilter":138}],141:[function(t,e,r){function i(){n.call(this)}var n=t("./TiltShiftAxisFilter");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.updateDelta=function(){var t=this.uniforms.end.value.x-this.uniforms.start.value.x,e=this.uniforms.end.value.y-this.uniforms.start.value.y,r=Math.sqrt(t*t+e*e);this.uniforms.delta.value.x=-e/r,this.uniforms.delta.value.y=t/r}},{"./TiltShiftAxisFilter":138}],142:[function(t,e,r){function i(){n.AbstractFilter.call(this,null,"precision mediump float;\n\nvarying vec2 vTextureCoord;\n\nuniform sampler2D uSampler;\nuniform float radius;\nuniform float angle;\nuniform vec2 offset;\n\nvoid main(void)\n{\n vec2 coord = vTextureCoord - offset;\n float dist = length(coord);\n\n if (dist < radius)\n {\n float ratio = (radius - dist) / radius;\n float angleMod = ratio * ratio * angle;\n float s = sin(angleMod);\n float c = cos(angleMod);\n coord = vec2(coord.x * c - coord.y * s, coord.x * s + coord.y * c);\n }\n\n gl_FragColor = texture2D(uSampler, coord+offset);\n}\n",{radius:{type:"1f",value:.5},angle:{type:"1f",value:5},offset:{type:"v2",value:{x:.5,y:.5}}})}var n=t("../../core");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i,Object.defineProperties(i.prototype,{offset:{get:function(){return this.uniforms.offset.value},set:function(t){this.uniforms.offset.value=t}},radius:{get:function(){return this.uniforms.radius.value},set:function(t){this.uniforms.radius.value=t}},angle:{get:function(){return this.uniforms.angle.value},set:function(t){this.uniforms.angle.value=t}}})},{"../../core":52}],143:[function(t,e,r){(function(r){t("./polyfill");var i=e.exports=t("./core");i.extras=t("./extras"),i.filters=t("./filters"),i.interaction=t("./interaction"),i.loaders=t("./loaders"),i.mesh=t("./mesh"),i.accessibility=t("./accessibility"),i.loader=new i.loaders.Loader,Object.assign(i,t("./deprecation")),r.PIXI=i}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{"./accessibility":37,"./core":52,"./deprecation":107,"./extras":114,"./filters":131,"./interaction":146,"./loaders":149,"./mesh":156,"./polyfill":161}],144:[function(t,e,r){function i(){this.global=new n.Point,this.target=null,this.originalEvent=null}var n=t("../core");i.prototype.constructor=i,e.exports=i,i.prototype.getLocalPosition=function(t,e,r){return t.worldTransform.applyInverse(r||this.global,e)}},{"../core":52}],145:[function(t,e,r){function i(t,e){e=e||{},this.renderer=t,this.autoPreventDefault=void 0!==e.autoPreventDefault?e.autoPreventDefault:!0,this.interactionFrequency=e.interactionFrequency||10,this.mouse=new o,this.eventData={stopped:!1,target:null,type:null,data:this.mouse,stopPropagation:function(){this.stopped=!0}},this.interactiveDataPool=[],this.interactionDOMElement=null,this.eventsAdded=!1,this.onMouseUp=this.onMouseUp.bind(this),this.processMouseUp=this.processMouseUp.bind(this),this.onMouseDown=this.onMouseDown.bind(this),this.processMouseDown=this.processMouseDown.bind(this),this.onMouseMove=this.onMouseMove.bind(this),this.processMouseMove=this.processMouseMove.bind(this),this.onMouseOut=this.onMouseOut.bind(this),this.processMouseOverOut=this.processMouseOverOut.bind(this),this.onTouchStart=this.onTouchStart.bind(this),this.processTouchStart=this.processTouchStart.bind(this),this.onTouchEnd=this.onTouchEnd.bind(this),this.processTouchEnd=this.processTouchEnd.bind(this),this.onTouchMove=this.onTouchMove.bind(this),this.processTouchMove=this.processTouchMove.bind(this),this.last=0,this.currentCursorStyle="inherit",this._tempPoint=new n.Point,this.resolution=1,this.setTargetElement(this.renderer.view,this.renderer.resolution)}var n=t("../core"),o=t("./InteractionData");Object.assign(n.DisplayObject.prototype,t("./interactiveTarget")),i.prototype.constructor=i,e.exports=i,i.prototype.setTargetElement=function(t,e){this.removeEvents(),this.interactionDOMElement=t,this.resolution=e||1,this.addEvents()},i.prototype.addEvents=function(){this.interactionDOMElement&&(n.ticker.shared.add(this.update,this),window.navigator.msPointerEnabled&&(this.interactionDOMElement.style["-ms-content-zooming"]="none",this.interactionDOMElement.style["-ms-touch-action"]="none"),window.document.addEventListener("mousemove",this.onMouseMove,!0),this.interactionDOMElement.addEventListener("mousedown",this.onMouseDown,!0),this.interactionDOMElement.addEventListener("mouseout",this.onMouseOut,!0),this.interactionDOMElement.addEventListener("touchstart",this.onTouchStart,!0),this.interactionDOMElement.addEventListener("touchend",this.onTouchEnd,!0),this.interactionDOMElement.addEventListener("touchmove",this.onTouchMove,!0),window.addEventListener("mouseup",this.onMouseUp,!0),this.eventsAdded=!0)},i.prototype.removeEvents=function(){this.interactionDOMElement&&(n.ticker.shared.remove(this.update),window.navigator.msPointerEnabled&&(this.interactionDOMElement.style["-ms-content-zooming"]="",this.interactionDOMElement.style["-ms-touch-action"]=""),window.document.removeEventListener("mousemove",this.onMouseMove,!0),this.interactionDOMElement.removeEventListener("mousedown",this.onMouseDown,!0),this.interactionDOMElement.removeEventListener("mouseout",this.onMouseOut,!0),this.interactionDOMElement.removeEventListener("touchstart",this.onTouchStart,!0),this.interactionDOMElement.removeEventListener("touchend",this.onTouchEnd,!0),this.interactionDOMElement.removeEventListener("touchmove",this.onTouchMove,!0),this.interactionDOMElement=null,window.removeEventListener("mouseup",this.onMouseUp,!0),this.eventsAdded=!1)},i.prototype.update=function(t){if(this._deltaTime+=t,!(this._deltaTime=0;h--)this.processInteractive(t,a[h],r,i,s)&&(o=!0,s=!1,a[h].interactive&&(i=!1));return n&&(i&&!o&&(e.hitArea?(e.worldTransform.applyInverse(t,this._tempPoint),o=e.hitArea.contains(this._tempPoint.x,this._tempPoint.y)):e.containsPoint&&(o=e.containsPoint(t))),e.interactive&&r(e,o)),o},i.prototype.onMouseDown=function(t){this.mouse.originalEvent=t,this.eventData.data=this.mouse,this.eventData.stopped=!1,this.mapPositionToPoint(this.mouse.global,t.clientX,t.clientY),this.autoPreventDefault&&this.mouse.originalEvent.preventDefault(),this.processInteractive(this.mouse.global,this.renderer._lastObjectRendered,this.processMouseDown,!0)},i.prototype.processMouseDown=function(t,e){var r=this.mouse.originalEvent,i=2===r.button||3===r.which;e&&(t[i?"_isRightDown":"_isLeftDown"]=!0,this.dispatchEvent(t,i?"rightdown":"mousedown",this.eventData))},i.prototype.onMouseUp=function(t){this.mouse.originalEvent=t,this.eventData.data=this.mouse,this.eventData.stopped=!1,this.mapPositionToPoint(this.mouse.global,t.clientX,t.clientY),this.processInteractive(this.mouse.global,this.renderer._lastObjectRendered,this.processMouseUp,!0)},i.prototype.processMouseUp=function(t,e){var r=this.mouse.originalEvent,i=2===r.button||3===r.which,n=i?"_isRightDown":"_isLeftDown";e?(this.dispatchEvent(t,i?"rightup":"mouseup",this.eventData),t[n]&&(t[n]=!1,this.dispatchEvent(t,i?"rightclick":"click",this.eventData))):t[n]&&(t[n]=!1,this.dispatchEvent(t,i?"rightupoutside":"mouseupoutside",this.eventData))},i.prototype.onMouseMove=function(t){this.mouse.originalEvent=t,this.eventData.data=this.mouse,this.eventData.stopped=!1,this.mapPositionToPoint(this.mouse.global,t.clientX,t.clientY),this.didMove=!0,this.cursor="inherit",this.processInteractive(this.mouse.global,this.renderer._lastObjectRendered,this.processMouseMove,!0),this.currentCursorStyle!==this.cursor&&(this.currentCursorStyle=this.cursor,this.interactionDOMElement.style.cursor=this.cursor)},i.prototype.processMouseMove=function(t,e){this.dispatchEvent(t,"mousemove",this.eventData),this.processMouseOverOut(t,e)},i.prototype.onMouseOut=function(t){this.mouse.originalEvent=t,this.eventData.stopped=!1,this.mapPositionToPoint(this.mouse.global,t.clientX,t.clientY),this.interactionDOMElement.style.cursor="inherit",this.mapPositionToPoint(this.mouse.global,t.clientX,t.clientY),this.processInteractive(this.mouse.global,this.renderer._lastObjectRendered,this.processMouseOverOut,!1)},i.prototype.processMouseOverOut=function(t,e){e?(t._over||(t._over=!0,this.dispatchEvent(t,"mouseover",this.eventData)),t.buttonMode&&(this.cursor=t.defaultCursor)):t._over&&(t._over=!1,this.dispatchEvent(t,"mouseout",this.eventData))},i.prototype.onTouchStart=function(t){this.autoPreventDefault&&t.preventDefault();for(var e=t.changedTouches,r=e.length,i=0;r>i;i++){var n=e[i],o=this.getTouchData(n);o.originalEvent=t,this.eventData.data=o,this.eventData.stopped=!1,this.processInteractive(o.global,this.renderer._lastObjectRendered,this.processTouchStart,!0),this.returnTouchData(o)}},i.prototype.processTouchStart=function(t,e){e&&(t._touchDown=!0,this.dispatchEvent(t,"touchstart",this.eventData))},i.prototype.onTouchEnd=function(t){this.autoPreventDefault&&t.preventDefault();for(var e=t.changedTouches,r=e.length,i=0;r>i;i++){var n=e[i],o=this.getTouchData(n);o.originalEvent=t,this.eventData.data=o,this.eventData.stopped=!1,this.processInteractive(o.global,this.renderer._lastObjectRendered,this.processTouchEnd,!0),this.returnTouchData(o)}},i.prototype.processTouchEnd=function(t,e){e?(this.dispatchEvent(t,"touchend",this.eventData),t._touchDown&&(t._touchDown=!1,this.dispatchEvent(t,"tap",this.eventData))):t._touchDown&&(t._touchDown=!1,this.dispatchEvent(t,"touchendoutside",this.eventData))},i.prototype.onTouchMove=function(t){this.autoPreventDefault&&t.preventDefault();for(var e=t.changedTouches,r=e.length,i=0;r>i;i++){var n=e[i],o=this.getTouchData(n);o.originalEvent=t, +this.eventData.data=o,this.eventData.stopped=!1,this.processInteractive(o.global,this.renderer._lastObjectRendered,this.processTouchMove,!0),this.returnTouchData(o)}},i.prototype.processTouchMove=function(t,e){e=e,this.dispatchEvent(t,"touchmove",this.eventData)},i.prototype.getTouchData=function(t){var e=this.interactiveDataPool.pop();return e||(e=new o),e.identifier=t.identifier,this.mapPositionToPoint(e.global,t.clientX,t.clientY),navigator.isCocoonJS&&(e.global.x=e.global.x/this.resolution,e.global.y=e.global.y/this.resolution),t.globalX=e.global.x,t.globalY=e.global.y,e},i.prototype.returnTouchData=function(t){this.interactiveDataPool.push(t)},i.prototype.destroy=function(){this.removeEvents(),this.renderer=null,this.mouse=null,this.eventData=null,this.interactiveDataPool=null,this.interactionDOMElement=null,this.onMouseUp=null,this.processMouseUp=null,this.onMouseDown=null,this.processMouseDown=null,this.onMouseMove=null,this.processMouseMove=null,this.onMouseOut=null,this.processMouseOverOut=null,this.onTouchStart=null,this.processTouchStart=null,this.onTouchEnd=null,this.processTouchEnd=null,this.onTouchMove=null,this.processTouchMove=null,this._tempPoint=null},n.WebGLRenderer.registerPlugin("interaction",i),n.CanvasRenderer.registerPlugin("interaction",i)},{"../core":52,"./InteractionData":144,"./interactiveTarget":147}],146:[function(t,e,r){e.exports={InteractionData:t("./InteractionData"),InteractionManager:t("./InteractionManager"),interactiveTarget:t("./interactiveTarget")}},{"./InteractionData":144,"./InteractionManager":145,"./interactiveTarget":147}],147:[function(t,e,r){var i={interactive:!1,buttonMode:!1,interactiveChildren:!0,defaultCursor:"pointer",_over:!1,_touchDown:!1};e.exports=i},{}],148:[function(t,e,r){function i(t,e){var r={},i=t.data.getElementsByTagName("info")[0],n=t.data.getElementsByTagName("common")[0];r.font=i.getAttribute("face"),r.size=parseInt(i.getAttribute("size"),10),r.lineHeight=parseInt(n.getAttribute("lineHeight"),10),r.chars={};for(var a=t.data.getElementsByTagName("char"),h=0;hn;n++){var o=2*n;this._renderCanvasDrawTriangle(t,e,r,o,o+2,o+4)}},i.prototype._renderCanvasTriangles=function(t){for(var e=this.vertices,r=this.uvs,i=this.indices,n=i.length,o=0;n>o;o+=3){var s=2*i[o],a=2*i[o+1],h=2*i[o+2];this._renderCanvasDrawTriangle(t,e,r,s,a,h)}},i.prototype._renderCanvasDrawTriangle=function(t,e,r,i,n,o){var s=this._texture.baseTexture.source,a=this._texture.baseTexture.width,h=this._texture.baseTexture.height,u=e[i],l=e[n],c=e[o],p=e[i+1],d=e[n+1],f=e[o+1],v=r[i]*a,g=r[n]*a,m=r[o]*a,y=r[i+1]*h,x=r[n+1]*h,b=r[o+1]*h;if(this.canvasPadding>0){var _=this.canvasPadding/this.worldTransform.a,T=this.canvasPadding/this.worldTransform.d,E=(u+l+c)/3,S=(p+d+f)/3,w=u-E,C=p-S,A=Math.sqrt(w*w+C*C);u=E+w/A*(A+_),p=S+C/A*(A+T),w=l-E,C=d-S,A=Math.sqrt(w*w+C*C),l=E+w/A*(A+_),d=S+C/A*(A+T),w=c-E,C=f-S,A=Math.sqrt(w*w+C*C),c=E+w/A*(A+_),f=S+C/A*(A+T)}t.save(),t.beginPath(),t.moveTo(u,p),t.lineTo(l,d),t.lineTo(c,f),t.closePath(),t.clip();var M=v*x+y*m+g*b-x*m-y*g-v*b,R=u*x+y*c+l*b-x*c-y*l-u*b,O=v*l+u*m+g*c-l*m-u*g-v*c,P=v*x*c+y*l*m+u*g*b-u*x*m-y*g*c-v*l*b,D=p*x+y*f+d*b-x*f-y*d-p*b,F=v*d+p*m+g*f-d*m-p*g-v*f,L=v*x*f+y*d*m+p*g*b-p*x*m-y*g*f-v*d*b;t.transform(R/M,D/M,O/M,F/M,P/M,L/M),t.drawImage(s,0,0),t.restore()},i.prototype.renderMeshFlat=function(t){var e=this.context,r=t.vertices,i=r.length/2;e.beginPath();for(var n=1;i-2>n;n++){var o=2*n,s=r[o],a=r[o+2],h=r[o+4],u=r[o+1],l=r[o+3],c=r[o+5];e.moveTo(s,u),e.lineTo(a,l),e.lineTo(h,c)}e.fillStyle="#FF0000",e.fill(),e.closePath()},i.prototype._onTextureUpdate=function(){this.updateFrame=!0},i.prototype.getBounds=function(t){if(!this._currentBounds){for(var e=t||this.worldTransform,r=e.a,i=e.b,o=e.c,s=e.d,a=e.tx,h=e.ty,u=-(1/0),l=-(1/0),c=1/0,p=1/0,d=this.vertices,f=0,v=d.length;v>f;f+=2){var g=d[f],m=d[f+1],y=r*g+o*m+a,x=s*m+i*g+h;c=c>y?y:c,p=p>x?x:p,u=y>u?y:u,l=x>l?x:l}if(c===-(1/0)||l===1/0)return n.Rectangle.EMPTY;var b=this._bounds;b.x=c,b.width=u-c,b.y=p,b.height=l-p,this._currentBounds=b}return this._currentBounds},i.prototype.containsPoint=function(t){if(!this.getBounds().contains(t.x,t.y))return!1;this.worldTransform.applyInverse(t,o);var e,r,n=this.vertices,a=s.points;if(this.drawMode===i.DRAW_MODES.TRIANGLES){var h=this.indices;for(r=this.indices.length,e=0;r>e;e+=3){var u=2*h[e],l=2*h[e+1],c=2*h[e+2];if(a[0]=n[u],a[1]=n[u+1],a[2]=n[l],a[3]=n[l+1],a[4]=n[c],a[5]=n[c+1],s.contains(o.x,o.y))return!0}}else for(r=n.length,e=0;r>e;e+=6)if(a[0]=n[e],a[1]=n[e+1],a[2]=n[e+2],a[3]=n[e+3],a[4]=n[e+4],a[5]=n[e+5],s.contains(o.x,o.y))return!0;return!1},i.DRAW_MODES={TRIANGLE_MESH:0,TRIANGLES:1}},{"../core":52}],154:[function(t,e,r){function i(t,e,r){n.call(this,t),this._ready=!0,this.segmentsX=e||10,this.segmentsY=r||10,this.drawMode=n.DRAW_MODES.TRIANGLES,this.refresh()}var n=t("./Mesh");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.refresh=function(){var t=this.segmentsX*this.segmentsY,e=[],r=[],i=[],n=[],o=this.texture,s=this.segmentsX-1,a=this.segmentsY-1,h=0,u=o.width/s,l=o.height/a;for(h=0;t>h;h++){var c=h%this.segmentsX,p=h/this.segmentsX|0;e.push(c*u,p*l),i.push(o._uvs.x0+(o._uvs.x1-o._uvs.x0)*(c/(this.segmentsX-1)),o._uvs.y0+(o._uvs.y3-o._uvs.y0)*(p/(this.segmentsY-1)))}var d=s*a;for(h=0;d>h;h++){var f=h%s,v=h/s|0,g=v*this.segmentsX+f,m=v*this.segmentsX+f+1,y=(v+1)*this.segmentsX+f,x=(v+1)*this.segmentsX+f+1;n.push(g,m,y),n.push(m,x,y)}this.vertices=new Float32Array(e),this.uvs=new Float32Array(i),this.colors=new Float32Array(r),this.indices=new Uint16Array(n)},i.prototype._onTextureUpdate=function(){n.prototype._onTextureUpdate.call(this),this._ready&&this.refresh()}},{"./Mesh":153}],155:[function(t,e,r){function i(t,e){n.call(this,t),this.points=e,this.vertices=new Float32Array(4*e.length),this.uvs=new Float32Array(4*e.length),this.colors=new Float32Array(2*e.length),this.indices=new Uint16Array(2*e.length),this._ready=!0,this.refresh()}var n=t("./Mesh"),o=t("../core");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.refresh=function(){var t=this.points;if(!(t.length<1)&&this._texture._uvs){var e=this.uvs,r=this.indices,i=this.colors,n=this._texture._uvs,s=new o.Point(n.x0,n.y0),a=new o.Point(n.x2-n.x0,n.y2-n.y0);e[0]=0+s.x,e[1]=0+s.y,e[2]=0+s.x,e[3]=1*a.y+s.y,i[0]=1,i[1]=1,r[0]=0,r[1]=1;for(var h,u,l,c=t.length,p=1;c>p;p++)h=t[p],u=4*p,l=p/(c-1),e[u]=l*a.x+s.x,e[u+1]=0+s.y,e[u+2]=l*a.x+s.x,e[u+3]=1*a.y+s.y,u=2*p,i[u]=1,i[u+1]=1,u=2*p,r[u]=u,r[u+1]=u+1;this.dirty=!0}},i.prototype._onTextureUpdate=function(){n.prototype._onTextureUpdate.call(this),this._ready&&this.refresh()},i.prototype.updateTransform=function(){var t=this.points;if(!(t.length<1)){for(var e,r,i,n,o,s,a=t[0],h=0,u=0,l=this.vertices,c=t.length,p=0;c>p;p++)r=t[p],i=4*p,e=p1&&(n=1),o=Math.sqrt(h*h+u*u),s=this._texture.height/2,h/=o,u/=o,h*=s,u*=s,l[i]=r.x+h,l[i+1]=r.y+u,l[i+2]=r.x-h,l[i+3]=r.y-u,a=r;this.containerUpdateTransform()}}},{"../core":52,"./Mesh":153}],156:[function(t,e,r){e.exports={Mesh:t("./Mesh"),Plane:t("./Plane"),Rope:t("./Rope"),MeshRenderer:t("./webgl/MeshRenderer"),MeshShader:t("./webgl/MeshShader")}},{"./Mesh":153,"./Plane":154,"./Rope":155,"./webgl/MeshRenderer":157,"./webgl/MeshShader":158}],157:[function(t,e,r){function i(t){n.ObjectRenderer.call(this,t),this.indices=new Uint16Array(15e3);for(var e=0,r=0;15e3>e;e+=6,r+=4)this.indices[e+0]=r+0,this.indices[e+1]=r+1,this.indices[e+2]=r+2,this.indices[e+3]=r+0,this.indices[e+4]=r+2,this.indices[e+5]=r+3;this.currentShader=null}var n=t("../../core"),o=t("../Mesh");i.prototype=Object.create(n.ObjectRenderer.prototype),i.prototype.constructor=i,e.exports=i,n.WebGLRenderer.registerPlugin("mesh",i),i.prototype.onContextChange=function(){},i.prototype.render=function(t){t._vertexBuffer||this._initWebGL(t);var e=this.renderer,r=e.gl,i=t._texture.baseTexture,n=t.shader,s=t.drawMode===o.DRAW_MODES.TRIANGLE_MESH?r.TRIANGLE_STRIP:r.TRIANGLES;e.blendModeManager.setBlendMode(t.blendMode),n=n?n.shaders[r.id]||n.getShader(e):e.shaderManager.plugins.meshShader,this.renderer.shaderManager.setShader(n),n.uniforms.translationMatrix.value=t.worldTransform.toArray(!0),n.uniforms.projectionMatrix.value=e.currentRenderTarget.projectionMatrix.toArray(!0),n.uniforms.alpha.value=t.worldAlpha,n.syncUniforms(),t.dirty?(t.dirty=!1,r.bindBuffer(r.ARRAY_BUFFER,t._vertexBuffer),r.bufferData(r.ARRAY_BUFFER,t.vertices,r.STATIC_DRAW),r.vertexAttribPointer(n.attributes.aVertexPosition,2,r.FLOAT,!1,0,0),r.bindBuffer(r.ARRAY_BUFFER,t._uvBuffer),r.bufferData(r.ARRAY_BUFFER,t.uvs,r.STATIC_DRAW),r.vertexAttribPointer(n.attributes.aTextureCoord,2,r.FLOAT,!1,0,0),r.activeTexture(r.TEXTURE0),i._glTextures[r.id]?r.bindTexture(r.TEXTURE_2D,i._glTextures[r.id]):this.renderer.updateTexture(i),r.bindBuffer(r.ELEMENT_ARRAY_BUFFER,t._indexBuffer),r.bufferData(r.ELEMENT_ARRAY_BUFFER,t.indices,r.STATIC_DRAW)):(r.bindBuffer(r.ARRAY_BUFFER,t._vertexBuffer),r.bufferSubData(r.ARRAY_BUFFER,0,t.vertices),r.vertexAttribPointer(n.attributes.aVertexPosition,2,r.FLOAT,!1,0,0),r.bindBuffer(r.ARRAY_BUFFER,t._uvBuffer),r.vertexAttribPointer(n.attributes.aTextureCoord,2,r.FLOAT,!1,0,0),r.activeTexture(r.TEXTURE0),i._glTextures[r.id]?r.bindTexture(r.TEXTURE_2D,i._glTextures[r.id]):this.renderer.updateTexture(i),r.bindBuffer(r.ELEMENT_ARRAY_BUFFER,t._indexBuffer),r.bufferSubData(r.ELEMENT_ARRAY_BUFFER,0,t.indices)),r.drawElements(s,t.indices.length,r.UNSIGNED_SHORT,0)},i.prototype._initWebGL=function(t){var e=this.renderer.gl;t._vertexBuffer=e.createBuffer(),t._indexBuffer=e.createBuffer(),t._uvBuffer=e.createBuffer(),e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferData(e.ARRAY_BUFFER,t.vertices,e.DYNAMIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferData(e.ARRAY_BUFFER,t.uvs,e.STATIC_DRAW),t.colors&&(t._colorBuffer=e.createBuffer(),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.bufferData(e.ARRAY_BUFFER,t.colors,e.STATIC_DRAW)),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer),e.bufferData(e.ELEMENT_ARRAY_BUFFER,t.indices,e.STATIC_DRAW)},i.prototype.flush=function(){},i.prototype.start=function(){this.currentShader=null},i.prototype.destroy=function(){n.ObjectRenderer.prototype.destroy.call(this)}},{"../../core":52,"../Mesh":153}],158:[function(t,e,r){function i(t){n.Shader.call(this,t,["precision lowp float;","attribute vec2 aVertexPosition;","attribute vec2 aTextureCoord;","uniform mat3 translationMatrix;","uniform mat3 projectionMatrix;","varying vec2 vTextureCoord;","void main(void){"," gl_Position = vec4((projectionMatrix * translationMatrix * vec3(aVertexPosition, 1.0)).xy, 0.0, 1.0);"," vTextureCoord = aTextureCoord;","}"].join("\n"),["precision lowp float;","varying vec2 vTextureCoord;","uniform float alpha;","uniform sampler2D uSampler;","void main(void){"," gl_FragColor = texture2D(uSampler, vTextureCoord) * alpha ;","}"].join("\n"),{alpha:{type:"1f",value:0},translationMatrix:{type:"mat3",value:new Float32Array(9)},projectionMatrix:{type:"mat3",value:new Float32Array(9)}},{aVertexPosition:0,aTextureCoord:0})}var n=t("../../core");i.prototype=Object.create(n.Shader.prototype),i.prototype.constructor=i,e.exports=i,n.ShaderManager.registerPlugin("meshShader",i)},{"../../core":52}],159:[function(t,e,r){Math.sign||(Math.sign=function(t){return t=+t,0===t||isNaN(t)?t:t>0?1:-1})},{}],160:[function(t,e,r){Object.assign||(Object.assign=t("object-assign"))},{"object-assign":26}],161:[function(t,e,r){t("./Object.assign"),t("./requestAnimationFrame"),t("./Math.sign")},{"./Math.sign":159,"./Object.assign":160,"./requestAnimationFrame":162}],162:[function(t,e,r){(function(t){if(Date.now&&Date.prototype.getTime||(Date.now=function(){return(new Date).getTime()}),!t.performance||!t.performance.now){var e=Date.now();t.performance||(t.performance={}),t.performance.now=function(){return Date.now()-e}}for(var r=Date.now(),i=["ms","moz","webkit","o"],n=0;ni&&(i=0),r=e,setTimeout(function(){r=Date.now(),t(performance.now())},i)}),t.cancelAnimationFrame||(t.cancelAnimationFrame=function(t){clearTimeout(t)})}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{}]},{},[143])(143)}); //# sourceMappingURL=pixi.min.js.map diff --git a/bin/pixi.js b/bin/pixi.js index b57ad10..40862ec 100644 --- a/bin/pixi.js +++ b/bin/pixi.js @@ -1,7 +1,7 @@ /** * @license * pixi.js - v3.0.10-dev - * Compiled 2016-01-17T18:07:22.522Z + * Compiled 2016-01-17T18:16:46.120Z * * pixi.js is licensed under the MIT License. * http://www.opensource.org/licenses/mit-license.php @@ -10864,15 +10864,15 @@ ObjectRenderer = require('../../renderers/webgl/utils/ObjectRenderer'), WebGLRenderer = require('../../renderers/webgl/WebGLRenderer'), WebGLGraphicsData = require('./WebGLGraphicsData'), - PrimitiveShader = require('./PrimitiveShader'), + PrimitiveShader = require('./shaders/PrimitiveShader'), // some drawing functions.. - buildLine = require('./buildLine'); - buildPoly = require('./buildPoly'); - buildComplexPoly = require('./buildComplexPoly'); - buildRectangle = require('./buildRectangle'); - buildRoundedRectangle = require('./buildRoundedRectangle'); - buildCircle = require('./buildCircle'); + buildLine = require('./utils/buildLine'); + buildPoly = require('./utils/buildPoly'); + buildComplexPoly = require('./utils/buildComplexPoly'); + buildRectangle = require('./utils/buildRectangle'); + buildRoundedRectangle = require('./utils/buildRoundedRectangle'); + buildCircle = require('./utils/buildCircle'); earcut = require('earcut'); @@ -11177,59 +11177,7 @@ }; -},{"../../const":38,"../../math":55,"../../renderers/webgl/WebGLRenderer":72,"../../renderers/webgl/utils/ObjectRenderer":87,"../../utils":105,"./PrimitiveShader":44,"./WebGLGraphicsData":45,"./buildCircle":46,"./buildComplexPoly":47,"./buildLine":48,"./buildPoly":49,"./buildRectangle":50,"./buildRoundedRectangle":51,"earcut":24}],44:[function(require,module,exports){ -var Shader = require('pixi-gl-core').GLShader; - -/** - * This shader is used to draw simple primitive shapes for {@link PIXI.Graphics}. - * - * @class - * @memberof PIXI - * @extends PIXI.Shader - * @param shaderManager {ShaderManager} The webgl shader manager this shader works for. - */ -function PrimitiveShader(gl) -{ - Shader.call(this, - gl, - // vertex shader - [ - 'attribute vec2 aVertexPosition;', - 'attribute vec4 aColor;', - - 'uniform mat3 translationMatrix;', - 'uniform mat3 projectionMatrix;', - - 'uniform float alpha;', - 'uniform float flipY;', - 'uniform vec3 tint;', - - 'varying vec4 vColor;', - - 'void main(void){', - ' gl_Position = vec4((projectionMatrix * translationMatrix * vec3(aVertexPosition, 1.0)).xy, 0.0, 1.0);', - ' vColor = aColor * vec4(tint * alpha, alpha);', - '}' - ].join('\n'), - // fragment shader - [ - 'precision mediump float;', - - 'varying vec4 vColor;', - - 'void main(void){', - ' gl_FragColor = vColor;', - '}' - ].join('\n') - ); -} - -PrimitiveShader.prototype = Object.create(Shader.prototype); -PrimitiveShader.prototype.constructor = PrimitiveShader; - -module.exports = PrimitiveShader; - -},{"pixi-gl-core":1}],45:[function(require,module,exports){ +},{"../../const":38,"../../math":55,"../../renderers/webgl/WebGLRenderer":72,"../../renderers/webgl/utils/ObjectRenderer":87,"../../utils":105,"./WebGLGraphicsData":44,"./shaders/PrimitiveShader":45,"./utils/buildCircle":46,"./utils/buildComplexPoly":47,"./utils/buildLine":48,"./utils/buildPoly":49,"./utils/buildRectangle":50,"./utils/buildRoundedRectangle":51,"earcut":24}],44:[function(require,module,exports){ /** * An object containing WebGL specific properties to be used by the WebGL renderer * @@ -11347,9 +11295,61 @@ this.glIndices = null; }; -},{}],46:[function(require,module,exports){ +},{}],45:[function(require,module,exports){ +var Shader = require('pixi-gl-core').GLShader; + +/** + * This shader is used to draw simple primitive shapes for {@link PIXI.Graphics}. + * + * @class + * @memberof PIXI + * @extends PIXI.Shader + * @param shaderManager {ShaderManager} The webgl shader manager this shader works for. + */ +function PrimitiveShader(gl) +{ + Shader.call(this, + gl, + // vertex shader + [ + 'attribute vec2 aVertexPosition;', + 'attribute vec4 aColor;', + + 'uniform mat3 translationMatrix;', + 'uniform mat3 projectionMatrix;', + + 'uniform float alpha;', + 'uniform float flipY;', + 'uniform vec3 tint;', + + 'varying vec4 vColor;', + + 'void main(void){', + ' gl_Position = vec4((projectionMatrix * translationMatrix * vec3(aVertexPosition, 1.0)).xy, 0.0, 1.0);', + ' vColor = aColor * vec4(tint * alpha, alpha);', + '}' + ].join('\n'), + // fragment shader + [ + 'precision mediump float;', + + 'varying vec4 vColor;', + + 'void main(void){', + ' gl_FragColor = vColor;', + '}' + ].join('\n') + ); +} + +PrimitiveShader.prototype = Object.create(Shader.prototype); +PrimitiveShader.prototype.constructor = PrimitiveShader; + +module.exports = PrimitiveShader; + +},{"pixi-gl-core":1}],46:[function(require,module,exports){ var buildLine = require('./buildLine'), - utils = require('../../utils'); + utils = require('../../../utils'); /** * Builds a circle to draw @@ -11426,7 +11426,7 @@ y + Math.cos(seg * i) * height); } - this.buildLine(graphicsData, webGLData); + buildLine(graphicsData, webGLData); graphicsData.points = tempPoints; } @@ -11434,9 +11434,9 @@ module.exports = buildCircle; -},{"../../utils":105,"./buildLine":48}],47:[function(require,module,exports){ +},{"../../../utils":105,"./buildLine":48}],47:[function(require,module,exports){ var buildLine = require('./buildLine'), - utils = require('../../utils'); + utils = require('../../../utils'); @@ -11505,9 +11505,9 @@ module.exports = buildComplexPoly; -},{"../../utils":105,"./buildLine":48}],48:[function(require,module,exports){ -var math = require('../../math'), - utils = require('../../utils'); +},{"../../../utils":105,"./buildLine":48}],48:[function(require,module,exports){ +var math = require('../../../math'), + utils = require('../../../utils'); /** * Builds a line to draw @@ -11725,8 +11725,8 @@ }; module.exports = buildLine; -},{"../../math":55,"../../utils":105}],49:[function(require,module,exports){ -var utils = require('../../utils'); +},{"../../../math":55,"../../../utils":105}],49:[function(require,module,exports){ +var utils = require('../../../utils'); /** * Builds a polygon to draw @@ -11788,9 +11788,9 @@ module.exports = buildPoly; -},{"../../utils":105}],50:[function(require,module,exports){ +},{"../../../utils":105}],50:[function(require,module,exports){ var buildLine = require('./buildLine'), - utils = require('../../utils'); + utils = require('../../../utils'); /** * Builds a rectangle to draw @@ -11859,9 +11859,9 @@ }; module.exports = buildRectangle; -},{"../../utils":105,"./buildLine":48}],51:[function(require,module,exports){ +},{"../../../utils":105,"./buildLine":48}],51:[function(require,module,exports){ var buildLine = require('./buildLine'), - utils = require('../../utils'); + utils = require('../../../utils'); /** * Builds a rounded rectangle to draw @@ -11987,7 +11987,7 @@ module.exports = buildRoundedRectangle; -},{"../../utils":105,"./buildLine":48}],52:[function(require,module,exports){ +},{"../../../utils":105,"./buildLine":48}],52:[function(require,module,exports){ /** * @file Main export of the PIXI core library * @author Mat Groves @@ -30075,6 +30075,6 @@ },{}]},{},[143])(143) }); -//# sourceMappingURL=data:application/json;charset:utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIm5vZGVfbW9kdWxlcy9icm93c2VyaWZ5L25vZGVfbW9kdWxlcy9icm93c2VyLXBhY2svX3ByZWx1ZGUuanMiLCIuLi9waXhpLWdsLWNvcmUvaW5kZXguanMiLCIuLi9waXhpLWdsLWNvcmUvbGliL0dMQnVmZmVyLmpzIiwiLi4vcGl4aS1nbC1jb3JlL2xpYi9HTEZyYW1lYnVmZmVyLmpzIiwiLi4vcGl4aS1nbC1jb3JlL2xpYi9HTFNoYWRlci5qcyIsIi4uL3BpeGktZ2wtY29yZS9saWIvR0xUZXh0dXJlLmpzIiwiLi4vcGl4aS1nbC1jb3JlL2xpYi9WZXJ0ZXhBcnJheU9iamVjdC5qcyIsIi4uL3BpeGktZ2wtY29yZS9saWIvY3JlYXRlQ29udGV4dC5qcyIsIi4uL3BpeGktZ2wtY29yZS9saWIvc2V0VmVydGV4QXR0cmliQXJyYXlzLmpzIiwiLi4vcGl4aS1nbC1jb3JlL2xpYi9zaGFkZXIvY29tcGlsZVByb2dyYW0uanMiLCIuLi9waXhpLWdsLWNvcmUvbGliL3NoYWRlci9kZWZhdWx0VmFsdWUuanMiLCIuLi9waXhpLWdsLWNvcmUvbGliL3NoYWRlci9leHRyYWN0QXR0cmlidXRlcy5qcyIsIi4uL3BpeGktZ2wtY29yZS9saWIvc2hhZGVyL2V4dHJhY3RVbmlmb3Jtcy5qcyIsIi4uL3BpeGktZ2wtY29yZS9saWIvc2hhZGVyL2dlbmVyYXRlVW5pZm9ybUFjY2Vzc09iamVjdC5qcyIsIi4uL3BpeGktZ2wtY29yZS9saWIvc2hhZGVyL21hcFNpemUuanMiLCIuLi9waXhpLWdsLWNvcmUvbGliL3NoYWRlci9tYXBUeXBlLmpzIiwibm9kZV9tb2R1bGVzL2FzeW5jL2xpYi9hc3luYy5qcyIsIm5vZGVfbW9kdWxlcy9icm93c2VyaWZ5L25vZGVfbW9kdWxlcy9wYXRoLWJyb3dzZXJpZnkvaW5kZXguanMiLCJub2RlX21vZHVsZXMvYnJvd3NlcmlmeS9ub2RlX21vZHVsZXMvcHJvY2Vzcy9icm93c2VyLmpzIiwibm9kZV9tb2R1bGVzL2Jyb3dzZXJpZnkvbm9kZV9tb2R1bGVzL3B1bnljb2RlL3B1bnljb2RlLmpzIiwibm9kZV9tb2R1bGVzL2Jyb3dzZXJpZnkvbm9kZV9tb2R1bGVzL3F1ZXJ5c3RyaW5nLWVzMy9kZWNvZGUuanMiLCJub2RlX21vZHVsZXMvYnJvd3NlcmlmeS9ub2RlX21vZHVsZXMvcXVlcnlzdHJpbmctZXMzL2VuY29kZS5qcyIsIm5vZGVfbW9kdWxlcy9icm93c2VyaWZ5L25vZGVfbW9kdWxlcy9xdWVyeXN0cmluZy1lczMvaW5kZXguanMiLCJub2RlX21vZHVsZXMvYnJvd3NlcmlmeS9ub2RlX21vZHVsZXMvdXJsL3VybC5qcyIsIm5vZGVfbW9kdWxlcy9lYXJjdXQvc3JjL2VhcmN1dC5qcyIsIm5vZGVfbW9kdWxlcy9ldmVudGVtaXR0ZXIzL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL29iamVjdC1hc3NpZ24vaW5kZXguanMiLCJub2RlX21vZHVsZXMvcmVzb3VyY2UtbG9hZGVyL25vZGVfbW9kdWxlcy9hc3luYy9saWIvYXN5bmMuanMiLCJub2RlX21vZHVsZXMvcmVzb3VyY2UtbG9hZGVyL3NyYy9Mb2FkZXIuanMiLCJub2RlX21vZHVsZXMvcmVzb3VyY2UtbG9hZGVyL3NyYy9SZXNvdXJjZS5qcyIsIm5vZGVfbW9kdWxlcy9yZXNvdXJjZS1sb2FkZXIvc3JjL2I2NC5qcyIsIm5vZGVfbW9kdWxlcy9yZXNvdXJjZS1sb2FkZXIvc3JjL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL3Jlc291cmNlLWxvYWRlci9zcmMvbWlkZGxld2FyZXMvY2FjaGluZy9tZW1vcnkuanMiLCJub2RlX21vZHVsZXMvcmVzb3VyY2UtbG9hZGVyL3NyYy9taWRkbGV3YXJlcy9wYXJzaW5nL2Jsb2IuanMiLCJwYWNrYWdlLmpzb24iLCJzcmMvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5TWFuYWdlci5qcyIsInNyYy9hY2Nlc3NpYmlsaXR5L2FjY2Vzc2libGVUYXJnZXQuanMiLCJzcmMvYWNjZXNzaWJpbGl0eS9pbmRleC5qcyIsInNyYy9jb3JlL2NvbnN0LmpzIiwic3JjL2NvcmUvZGlzcGxheS9Db250YWluZXIuanMiLCJzcmMvY29yZS9kaXNwbGF5L0Rpc3BsYXlPYmplY3QuanMiLCJzcmMvY29yZS9ncmFwaGljcy9HcmFwaGljcy5qcyIsInNyYy9jb3JlL2dyYXBoaWNzL0dyYXBoaWNzRGF0YS5qcyIsInNyYy9jb3JlL2dyYXBoaWNzL3dlYmdsL0dyYXBoaWNzUmVuZGVyZXIuanMiLCJzcmMvY29yZS9ncmFwaGljcy93ZWJnbC9QcmltaXRpdmVTaGFkZXIuanMiLCJzcmMvY29yZS9ncmFwaGljcy93ZWJnbC9XZWJHTEdyYXBoaWNzRGF0YS5qcyIsInNyYy9jb3JlL2dyYXBoaWNzL3dlYmdsL2J1aWxkQ2lyY2xlLmpzIiwic3JjL2NvcmUvZ3JhcGhpY3Mvd2ViZ2wvYnVpbGRDb21wbGV4UG9seS5qcyIsInNyYy9jb3JlL2dyYXBoaWNzL3dlYmdsL2J1aWxkTGluZS5qcyIsInNyYy9jb3JlL2dyYXBoaWNzL3dlYmdsL2J1aWxkUG9seS5qcyIsInNyYy9jb3JlL2dyYXBoaWNzL3dlYmdsL2J1aWxkUmVjdGFuZ2xlLmpzIiwic3JjL2NvcmUvZ3JhcGhpY3Mvd2ViZ2wvYnVpbGRSb3VuZGVkUmVjdGFuZ2xlLmpzIiwic3JjL2NvcmUvaW5kZXguanMiLCJzcmMvY29yZS9tYXRoL01hdHJpeC5qcyIsInNyYy9jb3JlL21hdGgvUG9pbnQuanMiLCJzcmMvY29yZS9tYXRoL2luZGV4LmpzIiwic3JjL2NvcmUvbWF0aC9zaGFwZXMvQ2lyY2xlLmpzIiwic3JjL2NvcmUvbWF0aC9zaGFwZXMvRWxsaXBzZS5qcyIsInNyYy9jb3JlL21hdGgvc2hhcGVzL1BvbHlnb24uanMiLCJzcmMvY29yZS9tYXRoL3NoYXBlcy9SZWN0YW5nbGUuanMiLCJzcmMvY29yZS9tYXRoL3NoYXBlcy9Sb3VuZGVkUmVjdGFuZ2xlLmpzIiwic3JjL2NvcmUvcGFydGljbGVzL1BhcnRpY2xlQ29udGFpbmVyLmpzIiwic3JjL2NvcmUvcGFydGljbGVzL3dlYmdsL1BhcnRpY2xlQnVmZmVyLmpzIiwic3JjL2NvcmUvcGFydGljbGVzL3dlYmdsL1BhcnRpY2xlUmVuZGVyZXIuanMiLCJzcmMvY29yZS9wYXJ0aWNsZXMvd2ViZ2wvUGFydGljbGVTaGFkZXIuanMiLCJzcmMvY29yZS9yZW5kZXJlcnMvU3lzdGVtUmVuZGVyZXIuanMiLCJzcmMvY29yZS9yZW5kZXJlcnMvY2FudmFzL0NhbnZhc1JlbmRlcmVyLmpzIiwic3JjL2NvcmUvcmVuZGVyZXJzL2NhbnZhcy91dGlscy9DYW52YXNCdWZmZXIuanMiLCJzcmMvY29yZS9yZW5kZXJlcnMvY2FudmFzL3V0aWxzL0NhbnZhc0dyYXBoaWNzLmpzIiwic3JjL2NvcmUvcmVuZGVyZXJzL2NhbnZhcy91dGlscy9DYW52YXNNYXNrTWFuYWdlci5qcyIsInNyYy9jb3JlL3JlbmRlcmVycy9jYW52YXMvdXRpbHMvQ2FudmFzVGludGVyLmpzIiwic3JjL2NvcmUvcmVuZGVyZXJzL3dlYmdsL1RleHR1cmVNYW5hZ2VyLmpzIiwic3JjL2NvcmUvcmVuZGVyZXJzL3dlYmdsL1dlYkdMUmVuZGVyZXIuanMiLCJzcmMvY29yZS9yZW5kZXJlcnMvd2ViZ2wvZmlsdGVycy9BYnN0cmFjdEZpbHRlci5qcyIsInNyYy9jb3JlL3JlbmRlcmVycy93ZWJnbC9maWx0ZXJzL0ZYQUFGaWx0ZXIuanMiLCJzcmMvY29yZS9yZW5kZXJlcnMvd2ViZ2wvZmlsdGVycy9TcHJpdGVNYXNrRmlsdGVyLmpzIiwic3JjL2NvcmUvcmVuZGVyZXJzL3dlYmdsL21hbmFnZXJzL0JsZW5kTW9kZU1hbmFnZXIuanMiLCJzcmMvY29yZS9yZW5kZXJlcnMvd2ViZ2wvbWFuYWdlcnMvRmlsdGVyTWFuYWdlci5qcyIsInNyYy9jb3JlL3JlbmRlcmVycy93ZWJnbC9tYW5hZ2Vycy9NYXNrTWFuYWdlci5qcyIsInNyYy9jb3JlL3JlbmRlcmVycy93ZWJnbC9tYW5hZ2Vycy9TaGFkZXJNYW5hZ2VyLmpzIiwic3JjL2NvcmUvcmVuZGVyZXJzL3dlYmdsL21hbmFnZXJzL1N0ZW5jaWxNYW5hZ2VyLmpzIiwic3JjL2NvcmUvcmVuZGVyZXJzL3dlYmdsL21hbmFnZXJzL1dlYkdMTWFuYWdlci5qcyIsInNyYy9jb3JlL3JlbmRlcmVycy93ZWJnbC9zaGFkZXJzL0NvbXBsZXhQcmltaXRpdmVTaGFkZXIuanMiLCJzcmMvY29yZS9yZW5kZXJlcnMvd2ViZ2wvc2hhZGVycy9QcmltaXRpdmVTaGFkZXIuanMiLCJzcmMvY29yZS9yZW5kZXJlcnMvd2ViZ2wvc2hhZGVycy9TaGFkZXIuanMiLCJzcmMvY29yZS9yZW5kZXJlcnMvd2ViZ2wvc2hhZGVycy9UZXh0dXJlU2hhZGVyLmpzIiwic3JjL2NvcmUvcmVuZGVyZXJzL3dlYmdsL3NoYWRlcnMvX1RleHR1cmVTaGFkZXIuanMiLCJzcmMvY29yZS9yZW5kZXJlcnMvd2ViZ2wvdXRpbHMvT2JqZWN0UmVuZGVyZXIuanMiLCJzcmMvY29yZS9yZW5kZXJlcnMvd2ViZ2wvdXRpbHMvUXVhZC5qcyIsInNyYy9jb3JlL3JlbmRlcmVycy93ZWJnbC91dGlscy9SZW5kZXJUYXJnZXQuanMiLCJzcmMvY29yZS9yZW5kZXJlcnMvd2ViZ2wvdXRpbHMvU3RlbmNpbE1hc2tTdGFjay5qcyIsInNyYy9jb3JlL3JlbmRlcmVycy93ZWJnbC91dGlscy9tYXBXZWJHTEJsZW5kTW9kZXNUb1BpeGkuanMiLCJzcmMvY29yZS9yZW5kZXJlcnMvd2ViZ2wvdXRpbHMvbWFwV2ViR0xEcmF3TW9kZXNUb1BpeGkuanMiLCJzcmMvY29yZS9zcHJpdGVzL1Nwcml0ZS5qcyIsInNyYy9jb3JlL3Nwcml0ZXMvd2ViZ2wvU3ByaXRlUmVuZGVyZXIuanMiLCJzcmMvY29yZS9zcHJpdGVzL3dlYmdsL2dlbmVyYXRlTXVsdGlUZXh0dXJlU2hhZGVyLmpzIiwic3JjL2NvcmUvdGV4dC9UZXh0LmpzIiwic3JjL2NvcmUvdGV4dHVyZXMvQmFzZVRleHR1cmUuanMiLCJzcmMvY29yZS90ZXh0dXJlcy9SZW5kZXJUZXh0dXJlLmpzIiwic3JjL2NvcmUvdGV4dHVyZXMvVGV4dHVyZS5qcyIsInNyYy9jb3JlL3RleHR1cmVzL1RleHR1cmVVdnMuanMiLCJzcmMvY29yZS90ZXh0dXJlcy9WaWRlb0Jhc2VUZXh0dXJlLmpzIiwic3JjL2NvcmUvdGlja2VyL1RpY2tlci5qcyIsInNyYy9jb3JlL3RpY2tlci9pbmRleC5qcyIsInNyYy9jb3JlL3V0aWxzL2NyZWF0ZUluZGljZXNGb3JRdWFkcy5qcyIsInNyYy9jb3JlL3V0aWxzL2luZGV4LmpzIiwic3JjL2NvcmUvdXRpbHMvcGx1Z2luVGFyZ2V0LmpzIiwic3JjL2RlcHJlY2F0aW9uLmpzIiwic3JjL2V4dHJhcy9CaXRtYXBUZXh0LmpzIiwic3JjL2V4dHJhcy9Nb3ZpZUNsaXAuanMiLCJzcmMvZXh0cmFzL1RpbGluZ1Nwcml0ZS5qcyIsInNyYy9leHRyYXMvY2FjaGVBc0JpdG1hcC5qcyIsInNyYy9leHRyYXMvZ2V0Q2hpbGRCeU5hbWUuanMiLCJzcmMvZXh0cmFzL2dldEdsb2JhbFBvc2l0aW9uLmpzIiwic3JjL2V4dHJhcy9pbmRleC5qcyIsInNyYy9maWx0ZXJzL2FzY2lpL0FzY2lpRmlsdGVyLmpzIiwic3JjL2ZpbHRlcnMvYmxvb20vQmxvb21GaWx0ZXIuanMiLCJzcmMvZmlsdGVycy9ibHVyL0JsdXJEaXJGaWx0ZXIuanMiLCJzcmMvZmlsdGVycy9ibHVyL0JsdXJGaWx0ZXIuanMiLCJzcmMvZmlsdGVycy9ibHVyL0JsdXJYRmlsdGVyLmpzIiwic3JjL2ZpbHRlcnMvYmx1ci9CbHVyWUZpbHRlci5qcyIsInNyYy9maWx0ZXJzL2JsdXIvU21hcnRCbHVyRmlsdGVyLmpzIiwic3JjL2ZpbHRlcnMvY29sb3IvQ29sb3JNYXRyaXhGaWx0ZXIuanMiLCJzcmMvZmlsdGVycy9jb2xvci9Db2xvclN0ZXBGaWx0ZXIuanMiLCJzcmMvZmlsdGVycy9jb252b2x1dGlvbi9Db252b2x1dGlvbkZpbHRlci5qcyIsInNyYy9maWx0ZXJzL2Nyb3NzaGF0Y2gvQ3Jvc3NIYXRjaEZpbHRlci5qcyIsInNyYy9maWx0ZXJzL2Rpc3BsYWNlbWVudC9EaXNwbGFjZW1lbnRGaWx0ZXIuanMiLCJzcmMvZmlsdGVycy9kb3QvRG90U2NyZWVuRmlsdGVyLmpzIiwic3JjL2ZpbHRlcnMvZHJvcHNoYWRvdy9CbHVyWVRpbnRGaWx0ZXIuanMiLCJzcmMvZmlsdGVycy9kcm9wc2hhZG93L0Ryb3BTaGFkb3dGaWx0ZXIuanMiLCJzcmMvZmlsdGVycy9ncmF5L0dyYXlGaWx0ZXIuanMiLCJzcmMvZmlsdGVycy9pbmRleC5qcyIsInNyYy9maWx0ZXJzL2ludmVydC9JbnZlcnRGaWx0ZXIuanMiLCJzcmMvZmlsdGVycy9ub2lzZS9Ob2lzZUZpbHRlci5qcyIsInNyYy9maWx0ZXJzL3BpeGVsYXRlL1BpeGVsYXRlRmlsdGVyLmpzIiwic3JjL2ZpbHRlcnMvcmdiL1JHQlNwbGl0RmlsdGVyLmpzIiwic3JjL2ZpbHRlcnMvc2VwaWEvU2VwaWFGaWx0ZXIuanMiLCJzcmMvZmlsdGVycy9zaG9ja3dhdmUvU2hvY2t3YXZlRmlsdGVyLmpzIiwic3JjL2ZpbHRlcnMvdGlsdHNoaWZ0L1RpbHRTaGlmdEF4aXNGaWx0ZXIuanMiLCJzcmMvZmlsdGVycy90aWx0c2hpZnQvVGlsdFNoaWZ0RmlsdGVyLmpzIiwic3JjL2ZpbHRlcnMvdGlsdHNoaWZ0L1RpbHRTaGlmdFhGaWx0ZXIuanMiLCJzcmMvZmlsdGVycy90aWx0c2hpZnQvVGlsdFNoaWZ0WUZpbHRlci5qcyIsInNyYy9maWx0ZXJzL3R3aXN0L1R3aXN0RmlsdGVyLmpzIiwic3JjL3NyYy9pbmRleC5qcyIsInNyYy9pbnRlcmFjdGlvbi9JbnRlcmFjdGlvbkRhdGEuanMiLCJzcmMvaW50ZXJhY3Rpb24vSW50ZXJhY3Rpb25NYW5hZ2VyLmpzIiwic3JjL2ludGVyYWN0aW9uL2luZGV4LmpzIiwic3JjL2ludGVyYWN0aW9uL2ludGVyYWN0aXZlVGFyZ2V0LmpzIiwic3JjL2xvYWRlcnMvYml0bWFwRm9udFBhcnNlci5qcyIsInNyYy9sb2FkZXJzL2luZGV4LmpzIiwic3JjL2xvYWRlcnMvbG9hZGVyLmpzIiwic3JjL2xvYWRlcnMvc3ByaXRlc2hlZXRQYXJzZXIuanMiLCJzcmMvbG9hZGVycy90ZXh0dXJlUGFyc2VyLmpzIiwic3JjL21lc2gvTWVzaC5qcyIsInNyYy9tZXNoL1BsYW5lLmpzIiwic3JjL21lc2gvUm9wZS5qcyIsInNyYy9tZXNoL2luZGV4LmpzIiwic3JjL21lc2gvd2ViZ2wvTWVzaFJlbmRlcmVyLmpzIiwic3JjL21lc2gvd2ViZ2wvTWVzaFNoYWRlci5qcyIsInNyYy9wb2x5ZmlsbC9NYXRoLnNpZ24uanMiLCJzcmMvcG9seWZpbGwvT2JqZWN0LmFzc2lnbi5qcyIsInNyYy9wb2x5ZmlsbC9pbmRleC5qcyIsInNyYy9wb2x5ZmlsbC9yZXF1ZXN0QW5pbWF0aW9uRnJhbWUuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUNBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbklBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDeENBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdk1BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNqSEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDOUJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3REQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN6REE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2xDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDN0JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0SUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2hDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUM5Q0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7O0FDNXVDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7QUNoT0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FDM0ZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7OztBQ3JoQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDcEZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDckZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDSkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ25zQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdGtCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3RRQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FDdkNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7QUNubUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3hjQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDaHlCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2hFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNaQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDcEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDMURBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMxRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuWkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzVDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzdOQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNyb0JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3ZtQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdG9DQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzNGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM5VEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2xEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDcEhBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDckZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3JFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDMU5BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDN0RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3JFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM5SEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDN0ZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3RiQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDcEVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNwQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3RGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM3RkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3JHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNUZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzFGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDN1RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMxTkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDMWRBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDblFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMxUUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2xHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2hXQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM1REE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMxUEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDMUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMzWUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzlHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDckRBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMvRkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDMUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2xjQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDakhBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3hLQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDN1dBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3ZDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM1REE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM3REE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM5Z0JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDN0dBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDL0VBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN4REE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDekpBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDalNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDL0JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3ptQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3ZXQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzdEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzNtQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbmJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzdkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3hhQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQy9FQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzNPQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDaldBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3REQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQy9CQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDblJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNwRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM3VkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2xZQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM5VEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbGNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzlRQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzVCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzVCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ25CQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3ZEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzVJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM1R0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMzRkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDcEZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNUJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3RoQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQy9DQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDekZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3hCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2xGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3RFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDekZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMvTEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQy9DQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3JDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNoREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3JEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2pEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNwRkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDaERBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0RkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDM0hBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzVHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNwQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDcENBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FDbkZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7QUM1QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQy9DQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzEyQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQy9DQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdkhBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbkJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzVEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2xGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDcEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzFkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzVIQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ25OQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDakJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuT0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzNEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ1JBO0FBQ0E7QUFDQTtBQUNBOzs7QUNIQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsImZpbGUiOiJnZW5lcmF0ZWQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlc0NvbnRlbnQiOlsiKGZ1bmN0aW9uIGUodCxuLHIpe2Z1bmN0aW9uIHMobyx1KXtpZighbltvXSl7aWYoIXRbb10pe3ZhciBhPXR5cGVvZiByZXF1aXJlPT1cImZ1bmN0aW9uXCImJnJlcXVpcmU7aWYoIXUmJmEpcmV0dXJuIGEobywhMCk7aWYoaSlyZXR1cm4gaShvLCEwKTt2YXIgZj1uZXcgRXJyb3IoXCJDYW5ub3QgZmluZCBtb2R1bGUgJ1wiK28rXCInXCIpO3Rocm93IGYuY29kZT1cIk1PRFVMRV9OT1RfRk9VTkRcIixmfXZhciBsPW5bb109e2V4cG9ydHM6e319O3Rbb11bMF0uY2FsbChsLmV4cG9ydHMsZnVuY3Rpb24oZSl7dmFyIG49dFtvXVsxXVtlXTtyZXR1cm4gcyhuP246ZSl9LGwsbC5leHBvcnRzLGUsdCxuLHIpfXJldHVybiBuW29dLmV4cG9ydHN9dmFyIGk9dHlwZW9mIHJlcXVpcmU9PVwiZnVuY3Rpb25cIiYmcmVxdWlyZTtmb3IodmFyIG89MDtvPHIubGVuZ3RoO28rKylzKHJbb10pO3JldHVybiBzfSkiLCJcblxubW9kdWxlLmV4cG9ydHMgPSB7XG5cbiAgICBjcmVhdGVDb250ZXh0OiBcdFx0XHRyZXF1aXJlKCcuL2xpYi9jcmVhdGVDb250ZXh0JyksXG4gICAgc2V0VmVydGV4QXR0cmliQXJyYXlzOiBcdHJlcXVpcmUoJy4vbGliL3NldFZlcnRleEF0dHJpYkFycmF5cycpLFxuICAgIFxuICAgIEdMQnVmZmVyOiBcdFx0XHRcdHJlcXVpcmUoJy4vbGliL0dMQnVmZmVyJyksXG4gICAgR0xGcmFtZWJ1ZmZlcjogXHRcdFx0cmVxdWlyZSgnLi9saWIvR0xGcmFtZWJ1ZmZlcicpLFxuICAgIEdMU2hhZGVyOiBcdFx0XHRcdHJlcXVpcmUoJy4vbGliL0dMU2hhZGVyJyksXG4gICAgR0xUZXh0dXJlOiBcdFx0XHRcdHJlcXVpcmUoJy4vbGliL0dMVGV4dHVyZScpLFxuICAgIFxuICAgIFZlcnRleEFycmF5T2JqZWN0OiBcdFx0cmVxdWlyZSgnLi9saWIvVmVydGV4QXJyYXlPYmplY3QnKVxuXG59OyIsIlxuLyoqXG4gKiBIZWxwZXIgY2xhc3MgdG8gY3JlYXRlIGEgd2ViR0wgYnVmZmVyXG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIGdsIHtXZWJHTFJlbmRlcmluZ0NvbnRleHR9XG4gKi9cblxudmFyIEVNUFRZX0FSUkFZX0JVRkZFUiA9IG5ldyBBcnJheUJ1ZmZlcigwKTtcblxudmFyIEJ1ZmZlciA9IGZ1bmN0aW9uKGdsLCB0eXBlLCBkYXRhLCBkcmF3VHlwZSlcbntcblx0dGhpcy5nbCA9IGdsO1xuXG5cdHRoaXMuYnVmZmVyID0gZ2wuY3JlYXRlQnVmZmVyKCk7XG5cdHRoaXMudHlwZSA9IHR5cGUgfHwgZ2wuQVJSQVlfQlVGRkVSO1xuXHR0aGlzLmRyYXdUeXBlID0gZHJhd1R5cGUgfHwgZ2wuU1RBVElDX0RSQVc7XG5cdHRoaXMuZGF0YSA9IEVNUFRZX0FSUkFZX0JVRkZFUjtcblxuXHRpZihkYXRhKVxuXHR7XG5cdFx0dGhpcy51cGxvYWQoZGF0YSk7XG5cdH1cbn1cblxuQnVmZmVyLnByb3RvdHlwZS51cGxvYWQgPSBmdW5jdGlvbihkYXRhLCBvZmZzZXQsIGRvbnRCaW5kKVxue1xuXHQvLyB0b2RvIC0gbmVlZGVkP1xuXHQvL2lmKCFkb250QmluZClcblx0dGhpcy5iaW5kKCk7XG5cblx0dmFyIGdsID0gdGhpcy5nbDtcblx0XG5cdGRhdGEgPSBkYXRhIHx8IHRoaXMuZGF0YTtcblx0b2Zmc2V0ID0gb2Zmc2V0IHx8IDA7XG5cblx0aWYodGhpcy5kYXRhLmJ5dGVMZW5ndGggPj0gZGF0YS5ieXRlTGVuZ3RoKVxuXHR7XHRcblx0XHRnbC5idWZmZXJTdWJEYXRhKHRoaXMudHlwZSwgb2Zmc2V0LCBkYXRhKTtcblx0fVxuXHRlbHNlXG5cdHtcblx0XHRnbC5idWZmZXJEYXRhKHRoaXMudHlwZSwgZGF0YSwgdGhpcy5kcmF3VHlwZSk7XG5cdH1cblxuXHR0aGlzLmRhdGEgPSBkYXRhO1xufVxuXG5CdWZmZXIucHJvdG90eXBlLmJpbmQgPSBmdW5jdGlvbigpXG57XG5cdHZhciBnbCA9IHRoaXMuZ2w7XG5cdGdsLmJpbmRCdWZmZXIodGhpcy50eXBlLCB0aGlzLmJ1ZmZlcik7XG59XG5cbkJ1ZmZlci5jcmVhdGVWZXJ0ZXhCdWZmZXIgPSBmdW5jdGlvbihnbCwgZGF0YSwgZHJhd1R5cGUpXG57XG5cdHJldHVybiBuZXcgQnVmZmVyKGdsLCBnbC5BUlJBWV9CVUZGRVIsIGRhdGEsIGRyYXdUeXBlKTtcbn1cblxuQnVmZmVyLmNyZWF0ZUluZGV4QnVmZmVyID0gZnVuY3Rpb24oZ2wsIGRhdGEsIGRyYXdUeXBlKVxue1xuXHRyZXR1cm4gbmV3IEJ1ZmZlcihnbCwgZ2wuRUxFTUVOVF9BUlJBWV9CVUZGRVIsIGRhdGEsIGRyYXdUeXBlKTtcbn1cblxuQnVmZmVyLmNyZWF0ZSA9IGZ1bmN0aW9uKGdsLCB0eXBlLCBkYXRhLCBkcmF3VHlwZSlcbntcblx0cmV0dXJuIG5ldyBCdWZmZXIoZ2wsIHR5cGUsIGRyYXdUeXBlKTtcbn1cblxuLy9UT0RPIERlc3Ryb3kuLlxuXG5tb2R1bGUuZXhwb3J0cyA9IEJ1ZmZlcjtcblxuIiwiXG52YXIgVGV4dHVyZSA9IHJlcXVpcmUoJy4vR0xUZXh0dXJlJyk7XG5cbi8qKlxuICogSGVscGVyIGNsYXNzIHRvIGNyZWF0ZSBhIHdlYkdMIEZyYW1lYnVmZmVyXG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIGdsIHtXZWJHTFJlbmRlcmluZ0NvbnRleHR9XG4gKi9cblxudmFyIEZyYW1lYnVmZmVyID0gZnVuY3Rpb24oZ2wsIHdpZHRoLCBoZWlnaHQpXG57XG5cdHRoaXMuZ2wgPSBnbDtcblxuXHR0aGlzLmZyYW1lYnVmZmVyID0gZ2wuY3JlYXRlRnJhbWVidWZmZXIoKTtcblx0XG5cdHRoaXMuc3RlbmNpbCA9IG51bGw7XG5cdHRoaXMudGV4dHVyZSA9IG51bGw7XG5cblx0dGhpcy53aWR0aCA9IHdpZHRoIHx8IDEwMDtcblx0dGhpcy5oZWlnaHQgPSBoZWlnaHQgfHwgMTAwO1xufVxuXG5GcmFtZWJ1ZmZlci5wcm90b3R5cGUuZW5hYmxlVGV4dHVyZSA9IGZ1bmN0aW9uKHRleHR1cmUpXG57XG5cdHZhciBnbCA9IHRoaXMuZ2w7XG5cblx0dGhpcy50ZXh0dXJlID0gdGV4dHVyZSB8fCBuZXcgVGV4dHVyZShnbCk7XG5cblx0dGhpcy50ZXh0dXJlLmJpbmQoKTtcblxuXHQvL2dsLnRleEltYWdlMkQoZ2wuVEVYVFVSRV8yRCwgMCwgZ2wuUkdCQSwgIHRoaXMud2lkdGgsIHRoaXMuaGVpZ2h0LCAwLCBnbC5SR0JBLCBnbC5VTlNJR05FRF9CWVRFLCBudWxsKTtcblxuXHR0aGlzLmJpbmQoKTtcblxuXHRnbC5mcmFtZWJ1ZmZlclRleHR1cmUyRChnbC5GUkFNRUJVRkZFUiwgZ2wuQ09MT1JfQVRUQUNITUVOVDAsIGdsLlRFWFRVUkVfMkQsIHRoaXMudGV4dHVyZS50ZXh0dXJlLCAwKTtcbn1cblxuRnJhbWVidWZmZXIucHJvdG90eXBlLmVuYWJsZVN0ZW5jaWwgPSBmdW5jdGlvbigpXG57XG5cdGlmKHRoaXMuc3RlbmNpbClyZXR1cm47XG5cblx0dmFyIGdsID0gdGhpcy5nbDtcblxuXHR0aGlzLnN0ZW5jaWwgPSBnbC5jcmVhdGVSZW5kZXJidWZmZXIoKTtcbiAgICBcbiAgICBnbC5iaW5kUmVuZGVyYnVmZmVyKGdsLlJFTkRFUkJVRkZFUiwgdGhpcy5zdGVuY2lsKTtcbiAgICBcbiAgICAvLyBUT0RPLi4gdGhpcyBpcyBkZXB0aCBBTkQgc3RlbmNpbD9cbiAgICBnbC5mcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcihnbC5GUkFNRUJVRkZFUiwgZ2wuREVQVEhfU1RFTkNJTF9BVFRBQ0hNRU5ULCBnbC5SRU5ERVJCVUZGRVIsIHRoaXMuc3RlbmNpbCk7XG4gICAgZ2wucmVuZGVyYnVmZmVyU3RvcmFnZShnbC5SRU5ERVJCVUZGRVIsIGdsLkRFUFRIX1NURU5DSUwsICB0aGlzLndpZHRoICAsIHRoaXMuaGVpZ2h0ICk7XG59XG5cbkZyYW1lYnVmZmVyLnByb3RvdHlwZS5jbGVhciA9IGZ1bmN0aW9uKCByLCBnLCBiLCBhIClcbntcblx0dGhpcy5iaW5kKCk7XG5cblx0dmFyIGdsID0gdGhpcy5nbDtcbiAgICBcbiAgICBnbC5jbGVhckNvbG9yKHIsIGcsIGIsIGEpO1xuICAgIGdsLmNsZWFyKGdsLkNPTE9SX0JVRkZFUl9CSVQpO1xufVxuXG5GcmFtZWJ1ZmZlci5wcm90b3R5cGUuYmluZCA9IGZ1bmN0aW9uKClcbntcblx0dmFyIGdsID0gdGhpcy5nbDtcblx0Z2wuYmluZEZyYW1lYnVmZmVyKGdsLkZSQU1FQlVGRkVSLCB0aGlzLmZyYW1lYnVmZmVyICk7XHRcbn1cblxuRnJhbWVidWZmZXIucHJvdG90eXBlLnVuYmluZCA9IGZ1bmN0aW9uKClcbntcblx0Z2wuYmluZEZyYW1lYnVmZmVyKGdsLkZSQU1FQlVGRkVSLCBudWxsICk7XHRcbn1cblxuRnJhbWVidWZmZXIucHJvdG90eXBlLnJlc2l6ZSA9IGZ1bmN0aW9uKHdpZHRoLCBoZWlnaHQpXG57XG5cdHZhciBnbCA9IHRoaXMuZ2w7XG5cblx0dGhpcy53aWR0aCA9IHdpZHRoO1xuXHR0aGlzLmhlaWdodCA9IGhlaWdodDtcblxuXHRpZiAoIHRoaXMudGV4dHVyZSApXG4gICAge1xuICAgIFx0dGhpcy50ZXh0dXJlLnVwbG9hZERhdGEobnVsbCwgd2lkdGgsIGhlaWdodCk7XG5cdH1cblxuXHRpZiAoIHRoaXMuc3RlbmNpbCApXG4gICAge1xuICAgICAgICAvLyB1cGRhdGUgdGhlIHN0ZW5jaWwgYnVmZmVyIHdpZHRoIGFuZCBoZWlnaHRcbiAgICAgICAgZ2wuYmluZFJlbmRlcmJ1ZmZlcihnbC5SRU5ERVJCVUZGRVIsIHRoaXMuc3RlbmNpbCk7XG4gICAgICAgIGdsLnJlbmRlcmJ1ZmZlclN0b3JhZ2UoZ2wuUkVOREVSQlVGRkVSLCBnbC5ERVBUSF9TVEVOQ0lMLCB3aWR0aCwgaGVpZ2h0KTtcbiAgICB9XG59XG5cbkZyYW1lYnVmZmVyLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24oKVxue1xuXHR2YXIgZ2wgPSB0aGlzLmdsO1xuXHQvL1RPRE9cblx0Z2wuZGVsZXRlRnJhbWVidWZmZXIodGhpcy5mcmFtZWJ1ZmZlcik7XG59XG5cbkZyYW1lYnVmZmVyLmNyZWF0ZVJHQkEgPSBmdW5jdGlvbihnbCwgd2lkdGgsIGhlaWdodCwgZGF0YSlcbntcblx0dmFyIHRleHR1cmUgPSBUZXh0dXJlLmZyb21EYXRhKGdsLCBudWxsLCB3aWR0aCwgaGVpZ2h0KTtcblx0dGV4dHVyZS5lbmFibGVOZWFyZXN0U2NhbGluZygpO1xuICAgIHRleHR1cmUuZW5hYmxlV3JhcENsYW1wKCk7XG5cbiAgICAvL25vdyBjcmVhdGUgdGhlIGZyYW1lYnVmZmVyIG9iamVjdCBhbmQgYXR0YWNoIHRoZSB0ZXh0dXJlIHRvIGl0LlxuICAgIHZhciBmYm8gPSBuZXcgRnJhbWVidWZmZXIoZ2wsIHdpZHRoLCBoZWlnaHQpO1xuICAgIGZiby5lbmFibGVUZXh0dXJlKHRleHR1cmUpO1xuXG4gICAgcmV0dXJuIGZibztcbn1cblxuRnJhbWVidWZmZXIuY3JlYXRlRmxvYXQzMiA9IGZ1bmN0aW9uKGdsLCB3aWR0aCwgaGVpZ2h0LCBkYXRhKVxue1xuXHQvLyBjcmVhdGUgYSBuZXcgdGV4dHVyZS4uXG4gICAgdmFyIHRleHR1cmUgPSBuZXcgVGV4dHVyZS5mcm9tRGF0YShnbCwgZGF0YSwgd2lkdGgsIGhlaWdodCk7XG4gICAgdGV4dHVyZS5lbmFibGVOZWFyZXN0U2NhbGluZygpO1xuICAgIHRleHR1cmUuZW5hYmxlV3JhcENsYW1wKCk7XG5cbiAgICAvL25vdyBjcmVhdGUgdGhlIGZyYW1lYnVmZmVyIG9iamVjdCBhbmQgYXR0YWNoIHRoZSB0ZXh0dXJlIHRvIGl0LlxuICAgIHZhciBmYm8gPSBuZXcgRnJhbWVidWZmZXIoZ2wsIHdpZHRoLCBoZWlnaHQpO1xuICAgIGZiby5lbmFibGVUZXh0dXJlKHRleHR1cmUpXG5cbiAgICByZXR1cm4gZmJvO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IEZyYW1lYnVmZmVyO1xuXG4iLCJcbnZhciBjb21waWxlUHJvZ3JhbSA9IHJlcXVpcmUoJy4vc2hhZGVyL2NvbXBpbGVQcm9ncmFtJyksXG5cdGV4dHJhY3RBdHRyaWJ1dGVzID0gcmVxdWlyZSgnLi9zaGFkZXIvZXh0cmFjdEF0dHJpYnV0ZXMnKSxcblx0ZXh0cmFjdFVuaWZvcm1zID0gcmVxdWlyZSgnLi9zaGFkZXIvZXh0cmFjdFVuaWZvcm1zJyksXG5cdGdlbmVyYXRlVW5pZm9ybUFjY2Vzc09iamVjdCA9IHJlcXVpcmUoJy4vc2hhZGVyL2dlbmVyYXRlVW5pZm9ybUFjY2Vzc09iamVjdCcpO1xuXG4vKipcbiAqIEhlbHBlciBjbGFzcyB0byBjcmVhdGUgYSB3ZWJHTCBTaGFkZXJcbiAqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gZ2wge1dlYkdMUmVuZGVyaW5nQ29udGV4dH1cbiAqL1xudmFyIFNoYWRlciA9IGZ1bmN0aW9uKGdsLCB2ZXJ0ZXhTcmMsIGZyYWdtZW50U3JjKVxue1xuXHR0aGlzLmdsID0gZ2w7XG5cblx0Ly8gRmlyc3QgY29tcGlsZSB0aGUgcHJvZ3JhbS4uXG5cdHRoaXMucHJvZ3JhbSA9IGNvbXBpbGVQcm9ncmFtKGdsLCB2ZXJ0ZXhTcmMsIGZyYWdtZW50U3JjKTtcblxuXHQvLyBuZXh0IGV4dHJhY3QgdGhlIGF0dHJpYnV0ZXNcblx0dGhpcy5hdHRyaWJ1dGVzID0gZXh0cmFjdEF0dHJpYnV0ZXMoZ2wsIHRoaXMucHJvZ3JhbSk7IFxuXG4gICAgdmFyIHVuaWZvcm1EYXRhID0gZXh0cmFjdFVuaWZvcm1zKGdsLCB0aGlzLnByb2dyYW0pO1xuXG4gICAgdGhpcy51bmlmb3JtcyA9IGdlbmVyYXRlVW5pZm9ybUFjY2Vzc09iamVjdCggZ2wsIHVuaWZvcm1EYXRhICk7XG59XG5cblNoYWRlci5wcm90b3R5cGUuYmluZCA9IGZ1bmN0aW9uKClcbntcblx0dGhpcy5nbC51c2VQcm9ncmFtKHRoaXMucHJvZ3JhbSk7XG59XG5cblNoYWRlci5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uKClcbntcblx0dmFyIGdsID0gdGhpcy5nbDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBTaGFkZXI7XG5cbiIsIlxuLyoqXG4gKiBIZWxwZXIgY2xhc3MgdG8gY3JlYXRlIGEgd2ViR0wgVGV4dHVyZVxuICpcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqIEBwYXJhbSBnbCB7V2ViR0xSZW5kZXJpbmdDb250ZXh0fSBhIFdlYkdMIGNvbnRleHRcbiAqIEBwYXJhbSB3aWR0aCB7bnVtYmVyfSB0aGUgd2lkdGggb2YgdGhlIHRleHR1cmUgXG4gKiBAcGFyYW0gaGVpZ2h0IHtudW1iZXJ9IHRoZSBoZWlnaHQgb2YgdGhlIHRleHR1cmUgXG4gKiBAcGFyYW0gZm9ybWF0IHtudW1iZXJ9IHRoZSBwaXhlbCBmb3JtYXQgb2YgdGhlIHRleHR1cmUuIGRlZmF1bHRzIHRvIGdsLlJHQkFcbiAqIEBwYXJhbSB0eXBlIHtudW1iZXJ9IHRoZSBnbCB0eXBlIG9mIHRoZSB0ZXh0dXJlLiBkZWZhdWx0cyB0byBnbC5VTlNJR05FRF9CWVRFXG4gKi9cbnZhciBUZXh0dXJlID0gZnVuY3Rpb24oZ2wsIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgdHlwZSlcbntcblx0dGhpcy5nbCA9IGdsO1xuXG5cdHRoaXMudGV4dHVyZSA9IGdsLmNyZWF0ZVRleHR1cmUoKTtcblxuXHQvLyBzb21lIHNldHRpbmdzLi5cblx0dGhpcy5taXBtYXAgPSBmYWxzZTtcblxuXHR0aGlzLnByZW11bHRpcGx5QWxwaGEgPSBmYWxzZTtcblxuXHR0aGlzLndpZHRoID0gd2lkdGggfHwgMDtcblx0dGhpcy5oZWlnaHQgPSBoZWlnaHQgfHwgMDtcblxuXHR0aGlzLmZvcm1hdCA9IGZvcm1hdCB8fCBnbC5SR0JBO1xuXHR0aGlzLnR5cGUgPSB0eXBlIHx8IGdsLlVOU0lHTkVEX0JZVEU7XG5cblxufVxuXG4vKipcbiAqIEBwYXJhbSB7UElYSS5nbENvcmUuVGV4dHVyZX0gW3Zhcm5hbWVdIFtkZXNjcmlwdGlvbl1cbiAqL1xuVGV4dHVyZS5wcm90b3R5cGUudXBsb2FkID0gZnVuY3Rpb24oc291cmNlKVxue1xuXHR0aGlzLmJpbmQoKTtcblxuXHR2YXIgZ2wgPSB0aGlzLmdsO1xuXG5cdHRoaXMud2lkdGggPSBzb3VyY2Uud2lkdGg7XG5cdHRoaXMuaGVpZ2h0ID0gc291cmNlLmhlaWdodDtcblxuXHRnbC5waXhlbFN0b3JlaShnbC5VTlBBQ0tfUFJFTVVMVElQTFlfQUxQSEFfV0VCR0wsIHRoaXMucHJlbXVsdGlwbHlBbHBoYSk7XG4gICAgZ2wudGV4SW1hZ2UyRChnbC5URVhUVVJFXzJELCAwLCB0aGlzLmZvcm1hdCwgdGhpcy5mb3JtYXQsIHRoaXMudHlwZSwgc291cmNlKTtcbn1cblxudmFyIEZMT0FUSU5HX1BPSU5UX0FWQUlMQUJMRSA9IGZhbHNlO1xuXG5UZXh0dXJlLnByb3RvdHlwZS51cGxvYWREYXRhID0gZnVuY3Rpb24oZGF0YSwgd2lkdGgsIGhlaWdodClcbntcblx0dGhpcy5iaW5kKCk7XG5cdFxuXHR0aGlzLndpZHRoID0gd2lkdGggfHwgdGhpcy53aWR0aDtcblx0dGhpcy5oZWlnaHQgPSBoZWlnaHQgfHwgdGhpcy5oZWlnaHQ7XG5cblx0aWYoZGF0YSBpbnN0YW5jZW9mIEZsb2F0MzJBcnJheSlcblx0e1xuXHRcdGlmKCFGTE9BVElOR19QT0lOVF9BVkFJTEFCTEUpXG5cdFx0e1xuXHRcdFx0dmFyIGV4dCA9IGdsLmdldEV4dGVuc2lvbihcIk9FU190ZXh0dXJlX2Zsb2F0XCIpO1xuXHRcdFx0XG5cdFx0XHRpZihleHQpXG5cdFx0XHR7XG5cdFx0XHRcdEZMT0FUSU5HX1BPSU5UX0FWQUlMQUJMRSA9IHRydWU7XG5cdFx0XHR9XG5cdFx0XHRlbHNlXG5cdFx0XHR7XG5cdFx0XHRcdHRocm93IG5ldyBFcnJvcignZmxvYXRpbmcgcG9pbnQgdGV4dHVyZXMgbm90IGF2YWlsYWJsZScpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHRoaXMudHlwZSA9IGdsLkZMT0FUO1xuXHR9XG5cdGVsc2Vcblx0e1xuXHRcdC8vIFRPRE8gc3VwcG9ydCBmb3Igb3RoZXIgdHlwZXNcblx0XHR0aGlzLnR5cGUgPSBnbC5VTlNJR05FRF9CWVRFO1xuXHR9XG5cblx0Ly8gd2hhdCB0eXBlIG9mIGRhdGE/XG5cdGdsLnBpeGVsU3RvcmVpKGdsLlVOUEFDS19QUkVNVUxUSVBMWV9BTFBIQV9XRUJHTCwgdGhpcy5wcmVtdWx0aXBseUFscGhhKTtcblx0Z2wudGV4SW1hZ2UyRChnbC5URVhUVVJFXzJELCAwLCB0aGlzLmZvcm1hdCwgIHRoaXMud2lkdGgsIHRoaXMuaGVpZ2h0LCAwLCB0aGlzLmZvcm1hdCwgdGhpcy50eXBlLCBkYXRhIHx8IG51bGwpO1xuXG59XG5cblRleHR1cmUucHJvdG90eXBlLmJpbmQgPSBmdW5jdGlvbihsb2NhdGlvbilcbntcblx0dmFyIGdsID0gdGhpcy5nbDtcblxuXHRpZihsb2NhdGlvbiAhPT0gdW5kZWZpbmVkKVxuXHR7XG5cdFx0Z2wuYWN0aXZlVGV4dHVyZShnbC5URVhUVVJFMCArIGxvY2F0aW9uKTtcblx0fVxuXG5cdGdsLmJpbmRUZXh0dXJlKGdsLlRFWFRVUkVfMkQsIHRoaXMudGV4dHVyZSk7XG59XG5cblRleHR1cmUucHJvdG90eXBlLnVuYmluZCA9IGZ1bmN0aW9uKClcbntcblx0dmFyIGdsID0gdGhpcy5nbDtcblx0Z2wuYmluZFRleHR1cmUoZ2wuVEVYVFVSRV8yRCwgbnVsbCk7XG59XG5cblRleHR1cmUucHJvdG90eXBlLm1pbkZpbHRlciA9IGZ1bmN0aW9uKCBsaW5lYXIgKVxue1xuXHR2YXIgZ2wgPSB0aGlzLmdsO1xuXG5cdHRoaXMuYmluZCgpO1xuXG5cdGlmKHRoaXMubWlwbWFwKVxuXHR7XG5cdFx0Z2wudGV4UGFyYW1ldGVyaShnbC5URVhUVVJFXzJELCBnbC5URVhUVVJFX01JTl9GSUxURVIsIGxpbmVhciA/IGdsLkxJTkVBUl9NSVBNQVBfTElORUFSIDogZ2wuTkVBUkVTVF9NSVBNQVBfTkVBUkVTVCk7XG5cdH1cblx0ZWxzZVxuXHR7XG5cdFx0Z2wudGV4UGFyYW1ldGVyaShnbC5URVhUVVJFXzJELCBnbC5URVhUVVJFX01JTl9GSUxURVIsIGxpbmVhciA/IGdsLkxJTkVBUiA6IGdsLk5FQVJFU1QpO1xuXHR9XHRcbn1cblxuVGV4dHVyZS5wcm90b3R5cGUubWFnRmlsdGVyID0gZnVuY3Rpb24oIGxpbmVhciApXG57XG5cdHZhciBnbCA9IHRoaXMuZ2w7XG5cblx0dGhpcy5iaW5kKCk7XG5cblx0Z2wudGV4UGFyYW1ldGVyaShnbC5URVhUVVJFXzJELCBnbC5URVhUVVJFX01BR19GSUxURVIsIGxpbmVhciA/IGdsLkxJTkVBUiA6IGdsLk5FQVJFU1QpO1xufVxuXG5UZXh0dXJlLnByb3RvdHlwZS5lbmFibGVNaXBtYXAgPSBmdW5jdGlvbigpXG57XG5cdHRoaXMuYmluZCgpO1xuXG5cdHRoaXMubWlwbWFwID0gdHJ1ZTtcblx0Z2wuZ2VuZXJhdGVNaXBtYXAoZ2wuVEVYVFVSRV8yRCk7XG59XG5cblRleHR1cmUucHJvdG90eXBlLmVuYWJsZUxpbmVhclNjYWxpbmcgPSBmdW5jdGlvbigpXG57XG5cdHRoaXMubWluRmlsdGVyKHRydWUpO1xuXHR0aGlzLm1hZ0ZpbHRlcih0cnVlKTtcbn1cblxuVGV4dHVyZS5wcm90b3R5cGUuZW5hYmxlTmVhcmVzdFNjYWxpbmcgPSBmdW5jdGlvbigpXG57XG5cdHRoaXMubWluRmlsdGVyKGZhbHNlKTtcblx0dGhpcy5tYWdGaWx0ZXIoZmFsc2UpO1xufVxuXG5UZXh0dXJlLnByb3RvdHlwZS5lbmFibGVXcmFwQ2xhbXAgPSBmdW5jdGlvbigpXG57XG5cdHZhciBnbCA9IHRoaXMuZ2w7XG5cblx0dGhpcy5iaW5kKCk7XG5cblx0Z2wudGV4UGFyYW1ldGVyaShnbC5URVhUVVJFXzJELCBnbC5URVhUVVJFX1dSQVBfUywgZ2wuQ0xBTVBfVE9fRURHRSk7XG4gICAgZ2wudGV4UGFyYW1ldGVyaShnbC5URVhUVVJFXzJELCBnbC5URVhUVVJFX1dSQVBfVCwgZ2wuQ0xBTVBfVE9fRURHRSk7XG59XG5cblRleHR1cmUucHJvdG90eXBlLmVuYWJsZVdyYXBSZXBlYXQgPSBmdW5jdGlvbigpXG57XG5cdHZhciBnbCA9IHRoaXMuZ2w7XG5cblx0dGhpcy5iaW5kKCk7XG5cdFxuXHRnbC50ZXhQYXJhbWV0ZXJpKGdsLlRFWFRVUkVfMkQsIGdsLlRFWFRVUkVfV1JBUF9TLCBnbC5SRVBFQVQpO1xuICAgIGdsLnRleFBhcmFtZXRlcmkoZ2wuVEVYVFVSRV8yRCwgZ2wuVEVYVFVSRV9XUkFQX1QsIGdsLlJFUEVBVCk7XG59XG5cblRleHR1cmUucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbigpXG57XG5cdHZhciBnbCA9IHRoaXMuZ2w7XG5cdC8vVE9ET1xuXHRnbC5kZWxldGVUZXh0dXJlKHRoaXMudGV4dHVyZSk7XG59XG5cbi8vVGV4dHVyZS5cblRleHR1cmUuZnJvbVNvdXJjZSA9IGZ1bmN0aW9uKGdsLCBzb3VyY2UsIHByZW11bHRpcGx5QWxwaGEpXG57XG5cdHZhciB0ZXh0dXJlID0gbmV3IFRleHR1cmUoZ2wpO1xuXHR0ZXh0dXJlLnByZW11bHRpcGx5QWxwaGEgPSBwcmVtdWx0aXBseUFscGhhIHx8IGZhbHNlO1xuXHR0ZXh0dXJlLnVwbG9hZChzb3VyY2UpO1xuXG5cdHJldHVybiB0ZXh0dXJlO1xufVxuXG5UZXh0dXJlLmZyb21EYXRhID0gZnVuY3Rpb24oZ2wsIGRhdGEsIHdpZHRoLCBoZWlnaHQpXG57XG5cdC8vY29uc29sZS5sb2coZGF0YSwgd2lkdGgsIGhlaWdodCk7XG5cdHZhciB0ZXh0dXJlID0gbmV3IFRleHR1cmUoZ2wpO1xuXHR0ZXh0dXJlLnVwbG9hZERhdGEoZGF0YSwgd2lkdGgsIGhlaWdodCk7XG5cblx0cmV0dXJuIHRleHR1cmU7XG59XG5cblxubW9kdWxlLmV4cG9ydHMgPSBUZXh0dXJlO1xuXG4iLCJcbi8qKlxuICogR2VuZXJpYyBNYXNrIFN0YWNrIGRhdGEgc3RydWN0dXJlXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKi9cblxuLy8gc3RhdGUgb2JqZWN0Ly9cblxuXG5mdW5jdGlvbiBWZXJ0ZXhBcnJheU9iamVjdChnbClcbntcblx0XG5cdHRoaXMubmF0aXZlVmFvRXh0ZW5zaW9uID0gKFxuICAgICAgZ2wuZ2V0RXh0ZW5zaW9uKCdPRVNfdmVydGV4X2FycmF5X29iamVjdCcpIHx8XG4gICAgICBnbC5nZXRFeHRlbnNpb24oJ01PWl9PRVNfdmVydGV4X2FycmF5X29iamVjdCcpIHx8XG4gICAgICBnbC5nZXRFeHRlbnNpb24oJ1dFQktJVF9PRVNfdmVydGV4X2FycmF5X29iamVjdCcpXG4gICAgKTtcblxuLy9cdHRoaXMubmF0aXZlVmFvRXh0ZW5zaW9uID0gbnVsbDtcblxuXHRpZih0aGlzLm5hdGl2ZVZhb0V4dGVuc2lvbilcblx0e1xuXHRcdHRoaXMubmF0aXZlVmFvID0gdGhpcy5uYXRpdmVWYW9FeHRlbnNpb24uY3JlYXRlVmVydGV4QXJyYXlPRVMoKTsgIFxuXHR9XG5cblx0dGhpcy5nbCA9IGdsO1xuXG5cdHRoaXMuYXR0cmlidXRlcyA9IFtdO1xuXG5cdHRoaXMuaW5kZXhCdWZmZXIgPSBudWxsO1xuXG5cdHRoaXMuZGlydHkgPSBmYWxzZTtcblxuXHRcbn1cblxuVmVydGV4QXJyYXlPYmplY3QucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gVmVydGV4QXJyYXlPYmplY3Q7XG5tb2R1bGUuZXhwb3J0cyA9IFZlcnRleEFycmF5T2JqZWN0O1xuXG5WZXJ0ZXhBcnJheU9iamVjdC5wcm90b3R5cGUuYmluZCA9IGZ1bmN0aW9uKClcbntcblx0aWYodGhpcy5uYXRpdmVWYW8pXG5cdHtcblx0XHR0aGlzLm5hdGl2ZVZhb0V4dGVuc2lvbi5iaW5kVmVydGV4QXJyYXlPRVModGhpcy5uYXRpdmVWYW8pOyAgXG5cblx0XHRpZih0aGlzLmRpcnR5KVxuXHRcdHtcblx0XHRcdHRoaXMuZGlydHkgPSBmYWxzZTtcblx0XHRcdHRoaXMuYWN0aXZhdGUoKTtcblx0XHR9XG5cdH1cblx0ZWxzZVxuXHR7XG5cdFx0dGhpcy5hY3RpdmF0ZSgpO1xuXHR9XG59XG5cblZlcnRleEFycmF5T2JqZWN0LnByb3RvdHlwZS51bmJpbmQgPSBmdW5jdGlvbigpXG57XG5cdGlmKHRoaXMubmF0aXZlVmFvKVxuXHR7XG5cdFx0dGhpcy5uYXRpdmVWYW9FeHRlbnNpb24uYmluZFZlcnRleEFycmF5T0VTKG51bGwpO1xuXHR9XG59XG5cblZlcnRleEFycmF5T2JqZWN0LnByb3RvdHlwZS5hY3RpdmF0ZSA9IGZ1bmN0aW9uKClcbntcblx0dmFyIGdsID0gdGhpcy5nbDtcblxuXHRmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuYXR0cmlidXRlcy5sZW5ndGg7IGkrKykgXG5cdHtcblx0XHR2YXIgYXR0cmliID0gdGhpcy5hdHRyaWJ1dGVzW2ldO1xuXHRcdGF0dHJpYi5idWZmZXIuYmluZCgpO1x0XG5cblx0XHRhdHRyaWIuYXR0cmlidXRlLnBvaW50ZXIoYXR0cmliLnR5cGUsIGF0dHJpYi5ub3JtYWxpemVkLCBhdHRyaWIuc3RyaWRlLCBhdHRyaWIuc3RhcnQpOyBcblx0XHRcblx0XHRnbC5lbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShhdHRyaWIuYXR0cmlidXRlLmxvY2F0aW9uKTtcblx0fTtcblxuXHR0aGlzLmluZGV4QnVmZmVyLmJpbmQoKTtcbn1cblxuVmVydGV4QXJyYXlPYmplY3QucHJvdG90eXBlLmFkZEF0dHJpYnV0ZSA9IGZ1bmN0aW9uKGJ1ZmZlciwgYXR0cmlidXRlLCB0eXBlLCBub3JtYWxpemVkLCBzdHJpZGUsIHN0YXJ0KVxue1xuICAgIHRoaXMuYXR0cmlidXRlcy5wdXNoKHtcbiAgICBcdGJ1ZmZlcjogXHRidWZmZXIsXG4gICAgXHRhdHRyaWJ1dGU6IFx0YXR0cmlidXRlLFxuXG4gICAgXHRsb2NhdGlvbjogXHRhdHRyaWJ1dGUubG9jYXRpb24sXG5cdCBcdHR5cGU6IFx0XHR0eXBlIHx8IHRoaXMuZ2wuRkxPQVQsXG5cdCBcdG5vcm1hbGl6ZWQ6IG5vcm1hbGl6ZWQgfHwgZmFsc2UsXG5cdCBcdHN0cmlkZTogXHRzdHJpZGUgfHwgMCxcblx0IFx0c3RhcnQ6IFx0XHRzdGFydCB8fCAwXG5cdH0pXG5cblx0dGhpcy5kaXJ0eSA9IHRydWU7XG59XG5cblxuVmVydGV4QXJyYXlPYmplY3QucHJvdG90eXBlLmFkZEluZGV4ID0gZnVuY3Rpb24oYnVmZmVyLCBvcHRpb25zKVxue1xuICAgIHRoaXMuaW5kZXhCdWZmZXIgPSBidWZmZXI7XG5cbiAgICB0aGlzLmRpcnR5ID0gdHJ1ZTtcbn1cblxuVmVydGV4QXJyYXlPYmplY3QucHJvdG90eXBlLmRyYXcgPSBmdW5jdGlvbih0eXBlLCBzaXplLCBzdGFydClcbntcblx0dmFyIGdsID0gdGhpcy5nbDtcblx0Z2wuZHJhd0VsZW1lbnRzKHR5cGUsIHNpemUsIGdsLlVOU0lHTkVEX1NIT1JULCBzdGFydCk7XG59XG5cbiIsIlxuLyoqXG4gKiBIZWxwZXIgY2xhc3MgdG8gY3JlYXRlIGEgd2ViR0wgQ29udGV4dFxuICpcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqIEBwYXJhbSBnbCB7V2ViR0xSZW5kZXJpbmdDb250ZXh0fVxuICovXG5cbnZhciBDT05URVhUX1VJRCA9IDA7XG5cbnZhciBjcmVhdGVDb250ZXh0ID0gZnVuY3Rpb24oY2FudmFzLCBvcHRpb25zKVxue1xuICAgIGdsID0gY2FudmFzLmdldENvbnRleHQoJ3dlYmdsJywgb3B0aW9ucykgfHwgXG4gICAgXHQgY2FudmFzLmdldENvbnRleHQoJ2V4cGVyaW1lbnRhbC13ZWJnbCcsIG9wdGlvbnMpO1xuXG4gICAgaWYgKCFnbClcbiAgICB7XG4gICAgICAgIC8vIGZhaWwsIG5vdCBhYmxlIHRvIGdldCBhIGNvbnRleHRcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdUaGlzIGJyb3dzZXIgZG9lcyBub3Qgc3VwcG9ydCB3ZWJHTC4gVHJ5IHVzaW5nIHRoZSBjYW52YXMgcmVuZGVyZXInKTtcbiAgICB9XG5cbiAgICAvLyBtaWdodCB3YW50IHRvIHBoYXNlIHRoaXMgb3V0P1xuICAgIGdsLmlkID0gQ09OVEVYVF9VSUQrKztcblxuICAgIHJldHVybiBnbDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBjcmVhdGVDb250ZXh0O1xuXG4iLCIvKipcbiAqIEdlbmVyaWMgTWFzayBTdGFjayBkYXRhIHN0cnVjdHVyZVxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICovXG5cbnZhciBHTF9NQVAgPSB7fTtcblxuXG52YXIgc2V0VmVydGV4QXR0cmliQXJyYXlzID0gZnVuY3Rpb24gKGdsLCBhdHRyaWJzKVxue1x0XG4gICAvLyBjb25zb2xlLmxvZyhnbC5pZClcbiAgICB2YXIgZGF0YSA9IEdMX01BUFtnbC5pZF07XG5cbiAgICBpZighZGF0YSlcbiAgICB7XG5cdCAgIHZhciBtYXhBdHRyaWJzID0gZ2wuZ2V0UGFyYW1ldGVyKGdsLk1BWF9WRVJURVhfQVRUUklCUyk7XG5cdFx0ZGF0YSA9IEdMX01BUFtnbC5pZF0gPSB7dGVtcEF0dHJpYlN0YXRlOm5ldyBBcnJheShtYXhBdHRyaWJzKVxuXHRcdFx0XHQgXHQgXHRcdCAgICxhdHRyaWJTdGF0ZTpuZXcgQXJyYXkobWF4QXR0cmlicyl9O1xuXHR9XG5cdFxuICAgIHZhciBpLFxuICAgIFx0dGVtcEF0dHJpYlN0YXRlID0gZGF0YS50ZW1wQXR0cmliU3RhdGUsXG4gICAgXHRhdHRyaWJTdGF0ZSA9IGRhdGEuYXR0cmliU3RhdGU7XG5cbiAgICBmb3IgKGkgPSAwOyBpIDwgdGVtcEF0dHJpYlN0YXRlLmxlbmd0aDsgaSsrKVxuICAgIHtcbiAgICAgICAgdGVtcEF0dHJpYlN0YXRlW2ldID0gZmFsc2U7XG4gICAgfVxuXG4gICAgLy8gc2V0IHRoZSBuZXcgYXR0cmlic1xuICAgIGZvciAoaSBpbiBhdHRyaWJzKVxuICAgIHtcbiAgICAgICAgdGVtcEF0dHJpYlN0YXRlW2F0dHJpYnNbaV0ubG9jYXRpb25dID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBmb3IgKGkgPSAxOyBpIDwgYXR0cmliU3RhdGUubGVuZ3RoOyBpKyspXG4gICAge1xuICAgICAgICBpZiAoYXR0cmliU3RhdGVbaV0gIT09IHRlbXBBdHRyaWJTdGF0ZVtpXSlcbiAgICAgICAge1xuICAgICAgICAgICAgYXR0cmliU3RhdGVbaV0gPSB0ZW1wQXR0cmliU3RhdGVbaV07XG5cbiAgICAgICAgICAgIGlmIChkYXRhLmF0dHJpYlN0YXRlW2ldKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGdsLmVuYWJsZVZlcnRleEF0dHJpYkFycmF5KGkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGdsLmRpc2FibGVWZXJ0ZXhBdHRyaWJBcnJheShpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn07XG5cbm1vZHVsZS5leHBvcnRzID0gc2V0VmVydGV4QXR0cmliQXJyYXlzOyIsIlxuXG5cblxuY29tcGlsZVByb2dyYW0gPSBmdW5jdGlvbihnbCwgdmVydGV4U3JjLCBmcmFnbWVudFNyYylcbntcbiAgICB2YXIgZ2xWZXJ0U2hhZGVyID0gY29tcGlsZVNoYWRlcihnbCwgZ2wuVkVSVEVYX1NIQURFUiwgdmVydGV4U3JjKTtcbiAgICB2YXIgZ2xGcmFnU2hhZGVyID0gY29tcGlsZVNoYWRlcihnbCwgZ2wuRlJBR01FTlRfU0hBREVSLCBmcmFnbWVudFNyYyk7XG5cbiAgICB2YXIgcHJvZ3JhbSA9IGdsLmNyZWF0ZVByb2dyYW0oKTtcblxuICAgIGdsLmF0dGFjaFNoYWRlcihwcm9ncmFtLCBnbFZlcnRTaGFkZXIpO1xuICAgIGdsLmF0dGFjaFNoYWRlcihwcm9ncmFtLCBnbEZyYWdTaGFkZXIpO1xuICAgIGdsLmxpbmtQcm9ncmFtKHByb2dyYW0pO1xuXG4gICAgLy8gaWYgbGlua2luZyBmYWlscywgdGhlbiBsb2cgYW5kIGNsZWFudXBcbiAgICBpZiAoIWdsLmdldFByb2dyYW1QYXJhbWV0ZXIocHJvZ3JhbSwgZ2wuTElOS19TVEFUVVMpKVxuICAgIHtcbiAgICAgICAgY29uc29sZS5lcnJvcignUGl4aS5qcyBFcnJvcjogQ291bGQgbm90IGluaXRpYWxpemUgc2hhZGVyLicpO1xuICAgICAgICBjb25zb2xlLmVycm9yKCdnbC5WQUxJREFURV9TVEFUVVMnLCBnbC5nZXRQcm9ncmFtUGFyYW1ldGVyKHByb2dyYW0sIGdsLlZBTElEQVRFX1NUQVRVUykpO1xuICAgICAgICBjb25zb2xlLmVycm9yKCdnbC5nZXRFcnJvcigpJywgZ2wuZ2V0RXJyb3IoKSk7XG5cbiAgICAgICAgLy8gaWYgdGhlcmUgaXMgYSBwcm9ncmFtIGluZm8gbG9nLCBsb2cgaXRcbiAgICAgICAgaWYgKGdsLmdldFByb2dyYW1JbmZvTG9nKHByb2dyYW0pICE9PSAnJylcbiAgICAgICAge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKCdQaXhpLmpzIFdhcm5pbmc6IGdsLmdldFByb2dyYW1JbmZvTG9nKCknLCBnbC5nZXRQcm9ncmFtSW5mb0xvZyhwcm9ncmFtKSk7XG4gICAgICAgIH1cblxuICAgICAgICBnbC5kZWxldGVQcm9ncmFtKHByb2dyYW0pO1xuICAgICAgICBwcm9ncmFtID0gbnVsbDtcbiAgICB9XG5cbiAgICAvLyBjbGVhbiB1cCBzb21lIHNoYWRlcnNcbiAgICBnbC5kZWxldGVTaGFkZXIoZ2xWZXJ0U2hhZGVyKTtcbiAgICBnbC5kZWxldGVTaGFkZXIoZ2xGcmFnU2hhZGVyKTtcblxuICAgIHJldHVybiBwcm9ncmFtO1xufVxuXG52YXIgY29tcGlsZVNoYWRlciA9IGZ1bmN0aW9uIChnbCwgdHlwZSwgc3JjKVxue1xuICAgIHZhciBzaGFkZXIgPSBnbC5jcmVhdGVTaGFkZXIodHlwZSk7XG5cbiAgICBnbC5zaGFkZXJTb3VyY2Uoc2hhZGVyLCBzcmMpO1xuICAgIGdsLmNvbXBpbGVTaGFkZXIoc2hhZGVyKTtcblxuICAgIGlmICghZ2wuZ2V0U2hhZGVyUGFyYW1ldGVyKHNoYWRlciwgZ2wuQ09NUElMRV9TVEFUVVMpKVxuICAgIHtcbiAgICAgICAgY29uc29sZS5sb2coZ2wuZ2V0U2hhZGVySW5mb0xvZyhzaGFkZXIpKTtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgcmV0dXJuIHNoYWRlcjtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gY29tcGlsZVByb2dyYW07XG5cbiIsIlxuXG52YXIgZGVmYXVsdFZhbHVlID0gZnVuY3Rpb24odHlwZSwgc2l6ZSkgXG57XG4gICAgc3dpdGNoICh0eXBlKVxuICAgIHtcbiAgICAgICAgY2FzZSAnZmxvYXQnOlxuICAgICAgICAgICAgcmV0dXJuIDA7XG5cbiAgICAgICAgY2FzZSAndmVjMic6IFxuICAgICAgICAgICAgcmV0dXJuIG5ldyBGbG9hdDMyQXJyYXkoMiAqIHNpemUpO1xuXG4gICAgICAgIGNhc2UgJ3ZlYzMnOlxuICAgICAgICAgICAgcmV0dXJuIG5ldyBGbG9hdDMyQXJyYXkoMyAqIHNpemUpO1xuXG4gICAgICAgIGNhc2UgJ3ZlYzQnOiAgICAgXG4gICAgICAgICAgICByZXR1cm4gbmV3IEZsb2F0MzJBcnJheSg0ICogc2l6ZSk7XG4gICAgICAgICAgICBcbiAgICAgICAgY2FzZSAnaW50JzpcbiAgICAgICAgY2FzZSAnc2FtcGxlcjJEJzpcbiAgICAgICAgICAgIHJldHVybiAwO1xuXG4gICAgICAgIGNhc2UgJ2l2ZWMyJzogICBcbiAgICAgICAgICAgIHJldHVybiBuZXcgSW50MzJBcnJheSgyICogc2l6ZSk7XG5cbiAgICAgICAgY2FzZSAnaXZlYzMnOlxuICAgICAgICAgICAgcmV0dXJuIG5ldyBJbnQzMkFycmF5KDMgKiBzaXplKTtcblxuICAgICAgICBjYXNlICdpdmVjNCc6IFxuICAgICAgICAgICAgcmV0dXJuIG5ldyBJbnQzMkFycmF5KDQgKiBzaXplKTtcblxuICAgICAgICBjYXNlICdib29sJzogICAgIFxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuXG4gICAgICAgIGNhc2UgJ2J2ZWMyJzpcblxuICAgICAgICAgICAgcmV0dXJuIGJvb2xlYW5BcnJheSggMiAqIHNpemUpO1xuXG4gICAgICAgIGNhc2UgJ2J2ZWMzJzpcbiAgICAgICAgICAgIHJldHVybiBib29sZWFuQXJyYXkoMyAqIHNpemUpO1xuXG4gICAgICAgIGNhc2UgJ2J2ZWM0JzpcbiAgICAgICAgICAgIHJldHVybiBib29sZWFuQXJyYXkoNCAqIHNpemUpO1xuXG4gICAgICAgIGNhc2UgJ21hdDInOlxuICAgICAgICAgICAgcmV0dXJuIG5ldyBGbG9hdDMyQXJyYXkoWzEsIDBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwwLCAxXSk7XG5cbiAgICAgICAgY2FzZSAnbWF0Myc6IFxuICAgICAgICAgICAgcmV0dXJuIG5ldyBGbG9hdDMyQXJyYXkoWzEsIDAsIDBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwwLCAxLCAwXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsMCwgMCwgMV0pO1xuXG4gICAgICAgIGNhc2UgJ21hdDQnOlxuICAgICAgICAgICAgcmV0dXJuIG5ldyBGbG9hdDMyQXJyYXkoWzEsIDAsIDAsIDBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwwLCAxLCAwLCAwXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsMCwgMCwgMSwgMFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLDAsIDAsIDAsIDFdKTtcbiAgICB9XG59XG5cbnZhciBib29sZWFuQXJyYXkgPSBmdW5jdGlvbihzaXplKVxue1xuICAgIHZhciBhcnJheSA9IG5ldyBBcnJheShzaXplKTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXJyYXkubGVuZ3RoOyBpKyspIFxuICAgIHtcbiAgICAgICAgYXJyYXlbaV0gPSBmYWxzZTtcbiAgICB9O1xuXG4gICAgcmV0dXJuIGFycmF5O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGRlZmF1bHRWYWx1ZTtcbiIsIlxudmFyIG1hcFR5cGUgPSByZXF1aXJlKCcuL21hcFR5cGUnKTtcbnZhciBtYXBTaXplID0gcmVxdWlyZSgnLi9tYXBTaXplJyk7XG5cbnZhciBleHRyYWN0QXR0cmlidXRlcyA9IGZ1bmN0aW9uKGdsLCBwcm9ncmFtKVxue1xuICAgIHZhciBhdHRyaWJ1dGVzID0ge307XG5cbiAgICB2YXIgdG90YWxBdHRyaWJ1dGVzID0gZ2wuZ2V0UHJvZ3JhbVBhcmFtZXRlcihwcm9ncmFtLCBnbC5BQ1RJVkVfQVRUUklCVVRFUylcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdG90YWxBdHRyaWJ1dGVzOyBpKyspIFxuICAgIHtcbiAgICAgICAgdmFyIGF0dHJpYkRhdGEgPSBnbC5nZXRBY3RpdmVBdHRyaWIocHJvZ3JhbSwgaSk7XG4gICAgICAgIHZhciB0eXBlID0gbWFwVHlwZShnbCwgYXR0cmliRGF0YS50eXBlKTtcblxuICAgICAgICBhdHRyaWJ1dGVzW2F0dHJpYkRhdGEubmFtZV0gPSB7XG4gICAgICAgICAgICB0eXBlOnR5cGUsXG4gICAgICAgICAgICBzaXplOm1hcFNpemUodHlwZSksXG4gICAgICAgICAgICBsb2NhdGlvbjpnbC5nZXRBdHRyaWJMb2NhdGlvbihwcm9ncmFtLCBhdHRyaWJEYXRhLm5hbWUpLFxuICAgICAgICAgICAgLy9UT0RPIC0gbWFrZSBhbiBhdHRyaWJ1dGUgb2JqZWN0XG4gICAgICAgICAgICBwb2ludGVyOmZ1bmN0aW9uKHR5cGUsIG5vcm1hbGl6ZWQsIHN0cmlkZSwgc3RhcnQpe1xuXG4gICAgICAgICAgICAgLy8gICBjb25zb2xlLmxvZyh0aGlzLmxvY2F0aW9uKVxuICAgICAgICAgICAgICAgIGdsLnZlcnRleEF0dHJpYlBvaW50ZXIodGhpcy5sb2NhdGlvbix0aGlzLnNpemUsIHR5cGUgfHwgZ2wuRkxPQVQsIG5vcm1hbGl6ZWQgfHwgZmFsc2UsIHN0cmlkZSB8fCAwLCBzdGFydCB8fCAwKTsgXG5cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH07XG5cbiAgICByZXR1cm4gYXR0cmlidXRlczsgIFxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGV4dHJhY3RBdHRyaWJ1dGVzO1xuXG4iLCJ2YXIgbWFwVHlwZSA9IHJlcXVpcmUoJy4vbWFwVHlwZScpO1xudmFyIGRlZmF1bHRWYWx1ZSA9IHJlcXVpcmUoJy4vZGVmYXVsdFZhbHVlJyk7XG5cblxudmFyIGV4dHJhY3RVbmlmb3JtcyA9IGZ1bmN0aW9uKGdsLCBwcm9ncmFtKVxue1xuXHR2YXIgdW5pZm9ybXMgPSB7fTtcblx0XG4gICAgdmFyIHRvdGFsVW5pZm9ybXMgPSBnbC5nZXRQcm9ncmFtUGFyYW1ldGVyKHByb2dyYW0sIGdsLkFDVElWRV9VTklGT1JNUylcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdG90YWxVbmlmb3JtczsgaSsrKSBcbiAgICB7XG4gICAgXHR2YXIgdW5pZm9ybURhdGEgPSBnbC5nZXRBY3RpdmVVbmlmb3JtKHByb2dyYW0sIGkpO1xuICAgIFx0dmFyIG5hbWUgPSB1bmlmb3JtRGF0YS5uYW1lLnJlcGxhY2UoL1xcWy4qP1xcXS8sIFwiXCIpO1xuICAgICAgICB2YXIgdHlwZSA9IG1hcFR5cGUoZ2wsIHVuaWZvcm1EYXRhLnR5cGUgKTtcblxuICAgIFx0dW5pZm9ybXNbbmFtZV0gPSB7XG4gICAgXHRcdHR5cGU6dHlwZSxcbiAgICBcdFx0c2l6ZTp1bmlmb3JtRGF0YS5zaXplLFxuICAgIFx0XHRsb2NhdGlvbjpnbC5nZXRVbmlmb3JtTG9jYXRpb24ocHJvZ3JhbSwgbmFtZSksXG4gICAgXHRcdHZhbHVlOmRlZmF1bHRWYWx1ZSh0eXBlLCB1bmlmb3JtRGF0YS5zaXplKVxuICAgIFx0fVxuICAgIH07XG5cdFxuXHRyZXR1cm4gdW5pZm9ybXM7XHRcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBleHRyYWN0VW5pZm9ybXM7XG5cbiIsIlxudmFyIGdlbmVyYXRlVW5pZm9ybUFjY2Vzc09iamVjdCA9IGZ1bmN0aW9uKGdsLCB1bmlmb3JtRGF0YSlcbntcbiAgICAvLyB0aGlzIGlzIHRoZSBvYmplY3Qgd2Ugd2lsbCBiZSBzZW5kaW5nIGJhY2suXG4gICAgLy8gYW4gb2JqZWN0IGhpZXJhY2h5IHdpbGwgYmUgY3JlYXRlZCBmb3Igc3RydWN0c1xuICAgIHZhciB1bmlmb3JtcyA9IHtkYXRhOnt9fTtcblxuICAgIHVuaWZvcm1zLmdsID0gZ2w7XG4gICAgXG4gICAgdmFyIHVuaWZvcm1LZXlzPSBPYmplY3Qua2V5cyh1bmlmb3JtRGF0YSk7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHVuaWZvcm1LZXlzLmxlbmd0aDsgaSsrKSBcbiAgICB7XG4gICAgICAgIHZhciBmdWxsTmFtZSA9IHVuaWZvcm1LZXlzW2ldXG5cbiAgICAgICAgdmFyIG5hbWVUb2tlbnMgPSBmdWxsTmFtZS5zcGxpdCgnLicpO1xuICAgICAgICB2YXIgbmFtZSA9IG5hbWVUb2tlbnNbbmFtZVRva2Vucy5sZW5ndGggLSAxXTtcblxuICAgICAgICB2YXIgdW5pZm9ybUdyb3VwID0gZ2V0VW5pZm9ybUdyb3VwKG5hbWVUb2tlbnMsIHVuaWZvcm1zKTtcblxuICAgICAgICB2YXIgdW5pZm9ybSA9ICB1bmlmb3JtRGF0YVtmdWxsTmFtZV07XG4gICAgICAgIHVuaWZvcm1Hcm91cC5kYXRhW25hbWVdID0gdW5pZm9ybTtcblxuICAgICAgICB1bmlmb3JtR3JvdXAuZ2wgPSBnbDtcblxuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodW5pZm9ybUdyb3VwLCBuYW1lLCB7XG4gICAgICAgICAgICBnZXQ6IGdlbmVyYXRlR2V0dGVyKG5hbWUpLFxuICAgICAgICAgICAgc2V0OiBnZW5lcmF0ZVNldHRlcihuYW1lLCB1bmlmb3JtKVxuICAgICAgICB9KVxuICAgIH07XG5cbiAgICByZXR1cm4gdW5pZm9ybXM7XG59XG5cbnZhciBnZW5lcmF0ZUdldHRlciA9IGZ1bmN0aW9uKG5hbWUpXG57XG5cdHZhciB0ZW1wbGF0ZSA9IGdldHRlclRlbXBsYXRlLnJlcGxhY2UoJyUlJywgbmFtZSk7XG5cdHJldHVybiBuZXcgRnVuY3Rpb24odGVtcGxhdGUpO1xufVxuXG52YXIgZ2VuZXJhdGVTZXR0ZXIgPSBmdW5jdGlvbihuYW1lLCB1bmlmb3JtKVxue1xuICAgIHZhciB0ZW1wbGF0ZSA9IHNldHRlclRlbXBsYXRlLnJlcGxhY2UoLyUlL2csIG5hbWUpO1xuICAgIHZhciBzZXRUZW1wbGF0ZVxuICAgIFxuICAgIGlmKHVuaWZvcm0uc2l6ZSA9PT0gMSlcbiAgICB7XG4gICAgICAgIHNldFRlbXBsYXRlID0gR0xTTF9UT19TSU5HTEVfU0VUVEVSU1t1bmlmb3JtLnR5cGVdO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICBzZXRUZW1wbGF0ZSA9IEdMU0xfVE9fQVJSQVlfU0VUVEVSU1t1bmlmb3JtLnR5cGVdO1xuICAgIH1cblxuICAgIGlmKHNldFRlbXBsYXRlKVxuICAgIHtcbiAgICAgICAgdGVtcGxhdGUgKz0gXCJcXG50aGlzLmdsLlwiICsgc2V0VGVtcGxhdGUgKyBcIjtcIjtcbiAgICB9XG5cbiAgXHRyZXR1cm4gbmV3IEZ1bmN0aW9uKCd2YWx1ZScsIHRlbXBsYXRlKTtcbn1cblxudmFyIGdldFVuaWZvcm1Hcm91cCA9IGZ1bmN0aW9uKG5hbWVUb2tlbnMsIHVuaWZvcm0pXG57XG4gICAgdmFyIGN1ciA9IHVuaWZvcm07XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG5hbWVUb2tlbnMubGVuZ3RoIC0gMTsgaSsrKSBcbiAgICB7XG4gICAgICAgIHZhciBvID0gY3VyW25hbWVUb2tlbnNbaV1dIHx8IHtkYXRhOnt9fTtcbiAgICAgICAgY3VyW25hbWVUb2tlbnNbaV1dID0gbztcbiAgICAgICAgY3VyID0gbztcbiAgICB9O1xuXG4gICAgcmV0dXJuIGN1clxufVxuXG52YXIgZ2V0dGVyVGVtcGxhdGUgPSBbXG4gICAgJ3JldHVybiB0aGlzLmRhdGEuJSUudmFsdWU7Jyxcbl0uam9pbignXFxuJyk7XG5cbnZhciBzZXR0ZXJUZW1wbGF0ZSA9IFtcbiAgICAndGhpcy5kYXRhLiUlLnZhbHVlID0gdmFsdWU7JyxcbiAgICAndmFyIGxvY2F0aW9uID0gdGhpcy5kYXRhLiUlLmxvY2F0aW9uOydcbl0uam9pbignXFxuJyk7XG5cblxudmFyIEdMU0xfVE9fU0lOR0xFX1NFVFRFUlMgPSB7XG5cbiAgICAnZmxvYXQnOiAgICAndW5pZm9ybTFmKGxvY2F0aW9uLCB2YWx1ZSknLFxuXG4gICAgJ3ZlYzInOiAgICAgJ3VuaWZvcm0yZihsb2NhdGlvbiwgdmFsdWVbMF0sIHZhbHVlWzFdKScsXG4gICAgJ3ZlYzMnOiAgICAgJ3VuaWZvcm0zZihsb2NhdGlvbiwgdmFsdWVbMF0sIHZhbHVlWzFdLCB2YWx1ZVsyXSknLFxuICAgICd2ZWM0JzogICAgICd1bmlmb3JtNGYobG9jYXRpb24sIHZhbHVlWzBdLCB2YWx1ZVsxXSwgdmFsdWVbMl0sIHZhbHVlWzNdKScsXG4gICAgXHRcbiAgICAnaW50JzogICAgICAndW5pZm9ybTFpKGxvY2F0aW9uLCB2YWx1ZSknLFxuICAgICdpdmVjMic6ICAgICd1bmlmb3JtMmkobG9jYXRpb24sIHZhbHVlWzBdLCB2YWx1ZVsxXSknLFxuICAgICdpdmVjMyc6ICAgICd1bmlmb3JtM2kobG9jYXRpb24sIHZhbHVlWzBdLCB2YWx1ZVsxXSwgdmFsdWVbMl0pJyxcbiAgICAnaXZlYzQnOiAgICAndW5pZm9ybTRpKGxvY2F0aW9uLCB2YWx1ZVswXSwgdmFsdWVbMV0sIHZhbHVlWzJdLCB2YWx1ZVszXSknLFxuXG4gICAgJ2Jvb2wnOiAgICAgJ3VuaWZvcm0xaShsb2NhdGlvbiwgdmFsdWUpJyxcbiAgICAnYnZlYzInOiAgICAndW5pZm9ybTJpKGxvY2F0aW9uLCB2YWx1ZVswXSwgdmFsdWVbMV0pJyxcbiAgICAnYnZlYzMnOiAgICAndW5pZm9ybTNpKGxvY2F0aW9uLCB2YWx1ZVswXSwgdmFsdWVbMV0sIHZhbHVlWzJdKScsXG4gICAgJ2J2ZWM0JzogICAgJ3VuaWZvcm00aShsb2NhdGlvbiwgdmFsdWVbMF0sIHZhbHVlWzFdLCB2YWx1ZVsyXSwgdmFsdWVbM10pJyxcblxuICAgICdtYXQyJzogICAgICd1bmlmb3JtTWF0cml4MmZ2KGxvY2F0aW9uLCBmYWxzZSwgdmFsdWUpJyxcbiAgICAnbWF0Myc6ICAgICAndW5pZm9ybU1hdHJpeDNmdihsb2NhdGlvbiwgZmFsc2UsIHZhbHVlKScsXG4gICAgJ21hdDQnOiAgICAgJ3VuaWZvcm1NYXRyaXg0ZnYobG9jYXRpb24sIGZhbHNlLCB2YWx1ZSknLFxuXG4gICAgJ3NhbXBsZXIyRCc6J3VuaWZvcm0xaShsb2NhdGlvbiwgdmFsdWUpJ1xufVxuXG52YXIgR0xTTF9UT19BUlJBWV9TRVRURVJTID0ge1xuXG4gICAgJ2Zsb2F0JzogICAgJ3VuaWZvcm0xZnYobG9jYXRpb24sIHZhbHVlKScsXG5cbiAgICAndmVjMic6ICAgICAndW5pZm9ybTJmdihsb2NhdGlvbiwgdmFsdWUpJyxcbiAgICAndmVjMyc6ICAgICAndW5pZm9ybTNmdihsb2NhdGlvbiwgdmFsdWUpJyxcbiAgICAndmVjNCc6ICAgICAndW5pZm9ybTRmdihsb2NhdGlvbiwgdmFsdWUpJyxcbiAgICBcdFxuICAgICdpbnQnOiAgICAgICd1bmlmb3JtMWl2KGxvY2F0aW9uLCB2YWx1ZSknLFxuICAgICdpdmVjMic6ICAgICd1bmlmb3JtMml2KGxvY2F0aW9uLCB2YWx1ZSknLFxuICAgICdpdmVjMyc6ICAgICd1bmlmb3JtM2l2KGxvY2F0aW9uLCB2YWx1ZSknLFxuICAgICdpdmVjNCc6ICAgICd1bmlmb3JtNGl2KGxvY2F0aW9uLCB2YWx1ZSknLFxuXG4gICAgJ2Jvb2wnOiAgICAgJ3VuaWZvcm0xaXYobG9jYXRpb24sIHZhbHVlKScsXG4gICAgJ2J2ZWMyJzogICAgJ3VuaWZvcm0yaXYobG9jYXRpb24sIHZhbHVlKScsXG4gICAgJ2J2ZWMzJzogICAgJ3VuaWZvcm0zaXYobG9jYXRpb24sIHZhbHVlKScsXG4gICAgJ2J2ZWM0JzogICAgJ3VuaWZvcm00aXYobG9jYXRpb24sIHZhbHVlKScsXG4gICBcbiAgICAnc2FtcGxlcjJEJzondW5pZm9ybTFpdihsb2NhdGlvbiwgdmFsdWUpJ1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGdlbmVyYXRlVW5pZm9ybUFjY2Vzc09iamVjdDtcblxuIiwiXG5cbnZhciBtYXBTaXplID0gZnVuY3Rpb24odHlwZSkgXG57IFxuICAgIHJldHVybiBHTFNMX1RPX1NJWkVbdHlwZV07XG59XG5cblxudmFyIEdMU0xfVE9fU0laRSA9IHtcbiAgICAnZmxvYXQnOiAgICAxLFxuICAgICd2ZWMyJzogICAgIDIsXG4gICAgJ3ZlYzMnOiAgICAgMyxcbiAgICAndmVjNCc6ICAgICA0LFxuXG4gICAgJ2ludCc6ICAgICAgMSxcbiAgICAnaXZlYzInOiAgICAyLFxuICAgICdpdmVjMyc6ICAgIDMsXG4gICAgJ2l2ZWM0JzogICAgNCxcblxuICAgICdib29sJzogICAgIDEsXG4gICAgJ2J2ZWMyJzogICAgMixcbiAgICAnYnZlYzMnOiAgICAzLFxuICAgICdidmVjNCc6ICAgIDQsXG5cbiAgICAnbWF0Mic6ICAgICA0LFxuICAgICdtYXQzJzogICAgIDksXG4gICAgJ21hdDQnOiAgICAgMTYsXG5cbiAgICAnc2FtcGxlcjJEJzogIDFcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBtYXBTaXplO1xuIiwiXG5cbnZhciBtYXBTaXplID0gZnVuY3Rpb24oZ2wsIHR5cGUpIFxue1xuICAgIGlmKCFHTF9UQUJMRSkgXG4gICAge1xuICAgICAgICB2YXIgdHlwZU5hbWVzID0gT2JqZWN0LmtleXMoR0xfVE9fR0xTTF9UWVBFUyk7XG5cbiAgICAgICAgR0xfVEFCTEUgPSB7fTtcblxuICAgICAgICBmb3IodmFyIGkgPSAwOyBpIDwgdHlwZU5hbWVzLmxlbmd0aDsgKytpKSBcbiAgICAgICAge1xuICAgICAgICAgICAgdmFyIHRuID0gdHlwZU5hbWVzW2ldO1xuICAgICAgICAgICAgR0xfVEFCTEVbIGdsW3RuXSBdID0gR0xfVE9fR0xTTF9UWVBFU1t0bl07XG4gICAgICAgIH1cbiAgICB9XG5cbiAgcmV0dXJuIEdMX1RBQkxFW3R5cGVdO1xufVxuXG52YXIgR0xfVEFCTEUgPSBudWxsO1xuXG52YXIgR0xfVE9fR0xTTF9UWVBFUyA9IHtcbiAgJ0ZMT0FUJzogICAgICAgJ2Zsb2F0JyxcbiAgJ0ZMT0FUX1ZFQzInOiAgJ3ZlYzInLFxuICAnRkxPQVRfVkVDMyc6ICAndmVjMycsXG4gICdGTE9BVF9WRUM0JzogICd2ZWM0JyxcblxuICAnSU5UJzogICAgICAgICAnaW50JyxcbiAgJ0lOVF9WRUMyJzogICAgJ2l2ZWMyJyxcbiAgJ0lOVF9WRUMzJzogICAgJ2l2ZWMzJyxcbiAgJ0lOVF9WRUM0JzogICAgJ2l2ZWM0JyxcbiAgXG4gICdCT09MJzogICAgICAgICdib29sJyxcbiAgJ0JPT0xfVkVDMic6ICAgJ2J2ZWMyJyxcbiAgJ0JPT0xfVkVDMyc6ICAgJ2J2ZWMzJyxcbiAgJ0JPT0xfVkVDNCc6ICAgJ2J2ZWM0JyxcbiAgXG4gICdGTE9BVF9NQVQyJzogICdtYXQyJyxcbiAgJ0ZMT0FUX01BVDMnOiAgJ21hdDMnLFxuICAnRkxPQVRfTUFUNCc6ICAnbWF0NCcsXG4gIFxuICAnU0FNUExFUl8yRCc6ICAnc2FtcGxlcjJEJyAgXG59XG5cbm1vZHVsZS5leHBvcnRzID0gbWFwU2l6ZTtcbiIsIi8qIVxuICogYXN5bmNcbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS9jYW9sYW4vYXN5bmNcbiAqXG4gKiBDb3B5cmlnaHQgMjAxMC0yMDE0IENhb2xhbiBNY01haG9uXG4gKiBSZWxlYXNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2VcbiAqL1xuKGZ1bmN0aW9uICgpIHtcblxuICAgIHZhciBhc3luYyA9IHt9O1xuICAgIGZ1bmN0aW9uIG5vb3AoKSB7fVxuICAgIGZ1bmN0aW9uIGlkZW50aXR5KHYpIHtcbiAgICAgICAgcmV0dXJuIHY7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHRvQm9vbCh2KSB7XG4gICAgICAgIHJldHVybiAhIXY7XG4gICAgfVxuICAgIGZ1bmN0aW9uIG5vdElkKHYpIHtcbiAgICAgICAgcmV0dXJuICF2O1xuICAgIH1cblxuICAgIC8vIGdsb2JhbCBvbiB0aGUgc2VydmVyLCB3aW5kb3cgaW4gdGhlIGJyb3dzZXJcbiAgICB2YXIgcHJldmlvdXNfYXN5bmM7XG5cbiAgICAvLyBFc3RhYmxpc2ggdGhlIHJvb3Qgb2JqZWN0LCBgd2luZG93YCAoYHNlbGZgKSBpbiB0aGUgYnJvd3NlciwgYGdsb2JhbGBcbiAgICAvLyBvbiB0aGUgc2VydmVyLCBvciBgdGhpc2AgaW4gc29tZSB2aXJ0dWFsIG1hY2hpbmVzLiBXZSB1c2UgYHNlbGZgXG4gICAgLy8gaW5zdGVhZCBvZiBgd2luZG93YCBmb3IgYFdlYldvcmtlcmAgc3VwcG9ydC5cbiAgICB2YXIgcm9vdCA9IHR5cGVvZiBzZWxmID09PSAnb2JqZWN0JyAmJiBzZWxmLnNlbGYgPT09IHNlbGYgJiYgc2VsZiB8fFxuICAgICAgICAgICAgdHlwZW9mIGdsb2JhbCA9PT0gJ29iamVjdCcgJiYgZ2xvYmFsLmdsb2JhbCA9PT0gZ2xvYmFsICYmIGdsb2JhbCB8fFxuICAgICAgICAgICAgdGhpcztcblxuICAgIGlmIChyb290ICE9IG51bGwpIHtcbiAgICAgICAgcHJldmlvdXNfYXN5bmMgPSByb290LmFzeW5jO1xuICAgIH1cblxuICAgIGFzeW5jLm5vQ29uZmxpY3QgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJvb3QuYXN5bmMgPSBwcmV2aW91c19hc3luYztcbiAgICAgICAgcmV0dXJuIGFzeW5jO1xuICAgIH07XG5cbiAgICBmdW5jdGlvbiBvbmx5X29uY2UoZm4pIHtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgaWYgKGZuID09PSBudWxsKSB0aHJvdyBuZXcgRXJyb3IoXCJDYWxsYmFjayB3YXMgYWxyZWFkeSBjYWxsZWQuXCIpO1xuICAgICAgICAgICAgZm4uYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICAgICAgICAgIGZuID0gbnVsbDtcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBfb25jZShmbikge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICBpZiAoZm4gPT09IG51bGwpIHJldHVybjtcbiAgICAgICAgICAgIGZuLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgICAgICAgICBmbiA9IG51bGw7XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgLy8vLyBjcm9zcy1icm93c2VyIGNvbXBhdGlibGl0eSBmdW5jdGlvbnMgLy8vL1xuXG4gICAgdmFyIF90b1N0cmluZyA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7XG5cbiAgICB2YXIgX2lzQXJyYXkgPSBBcnJheS5pc0FycmF5IHx8IGZ1bmN0aW9uIChvYmopIHtcbiAgICAgICAgcmV0dXJuIF90b1N0cmluZy5jYWxsKG9iaikgPT09ICdbb2JqZWN0IEFycmF5XSc7XG4gICAgfTtcblxuICAgIC8vIFBvcnRlZCBmcm9tIHVuZGVyc2NvcmUuanMgaXNPYmplY3RcbiAgICB2YXIgX2lzT2JqZWN0ID0gZnVuY3Rpb24ob2JqKSB7XG4gICAgICAgIHZhciB0eXBlID0gdHlwZW9mIG9iajtcbiAgICAgICAgcmV0dXJuIHR5cGUgPT09ICdmdW5jdGlvbicgfHwgdHlwZSA9PT0gJ29iamVjdCcgJiYgISFvYmo7XG4gICAgfTtcblxuICAgIGZ1bmN0aW9uIF9pc0FycmF5TGlrZShhcnIpIHtcbiAgICAgICAgcmV0dXJuIF9pc0FycmF5KGFycikgfHwgKFxuICAgICAgICAgICAgLy8gaGFzIGEgcG9zaXRpdmUgaW50ZWdlciBsZW5ndGggcHJvcGVydHlcbiAgICAgICAgICAgIHR5cGVvZiBhcnIubGVuZ3RoID09PSBcIm51bWJlclwiICYmXG4gICAgICAgICAgICBhcnIubGVuZ3RoID49IDAgJiZcbiAgICAgICAgICAgIGFyci5sZW5ndGggJSAxID09PSAwXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gX2FycmF5RWFjaChhcnIsIGl0ZXJhdG9yKSB7XG4gICAgICAgIHZhciBpbmRleCA9IC0xLFxuICAgICAgICAgICAgbGVuZ3RoID0gYXJyLmxlbmd0aDtcblxuICAgICAgICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgICAgICAgICAgaXRlcmF0b3IoYXJyW2luZGV4XSwgaW5kZXgsIGFycik7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBfbWFwKGFyciwgaXRlcmF0b3IpIHtcbiAgICAgICAgdmFyIGluZGV4ID0gLTEsXG4gICAgICAgICAgICBsZW5ndGggPSBhcnIubGVuZ3RoLFxuICAgICAgICAgICAgcmVzdWx0ID0gQXJyYXkobGVuZ3RoKTtcblxuICAgICAgICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgICAgICAgICAgcmVzdWx0W2luZGV4XSA9IGl0ZXJhdG9yKGFycltpbmRleF0sIGluZGV4LCBhcnIpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gX3JhbmdlKGNvdW50KSB7XG4gICAgICAgIHJldHVybiBfbWFwKEFycmF5KGNvdW50KSwgZnVuY3Rpb24gKHYsIGkpIHsgcmV0dXJuIGk7IH0pO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIF9yZWR1Y2UoYXJyLCBpdGVyYXRvciwgbWVtbykge1xuICAgICAgICBfYXJyYXlFYWNoKGFyciwgZnVuY3Rpb24gKHgsIGksIGEpIHtcbiAgICAgICAgICAgIG1lbW8gPSBpdGVyYXRvcihtZW1vLCB4LCBpLCBhKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBtZW1vO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIF9mb3JFYWNoT2Yob2JqZWN0LCBpdGVyYXRvcikge1xuICAgICAgICBfYXJyYXlFYWNoKF9rZXlzKG9iamVjdCksIGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgICAgIGl0ZXJhdG9yKG9iamVjdFtrZXldLCBrZXkpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBfaW5kZXhPZihhcnIsIGl0ZW0pIHtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcnIubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGlmIChhcnJbaV0gPT09IGl0ZW0pIHJldHVybiBpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiAtMTtcbiAgICB9XG5cbiAgICB2YXIgX2tleXMgPSBPYmplY3Qua2V5cyB8fCBmdW5jdGlvbiAob2JqKSB7XG4gICAgICAgIHZhciBrZXlzID0gW107XG4gICAgICAgIGZvciAodmFyIGsgaW4gb2JqKSB7XG4gICAgICAgICAgICBpZiAob2JqLmhhc093blByb3BlcnR5KGspKSB7XG4gICAgICAgICAgICAgICAga2V5cy5wdXNoKGspO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBrZXlzO1xuICAgIH07XG5cbiAgICBmdW5jdGlvbiBfa2V5SXRlcmF0b3IoY29sbCkge1xuICAgICAgICB2YXIgaSA9IC0xO1xuICAgICAgICB2YXIgbGVuO1xuICAgICAgICB2YXIga2V5cztcbiAgICAgICAgaWYgKF9pc0FycmF5TGlrZShjb2xsKSkge1xuICAgICAgICAgICAgbGVuID0gY29sbC5sZW5ndGg7XG4gICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24gbmV4dCgpIHtcbiAgICAgICAgICAgICAgICBpKys7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGkgPCBsZW4gPyBpIDogbnVsbDtcbiAgICAgICAgICAgIH07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBrZXlzID0gX2tleXMoY29sbCk7XG4gICAgICAgICAgICBsZW4gPSBrZXlzLmxlbmd0aDtcbiAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbiBuZXh0KCkge1xuICAgICAgICAgICAgICAgIGkrKztcbiAgICAgICAgICAgICAgICByZXR1cm4gaSA8IGxlbiA/IGtleXNbaV0gOiBudWxsO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIFNpbWlsYXIgdG8gRVM2J3MgcmVzdCBwYXJhbSAoaHR0cDovL2FyaXlhLm9maWxhYnMuY29tLzIwMTMvMDMvZXM2LWFuZC1yZXN0LXBhcmFtZXRlci5odG1sKVxuICAgIC8vIFRoaXMgYWNjdW11bGF0ZXMgdGhlIGFyZ3VtZW50cyBwYXNzZWQgaW50byBhbiBhcnJheSwgYWZ0ZXIgYSBnaXZlbiBpbmRleC5cbiAgICAvLyBGcm9tIHVuZGVyc2NvcmUuanMgKGh0dHBzOi8vZ2l0aHViLmNvbS9qYXNoa2VuYXMvdW5kZXJzY29yZS9wdWxsLzIxNDApLlxuICAgIGZ1bmN0aW9uIF9yZXN0UGFyYW0oZnVuYywgc3RhcnRJbmRleCkge1xuICAgICAgICBzdGFydEluZGV4ID0gc3RhcnRJbmRleCA9PSBudWxsID8gZnVuYy5sZW5ndGggLSAxIDogK3N0YXJ0SW5kZXg7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIHZhciBsZW5ndGggPSBNYXRoLm1heChhcmd1bWVudHMubGVuZ3RoIC0gc3RhcnRJbmRleCwgMCk7XG4gICAgICAgICAgICB2YXIgcmVzdCA9IEFycmF5KGxlbmd0aCk7XG4gICAgICAgICAgICBmb3IgKHZhciBpbmRleCA9IDA7IGluZGV4IDwgbGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgICAgICAgICAgICAgcmVzdFtpbmRleF0gPSBhcmd1bWVudHNbaW5kZXggKyBzdGFydEluZGV4XTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHN3aXRjaCAoc3RhcnRJbmRleCkge1xuICAgICAgICAgICAgICAgIGNhc2UgMDogcmV0dXJuIGZ1bmMuY2FsbCh0aGlzLCByZXN0KTtcbiAgICAgICAgICAgICAgICBjYXNlIDE6IHJldHVybiBmdW5jLmNhbGwodGhpcywgYXJndW1lbnRzWzBdLCByZXN0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIEN1cnJlbnRseSB1bnVzZWQgYnV0IGhhbmRsZSBjYXNlcyBvdXRzaWRlIG9mIHRoZSBzd2l0Y2ggc3RhdGVtZW50OlxuICAgICAgICAgICAgLy8gdmFyIGFyZ3MgPSBBcnJheShzdGFydEluZGV4ICsgMSk7XG4gICAgICAgICAgICAvLyBmb3IgKGluZGV4ID0gMDsgaW5kZXggPCBzdGFydEluZGV4OyBpbmRleCsrKSB7XG4gICAgICAgICAgICAvLyAgICAgYXJnc1tpbmRleF0gPSBhcmd1bWVudHNbaW5kZXhdO1xuICAgICAgICAgICAgLy8gfVxuICAgICAgICAgICAgLy8gYXJnc1tzdGFydEluZGV4XSA9IHJlc3Q7XG4gICAgICAgICAgICAvLyByZXR1cm4gZnVuYy5hcHBseSh0aGlzLCBhcmdzKTtcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBfd2l0aG91dEluZGV4KGl0ZXJhdG9yKSB7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAodmFsdWUsIGluZGV4LCBjYWxsYmFjaykge1xuICAgICAgICAgICAgcmV0dXJuIGl0ZXJhdG9yKHZhbHVlLCBjYWxsYmFjayk7XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgLy8vLyBleHBvcnRlZCBhc3luYyBtb2R1bGUgZnVuY3Rpb25zIC8vLy9cblxuICAgIC8vLy8gbmV4dFRpY2sgaW1wbGVtZW50YXRpb24gd2l0aCBicm93c2VyLWNvbXBhdGlibGUgZmFsbGJhY2sgLy8vL1xuXG4gICAgLy8gY2FwdHVyZSB0aGUgZ2xvYmFsIHJlZmVyZW5jZSB0byBndWFyZCBhZ2FpbnN0IGZha2VUaW1lciBtb2Nrc1xuICAgIHZhciBfc2V0SW1tZWRpYXRlID0gdHlwZW9mIHNldEltbWVkaWF0ZSA9PT0gJ2Z1bmN0aW9uJyAmJiBzZXRJbW1lZGlhdGU7XG5cbiAgICB2YXIgX2RlbGF5ID0gX3NldEltbWVkaWF0ZSA/IGZ1bmN0aW9uKGZuKSB7XG4gICAgICAgIC8vIG5vdCBhIGRpcmVjdCBhbGlhcyBmb3IgSUUxMCBjb21wYXRpYmlsaXR5XG4gICAgICAgIF9zZXRJbW1lZGlhdGUoZm4pO1xuICAgIH0gOiBmdW5jdGlvbihmbikge1xuICAgICAgICBzZXRUaW1lb3V0KGZuLCAwKTtcbiAgICB9O1xuXG4gICAgaWYgKHR5cGVvZiBwcm9jZXNzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgcHJvY2Vzcy5uZXh0VGljayA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBhc3luYy5uZXh0VGljayA9IHByb2Nlc3MubmV4dFRpY2s7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgYXN5bmMubmV4dFRpY2sgPSBfZGVsYXk7XG4gICAgfVxuICAgIGFzeW5jLnNldEltbWVkaWF0ZSA9IF9zZXRJbW1lZGlhdGUgPyBfZGVsYXkgOiBhc3luYy5uZXh0VGljaztcblxuXG4gICAgYXN5bmMuZm9yRWFjaCA9XG4gICAgYXN5bmMuZWFjaCA9IGZ1bmN0aW9uIChhcnIsIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICByZXR1cm4gYXN5bmMuZWFjaE9mKGFyciwgX3dpdGhvdXRJbmRleChpdGVyYXRvciksIGNhbGxiYWNrKTtcbiAgICB9O1xuXG4gICAgYXN5bmMuZm9yRWFjaFNlcmllcyA9XG4gICAgYXN5bmMuZWFjaFNlcmllcyA9IGZ1bmN0aW9uIChhcnIsIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICByZXR1cm4gYXN5bmMuZWFjaE9mU2VyaWVzKGFyciwgX3dpdGhvdXRJbmRleChpdGVyYXRvciksIGNhbGxiYWNrKTtcbiAgICB9O1xuXG5cbiAgICBhc3luYy5mb3JFYWNoTGltaXQgPVxuICAgIGFzeW5jLmVhY2hMaW1pdCA9IGZ1bmN0aW9uIChhcnIsIGxpbWl0LCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgcmV0dXJuIF9lYWNoT2ZMaW1pdChsaW1pdCkoYXJyLCBfd2l0aG91dEluZGV4KGl0ZXJhdG9yKSwgY2FsbGJhY2spO1xuICAgIH07XG5cbiAgICBhc3luYy5mb3JFYWNoT2YgPVxuICAgIGFzeW5jLmVhY2hPZiA9IGZ1bmN0aW9uIChvYmplY3QsIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICBjYWxsYmFjayA9IF9vbmNlKGNhbGxiYWNrIHx8IG5vb3ApO1xuICAgICAgICBvYmplY3QgPSBvYmplY3QgfHwgW107XG5cbiAgICAgICAgdmFyIGl0ZXIgPSBfa2V5SXRlcmF0b3Iob2JqZWN0KTtcbiAgICAgICAgdmFyIGtleSwgY29tcGxldGVkID0gMDtcblxuICAgICAgICB3aGlsZSAoKGtleSA9IGl0ZXIoKSkgIT0gbnVsbCkge1xuICAgICAgICAgICAgY29tcGxldGVkICs9IDE7XG4gICAgICAgICAgICBpdGVyYXRvcihvYmplY3Rba2V5XSwga2V5LCBvbmx5X29uY2UoZG9uZSkpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGNvbXBsZXRlZCA9PT0gMCkgY2FsbGJhY2sobnVsbCk7XG5cbiAgICAgICAgZnVuY3Rpb24gZG9uZShlcnIpIHtcbiAgICAgICAgICAgIGNvbXBsZXRlZC0tO1xuICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBDaGVjayBrZXkgaXMgbnVsbCBpbiBjYXNlIGl0ZXJhdG9yIGlzbid0IGV4aGF1c3RlZFxuICAgICAgICAgICAgLy8gYW5kIGRvbmUgcmVzb2x2ZWQgc3luY2hyb25vdXNseS5cbiAgICAgICAgICAgIGVsc2UgaWYgKGtleSA9PT0gbnVsbCAmJiBjb21wbGV0ZWQgPD0gMCkge1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrKG51bGwpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfTtcblxuICAgIGFzeW5jLmZvckVhY2hPZlNlcmllcyA9XG4gICAgYXN5bmMuZWFjaE9mU2VyaWVzID0gZnVuY3Rpb24gKG9iaiwgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgIGNhbGxiYWNrID0gX29uY2UoY2FsbGJhY2sgfHwgbm9vcCk7XG4gICAgICAgIG9iaiA9IG9iaiB8fCBbXTtcbiAgICAgICAgdmFyIG5leHRLZXkgPSBfa2V5SXRlcmF0b3Iob2JqKTtcbiAgICAgICAgdmFyIGtleSA9IG5leHRLZXkoKTtcbiAgICAgICAgZnVuY3Rpb24gaXRlcmF0ZSgpIHtcbiAgICAgICAgICAgIHZhciBzeW5jID0gdHJ1ZTtcbiAgICAgICAgICAgIGlmIChrZXkgPT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gY2FsbGJhY2sobnVsbCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpdGVyYXRvcihvYmpba2V5XSwga2V5LCBvbmx5X29uY2UoZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGtleSA9IG5leHRLZXkoKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGtleSA9PT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKG51bGwpO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN5bmMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhc3luYy5zZXRJbW1lZGlhdGUoaXRlcmF0ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZXJhdGUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgIHN5bmMgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBpdGVyYXRlKCk7XG4gICAgfTtcblxuXG5cbiAgICBhc3luYy5mb3JFYWNoT2ZMaW1pdCA9XG4gICAgYXN5bmMuZWFjaE9mTGltaXQgPSBmdW5jdGlvbiAob2JqLCBsaW1pdCwgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgIF9lYWNoT2ZMaW1pdChsaW1pdCkob2JqLCBpdGVyYXRvciwgY2FsbGJhY2spO1xuICAgIH07XG5cbiAgICBmdW5jdGlvbiBfZWFjaE9mTGltaXQobGltaXQpIHtcblxuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKG9iaiwgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICBjYWxsYmFjayA9IF9vbmNlKGNhbGxiYWNrIHx8IG5vb3ApO1xuICAgICAgICAgICAgb2JqID0gb2JqIHx8IFtdO1xuICAgICAgICAgICAgdmFyIG5leHRLZXkgPSBfa2V5SXRlcmF0b3Iob2JqKTtcbiAgICAgICAgICAgIGlmIChsaW1pdCA8PSAwKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKG51bGwpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdmFyIGRvbmUgPSBmYWxzZTtcbiAgICAgICAgICAgIHZhciBydW5uaW5nID0gMDtcbiAgICAgICAgICAgIHZhciBlcnJvcmVkID0gZmFsc2U7XG5cbiAgICAgICAgICAgIChmdW5jdGlvbiByZXBsZW5pc2ggKCkge1xuICAgICAgICAgICAgICAgIGlmIChkb25lICYmIHJ1bm5pbmcgPD0gMCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gY2FsbGJhY2sobnVsbCk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgd2hpbGUgKHJ1bm5pbmcgPCBsaW1pdCAmJiAhZXJyb3JlZCkge1xuICAgICAgICAgICAgICAgICAgICB2YXIga2V5ID0gbmV4dEtleSgpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoa2V5ID09PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBkb25lID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChydW5uaW5nIDw9IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhudWxsKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBydW5uaW5nICs9IDE7XG4gICAgICAgICAgICAgICAgICAgIGl0ZXJhdG9yKG9ialtrZXldLCBrZXksIG9ubHlfb25jZShmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBydW5uaW5nIC09IDE7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvcmVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcGxlbmlzaCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSkoKTtcbiAgICAgICAgfTtcbiAgICB9XG5cblxuICAgIGZ1bmN0aW9uIGRvUGFyYWxsZWwoZm4pIHtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChvYmosIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICAgICAgcmV0dXJuIGZuKGFzeW5jLmVhY2hPZiwgb2JqLCBpdGVyYXRvciwgY2FsbGJhY2spO1xuICAgICAgICB9O1xuICAgIH1cbiAgICBmdW5jdGlvbiBkb1BhcmFsbGVsTGltaXQoZm4pIHtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChvYmosIGxpbWl0LCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIHJldHVybiBmbihfZWFjaE9mTGltaXQobGltaXQpLCBvYmosIGl0ZXJhdG9yLCBjYWxsYmFjayk7XG4gICAgICAgIH07XG4gICAgfVxuICAgIGZ1bmN0aW9uIGRvU2VyaWVzKGZuKSB7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAob2JqLCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIHJldHVybiBmbihhc3luYy5lYWNoT2ZTZXJpZXMsIG9iaiwgaXRlcmF0b3IsIGNhbGxiYWNrKTtcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBfYXN5bmNNYXAoZWFjaGZuLCBhcnIsIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICBjYWxsYmFjayA9IF9vbmNlKGNhbGxiYWNrIHx8IG5vb3ApO1xuICAgICAgICBhcnIgPSBhcnIgfHwgW107XG4gICAgICAgIHZhciByZXN1bHRzID0gX2lzQXJyYXlMaWtlKGFycikgPyBbXSA6IHt9O1xuICAgICAgICBlYWNoZm4oYXJyLCBmdW5jdGlvbiAodmFsdWUsIGluZGV4LCBjYWxsYmFjaykge1xuICAgICAgICAgICAgaXRlcmF0b3IodmFsdWUsIGZ1bmN0aW9uIChlcnIsIHYpIHtcbiAgICAgICAgICAgICAgICByZXN1bHRzW2luZGV4XSA9IHY7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICBjYWxsYmFjayhlcnIsIHJlc3VsdHMpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBhc3luYy5tYXAgPSBkb1BhcmFsbGVsKF9hc3luY01hcCk7XG4gICAgYXN5bmMubWFwU2VyaWVzID0gZG9TZXJpZXMoX2FzeW5jTWFwKTtcbiAgICBhc3luYy5tYXBMaW1pdCA9IGRvUGFyYWxsZWxMaW1pdChfYXN5bmNNYXApO1xuXG4gICAgLy8gcmVkdWNlIG9ubHkgaGFzIGEgc2VyaWVzIHZlcnNpb24sIGFzIGRvaW5nIHJlZHVjZSBpbiBwYXJhbGxlbCB3b24ndFxuICAgIC8vIHdvcmsgaW4gbWFueSBzaXR1YXRpb25zLlxuICAgIGFzeW5jLmluamVjdCA9XG4gICAgYXN5bmMuZm9sZGwgPVxuICAgIGFzeW5jLnJlZHVjZSA9IGZ1bmN0aW9uIChhcnIsIG1lbW8sIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICBhc3luYy5lYWNoT2ZTZXJpZXMoYXJyLCBmdW5jdGlvbiAoeCwgaSwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIGl0ZXJhdG9yKG1lbW8sIHgsIGZ1bmN0aW9uIChlcnIsIHYpIHtcbiAgICAgICAgICAgICAgICBtZW1vID0gdjtcbiAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgIGNhbGxiYWNrKGVyciwgbWVtbyk7XG4gICAgICAgIH0pO1xuICAgIH07XG5cbiAgICBhc3luYy5mb2xkciA9XG4gICAgYXN5bmMucmVkdWNlUmlnaHQgPSBmdW5jdGlvbiAoYXJyLCBtZW1vLCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgdmFyIHJldmVyc2VkID0gX21hcChhcnIsIGlkZW50aXR5KS5yZXZlcnNlKCk7XG4gICAgICAgIGFzeW5jLnJlZHVjZShyZXZlcnNlZCwgbWVtbywgaXRlcmF0b3IsIGNhbGxiYWNrKTtcbiAgICB9O1xuXG4gICAgYXN5bmMudHJhbnNmb3JtID0gZnVuY3Rpb24gKGFyciwgbWVtbywgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAzKSB7XG4gICAgICAgICAgICBjYWxsYmFjayA9IGl0ZXJhdG9yO1xuICAgICAgICAgICAgaXRlcmF0b3IgPSBtZW1vO1xuICAgICAgICAgICAgbWVtbyA9IF9pc0FycmF5KGFycikgPyBbXSA6IHt9O1xuICAgICAgICB9XG5cbiAgICAgICAgYXN5bmMuZWFjaE9mKGFyciwgZnVuY3Rpb24odiwgaywgY2IpIHtcbiAgICAgICAgICAgIGl0ZXJhdG9yKG1lbW8sIHYsIGssIGNiKTtcbiAgICAgICAgfSwgZnVuY3Rpb24oZXJyKSB7XG4gICAgICAgICAgICBjYWxsYmFjayhlcnIsIG1lbW8pO1xuICAgICAgICB9KTtcbiAgICB9O1xuXG4gICAgZnVuY3Rpb24gX2ZpbHRlcihlYWNoZm4sIGFyciwgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgIHZhciByZXN1bHRzID0gW107XG4gICAgICAgIGVhY2hmbihhcnIsIGZ1bmN0aW9uICh4LCBpbmRleCwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIGl0ZXJhdG9yKHgsIGZ1bmN0aW9uICh2KSB7XG4gICAgICAgICAgICAgICAgaWYgKHYpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0cy5wdXNoKHtpbmRleDogaW5kZXgsIHZhbHVlOiB4fSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhbGxiYWNrKCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgY2FsbGJhY2soX21hcChyZXN1bHRzLnNvcnQoZnVuY3Rpb24gKGEsIGIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gYS5pbmRleCAtIGIuaW5kZXg7XG4gICAgICAgICAgICB9KSwgZnVuY3Rpb24gKHgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4geC52YWx1ZTtcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgYXN5bmMuc2VsZWN0ID1cbiAgICBhc3luYy5maWx0ZXIgPSBkb1BhcmFsbGVsKF9maWx0ZXIpO1xuXG4gICAgYXN5bmMuc2VsZWN0TGltaXQgPVxuICAgIGFzeW5jLmZpbHRlckxpbWl0ID0gZG9QYXJhbGxlbExpbWl0KF9maWx0ZXIpO1xuXG4gICAgYXN5bmMuc2VsZWN0U2VyaWVzID1cbiAgICBhc3luYy5maWx0ZXJTZXJpZXMgPSBkb1NlcmllcyhfZmlsdGVyKTtcblxuICAgIGZ1bmN0aW9uIF9yZWplY3QoZWFjaGZuLCBhcnIsIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICBfZmlsdGVyKGVhY2hmbiwgYXJyLCBmdW5jdGlvbih2YWx1ZSwgY2IpIHtcbiAgICAgICAgICAgIGl0ZXJhdG9yKHZhbHVlLCBmdW5jdGlvbih2KSB7XG4gICAgICAgICAgICAgICAgY2IoIXYpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sIGNhbGxiYWNrKTtcbiAgICB9XG4gICAgYXN5bmMucmVqZWN0ID0gZG9QYXJhbGxlbChfcmVqZWN0KTtcbiAgICBhc3luYy5yZWplY3RMaW1pdCA9IGRvUGFyYWxsZWxMaW1pdChfcmVqZWN0KTtcbiAgICBhc3luYy5yZWplY3RTZXJpZXMgPSBkb1NlcmllcyhfcmVqZWN0KTtcblxuICAgIGZ1bmN0aW9uIF9jcmVhdGVUZXN0ZXIoZWFjaGZuLCBjaGVjaywgZ2V0UmVzdWx0KSB7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbihhcnIsIGxpbWl0LCBpdGVyYXRvciwgY2IpIHtcbiAgICAgICAgICAgIGZ1bmN0aW9uIGRvbmUoKSB7XG4gICAgICAgICAgICAgICAgaWYgKGNiKSBjYihnZXRSZXN1bHQoZmFsc2UsIHZvaWQgMCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZnVuY3Rpb24gaXRlcmF0ZWUoeCwgXywgY2FsbGJhY2spIHtcbiAgICAgICAgICAgICAgICBpZiAoIWNiKSByZXR1cm4gY2FsbGJhY2soKTtcbiAgICAgICAgICAgICAgICBpdGVyYXRvcih4LCBmdW5jdGlvbiAodikge1xuICAgICAgICAgICAgICAgICAgICBpZiAoY2IgJiYgY2hlY2sodikpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNiKGdldFJlc3VsdCh0cnVlLCB4KSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBjYiA9IGl0ZXJhdG9yID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID4gMykge1xuICAgICAgICAgICAgICAgIGVhY2hmbihhcnIsIGxpbWl0LCBpdGVyYXRlZSwgZG9uZSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGNiID0gaXRlcmF0b3I7XG4gICAgICAgICAgICAgICAgaXRlcmF0b3IgPSBsaW1pdDtcbiAgICAgICAgICAgICAgICBlYWNoZm4oYXJyLCBpdGVyYXRlZSwgZG9uZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgYXN5bmMuYW55ID1cbiAgICBhc3luYy5zb21lID0gX2NyZWF0ZVRlc3Rlcihhc3luYy5lYWNoT2YsIHRvQm9vbCwgaWRlbnRpdHkpO1xuXG4gICAgYXN5bmMuc29tZUxpbWl0ID0gX2NyZWF0ZVRlc3Rlcihhc3luYy5lYWNoT2ZMaW1pdCwgdG9Cb29sLCBpZGVudGl0eSk7XG5cbiAgICBhc3luYy5hbGwgPVxuICAgIGFzeW5jLmV2ZXJ5ID0gX2NyZWF0ZVRlc3Rlcihhc3luYy5lYWNoT2YsIG5vdElkLCBub3RJZCk7XG5cbiAgICBhc3luYy5ldmVyeUxpbWl0ID0gX2NyZWF0ZVRlc3Rlcihhc3luYy5lYWNoT2ZMaW1pdCwgbm90SWQsIG5vdElkKTtcblxuICAgIGZ1bmN0aW9uIF9maW5kR2V0UmVzdWx0KHYsIHgpIHtcbiAgICAgICAgcmV0dXJuIHg7XG4gICAgfVxuICAgIGFzeW5jLmRldGVjdCA9IF9jcmVhdGVUZXN0ZXIoYXN5bmMuZWFjaE9mLCBpZGVudGl0eSwgX2ZpbmRHZXRSZXN1bHQpO1xuICAgIGFzeW5jLmRldGVjdFNlcmllcyA9IF9jcmVhdGVUZXN0ZXIoYXN5bmMuZWFjaE9mU2VyaWVzLCBpZGVudGl0eSwgX2ZpbmRHZXRSZXN1bHQpO1xuICAgIGFzeW5jLmRldGVjdExpbWl0ID0gX2NyZWF0ZVRlc3Rlcihhc3luYy5lYWNoT2ZMaW1pdCwgaWRlbnRpdHksIF9maW5kR2V0UmVzdWx0KTtcblxuICAgIGFzeW5jLnNvcnRCeSA9IGZ1bmN0aW9uIChhcnIsIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICBhc3luYy5tYXAoYXJyLCBmdW5jdGlvbiAoeCwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIGl0ZXJhdG9yKHgsIGZ1bmN0aW9uIChlcnIsIGNyaXRlcmlhKSB7XG4gICAgICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2sobnVsbCwge3ZhbHVlOiB4LCBjcml0ZXJpYTogY3JpdGVyaWF9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSwgZnVuY3Rpb24gKGVyciwgcmVzdWx0cykge1xuICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAgIHJldHVybiBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2sobnVsbCwgX21hcChyZXN1bHRzLnNvcnQoY29tcGFyYXRvciksIGZ1bmN0aW9uICh4KSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB4LnZhbHVlO1xuICAgICAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICB9KTtcblxuICAgICAgICBmdW5jdGlvbiBjb21wYXJhdG9yKGxlZnQsIHJpZ2h0KSB7XG4gICAgICAgICAgICB2YXIgYSA9IGxlZnQuY3JpdGVyaWEsIGIgPSByaWdodC5jcml0ZXJpYTtcbiAgICAgICAgICAgIHJldHVybiBhIDwgYiA/IC0xIDogYSA+IGIgPyAxIDogMDtcbiAgICAgICAgfVxuICAgIH07XG5cbiAgICBhc3luYy5hdXRvID0gZnVuY3Rpb24gKHRhc2tzLCBjb25jdXJyZW5jeSwgY2FsbGJhY2spIHtcbiAgICAgICAgaWYgKCFjYWxsYmFjaykge1xuICAgICAgICAgICAgLy8gY29uY3VycmVuY3kgaXMgb3B0aW9uYWwsIHNoaWZ0IHRoZSBhcmdzLlxuICAgICAgICAgICAgY2FsbGJhY2sgPSBjb25jdXJyZW5jeTtcbiAgICAgICAgICAgIGNvbmN1cnJlbmN5ID0gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBjYWxsYmFjayA9IF9vbmNlKGNhbGxiYWNrIHx8IG5vb3ApO1xuICAgICAgICB2YXIga2V5cyA9IF9rZXlzKHRhc2tzKTtcbiAgICAgICAgdmFyIHJlbWFpbmluZ1Rhc2tzID0ga2V5cy5sZW5ndGg7XG4gICAgICAgIGlmICghcmVtYWluaW5nVGFza3MpIHtcbiAgICAgICAgICAgIHJldHVybiBjYWxsYmFjayhudWxsKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWNvbmN1cnJlbmN5KSB7XG4gICAgICAgICAgICBjb25jdXJyZW5jeSA9IHJlbWFpbmluZ1Rhc2tzO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIHJlc3VsdHMgPSB7fTtcbiAgICAgICAgdmFyIHJ1bm5pbmdUYXNrcyA9IDA7XG5cbiAgICAgICAgdmFyIGxpc3RlbmVycyA9IFtdO1xuICAgICAgICBmdW5jdGlvbiBhZGRMaXN0ZW5lcihmbikge1xuICAgICAgICAgICAgbGlzdGVuZXJzLnVuc2hpZnQoZm4pO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIHJlbW92ZUxpc3RlbmVyKGZuKSB7XG4gICAgICAgICAgICB2YXIgaWR4ID0gX2luZGV4T2YobGlzdGVuZXJzLCBmbik7XG4gICAgICAgICAgICBpZiAoaWR4ID49IDApIGxpc3RlbmVycy5zcGxpY2UoaWR4LCAxKTtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiB0YXNrQ29tcGxldGUoKSB7XG4gICAgICAgICAgICByZW1haW5pbmdUYXNrcy0tO1xuICAgICAgICAgICAgX2FycmF5RWFjaChsaXN0ZW5lcnMuc2xpY2UoMCksIGZ1bmN0aW9uIChmbikge1xuICAgICAgICAgICAgICAgIGZuKCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGFkZExpc3RlbmVyKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGlmICghcmVtYWluaW5nVGFza3MpIHtcbiAgICAgICAgICAgICAgICBjYWxsYmFjayhudWxsLCByZXN1bHRzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgX2FycmF5RWFjaChrZXlzLCBmdW5jdGlvbiAoaykge1xuICAgICAgICAgICAgdmFyIHRhc2sgPSBfaXNBcnJheSh0YXNrc1trXSkgPyB0YXNrc1trXTogW3Rhc2tzW2tdXTtcbiAgICAgICAgICAgIHZhciB0YXNrQ2FsbGJhY2sgPSBfcmVzdFBhcmFtKGZ1bmN0aW9uKGVyciwgYXJncykge1xuICAgICAgICAgICAgICAgIHJ1bm5pbmdUYXNrcy0tO1xuICAgICAgICAgICAgICAgIGlmIChhcmdzLmxlbmd0aCA8PSAxKSB7XG4gICAgICAgICAgICAgICAgICAgIGFyZ3MgPSBhcmdzWzBdO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBzYWZlUmVzdWx0cyA9IHt9O1xuICAgICAgICAgICAgICAgICAgICBfZm9yRWFjaE9mKHJlc3VsdHMsIGZ1bmN0aW9uKHZhbCwgcmtleSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgc2FmZVJlc3VsdHNbcmtleV0gPSB2YWw7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICBzYWZlUmVzdWx0c1trXSA9IGFyZ3M7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKGVyciwgc2FmZVJlc3VsdHMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0c1trXSA9IGFyZ3M7XG4gICAgICAgICAgICAgICAgICAgIGFzeW5jLnNldEltbWVkaWF0ZSh0YXNrQ29tcGxldGUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdmFyIHJlcXVpcmVzID0gdGFzay5zbGljZSgwLCB0YXNrLmxlbmd0aCAtIDEpO1xuICAgICAgICAgICAgLy8gcHJldmVudCBkZWFkLWxvY2tzXG4gICAgICAgICAgICB2YXIgbGVuID0gcmVxdWlyZXMubGVuZ3RoO1xuICAgICAgICAgICAgdmFyIGRlcDtcbiAgICAgICAgICAgIHdoaWxlIChsZW4tLSkge1xuICAgICAgICAgICAgICAgIGlmICghKGRlcCA9IHRhc2tzW3JlcXVpcmVzW2xlbl1dKSkge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0hhcyBpbmV4aXN0YW50IGRlcGVuZGVuY3knKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKF9pc0FycmF5KGRlcCkgJiYgX2luZGV4T2YoZGVwLCBrKSA+PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignSGFzIGN5Y2xpYyBkZXBlbmRlbmNpZXMnKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmdW5jdGlvbiByZWFkeSgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcnVubmluZ1Rhc2tzIDwgY29uY3VycmVuY3kgJiYgX3JlZHVjZShyZXF1aXJlcywgZnVuY3Rpb24gKGEsIHgpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChhICYmIHJlc3VsdHMuaGFzT3duUHJvcGVydHkoeCkpO1xuICAgICAgICAgICAgICAgIH0sIHRydWUpICYmICFyZXN1bHRzLmhhc093blByb3BlcnR5KGspO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHJlYWR5KCkpIHtcbiAgICAgICAgICAgICAgICBydW5uaW5nVGFza3MrKztcbiAgICAgICAgICAgICAgICB0YXNrW3Rhc2subGVuZ3RoIC0gMV0odGFza0NhbGxiYWNrLCByZXN1bHRzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGFkZExpc3RlbmVyKGxpc3RlbmVyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZ1bmN0aW9uIGxpc3RlbmVyKCkge1xuICAgICAgICAgICAgICAgIGlmIChyZWFkeSgpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJ1bm5pbmdUYXNrcysrO1xuICAgICAgICAgICAgICAgICAgICByZW1vdmVMaXN0ZW5lcihsaXN0ZW5lcik7XG4gICAgICAgICAgICAgICAgICAgIHRhc2tbdGFzay5sZW5ndGggLSAxXSh0YXNrQ2FsbGJhY2ssIHJlc3VsdHMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfTtcblxuXG5cbiAgICBhc3luYy5yZXRyeSA9IGZ1bmN0aW9uKHRpbWVzLCB0YXNrLCBjYWxsYmFjaykge1xuICAgICAgICB2YXIgREVGQVVMVF9USU1FUyA9IDU7XG4gICAgICAgIHZhciBERUZBVUxUX0lOVEVSVkFMID0gMDtcblxuICAgICAgICB2YXIgYXR0ZW1wdHMgPSBbXTtcblxuICAgICAgICB2YXIgb3B0cyA9IHtcbiAgICAgICAgICAgIHRpbWVzOiBERUZBVUxUX1RJTUVTLFxuICAgICAgICAgICAgaW50ZXJ2YWw6IERFRkFVTFRfSU5URVJWQUxcbiAgICAgICAgfTtcblxuICAgICAgICBmdW5jdGlvbiBwYXJzZVRpbWVzKGFjYywgdCl7XG4gICAgICAgICAgICBpZih0eXBlb2YgdCA9PT0gJ251bWJlcicpe1xuICAgICAgICAgICAgICAgIGFjYy50aW1lcyA9IHBhcnNlSW50KHQsIDEwKSB8fCBERUZBVUxUX1RJTUVTO1xuICAgICAgICAgICAgfSBlbHNlIGlmKHR5cGVvZiB0ID09PSAnb2JqZWN0Jyl7XG4gICAgICAgICAgICAgICAgYWNjLnRpbWVzID0gcGFyc2VJbnQodC50aW1lcywgMTApIHx8IERFRkFVTFRfVElNRVM7XG4gICAgICAgICAgICAgICAgYWNjLmludGVydmFsID0gcGFyc2VJbnQodC5pbnRlcnZhbCwgMTApIHx8IERFRkFVTFRfSU5URVJWQUw7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignVW5zdXBwb3J0ZWQgYXJndW1lbnQgdHlwZSBmb3IgXFwndGltZXNcXCc6ICcgKyB0eXBlb2YgdCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgbGVuZ3RoID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgICAgICAgaWYgKGxlbmd0aCA8IDEgfHwgbGVuZ3RoID4gMykge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIGFyZ3VtZW50cyAtIG11c3QgYmUgZWl0aGVyICh0YXNrKSwgKHRhc2ssIGNhbGxiYWNrKSwgKHRpbWVzLCB0YXNrKSBvciAodGltZXMsIHRhc2ssIGNhbGxiYWNrKScpO1xuICAgICAgICB9IGVsc2UgaWYgKGxlbmd0aCA8PSAyICYmIHR5cGVvZiB0aW1lcyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgY2FsbGJhY2sgPSB0YXNrO1xuICAgICAgICAgICAgdGFzayA9IHRpbWVzO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0eXBlb2YgdGltZXMgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIHBhcnNlVGltZXMob3B0cywgdGltZXMpO1xuICAgICAgICB9XG4gICAgICAgIG9wdHMuY2FsbGJhY2sgPSBjYWxsYmFjaztcbiAgICAgICAgb3B0cy50YXNrID0gdGFzaztcblxuICAgICAgICBmdW5jdGlvbiB3cmFwcGVkVGFzayh3cmFwcGVkQ2FsbGJhY2ssIHdyYXBwZWRSZXN1bHRzKSB7XG4gICAgICAgICAgICBmdW5jdGlvbiByZXRyeUF0dGVtcHQodGFzaywgZmluYWxBdHRlbXB0KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKHNlcmllc0NhbGxiYWNrKSB7XG4gICAgICAgICAgICAgICAgICAgIHRhc2soZnVuY3Rpb24oZXJyLCByZXN1bHQpe1xuICAgICAgICAgICAgICAgICAgICAgICAgc2VyaWVzQ2FsbGJhY2soIWVyciB8fCBmaW5hbEF0dGVtcHQsIHtlcnI6IGVyciwgcmVzdWx0OiByZXN1bHR9KTtcbiAgICAgICAgICAgICAgICAgICAgfSwgd3JhcHBlZFJlc3VsdHMpO1xuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGZ1bmN0aW9uIHJldHJ5SW50ZXJ2YWwoaW50ZXJ2YWwpe1xuICAgICAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbihzZXJpZXNDYWxsYmFjayl7XG4gICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKXtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlcmllc0NhbGxiYWNrKG51bGwpO1xuICAgICAgICAgICAgICAgICAgICB9LCBpbnRlcnZhbCk7XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgd2hpbGUgKG9wdHMudGltZXMpIHtcblxuICAgICAgICAgICAgICAgIHZhciBmaW5hbEF0dGVtcHQgPSAhKG9wdHMudGltZXMtPTEpO1xuICAgICAgICAgICAgICAgIGF0dGVtcHRzLnB1c2gocmV0cnlBdHRlbXB0KG9wdHMudGFzaywgZmluYWxBdHRlbXB0KSk7XG4gICAgICAgICAgICAgICAgaWYoIWZpbmFsQXR0ZW1wdCAmJiBvcHRzLmludGVydmFsID4gMCl7XG4gICAgICAgICAgICAgICAgICAgIGF0dGVtcHRzLnB1c2gocmV0cnlJbnRlcnZhbChvcHRzLmludGVydmFsKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBhc3luYy5zZXJpZXMoYXR0ZW1wdHMsIGZ1bmN0aW9uKGRvbmUsIGRhdGEpe1xuICAgICAgICAgICAgICAgIGRhdGEgPSBkYXRhW2RhdGEubGVuZ3RoIC0gMV07XG4gICAgICAgICAgICAgICAgKHdyYXBwZWRDYWxsYmFjayB8fCBvcHRzLmNhbGxiYWNrKShkYXRhLmVyciwgZGF0YS5yZXN1bHQpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBJZiBhIGNhbGxiYWNrIGlzIHBhc3NlZCwgcnVuIHRoaXMgYXMgYSBjb250cm9sbCBmbG93XG4gICAgICAgIHJldHVybiBvcHRzLmNhbGxiYWNrID8gd3JhcHBlZFRhc2soKSA6IHdyYXBwZWRUYXNrO1xuICAgIH07XG5cbiAgICBhc3luYy53YXRlcmZhbGwgPSBmdW5jdGlvbiAodGFza3MsIGNhbGxiYWNrKSB7XG4gICAgICAgIGNhbGxiYWNrID0gX29uY2UoY2FsbGJhY2sgfHwgbm9vcCk7XG4gICAgICAgIGlmICghX2lzQXJyYXkodGFza3MpKSB7XG4gICAgICAgICAgICB2YXIgZXJyID0gbmV3IEVycm9yKCdGaXJzdCBhcmd1bWVudCB0byB3YXRlcmZhbGwgbXVzdCBiZSBhbiBhcnJheSBvZiBmdW5jdGlvbnMnKTtcbiAgICAgICAgICAgIHJldHVybiBjYWxsYmFjayhlcnIpO1xuICAgICAgICB9XG4gICAgICAgIGlmICghdGFza3MubGVuZ3RoKSB7XG4gICAgICAgICAgICByZXR1cm4gY2FsbGJhY2soKTtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiB3cmFwSXRlcmF0b3IoaXRlcmF0b3IpIHtcbiAgICAgICAgICAgIHJldHVybiBfcmVzdFBhcmFtKGZ1bmN0aW9uIChlcnIsIGFyZ3MpIHtcbiAgICAgICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrLmFwcGx5KG51bGwsIFtlcnJdLmNvbmNhdChhcmdzKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB2YXIgbmV4dCA9IGl0ZXJhdG9yLm5leHQoKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKG5leHQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3MucHVzaCh3cmFwSXRlcmF0b3IobmV4dCkpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgYXJncy5wdXNoKGNhbGxiYWNrKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbnN1cmVBc3luYyhpdGVyYXRvcikuYXBwbHkobnVsbCwgYXJncyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgd3JhcEl0ZXJhdG9yKGFzeW5jLml0ZXJhdG9yKHRhc2tzKSkoKTtcbiAgICB9O1xuXG4gICAgZnVuY3Rpb24gX3BhcmFsbGVsKGVhY2hmbiwgdGFza3MsIGNhbGxiYWNrKSB7XG4gICAgICAgIGNhbGxiYWNrID0gY2FsbGJhY2sgfHwgbm9vcDtcbiAgICAgICAgdmFyIHJlc3VsdHMgPSBfaXNBcnJheUxpa2UodGFza3MpID8gW10gOiB7fTtcblxuICAgICAgICBlYWNoZm4odGFza3MsIGZ1bmN0aW9uICh0YXNrLCBrZXksIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICB0YXNrKF9yZXN0UGFyYW0oZnVuY3Rpb24gKGVyciwgYXJncykge1xuICAgICAgICAgICAgICAgIGlmIChhcmdzLmxlbmd0aCA8PSAxKSB7XG4gICAgICAgICAgICAgICAgICAgIGFyZ3MgPSBhcmdzWzBdO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXN1bHRzW2tleV0gPSBhcmdzO1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgICB9KSk7XG4gICAgICAgIH0sIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgIGNhbGxiYWNrKGVyciwgcmVzdWx0cyk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGFzeW5jLnBhcmFsbGVsID0gZnVuY3Rpb24gKHRhc2tzLCBjYWxsYmFjaykge1xuICAgICAgICBfcGFyYWxsZWwoYXN5bmMuZWFjaE9mLCB0YXNrcywgY2FsbGJhY2spO1xuICAgIH07XG5cbiAgICBhc3luYy5wYXJhbGxlbExpbWl0ID0gZnVuY3Rpb24odGFza3MsIGxpbWl0LCBjYWxsYmFjaykge1xuICAgICAgICBfcGFyYWxsZWwoX2VhY2hPZkxpbWl0KGxpbWl0KSwgdGFza3MsIGNhbGxiYWNrKTtcbiAgICB9O1xuXG4gICAgYXN5bmMuc2VyaWVzID0gZnVuY3Rpb24odGFza3MsIGNhbGxiYWNrKSB7XG4gICAgICAgIF9wYXJhbGxlbChhc3luYy5lYWNoT2ZTZXJpZXMsIHRhc2tzLCBjYWxsYmFjayk7XG4gICAgfTtcblxuICAgIGFzeW5jLml0ZXJhdG9yID0gZnVuY3Rpb24gKHRhc2tzKSB7XG4gICAgICAgIGZ1bmN0aW9uIG1ha2VDYWxsYmFjayhpbmRleCkge1xuICAgICAgICAgICAgZnVuY3Rpb24gZm4oKSB7XG4gICAgICAgICAgICAgICAgaWYgKHRhc2tzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICB0YXNrc1tpbmRleF0uYXBwbHkobnVsbCwgYXJndW1lbnRzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZuLm5leHQoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZuLm5leHQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIChpbmRleCA8IHRhc2tzLmxlbmd0aCAtIDEpID8gbWFrZUNhbGxiYWNrKGluZGV4ICsgMSk6IG51bGw7XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgcmV0dXJuIGZuO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBtYWtlQ2FsbGJhY2soMCk7XG4gICAgfTtcblxuICAgIGFzeW5jLmFwcGx5ID0gX3Jlc3RQYXJhbShmdW5jdGlvbiAoZm4sIGFyZ3MpIHtcbiAgICAgICAgcmV0dXJuIF9yZXN0UGFyYW0oZnVuY3Rpb24gKGNhbGxBcmdzKSB7XG4gICAgICAgICAgICByZXR1cm4gZm4uYXBwbHkoXG4gICAgICAgICAgICAgICAgbnVsbCwgYXJncy5jb25jYXQoY2FsbEFyZ3MpXG4gICAgICAgICAgICApO1xuICAgICAgICB9KTtcbiAgICB9KTtcblxuICAgIGZ1bmN0aW9uIF9jb25jYXQoZWFjaGZuLCBhcnIsIGZuLCBjYWxsYmFjaykge1xuICAgICAgICB2YXIgcmVzdWx0ID0gW107XG4gICAgICAgIGVhY2hmbihhcnIsIGZ1bmN0aW9uICh4LCBpbmRleCwgY2IpIHtcbiAgICAgICAgICAgIGZuKHgsIGZ1bmN0aW9uIChlcnIsIHkpIHtcbiAgICAgICAgICAgICAgICByZXN1bHQgPSByZXN1bHQuY29uY2F0KHkgfHwgW10pO1xuICAgICAgICAgICAgICAgIGNiKGVycik7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSwgZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgY2FsbGJhY2soZXJyLCByZXN1bHQpO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgYXN5bmMuY29uY2F0ID0gZG9QYXJhbGxlbChfY29uY2F0KTtcbiAgICBhc3luYy5jb25jYXRTZXJpZXMgPSBkb1NlcmllcyhfY29uY2F0KTtcblxuICAgIGFzeW5jLndoaWxzdCA9IGZ1bmN0aW9uICh0ZXN0LCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgY2FsbGJhY2sgPSBjYWxsYmFjayB8fCBub29wO1xuICAgICAgICBpZiAodGVzdCgpKSB7XG4gICAgICAgICAgICB2YXIgbmV4dCA9IF9yZXN0UGFyYW0oZnVuY3Rpb24oZXJyLCBhcmdzKSB7XG4gICAgICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodGVzdC5hcHBseSh0aGlzLCBhcmdzKSkge1xuICAgICAgICAgICAgICAgICAgICBpdGVyYXRvcihuZXh0KTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhudWxsKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGl0ZXJhdG9yKG5leHQpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY2FsbGJhY2sobnVsbCk7XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgYXN5bmMuZG9XaGlsc3QgPSBmdW5jdGlvbiAoaXRlcmF0b3IsIHRlc3QsIGNhbGxiYWNrKSB7XG4gICAgICAgIHZhciBjYWxscyA9IDA7XG4gICAgICAgIHJldHVybiBhc3luYy53aGlsc3QoZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICByZXR1cm4gKytjYWxscyA8PSAxIHx8IHRlc3QuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICAgICAgfSwgaXRlcmF0b3IsIGNhbGxiYWNrKTtcbiAgICB9O1xuXG4gICAgYXN5bmMudW50aWwgPSBmdW5jdGlvbiAodGVzdCwgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgIHJldHVybiBhc3luYy53aGlsc3QoZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICByZXR1cm4gIXRlc3QuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICAgICAgfSwgaXRlcmF0b3IsIGNhbGxiYWNrKTtcbiAgICB9O1xuXG4gICAgYXN5bmMuZG9VbnRpbCA9IGZ1bmN0aW9uIChpdGVyYXRvciwgdGVzdCwgY2FsbGJhY2spIHtcbiAgICAgICAgcmV0dXJuIGFzeW5jLmRvV2hpbHN0KGl0ZXJhdG9yLCBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIHJldHVybiAhdGVzdC5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgICAgICB9LCBjYWxsYmFjayk7XG4gICAgfTtcblxuICAgIGFzeW5jLmR1cmluZyA9IGZ1bmN0aW9uICh0ZXN0LCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgY2FsbGJhY2sgPSBjYWxsYmFjayB8fCBub29wO1xuXG4gICAgICAgIHZhciBuZXh0ID0gX3Jlc3RQYXJhbShmdW5jdGlvbihlcnIsIGFyZ3MpIHtcbiAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBhcmdzLnB1c2goY2hlY2spO1xuICAgICAgICAgICAgICAgIHRlc3QuYXBwbHkodGhpcywgYXJncyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHZhciBjaGVjayA9IGZ1bmN0aW9uKGVyciwgdHJ1dGgpIHtcbiAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh0cnV0aCkge1xuICAgICAgICAgICAgICAgIGl0ZXJhdG9yKG5leHQpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBjYWxsYmFjayhudWxsKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcblxuICAgICAgICB0ZXN0KGNoZWNrKTtcbiAgICB9O1xuXG4gICAgYXN5bmMuZG9EdXJpbmcgPSBmdW5jdGlvbiAoaXRlcmF0b3IsIHRlc3QsIGNhbGxiYWNrKSB7XG4gICAgICAgIHZhciBjYWxscyA9IDA7XG4gICAgICAgIGFzeW5jLmR1cmluZyhmdW5jdGlvbihuZXh0KSB7XG4gICAgICAgICAgICBpZiAoY2FsbHMrKyA8IDEpIHtcbiAgICAgICAgICAgICAgICBuZXh0KG51bGwsIHRydWUpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0ZXN0LmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sIGl0ZXJhdG9yLCBjYWxsYmFjayk7XG4gICAgfTtcblxuICAgIGZ1bmN0aW9uIF9xdWV1ZSh3b3JrZXIsIGNvbmN1cnJlbmN5LCBwYXlsb2FkKSB7XG4gICAgICAgIGlmIChjb25jdXJyZW5jeSA9PSBudWxsKSB7XG4gICAgICAgICAgICBjb25jdXJyZW5jeSA9IDE7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZihjb25jdXJyZW5jeSA9PT0gMCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdDb25jdXJyZW5jeSBtdXN0IG5vdCBiZSB6ZXJvJyk7XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gX2luc2VydChxLCBkYXRhLCBwb3MsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICBpZiAoY2FsbGJhY2sgIT0gbnVsbCAmJiB0eXBlb2YgY2FsbGJhY2sgIT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcInRhc2sgY2FsbGJhY2sgbXVzdCBiZSBhIGZ1bmN0aW9uXCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcS5zdGFydGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIGlmICghX2lzQXJyYXkoZGF0YSkpIHtcbiAgICAgICAgICAgICAgICBkYXRhID0gW2RhdGFdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYoZGF0YS5sZW5ndGggPT09IDAgJiYgcS5pZGxlKCkpIHtcbiAgICAgICAgICAgICAgICAvLyBjYWxsIGRyYWluIGltbWVkaWF0ZWx5IGlmIHRoZXJlIGFyZSBubyB0YXNrc1xuICAgICAgICAgICAgICAgIHJldHVybiBhc3luYy5zZXRJbW1lZGlhdGUoZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgICAgIHEuZHJhaW4oKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIF9hcnJheUVhY2goZGF0YSwgZnVuY3Rpb24odGFzaykge1xuICAgICAgICAgICAgICAgIHZhciBpdGVtID0ge1xuICAgICAgICAgICAgICAgICAgICBkYXRhOiB0YXNrLFxuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjazogY2FsbGJhY2sgfHwgbm9vcFxuICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICBpZiAocG9zKSB7XG4gICAgICAgICAgICAgICAgICAgIHEudGFza3MudW5zaGlmdChpdGVtKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBxLnRhc2tzLnB1c2goaXRlbSk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKHEudGFza3MubGVuZ3RoID09PSBxLmNvbmN1cnJlbmN5KSB7XG4gICAgICAgICAgICAgICAgICAgIHEuc2F0dXJhdGVkKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBhc3luYy5zZXRJbW1lZGlhdGUocS5wcm9jZXNzKTtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBfbmV4dChxLCB0YXNrcykge1xuICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKCl7XG4gICAgICAgICAgICAgICAgd29ya2VycyAtPSAxO1xuXG4gICAgICAgICAgICAgICAgdmFyIHJlbW92ZWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB2YXIgYXJncyA9IGFyZ3VtZW50cztcbiAgICAgICAgICAgICAgICBfYXJyYXlFYWNoKHRhc2tzLCBmdW5jdGlvbiAodGFzaykge1xuICAgICAgICAgICAgICAgICAgICBfYXJyYXlFYWNoKHdvcmtlcnNMaXN0LCBmdW5jdGlvbiAod29ya2VyLCBpbmRleCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHdvcmtlciA9PT0gdGFzayAmJiAhcmVtb3ZlZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdvcmtlcnNMaXN0LnNwbGljZShpbmRleCwgMSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVtb3ZlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgICAgIHRhc2suY2FsbGJhY2suYXBwbHkodGFzaywgYXJncyk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgaWYgKHEudGFza3MubGVuZ3RoICsgd29ya2VycyA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICBxLmRyYWluKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHEucHJvY2VzcygpO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciB3b3JrZXJzID0gMDtcbiAgICAgICAgdmFyIHdvcmtlcnNMaXN0ID0gW107XG4gICAgICAgIHZhciBxID0ge1xuICAgICAgICAgICAgdGFza3M6IFtdLFxuICAgICAgICAgICAgY29uY3VycmVuY3k6IGNvbmN1cnJlbmN5LFxuICAgICAgICAgICAgcGF5bG9hZDogcGF5bG9hZCxcbiAgICAgICAgICAgIHNhdHVyYXRlZDogbm9vcCxcbiAgICAgICAgICAgIGVtcHR5OiBub29wLFxuICAgICAgICAgICAgZHJhaW46IG5vb3AsXG4gICAgICAgICAgICBzdGFydGVkOiBmYWxzZSxcbiAgICAgICAgICAgIHBhdXNlZDogZmFsc2UsXG4gICAgICAgICAgICBwdXNoOiBmdW5jdGlvbiAoZGF0YSwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgICAgICBfaW5zZXJ0KHEsIGRhdGEsIGZhbHNlLCBjYWxsYmFjayk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAga2lsbDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHEuZHJhaW4gPSBub29wO1xuICAgICAgICAgICAgICAgIHEudGFza3MgPSBbXTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB1bnNoaWZ0OiBmdW5jdGlvbiAoZGF0YSwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgICAgICBfaW5zZXJ0KHEsIGRhdGEsIHRydWUsIGNhbGxiYWNrKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBwcm9jZXNzOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgaWYgKCFxLnBhdXNlZCAmJiB3b3JrZXJzIDwgcS5jb25jdXJyZW5jeSAmJiBxLnRhc2tzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICB3aGlsZSh3b3JrZXJzIDwgcS5jb25jdXJyZW5jeSAmJiBxLnRhc2tzLmxlbmd0aCl7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgdGFza3MgPSBxLnBheWxvYWQgP1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHEudGFza3Muc3BsaWNlKDAsIHEucGF5bG9hZCkgOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHEudGFza3Muc3BsaWNlKDAsIHEudGFza3MubGVuZ3RoKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGRhdGEgPSBfbWFwKHRhc2tzLCBmdW5jdGlvbiAodGFzaykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0YXNrLmRhdGE7XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHEudGFza3MubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcS5lbXB0eSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgd29ya2VycyArPSAxO1xuICAgICAgICAgICAgICAgICAgICAgICAgd29ya2Vyc0xpc3QucHVzaCh0YXNrc1swXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgY2IgPSBvbmx5X29uY2UoX25leHQocSwgdGFza3MpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHdvcmtlcihkYXRhLCBjYik7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbGVuZ3RoOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHEudGFza3MubGVuZ3RoO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHJ1bm5pbmc6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gd29ya2VycztcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB3b3JrZXJzTGlzdDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB3b3JrZXJzTGlzdDtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBpZGxlOiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcS50YXNrcy5sZW5ndGggKyB3b3JrZXJzID09PSAwO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHBhdXNlOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgcS5wYXVzZWQgPSB0cnVlO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHJlc3VtZTogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGlmIChxLnBhdXNlZCA9PT0gZmFsc2UpIHsgcmV0dXJuOyB9XG4gICAgICAgICAgICAgICAgcS5wYXVzZWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB2YXIgcmVzdW1lQ291bnQgPSBNYXRoLm1pbihxLmNvbmN1cnJlbmN5LCBxLnRhc2tzLmxlbmd0aCk7XG4gICAgICAgICAgICAgICAgLy8gTmVlZCB0byBjYWxsIHEucHJvY2VzcyBvbmNlIHBlciBjb25jdXJyZW50XG4gICAgICAgICAgICAgICAgLy8gd29ya2VyIHRvIHByZXNlcnZlIGZ1bGwgY29uY3VycmVuY3kgYWZ0ZXIgcGF1c2VcbiAgICAgICAgICAgICAgICBmb3IgKHZhciB3ID0gMTsgdyA8PSByZXN1bWVDb3VudDsgdysrKSB7XG4gICAgICAgICAgICAgICAgICAgIGFzeW5jLnNldEltbWVkaWF0ZShxLnByb2Nlc3MpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIHE7XG4gICAgfVxuXG4gICAgYXN5bmMucXVldWUgPSBmdW5jdGlvbiAod29ya2VyLCBjb25jdXJyZW5jeSkge1xuICAgICAgICB2YXIgcSA9IF9xdWV1ZShmdW5jdGlvbiAoaXRlbXMsIGNiKSB7XG4gICAgICAgICAgICB3b3JrZXIoaXRlbXNbMF0sIGNiKTtcbiAgICAgICAgfSwgY29uY3VycmVuY3ksIDEpO1xuXG4gICAgICAgIHJldHVybiBxO1xuICAgIH07XG5cbiAgICBhc3luYy5wcmlvcml0eVF1ZXVlID0gZnVuY3Rpb24gKHdvcmtlciwgY29uY3VycmVuY3kpIHtcblxuICAgICAgICBmdW5jdGlvbiBfY29tcGFyZVRhc2tzKGEsIGIpe1xuICAgICAgICAgICAgcmV0dXJuIGEucHJpb3JpdHkgLSBiLnByaW9yaXR5O1xuICAgICAgICB9XG5cbiAgICAgICAgZnVuY3Rpb24gX2JpbmFyeVNlYXJjaChzZXF1ZW5jZSwgaXRlbSwgY29tcGFyZSkge1xuICAgICAgICAgICAgdmFyIGJlZyA9IC0xLFxuICAgICAgICAgICAgICAgIGVuZCA9IHNlcXVlbmNlLmxlbmd0aCAtIDE7XG4gICAgICAgICAgICB3aGlsZSAoYmVnIDwgZW5kKSB7XG4gICAgICAgICAgICAgICAgdmFyIG1pZCA9IGJlZyArICgoZW5kIC0gYmVnICsgMSkgPj4+IDEpO1xuICAgICAgICAgICAgICAgIGlmIChjb21wYXJlKGl0ZW0sIHNlcXVlbmNlW21pZF0pID49IDApIHtcbiAgICAgICAgICAgICAgICAgICAgYmVnID0gbWlkO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGVuZCA9IG1pZCAtIDE7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGJlZztcbiAgICAgICAgfVxuXG4gICAgICAgIGZ1bmN0aW9uIF9pbnNlcnQocSwgZGF0YSwgcHJpb3JpdHksIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICBpZiAoY2FsbGJhY2sgIT0gbnVsbCAmJiB0eXBlb2YgY2FsbGJhY2sgIT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcInRhc2sgY2FsbGJhY2sgbXVzdCBiZSBhIGZ1bmN0aW9uXCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcS5zdGFydGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIGlmICghX2lzQXJyYXkoZGF0YSkpIHtcbiAgICAgICAgICAgICAgICBkYXRhID0gW2RhdGFdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYoZGF0YS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgICAvLyBjYWxsIGRyYWluIGltbWVkaWF0ZWx5IGlmIHRoZXJlIGFyZSBubyB0YXNrc1xuICAgICAgICAgICAgICAgIHJldHVybiBhc3luYy5zZXRJbW1lZGlhdGUoZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgICAgIHEuZHJhaW4oKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIF9hcnJheUVhY2goZGF0YSwgZnVuY3Rpb24odGFzaykge1xuICAgICAgICAgICAgICAgIHZhciBpdGVtID0ge1xuICAgICAgICAgICAgICAgICAgICBkYXRhOiB0YXNrLFxuICAgICAgICAgICAgICAgICAgICBwcmlvcml0eTogcHJpb3JpdHksXG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrOiB0eXBlb2YgY2FsbGJhY2sgPT09ICdmdW5jdGlvbicgPyBjYWxsYmFjayA6IG5vb3BcbiAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgcS50YXNrcy5zcGxpY2UoX2JpbmFyeVNlYXJjaChxLnRhc2tzLCBpdGVtLCBfY29tcGFyZVRhc2tzKSArIDEsIDAsIGl0ZW0pO1xuXG4gICAgICAgICAgICAgICAgaWYgKHEudGFza3MubGVuZ3RoID09PSBxLmNvbmN1cnJlbmN5KSB7XG4gICAgICAgICAgICAgICAgICAgIHEuc2F0dXJhdGVkKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGFzeW5jLnNldEltbWVkaWF0ZShxLnByb2Nlc3MpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBTdGFydCB3aXRoIGEgbm9ybWFsIHF1ZXVlXG4gICAgICAgIHZhciBxID0gYXN5bmMucXVldWUod29ya2VyLCBjb25jdXJyZW5jeSk7XG5cbiAgICAgICAgLy8gT3ZlcnJpZGUgcHVzaCB0byBhY2NlcHQgc2Vjb25kIHBhcmFtZXRlciByZXByZXNlbnRpbmcgcHJpb3JpdHlcbiAgICAgICAgcS5wdXNoID0gZnVuY3Rpb24gKGRhdGEsIHByaW9yaXR5LCBjYWxsYmFjaykge1xuICAgICAgICAgICAgX2luc2VydChxLCBkYXRhLCBwcmlvcml0eSwgY2FsbGJhY2spO1xuICAgICAgICB9O1xuXG4gICAgICAgIC8vIFJlbW92ZSB1bnNoaWZ0IGZ1bmN0aW9uXG4gICAgICAgIGRlbGV0ZSBxLnVuc2hpZnQ7XG5cbiAgICAgICAgcmV0dXJuIHE7XG4gICAgfTtcblxuICAgIGFzeW5jLmNhcmdvID0gZnVuY3Rpb24gKHdvcmtlciwgcGF5bG9hZCkge1xuICAgICAgICByZXR1cm4gX3F1ZXVlKHdvcmtlciwgMSwgcGF5bG9hZCk7XG4gICAgfTtcblxuICAgIGZ1bmN0aW9uIF9jb25zb2xlX2ZuKG5hbWUpIHtcbiAgICAgICAgcmV0dXJuIF9yZXN0UGFyYW0oZnVuY3Rpb24gKGZuLCBhcmdzKSB7XG4gICAgICAgICAgICBmbi5hcHBseShudWxsLCBhcmdzLmNvbmNhdChbX3Jlc3RQYXJhbShmdW5jdGlvbiAoZXJyLCBhcmdzKSB7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBjb25zb2xlID09PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoY29uc29sZS5lcnJvcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChjb25zb2xlW25hbWVdKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBfYXJyYXlFYWNoKGFyZ3MsIGZ1bmN0aW9uICh4KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZVtuYW1lXSh4KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSldKSk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBhc3luYy5sb2cgPSBfY29uc29sZV9mbignbG9nJyk7XG4gICAgYXN5bmMuZGlyID0gX2NvbnNvbGVfZm4oJ2RpcicpO1xuICAgIC8qYXN5bmMuaW5mbyA9IF9jb25zb2xlX2ZuKCdpbmZvJyk7XG4gICAgYXN5bmMud2FybiA9IF9jb25zb2xlX2ZuKCd3YXJuJyk7XG4gICAgYXN5bmMuZXJyb3IgPSBfY29uc29sZV9mbignZXJyb3InKTsqL1xuXG4gICAgYXN5bmMubWVtb2l6ZSA9IGZ1bmN0aW9uIChmbiwgaGFzaGVyKSB7XG4gICAgICAgIHZhciBtZW1vID0ge307XG4gICAgICAgIHZhciBxdWV1ZXMgPSB7fTtcbiAgICAgICAgaGFzaGVyID0gaGFzaGVyIHx8IGlkZW50aXR5O1xuICAgICAgICB2YXIgbWVtb2l6ZWQgPSBfcmVzdFBhcmFtKGZ1bmN0aW9uIG1lbW9pemVkKGFyZ3MpIHtcbiAgICAgICAgICAgIHZhciBjYWxsYmFjayA9IGFyZ3MucG9wKCk7XG4gICAgICAgICAgICB2YXIga2V5ID0gaGFzaGVyLmFwcGx5KG51bGwsIGFyZ3MpO1xuICAgICAgICAgICAgaWYgKGtleSBpbiBtZW1vKSB7XG4gICAgICAgICAgICAgICAgYXN5bmMuc2V0SW1tZWRpYXRlKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2suYXBwbHkobnVsbCwgbWVtb1trZXldKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGtleSBpbiBxdWV1ZXMpIHtcbiAgICAgICAgICAgICAgICBxdWV1ZXNba2V5XS5wdXNoKGNhbGxiYWNrKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHF1ZXVlc1trZXldID0gW2NhbGxiYWNrXTtcbiAgICAgICAgICAgICAgICBmbi5hcHBseShudWxsLCBhcmdzLmNvbmNhdChbX3Jlc3RQYXJhbShmdW5jdGlvbiAoYXJncykge1xuICAgICAgICAgICAgICAgICAgICBtZW1vW2tleV0gPSBhcmdzO1xuICAgICAgICAgICAgICAgICAgICB2YXIgcSA9IHF1ZXVlc1trZXldO1xuICAgICAgICAgICAgICAgICAgICBkZWxldGUgcXVldWVzW2tleV07XG4gICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwLCBsID0gcS5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHFbaV0uYXBwbHkobnVsbCwgYXJncyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KV0pKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIG1lbW9pemVkLm1lbW8gPSBtZW1vO1xuICAgICAgICBtZW1vaXplZC51bm1lbW9pemVkID0gZm47XG4gICAgICAgIHJldHVybiBtZW1vaXplZDtcbiAgICB9O1xuXG4gICAgYXN5bmMudW5tZW1vaXplID0gZnVuY3Rpb24gKGZuKSB7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gKGZuLnVubWVtb2l6ZWQgfHwgZm4pLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7XG4gICAgICAgIH07XG4gICAgfTtcblxuICAgIGZ1bmN0aW9uIF90aW1lcyhtYXBwZXIpIHtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChjb3VudCwgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICBtYXBwZXIoX3JhbmdlKGNvdW50KSwgaXRlcmF0b3IsIGNhbGxiYWNrKTtcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBhc3luYy50aW1lcyA9IF90aW1lcyhhc3luYy5tYXApO1xuICAgIGFzeW5jLnRpbWVzU2VyaWVzID0gX3RpbWVzKGFzeW5jLm1hcFNlcmllcyk7XG4gICAgYXN5bmMudGltZXNMaW1pdCA9IGZ1bmN0aW9uIChjb3VudCwgbGltaXQsIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICByZXR1cm4gYXN5bmMubWFwTGltaXQoX3JhbmdlKGNvdW50KSwgbGltaXQsIGl0ZXJhdG9yLCBjYWxsYmFjayk7XG4gICAgfTtcblxuICAgIGFzeW5jLnNlcSA9IGZ1bmN0aW9uICgvKiBmdW5jdGlvbnMuLi4gKi8pIHtcbiAgICAgICAgdmFyIGZucyA9IGFyZ3VtZW50cztcbiAgICAgICAgcmV0dXJuIF9yZXN0UGFyYW0oZnVuY3Rpb24gKGFyZ3MpIHtcbiAgICAgICAgICAgIHZhciB0aGF0ID0gdGhpcztcblxuICAgICAgICAgICAgdmFyIGNhbGxiYWNrID0gYXJnc1thcmdzLmxlbmd0aCAtIDFdO1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBjYWxsYmFjayA9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgYXJncy5wb3AoKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2sgPSBub29wO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBhc3luYy5yZWR1Y2UoZm5zLCBhcmdzLCBmdW5jdGlvbiAobmV3YXJncywgZm4sIGNiKSB7XG4gICAgICAgICAgICAgICAgZm4uYXBwbHkodGhhdCwgbmV3YXJncy5jb25jYXQoW19yZXN0UGFyYW0oZnVuY3Rpb24gKGVyciwgbmV4dGFyZ3MpIHtcbiAgICAgICAgICAgICAgICAgICAgY2IoZXJyLCBuZXh0YXJncyk7XG4gICAgICAgICAgICAgICAgfSldKSk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZnVuY3Rpb24gKGVyciwgcmVzdWx0cykge1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrLmFwcGx5KHRoYXQsIFtlcnJdLmNvbmNhdChyZXN1bHRzKSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfTtcblxuICAgIGFzeW5jLmNvbXBvc2UgPSBmdW5jdGlvbiAoLyogZnVuY3Rpb25zLi4uICovKSB7XG4gICAgICAgIHJldHVybiBhc3luYy5zZXEuYXBwbHkobnVsbCwgQXJyYXkucHJvdG90eXBlLnJldmVyc2UuY2FsbChhcmd1bWVudHMpKTtcbiAgICB9O1xuXG5cbiAgICBmdW5jdGlvbiBfYXBwbHlFYWNoKGVhY2hmbikge1xuICAgICAgICByZXR1cm4gX3Jlc3RQYXJhbShmdW5jdGlvbihmbnMsIGFyZ3MpIHtcbiAgICAgICAgICAgIHZhciBnbyA9IF9yZXN0UGFyYW0oZnVuY3Rpb24oYXJncykge1xuICAgICAgICAgICAgICAgIHZhciB0aGF0ID0gdGhpcztcbiAgICAgICAgICAgICAgICB2YXIgY2FsbGJhY2sgPSBhcmdzLnBvcCgpO1xuICAgICAgICAgICAgICAgIHJldHVybiBlYWNoZm4oZm5zLCBmdW5jdGlvbiAoZm4sIF8sIGNiKSB7XG4gICAgICAgICAgICAgICAgICAgIGZuLmFwcGx5KHRoYXQsIGFyZ3MuY29uY2F0KFtjYl0pKTtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIGNhbGxiYWNrKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgaWYgKGFyZ3MubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGdvLmFwcGx5KHRoaXMsIGFyZ3MpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGdvO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBhc3luYy5hcHBseUVhY2ggPSBfYXBwbHlFYWNoKGFzeW5jLmVhY2hPZik7XG4gICAgYXN5bmMuYXBwbHlFYWNoU2VyaWVzID0gX2FwcGx5RWFjaChhc3luYy5lYWNoT2ZTZXJpZXMpO1xuXG5cbiAgICBhc3luYy5mb3JldmVyID0gZnVuY3Rpb24gKGZuLCBjYWxsYmFjaykge1xuICAgICAgICB2YXIgZG9uZSA9IG9ubHlfb25jZShjYWxsYmFjayB8fCBub29wKTtcbiAgICAgICAgdmFyIHRhc2sgPSBlbnN1cmVBc3luYyhmbik7XG4gICAgICAgIGZ1bmN0aW9uIG5leHQoZXJyKSB7XG4gICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGRvbmUoZXJyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRhc2sobmV4dCk7XG4gICAgICAgIH1cbiAgICAgICAgbmV4dCgpO1xuICAgIH07XG5cbiAgICBmdW5jdGlvbiBlbnN1cmVBc3luYyhmbikge1xuICAgICAgICByZXR1cm4gX3Jlc3RQYXJhbShmdW5jdGlvbiAoYXJncykge1xuICAgICAgICAgICAgdmFyIGNhbGxiYWNrID0gYXJncy5wb3AoKTtcbiAgICAgICAgICAgIGFyZ3MucHVzaChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgdmFyIGlubmVyQXJncyA9IGFyZ3VtZW50cztcbiAgICAgICAgICAgICAgICBpZiAoc3luYykge1xuICAgICAgICAgICAgICAgICAgICBhc3luYy5zZXRJbW1lZGlhdGUoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2suYXBwbHkobnVsbCwgaW5uZXJBcmdzKTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2suYXBwbHkobnVsbCwgaW5uZXJBcmdzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHZhciBzeW5jID0gdHJ1ZTtcbiAgICAgICAgICAgIGZuLmFwcGx5KHRoaXMsIGFyZ3MpO1xuICAgICAgICAgICAgc3luYyA9IGZhbHNlO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBhc3luYy5lbnN1cmVBc3luYyA9IGVuc3VyZUFzeW5jO1xuXG4gICAgYXN5bmMuY29uc3RhbnQgPSBfcmVzdFBhcmFtKGZ1bmN0aW9uKHZhbHVlcykge1xuICAgICAgICB2YXIgYXJncyA9IFtudWxsXS5jb25jYXQodmFsdWVzKTtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChjYWxsYmFjaykge1xuICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrLmFwcGx5KHRoaXMsIGFyZ3MpO1xuICAgICAgICB9O1xuICAgIH0pO1xuXG4gICAgYXN5bmMud3JhcFN5bmMgPVxuICAgIGFzeW5jLmFzeW5jaWZ5ID0gZnVuY3Rpb24gYXN5bmNpZnkoZnVuYykge1xuICAgICAgICByZXR1cm4gX3Jlc3RQYXJhbShmdW5jdGlvbiAoYXJncykge1xuICAgICAgICAgICAgdmFyIGNhbGxiYWNrID0gYXJncy5wb3AoKTtcbiAgICAgICAgICAgIHZhciByZXN1bHQ7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIHJlc3VsdCA9IGZ1bmMuYXBwbHkodGhpcywgYXJncyk7XG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gaWYgcmVzdWx0IGlzIFByb21pc2Ugb2JqZWN0XG4gICAgICAgICAgICBpZiAoX2lzT2JqZWN0KHJlc3VsdCkgJiYgdHlwZW9mIHJlc3VsdC50aGVuID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgICAgICAgICByZXN1bHQudGhlbihmdW5jdGlvbih2YWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhudWxsLCB2YWx1ZSk7XG4gICAgICAgICAgICAgICAgfSlbXCJjYXRjaFwiXShmdW5jdGlvbihlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soZXJyLm1lc3NhZ2UgPyBlcnIgOiBuZXcgRXJyb3IoZXJyKSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrKG51bGwsIHJlc3VsdCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH07XG5cbiAgICAvLyBOb2RlLmpzXG4gICAgaWYgKHR5cGVvZiBtb2R1bGUgPT09ICdvYmplY3QnICYmIG1vZHVsZS5leHBvcnRzKSB7XG4gICAgICAgIG1vZHVsZS5leHBvcnRzID0gYXN5bmM7XG4gICAgfVxuICAgIC8vIEFNRCAvIFJlcXVpcmVKU1xuICAgIGVsc2UgaWYgKHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCkge1xuICAgICAgICBkZWZpbmUoW10sIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiBhc3luYztcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8vIGluY2x1ZGVkIGRpcmVjdGx5IHZpYSA8c2NyaXB0PiB0YWdcbiAgICBlbHNlIHtcbiAgICAgICAgcm9vdC5hc3luYyA9IGFzeW5jO1xuICAgIH1cblxufSgpKTtcbiIsIi8vIENvcHlyaWdodCBKb3llbnQsIEluYy4gYW5kIG90aGVyIE5vZGUgY29udHJpYnV0b3JzLlxuLy9cbi8vIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhXG4vLyBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlXG4vLyBcIlNvZnR3YXJlXCIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmdcbi8vIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCxcbi8vIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXRcbi8vIHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZVxuLy8gZm9sbG93aW5nIGNvbmRpdGlvbnM6XG4vL1xuLy8gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWRcbi8vIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuLy9cbi8vIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1Ncbi8vIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0Zcbi8vIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU5cbi8vIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLFxuLy8gREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SXG4vLyBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFXG4vLyBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLlxuXG4vLyByZXNvbHZlcyAuIGFuZCAuLiBlbGVtZW50cyBpbiBhIHBhdGggYXJyYXkgd2l0aCBkaXJlY3RvcnkgbmFtZXMgdGhlcmVcbi8vIG11c3QgYmUgbm8gc2xhc2hlcywgZW1wdHkgZWxlbWVudHMsIG9yIGRldmljZSBuYW1lcyAoYzpcXCkgaW4gdGhlIGFycmF5XG4vLyAoc28gYWxzbyBubyBsZWFkaW5nIGFuZCB0cmFpbGluZyBzbGFzaGVzIC0gaXQgZG9lcyBub3QgZGlzdGluZ3Vpc2hcbi8vIHJlbGF0aXZlIGFuZCBhYnNvbHV0ZSBwYXRocylcbmZ1bmN0aW9uIG5vcm1hbGl6ZUFycmF5KHBhcnRzLCBhbGxvd0Fib3ZlUm9vdCkge1xuICAvLyBpZiB0aGUgcGF0aCB0cmllcyB0byBnbyBhYm92ZSB0aGUgcm9vdCwgYHVwYCBlbmRzIHVwID4gMFxuICB2YXIgdXAgPSAwO1xuICBmb3IgKHZhciBpID0gcGFydHMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICB2YXIgbGFzdCA9IHBhcnRzW2ldO1xuICAgIGlmIChsYXN0ID09PSAnLicpIHtcbiAgICAgIHBhcnRzLnNwbGljZShpLCAxKTtcbiAgICB9IGVsc2UgaWYgKGxhc3QgPT09ICcuLicpIHtcbiAgICAgIHBhcnRzLnNwbGljZShpLCAxKTtcbiAgICAgIHVwKys7XG4gICAgfSBlbHNlIGlmICh1cCkge1xuICAgICAgcGFydHMuc3BsaWNlKGksIDEpO1xuICAgICAgdXAtLTtcbiAgICB9XG4gIH1cblxuICAvLyBpZiB0aGUgcGF0aCBpcyBhbGxvd2VkIHRvIGdvIGFib3ZlIHRoZSByb290LCByZXN0b3JlIGxlYWRpbmcgLi5zXG4gIGlmIChhbGxvd0Fib3ZlUm9vdCkge1xuICAgIGZvciAoOyB1cC0tOyB1cCkge1xuICAgICAgcGFydHMudW5zaGlmdCgnLi4nKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gcGFydHM7XG59XG5cbi8vIFNwbGl0IGEgZmlsZW5hbWUgaW50byBbcm9vdCwgZGlyLCBiYXNlbmFtZSwgZXh0XSwgdW5peCB2ZXJzaW9uXG4vLyAncm9vdCcgaXMganVzdCBhIHNsYXNoLCBvciBub3RoaW5nLlxudmFyIHNwbGl0UGF0aFJlID1cbiAgICAvXihcXC8/fCkoW1xcc1xcU10qPykoKD86XFwuezEsMn18W15cXC9dKz98KShcXC5bXi5cXC9dKnwpKSg/OltcXC9dKikkLztcbnZhciBzcGxpdFBhdGggPSBmdW5jdGlvbihmaWxlbmFtZSkge1xuICByZXR1cm4gc3BsaXRQYXRoUmUuZXhlYyhmaWxlbmFtZSkuc2xpY2UoMSk7XG59O1xuXG4vLyBwYXRoLnJlc29sdmUoW2Zyb20gLi4uXSwgdG8pXG4vLyBwb3NpeCB2ZXJzaW9uXG5leHBvcnRzLnJlc29sdmUgPSBmdW5jdGlvbigpIHtcbiAgdmFyIHJlc29sdmVkUGF0aCA9ICcnLFxuICAgICAgcmVzb2x2ZWRBYnNvbHV0ZSA9IGZhbHNlO1xuXG4gIGZvciAodmFyIGkgPSBhcmd1bWVudHMubGVuZ3RoIC0gMTsgaSA+PSAtMSAmJiAhcmVzb2x2ZWRBYnNvbHV0ZTsgaS0tKSB7XG4gICAgdmFyIHBhdGggPSAoaSA+PSAwKSA/IGFyZ3VtZW50c1tpXSA6IHByb2Nlc3MuY3dkKCk7XG5cbiAgICAvLyBTa2lwIGVtcHR5IGFuZCBpbnZhbGlkIGVudHJpZXNcbiAgICBpZiAodHlwZW9mIHBhdGggIT09ICdzdHJpbmcnKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdBcmd1bWVudHMgdG8gcGF0aC5yZXNvbHZlIG11c3QgYmUgc3RyaW5ncycpO1xuICAgIH0gZWxzZSBpZiAoIXBhdGgpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIHJlc29sdmVkUGF0aCA9IHBhdGggKyAnLycgKyByZXNvbHZlZFBhdGg7XG4gICAgcmVzb2x2ZWRBYnNvbHV0ZSA9IHBhdGguY2hhckF0KDApID09PSAnLyc7XG4gIH1cblxuICAvLyBBdCB0aGlzIHBvaW50IHRoZSBwYXRoIHNob3VsZCBiZSByZXNvbHZlZCB0byBhIGZ1bGwgYWJzb2x1dGUgcGF0aCwgYnV0XG4gIC8vIGhhbmRsZSByZWxhdGl2ZSBwYXRocyB0byBiZSBzYWZlIChtaWdodCBoYXBwZW4gd2hlbiBwcm9jZXNzLmN3ZCgpIGZhaWxzKVxuXG4gIC8vIE5vcm1hbGl6ZSB0aGUgcGF0aFxuICByZXNvbHZlZFBhdGggPSBub3JtYWxpemVBcnJheShmaWx0ZXIocmVzb2x2ZWRQYXRoLnNwbGl0KCcvJyksIGZ1bmN0aW9uKHApIHtcbiAgICByZXR1cm4gISFwO1xuICB9KSwgIXJlc29sdmVkQWJzb2x1dGUpLmpvaW4oJy8nKTtcblxuICByZXR1cm4gKChyZXNvbHZlZEFic29sdXRlID8gJy8nIDogJycpICsgcmVzb2x2ZWRQYXRoKSB8fCAnLic7XG59O1xuXG4vLyBwYXRoLm5vcm1hbGl6ZShwYXRoKVxuLy8gcG9zaXggdmVyc2lvblxuZXhwb3J0cy5ub3JtYWxpemUgPSBmdW5jdGlvbihwYXRoKSB7XG4gIHZhciBpc0Fic29sdXRlID0gZXhwb3J0cy5pc0Fic29sdXRlKHBhdGgpLFxuICAgICAgdHJhaWxpbmdTbGFzaCA9IHN1YnN0cihwYXRoLCAtMSkgPT09ICcvJztcblxuICAvLyBOb3JtYWxpemUgdGhlIHBhdGhcbiAgcGF0aCA9IG5vcm1hbGl6ZUFycmF5KGZpbHRlcihwYXRoLnNwbGl0KCcvJyksIGZ1bmN0aW9uKHApIHtcbiAgICByZXR1cm4gISFwO1xuICB9KSwgIWlzQWJzb2x1dGUpLmpvaW4oJy8nKTtcblxuICBpZiAoIXBhdGggJiYgIWlzQWJzb2x1dGUpIHtcbiAgICBwYXRoID0gJy4nO1xuICB9XG4gIGlmIChwYXRoICYmIHRyYWlsaW5nU2xhc2gpIHtcbiAgICBwYXRoICs9ICcvJztcbiAgfVxuXG4gIHJldHVybiAoaXNBYnNvbHV0ZSA/ICcvJyA6ICcnKSArIHBhdGg7XG59O1xuXG4vLyBwb3NpeCB2ZXJzaW9uXG5leHBvcnRzLmlzQWJzb2x1dGUgPSBmdW5jdGlvbihwYXRoKSB7XG4gIHJldHVybiBwYXRoLmNoYXJBdCgwKSA9PT0gJy8nO1xufTtcblxuLy8gcG9zaXggdmVyc2lvblxuZXhwb3J0cy5qb2luID0gZnVuY3Rpb24oKSB7XG4gIHZhciBwYXRocyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMCk7XG4gIHJldHVybiBleHBvcnRzLm5vcm1hbGl6ZShmaWx0ZXIocGF0aHMsIGZ1bmN0aW9uKHAsIGluZGV4KSB7XG4gICAgaWYgKHR5cGVvZiBwICE9PSAnc3RyaW5nJykge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignQXJndW1lbnRzIHRvIHBhdGguam9pbiBtdXN0IGJlIHN0cmluZ3MnKTtcbiAgICB9XG4gICAgcmV0dXJuIHA7XG4gIH0pLmpvaW4oJy8nKSk7XG59O1xuXG5cbi8vIHBhdGgucmVsYXRpdmUoZnJvbSwgdG8pXG4vLyBwb3NpeCB2ZXJzaW9uXG5leHBvcnRzLnJlbGF0aXZlID0gZnVuY3Rpb24oZnJvbSwgdG8pIHtcbiAgZnJvbSA9IGV4cG9ydHMucmVzb2x2ZShmcm9tKS5zdWJzdHIoMSk7XG4gIHRvID0gZXhwb3J0cy5yZXNvbHZlKHRvKS5zdWJzdHIoMSk7XG5cbiAgZnVuY3Rpb24gdHJpbShhcnIpIHtcbiAgICB2YXIgc3RhcnQgPSAwO1xuICAgIGZvciAoOyBzdGFydCA8IGFyci5sZW5ndGg7IHN0YXJ0KyspIHtcbiAgICAgIGlmIChhcnJbc3RhcnRdICE9PSAnJykgYnJlYWs7XG4gICAgfVxuXG4gICAgdmFyIGVuZCA9IGFyci5sZW5ndGggLSAxO1xuICAgIGZvciAoOyBlbmQgPj0gMDsgZW5kLS0pIHtcbiAgICAgIGlmIChhcnJbZW5kXSAhPT0gJycpIGJyZWFrO1xuICAgIH1cblxuICAgIGlmIChzdGFydCA+IGVuZCkgcmV0dXJuIFtdO1xuICAgIHJldHVybiBhcnIuc2xpY2Uoc3RhcnQsIGVuZCAtIHN0YXJ0ICsgMSk7XG4gIH1cblxuICB2YXIgZnJvbVBhcnRzID0gdHJpbShmcm9tLnNwbGl0KCcvJykpO1xuICB2YXIgdG9QYXJ0cyA9IHRyaW0odG8uc3BsaXQoJy8nKSk7XG5cbiAgdmFyIGxlbmd0aCA9IE1hdGgubWluKGZyb21QYXJ0cy5sZW5ndGgsIHRvUGFydHMubGVuZ3RoKTtcbiAgdmFyIHNhbWVQYXJ0c0xlbmd0aCA9IGxlbmd0aDtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgIGlmIChmcm9tUGFydHNbaV0gIT09IHRvUGFydHNbaV0pIHtcbiAgICAgIHNhbWVQYXJ0c0xlbmd0aCA9IGk7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICB2YXIgb3V0cHV0UGFydHMgPSBbXTtcbiAgZm9yICh2YXIgaSA9IHNhbWVQYXJ0c0xlbmd0aDsgaSA8IGZyb21QYXJ0cy5sZW5ndGg7IGkrKykge1xuICAgIG91dHB1dFBhcnRzLnB1c2goJy4uJyk7XG4gIH1cblxuICBvdXRwdXRQYXJ0cyA9IG91dHB1dFBhcnRzLmNvbmNhdCh0b1BhcnRzLnNsaWNlKHNhbWVQYXJ0c0xlbmd0aCkpO1xuXG4gIHJldHVybiBvdXRwdXRQYXJ0cy5qb2luKCcvJyk7XG59O1xuXG5leHBvcnRzLnNlcCA9ICcvJztcbmV4cG9ydHMuZGVsaW1pdGVyID0gJzonO1xuXG5leHBvcnRzLmRpcm5hbWUgPSBmdW5jdGlvbihwYXRoKSB7XG4gIHZhciByZXN1bHQgPSBzcGxpdFBhdGgocGF0aCksXG4gICAgICByb290ID0gcmVzdWx0WzBdLFxuICAgICAgZGlyID0gcmVzdWx0WzFdO1xuXG4gIGlmICghcm9vdCAmJiAhZGlyKSB7XG4gICAgLy8gTm8gZGlybmFtZSB3aGF0c29ldmVyXG4gICAgcmV0dXJuICcuJztcbiAgfVxuXG4gIGlmIChkaXIpIHtcbiAgICAvLyBJdCBoYXMgYSBkaXJuYW1lLCBzdHJpcCB0cmFpbGluZyBzbGFzaFxuICAgIGRpciA9IGRpci5zdWJzdHIoMCwgZGlyLmxlbmd0aCAtIDEpO1xuICB9XG5cbiAgcmV0dXJuIHJvb3QgKyBkaXI7XG59O1xuXG5cbmV4cG9ydHMuYmFzZW5hbWUgPSBmdW5jdGlvbihwYXRoLCBleHQpIHtcbiAgdmFyIGYgPSBzcGxpdFBhdGgocGF0aClbMl07XG4gIC8vIFRPRE86IG1ha2UgdGhpcyBjb21wYXJpc29uIGNhc2UtaW5zZW5zaXRpdmUgb24gd2luZG93cz9cbiAgaWYgKGV4dCAmJiBmLnN1YnN0cigtMSAqIGV4dC5sZW5ndGgpID09PSBleHQpIHtcbiAgICBmID0gZi5zdWJzdHIoMCwgZi5sZW5ndGggLSBleHQubGVuZ3RoKTtcbiAgfVxuICByZXR1cm4gZjtcbn07XG5cblxuZXhwb3J0cy5leHRuYW1lID0gZnVuY3Rpb24ocGF0aCkge1xuICByZXR1cm4gc3BsaXRQYXRoKHBhdGgpWzNdO1xufTtcblxuZnVuY3Rpb24gZmlsdGVyICh4cywgZikge1xuICAgIGlmICh4cy5maWx0ZXIpIHJldHVybiB4cy5maWx0ZXIoZik7XG4gICAgdmFyIHJlcyA9IFtdO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgeHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgaWYgKGYoeHNbaV0sIGksIHhzKSkgcmVzLnB1c2goeHNbaV0pO1xuICAgIH1cbiAgICByZXR1cm4gcmVzO1xufVxuXG4vLyBTdHJpbmcucHJvdG90eXBlLnN1YnN0ciAtIG5lZ2F0aXZlIGluZGV4IGRvbid0IHdvcmsgaW4gSUU4XG52YXIgc3Vic3RyID0gJ2FiJy5zdWJzdHIoLTEpID09PSAnYidcbiAgICA/IGZ1bmN0aW9uIChzdHIsIHN0YXJ0LCBsZW4pIHsgcmV0dXJuIHN0ci5zdWJzdHIoc3RhcnQsIGxlbikgfVxuICAgIDogZnVuY3Rpb24gKHN0ciwgc3RhcnQsIGxlbikge1xuICAgICAgICBpZiAoc3RhcnQgPCAwKSBzdGFydCA9IHN0ci5sZW5ndGggKyBzdGFydDtcbiAgICAgICAgcmV0dXJuIHN0ci5zdWJzdHIoc3RhcnQsIGxlbik7XG4gICAgfVxuO1xuIiwiLy8gc2hpbSBmb3IgdXNpbmcgcHJvY2VzcyBpbiBicm93c2VyXG5cbnZhciBwcm9jZXNzID0gbW9kdWxlLmV4cG9ydHMgPSB7fTtcbnZhciBxdWV1ZSA9IFtdO1xudmFyIGRyYWluaW5nID0gZmFsc2U7XG52YXIgY3VycmVudFF1ZXVlO1xudmFyIHF1ZXVlSW5kZXggPSAtMTtcblxuZnVuY3Rpb24gY2xlYW5VcE5leHRUaWNrKCkge1xuICAgIGRyYWluaW5nID0gZmFsc2U7XG4gICAgaWYgKGN1cnJlbnRRdWV1ZS5sZW5ndGgpIHtcbiAgICAgICAgcXVldWUgPSBjdXJyZW50UXVldWUuY29uY2F0KHF1ZXVlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICBxdWV1ZUluZGV4ID0gLTE7XG4gICAgfVxuICAgIGlmIChxdWV1ZS5sZW5ndGgpIHtcbiAgICAgICAgZHJhaW5RdWV1ZSgpO1xuICAgIH1cbn1cblxuZnVuY3Rpb24gZHJhaW5RdWV1ZSgpIHtcbiAgICBpZiAoZHJhaW5pbmcpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB2YXIgdGltZW91dCA9IHNldFRpbWVvdXQoY2xlYW5VcE5leHRUaWNrKTtcbiAgICBkcmFpbmluZyA9IHRydWU7XG5cbiAgICB2YXIgbGVuID0gcXVldWUubGVuZ3RoO1xuICAgIHdoaWxlKGxlbikge1xuICAgICAgICBjdXJyZW50UXVldWUgPSBxdWV1ZTtcbiAgICAgICAgcXVldWUgPSBbXTtcbiAgICAgICAgd2hpbGUgKCsrcXVldWVJbmRleCA8IGxlbikge1xuICAgICAgICAgICAgaWYgKGN1cnJlbnRRdWV1ZSkge1xuICAgICAgICAgICAgICAgIGN1cnJlbnRRdWV1ZVtxdWV1ZUluZGV4XS5ydW4oKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBxdWV1ZUluZGV4ID0gLTE7XG4gICAgICAgIGxlbiA9IHF1ZXVlLmxlbmd0aDtcbiAgICB9XG4gICAgY3VycmVudFF1ZXVlID0gbnVsbDtcbiAgICBkcmFpbmluZyA9IGZhbHNlO1xuICAgIGNsZWFyVGltZW91dCh0aW1lb3V0KTtcbn1cblxucHJvY2Vzcy5uZXh0VGljayA9IGZ1bmN0aW9uIChmdW4pIHtcbiAgICB2YXIgYXJncyA9IG5ldyBBcnJheShhcmd1bWVudHMubGVuZ3RoIC0gMSk7XG4gICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPiAxKSB7XG4gICAgICAgIGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBhcmdzW2kgLSAxXSA9IGFyZ3VtZW50c1tpXTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBxdWV1ZS5wdXNoKG5ldyBJdGVtKGZ1biwgYXJncykpO1xuICAgIGlmIChxdWV1ZS5sZW5ndGggPT09IDEgJiYgIWRyYWluaW5nKSB7XG4gICAgICAgIHNldFRpbWVvdXQoZHJhaW5RdWV1ZSwgMCk7XG4gICAgfVxufTtcblxuLy8gdjggbGlrZXMgcHJlZGljdGlibGUgb2JqZWN0c1xuZnVuY3Rpb24gSXRlbShmdW4sIGFycmF5KSB7XG4gICAgdGhpcy5mdW4gPSBmdW47XG4gICAgdGhpcy5hcnJheSA9IGFycmF5O1xufVxuSXRlbS5wcm90b3R5cGUucnVuID0gZnVuY3Rpb24gKCkge1xuICAgIHRoaXMuZnVuLmFwcGx5KG51bGwsIHRoaXMuYXJyYXkpO1xufTtcbnByb2Nlc3MudGl0bGUgPSAnYnJvd3Nlcic7XG5wcm9jZXNzLmJyb3dzZXIgPSB0cnVlO1xucHJvY2Vzcy5lbnYgPSB7fTtcbnByb2Nlc3MuYXJndiA9IFtdO1xucHJvY2Vzcy52ZXJzaW9uID0gJyc7IC8vIGVtcHR5IHN0cmluZyB0byBhdm9pZCByZWdleHAgaXNzdWVzXG5wcm9jZXNzLnZlcnNpb25zID0ge307XG5cbmZ1bmN0aW9uIG5vb3AoKSB7fVxuXG5wcm9jZXNzLm9uID0gbm9vcDtcbnByb2Nlc3MuYWRkTGlzdGVuZXIgPSBub29wO1xucHJvY2Vzcy5vbmNlID0gbm9vcDtcbnByb2Nlc3Mub2ZmID0gbm9vcDtcbnByb2Nlc3MucmVtb3ZlTGlzdGVuZXIgPSBub29wO1xucHJvY2Vzcy5yZW1vdmVBbGxMaXN0ZW5lcnMgPSBub29wO1xucHJvY2Vzcy5lbWl0ID0gbm9vcDtcblxucHJvY2Vzcy5iaW5kaW5nID0gZnVuY3Rpb24gKG5hbWUpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3Byb2Nlc3MuYmluZGluZyBpcyBub3Qgc3VwcG9ydGVkJyk7XG59O1xuXG5wcm9jZXNzLmN3ZCA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuICcvJyB9O1xucHJvY2Vzcy5jaGRpciA9IGZ1bmN0aW9uIChkaXIpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3Byb2Nlc3MuY2hkaXIgaXMgbm90IHN1cHBvcnRlZCcpO1xufTtcbnByb2Nlc3MudW1hc2sgPSBmdW5jdGlvbigpIHsgcmV0dXJuIDA7IH07XG4iLCIvKiEgaHR0cHM6Ly9tdGhzLmJlL3B1bnljb2RlIHYxLjQuMCBieSBAbWF0aGlhcyAqL1xuOyhmdW5jdGlvbihyb290KSB7XG5cblx0LyoqIERldGVjdCBmcmVlIHZhcmlhYmxlcyAqL1xuXHR2YXIgZnJlZUV4cG9ydHMgPSB0eXBlb2YgZXhwb3J0cyA9PSAnb2JqZWN0JyAmJiBleHBvcnRzICYmXG5cdFx0IWV4cG9ydHMubm9kZVR5cGUgJiYgZXhwb3J0cztcblx0dmFyIGZyZWVNb2R1bGUgPSB0eXBlb2YgbW9kdWxlID09ICdvYmplY3QnICYmIG1vZHVsZSAmJlxuXHRcdCFtb2R1bGUubm9kZVR5cGUgJiYgbW9kdWxlO1xuXHR2YXIgZnJlZUdsb2JhbCA9IHR5cGVvZiBnbG9iYWwgPT0gJ29iamVjdCcgJiYgZ2xvYmFsO1xuXHRpZiAoXG5cdFx0ZnJlZUdsb2JhbC5nbG9iYWwgPT09IGZyZWVHbG9iYWwgfHxcblx0XHRmcmVlR2xvYmFsLndpbmRvdyA9PT0gZnJlZUdsb2JhbCB8fFxuXHRcdGZyZWVHbG9iYWwuc2VsZiA9PT0gZnJlZUdsb2JhbFxuXHQpIHtcblx0XHRyb290ID0gZnJlZUdsb2JhbDtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGUgYHB1bnljb2RlYCBvYmplY3QuXG5cdCAqIEBuYW1lIHB1bnljb2RlXG5cdCAqIEB0eXBlIE9iamVjdFxuXHQgKi9cblx0dmFyIHB1bnljb2RlLFxuXG5cdC8qKiBIaWdoZXN0IHBvc2l0aXZlIHNpZ25lZCAzMi1iaXQgZmxvYXQgdmFsdWUgKi9cblx0bWF4SW50ID0gMjE0NzQ4MzY0NywgLy8gYWthLiAweDdGRkZGRkZGIG9yIDJeMzEtMVxuXG5cdC8qKiBCb290c3RyaW5nIHBhcmFtZXRlcnMgKi9cblx0YmFzZSA9IDM2LFxuXHR0TWluID0gMSxcblx0dE1heCA9IDI2LFxuXHRza2V3ID0gMzgsXG5cdGRhbXAgPSA3MDAsXG5cdGluaXRpYWxCaWFzID0gNzIsXG5cdGluaXRpYWxOID0gMTI4LCAvLyAweDgwXG5cdGRlbGltaXRlciA9ICctJywgLy8gJ1xceDJEJ1xuXG5cdC8qKiBSZWd1bGFyIGV4cHJlc3Npb25zICovXG5cdHJlZ2V4UHVueWNvZGUgPSAvXnhuLS0vLFxuXHRyZWdleE5vbkFTQ0lJID0gL1teXFx4MjAtXFx4N0VdLywgLy8gdW5wcmludGFibGUgQVNDSUkgY2hhcnMgKyBub24tQVNDSUkgY2hhcnNcblx0cmVnZXhTZXBhcmF0b3JzID0gL1tcXHgyRVxcdTMwMDJcXHVGRjBFXFx1RkY2MV0vZywgLy8gUkZDIDM0OTAgc2VwYXJhdG9yc1xuXG5cdC8qKiBFcnJvciBtZXNzYWdlcyAqL1xuXHRlcnJvcnMgPSB7XG5cdFx0J292ZXJmbG93JzogJ092ZXJmbG93OiBpbnB1dCBuZWVkcyB3aWRlciBpbnRlZ2VycyB0byBwcm9jZXNzJyxcblx0XHQnbm90LWJhc2ljJzogJ0lsbGVnYWwgaW5wdXQgPj0gMHg4MCAobm90IGEgYmFzaWMgY29kZSBwb2ludCknLFxuXHRcdCdpbnZhbGlkLWlucHV0JzogJ0ludmFsaWQgaW5wdXQnXG5cdH0sXG5cblx0LyoqIENvbnZlbmllbmNlIHNob3J0Y3V0cyAqL1xuXHRiYXNlTWludXNUTWluID0gYmFzZSAtIHRNaW4sXG5cdGZsb29yID0gTWF0aC5mbG9vcixcblx0c3RyaW5nRnJvbUNoYXJDb2RlID0gU3RyaW5nLmZyb21DaGFyQ29kZSxcblxuXHQvKiogVGVtcG9yYXJ5IHZhcmlhYmxlICovXG5cdGtleTtcblxuXHQvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cblxuXHQvKipcblx0ICogQSBnZW5lcmljIGVycm9yIHV0aWxpdHkgZnVuY3Rpb24uXG5cdCAqIEBwcml2YXRlXG5cdCAqIEBwYXJhbSB7U3RyaW5nfSB0eXBlIFRoZSBlcnJvciB0eXBlLlxuXHQgKiBAcmV0dXJucyB7RXJyb3J9IFRocm93cyBhIGBSYW5nZUVycm9yYCB3aXRoIHRoZSBhcHBsaWNhYmxlIGVycm9yIG1lc3NhZ2UuXG5cdCAqL1xuXHRmdW5jdGlvbiBlcnJvcih0eXBlKSB7XG5cdFx0dGhyb3cgbmV3IFJhbmdlRXJyb3IoZXJyb3JzW3R5cGVdKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBBIGdlbmVyaWMgYEFycmF5I21hcGAgdXRpbGl0eSBmdW5jdGlvbi5cblx0ICogQHByaXZhdGVcblx0ICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIGl0ZXJhdGUgb3Zlci5cblx0ICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2sgVGhlIGZ1bmN0aW9uIHRoYXQgZ2V0cyBjYWxsZWQgZm9yIGV2ZXJ5IGFycmF5XG5cdCAqIGl0ZW0uXG5cdCAqIEByZXR1cm5zIHtBcnJheX0gQSBuZXcgYXJyYXkgb2YgdmFsdWVzIHJldHVybmVkIGJ5IHRoZSBjYWxsYmFjayBmdW5jdGlvbi5cblx0ICovXG5cdGZ1bmN0aW9uIG1hcChhcnJheSwgZm4pIHtcblx0XHR2YXIgbGVuZ3RoID0gYXJyYXkubGVuZ3RoO1xuXHRcdHZhciByZXN1bHQgPSBbXTtcblx0XHR3aGlsZSAobGVuZ3RoLS0pIHtcblx0XHRcdHJlc3VsdFtsZW5ndGhdID0gZm4oYXJyYXlbbGVuZ3RoXSk7XG5cdFx0fVxuXHRcdHJldHVybiByZXN1bHQ7XG5cdH1cblxuXHQvKipcblx0ICogQSBzaW1wbGUgYEFycmF5I21hcGAtbGlrZSB3cmFwcGVyIHRvIHdvcmsgd2l0aCBkb21haW4gbmFtZSBzdHJpbmdzIG9yIGVtYWlsXG5cdCAqIGFkZHJlc3Nlcy5cblx0ICogQHByaXZhdGVcblx0ICogQHBhcmFtIHtTdHJpbmd9IGRvbWFpbiBUaGUgZG9tYWluIG5hbWUgb3IgZW1haWwgYWRkcmVzcy5cblx0ICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2sgVGhlIGZ1bmN0aW9uIHRoYXQgZ2V0cyBjYWxsZWQgZm9yIGV2ZXJ5XG5cdCAqIGNoYXJhY3Rlci5cblx0ICogQHJldHVybnMge0FycmF5fSBBIG5ldyBzdHJpbmcgb2YgY2hhcmFjdGVycyByZXR1cm5lZCBieSB0aGUgY2FsbGJhY2tcblx0ICogZnVuY3Rpb24uXG5cdCAqL1xuXHRmdW5jdGlvbiBtYXBEb21haW4oc3RyaW5nLCBmbikge1xuXHRcdHZhciBwYXJ0cyA9IHN0cmluZy5zcGxpdCgnQCcpO1xuXHRcdHZhciByZXN1bHQgPSAnJztcblx0XHRpZiAocGFydHMubGVuZ3RoID4gMSkge1xuXHRcdFx0Ly8gSW4gZW1haWwgYWRkcmVzc2VzLCBvbmx5IHRoZSBkb21haW4gbmFtZSBzaG91bGQgYmUgcHVueWNvZGVkLiBMZWF2ZVxuXHRcdFx0Ly8gdGhlIGxvY2FsIHBhcnQgKGkuZS4gZXZlcnl0aGluZyB1cCB0byBgQGApIGludGFjdC5cblx0XHRcdHJlc3VsdCA9IHBhcnRzWzBdICsgJ0AnO1xuXHRcdFx0c3RyaW5nID0gcGFydHNbMV07XG5cdFx0fVxuXHRcdC8vIEF2b2lkIGBzcGxpdChyZWdleClgIGZvciBJRTggY29tcGF0aWJpbGl0eS4gU2VlICMxNy5cblx0XHRzdHJpbmcgPSBzdHJpbmcucmVwbGFjZShyZWdleFNlcGFyYXRvcnMsICdcXHgyRScpO1xuXHRcdHZhciBsYWJlbHMgPSBzdHJpbmcuc3BsaXQoJy4nKTtcblx0XHR2YXIgZW5jb2RlZCA9IG1hcChsYWJlbHMsIGZuKS5qb2luKCcuJyk7XG5cdFx0cmV0dXJuIHJlc3VsdCArIGVuY29kZWQ7XG5cdH1cblxuXHQvKipcblx0ICogQ3JlYXRlcyBhbiBhcnJheSBjb250YWluaW5nIHRoZSBudW1lcmljIGNvZGUgcG9pbnRzIG9mIGVhY2ggVW5pY29kZVxuXHQgKiBjaGFyYWN0ZXIgaW4gdGhlIHN0cmluZy4gV2hpbGUgSmF2YVNjcmlwdCB1c2VzIFVDUy0yIGludGVybmFsbHksXG5cdCAqIHRoaXMgZnVuY3Rpb24gd2lsbCBjb252ZXJ0IGEgcGFpciBvZiBzdXJyb2dhdGUgaGFsdmVzIChlYWNoIG9mIHdoaWNoXG5cdCAqIFVDUy0yIGV4cG9zZXMgYXMgc2VwYXJhdGUgY2hhcmFjdGVycykgaW50byBhIHNpbmdsZSBjb2RlIHBvaW50LFxuXHQgKiBtYXRjaGluZyBVVEYtMTYuXG5cdCAqIEBzZWUgYHB1bnljb2RlLnVjczIuZW5jb2RlYFxuXHQgKiBAc2VlIDxodHRwczovL21hdGhpYXNieW5lbnMuYmUvbm90ZXMvamF2YXNjcmlwdC1lbmNvZGluZz5cblx0ICogQG1lbWJlck9mIHB1bnljb2RlLnVjczJcblx0ICogQG5hbWUgZGVjb2RlXG5cdCAqIEBwYXJhbSB7U3RyaW5nfSBzdHJpbmcgVGhlIFVuaWNvZGUgaW5wdXQgc3RyaW5nIChVQ1MtMikuXG5cdCAqIEByZXR1cm5zIHtBcnJheX0gVGhlIG5ldyBhcnJheSBvZiBjb2RlIHBvaW50cy5cblx0ICovXG5cdGZ1bmN0aW9uIHVjczJkZWNvZGUoc3RyaW5nKSB7XG5cdFx0dmFyIG91dHB1dCA9IFtdLFxuXHRcdCAgICBjb3VudGVyID0gMCxcblx0XHQgICAgbGVuZ3RoID0gc3RyaW5nLmxlbmd0aCxcblx0XHQgICAgdmFsdWUsXG5cdFx0ICAgIGV4dHJhO1xuXHRcdHdoaWxlIChjb3VudGVyIDwgbGVuZ3RoKSB7XG5cdFx0XHR2YWx1ZSA9IHN0cmluZy5jaGFyQ29kZUF0KGNvdW50ZXIrKyk7XG5cdFx0XHRpZiAodmFsdWUgPj0gMHhEODAwICYmIHZhbHVlIDw9IDB4REJGRiAmJiBjb3VudGVyIDwgbGVuZ3RoKSB7XG5cdFx0XHRcdC8vIGhpZ2ggc3Vycm9nYXRlLCBhbmQgdGhlcmUgaXMgYSBuZXh0IGNoYXJhY3RlclxuXHRcdFx0XHRleHRyYSA9IHN0cmluZy5jaGFyQ29kZUF0KGNvdW50ZXIrKyk7XG5cdFx0XHRcdGlmICgoZXh0cmEgJiAweEZDMDApID09IDB4REMwMCkgeyAvLyBsb3cgc3Vycm9nYXRlXG5cdFx0XHRcdFx0b3V0cHV0LnB1c2goKCh2YWx1ZSAmIDB4M0ZGKSA8PCAxMCkgKyAoZXh0cmEgJiAweDNGRikgKyAweDEwMDAwKTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHQvLyB1bm1hdGNoZWQgc3Vycm9nYXRlOyBvbmx5IGFwcGVuZCB0aGlzIGNvZGUgdW5pdCwgaW4gY2FzZSB0aGUgbmV4dFxuXHRcdFx0XHRcdC8vIGNvZGUgdW5pdCBpcyB0aGUgaGlnaCBzdXJyb2dhdGUgb2YgYSBzdXJyb2dhdGUgcGFpclxuXHRcdFx0XHRcdG91dHB1dC5wdXNoKHZhbHVlKTtcblx0XHRcdFx0XHRjb3VudGVyLS07XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdG91dHB1dC5wdXNoKHZhbHVlKTtcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIG91dHB1dDtcblx0fVxuXG5cdC8qKlxuXHQgKiBDcmVhdGVzIGEgc3RyaW5nIGJhc2VkIG9uIGFuIGFycmF5IG9mIG51bWVyaWMgY29kZSBwb2ludHMuXG5cdCAqIEBzZWUgYHB1bnljb2RlLnVjczIuZGVjb2RlYFxuXHQgKiBAbWVtYmVyT2YgcHVueWNvZGUudWNzMlxuXHQgKiBAbmFtZSBlbmNvZGVcblx0ICogQHBhcmFtIHtBcnJheX0gY29kZVBvaW50cyBUaGUgYXJyYXkgb2YgbnVtZXJpYyBjb2RlIHBvaW50cy5cblx0ICogQHJldHVybnMge1N0cmluZ30gVGhlIG5ldyBVbmljb2RlIHN0cmluZyAoVUNTLTIpLlxuXHQgKi9cblx0ZnVuY3Rpb24gdWNzMmVuY29kZShhcnJheSkge1xuXHRcdHJldHVybiBtYXAoYXJyYXksIGZ1bmN0aW9uKHZhbHVlKSB7XG5cdFx0XHR2YXIgb3V0cHV0ID0gJyc7XG5cdFx0XHRpZiAodmFsdWUgPiAweEZGRkYpIHtcblx0XHRcdFx0dmFsdWUgLT0gMHgxMDAwMDtcblx0XHRcdFx0b3V0cHV0ICs9IHN0cmluZ0Zyb21DaGFyQ29kZSh2YWx1ZSA+Pj4gMTAgJiAweDNGRiB8IDB4RDgwMCk7XG5cdFx0XHRcdHZhbHVlID0gMHhEQzAwIHwgdmFsdWUgJiAweDNGRjtcblx0XHRcdH1cblx0XHRcdG91dHB1dCArPSBzdHJpbmdGcm9tQ2hhckNvZGUodmFsdWUpO1xuXHRcdFx0cmV0dXJuIG91dHB1dDtcblx0XHR9KS5qb2luKCcnKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBDb252ZXJ0cyBhIGJhc2ljIGNvZGUgcG9pbnQgaW50byBhIGRpZ2l0L2ludGVnZXIuXG5cdCAqIEBzZWUgYGRpZ2l0VG9CYXNpYygpYFxuXHQgKiBAcHJpdmF0ZVxuXHQgKiBAcGFyYW0ge051bWJlcn0gY29kZVBvaW50IFRoZSBiYXNpYyBudW1lcmljIGNvZGUgcG9pbnQgdmFsdWUuXG5cdCAqIEByZXR1cm5zIHtOdW1iZXJ9IFRoZSBudW1lcmljIHZhbHVlIG9mIGEgYmFzaWMgY29kZSBwb2ludCAoZm9yIHVzZSBpblxuXHQgKiByZXByZXNlbnRpbmcgaW50ZWdlcnMpIGluIHRoZSByYW5nZSBgMGAgdG8gYGJhc2UgLSAxYCwgb3IgYGJhc2VgIGlmXG5cdCAqIHRoZSBjb2RlIHBvaW50IGRvZXMgbm90IHJlcHJlc2VudCBhIHZhbHVlLlxuXHQgKi9cblx0ZnVuY3Rpb24gYmFzaWNUb0RpZ2l0KGNvZGVQb2ludCkge1xuXHRcdGlmIChjb2RlUG9pbnQgLSA0OCA8IDEwKSB7XG5cdFx0XHRyZXR1cm4gY29kZVBvaW50IC0gMjI7XG5cdFx0fVxuXHRcdGlmIChjb2RlUG9pbnQgLSA2NSA8IDI2KSB7XG5cdFx0XHRyZXR1cm4gY29kZVBvaW50IC0gNjU7XG5cdFx0fVxuXHRcdGlmIChjb2RlUG9pbnQgLSA5NyA8IDI2KSB7XG5cdFx0XHRyZXR1cm4gY29kZVBvaW50IC0gOTc7XG5cdFx0fVxuXHRcdHJldHVybiBiYXNlO1xuXHR9XG5cblx0LyoqXG5cdCAqIENvbnZlcnRzIGEgZGlnaXQvaW50ZWdlciBpbnRvIGEgYmFzaWMgY29kZSBwb2ludC5cblx0ICogQHNlZSBgYmFzaWNUb0RpZ2l0KClgXG5cdCAqIEBwcml2YXRlXG5cdCAqIEBwYXJhbSB7TnVtYmVyfSBkaWdpdCBUaGUgbnVtZXJpYyB2YWx1ZSBvZiBhIGJhc2ljIGNvZGUgcG9pbnQuXG5cdCAqIEByZXR1cm5zIHtOdW1iZXJ9IFRoZSBiYXNpYyBjb2RlIHBvaW50IHdob3NlIHZhbHVlICh3aGVuIHVzZWQgZm9yXG5cdCAqIHJlcHJlc2VudGluZyBpbnRlZ2VycykgaXMgYGRpZ2l0YCwgd2hpY2ggbmVlZHMgdG8gYmUgaW4gdGhlIHJhbmdlXG5cdCAqIGAwYCB0byBgYmFzZSAtIDFgLiBJZiBgZmxhZ2AgaXMgbm9uLXplcm8sIHRoZSB1cHBlcmNhc2UgZm9ybSBpc1xuXHQgKiB1c2VkOyBlbHNlLCB0aGUgbG93ZXJjYXNlIGZvcm0gaXMgdXNlZC4gVGhlIGJlaGF2aW9yIGlzIHVuZGVmaW5lZFxuXHQgKiBpZiBgZmxhZ2AgaXMgbm9uLXplcm8gYW5kIGBkaWdpdGAgaGFzIG5vIHVwcGVyY2FzZSBmb3JtLlxuXHQgKi9cblx0ZnVuY3Rpb24gZGlnaXRUb0Jhc2ljKGRpZ2l0LCBmbGFnKSB7XG5cdFx0Ly8gIDAuLjI1IG1hcCB0byBBU0NJSSBhLi56IG9yIEEuLlpcblx0XHQvLyAyNi4uMzUgbWFwIHRvIEFTQ0lJIDAuLjlcblx0XHRyZXR1cm4gZGlnaXQgKyAyMiArIDc1ICogKGRpZ2l0IDwgMjYpIC0gKChmbGFnICE9IDApIDw8IDUpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEJpYXMgYWRhcHRhdGlvbiBmdW5jdGlvbiBhcyBwZXIgc2VjdGlvbiAzLjQgb2YgUkZDIDM0OTIuXG5cdCAqIGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmMzNDkyI3NlY3Rpb24tMy40XG5cdCAqIEBwcml2YXRlXG5cdCAqL1xuXHRmdW5jdGlvbiBhZGFwdChkZWx0YSwgbnVtUG9pbnRzLCBmaXJzdFRpbWUpIHtcblx0XHR2YXIgayA9IDA7XG5cdFx0ZGVsdGEgPSBmaXJzdFRpbWUgPyBmbG9vcihkZWx0YSAvIGRhbXApIDogZGVsdGEgPj4gMTtcblx0XHRkZWx0YSArPSBmbG9vcihkZWx0YSAvIG51bVBvaW50cyk7XG5cdFx0Zm9yICgvKiBubyBpbml0aWFsaXphdGlvbiAqLzsgZGVsdGEgPiBiYXNlTWludXNUTWluICogdE1heCA+PiAxOyBrICs9IGJhc2UpIHtcblx0XHRcdGRlbHRhID0gZmxvb3IoZGVsdGEgLyBiYXNlTWludXNUTWluKTtcblx0XHR9XG5cdFx0cmV0dXJuIGZsb29yKGsgKyAoYmFzZU1pbnVzVE1pbiArIDEpICogZGVsdGEgLyAoZGVsdGEgKyBza2V3KSk7XG5cdH1cblxuXHQvKipcblx0ICogQ29udmVydHMgYSBQdW55Y29kZSBzdHJpbmcgb2YgQVNDSUktb25seSBzeW1ib2xzIHRvIGEgc3RyaW5nIG9mIFVuaWNvZGVcblx0ICogc3ltYm9scy5cblx0ICogQG1lbWJlck9mIHB1bnljb2RlXG5cdCAqIEBwYXJhbSB7U3RyaW5nfSBpbnB1dCBUaGUgUHVueWNvZGUgc3RyaW5nIG9mIEFTQ0lJLW9ubHkgc3ltYm9scy5cblx0ICogQHJldHVybnMge1N0cmluZ30gVGhlIHJlc3VsdGluZyBzdHJpbmcgb2YgVW5pY29kZSBzeW1ib2xzLlxuXHQgKi9cblx0ZnVuY3Rpb24gZGVjb2RlKGlucHV0KSB7XG5cdFx0Ly8gRG9uJ3QgdXNlIFVDUy0yXG5cdFx0dmFyIG91dHB1dCA9IFtdLFxuXHRcdCAgICBpbnB1dExlbmd0aCA9IGlucHV0Lmxlbmd0aCxcblx0XHQgICAgb3V0LFxuXHRcdCAgICBpID0gMCxcblx0XHQgICAgbiA9IGluaXRpYWxOLFxuXHRcdCAgICBiaWFzID0gaW5pdGlhbEJpYXMsXG5cdFx0ICAgIGJhc2ljLFxuXHRcdCAgICBqLFxuXHRcdCAgICBpbmRleCxcblx0XHQgICAgb2xkaSxcblx0XHQgICAgdyxcblx0XHQgICAgayxcblx0XHQgICAgZGlnaXQsXG5cdFx0ICAgIHQsXG5cdFx0ICAgIC8qKiBDYWNoZWQgY2FsY3VsYXRpb24gcmVzdWx0cyAqL1xuXHRcdCAgICBiYXNlTWludXNUO1xuXG5cdFx0Ly8gSGFuZGxlIHRoZSBiYXNpYyBjb2RlIHBvaW50czogbGV0IGBiYXNpY2AgYmUgdGhlIG51bWJlciBvZiBpbnB1dCBjb2RlXG5cdFx0Ly8gcG9pbnRzIGJlZm9yZSB0aGUgbGFzdCBkZWxpbWl0ZXIsIG9yIGAwYCBpZiB0aGVyZSBpcyBub25lLCB0aGVuIGNvcHlcblx0XHQvLyB0aGUgZmlyc3QgYmFzaWMgY29kZSBwb2ludHMgdG8gdGhlIG91dHB1dC5cblxuXHRcdGJhc2ljID0gaW5wdXQubGFzdEluZGV4T2YoZGVsaW1pdGVyKTtcblx0XHRpZiAoYmFzaWMgPCAwKSB7XG5cdFx0XHRiYXNpYyA9IDA7XG5cdFx0fVxuXG5cdFx0Zm9yIChqID0gMDsgaiA8IGJhc2ljOyArK2opIHtcblx0XHRcdC8vIGlmIGl0J3Mgbm90IGEgYmFzaWMgY29kZSBwb2ludFxuXHRcdFx0aWYgKGlucHV0LmNoYXJDb2RlQXQoaikgPj0gMHg4MCkge1xuXHRcdFx0XHRlcnJvcignbm90LWJhc2ljJyk7XG5cdFx0XHR9XG5cdFx0XHRvdXRwdXQucHVzaChpbnB1dC5jaGFyQ29kZUF0KGopKTtcblx0XHR9XG5cblx0XHQvLyBNYWluIGRlY29kaW5nIGxvb3A6IHN0YXJ0IGp1c3QgYWZ0ZXIgdGhlIGxhc3QgZGVsaW1pdGVyIGlmIGFueSBiYXNpYyBjb2RlXG5cdFx0Ly8gcG9pbnRzIHdlcmUgY29waWVkOyBzdGFydCBhdCB0aGUgYmVnaW5uaW5nIG90aGVyd2lzZS5cblxuXHRcdGZvciAoaW5kZXggPSBiYXNpYyA+IDAgPyBiYXNpYyArIDEgOiAwOyBpbmRleCA8IGlucHV0TGVuZ3RoOyAvKiBubyBmaW5hbCBleHByZXNzaW9uICovKSB7XG5cblx0XHRcdC8vIGBpbmRleGAgaXMgdGhlIGluZGV4IG9mIHRoZSBuZXh0IGNoYXJhY3RlciB0byBiZSBjb25zdW1lZC5cblx0XHRcdC8vIERlY29kZSBhIGdlbmVyYWxpemVkIHZhcmlhYmxlLWxlbmd0aCBpbnRlZ2VyIGludG8gYGRlbHRhYCxcblx0XHRcdC8vIHdoaWNoIGdldHMgYWRkZWQgdG8gYGlgLiBUaGUgb3ZlcmZsb3cgY2hlY2tpbmcgaXMgZWFzaWVyXG5cdFx0XHQvLyBpZiB3ZSBpbmNyZWFzZSBgaWAgYXMgd2UgZ28sIHRoZW4gc3VidHJhY3Qgb2ZmIGl0cyBzdGFydGluZ1xuXHRcdFx0Ly8gdmFsdWUgYXQgdGhlIGVuZCB0byBvYnRhaW4gYGRlbHRhYC5cblx0XHRcdGZvciAob2xkaSA9IGksIHcgPSAxLCBrID0gYmFzZTsgLyogbm8gY29uZGl0aW9uICovOyBrICs9IGJhc2UpIHtcblxuXHRcdFx0XHRpZiAoaW5kZXggPj0gaW5wdXRMZW5ndGgpIHtcblx0XHRcdFx0XHRlcnJvcignaW52YWxpZC1pbnB1dCcpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0ZGlnaXQgPSBiYXNpY1RvRGlnaXQoaW5wdXQuY2hhckNvZGVBdChpbmRleCsrKSk7XG5cblx0XHRcdFx0aWYgKGRpZ2l0ID49IGJhc2UgfHwgZGlnaXQgPiBmbG9vcigobWF4SW50IC0gaSkgLyB3KSkge1xuXHRcdFx0XHRcdGVycm9yKCdvdmVyZmxvdycpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0aSArPSBkaWdpdCAqIHc7XG5cdFx0XHRcdHQgPSBrIDw9IGJpYXMgPyB0TWluIDogKGsgPj0gYmlhcyArIHRNYXggPyB0TWF4IDogayAtIGJpYXMpO1xuXG5cdFx0XHRcdGlmIChkaWdpdCA8IHQpIHtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGJhc2VNaW51c1QgPSBiYXNlIC0gdDtcblx0XHRcdFx0aWYgKHcgPiBmbG9vcihtYXhJbnQgLyBiYXNlTWludXNUKSkge1xuXHRcdFx0XHRcdGVycm9yKCdvdmVyZmxvdycpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0dyAqPSBiYXNlTWludXNUO1xuXG5cdFx0XHR9XG5cblx0XHRcdG91dCA9IG91dHB1dC5sZW5ndGggKyAxO1xuXHRcdFx0YmlhcyA9IGFkYXB0KGkgLSBvbGRpLCBvdXQsIG9sZGkgPT0gMCk7XG5cblx0XHRcdC8vIGBpYCB3YXMgc3VwcG9zZWQgdG8gd3JhcCBhcm91bmQgZnJvbSBgb3V0YCB0byBgMGAsXG5cdFx0XHQvLyBpbmNyZW1lbnRpbmcgYG5gIGVhY2ggdGltZSwgc28gd2UnbGwgZml4IHRoYXQgbm93OlxuXHRcdFx0aWYgKGZsb29yKGkgLyBvdXQpID4gbWF4SW50IC0gbikge1xuXHRcdFx0XHRlcnJvcignb3ZlcmZsb3cnKTtcblx0XHRcdH1cblxuXHRcdFx0biArPSBmbG9vcihpIC8gb3V0KTtcblx0XHRcdGkgJT0gb3V0O1xuXG5cdFx0XHQvLyBJbnNlcnQgYG5gIGF0IHBvc2l0aW9uIGBpYCBvZiB0aGUgb3V0cHV0XG5cdFx0XHRvdXRwdXQuc3BsaWNlKGkrKywgMCwgbik7XG5cblx0XHR9XG5cblx0XHRyZXR1cm4gdWNzMmVuY29kZShvdXRwdXQpO1xuXHR9XG5cblx0LyoqXG5cdCAqIENvbnZlcnRzIGEgc3RyaW5nIG9mIFVuaWNvZGUgc3ltYm9scyAoZS5nLiBhIGRvbWFpbiBuYW1lIGxhYmVsKSB0byBhXG5cdCAqIFB1bnljb2RlIHN0cmluZyBvZiBBU0NJSS1vbmx5IHN5bWJvbHMuXG5cdCAqIEBtZW1iZXJPZiBwdW55Y29kZVxuXHQgKiBAcGFyYW0ge1N0cmluZ30gaW5wdXQgVGhlIHN0cmluZyBvZiBVbmljb2RlIHN5bWJvbHMuXG5cdCAqIEByZXR1cm5zIHtTdHJpbmd9IFRoZSByZXN1bHRpbmcgUHVueWNvZGUgc3RyaW5nIG9mIEFTQ0lJLW9ubHkgc3ltYm9scy5cblx0ICovXG5cdGZ1bmN0aW9uIGVuY29kZShpbnB1dCkge1xuXHRcdHZhciBuLFxuXHRcdCAgICBkZWx0YSxcblx0XHQgICAgaGFuZGxlZENQQ291bnQsXG5cdFx0ICAgIGJhc2ljTGVuZ3RoLFxuXHRcdCAgICBiaWFzLFxuXHRcdCAgICBqLFxuXHRcdCAgICBtLFxuXHRcdCAgICBxLFxuXHRcdCAgICBrLFxuXHRcdCAgICB0LFxuXHRcdCAgICBjdXJyZW50VmFsdWUsXG5cdFx0ICAgIG91dHB1dCA9IFtdLFxuXHRcdCAgICAvKiogYGlucHV0TGVuZ3RoYCB3aWxsIGhvbGQgdGhlIG51bWJlciBvZiBjb2RlIHBvaW50cyBpbiBgaW5wdXRgLiAqL1xuXHRcdCAgICBpbnB1dExlbmd0aCxcblx0XHQgICAgLyoqIENhY2hlZCBjYWxjdWxhdGlvbiByZXN1bHRzICovXG5cdFx0ICAgIGhhbmRsZWRDUENvdW50UGx1c09uZSxcblx0XHQgICAgYmFzZU1pbnVzVCxcblx0XHQgICAgcU1pbnVzVDtcblxuXHRcdC8vIENvbnZlcnQgdGhlIGlucHV0IGluIFVDUy0yIHRvIFVuaWNvZGVcblx0XHRpbnB1dCA9IHVjczJkZWNvZGUoaW5wdXQpO1xuXG5cdFx0Ly8gQ2FjaGUgdGhlIGxlbmd0aFxuXHRcdGlucHV0TGVuZ3RoID0gaW5wdXQubGVuZ3RoO1xuXG5cdFx0Ly8gSW5pdGlhbGl6ZSB0aGUgc3RhdGVcblx0XHRuID0gaW5pdGlhbE47XG5cdFx0ZGVsdGEgPSAwO1xuXHRcdGJpYXMgPSBpbml0aWFsQmlhcztcblxuXHRcdC8vIEhhbmRsZSB0aGUgYmFzaWMgY29kZSBwb2ludHNcblx0XHRmb3IgKGogPSAwOyBqIDwgaW5wdXRMZW5ndGg7ICsraikge1xuXHRcdFx0Y3VycmVudFZhbHVlID0gaW5wdXRbal07XG5cdFx0XHRpZiAoY3VycmVudFZhbHVlIDwgMHg4MCkge1xuXHRcdFx0XHRvdXRwdXQucHVzaChzdHJpbmdGcm9tQ2hhckNvZGUoY3VycmVudFZhbHVlKSk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0aGFuZGxlZENQQ291bnQgPSBiYXNpY0xlbmd0aCA9IG91dHB1dC5sZW5ndGg7XG5cblx0XHQvLyBgaGFuZGxlZENQQ291bnRgIGlzIHRoZSBudW1iZXIgb2YgY29kZSBwb2ludHMgdGhhdCBoYXZlIGJlZW4gaGFuZGxlZDtcblx0XHQvLyBgYmFzaWNMZW5ndGhgIGlzIHRoZSBudW1iZXIgb2YgYmFzaWMgY29kZSBwb2ludHMuXG5cblx0XHQvLyBGaW5pc2ggdGhlIGJhc2ljIHN0cmluZyAtIGlmIGl0IGlzIG5vdCBlbXB0eSAtIHdpdGggYSBkZWxpbWl0ZXJcblx0XHRpZiAoYmFzaWNMZW5ndGgpIHtcblx0XHRcdG91dHB1dC5wdXNoKGRlbGltaXRlcik7XG5cdFx0fVxuXG5cdFx0Ly8gTWFpbiBlbmNvZGluZyBsb29wOlxuXHRcdHdoaWxlIChoYW5kbGVkQ1BDb3VudCA8IGlucHV0TGVuZ3RoKSB7XG5cblx0XHRcdC8vIEFsbCBub24tYmFzaWMgY29kZSBwb2ludHMgPCBuIGhhdmUgYmVlbiBoYW5kbGVkIGFscmVhZHkuIEZpbmQgdGhlIG5leHRcblx0XHRcdC8vIGxhcmdlciBvbmU6XG5cdFx0XHRmb3IgKG0gPSBtYXhJbnQsIGogPSAwOyBqIDwgaW5wdXRMZW5ndGg7ICsraikge1xuXHRcdFx0XHRjdXJyZW50VmFsdWUgPSBpbnB1dFtqXTtcblx0XHRcdFx0aWYgKGN1cnJlbnRWYWx1ZSA+PSBuICYmIGN1cnJlbnRWYWx1ZSA8IG0pIHtcblx0XHRcdFx0XHRtID0gY3VycmVudFZhbHVlO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdC8vIEluY3JlYXNlIGBkZWx0YWAgZW5vdWdoIHRvIGFkdmFuY2UgdGhlIGRlY29kZXIncyA8bixpPiBzdGF0ZSB0byA8bSwwPixcblx0XHRcdC8vIGJ1dCBndWFyZCBhZ2FpbnN0IG92ZXJmbG93XG5cdFx0XHRoYW5kbGVkQ1BDb3VudFBsdXNPbmUgPSBoYW5kbGVkQ1BDb3VudCArIDE7XG5cdFx0XHRpZiAobSAtIG4gPiBmbG9vcigobWF4SW50IC0gZGVsdGEpIC8gaGFuZGxlZENQQ291bnRQbHVzT25lKSkge1xuXHRcdFx0XHRlcnJvcignb3ZlcmZsb3cnKTtcblx0XHRcdH1cblxuXHRcdFx0ZGVsdGEgKz0gKG0gLSBuKSAqIGhhbmRsZWRDUENvdW50UGx1c09uZTtcblx0XHRcdG4gPSBtO1xuXG5cdFx0XHRmb3IgKGogPSAwOyBqIDwgaW5wdXRMZW5ndGg7ICsraikge1xuXHRcdFx0XHRjdXJyZW50VmFsdWUgPSBpbnB1dFtqXTtcblxuXHRcdFx0XHRpZiAoY3VycmVudFZhbHVlIDwgbiAmJiArK2RlbHRhID4gbWF4SW50KSB7XG5cdFx0XHRcdFx0ZXJyb3IoJ292ZXJmbG93Jyk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZiAoY3VycmVudFZhbHVlID09IG4pIHtcblx0XHRcdFx0XHQvLyBSZXByZXNlbnQgZGVsdGEgYXMgYSBnZW5lcmFsaXplZCB2YXJpYWJsZS1sZW5ndGggaW50ZWdlclxuXHRcdFx0XHRcdGZvciAocSA9IGRlbHRhLCBrID0gYmFzZTsgLyogbm8gY29uZGl0aW9uICovOyBrICs9IGJhc2UpIHtcblx0XHRcdFx0XHRcdHQgPSBrIDw9IGJpYXMgPyB0TWluIDogKGsgPj0gYmlhcyArIHRNYXggPyB0TWF4IDogayAtIGJpYXMpO1xuXHRcdFx0XHRcdFx0aWYgKHEgPCB0KSB7XG5cdFx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0cU1pbnVzVCA9IHEgLSB0O1xuXHRcdFx0XHRcdFx0YmFzZU1pbnVzVCA9IGJhc2UgLSB0O1xuXHRcdFx0XHRcdFx0b3V0cHV0LnB1c2goXG5cdFx0XHRcdFx0XHRcdHN0cmluZ0Zyb21DaGFyQ29kZShkaWdpdFRvQmFzaWModCArIHFNaW51c1QgJSBiYXNlTWludXNULCAwKSlcblx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0XHRxID0gZmxvb3IocU1pbnVzVCAvIGJhc2VNaW51c1QpO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdG91dHB1dC5wdXNoKHN0cmluZ0Zyb21DaGFyQ29kZShkaWdpdFRvQmFzaWMocSwgMCkpKTtcblx0XHRcdFx0XHRiaWFzID0gYWRhcHQoZGVsdGEsIGhhbmRsZWRDUENvdW50UGx1c09uZSwgaGFuZGxlZENQQ291bnQgPT0gYmFzaWNMZW5ndGgpO1xuXHRcdFx0XHRcdGRlbHRhID0gMDtcblx0XHRcdFx0XHQrK2hhbmRsZWRDUENvdW50O1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdCsrZGVsdGE7XG5cdFx0XHQrK247XG5cblx0XHR9XG5cdFx0cmV0dXJuIG91dHB1dC5qb2luKCcnKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBDb252ZXJ0cyBhIFB1bnljb2RlIHN0cmluZyByZXByZXNlbnRpbmcgYSBkb21haW4gbmFtZSBvciBhbiBlbWFpbCBhZGRyZXNzXG5cdCAqIHRvIFVuaWNvZGUuIE9ubHkgdGhlIFB1bnljb2RlZCBwYXJ0cyBvZiB0aGUgaW5wdXQgd2lsbCBiZSBjb252ZXJ0ZWQsIGkuZS5cblx0ICogaXQgZG9lc24ndCBtYXR0ZXIgaWYgeW91IGNhbGwgaXQgb24gYSBzdHJpbmcgdGhhdCBoYXMgYWxyZWFkeSBiZWVuXG5cdCAqIGNvbnZlcnRlZCB0byBVbmljb2RlLlxuXHQgKiBAbWVtYmVyT2YgcHVueWNvZGVcblx0ICogQHBhcmFtIHtTdHJpbmd9IGlucHV0IFRoZSBQdW55Y29kZWQgZG9tYWluIG5hbWUgb3IgZW1haWwgYWRkcmVzcyB0b1xuXHQgKiBjb252ZXJ0IHRvIFVuaWNvZGUuXG5cdCAqIEByZXR1cm5zIHtTdHJpbmd9IFRoZSBVbmljb2RlIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBnaXZlbiBQdW55Y29kZVxuXHQgKiBzdHJpbmcuXG5cdCAqL1xuXHRmdW5jdGlvbiB0b1VuaWNvZGUoaW5wdXQpIHtcblx0XHRyZXR1cm4gbWFwRG9tYWluKGlucHV0LCBmdW5jdGlvbihzdHJpbmcpIHtcblx0XHRcdHJldHVybiByZWdleFB1bnljb2RlLnRlc3Qoc3RyaW5nKVxuXHRcdFx0XHQ/IGRlY29kZShzdHJpbmcuc2xpY2UoNCkudG9Mb3dlckNhc2UoKSlcblx0XHRcdFx0OiBzdHJpbmc7XG5cdFx0fSk7XG5cdH1cblxuXHQvKipcblx0ICogQ29udmVydHMgYSBVbmljb2RlIHN0cmluZyByZXByZXNlbnRpbmcgYSBkb21haW4gbmFtZSBvciBhbiBlbWFpbCBhZGRyZXNzIHRvXG5cdCAqIFB1bnljb2RlLiBPbmx5IHRoZSBub24tQVNDSUkgcGFydHMgb2YgdGhlIGRvbWFpbiBuYW1lIHdpbGwgYmUgY29udmVydGVkLFxuXHQgKiBpLmUuIGl0IGRvZXNuJ3QgbWF0dGVyIGlmIHlvdSBjYWxsIGl0IHdpdGggYSBkb21haW4gdGhhdCdzIGFscmVhZHkgaW5cblx0ICogQVNDSUkuXG5cdCAqIEBtZW1iZXJPZiBwdW55Y29kZVxuXHQgKiBAcGFyYW0ge1N0cmluZ30gaW5wdXQgVGhlIGRvbWFpbiBuYW1lIG9yIGVtYWlsIGFkZHJlc3MgdG8gY29udmVydCwgYXMgYVxuXHQgKiBVbmljb2RlIHN0cmluZy5cblx0ICogQHJldHVybnMge1N0cmluZ30gVGhlIFB1bnljb2RlIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBnaXZlbiBkb21haW4gbmFtZSBvclxuXHQgKiBlbWFpbCBhZGRyZXNzLlxuXHQgKi9cblx0ZnVuY3Rpb24gdG9BU0NJSShpbnB1dCkge1xuXHRcdHJldHVybiBtYXBEb21haW4oaW5wdXQsIGZ1bmN0aW9uKHN0cmluZykge1xuXHRcdFx0cmV0dXJuIHJlZ2V4Tm9uQVNDSUkudGVzdChzdHJpbmcpXG5cdFx0XHRcdD8gJ3huLS0nICsgZW5jb2RlKHN0cmluZylcblx0XHRcdFx0OiBzdHJpbmc7XG5cdFx0fSk7XG5cdH1cblxuXHQvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cblxuXHQvKiogRGVmaW5lIHRoZSBwdWJsaWMgQVBJICovXG5cdHB1bnljb2RlID0ge1xuXHRcdC8qKlxuXHRcdCAqIEEgc3RyaW5nIHJlcHJlc2VudGluZyB0aGUgY3VycmVudCBQdW55Y29kZS5qcyB2ZXJzaW9uIG51bWJlci5cblx0XHQgKiBAbWVtYmVyT2YgcHVueWNvZGVcblx0XHQgKiBAdHlwZSBTdHJpbmdcblx0XHQgKi9cblx0XHQndmVyc2lvbic6ICcxLjMuMicsXG5cdFx0LyoqXG5cdFx0ICogQW4gb2JqZWN0IG9mIG1ldGhvZHMgdG8gY29udmVydCBmcm9tIEphdmFTY3JpcHQncyBpbnRlcm5hbCBjaGFyYWN0ZXJcblx0XHQgKiByZXByZXNlbnRhdGlvbiAoVUNTLTIpIHRvIFVuaWNvZGUgY29kZSBwb2ludHMsIGFuZCBiYWNrLlxuXHRcdCAqIEBzZWUgPGh0dHBzOi8vbWF0aGlhc2J5bmVucy5iZS9ub3Rlcy9qYXZhc2NyaXB0LWVuY29kaW5nPlxuXHRcdCAqIEBtZW1iZXJPZiBwdW55Y29kZVxuXHRcdCAqIEB0eXBlIE9iamVjdFxuXHRcdCAqL1xuXHRcdCd1Y3MyJzoge1xuXHRcdFx0J2RlY29kZSc6IHVjczJkZWNvZGUsXG5cdFx0XHQnZW5jb2RlJzogdWNzMmVuY29kZVxuXHRcdH0sXG5cdFx0J2RlY29kZSc6IGRlY29kZSxcblx0XHQnZW5jb2RlJzogZW5jb2RlLFxuXHRcdCd0b0FTQ0lJJzogdG9BU0NJSSxcblx0XHQndG9Vbmljb2RlJzogdG9Vbmljb2RlXG5cdH07XG5cblx0LyoqIEV4cG9zZSBgcHVueWNvZGVgICovXG5cdC8vIFNvbWUgQU1EIGJ1aWxkIG9wdGltaXplcnMsIGxpa2Ugci5qcywgY2hlY2sgZm9yIHNwZWNpZmljIGNvbmRpdGlvbiBwYXR0ZXJuc1xuXHQvLyBsaWtlIHRoZSBmb2xsb3dpbmc6XG5cdGlmIChcblx0XHR0eXBlb2YgZGVmaW5lID09ICdmdW5jdGlvbicgJiZcblx0XHR0eXBlb2YgZGVmaW5lLmFtZCA9PSAnb2JqZWN0JyAmJlxuXHRcdGRlZmluZS5hbWRcblx0KSB7XG5cdFx0ZGVmaW5lKCdwdW55Y29kZScsIGZ1bmN0aW9uKCkge1xuXHRcdFx0cmV0dXJuIHB1bnljb2RlO1xuXHRcdH0pO1xuXHR9IGVsc2UgaWYgKGZyZWVFeHBvcnRzICYmIGZyZWVNb2R1bGUpIHtcblx0XHRpZiAobW9kdWxlLmV4cG9ydHMgPT0gZnJlZUV4cG9ydHMpIHtcblx0XHRcdC8vIGluIE5vZGUuanMsIGlvLmpzLCBvciBSaW5nb0pTIHYwLjguMCtcblx0XHRcdGZyZWVNb2R1bGUuZXhwb3J0cyA9IHB1bnljb2RlO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHQvLyBpbiBOYXJ3aGFsIG9yIFJpbmdvSlMgdjAuNy4wLVxuXHRcdFx0Zm9yIChrZXkgaW4gcHVueWNvZGUpIHtcblx0XHRcdFx0cHVueWNvZGUuaGFzT3duUHJvcGVydHkoa2V5KSAmJiAoZnJlZUV4cG9ydHNba2V5XSA9IHB1bnljb2RlW2tleV0pO1xuXHRcdFx0fVxuXHRcdH1cblx0fSBlbHNlIHtcblx0XHQvLyBpbiBSaGlubyBvciBhIHdlYiBicm93c2VyXG5cdFx0cm9vdC5wdW55Y29kZSA9IHB1bnljb2RlO1xuXHR9XG5cbn0odGhpcykpO1xuIiwiLy8gQ29weXJpZ2h0IEpveWVudCwgSW5jLiBhbmQgb3RoZXIgTm9kZSBjb250cmlidXRvcnMuXG4vL1xuLy8gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGFcbi8vIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGVcbi8vIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZ1xuLy8gd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLFxuLy8gZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdFxuLy8gcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlXG4vLyBmb2xsb3dpbmcgY29uZGl0aW9uczpcbi8vXG4vLyBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZFxuLy8gaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4vL1xuLy8gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTU1xuLy8gT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRlxuLy8gTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTlxuLy8gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sXG4vLyBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1Jcbi8vIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEVcbi8vIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG5cbid1c2Ugc3RyaWN0JztcblxuLy8gSWYgb2JqLmhhc093blByb3BlcnR5IGhhcyBiZWVuIG92ZXJyaWRkZW4sIHRoZW4gY2FsbGluZ1xuLy8gb2JqLmhhc093blByb3BlcnR5KHByb3ApIHdpbGwgYnJlYWsuXG4vLyBTZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9qb3llbnQvbm9kZS9pc3N1ZXMvMTcwN1xuZnVuY3Rpb24gaGFzT3duUHJvcGVydHkob2JqLCBwcm9wKSB7XG4gIHJldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqLCBwcm9wKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihxcywgc2VwLCBlcSwgb3B0aW9ucykge1xuICBzZXAgPSBzZXAgfHwgJyYnO1xuICBlcSA9IGVxIHx8ICc9JztcbiAgdmFyIG9iaiA9IHt9O1xuXG4gIGlmICh0eXBlb2YgcXMgIT09ICdzdHJpbmcnIHx8IHFzLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiBvYmo7XG4gIH1cblxuICB2YXIgcmVnZXhwID0gL1xcKy9nO1xuICBxcyA9IHFzLnNwbGl0KHNlcCk7XG5cbiAgdmFyIG1heEtleXMgPSAxMDAwO1xuICBpZiAob3B0aW9ucyAmJiB0eXBlb2Ygb3B0aW9ucy5tYXhLZXlzID09PSAnbnVtYmVyJykge1xuICAgIG1heEtleXMgPSBvcHRpb25zLm1heEtleXM7XG4gIH1cblxuICB2YXIgbGVuID0gcXMubGVuZ3RoO1xuICAvLyBtYXhLZXlzIDw9IDAgbWVhbnMgdGhhdCB3ZSBzaG91bGQgbm90IGxpbWl0IGtleXMgY291bnRcbiAgaWYgKG1heEtleXMgPiAwICYmIGxlbiA+IG1heEtleXMpIHtcbiAgICBsZW4gPSBtYXhLZXlzO1xuICB9XG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47ICsraSkge1xuICAgIHZhciB4ID0gcXNbaV0ucmVwbGFjZShyZWdleHAsICclMjAnKSxcbiAgICAgICAgaWR4ID0geC5pbmRleE9mKGVxKSxcbiAgICAgICAga3N0ciwgdnN0ciwgaywgdjtcblxuICAgIGlmIChpZHggPj0gMCkge1xuICAgICAga3N0ciA9IHguc3Vic3RyKDAsIGlkeCk7XG4gICAgICB2c3RyID0geC5zdWJzdHIoaWR4ICsgMSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGtzdHIgPSB4O1xuICAgICAgdnN0ciA9ICcnO1xuICAgIH1cblxuICAgIGsgPSBkZWNvZGVVUklDb21wb25lbnQoa3N0cik7XG4gICAgdiA9IGRlY29kZVVSSUNvbXBvbmVudCh2c3RyKTtcblxuICAgIGlmICghaGFzT3duUHJvcGVydHkob2JqLCBrKSkge1xuICAgICAgb2JqW2tdID0gdjtcbiAgICB9IGVsc2UgaWYgKGlzQXJyYXkob2JqW2tdKSkge1xuICAgICAgb2JqW2tdLnB1c2godik7XG4gICAgfSBlbHNlIHtcbiAgICAgIG9ialtrXSA9IFtvYmpba10sIHZdO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBvYmo7XG59O1xuXG52YXIgaXNBcnJheSA9IEFycmF5LmlzQXJyYXkgfHwgZnVuY3Rpb24gKHhzKSB7XG4gIHJldHVybiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoeHMpID09PSAnW29iamVjdCBBcnJheV0nO1xufTtcbiIsIi8vIENvcHlyaWdodCBKb3llbnQsIEluYy4gYW5kIG90aGVyIE5vZGUgY29udHJpYnV0b3JzLlxuLy9cbi8vIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhXG4vLyBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlXG4vLyBcIlNvZnR3YXJlXCIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmdcbi8vIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCxcbi8vIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXRcbi8vIHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZVxuLy8gZm9sbG93aW5nIGNvbmRpdGlvbnM6XG4vL1xuLy8gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWRcbi8vIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuLy9cbi8vIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1Ncbi8vIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0Zcbi8vIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU5cbi8vIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLFxuLy8gREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SXG4vLyBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFXG4vLyBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLlxuXG4ndXNlIHN0cmljdCc7XG5cbnZhciBzdHJpbmdpZnlQcmltaXRpdmUgPSBmdW5jdGlvbih2KSB7XG4gIHN3aXRjaCAodHlwZW9mIHYpIHtcbiAgICBjYXNlICdzdHJpbmcnOlxuICAgICAgcmV0dXJuIHY7XG5cbiAgICBjYXNlICdib29sZWFuJzpcbiAgICAgIHJldHVybiB2ID8gJ3RydWUnIDogJ2ZhbHNlJztcblxuICAgIGNhc2UgJ251bWJlcic6XG4gICAgICByZXR1cm4gaXNGaW5pdGUodikgPyB2IDogJyc7XG5cbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuICcnO1xuICB9XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKG9iaiwgc2VwLCBlcSwgbmFtZSkge1xuICBzZXAgPSBzZXAgfHwgJyYnO1xuICBlcSA9IGVxIHx8ICc9JztcbiAgaWYgKG9iaiA9PT0gbnVsbCkge1xuICAgIG9iaiA9IHVuZGVmaW5lZDtcbiAgfVxuXG4gIGlmICh0eXBlb2Ygb2JqID09PSAnb2JqZWN0Jykge1xuICAgIHJldHVybiBtYXAob2JqZWN0S2V5cyhvYmopLCBmdW5jdGlvbihrKSB7XG4gICAgICB2YXIga3MgPSBlbmNvZGVVUklDb21wb25lbnQoc3RyaW5naWZ5UHJpbWl0aXZlKGspKSArIGVxO1xuICAgICAgaWYgKGlzQXJyYXkob2JqW2tdKSkge1xuICAgICAgICByZXR1cm4gbWFwKG9ialtrXSwgZnVuY3Rpb24odikge1xuICAgICAgICAgIHJldHVybiBrcyArIGVuY29kZVVSSUNvbXBvbmVudChzdHJpbmdpZnlQcmltaXRpdmUodikpO1xuICAgICAgICB9KS5qb2luKHNlcCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4ga3MgKyBlbmNvZGVVUklDb21wb25lbnQoc3RyaW5naWZ5UHJpbWl0aXZlKG9ialtrXSkpO1xuICAgICAgfVxuICAgIH0pLmpvaW4oc2VwKTtcblxuICB9XG5cbiAgaWYgKCFuYW1lKSByZXR1cm4gJyc7XG4gIHJldHVybiBlbmNvZGVVUklDb21wb25lbnQoc3RyaW5naWZ5UHJpbWl0aXZlKG5hbWUpKSArIGVxICtcbiAgICAgICAgIGVuY29kZVVSSUNvbXBvbmVudChzdHJpbmdpZnlQcmltaXRpdmUob2JqKSk7XG59O1xuXG52YXIgaXNBcnJheSA9IEFycmF5LmlzQXJyYXkgfHwgZnVuY3Rpb24gKHhzKSB7XG4gIHJldHVybiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoeHMpID09PSAnW29iamVjdCBBcnJheV0nO1xufTtcblxuZnVuY3Rpb24gbWFwICh4cywgZikge1xuICBpZiAoeHMubWFwKSByZXR1cm4geHMubWFwKGYpO1xuICB2YXIgcmVzID0gW107XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgeHMubGVuZ3RoOyBpKyspIHtcbiAgICByZXMucHVzaChmKHhzW2ldLCBpKSk7XG4gIH1cbiAgcmV0dXJuIHJlcztcbn1cblxudmFyIG9iamVjdEtleXMgPSBPYmplY3Qua2V5cyB8fCBmdW5jdGlvbiAob2JqKSB7XG4gIHZhciByZXMgPSBbXTtcbiAgZm9yICh2YXIga2V5IGluIG9iaikge1xuICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqLCBrZXkpKSByZXMucHVzaChrZXkpO1xuICB9XG4gIHJldHVybiByZXM7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG5leHBvcnRzLmRlY29kZSA9IGV4cG9ydHMucGFyc2UgPSByZXF1aXJlKCcuL2RlY29kZScpO1xuZXhwb3J0cy5lbmNvZGUgPSBleHBvcnRzLnN0cmluZ2lmeSA9IHJlcXVpcmUoJy4vZW5jb2RlJyk7XG4iLCIvLyBDb3B5cmlnaHQgSm95ZW50LCBJbmMuIGFuZCBvdGhlciBOb2RlIGNvbnRyaWJ1dG9ycy5cbi8vXG4vLyBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYVxuLy8gY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZVxuLy8gXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nXG4vLyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsXG4vLyBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0XG4vLyBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGVcbi8vIGZvbGxvd2luZyBjb25kaXRpb25zOlxuLy9cbi8vIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkXG4vLyBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbi8vXG4vLyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTXG4vLyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GXG4vLyBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOXG4vLyBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSxcbi8vIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUlxuLy8gT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRVxuLy8gVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cblxudmFyIHB1bnljb2RlID0gcmVxdWlyZSgncHVueWNvZGUnKTtcblxuZXhwb3J0cy5wYXJzZSA9IHVybFBhcnNlO1xuZXhwb3J0cy5yZXNvbHZlID0gdXJsUmVzb2x2ZTtcbmV4cG9ydHMucmVzb2x2ZU9iamVjdCA9IHVybFJlc29sdmVPYmplY3Q7XG5leHBvcnRzLmZvcm1hdCA9IHVybEZvcm1hdDtcblxuZXhwb3J0cy5VcmwgPSBVcmw7XG5cbmZ1bmN0aW9uIFVybCgpIHtcbiAgdGhpcy5wcm90b2NvbCA9IG51bGw7XG4gIHRoaXMuc2xhc2hlcyA9IG51bGw7XG4gIHRoaXMuYXV0aCA9IG51bGw7XG4gIHRoaXMuaG9zdCA9IG51bGw7XG4gIHRoaXMucG9ydCA9IG51bGw7XG4gIHRoaXMuaG9zdG5hbWUgPSBudWxsO1xuICB0aGlzLmhhc2ggPSBudWxsO1xuICB0aGlzLnNlYXJjaCA9IG51bGw7XG4gIHRoaXMucXVlcnkgPSBudWxsO1xuICB0aGlzLnBhdGhuYW1lID0gbnVsbDtcbiAgdGhpcy5wYXRoID0gbnVsbDtcbiAgdGhpcy5ocmVmID0gbnVsbDtcbn1cblxuLy8gUmVmZXJlbmNlOiBSRkMgMzk4NiwgUkZDIDE4MDgsIFJGQyAyMzk2XG5cbi8vIGRlZmluZSB0aGVzZSBoZXJlIHNvIGF0IGxlYXN0IHRoZXkgb25seSBoYXZlIHRvIGJlXG4vLyBjb21waWxlZCBvbmNlIG9uIHRoZSBmaXJzdCBtb2R1bGUgbG9hZC5cbnZhciBwcm90b2NvbFBhdHRlcm4gPSAvXihbYS16MC05ListXSs6KS9pLFxuICAgIHBvcnRQYXR0ZXJuID0gLzpbMC05XSokLyxcblxuICAgIC8vIFJGQyAyMzk2OiBjaGFyYWN0ZXJzIHJlc2VydmVkIGZvciBkZWxpbWl0aW5nIFVSTHMuXG4gICAgLy8gV2UgYWN0dWFsbHkganVzdCBhdXRvLWVzY2FwZSB0aGVzZS5cbiAgICBkZWxpbXMgPSBbJzwnLCAnPicsICdcIicsICdgJywgJyAnLCAnXFxyJywgJ1xcbicsICdcXHQnXSxcblxuICAgIC8vIFJGQyAyMzk2OiBjaGFyYWN0ZXJzIG5vdCBhbGxvd2VkIGZvciB2YXJpb3VzIHJlYXNvbnMuXG4gICAgdW53aXNlID0gWyd7JywgJ30nLCAnfCcsICdcXFxcJywgJ14nLCAnYCddLmNvbmNhdChkZWxpbXMpLFxuXG4gICAgLy8gQWxsb3dlZCBieSBSRkNzLCBidXQgY2F1c2Ugb2YgWFNTIGF0dGFja3MuICBBbHdheXMgZXNjYXBlIHRoZXNlLlxuICAgIGF1dG9Fc2NhcGUgPSBbJ1xcJyddLmNvbmNhdCh1bndpc2UpLFxuICAgIC8vIENoYXJhY3RlcnMgdGhhdCBhcmUgbmV2ZXIgZXZlciBhbGxvd2VkIGluIGEgaG9zdG5hbWUuXG4gICAgLy8gTm90ZSB0aGF0IGFueSBpbnZhbGlkIGNoYXJzIGFyZSBhbHNvIGhhbmRsZWQsIGJ1dCB0aGVzZVxuICAgIC8vIGFyZSB0aGUgb25lcyB0aGF0IGFyZSAqZXhwZWN0ZWQqIHRvIGJlIHNlZW4sIHNvIHdlIGZhc3QtcGF0aFxuICAgIC8vIHRoZW0uXG4gICAgbm9uSG9zdENoYXJzID0gWyclJywgJy8nLCAnPycsICc7JywgJyMnXS5jb25jYXQoYXV0b0VzY2FwZSksXG4gICAgaG9zdEVuZGluZ0NoYXJzID0gWycvJywgJz8nLCAnIyddLFxuICAgIGhvc3RuYW1lTWF4TGVuID0gMjU1LFxuICAgIGhvc3RuYW1lUGFydFBhdHRlcm4gPSAvXlthLXowLTlBLVpfLV17MCw2M30kLyxcbiAgICBob3N0bmFtZVBhcnRTdGFydCA9IC9eKFthLXowLTlBLVpfLV17MCw2M30pKC4qKSQvLFxuICAgIC8vIHByb3RvY29scyB0aGF0IGNhbiBhbGxvdyBcInVuc2FmZVwiIGFuZCBcInVud2lzZVwiIGNoYXJzLlxuICAgIHVuc2FmZVByb3RvY29sID0ge1xuICAgICAgJ2phdmFzY3JpcHQnOiB0cnVlLFxuICAgICAgJ2phdmFzY3JpcHQ6JzogdHJ1ZVxuICAgIH0sXG4gICAgLy8gcHJvdG9jb2xzIHRoYXQgbmV2ZXIgaGF2ZSBhIGhvc3RuYW1lLlxuICAgIGhvc3RsZXNzUHJvdG9jb2wgPSB7XG4gICAgICAnamF2YXNjcmlwdCc6IHRydWUsXG4gICAgICAnamF2YXNjcmlwdDonOiB0cnVlXG4gICAgfSxcbiAgICAvLyBwcm90b2NvbHMgdGhhdCBhbHdheXMgY29udGFpbiBhIC8vIGJpdC5cbiAgICBzbGFzaGVkUHJvdG9jb2wgPSB7XG4gICAgICAnaHR0cCc6IHRydWUsXG4gICAgICAnaHR0cHMnOiB0cnVlLFxuICAgICAgJ2Z0cCc6IHRydWUsXG4gICAgICAnZ29waGVyJzogdHJ1ZSxcbiAgICAgICdmaWxlJzogdHJ1ZSxcbiAgICAgICdodHRwOic6IHRydWUsXG4gICAgICAnaHR0cHM6JzogdHJ1ZSxcbiAgICAgICdmdHA6JzogdHJ1ZSxcbiAgICAgICdnb3BoZXI6JzogdHJ1ZSxcbiAgICAgICdmaWxlOic6IHRydWVcbiAgICB9LFxuICAgIHF1ZXJ5c3RyaW5nID0gcmVxdWlyZSgncXVlcnlzdHJpbmcnKTtcblxuZnVuY3Rpb24gdXJsUGFyc2UodXJsLCBwYXJzZVF1ZXJ5U3RyaW5nLCBzbGFzaGVzRGVub3RlSG9zdCkge1xuICBpZiAodXJsICYmIGlzT2JqZWN0KHVybCkgJiYgdXJsIGluc3RhbmNlb2YgVXJsKSByZXR1cm4gdXJsO1xuXG4gIHZhciB1ID0gbmV3IFVybDtcbiAgdS5wYXJzZSh1cmwsIHBhcnNlUXVlcnlTdHJpbmcsIHNsYXNoZXNEZW5vdGVIb3N0KTtcbiAgcmV0dXJuIHU7XG59XG5cblVybC5wcm90b3R5cGUucGFyc2UgPSBmdW5jdGlvbih1cmwsIHBhcnNlUXVlcnlTdHJpbmcsIHNsYXNoZXNEZW5vdGVIb3N0KSB7XG4gIGlmICghaXNTdHJpbmcodXJsKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJQYXJhbWV0ZXIgJ3VybCcgbXVzdCBiZSBhIHN0cmluZywgbm90IFwiICsgdHlwZW9mIHVybCk7XG4gIH1cblxuICB2YXIgcmVzdCA9IHVybDtcblxuICAvLyB0cmltIGJlZm9yZSBwcm9jZWVkaW5nLlxuICAvLyBUaGlzIGlzIHRvIHN1cHBvcnQgcGFyc2Ugc3R1ZmYgbGlrZSBcIiAgaHR0cDovL2Zvby5jb20gIFxcblwiXG4gIHJlc3QgPSByZXN0LnRyaW0oKTtcblxuICB2YXIgcHJvdG8gPSBwcm90b2NvbFBhdHRlcm4uZXhlYyhyZXN0KTtcbiAgaWYgKHByb3RvKSB7XG4gICAgcHJvdG8gPSBwcm90b1swXTtcbiAgICB2YXIgbG93ZXJQcm90byA9IHByb3RvLnRvTG93ZXJDYXNlKCk7XG4gICAgdGhpcy5wcm90b2NvbCA9IGxvd2VyUHJvdG87XG4gICAgcmVzdCA9IHJlc3Quc3Vic3RyKHByb3RvLmxlbmd0aCk7XG4gIH1cblxuICAvLyBmaWd1cmUgb3V0IGlmIGl0J3MgZ290IGEgaG9zdFxuICAvLyB1c2VyQHNlcnZlciBpcyAqYWx3YXlzKiBpbnRlcnByZXRlZCBhcyBhIGhvc3RuYW1lLCBhbmQgdXJsXG4gIC8vIHJlc29sdXRpb24gd2lsbCB0cmVhdCAvL2Zvby9iYXIgYXMgaG9zdD1mb28scGF0aD1iYXIgYmVjYXVzZSB0aGF0J3NcbiAgLy8gaG93IHRoZSBicm93c2VyIHJlc29sdmVzIHJlbGF0aXZlIFVSTHMuXG4gIGlmIChzbGFzaGVzRGVub3RlSG9zdCB8fCBwcm90byB8fCByZXN0Lm1hdGNoKC9eXFwvXFwvW15AXFwvXStAW15AXFwvXSsvKSkge1xuICAgIHZhciBzbGFzaGVzID0gcmVzdC5zdWJzdHIoMCwgMikgPT09ICcvLyc7XG4gICAgaWYgKHNsYXNoZXMgJiYgIShwcm90byAmJiBob3N0bGVzc1Byb3RvY29sW3Byb3RvXSkpIHtcbiAgICAgIHJlc3QgPSByZXN0LnN1YnN0cigyKTtcbiAgICAgIHRoaXMuc2xhc2hlcyA9IHRydWU7XG4gICAgfVxuICB9XG5cbiAgaWYgKCFob3N0bGVzc1Byb3RvY29sW3Byb3RvXSAmJlxuICAgICAgKHNsYXNoZXMgfHwgKHByb3RvICYmICFzbGFzaGVkUHJvdG9jb2xbcHJvdG9dKSkpIHtcblxuICAgIC8vIHRoZXJlJ3MgYSBob3N0bmFtZS5cbiAgICAvLyB0aGUgZmlyc3QgaW5zdGFuY2Ugb2YgLywgPywgOywgb3IgIyBlbmRzIHRoZSBob3N0LlxuICAgIC8vXG4gICAgLy8gSWYgdGhlcmUgaXMgYW4gQCBpbiB0aGUgaG9zdG5hbWUsIHRoZW4gbm9uLWhvc3QgY2hhcnMgKmFyZSogYWxsb3dlZFxuICAgIC8vIHRvIHRoZSBsZWZ0IG9mIHRoZSBsYXN0IEAgc2lnbiwgdW5sZXNzIHNvbWUgaG9zdC1lbmRpbmcgY2hhcmFjdGVyXG4gICAgLy8gY29tZXMgKmJlZm9yZSogdGhlIEAtc2lnbi5cbiAgICAvLyBVUkxzIGFyZSBvYm5veGlvdXMuXG4gICAgLy9cbiAgICAvLyBleDpcbiAgICAvLyBodHRwOi8vYUBiQGMvID0+IHVzZXI6YUBiIGhvc3Q6Y1xuICAgIC8vIGh0dHA6Ly9hQGI/QGMgPT4gdXNlcjphIGhvc3Q6YyBwYXRoOi8/QGNcblxuICAgIC8vIHYwLjEyIFRPRE8oaXNhYWNzKTogVGhpcyBpcyBub3QgcXVpdGUgaG93IENocm9tZSBkb2VzIHRoaW5ncy5cbiAgICAvLyBSZXZpZXcgb3VyIHRlc3QgY2FzZSBhZ2FpbnN0IGJyb3dzZXJzIG1vcmUgY29tcHJlaGVuc2l2ZWx5LlxuXG4gICAgLy8gZmluZCB0aGUgZmlyc3QgaW5zdGFuY2Ugb2YgYW55IGhvc3RFbmRpbmdDaGFyc1xuICAgIHZhciBob3N0RW5kID0gLTE7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBob3N0RW5kaW5nQ2hhcnMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBoZWMgPSByZXN0LmluZGV4T2YoaG9zdEVuZGluZ0NoYXJzW2ldKTtcbiAgICAgIGlmIChoZWMgIT09IC0xICYmIChob3N0RW5kID09PSAtMSB8fCBoZWMgPCBob3N0RW5kKSlcbiAgICAgICAgaG9zdEVuZCA9IGhlYztcbiAgICB9XG5cbiAgICAvLyBhdCB0aGlzIHBvaW50LCBlaXRoZXIgd2UgaGF2ZSBhbiBleHBsaWNpdCBwb2ludCB3aGVyZSB0aGVcbiAgICAvLyBhdXRoIHBvcnRpb24gY2Fubm90IGdvIHBhc3QsIG9yIHRoZSBsYXN0IEAgY2hhciBpcyB0aGUgZGVjaWRlci5cbiAgICB2YXIgYXV0aCwgYXRTaWduO1xuICAgIGlmIChob3N0RW5kID09PSAtMSkge1xuICAgICAgLy8gYXRTaWduIGNhbiBiZSBhbnl3aGVyZS5cbiAgICAgIGF0U2lnbiA9IHJlc3QubGFzdEluZGV4T2YoJ0AnKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gYXRTaWduIG11c3QgYmUgaW4gYXV0aCBwb3J0aW9uLlxuICAgICAgLy8gaHR0cDovL2FAYi9jQGQgPT4gaG9zdDpiIGF1dGg6YSBwYXRoOi9jQGRcbiAgICAgIGF0U2lnbiA9IHJlc3QubGFzdEluZGV4T2YoJ0AnLCBob3N0RW5kKTtcbiAgICB9XG5cbiAgICAvLyBOb3cgd2UgaGF2ZSBhIHBvcnRpb24gd2hpY2ggaXMgZGVmaW5pdGVseSB0aGUgYXV0aC5cbiAgICAvLyBQdWxsIHRoYXQgb2ZmLlxuICAgIGlmIChhdFNpZ24gIT09IC0xKSB7XG4gICAgICBhdXRoID0gcmVzdC5zbGljZSgwLCBhdFNpZ24pO1xuICAgICAgcmVzdCA9IHJlc3Quc2xpY2UoYXRTaWduICsgMSk7XG4gICAgICB0aGlzLmF1dGggPSBkZWNvZGVVUklDb21wb25lbnQoYXV0aCk7XG4gICAgfVxuXG4gICAgLy8gdGhlIGhvc3QgaXMgdGhlIHJlbWFpbmluZyB0byB0aGUgbGVmdCBvZiB0aGUgZmlyc3Qgbm9uLWhvc3QgY2hhclxuICAgIGhvc3RFbmQgPSAtMTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG5vbkhvc3RDaGFycy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGhlYyA9IHJlc3QuaW5kZXhPZihub25Ib3N0Q2hhcnNbaV0pO1xuICAgICAgaWYgKGhlYyAhPT0gLTEgJiYgKGhvc3RFbmQgPT09IC0xIHx8IGhlYyA8IGhvc3RFbmQpKVxuICAgICAgICBob3N0RW5kID0gaGVjO1xuICAgIH1cbiAgICAvLyBpZiB3ZSBzdGlsbCBoYXZlIG5vdCBoaXQgaXQsIHRoZW4gdGhlIGVudGlyZSB0aGluZyBpcyBhIGhvc3QuXG4gICAgaWYgKGhvc3RFbmQgPT09IC0xKVxuICAgICAgaG9zdEVuZCA9IHJlc3QubGVuZ3RoO1xuXG4gICAgdGhpcy5ob3N0ID0gcmVzdC5zbGljZSgwLCBob3N0RW5kKTtcbiAgICByZXN0ID0gcmVzdC5zbGljZShob3N0RW5kKTtcblxuICAgIC8vIHB1bGwgb3V0IHBvcnQuXG4gICAgdGhpcy5wYXJzZUhvc3QoKTtcblxuICAgIC8vIHdlJ3ZlIGluZGljYXRlZCB0aGF0IHRoZXJlIGlzIGEgaG9zdG5hbWUsXG4gICAgLy8gc28gZXZlbiBpZiBpdCdzIGVtcHR5LCBpdCBoYXMgdG8gYmUgcHJlc2VudC5cbiAgICB0aGlzLmhvc3RuYW1lID0gdGhpcy5ob3N0bmFtZSB8fCAnJztcblxuICAgIC8vIGlmIGhvc3RuYW1lIGJlZ2lucyB3aXRoIFsgYW5kIGVuZHMgd2l0aCBdXG4gICAgLy8gYXNzdW1lIHRoYXQgaXQncyBhbiBJUHY2IGFkZHJlc3MuXG4gICAgdmFyIGlwdjZIb3N0bmFtZSA9IHRoaXMuaG9zdG5hbWVbMF0gPT09ICdbJyAmJlxuICAgICAgICB0aGlzLmhvc3RuYW1lW3RoaXMuaG9zdG5hbWUubGVuZ3RoIC0gMV0gPT09ICddJztcblxuICAgIC8vIHZhbGlkYXRlIGEgbGl0dGxlLlxuICAgIGlmICghaXB2Nkhvc3RuYW1lKSB7XG4gICAgICB2YXIgaG9zdHBhcnRzID0gdGhpcy5ob3N0bmFtZS5zcGxpdCgvXFwuLyk7XG4gICAgICBmb3IgKHZhciBpID0gMCwgbCA9IGhvc3RwYXJ0cy5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICAgICAgdmFyIHBhcnQgPSBob3N0cGFydHNbaV07XG4gICAgICAgIGlmICghcGFydCkgY29udGludWU7XG4gICAgICAgIGlmICghcGFydC5tYXRjaChob3N0bmFtZVBhcnRQYXR0ZXJuKSkge1xuICAgICAgICAgIHZhciBuZXdwYXJ0ID0gJyc7XG4gICAgICAgICAgZm9yICh2YXIgaiA9IDAsIGsgPSBwYXJ0Lmxlbmd0aDsgaiA8IGs7IGorKykge1xuICAgICAgICAgICAgaWYgKHBhcnQuY2hhckNvZGVBdChqKSA+IDEyNykge1xuICAgICAgICAgICAgICAvLyB3ZSByZXBsYWNlIG5vbi1BU0NJSSBjaGFyIHdpdGggYSB0ZW1wb3JhcnkgcGxhY2Vob2xkZXJcbiAgICAgICAgICAgICAgLy8gd2UgbmVlZCB0aGlzIHRvIG1ha2Ugc3VyZSBzaXplIG9mIGhvc3RuYW1lIGlzIG5vdFxuICAgICAgICAgICAgICAvLyBicm9rZW4gYnkgcmVwbGFjaW5nIG5vbi1BU0NJSSBieSBub3RoaW5nXG4gICAgICAgICAgICAgIG5ld3BhcnQgKz0gJ3gnO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgbmV3cGFydCArPSBwYXJ0W2pdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICAvLyB3ZSB0ZXN0IGFnYWluIHdpdGggQVNDSUkgY2hhciBvbmx5XG4gICAgICAgICAgaWYgKCFuZXdwYXJ0Lm1hdGNoKGhvc3RuYW1lUGFydFBhdHRlcm4pKSB7XG4gICAgICAgICAgICB2YXIgdmFsaWRQYXJ0cyA9IGhvc3RwYXJ0cy5zbGljZSgwLCBpKTtcbiAgICAgICAgICAgIHZhciBub3RIb3N0ID0gaG9zdHBhcnRzLnNsaWNlKGkgKyAxKTtcbiAgICAgICAgICAgIHZhciBiaXQgPSBwYXJ0Lm1hdGNoKGhvc3RuYW1lUGFydFN0YXJ0KTtcbiAgICAgICAgICAgIGlmIChiaXQpIHtcbiAgICAgICAgICAgICAgdmFsaWRQYXJ0cy5wdXNoKGJpdFsxXSk7XG4gICAgICAgICAgICAgIG5vdEhvc3QudW5zaGlmdChiaXRbMl0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKG5vdEhvc3QubGVuZ3RoKSB7XG4gICAgICAgICAgICAgIHJlc3QgPSAnLycgKyBub3RIb3N0LmpvaW4oJy4nKSArIHJlc3Q7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmhvc3RuYW1lID0gdmFsaWRQYXJ0cy5qb2luKCcuJyk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodGhpcy5ob3N0bmFtZS5sZW5ndGggPiBob3N0bmFtZU1heExlbikge1xuICAgICAgdGhpcy5ob3N0bmFtZSA9ICcnO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBob3N0bmFtZXMgYXJlIGFsd2F5cyBsb3dlciBjYXNlLlxuICAgICAgdGhpcy5ob3N0bmFtZSA9IHRoaXMuaG9zdG5hbWUudG9Mb3dlckNhc2UoKTtcbiAgICB9XG5cbiAgICBpZiAoIWlwdjZIb3N0bmFtZSkge1xuICAgICAgLy8gSUROQSBTdXBwb3J0OiBSZXR1cm5zIGEgcHVueSBjb2RlZCByZXByZXNlbnRhdGlvbiBvZiBcImRvbWFpblwiLlxuICAgICAgLy8gSXQgb25seSBjb252ZXJ0cyB0aGUgcGFydCBvZiB0aGUgZG9tYWluIG5hbWUgdGhhdFxuICAgICAgLy8gaGFzIG5vbiBBU0NJSSBjaGFyYWN0ZXJzLiBJLmUuIGl0IGRvc2VudCBtYXR0ZXIgaWZcbiAgICAgIC8vIHlvdSBjYWxsIGl0IHdpdGggYSBkb21haW4gdGhhdCBhbHJlYWR5IGlzIGluIEFTQ0lJLlxuICAgICAgdmFyIGRvbWFpbkFycmF5ID0gdGhpcy5ob3N0bmFtZS5zcGxpdCgnLicpO1xuICAgICAgdmFyIG5ld091dCA9IFtdO1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBkb21haW5BcnJheS5sZW5ndGg7ICsraSkge1xuICAgICAgICB2YXIgcyA9IGRvbWFpbkFycmF5W2ldO1xuICAgICAgICBuZXdPdXQucHVzaChzLm1hdGNoKC9bXkEtWmEtejAtOV8tXS8pID9cbiAgICAgICAgICAgICd4bi0tJyArIHB1bnljb2RlLmVuY29kZShzKSA6IHMpO1xuICAgICAgfVxuICAgICAgdGhpcy5ob3N0bmFtZSA9IG5ld091dC5qb2luKCcuJyk7XG4gICAgfVxuXG4gICAgdmFyIHAgPSB0aGlzLnBvcnQgPyAnOicgKyB0aGlzLnBvcnQgOiAnJztcbiAgICB2YXIgaCA9IHRoaXMuaG9zdG5hbWUgfHwgJyc7XG4gICAgdGhpcy5ob3N0ID0gaCArIHA7XG4gICAgdGhpcy5ocmVmICs9IHRoaXMuaG9zdDtcblxuICAgIC8vIHN0cmlwIFsgYW5kIF0gZnJvbSB0aGUgaG9zdG5hbWVcbiAgICAvLyB0aGUgaG9zdCBmaWVsZCBzdGlsbCByZXRhaW5zIHRoZW0sIHRob3VnaFxuICAgIGlmIChpcHY2SG9zdG5hbWUpIHtcbiAgICAgIHRoaXMuaG9zdG5hbWUgPSB0aGlzLmhvc3RuYW1lLnN1YnN0cigxLCB0aGlzLmhvc3RuYW1lLmxlbmd0aCAtIDIpO1xuICAgICAgaWYgKHJlc3RbMF0gIT09ICcvJykge1xuICAgICAgICByZXN0ID0gJy8nICsgcmVzdDtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyBub3cgcmVzdCBpcyBzZXQgdG8gdGhlIHBvc3QtaG9zdCBzdHVmZi5cbiAgLy8gY2hvcCBvZmYgYW55IGRlbGltIGNoYXJzLlxuICBpZiAoIXVuc2FmZVByb3RvY29sW2xvd2VyUHJvdG9dKSB7XG5cbiAgICAvLyBGaXJzdCwgbWFrZSAxMDAlIHN1cmUgdGhhdCBhbnkgXCJhdXRvRXNjYXBlXCIgY2hhcnMgZ2V0XG4gICAgLy8gZXNjYXBlZCwgZXZlbiBpZiBlbmNvZGVVUklDb21wb25lbnQgZG9lc24ndCB0aGluayB0aGV5XG4gICAgLy8gbmVlZCB0byBiZS5cbiAgICBmb3IgKHZhciBpID0gMCwgbCA9IGF1dG9Fc2NhcGUubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgICB2YXIgYWUgPSBhdXRvRXNjYXBlW2ldO1xuICAgICAgdmFyIGVzYyA9IGVuY29kZVVSSUNvbXBvbmVudChhZSk7XG4gICAgICBpZiAoZXNjID09PSBhZSkge1xuICAgICAgICBlc2MgPSBlc2NhcGUoYWUpO1xuICAgICAgfVxuICAgICAgcmVzdCA9IHJlc3Quc3BsaXQoYWUpLmpvaW4oZXNjKTtcbiAgICB9XG4gIH1cblxuXG4gIC8vIGNob3Agb2ZmIGZyb20gdGhlIHRhaWwgZmlyc3QuXG4gIHZhciBoYXNoID0gcmVzdC5pbmRleE9mKCcjJyk7XG4gIGlmIChoYXNoICE9PSAtMSkge1xuICAgIC8vIGdvdCBhIGZyYWdtZW50IHN0cmluZy5cbiAgICB0aGlzLmhhc2ggPSByZXN0LnN1YnN0cihoYXNoKTtcbiAgICByZXN0ID0gcmVzdC5zbGljZSgwLCBoYXNoKTtcbiAgfVxuICB2YXIgcW0gPSByZXN0LmluZGV4T2YoJz8nKTtcbiAgaWYgKHFtICE9PSAtMSkge1xuICAgIHRoaXMuc2VhcmNoID0gcmVzdC5zdWJzdHIocW0pO1xuICAgIHRoaXMucXVlcnkgPSByZXN0LnN1YnN0cihxbSArIDEpO1xuICAgIGlmIChwYXJzZVF1ZXJ5U3RyaW5nKSB7XG4gICAgICB0aGlzLnF1ZXJ5ID0gcXVlcnlzdHJpbmcucGFyc2UodGhpcy5xdWVyeSk7XG4gICAgfVxuICAgIHJlc3QgPSByZXN0LnNsaWNlKDAsIHFtKTtcbiAgfSBlbHNlIGlmIChwYXJzZVF1ZXJ5U3RyaW5nKSB7XG4gICAgLy8gbm8gcXVlcnkgc3RyaW5nLCBidXQgcGFyc2VRdWVyeVN0cmluZyBzdGlsbCByZXF1ZXN0ZWRcbiAgICB0aGlzLnNlYXJjaCA9ICcnO1xuICAgIHRoaXMucXVlcnkgPSB7fTtcbiAgfVxuICBpZiAocmVzdCkgdGhpcy5wYXRobmFtZSA9IHJlc3Q7XG4gIGlmIChzbGFzaGVkUHJvdG9jb2xbbG93ZXJQcm90b10gJiZcbiAgICAgIHRoaXMuaG9zdG5hbWUgJiYgIXRoaXMucGF0aG5hbWUpIHtcbiAgICB0aGlzLnBhdGhuYW1lID0gJy8nO1xuICB9XG5cbiAgLy90byBzdXBwb3J0IGh0dHAucmVxdWVzdFxuICBpZiAodGhpcy5wYXRobmFtZSB8fCB0aGlzLnNlYXJjaCkge1xuICAgIHZhciBwID0gdGhpcy5wYXRobmFtZSB8fCAnJztcbiAgICB2YXIgcyA9IHRoaXMuc2VhcmNoIHx8ICcnO1xuICAgIHRoaXMucGF0aCA9IHAgKyBzO1xuICB9XG5cbiAgLy8gZmluYWxseSwgcmVjb25zdHJ1Y3QgdGhlIGhyZWYgYmFzZWQgb24gd2hhdCBoYXMgYmVlbiB2YWxpZGF0ZWQuXG4gIHRoaXMuaHJlZiA9IHRoaXMuZm9ybWF0KCk7XG4gIHJldHVybiB0aGlzO1xufTtcblxuLy8gZm9ybWF0IGEgcGFyc2VkIG9iamVjdCBpbnRvIGEgdXJsIHN0cmluZ1xuZnVuY3Rpb24gdXJsRm9ybWF0KG9iaikge1xuICAvLyBlbnN1cmUgaXQncyBhbiBvYmplY3QsIGFuZCBub3QgYSBzdHJpbmcgdXJsLlxuICAvLyBJZiBpdCdzIGFuIG9iaiwgdGhpcyBpcyBhIG5vLW9wLlxuICAvLyB0aGlzIHdheSwgeW91IGNhbiBjYWxsIHVybF9mb3JtYXQoKSBvbiBzdHJpbmdzXG4gIC8vIHRvIGNsZWFuIHVwIHBvdGVudGlhbGx5IHdvbmt5IHVybHMuXG4gIGlmIChpc1N0cmluZyhvYmopKSBvYmogPSB1cmxQYXJzZShvYmopO1xuICBpZiAoIShvYmogaW5zdGFuY2VvZiBVcmwpKSByZXR1cm4gVXJsLnByb3RvdHlwZS5mb3JtYXQuY2FsbChvYmopO1xuICByZXR1cm4gb2JqLmZvcm1hdCgpO1xufVxuXG5VcmwucHJvdG90eXBlLmZvcm1hdCA9IGZ1bmN0aW9uKCkge1xuICB2YXIgYXV0aCA9IHRoaXMuYXV0aCB8fCAnJztcbiAgaWYgKGF1dGgpIHtcbiAgICBhdXRoID0gZW5jb2RlVVJJQ29tcG9uZW50KGF1dGgpO1xuICAgIGF1dGggPSBhdXRoLnJlcGxhY2UoLyUzQS9pLCAnOicpO1xuICAgIGF1dGggKz0gJ0AnO1xuICB9XG5cbiAgdmFyIHByb3RvY29sID0gdGhpcy5wcm90b2NvbCB8fCAnJyxcbiAgICAgIHBhdGhuYW1lID0gdGhpcy5wYXRobmFtZSB8fCAnJyxcbiAgICAgIGhhc2ggPSB0aGlzLmhhc2ggfHwgJycsXG4gICAgICBob3N0ID0gZmFsc2UsXG4gICAgICBxdWVyeSA9ICcnO1xuXG4gIGlmICh0aGlzLmhvc3QpIHtcbiAgICBob3N0ID0gYXV0aCArIHRoaXMuaG9zdDtcbiAgfSBlbHNlIGlmICh0aGlzLmhvc3RuYW1lKSB7XG4gICAgaG9zdCA9IGF1dGggKyAodGhpcy5ob3N0bmFtZS5pbmRleE9mKCc6JykgPT09IC0xID9cbiAgICAgICAgdGhpcy5ob3N0bmFtZSA6XG4gICAgICAgICdbJyArIHRoaXMuaG9zdG5hbWUgKyAnXScpO1xuICAgIGlmICh0aGlzLnBvcnQpIHtcbiAgICAgIGhvc3QgKz0gJzonICsgdGhpcy5wb3J0O1xuICAgIH1cbiAgfVxuXG4gIGlmICh0aGlzLnF1ZXJ5ICYmXG4gICAgICBpc09iamVjdCh0aGlzLnF1ZXJ5KSAmJlxuICAgICAgT2JqZWN0LmtleXModGhpcy5xdWVyeSkubGVuZ3RoKSB7XG4gICAgcXVlcnkgPSBxdWVyeXN0cmluZy5zdHJpbmdpZnkodGhpcy5xdWVyeSk7XG4gIH1cblxuICB2YXIgc2VhcmNoID0gdGhpcy5zZWFyY2ggfHwgKHF1ZXJ5ICYmICgnPycgKyBxdWVyeSkpIHx8ICcnO1xuXG4gIGlmIChwcm90b2NvbCAmJiBwcm90b2NvbC5zdWJzdHIoLTEpICE9PSAnOicpIHByb3RvY29sICs9ICc6JztcblxuICAvLyBvbmx5IHRoZSBzbGFzaGVkUHJvdG9jb2xzIGdldCB0aGUgLy8uICBOb3QgbWFpbHRvOiwgeG1wcDosIGV0Yy5cbiAgLy8gdW5sZXNzIHRoZXkgaGFkIHRoZW0gdG8gYmVnaW4gd2l0aC5cbiAgaWYgKHRoaXMuc2xhc2hlcyB8fFxuICAgICAgKCFwcm90b2NvbCB8fCBzbGFzaGVkUHJvdG9jb2xbcHJvdG9jb2xdKSAmJiBob3N0ICE9PSBmYWxzZSkge1xuICAgIGhvc3QgPSAnLy8nICsgKGhvc3QgfHwgJycpO1xuICAgIGlmIChwYXRobmFtZSAmJiBwYXRobmFtZS5jaGFyQXQoMCkgIT09ICcvJykgcGF0aG5hbWUgPSAnLycgKyBwYXRobmFtZTtcbiAgfSBlbHNlIGlmICghaG9zdCkge1xuICAgIGhvc3QgPSAnJztcbiAgfVxuXG4gIGlmIChoYXNoICYmIGhhc2guY2hhckF0KDApICE9PSAnIycpIGhhc2ggPSAnIycgKyBoYXNoO1xuICBpZiAoc2VhcmNoICYmIHNlYXJjaC5jaGFyQXQoMCkgIT09ICc/Jykgc2VhcmNoID0gJz8nICsgc2VhcmNoO1xuXG4gIHBhdGhuYW1lID0gcGF0aG5hbWUucmVwbGFjZSgvWz8jXS9nLCBmdW5jdGlvbihtYXRjaCkge1xuICAgIHJldHVybiBlbmNvZGVVUklDb21wb25lbnQobWF0Y2gpO1xuICB9KTtcbiAgc2VhcmNoID0gc2VhcmNoLnJlcGxhY2UoJyMnLCAnJTIzJyk7XG5cbiAgcmV0dXJuIHByb3RvY29sICsgaG9zdCArIHBhdGhuYW1lICsgc2VhcmNoICsgaGFzaDtcbn07XG5cbmZ1bmN0aW9uIHVybFJlc29sdmUoc291cmNlLCByZWxhdGl2ZSkge1xuICByZXR1cm4gdXJsUGFyc2Uoc291cmNlLCBmYWxzZSwgdHJ1ZSkucmVzb2x2ZShyZWxhdGl2ZSk7XG59XG5cblVybC5wcm90b3R5cGUucmVzb2x2ZSA9IGZ1bmN0aW9uKHJlbGF0aXZlKSB7XG4gIHJldHVybiB0aGlzLnJlc29sdmVPYmplY3QodXJsUGFyc2UocmVsYXRpdmUsIGZhbHNlLCB0cnVlKSkuZm9ybWF0KCk7XG59O1xuXG5mdW5jdGlvbiB1cmxSZXNvbHZlT2JqZWN0KHNvdXJjZSwgcmVsYXRpdmUpIHtcbiAgaWYgKCFzb3VyY2UpIHJldHVybiByZWxhdGl2ZTtcbiAgcmV0dXJuIHVybFBhcnNlKHNvdXJjZSwgZmFsc2UsIHRydWUpLnJlc29sdmVPYmplY3QocmVsYXRpdmUpO1xufVxuXG5VcmwucHJvdG90eXBlLnJlc29sdmVPYmplY3QgPSBmdW5jdGlvbihyZWxhdGl2ZSkge1xuICBpZiAoaXNTdHJpbmcocmVsYXRpdmUpKSB7XG4gICAgdmFyIHJlbCA9IG5ldyBVcmwoKTtcbiAgICByZWwucGFyc2UocmVsYXRpdmUsIGZhbHNlLCB0cnVlKTtcbiAgICByZWxhdGl2ZSA9IHJlbDtcbiAgfVxuXG4gIHZhciByZXN1bHQgPSBuZXcgVXJsKCk7XG4gIE9iamVjdC5rZXlzKHRoaXMpLmZvckVhY2goZnVuY3Rpb24oaykge1xuICAgIHJlc3VsdFtrXSA9IHRoaXNba107XG4gIH0sIHRoaXMpO1xuXG4gIC8vIGhhc2ggaXMgYWx3YXlzIG92ZXJyaWRkZW4sIG5vIG1hdHRlciB3aGF0LlxuICAvLyBldmVuIGhyZWY9XCJcIiB3aWxsIHJlbW92ZSBpdC5cbiAgcmVzdWx0Lmhhc2ggPSByZWxhdGl2ZS5oYXNoO1xuXG4gIC8vIGlmIHRoZSByZWxhdGl2ZSB1cmwgaXMgZW1wdHksIHRoZW4gdGhlcmUncyBub3RoaW5nIGxlZnQgdG8gZG8gaGVyZS5cbiAgaWYgKHJlbGF0aXZlLmhyZWYgPT09ICcnKSB7XG4gICAgcmVzdWx0LmhyZWYgPSByZXN1bHQuZm9ybWF0KCk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIC8vIGhyZWZzIGxpa2UgLy9mb28vYmFyIGFsd2F5cyBjdXQgdG8gdGhlIHByb3RvY29sLlxuICBpZiAocmVsYXRpdmUuc2xhc2hlcyAmJiAhcmVsYXRpdmUucHJvdG9jb2wpIHtcbiAgICAvLyB0YWtlIGV2ZXJ5dGhpbmcgZXhjZXB0IHRoZSBwcm90b2NvbCBmcm9tIHJlbGF0aXZlXG4gICAgT2JqZWN0LmtleXMocmVsYXRpdmUpLmZvckVhY2goZnVuY3Rpb24oaykge1xuICAgICAgaWYgKGsgIT09ICdwcm90b2NvbCcpXG4gICAgICAgIHJlc3VsdFtrXSA9IHJlbGF0aXZlW2tdO1xuICAgIH0pO1xuXG4gICAgLy91cmxQYXJzZSBhcHBlbmRzIHRyYWlsaW5nIC8gdG8gdXJscyBsaWtlIGh0dHA6Ly93d3cuZXhhbXBsZS5jb21cbiAgICBpZiAoc2xhc2hlZFByb3RvY29sW3Jlc3VsdC5wcm90b2NvbF0gJiZcbiAgICAgICAgcmVzdWx0Lmhvc3RuYW1lICYmICFyZXN1bHQucGF0aG5hbWUpIHtcbiAgICAgIHJlc3VsdC5wYXRoID0gcmVzdWx0LnBhdGhuYW1lID0gJy8nO1xuICAgIH1cblxuICAgIHJlc3VsdC5ocmVmID0gcmVzdWx0LmZvcm1hdCgpO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICBpZiAocmVsYXRpdmUucHJvdG9jb2wgJiYgcmVsYXRpdmUucHJvdG9jb2wgIT09IHJlc3VsdC5wcm90b2NvbCkge1xuICAgIC8vIGlmIGl0J3MgYSBrbm93biB1cmwgcHJvdG9jb2wsIHRoZW4gY2hhbmdpbmdcbiAgICAvLyB0aGUgcHJvdG9jb2wgZG9lcyB3ZWlyZCB0aGluZ3NcbiAgICAvLyBmaXJzdCwgaWYgaXQncyBub3QgZmlsZTosIHRoZW4gd2UgTVVTVCBoYXZlIGEgaG9zdCxcbiAgICAvLyBhbmQgaWYgdGhlcmUgd2FzIGEgcGF0aFxuICAgIC8vIHRvIGJlZ2luIHdpdGgsIHRoZW4gd2UgTVVTVCBoYXZlIGEgcGF0aC5cbiAgICAvLyBpZiBpdCBpcyBmaWxlOiwgdGhlbiB0aGUgaG9zdCBpcyBkcm9wcGVkLFxuICAgIC8vIGJlY2F1c2UgdGhhdCdzIGtub3duIHRvIGJlIGhvc3RsZXNzLlxuICAgIC8vIGFueXRoaW5nIGVsc2UgaXMgYXNzdW1lZCB0byBiZSBhYnNvbHV0ZS5cbiAgICBpZiAoIXNsYXNoZWRQcm90b2NvbFtyZWxhdGl2ZS5wcm90b2NvbF0pIHtcbiAgICAgIE9iamVjdC5rZXlzKHJlbGF0aXZlKS5mb3JFYWNoKGZ1bmN0aW9uKGspIHtcbiAgICAgICAgcmVzdWx0W2tdID0gcmVsYXRpdmVba107XG4gICAgICB9KTtcbiAgICAgIHJlc3VsdC5ocmVmID0gcmVzdWx0LmZvcm1hdCgpO1xuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICByZXN1bHQucHJvdG9jb2wgPSByZWxhdGl2ZS5wcm90b2NvbDtcbiAgICBpZiAoIXJlbGF0aXZlLmhvc3QgJiYgIWhvc3RsZXNzUHJvdG9jb2xbcmVsYXRpdmUucHJvdG9jb2xdKSB7XG4gICAgICB2YXIgcmVsUGF0aCA9IChyZWxhdGl2ZS5wYXRobmFtZSB8fCAnJykuc3BsaXQoJy8nKTtcbiAgICAgIHdoaWxlIChyZWxQYXRoLmxlbmd0aCAmJiAhKHJlbGF0aXZlLmhvc3QgPSByZWxQYXRoLnNoaWZ0KCkpKTtcbiAgICAgIGlmICghcmVsYXRpdmUuaG9zdCkgcmVsYXRpdmUuaG9zdCA9ICcnO1xuICAgICAgaWYgKCFyZWxhdGl2ZS5ob3N0bmFtZSkgcmVsYXRpdmUuaG9zdG5hbWUgPSAnJztcbiAgICAgIGlmIChyZWxQYXRoWzBdICE9PSAnJykgcmVsUGF0aC51bnNoaWZ0KCcnKTtcbiAgICAgIGlmIChyZWxQYXRoLmxlbmd0aCA8IDIpIHJlbFBhdGgudW5zaGlmdCgnJyk7XG4gICAgICByZXN1bHQucGF0aG5hbWUgPSByZWxQYXRoLmpvaW4oJy8nKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmVzdWx0LnBhdGhuYW1lID0gcmVsYXRpdmUucGF0aG5hbWU7XG4gICAgfVxuICAgIHJlc3VsdC5zZWFyY2ggPSByZWxhdGl2ZS5zZWFyY2g7XG4gICAgcmVzdWx0LnF1ZXJ5ID0gcmVsYXRpdmUucXVlcnk7XG4gICAgcmVzdWx0Lmhvc3QgPSByZWxhdGl2ZS5ob3N0IHx8ICcnO1xuICAgIHJlc3VsdC5hdXRoID0gcmVsYXRpdmUuYXV0aDtcbiAgICByZXN1bHQuaG9zdG5hbWUgPSByZWxhdGl2ZS5ob3N0bmFtZSB8fCByZWxhdGl2ZS5ob3N0O1xuICAgIHJlc3VsdC5wb3J0ID0gcmVsYXRpdmUucG9ydDtcbiAgICAvLyB0byBzdXBwb3J0IGh0dHAucmVxdWVzdFxuICAgIGlmIChyZXN1bHQucGF0aG5hbWUgfHwgcmVzdWx0LnNlYXJjaCkge1xuICAgICAgdmFyIHAgPSByZXN1bHQucGF0aG5hbWUgfHwgJyc7XG4gICAgICB2YXIgcyA9IHJlc3VsdC5zZWFyY2ggfHwgJyc7XG4gICAgICByZXN1bHQucGF0aCA9IHAgKyBzO1xuICAgIH1cbiAgICByZXN1bHQuc2xhc2hlcyA9IHJlc3VsdC5zbGFzaGVzIHx8IHJlbGF0aXZlLnNsYXNoZXM7XG4gICAgcmVzdWx0LmhyZWYgPSByZXN1bHQuZm9ybWF0KCk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIHZhciBpc1NvdXJjZUFicyA9IChyZXN1bHQucGF0aG5hbWUgJiYgcmVzdWx0LnBhdGhuYW1lLmNoYXJBdCgwKSA9PT0gJy8nKSxcbiAgICAgIGlzUmVsQWJzID0gKFxuICAgICAgICAgIHJlbGF0aXZlLmhvc3QgfHxcbiAgICAgICAgICByZWxhdGl2ZS5wYXRobmFtZSAmJiByZWxhdGl2ZS5wYXRobmFtZS5jaGFyQXQoMCkgPT09ICcvJ1xuICAgICAgKSxcbiAgICAgIG11c3RFbmRBYnMgPSAoaXNSZWxBYnMgfHwgaXNTb3VyY2VBYnMgfHxcbiAgICAgICAgICAgICAgICAgICAgKHJlc3VsdC5ob3N0ICYmIHJlbGF0aXZlLnBhdGhuYW1lKSksXG4gICAgICByZW1vdmVBbGxEb3RzID0gbXVzdEVuZEFicyxcbiAgICAgIHNyY1BhdGggPSByZXN1bHQucGF0aG5hbWUgJiYgcmVzdWx0LnBhdGhuYW1lLnNwbGl0KCcvJykgfHwgW10sXG4gICAgICByZWxQYXRoID0gcmVsYXRpdmUucGF0aG5hbWUgJiYgcmVsYXRpdmUucGF0aG5hbWUuc3BsaXQoJy8nKSB8fCBbXSxcbiAgICAgIHBzeWNob3RpYyA9IHJlc3VsdC5wcm90b2NvbCAmJiAhc2xhc2hlZFByb3RvY29sW3Jlc3VsdC5wcm90b2NvbF07XG5cbiAgLy8gaWYgdGhlIHVybCBpcyBhIG5vbi1zbGFzaGVkIHVybCwgdGhlbiByZWxhdGl2ZVxuICAvLyBsaW5rcyBsaWtlIC4uLy4uIHNob3VsZCBiZSBhYmxlXG4gIC8vIHRvIGNyYXdsIHVwIHRvIHRoZSBob3N0bmFtZSwgYXMgd2VsbC4gIFRoaXMgaXMgc3RyYW5nZS5cbiAgLy8gcmVzdWx0LnByb3RvY29sIGhhcyBhbHJlYWR5IGJlZW4gc2V0IGJ5IG5vdy5cbiAgLy8gTGF0ZXIgb24sIHB1dCB0aGUgZmlyc3QgcGF0aCBwYXJ0IGludG8gdGhlIGhvc3QgZmllbGQuXG4gIGlmIChwc3ljaG90aWMpIHtcbiAgICByZXN1bHQuaG9zdG5hbWUgPSAnJztcbiAgICByZXN1bHQucG9ydCA9IG51bGw7XG4gICAgaWYgKHJlc3VsdC5ob3N0KSB7XG4gICAgICBpZiAoc3JjUGF0aFswXSA9PT0gJycpIHNyY1BhdGhbMF0gPSByZXN1bHQuaG9zdDtcbiAgICAgIGVsc2Ugc3JjUGF0aC51bnNoaWZ0KHJlc3VsdC5ob3N0KTtcbiAgICB9XG4gICAgcmVzdWx0Lmhvc3QgPSAnJztcbiAgICBpZiAocmVsYXRpdmUucHJvdG9jb2wpIHtcbiAgICAgIHJlbGF0aXZlLmhvc3RuYW1lID0gbnVsbDtcbiAgICAgIHJlbGF0aXZlLnBvcnQgPSBudWxsO1xuICAgICAgaWYgKHJlbGF0aXZlLmhvc3QpIHtcbiAgICAgICAgaWYgKHJlbFBhdGhbMF0gPT09ICcnKSByZWxQYXRoWzBdID0gcmVsYXRpdmUuaG9zdDtcbiAgICAgICAgZWxzZSByZWxQYXRoLnVuc2hpZnQocmVsYXRpdmUuaG9zdCk7XG4gICAgICB9XG4gICAgICByZWxhdGl2ZS5ob3N0ID0gbnVsbDtcbiAgICB9XG4gICAgbXVzdEVuZEFicyA9IG11c3RFbmRBYnMgJiYgKHJlbFBhdGhbMF0gPT09ICcnIHx8IHNyY1BhdGhbMF0gPT09ICcnKTtcbiAgfVxuXG4gIGlmIChpc1JlbEFicykge1xuICAgIC8vIGl0J3MgYWJzb2x1dGUuXG4gICAgcmVzdWx0Lmhvc3QgPSAocmVsYXRpdmUuaG9zdCB8fCByZWxhdGl2ZS5ob3N0ID09PSAnJykgP1xuICAgICAgICAgICAgICAgICAgcmVsYXRpdmUuaG9zdCA6IHJlc3VsdC5ob3N0O1xuICAgIHJlc3VsdC5ob3N0bmFtZSA9IChyZWxhdGl2ZS5ob3N0bmFtZSB8fCByZWxhdGl2ZS5ob3N0bmFtZSA9PT0gJycpID9cbiAgICAgICAgICAgICAgICAgICAgICByZWxhdGl2ZS5ob3N0bmFtZSA6IHJlc3VsdC5ob3N0bmFtZTtcbiAgICByZXN1bHQuc2VhcmNoID0gcmVsYXRpdmUuc2VhcmNoO1xuICAgIHJlc3VsdC5xdWVyeSA9IHJlbGF0aXZlLnF1ZXJ5O1xuICAgIHNyY1BhdGggPSByZWxQYXRoO1xuICAgIC8vIGZhbGwgdGhyb3VnaCB0byB0aGUgZG90LWhhbmRsaW5nIGJlbG93LlxuICB9IGVsc2UgaWYgKHJlbFBhdGgubGVuZ3RoKSB7XG4gICAgLy8gaXQncyByZWxhdGl2ZVxuICAgIC8vIHRocm93IGF3YXkgdGhlIGV4aXN0aW5nIGZpbGUsIGFuZCB0YWtlIHRoZSBuZXcgcGF0aCBpbnN0ZWFkLlxuICAgIGlmICghc3JjUGF0aCkgc3JjUGF0aCA9IFtdO1xuICAgIHNyY1BhdGgucG9wKCk7XG4gICAgc3JjUGF0aCA9IHNyY1BhdGguY29uY2F0KHJlbFBhdGgpO1xuICAgIHJlc3VsdC5zZWFyY2ggPSByZWxhdGl2ZS5zZWFyY2g7XG4gICAgcmVzdWx0LnF1ZXJ5ID0gcmVsYXRpdmUucXVlcnk7XG4gIH0gZWxzZSBpZiAoIWlzTnVsbE9yVW5kZWZpbmVkKHJlbGF0aXZlLnNlYXJjaCkpIHtcbiAgICAvLyBqdXN0IHB1bGwgb3V0IHRoZSBzZWFyY2guXG4gICAgLy8gbGlrZSBocmVmPSc/Zm9vJy5cbiAgICAvLyBQdXQgdGhpcyBhZnRlciB0aGUgb3RoZXIgdHdvIGNhc2VzIGJlY2F1c2UgaXQgc2ltcGxpZmllcyB0aGUgYm9vbGVhbnNcbiAgICBpZiAocHN5Y2hvdGljKSB7XG4gICAgICByZXN1bHQuaG9zdG5hbWUgPSByZXN1bHQuaG9zdCA9IHNyY1BhdGguc2hpZnQoKTtcbiAgICAgIC8vb2NjYXRpb25hbHkgdGhlIGF1dGggY2FuIGdldCBzdHVjayBvbmx5IGluIGhvc3RcbiAgICAgIC8vdGhpcyBlc3BlY2lhbHkgaGFwcGVucyBpbiBjYXNlcyBsaWtlXG4gICAgICAvL3VybC5yZXNvbHZlT2JqZWN0KCdtYWlsdG86bG9jYWwxQGRvbWFpbjEnLCAnbG9jYWwyQGRvbWFpbjInKVxuICAgICAgdmFyIGF1dGhJbkhvc3QgPSByZXN1bHQuaG9zdCAmJiByZXN1bHQuaG9zdC5pbmRleE9mKCdAJykgPiAwID9cbiAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0Lmhvc3Quc3BsaXQoJ0AnKSA6IGZhbHNlO1xuICAgICAgaWYgKGF1dGhJbkhvc3QpIHtcbiAgICAgICAgcmVzdWx0LmF1dGggPSBhdXRoSW5Ib3N0LnNoaWZ0KCk7XG4gICAgICAgIHJlc3VsdC5ob3N0ID0gcmVzdWx0Lmhvc3RuYW1lID0gYXV0aEluSG9zdC5zaGlmdCgpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXN1bHQuc2VhcmNoID0gcmVsYXRpdmUuc2VhcmNoO1xuICAgIHJlc3VsdC5xdWVyeSA9IHJlbGF0aXZlLnF1ZXJ5O1xuICAgIC8vdG8gc3VwcG9ydCBodHRwLnJlcXVlc3RcbiAgICBpZiAoIWlzTnVsbChyZXN1bHQucGF0aG5hbWUpIHx8ICFpc051bGwocmVzdWx0LnNlYXJjaCkpIHtcbiAgICAgIHJlc3VsdC5wYXRoID0gKHJlc3VsdC5wYXRobmFtZSA/IHJlc3VsdC5wYXRobmFtZSA6ICcnKSArXG4gICAgICAgICAgICAgICAgICAgIChyZXN1bHQuc2VhcmNoID8gcmVzdWx0LnNlYXJjaCA6ICcnKTtcbiAgICB9XG4gICAgcmVzdWx0LmhyZWYgPSByZXN1bHQuZm9ybWF0KCk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIGlmICghc3JjUGF0aC5sZW5ndGgpIHtcbiAgICAvLyBubyBwYXRoIGF0IGFsbC4gIGVhc3kuXG4gICAgLy8gd2UndmUgYWxyZWFkeSBoYW5kbGVkIHRoZSBvdGhlciBzdHVmZiBhYm92ZS5cbiAgICByZXN1bHQucGF0aG5hbWUgPSBudWxsO1xuICAgIC8vdG8gc3VwcG9ydCBodHRwLnJlcXVlc3RcbiAgICBpZiAocmVzdWx0LnNlYXJjaCkge1xuICAgICAgcmVzdWx0LnBhdGggPSAnLycgKyByZXN1bHQuc2VhcmNoO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXN1bHQucGF0aCA9IG51bGw7XG4gICAgfVxuICAgIHJlc3VsdC5ocmVmID0gcmVzdWx0LmZvcm1hdCgpO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICAvLyBpZiBhIHVybCBFTkRzIGluIC4gb3IgLi4sIHRoZW4gaXQgbXVzdCBnZXQgYSB0cmFpbGluZyBzbGFzaC5cbiAgLy8gaG93ZXZlciwgaWYgaXQgZW5kcyBpbiBhbnl0aGluZyBlbHNlIG5vbi1zbGFzaHksXG4gIC8vIHRoZW4gaXQgbXVzdCBOT1QgZ2V0IGEgdHJhaWxpbmcgc2xhc2guXG4gIHZhciBsYXN0ID0gc3JjUGF0aC5zbGljZSgtMSlbMF07XG4gIHZhciBoYXNUcmFpbGluZ1NsYXNoID0gKFxuICAgICAgKHJlc3VsdC5ob3N0IHx8IHJlbGF0aXZlLmhvc3QpICYmIChsYXN0ID09PSAnLicgfHwgbGFzdCA9PT0gJy4uJykgfHxcbiAgICAgIGxhc3QgPT09ICcnKTtcblxuICAvLyBzdHJpcCBzaW5nbGUgZG90cywgcmVzb2x2ZSBkb3VibGUgZG90cyB0byBwYXJlbnQgZGlyXG4gIC8vIGlmIHRoZSBwYXRoIHRyaWVzIHRvIGdvIGFib3ZlIHRoZSByb290LCBgdXBgIGVuZHMgdXAgPiAwXG4gIHZhciB1cCA9IDA7XG4gIGZvciAodmFyIGkgPSBzcmNQYXRoLmxlbmd0aDsgaSA+PSAwOyBpLS0pIHtcbiAgICBsYXN0ID0gc3JjUGF0aFtpXTtcbiAgICBpZiAobGFzdCA9PSAnLicpIHtcbiAgICAgIHNyY1BhdGguc3BsaWNlKGksIDEpO1xuICAgIH0gZWxzZSBpZiAobGFzdCA9PT0gJy4uJykge1xuICAgICAgc3JjUGF0aC5zcGxpY2UoaSwgMSk7XG4gICAgICB1cCsrO1xuICAgIH0gZWxzZSBpZiAodXApIHtcbiAgICAgIHNyY1BhdGguc3BsaWNlKGksIDEpO1xuICAgICAgdXAtLTtcbiAgICB9XG4gIH1cblxuICAvLyBpZiB0aGUgcGF0aCBpcyBhbGxvd2VkIHRvIGdvIGFib3ZlIHRoZSByb290LCByZXN0b3JlIGxlYWRpbmcgLi5zXG4gIGlmICghbXVzdEVuZEFicyAmJiAhcmVtb3ZlQWxsRG90cykge1xuICAgIGZvciAoOyB1cC0tOyB1cCkge1xuICAgICAgc3JjUGF0aC51bnNoaWZ0KCcuLicpO1xuICAgIH1cbiAgfVxuXG4gIGlmIChtdXN0RW5kQWJzICYmIHNyY1BhdGhbMF0gIT09ICcnICYmXG4gICAgICAoIXNyY1BhdGhbMF0gfHwgc3JjUGF0aFswXS5jaGFyQXQoMCkgIT09ICcvJykpIHtcbiAgICBzcmNQYXRoLnVuc2hpZnQoJycpO1xuICB9XG5cbiAgaWYgKGhhc1RyYWlsaW5nU2xhc2ggJiYgKHNyY1BhdGguam9pbignLycpLnN1YnN0cigtMSkgIT09ICcvJykpIHtcbiAgICBzcmNQYXRoLnB1c2goJycpO1xuICB9XG5cbiAgdmFyIGlzQWJzb2x1dGUgPSBzcmNQYXRoWzBdID09PSAnJyB8fFxuICAgICAgKHNyY1BhdGhbMF0gJiYgc3JjUGF0aFswXS5jaGFyQXQoMCkgPT09ICcvJyk7XG5cbiAgLy8gcHV0IHRoZSBob3N0IGJhY2tcbiAgaWYgKHBzeWNob3RpYykge1xuICAgIHJlc3VsdC5ob3N0bmFtZSA9IHJlc3VsdC5ob3N0ID0gaXNBYnNvbHV0ZSA/ICcnIDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyY1BhdGgubGVuZ3RoID8gc3JjUGF0aC5zaGlmdCgpIDogJyc7XG4gICAgLy9vY2NhdGlvbmFseSB0aGUgYXV0aCBjYW4gZ2V0IHN0dWNrIG9ubHkgaW4gaG9zdFxuICAgIC8vdGhpcyBlc3BlY2lhbHkgaGFwcGVucyBpbiBjYXNlcyBsaWtlXG4gICAgLy91cmwucmVzb2x2ZU9iamVjdCgnbWFpbHRvOmxvY2FsMUBkb21haW4xJywgJ2xvY2FsMkBkb21haW4yJylcbiAgICB2YXIgYXV0aEluSG9zdCA9IHJlc3VsdC5ob3N0ICYmIHJlc3VsdC5ob3N0LmluZGV4T2YoJ0AnKSA+IDAgP1xuICAgICAgICAgICAgICAgICAgICAgcmVzdWx0Lmhvc3Quc3BsaXQoJ0AnKSA6IGZhbHNlO1xuICAgIGlmIChhdXRoSW5Ib3N0KSB7XG4gICAgICByZXN1bHQuYXV0aCA9IGF1dGhJbkhvc3Quc2hpZnQoKTtcbiAgICAgIHJlc3VsdC5ob3N0ID0gcmVzdWx0Lmhvc3RuYW1lID0gYXV0aEluSG9zdC5zaGlmdCgpO1xuICAgIH1cbiAgfVxuXG4gIG11c3RFbmRBYnMgPSBtdXN0RW5kQWJzIHx8IChyZXN1bHQuaG9zdCAmJiBzcmNQYXRoLmxlbmd0aCk7XG5cbiAgaWYgKG11c3RFbmRBYnMgJiYgIWlzQWJzb2x1dGUpIHtcbiAgICBzcmNQYXRoLnVuc2hpZnQoJycpO1xuICB9XG5cbiAgaWYgKCFzcmNQYXRoLmxlbmd0aCkge1xuICAgIHJlc3VsdC5wYXRobmFtZSA9IG51bGw7XG4gICAgcmVzdWx0LnBhdGggPSBudWxsO1xuICB9IGVsc2Uge1xuICAgIHJlc3VsdC5wYXRobmFtZSA9IHNyY1BhdGguam9pbignLycpO1xuICB9XG5cbiAgLy90byBzdXBwb3J0IHJlcXVlc3QuaHR0cFxuICBpZiAoIWlzTnVsbChyZXN1bHQucGF0aG5hbWUpIHx8ICFpc051bGwocmVzdWx0LnNlYXJjaCkpIHtcbiAgICByZXN1bHQucGF0aCA9IChyZXN1bHQucGF0aG5hbWUgPyByZXN1bHQucGF0aG5hbWUgOiAnJykgK1xuICAgICAgICAgICAgICAgICAgKHJlc3VsdC5zZWFyY2ggPyByZXN1bHQuc2VhcmNoIDogJycpO1xuICB9XG4gIHJlc3VsdC5hdXRoID0gcmVsYXRpdmUuYXV0aCB8fCByZXN1bHQuYXV0aDtcbiAgcmVzdWx0LnNsYXNoZXMgPSByZXN1bHQuc2xhc2hlcyB8fCByZWxhdGl2ZS5zbGFzaGVzO1xuICByZXN1bHQuaHJlZiA9IHJlc3VsdC5mb3JtYXQoKTtcbiAgcmV0dXJuIHJlc3VsdDtcbn07XG5cblVybC5wcm90b3R5cGUucGFyc2VIb3N0ID0gZnVuY3Rpb24oKSB7XG4gIHZhciBob3N0ID0gdGhpcy5ob3N0O1xuICB2YXIgcG9ydCA9IHBvcnRQYXR0ZXJuLmV4ZWMoaG9zdCk7XG4gIGlmIChwb3J0KSB7XG4gICAgcG9ydCA9IHBvcnRbMF07XG4gICAgaWYgKHBvcnQgIT09ICc6Jykge1xuICAgICAgdGhpcy5wb3J0ID0gcG9ydC5zdWJzdHIoMSk7XG4gICAgfVxuICAgIGhvc3QgPSBob3N0LnN1YnN0cigwLCBob3N0Lmxlbmd0aCAtIHBvcnQubGVuZ3RoKTtcbiAgfVxuICBpZiAoaG9zdCkgdGhpcy5ob3N0bmFtZSA9IGhvc3Q7XG59O1xuXG5mdW5jdGlvbiBpc1N0cmluZyhhcmcpIHtcbiAgcmV0dXJuIHR5cGVvZiBhcmcgPT09IFwic3RyaW5nXCI7XG59XG5cbmZ1bmN0aW9uIGlzT2JqZWN0KGFyZykge1xuICByZXR1cm4gdHlwZW9mIGFyZyA9PT0gJ29iamVjdCcgJiYgYXJnICE9PSBudWxsO1xufVxuXG5mdW5jdGlvbiBpc051bGwoYXJnKSB7XG4gIHJldHVybiBhcmcgPT09IG51bGw7XG59XG5mdW5jdGlvbiBpc051bGxPclVuZGVmaW5lZChhcmcpIHtcbiAgcmV0dXJuICBhcmcgPT0gbnVsbDtcbn1cbiIsIid1c2Ugc3RyaWN0JztcblxubW9kdWxlLmV4cG9ydHMgPSBlYXJjdXQ7XG5cbmZ1bmN0aW9uIGVhcmN1dChkYXRhLCBob2xlSW5kaWNlcywgZGltKSB7XG5cbiAgICBkaW0gPSBkaW0gfHwgMjtcblxuICAgIHZhciBoYXNIb2xlcyA9IGhvbGVJbmRpY2VzICYmIGhvbGVJbmRpY2VzLmxlbmd0aCxcbiAgICAgICAgb3V0ZXJMZW4gPSBoYXNIb2xlcyA/IGhvbGVJbmRpY2VzWzBdICogZGltIDogZGF0YS5sZW5ndGgsXG4gICAgICAgIG91dGVyTm9kZSA9IGxpbmtlZExpc3QoZGF0YSwgMCwgb3V0ZXJMZW4sIGRpbSwgdHJ1ZSksXG4gICAgICAgIHRyaWFuZ2xlcyA9IFtdO1xuXG4gICAgaWYgKCFvdXRlck5vZGUpIHJldHVybiB0cmlhbmdsZXM7XG5cbiAgICB2YXIgbWluWCwgbWluWSwgbWF4WCwgbWF4WSwgeCwgeSwgc2l6ZTtcblxuICAgIGlmIChoYXNIb2xlcykgb3V0ZXJOb2RlID0gZWxpbWluYXRlSG9sZXMoZGF0YSwgaG9sZUluZGljZXMsIG91dGVyTm9kZSwgZGltKTtcblxuICAgIC8vIGlmIHRoZSBzaGFwZSBpcyBub3QgdG9vIHNpbXBsZSwgd2UnbGwgdXNlIHotb3JkZXIgY3VydmUgaGFzaCBsYXRlcjsgY2FsY3VsYXRlIHBvbHlnb24gYmJveFxuICAgIGlmIChkYXRhLmxlbmd0aCA+IDgwICogZGltKSB7XG4gICAgICAgIG1pblggPSBtYXhYID0gZGF0YVswXTtcbiAgICAgICAgbWluWSA9IG1heFkgPSBkYXRhWzFdO1xuXG4gICAgICAgIGZvciAodmFyIGkgPSBkaW07IGkgPCBvdXRlckxlbjsgaSArPSBkaW0pIHtcbiAgICAgICAgICAgIHggPSBkYXRhW2ldO1xuICAgICAgICAgICAgeSA9IGRhdGFbaSArIDFdO1xuICAgICAgICAgICAgaWYgKHggPCBtaW5YKSBtaW5YID0geDtcbiAgICAgICAgICAgIGlmICh5IDwgbWluWSkgbWluWSA9IHk7XG4gICAgICAgICAgICBpZiAoeCA+IG1heFgpIG1heFggPSB4O1xuICAgICAgICAgICAgaWYgKHkgPiBtYXhZKSBtYXhZID0geTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIG1pblgsIG1pblkgYW5kIHNpemUgYXJlIGxhdGVyIHVzZWQgdG8gdHJhbnNmb3JtIGNvb3JkcyBpbnRvIGludGVnZXJzIGZvciB6LW9yZGVyIGNhbGN1bGF0aW9uXG4gICAgICAgIHNpemUgPSBNYXRoLm1heChtYXhYIC0gbWluWCwgbWF4WSAtIG1pblkpO1xuICAgIH1cblxuICAgIGVhcmN1dExpbmtlZChvdXRlck5vZGUsIHRyaWFuZ2xlcywgZGltLCBtaW5YLCBtaW5ZLCBzaXplKTtcblxuICAgIHJldHVybiB0cmlhbmdsZXM7XG59XG5cbi8vIGNyZWF0ZSBhIGNpcmN1bGFyIGRvdWJseSBsaW5rZWQgbGlzdCBmcm9tIHBvbHlnb24gcG9pbnRzIGluIHRoZSBzcGVjaWZpZWQgd2luZGluZyBvcmRlclxuZnVuY3Rpb24gbGlua2VkTGlzdChkYXRhLCBzdGFydCwgZW5kLCBkaW0sIGNsb2Nrd2lzZSkge1xuICAgIHZhciBzdW0gPSAwLFxuICAgICAgICBpLCBqLCBsYXN0O1xuXG4gICAgLy8gY2FsY3VsYXRlIG9yaWdpbmFsIHdpbmRpbmcgb3JkZXIgb2YgYSBwb2x5Z29uIHJpbmdcbiAgICBmb3IgKGkgPSBzdGFydCwgaiA9IGVuZCAtIGRpbTsgaSA8IGVuZDsgaSArPSBkaW0pIHtcbiAgICAgICAgc3VtICs9IChkYXRhW2pdIC0gZGF0YVtpXSkgKiAoZGF0YVtpICsgMV0gKyBkYXRhW2ogKyAxXSk7XG4gICAgICAgIGogPSBpO1xuICAgIH1cblxuICAgIC8vIGxpbmsgcG9pbnRzIGludG8gY2lyY3VsYXIgZG91Ymx5LWxpbmtlZCBsaXN0IGluIHRoZSBzcGVjaWZpZWQgd2luZGluZyBvcmRlclxuICAgIGlmIChjbG9ja3dpc2UgPT09IChzdW0gPiAwKSkge1xuICAgICAgICBmb3IgKGkgPSBzdGFydDsgaSA8IGVuZDsgaSArPSBkaW0pIGxhc3QgPSBpbnNlcnROb2RlKGksIGRhdGFbaV0sIGRhdGFbaSArIDFdLCBsYXN0KTtcbiAgICB9IGVsc2Uge1xuICAgICAgICBmb3IgKGkgPSBlbmQgLSBkaW07IGkgPj0gc3RhcnQ7IGkgLT0gZGltKSBsYXN0ID0gaW5zZXJ0Tm9kZShpLCBkYXRhW2ldLCBkYXRhW2kgKyAxXSwgbGFzdCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGxhc3Q7XG59XG5cbi8vIGVsaW1pbmF0ZSBjb2xpbmVhciBvciBkdXBsaWNhdGUgcG9pbnRzXG5mdW5jdGlvbiBmaWx0ZXJQb2ludHMoc3RhcnQsIGVuZCkge1xuICAgIGlmICghc3RhcnQpIHJldHVybiBzdGFydDtcbiAgICBpZiAoIWVuZCkgZW5kID0gc3RhcnQ7XG5cbiAgICB2YXIgcCA9IHN0YXJ0LFxuICAgICAgICBhZ2FpbjtcbiAgICBkbyB7XG4gICAgICAgIGFnYWluID0gZmFsc2U7XG5cbiAgICAgICAgaWYgKCFwLnN0ZWluZXIgJiYgKGVxdWFscyhwLCBwLm5leHQpIHx8IGFyZWEocC5wcmV2LCBwLCBwLm5leHQpID09PSAwKSkge1xuICAgICAgICAgICAgcmVtb3ZlTm9kZShwKTtcbiAgICAgICAgICAgIHAgPSBlbmQgPSBwLnByZXY7XG4gICAgICAgICAgICBpZiAocCA9PT0gcC5uZXh0KSByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIGFnYWluID0gdHJ1ZTtcblxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcCA9IHAubmV4dDtcbiAgICAgICAgfVxuICAgIH0gd2hpbGUgKGFnYWluIHx8IHAgIT09IGVuZCk7XG5cbiAgICByZXR1cm4gZW5kO1xufVxuXG4vLyBtYWluIGVhciBzbGljaW5nIGxvb3Agd2hpY2ggdHJpYW5ndWxhdGVzIGEgcG9seWdvbiAoZ2l2ZW4gYXMgYSBsaW5rZWQgbGlzdClcbmZ1bmN0aW9uIGVhcmN1dExpbmtlZChlYXIsIHRyaWFuZ2xlcywgZGltLCBtaW5YLCBtaW5ZLCBzaXplLCBwYXNzKSB7XG4gICAgaWYgKCFlYXIpIHJldHVybjtcblxuICAgIC8vIGludGVybGluayBwb2x5Z29uIG5vZGVzIGluIHotb3JkZXJcbiAgICBpZiAoIXBhc3MgJiYgc2l6ZSkgaW5kZXhDdXJ2ZShlYXIsIG1pblgsIG1pblksIHNpemUpO1xuXG4gICAgdmFyIHN0b3AgPSBlYXIsXG4gICAgICAgIHByZXYsIG5leHQ7XG5cbiAgICAvLyBpdGVyYXRlIHRocm91Z2ggZWFycywgc2xpY2luZyB0aGVtIG9uZSBieSBvbmVcbiAgICB3aGlsZSAoZWFyLnByZXYgIT09IGVhci5uZXh0KSB7XG4gICAgICAgIHByZXYgPSBlYXIucHJldjtcbiAgICAgICAgbmV4dCA9IGVhci5uZXh0O1xuXG4gICAgICAgIGlmIChzaXplID8gaXNFYXJIYXNoZWQoZWFyLCBtaW5YLCBtaW5ZLCBzaXplKSA6IGlzRWFyKGVhcikpIHtcbiAgICAgICAgICAgIC8vIGN1dCBvZmYgdGhlIHRyaWFuZ2xlXG4gICAgICAgICAgICB0cmlhbmdsZXMucHVzaChwcmV2LmkgLyBkaW0pO1xuICAgICAgICAgICAgdHJpYW5nbGVzLnB1c2goZWFyLmkgLyBkaW0pO1xuICAgICAgICAgICAgdHJpYW5nbGVzLnB1c2gobmV4dC5pIC8gZGltKTtcblxuICAgICAgICAgICAgcmVtb3ZlTm9kZShlYXIpO1xuXG4gICAgICAgICAgICAvLyBza2lwcGluZyB0aGUgbmV4dCB2ZXJ0aWNlIGxlYWRzIHRvIGxlc3Mgc2xpdmVyIHRyaWFuZ2xlc1xuICAgICAgICAgICAgZWFyID0gbmV4dC5uZXh0O1xuICAgICAgICAgICAgc3RvcCA9IG5leHQubmV4dDtcblxuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICBlYXIgPSBuZXh0O1xuXG4gICAgICAgIC8vIGlmIHdlIGxvb3BlZCB0aHJvdWdoIHRoZSB3aG9sZSByZW1haW5pbmcgcG9seWdvbiBhbmQgY2FuJ3QgZmluZCBhbnkgbW9yZSBlYXJzXG4gICAgICAgIGlmIChlYXIgPT09IHN0b3ApIHtcbiAgICAgICAgICAgIC8vIHRyeSBmaWx0ZXJpbmcgcG9pbnRzIGFuZCBzbGljaW5nIGFnYWluXG4gICAgICAgICAgICBpZiAoIXBhc3MpIHtcbiAgICAgICAgICAgICAgICBlYXJjdXRMaW5rZWQoZmlsdGVyUG9pbnRzKGVhciksIHRyaWFuZ2xlcywgZGltLCBtaW5YLCBtaW5ZLCBzaXplLCAxKTtcblxuICAgICAgICAgICAgLy8gaWYgdGhpcyBkaWRuJ3Qgd29yaywgdHJ5IGN1cmluZyBhbGwgc21hbGwgc2VsZi1pbnRlcnNlY3Rpb25zIGxvY2FsbHlcbiAgICAgICAgICAgIH0gZWxzZSBpZiAocGFzcyA9PT0gMSkge1xuICAgICAgICAgICAgICAgIGVhciA9IGN1cmVMb2NhbEludGVyc2VjdGlvbnMoZWFyLCB0cmlhbmdsZXMsIGRpbSk7XG4gICAgICAgICAgICAgICAgZWFyY3V0TGlua2VkKGVhciwgdHJpYW5nbGVzLCBkaW0sIG1pblgsIG1pblksIHNpemUsIDIpO1xuXG4gICAgICAgICAgICAvLyBhcyBhIGxhc3QgcmVzb3J0LCB0cnkgc3BsaXR0aW5nIHRoZSByZW1haW5pbmcgcG9seWdvbiBpbnRvIHR3b1xuICAgICAgICAgICAgfSBlbHNlIGlmIChwYXNzID09PSAyKSB7XG4gICAgICAgICAgICAgICAgc3BsaXRFYXJjdXQoZWFyLCB0cmlhbmdsZXMsIGRpbSwgbWluWCwgbWluWSwgc2l6ZSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgfVxufVxuXG4vLyBjaGVjayB3aGV0aGVyIGEgcG9seWdvbiBub2RlIGZvcm1zIGEgdmFsaWQgZWFyIHdpdGggYWRqYWNlbnQgbm9kZXNcbmZ1bmN0aW9uIGlzRWFyKGVhcikge1xuICAgIHZhciBhID0gZWFyLnByZXYsXG4gICAgICAgIGIgPSBlYXIsXG4gICAgICAgIGMgPSBlYXIubmV4dDtcblxuICAgIGlmIChhcmVhKGEsIGIsIGMpID49IDApIHJldHVybiBmYWxzZTsgLy8gcmVmbGV4LCBjYW4ndCBiZSBhbiBlYXJcblxuICAgIC8vIG5vdyBtYWtlIHN1cmUgd2UgZG9uJ3QgaGF2ZSBvdGhlciBwb2ludHMgaW5zaWRlIHRoZSBwb3RlbnRpYWwgZWFyXG4gICAgdmFyIHAgPSBlYXIubmV4dC5uZXh0O1xuXG4gICAgd2hpbGUgKHAgIT09IGVhci5wcmV2KSB7XG4gICAgICAgIGlmIChwb2ludEluVHJpYW5nbGUoYS54LCBhLnksIGIueCwgYi55LCBjLngsIGMueSwgcC54LCBwLnkpICYmXG4gICAgICAgICAgICBhcmVhKHAucHJldiwgcCwgcC5uZXh0KSA+PSAwKSByZXR1cm4gZmFsc2U7XG4gICAgICAgIHAgPSBwLm5leHQ7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRydWU7XG59XG5cbmZ1bmN0aW9uIGlzRWFySGFzaGVkKGVhciwgbWluWCwgbWluWSwgc2l6ZSkge1xuICAgIHZhciBhID0gZWFyLnByZXYsXG4gICAgICAgIGIgPSBlYXIsXG4gICAgICAgIGMgPSBlYXIubmV4dDtcblxuICAgIGlmIChhcmVhKGEsIGIsIGMpID49IDApIHJldHVybiBmYWxzZTsgLy8gcmVmbGV4LCBjYW4ndCBiZSBhbiBlYXJcblxuICAgIC8vIHRyaWFuZ2xlIGJib3g7IG1pbiAmIG1heCBhcmUgY2FsY3VsYXRlZCBsaWtlIHRoaXMgZm9yIHNwZWVkXG4gICAgdmFyIG1pblRYID0gYS54IDwgYi54ID8gKGEueCA8IGMueCA/IGEueCA6IGMueCkgOiAoYi54IDwgYy54ID8gYi54IDogYy54KSxcbiAgICAgICAgbWluVFkgPSBhLnkgPCBiLnkgPyAoYS55IDwgYy55ID8gYS55IDogYy55KSA6IChiLnkgPCBjLnkgPyBiLnkgOiBjLnkpLFxuICAgICAgICBtYXhUWCA9IGEueCA+IGIueCA/IChhLnggPiBjLnggPyBhLnggOiBjLngpIDogKGIueCA+IGMueCA/IGIueCA6IGMueCksXG4gICAgICAgIG1heFRZID0gYS55ID4gYi55ID8gKGEueSA+IGMueSA/IGEueSA6IGMueSkgOiAoYi55ID4gYy55ID8gYi55IDogYy55KTtcblxuICAgIC8vIHotb3JkZXIgcmFuZ2UgZm9yIHRoZSBjdXJyZW50IHRyaWFuZ2xlIGJib3g7XG4gICAgdmFyIG1pblogPSB6T3JkZXIobWluVFgsIG1pblRZLCBtaW5YLCBtaW5ZLCBzaXplKSxcbiAgICAgICAgbWF4WiA9IHpPcmRlcihtYXhUWCwgbWF4VFksIG1pblgsIG1pblksIHNpemUpO1xuXG4gICAgLy8gZmlyc3QgbG9vayBmb3IgcG9pbnRzIGluc2lkZSB0aGUgdHJpYW5nbGUgaW4gaW5jcmVhc2luZyB6LW9yZGVyXG4gICAgdmFyIHAgPSBlYXIubmV4dFo7XG5cbiAgICB3aGlsZSAocCAmJiBwLnogPD0gbWF4Wikge1xuICAgICAgICBpZiAocCAhPT0gZWFyLnByZXYgJiYgcCAhPT0gZWFyLm5leHQgJiZcbiAgICAgICAgICAgIHBvaW50SW5UcmlhbmdsZShhLngsIGEueSwgYi54LCBiLnksIGMueCwgYy55LCBwLngsIHAueSkgJiZcbiAgICAgICAgICAgIGFyZWEocC5wcmV2LCBwLCBwLm5leHQpID49IDApIHJldHVybiBmYWxzZTtcbiAgICAgICAgcCA9IHAubmV4dFo7XG4gICAgfVxuXG4gICAgLy8gdGhlbiBsb29rIGZvciBwb2ludHMgaW4gZGVjcmVhc2luZyB6LW9yZGVyXG4gICAgcCA9IGVhci5wcmV2WjtcblxuICAgIHdoaWxlIChwICYmIHAueiA+PSBtaW5aKSB7XG4gICAgICAgIGlmIChwICE9PSBlYXIucHJldiAmJiBwICE9PSBlYXIubmV4dCAmJlxuICAgICAgICAgICAgcG9pbnRJblRyaWFuZ2xlKGEueCwgYS55LCBiLngsIGIueSwgYy54LCBjLnksIHAueCwgcC55KSAmJlxuICAgICAgICAgICAgYXJlYShwLnByZXYsIHAsIHAubmV4dCkgPj0gMCkgcmV0dXJuIGZhbHNlO1xuICAgICAgICBwID0gcC5wcmV2WjtcbiAgICB9XG5cbiAgICByZXR1cm4gdHJ1ZTtcbn1cblxuLy8gZ28gdGhyb3VnaCBhbGwgcG9seWdvbiBub2RlcyBhbmQgY3VyZSBzbWFsbCBsb2NhbCBzZWxmLWludGVyc2VjdGlvbnNcbmZ1bmN0aW9uIGN1cmVMb2NhbEludGVyc2VjdGlvbnMoc3RhcnQsIHRyaWFuZ2xlcywgZGltKSB7XG4gICAgdmFyIHAgPSBzdGFydDtcbiAgICBkbyB7XG4gICAgICAgIHZhciBhID0gcC5wcmV2LFxuICAgICAgICAgICAgYiA9IHAubmV4dC5uZXh0O1xuXG4gICAgICAgIC8vIGEgc2VsZi1pbnRlcnNlY3Rpb24gd2hlcmUgZWRnZSAodltpLTFdLHZbaV0pIGludGVyc2VjdHMgKHZbaSsxXSx2W2krMl0pXG4gICAgICAgIGlmIChpbnRlcnNlY3RzKGEsIHAsIHAubmV4dCwgYikgJiYgbG9jYWxseUluc2lkZShhLCBiKSAmJiBsb2NhbGx5SW5zaWRlKGIsIGEpKSB7XG5cbiAgICAgICAgICAgIHRyaWFuZ2xlcy5wdXNoKGEuaSAvIGRpbSk7XG4gICAgICAgICAgICB0cmlhbmdsZXMucHVzaChwLmkgLyBkaW0pO1xuICAgICAgICAgICAgdHJpYW5nbGVzLnB1c2goYi5pIC8gZGltKTtcblxuICAgICAgICAgICAgLy8gcmVtb3ZlIHR3byBub2RlcyBpbnZvbHZlZFxuICAgICAgICAgICAgcmVtb3ZlTm9kZShwKTtcbiAgICAgICAgICAgIHJlbW92ZU5vZGUocC5uZXh0KTtcblxuICAgICAgICAgICAgcCA9IHN0YXJ0ID0gYjtcbiAgICAgICAgfVxuICAgICAgICBwID0gcC5uZXh0O1xuICAgIH0gd2hpbGUgKHAgIT09IHN0YXJ0KTtcblxuICAgIHJldHVybiBwO1xufVxuXG4vLyB0cnkgc3BsaXR0aW5nIHBvbHlnb24gaW50byB0d28gYW5kIHRyaWFuZ3VsYXRlIHRoZW0gaW5kZXBlbmRlbnRseVxuZnVuY3Rpb24gc3BsaXRFYXJjdXQoc3RhcnQsIHRyaWFuZ2xlcywgZGltLCBtaW5YLCBtaW5ZLCBzaXplKSB7XG4gICAgLy8gbG9vayBmb3IgYSB2YWxpZCBkaWFnb25hbCB0aGF0IGRpdmlkZXMgdGhlIHBvbHlnb24gaW50byB0d29cbiAgICB2YXIgYSA9IHN0YXJ0O1xuICAgIGRvIHtcbiAgICAgICAgdmFyIGIgPSBhLm5leHQubmV4dDtcbiAgICAgICAgd2hpbGUgKGIgIT09IGEucHJldikge1xuICAgICAgICAgICAgaWYgKGEuaSAhPT0gYi5pICYmIGlzVmFsaWREaWFnb25hbChhLCBiKSkge1xuICAgICAgICAgICAgICAgIC8vIHNwbGl0IHRoZSBwb2x5Z29uIGluIHR3byBieSB0aGUgZGlhZ29uYWxcbiAgICAgICAgICAgICAgICB2YXIgYyA9IHNwbGl0UG9seWdvbihhLCBiKTtcblxuICAgICAgICAgICAgICAgIC8vIGZpbHRlciBjb2xpbmVhciBwb2ludHMgYXJvdW5kIHRoZSBjdXRzXG4gICAgICAgICAgICAgICAgYSA9IGZpbHRlclBvaW50cyhhLCBhLm5leHQpO1xuICAgICAgICAgICAgICAgIGMgPSBmaWx0ZXJQb2ludHMoYywgYy5uZXh0KTtcblxuICAgICAgICAgICAgICAgIC8vIHJ1biBlYXJjdXQgb24gZWFjaCBoYWxmXG4gICAgICAgICAgICAgICAgZWFyY3V0TGlua2VkKGEsIHRyaWFuZ2xlcywgZGltLCBtaW5YLCBtaW5ZLCBzaXplKTtcbiAgICAgICAgICAgICAgICBlYXJjdXRMaW5rZWQoYywgdHJpYW5nbGVzLCBkaW0sIG1pblgsIG1pblksIHNpemUpO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGIgPSBiLm5leHQ7XG4gICAgICAgIH1cbiAgICAgICAgYSA9IGEubmV4dDtcbiAgICB9IHdoaWxlIChhICE9PSBzdGFydCk7XG59XG5cbi8vIGxpbmsgZXZlcnkgaG9sZSBpbnRvIHRoZSBvdXRlciBsb29wLCBwcm9kdWNpbmcgYSBzaW5nbGUtcmluZyBwb2x5Z29uIHdpdGhvdXQgaG9sZXNcbmZ1bmN0aW9uIGVsaW1pbmF0ZUhvbGVzKGRhdGEsIGhvbGVJbmRpY2VzLCBvdXRlck5vZGUsIGRpbSkge1xuICAgIHZhciBxdWV1ZSA9IFtdLFxuICAgICAgICBpLCBsZW4sIHN0YXJ0LCBlbmQsIGxpc3Q7XG5cbiAgICBmb3IgKGkgPSAwLCBsZW4gPSBob2xlSW5kaWNlcy5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuICAgICAgICBzdGFydCA9IGhvbGVJbmRpY2VzW2ldICogZGltO1xuICAgICAgICBlbmQgPSBpIDwgbGVuIC0gMSA/IGhvbGVJbmRpY2VzW2kgKyAxXSAqIGRpbSA6IGRhdGEubGVuZ3RoO1xuICAgICAgICBsaXN0ID0gbGlua2VkTGlzdChkYXRhLCBzdGFydCwgZW5kLCBkaW0sIGZhbHNlKTtcbiAgICAgICAgaWYgKGxpc3QgPT09IGxpc3QubmV4dCkgbGlzdC5zdGVpbmVyID0gdHJ1ZTtcbiAgICAgICAgcXVldWUucHVzaChnZXRMZWZ0bW9zdChsaXN0KSk7XG4gICAgfVxuXG4gICAgcXVldWUuc29ydChjb21wYXJlWCk7XG5cbiAgICAvLyBwcm9jZXNzIGhvbGVzIGZyb20gbGVmdCB0byByaWdodFxuICAgIGZvciAoaSA9IDA7IGkgPCBxdWV1ZS5sZW5ndGg7IGkrKykge1xuICAgICAgICBlbGltaW5hdGVIb2xlKHF1ZXVlW2ldLCBvdXRlck5vZGUpO1xuICAgICAgICBvdXRlck5vZGUgPSBmaWx0ZXJQb2ludHMob3V0ZXJOb2RlLCBvdXRlck5vZGUubmV4dCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG91dGVyTm9kZTtcbn1cblxuZnVuY3Rpb24gY29tcGFyZVgoYSwgYikge1xuICAgIHJldHVybiBhLnggLSBiLng7XG59XG5cbi8vIGZpbmQgYSBicmlkZ2UgYmV0d2VlbiB2ZXJ0aWNlcyB0aGF0IGNvbm5lY3RzIGhvbGUgd2l0aCBhbiBvdXRlciByaW5nIGFuZCBhbmQgbGluayBpdFxuZnVuY3Rpb24gZWxpbWluYXRlSG9sZShob2xlLCBvdXRlck5vZGUpIHtcbiAgICBvdXRlck5vZGUgPSBmaW5kSG9sZUJyaWRnZShob2xlLCBvdXRlck5vZGUpO1xuICAgIGlmIChvdXRlck5vZGUpIHtcbiAgICAgICAgdmFyIGIgPSBzcGxpdFBvbHlnb24ob3V0ZXJOb2RlLCBob2xlKTtcbiAgICAgICAgZmlsdGVyUG9pbnRzKGIsIGIubmV4dCk7XG4gICAgfVxufVxuXG4vLyBEYXZpZCBFYmVybHkncyBhbGdvcml0aG0gZm9yIGZpbmRpbmcgYSBicmlkZ2UgYmV0d2VlbiBob2xlIGFuZCBvdXRlciBwb2x5Z29uXG5mdW5jdGlvbiBmaW5kSG9sZUJyaWRnZShob2xlLCBvdXRlck5vZGUpIHtcbiAgICB2YXIgcCA9IG91dGVyTm9kZSxcbiAgICAgICAgaHggPSBob2xlLngsXG4gICAgICAgIGh5ID0gaG9sZS55LFxuICAgICAgICBxeCA9IC1JbmZpbml0eSxcbiAgICAgICAgbTtcblxuICAgIC8vIGZpbmQgYSBzZWdtZW50IGludGVyc2VjdGVkIGJ5IGEgcmF5IGZyb20gdGhlIGhvbGUncyBsZWZ0bW9zdCBwb2ludCB0byB0aGUgbGVmdDtcbiAgICAvLyBzZWdtZW50J3MgZW5kcG9pbnQgd2l0aCBsZXNzZXIgeCB3aWxsIGJlIHBvdGVudGlhbCBjb25uZWN0aW9uIHBvaW50XG4gICAgZG8ge1xuICAgICAgICBpZiAoaHkgPD0gcC55ICYmIGh5ID49IHAubmV4dC55KSB7XG4gICAgICAgICAgICB2YXIgeCA9IHAueCArIChoeSAtIHAueSkgKiAocC5uZXh0LnggLSBwLngpIC8gKHAubmV4dC55IC0gcC55KTtcbiAgICAgICAgICAgIGlmICh4IDw9IGh4ICYmIHggPiBxeCkge1xuICAgICAgICAgICAgICAgIHF4ID0geDtcbiAgICAgICAgICAgICAgICBtID0gcC54IDwgcC5uZXh0LnggPyBwIDogcC5uZXh0O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHAgPSBwLm5leHQ7XG4gICAgfSB3aGlsZSAocCAhPT0gb3V0ZXJOb2RlKTtcblxuICAgIGlmICghbSkgcmV0dXJuIG51bGw7XG5cbiAgICAvLyBsb29rIGZvciBwb2ludHMgaW5zaWRlIHRoZSB0cmlhbmdsZSBvZiBob2xlIHBvaW50LCBzZWdtZW50IGludGVyc2VjdGlvbiBhbmQgZW5kcG9pbnQ7XG4gICAgLy8gaWYgdGhlcmUgYXJlIG5vIHBvaW50cyBmb3VuZCwgd2UgaGF2ZSBhIHZhbGlkIGNvbm5lY3Rpb247XG4gICAgLy8gb3RoZXJ3aXNlIGNob29zZSB0aGUgcG9pbnQgb2YgdGhlIG1pbmltdW0gYW5nbGUgd2l0aCB0aGUgcmF5IGFzIGNvbm5lY3Rpb24gcG9pbnRcblxuICAgIHZhciBzdG9wID0gbSxcbiAgICAgICAgdGFuTWluID0gSW5maW5pdHksXG4gICAgICAgIHRhbjtcblxuICAgIHAgPSBtLm5leHQ7XG5cbiAgICB3aGlsZSAocCAhPT0gc3RvcCkge1xuICAgICAgICBpZiAoaHggPj0gcC54ICYmIHAueCA+PSBtLnggJiZcbiAgICAgICAgICAgICAgICBwb2ludEluVHJpYW5nbGUoaHkgPCBtLnkgPyBoeCA6IHF4LCBoeSwgbS54LCBtLnksIGh5IDwgbS55ID8gcXggOiBoeCwgaHksIHAueCwgcC55KSkge1xuXG4gICAgICAgICAgICB0YW4gPSBNYXRoLmFicyhoeSAtIHAueSkgLyAoaHggLSBwLngpOyAvLyB0YW5nZW50aWFsXG5cbiAgICAgICAgICAgIGlmICgodGFuIDwgdGFuTWluIHx8ICh0YW4gPT09IHRhbk1pbiAmJiBwLnggPiBtLngpKSAmJiBsb2NhbGx5SW5zaWRlKHAsIGhvbGUpKSB7XG4gICAgICAgICAgICAgICAgbSA9IHA7XG4gICAgICAgICAgICAgICAgdGFuTWluID0gdGFuO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcCA9IHAubmV4dDtcbiAgICB9XG5cbiAgICByZXR1cm4gbTtcbn1cblxuLy8gaW50ZXJsaW5rIHBvbHlnb24gbm9kZXMgaW4gei1vcmRlclxuZnVuY3Rpb24gaW5kZXhDdXJ2ZShzdGFydCwgbWluWCwgbWluWSwgc2l6ZSkge1xuICAgIHZhciBwID0gc3RhcnQ7XG4gICAgZG8ge1xuICAgICAgICBpZiAocC56ID09PSBudWxsKSBwLnogPSB6T3JkZXIocC54LCBwLnksIG1pblgsIG1pblksIHNpemUpO1xuICAgICAgICBwLnByZXZaID0gcC5wcmV2O1xuICAgICAgICBwLm5leHRaID0gcC5uZXh0O1xuICAgICAgICBwID0gcC5uZXh0O1xuICAgIH0gd2hpbGUgKHAgIT09IHN0YXJ0KTtcblxuICAgIHAucHJldloubmV4dFogPSBudWxsO1xuICAgIHAucHJldlogPSBudWxsO1xuXG4gICAgc29ydExpbmtlZChwKTtcbn1cblxuLy8gU2ltb24gVGF0aGFtJ3MgbGlua2VkIGxpc3QgbWVyZ2Ugc29ydCBhbGdvcml0aG1cbi8vIGh0dHA6Ly93d3cuY2hpYXJrLmdyZWVuZW5kLm9yZy51ay9+c2d0YXRoYW0vYWxnb3JpdGhtcy9saXN0c29ydC5odG1sXG5mdW5jdGlvbiBzb3J0TGlua2VkKGxpc3QpIHtcbiAgICB2YXIgaSwgcCwgcSwgZSwgdGFpbCwgbnVtTWVyZ2VzLCBwU2l6ZSwgcVNpemUsXG4gICAgICAgIGluU2l6ZSA9IDE7XG5cbiAgICBkbyB7XG4gICAgICAgIHAgPSBsaXN0O1xuICAgICAgICBsaXN0ID0gbnVsbDtcbiAgICAgICAgdGFpbCA9IG51bGw7XG4gICAgICAgIG51bU1lcmdlcyA9IDA7XG5cbiAgICAgICAgd2hpbGUgKHApIHtcbiAgICAgICAgICAgIG51bU1lcmdlcysrO1xuICAgICAgICAgICAgcSA9IHA7XG4gICAgICAgICAgICBwU2l6ZSA9IDA7XG4gICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgaW5TaXplOyBpKyspIHtcbiAgICAgICAgICAgICAgICBwU2l6ZSsrO1xuICAgICAgICAgICAgICAgIHEgPSBxLm5leHRaO1xuICAgICAgICAgICAgICAgIGlmICghcSkgYnJlYWs7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHFTaXplID0gaW5TaXplO1xuXG4gICAgICAgICAgICB3aGlsZSAocFNpemUgPiAwIHx8IChxU2l6ZSA+IDAgJiYgcSkpIHtcblxuICAgICAgICAgICAgICAgIGlmIChwU2l6ZSA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICBlID0gcTtcbiAgICAgICAgICAgICAgICAgICAgcSA9IHEubmV4dFo7XG4gICAgICAgICAgICAgICAgICAgIHFTaXplLS07XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChxU2l6ZSA9PT0gMCB8fCAhcSkge1xuICAgICAgICAgICAgICAgICAgICBlID0gcDtcbiAgICAgICAgICAgICAgICAgICAgcCA9IHAubmV4dFo7XG4gICAgICAgICAgICAgICAgICAgIHBTaXplLS07XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChwLnogPD0gcS56KSB7XG4gICAgICAgICAgICAgICAgICAgIGUgPSBwO1xuICAgICAgICAgICAgICAgICAgICBwID0gcC5uZXh0WjtcbiAgICAgICAgICAgICAgICAgICAgcFNpemUtLTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBlID0gcTtcbiAgICAgICAgICAgICAgICAgICAgcSA9IHEubmV4dFo7XG4gICAgICAgICAgICAgICAgICAgIHFTaXplLS07XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKHRhaWwpIHRhaWwubmV4dFogPSBlO1xuICAgICAgICAgICAgICAgIGVsc2UgbGlzdCA9IGU7XG5cbiAgICAgICAgICAgICAgICBlLnByZXZaID0gdGFpbDtcbiAgICAgICAgICAgICAgICB0YWlsID0gZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcCA9IHE7XG4gICAgICAgIH1cblxuICAgICAgICB0YWlsLm5leHRaID0gbnVsbDtcbiAgICAgICAgaW5TaXplICo9IDI7XG5cbiAgICB9IHdoaWxlIChudW1NZXJnZXMgPiAxKTtcblxuICAgIHJldHVybiBsaXN0O1xufVxuXG4vLyB6LW9yZGVyIG9mIGEgcG9pbnQgZ2l2ZW4gY29vcmRzIGFuZCBzaXplIG9mIHRoZSBkYXRhIGJvdW5kaW5nIGJveFxuZnVuY3Rpb24gek9yZGVyKHgsIHksIG1pblgsIG1pblksIHNpemUpIHtcbiAgICAvLyBjb29yZHMgYXJlIHRyYW5zZm9ybWVkIGludG8gbm9uLW5lZ2F0aXZlIDE1LWJpdCBpbnRlZ2VyIHJhbmdlXG4gICAgeCA9IDMyNzY3ICogKHggLSBtaW5YKSAvIHNpemU7XG4gICAgeSA9IDMyNzY3ICogKHkgLSBtaW5ZKSAvIHNpemU7XG5cbiAgICB4ID0gKHggfCAoeCA8PCA4KSkgJiAweDAwRkYwMEZGO1xuICAgIHggPSAoeCB8ICh4IDw8IDQpKSAmIDB4MEYwRjBGMEY7XG4gICAgeCA9ICh4IHwgKHggPDwgMikpICYgMHgzMzMzMzMzMztcbiAgICB4ID0gKHggfCAoeCA8PCAxKSkgJiAweDU1NTU1NTU1O1xuXG4gICAgeSA9ICh5IHwgKHkgPDwgOCkpICYgMHgwMEZGMDBGRjtcbiAgICB5ID0gKHkgfCAoeSA8PCA0KSkgJiAweDBGMEYwRjBGO1xuICAgIHkgPSAoeSB8ICh5IDw8IDIpKSAmIDB4MzMzMzMzMzM7XG4gICAgeSA9ICh5IHwgKHkgPDwgMSkpICYgMHg1NTU1NTU1NTtcblxuICAgIHJldHVybiB4IHwgKHkgPDwgMSk7XG59XG5cbi8vIGZpbmQgdGhlIGxlZnRtb3N0IG5vZGUgb2YgYSBwb2x5Z29uIHJpbmdcbmZ1bmN0aW9uIGdldExlZnRtb3N0KHN0YXJ0KSB7XG4gICAgdmFyIHAgPSBzdGFydCxcbiAgICAgICAgbGVmdG1vc3QgPSBzdGFydDtcbiAgICBkbyB7XG4gICAgICAgIGlmIChwLnggPCBsZWZ0bW9zdC54KSBsZWZ0bW9zdCA9IHA7XG4gICAgICAgIHAgPSBwLm5leHQ7XG4gICAgfSB3aGlsZSAocCAhPT0gc3RhcnQpO1xuXG4gICAgcmV0dXJuIGxlZnRtb3N0O1xufVxuXG4vLyBjaGVjayBpZiBhIHBvaW50IGxpZXMgd2l0aGluIGEgY29udmV4IHRyaWFuZ2xlXG5mdW5jdGlvbiBwb2ludEluVHJpYW5nbGUoYXgsIGF5LCBieCwgYnksIGN4LCBjeSwgcHgsIHB5KSB7XG4gICAgcmV0dXJuIChjeCAtIHB4KSAqIChheSAtIHB5KSAtIChheCAtIHB4KSAqIChjeSAtIHB5KSA+PSAwICYmXG4gICAgICAgICAgIChheCAtIHB4KSAqIChieSAtIHB5KSAtIChieCAtIHB4KSAqIChheSAtIHB5KSA+PSAwICYmXG4gICAgICAgICAgIChieCAtIHB4KSAqIChjeSAtIHB5KSAtIChjeCAtIHB4KSAqIChieSAtIHB5KSA+PSAwO1xufVxuXG4vLyBjaGVjayBpZiBhIGRpYWdvbmFsIGJldHdlZW4gdHdvIHBvbHlnb24gbm9kZXMgaXMgdmFsaWQgKGxpZXMgaW4gcG9seWdvbiBpbnRlcmlvcilcbmZ1bmN0aW9uIGlzVmFsaWREaWFnb25hbChhLCBiKSB7XG4gICAgcmV0dXJuIGVxdWFscyhhLCBiKSB8fCBhLm5leHQuaSAhPT0gYi5pICYmIGEucHJldi5pICE9PSBiLmkgJiYgIWludGVyc2VjdHNQb2x5Z29uKGEsIGIpICYmXG4gICAgICAgICAgIGxvY2FsbHlJbnNpZGUoYSwgYikgJiYgbG9jYWxseUluc2lkZShiLCBhKSAmJiBtaWRkbGVJbnNpZGUoYSwgYik7XG59XG5cbi8vIHNpZ25lZCBhcmVhIG9mIGEgdHJpYW5nbGVcbmZ1bmN0aW9uIGFyZWEocCwgcSwgcikge1xuICAgIHJldHVybiAocS55IC0gcC55KSAqIChyLnggLSBxLngpIC0gKHEueCAtIHAueCkgKiAoci55IC0gcS55KTtcbn1cblxuLy8gY2hlY2sgaWYgdHdvIHBvaW50cyBhcmUgZXF1YWxcbmZ1bmN0aW9uIGVxdWFscyhwMSwgcDIpIHtcbiAgICByZXR1cm4gcDEueCA9PT0gcDIueCAmJiBwMS55ID09PSBwMi55O1xufVxuXG4vLyBjaGVjayBpZiB0d28gc2VnbWVudHMgaW50ZXJzZWN0XG5mdW5jdGlvbiBpbnRlcnNlY3RzKHAxLCBxMSwgcDIsIHEyKSB7XG4gICAgcmV0dXJuIGFyZWEocDEsIHExLCBwMikgPiAwICE9PSBhcmVhKHAxLCBxMSwgcTIpID4gMCAmJlxuICAgICAgICAgICBhcmVhKHAyLCBxMiwgcDEpID4gMCAhPT0gYXJlYShwMiwgcTIsIHExKSA+IDA7XG59XG5cbi8vIGNoZWNrIGlmIGEgcG9seWdvbiBkaWFnb25hbCBpbnRlcnNlY3RzIGFueSBwb2x5Z29uIHNlZ21lbnRzXG5mdW5jdGlvbiBpbnRlcnNlY3RzUG9seWdvbihhLCBiKSB7XG4gICAgdmFyIHAgPSBhO1xuICAgIGRvIHtcbiAgICAgICAgaWYgKHAuaSAhPT0gYS5pICYmIHAubmV4dC5pICE9PSBhLmkgJiYgcC5pICE9PSBiLmkgJiYgcC5uZXh0LmkgIT09IGIuaSAmJlxuICAgICAgICAgICAgICAgIGludGVyc2VjdHMocCwgcC5uZXh0LCBhLCBiKSkgcmV0dXJuIHRydWU7XG4gICAgICAgIHAgPSBwLm5leHQ7XG4gICAgfSB3aGlsZSAocCAhPT0gYSk7XG5cbiAgICByZXR1cm4gZmFsc2U7XG59XG5cbi8vIGNoZWNrIGlmIGEgcG9seWdvbiBkaWFnb25hbCBpcyBsb2NhbGx5IGluc2lkZSB0aGUgcG9seWdvblxuZnVuY3Rpb24gbG9jYWxseUluc2lkZShhLCBiKSB7XG4gICAgcmV0dXJuIGFyZWEoYS5wcmV2LCBhLCBhLm5leHQpIDwgMCA/XG4gICAgICAgIGFyZWEoYSwgYiwgYS5uZXh0KSA+PSAwICYmIGFyZWEoYSwgYS5wcmV2LCBiKSA+PSAwIDpcbiAgICAgICAgYXJlYShhLCBiLCBhLnByZXYpIDwgMCB8fCBhcmVhKGEsIGEubmV4dCwgYikgPCAwO1xufVxuXG4vLyBjaGVjayBpZiB0aGUgbWlkZGxlIHBvaW50IG9mIGEgcG9seWdvbiBkaWFnb25hbCBpcyBpbnNpZGUgdGhlIHBvbHlnb25cbmZ1bmN0aW9uIG1pZGRsZUluc2lkZShhLCBiKSB7XG4gICAgdmFyIHAgPSBhLFxuICAgICAgICBpbnNpZGUgPSBmYWxzZSxcbiAgICAgICAgcHggPSAoYS54ICsgYi54KSAvIDIsXG4gICAgICAgIHB5ID0gKGEueSArIGIueSkgLyAyO1xuICAgIGRvIHtcbiAgICAgICAgaWYgKCgocC55ID4gcHkpICE9PSAocC5uZXh0LnkgPiBweSkpICYmIChweCA8IChwLm5leHQueCAtIHAueCkgKiAocHkgLSBwLnkpIC8gKHAubmV4dC55IC0gcC55KSArIHAueCkpXG4gICAgICAgICAgICBpbnNpZGUgPSAhaW5zaWRlO1xuICAgICAgICBwID0gcC5uZXh0O1xuICAgIH0gd2hpbGUgKHAgIT09IGEpO1xuXG4gICAgcmV0dXJuIGluc2lkZTtcbn1cblxuLy8gbGluayB0d28gcG9seWdvbiB2ZXJ0aWNlcyB3aXRoIGEgYnJpZGdlOyBpZiB0aGUgdmVydGljZXMgYmVsb25nIHRvIHRoZSBzYW1lIHJpbmcsIGl0IHNwbGl0cyBwb2x5Z29uIGludG8gdHdvO1xuLy8gaWYgb25lIGJlbG9uZ3MgdG8gdGhlIG91dGVyIHJpbmcgYW5kIGFub3RoZXIgdG8gYSBob2xlLCBpdCBtZXJnZXMgaXQgaW50byBhIHNpbmdsZSByaW5nXG5mdW5jdGlvbiBzcGxpdFBvbHlnb24oYSwgYikge1xuICAgIHZhciBhMiA9IG5ldyBOb2RlKGEuaSwgYS54LCBhLnkpLFxuICAgICAgICBiMiA9IG5ldyBOb2RlKGIuaSwgYi54LCBiLnkpLFxuICAgICAgICBhbiA9IGEubmV4dCxcbiAgICAgICAgYnAgPSBiLnByZXY7XG5cbiAgICBhLm5leHQgPSBiO1xuICAgIGIucHJldiA9IGE7XG5cbiAgICBhMi5uZXh0ID0gYW47XG4gICAgYW4ucHJldiA9IGEyO1xuXG4gICAgYjIubmV4dCA9IGEyO1xuICAgIGEyLnByZXYgPSBiMjtcblxuICAgIGJwLm5leHQgPSBiMjtcbiAgICBiMi5wcmV2ID0gYnA7XG5cbiAgICByZXR1cm4gYjI7XG59XG5cbi8vIGNyZWF0ZSBhIG5vZGUgYW5kIG9wdGlvbmFsbHkgbGluayBpdCB3aXRoIHByZXZpb3VzIG9uZSAoaW4gYSBjaXJjdWxhciBkb3VibHkgbGlua2VkIGxpc3QpXG5mdW5jdGlvbiBpbnNlcnROb2RlKGksIHgsIHksIGxhc3QpIHtcbiAgICB2YXIgcCA9IG5ldyBOb2RlKGksIHgsIHkpO1xuXG4gICAgaWYgKCFsYXN0KSB7XG4gICAgICAgIHAucHJldiA9IHA7XG4gICAgICAgIHAubmV4dCA9IHA7XG5cbiAgICB9IGVsc2Uge1xuICAgICAgICBwLm5leHQgPSBsYXN0Lm5leHQ7XG4gICAgICAgIHAucHJldiA9IGxhc3Q7XG4gICAgICAgIGxhc3QubmV4dC5wcmV2ID0gcDtcbiAgICAgICAgbGFzdC5uZXh0ID0gcDtcbiAgICB9XG4gICAgcmV0dXJuIHA7XG59XG5cbmZ1bmN0aW9uIHJlbW92ZU5vZGUocCkge1xuICAgIHAubmV4dC5wcmV2ID0gcC5wcmV2O1xuICAgIHAucHJldi5uZXh0ID0gcC5uZXh0O1xuXG4gICAgaWYgKHAucHJldlopIHAucHJldloubmV4dFogPSBwLm5leHRaO1xuICAgIGlmIChwLm5leHRaKSBwLm5leHRaLnByZXZaID0gcC5wcmV2Wjtcbn1cblxuZnVuY3Rpb24gTm9kZShpLCB4LCB5KSB7XG4gICAgLy8gdmVydGljZSBpbmRleCBpbiBjb29yZGluYXRlcyBhcnJheVxuICAgIHRoaXMuaSA9IGk7XG5cbiAgICAvLyB2ZXJ0ZXggY29vcmRpbmF0ZXNcbiAgICB0aGlzLnggPSB4O1xuICAgIHRoaXMueSA9IHk7XG5cbiAgICAvLyBwcmV2aW91cyBhbmQgbmV4dCB2ZXJ0aWNlIG5vZGVzIGluIGEgcG9seWdvbiByaW5nXG4gICAgdGhpcy5wcmV2ID0gbnVsbDtcbiAgICB0aGlzLm5leHQgPSBudWxsO1xuXG4gICAgLy8gei1vcmRlciBjdXJ2ZSB2YWx1ZVxuICAgIHRoaXMueiA9IG51bGw7XG5cbiAgICAvLyBwcmV2aW91cyBhbmQgbmV4dCBub2RlcyBpbiB6LW9yZGVyXG4gICAgdGhpcy5wcmV2WiA9IG51bGw7XG4gICAgdGhpcy5uZXh0WiA9IG51bGw7XG5cbiAgICAvLyBpbmRpY2F0ZXMgd2hldGhlciB0aGlzIGlzIGEgc3RlaW5lciBwb2ludFxuICAgIHRoaXMuc3RlaW5lciA9IGZhbHNlO1xufVxuIiwiJ3VzZSBzdHJpY3QnO1xuXG4vL1xuLy8gV2Ugc3RvcmUgb3VyIEVFIG9iamVjdHMgaW4gYSBwbGFpbiBvYmplY3Qgd2hvc2UgcHJvcGVydGllcyBhcmUgZXZlbnQgbmFtZXMuXG4vLyBJZiBgT2JqZWN0LmNyZWF0ZShudWxsKWAgaXMgbm90IHN1cHBvcnRlZCB3ZSBwcmVmaXggdGhlIGV2ZW50IG5hbWVzIHdpdGggYVxuLy8gYH5gIHRvIG1ha2Ugc3VyZSB0aGF0IHRoZSBidWlsdC1pbiBvYmplY3QgcHJvcGVydGllcyBhcmUgbm90IG92ZXJyaWRkZW4gb3Jcbi8vIHVzZWQgYXMgYW4gYXR0YWNrIHZlY3Rvci5cbi8vIFdlIGFsc28gYXNzdW1lIHRoYXQgYE9iamVjdC5jcmVhdGUobnVsbClgIGlzIGF2YWlsYWJsZSB3aGVuIHRoZSBldmVudCBuYW1lXG4vLyBpcyBhbiBFUzYgU3ltYm9sLlxuLy9cbnZhciBwcmVmaXggPSB0eXBlb2YgT2JqZWN0LmNyZWF0ZSAhPT0gJ2Z1bmN0aW9uJyA/ICd+JyA6IGZhbHNlO1xuXG4vKipcbiAqIFJlcHJlc2VudGF0aW9uIG9mIGEgc2luZ2xlIEV2ZW50RW1pdHRlciBmdW5jdGlvbi5cbiAqXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmbiBFdmVudCBoYW5kbGVyIHRvIGJlIGNhbGxlZC5cbiAqIEBwYXJhbSB7TWl4ZWR9IGNvbnRleHQgQ29udGV4dCBmb3IgZnVuY3Rpb24gZXhlY3V0aW9uLlxuICogQHBhcmFtIHtCb29sZWFufSBvbmNlIE9ubHkgZW1pdCBvbmNlXG4gKiBAYXBpIHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gRUUoZm4sIGNvbnRleHQsIG9uY2UpIHtcbiAgdGhpcy5mbiA9IGZuO1xuICB0aGlzLmNvbnRleHQgPSBjb250ZXh0O1xuICB0aGlzLm9uY2UgPSBvbmNlIHx8IGZhbHNlO1xufVxuXG4vKipcbiAqIE1pbmltYWwgRXZlbnRFbWl0dGVyIGludGVyZmFjZSB0aGF0IGlzIG1vbGRlZCBhZ2FpbnN0IHRoZSBOb2RlLmpzXG4gKiBFdmVudEVtaXR0ZXIgaW50ZXJmYWNlLlxuICpcbiAqIEBjb25zdHJ1Y3RvclxuICogQGFwaSBwdWJsaWNcbiAqL1xuZnVuY3Rpb24gRXZlbnRFbWl0dGVyKCkgeyAvKiBOb3RoaW5nIHRvIHNldCAqLyB9XG5cbi8qKlxuICogSG9sZHMgdGhlIGFzc2lnbmVkIEV2ZW50RW1pdHRlcnMgYnkgbmFtZS5cbiAqXG4gKiBAdHlwZSB7T2JqZWN0fVxuICogQHByaXZhdGVcbiAqL1xuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5fZXZlbnRzID0gdW5kZWZpbmVkO1xuXG4vKipcbiAqIFJldHVybiBhIGxpc3Qgb2YgYXNzaWduZWQgZXZlbnQgbGlzdGVuZXJzLlxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBldmVudCBUaGUgZXZlbnRzIHRoYXQgc2hvdWxkIGJlIGxpc3RlZC5cbiAqIEBwYXJhbSB7Qm9vbGVhbn0gZXhpc3RzIFdlIG9ubHkgbmVlZCB0byBrbm93IGlmIHRoZXJlIGFyZSBsaXN0ZW5lcnMuXG4gKiBAcmV0dXJucyB7QXJyYXl8Qm9vbGVhbn1cbiAqIEBhcGkgcHVibGljXG4gKi9cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUubGlzdGVuZXJzID0gZnVuY3Rpb24gbGlzdGVuZXJzKGV2ZW50LCBleGlzdHMpIHtcbiAgdmFyIGV2dCA9IHByZWZpeCA/IHByZWZpeCArIGV2ZW50IDogZXZlbnRcbiAgICAsIGF2YWlsYWJsZSA9IHRoaXMuX2V2ZW50cyAmJiB0aGlzLl9ldmVudHNbZXZ0XTtcblxuICBpZiAoZXhpc3RzKSByZXR1cm4gISFhdmFpbGFibGU7XG4gIGlmICghYXZhaWxhYmxlKSByZXR1cm4gW107XG4gIGlmIChhdmFpbGFibGUuZm4pIHJldHVybiBbYXZhaWxhYmxlLmZuXTtcblxuICBmb3IgKHZhciBpID0gMCwgbCA9IGF2YWlsYWJsZS5sZW5ndGgsIGVlID0gbmV3IEFycmF5KGwpOyBpIDwgbDsgaSsrKSB7XG4gICAgZWVbaV0gPSBhdmFpbGFibGVbaV0uZm47XG4gIH1cblxuICByZXR1cm4gZWU7XG59O1xuXG4vKipcbiAqIEVtaXQgYW4gZXZlbnQgdG8gYWxsIHJlZ2lzdGVyZWQgZXZlbnQgbGlzdGVuZXJzLlxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBldmVudCBUaGUgbmFtZSBvZiB0aGUgZXZlbnQuXG4gKiBAcmV0dXJucyB7Qm9vbGVhbn0gSW5kaWNhdGlvbiBpZiB3ZSd2ZSBlbWl0dGVkIGFuIGV2ZW50LlxuICogQGFwaSBwdWJsaWNcbiAqL1xuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5lbWl0ID0gZnVuY3Rpb24gZW1pdChldmVudCwgYTEsIGEyLCBhMywgYTQsIGE1KSB7XG4gIHZhciBldnQgPSBwcmVmaXggPyBwcmVmaXggKyBldmVudCA6IGV2ZW50O1xuXG4gIGlmICghdGhpcy5fZXZlbnRzIHx8ICF0aGlzLl9ldmVudHNbZXZ0XSkgcmV0dXJuIGZhbHNlO1xuXG4gIHZhciBsaXN0ZW5lcnMgPSB0aGlzLl9ldmVudHNbZXZ0XVxuICAgICwgbGVuID0gYXJndW1lbnRzLmxlbmd0aFxuICAgICwgYXJnc1xuICAgICwgaTtcblxuICBpZiAoJ2Z1bmN0aW9uJyA9PT0gdHlwZW9mIGxpc3RlbmVycy5mbikge1xuICAgIGlmIChsaXN0ZW5lcnMub25jZSkgdGhpcy5yZW1vdmVMaXN0ZW5lcihldmVudCwgbGlzdGVuZXJzLmZuLCB1bmRlZmluZWQsIHRydWUpO1xuXG4gICAgc3dpdGNoIChsZW4pIHtcbiAgICAgIGNhc2UgMTogcmV0dXJuIGxpc3RlbmVycy5mbi5jYWxsKGxpc3RlbmVycy5jb250ZXh0KSwgdHJ1ZTtcbiAgICAgIGNhc2UgMjogcmV0dXJuIGxpc3RlbmVycy5mbi5jYWxsKGxpc3RlbmVycy5jb250ZXh0LCBhMSksIHRydWU7XG4gICAgICBjYXNlIDM6IHJldHVybiBsaXN0ZW5lcnMuZm4uY2FsbChsaXN0ZW5lcnMuY29udGV4dCwgYTEsIGEyKSwgdHJ1ZTtcbiAgICAgIGNhc2UgNDogcmV0dXJuIGxpc3RlbmVycy5mbi5jYWxsKGxpc3RlbmVycy5jb250ZXh0LCBhMSwgYTIsIGEzKSwgdHJ1ZTtcbiAgICAgIGNhc2UgNTogcmV0dXJuIGxpc3RlbmVycy5mbi5jYWxsKGxpc3RlbmVycy5jb250ZXh0LCBhMSwgYTIsIGEzLCBhNCksIHRydWU7XG4gICAgICBjYXNlIDY6IHJldHVybiBsaXN0ZW5lcnMuZm4uY2FsbChsaXN0ZW5lcnMuY29udGV4dCwgYTEsIGEyLCBhMywgYTQsIGE1KSwgdHJ1ZTtcbiAgICB9XG5cbiAgICBmb3IgKGkgPSAxLCBhcmdzID0gbmV3IEFycmF5KGxlbiAtMSk7IGkgPCBsZW47IGkrKykge1xuICAgICAgYXJnc1tpIC0gMV0gPSBhcmd1bWVudHNbaV07XG4gICAgfVxuXG4gICAgbGlzdGVuZXJzLmZuLmFwcGx5KGxpc3RlbmVycy5jb250ZXh0LCBhcmdzKTtcbiAgfSBlbHNlIHtcbiAgICB2YXIgbGVuZ3RoID0gbGlzdGVuZXJzLmxlbmd0aFxuICAgICAgLCBqO1xuXG4gICAgZm9yIChpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAobGlzdGVuZXJzW2ldLm9uY2UpIHRoaXMucmVtb3ZlTGlzdGVuZXIoZXZlbnQsIGxpc3RlbmVyc1tpXS5mbiwgdW5kZWZpbmVkLCB0cnVlKTtcblxuICAgICAgc3dpdGNoIChsZW4pIHtcbiAgICAgICAgY2FzZSAxOiBsaXN0ZW5lcnNbaV0uZm4uY2FsbChsaXN0ZW5lcnNbaV0uY29udGV4dCk7IGJyZWFrO1xuICAgICAgICBjYXNlIDI6IGxpc3RlbmVyc1tpXS5mbi5jYWxsKGxpc3RlbmVyc1tpXS5jb250ZXh0LCBhMSk7IGJyZWFrO1xuICAgICAgICBjYXNlIDM6IGxpc3RlbmVyc1tpXS5mbi5jYWxsKGxpc3RlbmVyc1tpXS5jb250ZXh0LCBhMSwgYTIpOyBicmVhaztcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICBpZiAoIWFyZ3MpIGZvciAoaiA9IDEsIGFyZ3MgPSBuZXcgQXJyYXkobGVuIC0xKTsgaiA8IGxlbjsgaisrKSB7XG4gICAgICAgICAgICBhcmdzW2ogLSAxXSA9IGFyZ3VtZW50c1tqXTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBsaXN0ZW5lcnNbaV0uZm4uYXBwbHkobGlzdGVuZXJzW2ldLmNvbnRleHQsIGFyZ3MpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiB0cnVlO1xufTtcblxuLyoqXG4gKiBSZWdpc3RlciBhIG5ldyBFdmVudExpc3RlbmVyIGZvciB0aGUgZ2l2ZW4gZXZlbnQuXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IGV2ZW50IE5hbWUgb2YgdGhlIGV2ZW50LlxuICogQHBhcmFtIHtGdW5jdG9ufSBmbiBDYWxsYmFjayBmdW5jdGlvbi5cbiAqIEBwYXJhbSB7TWl4ZWR9IGNvbnRleHQgVGhlIGNvbnRleHQgb2YgdGhlIGZ1bmN0aW9uLlxuICogQGFwaSBwdWJsaWNcbiAqL1xuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5vbiA9IGZ1bmN0aW9uIG9uKGV2ZW50LCBmbiwgY29udGV4dCkge1xuICB2YXIgbGlzdGVuZXIgPSBuZXcgRUUoZm4sIGNvbnRleHQgfHwgdGhpcylcbiAgICAsIGV2dCA9IHByZWZpeCA/IHByZWZpeCArIGV2ZW50IDogZXZlbnQ7XG5cbiAgaWYgKCF0aGlzLl9ldmVudHMpIHRoaXMuX2V2ZW50cyA9IHByZWZpeCA/IHt9IDogT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgaWYgKCF0aGlzLl9ldmVudHNbZXZ0XSkgdGhpcy5fZXZlbnRzW2V2dF0gPSBsaXN0ZW5lcjtcbiAgZWxzZSB7XG4gICAgaWYgKCF0aGlzLl9ldmVudHNbZXZ0XS5mbikgdGhpcy5fZXZlbnRzW2V2dF0ucHVzaChsaXN0ZW5lcik7XG4gICAgZWxzZSB0aGlzLl9ldmVudHNbZXZ0XSA9IFtcbiAgICAgIHRoaXMuX2V2ZW50c1tldnRdLCBsaXN0ZW5lclxuICAgIF07XG4gIH1cblxuICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogQWRkIGFuIEV2ZW50TGlzdGVuZXIgdGhhdCdzIG9ubHkgY2FsbGVkIG9uY2UuXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IGV2ZW50IE5hbWUgb2YgdGhlIGV2ZW50LlxuICogQHBhcmFtIHtGdW5jdGlvbn0gZm4gQ2FsbGJhY2sgZnVuY3Rpb24uXG4gKiBAcGFyYW0ge01peGVkfSBjb250ZXh0IFRoZSBjb250ZXh0IG9mIHRoZSBmdW5jdGlvbi5cbiAqIEBhcGkgcHVibGljXG4gKi9cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUub25jZSA9IGZ1bmN0aW9uIG9uY2UoZXZlbnQsIGZuLCBjb250ZXh0KSB7XG4gIHZhciBsaXN0ZW5lciA9IG5ldyBFRShmbiwgY29udGV4dCB8fCB0aGlzLCB0cnVlKVxuICAgICwgZXZ0ID0gcHJlZml4ID8gcHJlZml4ICsgZXZlbnQgOiBldmVudDtcblxuICBpZiAoIXRoaXMuX2V2ZW50cykgdGhpcy5fZXZlbnRzID0gcHJlZml4ID8ge30gOiBPYmplY3QuY3JlYXRlKG51bGwpO1xuICBpZiAoIXRoaXMuX2V2ZW50c1tldnRdKSB0aGlzLl9ldmVudHNbZXZ0XSA9IGxpc3RlbmVyO1xuICBlbHNlIHtcbiAgICBpZiAoIXRoaXMuX2V2ZW50c1tldnRdLmZuKSB0aGlzLl9ldmVudHNbZXZ0XS5wdXNoKGxpc3RlbmVyKTtcbiAgICBlbHNlIHRoaXMuX2V2ZW50c1tldnRdID0gW1xuICAgICAgdGhpcy5fZXZlbnRzW2V2dF0sIGxpc3RlbmVyXG4gICAgXTtcbiAgfVxuXG4gIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBSZW1vdmUgZXZlbnQgbGlzdGVuZXJzLlxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBldmVudCBUaGUgZXZlbnQgd2Ugd2FudCB0byByZW1vdmUuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmbiBUaGUgbGlzdGVuZXIgdGhhdCB3ZSBuZWVkIHRvIGZpbmQuXG4gKiBAcGFyYW0ge01peGVkfSBjb250ZXh0IE9ubHkgcmVtb3ZlIGxpc3RlbmVycyBtYXRjaGluZyB0aGlzIGNvbnRleHQuXG4gKiBAcGFyYW0ge0Jvb2xlYW59IG9uY2UgT25seSByZW1vdmUgb25jZSBsaXN0ZW5lcnMuXG4gKiBAYXBpIHB1YmxpY1xuICovXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLnJlbW92ZUxpc3RlbmVyID0gZnVuY3Rpb24gcmVtb3ZlTGlzdGVuZXIoZXZlbnQsIGZuLCBjb250ZXh0LCBvbmNlKSB7XG4gIHZhciBldnQgPSBwcmVmaXggPyBwcmVmaXggKyBldmVudCA6IGV2ZW50O1xuXG4gIGlmICghdGhpcy5fZXZlbnRzIHx8ICF0aGlzLl9ldmVudHNbZXZ0XSkgcmV0dXJuIHRoaXM7XG5cbiAgdmFyIGxpc3RlbmVycyA9IHRoaXMuX2V2ZW50c1tldnRdXG4gICAgLCBldmVudHMgPSBbXTtcblxuICBpZiAoZm4pIHtcbiAgICBpZiAobGlzdGVuZXJzLmZuKSB7XG4gICAgICBpZiAoXG4gICAgICAgICAgIGxpc3RlbmVycy5mbiAhPT0gZm5cbiAgICAgICAgfHwgKG9uY2UgJiYgIWxpc3RlbmVycy5vbmNlKVxuICAgICAgICB8fCAoY29udGV4dCAmJiBsaXN0ZW5lcnMuY29udGV4dCAhPT0gY29udGV4dClcbiAgICAgICkge1xuICAgICAgICBldmVudHMucHVzaChsaXN0ZW5lcnMpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBmb3IgKHZhciBpID0gMCwgbGVuZ3RoID0gbGlzdGVuZXJzLmxlbmd0aDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICAgICBsaXN0ZW5lcnNbaV0uZm4gIT09IGZuXG4gICAgICAgICAgfHwgKG9uY2UgJiYgIWxpc3RlbmVyc1tpXS5vbmNlKVxuICAgICAgICAgIHx8IChjb250ZXh0ICYmIGxpc3RlbmVyc1tpXS5jb250ZXh0ICE9PSBjb250ZXh0KVxuICAgICAgICApIHtcbiAgICAgICAgICBldmVudHMucHVzaChsaXN0ZW5lcnNbaV0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLy9cbiAgLy8gUmVzZXQgdGhlIGFycmF5LCBvciByZW1vdmUgaXQgY29tcGxldGVseSBpZiB3ZSBoYXZlIG5vIG1vcmUgbGlzdGVuZXJzLlxuICAvL1xuICBpZiAoZXZlbnRzLmxlbmd0aCkge1xuICAgIHRoaXMuX2V2ZW50c1tldnRdID0gZXZlbnRzLmxlbmd0aCA9PT0gMSA/IGV2ZW50c1swXSA6IGV2ZW50cztcbiAgfSBlbHNlIHtcbiAgICBkZWxldGUgdGhpcy5fZXZlbnRzW2V2dF07XG4gIH1cblxuICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogUmVtb3ZlIGFsbCBsaXN0ZW5lcnMgb3Igb25seSB0aGUgbGlzdGVuZXJzIGZvciB0aGUgc3BlY2lmaWVkIGV2ZW50LlxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBldmVudCBUaGUgZXZlbnQgd2FudCB0byByZW1vdmUgYWxsIGxpc3RlbmVycyBmb3IuXG4gKiBAYXBpIHB1YmxpY1xuICovXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLnJlbW92ZUFsbExpc3RlbmVycyA9IGZ1bmN0aW9uIHJlbW92ZUFsbExpc3RlbmVycyhldmVudCkge1xuICBpZiAoIXRoaXMuX2V2ZW50cykgcmV0dXJuIHRoaXM7XG5cbiAgaWYgKGV2ZW50KSBkZWxldGUgdGhpcy5fZXZlbnRzW3ByZWZpeCA/IHByZWZpeCArIGV2ZW50IDogZXZlbnRdO1xuICBlbHNlIHRoaXMuX2V2ZW50cyA9IHByZWZpeCA/IHt9IDogT2JqZWN0LmNyZWF0ZShudWxsKTtcblxuICByZXR1cm4gdGhpcztcbn07XG5cbi8vXG4vLyBBbGlhcyBtZXRob2RzIG5hbWVzIGJlY2F1c2UgcGVvcGxlIHJvbGwgbGlrZSB0aGF0LlxuLy9cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUub2ZmID0gRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5yZW1vdmVMaXN0ZW5lcjtcbkV2ZW50RW1pdHRlci5wcm90b3R5cGUuYWRkTGlzdGVuZXIgPSBFdmVudEVtaXR0ZXIucHJvdG90eXBlLm9uO1xuXG4vL1xuLy8gVGhpcyBmdW5jdGlvbiBkb2Vzbid0IGFwcGx5IGFueW1vcmUuXG4vL1xuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5zZXRNYXhMaXN0ZW5lcnMgPSBmdW5jdGlvbiBzZXRNYXhMaXN0ZW5lcnMoKSB7XG4gIHJldHVybiB0aGlzO1xufTtcblxuLy9cbi8vIEV4cG9zZSB0aGUgcHJlZml4LlxuLy9cbkV2ZW50RW1pdHRlci5wcmVmaXhlZCA9IHByZWZpeDtcblxuLy9cbi8vIEV4cG9zZSB0aGUgbW9kdWxlLlxuLy9cbmlmICgndW5kZWZpbmVkJyAhPT0gdHlwZW9mIG1vZHVsZSkge1xuICBtb2R1bGUuZXhwb3J0cyA9IEV2ZW50RW1pdHRlcjtcbn1cbiIsIi8qIGVzbGludC1kaXNhYmxlIG5vLXVudXNlZC12YXJzICovXG4ndXNlIHN0cmljdCc7XG52YXIgaGFzT3duUHJvcGVydHkgPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O1xudmFyIHByb3BJc0VudW1lcmFibGUgPSBPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlO1xuXG5mdW5jdGlvbiB0b09iamVjdCh2YWwpIHtcblx0aWYgKHZhbCA9PT0gbnVsbCB8fCB2YWwgPT09IHVuZGVmaW5lZCkge1xuXHRcdHRocm93IG5ldyBUeXBlRXJyb3IoJ09iamVjdC5hc3NpZ24gY2Fubm90IGJlIGNhbGxlZCB3aXRoIG51bGwgb3IgdW5kZWZpbmVkJyk7XG5cdH1cblxuXHRyZXR1cm4gT2JqZWN0KHZhbCk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0LCBzb3VyY2UpIHtcblx0dmFyIGZyb207XG5cdHZhciB0byA9IHRvT2JqZWN0KHRhcmdldCk7XG5cdHZhciBzeW1ib2xzO1xuXG5cdGZvciAodmFyIHMgPSAxOyBzIDwgYXJndW1lbnRzLmxlbmd0aDsgcysrKSB7XG5cdFx0ZnJvbSA9IE9iamVjdChhcmd1bWVudHNbc10pO1xuXG5cdFx0Zm9yICh2YXIga2V5IGluIGZyb20pIHtcblx0XHRcdGlmIChoYXNPd25Qcm9wZXJ0eS5jYWxsKGZyb20sIGtleSkpIHtcblx0XHRcdFx0dG9ba2V5XSA9IGZyb21ba2V5XTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykge1xuXHRcdFx0c3ltYm9scyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZnJvbSk7XG5cdFx0XHRmb3IgKHZhciBpID0gMDsgaSA8IHN5bWJvbHMubGVuZ3RoOyBpKyspIHtcblx0XHRcdFx0aWYgKHByb3BJc0VudW1lcmFibGUuY2FsbChmcm9tLCBzeW1ib2xzW2ldKSkge1xuXHRcdFx0XHRcdHRvW3N5bWJvbHNbaV1dID0gZnJvbVtzeW1ib2xzW2ldXTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdHJldHVybiB0bztcbn07XG4iLCIvKiFcbiAqIGFzeW5jXG4gKiBodHRwczovL2dpdGh1Yi5jb20vY2FvbGFuL2FzeW5jXG4gKlxuICogQ29weXJpZ2h0IDIwMTAtMjAxNCBDYW9sYW4gTWNNYWhvblxuICogUmVsZWFzZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlXG4gKi9cbi8qanNoaW50IG9uZXZhcjogZmFsc2UsIGluZGVudDo0ICovXG4vKmdsb2JhbCBzZXRJbW1lZGlhdGU6IGZhbHNlLCBzZXRUaW1lb3V0OiBmYWxzZSwgY29uc29sZTogZmFsc2UgKi9cbihmdW5jdGlvbiAoKSB7XG5cbiAgICB2YXIgYXN5bmMgPSB7fTtcblxuICAgIC8vIGdsb2JhbCBvbiB0aGUgc2VydmVyLCB3aW5kb3cgaW4gdGhlIGJyb3dzZXJcbiAgICB2YXIgcm9vdCwgcHJldmlvdXNfYXN5bmM7XG5cbiAgICByb290ID0gdGhpcztcbiAgICBpZiAocm9vdCAhPSBudWxsKSB7XG4gICAgICBwcmV2aW91c19hc3luYyA9IHJvb3QuYXN5bmM7XG4gICAgfVxuXG4gICAgYXN5bmMubm9Db25mbGljdCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcm9vdC5hc3luYyA9IHByZXZpb3VzX2FzeW5jO1xuICAgICAgICByZXR1cm4gYXN5bmM7XG4gICAgfTtcblxuICAgIGZ1bmN0aW9uIG9ubHlfb25jZShmbikge1xuICAgICAgICB2YXIgY2FsbGVkID0gZmFsc2U7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIGlmIChjYWxsZWQpIHRocm93IG5ldyBFcnJvcihcIkNhbGxiYWNrIHdhcyBhbHJlYWR5IGNhbGxlZC5cIik7XG4gICAgICAgICAgICBjYWxsZWQgPSB0cnVlO1xuICAgICAgICAgICAgZm4uYXBwbHkocm9vdCwgYXJndW1lbnRzKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vLy8gY3Jvc3MtYnJvd3NlciBjb21wYXRpYmxpdHkgZnVuY3Rpb25zIC8vLy9cblxuICAgIHZhciBfdG9TdHJpbmcgPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nO1xuXG4gICAgdmFyIF9pc0FycmF5ID0gQXJyYXkuaXNBcnJheSB8fCBmdW5jdGlvbiAob2JqKSB7XG4gICAgICAgIHJldHVybiBfdG9TdHJpbmcuY2FsbChvYmopID09PSAnW29iamVjdCBBcnJheV0nO1xuICAgIH07XG5cbiAgICB2YXIgX2VhY2ggPSBmdW5jdGlvbiAoYXJyLCBpdGVyYXRvcikge1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFyci5sZW5ndGg7IGkgKz0gMSkge1xuICAgICAgICAgICAgaXRlcmF0b3IoYXJyW2ldLCBpLCBhcnIpO1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIHZhciBfbWFwID0gZnVuY3Rpb24gKGFyciwgaXRlcmF0b3IpIHtcbiAgICAgICAgaWYgKGFyci5tYXApIHtcbiAgICAgICAgICAgIHJldHVybiBhcnIubWFwKGl0ZXJhdG9yKTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgcmVzdWx0cyA9IFtdO1xuICAgICAgICBfZWFjaChhcnIsIGZ1bmN0aW9uICh4LCBpLCBhKSB7XG4gICAgICAgICAgICByZXN1bHRzLnB1c2goaXRlcmF0b3IoeCwgaSwgYSkpO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdHM7XG4gICAgfTtcblxuICAgIHZhciBfcmVkdWNlID0gZnVuY3Rpb24gKGFyciwgaXRlcmF0b3IsIG1lbW8pIHtcbiAgICAgICAgaWYgKGFyci5yZWR1Y2UpIHtcbiAgICAgICAgICAgIHJldHVybiBhcnIucmVkdWNlKGl0ZXJhdG9yLCBtZW1vKTtcbiAgICAgICAgfVxuICAgICAgICBfZWFjaChhcnIsIGZ1bmN0aW9uICh4LCBpLCBhKSB7XG4gICAgICAgICAgICBtZW1vID0gaXRlcmF0b3IobWVtbywgeCwgaSwgYSk7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gbWVtbztcbiAgICB9O1xuXG4gICAgdmFyIF9rZXlzID0gZnVuY3Rpb24gKG9iaikge1xuICAgICAgICBpZiAoT2JqZWN0LmtleXMpIHtcbiAgICAgICAgICAgIHJldHVybiBPYmplY3Qua2V5cyhvYmopO1xuICAgICAgICB9XG4gICAgICAgIHZhciBrZXlzID0gW107XG4gICAgICAgIGZvciAodmFyIGsgaW4gb2JqKSB7XG4gICAgICAgICAgICBpZiAob2JqLmhhc093blByb3BlcnR5KGspKSB7XG4gICAgICAgICAgICAgICAga2V5cy5wdXNoKGspO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBrZXlzO1xuICAgIH07XG5cbiAgICAvLy8vIGV4cG9ydGVkIGFzeW5jIG1vZHVsZSBmdW5jdGlvbnMgLy8vL1xuXG4gICAgLy8vLyBuZXh0VGljayBpbXBsZW1lbnRhdGlvbiB3aXRoIGJyb3dzZXItY29tcGF0aWJsZSBmYWxsYmFjayAvLy8vXG4gICAgaWYgKHR5cGVvZiBwcm9jZXNzID09PSAndW5kZWZpbmVkJyB8fCAhKHByb2Nlc3MubmV4dFRpY2spKSB7XG4gICAgICAgIGlmICh0eXBlb2Ygc2V0SW1tZWRpYXRlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICBhc3luYy5uZXh0VGljayA9IGZ1bmN0aW9uIChmbikge1xuICAgICAgICAgICAgICAgIC8vIG5vdCBhIGRpcmVjdCBhbGlhcyBmb3IgSUUxMCBjb21wYXRpYmlsaXR5XG4gICAgICAgICAgICAgICAgc2V0SW1tZWRpYXRlKGZuKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBhc3luYy5zZXRJbW1lZGlhdGUgPSBhc3luYy5uZXh0VGljaztcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGFzeW5jLm5leHRUaWNrID0gZnVuY3Rpb24gKGZuKSB7XG4gICAgICAgICAgICAgICAgc2V0VGltZW91dChmbiwgMCk7XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgYXN5bmMuc2V0SW1tZWRpYXRlID0gYXN5bmMubmV4dFRpY2s7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIGFzeW5jLm5leHRUaWNrID0gcHJvY2Vzcy5uZXh0VGljaztcbiAgICAgICAgaWYgKHR5cGVvZiBzZXRJbW1lZGlhdGUgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICBhc3luYy5zZXRJbW1lZGlhdGUgPSBmdW5jdGlvbiAoZm4pIHtcbiAgICAgICAgICAgICAgLy8gbm90IGEgZGlyZWN0IGFsaWFzIGZvciBJRTEwIGNvbXBhdGliaWxpdHlcbiAgICAgICAgICAgICAgc2V0SW1tZWRpYXRlKGZuKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBhc3luYy5zZXRJbW1lZGlhdGUgPSBhc3luYy5uZXh0VGljaztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGFzeW5jLmVhY2ggPSBmdW5jdGlvbiAoYXJyLCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgY2FsbGJhY2sgPSBjYWxsYmFjayB8fCBmdW5jdGlvbiAoKSB7fTtcbiAgICAgICAgaWYgKCFhcnIubGVuZ3RoKSB7XG4gICAgICAgICAgICByZXR1cm4gY2FsbGJhY2soKTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgY29tcGxldGVkID0gMDtcbiAgICAgICAgX2VhY2goYXJyLCBmdW5jdGlvbiAoeCkge1xuICAgICAgICAgICAgaXRlcmF0b3IoeCwgb25seV9vbmNlKGRvbmUpICk7XG4gICAgICAgIH0pO1xuICAgICAgICBmdW5jdGlvbiBkb25lKGVycikge1xuICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgICAgY2FsbGJhY2sgPSBmdW5jdGlvbiAoKSB7fTtcbiAgICAgICAgICB9XG4gICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgIGNvbXBsZXRlZCArPSAxO1xuICAgICAgICAgICAgICBpZiAoY29tcGxldGVkID49IGFyci5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9O1xuICAgIGFzeW5jLmZvckVhY2ggPSBhc3luYy5lYWNoO1xuXG4gICAgYXN5bmMuZWFjaFNlcmllcyA9IGZ1bmN0aW9uIChhcnIsIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICBjYWxsYmFjayA9IGNhbGxiYWNrIHx8IGZ1bmN0aW9uICgpIHt9O1xuICAgICAgICBpZiAoIWFyci5sZW5ndGgpIHtcbiAgICAgICAgICAgIHJldHVybiBjYWxsYmFjaygpO1xuICAgICAgICB9XG4gICAgICAgIHZhciBjb21wbGV0ZWQgPSAwO1xuICAgICAgICB2YXIgaXRlcmF0ZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGl0ZXJhdG9yKGFycltjb21wbGV0ZWRdLCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayA9IGZ1bmN0aW9uICgpIHt9O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgY29tcGxldGVkICs9IDE7XG4gICAgICAgICAgICAgICAgICAgIGlmIChjb21wbGV0ZWQgPj0gYXJyLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGl0ZXJhdGUoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9O1xuICAgICAgICBpdGVyYXRlKCk7XG4gICAgfTtcbiAgICBhc3luYy5mb3JFYWNoU2VyaWVzID0gYXN5bmMuZWFjaFNlcmllcztcblxuICAgIGFzeW5jLmVhY2hMaW1pdCA9IGZ1bmN0aW9uIChhcnIsIGxpbWl0LCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgdmFyIGZuID0gX2VhY2hMaW1pdChsaW1pdCk7XG4gICAgICAgIGZuLmFwcGx5KG51bGwsIFthcnIsIGl0ZXJhdG9yLCBjYWxsYmFja10pO1xuICAgIH07XG4gICAgYXN5bmMuZm9yRWFjaExpbWl0ID0gYXN5bmMuZWFjaExpbWl0O1xuXG4gICAgdmFyIF9lYWNoTGltaXQgPSBmdW5jdGlvbiAobGltaXQpIHtcblxuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKGFyciwgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICBjYWxsYmFjayA9IGNhbGxiYWNrIHx8IGZ1bmN0aW9uICgpIHt9O1xuICAgICAgICAgICAgaWYgKCFhcnIubGVuZ3RoIHx8IGxpbWl0IDw9IDApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gY2FsbGJhY2soKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHZhciBjb21wbGV0ZWQgPSAwO1xuICAgICAgICAgICAgdmFyIHN0YXJ0ZWQgPSAwO1xuICAgICAgICAgICAgdmFyIHJ1bm5pbmcgPSAwO1xuXG4gICAgICAgICAgICAoZnVuY3Rpb24gcmVwbGVuaXNoICgpIHtcbiAgICAgICAgICAgICAgICBpZiAoY29tcGxldGVkID49IGFyci5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKCk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgd2hpbGUgKHJ1bm5pbmcgPCBsaW1pdCAmJiBzdGFydGVkIDwgYXJyLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICBzdGFydGVkICs9IDE7XG4gICAgICAgICAgICAgICAgICAgIHJ1bm5pbmcgKz0gMTtcbiAgICAgICAgICAgICAgICAgICAgaXRlcmF0b3IoYXJyW3N0YXJ0ZWQgLSAxXSwgZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2sgPSBmdW5jdGlvbiAoKSB7fTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBsZXRlZCArPSAxO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJ1bm5pbmcgLT0gMTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY29tcGxldGVkID49IGFyci5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcGxlbmlzaCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSkoKTtcbiAgICAgICAgfTtcbiAgICB9O1xuXG5cbiAgICB2YXIgZG9QYXJhbGxlbCA9IGZ1bmN0aW9uIChmbikge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIGFyZ3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMpO1xuICAgICAgICAgICAgcmV0dXJuIGZuLmFwcGx5KG51bGwsIFthc3luYy5lYWNoXS5jb25jYXQoYXJncykpO1xuICAgICAgICB9O1xuICAgIH07XG4gICAgdmFyIGRvUGFyYWxsZWxMaW1pdCA9IGZ1bmN0aW9uKGxpbWl0LCBmbikge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIGFyZ3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMpO1xuICAgICAgICAgICAgcmV0dXJuIGZuLmFwcGx5KG51bGwsIFtfZWFjaExpbWl0KGxpbWl0KV0uY29uY2F0KGFyZ3MpKTtcbiAgICAgICAgfTtcbiAgICB9O1xuICAgIHZhciBkb1NlcmllcyA9IGZ1bmN0aW9uIChmbikge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIGFyZ3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMpO1xuICAgICAgICAgICAgcmV0dXJuIGZuLmFwcGx5KG51bGwsIFthc3luYy5lYWNoU2VyaWVzXS5jb25jYXQoYXJncykpO1xuICAgICAgICB9O1xuICAgIH07XG5cblxuICAgIHZhciBfYXN5bmNNYXAgPSBmdW5jdGlvbiAoZWFjaGZuLCBhcnIsIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICBhcnIgPSBfbWFwKGFyciwgZnVuY3Rpb24gKHgsIGkpIHtcbiAgICAgICAgICAgIHJldHVybiB7aW5kZXg6IGksIHZhbHVlOiB4fTtcbiAgICAgICAgfSk7XG4gICAgICAgIGlmICghY2FsbGJhY2spIHtcbiAgICAgICAgICAgIGVhY2hmbihhcnIsIGZ1bmN0aW9uICh4LCBjYWxsYmFjaykge1xuICAgICAgICAgICAgICAgIGl0ZXJhdG9yKHgudmFsdWUsIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdmFyIHJlc3VsdHMgPSBbXTtcbiAgICAgICAgICAgIGVhY2hmbihhcnIsIGZ1bmN0aW9uICh4LCBjYWxsYmFjaykge1xuICAgICAgICAgICAgICAgIGl0ZXJhdG9yKHgudmFsdWUsIGZ1bmN0aW9uIChlcnIsIHYpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0c1t4LmluZGV4XSA9IHY7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9LCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2soZXJyLCByZXN1bHRzKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBhc3luYy5tYXAgPSBkb1BhcmFsbGVsKF9hc3luY01hcCk7XG4gICAgYXN5bmMubWFwU2VyaWVzID0gZG9TZXJpZXMoX2FzeW5jTWFwKTtcbiAgICBhc3luYy5tYXBMaW1pdCA9IGZ1bmN0aW9uIChhcnIsIGxpbWl0LCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgcmV0dXJuIF9tYXBMaW1pdChsaW1pdCkoYXJyLCBpdGVyYXRvciwgY2FsbGJhY2spO1xuICAgIH07XG5cbiAgICB2YXIgX21hcExpbWl0ID0gZnVuY3Rpb24obGltaXQpIHtcbiAgICAgICAgcmV0dXJuIGRvUGFyYWxsZWxMaW1pdChsaW1pdCwgX2FzeW5jTWFwKTtcbiAgICB9O1xuXG4gICAgLy8gcmVkdWNlIG9ubHkgaGFzIGEgc2VyaWVzIHZlcnNpb24sIGFzIGRvaW5nIHJlZHVjZSBpbiBwYXJhbGxlbCB3b24ndFxuICAgIC8vIHdvcmsgaW4gbWFueSBzaXR1YXRpb25zLlxuICAgIGFzeW5jLnJlZHVjZSA9IGZ1bmN0aW9uIChhcnIsIG1lbW8sIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICBhc3luYy5lYWNoU2VyaWVzKGFyciwgZnVuY3Rpb24gKHgsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICBpdGVyYXRvcihtZW1vLCB4LCBmdW5jdGlvbiAoZXJyLCB2KSB7XG4gICAgICAgICAgICAgICAgbWVtbyA9IHY7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICBjYWxsYmFjayhlcnIsIG1lbW8pO1xuICAgICAgICB9KTtcbiAgICB9O1xuICAgIC8vIGluamVjdCBhbGlhc1xuICAgIGFzeW5jLmluamVjdCA9IGFzeW5jLnJlZHVjZTtcbiAgICAvLyBmb2xkbCBhbGlhc1xuICAgIGFzeW5jLmZvbGRsID0gYXN5bmMucmVkdWNlO1xuXG4gICAgYXN5bmMucmVkdWNlUmlnaHQgPSBmdW5jdGlvbiAoYXJyLCBtZW1vLCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgdmFyIHJldmVyc2VkID0gX21hcChhcnIsIGZ1bmN0aW9uICh4KSB7XG4gICAgICAgICAgICByZXR1cm4geDtcbiAgICAgICAgfSkucmV2ZXJzZSgpO1xuICAgICAgICBhc3luYy5yZWR1Y2UocmV2ZXJzZWQsIG1lbW8sIGl0ZXJhdG9yLCBjYWxsYmFjayk7XG4gICAgfTtcbiAgICAvLyBmb2xkciBhbGlhc1xuICAgIGFzeW5jLmZvbGRyID0gYXN5bmMucmVkdWNlUmlnaHQ7XG5cbiAgICB2YXIgX2ZpbHRlciA9IGZ1bmN0aW9uIChlYWNoZm4sIGFyciwgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgIHZhciByZXN1bHRzID0gW107XG4gICAgICAgIGFyciA9IF9tYXAoYXJyLCBmdW5jdGlvbiAoeCwgaSkge1xuICAgICAgICAgICAgcmV0dXJuIHtpbmRleDogaSwgdmFsdWU6IHh9O1xuICAgICAgICB9KTtcbiAgICAgICAgZWFjaGZuKGFyciwgZnVuY3Rpb24gKHgsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICBpdGVyYXRvcih4LnZhbHVlLCBmdW5jdGlvbiAodikge1xuICAgICAgICAgICAgICAgIGlmICh2KSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdHMucHVzaCh4KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2FsbGJhY2soKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICBjYWxsYmFjayhfbWFwKHJlc3VsdHMuc29ydChmdW5jdGlvbiAoYSwgYikge1xuICAgICAgICAgICAgICAgIHJldHVybiBhLmluZGV4IC0gYi5pbmRleDtcbiAgICAgICAgICAgIH0pLCBmdW5jdGlvbiAoeCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB4LnZhbHVlO1xuICAgICAgICAgICAgfSkpO1xuICAgICAgICB9KTtcbiAgICB9O1xuICAgIGFzeW5jLmZpbHRlciA9IGRvUGFyYWxsZWwoX2ZpbHRlcik7XG4gICAgYXN5bmMuZmlsdGVyU2VyaWVzID0gZG9TZXJpZXMoX2ZpbHRlcik7XG4gICAgLy8gc2VsZWN0IGFsaWFzXG4gICAgYXN5bmMuc2VsZWN0ID0gYXN5bmMuZmlsdGVyO1xuICAgIGFzeW5jLnNlbGVjdFNlcmllcyA9IGFzeW5jLmZpbHRlclNlcmllcztcblxuICAgIHZhciBfcmVqZWN0ID0gZnVuY3Rpb24gKGVhY2hmbiwgYXJyLCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgdmFyIHJlc3VsdHMgPSBbXTtcbiAgICAgICAgYXJyID0gX21hcChhcnIsIGZ1bmN0aW9uICh4LCBpKSB7XG4gICAgICAgICAgICByZXR1cm4ge2luZGV4OiBpLCB2YWx1ZTogeH07XG4gICAgICAgIH0pO1xuICAgICAgICBlYWNoZm4oYXJyLCBmdW5jdGlvbiAoeCwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIGl0ZXJhdG9yKHgudmFsdWUsIGZ1bmN0aW9uICh2KSB7XG4gICAgICAgICAgICAgICAgaWYgKCF2KSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdHMucHVzaCh4KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2FsbGJhY2soKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICBjYWxsYmFjayhfbWFwKHJlc3VsdHMuc29ydChmdW5jdGlvbiAoYSwgYikge1xuICAgICAgICAgICAgICAgIHJldHVybiBhLmluZGV4IC0gYi5pbmRleDtcbiAgICAgICAgICAgIH0pLCBmdW5jdGlvbiAoeCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB4LnZhbHVlO1xuICAgICAgICAgICAgfSkpO1xuICAgICAgICB9KTtcbiAgICB9O1xuICAgIGFzeW5jLnJlamVjdCA9IGRvUGFyYWxsZWwoX3JlamVjdCk7XG4gICAgYXN5bmMucmVqZWN0U2VyaWVzID0gZG9TZXJpZXMoX3JlamVjdCk7XG5cbiAgICB2YXIgX2RldGVjdCA9IGZ1bmN0aW9uIChlYWNoZm4sIGFyciwgaXRlcmF0b3IsIG1haW5fY2FsbGJhY2spIHtcbiAgICAgICAgZWFjaGZuKGFyciwgZnVuY3Rpb24gKHgsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICBpdGVyYXRvcih4LCBmdW5jdGlvbiAocmVzdWx0KSB7XG4gICAgICAgICAgICAgICAgaWYgKHJlc3VsdCkge1xuICAgICAgICAgICAgICAgICAgICBtYWluX2NhbGxiYWNrKHgpO1xuICAgICAgICAgICAgICAgICAgICBtYWluX2NhbGxiYWNrID0gZnVuY3Rpb24gKCkge307XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICBtYWluX2NhbGxiYWNrKCk7XG4gICAgICAgIH0pO1xuICAgIH07XG4gICAgYXN5bmMuZGV0ZWN0ID0gZG9QYXJhbGxlbChfZGV0ZWN0KTtcbiAgICBhc3luYy5kZXRlY3RTZXJpZXMgPSBkb1NlcmllcyhfZGV0ZWN0KTtcblxuICAgIGFzeW5jLnNvbWUgPSBmdW5jdGlvbiAoYXJyLCBpdGVyYXRvciwgbWFpbl9jYWxsYmFjaykge1xuICAgICAgICBhc3luYy5lYWNoKGFyciwgZnVuY3Rpb24gKHgsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICBpdGVyYXRvcih4LCBmdW5jdGlvbiAodikge1xuICAgICAgICAgICAgICAgIGlmICh2KSB7XG4gICAgICAgICAgICAgICAgICAgIG1haW5fY2FsbGJhY2sodHJ1ZSk7XG4gICAgICAgICAgICAgICAgICAgIG1haW5fY2FsbGJhY2sgPSBmdW5jdGlvbiAoKSB7fTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2FsbGJhY2soKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICBtYWluX2NhbGxiYWNrKGZhbHNlKTtcbiAgICAgICAgfSk7XG4gICAgfTtcbiAgICAvLyBhbnkgYWxpYXNcbiAgICBhc3luYy5hbnkgPSBhc3luYy5zb21lO1xuXG4gICAgYXN5bmMuZXZlcnkgPSBmdW5jdGlvbiAoYXJyLCBpdGVyYXRvciwgbWFpbl9jYWxsYmFjaykge1xuICAgICAgICBhc3luYy5lYWNoKGFyciwgZnVuY3Rpb24gKHgsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICBpdGVyYXRvcih4LCBmdW5jdGlvbiAodikge1xuICAgICAgICAgICAgICAgIGlmICghdikge1xuICAgICAgICAgICAgICAgICAgICBtYWluX2NhbGxiYWNrKGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgICAgbWFpbl9jYWxsYmFjayA9IGZ1bmN0aW9uICgpIHt9O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgIG1haW5fY2FsbGJhY2sodHJ1ZSk7XG4gICAgICAgIH0pO1xuICAgIH07XG4gICAgLy8gYWxsIGFsaWFzXG4gICAgYXN5bmMuYWxsID0gYXN5bmMuZXZlcnk7XG5cbiAgICBhc3luYy5zb3J0QnkgPSBmdW5jdGlvbiAoYXJyLCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgYXN5bmMubWFwKGFyciwgZnVuY3Rpb24gKHgsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICBpdGVyYXRvcih4LCBmdW5jdGlvbiAoZXJyLCBjcml0ZXJpYSkge1xuICAgICAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKG51bGwsIHt2YWx1ZTogeCwgY3JpdGVyaWE6IGNyaXRlcmlhfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sIGZ1bmN0aW9uIChlcnIsIHJlc3VsdHMpIHtcbiAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHZhciBmbiA9IGZ1bmN0aW9uIChsZWZ0LCByaWdodCkge1xuICAgICAgICAgICAgICAgICAgICB2YXIgYSA9IGxlZnQuY3JpdGVyaWEsIGIgPSByaWdodC5jcml0ZXJpYTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGEgPCBiID8gLTEgOiBhID4gYiA/IDEgOiAwO1xuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgY2FsbGJhY2sobnVsbCwgX21hcChyZXN1bHRzLnNvcnQoZm4pLCBmdW5jdGlvbiAoeCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4geC52YWx1ZTtcbiAgICAgICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH07XG5cbiAgICBhc3luYy5hdXRvID0gZnVuY3Rpb24gKHRhc2tzLCBjYWxsYmFjaykge1xuICAgICAgICBjYWxsYmFjayA9IGNhbGxiYWNrIHx8IGZ1bmN0aW9uICgpIHt9O1xuICAgICAgICB2YXIga2V5cyA9IF9rZXlzKHRhc2tzKTtcbiAgICAgICAgdmFyIHJlbWFpbmluZ1Rhc2tzID0ga2V5cy5sZW5ndGhcbiAgICAgICAgaWYgKCFyZW1haW5pbmdUYXNrcykge1xuICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKCk7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgcmVzdWx0cyA9IHt9O1xuXG4gICAgICAgIHZhciBsaXN0ZW5lcnMgPSBbXTtcbiAgICAgICAgdmFyIGFkZExpc3RlbmVyID0gZnVuY3Rpb24gKGZuKSB7XG4gICAgICAgICAgICBsaXN0ZW5lcnMudW5zaGlmdChmbik7XG4gICAgICAgIH07XG4gICAgICAgIHZhciByZW1vdmVMaXN0ZW5lciA9IGZ1bmN0aW9uIChmbikge1xuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsaXN0ZW5lcnMubGVuZ3RoOyBpICs9IDEpIHtcbiAgICAgICAgICAgICAgICBpZiAobGlzdGVuZXJzW2ldID09PSBmbikge1xuICAgICAgICAgICAgICAgICAgICBsaXN0ZW5lcnMuc3BsaWNlKGksIDEpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICB2YXIgdGFza0NvbXBsZXRlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmVtYWluaW5nVGFza3MtLVxuICAgICAgICAgICAgX2VhY2gobGlzdGVuZXJzLnNsaWNlKDApLCBmdW5jdGlvbiAoZm4pIHtcbiAgICAgICAgICAgICAgICBmbigpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH07XG5cbiAgICAgICAgYWRkTGlzdGVuZXIoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgaWYgKCFyZW1haW5pbmdUYXNrcykge1xuICAgICAgICAgICAgICAgIHZhciB0aGVDYWxsYmFjayA9IGNhbGxiYWNrO1xuICAgICAgICAgICAgICAgIC8vIHByZXZlbnQgZmluYWwgY2FsbGJhY2sgZnJvbSBjYWxsaW5nIGl0c2VsZiBpZiBpdCBlcnJvcnNcbiAgICAgICAgICAgICAgICBjYWxsYmFjayA9IGZ1bmN0aW9uICgpIHt9O1xuXG4gICAgICAgICAgICAgICAgdGhlQ2FsbGJhY2sobnVsbCwgcmVzdWx0cyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIF9lYWNoKGtleXMsIGZ1bmN0aW9uIChrKSB7XG4gICAgICAgICAgICB2YXIgdGFzayA9IF9pc0FycmF5KHRhc2tzW2tdKSA/IHRhc2tzW2tdOiBbdGFza3Nba11dO1xuICAgICAgICAgICAgdmFyIHRhc2tDYWxsYmFjayA9IGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgICAgICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMSk7XG4gICAgICAgICAgICAgICAgaWYgKGFyZ3MubGVuZ3RoIDw9IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgYXJncyA9IGFyZ3NbMF07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHNhZmVSZXN1bHRzID0ge307XG4gICAgICAgICAgICAgICAgICAgIF9lYWNoKF9rZXlzKHJlc3VsdHMpLCBmdW5jdGlvbihya2V5KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzYWZlUmVzdWx0c1tya2V5XSA9IHJlc3VsdHNbcmtleV07XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICBzYWZlUmVzdWx0c1trXSA9IGFyZ3M7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKGVyciwgc2FmZVJlc3VsdHMpO1xuICAgICAgICAgICAgICAgICAgICAvLyBzdG9wIHN1YnNlcXVlbnQgZXJyb3JzIGhpdHRpbmcgY2FsbGJhY2sgbXVsdGlwbGUgdGltZXNcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2sgPSBmdW5jdGlvbiAoKSB7fTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdHNba10gPSBhcmdzO1xuICAgICAgICAgICAgICAgICAgICBhc3luYy5zZXRJbW1lZGlhdGUodGFza0NvbXBsZXRlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgdmFyIHJlcXVpcmVzID0gdGFzay5zbGljZSgwLCBNYXRoLmFicyh0YXNrLmxlbmd0aCAtIDEpKSB8fCBbXTtcbiAgICAgICAgICAgIHZhciByZWFkeSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gX3JlZHVjZShyZXF1aXJlcywgZnVuY3Rpb24gKGEsIHgpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChhICYmIHJlc3VsdHMuaGFzT3duUHJvcGVydHkoeCkpO1xuICAgICAgICAgICAgICAgIH0sIHRydWUpICYmICFyZXN1bHRzLmhhc093blByb3BlcnR5KGspO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGlmIChyZWFkeSgpKSB7XG4gICAgICAgICAgICAgICAgdGFza1t0YXNrLmxlbmd0aCAtIDFdKHRhc2tDYWxsYmFjaywgcmVzdWx0cyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICB2YXIgbGlzdGVuZXIgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChyZWFkeSgpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZW1vdmVMaXN0ZW5lcihsaXN0ZW5lcik7XG4gICAgICAgICAgICAgICAgICAgICAgICB0YXNrW3Rhc2subGVuZ3RoIC0gMV0odGFza0NhbGxiYWNrLCByZXN1bHRzKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgYWRkTGlzdGVuZXIobGlzdGVuZXIpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9O1xuXG4gICAgYXN5bmMucmV0cnkgPSBmdW5jdGlvbih0aW1lcywgdGFzaywgY2FsbGJhY2spIHtcbiAgICAgICAgdmFyIERFRkFVTFRfVElNRVMgPSA1O1xuICAgICAgICB2YXIgYXR0ZW1wdHMgPSBbXTtcbiAgICAgICAgLy8gVXNlIGRlZmF1bHRzIGlmIHRpbWVzIG5vdCBwYXNzZWRcbiAgICAgICAgaWYgKHR5cGVvZiB0aW1lcyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgY2FsbGJhY2sgPSB0YXNrO1xuICAgICAgICAgICAgdGFzayA9IHRpbWVzO1xuICAgICAgICAgICAgdGltZXMgPSBERUZBVUxUX1RJTUVTO1xuICAgICAgICB9XG4gICAgICAgIC8vIE1ha2Ugc3VyZSB0aW1lcyBpcyBhIG51bWJlclxuICAgICAgICB0aW1lcyA9IHBhcnNlSW50KHRpbWVzLCAxMCkgfHwgREVGQVVMVF9USU1FUztcbiAgICAgICAgdmFyIHdyYXBwZWRUYXNrID0gZnVuY3Rpb24od3JhcHBlZENhbGxiYWNrLCB3cmFwcGVkUmVzdWx0cykge1xuICAgICAgICAgICAgdmFyIHJldHJ5QXR0ZW1wdCA9IGZ1bmN0aW9uKHRhc2ssIGZpbmFsQXR0ZW1wdCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbihzZXJpZXNDYWxsYmFjaykge1xuICAgICAgICAgICAgICAgICAgICB0YXNrKGZ1bmN0aW9uKGVyciwgcmVzdWx0KXtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlcmllc0NhbGxiYWNrKCFlcnIgfHwgZmluYWxBdHRlbXB0LCB7ZXJyOiBlcnIsIHJlc3VsdDogcmVzdWx0fSk7XG4gICAgICAgICAgICAgICAgICAgIH0sIHdyYXBwZWRSZXN1bHRzKTtcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIHdoaWxlICh0aW1lcykge1xuICAgICAgICAgICAgICAgIGF0dGVtcHRzLnB1c2gocmV0cnlBdHRlbXB0KHRhc2ssICEodGltZXMtPTEpKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBhc3luYy5zZXJpZXMoYXR0ZW1wdHMsIGZ1bmN0aW9uKGRvbmUsIGRhdGEpe1xuICAgICAgICAgICAgICAgIGRhdGEgPSBkYXRhW2RhdGEubGVuZ3RoIC0gMV07XG4gICAgICAgICAgICAgICAgKHdyYXBwZWRDYWxsYmFjayB8fCBjYWxsYmFjaykoZGF0YS5lcnIsIGRhdGEucmVzdWx0KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIC8vIElmIGEgY2FsbGJhY2sgaXMgcGFzc2VkLCBydW4gdGhpcyBhcyBhIGNvbnRyb2xsIGZsb3dcbiAgICAgICAgcmV0dXJuIGNhbGxiYWNrID8gd3JhcHBlZFRhc2soKSA6IHdyYXBwZWRUYXNrXG4gICAgfTtcblxuICAgIGFzeW5jLndhdGVyZmFsbCA9IGZ1bmN0aW9uICh0YXNrcywgY2FsbGJhY2spIHtcbiAgICAgICAgY2FsbGJhY2sgPSBjYWxsYmFjayB8fCBmdW5jdGlvbiAoKSB7fTtcbiAgICAgICAgaWYgKCFfaXNBcnJheSh0YXNrcykpIHtcbiAgICAgICAgICB2YXIgZXJyID0gbmV3IEVycm9yKCdGaXJzdCBhcmd1bWVudCB0byB3YXRlcmZhbGwgbXVzdCBiZSBhbiBhcnJheSBvZiBmdW5jdGlvbnMnKTtcbiAgICAgICAgICByZXR1cm4gY2FsbGJhY2soZXJyKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIXRhc2tzLmxlbmd0aCkge1xuICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKCk7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIHdyYXBJdGVyYXRvciA9IGZ1bmN0aW9uIChpdGVyYXRvcikge1xuICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrID0gZnVuY3Rpb24gKCkge307XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMSk7XG4gICAgICAgICAgICAgICAgICAgIHZhciBuZXh0ID0gaXRlcmF0b3IubmV4dCgpO1xuICAgICAgICAgICAgICAgICAgICBpZiAobmV4dCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgYXJncy5wdXNoKHdyYXBJdGVyYXRvcihuZXh0KSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhcmdzLnB1c2goY2FsbGJhY2spO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGFzeW5jLnNldEltbWVkaWF0ZShmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpdGVyYXRvci5hcHBseShudWxsLCBhcmdzKTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfTtcbiAgICAgICAgfTtcbiAgICAgICAgd3JhcEl0ZXJhdG9yKGFzeW5jLml0ZXJhdG9yKHRhc2tzKSkoKTtcbiAgICB9O1xuXG4gICAgdmFyIF9wYXJhbGxlbCA9IGZ1bmN0aW9uKGVhY2hmbiwgdGFza3MsIGNhbGxiYWNrKSB7XG4gICAgICAgIGNhbGxiYWNrID0gY2FsbGJhY2sgfHwgZnVuY3Rpb24gKCkge307XG4gICAgICAgIGlmIChfaXNBcnJheSh0YXNrcykpIHtcbiAgICAgICAgICAgIGVhY2hmbi5tYXAodGFza3MsIGZ1bmN0aW9uIChmbiwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgICAgICBpZiAoZm4pIHtcbiAgICAgICAgICAgICAgICAgICAgZm4oZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGFyZ3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsIDEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFyZ3MubGVuZ3RoIDw9IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmdzID0gYXJnc1swXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrLmNhbGwobnVsbCwgZXJyLCBhcmdzKTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSwgY2FsbGJhY2spO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdmFyIHJlc3VsdHMgPSB7fTtcbiAgICAgICAgICAgIGVhY2hmbi5lYWNoKF9rZXlzKHRhc2tzKSwgZnVuY3Rpb24gKGssIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICAgICAgdGFza3Nba10oZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgICAgICAgICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMSk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChhcmdzLmxlbmd0aCA8PSAxKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhcmdzID0gYXJnc1swXTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICByZXN1bHRzW2tdID0gYXJncztcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0sIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnIsIHJlc3VsdHMpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgYXN5bmMucGFyYWxsZWwgPSBmdW5jdGlvbiAodGFza3MsIGNhbGxiYWNrKSB7XG4gICAgICAgIF9wYXJhbGxlbCh7IG1hcDogYXN5bmMubWFwLCBlYWNoOiBhc3luYy5lYWNoIH0sIHRhc2tzLCBjYWxsYmFjayk7XG4gICAgfTtcblxuICAgIGFzeW5jLnBhcmFsbGVsTGltaXQgPSBmdW5jdGlvbih0YXNrcywgbGltaXQsIGNhbGxiYWNrKSB7XG4gICAgICAgIF9wYXJhbGxlbCh7IG1hcDogX21hcExpbWl0KGxpbWl0KSwgZWFjaDogX2VhY2hMaW1pdChsaW1pdCkgfSwgdGFza3MsIGNhbGxiYWNrKTtcbiAgICB9O1xuXG4gICAgYXN5bmMuc2VyaWVzID0gZnVuY3Rpb24gKHRhc2tzLCBjYWxsYmFjaykge1xuICAgICAgICBjYWxsYmFjayA9IGNhbGxiYWNrIHx8IGZ1bmN0aW9uICgpIHt9O1xuICAgICAgICBpZiAoX2lzQXJyYXkodGFza3MpKSB7XG4gICAgICAgICAgICBhc3luYy5tYXBTZXJpZXModGFza3MsIGZ1bmN0aW9uIChmbiwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgICAgICBpZiAoZm4pIHtcbiAgICAgICAgICAgICAgICAgICAgZm4oZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGFyZ3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsIDEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFyZ3MubGVuZ3RoIDw9IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmdzID0gYXJnc1swXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrLmNhbGwobnVsbCwgZXJyLCBhcmdzKTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSwgY2FsbGJhY2spO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdmFyIHJlc3VsdHMgPSB7fTtcbiAgICAgICAgICAgIGFzeW5jLmVhY2hTZXJpZXMoX2tleXModGFza3MpLCBmdW5jdGlvbiAoaywgY2FsbGJhY2spIHtcbiAgICAgICAgICAgICAgICB0YXNrc1trXShmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBhcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGFyZ3MubGVuZ3RoIDw9IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3MgPSBhcmdzWzBdO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdHNba10gPSBhcmdzO1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSwgZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrKGVyciwgcmVzdWx0cyk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH07XG5cbiAgICBhc3luYy5pdGVyYXRvciA9IGZ1bmN0aW9uICh0YXNrcykge1xuICAgICAgICB2YXIgbWFrZUNhbGxiYWNrID0gZnVuY3Rpb24gKGluZGV4KSB7XG4gICAgICAgICAgICB2YXIgZm4gPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgaWYgKHRhc2tzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICB0YXNrc1tpbmRleF0uYXBwbHkobnVsbCwgYXJndW1lbnRzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZuLm5leHQoKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBmbi5uZXh0ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiAoaW5kZXggPCB0YXNrcy5sZW5ndGggLSAxKSA/IG1ha2VDYWxsYmFjayhpbmRleCArIDEpOiBudWxsO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIHJldHVybiBmbjtcbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIG1ha2VDYWxsYmFjaygwKTtcbiAgICB9O1xuXG4gICAgYXN5bmMuYXBwbHkgPSBmdW5jdGlvbiAoZm4pIHtcbiAgICAgICAgdmFyIGFyZ3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsIDEpO1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIGZuLmFwcGx5KFxuICAgICAgICAgICAgICAgIG51bGwsIGFyZ3MuY29uY2F0KEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cykpXG4gICAgICAgICAgICApO1xuICAgICAgICB9O1xuICAgIH07XG5cbiAgICB2YXIgX2NvbmNhdCA9IGZ1bmN0aW9uIChlYWNoZm4sIGFyciwgZm4sIGNhbGxiYWNrKSB7XG4gICAgICAgIHZhciByID0gW107XG4gICAgICAgIGVhY2hmbihhcnIsIGZ1bmN0aW9uICh4LCBjYikge1xuICAgICAgICAgICAgZm4oeCwgZnVuY3Rpb24gKGVyciwgeSkge1xuICAgICAgICAgICAgICAgIHIgPSByLmNvbmNhdCh5IHx8IFtdKTtcbiAgICAgICAgICAgICAgICBjYihlcnIpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgIGNhbGxiYWNrKGVyciwgcik7XG4gICAgICAgIH0pO1xuICAgIH07XG4gICAgYXN5bmMuY29uY2F0ID0gZG9QYXJhbGxlbChfY29uY2F0KTtcbiAgICBhc3luYy5jb25jYXRTZXJpZXMgPSBkb1NlcmllcyhfY29uY2F0KTtcblxuICAgIGFzeW5jLndoaWxzdCA9IGZ1bmN0aW9uICh0ZXN0LCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgaWYgKHRlc3QoKSkge1xuICAgICAgICAgICAgaXRlcmF0b3IoZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGFzeW5jLndoaWxzdCh0ZXN0LCBpdGVyYXRvciwgY2FsbGJhY2spO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIGFzeW5jLmRvV2hpbHN0ID0gZnVuY3Rpb24gKGl0ZXJhdG9yLCB0ZXN0LCBjYWxsYmFjaykge1xuICAgICAgICBpdGVyYXRvcihmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMSk7XG4gICAgICAgICAgICBpZiAodGVzdC5hcHBseShudWxsLCBhcmdzKSkge1xuICAgICAgICAgICAgICAgIGFzeW5jLmRvV2hpbHN0KGl0ZXJhdG9yLCB0ZXN0LCBjYWxsYmFjayk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9O1xuXG4gICAgYXN5bmMudW50aWwgPSBmdW5jdGlvbiAodGVzdCwgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgIGlmICghdGVzdCgpKSB7XG4gICAgICAgICAgICBpdGVyYXRvcihmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYXN5bmMudW50aWwodGVzdCwgaXRlcmF0b3IsIGNhbGxiYWNrKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgY2FsbGJhY2soKTtcbiAgICAgICAgfVxuICAgIH07XG5cbiAgICBhc3luYy5kb1VudGlsID0gZnVuY3Rpb24gKGl0ZXJhdG9yLCB0ZXN0LCBjYWxsYmFjaykge1xuICAgICAgICBpdGVyYXRvcihmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMSk7XG4gICAgICAgICAgICBpZiAoIXRlc3QuYXBwbHkobnVsbCwgYXJncykpIHtcbiAgICAgICAgICAgICAgICBhc3luYy5kb1VudGlsKGl0ZXJhdG9yLCB0ZXN0LCBjYWxsYmFjayk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9O1xuXG4gICAgYXN5bmMucXVldWUgPSBmdW5jdGlvbiAod29ya2VyLCBjb25jdXJyZW5jeSkge1xuICAgICAgICBpZiAoY29uY3VycmVuY3kgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgY29uY3VycmVuY3kgPSAxO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIF9pbnNlcnQocSwgZGF0YSwgcG9zLCBjYWxsYmFjaykge1xuICAgICAgICAgIGlmICghcS5zdGFydGVkKXtcbiAgICAgICAgICAgIHEuc3RhcnRlZCA9IHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICghX2lzQXJyYXkoZGF0YSkpIHtcbiAgICAgICAgICAgICAgZGF0YSA9IFtkYXRhXTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYoZGF0YS5sZW5ndGggPT0gMCkge1xuICAgICAgICAgICAgIC8vIGNhbGwgZHJhaW4gaW1tZWRpYXRlbHkgaWYgdGhlcmUgYXJlIG5vIHRhc2tzXG4gICAgICAgICAgICAgcmV0dXJuIGFzeW5jLnNldEltbWVkaWF0ZShmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgaWYgKHEuZHJhaW4pIHtcbiAgICAgICAgICAgICAgICAgICAgIHEuZHJhaW4oKTtcbiAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgICBfZWFjaChkYXRhLCBmdW5jdGlvbih0YXNrKSB7XG4gICAgICAgICAgICAgIHZhciBpdGVtID0ge1xuICAgICAgICAgICAgICAgICAgZGF0YTogdGFzayxcbiAgICAgICAgICAgICAgICAgIGNhbGxiYWNrOiB0eXBlb2YgY2FsbGJhY2sgPT09ICdmdW5jdGlvbicgPyBjYWxsYmFjayA6IG51bGxcbiAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICBpZiAocG9zKSB7XG4gICAgICAgICAgICAgICAgcS50YXNrcy51bnNoaWZ0KGl0ZW0pO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHEudGFza3MucHVzaChpdGVtKTtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGlmIChxLnNhdHVyYXRlZCAmJiBxLnRhc2tzLmxlbmd0aCA9PT0gcS5jb25jdXJyZW5jeSkge1xuICAgICAgICAgICAgICAgICAgcS5zYXR1cmF0ZWQoKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBhc3luYy5zZXRJbW1lZGlhdGUocS5wcm9jZXNzKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciB3b3JrZXJzID0gMDtcbiAgICAgICAgdmFyIHEgPSB7XG4gICAgICAgICAgICB0YXNrczogW10sXG4gICAgICAgICAgICBjb25jdXJyZW5jeTogY29uY3VycmVuY3ksXG4gICAgICAgICAgICBzYXR1cmF0ZWQ6IG51bGwsXG4gICAgICAgICAgICBlbXB0eTogbnVsbCxcbiAgICAgICAgICAgIGRyYWluOiBudWxsLFxuICAgICAgICAgICAgc3RhcnRlZDogZmFsc2UsXG4gICAgICAgICAgICBwYXVzZWQ6IGZhbHNlLFxuICAgICAgICAgICAgcHVzaDogZnVuY3Rpb24gKGRhdGEsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICAgIF9pbnNlcnQocSwgZGF0YSwgZmFsc2UsIGNhbGxiYWNrKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBraWxsOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgIHEuZHJhaW4gPSBudWxsO1xuICAgICAgICAgICAgICBxLnRhc2tzID0gW107XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdW5zaGlmdDogZnVuY3Rpb24gKGRhdGEsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICAgIF9pbnNlcnQocSwgZGF0YSwgdHJ1ZSwgY2FsbGJhY2spO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHByb2Nlc3M6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBpZiAoIXEucGF1c2VkICYmIHdvcmtlcnMgPCBxLmNvbmN1cnJlbmN5ICYmIHEudGFza3MubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciB0YXNrID0gcS50YXNrcy5zaGlmdCgpO1xuICAgICAgICAgICAgICAgICAgICBpZiAocS5lbXB0eSAmJiBxLnRhc2tzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcS5lbXB0eSgpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHdvcmtlcnMgKz0gMTtcbiAgICAgICAgICAgICAgICAgICAgdmFyIG5leHQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB3b3JrZXJzIC09IDE7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodGFzay5jYWxsYmFjaykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhc2suY2FsbGJhY2suYXBwbHkodGFzaywgYXJndW1lbnRzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChxLmRyYWluICYmIHEudGFza3MubGVuZ3RoICsgd29ya2VycyA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHEuZHJhaW4oKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHEucHJvY2VzcygpO1xuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICB2YXIgY2IgPSBvbmx5X29uY2UobmV4dCk7XG4gICAgICAgICAgICAgICAgICAgIHdvcmtlcih0YXNrLmRhdGEsIGNiKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbGVuZ3RoOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHEudGFza3MubGVuZ3RoO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHJ1bm5pbmc6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gd29ya2VycztcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBpZGxlOiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcS50YXNrcy5sZW5ndGggKyB3b3JrZXJzID09PSAwO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHBhdXNlOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgaWYgKHEucGF1c2VkID09PSB0cnVlKSB7IHJldHVybjsgfVxuICAgICAgICAgICAgICAgIHEucGF1c2VkID0gdHJ1ZTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICByZXN1bWU6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBpZiAocS5wYXVzZWQgPT09IGZhbHNlKSB7IHJldHVybjsgfVxuICAgICAgICAgICAgICAgIHEucGF1c2VkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgLy8gTmVlZCB0byBjYWxsIHEucHJvY2VzcyBvbmNlIHBlciBjb25jdXJyZW50XG4gICAgICAgICAgICAgICAgLy8gd29ya2VyIHRvIHByZXNlcnZlIGZ1bGwgY29uY3VycmVuY3kgYWZ0ZXIgcGF1c2VcbiAgICAgICAgICAgICAgICBmb3IgKHZhciB3ID0gMTsgdyA8PSBxLmNvbmN1cnJlbmN5OyB3KyspIHtcbiAgICAgICAgICAgICAgICAgICAgYXN5bmMuc2V0SW1tZWRpYXRlKHEucHJvY2Vzcyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gcTtcbiAgICB9O1xuXG4gICAgYXN5bmMucHJpb3JpdHlRdWV1ZSA9IGZ1bmN0aW9uICh3b3JrZXIsIGNvbmN1cnJlbmN5KSB7XG5cbiAgICAgICAgZnVuY3Rpb24gX2NvbXBhcmVUYXNrcyhhLCBiKXtcbiAgICAgICAgICByZXR1cm4gYS5wcmlvcml0eSAtIGIucHJpb3JpdHk7XG4gICAgICAgIH07XG5cbiAgICAgICAgZnVuY3Rpb24gX2JpbmFyeVNlYXJjaChzZXF1ZW5jZSwgaXRlbSwgY29tcGFyZSkge1xuICAgICAgICAgIHZhciBiZWcgPSAtMSxcbiAgICAgICAgICAgICAgZW5kID0gc2VxdWVuY2UubGVuZ3RoIC0gMTtcbiAgICAgICAgICB3aGlsZSAoYmVnIDwgZW5kKSB7XG4gICAgICAgICAgICB2YXIgbWlkID0gYmVnICsgKChlbmQgLSBiZWcgKyAxKSA+Pj4gMSk7XG4gICAgICAgICAgICBpZiAoY29tcGFyZShpdGVtLCBzZXF1ZW5jZVttaWRdKSA+PSAwKSB7XG4gICAgICAgICAgICAgIGJlZyA9IG1pZDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGVuZCA9IG1pZCAtIDE7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBiZWc7XG4gICAgICAgIH1cblxuICAgICAgICBmdW5jdGlvbiBfaW5zZXJ0KHEsIGRhdGEsIHByaW9yaXR5LCBjYWxsYmFjaykge1xuICAgICAgICAgIGlmICghcS5zdGFydGVkKXtcbiAgICAgICAgICAgIHEuc3RhcnRlZCA9IHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICghX2lzQXJyYXkoZGF0YSkpIHtcbiAgICAgICAgICAgICAgZGF0YSA9IFtkYXRhXTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYoZGF0YS5sZW5ndGggPT0gMCkge1xuICAgICAgICAgICAgIC8vIGNhbGwgZHJhaW4gaW1tZWRpYXRlbHkgaWYgdGhlcmUgYXJlIG5vIHRhc2tzXG4gICAgICAgICAgICAgcmV0dXJuIGFzeW5jLnNldEltbWVkaWF0ZShmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgaWYgKHEuZHJhaW4pIHtcbiAgICAgICAgICAgICAgICAgICAgIHEuZHJhaW4oKTtcbiAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgICBfZWFjaChkYXRhLCBmdW5jdGlvbih0YXNrKSB7XG4gICAgICAgICAgICAgIHZhciBpdGVtID0ge1xuICAgICAgICAgICAgICAgICAgZGF0YTogdGFzayxcbiAgICAgICAgICAgICAgICAgIHByaW9yaXR5OiBwcmlvcml0eSxcbiAgICAgICAgICAgICAgICAgIGNhbGxiYWNrOiB0eXBlb2YgY2FsbGJhY2sgPT09ICdmdW5jdGlvbicgPyBjYWxsYmFjayA6IG51bGxcbiAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICBxLnRhc2tzLnNwbGljZShfYmluYXJ5U2VhcmNoKHEudGFza3MsIGl0ZW0sIF9jb21wYXJlVGFza3MpICsgMSwgMCwgaXRlbSk7XG5cbiAgICAgICAgICAgICAgaWYgKHEuc2F0dXJhdGVkICYmIHEudGFza3MubGVuZ3RoID09PSBxLmNvbmN1cnJlbmN5KSB7XG4gICAgICAgICAgICAgICAgICBxLnNhdHVyYXRlZCgpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGFzeW5jLnNldEltbWVkaWF0ZShxLnByb2Nlc3MpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gU3RhcnQgd2l0aCBhIG5vcm1hbCBxdWV1ZVxuICAgICAgICB2YXIgcSA9IGFzeW5jLnF1ZXVlKHdvcmtlciwgY29uY3VycmVuY3kpO1xuXG4gICAgICAgIC8vIE92ZXJyaWRlIHB1c2ggdG8gYWNjZXB0IHNlY29uZCBwYXJhbWV0ZXIgcmVwcmVzZW50aW5nIHByaW9yaXR5XG4gICAgICAgIHEucHVzaCA9IGZ1bmN0aW9uIChkYXRhLCBwcmlvcml0eSwgY2FsbGJhY2spIHtcbiAgICAgICAgICBfaW5zZXJ0KHEsIGRhdGEsIHByaW9yaXR5LCBjYWxsYmFjayk7XG4gICAgICAgIH07XG5cbiAgICAgICAgLy8gUmVtb3ZlIHVuc2hpZnQgZnVuY3Rpb25cbiAgICAgICAgZGVsZXRlIHEudW5zaGlmdDtcblxuICAgICAgICByZXR1cm4gcTtcbiAgICB9O1xuXG4gICAgYXN5bmMuY2FyZ28gPSBmdW5jdGlvbiAod29ya2VyLCBwYXlsb2FkKSB7XG4gICAgICAgIHZhciB3b3JraW5nICAgICA9IGZhbHNlLFxuICAgICAgICAgICAgdGFza3MgICAgICAgPSBbXTtcblxuICAgICAgICB2YXIgY2FyZ28gPSB7XG4gICAgICAgICAgICB0YXNrczogdGFza3MsXG4gICAgICAgICAgICBwYXlsb2FkOiBwYXlsb2FkLFxuICAgICAgICAgICAgc2F0dXJhdGVkOiBudWxsLFxuICAgICAgICAgICAgZW1wdHk6IG51bGwsXG4gICAgICAgICAgICBkcmFpbjogbnVsbCxcbiAgICAgICAgICAgIGRyYWluZWQ6IHRydWUsXG4gICAgICAgICAgICBwdXNoOiBmdW5jdGlvbiAoZGF0YSwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgICAgICBpZiAoIV9pc0FycmF5KGRhdGEpKSB7XG4gICAgICAgICAgICAgICAgICAgIGRhdGEgPSBbZGF0YV07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIF9lYWNoKGRhdGEsIGZ1bmN0aW9uKHRhc2spIHtcbiAgICAgICAgICAgICAgICAgICAgdGFza3MucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgICAgICBkYXRhOiB0YXNrLFxuICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2s6IHR5cGVvZiBjYWxsYmFjayA9PT0gJ2Z1bmN0aW9uJyA/IGNhbGxiYWNrIDogbnVsbFxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgY2FyZ28uZHJhaW5lZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICBpZiAoY2FyZ28uc2F0dXJhdGVkICYmIHRhc2tzLmxlbmd0aCA9PT0gcGF5bG9hZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY2FyZ28uc2F0dXJhdGVkKCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBhc3luYy5zZXRJbW1lZGlhdGUoY2FyZ28ucHJvY2Vzcyk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcHJvY2VzczogZnVuY3Rpb24gcHJvY2VzcygpIHtcbiAgICAgICAgICAgICAgICBpZiAod29ya2luZykgcmV0dXJuO1xuICAgICAgICAgICAgICAgIGlmICh0YXNrcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgaWYoY2FyZ28uZHJhaW4gJiYgIWNhcmdvLmRyYWluZWQpIGNhcmdvLmRyYWluKCk7XG4gICAgICAgICAgICAgICAgICAgIGNhcmdvLmRyYWluZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgdmFyIHRzID0gdHlwZW9mIHBheWxvYWQgPT09ICdudW1iZXInXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPyB0YXNrcy5zcGxpY2UoMCwgcGF5bG9hZClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IHRhc2tzLnNwbGljZSgwLCB0YXNrcy5sZW5ndGgpO1xuXG4gICAgICAgICAgICAgICAgdmFyIGRzID0gX21hcCh0cywgZnVuY3Rpb24gKHRhc2spIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRhc2suZGF0YTtcbiAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgIGlmKGNhcmdvLmVtcHR5KSBjYXJnby5lbXB0eSgpO1xuICAgICAgICAgICAgICAgIHdvcmtpbmcgPSB0cnVlO1xuICAgICAgICAgICAgICAgIHdvcmtlcihkcywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICB3b3JraW5nID0gZmFsc2U7XG5cbiAgICAgICAgICAgICAgICAgICAgdmFyIGFyZ3MgPSBhcmd1bWVudHM7XG4gICAgICAgICAgICAgICAgICAgIF9lYWNoKHRzLCBmdW5jdGlvbiAoZGF0YSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRhdGEuY2FsbGJhY2spIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLmNhbGxiYWNrLmFwcGx5KG51bGwsIGFyZ3MpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgICAgICBwcm9jZXNzKCk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbGVuZ3RoOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRhc2tzLmxlbmd0aDtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBydW5uaW5nOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHdvcmtpbmc7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiBjYXJnbztcbiAgICB9O1xuXG4gICAgdmFyIF9jb25zb2xlX2ZuID0gZnVuY3Rpb24gKG5hbWUpIHtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChmbikge1xuICAgICAgICAgICAgdmFyIGFyZ3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsIDEpO1xuICAgICAgICAgICAgZm4uYXBwbHkobnVsbCwgYXJncy5jb25jYXQoW2Z1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgICAgICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMSk7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBjb25zb2xlICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoY29uc29sZS5lcnJvcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChjb25zb2xlW25hbWVdKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBfZWFjaChhcmdzLCBmdW5jdGlvbiAoeCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGVbbmFtZV0oeCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1dKSk7XG4gICAgICAgIH07XG4gICAgfTtcbiAgICBhc3luYy5sb2cgPSBfY29uc29sZV9mbignbG9nJyk7XG4gICAgYXN5bmMuZGlyID0gX2NvbnNvbGVfZm4oJ2RpcicpO1xuICAgIC8qYXN5bmMuaW5mbyA9IF9jb25zb2xlX2ZuKCdpbmZvJyk7XG4gICAgYXN5bmMud2FybiA9IF9jb25zb2xlX2ZuKCd3YXJuJyk7XG4gICAgYXN5bmMuZXJyb3IgPSBfY29uc29sZV9mbignZXJyb3InKTsqL1xuXG4gICAgYXN5bmMubWVtb2l6ZSA9IGZ1bmN0aW9uIChmbiwgaGFzaGVyKSB7XG4gICAgICAgIHZhciBtZW1vID0ge307XG4gICAgICAgIHZhciBxdWV1ZXMgPSB7fTtcbiAgICAgICAgaGFzaGVyID0gaGFzaGVyIHx8IGZ1bmN0aW9uICh4KSB7XG4gICAgICAgICAgICByZXR1cm4geDtcbiAgICAgICAgfTtcbiAgICAgICAgdmFyIG1lbW9pemVkID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIGFyZ3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMpO1xuICAgICAgICAgICAgdmFyIGNhbGxiYWNrID0gYXJncy5wb3AoKTtcbiAgICAgICAgICAgIHZhciBrZXkgPSBoYXNoZXIuYXBwbHkobnVsbCwgYXJncyk7XG4gICAgICAgICAgICBpZiAoa2V5IGluIG1lbW8pIHtcbiAgICAgICAgICAgICAgICBhc3luYy5uZXh0VGljayhmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrLmFwcGx5KG51bGwsIG1lbW9ba2V5XSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChrZXkgaW4gcXVldWVzKSB7XG4gICAgICAgICAgICAgICAgcXVldWVzW2tleV0ucHVzaChjYWxsYmFjayk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBxdWV1ZXNba2V5XSA9IFtjYWxsYmFja107XG4gICAgICAgICAgICAgICAgZm4uYXBwbHkobnVsbCwgYXJncy5jb25jYXQoW2Z1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgbWVtb1trZXldID0gYXJndW1lbnRzO1xuICAgICAgICAgICAgICAgICAgICB2YXIgcSA9IHF1ZXVlc1trZXldO1xuICAgICAgICAgICAgICAgICAgICBkZWxldGUgcXVldWVzW2tleV07XG4gICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwLCBsID0gcS5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICBxW2ldLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICBtZW1vaXplZC5tZW1vID0gbWVtbztcbiAgICAgICAgbWVtb2l6ZWQudW5tZW1vaXplZCA9IGZuO1xuICAgICAgICByZXR1cm4gbWVtb2l6ZWQ7XG4gICAgfTtcblxuICAgIGFzeW5jLnVubWVtb2l6ZSA9IGZ1bmN0aW9uIChmbikge1xuICAgICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIChmbi51bm1lbW9pemVkIHx8IGZuKS5hcHBseShudWxsLCBhcmd1bWVudHMpO1xuICAgICAgfTtcbiAgICB9O1xuXG4gICAgYXN5bmMudGltZXMgPSBmdW5jdGlvbiAoY291bnQsIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICB2YXIgY291bnRlciA9IFtdO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNvdW50OyBpKyspIHtcbiAgICAgICAgICAgIGNvdW50ZXIucHVzaChpKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYXN5bmMubWFwKGNvdW50ZXIsIGl0ZXJhdG9yLCBjYWxsYmFjayk7XG4gICAgfTtcblxuICAgIGFzeW5jLnRpbWVzU2VyaWVzID0gZnVuY3Rpb24gKGNvdW50LCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgdmFyIGNvdW50ZXIgPSBbXTtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7XG4gICAgICAgICAgICBjb3VudGVyLnB1c2goaSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGFzeW5jLm1hcFNlcmllcyhjb3VudGVyLCBpdGVyYXRvciwgY2FsbGJhY2spO1xuICAgIH07XG5cbiAgICBhc3luYy5zZXEgPSBmdW5jdGlvbiAoLyogZnVuY3Rpb25zLi4uICovKSB7XG4gICAgICAgIHZhciBmbnMgPSBhcmd1bWVudHM7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgdGhhdCA9IHRoaXM7XG4gICAgICAgICAgICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7XG4gICAgICAgICAgICB2YXIgY2FsbGJhY2sgPSBhcmdzLnBvcCgpO1xuICAgICAgICAgICAgYXN5bmMucmVkdWNlKGZucywgYXJncywgZnVuY3Rpb24gKG5ld2FyZ3MsIGZuLCBjYikge1xuICAgICAgICAgICAgICAgIGZuLmFwcGx5KHRoYXQsIG5ld2FyZ3MuY29uY2F0KFtmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBlcnIgPSBhcmd1bWVudHNbMF07XG4gICAgICAgICAgICAgICAgICAgIHZhciBuZXh0YXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMSk7XG4gICAgICAgICAgICAgICAgICAgIGNiKGVyciwgbmV4dGFyZ3MpO1xuICAgICAgICAgICAgICAgIH1dKSlcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBmdW5jdGlvbiAoZXJyLCByZXN1bHRzKSB7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2suYXBwbHkodGhhdCwgW2Vycl0uY29uY2F0KHJlc3VsdHMpKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9O1xuICAgIH07XG5cbiAgICBhc3luYy5jb21wb3NlID0gZnVuY3Rpb24gKC8qIGZ1bmN0aW9ucy4uLiAqLykge1xuICAgICAgcmV0dXJuIGFzeW5jLnNlcS5hcHBseShudWxsLCBBcnJheS5wcm90b3R5cGUucmV2ZXJzZS5jYWxsKGFyZ3VtZW50cykpO1xuICAgIH07XG5cbiAgICB2YXIgX2FwcGx5RWFjaCA9IGZ1bmN0aW9uIChlYWNoZm4sIGZucyAvKmFyZ3MuLi4qLykge1xuICAgICAgICB2YXIgZ28gPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgdGhhdCA9IHRoaXM7XG4gICAgICAgICAgICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7XG4gICAgICAgICAgICB2YXIgY2FsbGJhY2sgPSBhcmdzLnBvcCgpO1xuICAgICAgICAgICAgcmV0dXJuIGVhY2hmbihmbnMsIGZ1bmN0aW9uIChmbiwgY2IpIHtcbiAgICAgICAgICAgICAgICBmbi5hcHBseSh0aGF0LCBhcmdzLmNvbmNhdChbY2JdKSk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY2FsbGJhY2spO1xuICAgICAgICB9O1xuICAgICAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA+IDIpIHtcbiAgICAgICAgICAgIHZhciBhcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAyKTtcbiAgICAgICAgICAgIHJldHVybiBnby5hcHBseSh0aGlzLCBhcmdzKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBnbztcbiAgICAgICAgfVxuICAgIH07XG4gICAgYXN5bmMuYXBwbHlFYWNoID0gZG9QYXJhbGxlbChfYXBwbHlFYWNoKTtcbiAgICBhc3luYy5hcHBseUVhY2hTZXJpZXMgPSBkb1NlcmllcyhfYXBwbHlFYWNoKTtcblxuICAgIGFzeW5jLmZvcmV2ZXIgPSBmdW5jdGlvbiAoZm4sIGNhbGxiYWNrKSB7XG4gICAgICAgIGZ1bmN0aW9uIG5leHQoZXJyKSB7XG4gICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgaWYgKGNhbGxiYWNrKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aHJvdyBlcnI7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmbihuZXh0KTtcbiAgICAgICAgfVxuICAgICAgICBuZXh0KCk7XG4gICAgfTtcblxuICAgIC8vIE5vZGUuanNcbiAgICBpZiAodHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCcgJiYgbW9kdWxlLmV4cG9ydHMpIHtcbiAgICAgICAgbW9kdWxlLmV4cG9ydHMgPSBhc3luYztcbiAgICB9XG4gICAgLy8gQU1EIC8gUmVxdWlyZUpTXG4gICAgZWxzZSBpZiAodHlwZW9mIGRlZmluZSAhPT0gJ3VuZGVmaW5lZCcgJiYgZGVmaW5lLmFtZCkge1xuICAgICAgICBkZWZpbmUoW10sIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiBhc3luYztcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8vIGluY2x1ZGVkIGRpcmVjdGx5IHZpYSA8c2NyaXB0PiB0YWdcbiAgICBlbHNlIHtcbiAgICAgICAgcm9vdC5hc3luYyA9IGFzeW5jO1xuICAgIH1cblxufSgpKTtcbiIsInZhciBhc3luYyAgICAgICA9IHJlcXVpcmUoJ2FzeW5jJyksXG4gICAgdXJsUGFyc2VyICAgPSByZXF1aXJlKCd1cmwnKSxcbiAgICBSZXNvdXJjZSAgICA9IHJlcXVpcmUoJy4vUmVzb3VyY2UnKSxcbiAgICBFdmVudEVtaXR0ZXIgPSByZXF1aXJlKCdldmVudGVtaXR0ZXIzJyk7XG5cbi8qKlxuICogTWFuYWdlcyB0aGUgc3RhdGUgYW5kIGxvYWRpbmcgb2YgbXVsdGlwbGUgcmVzb3VyY2VzIHRvIGxvYWQuXG4gKlxuICogQGNsYXNzXG4gKiBAcGFyYW0gW2Jhc2VVcmw9JyddIHtzdHJpbmd9IFRoZSBiYXNlIHVybCBmb3IgYWxsIHJlc291cmNlcyBsb2FkZWQgYnkgdGhpcyBsb2FkZXIuXG4gKiBAcGFyYW0gW2NvbmN1cnJlbmN5PTEwXSB7bnVtYmVyfSBUaGUgbnVtYmVyIG9mIHJlc291cmNlcyB0byBsb2FkIGNvbmN1cnJlbnRseS5cbiAqL1xuZnVuY3Rpb24gTG9hZGVyKGJhc2VVcmwsIGNvbmN1cnJlbmN5KSB7XG4gICAgRXZlbnRFbWl0dGVyLmNhbGwodGhpcyk7XG5cbiAgICBjb25jdXJyZW5jeSA9IGNvbmN1cnJlbmN5IHx8IDEwO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGJhc2UgdXJsIGZvciBhbGwgcmVzb3VyY2VzIGxvYWRlZCBieSB0aGlzIGxvYWRlci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge3N0cmluZ31cbiAgICAgKi9cbiAgICB0aGlzLmJhc2VVcmwgPSBiYXNlVXJsIHx8ICcnO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHByb2dyZXNzIHBlcmNlbnQgb2YgdGhlIGxvYWRlciBnb2luZyB0aHJvdWdoIHRoZSBxdWV1ZS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLnByb2dyZXNzID0gMDtcblxuICAgIC8qKlxuICAgICAqIExvYWRpbmcgc3RhdGUgb2YgdGhlIGxvYWRlciwgdHJ1ZSBpZiBpdCBpcyBjdXJyZW50bHkgbG9hZGluZyByZXNvdXJjZXMuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqL1xuICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHBlcmNlbnRhZ2Ugb2YgdG90YWwgcHJvZ3Jlc3MgdGhhdCBhIHNpbmdsZSByZXNvdXJjZSByZXByZXNlbnRzLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMuX3Byb2dyZXNzQ2h1bmsgPSAwO1xuXG4gICAgLyoqXG4gICAgICogVGhlIG1pZGRsZXdhcmUgdG8gcnVuIGJlZm9yZSBsb2FkaW5nIGVhY2ggcmVzb3VyY2UuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtmdW5jdGlvbltdfVxuICAgICAqL1xuICAgIHRoaXMuX2JlZm9yZU1pZGRsZXdhcmUgPSBbXTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBtaWRkbGV3YXJlIHRvIHJ1biBhZnRlciBsb2FkaW5nIGVhY2ggcmVzb3VyY2UuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtmdW5jdGlvbltdfVxuICAgICAqL1xuICAgIHRoaXMuX2FmdGVyTWlkZGxld2FyZSA9IFtdO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGBfbG9hZFJlc291cmNlYCBmdW5jdGlvbiBib3VuZCB3aXRoIHRoaXMgb2JqZWN0IGNvbnRleHQuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBtZW1iZXIge2Z1bmN0aW9ufVxuICAgICAqL1xuICAgIHRoaXMuX2JvdW5kTG9hZFJlc291cmNlID0gdGhpcy5fbG9hZFJlc291cmNlLmJpbmQodGhpcyk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYF9vbkxvYWRgIGZ1bmN0aW9uIGJvdW5kIHdpdGggdGhpcyBvYmplY3QgY29udGV4dC5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQG1lbWJlciB7ZnVuY3Rpb259XG4gICAgICovXG4gICAgdGhpcy5fYm91bmRPbkxvYWQgPSB0aGlzLl9vbkxvYWQuYmluZCh0aGlzKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSByZXNvdXJjZSBidWZmZXIgdGhhdCBmaWxscyB1bnRpbCBgbG9hZGAgaXMgY2FsbGVkIHRvIHN0YXJ0IGxvYWRpbmcgcmVzb3VyY2VzLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAbWVtYmVyIHtSZXNvdXJjZVtdfVxuICAgICAqL1xuICAgIHRoaXMuX2J1ZmZlciA9IFtdO1xuXG4gICAgLyoqXG4gICAgICogVXNlZCB0byB0cmFjayBsb2FkIGNvbXBsZXRpb24uXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLl9udW1Ub0xvYWQgPSAwO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHJlc291cmNlcyB3YWl0aW5nIHRvIGJlIGxvYWRlZC5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQG1lbWJlciB7UmVzb3VyY2VbXX1cbiAgICAgKi9cbiAgICB0aGlzLl9xdWV1ZSA9IGFzeW5jLnF1ZXVlKHRoaXMuX2JvdW5kTG9hZFJlc291cmNlLCBjb25jdXJyZW5jeSk7XG5cbiAgICAvKipcbiAgICAgKiBBbGwgdGhlIHJlc291cmNlcyBmb3IgdGhpcyBsb2FkZXIga2V5ZWQgYnkgbmFtZS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge29iamVjdDxzdHJpbmcsIFJlc291cmNlPn1cbiAgICAgKi9cbiAgICB0aGlzLnJlc291cmNlcyA9IHt9O1xuXG4gICAgLyoqXG4gICAgICogRW1pdHRlZCBvbmNlIHBlciBsb2FkZWQgb3IgZXJyb3JlZCByZXNvdXJjZS5cbiAgICAgKlxuICAgICAqIEBldmVudCBwcm9ncmVzc1xuICAgICAqIEBtZW1iZXJvZiBMb2FkZXIjXG4gICAgICovXG5cbiAgICAvKipcbiAgICAgKiBFbWl0dGVkIG9uY2UgcGVyIGVycm9yZWQgcmVzb3VyY2UuXG4gICAgICpcbiAgICAgKiBAZXZlbnQgZXJyb3JcbiAgICAgKiBAbWVtYmVyb2YgTG9hZGVyI1xuICAgICAqL1xuXG4gICAgLyoqXG4gICAgICogRW1pdHRlZCBvbmNlIHBlciBsb2FkZWQgcmVzb3VyY2UuXG4gICAgICpcbiAgICAgKiBAZXZlbnQgbG9hZFxuICAgICAqIEBtZW1iZXJvZiBMb2FkZXIjXG4gICAgICovXG5cbiAgICAvKipcbiAgICAgKiBFbWl0dGVkIHdoZW4gdGhlIGxvYWRlciBiZWdpbnMgdG8gcHJvY2VzcyB0aGUgcXVldWUuXG4gICAgICpcbiAgICAgKiBAZXZlbnQgc3RhcnRcbiAgICAgKiBAbWVtYmVyb2YgTG9hZGVyI1xuICAgICAqL1xuXG4gICAgLyoqXG4gICAgICogRW1pdHRlZCB3aGVuIHRoZSBxdWV1ZWQgcmVzb3VyY2VzIGFsbCBsb2FkLlxuICAgICAqXG4gICAgICogQGV2ZW50IGNvbXBsZXRlXG4gICAgICogQG1lbWJlcm9mIExvYWRlciNcbiAgICAgKi9cbn1cblxuTG9hZGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoRXZlbnRFbWl0dGVyLnByb3RvdHlwZSk7XG5Mb2FkZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gTG9hZGVyO1xubW9kdWxlLmV4cG9ydHMgPSBMb2FkZXI7XG5cbi8qKlxuICogQWRkcyBhIHJlc291cmNlIChvciBtdWx0aXBsZSByZXNvdXJjZXMpIHRvIHRoZSBsb2FkZXIgcXVldWUuXG4gKlxuICogVGhpcyBmdW5jdGlvbiBjYW4gdGFrZSBhIHdpZGUgdmFyaWV0eSBvZiBkaWZmZXJlbnQgcGFyYW1ldGVycy4gVGhlIG9ubHkgdGhpbmcgdGhhdCBpcyBhbHdheXNcbiAqIHJlcXVpcmVkIHRoZSB1cmwgdG8gbG9hZC4gQWxsIHRoZSBmb2xsb3dpbmcgd2lsbCB3b3JrOlxuICpcbiAqIGBgYGpzXG4gKiBsb2FkZXJcbiAqICAgICAvLyBub3JtYWwgcGFyYW0gc3ludGF4XG4gKiAgICAgLmFkZCgna2V5JywgJ2h0dHA6Ly8uLi4nLCBmdW5jdGlvbiAoKSB7fSlcbiAqICAgICAuYWRkKCdodHRwOi8vLi4uJywgZnVuY3Rpb24gKCkge30pXG4gKiAgICAgLmFkZCgnaHR0cDovLy4uLicpXG4gKlxuICogICAgIC8vIG9iamVjdCBzeW50YXhcbiAqICAgICAuYWRkKHtcbiAqICAgICAgICAgbmFtZTogJ2tleTInLFxuICogICAgICAgICB1cmw6ICdodHRwOi8vLi4uJ1xuICogICAgIH0sIGZ1bmN0aW9uICgpIHt9KVxuICogICAgIC5hZGQoe1xuICogICAgICAgICB1cmw6ICdodHRwOi8vLi4uJ1xuICogICAgIH0sIGZ1bmN0aW9uICgpIHt9KVxuICogICAgIC5hZGQoe1xuICogICAgICAgICBuYW1lOiAna2V5MycsXG4gKiAgICAgICAgIHVybDogJ2h0dHA6Ly8uLi4nXG4gKiAgICAgICAgIG9uQ29tcGxldGU6IGZ1bmN0aW9uICgpIHt9XG4gKiAgICAgfSlcbiAqICAgICAuYWRkKHtcbiAqICAgICAgICAgdXJsOiAnaHR0cHM6Ly8uLi4nLFxuICogICAgICAgICBvbkNvbXBsZXRlOiBmdW5jdGlvbiAoKSB7fSxcbiAqICAgICAgICAgY3Jvc3NPcmlnaW46IHRydWVcbiAqICAgICB9KVxuICpcbiAqICAgICAvLyB5b3UgY2FuIGFsc28gcGFzcyBhbiBhcnJheSBvZiBvYmplY3RzIG9yIHVybHMgb3IgYm90aFxuICogICAgIC5hZGQoW1xuICogICAgICAgICB7IG5hbWU6ICdrZXk0JywgdXJsOiAnaHR0cDovLy4uLicsIG9uQ29tcGxldGU6IGZ1bmN0aW9uICgpIHt9IH0sXG4gKiAgICAgICAgIHsgdXJsOiAnaHR0cDovLy4uLicsIG9uQ29tcGxldGU6IGZ1bmN0aW9uICgpIHt9IH0sXG4gKiAgICAgICAgICdodHRwOi8vLi4uJ1xuICogICAgIF0pO1xuICogYGBgXG4gKlxuICogQGFsaWFzIGVucXVldWVcbiAqIEBwYXJhbSBbbmFtZV0ge3N0cmluZ30gVGhlIG5hbWUgb2YgdGhlIHJlc291cmNlIHRvIGxvYWQsIGlmIG5vdCBwYXNzZWQgdGhlIHVybCBpcyB1c2VkLlxuICogQHBhcmFtIHVybCB7c3RyaW5nfSBUaGUgdXJsIGZvciB0aGlzIHJlc291cmNlLCByZWxhdGl2ZSB0byB0aGUgYmFzZVVybCBvZiB0aGlzIGxvYWRlci5cbiAqIEBwYXJhbSBbb3B0aW9uc10ge29iamVjdH0gVGhlIG9wdGlvbnMgZm9yIHRoZSBsb2FkLlxuICogQHBhcmFtIFtvcHRpb25zLmNyb3NzT3JpZ2luXSB7Ym9vbGVhbn0gSXMgdGhpcyByZXF1ZXN0IGNyb3NzLW9yaWdpbj8gRGVmYXVsdCBpcyB0byBkZXRlcm1pbmUgYXV0b21hdGljYWxseS5cbiAqIEBwYXJhbSBbb3B0aW9ucy5sb2FkVHlwZT1SZXNvdXJjZS5MT0FEX1RZUEUuWEhSXSB7UmVzb3VyY2UuWEhSX0xPQURfVFlQRX0gSG93IHNob3VsZCB0aGlzIHJlc291cmNlIGJlIGxvYWRlZD9cbiAqIEBwYXJhbSBbb3B0aW9ucy54aHJUeXBlPVJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkRFRkFVTFRdIHtSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRX0gSG93IHNob3VsZCB0aGUgZGF0YSBiZWluZ1xuICogICAgICBsb2FkZWQgYmUgaW50ZXJwcmV0ZWQgd2hlbiB1c2luZyBYSFI/XG4gKiBAcGFyYW0gW2NhbGxiYWNrXSB7ZnVuY3Rpb259IEZ1bmN0aW9uIHRvIGNhbGwgd2hlbiB0aGlzIHNwZWNpZmljIHJlc291cmNlIGNvbXBsZXRlcyBsb2FkaW5nLlxuICogQHJldHVybiB7TG9hZGVyfVxuICovXG5Mb2FkZXIucHJvdG90eXBlLmFkZCA9IExvYWRlci5wcm90b3R5cGUuZW5xdWV1ZSA9IGZ1bmN0aW9uIChuYW1lLCB1cmwsIG9wdGlvbnMsIGNiKSB7XG4gICAgLy8gc3BlY2lhbCBjYXNlIG9mIGFuIGFycmF5IG9mIG9iamVjdHMgb3IgdXJsc1xuICAgIGlmIChBcnJheS5pc0FycmF5KG5hbWUpKSB7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbmFtZS5sZW5ndGg7ICsraSkge1xuICAgICAgICAgICAgdGhpcy5hZGQobmFtZVtpXSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICAvLyBpZiBhbiBvYmplY3QgaXMgcGFzc2VkIGluc3RlYWQgb2YgcGFyYW1zXG4gICAgaWYgKHR5cGVvZiBuYW1lID09PSAnb2JqZWN0Jykge1xuICAgICAgICBjYiA9IHVybCB8fCBuYW1lLmNhbGxiYWNrIHx8IG5hbWUub25Db21wbGV0ZTtcbiAgICAgICAgb3B0aW9ucyA9IG5hbWU7XG4gICAgICAgIHVybCA9IG5hbWUudXJsO1xuICAgICAgICBuYW1lID0gbmFtZS5uYW1lIHx8IG5hbWUua2V5IHx8IG5hbWUudXJsO1xuICAgIH1cblxuICAgIC8vIGNhc2Ugd2hlcmUgbm8gbmFtZSBpcyBwYXNzZWQgc2hpZnQgYWxsIGFyZ3Mgb3ZlciBieSBvbmUuXG4gICAgaWYgKHR5cGVvZiB1cmwgIT09ICdzdHJpbmcnKSB7XG4gICAgICAgIGNiID0gb3B0aW9ucztcbiAgICAgICAgb3B0aW9ucyA9IHVybDtcbiAgICAgICAgdXJsID0gbmFtZTtcbiAgICB9XG5cbiAgICAvLyBub3cgdGhhdCB3ZSBzaGlmdGVkIG1ha2Ugc3VyZSB3ZSBoYXZlIGEgcHJvcGVyIHVybC5cbiAgICBpZiAodHlwZW9mIHVybCAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdObyB1cmwgcGFzc2VkIHRvIGFkZCByZXNvdXJjZSB0byBsb2FkZXIuJyk7XG4gICAgfVxuXG4gICAgLy8gb3B0aW9ucyBhcmUgb3B0aW9uYWwgc28gcGVvcGxlIG1pZ2h0IHBhc3MgYSBmdW5jdGlvbiBhbmQgbm8gb3B0aW9uc1xuICAgIGlmICh0eXBlb2Ygb3B0aW9ucyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBjYiA9IG9wdGlvbnM7XG4gICAgICAgIG9wdGlvbnMgPSBudWxsO1xuICAgIH1cblxuICAgIC8vIGNoZWNrIGlmIHJlc291cmNlIGFscmVhZHkgZXhpc3RzLlxuICAgIGlmICh0aGlzLnJlc291cmNlc1tuYW1lXSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1Jlc291cmNlIHdpdGggbmFtZSBcIicgKyBuYW1lICsgJ1wiIGFscmVhZHkgZXhpc3RzLicpO1xuICAgIH1cblxuICAgIC8vIGFkZCBiYXNlIHVybCBpZiB0aGlzIGlzbid0IGFuIGFic29sdXRlIHVybFxuICAgIHVybCA9IHRoaXMuX2hhbmRsZUJhc2VVcmwodXJsKTtcblxuICAgIC8vIGNyZWF0ZSB0aGUgc3RvcmUgdGhlIHJlc291cmNlXG4gICAgdGhpcy5yZXNvdXJjZXNbbmFtZV0gPSBuZXcgUmVzb3VyY2UobmFtZSwgdXJsLCBvcHRpb25zKTtcblxuICAgIGlmICh0eXBlb2YgY2IgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgdGhpcy5yZXNvdXJjZXNbbmFtZV0ub25jZSgnYWZ0ZXJNaWRkbGV3YXJlJywgY2IpO1xuICAgIH1cblxuICAgIHRoaXMuX251bVRvTG9hZCsrO1xuXG4gICAgLy8gaWYgYWxyZWFkeSBsb2FkaW5nIGFkZCBpdCB0byB0aGUgd29ya2VyIHF1ZXVlXG4gICAgaWYgKHRoaXMuX3F1ZXVlLnN0YXJ0ZWQpIHtcbiAgICAgICAgdGhpcy5fcXVldWUucHVzaCh0aGlzLnJlc291cmNlc1tuYW1lXSk7XG4gICAgICAgIHRoaXMuX3Byb2dyZXNzQ2h1bmsgPSAoMTAwIC0gdGhpcy5wcm9ncmVzcykgLyAodGhpcy5fcXVldWUubGVuZ3RoKCkgKyB0aGlzLl9xdWV1ZS5ydW5uaW5nKCkpO1xuICAgIH1cbiAgICAvLyBvdGhlcndpc2UgYnVmZmVyIGl0IHRvIGJlIGFkZGVkIHRvIHRoZSBxdWV1ZSBsYXRlclxuICAgIGVsc2Uge1xuICAgICAgICB0aGlzLl9idWZmZXIucHVzaCh0aGlzLnJlc291cmNlc1tuYW1lXSk7XG4gICAgICAgIHRoaXMuX3Byb2dyZXNzQ2h1bmsgPSAxMDAgLyB0aGlzLl9idWZmZXIubGVuZ3RoO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzO1xufTtcblxuTG9hZGVyLnByb3RvdHlwZS5faGFuZGxlQmFzZVVybCA9IGZ1bmN0aW9uICh1cmwpIHtcbiAgICB2YXIgcGFyc2VkVXJsID0gdXJsUGFyc2VyLnBhcnNlKHVybCk7XG5cbiAgICAvLyBhYnNvbHV0ZSB1cmwsIGp1c3QgdXNlIGl0IGFzIGlzLlxuICAgIGlmIChwYXJzZWRVcmwucHJvdG9jb2wgfHwgcGFyc2VkVXJsLnBhdGhuYW1lLmluZGV4T2YoJy8vJykgPT09IDApIHtcbiAgICAgICAgcmV0dXJuIHVybDtcbiAgICB9XG5cbiAgICAvLyBpZiBiYXNlVXJsIGRvZXNuJ3QgZW5kIGluIHNsYXNoIGFuZCB1cmwgZG9lc24ndCBzdGFydCB3aXRoIHNsYXNoLCB0aGVuIGFkZCBhIHNsYXNoIGluYmV0d2VlblxuICAgIGlmIChcbiAgICAgICAgdGhpcy5iYXNlVXJsLmxlbmd0aCAmJlxuICAgICAgICB0aGlzLmJhc2VVcmwubGFzdEluZGV4T2YoJy8nKSAhPT0gdGhpcy5iYXNlVXJsLmxlbmd0aCAtIDEgJiZcbiAgICAgICAgdXJsLmNoYXJBdCgwKSAhPT0gJy8nXG4gICAgKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmJhc2VVcmwgKyAnLycgKyB1cmw7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICByZXR1cm4gdGhpcy5iYXNlVXJsICsgdXJsO1xuICAgIH1cbn07XG5cblxuLyoqXG4gKiBTZXRzIHVwIGEgbWlkZGxld2FyZSBmdW5jdGlvbiB0aGF0IHdpbGwgcnVuICpiZWZvcmUqIHRoZVxuICogcmVzb3VyY2UgaXMgbG9hZGVkLlxuICpcbiAqIEBhbGlhcyBwcmVcbiAqIEBwYXJhbSBtaWRkbGV3YXJlIHtmdW5jdGlvbn0gVGhlIG1pZGRsZXdhcmUgZnVuY3Rpb24gdG8gcmVnaXN0ZXIuXG4gKiBAcmV0dXJuIHtMb2FkZXJ9XG4gKi9cbkxvYWRlci5wcm90b3R5cGUuYmVmb3JlID0gTG9hZGVyLnByb3RvdHlwZS5wcmUgPSBmdW5jdGlvbiAoZm4pIHtcbiAgICB0aGlzLl9iZWZvcmVNaWRkbGV3YXJlLnB1c2goZm4pO1xuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIFNldHMgdXAgYSBtaWRkbGV3YXJlIGZ1bmN0aW9uIHRoYXQgd2lsbCBydW4gKmFmdGVyKiB0aGVcbiAqIHJlc291cmNlIGlzIGxvYWRlZC5cbiAqXG4gKiBAYWxpYXMgdXNlXG4gKiBAcGFyYW0gbWlkZGxld2FyZSB7ZnVuY3Rpb259IFRoZSBtaWRkbGV3YXJlIGZ1bmN0aW9uIHRvIHJlZ2lzdGVyLlxuICogQHJldHVybiB7TG9hZGVyfVxuICovXG5Mb2FkZXIucHJvdG90eXBlLmFmdGVyID0gTG9hZGVyLnByb3RvdHlwZS51c2UgPSBmdW5jdGlvbiAoZm4pIHtcbiAgICB0aGlzLl9hZnRlck1pZGRsZXdhcmUucHVzaChmbik7XG5cbiAgICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogUmVzZXRzIHRoZSBxdWV1ZSBvZiB0aGUgbG9hZGVyIHRvIHByZXBhcmUgZm9yIGEgbmV3IGxvYWQuXG4gKlxuICogQHJldHVybiB7TG9hZGVyfVxuICovXG5Mb2FkZXIucHJvdG90eXBlLnJlc2V0ID0gZnVuY3Rpb24gKCkge1xuICAgIC8vIHRoaXMuYmFzZVVybCA9IGJhc2VVcmwgfHwgJyc7XG5cbiAgICB0aGlzLnByb2dyZXNzID0gMDtcblxuICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xuXG4gICAgdGhpcy5fcHJvZ3Jlc3NDaHVuayA9IDA7XG5cbiAgICAvLyB0aGlzLl9iZWZvcmVNaWRkbGV3YXJlLmxlbmd0aCA9IDA7XG4gICAgLy8gdGhpcy5fYWZ0ZXJNaWRkbGV3YXJlLmxlbmd0aCA9IDA7XG5cbiAgICB0aGlzLl9idWZmZXIubGVuZ3RoID0gMDtcblxuICAgIHRoaXMuX251bVRvTG9hZCA9IDA7XG5cbiAgICB0aGlzLl9xdWV1ZS5raWxsKCk7XG4gICAgdGhpcy5fcXVldWUuc3RhcnRlZCA9IGZhbHNlO1xuXG4gICAgdGhpcy5yZXNvdXJjZXMgPSB7fTtcbn07XG5cbi8qKlxuICogU3RhcnRzIGxvYWRpbmcgdGhlIHF1ZXVlZCByZXNvdXJjZXMuXG4gKlxuICogQGZpcmVzIHN0YXJ0XG4gKiBAcGFyYW0gW2NhbGxiYWNrXSB7ZnVuY3Rpb259IE9wdGlvbmFsIGNhbGxiYWNrIHRoYXQgd2lsbCBiZSBib3VuZCB0byB0aGUgYGNvbXBsZXRlYCBldmVudC5cbiAqIEByZXR1cm4ge0xvYWRlcn1cbiAqL1xuTG9hZGVyLnByb3RvdHlwZS5sb2FkID0gZnVuY3Rpb24gKGNiKSB7XG4gICAgLy8gcmVnaXN0ZXIgY29tcGxldGUgY2FsbGJhY2sgaWYgdGhleSBwYXNzIG9uZVxuICAgIGlmICh0eXBlb2YgY2IgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgdGhpcy5vbmNlKCdjb21wbGV0ZScsIGNiKTtcbiAgICB9XG5cbiAgICAvLyBpZiB0aGUgcXVldWUgaGFzIGFscmVhZHkgc3RhcnRlZCB3ZSBhcmUgZG9uZSBoZXJlXG4gICAgaWYgKHRoaXMuX3F1ZXVlLnN0YXJ0ZWQpIHtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLy8gbm90aWZ5IG9mIHN0YXJ0XG4gICAgdGhpcy5lbWl0KCdzdGFydCcsIHRoaXMpO1xuXG4gICAgLy8gc3RhcnQgdGhlIGludGVybmFsIHF1ZXVlXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLl9idWZmZXIubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgdGhpcy5fcXVldWUucHVzaCh0aGlzLl9idWZmZXJbaV0pO1xuICAgIH1cblxuICAgIC8vIGVtcHR5IHRoZSBidWZmZXJcbiAgICB0aGlzLl9idWZmZXIubGVuZ3RoID0gMDtcblxuICAgIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBMb2FkcyBhIHNpbmdsZSByZXNvdXJjZS5cbiAqXG4gKiBAZmlyZXMgcHJvZ3Jlc3NcbiAqIEBwcml2YXRlXG4gKi9cbkxvYWRlci5wcm90b3R5cGUuX2xvYWRSZXNvdXJjZSA9IGZ1bmN0aW9uIChyZXNvdXJjZSwgZGVxdWV1ZSkge1xuICAgIHZhciBzZWxmID0gdGhpcztcblxuICAgIHJlc291cmNlLl9kZXF1ZXVlID0gZGVxdWV1ZTtcblxuICAgIHRoaXMuX3J1bk1pZGRsZXdhcmUocmVzb3VyY2UsIHRoaXMuX2JlZm9yZU1pZGRsZXdhcmUsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgLy8gcmVzb3VyY2Uub24oJ3Byb2dyZXNzJywgc2VsZi5lbWl0LmJpbmQoc2VsZiwgJ3Byb2dyZXNzJykpO1xuXG4gICAgICAgIHJlc291cmNlLmxvYWQoc2VsZi5fYm91bmRPbkxvYWQpO1xuICAgIH0pO1xufTtcblxuLyoqXG4gKiBDYWxsZWQgb25jZSBlYWNoIHJlc291cmNlIGhhcyBsb2FkZWQuXG4gKlxuICogQGZpcmVzIGNvbXBsZXRlXG4gKiBAcHJpdmF0ZVxuICovXG5Mb2FkZXIucHJvdG90eXBlLl9vbkNvbXBsZXRlID0gZnVuY3Rpb24gKCkge1xuICAgIHRoaXMuZW1pdCgnY29tcGxldGUnLCB0aGlzLCB0aGlzLnJlc291cmNlcyk7XG59O1xuXG4vKipcbiAqIENhbGxlZCBlYWNoIHRpbWUgYSByZXNvdXJjZXMgaXMgbG9hZGVkLlxuICpcbiAqIEBmaXJlcyBwcm9ncmVzc1xuICogQGZpcmVzIGVycm9yXG4gKiBAZmlyZXMgbG9hZFxuICogQHByaXZhdGVcbiAqL1xuTG9hZGVyLnByb3RvdHlwZS5fb25Mb2FkID0gZnVuY3Rpb24gKHJlc291cmNlKSB7XG4gICAgdGhpcy5wcm9ncmVzcyArPSB0aGlzLl9wcm9ncmVzc0NodW5rO1xuXG4gICAgdGhpcy5lbWl0KCdwcm9ncmVzcycsIHRoaXMsIHJlc291cmNlKTtcblxuICAgIC8vIHJ1biBtaWRkbGV3YXJlLCB0aGlzICptdXN0KiBoYXBwZW4gYmVmb3JlIGRlcXVldWUgc28gc3ViLWFzc2V0cyBnZXQgYWRkZWQgcHJvcGVybHlcbiAgICB0aGlzLl9ydW5NaWRkbGV3YXJlKHJlc291cmNlLCB0aGlzLl9hZnRlck1pZGRsZXdhcmUsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmVzb3VyY2UuZW1pdCgnYWZ0ZXJNaWRkbGV3YXJlJywgcmVzb3VyY2UpO1xuXG4gICAgICAgIHRoaXMuX251bVRvTG9hZC0tO1xuXG4gICAgICAgIC8vIGRvIGNvbXBsZXRpb24gY2hlY2tcbiAgICAgICAgaWYgKHRoaXMuX251bVRvTG9hZCA9PT0gMCkge1xuICAgICAgICAgICAgdGhpcy5wcm9ncmVzcyA9IDEwMDtcbiAgICAgICAgICAgIHRoaXMuX29uQ29tcGxldGUoKTtcbiAgICAgICAgfVxuICAgICAgICBcbiAgICAgICAgaWYgKHJlc291cmNlLmVycm9yKSB7XG4gICAgICAgICAgICB0aGlzLmVtaXQoJ2Vycm9yJywgcmVzb3VyY2UuZXJyb3IsIHRoaXMsIHJlc291cmNlKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuZW1pdCgnbG9hZCcsIHRoaXMsIHJlc291cmNlKTtcbiAgICAgICAgfVxuICAgIH0pO1xuICAgIFxuXG5cbiAgICAvLyByZW1vdmUgdGhpcyByZXNvdXJjZSBmcm9tIHRoZSBhc3luYyBxdWV1ZVxuICAgIHJlc291cmNlLl9kZXF1ZXVlKCk7XG59O1xuXG4vKipcbiAqIFJ1biBtaWRkbGV3YXJlIGZ1bmN0aW9ucyBvbiBhIHJlc291cmNlLlxuICpcbiAqIEBwcml2YXRlXG4gKi9cbkxvYWRlci5wcm90b3R5cGUuX3J1bk1pZGRsZXdhcmUgPSBmdW5jdGlvbiAocmVzb3VyY2UsIGZucywgY2IpIHtcbiAgICB2YXIgc2VsZiA9IHRoaXM7XG5cbiAgICBhc3luYy5lYWNoU2VyaWVzKGZucywgZnVuY3Rpb24gKGZuLCBuZXh0KSB7XG4gICAgICAgIGZuLmNhbGwoc2VsZiwgcmVzb3VyY2UsIG5leHQpO1xuICAgIH0sIGNiLmJpbmQodGhpcywgcmVzb3VyY2UpKTtcbn07XG5cbkxvYWRlci5MT0FEX1RZUEUgPSBSZXNvdXJjZS5MT0FEX1RZUEU7XG5Mb2FkZXIuWEhSX1JFQURZX1NUQVRFID0gUmVzb3VyY2UuWEhSX1JFQURZX1NUQVRFO1xuTG9hZGVyLlhIUl9SRVNQT05TRV9UWVBFID0gUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEU7XG4iLCJ2YXIgRXZlbnRFbWl0dGVyID0gcmVxdWlyZSgnZXZlbnRlbWl0dGVyMycpLFxuICAgIF91cmwgPSByZXF1aXJlKCd1cmwnKSxcbiAgICAvLyB0ZXN0cyBpcyBDT1JTIGlzIHN1cHBvcnRlZCBpbiBYSFIsIGlmIG5vdCB3ZSBuZWVkIHRvIHVzZSBYRFJcbiAgICB1c2VYZHIgPSAhISh3aW5kb3cuWERvbWFpblJlcXVlc3QgJiYgISgnd2l0aENyZWRlbnRpYWxzJyBpbiAobmV3IFhNTEh0dHBSZXF1ZXN0KCkpKSksXG4gICAgdGVtcEFuY2hvciA9IG51bGw7XG5cbi8qKlxuICogTWFuYWdlcyB0aGUgc3RhdGUgYW5kIGxvYWRpbmcgb2YgYSBzaW5nbGUgcmVzb3VyY2UgcmVwcmVzZW50ZWQgYnlcbiAqIGEgc2luZ2xlIFVSTC5cbiAqXG4gKiBAY2xhc3NcbiAqIEBwYXJhbSBuYW1lIHtzdHJpbmd9IFRoZSBuYW1lIG9mIHRoZSByZXNvdXJjZSB0byBsb2FkLlxuICogQHBhcmFtIHVybCB7c3RyaW5nfHN0cmluZ1tdfSBUaGUgdXJsIGZvciB0aGlzIHJlc291cmNlLCBmb3IgYXVkaW8vdmlkZW8gbG9hZHMgeW91IGNhbiBwYXNzIGFuIGFycmF5IG9mIHNvdXJjZXMuXG4gKiBAcGFyYW0gW29wdGlvbnNdIHtvYmplY3R9IFRoZSBvcHRpb25zIGZvciB0aGUgbG9hZC5cbiAqIEBwYXJhbSBbb3B0aW9ucy5jcm9zc09yaWdpbl0ge3N0cmluZ3xib29sZWFufSBJcyB0aGlzIHJlcXVlc3QgY3Jvc3Mtb3JpZ2luPyBEZWZhdWx0IGlzIHRvIGRldGVybWluZSBhdXRvbWF0aWNhbGx5LlxuICogQHBhcmFtIFtvcHRpb25zLmxvYWRUeXBlPVJlc291cmNlLkxPQURfVFlQRS5YSFJdIHtSZXNvdXJjZS5MT0FEX1RZUEV9IEhvdyBzaG91bGQgdGhpcyByZXNvdXJjZSBiZSBsb2FkZWQ/XG4gKiBAcGFyYW0gW29wdGlvbnMueGhyVHlwZT1SZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRS5ERUZBVUxUXSB7UmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEV9IEhvdyBzaG91bGQgdGhlIGRhdGEgYmVpbmdcbiAqICAgICAgbG9hZGVkIGJlIGludGVycHJldGVkIHdoZW4gdXNpbmcgWEhSP1xuICogQHBhcmFtIFtvcHRpb25zLm1ldGFkYXRhXSB7b2JqZWN0fSBFeHRyYSBpbmZvIGZvciBtaWRkbGV3YXJlLlxuICovXG5mdW5jdGlvbiBSZXNvdXJjZShuYW1lLCB1cmwsIG9wdGlvbnMpIHtcbiAgICBFdmVudEVtaXR0ZXIuY2FsbCh0aGlzKTtcblxuICAgIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuXG4gICAgaWYgKHR5cGVvZiBuYW1lICE9PSAnc3RyaW5nJyB8fCB0eXBlb2YgdXJsICE9PSAnc3RyaW5nJykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0JvdGggbmFtZSBhbmQgdXJsIGFyZSByZXF1aXJlZCBmb3IgY29uc3RydWN0aW5nIGEgcmVzb3VyY2UuJyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhlIG5hbWUgb2YgdGhpcyByZXNvdXJjZS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge3N0cmluZ31cbiAgICAgKiBAcmVhZG9ubHlcbiAgICAgKi9cbiAgICB0aGlzLm5hbWUgPSBuYW1lO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHVybCB1c2VkIHRvIGxvYWQgdGhpcyByZXNvdXJjZS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge3N0cmluZ31cbiAgICAgKiBAcmVhZG9ubHlcbiAgICAgKi9cbiAgICB0aGlzLnVybCA9IHVybDtcblxuICAgIC8qKlxuICAgICAqIFN0b3JlcyB3aGV0aGVyIG9yIG5vdCB0aGlzIHVybCBpcyBhIGRhdGEgdXJsLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKiBAcmVhZG9ubHlcbiAgICAgKi9cbiAgICB0aGlzLmlzRGF0YVVybCA9IHRoaXMudXJsLmluZGV4T2YoJ2RhdGE6JykgPT09IDA7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgZGF0YSB0aGF0IHdhcyBsb2FkZWQgYnkgdGhlIHJlc291cmNlLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7YW55fVxuICAgICAqL1xuICAgIHRoaXMuZGF0YSA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBJcyB0aGlzIHJlcXVlc3QgY3Jvc3Mtb3JpZ2luPyBJZiB1bnNldCwgZGV0ZXJtaW5lZCBhdXRvbWF0aWNhbGx5LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7c3RyaW5nfVxuICAgICAqL1xuICAgIHRoaXMuY3Jvc3NPcmlnaW4gPSBvcHRpb25zLmNyb3NzT3JpZ2luID09PSB0cnVlID8gJ2Fub255bW91cycgOiBvcHRpb25zLmNyb3NzT3JpZ2luO1xuXG4gICAgLyoqXG4gICAgICogVGhlIG1ldGhvZCBvZiBsb2FkaW5nIHRvIHVzZSBmb3IgdGhpcyByZXNvdXJjZS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1Jlc291cmNlLkxPQURfVFlQRX1cbiAgICAgKi9cbiAgICB0aGlzLmxvYWRUeXBlID0gb3B0aW9ucy5sb2FkVHlwZSB8fCB0aGlzLl9kZXRlcm1pbmVMb2FkVHlwZSgpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHR5cGUgdXNlZCB0byBsb2FkIHRoZSByZXNvdXJjZSB2aWEgWEhSLiBJZiB1bnNldCwgZGV0ZXJtaW5lZCBhdXRvbWF0aWNhbGx5LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7c3RyaW5nfVxuICAgICAqL1xuICAgIHRoaXMueGhyVHlwZSA9IG9wdGlvbnMueGhyVHlwZTtcblxuICAgIC8qKlxuICAgICAqIEV4dHJhIGluZm8gZm9yIG1pZGRsZXdhcmVcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge29iamVjdH1cbiAgICAgKi9cbiAgICB0aGlzLm1ldGFkYXRhID0gb3B0aW9ucy5tZXRhZGF0YSB8fCB7fTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBlcnJvciB0aGF0IG9jY3VycmVkIHdoaWxlIGxvYWRpbmcgKGlmIGFueSkuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtFcnJvcn1cbiAgICAgKiBAcmVhZG9ubHlcbiAgICAgKi9cbiAgICB0aGlzLmVycm9yID0gbnVsbDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBYSFIgb2JqZWN0IHRoYXQgd2FzIHVzZWQgdG8gbG9hZCB0aGlzIHJlc291cmNlLiBUaGlzIGlzIG9ubHkgc2V0XG4gICAgICogd2hlbiBgbG9hZFR5cGVgIGlzIGBSZXNvdXJjZS5MT0FEX1RZUEUuWEhSYC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1hNTEh0dHBSZXF1ZXN0fVxuICAgICAqL1xuICAgIHRoaXMueGhyID0gbnVsbDtcblxuICAgIC8qKlxuICAgICAqIERlc2NyaWJlcyBpZiB0aGlzIHJlc291cmNlIHdhcyBsb2FkZWQgYXMganNvbi4gT25seSB2YWxpZCBhZnRlciB0aGUgcmVzb3VyY2VcbiAgICAgKiBoYXMgY29tcGxldGVseSBsb2FkZWQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqL1xuICAgIHRoaXMuaXNKc29uID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBEZXNjcmliZXMgaWYgdGhpcyByZXNvdXJjZSB3YXMgbG9hZGVkIGFzIHhtbC4gT25seSB2YWxpZCBhZnRlciB0aGUgcmVzb3VyY2VcbiAgICAgKiBoYXMgY29tcGxldGVseSBsb2FkZWQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqL1xuICAgIHRoaXMuaXNYbWwgPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIERlc2NyaWJlcyBpZiB0aGlzIHJlc291cmNlIHdhcyBsb2FkZWQgYXMgYW4gaW1hZ2UgdGFnLiBPbmx5IHZhbGlkIGFmdGVyIHRoZSByZXNvdXJjZVxuICAgICAqIGhhcyBjb21wbGV0ZWx5IGxvYWRlZC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICovXG4gICAgdGhpcy5pc0ltYWdlID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBEZXNjcmliZXMgaWYgdGhpcyByZXNvdXJjZSB3YXMgbG9hZGVkIGFzIGFuIGF1ZGlvIHRhZy4gT25seSB2YWxpZCBhZnRlciB0aGUgcmVzb3VyY2VcbiAgICAgKiBoYXMgY29tcGxldGVseSBsb2FkZWQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqL1xuICAgIHRoaXMuaXNBdWRpbyA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogRGVzY3JpYmVzIGlmIHRoaXMgcmVzb3VyY2Ugd2FzIGxvYWRlZCBhcyBhIHZpZGVvIHRhZy4gT25seSB2YWxpZCBhZnRlciB0aGUgcmVzb3VyY2VcbiAgICAgKiBoYXMgY29tcGxldGVseSBsb2FkZWQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqL1xuICAgIHRoaXMuaXNWaWRlbyA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGBkZXF1ZXVlYCBtZXRob2QgdGhhdCB3aWxsIGJlIHVzZWQgYSBzdG9yYWdlIHBsYWNlIGZvciB0aGUgYXN5bmMgcXVldWUgZGVxdWV1ZSBtZXRob2RcbiAgICAgKiB1c2VkIHByaXZhdGVseSBieSB0aGUgbG9hZGVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7ZnVuY3Rpb259XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9kZXF1ZXVlID0gbnVsbDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBgY29tcGxldGVgIGZ1bmN0aW9uIGJvdW5kIHRvIHRoaXMgcmVzb3VyY2UncyBjb250ZXh0LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7ZnVuY3Rpb259XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9ib3VuZENvbXBsZXRlID0gdGhpcy5jb21wbGV0ZS5iaW5kKHRoaXMpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGBfb25FcnJvcmAgZnVuY3Rpb24gYm91bmQgdG8gdGhpcyByZXNvdXJjZSdzIGNvbnRleHQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtmdW5jdGlvbn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX2JvdW5kT25FcnJvciA9IHRoaXMuX29uRXJyb3IuYmluZCh0aGlzKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBgX29uUHJvZ3Jlc3NgIGZ1bmN0aW9uIGJvdW5kIHRvIHRoaXMgcmVzb3VyY2UncyBjb250ZXh0LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7ZnVuY3Rpb259XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9ib3VuZE9uUHJvZ3Jlc3MgPSB0aGlzLl9vblByb2dyZXNzLmJpbmQodGhpcyk7XG5cbiAgICAvLyB4aHIgY2FsbGJhY2tzXG4gICAgdGhpcy5fYm91bmRYaHJPbkVycm9yID0gdGhpcy5feGhyT25FcnJvci5iaW5kKHRoaXMpO1xuICAgIHRoaXMuX2JvdW5kWGhyT25BYm9ydCA9IHRoaXMuX3hock9uQWJvcnQuYmluZCh0aGlzKTtcbiAgICB0aGlzLl9ib3VuZFhock9uTG9hZCA9IHRoaXMuX3hock9uTG9hZC5iaW5kKHRoaXMpO1xuICAgIHRoaXMuX2JvdW5kWGRyT25UaW1lb3V0ID0gdGhpcy5feGRyT25UaW1lb3V0LmJpbmQodGhpcyk7XG5cbiAgICAvKipcbiAgICAgKiBFbWl0dGVkIHdoZW4gdGhlIHJlc291cmNlIGJlaW5ncyB0byBsb2FkLlxuICAgICAqXG4gICAgICogQGV2ZW50IHN0YXJ0XG4gICAgICogQG1lbWJlcm9mIFJlc291cmNlI1xuICAgICAqL1xuXG4gICAgLyoqXG4gICAgICogRW1pdHRlZCBlYWNoIHRpbWUgcHJvZ3Jlc3Mgb2YgdGhpcyByZXNvdXJjZSBsb2FkIHVwZGF0ZXMuXG4gICAgICogTm90IGFsbCByZXNvdXJjZXMgdHlwZXMgYW5kIGxvYWRlciBzeXN0ZW1zIGNhbiBzdXBwb3J0IHRoaXMgZXZlbnRcbiAgICAgKiBzbyBzb21ldGltZXMgaXQgbWF5IG5vdCBiZSBhdmFpbGFibGUuIElmIHRoZSByZXNvdXJjZVxuICAgICAqIGlzIGJlaW5nIGxvYWRlZCBvbiBhIG1vZGVybiBicm93c2VyLCB1c2luZyBYSFIsIGFuZCB0aGUgcmVtb3RlIHNlcnZlclxuICAgICAqIHByb3Blcmx5IHNldHMgQ29udGVudC1MZW5ndGggaGVhZGVycywgdGhlbiB0aGlzIHdpbGwgYmUgYXZhaWxhYmxlLlxuICAgICAqXG4gICAgICogQGV2ZW50IHByb2dyZXNzXG4gICAgICogQG1lbWJlcm9mIFJlc291cmNlI1xuICAgICAqL1xuXG4gICAgLyoqXG4gICAgICogRW1pdHRlZCBvbmNlIHRoaXMgcmVzb3VyY2UgaGFzIGxvYWRlZCwgaWYgdGhlcmUgd2FzIGFuIGVycm9yIGl0IHdpbGxcbiAgICAgKiBiZSBpbiB0aGUgYGVycm9yYCBwcm9wZXJ0eS5cbiAgICAgKlxuICAgICAqIEBldmVudCBjb21wbGV0ZVxuICAgICAqIEBtZW1iZXJvZiBSZXNvdXJjZSNcbiAgICAgKi9cbn1cblxuUmVzb3VyY2UucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShFdmVudEVtaXR0ZXIucHJvdG90eXBlKTtcblJlc291cmNlLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFJlc291cmNlO1xubW9kdWxlLmV4cG9ydHMgPSBSZXNvdXJjZTtcblxuLyoqXG4gKiBNYXJrcyB0aGUgcmVzb3VyY2UgYXMgY29tcGxldGUuXG4gKlxuICogQGZpcmVzIGNvbXBsZXRlXG4gKi9cblJlc291cmNlLnByb3RvdHlwZS5jb21wbGV0ZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAvLyBUT0RPOiBDbGVhbiB0aGlzIHVwIGluIGEgd3JhcHBlciBvciBzb21ldGhpbmcuLi5ncm9zcy4uLi5cbiAgICBpZiAodGhpcy5kYXRhICYmIHRoaXMuZGF0YS5yZW1vdmVFdmVudExpc3RlbmVyKSB7XG4gICAgICAgIHRoaXMuZGF0YS5yZW1vdmVFdmVudExpc3RlbmVyKCdlcnJvcicsIHRoaXMuX2JvdW5kT25FcnJvcik7XG4gICAgICAgIHRoaXMuZGF0YS5yZW1vdmVFdmVudExpc3RlbmVyKCdsb2FkJywgdGhpcy5fYm91bmRDb21wbGV0ZSk7XG4gICAgICAgIHRoaXMuZGF0YS5yZW1vdmVFdmVudExpc3RlbmVyKCdwcm9ncmVzcycsIHRoaXMuX2JvdW5kT25Qcm9ncmVzcyk7XG4gICAgICAgIHRoaXMuZGF0YS5yZW1vdmVFdmVudExpc3RlbmVyKCdjYW5wbGF5dGhyb3VnaCcsIHRoaXMuX2JvdW5kQ29tcGxldGUpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnhocikge1xuICAgICAgICBpZiAodGhpcy54aHIucmVtb3ZlRXZlbnRMaXN0ZW5lcikge1xuICAgICAgICAgICAgdGhpcy54aHIucmVtb3ZlRXZlbnRMaXN0ZW5lcignZXJyb3InLCB0aGlzLl9ib3VuZFhock9uRXJyb3IpO1xuICAgICAgICAgICAgdGhpcy54aHIucmVtb3ZlRXZlbnRMaXN0ZW5lcignYWJvcnQnLCB0aGlzLl9ib3VuZFhock9uQWJvcnQpO1xuICAgICAgICAgICAgdGhpcy54aHIucmVtb3ZlRXZlbnRMaXN0ZW5lcigncHJvZ3Jlc3MnLCB0aGlzLl9ib3VuZE9uUHJvZ3Jlc3MpO1xuICAgICAgICAgICAgdGhpcy54aHIucmVtb3ZlRXZlbnRMaXN0ZW5lcignbG9hZCcsIHRoaXMuX2JvdW5kWGhyT25Mb2FkKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMueGhyLm9uZXJyb3IgPSBudWxsO1xuICAgICAgICAgICAgdGhpcy54aHIub250aW1lb3V0ID0gbnVsbDtcbiAgICAgICAgICAgIHRoaXMueGhyLm9ucHJvZ3Jlc3MgPSBudWxsO1xuICAgICAgICAgICAgdGhpcy54aHIub25sb2FkID0gbnVsbDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMuZW1pdCgnY29tcGxldGUnLCB0aGlzKTtcbn07XG5cbi8qKlxuICogS2lja3Mgb2ZmIGxvYWRpbmcgb2YgdGhpcyByZXNvdXJjZS5cbiAqXG4gKiBAZmlyZXMgc3RhcnRcbiAqIEBwYXJhbSBbY2FsbGJhY2tdIHtmdW5jdGlvbn0gT3B0aW9uYWwgY2FsbGJhY2sgdG8gY2FsbCBvbmNlIHRoZSByZXNvdXJjZSBpcyBsb2FkZWQuXG4gKi9cblJlc291cmNlLnByb3RvdHlwZS5sb2FkID0gZnVuY3Rpb24gKGNiKSB7XG4gICAgdGhpcy5lbWl0KCdzdGFydCcsIHRoaXMpO1xuXG4gICAgLy8gaWYgYSBjYWxsYmFjayBpcyBzZXQsIGxpc3RlbiBmb3IgY29tcGxldGUgZXZlbnRcbiAgICBpZiAoY2IpIHtcbiAgICAgICAgdGhpcy5vbmNlKCdjb21wbGV0ZScsIGNiKTtcbiAgICB9XG5cbiAgICAvLyBpZiB1bnNldCwgZGV0ZXJtaW5lIHRoZSB2YWx1ZVxuICAgIGlmICh0aGlzLmNyb3NzT3JpZ2luID09PSBmYWxzZSB8fCB0eXBlb2YgdGhpcy5jcm9zc09yaWdpbiAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgdGhpcy5jcm9zc09yaWdpbiA9IHRoaXMuX2RldGVybWluZUNyb3NzT3JpZ2luKHRoaXMudXJsKTtcbiAgICB9XG5cbiAgICBzd2l0Y2godGhpcy5sb2FkVHlwZSkge1xuICAgICAgICBjYXNlIFJlc291cmNlLkxPQURfVFlQRS5JTUFHRTpcbiAgICAgICAgICAgIHRoaXMuX2xvYWRJbWFnZSgpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSBSZXNvdXJjZS5MT0FEX1RZUEUuQVVESU86XG4gICAgICAgICAgICB0aGlzLl9sb2FkRWxlbWVudCgnYXVkaW8nKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgUmVzb3VyY2UuTE9BRF9UWVBFLlZJREVPOlxuICAgICAgICAgICAgdGhpcy5fbG9hZEVsZW1lbnQoJ3ZpZGVvJyk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIFJlc291cmNlLkxPQURfVFlQRS5YSFI6XG4gICAgICAgICAgICAvKiBmYWxscyB0aHJvdWdoICovXG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICBpZiAodXNlWGRyICYmIHRoaXMuY3Jvc3NPcmlnaW4pIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9sb2FkWGRyKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9sb2FkWGhyKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBicmVhaztcbiAgICB9XG59O1xuXG4vKipcbiAqIExvYWRzIHRoaXMgcmVzb3VyY2VzIHVzaW5nIGFuIEltYWdlIG9iamVjdC5cbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5SZXNvdXJjZS5wcm90b3R5cGUuX2xvYWRJbWFnZSA9IGZ1bmN0aW9uICgpIHtcbiAgICB0aGlzLmRhdGEgPSBuZXcgSW1hZ2UoKTtcblxuICAgIGlmICh0aGlzLmNyb3NzT3JpZ2luKSB7XG4gICAgICAgIHRoaXMuZGF0YS5jcm9zc09yaWdpbiA9IHRoaXMuY3Jvc3NPcmlnaW47XG4gICAgfVxuXG4gICAgdGhpcy5kYXRhLnNyYyA9IHRoaXMudXJsO1xuXG4gICAgdGhpcy5pc0ltYWdlID0gdHJ1ZTtcblxuICAgIHRoaXMuZGF0YS5hZGRFdmVudExpc3RlbmVyKCdlcnJvcicsIHRoaXMuX2JvdW5kT25FcnJvciwgZmFsc2UpO1xuICAgIHRoaXMuZGF0YS5hZGRFdmVudExpc3RlbmVyKCdsb2FkJywgdGhpcy5fYm91bmRDb21wbGV0ZSwgZmFsc2UpO1xuICAgIHRoaXMuZGF0YS5hZGRFdmVudExpc3RlbmVyKCdwcm9ncmVzcycsIHRoaXMuX2JvdW5kT25Qcm9ncmVzcywgZmFsc2UpO1xufTtcblxuLyoqXG4gKiBMb2FkcyB0aGlzIHJlc291cmNlcyB1c2luZyBhbiBIVE1MQXVkaW9FbGVtZW50IG9yIEhUTUxWaWRlb0VsZW1lbnQuXG4gKlxuICogQHByaXZhdGVcbiAqL1xuUmVzb3VyY2UucHJvdG90eXBlLl9sb2FkRWxlbWVudCA9IGZ1bmN0aW9uICh0eXBlKSB7XG4gICAgaWYgKHR5cGUgPT09ICdhdWRpbycgJiYgdHlwZW9mIEF1ZGlvICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICB0aGlzLmRhdGEgPSBuZXcgQXVkaW8oKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHRoaXMuZGF0YSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQodHlwZSk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuZGF0YSA9PT0gbnVsbCkge1xuICAgICAgICB0aGlzLmVycm9yID0gbmV3IEVycm9yKCdVbnN1cHBvcnRlZCBlbGVtZW50ICcgKyB0eXBlKTtcbiAgICAgICAgdGhpcy5jb21wbGV0ZSgpO1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gc3VwcG9ydCBmb3IgQ29jb29uSlMgQ2FudmFzKyBydW50aW1lLCBsYWNrcyBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzb3VyY2UnKVxuICAgIGlmIChuYXZpZ2F0b3IuaXNDb2Nvb25KUykge1xuICAgICAgICB0aGlzLmRhdGEuc3JjID0gQXJyYXkuaXNBcnJheSh0aGlzLnVybCkgPyB0aGlzLnVybFswXSA6IHRoaXMudXJsO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkodGhpcy51cmwpKSB7XG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMudXJsLmxlbmd0aDsgKytpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5kYXRhLmFwcGVuZENoaWxkKHRoaXMuX2NyZWF0ZVNvdXJjZSh0eXBlLCB0aGlzLnVybFtpXSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5kYXRhLmFwcGVuZENoaWxkKHRoaXMuX2NyZWF0ZVNvdXJjZSh0eXBlLCB0aGlzLnVybCkpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgdGhpc1snaXMnICsgdHlwZVswXS50b1VwcGVyQ2FzZSgpICsgdHlwZS5zdWJzdHJpbmcoMSldID0gdHJ1ZTtcblxuICAgIHRoaXMuZGF0YS5hZGRFdmVudExpc3RlbmVyKCdlcnJvcicsIHRoaXMuX2JvdW5kT25FcnJvciwgZmFsc2UpO1xuICAgIHRoaXMuZGF0YS5hZGRFdmVudExpc3RlbmVyKCdsb2FkJywgdGhpcy5fYm91bmRDb21wbGV0ZSwgZmFsc2UpO1xuICAgIHRoaXMuZGF0YS5hZGRFdmVudExpc3RlbmVyKCdwcm9ncmVzcycsIHRoaXMuX2JvdW5kT25Qcm9ncmVzcywgZmFsc2UpO1xuICAgIHRoaXMuZGF0YS5hZGRFdmVudExpc3RlbmVyKCdjYW5wbGF5dGhyb3VnaCcsIHRoaXMuX2JvdW5kQ29tcGxldGUsIGZhbHNlKTtcblxuICAgIHRoaXMuZGF0YS5sb2FkKCk7XG59O1xuXG4vKipcbiAqIExvYWRzIHRoaXMgcmVzb3VyY2VzIHVzaW5nIGFuIFhNTEh0dHBSZXF1ZXN0LlxuICpcbiAqIEBwcml2YXRlXG4gKi9cblJlc291cmNlLnByb3RvdHlwZS5fbG9hZFhociA9IGZ1bmN0aW9uICgpIHtcbiAgICAvLyBpZiB1bnNldCwgZGV0ZXJtaW5lIHRoZSB2YWx1ZVxuICAgIGlmICh0eXBlb2YgdGhpcy54aHJUeXBlICE9PSAnc3RyaW5nJykge1xuICAgICAgICB0aGlzLnhoclR5cGUgPSB0aGlzLl9kZXRlcm1pbmVYaHJUeXBlKCk7XG4gICAgfVxuXG4gICAgdmFyIHhociA9IHRoaXMueGhyID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7XG5cbiAgICAvLyBzZXQgdGhlIHJlcXVlc3QgdHlwZSBhbmQgdXJsXG4gICAgeGhyLm9wZW4oJ0dFVCcsIHRoaXMudXJsLCB0cnVlKTtcblxuICAgIC8vIGxvYWQganNvbiBhcyB0ZXh0IGFuZCBwYXJzZSBpdCBvdXJzZWx2ZXMuIFdlIGRvIHRoaXMgYmVjYXVzZSBzb21lIGJyb3dzZXJzXG4gICAgLy8gKmNvdWdoKiBzYWZhcmkgKmNvdWdoKiBjYW4ndCBkZWFsIHdpdGggaXQuXG4gICAgaWYgKHRoaXMueGhyVHlwZSA9PT0gUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuSlNPTiB8fCB0aGlzLnhoclR5cGUgPT09IFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkRPQ1VNRU5UKSB7XG4gICAgICAgIHhoci5yZXNwb25zZVR5cGUgPSBSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRS5URVhUO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgeGhyLnJlc3BvbnNlVHlwZSA9IHRoaXMueGhyVHlwZTtcbiAgICB9XG5cbiAgICB4aHIuYWRkRXZlbnRMaXN0ZW5lcignZXJyb3InLCB0aGlzLl9ib3VuZFhock9uRXJyb3IsIGZhbHNlKTtcbiAgICB4aHIuYWRkRXZlbnRMaXN0ZW5lcignYWJvcnQnLCB0aGlzLl9ib3VuZFhock9uQWJvcnQsIGZhbHNlKTtcbiAgICB4aHIuYWRkRXZlbnRMaXN0ZW5lcigncHJvZ3Jlc3MnLCB0aGlzLl9ib3VuZE9uUHJvZ3Jlc3MsIGZhbHNlKTtcbiAgICB4aHIuYWRkRXZlbnRMaXN0ZW5lcignbG9hZCcsIHRoaXMuX2JvdW5kWGhyT25Mb2FkLCBmYWxzZSk7XG5cbiAgICB4aHIuc2VuZCgpO1xufTtcblxuLyoqXG4gKiBMb2FkcyB0aGlzIHJlc291cmNlcyB1c2luZyBhbiBYRG9tYWluUmVxdWVzdC4gVGhpcyBpcyBoZXJlIGJlY2F1c2Ugd2UgbmVlZCB0byBzdXBwb3J0IElFOSAoZ3Jvc3MpLlxuICpcbiAqIEBwcml2YXRlXG4gKi9cblJlc291cmNlLnByb3RvdHlwZS5fbG9hZFhkciA9IGZ1bmN0aW9uICgpIHtcbiAgICAvLyBpZiB1bnNldCwgZGV0ZXJtaW5lIHRoZSB2YWx1ZVxuICAgIGlmICh0eXBlb2YgdGhpcy54aHJUeXBlICE9PSAnc3RyaW5nJykge1xuICAgICAgICB0aGlzLnhoclR5cGUgPSB0aGlzLl9kZXRlcm1pbmVYaHJUeXBlKCk7XG4gICAgfVxuXG4gICAgdmFyIHhkciA9IHRoaXMueGhyID0gbmV3IFhEb21haW5SZXF1ZXN0KCk7XG5cbiAgICAvLyBYRG9tYWluUmVxdWVzdCBoYXMgYSBmZXcgcXVpcmtzLiBPY2Nhc2lvbmFsbHkgaXQgd2lsbCBhYm9ydCByZXF1ZXN0c1xuICAgIC8vIEEgd2F5IHRvIGF2b2lkIHRoaXMgaXMgdG8gbWFrZSBzdXJlIEFMTCBjYWxsYmFja3MgYXJlIHNldCBldmVuIGlmIG5vdCB1c2VkXG4gICAgLy8gTW9yZSBpbmZvIGhlcmU6IGh0dHA6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvMTU3ODY5NjYveGRvbWFpbnJlcXVlc3QtYWJvcnRzLXBvc3Qtb24taWUtOVxuICAgIHhkci50aW1lb3V0ID0gNTAwMDtcblxuICAgIHhkci5vbmVycm9yID0gdGhpcy5fYm91bmRYaHJPbkVycm9yO1xuICAgIHhkci5vbnRpbWVvdXQgPSB0aGlzLl9ib3VuZFhkck9uVGltZW91dDtcbiAgICB4ZHIub25wcm9ncmVzcyA9IHRoaXMuX2JvdW5kT25Qcm9ncmVzcztcbiAgICB4ZHIub25sb2FkID0gdGhpcy5fYm91bmRYaHJPbkxvYWQ7XG5cbiAgICB4ZHIub3BlbignR0VUJywgdGhpcy51cmwsIHRydWUpO1xuXG4gICAgLy8gIE5vdGU6IFRoZSB4ZHIuc2VuZCgpIGNhbGwgaXMgd3JhcHBlZCBpbiBhIHRpbWVvdXQgdG8gcHJldmVudCBhbiBpc3N1ZSB3aXRoIHRoZSBpbnRlcmZhY2Ugd2hlcmUgc29tZSByZXF1ZXN0cyBhcmUgbG9zdFxuICAgIC8vICBpZiBtdWx0aXBsZSBYRG9tYWluUmVxdWVzdHMgYXJlIGJlaW5nIHNlbnQgYXQgdGhlIHNhbWUgdGltZS5cbiAgICAvLyBTb21lIGluZm8gaGVyZTogaHR0cHM6Ly9naXRodWIuY29tL3Bob3RvbnN0b3JtL3BoYXNlci9pc3N1ZXMvMTI0OFxuICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgICB4ZHIuc2VuZCgpO1xuICAgIH0sIDApO1xufTtcblxuLyoqXG4gKiBDcmVhdGVzIGEgc291cmNlIHVzZWQgaW4gbG9hZGluZyB2aWEgYW4gZWxlbWVudC5cbiAqXG4gKiBAcGFyYW0gdHlwZSB7c3RyaW5nfSBUaGUgZWxlbWVudCB0eXBlICh2aWRlbyBvciBhdWRpbykuXG4gKiBAcGFyYW0gdXJsIHtzdHJpbmd9IFRoZSBzb3VyY2UgVVJMIHRvIGxvYWQgZnJvbS5cbiAqIEBwYXJhbSBbbWltZV0ge3N0cmluZ30gVGhlIG1pbWUgdHlwZSBvZiB0aGUgdmlkZW9cbiAqIEBwcml2YXRlXG4gKi9cblJlc291cmNlLnByb3RvdHlwZS5fY3JlYXRlU291cmNlID0gZnVuY3Rpb24gKHR5cGUsIHVybCwgbWltZSkge1xuICAgIGlmICghbWltZSkge1xuICAgICAgICBtaW1lID0gdHlwZSArICcvJyArIHVybC5zdWJzdHIodXJsLmxhc3RJbmRleE9mKCcuJykgKyAxKTtcbiAgICB9XG5cbiAgICB2YXIgc291cmNlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc291cmNlJyk7XG5cbiAgICBzb3VyY2Uuc3JjID0gdXJsO1xuICAgIHNvdXJjZS50eXBlID0gbWltZTtcblxuICAgIHJldHVybiBzb3VyY2U7XG59O1xuXG4vKipcbiAqIENhbGxlZCBpZiBhIGxvYWQgZXJyb3JzIG91dC5cbiAqXG4gKiBAcGFyYW0gZXZlbnQge0V2ZW50fSBUaGUgZXJyb3IgZXZlbnQgZnJvbSB0aGUgZWxlbWVudCB0aGF0IGVtaXRzIGl0LlxuICogQHByaXZhdGVcbiAqL1xuUmVzb3VyY2UucHJvdG90eXBlLl9vbkVycm9yID0gZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgdGhpcy5lcnJvciA9IG5ldyBFcnJvcignRmFpbGVkIHRvIGxvYWQgZWxlbWVudCB1c2luZyAnICsgZXZlbnQudGFyZ2V0Lm5vZGVOYW1lKTtcbiAgICB0aGlzLmNvbXBsZXRlKCk7XG59O1xuXG4vKipcbiAqIENhbGxlZCBpZiBhIGxvYWQgcHJvZ3Jlc3MgZXZlbnQgZmlyZXMgZm9yIHhoci94ZHIuXG4gKlxuICogQGZpcmVzIHByb2dyZXNzXG4gKiBAcGFyYW0gZXZlbnQge1hNTEh0dHBSZXF1ZXN0UHJvZ3Jlc3NFdmVudHxFdmVudH1cbiAqIEBwcml2YXRlXG4gKi9cblJlc291cmNlLnByb3RvdHlwZS5fb25Qcm9ncmVzcyA9ICBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICBpZiAoZXZlbnQgJiYgZXZlbnQubGVuZ3RoQ29tcHV0YWJsZSkge1xuICAgICAgICB0aGlzLmVtaXQoJ3Byb2dyZXNzJywgdGhpcywgZXZlbnQubG9hZGVkIC8gZXZlbnQudG90YWwpO1xuICAgIH1cbn07XG5cbi8qKlxuICogQ2FsbGVkIGlmIGFuIGVycm9yIGV2ZW50IGZpcmVzIGZvciB4aHIveGRyLlxuICpcbiAqIEBwYXJhbSBldmVudCB7WE1MSHR0cFJlcXVlc3RFcnJvckV2ZW50fEV2ZW50fVxuICogQHByaXZhdGVcbiAqL1xuUmVzb3VyY2UucHJvdG90eXBlLl94aHJPbkVycm9yID0gZnVuY3Rpb24gKCkge1xuICAgIHRoaXMuZXJyb3IgPSBuZXcgRXJyb3IoXG4gICAgICAgIHJlcVR5cGUodGhpcy54aHIpICsgJyBSZXF1ZXN0IGZhaWxlZC4gJyArXG4gICAgICAgICdTdGF0dXM6ICcgKyB0aGlzLnhoci5zdGF0dXMgKyAnLCB0ZXh0OiBcIicgKyB0aGlzLnhoci5zdGF0dXNUZXh0ICsgJ1wiJ1xuICAgICk7XG5cbiAgICB0aGlzLmNvbXBsZXRlKCk7XG59O1xuXG4vKipcbiAqIENhbGxlZCBpZiBhbiBhYm9ydCBldmVudCBmaXJlcyBmb3IgeGhyLlxuICpcbiAqIEBwYXJhbSBldmVudCB7WE1MSHR0cFJlcXVlc3RBYm9ydEV2ZW50fVxuICogQHByaXZhdGVcbiAqL1xuUmVzb3VyY2UucHJvdG90eXBlLl94aHJPbkFib3J0ID0gZnVuY3Rpb24gKCkge1xuICAgIHRoaXMuZXJyb3IgPSBuZXcgRXJyb3IocmVxVHlwZSh0aGlzLnhocikgKyAnIFJlcXVlc3Qgd2FzIGFib3J0ZWQgYnkgdGhlIHVzZXIuJyk7XG4gICAgdGhpcy5jb21wbGV0ZSgpO1xufTtcblxuLyoqXG4gKiBDYWxsZWQgaWYgYSB0aW1lb3V0IGV2ZW50IGZpcmVzIGZvciB4ZHIuXG4gKlxuICogQHBhcmFtIGV2ZW50IHtFdmVudH1cbiAqIEBwcml2YXRlXG4gKi9cblJlc291cmNlLnByb3RvdHlwZS5feGRyT25UaW1lb3V0ID0gZnVuY3Rpb24gKCkge1xuICAgIHRoaXMuZXJyb3IgPSBuZXcgRXJyb3IocmVxVHlwZSh0aGlzLnhocikgKyAnIFJlcXVlc3QgdGltZWQgb3V0LicpO1xuICAgIHRoaXMuY29tcGxldGUoKTtcbn07XG5cbi8qKlxuICogQ2FsbGVkIHdoZW4gZGF0YSBzdWNjZXNzZnVsbHkgbG9hZHMgZnJvbSBhbiB4aHIveGRyIHJlcXVlc3QuXG4gKlxuICogQHBhcmFtIGV2ZW50IHtYTUxIdHRwUmVxdWVzdExvYWRFdmVudHxFdmVudH1cbiAqIEBwcml2YXRlXG4gKi9cblJlc291cmNlLnByb3RvdHlwZS5feGhyT25Mb2FkID0gZnVuY3Rpb24gKCkge1xuICAgIHZhciB4aHIgPSB0aGlzLnhocixcbiAgICAgICAgc3RhdHVzID0geGhyLnN0YXR1cyAhPT0gdW5kZWZpbmVkID8geGhyLnN0YXR1cyA6IDIwMDsgLy9YRFIgaGFzIG5vIGAuc3RhdHVzYCwgYXNzdW1lIDIwMC5cblxuICAgIC8vIHN0YXR1cyBjYW4gYmUgMCB3aGVuIHVzaW5nIHRoZSBmaWxlOi8vIHByb3RvY29sLCBhbHNvIGNoZWNrIGlmIGEgcmVzcG9uc2Ugd2FzIGZvdW5kXG4gICAgaWYgKHN0YXR1cyA9PT0gMjAwIHx8IHN0YXR1cyA9PT0gMjA0IHx8IChzdGF0dXMgPT09IDAgJiYgeGhyLnJlc3BvbnNlVGV4dC5sZW5ndGggPiAwKSkge1xuICAgICAgICAvLyBpZiB0ZXh0LCBqdXN0IHJldHVybiBpdFxuICAgICAgICBpZiAodGhpcy54aHJUeXBlID09PSBSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRS5URVhUKSB7XG4gICAgICAgICAgICB0aGlzLmRhdGEgPSB4aHIucmVzcG9uc2VUZXh0O1xuICAgICAgICB9XG4gICAgICAgIC8vIGlmIGpzb24sIHBhcnNlIGludG8ganNvbiBvYmplY3RcbiAgICAgICAgZWxzZSBpZiAodGhpcy54aHJUeXBlID09PSBSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRS5KU09OKSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIHRoaXMuZGF0YSA9IEpTT04ucGFyc2UoeGhyLnJlc3BvbnNlVGV4dCk7XG4gICAgICAgICAgICAgICAgdGhpcy5pc0pzb24gPSB0cnVlO1xuICAgICAgICAgICAgfSBjYXRjaChlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5lcnJvciA9IG5ldyBFcnJvcignRXJyb3IgdHJ5aW5nIHRvIHBhcnNlIGxvYWRlZCBqc29uOicsIGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIGlmIHhtbCwgcGFyc2UgaW50byBhbiB4bWwgZG9jdW1lbnQgb3IgZGl2IGVsZW1lbnRcbiAgICAgICAgZWxzZSBpZiAodGhpcy54aHJUeXBlID09PSBSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRS5ET0NVTUVOVCkge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBpZiAod2luZG93LkRPTVBhcnNlcikge1xuICAgICAgICAgICAgICAgICAgICB2YXIgZG9tcGFyc2VyID0gbmV3IERPTVBhcnNlcigpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmRhdGEgPSBkb21wYXJzZXIucGFyc2VGcm9tU3RyaW5nKHhoci5yZXNwb25zZVRleHQsICd0ZXh0L3htbCcpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICAgICAgICAgICAgICBkaXYuaW5uZXJIVE1MID0geGhyLnJlc3BvbnNlVGV4dDtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kYXRhID0gZGl2O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzLmlzWG1sID0gdHJ1ZTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmVycm9yID0gbmV3IEVycm9yKCdFcnJvciB0cnlpbmcgdG8gcGFyc2UgbG9hZGVkIHhtbDonLCBlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvLyBvdGhlciB0eXBlcyBqdXN0IHJldHVybiB0aGUgcmVzcG9uc2VcbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmRhdGEgPSB4aHIucmVzcG9uc2UgfHwgeGhyLnJlc3BvbnNlVGV4dDtcbiAgICAgICAgfVxuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgdGhpcy5lcnJvciA9IG5ldyBFcnJvcignWycgKyB4aHIuc3RhdHVzICsgJ10nICsgeGhyLnN0YXR1c1RleHQgKyAnOicgKyB4aHIucmVzcG9uc2VVUkwpO1xuICAgIH1cblxuICAgIHRoaXMuY29tcGxldGUoKTtcbn07XG5cbmZ1bmN0aW9uIHJlcVR5cGUoeGhyKSB7XG4gICAgcmV0dXJuIHhoci50b1N0cmluZygpLnJlcGxhY2UoJ29iamVjdCAnLCAnJyk7XG59XG5cbi8qKlxuICogU2V0cyB0aGUgYGNyb3NzT3JpZ2luYCBwcm9wZXJ0eSBmb3IgdGhpcyByZXNvdXJjZSBiYXNlZCBvbiBpZiB0aGUgdXJsXG4gKiBmb3IgdGhpcyByZXNvdXJjZSBpcyBjcm9zcy1vcmlnaW4uIElmIGNyb3NzT3JpZ2luIHdhcyBtYW51YWxseSBzZXQsIHRoaXNcbiAqIGZ1bmN0aW9uIGRvZXMgbm90aGluZy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHVybCB7c3RyaW5nfSBUaGUgdXJsIHRvIHRlc3QuXG4gKiBAcGFyYW0gW2xvY2F0aW9uPXdpbmRvdy5sb2NhdGlvbl0ge29iamVjdH0gVGhlIGxvY2F0aW9uIG9iamVjdCB0byB0ZXN0IGFnYWluc3QuXG4gKiBAcmV0dXJuIHtzdHJpbmd9IFRoZSBjcm9zc09yaWdpbiB2YWx1ZSB0byB1c2UgKG9yIGVtcHR5IHN0cmluZyBmb3Igbm9uZSkuXG4gKi9cblJlc291cmNlLnByb3RvdHlwZS5fZGV0ZXJtaW5lQ3Jvc3NPcmlnaW4gPSBmdW5jdGlvbiAodXJsLCBsb2MpIHtcbiAgICAvLyBkYXRhOiBhbmQgamF2YXNjcmlwdDogdXJscyBhcmUgY29uc2lkZXJlZCBzYW1lLW9yaWdpblxuICAgIGlmICh1cmwuaW5kZXhPZignZGF0YTonKSA9PT0gMCkge1xuICAgICAgICByZXR1cm4gJyc7XG4gICAgfVxuXG4gICAgLy8gZGVmYXVsdCBpcyB3aW5kb3cubG9jYXRpb25cbiAgICBsb2MgPSBsb2MgfHwgd2luZG93LmxvY2F0aW9uO1xuXG4gICAgaWYgKCF0ZW1wQW5jaG9yKSB7XG4gICAgICAgIHRlbXBBbmNob3IgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdhJyk7XG4gICAgfVxuXG4gICAgLy8gbGV0IHRoZSBicm93c2VyIGRldGVybWluZSB0aGUgZnVsbCBocmVmIGZvciB0aGUgdXJsIG9mIHRoaXMgcmVzb3VyY2UgYW5kIHRoZW5cbiAgICAvLyBwYXJzZSB3aXRoIHRoZSBub2RlIHVybCBsaWIsIHdlIGNhbid0IHVzZSB0aGUgcHJvcGVydGllcyBvZiB0aGUgYW5jaG9yIGVsZW1lbnRcbiAgICAvLyBiZWNhdXNlIHRoZXkgZG9uJ3Qgd29yayBpbiBJRTkgOihcbiAgICB0ZW1wQW5jaG9yLmhyZWYgPSB1cmw7XG4gICAgdXJsID0gX3VybC5wYXJzZSh0ZW1wQW5jaG9yLmhyZWYpO1xuXG4gICAgdmFyIHNhbWVQb3J0ID0gKCF1cmwucG9ydCAmJiBsb2MucG9ydCA9PT0gJycpIHx8ICh1cmwucG9ydCA9PT0gbG9jLnBvcnQpO1xuXG4gICAgLy8gaWYgY3Jvc3Mgb3JpZ2luXG4gICAgaWYgKHVybC5ob3N0bmFtZSAhPT0gbG9jLmhvc3RuYW1lIHx8ICFzYW1lUG9ydCB8fCB1cmwucHJvdG9jb2wgIT09IGxvYy5wcm90b2NvbCkge1xuICAgICAgICByZXR1cm4gJ2Fub255bW91cyc7XG4gICAgfVxuXG4gICAgcmV0dXJuICcnO1xufTtcblxuLyoqXG4gKiBEZXRlcm1pbmVzIHRoZSByZXNwb25zZVR5cGUgb2YgYW4gWEhSIHJlcXVlc3QgYmFzZWQgb24gdGhlIGV4dGVuc2lvbiBvZiB0aGVcbiAqIHJlc291cmNlIGJlaW5nIGxvYWRlZC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHJldHVybiB7UmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEV9IFRoZSByZXNwb25zZVR5cGUgdG8gdXNlLlxuICovXG5SZXNvdXJjZS5wcm90b3R5cGUuX2RldGVybWluZVhoclR5cGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIFJlc291cmNlLl94aHJUeXBlTWFwW3RoaXMuX2dldEV4dGVuc2lvbigpXSB8fCBSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRS5URVhUO1xufTtcblxuUmVzb3VyY2UucHJvdG90eXBlLl9kZXRlcm1pbmVMb2FkVHlwZSA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gUmVzb3VyY2UuX2xvYWRUeXBlTWFwW3RoaXMuX2dldEV4dGVuc2lvbigpXSB8fCBSZXNvdXJjZS5MT0FEX1RZUEUuWEhSO1xufTtcblxuUmVzb3VyY2UucHJvdG90eXBlLl9nZXRFeHRlbnNpb24gPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHVybCA9IHRoaXMudXJsLFxuICAgICAgICBleHQ7XG5cbiAgICBpZiAodGhpcy5pc0RhdGFVcmwpIHtcbiAgICAgICAgdmFyIHNsYXNoSW5kZXggPSB1cmwuaW5kZXhPZignLycpO1xuICAgICAgICBleHQgPSB1cmwuc3Vic3RyaW5nKHNsYXNoSW5kZXggKyAxLCB1cmwuaW5kZXhPZignOycsIHNsYXNoSW5kZXgpKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHZhciBxdWVyeVN0YXJ0ID0gdXJsLmluZGV4T2YoJz8nKTtcbiAgICAgICAgaWYgKHF1ZXJ5U3RhcnQgIT09IC0xKSB7XG4gICAgICAgICAgICB1cmwgPSB1cmwuc3Vic3RyaW5nKDAsIHF1ZXJ5U3RhcnQpO1xuICAgICAgICB9XG5cbiAgICAgICAgZXh0ID0gdXJsLnN1YnN0cmluZyh1cmwubGFzdEluZGV4T2YoJy4nKSArIDEpO1xuICAgIH1cblxuICAgIHJldHVybiBleHQ7XG59O1xuXG4vKipcbiAqIERldGVybWluZXMgdGhlIG1pbWUgdHlwZSBvZiBhbiBYSFIgcmVxdWVzdCBiYXNlZCBvbiB0aGUgcmVzcG9uc2VUeXBlIG9mXG4gKiByZXNvdXJjZSBiZWluZyBsb2FkZWQuXG4gKlxuICogQHByaXZhdGVcbiAqIEByZXR1cm4ge3N0cmluZ30gVGhlIG1pbWUgdHlwZSB0byB1c2UuXG4gKi9cblJlc291cmNlLnByb3RvdHlwZS5fZ2V0TWltZUZyb21YaHJUeXBlID0gZnVuY3Rpb24gKHR5cGUpIHtcbiAgICBzd2l0Y2godHlwZSkge1xuICAgICAgICBjYXNlIFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkJVRkZFUjpcbiAgICAgICAgICAgIHJldHVybiAnYXBwbGljYXRpb24vb2N0ZXQtYmluYXJ5JztcblxuICAgICAgICBjYXNlIFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkJMT0I6XG4gICAgICAgICAgICByZXR1cm4gJ2FwcGxpY2F0aW9uL2Jsb2InO1xuXG4gICAgICAgIGNhc2UgUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuRE9DVU1FTlQ6XG4gICAgICAgICAgICByZXR1cm4gJ2FwcGxpY2F0aW9uL3htbCc7XG5cbiAgICAgICAgY2FzZSBSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRS5KU09OOlxuICAgICAgICAgICAgcmV0dXJuICdhcHBsaWNhdGlvbi9qc29uJztcblxuICAgICAgICBjYXNlIFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkRFRkFVTFQ6XG4gICAgICAgIGNhc2UgUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuVEVYVDpcbiAgICAgICAgICAgIC8qIGZhbGxzIHRocm91Z2ggKi9cbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIHJldHVybiAndGV4dC9wbGFpbic7XG5cbiAgICB9XG59O1xuXG4vKipcbiAqIFRoZSB0eXBlcyBvZiBsb2FkaW5nIGEgcmVzb3VyY2UgY2FuIHVzZS5cbiAqXG4gKiBAc3RhdGljXG4gKiBAY29uc3RhbnRcbiAqIEBwcm9wZXJ0eSB7b2JqZWN0fSBMT0FEX1RZUEVcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBMT0FEX1RZUEUuWEhSIC0gVXNlcyBYTUxIdHRwUmVxdWVzdCB0byBsb2FkIHRoZSByZXNvdXJjZS5cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBMT0FEX1RZUEUuSU1BR0UgLSBVc2VzIGFuIGBJbWFnZWAgb2JqZWN0IHRvIGxvYWQgdGhlIHJlc291cmNlLlxuICogQHByb3BlcnR5IHtudW1iZXJ9IExPQURfVFlQRS5BVURJTyAtIFVzZXMgYW4gYEF1ZGlvYCBvYmplY3QgdG8gbG9hZCB0aGUgcmVzb3VyY2UuXG4gKiBAcHJvcGVydHkge251bWJlcn0gTE9BRF9UWVBFLlZJREVPIC0gVXNlcyBhIGBWaWRlb2Agb2JqZWN0IHRvIGxvYWQgdGhlIHJlc291cmNlLlxuICovXG5SZXNvdXJjZS5MT0FEX1RZUEUgPSB7XG4gICAgWEhSOiAgICAxLFxuICAgIElNQUdFOiAgMixcbiAgICBBVURJTzogIDMsXG4gICAgVklERU86ICA0XG59O1xuXG4vKipcbiAqIFRoZSBYSFIgcmVhZHkgc3RhdGVzLCB1c2VkIGludGVybmFsbHkuXG4gKlxuICogQHN0YXRpY1xuICogQGNvbnN0YW50XG4gKiBAcHJvcGVydHkge29iamVjdH0gWEhSX1JFQURZX1NUQVRFXG4gKiBAcHJvcGVydHkge251bWJlcn0gWEhSX1JFQURZX1NUQVRFLlVOU0VOVCAtIG9wZW4oKWhhcyBub3QgYmVlbiBjYWxsZWQgeWV0LlxuICogQHByb3BlcnR5IHtudW1iZXJ9IFhIUl9SRUFEWV9TVEFURS5PUEVORUQgLSBzZW5kKCloYXMgbm90IGJlZW4gY2FsbGVkIHlldC5cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBYSFJfUkVBRFlfU1RBVEUuSEVBREVSU19SRUNFSVZFRCAtIHNlbmQoKSBoYXMgYmVlbiBjYWxsZWQsIGFuZCBoZWFkZXJzIGFuZCBzdGF0dXMgYXJlIGF2YWlsYWJsZS5cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBYSFJfUkVBRFlfU1RBVEUuTE9BRElORyAtIERvd25sb2FkaW5nOyByZXNwb25zZVRleHQgaG9sZHMgcGFydGlhbCBkYXRhLlxuICogQHByb3BlcnR5IHtudW1iZXJ9IFhIUl9SRUFEWV9TVEFURS5ET05FIC0gVGhlIG9wZXJhdGlvbiBpcyBjb21wbGV0ZS5cbiAqL1xuUmVzb3VyY2UuWEhSX1JFQURZX1NUQVRFID0ge1xuICAgIFVOU0VOVDogMCxcbiAgICBPUEVORUQ6IDEsXG4gICAgSEVBREVSU19SRUNFSVZFRDogMixcbiAgICBMT0FESU5HOiAzLFxuICAgIERPTkU6IDRcbn07XG5cbi8qKlxuICogVGhlIFhIUiByZWFkeSBzdGF0ZXMsIHVzZWQgaW50ZXJuYWxseS5cbiAqXG4gKiBAc3RhdGljXG4gKiBAY29uc3RhbnRcbiAqIEBwcm9wZXJ0eSB7b2JqZWN0fSBYSFJfUkVTUE9OU0VfVFlQRVxuICogQHByb3BlcnR5IHtzdHJpbmd9IFhIUl9SRVNQT05TRV9UWVBFLkRFRkFVTFQgLSBkZWZhdWx0cyB0byB0ZXh0XG4gKiBAcHJvcGVydHkge3N0cmluZ30gWEhSX1JFU1BPTlNFX1RZUEUuQlVGRkVSIC0gQXJyYXlCdWZmZXJcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBYSFJfUkVTUE9OU0VfVFlQRS5CTE9CIC0gQmxvYlxuICogQHByb3BlcnR5IHtzdHJpbmd9IFhIUl9SRVNQT05TRV9UWVBFLkRPQ1VNRU5UIC0gRG9jdW1lbnRcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBYSFJfUkVTUE9OU0VfVFlQRS5KU09OIC0gT2JqZWN0XG4gKiBAcHJvcGVydHkge3N0cmluZ30gWEhSX1JFU1BPTlNFX1RZUEUuVEVYVCAtIFN0cmluZ1xuICovXG5SZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRSA9IHtcbiAgICBERUZBVUxUOiAgICAndGV4dCcsXG4gICAgQlVGRkVSOiAgICAgJ2FycmF5YnVmZmVyJyxcbiAgICBCTE9COiAgICAgICAnYmxvYicsXG4gICAgRE9DVU1FTlQ6ICAgJ2RvY3VtZW50JyxcbiAgICBKU09OOiAgICAgICAnanNvbicsXG4gICAgVEVYVDogICAgICAgJ3RleHQnXG59O1xuXG5SZXNvdXJjZS5fbG9hZFR5cGVNYXAgPSB7XG4gICAgJ2dpZic6ICAgICAgUmVzb3VyY2UuTE9BRF9UWVBFLklNQUdFLFxuICAgICdwbmcnOiAgICAgIFJlc291cmNlLkxPQURfVFlQRS5JTUFHRSxcbiAgICAnYm1wJzogICAgICBSZXNvdXJjZS5MT0FEX1RZUEUuSU1BR0UsXG4gICAgJ2pwZyc6ICAgICAgUmVzb3VyY2UuTE9BRF9UWVBFLklNQUdFLFxuICAgICdqcGVnJzogICAgIFJlc291cmNlLkxPQURfVFlQRS5JTUFHRSxcbiAgICAndGlmJzogICAgICBSZXNvdXJjZS5MT0FEX1RZUEUuSU1BR0UsXG4gICAgJ3RpZmYnOiAgICAgUmVzb3VyY2UuTE9BRF9UWVBFLklNQUdFLFxuICAgICd3ZWJwJzogICAgIFJlc291cmNlLkxPQURfVFlQRS5JTUFHRSxcbiAgICAndGdhJzogICAgICBSZXNvdXJjZS5MT0FEX1RZUEUuSU1BR0Vcbn07XG5cblJlc291cmNlLl94aHJUeXBlTWFwID0ge1xuICAgIC8vIHhtbFxuICAgICd4aHRtbCc6ICAgIFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkRPQ1VNRU5ULFxuICAgICdodG1sJzogICAgIFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkRPQ1VNRU5ULFxuICAgICdodG0nOiAgICAgIFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkRPQ1VNRU5ULFxuICAgICd4bWwnOiAgICAgIFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkRPQ1VNRU5ULFxuICAgICd0bXgnOiAgICAgIFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkRPQ1VNRU5ULFxuICAgICd0c3gnOiAgICAgIFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkRPQ1VNRU5ULFxuICAgICdzdmcnOiAgICAgIFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkRPQ1VNRU5ULFxuXG4gICAgLy8gaW1hZ2VzXG4gICAgJ2dpZic6ICAgICAgUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuQkxPQixcbiAgICAncG5nJzogICAgICBSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRS5CTE9CLFxuICAgICdibXAnOiAgICAgIFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkJMT0IsXG4gICAgJ2pwZyc6ICAgICAgUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuQkxPQixcbiAgICAnanBlZyc6ICAgICBSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRS5CTE9CLFxuICAgICd0aWYnOiAgICAgIFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkJMT0IsXG4gICAgJ3RpZmYnOiAgICAgUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuQkxPQixcbiAgICAnd2VicCc6ICAgICBSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRS5CTE9CLFxuICAgICd0Z2EnOiAgICAgIFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkJMT0IsXG5cbiAgICAvLyBqc29uXG4gICAgJ2pzb24nOiAgICAgUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuSlNPTixcblxuICAgIC8vIHRleHRcbiAgICAndGV4dCc6ICAgICBSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRS5URVhULFxuICAgICd0eHQnOiAgICAgIFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLlRFWFRcbn07XG5cbi8qKlxuICogU2V0cyB0aGUgbG9hZCB0eXBlIHRvIGJlIHVzZWQgZm9yIGEgc3BlY2lmaWMgZXh0ZW5zaW9uLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBwYXJhbSBleHRuYW1lIHtzdHJpbmd9IFRoZSBleHRlbnNpb24gdG8gc2V0IHRoZSB0eXBlIGZvciwgZS5nLiBcInBuZ1wiIG9yIFwiZm50XCJcbiAqIEBwYXJhbSBsb2FkVHlwZSB7UmVzb3VyY2UuTE9BRF9UWVBFfSBUaGUgbG9hZCB0eXBlIHRvIHNldCBpdCB0by5cbiAqL1xuUmVzb3VyY2Uuc2V0RXh0ZW5zaW9uTG9hZFR5cGUgPSBmdW5jdGlvbiAoZXh0bmFtZSwgbG9hZFR5cGUpIHtcbiAgICBzZXRFeHRNYXAoUmVzb3VyY2UuX2xvYWRUeXBlTWFwLCBleHRuYW1lLCBsb2FkVHlwZSk7XG59O1xuXG4vKipcbiAqIFNldHMgdGhlIGxvYWQgdHlwZSB0byBiZSB1c2VkIGZvciBhIHNwZWNpZmljIGV4dGVuc2lvbi5cbiAqXG4gKiBAc3RhdGljXG4gKiBAcGFyYW0gZXh0bmFtZSB7c3RyaW5nfSBUaGUgZXh0ZW5zaW9uIHRvIHNldCB0aGUgdHlwZSBmb3IsIGUuZy4gXCJwbmdcIiBvciBcImZudFwiXG4gKiBAcGFyYW0geGhyVHlwZSB7UmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEV9IFRoZSB4aHIgdHlwZSB0byBzZXQgaXQgdG8uXG4gKi9cblJlc291cmNlLnNldEV4dGVuc2lvblhoclR5cGUgPSBmdW5jdGlvbiAoZXh0bmFtZSwgeGhyVHlwZSkge1xuICAgIHNldEV4dE1hcChSZXNvdXJjZS5feGhyVHlwZU1hcCwgZXh0bmFtZSwgeGhyVHlwZSk7XG59O1xuXG5mdW5jdGlvbiBzZXRFeHRNYXAobWFwLCBleHRuYW1lLCB2YWwpIHtcbiAgICBpZiAoZXh0bmFtZSAmJiBleHRuYW1lLmluZGV4T2YoJy4nKSA9PT0gMCkge1xuICAgICAgICBleHRuYW1lID0gZXh0bmFtZS5zdWJzdHJpbmcoMSk7XG4gICAgfVxuXG4gICAgaWYgKCFleHRuYW1lKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBtYXBbZXh0bmFtZV0gPSB2YWw7XG59XG4iLCJtb2R1bGUuZXhwb3J0cyA9IHtcblxuICAgIC8vIHByaXZhdGUgcHJvcGVydHlcbiAgICBfa2V5U3RyOiBcIkFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5Ky89XCIsXG5cbiAgICBlbmNvZGVCaW5hcnk6IGZ1bmN0aW9uIChpbnB1dCkge1xuICAgICAgICB2YXIgb3V0cHV0ID0gXCJcIjtcbiAgICAgICAgdmFyIGJ5dGVidWZmZXI7XG4gICAgICAgIHZhciBlbmNvZGVkQ2hhckluZGV4ZXMgPSBuZXcgQXJyYXkoNCk7XG4gICAgICAgIHZhciBpbnggPSAwO1xuICAgICAgICB2YXIgam54ID0gMDtcbiAgICAgICAgdmFyIHBhZGRpbmdCeXRlcyA9IDA7XG5cbiAgICAgICAgd2hpbGUgKGlueCA8IGlucHV0Lmxlbmd0aCkge1xuICAgICAgICAgICAgLy8gRmlsbCBieXRlIGJ1ZmZlciBhcnJheVxuICAgICAgICAgICAgYnl0ZWJ1ZmZlciA9IG5ldyBBcnJheSgzKTtcbiAgICAgICAgICAgIGZvciAoam54ID0gMDsgam54IDwgYnl0ZWJ1ZmZlci5sZW5ndGg7IGpueCsrKSB7XG4gICAgICAgICAgICAgICAgaWYgKGlueCA8IGlucHV0Lmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICAvLyB0aHJvdyBhd2F5IGhpZ2gtb3JkZXIgYnl0ZSwgYXMgZG9jdW1lbnRlZCBhdDpcbiAgICAgICAgICAgICAgICAgICAgLy8gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvRW4vVXNpbmdfWE1MSHR0cFJlcXVlc3QjSGFuZGxpbmdfYmluYXJ5X2RhdGFcbiAgICAgICAgICAgICAgICAgICAgYnl0ZWJ1ZmZlcltqbnhdID0gaW5wdXQuY2hhckNvZGVBdChpbngrKykgJiAweGZmO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgYnl0ZWJ1ZmZlcltqbnhdID0gMDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIEdldCBlYWNoIGVuY29kZWQgY2hhcmFjdGVyLCA2IGJpdHMgYXQgYSB0aW1lXG4gICAgICAgICAgICAvLyBpbmRleCAxOiBmaXJzdCA2IGJpdHNcbiAgICAgICAgICAgIGVuY29kZWRDaGFySW5kZXhlc1swXSA9IGJ5dGVidWZmZXJbMF0gPj4gMjtcbiAgICAgICAgICAgIC8vIGluZGV4IDI6IHNlY29uZCA2IGJpdHMgKDIgbGVhc3Qgc2lnbmlmaWNhbnQgYml0cyBmcm9tIGlucHV0IGJ5dGUgMSArIDQgbW9zdCBzaWduaWZpY2FudCBiaXRzIGZyb20gYnl0ZSAyKVxuICAgICAgICAgICAgZW5jb2RlZENoYXJJbmRleGVzWzFdID0gKChieXRlYnVmZmVyWzBdICYgMHgzKSA8PCA0KSB8IChieXRlYnVmZmVyWzFdID4+IDQpO1xuICAgICAgICAgICAgLy8gaW5kZXggMzogdGhpcmQgNiBiaXRzICg0IGxlYXN0IHNpZ25pZmljYW50IGJpdHMgZnJvbSBpbnB1dCBieXRlIDIgKyAyIG1vc3Qgc2lnbmlmaWNhbnQgYml0cyBmcm9tIGJ5dGUgMylcbiAgICAgICAgICAgIGVuY29kZWRDaGFySW5kZXhlc1syXSA9ICgoYnl0ZWJ1ZmZlclsxXSAmIDB4MGYpIDw8IDIpIHwgKGJ5dGVidWZmZXJbMl0gPj4gNik7XG4gICAgICAgICAgICAvLyBpbmRleCAzOiBmb3J0aCA2IGJpdHMgKDYgbGVhc3Qgc2lnbmlmaWNhbnQgYml0cyBmcm9tIGlucHV0IGJ5dGUgMylcbiAgICAgICAgICAgIGVuY29kZWRDaGFySW5kZXhlc1szXSA9IGJ5dGVidWZmZXJbMl0gJiAweDNmO1xuXG4gICAgICAgICAgICAvLyBEZXRlcm1pbmUgd2hldGhlciBwYWRkaW5nIGhhcHBlbmVkLCBhbmQgYWRqdXN0IGFjY29yZGluZ2x5XG4gICAgICAgICAgICBwYWRkaW5nQnl0ZXMgPSBpbnggLSAoaW5wdXQubGVuZ3RoIC0gMSk7XG4gICAgICAgICAgICBzd2l0Y2ggKHBhZGRpbmdCeXRlcykge1xuICAgICAgICAgICAgICAgIGNhc2UgMjpcbiAgICAgICAgICAgICAgICAgICAgLy8gU2V0IGxhc3QgMiBjaGFyYWN0ZXJzIHRvIHBhZGRpbmcgY2hhclxuICAgICAgICAgICAgICAgICAgICBlbmNvZGVkQ2hhckluZGV4ZXNbM10gPSA2NDtcbiAgICAgICAgICAgICAgICAgICAgZW5jb2RlZENoYXJJbmRleGVzWzJdID0gNjQ7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgY2FzZSAxOlxuICAgICAgICAgICAgICAgICAgICAvLyBTZXQgbGFzdCBjaGFyYWN0ZXIgdG8gcGFkZGluZyBjaGFyXG4gICAgICAgICAgICAgICAgICAgIGVuY29kZWRDaGFySW5kZXhlc1szXSA9IDY0O1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrOyAvLyBObyBwYWRkaW5nIC0gcHJvY2VlZFxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBOb3cgd2Ugd2lsbCBncmFiIGVhY2ggYXBwcm9wcmlhdGUgY2hhcmFjdGVyIG91dCBvZiBvdXIga2V5c3RyaW5nXG4gICAgICAgICAgICAvLyBiYXNlZCBvbiBvdXIgaW5kZXggYXJyYXkgYW5kIGFwcGVuZCBpdCB0byB0aGUgb3V0cHV0IHN0cmluZ1xuICAgICAgICAgICAgZm9yIChqbnggPSAwOyBqbnggPCBlbmNvZGVkQ2hhckluZGV4ZXMubGVuZ3RoOyBqbngrKykge1xuICAgICAgICAgICAgICAgIG91dHB1dCArPSB0aGlzLl9rZXlTdHIuY2hhckF0KGVuY29kZWRDaGFySW5kZXhlc1tqbnhdKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gb3V0cHV0O1xuICAgIH1cbn07XG4iLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vTG9hZGVyJyk7XG5cbm1vZHVsZS5leHBvcnRzLlJlc291cmNlID0gcmVxdWlyZSgnLi9SZXNvdXJjZScpO1xuXG5tb2R1bGUuZXhwb3J0cy5taWRkbGV3YXJlID0ge1xuICAgIGNhY2hpbmc6IHtcbiAgICAgICAgbWVtb3J5OiByZXF1aXJlKCcuL21pZGRsZXdhcmVzL2NhY2hpbmcvbWVtb3J5JylcbiAgICB9LFxuICAgIHBhcnNpbmc6IHtcbiAgICAgICAgYmxvYjogcmVxdWlyZSgnLi9taWRkbGV3YXJlcy9wYXJzaW5nL2Jsb2InKVxuICAgIH1cbn07XG4iLCIvLyBhIHNpbXBsZSBpbi1tZW1vcnkgY2FjaGUgZm9yIHJlc291cmNlc1xudmFyIGNhY2hlID0ge307XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBmdW5jdGlvbiAocmVzb3VyY2UsIG5leHQpIHtcbiAgICAgICAgLy8gaWYgY2FjaGVkLCB0aGVuIHNldCBkYXRhIGFuZCBjb21wbGV0ZSB0aGUgcmVzb3VyY2VcbiAgICAgICAgaWYgKGNhY2hlW3Jlc291cmNlLnVybF0pIHtcbiAgICAgICAgICAgIHJlc291cmNlLmRhdGEgPSBjYWNoZVtyZXNvdXJjZS51cmxdO1xuICAgICAgICAgICAgcmVzb3VyY2UuY29tcGxldGUoKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBpZiBub3QgY2FjaGVkLCB3YWl0IGZvciBjb21wbGV0ZSBhbmQgc3RvcmUgaXQgaW4gdGhlIGNhY2hlLlxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJlc291cmNlLm9uY2UoJ2NvbXBsZXRlJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgY2FjaGVbdGhpcy51cmxdID0gdGhpcy5kYXRhO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgXG4gICAgICAgIG5leHQoKTtcbiAgICB9O1xufTtcbiIsInZhciBSZXNvdXJjZSA9IHJlcXVpcmUoJy4uLy4uL1Jlc291cmNlJyksXG4gICAgYjY0ID0gcmVxdWlyZSgnLi4vLi4vYjY0Jyk7XG5cbndpbmRvdy5VUkwgPSB3aW5kb3cuVVJMIHx8IHdpbmRvdy53ZWJraXRVUkw7XG5cbi8vIGEgbWlkZGxld2FyZSBmb3IgdHJhbnNmb3JtaW5nIFhIUiBsb2FkZWQgQmxvYnMgaW50byBtb3JlIHVzZWZ1bCBvYmplY3RzXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBmdW5jdGlvbiAocmVzb3VyY2UsIG5leHQpIHtcbiAgICAgICAgaWYgKCFyZXNvdXJjZS5kYXRhKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV4dCgpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gaWYgdGhpcyB3YXMgYW4gWEhSIGxvYWQgb2YgYSBibG9iXG4gICAgICAgIGlmIChyZXNvdXJjZS54aHIgJiYgcmVzb3VyY2UueGhyVHlwZSA9PT0gUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuQkxPQikge1xuICAgICAgICAgICAgLy8gaWYgdGhlcmUgaXMgbm8gYmxvYiBzdXBwb3J0IHdlIHByb2JhYmx5IGdvdCBhIGJpbmFyeSBzdHJpbmcgYmFja1xuICAgICAgICAgICAgaWYgKCF3aW5kb3cuQmxvYiB8fCB0eXBlb2YgcmVzb3VyY2UuZGF0YSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgICAgICB2YXIgdHlwZSA9IHJlc291cmNlLnhoci5nZXRSZXNwb25zZUhlYWRlcignY29udGVudC10eXBlJyk7XG5cbiAgICAgICAgICAgICAgICAvLyB0aGlzIGlzIGFuIGltYWdlLCBjb252ZXJ0IHRoZSBiaW5hcnkgc3RyaW5nIGludG8gYSBkYXRhIHVybFxuICAgICAgICAgICAgICAgIGlmICh0eXBlICYmIHR5cGUuaW5kZXhPZignaW1hZ2UnKSA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICByZXNvdXJjZS5kYXRhID0gbmV3IEltYWdlKCk7XG4gICAgICAgICAgICAgICAgICAgIHJlc291cmNlLmRhdGEuc3JjID0gJ2RhdGE6JyArIHR5cGUgKyAnO2Jhc2U2NCwnICsgYjY0LmVuY29kZUJpbmFyeShyZXNvdXJjZS54aHIucmVzcG9uc2VUZXh0KTtcblxuICAgICAgICAgICAgICAgICAgICByZXNvdXJjZS5pc0ltYWdlID0gdHJ1ZTtcblxuICAgICAgICAgICAgICAgICAgICAvLyB3YWl0IHVudGlsIHRoZSBpbWFnZSBsb2FkcyBhbmQgdGhlbiBjYWxsYmFja1xuICAgICAgICAgICAgICAgICAgICByZXNvdXJjZS5kYXRhLm9ubG9hZCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc291cmNlLmRhdGEub25sb2FkID0gbnVsbDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgbmV4dCgpO1xuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIGlmIGNvbnRlbnQgdHlwZSBzYXlzIHRoaXMgaXMgYW4gaW1hZ2UsIHRoZW4gd2Ugc2hvdWxkIHRyYW5zZm9ybSB0aGUgYmxvYiBpbnRvIGFuIEltYWdlIG9iamVjdFxuICAgICAgICAgICAgZWxzZSBpZiAocmVzb3VyY2UuZGF0YS50eXBlLmluZGV4T2YoJ2ltYWdlJykgPT09IDApIHtcbiAgICAgICAgICAgICAgICB2YXIgc3JjID0gVVJMLmNyZWF0ZU9iamVjdFVSTChyZXNvdXJjZS5kYXRhKTtcblxuICAgICAgICAgICAgICAgIHJlc291cmNlLmJsb2IgPSByZXNvdXJjZS5kYXRhO1xuICAgICAgICAgICAgICAgIHJlc291cmNlLmRhdGEgPSBuZXcgSW1hZ2UoKTtcbiAgICAgICAgICAgICAgICByZXNvdXJjZS5kYXRhLnNyYyA9IHNyYztcblxuICAgICAgICAgICAgICAgIHJlc291cmNlLmlzSW1hZ2UgPSB0cnVlO1xuXG4gICAgICAgICAgICAgICAgLy8gY2xlYW51cCB0aGUgbm8gbG9uZ2VyIHVzZWQgYmxvYiBhZnRlciB0aGUgaW1hZ2UgbG9hZHNcbiAgICAgICAgICAgICAgICByZXNvdXJjZS5kYXRhLm9ubG9hZCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgVVJMLnJldm9rZU9iamVjdFVSTChzcmMpO1xuICAgICAgICAgICAgICAgICAgICByZXNvdXJjZS5kYXRhLm9ubG9hZCA9IG51bGw7XG5cbiAgICAgICAgICAgICAgICAgICAgbmV4dCgpO1xuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBuZXh0KCk7XG4gICAgICAgIH1cbiAgICB9O1xufTtcbiIsIm1vZHVsZS5leHBvcnRzPXtcbiAgXCJuYW1lXCI6IFwicGl4aS5qc1wiLFxuICBcInZlcnNpb25cIjogXCIzLjAuMTAtZGV2XCIsXG4gIFwiZGVzY3JpcHRpb25cIjogXCJQaXhpLmpzIGlzIGEgZmFzdCBsaWdodHdlaWdodCAyRCBsaWJyYXJ5IHRoYXQgd29ya3MgYWNyb3NzIGFsbCBkZXZpY2VzLlwiLFxuICBcImF1dGhvclwiOiBcIk1hdCBHcm92ZXNcIixcbiAgXCJjb250cmlidXRvcnNcIjogW1xuICAgIFwiQ2hhZCBFbmdsZXIgPGNoYWRAcGFudGhlcmRldi5jb20+XCIsXG4gICAgXCJSaWNoYXJkIERhdmV5IDxyZGF2ZXlAZ21haWwuY29tPlwiXG4gIF0sXG4gIFwibWFpblwiOiBcIi4vc3JjL2luZGV4LmpzXCIsXG4gIFwiaG9tZXBhZ2VcIjogXCJodHRwOi8vZ29vZGJveWRpZ2l0YWwuY29tL1wiLFxuICBcImJ1Z3NcIjogXCJodHRwczovL2dpdGh1Yi5jb20vcGl4aWpzL3BpeGkuanMvaXNzdWVzXCIsXG4gIFwibGljZW5zZVwiOiBcIk1JVFwiLFxuICBcInJlcG9zaXRvcnlcIjoge1xuICAgIFwidHlwZVwiOiBcImdpdFwiLFxuICAgIFwidXJsXCI6IFwiaHR0cHM6Ly9naXRodWIuY29tL3BpeGlqcy9waXhpLmpzLmdpdFwiXG4gIH0sXG4gIFwic2NyaXB0c1wiOiB7XG4gICAgXCJzdGFydFwiOiBcImd1bHAgJiYgZ3VscCB3YXRjaFwiLFxuICAgIFwidGVzdFwiOiBcImd1bHAgJiYgdGVzdGVtIGNpXCIsXG4gICAgXCJidWlsZFwiOiBcImd1bHBcIixcbiAgICBcImRvY3NcIjogXCJqc2RvYyAtYyAuL2d1bHAvdXRpbC9qc2RvYy5jb25mLmpzb24gLVIgUkVBRE1FLm1kXCJcbiAgfSxcbiAgXCJmaWxlc1wiOiBbXG4gICAgXCJiaW4vXCIsXG4gICAgXCJzcmMvXCIsXG4gICAgXCJDT05UUklCVVRJTkcubWRcIixcbiAgICBcIkxJQ0VOU0VcIixcbiAgICBcInBhY2thZ2UuanNvblwiLFxuICAgIFwiUkVBRE1FLm1kXCJcbiAgXSxcbiAgXCJkZXBlbmRlbmNpZXNcIjoge1xuICAgIFwiYXN5bmNcIjogXCJeMS41LjBcIixcbiAgICBcImJyZnNcIjogXCJeMS40LjFcIixcbiAgICBcImVhcmN1dFwiOiBcIl4yLjAuN1wiLFxuICAgIFwiZXZlbnRlbWl0dGVyM1wiOiBcIl4xLjEuMVwiLFxuICAgIFwib2JqZWN0LWFzc2lnblwiOiBcIl40LjAuMVwiLFxuICAgIFwicGl4aS1nbC1jb3JlXCI6IFwiZ2l0K2h0dHBzOi8vZ2l0aHViLmNvbS9Hb29kQm95RGlnaXRhbC9waXhpLWdsLWNvcmUuZ2l0XCIsXG4gICAgXCJyZXNvdXJjZS1sb2FkZXJcIjogXCJeMS42LjRcIlxuICB9LFxuICBcImRldkRlcGVuZGVuY2llc1wiOiB7XG4gICAgXCJicm93c2VyaWZ5XCI6IFwiXjExLjEuMFwiLFxuICAgIFwiY2hhaVwiOiBcIl4zLjIuMFwiLFxuICAgIFwiZGVsXCI6IFwiXjIuMC4yXCIsXG4gICAgXCJndWxwXCI6IFwiXjMuOS4wXCIsXG4gICAgXCJndWxwLWNhY2hlZFwiOiBcIl4xLjEuMFwiLFxuICAgIFwiZ3VscC1jb25jYXRcIjogXCJeMi42LjBcIixcbiAgICBcImd1bHAtZGVidWdcIjogXCJeMi4xLjBcIixcbiAgICBcImd1bHAtaGVhZGVyXCI6IFwiXjEuNy4xXCIsXG4gICAgXCJndWxwLWpzaGludFwiOiBcIl4xLjExLjJcIixcbiAgICBcImd1bHAtbWlycm9yXCI6IFwiXjAuNC4wXCIsXG4gICAgXCJndWxwLXBsdW1iZXJcIjogXCJeMS4wLjFcIixcbiAgICBcImd1bHAtcmVuYW1lXCI6IFwiXjEuMi4yXCIsXG4gICAgXCJndWxwLXNvdXJjZW1hcHNcIjogXCJeMS41LjJcIixcbiAgICBcImd1bHAtdWdsaWZ5XCI6IFwiXjEuNC4xXCIsXG4gICAgXCJndWxwLXV0aWxcIjogXCJeMy4wLjZcIixcbiAgICBcImphZ3VhcmpzLWpzZG9jXCI6IFwiZ2l0K2h0dHBzOi8vZ2l0aHViLmNvbS9kYXZpZHNoaW1qcy9qYWd1YXJqcy1qc2RvYy5naXRcIixcbiAgICBcImpzZG9jXCI6IFwiXjMuMy4yXCIsXG4gICAgXCJqc2hpbnQtc3VtbWFyeVwiOiBcIl4wLjQuMFwiLFxuICAgIFwibWluaW1pc3RcIjogXCJeMS4yLjBcIixcbiAgICBcIm1vY2hhXCI6IFwiXjIuMy4yXCIsXG4gICAgXCJyZXF1aXJlLWRpclwiOiBcIl4wLjMuMFwiLFxuICAgIFwicnVuLXNlcXVlbmNlXCI6IFwiXjEuMS4yXCIsXG4gICAgXCJ0ZXN0ZW1cIjogXCJeMC45LjRcIixcbiAgICBcInZpbnlsLWJ1ZmZlclwiOiBcIl4xLjAuMFwiLFxuICAgIFwidmlueWwtc291cmNlLXN0cmVhbVwiOiBcIl4xLjEuMFwiLFxuICAgIFwid2F0Y2hpZnlcIjogXCJeMy40LjBcIlxuICB9LFxuICBcImJyb3dzZXJpZnlcIjoge1xuICAgIFwidHJhbnNmb3JtXCI6IFtcbiAgICAgIFwiYnJmc1wiXG4gICAgXVxuICB9XG59XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uL2NvcmUnKTtcblxuLy8gYWRkIHNvbWUgZXh0cmEgdmFyaWFibGVzIHRvIHRoZSBjb250YWluZXIuLlxuT2JqZWN0LmFzc2lnbihcbiAgICBjb3JlLkRpc3BsYXlPYmplY3QucHJvdG90eXBlLFxuICAgIHJlcXVpcmUoJy4vYWNjZXNzaWJsZVRhcmdldCcpXG4pO1xuXG5cbi8qKlxuICogVGhlIEFjY2Vzc2liaWxpdHkgbWFuYWdlciByZWFjcmVhdGVzIHRoZSBhYmlsaXR5IHRvIHRhYiBhbmQgYW5kIGhhdmUgY29udGVudCByZWFkIGJ5IHNjcmVlbiByZWFkZXJzLiBUaGlzIGlzIHZlcnkgaW1wb3J0YW50IGFzIGl0IGNhbiBwb3NzaWJseSBoZWxwIHBlb3BsZSB3aXRoIGRpc2FiaWxpdGllcyBhY2Nlc3MgcGl4aSBjb250ZW50LlxuICogTXVjaCBsaWtlIGludGVyYWN0aW9uIGFueSBEaXNwbGF5T2JqZWN0IGNhbiBiZSBtYWRlIGFjY2Vzc2libGUuIFRoaXMgbWFuYWdlciB3aWxsIG1hcCB0aGUgZXZlbnRzIGFzIGlmIHRoZSBtb3VzZSB3YXMgYmVpbmcgdXNlZCwgbWluaW1pemluZyB0aGUgZWZmZXJvdCByZXF1aXJlZCB0byBpbXBsZW1lbnQuXG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLkNhbnZhc1JlbmRlcmVyfFBJWEkuV2ViR0xSZW5kZXJlcn0gQSByZWZlcmVuY2UgdG8gdGhlIGN1cnJlbnQgcmVuZGVyZXJcbiAqL1xuZnVuY3Rpb24gQWNjZXNzaWJpbGl0eU1hbmFnZXIocmVuZGVyZXIpXG57XG5cdC8vIGZpcnN0IHdlIGNyZWF0ZSBhIGRpdiB0aGF0IHdpbGwgc2l0IG92ZXIgdGhlIHBpeGkgZWxlbWVudC4gVGhpcyBpcyB3aGVyZSB0aGUgZGl2IG92ZXJsYXlzIHdpbGwgZ28uXG4gICAgdmFyIGRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgIFxuICAgIGRpdi5zdHlsZS53aWR0aCA9IDEwMCArICdweCc7XG4gICAgZGl2LnN0eWxlLmhlaWdodCA9IDEwMCArICdweCc7XG4gICAgZGl2LnN0eWxlLnBvc2l0aW9uID0gJ2Fic29sdXRlJztcbiAgICBkaXYuc3R5bGUudG9wID0gMDtcbiAgICBkaXYuc3R5bGUubGVmdCA9IDA7XG4gICAvL1xuICAgIGRpdi5zdHlsZS56SW5kZXggPSAyO1xuICAgXHRcbiAgIFx0LyoqXG4gICBcdCAqIFRoaXMgaXMgdGhlIGRvbSBlbGVtZW50IHRoYXQgd2lsbCBzaXQgb3ZlciB0aGUgcGl4aSBlbGVtZW50LiBUaGlzIGlzIHdoZXJlIHRoZSBkaXYgb3ZlcmxheXMgd2lsbCBnby5cbiAgIFx0ICogXG4gICBcdCAqIEB0eXBlIHtIVE1MRWxlbWVudH1cbiAgIFx0ICogQHByaXZhdGVcbiAgIFx0ICovXG4gICBcdHRoaXMuZGl2ID0gZGl2O1xuXG4gICBcdC8qKlxuICAgXHQgKiBBIHNpbXBsZSBwb29sIGZvciBzdG9yaW5nIGRpdnMuXG4gICBcdCAqIFxuICAgXHQgKiBAdHlwZSB7QXJyYXl9XG4gICBcdCAqIEBwcml2YXRlXG4gICBcdCAqL1xuIFx0dGhpcy5wb29sID0gW107XG5cbiBcdC8qKlxuIFx0ICogVGhpcyBpcyBhIHRpY2sgdXNlZCB0byBjaGVjayBpZiBhbiBvYmplY3QgaXMgbm8gbG9uZ2VyIGJlaW5nIHJlbmRlcmVkLlxuIFx0ICogXG4gXHQgKiBAdHlwZSB7TnVtYmVyfVxuIFx0ICogQHByaXZhdGVcbiBcdCAqL1xuICAgXHR0aGlzLnJlbmRlcklkID0gMDtcblxuICAgXHQvKipcbiAgIFx0ICogU2V0dGluZyB0aGlzIHRvIHRydWUgd2lsbCB2aXN1YWxseSBzaG93IHRoZSBkaXZzXG4gICBcdCAqIFxuICAgXHQgKiBAdHlwZSB7Qm9vbGVhbn1cbiAgIFx0ICovXG4gICBcdHRoaXMuZGVidWcgPSBmYWxzZTtcblxuICBcdC8qKlxuICAgICAqIFRoZSByZW5kZXJlciB0aGlzIGFjY2Vzc2liaWxpdHkgbWFuYWdlciB3b3JrcyBmb3IuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlN5c3RlbVJlbmRlcmVyfVxuICAgICAqL1xuICAgXHR0aGlzLnJlbmRlcmVyID0gcmVuZGVyZXI7XG5cbiAgIFx0LyoqXG4gICAgICogVGhlIGFycmF5IG9mIGN1cnJlbnRseSBhY3RpdmUgYWNjZXNzaWJsZSBpdGVtcy5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge0FycmF5fVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICBcdHRoaXMuY2hpbGRyZW4gPSBbXTtcbiAgIFx0XG4gICBcdC8qKlxuICAgICAqIHByZSBiaW5kIHRoZSBmdW5jdGlvbnMuLlxuICAgICAqL1xuICAgXHR0aGlzLl9vbktleURvd24gPSB0aGlzLl9vbktleURvd24uYmluZCh0aGlzKTtcbiAgIFx0dGhpcy5fb25Nb3VzZU1vdmUgPSB0aGlzLl9vbk1vdXNlTW92ZS5iaW5kKHRoaXMpO1xuICAgXHRcbiAgIFx0LyoqXG4gICAgICogc3RvcmVzIHRoZSBzdGF0ZSBvZiB0aGUgbWFuYWdlci4gSWYgdGhlcmUgYXJlIG5vIGFjY2Vzc2libGUgb2JqZWN0cyBvciB0aGUgbW91c2UgaXMgbW92aW5nIHRoZSB3aWxsIGJlIGZhbHNlLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7QXJyYXl9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgIFx0dGhpcy5pc0FjdGl2ZSA9IGZhbHNlO1xuXG5cbiAgIFx0Ly8gbGV0IGxpc3RlbiBmb3IgdGFiLi4gb25jZSBwcmVzc2VkIHdlIGNhbiBmaXJlIHVwIGFuZCBzaG93IHRoZSBhY2Nlc3NpYmlsaXR5IGxheWVyXG4gICBcdHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdrZXlkb3duJywgdGhpcy5fb25LZXlEb3duLCBmYWxzZSk7XG59XG5cblxuQWNjZXNzaWJpbGl0eU1hbmFnZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gQWNjZXNzaWJpbGl0eU1hbmFnZXI7XG5tb2R1bGUuZXhwb3J0cyA9IEFjY2Vzc2liaWxpdHlNYW5hZ2VyO1xuXG4vKipcbiAqIEFjdGl2YXRpbmcgd2lsbCBjYXVzZSB0aGUgQWNjZXNzaWJpbGl0eSBsYXllciB0byBiZSBzaG93bi4gVGhpcyBpcyBjYWxsZWQgd2hlbiBhIHVzZXIgcHJlc2VzIHRoZSB0YWIga2V5XG4gKiBAcHJpdmF0ZVxuICovXG5BY2Nlc3NpYmlsaXR5TWFuYWdlci5wcm90b3R5cGUuYWN0aXZhdGUgPSBmdW5jdGlvbigpXG57XG5cdGlmKHRoaXMuaXNBY3RpdmUpXG5cdHtcblx0XHRyZXR1cm47XG5cdH1cblxuXHR0aGlzLmlzQWN0aXZlID0gdHJ1ZTtcblxuXHR3aW5kb3cuZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignbW91c2Vtb3ZlJywgdGhpcy5fb25Nb3VzZU1vdmUsIHRydWUpO1xuXHR3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsIHRoaXMuX29uS2V5RG93biwgZmFsc2UpO1xuXG5cdHRoaXMucmVuZGVyZXIub24oJ3Bvc3RyZW5kZXInLCB0aGlzLnVwZGF0ZSwgdGhpcyk7XG5cblx0dGhpcy5yZW5kZXJlci52aWV3LnBhcmVudE5vZGUuYXBwZW5kQ2hpbGQodGhpcy5kaXYpO1x0XG59O1xuXG4vKipcbiAqIERlYWN0aXZhdGluZyB3aWxsIGNhdXNlIHRoZSBBY2Nlc3NpYmlsaXR5IGxheWVyIHRvIGJlIGhpZGRlbi4gVGhpcyBpcyBjYWxsZWQgd2hlbiBhIHVzZXIgbW92ZXMgdGhlIG1vdXNlXG4gKiBAcHJpdmF0ZVxuICovXG5BY2Nlc3NpYmlsaXR5TWFuYWdlci5wcm90b3R5cGUuZGVhY3RpdmF0ZSA9IGZ1bmN0aW9uKClcbntcblx0aWYoIXRoaXMuaXNBY3RpdmUpXG5cdHtcblx0XHRyZXR1cm47XG5cdH1cblxuXHR0aGlzLmlzQWN0aXZlID0gZmFsc2U7XG5cblx0d2luZG93LmRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21vdXNlbW92ZScsIHRoaXMuX29uTW91c2VNb3ZlKTtcblx0d2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLCB0aGlzLl9vbktleURvd24sIGZhbHNlKTtcblxuXHR0aGlzLnJlbmRlcmVyLm9mZigncG9zdHJlbmRlcicsIHRoaXMudXBkYXRlKTtcblxuXHR0aGlzLmRpdi5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHRoaXMuZGl2KTtcblxufTtcblxuLyoqXG4gKiBUaGlzIHJlY3Vyc2l2ZSBmdW5jdGlvbiB3aWxsIHJ1biB0aHJvdWdodCBoZSBzY2VuZSBncmFwaCBhbmQgYWRkIGFueSBuZXcgYWNjZXNzaWJsZSBvYmplY3RzIHRvIHRoZSBET00gbGF5ZXIuXG4gKiBAcGFyYW0gZWxlbWVudCB7UElYSS5Db250YWluZXJ8UElYSS5TcHJpdGV8UElYSS5leHRyYXMuVGlsaW5nU3ByaXRlfSB0aGUgRGlzcGxheU9iamVjdCB0byBjaGVjay5cbiAqIEBwcml2YXRlXG4gKi9cbkFjY2Vzc2liaWxpdHlNYW5hZ2VyLnByb3RvdHlwZS51cGRhdGVBY2Nlc3NpYmxlT2JqZWN0cyA9IGZ1bmN0aW9uKGRpc3BsYXlPYmplY3QpXG57XG5cdGlmKCFkaXNwbGF5T2JqZWN0LnZpc2libGUpXG5cdHtcblx0XHRyZXR1cm47XG5cdH1cblxuXHRpZihkaXNwbGF5T2JqZWN0LmFjY2Vzc2libGUgJiYgZGlzcGxheU9iamVjdC5pbnRlcmFjdGl2ZSlcblx0e1xuXHRcdGlmKCFkaXNwbGF5T2JqZWN0Ll9hY2Nlc3NpYmxlQWN0aXZlKVxuXHRcdHtcblx0XHRcdHRoaXMuYWRkQ2hpbGQoZGlzcGxheU9iamVjdCk7XG5cdFx0fVxuXHQgICBcdFxuXHQgICBcdGRpc3BsYXlPYmplY3QucmVuZGVySWQgPSB0aGlzLnJlbmRlcklkO1xuXHR9XG5cblx0dmFyIGNoaWxkcmVuID0gZGlzcGxheU9iamVjdC5jaGlsZHJlbjtcblxuXHRmb3IgKHZhciBpID0gY2hpbGRyZW4ubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcblx0XHRcblx0XHR0aGlzLnVwZGF0ZUFjY2Vzc2libGVPYmplY3RzKGNoaWxkcmVuW2ldKTtcblx0fVxufTtcblxuXG4vKipcbiAqIEJlZm9yZSBlYWNoIHJlbmRlciB0aGlzIGZ1bmN0aW9uIHdpbGwgZW5zdXJlIHRoYXQgYWxsIGRpdnMgYXJlIG1hcHBlZCBjb3JyZWN0bHkgdG8gdGhlaXIgRGlzcGxheU9iamVjdHNcbiAqIEBwcml2YXRlXG4gKi9cbkFjY2Vzc2liaWxpdHlNYW5hZ2VyLnByb3RvdHlwZS51cGRhdGUgPSBmdW5jdGlvbigpXG57XG5cblx0Ly8gdXBkYXRlIGNoaWxkcmVuLi4uXG5cdHRoaXMudXBkYXRlQWNjZXNzaWJsZU9iamVjdHModGhpcy5yZW5kZXJlci5fbGFzdE9iamVjdFJlbmRlcmVkKTtcblxuXHR2YXIgcmVjdCA9IHRoaXMucmVuZGVyZXIudmlldy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcblx0dmFyIHN4ID0gcmVjdC53aWR0aCAgLyB0aGlzLnJlbmRlcmVyLndpZHRoO1xuXHR2YXIgc3kgPSByZWN0LmhlaWdodCAvIHRoaXMucmVuZGVyZXIuaGVpZ2h0O1xuXG5cdHZhciBkaXYgPSB0aGlzLmRpdjtcblxuXHRkaXYuc3R5bGUubGVmdCA9IHJlY3QubGVmdCArICdweCc7XG5cdGRpdi5zdHlsZS50b3AgPSByZWN0LnRvcCArICdweCc7XG5cdGRpdi5zdHlsZS53aWR0aCA9IHRoaXMucmVuZGVyZXIud2lkdGggKyAncHgnO1xuXHRkaXYuc3R5bGUuaGVpZ2h0ID0gdGhpcy5yZW5kZXJlci5oZWlnaHQgKyAncHgnO1xuXG5cdGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5jaGlsZHJlbi5sZW5ndGg7IGkrKylcblx0e1xuXG5cdFx0dmFyIGNoaWxkID0gdGhpcy5jaGlsZHJlbltpXTtcblxuXHRcdGlmKGNoaWxkLnJlbmRlcklkICE9PSB0aGlzLnJlbmRlcklkKVxuXHRcdHtcblx0XHRcdGNoaWxkLl9hY2Nlc3NpYmxlQWN0aXZlID0gZmFsc2U7XG5cbiAgICAgICAgICAgIGNvcmUudXRpbHMucmVtb3ZlSXRlbXModGhpcy5jaGlsZHJlbiwgaSwgMSk7XG5cdFx0XHR0aGlzLmRpdi5yZW1vdmVDaGlsZCggY2hpbGQuX2FjY2Vzc2libGVEaXYgKTtcblx0XHRcdHRoaXMucG9vbC5wdXNoKGNoaWxkLl9hY2Nlc3NpYmxlRGl2KTtcblx0XHRcdGNoaWxkLl9hY2Nlc3NpYmxlRGl2ID0gbnVsbDtcblxuXHRcdFx0aS0tO1xuXG5cdFx0XHRpZih0aGlzLmNoaWxkcmVuLmxlbmd0aCA9PT0gMClcblx0XHRcdHtcblx0XHRcdFx0dGhpcy5kZWFjdGl2YXRlKCk7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdGVsc2Vcblx0XHR7XG5cdFx0XHQvLyBtYXAgZGl2IHRvIGRpc3BsYXkuLlxuXHRcdFx0ZGl2ID0gY2hpbGQuX2FjY2Vzc2libGVEaXY7XG5cdFx0XHR2YXIgaGl0QXJlYSA9IGNoaWxkLmhpdEFyZWE7XG5cdFx0XHR2YXIgd3QgPSBjaGlsZC53b3JsZFRyYW5zZm9ybTtcblxuXHRcdFx0aWYoY2hpbGQuaGl0QXJlYSlcblx0XHRcdHtcblx0XHRcdFx0ZGl2LnN0eWxlLmxlZnQgPSAoKHd0LnR4ICsgKGhpdEFyZWEueCAqIHd0LmEpKSAqIHN4KSArICdweCc7XG5cdFx0XHRcdGRpdi5zdHlsZS50b3AgPSAgKCh3dC50eSArIChoaXRBcmVhLnkgKiB3dC5kKSkgKiBzeSkgKyAgJ3B4JztcblxuXHRcdFx0XHRkaXYuc3R5bGUud2lkdGggPSAoaGl0QXJlYS53aWR0aCAqIHd0LmEgKiBzeCkgKyAncHgnO1xuXHRcdFx0XHRkaXYuc3R5bGUuaGVpZ2h0ID0gKGhpdEFyZWEuaGVpZ2h0ICogd3QuZCAqIHN5KSArICdweCc7XG5cdFx0XHRcblx0XHRcdH1cblx0XHRcdGVsc2Vcblx0XHRcdHtcblx0XHRcdFx0aGl0QXJlYSA9IGNoaWxkLmdldEJvdW5kcygpO1xuXG5cdFx0XHRcdHRoaXMuY2FwSGl0QXJlYShoaXRBcmVhKTtcblxuXHRcdFx0XHRkaXYuc3R5bGUubGVmdCA9IChoaXRBcmVhLnggKiBzeCkgKyAncHgnO1xuXHRcdFx0XHRkaXYuc3R5bGUudG9wID0gIChoaXRBcmVhLnkgKiBzeSkgKyAgJ3B4JztcblxuXHRcdFx0XHRkaXYuc3R5bGUud2lkdGggPSAoaGl0QXJlYS53aWR0aCAqIHN4KSArICdweCc7XG5cdFx0XHRcdGRpdi5zdHlsZS5oZWlnaHQgPSAoaGl0QXJlYS5oZWlnaHQgKiBzeSkgKyAncHgnO1xuXHRcdFx0fVx0XHRcblx0XHR9XG5cdH1cblxuXHQvLyBpbmNyZW1lbnQgdGhlIHJlbmRlciBpZC4uXG5cdHRoaXMucmVuZGVySWQrKztcbn07XG5cbkFjY2Vzc2liaWxpdHlNYW5hZ2VyLnByb3RvdHlwZS5jYXBIaXRBcmVhID0gZnVuY3Rpb24gKGhpdEFyZWEpXG57XG4gICAgaWYgKGhpdEFyZWEueCA8IDApXG4gICAge1xuICAgICAgICBoaXRBcmVhLndpZHRoICs9IGhpdEFyZWEueDtcbiAgICAgICAgaGl0QXJlYS54ID0gMDtcbiAgICB9XG5cbiAgICBpZiAoaGl0QXJlYS55IDwgMClcbiAgICB7XG4gICAgICAgIGhpdEFyZWEuaGVpZ2h0ICs9IGhpdEFyZWEueTtcbiAgICAgICAgaGl0QXJlYS55ID0gMDtcbiAgICB9XG5cbiAgICBpZiAoIGhpdEFyZWEueCArIGhpdEFyZWEud2lkdGggPiB0aGlzLnJlbmRlcmVyLndpZHRoIClcbiAgICB7XG4gICAgICAgIGhpdEFyZWEud2lkdGggPSB0aGlzLnJlbmRlcmVyLndpZHRoIC0gaGl0QXJlYS54O1xuICAgIH1cblxuICAgIGlmICggaGl0QXJlYS55ICsgaGl0QXJlYS5oZWlnaHQgPiB0aGlzLnJlbmRlcmVyLmhlaWdodCApXG4gICAge1xuICAgICAgICBoaXRBcmVhLmhlaWdodCA9IHRoaXMucmVuZGVyZXIuaGVpZ2h0IC0gaGl0QXJlYS55O1xuICAgIH1cbn07XG5cblxuLyoqXG4gKiBBZGRzIGEgRGlzcGxheU9iamVjdCB0byB0aGUgYWNjZXNzaWJpbGl0eSBtYW5hZ2VyXG4gKiBAcHJpdmF0ZVxuICovXG5BY2Nlc3NpYmlsaXR5TWFuYWdlci5wcm90b3R5cGUuYWRkQ2hpbGQgPSBmdW5jdGlvbihkaXNwbGF5T2JqZWN0KVxue1xuLy9cdHRoaXMuYWN0aXZhdGUoKTtcblx0XG5cdHZhciBkaXYgPSB0aGlzLnBvb2wucG9wKCk7XG5cblx0aWYoIWRpdilcblx0e1xuXHRcdGRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2J1dHRvbicpOyBcblxuXHQgICAgZGl2LnN0eWxlLndpZHRoID0gMTAwICsgJ3B4Jztcblx0ICAgIGRpdi5zdHlsZS5oZWlnaHQgPSAxMDAgKyAncHgnO1xuXHQgICAgZGl2LnN0eWxlLmJhY2tncm91bmRDb2xvciA9IHRoaXMuZGVidWcgPyAncmdiYSgyNTUsMCwwLDAuNSknIDogJ3RyYW5zcGFyZW50Jztcblx0ICAgIGRpdi5zdHlsZS5wb3NpdGlvbiA9ICdhYnNvbHV0ZSc7XG5cdCAgICBkaXYuc3R5bGUuekluZGV4ID0gMjtcblx0ICAgIGRpdi5zdHlsZS5ib3JkZXJTdHlsZSA9ICdub25lJztcblxuXHQgICAgXG5cdCAgICBkaXYuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCB0aGlzLl9vbkNsaWNrLmJpbmQodGhpcykpO1xuXHQgICAgZGl2LmFkZEV2ZW50TGlzdGVuZXIoJ2ZvY3VzJywgdGhpcy5fb25Gb2N1cy5iaW5kKHRoaXMpKTtcblx0ICAgIGRpdi5hZGRFdmVudExpc3RlbmVyKCdmb2N1c291dCcsIHRoaXMuX29uRm9jdXNPdXQuYmluZCh0aGlzKSk7XG5cdH1cblx0ICAgXHRcblxuXG5cblx0ZGl2LnRpdGxlID0gZGlzcGxheU9iamVjdC5hY2Nlc3NpYmxlVGl0bGUgfHwgJ2Rpc3BsYXlPYmplY3QgJyArIHRoaXMudGFiSW5kZXg7XG5cblx0Ly9cblx0XG5cdGRpc3BsYXlPYmplY3QuX2FjY2Vzc2libGVBY3RpdmUgPSB0cnVlO1xuXHRkaXNwbGF5T2JqZWN0Ll9hY2Nlc3NpYmxlRGl2ID0gZGl2O1xuXHRkaXYuZGlzcGxheU9iamVjdCA9IGRpc3BsYXlPYmplY3Q7XG5cblxuXHR0aGlzLmNoaWxkcmVuLnB1c2goZGlzcGxheU9iamVjdCk7XG5cdHRoaXMuZGl2LmFwcGVuZENoaWxkKCBkaXNwbGF5T2JqZWN0Ll9hY2Nlc3NpYmxlRGl2ICk7XG5cdGRpc3BsYXlPYmplY3QuX2FjY2Vzc2libGVEaXYudGFiSW5kZXggPSBkaXNwbGF5T2JqZWN0LnRhYkluZGV4O1xufTtcblxuXG4vKipcbiAqIE1hcHMgdGhlIGRpdiBidXR0b24gcHJlc3MgdG8gcGl4aSdzIEludGVyYWN0aW9uTWFuYWdlciAoY2xpY2spXG4gKiBAcHJpdmF0ZVxuICovXG5BY2Nlc3NpYmlsaXR5TWFuYWdlci5wcm90b3R5cGUuX29uQ2xpY2sgPSBmdW5jdGlvbihlKVxue1xuXHR2YXIgaW50ZXJhY3Rpb25NYW5hZ2VyID0gdGhpcy5yZW5kZXJlci5wbHVnaW5zLmludGVyYWN0aW9uO1xuXHRpbnRlcmFjdGlvbk1hbmFnZXIuZGlzcGF0Y2hFdmVudChlLnRhcmdldC5kaXNwbGF5T2JqZWN0LCAnY2xpY2snLCBpbnRlcmFjdGlvbk1hbmFnZXIuZXZlbnREYXRhKTtcbn07XG5cbi8qKlxuICogTWFwcyB0aGUgZGl2IGZvY3VzIGV2ZW50cyB0byBwaXhpcyBJbnRlcmFjdGlvbk1hbmFnZXIgKG1vdXNlb3ZlcilcbiAqIEBwcml2YXRlXG4gKi9cbkFjY2Vzc2liaWxpdHlNYW5hZ2VyLnByb3RvdHlwZS5fb25Gb2N1cyA9IGZ1bmN0aW9uKGUpXG57XG5cdHZhciBpbnRlcmFjdGlvbk1hbmFnZXIgPSB0aGlzLnJlbmRlcmVyLnBsdWdpbnMuaW50ZXJhY3Rpb247XG5cdGludGVyYWN0aW9uTWFuYWdlci5kaXNwYXRjaEV2ZW50KGUudGFyZ2V0LmRpc3BsYXlPYmplY3QsICdtb3VzZW92ZXInLCBpbnRlcmFjdGlvbk1hbmFnZXIuZXZlbnREYXRhKTtcbn07XG5cbi8qKlxuICogTWFwcyB0aGUgZGl2IGZvY3VzIGV2ZW50cyB0byBwaXhpcyBJbnRlcmFjdGlvbk1hbmFnZXIgKG1vdXNlb3V0KVxuICogQHByaXZhdGVcbiAqL1xuQWNjZXNzaWJpbGl0eU1hbmFnZXIucHJvdG90eXBlLl9vbkZvY3VzT3V0ID0gZnVuY3Rpb24oZSlcbntcblx0dmFyIGludGVyYWN0aW9uTWFuYWdlciA9IHRoaXMucmVuZGVyZXIucGx1Z2lucy5pbnRlcmFjdGlvbjtcblx0aW50ZXJhY3Rpb25NYW5hZ2VyLmRpc3BhdGNoRXZlbnQoZS50YXJnZXQuZGlzcGxheU9iamVjdCwgJ21vdXNlb3V0JywgaW50ZXJhY3Rpb25NYW5hZ2VyLmV2ZW50RGF0YSk7XG59O1xuXG4vKipcbiAqIElzIGNhbGxlZCB3aGVuIGEga2V5IGlzIHByZXNzZWRcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5BY2Nlc3NpYmlsaXR5TWFuYWdlci5wcm90b3R5cGUuX29uS2V5RG93biA9IGZ1bmN0aW9uKGUpXG57XG5cdGlmKGUua2V5Q29kZSAhPT0gOSlcblx0e1xuXHRcdHJldHVybjtcblx0fVxuXG5cdHRoaXMuYWN0aXZhdGUoKTtcbn07XG5cbi8qKlxuICogSXMgY2FsbGVkIHdoZW4gdGhlIG1vdXNlIG1vdmVzIGFjcm9zcyB0aGUgcmVuZGVyZXIgZWxlbWVudFxuICpcbiAqIEBwcml2YXRlXG4gKi9cbkFjY2Vzc2liaWxpdHlNYW5hZ2VyLnByb3RvdHlwZS5fb25Nb3VzZU1vdmUgPSBmdW5jdGlvbigpXG57XG5cdHRoaXMuZGVhY3RpdmF0ZSgpO1xufTtcblxuXG4vKipcbiAqIERlc3Ryb3lzIHRoZSBhY2Nlc3NpYmlsaXR5IG1hbmFnZXJcbiAqXG4gKi9cbkFjY2Vzc2liaWxpdHlNYW5hZ2VyLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKCkgXG57XG5cdHRoaXMuZGl2ID0gbnVsbDtcblxuXHRmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuY2hpbGRyZW4ubGVuZ3RoOyBpKyspXG5cdHtcblx0XHR0aGlzLmNoaWxkcmVuW2ldLmRpdiA9IG51bGw7XG5cdH1cblxuXHRcblx0d2luZG93LmRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21vdXNlbW92ZScsIHRoaXMuX29uTW91c2VNb3ZlKTtcblx0d2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLCB0aGlzLl9vbktleURvd24pO1xuXHRcdFxuXHR0aGlzLnBvb2wgPSBudWxsO1xuXHR0aGlzLmNoaWxkcmVuID0gbnVsbDtcblx0dGhpcy5yZW5kZXJlciA9IG51bGw7XG5cbn07XG5cbmNvcmUuV2ViR0xSZW5kZXJlci5yZWdpc3RlclBsdWdpbignYWNjZXNzaWJpbGl0eScsIEFjY2Vzc2liaWxpdHlNYW5hZ2VyKTtcbmNvcmUuQ2FudmFzUmVuZGVyZXIucmVnaXN0ZXJQbHVnaW4oJ2FjY2Vzc2liaWxpdHknLCBBY2Nlc3NpYmlsaXR5TWFuYWdlcik7XG5cbiIsIi8qKlxuICogRGVmYXVsdCBwcm9wZXJ0eSB2YWx1ZXMgb2YgYWNjZXNzaWJsZSBvYmplY3RzXG4gKiB1c2VkIGJ5IHtAbGluayBQSVhJLmFjY2Vzc2liaWxpdHkuQWNjZXNzaWJpbGl0eU1hbmFnZXJ9LlxuICpcbiAqIEBtaXhpblxuICogQG1lbWJlcm9mIFBJWElcbiAqIEBleGFtcGxlXG4gKiAgICAgIGZ1bmN0aW9uIE15T2JqZWN0KCkge31cbiAqXG4gKiAgICAgIE9iamVjdC5hc3NpZ24oXG4gKiAgICAgICAgICBNeU9iamVjdC5wcm90b3R5cGUsXG4gKiAgICAgICAgICBQSVhJLmFjY2Vzc2liaWxpdHkuYWNjZXNzaWJsZVRhcmdldFxuICogICAgICApO1xuICovXG52YXIgYWNjZXNzaWJsZVRhcmdldCA9IHtcbiAgICBcbiAgICAvKipcbiAgICAgKiBAdG9kbyBOZWVkcyBkb2NzLlxuICAgICAqL1xuICAgIGFjY2Vzc2libGU6ZmFsc2UsXG5cbiAgICAvKipcbiAgICAgKiBAdG9kbyBOZWVkcyBkb2NzLlxuICAgICAqL1xuICAgIGFjY2Vzc2libGVUaXRsZTpudWxsLFxuXG4gICAgLyoqXG4gICAgICogQHRvZG8gTmVlZHMgZG9jcy5cbiAgICAgKi9cbiAgICB0YWJJbmRleDowLFxuXG4gICAgLyoqXG4gICAgICogQHRvZG8gTmVlZHMgZG9jcy5cbiAgICAgKi9cbiAgICBfYWNjZXNzaWJsZUFjdGl2ZTpmYWxzZSxcblxuICAgIC8qKlxuICAgICAqIEB0b2RvIE5lZWRzIGRvY3MuXG4gICAgICovXG4gICAgX2FjY2Vzc2libGVEaXY6ZmFsc2VcblxufTtcblxubW9kdWxlLmV4cG9ydHMgPSBhY2Nlc3NpYmxlVGFyZ2V0O1xuIiwiLyoqXG4gKiBAZmlsZSAgICAgICAgTWFpbiBleHBvcnQgb2YgdGhlIFBJWEkgYWNjZXNzaWJpbGl0eSBsaWJyYXJ5XG4gKiBAYXV0aG9yICAgICAgTWF0IEdyb3ZlcyA8bWF0QGdvb2Rib3lkaWdpdGFsLmNvbT5cbiAqIEBjb3B5cmlnaHQgICAyMDEzLTIwMTUgR29vZEJveURpZ2l0YWxcbiAqIEBsaWNlbnNlICAgICB7QGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL3BpeGlqcy9waXhpLmpzL2Jsb2IvbWFzdGVyL0xJQ0VOU0V8TUlUIExpY2Vuc2V9XG4gKi9cblxuLyoqXG4gKiBAbmFtZXNwYWNlIFBJWEkuaW50ZXJhY3Rpb25cbiAqL1xubW9kdWxlLmV4cG9ydHMgPSB7XG4gICAgYWNjZXNzaWJsZVRhcmdldDogICAgIHJlcXVpcmUoJy4vYWNjZXNzaWJsZVRhcmdldCcpLFxuICAgIEFjY2Vzc2liaWxpdHlNYW5hZ2VyOiByZXF1aXJlKCcuL0FjY2Vzc2liaWxpdHlNYW5hZ2VyJylcbn07XG4iLCIvKipcbiAqIENvbnN0YW50IHZhbHVlcyB1c2VkIGluIHBpeGlcbiAqXG4gKiBAbGVuZHMgUElYSVxuICovXG52YXIgQ09OU1QgPSB7XG4gICAgLyoqXG4gICAgICogU3RyaW5nIG9mIHRoZSBjdXJyZW50IFBJWEkgdmVyc2lvblxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBjb25zdGFudFxuICAgICAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBWRVJTSU9OXG4gICAgICovXG4gICAgVkVSU0lPTjogcmVxdWlyZSgnLi4vLi4vcGFja2FnZS5qc29uJykudmVyc2lvbixcblxuICAgIC8qKlxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBQSV8yIC0gVHdvIFBpXG4gICAgICogQGNvbnN0YW50XG4gICAgICogQHN0YXRpY1xuICAgICAqL1xuICAgIFBJXzI6IE1hdGguUEkgKiAyLFxuXG4gICAgLyoqXG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IFJBRF9UT19ERUcgLSBDb25zdGFudCBjb252ZXJzaW9uIGZhY3RvciBmb3IgY29udmVydGluZyByYWRpYW5zIHRvIGRlZ3JlZXNcbiAgICAgKiBAY29uc3RhbnRcbiAgICAgKiBAc3RhdGljXG4gICAgICovXG4gICAgUkFEX1RPX0RFRzogMTgwIC8gTWF0aC5QSSxcblxuICAgIC8qKlxuICAgICAqIEBwcm9wZXJ0eSB7TnVtYmVyfSBERUdfVE9fUkFEIC0gQ29uc3RhbnQgY29udmVyc2lvbiBmYWN0b3IgZm9yIGNvbnZlcnRpbmcgZGVncmVlcyB0byByYWRpYW5zXG4gICAgICogQGNvbnN0YW50XG4gICAgICogQHN0YXRpY1xuICAgICAqL1xuICAgIERFR19UT19SQUQ6IE1hdGguUEkgLyAxODAsXG5cbiAgICAvKipcbiAgICAgKiBUYXJnZXQgZnJhbWVzIHBlciBtaWxsaXNlY29uZC5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAY29uc3RhbnRcbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gVEFSR0VUX0ZQTVM9MC4wNlxuICAgICAqL1xuICAgIFRBUkdFVF9GUE1TOiAwLjA2LFxuXG4gICAgLyoqXG4gICAgICogQ29uc3RhbnQgdG8gaWRlbnRpZnkgdGhlIFJlbmRlcmVyIFR5cGUuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQGNvbnN0YW50XG4gICAgICogQHByb3BlcnR5IHtvYmplY3R9IFJFTkRFUkVSX1RZUEVcbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gUkVOREVSRVJfVFlQRS5VTktOT1dOXG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IFJFTkRFUkVSX1RZUEUuV0VCR0xcbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gUkVOREVSRVJfVFlQRS5DQU5WQVNcbiAgICAgKi9cbiAgICBSRU5ERVJFUl9UWVBFOiB7XG4gICAgICAgIFVOS05PV046ICAgIDAsXG4gICAgICAgIFdFQkdMOiAgICAgIDEsXG4gICAgICAgIENBTlZBUzogICAgIDJcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVmFyaW91cyBibGVuZCBtb2RlcyBzdXBwb3J0ZWQgYnkgUElYSS4gSU1QT1JUQU5UIC0gVGhlIFdlYkdMIHJlbmRlcmVyIG9ubHkgc3VwcG9ydHNcbiAgICAgKiB0aGUgTk9STUFMLCBBREQsIE1VTFRJUExZIGFuZCBTQ1JFRU4gYmxlbmQgbW9kZXMuIEFueXRoaW5nIGVsc2Ugd2lsbCBzaWxlbnRseSBhY3QgbGlrZVxuICAgICAqIE5PUk1BTC5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAY29uc3RhbnRcbiAgICAgKiBAcHJvcGVydHkge29iamVjdH0gQkxFTkRfTU9ERVNcbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gQkxFTkRfTU9ERVMuTk9STUFMXG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IEJMRU5EX01PREVTLkFERFxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBCTEVORF9NT0RFUy5NVUxUSVBMWVxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBCTEVORF9NT0RFUy5TQ1JFRU5cbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gQkxFTkRfTU9ERVMuT1ZFUkxBWVxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBCTEVORF9NT0RFUy5EQVJLRU5cbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gQkxFTkRfTU9ERVMuTElHSFRFTlxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBCTEVORF9NT0RFUy5DT0xPUl9ET0RHRVxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBCTEVORF9NT0RFUy5DT0xPUl9CVVJOXG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IEJMRU5EX01PREVTLkhBUkRfTElHSFRcbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gQkxFTkRfTU9ERVMuU09GVF9MSUdIVFxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBCTEVORF9NT0RFUy5ESUZGRVJFTkNFXG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IEJMRU5EX01PREVTLkVYQ0xVU0lPTlxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBCTEVORF9NT0RFUy5IVUVcbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gQkxFTkRfTU9ERVMuU0FUVVJBVElPTlxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBCTEVORF9NT0RFUy5DT0xPUlxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBCTEVORF9NT0RFUy5MVU1JTk9TSVRZXG4gICAgICovXG4gICAgQkxFTkRfTU9ERVM6IHtcbiAgICAgICAgTk9STUFMOiAgICAgICAgIDAsXG4gICAgICAgIEFERDogICAgICAgICAgICAxLFxuICAgICAgICBNVUxUSVBMWTogICAgICAgMixcbiAgICAgICAgU0NSRUVOOiAgICAgICAgIDMsXG4gICAgICAgIE9WRVJMQVk6ICAgICAgICA0LFxuICAgICAgICBEQVJLRU46ICAgICAgICAgNSxcbiAgICAgICAgTElHSFRFTjogICAgICAgIDYsXG4gICAgICAgIENPTE9SX0RPREdFOiAgICA3LFxuICAgICAgICBDT0xPUl9CVVJOOiAgICAgOCxcbiAgICAgICAgSEFSRF9MSUdIVDogICAgIDksXG4gICAgICAgIFNPRlRfTElHSFQ6ICAgICAxMCxcbiAgICAgICAgRElGRkVSRU5DRTogICAgIDExLFxuICAgICAgICBFWENMVVNJT046ICAgICAgMTIsXG4gICAgICAgIEhVRTogICAgICAgICAgICAxMyxcbiAgICAgICAgU0FUVVJBVElPTjogICAgIDE0LFxuICAgICAgICBDT0xPUjogICAgICAgICAgMTUsXG4gICAgICAgIExVTUlOT1NJVFk6ICAgICAxNlxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBWYXJpb3VzIHdlYmdsIGRyYXcgbW9kZXMuIFRoZXNlIGNhbiBiZSB1c2VkIHRvIHNwZWNpZnkgd2hpY2ggR0wgZHJhd01vZGUgdG8gdXNlXG4gICAgICogdW5kZXIgY2VydGFpbiBzaXR1YXRpb25zIGFuZCByZW5kZXJlcnMuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQGNvbnN0YW50XG4gICAgICogQHByb3BlcnR5IHtvYmplY3R9IERSQVdfTU9ERVNcbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gRFJBV19NT0RFUy5QT0lOVFNcbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gRFJBV19NT0RFUy5MSU5FU1xuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBEUkFXX01PREVTLkxJTkVfTE9PUFxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBEUkFXX01PREVTLkxJTkVfU1RSSVBcbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gRFJBV19NT0RFUy5UUklBTkdMRVNcbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gRFJBV19NT0RFUy5UUklBTkdMRV9TVFJJUFxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBEUkFXX01PREVTLlRSSUFOR0xFX0ZBTlxuICAgICAqL1xuICAgIERSQVdfTU9ERVM6IHtcbiAgICAgICAgUE9JTlRTOiAgICAgICAgIDAsXG4gICAgICAgIExJTkVTOiAgICAgICAgICAxLFxuICAgICAgICBMSU5FX0xPT1A6ICAgICAgMixcbiAgICAgICAgTElORV9TVFJJUDogICAgIDMsXG4gICAgICAgIFRSSUFOR0xFUzogICAgICA0LFxuICAgICAgICBUUklBTkdMRV9TVFJJUDogNSxcbiAgICAgICAgVFJJQU5HTEVfRkFOOiAgIDZcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVGhlIHNjYWxlIG1vZGVzIHRoYXQgYXJlIHN1cHBvcnRlZCBieSBwaXhpLlxuICAgICAqXG4gICAgICogVGhlIERFRkFVTFQgc2NhbGUgbW9kZSBhZmZlY3RzIHRoZSBkZWZhdWx0IHNjYWxpbmcgbW9kZSBvZiBmdXR1cmUgb3BlcmF0aW9ucy5cbiAgICAgKiBJdCBjYW4gYmUgcmUtYXNzaWduZWQgdG8gZWl0aGVyIExJTkVBUiBvciBORUFSRVNULCBkZXBlbmRpbmcgdXBvbiBzdWl0YWJpbGl0eS5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAY29uc3RhbnRcbiAgICAgKiBAcHJvcGVydHkge29iamVjdH0gU0NBTEVfTU9ERVNcbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gU0NBTEVfTU9ERVMuREVGQVVMVD1MSU5FQVJcbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gU0NBTEVfTU9ERVMuTElORUFSIFNtb290aCBzY2FsaW5nXG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IFNDQUxFX01PREVTLk5FQVJFU1QgUGl4ZWxhdGluZyBzY2FsaW5nXG4gICAgICovXG4gICAgU0NBTEVfTU9ERVM6IHtcbiAgICAgICAgREVGQVVMVDogICAgMCxcbiAgICAgICAgTElORUFSOiAgICAgMCxcbiAgICAgICAgTkVBUkVTVDogICAgMVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBUaGUgcHJlZml4IHRoYXQgZGVub3RlcyBhIFVSTCBpcyBmb3IgYSByZXRpbmEgYXNzZXRcbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAY29uc3RhbnRcbiAgICAgKiBAcHJvcGVydHkge3N0cmluZ30gUkVUSU5BX1BSRUZJWFxuICAgICAqL1xuICAgIC8vZXhhbXBsZTogJ0AyeCcsXG4gICAgUkVUSU5BX1BSRUZJWDogL0AoLispeC8sXG5cbiAgICBSRVNPTFVUSU9OOjEsXG5cbiAgICBGSUxURVJfUkVTT0xVVElPTjoxLFxuXG4gICAgLyoqXG4gICAgICogVGhlIGRlZmF1bHQgcmVuZGVyIG9wdGlvbnMgaWYgbm9uZSBhcmUgc3VwcGxpZWQgdG8ge0BsaW5rIFBJWEkuV2ViR0xSZW5kZXJlcn1cbiAgICAgKiBvciB7QGxpbmsgUElYSS5DYW52YXNSZW5kZXJlcn0uXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQGNvbnN0YW50XG4gICAgICogQHByb3BlcnR5IHtvYmplY3R9IERFRkFVTFRfUkVOREVSX09QVElPTlNcbiAgICAgKiBAcHJvcGVydHkge0hUTUxDYW52YXNFbGVtZW50fSBERUZBVUxUX1JFTkRFUl9PUFRJT05TLnZpZXc9bnVsbFxuICAgICAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gREVGQVVMVF9SRU5ERVJfT1BUSU9OUy50cmFuc3BhcmVudD1mYWxzZVxuICAgICAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gREVGQVVMVF9SRU5ERVJfT1BUSU9OUy5hbnRpYWxpYXM9ZmFsc2VcbiAgICAgKiBAcHJvcGVydHkge2Jvb2xlYW59IERFRkFVTFRfUkVOREVSX09QVElPTlMuZm9yY2VGWEFBPWZhbHNlXG4gICAgICogQHByb3BlcnR5IHtib29sZWFufSBERUZBVUxUX1JFTkRFUl9PUFRJT05TLnByZXNlcnZlRHJhd2luZ0J1ZmZlcj1mYWxzZVxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBERUZBVUxUX1JFTkRFUl9PUFRJT05TLnJlc29sdXRpb249MVxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBERUZBVUxUX1JFTkRFUl9PUFRJT05TLmJhY2tncm91bmRDb2xvcj0weDAwMDAwMFxuICAgICAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gREVGQVVMVF9SRU5ERVJfT1BUSU9OUy5jbGVhckJlZm9yZVJlbmRlcj10cnVlXG4gICAgICogQHByb3BlcnR5IHtib29sZWFufSBERUZBVUxUX1JFTkRFUl9PUFRJT05TLmF1dG9SZXNpemU9ZmFsc2VcbiAgICAgKi9cbiAgICBERUZBVUxUX1JFTkRFUl9PUFRJT05TOiB7XG4gICAgICAgIHZpZXc6IG51bGwsXG4gICAgICAgIHJlc29sdXRpb246IDEsXG4gICAgICAgIGFudGlhbGlhczogZmFsc2UsXG4gICAgICAgIGZvcmNlRlhBQTogZmFsc2UsXG4gICAgICAgIGF1dG9SZXNpemU6IGZhbHNlLFxuICAgICAgICB0cmFuc3BhcmVudDogZmFsc2UsXG4gICAgICAgIGJhY2tncm91bmRDb2xvcjogMHgwMDAwMDAsXG4gICAgICAgIGNsZWFyQmVmb3JlUmVuZGVyOiB0cnVlLFxuICAgICAgICBwcmVzZXJ2ZURyYXdpbmdCdWZmZXI6IGZhbHNlLFxuICAgICAgICByb3VuZFBpeGVsczogZmFsc2VcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQ29uc3RhbnRzIHRoYXQgaWRlbnRpZnkgc2hhcGVzLCBtYWlubHkgdG8gcHJldmVudCBgaW5zdGFuY2VvZmAgY2FsbHMuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQGNvbnN0YW50XG4gICAgICogQHByb3BlcnR5IHtvYmplY3R9IFNIQVBFU1xuICAgICAqIEBwcm9wZXJ0eSB7b2JqZWN0fSBTSEFQRVMuUE9MWT0wXG4gICAgICogQHByb3BlcnR5IHtvYmplY3R9IFNIQVBFUy5SRUNUPTFcbiAgICAgKiBAcHJvcGVydHkge29iamVjdH0gU0hBUEVTLkNJUkM9MlxuICAgICAqIEBwcm9wZXJ0eSB7b2JqZWN0fSBTSEFQRVMuRUxJUD0zXG4gICAgICogQHByb3BlcnR5IHtvYmplY3R9IFNIQVBFUy5SUkVDPTRcbiAgICAgKi9cbiAgICBTSEFQRVM6IHtcbiAgICAgICAgUE9MWTogMCxcbiAgICAgICAgUkVDVDogMSxcbiAgICAgICAgQ0lSQzogMixcbiAgICAgICAgRUxJUDogMyxcbiAgICAgICAgUlJFQzogNFxuICAgIH0sXG5cbiAgICAvLyBUT0RPOiBtYXliZSBjaGFuZ2UgdG8gU1BSSVRFLkJBVENIX1NJWkU6IDIwMDBcbiAgICAvLyBUT0RPOiBtYXliZSBhZGQgUEFSVElDTEUuQkFUQ0hfU0laRTogMTUwMDBcbiAgICBTUFJJVEVfQkFUQ0hfU0laRTogMjAwMCAvL25pY2UgYmFsYW5jZSBiZXR3ZWVuIG1vYmlsZSBhbmQgZGVza3RvcCBtYWNoaW5lc1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBDT05TVDtcbiIsInZhciBtYXRoID0gcmVxdWlyZSgnLi4vbWF0aCcpLFxuICAgIHV0aWxzID0gcmVxdWlyZSgnLi4vdXRpbHMnKSxcbiAgICBEaXNwbGF5T2JqZWN0ID0gcmVxdWlyZSgnLi9EaXNwbGF5T2JqZWN0JyksXG4gICAgUmVuZGVyVGV4dHVyZSA9IHJlcXVpcmUoJy4uL3RleHR1cmVzL1JlbmRlclRleHR1cmUnKSxcbiAgICBfdGVtcE1hdHJpeCA9IG5ldyBtYXRoLk1hdHJpeCgpO1xuXG4vKipcbiAqIEEgQ29udGFpbmVyIHJlcHJlc2VudHMgYSBjb2xsZWN0aW9uIG9mIGRpc3BsYXkgb2JqZWN0cy5cbiAqIEl0IGlzIHRoZSBiYXNlIGNsYXNzIG9mIGFsbCBkaXNwbGF5IG9iamVjdHMgdGhhdCBhY3QgYXMgYSBjb250YWluZXIgZm9yIG90aGVyIG9iamVjdHMuXG4gKlxuICpgYGBqc1xuICogdmFyIGNvbnRhaW5lciA9IG5ldyBQSVhJLkNvbnRhaW5lcigpO1xuICogY29udGFpbmVyLmFkZENoaWxkKHNwcml0ZSk7XG4gKiBgYGBcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5EaXNwbGF5T2JqZWN0XG4gKiBAbWVtYmVyb2YgUElYSVxuICovXG5mdW5jdGlvbiBDb250YWluZXIoKVxue1xuICAgIERpc3BsYXlPYmplY3QuY2FsbCh0aGlzKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBhcnJheSBvZiBjaGlsZHJlbiBvZiB0aGlzIGNvbnRhaW5lci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuRGlzcGxheU9iamVjdFtdfVxuICAgICAqIEByZWFkb25seVxuICAgICAqL1xuICAgIHRoaXMuY2hpbGRyZW4gPSBbXTtcbn1cblxuLy8gY29uc3RydWN0b3JcbkNvbnRhaW5lci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKERpc3BsYXlPYmplY3QucHJvdG90eXBlKTtcbkNvbnRhaW5lci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBDb250YWluZXI7XG5tb2R1bGUuZXhwb3J0cyA9IENvbnRhaW5lcjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoQ29udGFpbmVyLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFRoZSB3aWR0aCBvZiB0aGUgQ29udGFpbmVyLCBzZXR0aW5nIHRoaXMgd2lsbCBhY3R1YWxseSBtb2RpZnkgdGhlIHNjYWxlIHRvIGFjaGlldmUgdGhlIHZhbHVlIHNldFxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLkNvbnRhaW5lciNcbiAgICAgKi9cbiAgICB3aWR0aDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnNjYWxlLnggKiB0aGlzLmdldExvY2FsQm91bmRzKCkud2lkdGg7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG5cbiAgICAgICAgICAgIHZhciB3aWR0aCA9IHRoaXMuZ2V0TG9jYWxCb3VuZHMoKS53aWR0aDtcblxuICAgICAgICAgICAgaWYgKHdpZHRoICE9PSAwKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHRoaXMuc2NhbGUueCA9IHZhbHVlIC8gd2lkdGg7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdGhpcy5zY2FsZS54ID0gMTtcbiAgICAgICAgICAgIH1cblxuXG4gICAgICAgICAgICB0aGlzLl93aWR0aCA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFRoZSBoZWlnaHQgb2YgdGhlIENvbnRhaW5lciwgc2V0dGluZyB0aGlzIHdpbGwgYWN0dWFsbHkgbW9kaWZ5IHRoZSBzY2FsZSB0byBhY2hpZXZlIHRoZSB2YWx1ZSBzZXRcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5Db250YWluZXIjXG4gICAgICovXG4gICAgaGVpZ2h0OiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuICB0aGlzLnNjYWxlLnkgKiB0aGlzLmdldExvY2FsQm91bmRzKCkuaGVpZ2h0O1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuXG4gICAgICAgICAgICB2YXIgaGVpZ2h0ID0gdGhpcy5nZXRMb2NhbEJvdW5kcygpLmhlaWdodDtcblxuICAgICAgICAgICAgaWYgKGhlaWdodCAhPT0gMClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNjYWxlLnkgPSB2YWx1ZSAvIGhlaWdodCA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdGhpcy5zY2FsZS55ID0gMTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5faGVpZ2h0ID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG59KTtcblxuLyoqXG4gKiBPdmVycmlkYWJsZSBtZXRob2QgdGhhdCBjYW4gYmUgdXNlZCBieSBDb250YWluZXIgc3ViY2xhc3NlcyB3aGVuZXZlciB0aGUgY2hpbGRyZW4gYXJyYXkgaXMgbW9kaWZpZWRcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5Db250YWluZXIucHJvdG90eXBlLm9uQ2hpbGRyZW5DaGFuZ2UgPSBmdW5jdGlvbiAoKSB7fTtcblxuLyoqXG4gKiBBZGRzIGEgY2hpbGQgdG8gdGhlIGNvbnRhaW5lci5cbiAqIFxuICogWW91IGNhbiBhbHNvIGFkZCBtdWx0cGxlIGl0ZW1zIGxpa2Ugc286IG15Q29udGFpbmVyLmFkZENoaWxkKHRoaW5rT25lLCB0aGluZ1R3bywgdGhpbmdUaHJlZSlcbiAqIEBwYXJhbSBjaGlsZCB7UElYSS5EaXNwbGF5T2JqZWN0fSBUaGUgRGlzcGxheU9iamVjdCB0byBhZGQgdG8gdGhlIGNvbnRhaW5lclxuICogQHJldHVybiB7UElYSS5EaXNwbGF5T2JqZWN0fSBUaGUgY2hpbGQgdGhhdCB3YXMgYWRkZWQuXG4gKi9cbkNvbnRhaW5lci5wcm90b3R5cGUuYWRkQ2hpbGQgPSBmdW5jdGlvbiAoY2hpbGQpXG57IFxuICAgIHZhciBhcmd1bWVudHNMZW5ndGggPSBhcmd1bWVudHMubGVuZ3RoO1xuXG4gICAgLy8gaWYgdGhlcmUgaXMgb25seSBvbmUgYXJndW1lbnQgd2UgY2FuIGJ5cGFzcyBsb29waW5nIHRocm91Z2ggdGhlIHRoZW1cbiAgICBpZihhcmd1bWVudHNMZW5ndGggPiAxKVxuICAgIHtcbiAgICAgICAgLy8gbG9vcCB0aHJvdWdoIHRoZSBhcmd1bWVudHMgcHJvcGVydHkgYW5kIGFkZCBhbGwgY2hpbGRyZW5cbiAgICAgICAgLy8gdXNlIGl0IHRoZSByaWdodCB3YXkgKC5sZW5ndGggYW5kIFtpXSkgc28gdGhhdCB0aGlzIGZ1bmN0aW9uIGNhbiBzdGlsbCBiZSBvcHRpbWlzZWQgYnkgSlMgcnVudGltZXNcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcmd1bWVudHNMZW5ndGg7IGkrKylcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5hZGRDaGlsZCggYXJndW1lbnRzW2ldICk7XG4gICAgICAgIH1cbiAgICB9ICAgICBcbiAgICBlbHNlXG4gICAge1xuICAgICAgICAvLyBpZiB0aGUgY2hpbGQgaGFzIGEgcGFyZW50IHRoZW4gbGV0cyByZW1vdmUgaXQgYXMgUGl4aSBvYmplY3RzIGNhbiBvbmx5IGV4aXN0IGluIG9uZSBwbGFjZVxuICAgICAgICBpZiAoY2hpbGQucGFyZW50KVxuICAgICAgICB7XG4gICAgICAgICAgICBjaGlsZC5wYXJlbnQucmVtb3ZlQ2hpbGQoY2hpbGQpO1xuICAgICAgICB9XG5cbiAgICAgICAgY2hpbGQucGFyZW50ID0gdGhpcztcbiAgICAgICAgXG4gICAgICAgIHRoaXMuY2hpbGRyZW4ucHVzaChjaGlsZCk7XG5cbiAgICAgICAgLy8gVE9ETyAtIGxldHMgZWl0aGVyIGRvIGFsbCBjYWxsYmFja3Mgb3IgYWxsIGV2ZW50cy4uIG5vdCBib3RoIVxuICAgICAgICB0aGlzLm9uQ2hpbGRyZW5DaGFuZ2UodGhpcy5jaGlsZHJlbi5sZW5ndGgtMSk7XG4gICAgICAgIGNoaWxkLmVtaXQoJ2FkZGVkJywgdGhpcyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGNoaWxkO1xufTtcblxuLyoqXG4gKiBBZGRzIGEgY2hpbGQgdG8gdGhlIGNvbnRhaW5lciBhdCBhIHNwZWNpZmllZCBpbmRleC4gSWYgdGhlIGluZGV4IGlzIG91dCBvZiBib3VuZHMgYW4gZXJyb3Igd2lsbCBiZSB0aHJvd25cbiAqXG4gKiBAcGFyYW0gY2hpbGQge1BJWEkuRGlzcGxheU9iamVjdH0gVGhlIGNoaWxkIHRvIGFkZFxuICogQHBhcmFtIGluZGV4IHtudW1iZXJ9IFRoZSBpbmRleCB0byBwbGFjZSB0aGUgY2hpbGQgaW5cbiAqIEByZXR1cm4ge1BJWEkuRGlzcGxheU9iamVjdH0gVGhlIGNoaWxkIHRoYXQgd2FzIGFkZGVkLlxuICovXG5Db250YWluZXIucHJvdG90eXBlLmFkZENoaWxkQXQgPSBmdW5jdGlvbiAoY2hpbGQsIGluZGV4KVxue1xuICAgIGlmIChpbmRleCA+PSAwICYmIGluZGV4IDw9IHRoaXMuY2hpbGRyZW4ubGVuZ3RoKVxuICAgIHtcbiAgICAgICAgaWYgKGNoaWxkLnBhcmVudClcbiAgICAgICAge1xuICAgICAgICAgICAgY2hpbGQucGFyZW50LnJlbW92ZUNoaWxkKGNoaWxkKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNoaWxkLnBhcmVudCA9IHRoaXM7XG5cbiAgICAgICAgdGhpcy5jaGlsZHJlbi5zcGxpY2UoaW5kZXgsIDAsIGNoaWxkKTtcblxuICAgICAgICAvLyBUT0RPIC0gbGV0cyBlaXRoZXIgZG8gYWxsIGNhbGxiYWNrcyBvciBhbGwgZXZlbnRzLi4gbm90IGJvdGghXG4gICAgICAgIHRoaXMub25DaGlsZHJlbkNoYW5nZShpbmRleCk7XG4gICAgICAgIGNoaWxkLmVtaXQoJ2FkZGVkJywgdGhpcyk7XG5cbiAgICAgICAgcmV0dXJuIGNoaWxkO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoY2hpbGQgKyAnYWRkQ2hpbGRBdDogVGhlIGluZGV4ICcrIGluZGV4ICsnIHN1cHBsaWVkIGlzIG91dCBvZiBib3VuZHMgJyArIHRoaXMuY2hpbGRyZW4ubGVuZ3RoKTtcbiAgICB9XG59O1xuXG4vKipcbiAqIFN3YXBzIHRoZSBwb3NpdGlvbiBvZiAyIERpc3BsYXkgT2JqZWN0cyB3aXRoaW4gdGhpcyBjb250YWluZXIuXG4gKlxuICogQHBhcmFtIGNoaWxkIHtQSVhJLkRpc3BsYXlPYmplY3R9XG4gKiBAcGFyYW0gY2hpbGQyIHtQSVhJLkRpc3BsYXlPYmplY3R9XG4gKi9cbkNvbnRhaW5lci5wcm90b3R5cGUuc3dhcENoaWxkcmVuID0gZnVuY3Rpb24gKGNoaWxkLCBjaGlsZDIpXG57XG4gICAgaWYgKGNoaWxkID09PSBjaGlsZDIpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFyIGluZGV4MSA9IHRoaXMuZ2V0Q2hpbGRJbmRleChjaGlsZCk7XG4gICAgdmFyIGluZGV4MiA9IHRoaXMuZ2V0Q2hpbGRJbmRleChjaGlsZDIpO1xuXG4gICAgaWYgKGluZGV4MSA8IDAgfHwgaW5kZXgyIDwgMClcbiAgICB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignc3dhcENoaWxkcmVuOiBCb3RoIHRoZSBzdXBwbGllZCBEaXNwbGF5T2JqZWN0cyBtdXN0IGJlIGNoaWxkcmVuIG9mIHRoZSBjYWxsZXIuJyk7XG4gICAgfVxuXG4gICAgdGhpcy5jaGlsZHJlbltpbmRleDFdID0gY2hpbGQyO1xuICAgIHRoaXMuY2hpbGRyZW5baW5kZXgyXSA9IGNoaWxkO1xuICAgIHRoaXMub25DaGlsZHJlbkNoYW5nZShpbmRleDEgPCBpbmRleDIgPyBpbmRleDEgOiBpbmRleDIpO1xufTtcblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBpbmRleCBwb3NpdGlvbiBvZiBhIGNoaWxkIERpc3BsYXlPYmplY3QgaW5zdGFuY2VcbiAqXG4gKiBAcGFyYW0gY2hpbGQge1BJWEkuRGlzcGxheU9iamVjdH0gVGhlIERpc3BsYXlPYmplY3QgaW5zdGFuY2UgdG8gaWRlbnRpZnlcbiAqIEByZXR1cm4ge251bWJlcn0gVGhlIGluZGV4IHBvc2l0aW9uIG9mIHRoZSBjaGlsZCBkaXNwbGF5IG9iamVjdCB0byBpZGVudGlmeVxuICovXG5Db250YWluZXIucHJvdG90eXBlLmdldENoaWxkSW5kZXggPSBmdW5jdGlvbiAoY2hpbGQpXG57XG4gICAgdmFyIGluZGV4ID0gdGhpcy5jaGlsZHJlbi5pbmRleE9mKGNoaWxkKTtcblxuICAgIGlmIChpbmRleCA9PT0gLTEpXG4gICAge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RoZSBzdXBwbGllZCBEaXNwbGF5T2JqZWN0IG11c3QgYmUgYSBjaGlsZCBvZiB0aGUgY2FsbGVyJyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGluZGV4O1xufTtcblxuLyoqXG4gKiBDaGFuZ2VzIHRoZSBwb3NpdGlvbiBvZiBhbiBleGlzdGluZyBjaGlsZCBpbiB0aGUgZGlzcGxheSBvYmplY3QgY29udGFpbmVyXG4gKlxuICogQHBhcmFtIGNoaWxkIHtQSVhJLkRpc3BsYXlPYmplY3R9IFRoZSBjaGlsZCBEaXNwbGF5T2JqZWN0IGluc3RhbmNlIGZvciB3aGljaCB5b3Ugd2FudCB0byBjaGFuZ2UgdGhlIGluZGV4IG51bWJlclxuICogQHBhcmFtIGluZGV4IHtudW1iZXJ9IFRoZSByZXN1bHRpbmcgaW5kZXggbnVtYmVyIGZvciB0aGUgY2hpbGQgZGlzcGxheSBvYmplY3RcbiAqL1xuQ29udGFpbmVyLnByb3RvdHlwZS5zZXRDaGlsZEluZGV4ID0gZnVuY3Rpb24gKGNoaWxkLCBpbmRleClcbntcbiAgICBpZiAoaW5kZXggPCAwIHx8IGluZGV4ID49IHRoaXMuY2hpbGRyZW4ubGVuZ3RoKVxuICAgIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdUaGUgc3VwcGxpZWQgaW5kZXggaXMgb3V0IG9mIGJvdW5kcycpO1xuICAgIH1cblxuICAgIHZhciBjdXJyZW50SW5kZXggPSB0aGlzLmdldENoaWxkSW5kZXgoY2hpbGQpO1xuXG4gICAgdXRpbHMucmVtb3ZlSXRlbXModGhpcy5jaGlsZHJlbiwgY3VycmVudEluZGV4LCAxKTsgLy8gcmVtb3ZlIGZyb20gb2xkIHBvc2l0aW9uXG4gICAgdGhpcy5jaGlsZHJlbi5zcGxpY2UoaW5kZXgsIDAsIGNoaWxkKTsgLy9hZGQgYXQgbmV3IHBvc2l0aW9uXG4gICAgdGhpcy5vbkNoaWxkcmVuQ2hhbmdlKGluZGV4KTtcbn07XG5cbi8qKlxuICogUmV0dXJucyB0aGUgY2hpbGQgYXQgdGhlIHNwZWNpZmllZCBpbmRleFxuICpcbiAqIEBwYXJhbSBpbmRleCB7bnVtYmVyfSBUaGUgaW5kZXggdG8gZ2V0IHRoZSBjaGlsZCBhdFxuICogQHJldHVybiB7UElYSS5EaXNwbGF5T2JqZWN0fSBUaGUgY2hpbGQgYXQgdGhlIGdpdmVuIGluZGV4LCBpZiBhbnkuXG4gKi9cbkNvbnRhaW5lci5wcm90b3R5cGUuZ2V0Q2hpbGRBdCA9IGZ1bmN0aW9uIChpbmRleClcbntcbiAgICBpZiAoaW5kZXggPCAwIHx8IGluZGV4ID49IHRoaXMuY2hpbGRyZW4ubGVuZ3RoKVxuICAgIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdnZXRDaGlsZEF0OiBTdXBwbGllZCBpbmRleCAnICsgaW5kZXggKyAnIGRvZXMgbm90IGV4aXN0IGluIHRoZSBjaGlsZCBsaXN0LCBvciB0aGUgc3VwcGxpZWQgRGlzcGxheU9iamVjdCBpcyBub3QgYSBjaGlsZCBvZiB0aGUgY2FsbGVyJyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuY2hpbGRyZW5baW5kZXhdO1xufTtcblxuLyoqXG4gKiBSZW1vdmVzIGEgY2hpbGQgZnJvbSB0aGUgY29udGFpbmVyLlxuICpcbiAqIEBwYXJhbSBjaGlsZCB7UElYSS5EaXNwbGF5T2JqZWN0fSBUaGUgRGlzcGxheU9iamVjdCB0byByZW1vdmVcbiAqIEByZXR1cm4ge1BJWEkuRGlzcGxheU9iamVjdH0gVGhlIGNoaWxkIHRoYXQgd2FzIHJlbW92ZWQuXG4gKi9cbkNvbnRhaW5lci5wcm90b3R5cGUucmVtb3ZlQ2hpbGQgPSBmdW5jdGlvbiAoY2hpbGQpXG57XG4gICAgdmFyIGFyZ3VtZW50c0xlbmd0aCA9IGFyZ3VtZW50cy5sZW5ndGg7XG5cbiAgICAvLyBpZiB0aGVyZSBpcyBvbmx5IG9uZSBhcmd1bWVudCB3ZSBjYW4gYnlwYXNzIGxvb3BpbmcgdGhyb3VnaCB0aGUgdGhlbVxuICAgIGlmKGFyZ3VtZW50c0xlbmd0aCA+IDEpXG4gICAge1xuICAgICAgICAvLyBsb29wIHRocm91Z2ggdGhlIGFyZ3VtZW50cyBwcm9wZXJ0eSBhbmQgYWRkIGFsbCBjaGlsZHJlblxuICAgICAgICAvLyB1c2UgaXQgdGhlIHJpZ2h0IHdheSAoLmxlbmd0aCBhbmQgW2ldKSBzbyB0aGF0IHRoaXMgZnVuY3Rpb24gY2FuIHN0aWxsIGJlIG9wdGltaXNlZCBieSBKUyBydW50aW1lc1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFyZ3VtZW50c0xlbmd0aDsgaSsrKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnJlbW92ZUNoaWxkKCBhcmd1bWVudHNbaV0gKTtcbiAgICAgICAgfVxuICAgIH0gICAgIFxuICAgIGVsc2VcbiAgICB7ICAgXG4gICAgICAgIHZhciBpbmRleCA9IHRoaXMuY2hpbGRyZW4uaW5kZXhPZihjaGlsZCk7XG5cbiAgICAgICAgaWYgKGluZGV4ID09PSAtMSlcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY2hpbGQucGFyZW50ID0gbnVsbDtcbiAgICAgICAgdXRpbHMucmVtb3ZlSXRlbXModGhpcy5jaGlsZHJlbiwgaW5kZXgsIDEpO1xuXG4gICAgICAgIC8vIFRPRE8gLSBsZXRzIGVpdGhlciBkbyBhbGwgY2FsbGJhY2tzIG9yIGFsbCBldmVudHMuLiBub3QgYm90aCFcbiAgICAgICAgdGhpcy5vbkNoaWxkcmVuQ2hhbmdlKGluZGV4KTtcbiAgICAgICAgY2hpbGQuZW1pdCgncmVtb3ZlZCcsIHRoaXMpO1xuICAgIH1cblxuICAgIHJldHVybiBjaGlsZDtcbn07XG5cbi8qKlxuICogUmVtb3ZlcyBhIGNoaWxkIGZyb20gdGhlIHNwZWNpZmllZCBpbmRleCBwb3NpdGlvbi5cbiAqXG4gKiBAcGFyYW0gaW5kZXgge251bWJlcn0gVGhlIGluZGV4IHRvIGdldCB0aGUgY2hpbGQgZnJvbVxuICogQHJldHVybiB7UElYSS5EaXNwbGF5T2JqZWN0fSBUaGUgY2hpbGQgdGhhdCB3YXMgcmVtb3ZlZC5cbiAqL1xuQ29udGFpbmVyLnByb3RvdHlwZS5yZW1vdmVDaGlsZEF0ID0gZnVuY3Rpb24gKGluZGV4KVxue1xuICAgIHZhciBjaGlsZCA9IHRoaXMuZ2V0Q2hpbGRBdChpbmRleCk7XG5cbiAgICBjaGlsZC5wYXJlbnQgPSBudWxsO1xuICAgIHV0aWxzLnJlbW92ZUl0ZW1zKHRoaXMuY2hpbGRyZW4sIGluZGV4LCAxKTtcblxuICAgIC8vIFRPRE8gLSBsZXRzIGVpdGhlciBkbyBhbGwgY2FsbGJhY2tzIG9yIGFsbCBldmVudHMuLiBub3QgYm90aCFcbiAgICB0aGlzLm9uQ2hpbGRyZW5DaGFuZ2UoaW5kZXgpO1xuICAgIGNoaWxkLmVtaXQoJ3JlbW92ZWQnLCB0aGlzKTtcblxuICAgIHJldHVybiBjaGlsZDtcbn07XG5cbi8qKlxuICogUmVtb3ZlcyBhbGwgY2hpbGRyZW4gZnJvbSB0aGlzIGNvbnRhaW5lciB0aGF0IGFyZSB3aXRoaW4gdGhlIGJlZ2luIGFuZCBlbmQgaW5kZXhlcy5cbiAqXG4gKiBAcGFyYW0gYmVnaW5JbmRleCB7bnVtYmVyfSBUaGUgYmVnaW5uaW5nIHBvc2l0aW9uLiBEZWZhdWx0IHZhbHVlIGlzIDAuXG4gKiBAcGFyYW0gZW5kSW5kZXgge251bWJlcn0gVGhlIGVuZGluZyBwb3NpdGlvbi4gRGVmYXVsdCB2YWx1ZSBpcyBzaXplIG9mIHRoZSBjb250YWluZXIuXG4gKi9cbkNvbnRhaW5lci5wcm90b3R5cGUucmVtb3ZlQ2hpbGRyZW4gPSBmdW5jdGlvbiAoYmVnaW5JbmRleCwgZW5kSW5kZXgpXG57XG4gICAgdmFyIGJlZ2luID0gYmVnaW5JbmRleCB8fCAwO1xuICAgIHZhciBlbmQgPSB0eXBlb2YgZW5kSW5kZXggPT09ICdudW1iZXInID8gZW5kSW5kZXggOiB0aGlzLmNoaWxkcmVuLmxlbmd0aDtcbiAgICB2YXIgcmFuZ2UgPSBlbmQgLSBiZWdpbjtcbiAgICB2YXIgcmVtb3ZlZCwgaTtcblxuICAgIGlmIChyYW5nZSA+IDAgJiYgcmFuZ2UgPD0gZW5kKVxuICAgIHtcbiAgICAgICAgcmVtb3ZlZCA9IHRoaXMuY2hpbGRyZW4uc3BsaWNlKGJlZ2luLCByYW5nZSk7XG5cbiAgICAgICAgZm9yIChpID0gMDsgaSA8IHJlbW92ZWQubGVuZ3RoOyArK2kpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJlbW92ZWRbaV0ucGFyZW50ID0gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMub25DaGlsZHJlbkNoYW5nZShiZWdpbkluZGV4KTtcblxuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgcmVtb3ZlZC5sZW5ndGg7ICsraSlcbiAgICAgICAge1xuICAgICAgICAgICAgcmVtb3ZlZFtpXS5lbWl0KCdyZW1vdmVkJywgdGhpcyk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gcmVtb3ZlZDtcbiAgICB9XG4gICAgZWxzZSBpZiAocmFuZ2UgPT09IDAgJiYgdGhpcy5jaGlsZHJlbi5sZW5ndGggPT09IDApXG4gICAge1xuICAgICAgICByZXR1cm4gW107XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdyZW1vdmVDaGlsZHJlbjogbnVtZXJpYyB2YWx1ZXMgYXJlIG91dHNpZGUgdGhlIGFjY2VwdGFibGUgcmFuZ2UuJyk7XG4gICAgfVxufTtcblxuLyoqXG4gKiBVc2VmdWwgZnVuY3Rpb24gdGhhdCByZXR1cm5zIGEgdGV4dHVyZSBvZiB0aGUgZGlzcGxheSBvYmplY3QgdGhhdCBjYW4gdGhlbiBiZSB1c2VkIHRvIGNyZWF0ZSBzcHJpdGVzXG4gKiBUaGlzIGNhbiBiZSBxdWl0ZSB1c2VmdWwgaWYgeW91ciBkaXNwbGF5T2JqZWN0IGlzIHN0YXRpYyAvIGNvbXBsaWNhdGVkIGFuZCBuZWVkcyB0byBiZSByZXVzZWQgbXVsdGlwbGUgdGltZXMuXG4gKlxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLkNhbnZhc1JlbmRlcmVyfFBJWEkuV2ViR0xSZW5kZXJlcn0gVGhlIHJlbmRlcmVyIHVzZWQgdG8gZ2VuZXJhdGUgdGhlIHRleHR1cmUuXG4gKiBAcGFyYW0gcmVzb2x1dGlvbiB7bnVtYmVyfSBUaGUgcmVzb2x1dGlvbiBvZiB0aGUgdGV4dHVyZSBiZWluZyBnZW5lcmF0ZWRcbiAqIEBwYXJhbSBzY2FsZU1vZGUge251bWJlcn0gU2VlIHtAbGluayBQSVhJLlNDQUxFX01PREVTfSBmb3IgcG9zc2libGUgdmFsdWVzXG4gKiBAcmV0dXJuIHtQSVhJLlRleHR1cmV9IGEgdGV4dHVyZSBvZiB0aGUgZGlzcGxheSBvYmplY3RcbiAqL1xuQ29udGFpbmVyLnByb3RvdHlwZS5nZW5lcmF0ZVRleHR1cmUgPSBmdW5jdGlvbiAocmVuZGVyZXIsIHJlc29sdXRpb24sIHNjYWxlTW9kZSlcbntcbiAgICB2YXIgYm91bmRzID0gdGhpcy5nZXRMb2NhbEJvdW5kcygpO1xuXG4gICAgdmFyIHJlbmRlclRleHR1cmUgPSBuZXcgUmVuZGVyVGV4dHVyZShyZW5kZXJlciwgYm91bmRzLndpZHRoIHwgMCwgYm91bmRzLmhlaWdodCB8IDAsIHNjYWxlTW9kZSwgcmVzb2x1dGlvbik7XG5cbiAgICBfdGVtcE1hdHJpeC50eCA9IC1ib3VuZHMueDtcbiAgICBfdGVtcE1hdHJpeC50eSA9IC1ib3VuZHMueTtcblxuICAgIHJlbmRlclRleHR1cmUucmVuZGVyKHRoaXMsIF90ZW1wTWF0cml4KTtcblxuICAgIHJldHVybiByZW5kZXJUZXh0dXJlO1xufTtcblxuLypcbiAqIFVwZGF0ZXMgdGhlIHRyYW5zZm9ybSBvbiBhbGwgY2hpbGRyZW4gb2YgdGhpcyBjb250YWluZXIgZm9yIHJlbmRlcmluZ1xuICpcbiAqIEBwcml2YXRlXG4gKi9cbkNvbnRhaW5lci5wcm90b3R5cGUudXBkYXRlVHJhbnNmb3JtID0gZnVuY3Rpb24gKClcbntcbiAgICBpZiAoIXRoaXMudmlzaWJsZSlcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLmRpc3BsYXlPYmplY3RVcGRhdGVUcmFuc2Zvcm0oKTtcblxuICAgIGZvciAodmFyIGkgPSAwLCBqID0gdGhpcy5jaGlsZHJlbi5sZW5ndGg7IGkgPCBqOyArK2kpXG4gICAge1xuICAgICAgICB0aGlzLmNoaWxkcmVuW2ldLnVwZGF0ZVRyYW5zZm9ybSgpO1xuICAgIH1cblxuICAgIHRoaXMuZGlydHlUcmFuc2Zvcm0gPSBmYWxzZTtcbn07XG5cbi8vIHBlcmZvcm1hbmNlIGluY3JlYXNlIHRvIGF2b2lkIHVzaW5nIGNhbGwuLiAoMTB4IGZhc3RlcilcbkNvbnRhaW5lci5wcm90b3R5cGUuY29udGFpbmVyVXBkYXRlVHJhbnNmb3JtID0gQ29udGFpbmVyLnByb3RvdHlwZS51cGRhdGVUcmFuc2Zvcm07XG5cbi8qKlxuICogUmV0cmlldmVzIHRoZSBib3VuZHMgb2YgdGhlIENvbnRhaW5lciBhcyBhIHJlY3RhbmdsZS4gVGhlIGJvdW5kcyBjYWxjdWxhdGlvbiB0YWtlcyBhbGwgdmlzaWJsZSBjaGlsZHJlbiBpbnRvIGNvbnNpZGVyYXRpb24uXG4gKlxuICogQHJldHVybiB7UElYSS5SZWN0YW5nbGV9IFRoZSByZWN0YW5ndWxhciBib3VuZGluZyBhcmVhXG4gKi9cbkNvbnRhaW5lci5wcm90b3R5cGUuZ2V0Qm91bmRzID0gZnVuY3Rpb24gKClcbntcbiAgICBpZighdGhpcy5fY3VycmVudEJvdW5kcylcbiAgICB7XG5cbiAgICAgICAgaWYgKHRoaXMuY2hpbGRyZW4ubGVuZ3RoID09PSAwKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gbWF0aC5SZWN0YW5nbGUuRU1QVFk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBUT0RPIHRoZSBib3VuZHMgaGF2ZSBhbHJlYWR5IGJlZW4gY2FsY3VsYXRlZCB0aGlzIHJlbmRlciBzZXNzaW9uIHNvIHJldHVybiB3aGF0IHdlIGhhdmVcblxuICAgICAgICB2YXIgbWluWCA9IEluZmluaXR5O1xuICAgICAgICB2YXIgbWluWSA9IEluZmluaXR5O1xuXG4gICAgICAgIHZhciBtYXhYID0gLUluZmluaXR5O1xuICAgICAgICB2YXIgbWF4WSA9IC1JbmZpbml0eTtcblxuICAgICAgICB2YXIgY2hpbGRCb3VuZHM7XG4gICAgICAgIHZhciBjaGlsZE1heFg7XG4gICAgICAgIHZhciBjaGlsZE1heFk7XG5cbiAgICAgICAgdmFyIGNoaWxkVmlzaWJsZSA9IGZhbHNlO1xuXG4gICAgICAgIGZvciAodmFyIGkgPSAwLCBqID0gdGhpcy5jaGlsZHJlbi5sZW5ndGg7IGkgPCBqOyArK2kpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHZhciBjaGlsZCA9IHRoaXMuY2hpbGRyZW5baV07XG5cbiAgICAgICAgICAgIGlmICghY2hpbGQudmlzaWJsZSlcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY2hpbGRWaXNpYmxlID0gdHJ1ZTtcblxuICAgICAgICAgICAgY2hpbGRCb3VuZHMgPSB0aGlzLmNoaWxkcmVuW2ldLmdldEJvdW5kcygpO1xuXG4gICAgICAgICAgICBtaW5YID0gbWluWCA8IGNoaWxkQm91bmRzLnggPyBtaW5YIDogY2hpbGRCb3VuZHMueDtcbiAgICAgICAgICAgIG1pblkgPSBtaW5ZIDwgY2hpbGRCb3VuZHMueSA/IG1pblkgOiBjaGlsZEJvdW5kcy55O1xuXG4gICAgICAgICAgICBjaGlsZE1heFggPSBjaGlsZEJvdW5kcy53aWR0aCArIGNoaWxkQm91bmRzLng7XG4gICAgICAgICAgICBjaGlsZE1heFkgPSBjaGlsZEJvdW5kcy5oZWlnaHQgKyBjaGlsZEJvdW5kcy55O1xuXG4gICAgICAgICAgICBtYXhYID0gbWF4WCA+IGNoaWxkTWF4WCA/IG1heFggOiBjaGlsZE1heFg7XG4gICAgICAgICAgICBtYXhZID0gbWF4WSA+IGNoaWxkTWF4WSA/IG1heFkgOiBjaGlsZE1heFk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIWNoaWxkVmlzaWJsZSlcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIG1hdGguUmVjdGFuZ2xlLkVNUFRZO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGJvdW5kcyA9IHRoaXMuX2JvdW5kcztcblxuICAgICAgICBib3VuZHMueCA9IG1pblg7XG4gICAgICAgIGJvdW5kcy55ID0gbWluWTtcbiAgICAgICAgYm91bmRzLndpZHRoID0gbWF4WCAtIG1pblg7XG4gICAgICAgIGJvdW5kcy5oZWlnaHQgPSBtYXhZIC0gbWluWTtcblxuICAgICAgICB0aGlzLl9jdXJyZW50Qm91bmRzID0gYm91bmRzO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLl9jdXJyZW50Qm91bmRzO1xufTtcblxuQ29udGFpbmVyLnByb3RvdHlwZS5jb250YWluZXJHZXRCb3VuZHMgPSBDb250YWluZXIucHJvdG90eXBlLmdldEJvdW5kcztcblxuLyoqXG4gKiBSZXRyaWV2ZXMgdGhlIG5vbi1nbG9iYWwgbG9jYWwgYm91bmRzIG9mIHRoZSBDb250YWluZXIgYXMgYSByZWN0YW5nbGUuXG4gKiBUaGUgY2FsY3VsYXRpb24gdGFrZXMgYWxsIHZpc2libGUgY2hpbGRyZW4gaW50byBjb25zaWRlcmF0aW9uLlxuICpcbiAqIEByZXR1cm4ge1BJWEkuUmVjdGFuZ2xlfSBUaGUgcmVjdGFuZ3VsYXIgYm91bmRpbmcgYXJlYVxuICovXG5Db250YWluZXIucHJvdG90eXBlLmdldExvY2FsQm91bmRzID0gZnVuY3Rpb24gKClcbntcbiAgICB2YXIgbWF0cml4Q2FjaGUgPSB0aGlzLndvcmxkVHJhbnNmb3JtO1xuXG4gICAgdGhpcy53b3JsZFRyYW5zZm9ybSA9IG1hdGguTWF0cml4LklERU5USVRZO1xuXG4gICAgZm9yICh2YXIgaSA9IDAsIGogPSB0aGlzLmNoaWxkcmVuLmxlbmd0aDsgaSA8IGo7ICsraSlcbiAgICB7XG4gICAgICAgIHRoaXMuY2hpbGRyZW5baV0udXBkYXRlVHJhbnNmb3JtKCk7XG4gICAgfVxuXG4gICAgdGhpcy53b3JsZFRyYW5zZm9ybSA9IG1hdHJpeENhY2hlO1xuXG4gICAgdGhpcy5fY3VycmVudEJvdW5kcyA9IG51bGw7XG5cbiAgICByZXR1cm4gdGhpcy5nZXRCb3VuZHMoIG1hdGguTWF0cml4LklERU5USVRZICk7XG59O1xuXG4vKipcbiAqIFJlbmRlcnMgdGhlIG9iamVjdCB1c2luZyB0aGUgV2ViR0wgcmVuZGVyZXJcbiAqXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcn0gVGhlIHJlbmRlcmVyXG4gKi9cbkNvbnRhaW5lci5wcm90b3R5cGUucmVuZGVyV2ViR0wgPSBmdW5jdGlvbiAocmVuZGVyZXIpXG57XG5cbiAgICAvLyBpZiB0aGUgb2JqZWN0IGlzIG5vdCB2aXNpYmxlIG9yIHRoZSBhbHBoYSBpcyAwIHRoZW4gbm8gbmVlZCB0byByZW5kZXIgdGhpcyBlbGVtZW50XG4gICAgaWYgKCF0aGlzLnZpc2libGUgfHwgdGhpcy53b3JsZEFscGhhIDw9IDAgfHwgIXRoaXMucmVuZGVyYWJsZSlcbiAgICB7XG4gICAgICBcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHZhciBpLCBqO1xuXG4gICAgLy8gZG8gYSBxdWljayBjaGVjayB0byBzZWUgaWYgdGhpcyBlbGVtZW50IGhhcyBhIG1hc2sgb3IgYSBmaWx0ZXIuXG4gICAgaWYgKHRoaXMuX21hc2sgfHwgdGhpcy5fZmlsdGVycylcbiAgICB7XG4gICAgICAgIHJlbmRlcmVyLmN1cnJlbnRSZW5kZXJlci5mbHVzaCgpO1xuXG4gICAgICAgIC8vIHB1c2ggZmlsdGVyIGZpcnN0IGFzIHdlIG5lZWQgdG8gZW5zdXJlIHRoZSBzdGVuY2lsIGJ1ZmZlciBpcyBjb3JyZWN0IGZvciBhbnkgbWFza2luZ1xuICAgICAgICBpZiAodGhpcy5fZmlsdGVycyAmJiB0aGlzLl9maWx0ZXJzLmxlbmd0aClcbiAgICAgICAge1xuICAgICAgICAgICAgcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5wdXNoRmlsdGVyKHRoaXMsIHRoaXMuX2ZpbHRlcnMpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuX21hc2spXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJlbmRlcmVyLm1hc2tNYW5hZ2VyLnB1c2hNYXNrKHRoaXMsIHRoaXMuX21hc2spO1xuICAgICAgICB9XG5cbiAgICAgICAgcmVuZGVyZXIuY3VycmVudFJlbmRlcmVyLnN0YXJ0KCk7XG5cbiAgICAgICAgLy8gYWRkIHRoaXMgb2JqZWN0IHRvIHRoZSBiYXRjaCwgb25seSByZW5kZXJlZCBpZiBpdCBoYXMgYSB0ZXh0dXJlLlxuICAgICAgICB0aGlzLl9yZW5kZXJXZWJHTChyZW5kZXJlcik7XG5cbiAgICAgICAgLy8gbm93IGxvb3AgdGhyb3VnaCB0aGUgY2hpbGRyZW4gYW5kIG1ha2Ugc3VyZSB0aGV5IGdldCByZW5kZXJlZFxuICAgICAgICBmb3IgKGkgPSAwLCBqID0gdGhpcy5jaGlsZHJlbi5sZW5ndGg7IGkgPCBqOyBpKyspXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuY2hpbGRyZW5baV0ucmVuZGVyV2ViR0wocmVuZGVyZXIpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmVuZGVyZXIuY3VycmVudFJlbmRlcmVyLmZsdXNoKCk7XG5cbiAgICAgICAgaWYgKHRoaXMuX21hc2spXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJlbmRlcmVyLm1hc2tNYW5hZ2VyLnBvcE1hc2sodGhpcywgdGhpcy5fbWFzayk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5fZmlsdGVycylcbiAgICAgICAge1xuICAgICAgICAgICAgcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5wb3BGaWx0ZXIoKTtcblxuICAgICAgICB9XG4gICAgICAgIHJlbmRlcmVyLmN1cnJlbnRSZW5kZXJlci5zdGFydCgpO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICB0aGlzLl9yZW5kZXJXZWJHTChyZW5kZXJlcik7XG5cbiAgICAgICAgLy8gc2ltcGxlIHJlbmRlciBjaGlsZHJlbiFcbiAgICAgICAgZm9yIChpID0gMCwgaiA9IHRoaXMuY2hpbGRyZW4ubGVuZ3RoOyBpIDwgajsgKytpKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmNoaWxkcmVuW2ldLnJlbmRlcldlYkdMKHJlbmRlcmVyKTtcbiAgICAgICAgfVxuICAgIH1cbn07XG5cbi8qKlxuICogVG8gYmUgb3ZlcnJpZGRlbiBieSB0aGUgc3ViY2xhc3NcbiAqXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcn0gVGhlIHJlbmRlcmVyXG4gKiBAcHJpdmF0ZVxuICovXG5Db250YWluZXIucHJvdG90eXBlLl9yZW5kZXJXZWJHTCA9IGZ1bmN0aW9uIChyZW5kZXJlcikgLy8ganNoaW50IHVudXNlZDpmYWxzZVxue1xuICAgIC8vIHRoaXMgaXMgd2hlcmUgY29udGVudCBpdHNlbGYgZ2V0cyByZW5kZXJlZC4uLlxufTtcblxuLyoqXG4gKiBUbyBiZSBvdmVycmlkZGVuIGJ5IHRoZSBzdWJjbGFzc1xuICpcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5DYW52YXNSZW5kZXJlcn0gVGhlIHJlbmRlcmVyXG4gKiBAcHJpdmF0ZVxuICovXG5Db250YWluZXIucHJvdG90eXBlLl9yZW5kZXJDYW52YXMgPSBmdW5jdGlvbiAocmVuZGVyZXIpIC8vIGpzaGludCB1bnVzZWQ6ZmFsc2VcbntcbiAgICAvLyB0aGlzIGlzIHdoZXJlIGNvbnRlbnQgaXRzZWxmIGdldHMgcmVuZGVyZWQuLi5cbn07XG5cblxuLyoqXG4gKiBSZW5kZXJzIHRoZSBvYmplY3QgdXNpbmcgdGhlIENhbnZhcyByZW5kZXJlclxuICpcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5DYW52YXNSZW5kZXJlcn0gVGhlIHJlbmRlcmVyXG4gKi9cbkNvbnRhaW5lci5wcm90b3R5cGUucmVuZGVyQ2FudmFzID0gZnVuY3Rpb24gKHJlbmRlcmVyKVxue1xuICAgIC8vIGlmIG5vdCB2aXNpYmxlIG9yIHRoZSBhbHBoYSBpcyAwIHRoZW4gbm8gbmVlZCB0byByZW5kZXIgdGhpc1xuICAgIGlmICghdGhpcy52aXNpYmxlIHx8IHRoaXMuYWxwaGEgPD0gMCB8fCAhdGhpcy5yZW5kZXJhYmxlKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICh0aGlzLl9tYXNrKVxuICAgIHtcbiAgICAgICAgcmVuZGVyZXIubWFza01hbmFnZXIucHVzaE1hc2sodGhpcy5fbWFzaywgcmVuZGVyZXIpO1xuICAgIH1cblxuICAgIHRoaXMuX3JlbmRlckNhbnZhcyhyZW5kZXJlcik7XG4gICAgZm9yICh2YXIgaSA9IDAsIGogPSB0aGlzLmNoaWxkcmVuLmxlbmd0aDsgaSA8IGo7ICsraSlcbiAgICB7XG4gICAgICAgIHRoaXMuY2hpbGRyZW5baV0ucmVuZGVyQ2FudmFzKHJlbmRlcmVyKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5fbWFzaylcbiAgICB7XG4gICAgICAgIHJlbmRlcmVyLm1hc2tNYW5hZ2VyLnBvcE1hc2socmVuZGVyZXIpO1xuICAgIH1cbn07XG5cbi8qKlxuICogRGVzdHJveXMgdGhlIGNvbnRhaW5lclxuICogQHBhcmFtIFtkZXN0cm95Q2hpbGRyZW49ZmFsc2VdIHtib29sZWFufSBpZiBzZXQgdG8gdHJ1ZSwgYWxsIHRoZSBjaGlsZHJlbiB3aWxsIGhhdmUgdGhlaXIgZGVzdHJveSBtZXRob2QgY2FsbGVkIGFzIHdlbGxcbiAqL1xuQ29udGFpbmVyLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKGRlc3Ryb3lDaGlsZHJlbilcbntcbiAgICBEaXNwbGF5T2JqZWN0LnByb3RvdHlwZS5kZXN0cm95LmNhbGwodGhpcyk7XG5cbiAgICBpZiAoZGVzdHJveUNoaWxkcmVuKVxuICAgIHtcbiAgICAgICAgZm9yICh2YXIgaSA9IDAsIGogPSB0aGlzLmNoaWxkcmVuLmxlbmd0aDsgaSA8IGo7ICsraSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5jaGlsZHJlbltpXS5kZXN0cm95KGRlc3Ryb3lDaGlsZHJlbik7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLnJlbW92ZUNoaWxkcmVuKCk7XG5cbiAgICB0aGlzLmNoaWxkcmVuID0gbnVsbDtcbn07XG4iLCJ2YXIgbWF0aCA9IHJlcXVpcmUoJy4uL21hdGgnKSxcbiAgICBSZW5kZXJUZXh0dXJlID0gcmVxdWlyZSgnLi4vdGV4dHVyZXMvUmVuZGVyVGV4dHVyZScpLFxuICAgIEV2ZW50RW1pdHRlciA9IHJlcXVpcmUoJ2V2ZW50ZW1pdHRlcjMnKSxcbiAgICBDT05TVCA9IHJlcXVpcmUoJy4uL2NvbnN0JyksXG4gICAgX3RlbXBNYXRyaXggPSBuZXcgbWF0aC5NYXRyaXgoKSxcbiAgICBfdGVtcERpc3BsYXlPYmplY3RQYXJlbnQgPSB7d29ybGRUcmFuc2Zvcm06bmV3IG1hdGguTWF0cml4KCksIHdvcmxkQWxwaGE6MSwgY2hpbGRyZW46W119O1xuXG5cbi8qKlxuICogVGhlIGJhc2UgY2xhc3MgZm9yIGFsbCBvYmplY3RzIHRoYXQgYXJlIHJlbmRlcmVkIG9uIHRoZSBzY3JlZW4uXG4gKiBUaGlzIGlzIGFuIGFic3RyYWN0IGNsYXNzIGFuZCBzaG91bGQgbm90IGJlIHVzZWQgb24gaXRzIG93biByYXRoZXIgaXQgc2hvdWxkIGJlIGV4dGVuZGVkLlxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgRXZlbnRFbWl0dGVyXG4gKiBAbWVtYmVyb2YgUElYSVxuICovXG5mdW5jdGlvbiBEaXNwbGF5T2JqZWN0KClcbntcbiAgICBFdmVudEVtaXR0ZXIuY2FsbCh0aGlzKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBjb29yZGluYXRlIG9mIHRoZSBvYmplY3QgcmVsYXRpdmUgdG8gdGhlIGxvY2FsIGNvb3JkaW5hdGVzIG9mIHRoZSBwYXJlbnQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlBvaW50fVxuICAgICAqL1xuICAgIHRoaXMucG9zaXRpb24gPSBuZXcgbWF0aC5Qb2ludCgpO1xuICAgIHRoaXMuX3Bvc2l0aW9uID0gbmV3IENhY2hlUG9pbnQodGhpcyk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgc2NhbGUgZmFjdG9yIG9mIHRoZSBvYmplY3QuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlBvaW50fVxuICAgICAqL1xuICAgIHRoaXMuc2NhbGUgPSBuZXcgbWF0aC5Qb2ludCgxLCAxKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBwaXZvdCBwb2ludCBvZiB0aGUgZGlzcGxheU9iamVjdCB0aGF0IGl0IHJvdGF0ZXMgYXJvdW5kXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlBvaW50fVxuICAgICAqL1xuICAgIHRoaXMucGl2b3QgPSBuZXcgbWF0aC5Qb2ludCgwLCAwKTtcblxuXG4gICAgLyoqXG4gICAgICogVGhlIHNrZXcgZmFjdG9yIGZvciB0aGUgb2JqZWN0IGluIHJhZGlhbnMuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlBvaW50fVxuICAgICAqL1xuICAgIHRoaXMuc2tldyA9IG5ldyBtYXRoLlBvaW50KDAsIDApO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHJvdGF0aW9uIG9mIHRoZSBvYmplY3QgaW4gcmFkaWFucy5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLl9yb3RhdGlvbiA9IDA7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgb3BhY2l0eSBvZiB0aGUgb2JqZWN0LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMuYWxwaGEgPSAxO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHZpc2liaWxpdHkgb2YgdGhlIG9iamVjdC4gSWYgZmFsc2UgdGhlIG9iamVjdCB3aWxsIG5vdCBiZSBkcmF3biwgYW5kXG4gICAgICogdGhlIHVwZGF0ZVRyYW5zZm9ybSBmdW5jdGlvbiB3aWxsIG5vdCBiZSBjYWxsZWQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqL1xuICAgIHRoaXMudmlzaWJsZSA9IHRydWU7XG5cbiAgICAvKipcbiAgICAgKiBDYW4gdGhpcyBvYmplY3QgYmUgcmVuZGVyZWQsIGlmIGZhbHNlIHRoZSBvYmplY3Qgd2lsbCBub3QgYmUgZHJhd24gYnV0IHRoZSB1cGRhdGVUcmFuc2Zvcm1cbiAgICAgKiBtZXRob2RzIHdpbGwgc3RpbGwgYmUgY2FsbGVkLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKi9cbiAgICB0aGlzLnJlbmRlcmFibGUgPSB0cnVlO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGRpc3BsYXkgb2JqZWN0IGNvbnRhaW5lciB0aGF0IGNvbnRhaW5zIHRoaXMgZGlzcGxheSBvYmplY3QuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLkNvbnRhaW5lcn1cbiAgICAgKiBAcmVhZE9ubHlcbiAgICAgKi9cbiAgICB0aGlzLnBhcmVudCA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgbXVsdGlwbGllZCBhbHBoYSBvZiB0aGUgZGlzcGxheU9iamVjdFxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEByZWFkT25seVxuICAgICAqL1xuICAgIHRoaXMud29ybGRBbHBoYSA9IDE7XG5cbiAgICAvKipcbiAgICAgKiBDdXJyZW50IHRyYW5zZm9ybSBvZiB0aGUgb2JqZWN0IGJhc2VkIG9uIHdvcmxkIChwYXJlbnQpIGZhY3RvcnNcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuTWF0cml4fVxuICAgICAqIEByZWFkT25seVxuICAgICAqL1xuICAgIHRoaXMud29ybGRUcmFuc2Zvcm0gPSBuZXcgbWF0aC5NYXRyaXgoKTtcbiAgICB0aGlzLmxvY2FsVHJhbnNmb3JtID0gbmV3IG1hdGguTWF0cml4KCk7XG5cblxuICAgIC8qKlxuICAgICAqIFRoZSBhcmVhIHRoZSBmaWx0ZXIgaXMgYXBwbGllZCB0by4gVGhpcyBpcyB1c2VkIGFzIG1vcmUgb2YgYW4gb3B0aW1pc2F0aW9uXG4gICAgICogcmF0aGVyIHRoYW4gZmlndXJpbmcgb3V0IHRoZSBkaW1lbnNpb25zIG9mIHRoZSBkaXNwbGF5T2JqZWN0IGVhY2ggZnJhbWUgeW91IGNhbiBzZXQgdGhpcyByZWN0YW5nbGVcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuUmVjdGFuZ2xlfVxuICAgICAqL1xuICAgIHRoaXMuZmlsdGVyQXJlYSA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBjYWNoZWQgc2luIHJvdGF0aW9uXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9zciA9IDA7XG5cbiAgICAvKipcbiAgICAgKiBjYWNoZWQgY29zIHJvdGF0aW9uXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9jciA9IDE7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgb3JpZ2luYWwsIGNhY2hlZCBib3VuZHMgb2YgdGhlIG9iamVjdFxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5SZWN0YW5nbGV9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9ib3VuZHMgPSBuZXcgbWF0aC5SZWN0YW5nbGUoMCwgMCwgMSwgMSk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgbW9zdCB1cC10by1kYXRlIGJvdW5kcyBvZiB0aGUgb2JqZWN0XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlJlY3RhbmdsZX1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX2N1cnJlbnRCb3VuZHMgPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogVGhlIG9yaWdpbmFsLCBjYWNoZWQgbWFzayBvZiB0aGUgb2JqZWN0XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlJlY3RhbmdsZX1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX21hc2sgPSBudWxsO1xuXG4gICAgdGhpcy5kaXJ0eVRyYW5zZm9ybSA9IHRydWU7XG59XG5cbi8vIGNvbnN0cnVjdG9yXG5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoRXZlbnRFbWl0dGVyLnByb3RvdHlwZSk7XG5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IERpc3BsYXlPYmplY3Q7XG5tb2R1bGUuZXhwb3J0cyA9IERpc3BsYXlPYmplY3Q7XG5cbnZhciBDYWNoZVBvaW50ID0gZnVuY3Rpb24oZG9jKXtcbiAgICBcbiAgICB0aGlzLmRvYyA9IGRvYztcblxuICAgIHRoaXMueCA9IDA7XG4gICAgdGhpcy55ID0gMDtcbn1cblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoQ2FjaGVQb2ludC5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBUaGUgcG9zaXRpb24gb2YgdGhlIGRpc3BsYXlPYmplY3Qgb24gdGhlIHggYXhpcyByZWxhdGl2ZSB0byB0aGUgbG9jYWwgY29vcmRpbmF0ZXMgb2YgdGhlIHBhcmVudC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5EaXNwbGF5T2JqZWN0I1xuICAgICAqL1xuICAgIHg6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5kb2MucG9zaXRpb24ueDtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuZG9jLnBvc2l0aW9uLnggPSB2YWx1ZTtcbiAgICAgICAgICAgIHRoaXMuZG9jLmRpcnR5VHJhbnNmb3JtID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICB5OiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZG9jLnBvc2lpdG9uLnk7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmRvYy5wb3NpdGlvbi55ID0gdmFsdWU7XG4gICAgICAgICAgICB0aGlzLmRvYy5kaXJ0eVRyYW5zZm9ybSA9IHRydWU7XG4gICAgICAgIH1cbiAgICB9XG59KTtcblxuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhEaXNwbGF5T2JqZWN0LnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFRoZSBwb3NpdGlvbiBvZiB0aGUgZGlzcGxheU9iamVjdCBvbiB0aGUgeCBheGlzIHJlbGF0aXZlIHRvIHRoZSBsb2NhbCBjb29yZGluYXRlcyBvZiB0aGUgcGFyZW50LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLkRpc3BsYXlPYmplY3QjXG4gICAgICovXG4gICAgeDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnBvc2l0aW9uLng7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnBvc2l0aW9uLnggPSB2YWx1ZTtcbiAgICAgICAgICAgIHRoaXMuZGlydHlUcmFuc2Zvcm0gPSB0cnVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFRoZSBwb3NpdGlvbiBvZiB0aGUgZGlzcGxheU9iamVjdCBvbiB0aGUgeSBheGlzIHJlbGF0aXZlIHRvIHRoZSBsb2NhbCBjb29yZGluYXRlcyBvZiB0aGUgcGFyZW50LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLkRpc3BsYXlPYmplY3QjXG4gICAgICovXG4gICAgeToge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnBvc2l0aW9uLnk7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnBvc2l0aW9uLnkgPSB2YWx1ZTtcbiAgICAgICAgICAgIHRoaXMuZGlydHlUcmFuc2Zvcm0gPSB0cnVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIHNjYWxlWDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnNjYWxlLng7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnNjYWxlLnggPSB2YWx1ZTtcbiAgICAgICAgICAgIHRoaXMuZGlydHlUcmFuc2Zvcm0gPSB0cnVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFRoZSBwb3NpdGlvbiBvZiB0aGUgZGlzcGxheU9iamVjdCBvbiB0aGUgeSBheGlzIHJlbGF0aXZlIHRvIHRoZSBsb2NhbCBjb29yZGluYXRlcyBvZiB0aGUgcGFyZW50LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLkRpc3BsYXlPYmplY3QjXG4gICAgICovXG4gICAgc2NhbGVZOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuc2NhbGUueTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuc2NhbGUueSA9IHZhbHVlO1xuICAgICAgICAgICAgdGhpcy5kaXJ0eVRyYW5zZm9ybSA9IHRydWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgcm90YXRpb246IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fcm90YXRpb247XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLl9yb3RhdGlvbiA9IHZhbHVlO1xuICAgICAgICAgICAgdGhpcy5kaXJ0eVRyYW5zZm9ybSA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLl9zciA9IE1hdGguc2luKHZhbHVlKTtcbiAgICAgICAgICAgIHRoaXMuX2NyID0gTWF0aC5jb3ModmFsdWUpO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFRoZSBwb3NpdGlvbiBvZiB0aGUgZGlzcGxheU9iamVjdCBvbiB0aGUgeSBheGlzIHJlbGF0aXZlIHRvIHRoZSBsb2NhbCBjb29yZGluYXRlcyBvZiB0aGUgcGFyZW50LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLkRpc3BsYXlPYmplY3QjXG4gICAgICovXG4gICAgc2NhbGVZOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuc2NhbGUueTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuc2NhbGUueSA9IHZhbHVlO1xuICAgICAgICAgICAgdGhpcy5kaXJ0eVRyYW5zZm9ybSA9IHRydWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogSW5kaWNhdGVzIGlmIHRoZSBzcHJpdGUgaXMgZ2xvYmFsbHkgdmlzaWJsZS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICogQG1lbWJlcm9mIFBJWEkuRGlzcGxheU9iamVjdCNcbiAgICAgKiBAcmVhZG9ubHlcbiAgICAgKi9cbiAgICB3b3JsZFZpc2libGU6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICB2YXIgaXRlbSA9IHRoaXM7XG5cbiAgICAgICAgICAgIGRvIHtcbiAgICAgICAgICAgICAgICBpZiAoIWl0ZW0udmlzaWJsZSlcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpdGVtID0gaXRlbS5wYXJlbnQ7XG4gICAgICAgICAgICB9IHdoaWxlIChpdGVtKTtcblxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogU2V0cyBhIG1hc2sgZm9yIHRoZSBkaXNwbGF5T2JqZWN0LiBBIG1hc2sgaXMgYW4gb2JqZWN0IHRoYXQgbGltaXRzIHRoZSB2aXNpYmlsaXR5IG9mIGFuIG9iamVjdCB0byB0aGUgc2hhcGUgb2YgdGhlIG1hc2sgYXBwbGllZCB0byBpdC5cbiAgICAgKiBJbiBQSVhJIGEgcmVndWxhciBtYXNrIG11c3QgYmUgYSBQSVhJLkdyYXBoaWNzIG9yIGEgUElYSS5TcHJpdGUgb2JqZWN0LiBUaGlzIGFsbG93cyBmb3IgbXVjaCBmYXN0ZXIgbWFza2luZyBpbiBjYW52YXMgYXMgaXQgdXRpbGlzZXMgc2hhcGUgY2xpcHBpbmcuXG4gICAgICogVG8gcmVtb3ZlIGEgbWFzaywgc2V0IHRoaXMgcHJvcGVydHkgdG8gbnVsbC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuR3JhcGhpY3N8UElYSS5TcHJpdGV9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuRGlzcGxheU9iamVjdCNcbiAgICAgKi9cbiAgICBtYXNrOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX21hc2s7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICBpZiAodGhpcy5fbWFzaylcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9tYXNrLnJlbmRlcmFibGUgPSB0cnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLl9tYXNrID0gdmFsdWU7XG5cbiAgICAgICAgICAgIGlmICh0aGlzLl9tYXNrKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHRoaXMuX21hc2sucmVuZGVyYWJsZSA9IGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIGZpbHRlcnMgZm9yIHRoZSBkaXNwbGF5T2JqZWN0LlxuICAgICAqICogSU1QT1JUQU5UOiBUaGlzIGlzIGEgd2ViR0wgb25seSBmZWF0dXJlIGFuZCB3aWxsIGJlIGlnbm9yZWQgYnkgdGhlIGNhbnZhcyByZW5kZXJlci5cbiAgICAgKiBUbyByZW1vdmUgZmlsdGVycyBzaW1wbHkgc2V0IHRoaXMgcHJvcGVydHkgdG8gJ251bGwnXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLkFic3RyYWN0RmlsdGVyW119XG4gICAgICogQG1lbWJlcm9mIFBJWEkuRGlzcGxheU9iamVjdCNcbiAgICAgKi9cbiAgICBmaWx0ZXJzOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2ZpbHRlcnMgJiYgdGhpcy5fZmlsdGVycy5zbGljZSgpO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5fZmlsdGVycyA9IHZhbHVlICYmIHZhbHVlLnNsaWNlKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbn0pO1xuXG4vKlxuICogVXBkYXRlcyB0aGUgb2JqZWN0IHRyYW5zZm9ybSBmb3IgcmVuZGVyaW5nXG4gKlxuICogVE9ETyAtIE9wdGltaXphdGlvbiBwYXNzIVxuICovXG5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS51cGRhdGVUcmFuc2Zvcm0gPSBmdW5jdGlvbiAoKVxue1xuICAgIHZhciBwdCA9IHRoaXMucGFyZW50LndvcmxkVHJhbnNmb3JtO1xuICAgIHZhciB3dCA9IHRoaXMud29ybGRUcmFuc2Zvcm07XG4gICAgdmFyIGx0ID0gdGhpcy5sb2NhbFRyYW5zZm9ybTtcblxuICAgIGlmKHRoaXMuZGlydHlUcmFuc2Zvcm0pXG4gICAge1xuICAgICAgICAvLyBnZXQgdGhlIG1hdHJpeCB2YWx1ZXMgb2YgdGhlIGRpc3BsYXlvYmplY3QgYmFzZWQgb24gaXRzIHRyYW5zZm9ybSBwcm9wZXJ0aWVzLi5cbiAgICAgICAgbHQuYSAgPSAgdGhpcy5fY3IgKiB0aGlzLnNjYWxlLng7XG4gICAgICAgIGx0LmIgID0gIHRoaXMuX3NyICogdGhpcy5zY2FsZS54O1xuICAgICAgICBsdC5jICA9IC10aGlzLl9zciAqIHRoaXMuc2NhbGUueTtcbiAgICAgICAgbHQuZCAgPSAgdGhpcy5fY3IgKiB0aGlzLnNjYWxlLnk7XG4gICAgICAgIGx0LnR4ID0gIHRoaXMucG9zaXRpb24ueCAtICh0aGlzLnBpdm90LnggKiBsdC5hICsgdGhpcy5waXZvdC55ICogbHQuYyk7XG4gICAgICAgIGx0LnR5ID0gIHRoaXMucG9zaXRpb24ueSAtICh0aGlzLnBpdm90LnggKiBsdC5iICsgdGhpcy5waXZvdC55ICogbHQuZCk7XG4gICAgfVxuXG4gICAgaWYodGhpcy5kaXJ0eVRyYW5zZm9ybSB8fCB0aGlzLnBhcmVudC5kaXJ0eVRyYW5zZm9ybSlcbiAgICB7ICAgICAgXG4gICAgICAgIC8vIGNvbmNhdCB0aGUgcGFyZW50IG1hdHJpeCB3aXRoIHRoZSBvYmplY3RzIHRyYW5zZm9ybS5cbiAgICAgICAgd3QuYSAgPSBsdC5hICAqIHB0LmEgKyBsdC5iICAqIHB0LmM7XG4gICAgICAgIHd0LmIgID0gbHQuYSAgKiBwdC5iICsgbHQuYiAgKiBwdC5kO1xuICAgICAgICB3dC5jICA9IGx0LmMgICogcHQuYSArIGx0LmQgICogcHQuYztcbiAgICAgICAgd3QuZCAgPSBsdC5jICAqIHB0LmIgKyBsdC5kICAqIHB0LmQ7XG4gICAgICAgIHd0LnR4ID0gbHQudHggKiBwdC5hICsgbHQudHkgKiBwdC5jICsgcHQudHg7XG4gICAgICAgIHd0LnR5ID0gbHQudHggKiBwdC5iICsgbHQudHkgKiBwdC5kICsgcHQudHk7ICAgICAgIFxuICAgIFxuICAgICAgICB0aGlzLl9jdXJyZW50Qm91bmRzID0gbnVsbDtcbiAgICB9XG5cbiAgICAvLyBtdWx0aXBseSB0aGUgYWxwaGFzLi5cbiAgICB0aGlzLndvcmxkQWxwaGEgPSB0aGlzLmFscGhhICogdGhpcy5wYXJlbnQud29ybGRBbHBoYTtcblxuICAgIC8vIHJlc2V0IHRoZSBib3VuZHMgZWFjaCB0aW1lIHRoaXMgaXMgY2FsbGVkIVxuICAgIFxufTtcblxuLy8gcGVyZm9ybWFuY2UgaW5jcmVhc2UgdG8gYXZvaWQgdXNpbmcgY2FsbC4uICgxMHggZmFzdGVyKVxuRGlzcGxheU9iamVjdC5wcm90b3R5cGUuZGlzcGxheU9iamVjdFVwZGF0ZVRyYW5zZm9ybSA9IERpc3BsYXlPYmplY3QucHJvdG90eXBlLnVwZGF0ZVRyYW5zZm9ybTtcblxuLyoqXG4gKlxuICpcbiAqIFJldHJpZXZlcyB0aGUgYm91bmRzIG9mIHRoZSBkaXNwbGF5T2JqZWN0IGFzIGEgcmVjdGFuZ2xlIG9iamVjdFxuICpcbiAqIEBwYXJhbSBtYXRyaXgge1BJWEkuTWF0cml4fVxuICogQHJldHVybiB7UElYSS5SZWN0YW5nbGV9IHRoZSByZWN0YW5ndWxhciBib3VuZGluZyBhcmVhXG4gKi9cbkRpc3BsYXlPYmplY3QucHJvdG90eXBlLmdldEJvdW5kcyA9IGZ1bmN0aW9uIChtYXRyaXgpIC8vIGpzaGludCB1bnVzZWQ6ZmFsc2VcbntcbiAgICByZXR1cm4gbWF0aC5SZWN0YW5nbGUuRU1QVFk7XG59O1xuXG4vKipcbiAqIFJldHJpZXZlcyB0aGUgbG9jYWwgYm91bmRzIG9mIHRoZSBkaXNwbGF5T2JqZWN0IGFzIGEgcmVjdGFuZ2xlIG9iamVjdFxuICpcbiAqIEByZXR1cm4ge1BJWEkuUmVjdGFuZ2xlfSB0aGUgcmVjdGFuZ3VsYXIgYm91bmRpbmcgYXJlYVxuICovXG5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS5nZXRMb2NhbEJvdW5kcyA9IGZ1bmN0aW9uICgpXG57XG4gICAgcmV0dXJuIHRoaXMuZ2V0Qm91bmRzKG1hdGguTWF0cml4LklERU5USVRZKTtcbn07XG5cbi8qKlxuICogQ2FsY3VsYXRlcyB0aGUgZ2xvYmFsIHBvc2l0aW9uIG9mIHRoZSBkaXNwbGF5IG9iamVjdFxuICpcbiAqIEBwYXJhbSBwb3NpdGlvbiB7UElYSS5Qb2ludH0gVGhlIHdvcmxkIG9yaWdpbiB0byBjYWxjdWxhdGUgZnJvbVxuICogQHJldHVybiB7UElYSS5Qb2ludH0gQSBwb2ludCBvYmplY3QgcmVwcmVzZW50aW5nIHRoZSBwb3NpdGlvbiBvZiB0aGlzIG9iamVjdFxuICovXG5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS50b0dsb2JhbCA9IGZ1bmN0aW9uIChwb3NpdGlvbilcbntcbiAgICAvLyB0aGlzIHBhcmVudCBjaGVjayBpcyBmb3IganVzdCBpbiBjYXNlIHRoZSBpdGVtIGlzIGEgcm9vdCBvYmplY3QuXG4gICAgLy8gSWYgaXQgaXMgd2UgbmVlZCB0byBnaXZlIGl0IGEgdGVtcG9yYXJ5IHBhcmVudCBzbyB0aGF0IGRpc3BsYXlPYmplY3RVcGRhdGVUcmFuc2Zvcm0gd29ya3MgY29ycmVjdGx5XG4gICAgLy8gdGhpcyBpcyBtYWlubHkgdG8gYXZvaWQgYSBwYXJlbnQgY2hlY2sgaW4gdGhlIG1haW4gbG9vcC4gRXZlcnkgbGl0dGxlIGhlbHBzIGZvciBwZXJmb3JtYW5jZSA6KVxuICAgIGlmKCF0aGlzLnBhcmVudClcbiAgICB7XG4gICAgICAgIHRoaXMucGFyZW50ID0gX3RlbXBEaXNwbGF5T2JqZWN0UGFyZW50O1xuICAgICAgICB0aGlzLmRpc3BsYXlPYmplY3RVcGRhdGVUcmFuc2Zvcm0oKTtcbiAgICAgICAgdGhpcy5wYXJlbnQgPSBudWxsO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICB0aGlzLmRpc3BsYXlPYmplY3RVcGRhdGVUcmFuc2Zvcm0oKTtcbiAgICB9XG5cbiAgICAvLyBkb24ndCBuZWVkIHRvIHVwZGF0ZSB0aGUgbG90XG4gICAgcmV0dXJuIHRoaXMud29ybGRUcmFuc2Zvcm0uYXBwbHkocG9zaXRpb24pO1xufTtcblxuLyoqXG4gKiBDYWxjdWxhdGVzIHRoZSBsb2NhbCBwb3NpdGlvbiBvZiB0aGUgZGlzcGxheSBvYmplY3QgcmVsYXRpdmUgdG8gYW5vdGhlciBwb2ludFxuICpcbiAqIEBwYXJhbSBwb3NpdGlvbiB7UElYSS5Qb2ludH0gVGhlIHdvcmxkIG9yaWdpbiB0byBjYWxjdWxhdGUgZnJvbVxuICogQHBhcmFtIFtmcm9tXSB7UElYSS5EaXNwbGF5T2JqZWN0fSBUaGUgRGlzcGxheU9iamVjdCB0byBjYWxjdWxhdGUgdGhlIGdsb2JhbCBwb3NpdGlvbiBmcm9tXG4gKiBAcGFyYW0gW3BvaW50XSB7UElYSS5Qb2ludH0gQSBQb2ludCBvYmplY3QgaW4gd2hpY2ggdG8gc3RvcmUgdGhlIHZhbHVlLCBvcHRpb25hbCAob3RoZXJ3aXNlIHdpbGwgY3JlYXRlIGEgbmV3IFBvaW50KVxuICogQHJldHVybiB7UElYSS5Qb2ludH0gQSBwb2ludCBvYmplY3QgcmVwcmVzZW50aW5nIHRoZSBwb3NpdGlvbiBvZiB0aGlzIG9iamVjdFxuICovXG5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS50b0xvY2FsID0gZnVuY3Rpb24gKHBvc2l0aW9uLCBmcm9tLCBwb2ludClcbntcbiAgICBpZiAoZnJvbSlcbiAgICB7XG4gICAgICAgIHBvc2l0aW9uID0gZnJvbS50b0dsb2JhbChwb3NpdGlvbik7XG4gICAgfVxuXG4gICAgLy8gdGhpcyBwYXJlbnQgY2hlY2sgaXMgZm9yIGp1c3QgaW4gY2FzZSB0aGUgaXRlbSBpcyBhIHJvb3Qgb2JqZWN0LlxuICAgIC8vIElmIGl0IGlzIHdlIG5lZWQgdG8gZ2l2ZSBpdCBhIHRlbXBvcmFyeSBwYXJlbnQgc28gdGhhdCBkaXNwbGF5T2JqZWN0VXBkYXRlVHJhbnNmb3JtIHdvcmtzIGNvcnJlY3RseVxuICAgIC8vIHRoaXMgaXMgbWFpbmx5IHRvIGF2b2lkIGEgcGFyZW50IGNoZWNrIGluIHRoZSBtYWluIGxvb3AuIEV2ZXJ5IGxpdHRsZSBoZWxwcyBmb3IgcGVyZm9ybWFuY2UgOilcbiAgICBpZighdGhpcy5wYXJlbnQpXG4gICAge1xuICAgICAgICB0aGlzLnBhcmVudCA9IF90ZW1wRGlzcGxheU9iamVjdFBhcmVudDtcbiAgICAgICAgdGhpcy5kaXNwbGF5T2JqZWN0VXBkYXRlVHJhbnNmb3JtKCk7XG4gICAgICAgIHRoaXMucGFyZW50ID0gbnVsbDtcbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgdGhpcy5kaXNwbGF5T2JqZWN0VXBkYXRlVHJhbnNmb3JtKCk7XG4gICAgfVxuXG4gICAgLy8gc2ltcGx5IGFwcGx5IHRoZSBtYXRyaXguLlxuICAgIHJldHVybiB0aGlzLndvcmxkVHJhbnNmb3JtLmFwcGx5SW52ZXJzZShwb3NpdGlvbiwgcG9pbnQpO1xufTtcblxuLyoqXG4gKiBSZW5kZXJzIHRoZSBvYmplY3QgdXNpbmcgdGhlIFdlYkdMIHJlbmRlcmVyXG4gKlxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLldlYkdMUmVuZGVyZXJ9IFRoZSByZW5kZXJlclxuICogQHByaXZhdGVcbiAqL1xuRGlzcGxheU9iamVjdC5wcm90b3R5cGUucmVuZGVyV2ViR0wgPSBmdW5jdGlvbiAocmVuZGVyZXIpIC8vIGpzaGludCB1bnVzZWQ6ZmFsc2VcbntcbiAgICAvLyBPVkVSV1JJVEU7XG59O1xuXG4vKipcbiAqIFJlbmRlcnMgdGhlIG9iamVjdCB1c2luZyB0aGUgQ2FudmFzIHJlbmRlcmVyXG4gKlxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLkNhbnZhc1JlbmRlcmVyfSBUaGUgcmVuZGVyZXJcbiAqIEBwcml2YXRlXG4gKi9cbkRpc3BsYXlPYmplY3QucHJvdG90eXBlLnJlbmRlckNhbnZhcyA9IGZ1bmN0aW9uIChyZW5kZXJlcikgLy8ganNoaW50IHVudXNlZDpmYWxzZVxue1xuICAgIC8vIE9WRVJXUklURTtcbn07XG4vKipcbiAqIFVzZWZ1bCBmdW5jdGlvbiB0aGF0IHJldHVybnMgYSB0ZXh0dXJlIG9mIHRoZSBkaXNwbGF5IG9iamVjdCB0aGF0IGNhbiB0aGVuIGJlIHVzZWQgdG8gY3JlYXRlIHNwcml0ZXNcbiAqIFRoaXMgY2FuIGJlIHF1aXRlIHVzZWZ1bCBpZiB5b3VyIGRpc3BsYXlPYmplY3QgaXMgc3RhdGljIC8gY29tcGxpY2F0ZWQgYW5kIG5lZWRzIHRvIGJlIHJldXNlZCBtdWx0aXBsZSB0aW1lcy5cbiAqXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuQ2FudmFzUmVuZGVyZXJ8UElYSS5XZWJHTFJlbmRlcmVyfSBUaGUgcmVuZGVyZXIgdXNlZCB0byBnZW5lcmF0ZSB0aGUgdGV4dHVyZS5cbiAqIEBwYXJhbSBzY2FsZU1vZGUge251bWJlcn0gU2VlIHtAbGluayBQSVhJLlNDQUxFX01PREVTfSBmb3IgcG9zc2libGUgdmFsdWVzXG4gKiBAcGFyYW0gcmVzb2x1dGlvbiB7bnVtYmVyfSBUaGUgcmVzb2x1dGlvbiBvZiB0aGUgdGV4dHVyZSBiZWluZyBnZW5lcmF0ZWRcbiAqIEByZXR1cm4ge1BJWEkuVGV4dHVyZX0gYSB0ZXh0dXJlIG9mIHRoZSBkaXNwbGF5IG9iamVjdFxuICovXG5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS5nZW5lcmF0ZVRleHR1cmUgPSBmdW5jdGlvbiAocmVuZGVyZXIsIHNjYWxlTW9kZSwgcmVzb2x1dGlvbilcbntcbiAgICB2YXIgYm91bmRzID0gdGhpcy5nZXRMb2NhbEJvdW5kcygpO1xuXG4gICAgdmFyIHJlbmRlclRleHR1cmUgPSBuZXcgUmVuZGVyVGV4dHVyZShyZW5kZXJlciwgYm91bmRzLndpZHRoIHwgMCwgYm91bmRzLmhlaWdodCB8IDAsIHNjYWxlTW9kZSwgcmVzb2x1dGlvbik7XG5cbiAgICBfdGVtcE1hdHJpeC50eCA9IC1ib3VuZHMueDtcbiAgICBfdGVtcE1hdHJpeC50eSA9IC1ib3VuZHMueTtcblxuICAgIHJlbmRlclRleHR1cmUucmVuZGVyKHRoaXMsIF90ZW1wTWF0cml4KTtcblxuICAgIHJldHVybiByZW5kZXJUZXh0dXJlO1xufTtcblxuLyoqXG4gKiBTZXQgdGhlIHBhcmVudCBDb250YWluZXIgb2YgdGhpcyBEaXNwbGF5T2JqZWN0XG4gKlxuICogQHBhcmFtIGNvbnRhaW5lciB7Q29udGFpbmVyfSBUaGUgQ29udGFpbmVyIHRvIGFkZCB0aGlzIERpc3BsYXlPYmplY3QgdG9cbiAqIEByZXR1cm4ge0NvbnRhaW5lcn0gVGhlIENvbnRhaW5lciB0aGF0IHRoaXMgRGlzcGxheU9iamVjdCB3YXMgYWRkZWQgdG9cbiAqL1xuRGlzcGxheU9iamVjdC5wcm90b3R5cGUuc2V0UGFyZW50ID0gZnVuY3Rpb24gKGNvbnRhaW5lcilcbntcbiAgICBpZiAoIWNvbnRhaW5lciB8fCAhY29udGFpbmVyLmFkZENoaWxkKVxuICAgIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdzZXRQYXJlbnQ6IEFyZ3VtZW50IG11c3QgYmUgYSBDb250YWluZXInKTtcbiAgICB9XG5cbiAgICBjb250YWluZXIuYWRkQ2hpbGQodGhpcyk7XG4gICAgcmV0dXJuIGNvbnRhaW5lcjtcbn07XG5cbi8qKlxuICogQ29udmVuaWVuY2UgZnVuY3Rpb24gdG8gc2V0IHRoZSBwb3N0aW9uLCBzY2FsZSwgc2tldyBhbmQgcGl2b3QgYXQgb25jZS5cbiAqXG4gKiBAcGFyYW0gW3g9MF0ge251bWJlcn0gVGhlIFggcG9zaXRpb25cbiAqIEBwYXJhbSBbeT0wXSB7bnVtYmVyfSBUaGUgWSBwb3NpdGlvblxuICogQHBhcmFtIFtzY2FsZVg9MV0ge251bWJlcn0gVGhlIFggc2NhbGUgdmFsdWVcbiAqIEBwYXJhbSBbc2NhbGVZPTFdIHtudW1iZXJ9IFRoZSBZIHNjYWxlIHZhbHVlXG4gKiBAcGFyYW0gW3JvdGF0aW9uPTBdIHtudW1iZXJ9IFRoZSByb3RhdGlvblxuICogQHBhcmFtIFtza2V3WD0wXSB7bnVtYmVyfSBUaGUgWCBza2V3IHZhbHVlXG4gKiBAcGFyYW0gW3NrZXdZPTBdIHtudW1iZXJ9IFRoZSBZIHNrZXcgdmFsdWVcbiAqIEBwYXJhbSBbcGl2b3RYPTBdIHtudW1iZXJ9IFRoZSBYIHBpdm90IHZhbHVlXG4gKiBAcGFyYW0gW3Bpdm90WT0wXSB7bnVtYmVyfSBUaGUgWSBwaXZvdCB2YWx1ZVxuICogQHJldHVybiB7UElYSS5EaXNwbGF5T2JqZWN0fVxuICovXG5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS5zZXRUcmFuc2Zvcm0gPSBmdW5jdGlvbih4LCB5LCBzY2FsZVgsIHNjYWxlWSwgcm90YXRpb24sIHNrZXdYLCBza2V3WSwgcGl2b3RYLCBwaXZvdFkpIC8vanNoaW50IGlnbm9yZTpsaW5lXG57XG4gICAgdGhpcy5wb3NpdGlvbi54ID0geCB8fCAwO1xuICAgIHRoaXMucG9zaXRpb24ueSA9IHkgfHwgMDtcbiAgICB0aGlzLnNjYWxlLnggPSAhc2NhbGVYID8gMSA6IHNjYWxlWDtcbiAgICB0aGlzLnNjYWxlLnkgPSAhc2NhbGVZID8gMSA6IHNjYWxlWTtcbiAgICB0aGlzLnJvdGF0aW9uID0gcm90YXRpb24gfHwgMDtcbiAgICB0aGlzLnNrZXcueCA9IHNrZXdYIHx8IDA7XG4gICAgdGhpcy5za2V3LnkgPSBza2V3WSB8fCAwO1xuICAgIHRoaXMucGl2b3QueCA9IHBpdm90WCB8fCAwO1xuICAgIHRoaXMucGl2b3QueSA9IHBpdm90WSB8fCAwO1xuICAgIHRoaXMuZGlydHlUcmFuc2Zvcm0gPSB0cnVlO1xuICAgIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBCYXNlIGRlc3Ryb3kgbWV0aG9kIGZvciBnZW5lcmljIGRpc3BsYXkgb2JqZWN0c1xuICpcbiAqL1xuRGlzcGxheU9iamVjdC5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uICgpXG57XG5cbiAgICB0aGlzLnBvc2l0aW9uID0gbnVsbDtcbiAgICB0aGlzLnNjYWxlID0gbnVsbDtcbiAgICB0aGlzLnBpdm90ID0gbnVsbDtcbiAgICB0aGlzLnNrZXcgPSBudWxsO1xuXG4gICAgdGhpcy5wYXJlbnQgPSBudWxsO1xuXG4gICAgdGhpcy5fYm91bmRzID0gbnVsbDtcbiAgICB0aGlzLl9jdXJyZW50Qm91bmRzID0gbnVsbDtcbiAgICB0aGlzLl9tYXNrID0gbnVsbDtcblxuICAgIHRoaXMud29ybGRUcmFuc2Zvcm0gPSBudWxsO1xuICAgIHRoaXMuZmlsdGVyQXJlYSA9IG51bGw7XG59O1xuIiwidmFyIENvbnRhaW5lciA9IHJlcXVpcmUoJy4uL2Rpc3BsYXkvQ29udGFpbmVyJyksXG4gICAgVGV4dHVyZSA9IHJlcXVpcmUoJy4uL3RleHR1cmVzL1RleHR1cmUnKSxcbiAgICBDYW52YXNCdWZmZXIgPSByZXF1aXJlKCcuLi9yZW5kZXJlcnMvY2FudmFzL3V0aWxzL0NhbnZhc0J1ZmZlcicpLFxuICAgIENhbnZhc0dyYXBoaWNzID0gcmVxdWlyZSgnLi4vcmVuZGVyZXJzL2NhbnZhcy91dGlscy9DYW52YXNHcmFwaGljcycpLFxuICAgIEdyYXBoaWNzRGF0YSA9IHJlcXVpcmUoJy4vR3JhcGhpY3NEYXRhJyksXG4gICAgbWF0aCA9IHJlcXVpcmUoJy4uL21hdGgnKSxcbiAgICBDT05TVCA9IHJlcXVpcmUoJy4uL2NvbnN0JyksXG4gICAgdGVtcFBvaW50ID0gbmV3IG1hdGguUG9pbnQoKTtcblxuLyoqXG4gKiBUaGUgR3JhcGhpY3MgY2xhc3MgY29udGFpbnMgbWV0aG9kcyB1c2VkIHRvIGRyYXcgcHJpbWl0aXZlIHNoYXBlcyBzdWNoIGFzIGxpbmVzLCBjaXJjbGVzIGFuZFxuICogcmVjdGFuZ2xlcyB0byB0aGUgZGlzcGxheSwgYW5kIHRvIGNvbG9yIGFuZCBmaWxsIHRoZW0uXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLkNvbnRhaW5lclxuICogQG1lbWJlcm9mIFBJWElcbiAqL1xuZnVuY3Rpb24gR3JhcGhpY3MoKVxue1xuICAgIENvbnRhaW5lci5jYWxsKHRoaXMpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGFscGhhIHZhbHVlIHVzZWQgd2hlbiBmaWxsaW5nIHRoZSBHcmFwaGljcyBvYmplY3QuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMVxuICAgICAqL1xuICAgIHRoaXMuZmlsbEFscGhhID0gMTtcblxuICAgIC8qKlxuICAgICAqIFRoZSB3aWR0aCAodGhpY2tuZXNzKSBvZiBhbnkgbGluZXMgZHJhd24uXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMFxuICAgICAqL1xuICAgIHRoaXMubGluZVdpZHRoID0gMDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBjb2xvciBvZiBhbnkgbGluZXMgZHJhd24uXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtzdHJpbmd9XG4gICAgICogQGRlZmF1bHQgMFxuICAgICAqL1xuICAgIHRoaXMubGluZUNvbG9yID0gMDtcblxuICAgIC8qKlxuICAgICAqIEdyYXBoaWNzIGRhdGFcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuR3JhcGhpY3NEYXRhW119XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLmdyYXBoaWNzRGF0YSA9IFtdO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHRpbnQgYXBwbGllZCB0byB0aGUgZ3JhcGhpYyBzaGFwZS4gVGhpcyBpcyBhIGhleCB2YWx1ZS4gQXBwbHkgYSB2YWx1ZSBvZiAweEZGRkZGRiB0byByZXNldCB0aGUgdGludC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAweEZGRkZGRlxuICAgICAqL1xuICAgIHRoaXMudGludCA9IDB4RkZGRkZGO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHByZXZpb3VzIHRpbnQgYXBwbGllZCB0byB0aGUgZ3JhcGhpYyBzaGFwZS4gVXNlZCB0byBjb21wYXJlIHRvIHRoZSBjdXJyZW50IHRpbnQgYW5kIGNoZWNrIGlmIHRoZXJlcyBjaGFuZ2UuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAZGVmYXVsdCAweEZGRkZGRlxuICAgICAqL1xuICAgIHRoaXMuX3ByZXZUaW50ID0gMHhGRkZGRkY7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYmxlbmQgbW9kZSB0byBiZSBhcHBsaWVkIHRvIHRoZSBncmFwaGljIHNoYXBlLiBBcHBseSBhIHZhbHVlIG9mIGBQSVhJLkJMRU5EX01PREVTLk5PUk1BTGAgdG8gcmVzZXQgdGhlIGJsZW5kIG1vZGUuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgUElYSS5CTEVORF9NT0RFUy5OT1JNQUw7XG4gICAgICogQHNlZSBQSVhJLkJMRU5EX01PREVTXG4gICAgICovXG4gICAgdGhpcy5ibGVuZE1vZGUgPSBDT05TVC5CTEVORF9NT0RFUy5OT1JNQUw7XG5cbiAgICAvKipcbiAgICAgKiBDdXJyZW50IHBhdGhcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuR3JhcGhpY3NEYXRhfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5jdXJyZW50UGF0aCA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBBcnJheSBjb250YWluaW5nIHNvbWUgV2ViR0wtcmVsYXRlZCBwcm9wZXJ0aWVzIHVzZWQgYnkgdGhlIFdlYkdMIHJlbmRlcmVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7b2JqZWN0PG51bWJlciwgb2JqZWN0Pn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIC8vIFRPRE8gLSBfd2ViZ2wgc2hvdWxkIHVzZSBhIHByb3RvdHlwZSBvYmplY3QsIG5vdCBhIHJhbmRvbSB1bmRvY3VtZW50ZWQgb2JqZWN0Li4uXG4gICAgdGhpcy5fd2ViR0wgPSB7fTtcblxuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgdGhpcyBzaGFwZSBpcyBiZWluZyB1c2VkIGFzIGEgbWFzay5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICovXG4gICAgdGhpcy5pc01hc2sgPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBib3VuZHMnIHBhZGRpbmcgdXNlZCBmb3IgYm91bmRzIGNhbGN1bGF0aW9uLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMuYm91bmRzUGFkZGluZyA9IDA7XG5cbiAgICAvKipcbiAgICAgKiBBIGNhY2hlIG9mIHRoZSBsb2NhbCBib3VuZHMgdG8gcHJldmVudCByZWNhbGN1bGF0aW9uLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5SZWN0YW5nbGV9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9sb2NhbEJvdW5kcyA9IG5ldyBtYXRoLlJlY3RhbmdsZSgwLDAsMSwxKTtcblxuICAgIC8qKlxuICAgICAqIFVzZWQgdG8gZGV0ZWN0IGlmIHRoZSBncmFwaGljcyBvYmplY3QgaGFzIGNoYW5nZWQuIElmIHRoaXMgaXMgc2V0IHRvIHRydWUgdGhlbiB0aGUgZ3JhcGhpY3NcbiAgICAgKiBvYmplY3Qgd2lsbCBiZSByZWNhbGN1bGF0ZWQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5kaXJ0eSA9IHRydWU7XG5cbiAgICAvKipcbiAgICAgKiBVc2VkIHRvIGRldGVjdCBpZiB0aGUgV2ViR0wgZ3JhcGhpY3Mgb2JqZWN0IGhhcyBjaGFuZ2VkLiBJZiB0aGlzIGlzIHNldCB0byB0cnVlIHRoZW4gdGhlXG4gICAgICogZ3JhcGhpY3Mgb2JqZWN0IHdpbGwgYmUgcmVjYWxjdWxhdGVkLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuZ2xEaXJ0eSA9IGZhbHNlO1xuXG4gICAgdGhpcy5ib3VuZHNEaXJ0eSA9IHRydWU7XG5cbiAgICAvKipcbiAgICAgKiBVc2VkIHRvIGRldGVjdCBpZiB0aGUgY2FjaGVkIHNwcml0ZSBvYmplY3QgbmVlZHMgdG8gYmUgdXBkYXRlZC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLmNhY2hlZFNwcml0ZURpcnR5ID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBXaGVuIGNhY2hlQXNCaXRtYXAgaXMgc2V0IHRvIHRydWUgdGhlIGdyYXBoaWNzIG9iamVjdCB3aWxsIGJlIHJlbmRlcmVkIGFzIGlmIGl0IHdhcyBhIHNwcml0ZS5cbiAgICAgKiBUaGlzIGlzIHVzZWZ1bCBpZiB5b3VyIGdyYXBoaWNzIGVsZW1lbnQgZG9lcyBub3QgY2hhbmdlIG9mdGVuLCBhcyBpdCB3aWxsIHNwZWVkIHVwIHRoZSByZW5kZXJpbmdcbiAgICAgKiBvZiB0aGUgb2JqZWN0IGluIGV4Y2hhbmdlIGZvciB0YWtpbmcgdXAgdGV4dHVyZSBtZW1vcnkuIEl0IGlzIGFsc28gdXNlZnVsIGlmIHlvdSBuZWVkIHRoZSBncmFwaGljc1xuICAgICAqIG9iamVjdCB0byBiZSBhbnRpLWFsaWFzZWQsIGJlY2F1c2UgaXQgd2lsbCBiZSByZW5kZXJlZCB1c2luZyBjYW52YXMuIFRoaXMgaXMgbm90IHJlY29tbWVuZGVkIGlmXG4gICAgICogeW91IGFyZSBjb25zdGFudGx5IHJlZHJhd2luZyB0aGUgZ3JhcGhpY3MgZWxlbWVudC5cbiAgICAgKlxuICAgICAqIEBuYW1lIGNhY2hlQXNCaXRtYXBcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLkdyYXBoaWNzI1xuICAgICAqIEBkZWZhdWx0IGZhbHNlXG4gICAgICovXG59XG5cbi8vIGNvbnN0cnVjdG9yXG5HcmFwaGljcy5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKENvbnRhaW5lci5wcm90b3R5cGUpO1xuR3JhcGhpY3MucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gR3JhcGhpY3M7XG5tb2R1bGUuZXhwb3J0cyA9IEdyYXBoaWNzO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBuZXcgR3JhcGhpY3Mgb2JqZWN0IHdpdGggdGhlIHNhbWUgdmFsdWVzIGFzIHRoaXMgb25lLlxuICogTm90ZSB0aGF0IHRoZSBvbmx5IHRoZSBwcm9wZXJ0aWVzIG9mIHRoZSBvYmplY3QgYXJlIGNsb25lZCwgbm90IGl0cyB0cmFuc2Zvcm0gKHBvc2l0aW9uLHNjYWxlLGV0YylcbiAqXG4gKiBAcmV0dXJuIHtQSVhJLkdyYXBoaWNzfVxuICovXG5HcmFwaGljcy5wcm90b3R5cGUuY2xvbmUgPSBmdW5jdGlvbiAoKVxue1xuICAgIHZhciBjbG9uZSA9IG5ldyBHcmFwaGljcygpO1xuXG4gICAgY2xvbmUucmVuZGVyYWJsZSAgICA9IHRoaXMucmVuZGVyYWJsZTtcbiAgICBjbG9uZS5maWxsQWxwaGEgICAgID0gdGhpcy5maWxsQWxwaGE7XG4gICAgY2xvbmUubGluZVdpZHRoICAgICA9IHRoaXMubGluZVdpZHRoO1xuICAgIGNsb25lLmxpbmVDb2xvciAgICAgPSB0aGlzLmxpbmVDb2xvcjtcbiAgICBjbG9uZS50aW50ICAgICAgICAgID0gdGhpcy50aW50O1xuICAgIGNsb25lLmJsZW5kTW9kZSAgICAgPSB0aGlzLmJsZW5kTW9kZTtcbiAgICBjbG9uZS5pc01hc2sgICAgICAgID0gdGhpcy5pc01hc2s7XG4gICAgY2xvbmUuYm91bmRzUGFkZGluZyA9IHRoaXMuYm91bmRzUGFkZGluZztcbiAgICBjbG9uZS5kaXJ0eSAgICAgICAgID0gdHJ1ZTtcbiAgICBjbG9uZS5nbERpcnR5ICAgICAgID0gdHJ1ZTtcbiAgICBjbG9uZS5jYWNoZWRTcHJpdGVEaXJ0eSA9IHRoaXMuY2FjaGVkU3ByaXRlRGlydHk7XG5cbiAgICAvLyBjb3B5IGdyYXBoaWNzIGRhdGFcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuZ3JhcGhpY3NEYXRhLmxlbmd0aDsgKytpKVxuICAgIHtcbiAgICAgICAgY2xvbmUuZ3JhcGhpY3NEYXRhLnB1c2godGhpcy5ncmFwaGljc0RhdGFbaV0uY2xvbmUoKSk7XG4gICAgfVxuXG4gICAgY2xvbmUuY3VycmVudFBhdGggPSBjbG9uZS5ncmFwaGljc0RhdGFbY2xvbmUuZ3JhcGhpY3NEYXRhLmxlbmd0aCAtIDFdO1xuXG4gICAgY2xvbmUudXBkYXRlTG9jYWxCb3VuZHMoKTtcblxuICAgIHJldHVybiBjbG9uZTtcbn07XG5cbi8qKlxuICogU3BlY2lmaWVzIHRoZSBsaW5lIHN0eWxlIHVzZWQgZm9yIHN1YnNlcXVlbnQgY2FsbHMgdG8gR3JhcGhpY3MgbWV0aG9kcyBzdWNoIGFzIHRoZSBsaW5lVG8oKSBtZXRob2Qgb3IgdGhlIGRyYXdDaXJjbGUoKSBtZXRob2QuXG4gKlxuICogQHBhcmFtIGxpbmVXaWR0aCB7bnVtYmVyfSB3aWR0aCBvZiB0aGUgbGluZSB0byBkcmF3LCB3aWxsIHVwZGF0ZSB0aGUgb2JqZWN0cyBzdG9yZWQgc3R5bGVcbiAqIEBwYXJhbSBjb2xvciB7bnVtYmVyfSBjb2xvciBvZiB0aGUgbGluZSB0byBkcmF3LCB3aWxsIHVwZGF0ZSB0aGUgb2JqZWN0cyBzdG9yZWQgc3R5bGVcbiAqIEBwYXJhbSBhbHBoYSB7bnVtYmVyfSBhbHBoYSBvZiB0aGUgbGluZSB0byBkcmF3LCB3aWxsIHVwZGF0ZSB0aGUgb2JqZWN0cyBzdG9yZWQgc3R5bGVcbiAqIEByZXR1cm4ge1BJWEkuR3JhcGhpY3N9XG4gKi9cbkdyYXBoaWNzLnByb3RvdHlwZS5saW5lU3R5bGUgPSBmdW5jdGlvbiAobGluZVdpZHRoLCBjb2xvciwgYWxwaGEpXG57XG4gICAgdGhpcy5saW5lV2lkdGggPSBsaW5lV2lkdGggfHwgMDtcbiAgICB0aGlzLmxpbmVDb2xvciA9IGNvbG9yIHx8IDA7XG4gICAgdGhpcy5saW5lQWxwaGEgPSAoYWxwaGEgPT09IHVuZGVmaW5lZCkgPyAxIDogYWxwaGE7XG5cbiAgICBpZiAodGhpcy5jdXJyZW50UGF0aClcbiAgICB7XG4gICAgICAgIGlmICh0aGlzLmN1cnJlbnRQYXRoLnNoYXBlLnBvaW50cy5sZW5ndGgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIC8vIGhhbGZ3YXkgdGhyb3VnaCBhIGxpbmU/IHN0YXJ0IGEgbmV3IG9uZSFcbiAgICAgICAgICAgIHZhciBzaGFwZSA9IG5ldyBtYXRoLlBvbHlnb24odGhpcy5jdXJyZW50UGF0aC5zaGFwZS5wb2ludHMuc2xpY2UoLTIpKTtcbiAgICAgICAgICAgIHNoYXBlLmNsb3NlZCA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5kcmF3U2hhcGUoc2hhcGUpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2VcbiAgICAgICAge1xuICAgICAgICAgICAgLy8gb3RoZXJ3aXNlIGl0cyBlbXB0eSBzbyBsZXRzIGp1c3Qgc2V0IHRoZSBsaW5lIHByb3BlcnRpZXNcbiAgICAgICAgICAgIHRoaXMuY3VycmVudFBhdGgubGluZVdpZHRoID0gdGhpcy5saW5lV2lkdGg7XG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRQYXRoLmxpbmVDb2xvciA9IHRoaXMubGluZUNvbG9yO1xuICAgICAgICAgICAgdGhpcy5jdXJyZW50UGF0aC5saW5lQWxwaGEgPSB0aGlzLmxpbmVBbHBoYTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBNb3ZlcyB0aGUgY3VycmVudCBkcmF3aW5nIHBvc2l0aW9uIHRvIHgsIHkuXG4gKlxuICogQHBhcmFtIHgge251bWJlcn0gdGhlIFggY29vcmRpbmF0ZSB0byBtb3ZlIHRvXG4gKiBAcGFyYW0geSB7bnVtYmVyfSB0aGUgWSBjb29yZGluYXRlIHRvIG1vdmUgdG9cbiAqIEByZXR1cm4ge1BJWEkuR3JhcGhpY3N9XG4gICovXG5HcmFwaGljcy5wcm90b3R5cGUubW92ZVRvID0gZnVuY3Rpb24gKHgsIHkpXG57XG4gICAgdmFyIHNoYXBlID0gbmV3IG1hdGguUG9seWdvbihbeCx5XSk7XG4gICAgc2hhcGUuY2xvc2VkID0gZmFsc2U7XG4gICAgdGhpcy5kcmF3U2hhcGUoc2hhcGUpO1xuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIERyYXdzIGEgbGluZSB1c2luZyB0aGUgY3VycmVudCBsaW5lIHN0eWxlIGZyb20gdGhlIGN1cnJlbnQgZHJhd2luZyBwb3NpdGlvbiB0byAoeCwgeSk7XG4gKiBUaGUgY3VycmVudCBkcmF3aW5nIHBvc2l0aW9uIGlzIHRoZW4gc2V0IHRvICh4LCB5KS5cbiAqXG4gKiBAcGFyYW0geCB7bnVtYmVyfSB0aGUgWCBjb29yZGluYXRlIHRvIGRyYXcgdG9cbiAqIEBwYXJhbSB5IHtudW1iZXJ9IHRoZSBZIGNvb3JkaW5hdGUgdG8gZHJhdyB0b1xuICogQHJldHVybiB7UElYSS5HcmFwaGljc31cbiAqL1xuR3JhcGhpY3MucHJvdG90eXBlLmxpbmVUbyA9IGZ1bmN0aW9uICh4LCB5KVxue1xuICAgIHRoaXMuY3VycmVudFBhdGguc2hhcGUucG9pbnRzLnB1c2goeCwgeSk7XG4gICAgdGhpcy5kaXJ0eSA9IHRydWU7XG5cbiAgICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogQ2FsY3VsYXRlIHRoZSBwb2ludHMgZm9yIGEgcXVhZHJhdGljIGJlemllciBjdXJ2ZSBhbmQgdGhlbiBkcmF3cyBpdC5cbiAqIEJhc2VkIG9uOiBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy83ODUwOTcvaG93LWRvLWktaW1wbGVtZW50LWEtYmV6aWVyLWN1cnZlLWluLWNcbiAqXG4gKiBAcGFyYW0gY3BYIHtudW1iZXJ9IENvbnRyb2wgcG9pbnQgeFxuICogQHBhcmFtIGNwWSB7bnVtYmVyfSBDb250cm9sIHBvaW50IHlcbiAqIEBwYXJhbSB0b1gge251bWJlcn0gRGVzdGluYXRpb24gcG9pbnQgeFxuICogQHBhcmFtIHRvWSB7bnVtYmVyfSBEZXN0aW5hdGlvbiBwb2ludCB5XG4gKiBAcmV0dXJuIHtQSVhJLkdyYXBoaWNzfVxuICovXG5HcmFwaGljcy5wcm90b3R5cGUucXVhZHJhdGljQ3VydmVUbyA9IGZ1bmN0aW9uIChjcFgsIGNwWSwgdG9YLCB0b1kpXG57XG4gICAgaWYgKHRoaXMuY3VycmVudFBhdGgpXG4gICAge1xuICAgICAgICBpZiAodGhpcy5jdXJyZW50UGF0aC5zaGFwZS5wb2ludHMubGVuZ3RoID09PSAwKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRQYXRoLnNoYXBlLnBvaW50cyA9IFswLCAwXTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICB0aGlzLm1vdmVUbygwLDApO1xuICAgIH1cblxuICAgIHZhciB4YSxcbiAgICAgICAgeWEsXG4gICAgICAgIG4gPSAyMCxcbiAgICAgICAgcG9pbnRzID0gdGhpcy5jdXJyZW50UGF0aC5zaGFwZS5wb2ludHM7XG5cbiAgICBpZiAocG9pbnRzLmxlbmd0aCA9PT0gMClcbiAgICB7XG4gICAgICAgIHRoaXMubW92ZVRvKDAsIDApO1xuICAgIH1cblxuICAgIHZhciBmcm9tWCA9IHBvaW50c1twb2ludHMubGVuZ3RoLTJdO1xuICAgIHZhciBmcm9tWSA9IHBvaW50c1twb2ludHMubGVuZ3RoLTFdO1xuXG4gICAgdmFyIGogPSAwO1xuICAgIGZvciAodmFyIGkgPSAxOyBpIDw9IG47ICsraSlcbiAgICB7XG4gICAgICAgIGogPSBpIC8gbjtcblxuICAgICAgICB4YSA9IGZyb21YICsgKCAoY3BYIC0gZnJvbVgpICogaiApO1xuICAgICAgICB5YSA9IGZyb21ZICsgKCAoY3BZIC0gZnJvbVkpICogaiApO1xuXG4gICAgICAgIHBvaW50cy5wdXNoKCB4YSArICggKChjcFggKyAoICh0b1ggLSBjcFgpICogaiApKSAtIHhhKSAqIGogKSxcbiAgICAgICAgICAgICAgICAgICAgIHlhICsgKCAoKGNwWSArICggKHRvWSAtIGNwWSkgKiBqICkpIC0geWEpICogaiApICk7XG4gICAgfVxuXG4gICAgdGhpcy5kaXJ0eSA9IHRoaXMuYm91bmRzRGlydHkgPSB0cnVlO1xuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIENhbGN1bGF0ZSB0aGUgcG9pbnRzIGZvciBhIGJlemllciBjdXJ2ZSBhbmQgdGhlbiBkcmF3cyBpdC5cbiAqXG4gKiBAcGFyYW0gY3BYIHtudW1iZXJ9IENvbnRyb2wgcG9pbnQgeFxuICogQHBhcmFtIGNwWSB7bnVtYmVyfSBDb250cm9sIHBvaW50IHlcbiAqIEBwYXJhbSBjcFgyIHtudW1iZXJ9IFNlY29uZCBDb250cm9sIHBvaW50IHhcbiAqIEBwYXJhbSBjcFkyIHtudW1iZXJ9IFNlY29uZCBDb250cm9sIHBvaW50IHlcbiAqIEBwYXJhbSB0b1gge251bWJlcn0gRGVzdGluYXRpb24gcG9pbnQgeFxuICogQHBhcmFtIHRvWSB7bnVtYmVyfSBEZXN0aW5hdGlvbiBwb2ludCB5XG4gKiBAcmV0dXJuIHtQSVhJLkdyYXBoaWNzfVxuICovXG5HcmFwaGljcy5wcm90b3R5cGUuYmV6aWVyQ3VydmVUbyA9IGZ1bmN0aW9uIChjcFgsIGNwWSwgY3BYMiwgY3BZMiwgdG9YLCB0b1kpXG57XG4gICAgaWYgKHRoaXMuY3VycmVudFBhdGgpXG4gICAge1xuICAgICAgICBpZiAodGhpcy5jdXJyZW50UGF0aC5zaGFwZS5wb2ludHMubGVuZ3RoID09PSAwKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRQYXRoLnNoYXBlLnBvaW50cyA9IFswLCAwXTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICB0aGlzLm1vdmVUbygwLDApO1xuICAgIH1cblxuICAgIHZhciBuID0gMjAsXG4gICAgICAgIGR0LFxuICAgICAgICBkdDIsXG4gICAgICAgIGR0MyxcbiAgICAgICAgdDIsXG4gICAgICAgIHQzLFxuICAgICAgICBwb2ludHMgPSB0aGlzLmN1cnJlbnRQYXRoLnNoYXBlLnBvaW50cztcblxuICAgIHZhciBmcm9tWCA9IHBvaW50c1twb2ludHMubGVuZ3RoLTJdO1xuICAgIHZhciBmcm9tWSA9IHBvaW50c1twb2ludHMubGVuZ3RoLTFdO1xuXG4gICAgdmFyIGogPSAwO1xuXG4gICAgZm9yICh2YXIgaSA9IDE7IGkgPD0gbjsgKytpKVxuICAgIHtcbiAgICAgICAgaiA9IGkgLyBuO1xuXG4gICAgICAgIGR0ID0gKDEgLSBqKTtcbiAgICAgICAgZHQyID0gZHQgKiBkdDtcbiAgICAgICAgZHQzID0gZHQyICogZHQ7XG5cbiAgICAgICAgdDIgPSBqICogajtcbiAgICAgICAgdDMgPSB0MiAqIGo7XG5cbiAgICAgICAgcG9pbnRzLnB1c2goIGR0MyAqIGZyb21YICsgMyAqIGR0MiAqIGogKiBjcFggKyAzICogZHQgKiB0MiAqIGNwWDIgKyB0MyAqIHRvWCxcbiAgICAgICAgICAgICAgICAgICAgIGR0MyAqIGZyb21ZICsgMyAqIGR0MiAqIGogKiBjcFkgKyAzICogZHQgKiB0MiAqIGNwWTIgKyB0MyAqIHRvWSk7XG4gICAgfVxuXG4gICAgdGhpcy5kaXJ0eSA9IHRoaXMuYm91bmRzRGlydHkgPSB0cnVlO1xuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIFRoZSBhcmNUbygpIG1ldGhvZCBjcmVhdGVzIGFuIGFyYy9jdXJ2ZSBiZXR3ZWVuIHR3byB0YW5nZW50cyBvbiB0aGUgY2FudmFzLlxuICpcbiAqIFwiYm9ycm93ZWRcIiBmcm9tIGh0dHBzOi8vY29kZS5nb29nbGUuY29tL3AvZnhjYW52YXMvIC0gdGhhbmtzIGdvb2dsZSFcbiAqXG4gKiBAcGFyYW0geDEge251bWJlcn0gVGhlIHgtY29vcmRpbmF0ZSBvZiB0aGUgYmVnaW5uaW5nIG9mIHRoZSBhcmNcbiAqIEBwYXJhbSB5MSB7bnVtYmVyfSBUaGUgeS1jb29yZGluYXRlIG9mIHRoZSBiZWdpbm5pbmcgb2YgdGhlIGFyY1xuICogQHBhcmFtIHgyIHtudW1iZXJ9IFRoZSB4LWNvb3JkaW5hdGUgb2YgdGhlIGVuZCBvZiB0aGUgYXJjXG4gKiBAcGFyYW0geTIge251bWJlcn0gVGhlIHktY29vcmRpbmF0ZSBvZiB0aGUgZW5kIG9mIHRoZSBhcmNcbiAqIEBwYXJhbSByYWRpdXMge251bWJlcn0gVGhlIHJhZGl1cyBvZiB0aGUgYXJjXG4gKiBAcmV0dXJuIHtQSVhJLkdyYXBoaWNzfVxuICovXG5HcmFwaGljcy5wcm90b3R5cGUuYXJjVG8gPSBmdW5jdGlvbiAoeDEsIHkxLCB4MiwgeTIsIHJhZGl1cylcbntcbiAgICBpZiAodGhpcy5jdXJyZW50UGF0aClcbiAgICB7XG4gICAgICAgIGlmICh0aGlzLmN1cnJlbnRQYXRoLnNoYXBlLnBvaW50cy5sZW5ndGggPT09IDApXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuY3VycmVudFBhdGguc2hhcGUucG9pbnRzLnB1c2goeDEsIHkxKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICB0aGlzLm1vdmVUbyh4MSwgeTEpO1xuICAgIH1cblxuICAgIHZhciBwb2ludHMgPSB0aGlzLmN1cnJlbnRQYXRoLnNoYXBlLnBvaW50cyxcbiAgICAgICAgZnJvbVggPSBwb2ludHNbcG9pbnRzLmxlbmd0aC0yXSxcbiAgICAgICAgZnJvbVkgPSBwb2ludHNbcG9pbnRzLmxlbmd0aC0xXSxcbiAgICAgICAgYTEgPSBmcm9tWSAtIHkxLFxuICAgICAgICBiMSA9IGZyb21YIC0geDEsXG4gICAgICAgIGEyID0geTIgICAtIHkxLFxuICAgICAgICBiMiA9IHgyICAgLSB4MSxcbiAgICAgICAgbW0gPSBNYXRoLmFicyhhMSAqIGIyIC0gYjEgKiBhMik7XG5cbiAgICBpZiAobW0gPCAxLjBlLTggfHwgcmFkaXVzID09PSAwKVxuICAgIHtcbiAgICAgICAgaWYgKHBvaW50c1twb2ludHMubGVuZ3RoLTJdICE9PSB4MSB8fCBwb2ludHNbcG9pbnRzLmxlbmd0aC0xXSAhPT0geTEpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHBvaW50cy5wdXNoKHgxLCB5MSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgdmFyIGRkID0gYTEgKiBhMSArIGIxICogYjEsXG4gICAgICAgICAgICBjYyA9IGEyICogYTIgKyBiMiAqIGIyLFxuICAgICAgICAgICAgdHQgPSBhMSAqIGEyICsgYjEgKiBiMixcbiAgICAgICAgICAgIGsxID0gcmFkaXVzICogTWF0aC5zcXJ0KGRkKSAvIG1tLFxuICAgICAgICAgICAgazIgPSByYWRpdXMgKiBNYXRoLnNxcnQoY2MpIC8gbW0sXG4gICAgICAgICAgICBqMSA9IGsxICogdHQgLyBkZCxcbiAgICAgICAgICAgIGoyID0gazIgKiB0dCAvIGNjLFxuICAgICAgICAgICAgY3ggPSBrMSAqIGIyICsgazIgKiBiMSxcbiAgICAgICAgICAgIGN5ID0gazEgKiBhMiArIGsyICogYTEsXG4gICAgICAgICAgICBweCA9IGIxICogKGsyICsgajEpLFxuICAgICAgICAgICAgcHkgPSBhMSAqIChrMiArIGoxKSxcbiAgICAgICAgICAgIHF4ID0gYjIgKiAoazEgKyBqMiksXG4gICAgICAgICAgICBxeSA9IGEyICogKGsxICsgajIpLFxuICAgICAgICAgICAgc3RhcnRBbmdsZSA9IE1hdGguYXRhbjIocHkgLSBjeSwgcHggLSBjeCksXG4gICAgICAgICAgICBlbmRBbmdsZSAgID0gTWF0aC5hdGFuMihxeSAtIGN5LCBxeCAtIGN4KTtcblxuICAgICAgICB0aGlzLmFyYyhjeCArIHgxLCBjeSArIHkxLCByYWRpdXMsIHN0YXJ0QW5nbGUsIGVuZEFuZ2xlLCBiMSAqIGEyID4gYjIgKiBhMSk7XG4gICAgfVxuXG4gICAgdGhpcy5kaXJ0eSA9IHRoaXMuYm91bmRzRGlydHkgPSB0cnVlO1xuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIFRoZSBhcmMgbWV0aG9kIGNyZWF0ZXMgYW4gYXJjL2N1cnZlICh1c2VkIHRvIGNyZWF0ZSBjaXJjbGVzLCBvciBwYXJ0cyBvZiBjaXJjbGVzKS5cbiAqXG4gKiBAcGFyYW0gY3gge251bWJlcn0gVGhlIHgtY29vcmRpbmF0ZSBvZiB0aGUgY2VudGVyIG9mIHRoZSBjaXJjbGVcbiAqIEBwYXJhbSBjeSB7bnVtYmVyfSBUaGUgeS1jb29yZGluYXRlIG9mIHRoZSBjZW50ZXIgb2YgdGhlIGNpcmNsZVxuICogQHBhcmFtIHJhZGl1cyB7bnVtYmVyfSBUaGUgcmFkaXVzIG9mIHRoZSBjaXJjbGVcbiAqIEBwYXJhbSBzdGFydEFuZ2xlIHtudW1iZXJ9IFRoZSBzdGFydGluZyBhbmdsZSwgaW4gcmFkaWFucyAoMCBpcyBhdCB0aGUgMyBvJ2Nsb2NrIHBvc2l0aW9uIG9mIHRoZSBhcmMncyBjaXJjbGUpXG4gKiBAcGFyYW0gZW5kQW5nbGUge251bWJlcn0gVGhlIGVuZGluZyBhbmdsZSwgaW4gcmFkaWFuc1xuICogQHBhcmFtIGFudGljbG9ja3dpc2Uge2Jvb2xlYW59IE9wdGlvbmFsLiBTcGVjaWZpZXMgd2hldGhlciB0aGUgZHJhd2luZyBzaG91bGQgYmUgY291bnRlcmNsb2Nrd2lzZSBvciBjbG9ja3dpc2UuIEZhbHNlIGlzIGRlZmF1bHQsIGFuZCBpbmRpY2F0ZXMgY2xvY2t3aXNlLCB3aGlsZSB0cnVlIGluZGljYXRlcyBjb3VudGVyLWNsb2Nrd2lzZS5cbiAqIEByZXR1cm4ge1BJWEkuR3JhcGhpY3N9XG4gKi9cbkdyYXBoaWNzLnByb3RvdHlwZS5hcmMgPSBmdW5jdGlvbihjeCwgY3ksIHJhZGl1cywgc3RhcnRBbmdsZSwgZW5kQW5nbGUsIGFudGljbG9ja3dpc2UpXG57XG4gICAgYW50aWNsb2Nrd2lzZSA9IGFudGljbG9ja3dpc2UgfHwgZmFsc2U7XG5cbiAgICBpZiAoc3RhcnRBbmdsZSA9PT0gZW5kQW5nbGUpXG4gICAge1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBpZiggIWFudGljbG9ja3dpc2UgJiYgZW5kQW5nbGUgPD0gc3RhcnRBbmdsZSApXG4gICAge1xuICAgICAgICBlbmRBbmdsZSArPSBNYXRoLlBJICogMjtcbiAgICB9XG4gICAgZWxzZSBpZiggYW50aWNsb2Nrd2lzZSAmJiBzdGFydEFuZ2xlIDw9IGVuZEFuZ2xlIClcbiAgICB7XG4gICAgICAgIHN0YXJ0QW5nbGUgKz0gTWF0aC5QSSAqIDI7XG4gICAgfVxuXG4gICAgdmFyIHN3ZWVwID0gYW50aWNsb2Nrd2lzZSA/IChzdGFydEFuZ2xlIC0gZW5kQW5nbGUpICogLTEgOiAoZW5kQW5nbGUgLSBzdGFydEFuZ2xlKTtcbiAgICB2YXIgc2VncyA9ICBNYXRoLmNlaWwoTWF0aC5hYnMoc3dlZXApIC8gKE1hdGguUEkgKiAyKSkgKiA0MDtcblxuICAgIGlmKHN3ZWVwID09PSAwKVxuICAgIHtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgdmFyIHN0YXJ0WCA9IGN4ICsgTWF0aC5jb3Moc3RhcnRBbmdsZSkgKiByYWRpdXM7XG4gICAgdmFyIHN0YXJ0WSA9IGN5ICsgTWF0aC5zaW4oc3RhcnRBbmdsZSkgKiByYWRpdXM7XG5cbiAgICBpZiAodGhpcy5jdXJyZW50UGF0aClcbiAgICB7XG4gICAgICAgIHRoaXMuY3VycmVudFBhdGguc2hhcGUucG9pbnRzLnB1c2goc3RhcnRYLCBzdGFydFkpO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICB0aGlzLm1vdmVUbyhzdGFydFgsIHN0YXJ0WSk7XG4gICAgfVxuXG4gICAgdmFyIHBvaW50cyA9IHRoaXMuY3VycmVudFBhdGguc2hhcGUucG9pbnRzO1xuXG4gICAgdmFyIHRoZXRhID0gc3dlZXAvKHNlZ3MqMik7XG4gICAgdmFyIHRoZXRhMiA9IHRoZXRhKjI7XG5cbiAgICB2YXIgY1RoZXRhID0gTWF0aC5jb3ModGhldGEpO1xuICAgIHZhciBzVGhldGEgPSBNYXRoLnNpbih0aGV0YSk7XG5cbiAgICB2YXIgc2VnTWludXMgPSBzZWdzIC0gMTtcblxuICAgIHZhciByZW1haW5kZXIgPSAoIHNlZ01pbnVzICUgMSApIC8gc2VnTWludXM7XG5cbiAgICBmb3IodmFyIGk9MDsgaTw9c2VnTWludXM7IGkrKylcbiAgICB7XG4gICAgICAgIHZhciByZWFsID0gIGkgKyByZW1haW5kZXIgKiBpO1xuXG5cbiAgICAgICAgdmFyIGFuZ2xlID0gKCh0aGV0YSkgKyBzdGFydEFuZ2xlICsgKHRoZXRhMiAqIHJlYWwpKTtcblxuICAgICAgICB2YXIgYyA9IE1hdGguY29zKGFuZ2xlKTtcbiAgICAgICAgdmFyIHMgPSAtTWF0aC5zaW4oYW5nbGUpO1xuXG4gICAgICAgIHBvaW50cy5wdXNoKCggKGNUaGV0YSAqICBjKSArIChzVGhldGEgKiBzKSApICogcmFkaXVzICsgY3gsXG4gICAgICAgICAgICAgICAgICAgICggKGNUaGV0YSAqIC1zKSArIChzVGhldGEgKiBjKSApICogcmFkaXVzICsgY3kpO1xuICAgIH1cblxuICAgIHRoaXMuZGlydHkgPSB0aGlzLmJvdW5kc0RpcnR5ID0gdHJ1ZTtcblxuICAgIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBTcGVjaWZpZXMgYSBzaW1wbGUgb25lLWNvbG9yIGZpbGwgdGhhdCBzdWJzZXF1ZW50IGNhbGxzIHRvIG90aGVyIEdyYXBoaWNzIG1ldGhvZHNcbiAqIChzdWNoIGFzIGxpbmVUbygpIG9yIGRyYXdDaXJjbGUoKSkgdXNlIHdoZW4gZHJhd2luZy5cbiAqXG4gKiBAcGFyYW0gY29sb3Ige251bWJlcn0gdGhlIGNvbG9yIG9mIHRoZSBmaWxsXG4gKiBAcGFyYW0gYWxwaGEge251bWJlcn0gdGhlIGFscGhhIG9mIHRoZSBmaWxsXG4gKiBAcmV0dXJuIHtQSVhJLkdyYXBoaWNzfVxuICovXG5HcmFwaGljcy5wcm90b3R5cGUuYmVnaW5GaWxsID0gZnVuY3Rpb24gKGNvbG9yLCBhbHBoYSlcbntcbiAgICB0aGlzLmZpbGxpbmcgPSB0cnVlO1xuICAgIHRoaXMuZmlsbENvbG9yID0gY29sb3IgfHwgMDtcbiAgICB0aGlzLmZpbGxBbHBoYSA9IChhbHBoYSA9PT0gdW5kZWZpbmVkKSA/IDEgOiBhbHBoYTtcblxuICAgIGlmICh0aGlzLmN1cnJlbnRQYXRoKVxuICAgIHtcbiAgICAgICAgaWYgKHRoaXMuY3VycmVudFBhdGguc2hhcGUucG9pbnRzLmxlbmd0aCA8PSAyKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRQYXRoLmZpbGwgPSB0aGlzLmZpbGxpbmc7XG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRQYXRoLmZpbGxDb2xvciA9IHRoaXMuZmlsbENvbG9yO1xuICAgICAgICAgICAgdGhpcy5jdXJyZW50UGF0aC5maWxsQWxwaGEgPSB0aGlzLmZpbGxBbHBoYTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogQXBwbGllcyBhIGZpbGwgdG8gdGhlIGxpbmVzIGFuZCBzaGFwZXMgdGhhdCB3ZXJlIGFkZGVkIHNpbmNlIHRoZSBsYXN0IGNhbGwgdG8gdGhlIGJlZ2luRmlsbCgpIG1ldGhvZC5cbiAqXG4gKiBAcmV0dXJuIHtHcmFwaGljc31cbiAqL1xuR3JhcGhpY3MucHJvdG90eXBlLmVuZEZpbGwgPSBmdW5jdGlvbiAoKVxue1xuICAgIHRoaXMuZmlsbGluZyA9IGZhbHNlO1xuICAgIHRoaXMuZmlsbENvbG9yID0gbnVsbDtcbiAgICB0aGlzLmZpbGxBbHBoYSA9IDE7XG5cbiAgICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICpcbiAqIEBwYXJhbSB4IHtudW1iZXJ9IFRoZSBYIGNvb3JkIG9mIHRoZSB0b3AtbGVmdCBvZiB0aGUgcmVjdGFuZ2xlXG4gKiBAcGFyYW0geSB7bnVtYmVyfSBUaGUgWSBjb29yZCBvZiB0aGUgdG9wLWxlZnQgb2YgdGhlIHJlY3RhbmdsZVxuICogQHBhcmFtIHdpZHRoIHtudW1iZXJ9IFRoZSB3aWR0aCBvZiB0aGUgcmVjdGFuZ2xlXG4gKiBAcGFyYW0gaGVpZ2h0IHtudW1iZXJ9IFRoZSBoZWlnaHQgb2YgdGhlIHJlY3RhbmdsZVxuICogQHJldHVybiB7UElYSS5HcmFwaGljc31cbiAqL1xuR3JhcGhpY3MucHJvdG90eXBlLmRyYXdSZWN0ID0gZnVuY3Rpb24gKCB4LCB5LCB3aWR0aCwgaGVpZ2h0IClcbntcbiAgICB0aGlzLmRyYXdTaGFwZShuZXcgbWF0aC5SZWN0YW5nbGUoeCx5LCB3aWR0aCwgaGVpZ2h0KSk7XG5cbiAgICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICpcbiAqIEBwYXJhbSB4IHtudW1iZXJ9IFRoZSBYIGNvb3JkIG9mIHRoZSB0b3AtbGVmdCBvZiB0aGUgcmVjdGFuZ2xlXG4gKiBAcGFyYW0geSB7bnVtYmVyfSBUaGUgWSBjb29yZCBvZiB0aGUgdG9wLWxlZnQgb2YgdGhlIHJlY3RhbmdsZVxuICogQHBhcmFtIHdpZHRoIHtudW1iZXJ9IFRoZSB3aWR0aCBvZiB0aGUgcmVjdGFuZ2xlXG4gKiBAcGFyYW0gaGVpZ2h0IHtudW1iZXJ9IFRoZSBoZWlnaHQgb2YgdGhlIHJlY3RhbmdsZVxuICogQHBhcmFtIHJhZGl1cyB7bnVtYmVyfSBSYWRpdXMgb2YgdGhlIHJlY3RhbmdsZSBjb3JuZXJzXG4gKiBAcmV0dXJuIHtQSVhJLkdyYXBoaWNzfVxuICovXG5HcmFwaGljcy5wcm90b3R5cGUuZHJhd1JvdW5kZWRSZWN0ID0gZnVuY3Rpb24gKCB4LCB5LCB3aWR0aCwgaGVpZ2h0LCByYWRpdXMgKVxue1xuICAgIHRoaXMuZHJhd1NoYXBlKG5ldyBtYXRoLlJvdW5kZWRSZWN0YW5nbGUoeCwgeSwgd2lkdGgsIGhlaWdodCwgcmFkaXVzKSk7XG5cbiAgICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogRHJhd3MgYSBjaXJjbGUuXG4gKlxuICogQHBhcmFtIHgge251bWJlcn0gVGhlIFggY29vcmRpbmF0ZSBvZiB0aGUgY2VudGVyIG9mIHRoZSBjaXJjbGVcbiAqIEBwYXJhbSB5IHtudW1iZXJ9IFRoZSBZIGNvb3JkaW5hdGUgb2YgdGhlIGNlbnRlciBvZiB0aGUgY2lyY2xlXG4gKiBAcGFyYW0gcmFkaXVzIHtudW1iZXJ9IFRoZSByYWRpdXMgb2YgdGhlIGNpcmNsZVxuICogQHJldHVybiB7UElYSS5HcmFwaGljc31cbiAqL1xuR3JhcGhpY3MucHJvdG90eXBlLmRyYXdDaXJjbGUgPSBmdW5jdGlvbiAoeCwgeSwgcmFkaXVzKVxue1xuICAgIHRoaXMuZHJhd1NoYXBlKG5ldyBtYXRoLkNpcmNsZSh4LHksIHJhZGl1cykpO1xuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIERyYXdzIGFuIGVsbGlwc2UuXG4gKlxuICogQHBhcmFtIHgge251bWJlcn0gVGhlIFggY29vcmRpbmF0ZSBvZiB0aGUgY2VudGVyIG9mIHRoZSBlbGxpcHNlXG4gKiBAcGFyYW0geSB7bnVtYmVyfSBUaGUgWSBjb29yZGluYXRlIG9mIHRoZSBjZW50ZXIgb2YgdGhlIGVsbGlwc2VcbiAqIEBwYXJhbSB3aWR0aCB7bnVtYmVyfSBUaGUgaGFsZiB3aWR0aCBvZiB0aGUgZWxsaXBzZVxuICogQHBhcmFtIGhlaWdodCB7bnVtYmVyfSBUaGUgaGFsZiBoZWlnaHQgb2YgdGhlIGVsbGlwc2VcbiAqIEByZXR1cm4ge1BJWEkuR3JhcGhpY3N9XG4gKi9cbkdyYXBoaWNzLnByb3RvdHlwZS5kcmF3RWxsaXBzZSA9IGZ1bmN0aW9uICh4LCB5LCB3aWR0aCwgaGVpZ2h0KVxue1xuICAgIHRoaXMuZHJhd1NoYXBlKG5ldyBtYXRoLkVsbGlwc2UoeCwgeSwgd2lkdGgsIGhlaWdodCkpO1xuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIERyYXdzIGEgcG9seWdvbiB1c2luZyB0aGUgZ2l2ZW4gcGF0aC5cbiAqXG4gKiBAcGFyYW0gcGF0aCB7bnVtYmVyW118UElYSS5Qb2ludFtdfSBUaGUgcGF0aCBkYXRhIHVzZWQgdG8gY29uc3RydWN0IHRoZSBwb2x5Z29uLlxuICogQHJldHVybiB7UElYSS5HcmFwaGljc31cbiAqL1xuR3JhcGhpY3MucHJvdG90eXBlLmRyYXdQb2x5Z29uID0gZnVuY3Rpb24gKHBhdGgpXG57XG4gICAgLy8gcHJldmVudHMgYW4gYXJndW1lbnQgYXNzaWdubWVudCBkZW9wdFxuICAgIC8vIHNlZSBzZWN0aW9uIDMuMTogaHR0cHM6Ly9naXRodWIuY29tL3BldGthYW50b25vdi9ibHVlYmlyZC93aWtpL09wdGltaXphdGlvbi1raWxsZXJzIzMtbWFuYWdpbmctYXJndW1lbnRzXG4gICAgdmFyIHBvaW50cyA9IHBhdGg7XG5cbiAgICB2YXIgY2xvc2VkID0gdHJ1ZTtcblxuICAgIGlmIChwb2ludHMgaW5zdGFuY2VvZiBtYXRoLlBvbHlnb24pXG4gICAge1xuICAgICAgICBjbG9zZWQgPSBwb2ludHMuY2xvc2VkO1xuICAgICAgICBwb2ludHMgPSBwb2ludHMucG9pbnRzO1xuICAgIH1cblxuICAgIGlmICghQXJyYXkuaXNBcnJheShwb2ludHMpKVxuICAgIHtcbiAgICAgICAgLy8gcHJldmVudHMgYW4gYXJndW1lbnQgbGVhayBkZW9wdFxuICAgICAgICAvLyBzZWUgc2VjdGlvbiAzLjI6IGh0dHBzOi8vZ2l0aHViLmNvbS9wZXRrYWFudG9ub3YvYmx1ZWJpcmQvd2lraS9PcHRpbWl6YXRpb24ta2lsbGVycyMzLW1hbmFnaW5nLWFyZ3VtZW50c1xuICAgICAgICBwb2ludHMgPSBuZXcgQXJyYXkoYXJndW1lbnRzLmxlbmd0aCk7XG5cbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwb2ludHMubGVuZ3RoOyArK2kpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHBvaW50c1tpXSA9IGFyZ3VtZW50c1tpXTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHZhciBzaGFwZSA9IG5ldyBtYXRoLlBvbHlnb24ocG9pbnRzKTtcbiAgICBzaGFwZS5jbG9zZWQgPSBjbG9zZWQ7XG5cbiAgICB0aGlzLmRyYXdTaGFwZShzaGFwZSk7XG5cbiAgICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogQ2xlYXJzIHRoZSBncmFwaGljcyB0aGF0IHdlcmUgZHJhd24gdG8gdGhpcyBHcmFwaGljcyBvYmplY3QsIGFuZCByZXNldHMgZmlsbCBhbmQgbGluZSBzdHlsZSBzZXR0aW5ncy5cbiAqXG4gKiBAcmV0dXJuIHtQSVhJLkdyYXBoaWNzfVxuICovXG5HcmFwaGljcy5wcm90b3R5cGUuY2xlYXIgPSBmdW5jdGlvbiAoKVxue1xuICAgIHRoaXMubGluZVdpZHRoID0gMDtcbiAgICB0aGlzLmZpbGxpbmcgPSBmYWxzZTtcblxuICAgIHRoaXMuZGlydHkgPSB0cnVlO1xuICAgIHRoaXMuY2xlYXJEaXJ0eSA9IHRydWU7XG4gICAgdGhpcy5ncmFwaGljc0RhdGEgPSBbXTtcblxuICAgIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBVc2VmdWwgZnVuY3Rpb24gdGhhdCByZXR1cm5zIGEgdGV4dHVyZSBvZiB0aGUgZ3JhcGhpY3Mgb2JqZWN0IHRoYXQgY2FuIHRoZW4gYmUgdXNlZCB0byBjcmVhdGUgc3ByaXRlc1xuICogVGhpcyBjYW4gYmUgcXVpdGUgdXNlZnVsIGlmIHlvdXIgZ2VvbWV0cnkgaXMgY29tcGxpY2F0ZWQgYW5kIG5lZWRzIHRvIGJlIHJldXNlZCBtdWx0aXBsZSB0aW1lcy5cbiAqXG4gKiBAcGFyYW0gcmVzb2x1dGlvbiB7bnVtYmVyfSBUaGUgcmVzb2x1dGlvbiBvZiB0aGUgdGV4dHVyZSBiZWluZyBnZW5lcmF0ZWRcbiAqIEBwYXJhbSBzY2FsZU1vZGUge251bWJlcn0gU2hvdWxkIGJlIG9uZSBvZiB0aGUgc2NhbGVNb2RlIGNvbnN0c1xuICogQHJldHVybiB7UElYSS5UZXh0dXJlfSBhIHRleHR1cmUgb2YgdGhlIGdyYXBoaWNzIG9iamVjdFxuICovXG5HcmFwaGljcy5wcm90b3R5cGUuZ2VuZXJhdGVUZXh0dXJlID0gZnVuY3Rpb24gKHJlbmRlcmVyLCByZXNvbHV0aW9uLCBzY2FsZU1vZGUpXG57XG5cbiAgICByZXNvbHV0aW9uID0gcmVzb2x1dGlvbiB8fCAxO1xuXG4gICAgdmFyIGJvdW5kcyA9IHRoaXMuZ2V0TG9jYWxCb3VuZHMoKTtcblxuICAgIHZhciBjYW52YXNCdWZmZXIgPSBuZXcgQ2FudmFzQnVmZmVyKGJvdW5kcy53aWR0aCAqIHJlc29sdXRpb24sIGJvdW5kcy5oZWlnaHQgKiByZXNvbHV0aW9uKTtcblxuICAgIHZhciB0ZXh0dXJlID0gVGV4dHVyZS5mcm9tQ2FudmFzKGNhbnZhc0J1ZmZlci5jYW52YXMsIHNjYWxlTW9kZSk7XG4gICAgdGV4dHVyZS5iYXNlVGV4dHVyZS5yZXNvbHV0aW9uID0gcmVzb2x1dGlvbjtcblxuICAgIGNhbnZhc0J1ZmZlci5jb250ZXh0LnNjYWxlKHJlc29sdXRpb24sIHJlc29sdXRpb24pO1xuXG4gICAgY2FudmFzQnVmZmVyLmNvbnRleHQudHJhbnNsYXRlKC1ib3VuZHMueCwtYm91bmRzLnkpO1xuXG4gICAgQ2FudmFzR3JhcGhpY3MucmVuZGVyR3JhcGhpY3ModGhpcywgY2FudmFzQnVmZmVyLmNvbnRleHQpO1xuXG4gICAgcmV0dXJuIHRleHR1cmU7XG59O1xuXG4vKipcbiAqIFJlbmRlcnMgdGhlIG9iamVjdCB1c2luZyB0aGUgV2ViR0wgcmVuZGVyZXJcbiAqXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcn1cbiAqIEBwcml2YXRlXG4gKi9cbkdyYXBoaWNzLnByb3RvdHlwZS5fcmVuZGVyV2ViR0wgPSBmdW5jdGlvbiAocmVuZGVyZXIpXG57XG4gICAgLy8gaWYgdGhlIHNwcml0ZSBpcyBub3QgdmlzaWJsZSBvciB0aGUgYWxwaGEgaXMgMCB0aGVuIG5vIG5lZWQgdG8gcmVuZGVyIHRoaXMgZWxlbWVudFxuXG4gICAgaWYgKHRoaXMuZ2xEaXJ0eSlcbiAgICB7XG4gICAgICAgIHRoaXMuZGlydHkgPSB0cnVlO1xuICAgICAgICB0aGlzLmdsRGlydHkgPSBmYWxzZTtcbiAgICB9XG5cbiAgICByZW5kZXJlci5zZXRPYmplY3RSZW5kZXJlcihyZW5kZXJlci5wbHVnaW5zLmdyYXBoaWNzKTtcbiAgICByZW5kZXJlci5wbHVnaW5zLmdyYXBoaWNzLnJlbmRlcih0aGlzKTtcblxufTtcblxuLyoqXG4gKiBSZW5kZXJzIHRoZSBvYmplY3QgdXNpbmcgdGhlIENhbnZhcyByZW5kZXJlclxuICpcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5DYW52YXNSZW5kZXJlcn1cbiAqIEBwcml2YXRlXG4gKi9cbkdyYXBoaWNzLnByb3RvdHlwZS5fcmVuZGVyQ2FudmFzID0gZnVuY3Rpb24gKHJlbmRlcmVyKVxue1xuICAgIGlmICh0aGlzLmlzTWFzayA9PT0gdHJ1ZSlcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBpZiB0aGUgdGludCBoYXMgY2hhbmdlZCwgc2V0IHRoZSBncmFwaGljcyBvYmplY3QgdG8gZGlydHkuXG4gICAgaWYgKHRoaXMuX3ByZXZUaW50ICE9PSB0aGlzLnRpbnQpIHtcbiAgICAgICAgdGhpcy5kaXJ0eSA9IHRydWU7XG4gICAgfVxuXG4gICAgLy8gdGhpcyBjb2RlIG1heSBzdGlsbCBiZSBuZWVkZWQgc28gbGVhdmluZyBmb3Igbm93Li5cbiAgICAvL1xuICAgIC8qXG4gICAgaWYgKHRoaXMuX2NhY2hlQXNCaXRtYXApXG4gICAge1xuICAgICAgICBpZiAodGhpcy5kaXJ0eSB8fCB0aGlzLmNhY2hlZFNwcml0ZURpcnR5KVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLl9nZW5lcmF0ZUNhY2hlZFNwcml0ZSgpO1xuXG4gICAgICAgICAgICAvLyB3ZSB3aWxsIGFsc28gbmVlZCB0byB1cGRhdGUgdGhlIHRleHR1cmVcbiAgICAgICAgICAgIHRoaXMudXBkYXRlQ2FjaGVkU3ByaXRlVGV4dHVyZSgpO1xuXG4gICAgICAgICAgICB0aGlzLmNhY2hlZFNwcml0ZURpcnR5ID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLmRpcnR5ID0gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9jYWNoZWRTcHJpdGUuYWxwaGEgPSB0aGlzLmFscGhhO1xuXG4gICAgICAgIFNwcml0ZS5wcm90b3R5cGUuX3JlbmRlckNhbnZhcy5jYWxsKHRoaXMuX2NhY2hlZFNwcml0ZSwgcmVuZGVyZXIpO1xuXG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgKi9cbiAgICB2YXIgY29udGV4dCA9IHJlbmRlcmVyLmNvbnRleHQ7XG4gICAgdmFyIHRyYW5zZm9ybSA9IHRoaXMud29ybGRUcmFuc2Zvcm07XG5cbiAgICB2YXIgY29tcG9zaXRlT3BlcmF0aW9uID0gcmVuZGVyZXIuYmxlbmRNb2Rlc1t0aGlzLmJsZW5kTW9kZV07XG4gICAgaWYgKGNvbXBvc2l0ZU9wZXJhdGlvbiAhPT0gY29udGV4dC5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb24pXG4gICAge1xuICAgICAgICBjb250ZXh0Lmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbiA9IGNvbXBvc2l0ZU9wZXJhdGlvbjtcbiAgICB9XG5cbiAgICB2YXIgcmVzb2x1dGlvbiA9IHJlbmRlcmVyLnJlc29sdXRpb247XG4gICAgY29udGV4dC5zZXRUcmFuc2Zvcm0oXG4gICAgICAgIHRyYW5zZm9ybS5hICogcmVzb2x1dGlvbixcbiAgICAgICAgdHJhbnNmb3JtLmIgKiByZXNvbHV0aW9uLFxuICAgICAgICB0cmFuc2Zvcm0uYyAqIHJlc29sdXRpb24sXG4gICAgICAgIHRyYW5zZm9ybS5kICogcmVzb2x1dGlvbixcbiAgICAgICAgdHJhbnNmb3JtLnR4ICogcmVzb2x1dGlvbixcbiAgICAgICAgdHJhbnNmb3JtLnR5ICogcmVzb2x1dGlvblxuICAgICk7XG5cbiAgICBDYW52YXNHcmFwaGljcy5yZW5kZXJHcmFwaGljcyh0aGlzLCBjb250ZXh0KTtcbn07XG5cbi8qKlxuICogUmV0cmlldmVzIHRoZSBib3VuZHMgb2YgdGhlIGdyYXBoaWMgc2hhcGUgYXMgYSByZWN0YW5nbGUgb2JqZWN0XG4gKlxuICogQHBhcmFtIFttYXRyaXhdIHtQSVhJLk1hdHJpeH0gVGhlIHdvcmxkIHRyYW5zZm9ybSBtYXRyaXggdG8gdXNlLCBkZWZhdWx0cyB0byB0aGlzXG4gKiAgb2JqZWN0J3Mgd29ybGRUcmFuc2Zvcm0uXG4gKiBAcmV0dXJuIHtQSVhJLlJlY3RhbmdsZX0gdGhlIHJlY3Rhbmd1bGFyIGJvdW5kaW5nIGFyZWFcbiAqL1xuR3JhcGhpY3MucHJvdG90eXBlLmdldEJvdW5kcyA9IGZ1bmN0aW9uIChtYXRyaXgpXG57XG4gICAgaWYoIXRoaXMuX2N1cnJlbnRCb3VuZHMpXG4gICAge1xuXG4gICAgICAgIC8vIHJldHVybiBhbiBlbXB0eSBvYmplY3QgaWYgdGhlIGl0ZW0gaXMgYSBtYXNrIVxuICAgICAgICBpZiAoIXRoaXMucmVuZGVyYWJsZSlcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIG1hdGguUmVjdGFuZ2xlLkVNUFRZO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuYm91bmRzRGlydHkpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlTG9jYWxCb3VuZHMoKTtcblxuICAgICAgICAgICAgdGhpcy5nbERpcnR5ID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMuY2FjaGVkU3ByaXRlRGlydHkgPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy5ib3VuZHNEaXJ0eSA9IGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGJvdW5kcyA9IHRoaXMuX2xvY2FsQm91bmRzO1xuXG4gICAgICAgIHZhciB3MCA9IGJvdW5kcy54O1xuICAgICAgICB2YXIgdzEgPSBib3VuZHMud2lkdGggKyBib3VuZHMueDtcblxuICAgICAgICB2YXIgaDAgPSBib3VuZHMueTtcbiAgICAgICAgdmFyIGgxID0gYm91bmRzLmhlaWdodCArIGJvdW5kcy55O1xuXG4gICAgICAgIHZhciB3b3JsZFRyYW5zZm9ybSA9IG1hdHJpeCB8fCB0aGlzLndvcmxkVHJhbnNmb3JtO1xuXG4gICAgICAgIHZhciBhID0gd29ybGRUcmFuc2Zvcm0uYTtcbiAgICAgICAgdmFyIGIgPSB3b3JsZFRyYW5zZm9ybS5iO1xuICAgICAgICB2YXIgYyA9IHdvcmxkVHJhbnNmb3JtLmM7XG4gICAgICAgIHZhciBkID0gd29ybGRUcmFuc2Zvcm0uZDtcbiAgICAgICAgdmFyIHR4ID0gd29ybGRUcmFuc2Zvcm0udHg7XG4gICAgICAgIHZhciB0eSA9IHdvcmxkVHJhbnNmb3JtLnR5O1xuXG4gICAgICAgIHZhciB4MSA9IGEgKiB3MSArIGMgKiBoMSArIHR4O1xuICAgICAgICB2YXIgeTEgPSBkICogaDEgKyBiICogdzEgKyB0eTtcblxuICAgICAgICB2YXIgeDIgPSBhICogdzAgKyBjICogaDEgKyB0eDtcbiAgICAgICAgdmFyIHkyID0gZCAqIGgxICsgYiAqIHcwICsgdHk7XG5cbiAgICAgICAgdmFyIHgzID0gYSAqIHcwICsgYyAqIGgwICsgdHg7XG4gICAgICAgIHZhciB5MyA9IGQgKiBoMCArIGIgKiB3MCArIHR5O1xuXG4gICAgICAgIHZhciB4NCA9ICBhICogdzEgKyBjICogaDAgKyB0eDtcbiAgICAgICAgdmFyIHk0ID0gIGQgKiBoMCArIGIgKiB3MSArIHR5O1xuXG4gICAgICAgIHZhciBtYXhYID0geDE7XG4gICAgICAgIHZhciBtYXhZID0geTE7XG5cbiAgICAgICAgdmFyIG1pblggPSB4MTtcbiAgICAgICAgdmFyIG1pblkgPSB5MTtcblxuICAgICAgICBtaW5YID0geDIgPCBtaW5YID8geDIgOiBtaW5YO1xuICAgICAgICBtaW5YID0geDMgPCBtaW5YID8geDMgOiBtaW5YO1xuICAgICAgICBtaW5YID0geDQgPCBtaW5YID8geDQgOiBtaW5YO1xuXG4gICAgICAgIG1pblkgPSB5MiA8IG1pblkgPyB5MiA6IG1pblk7XG4gICAgICAgIG1pblkgPSB5MyA8IG1pblkgPyB5MyA6IG1pblk7XG4gICAgICAgIG1pblkgPSB5NCA8IG1pblkgPyB5NCA6IG1pblk7XG5cbiAgICAgICAgbWF4WCA9IHgyID4gbWF4WCA/IHgyIDogbWF4WDtcbiAgICAgICAgbWF4WCA9IHgzID4gbWF4WCA/IHgzIDogbWF4WDtcbiAgICAgICAgbWF4WCA9IHg0ID4gbWF4WCA/IHg0IDogbWF4WDtcblxuICAgICAgICBtYXhZID0geTIgPiBtYXhZID8geTIgOiBtYXhZO1xuICAgICAgICBtYXhZID0geTMgPiBtYXhZID8geTMgOiBtYXhZO1xuICAgICAgICBtYXhZID0geTQgPiBtYXhZID8geTQgOiBtYXhZO1xuXG4gICAgICAgIHRoaXMuX2JvdW5kcy54ID0gbWluWDtcbiAgICAgICAgdGhpcy5fYm91bmRzLndpZHRoID0gbWF4WCAtIG1pblg7XG5cbiAgICAgICAgdGhpcy5fYm91bmRzLnkgPSBtaW5ZO1xuICAgICAgICB0aGlzLl9ib3VuZHMuaGVpZ2h0ID0gbWF4WSAtIG1pblk7XG5cbiAgICAgICAgdGhpcy5fY3VycmVudEJvdW5kcyA9IHRoaXMuX2JvdW5kcztcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5fY3VycmVudEJvdW5kcztcbn07XG5cbi8qKlxuKiBUZXN0cyBpZiBhIHBvaW50IGlzIGluc2lkZSB0aGlzIGdyYXBoaWNzIG9iamVjdFxuKlxuKiBAcGFyYW0gcG9pbnQge1BJWEkuUG9pbnR9IHRoZSBwb2ludCB0byB0ZXN0XG4qIEByZXR1cm4ge2Jvb2xlYW59IHRoZSByZXN1bHQgb2YgdGhlIHRlc3RcbiovXG5HcmFwaGljcy5wcm90b3R5cGUuY29udGFpbnNQb2ludCA9IGZ1bmN0aW9uKCBwb2ludCApXG57XG4gICAgdGhpcy53b3JsZFRyYW5zZm9ybS5hcHBseUludmVyc2UocG9pbnQsICB0ZW1wUG9pbnQpO1xuXG4gICAgdmFyIGdyYXBoaWNzRGF0YSA9IHRoaXMuZ3JhcGhpY3NEYXRhO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBncmFwaGljc0RhdGEubGVuZ3RoOyBpKyspXG4gICAge1xuICAgICAgICB2YXIgZGF0YSA9IGdyYXBoaWNzRGF0YVtpXTtcblxuICAgICAgICBpZiAoIWRhdGEuZmlsbClcbiAgICAgICAge1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBvbmx5IGRlYWwgd2l0aCBmaWxscy4uXG4gICAgICAgIGlmIChkYXRhLnNoYXBlKVxuICAgICAgICB7XG4gICAgICAgICAgICBpZiAoIGRhdGEuc2hhcGUuY29udGFpbnMoIHRlbXBQb2ludC54LCB0ZW1wUG9pbnQueSApIClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBmYWxzZTtcbn07XG5cbi8qKlxuICogVXBkYXRlIHRoZSBib3VuZHMgb2YgdGhlIG9iamVjdFxuICpcbiAqL1xuR3JhcGhpY3MucHJvdG90eXBlLnVwZGF0ZUxvY2FsQm91bmRzID0gZnVuY3Rpb24gKClcbntcbiAgICB2YXIgbWluWCA9IEluZmluaXR5O1xuICAgIHZhciBtYXhYID0gLUluZmluaXR5O1xuXG4gICAgdmFyIG1pblkgPSBJbmZpbml0eTtcbiAgICB2YXIgbWF4WSA9IC1JbmZpbml0eTtcblxuICAgIGlmICh0aGlzLmdyYXBoaWNzRGF0YS5sZW5ndGgpXG4gICAge1xuICAgICAgICB2YXIgc2hhcGUsIHBvaW50cywgeCwgeSwgdywgaDtcblxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuZ3JhcGhpY3NEYXRhLmxlbmd0aDsgaSsrKVxuICAgICAgICB7XG4gICAgICAgICAgICB2YXIgZGF0YSA9IHRoaXMuZ3JhcGhpY3NEYXRhW2ldO1xuICAgICAgICAgICAgdmFyIHR5cGUgPSBkYXRhLnR5cGU7XG4gICAgICAgICAgICB2YXIgbGluZVdpZHRoID0gZGF0YS5saW5lV2lkdGg7XG4gICAgICAgICAgICBzaGFwZSA9IGRhdGEuc2hhcGU7XG5cbiAgICAgICAgICAgIGlmICh0eXBlID09PSBDT05TVC5TSEFQRVMuUkVDVCB8fCB0eXBlID09PSBDT05TVC5TSEFQRVMuUlJFQylcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB4ID0gc2hhcGUueCAtIGxpbmVXaWR0aC8yO1xuICAgICAgICAgICAgICAgIHkgPSBzaGFwZS55IC0gbGluZVdpZHRoLzI7XG4gICAgICAgICAgICAgICAgdyA9IHNoYXBlLndpZHRoICsgbGluZVdpZHRoO1xuICAgICAgICAgICAgICAgIGggPSBzaGFwZS5oZWlnaHQgKyBsaW5lV2lkdGg7XG5cbiAgICAgICAgICAgICAgICBtaW5YID0geCA8IG1pblggPyB4IDogbWluWDtcbiAgICAgICAgICAgICAgICBtYXhYID0geCArIHcgPiBtYXhYID8geCArIHcgOiBtYXhYO1xuXG4gICAgICAgICAgICAgICAgbWluWSA9IHkgPCBtaW5ZID8geSA6IG1pblk7XG4gICAgICAgICAgICAgICAgbWF4WSA9IHkgKyBoID4gbWF4WSA/IHkgKyBoIDogbWF4WTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKHR5cGUgPT09IENPTlNULlNIQVBFUy5DSVJDKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHggPSBzaGFwZS54O1xuICAgICAgICAgICAgICAgIHkgPSBzaGFwZS55O1xuICAgICAgICAgICAgICAgIHcgPSBzaGFwZS5yYWRpdXMgKyBsaW5lV2lkdGgvMjtcbiAgICAgICAgICAgICAgICBoID0gc2hhcGUucmFkaXVzICsgbGluZVdpZHRoLzI7XG5cbiAgICAgICAgICAgICAgICBtaW5YID0geCAtIHcgPCBtaW5YID8geCAtIHcgOiBtaW5YO1xuICAgICAgICAgICAgICAgIG1heFggPSB4ICsgdyA+IG1heFggPyB4ICsgdyA6IG1heFg7XG5cbiAgICAgICAgICAgICAgICBtaW5ZID0geSAtIGggPCBtaW5ZID8geSAtIGggOiBtaW5ZO1xuICAgICAgICAgICAgICAgIG1heFkgPSB5ICsgaCA+IG1heFkgPyB5ICsgaCA6IG1heFk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmICh0eXBlID09PSBDT05TVC5TSEFQRVMuRUxJUClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB4ID0gc2hhcGUueDtcbiAgICAgICAgICAgICAgICB5ID0gc2hhcGUueTtcbiAgICAgICAgICAgICAgICB3ID0gc2hhcGUud2lkdGggKyBsaW5lV2lkdGgvMjtcbiAgICAgICAgICAgICAgICBoID0gc2hhcGUuaGVpZ2h0ICsgbGluZVdpZHRoLzI7XG5cbiAgICAgICAgICAgICAgICBtaW5YID0geCAtIHcgPCBtaW5YID8geCAtIHcgOiBtaW5YO1xuICAgICAgICAgICAgICAgIG1heFggPSB4ICsgdyA+IG1heFggPyB4ICsgdyA6IG1heFg7XG5cbiAgICAgICAgICAgICAgICBtaW5ZID0geSAtIGggPCBtaW5ZID8geSAtIGggOiBtaW5ZO1xuICAgICAgICAgICAgICAgIG1heFkgPSB5ICsgaCA+IG1heFkgPyB5ICsgaCA6IG1heFk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgLy8gUE9MWVxuICAgICAgICAgICAgICAgIHBvaW50cyA9IHNoYXBlLnBvaW50cztcblxuICAgICAgICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgcG9pbnRzLmxlbmd0aDsgaiArPSAyKVxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgeCA9IHBvaW50c1tqXTtcbiAgICAgICAgICAgICAgICAgICAgeSA9IHBvaW50c1tqKzFdO1xuXG4gICAgICAgICAgICAgICAgICAgIG1pblggPSB4LWxpbmVXaWR0aCA8IG1pblggPyB4LWxpbmVXaWR0aCA6IG1pblg7XG4gICAgICAgICAgICAgICAgICAgIG1heFggPSB4K2xpbmVXaWR0aCA+IG1heFggPyB4K2xpbmVXaWR0aCA6IG1heFg7XG5cbiAgICAgICAgICAgICAgICAgICAgbWluWSA9IHktbGluZVdpZHRoIDwgbWluWSA/IHktbGluZVdpZHRoIDogbWluWTtcbiAgICAgICAgICAgICAgICAgICAgbWF4WSA9IHkrbGluZVdpZHRoID4gbWF4WSA/IHkrbGluZVdpZHRoIDogbWF4WTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgbWluWCA9IDA7XG4gICAgICAgIG1heFggPSAwO1xuICAgICAgICBtaW5ZID0gMDtcbiAgICAgICAgbWF4WSA9IDA7XG4gICAgfVxuXG4gICAgdmFyIHBhZGRpbmcgPSB0aGlzLmJvdW5kc1BhZGRpbmc7XG5cbiAgICB0aGlzLl9sb2NhbEJvdW5kcy54ID0gbWluWCAtIHBhZGRpbmc7XG4gICAgdGhpcy5fbG9jYWxCb3VuZHMud2lkdGggPSAobWF4WCAtIG1pblgpICsgcGFkZGluZyAqIDI7XG5cbiAgICB0aGlzLl9sb2NhbEJvdW5kcy55ID0gbWluWSAtIHBhZGRpbmc7XG4gICAgdGhpcy5fbG9jYWxCb3VuZHMuaGVpZ2h0ID0gKG1heFkgLSBtaW5ZKSArIHBhZGRpbmcgKiAyO1xufTtcblxuLyoqXG4gKiBHZW5lcmF0ZXMgdGhlIGNhY2hlZCBzcHJpdGUgd2hlbiB0aGUgc3ByaXRlIGhhcyBjYWNoZUFzQml0bWFwID0gdHJ1ZVxuICpcbiAqIEBwcml2YXRlXG4gKi9cbi8qXG5HcmFwaGljcy5wcm90b3R5cGUuX2dlbmVyYXRlQ2FjaGVkU3ByaXRlID0gZnVuY3Rpb24gKClcbntcbiAgICB2YXIgYm91bmRzID0gdGhpcy5nZXRMb2NhbEJvdW5kcygpO1xuXG4gICAgaWYgKCF0aGlzLl9jYWNoZWRTcHJpdGUpXG4gICAge1xuICAgICAgICB2YXIgY2FudmFzQnVmZmVyID0gbmV3IENhbnZhc0J1ZmZlcihib3VuZHMud2lkdGgsIGJvdW5kcy5oZWlnaHQpO1xuICAgICAgICB2YXIgdGV4dHVyZSA9IFRleHR1cmUuZnJvbUNhbnZhcyhjYW52YXNCdWZmZXIuY2FudmFzKTtcblxuICAgICAgICB0aGlzLl9jYWNoZWRTcHJpdGUgPSBuZXcgU3ByaXRlKHRleHR1cmUpO1xuICAgICAgICB0aGlzLl9jYWNoZWRTcHJpdGUuYnVmZmVyID0gY2FudmFzQnVmZmVyO1xuXG4gICAgICAgIHRoaXMuX2NhY2hlZFNwcml0ZS53b3JsZFRyYW5zZm9ybSA9IHRoaXMud29ybGRUcmFuc2Zvcm07XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHRoaXMuX2NhY2hlZFNwcml0ZS5idWZmZXIucmVzaXplKGJvdW5kcy53aWR0aCwgYm91bmRzLmhlaWdodCk7XG4gICAgfVxuXG4gICAgLy8gbGV2ZXJhZ2UgdGhlIGFuY2hvciB0byBhY2NvdW50IGZvciB0aGUgb2Zmc2V0IG9mIHRoZSBlbGVtZW50XG4gICAgdGhpcy5fY2FjaGVkU3ByaXRlLmFuY2hvci54ID0gLSggYm91bmRzLnggLyBib3VuZHMud2lkdGggKTtcbiAgICB0aGlzLl9jYWNoZWRTcHJpdGUuYW5jaG9yLnkgPSAtKCBib3VuZHMueSAvIGJvdW5kcy5oZWlnaHQgKTtcblxuICAgIC8vIHRoaXMuX2NhY2hlZFNwcml0ZS5idWZmZXIuY29udGV4dC5zYXZlKCk7XG4gICAgdGhpcy5fY2FjaGVkU3ByaXRlLmJ1ZmZlci5jb250ZXh0LnRyYW5zbGF0ZSgtYm91bmRzLngsLWJvdW5kcy55KTtcblxuICAgIC8vIG1ha2Ugc3VyZSB3ZSBzZXQgdGhlIGFscGhhIG9mIHRoZSBncmFwaGljcyB0byAxIGZvciB0aGUgcmVuZGVyLi5cbiAgICB0aGlzLndvcmxkQWxwaGEgPSAxO1xuXG4gICAgLy8gbm93IHJlbmRlciB0aGUgZ3JhcGhpYy4uXG4gICAgQ2FudmFzR3JhcGhpY3MucmVuZGVyR3JhcGhpY3ModGhpcywgdGhpcy5fY2FjaGVkU3ByaXRlLmJ1ZmZlci5jb250ZXh0KTtcblxuICAgIHRoaXMuX2NhY2hlZFNwcml0ZS5hbHBoYSA9IHRoaXMuYWxwaGE7XG59O1xuKi9cbi8qKlxuICogVXBkYXRlcyB0ZXh0dXJlIHNpemUgYmFzZWQgb24gY2FudmFzIHNpemVcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG4vKlxuR3JhcGhpY3MucHJvdG90eXBlLnVwZGF0ZUNhY2hlZFNwcml0ZVRleHR1cmUgPSBmdW5jdGlvbiAoKVxue1xuICAgIHZhciBjYWNoZWRTcHJpdGUgPSB0aGlzLl9jYWNoZWRTcHJpdGU7XG4gICAgdmFyIHRleHR1cmUgPSBjYWNoZWRTcHJpdGUudGV4dHVyZTtcbiAgICB2YXIgY2FudmFzID0gY2FjaGVkU3ByaXRlLmJ1ZmZlci5jYW52YXM7XG5cbiAgICB0ZXh0dXJlLmJhc2VUZXh0dXJlLndpZHRoID0gY2FudmFzLndpZHRoO1xuICAgIHRleHR1cmUuYmFzZVRleHR1cmUuaGVpZ2h0ID0gY2FudmFzLmhlaWdodDtcbiAgICB0ZXh0dXJlLmNyb3Aud2lkdGggPSB0ZXh0dXJlLmZyYW1lLndpZHRoID0gY2FudmFzLndpZHRoO1xuICAgIHRleHR1cmUuY3JvcC5oZWlnaHQgPSB0ZXh0dXJlLmZyYW1lLmhlaWdodCA9IGNhbnZhcy5oZWlnaHQ7XG5cbiAgICBjYWNoZWRTcHJpdGUuX3dpZHRoID0gY2FudmFzLndpZHRoO1xuICAgIGNhY2hlZFNwcml0ZS5faGVpZ2h0ID0gY2FudmFzLmhlaWdodDtcblxuICAgIC8vIHVwZGF0ZSB0aGUgZGlydHkgYmFzZSB0ZXh0dXJlc1xuICAgIHRleHR1cmUuYmFzZVRleHR1cmUuZGlydHkoKTtcbn07Ki9cblxuLyoqXG4gKiBEZXN0cm95cyBhIHByZXZpb3VzIGNhY2hlZCBzcHJpdGUuXG4gKlxuICovXG4vKlxuR3JhcGhpY3MucHJvdG90eXBlLmRlc3Ryb3lDYWNoZWRTcHJpdGUgPSBmdW5jdGlvbiAoKVxue1xuICAgIHRoaXMuX2NhY2hlZFNwcml0ZS50ZXh0dXJlLmRlc3Ryb3kodHJ1ZSk7XG5cbiAgICAvLyBsZXQgdGhlIGdjIGNvbGxlY3QgdGhlIHVudXNlZCBzcHJpdGVcbiAgICAvLyBUT0RPIGNvdWxkIGJlIG9iamVjdCBwb29sZWQhXG4gICAgdGhpcy5fY2FjaGVkU3ByaXRlID0gbnVsbDtcbn07Ki9cblxuLyoqXG4gKiBEcmF3cyB0aGUgZ2l2ZW4gc2hhcGUgdG8gdGhpcyBHcmFwaGljcyBvYmplY3QuIENhbiBiZSBhbnkgb2YgQ2lyY2xlLCBSZWN0YW5nbGUsIEVsbGlwc2UsIExpbmUgb3IgUG9seWdvbi5cbiAqXG4gKiBAcGFyYW0gc2hhcGUge1BJWEkuQ2lyY2xlfFBJWEkuUmVjdGFuZ2xlfFBJWEkuRWxsaXBzZXxQSVhJLkxpbmV8UElYSS5Qb2x5Z29ufSBUaGUgc2hhcGUgb2JqZWN0IHRvIGRyYXcuXG4gKiBAcmV0dXJuIHtQSVhJLkdyYXBoaWNzRGF0YX0gVGhlIGdlbmVyYXRlZCBHcmFwaGljc0RhdGEgb2JqZWN0LlxuICovXG5HcmFwaGljcy5wcm90b3R5cGUuZHJhd1NoYXBlID0gZnVuY3Rpb24gKHNoYXBlKVxue1xuICAgIGlmICh0aGlzLmN1cnJlbnRQYXRoKVxuICAgIHtcbiAgICAgICAgLy8gY2hlY2sgY3VycmVudCBwYXRoIVxuICAgICAgICBpZiAodGhpcy5jdXJyZW50UGF0aC5zaGFwZS5wb2ludHMubGVuZ3RoIDw9IDIpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuZ3JhcGhpY3NEYXRhLnBvcCgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5jdXJyZW50UGF0aCA9IG51bGw7XG5cbiAgICB2YXIgZGF0YSA9IG5ldyBHcmFwaGljc0RhdGEodGhpcy5saW5lV2lkdGgsIHRoaXMubGluZUNvbG9yLCB0aGlzLmxpbmVBbHBoYSwgdGhpcy5maWxsQ29sb3IsIHRoaXMuZmlsbEFscGhhLCB0aGlzLmZpbGxpbmcsIHNoYXBlKTtcblxuICAgIHRoaXMuZ3JhcGhpY3NEYXRhLnB1c2goZGF0YSk7XG5cbiAgICBpZiAoZGF0YS50eXBlID09PSBDT05TVC5TSEFQRVMuUE9MWSlcbiAgICB7XG4gICAgICAgIGRhdGEuc2hhcGUuY2xvc2VkID0gZGF0YS5zaGFwZS5jbG9zZWQgfHwgdGhpcy5maWxsaW5nO1xuICAgICAgICB0aGlzLmN1cnJlbnRQYXRoID0gZGF0YTtcbiAgICB9XG5cbiAgICB0aGlzLmRpcnR5ID0gdGhpcy5ib3VuZHNEaXJ0eSA9IHRydWU7XG5cbiAgICByZXR1cm4gZGF0YTtcbn07XG5cbi8qKlxuICogRGVzdHJveXMgdGhlIEdyYXBoaWNzIG9iamVjdC5cbiAqL1xuR3JhcGhpY3MucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoKSB7XG4gICAgQ29udGFpbmVyLnByb3RvdHlwZS5kZXN0cm95LmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG5cbiAgICAvLyBkZXN0cm95IGVhY2ggb2YgdGhlIEdyYXBoaWNzRGF0YSBvYmplY3RzXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmdyYXBoaWNzRGF0YS5sZW5ndGg7ICsraSkge1xuICAgICAgICB0aGlzLmdyYXBoaWNzRGF0YVtpXS5kZXN0cm95KCk7XG4gICAgfVxuXG4gICAgLy8gZm9yIGVhY2ggd2ViZ2wgZGF0YSBlbnRyeSwgZGVzdHJveSB0aGUgV2ViR0xHcmFwaGljc0RhdGFcbiAgICBmb3IgKHZhciBpZCBpbiB0aGlzLl93ZWJnbCkge1xuICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IHRoaXMuX3dlYmdsW2lkXS5kYXRhLmxlbmd0aDsgKytqKSB7XG4gICAgICAgICAgICB0aGlzLl93ZWJnbFtpZF0uZGF0YVtqXS5kZXN0cm95KCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLmdyYXBoaWNzRGF0YSA9IG51bGw7XG5cbiAgICB0aGlzLmN1cnJlbnRQYXRoID0gbnVsbDtcbiAgICB0aGlzLl93ZWJnbCA9IG51bGw7XG4gICAgdGhpcy5fbG9jYWxCb3VuZHMgPSBudWxsO1xufTtcbiIsIi8qKlxuICogQSBHcmFwaGljc0RhdGEgb2JqZWN0LlxuICpcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqIEBwYXJhbSBsaW5lV2lkdGgge251bWJlcn0gdGhlIHdpZHRoIG9mIHRoZSBsaW5lIHRvIGRyYXdcbiAqIEBwYXJhbSBsaW5lQ29sb3Ige251bWJlcn0gdGhlIGNvbG9yIG9mIHRoZSBsaW5lIHRvIGRyYXdcbiAqIEBwYXJhbSBsaW5lQWxwaGEge251bWJlcn0gdGhlIGFscGhhIG9mIHRoZSBsaW5lIHRvIGRyYXdcbiAqIEBwYXJhbSBmaWxsQ29sb3Ige251bWJlcn0gdGhlIGNvbG9yIG9mIHRoZSBmaWxsXG4gKiBAcGFyYW0gZmlsbEFscGhhIHtudW1iZXJ9IHRoZSBhbHBoYSBvZiB0aGUgZmlsbFxuICogQHBhcmFtIGZpbGwgICAgICB7Ym9vbGVhbn0gd2hldGhlciBvciBub3QgdGhlIHNoYXBlIGlzIGZpbGxlZCB3aXRoIGEgY29sb3VyXG4gKiBAcGFyYW0gc2hhcGUgICAgIHtDaXJjbGV8UmVjdGFuZ2xlfEVsbGlwc2V8TGluZXxQb2x5Z29ufSBUaGUgc2hhcGUgb2JqZWN0IHRvIGRyYXcuXG4gKi9cbmZ1bmN0aW9uIEdyYXBoaWNzRGF0YShsaW5lV2lkdGgsIGxpbmVDb2xvciwgbGluZUFscGhhLCBmaWxsQ29sb3IsIGZpbGxBbHBoYSwgZmlsbCwgc2hhcGUpXG57XG4gICAgLypcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9IHRoZSB3aWR0aCBvZiB0aGUgbGluZSB0byBkcmF3XG4gICAgICovXG4gICAgdGhpcy5saW5lV2lkdGggPSBsaW5lV2lkdGg7XG5cbiAgICAvKlxuICAgICAqIEBtZW1iZXIge251bWJlcn0gdGhlIGNvbG9yIG9mIHRoZSBsaW5lIHRvIGRyYXdcbiAgICAgKi9cbiAgICB0aGlzLmxpbmVDb2xvciA9IGxpbmVDb2xvcjtcbiAgICAvKlxuICAgICAqIEBtZW1iZXIge251bWJlcn0gdGhlIGFscGhhIG9mIHRoZSBsaW5lIHRvIGRyYXdcbiAgICAgKi9cbiAgICB0aGlzLmxpbmVBbHBoYSA9IGxpbmVBbHBoYTtcbiAgICAvKlxuICAgICAqIEBtZW1iZXIge251bWJlcn0gY2FjaGVkIHRpbnQgb2YgdGhlIGxpbmUgdG8gZHJhd1xuICAgICAqL1xuICAgIHRoaXMuX2xpbmVUaW50ID0gbGluZUNvbG9yO1xuXG4gICAgLypcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9IHRoZSBjb2xvciBvZiB0aGUgZmlsbFxuICAgICAqL1xuICAgIHRoaXMuZmlsbENvbG9yID0gZmlsbENvbG9yO1xuXG4gICAgLypcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9IHRoZSBhbHBoYSBvZiB0aGUgZmlsbFxuICAgICAqL1xuICAgIHRoaXMuZmlsbEFscGhhID0gZmlsbEFscGhhO1xuXG4gICAgLypcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9IGNhY2hlZCB0aW50IG9mIHRoZSBmaWxsXG4gICAgICovXG4gICAgdGhpcy5fZmlsbFRpbnQgPSBmaWxsQ29sb3I7XG5cbiAgICAvKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59IHdoZXRoZXIgb3Igbm90IHRoZSBzaGFwZSBpcyBmaWxsZWQgd2l0aCBhIGNvbG91clxuICAgICAqL1xuICAgIHRoaXMuZmlsbCA9IGZpbGw7XG5cbiAgICAvKlxuICAgICAqIEBtZW1iZXIge1BJWEkuQ2lyY2xlfFBJWEkuUmVjdGFuZ2xlfFBJWEkuRWxsaXBzZXxQSVhJLkxpbmV8UElYSS5Qb2x5Z29ufSBUaGUgc2hhcGUgb2JqZWN0IHRvIGRyYXcuXG4gICAgICovXG4gICAgdGhpcy5zaGFwZSA9IHNoYXBlO1xuXG4gICAgLypcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9IFRoZSB0eXBlIG9mIHRoZSBzaGFwZSwgc2VlIHRoZSBDb25zdC5TaGFwZXMgZmlsZSBmb3IgYWxsIHRoZSBleGlzdGluZyB0eXBlcyxcbiAgICAgKi9cbiAgICB0aGlzLnR5cGUgPSBzaGFwZS50eXBlO1xufVxuXG5HcmFwaGljc0RhdGEucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gR3JhcGhpY3NEYXRhO1xubW9kdWxlLmV4cG9ydHMgPSBHcmFwaGljc0RhdGE7XG5cbi8qKlxuICogQ3JlYXRlcyBhIG5ldyBHcmFwaGljc0RhdGEgb2JqZWN0IHdpdGggdGhlIHNhbWUgdmFsdWVzIGFzIHRoaXMgb25lLlxuICpcbiAqIEByZXR1cm4ge1BJWEkuR3JhcGhpY3NEYXRhfVxuICovXG5HcmFwaGljc0RhdGEucHJvdG90eXBlLmNsb25lID0gZnVuY3Rpb24gKClcbntcbiAgICByZXR1cm4gbmV3IEdyYXBoaWNzRGF0YShcbiAgICAgICAgdGhpcy5saW5lV2lkdGgsXG4gICAgICAgIHRoaXMubGluZUNvbG9yLFxuICAgICAgICB0aGlzLmxpbmVBbHBoYSxcbiAgICAgICAgdGhpcy5maWxsQ29sb3IsXG4gICAgICAgIHRoaXMuZmlsbEFscGhhLFxuICAgICAgICB0aGlzLmZpbGwsXG4gICAgICAgIHRoaXMuc2hhcGVcbiAgICApO1xufTtcblxuLyoqXG4gKiBEZXN0cm95cyB0aGUgR3JhcGhpY3MgZGF0YS5cbiAqL1xuR3JhcGhpY3NEYXRhLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKCkge1xuICAgIHRoaXMuc2hhcGUgPSBudWxsO1xufTtcbiIsInZhciB1dGlscyA9IHJlcXVpcmUoJy4uLy4uL3V0aWxzJyksXG4gICAgbWF0aCA9IHJlcXVpcmUoJy4uLy4uL21hdGgnKSxcbiAgICBDT05TVCA9IHJlcXVpcmUoJy4uLy4uL2NvbnN0JyksXG4gICAgT2JqZWN0UmVuZGVyZXIgPSByZXF1aXJlKCcuLi8uLi9yZW5kZXJlcnMvd2ViZ2wvdXRpbHMvT2JqZWN0UmVuZGVyZXInKSxcbiAgICBXZWJHTFJlbmRlcmVyID0gcmVxdWlyZSgnLi4vLi4vcmVuZGVyZXJzL3dlYmdsL1dlYkdMUmVuZGVyZXInKSxcbiAgICBXZWJHTEdyYXBoaWNzRGF0YSA9IHJlcXVpcmUoJy4vV2ViR0xHcmFwaGljc0RhdGEnKSxcbiAgICBQcmltaXRpdmVTaGFkZXIgPSByZXF1aXJlKCcuL1ByaW1pdGl2ZVNoYWRlcicpLFxuXG4gICAgLy8gc29tZSBkcmF3aW5nIGZ1bmN0aW9ucy4uXG4gICAgYnVpbGRMaW5lID0gcmVxdWlyZSgnLi9idWlsZExpbmUnKTtcbiAgICBidWlsZFBvbHkgPSByZXF1aXJlKCcuL2J1aWxkUG9seScpO1xuICAgIGJ1aWxkQ29tcGxleFBvbHkgPSByZXF1aXJlKCcuL2J1aWxkQ29tcGxleFBvbHknKTtcbiAgICBidWlsZFJlY3RhbmdsZSA9IHJlcXVpcmUoJy4vYnVpbGRSZWN0YW5nbGUnKTtcbiAgICBidWlsZFJvdW5kZWRSZWN0YW5nbGUgPSByZXF1aXJlKCcuL2J1aWxkUm91bmRlZFJlY3RhbmdsZScpO1xuICAgIGJ1aWxkQ2lyY2xlID0gcmVxdWlyZSgnLi9idWlsZENpcmNsZScpO1xuXG4gICAgZWFyY3V0ID0gcmVxdWlyZSgnZWFyY3V0Jyk7XG5cbi8qKlxuICogUmVuZGVycyB0aGUgZ3JhcGhpY3Mgb2JqZWN0LlxuICpcbiAqIEBjbGFzc1xuICogQHByaXZhdGVcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAZXh0ZW5kcyBQSVhJLk9iamVjdFJlbmRlcmVyXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcn0gVGhlIHJlbmRlcmVyIHRoaXMgb2JqZWN0IHJlbmRlcmVyIHdvcmtzIGZvci5cbiAqL1xuZnVuY3Rpb24gR3JhcGhpY3NSZW5kZXJlcihyZW5kZXJlcilcbntcbiAgICBPYmplY3RSZW5kZXJlci5jYWxsKHRoaXMsIHJlbmRlcmVyKTtcblxuICAgIHRoaXMuZ3JhcGhpY3NEYXRhUG9vbCA9IFtdO1xuXG4gICAgdGhpcy5wcmltaXRpdmVTaGFkZXIgPSBudWxsO1xuICAgIHRoaXMuY29tcGxleFByaW1pdGl2ZVNoYWRlciA9IG51bGw7XG5cbiAgICB0aGlzLmdsID0gcmVuZGVyZXIuZ2w7XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIGlzIHRoZSBtYXhpbXVtIG51bWJlciBvZiBwb2ludHMgYSBwb2x5IGNhbiBjb250YWluIGJlZm9yZSBpdCBpcyByZW5kZXJlZCBhcyBhIGNvbXBsZXggcG9seWdvbiAodXNpbmcgdGhlIHN0ZW5jaWwgYnVmZmVyKVxuICAgICAqIEB0eXBlIHtOdW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy5tYXhpbXVtU2ltcGxlUG9seVNpemUgPSAyMDA7XG59XG5cbkdyYXBoaWNzUmVuZGVyZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShPYmplY3RSZW5kZXJlci5wcm90b3R5cGUpO1xuR3JhcGhpY3NSZW5kZXJlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBHcmFwaGljc1JlbmRlcmVyO1xubW9kdWxlLmV4cG9ydHMgPSBHcmFwaGljc1JlbmRlcmVyO1xuXG5XZWJHTFJlbmRlcmVyLnJlZ2lzdGVyUGx1Z2luKCdncmFwaGljcycsIEdyYXBoaWNzUmVuZGVyZXIpO1xuXG4vKipcbiAqIENhbGxlZCB3aGVuIHRoZXJlIGlzIGEgV2ViR0wgY29udGV4dCBjaGFuZ2VcbiAqXG4gKiBAcHJpdmF0ZVxuICpcbiAqL1xuR3JhcGhpY3NSZW5kZXJlci5wcm90b3R5cGUub25Db250ZXh0Q2hhbmdlID0gZnVuY3Rpb24oKVxue1xuICAgIHRoaXMuZ2wgPSB0aGlzLnJlbmRlcmVyLmdsO1xuICAgIHRoaXMucHJpbWl0aXZlU2hhZGVyID0gbmV3IFByaW1pdGl2ZVNoYWRlcih0aGlzLmdsKVxufTtcblxuLyoqXG4gKiBEZXN0cm95cyB0aGlzIHJlbmRlcmVyLlxuICpcbiAqL1xuR3JhcGhpY3NSZW5kZXJlci5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uICgpIHtcbiAgICBPYmplY3RSZW5kZXJlci5wcm90b3R5cGUuZGVzdHJveS5jYWxsKHRoaXMpO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmdyYXBoaWNzRGF0YVBvb2wubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgdGhpcy5ncmFwaGljc0RhdGFQb29sW2ldLmRlc3Ryb3koKTtcbiAgICB9XG5cbiAgICB0aGlzLmdyYXBoaWNzRGF0YVBvb2wgPSBudWxsO1xufTtcblxuLyoqXG4gKiBSZW5kZXJzIGEgZ3JhcGhpY3Mgb2JqZWN0LlxuICpcbiAqIEBwYXJhbSBncmFwaGljcyB7UElYSS5HcmFwaGljc30gVGhlIGdyYXBoaWNzIG9iamVjdCB0byByZW5kZXIuXG4gKi9cbkdyYXBoaWNzUmVuZGVyZXIucHJvdG90eXBlLnJlbmRlciA9IGZ1bmN0aW9uKGdyYXBoaWNzKVxue1xuICAgIHZhciByZW5kZXJlciA9IHRoaXMucmVuZGVyZXI7XG4gICAgdmFyIGdsID0gcmVuZGVyZXIuZ2w7XG5cbiAgICB2YXIgd2ViR0xEYXRhO1xuICAvLyAgY29uc29sZS5sb2coZ3JhcGhpY3MpXG4gICAgaWYgKGdyYXBoaWNzLmRpcnR5IHx8ICFncmFwaGljcy5fd2ViR0xbZ2wuaWRdKVxuICAgIHtcbiAgICAgICAgdGhpcy51cGRhdGVHcmFwaGljcyhncmFwaGljcyk7XG4gICAgfVxuXG4gICAgdmFyIHdlYkdMID0gZ3JhcGhpY3MuX3dlYkdMW2dsLmlkXTtcblxuICAgIC8vIFRoaXMgIGNvdWxkIGJlIHNwZWVkZWQgdXAgZm9yIHN1cmUhXG5cbiAgICByZW5kZXJlci5ibGVuZE1vZGVNYW5hZ2VyLnNldEJsZW5kTW9kZSggZ3JhcGhpY3MuYmxlbmRNb2RlICk7XG5cbi8vICAgIHZhciBtYXRyaXggPSAgZ3JhcGhpY3Mud29ybGRUcmFuc2Zvcm0uY2xvbmUoKTtcbi8vICAgIHZhciBtYXRyaXggPSAgcmVuZGVyZXIuY3VycmVudFJlbmRlclRhcmdldC5wcm9qZWN0aW9uTWF0cml4LmNsb25lKCk7XG4vLyAgICBtYXRyaXguYXBwZW5kKGdyYXBoaWNzLndvcmxkVHJhbnNmb3JtKTtcblxuICAgIGZvciAodmFyIGkgPSAwLCBuID0gd2ViR0wuZGF0YS5sZW5ndGg7IGkgPCBuOyBpKyspXG4gICAge1xuICAgICAgICB3ZWJHTERhdGEgPSB3ZWJHTC5kYXRhW2ldO1xuXG4gICAgICAgIGlmICh3ZWJHTC5kYXRhW2ldLm1vZGUgPT09IDEpXG4gICAgICAgIHtcbiAgICAgICAgICAgIC8vVE9ETyBmaXggdGhpcyBvbmUhXG4gICAgICAgICAgICBcbiAgICAgICAgICAgIC8qXG4gICAgICAgICAgICByZW5kZXJlci5zdGVuY2lsTWFuYWdlci5wdXNoU3RlbmNpbChncmFwaGljcywgd2ViR0xEYXRhKTtcblxuICAgICAgICAgICAgZ2wudW5pZm9ybTFmKHJlbmRlcmVyLnNoYWRlck1hbmFnZXIuY29tcGxleFByaW1pdGl2ZVNoYWRlci51bmlmb3Jtcy5hbHBoYS5fbG9jYXRpb24sIGdyYXBoaWNzLndvcmxkQWxwaGEgKiB3ZWJHTERhdGEuYWxwaGEpO1xuXG4gICAgICAgICAgICAvLyByZW5kZXIgcXVhZC4uXG4gICAgICAgICAgICBnbC5kcmF3RWxlbWVudHMoZ2wuVFJJQU5HTEVfRkFOLCA0LCBnbC5VTlNJR05FRF9TSE9SVCwgKCB3ZWJHTERhdGEuaW5kaWNlcy5sZW5ndGggLSA0ICkgKiAyICk7XG5cbiAgICAgICAgICAgIHJlbmRlcmVyLnN0ZW5jaWxNYW5hZ2VyLnBvcFN0ZW5jaWwoZ3JhcGhpY3MsIHdlYkdMRGF0YSk7XG4gICAgICAgICAgICAqL1xuICAgICAgICB9XG4gICAgICAgIGVsc2VcbiAgICAgICAge1xuXG4gICAgICAgICAgICBzaGFkZXIgPSB0aGlzLnByaW1pdGl2ZVNoYWRlcjtcblxuICAgICAgICAgICAgcmVuZGVyZXIuYmluZFNoYWRlcihzaGFkZXIpXG5cbiAgICAgICAgICAgIHNoYWRlci51bmlmb3Jtcy50cmFuc2xhdGlvbk1hdHJpeCA9IGdyYXBoaWNzLndvcmxkVHJhbnNmb3JtLnRvQXJyYXkodHJ1ZSk7XG4gICAgICAgICAgICBzaGFkZXIudW5pZm9ybXMudGludCA9IHV0aWxzLmhleDJyZ2IoZ3JhcGhpY3MudGludCk7XG4gICAgICAgICAgICBzaGFkZXIudW5pZm9ybXMuYWxwaGEgPSBncmFwaGljcy53b3JsZEFscGhhO1xuXG5cbiAgICAgICAgICAgIGdsLmJpbmRCdWZmZXIoZ2wuQVJSQVlfQlVGRkVSLCB3ZWJHTERhdGEuYnVmZmVyKTtcblxuICAgICAgICAgICAgc2hhZGVyID0gdGhpcy5wcmltaXRpdmVTaGFkZXI7XG5cbiAgICAgICAgICAgIHNoYWRlci5hdHRyaWJ1dGVzLmFWZXJ0ZXhQb3NpdGlvbi5wb2ludGVyKGdsLkZMT0FULCBmYWxzZSwgNCAqIDYsIDApO1xuICAgICAgICAgICAgc2hhZGVyLmF0dHJpYnV0ZXMuYUNvbG9yLnBvaW50ZXIoZ2wuRkxPQVQsIGZhbHNlLCA0ICogNiwgMiAqIDQpO1xuXG4gICAgICAgICAgICBnbC5lbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShzaGFkZXIuYXR0cmlidXRlcy5hVmVydGV4UG9zaXRpb24ubG9jYXRpb24pO1xuICAgICAgICAgICAgZ2wuZW5hYmxlVmVydGV4QXR0cmliQXJyYXkoc2hhZGVyLmF0dHJpYnV0ZXMuYUNvbG9yLmxvY2F0aW9uKTtcblxuICAgICAgICAgICAgLy8gc2V0IHRoZSBpbmRleCBidWZmZXIhXG4gICAgICAgICAgICBnbC5iaW5kQnVmZmVyKGdsLkVMRU1FTlRfQVJSQVlfQlVGRkVSLCB3ZWJHTERhdGEuaW5kZXhCdWZmZXIpO1xuICAgICAgICAgICAgZ2wuZHJhd0VsZW1lbnRzKGdsLlRSSUFOR0xFX1NUUklQLCAgd2ViR0xEYXRhLmluZGljZXMubGVuZ3RoLCBnbC5VTlNJR05FRF9TSE9SVCwgMCApO1xuICAgICAgICB9XG5cbiAgICAgICAgcmVuZGVyZXIuZHJhd0NvdW50Kys7XG4gICAgfVxufTtcblxuLyoqXG4gKiBVcGRhdGVzIHRoZSBncmFwaGljcyBvYmplY3RcbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIGdyYXBoaWNzIHtQSVhJLkdyYXBoaWNzfSBUaGUgZ3JhcGhpY3Mgb2JqZWN0IHRvIHVwZGF0ZVxuICovXG5HcmFwaGljc1JlbmRlcmVyLnByb3RvdHlwZS51cGRhdGVHcmFwaGljcyA9IGZ1bmN0aW9uKGdyYXBoaWNzKVxue1xuICAgIHZhciBnbCA9IHRoaXMucmVuZGVyZXIuZ2w7XG5cbiAgICAgLy8gZ2V0IHRoZSBjb250ZXh0cyBncmFwaGljcyBvYmplY3RcbiAgICB2YXIgd2ViR0wgPSBncmFwaGljcy5fd2ViR0xbZ2wuaWRdO1xuXG4gICAgLy8gaWYgdGhlIGdyYXBoaWNzIG9iamVjdCBkb2VzIG5vdCBleGlzdCBpbiB0aGUgd2ViR0wgY29udGV4dCB0aW1lIHRvIGNyZWF0ZSBpdCFcbiAgICBpZiAoIXdlYkdMKVxuICAgIHtcbiAgICAgICAgd2ViR0wgPSBncmFwaGljcy5fd2ViR0xbZ2wuaWRdID0ge2xhc3RJbmRleDowLCBkYXRhOltdLCBnbDpnbH07XG4gICAgfVxuXG4gICBcbiAgICAvLyBmbGFnIHRoZSBncmFwaGljcyBhcyBub3QgZGlydHkgYXMgd2UgYXJlIGFib3V0IHRvIHVwZGF0ZSBpdC4uLlxuICAgIGdyYXBoaWNzLmRpcnR5ID0gZmFsc2U7XG5cbiAgICB2YXIgaTtcblxuICAgIC8vIGlmIHRoZSB1c2VyIGNsZWFyZWQgdGhlIGdyYXBoaWNzIG9iamVjdCB3ZSB3aWxsIG5lZWQgdG8gY2xlYXIgZXZlcnkgb2JqZWN0XG4gICAgaWYgKGdyYXBoaWNzLmNsZWFyRGlydHkpXG4gICAge1xuICAgICAgICBncmFwaGljcy5jbGVhckRpcnR5ID0gZmFsc2U7XG5cbiAgICAgICAgLy8gbG9vcCB0aHJvdWdoIGFuZCByZXR1cm4gYWxsIHRoZSB3ZWJHTERhdGFzIHRvIHRoZSBvYmplY3QgcG9vbCBzbyB0aGFuIGNhbiBiZSByZXVzZWQgbGF0ZXIgb25cbiAgICAgICAgZm9yIChpID0gMDsgaSA8IHdlYkdMLmRhdGEubGVuZ3RoOyBpKyspXG4gICAgICAgIHtcbiAgICAgICAgICAgIHZhciBncmFwaGljc0RhdGEgPSB3ZWJHTC5kYXRhW2ldO1xuICAgICAgICAgICAgZ3JhcGhpY3NEYXRhLnJlc2V0KCk7XG4gICAgICAgICAgICB0aGlzLmdyYXBoaWNzRGF0YVBvb2wucHVzaCggZ3JhcGhpY3NEYXRhICk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBjbGVhciB0aGUgYXJyYXkgYW5kIHJlc2V0IHRoZSBpbmRleC4uXG4gICAgICAgIHdlYkdMLmRhdGEgPSBbXTtcbiAgICAgICAgd2ViR0wubGFzdEluZGV4ID0gMDtcbiAgICB9XG5cbiAgICB2YXIgd2ViR0xEYXRhO1xuXG4gICAgLy8gbG9vcCB0aHJvdWdoIHRoZSBncmFwaGljcyBkYXRhcyBhbmQgY29uc3RydWN0IGVhY2ggb25lLi5cbiAgICAvLyBpZiB0aGUgb2JqZWN0IGlzIGEgY29tcGxleCBmaWxsIHRoZW4gdGhlIG5ldyBzdGVuY2lsIGJ1ZmZlciB0ZWNobmlxdWUgd2lsbCBiZSB1c2VkXG4gICAgLy8gb3RoZXIgd2lzZSBncmFwaGljcyBvYmplY3RzIHdpbGwgYmUgcHVzaGVkIGludG8gYSBiYXRjaC4uXG4gICAgZm9yIChpID0gd2ViR0wubGFzdEluZGV4OyBpIDwgZ3JhcGhpY3MuZ3JhcGhpY3NEYXRhLmxlbmd0aDsgaSsrKVxuICAgIHtcbiAgICAgICAgdmFyIGRhdGEgPSBncmFwaGljcy5ncmFwaGljc0RhdGFbaV07XG5cbiAgICAgICAgaWYgKGRhdGEudHlwZSA9PT0gQ09OU1QuU0hBUEVTLlBPTFkpXG4gICAgICAgIHtcbiAgICAgICAgICAgIC8vIG5lZWQgdG8gYWRkIHRoZSBwb2ludHMgdGhlIHRoZSBncmFwaGljcyBvYmplY3QuLlxuICAgICAgICAgICAgZGF0YS5wb2ludHMgPSBkYXRhLnNoYXBlLnBvaW50cy5zbGljZSgpO1xuICAgICAgICAgICAgaWYgKGRhdGEuc2hhcGUuY2xvc2VkKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIC8vIGNsb3NlIHRoZSBwb2x5IGlmIHRoZSB2YWx1ZSBpcyB0cnVlIVxuICAgICAgICAgICAgICAgIGlmIChkYXRhLnBvaW50c1swXSAhPT0gZGF0YS5wb2ludHNbZGF0YS5wb2ludHMubGVuZ3RoLTJdIHx8IGRhdGEucG9pbnRzWzFdICE9PSBkYXRhLnBvaW50c1tkYXRhLnBvaW50cy5sZW5ndGgtMV0pXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBkYXRhLnBvaW50cy5wdXNoKGRhdGEucG9pbnRzWzBdLCBkYXRhLnBvaW50c1sxXSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBNQUtFIFNVUkUgV0UgSEFWRSBUSEUgQ09SUkVDVCBUWVBFLi5cbiAgICAgICAgICAgIGlmIChkYXRhLmZpbGwpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgaWYgKGRhdGEucG9pbnRzLmxlbmd0aCA+PSA2KVxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGRhdGEucG9pbnRzLmxlbmd0aCA8IHRoaXMubWF4aW11bVNpbXBsZVBvbHlTaXplICogMilcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgd2ViR0xEYXRhID0gdGhpcy5zd2l0Y2hNb2RlKHdlYkdMLCAwKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNhbkRyYXdVc2luZ1NpbXBsZSA9IGJ1aWxkUG9seShkYXRhLCB3ZWJHTERhdGEpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWNhbkRyYXdVc2luZ1NpbXBsZSlcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3ZWJHTERhdGEgPSB0aGlzLnN3aXRjaE1vZGUod2ViR0wsIDEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1aWxkQ29tcGxleFBvbHkoZGF0YSwgd2ViR0xEYXRhKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgd2ViR0xEYXRhID0gdGhpcy5zd2l0Y2hNb2RlKHdlYkdMLCAxKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJ1aWxkQ29tcGxleFBvbHkoZGF0YSwgd2ViR0xEYXRhKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGRhdGEubGluZVdpZHRoID4gMClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB3ZWJHTERhdGEgPSB0aGlzLnN3aXRjaE1vZGUod2ViR0wsIDApO1xuICAgICAgICAgICAgICAgIGJ1aWxkTGluZShkYXRhLCB3ZWJHTERhdGEpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2VcbiAgICAgICAge1xuICAgICAgICAgICAgd2ViR0xEYXRhID0gdGhpcy5zd2l0Y2hNb2RlKHdlYkdMLCAwKTtcblxuICAgICAgICAgICAgaWYgKGRhdGEudHlwZSA9PT0gQ09OU1QuU0hBUEVTLlJFQ1QpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgYnVpbGRSZWN0YW5nbGUoZGF0YSwgd2ViR0xEYXRhKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGRhdGEudHlwZSA9PT0gQ09OU1QuU0hBUEVTLkNJUkMgfHwgZGF0YS50eXBlID09PSBDT05TVC5TSEFQRVMuRUxJUClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBidWlsZENpcmNsZShkYXRhLCB3ZWJHTERhdGEpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoZGF0YS50eXBlID09PSBDT05TVC5TSEFQRVMuUlJFQylcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBidWlsZFJvdW5kZWRSZWN0YW5nbGUoZGF0YSwgd2ViR0xEYXRhKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHdlYkdMLmxhc3RJbmRleCsrO1xuICAgIH1cblxuICAgIC8vIHVwbG9hZCBhbGwgdGhlIGRpcnR5IGRhdGEuLi5cbiAgICBmb3IgKGkgPSAwOyBpIDwgd2ViR0wuZGF0YS5sZW5ndGg7IGkrKylcbiAgICB7XG4gICAgICAgIHdlYkdMRGF0YSA9IHdlYkdMLmRhdGFbaV07XG5cbiAgICAgICAgaWYgKHdlYkdMRGF0YS5kaXJ0eSlcbiAgICAgICAge1xuICAgICAgICAgICAgd2ViR0xEYXRhLnVwbG9hZCgpO1xuICAgICAgICB9XG4gICAgfVxufTtcblxuLyoqXG4gKlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0gd2ViR0wge1dlYkdMUmVuZGVyaW5nQ29udGV4dH0gdGhlIGN1cnJlbnQgV2ViR0wgZHJhd2luZyBjb250ZXh0XG4gKiBAcGFyYW0gdHlwZSB7bnVtYmVyfSBUT0RPIEBBbHZpblxuICovXG5HcmFwaGljc1JlbmRlcmVyLnByb3RvdHlwZS5zd2l0Y2hNb2RlID0gZnVuY3Rpb24gKHdlYkdMLCB0eXBlKVxue1xuICAgIHZhciB3ZWJHTERhdGE7XG5cbiAgICBpZiAoIXdlYkdMLmRhdGEubGVuZ3RoKVxuICAgIHtcbiAgICAgICAgd2ViR0xEYXRhID0gdGhpcy5ncmFwaGljc0RhdGFQb29sLnBvcCgpIHx8IG5ldyBXZWJHTEdyYXBoaWNzRGF0YSh3ZWJHTC5nbCk7XG4gICAgICAgIHdlYkdMRGF0YS5tb2RlID0gdHlwZTtcbiAgICAgICAgd2ViR0wuZGF0YS5wdXNoKHdlYkdMRGF0YSk7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHdlYkdMRGF0YSA9IHdlYkdMLmRhdGFbd2ViR0wuZGF0YS5sZW5ndGgtMV07XG5cbiAgICAgICAgaWYgKCh3ZWJHTERhdGEucG9pbnRzLmxlbmd0aCA+IDMyMDAwMCkgfHwgd2ViR0xEYXRhLm1vZGUgIT09IHR5cGUgfHwgdHlwZSA9PT0gMSlcbiAgICAgICAge1xuICAgICAgICAgICAgd2ViR0xEYXRhID0gdGhpcy5ncmFwaGljc0RhdGFQb29sLnBvcCgpIHx8IG5ldyBXZWJHTEdyYXBoaWNzRGF0YSh3ZWJHTC5nbCk7XG4gICAgICAgICAgICB3ZWJHTERhdGEubW9kZSA9IHR5cGU7XG4gICAgICAgICAgICB3ZWJHTC5kYXRhLnB1c2god2ViR0xEYXRhKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHdlYkdMRGF0YS5kaXJ0eSA9IHRydWU7XG5cbiAgICByZXR1cm4gd2ViR0xEYXRhO1xufTtcblxuIiwidmFyIFNoYWRlciA9IHJlcXVpcmUoJ3BpeGktZ2wtY29yZScpLkdMU2hhZGVyO1xuXG4vKipcbiAqIFRoaXMgc2hhZGVyIGlzIHVzZWQgdG8gZHJhdyBzaW1wbGUgcHJpbWl0aXZlIHNoYXBlcyBmb3Ige0BsaW5rIFBJWEkuR3JhcGhpY3N9LlxuICpcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqIEBleHRlbmRzIFBJWEkuU2hhZGVyXG4gKiBAcGFyYW0gc2hhZGVyTWFuYWdlciB7U2hhZGVyTWFuYWdlcn0gVGhlIHdlYmdsIHNoYWRlciBtYW5hZ2VyIHRoaXMgc2hhZGVyIHdvcmtzIGZvci5cbiAqL1xuZnVuY3Rpb24gUHJpbWl0aXZlU2hhZGVyKGdsKVxue1xuICAgIFNoYWRlci5jYWxsKHRoaXMsXG4gICAgICAgIGdsLFxuICAgICAgICAvLyB2ZXJ0ZXggc2hhZGVyXG4gICAgICAgIFtcbiAgICAgICAgICAgICdhdHRyaWJ1dGUgdmVjMiBhVmVydGV4UG9zaXRpb247JyxcbiAgICAgICAgICAgICdhdHRyaWJ1dGUgdmVjNCBhQ29sb3I7JyxcblxuICAgICAgICAgICAgJ3VuaWZvcm0gbWF0MyB0cmFuc2xhdGlvbk1hdHJpeDsnLFxuICAgICAgICAgICAgJ3VuaWZvcm0gbWF0MyBwcm9qZWN0aW9uTWF0cml4OycsXG5cbiAgICAgICAgICAgICd1bmlmb3JtIGZsb2F0IGFscGhhOycsXG4gICAgICAgICAgICAndW5pZm9ybSBmbG9hdCBmbGlwWTsnLFxuICAgICAgICAgICAgJ3VuaWZvcm0gdmVjMyB0aW50OycsXG5cbiAgICAgICAgICAgICd2YXJ5aW5nIHZlYzQgdkNvbG9yOycsXG5cbiAgICAgICAgICAgICd2b2lkIG1haW4odm9pZCl7JyxcbiAgICAgICAgICAgICcgICBnbF9Qb3NpdGlvbiA9IHZlYzQoKHByb2plY3Rpb25NYXRyaXggKiB0cmFuc2xhdGlvbk1hdHJpeCAqIHZlYzMoYVZlcnRleFBvc2l0aW9uLCAxLjApKS54eSwgMC4wLCAxLjApOycsXG4gICAgICAgICAgICAnICAgdkNvbG9yID0gYUNvbG9yICogdmVjNCh0aW50ICogYWxwaGEsIGFscGhhKTsnLFxuICAgICAgICAgICAgJ30nXG4gICAgICAgIF0uam9pbignXFxuJyksXG4gICAgICAgIC8vIGZyYWdtZW50IHNoYWRlclxuICAgICAgICBbXG4gICAgICAgICAgICAncHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7JyxcblxuICAgICAgICAgICAgJ3ZhcnlpbmcgdmVjNCB2Q29sb3I7JyxcblxuICAgICAgICAgICAgJ3ZvaWQgbWFpbih2b2lkKXsnLFxuICAgICAgICAgICAgJyAgIGdsX0ZyYWdDb2xvciA9IHZDb2xvcjsnLFxuICAgICAgICAgICAgJ30nXG4gICAgICAgIF0uam9pbignXFxuJylcbiAgICApO1xufVxuXG5QcmltaXRpdmVTaGFkZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShTaGFkZXIucHJvdG90eXBlKTtcblByaW1pdGl2ZVNoYWRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBQcmltaXRpdmVTaGFkZXI7XG5cbm1vZHVsZS5leHBvcnRzID0gUHJpbWl0aXZlU2hhZGVyO1xuIiwiLyoqXG4gKiBBbiBvYmplY3QgY29udGFpbmluZyBXZWJHTCBzcGVjaWZpYyBwcm9wZXJ0aWVzIHRvIGJlIHVzZWQgYnkgdGhlIFdlYkdMIHJlbmRlcmVyXG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIGdsIHtXZWJHTFJlbmRlcmluZ0NvbnRleHR9IHRoZSBjdXJyZW50IFdlYkdMIGRyYXdpbmcgY29udGV4dFxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gV2ViR0xHcmFwaGljc0RhdGEoZ2wpIHtcblxuICAgIC8qKlxuICAgICAqIFRoZSBjdXJyZW50IFdlYkdMIGRyYXdpbmcgY29udGV4dFxuICAgICAqXG4gICAgICogQG1lbWJlciB7V2ViR0xSZW5kZXJpbmdDb250ZXh0fVxuICAgICAqL1xuICAgIHRoaXMuZ2wgPSBnbDtcblxuICAgIC8vVE9ETyBkb2VzIHRoaXMgbmVlZCB0byBiZSBzcGxpdCBiZWZvcmUgdXBsb2Rpbmc/P1xuICAgIC8qKlxuICAgICAqIEFuIGFycmF5IG9mIGNvbG9yIGNvbXBvbmVudHMgKHIsZyxiKVxuICAgICAqIEBtZW1iZXIge251bWJlcltdfVxuICAgICAqL1xuICAgIHRoaXMuY29sb3IgPSBbMCwwLDBdOyAvLyBjb2xvciBzcGxpdCFcblxuICAgIC8qKlxuICAgICAqIEFuIGFycmF5IG9mIHBvaW50cyB0byBkcmF3XG4gICAgICogQG1lbWJlciB7UElYSS5Qb2ludFtdfVxuICAgICAqL1xuICAgIHRoaXMucG9pbnRzID0gW107XG5cbiAgICAvKipcbiAgICAgKiBUaGUgaW5kaWNlcyBvZiB0aGUgdmVydGljZXNcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJbXX1cbiAgICAgKi9cbiAgICB0aGlzLmluZGljZXMgPSBbXTtcbiAgICAvKipcbiAgICAgKiBUaGUgbWFpbiBidWZmZXJcbiAgICAgKiBAbWVtYmVyIHtXZWJHTEJ1ZmZlcn1cbiAgICAgKi9cbiAgICB0aGlzLmJ1ZmZlciA9IGdsLmNyZWF0ZUJ1ZmZlcigpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGluZGV4IGJ1ZmZlclxuICAgICAqIEBtZW1iZXIge1dlYkdMQnVmZmVyfVxuICAgICAqL1xuICAgIHRoaXMuaW5kZXhCdWZmZXIgPSBnbC5jcmVhdGVCdWZmZXIoKTtcblxuICAgIC8qKlxuICAgICAqIHRvZG8gQGFsdmluXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMubW9kZSA9IDE7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYWxwaGEgb2YgdGhlIGdyYXBoaWNzXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMuYWxwaGEgPSAxO1xuXG4gICAgLyoqXG4gICAgICogV2hldGhlciB0aGlzIGdyYXBoaWNzIGlzIGRpcnR5IG9yIG5vdFxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICovXG4gICAgdGhpcy5kaXJ0eSA9IHRydWU7XG5cbiAgICB0aGlzLmdsUG9pbnRzID0gbnVsbDtcbiAgICB0aGlzLmdsSW5kaWNlcyA9IG51bGw7XG59XG5cbldlYkdMR3JhcGhpY3NEYXRhLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFdlYkdMR3JhcGhpY3NEYXRhO1xubW9kdWxlLmV4cG9ydHMgPSBXZWJHTEdyYXBoaWNzRGF0YTtcblxuLyoqXG4gKiBSZXNldHMgdGhlIHZlcnRpY2VzIGFuZCB0aGUgaW5kaWNlc1xuICovXG5XZWJHTEdyYXBoaWNzRGF0YS5wcm90b3R5cGUucmVzZXQgPSBmdW5jdGlvbiAoKSB7XG4gICAgdGhpcy5wb2ludHMubGVuZ3RoID0gMDtcbiAgICB0aGlzLmluZGljZXMubGVuZ3RoID0gMDtcbn07XG5cbi8qKlxuICogQmluZHMgdGhlIGJ1ZmZlcnMgYW5kIHVwbG9hZHMgdGhlIGRhdGFcbiAqL1xuV2ViR0xHcmFwaGljc0RhdGEucHJvdG90eXBlLnVwbG9hZCA9IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgZ2wgPSB0aGlzLmdsO1xuXG4vLyAgICB0aGlzLmxhc3RJbmRleCA9IGdyYXBoaWNzLmdyYXBoaWNzRGF0YS5sZW5ndGg7XG4gICAgdGhpcy5nbFBvaW50cyA9IG5ldyBGbG9hdDMyQXJyYXkodGhpcy5wb2ludHMpO1xuXG4gICAgZ2wuYmluZEJ1ZmZlcihnbC5BUlJBWV9CVUZGRVIsIHRoaXMuYnVmZmVyKTtcbiAgICBnbC5idWZmZXJEYXRhKGdsLkFSUkFZX0JVRkZFUiwgdGhpcy5nbFBvaW50cywgZ2wuU1RBVElDX0RSQVcpO1xuXG4gICAgdGhpcy5nbEluZGljZXMgPSBuZXcgVWludDE2QXJyYXkodGhpcy5pbmRpY2VzKTtcblxuICAgIGdsLmJpbmRCdWZmZXIoZ2wuRUxFTUVOVF9BUlJBWV9CVUZGRVIsIHRoaXMuaW5kZXhCdWZmZXIpO1xuICAgIGdsLmJ1ZmZlckRhdGEoZ2wuRUxFTUVOVF9BUlJBWV9CVUZGRVIsIHRoaXMuZ2xJbmRpY2VzLCBnbC5TVEFUSUNfRFJBVyk7XG5cbiAgICB0aGlzLmRpcnR5ID0gZmFsc2U7XG59O1xuXG5XZWJHTEdyYXBoaWNzRGF0YS5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uICgpIHtcbiAgICB0aGlzLmNvbG9yID0gbnVsbDtcbiAgICB0aGlzLnBvaW50cyA9IG51bGw7XG4gICAgdGhpcy5pbmRpY2VzID0gbnVsbDtcblxuICAgIHRoaXMuZ2wuZGVsZXRlQnVmZmVyKHRoaXMuYnVmZmVyKTtcbiAgICB0aGlzLmdsLmRlbGV0ZUJ1ZmZlcih0aGlzLmluZGV4QnVmZmVyKTtcbiAgICBcbiAgICB0aGlzLmdsID0gbnVsbDtcblxuICAgIHRoaXMuYnVmZmVyID0gbnVsbDtcbiAgICB0aGlzLmluZGV4QnVmZmVyID0gbnVsbDtcblxuICAgIHRoaXMuZ2xQb2ludHMgPSBudWxsO1xuICAgIHRoaXMuZ2xJbmRpY2VzID0gbnVsbDtcbn07XG4iLCJ2YXIgYnVpbGRMaW5lID0gcmVxdWlyZSgnLi9idWlsZExpbmUnKSxcbiAgICB1dGlscyA9IHJlcXVpcmUoJy4uLy4uL3V0aWxzJyk7XG5cbi8qKlxuICogQnVpbGRzIGEgY2lyY2xlIHRvIGRyYXdcbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIGdyYXBoaWNzRGF0YSB7UElYSS5HcmFwaGljc30gVGhlIGdyYXBoaWNzIG9iamVjdCB0byBkcmF3XG4gKiBAcGFyYW0gd2ViR0xEYXRhIHtvYmplY3R9IGFuIG9iamVjdCBjb250YWluaW5nIGFsbCB0aGUgd2ViR0wtc3BlY2lmaWMgaW5mb3JtYXRpb24gdG8gY3JlYXRlIHRoaXMgc2hhcGVcbiAqL1xudmFyIGJ1aWxkQ2lyY2xlID0gZnVuY3Rpb24gKGdyYXBoaWNzRGF0YSwgd2ViR0xEYXRhKVxue1xuICAgIC8vIG5lZWQgdG8gY29udmVydCBwb2ludHMgdG8gYSBuaWNlIHJlZ3VsYXIgZGF0YVxuICAgIHZhciBjaXJjbGVEYXRhID0gZ3JhcGhpY3NEYXRhLnNoYXBlO1xuICAgIHZhciB4ID0gY2lyY2xlRGF0YS54O1xuICAgIHZhciB5ID0gY2lyY2xlRGF0YS55O1xuICAgIHZhciB3aWR0aDtcbiAgICB2YXIgaGVpZ2h0O1xuXG4gICAgLy8gVE9ETyAtIGJpdCBoYWNreT8/XG4gICAgaWYgKGdyYXBoaWNzRGF0YS50eXBlID09PSBDT05TVC5TSEFQRVMuQ0lSQylcbiAgICB7XG4gICAgICAgIHdpZHRoID0gY2lyY2xlRGF0YS5yYWRpdXM7XG4gICAgICAgIGhlaWdodCA9IGNpcmNsZURhdGEucmFkaXVzO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICB3aWR0aCA9IGNpcmNsZURhdGEud2lkdGg7XG4gICAgICAgIGhlaWdodCA9IGNpcmNsZURhdGEuaGVpZ2h0O1xuICAgIH1cblxuICAgIHZhciB0b3RhbFNlZ3MgPSBNYXRoLmZsb29yKDMwICogTWF0aC5zcXJ0KGNpcmNsZURhdGEucmFkaXVzKSkgfHwgTWF0aC5mbG9vcigxNSAqIE1hdGguc3FydChjaXJjbGVEYXRhLndpZHRoICsgY2lyY2xlRGF0YS5oZWlnaHQpKTtcbiAgICB2YXIgc2VnID0gKE1hdGguUEkgKiAyKSAvIHRvdGFsU2VncyA7XG5cbiAgICB2YXIgaSA9IDA7XG5cbiAgICBpZiAoZ3JhcGhpY3NEYXRhLmZpbGwpXG4gICAge1xuICAgICAgICB2YXIgY29sb3IgPSB1dGlscy5oZXgycmdiKGdyYXBoaWNzRGF0YS5maWxsQ29sb3IpO1xuICAgICAgICB2YXIgYWxwaGEgPSBncmFwaGljc0RhdGEuZmlsbEFscGhhO1xuXG4gICAgICAgIHZhciByID0gY29sb3JbMF0gKiBhbHBoYTtcbiAgICAgICAgdmFyIGcgPSBjb2xvclsxXSAqIGFscGhhO1xuICAgICAgICB2YXIgYiA9IGNvbG9yWzJdICogYWxwaGE7XG5cbiAgICAgICAgdmFyIHZlcnRzID0gd2ViR0xEYXRhLnBvaW50cztcbiAgICAgICAgdmFyIGluZGljZXMgPSB3ZWJHTERhdGEuaW5kaWNlcztcblxuICAgICAgICB2YXIgdmVjUG9zID0gdmVydHMubGVuZ3RoLzY7XG5cbiAgICAgICAgaW5kaWNlcy5wdXNoKHZlY1Bvcyk7XG5cbiAgICAgICAgZm9yIChpID0gMDsgaSA8IHRvdGFsU2VncyArIDEgOyBpKyspXG4gICAgICAgIHtcbiAgICAgICAgICAgIHZlcnRzLnB1c2goeCx5LCByLCBnLCBiLCBhbHBoYSk7XG5cbiAgICAgICAgICAgIHZlcnRzLnB1c2goeCArIE1hdGguc2luKHNlZyAqIGkpICogd2lkdGgsXG4gICAgICAgICAgICAgICAgICAgICAgIHkgKyBNYXRoLmNvcyhzZWcgKiBpKSAqIGhlaWdodCxcbiAgICAgICAgICAgICAgICAgICAgICAgciwgZywgYiwgYWxwaGEpO1xuXG4gICAgICAgICAgICBpbmRpY2VzLnB1c2godmVjUG9zKyssIHZlY1BvcysrKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGluZGljZXMucHVzaCh2ZWNQb3MtMSk7XG4gICAgfVxuXG4gICAgaWYgKGdyYXBoaWNzRGF0YS5saW5lV2lkdGgpXG4gICAge1xuICAgICAgICB2YXIgdGVtcFBvaW50cyA9IGdyYXBoaWNzRGF0YS5wb2ludHM7XG5cbiAgICAgICAgZ3JhcGhpY3NEYXRhLnBvaW50cyA9IFtdO1xuXG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCB0b3RhbFNlZ3MgKyAxOyBpKyspXG4gICAgICAgIHtcbiAgICAgICAgICAgIGdyYXBoaWNzRGF0YS5wb2ludHMucHVzaCh4ICsgTWF0aC5zaW4oc2VnICogaSkgKiB3aWR0aCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB5ICsgTWF0aC5jb3Moc2VnICogaSkgKiBoZWlnaHQpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5idWlsZExpbmUoZ3JhcGhpY3NEYXRhLCB3ZWJHTERhdGEpO1xuXG4gICAgICAgIGdyYXBoaWNzRGF0YS5wb2ludHMgPSB0ZW1wUG9pbnRzO1xuICAgIH1cbn07XG5cblxubW9kdWxlLmV4cG9ydHMgPSBidWlsZENpcmNsZTsiLCJ2YXIgYnVpbGRMaW5lID0gcmVxdWlyZSgnLi9idWlsZExpbmUnKSxcbiAgICB1dGlscyA9IHJlcXVpcmUoJy4uLy4uL3V0aWxzJyk7XG4gICAgXG5cblxuLyoqXG4gKiBCdWlsZHMgYSBjb21wbGV4IHBvbHlnb24gdG8gZHJhd1xuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0gZ3JhcGhpY3NEYXRhIHtQSVhJLkdyYXBoaWNzfSBUaGUgZ3JhcGhpY3Mgb2JqZWN0IGNvbnRhaW5pbmcgYWxsIHRoZSBuZWNlc3NhcnkgcHJvcGVydGllc1xuICogQHBhcmFtIHdlYkdMRGF0YSB7b2JqZWN0fSBhbiBvYmplY3QgY29udGFpbmluZyBhbGwgdGhlIHdlYkdMLXNwZWNpZmljIGluZm9ybWF0aW9uIHRvIGNyZWF0ZSB0aGlzIHNoYXBlXG4gKi9cbnZhciBidWlsZENvbXBsZXhQb2x5ID0gZnVuY3Rpb24gKGdyYXBoaWNzRGF0YSwgd2ViR0xEYXRhKVxue1xuICAgIC8vVE9ETyAtIG5vIG5lZWQgdG8gY29weSB0aGlzIGFzIGl0IGdldHMgdHVybmVkIGludG8gYSBGTG9hdDMyQXJyYXkgYW55d2F5cy4uXG4gICAgdmFyIHBvaW50cyA9IGdyYXBoaWNzRGF0YS5wb2ludHMuc2xpY2UoKTtcblxuICAgIGlmIChwb2ludHMubGVuZ3RoIDwgNilcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBnZXQgZmlyc3QgYW5kIGxhc3QgcG9pbnQuLiBmaWd1cmUgb3V0IHRoZSBtaWRkbGUhXG4gICAgdmFyIGluZGljZXMgPSB3ZWJHTERhdGEuaW5kaWNlcztcbiAgICB3ZWJHTERhdGEucG9pbnRzID0gcG9pbnRzO1xuICAgIHdlYkdMRGF0YS5hbHBoYSA9IGdyYXBoaWNzRGF0YS5maWxsQWxwaGE7XG4gICAgd2ViR0xEYXRhLmNvbG9yID0gdXRpbHMuaGV4MnJnYihncmFwaGljc0RhdGEuZmlsbENvbG9yKTtcblxuICAgIC8vIGNhbGNsYXRlIHRoZSBib3VuZHMuLlxuICAgIHZhciBtaW5YID0gSW5maW5pdHk7XG4gICAgdmFyIG1heFggPSAtSW5maW5pdHk7XG5cbiAgICB2YXIgbWluWSA9IEluZmluaXR5O1xuICAgIHZhciBtYXhZID0gLUluZmluaXR5O1xuXG4gICAgdmFyIHgseTtcblxuICAgIC8vIGdldCBzaXplLi5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHBvaW50cy5sZW5ndGg7IGkrPTIpXG4gICAge1xuICAgICAgICB4ID0gcG9pbnRzW2ldO1xuICAgICAgICB5ID0gcG9pbnRzW2krMV07XG5cbiAgICAgICAgbWluWCA9IHggPCBtaW5YID8geCA6IG1pblg7XG4gICAgICAgIG1heFggPSB4ID4gbWF4WCA/IHggOiBtYXhYO1xuXG4gICAgICAgIG1pblkgPSB5IDwgbWluWSA/IHkgOiBtaW5ZO1xuICAgICAgICBtYXhZID0geSA+IG1heFkgPyB5IDogbWF4WTtcbiAgICB9XG5cbiAgICAvLyBhZGQgYSBxdWFkIHRvIHRoZSBlbmQgY29zIHRoZXJlIGlzIG5vIHBvaW50IG1ha2luZyBhbm90aGVyIGJ1ZmZlciFcbiAgICBwb2ludHMucHVzaChtaW5YLCBtaW5ZLFxuICAgICAgICAgICAgICAgIG1heFgsIG1pblksXG4gICAgICAgICAgICAgICAgbWF4WCwgbWF4WSxcbiAgICAgICAgICAgICAgICBtaW5YLCBtYXhZKTtcblxuICAgIC8vIHB1c2ggYSBxdWFkIG9udG8gdGhlIGVuZC4uXG5cbiAgICAvL1RPRE8gLSB0aGlzIGFpbnQgbmVlZGVkIVxuICAgIHZhciBsZW5ndGggPSBwb2ludHMubGVuZ3RoIC8gMjtcbiAgICBmb3IgKGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspXG4gICAge1xuICAgICAgICBpbmRpY2VzLnB1c2goIGkgKTtcbiAgICB9XG5cbn07XG5cblxuXG5tb2R1bGUuZXhwb3J0cyA9IGJ1aWxkQ29tcGxleFBvbHk7IiwidmFyIG1hdGggPSByZXF1aXJlKCcuLi8uLi9tYXRoJyksXG4gICAgdXRpbHMgPSByZXF1aXJlKCcuLi8uLi91dGlscycpO1xuXG4vKipcbiAqIEJ1aWxkcyBhIGxpbmUgdG8gZHJhd1xuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0gZ3JhcGhpY3NEYXRhIHtQSVhJLkdyYXBoaWNzfSBUaGUgZ3JhcGhpY3Mgb2JqZWN0IGNvbnRhaW5pbmcgYWxsIHRoZSBuZWNlc3NhcnkgcHJvcGVydGllc1xuICogQHBhcmFtIHdlYkdMRGF0YSB7b2JqZWN0fSBhbiBvYmplY3QgY29udGFpbmluZyBhbGwgdGhlIHdlYkdMLXNwZWNpZmljIGluZm9ybWF0aW9uIHRvIGNyZWF0ZSB0aGlzIHNoYXBlXG4gKi9cbnZhciBidWlsZExpbmUgPSBmdW5jdGlvbiAoZ3JhcGhpY3NEYXRhLCB3ZWJHTERhdGEpXG57XG4gICAgLy8gVE9ETyBPUFRJTUlTRSFcbiAgICB2YXIgaSA9IDA7XG4gICAgdmFyIHBvaW50cyA9IGdyYXBoaWNzRGF0YS5wb2ludHM7XG5cbiAgICBpZiAocG9pbnRzLmxlbmd0aCA9PT0gMClcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgLy8gaWYgdGhlIGxpbmUgd2lkdGggaXMgYW4gb2RkIG51bWJlciBhZGQgMC41IHRvIGFsaWduIHRvIGEgd2hvbGUgcGl4ZWxcbiAgICAvLyBjb21tZW50aW5nIHRoaXMgb3V0IGZpeGVzICM3MTEgYW5kICMxNjIwXG4gICAgLy8gaWYgKGdyYXBoaWNzRGF0YS5saW5lV2lkdGglMilcbiAgICAvLyB7XG4gICAgLy8gICAgIGZvciAoaSA9IDA7IGkgPCBwb2ludHMubGVuZ3RoOyBpKyspXG4gICAgLy8gICAgIHtcbiAgICAvLyAgICAgICAgIHBvaW50c1tpXSArPSAwLjU7XG4gICAgLy8gICAgIH1cbiAgICAvLyB9XG5cbiAgICAvLyBnZXQgZmlyc3QgYW5kIGxhc3QgcG9pbnQuLiBmaWd1cmUgb3V0IHRoZSBtaWRkbGUhXG4gICAgdmFyIGZpcnN0UG9pbnQgPSBuZXcgbWF0aC5Qb2ludChwb2ludHNbMF0sIHBvaW50c1sxXSk7XG4gICAgdmFyIGxhc3RQb2ludCA9IG5ldyBtYXRoLlBvaW50KHBvaW50c1twb2ludHMubGVuZ3RoIC0gMl0sIHBvaW50c1twb2ludHMubGVuZ3RoIC0gMV0pO1xuXG4gICAgLy8gaWYgdGhlIGZpcnN0IHBvaW50IGlzIHRoZSBsYXN0IHBvaW50IC0gZ29ubmEgaGF2ZSBpc3N1ZXMgOilcbiAgICBpZiAoZmlyc3RQb2ludC54ID09PSBsYXN0UG9pbnQueCAmJiBmaXJzdFBvaW50LnkgPT09IGxhc3RQb2ludC55KVxuICAgIHtcbiAgICAgICAgLy8gbmVlZCB0byBjbG9uZSBhcyB3ZSBhcmUgZ29pbmcgdG8gc2xpZ2h0bHkgbW9kaWZ5IHRoZSBzaGFwZS4uXG4gICAgICAgIHBvaW50cyA9IHBvaW50cy5zbGljZSgpO1xuXG4gICAgICAgIHBvaW50cy5wb3AoKTtcbiAgICAgICAgcG9pbnRzLnBvcCgpO1xuXG4gICAgICAgIGxhc3RQb2ludCA9IG5ldyBtYXRoLlBvaW50KHBvaW50c1twb2ludHMubGVuZ3RoIC0gMl0sIHBvaW50c1twb2ludHMubGVuZ3RoIC0gMV0pO1xuXG4gICAgICAgIHZhciBtaWRQb2ludFggPSBsYXN0UG9pbnQueCArIChmaXJzdFBvaW50LnggLSBsYXN0UG9pbnQueCkgKjAuNTtcbiAgICAgICAgdmFyIG1pZFBvaW50WSA9IGxhc3RQb2ludC55ICsgKGZpcnN0UG9pbnQueSAtIGxhc3RQb2ludC55KSAqMC41O1xuXG4gICAgICAgIHBvaW50cy51bnNoaWZ0KG1pZFBvaW50WCwgbWlkUG9pbnRZKTtcbiAgICAgICAgcG9pbnRzLnB1c2gobWlkUG9pbnRYLCBtaWRQb2ludFkpO1xuICAgIH1cblxuICAgIHZhciB2ZXJ0cyA9IHdlYkdMRGF0YS5wb2ludHM7XG4gICAgdmFyIGluZGljZXMgPSB3ZWJHTERhdGEuaW5kaWNlcztcbiAgICB2YXIgbGVuZ3RoID0gcG9pbnRzLmxlbmd0aCAvIDI7XG4gICAgdmFyIGluZGV4Q291bnQgPSBwb2ludHMubGVuZ3RoO1xuICAgIHZhciBpbmRleFN0YXJ0ID0gdmVydHMubGVuZ3RoLzY7XG5cbiAgICAvLyBEUkFXIHRoZSBMaW5lXG4gICAgdmFyIHdpZHRoID0gZ3JhcGhpY3NEYXRhLmxpbmVXaWR0aCAvIDI7XG5cbiAgICAvLyBzb3J0IGNvbG9yXG4gICAgdmFyIGNvbG9yID0gdXRpbHMuaGV4MnJnYihncmFwaGljc0RhdGEubGluZUNvbG9yKTtcbiAgICB2YXIgYWxwaGEgPSBncmFwaGljc0RhdGEubGluZUFscGhhO1xuICAgIHZhciByID0gY29sb3JbMF0gKiBhbHBoYTtcbiAgICB2YXIgZyA9IGNvbG9yWzFdICogYWxwaGE7XG4gICAgdmFyIGIgPSBjb2xvclsyXSAqIGFscGhhO1xuXG4gICAgdmFyIHB4LCBweSwgcDF4LCBwMXksIHAyeCwgcDJ5LCBwM3gsIHAzeTtcbiAgICB2YXIgcGVycHgsIHBlcnB5LCBwZXJwMngsIHBlcnAyeSwgcGVycDN4LCBwZXJwM3k7XG4gICAgdmFyIGExLCBiMSwgYzEsIGEyLCBiMiwgYzI7XG4gICAgdmFyIGRlbm9tLCBwZGlzdCwgZGlzdDtcblxuICAgIHAxeCA9IHBvaW50c1swXTtcbiAgICBwMXkgPSBwb2ludHNbMV07XG5cbiAgICBwMnggPSBwb2ludHNbMl07XG4gICAgcDJ5ID0gcG9pbnRzWzNdO1xuXG4gICAgcGVycHggPSAtKHAxeSAtIHAyeSk7XG4gICAgcGVycHkgPSAgcDF4IC0gcDJ4O1xuXG4gICAgZGlzdCA9IE1hdGguc3FydChwZXJweCpwZXJweCArIHBlcnB5KnBlcnB5KTtcblxuICAgIHBlcnB4IC89IGRpc3Q7XG4gICAgcGVycHkgLz0gZGlzdDtcbiAgICBwZXJweCAqPSB3aWR0aDtcbiAgICBwZXJweSAqPSB3aWR0aDtcblxuICAgIC8vIHN0YXJ0XG4gICAgdmVydHMucHVzaChwMXggLSBwZXJweCAsIHAxeSAtIHBlcnB5LFxuICAgICAgICAgICAgICAgIHIsIGcsIGIsIGFscGhhKTtcblxuICAgIHZlcnRzLnB1c2gocDF4ICsgcGVycHggLCBwMXkgKyBwZXJweSxcbiAgICAgICAgICAgICAgICByLCBnLCBiLCBhbHBoYSk7XG5cbiAgICBmb3IgKGkgPSAxOyBpIDwgbGVuZ3RoLTE7IGkrKylcbiAgICB7XG4gICAgICAgIHAxeCA9IHBvaW50c1soaS0xKSoyXTtcbiAgICAgICAgcDF5ID0gcG9pbnRzWyhpLTEpKjIgKyAxXTtcblxuICAgICAgICBwMnggPSBwb2ludHNbKGkpKjJdO1xuICAgICAgICBwMnkgPSBwb2ludHNbKGkpKjIgKyAxXTtcblxuICAgICAgICBwM3ggPSBwb2ludHNbKGkrMSkqMl07XG4gICAgICAgIHAzeSA9IHBvaW50c1soaSsxKSoyICsgMV07XG5cbiAgICAgICAgcGVycHggPSAtKHAxeSAtIHAyeSk7XG4gICAgICAgIHBlcnB5ID0gcDF4IC0gcDJ4O1xuXG4gICAgICAgIGRpc3QgPSBNYXRoLnNxcnQocGVycHgqcGVycHggKyBwZXJweSpwZXJweSk7XG4gICAgICAgIHBlcnB4IC89IGRpc3Q7XG4gICAgICAgIHBlcnB5IC89IGRpc3Q7XG4gICAgICAgIHBlcnB4ICo9IHdpZHRoO1xuICAgICAgICBwZXJweSAqPSB3aWR0aDtcblxuICAgICAgICBwZXJwMnggPSAtKHAyeSAtIHAzeSk7XG4gICAgICAgIHBlcnAyeSA9IHAyeCAtIHAzeDtcblxuICAgICAgICBkaXN0ID0gTWF0aC5zcXJ0KHBlcnAyeCpwZXJwMnggKyBwZXJwMnkqcGVycDJ5KTtcbiAgICAgICAgcGVycDJ4IC89IGRpc3Q7XG4gICAgICAgIHBlcnAyeSAvPSBkaXN0O1xuICAgICAgICBwZXJwMnggKj0gd2lkdGg7XG4gICAgICAgIHBlcnAyeSAqPSB3aWR0aDtcblxuICAgICAgICBhMSA9ICgtcGVycHkgKyBwMXkpIC0gKC1wZXJweSArIHAyeSk7XG4gICAgICAgIGIxID0gKC1wZXJweCArIHAyeCkgLSAoLXBlcnB4ICsgcDF4KTtcbiAgICAgICAgYzEgPSAoLXBlcnB4ICsgcDF4KSAqICgtcGVycHkgKyBwMnkpIC0gKC1wZXJweCArIHAyeCkgKiAoLXBlcnB5ICsgcDF5KTtcbiAgICAgICAgYTIgPSAoLXBlcnAyeSArIHAzeSkgLSAoLXBlcnAyeSArIHAyeSk7XG4gICAgICAgIGIyID0gKC1wZXJwMnggKyBwMngpIC0gKC1wZXJwMnggKyBwM3gpO1xuICAgICAgICBjMiA9ICgtcGVycDJ4ICsgcDN4KSAqICgtcGVycDJ5ICsgcDJ5KSAtICgtcGVycDJ4ICsgcDJ4KSAqICgtcGVycDJ5ICsgcDN5KTtcblxuICAgICAgICBkZW5vbSA9IGExKmIyIC0gYTIqYjE7XG5cbiAgICAgICAgaWYgKE1hdGguYWJzKGRlbm9tKSA8IDAuMSApXG4gICAgICAgIHtcblxuICAgICAgICAgICAgZGVub20rPTEwLjE7XG4gICAgICAgICAgICB2ZXJ0cy5wdXNoKHAyeCAtIHBlcnB4ICwgcDJ5IC0gcGVycHksXG4gICAgICAgICAgICAgICAgciwgZywgYiwgYWxwaGEpO1xuXG4gICAgICAgICAgICB2ZXJ0cy5wdXNoKHAyeCArIHBlcnB4ICwgcDJ5ICsgcGVycHksXG4gICAgICAgICAgICAgICAgciwgZywgYiwgYWxwaGEpO1xuXG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHB4ID0gKGIxKmMyIC0gYjIqYzEpL2Rlbm9tO1xuICAgICAgICBweSA9IChhMipjMSAtIGExKmMyKS9kZW5vbTtcblxuXG4gICAgICAgIHBkaXN0ID0gKHB4IC1wMngpICogKHB4IC1wMngpICsgKHB5IC1wMnkpICogKHB5IC1wMnkpO1xuXG5cbiAgICAgICAgaWYgKHBkaXN0ID4gMTQwICogMTQwKVxuICAgICAgICB7XG4gICAgICAgICAgICBwZXJwM3ggPSBwZXJweCAtIHBlcnAyeDtcbiAgICAgICAgICAgIHBlcnAzeSA9IHBlcnB5IC0gcGVycDJ5O1xuXG4gICAgICAgICAgICBkaXN0ID0gTWF0aC5zcXJ0KHBlcnAzeCpwZXJwM3ggKyBwZXJwM3kqcGVycDN5KTtcbiAgICAgICAgICAgIHBlcnAzeCAvPSBkaXN0O1xuICAgICAgICAgICAgcGVycDN5IC89IGRpc3Q7XG4gICAgICAgICAgICBwZXJwM3ggKj0gd2lkdGg7XG4gICAgICAgICAgICBwZXJwM3kgKj0gd2lkdGg7XG5cbiAgICAgICAgICAgIHZlcnRzLnB1c2gocDJ4IC0gcGVycDN4LCBwMnkgLXBlcnAzeSk7XG4gICAgICAgICAgICB2ZXJ0cy5wdXNoKHIsIGcsIGIsIGFscGhhKTtcblxuICAgICAgICAgICAgdmVydHMucHVzaChwMnggKyBwZXJwM3gsIHAyeSArcGVycDN5KTtcbiAgICAgICAgICAgIHZlcnRzLnB1c2gociwgZywgYiwgYWxwaGEpO1xuXG4gICAgICAgICAgICB2ZXJ0cy5wdXNoKHAyeCAtIHBlcnAzeCwgcDJ5IC1wZXJwM3kpO1xuICAgICAgICAgICAgdmVydHMucHVzaChyLCBnLCBiLCBhbHBoYSk7XG5cbiAgICAgICAgICAgIGluZGV4Q291bnQrKztcbiAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgIHtcblxuICAgICAgICAgICAgdmVydHMucHVzaChweCAsIHB5KTtcbiAgICAgICAgICAgIHZlcnRzLnB1c2gociwgZywgYiwgYWxwaGEpO1xuXG4gICAgICAgICAgICB2ZXJ0cy5wdXNoKHAyeCAtIChweC1wMngpLCBwMnkgLSAocHkgLSBwMnkpKTtcbiAgICAgICAgICAgIHZlcnRzLnB1c2gociwgZywgYiwgYWxwaGEpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcDF4ID0gcG9pbnRzWyhsZW5ndGgtMikqMl07XG4gICAgcDF5ID0gcG9pbnRzWyhsZW5ndGgtMikqMiArIDFdO1xuXG4gICAgcDJ4ID0gcG9pbnRzWyhsZW5ndGgtMSkqMl07XG4gICAgcDJ5ID0gcG9pbnRzWyhsZW5ndGgtMSkqMiArIDFdO1xuXG4gICAgcGVycHggPSAtKHAxeSAtIHAyeSk7XG4gICAgcGVycHkgPSBwMXggLSBwMng7XG5cbiAgICBkaXN0ID0gTWF0aC5zcXJ0KHBlcnB4KnBlcnB4ICsgcGVycHkqcGVycHkpO1xuICAgIHBlcnB4IC89IGRpc3Q7XG4gICAgcGVycHkgLz0gZGlzdDtcbiAgICBwZXJweCAqPSB3aWR0aDtcbiAgICBwZXJweSAqPSB3aWR0aDtcblxuICAgIHZlcnRzLnB1c2gocDJ4IC0gcGVycHggLCBwMnkgLSBwZXJweSk7XG4gICAgdmVydHMucHVzaChyLCBnLCBiLCBhbHBoYSk7XG5cbiAgICB2ZXJ0cy5wdXNoKHAyeCArIHBlcnB4ICwgcDJ5ICsgcGVycHkpO1xuICAgIHZlcnRzLnB1c2gociwgZywgYiwgYWxwaGEpO1xuXG4gICAgaW5kaWNlcy5wdXNoKGluZGV4U3RhcnQpO1xuXG4gICAgZm9yIChpID0gMDsgaSA8IGluZGV4Q291bnQ7IGkrKylcbiAgICB7XG4gICAgICAgIGluZGljZXMucHVzaChpbmRleFN0YXJ0KyspO1xuICAgIH1cblxuICAgIGluZGljZXMucHVzaChpbmRleFN0YXJ0LTEpO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBidWlsZExpbmU7IiwidmFyIHV0aWxzID0gcmVxdWlyZSgnLi4vLi4vdXRpbHMnKTtcblxuLyoqXG4gKiBCdWlsZHMgYSBwb2x5Z29uIHRvIGRyYXdcbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIGdyYXBoaWNzRGF0YSB7UElYSS5XZWJHTEdyYXBoaWNzRGF0YX0gVGhlIGdyYXBoaWNzIG9iamVjdCBjb250YWluaW5nIGFsbCB0aGUgbmVjZXNzYXJ5IHByb3BlcnRpZXNcbiAqIEBwYXJhbSB3ZWJHTERhdGEge29iamVjdH0gYW4gb2JqZWN0IGNvbnRhaW5pbmcgYWxsIHRoZSB3ZWJHTC1zcGVjaWZpYyBpbmZvcm1hdGlvbiB0byBjcmVhdGUgdGhpcyBzaGFwZVxuICovXG52YXIgYnVpbGRQb2x5ID0gZnVuY3Rpb24gKGdyYXBoaWNzRGF0YSwgd2ViR0xEYXRhKVxue1xuICAgIHZhciBwb2ludHMgPSBncmFwaGljc0RhdGEucG9pbnRzO1xuXG4gICAgaWYgKHBvaW50cy5sZW5ndGggPCA2KVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIGdldCBmaXJzdCBhbmQgbGFzdCBwb2ludC4uIGZpZ3VyZSBvdXQgdGhlIG1pZGRsZSFcbiAgICB2YXIgdmVydHMgPSB3ZWJHTERhdGEucG9pbnRzO1xuICAgIHZhciBpbmRpY2VzID0gd2ViR0xEYXRhLmluZGljZXM7XG5cbiAgICB2YXIgbGVuZ3RoID0gcG9pbnRzLmxlbmd0aCAvIDI7XG5cbiAgICAvLyBzb3J0IGNvbG9yXG4gICAgdmFyIGNvbG9yID0gdXRpbHMuaGV4MnJnYihncmFwaGljc0RhdGEuZmlsbENvbG9yKTtcbiAgICB2YXIgYWxwaGEgPSBncmFwaGljc0RhdGEuZmlsbEFscGhhO1xuICAgIHZhciByID0gY29sb3JbMF0gKiBhbHBoYTtcbiAgICB2YXIgZyA9IGNvbG9yWzFdICogYWxwaGE7XG4gICAgdmFyIGIgPSBjb2xvclsyXSAqIGFscGhhO1xuXG4gICAgdmFyIHRyaWFuZ2xlcyA9IGVhcmN1dChwb2ludHMsIG51bGwsIDIpO1xuXG4gICAgaWYgKCF0cmlhbmdsZXMpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHZhciB2ZXJ0UG9zID0gdmVydHMubGVuZ3RoIC8gNjtcblxuICAgIHZhciBpID0gMDtcblxuICAgIGZvciAoaSA9IDA7IGkgPCB0cmlhbmdsZXMubGVuZ3RoOyBpKz0zKVxuICAgIHtcbiAgICAgICAgaW5kaWNlcy5wdXNoKHRyaWFuZ2xlc1tpXSArIHZlcnRQb3MpO1xuICAgICAgICBpbmRpY2VzLnB1c2godHJpYW5nbGVzW2ldICsgdmVydFBvcyk7XG4gICAgICAgIGluZGljZXMucHVzaCh0cmlhbmdsZXNbaSsxXSArIHZlcnRQb3MpO1xuICAgICAgICBpbmRpY2VzLnB1c2godHJpYW5nbGVzW2krMl0gK3ZlcnRQb3MpO1xuICAgICAgICBpbmRpY2VzLnB1c2godHJpYW5nbGVzW2krMl0gKyB2ZXJ0UG9zKTtcbiAgICB9XG5cbiAgICBmb3IgKGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspXG4gICAge1xuICAgICAgICB2ZXJ0cy5wdXNoKHBvaW50c1tpICogMl0sIHBvaW50c1tpICogMiArIDFdLFxuICAgICAgICAgICAgICAgICAgIHIsIGcsIGIsIGFscGhhKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdHJ1ZTtcbn07XG5cblxubW9kdWxlLmV4cG9ydHMgPSBidWlsZFBvbHk7XG4iLCJ2YXIgYnVpbGRMaW5lID0gcmVxdWlyZSgnLi9idWlsZExpbmUnKSxcbiAgICB1dGlscyA9IHJlcXVpcmUoJy4uLy4uL3V0aWxzJyk7XG5cbi8qKlxuICogQnVpbGRzIGEgcmVjdGFuZ2xlIHRvIGRyYXdcbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIGdyYXBoaWNzRGF0YSB7UElYSS5HcmFwaGljc30gVGhlIGdyYXBoaWNzIG9iamVjdCBjb250YWluaW5nIGFsbCB0aGUgbmVjZXNzYXJ5IHByb3BlcnRpZXNcbiAqIEBwYXJhbSB3ZWJHTERhdGEge29iamVjdH0gYW4gb2JqZWN0IGNvbnRhaW5pbmcgYWxsIHRoZSB3ZWJHTC1zcGVjaWZpYyBpbmZvcm1hdGlvbiB0byBjcmVhdGUgdGhpcyBzaGFwZVxuICovXG52YXIgYnVpbGRSZWN0YW5nbGUgPSBmdW5jdGlvbiAoZ3JhcGhpY3NEYXRhLCB3ZWJHTERhdGEpXG57XG4gICAgLy8gLS0tIC8vXG4gICAgLy8gbmVlZCB0byBjb252ZXJ0IHBvaW50cyB0byBhIG5pY2UgcmVndWxhciBkYXRhXG4gICAgLy9cbiAgICB2YXIgcmVjdERhdGEgPSBncmFwaGljc0RhdGEuc2hhcGU7XG4gICAgdmFyIHggPSByZWN0RGF0YS54O1xuICAgIHZhciB5ID0gcmVjdERhdGEueTtcbiAgICB2YXIgd2lkdGggPSByZWN0RGF0YS53aWR0aDtcbiAgICB2YXIgaGVpZ2h0ID0gcmVjdERhdGEuaGVpZ2h0O1xuXG4gICAgaWYgKGdyYXBoaWNzRGF0YS5maWxsKVxuICAgIHtcbiAgICAgICAgdmFyIGNvbG9yID0gdXRpbHMuaGV4MnJnYihncmFwaGljc0RhdGEuZmlsbENvbG9yKTtcbiAgICAgICAgdmFyIGFscGhhID0gZ3JhcGhpY3NEYXRhLmZpbGxBbHBoYTtcblxuICAgICAgICB2YXIgciA9IGNvbG9yWzBdICogYWxwaGE7XG4gICAgICAgIHZhciBnID0gY29sb3JbMV0gKiBhbHBoYTtcbiAgICAgICAgdmFyIGIgPSBjb2xvclsyXSAqIGFscGhhO1xuXG4gICAgICAgIHZhciB2ZXJ0cyA9IHdlYkdMRGF0YS5wb2ludHM7XG4gICAgICAgIHZhciBpbmRpY2VzID0gd2ViR0xEYXRhLmluZGljZXM7XG5cbiAgICAgICAgdmFyIHZlcnRQb3MgPSB2ZXJ0cy5sZW5ndGgvNjtcblxuICAgICAgICAvLyBzdGFydFxuICAgICAgICB2ZXJ0cy5wdXNoKHgsIHkpO1xuICAgICAgICB2ZXJ0cy5wdXNoKHIsIGcsIGIsIGFscGhhKTtcblxuICAgICAgICB2ZXJ0cy5wdXNoKHggKyB3aWR0aCwgeSk7XG4gICAgICAgIHZlcnRzLnB1c2gociwgZywgYiwgYWxwaGEpO1xuXG4gICAgICAgIHZlcnRzLnB1c2goeCAsIHkgKyBoZWlnaHQpO1xuICAgICAgICB2ZXJ0cy5wdXNoKHIsIGcsIGIsIGFscGhhKTtcblxuICAgICAgICB2ZXJ0cy5wdXNoKHggKyB3aWR0aCwgeSArIGhlaWdodCk7XG4gICAgICAgIHZlcnRzLnB1c2gociwgZywgYiwgYWxwaGEpO1xuXG4gICAgICAgIC8vIGluc2VydCAyIGRlYWQgdHJpYW5nbGVzLi5cbiAgICAgICAgaW5kaWNlcy5wdXNoKHZlcnRQb3MsIHZlcnRQb3MsIHZlcnRQb3MrMSwgdmVydFBvcysyLCB2ZXJ0UG9zKzMsIHZlcnRQb3MrMyk7XG4gICAgfVxuXG4gICAgaWYgKGdyYXBoaWNzRGF0YS5saW5lV2lkdGgpXG4gICAge1xuICAgICAgICB2YXIgdGVtcFBvaW50cyA9IGdyYXBoaWNzRGF0YS5wb2ludHM7XG5cbiAgICAgICAgZ3JhcGhpY3NEYXRhLnBvaW50cyA9IFt4LCB5LFxuICAgICAgICAgICAgICAgICAgeCArIHdpZHRoLCB5LFxuICAgICAgICAgICAgICAgICAgeCArIHdpZHRoLCB5ICsgaGVpZ2h0LFxuICAgICAgICAgICAgICAgICAgeCwgeSArIGhlaWdodCxcbiAgICAgICAgICAgICAgICAgIHgsIHldO1xuXG5cbiAgICAgICAgYnVpbGRMaW5lKGdyYXBoaWNzRGF0YSwgd2ViR0xEYXRhKTtcblxuICAgICAgICBncmFwaGljc0RhdGEucG9pbnRzID0gdGVtcFBvaW50cztcbiAgICB9XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGJ1aWxkUmVjdGFuZ2xlOyIsInZhciBidWlsZExpbmUgPSByZXF1aXJlKCcuL2J1aWxkTGluZScpLFxuICAgIHV0aWxzID0gcmVxdWlyZSgnLi4vLi4vdXRpbHMnKTtcbiAgICBcbi8qKlxuICogQnVpbGRzIGEgcm91bmRlZCByZWN0YW5nbGUgdG8gZHJhd1xuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0gZ3JhcGhpY3NEYXRhIHtQSVhJLkdyYXBoaWNzfSBUaGUgZ3JhcGhpY3Mgb2JqZWN0IGNvbnRhaW5pbmcgYWxsIHRoZSBuZWNlc3NhcnkgcHJvcGVydGllc1xuICogQHBhcmFtIHdlYkdMRGF0YSB7b2JqZWN0fSBhbiBvYmplY3QgY29udGFpbmluZyBhbGwgdGhlIHdlYkdMLXNwZWNpZmljIGluZm9ybWF0aW9uIHRvIGNyZWF0ZSB0aGlzIHNoYXBlXG4gKi9cbmJ1aWxkUm91bmRlZFJlY3RhbmdsZSA9IGZ1bmN0aW9uIChncmFwaGljc0RhdGEsIHdlYkdMRGF0YSlcbntcbiAgICB2YXIgcnJlY3REYXRhID0gZ3JhcGhpY3NEYXRhLnNoYXBlO1xuICAgIHZhciB4ID0gcnJlY3REYXRhLng7XG4gICAgdmFyIHkgPSBycmVjdERhdGEueTtcbiAgICB2YXIgd2lkdGggPSBycmVjdERhdGEud2lkdGg7XG4gICAgdmFyIGhlaWdodCA9IHJyZWN0RGF0YS5oZWlnaHQ7XG5cbiAgICB2YXIgcmFkaXVzID0gcnJlY3REYXRhLnJhZGl1cztcblxuICAgIHZhciByZWNQb2ludHMgPSBbXTtcbiAgICByZWNQb2ludHMucHVzaCh4LCB5ICsgcmFkaXVzKTtcbiAgICB0aGlzLnF1YWRyYXRpY0JlemllckN1cnZlKHgsIHkgKyBoZWlnaHQgLSByYWRpdXMsIHgsIHkgKyBoZWlnaHQsIHggKyByYWRpdXMsIHkgKyBoZWlnaHQsIHJlY1BvaW50cyk7XG4gICAgdGhpcy5xdWFkcmF0aWNCZXppZXJDdXJ2ZSh4ICsgd2lkdGggLSByYWRpdXMsIHkgKyBoZWlnaHQsIHggKyB3aWR0aCwgeSArIGhlaWdodCwgeCArIHdpZHRoLCB5ICsgaGVpZ2h0IC0gcmFkaXVzLCByZWNQb2ludHMpO1xuICAgIHRoaXMucXVhZHJhdGljQmV6aWVyQ3VydmUoeCArIHdpZHRoLCB5ICsgcmFkaXVzLCB4ICsgd2lkdGgsIHksIHggKyB3aWR0aCAtIHJhZGl1cywgeSwgcmVjUG9pbnRzKTtcbiAgICB0aGlzLnF1YWRyYXRpY0JlemllckN1cnZlKHggKyByYWRpdXMsIHksIHgsIHksIHgsIHkgKyByYWRpdXMgKyAwLjAwMDAwMDAwMDEsIHJlY1BvaW50cyk7XG5cbiAgICAvLyB0aGlzIHRpbnkgbnVtYmVyIGRlYWxzIHdpdGggdGhlIGlzc3VlIHRoYXQgb2NjdXJzIHdoZW4gcG9pbnRzIG92ZXJsYXAgYW5kIGVhcmN1dCBmYWlscyB0byB0cmlhbmd1bGF0ZSB0aGUgaXRlbS5cbiAgICAvLyBUT0RPIC0gZml4IHRoaXMgcHJvcGVybHksIHRoaXMgaXMgbm90IHZlcnkgZWxlZ2FudC4uIGJ1dCBpdCB3b3JrcyBmb3Igbm93LlxuXG4gICAgaWYgKGdyYXBoaWNzRGF0YS5maWxsKVxuICAgIHtcbiAgICAgICAgdmFyIGNvbG9yID0gdXRpbHMuaGV4MnJnYihncmFwaGljc0RhdGEuZmlsbENvbG9yKTtcbiAgICAgICAgdmFyIGFscGhhID0gZ3JhcGhpY3NEYXRhLmZpbGxBbHBoYTtcblxuICAgICAgICB2YXIgciA9IGNvbG9yWzBdICogYWxwaGE7XG4gICAgICAgIHZhciBnID0gY29sb3JbMV0gKiBhbHBoYTtcbiAgICAgICAgdmFyIGIgPSBjb2xvclsyXSAqIGFscGhhO1xuXG4gICAgICAgIHZhciB2ZXJ0cyA9IHdlYkdMRGF0YS5wb2ludHM7XG4gICAgICAgIHZhciBpbmRpY2VzID0gd2ViR0xEYXRhLmluZGljZXM7XG5cbiAgICAgICAgdmFyIHZlY1BvcyA9IHZlcnRzLmxlbmd0aC82O1xuXG4gICAgICAgIHZhciB0cmlhbmdsZXMgPSBlYXJjdXQocmVjUG9pbnRzLCBudWxsLCAyKTtcblxuICAgICAgICB2YXIgaSA9IDA7XG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCB0cmlhbmdsZXMubGVuZ3RoOyBpKz0zKVxuICAgICAgICB7XG4gICAgICAgICAgICBpbmRpY2VzLnB1c2godHJpYW5nbGVzW2ldICsgdmVjUG9zKTtcbiAgICAgICAgICAgIGluZGljZXMucHVzaCh0cmlhbmdsZXNbaV0gKyB2ZWNQb3MpO1xuICAgICAgICAgICAgaW5kaWNlcy5wdXNoKHRyaWFuZ2xlc1tpKzFdICsgdmVjUG9zKTtcbiAgICAgICAgICAgIGluZGljZXMucHVzaCh0cmlhbmdsZXNbaSsyXSArIHZlY1Bvcyk7XG4gICAgICAgICAgICBpbmRpY2VzLnB1c2godHJpYW5nbGVzW2krMl0gKyB2ZWNQb3MpO1xuICAgICAgICB9XG5cbiAgICAgICAgZm9yIChpID0gMDsgaSA8IHJlY1BvaW50cy5sZW5ndGg7IGkrKylcbiAgICAgICAge1xuICAgICAgICAgICAgdmVydHMucHVzaChyZWNQb2ludHNbaV0sIHJlY1BvaW50c1srK2ldLCByLCBnLCBiLCBhbHBoYSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoZ3JhcGhpY3NEYXRhLmxpbmVXaWR0aClcbiAgICB7XG4gICAgICAgIHZhciB0ZW1wUG9pbnRzID0gZ3JhcGhpY3NEYXRhLnBvaW50cztcblxuICAgICAgICBncmFwaGljc0RhdGEucG9pbnRzID0gcmVjUG9pbnRzO1xuXG4gICAgICAgIHRoaXMuYnVpbGRMaW5lKGdyYXBoaWNzRGF0YSwgd2ViR0xEYXRhKTtcblxuICAgICAgICBncmFwaGljc0RhdGEucG9pbnRzID0gdGVtcFBvaW50cztcbiAgICB9XG59O1xuXG4vKipcbiAqIENhbGN1bGF0ZSB0aGUgcG9pbnRzIGZvciBhIHF1YWRyYXRpYyBiZXppZXIgY3VydmUuIChoZWxwZXIgZnVuY3Rpb24uLilcbiAqIEJhc2VkIG9uOiBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy83ODUwOTcvaG93LWRvLWktaW1wbGVtZW50LWEtYmV6aWVyLWN1cnZlLWluLWNcbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIGZyb21YIHtudW1iZXJ9IE9yaWdpbiBwb2ludCB4XG4gKiBAcGFyYW0gZnJvbVkge251bWJlcn0gT3JpZ2luIHBvaW50IHhcbiAqIEBwYXJhbSBjcFgge251bWJlcn0gQ29udHJvbCBwb2ludCB4XG4gKiBAcGFyYW0gY3BZIHtudW1iZXJ9IENvbnRyb2wgcG9pbnQgeVxuICogQHBhcmFtIHRvWCB7bnVtYmVyfSBEZXN0aW5hdGlvbiBwb2ludCB4XG4gKiBAcGFyYW0gdG9ZIHtudW1iZXJ9IERlc3RpbmF0aW9uIHBvaW50IHlcbiAqIEBwYXJhbSBbb3V0XSB7bnVtYmVyW119IFRoZSBvdXRwdXQgYXJyYXkgdG8gYWRkIHBvaW50cyBpbnRvLiBJZiBub3QgcGFzc2VkLCBhIG5ldyBhcnJheSBpcyBjcmVhdGVkLlxuICogQHJldHVybiB7bnVtYmVyW119IGFuIGFycmF5IG9mIHBvaW50c1xuICovXG5xdWFkcmF0aWNCZXppZXJDdXJ2ZSA9IGZ1bmN0aW9uIChmcm9tWCwgZnJvbVksIGNwWCwgY3BZLCB0b1gsIHRvWSwgb3V0KVxue1xuICAgIHZhciB4YSxcbiAgICAgICAgeWEsXG4gICAgICAgIHhiLFxuICAgICAgICB5YixcbiAgICAgICAgeCxcbiAgICAgICAgeSxcbiAgICAgICAgbiA9IDIwLFxuICAgICAgICBwb2ludHMgPSBvdXQgfHwgW107XG5cbiAgICBmdW5jdGlvbiBnZXRQdChuMSAsIG4yLCBwZXJjKSB7XG4gICAgICAgIHZhciBkaWZmID0gbjIgLSBuMTtcblxuICAgICAgICByZXR1cm4gbjEgKyAoIGRpZmYgKiBwZXJjICk7XG4gICAgfVxuXG4gICAgdmFyIGogPSAwO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDw9IG47IGkrKyApIHtcbiAgICAgICAgaiA9IGkgLyBuO1xuXG4gICAgICAgIC8vIFRoZSBHcmVlbiBMaW5lXG4gICAgICAgIHhhID0gZ2V0UHQoIGZyb21YICwgY3BYICwgaiApO1xuICAgICAgICB5YSA9IGdldFB0KCBmcm9tWSAsIGNwWSAsIGogKTtcbiAgICAgICAgeGIgPSBnZXRQdCggY3BYICwgdG9YICwgaiApO1xuICAgICAgICB5YiA9IGdldFB0KCBjcFkgLCB0b1kgLCBqICk7XG5cbiAgICAgICAgLy8gVGhlIEJsYWNrIERvdFxuICAgICAgICB4ID0gZ2V0UHQoIHhhICwgeGIgLCBqICk7XG4gICAgICAgIHkgPSBnZXRQdCggeWEgLCB5YiAsIGogKTtcblxuICAgICAgICBwb2ludHMucHVzaCh4LCB5KTtcbiAgICB9XG5cbiAgICByZXR1cm4gcG9pbnRzO1xufTtcblxuXG5tb2R1bGUuZXhwb3J0cyA9IGJ1aWxkUm91bmRlZFJlY3RhbmdsZTsiLCIvKipcbiAqIEBmaWxlICAgICAgICBNYWluIGV4cG9ydCBvZiB0aGUgUElYSSBjb3JlIGxpYnJhcnlcbiAqIEBhdXRob3IgICAgICBNYXQgR3JvdmVzIDxtYXRAZ29vZGJveWRpZ2l0YWwuY29tPlxuICogQGNvcHlyaWdodCAgIDIwMTMtMjAxNSBHb29kQm95RGlnaXRhbFxuICogQGxpY2Vuc2UgICAgIHtAbGluayBodHRwczovL2dpdGh1Yi5jb20vcGl4aWpzL3BpeGkuanMvYmxvYi9tYXN0ZXIvTElDRU5TRXxNSVQgTGljZW5zZX1cbiAqL1xuXG4vKipcbiAqIEBuYW1lc3BhY2UgUElYSVxuICovXG4vLyBleHBvcnQgY29yZSBhbmQgY29uc3QuIFdlIGFzc2lnbiBjb3JlIHRvIGNvbnN0IHNvIHRoYXQgdGhlIG5vbi1yZWZlcmVuY2UgdHlwZXMgaW4gY29uc3QgcmVtYWluIGluLXRhY3RcbnZhciBjb3JlID0gbW9kdWxlLmV4cG9ydHMgPSBPYmplY3QuYXNzaWduKHJlcXVpcmUoJy4vY29uc3QnKSwgcmVxdWlyZSgnLi9tYXRoJyksIHtcbiAgICAvLyB1dGlsc1xuICAgIHV0aWxzOiByZXF1aXJlKCcuL3V0aWxzJyksXG4gICAgdGlja2VyOiByZXF1aXJlKCcuL3RpY2tlcicpLFxuXG4gICAgLy8gZGlzcGxheVxuICAgIERpc3BsYXlPYmplY3Q6ICAgICAgICAgIHJlcXVpcmUoJy4vZGlzcGxheS9EaXNwbGF5T2JqZWN0JyksXG4gICAgQ29udGFpbmVyOiAgICAgICAgICAgICAgcmVxdWlyZSgnLi9kaXNwbGF5L0NvbnRhaW5lcicpLFxuXG4gICAgLy8gc3ByaXRlc1xuICAgIFNwcml0ZTogICAgICAgICAgICAgICAgIHJlcXVpcmUoJy4vc3ByaXRlcy9TcHJpdGUnKSxcbiAgICBQYXJ0aWNsZUNvbnRhaW5lcjogICAgICByZXF1aXJlKCcuL3BhcnRpY2xlcy9QYXJ0aWNsZUNvbnRhaW5lcicpLFxuICAgIFNwcml0ZVJlbmRlcmVyOiAgICAgICAgIHJlcXVpcmUoJy4vc3ByaXRlcy93ZWJnbC9TcHJpdGVSZW5kZXJlcicpLFxuICAgIFBhcnRpY2xlUmVuZGVyZXI6ICAgICAgIHJlcXVpcmUoJy4vcGFydGljbGVzL3dlYmdsL1BhcnRpY2xlUmVuZGVyZXInKSxcblxuICAgIC8vIHRleHRcbiAgICBUZXh0OiAgICAgICAgICAgICAgICAgICByZXF1aXJlKCcuL3RleHQvVGV4dCcpLFxuXG4gICAgLy8gcHJpbWl0aXZlc1xuICAgIEdyYXBoaWNzOiAgICAgICAgICAgICAgIHJlcXVpcmUoJy4vZ3JhcGhpY3MvR3JhcGhpY3MnKSxcbiAgICBHcmFwaGljc0RhdGE6ICAgICAgICAgICByZXF1aXJlKCcuL2dyYXBoaWNzL0dyYXBoaWNzRGF0YScpLFxuICAgIEdyYXBoaWNzUmVuZGVyZXI6ICAgICAgIHJlcXVpcmUoJy4vZ3JhcGhpY3Mvd2ViZ2wvR3JhcGhpY3NSZW5kZXJlcicpLFxuXG4gICAgLy8gdGV4dHVyZXNcbiAgICBUZXh0dXJlOiAgICAgICAgICAgICAgICByZXF1aXJlKCcuL3RleHR1cmVzL1RleHR1cmUnKSxcbiAgICBCYXNlVGV4dHVyZTogICAgICAgICAgICByZXF1aXJlKCcuL3RleHR1cmVzL0Jhc2VUZXh0dXJlJyksXG4gICAgUmVuZGVyVGV4dHVyZTogICAgICAgICAgcmVxdWlyZSgnLi90ZXh0dXJlcy9SZW5kZXJUZXh0dXJlJyksXG4gICAgVmlkZW9CYXNlVGV4dHVyZTogICAgICAgcmVxdWlyZSgnLi90ZXh0dXJlcy9WaWRlb0Jhc2VUZXh0dXJlJyksXG4gICAgVGV4dHVyZVV2czogICAgICAgICAgICAgcmVxdWlyZSgnLi90ZXh0dXJlcy9UZXh0dXJlVXZzJyksXG5cbiAgICAvLyByZW5kZXJlcnMgLSBjYW52YXNcbiAgICBDYW52YXNSZW5kZXJlcjogICAgICAgICByZXF1aXJlKCcuL3JlbmRlcmVycy9jYW52YXMvQ2FudmFzUmVuZGVyZXInKSxcbiAgICBDYW52YXNHcmFwaGljczogICAgICAgICByZXF1aXJlKCcuL3JlbmRlcmVycy9jYW52YXMvdXRpbHMvQ2FudmFzR3JhcGhpY3MnKSxcbiAgICBDYW52YXNCdWZmZXI6ICAgICAgICAgICByZXF1aXJlKCcuL3JlbmRlcmVycy9jYW52YXMvdXRpbHMvQ2FudmFzQnVmZmVyJyksXG5cbiAgICAvLyByZW5kZXJlcnMgLSB3ZWJnbFxuICAgIFdlYkdMUmVuZGVyZXI6ICAgICAgICAgIHJlcXVpcmUoJy4vcmVuZGVyZXJzL3dlYmdsL1dlYkdMUmVuZGVyZXInKSxcbiAgICBXZWJHTE1hbmFnZXI6ICAgICAgICAgIHJlcXVpcmUoJy4vcmVuZGVyZXJzL3dlYmdsL21hbmFnZXJzL1dlYkdMTWFuYWdlcicpLFxuICAgIFNoYWRlck1hbmFnZXI6ICAgICAgICAgIHJlcXVpcmUoJy4vcmVuZGVyZXJzL3dlYmdsL21hbmFnZXJzL1NoYWRlck1hbmFnZXInKSxcbiAgICBTaGFkZXI6ICAgICAgICAgICAgICAgICByZXF1aXJlKCcuL3JlbmRlcmVycy93ZWJnbC9zaGFkZXJzL1NoYWRlcicpLFxuICAgIE9iamVjdFJlbmRlcmVyOiAgICAgICAgIHJlcXVpcmUoJy4vcmVuZGVyZXJzL3dlYmdsL3V0aWxzL09iamVjdFJlbmRlcmVyJyksXG4gICAgUmVuZGVyVGFyZ2V0OiAgICAgICAgICAgcmVxdWlyZSgnLi9yZW5kZXJlcnMvd2ViZ2wvdXRpbHMvUmVuZGVyVGFyZ2V0JyksXG5cbiAgICAvLyBmaWx0ZXJzIC0gd2ViZ2xcbiAgICBBYnN0cmFjdEZpbHRlcjogICAgICAgICByZXF1aXJlKCcuL3JlbmRlcmVycy93ZWJnbC9maWx0ZXJzL0Fic3RyYWN0RmlsdGVyJyksXG4gICAgRlhBQUZpbHRlcjogICAgICAgICAgICAgcmVxdWlyZSgnLi9yZW5kZXJlcnMvd2ViZ2wvZmlsdGVycy9GWEFBRmlsdGVyJyksXG4gICAgU3ByaXRlTWFza0ZpbHRlcjogICAgICAgcmVxdWlyZSgnLi9yZW5kZXJlcnMvd2ViZ2wvZmlsdGVycy9TcHJpdGVNYXNrRmlsdGVyJyksXG5cbiAgICBnbENvcmU6ICAgICAgICAgICAgICAgICAgIHJlcXVpcmUoJ3BpeGktZ2wtY29yZScpLFxuXG4gICAgLyoqXG4gICAgICogVGhpcyBoZWxwZXIgZnVuY3Rpb24gd2lsbCBhdXRvbWF0aWNhbGx5IGRldGVjdCB3aGljaCByZW5kZXJlciB5b3Ugc2hvdWxkIGJlIHVzaW5nLlxuICAgICAqIFdlYkdMIGlzIHRoZSBwcmVmZXJyZWQgcmVuZGVyZXIgYXMgaXQgaXMgYSBsb3QgZmFzdGVyLiBJZiB3ZWJHTCBpcyBub3Qgc3VwcG9ydGVkIGJ5XG4gICAgICogdGhlIGJyb3dzZXIgdGhlbiB0aGlzIGZ1bmN0aW9uIHdpbGwgcmV0dXJuIGEgY2FudmFzIHJlbmRlcmVyXG4gICAgICpcbiAgICAgKiBAbWVtYmVyb2YgUElYSVxuICAgICAqIEBwYXJhbSB3aWR0aD04MDAge251bWJlcn0gdGhlIHdpZHRoIG9mIHRoZSByZW5kZXJlcnMgdmlld1xuICAgICAqIEBwYXJhbSBoZWlnaHQ9NjAwIHtudW1iZXJ9IHRoZSBoZWlnaHQgb2YgdGhlIHJlbmRlcmVycyB2aWV3XG4gICAgICogQHBhcmFtIFtvcHRpb25zXSB7b2JqZWN0fSBUaGUgb3B0aW9uYWwgcmVuZGVyZXIgcGFyYW1ldGVyc1xuICAgICAqIEBwYXJhbSBbb3B0aW9ucy52aWV3XSB7SFRNTENhbnZhc0VsZW1lbnR9IHRoZSBjYW52YXMgdG8gdXNlIGFzIGEgdmlldywgb3B0aW9uYWxcbiAgICAgKiBAcGFyYW0gW29wdGlvbnMudHJhbnNwYXJlbnQ9ZmFsc2VdIHtib29sZWFufSBJZiB0aGUgcmVuZGVyIHZpZXcgaXMgdHJhbnNwYXJlbnQsIGRlZmF1bHQgZmFsc2VcbiAgICAgKiBAcGFyYW0gW29wdGlvbnMuYW50aWFsaWFzPWZhbHNlXSB7Ym9vbGVhbn0gc2V0cyBhbnRpYWxpYXMgKG9ubHkgYXBwbGljYWJsZSBpbiBjaHJvbWUgYXQgdGhlIG1vbWVudClcbiAgICAgKiBAcGFyYW0gW29wdGlvbnMucHJlc2VydmVEcmF3aW5nQnVmZmVyPWZhbHNlXSB7Ym9vbGVhbn0gZW5hYmxlcyBkcmF3aW5nIGJ1ZmZlciBwcmVzZXJ2YXRpb24sIGVuYWJsZSB0aGlzIGlmIHlvdVxuICAgICAqICAgICAgbmVlZCB0byBjYWxsIHRvRGF0YVVybCBvbiB0aGUgd2ViZ2wgY29udGV4dFxuICAgICAqIEBwYXJhbSBbb3B0aW9ucy5yZXNvbHV0aW9uPTFdIHtudW1iZXJ9IHRoZSByZXNvbHV0aW9uIG9mIHRoZSByZW5kZXJlciwgcmV0aW5hIHdvdWxkIGJlIDJcbiAgICAgKiBAcGFyYW0gW25vV2ViR0w9ZmFsc2VdIHtib29sZWFufSBwcmV2ZW50cyBzZWxlY3Rpb24gb2YgV2ViR0wgcmVuZGVyZXIsIGV2ZW4gaWYgc3VjaCBpcyBwcmVzZW50XG4gICAgICpcbiAgICAgKiBAcmV0dXJuIHtXZWJHTFJlbmRlcmVyfENhbnZhc1JlbmRlcmVyfSBSZXR1cm5zIFdlYkdMIHJlbmRlcmVyIGlmIGF2YWlsYWJsZSwgb3RoZXJ3aXNlIENhbnZhc1JlbmRlcmVyXG4gICAgICovXG4gICAgYXV0b0RldGVjdFJlbmRlcmVyOiBmdW5jdGlvbiAod2lkdGgsIGhlaWdodCwgb3B0aW9ucywgbm9XZWJHTClcbiAgICB7XG4gICAgICAgIHdpZHRoID0gd2lkdGggfHwgODAwO1xuICAgICAgICBoZWlnaHQgPSBoZWlnaHQgfHwgNjAwO1xuXG4gICAgICAgIGlmICghbm9XZWJHTCAmJiBjb3JlLnV0aWxzLmlzV2ViR0xTdXBwb3J0ZWQoKSlcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBjb3JlLldlYkdMUmVuZGVyZXIod2lkdGgsIGhlaWdodCwgb3B0aW9ucyk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbmV3IGNvcmUuQ2FudmFzUmVuZGVyZXIod2lkdGgsIGhlaWdodCwgb3B0aW9ucyk7XG4gICAgfVxufSk7XG4iLCIvLyBAdG9kbyAtIGlnbm9yZSB0aGUgdG9vIG1hbnkgcGFyYW1ldGVycyB3YXJuaW5nIGZvciBub3dcbi8vIHNob3VsZCBlaXRoZXIgZml4IGl0IG9yIGNoYW5nZSB0aGUganNoaW50IGNvbmZpZ1xuLy8ganNoaW50IC1XMDcyXG5cbnZhciBQb2ludCA9IHJlcXVpcmUoJy4vUG9pbnQnKTtcblxuLyoqXG4gKiBUaGUgcGl4aSBNYXRyaXggY2xhc3MgYXMgYW4gb2JqZWN0LCB3aGljaCBtYWtlcyBpdCBhIGxvdCBmYXN0ZXIsXG4gKiBoZXJlIGlzIGEgcmVwcmVzZW50YXRpb24gb2YgaXQgOlxuICogfCBhIHwgYiB8IHR4fFxuICogfCBjIHwgZCB8IHR5fFxuICogfCAwIHwgMCB8IDEgfFxuICpcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqL1xuZnVuY3Rpb24gTWF0cml4KClcbntcbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMVxuICAgICAqL1xuICAgIHRoaXMuYSA9IDE7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMFxuICAgICAqL1xuICAgIHRoaXMuYiA9IDA7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMFxuICAgICAqL1xuICAgIHRoaXMuYyA9IDA7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMVxuICAgICAqL1xuICAgIHRoaXMuZCA9IDE7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMFxuICAgICAqL1xuICAgIHRoaXMudHggPSAwO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDBcbiAgICAgKi9cbiAgICB0aGlzLnR5ID0gMDtcbn1cblxuTWF0cml4LnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IE1hdHJpeDtcbm1vZHVsZS5leHBvcnRzID0gTWF0cml4O1xuXG4vKipcbiAqIENyZWF0ZXMgYSBNYXRyaXggb2JqZWN0IGJhc2VkIG9uIHRoZSBnaXZlbiBhcnJheS4gVGhlIEVsZW1lbnQgdG8gTWF0cml4IG1hcHBpbmcgb3JkZXIgaXMgYXMgZm9sbG93czpcbiAqXG4gKiBhID0gYXJyYXlbMF1cbiAqIGIgPSBhcnJheVsxXVxuICogYyA9IGFycmF5WzNdXG4gKiBkID0gYXJyYXlbNF1cbiAqIHR4ID0gYXJyYXlbMl1cbiAqIHR5ID0gYXJyYXlbNV1cbiAqXG4gKiBAcGFyYW0gYXJyYXkge251bWJlcltdfSBUaGUgYXJyYXkgdGhhdCB0aGUgbWF0cml4IHdpbGwgYmUgcG9wdWxhdGVkIGZyb20uXG4gKi9cbk1hdHJpeC5wcm90b3R5cGUuZnJvbUFycmF5ID0gZnVuY3Rpb24gKGFycmF5KVxue1xuICAgIHRoaXMuYSA9IGFycmF5WzBdO1xuICAgIHRoaXMuYiA9IGFycmF5WzFdO1xuICAgIHRoaXMuYyA9IGFycmF5WzNdO1xuICAgIHRoaXMuZCA9IGFycmF5WzRdO1xuICAgIHRoaXMudHggPSBhcnJheVsyXTtcbiAgICB0aGlzLnR5ID0gYXJyYXlbNV07XG59O1xuXG5cbi8qKlxuICogc2V0cyB0aGUgbWF0cml4IHByb3BlcnRpZXNcbiAqXG4gKiBAcGFyYW0ge251bWJlcn0gYVxuICogQHBhcmFtIHtudW1iZXJ9IGJcbiAqIEBwYXJhbSB7bnVtYmVyfSBjXG4gKiBAcGFyYW0ge251bWJlcn0gZFxuICogQHBhcmFtIHtudW1iZXJ9IHR4XG4gKiBAcGFyYW0ge251bWJlcn0gdHlcbiAqXG4gKiBAcmV0dXJuIHtQSVhJLk1hdHJpeH0gVGhpcyBtYXRyaXguIEdvb2QgZm9yIGNoYWluaW5nIG1ldGhvZCBjYWxscy5cbiAqL1xuTWF0cml4LnByb3RvdHlwZS5zZXQgPSBmdW5jdGlvbiAoYSwgYiwgYywgZCwgdHgsIHR5KVxue1xuICAgIHRoaXMuYSA9IGE7XG4gICAgdGhpcy5iID0gYjtcbiAgICB0aGlzLmMgPSBjO1xuICAgIHRoaXMuZCA9IGQ7XG4gICAgdGhpcy50eCA9IHR4O1xuICAgIHRoaXMudHkgPSB0eTtcblxuICAgIHJldHVybiB0aGlzO1xufTtcblxuXG4vKipcbiAqIENyZWF0ZXMgYW4gYXJyYXkgZnJvbSB0aGUgY3VycmVudCBNYXRyaXggb2JqZWN0LlxuICpcbiAqIEBwYXJhbSB0cmFuc3Bvc2Uge2Jvb2xlYW59IFdoZXRoZXIgd2UgbmVlZCB0byB0cmFuc3Bvc2UgdGhlIG1hdHJpeCBvciBub3RcbiAqIEBwYXJhbSBbb3V0XSB7QXJyYXl9IElmIHByb3ZpZGVkIHRoZSBhcnJheSB3aWxsIGJlIGFzc2lnbmVkIHRvIG91dFxuICogQHJldHVybiB7bnVtYmVyW119IHRoZSBuZXdseSBjcmVhdGVkIGFycmF5IHdoaWNoIGNvbnRhaW5zIHRoZSBtYXRyaXhcbiAqL1xuTWF0cml4LnByb3RvdHlwZS50b0FycmF5ID0gZnVuY3Rpb24gKHRyYW5zcG9zZSwgb3V0KVxue1xuICAgIGlmICghdGhpcy5hcnJheSlcbiAgICB7XG4gICAgICAgIHRoaXMuYXJyYXkgPSBuZXcgRmxvYXQzMkFycmF5KDkpO1xuICAgIH1cblxuICAgIHZhciBhcnJheSA9IG91dCB8fCB0aGlzLmFycmF5O1xuXG4gICAgaWYgKHRyYW5zcG9zZSlcbiAgICB7XG4gICAgICAgIGFycmF5WzBdID0gdGhpcy5hO1xuICAgICAgICBhcnJheVsxXSA9IHRoaXMuYjtcbiAgICAgICAgYXJyYXlbMl0gPSAwO1xuICAgICAgICBhcnJheVszXSA9IHRoaXMuYztcbiAgICAgICAgYXJyYXlbNF0gPSB0aGlzLmQ7XG4gICAgICAgIGFycmF5WzVdID0gMDtcbiAgICAgICAgYXJyYXlbNl0gPSB0aGlzLnR4O1xuICAgICAgICBhcnJheVs3XSA9IHRoaXMudHk7XG4gICAgICAgIGFycmF5WzhdID0gMTtcbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgYXJyYXlbMF0gPSB0aGlzLmE7XG4gICAgICAgIGFycmF5WzFdID0gdGhpcy5jO1xuICAgICAgICBhcnJheVsyXSA9IHRoaXMudHg7XG4gICAgICAgIGFycmF5WzNdID0gdGhpcy5iO1xuICAgICAgICBhcnJheVs0XSA9IHRoaXMuZDtcbiAgICAgICAgYXJyYXlbNV0gPSB0aGlzLnR5O1xuICAgICAgICBhcnJheVs2XSA9IDA7XG4gICAgICAgIGFycmF5WzddID0gMDtcbiAgICAgICAgYXJyYXlbOF0gPSAxO1xuICAgIH1cblxuICAgIHJldHVybiBhcnJheTtcbn07XG5cbi8qKlxuICogR2V0IGEgbmV3IHBvc2l0aW9uIHdpdGggdGhlIGN1cnJlbnQgdHJhbnNmb3JtYXRpb24gYXBwbGllZC5cbiAqIENhbiBiZSB1c2VkIHRvIGdvIGZyb20gYSBjaGlsZCdzIGNvb3JkaW5hdGUgc3BhY2UgdG8gdGhlIHdvcmxkIGNvb3JkaW5hdGUgc3BhY2UuIChlLmcuIHJlbmRlcmluZylcbiAqXG4gKiBAcGFyYW0gcG9zIHtQSVhJLlBvaW50fSBUaGUgb3JpZ2luXG4gKiBAcGFyYW0gW25ld1Bvc10ge1BJWEkuUG9pbnR9IFRoZSBwb2ludCB0aGF0IHRoZSBuZXcgcG9zaXRpb24gaXMgYXNzaWduZWQgdG8gKGFsbG93ZWQgdG8gYmUgc2FtZSBhcyBpbnB1dClcbiAqIEByZXR1cm4ge1BJWEkuUG9pbnR9IFRoZSBuZXcgcG9pbnQsIHRyYW5zZm9ybWVkIHRocm91Z2ggdGhpcyBtYXRyaXhcbiAqL1xuTWF0cml4LnByb3RvdHlwZS5hcHBseSA9IGZ1bmN0aW9uIChwb3MsIG5ld1BvcylcbntcbiAgICBuZXdQb3MgPSBuZXdQb3MgfHwgbmV3IFBvaW50KCk7XG5cbiAgICB2YXIgeCA9IHBvcy54O1xuICAgIHZhciB5ID0gcG9zLnk7XG5cbiAgICBuZXdQb3MueCA9IHRoaXMuYSAqIHggKyB0aGlzLmMgKiB5ICsgdGhpcy50eDtcbiAgICBuZXdQb3MueSA9IHRoaXMuYiAqIHggKyB0aGlzLmQgKiB5ICsgdGhpcy50eTtcblxuICAgIHJldHVybiBuZXdQb3M7XG59O1xuXG4vKipcbiAqIEdldCBhIG5ldyBwb3NpdGlvbiB3aXRoIHRoZSBpbnZlcnNlIG9mIHRoZSBjdXJyZW50IHRyYW5zZm9ybWF0aW9uIGFwcGxpZWQuXG4gKiBDYW4gYmUgdXNlZCB0byBnbyBmcm9tIHRoZSB3b3JsZCBjb29yZGluYXRlIHNwYWNlIHRvIGEgY2hpbGQncyBjb29yZGluYXRlIHNwYWNlLiAoZS5nLiBpbnB1dClcbiAqXG4gKiBAcGFyYW0gcG9zIHtQSVhJLlBvaW50fSBUaGUgb3JpZ2luXG4gKiBAcGFyYW0gW25ld1Bvc10ge1BJWEkuUG9pbnR9IFRoZSBwb2ludCB0aGF0IHRoZSBuZXcgcG9zaXRpb24gaXMgYXNzaWduZWQgdG8gKGFsbG93ZWQgdG8gYmUgc2FtZSBhcyBpbnB1dClcbiAqIEByZXR1cm4ge1BJWEkuUG9pbnR9IFRoZSBuZXcgcG9pbnQsIGludmVyc2UtdHJhbnNmb3JtZWQgdGhyb3VnaCB0aGlzIG1hdHJpeFxuICovXG5NYXRyaXgucHJvdG90eXBlLmFwcGx5SW52ZXJzZSA9IGZ1bmN0aW9uIChwb3MsIG5ld1BvcylcbntcbiAgICBuZXdQb3MgPSBuZXdQb3MgfHwgbmV3IFBvaW50KCk7XG5cbiAgICB2YXIgaWQgPSAxIC8gKHRoaXMuYSAqIHRoaXMuZCArIHRoaXMuYyAqIC10aGlzLmIpO1xuXG4gICAgdmFyIHggPSBwb3MueDtcbiAgICB2YXIgeSA9IHBvcy55O1xuXG4gICAgbmV3UG9zLnggPSB0aGlzLmQgKiBpZCAqIHggKyAtdGhpcy5jICogaWQgKiB5ICsgKHRoaXMudHkgKiB0aGlzLmMgLSB0aGlzLnR4ICogdGhpcy5kKSAqIGlkO1xuICAgIG5ld1Bvcy55ID0gdGhpcy5hICogaWQgKiB5ICsgLXRoaXMuYiAqIGlkICogeCArICgtdGhpcy50eSAqIHRoaXMuYSArIHRoaXMudHggKiB0aGlzLmIpICogaWQ7XG5cbiAgICByZXR1cm4gbmV3UG9zO1xufTtcblxuLyoqXG4gKiBUcmFuc2xhdGVzIHRoZSBtYXRyaXggb24gdGhlIHggYW5kIHkuXG4gKlxuICogQHBhcmFtIHtudW1iZXJ9IHhcbiAqIEBwYXJhbSB7bnVtYmVyfSB5XG4gKiBAcmV0dXJuIHtQSVhJLk1hdHJpeH0gVGhpcyBtYXRyaXguIEdvb2QgZm9yIGNoYWluaW5nIG1ldGhvZCBjYWxscy5cbiAqL1xuTWF0cml4LnByb3RvdHlwZS50cmFuc2xhdGUgPSBmdW5jdGlvbiAoeCwgeSlcbntcbiAgICB0aGlzLnR4ICs9IHg7XG4gICAgdGhpcy50eSArPSB5O1xuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIEFwcGxpZXMgYSBzY2FsZSB0cmFuc2Zvcm1hdGlvbiB0byB0aGUgbWF0cml4LlxuICpcbiAqIEBwYXJhbSB7bnVtYmVyfSB4IFRoZSBhbW91bnQgdG8gc2NhbGUgaG9yaXpvbnRhbGx5XG4gKiBAcGFyYW0ge251bWJlcn0geSBUaGUgYW1vdW50IHRvIHNjYWxlIHZlcnRpY2FsbHlcbiAqIEByZXR1cm4ge1BJWEkuTWF0cml4fSBUaGlzIG1hdHJpeC4gR29vZCBmb3IgY2hhaW5pbmcgbWV0aG9kIGNhbGxzLlxuICovXG5NYXRyaXgucHJvdG90eXBlLnNjYWxlID0gZnVuY3Rpb24gKHgsIHkpXG57XG4gICAgdGhpcy5hICo9IHg7XG4gICAgdGhpcy5kICo9IHk7XG4gICAgdGhpcy5jICo9IHg7XG4gICAgdGhpcy5iICo9IHk7XG4gICAgdGhpcy50eCAqPSB4O1xuICAgIHRoaXMudHkgKj0geTtcblxuICAgIHJldHVybiB0aGlzO1xufTtcblxuXG4vKipcbiAqIEFwcGxpZXMgYSByb3RhdGlvbiB0cmFuc2Zvcm1hdGlvbiB0byB0aGUgbWF0cml4LlxuICpcbiAqIEBwYXJhbSB7bnVtYmVyfSBhbmdsZSAtIFRoZSBhbmdsZSBpbiByYWRpYW5zLlxuICogQHJldHVybiB7UElYSS5NYXRyaXh9IFRoaXMgbWF0cml4LiBHb29kIGZvciBjaGFpbmluZyBtZXRob2QgY2FsbHMuXG4gKi9cbk1hdHJpeC5wcm90b3R5cGUucm90YXRlID0gZnVuY3Rpb24gKGFuZ2xlKVxue1xuICAgIHZhciBjb3MgPSBNYXRoLmNvcyggYW5nbGUgKTtcbiAgICB2YXIgc2luID0gTWF0aC5zaW4oIGFuZ2xlICk7XG5cbiAgICB2YXIgYTEgPSB0aGlzLmE7XG4gICAgdmFyIGMxID0gdGhpcy5jO1xuICAgIHZhciB0eDEgPSB0aGlzLnR4O1xuXG4gICAgdGhpcy5hID0gYTEgKiBjb3MtdGhpcy5iICogc2luO1xuICAgIHRoaXMuYiA9IGExICogc2luK3RoaXMuYiAqIGNvcztcbiAgICB0aGlzLmMgPSBjMSAqIGNvcy10aGlzLmQgKiBzaW47XG4gICAgdGhpcy5kID0gYzEgKiBzaW4rdGhpcy5kICogY29zO1xuICAgIHRoaXMudHggPSB0eDEgKiBjb3MgLSB0aGlzLnR5ICogc2luO1xuICAgIHRoaXMudHkgPSB0eDEgKiBzaW4gKyB0aGlzLnR5ICogY29zO1xuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIEFwcGVuZHMgdGhlIGdpdmVuIE1hdHJpeCB0byB0aGlzIE1hdHJpeC5cbiAqXG4gKiBAcGFyYW0ge1BJWEkuTWF0cml4fSBtYXRyaXhcbiAqIEByZXR1cm4ge1BJWEkuTWF0cml4fSBUaGlzIG1hdHJpeC4gR29vZCBmb3IgY2hhaW5pbmcgbWV0aG9kIGNhbGxzLlxuICovXG5NYXRyaXgucHJvdG90eXBlLmFwcGVuZCA9IGZ1bmN0aW9uIChtYXRyaXgpXG57XG4gICAgdmFyIGExID0gdGhpcy5hO1xuICAgIHZhciBiMSA9IHRoaXMuYjtcbiAgICB2YXIgYzEgPSB0aGlzLmM7XG4gICAgdmFyIGQxID0gdGhpcy5kO1xuXG4gICAgdGhpcy5hICA9IG1hdHJpeC5hICogYTEgKyBtYXRyaXguYiAqIGMxO1xuICAgIHRoaXMuYiAgPSBtYXRyaXguYSAqIGIxICsgbWF0cml4LmIgKiBkMTtcbiAgICB0aGlzLmMgID0gbWF0cml4LmMgKiBhMSArIG1hdHJpeC5kICogYzE7XG4gICAgdGhpcy5kICA9IG1hdHJpeC5jICogYjEgKyBtYXRyaXguZCAqIGQxO1xuXG4gICAgdGhpcy50eCA9IG1hdHJpeC50eCAqIGExICsgbWF0cml4LnR5ICogYzEgKyB0aGlzLnR4O1xuICAgIHRoaXMudHkgPSBtYXRyaXgudHggKiBiMSArIG1hdHJpeC50eSAqIGQxICsgdGhpcy50eTtcblxuICAgIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBTZXRzIHRoZSBtYXRyaXggYmFzZWQgb24gYWxsIHRoZSBhdmFpbGFibGUgcHJvcGVydGllc1xuICpcbiAqIEBwYXJhbSB7bnVtYmVyfSB4XG4gKiBAcGFyYW0ge251bWJlcn0geVxuICogQHBhcmFtIHtudW1iZXJ9IHBpdm90WFxuICogQHBhcmFtIHtudW1iZXJ9IHBpdm90WVxuICogQHBhcmFtIHtudW1iZXJ9IHNjYWxlWFxuICogQHBhcmFtIHtudW1iZXJ9IHNjYWxlWVxuICogQHBhcmFtIHtudW1iZXJ9IHJvdGF0aW9uXG4gKiBAcGFyYW0ge251bWJlcn0gc2tld1hcbiAqIEBwYXJhbSB7bnVtYmVyfSBza2V3WVxuICpcbiAqIEByZXR1cm4ge1BJWEkuTWF0cml4fSBUaGlzIG1hdHJpeC4gR29vZCBmb3IgY2hhaW5pbmcgbWV0aG9kIGNhbGxzLlxuICovXG5NYXRyaXgucHJvdG90eXBlLnNldFRyYW5zZm9ybSA9IGZ1bmN0aW9uICh4LCB5LCBwaXZvdFgsIHBpdm90WSwgc2NhbGVYLCBzY2FsZVksIHJvdGF0aW9uLCBza2V3WCwgc2tld1kpXG57XG4gICAgdmFyIGEsIGIsIGMsIGQsIHNyLCBjciwgY3ksIHN5LCBuc3gsIGN4O1xuXG4gICAgc3IgID0gTWF0aC5zaW4ocm90YXRpb24pO1xuICAgIGNyICA9IE1hdGguY29zKHJvdGF0aW9uKTtcbiAgICBjeSAgPSBNYXRoLmNvcyhza2V3WSk7XG4gICAgc3kgID0gTWF0aC5zaW4oc2tld1kpO1xuICAgIG5zeCA9IC1NYXRoLnNpbihza2V3WCk7XG4gICAgY3ggID0gIE1hdGguY29zKHNrZXdYKTtcblxuICAgIGEgID0gIGNyICogc2NhbGVYO1xuICAgIGIgID0gIHNyICogc2NhbGVYO1xuICAgIGMgID0gLXNyICogc2NhbGVZO1xuICAgIGQgID0gIGNyICogc2NhbGVZO1xuXG4gICAgdGhpcy5hICA9IGN5ICogYSArIHN5ICogYztcbiAgICB0aGlzLmIgID0gY3kgKiBiICsgc3kgKiBkO1xuICAgIHRoaXMuYyAgPSBuc3ggKiBhICsgY3ggKiBjO1xuICAgIHRoaXMuZCAgPSBuc3ggKiBiICsgY3ggKiBkO1xuXG4gICAgdGhpcy50eCA9IHggKyAoIHBpdm90WCAqIGEgKyBwaXZvdFkgKiBjICk7XG4gICAgdGhpcy50eSA9IHkgKyAoIHBpdm90WCAqIGIgKyBwaXZvdFkgKiBkICk7XG5cbiAgICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogUHJlcGVuZHMgdGhlIGdpdmVuIE1hdHJpeCB0byB0aGlzIE1hdHJpeC5cbiAqXG4gKiBAcGFyYW0ge1BJWEkuTWF0cml4fSBtYXRyaXhcbiAqIEByZXR1cm4ge1BJWEkuTWF0cml4fSBUaGlzIG1hdHJpeC4gR29vZCBmb3IgY2hhaW5pbmcgbWV0aG9kIGNhbGxzLlxuICovXG5NYXRyaXgucHJvdG90eXBlLnByZXBlbmQgPSBmdW5jdGlvbihtYXRyaXgpXG57XG4gICAgdmFyIHR4MSA9IHRoaXMudHg7XG5cbiAgICBpZiAobWF0cml4LmEgIT09IDEgfHwgbWF0cml4LmIgIT09IDAgfHwgbWF0cml4LmMgIT09IDAgfHwgbWF0cml4LmQgIT09IDEpXG4gICAge1xuICAgICAgICB2YXIgYTEgPSB0aGlzLmE7XG4gICAgICAgIHZhciBjMSA9IHRoaXMuYztcbiAgICAgICAgdGhpcy5hICA9IGExKm1hdHJpeC5hK3RoaXMuYiptYXRyaXguYztcbiAgICAgICAgdGhpcy5iICA9IGExKm1hdHJpeC5iK3RoaXMuYiptYXRyaXguZDtcbiAgICAgICAgdGhpcy5jICA9IGMxKm1hdHJpeC5hK3RoaXMuZCptYXRyaXguYztcbiAgICAgICAgdGhpcy5kICA9IGMxKm1hdHJpeC5iK3RoaXMuZCptYXRyaXguZDtcbiAgICB9XG5cbiAgICB0aGlzLnR4ID0gdHgxKm1hdHJpeC5hK3RoaXMudHkqbWF0cml4LmMrbWF0cml4LnR4O1xuICAgIHRoaXMudHkgPSB0eDEqbWF0cml4LmIrdGhpcy50eSptYXRyaXguZCttYXRyaXgudHk7XG5cbiAgICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogSW52ZXJ0cyB0aGlzIG1hdHJpeFxuICpcbiAqIEByZXR1cm4ge1BJWEkuTWF0cml4fSBUaGlzIG1hdHJpeC4gR29vZCBmb3IgY2hhaW5pbmcgbWV0aG9kIGNhbGxzLlxuICovXG5NYXRyaXgucHJvdG90eXBlLmludmVydCA9IGZ1bmN0aW9uKClcbntcbiAgICB2YXIgYTEgPSB0aGlzLmE7XG4gICAgdmFyIGIxID0gdGhpcy5iO1xuICAgIHZhciBjMSA9IHRoaXMuYztcbiAgICB2YXIgZDEgPSB0aGlzLmQ7XG4gICAgdmFyIHR4MSA9IHRoaXMudHg7XG4gICAgdmFyIG4gPSBhMSpkMS1iMSpjMTtcblxuICAgIHRoaXMuYSA9IGQxL247XG4gICAgdGhpcy5iID0gLWIxL247XG4gICAgdGhpcy5jID0gLWMxL247XG4gICAgdGhpcy5kID0gYTEvbjtcbiAgICB0aGlzLnR4ID0gKGMxKnRoaXMudHktZDEqdHgxKS9uO1xuICAgIHRoaXMudHkgPSAtKGExKnRoaXMudHktYjEqdHgxKS9uO1xuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG5cbi8qKlxuICogUmVzZXRzIHRoaXMgTWF0aXggdG8gYW4gaWRlbnRpdHkgKGRlZmF1bHQpIG1hdHJpeC5cbiAqXG4gKiBAcmV0dXJuIHtQSVhJLk1hdHJpeH0gVGhpcyBtYXRyaXguIEdvb2QgZm9yIGNoYWluaW5nIG1ldGhvZCBjYWxscy5cbiAqL1xuTWF0cml4LnByb3RvdHlwZS5pZGVudGl0eSA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy5hID0gMTtcbiAgICB0aGlzLmIgPSAwO1xuICAgIHRoaXMuYyA9IDA7XG4gICAgdGhpcy5kID0gMTtcbiAgICB0aGlzLnR4ID0gMDtcbiAgICB0aGlzLnR5ID0gMDtcblxuICAgIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBDcmVhdGVzIGEgbmV3IE1hdHJpeCBvYmplY3Qgd2l0aCB0aGUgc2FtZSB2YWx1ZXMgYXMgdGhpcyBvbmUuXG4gKlxuICogQHJldHVybiB7UElYSS5NYXRyaXh9IEEgY29weSBvZiB0aGlzIG1hdHJpeC4gR29vZCBmb3IgY2hhaW5pbmcgbWV0aG9kIGNhbGxzLlxuICovXG5NYXRyaXgucHJvdG90eXBlLmNsb25lID0gZnVuY3Rpb24gKClcbntcbiAgICB2YXIgbWF0cml4ID0gbmV3IE1hdHJpeCgpO1xuICAgIG1hdHJpeC5hID0gdGhpcy5hO1xuICAgIG1hdHJpeC5iID0gdGhpcy5iO1xuICAgIG1hdHJpeC5jID0gdGhpcy5jO1xuICAgIG1hdHJpeC5kID0gdGhpcy5kO1xuICAgIG1hdHJpeC50eCA9IHRoaXMudHg7XG4gICAgbWF0cml4LnR5ID0gdGhpcy50eTtcblxuICAgIHJldHVybiBtYXRyaXg7XG59O1xuXG4vKipcbiAqIENoYW5nZXMgdGhlIHZhbHVlcyBvZiB0aGUgZ2l2ZW4gbWF0cml4IHRvIGJlIHRoZSBzYW1lIGFzIHRoZSBvbmVzIGluIHRoaXMgbWF0cml4XG4gKlxuICogQHJldHVybiB7UElYSS5NYXRyaXh9IFRoZSBtYXRyaXggZ2l2ZW4gaW4gcGFyYW1ldGVyIHdpdGggaXRzIHZhbHVlcyB1cGRhdGVkLlxuICovXG5NYXRyaXgucHJvdG90eXBlLmNvcHkgPSBmdW5jdGlvbiAobWF0cml4KVxue1xuICAgIG1hdHJpeC5hID0gdGhpcy5hO1xuICAgIG1hdHJpeC5iID0gdGhpcy5iO1xuICAgIG1hdHJpeC5jID0gdGhpcy5jO1xuICAgIG1hdHJpeC5kID0gdGhpcy5kO1xuICAgIG1hdHJpeC50eCA9IHRoaXMudHg7XG4gICAgbWF0cml4LnR5ID0gdGhpcy50eTtcblxuICAgIHJldHVybiBtYXRyaXg7XG59O1xuXG4vKipcbiAqIEEgZGVmYXVsdCAoaWRlbnRpdHkpIG1hdHJpeFxuICpcbiAqIEBzdGF0aWNcbiAqIEBjb25zdFxuICovXG5NYXRyaXguSURFTlRJVFkgPSBuZXcgTWF0cml4KCk7XG5cbi8qKlxuICogQSB0ZW1wIG1hdHJpeFxuICpcbiAqIEBzdGF0aWNcbiAqIEBjb25zdFxuICovXG5NYXRyaXguVEVNUF9NQVRSSVggPSBuZXcgTWF0cml4KCk7XG4iLCIvKipcbiAqIFRoZSBQb2ludCBvYmplY3QgcmVwcmVzZW50cyBhIGxvY2F0aW9uIGluIGEgdHdvLWRpbWVuc2lvbmFsIGNvb3JkaW5hdGUgc3lzdGVtLCB3aGVyZSB4IHJlcHJlc2VudHNcbiAqIHRoZSBob3Jpem9udGFsIGF4aXMgYW5kIHkgcmVwcmVzZW50cyB0aGUgdmVydGljYWwgYXhpcy5cbiAqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gW3g9MF0ge251bWJlcn0gcG9zaXRpb24gb2YgdGhlIHBvaW50IG9uIHRoZSB4IGF4aXNcbiAqIEBwYXJhbSBbeT0wXSB7bnVtYmVyfSBwb3NpdGlvbiBvZiB0aGUgcG9pbnQgb24gdGhlIHkgYXhpc1xuICovXG5mdW5jdGlvbiBQb2ludCh4LCB5KVxue1xuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAwXG4gICAgICovXG4gICAgdGhpcy54ID0geCB8fCAwO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDBcbiAgICAgKi9cbiAgICB0aGlzLnkgPSB5IHx8IDA7XG59XG5cblBvaW50LnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFBvaW50O1xubW9kdWxlLmV4cG9ydHMgPSBQb2ludDtcblxuLyoqXG4gKiBDcmVhdGVzIGEgY2xvbmUgb2YgdGhpcyBwb2ludFxuICpcbiAqIEByZXR1cm4ge1BJWEkuUG9pbnR9IGEgY29weSBvZiB0aGUgcG9pbnRcbiAqL1xuUG9pbnQucHJvdG90eXBlLmNsb25lID0gZnVuY3Rpb24gKClcbntcbiAgICByZXR1cm4gbmV3IFBvaW50KHRoaXMueCwgdGhpcy55KTtcbn07XG5cbi8qKlxuICogQ29waWVzIHggYW5kIHkgZnJvbSB0aGUgZ2l2ZW4gcG9pbnRcbiAqXG4gKiBAcGFyYW0gcCB7UElYSS5Qb2ludH1cbiAqL1xuUG9pbnQucHJvdG90eXBlLmNvcHkgPSBmdW5jdGlvbiAocCkge1xuICAgIHRoaXMuc2V0KHAueCwgcC55KTtcbn07XG5cbi8qKlxuICogUmV0dXJucyB0cnVlIGlmIHRoZSBnaXZlbiBwb2ludCBpcyBlcXVhbCB0byB0aGlzIHBvaW50XG4gKlxuICogQHBhcmFtIHAge1BJWEkuUG9pbnR9XG4gKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAqL1xuUG9pbnQucHJvdG90eXBlLmVxdWFscyA9IGZ1bmN0aW9uIChwKSB7XG4gICAgcmV0dXJuIChwLnggPT09IHRoaXMueCkgJiYgKHAueSA9PT0gdGhpcy55KTtcbn07XG5cbi8qKlxuICogU2V0cyB0aGUgcG9pbnQgdG8gYSBuZXcgeCBhbmQgeSBwb3NpdGlvbi5cbiAqIElmIHkgaXMgb21pdHRlZCwgYm90aCB4IGFuZCB5IHdpbGwgYmUgc2V0IHRvIHguXG4gKlxuICogQHBhcmFtIFt4PTBdIHtudW1iZXJ9IHBvc2l0aW9uIG9mIHRoZSBwb2ludCBvbiB0aGUgeCBheGlzXG4gKiBAcGFyYW0gW3k9MF0ge251bWJlcn0gcG9zaXRpb24gb2YgdGhlIHBvaW50IG9uIHRoZSB5IGF4aXNcbiAqL1xuUG9pbnQucHJvdG90eXBlLnNldCA9IGZ1bmN0aW9uICh4LCB5KVxue1xuICAgIHRoaXMueCA9IHggfHwgMDtcbiAgICB0aGlzLnkgPSB5IHx8ICggKHkgIT09IDApID8gdGhpcy54IDogMCApIDtcbn07XG4iLCIvKipcbiAqIE1hdGggY2xhc3NlcyBhbmQgdXRpbGl0aWVzIG1peGVkIGludG8gUElYSSBuYW1lc3BhY2UuXG4gKlxuICogQGxlbmRzIFBJWElcbiAqL1xubW9kdWxlLmV4cG9ydHMgPSB7XG4gICAgLy8gVGhlc2Ugd2lsbCBiZSBtaXhlZCB0byBiZSBtYWRlIHB1YmxpY2x5IGF2YWlsYWJsZSxcbiAgICAvLyB3aGlsZSB0aGlzIG1vZHVsZSBpcyB1c2VkIGludGVybmFsbHkgaW4gY29yZVxuICAgIC8vIHRvIGF2b2lkIGNpcmN1bGFyIGRlcGVuZGVuY2llcyBhbmQgY3V0IGRvd24gb25cbiAgICAvLyBpbnRlcm5hbCBtb2R1bGUgcmVxdWlyZXMuXG5cbiAgICBQb2ludDogICAgICByZXF1aXJlKCcuL1BvaW50JyksXG4gICAgTWF0cml4OiAgICAgcmVxdWlyZSgnLi9NYXRyaXgnKSxcblxuICAgIENpcmNsZTogICAgIHJlcXVpcmUoJy4vc2hhcGVzL0NpcmNsZScpLFxuICAgIEVsbGlwc2U6ICAgIHJlcXVpcmUoJy4vc2hhcGVzL0VsbGlwc2UnKSxcbiAgICBQb2x5Z29uOiAgICByZXF1aXJlKCcuL3NoYXBlcy9Qb2x5Z29uJyksXG4gICAgUmVjdGFuZ2xlOiAgcmVxdWlyZSgnLi9zaGFwZXMvUmVjdGFuZ2xlJyksXG4gICAgUm91bmRlZFJlY3RhbmdsZTogcmVxdWlyZSgnLi9zaGFwZXMvUm91bmRlZFJlY3RhbmdsZScpXG59O1xuIiwidmFyIFJlY3RhbmdsZSA9IHJlcXVpcmUoJy4vUmVjdGFuZ2xlJyksXG4gICAgQ09OU1QgPSByZXF1aXJlKCcuLi8uLi9jb25zdCcpO1xuXG4vKipcbiAqIFRoZSBDaXJjbGUgb2JqZWN0IGNhbiBiZSB1c2VkIHRvIHNwZWNpZnkgYSBoaXQgYXJlYSBmb3IgZGlzcGxheU9iamVjdHNcbiAqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0geCB7bnVtYmVyfSBUaGUgWCBjb29yZGluYXRlIG9mIHRoZSBjZW50ZXIgb2YgdGhpcyBjaXJjbGVcbiAqIEBwYXJhbSB5IHtudW1iZXJ9IFRoZSBZIGNvb3JkaW5hdGUgb2YgdGhlIGNlbnRlciBvZiB0aGlzIGNpcmNsZVxuICogQHBhcmFtIHJhZGl1cyB7bnVtYmVyfSBUaGUgcmFkaXVzIG9mIHRoZSBjaXJjbGVcbiAqL1xuZnVuY3Rpb24gQ2lyY2xlKHgsIHksIHJhZGl1cylcbntcbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMFxuICAgICAqL1xuICAgIHRoaXMueCA9IHggfHwgMDtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAwXG4gICAgICovXG4gICAgdGhpcy55ID0geSB8fCAwO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDBcbiAgICAgKi9cbiAgICB0aGlzLnJhZGl1cyA9IHJhZGl1cyB8fCAwO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHR5cGUgb2YgdGhlIG9iamVjdCwgbWFpbmx5IHVzZWQgdG8gYXZvaWQgYGluc3RhbmNlb2ZgIGNoZWNrc1xuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMudHlwZSA9IENPTlNULlNIQVBFUy5DSVJDO1xufVxuXG5DaXJjbGUucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gQ2lyY2xlO1xubW9kdWxlLmV4cG9ydHMgPSBDaXJjbGU7XG5cbi8qKlxuICogQ3JlYXRlcyBhIGNsb25lIG9mIHRoaXMgQ2lyY2xlIGluc3RhbmNlXG4gKlxuICogQHJldHVybiB7UElYSS5DaXJjbGV9IGEgY29weSBvZiB0aGUgQ2lyY2xlXG4gKi9cbkNpcmNsZS5wcm90b3R5cGUuY2xvbmUgPSBmdW5jdGlvbiAoKVxue1xuICAgIHJldHVybiBuZXcgQ2lyY2xlKHRoaXMueCwgdGhpcy55LCB0aGlzLnJhZGl1cyk7XG59O1xuXG4vKipcbiAqIENoZWNrcyB3aGV0aGVyIHRoZSB4IGFuZCB5IGNvb3JkaW5hdGVzIGdpdmVuIGFyZSBjb250YWluZWQgd2l0aGluIHRoaXMgY2lyY2xlXG4gKlxuICogQHBhcmFtIHgge251bWJlcn0gVGhlIFggY29vcmRpbmF0ZSBvZiB0aGUgcG9pbnQgdG8gdGVzdFxuICogQHBhcmFtIHkge251bWJlcn0gVGhlIFkgY29vcmRpbmF0ZSBvZiB0aGUgcG9pbnQgdG8gdGVzdFxuICogQHJldHVybiB7Ym9vbGVhbn0gV2hldGhlciB0aGUgeC95IGNvb3JkaW5hdGVzIGFyZSB3aXRoaW4gdGhpcyBDaXJjbGVcbiAqL1xuQ2lyY2xlLnByb3RvdHlwZS5jb250YWlucyA9IGZ1bmN0aW9uICh4LCB5KVxue1xuICAgIGlmICh0aGlzLnJhZGl1cyA8PSAwKVxuICAgIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHZhciBkeCA9ICh0aGlzLnggLSB4KSxcbiAgICAgICAgZHkgPSAodGhpcy55IC0geSksXG4gICAgICAgIHIyID0gdGhpcy5yYWRpdXMgKiB0aGlzLnJhZGl1cztcblxuICAgIGR4ICo9IGR4O1xuICAgIGR5ICo9IGR5O1xuXG4gICAgcmV0dXJuIChkeCArIGR5IDw9IHIyKTtcbn07XG5cbi8qKlxuKiBSZXR1cm5zIHRoZSBmcmFtaW5nIHJlY3RhbmdsZSBvZiB0aGUgY2lyY2xlIGFzIGEgUmVjdGFuZ2xlIG9iamVjdFxuKlxuKiBAcmV0dXJuIHtQSVhJLlJlY3RhbmdsZX0gdGhlIGZyYW1pbmcgcmVjdGFuZ2xlXG4qL1xuQ2lyY2xlLnByb3RvdHlwZS5nZXRCb3VuZHMgPSBmdW5jdGlvbiAoKVxue1xuICAgIHJldHVybiBuZXcgUmVjdGFuZ2xlKHRoaXMueCAtIHRoaXMucmFkaXVzLCB0aGlzLnkgLSB0aGlzLnJhZGl1cywgdGhpcy5yYWRpdXMgKiAyLCB0aGlzLnJhZGl1cyAqIDIpO1xufTtcbiIsInZhciBSZWN0YW5nbGUgPSByZXF1aXJlKCcuL1JlY3RhbmdsZScpLFxuICAgIENPTlNUID0gcmVxdWlyZSgnLi4vLi4vY29uc3QnKTtcblxuLyoqXG4gKiBUaGUgRWxsaXBzZSBvYmplY3QgY2FuIGJlIHVzZWQgdG8gc3BlY2lmeSBhIGhpdCBhcmVhIGZvciBkaXNwbGF5T2JqZWN0c1xuICpcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqIEBwYXJhbSB4IHtudW1iZXJ9IFRoZSBYIGNvb3JkaW5hdGUgb2YgdGhlIGNlbnRlciBvZiB0aGUgZWxsaXBzZVxuICogQHBhcmFtIHkge251bWJlcn0gVGhlIFkgY29vcmRpbmF0ZSBvZiB0aGUgY2VudGVyIG9mIHRoZSBlbGxpcHNlXG4gKiBAcGFyYW0gd2lkdGgge251bWJlcn0gVGhlIGhhbGYgd2lkdGggb2YgdGhpcyBlbGxpcHNlXG4gKiBAcGFyYW0gaGVpZ2h0IHtudW1iZXJ9IFRoZSBoYWxmIGhlaWdodCBvZiB0aGlzIGVsbGlwc2VcbiAqL1xuZnVuY3Rpb24gRWxsaXBzZSh4LCB5LCB3aWR0aCwgaGVpZ2h0KVxue1xuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAwXG4gICAgICovXG4gICAgdGhpcy54ID0geCB8fCAwO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDBcbiAgICAgKi9cbiAgICB0aGlzLnkgPSB5IHx8IDA7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMFxuICAgICAqL1xuICAgIHRoaXMud2lkdGggPSB3aWR0aCB8fCAwO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDBcbiAgICAgKi9cbiAgICB0aGlzLmhlaWdodCA9IGhlaWdodCB8fCAwO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHR5cGUgb2YgdGhlIG9iamVjdCwgbWFpbmx5IHVzZWQgdG8gYXZvaWQgYGluc3RhbmNlb2ZgIGNoZWNrc1xuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMudHlwZSA9IENPTlNULlNIQVBFUy5FTElQO1xufVxuXG5FbGxpcHNlLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IEVsbGlwc2U7XG5tb2R1bGUuZXhwb3J0cyA9IEVsbGlwc2U7XG5cbi8qKlxuICogQ3JlYXRlcyBhIGNsb25lIG9mIHRoaXMgRWxsaXBzZSBpbnN0YW5jZVxuICpcbiAqIEByZXR1cm4ge1BJWEkuRWxsaXBzZX0gYSBjb3B5IG9mIHRoZSBlbGxpcHNlXG4gKi9cbkVsbGlwc2UucHJvdG90eXBlLmNsb25lID0gZnVuY3Rpb24gKClcbntcbiAgICByZXR1cm4gbmV3IEVsbGlwc2UodGhpcy54LCB0aGlzLnksIHRoaXMud2lkdGgsIHRoaXMuaGVpZ2h0KTtcbn07XG5cbi8qKlxuICogQ2hlY2tzIHdoZXRoZXIgdGhlIHggYW5kIHkgY29vcmRpbmF0ZXMgZ2l2ZW4gYXJlIGNvbnRhaW5lZCB3aXRoaW4gdGhpcyBlbGxpcHNlXG4gKlxuICogQHBhcmFtIHgge251bWJlcn0gVGhlIFggY29vcmRpbmF0ZSBvZiB0aGUgcG9pbnQgdG8gdGVzdFxuICogQHBhcmFtIHkge251bWJlcn0gVGhlIFkgY29vcmRpbmF0ZSBvZiB0aGUgcG9pbnQgdG8gdGVzdFxuICogQHJldHVybiB7Ym9vbGVhbn0gV2hldGhlciB0aGUgeC95IGNvb3JkcyBhcmUgd2l0aGluIHRoaXMgZWxsaXBzZVxuICovXG5FbGxpcHNlLnByb3RvdHlwZS5jb250YWlucyA9IGZ1bmN0aW9uICh4LCB5KVxue1xuICAgIGlmICh0aGlzLndpZHRoIDw9IDAgfHwgdGhpcy5oZWlnaHQgPD0gMClcbiAgICB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICAvL25vcm1hbGl6ZSB0aGUgY29vcmRzIHRvIGFuIGVsbGlwc2Ugd2l0aCBjZW50ZXIgMCwwXG4gICAgdmFyIG5vcm14ID0gKCh4IC0gdGhpcy54KSAvIHRoaXMud2lkdGgpLFxuICAgICAgICBub3JteSA9ICgoeSAtIHRoaXMueSkgLyB0aGlzLmhlaWdodCk7XG5cbiAgICBub3JteCAqPSBub3JteDtcbiAgICBub3JteSAqPSBub3JteTtcblxuICAgIHJldHVybiAobm9ybXggKyBub3JteSA8PSAxKTtcbn07XG5cbi8qKlxuICogUmV0dXJucyB0aGUgZnJhbWluZyByZWN0YW5nbGUgb2YgdGhlIGVsbGlwc2UgYXMgYSBSZWN0YW5nbGUgb2JqZWN0XG4gKlxuICogQHJldHVybiB7UElYSS5SZWN0YW5nbGV9IHRoZSBmcmFtaW5nIHJlY3RhbmdsZVxuICovXG5FbGxpcHNlLnByb3RvdHlwZS5nZXRCb3VuZHMgPSBmdW5jdGlvbiAoKVxue1xuICAgIHJldHVybiBuZXcgUmVjdGFuZ2xlKHRoaXMueCAtIHRoaXMud2lkdGgsIHRoaXMueSAtIHRoaXMuaGVpZ2h0LCB0aGlzLndpZHRoLCB0aGlzLmhlaWdodCk7XG59O1xuIiwidmFyIFBvaW50ID0gcmVxdWlyZSgnLi4vUG9pbnQnKSxcbiAgICBDT05TVCA9IHJlcXVpcmUoJy4uLy4uL2NvbnN0Jyk7XG5cbi8qKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIHBvaW50cyB7UElYSS5Qb2ludFtdfG51bWJlcltdfC4uLlBJWEkuUG9pbnR8Li4ubnVtYmVyfSBUaGlzIGNhbiBiZSBhbiBhcnJheSBvZiBQb2ludHMgdGhhdCBmb3JtIHRoZSBwb2x5Z29uLFxuICogICAgICBhIGZsYXQgYXJyYXkgb2YgbnVtYmVycyB0aGF0IHdpbGwgYmUgaW50ZXJwcmV0ZWQgYXMgW3gseSwgeCx5LCAuLi5dLCBvciB0aGUgYXJndW1lbnRzIHBhc3NlZCBjYW4gYmVcbiAqICAgICAgYWxsIHRoZSBwb2ludHMgb2YgdGhlIHBvbHlnb24gZS5nLiBgbmV3IFBJWEkuUG9seWdvbihuZXcgUElYSS5Qb2ludCgpLCBuZXcgUElYSS5Qb2ludCgpLCAuLi4pYCwgb3IgdGhlXG4gKiAgICAgIGFyZ3VtZW50cyBwYXNzZWQgY2FuIGJlIGZsYXQgeCx5IHZhbHVlcyBlLmcuIGBuZXcgUG9seWdvbih4LHksIHgseSwgeCx5LCAuLi4pYCB3aGVyZSBgeGAgYW5kIGB5YCBhcmVcbiAqICAgICAgTnVtYmVycy5cbiAqL1xuZnVuY3Rpb24gUG9seWdvbihwb2ludHNfKVxue1xuICAgIC8vIHByZXZlbnRzIGFuIGFyZ3VtZW50IGFzc2lnbm1lbnQgZGVvcHRcbiAgICAvLyBzZWUgc2VjdGlvbiAzLjE6IGh0dHBzOi8vZ2l0aHViLmNvbS9wZXRrYWFudG9ub3YvYmx1ZWJpcmQvd2lraS9PcHRpbWl6YXRpb24ta2lsbGVycyMzLW1hbmFnaW5nLWFyZ3VtZW50c1xuICAgIHZhciBwb2ludHMgPSBwb2ludHNfO1xuXG4gICAgLy9pZiBwb2ludHMgaXNuJ3QgYW4gYXJyYXksIHVzZSBhcmd1bWVudHMgYXMgdGhlIGFycmF5XG4gICAgaWYgKCFBcnJheS5pc0FycmF5KHBvaW50cykpXG4gICAge1xuICAgICAgICAvLyBwcmV2ZW50cyBhbiBhcmd1bWVudCBsZWFrIGRlb3B0XG4gICAgICAgIC8vIHNlZSBzZWN0aW9uIDMuMjogaHR0cHM6Ly9naXRodWIuY29tL3BldGthYW50b25vdi9ibHVlYmlyZC93aWtpL09wdGltaXphdGlvbi1raWxsZXJzIzMtbWFuYWdpbmctYXJndW1lbnRzXG4gICAgICAgIHBvaW50cyA9IG5ldyBBcnJheShhcmd1bWVudHMubGVuZ3RoKTtcblxuICAgICAgICBmb3IgKHZhciBhID0gMDsgYSA8IHBvaW50cy5sZW5ndGg7ICsrYSkge1xuICAgICAgICAgICAgcG9pbnRzW2FdID0gYXJndW1lbnRzW2FdO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gaWYgdGhpcyBpcyBhbiBhcnJheSBvZiBwb2ludHMsIGNvbnZlcnQgaXQgdG8gYSBmbGF0IGFycmF5IG9mIG51bWJlcnNcbiAgICBpZiAocG9pbnRzWzBdIGluc3RhbmNlb2YgUG9pbnQpXG4gICAge1xuICAgICAgICB2YXIgcCA9IFtdO1xuICAgICAgICBmb3IgKHZhciBpID0gMCwgaWwgPSBwb2ludHMubGVuZ3RoOyBpIDwgaWw7IGkrKylcbiAgICAgICAge1xuICAgICAgICAgICAgcC5wdXNoKHBvaW50c1tpXS54LCBwb2ludHNbaV0ueSk7XG4gICAgICAgIH1cblxuICAgICAgICBwb2ludHMgPSBwO1xuICAgIH1cblxuICAgIHRoaXMuY2xvc2VkID0gdHJ1ZTtcblxuICAgIC8qKlxuICAgICAqIEFuIGFycmF5IG9mIHRoZSBwb2ludHMgb2YgdGhpcyBwb2x5Z29uXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJbXX1cbiAgICAgKi9cbiAgICB0aGlzLnBvaW50cyA9IHBvaW50cztcblxuICAgIC8qKlxuICAgICAqIFRoZSB0eXBlIG9mIHRoZSBvYmplY3QsIG1haW5seSB1c2VkIHRvIGF2b2lkIGBpbnN0YW5jZW9mYCBjaGVja3NcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLnR5cGUgPSBDT05TVC5TSEFQRVMuUE9MWTtcbn1cblxuUG9seWdvbi5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBQb2x5Z29uO1xubW9kdWxlLmV4cG9ydHMgPSBQb2x5Z29uO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBjbG9uZSBvZiB0aGlzIHBvbHlnb25cbiAqXG4gKiBAcmV0dXJuIHtQSVhJLlBvbHlnb259IGEgY29weSBvZiB0aGUgcG9seWdvblxuICovXG5Qb2x5Z29uLnByb3RvdHlwZS5jbG9uZSA9IGZ1bmN0aW9uICgpXG57XG4gICAgcmV0dXJuIG5ldyBQb2x5Z29uKHRoaXMucG9pbnRzLnNsaWNlKCkpO1xufTtcblxuLyoqXG4gKiBDaGVja3Mgd2hldGhlciB0aGUgeCBhbmQgeSBjb29yZGluYXRlcyBwYXNzZWQgdG8gdGhpcyBmdW5jdGlvbiBhcmUgY29udGFpbmVkIHdpdGhpbiB0aGlzIHBvbHlnb25cbiAqXG4gKiBAcGFyYW0geCB7bnVtYmVyfSBUaGUgWCBjb29yZGluYXRlIG9mIHRoZSBwb2ludCB0byB0ZXN0XG4gKiBAcGFyYW0geSB7bnVtYmVyfSBUaGUgWSBjb29yZGluYXRlIG9mIHRoZSBwb2ludCB0byB0ZXN0XG4gKiBAcmV0dXJuIHtib29sZWFufSBXaGV0aGVyIHRoZSB4L3kgY29vcmRpbmF0ZXMgYXJlIHdpdGhpbiB0aGlzIHBvbHlnb25cbiAqL1xuUG9seWdvbi5wcm90b3R5cGUuY29udGFpbnMgPSBmdW5jdGlvbiAoeCwgeSlcbntcbiAgICB2YXIgaW5zaWRlID0gZmFsc2U7XG5cbiAgICAvLyB1c2Ugc29tZSByYXljYXN0aW5nIHRvIHRlc3QgaGl0c1xuICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9zdWJzdGFjay9wb2ludC1pbi1wb2x5Z29uL2Jsb2IvbWFzdGVyL2luZGV4LmpzXG4gICAgdmFyIGxlbmd0aCA9IHRoaXMucG9pbnRzLmxlbmd0aCAvIDI7XG5cbiAgICBmb3IgKHZhciBpID0gMCwgaiA9IGxlbmd0aCAtIDE7IGkgPCBsZW5ndGg7IGogPSBpKyspXG4gICAge1xuICAgICAgICB2YXIgeGkgPSB0aGlzLnBvaW50c1tpICogMl0sIHlpID0gdGhpcy5wb2ludHNbaSAqIDIgKyAxXSxcbiAgICAgICAgICAgIHhqID0gdGhpcy5wb2ludHNbaiAqIDJdLCB5aiA9IHRoaXMucG9pbnRzW2ogKiAyICsgMV0sXG4gICAgICAgICAgICBpbnRlcnNlY3QgPSAoKHlpID4geSkgIT09ICh5aiA+IHkpKSAmJiAoeCA8ICh4aiAtIHhpKSAqICh5IC0geWkpIC8gKHlqIC0geWkpICsgeGkpO1xuXG4gICAgICAgIGlmIChpbnRlcnNlY3QpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGluc2lkZSA9ICFpbnNpZGU7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gaW5zaWRlO1xufTtcbiIsInZhciBDT05TVCA9IHJlcXVpcmUoJy4uLy4uL2NvbnN0Jyk7XG5cbi8qKlxuICogdGhlIFJlY3RhbmdsZSBvYmplY3QgaXMgYW4gYXJlYSBkZWZpbmVkIGJ5IGl0cyBwb3NpdGlvbiwgYXMgaW5kaWNhdGVkIGJ5IGl0cyB0b3AtbGVmdCBjb3JuZXIgcG9pbnQgKHgsIHkpIGFuZCBieSBpdHMgd2lkdGggYW5kIGl0cyBoZWlnaHQuXG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIHgge251bWJlcn0gVGhlIFggY29vcmRpbmF0ZSBvZiB0aGUgdXBwZXItbGVmdCBjb3JuZXIgb2YgdGhlIHJlY3RhbmdsZVxuICogQHBhcmFtIHkge251bWJlcn0gVGhlIFkgY29vcmRpbmF0ZSBvZiB0aGUgdXBwZXItbGVmdCBjb3JuZXIgb2YgdGhlIHJlY3RhbmdsZVxuICogQHBhcmFtIHdpZHRoIHtudW1iZXJ9IFRoZSBvdmVyYWxsIHdpZHRoIG9mIHRoaXMgcmVjdGFuZ2xlXG4gKiBAcGFyYW0gaGVpZ2h0IHtudW1iZXJ9IFRoZSBvdmVyYWxsIGhlaWdodCBvZiB0aGlzIHJlY3RhbmdsZVxuICovXG5mdW5jdGlvbiBSZWN0YW5nbGUoeCwgeSwgd2lkdGgsIGhlaWdodClcbntcbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMFxuICAgICAqL1xuICAgIHRoaXMueCA9IHggfHwgMDtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAwXG4gICAgICovXG4gICAgdGhpcy55ID0geSB8fCAwO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDBcbiAgICAgKi9cbiAgICB0aGlzLndpZHRoID0gd2lkdGggfHwgMDtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAwXG4gICAgICovXG4gICAgdGhpcy5oZWlnaHQgPSBoZWlnaHQgfHwgMDtcblxuICAgIC8qKlxuICAgICAqIFRoZSB0eXBlIG9mIHRoZSBvYmplY3QsIG1haW5seSB1c2VkIHRvIGF2b2lkIGBpbnN0YW5jZW9mYCBjaGVja3NcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLnR5cGUgPSBDT05TVC5TSEFQRVMuUkVDVDtcbn1cblxuUmVjdGFuZ2xlLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFJlY3RhbmdsZTtcbm1vZHVsZS5leHBvcnRzID0gUmVjdGFuZ2xlO1xuXG4vKipcbiAqIEEgY29uc3RhbnQgZW1wdHkgcmVjdGFuZ2xlLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBjb25zdGFudFxuICovXG5SZWN0YW5nbGUuRU1QVFkgPSBuZXcgUmVjdGFuZ2xlKDAsIDAsIDAsIDApO1xuXG5cbi8qKlxuICogQ3JlYXRlcyBhIGNsb25lIG9mIHRoaXMgUmVjdGFuZ2xlXG4gKlxuICogQHJldHVybiB7UElYSS5SZWN0YW5nbGV9IGEgY29weSBvZiB0aGUgcmVjdGFuZ2xlXG4gKi9cblJlY3RhbmdsZS5wcm90b3R5cGUuY2xvbmUgPSBmdW5jdGlvbiAoKVxue1xuICAgIHJldHVybiBuZXcgUmVjdGFuZ2xlKHRoaXMueCwgdGhpcy55LCB0aGlzLndpZHRoLCB0aGlzLmhlaWdodCk7XG59O1xuXG4vKipcbiAqIENoZWNrcyB3aGV0aGVyIHRoZSB4IGFuZCB5IGNvb3JkaW5hdGVzIGdpdmVuIGFyZSBjb250YWluZWQgd2l0aGluIHRoaXMgUmVjdGFuZ2xlXG4gKlxuICogQHBhcmFtIHgge251bWJlcn0gVGhlIFggY29vcmRpbmF0ZSBvZiB0aGUgcG9pbnQgdG8gdGVzdFxuICogQHBhcmFtIHkge251bWJlcn0gVGhlIFkgY29vcmRpbmF0ZSBvZiB0aGUgcG9pbnQgdG8gdGVzdFxuICogQHJldHVybiB7Ym9vbGVhbn0gV2hldGhlciB0aGUgeC95IGNvb3JkaW5hdGVzIGFyZSB3aXRoaW4gdGhpcyBSZWN0YW5nbGVcbiAqL1xuUmVjdGFuZ2xlLnByb3RvdHlwZS5jb250YWlucyA9IGZ1bmN0aW9uICh4LCB5KVxue1xuICAgIGlmICh0aGlzLndpZHRoIDw9IDAgfHwgdGhpcy5oZWlnaHQgPD0gMClcbiAgICB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBpZiAoeCA+PSB0aGlzLnggJiYgeCA8IHRoaXMueCArIHRoaXMud2lkdGgpXG4gICAge1xuICAgICAgICBpZiAoeSA+PSB0aGlzLnkgJiYgeSA8IHRoaXMueSArIHRoaXMuaGVpZ2h0KVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBmYWxzZTtcbn07XG4iLCJ2YXIgQ09OU1QgPSByZXF1aXJlKCcuLi8uLi9jb25zdCcpO1xuXG4vKipcbiAqIFRoZSBSb3VuZGVkIFJlY3RhbmdsZSBvYmplY3QgaXMgYW4gYXJlYSB0aGF0IGhhcyBuaWNlIHJvdW5kZWQgY29ybmVycywgYXMgaW5kaWNhdGVkIGJ5IGl0cyB0b3AtbGVmdCBjb3JuZXIgcG9pbnQgKHgsIHkpIGFuZCBieSBpdHMgd2lkdGggYW5kIGl0cyBoZWlnaHQgYW5kIGl0cyByYWRpdXMuXG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIHgge251bWJlcn0gVGhlIFggY29vcmRpbmF0ZSBvZiB0aGUgdXBwZXItbGVmdCBjb3JuZXIgb2YgdGhlIHJvdW5kZWQgcmVjdGFuZ2xlXG4gKiBAcGFyYW0geSB7bnVtYmVyfSBUaGUgWSBjb29yZGluYXRlIG9mIHRoZSB1cHBlci1sZWZ0IGNvcm5lciBvZiB0aGUgcm91bmRlZCByZWN0YW5nbGVcbiAqIEBwYXJhbSB3aWR0aCB7bnVtYmVyfSBUaGUgb3ZlcmFsbCB3aWR0aCBvZiB0aGlzIHJvdW5kZWQgcmVjdGFuZ2xlXG4gKiBAcGFyYW0gaGVpZ2h0IHtudW1iZXJ9IFRoZSBvdmVyYWxsIGhlaWdodCBvZiB0aGlzIHJvdW5kZWQgcmVjdGFuZ2xlXG4gKiBAcGFyYW0gcmFkaXVzIHtudW1iZXJ9IENvbnRyb2xzIHRoZSByYWRpdXMgb2YgdGhlIHJvdW5kZWQgY29ybmVyc1xuICovXG5mdW5jdGlvbiBSb3VuZGVkUmVjdGFuZ2xlKHgsIHksIHdpZHRoLCBoZWlnaHQsIHJhZGl1cylcbntcbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMFxuICAgICAqL1xuICAgIHRoaXMueCA9IHggfHwgMDtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAwXG4gICAgICovXG4gICAgdGhpcy55ID0geSB8fCAwO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDBcbiAgICAgKi9cbiAgICB0aGlzLndpZHRoID0gd2lkdGggfHwgMDtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAwXG4gICAgICovXG4gICAgdGhpcy5oZWlnaHQgPSBoZWlnaHQgfHwgMDtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAyMFxuICAgICAqL1xuICAgIHRoaXMucmFkaXVzID0gcmFkaXVzIHx8IDIwO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHR5cGUgb2YgdGhlIG9iamVjdCwgbWFpbmx5IHVzZWQgdG8gYXZvaWQgYGluc3RhbmNlb2ZgIGNoZWNrc1xuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMudHlwZSA9IENPTlNULlNIQVBFUy5SUkVDO1xufVxuXG5Sb3VuZGVkUmVjdGFuZ2xlLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFJvdW5kZWRSZWN0YW5nbGU7XG5tb2R1bGUuZXhwb3J0cyA9IFJvdW5kZWRSZWN0YW5nbGU7XG5cbi8qKlxuICogQ3JlYXRlcyBhIGNsb25lIG9mIHRoaXMgUm91bmRlZCBSZWN0YW5nbGVcbiAqXG4gKiBAcmV0dXJuIHtQSVhJLlJvdW5kZWRSZWN0YW5nbGV9IGEgY29weSBvZiB0aGUgcm91bmRlZCByZWN0YW5nbGVcbiAqL1xuUm91bmRlZFJlY3RhbmdsZS5wcm90b3R5cGUuY2xvbmUgPSBmdW5jdGlvbiAoKVxue1xuICAgIHJldHVybiBuZXcgUm91bmRlZFJlY3RhbmdsZSh0aGlzLngsIHRoaXMueSwgdGhpcy53aWR0aCwgdGhpcy5oZWlnaHQsIHRoaXMucmFkaXVzKTtcbn07XG5cbi8qKlxuICogQ2hlY2tzIHdoZXRoZXIgdGhlIHggYW5kIHkgY29vcmRpbmF0ZXMgZ2l2ZW4gYXJlIGNvbnRhaW5lZCB3aXRoaW4gdGhpcyBSb3VuZGVkIFJlY3RhbmdsZVxuICpcbiAqIEBwYXJhbSB4IHtudW1iZXJ9IFRoZSBYIGNvb3JkaW5hdGUgb2YgdGhlIHBvaW50IHRvIHRlc3RcbiAqIEBwYXJhbSB5IHtudW1iZXJ9IFRoZSBZIGNvb3JkaW5hdGUgb2YgdGhlIHBvaW50IHRvIHRlc3RcbiAqIEByZXR1cm4ge2Jvb2xlYW59IFdoZXRoZXIgdGhlIHgveSBjb29yZGluYXRlcyBhcmUgd2l0aGluIHRoaXMgUm91bmRlZCBSZWN0YW5nbGVcbiAqL1xuUm91bmRlZFJlY3RhbmdsZS5wcm90b3R5cGUuY29udGFpbnMgPSBmdW5jdGlvbiAoeCwgeSlcbntcbiAgICBpZiAodGhpcy53aWR0aCA8PSAwIHx8IHRoaXMuaGVpZ2h0IDw9IDApXG4gICAge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgaWYgKHggPj0gdGhpcy54ICYmIHggPD0gdGhpcy54ICsgdGhpcy53aWR0aClcbiAgICB7XG4gICAgICAgIGlmICh5ID49IHRoaXMueSAmJiB5IDw9IHRoaXMueSArIHRoaXMuaGVpZ2h0KVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBmYWxzZTtcbn07XG4iLCJ2YXIgQ29udGFpbmVyID0gcmVxdWlyZSgnLi4vZGlzcGxheS9Db250YWluZXInKSxcbiAgICBDT05TVCA9IHJlcXVpcmUoJy4uL2NvbnN0Jyk7XG5cbi8qKlxuICogVGhlIFBhcnRpY2xlQ29udGFpbmVyIGNsYXNzIGlzIGEgcmVhbGx5IGZhc3QgdmVyc2lvbiBvZiB0aGUgQ29udGFpbmVyIGJ1aWx0IHNvbGVseSBmb3Igc3BlZWQsXG4gKiBzbyB1c2Ugd2hlbiB5b3UgbmVlZCBhIGxvdCBvZiBzcHJpdGVzIG9yIHBhcnRpY2xlcy4gVGhlIHRyYWRlb2ZmIG9mIHRoZSBQYXJ0aWNsZUNvbnRhaW5lciBpcyB0aGF0IGFkdmFuY2VkXG4gKiBmdW5jdGlvbmFsaXR5IHdpbGwgbm90IHdvcmsuIFBhcnRpY2xlQ29udGFpbmVyIGltcGxlbWVudHMgb25seSB0aGUgYmFzaWMgb2JqZWN0IHRyYW5zZm9ybSAocG9zaXRpb24sIHNjYWxlLCByb3RhdGlvbikuXG4gKiBBbnkgb3RoZXIgZnVuY3Rpb25hbGl0eSBsaWtlIHRpbnRpbmcsIG1hc2tpbmcsIGV0YyB3aWxsIG5vdCB3b3JrIG9uIHNwcml0ZXMgaW4gdGhpcyBiYXRjaC5cbiAqXG4gKiBJdCdzIGV4dHJlbWVseSBlYXN5IHRvIHVzZSA6XG4gKlxuICogYGBganNcbiAqIHZhciBjb250YWluZXIgPSBuZXcgUGFydGljbGVDb250YWluZXIoKTtcbiAqXG4gKiBmb3IgKHZhciBpID0gMDsgaSA8IDEwMDsgKytpKVxuICoge1xuICogICAgIHZhciBzcHJpdGUgPSBuZXcgUElYSS5TcHJpdGUuZnJvbUltYWdlKFwibXlJbWFnZS5wbmdcIik7XG4gKiAgICAgY29udGFpbmVyLmFkZENoaWxkKHNwcml0ZSk7XG4gKiB9XG4gKiBgYGBcbiAqXG4gKiBBbmQgaGVyZSB5b3UgaGF2ZSBhIGh1bmRyZWQgc3ByaXRlcyB0aGF0IHdpbGwgYmUgcmVuZGVyZXIgYXQgdGhlIHNwZWVkIG9mIGxpZ2h0LlxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5Db250YWluZXJcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gW21heFNpemU9MTUwMDBdIHtudW1iZXJ9IFRoZSBtYXhpbXVtIG51bWJlciBvZiBwYXJ0aWNsZXMgdGhhdCBjYW4gYmUgcmVuZGVyZXIgYnkgdGhlIGNvbnRhaW5lci5cbiAqIEBwYXJhbSBbcHJvcGVydGllc10ge29iamVjdH0gVGhlIHByb3BlcnRpZXMgb2YgY2hpbGRyZW4gdGhhdCBzaG91bGQgYmUgdXBsb2FkZWQgdG8gdGhlIGdwdSBhbmQgYXBwbGllZC5cbiAqIEBwYXJhbSBbcHJvcGVydGllcy5zY2FsZT1mYWxzZV0ge2Jvb2xlYW59IFdoZW4gdHJ1ZSwgc2NhbGUgYmUgdXBsb2FkZWQgYW5kIGFwcGxpZWQuXG4gKiBAcGFyYW0gW3Byb3BlcnRpZXMucG9zaXRpb249dHJ1ZV0ge2Jvb2xlYW59IFdoZW4gdHJ1ZSwgcG9zaXRpb24gYmUgdXBsb2FkZWQgYW5kIGFwcGxpZWQuXG4gKiBAcGFyYW0gW3Byb3BlcnRpZXMucm90YXRpb249ZmFsc2VdIHtib29sZWFufSBXaGVuIHRydWUsIHJvdGF0aW9uIGJlIHVwbG9hZGVkIGFuZCBhcHBsaWVkLlxuICogQHBhcmFtIFtwcm9wZXJ0aWVzLnV2cz1mYWxzZV0ge2Jvb2xlYW59IFdoZW4gdHJ1ZSwgdXZzIGJlIHVwbG9hZGVkIGFuZCBhcHBsaWVkLlxuICogQHBhcmFtIFtwcm9wZXJ0aWVzLmFscGhhPWZhbHNlXSB7Ym9vbGVhbn0gV2hlbiB0cnVlLCBhbHBoYSBiZSB1cGxvYWRlZCBhbmQgYXBwbGllZC5cbiAqIEBwYXJhbSBbYmF0Y2hTaXplPTE1MDAwXSB7bnVtYmVyfSBOdW1iZXIgb2YgcGFydGljbGVzIHBlciBiYXRjaC5cbiAqL1xuZnVuY3Rpb24gUGFydGljbGVDb250YWluZXIobWF4U2l6ZSwgcHJvcGVydGllcywgYmF0Y2hTaXplKVxue1xuICAgIENvbnRhaW5lci5jYWxsKHRoaXMpO1xuXG4gICAgYmF0Y2hTaXplID0gYmF0Y2hTaXplIHx8IDE1MDAwOyAvL0NPTlNULlNQUklURV9CQVRDSF9TSVpFOyAvLyAyMDAwIGlzIGEgbmljZSBiYWxhbmNlIGJldHdlZW4gbW9iaWxlIC8gZGVza3RvcFxuICAgIG1heFNpemUgPSBtYXhTaXplIHx8IDE1MDAwO1xuXG4gICAgLy8gTWFraW5nIHN1cmUgdGhlIGJhdGNoIHNpemUgaXMgdmFsaWRcbiAgICAvLyA2NTUzNSBpcyBtYXggdmVydGV4IGluZGV4IGluIHRoZSBpbmRleCBidWZmZXIgKHNlZSBQYXJ0aWNsZVJlbmRlcmVyKVxuICAgIC8vIHNvIG1heCBudW1iZXIgb2YgcGFydGljbGVzIGlzIDY1NTM2IC8gNCA9IDE2Mzg0XG4gICAgdmFyIG1heEJhdGNoU2l6ZSA9IDE2Mzg0O1xuICAgIGlmIChiYXRjaFNpemUgPiBtYXhCYXRjaFNpemUpIHtcbiAgICAgICAgYmF0Y2hTaXplID0gbWF4QmF0Y2hTaXplO1xuICAgIH1cblxuICAgIGlmIChiYXRjaFNpemUgPiBtYXhTaXplKSB7XG4gICAgICAgIGJhdGNoU2l6ZSA9IG1heFNpemU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2V0IHByb3BlcnRpZXMgdG8gYmUgZHluYW1pYyAodHJ1ZSkgLyBzdGF0aWMgKGZhbHNlKVxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbltdfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fcHJvcGVydGllcyA9IFtmYWxzZSwgdHJ1ZSwgZmFsc2UsIGZhbHNlLCBmYWxzZV07XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9tYXhTaXplID0gbWF4U2l6ZTtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX2JhdGNoU2l6ZSA9IGJhdGNoU2l6ZTtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge1dlYkdMQnVmZmVyfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fYnVmZmVycyA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9idWZmZXJUb1VwZGF0ZSA9IDA7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqXG4gICAgICovXG4gICAgdGhpcy5pbnRlcmFjdGl2ZUNoaWxkcmVuID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYmxlbmQgbW9kZSB0byBiZSBhcHBsaWVkIHRvIHRoZSBzcHJpdGUuIEFwcGx5IGEgdmFsdWUgb2YgYFBJWEkuQkxFTkRfTU9ERVMuTk9STUFMYCB0byByZXNldCB0aGUgYmxlbmQgbW9kZS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCBQSVhJLkJMRU5EX01PREVTLk5PUk1BTFxuICAgICAqIEBzZWUgUElYSS5CTEVORF9NT0RFU1xuICAgICAqL1xuICAgIHRoaXMuYmxlbmRNb2RlID0gQ09OU1QuQkxFTkRfTU9ERVMuTk9STUFMO1xuXG4gICAgLyoqXG4gICAgICogVXNlZCBmb3IgY2FudmFzIHJlbmRlcmVyaW5nLiBJZiB0cnVlIHRoZW4gdGhlIGVsZW1lbnRzIHdpbGwgYmUgcG9zaXRpb25lZCBhdCB0aGUgbmVhcmVzdCBwaXhlbC4gVGhpcyBwcm92aWRlcyBhIG5pY2Ugc3BlZWQgYm9vc3QuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqIEBkZWZhdWx0IHRydWU7XG4gICAgICovXG4gICAgdGhpcy5yb3VuZFBpeGVscyA9IHRydWU7XG5cbiAgICB0aGlzLnNldFByb3BlcnRpZXMocHJvcGVydGllcyk7XG59XG5cblBhcnRpY2xlQ29udGFpbmVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoQ29udGFpbmVyLnByb3RvdHlwZSk7XG5QYXJ0aWNsZUNvbnRhaW5lci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBQYXJ0aWNsZUNvbnRhaW5lcjtcbm1vZHVsZS5leHBvcnRzID0gUGFydGljbGVDb250YWluZXI7XG5cbi8qKlxuICogU2V0cyB0aGUgcHJpdmF0ZSBwcm9wZXJ0aWVzIGFycmF5IHRvIGR5bmFtaWMgLyBzdGF0aWMgYmFzZWQgb24gdGhlIHBhc3NlZCBwcm9wZXJ0aWVzIG9iamVjdFxuICpcbiAqIEBwYXJhbSBwcm9wZXJ0aWVzIHtvYmplY3R9IFRoZSBwcm9wZXJ0aWVzIHRvIGJlIHVwbG9hZGVkXG4gKi9cblBhcnRpY2xlQ29udGFpbmVyLnByb3RvdHlwZS5zZXRQcm9wZXJ0aWVzID0gZnVuY3Rpb24ocHJvcGVydGllcylcbntcbiAgICBpZiAoIHByb3BlcnRpZXMgKSB7XG4gICAgICAgIHRoaXMuX3Byb3BlcnRpZXNbMF0gPSAnc2NhbGUnIGluIHByb3BlcnRpZXMgPyAhIXByb3BlcnRpZXMuc2NhbGUgOiB0aGlzLl9wcm9wZXJ0aWVzWzBdO1xuICAgICAgICB0aGlzLl9wcm9wZXJ0aWVzWzFdID0gJ3Bvc2l0aW9uJyBpbiBwcm9wZXJ0aWVzID8gISFwcm9wZXJ0aWVzLnBvc2l0aW9uIDogdGhpcy5fcHJvcGVydGllc1sxXTtcbiAgICAgICAgdGhpcy5fcHJvcGVydGllc1syXSA9ICdyb3RhdGlvbicgaW4gcHJvcGVydGllcyA/ICEhcHJvcGVydGllcy5yb3RhdGlvbiA6IHRoaXMuX3Byb3BlcnRpZXNbMl07XG4gICAgICAgIHRoaXMuX3Byb3BlcnRpZXNbM10gPSAndXZzJyBpbiBwcm9wZXJ0aWVzID8gISFwcm9wZXJ0aWVzLnV2cyA6IHRoaXMuX3Byb3BlcnRpZXNbM107XG4gICAgICAgIHRoaXMuX3Byb3BlcnRpZXNbNF0gPSAnYWxwaGEnIGluIHByb3BlcnRpZXMgPyAhIXByb3BlcnRpZXMuYWxwaGEgOiB0aGlzLl9wcm9wZXJ0aWVzWzRdO1xuICAgIH1cbn07XG5cbi8qKlxuICogVXBkYXRlcyB0aGUgb2JqZWN0IHRyYW5zZm9ybSBmb3IgcmVuZGVyaW5nXG4gKlxuICogQHByaXZhdGVcbiAqL1xuUGFydGljbGVDb250YWluZXIucHJvdG90eXBlLnVwZGF0ZVRyYW5zZm9ybSA9IGZ1bmN0aW9uICgpXG57XG5cbiAgICAvLyBUT0RPIGRvbid0IG5lZWQgdG8hXG4gICAgdGhpcy5kaXNwbGF5T2JqZWN0VXBkYXRlVHJhbnNmb3JtKCk7XG4gICAgLy8gIFBJWEkuQ29udGFpbmVyLnByb3RvdHlwZS51cGRhdGVUcmFuc2Zvcm0uY2FsbCggdGhpcyApO1xufTtcblxuLyoqXG4gKiBSZW5kZXJzIHRoZSBjb250YWluZXIgdXNpbmcgdGhlIFdlYkdMIHJlbmRlcmVyXG4gKlxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLldlYkdMUmVuZGVyZXJ9IFRoZSB3ZWJnbCByZW5kZXJlclxuICogQHByaXZhdGVcbiAqL1xuUGFydGljbGVDb250YWluZXIucHJvdG90eXBlLnJlbmRlcldlYkdMID0gZnVuY3Rpb24gKHJlbmRlcmVyKVxue1xuICAgIGlmICghdGhpcy52aXNpYmxlIHx8IHRoaXMud29ybGRBbHBoYSA8PSAwIHx8ICF0aGlzLmNoaWxkcmVuLmxlbmd0aCB8fCAhdGhpcy5yZW5kZXJhYmxlKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHJlbmRlcmVyLnNldE9iamVjdFJlbmRlcmVyKCByZW5kZXJlci5wbHVnaW5zLnBhcnRpY2xlICk7XG4gICAgcmVuZGVyZXIucGx1Z2lucy5wYXJ0aWNsZS5yZW5kZXIoIHRoaXMgKTtcbn07XG5cbi8qKlxuICogU2V0IHRoZSBmbGFnIHRoYXQgc3RhdGljIGRhdGEgc2hvdWxkIGJlIHVwZGF0ZWQgdG8gdHJ1ZVxuICpcbiAqIEBwcml2YXRlXG4gKi9cblBhcnRpY2xlQ29udGFpbmVyLnByb3RvdHlwZS5vbkNoaWxkcmVuQ2hhbmdlID0gZnVuY3Rpb24gKHNtYWxsZXN0Q2hpbGRJbmRleClcbntcbiAgICB2YXIgYnVmZmVySW5kZXggPSBNYXRoLmZsb29yKHNtYWxsZXN0Q2hpbGRJbmRleCAvIHRoaXMuX2JhdGNoU2l6ZSk7XG4gICAgaWYgKGJ1ZmZlckluZGV4IDwgdGhpcy5fYnVmZmVyVG9VcGRhdGUpIHtcbiAgICAgICAgdGhpcy5fYnVmZmVyVG9VcGRhdGUgPSBidWZmZXJJbmRleDtcbiAgICB9XG59O1xuXG4vKipcbiAqIFJlbmRlcnMgdGhlIG9iamVjdCB1c2luZyB0aGUgQ2FudmFzIHJlbmRlcmVyXG4gKlxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLkNhbnZhc1JlbmRlcmVyfSBUaGUgY2FudmFzIHJlbmRlcmVyXG4gKiBAcHJpdmF0ZVxuICovXG5QYXJ0aWNsZUNvbnRhaW5lci5wcm90b3R5cGUucmVuZGVyQ2FudmFzID0gZnVuY3Rpb24gKHJlbmRlcmVyKVxue1xuICAgIGlmICghdGhpcy52aXNpYmxlIHx8IHRoaXMud29ybGRBbHBoYSA8PSAwIHx8ICF0aGlzLmNoaWxkcmVuLmxlbmd0aCB8fCAhdGhpcy5yZW5kZXJhYmxlKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHZhciBjb250ZXh0ID0gcmVuZGVyZXIuY29udGV4dDtcbiAgICB2YXIgdHJhbnNmb3JtID0gdGhpcy53b3JsZFRyYW5zZm9ybTtcbiAgICB2YXIgaXNSb3RhdGVkID0gdHJ1ZTtcblxuICAgIHZhciBwb3NpdGlvblggPSAwO1xuICAgIHZhciBwb3NpdGlvblkgPSAwO1xuXG4gICAgdmFyIGZpbmFsV2lkdGggPSAwO1xuICAgIHZhciBmaW5hbEhlaWdodCA9IDA7XG5cbiAgICB2YXIgY29tcG9zaXRlT3BlcmF0aW9uID0gcmVuZGVyZXIuYmxlbmRNb2Rlc1t0aGlzLmJsZW5kTW9kZV07XG4gICAgaWYgKGNvbXBvc2l0ZU9wZXJhdGlvbiAhPT0gY29udGV4dC5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb24pXG4gICAge1xuICAgICAgICBjb250ZXh0Lmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbiA9IGNvbXBvc2l0ZU9wZXJhdGlvbjtcbiAgICB9XG5cbiAgICBjb250ZXh0Lmdsb2JhbEFscGhhID0gdGhpcy53b3JsZEFscGhhO1xuXG4gICAgdGhpcy5kaXNwbGF5T2JqZWN0VXBkYXRlVHJhbnNmb3JtKCk7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuY2hpbGRyZW4ubGVuZ3RoOyArK2kpXG4gICAge1xuICAgICAgICB2YXIgY2hpbGQgPSB0aGlzLmNoaWxkcmVuW2ldO1xuXG4gICAgICAgIGlmICghY2hpbGQudmlzaWJsZSlcbiAgICAgICAge1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgZnJhbWUgPSBjaGlsZC50ZXh0dXJlLmZyYW1lO1xuXG4gICAgICAgIGNvbnRleHQuZ2xvYmFsQWxwaGEgPSB0aGlzLndvcmxkQWxwaGEgKiBjaGlsZC5hbHBoYTtcblxuICAgICAgICBpZiAoY2hpbGQucm90YXRpb24gJSAoTWF0aC5QSSAqIDIpID09PSAwKVxuICAgICAgICB7XG4gICAgICAgICAgICAvLyB0aGlzIGlzIHRoZSBmYXN0ZXN0ICB3YXkgdG8gb3B0aW1pc2UhIC0gaWYgcm90YXRpb24gaXMgMCB0aGVuIHdlIGNhbiBhdm9pZCBhbnkga2luZCBvZiBzZXRUcmFuc2Zvcm0gY2FsbFxuICAgICAgICAgICAgaWYgKGlzUm90YXRlZClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb250ZXh0LnNldFRyYW5zZm9ybShcbiAgICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtLmEsXG4gICAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybS5iLFxuICAgICAgICAgICAgICAgICAgICB0cmFuc2Zvcm0uYyxcbiAgICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtLmQsXG4gICAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybS50eCxcbiAgICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtLnR5XG4gICAgICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgICAgIGlzUm90YXRlZCA9IGZhbHNlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBwb3NpdGlvblggPSAoKGNoaWxkLmFuY2hvci54KSAqICgtZnJhbWUud2lkdGggKiBjaGlsZC5zY2FsZS54KSArIGNoaWxkLnBvc2l0aW9uLnggICsgMC41KTtcbiAgICAgICAgICAgIHBvc2l0aW9uWSA9ICgoY2hpbGQuYW5jaG9yLnkpICogKC1mcmFtZS5oZWlnaHQgKiBjaGlsZC5zY2FsZS55KSArIGNoaWxkLnBvc2l0aW9uLnkgICsgMC41KTtcblxuICAgICAgICAgICAgZmluYWxXaWR0aCA9IGZyYW1lLndpZHRoICogY2hpbGQuc2NhbGUueDtcbiAgICAgICAgICAgIGZpbmFsSGVpZ2h0ID0gZnJhbWUuaGVpZ2h0ICogY2hpbGQuc2NhbGUueTtcblxuICAgICAgICB9XG4gICAgICAgIGVsc2VcbiAgICAgICAge1xuICAgICAgICAgICAgaWYgKCFpc1JvdGF0ZWQpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgaXNSb3RhdGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY2hpbGQuZGlzcGxheU9iamVjdFVwZGF0ZVRyYW5zZm9ybSgpO1xuXG4gICAgICAgICAgICB2YXIgY2hpbGRUcmFuc2Zvcm0gPSBjaGlsZC53b3JsZFRyYW5zZm9ybTtcblxuICAgICAgICAgICAgaWYgKHJlbmRlcmVyLnJvdW5kUGl4ZWxzKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGNvbnRleHQuc2V0VHJhbnNmb3JtKFxuICAgICAgICAgICAgICAgICAgICBjaGlsZFRyYW5zZm9ybS5hLFxuICAgICAgICAgICAgICAgICAgICBjaGlsZFRyYW5zZm9ybS5iLFxuICAgICAgICAgICAgICAgICAgICBjaGlsZFRyYW5zZm9ybS5jLFxuICAgICAgICAgICAgICAgICAgICBjaGlsZFRyYW5zZm9ybS5kLFxuICAgICAgICAgICAgICAgICAgICBjaGlsZFRyYW5zZm9ybS50eCB8IDAsXG4gICAgICAgICAgICAgICAgICAgIGNoaWxkVHJhbnNmb3JtLnR5IHwgMFxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29udGV4dC5zZXRUcmFuc2Zvcm0oXG4gICAgICAgICAgICAgICAgICAgIGNoaWxkVHJhbnNmb3JtLmEsXG4gICAgICAgICAgICAgICAgICAgIGNoaWxkVHJhbnNmb3JtLmIsXG4gICAgICAgICAgICAgICAgICAgIGNoaWxkVHJhbnNmb3JtLmMsXG4gICAgICAgICAgICAgICAgICAgIGNoaWxkVHJhbnNmb3JtLmQsXG4gICAgICAgICAgICAgICAgICAgIGNoaWxkVHJhbnNmb3JtLnR4LFxuICAgICAgICAgICAgICAgICAgICBjaGlsZFRyYW5zZm9ybS50eVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHBvc2l0aW9uWCA9ICgoY2hpbGQuYW5jaG9yLngpICogKC1mcmFtZS53aWR0aCkgKyAwLjUpO1xuICAgICAgICAgICAgcG9zaXRpb25ZID0gKChjaGlsZC5hbmNob3IueSkgKiAoLWZyYW1lLmhlaWdodCkgKyAwLjUpO1xuXG4gICAgICAgICAgICBmaW5hbFdpZHRoID0gZnJhbWUud2lkdGg7XG4gICAgICAgICAgICBmaW5hbEhlaWdodCA9IGZyYW1lLmhlaWdodDtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnRleHQuZHJhd0ltYWdlKFxuICAgICAgICAgICAgY2hpbGQudGV4dHVyZS5iYXNlVGV4dHVyZS5zb3VyY2UsXG4gICAgICAgICAgICBmcmFtZS54LFxuICAgICAgICAgICAgZnJhbWUueSxcbiAgICAgICAgICAgIGZyYW1lLndpZHRoLFxuICAgICAgICAgICAgZnJhbWUuaGVpZ2h0LFxuICAgICAgICAgICAgcG9zaXRpb25YLFxuICAgICAgICAgICAgcG9zaXRpb25ZLFxuICAgICAgICAgICAgZmluYWxXaWR0aCxcbiAgICAgICAgICAgIGZpbmFsSGVpZ2h0XG4gICAgICAgICk7XG4gICAgfVxufTtcblxuLyoqXG4gKiBEZXN0cm95cyB0aGUgY29udGFpbmVyXG4gKlxuICogQHBhcmFtIFtkZXN0cm95Q2hpbGRyZW49ZmFsc2VdIHtib29sZWFufSBpZiBzZXQgdG8gdHJ1ZSwgYWxsIHRoZSBjaGlsZHJlbiB3aWxsIGhhdmUgdGhlaXIgZGVzdHJveSBtZXRob2QgY2FsbGVkIGFzIHdlbGxcbiAqL1xuUGFydGljbGVDb250YWluZXIucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoKSB7XG4gICAgQ29udGFpbmVyLnByb3RvdHlwZS5kZXN0cm95LmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG5cbiAgICBpZiAodGhpcy5fYnVmZmVycykge1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuX2J1ZmZlcnMubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgICAgIHRoaXMuX2J1ZmZlcnNbaV0uZGVzdHJveSgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5fcHJvcGVydGllcyA9IG51bGw7XG4gICAgdGhpcy5fYnVmZmVycyA9IG51bGw7XG59O1xuIiwiXG4vKipcbiAqIEBhdXRob3IgTWF0IEdyb3Zlc1xuICpcbiAqIEJpZyB0aGFua3MgdG8gdGhlIHZlcnkgY2xldmVyIE1hdHQgRGVzTGF1cmllcnMgPG1hdHRkZXNsPiBodHRwczovL2dpdGh1Yi5jb20vbWF0dGRlc2wvXG4gKiBmb3IgY3JlYXRpbmcgdGhlIG9yaWdpbmFsIHBpeGkgdmVyc2lvbiFcbiAqIEFsc28gYSB0aGFua3MgdG8gaHR0cHM6Ly9naXRodWIuY29tL2JjaGV2YWxpZXIgZm9yIHR3ZWFraW5nIHRoZSB0aW50IGFuZCBhbHBoYSBzbyB0aGF0IHRoZXkgbm93IHNoYXJlIDQgYnl0ZXMgb24gdGhlIHZlcnRleCBidWZmZXJcbiAqXG4gKiBIZWF2aWx5IGluc3BpcmVkIGJ5IExpYkdEWCdzIFBhcnRpY2xlQnVmZmVyOlxuICogaHR0cHM6Ly9naXRodWIuY29tL2xpYmdkeC9saWJnZHgvYmxvYi9tYXN0ZXIvZ2R4L3NyYy9jb20vYmFkbG9naWMvZ2R4L2dyYXBoaWNzL2cyZC9QYXJ0aWNsZUJ1ZmZlci5qYXZhXG4gKi9cblxuLyoqXG4gKiBUaGUgcGFydGljbGUgYnVmZmVyIG1hbmFnZXMgdGhlIHN0YXRpYyBhbmQgZHluYW1pYyBidWZmZXJzIGZvciBhIHBhcnRpY2xlIGNvbnRhaW5lci5cbiAqXG4gKiBAY2xhc3NcbiAqIEBwcml2YXRlXG4gKiBAbWVtYmVyb2YgUElYSVxuICovXG5mdW5jdGlvbiBQYXJ0aWNsZUJ1ZmZlcihnbCwgcHJvcGVydGllcywgZHluYW1pY1Byb3BlcnR5RmxhZ3MsIHNpemUpXG57XG4gICAgLyoqXG4gICAgICogVGhlIGN1cnJlbnQgV2ViR0wgZHJhd2luZyBjb250ZXh0LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7V2ViR0xSZW5kZXJpbmdDb250ZXh0fVxuICAgICAqL1xuICAgIHRoaXMuZ2wgPSBnbDtcblxuICAgIC8qKlxuICAgICAqIFNpemUgb2YgYSBzaW5nbGUgdmVydGV4LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMudmVydFNpemUgPSAyO1xuXG4gICAgLyoqXG4gICAgICogU2l6ZSBvZiBhIHNpbmdsZSB2ZXJ0ZXggaW4gYnl0ZXMuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy52ZXJ0Qnl0ZVNpemUgPSB0aGlzLnZlcnRTaXplICogNDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBudW1iZXIgb2YgcGFydGljbGVzIHRoZSBidWZmZXIgY2FuIGhvbGRcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLnNpemUgPSBzaXplO1xuXG4gICAgLyoqXG4gICAgICogQSBsaXN0IG9mIHRoZSBwcm9wZXJ0aWVzIHRoYXQgYXJlIGR5bmFtaWMuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtvYmplY3RbXX1cbiAgICAgKi9cbiAgICB0aGlzLmR5bmFtaWNQcm9wZXJ0aWVzID0gW107XG5cbiAgICAvKipcbiAgICAgKiBBIGxpc3Qgb2YgdGhlIHByb3BlcnRpZXMgdGhhdCBhcmUgc3RhdGljLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7b2JqZWN0W119XG4gICAgICovXG4gICAgdGhpcy5zdGF0aWNQcm9wZXJ0aWVzID0gW107XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BlcnRpZXMubGVuZ3RoOyBpKyspXG4gICAge1xuICAgICAgICB2YXIgcHJvcGVydHkgPSBwcm9wZXJ0aWVzW2ldO1xuXG4gICAgICAgIGlmKGR5bmFtaWNQcm9wZXJ0eUZsYWdzW2ldKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmR5bmFtaWNQcm9wZXJ0aWVzLnB1c2gocHJvcGVydHkpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2VcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5zdGF0aWNQcm9wZXJ0aWVzLnB1c2gocHJvcGVydHkpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5zdGF0aWNTdHJpZGUgPSAwO1xuICAgIHRoaXMuc3RhdGljQnVmZmVyID0gbnVsbDtcbiAgICB0aGlzLnN0YXRpY0RhdGEgPSBudWxsO1xuXG4gICAgdGhpcy5keW5hbWljU3RyaWRlID0gMDtcbiAgICB0aGlzLmR5bmFtaWNCdWZmZXIgPSBudWxsO1xuICAgIHRoaXMuZHluYW1pY0RhdGEgPSBudWxsO1xuXG4gICAgdGhpcy5pbml0QnVmZmVycygpO1xuXG59XG5cblBhcnRpY2xlQnVmZmVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFBhcnRpY2xlQnVmZmVyO1xubW9kdWxlLmV4cG9ydHMgPSBQYXJ0aWNsZUJ1ZmZlcjtcblxuLyoqXG4gKiBTZXRzIHVwIHRoZSByZW5kZXJlciBjb250ZXh0IGFuZCBuZWNlc3NhcnkgYnVmZmVycy5cbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5QYXJ0aWNsZUJ1ZmZlci5wcm90b3R5cGUuaW5pdEJ1ZmZlcnMgPSBmdW5jdGlvbiAoKVxue1xuICAgIHZhciBnbCA9IHRoaXMuZ2w7XG4gICAgdmFyIGk7XG4gICAgdmFyIHByb3BlcnR5O1xuXG4gICAgdmFyIGR5bmFtaWNPZmZzZXQgPSAwO1xuICAgIHRoaXMuZHluYW1pY1N0cmlkZSA9IDA7XG5cbiAgICBmb3IgKGkgPSAwOyBpIDwgdGhpcy5keW5hbWljUHJvcGVydGllcy5sZW5ndGg7IGkrKylcbiAgICB7XG4gICAgICAgIHByb3BlcnR5ID0gdGhpcy5keW5hbWljUHJvcGVydGllc1tpXTtcblxuICAgICAgICBwcm9wZXJ0eS5vZmZzZXQgPSBkeW5hbWljT2Zmc2V0O1xuICAgICAgICBkeW5hbWljT2Zmc2V0ICs9IHByb3BlcnR5LnNpemU7XG4gICAgICAgIHRoaXMuZHluYW1pY1N0cmlkZSArPSBwcm9wZXJ0eS5zaXplO1xuICAgIH1cblxuICAgIHRoaXMuZHluYW1pY0RhdGEgPSBuZXcgRmxvYXQzMkFycmF5KCB0aGlzLnNpemUgKiB0aGlzLmR5bmFtaWNTdHJpZGUgKiA0KTtcbiAgICB0aGlzLmR5bmFtaWNCdWZmZXIgPSBnbC5jcmVhdGVCdWZmZXIoKTtcblxuICAgIGdsLmJpbmRCdWZmZXIoZ2wuQVJSQVlfQlVGRkVSLCB0aGlzLmR5bmFtaWNCdWZmZXIpO1xuICAgIGdsLmJ1ZmZlckRhdGEoZ2wuQVJSQVlfQlVGRkVSLCB0aGlzLmR5bmFtaWNEYXRhLCBnbC5EWU5BTUlDX0RSQVcpO1xuXG5cbiAgICAvLyBzdGF0aWMgLy9cbiAgICB2YXIgc3RhdGljT2Zmc2V0ID0gMDtcbiAgICB0aGlzLnN0YXRpY1N0cmlkZSA9IDA7XG5cbiAgICBmb3IgKGkgPSAwOyBpIDwgdGhpcy5zdGF0aWNQcm9wZXJ0aWVzLmxlbmd0aDsgaSsrKVxuICAgIHtcbiAgICAgICAgcHJvcGVydHkgPSB0aGlzLnN0YXRpY1Byb3BlcnRpZXNbaV07XG5cbiAgICAgICAgcHJvcGVydHkub2Zmc2V0ID0gc3RhdGljT2Zmc2V0O1xuICAgICAgICBzdGF0aWNPZmZzZXQgKz0gcHJvcGVydHkuc2l6ZTtcbiAgICAgICAgdGhpcy5zdGF0aWNTdHJpZGUgKz0gcHJvcGVydHkuc2l6ZTtcbiAgICB9XG5cbiAgICB0aGlzLnN0YXRpY0RhdGEgPSBuZXcgRmxvYXQzMkFycmF5KCB0aGlzLnNpemUgKiB0aGlzLnN0YXRpY1N0cmlkZSAqIDQpO1xuICAgIHRoaXMuc3RhdGljQnVmZmVyID0gZ2wuY3JlYXRlQnVmZmVyKCk7XG5cbiAgICBnbC5iaW5kQnVmZmVyKGdsLkFSUkFZX0JVRkZFUiwgdGhpcy5zdGF0aWNCdWZmZXIpO1xuICAgIGdsLmJ1ZmZlckRhdGEoZ2wuQVJSQVlfQlVGRkVSLCB0aGlzLnN0YXRpY0RhdGEsIGdsLkRZTkFNSUNfRFJBVyk7XG59O1xuXG4vKipcbiAqIFVwbG9hZHMgdGhlIGR5bmFtaWMgcHJvcGVydGllcy5cbiAqXG4gKi9cblBhcnRpY2xlQnVmZmVyLnByb3RvdHlwZS51cGxvYWREeW5hbWljID0gZnVuY3Rpb24oY2hpbGRyZW4sIHN0YXJ0SW5kZXgsIGFtb3VudClcbntcbiAgICB2YXIgZ2wgPSB0aGlzLmdsO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmR5bmFtaWNQcm9wZXJ0aWVzLmxlbmd0aDsgaSsrKVxuICAgIHtcbiAgICAgICAgdmFyIHByb3BlcnR5ID0gdGhpcy5keW5hbWljUHJvcGVydGllc1tpXTtcbiAgICAgICAgcHJvcGVydHkudXBsb2FkRnVuY3Rpb24oY2hpbGRyZW4sIHN0YXJ0SW5kZXgsIGFtb3VudCwgdGhpcy5keW5hbWljRGF0YSwgdGhpcy5keW5hbWljU3RyaWRlLCBwcm9wZXJ0eS5vZmZzZXQpO1xuICAgIH1cblxuICAgIGdsLmJpbmRCdWZmZXIoZ2wuQVJSQVlfQlVGRkVSLCB0aGlzLmR5bmFtaWNCdWZmZXIpO1xuICAgIGdsLmJ1ZmZlclN1YkRhdGEoZ2wuQVJSQVlfQlVGRkVSLCAwLCB0aGlzLmR5bmFtaWNEYXRhKTtcbn07XG5cbi8qKlxuICogVXBsb2FkcyB0aGUgc3RhdGljIHByb3BlcnRpZXMuXG4gKlxuICovXG5QYXJ0aWNsZUJ1ZmZlci5wcm90b3R5cGUudXBsb2FkU3RhdGljID0gZnVuY3Rpb24oY2hpbGRyZW4sIHN0YXJ0SW5kZXgsIGFtb3VudClcbntcbiAgICB2YXIgZ2wgPSB0aGlzLmdsO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLnN0YXRpY1Byb3BlcnRpZXMubGVuZ3RoOyBpKyspXG4gICAge1xuICAgICAgICB2YXIgcHJvcGVydHkgPSB0aGlzLnN0YXRpY1Byb3BlcnRpZXNbaV07XG4gICAgICAgIHByb3BlcnR5LnVwbG9hZEZ1bmN0aW9uKGNoaWxkcmVuLCBzdGFydEluZGV4LCBhbW91bnQsIHRoaXMuc3RhdGljRGF0YSwgdGhpcy5zdGF0aWNTdHJpZGUsIHByb3BlcnR5Lm9mZnNldCk7XG4gICAgfVxuXG4gICAgZ2wuYmluZEJ1ZmZlcihnbC5BUlJBWV9CVUZGRVIsIHRoaXMuc3RhdGljQnVmZmVyKTtcbiAgICBnbC5idWZmZXJTdWJEYXRhKGdsLkFSUkFZX0JVRkZFUiwgMCwgdGhpcy5zdGF0aWNEYXRhKTtcbn07XG5cbi8qKlxuICogQmluZHMgdGhlIGJ1ZmZlcnMgdG8gdGhlIEdQVVxuICpcbiAqL1xuUGFydGljbGVCdWZmZXIucHJvdG90eXBlLmJpbmQgPSBmdW5jdGlvbiAoKVxue1xuICAgIHZhciBnbCA9IHRoaXMuZ2w7XG4gICAgdmFyIGksIHByb3BlcnR5O1xuXG4gICAgZ2wuYmluZEJ1ZmZlcihnbC5BUlJBWV9CVUZGRVIsIHRoaXMuZHluYW1pY0J1ZmZlcik7XG5cbiAgICBmb3IgKGkgPSAwOyBpIDwgdGhpcy5keW5hbWljUHJvcGVydGllcy5sZW5ndGg7IGkrKylcbiAgICB7XG4gICAgICAgIHByb3BlcnR5ID0gdGhpcy5keW5hbWljUHJvcGVydGllc1tpXTtcbiAgICAgICAgZ2wudmVydGV4QXR0cmliUG9pbnRlcihwcm9wZXJ0eS5hdHRyaWJ1dGUsIHByb3BlcnR5LnNpemUsIGdsLkZMT0FULCBmYWxzZSwgdGhpcy5keW5hbWljU3RyaWRlICogNCwgcHJvcGVydHkub2Zmc2V0ICogNCk7XG4gICAgfVxuXG4gICAgZ2wuYmluZEJ1ZmZlcihnbC5BUlJBWV9CVUZGRVIsIHRoaXMuc3RhdGljQnVmZmVyKTtcblxuICAgIGZvciAoaSA9IDA7IGkgPCB0aGlzLnN0YXRpY1Byb3BlcnRpZXMubGVuZ3RoOyBpKyspXG4gICAge1xuICAgICAgICBwcm9wZXJ0eSA9IHRoaXMuc3RhdGljUHJvcGVydGllc1tpXTtcbiAgICAgICAgZ2wudmVydGV4QXR0cmliUG9pbnRlcihwcm9wZXJ0eS5hdHRyaWJ1dGUsIHByb3BlcnR5LnNpemUsIGdsLkZMT0FULCBmYWxzZSwgdGhpcy5zdGF0aWNTdHJpZGUgKiA0LCBwcm9wZXJ0eS5vZmZzZXQgKiA0KTtcbiAgICB9XG59O1xuXG4vKipcbiAqIERlc3Ryb3lzIHRoZSBQYXJ0aWNsZUJ1ZmZlci5cbiAqXG4gKi9cblBhcnRpY2xlQnVmZmVyLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLmR5bmFtaWNQcm9wZXJ0aWVzID0gbnVsbDtcbiAgICB0aGlzLmR5bmFtaWNEYXRhID0gbnVsbDtcbiAgICB0aGlzLmdsLmRlbGV0ZUJ1ZmZlcih0aGlzLmR5bmFtaWNCdWZmZXIpO1xuXG4gICAgdGhpcy5zdGF0aWNQcm9wZXJ0aWVzID0gbnVsbDtcbiAgICB0aGlzLnN0YXRpY0RhdGEgPSBudWxsO1xuICAgIHRoaXMuZ2wuZGVsZXRlQnVmZmVyKHRoaXMuc3RhdGljQnVmZmVyKTtcbn07XG4iLCJ2YXIgT2JqZWN0UmVuZGVyZXIgPSByZXF1aXJlKCcuLi8uLi9yZW5kZXJlcnMvd2ViZ2wvdXRpbHMvT2JqZWN0UmVuZGVyZXInKSxcbiAgICBXZWJHTFJlbmRlcmVyID0gcmVxdWlyZSgnLi4vLi4vcmVuZGVyZXJzL3dlYmdsL1dlYkdMUmVuZGVyZXInKSxcbiAgICBQYXJ0aWNsZVNoYWRlciA9IHJlcXVpcmUoJy4vUGFydGljbGVTaGFkZXInKSxcbiAgICBQYXJ0aWNsZUJ1ZmZlciA9IHJlcXVpcmUoJy4vUGFydGljbGVCdWZmZXInKSxcbiAgICBtYXRoICAgICAgICAgICAgPSByZXF1aXJlKCcuLi8uLi9tYXRoJyk7XG5cbi8qKlxuICogQGF1dGhvciBNYXQgR3JvdmVzXG4gKlxuICogQmlnIHRoYW5rcyB0byB0aGUgdmVyeSBjbGV2ZXIgTWF0dCBEZXNMYXVyaWVycyA8bWF0dGRlc2w+IGh0dHBzOi8vZ2l0aHViLmNvbS9tYXR0ZGVzbC9cbiAqIGZvciBjcmVhdGluZyB0aGUgb3JpZ2luYWwgcGl4aSB2ZXJzaW9uIVxuICogQWxzbyBhIHRoYW5rcyB0byBodHRwczovL2dpdGh1Yi5jb20vYmNoZXZhbGllciBmb3IgdHdlYWtpbmcgdGhlIHRpbnQgYW5kIGFscGhhIHNvIHRoYXQgdGhleSBub3cgc2hhcmUgNCBieXRlcyBvbiB0aGUgdmVydGV4IGJ1ZmZlclxuICpcbiAqIEhlYXZpbHkgaW5zcGlyZWQgYnkgTGliR0RYJ3MgUGFydGljbGVSZW5kZXJlcjpcbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS9saWJnZHgvbGliZ2R4L2Jsb2IvbWFzdGVyL2dkeC9zcmMvY29tL2JhZGxvZ2ljL2dkeC9ncmFwaGljcy9nMmQvUGFydGljbGVSZW5kZXJlci5qYXZhXG4gKi9cblxuLyoqXG4gKlxuICogQGNsYXNzXG4gKiBAcHJpdmF0ZVxuICogQG1lbWJlcm9mIFBJWElcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5XZWJHTFJlbmRlcmVyfSBUaGUgcmVuZGVyZXIgdGhpcyBzcHJpdGUgYmF0Y2ggd29ya3MgZm9yLlxuICovXG5mdW5jdGlvbiBQYXJ0aWNsZVJlbmRlcmVyKHJlbmRlcmVyKVxue1xuICAgIE9iamVjdFJlbmRlcmVyLmNhbGwodGhpcywgcmVuZGVyZXIpO1xuXG4gICAgLy8gNjU1MzUgaXMgbWF4IHZlcnRleCBpbmRleCBpbiB0aGUgaW5kZXggYnVmZmVyIChzZWUgUGFydGljbGVSZW5kZXJlcilcbiAgICAvLyBzbyBtYXggbnVtYmVyIG9mIHBhcnRpY2xlcyBpcyA2NTUzNiAvIDQgPSAxNjM4NFxuICAgIC8vIGFuZCBtYXggbnVtYmVyIG9mIGVsZW1lbnQgaW4gdGhlIGluZGV4IGJ1ZmZlciBpcyAxNjM4NCAqIDYgPSA5ODMwNFxuICAgIC8vIENyZWF0aW5nIGEgZnVsbCBpbmRleCBidWZmZXIsIG92ZXJoZWFkIGlzIDk4MzA0ICogMiA9IDE5NktvXG4gICAgdmFyIG51bUluZGljZXMgPSA5ODMwNDtcblxuICAgIC8qKlxuICAgICAqIEhvbGRzIHRoZSBpbmRpY2VzXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtVaW50MTZBcnJheX1cbiAgICAgKi9cbiAgICB0aGlzLmluZGljZXMgPSBuZXcgVWludDE2QXJyYXkobnVtSW5kaWNlcyk7XG5cbiAgICBmb3IgKHZhciBpPTAsIGo9MDsgaSA8IG51bUluZGljZXM7IGkgKz0gNiwgaiArPSA0KVxuICAgIHtcbiAgICAgICAgdGhpcy5pbmRpY2VzW2kgKyAwXSA9IGogKyAwO1xuICAgICAgICB0aGlzLmluZGljZXNbaSArIDFdID0gaiArIDE7XG4gICAgICAgIHRoaXMuaW5kaWNlc1tpICsgMl0gPSBqICsgMjtcbiAgICAgICAgdGhpcy5pbmRpY2VzW2kgKyAzXSA9IGogKyAwO1xuICAgICAgICB0aGlzLmluZGljZXNbaSArIDRdID0gaiArIDI7XG4gICAgICAgIHRoaXMuaW5kaWNlc1tpICsgNV0gPSBqICsgMztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGUgZGVmYXVsdCBzaGFkZXIgdGhhdCBpcyB1c2VkIGlmIGEgc3ByaXRlIGRvZXNuJ3QgaGF2ZSBhIG1vcmUgc3BlY2lmaWMgb25lLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5TaGFkZXJ9XG4gICAgICovXG4gICAgdGhpcy5zaGFkZXIgPSBudWxsO1xuXG4gICAgdGhpcy5pbmRleEJ1ZmZlciA9IG51bGw7XG5cbiAgICB0aGlzLnByb3BlcnRpZXMgPSBudWxsO1xuXG4gICAgdGhpcy50ZW1wTWF0cml4ID0gbmV3IG1hdGguTWF0cml4KCk7XG59XG5cblBhcnRpY2xlUmVuZGVyZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShPYmplY3RSZW5kZXJlci5wcm90b3R5cGUpO1xuUGFydGljbGVSZW5kZXJlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBQYXJ0aWNsZVJlbmRlcmVyO1xubW9kdWxlLmV4cG9ydHMgPSBQYXJ0aWNsZVJlbmRlcmVyO1xuXG5XZWJHTFJlbmRlcmVyLnJlZ2lzdGVyUGx1Z2luKCdwYXJ0aWNsZScsIFBhcnRpY2xlUmVuZGVyZXIpO1xuXG4vKipcbiAqIFdoZW4gdGhlcmUgaXMgYSBXZWJHTCBjb250ZXh0IGNoYW5nZVxuICpcbiAqIEBwcml2YXRlXG4gKi9cblBhcnRpY2xlUmVuZGVyZXIucHJvdG90eXBlLm9uQ29udGV4dENoYW5nZSA9IGZ1bmN0aW9uICgpXG57XG4gICAgdmFyIGdsID0gdGhpcy5yZW5kZXJlci5nbDtcblxuICAgIC8vIHNldHVwIGRlZmF1bHQgc2hhZGVyXG4gICAgdGhpcy5zaGFkZXIgPSBuZXcgUGFydGljbGVTaGFkZXIodGhpcy5yZW5kZXJlci5zaGFkZXJNYW5hZ2VyKTtcblxuICAgIHRoaXMuaW5kZXhCdWZmZXIgPSBnbC5jcmVhdGVCdWZmZXIoKTtcblxuICAgIC8vIDY1NTM1IGlzIG1heCBpbmRleCwgc28gNjU1MzUgLyA2ID0gMTA5MjIuXG5cbiAgICAvL3VwbG9hZCB0aGUgaW5kZXggZGF0YVxuICAgIGdsLmJpbmRCdWZmZXIoZ2wuRUxFTUVOVF9BUlJBWV9CVUZGRVIsIHRoaXMuaW5kZXhCdWZmZXIpO1xuICAgIGdsLmJ1ZmZlckRhdGEoZ2wuRUxFTUVOVF9BUlJBWV9CVUZGRVIsIHRoaXMuaW5kaWNlcywgZ2wuU1RBVElDX0RSQVcpO1xuXG4gICAgdGhpcy5wcm9wZXJ0aWVzID0gW1xuICAgICAgICAvLyB2ZXJ0aWNlc0RhdGFcbiAgICAgICAge1xuICAgICAgICAgICAgYXR0cmlidXRlOnRoaXMuc2hhZGVyLmF0dHJpYnV0ZXMuYVZlcnRleFBvc2l0aW9uLFxuICAgICAgICAgICAgc2l6ZToyLFxuICAgICAgICAgICAgdXBsb2FkRnVuY3Rpb246dGhpcy51cGxvYWRWZXJ0aWNlcyxcbiAgICAgICAgICAgIG9mZnNldDowXG4gICAgICAgIH0sXG4gICAgICAgIC8vIHBvc2l0aW9uRGF0YVxuICAgICAgICB7XG4gICAgICAgICAgICBhdHRyaWJ1dGU6dGhpcy5zaGFkZXIuYXR0cmlidXRlcy5hUG9zaXRpb25Db29yZCxcbiAgICAgICAgICAgIHNpemU6MixcbiAgICAgICAgICAgIHVwbG9hZEZ1bmN0aW9uOnRoaXMudXBsb2FkUG9zaXRpb24sXG4gICAgICAgICAgICBvZmZzZXQ6MFxuICAgICAgICB9LFxuICAgICAgICAvLyByb3RhdGlvbkRhdGFcbiAgICAgICAge1xuICAgICAgICAgICAgYXR0cmlidXRlOnRoaXMuc2hhZGVyLmF0dHJpYnV0ZXMuYVJvdGF0aW9uLFxuICAgICAgICAgICAgc2l6ZToxLFxuICAgICAgICAgICAgdXBsb2FkRnVuY3Rpb246dGhpcy51cGxvYWRSb3RhdGlvbixcbiAgICAgICAgICAgIG9mZnNldDowXG4gICAgICAgIH0sXG4gICAgICAgIC8vIHV2c0RhdGFcbiAgICAgICAge1xuICAgICAgICAgICAgYXR0cmlidXRlOnRoaXMuc2hhZGVyLmF0dHJpYnV0ZXMuYVRleHR1cmVDb29yZCxcbiAgICAgICAgICAgIHNpemU6MixcbiAgICAgICAgICAgIHVwbG9hZEZ1bmN0aW9uOnRoaXMudXBsb2FkVXZzLFxuICAgICAgICAgICAgb2Zmc2V0OjBcbiAgICAgICAgfSxcbiAgICAgICAgLy8gYWxwaGFEYXRhXG4gICAgICAgIHtcbiAgICAgICAgICAgIGF0dHJpYnV0ZTp0aGlzLnNoYWRlci5hdHRyaWJ1dGVzLmFDb2xvcixcbiAgICAgICAgICAgIHNpemU6MSxcbiAgICAgICAgICAgIHVwbG9hZEZ1bmN0aW9uOnRoaXMudXBsb2FkQWxwaGEsXG4gICAgICAgICAgICBvZmZzZXQ6MFxuICAgICAgICB9XG4gICAgXTtcbn07XG5cbi8qKlxuICogU3RhcnRzIGEgbmV3IHBhcnRpY2xlIGJhdGNoLlxuICpcbiAqL1xuUGFydGljbGVSZW5kZXJlci5wcm90b3R5cGUuc3RhcnQgPSBmdW5jdGlvbiAoKVxue1xuICAgIHZhciBnbCA9IHRoaXMucmVuZGVyZXIuZ2w7XG5cbiAgICAvLyBiaW5kIHRoZSBtYWluIHRleHR1cmVcbiAgICBnbC5hY3RpdmVUZXh0dXJlKGdsLlRFWFRVUkUwKTtcblxuICAgIC8vIGJpbmQgdGhlIGJ1ZmZlcnNcblxuICAgIGdsLmJpbmRCdWZmZXIoZ2wuRUxFTUVOVF9BUlJBWV9CVUZGRVIsIHRoaXMuaW5kZXhCdWZmZXIpO1xuXG4gICAgdmFyIHNoYWRlciA9IHRoaXMuc2hhZGVyO1xuXG4gICAgdGhpcy5yZW5kZXJlci5zaGFkZXJNYW5hZ2VyLnNldFNoYWRlcihzaGFkZXIpO1xufTtcblxuXG4vKipcbiAqIFJlbmRlcnMgdGhlIHBhcnRpY2xlIGNvbnRhaW5lciBvYmplY3QuXG4gKlxuICogQHBhcmFtIGNvbnRhaW5lciB7UElYSS5QYXJ0aWNsZUNvbnRhaW5lcn0gVGhlIGNvbnRhaW5lciB0byByZW5kZXIgdXNpbmcgdGhpcyBQYXJ0aWNsZVJlbmRlcmVyXG4gKi9cblBhcnRpY2xlUmVuZGVyZXIucHJvdG90eXBlLnJlbmRlciA9IGZ1bmN0aW9uIChjb250YWluZXIpXG57XG4gICAgdmFyIGNoaWxkcmVuID0gY29udGFpbmVyLmNoaWxkcmVuLFxuICAgICAgICB0b3RhbENoaWxkcmVuID0gY2hpbGRyZW4ubGVuZ3RoLFxuICAgICAgICBtYXhTaXplID0gY29udGFpbmVyLl9tYXhTaXplLFxuICAgICAgICBiYXRjaFNpemUgPSBjb250YWluZXIuX2JhdGNoU2l6ZTtcblxuICAgIGlmKHRvdGFsQ2hpbGRyZW4gPT09IDApXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIGVsc2UgaWYodG90YWxDaGlsZHJlbiA+IG1heFNpemUpXG4gICAge1xuICAgICAgICB0b3RhbENoaWxkcmVuID0gbWF4U2l6ZTtcbiAgICB9XG5cbiAgICBpZighY29udGFpbmVyLl9idWZmZXJzKVxuICAgIHtcbiAgICAgICAgY29udGFpbmVyLl9idWZmZXJzID0gdGhpcy5nZW5lcmF0ZUJ1ZmZlcnMoIGNvbnRhaW5lciApO1xuICAgIH1cblxuICAgIC8vIGlmIHRoZSB1dnMgaGF2ZSBub3QgdXBkYXRlZCB0aGVuIG5vIHBvaW50IHJlbmRlcmluZyBqdXN0IHlldCFcbiAgICB0aGlzLnJlbmRlcmVyLmJsZW5kTW9kZU1hbmFnZXIuc2V0QmxlbmRNb2RlKGNvbnRhaW5lci5ibGVuZE1vZGUpO1xuXG4gICAgdmFyIGdsID0gdGhpcy5yZW5kZXJlci5nbDtcblxuICAgIHZhciBtID0gIGNvbnRhaW5lci53b3JsZFRyYW5zZm9ybS5jb3B5KCB0aGlzLnRlbXBNYXRyaXggKTtcbiAgICBtLnByZXBlbmQoIHRoaXMucmVuZGVyZXIuY3VycmVudFJlbmRlclRhcmdldC5wcm9qZWN0aW9uTWF0cml4ICk7XG4gICAgZ2wudW5pZm9ybU1hdHJpeDNmdih0aGlzLnNoYWRlci51bmlmb3Jtcy5wcm9qZWN0aW9uTWF0cml4Ll9sb2NhdGlvbiwgZmFsc2UsIG0udG9BcnJheSh0cnVlKSk7XG4gICAgZ2wudW5pZm9ybTFmKHRoaXMuc2hhZGVyLnVuaWZvcm1zLnVBbHBoYS5fbG9jYXRpb24sIGNvbnRhaW5lci53b3JsZEFscGhhKTtcblxuXG4gICAgLy8gbWFrZSBzdXJlIHRoZSB0ZXh0dXJlIGlzIGJvdW5kLi5cbiAgICB2YXIgYmFzZVRleHR1cmUgPSBjaGlsZHJlblswXS5fdGV4dHVyZS5iYXNlVGV4dHVyZTtcblxuICAgIGlmICghYmFzZVRleHR1cmUuX2dsVGV4dHVyZXNbZ2wuaWRdKVxuICAgIHtcbiAgICAgICAgLy8gaWYgdGhlIHRleHR1cmUgaGFzIG5vdCB1cGRhdGVkIHRoZW4gbGV0cyBub3QgdXBsb2FkIGFueSBzdGF0aWMgcHJvcGVydGllc1xuICAgICAgICBpZighdGhpcy5yZW5kZXJlci51cGRhdGVUZXh0dXJlKGJhc2VUZXh0dXJlKSlcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYoIWNvbnRhaW5lci5fcHJvcGVydGllc1swXSB8fCAhY29udGFpbmVyLl9wcm9wZXJ0aWVzWzNdKVxuICAgICAgICB7XG4gICAgICAgICAgICBjb250YWluZXIuX2J1ZmZlclRvVXBkYXRlID0gMDtcbiAgICAgICAgfVxuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICBnbC5iaW5kVGV4dHVyZShnbC5URVhUVVJFXzJELCBiYXNlVGV4dHVyZS5fZ2xUZXh0dXJlc1tnbC5pZF0pO1xuICAgIH1cblxuICAgIC8vIG5vdyBsZXRzIHVwbG9hZCBhbmQgcmVuZGVyIHRoZSBidWZmZXJzLi5cbiAgICBmb3IgKHZhciBpID0gMCwgaiA9IDA7IGkgPCB0b3RhbENoaWxkcmVuOyBpICs9IGJhdGNoU2l6ZSwgaiArPSAxKVxuICAgIHtcbiAgICAgICAgdmFyIGFtb3VudCA9ICggdG90YWxDaGlsZHJlbiAtIGkpO1xuICAgICAgICBpZihhbW91bnQgPiBiYXRjaFNpemUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGFtb3VudCA9IGJhdGNoU2l6ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBidWZmZXIgPSBjb250YWluZXIuX2J1ZmZlcnNbal07XG5cbiAgICAgICAgLy8gd2UgYWx3YXlzIHVwbG9hZCB0aGUgZHluYW1pY1xuICAgICAgICBidWZmZXIudXBsb2FkRHluYW1pYyhjaGlsZHJlbiwgaSwgYW1vdW50KTtcblxuICAgICAgICAvLyB3ZSBvbmx5IHVwbG9hZCB0aGUgc3RhdGljIGNvbnRlbnQgd2hlbiB3ZSBoYXZlIHRvIVxuICAgICAgICBpZihjb250YWluZXIuX2J1ZmZlclRvVXBkYXRlID09PSBqKVxuICAgICAgICB7XG4gICAgICAgICAgICBidWZmZXIudXBsb2FkU3RhdGljKGNoaWxkcmVuLCBpLCBhbW91bnQpO1xuICAgICAgICAgICAgY29udGFpbmVyLl9idWZmZXJUb1VwZGF0ZSA9IGogKyAxO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gYmluZCB0aGUgYnVmZmVyXG4gICAgICAgIGJ1ZmZlci5iaW5kKCB0aGlzLnNoYWRlciApO1xuXG4gICAgICAgICAvLyBub3cgZHJhdyB0aG9zZSBzdWNrYXMhXG4gICAgICAgIGdsLmRyYXdFbGVtZW50cyhnbC5UUklBTkdMRVMsIGFtb3VudCAqIDYsIGdsLlVOU0lHTkVEX1NIT1JULCAwKTtcbiAgICAgICAgdGhpcy5yZW5kZXJlci5kcmF3Q291bnQrKztcbiAgICB9XG59O1xuXG4vKipcbiAqIENyZWF0ZXMgb25lIHBhcnRpY2xlIGJ1ZmZlciBmb3IgZWFjaCBjaGlsZCBpbiB0aGUgY29udGFpbmVyIHdlIHdhbnQgdG8gcmVuZGVyIGFuZCB1cGRhdGVzIGludGVybmFsIHByb3BlcnRpZXNcbiAqXG4gKiBAcGFyYW0gY29udGFpbmVyIHtQSVhJLlBhcnRpY2xlQ29udGFpbmVyfSBUaGUgY29udGFpbmVyIHRvIHJlbmRlciB1c2luZyB0aGlzIFBhcnRpY2xlUmVuZGVyZXJcbiAqL1xuUGFydGljbGVSZW5kZXJlci5wcm90b3R5cGUuZ2VuZXJhdGVCdWZmZXJzID0gZnVuY3Rpb24gKGNvbnRhaW5lcilcbntcbiAgICB2YXIgZ2wgPSB0aGlzLnJlbmRlcmVyLmdsLFxuICAgICAgICBidWZmZXJzID0gW10sXG4gICAgICAgIHNpemUgPSBjb250YWluZXIuX21heFNpemUsXG4gICAgICAgIGJhdGNoU2l6ZSA9IGNvbnRhaW5lci5fYmF0Y2hTaXplLFxuICAgICAgICBkeW5hbWljUHJvcGVydHlGbGFncyA9IGNvbnRhaW5lci5fcHJvcGVydGllcyxcbiAgICAgICAgaTtcblxuICAgIGZvciAoaSA9IDA7IGkgPCBzaXplOyBpICs9IGJhdGNoU2l6ZSlcbiAgICB7XG4gICAgICAgIGJ1ZmZlcnMucHVzaChuZXcgUGFydGljbGVCdWZmZXIoZ2wsIHRoaXMucHJvcGVydGllcywgZHluYW1pY1Byb3BlcnR5RmxhZ3MsIGJhdGNoU2l6ZSkpO1xuICAgIH1cblxuICAgIHJldHVybiBidWZmZXJzO1xufTtcblxuLyoqXG4gKiBVcGxvYWRzIHRoZSB2ZXJ0aWNpZXMuXG4gKlxuICogQHBhcmFtIGNoaWxkcmVuIHtQSVhJLkRpc3BsYXlPYmplY3RbXX0gdGhlIGFycmF5IG9mIGRpc3BsYXkgb2JqZWN0cyB0byByZW5kZXJcbiAqIEBwYXJhbSBzdGFydEluZGV4IHtudW1iZXJ9IHRoZSBpbmRleCB0byBzdGFydCBmcm9tIGluIHRoZSBjaGlsZHJlbiBhcnJheVxuICogQHBhcmFtIGFtb3VudCB7bnVtYmVyfSB0aGUgYW1vdW50IG9mIGNoaWxkcmVuIHRoYXQgd2lsbCBoYXZlIHRoZWlyIHZlcnRpY2VzIHVwbG9hZGVkXG4gKiBAcGFyYW0gYXJyYXkge251bWJlcltdfVxuICogQHBhcmFtIHN0cmlkZSB7bnVtYmVyfVxuICogQHBhcmFtIG9mZnNldCB7bnVtYmVyfVxuICovXG5QYXJ0aWNsZVJlbmRlcmVyLnByb3RvdHlwZS51cGxvYWRWZXJ0aWNlcyA9IGZ1bmN0aW9uIChjaGlsZHJlbiwgc3RhcnRJbmRleCwgYW1vdW50LCBhcnJheSwgc3RyaWRlLCBvZmZzZXQpXG57XG4gICAgdmFyIHNwcml0ZSxcbiAgICAgICAgdGV4dHVyZSxcbiAgICAgICAgdHJpbSxcbiAgICAgICAgc3gsXG4gICAgICAgIHN5LFxuICAgICAgICB3MCwgdzEsIGgwLCBoMTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYW1vdW50OyBpKyspIHtcblxuICAgICAgICBzcHJpdGUgPSBjaGlsZHJlbltzdGFydEluZGV4ICsgaV07XG4gICAgICAgIHRleHR1cmUgPSBzcHJpdGUuX3RleHR1cmU7XG4gICAgICAgIHN4ID0gc3ByaXRlLnNjYWxlLng7XG4gICAgICAgIHN5ID0gc3ByaXRlLnNjYWxlLnk7XG5cbiAgICAgICAgaWYgKHRleHR1cmUudHJpbSlcbiAgICAgICAge1xuICAgICAgICAgICAgLy8gaWYgdGhlIHNwcml0ZSBpcyB0cmltbWVkIHRoZW4gd2UgbmVlZCB0byBhZGQgdGhlIGV4dHJhIHNwYWNlIGJlZm9yZSB0cmFuc2Zvcm1pbmcgdGhlIHNwcml0ZSBjb29yZHMuLlxuICAgICAgICAgICAgdHJpbSA9IHRleHR1cmUudHJpbTtcblxuICAgICAgICAgICAgdzEgPSB0cmltLnggLSBzcHJpdGUuYW5jaG9yLnggKiB0cmltLndpZHRoO1xuICAgICAgICAgICAgdzAgPSB3MSArIHRleHR1cmUuY3JvcC53aWR0aDtcblxuICAgICAgICAgICAgaDEgPSB0cmltLnkgLSBzcHJpdGUuYW5jaG9yLnkgKiB0cmltLmhlaWdodDtcbiAgICAgICAgICAgIGgwID0gaDEgKyB0ZXh0dXJlLmNyb3AuaGVpZ2h0O1xuICAgICAgICB9XG4gICAgICAgIGVsc2VcbiAgICAgICAge1xuICAgICAgICAgICAgdzAgPSAodGV4dHVyZS5fZnJhbWUud2lkdGggKSAqICgxLXNwcml0ZS5hbmNob3IueCk7XG4gICAgICAgICAgICB3MSA9ICh0ZXh0dXJlLl9mcmFtZS53aWR0aCApICogLXNwcml0ZS5hbmNob3IueDtcblxuICAgICAgICAgICAgaDAgPSB0ZXh0dXJlLl9mcmFtZS5oZWlnaHQgKiAoMS1zcHJpdGUuYW5jaG9yLnkpO1xuICAgICAgICAgICAgaDEgPSB0ZXh0dXJlLl9mcmFtZS5oZWlnaHQgKiAtc3ByaXRlLmFuY2hvci55O1xuICAgICAgICB9XG5cbiAgICAgICAgYXJyYXlbb2Zmc2V0XSA9IHcxICogc3g7XG4gICAgICAgIGFycmF5W29mZnNldCArIDFdID0gaDEgKiBzeTtcblxuICAgICAgICBhcnJheVtvZmZzZXQgKyBzdHJpZGVdID0gdzAgKiBzeDtcbiAgICAgICAgYXJyYXlbb2Zmc2V0ICsgc3RyaWRlICsgMV0gPSBoMSAqIHN5O1xuXG4gICAgICAgIGFycmF5W29mZnNldCArIHN0cmlkZSAqIDJdID0gdzAgKiBzeDtcbiAgICAgICAgYXJyYXlbb2Zmc2V0ICsgc3RyaWRlICogMiArIDFdID0gaDAgKiBzeTtcblxuICAgICAgICBhcnJheVtvZmZzZXQgKyBzdHJpZGUgKiAzXSA9IHcxICogc3g7XG4gICAgICAgIGFycmF5W29mZnNldCArIHN0cmlkZSAqIDMgKyAxXSA9IGgwICogc3k7XG5cbiAgICAgICAgb2Zmc2V0ICs9IHN0cmlkZSAqIDQ7XG4gICAgfVxuXG59O1xuXG4vKipcbiAqXG4gKiBAcGFyYW0gY2hpbGRyZW4ge1BJWEkuRGlzcGxheU9iamVjdFtdfSB0aGUgYXJyYXkgb2YgZGlzcGxheSBvYmplY3RzIHRvIHJlbmRlclxuICogQHBhcmFtIHN0YXJ0SW5kZXgge251bWJlcn0gdGhlIGluZGV4IHRvIHN0YXJ0IGZyb20gaW4gdGhlIGNoaWxkcmVuIGFycmF5XG4gKiBAcGFyYW0gYW1vdW50IHtudW1iZXJ9IHRoZSBhbW91bnQgb2YgY2hpbGRyZW4gdGhhdCB3aWxsIGhhdmUgdGhlaXIgcG9zaXRpb25zIHVwbG9hZGVkXG4gKiBAcGFyYW0gYXJyYXkge251bWJlcltdfVxuICogQHBhcmFtIHN0cmlkZSB7bnVtYmVyfVxuICogQHBhcmFtIG9mZnNldCB7bnVtYmVyfVxuICovXG5QYXJ0aWNsZVJlbmRlcmVyLnByb3RvdHlwZS51cGxvYWRQb3NpdGlvbiA9IGZ1bmN0aW9uIChjaGlsZHJlbixzdGFydEluZGV4LCBhbW91bnQsIGFycmF5LCBzdHJpZGUsIG9mZnNldClcbntcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFtb3VudDsgaSsrKVxuICAgIHtcbiAgICAgICAgdmFyIHNwcml0ZVBvc2l0aW9uID0gY2hpbGRyZW5bc3RhcnRJbmRleCArIGldLnBvc2l0aW9uO1xuXG4gICAgICAgIGFycmF5W29mZnNldF0gPSBzcHJpdGVQb3NpdGlvbi54O1xuICAgICAgICBhcnJheVtvZmZzZXQgKyAxXSA9IHNwcml0ZVBvc2l0aW9uLnk7XG5cbiAgICAgICAgYXJyYXlbb2Zmc2V0ICsgc3RyaWRlXSA9IHNwcml0ZVBvc2l0aW9uLng7XG4gICAgICAgIGFycmF5W29mZnNldCArIHN0cmlkZSArIDFdID0gc3ByaXRlUG9zaXRpb24ueTtcblxuICAgICAgICBhcnJheVtvZmZzZXQgKyBzdHJpZGUgKiAyXSA9IHNwcml0ZVBvc2l0aW9uLng7XG4gICAgICAgIGFycmF5W29mZnNldCArIHN0cmlkZSAqIDIgKyAxXSA9IHNwcml0ZVBvc2l0aW9uLnk7XG5cbiAgICAgICAgYXJyYXlbb2Zmc2V0ICsgc3RyaWRlICogM10gPSBzcHJpdGVQb3NpdGlvbi54O1xuICAgICAgICBhcnJheVtvZmZzZXQgKyBzdHJpZGUgKiAzICsgMV0gPSBzcHJpdGVQb3NpdGlvbi55O1xuXG4gICAgICAgIG9mZnNldCArPSBzdHJpZGUgKiA0O1xuICAgIH1cblxufTtcblxuLyoqXG4gKlxuICogQHBhcmFtIGNoaWxkcmVuIHtQSVhJLkRpc3BsYXlPYmplY3RbXX0gdGhlIGFycmF5IG9mIGRpc3BsYXkgb2JqZWN0cyB0byByZW5kZXJcbiAqIEBwYXJhbSBzdGFydEluZGV4IHtudW1iZXJ9IHRoZSBpbmRleCB0byBzdGFydCBmcm9tIGluIHRoZSBjaGlsZHJlbiBhcnJheVxuICogQHBhcmFtIGFtb3VudCB7bnVtYmVyfSB0aGUgYW1vdW50IG9mIGNoaWxkcmVuIHRoYXQgd2lsbCBoYXZlIHRoZWlyIHJvdGF0aW9uIHVwbG9hZGVkXG4gKiBAcGFyYW0gYXJyYXkge251bWJlcltdfVxuICogQHBhcmFtIHN0cmlkZSB7bnVtYmVyfVxuICogQHBhcmFtIG9mZnNldCB7bnVtYmVyfVxuICovXG5QYXJ0aWNsZVJlbmRlcmVyLnByb3RvdHlwZS51cGxvYWRSb3RhdGlvbiA9IGZ1bmN0aW9uIChjaGlsZHJlbixzdGFydEluZGV4LCBhbW91bnQsIGFycmF5LCBzdHJpZGUsIG9mZnNldClcbntcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFtb3VudDsgaSsrKVxuICAgIHtcbiAgICAgICAgdmFyIHNwcml0ZVJvdGF0aW9uID0gY2hpbGRyZW5bc3RhcnRJbmRleCArIGldLnJvdGF0aW9uO1xuXG5cbiAgICAgICAgYXJyYXlbb2Zmc2V0XSA9IHNwcml0ZVJvdGF0aW9uO1xuICAgICAgICBhcnJheVtvZmZzZXQgKyBzdHJpZGVdID0gc3ByaXRlUm90YXRpb247XG4gICAgICAgIGFycmF5W29mZnNldCArIHN0cmlkZSAqIDJdID0gc3ByaXRlUm90YXRpb247XG4gICAgICAgIGFycmF5W29mZnNldCArIHN0cmlkZSAqIDNdID0gc3ByaXRlUm90YXRpb247XG5cbiAgICAgICAgb2Zmc2V0ICs9IHN0cmlkZSAqIDQ7XG4gICAgfVxufTtcblxuLyoqXG4gKlxuICogQHBhcmFtIGNoaWxkcmVuIHtQSVhJLkRpc3BsYXlPYmplY3RbXX0gdGhlIGFycmF5IG9mIGRpc3BsYXkgb2JqZWN0cyB0byByZW5kZXJcbiAqIEBwYXJhbSBzdGFydEluZGV4IHtudW1iZXJ9IHRoZSBpbmRleCB0byBzdGFydCBmcm9tIGluIHRoZSBjaGlsZHJlbiBhcnJheVxuICogQHBhcmFtIGFtb3VudCB7bnVtYmVyfSB0aGUgYW1vdW50IG9mIGNoaWxkcmVuIHRoYXQgd2lsbCBoYXZlIHRoZWlyIFV2cyB1cGxvYWRlZFxuICogQHBhcmFtIGFycmF5IHtudW1iZXJbXX1cbiAqIEBwYXJhbSBzdHJpZGUge251bWJlcn1cbiAqIEBwYXJhbSBvZmZzZXQge251bWJlcn1cbiAqL1xuUGFydGljbGVSZW5kZXJlci5wcm90b3R5cGUudXBsb2FkVXZzID0gZnVuY3Rpb24gKGNoaWxkcmVuLHN0YXJ0SW5kZXgsIGFtb3VudCwgYXJyYXksIHN0cmlkZSwgb2Zmc2V0KVxue1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYW1vdW50OyBpKyspXG4gICAge1xuICAgICAgICB2YXIgdGV4dHVyZVV2cyA9IGNoaWxkcmVuW3N0YXJ0SW5kZXggKyBpXS5fdGV4dHVyZS5fdXZzO1xuXG4gICAgICAgIGlmICh0ZXh0dXJlVXZzKVxuICAgICAgICB7XG4gICAgICAgICAgICBhcnJheVtvZmZzZXRdID0gdGV4dHVyZVV2cy54MDtcbiAgICAgICAgICAgIGFycmF5W29mZnNldCArIDFdID0gdGV4dHVyZVV2cy55MDtcblxuICAgICAgICAgICAgYXJyYXlbb2Zmc2V0ICsgc3RyaWRlXSA9IHRleHR1cmVVdnMueDE7XG4gICAgICAgICAgICBhcnJheVtvZmZzZXQgKyBzdHJpZGUgKyAxXSA9IHRleHR1cmVVdnMueTE7XG5cbiAgICAgICAgICAgIGFycmF5W29mZnNldCArIHN0cmlkZSAqIDJdID0gdGV4dHVyZVV2cy54MjtcbiAgICAgICAgICAgIGFycmF5W29mZnNldCArIHN0cmlkZSAqIDIgKyAxXSA9IHRleHR1cmVVdnMueTI7XG5cbiAgICAgICAgICAgIGFycmF5W29mZnNldCArIHN0cmlkZSAqIDNdID0gdGV4dHVyZVV2cy54MztcbiAgICAgICAgICAgIGFycmF5W29mZnNldCArIHN0cmlkZSAqIDMgKyAxXSA9IHRleHR1cmVVdnMueTM7XG5cbiAgICAgICAgICAgIG9mZnNldCArPSBzdHJpZGUgKiA0O1xuICAgICAgICB9XG4gICAgICAgIGVsc2VcbiAgICAgICAge1xuICAgICAgICAgICAgLy9UT0RPIHlvdSBrbm93IHRoaXMgY2FuIGJlIGVhc2llciFcbiAgICAgICAgICAgIGFycmF5W29mZnNldF0gPSAwO1xuICAgICAgICAgICAgYXJyYXlbb2Zmc2V0ICsgMV0gPSAwO1xuXG4gICAgICAgICAgICBhcnJheVtvZmZzZXQgKyBzdHJpZGVdID0gMDtcbiAgICAgICAgICAgIGFycmF5W29mZnNldCArIHN0cmlkZSArIDFdID0gMDtcblxuICAgICAgICAgICAgYXJyYXlbb2Zmc2V0ICsgc3RyaWRlICogMl0gPSAwO1xuICAgICAgICAgICAgYXJyYXlbb2Zmc2V0ICsgc3RyaWRlICogMiArIDFdID0gMDtcblxuICAgICAgICAgICAgYXJyYXlbb2Zmc2V0ICsgc3RyaWRlICogM10gPSAwO1xuICAgICAgICAgICAgYXJyYXlbb2Zmc2V0ICsgc3RyaWRlICogMyArIDFdID0gMDtcblxuICAgICAgICAgICAgb2Zmc2V0ICs9IHN0cmlkZSAqIDQ7XG4gICAgICAgIH1cbiAgICB9XG59O1xuXG4vKipcbiAqXG4gKiBAcGFyYW0gY2hpbGRyZW4ge1BJWEkuRGlzcGxheU9iamVjdFtdfSB0aGUgYXJyYXkgb2YgZGlzcGxheSBvYmplY3RzIHRvIHJlbmRlclxuICogQHBhcmFtIHN0YXJ0SW5kZXgge251bWJlcn0gdGhlIGluZGV4IHRvIHN0YXJ0IGZyb20gaW4gdGhlIGNoaWxkcmVuIGFycmF5XG4gKiBAcGFyYW0gYW1vdW50IHtudW1iZXJ9IHRoZSBhbW91bnQgb2YgY2hpbGRyZW4gdGhhdCB3aWxsIGhhdmUgdGhlaXIgYWxwaGEgdXBsb2FkZWRcbiAqIEBwYXJhbSBhcnJheSB7bnVtYmVyW119XG4gKiBAcGFyYW0gc3RyaWRlIHtudW1iZXJ9XG4gKiBAcGFyYW0gb2Zmc2V0IHtudW1iZXJ9XG4gKi9cblBhcnRpY2xlUmVuZGVyZXIucHJvdG90eXBlLnVwbG9hZEFscGhhID0gZnVuY3Rpb24gKGNoaWxkcmVuLHN0YXJ0SW5kZXgsIGFtb3VudCwgYXJyYXksIHN0cmlkZSwgb2Zmc2V0KVxue1xuICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFtb3VudDsgaSsrKVxuICAgICB7XG4gICAgICAgIHZhciBzcHJpdGVBbHBoYSA9IGNoaWxkcmVuW3N0YXJ0SW5kZXggKyBpXS5hbHBoYTtcblxuICAgICAgICBhcnJheVtvZmZzZXRdID0gc3ByaXRlQWxwaGE7XG4gICAgICAgIGFycmF5W29mZnNldCArIHN0cmlkZV0gPSBzcHJpdGVBbHBoYTtcbiAgICAgICAgYXJyYXlbb2Zmc2V0ICsgc3RyaWRlICogMl0gPSBzcHJpdGVBbHBoYTtcbiAgICAgICAgYXJyYXlbb2Zmc2V0ICsgc3RyaWRlICogM10gPSBzcHJpdGVBbHBoYTtcblxuICAgICAgICBvZmZzZXQgKz0gc3RyaWRlICogNDtcbiAgICB9XG59O1xuXG5cbi8qKlxuICogRGVzdHJveXMgdGhlIFBhcnRpY2xlUmVuZGVyZXIuXG4gKlxuICovXG5QYXJ0aWNsZVJlbmRlcmVyLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKClcbntcbiAgICBpZiAodGhpcy5yZW5kZXJlci5nbCkge1xuICAgICAgICB0aGlzLnJlbmRlcmVyLmdsLmRlbGV0ZUJ1ZmZlcih0aGlzLmluZGV4QnVmZmVyKTtcbiAgICB9XG5cbiAgICBPYmplY3RSZW5kZXJlci5wcm90b3R5cGUuZGVzdHJveS5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuXG4gICAgdGhpcy5zaGFkZXIuZGVzdHJveSgpO1xuXG4gICAgdGhpcy5pbmRpY2VzID0gbnVsbDtcbiAgICB0aGlzLnRlbXBNYXRyaXggPSBudWxsO1xufTtcbiIsInZhciBUZXh0dXJlU2hhZGVyID0gcmVxdWlyZSgnLi4vLi4vcmVuZGVyZXJzL3dlYmdsL3NoYWRlcnMvVGV4dHVyZVNoYWRlcicpO1xuXG4vKipcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5UZXh0dXJlU2hhZGVyXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIHNoYWRlck1hbmFnZXIge1NoYWRlck1hbmFnZXJ9IFRoZSB3ZWJnbCBzaGFkZXIgbWFuYWdlciB0aGlzIHNoYWRlciB3b3JrcyBmb3IuXG4gKi9cbmZ1bmN0aW9uIFBhcnRpY2xlU2hhZGVyKHNoYWRlck1hbmFnZXIpXG57XG4gICAgVGV4dHVyZVNoYWRlci5jYWxsKHRoaXMsXG4gICAgICAgIHNoYWRlck1hbmFnZXIsXG4gICAgICAgIC8vIHZlcnRleCBzaGFkZXJcbiAgICAgICAgW1xuICAgICAgICAgICAgJ2F0dHJpYnV0ZSB2ZWMyIGFWZXJ0ZXhQb3NpdGlvbjsnLFxuICAgICAgICAgICAgJ2F0dHJpYnV0ZSB2ZWMyIGFUZXh0dXJlQ29vcmQ7JyxcbiAgICAgICAgICAgICdhdHRyaWJ1dGUgZmxvYXQgYUNvbG9yOycsXG5cbiAgICAgICAgICAgICdhdHRyaWJ1dGUgdmVjMiBhUG9zaXRpb25Db29yZDsnLFxuICAgICAgICAgICAgJ2F0dHJpYnV0ZSB2ZWMyIGFTY2FsZTsnLFxuICAgICAgICAgICAgJ2F0dHJpYnV0ZSBmbG9hdCBhUm90YXRpb247JyxcblxuICAgICAgICAgICAgJ3VuaWZvcm0gbWF0MyBwcm9qZWN0aW9uTWF0cml4OycsXG5cbiAgICAgICAgICAgICd2YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDsnLFxuICAgICAgICAgICAgJ3ZhcnlpbmcgZmxvYXQgdkNvbG9yOycsXG5cbiAgICAgICAgICAgICd2b2lkIG1haW4odm9pZCl7JyxcbiAgICAgICAgICAgICcgICB2ZWMyIHYgPSBhVmVydGV4UG9zaXRpb247JyxcblxuICAgICAgICAgICAgJyAgIHYueCA9IChhVmVydGV4UG9zaXRpb24ueCkgKiBjb3MoYVJvdGF0aW9uKSAtIChhVmVydGV4UG9zaXRpb24ueSkgKiBzaW4oYVJvdGF0aW9uKTsnLFxuICAgICAgICAgICAgJyAgIHYueSA9IChhVmVydGV4UG9zaXRpb24ueCkgKiBzaW4oYVJvdGF0aW9uKSArIChhVmVydGV4UG9zaXRpb24ueSkgKiBjb3MoYVJvdGF0aW9uKTsnLFxuICAgICAgICAgICAgJyAgIHYgPSB2ICsgYVBvc2l0aW9uQ29vcmQ7JyxcblxuICAgICAgICAgICAgJyAgIGdsX1Bvc2l0aW9uID0gdmVjNCgocHJvamVjdGlvbk1hdHJpeCAqIHZlYzModiwgMS4wKSkueHksIDAuMCwgMS4wKTsnLFxuXG4gICAgICAgICAgICAnICAgdlRleHR1cmVDb29yZCA9IGFUZXh0dXJlQ29vcmQ7JyxcbiAgICAgICAgICAgICcgICB2Q29sb3IgPSBhQ29sb3I7JyxcbiAgICAgICAgICAgICd9J1xuICAgICAgICBdLmpvaW4oJ1xcbicpLFxuICAgICAgICAvLyBoZWxsb1xuICAgICAgICAgW1xuICAgICAgICAgICAgJ3ByZWNpc2lvbiBsb3dwIGZsb2F0OycsXG5cbiAgICAgICAgICAgICd2YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDsnLFxuICAgICAgICAgICAgJ3ZhcnlpbmcgZmxvYXQgdkNvbG9yOycsXG5cbiAgICAgICAgICAgICd1bmlmb3JtIHNhbXBsZXIyRCB1U2FtcGxlcjsnLFxuICAgICAgICAgICAgJ3VuaWZvcm0gZmxvYXQgdUFscGhhOycsXG5cbiAgICAgICAgICAgICd2b2lkIG1haW4odm9pZCl7JyxcbiAgICAgICAgICAgICcgIHZlYzQgY29sb3IgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZUZXh0dXJlQ29vcmQpICogdkNvbG9yICogdUFscGhhOycsXG4gICAgICAgICAgICAnICBpZiAoY29sb3IuYSA9PSAwLjApIGRpc2NhcmQ7JyxcbiAgICAgICAgICAgICcgIGdsX0ZyYWdDb2xvciA9IGNvbG9yOycsXG4gICAgICAgICAgICAnfSdcbiAgICAgICAgXS5qb2luKCdcXG4nKSxcbiAgICAgICAgLy8gY3VzdG9tIHVuaWZvcm1zXG4gICAgICAgIHtcbiAgICAgICAgICAgIHVBbHBoYTogIHsgdHlwZTogJzFmJywgdmFsdWU6IDEgfVxuICAgICAgICB9LFxuICAgICAgICAvLyBjdXN0b20gYXR0cmlidXRlc1xuICAgICAgICB7XG4gICAgICAgICAgICBhUG9zaXRpb25Db29yZDogMCxcbiAgICAgICAgICAgLy8gYVNjYWxlOiAgICAgICAgIDAsXG4gICAgICAgICAgICBhUm90YXRpb246ICAgICAgMFxuICAgICAgICB9XG4gICAgKTtcblxuICAgIC8vIFRFTVAgSEFDS1xuXG59XG5cblBhcnRpY2xlU2hhZGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoVGV4dHVyZVNoYWRlci5wcm90b3R5cGUpO1xuUGFydGljbGVTaGFkZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gUGFydGljbGVTaGFkZXI7XG5cbm1vZHVsZS5leHBvcnRzID0gUGFydGljbGVTaGFkZXI7XG4iLCJ2YXIgdXRpbHMgPSByZXF1aXJlKCcuLi91dGlscycpLFxuICAgIG1hdGggPSByZXF1aXJlKCcuLi9tYXRoJyksXG4gICAgQ09OU1QgPSByZXF1aXJlKCcuLi9jb25zdCcpLFxuICAgIEV2ZW50RW1pdHRlciA9IHJlcXVpcmUoJ2V2ZW50ZW1pdHRlcjMnKTtcblxuLyoqXG4gKiBUaGUgQ2FudmFzUmVuZGVyZXIgZHJhd3MgdGhlIHNjZW5lIGFuZCBhbGwgaXRzIGNvbnRlbnQgb250byBhIDJkIGNhbnZhcy4gVGhpcyByZW5kZXJlciBzaG91bGQgYmUgdXNlZCBmb3IgYnJvd3NlcnMgdGhhdCBkbyBub3Qgc3VwcG9ydCB3ZWJHTC5cbiAqIERvbid0IGZvcmdldCB0byBhZGQgdGhlIENhbnZhc1JlbmRlcmVyLnZpZXcgdG8geW91ciBET00gb3IgeW91IHdpbGwgbm90IHNlZSBhbnl0aGluZyA6KVxuICpcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqIEBwYXJhbSBzeXN0ZW0ge3N0cmluZ30gVGhlIG5hbWUgb2YgdGhlIHN5c3RlbSB0aGlzIHJlbmRlcmVyIGlzIGZvci5cbiAqIEBwYXJhbSBbd2lkdGg9ODAwXSB7bnVtYmVyfSB0aGUgd2lkdGggb2YgdGhlIGNhbnZhcyB2aWV3XG4gKiBAcGFyYW0gW2hlaWdodD02MDBdIHtudW1iZXJ9IHRoZSBoZWlnaHQgb2YgdGhlIGNhbnZhcyB2aWV3XG4gKiBAcGFyYW0gW29wdGlvbnNdIHtvYmplY3R9IFRoZSBvcHRpb25hbCByZW5kZXJlciBwYXJhbWV0ZXJzXG4gKiBAcGFyYW0gW29wdGlvbnMudmlld10ge0hUTUxDYW52YXNFbGVtZW50fSB0aGUgY2FudmFzIHRvIHVzZSBhcyBhIHZpZXcsIG9wdGlvbmFsXG4gKiBAcGFyYW0gW29wdGlvbnMudHJhbnNwYXJlbnQ9ZmFsc2VdIHtib29sZWFufSBJZiB0aGUgcmVuZGVyIHZpZXcgaXMgdHJhbnNwYXJlbnQsIGRlZmF1bHQgZmFsc2VcbiAqIEBwYXJhbSBbb3B0aW9ucy5hdXRvUmVzaXplPWZhbHNlXSB7Ym9vbGVhbn0gSWYgdGhlIHJlbmRlciB2aWV3IGlzIGF1dG9tYXRpY2FsbHkgcmVzaXplZCwgZGVmYXVsdCBmYWxzZVxuICogQHBhcmFtIFtvcHRpb25zLmFudGlhbGlhcz1mYWxzZV0ge2Jvb2xlYW59IHNldHMgYW50aWFsaWFzIChvbmx5IGFwcGxpY2FibGUgaW4gY2hyb21lIGF0IHRoZSBtb21lbnQpXG4gKiBAcGFyYW0gW29wdGlvbnMucmVzb2x1dGlvbj0xXSB7bnVtYmVyfSB0aGUgcmVzb2x1dGlvbiBvZiB0aGUgcmVuZGVyZXIgcmV0aW5hIHdvdWxkIGJlIDJcbiAqIEBwYXJhbSBbb3B0aW9ucy5jbGVhckJlZm9yZVJlbmRlcj10cnVlXSB7Ym9vbGVhbn0gVGhpcyBzZXRzIGlmIHRoZSBDYW52YXNSZW5kZXJlciB3aWxsIGNsZWFyIHRoZSBjYW52YXMgb3JcbiAqICAgICAgbm90IGJlZm9yZSB0aGUgbmV3IHJlbmRlciBwYXNzLlxuICogQHBhcmFtIFtvcHRpb25zLmJhY2tncm91bmRDb2xvcj0weDAwMDAwMF0ge251bWJlcn0gVGhlIGJhY2tncm91bmQgY29sb3Igb2YgdGhlIHJlbmRlcmVkIGFyZWEgKHNob3duIGlmIG5vdCB0cmFuc3BhcmVudCkuXG4gKiBAcGFyYW0gW29wdGlvbnMucm91bmRQaXhlbHM9ZmFsc2VdIHtib29sZWFufSBJZiB0cnVlIFBpeGkgd2lsbCBNYXRoLmZsb29yKCkgeC95IHZhbHVlcyB3aGVuIHJlbmRlcmluZywgc3RvcHBpbmcgcGl4ZWwgaW50ZXJwb2xhdGlvbi5cbiAqL1xuZnVuY3Rpb24gU3lzdGVtUmVuZGVyZXIoc3lzdGVtLCB3aWR0aCwgaGVpZ2h0LCBvcHRpb25zKVxue1xuICAgIEV2ZW50RW1pdHRlci5jYWxsKHRoaXMpO1xuXG4gICAgdXRpbHMuc2F5SGVsbG8oc3lzdGVtKTtcblxuICAgIC8vIHByZXBhcmUgb3B0aW9uc1xuICAgIGlmIChvcHRpb25zKVxuICAgIHtcbiAgICAgICAgZm9yICh2YXIgaSBpbiBDT05TVC5ERUZBVUxUX1JFTkRFUl9PUFRJT05TKVxuICAgICAgICB7XG4gICAgICAgICAgICBpZiAodHlwZW9mIG9wdGlvbnNbaV0gPT09ICd1bmRlZmluZWQnKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIG9wdGlvbnNbaV0gPSBDT05TVC5ERUZBVUxUX1JFTkRFUl9PUFRJT05TW2ldO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIG9wdGlvbnMgPSBDT05TVC5ERUZBVUxUX1JFTkRFUl9PUFRJT05TO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoZSB0eXBlIG9mIHRoZSByZW5kZXJlci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCBQSVhJLlJFTkRFUkVSX1RZUEUuVU5LTk9XTlxuICAgICAqIEBzZWUgUElYSS5SRU5ERVJFUl9UWVBFXG4gICAgICovXG4gICAgdGhpcy50eXBlID0gQ09OU1QuUkVOREVSRVJfVFlQRS5VTktOT1dOO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHdpZHRoIG9mIHRoZSBjYW52YXMgdmlld1xuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDgwMFxuICAgICAqL1xuICAgIHRoaXMud2lkdGggPSB3aWR0aCB8fCA4MDA7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgaGVpZ2h0IG9mIHRoZSBjYW52YXMgdmlld1xuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDYwMFxuICAgICAqL1xuICAgIHRoaXMuaGVpZ2h0ID0gaGVpZ2h0IHx8IDYwMDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBjYW52YXMgZWxlbWVudCB0aGF0IGV2ZXJ5dGhpbmcgaXMgZHJhd24gdG9cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge0hUTUxDYW52YXNFbGVtZW50fVxuICAgICAqL1xuICAgIHRoaXMudmlldyA9IG9wdGlvbnMudmlldyB8fCBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdjYW52YXMnKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSByZXNvbHV0aW9uIG9mIHRoZSByZW5kZXJlclxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDFcbiAgICAgKi9cbiAgICB0aGlzLnJlc29sdXRpb24gPSBvcHRpb25zLnJlc29sdXRpb247XG5cbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIHRoZSByZW5kZXIgdmlldyBpcyB0cmFuc3BhcmVudFxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKi9cbiAgICB0aGlzLnRyYW5zcGFyZW50ID0gb3B0aW9ucy50cmFuc3BhcmVudDtcblxuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgdGhlIHJlbmRlciB2aWV3IHNob3VsZCBiZSByZXNpemVkIGF1dG9tYXRpY2FsbHlcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICovXG4gICAgdGhpcy5hdXRvUmVzaXplID0gb3B0aW9ucy5hdXRvUmVzaXplIHx8IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogVHJhY2tzIHRoZSBibGVuZCBtb2RlcyB1c2VmdWwgZm9yIHRoaXMgcmVuZGVyZXIuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtvYmplY3Q8c3RyaW5nLCBtaXhlZD59XG4gICAgICovXG4gICAgdGhpcy5ibGVuZE1vZGVzID0gbnVsbDtcblxuICAgIC8qKlxuICAgICAqIFRoZSB2YWx1ZSBvZiB0aGUgcHJlc2VydmVEcmF3aW5nQnVmZmVyIGZsYWcgYWZmZWN0cyB3aGV0aGVyIG9yIG5vdCB0aGUgY29udGVudHMgb2YgdGhlIHN0ZW5jaWwgYnVmZmVyIGlzIHJldGFpbmVkIGFmdGVyIHJlbmRlcmluZy5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICovXG4gICAgdGhpcy5wcmVzZXJ2ZURyYXdpbmdCdWZmZXIgPSBvcHRpb25zLnByZXNlcnZlRHJhd2luZ0J1ZmZlcjtcblxuICAgIC8qKlxuICAgICAqIFRoaXMgc2V0cyBpZiB0aGUgQ2FudmFzUmVuZGVyZXIgd2lsbCBjbGVhciB0aGUgY2FudmFzIG9yIG5vdCBiZWZvcmUgdGhlIG5ldyByZW5kZXIgcGFzcy5cbiAgICAgKiBJZiB0aGUgc2NlbmUgaXMgTk9UIHRyYW5zcGFyZW50IFBpeGkgd2lsbCB1c2UgYSBjYW52YXMgc2l6ZWQgZmlsbFJlY3Qgb3BlcmF0aW9uIGV2ZXJ5IGZyYW1lIHRvIHNldCB0aGUgY2FudmFzIGJhY2tncm91bmQgY29sb3IuXG4gICAgICogSWYgdGhlIHNjZW5lIGlzIHRyYW5zcGFyZW50IFBpeGkgd2lsbCB1c2UgY2xlYXJSZWN0IHRvIGNsZWFyIHRoZSBjYW52YXMgZXZlcnkgZnJhbWUuXG4gICAgICogRGlzYWJsZSB0aGlzIGJ5IHNldHRpbmcgdGhpcyB0byBmYWxzZS4gRm9yIGV4YW1wbGUgaWYgeW91ciBnYW1lIGhhcyBhIGNhbnZhcyBmaWxsaW5nIGJhY2tncm91bmQgaW1hZ2UgeW91IG9mdGVuIGRvbid0IG5lZWQgdGhpcyBzZXQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqIEBkZWZhdWx0XG4gICAgICovXG4gICAgdGhpcy5jbGVhckJlZm9yZVJlbmRlciA9IG9wdGlvbnMuY2xlYXJCZWZvcmVSZW5kZXI7XG5cbiAgICAvKipcbiAgICAgKiBJZiB0cnVlIFBpeGkgd2lsbCBNYXRoLmZsb29yKCkgeC95IHZhbHVlcyB3aGVuIHJlbmRlcmluZywgc3RvcHBpbmcgcGl4ZWwgaW50ZXJwb2xhdGlvbi5cbiAgICAgKiBIYW5keSBmb3IgY3Jpc3AgcGl4ZWwgYXJ0IGFuZCBzcGVlZCBvbiBsZWdhY3kgZGV2aWNlcy5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICovXG4gICAgdGhpcy5yb3VuZFBpeGVscyA9IG9wdGlvbnMucm91bmRQaXhlbHM7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYmFja2dyb3VuZCBjb2xvciBhcyBhIG51bWJlci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX2JhY2tncm91bmRDb2xvciA9IDB4MDAwMDAwO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGJhY2tncm91bmQgY29sb3IgYXMgYW4gW1IsIEcsIEJdIGFycmF5LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyW119XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9iYWNrZ3JvdW5kQ29sb3JSZ2JhID0gWzAsIDAsIDAsIDBdO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGJhY2tncm91bmQgY29sb3IgYXMgYSBzdHJpbmcuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtzdHJpbmd9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9iYWNrZ3JvdW5kQ29sb3JTdHJpbmcgPSAnIzAwMDAwMCc7XG5cbiAgICB0aGlzLmJhY2tncm91bmRDb2xvciA9IG9wdGlvbnMuYmFja2dyb3VuZENvbG9yIHx8IHRoaXMuX2JhY2tncm91bmRDb2xvcjsgLy8gcnVuIGJnIGNvbG9yIHNldHRlclxuXG4gICAgLyoqXG4gICAgICogVGhpcyB0ZW1wb3JhcnkgZGlzcGxheSBvYmplY3QgdXNlZCBhcyB0aGUgcGFyZW50IG9mIHRoZSBjdXJyZW50bHkgYmVpbmcgcmVuZGVyZWQgaXRlbVxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5EaXNwbGF5T2JqZWN0fVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fdGVtcERpc3BsYXlPYmplY3RQYXJlbnQgPSB7d29ybGRUcmFuc2Zvcm06bmV3IG1hdGguTWF0cml4KCksIHdvcmxkQWxwaGE6MSwgY2hpbGRyZW46W119O1xuXG4gICAgLyoqXG4gICAgICogVGhlIGxhc3Qgcm9vdCBvYmplY3QgdGhhdCB0aGUgcmVuZGVyZXIgdHJpZWQgdG8gcmVuZGVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5EaXNwbGF5T2JqZWN0fVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fbGFzdE9iamVjdFJlbmRlcmVkID0gdGhpcy5fdGVtcERpc3BsYXlPYmplY3RQYXJlbnQ7XG59XG5cbi8vIGNvbnN0cnVjdG9yXG5TeXN0ZW1SZW5kZXJlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKEV2ZW50RW1pdHRlci5wcm90b3R5cGUpO1xuU3lzdGVtUmVuZGVyZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gU3lzdGVtUmVuZGVyZXI7XG5tb2R1bGUuZXhwb3J0cyA9IFN5c3RlbVJlbmRlcmVyO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhTeXN0ZW1SZW5kZXJlci5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBUaGUgYmFja2dyb3VuZCBjb2xvciB0byBmaWxsIGlmIG5vdCB0cmFuc3BhcmVudFxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLlN5c3RlbVJlbmRlcmVyI1xuICAgICAqL1xuICAgIGJhY2tncm91bmRDb2xvcjpcbiAgICB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2JhY2tncm91bmRDb2xvcjtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLl9iYWNrZ3JvdW5kQ29sb3IgPSB2YWw7XG4gICAgICAgICAgICB0aGlzLl9iYWNrZ3JvdW5kQ29sb3JTdHJpbmcgPSB1dGlscy5oZXgyc3RyaW5nKHZhbCk7XG4gICAgICAgICAgICB1dGlscy5oZXgycmdiKHZhbCwgdGhpcy5fYmFja2dyb3VuZENvbG9yUmdiYSk7XG4gICAgICAgIH1cbiAgICB9XG59KTtcblxuLyoqXG4gKiBSZXNpemVzIHRoZSBjYW52YXMgdmlldyB0byB0aGUgc3BlY2lmaWVkIHdpZHRoIGFuZCBoZWlnaHRcbiAqXG4gKiBAcGFyYW0gd2lkdGgge251bWJlcn0gdGhlIG5ldyB3aWR0aCBvZiB0aGUgY2FudmFzIHZpZXdcbiAqIEBwYXJhbSBoZWlnaHQge251bWJlcn0gdGhlIG5ldyBoZWlnaHQgb2YgdGhlIGNhbnZhcyB2aWV3XG4gKi9cblN5c3RlbVJlbmRlcmVyLnByb3RvdHlwZS5yZXNpemUgPSBmdW5jdGlvbiAod2lkdGgsIGhlaWdodCkge1xuICAgIHRoaXMud2lkdGggPSB3aWR0aCAqIHRoaXMucmVzb2x1dGlvbjtcbiAgICB0aGlzLmhlaWdodCA9IGhlaWdodCAqIHRoaXMucmVzb2x1dGlvbjtcblxuICAgIHRoaXMudmlldy53aWR0aCA9IHRoaXMud2lkdGg7XG4gICAgdGhpcy52aWV3LmhlaWdodCA9IHRoaXMuaGVpZ2h0O1xuXG4gICAgaWYgKHRoaXMuYXV0b1Jlc2l6ZSlcbiAgICB7XG4gICAgICAgIHRoaXMudmlldy5zdHlsZS53aWR0aCA9IHRoaXMud2lkdGggLyB0aGlzLnJlc29sdXRpb24gKyAncHgnO1xuICAgICAgICB0aGlzLnZpZXcuc3R5bGUuaGVpZ2h0ID0gdGhpcy5oZWlnaHQgLyB0aGlzLnJlc29sdXRpb24gKyAncHgnO1xuICAgIH1cbn07XG5cbi8qKlxuICogUmVtb3ZlcyBldmVyeXRoaW5nIGZyb20gdGhlIHJlbmRlcmVyIGFuZCBvcHRpb25hbGx5IHJlbW92ZXMgdGhlIENhbnZhcyBET00gZWxlbWVudC5cbiAqXG4gKiBAcGFyYW0gW3JlbW92ZVZpZXc9ZmFsc2VdIHtib29sZWFufSBSZW1vdmVzIHRoZSBDYW52YXMgZWxlbWVudCBmcm9tIHRoZSBET00uXG4gKi9cblN5c3RlbVJlbmRlcmVyLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKHJlbW92ZVZpZXcpIHtcbiAgICBpZiAocmVtb3ZlVmlldyAmJiB0aGlzLnZpZXcucGFyZW50Tm9kZSlcbiAgICB7XG4gICAgICAgIHRoaXMudmlldy5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHRoaXMudmlldyk7XG4gICAgfVxuXG4gICAgdGhpcy50eXBlID0gQ09OU1QuUkVOREVSRVJfVFlQRS5VTktOT1dOO1xuXG4gICAgdGhpcy53aWR0aCA9IDA7XG4gICAgdGhpcy5oZWlnaHQgPSAwO1xuXG4gICAgdGhpcy52aWV3ID0gbnVsbDtcblxuICAgIHRoaXMucmVzb2x1dGlvbiA9IDA7XG5cbiAgICB0aGlzLnRyYW5zcGFyZW50ID0gZmFsc2U7XG5cbiAgICB0aGlzLmF1dG9SZXNpemUgPSBmYWxzZTtcblxuICAgIHRoaXMuYmxlbmRNb2RlcyA9IG51bGw7XG5cbiAgICB0aGlzLnByZXNlcnZlRHJhd2luZ0J1ZmZlciA9IGZhbHNlO1xuICAgIHRoaXMuY2xlYXJCZWZvcmVSZW5kZXIgPSBmYWxzZTtcblxuICAgIHRoaXMucm91bmRQaXhlbHMgPSBmYWxzZTtcblxuICAgIHRoaXMuX2JhY2tncm91bmRDb2xvciA9IDA7XG4gICAgdGhpcy5fYmFja2dyb3VuZENvbG9yUmdiYSA9IG51bGw7XG4gICAgdGhpcy5fYmFja2dyb3VuZENvbG9yU3RyaW5nID0gbnVsbDtcbn07XG4iLCJ2YXIgU3lzdGVtUmVuZGVyZXIgPSByZXF1aXJlKCcuLi9TeXN0ZW1SZW5kZXJlcicpLFxuICAgIENhbnZhc01hc2tNYW5hZ2VyID0gcmVxdWlyZSgnLi91dGlscy9DYW52YXNNYXNrTWFuYWdlcicpLFxuICAgIHV0aWxzID0gcmVxdWlyZSgnLi4vLi4vdXRpbHMnKSxcbiAgICBtYXRoID0gcmVxdWlyZSgnLi4vLi4vbWF0aCcpLFxuICAgIENPTlNUID0gcmVxdWlyZSgnLi4vLi4vY29uc3QnKTtcblxuLyoqXG4gKiBUaGUgQ2FudmFzUmVuZGVyZXIgZHJhd3MgdGhlIHNjZW5lIGFuZCBhbGwgaXRzIGNvbnRlbnQgb250byBhIDJkIGNhbnZhcy4gVGhpcyByZW5kZXJlciBzaG91bGQgYmUgdXNlZCBmb3IgYnJvd3NlcnMgdGhhdCBkbyBub3Qgc3VwcG9ydCB3ZWJHTC5cbiAqIERvbid0IGZvcmdldCB0byBhZGQgdGhlIENhbnZhc1JlbmRlcmVyLnZpZXcgdG8geW91ciBET00gb3IgeW91IHdpbGwgbm90IHNlZSBhbnl0aGluZyA6KVxuICpcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqIEBleHRlbmRzIFBJWEkuU3lzdGVtUmVuZGVyZXJcbiAqIEBwYXJhbSBbd2lkdGg9ODAwXSB7bnVtYmVyfSB0aGUgd2lkdGggb2YgdGhlIGNhbnZhcyB2aWV3XG4gKiBAcGFyYW0gW2hlaWdodD02MDBdIHtudW1iZXJ9IHRoZSBoZWlnaHQgb2YgdGhlIGNhbnZhcyB2aWV3XG4gKiBAcGFyYW0gW29wdGlvbnNdIHtvYmplY3R9IFRoZSBvcHRpb25hbCByZW5kZXJlciBwYXJhbWV0ZXJzXG4gKiBAcGFyYW0gW29wdGlvbnMudmlld10ge0hUTUxDYW52YXNFbGVtZW50fSB0aGUgY2FudmFzIHRvIHVzZSBhcyBhIHZpZXcsIG9wdGlvbmFsXG4gKiBAcGFyYW0gW29wdGlvbnMudHJhbnNwYXJlbnQ9ZmFsc2VdIHtib29sZWFufSBJZiB0aGUgcmVuZGVyIHZpZXcgaXMgdHJhbnNwYXJlbnQsIGRlZmF1bHQgZmFsc2VcbiAqIEBwYXJhbSBbb3B0aW9ucy5hdXRvUmVzaXplPWZhbHNlXSB7Ym9vbGVhbn0gSWYgdGhlIHJlbmRlciB2aWV3IGlzIGF1dG9tYXRpY2FsbHkgcmVzaXplZCwgZGVmYXVsdCBmYWxzZVxuICogQHBhcmFtIFtvcHRpb25zLmFudGlhbGlhcz1mYWxzZV0ge2Jvb2xlYW59IHNldHMgYW50aWFsaWFzIChvbmx5IGFwcGxpY2FibGUgaW4gY2hyb21lIGF0IHRoZSBtb21lbnQpXG4gKiBAcGFyYW0gW29wdGlvbnMucmVzb2x1dGlvbj0xXSB7bnVtYmVyfSB0aGUgcmVzb2x1dGlvbiBvZiB0aGUgcmVuZGVyZXIgcmV0aW5hIHdvdWxkIGJlIDJcbiAqIEBwYXJhbSBbb3B0aW9ucy5jbGVhckJlZm9yZVJlbmRlcj10cnVlXSB7Ym9vbGVhbn0gVGhpcyBzZXRzIGlmIHRoZSBDYW52YXNSZW5kZXJlciB3aWxsIGNsZWFyIHRoZSBjYW52YXMgb3JcbiAqICAgICAgbm90IGJlZm9yZSB0aGUgbmV3IHJlbmRlciBwYXNzLlxuICogQHBhcmFtIFtvcHRpb25zLnJvdW5kUGl4ZWxzPWZhbHNlXSB7Ym9vbGVhbn0gSWYgdHJ1ZSBQaXhpIHdpbGwgTWF0aC5mbG9vcigpIHgveSB2YWx1ZXMgd2hlbiByZW5kZXJpbmcsIHN0b3BwaW5nIHBpeGVsIGludGVycG9sYXRpb24uXG4gKi9cbmZ1bmN0aW9uIENhbnZhc1JlbmRlcmVyKHdpZHRoLCBoZWlnaHQsIG9wdGlvbnMpXG57XG4gICAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG5cbiAgICBTeXN0ZW1SZW5kZXJlci5jYWxsKHRoaXMsICdDYW52YXMnLCB3aWR0aCwgaGVpZ2h0LCBvcHRpb25zKTtcblxuICAgIHRoaXMudHlwZSA9IENPTlNULlJFTkRFUkVSX1RZUEUuQ0FOVkFTO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGNhbnZhcyAyZCBjb250ZXh0IHRoYXQgZXZlcnl0aGluZyBpcyBkcmF3biB3aXRoLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEfVxuICAgICAqL1xuICAgIHRoaXMuY29udGV4dCA9IHRoaXMudmlldy5nZXRDb250ZXh0KCcyZCcsIHsgYWxwaGE6IHRoaXMudHJhbnNwYXJlbnQgfSk7XG5cbiAgICAvKipcbiAgICAgKiBCb29sZWFuIGZsYWcgY29udHJvbGxpbmcgY2FudmFzIHJlZnJlc2guXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqL1xuICAgIHRoaXMucmVmcmVzaCA9IHRydWU7XG5cbiAgICAvKipcbiAgICAgKiBJbnN0YW5jZSBvZiBhIENhbnZhc01hc2tNYW5hZ2VyLCBoYW5kbGVzIG1hc2tpbmcgd2hlbiB1c2luZyB0aGUgY2FudmFzIHJlbmRlcmVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5DYW52YXNNYXNrTWFuYWdlcn1cbiAgICAgKi9cbiAgICB0aGlzLm1hc2tNYW5hZ2VyID0gbmV3IENhbnZhc01hc2tNYW5hZ2VyKCk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgY2FudmFzIHByb3BlcnR5IHVzZWQgdG8gc2V0IHRoZSBjYW52YXMgc21vb3RoaW5nIHByb3BlcnR5LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7c3RyaW5nfVxuICAgICAqL1xuICAgIHRoaXMuc21vb3RoUHJvcGVydHkgPSAnaW1hZ2VTbW9vdGhpbmdFbmFibGVkJztcblxuICAgIGlmICghdGhpcy5jb250ZXh0LmltYWdlU21vb3RoaW5nRW5hYmxlZClcbiAgICB7XG4gICAgICAgIGlmICh0aGlzLmNvbnRleHQud2Via2l0SW1hZ2VTbW9vdGhpbmdFbmFibGVkKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnNtb290aFByb3BlcnR5ID0gJ3dlYmtpdEltYWdlU21vb3RoaW5nRW5hYmxlZCc7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodGhpcy5jb250ZXh0Lm1vekltYWdlU21vb3RoaW5nRW5hYmxlZClcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5zbW9vdGhQcm9wZXJ0eSA9ICdtb3pJbWFnZVNtb290aGluZ0VuYWJsZWQnO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHRoaXMuY29udGV4dC5vSW1hZ2VTbW9vdGhpbmdFbmFibGVkKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnNtb290aFByb3BlcnR5ID0gJ29JbWFnZVNtb290aGluZ0VuYWJsZWQnO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHRoaXMuY29udGV4dC5tc0ltYWdlU21vb3RoaW5nRW5hYmxlZClcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5zbW9vdGhQcm9wZXJ0eSA9ICdtc0ltYWdlU21vb3RoaW5nRW5hYmxlZCc7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLmluaXRQbHVnaW5zKCk7XG5cbiAgICB0aGlzLl9tYXBCbGVuZE1vZGVzKCk7XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIHRlbXBvcmFyeSBkaXNwbGF5IG9iamVjdCB1c2VkIGFzIHRoZSBwYXJlbnQgb2YgdGhlIGN1cnJlbnRseSBiZWluZyByZW5kZXJlZCBpdGVtXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLkRpc3BsYXlPYmplY3R9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl90ZW1wRGlzcGxheU9iamVjdFBhcmVudCA9IHtcbiAgICAgICAgd29ybGRUcmFuc2Zvcm06IG5ldyBtYXRoLk1hdHJpeCgpLFxuICAgICAgICB3b3JsZEFscGhhOiAxXG4gICAgfTtcblxuXG4gICAgdGhpcy5yZXNpemUod2lkdGgsIGhlaWdodCk7XG59XG5cbi8vIGNvbnN0cnVjdG9yXG5DYW52YXNSZW5kZXJlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFN5c3RlbVJlbmRlcmVyLnByb3RvdHlwZSk7XG5DYW52YXNSZW5kZXJlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBDYW52YXNSZW5kZXJlcjtcbm1vZHVsZS5leHBvcnRzID0gQ2FudmFzUmVuZGVyZXI7XG51dGlscy5wbHVnaW5UYXJnZXQubWl4aW4oQ2FudmFzUmVuZGVyZXIpO1xuXG4vKipcbiAqIFJlbmRlcnMgdGhlIG9iamVjdCB0byB0aGlzIGNhbnZhcyB2aWV3XG4gKlxuICogQHBhcmFtIG9iamVjdCB7UElYSS5EaXNwbGF5T2JqZWN0fSB0aGUgb2JqZWN0IHRvIGJlIHJlbmRlcmVkXG4gKi9cbkNhbnZhc1JlbmRlcmVyLnByb3RvdHlwZS5yZW5kZXIgPSBmdW5jdGlvbiAob2JqZWN0KVxue1xuICAgIHRoaXMuZW1pdCgncHJlcmVuZGVyJyk7XG5cbiAgICB2YXIgY2FjaGVQYXJlbnQgPSBvYmplY3QucGFyZW50O1xuXG4gICAgdGhpcy5fbGFzdE9iamVjdFJlbmRlcmVkID0gb2JqZWN0O1xuXG4gICAgb2JqZWN0LnBhcmVudCA9IHRoaXMuX3RlbXBEaXNwbGF5T2JqZWN0UGFyZW50O1xuXG4gICAgLy8gdXBkYXRlIHRoZSBzY2VuZSBncmFwaFxuICAgIG9iamVjdC51cGRhdGVUcmFuc2Zvcm0oKTtcblxuICAgIG9iamVjdC5wYXJlbnQgPSBjYWNoZVBhcmVudDtcblxuICAgIHRoaXMuY29udGV4dC5zZXRUcmFuc2Zvcm0oMSwgMCwgMCwgMSwgMCwgMCk7XG5cbiAgICB0aGlzLmNvbnRleHQuZ2xvYmFsQWxwaGEgPSAxO1xuXG4gICAgdGhpcy5jb250ZXh0Lmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbiA9IHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5OT1JNQUxdO1xuXG4gICAgaWYgKG5hdmlnYXRvci5pc0NvY29vbkpTICYmIHRoaXMudmlldy5zY3JlZW5jYW52YXMpXG4gICAge1xuICAgICAgICB0aGlzLmNvbnRleHQuZmlsbFN0eWxlID0gJ2JsYWNrJztcbiAgICAgICAgdGhpcy5jb250ZXh0LmNsZWFyKCk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuY2xlYXJCZWZvcmVSZW5kZXIpXG4gICAge1xuICAgICAgICBpZiAodGhpcy50cmFuc3BhcmVudClcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5jb250ZXh0LmNsZWFyUmVjdCgwLCAwLCB0aGlzLndpZHRoLCB0aGlzLmhlaWdodCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmNvbnRleHQuZmlsbFN0eWxlID0gdGhpcy5fYmFja2dyb3VuZENvbG9yU3RyaW5nO1xuICAgICAgICAgICAgdGhpcy5jb250ZXh0LmZpbGxSZWN0KDAsIDAsIHRoaXMud2lkdGggLCB0aGlzLmhlaWdodCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLnJlbmRlckRpc3BsYXlPYmplY3Qob2JqZWN0LCB0aGlzLmNvbnRleHQpO1xuXG4gICAgdGhpcy5lbWl0KCdwb3N0cmVuZGVyJyk7XG59O1xuXG4vKipcbiAqIFJlbW92ZXMgZXZlcnl0aGluZyBmcm9tIHRoZSByZW5kZXJlciBhbmQgb3B0aW9uYWxseSByZW1vdmVzIHRoZSBDYW52YXMgRE9NIGVsZW1lbnQuXG4gKlxuICogQHBhcmFtIFtyZW1vdmVWaWV3PWZhbHNlXSB7Ym9vbGVhbn0gUmVtb3ZlcyB0aGUgQ2FudmFzIGVsZW1lbnQgZnJvbSB0aGUgRE9NLlxuICovXG5DYW52YXNSZW5kZXJlci5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uIChyZW1vdmVWaWV3KVxue1xuICAgIHRoaXMuZGVzdHJveVBsdWdpbnMoKTtcblxuICAgIC8vIGNhbGwgdGhlIGJhc2UgZGVzdHJveVxuICAgIFN5c3RlbVJlbmRlcmVyLnByb3RvdHlwZS5kZXN0cm95LmNhbGwodGhpcywgcmVtb3ZlVmlldyk7XG5cbiAgICB0aGlzLmNvbnRleHQgPSBudWxsO1xuXG4gICAgdGhpcy5yZWZyZXNoID0gdHJ1ZTtcblxuICAgIHRoaXMubWFza01hbmFnZXIuZGVzdHJveSgpO1xuICAgIHRoaXMubWFza01hbmFnZXIgPSBudWxsO1xuXG4gICAgdGhpcy5zbW9vdGhQcm9wZXJ0eSA9IG51bGw7XG59O1xuXG4vKipcbiAqIFJlbmRlcnMgYSBkaXNwbGF5IG9iamVjdFxuICpcbiAqIEBwYXJhbSBkaXNwbGF5T2JqZWN0IHtQSVhJLkRpc3BsYXlPYmplY3R9IFRoZSBkaXNwbGF5T2JqZWN0IHRvIHJlbmRlclxuICogQHByaXZhdGVcbiAqL1xuQ2FudmFzUmVuZGVyZXIucHJvdG90eXBlLnJlbmRlckRpc3BsYXlPYmplY3QgPSBmdW5jdGlvbiAoZGlzcGxheU9iamVjdCwgY29udGV4dClcbntcbiAgICB2YXIgdGVtcENvbnRleHQgPSB0aGlzLmNvbnRleHQ7XG5cbiAgICB0aGlzLmNvbnRleHQgPSBjb250ZXh0O1xuICAgIGRpc3BsYXlPYmplY3QucmVuZGVyQ2FudmFzKHRoaXMpO1xuICAgIHRoaXMuY29udGV4dCA9IHRlbXBDb250ZXh0O1xufTtcblxuLyoqXG4gKiBAZXh0ZW5kcyBQSVhJLlN5c3RlbVJlbmRlcmVyI3Jlc2l6ZVxuICpcbiAqIEBwYXJhbSB7bnVtYmVyfSB3XG4gKiBAcGFyYW0ge251bWJlcn0gaFxuICovXG5DYW52YXNSZW5kZXJlci5wcm90b3R5cGUucmVzaXplID0gZnVuY3Rpb24gKHcsIGgpXG57XG4gICAgU3lzdGVtUmVuZGVyZXIucHJvdG90eXBlLnJlc2l6ZS5jYWxsKHRoaXMsIHcsIGgpO1xuXG4gICAgLy9yZXNldCB0aGUgc2NhbGUgbW9kZS4uIG9kZGx5IHRoaXMgc2VlbXMgdG8gYmUgcmVzZXQgd2hlbiB0aGUgY2FudmFzIGlzIHJlc2l6ZWQuXG4gICAgLy9zdXJlbHkgYSBicm93c2VyIGJ1Zz8/IExldCBwaXhpIGZpeCB0aGF0IGZvciB5b3UuLlxuICAgIGlmKHRoaXMuc21vb3RoUHJvcGVydHkpXG4gICAge1xuICAgICAgICB0aGlzLmNvbnRleHRbdGhpcy5zbW9vdGhQcm9wZXJ0eV0gPSAoQ09OU1QuU0NBTEVfTU9ERVMuREVGQVVMVCA9PT0gQ09OU1QuU0NBTEVfTU9ERVMuTElORUFSKTtcbiAgICB9XG5cbn07XG5cbi8qKlxuICogTWFwcyBQaXhpIGJsZW5kIG1vZGVzIHRvIGNhbnZhcyBibGVuZCBtb2Rlcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5DYW52YXNSZW5kZXJlci5wcm90b3R5cGUuX21hcEJsZW5kTW9kZXMgPSBmdW5jdGlvbiAoKVxue1xuICAgIGlmICghdGhpcy5ibGVuZE1vZGVzKVxuICAgIHtcbiAgICAgICAgdGhpcy5ibGVuZE1vZGVzID0ge307XG5cbiAgICAgICAgaWYgKHV0aWxzLmNhblVzZU5ld0NhbnZhc0JsZW5kTW9kZXMoKSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5ibGVuZE1vZGVzW0NPTlNULkJMRU5EX01PREVTLk5PUk1BTF0gICAgICAgID0gJ3NvdXJjZS1vdmVyJztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5BRERdICAgICAgICAgICA9ICdsaWdodGVyJzsgLy9JUyBUSElTIE9LPz8/XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuTVVMVElQTFldICAgICAgPSAnbXVsdGlwbHknO1xuICAgICAgICAgICAgdGhpcy5ibGVuZE1vZGVzW0NPTlNULkJMRU5EX01PREVTLlNDUkVFTl0gICAgICAgID0gJ3NjcmVlbic7XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuT1ZFUkxBWV0gICAgICAgPSAnb3ZlcmxheSc7XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuREFSS0VOXSAgICAgICAgPSAnZGFya2VuJztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5MSUdIVEVOXSAgICAgICA9ICdsaWdodGVuJztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5DT0xPUl9ET0RHRV0gICA9ICdjb2xvci1kb2RnZSc7XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuQ09MT1JfQlVSTl0gICAgPSAnY29sb3ItYnVybic7XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuSEFSRF9MSUdIVF0gICAgPSAnaGFyZC1saWdodCc7XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuU09GVF9MSUdIVF0gICAgPSAnc29mdC1saWdodCc7XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuRElGRkVSRU5DRV0gICAgPSAnZGlmZmVyZW5jZSc7XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuRVhDTFVTSU9OXSAgICAgPSAnZXhjbHVzaW9uJztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5IVUVdICAgICAgICAgICA9ICdodWUnO1xuICAgICAgICAgICAgdGhpcy5ibGVuZE1vZGVzW0NPTlNULkJMRU5EX01PREVTLlNBVFVSQVRJT05dICAgID0gJ3NhdHVyYXRlJztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5DT0xPUl0gICAgICAgICA9ICdjb2xvcic7XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuTFVNSU5PU0lUWV0gICAgPSAnbHVtaW5vc2l0eSc7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgICAvLyB0aGlzIG1lYW5zIHRoYXQgdGhlIGJyb3dzZXIgZG9lcyBub3Qgc3VwcG9ydCB0aGUgY29vbCBuZXcgYmxlbmQgbW9kZXMgaW4gY2FudmFzICdjb3VnaCcgaWUgJ2NvdWdoJ1xuICAgICAgICAgICAgdGhpcy5ibGVuZE1vZGVzW0NPTlNULkJMRU5EX01PREVTLk5PUk1BTF0gICAgICAgID0gJ3NvdXJjZS1vdmVyJztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5BRERdICAgICAgICAgICA9ICdsaWdodGVyJzsgLy9JUyBUSElTIE9LPz8/XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuTVVMVElQTFldICAgICAgPSAnc291cmNlLW92ZXInO1xuICAgICAgICAgICAgdGhpcy5ibGVuZE1vZGVzW0NPTlNULkJMRU5EX01PREVTLlNDUkVFTl0gICAgICAgID0gJ3NvdXJjZS1vdmVyJztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5PVkVSTEFZXSAgICAgICA9ICdzb3VyY2Utb3Zlcic7XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuREFSS0VOXSAgICAgICAgPSAnc291cmNlLW92ZXInO1xuICAgICAgICAgICAgdGhpcy5ibGVuZE1vZGVzW0NPTlNULkJMRU5EX01PREVTLkxJR0hURU5dICAgICAgID0gJ3NvdXJjZS1vdmVyJztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5DT0xPUl9ET0RHRV0gICA9ICdzb3VyY2Utb3Zlcic7XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuQ09MT1JfQlVSTl0gICAgPSAnc291cmNlLW92ZXInO1xuICAgICAgICAgICAgdGhpcy5ibGVuZE1vZGVzW0NPTlNULkJMRU5EX01PREVTLkhBUkRfTElHSFRdICAgID0gJ3NvdXJjZS1vdmVyJztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5TT0ZUX0xJR0hUXSAgICA9ICdzb3VyY2Utb3Zlcic7XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuRElGRkVSRU5DRV0gICAgPSAnc291cmNlLW92ZXInO1xuICAgICAgICAgICAgdGhpcy5ibGVuZE1vZGVzW0NPTlNULkJMRU5EX01PREVTLkVYQ0xVU0lPTl0gICAgID0gJ3NvdXJjZS1vdmVyJztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5IVUVdICAgICAgICAgICA9ICdzb3VyY2Utb3Zlcic7XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuU0FUVVJBVElPTl0gICAgPSAnc291cmNlLW92ZXInO1xuICAgICAgICAgICAgdGhpcy5ibGVuZE1vZGVzW0NPTlNULkJMRU5EX01PREVTLkNPTE9SXSAgICAgICAgID0gJ3NvdXJjZS1vdmVyJztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5MVU1JTk9TSVRZXSAgICA9ICdzb3VyY2Utb3Zlcic7XG4gICAgICAgIH1cbiAgICB9XG59O1xuIiwiLyoqXG4gKiBDcmVhdGVzIGEgQ2FudmFzIGVsZW1lbnQgb2YgdGhlIGdpdmVuIHNpemUuXG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIHdpZHRoIHtudW1iZXJ9IHRoZSB3aWR0aCBmb3IgdGhlIG5ld2x5IGNyZWF0ZWQgY2FudmFzXG4gKiBAcGFyYW0gaGVpZ2h0IHtudW1iZXJ9IHRoZSBoZWlnaHQgZm9yIHRoZSBuZXdseSBjcmVhdGVkIGNhbnZhc1xuICovXG5mdW5jdGlvbiBDYW52YXNCdWZmZXIod2lkdGgsIGhlaWdodClcbntcbiAgICAvKipcbiAgICAgKiBUaGUgQ2FudmFzIG9iamVjdCB0aGF0IGJlbG9uZ3MgdG8gdGhpcyBDYW52YXNCdWZmZXIuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtIVE1MQ2FudmFzRWxlbWVudH1cbiAgICAgKi9cbiAgICB0aGlzLmNhbnZhcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NhbnZhcycpO1xuXG4gICAgLyoqXG4gICAgICogQSBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQgb2JqZWN0IHJlcHJlc2VudGluZyBhIHR3by1kaW1lbnNpb25hbCByZW5kZXJpbmcgY29udGV4dC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRH1cbiAgICAgKi9cbiAgICB0aGlzLmNvbnRleHQgPSB0aGlzLmNhbnZhcy5nZXRDb250ZXh0KCcyZCcpO1xuXG4gICAgdGhpcy5jYW52YXMud2lkdGggPSB3aWR0aDtcbiAgICB0aGlzLmNhbnZhcy5oZWlnaHQgPSBoZWlnaHQ7XG59XG5cbkNhbnZhc0J1ZmZlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBDYW52YXNCdWZmZXI7XG5tb2R1bGUuZXhwb3J0cyA9IENhbnZhc0J1ZmZlcjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoQ2FudmFzQnVmZmVyLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFRoZSB3aWR0aCBvZiB0aGUgY2FudmFzIGJ1ZmZlciBpbiBwaXhlbHMuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuQ2FudmFzQnVmZmVyI1xuICAgICAqL1xuICAgIHdpZHRoOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY2FudmFzLndpZHRoO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWwpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuY2FudmFzLndpZHRoID0gdmFsO1xuICAgICAgICB9XG4gICAgfSxcbiAgICAvKipcbiAgICAgKiBUaGUgaGVpZ2h0IG9mIHRoZSBjYW52YXMgYnVmZmVyIGluIHBpeGVscy5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5DYW52YXNCdWZmZXIjXG4gICAgICovXG4gICAgaGVpZ2h0OiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY2FudmFzLmhlaWdodDtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmNhbnZhcy5oZWlnaHQgPSB2YWw7XG4gICAgICAgIH1cbiAgICB9XG59KTtcblxuLyoqXG4gKiBDbGVhcnMgdGhlIGNhbnZhcyB0aGF0IHdhcyBjcmVhdGVkIGJ5IHRoZSBDYW52YXNCdWZmZXIgY2xhc3MuXG4gKlxuICogQHByaXZhdGVcbiAqL1xuQ2FudmFzQnVmZmVyLnByb3RvdHlwZS5jbGVhciA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy5jb250ZXh0LnNldFRyYW5zZm9ybSgxLCAwLCAwLCAxLCAwLCAwKTtcbiAgICB0aGlzLmNvbnRleHQuY2xlYXJSZWN0KDAsMCwgdGhpcy5jYW52YXMud2lkdGgsIHRoaXMuY2FudmFzLmhlaWdodCk7XG59O1xuXG4vKipcbiAqIFJlc2l6ZXMgdGhlIGNhbnZhcyB0byB0aGUgc3BlY2lmaWVkIHdpZHRoIGFuZCBoZWlnaHQuXG4gKlxuICogQHBhcmFtIHdpZHRoIHtudW1iZXJ9IHRoZSBuZXcgd2lkdGggb2YgdGhlIGNhbnZhc1xuICogQHBhcmFtIGhlaWdodCB7bnVtYmVyfSB0aGUgbmV3IGhlaWdodCBvZiB0aGUgY2FudmFzXG4gKi9cbkNhbnZhc0J1ZmZlci5wcm90b3R5cGUucmVzaXplID0gZnVuY3Rpb24gKHdpZHRoLCBoZWlnaHQpXG57XG4gICAgdGhpcy5jYW52YXMud2lkdGggPSB3aWR0aDtcbiAgICB0aGlzLmNhbnZhcy5oZWlnaHQgPSBoZWlnaHQ7XG59O1xuXG4vKipcbiAqIERlc3Ryb3lzIHRoaXMgY2FudmFzLlxuICpcbiAqL1xuQ2FudmFzQnVmZmVyLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLmNvbnRleHQgPSBudWxsO1xuICAgIHRoaXMuY2FudmFzID0gbnVsbDtcbn07XG4iLCJ2YXIgQ09OU1QgPSByZXF1aXJlKCcuLi8uLi8uLi9jb25zdCcpO1xuXG4vKipcbiAqIEEgc2V0IG9mIGZ1bmN0aW9ucyB1c2VkIGJ5IHRoZSBjYW52YXMgcmVuZGVyZXIgdG8gZHJhdyB0aGUgcHJpbWl0aXZlIGdyYXBoaWNzIGRhdGEuXG4gKiBAc3RhdGljXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKi9cbnZhciBDYW52YXNHcmFwaGljcyA9IHt9O1xubW9kdWxlLmV4cG9ydHMgPSBDYW52YXNHcmFwaGljcztcblxuLypcbiAqIFJlbmRlcnMgYSBHcmFwaGljcyBvYmplY3QgdG8gYSBjYW52YXMuXG4gKlxuICogQHBhcmFtIGdyYXBoaWNzIHtQSVhJLkdyYXBoaWNzfSB0aGUgYWN0dWFsIGdyYXBoaWNzIG9iamVjdCB0byByZW5kZXJcbiAqIEBwYXJhbSBjb250ZXh0IHtDYW52YXNSZW5kZXJpbmdDb250ZXh0MkR9IHRoZSAyZCBkcmF3aW5nIG1ldGhvZCBvZiB0aGUgY2FudmFzXG4gKi9cbkNhbnZhc0dyYXBoaWNzLnJlbmRlckdyYXBoaWNzID0gZnVuY3Rpb24gKGdyYXBoaWNzLCBjb250ZXh0KVxue1xuICAgIHZhciB3b3JsZEFscGhhID0gZ3JhcGhpY3Mud29ybGRBbHBoYTtcblxuICAgIGlmIChncmFwaGljcy5kaXJ0eSlcbiAgICB7XG4gICAgICAgIHRoaXMudXBkYXRlR3JhcGhpY3NUaW50KGdyYXBoaWNzKTtcbiAgICAgICAgZ3JhcGhpY3MuZGlydHkgPSBmYWxzZTtcbiAgICB9XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGdyYXBoaWNzLmdyYXBoaWNzRGF0YS5sZW5ndGg7IGkrKylcbiAgICB7XG4gICAgICAgIHZhciBkYXRhID0gZ3JhcGhpY3MuZ3JhcGhpY3NEYXRhW2ldO1xuICAgICAgICB2YXIgc2hhcGUgPSBkYXRhLnNoYXBlO1xuXG4gICAgICAgIHZhciBmaWxsQ29sb3IgPSBkYXRhLl9maWxsVGludDtcbiAgICAgICAgdmFyIGxpbmVDb2xvciA9IGRhdGEuX2xpbmVUaW50O1xuXG4gICAgICAgIGNvbnRleHQubGluZVdpZHRoID0gZGF0YS5saW5lV2lkdGg7XG5cbiAgICAgICAgaWYgKGRhdGEudHlwZSA9PT0gQ09OU1QuU0hBUEVTLlBPTFkpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNvbnRleHQuYmVnaW5QYXRoKCk7XG5cbiAgICAgICAgICAgIHZhciBwb2ludHMgPSBzaGFwZS5wb2ludHM7XG5cbiAgICAgICAgICAgIGNvbnRleHQubW92ZVRvKHBvaW50c1swXSwgcG9pbnRzWzFdKTtcblxuICAgICAgICAgICAgZm9yICh2YXIgaj0xOyBqIDwgcG9pbnRzLmxlbmd0aC8yOyBqKyspXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29udGV4dC5saW5lVG8ocG9pbnRzW2ogKiAyXSwgcG9pbnRzW2ogKiAyICsgMV0pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoc2hhcGUuY2xvc2VkKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGNvbnRleHQubGluZVRvKHBvaW50c1swXSwgcG9pbnRzWzFdKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gaWYgdGhlIGZpcnN0IGFuZCBsYXN0IHBvaW50IGFyZSB0aGUgc2FtZSBjbG9zZSB0aGUgcGF0aCAtIG11Y2ggbmVhdGVyIDopXG4gICAgICAgICAgICBpZiAocG9pbnRzWzBdID09PSBwb2ludHNbcG9pbnRzLmxlbmd0aC0yXSAmJiBwb2ludHNbMV0gPT09IHBvaW50c1twb2ludHMubGVuZ3RoLTFdKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGNvbnRleHQuY2xvc2VQYXRoKCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChkYXRhLmZpbGwpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29udGV4dC5nbG9iYWxBbHBoYSA9IGRhdGEuZmlsbEFscGhhICogd29ybGRBbHBoYTtcbiAgICAgICAgICAgICAgICBjb250ZXh0LmZpbGxTdHlsZSA9ICcjJyArICgnMDAwMDAnICsgKCBmaWxsQ29sb3IgfCAwKS50b1N0cmluZygxNikpLnN1YnN0cigtNik7XG4gICAgICAgICAgICAgICAgY29udGV4dC5maWxsKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZGF0YS5saW5lV2lkdGgpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29udGV4dC5nbG9iYWxBbHBoYSA9IGRhdGEubGluZUFscGhhICogd29ybGRBbHBoYTtcbiAgICAgICAgICAgICAgICBjb250ZXh0LnN0cm9rZVN0eWxlID0gJyMnICsgKCcwMDAwMCcgKyAoIGxpbmVDb2xvciB8IDApLnRvU3RyaW5nKDE2KSkuc3Vic3RyKC02KTtcbiAgICAgICAgICAgICAgICBjb250ZXh0LnN0cm9rZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGRhdGEudHlwZSA9PT0gQ09OU1QuU0hBUEVTLlJFQ1QpXG4gICAgICAgIHtcblxuICAgICAgICAgICAgaWYgKGRhdGEuZmlsbENvbG9yIHx8IGRhdGEuZmlsbENvbG9yID09PSAwKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGNvbnRleHQuZ2xvYmFsQWxwaGEgPSBkYXRhLmZpbGxBbHBoYSAqIHdvcmxkQWxwaGE7XG4gICAgICAgICAgICAgICAgY29udGV4dC5maWxsU3R5bGUgPSAnIycgKyAoJzAwMDAwJyArICggZmlsbENvbG9yIHwgMCkudG9TdHJpbmcoMTYpKS5zdWJzdHIoLTYpO1xuICAgICAgICAgICAgICAgIGNvbnRleHQuZmlsbFJlY3Qoc2hhcGUueCwgc2hhcGUueSwgc2hhcGUud2lkdGgsIHNoYXBlLmhlaWdodCk7XG5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChkYXRhLmxpbmVXaWR0aClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb250ZXh0Lmdsb2JhbEFscGhhID0gZGF0YS5saW5lQWxwaGEgKiB3b3JsZEFscGhhO1xuICAgICAgICAgICAgICAgIGNvbnRleHQuc3Ryb2tlU3R5bGUgPSAnIycgKyAoJzAwMDAwJyArICggbGluZUNvbG9yIHwgMCkudG9TdHJpbmcoMTYpKS5zdWJzdHIoLTYpO1xuICAgICAgICAgICAgICAgIGNvbnRleHQuc3Ryb2tlUmVjdChzaGFwZS54LCBzaGFwZS55LCBzaGFwZS53aWR0aCwgc2hhcGUuaGVpZ2h0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChkYXRhLnR5cGUgPT09IENPTlNULlNIQVBFUy5DSVJDKVxuICAgICAgICB7XG4gICAgICAgICAgICAvLyBUT0RPIC0gbmVlZCB0byBiZSBVbmRlZmluZWQhXG4gICAgICAgICAgICBjb250ZXh0LmJlZ2luUGF0aCgpO1xuICAgICAgICAgICAgY29udGV4dC5hcmMoc2hhcGUueCwgc2hhcGUueSwgc2hhcGUucmFkaXVzLDAsMipNYXRoLlBJKTtcbiAgICAgICAgICAgIGNvbnRleHQuY2xvc2VQYXRoKCk7XG5cbiAgICAgICAgICAgIGlmIChkYXRhLmZpbGwpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29udGV4dC5nbG9iYWxBbHBoYSA9IGRhdGEuZmlsbEFscGhhICogd29ybGRBbHBoYTtcbiAgICAgICAgICAgICAgICBjb250ZXh0LmZpbGxTdHlsZSA9ICcjJyArICgnMDAwMDAnICsgKCBmaWxsQ29sb3IgfCAwKS50b1N0cmluZygxNikpLnN1YnN0cigtNik7XG4gICAgICAgICAgICAgICAgY29udGV4dC5maWxsKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZGF0YS5saW5lV2lkdGgpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29udGV4dC5nbG9iYWxBbHBoYSA9IGRhdGEubGluZUFscGhhICogd29ybGRBbHBoYTtcbiAgICAgICAgICAgICAgICBjb250ZXh0LnN0cm9rZVN0eWxlID0gJyMnICsgKCcwMDAwMCcgKyAoIGxpbmVDb2xvciB8IDApLnRvU3RyaW5nKDE2KSkuc3Vic3RyKC02KTtcbiAgICAgICAgICAgICAgICBjb250ZXh0LnN0cm9rZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGRhdGEudHlwZSA9PT0gQ09OU1QuU0hBUEVTLkVMSVApXG4gICAgICAgIHtcbiAgICAgICAgICAgIC8vIGVsbGlwc2UgY29kZSB0YWtlbiBmcm9tOiBodHRwOi8vc3RhY2tvdmVyZmxvdy5jb20vcXVlc3Rpb25zLzIxNzI3OTgvaG93LXRvLWRyYXctYW4tb3ZhbC1pbi1odG1sNS1jYW52YXNcblxuICAgICAgICAgICAgdmFyIHcgPSBzaGFwZS53aWR0aCAqIDI7XG4gICAgICAgICAgICB2YXIgaCA9IHNoYXBlLmhlaWdodCAqIDI7XG5cbiAgICAgICAgICAgIHZhciB4ID0gc2hhcGUueCAtIHcvMjtcbiAgICAgICAgICAgIHZhciB5ID0gc2hhcGUueSAtIGgvMjtcblxuICAgICAgICAgICAgY29udGV4dC5iZWdpblBhdGgoKTtcblxuICAgICAgICAgICAgdmFyIGthcHBhID0gMC41NTIyODQ4LFxuICAgICAgICAgICAgICAgIG94ID0gKHcgLyAyKSAqIGthcHBhLCAvLyBjb250cm9sIHBvaW50IG9mZnNldCBob3Jpem9udGFsXG4gICAgICAgICAgICAgICAgb3kgPSAoaCAvIDIpICoga2FwcGEsIC8vIGNvbnRyb2wgcG9pbnQgb2Zmc2V0IHZlcnRpY2FsXG4gICAgICAgICAgICAgICAgeGUgPSB4ICsgdywgICAgICAgICAgIC8vIHgtZW5kXG4gICAgICAgICAgICAgICAgeWUgPSB5ICsgaCwgICAgICAgICAgIC8vIHktZW5kXG4gICAgICAgICAgICAgICAgeG0gPSB4ICsgdyAvIDIsICAgICAgIC8vIHgtbWlkZGxlXG4gICAgICAgICAgICAgICAgeW0gPSB5ICsgaCAvIDI7ICAgICAgIC8vIHktbWlkZGxlXG5cbiAgICAgICAgICAgIGNvbnRleHQubW92ZVRvKHgsIHltKTtcbiAgICAgICAgICAgIGNvbnRleHQuYmV6aWVyQ3VydmVUbyh4LCB5bSAtIG95LCB4bSAtIG94LCB5LCB4bSwgeSk7XG4gICAgICAgICAgICBjb250ZXh0LmJlemllckN1cnZlVG8oeG0gKyBveCwgeSwgeGUsIHltIC0gb3ksIHhlLCB5bSk7XG4gICAgICAgICAgICBjb250ZXh0LmJlemllckN1cnZlVG8oeGUsIHltICsgb3ksIHhtICsgb3gsIHllLCB4bSwgeWUpO1xuICAgICAgICAgICAgY29udGV4dC5iZXppZXJDdXJ2ZVRvKHhtIC0gb3gsIHllLCB4LCB5bSArIG95LCB4LCB5bSk7XG5cbiAgICAgICAgICAgIGNvbnRleHQuY2xvc2VQYXRoKCk7XG5cbiAgICAgICAgICAgIGlmIChkYXRhLmZpbGwpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29udGV4dC5nbG9iYWxBbHBoYSA9IGRhdGEuZmlsbEFscGhhICogd29ybGRBbHBoYTtcbiAgICAgICAgICAgICAgICBjb250ZXh0LmZpbGxTdHlsZSA9ICcjJyArICgnMDAwMDAnICsgKCBmaWxsQ29sb3IgfCAwKS50b1N0cmluZygxNikpLnN1YnN0cigtNik7XG4gICAgICAgICAgICAgICAgY29udGV4dC5maWxsKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZGF0YS5saW5lV2lkdGgpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29udGV4dC5nbG9iYWxBbHBoYSA9IGRhdGEubGluZUFscGhhICogd29ybGRBbHBoYTtcbiAgICAgICAgICAgICAgICBjb250ZXh0LnN0cm9rZVN0eWxlID0gJyMnICsgKCcwMDAwMCcgKyAoIGxpbmVDb2xvciB8IDApLnRvU3RyaW5nKDE2KSkuc3Vic3RyKC02KTtcbiAgICAgICAgICAgICAgICBjb250ZXh0LnN0cm9rZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGRhdGEudHlwZSA9PT0gQ09OU1QuU0hBUEVTLlJSRUMpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHZhciByeCA9IHNoYXBlLng7XG4gICAgICAgICAgICB2YXIgcnkgPSBzaGFwZS55O1xuICAgICAgICAgICAgdmFyIHdpZHRoID0gc2hhcGUud2lkdGg7XG4gICAgICAgICAgICB2YXIgaGVpZ2h0ID0gc2hhcGUuaGVpZ2h0O1xuICAgICAgICAgICAgdmFyIHJhZGl1cyA9IHNoYXBlLnJhZGl1cztcblxuICAgICAgICAgICAgdmFyIG1heFJhZGl1cyA9IE1hdGgubWluKHdpZHRoLCBoZWlnaHQpIC8gMiB8IDA7XG4gICAgICAgICAgICByYWRpdXMgPSByYWRpdXMgPiBtYXhSYWRpdXMgPyBtYXhSYWRpdXMgOiByYWRpdXM7XG5cbiAgICAgICAgICAgIGNvbnRleHQuYmVnaW5QYXRoKCk7XG4gICAgICAgICAgICBjb250ZXh0Lm1vdmVUbyhyeCwgcnkgKyByYWRpdXMpO1xuICAgICAgICAgICAgY29udGV4dC5saW5lVG8ocngsIHJ5ICsgaGVpZ2h0IC0gcmFkaXVzKTtcbiAgICAgICAgICAgIGNvbnRleHQucXVhZHJhdGljQ3VydmVUbyhyeCwgcnkgKyBoZWlnaHQsIHJ4ICsgcmFkaXVzLCByeSArIGhlaWdodCk7XG4gICAgICAgICAgICBjb250ZXh0LmxpbmVUbyhyeCArIHdpZHRoIC0gcmFkaXVzLCByeSArIGhlaWdodCk7XG4gICAgICAgICAgICBjb250ZXh0LnF1YWRyYXRpY0N1cnZlVG8ocnggKyB3aWR0aCwgcnkgKyBoZWlnaHQsIHJ4ICsgd2lkdGgsIHJ5ICsgaGVpZ2h0IC0gcmFkaXVzKTtcbiAgICAgICAgICAgIGNvbnRleHQubGluZVRvKHJ4ICsgd2lkdGgsIHJ5ICsgcmFkaXVzKTtcbiAgICAgICAgICAgIGNvbnRleHQucXVhZHJhdGljQ3VydmVUbyhyeCArIHdpZHRoLCByeSwgcnggKyB3aWR0aCAtIHJhZGl1cywgcnkpO1xuICAgICAgICAgICAgY29udGV4dC5saW5lVG8ocnggKyByYWRpdXMsIHJ5KTtcbiAgICAgICAgICAgIGNvbnRleHQucXVhZHJhdGljQ3VydmVUbyhyeCwgcnksIHJ4LCByeSArIHJhZGl1cyk7XG4gICAgICAgICAgICBjb250ZXh0LmNsb3NlUGF0aCgpO1xuXG4gICAgICAgICAgICBpZiAoZGF0YS5maWxsQ29sb3IgfHwgZGF0YS5maWxsQ29sb3IgPT09IDApXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29udGV4dC5nbG9iYWxBbHBoYSA9IGRhdGEuZmlsbEFscGhhICogd29ybGRBbHBoYTtcbiAgICAgICAgICAgICAgICBjb250ZXh0LmZpbGxTdHlsZSA9ICcjJyArICgnMDAwMDAnICsgKCBmaWxsQ29sb3IgfCAwKS50b1N0cmluZygxNikpLnN1YnN0cigtNik7XG4gICAgICAgICAgICAgICAgY29udGV4dC5maWxsKCk7XG5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChkYXRhLmxpbmVXaWR0aClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb250ZXh0Lmdsb2JhbEFscGhhID0gZGF0YS5saW5lQWxwaGEgKiB3b3JsZEFscGhhO1xuICAgICAgICAgICAgICAgIGNvbnRleHQuc3Ryb2tlU3R5bGUgPSAnIycgKyAoJzAwMDAwJyArICggbGluZUNvbG9yIHwgMCkudG9TdHJpbmcoMTYpKS5zdWJzdHIoLTYpO1xuICAgICAgICAgICAgICAgIGNvbnRleHQuc3Ryb2tlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG59O1xuXG4vKlxuICogUmVuZGVycyBhIGdyYXBoaWNzIG1hc2tcbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIGdyYXBoaWNzIHtQSVhJLkdyYXBoaWNzfSB0aGUgZ3JhcGhpY3Mgd2hpY2ggd2lsbCBiZSB1c2VkIGFzIGEgbWFza1xuICogQHBhcmFtIGNvbnRleHQge0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRH0gdGhlIGNvbnRleHQgMmQgbWV0aG9kIG9mIHRoZSBjYW52YXNcbiAqL1xuQ2FudmFzR3JhcGhpY3MucmVuZGVyR3JhcGhpY3NNYXNrID0gZnVuY3Rpb24gKGdyYXBoaWNzLCBjb250ZXh0KVxue1xuICAgIHZhciBsZW4gPSBncmFwaGljcy5ncmFwaGljc0RhdGEubGVuZ3RoO1xuXG4gICAgaWYgKGxlbiA9PT0gMClcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb250ZXh0LmJlZ2luUGF0aCgpO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47IGkrKylcbiAgICB7XG4gICAgICAgIHZhciBkYXRhID0gZ3JhcGhpY3MuZ3JhcGhpY3NEYXRhW2ldO1xuICAgICAgICB2YXIgc2hhcGUgPSBkYXRhLnNoYXBlO1xuXG4gICAgICAgIGlmIChkYXRhLnR5cGUgPT09IENPTlNULlNIQVBFUy5QT0xZKVxuICAgICAgICB7XG5cbiAgICAgICAgICAgIHZhciBwb2ludHMgPSBzaGFwZS5wb2ludHM7XG5cbiAgICAgICAgICAgIGNvbnRleHQubW92ZVRvKHBvaW50c1swXSwgcG9pbnRzWzFdKTtcblxuICAgICAgICAgICAgZm9yICh2YXIgaj0xOyBqIDwgcG9pbnRzLmxlbmd0aC8yOyBqKyspXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29udGV4dC5saW5lVG8ocG9pbnRzW2ogKiAyXSwgcG9pbnRzW2ogKiAyICsgMV0pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBpZiB0aGUgZmlyc3QgYW5kIGxhc3QgcG9pbnQgYXJlIHRoZSBzYW1lIGNsb3NlIHRoZSBwYXRoIC0gbXVjaCBuZWF0ZXIgOilcbiAgICAgICAgICAgIGlmIChwb2ludHNbMF0gPT09IHBvaW50c1twb2ludHMubGVuZ3RoLTJdICYmIHBvaW50c1sxXSA9PT0gcG9pbnRzW3BvaW50cy5sZW5ndGgtMV0pXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29udGV4dC5jbG9zZVBhdGgoKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGRhdGEudHlwZSA9PT0gQ09OU1QuU0hBUEVTLlJFQ1QpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNvbnRleHQucmVjdChzaGFwZS54LCBzaGFwZS55LCBzaGFwZS53aWR0aCwgc2hhcGUuaGVpZ2h0KTtcbiAgICAgICAgICAgIGNvbnRleHQuY2xvc2VQYXRoKCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoZGF0YS50eXBlID09PSBDT05TVC5TSEFQRVMuQ0lSQylcbiAgICAgICAge1xuICAgICAgICAgICAgLy8gVE9ETyAtIG5lZWQgdG8gYmUgVW5kZWZpbmVkIVxuICAgICAgICAgICAgY29udGV4dC5hcmMoc2hhcGUueCwgc2hhcGUueSwgc2hhcGUucmFkaXVzLCAwLCAyICogTWF0aC5QSSk7XG4gICAgICAgICAgICBjb250ZXh0LmNsb3NlUGF0aCgpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGRhdGEudHlwZSA9PT0gQ09OU1QuU0hBUEVTLkVMSVApXG4gICAgICAgIHtcblxuICAgICAgICAgICAgLy8gZWxsaXBzZSBjb2RlIHRha2VuIGZyb206IGh0dHA6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvMjE3Mjc5OC9ob3ctdG8tZHJhdy1hbi1vdmFsLWluLWh0bWw1LWNhbnZhc1xuXG4gICAgICAgICAgICB2YXIgdyA9IHNoYXBlLndpZHRoICogMjtcbiAgICAgICAgICAgIHZhciBoID0gc2hhcGUuaGVpZ2h0ICogMjtcblxuICAgICAgICAgICAgdmFyIHggPSBzaGFwZS54IC0gdy8yO1xuICAgICAgICAgICAgdmFyIHkgPSBzaGFwZS55IC0gaC8yO1xuXG4gICAgICAgICAgICB2YXIga2FwcGEgPSAwLjU1MjI4NDgsXG4gICAgICAgICAgICAgICAgb3ggPSAodyAvIDIpICoga2FwcGEsIC8vIGNvbnRyb2wgcG9pbnQgb2Zmc2V0IGhvcml6b250YWxcbiAgICAgICAgICAgICAgICBveSA9IChoIC8gMikgKiBrYXBwYSwgLy8gY29udHJvbCBwb2ludCBvZmZzZXQgdmVydGljYWxcbiAgICAgICAgICAgICAgICB4ZSA9IHggKyB3LCAgICAgICAgICAgLy8geC1lbmRcbiAgICAgICAgICAgICAgICB5ZSA9IHkgKyBoLCAgICAgICAgICAgLy8geS1lbmRcbiAgICAgICAgICAgICAgICB4bSA9IHggKyB3IC8gMiwgICAgICAgLy8geC1taWRkbGVcbiAgICAgICAgICAgICAgICB5bSA9IHkgKyBoIC8gMjsgICAgICAgLy8geS1taWRkbGVcblxuICAgICAgICAgICAgY29udGV4dC5tb3ZlVG8oeCwgeW0pO1xuICAgICAgICAgICAgY29udGV4dC5iZXppZXJDdXJ2ZVRvKHgsIHltIC0gb3ksIHhtIC0gb3gsIHksIHhtLCB5KTtcbiAgICAgICAgICAgIGNvbnRleHQuYmV6aWVyQ3VydmVUbyh4bSArIG94LCB5LCB4ZSwgeW0gLSBveSwgeGUsIHltKTtcbiAgICAgICAgICAgIGNvbnRleHQuYmV6aWVyQ3VydmVUbyh4ZSwgeW0gKyBveSwgeG0gKyBveCwgeWUsIHhtLCB5ZSk7XG4gICAgICAgICAgICBjb250ZXh0LmJlemllckN1cnZlVG8oeG0gLSBveCwgeWUsIHgsIHltICsgb3ksIHgsIHltKTtcbiAgICAgICAgICAgIGNvbnRleHQuY2xvc2VQYXRoKCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoZGF0YS50eXBlID09PSBDT05TVC5TSEFQRVMuUlJFQylcbiAgICAgICAge1xuXG4gICAgICAgICAgICB2YXIgcnggPSBzaGFwZS54O1xuICAgICAgICAgICAgdmFyIHJ5ID0gc2hhcGUueTtcbiAgICAgICAgICAgIHZhciB3aWR0aCA9IHNoYXBlLndpZHRoO1xuICAgICAgICAgICAgdmFyIGhlaWdodCA9IHNoYXBlLmhlaWdodDtcbiAgICAgICAgICAgIHZhciByYWRpdXMgPSBzaGFwZS5yYWRpdXM7XG5cbiAgICAgICAgICAgIHZhciBtYXhSYWRpdXMgPSBNYXRoLm1pbih3aWR0aCwgaGVpZ2h0KSAvIDIgfCAwO1xuICAgICAgICAgICAgcmFkaXVzID0gcmFkaXVzID4gbWF4UmFkaXVzID8gbWF4UmFkaXVzIDogcmFkaXVzO1xuXG4gICAgICAgICAgICBjb250ZXh0Lm1vdmVUbyhyeCwgcnkgKyByYWRpdXMpO1xuICAgICAgICAgICAgY29udGV4dC5saW5lVG8ocngsIHJ5ICsgaGVpZ2h0IC0gcmFkaXVzKTtcbiAgICAgICAgICAgIGNvbnRleHQucXVhZHJhdGljQ3VydmVUbyhyeCwgcnkgKyBoZWlnaHQsIHJ4ICsgcmFkaXVzLCByeSArIGhlaWdodCk7XG4gICAgICAgICAgICBjb250ZXh0LmxpbmVUbyhyeCArIHdpZHRoIC0gcmFkaXVzLCByeSArIGhlaWdodCk7XG4gICAgICAgICAgICBjb250ZXh0LnF1YWRyYXRpY0N1cnZlVG8ocnggKyB3aWR0aCwgcnkgKyBoZWlnaHQsIHJ4ICsgd2lkdGgsIHJ5ICsgaGVpZ2h0IC0gcmFkaXVzKTtcbiAgICAgICAgICAgIGNvbnRleHQubGluZVRvKHJ4ICsgd2lkdGgsIHJ5ICsgcmFkaXVzKTtcbiAgICAgICAgICAgIGNvbnRleHQucXVhZHJhdGljQ3VydmVUbyhyeCArIHdpZHRoLCByeSwgcnggKyB3aWR0aCAtIHJhZGl1cywgcnkpO1xuICAgICAgICAgICAgY29udGV4dC5saW5lVG8ocnggKyByYWRpdXMsIHJ5KTtcbiAgICAgICAgICAgIGNvbnRleHQucXVhZHJhdGljQ3VydmVUbyhyeCwgcnksIHJ4LCByeSArIHJhZGl1cyk7XG4gICAgICAgICAgICBjb250ZXh0LmNsb3NlUGF0aCgpO1xuICAgICAgICB9XG4gICAgfVxufTtcblxuLypcbiAqIFVwZGF0ZXMgdGhlIHRpbnQgb2YgYSBncmFwaGljcyBvYmplY3RcbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIGdyYXBoaWNzIHtQSVhJLkdyYXBoaWNzfSB0aGUgZ3JhcGhpY3MgdGhhdCB3aWxsIGhhdmUgaXRzIHRpbnQgdXBkYXRlZFxuICpcbiAqL1xuQ2FudmFzR3JhcGhpY3MudXBkYXRlR3JhcGhpY3NUaW50ID0gZnVuY3Rpb24gKGdyYXBoaWNzKVxue1xuICAgIGlmIChncmFwaGljcy50aW50ID09PSAweEZGRkZGRiAmJiBncmFwaGljcy5fcHJldlRpbnQgPT09IGdyYXBoaWNzLnRpbnQpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIGdyYXBoaWNzLl9wcmV2VGludCA9IGdyYXBoaWNzLnRpbnQ7XG5cbiAgICB2YXIgdGludFIgPSAoZ3JhcGhpY3MudGludCA+PiAxNiAmIDB4RkYpIC8gMjU1O1xuICAgIHZhciB0aW50RyA9IChncmFwaGljcy50aW50ID4+IDggJiAweEZGKSAvIDI1NTtcbiAgICB2YXIgdGludEIgPSAoZ3JhcGhpY3MudGludCAmIDB4RkYpLyAyNTU7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGdyYXBoaWNzLmdyYXBoaWNzRGF0YS5sZW5ndGg7IGkrKylcbiAgICB7XG4gICAgICAgIHZhciBkYXRhID0gZ3JhcGhpY3MuZ3JhcGhpY3NEYXRhW2ldO1xuXG4gICAgICAgIHZhciBmaWxsQ29sb3IgPSBkYXRhLmZpbGxDb2xvciB8IDA7XG4gICAgICAgIHZhciBsaW5lQ29sb3IgPSBkYXRhLmxpbmVDb2xvciB8IDA7XG5cbiAgICAgICAgLypcbiAgICAgICAgdmFyIGNvbG9yUiA9IChmaWxsQ29sb3IgPj4gMTYgJiAweEZGKSAvIDI1NTtcbiAgICAgICAgdmFyIGNvbG9yRyA9IChmaWxsQ29sb3IgPj4gOCAmIDB4RkYpIC8gMjU1O1xuICAgICAgICB2YXIgY29sb3JCID0gKGZpbGxDb2xvciAmIDB4RkYpIC8gMjU1O1xuXG4gICAgICAgIGNvbG9yUiAqPSB0aW50UjtcbiAgICAgICAgY29sb3JHICo9IHRpbnRHO1xuICAgICAgICBjb2xvckIgKj0gdGludEI7XG5cbiAgICAgICAgZmlsbENvbG9yID0gKChjb2xvclIqMjU1IDw8IDE2KSArIChjb2xvckcqMjU1IDw8IDgpICsgY29sb3JCKjI1NSk7XG5cbiAgICAgICAgY29sb3JSID0gKGxpbmVDb2xvciA+PiAxNiAmIDB4RkYpIC8gMjU1O1xuICAgICAgICBjb2xvckcgPSAobGluZUNvbG9yID4+IDggJiAweEZGKSAvIDI1NTtcbiAgICAgICAgY29sb3JCID0gKGxpbmVDb2xvciAmIDB4RkYpIC8gMjU1O1xuXG4gICAgICAgIGNvbG9yUiAqPSB0aW50UjtcbiAgICAgICAgY29sb3JHICo9IHRpbnRHO1xuICAgICAgICBjb2xvckIgKj0gdGludEI7XG5cbiAgICAgICAgbGluZUNvbG9yID0gKChjb2xvclIqMjU1IDw8IDE2KSArIChjb2xvckcqMjU1IDw8IDgpICsgY29sb3JCKjI1NSk7XG4gICAgICAgICovXG5cbiAgICAgICAgLy8gc3VwZXIgaW5saW5lIGNvcyBpbSBhbiBvcHRpbWl6YXRpb24gTkFaSSA6KVxuICAgICAgICBkYXRhLl9maWxsVGludCA9ICgoKGZpbGxDb2xvciA+PiAxNiAmIDB4RkYpIC8gMjU1ICogdGludFIqMjU1IDw8IDE2KSArICgoZmlsbENvbG9yID4+IDggJiAweEZGKSAvIDI1NSAqIHRpbnRHKjI1NSA8PCA4KSArICAoZmlsbENvbG9yICYgMHhGRikgLyAyNTUgKiB0aW50QioyNTUpO1xuICAgICAgICBkYXRhLl9saW5lVGludCA9ICgoKGxpbmVDb2xvciA+PiAxNiAmIDB4RkYpIC8gMjU1ICogdGludFIqMjU1IDw8IDE2KSArICgobGluZUNvbG9yID4+IDggJiAweEZGKSAvIDI1NSAqIHRpbnRHKjI1NSA8PCA4KSArICAobGluZUNvbG9yICYgMHhGRikgLyAyNTUgKiB0aW50QioyNTUpO1xuXG4gICAgfVxufTtcblxuIiwidmFyIENhbnZhc0dyYXBoaWNzID0gcmVxdWlyZSgnLi9DYW52YXNHcmFwaGljcycpO1xuXG4vKipcbiAqIEEgc2V0IG9mIGZ1bmN0aW9ucyB1c2VkIHRvIGhhbmRsZSBtYXNraW5nLlxuICpcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqL1xuZnVuY3Rpb24gQ2FudmFzTWFza01hbmFnZXIoKVxue31cblxuQ2FudmFzTWFza01hbmFnZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gQ2FudmFzTWFza01hbmFnZXI7XG5tb2R1bGUuZXhwb3J0cyA9IENhbnZhc01hc2tNYW5hZ2VyO1xuXG4vKipcbiAqIFRoaXMgbWV0aG9kIGFkZHMgaXQgdG8gdGhlIGN1cnJlbnQgc3RhY2sgb2YgbWFza3MuXG4gKlxuICogQHBhcmFtIG1hc2tEYXRhIHtvYmplY3R9IHRoZSBtYXNrRGF0YSB0aGF0IHdpbGwgYmUgcHVzaGVkXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcnxQSVhJLkNhbnZhc1JlbmRlcmVyfSBUaGUgcmVuZGVyZXIgY29udGV4dCB0byB1c2UuXG4gKi9cbkNhbnZhc01hc2tNYW5hZ2VyLnByb3RvdHlwZS5wdXNoTWFzayA9IGZ1bmN0aW9uIChtYXNrRGF0YSwgcmVuZGVyZXIpXG57XG5cbiAgICByZW5kZXJlci5jb250ZXh0LnNhdmUoKTtcblxuICAgIHZhciBjYWNoZUFscGhhID0gbWFza0RhdGEuYWxwaGE7XG4gICAgdmFyIHRyYW5zZm9ybSA9IG1hc2tEYXRhLndvcmxkVHJhbnNmb3JtO1xuICAgIHZhciByZXNvbHV0aW9uID0gcmVuZGVyZXIucmVzb2x1dGlvbjtcblxuICAgIHJlbmRlcmVyLmNvbnRleHQuc2V0VHJhbnNmb3JtKFxuICAgICAgICB0cmFuc2Zvcm0uYSAqIHJlc29sdXRpb24sXG4gICAgICAgIHRyYW5zZm9ybS5iICogcmVzb2x1dGlvbixcbiAgICAgICAgdHJhbnNmb3JtLmMgKiByZXNvbHV0aW9uLFxuICAgICAgICB0cmFuc2Zvcm0uZCAqIHJlc29sdXRpb24sXG4gICAgICAgIHRyYW5zZm9ybS50eCAqIHJlc29sdXRpb24sXG4gICAgICAgIHRyYW5zZm9ybS50eSAqIHJlc29sdXRpb25cbiAgICApO1xuXG4gICAgLy9UT0RPIHN1cG9ydCBzcHJpdGUgYWxwaGEgbWFza3M/P1xuICAgIC8vbG90cyBvZiBlZmZvcnQgcmVxdWlyZWQuIElmIGRlbWFuZCBpcyBncmVhdCBlbm91Z2guLlxuICAgIGlmKCFtYXNrRGF0YS50ZXh0dXJlKVxuICAgIHtcbiAgICAgICAgQ2FudmFzR3JhcGhpY3MucmVuZGVyR3JhcGhpY3NNYXNrKG1hc2tEYXRhLCByZW5kZXJlci5jb250ZXh0KTtcbiAgICAgICAgcmVuZGVyZXIuY29udGV4dC5jbGlwKCk7XG4gICAgfVxuXG4gICAgbWFza0RhdGEud29ybGRBbHBoYSA9IGNhY2hlQWxwaGE7XG59O1xuXG4vKipcbiAqIFJlc3RvcmVzIHRoZSBjdXJyZW50IGRyYXdpbmcgY29udGV4dCB0byB0aGUgc3RhdGUgaXQgd2FzIGJlZm9yZSB0aGUgbWFzayB3YXMgYXBwbGllZC5cbiAqXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcnxQSVhJLkNhbnZhc1JlbmRlcmVyfSBUaGUgcmVuZGVyZXIgY29udGV4dCB0byB1c2UuXG4gKi9cbkNhbnZhc01hc2tNYW5hZ2VyLnByb3RvdHlwZS5wb3BNYXNrID0gZnVuY3Rpb24gKHJlbmRlcmVyKVxue1xuICAgIHJlbmRlcmVyLmNvbnRleHQucmVzdG9yZSgpO1xufTtcblxuQ2FudmFzTWFza01hbmFnZXIucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoKSB7fTtcbiIsInZhciB1dGlscyA9IHJlcXVpcmUoJy4uLy4uLy4uL3V0aWxzJyk7XG5cbi8qKlxuICogVXRpbGl0eSBtZXRob2RzIGZvciBTcHJpdGUvVGV4dHVyZSB0aW50aW5nLlxuICogQHN0YXRpY1xuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICovXG52YXIgQ2FudmFzVGludGVyID0ge307XG5tb2R1bGUuZXhwb3J0cyA9IENhbnZhc1RpbnRlcjtcblxuLyoqXG4gKiBCYXNpY2FsbHkgdGhpcyBtZXRob2QganVzdCBuZWVkcyBhIHNwcml0ZSBhbmQgYSBjb2xvciBhbmQgdGludHMgdGhlIHNwcml0ZSB3aXRoIHRoZSBnaXZlbiBjb2xvci5cbiAqXG4gKiBAcGFyYW0gc3ByaXRlIHtQSVhJLlNwcml0ZX0gdGhlIHNwcml0ZSB0byB0aW50XG4gKiBAcGFyYW0gY29sb3Ige251bWJlcn0gdGhlIGNvbG9yIHRvIHVzZSB0byB0aW50IHRoZSBzcHJpdGUgd2l0aFxuICogQHJldHVybiB7SFRNTENhbnZhc0VsZW1lbnR9IFRoZSB0aW50ZWQgY2FudmFzXG4gKi9cbkNhbnZhc1RpbnRlci5nZXRUaW50ZWRUZXh0dXJlID0gZnVuY3Rpb24gKHNwcml0ZSwgY29sb3IpXG57XG4gICAgdmFyIHRleHR1cmUgPSBzcHJpdGUudGV4dHVyZTtcblxuICAgIGNvbG9yID0gQ2FudmFzVGludGVyLnJvdW5kQ29sb3IoY29sb3IpO1xuXG4gICAgdmFyIHN0cmluZ0NvbG9yID0gJyMnICsgKCcwMDAwMCcgKyAoIGNvbG9yIHwgMCkudG9TdHJpbmcoMTYpKS5zdWJzdHIoLTYpO1xuXG4gICAgdGV4dHVyZS50aW50Q2FjaGUgPSB0ZXh0dXJlLnRpbnRDYWNoZSB8fCB7fTtcblxuICAgIGlmICh0ZXh0dXJlLnRpbnRDYWNoZVtzdHJpbmdDb2xvcl0pXG4gICAge1xuICAgICAgICByZXR1cm4gdGV4dHVyZS50aW50Q2FjaGVbc3RyaW5nQ29sb3JdO1xuICAgIH1cblxuICAgICAvLyBjbG9uZSB0ZXh0dXJlLi5cbiAgICB2YXIgY2FudmFzID0gQ2FudmFzVGludGVyLmNhbnZhcyB8fCBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdjYW52YXMnKTtcblxuICAgIC8vQ2FudmFzVGludGVyLnRpbnRXaXRoUGVyUGl4ZWwodGV4dHVyZSwgc3RyaW5nQ29sb3IsIGNhbnZhcyk7XG4gICAgQ2FudmFzVGludGVyLnRpbnRNZXRob2QodGV4dHVyZSwgY29sb3IsIGNhbnZhcyk7XG5cbiAgICBpZiAoQ2FudmFzVGludGVyLmNvbnZlcnRUaW50VG9JbWFnZSlcbiAgICB7XG4gICAgICAgIC8vIGlzIHRoaXMgYmV0dGVyP1xuICAgICAgICB2YXIgdGludEltYWdlID0gbmV3IEltYWdlKCk7XG4gICAgICAgIHRpbnRJbWFnZS5zcmMgPSBjYW52YXMudG9EYXRhVVJMKCk7XG5cbiAgICAgICAgdGV4dHVyZS50aW50Q2FjaGVbc3RyaW5nQ29sb3JdID0gdGludEltYWdlO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICB0ZXh0dXJlLnRpbnRDYWNoZVtzdHJpbmdDb2xvcl0gPSBjYW52YXM7XG4gICAgICAgIC8vIGlmIHdlIGFyZSBub3QgY29udmVydGluZyB0aGUgdGV4dHVyZSB0byBhbiBpbWFnZSB0aGVuIHdlIG5lZWQgdG8gbG9zZSB0aGUgcmVmZXJlbmNlIHRvIHRoZSBjYW52YXNcbiAgICAgICAgQ2FudmFzVGludGVyLmNhbnZhcyA9IG51bGw7XG4gICAgfVxuXG4gICAgcmV0dXJuIGNhbnZhcztcbn07XG5cbi8qKlxuICogVGludCBhIHRleHR1cmUgdXNpbmcgdGhlICdtdWx0aXBseScgb3BlcmF0aW9uLlxuICpcbiAqIEBwYXJhbSB0ZXh0dXJlIHtQSVhJLlRleHR1cmV9IHRoZSB0ZXh0dXJlIHRvIHRpbnRcbiAqIEBwYXJhbSBjb2xvciB7bnVtYmVyfSB0aGUgY29sb3IgdG8gdXNlIHRvIHRpbnQgdGhlIHNwcml0ZSB3aXRoXG4gKiBAcGFyYW0gY2FudmFzIHtIVE1MQ2FudmFzRWxlbWVudH0gdGhlIGN1cnJlbnQgY2FudmFzXG4gKi9cbkNhbnZhc1RpbnRlci50aW50V2l0aE11bHRpcGx5ID0gZnVuY3Rpb24gKHRleHR1cmUsIGNvbG9yLCBjYW52YXMpXG57XG4gICAgdmFyIGNvbnRleHQgPSBjYW52YXMuZ2V0Q29udGV4dCggJzJkJyApO1xuXG4gICAgdmFyIHJlc29sdXRpb24gPSB0ZXh0dXJlLmJhc2VUZXh0dXJlLnJlc29sdXRpb247XG5cbiAgICB2YXIgY3JvcCA9IHRleHR1cmUuY3JvcC5jbG9uZSgpO1xuICAgIGNyb3AueCAqPSByZXNvbHV0aW9uO1xuICAgIGNyb3AueSAqPSByZXNvbHV0aW9uO1xuICAgIGNyb3Aud2lkdGggKj0gcmVzb2x1dGlvbjtcbiAgICBjcm9wLmhlaWdodCAqPSByZXNvbHV0aW9uO1xuXG4gICAgY2FudmFzLndpZHRoID0gY3JvcC53aWR0aDtcbiAgICBjYW52YXMuaGVpZ2h0ID0gY3JvcC5oZWlnaHQ7XG5cbiAgICBjb250ZXh0LmZpbGxTdHlsZSA9ICcjJyArICgnMDAwMDAnICsgKCBjb2xvciB8IDApLnRvU3RyaW5nKDE2KSkuc3Vic3RyKC02KTtcblxuICAgIGNvbnRleHQuZmlsbFJlY3QoMCwgMCwgY3JvcC53aWR0aCwgY3JvcC5oZWlnaHQpO1xuXG4gICAgY29udGV4dC5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb24gPSAnbXVsdGlwbHknO1xuXG4gICAgY29udGV4dC5kcmF3SW1hZ2UoXG4gICAgICAgIHRleHR1cmUuYmFzZVRleHR1cmUuc291cmNlLFxuICAgICAgICBjcm9wLngsXG4gICAgICAgIGNyb3AueSxcbiAgICAgICAgY3JvcC53aWR0aCxcbiAgICAgICAgY3JvcC5oZWlnaHQsXG4gICAgICAgIDAsXG4gICAgICAgIDAsXG4gICAgICAgIGNyb3Aud2lkdGgsXG4gICAgICAgIGNyb3AuaGVpZ2h0XG4gICAgKTtcblxuICAgIGNvbnRleHQuZ2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uID0gJ2Rlc3RpbmF0aW9uLWF0b3AnO1xuXG4gICAgY29udGV4dC5kcmF3SW1hZ2UoXG4gICAgICAgIHRleHR1cmUuYmFzZVRleHR1cmUuc291cmNlLFxuICAgICAgICBjcm9wLngsXG4gICAgICAgIGNyb3AueSxcbiAgICAgICAgY3JvcC53aWR0aCxcbiAgICAgICAgY3JvcC5oZWlnaHQsXG4gICAgICAgIDAsXG4gICAgICAgIDAsXG4gICAgICAgIGNyb3Aud2lkdGgsXG4gICAgICAgIGNyb3AuaGVpZ2h0XG4gICAgKTtcbn07XG5cbi8qKlxuICogVGludCBhIHRleHR1cmUgdXNpbmcgdGhlICdvdmVybGF5JyBvcGVyYXRpb24uXG4gKlxuICogQHBhcmFtIHRleHR1cmUge1BJWEkuVGV4dHVyZX0gdGhlIHRleHR1cmUgdG8gdGludFxuICogQHBhcmFtIGNvbG9yIHtudW1iZXJ9IHRoZSBjb2xvciB0byB1c2UgdG8gdGludCB0aGUgc3ByaXRlIHdpdGhcbiAqIEBwYXJhbSBjYW52YXMge0hUTUxDYW52YXNFbGVtZW50fSB0aGUgY3VycmVudCBjYW52YXNcbiAqL1xuQ2FudmFzVGludGVyLnRpbnRXaXRoT3ZlcmxheSA9IGZ1bmN0aW9uICh0ZXh0dXJlLCBjb2xvciwgY2FudmFzKVxue1xuICAgIHZhciBjb250ZXh0ID0gY2FudmFzLmdldENvbnRleHQoICcyZCcgKTtcblxuICAgIHZhciByZXNvbHV0aW9uID0gdGV4dHVyZS5iYXNlVGV4dHVyZS5yZXNvbHV0aW9uO1xuXG4gICAgdmFyIGNyb3AgPSB0ZXh0dXJlLmNyb3AuY2xvbmUoKTtcbiAgICBjcm9wLnggKj0gcmVzb2x1dGlvbjtcbiAgICBjcm9wLnkgKj0gcmVzb2x1dGlvbjtcbiAgICBjcm9wLndpZHRoICo9IHJlc29sdXRpb247XG4gICAgY3JvcC5oZWlnaHQgKj0gcmVzb2x1dGlvbjtcblxuICAgIGNhbnZhcy53aWR0aCA9IGNyb3Aud2lkdGg7XG4gICAgY2FudmFzLmhlaWdodCA9IGNyb3AuaGVpZ2h0O1xuXG4gICAgY29udGV4dC5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb24gPSAnY29weSc7XG4gICAgY29udGV4dC5maWxsU3R5bGUgPSAnIycgKyAoJzAwMDAwJyArICggY29sb3IgfCAwKS50b1N0cmluZygxNikpLnN1YnN0cigtNik7XG4gICAgY29udGV4dC5maWxsUmVjdCgwLCAwLCBjcm9wLndpZHRoLCBjcm9wLmhlaWdodCk7XG5cbiAgICBjb250ZXh0Lmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbiA9ICdkZXN0aW5hdGlvbi1hdG9wJztcbiAgICBjb250ZXh0LmRyYXdJbWFnZShcbiAgICAgICAgdGV4dHVyZS5iYXNlVGV4dHVyZS5zb3VyY2UsXG4gICAgICAgIGNyb3AueCxcbiAgICAgICAgY3JvcC55LFxuICAgICAgICBjcm9wLndpZHRoLFxuICAgICAgICBjcm9wLmhlaWdodCxcbiAgICAgICAgMCxcbiAgICAgICAgMCxcbiAgICAgICAgY3JvcC53aWR0aCxcbiAgICAgICAgY3JvcC5oZWlnaHRcbiAgICApO1xuXG4gICAgLy8gY29udGV4dC5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb24gPSAnY29weSc7XG59O1xuXG4vKipcbiAqIFRpbnQgYSB0ZXh0dXJlIHBpeGVsIHBlciBwaXhlbC5cbiAqXG4gKiBAcGFyYW0gdGV4dHVyZSB7UElYSS5UZXh0dXJlfSB0aGUgdGV4dHVyZSB0byB0aW50XG4gKiBAcGFyYW0gY29sb3Ige251bWJlcn0gdGhlIGNvbG9yIHRvIHVzZSB0byB0aW50IHRoZSBzcHJpdGUgd2l0aFxuICogQHBhcmFtIGNhbnZhcyB7SFRNTENhbnZhc0VsZW1lbnR9IHRoZSBjdXJyZW50IGNhbnZhc1xuICovXG5DYW52YXNUaW50ZXIudGludFdpdGhQZXJQaXhlbCA9IGZ1bmN0aW9uICh0ZXh0dXJlLCBjb2xvciwgY2FudmFzKVxue1xuICAgIHZhciBjb250ZXh0ID0gY2FudmFzLmdldENvbnRleHQoICcyZCcgKTtcblxuICAgIHZhciByZXNvbHV0aW9uID0gdGV4dHVyZS5iYXNlVGV4dHVyZS5yZXNvbHV0aW9uO1xuXG4gICAgdmFyIGNyb3AgPSB0ZXh0dXJlLmNyb3AuY2xvbmUoKTtcbiAgICBjcm9wLnggKj0gcmVzb2x1dGlvbjtcbiAgICBjcm9wLnkgKj0gcmVzb2x1dGlvbjtcbiAgICBjcm9wLndpZHRoICo9IHJlc29sdXRpb247XG4gICAgY3JvcC5oZWlnaHQgKj0gcmVzb2x1dGlvbjtcblxuICAgIGNhbnZhcy53aWR0aCA9IGNyb3Aud2lkdGg7XG4gICAgY2FudmFzLmhlaWdodCA9IGNyb3AuaGVpZ2h0O1xuXG4gICAgY29udGV4dC5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb24gPSAnY29weSc7XG4gICAgY29udGV4dC5kcmF3SW1hZ2UoXG4gICAgICAgIHRleHR1cmUuYmFzZVRleHR1cmUuc291cmNlLFxuICAgICAgICBjcm9wLngsXG4gICAgICAgIGNyb3AueSxcbiAgICAgICAgY3JvcC53aWR0aCxcbiAgICAgICAgY3JvcC5oZWlnaHQsXG4gICAgICAgIDAsXG4gICAgICAgIDAsXG4gICAgICAgIGNyb3Aud2lkdGgsXG4gICAgICAgIGNyb3AuaGVpZ2h0XG4gICAgKTtcblxuICAgIHZhciByZ2JWYWx1ZXMgPSB1dGlscy5oZXgycmdiKGNvbG9yKTtcbiAgICB2YXIgciA9IHJnYlZhbHVlc1swXSwgZyA9IHJnYlZhbHVlc1sxXSwgYiA9IHJnYlZhbHVlc1syXTtcblxuICAgIHZhciBwaXhlbERhdGEgPSBjb250ZXh0LmdldEltYWdlRGF0YSgwLCAwLCBjcm9wLndpZHRoLCBjcm9wLmhlaWdodCk7XG5cbiAgICB2YXIgcGl4ZWxzID0gcGl4ZWxEYXRhLmRhdGE7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHBpeGVscy5sZW5ndGg7IGkgKz0gNClcbiAgICB7XG4gICAgICAgIHBpeGVsc1tpKzBdICo9IHI7XG4gICAgICAgIHBpeGVsc1tpKzFdICo9IGc7XG4gICAgICAgIHBpeGVsc1tpKzJdICo9IGI7XG4gICAgfVxuXG4gICAgY29udGV4dC5wdXRJbWFnZURhdGEocGl4ZWxEYXRhLCAwLCAwKTtcbn07XG5cbi8qKlxuICogUm91bmRzIHRoZSBzcGVjaWZpZWQgY29sb3IgYWNjb3JkaW5nIHRvIHRoZSBDYW52YXNUaW50ZXIuY2FjaGVTdGVwc1BlckNvbG9yQ2hhbm5lbC5cbiAqXG4gKiBAcGFyYW0gY29sb3Ige251bWJlcn0gdGhlIGNvbG9yIHRvIHJvdW5kLCBzaG91bGQgYmUgYSBoZXggY29sb3JcbiAqL1xuQ2FudmFzVGludGVyLnJvdW5kQ29sb3IgPSBmdW5jdGlvbiAoY29sb3IpXG57XG4gICAgdmFyIHN0ZXAgPSBDYW52YXNUaW50ZXIuY2FjaGVTdGVwc1BlckNvbG9yQ2hhbm5lbDtcblxuICAgIHZhciByZ2JWYWx1ZXMgPSB1dGlscy5oZXgycmdiKGNvbG9yKTtcblxuICAgIHJnYlZhbHVlc1swXSA9IE1hdGgubWluKDI1NSwgKHJnYlZhbHVlc1swXSAvIHN0ZXApICogc3RlcCk7XG4gICAgcmdiVmFsdWVzWzFdID0gTWF0aC5taW4oMjU1LCAocmdiVmFsdWVzWzFdIC8gc3RlcCkgKiBzdGVwKTtcbiAgICByZ2JWYWx1ZXNbMl0gPSBNYXRoLm1pbigyNTUsIChyZ2JWYWx1ZXNbMl0gLyBzdGVwKSAqIHN0ZXApO1xuXG4gICAgcmV0dXJuIHV0aWxzLnJnYjJoZXgocmdiVmFsdWVzKTtcbn07XG5cbi8qKlxuICogTnVtYmVyIG9mIHN0ZXBzIHdoaWNoIHdpbGwgYmUgdXNlZCBhcyBhIGNhcCB3aGVuIHJvdW5kaW5nIGNvbG9ycy5cbiAqXG4gKiBAbWVtYmVyXG4gKi9cbkNhbnZhc1RpbnRlci5jYWNoZVN0ZXBzUGVyQ29sb3JDaGFubmVsID0gODtcblxuLyoqXG4gKiBUaW50IGNhY2hlIGJvb2xlYW4gZmxhZy5cbiAqXG4gKiBAbWVtYmVyXG4gKi9cbkNhbnZhc1RpbnRlci5jb252ZXJ0VGludFRvSW1hZ2UgPSBmYWxzZTtcblxuLyoqXG4gKiBXaGV0aGVyIG9yIG5vdCB0aGUgQ2FudmFzIEJsZW5kTW9kZXMgYXJlIHN1cHBvcnRlZCwgY29uc2VxdWVudGx5IHRoZSBhYmlsaXR5IHRvIHRpbnQgdXNpbmcgdGhlIG11bHRpcGx5IG1ldGhvZC5cbiAqXG4gKiBAbWVtYmVyXG4gKi9cbkNhbnZhc1RpbnRlci5jYW5Vc2VNdWx0aXBseSA9IHV0aWxzLmNhblVzZU5ld0NhbnZhc0JsZW5kTW9kZXMoKTtcblxuLyoqXG4gKiBUaGUgdGludGluZyBtZXRob2QgdGhhdCB3aWxsIGJlIHVzZWQuXG4gKlxuICovXG5DYW52YXNUaW50ZXIudGludE1ldGhvZCA9IENhbnZhc1RpbnRlci5jYW5Vc2VNdWx0aXBseSA/IENhbnZhc1RpbnRlci50aW50V2l0aE11bHRpcGx5IDogIENhbnZhc1RpbnRlci50aW50V2l0aFBlclBpeGVsO1xuIiwidmFyIEdMVGV4dHVyZSA9IHJlcXVpcmUoJ3BpeGktZ2wtY29yZScpLkdMVGV4dHVyZSxcblx0dXRpbHMgPSByZXF1aXJlKCcuLi8uLi91dGlscycpO1xuXG4vKipcbiAqIEhlbHBlciBjbGFzcyB0byBjcmVhdGUgYSB3ZWJHTCBUZXh0dXJlXG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIGdsIHtXZWJHTFJlbmRlcmluZ0NvbnRleHR9XG4gKi9cblxudmFyIFRleHR1cmVNYW5hZ2VyID0gZnVuY3Rpb24oZ2wpXG57XG5cdHRoaXMuZ2wgPSBnbDtcblxuXHQvLyB0cmFjayB0ZXh0dXJlcyBpbiB0aGUgcmVuZGVyZXIgc28gd2UgY2FuIG5vIGxvbmdlciBsaXN0ZW4gdG8gdGhlbSBvbiBkZXN0cnVjdGlvbi5cblx0dGhpcy5fbWFuYWdlZFRleHR1cmVzID0gW107XG4gICAgdGhpcy5nbFRleHR1cmVzID0ge307XG5cbn1cblxuVGV4dHVyZU1hbmFnZXIucHJvdG90eXBlLmJpbmRUZXh0dXJlID0gZnVuY3Rpb24odGV4dHVyZSlcbntcblxufVxuXG5cblRleHR1cmVNYW5hZ2VyLnByb3RvdHlwZS5nZXRUZXh0dXJlID0gZnVuY3Rpb24odGV4dHVyZSlcbntcblxufVxuXG4vKipcbiAqIFVwZGF0ZXMgYW5kL29yIENyZWF0ZXMgYSBXZWJHTCB0ZXh0dXJlIGZvciB0aGUgcmVuZGVyZXIncyBjb250ZXh0LlxuICpcbiAqIEBwYXJhbSB0ZXh0dXJlIHtQSVhJLkJhc2VUZXh0dXJlfFBJWEkuVGV4dHVyZX0gdGhlIHRleHR1cmUgdG8gdXBkYXRlXG4gKi9cblRleHR1cmVNYW5hZ2VyLnByb3RvdHlwZS51cGRhdGVUZXh0dXJlID0gZnVuY3Rpb24odGV4dHVyZSlcbntcblx0dGV4dHVyZSA9IHRleHR1cmUuYmFzZVRleHR1cmUgfHwgdGV4dHVyZTtcblxuXHRpZiAoIXRleHR1cmUuaGFzTG9hZGVkKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIFxuICAgIHZhciBnbCA9IHRoaXMuZ2w7XG4gICAgdmFyIGdsVGV4dHVyZSA9IHRoaXMuZ2xUZXh0dXJlc1t0ZXh0dXJlLnVpZF0vL3RleHR1cmUuX2dsVGV4dHVyZXNbZ2wuaWRdO1xuXG4gICAgaWYgKCFnbFRleHR1cmUpXG4gICAge1xuICAgICAgICBnbFRleHR1cmUgPSBuZXcgR0xUZXh0dXJlKGdsKTtcbiAgICAgICAgZ2xUZXh0dXJlLnByZW11bHRpcGx5QWxwaGEgPSB0cnVlXG4gICAgICAgIHRleHR1cmUuX2dsVGV4dHVyZXNbZ2wuaWRdID0gZ2xUZXh0dXJlO1xuXG4gICAgICAgLy8gdGhpcy5nbFRleHR1cmVzW3RleHR1cmUudWlkXSA9IGdsVGV4dHVyZTtcblxuICAgICAgICB0ZXh0dXJlLm9uKCd1cGRhdGUnLCB0aGlzLnVwZGF0ZVRleHR1cmUsIHRoaXMpO1xuICAgICAgICB0ZXh0dXJlLm9uKCdkaXNwb3NlJywgdGhpcy5kZXN0cm95VGV4dHVyZSwgdGhpcyk7XG4gICAgICAgIFxuICAgICAgICB0aGlzLl9tYW5hZ2VkVGV4dHVyZXMucHVzaCh0ZXh0dXJlKTtcbiAgICB9XG5cbiAgICBnbFRleHR1cmUudXBsb2FkKHRleHR1cmUuc291cmNlKTtcbiAgICBcbiAgICAvL1RPRE8gY2hlY2sgaXMgcG93ZXIgb2YgdHdvLi5cbiAgICBnbFRleHR1cmUuZW5hYmxlV3JhcENsYW1wKCk7XG5cblxuICAgIC8vIFRPRE8gY2hlY2sgZm9yIHNjYWxpbmcgdHlwZVxuICAgIGdsVGV4dHVyZS5lbmFibGVMaW5lYXJTY2FsaW5nKCk7XG5cbiAgICByZXR1cm4gIHRleHR1cmUuX2dsVGV4dHVyZXNbZ2wuaWRdO1xufVxuXG4vKipcbiAqIERlbGV0ZXMgdGhlIHRleHR1cmUgZnJvbSBXZWJHTFxuICpcbiAqIEBwYXJhbSB0ZXh0dXJlIHtQSVhJLkJhc2VUZXh0dXJlfFBJWEkuVGV4dHVyZX0gdGhlIHRleHR1cmUgdG8gZGVzdHJveVxuICovXG5UZXh0dXJlTWFuYWdlci5wcm90b3R5cGUuZGVzdHJveVRleHR1cmUgPSBmdW5jdGlvbih0ZXh0dXJlLCBfc2tpcFJlbW92ZSlcbntcblx0dGV4dHVyZSA9IHRleHR1cmUuYmFzZVRleHR1cmUgfHwgdGV4dHVyZTtcblxuICAgIGlmICghdGV4dHVyZS5oYXNMb2FkZWQpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHRleHR1cmUuX2dsVGV4dHVyZXNbdGhpcy5nbC5pZF0pXG4gICAge1xuICAgICAgICB0ZXh0dXJlLl9nbFRleHR1cmVzW3RoaXMuZ2wuaWRdLmRlc3Ryb3koKTtcbiAgICAgICAgdGV4dHVyZS5vZmYoJ3VwZGF0ZScsIHRoaXMudXBkYXRlVGV4dHVyZSwgdGhpcyk7XG4gICAgICAgIHRleHR1cmUub2ZmKCdkaXNwb3NlJywgdGhpcy5kZXN0cm95VGV4dHVyZSwgdGhpcyk7XG5cblxuICAgICAgICBkZWxldGUgdGV4dHVyZS5fZ2xUZXh0dXJlc1t0aGlzLmdsLmlkXTtcblxuICAgICAgICBpZiAoIV9za2lwUmVtb3ZlKVxuICAgICAgICB7XG4gICAgICAgICAgICB2YXIgaSA9IHRoaXMuX21hbmFnZWRUZXh0dXJlcy5pbmRleE9mKHRleHR1cmUpO1xuICAgICAgICAgICAgaWYgKGkgIT09IC0xKSB7XG4gICAgICAgICAgICAgICAgdXRpbHMucmVtb3ZlSXRlbXModGhpcy5fbWFuYWdlZFRleHR1cmVzLCBpLCAxKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn1cblxuVGV4dHVyZU1hbmFnZXIucHJvdG90eXBlLnJlbW92ZUFsbCA9IGZ1bmN0aW9uKClcbntcblx0Ly8gZW1wdHkgYWxsIHRoZSBvbGQgZ2wgdGV4dHVyZXMgYXMgdGhleSBhcmUgdXNlbGVzcyBub3dcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuX21hbmFnZWRUZXh0dXJlcy5sZW5ndGg7ICsraSlcbiAgICB7XG4gICAgICAgIHZhciB0ZXh0dXJlID0gdGhpcy5fbWFuYWdlZFRleHR1cmVzW2ldO1xuICAgICAgICBpZiAodGV4dHVyZS5fZ2xUZXh0dXJlc1t0aGlzLmdsLmlkXSlcbiAgICAgICAge1xuICAgICAgICAgICAgZGVsZXRlIHRleHR1cmUuX2dsVGV4dHVyZXNbdGhpcy5nbC5pZF07XG4gICAgICAgIH1cbiAgICB9XG59XG5cblRleHR1cmVNYW5hZ2VyLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24oKVxue1xuICAgIC8vIGRlc3Ryb3kgbWFuYWdlZCB0ZXh0dXJlc1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5fbWFuYWdlZFRleHR1cmVzLmxlbmd0aDsgKytpKVxuICAgIHtcbiAgICAgICAgdmFyIHRleHR1cmUgPSB0aGlzLl9tYW5hZ2VkVGV4dHVyZXNbaV07XG4gICAgICAgIHRoaXMuZGVzdHJveVRleHR1cmUodGV4dHVyZSwgdHJ1ZSk7XG4gICAgICAgIHRleHR1cmUub2ZmKCd1cGRhdGUnLCB0aGlzLnVwZGF0ZVRleHR1cmUsIHRoaXMpO1xuICAgICAgICB0ZXh0dXJlLm9mZignZGlzcG9zZScsIHRoaXMuZGVzdHJveVRleHR1cmUsIHRoaXMpO1xuICAgIH1cblxuICAgIHRoaXMuX21hbmFnZWRUZXh0dXJlcyA9IG51bGw7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gVGV4dHVyZU1hbmFnZXI7XG5cbiIsInZhciBTeXN0ZW1SZW5kZXJlciA9IHJlcXVpcmUoJy4uL1N5c3RlbVJlbmRlcmVyJyksXG4gICAgU2hhZGVyTWFuYWdlciA9IHJlcXVpcmUoJy4vbWFuYWdlcnMvU2hhZGVyTWFuYWdlcicpLFxuICAgIE1hc2tNYW5hZ2VyID0gcmVxdWlyZSgnLi9tYW5hZ2Vycy9NYXNrTWFuYWdlcicpLFxuICAgIFN0ZW5jaWxNYW5hZ2VyID0gcmVxdWlyZSgnLi9tYW5hZ2Vycy9TdGVuY2lsTWFuYWdlcicpLFxuICAgIEZpbHRlck1hbmFnZXIgPSByZXF1aXJlKCcuL21hbmFnZXJzL0ZpbHRlck1hbmFnZXInKSxcbiAgICBCbGVuZE1vZGVNYW5hZ2VyID0gcmVxdWlyZSgnLi9tYW5hZ2Vycy9CbGVuZE1vZGVNYW5hZ2VyJyksXG4gICAgUmVuZGVyVGFyZ2V0ID0gcmVxdWlyZSgnLi91dGlscy9SZW5kZXJUYXJnZXQnKSxcbiAgICBPYmplY3RSZW5kZXJlciA9IHJlcXVpcmUoJy4vdXRpbHMvT2JqZWN0UmVuZGVyZXInKSxcbiAgICBGWEFBRmlsdGVyID0gcmVxdWlyZSgnLi9maWx0ZXJzL0ZYQUFGaWx0ZXInKSxcbiAgICBUZXh0dXJlTWFuYWdlciA9IHJlcXVpcmUoJy4vVGV4dHVyZU1hbmFnZXInKSxcbiAgICBjcmVhdGVDb250ZXh0ID0gcmVxdWlyZSgncGl4aS1nbC1jb3JlJykuY3JlYXRlQ29udGV4dCxcbiAgICBtYXBXZWJHTEJsZW5kTW9kZXNUb1BpeGkgPSByZXF1aXJlKCcuL3V0aWxzL21hcFdlYkdMQmxlbmRNb2Rlc1RvUGl4aScpLFxuICAgIG1hcFdlYkdMRHJhd01vZGVzVG9QaXhpID0gcmVxdWlyZSgnLi91dGlscy9tYXBXZWJHTERyYXdNb2Rlc1RvUGl4aScpLFxuICAgIHV0aWxzID0gcmVxdWlyZSgnLi4vLi4vdXRpbHMnKSxcbiAgICBDT05TVCA9IHJlcXVpcmUoJy4uLy4uL2NvbnN0Jyk7XG5cbi8qKlxuICogVGhlIFdlYkdMUmVuZGVyZXIgZHJhd3MgdGhlIHNjZW5lIGFuZCBhbGwgaXRzIGNvbnRlbnQgb250byBhIHdlYkdMIGVuYWJsZWQgY2FudmFzLiBUaGlzIHJlbmRlcmVyXG4gKiBzaG91bGQgYmUgdXNlZCBmb3IgYnJvd3NlcnMgdGhhdCBzdXBwb3J0IHdlYkdMLiBUaGlzIFJlbmRlciB3b3JrcyBieSBhdXRvbWF0aWNhbGx5IG1hbmFnaW5nIHdlYkdMQmF0Y2hzLlxuICogU28gbm8gbmVlZCBmb3IgU3ByaXRlIEJhdGNoZXMgb3IgU3ByaXRlIENsb3Vkcy5cbiAqIERvbid0IGZvcmdldCB0byBhZGQgdGhlIHZpZXcgdG8geW91ciBET00gb3IgeW91IHdpbGwgbm90IHNlZSBhbnl0aGluZyA6KVxuICpcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqIEBleHRlbmRzIFBJWEkuU3lzdGVtUmVuZGVyZXJcbiAqIEBwYXJhbSBbd2lkdGg9MF0ge251bWJlcn0gdGhlIHdpZHRoIG9mIHRoZSBjYW52YXMgdmlld1xuICogQHBhcmFtIFtoZWlnaHQ9MF0ge251bWJlcn0gdGhlIGhlaWdodCBvZiB0aGUgY2FudmFzIHZpZXdcbiAqIEBwYXJhbSBbb3B0aW9uc10ge29iamVjdH0gVGhlIG9wdGlvbmFsIHJlbmRlcmVyIHBhcmFtZXRlcnNcbiAqIEBwYXJhbSBbb3B0aW9ucy52aWV3XSB7SFRNTENhbnZhc0VsZW1lbnR9IHRoZSBjYW52YXMgdG8gdXNlIGFzIGEgdmlldywgb3B0aW9uYWxcbiAqIEBwYXJhbSBbb3B0aW9ucy50cmFuc3BhcmVudD1mYWxzZV0ge2Jvb2xlYW59IElmIHRoZSByZW5kZXIgdmlldyBpcyB0cmFuc3BhcmVudCwgZGVmYXVsdCBmYWxzZVxuICogQHBhcmFtIFtvcHRpb25zLmF1dG9SZXNpemU9ZmFsc2VdIHtib29sZWFufSBJZiB0aGUgcmVuZGVyIHZpZXcgaXMgYXV0b21hdGljYWxseSByZXNpemVkLCBkZWZhdWx0IGZhbHNlXG4gKiBAcGFyYW0gW29wdGlvbnMuYW50aWFsaWFzPWZhbHNlXSB7Ym9vbGVhbn0gc2V0cyBhbnRpYWxpYXMuIElmIG5vdCBhdmFpbGFibGUgbmF0aXZlbHkgdGhlbiBGWEFBIGFudGlhbGlhc2luZyBpcyB1c2VkXG4gKiBAcGFyYW0gW29wdGlvbnMuZm9yY2VGWEFBPWZhbHNlXSB7Ym9vbGVhbn0gZm9yY2VzIEZYQUEgYW50aWFsaWFzaW5nIHRvIGJlIHVzZWQgb3ZlciBuYXRpdmUuIEZYQUEgaXMgZmFzdGVyLCBidXQgbWF5IG5vdCBhbHdheXMgbG9vayBhcyBncmVhdFxuICogQHBhcmFtIFtvcHRpb25zLnJlc29sdXRpb249MV0ge251bWJlcn0gdGhlIHJlc29sdXRpb24gb2YgdGhlIHJlbmRlcmVyIHJldGluYSB3b3VsZCBiZSAyXG4gKiBAcGFyYW0gW29wdGlvbnMuY2xlYXJCZWZvcmVSZW5kZXI9dHJ1ZV0ge2Jvb2xlYW59IFRoaXMgc2V0cyBpZiB0aGUgQ2FudmFzUmVuZGVyZXIgd2lsbCBjbGVhciB0aGUgY2FudmFzIG9yXG4gKiAgICAgIG5vdCBiZWZvcmUgdGhlIG5ldyByZW5kZXIgcGFzcy4gSWYgeW91IHdpc2ggdG8gc2V0IHRoaXMgdG8gZmFsc2UsIHlvdSAqbXVzdCogc2V0IHByZXNlcnZlRHJhd2luZ0J1ZmZlciB0byBgdHJ1ZWAuXG4gKiBAcGFyYW0gW29wdGlvbnMucHJlc2VydmVEcmF3aW5nQnVmZmVyPWZhbHNlXSB7Ym9vbGVhbn0gZW5hYmxlcyBkcmF3aW5nIGJ1ZmZlciBwcmVzZXJ2YXRpb24sIGVuYWJsZSB0aGlzIGlmXG4gKiAgICAgIHlvdSBuZWVkIHRvIGNhbGwgdG9EYXRhVXJsIG9uIHRoZSB3ZWJnbCBjb250ZXh0LlxuICogQHBhcmFtIFtvcHRpb25zLnJvdW5kUGl4ZWxzPWZhbHNlXSB7Ym9vbGVhbn0gSWYgdHJ1ZSBQaXhpIHdpbGwgTWF0aC5mbG9vcigpIHgveSB2YWx1ZXMgd2hlbiByZW5kZXJpbmcsIHN0b3BwaW5nIHBpeGVsIGludGVycG9sYXRpb24uXG4gKi9cbmZ1bmN0aW9uIFdlYkdMUmVuZGVyZXIod2lkdGgsIGhlaWdodCwgb3B0aW9ucylcbntcbiAgICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcblxuICAgIFN5c3RlbVJlbmRlcmVyLmNhbGwodGhpcywgJ1dlYkdMJywgd2lkdGgsIGhlaWdodCwgb3B0aW9ucyk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgdHlwZSBvZiB0aGlzIHJlbmRlcmVyIGFzIGEgc3RhbmRhcmRpc2VkIGNvbnN0XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9Ly9cbiAgICAgKlxuICAgICAqL1xuICAgIHRoaXMudHlwZSA9IENPTlNULlJFTkRFUkVSX1RZUEUuV0VCR0w7XG5cbiAgICB0aGlzLmhhbmRsZUNvbnRleHRMb3N0ID0gdGhpcy5oYW5kbGVDb250ZXh0TG9zdC5iaW5kKHRoaXMpO1xuICAgIHRoaXMuaGFuZGxlQ29udGV4dFJlc3RvcmVkID0gdGhpcy5oYW5kbGVDb250ZXh0UmVzdG9yZWQuYmluZCh0aGlzKTtcblxuICAgIHRoaXMudmlldy5hZGRFdmVudExpc3RlbmVyKCd3ZWJnbGNvbnRleHRsb3N0JywgdGhpcy5oYW5kbGVDb250ZXh0TG9zdCwgZmFsc2UpO1xuICAgIHRoaXMudmlldy5hZGRFdmVudExpc3RlbmVyKCd3ZWJnbGNvbnRleHRyZXN0b3JlZCcsIHRoaXMuaGFuZGxlQ29udGV4dFJlc3RvcmVkLCBmYWxzZSk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgb3B0aW9ucyBwYXNzZWQgaW4gdG8gY3JlYXRlIGEgbmV3IHdlYmdsIGNvbnRleHQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtvYmplY3R9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9jb250ZXh0T3B0aW9ucyA9IHtcbiAgICAgICAgYWxwaGE6IHRoaXMudHJhbnNwYXJlbnQsXG4gICAgICAgIGFudGlhbGlhczogb3B0aW9ucy5hbnRpYWxpYXMsXG4gICAgICAgIHByZW11bHRpcGxpZWRBbHBoYTogdGhpcy50cmFuc3BhcmVudCAmJiB0aGlzLnRyYW5zcGFyZW50ICE9PSAnbm90TXVsdGlwbGllZCcsXG4gICAgICAgIHN0ZW5jaWw6IHRydWUsXG4gICAgICAgIHByZXNlcnZlRHJhd2luZ0J1ZmZlcjogb3B0aW9ucy5wcmVzZXJ2ZURyYXdpbmdCdWZmZXJcbiAgICB9O1xuXG4gICAgdGhpcy5fYmFja2dyb3VuZENvbG9yUmdiYVszXSA9IHRoaXMudHJhbnNwYXJlbnQgPyAwIDogMTtcblxuICAgIC8qKlxuICAgICAqIERlYWxzIHdpdGggbWFuYWdpbmcgdGhlIHNoYWRlciBwcm9ncmFtcyBhbmQgdGhlaXIgYXR0cmlicy5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuU2hhZGVyTWFuYWdlcn1cbiAgICAgKi9cbiAgICB0aGlzLnNoYWRlck1hbmFnZXIgPSBuZXcgU2hhZGVyTWFuYWdlcih0aGlzKTtcblxuICAgIC8qKlxuICAgICAqIE1hbmFnZXMgdGhlIG1hc2tzIHVzaW5nIHRoZSBzdGVuY2lsIGJ1ZmZlci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuTWFza01hbmFnZXJ9XG4gICAgICovXG4gICAgdGhpcy5tYXNrTWFuYWdlciA9IG5ldyBNYXNrTWFuYWdlcih0aGlzKTtcblxuICAgIC8qKlxuICAgICAqIE1hbmFnZXMgdGhlIHN0ZW5jaWwgYnVmZmVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5TdGVuY2lsTWFuYWdlcn1cbiAgICAgKi9cbiAgICB0aGlzLnN0ZW5jaWxNYW5hZ2VyID0gbmV3IFN0ZW5jaWxNYW5hZ2VyKHRoaXMpO1xuXG4gICAgLyoqXG4gICAgICogTWFuYWdlcyB0aGUgZmlsdGVycy5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuRmlsdGVyTWFuYWdlcn1cbiAgICAgKi9cbiAgICB0aGlzLmZpbHRlck1hbmFnZXIgPSBuZXcgRmlsdGVyTWFuYWdlcih0aGlzKTtcblxuICAgIC8qKlxuICAgICAqIE1hbmFnZXMgdGhlIGJsZW5kTW9kZXNcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuQmxlbmRNb2RlTWFuYWdlcn1cbiAgICAgKi9cbiAgICB0aGlzLmJsZW5kTW9kZU1hbmFnZXIgPSBuZXcgQmxlbmRNb2RlTWFuYWdlcih0aGlzKTtcblxuICAgIFxuICAgIC8qKlxuICAgICAqIFRoZSBjdXJyZW50bHkgYWN0aXZlIE9iamVjdFJlbmRlcmVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5PYmplY3RSZW5kZXJlcn1cbiAgICAgKi9cbiAgICB0aGlzLmN1cnJlbnRSZW5kZXJlciA9IG5ldyBPYmplY3RSZW5kZXJlcih0aGlzKTtcblxuICAgIHRoaXMuaW5pdFBsdWdpbnMoKTtcblxuICAgIC8vIGluaXRpYWxpemUgdGhlIGNvbnRleHQgc28gaXQgaXMgcmVhZHkgZm9yIHRoZSBtYW5hZ2Vycy5cbiAgICB0aGlzLmdsID0gY3JlYXRlQ29udGV4dCh0aGlzLnZpZXcsIHRoaXMuX2NvbnRleHRPcHRpb25zKTtcblxuICAgIHRoaXMuX2luaXRDb250ZXh0KCk7XG5cbiAgICAvLyBtYXAgc29tZSB3ZWJHTCBibGVuZCBhbmQgZHJhd21vZGVzLi5cbiAgICB0aGlzLmJsZW5kTW9kZXMgPSBtYXBXZWJHTEJsZW5kTW9kZXNUb1BpeGkoZ2wpO1xuICAgIHRoaXMuZHJhd01vZGVzID0gbWFwV2ViR0xEcmF3TW9kZXNUb1BpeGkoZ2wpXG5cbiAgICB0aGlzLl9hY3RpdmVTaGFkZXIgPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogSG9sZHMgdGhlIGN1cnJlbnQgcmVuZGVyIHRhcmdldFxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5SZW5kZXJUYXJnZXR9XG4gICAgICovXG4gICAgdGhpcy5fYWN0aXZlUmVuZGVyVGFyZ2V0ID0gbnVsbDtcbiAgICB0aGlzLl9hY3RpdmVUZXh0dXJlTG9jYXRpb24gPSBudWxsO1xuICAgIHRoaXMuX2FjdGl2ZVRleHR1cmUgPSBudWxsO1xufVxuXG4vLyBjb25zdHJ1Y3RvclxuV2ViR0xSZW5kZXJlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFN5c3RlbVJlbmRlcmVyLnByb3RvdHlwZSk7XG5XZWJHTFJlbmRlcmVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFdlYkdMUmVuZGVyZXI7XG5tb2R1bGUuZXhwb3J0cyA9IFdlYkdMUmVuZGVyZXI7XG51dGlscy5wbHVnaW5UYXJnZXQubWl4aW4oV2ViR0xSZW5kZXJlcik7XG5cbi8qKlxuICogQ3JlYXRlcyB0aGUgV2ViR0wgY29udGV4dFxuICpcbiAqIEBwcml2YXRlXG4gKi9cbldlYkdMUmVuZGVyZXIucHJvdG90eXBlLl9pbml0Q29udGV4dCA9IGZ1bmN0aW9uICgpXG57XG4gICAgdmFyIGdsID0gdGhpcy5nbDtcblxuICAgIC8vIGNyZWF0ZSBhIHRleHR1cmUgbWFuYWdlci4uLlxuICAgIHRoaXMudGV4dHVyZU1hbmFnZXIgPSBuZXcgVGV4dHVyZU1hbmFnZXIoZ2wpO1xuXG4gICAgLy8gc2V0IHVwIHRoZSBkZWZhdWx0IHBpeGkgc2V0dGluZ3MuLlxuICAgIGdsLmRpc2FibGUoZ2wuREVQVEhfVEVTVCk7XG4gICAgZ2wuZGlzYWJsZShnbC5DVUxMX0ZBQ0UpO1xuICAgIGdsLmVuYWJsZShnbC5CTEVORCk7XG5cblxuICAgIHRoaXMucm9vdFJlbmRlclRhcmdldCA9IG5ldyBSZW5kZXJUYXJnZXQoZ2wsIHRoaXMud2lkdGgsIHRoaXMuaGVpZ2h0LCBudWxsLCB0aGlzLnJlc29sdXRpb24sIHRydWUpO1xuICAgIHRoaXMucm9vdFJlbmRlclRhcmdldC5jbGVhckNvbG9yID0gdGhpcy5fYmFja2dyb3VuZENvbG9yUmdiYTtcbiAgICBcbiAgICB0aGlzLmJpbmRSZW5kZXJUYXJnZXQodGhpcy5yb290UmVuZGVyVGFyZ2V0KTtcblxuICAgIHRoaXMuZW1pdCgnY29udGV4dCcsIGdsKTtcblxuICAgIC8vIHNldHVwIHRoZSB3aWR0aC9oZWlnaHQgcHJvcGVydGllcyBhbmQgZ2wgdmlld3BvcnRcbiAgICB0aGlzLnJlc2l6ZSh0aGlzLndpZHRoLCB0aGlzLmhlaWdodCk7ICAgIFxufTtcblxuLyoqXG4gKiBSZW5kZXJzIHRoZSBvYmplY3QgdG8gaXRzIHdlYkdMIHZpZXdcbiAqXG4gKiBAcGFyYW0gb2JqZWN0IHtQSVhJLkRpc3BsYXlPYmplY3R9IHRoZSBvYmplY3QgdG8gYmUgcmVuZGVyZWRcbiAqL1xuV2ViR0xSZW5kZXJlci5wcm90b3R5cGUucmVuZGVyID0gZnVuY3Rpb24gKGRpc3BsYXlPYmplY3QpXG57XG4gICAgdGhpcy5lbWl0KCdwcmVyZW5kZXInKTtcblxuICAgIC8vIG5vIHBvaW50IHJlbmRlcmluZyBpZiBvdXIgY29udGV4dCBoYXMgYmVlbiBibG93biB1cCFcbiAgICBpZiAodGhpcy5nbC5pc0NvbnRleHRMb3N0KCkpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5fbGFzdE9iamVjdFJlbmRlcmVkID0gZGlzcGxheU9iamVjdDtcblxuICAgIHZhciBjYWNoZVBhcmVudCA9IGRpc3BsYXlPYmplY3QucGFyZW50O1xuICAgIGRpc3BsYXlPYmplY3QucGFyZW50ID0gdGhpcy5fdGVtcERpc3BsYXlPYmplY3RQYXJlbnQ7XG4gICAgLy8gdXBkYXRlIHRoZSBzY2VuZSBncmFwaFxuICAgIGRpc3BsYXlPYmplY3QudXBkYXRlVHJhbnNmb3JtKCk7XG4gICAgZGlzcGxheU9iamVjdC5wYXJlbnQgPSBjYWNoZVBhcmVudDtcblxuICAgIHRoaXMucmVuZGVyRGlzcGxheU9iamVjdChkaXNwbGF5T2JqZWN0LCB0aGlzLnJvb3RSZW5kZXJUYXJnZXQsIHRoaXMuY2xlYXJCZWZvcmVSZW5kZXIpOy8vdGhpcy5wcm9qZWN0aW9uKTtcblxuICAgIHRoaXMuZW1pdCgncG9zdHJlbmRlcicpO1xufTtcblxuLyoqXG4gKiBSZW5kZXJzIGEgRGlzcGxheSBPYmplY3QuXG4gKlxuICogQHBhcmFtIGRpc3BsYXlPYmplY3Qge1BJWEkuRGlzcGxheU9iamVjdH0gVGhlIERpc3BsYXlPYmplY3QgdG8gcmVuZGVyXG4gKiBAcGFyYW0gcmVuZGVyVGFyZ2V0IHtQSVhJLlJlbmRlclRhcmdldH0gVGhlIHJlbmRlciB0YXJnZXQgdG8gdXNlIHRvIHJlbmRlciB0aGlzIGRpc3BsYXkgb2JqZWN0XG4gKlxuICovXG5XZWJHTFJlbmRlcmVyLnByb3RvdHlwZS5yZW5kZXJEaXNwbGF5T2JqZWN0ID0gZnVuY3Rpb24gKGRpc3BsYXlPYmplY3QsIHJlbmRlclRhcmdldCwgY2xlYXIpLy9wcm9qZWN0aW9uLCBidWZmZXIpXG57XG4gICAgdGhpcy5iaW5kUmVuZGVyVGFyZ2V0KHJlbmRlclRhcmdldCk7XG5cbiAgICBpZihjbGVhcilcbiAgICB7XG4gICAgICAgIHJlbmRlclRhcmdldC5jbGVhcigpO1xuICAgIH1cblxuICAgIC8vIHN0YXJ0IHRoZSBmaWx0ZXIgbWFuYWdlclxuICAgIHRoaXMuZmlsdGVyTWFuYWdlci5zZXRGaWx0ZXJTdGFjayggcmVuZGVyVGFyZ2V0LmZpbHRlclN0YWNrICk7XG5cbiAgICAvLyByZW5kZXIgdGhlIHNjZW5lIVxuICAgIGRpc3BsYXlPYmplY3QucmVuZGVyV2ViR0wodGhpcyk7XG5cbiAgICAvLyBmaW5pc2ggdGhlIGN1cnJlbnQgcmVuZGVyZXIuLlxuICAgIHRoaXMuY3VycmVudFJlbmRlcmVyLmZsdXNoKCk7XG59O1xuXG4vKipcbiAqIENoYW5nZXMgdGhlIGN1cnJlbnQgcmVuZGVyZXIgdG8gdGhlIG9uZSBnaXZlbiBpbiBwYXJhbWV0ZXJcbiAqXG4gKiBAcGFyYW0gb2JqZWN0UmVuZGVyZXIge1BJWEkuT2JqZWN0UmVuZGVyZXJ9IFRoZSBvYmplY3QgcmVuZGVyZXIgdG8gdXNlLlxuICovXG5XZWJHTFJlbmRlcmVyLnByb3RvdHlwZS5zZXRPYmplY3RSZW5kZXJlciA9IGZ1bmN0aW9uIChvYmplY3RSZW5kZXJlcilcbntcbiAgICBpZiAodGhpcy5jdXJyZW50UmVuZGVyZXIgPT09IG9iamVjdFJlbmRlcmVyKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuY3VycmVudFJlbmRlcmVyLnN0b3AoKTtcbiAgICB0aGlzLmN1cnJlbnRSZW5kZXJlciA9IG9iamVjdFJlbmRlcmVyO1xuICAgIHRoaXMuY3VycmVudFJlbmRlcmVyLnN0YXJ0KCk7XG59O1xuXG4vKipcbiAqIFJlc2l6ZXMgdGhlIHdlYkdMIHZpZXcgdG8gdGhlIHNwZWNpZmllZCB3aWR0aCBhbmQgaGVpZ2h0LlxuICpcbiAqIEBwYXJhbSB3aWR0aCB7bnVtYmVyfSB0aGUgbmV3IHdpZHRoIG9mIHRoZSB3ZWJHTCB2aWV3XG4gKiBAcGFyYW0gaGVpZ2h0IHtudW1iZXJ9IHRoZSBuZXcgaGVpZ2h0IG9mIHRoZSB3ZWJHTCB2aWV3XG4gKi9cbldlYkdMUmVuZGVyZXIucHJvdG90eXBlLnJlc2l6ZSA9IGZ1bmN0aW9uICh3aWR0aCwgaGVpZ2h0KVxue1xuICAgIFN5c3RlbVJlbmRlcmVyLnByb3RvdHlwZS5yZXNpemUuY2FsbCh0aGlzLCB3aWR0aCwgaGVpZ2h0KTtcblxuICAgIHRoaXMuZmlsdGVyTWFuYWdlci5yZXNpemUod2lkdGgsIGhlaWdodCk7XG4gICAgdGhpcy5yb290UmVuZGVyVGFyZ2V0LnJlc2l6ZSh3aWR0aCwgaGVpZ2h0KTtcblxuICAgIGlmKHRoaXMuY3VycmVudFJlbmRlclRhcmdldCA9PT0gdGhpcy5yZW5kZXJUYXJnZXQpXG4gICAge1xuICAgICAgICB0aGlzLnJvb3RSZW5kZXJUYXJnZXQuYWN0aXZhdGUoKTtcbiAgICB9XG59O1xuXG4vKipcbiAqIENoYW5nZXMgdGhlIGN1cnJlbnQgcmVuZGVyIHRhcmdldCB0byB0aGUgb25lIGdpdmVuIGluIHBhcmFtZXRlclxuICpcbiAqIEBwYXJhbSByZW5kZXJUYXJnZXQge1BJWEkuUmVuZGVyVGFyZ2V0fSB0aGUgbmV3IHJlbmRlciB0YXJnZXRcbiAqL1xuV2ViR0xSZW5kZXJlci5wcm90b3R5cGUuYmluZFJlbmRlclRhcmdldCA9IGZ1bmN0aW9uIChyZW5kZXJUYXJnZXQpLy9wcm9qZWN0aW9uLCBidWZmZXIpXG57XG4gICAgaWYocmVuZGVyVGFyZ2V0ICE9PSB0aGlzLl9hY3RpdmVSZW5kZXJUYXJnZXQpXG4gICAge1xuICAgICAgICB0aGlzLl9hY3RpdmVSZW5kZXJUYXJnZXQgPSByZW5kZXJUYXJnZXQ7XG5cbiAgICAgICAgaWYodGhpcy5fYWN0aXZlU2hhZGVyKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLl9hY3RpdmVTaGFkZXIudW5pZm9ybXMucHJvamVjdGlvbk1hdHJpeCA9IHJlbmRlclRhcmdldC5wcm9qZWN0aW9uTWF0cml4LnRvQXJyYXkodHJ1ZSk7XG4gICAgICAgIH1cblxuICAgICAgICByZW5kZXJUYXJnZXQuYWN0aXZhdGUoKTtcblxuICAgICAgICB0aGlzLnN0ZW5jaWxNYW5hZ2VyLnNldE1hc2tTdGFjayggcmVuZGVyVGFyZ2V0LnN0ZW5jaWxNYXNrU3RhY2sgKTtcbiAgICB9XG59XG5cbldlYkdMUmVuZGVyZXIucHJvdG90eXBlLmJpbmRTaGFkZXIgPSBmdW5jdGlvbiAoc2hhZGVyKS8vcHJvamVjdGlvbiwgYnVmZmVyKVxue1xuICAgIC8vVE9ETyBjYWNoZVxuICAgIGlmKHRoaXMuX2FjdGl2ZVNoYWRlciAhPT0gc2hhZGVyKVxuICAgIHtcbiAgICAgICAgdGhpcy5fYWN0aXZlU2hhZGVyID0gc2hhZGVyO1xuICAgICAgICBzaGFkZXIuYmluZCgpO1xuXG4gICAgICAgIC8vIGF1dG9tYXRpY2FsbHkgc2V0IHRoZSBwcm9qZWN0aW9uIG1hdHJpeFxuICAgICAgICBzaGFkZXIudW5pZm9ybXMucHJvamVjdGlvbk1hdHJpeCA9IHRoaXMuX2FjdGl2ZVJlbmRlclRhcmdldC5wcm9qZWN0aW9uTWF0cml4LnRvQXJyYXkodHJ1ZSk7XG4gICAgfVxufVxuXG5cbldlYkdMUmVuZGVyZXIucHJvdG90eXBlLmJpbmRUZXh0dXJlID0gZnVuY3Rpb24gKHRleHR1cmUsIGxvY2F0aW9uKVxue1xuICAgIHZhciBnbCA9IHRoaXMuZ2w7XG5cbiAgICAvL1RPRE8gdGVzdCBwZXJmIG9mIGNhY2hlP1xuICAgIGxvY2F0aW9uID0gbG9jYXRpb24gfHwgMDtcblxuICAgIGlmKHRoaXMuX2FjdGl2ZVRleHR1cmVMb2NhdGlvbiAhPT0gbG9jYXRpb24pLy9cbiAgICB7XG4gICAgICAgIHRoaXMuX2FjdGl2ZVRleHR1cmVMb2NhdGlvbiA9IGxvY2F0aW9uXG4gICAgICAgIGdsLmFjdGl2ZVRleHR1cmUoZ2wuVEVYVFVSRTAgKyBsb2NhdGlvbiApO1xuICAgIH1cblxuICAgIC8vVE9ETyAtIGNhbiB3ZSBjYWNoZSB0aGlzIHRleHR1cmUgdG9vP1xuICAgIHRoaXMuX2FjdGl2ZVRleHR1cmUgPSB0ZXh0dXJlOyAgICAgIFxuICAgIFxuICAgIGlmICghdGV4dHVyZS5fZ2xUZXh0dXJlc1tnbC5pZF0pXG4gICAge1xuICAgICAgICAvLyB0aGlzIHdpbGwgYWxzbyBiaW5kIHRoZSB0ZXh0dXJlLi5cbiAgICAgICAgdGhpcy50ZXh0dXJlTWFuYWdlci51cGRhdGVUZXh0dXJlKHRleHR1cmUpO1xuICAgIH1cbiAgICBlbHNlXG4gICAgeyAgIFxuICAgICAgICAvLyBiaW5kIHRoZSBjdXJyZW50IHRleHR1cmVcbiAgICAgICAgdGV4dHVyZS5fZ2xUZXh0dXJlc1tnbC5pZF0uYmluZCgpO1xuICAgIH1cbn1cblxuXG4vKipcbiAqIEhhbmRsZXMgYSBsb3N0IHdlYmdsIGNvbnRleHRcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5XZWJHTFJlbmRlcmVyLnByb3RvdHlwZS5oYW5kbGVDb250ZXh0TG9zdCA9IGZ1bmN0aW9uIChldmVudClcbntcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xufTtcblxuLyoqXG4gKiBIYW5kbGVzIGEgcmVzdG9yZWQgd2ViZ2wgY29udGV4dFxuICpcbiAqIEBwcml2YXRlXG4gKi9cbldlYkdMUmVuZGVyZXIucHJvdG90eXBlLmhhbmRsZUNvbnRleHRSZXN0b3JlZCA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy5faW5pdENvbnRleHQoKTtcbiAgICB0aGlzLnRleHR1cmVNYW5hZ2VyLnJlbW92ZUFsbCgpO1xufTtcblxuLyoqXG4gKiBSZW1vdmVzIGV2ZXJ5dGhpbmcgZnJvbSB0aGUgcmVuZGVyZXIgKGV2ZW50IGxpc3RlbmVycywgc3ByaXRlYmF0Y2gsIGV0Yy4uLilcbiAqXG4gKiBAcGFyYW0gW3JlbW92ZVZpZXc9ZmFsc2VdIHtib29sZWFufSBSZW1vdmVzIHRoZSBDYW52YXMgZWxlbWVudCBmcm9tIHRoZSBET00uXG4gKi9cbldlYkdMUmVuZGVyZXIucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAocmVtb3ZlVmlldylcbntcbiAgICB0aGlzLmRlc3Ryb3lQbHVnaW5zKCk7XG5cbiAgICAvLyByZW1vdmUgbGlzdGVuZXJzXG4gICAgdGhpcy52aWV3LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3dlYmdsY29udGV4dGxvc3QnLCB0aGlzLmhhbmRsZUNvbnRleHRMb3N0KTtcbiAgICB0aGlzLnZpZXcucmVtb3ZlRXZlbnRMaXN0ZW5lcignd2ViZ2xjb250ZXh0cmVzdG9yZWQnLCB0aGlzLmhhbmRsZUNvbnRleHRSZXN0b3JlZCk7XG5cbiAgICB0aGlzLnRleHR1cmVNYW5hZ2VyLmRlc3Ryb3lBbGwoKTtcblxuICAgIC8vIGNhbGwgYmFzZSBkZXN0cm95XG4gICAgU3lzdGVtUmVuZGVyZXIucHJvdG90eXBlLmRlc3Ryb3kuY2FsbCh0aGlzLCByZW1vdmVWaWV3KTtcblxuICAgIHRoaXMudWlkID0gMDtcblxuICAgIC8vIGRlc3Ryb3kgdGhlIG1hbmFnZXJzXG4gICAgdGhpcy5zaGFkZXJNYW5hZ2VyLmRlc3Ryb3koKTtcbiAgICB0aGlzLm1hc2tNYW5hZ2VyLmRlc3Ryb3koKTtcbiAgICB0aGlzLnN0ZW5jaWxNYW5hZ2VyLmRlc3Ryb3koKTtcbiAgICB0aGlzLmZpbHRlck1hbmFnZXIuZGVzdHJveSgpO1xuICAgIHRoaXMuYmxlbmRNb2RlTWFuYWdlci5kZXN0cm95KCk7XG5cbiAgICB0aGlzLnNoYWRlck1hbmFnZXIgPSBudWxsO1xuICAgIHRoaXMubWFza01hbmFnZXIgPSBudWxsO1xuICAgIHRoaXMuZmlsdGVyTWFuYWdlciA9IG51bGw7XG4gICAgdGhpcy5ibGVuZE1vZGVNYW5hZ2VyID0gbnVsbDtcbiAgICB0aGlzLmN1cnJlbnRSZW5kZXJlciA9IG51bGw7XG5cbiAgICB0aGlzLmhhbmRsZUNvbnRleHRMb3N0ID0gbnVsbDtcbiAgICB0aGlzLmhhbmRsZUNvbnRleHRSZXN0b3JlZCA9IG51bGw7XG5cbiAgICB0aGlzLl9jb250ZXh0T3B0aW9ucyA9IG51bGw7XG5cbiAgICB0aGlzLmdsLnVzZVByb2dyYW0obnVsbCk7XG4gICAgdGhpcy5nbCA9IG51bGw7XG59O1xuXG4iLCJ2YXIgRGVmYXVsdFNoYWRlciA9IHJlcXVpcmUoJy4uL3NoYWRlcnMvVGV4dHVyZVNoYWRlcicpO1xuXG4vKipcbiAqIFRoaXMgaXMgdGhlIGJhc2UgY2xhc3MgZm9yIGNyZWF0aW5nIGEgUElYSSBmaWx0ZXIuIEN1cnJlbnRseSBvbmx5IFdlYkdMIHN1cHBvcnRzIGZpbHRlcnMuXG4gKiBJZiB5b3Ugd2FudCB0byBtYWtlIGEgY3VzdG9tIGZpbHRlciB0aGlzIHNob3VsZCBiZSB5b3VyIGJhc2UgY2xhc3MuXG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIHZlcnRleFNyYyB7c3RyaW5nfHN0cmluZ1tdfSBUaGUgdmVydGV4IHNoYWRlciBzb3VyY2UgYXMgYW4gYXJyYXkgb2Ygc3RyaW5ncy5cbiAqIEBwYXJhbSBmcmFnbWVudFNyYyB7c3RyaW5nfHN0cmluZ1tdfSBUaGUgZnJhZ21lbnQgc2hhZGVyIHNvdXJjZSBhcyBhbiBhcnJheSBvZiBzdHJpbmdzLlxuICogQHBhcmFtIHVuaWZvcm1zIHtvYmplY3R9IEFuIG9iamVjdCBjb250YWluaW5nIHRoZSB1bmlmb3JtcyBmb3IgdGhpcyBmaWx0ZXIuXG4gKi9cbmZ1bmN0aW9uIEFic3RyYWN0RmlsdGVyKHZlcnRleFNyYywgZnJhZ21lbnRTcmMsIHVuaWZvcm1zKVxue1xuXG4gICAgLyoqXG4gICAgICogQW4gYXJyYXkgb2Ygc2hhZGVyc1xuICAgICAqIEBtZW1iZXIge1BJWEkuU2hhZGVyW119XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLnNoYWRlcnMgPSBbXTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBleHRyYSBwYWRkaW5nIHRoYXQgdGhlIGZpbHRlciBtaWdodCBuZWVkXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMucGFkZGluZyA9IDA7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgdW5pZm9ybXMgYXMgYW4gb2JqZWN0XG4gICAgICogQG1lbWJlciB7b2JqZWN0fVxuICAgICAqL1xuICAgIHRoaXMudW5pZm9ybXMgPSB1bmlmb3JtcyB8fCB7fTtcblxuXG4gICAgLyoqXG4gICAgICogVGhlIGNvZGUgb2YgdGhlIHZlcnRleCBzaGFkZXJcbiAgICAgKiBAbWVtYmVyIHtzdHJpbmdbXX1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMudmVydGV4U3JjID0gdmVydGV4U3JjIHx8IERlZmF1bHRTaGFkZXIuZGVmYXVsdFZlcnRleFNyYztcblxuICAgIC8qKlxuICAgICAqIFRoZSBjb2RlIG9mIHRoZSBmcmFtZW50IHNoYWRlclxuICAgICAqIEBtZW1iZXIge3N0cmluZ1tdfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5mcmFnbWVudFNyYyA9IGZyYWdtZW50U3JjIHx8IERlZmF1bHRTaGFkZXIuZGVmYXVsdEZyYWdtZW50U3JjO1xuXG4gICAgLy9UT0RPIGEgcmVtaW5kZXIgLSB3b3VsZCBiZSBjb29sIHRvIGhhdmUgbG93ZXIgcmVzIGZpbHRlcnMgYXMgdGhpcyB3b3VsZCBnaXZlIGJldHRlciBwZXJmb3JtYW5jZS5cblxuICAgIC8vdHlwZW9mIGZyYWdtZW50U3JjID09PSAnc3RyaW5nJyA/IGZyYWdtZW50U3JjLnNwbGl0KCcnKSA6IChmcmFnbWVudFNyYyB8fCBbXSk7XG5cbn1cblxuQWJzdHJhY3RGaWx0ZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gQWJzdHJhY3RGaWx0ZXI7XG5tb2R1bGUuZXhwb3J0cyA9IEFic3RyYWN0RmlsdGVyO1xuXG4vKipcbiAqIEdyYWJzIGEgc2hhZGVyIGZyb20gdGhlIGN1cnJlbnQgcmVuZGVyZXJcbiAqXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcn0gVGhlIHJlbmRlcmVyIHRvIHJldHJpZXZlIHRoZSBzaGFkZXIgZnJvbVxuICovXG5BYnN0cmFjdEZpbHRlci5wcm90b3R5cGUuZ2V0U2hhZGVyID0gZnVuY3Rpb24gKHJlbmRlcmVyKVxue1xuICAgIHZhciBnbCA9IHJlbmRlcmVyLmdsO1xuXG4gICAgdmFyIHNoYWRlciA9IHRoaXMuc2hhZGVyc1tnbC5pZF07XG5cbiAgICBpZiAoIXNoYWRlcilcbiAgICB7XG4gICAgICAgIHNoYWRlciA9IG5ldyBEZWZhdWx0U2hhZGVyKHJlbmRlcmVyLnNoYWRlck1hbmFnZXIsXG4gICAgICAgICAgICB0aGlzLnZlcnRleFNyYyxcbiAgICAgICAgICAgIHRoaXMuZnJhZ21lbnRTcmMsXG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLFxuICAgICAgICAgICAgdGhpcy5hdHRyaWJ1dGVzXG4gICAgICAgICk7XG5cbiAgICAgICAgdGhpcy5zaGFkZXJzW2dsLmlkXSA9IHNoYWRlcjtcbiAgICB9XG5cbiAgICByZXR1cm4gc2hhZGVyO1xufTtcblxuLyoqXG4gKiBBcHBsaWVzIHRoZSBmaWx0ZXJcbiAqXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcn0gVGhlIHJlbmRlcmVyIHRvIHJldHJpZXZlIHRoZSBmaWx0ZXIgZnJvbVxuICogQHBhcmFtIGlucHV0IHtQSVhJLlJlbmRlclRhcmdldH1cbiAqIEBwYXJhbSBvdXRwdXQge1BJWEkuUmVuZGVyVGFyZ2V0fVxuICogQHBhcmFtIGNsZWFyIHtib29sZWFufSBXaGV0aGVyIG9yIG5vdCB3ZSB3YW50IHRvIGNsZWFyIHRoZSBvdXRwdXRUYXJnZXRcbiAqL1xuQWJzdHJhY3RGaWx0ZXIucHJvdG90eXBlLmFwcGx5RmlsdGVyID0gZnVuY3Rpb24gKHJlbmRlcmVyLCBpbnB1dCwgb3V0cHV0LCBjbGVhcilcbntcbiAgICB2YXIgc2hhZGVyID0gdGhpcy5nZXRTaGFkZXIocmVuZGVyZXIpO1xuXG4gICAgcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5hcHBseUZpbHRlcihzaGFkZXIsIGlucHV0LCBvdXRwdXQsIGNsZWFyKTtcbn07XG5cbi8qKlxuICogU3luY3MgYSB1bmlmb3JtIGJldHdlZW4gdGhlIGNsYXNzIG9iamVjdCBhbmQgdGhlIHNoYWRlcnMuXG4gKlxuICovXG5BYnN0cmFjdEZpbHRlci5wcm90b3R5cGUuc3luY1VuaWZvcm0gPSBmdW5jdGlvbiAodW5pZm9ybSlcbntcbiAgICBmb3IgKHZhciBpID0gMCwgaiA9IHRoaXMuc2hhZGVycy5sZW5ndGg7IGkgPCBqOyArK2kpXG4gICAge1xuICAgICAgICB0aGlzLnNoYWRlcnNbaV0uc3luY1VuaWZvcm0odW5pZm9ybSk7XG4gICAgfVxufTtcbiIsInZhciBBYnN0cmFjdEZpbHRlciA9IHJlcXVpcmUoJy4vQWJzdHJhY3RGaWx0ZXInKTtcbi8vIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL3N1YnN0YWNrL2JyZnMvaXNzdWVzLzI1XG5cblxuLyoqXG4gKlxuICogQmFzaWMgRlhBQSBpbXBsZW1lbnRhdGlvbiBiYXNlZCBvbiB0aGUgY29kZSBvbiBnZWVrczNkLmNvbSB3aXRoIHRoZVxuICogbW9kaWZpY2F0aW9uIHRoYXQgdGhlIHRleHR1cmUyRExvZCBzdHVmZiB3YXMgcmVtb3ZlZCBzaW5jZSBpdCdzXG4gKiB1bnN1cHBvcnRlZCBieSBXZWJHTC5cbiAqXG4gKiAtLVxuICogRnJvbTpcbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS9taXRzdWhpa28vd2ViZ2wtbWVpbmNyYWZ0XG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLkFic3RyYWN0RmlsdGVyXG4gKiBAbWVtYmVyb2YgUElYSVxuICpcbiAqL1xuZnVuY3Rpb24gRlhBQUZpbHRlcigpXG57XG4gICAgQWJzdHJhY3RGaWx0ZXIuY2FsbCh0aGlzLFxuICAgICAgICAvLyB2ZXJ0ZXggc2hhZGVyXG4gICAgICAgIFwiXFxucHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XFxuXFxuYXR0cmlidXRlIHZlYzIgYVZlcnRleFBvc2l0aW9uO1xcbmF0dHJpYnV0ZSB2ZWMyIGFUZXh0dXJlQ29vcmQ7XFxuYXR0cmlidXRlIHZlYzQgYUNvbG9yO1xcblxcbnVuaWZvcm0gbWF0MyBwcm9qZWN0aW9uTWF0cml4O1xcbnVuaWZvcm0gdmVjMiByZXNvbHV0aW9uO1xcblxcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xcbnZhcnlpbmcgdmVjNCB2Q29sb3I7XFxuXFxudmFyeWluZyB2ZWMyIHZSZXNvbHV0aW9uO1xcblxcbi8vdGV4Y29vcmRzIGNvbXB1dGVkIGluIHZlcnRleCBzdGVwXFxuLy90byBhdm9pZCBkZXBlbmRlbnQgdGV4dHVyZSByZWFkc1xcbnZhcnlpbmcgdmVjMiB2X3JnYk5XO1xcbnZhcnlpbmcgdmVjMiB2X3JnYk5FO1xcbnZhcnlpbmcgdmVjMiB2X3JnYlNXO1xcbnZhcnlpbmcgdmVjMiB2X3JnYlNFO1xcbnZhcnlpbmcgdmVjMiB2X3JnYk07XFxuXFxuXFxudm9pZCB0ZXhjb29yZHModmVjMiBmcmFnQ29vcmQsIHZlYzIgcmVzb2x1dGlvbixcXG4gICAgICAgICAgICBvdXQgdmVjMiB2X3JnYk5XLCBvdXQgdmVjMiB2X3JnYk5FLFxcbiAgICAgICAgICAgIG91dCB2ZWMyIHZfcmdiU1csIG91dCB2ZWMyIHZfcmdiU0UsXFxuICAgICAgICAgICAgb3V0IHZlYzIgdl9yZ2JNKSB7XFxuICAgIHZlYzIgaW52ZXJzZVZQID0gMS4wIC8gcmVzb2x1dGlvbi54eTtcXG4gICAgdl9yZ2JOVyA9IChmcmFnQ29vcmQgKyB2ZWMyKC0xLjAsIC0xLjApKSAqIGludmVyc2VWUDtcXG4gICAgdl9yZ2JORSA9IChmcmFnQ29vcmQgKyB2ZWMyKDEuMCwgLTEuMCkpICogaW52ZXJzZVZQO1xcbiAgICB2X3JnYlNXID0gKGZyYWdDb29yZCArIHZlYzIoLTEuMCwgMS4wKSkgKiBpbnZlcnNlVlA7XFxuICAgIHZfcmdiU0UgPSAoZnJhZ0Nvb3JkICsgdmVjMigxLjAsIDEuMCkpICogaW52ZXJzZVZQO1xcbiAgICB2X3JnYk0gPSB2ZWMyKGZyYWdDb29yZCAqIGludmVyc2VWUCk7XFxufVxcblxcbnZvaWQgbWFpbih2b2lkKXtcXG4gICBnbF9Qb3NpdGlvbiA9IHZlYzQoKHByb2plY3Rpb25NYXRyaXggKiB2ZWMzKGFWZXJ0ZXhQb3NpdGlvbiwgMS4wKSkueHksIDAuMCwgMS4wKTtcXG4gICB2VGV4dHVyZUNvb3JkID0gYVRleHR1cmVDb29yZDtcXG4gICB2Q29sb3IgPSB2ZWM0KGFDb2xvci5yZ2IgKiBhQ29sb3IuYSwgYUNvbG9yLmEpO1xcbiAgIHZSZXNvbHV0aW9uID0gcmVzb2x1dGlvbjtcXG5cXG4gICAvL2NvbXB1dGUgdGhlIHRleHR1cmUgY29vcmRzIGFuZCBzZW5kIHRoZW0gdG8gdmFyeWluZ3NcXG4gICB0ZXhjb29yZHMoYVRleHR1cmVDb29yZCAqIHJlc29sdXRpb24sIHJlc29sdXRpb24sIHZfcmdiTlcsIHZfcmdiTkUsIHZfcmdiU1csIHZfcmdiU0UsIHZfcmdiTSk7XFxufVxcblwiLFxuICAgICAgICAvLyBmcmFnbWVudCBzaGFkZXJcbiAgICAgICAgXCJwcmVjaXNpb24gbG93cCBmbG9hdDtcXG5cXG5cXG4vKipcXG5CYXNpYyBGWEFBIGltcGxlbWVudGF0aW9uIGJhc2VkIG9uIHRoZSBjb2RlIG9uIGdlZWtzM2QuY29tIHdpdGggdGhlXFxubW9kaWZpY2F0aW9uIHRoYXQgdGhlIHRleHR1cmUyRExvZCBzdHVmZiB3YXMgcmVtb3ZlZCBzaW5jZSBpdCdzXFxudW5zdXBwb3J0ZWQgYnkgV2ViR0wuXFxuXFxuLS1cXG5cXG5Gcm9tOlxcbmh0dHBzOi8vZ2l0aHViLmNvbS9taXRzdWhpa28vd2ViZ2wtbWVpbmNyYWZ0XFxuXFxuQ29weXJpZ2h0IChjKSAyMDExIGJ5IEFybWluIFJvbmFjaGVyLlxcblxcblNvbWUgcmlnaHRzIHJlc2VydmVkLlxcblxcblJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dFxcbm1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmVcXG5tZXQ6XFxuXFxuICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHRcXG4gICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuXFxuXFxuICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZVxcbiAgICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nXFxuICAgICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkXFxuICAgICAgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLlxcblxcbiAgICAqIFRoZSBuYW1lcyBvZiB0aGUgY29udHJpYnV0b3JzIG1heSBub3QgYmUgdXNlZCB0byBlbmRvcnNlIG9yXFxuICAgICAgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljXFxuICAgICAgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLlxcblxcblRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlNcXG5cXFwiQVMgSVNcXFwiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVFxcbkxJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUlxcbkEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUXFxuT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsXFxuU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVFxcbkxJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLFxcbkRBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWVxcblRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlRcXG4oSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0VcXG5PRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLlxcbiovXFxuXFxuI2lmbmRlZiBGWEFBX1JFRFVDRV9NSU5cXG4gICAgI2RlZmluZSBGWEFBX1JFRFVDRV9NSU4gICAoMS4wLyAxMjguMClcXG4jZW5kaWZcXG4jaWZuZGVmIEZYQUFfUkVEVUNFX01VTFxcbiAgICAjZGVmaW5lIEZYQUFfUkVEVUNFX01VTCAgICgxLjAgLyA4LjApXFxuI2VuZGlmXFxuI2lmbmRlZiBGWEFBX1NQQU5fTUFYXFxuICAgICNkZWZpbmUgRlhBQV9TUEFOX01BWCAgICAgOC4wXFxuI2VuZGlmXFxuXFxuLy9vcHRpbWl6ZWQgdmVyc2lvbiBmb3IgbW9iaWxlLCB3aGVyZSBkZXBlbmRlbnRcXG4vL3RleHR1cmUgcmVhZHMgY2FuIGJlIGEgYm90dGxlbmVja1xcbnZlYzQgZnhhYShzYW1wbGVyMkQgdGV4LCB2ZWMyIGZyYWdDb29yZCwgdmVjMiByZXNvbHV0aW9uLFxcbiAgICAgICAgICAgIHZlYzIgdl9yZ2JOVywgdmVjMiB2X3JnYk5FLFxcbiAgICAgICAgICAgIHZlYzIgdl9yZ2JTVywgdmVjMiB2X3JnYlNFLFxcbiAgICAgICAgICAgIHZlYzIgdl9yZ2JNKSB7XFxuICAgIHZlYzQgY29sb3I7XFxuICAgIG1lZGl1bXAgdmVjMiBpbnZlcnNlVlAgPSB2ZWMyKDEuMCAvIHJlc29sdXRpb24ueCwgMS4wIC8gcmVzb2x1dGlvbi55KTtcXG4gICAgdmVjMyByZ2JOVyA9IHRleHR1cmUyRCh0ZXgsIHZfcmdiTlcpLnh5ejtcXG4gICAgdmVjMyByZ2JORSA9IHRleHR1cmUyRCh0ZXgsIHZfcmdiTkUpLnh5ejtcXG4gICAgdmVjMyByZ2JTVyA9IHRleHR1cmUyRCh0ZXgsIHZfcmdiU1cpLnh5ejtcXG4gICAgdmVjMyByZ2JTRSA9IHRleHR1cmUyRCh0ZXgsIHZfcmdiU0UpLnh5ejtcXG4gICAgdmVjNCB0ZXhDb2xvciA9IHRleHR1cmUyRCh0ZXgsIHZfcmdiTSk7XFxuICAgIHZlYzMgcmdiTSAgPSB0ZXhDb2xvci54eXo7XFxuICAgIHZlYzMgbHVtYSA9IHZlYzMoMC4yOTksIDAuNTg3LCAwLjExNCk7XFxuICAgIGZsb2F0IGx1bWFOVyA9IGRvdChyZ2JOVywgbHVtYSk7XFxuICAgIGZsb2F0IGx1bWFORSA9IGRvdChyZ2JORSwgbHVtYSk7XFxuICAgIGZsb2F0IGx1bWFTVyA9IGRvdChyZ2JTVywgbHVtYSk7XFxuICAgIGZsb2F0IGx1bWFTRSA9IGRvdChyZ2JTRSwgbHVtYSk7XFxuICAgIGZsb2F0IGx1bWFNICA9IGRvdChyZ2JNLCAgbHVtYSk7XFxuICAgIGZsb2F0IGx1bWFNaW4gPSBtaW4obHVtYU0sIG1pbihtaW4obHVtYU5XLCBsdW1hTkUpLCBtaW4obHVtYVNXLCBsdW1hU0UpKSk7XFxuICAgIGZsb2F0IGx1bWFNYXggPSBtYXgobHVtYU0sIG1heChtYXgobHVtYU5XLCBsdW1hTkUpLCBtYXgobHVtYVNXLCBsdW1hU0UpKSk7XFxuXFxuICAgIG1lZGl1bXAgdmVjMiBkaXI7XFxuICAgIGRpci54ID0gLSgobHVtYU5XICsgbHVtYU5FKSAtIChsdW1hU1cgKyBsdW1hU0UpKTtcXG4gICAgZGlyLnkgPSAgKChsdW1hTlcgKyBsdW1hU1cpIC0gKGx1bWFORSArIGx1bWFTRSkpO1xcblxcbiAgICBmbG9hdCBkaXJSZWR1Y2UgPSBtYXgoKGx1bWFOVyArIGx1bWFORSArIGx1bWFTVyArIGx1bWFTRSkgKlxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKDAuMjUgKiBGWEFBX1JFRFVDRV9NVUwpLCBGWEFBX1JFRFVDRV9NSU4pO1xcblxcbiAgICBmbG9hdCByY3BEaXJNaW4gPSAxLjAgLyAobWluKGFicyhkaXIueCksIGFicyhkaXIueSkpICsgZGlyUmVkdWNlKTtcXG4gICAgZGlyID0gbWluKHZlYzIoRlhBQV9TUEFOX01BWCwgRlhBQV9TUEFOX01BWCksXFxuICAgICAgICAgICAgICBtYXgodmVjMigtRlhBQV9TUEFOX01BWCwgLUZYQUFfU1BBTl9NQVgpLFxcbiAgICAgICAgICAgICAgZGlyICogcmNwRGlyTWluKSkgKiBpbnZlcnNlVlA7XFxuXFxuICAgIHZlYzMgcmdiQSA9IDAuNSAqIChcXG4gICAgICAgIHRleHR1cmUyRCh0ZXgsIGZyYWdDb29yZCAqIGludmVyc2VWUCArIGRpciAqICgxLjAgLyAzLjAgLSAwLjUpKS54eXogK1xcbiAgICAgICAgdGV4dHVyZTJEKHRleCwgZnJhZ0Nvb3JkICogaW52ZXJzZVZQICsgZGlyICogKDIuMCAvIDMuMCAtIDAuNSkpLnh5eik7XFxuICAgIHZlYzMgcmdiQiA9IHJnYkEgKiAwLjUgKyAwLjI1ICogKFxcbiAgICAgICAgdGV4dHVyZTJEKHRleCwgZnJhZ0Nvb3JkICogaW52ZXJzZVZQICsgZGlyICogLTAuNSkueHl6ICtcXG4gICAgICAgIHRleHR1cmUyRCh0ZXgsIGZyYWdDb29yZCAqIGludmVyc2VWUCArIGRpciAqIDAuNSkueHl6KTtcXG5cXG4gICAgZmxvYXQgbHVtYUIgPSBkb3QocmdiQiwgbHVtYSk7XFxuICAgIGlmICgobHVtYUIgPCBsdW1hTWluKSB8fCAobHVtYUIgPiBsdW1hTWF4KSlcXG4gICAgICAgIGNvbG9yID0gdmVjNChyZ2JBLCB0ZXhDb2xvci5hKTtcXG4gICAgZWxzZVxcbiAgICAgICAgY29sb3IgPSB2ZWM0KHJnYkIsIHRleENvbG9yLmEpO1xcbiAgICByZXR1cm4gY29sb3I7XFxufVxcblxcblxcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xcbnZhcnlpbmcgdmVjNCB2Q29sb3I7XFxudmFyeWluZyB2ZWMyIHZSZXNvbHV0aW9uO1xcblxcbi8vdGV4Y29vcmRzIGNvbXB1dGVkIGluIHZlcnRleCBzdGVwXFxuLy90byBhdm9pZCBkZXBlbmRlbnQgdGV4dHVyZSByZWFkc1xcbnZhcnlpbmcgdmVjMiB2X3JnYk5XO1xcbnZhcnlpbmcgdmVjMiB2X3JnYk5FO1xcbnZhcnlpbmcgdmVjMiB2X3JnYlNXO1xcbnZhcnlpbmcgdmVjMiB2X3JnYlNFO1xcbnZhcnlpbmcgdmVjMiB2X3JnYk07XFxuXFxudW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXI7XFxuXFxuXFxudm9pZCBtYWluKHZvaWQpe1xcblxcbiAgICBnbF9GcmFnQ29sb3IgPSBmeGFhKHVTYW1wbGVyLCB2VGV4dHVyZUNvb3JkICogdlJlc29sdXRpb24sIHZSZXNvbHV0aW9uLCB2X3JnYk5XLCB2X3JnYk5FLCB2X3JnYlNXLCB2X3JnYlNFLCB2X3JnYk0pO1xcblxcbn1cXG5cIixcbiAgICAgICAgLy8gdW5pZm9ybXNcbiAgICAgICAge1xuICAgICAgICAgICAgcmVzb2x1dGlvbjogeyB0eXBlOiAndjInLCB2YWx1ZTogeyB4OiAxLCB5OiAxIH0gfVxuICAgICAgICB9XG4gICAgKTtcblxufVxuXG5GWEFBRmlsdGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoQWJzdHJhY3RGaWx0ZXIucHJvdG90eXBlKTtcbkZYQUFGaWx0ZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gRlhBQUZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gRlhBQUZpbHRlcjtcblxuLyoqXG4gKiBBcHBsaWVzIHRoZSBmaWx0ZXJcbiAqXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcn0gVGhlIHJlbmRlcmVyIHRvIHJldHJpZXZlIHRoZSBmaWx0ZXIgZnJvbVxuICogQHBhcmFtIGlucHV0IHtQSVhJLlJlbmRlclRhcmdldH1cbiAqIEBwYXJhbSBvdXRwdXQge1BJWEkuUmVuZGVyVGFyZ2V0fVxuICovXG5GWEFBRmlsdGVyLnByb3RvdHlwZS5hcHBseUZpbHRlciA9IGZ1bmN0aW9uIChyZW5kZXJlciwgaW5wdXQsIG91dHB1dClcbntcbiAgICB2YXIgZmlsdGVyTWFuYWdlciA9IHJlbmRlcmVyLmZpbHRlck1hbmFnZXI7XG5cbiAgICB2YXIgc2hhZGVyID0gdGhpcy5nZXRTaGFkZXIoIHJlbmRlcmVyICk7XG4gICAgIC8vIGRyYXcgdGhlIGZpbHRlci4uLlxuICAgIGZpbHRlck1hbmFnZXIuYXBwbHlGaWx0ZXIoc2hhZGVyLCBpbnB1dCwgb3V0cHV0KTtcbn07XG4iLCJ2YXIgQWJzdHJhY3RGaWx0ZXIgPSByZXF1aXJlKCcuL0Fic3RyYWN0RmlsdGVyJyksXG4gICAgbWF0aCA9ICByZXF1aXJlKCcuLi8uLi8uLi9tYXRoJyk7XG5cbi8vIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL3N1YnN0YWNrL2JyZnMvaXNzdWVzLzI1XG5cblxuLyoqXG4gKiBUaGUgU3ByaXRlTWFza0ZpbHRlciBjbGFzc1xuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5BYnN0cmFjdEZpbHRlclxuICogQG1lbWJlcm9mIFBJWElcbiAqIEBwYXJhbSBzcHJpdGUge1BJWEkuU3ByaXRlfSB0aGUgdGFyZ2V0IHNwcml0ZVxuICovXG5mdW5jdGlvbiBTcHJpdGVNYXNrRmlsdGVyKHNwcml0ZSlcbntcbiAgICB2YXIgbWFza01hdHJpeCA9IG5ldyBtYXRoLk1hdHJpeCgpO1xuXG4gICAgQWJzdHJhY3RGaWx0ZXIuY2FsbCh0aGlzLFxuICAgICAgICBcImF0dHJpYnV0ZSB2ZWMyIGFWZXJ0ZXhQb3NpdGlvbjtcXG5hdHRyaWJ1dGUgdmVjMiBhVGV4dHVyZUNvb3JkO1xcbmF0dHJpYnV0ZSB2ZWM0IGFDb2xvcjtcXG5cXG51bmlmb3JtIG1hdDMgcHJvamVjdGlvbk1hdHJpeDtcXG51bmlmb3JtIG1hdDMgb3RoZXJNYXRyaXg7XFxuXFxudmFyeWluZyB2ZWMyIHZNYXNrQ29vcmQ7XFxudmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7XFxudmFyeWluZyB2ZWM0IHZDb2xvcjtcXG5cXG52b2lkIG1haW4odm9pZClcXG57XFxuICAgIGdsX1Bvc2l0aW9uID0gdmVjNCgocHJvamVjdGlvbk1hdHJpeCAqIHZlYzMoYVZlcnRleFBvc2l0aW9uLCAxLjApKS54eSwgMC4wLCAxLjApO1xcbiAgICB2VGV4dHVyZUNvb3JkID0gYVRleHR1cmVDb29yZDtcXG4gICAgdk1hc2tDb29yZCA9ICggb3RoZXJNYXRyaXggKiB2ZWMzKCBhVGV4dHVyZUNvb3JkLCAxLjApICApLnh5O1xcbiAgICB2Q29sb3IgPSB2ZWM0KGFDb2xvci5yZ2IgKiBhQ29sb3IuYSwgYUNvbG9yLmEpO1xcbn1cXG5cIixcbiAgICAgICAgXCJwcmVjaXNpb24gbG93cCBmbG9hdDtcXG5cXG52YXJ5aW5nIHZlYzIgdk1hc2tDb29yZDtcXG52YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDtcXG52YXJ5aW5nIHZlYzQgdkNvbG9yO1xcblxcbnVuaWZvcm0gc2FtcGxlcjJEIHVTYW1wbGVyO1xcbnVuaWZvcm0gZmxvYXQgYWxwaGE7XFxudW5pZm9ybSBzYW1wbGVyMkQgbWFzaztcXG5cXG52b2lkIG1haW4odm9pZClcXG57XFxuICAgIC8vIGNoZWNrIGNsaXAhIHRoaXMgd2lsbCBzdG9wIHRoZSBtYXNrIGJsZWVkaW5nIG91dCBmcm9tIHRoZSBlZGdlc1xcbiAgICB2ZWMyIHRleHQgPSBhYnMoIHZNYXNrQ29vcmQgLSAwLjUgKTtcXG4gICAgdGV4dCA9IHN0ZXAoMC41LCB0ZXh0KTtcXG4gICAgZmxvYXQgY2xpcCA9IDEuMCAtIG1heCh0ZXh0LnksIHRleHQueCk7XFxuICAgIHZlYzQgb3JpZ2luYWwgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZUZXh0dXJlQ29vcmQpO1xcbiAgICB2ZWM0IG1hc2t5ID0gdGV4dHVyZTJEKG1hc2ssIHZNYXNrQ29vcmQpO1xcbiAgICBvcmlnaW5hbCAqPSAobWFza3kuciAqIG1hc2t5LmEgKiBhbHBoYSAqIGNsaXApO1xcbiAgICBnbF9GcmFnQ29sb3IgPSBvcmlnaW5hbDtcXG59XFxuXCIsXG4gICAgICAgIHtcbiAgICAgICAgICAgIG1hc2s6ICAgICAgICAgICB7IHR5cGU6ICdzYW1wbGVyMkQnLCB2YWx1ZTogc3ByaXRlLl90ZXh0dXJlIH0sXG4gICAgICAgICAgICBhbHBoYTogICAgICAgICAgeyB0eXBlOiAnZicsIHZhbHVlOiAxfSxcbiAgICAgICAgICAgIG90aGVyTWF0cml4OiAgICB7IHR5cGU6ICdtYXQzJywgdmFsdWU6IG1hc2tNYXRyaXgudG9BcnJheSh0cnVlKSB9XG4gICAgICAgIH1cbiAgICApO1xuXG4gICAgdGhpcy5tYXNrU3ByaXRlID0gc3ByaXRlO1xuICAgIHRoaXMubWFza01hdHJpeCA9IG1hc2tNYXRyaXg7XG59XG5cblNwcml0ZU1hc2tGaWx0ZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShBYnN0cmFjdEZpbHRlci5wcm90b3R5cGUpO1xuU3ByaXRlTWFza0ZpbHRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBTcHJpdGVNYXNrRmlsdGVyO1xubW9kdWxlLmV4cG9ydHMgPSBTcHJpdGVNYXNrRmlsdGVyO1xuXG4vKipcbiAqIEFwcGxpZXMgdGhlIGZpbHRlclxuICpcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5XZWJHTFJlbmRlcmVyfSBUaGUgcmVuZGVyZXIgdG8gcmV0cmlldmUgdGhlIGZpbHRlciBmcm9tXG4gKiBAcGFyYW0gaW5wdXQge1BJWEkuUmVuZGVyVGFyZ2V0fVxuICogQHBhcmFtIG91dHB1dCB7UElYSS5SZW5kZXJUYXJnZXR9XG4gKi9cblNwcml0ZU1hc2tGaWx0ZXIucHJvdG90eXBlLmFwcGx5RmlsdGVyID0gZnVuY3Rpb24gKHJlbmRlcmVyLCBpbnB1dCwgb3V0cHV0KVxue1xuICAgIHZhciBmaWx0ZXJNYW5hZ2VyID0gcmVuZGVyZXIuZmlsdGVyTWFuYWdlcjtcblxuICAgIHRoaXMudW5pZm9ybXMubWFzay52YWx1ZSA9IHRoaXMubWFza1Nwcml0ZS5fdGV4dHVyZTtcblxuICAgIGZpbHRlck1hbmFnZXIuY2FsY3VsYXRlTWFwcGVkTWF0cml4KGlucHV0LmZyYW1lLCB0aGlzLm1hc2tTcHJpdGUsIHRoaXMubWFza01hdHJpeCk7XG5cbiAgICB0aGlzLnVuaWZvcm1zLm90aGVyTWF0cml4LnZhbHVlID0gdGhpcy5tYXNrTWF0cml4LnRvQXJyYXkodHJ1ZSk7XG4gICAgdGhpcy51bmlmb3Jtcy5hbHBoYS52YWx1ZSA9IHRoaXMubWFza1Nwcml0ZS53b3JsZEFscGhhO1xuXG4gICAgdmFyIHNoYWRlciA9IHRoaXMuZ2V0U2hhZGVyKHJlbmRlcmVyKTtcbiAgICAgLy8gZHJhdyB0aGUgZmlsdGVyLi4uXG4gICAgZmlsdGVyTWFuYWdlci5hcHBseUZpbHRlcihzaGFkZXIsIGlucHV0LCBvdXRwdXQpO1xufTtcblxuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhTcHJpdGVNYXNrRmlsdGVyLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFRoZSB0ZXh0dXJlIHVzZWQgZm9yIHRoZSBkaXNwbGFjZW1lbnQgbWFwLiBNdXN0IGJlIHBvd2VyIG9mIDIgc2l6ZWQgdGV4dHVyZS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuVGV4dHVyZX1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5TcHJpdGVNYXNrRmlsdGVyI1xuICAgICAqL1xuICAgIG1hcDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVuaWZvcm1zLm1hc2sudmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLm1hc2sudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBUaGUgb2Zmc2V0IHVzZWQgdG8gbW92ZSB0aGUgZGlzcGxhY2VtZW50IG1hcC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuUG9pbnR9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuU3ByaXRlTWFza0ZpbHRlciNcbiAgICAgKi9cbiAgICBvZmZzZXQ6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbigpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVuaWZvcm1zLm9mZnNldC52YWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbih2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy5vZmZzZXQudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuIiwidmFyIFdlYkdMTWFuYWdlciA9IHJlcXVpcmUoJy4vV2ViR0xNYW5hZ2VyJyk7XG5cbi8qKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQGV4dGVuZHMgUElYSS5XZWJHbE1hbmFnZXJcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5XZWJHTFJlbmRlcmVyfSBUaGUgcmVuZGVyZXIgdGhpcyBtYW5hZ2VyIHdvcmtzIGZvci5cbiAqL1xuZnVuY3Rpb24gQmxlbmRNb2RlTWFuYWdlcihyZW5kZXJlcilcbntcbiAgICBXZWJHTE1hbmFnZXIuY2FsbCh0aGlzLCByZW5kZXJlcik7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy5jdXJyZW50QmxlbmRNb2RlID0gOTk5OTk7XG59XG5cbkJsZW5kTW9kZU1hbmFnZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShXZWJHTE1hbmFnZXIucHJvdG90eXBlKTtcbkJsZW5kTW9kZU1hbmFnZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gQmxlbmRNb2RlTWFuYWdlcjtcbm1vZHVsZS5leHBvcnRzID0gQmxlbmRNb2RlTWFuYWdlcjtcblxuLyoqXG4gKiBTZXRzLXVwIHRoZSBnaXZlbiBibGVuZE1vZGUgZnJvbSBXZWJHTCdzIHBvaW50IG9mIHZpZXcuXG4gKlxuICogQHBhcmFtIGJsZW5kTW9kZSB7bnVtYmVyfSB0aGUgYmxlbmRNb2RlLCBzaG91bGQgYmUgYSBQaXhpIGNvbnN0LCBzdWNoIGFzIGBQSVhJLkJMRU5EX01PREVTLkFERGAuIFNlZVxuICogIHtAbGluayBQSVhJLkJMRU5EX01PREVTfSBmb3IgcG9zc2libGUgdmFsdWVzLlxuICovXG5CbGVuZE1vZGVNYW5hZ2VyLnByb3RvdHlwZS5zZXRCbGVuZE1vZGUgPSBmdW5jdGlvbiAoYmxlbmRNb2RlKVxue1xuICAgIGlmICh0aGlzLmN1cnJlbnRCbGVuZE1vZGUgPT09IGJsZW5kTW9kZSlcbiAgICB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICB0aGlzLmN1cnJlbnRCbGVuZE1vZGUgPSBibGVuZE1vZGU7XG5cbiAgICB2YXIgbW9kZSA9IHRoaXMucmVuZGVyZXIuYmxlbmRNb2Rlc1t0aGlzLmN1cnJlbnRCbGVuZE1vZGVdO1xuICAgIHRoaXMucmVuZGVyZXIuZ2wuYmxlbmRGdW5jKG1vZGVbMF0sIG1vZGVbMV0pO1xuXG4gICAgcmV0dXJuIHRydWU7XG59O1xuIiwidmFyIFdlYkdMTWFuYWdlciA9IHJlcXVpcmUoJy4vV2ViR0xNYW5hZ2VyJyksXG4gICAgUmVuZGVyVGFyZ2V0ID0gcmVxdWlyZSgnLi4vdXRpbHMvUmVuZGVyVGFyZ2V0JyksXG4gICAgQ09OU1QgPSByZXF1aXJlKCcuLi8uLi8uLi9jb25zdCcpLFxuICAgIFF1YWQgPSByZXF1aXJlKCcuLi91dGlscy9RdWFkJyksXG4gICAgbWF0aCA9ICByZXF1aXJlKCcuLi8uLi8uLi9tYXRoJyk7XG5cbi8qKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQGV4dGVuZHMgUElYSS5XZWJHTE1hbmFnZXJcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5XZWJHTFJlbmRlcmVyfSBUaGUgcmVuZGVyZXIgdGhpcyBtYW5hZ2VyIHdvcmtzIGZvci5cbiAqL1xuZnVuY3Rpb24gRmlsdGVyTWFuYWdlcihyZW5kZXJlcilcbntcbiAgICBXZWJHTE1hbmFnZXIuY2FsbCh0aGlzLCByZW5kZXJlcik7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtvYmplY3RbXX1cbiAgICAgKi9cbiAgICB0aGlzLmZpbHRlclN0YWNrID0gW107XG5cbiAgICB0aGlzLmZpbHRlclN0YWNrLnB1c2goe1xuICAgICAgICByZW5kZXJUYXJnZXQ6cmVuZGVyZXIuY3VycmVudFJlbmRlclRhcmdldCxcbiAgICAgICAgZmlsdGVyOltdLFxuICAgICAgICBib3VuZHM6bnVsbFxuICAgIH0pO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7UElYSS5SZW5kZXJUYXJnZXRbXX1cbiAgICAgKi9cbiAgICB0aGlzLnRleHR1cmVQb29sID0gW107XG5cbiAgICAvKipcbiAgICAgKiBUaGUgc2l6ZSBvZiB0aGUgdGV4dHVyZVxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5SZWN0YW5nbGV9XG4gICAgICovXG4gICAgLy8gbGlzdGVuIGZvciBjb250ZXh0IGFuZCB1cGRhdGUgbmVjZXNzYXJ5IGJ1ZmZlcnNcbiAgICAvL1RPRE8gbWFrZSB0aGlzIGR5bmFtaWMhXG4gICAgLy9UT0RPIHRlc3QgdGhpcyBvdXQgYnkgZm9yY2VzIHBvd2VyIG9mIHR3bz9cbiAgICB0aGlzLnRleHR1cmVTaXplID0gbmV3IG1hdGguUmVjdGFuZ2xlKDAsIDAsIHJlbmRlcmVyLndpZHRoLCByZW5kZXJlci5oZWlnaHQpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGN1cnJlbnQgZnJhbWVcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuUmVjdGFuZ2xlfVxuICAgICAqL1xuICAgIHRoaXMuY3VycmVudEZyYW1lID0gbnVsbDtcbn1cblxuRmlsdGVyTWFuYWdlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFdlYkdMTWFuYWdlci5wcm90b3R5cGUpO1xuRmlsdGVyTWFuYWdlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBGaWx0ZXJNYW5hZ2VyO1xubW9kdWxlLmV4cG9ydHMgPSBGaWx0ZXJNYW5hZ2VyO1xuXG5cbi8qKlxuICogQ2FsbGVkIHdoZW4gdGhlcmUgaXMgYSBXZWJHTCBjb250ZXh0IGNoYW5nZS5cbiAqXG4gKi9cbkZpbHRlck1hbmFnZXIucHJvdG90eXBlLm9uQ29udGV4dENoYW5nZSA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy50ZXh0dXJlUG9vbC5sZW5ndGggPSAwO1xuXG4gICAgdmFyIGdsID0gdGhpcy5yZW5kZXJlci5nbDtcbiAgICB0aGlzLnF1YWQgPSBuZXcgUXVhZChnbCk7XG59O1xuXG4vKipcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5XZWJHTFJlbmRlcmVyfVxuICogQHBhcmFtIGJ1ZmZlciB7QXJyYXlCdWZmZXJ9XG4gKi9cbkZpbHRlck1hbmFnZXIucHJvdG90eXBlLnNldEZpbHRlclN0YWNrID0gZnVuY3Rpb24gKCBmaWx0ZXJTdGFjayApXG57XG4gICAgdGhpcy5maWx0ZXJTdGFjayA9IGZpbHRlclN0YWNrO1xufTtcblxuLyoqXG4gKiBBcHBsaWVzIHRoZSBmaWx0ZXIgYW5kIGFkZHMgaXQgdG8gdGhlIGN1cnJlbnQgZmlsdGVyIHN0YWNrLlxuICpcbiAqIEBwYXJhbSB0YXJnZXQge1BJWEkuRGlzcGxheU9iamVjdH1cbiAqIEBwYXJhbSBmaWx0ZXJzIHtQSVhJLkFic3RyYWN0RmlsZXJbXX0gdGhlIGZpbHRlcnMgdGhhdCB3aWxsIGJlIHB1c2hlZCB0byB0aGUgY3VycmVudCBmaWx0ZXIgc3RhY2tcbiAqL1xuRmlsdGVyTWFuYWdlci5wcm90b3R5cGUucHVzaEZpbHRlciA9IGZ1bmN0aW9uICh0YXJnZXQsIGZpbHRlcnMpXG57XG4gICAgLy8gZ2V0IHRoZSBib3VuZHMgb2YgdGhlIG9iamVjdC4uXG4gICAgLy8gVE9ETyByZXBsYWNlIGNsb25lIHdpdGggYSBjb3B5IHRvIHNhdmUgb2JqZWN0IGNyZWF0aW9uXG4gICAgdmFyIGJvdW5kcyA9IHRhcmdldC5maWx0ZXJBcmVhID8gdGFyZ2V0LmZpbHRlckFyZWEuY2xvbmUoKSA6IHRhcmdldC5nZXRCb3VuZHMoKTtcblxuICAgIC8vYm91bmRzID0gYm91bmRzLmNsb25lKCk7XG5cbiAgICAvLyByb3VuZCBvZmYgdGhlIHJlY3RhbmdsZSB0byBnZXQgYSBuaWNlIHNtb29vb29vb3RoIGZpbHRlciA6KVxuICAgIGJvdW5kcy54ID0gYm91bmRzLnggfCAwO1xuICAgIGJvdW5kcy55ID0gYm91bmRzLnkgfCAwO1xuICAgIGJvdW5kcy53aWR0aCA9IGJvdW5kcy53aWR0aCB8IDA7XG4gICAgYm91bmRzLmhlaWdodCA9IGJvdW5kcy5oZWlnaHQgfCAwO1xuXG5cbiAgICAvLyBwYWRkaW5nIVxuICAgIHZhciBwYWRkaW5nID0gZmlsdGVyc1swXS5wYWRkaW5nIHwgMDtcbiAgICBib3VuZHMueCAtPSBwYWRkaW5nO1xuICAgIGJvdW5kcy55IC09IHBhZGRpbmc7XG4gICAgYm91bmRzLndpZHRoICs9IHBhZGRpbmcgKiAyO1xuICAgIGJvdW5kcy5oZWlnaHQgKz0gcGFkZGluZyAqIDI7XG5cblxuICAgIGlmKHRoaXMucmVuZGVyZXIuY3VycmVudFJlbmRlclRhcmdldC50cmFuc2Zvcm0pXG4gICAge1xuICAgICAgICAvL1RPRE8gdGhpcyB3aWxsIGJyZWFrIGlmIHRoZSByZW5kZXJUZXh0dXJlIHRyYW5zZm9ybSBpcyBhbnl0aGluZyBvdGhlciB0aGFuIGEgdHJhbnNsYXRpb24uXG4gICAgICAgIC8vV2lsbCBuZWVkIHRvIHRha2UgdGhlIGZ1bGwgbWF0cml4IHRyYW5zZm9ybSBpbnRvIGFjb3VudC4uXG4gICAgICAgIHZhciB0cmFuc2Zvcm0gPSB0aGlzLnJlbmRlcmVyLmN1cnJlbnRSZW5kZXJUYXJnZXQudHJhbnNmb3JtO1xuXG4gICAgICAgIGJvdW5kcy54ICs9IHRyYW5zZm9ybS50eDtcbiAgICAgICAgYm91bmRzLnkgKz0gdHJhbnNmb3JtLnR5O1xuXG4gICAgICAgIHRoaXMuY2FwRmlsdGVyQXJlYSggYm91bmRzICk7XG5cbiAgICAgICAgYm91bmRzLnggLT0gdHJhbnNmb3JtLnR4O1xuICAgICAgICBib3VuZHMueSAtPSB0cmFuc2Zvcm0udHk7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgICB0aGlzLmNhcEZpbHRlckFyZWEoIGJvdW5kcyApO1xuICAgIH1cblxuICAgIGlmKGJvdW5kcy53aWR0aCA+IDAgJiYgYm91bmRzLmhlaWdodCA+IDApXG4gICAge1xuICAgICAgICB0aGlzLmN1cnJlbnRGcmFtZSA9IGJvdW5kcztcblxuICAgICAgICB2YXIgdGV4dHVyZSA9IHRoaXMuZ2V0UmVuZGVyVGFyZ2V0KCk7XG5cbiAgICAgICAgdGhpcy5yZW5kZXJlci5zZXRSZW5kZXJUYXJnZXQodGV4dHVyZSk7XG5cbiAgICAgICAgLy8gY2xlYXIgdGhlIHRleHR1cmUuLlxuICAgICAgICB0ZXh0dXJlLmNsZWFyKCk7XG5cbiAgICAgICAgLy8gVE9ETyBnZXQgcmlkIG9mIG9iamVjdCBjcmVhdGlvbiFcbiAgICAgICAgdGhpcy5maWx0ZXJTdGFjay5wdXNoKHtcbiAgICAgICAgICAgIHJlbmRlclRhcmdldDogdGV4dHVyZSxcbiAgICAgICAgICAgIGZpbHRlcjogZmlsdGVyc1xuICAgICAgICB9KTtcblxuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICAvLyBwdXNoIHNvbXRoaW5nIG9uIHRvIHRoZSBzdGFjayB0aGF0IGlzIGVtcHR5XG4gICAgICAgIHRoaXMuZmlsdGVyU3RhY2sucHVzaCh7XG4gICAgICAgICAgICByZW5kZXJUYXJnZXQ6IG51bGwsXG4gICAgICAgICAgICBmaWx0ZXI6IGZpbHRlcnNcbiAgICAgICAgfSk7XG4gICAgfVxufTtcblxuXG4vKipcbiAqIFJlbW92ZXMgdGhlIGxhc3QgZmlsdGVyIGZyb20gdGhlIGZpbHRlciBzdGFjayBhbmQgcmV0dXJucyBpdC5cbiAqXG4gKi9cbkZpbHRlck1hbmFnZXIucHJvdG90eXBlLnBvcEZpbHRlciA9IGZ1bmN0aW9uICgpXG57XG4gICAgdmFyIGZpbHRlckRhdGEgPSB0aGlzLmZpbHRlclN0YWNrLnBvcCgpO1xuICAgIHZhciBwcmV2aW91c0ZpbHRlckRhdGEgPSB0aGlzLmZpbHRlclN0YWNrW3RoaXMuZmlsdGVyU3RhY2subGVuZ3RoLTFdO1xuXG4gICAgdmFyIGlucHV0ID0gZmlsdGVyRGF0YS5yZW5kZXJUYXJnZXQ7XG5cbiAgICAvLyBpZiB0aGUgcmVuZGVyVGFyZ2V0IGlzIG51bGwgdGhlbiB3ZSBkb24ndCBhcHBseSB0aGUgZmlsdGVyIGFzIGl0cyBvZmZzY3JlZW5cbiAgICBpZighZmlsdGVyRGF0YS5yZW5kZXJUYXJnZXQpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFyIG91dHB1dCA9IHByZXZpb3VzRmlsdGVyRGF0YS5yZW5kZXJUYXJnZXQ7XG5cbiAgICAvLyB1c2UgcHJvZ3JhbVxuICAgIHZhciBnbCA9IHRoaXMucmVuZGVyZXIuZ2w7XG5cblxuICAgIHRoaXMuY3VycmVudEZyYW1lID0gaW5wdXQuZnJhbWU7XG5cbiAgICB0aGlzLnF1YWQubWFwKHRoaXMudGV4dHVyZVNpemUsIGlucHV0LmZyYW1lKTtcblxuXG4gICAgLy8gVE9ETy4uIHRoaXMgcHJvYmFibHkgb25seSBuZWVkcyB0byBiZSBkb25lIG9uY2UhXG4gICAgZ2wuYmluZEJ1ZmZlcihnbC5BUlJBWV9CVUZGRVIsIHRoaXMucXVhZC52ZXJ0ZXhCdWZmZXIpO1xuICAgIGdsLmJpbmRCdWZmZXIoZ2wuRUxFTUVOVF9BUlJBWV9CVUZGRVIsIHRoaXMucXVhZC5pbmRleEJ1ZmZlcik7XG5cbiAgICB2YXIgZmlsdGVycyA9IGZpbHRlckRhdGEuZmlsdGVyO1xuXG4gICAgLy8gYXNzdW1pbmcgYWxsIGZpbHRlcnMgZm9sbG93IHRoZSBjb3JyZWN0IGZvcm1hdD8/XG4gICAgZ2wudmVydGV4QXR0cmliUG9pbnRlcih0aGlzLnJlbmRlcmVyLnNoYWRlck1hbmFnZXIuZGVmYXVsdFNoYWRlci5hdHRyaWJ1dGVzLmFWZXJ0ZXhQb3NpdGlvbiwgMiwgZ2wuRkxPQVQsIGZhbHNlLCAwLCAwKTtcbiAgICBnbC52ZXJ0ZXhBdHRyaWJQb2ludGVyKHRoaXMucmVuZGVyZXIuc2hhZGVyTWFuYWdlci5kZWZhdWx0U2hhZGVyLmF0dHJpYnV0ZXMuYVRleHR1cmVDb29yZCwgMiwgZ2wuRkxPQVQsIGZhbHNlLCAwLCAyICogNCAqIDQpO1xuICAgIGdsLnZlcnRleEF0dHJpYlBvaW50ZXIodGhpcy5yZW5kZXJlci5zaGFkZXJNYW5hZ2VyLmRlZmF1bHRTaGFkZXIuYXR0cmlidXRlcy5hQ29sb3IsIDQsIGdsLkZMT0FULCBmYWxzZSwgMCwgNCAqIDQgKiA0KTtcblxuICAgIC8vIHJlc3RvcmUgdGhlIG5vcm1hbCBibGVuZG1vZGUhXG4gICAgdGhpcy5yZW5kZXJlci5ibGVuZE1vZGVNYW5hZ2VyLnNldEJsZW5kTW9kZShDT05TVC5CTEVORF9NT0RFUy5OT1JNQUwpO1xuXG4gICAgaWYgKGZpbHRlcnMubGVuZ3RoID09PSAxKVxuICAgIHtcbiAgICAgICAgLy8gVE9ETyAoY2VuZ2xlcikgLSBUaGVyZSBoYXMgdG8gYmUgYSBiZXR0ZXIgd2F5IHRoZW4gc2V0dGluZyB0aGlzIGVhY2ggdGltZT9cbiAgICAgICAgaWYgKGZpbHRlcnNbMF0udW5pZm9ybXMuZGltZW5zaW9ucylcbiAgICAgICAge1xuICAgICAgICAgICAgZmlsdGVyc1swXS51bmlmb3Jtcy5kaW1lbnNpb25zLnZhbHVlWzBdID0gdGhpcy5yZW5kZXJlci53aWR0aDtcbiAgICAgICAgICAgIGZpbHRlcnNbMF0udW5pZm9ybXMuZGltZW5zaW9ucy52YWx1ZVsxXSA9IHRoaXMucmVuZGVyZXIuaGVpZ2h0O1xuICAgICAgICAgICAgZmlsdGVyc1swXS51bmlmb3Jtcy5kaW1lbnNpb25zLnZhbHVlWzJdID0gdGhpcy5xdWFkLnZlcnRpY2VzWzBdO1xuICAgICAgICAgICAgZmlsdGVyc1swXS51bmlmb3Jtcy5kaW1lbnNpb25zLnZhbHVlWzNdID0gdGhpcy5xdWFkLnZlcnRpY2VzWzVdO1xuICAgICAgICB9XG5cbiAgICAgICAgZmlsdGVyc1swXS5hcHBseUZpbHRlciggdGhpcy5yZW5kZXJlciwgaW5wdXQsIG91dHB1dCApO1xuICAgICAgICB0aGlzLnJldHVyblJlbmRlclRhcmdldCggaW5wdXQgKTtcblxuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICB2YXIgZmxpcFRleHR1cmUgPSBpbnB1dDtcbiAgICAgICAgdmFyIGZsb3BUZXh0dXJlID0gdGhpcy5nZXRSZW5kZXJUYXJnZXQodHJ1ZSk7XG5cbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBmaWx0ZXJzLmxlbmd0aC0xOyBpKyspXG4gICAgICAgIHtcbiAgICAgICAgICAgIHZhciBmaWx0ZXIgPSBmaWx0ZXJzW2ldO1xuXG4gICAgICAgICAgICAvLyBUT0RPIChjZW5nbGVyKSAtIFRoZXJlIGhhcyB0byBiZSBhIGJldHRlciB3YXkgdGhlbiBzZXR0aW5nIHRoaXMgZWFjaCB0aW1lP1xuICAgICAgICAgICAgaWYgKGZpbHRlci51bmlmb3Jtcy5kaW1lbnNpb25zKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGZpbHRlci51bmlmb3Jtcy5kaW1lbnNpb25zLnZhbHVlWzBdID0gdGhpcy5yZW5kZXJlci53aWR0aDtcbiAgICAgICAgICAgICAgICBmaWx0ZXIudW5pZm9ybXMuZGltZW5zaW9ucy52YWx1ZVsxXSA9IHRoaXMucmVuZGVyZXIuaGVpZ2h0O1xuICAgICAgICAgICAgICAgIGZpbHRlci51bmlmb3Jtcy5kaW1lbnNpb25zLnZhbHVlWzJdID0gdGhpcy5xdWFkLnZlcnRpY2VzWzBdO1xuICAgICAgICAgICAgICAgIGZpbHRlci51bmlmb3Jtcy5kaW1lbnNpb25zLnZhbHVlWzNdID0gdGhpcy5xdWFkLnZlcnRpY2VzWzVdO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBmaWx0ZXIuYXBwbHlGaWx0ZXIoIHRoaXMucmVuZGVyZXIsIGZsaXBUZXh0dXJlLCBmbG9wVGV4dHVyZSApO1xuXG4gICAgICAgICAgICB2YXIgdGVtcCA9IGZsaXBUZXh0dXJlO1xuICAgICAgICAgICAgZmxpcFRleHR1cmUgPSBmbG9wVGV4dHVyZTtcbiAgICAgICAgICAgIGZsb3BUZXh0dXJlID0gdGVtcDtcbiAgICAgICAgfVxuXG4gICAgICAgIGZpbHRlcnNbZmlsdGVycy5sZW5ndGgtMV0uYXBwbHlGaWx0ZXIoIHRoaXMucmVuZGVyZXIsIGZsaXBUZXh0dXJlLCBvdXRwdXQgKTtcblxuICAgICAgICB0aGlzLnJldHVyblJlbmRlclRhcmdldCggZmxpcFRleHR1cmUgKTtcbiAgICAgICAgdGhpcy5yZXR1cm5SZW5kZXJUYXJnZXQoIGZsb3BUZXh0dXJlICk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZpbHRlckRhdGEuZmlsdGVyO1xufTtcblxuLyoqXG4gKiBHcmFicyBhbiByZW5kZXIgdGFyZ2V0IGZyb20gdGhlIGludGVybmFsIHBvb2xcbiAqXG4gKiBAcGFyYW0gY2xlYXIge2Jvb2xlYW59IFdoZXRoZXIgb3Igbm90IHdlIG5lZWQgdG8gY2xlYXIgdGhlIFJlbmRlclRhcmdldFxuICogQHJldHVybiB7UmVuZGVyVGFyZ2V0fVxuICovXG5GaWx0ZXJNYW5hZ2VyLnByb3RvdHlwZS5nZXRSZW5kZXJUYXJnZXQgPSBmdW5jdGlvbiAoIGNsZWFyIClcbntcbiAgICB2YXIgcmVuZGVyVGFyZ2V0ID0gdGhpcy50ZXh0dXJlUG9vbC5wb3AoKSB8fCBuZXcgUmVuZGVyVGFyZ2V0KHRoaXMucmVuZGVyZXIuZ2wsIHRoaXMudGV4dHVyZVNpemUud2lkdGgsIHRoaXMudGV4dHVyZVNpemUuaGVpZ2h0LCBDT05TVC5TQ0FMRV9NT0RFUy5MSU5FQVIsIHRoaXMucmVuZGVyZXIucmVzb2x1dGlvbiAqIENPTlNULkZJTFRFUl9SRVNPTFVUSU9OKTtcbiAgICByZW5kZXJUYXJnZXQuZnJhbWUgPSB0aGlzLmN1cnJlbnRGcmFtZTtcblxuICAgIGlmIChjbGVhcilcbiAgICB7XG4gICAgICAgIHJlbmRlclRhcmdldC5jbGVhcih0cnVlKTtcbiAgICB9XG5cbiAgICByZXR1cm4gcmVuZGVyVGFyZ2V0O1xufTtcblxuLypcbiAqIFJldHVybnMgYSBSZW5kZXJUYXJnZXQgdG8gdGhlIGludGVybmFsIHBvb2xcbiAqIEBwYXJhbSByZW5kZXJUYXJnZXQge1JlbmRlclRhcmdldH0gVGhlIFJlbmRlclRhcmdldCB3ZSB3YW50IHRvIHJldHVybiB0byB0aGUgcG9vbFxuICovXG5GaWx0ZXJNYW5hZ2VyLnByb3RvdHlwZS5yZXR1cm5SZW5kZXJUYXJnZXQgPSBmdW5jdGlvbiAocmVuZGVyVGFyZ2V0KVxue1xuICAgIHRoaXMudGV4dHVyZVBvb2wucHVzaCggcmVuZGVyVGFyZ2V0ICk7XG59O1xuXG4vKlxuICogQXBwbGllcyB0aGUgZmlsdGVyXG4gKiBAcGFyYW0gc2hhZGVyIHtTaGFkZXJ9IFRoZSBzaGFkZXIgdG8gdXBsb2FkXG4gKiBAcGFyYW0gaW5wdXRUYXJnZXQge1JlbmRlclRhcmdldH1cbiAqIEBwYXJhbSBvdXRwdXRUYXJnZXQge1JlbmRlclRhcmdldH1cbiAqIEBwYXJhbSBjbGVhciB7Ym9vbGVhbn0gV2hldGhlciBvciBub3Qgd2Ugd2FudCB0byBjbGVhciB0aGUgb3V0cHV0VGFyZ2V0XG4gKi9cbkZpbHRlck1hbmFnZXIucHJvdG90eXBlLmFwcGx5RmlsdGVyID0gZnVuY3Rpb24gKHNoYWRlciwgaW5wdXRUYXJnZXQsIG91dHB1dFRhcmdldCwgY2xlYXIpXG57XG4gICAgdmFyIGdsID0gdGhpcy5yZW5kZXJlci5nbDtcblxuICAgIHRoaXMucmVuZGVyZXIuc2V0UmVuZGVyVGFyZ2V0KG91dHB1dFRhcmdldCk7XG5cbiAgICBpZiAoY2xlYXIpXG4gICAge1xuICAgICAgICBvdXRwdXRUYXJnZXQuY2xlYXIoKTtcbiAgICB9XG5cbiAgICAvLyBzZXQgdGhlIHNoYWRlclxuICAgIHRoaXMucmVuZGVyZXIuc2hhZGVyTWFuYWdlci5zZXRTaGFkZXIoc2hhZGVyKTtcblxuICAgIC8vIFRPRE8gKGNlbmdsZXIpIC0gQ2FuIHRoaXMgYmUgY2FjaGVkIGFuZCBub3QgYHRvQXJyYXlgZWQgZWFjaCBmcmFtZT9cbiAgICBzaGFkZXIudW5pZm9ybXMucHJvamVjdGlvbk1hdHJpeC52YWx1ZSA9IHRoaXMucmVuZGVyZXIuY3VycmVudFJlbmRlclRhcmdldC5wcm9qZWN0aW9uTWF0cml4LnRvQXJyYXkodHJ1ZSk7XG5cbiAgICAvL1RPRE8gY2FuIHRoaXMgYmUgb3B0aW1pc2VkP1xuICAgIHNoYWRlci5zeW5jVW5pZm9ybXMoKTtcbi8qXG4gICAgZ2wudmVydGV4QXR0cmliUG9pbnRlcihzaGFkZXIuYXR0cmlidXRlcy5hVmVydGV4UG9zaXRpb24sIDIsIGdsLkZMT0FULCBmYWxzZSwgMCwgMCk7XG4gICAgZ2wudmVydGV4QXR0cmliUG9pbnRlcihzaGFkZXIuYXR0cmlidXRlcy5hVGV4dHVyZUNvb3JkLCAyLCBnbC5GTE9BVCwgZmFsc2UsIDAsIDIgKiA0ICogNCk7XG4gICAgZ2wudmVydGV4QXR0cmliUG9pbnRlcihzaGFkZXIuYXR0cmlidXRlcy5hQ29sb3IsIDQsIGdsLkZMT0FULCBmYWxzZSwgMCwgNCAqIDQgKiA0KTtcbiovXG5cbiAgICBnbC5hY3RpdmVUZXh0dXJlKGdsLlRFWFRVUkUwKTtcbiAgICBnbC5iaW5kVGV4dHVyZShnbC5URVhUVVJFXzJELCBpbnB1dFRhcmdldC50ZXh0dXJlKTtcblxuICAgIGdsLmRyYXdFbGVtZW50cyhnbC5UUklBTkdMRVMsIDYsIGdsLlVOU0lHTkVEX1NIT1JULCAwICk7XG4gICAgdGhpcy5yZW5kZXJlci5kcmF3Q291bnQrKztcbn07XG5cbi8qXG4gKiBDYWxjdWxhdGVzIHRoZSBtYXBwZWQgbWF0cml4XG4gKiBAcGFyYW0gZmlsdGVyQXJlYSB7UmVjdGFuZ2xlfSBUaGUgZmlsdGVyIGFyZWFcbiAqIEBwYXJhbSBzcHJpdGUge1Nwcml0ZX0gdGhlIHRhcmdldCBzcHJpdGVcbiAqIEBwYXJhbSBvdXRwdXRNYXRyaXgge01hdHJpeH0gQGFsdmluXG4gKi9cbi8vIFRPRE8gcGxheWluZyBhcm91bmQgaGVyZS4uIHRoaXMgaXMgdGVtcG9yYXJ5IC0gKHdpbGwgZW5kIHVwIGluIHRoZSBzaGFkZXIpXG5GaWx0ZXJNYW5hZ2VyLnByb3RvdHlwZS5jYWxjdWxhdGVNYXBwZWRNYXRyaXggPSBmdW5jdGlvbiAoZmlsdGVyQXJlYSwgc3ByaXRlLCBvdXRwdXRNYXRyaXgpXG57XG4gICAgdmFyIHdvcmxkVHJhbnNmb3JtID0gc3ByaXRlLndvcmxkVHJhbnNmb3JtLmNvcHkobWF0aC5NYXRyaXguVEVNUF9NQVRSSVgpLFxuICAgIHRleHR1cmUgPSBzcHJpdGUuX3RleHR1cmUuYmFzZVRleHR1cmU7XG5cbiAgICB2YXIgbWFwcGVkTWF0cml4ID0gb3V0cHV0TWF0cml4LmlkZW50aXR5KCk7XG5cbiAgICAvLyBzY2FsZS4uXG4gICAgdmFyIHJhdGlvID0gdGhpcy50ZXh0dXJlU2l6ZS5oZWlnaHQgLyB0aGlzLnRleHR1cmVTaXplLndpZHRoO1xuXG4gICAgbWFwcGVkTWF0cml4LnRyYW5zbGF0ZShmaWx0ZXJBcmVhLnggLyB0aGlzLnRleHR1cmVTaXplLndpZHRoLCBmaWx0ZXJBcmVhLnkgLyB0aGlzLnRleHR1cmVTaXplLmhlaWdodCApO1xuXG4gICAgbWFwcGVkTWF0cml4LnNjYWxlKDEgLCByYXRpbyk7XG5cbiAgICB2YXIgdHJhbnNsYXRlU2NhbGVYID0gKHRoaXMudGV4dHVyZVNpemUud2lkdGggLyB0ZXh0dXJlLndpZHRoKTtcbiAgICB2YXIgdHJhbnNsYXRlU2NhbGVZID0gKHRoaXMudGV4dHVyZVNpemUuaGVpZ2h0IC8gdGV4dHVyZS5oZWlnaHQpO1xuXG4gICAgd29ybGRUcmFuc2Zvcm0udHggLz0gdGV4dHVyZS53aWR0aCAqIHRyYW5zbGF0ZVNjYWxlWDtcbiAgICB3b3JsZFRyYW5zZm9ybS50eSAvPSB0ZXh0dXJlLndpZHRoICogdHJhbnNsYXRlU2NhbGVYO1xuXG4gICAgd29ybGRUcmFuc2Zvcm0uaW52ZXJ0KCk7XG5cbiAgICBtYXBwZWRNYXRyaXgucHJlcGVuZCh3b3JsZFRyYW5zZm9ybSk7XG5cbiAgICAvLyBhcHBseSBpbnZlcnNlIHNjYWxlLi5cbiAgICBtYXBwZWRNYXRyaXguc2NhbGUoMSAsIDEvcmF0aW8pO1xuXG4gICAgbWFwcGVkTWF0cml4LnNjYWxlKCB0cmFuc2xhdGVTY2FsZVggLCB0cmFuc2xhdGVTY2FsZVkgKTtcblxuICAgIG1hcHBlZE1hdHJpeC50cmFuc2xhdGUoc3ByaXRlLmFuY2hvci54LCBzcHJpdGUuYW5jaG9yLnkpO1xuXG4gICAgcmV0dXJuIG1hcHBlZE1hdHJpeDtcblxuICAgIC8vIEtlZXBpbmcgdGhlIG9yZ2luYWwgYXMgYSByZW1pbmRlciB0byBtZSBvbiBob3cgdGhpcyB3b3JrcyFcbiAgICAvL1xuICAgIC8vIHZhciBtID0gbmV3IG1hdGguTWF0cml4KCk7XG5cbiAgICAvLyAvLyBzY2FsZS4uXG4gICAgLy8gdmFyIHJhdGlvID0gdGhpcy50ZXh0dXJlU2l6ZS5oZWlnaHQgLyB0aGlzLnRleHR1cmVTaXplLndpZHRoO1xuXG4gICAgLy8gbS50cmFuc2xhdGUoZmlsdGVyQXJlYS54IC8gdGhpcy50ZXh0dXJlU2l6ZS53aWR0aCwgZmlsdGVyQXJlYS55IC8gdGhpcy50ZXh0dXJlU2l6ZS5oZWlnaHQpO1xuXG5cbiAgICAvLyBtLnNjYWxlKDEgLCByYXRpbyk7XG5cblxuICAgIC8vIHZhciB0cmFuc2Zvcm0gPSB3dC5jbG9uZSgpO1xuXG4gICAgLy8gdmFyIHRyYW5zbGF0ZVNjYWxlWCA9ICh0aGlzLnRleHR1cmVTaXplLndpZHRoIC8gNjIwKTtcbiAgICAvLyB2YXIgdHJhbnNsYXRlU2NhbGVZID0gKHRoaXMudGV4dHVyZVNpemUuaGVpZ2h0IC8gMzgwKTtcblxuICAgIC8vIHRyYW5zZm9ybS50eCAvPSA2MjAgKiB0cmFuc2xhdGVTY2FsZVg7XG4gICAgLy8gdHJhbnNmb3JtLnR5IC89IDYyMCAqIHRyYW5zbGF0ZVNjYWxlWDtcblxuICAgIC8vIHRyYW5zZm9ybS5pbnZlcnQoKTtcblxuICAgIC8vIHRyYW5zZm9ybS5hcHBlbmQobSk7XG5cbiAgICAvLyAvLyBhcHBseSBpbnZlcnNlIHNjYWxlLi5cbiAgICAvLyB0cmFuc2Zvcm0uc2NhbGUoMSAsIDEvcmF0aW8pO1xuXG4gICAgLy8gdHJhbnNmb3JtLnNjYWxlKCB0cmFuc2xhdGVTY2FsZVggLCB0cmFuc2xhdGVTY2FsZVkgKTtcblxuICAgIC8vIHJldHVybiB0cmFuc2Zvcm07XG59O1xuXG4vKlxuICogQ29uc3RyYWlucyB0aGUgZmlsdGVyIGFyZWEgdG8gdGhlIHRleHR1cmUgc2l6ZVxuICogQHBhcmFtIGZpbHRlckFyZWEge1JlY3RhbmdsZX0gVGhlIGZpbHRlciBhcmVhIHdlIHdhbnQgdG8gY2FwXG4gKi9cbkZpbHRlck1hbmFnZXIucHJvdG90eXBlLmNhcEZpbHRlckFyZWEgPSBmdW5jdGlvbiAoZmlsdGVyQXJlYSlcbntcbiAgICBpZiAoZmlsdGVyQXJlYS54IDwgMClcbiAgICB7XG4gICAgICAgIGZpbHRlckFyZWEud2lkdGggKz0gZmlsdGVyQXJlYS54O1xuICAgICAgICBmaWx0ZXJBcmVhLnggPSAwO1xuICAgIH1cblxuICAgIGlmIChmaWx0ZXJBcmVhLnkgPCAwKVxuICAgIHtcbiAgICAgICAgZmlsdGVyQXJlYS5oZWlnaHQgKz0gZmlsdGVyQXJlYS55O1xuICAgICAgICBmaWx0ZXJBcmVhLnkgPSAwO1xuICAgIH1cblxuICAgIGlmICggZmlsdGVyQXJlYS54ICsgZmlsdGVyQXJlYS53aWR0aCA+IHRoaXMudGV4dHVyZVNpemUud2lkdGggKVxuICAgIHtcbiAgICAgICAgZmlsdGVyQXJlYS53aWR0aCA9IHRoaXMudGV4dHVyZVNpemUud2lkdGggLSBmaWx0ZXJBcmVhLng7XG4gICAgfVxuXG4gICAgaWYgKCBmaWx0ZXJBcmVhLnkgKyBmaWx0ZXJBcmVhLmhlaWdodCA+IHRoaXMudGV4dHVyZVNpemUuaGVpZ2h0IClcbiAgICB7XG4gICAgICAgIGZpbHRlckFyZWEuaGVpZ2h0ID0gdGhpcy50ZXh0dXJlU2l6ZS5oZWlnaHQgLSBmaWx0ZXJBcmVhLnk7XG4gICAgfVxufTtcblxuLypcbiAqIFJlc2l6ZXMgYWxsIHRoZSByZW5kZXIgdGFyZ2V0cyBpbiB0aGUgcG9vbFxuICogQHBhcmFtIHdpZHRoIHtudW1iZXJ9IHRoZSBuZXcgd2lkdGhcbiAqIEBwYXJhbSBoZWlnaHQge251bWJlcn0gdGhlIG5ldyBoZWlnaHRcbiAqL1xuRmlsdGVyTWFuYWdlci5wcm90b3R5cGUucmVzaXplID0gZnVuY3Rpb24gKCB3aWR0aCwgaGVpZ2h0IClcbntcbiAgICB0aGlzLnRleHR1cmVTaXplLndpZHRoID0gd2lkdGg7XG4gICAgdGhpcy50ZXh0dXJlU2l6ZS5oZWlnaHQgPSBoZWlnaHQ7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMudGV4dHVyZVBvb2wubGVuZ3RoOyBpKyspXG4gICAge1xuICAgICAgICB0aGlzLnRleHR1cmVQb29sW2ldLnJlc2l6ZSggd2lkdGgsIGhlaWdodCApO1xuICAgIH1cbn07XG5cbi8qKlxuICogRGVzdHJveXMgdGhlIGZpbHRlciBhbmQgcmVtb3ZlcyBpdCBmcm9tIHRoZSBmaWx0ZXIgc3RhY2suXG4gKlxuICovXG5GaWx0ZXJNYW5hZ2VyLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLnF1YWQuZGVzdHJveSgpO1xuICAgIFxuICAgIFdlYkdMTWFuYWdlci5wcm90b3R5cGUuZGVzdHJveS5jYWxsKHRoaXMpO1xuICAgIFxuICAgIHRoaXMuZmlsdGVyU3RhY2sgPSBudWxsO1xuICAgIHRoaXMub2Zmc2V0WSA9IDA7XG5cbiAgICAvLyBkZXN0cm95IHRleHR1cmVzXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLnRleHR1cmVQb29sLmxlbmd0aDsgaSsrKVxuICAgIHtcbiAgICAgICAgdGhpcy50ZXh0dXJlUG9vbFtpXS5kZXN0cm95KCk7XG4gICAgfVxuXG4gICAgdGhpcy50ZXh0dXJlUG9vbCA9IG51bGw7XG59O1xuIiwidmFyIFdlYkdMTWFuYWdlciA9IHJlcXVpcmUoJy4vV2ViR0xNYW5hZ2VyJyksXG4gICAgQWxwaGFNYXNrRmlsdGVyID0gcmVxdWlyZSgnLi4vZmlsdGVycy9TcHJpdGVNYXNrRmlsdGVyJyk7XG5cbi8qKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLldlYkdMUmVuZGVyZXJ9IFRoZSByZW5kZXJlciB0aGlzIG1hbmFnZXIgd29ya3MgZm9yLlxuICovXG5mdW5jdGlvbiBNYXNrTWFuYWdlcihyZW5kZXJlcilcbntcbiAgICBXZWJHTE1hbmFnZXIuY2FsbCh0aGlzLCByZW5kZXJlcik7XG5cbiAgICB0aGlzLnN0ZW5jaWxTdGFjayA9IFtdO1xuICAgIHRoaXMucmV2ZXJzZSA9IHRydWU7XG4gICAgdGhpcy5jb3VudCA9IDA7XG5cbiAgICB0aGlzLmFscGhhTWFza1Bvb2wgPSBbXTtcbn1cblxuTWFza01hbmFnZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShXZWJHTE1hbmFnZXIucHJvdG90eXBlKTtcbk1hc2tNYW5hZ2VyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IE1hc2tNYW5hZ2VyO1xubW9kdWxlLmV4cG9ydHMgPSBNYXNrTWFuYWdlcjtcblxuLyoqXG4gKiBBcHBsaWVzIHRoZSBNYXNrIGFuZCBhZGRzIGl0IHRvIHRoZSBjdXJyZW50IGZpbHRlciBzdGFjay5cbiAqXG4gKiBAcGFyYW0gZ3JhcGhpY3Mge1BJWEkuR3JhcGhpY3N9XG4gKiBAcGFyYW0gd2ViR0xEYXRhIHthbnlbXX1cbiAqL1xuTWFza01hbmFnZXIucHJvdG90eXBlLnB1c2hNYXNrID0gZnVuY3Rpb24gKHRhcmdldCwgbWFza0RhdGEpXG57XG4gICAgaWYgKG1hc2tEYXRhLnRleHR1cmUpXG4gICAge1xuICAgICAgICB0aGlzLnB1c2hTcHJpdGVNYXNrKHRhcmdldCwgbWFza0RhdGEpO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICB0aGlzLnB1c2hTdGVuY2lsTWFzayh0YXJnZXQsIG1hc2tEYXRhKTtcbiAgICB9XG5cbn07XG5cbi8qKlxuICogUmVtb3ZlcyB0aGUgbGFzdCBtYXNrIGZyb20gdGhlIG1hc2sgc3RhY2sgYW5kIGRvZXNuJ3QgcmV0dXJuIGl0LlxuICpcbiAqIEBwYXJhbSB0YXJnZXQge1BJWEkuUmVuZGVyVGFyZ2V0fVxuICogQHBhcmFtIG1hc2tEYXRhIHthbnlbXX1cbiAqL1xuTWFza01hbmFnZXIucHJvdG90eXBlLnBvcE1hc2sgPSBmdW5jdGlvbiAodGFyZ2V0LCBtYXNrRGF0YSlcbntcbiAgICBpZiAobWFza0RhdGEudGV4dHVyZSlcbiAgICB7XG4gICAgICAgIHRoaXMucG9wU3ByaXRlTWFzayh0YXJnZXQsIG1hc2tEYXRhKTtcbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgdGhpcy5wb3BTdGVuY2lsTWFzayh0YXJnZXQsIG1hc2tEYXRhKTtcbiAgICB9XG59O1xuXG4vKipcbiAqIEFwcGxpZXMgdGhlIE1hc2sgYW5kIGFkZHMgaXQgdG8gdGhlIGN1cnJlbnQgZmlsdGVyIHN0YWNrLlxuICpcbiAqIEBwYXJhbSB0YXJnZXQge1BJWEkuUmVuZGVyVGFyZ2V0fVxuICogQHBhcmFtIG1hc2tEYXRhIHthbnlbXX1cbiAqL1xuTWFza01hbmFnZXIucHJvdG90eXBlLnB1c2hTcHJpdGVNYXNrID0gZnVuY3Rpb24gKHRhcmdldCwgbWFza0RhdGEpXG57XG4gICAgdmFyIGFscGhhTWFza0ZpbHRlciA9IHRoaXMuYWxwaGFNYXNrUG9vbC5wb3AoKTtcblxuICAgIGlmICghYWxwaGFNYXNrRmlsdGVyKVxuICAgIHtcbiAgICAgICAgYWxwaGFNYXNrRmlsdGVyID0gW25ldyBBbHBoYU1hc2tGaWx0ZXIobWFza0RhdGEpXTtcbiAgICB9XG5cbiAgICBhbHBoYU1hc2tGaWx0ZXJbMF0ubWFza1Nwcml0ZSA9IG1hc2tEYXRhO1xuICAgIHRoaXMucmVuZGVyZXIuZmlsdGVyTWFuYWdlci5wdXNoRmlsdGVyKHRhcmdldCwgYWxwaGFNYXNrRmlsdGVyKTtcbn07XG5cbi8qKlxuICogUmVtb3ZlcyB0aGUgbGFzdCBmaWx0ZXIgZnJvbSB0aGUgZmlsdGVyIHN0YWNrIGFuZCBkb2Vzbid0IHJldHVybiBpdC5cbiAqXG4gKi9cbk1hc2tNYW5hZ2VyLnByb3RvdHlwZS5wb3BTcHJpdGVNYXNrID0gZnVuY3Rpb24gKClcbntcbiAgICB2YXIgZmlsdGVycyA9IHRoaXMucmVuZGVyZXIuZmlsdGVyTWFuYWdlci5wb3BGaWx0ZXIoKTtcblxuICAgIHRoaXMuYWxwaGFNYXNrUG9vbC5wdXNoKGZpbHRlcnMpO1xufTtcblxuXG4vKipcbiAqIEFwcGxpZXMgdGhlIE1hc2sgYW5kIGFkZHMgaXQgdG8gdGhlIGN1cnJlbnQgZmlsdGVyIHN0YWNrLlxuICpcbiAqIEBwYXJhbSB0YXJnZXQge1BJWEkuUmVuZGVyVGFyZ2V0fVxuICogQHBhcmFtIG1hc2tEYXRhIHthbnlbXX1cbiAqL1xuTWFza01hbmFnZXIucHJvdG90eXBlLnB1c2hTdGVuY2lsTWFzayA9IGZ1bmN0aW9uICh0YXJnZXQsIG1hc2tEYXRhKVxue1xuICAgIHRoaXMucmVuZGVyZXIuc3RlbmNpbE1hbmFnZXIucHVzaE1hc2sobWFza0RhdGEpO1xufTtcblxuLyoqXG4gKiBSZW1vdmVzIHRoZSBsYXN0IGZpbHRlciBmcm9tIHRoZSBmaWx0ZXIgc3RhY2sgYW5kIGRvZXNuJ3QgcmV0dXJuIGl0LlxuICpcbiAqIEBwYXJhbSB0YXJnZXQge1BJWEkuUmVuZGVyVGFyZ2V0fVxuICogQHBhcmFtIG1hc2tEYXRhIHthbnlbXX1cbiAqL1xuTWFza01hbmFnZXIucHJvdG90eXBlLnBvcFN0ZW5jaWxNYXNrID0gZnVuY3Rpb24gKHRhcmdldCwgbWFza0RhdGEpXG57XG4gICAgdGhpcy5yZW5kZXJlci5zdGVuY2lsTWFuYWdlci5wb3BNYXNrKG1hc2tEYXRhKTtcbn07XG5cbiIsInZhciBXZWJHTE1hbmFnZXIgPSByZXF1aXJlKCcuL1dlYkdMTWFuYWdlcicpLFxuICAgIFRleHR1cmVTaGFkZXIgPSByZXF1aXJlKCcuLi9zaGFkZXJzL1RleHR1cmVTaGFkZXInKSxcbiAgICBDb21wbGV4UHJpbWl0aXZlU2hhZGVyID0gcmVxdWlyZSgnLi4vc2hhZGVycy9Db21wbGV4UHJpbWl0aXZlU2hhZGVyJyksXG4gICAgUHJpbWl0aXZlU2hhZGVyID0gcmVxdWlyZSgnLi4vc2hhZGVycy9QcmltaXRpdmVTaGFkZXInKSxcbiAgICB1dGlscyA9IHJlcXVpcmUoJy4uLy4uLy4uL3V0aWxzJyk7XG5cbi8qKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQGV4dGVuZHMgUElYSS5XZWJHTE1hbmFnZXJcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5XZWJHTFJlbmRlcmVyfSBUaGUgcmVuZGVyZXIgdGhpcyBtYW5hZ2VyIHdvcmtzIGZvci5cbiAqL1xuZnVuY3Rpb24gU2hhZGVyTWFuYWdlcihyZW5kZXJlcilcbntcbiAgICBXZWJHTE1hbmFnZXIuY2FsbCh0aGlzLCByZW5kZXJlcik7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy5tYXhBdHRpYnMgPSAxMDtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge2FueVtdfVxuICAgICAqL1xuICAgIHRoaXMuYXR0cmliU3RhdGUgPSBbXTtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge2FueVtdfVxuICAgICAqL1xuICAgIHRoaXMudGVtcEF0dHJpYlN0YXRlID0gW107XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMubWF4QXR0aWJzOyBpKyspXG4gICAge1xuICAgICAgICB0aGlzLmF0dHJpYlN0YXRlW2ldID0gZmFsc2U7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7YW55W119XG4gICAgICovXG4gICAgdGhpcy5zdGFjayA9IFtdO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fY3VycmVudElkID0gLTE7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlNoYWRlcn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuY3VycmVudFNoYWRlciA9IG51bGw7XG5cbi8vICAgIHRoaXMuaW5pdFBsdWdpbnMoKTtcbn1cblxuU2hhZGVyTWFuYWdlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFdlYkdMTWFuYWdlci5wcm90b3R5cGUpO1xuU2hhZGVyTWFuYWdlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBTaGFkZXJNYW5hZ2VyO1xudXRpbHMucGx1Z2luVGFyZ2V0Lm1peGluKFNoYWRlck1hbmFnZXIpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IFNoYWRlck1hbmFnZXI7XG5cbi8qKlxuICogQ2FsbGVkIHdoZW4gdGhlcmUgaXMgYSBXZWJHTCBjb250ZXh0IGNoYW5nZS5cbiAqXG4gKi9cblNoYWRlck1hbmFnZXIucHJvdG90eXBlLm9uQ29udGV4dENoYW5nZSA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy5pbml0UGx1Z2lucygpO1xuXG4gICAgdmFyIGdsID0gdGhpcy5yZW5kZXJlci5nbDtcblxuICAgIC8vIGdldCB0aGUgbWF4aW11bSBudW1iZXIgb2YgYXR0cmlidXRlIGNvcnJlY3RseSBhcyB0aGlzIHRlbmRzIHRvIHZhcnlcbiAgICB0aGlzLm1heEF0dGlicyA9IGdsLmdldFBhcmFtZXRlcihnbC5NQVhfVkVSVEVYX0FUVFJJQlMpO1xuXG4gICAgdGhpcy5hdHRyaWJTdGF0ZSA9IFtdO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLm1heEF0dGliczsgaSsrKVxuICAgIHtcbiAgICAgICAgdGhpcy5hdHRyaWJTdGF0ZVtpXSA9IGZhbHNlO1xuICAgIH1cblxuICAgIC8vIFRPRE8gLSBXaHkgYXJlIHRoZXNlIG5vdCBwbHVnaW5zPyBXZSBjYW4ndCBkZWNvdXBsZSBwcmltaXRpdmVzIHVubGVzcyB0aGV5IGFyZS4uLi5cbiAgICB0aGlzLmRlZmF1bHRTaGFkZXIgPSBuZXcgVGV4dHVyZVNoYWRlcih0aGlzKTtcbiAgICB0aGlzLnByaW1pdGl2ZVNoYWRlciA9IG5ldyBQcmltaXRpdmVTaGFkZXIodGhpcyk7XG4gICAgdGhpcy5jb21wbGV4UHJpbWl0aXZlU2hhZGVyID0gbmV3IENvbXBsZXhQcmltaXRpdmVTaGFkZXIodGhpcyk7XG59O1xuXG4vKipcbiAqIFRha2VzIHRoZSBhdHRyaWJ1dGVzIGdpdmVuIGluIHBhcmFtZXRlcnMgYW5kIHVwbG9hZHMgdGhlbS5cbiAqXG4gKiBAcGFyYW0gYXR0cmlicyB7YW55W119IGF0dHJpYnNcbiAqL1xuU2hhZGVyTWFuYWdlci5wcm90b3R5cGUuc2V0QXR0cmlicyA9IGZ1bmN0aW9uIChhdHRyaWJzKVxue1xuICAgIC8vIHJlc2V0IHRlbXAgc3RhdGVcbiAgICB2YXIgaTtcblxuICAgIGZvciAoaSA9IDA7IGkgPCB0aGlzLnRlbXBBdHRyaWJTdGF0ZS5sZW5ndGg7IGkrKylcbiAgICB7XG4gICAgICAgIHRoaXMudGVtcEF0dHJpYlN0YXRlW2ldID0gZmFsc2U7XG4gICAgfVxuXG4gICAgLy8gc2V0IHRoZSBuZXcgYXR0cmlic1xuICAgIGZvciAodmFyIGEgaW4gYXR0cmlicylcbiAgICB7XG4gICAgICAgIHRoaXMudGVtcEF0dHJpYlN0YXRlW2F0dHJpYnNbYV1dID0gdHJ1ZTtcbiAgICB9XG5cbiAgICB2YXIgZ2wgPSB0aGlzLnJlbmRlcmVyLmdsO1xuXG4gICAgZm9yIChpID0gMDsgaSA8IHRoaXMuYXR0cmliU3RhdGUubGVuZ3RoOyBpKyspXG4gICAge1xuICAgICAgICBpZiAodGhpcy5hdHRyaWJTdGF0ZVtpXSAhPT0gdGhpcy50ZW1wQXR0cmliU3RhdGVbaV0pXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuYXR0cmliU3RhdGVbaV0gPSB0aGlzLnRlbXBBdHRyaWJTdGF0ZVtpXTtcblxuICAgICAgICAgICAgaWYgKHRoaXMuYXR0cmliU3RhdGVbaV0pXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgZ2wuZW5hYmxlVmVydGV4QXR0cmliQXJyYXkoaSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgZ2wuZGlzYWJsZVZlcnRleEF0dHJpYkFycmF5KGkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxufTtcblxuLyoqXG4gKiBTZXRzIHRoZSBjdXJyZW50IHNoYWRlci5cbiAqXG4gKiBAcGFyYW0gc2hhZGVyIHtQSVhJLlNoYWRlcn0gdGhlIHNoYWRlciB0byB1cGxvYWRcbiAqL1xuU2hhZGVyTWFuYWdlci5wcm90b3R5cGUuc2V0U2hhZGVyID0gZnVuY3Rpb24gKHNoYWRlcilcbntcbiAgICByZXR1cm47XG4gICAgaWYgKHRoaXMuX2N1cnJlbnRJZCA9PT0gc2hhZGVyLnVpZClcbiAgICB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICB0aGlzLl9jdXJyZW50SWQgPSBzaGFkZXIudWlkO1xuXG4gICAgdGhpcy5jdXJyZW50U2hhZGVyID0gc2hhZGVyO1xuXG4gICAgdGhpcy5yZW5kZXJlci5nbC51c2VQcm9ncmFtKHNoYWRlci5wcm9ncmFtKTtcbiAgICB0aGlzLnNldEF0dHJpYnMoc2hhZGVyLmF0dHJpYnV0ZXMpO1xuXG4gICAgcmV0dXJuIHRydWU7XG59O1xuXG4vKipcbiAqIERlc3Ryb3lzIHRoaXMgb2JqZWN0LlxuICpcbiAqL1xuU2hhZGVyTWFuYWdlci5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy5wcmltaXRpdmVTaGFkZXIuZGVzdHJveSgpO1xuICAgIHRoaXMuY29tcGxleFByaW1pdGl2ZVNoYWRlci5kZXN0cm95KCk7XG4gICAgV2ViR0xNYW5hZ2VyLnByb3RvdHlwZS5kZXN0cm95LmNhbGwodGhpcyk7XG5cbiAgICB0aGlzLmRlc3Ryb3lQbHVnaW5zKCk7XG5cbiAgICB0aGlzLmF0dHJpYlN0YXRlID0gbnVsbDtcblxuICAgIHRoaXMudGVtcEF0dHJpYlN0YXRlID0gbnVsbDtcbn07XG4iLCJ2YXIgV2ViR0xNYW5hZ2VyID0gcmVxdWlyZSgnLi9XZWJHTE1hbmFnZXInKSxcbiAgICB1dGlscyA9IHJlcXVpcmUoJy4uLy4uLy4uL3V0aWxzJyk7XG5cbi8qKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLldlYkdMUmVuZGVyZXJ9IFRoZSByZW5kZXJlciB0aGlzIG1hbmFnZXIgd29ya3MgZm9yLlxuICovXG5mdW5jdGlvbiBXZWJHTE1hc2tNYW5hZ2VyKHJlbmRlcmVyKVxue1xuICAgIFdlYkdMTWFuYWdlci5jYWxsKHRoaXMsIHJlbmRlcmVyKTtcbiAgICB0aGlzLnN0ZW5jaWxNYXNrU3RhY2sgPSBudWxsO1xufVxuXG5XZWJHTE1hc2tNYW5hZ2VyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoV2ViR0xNYW5hZ2VyLnByb3RvdHlwZSk7XG5XZWJHTE1hc2tNYW5hZ2VyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFdlYkdMTWFza01hbmFnZXI7XG5tb2R1bGUuZXhwb3J0cyA9IFdlYkdMTWFza01hbmFnZXI7XG5cbi8qKlxuICogQ2hhbmdlcyB0aGUgbWFzayBzdGFjayB0aGF0IGlzIHVzZWQgYnkgdGhpcyBtYW5hZ2VyLlxuICpcbiAqIEBwYXJhbSBzdGVuY2lsTWFza1N0YWNrIHtQSVhJLlN0ZW5jaWxNYXNrU3RhY2t9IFRoZSBtYXNrIHN0YWNrXG4gKi9cbldlYkdMTWFza01hbmFnZXIucHJvdG90eXBlLnNldE1hc2tTdGFjayA9IGZ1bmN0aW9uICggc3RlbmNpbE1hc2tTdGFjayApXG57XG4gICAgdGhpcy5zdGVuY2lsTWFza1N0YWNrID0gc3RlbmNpbE1hc2tTdGFjaztcblxuICAgIHZhciBnbCA9IHRoaXMucmVuZGVyZXIuZ2w7XG5cbiAgICBpZiAoc3RlbmNpbE1hc2tTdGFjay5zdGVuY2lsU3RhY2subGVuZ3RoID09PSAwKVxuICAgIHtcbiAgICAgICAgZ2wuZGlzYWJsZShnbC5TVEVOQ0lMX1RFU1QpO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICBnbC5lbmFibGUoZ2wuU1RFTkNJTF9URVNUKTtcbiAgICB9XG59O1xuXG4vKipcbiAqIEFwcGxpZXMgdGhlIE1hc2sgYW5kIGFkZHMgaXQgdG8gdGhlIGN1cnJlbnQgZmlsdGVyIHN0YWNrLiBAYWx2aW5cbiAqXG4gKiBAcGFyYW0gZ3JhcGhpY3Mge1BJWEkuR3JhcGhpY3N9XG4gKiBAcGFyYW0gd2ViR0xEYXRhIHthbnlbXX1cbiAqL1xuV2ViR0xNYXNrTWFuYWdlci5wcm90b3R5cGUucHVzaFN0ZW5jaWwgPSBmdW5jdGlvbiAoZ3JhcGhpY3MsIHdlYkdMRGF0YSlcbntcbiAgICB0aGlzLnJlbmRlcmVyLl9hY3RpdmVSZW5kZXJUYXJnZXQuYXR0YWNoU3RlbmNpbEJ1ZmZlcigpO1xuXG4gICAgdmFyIGdsID0gdGhpcy5yZW5kZXJlci5nbCxcbiAgICAgICAgc21zID0gdGhpcy5zdGVuY2lsTWFza1N0YWNrO1xuXG4gICAgdGhpcy5iaW5kR3JhcGhpY3MoZ3JhcGhpY3MsIHdlYkdMRGF0YSk7XG5cbiAgICBpZiAoc21zLnN0ZW5jaWxTdGFjay5sZW5ndGggPT09IDApXG4gICAge1xuICAgICAgICBnbC5lbmFibGUoZ2wuU1RFTkNJTF9URVNUKTtcbiAgICAgICAgZ2wuY2xlYXIoZ2wuU1RFTkNJTF9CVUZGRVJfQklUKTtcbiAgICAgICAgc21zLnJldmVyc2UgPSB0cnVlO1xuICAgICAgICBzbXMuY291bnQgPSAwO1xuICAgIH1cblxuICAgIHNtcy5zdGVuY2lsU3RhY2sucHVzaCh3ZWJHTERhdGEpO1xuXG4gICAgdmFyIGxldmVsID0gc21zLmNvdW50O1xuXG4gICAgZ2wuY29sb3JNYXNrKGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlKTtcblxuICAgIGdsLnN0ZW5jaWxGdW5jKGdsLkFMV0FZUywwLDB4RkYpO1xuICAgIGdsLnN0ZW5jaWxPcChnbC5LRUVQLGdsLktFRVAsZ2wuSU5WRVJUKTtcblxuICAgIC8vIGRyYXcgdGhlIHRyaWFuZ2xlIHN0cmlwIVxuXG4gICAgaWYgKHdlYkdMRGF0YS5tb2RlID09PSAxKVxuICAgIHtcbiAgICAgICAgZ2wuZHJhd0VsZW1lbnRzKGdsLlRSSUFOR0xFX0ZBTiwgIHdlYkdMRGF0YS5pbmRpY2VzLmxlbmd0aCAtIDQsIGdsLlVOU0lHTkVEX1NIT1JULCAwICk7XG5cbiAgICAgICAgaWYgKHNtcy5yZXZlcnNlKVxuICAgICAgICB7XG4gICAgICAgICAgICBnbC5zdGVuY2lsRnVuYyhnbC5FUVVBTCwgMHhGRiAtIGxldmVsLCAweEZGKTtcbiAgICAgICAgICAgIGdsLnN0ZW5jaWxPcChnbC5LRUVQLGdsLktFRVAsZ2wuREVDUik7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgICBnbC5zdGVuY2lsRnVuYyhnbC5FUVVBTCxsZXZlbCwgMHhGRik7XG4gICAgICAgICAgICBnbC5zdGVuY2lsT3AoZ2wuS0VFUCxnbC5LRUVQLGdsLklOQ1IpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gZHJhdyBhIHF1YWQgdG8gaW5jcmVtZW50Li5cbiAgICAgICAgZ2wuZHJhd0VsZW1lbnRzKGdsLlRSSUFOR0xFX0ZBTiwgNCwgZ2wuVU5TSUdORURfU0hPUlQsICggd2ViR0xEYXRhLmluZGljZXMubGVuZ3RoIC0gNCApICogMiApO1xuXG4gICAgICAgIGlmIChzbXMucmV2ZXJzZSlcbiAgICAgICAge1xuICAgICAgICAgICAgZ2wuc3RlbmNpbEZ1bmMoZ2wuRVFVQUwsMHhGRi0obGV2ZWwrMSksIDB4RkYpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2VcbiAgICAgICAge1xuICAgICAgICAgICAgZ2wuc3RlbmNpbEZ1bmMoZ2wuRVFVQUwsbGV2ZWwrMSwgMHhGRik7XG4gICAgICAgIH1cblxuICAgICAgICBzbXMucmV2ZXJzZSA9ICFzbXMucmV2ZXJzZTtcbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgaWYgKCFzbXMucmV2ZXJzZSlcbiAgICAgICAge1xuICAgICAgICAgICAgZ2wuc3RlbmNpbEZ1bmMoZ2wuRVFVQUwsIDB4RkYgLSBsZXZlbCwgMHhGRik7XG4gICAgICAgICAgICBnbC5zdGVuY2lsT3AoZ2wuS0VFUCxnbC5LRUVQLGdsLkRFQ1IpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2VcbiAgICAgICAge1xuICAgICAgICAgICAgZ2wuc3RlbmNpbEZ1bmMoZ2wuRVFVQUwsbGV2ZWwsIDB4RkYpO1xuICAgICAgICAgICAgZ2wuc3RlbmNpbE9wKGdsLktFRVAsZ2wuS0VFUCxnbC5JTkNSKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGdsLmRyYXdFbGVtZW50cyhnbC5UUklBTkdMRV9TVFJJUCwgIHdlYkdMRGF0YS5pbmRpY2VzLmxlbmd0aCwgZ2wuVU5TSUdORURfU0hPUlQsIDAgKTtcblxuICAgICAgICBpZiAoIXNtcy5yZXZlcnNlKVxuICAgICAgICB7XG4gICAgICAgICAgICBnbC5zdGVuY2lsRnVuYyhnbC5FUVVBTCwweEZGLShsZXZlbCsxKSwgMHhGRik7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgICBnbC5zdGVuY2lsRnVuYyhnbC5FUVVBTCxsZXZlbCsxLCAweEZGKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGdsLmNvbG9yTWFzayh0cnVlLCB0cnVlLCB0cnVlLCB0cnVlKTtcbiAgICBnbC5zdGVuY2lsT3AoZ2wuS0VFUCxnbC5LRUVQLGdsLktFRVApO1xuXG4gICAgc21zLmNvdW50Kys7XG59O1xuXG4vKipcbiAqIFRPRE8gdGhpcyBkb2VzIG5vdCBiZWxvbmcgaGVyZSFcbiAqXG4gKiBAcGFyYW0gZ3JhcGhpY3Mge1BJWEkuR3JhcGhpY3N9XG4gKiBAcGFyYW0gd2ViR0xEYXRhIHthbnlbXX1cbiAqL1xuV2ViR0xNYXNrTWFuYWdlci5wcm90b3R5cGUuYmluZEdyYXBoaWNzID0gZnVuY3Rpb24gKGdyYXBoaWNzLCB3ZWJHTERhdGEpXG57XG4gICAgLy9pZiAodGhpcy5fY3VycmVudEdyYXBoaWNzID09PSBncmFwaGljcylyZXR1cm47XG4gICAgdmFyIGdsID0gdGhpcy5yZW5kZXJlci5nbDtcblxuICAgICAvLyBiaW5kIHRoZSBncmFwaGljcyBvYmplY3QuLlxuICAgIHZhciBzaGFkZXIgPSB0aGlzLnJlbmRlcmVyLnBsdWdpbnMuZ3JhcGhpY3MucHJpbWl0aXZlU2hhZGVyO1xuXG4gICAgaWYgKHdlYkdMRGF0YS5tb2RlID09PSAxKVxuICAgIHtcbiAgICAgICAgLypcbiAgICAgICAgc2hhZGVyID0gdGhpcy5yZW5kZXJlci5zaGFkZXJNYW5hZ2VyLmNvbXBsZXhQcmltaXRpdmVTaGFkZXI7XG5cbiAgICAgICAgdGhpcy5yZW5kZXJlci5zaGFkZXJNYW5hZ2VyLnNldFNoYWRlcihzaGFkZXIpO1xuXG4gICAgICAgIGdsLnVuaWZvcm1NYXRyaXgzZnYoc2hhZGVyLnVuaWZvcm1zLnRyYW5zbGF0aW9uTWF0cml4Ll9sb2NhdGlvbiwgZmFsc2UsIGdyYXBoaWNzLndvcmxkVHJhbnNmb3JtLnRvQXJyYXkodHJ1ZSkpO1xuXG4gICAgICAgIGdsLnVuaWZvcm1NYXRyaXgzZnYoc2hhZGVyLnVuaWZvcm1zLnByb2plY3Rpb25NYXRyaXguX2xvY2F0aW9uLCBmYWxzZSwgdGhpcy5yZW5kZXJlci5jdXJyZW50UmVuZGVyVGFyZ2V0LnByb2plY3Rpb25NYXRyaXgudG9BcnJheSh0cnVlKSk7XG5cbiAgICAgICAgZ2wudW5pZm9ybTNmdihzaGFkZXIudW5pZm9ybXMudGludC5fbG9jYXRpb24sIHV0aWxzLmhleDJyZ2IoZ3JhcGhpY3MudGludCkpO1xuXG4gICAgICAgIGdsLnVuaWZvcm0zZnYoc2hhZGVyLnVuaWZvcm1zLmNvbG9yLl9sb2NhdGlvbiwgd2ViR0xEYXRhLmNvbG9yKTtcblxuICAgICAgICBnbC51bmlmb3JtMWYoc2hhZGVyLnVuaWZvcm1zLmFscGhhLl9sb2NhdGlvbiwgZ3JhcGhpY3Mud29ybGRBbHBoYSk7XG5cbiAgICAgICAgZ2wuYmluZEJ1ZmZlcihnbC5BUlJBWV9CVUZGRVIsIHdlYkdMRGF0YS5idWZmZXIpO1xuXG4gICAgICAgIGdsLnZlcnRleEF0dHJpYlBvaW50ZXIoc2hhZGVyLmF0dHJpYnV0ZXMuYVZlcnRleFBvc2l0aW9uLCAyLCBnbC5GTE9BVCwgZmFsc2UsIDQgKiAyLCAwKTtcblxuICAgICAgICAvLyBub3cgZG8gdGhlIHJlc3QuLlxuICAgICAgICAvLyBzZXQgdGhlIGluZGV4IGJ1ZmZlciFcbiAgICAgICAgZ2wuYmluZEJ1ZmZlcihnbC5FTEVNRU5UX0FSUkFZX0JVRkZFUiwgd2ViR0xEYXRhLmluZGV4QnVmZmVyKTtcbiAgICAqL1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICAvL3RoaXMucmVuZGVyZXIuc2hhZGVyTWFuYWdlci5hY3RpdmF0ZVByaW1pdGl2ZVNoYWRlcigpO1xuLy8gICAgICAgIHNoYWRlciA9IHRoaXMucmVuZGVyZXIuc2hhZGVyTWFuYWdlci5wcmltaXRpdmVTaGFkZXI7XG4gICAgICAgXG4gICAgICAgIHRoaXMucmVuZGVyZXIuYmluZFNoYWRlcihzaGFkZXIpXG5cbiAgICAgICAgc2hhZGVyLnVuaWZvcm1zLnRyYW5zbGF0aW9uTWF0cml4ID0gZ3JhcGhpY3Mud29ybGRUcmFuc2Zvcm0udG9BcnJheSh0cnVlKTtcbiAgICAgICAgc2hhZGVyLnVuaWZvcm1zLnRpbnQgPSB1dGlscy5oZXgycmdiKGdyYXBoaWNzLnRpbnQpO1xuICAgICAgICBzaGFkZXIudW5pZm9ybXMuYWxwaGEgPSBncmFwaGljcy53b3JsZEFscGhhO1xuXG5cbiAgICAgICAgZ2wuYmluZEJ1ZmZlcihnbC5BUlJBWV9CVUZGRVIsIHdlYkdMRGF0YS5idWZmZXIpO1xuXG5cbiAgICAgICAgc2hhZGVyLmF0dHJpYnV0ZXMuYVZlcnRleFBvc2l0aW9uLnBvaW50ZXIoZ2wuRkxPQVQsIGZhbHNlLCA0ICogNiwgMCk7XG4gICAgICAgIHNoYWRlci5hdHRyaWJ1dGVzLmFDb2xvci5wb2ludGVyKGdsLkZMT0FULCBmYWxzZSwgNCAqIDYsIDIgKiA0KTtcblxuICAgICAgICBnbC5lbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShzaGFkZXIuYXR0cmlidXRlcy5hVmVydGV4UG9zaXRpb24ubG9jYXRpb24pO1xuICAgICAgICBnbC5lbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShzaGFkZXIuYXR0cmlidXRlcy5hQ29sb3IubG9jYXRpb24pO1xuXG4gICAgICAgIC8vIHNldCB0aGUgaW5kZXggYnVmZmVyIVxuICAgICAgICBnbC5iaW5kQnVmZmVyKGdsLkVMRU1FTlRfQVJSQVlfQlVGRkVSLCB3ZWJHTERhdGEuaW5kZXhCdWZmZXIpO1xuLy8gICAgICAgIGdsLmRyYXdFbGVtZW50cyhnbC5UUklBTkdMRV9TVFJJUCwgIHdlYkdMRGF0YS5pbmRpY2VzLmxlbmd0aCwgZ2wuVU5TSUdORURfU0hPUlQsIDAgKTtcblxuXG4gICAgICAvKiAgdGhpcy5yZW5kZXJlci5zaGFkZXJNYW5hZ2VyLnNldFNoYWRlcihzaGFkZXIpO1xuXG4gICAgICAgIGdsLnVuaWZvcm1NYXRyaXgzZnYoc2hhZGVyLnVuaWZvcm1zLnRyYW5zbGF0aW9uTWF0cml4Ll9sb2NhdGlvbiwgZmFsc2UsIGdyYXBoaWNzLndvcmxkVHJhbnNmb3JtLnRvQXJyYXkodHJ1ZSkpO1xuXG4gICAgICAgIGdsLnVuaWZvcm1NYXRyaXgzZnYoc2hhZGVyLnVuaWZvcm1zLnByb2plY3Rpb25NYXRyaXguX2xvY2F0aW9uLCBmYWxzZSwgdGhpcy5yZW5kZXJlci5jdXJyZW50UmVuZGVyVGFyZ2V0LnByb2plY3Rpb25NYXRyaXgudG9BcnJheSh0cnVlKSk7XG5cbiAgICAgICAgZ2wudW5pZm9ybTNmdihzaGFkZXIudW5pZm9ybXMudGludC5fbG9jYXRpb24sIHV0aWxzLmhleDJyZ2IoZ3JhcGhpY3MudGludCkpO1xuXG4gICAgICAgIGdsLnVuaWZvcm0xZihzaGFkZXIudW5pZm9ybXMuYWxwaGEuX2xvY2F0aW9uLCBncmFwaGljcy53b3JsZEFscGhhKTtcblxuICAgICAgICBnbC5iaW5kQnVmZmVyKGdsLkFSUkFZX0JVRkZFUiwgd2ViR0xEYXRhLmJ1ZmZlcik7XG5cbiAgICAgICAgZ2wudmVydGV4QXR0cmliUG9pbnRlcihzaGFkZXIuYXR0cmlidXRlcy5hVmVydGV4UG9zaXRpb24sIDIsIGdsLkZMT0FULCBmYWxzZSwgNCAqIDYsIDApO1xuICAgICAgICBnbC52ZXJ0ZXhBdHRyaWJQb2ludGVyKHNoYWRlci5hdHRyaWJ1dGVzLmFDb2xvciwgNCwgZ2wuRkxPQVQsIGZhbHNlLDQgKiA2LCAyICogNCk7XG5cbiAgICAgICAgLy8gc2V0IHRoZSBpbmRleCBidWZmZXIhXG4gICAgICAgIGdsLmJpbmRCdWZmZXIoZ2wuRUxFTUVOVF9BUlJBWV9CVUZGRVIsIHdlYkdMRGF0YS5pbmRleEJ1ZmZlcik7Ki9cbiAgICB9XG59O1xuXG4vKipcbiAqIFRPRE8gQGFsdmluXG4gKiBAcGFyYW0gZ3JhcGhpY3Mge1BJWEkuR3JhcGhpY3N9XG4gKiBAcGFyYW0gd2ViR0xEYXRhIHthbnlbXX1cbiAqL1xuV2ViR0xNYXNrTWFuYWdlci5wcm90b3R5cGUucG9wU3RlbmNpbCA9IGZ1bmN0aW9uIChncmFwaGljcywgd2ViR0xEYXRhKVxue1xuICAgIHZhciBnbCA9IHRoaXMucmVuZGVyZXIuZ2wsXG4gICAgICAgIHNtcyA9IHRoaXMuc3RlbmNpbE1hc2tTdGFjaztcblxuICAgIHNtcy5zdGVuY2lsU3RhY2sucG9wKCk7XG5cbiAgICBzbXMuY291bnQtLTtcblxuICAgIGlmIChzbXMuc3RlbmNpbFN0YWNrLmxlbmd0aCA9PT0gMClcbiAgICB7XG4gICAgICAgIC8vIHRoZSBzdGFjayBpcyBlbXB0eSFcbiAgICAgICAgZ2wuZGlzYWJsZShnbC5TVEVOQ0lMX1RFU1QpO1xuXG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG5cbiAgICAgICAgdmFyIGxldmVsID0gc21zLmNvdW50O1xuXG4gICAgICAgIHRoaXMuYmluZEdyYXBoaWNzKGdyYXBoaWNzLCB3ZWJHTERhdGEpO1xuXG4gICAgICAgIGdsLmNvbG9yTWFzayhmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSk7XG5cbiAgICAgICAgaWYgKHdlYkdMRGF0YS5tb2RlID09PSAxKVxuICAgICAgICB7XG4gICAgICAgICAgICBzbXMucmV2ZXJzZSA9ICFzbXMucmV2ZXJzZTtcblxuICAgICAgICAgICAgaWYgKHNtcy5yZXZlcnNlKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGdsLnN0ZW5jaWxGdW5jKGdsLkVRVUFMLCAweEZGIC0gKGxldmVsKzEpLCAweEZGKTtcbiAgICAgICAgICAgICAgICBnbC5zdGVuY2lsT3AoZ2wuS0VFUCxnbC5LRUVQLGdsLklOQ1IpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGdsLnN0ZW5jaWxGdW5jKGdsLkVRVUFMLGxldmVsKzEsIDB4RkYpO1xuICAgICAgICAgICAgICAgIGdsLnN0ZW5jaWxPcChnbC5LRUVQLGdsLktFRVAsZ2wuREVDUik7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIGRyYXcgYSBxdWFkIHRvIGluY3JlbWVudC4uXG4gICAgICAgICAgICBnbC5kcmF3RWxlbWVudHMoZ2wuVFJJQU5HTEVfRkFOLCA0LCBnbC5VTlNJR05FRF9TSE9SVCwgKCB3ZWJHTERhdGEuaW5kaWNlcy5sZW5ndGggLSA0ICkgKiAyICk7XG5cbiAgICAgICAgICAgIGdsLnN0ZW5jaWxGdW5jKGdsLkFMV0FZUywwLDB4RkYpO1xuICAgICAgICAgICAgZ2wuc3RlbmNpbE9wKGdsLktFRVAsZ2wuS0VFUCxnbC5JTlZFUlQpO1xuXG4gICAgICAgICAgICAvLyBkcmF3IHRoZSB0cmlhbmdsZSBzdHJpcCFcbiAgICAgICAgICAgIGdsLmRyYXdFbGVtZW50cyhnbC5UUklBTkdMRV9GQU4sICB3ZWJHTERhdGEuaW5kaWNlcy5sZW5ndGggLSA0LCBnbC5VTlNJR05FRF9TSE9SVCwgMCApO1xuXG4gICAgICAgICAgICB0aGlzLnJlbmRlcmVyLmRyYXdDb3VudCArPSAyO1xuXG4gICAgICAgICAgICBpZiAoIXNtcy5yZXZlcnNlKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGdsLnN0ZW5jaWxGdW5jKGdsLkVRVUFMLDB4RkYtKGxldmVsKSwgMHhGRik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgZ2wuc3RlbmNpbEZ1bmMoZ2wuRVFVQUwsbGV2ZWwsIDB4RkYpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgLy8gIGNvbnNvbGUubG9nKFwiPDw+PlwiKVxuICAgICAgICAgICAgaWYgKCFzbXMucmV2ZXJzZSlcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBnbC5zdGVuY2lsRnVuYyhnbC5FUVVBTCwgMHhGRiAtIChsZXZlbCsxKSwgMHhGRik7XG4gICAgICAgICAgICAgICAgZ2wuc3RlbmNpbE9wKGdsLktFRVAsZ2wuS0VFUCxnbC5JTkNSKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBnbC5zdGVuY2lsRnVuYyhnbC5FUVVBTCxsZXZlbCsxLCAweEZGKTtcbiAgICAgICAgICAgICAgICBnbC5zdGVuY2lsT3AoZ2wuS0VFUCxnbC5LRUVQLGdsLkRFQ1IpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBnbC5kcmF3RWxlbWVudHMoZ2wuVFJJQU5HTEVfU1RSSVAsICB3ZWJHTERhdGEuaW5kaWNlcy5sZW5ndGgsIGdsLlVOU0lHTkVEX1NIT1JULCAwICk7XG5cbiAgICAgICAgICAgIHRoaXMucmVuZGVyZXIuZHJhd0NvdW50Kys7XG5cbiAgICAgICAgICAgIGlmICghc21zLnJldmVyc2UpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgZ2wuc3RlbmNpbEZ1bmMoZ2wuRVFVQUwsMHhGRi0obGV2ZWwpLCAweEZGKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBnbC5zdGVuY2lsRnVuYyhnbC5FUVVBTCxsZXZlbCwgMHhGRik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBnbC5jb2xvck1hc2sodHJ1ZSwgdHJ1ZSwgdHJ1ZSwgdHJ1ZSk7XG4gICAgICAgIGdsLnN0ZW5jaWxPcChnbC5LRUVQLGdsLktFRVAsZ2wuS0VFUCk7XG5cblxuICAgIH1cbn07XG5cbi8qKlxuICogRGVzdHJveXMgdGhlIG1hc2sgc3RhY2suXG4gKlxuICovXG5XZWJHTE1hc2tNYW5hZ2VyLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKClcbntcbiAgICBXZWJHTE1hbmFnZXIucHJvdG90eXBlLmRlc3Ryb3kuY2FsbCh0aGlzKTtcblxuICAgIHRoaXMuc3RlbmNpbE1hc2tTdGFjay5zdGVuY2lsU3RhY2sgPSBudWxsO1xufTtcblxuLyoqXG4gKiBBcHBsaWVzIHRoZSBNYXNrIGFuZCBhZGRzIGl0IHRvIHRoZSBjdXJyZW50IGZpbHRlciBzdGFjay5cbiAqXG4gKiBAcGFyYW0gbWFza0RhdGEge2FueVtdfSBUaGUgbWFzayBkYXRhIHN0cnVjdHVyZSB0byB1c2VcbiAqL1xuV2ViR0xNYXNrTWFuYWdlci5wcm90b3R5cGUucHVzaE1hc2sgPSBmdW5jdGlvbiAobWFza0RhdGEpXG57XG4gICAgdGhpcy5yZW5kZXJlci5zZXRPYmplY3RSZW5kZXJlcih0aGlzLnJlbmRlcmVyLnBsdWdpbnMuZ3JhcGhpY3MpO1xuICAgIFxuICAgIC8vVE9ETyBGSVhcbiAgICBpZiAobWFza0RhdGEuZGlydHkpXG4gICAge1xuICAgICAgICB0aGlzLnJlbmRlcmVyLnBsdWdpbnMuZ3JhcGhpY3MudXBkYXRlR3JhcGhpY3MobWFza0RhdGEsIHRoaXMucmVuZGVyZXIuZ2wpO1xuICAgIH1cblxuICAgIGlmICghbWFza0RhdGEuX3dlYkdMW3RoaXMucmVuZGVyZXIuZ2wuaWRdLmRhdGEubGVuZ3RoKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMucHVzaFN0ZW5jaWwobWFza0RhdGEsIG1hc2tEYXRhLl93ZWJHTFt0aGlzLnJlbmRlcmVyLmdsLmlkXS5kYXRhWzBdKTtcbn07XG5cbi8qKlxuICogUmVtb3ZlcyB0aGUgbGFzdCBmaWx0ZXIgZnJvbSB0aGUgZmlsdGVyIHN0YWNrIGFuZCBkb2Vzbid0IHJldHVybiBpdC5cbiAqXG4gKiBAcGFyYW0gbWFza0RhdGEge2FueVtdfVxuICovXG5XZWJHTE1hc2tNYW5hZ2VyLnByb3RvdHlwZS5wb3BNYXNrID0gZnVuY3Rpb24gKG1hc2tEYXRhKVxue1xuICAgIHRoaXMucmVuZGVyZXIuc2V0T2JqZWN0UmVuZGVyZXIodGhpcy5yZW5kZXJlci5wbHVnaW5zLmdyYXBoaWNzKTtcblxuICAgIHRoaXMucG9wU3RlbmNpbChtYXNrRGF0YSwgbWFza0RhdGEuX3dlYkdMW3RoaXMucmVuZGVyZXIuZ2wuaWRdLmRhdGFbMF0pO1xufTtcblxuIiwiLyoqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcn0gVGhlIHJlbmRlcmVyIHRoaXMgbWFuYWdlciB3b3JrcyBmb3IuXG4gKi9cbmZ1bmN0aW9uIFdlYkdMTWFuYWdlcihyZW5kZXJlcilcbntcbiAgICAvKipcbiAgICAgKiBUaGUgcmVuZGVyZXIgdGhpcyBtYW5hZ2VyIHdvcmtzIGZvci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuV2ViR0xSZW5kZXJlcn1cbiAgICAgKi9cbiAgICB0aGlzLnJlbmRlcmVyID0gcmVuZGVyZXI7XG5cbiAgICB0aGlzLnJlbmRlcmVyLm9uKCdjb250ZXh0JywgdGhpcy5vbkNvbnRleHRDaGFuZ2UsIHRoaXMpO1xufVxuXG5XZWJHTE1hbmFnZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gV2ViR0xNYW5hZ2VyO1xubW9kdWxlLmV4cG9ydHMgPSBXZWJHTE1hbmFnZXI7XG5cbi8qKlxuICogR2VuZXJpYyBtZXRob2QgY2FsbGVkIHdoZW4gdGhlcmUgaXMgYSBXZWJHTCBjb250ZXh0IGNoYW5nZS5cbiAqXG4gKi9cbldlYkdMTWFuYWdlci5wcm90b3R5cGUub25Db250ZXh0Q2hhbmdlID0gZnVuY3Rpb24gKClcbntcblx0Ly8gZG8gc29tZSBjb2RlcyBpbml0IVxufTtcblxuLyoqXG4gKiBHZW5lcmljIGRlc3Ryb3kgbWV0aG9kcyB0byBiZSBvdmVycmlkZGVuIGJ5IHRoZSBzdWJjbGFzc1xuICpcbiAqL1xuV2ViR0xNYW5hZ2VyLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLnJlbmRlcmVyLm9mZignY29udGV4dCcsIHRoaXMub25Db250ZXh0Q2hhbmdlLCB0aGlzKTtcblxuICAgIHRoaXMucmVuZGVyZXIgPSBudWxsO1xufTtcbiIsInZhciBTaGFkZXIgPSByZXF1aXJlKCcuL1NoYWRlcicpO1xuXG4vKipcbiAqIFRoaXMgc2hhZGVyIGlzIHVzZWQgdG8gZHJhdyBjb21wbGV4IHByaW1pdGl2ZSBzaGFwZXMgZm9yIHtAbGluayBQSVhJLkdyYXBoaWNzfS5cbiAqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAZXh0ZW5kcyBQSVhJLlNoYWRlclxuICogQHBhcmFtIHNoYWRlck1hbmFnZXIge1BJWEkuU2hhZGVyTWFuYWdlcn0gVGhlIHdlYmdsIHNoYWRlciBtYW5hZ2VyIHRoaXMgc2hhZGVyIHdvcmtzIGZvci5cbiAqL1xuZnVuY3Rpb24gQ29tcGxleFByaW1pdGl2ZVNoYWRlcihzaGFkZXJNYW5hZ2VyKVxue1xuICAgIFNoYWRlci5jYWxsKHRoaXMsXG4gICAgICAgIHNoYWRlck1hbmFnZXIsXG4gICAgICAgIC8vIHZlcnRleCBzaGFkZXJcbiAgICAgICAgW1xuICAgICAgICAgICAgJ2F0dHJpYnV0ZSB2ZWMyIGFWZXJ0ZXhQb3NpdGlvbjsnLFxuXG4gICAgICAgICAgICAndW5pZm9ybSBtYXQzIHRyYW5zbGF0aW9uTWF0cml4OycsXG4gICAgICAgICAgICAndW5pZm9ybSBtYXQzIHByb2plY3Rpb25NYXRyaXg7JyxcblxuICAgICAgICAgICAgJ3VuaWZvcm0gdmVjMyB0aW50OycsXG4gICAgICAgICAgICAndW5pZm9ybSBmbG9hdCBhbHBoYTsnLFxuICAgICAgICAgICAgJ3VuaWZvcm0gdmVjMyBjb2xvcjsnLFxuXG4gICAgICAgICAgICAndmFyeWluZyB2ZWM0IHZDb2xvcjsnLFxuXG4gICAgICAgICAgICAndm9pZCBtYWluKHZvaWQpeycsXG4gICAgICAgICAgICAnICAgZ2xfUG9zaXRpb24gPSB2ZWM0KChwcm9qZWN0aW9uTWF0cml4ICogdHJhbnNsYXRpb25NYXRyaXggKiB2ZWMzKGFWZXJ0ZXhQb3NpdGlvbiwgMS4wKSkueHksIDAuMCwgMS4wKTsnLFxuICAgICAgICAgICAgJyAgIHZDb2xvciA9IHZlYzQoY29sb3IgKiBhbHBoYSAqIHRpbnQsIGFscGhhKTsnLC8vXCIgKiB2ZWM0KHRpbnQgKiBhbHBoYSwgYWxwaGEpOycsXG4gICAgICAgICAgICAnfSdcbiAgICAgICAgXS5qb2luKCdcXG4nKSxcbiAgICAgICAgLy8gZnJhZ21lbnQgc2hhZGVyXG4gICAgICAgIFtcbiAgICAgICAgICAgICdwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDsnLFxuXG4gICAgICAgICAgICAndmFyeWluZyB2ZWM0IHZDb2xvcjsnLFxuXG4gICAgICAgICAgICAndm9pZCBtYWluKHZvaWQpeycsXG4gICAgICAgICAgICAnICAgZ2xfRnJhZ0NvbG9yID0gdkNvbG9yOycsXG4gICAgICAgICAgICAnfSdcbiAgICAgICAgXS5qb2luKCdcXG4nKSxcbiAgICAgICAgLy8gY3VzdG9tIHVuaWZvcm1zXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRpbnQ6ICAgeyB0eXBlOiAnM2YnLCB2YWx1ZTogWzAsIDAsIDBdIH0sXG4gICAgICAgICAgICBhbHBoYTogIHsgdHlwZTogJzFmJywgdmFsdWU6IDAgfSxcbiAgICAgICAgICAgIGNvbG9yOiAgeyB0eXBlOiAnM2YnLCB2YWx1ZTogWzAsMCwwXSB9LFxuICAgICAgICAgICAgdHJhbnNsYXRpb25NYXRyaXg6IHsgdHlwZTogJ21hdDMnLCB2YWx1ZTogbmV3IEZsb2F0MzJBcnJheSg5KSB9LFxuICAgICAgICAgICAgcHJvamVjdGlvbk1hdHJpeDogeyB0eXBlOiAnbWF0MycsIHZhbHVlOiBuZXcgRmxvYXQzMkFycmF5KDkpIH1cbiAgICAgICAgfSxcbiAgICAgICAgLy8gYXR0cmlidXRlc1xuICAgICAgICB7XG4gICAgICAgICAgICBhVmVydGV4UG9zaXRpb246MFxuICAgICAgICB9XG4gICAgKTtcbn1cblxuQ29tcGxleFByaW1pdGl2ZVNoYWRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFNoYWRlci5wcm90b3R5cGUpO1xuQ29tcGxleFByaW1pdGl2ZVNoYWRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBDb21wbGV4UHJpbWl0aXZlU2hhZGVyO1xubW9kdWxlLmV4cG9ydHMgPSBDb21wbGV4UHJpbWl0aXZlU2hhZGVyO1xuIiwidmFyIFNoYWRlciA9IHJlcXVpcmUoJy4vU2hhZGVyJyk7XG5cbi8qKlxuICogVGhpcyBzaGFkZXIgaXMgdXNlZCB0byBkcmF3IHNpbXBsZSBwcmltaXRpdmUgc2hhcGVzIGZvciB7QGxpbmsgUElYSS5HcmFwaGljc30uXG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQGV4dGVuZHMgUElYSS5TaGFkZXJcbiAqIEBwYXJhbSBzaGFkZXJNYW5hZ2VyIHtTaGFkZXJNYW5hZ2VyfSBUaGUgd2ViZ2wgc2hhZGVyIG1hbmFnZXIgdGhpcyBzaGFkZXIgd29ya3MgZm9yLlxuICovXG5mdW5jdGlvbiBQcmltaXRpdmVTaGFkZXIoc2hhZGVyTWFuYWdlcilcbntcbiAgICBTaGFkZXIuY2FsbCh0aGlzLFxuICAgICAgICBzaGFkZXJNYW5hZ2VyLFxuICAgICAgICAvLyB2ZXJ0ZXggc2hhZGVyXG4gICAgICAgIFtcbiAgICAgICAgICAgICdhdHRyaWJ1dGUgdmVjMiBhVmVydGV4UG9zaXRpb247JyxcbiAgICAgICAgICAgICdhdHRyaWJ1dGUgdmVjNCBhQ29sb3I7JyxcblxuICAgICAgICAgICAgJ3VuaWZvcm0gbWF0MyB0cmFuc2xhdGlvbk1hdHJpeDsnLFxuICAgICAgICAgICAgJ3VuaWZvcm0gbWF0MyBwcm9qZWN0aW9uTWF0cml4OycsXG5cbiAgICAgICAgICAgICd1bmlmb3JtIGZsb2F0IGFscGhhOycsXG4gICAgICAgICAgICAndW5pZm9ybSBmbG9hdCBmbGlwWTsnLFxuICAgICAgICAgICAgJ3VuaWZvcm0gdmVjMyB0aW50OycsXG5cbiAgICAgICAgICAgICd2YXJ5aW5nIHZlYzQgdkNvbG9yOycsXG5cbiAgICAgICAgICAgICd2b2lkIG1haW4odm9pZCl7JyxcbiAgICAgICAgICAgICcgICBnbF9Qb3NpdGlvbiA9IHZlYzQoKHByb2plY3Rpb25NYXRyaXggKiB0cmFuc2xhdGlvbk1hdHJpeCAqIHZlYzMoYVZlcnRleFBvc2l0aW9uLCAxLjApKS54eSwgMC4wLCAxLjApOycsXG4gICAgICAgICAgICAnICAgdkNvbG9yID0gYUNvbG9yICogdmVjNCh0aW50ICogYWxwaGEsIGFscGhhKTsnLFxuICAgICAgICAgICAgJ30nXG4gICAgICAgIF0uam9pbignXFxuJyksXG4gICAgICAgIC8vIGZyYWdtZW50IHNoYWRlclxuICAgICAgICBbXG4gICAgICAgICAgICAncHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7JyxcblxuICAgICAgICAgICAgJ3ZhcnlpbmcgdmVjNCB2Q29sb3I7JyxcblxuICAgICAgICAgICAgJ3ZvaWQgbWFpbih2b2lkKXsnLFxuICAgICAgICAgICAgJyAgIGdsX0ZyYWdDb2xvciA9IHZDb2xvcjsnLFxuICAgICAgICAgICAgJ30nXG4gICAgICAgIF0uam9pbignXFxuJyksXG4gICAgICAgIC8vIGN1c3RvbSB1bmlmb3Jtc1xuICAgICAgICB7XG4gICAgICAgICAgICB0aW50OiAgIHsgdHlwZTogJzNmJywgdmFsdWU6IFswLCAwLCAwXSB9LFxuICAgICAgICAgICAgYWxwaGE6ICB7IHR5cGU6ICcxZicsIHZhbHVlOiAwIH0sXG4gICAgICAgICAgICB0cmFuc2xhdGlvbk1hdHJpeDogeyB0eXBlOiAnbWF0MycsIHZhbHVlOiBuZXcgRmxvYXQzMkFycmF5KDkpIH0sXG4gICAgICAgICAgICBwcm9qZWN0aW9uTWF0cml4OiB7IHR5cGU6ICdtYXQzJywgdmFsdWU6IG5ldyBGbG9hdDMyQXJyYXkoOSkgfVxuICAgICAgICB9LFxuICAgICAgICAvLyBjdXN0b20gYXR0cmlidXRlc1xuICAgICAgICB7XG4gICAgICAgICAgICBhVmVydGV4UG9zaXRpb246MCxcbiAgICAgICAgICAgIGFDb2xvcjowXG4gICAgICAgIH1cbiAgICApO1xufVxuXG5QcmltaXRpdmVTaGFkZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShTaGFkZXIucHJvdG90eXBlKTtcblByaW1pdGl2ZVNoYWRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBQcmltaXRpdmVTaGFkZXI7XG5tb2R1bGUuZXhwb3J0cyA9IFByaW1pdGl2ZVNoYWRlcjtcbiIsIi8qZ2xvYmFsIGNvbnNvbGUgKi9cbnZhciB1dGlscyA9IHJlcXVpcmUoJy4uLy4uLy4uL3V0aWxzJyk7XG5cbi8qKlxuICogQmFzZSBzaGFkZXIgY2xhc3MgZm9yIFBJWEkgbWFuYWdlZCBzaGFkZXJzLlxuICpcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqIEBwYXJhbSBzaGFkZXJNYW5hZ2VyIHtQSVhJLlNoYWRlck1hbmFnZXJ9IFRoZSB3ZWJnbCBzaGFkZXIgbWFuYWdlciB0aGlzIHNoYWRlciB3b3JrcyBmb3IuXG4gKiBAcGFyYW0gW3ZlcnRleFNyY10ge3N0cmluZ30gVGhlIHNvdXJjZSBvZiB0aGUgdmVydGV4IHNoYWRlci5cbiAqIEBwYXJhbSBbZnJhZ21lbnRTcmNdIHtzdHJpbmd9IFRoZSBzb3VyY2Ugb2YgdGhlIGZyYWdtZW50IHNoYWRlci5cbiAqIEBwYXJhbSBbdW5pZm9ybXNdIHtvYmplY3R9IFVuaWZvcm1zIGZvciB0aGlzIHNoYWRlci5cbiAqIEBwYXJhbSBbYXR0cmlidXRlc10ge29iamVjdH0gQXR0cmlidXRlcyBmb3IgdGhpcyBzaGFkZXIuXG4gKi9cbmZ1bmN0aW9uIFNoYWRlcihzaGFkZXJNYW5hZ2VyLCB2ZXJ0ZXhTcmMsIGZyYWdtZW50U3JjLCB1bmlmb3JtcywgYXR0cmlidXRlcylcbntcbiAgICBpZiAoIXZlcnRleFNyYyB8fCAhZnJhZ21lbnRTcmMpXG4gICAge1xuICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdQaXhpLmpzIEVycm9yLiBTaGFkZXIgcmVxdWlyZXMgdmVydGV4U3JjIGFuZCBmcmFnbWVudFNyYycpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEEgdW5pcXVlIGlkXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEByZWFkb25seVxuICAgICAqL1xuICAgIHRoaXMudWlkID0gdXRpbHMudWlkKCk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgY3VycmVudCBXZWJHTCBkcmF3aW5nIGNvbnRleHRcbiAgICAgKiBAbWVtYmVyIHtXZWJHTFJlbmRlcmluZ0NvbnRleHR9XG4gICAgICogQHJlYWRvbmx5XG4gICAgICovXG4gICAgdGhpcy5nbCA9IHNoYWRlck1hbmFnZXIucmVuZGVyZXIuZ2w7XG5cbiAgICAvL1RPRE8gbWF5YmUgd2Ugc2hvdWxkIHBhc3MgcmVuZGVyZXIgcmF0aGVyIHRoYW4gc2hhZGVyIG1hbmdlcj8/IGZvb2QgZm9yIHRob3VnaHQuLlxuICAgIHRoaXMuc2hhZGVyTWFuYWdlciA9IHNoYWRlck1hbmFnZXI7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgV2ViR0wgcHJvZ3JhbS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1dlYkdMUHJvZ3JhbX1cbiAgICAgKiBAcmVhZG9ubHlcbiAgICAgKi9cbiAgICB0aGlzLnByb2dyYW0gPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHVuaWZvcm1zIGFzIGFuIG9iamVjdFxuICAgICAqIEBtZW1iZXIge29iamVjdH1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMudW5pZm9ybXMgPSB1bmlmb3JtcyB8fCB7fTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBhdHRyaWJ1dGVzIGFzIGFuIG9iamVjdFxuICAgICAqIEBtZW1iZXIge29iamVjdH1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuYXR0cmlidXRlcyA9IGF0dHJpYnV0ZXMgfHwge307XG5cbiAgICAvKipcbiAgICAgKiBJbnRlcm5hbCB0ZXh0dXJlIGNvdW50ZXJcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLnRleHR1cmVDb3VudCA9IDE7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgdmVydGV4IHNoYWRlciBhcyBhbiBhcnJheSBvZiBzdHJpbmdzXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtzdHJpbmd9XG4gICAgICovXG4gICAgdGhpcy52ZXJ0ZXhTcmMgPSB2ZXJ0ZXhTcmM7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgZnJhZ21lbnQgc2hhZGVyIGFzIGFuIGFycmF5IG9mIHN0cmluZ3NcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge3N0cmluZ31cbiAgICAgKi9cbiAgICB0aGlzLmZyYWdtZW50U3JjID0gZnJhZ21lbnRTcmM7XG5cbiAgICB0aGlzLmluaXQoKTtcbn1cblxuU2hhZGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFNoYWRlcjtcbm1vZHVsZS5leHBvcnRzID0gU2hhZGVyO1xuXG4vKipcbiAqIENyZWF0ZXMgdGhlIHNoYWRlciBhbmQgdXNlcyBpdFxuICpcbiAqL1xuU2hhZGVyLnByb3RvdHlwZS5pbml0ID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLmNvbXBpbGUoKTtcblxuICAgIHRoaXMuZ2wudXNlUHJvZ3JhbSh0aGlzLnByb2dyYW0pO1xuXG4gICAgdGhpcy5jYWNoZVVuaWZvcm1Mb2NhdGlvbnMoT2JqZWN0LmtleXModGhpcy51bmlmb3JtcykpO1xuICAgIHRoaXMuY2FjaGVBdHRyaWJ1dGVMb2NhdGlvbnMoT2JqZWN0LmtleXModGhpcy5hdHRyaWJ1dGVzKSk7XG59O1xuXG4vKipcbiAqIENhY2hlcyB0aGUgbG9jYXRpb25zIG9mIHRoZSB1bmlmb3JtIGZvciByZXVzZS5cbiAqXG4gKiBAcGFyYW0ga2V5cyB7c3RyaW5nfSB0aGUgdW5pZm9ybXMgdG8gY2FjaGVcbiAqL1xuU2hhZGVyLnByb3RvdHlwZS5jYWNoZVVuaWZvcm1Mb2NhdGlvbnMgPSBmdW5jdGlvbiAoa2V5cylcbntcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyArK2kpXG4gICAge1xuICAgICAgICB0aGlzLnVuaWZvcm1zW2tleXNbaV1dLl9sb2NhdGlvbiA9IHRoaXMuZ2wuZ2V0VW5pZm9ybUxvY2F0aW9uKHRoaXMucHJvZ3JhbSwga2V5c1tpXSk7XG4gICAgfVxufTtcblxuLyoqXG4gKiBDYWNoZXMgdGhlIGxvY2F0aW9ucyBvZiB0aGUgYXR0cmlidXRlIGZvciByZXVzZS5cbiAqXG4gKiBAcGFyYW0ga2V5cyB7c3RyaW5nfSB0aGUgYXR0cmlidXRlcyB0byBjYWNoZVxuICovXG5TaGFkZXIucHJvdG90eXBlLmNhY2hlQXR0cmlidXRlTG9jYXRpb25zID0gZnVuY3Rpb24gKGtleXMpXG57XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgKytpKVxuICAgIHtcbiAgICAgICAgdGhpcy5hdHRyaWJ1dGVzW2tleXNbaV1dID0gdGhpcy5nbC5nZXRBdHRyaWJMb2NhdGlvbih0aGlzLnByb2dyYW0sIGtleXNbaV0pO1xuICAgIH1cblxuICAgIC8vIFRPRE86IENoZWNrIGlmIHRoaXMgaXMgbmVlZGVkIGFueW1vcmUuLi5cblxuICAgIC8vIEJlZ2luIHdvcnN0IGhhY2sgZXZhIC8vXG5cbiAgICAvLyBXSFk/Pz8gT05MWSBvbiBteSBjaHJvbWUgcGl4ZWwgdGhlIGxpbmUgYWJvdmUgcmV0dXJucyAtMSB3aGVuIHVzaW5nIGZpbHRlcnM/XG4gICAgLy8gbWF5YmUgaXRzIHNvbWV0aGluZyB0byBkbyB3aXRoIHRoZSBjdXJyZW50IHN0YXRlIG9mIHRoZSBnbCBjb250ZXh0LlxuICAgIC8vIEknbSBjb252aW5jZWQgdGhpcyBpcyBhIGJ1ZyBpbiB0aGUgY2hyb21lIGJyb3dzZXIgYXMgdGhlcmUgaXMgTk8gcmVhc29uIHdoeSB0aGlzIHNob3VsZCBiZSByZXR1cm5pbmcgLTEgZXNwZWNpYWxseSBhcyBpdCBvbmx5IG1hbmlmZXN0cyBvbiBteSBjaHJvbWUgcGl4ZWxcbiAgICAvLyBJZiB0aGVyZXMgYW55IHdlYkdMIHBlb3BsZSB0aGF0IGtub3cgd2h5IGNvdWxkIGhhcHBlbiBwbGVhc2UgaGVscCA6KVxuICAgIC8vIGlmICh0aGlzLmF0dHJpYnV0ZXMuYUNvbG9yID09PSAtMSl7XG4gICAgLy8gICAgIHRoaXMuYXR0cmlidXRlcy5hQ29sb3IgPSAyO1xuICAgIC8vIH1cblxuICAgIC8vIEVuZCB3b3JzdCBoYWNrIGV2YSAvL1xufTtcblxuLyoqXG4gKiBBdHRhY2hlcyB0aGUgc2hhZGVycyBhbmQgY3JlYXRlcyB0aGUgcHJvZ3JhbS5cbiAqXG4gKiBAcmV0dXJuIHtXZWJHTFByb2dyYW19XG4gKi9cblNoYWRlci5wcm90b3R5cGUuY29tcGlsZSA9IGZ1bmN0aW9uICgpXG57XG4gICAgdmFyIGdsID0gdGhpcy5nbDtcblxuICAgIHZhciBnbFZlcnRTaGFkZXIgPSB0aGlzLl9nbENvbXBpbGUoZ2wuVkVSVEVYX1NIQURFUiwgdGhpcy52ZXJ0ZXhTcmMpO1xuICAgIHZhciBnbEZyYWdTaGFkZXIgPSB0aGlzLl9nbENvbXBpbGUoZ2wuRlJBR01FTlRfU0hBREVSLCB0aGlzLmZyYWdtZW50U3JjKTtcblxuICAgIHZhciBwcm9ncmFtID0gZ2wuY3JlYXRlUHJvZ3JhbSgpO1xuXG4gICAgZ2wuYXR0YWNoU2hhZGVyKHByb2dyYW0sIGdsVmVydFNoYWRlcik7XG4gICAgZ2wuYXR0YWNoU2hhZGVyKHByb2dyYW0sIGdsRnJhZ1NoYWRlcik7XG4gICAgZ2wubGlua1Byb2dyYW0ocHJvZ3JhbSk7XG5cbiAgICAvLyBpZiBsaW5raW5nIGZhaWxzLCB0aGVuIGxvZyBhbmQgY2xlYW51cFxuICAgIGlmICghZ2wuZ2V0UHJvZ3JhbVBhcmFtZXRlcihwcm9ncmFtLCBnbC5MSU5LX1NUQVRVUykpXG4gICAge1xuICAgICAgICBjb25zb2xlLmVycm9yKCdQaXhpLmpzIEVycm9yOiBDb3VsZCBub3QgaW5pdGlhbGl6ZSBzaGFkZXIuJyk7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ2dsLlZBTElEQVRFX1NUQVRVUycsIGdsLmdldFByb2dyYW1QYXJhbWV0ZXIocHJvZ3JhbSwgZ2wuVkFMSURBVEVfU1RBVFVTKSk7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ2dsLmdldEVycm9yKCknLCBnbC5nZXRFcnJvcigpKTtcblxuICAgICAgICAvLyBpZiB0aGVyZSBpcyBhIHByb2dyYW0gaW5mbyBsb2csIGxvZyBpdFxuICAgICAgICBpZiAoZ2wuZ2V0UHJvZ3JhbUluZm9Mb2cocHJvZ3JhbSkgIT09ICcnKVxuICAgICAgICB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ1BpeGkuanMgV2FybmluZzogZ2wuZ2V0UHJvZ3JhbUluZm9Mb2coKScsIGdsLmdldFByb2dyYW1JbmZvTG9nKHByb2dyYW0pKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGdsLmRlbGV0ZVByb2dyYW0ocHJvZ3JhbSk7XG4gICAgICAgIHByb2dyYW0gPSBudWxsO1xuICAgIH1cblxuICAgIC8vIGNsZWFuIHVwIHNvbWUgc2hhZGVyc1xuICAgIGdsLmRlbGV0ZVNoYWRlcihnbFZlcnRTaGFkZXIpO1xuICAgIGdsLmRlbGV0ZVNoYWRlcihnbEZyYWdTaGFkZXIpO1xuXG4gICAgcmV0dXJuICh0aGlzLnByb2dyYW0gPSBwcm9ncmFtKTtcbn07XG5cbi8qKlxuKiBBZGRzIGEgbmV3IHVuaWZvcm1cbipcbiogQHBhcmFtIHVuaWZvcm0ge29iamVjdH0gdGhlIG5ldyB1bmlmb3JtIHRvIGF0dGFjaFxuKi9cblNoYWRlci5wcm90b3R5cGUuc3luY1VuaWZvcm0gPSBmdW5jdGlvbiAodW5pZm9ybSlcbntcbiAgICB2YXIgbG9jYXRpb24gPSB1bmlmb3JtLl9sb2NhdGlvbixcbiAgICAgICAgdmFsdWUgPSB1bmlmb3JtLnZhbHVlLFxuICAgICAgICBnbCA9IHRoaXMuZ2wsXG4gICAgICAgIGksIGlsO1xuXG4gICAgc3dpdGNoICh1bmlmb3JtLnR5cGUpXG4gICAge1xuICAgICAgICBjYXNlICdiJzpcbiAgICAgICAgY2FzZSAnYm9vbCc6XG4gICAgICAgIGNhc2UgJ2Jvb2xlYW4nOlxuICAgICAgICAgICAgZ2wudW5pZm9ybTFpKGxvY2F0aW9uLCB2YWx1ZSA/IDEgOiAwKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIC8vIHNpbmdsZSBpbnQgdmFsdWVcbiAgICAgICAgY2FzZSAnaSc6XG4gICAgICAgIGNhc2UgJzFpJzpcbiAgICAgICAgICAgIGdsLnVuaWZvcm0xaShsb2NhdGlvbiwgdmFsdWUpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLy8gc2luZ2xlIGZsb2F0IHZhbHVlXG4gICAgICAgIGNhc2UgJ2YnOlxuICAgICAgICBjYXNlICcxZic6XG4gICAgICAgICAgICBnbC51bmlmb3JtMWYobG9jYXRpb24sIHZhbHVlKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIC8vIEZsb2F0MzJBcnJheSgyKSBvciBKUyBBcnJyYXlcbiAgICAgICAgY2FzZSAnMmYnOlxuICAgICAgICAgICAgZ2wudW5pZm9ybTJmKGxvY2F0aW9uLCB2YWx1ZVswXSwgdmFsdWVbMV0pO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLy8gRmxvYXQzMkFycmF5KDMpIG9yIEpTIEFycnJheVxuICAgICAgICBjYXNlICczZic6XG4gICAgICAgICAgICBnbC51bmlmb3JtM2YobG9jYXRpb24sIHZhbHVlWzBdLCB2YWx1ZVsxXSwgdmFsdWVbMl0pO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLy8gRmxvYXQzMkFycmF5KDQpIG9yIEpTIEFycnJheVxuICAgICAgICBjYXNlICc0Zic6XG4gICAgICAgICAgICBnbC51bmlmb3JtNGYobG9jYXRpb24sIHZhbHVlWzBdLCB2YWx1ZVsxXSwgdmFsdWVbMl0sIHZhbHVlWzNdKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIC8vIGEgMkQgUG9pbnQgb2JqZWN0XG4gICAgICAgIGNhc2UgJ3YyJzpcbiAgICAgICAgICAgIGdsLnVuaWZvcm0yZihsb2NhdGlvbiwgdmFsdWUueCwgdmFsdWUueSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAvLyBhIDNEIFBvaW50IG9iamVjdFxuICAgICAgICBjYXNlICd2Myc6XG4gICAgICAgICAgICBnbC51bmlmb3JtM2YobG9jYXRpb24sIHZhbHVlLngsIHZhbHVlLnksIHZhbHVlLnopO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLy8gYSA0RCBQb2ludCBvYmplY3RcbiAgICAgICAgY2FzZSAndjQnOlxuICAgICAgICAgICAgZ2wudW5pZm9ybTRmKGxvY2F0aW9uLCB2YWx1ZS54LCB2YWx1ZS55LCB2YWx1ZS56LCB2YWx1ZS53KTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIC8vIEludDMyQXJyYXkgb3IgSlMgQXJyYXlcbiAgICAgICAgY2FzZSAnMWl2JzpcbiAgICAgICAgICAgIGdsLnVuaWZvcm0xaXYobG9jYXRpb24sIHZhbHVlKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIC8vIEludDMyQXJyYXkgb3IgSlMgQXJyYXlcbiAgICAgICAgY2FzZSAnMml2JzpcbiAgICAgICAgICAgIGdsLnVuaWZvcm0yaXYobG9jYXRpb24sIHZhbHVlKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIC8vIEludDMyQXJyYXkgb3IgSlMgQXJyYXlcbiAgICAgICAgY2FzZSAnM2l2JzpcbiAgICAgICAgICAgIGdsLnVuaWZvcm0zaXYobG9jYXRpb24sIHZhbHVlKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIC8vIEludDMyQXJyYXkgb3IgSlMgQXJyYXlcbiAgICAgICAgY2FzZSAnNGl2JzpcbiAgICAgICAgICAgIGdsLnVuaWZvcm00aXYobG9jYXRpb24sIHZhbHVlKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIC8vIEZsb2F0MzJBcnJheSBvciBKUyBBcnJheVxuICAgICAgICBjYXNlICcxZnYnOlxuICAgICAgICAgICAgZ2wudW5pZm9ybTFmdihsb2NhdGlvbiwgdmFsdWUpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLy8gRmxvYXQzMkFycmF5IG9yIEpTIEFycmF5XG4gICAgICAgIGNhc2UgJzJmdic6XG4gICAgICAgICAgICBnbC51bmlmb3JtMmZ2KGxvY2F0aW9uLCB2YWx1ZSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAvLyBGbG9hdDMyQXJyYXkgb3IgSlMgQXJyYXlcbiAgICAgICAgY2FzZSAnM2Z2JzpcbiAgICAgICAgICAgIGdsLnVuaWZvcm0zZnYobG9jYXRpb24sIHZhbHVlKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIC8vIEZsb2F0MzJBcnJheSBvciBKUyBBcnJheVxuICAgICAgICBjYXNlICc0ZnYnOlxuICAgICAgICAgICAgZ2wudW5pZm9ybTRmdihsb2NhdGlvbiwgdmFsdWUpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLy8gRmxvYXQzMkFycmF5IG9yIEpTIEFycmF5XG4gICAgICAgIGNhc2UgJ20yJzpcbiAgICAgICAgY2FzZSAnbWF0Mic6XG4gICAgICAgIGNhc2UgJ01hdHJpeDJmdic6XG4gICAgICAgICAgICBnbC51bmlmb3JtTWF0cml4MmZ2KGxvY2F0aW9uLCB1bmlmb3JtLnRyYW5zcG9zZSwgdmFsdWUpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLy8gRmxvYXQzMkFycmF5IG9yIEpTIEFycmF5XG4gICAgICAgIGNhc2UgJ20zJzpcbiAgICAgICAgY2FzZSAnbWF0Myc6XG4gICAgICAgIGNhc2UgJ01hdHJpeDNmdic6XG5cbiAgICAgICAgICAgIGdsLnVuaWZvcm1NYXRyaXgzZnYobG9jYXRpb24sIHVuaWZvcm0udHJhbnNwb3NlLCB2YWx1ZSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAvLyBGbG9hdDMyQXJyYXkgb3IgSlMgQXJyYXlcbiAgICAgICAgY2FzZSAnbTQnOlxuICAgICAgICBjYXNlICdtYXQ0JzpcbiAgICAgICAgY2FzZSAnTWF0cml4NGZ2JzpcbiAgICAgICAgICAgIGdsLnVuaWZvcm1NYXRyaXg0ZnYobG9jYXRpb24sIHVuaWZvcm0udHJhbnNwb3NlLCB2YWx1ZSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAvLyBhIENvbG9yIFZhbHVlXG4gICAgICAgIGNhc2UgJ2MnOlxuICAgICAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdmFsdWUgPSB1dGlscy5oZXgycmdiKHZhbHVlKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZ2wudW5pZm9ybTNmKGxvY2F0aW9uLCB2YWx1ZVswXSwgdmFsdWVbMV0sIHZhbHVlWzJdKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIC8vIGZsYXQgYXJyYXkgb2YgaW50ZWdlcnMgKEpTIG9yIHR5cGVkIGFycmF5KVxuICAgICAgICBjYXNlICdpdjEnOlxuICAgICAgICAgICAgZ2wudW5pZm9ybTFpdihsb2NhdGlvbiwgdmFsdWUpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLy8gZmxhdCBhcnJheSBvZiBpbnRlZ2VycyB3aXRoIDMgeCBOIHNpemUgKEpTIG9yIHR5cGVkIGFycmF5KVxuICAgICAgICBjYXNlICdpdic6XG4gICAgICAgICAgICBnbC51bmlmb3JtM2l2KGxvY2F0aW9uLCB2YWx1ZSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAvLyBmbGF0IGFycmF5IG9mIGZsb2F0cyAoSlMgb3IgdHlwZWQgYXJyYXkpXG4gICAgICAgIGNhc2UgJ2Z2MSc6XG4gICAgICAgICAgICBnbC51bmlmb3JtMWZ2KGxvY2F0aW9uLCB2YWx1ZSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAvLyBmbGF0IGFycmF5IG9mIGZsb2F0cyB3aXRoIDMgeCBOIHNpemUgKEpTIG9yIHR5cGVkIGFycmF5KVxuICAgICAgICBjYXNlICdmdic6XG4gICAgICAgICAgICBnbC51bmlmb3JtM2Z2KGxvY2F0aW9uLCB2YWx1ZSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAvLyBhcnJheSBvZiAyRCBQb2ludCBvYmplY3RzXG4gICAgICAgIGNhc2UgJ3Yydic6XG4gICAgICAgICAgICBpZiAoIXVuaWZvcm0uX2FycmF5KVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHVuaWZvcm0uX2FycmF5ID0gbmV3IEZsb2F0MzJBcnJheSgyICogdmFsdWUubGVuZ3RoKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZm9yIChpID0gMCwgaWwgPSB2YWx1ZS5sZW5ndGg7IGkgPCBpbDsgKytpKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHVuaWZvcm0uX2FycmF5W2kgKiAyXSAgICAgICA9IHZhbHVlW2ldLng7XG4gICAgICAgICAgICAgICAgdW5pZm9ybS5fYXJyYXlbaSAqIDIgKyAxXSAgID0gdmFsdWVbaV0ueTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZ2wudW5pZm9ybTJmdihsb2NhdGlvbiwgdW5pZm9ybS5fYXJyYXkpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLy8gYXJyYXkgb2YgM0QgUG9pbnQgb2JqZWN0c1xuICAgICAgICBjYXNlICd2M3YnOlxuICAgICAgICAgICAgaWYgKCF1bmlmb3JtLl9hcnJheSlcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB1bmlmb3JtLl9hcnJheSA9IG5ldyBGbG9hdDMyQXJyYXkoMyAqIHZhbHVlLmxlbmd0aCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGZvciAoaSA9IDAsIGlsID0gdmFsdWUubGVuZ3RoOyBpIDwgaWw7ICsraSlcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB1bmlmb3JtLl9hcnJheVtpICogM10gICAgICAgPSB2YWx1ZVtpXS54O1xuICAgICAgICAgICAgICAgIHVuaWZvcm0uX2FycmF5W2kgKiAzICsgMV0gICA9IHZhbHVlW2ldLnk7XG4gICAgICAgICAgICAgICAgdW5pZm9ybS5fYXJyYXlbaSAqIDMgKyAyXSAgID0gdmFsdWVbaV0uejtcblxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBnbC51bmlmb3JtM2Z2KGxvY2F0aW9uLCB1bmlmb3JtLl9hcnJheSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAvLyBhcnJheSBvZiA0RCBQb2ludCBvYmplY3RzXG4gICAgICAgIGNhc2UgJ3Y0dic6XG4gICAgICAgICAgICBpZiAoIXVuaWZvcm0uX2FycmF5KVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHVuaWZvcm0uX2FycmF5ID0gbmV3IEZsb2F0MzJBcnJheSg0ICogdmFsdWUubGVuZ3RoKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZm9yIChpID0gMCwgaWwgPSB2YWx1ZS5sZW5ndGg7IGkgPCBpbDsgKytpKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHVuaWZvcm0uX2FycmF5W2kgKiA0XSAgICAgICA9IHZhbHVlW2ldLng7XG4gICAgICAgICAgICAgICAgdW5pZm9ybS5fYXJyYXlbaSAqIDQgKyAxXSAgID0gdmFsdWVbaV0ueTtcbiAgICAgICAgICAgICAgICB1bmlmb3JtLl9hcnJheVtpICogNCArIDJdICAgPSB2YWx1ZVtpXS56O1xuICAgICAgICAgICAgICAgIHVuaWZvcm0uX2FycmF5W2kgKiA0ICsgM10gICA9IHZhbHVlW2ldLnc7XG5cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZ2wudW5pZm9ybTRmdihsb2NhdGlvbiwgdW5pZm9ybS5fYXJyYXkpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLy8gUElYSS5UZXh0dXJlXG4gICAgICAgIGNhc2UgJ3QnOlxuICAgICAgICBjYXNlICdzYW1wbGVyMkQnOlxuXG4gICAgICAgICAgICBpZiAoIXVuaWZvcm0udmFsdWUgfHwgIXVuaWZvcm0udmFsdWUuYmFzZVRleHR1cmUuaGFzTG9hZGVkKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBhY3RpdmF0ZSB0aGlzIHRleHR1cmVcbiAgICAgICAgICAgIGdsLmFjdGl2ZVRleHR1cmUoZ2xbJ1RFWFRVUkUnICsgdGhpcy50ZXh0dXJlQ291bnRdKTtcblxuICAgICAgICAgICAgdmFyIHRleHR1cmUgPSB1bmlmb3JtLnZhbHVlLmJhc2VUZXh0dXJlLl9nbFRleHR1cmVzW2dsLmlkXTtcblxuICAgICAgICAgICAgaWYgKCF0ZXh0dXJlKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHRoaXMuaW5pdFNhbXBsZXIyRCh1bmlmb3JtKTtcblxuICAgICAgICAgICAgICAgIC8vIHNldCB0aGUgdGV4dHVyIHRvIHRoZSBuZXdseSBjcmVhdGVkIG9uZS4uXG4gICAgICAgICAgICAgICAgdGV4dHVyZSA9IHVuaWZvcm0udmFsdWUuYmFzZVRleHR1cmUuX2dsVGV4dHVyZXNbZ2wuaWRdO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBiaW5kIHRoZSB0ZXh0dXJlXG4gICAgICAgICAgICBnbC5iaW5kVGV4dHVyZShnbC5URVhUVVJFXzJELCB0ZXh0dXJlKTtcblxuICAgICAgICAgICAgLy8gc2V0IHVuaWZvcm0gdG8gdGV4dHVyZSBpbmRleFxuICAgICAgICAgICAgZ2wudW5pZm9ybTFpKHVuaWZvcm0uX2xvY2F0aW9uLCB0aGlzLnRleHR1cmVDb3VudCk7XG5cbiAgICAgICAgICAgIC8vIGluY3JlbWVudCBuZXh0IHRleHR1cmUgaWRcbiAgICAgICAgICAgIHRoaXMudGV4dHVyZUNvdW50Kys7XG5cbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ1BpeGkuanMgU2hhZGVyIFdhcm5pbmc6IFVua25vd24gdW5pZm9ybSB0eXBlOiAnICsgdW5pZm9ybS50eXBlKTtcbiAgICB9XG59O1xuXG4vKipcbiAqIFVwZGF0ZXMgdGhlIHNoYWRlciB1bmlmb3JtIHZhbHVlcy5cbiAqXG4gKi9cblNoYWRlci5wcm90b3R5cGUuc3luY1VuaWZvcm1zID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLnRleHR1cmVDb3VudCA9IDE7XG5cbiAgICBmb3IgKHZhciBrZXkgaW4gdGhpcy51bmlmb3JtcylcbiAgICB7XG4gICAgICAgIHRoaXMuc3luY1VuaWZvcm0odGhpcy51bmlmb3Jtc1trZXldKTtcbiAgICB9XG59O1xuXG5cbi8qKlxuICogSW5pdGlhbGlzZXMgYSBTYW1wbGVyMkQgdW5pZm9ybSAod2hpY2ggbWF5IG9ubHkgYmUgYXZhaWxhYmxlIGxhdGVyIG9uIGFmdGVyIGluaXRVbmlmb3JtcyBvbmNlIHRoZSB0ZXh0dXJlIGhhcyBsb2FkZWQpXG4gKlxuICovXG5TaGFkZXIucHJvdG90eXBlLmluaXRTYW1wbGVyMkQgPSBmdW5jdGlvbiAodW5pZm9ybSlcbntcbiAgICB2YXIgZ2wgPSB0aGlzLmdsO1xuXG4gICAgdmFyIHRleHR1cmUgPSB1bmlmb3JtLnZhbHVlLmJhc2VUZXh0dXJlO1xuXG4gICAgaWYoIXRleHR1cmUuaGFzTG9hZGVkKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuXG5cbiAgICBpZiAodW5pZm9ybS50ZXh0dXJlRGF0YSlcbiAgICB7XG5cbiAgICAgICAgLy9UT0RPIG1vdmUgdGhpcy4uLlxuICAgICAgICB2YXIgZGF0YSA9IHVuaWZvcm0udGV4dHVyZURhdGE7XG5cbiAgICAgICAgdGV4dHVyZS5fZ2xUZXh0dXJlc1tnbC5pZF0gPSBnbC5jcmVhdGVUZXh0dXJlKCk7XG5cbiAgICAgICAgZ2wuYmluZFRleHR1cmUoZ2wuVEVYVFVSRV8yRCwgdGV4dHVyZS5fZ2xUZXh0dXJlc1tnbC5pZF0pO1xuXG4gICAgICAgIGdsLnBpeGVsU3RvcmVpKGdsLlVOUEFDS19QUkVNVUxUSVBMWV9BTFBIQV9XRUJHTCwgdGV4dHVyZS5wcmVtdWx0aXBsaWVkQWxwaGEpO1xuICAgICAgICAvLyBHTFRleHR1cmUgPSBtYWcgbGluZWFyLCBtaW4gbGluZWFyX21pcG1hcF9saW5lYXIsIHdyYXAgcmVwZWF0ICsgZ2wuZ2VuZXJhdGVNaXBtYXAoZ2wuVEVYVFVSRV8yRCk7XG4gICAgICAgIC8vIEdMVGV4dHVyZUxpbmVhciA9IG1hZy9taW4gbGluZWFyLCB3cmFwIGNsYW1wXG4gICAgICAgIC8vIEdMVGV4dHVyZU5lYXJlc3RSZXBlYXQgPSBtYWcvbWluIE5FQVJFU1QsIHdyYXAgcmVwZWF0XG4gICAgICAgIC8vIEdMVGV4dHVyZU5lYXJlc3QgPSBtYWcvbWluIG5lYXJlc3QsIHdyYXAgY2xhbXBcbiAgICAgICAgLy8gQXVkaW9UZXh0dXJlID0gd2hhdGV2ZXIgKyBsdW1pbmFuY2UgKyB3aWR0aCA1MTIsIGhlaWdodCAyLCBib3JkZXIgMFxuICAgICAgICAvLyBLZXlUZXh0dXJlID0gd2hhdGV2ZXIgKyBsdW1pbmFuY2UgKyB3aWR0aCAyNTYsIGhlaWdodCAyLCBib3JkZXIgMFxuXG4gICAgICAgIC8vICBtYWdGaWx0ZXIgY2FuIGJlOiBnbC5MSU5FQVIsIGdsLkxJTkVBUl9NSVBNQVBfTElORUFSIG9yIGdsLk5FQVJFU1RcbiAgICAgICAgLy8gIHdyYXBTL1QgY2FuIGJlOiBnbC5DTEFNUF9UT19FREdFIG9yIGdsLlJFUEVBVFxuXG4gICAgICAgIGdsLnRleEltYWdlMkQoZ2wuVEVYVFVSRV8yRCwgMCwgZGF0YS5sdW1pbmFuY2UgPyBnbC5MVU1JTkFOQ0UgOiBnbC5SR0JBLCBnbC5SR0JBLCBnbC5VTlNJR05FRF9CWVRFLCB0ZXh0dXJlLnNvdXJjZSk7XG5cbiAgICAgICAgZ2wudGV4UGFyYW1ldGVyaShnbC5URVhUVVJFXzJELCBnbC5URVhUVVJFX01BR19GSUxURVIsIGRhdGEubWFnRmlsdGVyID8gZGF0YS5tYWdGaWx0ZXIgOiBnbC5MSU5FQVIgKTtcbiAgICAgICAgZ2wudGV4UGFyYW1ldGVyaShnbC5URVhUVVJFXzJELCBnbC5URVhUVVJFX01JTl9GSUxURVIsIGRhdGEud3JhcFMgPyBkYXRhLndyYXBTIDogZ2wuQ0xBTVBfVE9fRURHRSApO1xuXG4gICAgICAgIGdsLnRleFBhcmFtZXRlcmkoZ2wuVEVYVFVSRV8yRCwgZ2wuVEVYVFVSRV9XUkFQX1QsIGRhdGEud3JhcFMgPyBkYXRhLndyYXBTIDogZ2wuQ0xBTVBfVE9fRURHRSk7XG4gICAgICAgIGdsLnRleFBhcmFtZXRlcmkoZ2wuVEVYVFVSRV8yRCwgZ2wuVEVYVFVSRV9XUkFQX1MsIGRhdGEud3JhcFQgPyBkYXRhLndyYXBUIDogZ2wuQ0xBTVBfVE9fRURHRSk7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHRoaXMuc2hhZGVyTWFuYWdlci5yZW5kZXJlci51cGRhdGVUZXh0dXJlKHRleHR1cmUpO1xuICAgIH1cbn07XG5cbi8qKlxuICogRGVzdHJveXMgdGhlIHNoYWRlci5cbiAqXG4gKi9cblNoYWRlci5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy5nbC5kZWxldGVQcm9ncmFtKHRoaXMucHJvZ3JhbSk7XG5cbiAgICB0aGlzLmdsID0gbnVsbDtcbiAgICB0aGlzLnVuaWZvcm1zID0gbnVsbDtcbiAgICB0aGlzLmF0dHJpYnV0ZXMgPSBudWxsO1xuXG4gICAgdGhpcy52ZXJ0ZXhTcmMgPSBudWxsO1xuICAgIHRoaXMuZnJhZ21lbnRTcmMgPSBudWxsO1xufTtcblxuU2hhZGVyLnByb3RvdHlwZS5fZ2xDb21waWxlID0gZnVuY3Rpb24gKHR5cGUsIHNyYylcbntcbiAgICB2YXIgc2hhZGVyID0gdGhpcy5nbC5jcmVhdGVTaGFkZXIodHlwZSk7XG5cbiAgICB0aGlzLmdsLnNoYWRlclNvdXJjZShzaGFkZXIsIHNyYyk7XG4gICAgdGhpcy5nbC5jb21waWxlU2hhZGVyKHNoYWRlcik7XG5cbiAgICBpZiAoIXRoaXMuZ2wuZ2V0U2hhZGVyUGFyYW1ldGVyKHNoYWRlciwgdGhpcy5nbC5DT01QSUxFX1NUQVRVUykpXG4gICAge1xuICAgICAgICBjb25zb2xlLmxvZyh0aGlzLmdsLmdldFNoYWRlckluZm9Mb2coc2hhZGVyKSk7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHJldHVybiBzaGFkZXI7XG59O1xuIiwidmFyIFNoYWRlciA9IHJlcXVpcmUoJy4vU2hhZGVyJyk7XG5cbi8qKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQGV4dGVuZHMgUElYSS5TaGFkZXJcbiAqIEBwYXJhbSBzaGFkZXJNYW5hZ2VyIHtQSVhJLlNoYWRlck1hbmFnZXJ9IFRoZSB3ZWJnbCBzaGFkZXIgbWFuYWdlciB0aGlzIHNoYWRlciB3b3JrcyBmb3IuXG4gKiBAcGFyYW0gW3ZlcnRleFNyY10ge3N0cmluZ30gVGhlIHNvdXJjZSBvZiB0aGUgdmVydGV4IHNoYWRlci5cbiAqIEBwYXJhbSBbZnJhZ21lbnRTcmNdIHtzdHJpbmd9IFRoZSBzb3VyY2Ugb2YgdGhlIGZyYWdtZW50IHNoYWRlci5cbiAqIEBwYXJhbSBbY3VzdG9tVW5pZm9ybXNdIHtvYmplY3R9IEN1c3RvbSB1bmlmb3JtcyB0byB1c2UgdG8gYXVnbWVudCB0aGUgYnVpbHQtaW4gb25lcy5cbiAqIEBwYXJhbSBbZnJhZ21lbnRTcmNdIHtzdHJpbmd9IFRoZSBzb3VyY2Ugb2YgdGhlIGZyYWdtZW50IHNoYWRlci5cbiAqL1xuZnVuY3Rpb24gVGV4dHVyZVNoYWRlcihzaGFkZXJNYW5hZ2VyLCB2ZXJ0ZXhTcmMsIGZyYWdtZW50U3JjLCBjdXN0b21Vbmlmb3JtcywgY3VzdG9tQXR0cmlidXRlcylcbntcbiAgICB2YXIgdW5pZm9ybXMgPSB7XG5cbiAgICAgICAgdVNhbXBsZXI6ICAgICAgICAgICB7IHR5cGU6ICdzYW1wbGVyMkQnLCB2YWx1ZTogMCB9LFxuICAgICAgICBwcm9qZWN0aW9uTWF0cml4OiAgIHsgdHlwZTogJ21hdDMnLCB2YWx1ZTogbmV3IEZsb2F0MzJBcnJheShbMSwgMCwgMCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsIDEsIDAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLCAwLCAxXSkgfVxuICAgIH07XG5cbiAgICBpZiAoY3VzdG9tVW5pZm9ybXMpXG4gICAge1xuICAgICAgICBmb3IgKHZhciB1IGluIGN1c3RvbVVuaWZvcm1zKVxuICAgICAgICB7XG4gICAgICAgICAgICB1bmlmb3Jtc1t1XSA9IGN1c3RvbVVuaWZvcm1zW3VdO1xuICAgICAgICB9XG4gICAgfVxuXG5cbiAgICB2YXIgYXR0cmlidXRlcyA9IHtcbiAgICAgICAgYVZlcnRleFBvc2l0aW9uOiAgICAwLFxuICAgICAgICBhVGV4dHVyZUNvb3JkOiAgICAgIDAsXG4gICAgICAgIGFDb2xvcjogICAgICAgICAgICAgMFxuICAgIH07XG5cbiAgICBpZiAoY3VzdG9tQXR0cmlidXRlcylcbiAgICB7XG4gICAgICAgIGZvciAodmFyIGEgaW4gY3VzdG9tQXR0cmlidXRlcylcbiAgICAgICAge1xuICAgICAgICAgICAgYXR0cmlidXRlc1thXSA9IGN1c3RvbUF0dHJpYnV0ZXNbYV07XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGUgdmVydGV4IHNoYWRlci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge3N0cmluZ31cbiAgICAgKi9cbiAgICB2ZXJ0ZXhTcmMgPSB2ZXJ0ZXhTcmMgfHwgVGV4dHVyZVNoYWRlci5kZWZhdWx0VmVydGV4U3JjO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGZyYWdtZW50IHNoYWRlci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge3N0cmluZ31cbiAgICAgKi9cbiAgICBmcmFnbWVudFNyYyA9IGZyYWdtZW50U3JjIHx8IFRleHR1cmVTaGFkZXIuZGVmYXVsdEZyYWdtZW50U3JjO1xuXG4gICAgU2hhZGVyLmNhbGwodGhpcywgc2hhZGVyTWFuYWdlciwgdmVydGV4U3JjLCBmcmFnbWVudFNyYywgdW5pZm9ybXMsIGF0dHJpYnV0ZXMpO1xufVxuXG4vLyBjb25zdHJ1Y3RvclxuVGV4dHVyZVNoYWRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFNoYWRlci5wcm90b3R5cGUpO1xuVGV4dHVyZVNoYWRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBUZXh0dXJlU2hhZGVyO1xubW9kdWxlLmV4cG9ydHMgPSBUZXh0dXJlU2hhZGVyO1xuXG4vKipcbiAqIFRoZSBkZWZhdWx0IHZlcnRleCBzaGFkZXIgc291cmNlXG4gKlxuICogQHN0YXRpY1xuICogQGNvbnN0YW50XG4gKi9cblRleHR1cmVTaGFkZXIuZGVmYXVsdFZlcnRleFNyYyA9IFtcbiAgICAncHJlY2lzaW9uIGxvd3AgZmxvYXQ7JyxcbiAgICAnYXR0cmlidXRlIHZlYzIgYVZlcnRleFBvc2l0aW9uOycsXG4gICAgJ2F0dHJpYnV0ZSB2ZWMyIGFUZXh0dXJlQ29vcmQ7JyxcbiAgICAnYXR0cmlidXRlIHZlYzQgYUNvbG9yOycsXG5cbiAgICAndW5pZm9ybSBtYXQzIHByb2plY3Rpb25NYXRyaXg7JyxcblxuICAgICd2YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDsnLFxuICAgICd2YXJ5aW5nIHZlYzQgdkNvbG9yOycsXG5cbiAgICAndm9pZCBtYWluKHZvaWQpeycsXG4gICAgJyAgIGdsX1Bvc2l0aW9uID0gdmVjNCgocHJvamVjdGlvbk1hdHJpeCAqIHZlYzMoYVZlcnRleFBvc2l0aW9uLCAxLjApKS54eSwgMC4wLCAxLjApOycsXG4gICAgJyAgIHZUZXh0dXJlQ29vcmQgPSBhVGV4dHVyZUNvb3JkOycsXG4gICAgJyAgIHZDb2xvciA9IHZlYzQoYUNvbG9yLnJnYiAqIGFDb2xvci5hLCBhQ29sb3IuYSk7JyxcbiAgICAnfSdcbl0uam9pbignXFxuJyk7XG5cbi8qKlxuICogVGhlIGRlZmF1bHQgZnJhZ21lbnQgc2hhZGVyIHNvdXJjZVxuICpcbiAqIEBzdGF0aWNcbiAqIEBjb25zdGFudFxuICovXG5UZXh0dXJlU2hhZGVyLmRlZmF1bHRGcmFnbWVudFNyYyA9IFtcbiAgICAncHJlY2lzaW9uIGxvd3AgZmxvYXQ7JyxcblxuICAgICd2YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDsnLFxuICAgICd2YXJ5aW5nIHZlYzQgdkNvbG9yOycsXG5cbiAgICAndW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXI7JyxcblxuICAgICd2b2lkIG1haW4odm9pZCl7JyxcbiAgICAnICAgZ2xfRnJhZ0NvbG9yID0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2VGV4dHVyZUNvb3JkKSAqIHZDb2xvciA7JyxcbiAgICAnfSdcbl0uam9pbignXFxuJyk7XG4iLCJ2YXIgU2hhZGVyID0gcmVxdWlyZSgncGl4aS1nbC1jb3JlJykuR0xTaGFkZXI7XG5cbi8qKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQGV4dGVuZHMgUElYSS5TaGFkZXJcbiAqIEBwYXJhbSBzaGFkZXJNYW5hZ2VyIHtQSVhJLlNoYWRlck1hbmFnZXJ9IFRoZSB3ZWJnbCBzaGFkZXIgbWFuYWdlciB0aGlzIHNoYWRlciB3b3JrcyBmb3IuXG4gKiBAcGFyYW0gW3ZlcnRleFNyY10ge3N0cmluZ30gVGhlIHNvdXJjZSBvZiB0aGUgdmVydGV4IHNoYWRlci5cbiAqIEBwYXJhbSBbZnJhZ21lbnRTcmNdIHtzdHJpbmd9IFRoZSBzb3VyY2Ugb2YgdGhlIGZyYWdtZW50IHNoYWRlci5cbiAqIEBwYXJhbSBbY3VzdG9tVW5pZm9ybXNdIHtvYmplY3R9IEN1c3RvbSB1bmlmb3JtcyB0byB1c2UgdG8gYXVnbWVudCB0aGUgYnVpbHQtaW4gb25lcy5cbiAqIEBwYXJhbSBbZnJhZ21lbnRTcmNdIHtzdHJpbmd9IFRoZSBzb3VyY2Ugb2YgdGhlIGZyYWdtZW50IHNoYWRlci5cbiAqL1xuZnVuY3Rpb24gVGV4dHVyZVNoYWRlcihnbClcbntcbiAgICAvKipcbiAgICAgKiBUaGUgdmVydGV4IHNoYWRlci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge3N0cmluZ31cbiAgICAgKi9cbiAgICB2ZXJ0ZXhTcmMgPSBUZXh0dXJlU2hhZGVyLmRlZmF1bHRWZXJ0ZXhTcmM7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgZnJhZ21lbnQgc2hhZGVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7c3RyaW5nfVxuICAgICAqL1xuICAgIGZyYWdtZW50U3JjID0gVGV4dHVyZVNoYWRlci5kZWZhdWx0RnJhZ21lbnRTcmM7XG5cbiAgICBTaGFkZXIuY2FsbCh0aGlzLCBnbCwgdmVydGV4U3JjLCBmcmFnbWVudFNyYyk7Ly8sIHVuaWZvcm1zLCBhdHRyaWJ1dGVzKTtcblxufVxuXG4vLyBjb25zdHJ1Y3RvclxuVGV4dHVyZVNoYWRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFNoYWRlci5wcm90b3R5cGUpO1xuVGV4dHVyZVNoYWRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBUZXh0dXJlU2hhZGVyO1xubW9kdWxlLmV4cG9ydHMgPSBUZXh0dXJlU2hhZGVyO1xuXG4vKipcbiAqIFRoZSBkZWZhdWx0IHZlcnRleCBzaGFkZXIgc291cmNlXG4gKlxuICogQHN0YXRpY1xuICogQGNvbnN0YW50XG4gKi9cblRleHR1cmVTaGFkZXIuZGVmYXVsdFZlcnRleFNyYyA9IFtcbiAgICAncHJlY2lzaW9uIGxvd3AgZmxvYXQ7JyxcbiAgICAnYXR0cmlidXRlIHZlYzIgYVZlcnRleFBvc2l0aW9uOycsXG4gICAgJ2F0dHJpYnV0ZSB2ZWMyIGFUZXh0dXJlQ29vcmQ7JyxcbiAgICAnYXR0cmlidXRlIHZlYzQgYUNvbG9yOycsXG5cbiAgICAndW5pZm9ybSBtYXQzIHByb2plY3Rpb25NYXRyaXg7JyxcblxuICAgICd2YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDsnLFxuICAgICd2YXJ5aW5nIHZlYzQgdkNvbG9yOycsXG5cbiAgICAndm9pZCBtYWluKHZvaWQpeycsXG4gICAgJyAgIGdsX1Bvc2l0aW9uID0gdmVjNCgocHJvamVjdGlvbk1hdHJpeCAqIHZlYzMoYVZlcnRleFBvc2l0aW9uLCAxLjApKS54eSwgMC4wLCAxLjApOycsXG4gICAgJyAgIHZUZXh0dXJlQ29vcmQgPSBhVGV4dHVyZUNvb3JkOycsXG4gICAgJyAgIHZDb2xvciA9IHZlYzQoYUNvbG9yLnJnYiAqIGFDb2xvci5hLCBhQ29sb3IuYSk7JyxcbiAgICAnfSdcbl0uam9pbignXFxuJyk7XG5cbi8qKlxuICogVGhlIGRlZmF1bHQgZnJhZ21lbnQgc2hhZGVyIHNvdXJjZVxuICpcbiAqIEBzdGF0aWNcbiAqIEBjb25zdGFudFxuICovXG5UZXh0dXJlU2hhZGVyLmRlZmF1bHRGcmFnbWVudFNyYyA9IFtcbiAgICAncHJlY2lzaW9uIGxvd3AgZmxvYXQ7JyxcblxuICAgICd2YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDsnLFxuICAgICd2YXJ5aW5nIHZlYzQgdkNvbG9yOycsXG5cbiAgICAndW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXI7JyxcblxuICAgICd2b2lkIG1haW4odm9pZCl7JyxcbiAgICAnICAgZ2xfRnJhZ0NvbG9yID0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2VGV4dHVyZUNvb3JkKSAqIHZDb2xvciA7JyxcbiAgICAnfSdcbl0uam9pbignXFxuJyk7XG4iLCJ2YXIgV2ViR0xNYW5hZ2VyID0gcmVxdWlyZSgnLi4vbWFuYWdlcnMvV2ViR0xNYW5hZ2VyJyk7XG5cbi8qKlxuICogQmFzZSBmb3IgYSBjb21tb24gb2JqZWN0IHJlbmRlcmVyIHRoYXQgY2FuIGJlIHVzZWQgYXMgYSBzeXN0ZW0gcmVuZGVyZXIgcGx1Z2luLlxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5XZWJHTE1hbmFnZXJcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcn0gVGhlIHJlbmRlcmVyIHRoaXMgb2JqZWN0IHJlbmRlcmVyIHdvcmtzIGZvci5cbiAqL1xuZnVuY3Rpb24gT2JqZWN0UmVuZGVyZXIocmVuZGVyZXIpXG57XG4gICAgV2ViR0xNYW5hZ2VyLmNhbGwodGhpcywgcmVuZGVyZXIpO1xufVxuXG5cbk9iamVjdFJlbmRlcmVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoV2ViR0xNYW5hZ2VyLnByb3RvdHlwZSk7XG5PYmplY3RSZW5kZXJlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBPYmplY3RSZW5kZXJlcjtcbm1vZHVsZS5leHBvcnRzID0gT2JqZWN0UmVuZGVyZXI7XG5cbi8qKlxuICogU3RhcnRzIHRoZSByZW5kZXJlciBhbmQgc2V0cyB0aGUgc2hhZGVyXG4gKlxuICovXG5PYmplY3RSZW5kZXJlci5wcm90b3R5cGUuc3RhcnQgPSBmdW5jdGlvbiAoKVxue1xuICAgIC8vIHNldCB0aGUgc2hhZGVyLi5cbn07XG5cbi8qKlxuICogU3RvcHMgdGhlIHJlbmRlcmVyXG4gKlxuICovXG5PYmplY3RSZW5kZXJlci5wcm90b3R5cGUuc3RvcCA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy5mbHVzaCgpO1xufTtcblxuLyoqXG4gKiBmbHVzaGVzXG4gKlxuICovXG5PYmplY3RSZW5kZXJlci5wcm90b3R5cGUuZmx1c2ggPSBmdW5jdGlvbiAoKVxue1xuICAgIC8vIGZsdXNoIVxufTtcblxuLyoqXG4gKiBSZW5kZXJzIGFuIG9iamVjdFxuICpcbiAqIEBwYXJhbSBvYmplY3Qge1BJWEkuRGlzcGxheU9iamVjdH0gVGhlIG9iamVjdCB0byByZW5kZXIuXG4gKi9cbk9iamVjdFJlbmRlcmVyLnByb3RvdHlwZS5yZW5kZXIgPSBmdW5jdGlvbiAob2JqZWN0KSAvLyBqc2hpbnQgdW51c2VkOmZhbHNlXG57XG4gICAgLy8gcmVuZGVyIHRoZSBvYmplY3Rcbn07XG4iLCIvKipcbiAqIEhlbHBlciBjbGFzcyB0byBjcmVhdGUgYSBxdWFkXG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIGdsIHtXZWJHTFJlbmRlcmluZ0NvbnRleHR9IFRoZSBnbCBjb250ZXh0IGZvciB0aGlzIHF1YWQgdG8gdXNlLlxuICovXG5mdW5jdGlvbiBRdWFkKGdsKVxue1xuICAgIC8qXG4gICAgICogdGhlIGN1cnJlbnQgV2ViR0wgZHJhd2luZyBjb250ZXh0XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtXZWJHTFJlbmRlcmluZ0NvbnRleHR9XG4gICAgICovXG4gICAgdGhpcy5nbCA9IGdsO1xuXG4vLyAgICB0aGlzLnRleHR1cmVzID0gbmV3IFRleHR1cmVVdnMoKTtcblxuICAgIC8qKlxuICAgICAqIEFuIGFycmF5IG9mIHZlcnRpY2VzXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtGbG9hdDMyQXJyYXl9XG4gICAgICovXG4gICAgdGhpcy52ZXJ0aWNlcyA9IG5ldyBGbG9hdDMyQXJyYXkoW1xuICAgICAgICAwLDAsXG4gICAgICAgIDIwMCwwLFxuICAgICAgICAyMDAsMjAwLFxuICAgICAgICAwLDIwMFxuICAgIF0pO1xuXG4gICAgLyoqXG4gICAgICogVGhlIFV2cyBvZiB0aGUgcXVhZFxuICAgICAqXG4gICAgICogQG1lbWJlciB7RmxvYXQzMkFycmF5fVxuICAgICAqL1xuICAgIHRoaXMudXZzID0gbmV3IEZsb2F0MzJBcnJheShbXG4gICAgICAgIDAsMCxcbiAgICAgICAgMSwwLFxuICAgICAgICAxLDEsXG4gICAgICAgIDAsMVxuICAgIF0pO1xuXG4vLyAgICB2YXIgd2hpdGUgPSAoMHhGRkZGRkYgPj4gMTYpICsgKDB4RkZGRkZGICYgMHhmZjAwKSArICgoMHhGRkZGRkYgJiAweGZmKSA8PCAxNikgKyAoMSAqIDI1NSA8PCAyNCk7XG4gICAgLy9UT0RPIGNvbnZlcnQgdGhpcyB0byBhIDMyIHVuc2lnbmVkIGludCBhcnJheVxuICAgIC8qKlxuICAgICAqIFRoZSBjb2xvciBjb21wb25lbnRzIG9mIHRoZSB0cmlhbmdsZXNcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge0Zsb2F0MzJBcnJheX1cbiAgICAgKi9cbiAgICB0aGlzLmNvbG9ycyA9IG5ldyBGbG9hdDMyQXJyYXkoW1xuICAgICAgICAxLDEsMSwxLFxuICAgICAgICAxLDEsMSwxLFxuICAgICAgICAxLDEsMSwxLFxuICAgICAgICAxLDEsMSwxXG4gICAgXSk7XG5cbiAgICAvKlxuICAgICAqIEBtZW1iZXIge1VpbnQxNkFycmF5fSBBbiBhcnJheSBjb250YWluaW5nIHRoZSBpbmRpY2VzIG9mIHRoZSB2ZXJ0aWNlc1xuICAgICAqL1xuICAgIHRoaXMuaW5kaWNlcyA9IG5ldyBVaW50MTZBcnJheShbXG4gICAgICAgIDAsIDEsIDIsIDAsIDMsIDJcbiAgICBdKTtcblxuICAgIC8qXG4gICAgICogQG1lbWJlciB7V2ViR0xCdWZmZXJ9IFRoZSB2ZXJ0ZXggYnVmZmVyXG4gICAgICovXG4gICAgdGhpcy52ZXJ0ZXhCdWZmZXIgPSBnbC5jcmVhdGVCdWZmZXIoKTtcblxuICAgIC8qXG4gICAgICogQG1lbWJlciB7V2ViR0xCdWZmZXJ9IFRoZSBpbmRleCBidWZmZXJcbiAgICAgKi9cbiAgICB0aGlzLmluZGV4QnVmZmVyID0gZ2wuY3JlYXRlQnVmZmVyKCk7XG5cbiAgICBnbC5iaW5kQnVmZmVyKGdsLkFSUkFZX0JVRkZFUiwgdGhpcy52ZXJ0ZXhCdWZmZXIpO1xuICAgIGdsLmJ1ZmZlckRhdGEoZ2wuQVJSQVlfQlVGRkVSLCAoOCArIDggKyAxNikgKiA0LCBnbC5EWU5BTUlDX0RSQVcpO1xuXG4gICAgZ2wuYmluZEJ1ZmZlcihnbC5FTEVNRU5UX0FSUkFZX0JVRkZFUiwgdGhpcy5pbmRleEJ1ZmZlcik7XG4gICAgZ2wuYnVmZmVyRGF0YShnbC5FTEVNRU5UX0FSUkFZX0JVRkZFUiwgdGhpcy5pbmRpY2VzLCBnbC5TVEFUSUNfRFJBVyk7XG5cbiAgICB0aGlzLnVwbG9hZCgpO1xufVxuXG5RdWFkLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFF1YWQ7XG5cbi8qKlxuICogTWFwcyB0d28gUmVjdGFuZ2xlIHRvIHRoZSBxdWFkXG4gKiBAcGFyYW0gcmVjdCB7UElYSS5SZWN0YW5nbGV9IHRoZSBmaXJzdCByZWN0YW5nbGVcbiAqIEBwYXJhbSByZWN0MiB7UElYSS5SZWN0YW5nbGV9IHRoZSBzZWNvbmQgcmVjdGFuZ2xlXG4gKi9cblF1YWQucHJvdG90eXBlLm1hcCA9IGZ1bmN0aW9uKHJlY3QsIHJlY3QyKVxue1xuICAgIHZhciB4ID0gMDsgLy9yZWN0Mi54IC8gcmVjdC53aWR0aDtcbiAgICB2YXIgeSA9IDA7IC8vcmVjdDIueSAvIHJlY3QuaGVpZ2h0O1xuXG4gICAgdGhpcy51dnNbMF0gPSB4O1xuICAgIHRoaXMudXZzWzFdID0geTtcblxuICAgIHRoaXMudXZzWzJdID0geCArIHJlY3QyLndpZHRoIC8gcmVjdC53aWR0aDtcbiAgICB0aGlzLnV2c1szXSA9IHk7XG5cbiAgICB0aGlzLnV2c1s0XSA9IHggKyByZWN0Mi53aWR0aCAvIHJlY3Qud2lkdGg7XG4gICAgdGhpcy51dnNbNV0gPSB5ICsgcmVjdDIuaGVpZ2h0IC8gcmVjdC5oZWlnaHQ7XG5cbiAgICB0aGlzLnV2c1s2XSA9IHg7XG4gICAgdGhpcy51dnNbN10gPSB5ICsgcmVjdDIuaGVpZ2h0IC8gcmVjdC5oZWlnaHQ7XG5cbiAgICAvLy8gLS0tLS1cbiAgICB4ID0gcmVjdDIueDtcbiAgICB5ID0gcmVjdDIueTtcblxuICAgIHRoaXMudmVydGljZXNbMF0gPSB4O1xuICAgIHRoaXMudmVydGljZXNbMV0gPSB5O1xuXG4gICAgdGhpcy52ZXJ0aWNlc1syXSA9IHggKyByZWN0Mi53aWR0aDtcbiAgICB0aGlzLnZlcnRpY2VzWzNdID0geTtcblxuICAgIHRoaXMudmVydGljZXNbNF0gPSB4ICsgcmVjdDIud2lkdGg7XG4gICAgdGhpcy52ZXJ0aWNlc1s1XSA9IHkgKyByZWN0Mi5oZWlnaHQ7XG5cbiAgICB0aGlzLnZlcnRpY2VzWzZdID0geDtcbiAgICB0aGlzLnZlcnRpY2VzWzddID0geSArIHJlY3QyLmhlaWdodDtcblxuICAgIHRoaXMudXBsb2FkKCk7XG59O1xuXG4vKipcbiAqIEJpbmRzIHRoZSBidWZmZXIgYW5kIHVwbG9hZHMgdGhlIGRhdGFcbiAqL1xuUXVhZC5wcm90b3R5cGUudXBsb2FkID0gZnVuY3Rpb24oKVxue1xuICAgIHZhciBnbCA9IHRoaXMuZ2w7XG5cbiAgICAvLyBUT0RPIGNvdWxkIHByb2JhYmx5IGJlIHB1c2hlZCBpbnRvIG9uZSB1cGxvYWQhXG4gICAgZ2wuYmluZEJ1ZmZlciggZ2wuQVJSQVlfQlVGRkVSLCB0aGlzLnZlcnRleEJ1ZmZlciApO1xuXG4gICAgZ2wuYnVmZmVyU3ViRGF0YShnbC5BUlJBWV9CVUZGRVIsIDAsIHRoaXMudmVydGljZXMpO1xuXG4gICAgZ2wuYnVmZmVyU3ViRGF0YShnbC5BUlJBWV9CVUZGRVIsIDggKiA0LCB0aGlzLnV2cyk7XG5cbiAgICBnbC5idWZmZXJTdWJEYXRhKGdsLkFSUkFZX0JVRkZFUiwgKDggKyA4KSAqIDQsIHRoaXMuY29sb3JzKTtcbn07XG5cblF1YWQucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbigpXG57XG4gICAgdmFyIGdsID0gdGhpcy5nbDtcbiAgICBcbiAgICAgZ2wuZGVsZXRlQnVmZmVyKHRoaXMudmVydGV4QnVmZmVyKTtcbiAgICAgZ2wuZGVsZXRlQnVmZmVyKHRoaXMuaW5kZXhCdWZmZXIpO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBRdWFkO1xuXG5cbiIsInZhciBtYXRoID0gcmVxdWlyZSgnLi4vLi4vLi4vbWF0aCcpLFxuICAgIHV0aWxzID0gcmVxdWlyZSgnLi4vLi4vLi4vdXRpbHMnKSxcbiAgICBDT05TVCA9IHJlcXVpcmUoJy4uLy4uLy4uL2NvbnN0JyksXG4gICAgICAgIFxuICAgIEdMVGV4dHVyZSA9IHJlcXVpcmUoJ3BpeGktZ2wtY29yZScpLkdMVGV4dHVyZSxcbiAgICBHTEZyYW1lYnVmZmVyID0gcmVxdWlyZSgncGl4aS1nbC1jb3JlJykuR0xGcmFtZWJ1ZmZlcixcbiAgICBcbiAgICBTdGVuY2lsTWFza1N0YWNrID0gcmVxdWlyZSgnLi9TdGVuY2lsTWFza1N0YWNrJyk7XG5cbi8qKlxuICogQGF1dGhvciBNYXQgR3JvdmVzIGh0dHA6Ly9tYXRncm92ZXMuY29tLyBARG9vcm1hdDIzXG4gKi9cblxuLyoqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gZ2wge1dlYkdMUmVuZGVyaW5nQ29udGV4dH0gdGhlIGN1cnJlbnQgV2ViR0wgZHJhd2luZyBjb250ZXh0XG4gKiBAcGFyYW0gd2lkdGgge251bWJlcn0gdGhlIGhvcml6b250YWwgcmFuZ2Ugb2YgdGhlIGZpbHRlclxuICogQHBhcmFtIGhlaWdodCB7bnVtYmVyfSB0aGUgdmVydGljYWwgcmFuZ2Ugb2YgdGhlIGZpbHRlclxuICogQHBhcmFtIHNjYWxlTW9kZSB7bnVtYmVyfSBTZWUge0BsaW5rIFBJWEkuU0NBTEVfTU9ERVN9IGZvciBwb3NzaWJsZSB2YWx1ZXNcbiAqIEBwYXJhbSByZXNvbHV0aW9uIHtudW1iZXJ9IHRoZSBjdXJyZW50IHJlc29sdXRpb25cbiAqIEBwYXJhbSByb290IHtib29sZWFufSBXaGV0aGVyIHRoaXMgb2JqZWN0IGlzIHRoZSByb290IGVsZW1lbnQgb3Igbm90XG4gKi9cbnZhciBSZW5kZXJUYXJnZXQgPSBmdW5jdGlvbihnbCwgd2lkdGgsIGhlaWdodCwgc2NhbGVNb2RlLCByZXNvbHV0aW9uLCByb290KVxue1xuICAgIC8vVE9ETyBSZXNvbHV0aW9uIGNvdWxkIGdvIGhlcmUgKCBlZyBsb3cgcmVzIGJsdXJzIClcblxuICAgIC8qKlxuICAgICAqIFRoZSBjdXJyZW50IFdlYkdMIGRyYXdpbmcgY29udGV4dC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1dlYkdMUmVuZGVyaW5nQ29udGV4dH1cbiAgICAgKi9cbiAgICB0aGlzLmdsID0gZ2w7XG5cbiAgICAvLyBuZXh0IHRpbWUgdG8gY3JlYXRlIGEgZnJhbWUgYnVmZmVyIGFuZCB0ZXh0dXJlXG5cbiAgICAvKipcbiAgICAgKiBBIGZyYW1lIGJ1ZmZlclxuICAgICAqXG4gICAgICogQG1lbWJlciB7V2ViR0xGcmFtZUJ1ZmZlcn1cbiAgICAgKi9cbiAgICB0aGlzLmZyYW1lQnVmZmVyID0gbnVsbDtcblxuICAgIC8qKlxuICAgICAqIFRoZSB0ZXh0dXJlXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlRleHR1cmV9XG4gICAgICovXG4gICAgdGhpcy50ZXh0dXJlID0gbnVsbDtcblxuICAgIHRoaXMuY2xlYXJDb2xvciA9IFswLCAwLCAwLCAwXTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBzaXplIG9mIHRoZSBvYmplY3QgYXMgYSByZWN0YW5nbGVcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuUmVjdGFuZ2xlfVxuICAgICAqL1xuICAgIHRoaXMuc2l6ZSA9IG5ldyBtYXRoLlJlY3RhbmdsZSgwLCAwLCAxLCAxKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBjdXJyZW50IHJlc29sdXRpb25cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLnJlc29sdXRpb24gPSByZXNvbHV0aW9uIHx8IENPTlNULlJFU09MVVRJT047XG5cbiAgICAvKipcbiAgICAgKiBUaGUgcHJvamVjdGlvbiBtYXRyaXhcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuTWF0cml4fVxuICAgICAqL1xuICAgIHRoaXMucHJvamVjdGlvbk1hdHJpeCA9IG5ldyBtYXRoLk1hdHJpeCgpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIG9iamVjdCdzIHRyYW5zZm9ybVxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5NYXRyaXh9XG4gICAgICovXG4gICAgdGhpcy50cmFuc2Zvcm0gPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGZyYW1lLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5SZWN0YW5nbGV9XG4gICAgICovXG4gICAgdGhpcy5mcmFtZSA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgc3RlbmNpbCBidWZmZXIgc3RvcmVzIG1hc2tpbmcgZGF0YSBmb3IgdGhlIHJlbmRlciB0YXJnZXRcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1dlYkdMUmVuZGVyQnVmZmVyfVxuICAgICAqL1xuICAgIHRoaXMuc3RlbmNpbEJ1ZmZlciA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgZGF0YSBzdHJ1Y3R1cmUgZm9yIHRoZSBzdGVuY2lsIG1hc2tzXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlN0ZW5jaWxNYXNrU3RhY2t9XG4gICAgICovXG4gICAgdGhpcy5zdGVuY2lsTWFza1N0YWNrID0gbmV3IFN0ZW5jaWxNYXNrU3RhY2soKTtcblxuICAgIC8qKlxuICAgICAqIFN0b3JlcyBmaWx0ZXIgZGF0YSBmb3IgdGhlIHJlbmRlciB0YXJnZXRcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge29iamVjdFtdfVxuICAgICAqL1xuICAgIHRoaXMuZmlsdGVyU3RhY2sgPSBbXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJlbmRlclRhcmdldDp0aGlzLFxuICAgICAgICAgICAgZmlsdGVyOltdLFxuICAgICAgICAgICAgYm91bmRzOnRoaXMuc2l6ZVxuICAgICAgICB9XG4gICAgXTtcblxuXG4gICAgLyoqXG4gICAgICogVGhlIHNjYWxlIG1vZGUuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgUElYSS5TQ0FMRV9NT0RFUy5ERUZBVUxUXG4gICAgICogQHNlZSBQSVhJLlNDQUxFX01PREVTXG4gICAgICovXG4gICAgdGhpcy5zY2FsZU1vZGUgPSBzY2FsZU1vZGUgfHwgQ09OU1QuU0NBTEVfTU9ERVMuREVGQVVMVDtcblxuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgdGhpcyBvYmplY3QgaXMgdGhlIHJvb3QgZWxlbWVudCBvciBub3RcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICovXG4gICAgdGhpcy5yb290ID0gcm9vdDtcblxuICAgIHRoaXMuZnJhbWVCdWZmZXIgPSBHTEZyYW1lYnVmZmVyLmNyZWF0ZVJHQkEoZ2wsIDEwMCwgMTAwKTtcbiAgICBpZih0aGlzLmZyYW1lQnVmZmVyKXRoaXMuZnJhbWVCdWZmZXIudW5iaW5kKCk7XG5cbiAgIC8vIHRoaXMuZnJhbWVCdWZmZXIgPSB7ZnJhbWVidWZmZXI6bnVsbCwgYmluZDpmdW5jdGlvbigpe30sIGNsZWFyOmZ1bmN0aW9uKCl7fSwgcmVzaXplOmZ1bmN0aW9uKCl7fX0vL25ldyBHTEZyYW1lYnVmZmVyLmNyZWF0ZVJHQkEoZ2wsIDEwMCwgMTAwKTtcblxuXG5cbiAgICBpZiAoIXRoaXMucm9vdClcbiAgICB7XG4gICAgICAgIC8qXG4gICAgICAgICAgICBBIGZyYW1lIGJ1ZmZlciBuZWVkcyBhIHRhcmdldCB0byByZW5kZXIgdG8uLlxuICAgICAgICAgICAgY3JlYXRlIGEgdGV4dHVyZSBhbmQgYmluZCBpdCBhdHRhY2ggaXQgdG8gdGhlIGZyYW1lYnVmZmVyLi5cbiAgICAgICAgICovXG4gICAgICAgIFxuICAgICAgICAvLyBjcmVhdGUgYSB0ZXh0dXJlIHRvIGJpbmQgYXR0YWNoIHRvIHRoZSBmcmFtZUJ1ZmZlci4uXG4gICAgICAgIHZhciB0ZXh0dXJlID0gbmV3IEdMVGV4dHVyZShnbCk7XG5cbiAgICAgICAgdGV4dHVyZS5lbmFibGVMaW5lYXJTY2FsaW5nKClcbiAgICAgICAgdGV4dHVyZS5lbmFibGVXcmFwQ2xhbXAoKVxuXG4gICAgICAgIHRoaXMuZnJhbWVCdWZmZXIuZW5hYmxlVGV4dHVyZSh0ZXh0dXJlKTtcblxuICAgICAgICAvLyBUT0RPIGNoYW5nZSFcbiAgICAgICAgLy8gdGhpcyBpcyB1c2VkIGJ5IHRoZSBiYXNlIHRleHR1cmVcbiAgICAgICAgdGhpcy50ZXh0dXJlID0gdGV4dHVyZS50ZXh0dXJlO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICAvLyBtYWtlIGl0IGEgbnVsbCBmcmFtZWJ1ZmZlci4uXG4gICAgICAgIHRoaXMuZnJhbWVCdWZmZXIuZnJhbWVidWZmZXIgPSBudWxsO1xuICAgIH1cblxuICAgIHRoaXMucmVzaXplKHdpZHRoLCBoZWlnaHQpO1xufTtcblxuUmVuZGVyVGFyZ2V0LnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFJlbmRlclRhcmdldDtcbm1vZHVsZS5leHBvcnRzID0gUmVuZGVyVGFyZ2V0O1xuXG4vKipcbiAqIENsZWFycyB0aGUgZmlsdGVyIHRleHR1cmUuXG4gKlxuICogQHBhcmFtIFtiaW5kPWZhbHNlXSB7Ym9vbGVhbn0gU2hvdWxkIHdlIGJpbmQgb3VyIGZyYW1lYnVmZmVyIGJlZm9yZSBjbGVhcmluZz9cbiAqL1xuUmVuZGVyVGFyZ2V0LnByb3RvdHlwZS5jbGVhciA9IGZ1bmN0aW9uKGNsZWFyQ29sb3IpXG57XG4gICAgdmFyIGNjID0gY2xlYXJDb2xvciB8fCB0aGlzLmNsZWFyQ29sb3JcbiAgICB0aGlzLmZyYW1lQnVmZmVyLmNsZWFyKGNjWzBdLGNjWzFdLGNjWzJdLGNjWzNdKS8vcixnLGIsYSk7XG59O1xuXG4vKipcbiAqIEJpbmRzIHRoZSBzdGVuY2lsIGJ1ZmZlci5cbiAqXG4gKi9cblJlbmRlclRhcmdldC5wcm90b3R5cGUuYXR0YWNoU3RlbmNpbEJ1ZmZlciA9IGZ1bmN0aW9uKClcbntcbiAgICAvL1RPRE8gY2hlY2sgaWYgc3RlbmNpbCBpcyBkb25lP1xuICAgIC8qKlxuICAgICAqIFRoZSBzdGVuY2lsIGJ1ZmZlciBpcyB1c2VkIGZvciBtYXNraW5nIGluIHBpeGlcbiAgICAgKiBsZXRzIGNyZWF0ZSBvbmUgYW5kIHRoZW4gYWRkIGF0dGFjaCBpdCB0byB0aGUgZnJhbWVidWZmZXIuLlxuICAgICAqL1xuICAgIGlmICghdGhpcy5yb290KVxuICAgIHtcbiAgICAgICAgdGhpcy5mcmFtZUJ1ZmZlci5lbmFibGVTdGVuY2lsKCk7XG4gICAgfVxufTtcblxuLyoqXG4gKiBCaW5kcyB0aGUgYnVmZmVycyBhbmQgaW5pdGlhbGlzZXMgdGhlIHZpZXdwb3J0LlxuICpcbiAqL1xuUmVuZGVyVGFyZ2V0LnByb3RvdHlwZS5hY3RpdmF0ZSA9IGZ1bmN0aW9uKClcbntcbiAgICAvL1RPT0QgcmVmYWN0b3IgdXNhZ2Ugb2YgZnJhbWUuLlxuICAgIHZhciBnbCA9IHRoaXMuZ2w7XG5cbiAgICB0aGlzLmZyYW1lQnVmZmVyLmJpbmQoKTtcblxuXG4gICAgdmFyIHByb2plY3Rpb25GcmFtZSA9IHRoaXMuZnJhbWUgfHwgdGhpcy5zaXplO1xuXG4gICAgLy8gVE9ETyBhZGQgYSBkaXJ0eSBmbGFnIHRvIHRoaXMgb2YgYSBzZXR0ZXIgZm9yIHRoZSBmcmFtZT9cbiAgICB0aGlzLmNhbGN1bGF0ZVByb2plY3Rpb24oIHByb2plY3Rpb25GcmFtZSApO1xuXG4gICAgaWYodGhpcy50cmFuc2Zvcm0pXG4gICAge1xuICAgICAgICB0aGlzLnByb2plY3Rpb25NYXRyaXguYXBwZW5kKHRoaXMudHJhbnNmb3JtKTtcbiAgICB9XG5cbiAgICBnbC52aWV3cG9ydCgwLDAsIHByb2plY3Rpb25GcmFtZS53aWR0aCAqIHRoaXMucmVzb2x1dGlvbiwgcHJvamVjdGlvbkZyYW1lLmhlaWdodCAqIHRoaXMucmVzb2x1dGlvbik7XG59O1xuXG4vKipcbiAqIFVwZGF0ZXMgdGhlIHByb2plY3Rpb24gbWF0cml4IGJhc2VkIG9uIGEgcHJvamVjdGlvbiBmcmFtZSAod2hpY2ggaXMgYSByZWN0YW5nbGUpXG4gKlxuICovXG5SZW5kZXJUYXJnZXQucHJvdG90eXBlLmNhbGN1bGF0ZVByb2plY3Rpb24gPSBmdW5jdGlvbiAocHJvamVjdGlvbkZyYW1lKVxue1xuICAgIHZhciBwbSA9IHRoaXMucHJvamVjdGlvbk1hdHJpeDtcblxuICAgIHBtLmlkZW50aXR5KCk7XG5cbiAgICBpZiAoIXRoaXMucm9vdClcbiAgICB7XG4gICAgICAgIHBtLmEgPSAxIC8gcHJvamVjdGlvbkZyYW1lLndpZHRoKjI7XG4gICAgICAgIHBtLmQgPSAxIC8gcHJvamVjdGlvbkZyYW1lLmhlaWdodCoyO1xuXG4gICAgICAgIHBtLnR4ID0gLTEgLSBwcm9qZWN0aW9uRnJhbWUueCAqIHBtLmE7XG4gICAgICAgIHBtLnR5ID0gLTEgLSBwcm9qZWN0aW9uRnJhbWUueSAqIHBtLmQ7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHBtLmEgPSAxIC8gcHJvamVjdGlvbkZyYW1lLndpZHRoKjI7XG4gICAgICAgIHBtLmQgPSAtMSAvIHByb2plY3Rpb25GcmFtZS5oZWlnaHQqMjtcblxuICAgICAgICBwbS50eCA9IC0xIC0gcHJvamVjdGlvbkZyYW1lLnggKiBwbS5hO1xuICAgICAgICBwbS50eSA9IDEgLSBwcm9qZWN0aW9uRnJhbWUueSAqIHBtLmQ7XG4gICAgfVxufTtcblxuLyoqXG4gKiBSZXNpemVzIHRoZSB0ZXh0dXJlIHRvIHRoZSBzcGVjaWZpZWQgd2lkdGggYW5kIGhlaWdodFxuICpcbiAqIEBwYXJhbSB3aWR0aCB7TnVtYmVyfSB0aGUgbmV3IHdpZHRoIG9mIHRoZSB0ZXh0dXJlXG4gKiBAcGFyYW0gaGVpZ2h0IHtOdW1iZXJ9IHRoZSBuZXcgaGVpZ2h0IG9mIHRoZSB0ZXh0dXJlXG4gKi9cblJlbmRlclRhcmdldC5wcm90b3R5cGUucmVzaXplID0gZnVuY3Rpb24gKHdpZHRoLCBoZWlnaHQpXG57XG4gICAgd2lkdGggPSB3aWR0aCB8IDA7XG4gICAgaGVpZ2h0ID0gaGVpZ2h0IHwgMDtcblxuICAgIGlmICh0aGlzLnNpemUud2lkdGggPT09IHdpZHRoICYmIHRoaXMuc2l6ZS5oZWlnaHQgPT09IGhlaWdodCkgXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5zaXplLndpZHRoID0gd2lkdGg7XG4gICAgdGhpcy5zaXplLmhlaWdodCA9IGhlaWdodDtcblxuICAgIHRoaXMuZnJhbWVCdWZmZXIucmVzaXplKHdpZHRoICogdGhpcy5yZXNvbHV0aW9uLCBoZWlnaHQgKiB0aGlzLnJlc29sdXRpb24pO1xuICAgIFxuICAgIHZhciBwcm9qZWN0aW9uRnJhbWUgPSB0aGlzLmZyYW1lIHx8IHRoaXMuc2l6ZTtcblxuICAgIHRoaXMuY2FsY3VsYXRlUHJvamVjdGlvbiggcHJvamVjdGlvbkZyYW1lICk7XG59O1xuXG4vKipcbiAqIERlc3Ryb3lzIHRoZSByZW5kZXIgdGFyZ2V0LlxuICpcbiAqL1xuUmVuZGVyVGFyZ2V0LnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKClcbntcbiAgICB2YXIgZ2wgPSB0aGlzLmdsO1xuICAgIFxuICAgIHRoaXMuZnJhbWVCdWZmZXIuZGVzdHJveSgpO1xuXG4gICAgdGhpcy5mcmFtZUJ1ZmZlciA9IG51bGw7XG4gICAgdGhpcy50ZXh0dXJlID0gbnVsbDtcbn07XG4iLCIvKipcbiAqIEdlbmVyaWMgTWFzayBTdGFjayBkYXRhIHN0cnVjdHVyZVxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICovXG5mdW5jdGlvbiBTdGVuY2lsTWFza1N0YWNrKClcbntcblx0LyoqXG4gICAgICogVGhlIGFjdHVhbCBzdGFja1xuICAgICAqXG4gICAgICogQG1lbWJlciB7YW55W119XG4gICAgICovXG4gICAgdGhpcy5zdGVuY2lsU3RhY2sgPSBbXTtcblxuICAgIC8qKlxuICAgICAqIFRPRE8gQGFsdmluXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqL1xuICAgIHRoaXMucmV2ZXJzZSA9IHRydWU7XG5cbiAgICAvKipcbiAgICAgKiBJbnRlcm5hbCBjb3VudFxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMuY291bnQgPSAwO1xufVxuXG5TdGVuY2lsTWFza1N0YWNrLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFN0ZW5jaWxNYXNrU3RhY2s7XG5tb2R1bGUuZXhwb3J0cyA9IFN0ZW5jaWxNYXNrU3RhY2s7XG4iLCJDT05TVCA9IHJlcXVpcmUoJy4uLy4uLy4uL2NvbnN0Jyk7XG5cbi8qKlxuICogTWFwcyBnbCBibGVuZCBjb21iaW5hdGlvbnMgdG8gV2ViR0xcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqL1xuZnVuY3Rpb24gbWFwV2ViR0xCbGVuZE1vZGVzVG9QaXhpKGdsLCBvYmplY3QpXG57XG4gICAgb2JqZWN0ID0gb2JqZWN0IHx8IHt9O1xuXG4gICAgLy9UT0RPIC0gcHJlbXVsdGlwbHkgYWxwaGEgd291bGQgYmUgZGlmZmVyZW50LlxuICAgIC8vYWRkIGEgYm9vbGVhbiBmb3IgdGhhdCFcbiAgICBvYmplY3RbQ09OU1QuQkxFTkRfTU9ERVMuTk9STUFMXSAgICAgICAgPSBbZ2wuT05FLCAgICAgICBnbC5PTkVfTUlOVVNfU1JDX0FMUEhBXTtcbiAgICBvYmplY3RbQ09OU1QuQkxFTkRfTU9ERVMuQUREXSAgICAgICAgICAgPSBbZ2wuU1JDX0FMUEhBLCBnbC5EU1RfQUxQSEFdO1xuICAgIG9iamVjdFtDT05TVC5CTEVORF9NT0RFUy5NVUxUSVBMWV0gICAgICA9IFtnbC5EU1RfQ09MT1IsIGdsLk9ORV9NSU5VU19TUkNfQUxQSEFdO1xuICAgIG9iamVjdFtDT05TVC5CTEVORF9NT0RFUy5TQ1JFRU5dICAgICAgICA9IFtnbC5TUkNfQUxQSEEsIGdsLk9ORV07XG4gICAgb2JqZWN0W0NPTlNULkJMRU5EX01PREVTLk9WRVJMQVldICAgICAgID0gW2dsLk9ORSwgICAgICAgZ2wuT05FX01JTlVTX1NSQ19BTFBIQV07XG4gICAgb2JqZWN0W0NPTlNULkJMRU5EX01PREVTLkRBUktFTl0gICAgICAgID0gW2dsLk9ORSwgICAgICAgZ2wuT05FX01JTlVTX1NSQ19BTFBIQV07XG4gICAgb2JqZWN0W0NPTlNULkJMRU5EX01PREVTLkxJR0hURU5dICAgICAgID0gW2dsLk9ORSwgICAgICAgZ2wuT05FX01JTlVTX1NSQ19BTFBIQV07XG4gICAgb2JqZWN0W0NPTlNULkJMRU5EX01PREVTLkNPTE9SX0RPREdFXSAgID0gW2dsLk9ORSwgICAgICAgZ2wuT05FX01JTlVTX1NSQ19BTFBIQV07XG4gICAgb2JqZWN0W0NPTlNULkJMRU5EX01PREVTLkNPTE9SX0JVUk5dICAgID0gW2dsLk9ORSwgICAgICAgZ2wuT05FX01JTlVTX1NSQ19BTFBIQV07XG4gICAgb2JqZWN0W0NPTlNULkJMRU5EX01PREVTLkhBUkRfTElHSFRdICAgID0gW2dsLk9ORSwgICAgICAgZ2wuT05FX01JTlVTX1NSQ19BTFBIQV07XG4gICAgb2JqZWN0W0NPTlNULkJMRU5EX01PREVTLlNPRlRfTElHSFRdICAgID0gW2dsLk9ORSwgICAgICAgZ2wuT05FX01JTlVTX1NSQ19BTFBIQV07XG4gICAgb2JqZWN0W0NPTlNULkJMRU5EX01PREVTLkRJRkZFUkVOQ0VdICAgID0gW2dsLk9ORSwgICAgICAgZ2wuT05FX01JTlVTX1NSQ19BTFBIQV07XG4gICAgb2JqZWN0W0NPTlNULkJMRU5EX01PREVTLkVYQ0xVU0lPTl0gICAgID0gW2dsLk9ORSwgICAgICAgZ2wuT05FX01JTlVTX1NSQ19BTFBIQV07XG4gICAgb2JqZWN0W0NPTlNULkJMRU5EX01PREVTLkhVRV0gICAgICAgICAgID0gW2dsLk9ORSwgICAgICAgZ2wuT05FX01JTlVTX1NSQ19BTFBIQV07XG4gICAgb2JqZWN0W0NPTlNULkJMRU5EX01PREVTLlNBVFVSQVRJT05dICAgID0gW2dsLk9ORSwgICAgICAgZ2wuT05FX01JTlVTX1NSQ19BTFBIQV07XG4gICAgb2JqZWN0W0NPTlNULkJMRU5EX01PREVTLkNPTE9SXSAgICAgICAgID0gW2dsLk9ORSwgICAgICAgZ2wuT05FX01JTlVTX1NSQ19BTFBIQV07XG4gICAgb2JqZWN0W0NPTlNULkJMRU5EX01PREVTLkxVTUlOT1NJVFldICAgID0gW2dsLk9ORSwgICAgICAgZ2wuT05FX01JTlVTX1NSQ19BTFBIQV07XG5cbiAgICByZXR1cm4gb2JqZWN0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IG1hcFdlYkdMQmxlbmRNb2Rlc1RvUGl4aTtcbiIsIkNPTlNUID0gcmVxdWlyZSgnLi4vLi4vLi4vY29uc3QnKTtcblxuLyoqXG4gKiBHZW5lcmljIE1hc2sgU3RhY2sgZGF0YSBzdHJ1Y3R1cmVcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqL1xuZnVuY3Rpb24gbWFwV2ViR0xEcmF3TW9kZXNUb1BpeGkoZ2wsIG9iamVjdClcbntcblx0b2JqZWN0PSBvYmplY3QgfHwge307XG5cbiAgICBvYmplY3RbQ09OU1QuRFJBV19NT0RFUy5QT0lOVFNdICAgICAgICAgPSBnbC5QT0lOVFM7XG4gICAgb2JqZWN0W0NPTlNULkRSQVdfTU9ERVMuTElORVNdICAgICAgICAgID0gZ2wuTElORVM7XG4gICAgb2JqZWN0W0NPTlNULkRSQVdfTU9ERVMuTElORV9MT09QXSAgICAgID0gZ2wuTElORV9MT09QO1xuICAgIG9iamVjdFtDT05TVC5EUkFXX01PREVTLkxJTkVfU1RSSVBdICAgICA9IGdsLkxJTkVfU1RSSVA7XG4gICAgb2JqZWN0W0NPTlNULkRSQVdfTU9ERVMuVFJJQU5HTEVTXSAgICAgID0gZ2wuVFJJQU5HTEVTO1xuICAgIG9iamVjdFtDT05TVC5EUkFXX01PREVTLlRSSUFOR0xFX1NUUklQXSA9IGdsLlRSSUFOR0xFX1NUUklQO1xuICAgIG9iamVjdFtDT05TVC5EUkFXX01PREVTLlRSSUFOR0xFX0ZBTl0gICA9IGdsLlRSSUFOR0xFX0ZBTjtcblxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IG1hcFdlYkdMRHJhd01vZGVzVG9QaXhpO1xuIiwidmFyIG1hdGggPSByZXF1aXJlKCcuLi9tYXRoJyksXG4gICAgVGV4dHVyZSA9IHJlcXVpcmUoJy4uL3RleHR1cmVzL1RleHR1cmUnKSxcbiAgICBDb250YWluZXIgPSByZXF1aXJlKCcuLi9kaXNwbGF5L0NvbnRhaW5lcicpLFxuICAgIENhbnZhc1RpbnRlciA9IHJlcXVpcmUoJy4uL3JlbmRlcmVycy9jYW52YXMvdXRpbHMvQ2FudmFzVGludGVyJyksXG4gICAgdXRpbHMgPSByZXF1aXJlKCcuLi91dGlscycpLFxuICAgIENPTlNUID0gcmVxdWlyZSgnLi4vY29uc3QnKSxcbiAgICB0ZW1wUG9pbnQgPSBuZXcgbWF0aC5Qb2ludCgpO1xuXG4vKipcbiAqIFRoZSBTcHJpdGUgb2JqZWN0IGlzIHRoZSBiYXNlIGZvciBhbGwgdGV4dHVyZWQgb2JqZWN0cyB0aGF0IGFyZSByZW5kZXJlZCB0byB0aGUgc2NyZWVuXG4gKlxuICogQSBzcHJpdGUgY2FuIGJlIGNyZWF0ZWQgZGlyZWN0bHkgZnJvbSBhbiBpbWFnZSBsaWtlIHRoaXM6XG4gKlxuICogYGBganNcbiAqIHZhciBzcHJpdGUgPSBuZXcgUElYSS5TcHJpdGUuZnJvbUltYWdlKCdhc3NldHMvaW1hZ2UucG5nJyk7XG4gKiBgYGBcbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQ29udGFpbmVyXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIHRleHR1cmUge1BJWEkuVGV4dHVyZX0gVGhlIHRleHR1cmUgZm9yIHRoaXMgc3ByaXRlXG4gKi9cbmZ1bmN0aW9uIFNwcml0ZSh0ZXh0dXJlKVxue1xuICAgIENvbnRhaW5lci5jYWxsKHRoaXMpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGFuY2hvciBzZXRzIHRoZSBvcmlnaW4gcG9pbnQgb2YgdGhlIHRleHR1cmUuXG4gICAgICogVGhlIGRlZmF1bHQgaXMgMCwwIHRoaXMgbWVhbnMgdGhlIHRleHR1cmUncyBvcmlnaW4gaXMgdGhlIHRvcCBsZWZ0XG4gICAgICogU2V0dGluZyB0aGUgYW5jaG9yIHRvIDAuNSwwLjUgbWVhbnMgdGhlIHRleHR1cmUncyBvcmlnaW4gaXMgY2VudGVyZWRcbiAgICAgKiBTZXR0aW5nIHRoZSBhbmNob3IgdG8gMSwxIHdvdWxkIG1lYW4gdGhlIHRleHR1cmUncyBvcmlnaW4gcG9pbnQgd2lsbCBiZSB0aGUgYm90dG9tIHJpZ2h0IGNvcm5lclxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5Qb2ludH1cbiAgICAgKi9cbiAgICB0aGlzLmFuY2hvciA9IG5ldyBtYXRoLlBvaW50KCk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgdGV4dHVyZSB0aGF0IHRoZSBzcHJpdGUgaXMgdXNpbmdcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuVGV4dHVyZX1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX3RleHR1cmUgPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHdpZHRoIG9mIHRoZSBzcHJpdGUgKHRoaXMgaXMgaW5pdGlhbGx5IHNldCBieSB0aGUgdGV4dHVyZSlcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX3dpZHRoID0gMDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBoZWlnaHQgb2YgdGhlIHNwcml0ZSAodGhpcyBpcyBpbml0aWFsbHkgc2V0IGJ5IHRoZSB0ZXh0dXJlKVxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5faGVpZ2h0ID0gMDtcblxuICAgIC8qKlxuICAgICAqIFRoZSB0aW50IGFwcGxpZWQgdG8gdGhlIHNwcml0ZS4gVGhpcyBpcyBhIGhleCB2YWx1ZS4gQSB2YWx1ZSBvZiAweEZGRkZGRiB3aWxsIHJlbW92ZSBhbnkgdGludCBlZmZlY3QuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMHhGRkZGRkZcbiAgICAgKi9cbiAgICB0aGlzLnRpbnQgPSAweEZGRkZGRjtcblxuICAgIC8qKlxuICAgICAqIFRoZSBibGVuZCBtb2RlIHRvIGJlIGFwcGxpZWQgdG8gdGhlIHNwcml0ZS4gQXBwbHkgYSB2YWx1ZSBvZiBgUElYSS5CTEVORF9NT0RFUy5OT1JNQUxgIHRvIHJlc2V0IHRoZSBibGVuZCBtb2RlLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IFBJWEkuQkxFTkRfTU9ERVMuTk9STUFMXG4gICAgICogQHNlZSBQSVhJLkJMRU5EX01PREVTXG4gICAgICovXG4gICAgdGhpcy5ibGVuZE1vZGUgPSBDT05TVC5CTEVORF9NT0RFUy5OT1JNQUw7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgc2hhZGVyIHRoYXQgd2lsbCBiZSB1c2VkIHRvIHJlbmRlciB0aGUgc3ByaXRlLiBTZXQgdG8gbnVsbCB0byByZW1vdmUgYSBjdXJyZW50IHNoYWRlci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuQWJzdHJhY3RGaWx0ZXJ8UElYSS5TaGFkZXJ9XG4gICAgICovXG4gICAgdGhpcy5zaGFkZXIgPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogQW4gaW50ZXJuYWwgY2FjaGVkIHZhbHVlIG9mIHRoZSB0aW50LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDB4RkZGRkZGXG4gICAgICovXG4gICAgdGhpcy5jYWNoZWRUaW50ID0gMHhGRkZGRkY7XG5cbiAgICAvLyBjYWxsIHRleHR1cmUgc2V0dGVyXG4gICAgdGhpcy50ZXh0dXJlID0gdGV4dHVyZSB8fCBUZXh0dXJlLkVNUFRZO1xuICAgIHRoaXMudGV4dHVyZURpcnR5ID0gdHJ1ZVxuICAgIHRoaXMudmVydGV4RGlydHkgPSB0cnVlO1xuICAgIHRoaXMudmVydGV4RGF0YSA9IG5ldyBGbG9hdDMyQXJyYXkoOCk7XG59XG5cbi8vIGNvbnN0cnVjdG9yXG5TcHJpdGUucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShDb250YWluZXIucHJvdG90eXBlKTtcblNwcml0ZS5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBTcHJpdGU7XG5tb2R1bGUuZXhwb3J0cyA9IFNwcml0ZTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoU3ByaXRlLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFRoZSB3aWR0aCBvZiB0aGUgc3ByaXRlLCBzZXR0aW5nIHRoaXMgd2lsbCBhY3R1YWxseSBtb2RpZnkgdGhlIHNjYWxlIHRvIGFjaGlldmUgdGhlIHZhbHVlIHNldFxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLlNwcml0ZSNcbiAgICAgKi9cbiAgICB3aWR0aDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiBNYXRoLmFicyh0aGlzLnNjYWxlLngpICogdGhpcy50ZXh0dXJlLl9mcmFtZS53aWR0aDtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHZhciBzaWduID0gdXRpbHMuc2lnbih0aGlzLnNjYWxlLngpIHx8IDE7XG4gICAgICAgICAgICB0aGlzLnNjYWxlLnggPSBzaWduICogdmFsdWUgLyB0aGlzLnRleHR1cmUuX2ZyYW1lLndpZHRoO1xuICAgICAgICAgICAgdGhpcy5fd2lkdGggPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBUaGUgaGVpZ2h0IG9mIHRoZSBzcHJpdGUsIHNldHRpbmcgdGhpcyB3aWxsIGFjdHVhbGx5IG1vZGlmeSB0aGUgc2NhbGUgdG8gYWNoaWV2ZSB0aGUgdmFsdWUgc2V0XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuU3ByaXRlI1xuICAgICAqL1xuICAgIGhlaWdodDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiAgTWF0aC5hYnModGhpcy5zY2FsZS55KSAqIHRoaXMudGV4dHVyZS5fZnJhbWUuaGVpZ2h0O1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdmFyIHNpZ24gPSB1dGlscy5zaWduKHRoaXMuc2NhbGUueSkgfHwgMTtcbiAgICAgICAgICAgIHRoaXMuc2NhbGUueSA9IHNpZ24gKiB2YWx1ZSAvIHRoaXMudGV4dHVyZS5fZnJhbWUuaGVpZ2h0O1xuICAgICAgICAgICAgdGhpcy5faGVpZ2h0ID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVGhlIHRleHR1cmUgdGhhdCB0aGUgc3ByaXRlIGlzIHVzaW5nXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlRleHR1cmV9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuU3ByaXRlI1xuICAgICAqL1xuICAgIHRleHR1cmU6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gIHRoaXMuX3RleHR1cmU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICBpZiAodGhpcy5fdGV4dHVyZSA9PT0gdmFsdWUpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLl90ZXh0dXJlID0gdmFsdWU7XG4gICAgICAgICAgICB0aGlzLmNhY2hlZFRpbnQgPSAweEZGRkZGRjtcblxuICAgICAgICAgICAgdGhpcy50ZXh0dXJlRGlydHkgPSB0cnVlO1xuXG4gICAgICAgICAgICBpZiAodmFsdWUpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgLy8gd2FpdCBmb3IgdGhlIHRleHR1cmUgdG8gbG9hZFxuICAgICAgICAgICAgICAgIGlmICh2YWx1ZS5iYXNlVGV4dHVyZS5oYXNMb2FkZWQpXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9vblRleHR1cmVVcGRhdGUoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgdmFsdWUub25jZSgndXBkYXRlJywgdGhpcy5fb25UZXh0dXJlVXBkYXRlLCB0aGlzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG59KTtcblxuLyoqXG4gKiBXaGVuIHRoZSB0ZXh0dXJlIGlzIHVwZGF0ZWQsIHRoaXMgZXZlbnQgd2lsbCBmaXJlIHRvIHVwZGF0ZSB0aGUgc2NhbGUgYW5kIGZyYW1lXG4gKlxuICogQHByaXZhdGVcbiAqL1xuU3ByaXRlLnByb3RvdHlwZS5fb25UZXh0dXJlVXBkYXRlID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLnRleHR1cmVEaXJ0eSA9IHRydWU7XG5cbiAgICAvLyBzbyBpZiBfd2lkdGggaXMgMCB0aGVuIHdpZHRoIHdhcyBub3Qgc2V0Li5cbiAgICBpZiAodGhpcy5fd2lkdGgpXG4gICAge1xuICAgICAgICB0aGlzLnNjYWxlLnggPSB1dGlscy5zaWduKHRoaXMuc2NhbGUueCkgKiB0aGlzLl93aWR0aCAvIHRoaXMudGV4dHVyZS5mcmFtZS53aWR0aDtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5faGVpZ2h0KVxuICAgIHtcbiAgICAgICAgdGhpcy5zY2FsZS55ID0gdXRpbHMuc2lnbih0aGlzLnNjYWxlLnkpICogdGhpcy5faGVpZ2h0IC8gdGhpcy50ZXh0dXJlLmZyYW1lLmhlaWdodDtcbiAgICB9XG59O1xuXG5TcHJpdGUucHJvdG90eXBlLmNhY2x1bGF0ZVZlcnRpY2VzID0gZnVuY3Rpb24gKClcbntcblxuICAgIHZhciB0ZXh0dXJlID0gdGhpcy5fdGV4dHVyZSxcbiAgICAgICAgd3QgPSB0aGlzLndvcmxkVHJhbnNmb3JtLFxuICAgICAgICBhID0gd3QuYSwgYiA9IHd0LmIsIGMgPSB3dC5jLCBkID0gd3QuZCwgdHggPSB3dC50eCwgdHkgPSB3dC50eSxcbiAgICAgICAgdmVydGV4RGF0YSA9IHRoaXMudmVydGV4RGF0YSxcbiAgICAgICAgdzAsIHcxLCBoMCwgaDEsXG4gICAgICAgIHRyaW0gPSB0ZXh0dXJlLnRyaW07XG4gICAgXG4gICAgaWYgKHRyaW0pXG4gICAge1xuICAgICAgICAvLyBpZiB0aGUgc3ByaXRlIGlzIHRyaW1tZWQgYW5kIGlzIG5vdCBhIHRpbGluZ3Nwcml0ZSB0aGVuIHdlIG5lZWQgdG8gYWRkIHRoZSBleHRyYSBzcGFjZSBiZWZvcmUgdHJhbnNmb3JtaW5nIHRoZSBzcHJpdGUgY29vcmRzLi5cbiAgICAgICAgdzEgPSB0cmltLnggLSB0aGlzLmFuY2hvci54ICogdHJpbS53aWR0aDtcbiAgICAgICAgdzAgPSB3MSArIHRleHR1cmUuY3JvcC53aWR0aDtcblxuICAgICAgICBoMSA9IHRyaW0ueSAtIHRoaXMuYW5jaG9yLnkgKiB0cmltLmhlaWdodDtcbiAgICAgICAgaDAgPSBoMSArIHRleHR1cmUuY3JvcC5oZWlnaHQ7XG5cbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgdzAgPSAodGV4dHVyZS5fZnJhbWUud2lkdGggKSAqICgxLXRoaXMuYW5jaG9yLngpO1xuICAgICAgICB3MSA9ICh0ZXh0dXJlLl9mcmFtZS53aWR0aCApICogLXRoaXMuYW5jaG9yLng7XG5cbiAgICAgICAgaDAgPSB0ZXh0dXJlLl9mcmFtZS5oZWlnaHQgKiAoMS10aGlzLmFuY2hvci55KTtcbiAgICAgICAgaDEgPSB0ZXh0dXJlLl9mcmFtZS5oZWlnaHQgKiAtdGhpcy5hbmNob3IueTtcbiAgICB9XG5cbiAgICAvLyB4eVxuICAgIHZlcnRleERhdGFbMF0gPSBhICogdzEgKyBjICogaDEgKyB0eDtcbiAgICB2ZXJ0ZXhEYXRhWzFdID0gZCAqIGgxICsgYiAqIHcxICsgdHk7XG5cbiAgICAvLyB4eVxuICAgIHZlcnRleERhdGFbMl0gPSBhICogdzAgKyBjICogaDEgKyB0eDtcbiAgICB2ZXJ0ZXhEYXRhWzNdID0gZCAqIGgxICsgYiAqIHcwICsgdHk7XG5cbiAgICAgLy8geHlcbiAgICB2ZXJ0ZXhEYXRhWzRdID0gYSAqIHcwICsgYyAqIGgwICsgdHg7XG4gICAgdmVydGV4RGF0YVs1XSA9IGQgKiBoMCArIGIgKiB3MCArIHR5O1xuXG4gICAgLy8geHlcbiAgICB2ZXJ0ZXhEYXRhWzZdID0gYSAqIHcxICsgYyAqIGgwICsgdHg7XG4gICAgdmVydGV4RGF0YVs3XSA9IGQgKiBoMCArIGIgKiB3MSArIHR5O1xuXG5cbn1cblxuLyoqXG4qXG4qIFJlbmRlcnMgdGhlIG9iamVjdCB1c2luZyB0aGUgV2ViR0wgcmVuZGVyZXJcbipcbiogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLldlYkdMUmVuZGVyZXJ9XG4qIEBwcml2YXRlXG4qL1xuU3ByaXRlLnByb3RvdHlwZS5fcmVuZGVyV2ViR0wgPSBmdW5jdGlvbiAocmVuZGVyZXIpXG57XG4gICAgaWYodGhpcy50ZXh0dXJlRGlydHkpXG4gICAge1xuICAgICAgICB0aGlzLnRleHR1cmVEaXJ0eSA9IGZhbHNlO1xuXG4gICAgICAgIHRoaXMuX29uVGV4dHVyZVVwZGF0ZSgpO1xuICAgICAgICBcbiAgICAgICAgdGhpcy52ZXJ0ZXhEaXJ0eSA9IHRydWU7XG4gICAgfVxuXG4gICAgaWYodGhpcy52ZXJ0ZXhEaXJ0eSlcbiAgICB7XG4gICAgICAgIHRoaXMudmVydGV4RGlydHkgPSBmYWxzZTtcblxuICAgICAgICAvLyBzZXQgdGhlIHZlcnRleCBkYXRhXG4gICAgICAgIHRoaXMuY2FjbHVsYXRlVmVydGljZXMoKTtcblxuICAgIH1cbiAgICBcbiAgICByZW5kZXJlci5zZXRPYmplY3RSZW5kZXJlcihyZW5kZXJlci5wbHVnaW5zLnNwcml0ZSk7XG4gICAgcmVuZGVyZXIucGx1Z2lucy5zcHJpdGUucmVuZGVyKHRoaXMpO1xufTtcblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBib3VuZHMgb2YgdGhlIFNwcml0ZSBhcyBhIHJlY3RhbmdsZS4gVGhlIGJvdW5kcyBjYWxjdWxhdGlvbiB0YWtlcyB0aGUgd29ybGRUcmFuc2Zvcm0gaW50byBhY2NvdW50LlxuICpcbiAqIEBwYXJhbSBtYXRyaXgge1BJWEkuTWF0cml4fSB0aGUgdHJhbnNmb3JtYXRpb24gbWF0cml4IG9mIHRoZSBzcHJpdGVcbiAqIEByZXR1cm4ge1BJWEkuUmVjdGFuZ2xlfSB0aGUgZnJhbWluZyByZWN0YW5nbGVcbiAqL1xuU3ByaXRlLnByb3RvdHlwZS5nZXRCb3VuZHMgPSBmdW5jdGlvbiAobWF0cml4KVxue1xuICAgIGlmKCF0aGlzLl9jdXJyZW50Qm91bmRzKVxuICAgIHtcbiAgICAgICAgaWYodGhpcy52ZXJ0ZXhEaXJ0eSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy52ZXJ0ZXhEaXJ0eSA9IGZhbHNlO1xuXG4gICAgICAgICAgICAvLyBzZXQgdGhlIHZlcnRleCBkYXRhXG4gICAgICAgICAgICB0aGlzLmNhY2x1bGF0ZVZlcnRpY2VzKCk7XG5cbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBtaW5YLFxuICAgICAgICAgICAgbWF4WCxcbiAgICAgICAgICAgIG1pblksXG4gICAgICAgICAgICBtYXhZLFxuICAgICAgICAgICAgdmVydGV4RGF0YSA9IHRoaXMudmVydGV4RGF0YTtcblxuICAgICAgICB2YXIgeDEgPSB2ZXJ0ZXhEYXRhWzBdXG4gICAgICAgIHZhciB5MSA9IHZlcnRleERhdGFbMV1cblxuICAgICAgICB2YXIgeDIgPSB2ZXJ0ZXhEYXRhWzJdXG4gICAgICAgIHZhciB5MiA9IHZlcnRleERhdGFbM11cblxuICAgICAgICB2YXIgeDMgPSB2ZXJ0ZXhEYXRhWzRdXG4gICAgICAgIHZhciB5MyA9IHZlcnRleERhdGFbNV1cblxuICAgICAgICB2YXIgeDQgPSB2ZXJ0ZXhEYXRhWzZdXG4gICAgICAgIHZhciB5NCA9IHZlcnRleERhdGFbN11cblxuICAgICAgICBtaW5YID0geDE7XG4gICAgICAgIG1pblggPSB4MiA8IG1pblggPyB4MiA6IG1pblg7XG4gICAgICAgIG1pblggPSB4MyA8IG1pblggPyB4MyA6IG1pblg7XG4gICAgICAgIG1pblggPSB4NCA8IG1pblggPyB4NCA6IG1pblg7XG5cbiAgICAgICAgbWluWSA9IHkxO1xuICAgICAgICBtaW5ZID0geTIgPCBtaW5ZID8geTIgOiBtaW5ZO1xuICAgICAgICBtaW5ZID0geTMgPCBtaW5ZID8geTMgOiBtaW5ZO1xuICAgICAgICBtaW5ZID0geTQgPCBtaW5ZID8geTQgOiBtaW5ZO1xuXG4gICAgICAgIG1heFggPSB4MTtcbiAgICAgICAgbWF4WCA9IHgyID4gbWF4WCA/IHgyIDogbWF4WDtcbiAgICAgICAgbWF4WCA9IHgzID4gbWF4WCA/IHgzIDogbWF4WDtcbiAgICAgICAgbWF4WCA9IHg0ID4gbWF4WCA/IHg0IDogbWF4WDtcblxuICAgICAgICBtYXhZID0geTE7XG4gICAgICAgIG1heFkgPSB5MiA+IG1heFkgPyB5MiA6IG1heFk7XG4gICAgICAgIG1heFkgPSB5MyA+IG1heFkgPyB5MyA6IG1heFk7XG4gICAgICAgIG1heFkgPSB5NCA+IG1heFkgPyB5NCA6IG1heFk7XG5cbiAgICAgICAgLy8gY2hlY2sgZm9yIGNoaWxkcmVuXG4gICAgICAgIGlmKHRoaXMuY2hpbGRyZW4ubGVuZ3RoKVxuICAgICAgICB7XG4gICAgICAgICAgICB2YXIgY2hpbGRCb3VuZHMgPSB0aGlzLmNvbnRhaW5lckdldEJvdW5kcygpO1xuXG4gICAgICAgICAgICB3MCA9IGNoaWxkQm91bmRzLng7XG4gICAgICAgICAgICB3MSA9IGNoaWxkQm91bmRzLnggKyBjaGlsZEJvdW5kcy53aWR0aDtcbiAgICAgICAgICAgIGgwID0gY2hpbGRCb3VuZHMueTtcbiAgICAgICAgICAgIGgxID0gY2hpbGRCb3VuZHMueSArIGNoaWxkQm91bmRzLmhlaWdodDtcblxuICAgICAgICAgICAgbWluWCA9IChtaW5YIDwgdzApID8gbWluWCA6IHcwO1xuICAgICAgICAgICAgbWluWSA9IChtaW5ZIDwgaDApID8gbWluWSA6IGgwO1xuXG4gICAgICAgICAgICBtYXhYID0gKG1heFggPiB3MSkgPyBtYXhYIDogdzE7XG4gICAgICAgICAgICBtYXhZID0gKG1heFkgPiBoMSkgPyBtYXhZIDogaDE7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgYm91bmRzID0gdGhpcy5fYm91bmRzO1xuXG4gICAgICAgIGJvdW5kcy54ID0gbWluWDtcbiAgICAgICAgYm91bmRzLndpZHRoID0gbWF4WCAtIG1pblg7XG5cbiAgICAgICAgYm91bmRzLnkgPSBtaW5ZO1xuICAgICAgICBib3VuZHMuaGVpZ2h0ID0gbWF4WSAtIG1pblk7XG5cbiAgICAgICAgLy8gc3RvcmUgYSByZWZlcmVuY2Ugc28gdGhhdCBpZiB0aGlzIGZ1bmN0aW9uIGdldHMgY2FsbGVkIGFnYWluIGluIHRoZSByZW5kZXIgY3ljbGUgd2UgZG8gbm90IGhhdmUgdG8gcmVjYWxjdWxhdGVcbiAgICAgICAgdGhpcy5fY3VycmVudEJvdW5kcyA9IGJvdW5kcztcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5fY3VycmVudEJvdW5kcztcbn07XG5cbi8qKlxuICogR2V0cyB0aGUgbG9jYWwgYm91bmRzIG9mIHRoZSBzcHJpdGUgb2JqZWN0LlxuICpcbiAqL1xuU3ByaXRlLnByb3RvdHlwZS5nZXRMb2NhbEJvdW5kcyA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy5fYm91bmRzLnggPSAtdGhpcy5fdGV4dHVyZS5fZnJhbWUud2lkdGggKiB0aGlzLmFuY2hvci54O1xuICAgIHRoaXMuX2JvdW5kcy55ID0gLXRoaXMuX3RleHR1cmUuX2ZyYW1lLmhlaWdodCAqIHRoaXMuYW5jaG9yLnk7XG4gICAgdGhpcy5fYm91bmRzLndpZHRoID0gdGhpcy5fdGV4dHVyZS5fZnJhbWUud2lkdGg7XG4gICAgdGhpcy5fYm91bmRzLmhlaWdodCA9IHRoaXMuX3RleHR1cmUuX2ZyYW1lLmhlaWdodDtcbiAgICByZXR1cm4gdGhpcy5fYm91bmRzO1xufTtcblxuLyoqXG4qIFRlc3RzIGlmIGEgcG9pbnQgaXMgaW5zaWRlIHRoaXMgc3ByaXRlXG4qXG4qIEBwYXJhbSBwb2ludCB7UElYSS5Qb2ludH0gdGhlIHBvaW50IHRvIHRlc3RcbiogQHJldHVybiB7Ym9vbGVhbn0gdGhlIHJlc3VsdCBvZiB0aGUgdGVzdFxuKi9cblNwcml0ZS5wcm90b3R5cGUuY29udGFpbnNQb2ludCA9IGZ1bmN0aW9uKCBwb2ludCApXG57XG4gICAgdGhpcy53b3JsZFRyYW5zZm9ybS5hcHBseUludmVyc2UocG9pbnQsICB0ZW1wUG9pbnQpO1xuXG4gICAgdmFyIHdpZHRoID0gdGhpcy5fdGV4dHVyZS5fZnJhbWUud2lkdGg7XG4gICAgdmFyIGhlaWdodCA9IHRoaXMuX3RleHR1cmUuX2ZyYW1lLmhlaWdodDtcbiAgICB2YXIgeDEgPSAtd2lkdGggKiB0aGlzLmFuY2hvci54O1xuICAgIHZhciB5MTtcblxuICAgIGlmICggdGVtcFBvaW50LnggPiB4MSAmJiB0ZW1wUG9pbnQueCA8IHgxICsgd2lkdGggKVxuICAgIHtcbiAgICAgICAgeTEgPSAtaGVpZ2h0ICogdGhpcy5hbmNob3IueTtcblxuICAgICAgICBpZiAoIHRlbXBQb2ludC55ID4geTEgJiYgdGVtcFBvaW50LnkgPCB5MSArIGhlaWdodCApXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xufTtcblxuLyoqXG4qIFJlbmRlcnMgdGhlIG9iamVjdCB1c2luZyB0aGUgQ2FudmFzIHJlbmRlcmVyXG4qXG4qIEBwYXJhbSByZW5kZXJlciB7UElYSS5DYW52YXNSZW5kZXJlcn0gVGhlIHJlbmRlcmVyXG4qIEBwcml2YXRlXG4qL1xuU3ByaXRlLnByb3RvdHlwZS5fcmVuZGVyQ2FudmFzID0gZnVuY3Rpb24gKHJlbmRlcmVyKVxue1xuICAgIGlmICh0aGlzLnRleHR1cmUuY3JvcC53aWR0aCA8PSAwIHx8IHRoaXMudGV4dHVyZS5jcm9wLmhlaWdodCA8PSAwKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHZhciBjb21wb3NpdGVPcGVyYXRpb24gPSByZW5kZXJlci5ibGVuZE1vZGVzW3RoaXMuYmxlbmRNb2RlXTtcbiAgICBpZiAoY29tcG9zaXRlT3BlcmF0aW9uICE9PSByZW5kZXJlci5jb250ZXh0Lmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbilcbiAgICB7XG4gICAgICAgIHJlbmRlcmVyLmNvbnRleHQuZ2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uID0gY29tcG9zaXRlT3BlcmF0aW9uO1xuICAgIH1cblxuICAgIC8vICBJZ25vcmUgbnVsbCBzb3VyY2VzXG4gICAgaWYgKHRoaXMudGV4dHVyZS52YWxpZClcbiAgICB7XG4gICAgICAgIHZhciB0ZXh0dXJlID0gdGhpcy5fdGV4dHVyZSxcbiAgICAgICAgICAgIHd0ID0gdGhpcy53b3JsZFRyYW5zZm9ybSxcbiAgICAgICAgICAgIGR4LFxuICAgICAgICAgICAgZHksXG4gICAgICAgICAgICB3aWR0aCxcbiAgICAgICAgICAgIGhlaWdodDtcblxuICAgICAgICByZW5kZXJlci5jb250ZXh0Lmdsb2JhbEFscGhhID0gdGhpcy53b3JsZEFscGhhO1xuXG4gICAgICAgIC8vIElmIHNtb290aGluZ0VuYWJsZWQgaXMgc3VwcG9ydGVkIGFuZCB3ZSBuZWVkIHRvIGNoYW5nZSB0aGUgc21vb3RoaW5nIHByb3BlcnR5IGZvciB0aGlzIHRleHR1cmVcbiAgICAgICAgdmFyIHNtb290aGluZ0VuYWJsZWQgPSB0ZXh0dXJlLmJhc2VUZXh0dXJlLnNjYWxlTW9kZSA9PT0gQ09OU1QuU0NBTEVfTU9ERVMuTElORUFSO1xuICAgICAgICBpZiAocmVuZGVyZXIuc21vb3RoUHJvcGVydHkgJiYgcmVuZGVyZXIuY29udGV4dFtyZW5kZXJlci5zbW9vdGhQcm9wZXJ0eV0gIT09IHNtb290aGluZ0VuYWJsZWQpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJlbmRlcmVyLmNvbnRleHRbcmVuZGVyZXIuc21vb3RoUHJvcGVydHldID0gc21vb3RoaW5nRW5hYmxlZDtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIElmIHRoZSB0ZXh0dXJlIGlzIHRyaW1tZWQgd2Ugb2Zmc2V0IGJ5IHRoZSB0cmltIHgveSwgb3RoZXJ3aXNlIHdlIHVzZSB0aGUgZnJhbWUgZGltZW5zaW9uc1xuXG4gICAgICAgIGlmKHRleHR1cmUucm90YXRlKVxuICAgICAgICB7XG4gICAgICAgICAgICB3aWR0aCA9IHRleHR1cmUuY3JvcC5oZWlnaHQ7XG4gICAgICAgICAgICBoZWlnaHQgPSB0ZXh0dXJlLmNyb3Aud2lkdGg7XG5cbiAgICAgICAgICAgIGR4ID0gKHRleHR1cmUudHJpbSkgPyB0ZXh0dXJlLnRyaW0ueSAtIHRoaXMuYW5jaG9yLnkgKiB0ZXh0dXJlLnRyaW0uaGVpZ2h0IDogdGhpcy5hbmNob3IueSAqIC10ZXh0dXJlLl9mcmFtZS5oZWlnaHQ7XG4gICAgICAgICAgICBkeSA9ICh0ZXh0dXJlLnRyaW0pID8gdGV4dHVyZS50cmltLnggLSB0aGlzLmFuY2hvci54ICogdGV4dHVyZS50cmltLndpZHRoIDogdGhpcy5hbmNob3IueCAqIC10ZXh0dXJlLl9mcmFtZS53aWR0aDtcbiAgICAgICBcbiAgICAgICAgICAgIGR4ICs9IHdpZHRoO1xuXG4gICAgICAgICAgICB3dC50eCA9IGR5ICogd3QuYSArIGR4ICogd3QuYyArIHd0LnR4O1xuICAgICAgICAgICAgd3QudHkgPSBkeSAqIHd0LmIgKyBkeCAqIHd0LmQgKyB3dC50eTtcblxuICAgICAgICAgICAgdmFyIHRlbXAgPSB3dC5hO1xuICAgICAgICAgICAgd3QuYSAgPSAtd3QuYztcbiAgICAgICAgICAgIHd0LmMgID0gIHRlbXA7XG5cbiAgICAgICAgICAgIHRlbXAgPSB3dC5iO1xuICAgICAgICAgICAgd3QuYiAgPSAtd3QuZDtcbiAgICAgICAgICAgIHd0LmQgID0gIHRlbXA7XG5cbiAgICAgICAgICAgIC8vIHRoZSBhbmNob3IgaGFzIGFscmVhZHkgYmVlbiBhcHBsaWVkIGFib3ZlLCBzbyBsZXRzIHNldCBpdCB0byB6ZXJvXG4gICAgICAgICAgICBkeCA9IDA7XG4gICAgICAgICAgICBkeSA9IDA7XG5cbiAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgIHtcbiAgICAgICAgICAgIHdpZHRoID0gdGV4dHVyZS5jcm9wLndpZHRoO1xuICAgICAgICAgICAgaGVpZ2h0ID0gdGV4dHVyZS5jcm9wLmhlaWdodDtcblxuICAgICAgICAgICAgZHggPSAodGV4dHVyZS50cmltKSA/IHRleHR1cmUudHJpbS54IC0gdGhpcy5hbmNob3IueCAqIHRleHR1cmUudHJpbS53aWR0aCA6IHRoaXMuYW5jaG9yLnggKiAtdGV4dHVyZS5fZnJhbWUud2lkdGg7XG4gICAgICAgICAgICBkeSA9ICh0ZXh0dXJlLnRyaW0pID8gdGV4dHVyZS50cmltLnkgLSB0aGlzLmFuY2hvci55ICogdGV4dHVyZS50cmltLmhlaWdodCA6IHRoaXMuYW5jaG9yLnkgKiAtdGV4dHVyZS5fZnJhbWUuaGVpZ2h0O1xuICAgICAgICB9XG5cblxuXG4gICAgICAgIC8vIEFsbG93IGZvciBwaXhlbCByb3VuZGluZ1xuICAgICAgICBpZiAocmVuZGVyZXIucm91bmRQaXhlbHMpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJlbmRlcmVyLmNvbnRleHQuc2V0VHJhbnNmb3JtKFxuICAgICAgICAgICAgICAgIHd0LmEsXG4gICAgICAgICAgICAgICAgd3QuYixcbiAgICAgICAgICAgICAgICB3dC5jLFxuICAgICAgICAgICAgICAgIHd0LmQsXG4gICAgICAgICAgICAgICAgKHd0LnR4ICogcmVuZGVyZXIucmVzb2x1dGlvbikgfCAwLFxuICAgICAgICAgICAgICAgICh3dC50eSAqIHJlbmRlcmVyLnJlc29sdXRpb24pIHwgMFxuICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgZHggPSBkeCB8IDA7XG4gICAgICAgICAgICBkeSA9IGR5IHwgMDtcbiAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgIHtcblxuICAgICAgICAgICAgcmVuZGVyZXIuY29udGV4dC5zZXRUcmFuc2Zvcm0oXG4gICAgICAgICAgICAgICAgd3QuYSxcbiAgICAgICAgICAgICAgICB3dC5iLFxuICAgICAgICAgICAgICAgIHd0LmMsXG4gICAgICAgICAgICAgICAgd3QuZCxcbiAgICAgICAgICAgICAgICB3dC50eCAqIHJlbmRlcmVyLnJlc29sdXRpb24sXG4gICAgICAgICAgICAgICAgd3QudHkgKiByZW5kZXJlci5yZXNvbHV0aW9uXG4gICAgICAgICAgICApO1xuXG5cbiAgICAgICAgfVxuXG4gICAgICAgIHZhciByZXNvbHV0aW9uID0gdGV4dHVyZS5iYXNlVGV4dHVyZS5yZXNvbHV0aW9uO1xuXG4gICAgICAgIGlmICh0aGlzLnRpbnQgIT09IDB4RkZGRkZGKVxuICAgICAgICB7XG4gICAgICAgICAgICBpZiAodGhpcy5jYWNoZWRUaW50ICE9PSB0aGlzLnRpbnQpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdGhpcy5jYWNoZWRUaW50ID0gdGhpcy50aW50O1xuXG4gICAgICAgICAgICAgICAgLy8gVE9ETyBjbGVhbiB1cCBjYWNoaW5nIC0gaG93IHRvIGNsZWFuIHVwIHRoZSBjYWNoZXM/XG4gICAgICAgICAgICAgICAgdGhpcy50aW50ZWRUZXh0dXJlID0gQ2FudmFzVGludGVyLmdldFRpbnRlZFRleHR1cmUodGhpcywgdGhpcy50aW50KTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmVuZGVyZXIuY29udGV4dC5kcmF3SW1hZ2UoXG4gICAgICAgICAgICAgICAgdGhpcy50aW50ZWRUZXh0dXJlLFxuICAgICAgICAgICAgICAgIDAsXG4gICAgICAgICAgICAgICAgMCxcbiAgICAgICAgICAgICAgICB3aWR0aCAqIHJlc29sdXRpb24sXG4gICAgICAgICAgICAgICAgaGVpZ2h0ICogcmVzb2x1dGlvbixcbiAgICAgICAgICAgICAgICBkeCAqIHJlbmRlcmVyLnJlc29sdXRpb24sXG4gICAgICAgICAgICAgICAgZHkgKiByZW5kZXJlci5yZXNvbHV0aW9uLFxuICAgICAgICAgICAgICAgIHdpZHRoICogcmVuZGVyZXIucmVzb2x1dGlvbixcbiAgICAgICAgICAgICAgICBoZWlnaHQgKiByZW5kZXJlci5yZXNvbHV0aW9uXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIGVsc2VcbiAgICAgICAge1xuICAgICAgICAgICAgcmVuZGVyZXIuY29udGV4dC5kcmF3SW1hZ2UoXG4gICAgICAgICAgICAgICAgdGV4dHVyZS5iYXNlVGV4dHVyZS5zb3VyY2UsXG4gICAgICAgICAgICAgICAgdGV4dHVyZS5jcm9wLnggKiByZXNvbHV0aW9uLFxuICAgICAgICAgICAgICAgIHRleHR1cmUuY3JvcC55ICogcmVzb2x1dGlvbixcbiAgICAgICAgICAgICAgICB3aWR0aCAqIHJlc29sdXRpb24sXG4gICAgICAgICAgICAgICAgaGVpZ2h0ICogcmVzb2x1dGlvbixcbiAgICAgICAgICAgICAgICBkeCAgKiByZW5kZXJlci5yZXNvbHV0aW9uLFxuICAgICAgICAgICAgICAgIGR5ICAqIHJlbmRlcmVyLnJlc29sdXRpb24sXG4gICAgICAgICAgICAgICAgd2lkdGggKiByZW5kZXJlci5yZXNvbHV0aW9uLFxuICAgICAgICAgICAgICAgIGhlaWdodCAqIHJlbmRlcmVyLnJlc29sdXRpb25cbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICB9XG59O1xuXG4vKipcbiAqIERlc3Ryb3lzIHRoaXMgc3ByaXRlIGFuZCBvcHRpb25hbGx5IGl0cyB0ZXh0dXJlXG4gKlxuICogQHBhcmFtIFtkZXN0cm95VGV4dHVyZT1mYWxzZV0ge2Jvb2xlYW59IFNob3VsZCBpdCBkZXN0cm95IHRoZSBjdXJyZW50IHRleHR1cmUgb2YgdGhlIHNwcml0ZSBhcyB3ZWxsXG4gKiBAcGFyYW0gW2Rlc3Ryb3lCYXNlVGV4dHVyZT1mYWxzZV0ge2Jvb2xlYW59IFNob3VsZCBpdCBkZXN0cm95IHRoZSBiYXNlIHRleHR1cmUgb2YgdGhlIHNwcml0ZSBhcyB3ZWxsXG4gKi9cblNwcml0ZS5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uIChkZXN0cm95VGV4dHVyZSwgZGVzdHJveUJhc2VUZXh0dXJlKVxue1xuICAgIENvbnRhaW5lci5wcm90b3R5cGUuZGVzdHJveS5jYWxsKHRoaXMpO1xuXG4gICAgdGhpcy5hbmNob3IgPSBudWxsO1xuXG4gICAgaWYgKGRlc3Ryb3lUZXh0dXJlKVxuICAgIHtcbiAgICAgICAgdGhpcy5fdGV4dHVyZS5kZXN0cm95KGRlc3Ryb3lCYXNlVGV4dHVyZSk7XG4gICAgfVxuXG4gICAgdGhpcy5fdGV4dHVyZSA9IG51bGw7XG4gICAgdGhpcy5zaGFkZXIgPSBudWxsO1xufTtcblxuLy8gc29tZSBoZWxwZXIgZnVuY3Rpb25zLi5cblxuLyoqXG4gKiBIZWxwZXIgZnVuY3Rpb24gdGhhdCBjcmVhdGVzIGEgc3ByaXRlIHRoYXQgd2lsbCBjb250YWluIGEgdGV4dHVyZSBmcm9tIHRoZSBUZXh0dXJlQ2FjaGUgYmFzZWQgb24gdGhlIGZyYW1lSWRcbiAqIFRoZSBmcmFtZSBpZHMgYXJlIGNyZWF0ZWQgd2hlbiBhIFRleHR1cmUgcGFja2VyIGZpbGUgaGFzIGJlZW4gbG9hZGVkXG4gKlxuICogQHN0YXRpY1xuICogQHBhcmFtIGZyYW1lSWQge3N0cmluZ30gVGhlIGZyYW1lIElkIG9mIHRoZSB0ZXh0dXJlIGluIHRoZSBjYWNoZVxuICogQHBhcmFtIFtjcm9zc29yaWdpbj0oYXV0byldIHtib29sZWFufSBpZiB5b3Ugd2FudCB0byBzcGVjaWZ5IHRoZSBjcm9zcy1vcmlnaW4gcGFyYW1ldGVyXG4gKiBAcGFyYW0gW3NjYWxlTW9kZT1QSVhJLlNDQUxFX01PREVTLkRFRkFVTFRdIHtudW1iZXJ9IGlmIHlvdSB3YW50IHRvIHNwZWNpZnkgdGhlIHNjYWxlIG1vZGUsIHNlZSB7QGxpbmsgUElYSS5TQ0FMRV9NT0RFU30gZm9yIHBvc3NpYmxlIHZhbHVlc1xuICogQHJldHVybiB7UElYSS5TcHJpdGV9IEEgbmV3IFNwcml0ZSB1c2luZyBhIHRleHR1cmUgZnJvbSB0aGUgdGV4dHVyZSBjYWNoZSBtYXRjaGluZyB0aGUgZnJhbWVJZFxuICovXG5TcHJpdGUuZnJvbUZyYW1lID0gZnVuY3Rpb24gKGZyYW1lSWQpXG57XG4gICAgdmFyIHRleHR1cmUgPSB1dGlscy5UZXh0dXJlQ2FjaGVbZnJhbWVJZF07XG5cbiAgICBpZiAoIXRleHR1cmUpXG4gICAge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RoZSBmcmFtZUlkIFwiJyArIGZyYW1lSWQgKyAnXCIgZG9lcyBub3QgZXhpc3QgaW4gdGhlIHRleHR1cmUgY2FjaGUnKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IFNwcml0ZSh0ZXh0dXJlKTtcbn07XG5cbi8qKlxuICogSGVscGVyIGZ1bmN0aW9uIHRoYXQgY3JlYXRlcyBhIHNwcml0ZSB0aGF0IHdpbGwgY29udGFpbiBhIHRleHR1cmUgYmFzZWQgb24gYW4gaW1hZ2UgdXJsXG4gKiBJZiB0aGUgaW1hZ2UgaXMgbm90IGluIHRoZSB0ZXh0dXJlIGNhY2hlIGl0IHdpbGwgYmUgbG9hZGVkXG4gKlxuICogQHN0YXRpY1xuICogQHBhcmFtIGltYWdlSWQge3N0cmluZ30gVGhlIGltYWdlIHVybCBvZiB0aGUgdGV4dHVyZVxuICogQHJldHVybiB7UElYSS5TcHJpdGV9IEEgbmV3IFNwcml0ZSB1c2luZyBhIHRleHR1cmUgZnJvbSB0aGUgdGV4dHVyZSBjYWNoZSBtYXRjaGluZyB0aGUgaW1hZ2UgaWRcbiAqL1xuU3ByaXRlLmZyb21JbWFnZSA9IGZ1bmN0aW9uIChpbWFnZUlkLCBjcm9zc29yaWdpbiwgc2NhbGVNb2RlKVxue1xuICAgIHJldHVybiBuZXcgU3ByaXRlKFRleHR1cmUuZnJvbUltYWdlKGltYWdlSWQsIGNyb3Nzb3JpZ2luLCBzY2FsZU1vZGUpKTtcbn07XG4iLCJ2YXIgT2JqZWN0UmVuZGVyZXIgPSByZXF1aXJlKCcuLi8uLi9yZW5kZXJlcnMvd2ViZ2wvdXRpbHMvT2JqZWN0UmVuZGVyZXInKSxcbiAgICBXZWJHTFJlbmRlcmVyID0gcmVxdWlyZSgnLi4vLi4vcmVuZGVyZXJzL3dlYmdsL1dlYkdMUmVuZGVyZXInKSxcbiAgICBUZXh0dXJlU2hhZGVyID0gcmVxdWlyZSgnLi4vLi4vcmVuZGVyZXJzL3dlYmdsL3NoYWRlcnMvX1RleHR1cmVTaGFkZXInKSxcbiAgICBjcmVhdGVJbmRpY2VzRm9yUXVhZHMgPSByZXF1aXJlKCcuLi8uLi91dGlscy9jcmVhdGVJbmRpY2VzRm9yUXVhZHMnKSxcbiAgICBnZW5lcmF0ZU11bHRpVGV4dHVyZVNoYWRlciA9IHJlcXVpcmUoJy4vZ2VuZXJhdGVNdWx0aVRleHR1cmVTaGFkZXInKSxcbiAgICBDT05TVCA9IHJlcXVpcmUoJy4uLy4uL2NvbnN0JyksXG4gICAgZ2xDb3JlID0gcmVxdWlyZSgncGl4aS1nbC1jb3JlJyk7XG5cbi8qKlxuICogQGF1dGhvciBNYXQgR3JvdmVzXG4gKlxuICogQmlnIHRoYW5rcyB0byB0aGUgdmVyeSBjbGV2ZXIgTWF0dCBEZXNMYXVyaWVycyA8bWF0dGRlc2w+IGh0dHBzOi8vZ2l0aHViLmNvbS9tYXR0ZGVzbC9cbiAqIGZvciBjcmVhdGluZyB0aGUgb3JpZ2luYWwgcGl4aSB2ZXJzaW9uIVxuICogQWxzbyBhIHRoYW5rcyB0byBodHRwczovL2dpdGh1Yi5jb20vYmNoZXZhbGllciBmb3IgdHdlYWtpbmcgdGhlIHRpbnQgYW5kIGFscGhhIHNvIHRoYXQgdGhleSBub3cgc2hhcmUgNCBieXRlcyBvbiB0aGUgdmVydGV4IGJ1ZmZlclxuICpcbiAqIEhlYXZpbHkgaW5zcGlyZWQgYnkgTGliR0RYJ3MgU3ByaXRlUmVuZGVyZXI6XG4gKiBodHRwczovL2dpdGh1Yi5jb20vbGliZ2R4L2xpYmdkeC9ibG9iL21hc3Rlci9nZHgvc3JjL2NvbS9iYWRsb2dpYy9nZHgvZ3JhcGhpY3MvZzJkL1Nwcml0ZVJlbmRlcmVyLmphdmFcbiAqL1xuXG4vKipcbiAqIFJlbmRlcmVyIGRlZGljYXRlZCB0byBkcmF3aW5nIGFuZCBiYXRjaGluZyBzcHJpdGVzLlxuICpcbiAqIEBjbGFzc1xuICogQHByaXZhdGVcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAZXh0ZW5kcyBQSVhJLk9iamVjdFJlbmRlcmVyXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcn0gVGhlIHJlbmRlcmVyIHRoaXMgc3ByaXRlIGJhdGNoIHdvcmtzIGZvci5cbiAqL1xuZnVuY3Rpb24gU3ByaXRlUmVuZGVyZXIocmVuZGVyZXIpXG57XG4gICAgT2JqZWN0UmVuZGVyZXIuY2FsbCh0aGlzLCByZW5kZXJlcik7XG5cbiAgICAvKipcbiAgICAgKiBOdW1iZXIgb2YgdmFsdWVzIHNlbnQgaW4gdGhlIHZlcnRleCBidWZmZXIuXG4gICAgICogcG9zaXRpb25YLCBwb3NpdGlvblksIGNvbG9yUiwgY29sb3JHLCBjb2xvckIgPSA1XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy52ZXJ0U2l6ZSA9IDU7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgc2l6ZSBvZiB0aGUgdmVydGV4IGluZm9ybWF0aW9uIGluIGJ5dGVzLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMudmVydEJ5dGVTaXplID0gdGhpcy52ZXJ0U2l6ZSAqIDQ7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgbnVtYmVyIG9mIGltYWdlcyBpbiB0aGUgU3ByaXRlQmF0Y2ggYmVmb3JlIGl0IGZsdXNoZXMuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy5zaXplID0gQ09OU1QuU1BSSVRFX0JBVENIX1NJWkU7IC8vIDIwMDAgaXMgYSBuaWNlIGJhbGFuY2UgYmV0d2VlbiBtb2JpbGUgLyBkZXNrdG9wXG5cbiAgICAvLyB0aGUgdG90YWwgbnVtYmVyIG9mIGJ5dGVzIGluIG91ciBiYXRjaFxuICAgIHZhciBudW1WZXJ0cyA9ICh0aGlzLnNpemUgKiA0KSAqIHRoaXMudmVydEJ5dGVTaXplO1xuXG4gICAgLy8gdGhlIHRvdGFsIG51bWJlciBvZiBpbmRpY2VzIGluIG91ciBiYXRjaCwgdGhlcmUgYXJlIDYgcG9pbnRzIHBlciBxdWFkLlxuICAgIHZhciBudW1JbmRpY2VzID0gdGhpcy5zaXplICogNjtcblxuICAgIC8qKlxuICAgICAqIEhvbGRzIHRoZSB2ZXJ0ZXggZGF0YSB0aGF0IHdpbGwgYmUgc2VudCB0byB0aGUgdmVydGV4IHNoYWRlci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge0FycmF5QnVmZmVyfVxuICAgICAqL1xuICAgIHRoaXMudmVydGljZXMgPSBuZXcgQXJyYXlCdWZmZXIobnVtVmVydHMpO1xuXG4gICAgLyoqXG4gICAgICogVmlldyBvbiB0aGUgdmVydGljZXMgYXMgYSBGbG9hdDMyQXJyYXkgZm9yIHBvc2l0aW9uc1xuICAgICAqXG4gICAgICogQG1lbWJlciB7RmxvYXQzMkFycmF5fVxuICAgICAqL1xuICAgIHRoaXMucG9zaXRpb25zID0gbmV3IEZsb2F0MzJBcnJheSh0aGlzLnZlcnRpY2VzKTtcbiAgICBcbiAgICAvKipcbiAgICAgKiBWaWV3IG9uIHRoZSB2ZXJ0aWNlcyBhcyBhIFVpbnQzMkFycmF5IGZvciB1dnNcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge0Zsb2F0MzJBcnJheX1cbiAgICAgKi9cbiAgICB0aGlzLnV2cyA9IG5ldyBVaW50MzJBcnJheSh0aGlzLnZlcnRpY2VzKTtcblxuICAgIC8qKlxuICAgICAqIFZpZXcgb24gdGhlIHZlcnRpY2VzIGFzIGEgVWludDMyQXJyYXkgZm9yIGNvbG9yc1xuICAgICAqXG4gICAgICogQG1lbWJlciB7VWludDMyQXJyYXl9XG4gICAgICovXG4gICAgdGhpcy5jb2xvcnMgPSBuZXcgVWludDMyQXJyYXkodGhpcy52ZXJ0aWNlcyk7XG5cbiAgICAvKipcbiAgICAgKiBIb2xkcyB0aGUgaW5kaWNlcyBvZiB0aGUgZ2VvbWV0cnkgKHF1YWRzKSB0byBkcmF3XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtVaW50MTZBcnJheX1cbiAgICAgKi9cbiAgICB0aGlzLmluZGljZXMgPSBjcmVhdGVJbmRpY2VzRm9yUXVhZHModGhpcy5zaXplKVxuXG4gICAgLyoqXG4gICAgICogVGhlIGRlZmF1bHQgc2hhZGVyIHRoYXQgaXMgdXNlZCBpZiBhIHNwcml0ZSBkb2Vzbid0IGhhdmUgYSBtb3JlIHNwZWNpZmljIG9uZS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuU2hhZGVyfVxuICAgICAqL1xuICAgIHRoaXMuc2hhZGVyID0gbnVsbDtcblxuICAgIHRoaXMudGV4dHVyZUNvdW50ID0gMDtcbiAgICB0aGlzLmN1cnJlbnRJbmRleCA9IDA7XG4gIFxuICAgIHRoaXMuZ3JvdXBDb3VudCA9IDA7XG4gICAgdGhpcy5ncm91cHMgPSBbXTtcbiAgICBcbiAgICAvL1RPRE8gLSAzMDAgaXMgYSBiaXQgbWFnaWMsIGZpZ3VyZSBvdXQgYSBuaWNlciBhbW91bnQhXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLnNpemU7IGkrKykgXG4gICAge1xuICAgICAgICB0aGlzLmdyb3Vwc1tpXSA9IHt0ZXh0dXJlczpbXSwgdGV4dHVyZUNvdW50OjAsIGlkczpbXSwgc2l6ZTowLCBzdGFydDowLCBibGVuZDowfTsgXG4gICAgfTtcbiAgICBcbiAgICB0aGlzLmN1cnJlbnRHcm91cCA9IHRoaXMuZ3JvdXBzW3RoaXMuZ3JvdXBDb3VudCsrXTtcblxuICAgIHRoaXMuY3VycmVudFRleHR1cmUgPSBudWxsOyAgICBcbn1cblxuXG5TcHJpdGVSZW5kZXJlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKE9iamVjdFJlbmRlcmVyLnByb3RvdHlwZSk7XG5TcHJpdGVSZW5kZXJlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBTcHJpdGVSZW5kZXJlcjtcbm1vZHVsZS5leHBvcnRzID0gU3ByaXRlUmVuZGVyZXI7XG5cbldlYkdMUmVuZGVyZXIucmVnaXN0ZXJQbHVnaW4oJ3Nwcml0ZScsIFNwcml0ZVJlbmRlcmVyKTtcblxuLyoqXG4gKiBTZXRzIHVwIHRoZSByZW5kZXJlciBjb250ZXh0IGFuZCBuZWNlc3NhcnkgYnVmZmVycy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIGdsIHtXZWJHTFJlbmRlcmluZ0NvbnRleHR9IHRoZSBjdXJyZW50IFdlYkdMIGRyYXdpbmcgY29udGV4dFxuICovXG5TcHJpdGVSZW5kZXJlci5wcm90b3R5cGUub25Db250ZXh0Q2hhbmdlID0gZnVuY3Rpb24gKClcbntcbiAgICB2YXIgZ2wgPSB0aGlzLnJlbmRlcmVyLmdsO1xuXG4gICAgdGhpcy5NQVhfVEVYVFVFUyA9IGdsLmdldFBhcmFtZXRlcihnbC5NQVhfVEVYVFVSRV9JTUFHRV9VTklUUyk7XG5cbiAgICB0aGlzLl9zaGFkZXIgPSBnZW5lcmF0ZU11bHRpVGV4dHVyZVNoYWRlcihnbCwgdGhpcy5NQVhfVEVYVFVFUykvL25ldyBUZXh0dXJlU2hhZGVyKGdsKTtcblxuICAgIC8vIHNldHVwIGRlZmF1bHQgc2hhZGVyXG4gICAgdGhpcy5zaGFkZXIgPSB0aGlzLnJlbmRlcmVyLnNoYWRlck1hbmFnZXIuZGVmYXVsdFNoYWRlcjtcblxuICAgIC8vIGNyZWF0ZSBhIGNvdXBsZSBvZiBidWZmZXJzXG4gICAgdGhpcy52ZXJ0ZXhCdWZmZXIgPSBnbENvcmUuR0xCdWZmZXIuY3JlYXRlVmVydGV4QnVmZmVyKGdsLCBudWxsLCBnbC5EWU5BTUlDX0RSQVcpO1xuICAgIHRoaXMuaW5kZXhCdWZmZXIgPSBnbENvcmUuR0xCdWZmZXIuY3JlYXRlSW5kZXhCdWZmZXIoZ2wsIHRoaXMuaW5kaWNlcywgZ2wuU1RBVElDX0RSQVcpO1xuXG4gICAgLy8gYnVpbGQgdGhlIHZhbyBvYmplY3QgdGhhdCB3aWxsIHJlbmRlci4uXG4gICAgdGhpcy52YW8gPSBuZXcgZ2xDb3JlLlZlcnRleEFycmF5T2JqZWN0KGdsKTtcblxuICAgIHRoaXMudmFvLmFkZEluZGV4KHRoaXMuaW5kZXhCdWZmZXIpO1xuICAgIHRoaXMudmFvLmFkZEF0dHJpYnV0ZSh0aGlzLnZlcnRleEJ1ZmZlciwgdGhpcy5fc2hhZGVyLmF0dHJpYnV0ZXMuYVZlcnRleFBvc2l0aW9uLCBnbC5GTE9BVCwgZmFsc2UsIHRoaXMudmVydEJ5dGVTaXplLCAwKTtcbiAgICB0aGlzLnZhby5hZGRBdHRyaWJ1dGUodGhpcy52ZXJ0ZXhCdWZmZXIsIHRoaXMuX3NoYWRlci5hdHRyaWJ1dGVzLmFUZXh0dXJlQ29vcmQsIGdsLlVOU0lHTkVEX1NIT1JULCB0cnVlLCB0aGlzLnZlcnRCeXRlU2l6ZSwgMiAqIDQpO1xuICAgIHRoaXMudmFvLmFkZEF0dHJpYnV0ZSh0aGlzLnZlcnRleEJ1ZmZlciwgdGhpcy5fc2hhZGVyLmF0dHJpYnV0ZXMuYUNvbG9yLCBnbC5VTlNJR05FRF9CWVRFLCB0cnVlLCB0aGlzLnZlcnRCeXRlU2l6ZSwgMyAqIDQpO1xuICAgIHRoaXMudmFvLmFkZEF0dHJpYnV0ZSh0aGlzLnZlcnRleEJ1ZmZlciwgdGhpcy5fc2hhZGVyLmF0dHJpYnV0ZXMuYVRleHR1cmVJZCwgZ2wuRkxPQVQsIGZhbHNlLCB0aGlzLnZlcnRCeXRlU2l6ZSwgNCAqIDQpO1xuXG4gICAgdGhpcy5jdXJyZW50QmxlbmRNb2RlID0gOTk5OTk7XG59O1xuXG4vKipcbiAqIFJlbmRlcnMgdGhlIHNwcml0ZSBvYmplY3QuXG4gKlxuICogQHBhcmFtIHNwcml0ZSB7UElYSS5TcHJpdGV9IHRoZSBzcHJpdGUgdG8gcmVuZGVyIHdoZW4gdXNpbmcgdGhpcyBzcHJpdGViYXRjaFxuICovXG5TcHJpdGVSZW5kZXJlci5wcm90b3R5cGUucmVuZGVyID0gZnVuY3Rpb24gKHNwcml0ZSlcbntcbiAgICAvL1RPRE8gc2V0IGJsZW5kIG1vZGVzLi5cbiAgICAvLyBjaGVjayB0ZXh0dXJlLi5cbiAgICBpZiAodGhpcy5jdXJyZW50SW5kZXggPj0gdGhpcy5zaXplKVxuICAgIHtcbiAgICAgICAgdGhpcy5mbHVzaCgpO1xuICAgIH1cblxuICBcbiAgICAvLyBnZXQgdGhlIHV2cyBmb3IgdGhlIHRleHR1cmVcbiAgIFxuXG4gICAgLy8gaWYgdGhlIHV2cyBoYXZlIG5vdCB1cGRhdGVkIHRoZW4gbm8gcG9pbnQgcmVuZGVyaW5nIGp1c3QgeWV0IVxuICAgIGlmICghc3ByaXRlLnRleHR1cmUuX3V2cylcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAgLy8gcHVzaCBhIHRleHR1cmUuXG4gICAgLy8gaW5jcmVtZW50IHRoZSBiYXRjaHNpemVcbiAgICB2YXIgbmV4dFRleHR1cmUgPSAgc3ByaXRlLnRleHR1cmUuYmFzZVRleHR1cmU7XG4gICAgdmFyIGN1cnJlbnRHcm91cCA9IHRoaXMuY3VycmVudEdyb3VwO1xuICAgIHZhciBpO1xuXG4gICAgaWYodGhpcy5jdXJyZW50VGV4dHVyZSAhPT0gbmV4dFRleHR1cmUpXG4gICAge1xuICAgICAgICB0aGlzLmN1cnJlbnRUZXh0dXJlID0gbmV4dFRleHR1cmU7XG4gICAgICAgIFxuICAgICAgICBpZighbmV4dFRleHR1cmUuX2VuYWJsZWQpXG4gICAgICAgIHtcbiAgICAgICAgICAgIG5leHRUZXh0dXJlLl9lbmFibGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIG5leHRUZXh0dXJlLl9pZCA9IHRoaXMudGV4dHVyZUNvdW50O1xuICAgICAgICAgICAgXG4gICAgICAgICAgICBpZih0aGlzLnRleHR1cmVDb3VudCA9PT0gdGhpcy5NQVhfVEVYVFVFUylcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBmb3IgKCBpID0gMDsgaSA8IGN1cnJlbnRHcm91cC50ZXh0dXJlQ291bnQ7IGkrKykgXG4gICAgICAgICAgICAgICAgeyAgICAgXG4gICAgICAgICAgICAgICAgICAgIGN1cnJlbnRHcm91cC50ZXh0dXJlc1tpXS5fZW5hYmxlZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICB0aGlzLnRleHR1cmVDb3VudCA9IDA7XG5cbiAgICAgICAgICAgICAgICBjdXJyZW50R3JvdXAuc2l6ZSA9IHRoaXMuY3VycmVudEluZGV4IC0gY3VycmVudEdyb3VwLnN0YXJ0O1xuICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgY3VycmVudEdyb3VwID0gdGhpcy5jdXJyZW50R3JvdXAgPSB0aGlzLmdyb3Vwc1t0aGlzLmdyb3VwQ291bnQrK107XG4gICAgICAgICAgICAgICAgY3VycmVudEdyb3VwLnRleHR1cmVDb3VudCA9IDA7XG4gICAgICAgICAgICAgICAgY3VycmVudEdyb3VwLnN0YXJ0ID0gdGhpcy5jdXJyZW50SW5kZXg7XG4gICAgICAgICAgICAgICAgXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGN1cnJlbnRHcm91cC50ZXh0dXJlc1tjdXJyZW50R3JvdXAudGV4dHVyZUNvdW50KytdID0gbmV4dFRleHR1cmU7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnRleHR1cmVDb3VudCsrO1xuICAgIH1cblxuICAgIC8vIFRPRE8gdHJpbT8/XG4gICAgdmFyIGluZGV4ID0gdGhpcy5jdXJyZW50SW5kZXggKiB0aGlzLnZlcnRCeXRlU2l6ZTtcblxuICAgIHRoaXMuY3VycmVudEluZGV4Kys7XG5cbiAgICAvLyB1cGxvYWQgdGhlIHNwcml0ZSBlbGVtZXRucy4uLlxuICAgIC8vIHRoZXkgaGF2ZSBhbGwgcmVhZHkgYmVlbiBjYWxjdWxhdGVkIHNvIHdlIGp1c3QgbmVlZCB0byBwdXNoIHRoZW0gaW50byB0aGUgYnVmZmVyLlxuICAgIHZhciBjb2xvcnMgPSB0aGlzLmNvbG9ycztcbiAgICB2YXIgcG9zaXRpb25zID0gdGhpcy5wb3NpdGlvbnM7XG4gICAgdmFyIHZlcnRleERhdGEgPSBzcHJpdGUudmVydGV4RGF0YVxuICAgIHZhciB0aW50ID0gKHNwcml0ZS50aW50ID4+IDE2KSArIChzcHJpdGUudGludCAmIDB4ZmYwMCkgKyAoKHNwcml0ZS50aW50ICYgMHhmZikgPDwgMTYpICsgKHNwcml0ZS53b3JsZEFscGhhICogMjU1IDw8IDI0KTtcbiAgICB2YXIgdXZzID0gc3ByaXRlLnRleHR1cmUuX3V2cy51dnNfdWludDMyO1xuICAgIC8veHlcbiAgICBwb3NpdGlvbnNbaW5kZXgrK10gPSB2ZXJ0ZXhEYXRhWzBdO1xuICAgIHBvc2l0aW9uc1tpbmRleCsrXSA9IHZlcnRleERhdGFbMV07XG4gICAgdGhpcy51dnNbaW5kZXgrK10gPSB1dnNbMF07XG4gICAgY29sb3JzW2luZGV4KytdID0gdGludDtcbiAgICBwb3NpdGlvbnNbaW5kZXgrK10gPSBuZXh0VGV4dHVyZS5faWQ7IFxuICAgIFxuICAgIC8vIHh5XG4gICAgcG9zaXRpb25zW2luZGV4KytdID0gdmVydGV4RGF0YVsyXTtcbiAgICBwb3NpdGlvbnNbaW5kZXgrK10gPSB2ZXJ0ZXhEYXRhWzNdO1xuICAgIHRoaXMudXZzW2luZGV4KytdID0gdXZzWzFdO1xuICAgIGNvbG9yc1tpbmRleCsrXSA9IHRpbnQ7XG4gICAgcG9zaXRpb25zW2luZGV4KytdID0gbmV4dFRleHR1cmUuX2lkO1xuXG4gICAgIC8vIHh5XG4gICAgcG9zaXRpb25zW2luZGV4KytdID0gdmVydGV4RGF0YVs0XTtcbiAgICBwb3NpdGlvbnNbaW5kZXgrK10gPSB2ZXJ0ZXhEYXRhWzVdO1xuICAgIHRoaXMudXZzW2luZGV4KytdID0gdXZzWzJdO1xuICAgIGNvbG9yc1tpbmRleCsrXSA9IHRpbnQ7XG4gICAgcG9zaXRpb25zW2luZGV4KytdID0gbmV4dFRleHR1cmUuX2lkO1xuXG4gICAgLy8geHlcbiAgICBwb3NpdGlvbnNbaW5kZXgrK10gPSB2ZXJ0ZXhEYXRhWzZdO1xuICAgIHBvc2l0aW9uc1tpbmRleCsrXSA9IHZlcnRleERhdGFbN107XG4gICAgdGhpcy51dnNbaW5kZXgrK10gPSB1dnNbM107XG4gICAgY29sb3JzW2luZGV4KytdID0gdGludDtcbiAgICBwb3NpdGlvbnNbaW5kZXgrK10gPSBuZXh0VGV4dHVyZS5faWQ7XG59O1xuXG4vKipcbiAqIFJlbmRlcnMgdGhlIGNvbnRlbnQgYW5kIGVtcHRpZXMgdGhlIGN1cnJlbnQgYmF0Y2guXG4gKlxuICovXG5TcHJpdGVSZW5kZXJlci5wcm90b3R5cGUuZmx1c2ggPSBmdW5jdGlvbiAoKVxue1xuICAgIGlmICh0aGlzLmN1cnJlbnRJbmRleCA9PT0gMClyZXR1cm47XG5cbiAgICB2YXIgZ2wgPSB0aGlzLnJlbmRlcmVyLmdsO1xuXG5cbiAgICB0aGlzLmN1cnJlbnRHcm91cC5zaXplID0gdGhpcy5jdXJyZW50SW5kZXggLSB0aGlzLmN1cnJlbnRHcm91cC5zdGFydDtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuY3VycmVudEdyb3VwLnRleHR1cmVDb3VudDsgaSsrKSBcbiAgICB7ICAgICBcbiAgICAgICAgdGhpcy5jdXJyZW50R3JvdXAudGV4dHVyZXNbaV0uX2VuYWJsZWQgPSBmYWxzZTtcbiAgICB9O1xuICAgXG4gICAgLy8gZG8gc29tZSBzbWFydCBhcnJheSBzdHVmZi4uXG4gICAgLy8gZG91YmxlIHNpemUgc28gd2UgZG9udCBhbHdheSBzdWJhcnJheSB0aGUgZWxlbWVudHMuLlxuICAgIC8vIHVwbG9hZCB0aGUgdmVydHMgdG8gdGhlIGJ1ZmZlclxuICAgIGlmICh0aGlzLmN1cnJlbnRCYXRjaFNpemUgPiAoIHRoaXMuc2l6ZSAqIDAuNSApIClcbiAgICB7XG4gICAgICAgIHRoaXMudmVydGV4QnVmZmVyLnVwbG9hZCh0aGlzLnZlcnRpY2VzLCAwLCB0cnVlKTtcbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgLy8gbyBrIC4uIHN1YiBhcnJheSBpcyBTTE9XPj9cbiAgICAgICAgdmFyIHZpZXcgPSB0aGlzLnBvc2l0aW9ucy5zdWJhcnJheSgwLCB0aGlzLmN1cnJlbnRJbmRleCAqIHRoaXMudmVydEJ5dGVTaXplKTtcbiAgICAgICAgdGhpcy52ZXJ0ZXhCdWZmZXIudXBsb2FkKHZpZXcsIDAsIHRydWUpO1xuICAgIH1cblxuICAgIC8vIGJpbmQgc2hhZGVyLi5cbiAgICB0aGlzLnJlbmRlcmVyLmJpbmRTaGFkZXIodGhpcy5fc2hhZGVyKTtcbiAgICB0aGlzLnJlbmRlcmVyLmJsZW5kTW9kZU1hbmFnZXIuc2V0QmxlbmRNb2RlKCAwICk7XG5cbiAgICAvLy8gcmVuZGVyIHRoZSBncm91cHMuLlxuICAgIGZvciAoaSA9IDA7IGkgPCB0aGlzLmdyb3VwQ291bnQ7IGkrKykge1xuICAgICAgICBcbiAgICAgICAgdmFyIGdyb3VwID0gdGhpcy5ncm91cHNbaV07XG5cbiAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBncm91cC50ZXh0dXJlQ291bnQ7IGorKykge1xuICAgICAgICAgICAgdGhpcy5yZW5kZXJlci5iaW5kVGV4dHVyZShncm91cC50ZXh0dXJlc1tqXSwgaik7XG4gICAgICAgIH07XG5cbiAgICAgICAgZ2wuZHJhd0VsZW1lbnRzKGdsLlRSSUFOR0xFUywgZ3JvdXAuc2l6ZSAqIDYsIGdsLlVOU0lHTkVEX1NIT1JULCBncm91cC5zdGFydCAqIDYgKiAyKTtcbiAgICB9O1xuXG4gICAgLy8gcmVzZXQgZWxlbWVudHMgZm9yIHRoZSBuZXh0IGZsdXNoXG4gICAgdGhpcy5jdXJyZW50VGV4dHVyZSA9IG51bGw7XG4gICAgdGhpcy5jdXJyZW50SW5kZXggPSAwO1xuICAgIHRoaXMudGV4dHVyZUNvdW50ID0gMDtcbiAgICB0aGlzLmdyb3VwQ291bnQgPSAwO1xuICAgIFxuICAgIHRoaXMuY3VycmVudEdyb3VwID0gdGhpcy5ncm91cHNbdGhpcy5ncm91cENvdW50KytdO1xuICAgIHRoaXMuY3VycmVudEdyb3VwLnRleHR1cmVDb3VudCA9IDA7XG59O1xuXG4vKipcbiAqIFN0YXJ0cyBhIG5ldyBzcHJpdGUgYmF0Y2guXG4gKlxuICovXG5TcHJpdGVSZW5kZXJlci5wcm90b3R5cGUuc3RhcnQgPSBmdW5jdGlvbiAoKVxue1xuICAgIHRoaXMudmFvLmJpbmQoKTtcbn07XG5cblNwcml0ZVJlbmRlcmVyLnByb3RvdHlwZS5zdG9wID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLmZsdXNoKCk7XG4gICAgdGhpcy52YW8udW5iaW5kKCk7XG59O1xuLyoqXG4gKiBEZXN0cm95cyB0aGUgU3ByaXRlQmF0Y2guXG4gKlxuICovXG5TcHJpdGVSZW5kZXJlci5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy52ZXJ0ZXhCdWZmZXIuZGVzdHJveSgpO1xuICAgIHRoaXMuaW5kZXhCdWZmZXIuZGVzdHJveSgpO1xuXG4gICAgT2JqZWN0UmVuZGVyZXIucHJvdG90eXBlLmRlc3Ryb3kuY2FsbCh0aGlzKTtcblxuICAgIHRoaXMuc2hhZGVyLmRlc3Ryb3koKTtcblxuICAgIHRoaXMucmVuZGVyZXIgPSBudWxsO1xuXG4gICAgdGhpcy52ZXJ0aWNlcyA9IG51bGw7XG4gICAgdGhpcy5wb3NpdGlvbnMgPSBudWxsO1xuICAgIHRoaXMuY29sb3JzID0gbnVsbDtcbiAgICB0aGlzLmluZGljZXMgPSBudWxsO1xuXG4gICAgdGhpcy52ZXJ0ZXhCdWZmZXIgPSBudWxsO1xuICAgIHRoaXMuaW5kZXhCdWZmZXIgPSBudWxsO1xuXG4gICAgdGhpcy5zcHJpdGVzID0gbnVsbDtcbiAgICB0aGlzLnNoYWRlciA9IG51bGw7XG59O1xuIiwidmFyIFNoYWRlciA9IHJlcXVpcmUoJ3BpeGktZ2wtY29yZScpLkdMU2hhZGVyO1xuXG5cbmZ1bmN0aW9uIGdlbmVyYXRlTXVsdGlUZXh0dXJlU2hhZGVyKGdsLCBtYXhUZXh0dXJlcylcbntcbiAgICB2YXIgdmVydGV4U3JjID0gXCJwcmVjaXNpb24gbG93cCBmbG9hdDtcXG5hdHRyaWJ1dGUgdmVjMiBhVmVydGV4UG9zaXRpb247XFxuYXR0cmlidXRlIHZlYzIgYVRleHR1cmVDb29yZDtcXG5hdHRyaWJ1dGUgdmVjNCBhQ29sb3I7XFxuYXR0cmlidXRlIGZsb2F0IGFUZXh0dXJlSWQ7XFxuXFxudW5pZm9ybSBtYXQzIHByb2plY3Rpb25NYXRyaXg7XFxuXFxudmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7XFxudmFyeWluZyB2ZWM0IHZDb2xvcjtcXG52YXJ5aW5nIGZsb2F0IHZUZXh0dXJlSWQ7XFxuXFxudm9pZCBtYWluKHZvaWQpe1xcbiAgIGdsX1Bvc2l0aW9uID0gdmVjNCgocHJvamVjdGlvbk1hdHJpeCAqIHZlYzMoYVZlcnRleFBvc2l0aW9uLCAxLjApKS54eSwgMC4wLCAxLjApO1xcbiAgIHZUZXh0dXJlQ29vcmQgPSBhVGV4dHVyZUNvb3JkO1xcbiAgIHZUZXh0dXJlSWQgPSBhVGV4dHVyZUlkO1xcbiAgIHZDb2xvciA9IHZlYzQoYUNvbG9yLnJnYiAqIGFDb2xvci5hLCBhQ29sb3IuYSk7XFxufVwiO1xuICAgIHZhciBmcmFnbWVudFNyYyA9ICdwcmVjaXNpb24gbG93cCBmbG9hdDtcXG5cXG4nICsgZ2VuZXJhdGVTYW1wbGVTcmMobWF4VGV4dHVyZXMpICsgXCJcXG5cXG5cIiArIGZyYWdUZW1wbGF0ZVxuXG4gICAgZnJhZ21lbnRTcmMgPSBmcmFnbWVudFNyYy5yZXBsYWNlKC9cXCVcXCUvZ2ksICcxNicpO1xuXG4gICAgdmFyIHNoYWRlciA9IG5ldyBTaGFkZXIoZ2wsIHZlcnRleFNyYywgZnJhZ21lbnRTcmMpO1xuXG5cbiAgICB2YXIgc2FtcGxlVmFsdWVzID0gW107XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBtYXhUZXh0dXJlczsgaSsrKSB7XG4gICAgICAgIHNhbXBsZVZhbHVlc1tpXSA9IGk7XG4gICAgfTtcblxuICAgIHNoYWRlci5iaW5kKCk7XG4gICAgc2hhZGVyLnVuaWZvcm1zLnVTYW1wbGVycyA9IHNhbXBsZVZhbHVlcztcblxuICAgIHJldHVybiBzaGFkZXI7XG59XG5cbmZ1bmN0aW9uIGdlbmVyYXRlU2FtcGxlU3JjKG1heFRleHR1cmVzKVxue1xuICAgIHZhciBzcmMgPSAndmVjNCBnZXRTYW1wbGVGcm9tQXJyYXkoc2FtcGxlcjJEIHRleHR1cmVzWyUlXSwgaW50IG5keCwgdmVjMiB1dikge1xcblxcbnZlYzQgY29sb3I7J1xuXG4gICAgc3JjICs9ICdcXG4nO1xuICAgIHNyYyArPSAnXFxuJztcbiAgICBcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG1heFRleHR1cmVzOyBpKyspIFxuICAgIHtcbiAgICAgICAgaWYoaSA+IDApc3JjICs9ICdcXG5lbHNlICc7XG4gICAgICAgIGlmKGkgPCBtYXhUZXh0dXJlcy0xKXNyYyArPSAnaWYobmR4ID09ICcgKyBpICsgJyknO1xuICAgICAgICBzcmMgKz0gJ1xcbnsnO1xuICAgICAgICBzcmMgKz0gJ1xcblxcdGNvbG9yID0gdGV4dHVyZTJEKHRleHR1cmVzWycraSsnXSwgdXYpOyc7XG4gICAgICAgIHNyYyArPSAnXFxufSc7XG4gICAgfTtcblxuICAgIHNyYyArPSAnXFxuJztcbiAgICBzcmMgKz0gJ1xcbic7XG4gICAgc3JjICs9ICdyZXR1cm4gY29sb3I7JztcbiAgICBzcmMgKz0gJ1xcbn0nO1xuXG4gICAgcmV0dXJuIHNyYztcbn1cblxudmFyIGZyYWdUZW1wbGF0ZSA9IFtcblxuICAgICd2YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDsnLFxuICAgICd2YXJ5aW5nIHZlYzQgdkNvbG9yOycsXG4gICAgJ3ZhcnlpbmcgZmxvYXQgdlRleHR1cmVJZDsnLFxuICAgICd1bmlmb3JtIHNhbXBsZXIyRCB1U2FtcGxlcnNbJSVdOycsXG5cbiAgICAndm9pZCBtYWluKHZvaWQpeycsXG4gICAgICAgICdnbF9GcmFnQ29sb3IgPSBnZXRTYW1wbGVGcm9tQXJyYXkodVNhbXBsZXJzLCBpbnQodlRleHR1cmVJZCksIHZUZXh0dXJlQ29vcmQpICogdkNvbG9yOycsXG4gICAgJ30nXG5dLmpvaW4oJ1xcbicpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGdlbmVyYXRlTXVsdGlUZXh0dXJlU2hhZGVyO1xuIiwidmFyIFNwcml0ZSA9IHJlcXVpcmUoJy4uL3Nwcml0ZXMvU3ByaXRlJyksXG4gICAgVGV4dHVyZSA9IHJlcXVpcmUoJy4uL3RleHR1cmVzL1RleHR1cmUnKSxcbiAgICBtYXRoID0gcmVxdWlyZSgnLi4vbWF0aCcpLFxuICAgIHV0aWxzID0gcmVxdWlyZSgnLi4vdXRpbHMnKSxcbiAgICBDT05TVCA9IHJlcXVpcmUoJy4uL2NvbnN0Jyk7XG5cbi8qKlxuICogQSBUZXh0IE9iamVjdCB3aWxsIGNyZWF0ZSBhIGxpbmUgb3IgbXVsdGlwbGUgbGluZXMgb2YgdGV4dC4gVG8gc3BsaXQgYSBsaW5lIHlvdSBjYW4gdXNlICdcXG4nIGluIHlvdXIgdGV4dCBzdHJpbmcsXG4gKiBvciBhZGQgYSB3b3JkV3JhcCBwcm9wZXJ0eSBzZXQgdG8gdHJ1ZSBhbmQgYW5kIHdvcmRXcmFwV2lkdGggcHJvcGVydHkgd2l0aCBhIHZhbHVlIGluIHRoZSBzdHlsZSBvYmplY3QuXG4gKlxuICogQSBUZXh0IGNhbiBiZSBjcmVhdGVkIGRpcmVjdGx5IGZyb20gYSBzdHJpbmcgYW5kIGEgc3R5bGUgb2JqZWN0XG4gKlxuICogYGBganNcbiAqIHZhciB0ZXh0ID0gbmV3IFBJWEkuVGV4dCgnVGhpcyBpcyBhIHBpeGkgdGV4dCcse2ZvbnQgOiAnMjRweCBBcmlhbCcsIGZpbGwgOiAweGZmMTAxMCwgYWxpZ24gOiAnY2VudGVyJ30pO1xuICogYGBgXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLlNwcml0ZVxuICogQG1lbWJlcm9mIFBJWElcbiAqIEBwYXJhbSB0ZXh0IHtzdHJpbmd9IFRoZSBjb3B5IHRoYXQgeW91IHdvdWxkIGxpa2UgdGhlIHRleHQgdG8gZGlzcGxheVxuICogQHBhcmFtIFtzdHlsZV0ge29iamVjdH0gVGhlIHN0eWxlIHBhcmFtZXRlcnNcbiAqIEBwYXJhbSBbc3R5bGUuZm9udF0ge3N0cmluZ30gZGVmYXVsdCAnYm9sZCAyMHB4IEFyaWFsJyBUaGUgc3R5bGUgYW5kIHNpemUgb2YgdGhlIGZvbnRcbiAqIEBwYXJhbSBbc3R5bGUuZmlsbD0nYmxhY2snXSB7U3RyaW5nfE51bWJlcn0gQSBjYW52YXMgZmlsbHN0eWxlIHRoYXQgd2lsbCBiZSB1c2VkIG9uIHRoZSB0ZXh0IGUuZyAncmVkJywgJyMwMEZGMDAnXG4gKiBAcGFyYW0gW3N0eWxlLmFsaWduPSdsZWZ0J10ge3N0cmluZ30gQWxpZ25tZW50IGZvciBtdWx0aWxpbmUgdGV4dCAoJ2xlZnQnLCAnY2VudGVyJyBvciAncmlnaHQnKSwgZG9lcyBub3QgYWZmZWN0IHNpbmdsZSBsaW5lIHRleHRcbiAqIEBwYXJhbSBbc3R5bGUuc3Ryb2tlXSB7U3RyaW5nfE51bWJlcn0gQSBjYW52YXMgZmlsbHN0eWxlIHRoYXQgd2lsbCBiZSB1c2VkIG9uIHRoZSB0ZXh0IHN0cm9rZSBlLmcgJ2JsdWUnLCAnI0ZDRkYwMCdcbiAqIEBwYXJhbSBbc3R5bGUuc3Ryb2tlVGhpY2tuZXNzPTBdIHtudW1iZXJ9IEEgbnVtYmVyIHRoYXQgcmVwcmVzZW50cyB0aGUgdGhpY2tuZXNzIG9mIHRoZSBzdHJva2UuIERlZmF1bHQgaXMgMCAobm8gc3Ryb2tlKVxuICogQHBhcmFtIFtzdHlsZS53b3JkV3JhcD1mYWxzZV0ge2Jvb2xlYW59IEluZGljYXRlcyBpZiB3b3JkIHdyYXAgc2hvdWxkIGJlIHVzZWRcbiAqIEBwYXJhbSBbc3R5bGUud29yZFdyYXBXaWR0aD0xMDBdIHtudW1iZXJ9IFRoZSB3aWR0aCBhdCB3aGljaCB0ZXh0IHdpbGwgd3JhcCwgaXQgbmVlZHMgd29yZFdyYXAgdG8gYmUgc2V0IHRvIHRydWVcbiAqIEBwYXJhbSBbc3R5bGUubGluZUhlaWdodF0ge251bWJlcn0gVGhlIGxpbmUgaGVpZ2h0LCBhIG51bWJlciB0aGF0IHJlcHJlc2VudHMgdGhlIHZlcnRpY2FsIHNwYWNlIHRoYXQgYSBsZXR0ZXIgdXNlc1xuICogQHBhcmFtIFtzdHlsZS5kcm9wU2hhZG93PWZhbHNlXSB7Ym9vbGVhbn0gU2V0IGEgZHJvcCBzaGFkb3cgZm9yIHRoZSB0ZXh0XG4gKiBAcGFyYW0gW3N0eWxlLmRyb3BTaGFkb3dDb2xvcj0nIzAwMDAwMCddIHtzdHJpbmd9IEEgZmlsbCBzdHlsZSB0byBiZSB1c2VkIG9uIHRoZSBkcm9wc2hhZG93IGUuZyAncmVkJywgJyMwMEZGMDAnXG4gKiBAcGFyYW0gW3N0eWxlLmRyb3BTaGFkb3dBbmdsZT1NYXRoLlBJLzRdIHtudW1iZXJ9IFNldCBhIGFuZ2xlIG9mIHRoZSBkcm9wIHNoYWRvd1xuICogQHBhcmFtIFtzdHlsZS5kcm9wU2hhZG93RGlzdGFuY2U9NV0ge251bWJlcn0gU2V0IGEgZGlzdGFuY2Ugb2YgdGhlIGRyb3Agc2hhZG93XG4gKiBAcGFyYW0gW3N0eWxlLmRyb3BTaGFkb3dCbHVyPTBdIHtudW1iZXJ9IFNldCBhIHNoYWRvdyBibHVyIHJhZGl1c1xuICogQHBhcmFtIFtzdHlsZS5wYWRkaW5nPTBdIHtudW1iZXJ9IE9jY2FzaW9uYWxseSBzb21lIGZvbnRzIGFyZSBjcm9wcGVkIG9uIHRvcCBvciBib3R0b20uIEFkZGluZyBzb21lIHBhZGRpbmcgd2lsbFxuICogICAgICBwcmV2ZW50IHRoaXMgZnJvbSBoYXBwZW5pbmcgYnkgYWRkaW5nIHBhZGRpbmcgdG8gdGhlIHRvcCBhbmQgYm90dG9tIG9mIHRleHQgaGVpZ2h0LlxuICogQHBhcmFtIFtzdHlsZS50ZXh0QmFzZWxpbmU9J2FscGhhYmV0aWMnXSB7c3RyaW5nfSBUaGUgYmFzZWxpbmUgb2YgdGhlIHRleHQgdGhhdCBpcyByZW5kZXJlZC5cbiAqIEBwYXJhbSBbc3R5bGUubGluZUpvaW49J21pdGVyJ10ge3N0cmluZ30gVGhlIGxpbmVKb2luIHByb3BlcnR5IHNldHMgdGhlIHR5cGUgb2YgY29ybmVyIGNyZWF0ZWQsIGl0IGNhbiByZXNvbHZlXG4gKiAgICAgIHNwaWtlZCB0ZXh0IGlzc3Vlcy4gRGVmYXVsdCBpcyAnbWl0ZXInIChjcmVhdGVzIGEgc2hhcnAgY29ybmVyKS5cbiAqIEBwYXJhbSBbc3R5bGUubWl0ZXJMaW1pdD0xMF0ge251bWJlcn0gVGhlIG1pdGVyIGxpbWl0IHRvIHVzZSB3aGVuIHVzaW5nIHRoZSAnbWl0ZXInIGxpbmVKb2luIG1vZGUuIFRoaXMgY2FuIHJlZHVjZVxuICogICAgICBvciBpbmNyZWFzZSB0aGUgc3Bpa2luZXNzIG9mIHJlbmRlcmVkIHRleHQuXG4gKi9cbmZ1bmN0aW9uIFRleHQodGV4dCwgc3R5bGUsIHJlc29sdXRpb24pXG57XG4gICAgLyoqXG4gICAgICogVGhlIGNhbnZhcyBlbGVtZW50IHRoYXQgZXZlcnl0aGluZyBpcyBkcmF3biB0b1xuICAgICAqXG4gICAgICogQG1lbWJlciB7SFRNTENhbnZhc0VsZW1lbnR9XG4gICAgICovXG4gICAgdGhpcy5jYW52YXMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdjYW52YXMnKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBjYW52YXMgMmQgY29udGV4dCB0aGF0IGV2ZXJ5dGhpbmcgaXMgZHJhd24gd2l0aFxuICAgICAqIEBtZW1iZXIge0hUTUxDYW52YXNFbGVtZW50fVxuICAgICAqL1xuICAgIHRoaXMuY29udGV4dCA9IHRoaXMuY2FudmFzLmdldENvbnRleHQoJzJkJyk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgcmVzb2x1dGlvbiBvZiB0aGUgY2FudmFzLlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLnJlc29sdXRpb24gPSByZXNvbHV0aW9uIHx8IENPTlNULlJFU09MVVRJT047XG5cbiAgICAvKipcbiAgICAgKiBQcml2YXRlIHRyYWNrZXIgZm9yIHRoZSBjdXJyZW50IHRleHQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtzdHJpbmd9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl90ZXh0ID0gbnVsbDtcblxuICAgIC8qKlxuICAgICAqIFByaXZhdGUgdHJhY2tlciBmb3IgdGhlIGN1cnJlbnQgc3R5bGUuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtvYmplY3R9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9zdHlsZSA9IG51bGw7XG5cbiAgICB2YXIgdGV4dHVyZSA9IFRleHR1cmUuZnJvbUNhbnZhcyh0aGlzLmNhbnZhcyk7XG4gICAgdGV4dHVyZS50cmltID0gbmV3IG1hdGguUmVjdGFuZ2xlKCk7XG4gICAgU3ByaXRlLmNhbGwodGhpcywgdGV4dHVyZSk7XG5cbiAgICB0aGlzLnRleHQgPSB0ZXh0O1xuICAgIHRoaXMuc3R5bGUgPSBzdHlsZTtcbn1cblxuLy8gY29uc3RydWN0b3JcblRleHQucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShTcHJpdGUucHJvdG90eXBlKTtcblRleHQucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gVGV4dDtcbm1vZHVsZS5leHBvcnRzID0gVGV4dDtcblxuVGV4dC5mb250UHJvcGVydGllc0NhY2hlID0ge307XG5UZXh0LmZvbnRQcm9wZXJ0aWVzQ2FudmFzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnY2FudmFzJyk7XG5UZXh0LmZvbnRQcm9wZXJ0aWVzQ29udGV4dCA9IFRleHQuZm9udFByb3BlcnRpZXNDYW52YXMuZ2V0Q29udGV4dCgnMmQnKTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoVGV4dC5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBUaGUgd2lkdGggb2YgdGhlIFRleHQsIHNldHRpbmcgdGhpcyB3aWxsIGFjdHVhbGx5IG1vZGlmeSB0aGUgc2NhbGUgdG8gYWNoaWV2ZSB0aGUgdmFsdWUgc2V0XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuVGV4dCNcbiAgICAgKi9cbiAgICB3aWR0aDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmRpcnR5KVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlVGV4dCgpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5zY2FsZS54ICogdGhpcy5fdGV4dHVyZS5fZnJhbWUud2lkdGg7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnNjYWxlLnggPSB2YWx1ZSAvIHRoaXMuX3RleHR1cmUuX2ZyYW1lLndpZHRoO1xuICAgICAgICAgICAgdGhpcy5fd2lkdGggPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBUaGUgaGVpZ2h0IG9mIHRoZSBUZXh0LCBzZXR0aW5nIHRoaXMgd2lsbCBhY3R1YWxseSBtb2RpZnkgdGhlIHNjYWxlIHRvIGFjaGlldmUgdGhlIHZhbHVlIHNldFxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLlRleHQjXG4gICAgICovXG4gICAgaGVpZ2h0OiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgaWYgKHRoaXMuZGlydHkpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdGhpcy51cGRhdGVUZXh0KCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiAgdGhpcy5zY2FsZS55ICogdGhpcy5fdGV4dHVyZS5fZnJhbWUuaGVpZ2h0O1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5zY2FsZS55ID0gdmFsdWUgLyB0aGlzLl90ZXh0dXJlLl9mcmFtZS5oZWlnaHQ7XG4gICAgICAgICAgICB0aGlzLl9oZWlnaHQgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBTZXQgdGhlIHN0eWxlIG9mIHRoZSB0ZXh0XG4gICAgICpcbiAgICAgKiBAcGFyYW0gW3N0eWxlXSB7b2JqZWN0fSBUaGUgc3R5bGUgcGFyYW1ldGVyc1xuICAgICAqIEBwYXJhbSBbc3R5bGUuZm9udD0nYm9sZCAyMHB0IEFyaWFsJ10ge3N0cmluZ30gVGhlIHN0eWxlIGFuZCBzaXplIG9mIHRoZSBmb250XG4gICAgICogQHBhcmFtIFtzdHlsZS5maWxsPSdibGFjayddIHtzdHJpbmd8bnVtYmVyfSBBIGNhbnZhcyBmaWxsc3R5bGUgdGhhdCB3aWxsIGJlIHVzZWQgb24gdGhlIHRleHQgZWcgJ3JlZCcsICcjMDBGRjAwJ1xuICAgICAqIEBwYXJhbSBbc3R5bGUuYWxpZ249J2xlZnQnXSB7c3RyaW5nfSBBbGlnbm1lbnQgZm9yIG11bHRpbGluZSB0ZXh0ICgnbGVmdCcsICdjZW50ZXInIG9yICdyaWdodCcpLCBkb2VzIG5vdCBhZmZlY3Qgc2luZ2xlIGxpbmUgdGV4dFxuICAgICAqIEBwYXJhbSBbc3R5bGUuc3Ryb2tlPSdibGFjayddIHtzdHJpbmd8bnVtYmVyfSBBIGNhbnZhcyBmaWxsc3R5bGUgdGhhdCB3aWxsIGJlIHVzZWQgb24gdGhlIHRleHQgc3Ryb2tlIGVnICdibHVlJywgJyNGQ0ZGMDAnXG4gICAgICogQHBhcmFtIFtzdHlsZS5zdHJva2VUaGlja25lc3M9MF0ge251bWJlcn0gQSBudW1iZXIgdGhhdCByZXByZXNlbnRzIHRoZSB0aGlja25lc3Mgb2YgdGhlIHN0cm9rZS4gRGVmYXVsdCBpcyAwIChubyBzdHJva2UpXG4gICAgICogQHBhcmFtIFtzdHlsZS53b3JkV3JhcD1mYWxzZV0ge2Jvb2xlYW59IEluZGljYXRlcyBpZiB3b3JkIHdyYXAgc2hvdWxkIGJlIHVzZWRcbiAgICAgKiBAcGFyYW0gW3N0eWxlLndvcmRXcmFwV2lkdGg9MTAwXSB7bnVtYmVyfSBUaGUgd2lkdGggYXQgd2hpY2ggdGV4dCB3aWxsIHdyYXBcbiAgICAgKiBAcGFyYW0gW3N0eWxlLmxpbmVIZWlnaHRdIHtudW1iZXJ9IFRoZSBsaW5lIGhlaWdodCwgYSBudW1iZXIgdGhhdCByZXByZXNlbnRzIHRoZSB2ZXJ0aWNhbCBzcGFjZSB0aGF0IGEgbGV0dGVyIHVzZXNcbiAgICAgKiBAcGFyYW0gW3N0eWxlLmRyb3BTaGFkb3c9ZmFsc2VdIHtib29sZWFufSBTZXQgYSBkcm9wIHNoYWRvdyBmb3IgdGhlIHRleHRcbiAgICAgKiBAcGFyYW0gW3N0eWxlLmRyb3BTaGFkb3dDb2xvcj0nIzAwMDAwMCddIHtzdHJpbmd8bnVtYmVyfSBBIGZpbGwgc3R5bGUgdG8gYmUgdXNlZCBvbiB0aGUgZHJvcHNoYWRvdyBlLmcgJ3JlZCcsICcjMDBGRjAwJ1xuICAgICAqIEBwYXJhbSBbc3R5bGUuZHJvcFNoYWRvd0FuZ2xlPU1hdGguUEkvNl0ge251bWJlcn0gU2V0IGEgYW5nbGUgb2YgdGhlIGRyb3Agc2hhZG93XG4gICAgICogQHBhcmFtIFtzdHlsZS5kcm9wU2hhZG93RGlzdGFuY2U9NV0ge251bWJlcn0gU2V0IGEgZGlzdGFuY2Ugb2YgdGhlIGRyb3Agc2hhZG93XG4gICAgICogQHBhcmFtIFtzdHlsZS5kcm9wU2hhZG93Qmx1cj0wXSB7bnVtYmVyfSBTZXQgYSBzaGFkb3cgYmx1ciByYWRpdXNcbiAgICAgKiBAcGFyYW0gW3N0eWxlLnBhZGRpbmc9MF0ge251bWJlcn0gT2NjYXNpb25hbGx5IHNvbWUgZm9udHMgYXJlIGNyb3BwZWQgb24gdG9wIG9yIGJvdHRvbS4gQWRkaW5nIHNvbWUgcGFkZGluZyB3aWxsXG4gICAgICogICAgICBwcmV2ZW50IHRoaXMgZnJvbSBoYXBwZW5pbmcgYnkgYWRkaW5nIHBhZGRpbmcgdG8gdGhlIHRvcCBhbmQgYm90dG9tIG9mIHRleHQgaGVpZ2h0LlxuICAgICAqIEBwYXJhbSBbc3R5bGUudGV4dEJhc2VsaW5lPSdhbHBoYWJldGljJ10ge3N0cmluZ30gVGhlIGJhc2VsaW5lIG9mIHRoZSB0ZXh0IHRoYXQgaXMgcmVuZGVyZWQuXG4gICAgICogQHBhcmFtIFtzdHlsZS5saW5lSm9pbj0nbWl0ZXInXSB7c3RyaW5nfSBUaGUgbGluZUpvaW4gcHJvcGVydHkgc2V0cyB0aGUgdHlwZSBvZiBjb3JuZXIgY3JlYXRlZCwgaXQgY2FuIHJlc29sdmVcbiAgICAgKiAgICAgIHNwaWtlZCB0ZXh0IGlzc3Vlcy4gRGVmYXVsdCBpcyAnbWl0ZXInIChjcmVhdGVzIGEgc2hhcnAgY29ybmVyKS5cbiAgICAgKiBAcGFyYW0gW3N0eWxlLm1pdGVyTGltaXQ9MTBdIHtudW1iZXJ9IFRoZSBtaXRlciBsaW1pdCB0byB1c2Ugd2hlbiB1c2luZyB0aGUgJ21pdGVyJyBsaW5lSm9pbiBtb2RlLiBUaGlzIGNhbiByZWR1Y2VcbiAgICAgKiAgICAgIG9yIGluY3JlYXNlIHRoZSBzcGlraW5lc3Mgb2YgcmVuZGVyZWQgdGV4dC5cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5UZXh0I1xuICAgICAqL1xuICAgIHN0eWxlOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3N0eWxlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uIChzdHlsZSlcbiAgICAgICAge1xuICAgICAgICAgICAgc3R5bGUgPSBzdHlsZSB8fCB7fTtcblxuICAgICAgICAgICAgaWYgKHR5cGVvZiBzdHlsZS5maWxsID09PSAnbnVtYmVyJykge1xuICAgICAgICAgICAgICAgIHN0eWxlLmZpbGwgPSB1dGlscy5oZXgyc3RyaW5nKHN0eWxlLmZpbGwpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAodHlwZW9mIHN0eWxlLnN0cm9rZSA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgICAgICAgICBzdHlsZS5zdHJva2UgPSB1dGlscy5oZXgyc3RyaW5nKHN0eWxlLnN0cm9rZSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICh0eXBlb2Ygc3R5bGUuZHJvcFNoYWRvd0NvbG9yID09PSAnbnVtYmVyJykge1xuICAgICAgICAgICAgICAgIHN0eWxlLmRyb3BTaGFkb3dDb2xvciA9IHV0aWxzLmhleDJzdHJpbmcoc3R5bGUuZHJvcFNoYWRvd0NvbG9yKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgc3R5bGUuZm9udCA9IHN0eWxlLmZvbnQgfHwgJ2JvbGQgMjBwdCBBcmlhbCc7XG4gICAgICAgICAgICBzdHlsZS5maWxsID0gc3R5bGUuZmlsbCB8fCAnYmxhY2snO1xuICAgICAgICAgICAgc3R5bGUuYWxpZ24gPSBzdHlsZS5hbGlnbiB8fCAnbGVmdCc7XG4gICAgICAgICAgICBzdHlsZS5zdHJva2UgPSBzdHlsZS5zdHJva2UgfHwgJ2JsYWNrJzsgLy9wcm92aWRlIGEgZGVmYXVsdCwgc2VlOiBodHRwczovL2dpdGh1Yi5jb20vcGl4aWpzL3BpeGkuanMvaXNzdWVzLzEzNlxuICAgICAgICAgICAgc3R5bGUuc3Ryb2tlVGhpY2tuZXNzID0gc3R5bGUuc3Ryb2tlVGhpY2tuZXNzIHx8IDA7XG4gICAgICAgICAgICBzdHlsZS53b3JkV3JhcCA9IHN0eWxlLndvcmRXcmFwIHx8IGZhbHNlO1xuICAgICAgICAgICAgc3R5bGUud29yZFdyYXBXaWR0aCA9IHN0eWxlLndvcmRXcmFwV2lkdGggfHwgMTAwO1xuXG4gICAgICAgICAgICBzdHlsZS5kcm9wU2hhZG93ID0gc3R5bGUuZHJvcFNoYWRvdyB8fCBmYWxzZTtcbiAgICAgICAgICAgIHN0eWxlLmRyb3BTaGFkb3dDb2xvciA9IHN0eWxlLmRyb3BTaGFkb3dDb2xvciB8fCAnIzAwMDAwMCc7XG4gICAgICAgICAgICBzdHlsZS5kcm9wU2hhZG93QW5nbGUgPSBzdHlsZS5kcm9wU2hhZG93QW5nbGUgIT09IHVuZGVmaW5lZCA/IHN0eWxlLmRyb3BTaGFkb3dBbmdsZSA6IE1hdGguUEkgLyA2O1xuICAgICAgICAgICAgc3R5bGUuZHJvcFNoYWRvd0Rpc3RhbmNlID0gc3R5bGUuZHJvcFNoYWRvd0Rpc3RhbmNlICE9PSB1bmRlZmluZWQgPyBzdHlsZS5kcm9wU2hhZG93RGlzdGFuY2UgOiA1O1xuICAgICAgICAgICAgc3R5bGUuZHJvcFNoYWRvd0JsdXIgPSBzdHlsZS5kcm9wU2hhZG93Qmx1ciAhPT0gdW5kZWZpbmVkID8gc3R5bGUuZHJvcFNoYWRvd0JsdXIgOiAwOyAvL3NoYWRvd0JsdXIgaXMgJzAnIGJ5IGRlZmF1bHQgYWNjb3JkaW5nIHRvIEhUTUxcblxuICAgICAgICAgICAgc3R5bGUucGFkZGluZyA9IHN0eWxlLnBhZGRpbmcgfHwgMDtcblxuICAgICAgICAgICAgc3R5bGUudGV4dEJhc2VsaW5lID0gc3R5bGUudGV4dEJhc2VsaW5lIHx8ICdhbHBoYWJldGljJztcblxuICAgICAgICAgICAgc3R5bGUubGluZUpvaW4gPSBzdHlsZS5saW5lSm9pbiB8fCAnbWl0ZXInO1xuICAgICAgICAgICAgc3R5bGUubWl0ZXJMaW1pdCA9IHN0eWxlLm1pdGVyTGltaXQgfHwgMTA7XG5cbiAgICAgICAgICAgIHRoaXMuX3N0eWxlID0gc3R5bGU7XG4gICAgICAgICAgICB0aGlzLmRpcnR5ID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBTZXQgdGhlIGNvcHkgZm9yIHRoZSB0ZXh0IG9iamVjdC4gVG8gc3BsaXQgYSBsaW5lIHlvdSBjYW4gdXNlICdcXG4nLlxuICAgICAqXG4gICAgICogQHBhcmFtIHRleHQge3N0cmluZ30gVGhlIGNvcHkgdGhhdCB5b3Ugd291bGQgbGlrZSB0aGUgdGV4dCB0byBkaXNwbGF5XG4gICAgICogQG1lbWJlcm9mIFBJWEkuVGV4dCNcbiAgICAgKi9cbiAgICB0ZXh0OiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24oKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fdGV4dDtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodGV4dCl7XG4gICAgICAgICAgICB0ZXh0ID0gdGV4dC50b1N0cmluZygpIHx8ICcgJztcbiAgICAgICAgICAgIGlmICh0aGlzLl90ZXh0ID09PSB0ZXh0KVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuX3RleHQgPSB0ZXh0O1xuICAgICAgICAgICAgdGhpcy5kaXJ0eSA9IHRydWU7XG4gICAgICAgIH1cbiAgICB9XG59KTtcblxuLyoqXG4gKiBSZW5kZXJzIHRleHQgYW5kIHVwZGF0ZXMgaXQgd2hlbiBuZWVkZWRcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5UZXh0LnByb3RvdHlwZS51cGRhdGVUZXh0ID0gZnVuY3Rpb24gKClcbntcbiAgICB2YXIgc3R5bGUgPSB0aGlzLl9zdHlsZTtcbiAgICB0aGlzLmNvbnRleHQuZm9udCA9IHN0eWxlLmZvbnQ7XG5cbiAgICAvLyB3b3JkIHdyYXBcbiAgICAvLyBwcmVzZXJ2ZSBvcmlnaW5hbCB0ZXh0XG4gICAgdmFyIG91dHB1dFRleHQgPSBzdHlsZS53b3JkV3JhcCA/IHRoaXMud29yZFdyYXAodGhpcy5fdGV4dCkgOiB0aGlzLl90ZXh0O1xuXG4gICAgLy8gc3BsaXQgdGV4dCBpbnRvIGxpbmVzXG4gICAgdmFyIGxpbmVzID0gb3V0cHV0VGV4dC5zcGxpdCgvKD86XFxyXFxufFxccnxcXG4pLyk7XG5cbiAgICAvLyBjYWxjdWxhdGUgdGV4dCB3aWR0aFxuICAgIHZhciBsaW5lV2lkdGhzID0gbmV3IEFycmF5KGxpbmVzLmxlbmd0aCk7XG4gICAgdmFyIG1heExpbmVXaWR0aCA9IDA7XG4gICAgdmFyIGZvbnRQcm9wZXJ0aWVzID0gdGhpcy5kZXRlcm1pbmVGb250UHJvcGVydGllcyhzdHlsZS5mb250KTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxpbmVzLmxlbmd0aDsgaSsrKVxuICAgIHtcbiAgICAgICAgdmFyIGxpbmVXaWR0aCA9IHRoaXMuY29udGV4dC5tZWFzdXJlVGV4dChsaW5lc1tpXSkud2lkdGg7XG4gICAgICAgIGxpbmVXaWR0aHNbaV0gPSBsaW5lV2lkdGg7XG4gICAgICAgIG1heExpbmVXaWR0aCA9IE1hdGgubWF4KG1heExpbmVXaWR0aCwgbGluZVdpZHRoKTtcbiAgICB9XG5cbiAgICB2YXIgd2lkdGggPSBtYXhMaW5lV2lkdGggKyBzdHlsZS5zdHJva2VUaGlja25lc3M7XG4gICAgaWYgKHN0eWxlLmRyb3BTaGFkb3cpXG4gICAge1xuICAgICAgICB3aWR0aCArPSBzdHlsZS5kcm9wU2hhZG93RGlzdGFuY2U7XG4gICAgfVxuXG4gICAgdGhpcy5jYW52YXMud2lkdGggPSAoIHdpZHRoICsgdGhpcy5jb250ZXh0LmxpbmVXaWR0aCApICogdGhpcy5yZXNvbHV0aW9uO1xuXG4gICAgLy8gY2FsY3VsYXRlIHRleHQgaGVpZ2h0XG4gICAgdmFyIGxpbmVIZWlnaHQgPSB0aGlzLnN0eWxlLmxpbmVIZWlnaHQgfHwgZm9udFByb3BlcnRpZXMuZm9udFNpemUgKyBzdHlsZS5zdHJva2VUaGlja25lc3M7XG5cbiAgICB2YXIgaGVpZ2h0ID0gbGluZUhlaWdodCAqIGxpbmVzLmxlbmd0aDtcbiAgICBpZiAoc3R5bGUuZHJvcFNoYWRvdylcbiAgICB7XG4gICAgICAgIGhlaWdodCArPSBzdHlsZS5kcm9wU2hhZG93RGlzdGFuY2U7XG4gICAgfVxuXG4gICAgdGhpcy5jYW52YXMuaGVpZ2h0ID0gKCBoZWlnaHQgKyB0aGlzLl9zdHlsZS5wYWRkaW5nICogMiApICogdGhpcy5yZXNvbHV0aW9uO1xuXG4gICAgdGhpcy5jb250ZXh0LnNjYWxlKCB0aGlzLnJlc29sdXRpb24sIHRoaXMucmVzb2x1dGlvbik7XG5cbiAgICBpZiAobmF2aWdhdG9yLmlzQ29jb29uSlMpXG4gICAge1xuICAgICAgICB0aGlzLmNvbnRleHQuY2xlYXJSZWN0KDAsIDAsIHRoaXMuY2FudmFzLndpZHRoLCB0aGlzLmNhbnZhcy5oZWlnaHQpO1xuXG4gICAgfVxuXG4gICAgLy90aGlzLmNvbnRleHQuZmlsbFN0eWxlPVwiI0ZGMDAwMFwiO1xuICAgIC8vdGhpcy5jb250ZXh0LmZpbGxSZWN0KDAsIDAsIHRoaXMuY2FudmFzLndpZHRoLCB0aGlzLmNhbnZhcy5oZWlnaHQpO1xuXG4gICAgdGhpcy5jb250ZXh0LmZvbnQgPSBzdHlsZS5mb250O1xuICAgIHRoaXMuY29udGV4dC5zdHJva2VTdHlsZSA9IHN0eWxlLnN0cm9rZTtcbiAgICB0aGlzLmNvbnRleHQubGluZVdpZHRoID0gc3R5bGUuc3Ryb2tlVGhpY2tuZXNzO1xuICAgIHRoaXMuY29udGV4dC50ZXh0QmFzZWxpbmUgPSBzdHlsZS50ZXh0QmFzZWxpbmU7XG4gICAgdGhpcy5jb250ZXh0LmxpbmVKb2luID0gc3R5bGUubGluZUpvaW47XG4gICAgdGhpcy5jb250ZXh0Lm1pdGVyTGltaXQgPSBzdHlsZS5taXRlckxpbWl0O1xuXG4gICAgdmFyIGxpbmVQb3NpdGlvblg7XG4gICAgdmFyIGxpbmVQb3NpdGlvblk7XG5cbiAgICBpZiAoc3R5bGUuZHJvcFNoYWRvdylcbiAgICB7XG4gICAgICAgIGlmIChzdHlsZS5kcm9wU2hhZG93Qmx1ciA+IDApIHtcbiAgICAgICAgICAgIHRoaXMuY29udGV4dC5zaGFkb3dDb2xvciA9IHN0eWxlLmRyb3BTaGFkb3dDb2xvcjtcbiAgICAgICAgICAgIHRoaXMuY29udGV4dC5zaGFkb3dCbHVyID0gc3R5bGUuZHJvcFNoYWRvd0JsdXI7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmNvbnRleHQuZmlsbFN0eWxlID0gc3R5bGUuZHJvcFNoYWRvd0NvbG9yO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIHhTaGFkb3dPZmZzZXQgPSBNYXRoLmNvcyhzdHlsZS5kcm9wU2hhZG93QW5nbGUpICogc3R5bGUuZHJvcFNoYWRvd0Rpc3RhbmNlO1xuICAgICAgICB2YXIgeVNoYWRvd09mZnNldCA9IE1hdGguc2luKHN0eWxlLmRyb3BTaGFkb3dBbmdsZSkgKiBzdHlsZS5kcm9wU2hhZG93RGlzdGFuY2U7XG5cbiAgICAgICAgZm9yIChpID0gMDsgaSA8IGxpbmVzLmxlbmd0aDsgaSsrKVxuICAgICAgICB7XG4gICAgICAgICAgICBsaW5lUG9zaXRpb25YID0gc3R5bGUuc3Ryb2tlVGhpY2tuZXNzIC8gMjtcbiAgICAgICAgICAgIGxpbmVQb3NpdGlvblkgPSAoc3R5bGUuc3Ryb2tlVGhpY2tuZXNzIC8gMiArIGkgKiBsaW5lSGVpZ2h0KSArIGZvbnRQcm9wZXJ0aWVzLmFzY2VudDtcblxuICAgICAgICAgICAgaWYgKHN0eWxlLmFsaWduID09PSAncmlnaHQnKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGxpbmVQb3NpdGlvblggKz0gbWF4TGluZVdpZHRoIC0gbGluZVdpZHRoc1tpXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKHN0eWxlLmFsaWduID09PSAnY2VudGVyJylcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBsaW5lUG9zaXRpb25YICs9IChtYXhMaW5lV2lkdGggLSBsaW5lV2lkdGhzW2ldKSAvIDI7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChzdHlsZS5maWxsKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHRoaXMuY29udGV4dC5maWxsVGV4dChsaW5lc1tpXSwgbGluZVBvc2l0aW9uWCArIHhTaGFkb3dPZmZzZXQsIGxpbmVQb3NpdGlvblkgKyB5U2hhZG93T2Zmc2V0ICsgdGhpcy5fc3R5bGUucGFkZGluZyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvL3NldCBjYW52YXMgdGV4dCBzdHlsZXNcbiAgICB0aGlzLmNvbnRleHQuZmlsbFN0eWxlID0gc3R5bGUuZmlsbDtcblxuICAgIC8vZHJhdyBsaW5lcyBsaW5lIGJ5IGxpbmVcbiAgICBmb3IgKGkgPSAwOyBpIDwgbGluZXMubGVuZ3RoOyBpKyspXG4gICAge1xuICAgICAgICBsaW5lUG9zaXRpb25YID0gc3R5bGUuc3Ryb2tlVGhpY2tuZXNzIC8gMjtcbiAgICAgICAgbGluZVBvc2l0aW9uWSA9IChzdHlsZS5zdHJva2VUaGlja25lc3MgLyAyICsgaSAqIGxpbmVIZWlnaHQpICsgZm9udFByb3BlcnRpZXMuYXNjZW50O1xuXG4gICAgICAgIGlmIChzdHlsZS5hbGlnbiA9PT0gJ3JpZ2h0JylcbiAgICAgICAge1xuICAgICAgICAgICAgbGluZVBvc2l0aW9uWCArPSBtYXhMaW5lV2lkdGggLSBsaW5lV2lkdGhzW2ldO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHN0eWxlLmFsaWduID09PSAnY2VudGVyJylcbiAgICAgICAge1xuICAgICAgICAgICAgbGluZVBvc2l0aW9uWCArPSAobWF4TGluZVdpZHRoIC0gbGluZVdpZHRoc1tpXSkgLyAyO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHN0eWxlLnN0cm9rZSAmJiBzdHlsZS5zdHJva2VUaGlja25lc3MpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuY29udGV4dC5zdHJva2VUZXh0KGxpbmVzW2ldLCBsaW5lUG9zaXRpb25YLCBsaW5lUG9zaXRpb25ZICsgdGhpcy5fc3R5bGUucGFkZGluZyk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoc3R5bGUuZmlsbClcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5jb250ZXh0LmZpbGxUZXh0KGxpbmVzW2ldLCBsaW5lUG9zaXRpb25YLCBsaW5lUG9zaXRpb25ZICsgdGhpcy5fc3R5bGUucGFkZGluZyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLnVwZGF0ZVRleHR1cmUoKTtcbn07XG5cbi8qKlxuICogVXBkYXRlcyB0ZXh0dXJlIHNpemUgYmFzZWQgb24gY2FudmFzIHNpemVcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5UZXh0LnByb3RvdHlwZS51cGRhdGVUZXh0dXJlID0gZnVuY3Rpb24gKClcbntcbiAgICB2YXIgdGV4dHVyZSA9IHRoaXMuX3RleHR1cmU7XG5cbiAgICB0ZXh0dXJlLmJhc2VUZXh0dXJlLmhhc0xvYWRlZCA9IHRydWU7XG4gICAgdGV4dHVyZS5iYXNlVGV4dHVyZS5yZXNvbHV0aW9uID0gdGhpcy5yZXNvbHV0aW9uO1xuXG4gICAgdGV4dHVyZS5iYXNlVGV4dHVyZS53aWR0aCA9IHRoaXMuY2FudmFzLndpZHRoIC8gdGhpcy5yZXNvbHV0aW9uO1xuICAgIHRleHR1cmUuYmFzZVRleHR1cmUuaGVpZ2h0ID0gdGhpcy5jYW52YXMuaGVpZ2h0IC8gdGhpcy5yZXNvbHV0aW9uO1xuICAgIHRleHR1cmUuY3JvcC53aWR0aCA9IHRleHR1cmUuX2ZyYW1lLndpZHRoID0gdGhpcy5jYW52YXMud2lkdGggLyB0aGlzLnJlc29sdXRpb247XG4gICAgdGV4dHVyZS5jcm9wLmhlaWdodCA9IHRleHR1cmUuX2ZyYW1lLmhlaWdodCA9IHRoaXMuY2FudmFzLmhlaWdodCAvIHRoaXMucmVzb2x1dGlvbjtcblxuICAgIHRleHR1cmUudHJpbS54ID0gMDtcbiAgICB0ZXh0dXJlLnRyaW0ueSA9IC10aGlzLl9zdHlsZS5wYWRkaW5nO1xuXG4gICAgdGV4dHVyZS50cmltLndpZHRoID0gdGV4dHVyZS5fZnJhbWUud2lkdGg7XG4gICAgdGV4dHVyZS50cmltLmhlaWdodCA9IHRleHR1cmUuX2ZyYW1lLmhlaWdodCAtIHRoaXMuX3N0eWxlLnBhZGRpbmcqMjtcblxuICAgIHRoaXMuX3dpZHRoID0gdGhpcy5jYW52YXMud2lkdGggLyB0aGlzLnJlc29sdXRpb247XG4gICAgdGhpcy5faGVpZ2h0ID0gdGhpcy5jYW52YXMuaGVpZ2h0IC8gdGhpcy5yZXNvbHV0aW9uO1xuXG4gICAgdGV4dHVyZS5iYXNlVGV4dHVyZS5lbWl0KCd1cGRhdGUnLCAgdGV4dHVyZS5iYXNlVGV4dHVyZSk7XG5cbiAgICB0aGlzLmRpcnR5ID0gZmFsc2U7XG59O1xuXG4vKipcbiAqIFJlbmRlcnMgdGhlIG9iamVjdCB1c2luZyB0aGUgV2ViR0wgcmVuZGVyZXJcbiAqXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcn1cbiAqL1xuVGV4dC5wcm90b3R5cGUucmVuZGVyV2ViR0wgPSBmdW5jdGlvbiAocmVuZGVyZXIpXG57XG4gICAgaWYgKHRoaXMuZGlydHkpXG4gICAge1xuICAgICAgICAvL3RoaXMucmVzb2x1dGlvbiA9IDEvL3JlbmRlcmVyLnJlc29sdXRpb247XG5cbiAgICAgICAgdGhpcy51cGRhdGVUZXh0KCk7XG4gICAgfVxuXG4gICAgU3ByaXRlLnByb3RvdHlwZS5yZW5kZXJXZWJHTC5jYWxsKHRoaXMsIHJlbmRlcmVyKTtcbn07XG5cbi8qKlxuICogUmVuZGVycyB0aGUgb2JqZWN0IHVzaW5nIHRoZSBDYW52YXMgcmVuZGVyZXJcbiAqXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuQ2FudmFzUmVuZGVyZXJ9XG4gKiBAcHJpdmF0ZVxuICovXG5UZXh0LnByb3RvdHlwZS5fcmVuZGVyQ2FudmFzID0gZnVuY3Rpb24gKHJlbmRlcmVyKVxue1xuICAgIGlmICh0aGlzLmRpcnR5KVxuICAgIHtcbiAgICAgLy8gICB0aGlzLnJlc29sdXRpb24gPSAxLy9yZW5kZXJlci5yZXNvbHV0aW9uO1xuXG4gICAgICAgIHRoaXMudXBkYXRlVGV4dCgpO1xuICAgIH1cblxuICAgIFNwcml0ZS5wcm90b3R5cGUuX3JlbmRlckNhbnZhcy5jYWxsKHRoaXMsIHJlbmRlcmVyKTtcbn07XG5cbi8qKlxuICogQ2FsY3VsYXRlcyB0aGUgYXNjZW50LCBkZXNjZW50IGFuZCBmb250U2l6ZSBvZiBhIGdpdmVuIGZvbnRTdHlsZVxuICpcbiAqIEBwYXJhbSBmb250U3R5bGUge29iamVjdH1cbiAqIEBwcml2YXRlXG4gKi9cblRleHQucHJvdG90eXBlLmRldGVybWluZUZvbnRQcm9wZXJ0aWVzID0gZnVuY3Rpb24gKGZvbnRTdHlsZSlcbntcbiAgICB2YXIgcHJvcGVydGllcyA9IFRleHQuZm9udFByb3BlcnRpZXNDYWNoZVtmb250U3R5bGVdO1xuXG4gICAgaWYgKCFwcm9wZXJ0aWVzKVxuICAgIHtcbiAgICAgICAgcHJvcGVydGllcyA9IHt9O1xuXG4gICAgICAgIHZhciBjYW52YXMgPSBUZXh0LmZvbnRQcm9wZXJ0aWVzQ2FudmFzO1xuICAgICAgICB2YXIgY29udGV4dCA9IFRleHQuZm9udFByb3BlcnRpZXNDb250ZXh0O1xuXG4gICAgICAgIGNvbnRleHQuZm9udCA9IGZvbnRTdHlsZTtcblxuICAgICAgICB2YXIgd2lkdGggPSBNYXRoLmNlaWwoY29udGV4dC5tZWFzdXJlVGV4dCgnfE3DiXEnKS53aWR0aCk7XG4gICAgICAgIHZhciBiYXNlbGluZSA9IE1hdGguY2VpbChjb250ZXh0Lm1lYXN1cmVUZXh0KCdNJykud2lkdGgpO1xuICAgICAgICB2YXIgaGVpZ2h0ID0gMiAqIGJhc2VsaW5lO1xuXG4gICAgICAgIGJhc2VsaW5lID0gYmFzZWxpbmUgKiAxLjQgfCAwO1xuXG4gICAgICAgIGNhbnZhcy53aWR0aCA9IHdpZHRoO1xuICAgICAgICBjYW52YXMuaGVpZ2h0ID0gaGVpZ2h0O1xuXG4gICAgICAgIGNvbnRleHQuZmlsbFN0eWxlID0gJyNmMDAnO1xuICAgICAgICBjb250ZXh0LmZpbGxSZWN0KDAsIDAsIHdpZHRoLCBoZWlnaHQpO1xuXG4gICAgICAgIGNvbnRleHQuZm9udCA9IGZvbnRTdHlsZTtcblxuICAgICAgICBjb250ZXh0LnRleHRCYXNlbGluZSA9ICdhbHBoYWJldGljJztcbiAgICAgICAgY29udGV4dC5maWxsU3R5bGUgPSAnIzAwMCc7XG4gICAgICAgIGNvbnRleHQuZmlsbFRleHQoJ3xNw4lxJywgMCwgYmFzZWxpbmUpO1xuXG4gICAgICAgIHZhciBpbWFnZWRhdGEgPSBjb250ZXh0LmdldEltYWdlRGF0YSgwLCAwLCB3aWR0aCwgaGVpZ2h0KS5kYXRhO1xuICAgICAgICB2YXIgcGl4ZWxzID0gaW1hZ2VkYXRhLmxlbmd0aDtcbiAgICAgICAgdmFyIGxpbmUgPSB3aWR0aCAqIDQ7XG5cbiAgICAgICAgdmFyIGksIGo7XG5cbiAgICAgICAgdmFyIGlkeCA9IDA7XG4gICAgICAgIHZhciBzdG9wID0gZmFsc2U7XG5cbiAgICAgICAgLy8gYXNjZW50LiBzY2FuIGZyb20gdG9wIHRvIGJvdHRvbSB1bnRpbCB3ZSBmaW5kIGEgbm9uIHJlZCBwaXhlbFxuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgYmFzZWxpbmU7IGkrKylcbiAgICAgICAge1xuICAgICAgICAgICAgZm9yIChqID0gMDsgaiA8IGxpbmU7IGogKz0gNClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBpZiAoaW1hZ2VkYXRhW2lkeCArIGpdICE9PSAyNTUpXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBzdG9wID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCFzdG9wKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGlkeCArPSBsaW5lO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcHJvcGVydGllcy5hc2NlbnQgPSBiYXNlbGluZSAtIGk7XG5cbiAgICAgICAgaWR4ID0gcGl4ZWxzIC0gbGluZTtcbiAgICAgICAgc3RvcCA9IGZhbHNlO1xuXG4gICAgICAgIC8vIGRlc2NlbnQuIHNjYW4gZnJvbSBib3R0b20gdG8gdG9wIHVudGlsIHdlIGZpbmQgYSBub24gcmVkIHBpeGVsXG4gICAgICAgIGZvciAoaSA9IGhlaWdodDsgaSA+IGJhc2VsaW5lOyBpLS0pXG4gICAgICAgIHtcbiAgICAgICAgICAgIGZvciAoaiA9IDA7IGogPCBsaW5lOyBqICs9IDQpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgaWYgKGltYWdlZGF0YVtpZHggKyBqXSAhPT0gMjU1KVxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgc3RvcCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghc3RvcClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBpZHggLT0gbGluZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHByb3BlcnRpZXMuZGVzY2VudCA9IGkgLSBiYXNlbGluZTtcbiAgICAgICAgcHJvcGVydGllcy5mb250U2l6ZSA9IHByb3BlcnRpZXMuYXNjZW50ICsgcHJvcGVydGllcy5kZXNjZW50O1xuXG4gICAgICAgIFRleHQuZm9udFByb3BlcnRpZXNDYWNoZVtmb250U3R5bGVdID0gcHJvcGVydGllcztcbiAgICB9XG5cbiAgICByZXR1cm4gcHJvcGVydGllcztcbn07XG5cbi8qKlxuICogQXBwbGllcyBuZXdsaW5lcyB0byBhIHN0cmluZyB0byBoYXZlIGl0IG9wdGltYWxseSBmaXQgaW50byB0aGUgaG9yaXpvbnRhbFxuICogYm91bmRzIHNldCBieSB0aGUgVGV4dCBvYmplY3QncyB3b3JkV3JhcFdpZHRoIHByb3BlcnR5LlxuICpcbiAqIEBwYXJhbSB0ZXh0IHtzdHJpbmd9XG4gKiBAcHJpdmF0ZVxuICovXG5UZXh0LnByb3RvdHlwZS53b3JkV3JhcCA9IGZ1bmN0aW9uICh0ZXh0KVxue1xuICAgIC8vIEdyZWVkeSB3cmFwcGluZyBhbGdvcml0aG0gdGhhdCB3aWxsIHdyYXAgd29yZHMgYXMgdGhlIGxpbmUgZ3Jvd3MgbG9uZ2VyXG4gICAgLy8gdGhhbiBpdHMgaG9yaXpvbnRhbCBib3VuZHMuXG4gICAgdmFyIHJlc3VsdCA9ICcnO1xuICAgIHZhciBsaW5lcyA9IHRleHQuc3BsaXQoJ1xcbicpO1xuICAgIHZhciB3b3JkV3JhcFdpZHRoID0gdGhpcy5fc3R5bGUud29yZFdyYXBXaWR0aDtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxpbmVzLmxlbmd0aDsgaSsrKVxuICAgIHtcbiAgICAgICAgdmFyIHNwYWNlTGVmdCA9IHdvcmRXcmFwV2lkdGg7XG4gICAgICAgIHZhciB3b3JkcyA9IGxpbmVzW2ldLnNwbGl0KCcgJyk7XG4gICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgd29yZHMubGVuZ3RoOyBqKyspXG4gICAgICAgIHtcbiAgICAgICAgICAgIHZhciB3b3JkV2lkdGggPSB0aGlzLmNvbnRleHQubWVhc3VyZVRleHQod29yZHNbal0pLndpZHRoO1xuICAgICAgICAgICAgdmFyIHdvcmRXaWR0aFdpdGhTcGFjZSA9IHdvcmRXaWR0aCArIHRoaXMuY29udGV4dC5tZWFzdXJlVGV4dCgnICcpLndpZHRoO1xuICAgICAgICAgICAgaWYgKGogPT09IDAgfHwgd29yZFdpZHRoV2l0aFNwYWNlID4gc3BhY2VMZWZ0KVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIC8vIFNraXAgcHJpbnRpbmcgdGhlIG5ld2xpbmUgaWYgaXQncyB0aGUgZmlyc3Qgd29yZCBvZiB0aGUgbGluZSB0aGF0IGlzXG4gICAgICAgICAgICAgICAgLy8gZ3JlYXRlciB0aGFuIHRoZSB3b3JkIHdyYXAgd2lkdGguXG4gICAgICAgICAgICAgICAgaWYgKGogPiAwKVxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0ICs9ICdcXG4nO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXN1bHQgKz0gd29yZHNbal07XG4gICAgICAgICAgICAgICAgc3BhY2VMZWZ0ID0gd29yZFdyYXBXaWR0aCAtIHdvcmRXaWR0aDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBzcGFjZUxlZnQgLT0gd29yZFdpZHRoV2l0aFNwYWNlO1xuICAgICAgICAgICAgICAgIHJlc3VsdCArPSAnICcgKyB3b3Jkc1tqXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChpIDwgbGluZXMubGVuZ3RoLTEpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJlc3VsdCArPSAnXFxuJztcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xufTtcblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBib3VuZHMgb2YgdGhlIFRleHQgYXMgYSByZWN0YW5nbGUuIFRoZSBib3VuZHMgY2FsY3VsYXRpb24gdGFrZXMgdGhlIHdvcmxkVHJhbnNmb3JtIGludG8gYWNjb3VudC5cbiAqXG4gKiBAcGFyYW0gbWF0cml4IHtQSVhJLk1hdHJpeH0gdGhlIHRyYW5zZm9ybWF0aW9uIG1hdHJpeCBvZiB0aGUgVGV4dFxuICogQHJldHVybiB7UElYSS5SZWN0YW5nbGV9IHRoZSBmcmFtaW5nIHJlY3RhbmdsZVxuICovXG5UZXh0LnByb3RvdHlwZS5nZXRCb3VuZHMgPSBmdW5jdGlvbiAobWF0cml4KVxue1xuICAgIGlmICh0aGlzLmRpcnR5KVxuICAgIHtcbiAgICAgICAgdGhpcy51cGRhdGVUZXh0KCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIFNwcml0ZS5wcm90b3R5cGUuZ2V0Qm91bmRzLmNhbGwodGhpcywgbWF0cml4KTtcbn07XG5cbi8qKlxuICogRGVzdHJveXMgdGhpcyB0ZXh0IG9iamVjdC5cbiAqXG4gKiBAcGFyYW0gW2Rlc3Ryb3lCYXNlVGV4dHVyZT10cnVlXSB7Ym9vbGVhbn0gd2hldGhlciB0byBkZXN0cm95IHRoZSBiYXNlIHRleHR1cmUgYXMgd2VsbFxuICovXG5UZXh0LnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKGRlc3Ryb3lCYXNlVGV4dHVyZSlcbntcbiAgICAvLyBtYWtlIHN1cmUgdG8gcmVzZXQgdGhlIHRoZSBjb250ZXh0IGFuZCBjYW52YXMuLiBkb250IHdhbnQgdGhpcyBoYW5naW5nIGFyb3VuZCBpbiBtZW1vcnkhXG4gICAgdGhpcy5jb250ZXh0ID0gbnVsbDtcbiAgICB0aGlzLmNhbnZhcyA9IG51bGw7XG5cbiAgICB0aGlzLl9zdHlsZSA9IG51bGw7XG5cbiAgICB0aGlzLl90ZXh0dXJlLmRlc3Ryb3koZGVzdHJveUJhc2VUZXh0dXJlID09PSB1bmRlZmluZWQgPyB0cnVlIDogZGVzdHJveUJhc2VUZXh0dXJlKTtcbn07XG4iLCJ2YXIgdXRpbHMgPSByZXF1aXJlKCcuLi91dGlscycpLFxuICAgIENPTlNUID0gcmVxdWlyZSgnLi4vY29uc3QnKSxcbiAgICBFdmVudEVtaXR0ZXIgPSByZXF1aXJlKCdldmVudGVtaXR0ZXIzJyk7XG5cbi8qKlxuICogQSB0ZXh0dXJlIHN0b3JlcyB0aGUgaW5mb3JtYXRpb24gdGhhdCByZXByZXNlbnRzIGFuIGltYWdlLiBBbGwgdGV4dHVyZXMgaGF2ZSBhIGJhc2UgdGV4dHVyZS5cbiAqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gc291cmNlIHtJbWFnZXxDYW52YXN9IHRoZSBzb3VyY2Ugb2JqZWN0IG9mIHRoZSB0ZXh0dXJlLlxuICogQHBhcmFtIFtzY2FsZU1vZGU9UElYSS5TQ0FMRV9NT0RFUy5ERUZBVUxUXSB7bnVtYmVyfSBTZWUge0BsaW5rIFBJWEkuU0NBTEVfTU9ERVN9IGZvciBwb3NzaWJsZSB2YWx1ZXNcbiAqIEBwYXJhbSByZXNvbHV0aW9uIHtudW1iZXJ9IHRoZSByZXNvbHV0aW9uIG9mIHRoZSB0ZXh0dXJlIGZvciBkZXZpY2VzIHdpdGggZGlmZmVyZW50IHBpeGVsIHJhdGlvc1xuICovXG5mdW5jdGlvbiBCYXNlVGV4dHVyZShzb3VyY2UsIHNjYWxlTW9kZSwgcmVzb2x1dGlvbilcbntcbiAgICBFdmVudEVtaXR0ZXIuY2FsbCh0aGlzKTtcblxuICAgIHRoaXMudWlkID0gdXRpbHMudWlkKCk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgUmVzb2x1dGlvbiBvZiB0aGUgdGV4dHVyZS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLnJlc29sdXRpb24gPSByZXNvbHV0aW9uIHx8IDE7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgd2lkdGggb2YgdGhlIGJhc2UgdGV4dHVyZSBzZXQgd2hlbiB0aGUgaW1hZ2UgaGFzIGxvYWRlZFxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEByZWFkT25seVxuICAgICAqL1xuICAgIHRoaXMud2lkdGggPSAxMDA7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgaGVpZ2h0IG9mIHRoZSBiYXNlIHRleHR1cmUgc2V0IHdoZW4gdGhlIGltYWdlIGhhcyBsb2FkZWRcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAcmVhZE9ubHlcbiAgICAgKi9cbiAgICB0aGlzLmhlaWdodCA9IDEwMDtcblxuICAgIC8vIFRPRE8gZG9jc1xuICAgIC8vIHVzZWQgdG8gc3RvcmUgdGhlIGFjdHVhbCBkaW1lbnNpb25zIG9mIHRoZSBzb3VyY2VcbiAgICAvKipcbiAgICAgKiBVc2VkIHRvIHN0b3JlIHRoZSBhY3R1YWwgd2lkdGggb2YgdGhlIHNvdXJjZSBvZiB0aGlzIHRleHR1cmVcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAcmVhZE9ubHlcbiAgICAgKi9cbiAgICB0aGlzLnJlYWxXaWR0aCA9IDEwMDtcbiAgICAvKipcbiAgICAgKiBVc2VkIHRvIHN0b3JlIHRoZSBhY3R1YWwgaGVpZ2h0IG9mIHRoZSBzb3VyY2Ugb2YgdGhpcyB0ZXh0dXJlXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQHJlYWRPbmx5XG4gICAgICovXG4gICAgdGhpcy5yZWFsSGVpZ2h0ID0gMTAwO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHNjYWxlIG1vZGUgdG8gYXBwbHkgd2hlbiBzY2FsaW5nIHRoaXMgdGV4dHVyZVxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IFBJWEkuU0NBTEVfTU9ERVMuTElORUFSXG4gICAgICogQHNlZSBQSVhJLlNDQUxFX01PREVTXG4gICAgICovXG4gICAgdGhpcy5zY2FsZU1vZGUgPSBzY2FsZU1vZGUgfHwgQ09OU1QuU0NBTEVfTU9ERVMuREVGQVVMVDtcblxuICAgIC8qKlxuICAgICAqIFNldCB0byB0cnVlIG9uY2UgdGhlIGJhc2UgdGV4dHVyZSBoYXMgc3VjY2Vzc2Z1bGx5IGxvYWRlZC5cbiAgICAgKlxuICAgICAqIFRoaXMgaXMgbmV2ZXIgdHJ1ZSBpZiB0aGUgdW5kZXJseWluZyBzb3VyY2UgZmFpbHMgdG8gbG9hZCBvciBoYXMgbm8gdGV4dHVyZSBkYXRhLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKiBAcmVhZE9ubHlcbiAgICAgKi9cbiAgICB0aGlzLmhhc0xvYWRlZCA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogU2V0IHRvIHRydWUgaWYgdGhlIHNvdXJjZSBpcyBjdXJyZW50bHkgbG9hZGluZy5cbiAgICAgKlxuICAgICAqIElmIGFuIEltYWdlIHNvdXJjZSBpcyBsb2FkaW5nIHRoZSAnbG9hZGVkJyBvciAnZXJyb3InIGV2ZW50IHdpbGwgYmVcbiAgICAgKiBkaXNwYXRjaGVkIHdoZW4gdGhlIG9wZXJhdGlvbiBlbmRzLiBBbiB1bmRlcnlsaW5nIHNvdXJjZSB0aGF0IGlzXG4gICAgICogaW1tZWRpYXRlbHktYXZhaWxhYmxlIGJ5cGFzc2VzIGxvYWRpbmcgZW50aXJlbHkuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqIEByZWFkb25seVxuICAgICAqL1xuICAgIHRoaXMuaXNMb2FkaW5nID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgaW1hZ2Ugc291cmNlIHRoYXQgaXMgdXNlZCB0byBjcmVhdGUgdGhlIHRleHR1cmUuXG4gICAgICpcbiAgICAgKiBUT0RPOiBNYWtlIHRoaXMgYSBzZXR0ZXIgdGhhdCBjYWxscyBsb2FkU291cmNlKCk7XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtJbWFnZXxDYW52YXN9XG4gICAgICogQHJlYWRvbmx5XG4gICAgICovXG4gICAgdGhpcy5zb3VyY2UgPSBudWxsOyAvLyBzZXQgaW4gbG9hZFNvdXJjZSwgaWYgYXQgYWxsXG5cbiAgICAvKipcbiAgICAgKiBDb250cm9scyBpZiBSR0IgY2hhbm5lbHMgc2hvdWxkIGJlIHByZS1tdWx0aXBsaWVkIGJ5IEFscGhhICAoV2ViR0wgb25seSlcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICogQGRlZmF1bHQgdHJ1ZVxuICAgICAqL1xuICAgIHRoaXMucHJlbXVsdGlwbGllZEFscGhhID0gdHJ1ZTtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge3N0cmluZ31cbiAgICAgKi9cbiAgICB0aGlzLmltYWdlVXJsID0gbnVsbDtcblxuICAgIC8qKlxuICAgICAqIFdldGhlciBvciBub3QgdGhlIHRleHR1cmUgaXMgYSBwb3dlciBvZiB0d28sIHRyeSB0byB1c2UgcG93ZXIgb2YgdHdvIHRleHR1cmVzIGFzIG11Y2ggYXMgeW91IGNhblxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLmlzUG93ZXJPZlR3byA9IGZhbHNlO1xuXG4gICAgLy8gdXNlZCBmb3Igd2ViR0xcblxuICAgIC8qKlxuICAgICAqXG4gICAgICogU2V0IHRoaXMgdG8gdHJ1ZSBpZiBhIG1pcG1hcCBvZiB0aGlzIHRleHR1cmUgbmVlZHMgdG8gYmUgZ2VuZXJhdGVkLiBUaGlzIHZhbHVlIG5lZWRzIHRvIGJlIHNldCBiZWZvcmUgdGhlIHRleHR1cmUgaXMgdXNlZFxuICAgICAqIEFsc28gdGhlIHRleHR1cmUgbXVzdCBiZSBhIHBvd2VyIG9mIHR3byBzaXplIHRvIHdvcmtcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICovXG4gICAgdGhpcy5taXBtYXAgPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIEEgbWFwIG9mIHJlbmRlcmVyIElEcyB0byB3ZWJnbCB0ZXh0dXJlc1xuICAgICAqXG4gICAgICogQG1lbWJlciB7b2JqZWN0PG51bWJlciwgV2ViR0xUZXh0dXJlPn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX2dsVGV4dHVyZXMgPSB7fTtcbiAgICB0aGlzLl9hY3RpdmUgPSBmYWxzZTtcbiAgICB0aGlzLl9pZCA9IDA7XG4gICAgXG4gICAgLy8gaWYgbm8gc291cmNlIHBhc3NlZCBkb24ndCB0cnkgdG8gbG9hZFxuICAgIGlmIChzb3VyY2UpXG4gICAge1xuICAgICAgICB0aGlzLmxvYWRTb3VyY2Uoc291cmNlKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBGaXJlZCB3aGVuIGEgbm90LWltbWVkaWF0ZWx5LWF2YWlsYWJsZSBzb3VyY2UgZmluaXNoZXMgbG9hZGluZy5cbiAgICAgKlxuICAgICAqIEBldmVudCBsb2FkZWRcbiAgICAgKiBAbWVtYmVyb2YgUElYSS5CYXNlVGV4dHVyZSNcbiAgICAgKiBAcHJvdGVjdGVkXG4gICAgICovXG5cbiAgICAvKipcbiAgICAgKiBGaXJlZCB3aGVuIGEgbm90LWltbWVkaWF0ZWx5LWF2YWlsYWJsZSBzb3VyY2UgZmFpbHMgdG8gbG9hZC5cbiAgICAgKlxuICAgICAqIEBldmVudCBlcnJvclxuICAgICAqIEBtZW1iZXJvZiBQSVhJLkJhc2VUZXh0dXJlI1xuICAgICAqIEBwcm90ZWN0ZWRcbiAgICAgKi9cbn1cblxuQmFzZVRleHR1cmUucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShFdmVudEVtaXR0ZXIucHJvdG90eXBlKTtcbkJhc2VUZXh0dXJlLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IEJhc2VUZXh0dXJlO1xubW9kdWxlLmV4cG9ydHMgPSBCYXNlVGV4dHVyZTtcblxuLyoqXG4gKiBVcGRhdGVzIHRoZSB0ZXh0dXJlIG9uIGFsbCB0aGUgd2ViZ2wgcmVuZGVyZXJzLCB0aGlzIGFsc28gYXNzdW1lcyB0aGUgc3JjIGhhcyBjaGFuZ2VkLlxuICpcbiAqIEBmaXJlcyB1cGRhdGVcbiAqL1xuQmFzZVRleHR1cmUucHJvdG90eXBlLnVwZGF0ZSA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy5yZWFsV2lkdGggPSB0aGlzLnNvdXJjZS5uYXR1cmFsV2lkdGggfHwgdGhpcy5zb3VyY2Uud2lkdGg7XG4gICAgdGhpcy5yZWFsSGVpZ2h0ID0gdGhpcy5zb3VyY2UubmF0dXJhbEhlaWdodCB8fCB0aGlzLnNvdXJjZS5oZWlnaHQ7XG5cbiAgICB0aGlzLndpZHRoID0gdGhpcy5yZWFsV2lkdGggLyB0aGlzLnJlc29sdXRpb247XG4gICAgdGhpcy5oZWlnaHQgPSB0aGlzLnJlYWxIZWlnaHQgLyB0aGlzLnJlc29sdXRpb247XG5cbiAgICB0aGlzLmlzUG93ZXJPZlR3byA9IHV0aWxzLmlzUG93ZXJPZlR3byh0aGlzLnJlYWxXaWR0aCwgdGhpcy5yZWFsSGVpZ2h0KTtcblxuICAgIHRoaXMuZW1pdCgndXBkYXRlJywgdGhpcyk7XG59O1xuXG4vKipcbiAqIExvYWQgYSBzb3VyY2UuXG4gKlxuICogSWYgdGhlIHNvdXJjZSBpcyBub3QtaW1tZWRpYXRlbHktYXZhaWxhYmxlLCBzdWNoIGFzIGFuIGltYWdlIHRoYXQgbmVlZHMgdG8gYmVcbiAqIGRvd25sb2FkZWQsIHRoZW4gdGhlICdsb2FkZWQnIG9yICdlcnJvcicgZXZlbnQgd2lsbCBiZSBkaXNwYXRjaGVkIGluIHRoZSBmdXR1cmVcbiAqIGFuZCBgaGFzTG9hZGVkYCB3aWxsIHJlbWFpbiBmYWxzZSBhZnRlciB0aGlzIGNhbGwuXG4gKlxuICogVGhlIGxvZ2ljIHN0YXRlIGFmdGVyIGNhbGxpbmcgYGxvYWRTb3VyY2VgIGRpcmVjdGx5IG9yIGluZGlyZWN0bHkgKGVnLiBgZnJvbUltYWdlYCwgYG5ldyBCYXNlVGV4dHVyZWApIGlzOlxuICpcbiAqICAgICBpZiAodGV4dHVyZS5oYXNMb2FkZWQpXG4ge1xuICogICAgICAgIC8vIHRleHR1cmUgcmVhZHkgZm9yIHVzZVxuICogICAgIH0gZWxzZSBpZiAodGV4dHVyZS5pc0xvYWRpbmcpXG4ge1xuICogICAgICAgIC8vIGxpc3RlbiB0byAnbG9hZGVkJyBhbmQvb3IgJ2Vycm9yJyBldmVudHMgb24gdGV4dHVyZVxuICogICAgIH0gZWxzZSB7XG4gKiAgICAgICAgLy8gbm90IGxvYWRpbmcsIG5vdCBnb2luZyB0byBsb2FkIFVOTEVTUyB0aGUgc291cmNlIGlzIHJlbG9hZGVkXG4gKiAgICAgICAgLy8gKGl0IG1heSBzdGlsbCBtYWtlIHNlbnNlIHRvIGxpc3RlbiB0byB0aGUgZXZlbnRzKVxuICogICAgIH1cbiAqXG4gKiBAcHJvdGVjdGVkXG4gKiBAcGFyYW0gc291cmNlIHtJbWFnZXxDYW52YXN9IHRoZSBzb3VyY2Ugb2JqZWN0IG9mIHRoZSB0ZXh0dXJlLlxuICovXG5CYXNlVGV4dHVyZS5wcm90b3R5cGUubG9hZFNvdXJjZSA9IGZ1bmN0aW9uIChzb3VyY2UpXG57XG4gICAgdmFyIHdhc0xvYWRpbmcgPSB0aGlzLmlzTG9hZGluZztcbiAgICB0aGlzLmhhc0xvYWRlZCA9IGZhbHNlO1xuICAgIHRoaXMuaXNMb2FkaW5nID0gZmFsc2U7XG5cbiAgICBpZiAod2FzTG9hZGluZyAmJiB0aGlzLnNvdXJjZSlcbiAgICB7XG4gICAgICAgIHRoaXMuc291cmNlLm9ubG9hZCA9IG51bGw7XG4gICAgICAgIHRoaXMuc291cmNlLm9uZXJyb3IgPSBudWxsO1xuICAgIH1cblxuICAgIHRoaXMuc291cmNlID0gc291cmNlO1xuXG4gICAgLy8gQXBwbHkgc291cmNlIGlmIGxvYWRlZC4gT3RoZXJ3aXNlIHNldHVwIGFwcHJvcHJpYXRlIGxvYWRpbmcgbW9uaXRvcnMuXG4gICAgaWYgKCh0aGlzLnNvdXJjZS5jb21wbGV0ZSB8fCB0aGlzLnNvdXJjZS5nZXRDb250ZXh0KSAmJiB0aGlzLnNvdXJjZS53aWR0aCAmJiB0aGlzLnNvdXJjZS5oZWlnaHQpXG4gICAge1xuICAgICAgICB0aGlzLl9zb3VyY2VMb2FkZWQoKTtcbiAgICB9XG4gICAgZWxzZSBpZiAoIXNvdXJjZS5nZXRDb250ZXh0KVxuICAgIHtcblxuICAgICAgICAvLyBJbWFnZSBmYWlsIC8gbm90IHJlYWR5XG4gICAgICAgIHRoaXMuaXNMb2FkaW5nID0gdHJ1ZTtcblxuICAgICAgICB2YXIgc2NvcGUgPSB0aGlzO1xuXG4gICAgICAgIHNvdXJjZS5vbmxvYWQgPSBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICBzb3VyY2Uub25sb2FkID0gbnVsbDtcbiAgICAgICAgICAgIHNvdXJjZS5vbmVycm9yID0gbnVsbDtcblxuICAgICAgICAgICAgaWYgKCFzY29wZS5pc0xvYWRpbmcpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBzY29wZS5pc0xvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgICAgIHNjb3BlLl9zb3VyY2VMb2FkZWQoKTtcblxuICAgICAgICAgICAgc2NvcGUuZW1pdCgnbG9hZGVkJywgc2NvcGUpO1xuICAgICAgICB9O1xuXG4gICAgICAgIHNvdXJjZS5vbmVycm9yID0gZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgc291cmNlLm9ubG9hZCA9IG51bGw7XG4gICAgICAgICAgICBzb3VyY2Uub25lcnJvciA9IG51bGw7XG5cbiAgICAgICAgICAgIGlmICghc2NvcGUuaXNMb2FkaW5nKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgc2NvcGUuaXNMb2FkaW5nID0gZmFsc2U7XG4gICAgICAgICAgICBzY29wZS5lbWl0KCdlcnJvcicsIHNjb3BlKTtcbiAgICAgICAgfTtcblxuICAgICAgICAvLyBQZXIgaHR0cDovL3d3dy53My5vcmcvVFIvaHRtbDUvZW1iZWRkZWQtY29udGVudC0wLmh0bWwjdGhlLWltZy1lbGVtZW50XG4gICAgICAgIC8vICAgXCJUaGUgdmFsdWUgb2YgYGNvbXBsZXRlYCBjYW4gdGh1cyBjaGFuZ2Ugd2hpbGUgYSBzY3JpcHQgaXMgZXhlY3V0aW5nLlwiXG4gICAgICAgIC8vIFNvIGNvbXBsZXRlIG5lZWRzIHRvIGJlIHJlLWNoZWNrZWQgYWZ0ZXIgdGhlIGNhbGxiYWNrcyBoYXZlIGJlZW4gYWRkZWQuLlxuICAgICAgICAvLyBOT1RFOiBjb21wbGV0ZSB3aWxsIGJlIHRydWUgaWYgdGhlIGltYWdlIGhhcyBubyBzcmMgc28gYmVzdCB0byBjaGVjayBpZiB0aGUgc3JjIGlzIHNldC5cbiAgICAgICAgaWYgKHNvdXJjZS5jb21wbGV0ZSAmJiBzb3VyY2Uuc3JjKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmlzTG9hZGluZyA9IGZhbHNlO1xuXG4gICAgICAgICAgICAvLyAuLmFuZCBpZiB3ZSdyZSBjb21wbGV0ZSBub3csIG5vIG5lZWQgZm9yIGNhbGxiYWNrc1xuICAgICAgICAgICAgc291cmNlLm9ubG9hZCA9IG51bGw7XG4gICAgICAgICAgICBzb3VyY2Uub25lcnJvciA9IG51bGw7XG5cbiAgICAgICAgICAgIGlmIChzb3VyY2Uud2lkdGggJiYgc291cmNlLmhlaWdodClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9zb3VyY2VMb2FkZWQoKTtcblxuICAgICAgICAgICAgICAgIC8vIElmIGFueSBwcmV2aW91cyBzdWJzY3JpYmVycyBwb3NzaWJsZVxuICAgICAgICAgICAgICAgIGlmICh3YXNMb2FkaW5nKVxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5lbWl0KCdsb2FkZWQnLCB0aGlzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgLy8gSWYgYW55IHByZXZpb3VzIHN1YnNjcmliZXJzIHBvc3NpYmxlXG4gICAgICAgICAgICAgICAgaWYgKHdhc0xvYWRpbmcpXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmVtaXQoJ2Vycm9yJywgdGhpcyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxufTtcblxuLyoqXG4gKiBVc2VkIGludGVybmFsbHkgdG8gdXBkYXRlIHRoZSB3aWR0aCwgaGVpZ2h0LCBhbmQgc29tZSBvdGhlciB0cmFja2luZyB2YXJzIG9uY2VcbiAqIGEgc291cmNlIGhhcyBzdWNjZXNzZnVsbHkgbG9hZGVkLlxuICpcbiAqIEBwcml2YXRlXG4gKi9cbkJhc2VUZXh0dXJlLnByb3RvdHlwZS5fc291cmNlTG9hZGVkID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLmhhc0xvYWRlZCA9IHRydWU7XG4gICAgdGhpcy51cGRhdGUoKTtcbn07XG5cbi8qKlxuICogRGVzdHJveXMgdGhpcyBiYXNlIHRleHR1cmVcbiAqXG4gKi9cbkJhc2VUZXh0dXJlLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKClcbntcbiAgICBpZiAodGhpcy5pbWFnZVVybClcbiAgICB7XG4gICAgICAgIGRlbGV0ZSB1dGlscy5CYXNlVGV4dHVyZUNhY2hlW3RoaXMuaW1hZ2VVcmxdO1xuICAgICAgICBkZWxldGUgdXRpbHMuVGV4dHVyZUNhY2hlW3RoaXMuaW1hZ2VVcmxdO1xuXG4gICAgICAgIHRoaXMuaW1hZ2VVcmwgPSBudWxsO1xuXG4gICAgICAgIGlmICghbmF2aWdhdG9yLmlzQ29jb29uSlMpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuc291cmNlLnNyYyA9ICcnO1xuICAgICAgICB9XG4gICAgfVxuICAgIGVsc2UgaWYgKHRoaXMuc291cmNlICYmIHRoaXMuc291cmNlLl9waXhpSWQpXG4gICAge1xuICAgICAgICBkZWxldGUgdXRpbHMuQmFzZVRleHR1cmVDYWNoZVt0aGlzLnNvdXJjZS5fcGl4aUlkXTtcbiAgICB9XG5cbiAgICB0aGlzLnNvdXJjZSA9IG51bGw7XG5cbiAgICB0aGlzLmRpc3Bvc2UoKTtcbn07XG5cbi8qKlxuICogRnJlZXMgdGhlIHRleHR1cmUgZnJvbSBXZWJHTCBtZW1vcnkgd2l0aG91dCBkZXN0cm95aW5nIHRoaXMgdGV4dHVyZSBvYmplY3QuXG4gKiBUaGlzIG1lYW5zIHlvdSBjYW4gc3RpbGwgdXNlIHRoZSB0ZXh0dXJlIGxhdGVyIHdoaWNoIHdpbGwgdXBsb2FkIGl0IHRvIEdQVVxuICogbWVtb3J5IGFnYWluLlxuICpcbiAqL1xuQmFzZVRleHR1cmUucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKVxue1xuICAgIHRoaXMuZW1pdCgnZGlzcG9zZScsIHRoaXMpO1xuXG4gICAgLy8gdGhpcyBzaG91bGQgbm8gbG9uZ2VyIGJlIG5lZWRlZCwgdGhlIHJlbmRlcmVycyBzaG91bGQgY2xlYW51cCBhbGwgdGhlIGdsIHRleHR1cmVzLlxuICAgIC8vIHRoaXMuX2dsVGV4dHVyZXMgPSB7fTtcbn07XG5cbi8qKlxuICogQ2hhbmdlcyB0aGUgc291cmNlIGltYWdlIG9mIHRoZSB0ZXh0dXJlLlxuICogVGhlIG9yaWdpbmFsIHNvdXJjZSBtdXN0IGJlIGFuIEltYWdlIGVsZW1lbnQuXG4gKlxuICogQHBhcmFtIG5ld1NyYyB7c3RyaW5nfSB0aGUgcGF0aCBvZiB0aGUgaW1hZ2VcbiAqL1xuQmFzZVRleHR1cmUucHJvdG90eXBlLnVwZGF0ZVNvdXJjZUltYWdlID0gZnVuY3Rpb24gKG5ld1NyYylcbntcbiAgICB0aGlzLnNvdXJjZS5zcmMgPSBuZXdTcmM7XG5cbiAgICB0aGlzLmxvYWRTb3VyY2UodGhpcy5zb3VyY2UpO1xufTtcblxuLyoqXG4gKiBIZWxwZXIgZnVuY3Rpb24gdGhhdCBjcmVhdGVzIGEgYmFzZSB0ZXh0dXJlIGZyb20gdGhlIGdpdmVuIGltYWdlIHVybC5cbiAqIElmIHRoZSBpbWFnZSBpcyBub3QgaW4gdGhlIGJhc2UgdGV4dHVyZSBjYWNoZSBpdCB3aWxsIGJlIGNyZWF0ZWQgYW5kIGxvYWRlZC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAcGFyYW0gaW1hZ2VVcmwge3N0cmluZ30gVGhlIGltYWdlIHVybCBvZiB0aGUgdGV4dHVyZVxuICogQHBhcmFtIFtjcm9zc29yaWdpbj0oYXV0byldIHtib29sZWFufSBTaG91bGQgdXNlIGFub255bW91cyBDT1JTPyBEZWZhdWx0cyB0byB0cnVlIGlmIHRoZSBVUkwgaXMgbm90IGEgZGF0YS1VUkkuXG4gKiBAcGFyYW0gW3NjYWxlTW9kZT1QSVhJLlNDQUxFX01PREVTLkRFRkFVTFRdIHtudW1iZXJ9IFNlZSB7QGxpbmsgUElYSS5TQ0FMRV9NT0RFU30gZm9yIHBvc3NpYmxlIHZhbHVlc1xuICogQHJldHVybiBQSVhJLkJhc2VUZXh0dXJlXG4gKi9cbkJhc2VUZXh0dXJlLmZyb21JbWFnZSA9IGZ1bmN0aW9uIChpbWFnZVVybCwgY3Jvc3NvcmlnaW4sIHNjYWxlTW9kZSlcbntcbiAgICB2YXIgYmFzZVRleHR1cmUgPSB1dGlscy5CYXNlVGV4dHVyZUNhY2hlW2ltYWdlVXJsXTtcblxuICAgIGlmIChjcm9zc29yaWdpbiA9PT0gdW5kZWZpbmVkICYmIGltYWdlVXJsLmluZGV4T2YoJ2RhdGE6JykgIT09IDApXG4gICAge1xuICAgICAgICBjcm9zc29yaWdpbiA9IHRydWU7XG4gICAgfVxuXG4gICAgaWYgKCFiYXNlVGV4dHVyZSlcbiAgICB7XG4gICAgICAgIC8vIG5ldyBJbWFnZSgpIGJyZWFrcyB0ZXggbG9hZGluZyBpbiBzb21lIHZlcnNpb25zIG9mIENocm9tZS5cbiAgICAgICAgLy8gU2VlIGh0dHBzOi8vY29kZS5nb29nbGUuY29tL3AvY2hyb21pdW0vaXNzdWVzL2RldGFpbD9pZD0yMzgwNzFcbiAgICAgICAgdmFyIGltYWdlID0gbmV3IEltYWdlKCk7Ly9kb2N1bWVudC5jcmVhdGVFbGVtZW50KCdpbWcnKTtcbiAgICAgICAgaWYgKGNyb3Nzb3JpZ2luKVxuICAgICAgICB7XG4gICAgICAgICAgICBpbWFnZS5jcm9zc09yaWdpbiA9ICcnO1xuICAgICAgICB9XG5cbiAgICAgICAgYmFzZVRleHR1cmUgPSBuZXcgQmFzZVRleHR1cmUoaW1hZ2UsIHNjYWxlTW9kZSk7XG4gICAgICAgIGJhc2VUZXh0dXJlLmltYWdlVXJsID0gaW1hZ2VVcmw7XG5cbiAgICAgICAgaW1hZ2Uuc3JjID0gaW1hZ2VVcmw7XG5cbiAgICAgICAgdXRpbHMuQmFzZVRleHR1cmVDYWNoZVtpbWFnZVVybF0gPSBiYXNlVGV4dHVyZTtcblxuICAgICAgICAvLyBpZiB0aGVyZSBpcyBhbiBAMnggYXQgdGhlIGVuZCBvZiB0aGUgdXJsIHdlIGFyZSBnb2luZyB0byBhc3N1bWUgaXRzIGEgaGlnaHJlcyBpbWFnZVxuICAgICAgICBiYXNlVGV4dHVyZS5yZXNvbHV0aW9uID0gdXRpbHMuZ2V0UmVzb2x1dGlvbk9mVXJsKGltYWdlVXJsKTtcbiAgICB9XG5cbiAgICByZXR1cm4gYmFzZVRleHR1cmU7XG59O1xuXG4vKipcbiAqIEhlbHBlciBmdW5jdGlvbiB0aGF0IGNyZWF0ZXMgYSBiYXNlIHRleHR1cmUgZnJvbSB0aGUgZ2l2ZW4gY2FudmFzIGVsZW1lbnQuXG4gKlxuICogQHN0YXRpY1xuICogQHBhcmFtIGNhbnZhcyB7Q2FudmFzfSBUaGUgY2FudmFzIGVsZW1lbnQgc291cmNlIG9mIHRoZSB0ZXh0dXJlXG4gKiBAcGFyYW0gc2NhbGVNb2RlIHtudW1iZXJ9IFNlZSB7QGxpbmsgUElYSS5TQ0FMRV9NT0RFU30gZm9yIHBvc3NpYmxlIHZhbHVlc1xuICogQHJldHVybiBQSVhJLkJhc2VUZXh0dXJlXG4gKi9cbkJhc2VUZXh0dXJlLmZyb21DYW52YXMgPSBmdW5jdGlvbiAoY2FudmFzLCBzY2FsZU1vZGUpXG57XG4gICAgaWYgKCFjYW52YXMuX3BpeGlJZClcbiAgICB7XG4gICAgICAgIGNhbnZhcy5fcGl4aUlkID0gJ2NhbnZhc18nICsgdXRpbHMudWlkKCk7XG4gICAgfVxuXG4gICAgdmFyIGJhc2VUZXh0dXJlID0gdXRpbHMuQmFzZVRleHR1cmVDYWNoZVtjYW52YXMuX3BpeGlJZF07XG5cbiAgICBpZiAoIWJhc2VUZXh0dXJlKVxuICAgIHtcbiAgICAgICAgYmFzZVRleHR1cmUgPSBuZXcgQmFzZVRleHR1cmUoY2FudmFzLCBzY2FsZU1vZGUpO1xuICAgICAgICB1dGlscy5CYXNlVGV4dHVyZUNhY2hlW2NhbnZhcy5fcGl4aUlkXSA9IGJhc2VUZXh0dXJlO1xuICAgIH1cblxuICAgIHJldHVybiBiYXNlVGV4dHVyZTtcbn07XG4iLCJ2YXIgQmFzZVRleHR1cmUgPSByZXF1aXJlKCcuL0Jhc2VUZXh0dXJlJyksXG4gICAgVGV4dHVyZSA9IHJlcXVpcmUoJy4vVGV4dHVyZScpLFxuICAgIFJlbmRlclRhcmdldCA9IHJlcXVpcmUoJy4uL3JlbmRlcmVycy93ZWJnbC91dGlscy9SZW5kZXJUYXJnZXQnKSxcbiAgICBGaWx0ZXJNYW5hZ2VyID0gcmVxdWlyZSgnLi4vcmVuZGVyZXJzL3dlYmdsL21hbmFnZXJzL0ZpbHRlck1hbmFnZXInKSxcbiAgICBDYW52YXNCdWZmZXIgPSByZXF1aXJlKCcuLi9yZW5kZXJlcnMvY2FudmFzL3V0aWxzL0NhbnZhc0J1ZmZlcicpLFxuICAgIG1hdGggPSByZXF1aXJlKCcuLi9tYXRoJyksXG4gICAgQ09OU1QgPSByZXF1aXJlKCcuLi9jb25zdCcpLFxuICAgIHRlbXBNYXRyaXggPSBuZXcgbWF0aC5NYXRyaXgoKTtcblxuLyoqXG4gKiBBIFJlbmRlclRleHR1cmUgaXMgYSBzcGVjaWFsIHRleHR1cmUgdGhhdCBhbGxvd3MgYW55IFBpeGkgZGlzcGxheSBvYmplY3QgdG8gYmUgcmVuZGVyZWQgdG8gaXQuXG4gKlxuICogX19IaW50X186IEFsbCBEaXNwbGF5T2JqZWN0cyAoaS5lLiBTcHJpdGVzKSB0aGF0IHJlbmRlciB0byBhIFJlbmRlclRleHR1cmUgc2hvdWxkIGJlIHByZWxvYWRlZFxuICogb3RoZXJ3aXNlIGJsYWNrIHJlY3RhbmdsZXMgd2lsbCBiZSBkcmF3biBpbnN0ZWFkLlxuICpcbiAqIEEgUmVuZGVyVGV4dHVyZSB0YWtlcyBhIHNuYXBzaG90IG9mIGFueSBEaXNwbGF5IE9iamVjdCBnaXZlbiB0byBpdHMgcmVuZGVyIG1ldGhvZC4gVGhlIHBvc2l0aW9uXG4gKiBhbmQgcm90YXRpb24gb2YgdGhlIGdpdmVuIERpc3BsYXkgT2JqZWN0cyBpcyBpZ25vcmVkLiBGb3IgZXhhbXBsZTpcbiAqXG4gKiBgYGBqc1xuICogdmFyIHJlbmRlcmVyID0gUElYSS5hdXRvRGV0ZWN0UmVuZGVyZXIoMTAyNCwgMTAyNCwgeyB2aWV3OiBjYW52YXMsIHJhdGlvOiAxIH0pO1xuICogdmFyIHJlbmRlclRleHR1cmUgPSBuZXcgUElYSS5SZW5kZXJUZXh0dXJlKHJlbmRlcmVyLCA4MDAsIDYwMCk7XG4gKiB2YXIgc3ByaXRlID0gUElYSS5TcHJpdGUuZnJvbUltYWdlKFwic3Bpbk9ial8wMS5wbmdcIik7XG4gKlxuICogc3ByaXRlLnBvc2l0aW9uLnggPSA4MDAvMjtcbiAqIHNwcml0ZS5wb3NpdGlvbi55ID0gNjAwLzI7XG4gKiBzcHJpdGUuYW5jaG9yLnggPSAwLjU7XG4gKiBzcHJpdGUuYW5jaG9yLnkgPSAwLjU7XG4gKlxuICogcmVuZGVyVGV4dHVyZS5yZW5kZXIoc3ByaXRlKTtcbiAqIGBgYFxuICpcbiAqIFRoZSBTcHJpdGUgaW4gdGhpcyBjYXNlIHdpbGwgYmUgcmVuZGVyZWQgdG8gYSBwb3NpdGlvbiBvZiAwLDAuIFRvIHJlbmRlciB0aGlzIHNwcml0ZSBhdCBpdHMgYWN0dWFsXG4gKiBwb3NpdGlvbiBhIENvbnRhaW5lciBzaG91bGQgYmUgdXNlZDpcbiAqXG4gKiBgYGBqc1xuICogdmFyIGRvYyA9IG5ldyBQSVhJLkNvbnRhaW5lcigpO1xuICpcbiAqIGRvYy5hZGRDaGlsZChzcHJpdGUpO1xuICpcbiAqIHJlbmRlclRleHR1cmUucmVuZGVyKGRvYyk7ICAvLyBSZW5kZXJzIHRvIGNlbnRlciBvZiByZW5kZXJUZXh0dXJlXG4gKiBgYGBcbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuVGV4dHVyZVxuICogQG1lbWJlcm9mIFBJWElcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5DYW52YXNSZW5kZXJlcnxQSVhJLldlYkdMUmVuZGVyZXJ9IFRoZSByZW5kZXJlciB1c2VkIGZvciB0aGlzIFJlbmRlclRleHR1cmVcbiAqIEBwYXJhbSBbd2lkdGg9MTAwXSB7bnVtYmVyfSBUaGUgd2lkdGggb2YgdGhlIHJlbmRlciB0ZXh0dXJlXG4gKiBAcGFyYW0gW2hlaWdodD0xMDBdIHtudW1iZXJ9IFRoZSBoZWlnaHQgb2YgdGhlIHJlbmRlciB0ZXh0dXJlXG4gKiBAcGFyYW0gW3NjYWxlTW9kZV0ge251bWJlcn0gU2VlIHtAbGluayBQSVhJLlNDQUxFX01PREVTfSBmb3IgcG9zc2libGUgdmFsdWVzXG4gKiBAcGFyYW0gW3Jlc29sdXRpb249MV0ge251bWJlcn0gVGhlIHJlc29sdXRpb24gb2YgdGhlIHRleHR1cmUgYmVpbmcgZ2VuZXJhdGVkXG4gKi9cbmZ1bmN0aW9uIFJlbmRlclRleHR1cmUocmVuZGVyZXIsIHdpZHRoLCBoZWlnaHQsIHNjYWxlTW9kZSwgcmVzb2x1dGlvbilcbntcbiAgICBpZiAoIXJlbmRlcmVyKVxuICAgIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdVbmFibGUgdG8gY3JlYXRlIFJlbmRlclRleHR1cmUsIHlvdSBtdXN0IHBhc3MgYSByZW5kZXJlciBpbnRvIHRoZSBjb25zdHJ1Y3Rvci4nKTtcbiAgICB9XG5cbiAgICB3aWR0aCA9IHdpZHRoIHx8IDEwMDtcbiAgICBoZWlnaHQgPSBoZWlnaHQgfHwgMTAwO1xuICAgIHJlc29sdXRpb24gPSByZXNvbHV0aW9uIHx8IENPTlNULlJFU09MVVRJT047XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYmFzZSB0ZXh0dXJlIG9iamVjdCB0aGF0IHRoaXMgdGV4dHVyZSB1c2VzXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtCYXNlVGV4dHVyZX1cbiAgICAgKi9cbiAgICB2YXIgYmFzZVRleHR1cmUgPSBuZXcgQmFzZVRleHR1cmUoKTtcbiAgICBiYXNlVGV4dHVyZS53aWR0aCA9IHdpZHRoO1xuICAgIGJhc2VUZXh0dXJlLmhlaWdodCA9IGhlaWdodDtcbiAgICBiYXNlVGV4dHVyZS5yZXNvbHV0aW9uID0gcmVzb2x1dGlvbjtcbiAgICBiYXNlVGV4dHVyZS5zY2FsZU1vZGUgPSBzY2FsZU1vZGUgfHwgQ09OU1QuU0NBTEVfTU9ERVMuREVGQVVMVDtcbiAgICBiYXNlVGV4dHVyZS5oYXNMb2FkZWQgPSB0cnVlO1xuXG5cbiAgICBUZXh0dXJlLmNhbGwodGhpcyxcbiAgICAgICAgYmFzZVRleHR1cmUsXG4gICAgICAgIG5ldyBtYXRoLlJlY3RhbmdsZSgwLCAwLCB3aWR0aCwgaGVpZ2h0KVxuICAgICk7XG5cblxuICAgIC8qKlxuICAgICAqIFRoZSB3aXRoIG9mIHRoZSByZW5kZXIgdGV4dHVyZVxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMud2lkdGggPSB3aWR0aDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBoZWlnaHQgb2YgdGhlIHJlbmRlciB0ZXh0dXJlXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy5oZWlnaHQgPSBoZWlnaHQ7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgUmVzb2x1dGlvbiBvZiB0aGUgdGV4dHVyZS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLnJlc29sdXRpb24gPSByZXNvbHV0aW9uO1xuXG4gICAgLyoqXG4gICAgICogRHJhdy9yZW5kZXIgdGhlIGdpdmVuIERpc3BsYXlPYmplY3Qgb250byB0aGUgdGV4dHVyZS5cbiAgICAgKlxuICAgICAqIFRoZSBkaXNwbGF5T2JqZWN0IGFuZCBkZXNjZW5kZW50cyBhcmUgdHJhbnNmb3JtZWQgZHVyaW5nIHRoaXMgb3BlcmF0aW9uLlxuICAgICAqIElmIGB1cGRhdGVUcmFuc2Zvcm1gIGlzIHRydWUgdGhlbiB0aGUgdHJhbnNmb3JtYXRpb25zIHdpbGwgYmUgcmVzdG9yZWQgYmVmb3JlIHRoZVxuICAgICAqIG1ldGhvZCByZXR1cm5zLiBPdGhlcndpc2UgaXQgaXMgdXAgdG8gdGhlIGNhbGxpbmcgY29kZSB0byBjb3JyZWN0bHkgdXNlIG9yIHJlc2V0XG4gICAgICogdGhlIHRyYW5zZm9ybWVkIGRpc3BsYXkgb2JqZWN0cy5cbiAgICAgKlxuICAgICAqIFRoZSBkaXNwbGF5IG9iamVjdCBpcyBhbHdheXMgcmVuZGVyZWQgd2l0aCBhIHdvcmxkQWxwaGEgdmFsdWUgb2YgMS5cbiAgICAgKlxuICAgICAqIEBtZXRob2RcbiAgICAgKiBAcGFyYW0gZGlzcGxheU9iamVjdCB7UElYSS5EaXNwbGF5T2JqZWN0fSBUaGUgZGlzcGxheSBvYmplY3QgdG8gcmVuZGVyIHRoaXMgdGV4dHVyZSBvblxuICAgICAqIEBwYXJhbSBbbWF0cml4XSB7UElYSS5NYXRyaXh9IE9wdGlvbmFsIG1hdHJpeCB0byBhcHBseSB0byB0aGUgZGlzcGxheSBvYmplY3QgYmVmb3JlIHJlbmRlcmluZy5cbiAgICAgKiBAcGFyYW0gW2NsZWFyPWZhbHNlXSB7Ym9vbGVhbn0gSWYgdHJ1ZSB0aGUgdGV4dHVyZSB3aWxsIGJlIGNsZWFyZWQgYmVmb3JlIHRoZSBkaXNwbGF5T2JqZWN0IGlzIGRyYXduXG4gICAgICogQHBhcmFtIFt1cGRhdGVUcmFuc2Zvcm09dHJ1ZV0ge2Jvb2xlYW59IElmIHRydWUgdGhlIGRpc3BsYXlPYmplY3QncyB3b3JsZFRyYW5zZm9ybS93b3JsZEFscGhhIGFuZCBhbGwgY2hpbGRyZW5cbiAgICAgKiAgdHJhbnNmb3JtYXRpb25zIHdpbGwgYmUgcmVzdG9yZWQuIE5vdCByZXN0b3JpbmcgdGhpcyBpbmZvcm1hdGlvbiB3aWxsIGJlIGEgbGl0dGxlIGZhc3Rlci5cbiAgICAgKi9cbiAgICB0aGlzLnJlbmRlciA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgcmVuZGVyZXIgdGhpcyBSZW5kZXJUZXh0dXJlIHVzZXMuIEEgUmVuZGVyVGV4dHVyZSBjYW4gb25seSBiZWxvbmcgdG8gb25lIHJlbmRlcmVyIGF0IHRoZSBtb21lbnQgaWYgaXRzIHdlYkdMLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5DYW52YXNSZW5kZXJlcnxQSVhJLldlYkdMUmVuZGVyZXJ9XG4gICAgICovXG4gICAgdGhpcy5yZW5kZXJlciA9IHJlbmRlcmVyO1xuXG4gICAgaWYgKHRoaXMucmVuZGVyZXIudHlwZSA9PT0gQ09OU1QuUkVOREVSRVJfVFlQRS5XRUJHTClcbiAgICB7XG4gICAgICAgIHZhciBnbCA9IHRoaXMucmVuZGVyZXIuZ2w7XG5cbiAgICAgICAgdGhpcy50ZXh0dXJlQnVmZmVyID0gbmV3IFJlbmRlclRhcmdldChnbCwgdGhpcy53aWR0aCwgdGhpcy5oZWlnaHQsIGJhc2VUZXh0dXJlLnNjYWxlTW9kZSwgdGhpcy5yZXNvbHV0aW9uKTsvLywgdGhpcy5iYXNlVGV4dHVyZS5zY2FsZU1vZGUpO1xuICAgICAgICB0aGlzLmJhc2VUZXh0dXJlLl9nbFRleHR1cmVzW2dsLmlkXSA9IHRoaXMudGV4dHVyZUJ1ZmZlci50ZXh0dXJlO1xuXG4gICAgICAgIC8vVE9ETyByZWZhY3RvciBmaWx0ZXIgbWFuYWdlci4uIGFzIHJlYWxseSBpdHMgbm8gbG9uZ2VyIGEgbWFuYWdlciBpZiB3ZSB1c2UgaXQgaGVyZS4uXG4gICAgICAgIHRoaXMuZmlsdGVyTWFuYWdlciA9IG5ldyBGaWx0ZXJNYW5hZ2VyKHRoaXMucmVuZGVyZXIpO1xuICAgICAgICB0aGlzLmZpbHRlck1hbmFnZXIub25Db250ZXh0Q2hhbmdlKCk7XG4gICAgICAgIHRoaXMuZmlsdGVyTWFuYWdlci5yZXNpemUod2lkdGgsIGhlaWdodCk7XG4gICAgICAgIHRoaXMucmVuZGVyID0gdGhpcy5yZW5kZXJXZWJHTDtcblxuICAgICAgICAvLyB0aGUgY3JlYXRpb24gb2YgYSBmaWx0ZXIgbWFuYWdlciB1bmJpbmRzIHRoZSBidWZmZXJzLi5cbiAgICAgICAgdGhpcy5yZW5kZXJlci5jdXJyZW50UmVuZGVyZXIuc3RhcnQoKTtcbiAgICAgICAgdGhpcy5yZW5kZXJlci5jdXJyZW50UmVuZGVyVGFyZ2V0LmFjdGl2YXRlKCk7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG5cbiAgICAgICAgdGhpcy5yZW5kZXIgPSB0aGlzLnJlbmRlckNhbnZhcztcbiAgICAgICAgdGhpcy50ZXh0dXJlQnVmZmVyID0gbmV3IENhbnZhc0J1ZmZlcih0aGlzLndpZHRoKiB0aGlzLnJlc29sdXRpb24sIHRoaXMuaGVpZ2h0KiB0aGlzLnJlc29sdXRpb24pO1xuICAgICAgICB0aGlzLmJhc2VUZXh0dXJlLnNvdXJjZSA9IHRoaXMudGV4dHVyZUJ1ZmZlci5jYW52YXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKi9cbiAgICB0aGlzLnZhbGlkID0gdHJ1ZTtcblxuICAgIHRoaXMuX3VwZGF0ZVV2cygpO1xufVxuXG5SZW5kZXJUZXh0dXJlLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoVGV4dHVyZS5wcm90b3R5cGUpO1xuUmVuZGVyVGV4dHVyZS5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBSZW5kZXJUZXh0dXJlO1xubW9kdWxlLmV4cG9ydHMgPSBSZW5kZXJUZXh0dXJlO1xuXG4vKipcbiAqIFJlc2l6ZXMgdGhlIFJlbmRlclRleHR1cmUuXG4gKlxuICogQHBhcmFtIHdpZHRoIHtudW1iZXJ9IFRoZSB3aWR0aCB0byByZXNpemUgdG8uXG4gKiBAcGFyYW0gaGVpZ2h0IHtudW1iZXJ9IFRoZSBoZWlnaHQgdG8gcmVzaXplIHRvLlxuICogQHBhcmFtIHVwZGF0ZUJhc2Uge2Jvb2xlYW59IFNob3VsZCB0aGUgYmFzZVRleHR1cmUud2lkdGggYW5kIGhlaWdodCB2YWx1ZXMgYmUgcmVzaXplZCBhcyB3ZWxsP1xuICovXG5SZW5kZXJUZXh0dXJlLnByb3RvdHlwZS5yZXNpemUgPSBmdW5jdGlvbiAod2lkdGgsIGhlaWdodCwgdXBkYXRlQmFzZSlcbntcbiAgICBpZiAod2lkdGggPT09IHRoaXMud2lkdGggJiYgaGVpZ2h0ID09PSB0aGlzLmhlaWdodClcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLnZhbGlkID0gKHdpZHRoID4gMCAmJiBoZWlnaHQgPiAwKTtcblxuICAgIHRoaXMud2lkdGggPSB0aGlzLl9mcmFtZS53aWR0aCA9IHRoaXMuY3JvcC53aWR0aCA9IHdpZHRoO1xuICAgIHRoaXMuaGVpZ2h0ID0gIHRoaXMuX2ZyYW1lLmhlaWdodCA9IHRoaXMuY3JvcC5oZWlnaHQgPSBoZWlnaHQ7XG5cbiAgICBpZiAodXBkYXRlQmFzZSlcbiAgICB7XG4gICAgICAgIHRoaXMuYmFzZVRleHR1cmUud2lkdGggPSB0aGlzLndpZHRoO1xuICAgICAgICB0aGlzLmJhc2VUZXh0dXJlLmhlaWdodCA9IHRoaXMuaGVpZ2h0O1xuICAgIH1cblxuICAgIGlmICghdGhpcy52YWxpZClcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLnRleHR1cmVCdWZmZXIucmVzaXplKHRoaXMud2lkdGgsIHRoaXMuaGVpZ2h0KTtcblxuICAgIGlmKHRoaXMuZmlsdGVyTWFuYWdlcilcbiAgICB7XG4gICAgICAgIHRoaXMuZmlsdGVyTWFuYWdlci5yZXNpemUodGhpcy53aWR0aCwgdGhpcy5oZWlnaHQpO1xuICAgIH1cbn07XG5cbi8qKlxuICogQ2xlYXJzIHRoZSBSZW5kZXJUZXh0dXJlLlxuICpcbiAqL1xuUmVuZGVyVGV4dHVyZS5wcm90b3R5cGUuY2xlYXIgPSBmdW5jdGlvbiAoKVxue1xuICAgIGlmICghdGhpcy52YWxpZClcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5yZW5kZXJlci50eXBlID09PSBDT05TVC5SRU5ERVJFUl9UWVBFLldFQkdMKVxuICAgIHtcbiAgICAgICAgdGhpcy5yZW5kZXJlci5nbC5iaW5kRnJhbWVidWZmZXIodGhpcy5yZW5kZXJlci5nbC5GUkFNRUJVRkZFUiwgdGhpcy50ZXh0dXJlQnVmZmVyLmZyYW1lQnVmZmVyKTtcbiAgICB9XG5cbiAgICB0aGlzLnRleHR1cmVCdWZmZXIuY2xlYXIoKTtcbn07XG5cbi8qKlxuICogSW50ZXJuYWwgbWV0aG9kIGFzc2lnbmVkIHRvIHRoZSBgcmVuZGVyYCBwcm9wZXJ0eSBpZiB1c2luZyBhIENhbnZhc1JlbmRlcmVyLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0gZGlzcGxheU9iamVjdCB7UElYSS5EaXNwbGF5T2JqZWN0fSBUaGUgZGlzcGxheSBvYmplY3QgdG8gcmVuZGVyIHRoaXMgdGV4dHVyZSBvblxuICogQHBhcmFtIFttYXRyaXhdIHtQSVhJLk1hdHJpeH0gT3B0aW9uYWwgbWF0cml4IHRvIGFwcGx5IHRvIHRoZSBkaXNwbGF5IG9iamVjdCBiZWZvcmUgcmVuZGVyaW5nLlxuICogQHBhcmFtIFtjbGVhcj1mYWxzZV0ge2Jvb2xlYW59IElmIHRydWUgdGhlIHRleHR1cmUgd2lsbCBiZSBjbGVhcmVkIGJlZm9yZSB0aGUgZGlzcGxheU9iamVjdCBpcyBkcmF3blxuICogQHBhcmFtIFt1cGRhdGVUcmFuc2Zvcm09dHJ1ZV0ge2Jvb2xlYW59IElmIHRydWUgdGhlIGRpc3BsYXlPYmplY3QncyB3b3JsZFRyYW5zZm9ybS93b3JsZEFscGhhIGFuZCBhbGwgY2hpbGRyZW5cbiAqICB0cmFuc2Zvcm1hdGlvbnMgd2lsbCBiZSByZXN0b3JlZC4gTm90IHJlc3RvcmluZyB0aGlzIGluZm9ybWF0aW9uIHdpbGwgYmUgYSBsaXR0bGUgZmFzdGVyLlxuICovXG5SZW5kZXJUZXh0dXJlLnByb3RvdHlwZS5yZW5kZXJXZWJHTCA9IGZ1bmN0aW9uIChkaXNwbGF5T2JqZWN0LCBtYXRyaXgsIGNsZWFyLCB1cGRhdGVUcmFuc2Zvcm0pXG57XG4gICAgaWYgKCF0aGlzLnZhbGlkKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuXG4gICAgdXBkYXRlVHJhbnNmb3JtID0gKHVwZGF0ZVRyYW5zZm9ybSAhPT0gdW5kZWZpbmVkKSA/IHVwZGF0ZVRyYW5zZm9ybSA6IHRydWU7Ly8hdXBkYXRlVHJhbnNmb3JtO1xuXG4gICAgdGhpcy50ZXh0dXJlQnVmZmVyLnRyYW5zZm9ybSA9IG1hdHJpeDtcblxuICAgIC8vVE9ETyBub3QgYSBmYW4gdGhhdCB0aGlzIGlzIGhlcmUuLi4gaXQgd2lsbCBtb3ZlIVxuICAgIHRoaXMudGV4dHVyZUJ1ZmZlci5hY3RpdmF0ZSgpO1xuXG4gICAgLy8gc2V0V29ybGQgQWxwaGEgdG8gZW5zdXJlIHRoYXQgdGhlIG9iamVjdCBpcyByZW5kZXJlciBhdCBmdWxsIG9wYWNpdHlcbiAgICBkaXNwbGF5T2JqZWN0LndvcmxkQWxwaGEgPSAxO1xuXG4gICAgaWYgKHVwZGF0ZVRyYW5zZm9ybSlcbiAgICB7XG5cbiAgICAgICAgLy8gcmVzZXQgdGhlIG1hdHJpeCBvZiB0aGUgZGlzcGxhdHlPYmplY3QuLlxuICAgICAgICBkaXNwbGF5T2JqZWN0LndvcmxkVHJhbnNmb3JtLmlkZW50aXR5KCk7XG5cbiAgICAgICAgZGlzcGxheU9iamVjdC5jdXJyZW50Qm91bmRzID0gbnVsbDtcblxuICAgICAgICAvLyBUaW1lIHRvIHVwZGF0ZSBhbGwgdGhlIGNoaWxkcmVuIG9mIHRoZSBkaXNwbGF5T2JqZWN0IHdpdGggdGhlIG5ldyBtYXRyaXguLlxuICAgICAgICB2YXIgY2hpbGRyZW4gPSBkaXNwbGF5T2JqZWN0LmNoaWxkcmVuO1xuICAgICAgICB2YXIgaSwgajtcblxuICAgICAgICBmb3IgKGkgPSAwLCBqID0gY2hpbGRyZW4ubGVuZ3RoOyBpIDwgajsgKytpKVxuICAgICAgICB7XG4gICAgICAgICAgICBjaGlsZHJlbltpXS51cGRhdGVUcmFuc2Zvcm0oKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vVE9ETyByZW5hbWUgdGV4dHVyZUJ1ZmZlciB0byByZW5kZXJUYXJnZXQuLlxuICAgIHZhciB0ZW1wID0gIHRoaXMucmVuZGVyZXIuZmlsdGVyTWFuYWdlcjtcblxuICAgIHRoaXMucmVuZGVyZXIuZmlsdGVyTWFuYWdlciA9IHRoaXMuZmlsdGVyTWFuYWdlcjtcbiAgICB0aGlzLnJlbmRlcmVyLnJlbmRlckRpc3BsYXlPYmplY3QoZGlzcGxheU9iamVjdCwgdGhpcy50ZXh0dXJlQnVmZmVyLCBjbGVhcik7XG5cbiAgICB0aGlzLnJlbmRlcmVyLmZpbHRlck1hbmFnZXIgPSB0ZW1wO1xufTtcblxuXG4vKipcbiAqIEludGVybmFsIG1ldGhvZCBhc3NpZ25lZCB0byB0aGUgYHJlbmRlcmAgcHJvcGVydHkgaWYgdXNpbmcgYSBDYW52YXNSZW5kZXJlci5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIGRpc3BsYXlPYmplY3Qge1BJWEkuRGlzcGxheU9iamVjdH0gVGhlIGRpc3BsYXkgb2JqZWN0IHRvIHJlbmRlciB0aGlzIHRleHR1cmUgb25cbiAqIEBwYXJhbSBbbWF0cml4XSB7UElYSS5NYXRyaXh9IE9wdGlvbmFsIG1hdHJpeCB0byBhcHBseSB0byB0aGUgZGlzcGxheSBvYmplY3QgYmVmb3JlIHJlbmRlcmluZy5cbiAqIEBwYXJhbSBbY2xlYXJdIHtib29sZWFufSBJZiB0cnVlIHRoZSB0ZXh0dXJlIHdpbGwgYmUgY2xlYXJlZCBiZWZvcmUgdGhlIGRpc3BsYXlPYmplY3QgaXMgZHJhd25cbiAqL1xuUmVuZGVyVGV4dHVyZS5wcm90b3R5cGUucmVuZGVyQ2FudmFzID0gZnVuY3Rpb24gKGRpc3BsYXlPYmplY3QsIG1hdHJpeCwgY2xlYXIsIHVwZGF0ZVRyYW5zZm9ybSlcbntcbiAgICBpZiAoIXRoaXMudmFsaWQpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdXBkYXRlVHJhbnNmb3JtID0gISF1cGRhdGVUcmFuc2Zvcm07XG5cbiAgICB2YXIgd3QgPSB0ZW1wTWF0cml4O1xuXG4gICAgd3QuaWRlbnRpdHkoKTtcblxuICAgIGlmIChtYXRyaXgpXG4gICAge1xuICAgICAgICB3dC5hcHBlbmQobWF0cml4KTtcbiAgICB9XG5cbiAgICB2YXIgY2FjaGVkV3QgPSBkaXNwbGF5T2JqZWN0LndvcmxkVHJhbnNmb3JtO1xuICAgIGRpc3BsYXlPYmplY3Qud29ybGRUcmFuc2Zvcm0gPSB3dDtcblxuICAgIC8vIHNldFdvcmxkIEFscGhhIHRvIGVuc3VyZSB0aGF0IHRoZSBvYmplY3QgaXMgcmVuZGVyZXIgYXQgZnVsbCBvcGFjaXR5XG4gICAgZGlzcGxheU9iamVjdC53b3JsZEFscGhhID0gMTtcblxuICAgIC8vIFRpbWUgdG8gdXBkYXRlIGFsbCB0aGUgY2hpbGRyZW4gb2YgdGhlIGRpc3BsYXlPYmplY3Qgd2l0aCB0aGUgbmV3IG1hdHJpeC4uXG4gICAgdmFyIGNoaWxkcmVuID0gZGlzcGxheU9iamVjdC5jaGlsZHJlbjtcbiAgICB2YXIgaSwgajtcblxuICAgIGZvciAoaSA9IDAsIGogPSBjaGlsZHJlbi5sZW5ndGg7IGkgPCBqOyArK2kpXG4gICAge1xuICAgICAgICBjaGlsZHJlbltpXS51cGRhdGVUcmFuc2Zvcm0oKTtcbiAgICB9XG5cbiAgICBpZiAoY2xlYXIpXG4gICAge1xuICAgICAgICB0aGlzLnRleHR1cmVCdWZmZXIuY2xlYXIoKTtcbiAgICB9XG5cblxuLy8gICAgdGhpcy50ZXh0dXJlQnVmZmVyLlxuICAgIHZhciBjb250ZXh0ID0gdGhpcy50ZXh0dXJlQnVmZmVyLmNvbnRleHQ7XG5cbiAgICB2YXIgcmVhbFJlc29sdXRpb24gPSB0aGlzLnJlbmRlcmVyLnJlc29sdXRpb247XG5cbiAgICB0aGlzLnJlbmRlcmVyLnJlc29sdXRpb24gPSB0aGlzLnJlc29sdXRpb247XG5cbiAgICB0aGlzLnJlbmRlcmVyLnJlbmRlckRpc3BsYXlPYmplY3QoZGlzcGxheU9iamVjdCwgY29udGV4dCk7XG5cbiAgICB0aGlzLnJlbmRlcmVyLnJlc29sdXRpb24gPSByZWFsUmVzb2x1dGlvbjtcblxuICAgIGlmKGRpc3BsYXlPYmplY3Qud29ybGRUcmFuc2Zvcm0gPT09IHd0KVxuICAgIHtcbiAgICAgICAgLy8gZml4ZXMgY2FjaGVBc0JpdG1hcCBIYXBwZW5pbmcgZHVyaW5nIHRoZSBhYm92ZS4uXG4gICAgICAgIGRpc3BsYXlPYmplY3Qud29ybGRUcmFuc2Zvcm0gPSBjYWNoZWRXdDtcbiAgICB9XG5cbn07XG5cbi8qKlxuICogRGVzdHJveXMgdGhpcyB0ZXh0dXJlXG4gKlxuICogQHBhcmFtIGRlc3Ryb3lCYXNlIHtib29sZWFufSBXaGV0aGVyIHRvIGRlc3Ryb3kgdGhlIGJhc2UgdGV4dHVyZSBhcyB3ZWxsXG4gKi9cblJlbmRlclRleHR1cmUucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoKVxue1xuICAgIFRleHR1cmUucHJvdG90eXBlLmRlc3Ryb3kuY2FsbCh0aGlzLCB0cnVlKTtcblxuICAgIHRoaXMudGV4dHVyZUJ1ZmZlci5kZXN0cm95KCk7XG5cbiAgICAvLyBkZXN0cm95IHRoZSBmaWx0ZXJtYW5hZ2VyLi5cbiAgICBpZih0aGlzLmZpbHRlck1hbmFnZXIpXG4gICAge1xuICAgICAgICB0aGlzLmZpbHRlck1hbmFnZXIuZGVzdHJveSgpO1xuICAgIH1cblxuICAgIHRoaXMucmVuZGVyZXIgPSBudWxsO1xufTtcblxuLyoqXG4gKiBXaWxsIHJldHVybiBhIEhUTUwgSW1hZ2Ugb2YgdGhlIHRleHR1cmVcbiAqXG4gKiBAcmV0dXJuIHtJbWFnZX1cbiAqL1xuUmVuZGVyVGV4dHVyZS5wcm90b3R5cGUuZ2V0SW1hZ2UgPSBmdW5jdGlvbiAoKVxue1xuICAgIHZhciBpbWFnZSA9IG5ldyBJbWFnZSgpO1xuICAgIGltYWdlLnNyYyA9IHRoaXMuZ2V0QmFzZTY0KCk7XG4gICAgcmV0dXJuIGltYWdlO1xufTtcblxuLyoqXG4gKiBXaWxsIHJldHVybiBhIGEgYmFzZTY0IGVuY29kZWQgc3RyaW5nIG9mIHRoaXMgdGV4dHVyZS4gSXQgd29ya3MgYnkgY2FsbGluZyBSZW5kZXJUZXh0dXJlLmdldENhbnZhcyBhbmQgdGhlbiBydW5uaW5nIHRvRGF0YVVSTCBvbiB0aGF0LlxuICpcbiAqIEByZXR1cm4ge3N0cmluZ30gQSBiYXNlNjQgZW5jb2RlZCBzdHJpbmcgb2YgdGhlIHRleHR1cmUuXG4gKi9cblJlbmRlclRleHR1cmUucHJvdG90eXBlLmdldEJhc2U2NCA9IGZ1bmN0aW9uICgpXG57XG4gICAgcmV0dXJuIHRoaXMuZ2V0Q2FudmFzKCkudG9EYXRhVVJMKCk7XG59O1xuXG4vKipcbiAqIENyZWF0ZXMgYSBDYW52YXMgZWxlbWVudCwgcmVuZGVycyB0aGlzIFJlbmRlclRleHR1cmUgdG8gaXQgYW5kIHRoZW4gcmV0dXJucyBpdC5cbiAqXG4gKiBAcmV0dXJuIHtIVE1MQ2FudmFzRWxlbWVudH0gQSBDYW52YXMgZWxlbWVudCB3aXRoIHRoZSB0ZXh0dXJlIHJlbmRlcmVkIG9uLlxuICovXG5SZW5kZXJUZXh0dXJlLnByb3RvdHlwZS5nZXRDYW52YXMgPSBmdW5jdGlvbiAoKVxue1xuICAgIGlmICh0aGlzLnJlbmRlcmVyLnR5cGUgPT09IENPTlNULlJFTkRFUkVSX1RZUEUuV0VCR0wpXG4gICAge1xuICAgICAgICB2YXIgZ2wgPSB0aGlzLnJlbmRlcmVyLmdsO1xuICAgICAgICB2YXIgd2lkdGggPSB0aGlzLnRleHR1cmVCdWZmZXIuc2l6ZS53aWR0aDtcbiAgICAgICAgdmFyIGhlaWdodCA9IHRoaXMudGV4dHVyZUJ1ZmZlci5zaXplLmhlaWdodDtcblxuICAgICAgICB2YXIgd2ViR0xQaXhlbHMgPSBuZXcgVWludDhBcnJheSg0ICogd2lkdGggKiBoZWlnaHQpO1xuXG4gICAgICAgIGdsLmJpbmRGcmFtZWJ1ZmZlcihnbC5GUkFNRUJVRkZFUiwgdGhpcy50ZXh0dXJlQnVmZmVyLmZyYW1lQnVmZmVyKTtcbiAgICAgICAgZ2wucmVhZFBpeGVscygwLCAwLCB3aWR0aCwgaGVpZ2h0LCBnbC5SR0JBLCBnbC5VTlNJR05FRF9CWVRFLCB3ZWJHTFBpeGVscyk7XG4gICAgICAgIGdsLmJpbmRGcmFtZWJ1ZmZlcihnbC5GUkFNRUJVRkZFUiwgbnVsbCk7XG5cbiAgICAgICAgdmFyIHRlbXBDYW52YXMgPSBuZXcgQ2FudmFzQnVmZmVyKHdpZHRoLCBoZWlnaHQpO1xuICAgICAgICB2YXIgY2FudmFzRGF0YSA9IHRlbXBDYW52YXMuY29udGV4dC5nZXRJbWFnZURhdGEoMCwgMCwgd2lkdGgsIGhlaWdodCk7XG4gICAgICAgIGNhbnZhc0RhdGEuZGF0YS5zZXQod2ViR0xQaXhlbHMpO1xuXG4gICAgICAgIHRlbXBDYW52YXMuY29udGV4dC5wdXRJbWFnZURhdGEoY2FudmFzRGF0YSwgMCwgMCk7XG5cbiAgICAgICAgcmV0dXJuIHRlbXBDYW52YXMuY2FudmFzO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICByZXR1cm4gdGhpcy50ZXh0dXJlQnVmZmVyLmNhbnZhcztcbiAgICB9XG59O1xuXG4vKipcbiAqIFdpbGwgcmV0dXJuIGEgb25lLWRpbWVuc2lvbmFsIGFycmF5IGNvbnRhaW5pbmcgdGhlIHBpeGVsIGRhdGEgb2YgdGhlIGVudGlyZSB0ZXh0dXJlIGluIFJHQkEgb3JkZXIsIHdpdGggaW50ZWdlciB2YWx1ZXMgYmV0d2VlbiAwIGFuZCAyNTUgKGluY2x1ZGVkKS5cbiAqXG4gKiBAcmV0dXJuIHtVaW50OENsYW1wZWRBcnJheX1cbiAqL1xuUmVuZGVyVGV4dHVyZS5wcm90b3R5cGUuZ2V0UGl4ZWxzID0gZnVuY3Rpb24gKClcbntcbiAgICB2YXIgd2lkdGgsIGhlaWdodDtcblxuICAgIGlmICh0aGlzLnJlbmRlcmVyLnR5cGUgPT09IENPTlNULlJFTkRFUkVSX1RZUEUuV0VCR0wpXG4gICAge1xuICAgICAgICB2YXIgZ2wgPSB0aGlzLnJlbmRlcmVyLmdsO1xuICAgICAgICB3aWR0aCA9IHRoaXMudGV4dHVyZUJ1ZmZlci5zaXplLndpZHRoO1xuICAgICAgICBoZWlnaHQgPSB0aGlzLnRleHR1cmVCdWZmZXIuc2l6ZS5oZWlnaHQ7XG5cbiAgICAgICAgdmFyIHdlYkdMUGl4ZWxzID0gbmV3IFVpbnQ4QXJyYXkoNCAqIHdpZHRoICogaGVpZ2h0KTtcblxuICAgICAgICBnbC5iaW5kRnJhbWVidWZmZXIoZ2wuRlJBTUVCVUZGRVIsIHRoaXMudGV4dHVyZUJ1ZmZlci5mcmFtZUJ1ZmZlcik7XG4gICAgICAgIGdsLnJlYWRQaXhlbHMoMCwgMCwgd2lkdGgsIGhlaWdodCwgZ2wuUkdCQSwgZ2wuVU5TSUdORURfQllURSwgd2ViR0xQaXhlbHMpO1xuICAgICAgICBnbC5iaW5kRnJhbWVidWZmZXIoZ2wuRlJBTUVCVUZGRVIsIG51bGwpO1xuXG4gICAgICAgIHJldHVybiB3ZWJHTFBpeGVscztcbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgd2lkdGggPSB0aGlzLnRleHR1cmVCdWZmZXIuY2FudmFzLndpZHRoO1xuICAgICAgICBoZWlnaHQgPSB0aGlzLnRleHR1cmVCdWZmZXIuY2FudmFzLmhlaWdodDtcblxuICAgICAgICByZXR1cm4gdGhpcy50ZXh0dXJlQnVmZmVyLmNhbnZhcy5nZXRDb250ZXh0KCcyZCcpLmdldEltYWdlRGF0YSgwLCAwLCB3aWR0aCwgaGVpZ2h0KS5kYXRhO1xuICAgIH1cbn07XG5cbi8qKlxuICogV2lsbCByZXR1cm4gYSBvbmUtZGltZW5zaW9uYWwgYXJyYXkgY29udGFpbmluZyB0aGUgcGl4ZWwgZGF0YSBvZiBhIHBpeGVsIHdpdGhpbiB0aGUgdGV4dHVyZSBpbiBSR0JBIG9yZGVyLCB3aXRoIGludGVnZXIgdmFsdWVzIGJldHdlZW4gMCBhbmQgMjU1IChpbmNsdWRlZCkuXG4gKlxuICogQHBhcmFtIHgge251bWJlcn0gVGhlIHggY29vcmRpbmF0ZSBvZiB0aGUgcGl4ZWwgdG8gcmV0cmlldmUuXG4gKiBAcGFyYW0geSB7bnVtYmVyfSBUaGUgeSBjb29yZGluYXRlIG9mIHRoZSBwaXhlbCB0byByZXRyaWV2ZS5cbiAqIEByZXR1cm4ge1VpbnQ4Q2xhbXBlZEFycmF5fVxuICovXG5SZW5kZXJUZXh0dXJlLnByb3RvdHlwZS5nZXRQaXhlbCA9IGZ1bmN0aW9uICh4LCB5KVxue1xuICAgIGlmICh0aGlzLnJlbmRlcmVyLnR5cGUgPT09IENPTlNULlJFTkRFUkVSX1RZUEUuV0VCR0wpXG4gICAge1xuICAgICAgICB2YXIgZ2wgPSB0aGlzLnJlbmRlcmVyLmdsO1xuXG4gICAgICAgIHZhciB3ZWJHTFBpeGVscyA9IG5ldyBVaW50OEFycmF5KDQpO1xuXG4gICAgICAgIGdsLmJpbmRGcmFtZWJ1ZmZlcihnbC5GUkFNRUJVRkZFUiwgdGhpcy50ZXh0dXJlQnVmZmVyLmZyYW1lQnVmZmVyKTtcbiAgICAgICAgZ2wucmVhZFBpeGVscyh4LCB5LCAxLCAxLCBnbC5SR0JBLCBnbC5VTlNJR05FRF9CWVRFLCB3ZWJHTFBpeGVscyk7XG4gICAgICAgIGdsLmJpbmRGcmFtZWJ1ZmZlcihnbC5GUkFNRUJVRkZFUiwgbnVsbCk7XG5cbiAgICAgICAgcmV0dXJuIHdlYkdMUGl4ZWxzO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICByZXR1cm4gdGhpcy50ZXh0dXJlQnVmZmVyLmNhbnZhcy5nZXRDb250ZXh0KCcyZCcpLmdldEltYWdlRGF0YSh4LCB5LCAxLCAxKS5kYXRhO1xuICAgIH1cbn07XG4iLCJ2YXIgQmFzZVRleHR1cmUgPSByZXF1aXJlKCcuL0Jhc2VUZXh0dXJlJyksXG4gICAgVmlkZW9CYXNlVGV4dHVyZSA9IHJlcXVpcmUoJy4vVmlkZW9CYXNlVGV4dHVyZScpLFxuICAgIFRleHR1cmVVdnMgPSByZXF1aXJlKCcuL1RleHR1cmVVdnMnKSxcbiAgICBFdmVudEVtaXR0ZXIgPSByZXF1aXJlKCdldmVudGVtaXR0ZXIzJyksXG4gICAgbWF0aCA9IHJlcXVpcmUoJy4uL21hdGgnKSxcbiAgICB1dGlscyA9IHJlcXVpcmUoJy4uL3V0aWxzJyk7XG5cbi8qKlxuICogQSB0ZXh0dXJlIHN0b3JlcyB0aGUgaW5mb3JtYXRpb24gdGhhdCByZXByZXNlbnRzIGFuIGltYWdlIG9yIHBhcnQgb2YgYW4gaW1hZ2UuIEl0IGNhbm5vdCBiZSBhZGRlZFxuICogdG8gdGhlIGRpc3BsYXkgbGlzdCBkaXJlY3RseS4gSW5zdGVhZCB1c2UgaXQgYXMgdGhlIHRleHR1cmUgZm9yIGEgU3ByaXRlLiBJZiBubyBmcmFtZSBpcyBwcm92aWRlZCB0aGVuIHRoZSB3aG9sZSBpbWFnZSBpcyB1c2VkLlxuICpcbiAqIFlvdSBjYW4gZGlyZWN0bHkgY3JlYXRlIGEgdGV4dHVyZSBmcm9tIGFuIGltYWdlIGFuZCB0aGVuIHJldXNlIGl0IG11bHRpcGxlIHRpbWVzIGxpa2UgdGhpcyA6XG4gKlxuICogYGBganNcbiAqIHZhciB0ZXh0dXJlID0gUElYSS5UZXh0dXJlLmZyb21JbWFnZSgnYXNzZXRzL2ltYWdlLnBuZycpO1xuICogdmFyIHNwcml0ZTEgPSBuZXcgUElYSS5TcHJpdGUodGV4dHVyZSk7XG4gKiB2YXIgc3ByaXRlMiA9IG5ldyBQSVhJLlNwcml0ZSh0ZXh0dXJlKTtcbiAqIGBgYFxuICpcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqIEBwYXJhbSBiYXNlVGV4dHVyZSB7UElYSS5CYXNlVGV4dHVyZX0gVGhlIGJhc2UgdGV4dHVyZSBzb3VyY2UgdG8gY3JlYXRlIHRoZSB0ZXh0dXJlIGZyb21cbiAqIEBwYXJhbSBbZnJhbWVdIHtQSVhJLlJlY3RhbmdsZX0gVGhlIHJlY3RhbmdsZSBmcmFtZSBvZiB0aGUgdGV4dHVyZSB0byBzaG93XG4gKiBAcGFyYW0gW2Nyb3BdIHtQSVhJLlJlY3RhbmdsZX0gVGhlIGFyZWEgb2Ygb3JpZ2luYWwgdGV4dHVyZVxuICogQHBhcmFtIFt0cmltXSB7UElYSS5SZWN0YW5nbGV9IFRyaW1tZWQgdGV4dHVyZSByZWN0YW5nbGVcbiAqIEBwYXJhbSBbcm90YXRlXSB7Ym9vbGVhbn0gaW5kaWNhdGVzIHdoZXRoZXIgdGhlIHRleHR1cmUgc2hvdWxkIGJlIHJvdGF0ZWQgYnkgOTAgZGVncmVlcyAoIHVzZWQgYnkgdGV4dHVyZSBwYWNrZXIgKVxuICovXG5mdW5jdGlvbiBUZXh0dXJlKGJhc2VUZXh0dXJlLCBmcmFtZSwgY3JvcCwgdHJpbSwgcm90YXRlKVxue1xuICAgIEV2ZW50RW1pdHRlci5jYWxsKHRoaXMpO1xuXG4gICAgLyoqXG4gICAgICogRG9lcyB0aGlzIFRleHR1cmUgaGF2ZSBhbnkgZnJhbWUgZGF0YSBhc3NpZ25lZCB0byBpdD9cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICovXG4gICAgdGhpcy5ub0ZyYW1lID0gZmFsc2U7XG5cbiAgICBpZiAoIWZyYW1lKVxuICAgIHtcbiAgICAgICAgdGhpcy5ub0ZyYW1lID0gdHJ1ZTtcbiAgICAgICAgZnJhbWUgPSBuZXcgbWF0aC5SZWN0YW5nbGUoMCwgMCwgMSwgMSk7XG4gICAgfVxuXG4gICAgaWYgKGJhc2VUZXh0dXJlIGluc3RhbmNlb2YgVGV4dHVyZSlcbiAgICB7XG4gICAgICAgIGJhc2VUZXh0dXJlID0gYmFzZVRleHR1cmUuYmFzZVRleHR1cmU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhlIGJhc2UgdGV4dHVyZSB0aGF0IHRoaXMgdGV4dHVyZSB1c2VzLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5CYXNlVGV4dHVyZX1cbiAgICAgKi9cbiAgICB0aGlzLmJhc2VUZXh0dXJlID0gYmFzZVRleHR1cmU7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgZnJhbWUgc3BlY2lmaWVzIHRoZSByZWdpb24gb2YgdGhlIGJhc2UgdGV4dHVyZSB0aGF0IHRoaXMgdGV4dHVyZSB1c2VzXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlJlY3RhbmdsZX1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX2ZyYW1lID0gZnJhbWU7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgdGV4dHVyZSB0cmltIGRhdGEuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlJlY3RhbmdsZX1cbiAgICAgKi9cbiAgICB0aGlzLnRyaW0gPSB0cmltO1xuXG4gICAgLyoqXG4gICAgICogVGhpcyB3aWxsIGxldCB0aGUgcmVuZGVyZXIga25vdyBpZiB0aGUgdGV4dHVyZSBpcyB2YWxpZC4gSWYgaXQncyBub3QgdGhlbiBpdCBjYW5ub3QgYmUgcmVuZGVyZWQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqL1xuICAgIHRoaXMudmFsaWQgPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIFRoaXMgd2lsbCBsZXQgYSByZW5kZXJlciBrbm93IHRoYXQgYSB0ZXh0dXJlIGhhcyBiZWVuIHVwZGF0ZWQgKHVzZWQgbWFpbmx5IGZvciB3ZWJHTCB1diB1cGRhdGVzKVxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKi9cbiAgICB0aGlzLnJlcXVpcmVzVXBkYXRlID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgV2ViR0wgVVYgZGF0YSBjYWNoZS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuVGV4dHVyZVV2c31cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX3V2cyA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgd2lkdGggb2YgdGhlIFRleHR1cmUgaW4gcGl4ZWxzLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMud2lkdGggPSAwO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGhlaWdodCBvZiB0aGUgVGV4dHVyZSBpbiBwaXhlbHMuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy5oZWlnaHQgPSAwO1xuXG4gICAgLyoqXG4gICAgICogVGhpcyBpcyB0aGUgYXJlYSBvZiB0aGUgQmFzZVRleHR1cmUgaW1hZ2UgdG8gYWN0dWFsbHkgY29weSB0byB0aGUgQ2FudmFzIC8gV2ViR0wgd2hlbiByZW5kZXJpbmcsXG4gICAgICogaXJyZXNwZWN0aXZlIG9mIHRoZSBhY3R1YWwgZnJhbWUgc2l6ZSBvciBwbGFjZW1lbnQgKHdoaWNoIGNhbiBiZSBpbmZsdWVuY2VkIGJ5IHRyaW1tZWQgdGV4dHVyZSBhdGxhc2VzKVxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5SZWN0YW5nbGV9XG4gICAgICovXG4gICAgdGhpcy5jcm9wID0gY3JvcCB8fCBmcmFtZTsvL25ldyBtYXRoLlJlY3RhbmdsZSgwLCAwLCAxLCAxKTtcblxuICAgIC8qKlxuICAgICAqIEluZGljYXRlcyB3aGV0aGVyIHRoZSB0ZXh0dXJlIHNob3VsZCBiZSByb3RhdGVkIGJ5IDkwIGRlZ3JlZXNcbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKi9cbiAgICB0aGlzLnJvdGF0ZSA9ICEhcm90YXRlO1xuXG4gICAgaWYgKGJhc2VUZXh0dXJlLmhhc0xvYWRlZClcbiAgICB7XG4gICAgICAgIGlmICh0aGlzLm5vRnJhbWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGZyYW1lID0gbmV3IG1hdGguUmVjdGFuZ2xlKDAsIDAsIGJhc2VUZXh0dXJlLndpZHRoLCBiYXNlVGV4dHVyZS5oZWlnaHQpO1xuXG4gICAgICAgICAgICAvLyBpZiB0aGVyZSBpcyBubyBmcmFtZSB3ZSBzaG91bGQgbW9uaXRvciBmb3IgYW55IGJhc2UgdGV4dHVyZSBjaGFuZ2VzLi5cbiAgICAgICAgICAgIGJhc2VUZXh0dXJlLm9uKCd1cGRhdGUnLCB0aGlzLm9uQmFzZVRleHR1cmVVcGRhdGVkLCB0aGlzKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmZyYW1lID0gZnJhbWU7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIGJhc2VUZXh0dXJlLm9uY2UoJ2xvYWRlZCcsIHRoaXMub25CYXNlVGV4dHVyZUxvYWRlZCwgdGhpcyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRmlyZWQgd2hlbiB0aGUgdGV4dHVyZSBpcyB1cGRhdGVkLiBUaGlzIGhhcHBlbnMgaWYgdGhlIGZyYW1lIG9yIHRoZSBiYXNlVGV4dHVyZSBpcyB1cGRhdGVkLlxuICAgICAqXG4gICAgICogQGV2ZW50IHVwZGF0ZVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLlRleHR1cmUjXG4gICAgICogQHByb3RlY3RlZFxuICAgICAqL1xufVxuXG5UZXh0dXJlLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoRXZlbnRFbWl0dGVyLnByb3RvdHlwZSk7XG5UZXh0dXJlLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFRleHR1cmU7XG5tb2R1bGUuZXhwb3J0cyA9IFRleHR1cmU7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKFRleHR1cmUucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogVGhlIGZyYW1lIHNwZWNpZmllcyB0aGUgcmVnaW9uIG9mIHRoZSBiYXNlIHRleHR1cmUgdGhhdCB0aGlzIHRleHR1cmUgdXNlcy5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuUmVjdGFuZ2xlfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLlRleHR1cmUjXG4gICAgICovXG4gICAgZnJhbWU6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fZnJhbWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKGZyYW1lKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLl9mcmFtZSA9IGZyYW1lO1xuXG4gICAgICAgICAgICB0aGlzLm5vRnJhbWUgPSBmYWxzZTtcblxuICAgICAgICAgICAgdGhpcy53aWR0aCA9IGZyYW1lLndpZHRoO1xuICAgICAgICAgICAgdGhpcy5oZWlnaHQgPSBmcmFtZS5oZWlnaHQ7XG5cbiAgICAgICAgICAgIGlmICghdGhpcy50cmltICYmICF0aGlzLnJvdGF0ZSAmJiAoZnJhbWUueCArIGZyYW1lLndpZHRoID4gdGhpcy5iYXNlVGV4dHVyZS53aWR0aCB8fCBmcmFtZS55ICsgZnJhbWUuaGVpZ2h0ID4gdGhpcy5iYXNlVGV4dHVyZS5oZWlnaHQpKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignVGV4dHVyZSBFcnJvcjogZnJhbWUgZG9lcyBub3QgZml0IGluc2lkZSB0aGUgYmFzZSBUZXh0dXJlIGRpbWVuc2lvbnMgJyArIHRoaXMpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvL3RoaXMudmFsaWQgPSBmcmFtZSAmJiBmcmFtZS53aWR0aCAmJiBmcmFtZS5oZWlnaHQgJiYgdGhpcy5iYXNlVGV4dHVyZS5zb3VyY2UgJiYgdGhpcy5iYXNlVGV4dHVyZS5oYXNMb2FkZWQ7XG4gICAgICAgICAgICB0aGlzLnZhbGlkID0gZnJhbWUgJiYgZnJhbWUud2lkdGggJiYgZnJhbWUuaGVpZ2h0ICYmIHRoaXMuYmFzZVRleHR1cmUuaGFzTG9hZGVkO1xuXG4gICAgICAgICAgICBpZiAodGhpcy50cmltKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHRoaXMud2lkdGggPSB0aGlzLnRyaW0ud2lkdGg7XG4gICAgICAgICAgICAgICAgdGhpcy5oZWlnaHQgPSB0aGlzLnRyaW0uaGVpZ2h0O1xuICAgICAgICAgICAgICAgIHRoaXMuX2ZyYW1lLndpZHRoID0gdGhpcy50cmltLndpZHRoO1xuICAgICAgICAgICAgICAgIHRoaXMuX2ZyYW1lLmhlaWdodCA9IHRoaXMudHJpbS5oZWlnaHQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdGhpcy5jcm9wID0gZnJhbWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICh0aGlzLnZhbGlkKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHRoaXMuX3VwZGF0ZVV2cygpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxufSk7XG5cbi8qKlxuICogVXBkYXRlcyB0aGlzIHRleHR1cmUgb24gdGhlIGdwdS5cbiAqXG4gKi9cblRleHR1cmUucHJvdG90eXBlLnVwZGF0ZSA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy5iYXNlVGV4dHVyZS51cGRhdGUoKTtcbn07XG5cbi8qKlxuICogQ2FsbGVkIHdoZW4gdGhlIGJhc2UgdGV4dHVyZSBpcyBsb2FkZWRcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5UZXh0dXJlLnByb3RvdHlwZS5vbkJhc2VUZXh0dXJlTG9hZGVkID0gZnVuY3Rpb24gKGJhc2VUZXh0dXJlKVxue1xuICAgIC8vIFRPRE8gdGhpcyBjb2RlIGxvb2tzIGNvbmZ1c2luZy4uIGJvbyB0byBhYnVzaW5nIGdldHRlcnMgYW5kIHNldHRlcnNzIVxuICAgIGlmICh0aGlzLm5vRnJhbWUpXG4gICAge1xuICAgICAgICB0aGlzLmZyYW1lID0gbmV3IG1hdGguUmVjdGFuZ2xlKDAsIDAsIGJhc2VUZXh0dXJlLndpZHRoLCBiYXNlVGV4dHVyZS5oZWlnaHQpO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICB0aGlzLmZyYW1lID0gdGhpcy5fZnJhbWU7XG4gICAgfVxuXG4gICAgdGhpcy5lbWl0KCd1cGRhdGUnLCB0aGlzKTtcbn07XG5cbi8qKlxuICogQ2FsbGVkIHdoZW4gdGhlIGJhc2UgdGV4dHVyZSBpcyB1cGRhdGVkXG4gKlxuICogQHByaXZhdGVcbiAqL1xuVGV4dHVyZS5wcm90b3R5cGUub25CYXNlVGV4dHVyZVVwZGF0ZWQgPSBmdW5jdGlvbiAoYmFzZVRleHR1cmUpXG57XG4gICAgdGhpcy5fZnJhbWUud2lkdGggPSBiYXNlVGV4dHVyZS53aWR0aDtcbiAgICB0aGlzLl9mcmFtZS5oZWlnaHQgPSBiYXNlVGV4dHVyZS5oZWlnaHQ7XG5cbiAgICB0aGlzLmVtaXQoJ3VwZGF0ZScsIHRoaXMpO1xufTtcblxuLyoqXG4gKiBEZXN0cm95cyB0aGlzIHRleHR1cmVcbiAqXG4gKiBAcGFyYW0gW2Rlc3Ryb3lCYXNlPWZhbHNlXSB7Ym9vbGVhbn0gV2hldGhlciB0byBkZXN0cm95IHRoZSBiYXNlIHRleHR1cmUgYXMgd2VsbFxuICovXG5UZXh0dXJlLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKGRlc3Ryb3lCYXNlKVxue1xuICAgIGlmICh0aGlzLmJhc2VUZXh0dXJlKVxuICAgIHtcbiAgICAgICAgaWYgKGRlc3Ryb3lCYXNlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmJhc2VUZXh0dXJlLmRlc3Ryb3koKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuYmFzZVRleHR1cmUub2ZmKCd1cGRhdGUnLCB0aGlzLm9uQmFzZVRleHR1cmVVcGRhdGVkLCB0aGlzKTtcbiAgICAgICAgdGhpcy5iYXNlVGV4dHVyZS5vZmYoJ2xvYWRlZCcsIHRoaXMub25CYXNlVGV4dHVyZUxvYWRlZCwgdGhpcyk7XG5cbiAgICAgICAgdGhpcy5iYXNlVGV4dHVyZSA9IG51bGw7XG4gICAgfVxuXG4gICAgdGhpcy5fZnJhbWUgPSBudWxsO1xuICAgIHRoaXMuX3V2cyA9IG51bGw7XG4gICAgdGhpcy50cmltID0gbnVsbDtcbiAgICB0aGlzLmNyb3AgPSBudWxsO1xuXG4gICAgdGhpcy52YWxpZCA9IGZhbHNlO1xuXG4gICAgdGhpcy5vZmYoJ2Rpc3Bvc2UnLCB0aGlzLmRpc3Bvc2UsIHRoaXMpO1xuICAgIHRoaXMub2ZmKCd1cGRhdGUnLCB0aGlzLnVwZGF0ZSwgdGhpcyk7XG59O1xuXG4vKipcbiAqIENyZWF0ZXMgYSBuZXcgdGV4dHVyZSBvYmplY3QgdGhhdCBhY3RzIHRoZSBzYW1lIGFzIHRoaXMgb25lLlxuICpcbiAqIEByZXR1cm4ge1BJWEkuVGV4dHVyZX1cbiAqL1xuVGV4dHVyZS5wcm90b3R5cGUuY2xvbmUgPSBmdW5jdGlvbiAoKVxue1xuICAgIHJldHVybiBuZXcgVGV4dHVyZSh0aGlzLmJhc2VUZXh0dXJlLCB0aGlzLmZyYW1lLCB0aGlzLmNyb3AsIHRoaXMudHJpbSwgdGhpcy5yb3RhdGUpO1xufTtcblxuLyoqXG4gKiBVcGRhdGVzIHRoZSBpbnRlcm5hbCBXZWJHTCBVViBjYWNoZS5cbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5UZXh0dXJlLnByb3RvdHlwZS5fdXBkYXRlVXZzID0gZnVuY3Rpb24gKClcbntcbiAgICBpZiAoIXRoaXMuX3V2cylcbiAgICB7XG4gICAgICAgIHRoaXMuX3V2cyA9IG5ldyBUZXh0dXJlVXZzKCk7XG4gICAgfVxuXG4gICAgdGhpcy5fdXZzLnNldCh0aGlzLmNyb3AsIHRoaXMuYmFzZVRleHR1cmUsIHRoaXMucm90YXRlKTtcbn07XG5cbi8qKlxuICogSGVscGVyIGZ1bmN0aW9uIHRoYXQgY3JlYXRlcyBhIFRleHR1cmUgb2JqZWN0IGZyb20gdGhlIGdpdmVuIGltYWdlIHVybC5cbiAqIElmIHRoZSBpbWFnZSBpcyBub3QgaW4gdGhlIHRleHR1cmUgY2FjaGUgaXQgd2lsbCBiZSAgY3JlYXRlZCBhbmQgbG9hZGVkLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBwYXJhbSBpbWFnZVVybCB7c3RyaW5nfSBUaGUgaW1hZ2UgdXJsIG9mIHRoZSB0ZXh0dXJlXG4gKiBAcGFyYW0gY3Jvc3NvcmlnaW4ge2Jvb2xlYW59IFdoZXRoZXIgcmVxdWVzdHMgc2hvdWxkIGJlIHRyZWF0ZWQgYXMgY3Jvc3NvcmlnaW5cbiAqIEBwYXJhbSBzY2FsZU1vZGUge251bWJlcn0gU2VlIHtAbGluayBQSVhJLlNDQUxFX01PREVTfSBmb3IgcG9zc2libGUgdmFsdWVzXG4gKiBAcmV0dXJuIHtQSVhJLlRleHR1cmV9IFRoZSBuZXdseSBjcmVhdGVkIHRleHR1cmVcbiAqL1xuVGV4dHVyZS5mcm9tSW1hZ2UgPSBmdW5jdGlvbiAoaW1hZ2VVcmwsIGNyb3Nzb3JpZ2luLCBzY2FsZU1vZGUpXG57XG4gICAgdmFyIHRleHR1cmUgPSB1dGlscy5UZXh0dXJlQ2FjaGVbaW1hZ2VVcmxdO1xuXG4gICAgaWYgKCF0ZXh0dXJlKVxuICAgIHtcbiAgICAgICAgdGV4dHVyZSA9IG5ldyBUZXh0dXJlKEJhc2VUZXh0dXJlLmZyb21JbWFnZShpbWFnZVVybCwgY3Jvc3NvcmlnaW4sIHNjYWxlTW9kZSkpO1xuICAgICAgICB1dGlscy5UZXh0dXJlQ2FjaGVbaW1hZ2VVcmxdID0gdGV4dHVyZTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGV4dHVyZTtcbn07XG5cbi8qKlxuICogSGVscGVyIGZ1bmN0aW9uIHRoYXQgY3JlYXRlcyBhIHNwcml0ZSB0aGF0IHdpbGwgY29udGFpbiBhIHRleHR1cmUgZnJvbSB0aGUgVGV4dHVyZUNhY2hlIGJhc2VkIG9uIHRoZSBmcmFtZUlkXG4gKiBUaGUgZnJhbWUgaWRzIGFyZSBjcmVhdGVkIHdoZW4gYSBUZXh0dXJlIHBhY2tlciBmaWxlIGhhcyBiZWVuIGxvYWRlZFxuICpcbiAqIEBzdGF0aWNcbiAqIEBwYXJhbSBmcmFtZUlkIHtzdHJpbmd9IFRoZSBmcmFtZSBJZCBvZiB0aGUgdGV4dHVyZSBpbiB0aGUgY2FjaGVcbiAqIEByZXR1cm4ge1BJWEkuVGV4dHVyZX0gVGhlIG5ld2x5IGNyZWF0ZWQgdGV4dHVyZVxuICovXG5UZXh0dXJlLmZyb21GcmFtZSA9IGZ1bmN0aW9uIChmcmFtZUlkKVxue1xuICAgIHZhciB0ZXh0dXJlID0gdXRpbHMuVGV4dHVyZUNhY2hlW2ZyYW1lSWRdO1xuXG4gICAgaWYgKCF0ZXh0dXJlKVxuICAgIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdUaGUgZnJhbWVJZCBcIicgKyBmcmFtZUlkICsgJ1wiIGRvZXMgbm90IGV4aXN0IGluIHRoZSB0ZXh0dXJlIGNhY2hlJyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRleHR1cmU7XG59O1xuXG4vKipcbiAqIEhlbHBlciBmdW5jdGlvbiB0aGF0IGNyZWF0ZXMgYSBuZXcgVGV4dHVyZSBiYXNlZCBvbiB0aGUgZ2l2ZW4gY2FudmFzIGVsZW1lbnQuXG4gKlxuICogQHN0YXRpY1xuICogQHBhcmFtIGNhbnZhcyB7Q2FudmFzfSBUaGUgY2FudmFzIGVsZW1lbnQgc291cmNlIG9mIHRoZSB0ZXh0dXJlXG4gKiBAcGFyYW0gc2NhbGVNb2RlIHtudW1iZXJ9IFNlZSB7QGxpbmsgUElYSS5TQ0FMRV9NT0RFU30gZm9yIHBvc3NpYmxlIHZhbHVlc1xuICogQHJldHVybiB7UElYSS5UZXh0dXJlfVxuICovXG5UZXh0dXJlLmZyb21DYW52YXMgPSBmdW5jdGlvbiAoY2FudmFzLCBzY2FsZU1vZGUpXG57XG4gICAgcmV0dXJuIG5ldyBUZXh0dXJlKEJhc2VUZXh0dXJlLmZyb21DYW52YXMoY2FudmFzLCBzY2FsZU1vZGUpKTtcbn07XG5cbi8qKlxuICogSGVscGVyIGZ1bmN0aW9uIHRoYXQgY3JlYXRlcyBhIG5ldyBUZXh0dXJlIGJhc2VkIG9uIHRoZSBnaXZlbiB2aWRlbyBlbGVtZW50LlxuICpcbiAqIEBzdGF0aWNcbiAqIEBwYXJhbSB2aWRlbyB7SFRNTFZpZGVvRWxlbWVudH1cbiAqIEBwYXJhbSBzY2FsZU1vZGUge251bWJlcn0gU2VlIHtAbGluayBQSVhJLlNDQUxFX01PREVTfSBmb3IgcG9zc2libGUgdmFsdWVzXG4gKiBAcmV0dXJuIHtQSVhJLlRleHR1cmV9IEEgVGV4dHVyZVxuICovXG5UZXh0dXJlLmZyb21WaWRlbyA9IGZ1bmN0aW9uICh2aWRlbywgc2NhbGVNb2RlKVxue1xuICAgIGlmICh0eXBlb2YgdmlkZW8gPT09ICdzdHJpbmcnKVxuICAgIHtcbiAgICAgICAgcmV0dXJuIFRleHR1cmUuZnJvbVZpZGVvVXJsKHZpZGVvLCBzY2FsZU1vZGUpO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICByZXR1cm4gbmV3IFRleHR1cmUoVmlkZW9CYXNlVGV4dHVyZS5mcm9tVmlkZW8odmlkZW8sIHNjYWxlTW9kZSkpO1xuICAgIH1cbn07XG5cbi8qKlxuICogSGVscGVyIGZ1bmN0aW9uIHRoYXQgY3JlYXRlcyBhIG5ldyBUZXh0dXJlIGJhc2VkIG9uIHRoZSB2aWRlbyB1cmwuXG4gKlxuICogQHN0YXRpY1xuICogQHBhcmFtIHZpZGVvVXJsIHtzdHJpbmd9XG4gKiBAcGFyYW0gc2NhbGVNb2RlIHtudW1iZXJ9IFNlZSB7QGxpbmsgUElYSS5TQ0FMRV9NT0RFU30gZm9yIHBvc3NpYmxlIHZhbHVlc1xuICogQHJldHVybiB7UElYSS5UZXh0dXJlfSBBIFRleHR1cmVcbiAqL1xuVGV4dHVyZS5mcm9tVmlkZW9VcmwgPSBmdW5jdGlvbiAodmlkZW9VcmwsIHNjYWxlTW9kZSlcbntcbiAgICByZXR1cm4gbmV3IFRleHR1cmUoVmlkZW9CYXNlVGV4dHVyZS5mcm9tVXJsKHZpZGVvVXJsLCBzY2FsZU1vZGUpKTtcbn07XG5cbi8qKlxuICogQWRkcyBhIHRleHR1cmUgdG8gdGhlIGdsb2JhbCB1dGlscy5UZXh0dXJlQ2FjaGUuIFRoaXMgY2FjaGUgaXMgc2hhcmVkIGFjcm9zcyB0aGUgd2hvbGUgUElYSSBvYmplY3QuXG4gKlxuICogQHN0YXRpY1xuICogQHBhcmFtIHRleHR1cmUge1BJWEkuVGV4dHVyZX0gVGhlIFRleHR1cmUgdG8gYWRkIHRvIHRoZSBjYWNoZS5cbiAqIEBwYXJhbSBpZCB7c3RyaW5nfSBUaGUgaWQgdGhhdCB0aGUgdGV4dHVyZSB3aWxsIGJlIHN0b3JlZCBhZ2FpbnN0LlxuICovXG5UZXh0dXJlLmFkZFRleHR1cmVUb0NhY2hlID0gZnVuY3Rpb24gKHRleHR1cmUsIGlkKVxue1xuICAgIHV0aWxzLlRleHR1cmVDYWNoZVtpZF0gPSB0ZXh0dXJlO1xufTtcblxuLyoqXG4gKiBSZW1vdmUgYSB0ZXh0dXJlIGZyb20gdGhlIGdsb2JhbCB1dGlscy5UZXh0dXJlQ2FjaGUuXG4gKlxuICogQHN0YXRpY1xuICogQHBhcmFtIGlkIHtzdHJpbmd9IFRoZSBpZCBvZiB0aGUgdGV4dHVyZSB0byBiZSByZW1vdmVkXG4gKiBAcmV0dXJuIHtQSVhJLlRleHR1cmV9IFRoZSB0ZXh0dXJlIHRoYXQgd2FzIHJlbW92ZWRcbiAqL1xuVGV4dHVyZS5yZW1vdmVUZXh0dXJlRnJvbUNhY2hlID0gZnVuY3Rpb24gKGlkKVxue1xuICAgIHZhciB0ZXh0dXJlID0gdXRpbHMuVGV4dHVyZUNhY2hlW2lkXTtcblxuICAgIGRlbGV0ZSB1dGlscy5UZXh0dXJlQ2FjaGVbaWRdO1xuICAgIGRlbGV0ZSB1dGlscy5CYXNlVGV4dHVyZUNhY2hlW2lkXTtcblxuICAgIHJldHVybiB0ZXh0dXJlO1xufTtcblxuLyoqXG4gKiBBbiBlbXB0eSB0ZXh0dXJlLCB1c2VkIG9mdGVuIHRvIG5vdCBoYXZlIHRvIGNyZWF0ZSBtdWx0aXBsZSBlbXB0eSB0ZXh0dXJlcy5cbiAqXG4gKiBAc3RhdGljXG4gKiBAY29uc3RhbnRcbiAqL1xuVGV4dHVyZS5FTVBUWSA9IG5ldyBUZXh0dXJlKG5ldyBCYXNlVGV4dHVyZSgpKTtcbiIsIlxuLyoqXG4gKiBBIHN0YW5kYXJkIG9iamVjdCB0byBzdG9yZSB0aGUgVXZzIG9mIGEgdGV4dHVyZVxuICpcbiAqIEBjbGFzc1xuICogQHByaXZhdGVcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKi9cbmZ1bmN0aW9uIFRleHR1cmVVdnMoKVxue1xuICAgIHRoaXMueDAgPSAwO1xuICAgIHRoaXMueTAgPSAwO1xuXG4gICAgdGhpcy54MSA9IDE7XG4gICAgdGhpcy55MSA9IDA7XG5cbiAgICB0aGlzLngyID0gMTtcbiAgICB0aGlzLnkyID0gMTtcblxuICAgIHRoaXMueDMgPSAwO1xuICAgIHRoaXMueTMgPSAxO1xuXG4gICAgdGhpcy54eTBfdWludDMyID0gMDtcbiAgICB0aGlzLnh5MV91aW50MzIgPSAwO1xuICAgIHRoaXMueHkyX3VpbnQzMiA9IDA7XG4gICAgdGhpcy54eTNfdWludDMyID0gMDtcblxuICAgIHRoaXMudXZzX3VpbnQzMiA9IG5ldyBVaW50MzJBcnJheSg0KVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IFRleHR1cmVVdnM7XG5cbi8qKlxuICogU2V0cyB0aGUgdGV4dHVyZSBVdnMgYmFzZWQgb24gdGhlIGdpdmVuIGZyYW1lIGluZm9ybWF0aW9uXG4gKiBAcGFyYW0gZnJhbWUge1BJWEkuUmVjdGFuZ2xlfVxuICogQHBhcmFtIGJhc2VGcmFtZSB7UElYSS5SZWN0YW5nbGV9XG4gKiBAcGFyYW0gcm90YXRlIHtib29sZWFufSBXaGV0aGVyIG9yIG5vdCB0aGUgZnJhbWUgaXMgcm90YXRlZFxuICogQHByaXZhdGVcbiAqL1xuVGV4dHVyZVV2cy5wcm90b3R5cGUuc2V0ID0gZnVuY3Rpb24gKGZyYW1lLCBiYXNlRnJhbWUsIHJvdGF0ZSlcbntcbiAgICB2YXIgdHcgPSBiYXNlRnJhbWUud2lkdGg7XG4gICAgdmFyIHRoID0gYmFzZUZyYW1lLmhlaWdodDtcblxuICAgIGlmKHJvdGF0ZSlcbiAgICB7XG4gICAgICAgIHRoaXMueDAgPSAoZnJhbWUueCArIGZyYW1lLmhlaWdodCkgLyB0dztcbiAgICAgICAgdGhpcy55MCA9IGZyYW1lLnkgLyB0aDtcblxuICAgICAgICB0aGlzLngxID0gKGZyYW1lLnggKyBmcmFtZS5oZWlnaHQpIC8gdHc7XG4gICAgICAgIHRoaXMueTEgPSAoZnJhbWUueSArIGZyYW1lLndpZHRoKSAvIHRoO1xuXG4gICAgICAgIHRoaXMueDIgPSBmcmFtZS54IC8gdHc7XG4gICAgICAgIHRoaXMueTIgPSAoZnJhbWUueSArIGZyYW1lLndpZHRoKSAvIHRoO1xuXG4gICAgICAgIHRoaXMueDMgPSBmcmFtZS54IC8gdHc7XG4gICAgICAgIHRoaXMueTMgPSBmcmFtZS55IC8gdGg7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG5cbiAgICAgICAgdGhpcy54MCA9IGZyYW1lLnggLyB0dztcbiAgICAgICAgdGhpcy55MCA9IGZyYW1lLnkgLyB0aDtcblxuICAgICAgICB0aGlzLngxID0gKGZyYW1lLnggKyBmcmFtZS53aWR0aCkgLyB0dztcbiAgICAgICAgdGhpcy55MSA9IGZyYW1lLnkgLyB0aDtcblxuICAgICAgICB0aGlzLngyID0gKGZyYW1lLnggKyBmcmFtZS53aWR0aCkgLyB0dztcbiAgICAgICAgdGhpcy55MiA9IChmcmFtZS55ICsgZnJhbWUuaGVpZ2h0KSAvIHRoO1xuXG4gICAgICAgIHRoaXMueDMgPSBmcmFtZS54IC8gdHc7XG4gICAgICAgIHRoaXMueTMgPSAoZnJhbWUueSArIGZyYW1lLmhlaWdodCkgLyB0aDtcbiAgICB9XG5cbiAgICB0aGlzLnV2c191aW50MzJbMF0gPSAoKCh0aGlzLnkwICogNjU1MzUpICYgMHhGRkZGKSA8PCAxNikgfCAoKHRoaXMueDAgKiA2NTUzNSkgJiAweEZGRkYpO1xuICAgIHRoaXMudXZzX3VpbnQzMlsxXSA9ICgoKHRoaXMueTEgKiA2NTUzNSkgJiAweEZGRkYpIDw8IDE2KSB8ICgodGhpcy54MSAqIDY1NTM1KSAmIDB4RkZGRik7XG4gICAgdGhpcy51dnNfdWludDMyWzJdID0gKCgodGhpcy55MiAqIDY1NTM1KSAmIDB4RkZGRikgPDwgMTYpIHwgKCh0aGlzLngyICogNjU1MzUpICYgMHhGRkZGKTtcbiAgICB0aGlzLnV2c191aW50MzJbM10gPSAoKCh0aGlzLnkzICogNjU1MzUpICYgMHhGRkZGKSA8PCAxNikgfCAoKHRoaXMueDMgKiA2NTUzNSkgJiAweEZGRkYpO1xufTtcbiIsInZhciBCYXNlVGV4dHVyZSA9IHJlcXVpcmUoJy4vQmFzZVRleHR1cmUnKSxcbiAgICB1dGlscyA9IHJlcXVpcmUoJy4uL3V0aWxzJyk7XG5cbi8qKlxuICogQSB0ZXh0dXJlIG9mIGEgW3BsYXlpbmddIFZpZGVvLlxuICpcbiAqIFZpZGVvIGJhc2UgdGV4dHVyZXMgbWltaWMgUGl4aSBCYXNlVGV4dHVyZS5mcm9tLi4uLiBtZXRob2QgaW4gdGhlaXIgY3JlYXRpb24gcHJvY2Vzcy5cbiAqXG4gKiBUaGlzIGNhbiBiZSB1c2VkIGluIHNldmVyYWwgd2F5cywgc3VjaCBhczpcbiAqXG4gKiBgYGBqc1xuICogdmFyIHRleHR1cmUgPSBQSVhJLlZpZGVvQmFzZVRleHR1cmUuZnJvbVVybCgnaHR0cDovL215ZG9tYWluLmNvbS92aWRlby5tcDQnKTtcbiAqXG4gKiB2YXIgdGV4dHVyZSA9IFBJWEkuVmlkZW9CYXNlVGV4dHVyZS5mcm9tVXJsKHsgc3JjOiAnaHR0cDovL215ZG9tYWluLmNvbS92aWRlby5tcDQnLCBtaW1lOiAndmlkZW8vbXA0JyB9KTtcbiAqXG4gKiB2YXIgdGV4dHVyZSA9IFBJWEkuVmlkZW9CYXNlVGV4dHVyZS5mcm9tVXJscyhbJy92aWRlby53ZWJtJywgJy92aWRlby5tcDQnXSk7XG4gKlxuICogdmFyIHRleHR1cmUgPSBQSVhJLlZpZGVvQmFzZVRleHR1cmUuZnJvbVVybHMoW1xuICogICAgIHsgc3JjOiAnL3ZpZGVvLndlYm0nLCBtaW1lOiAndmlkZW8vd2VibScgfSxcbiAqICAgICB7IHNyYzogJy92aWRlby5tcDQnLCBtaW1lOiAndmlkZW8vbXA0JyB9XG4gKiBdKTtcbiAqIGBgYFxuICpcbiAqIFNlZSB0aGUgW1wiZGV1c1wiIGRlbW9dKGh0dHA6Ly93d3cuZ29vZGJveWRpZ2l0YWwuY29tL3BpeGlqcy9leGFtcGxlcy9kZXVzLykuXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLkJhc2VUZXh0dXJlXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIHNvdXJjZSB7SFRNTFZpZGVvRWxlbWVudH1cbiAqIEBwYXJhbSBbc2NhbGVNb2RlXSB7bnVtYmVyfSBTZWUge0BsaW5rIFBJWEkuU0NBTEVfTU9ERVN9IGZvciBwb3NzaWJsZSB2YWx1ZXNcbiAqL1xuZnVuY3Rpb24gVmlkZW9CYXNlVGV4dHVyZShzb3VyY2UsIHNjYWxlTW9kZSlcbntcbiAgICBpZiAoIXNvdXJjZSlcbiAgICB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignTm8gdmlkZW8gc291cmNlIGVsZW1lbnQgc3BlY2lmaWVkLicpO1xuICAgIH1cblxuICAgIC8vIGhvb2sgaW4gaGVyZSB0byBjaGVjayBpZiB2aWRlbyBpcyBhbHJlYWR5IGF2YWlsYWJsZS5cbiAgICAvLyBCYXNlVGV4dHVyZSBsb29rcyBmb3IgYSBzb3VyY2UuY29tcGxldGUgYm9vbGVhbiwgcGx1cyB3aWR0aCAmIGhlaWdodC5cblxuICAgIGlmICgoc291cmNlLnJlYWR5U3RhdGUgPT09IHNvdXJjZS5IQVZFX0VOT1VHSF9EQVRBIHx8IHNvdXJjZS5yZWFkeVN0YXRlID09PSBzb3VyY2UuSEFWRV9GVVRVUkVfREFUQSkgJiYgc291cmNlLndpZHRoICYmIHNvdXJjZS5oZWlnaHQpXG4gICAge1xuICAgICAgICBzb3VyY2UuY29tcGxldGUgPSB0cnVlO1xuICAgIH1cblxuICAgIEJhc2VUZXh0dXJlLmNhbGwodGhpcywgc291cmNlLCBzY2FsZU1vZGUpO1xuXG4gICAgLyoqXG4gICAgICogU2hvdWxkIHRoZSBiYXNlIHRleHR1cmUgYXV0b21hdGljYWxseSB1cGRhdGUgaXRzZWxmLCBzZXQgdG8gdHJ1ZSBieSBkZWZhdWx0XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqIEBkZWZhdWx0IHRydWVcbiAgICAgKi9cbiAgICB0aGlzLmF1dG9VcGRhdGUgPSBmYWxzZTtcblxuICAgIHRoaXMuX29uVXBkYXRlID0gdGhpcy5fb25VcGRhdGUuYmluZCh0aGlzKTtcbiAgICB0aGlzLl9vbkNhblBsYXkgPSB0aGlzLl9vbkNhblBsYXkuYmluZCh0aGlzKTtcblxuICAgIGlmICghc291cmNlLmNvbXBsZXRlKVxuICAgIHtcbiAgICAgICAgc291cmNlLmFkZEV2ZW50TGlzdGVuZXIoJ2NhbnBsYXknLCB0aGlzLl9vbkNhblBsYXkpO1xuICAgICAgICBzb3VyY2UuYWRkRXZlbnRMaXN0ZW5lcignY2FucGxheXRocm91Z2gnLCB0aGlzLl9vbkNhblBsYXkpO1xuXG4gICAgICAgIC8vIHN0YXJ0ZWQgcGxheWluZy4uXG4gICAgICAgIHNvdXJjZS5hZGRFdmVudExpc3RlbmVyKCdwbGF5JywgdGhpcy5fb25QbGF5U3RhcnQuYmluZCh0aGlzKSk7XG4gICAgICAgIHNvdXJjZS5hZGRFdmVudExpc3RlbmVyKCdwYXVzZScsIHRoaXMuX29uUGxheVN0b3AuYmluZCh0aGlzKSk7XG4gICAgfVxuXG4gICAgdGhpcy5fX2xvYWRlZCA9IGZhbHNlO1xufVxuXG5WaWRlb0Jhc2VUZXh0dXJlLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoQmFzZVRleHR1cmUucHJvdG90eXBlKTtcblZpZGVvQmFzZVRleHR1cmUucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gVmlkZW9CYXNlVGV4dHVyZTtcbm1vZHVsZS5leHBvcnRzID0gVmlkZW9CYXNlVGV4dHVyZTtcblxuLyoqXG4gKiBUaGUgaW50ZXJuYWwgdXBkYXRlIGxvb3Agb2YgdGhlIHZpZGVvIGJhc2UgdGV4dHVyZSwgb25seSBydW5zIHdoZW4gYXV0b1VwZGF0ZSBpcyBzZXQgdG8gdHJ1ZVxuICpcbiAqIEBwcml2YXRlXG4gKi9cblZpZGVvQmFzZVRleHR1cmUucHJvdG90eXBlLl9vblVwZGF0ZSA9IGZ1bmN0aW9uICgpXG57XG4gICAgaWYgKHRoaXMuYXV0b1VwZGF0ZSlcbiAgICB7XG4gICAgICAgIHdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUodGhpcy5fb25VcGRhdGUpO1xuICAgICAgICB0aGlzLnVwZGF0ZSgpO1xuICAgIH1cbn07XG5cbi8qKlxuICogUnVucyB0aGUgdXBkYXRlIGxvb3Agd2hlbiB0aGUgdmlkZW8gaXMgcmVhZHkgdG8gcGxheVxuICpcbiAqIEBwcml2YXRlXG4gKi9cblZpZGVvQmFzZVRleHR1cmUucHJvdG90eXBlLl9vblBsYXlTdGFydCA9IGZ1bmN0aW9uICgpXG57XG4gICAgaWYgKCF0aGlzLmF1dG9VcGRhdGUpXG4gICAge1xuICAgICAgICB3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lKHRoaXMuX29uVXBkYXRlKTtcbiAgICAgICAgdGhpcy5hdXRvVXBkYXRlID0gdHJ1ZTtcbiAgICB9XG59O1xuXG4vKipcbiAqIEZpcmVkIHdoZW4gYSBwYXVzZSBldmVudCBpcyB0cmlnZ2VyZWQsIHN0b3BzIHRoZSB1cGRhdGUgbG9vcFxuICpcbiAqIEBwcml2YXRlXG4gKi9cblZpZGVvQmFzZVRleHR1cmUucHJvdG90eXBlLl9vblBsYXlTdG9wID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLmF1dG9VcGRhdGUgPSBmYWxzZTtcbn07XG5cbi8qKlxuICogRmlyZWQgd2hlbiB0aGUgdmlkZW8gaXMgbG9hZGVkIGFuZCByZWFkeSB0byBwbGF5XG4gKlxuICogQHByaXZhdGVcbiAqL1xuVmlkZW9CYXNlVGV4dHVyZS5wcm90b3R5cGUuX29uQ2FuUGxheSA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy5oYXNMb2FkZWQgPSB0cnVlO1xuXG4gICAgaWYgKHRoaXMuc291cmNlKVxuICAgIHtcbiAgICAgICAgdGhpcy5zb3VyY2UucmVtb3ZlRXZlbnRMaXN0ZW5lcignY2FucGxheScsIHRoaXMuX29uQ2FuUGxheSk7XG4gICAgICAgIHRoaXMuc291cmNlLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2NhbnBsYXl0aHJvdWdoJywgdGhpcy5fb25DYW5QbGF5KTtcblxuICAgICAgICB0aGlzLndpZHRoID0gdGhpcy5zb3VyY2UudmlkZW9XaWR0aDtcbiAgICAgICAgdGhpcy5oZWlnaHQgPSB0aGlzLnNvdXJjZS52aWRlb0hlaWdodDtcblxuICAgICAgICB0aGlzLnNvdXJjZS5wbGF5KCk7XG5cbiAgICAgICAgLy8gcHJldmVudCBtdWx0aXBsZSBsb2FkZWQgZGlzcGF0Y2hlcy4uXG4gICAgICAgIGlmICghdGhpcy5fX2xvYWRlZClcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5fX2xvYWRlZCA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLmVtaXQoJ2xvYWRlZCcsIHRoaXMpO1xuICAgICAgICB9XG4gICAgfVxufTtcblxuLyoqXG4gKiBEZXN0cm95cyB0aGlzIHRleHR1cmVcbiAqXG4gKi9cblZpZGVvQmFzZVRleHR1cmUucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoKVxue1xuICAgIGlmICh0aGlzLnNvdXJjZSAmJiB0aGlzLnNvdXJjZS5fcGl4aUlkKVxuICAgIHtcbiAgICAgICAgZGVsZXRlIHV0aWxzLkJhc2VUZXh0dXJlQ2FjaGVbIHRoaXMuc291cmNlLl9waXhpSWQgXTtcbiAgICAgICAgZGVsZXRlIHRoaXMuc291cmNlLl9waXhpSWQ7XG4gICAgfVxuXG4gICAgQmFzZVRleHR1cmUucHJvdG90eXBlLmRlc3Ryb3kuY2FsbCh0aGlzKTtcbn07XG5cbi8qKlxuICogTWltaWMgUGl4aSBCYXNlVGV4dHVyZS5mcm9tLi4uLiBtZXRob2QuXG4gKlxuICogQHN0YXRpY1xuICogQHBhcmFtIHZpZGVvIHtIVE1MVmlkZW9FbGVtZW50fVxuICogQHBhcmFtIHNjYWxlTW9kZSB7bnVtYmVyfSBTZWUge0BsaW5rIFBJWEkuU0NBTEVfTU9ERVN9IGZvciBwb3NzaWJsZSB2YWx1ZXNcbiAqIEByZXR1cm4ge1BJWEkuVmlkZW9CYXNlVGV4dHVyZX1cbiAqL1xuVmlkZW9CYXNlVGV4dHVyZS5mcm9tVmlkZW8gPSBmdW5jdGlvbiAodmlkZW8sIHNjYWxlTW9kZSlcbntcbiAgICBpZiAoIXZpZGVvLl9waXhpSWQpXG4gICAge1xuICAgICAgICB2aWRlby5fcGl4aUlkID0gJ3ZpZGVvXycgKyB1dGlscy51aWQoKTtcbiAgICB9XG5cbiAgICB2YXIgYmFzZVRleHR1cmUgPSB1dGlscy5CYXNlVGV4dHVyZUNhY2hlW3ZpZGVvLl9waXhpSWRdO1xuXG4gICAgaWYgKCFiYXNlVGV4dHVyZSlcbiAgICB7XG4gICAgICAgIGJhc2VUZXh0dXJlID0gbmV3IFZpZGVvQmFzZVRleHR1cmUodmlkZW8sIHNjYWxlTW9kZSk7XG4gICAgICAgIHV0aWxzLkJhc2VUZXh0dXJlQ2FjaGVbIHZpZGVvLl9waXhpSWQgXSA9IGJhc2VUZXh0dXJlO1xuICAgIH1cblxuICAgIHJldHVybiBiYXNlVGV4dHVyZTtcbn07XG5cbi8qKlxuICogSGVscGVyIGZ1bmN0aW9uIHRoYXQgY3JlYXRlcyBhIG5ldyBCYXNlVGV4dHVyZSBiYXNlZCBvbiB0aGUgZ2l2ZW4gdmlkZW8gZWxlbWVudC5cbiAqIFRoaXMgQmFzZVRleHR1cmUgY2FuIHRoZW4gYmUgdXNlZCB0byBjcmVhdGUgYSB0ZXh0dXJlXG4gKlxuICogQHN0YXRpY1xuICogQHBhcmFtIHZpZGVvU3JjIHtzdHJpbmd8b2JqZWN0fHN0cmluZ1tdfG9iamVjdFtdfSBUaGUgVVJMKHMpIGZvciB0aGUgdmlkZW8uXG4gKiBAcGFyYW0gW3ZpZGVvU3JjLnNyY10ge3N0cmluZ30gT25lIG9mIHRoZSBzb3VyY2UgdXJscyBmb3IgdGhlIHZpZGVvXG4gKiBAcGFyYW0gW3ZpZGVvU3JjLm1pbWVdIHtzdHJpbmd9IFRoZSBtaW1ldHlwZSBvZiB0aGUgdmlkZW8gKGUuZy4gJ3ZpZGVvL21wNCcpLiBJZiBub3Qgc3BlY2lmaWVkXG4gKiAgdGhlIHVybCdzIGV4dGVuc2lvbiB3aWxsIGJlIHVzZWQgYXMgdGhlIHNlY29uZCBwYXJ0IG9mIHRoZSBtaW1lIHR5cGUuXG4gKiBAcGFyYW0gc2NhbGVNb2RlIHtudW1iZXJ9IFNlZSB7QGxpbmsgUElYSS5TQ0FMRV9NT0RFU30gZm9yIHBvc3NpYmxlIHZhbHVlc1xuICogQHJldHVybiB7UElYSS5WaWRlb0Jhc2VUZXh0dXJlfVxuICovXG5WaWRlb0Jhc2VUZXh0dXJlLmZyb21VcmwgPSBmdW5jdGlvbiAodmlkZW9TcmMsIHNjYWxlTW9kZSlcbntcbiAgICB2YXIgdmlkZW8gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd2aWRlbycpO1xuXG4gICAgLy8gYXJyYXkgb2Ygb2JqZWN0cyBvciBzdHJpbmdzXG4gICAgaWYgKEFycmF5LmlzQXJyYXkodmlkZW9TcmMpKVxuICAgIHtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB2aWRlb1NyYy5sZW5ndGg7ICsraSlcbiAgICAgICAge1xuICAgICAgICAgICAgdmlkZW8uYXBwZW5kQ2hpbGQoY3JlYXRlU291cmNlKHZpZGVvU3JjW2ldLnNyYyB8fCB2aWRlb1NyY1tpXSwgdmlkZW9TcmNbaV0ubWltZSkpO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8vIHNpbmdsZSBvYmplY3Qgb3Igc3RyaW5nXG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgdmlkZW8uYXBwZW5kQ2hpbGQoY3JlYXRlU291cmNlKHZpZGVvU3JjLnNyYyB8fCB2aWRlb1NyYywgdmlkZW9TcmMubWltZSkpO1xuICAgIH1cblxuICAgIHZpZGVvLmxvYWQoKTtcbiAgICB2aWRlby5wbGF5KCk7XG5cbiAgICByZXR1cm4gVmlkZW9CYXNlVGV4dHVyZS5mcm9tVmlkZW8odmlkZW8sIHNjYWxlTW9kZSk7XG59O1xuXG5WaWRlb0Jhc2VUZXh0dXJlLmZyb21VcmxzID0gVmlkZW9CYXNlVGV4dHVyZS5mcm9tVXJsO1xuXG5mdW5jdGlvbiBjcmVhdGVTb3VyY2UocGF0aCwgdHlwZSlcbntcbiAgICBpZiAoIXR5cGUpXG4gICAge1xuICAgICAgICB0eXBlID0gJ3ZpZGVvLycgKyBwYXRoLnN1YnN0cihwYXRoLmxhc3RJbmRleE9mKCcuJykgKyAxKTtcbiAgICB9XG5cbiAgICB2YXIgc291cmNlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc291cmNlJyk7XG5cbiAgICBzb3VyY2Uuc3JjID0gcGF0aDtcbiAgICBzb3VyY2UudHlwZSA9IHR5cGU7XG5cbiAgICByZXR1cm4gc291cmNlO1xufVxuIiwidmFyIENPTlNUID0gcmVxdWlyZSgnLi4vY29uc3QnKSxcbiAgICBFdmVudEVtaXR0ZXIgPSByZXF1aXJlKCdldmVudGVtaXR0ZXIzJyksXG4gICAgLy8gSW50ZXJuYWwgZXZlbnQgdXNlZCBieSBjb21wb3NlZCBlbWl0dGVyXG4gICAgVElDSyA9ICd0aWNrJztcblxuLyoqXG4gKiBBIFRpY2tlciBjbGFzcyB0aGF0IHJ1bnMgYW4gdXBkYXRlIGxvb3AgdGhhdCBvdGhlciBvYmplY3RzIGxpc3RlbiB0by5cbiAqIFRoaXMgY2xhc3MgaXMgY29tcG9zZWQgYXJvdW5kIGFuIEV2ZW50RW1pdHRlciBvYmplY3QgdG8gYWRkIGxpc3RlbmVyc1xuICogbWVhbnQgZm9yIGV4ZWN1dGlvbiBvbiB0aGUgbmV4dCByZXF1ZXN0ZWQgYW5pbWF0aW9uIGZyYW1lLlxuICogQW5pbWF0aW9uIGZyYW1lcyBhcmUgcmVxdWVzdGVkIG9ubHkgd2hlbiBuZWNlc3NhcnksXG4gKiBlLmcuIFdoZW4gdGhlIHRpY2tlciBpcyBzdGFydGVkIGFuZCB0aGUgZW1pdHRlciBoYXMgbGlzdGVuZXJzLlxuICpcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWEkudGlja2VyXG4gKi9cbmZ1bmN0aW9uIFRpY2tlcigpXG57XG4gICAgdmFyIF90aGlzID0gdGhpcztcblxuICAgIC8qKlxuICAgICAqIEludGVybmFsIHRpY2sgbWV0aG9kIGJvdW5kIHRvIHRpY2tlciBpbnN0YW5jZS5cbiAgICAgKiBUaGlzIGlzIGJlY2F1c2UgaW4gZWFybHkgMjAxNSwgRnVuY3Rpb24uYmluZFxuICAgICAqIGlzIHN0aWxsIDYwJSBzbG93ZXIgaW4gaGlnaCBwZXJmb3JtYW5jZSBzY2VuYXJpb3MuXG4gICAgICogQWxzbyBzZXBhcmF0aW5nIGZyYW1lIHJlcXVlc3RzIGZyb20gdXBkYXRlIG1ldGhvZFxuICAgICAqIHNvIGxpc3RlbmVycyBtYXkgYmUgY2FsbGVkIGF0IGFueSB0aW1lIGFuZCB3aXRoXG4gICAgICogYW55IGFuaW1hdGlvbiBBUEksIGp1c3QgaW52b2tlIHRpY2tlci51cGRhdGUodGltZSkuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX3RpY2sgPSBmdW5jdGlvbiBfdGljayh0aW1lKSB7XG5cbiAgICAgICAgX3RoaXMuX3JlcXVlc3RJZCA9IG51bGw7XG5cbiAgICAgICAgaWYgKF90aGlzLnN0YXJ0ZWQpXG4gICAgICAgIHtcbiAgICAgICAgICAgIC8vIEludm9rZSBsaXN0ZW5lcnMgbm93XG4gICAgICAgICAgICBfdGhpcy51cGRhdGUodGltZSk7XG4gICAgICAgICAgICAvLyBMaXN0ZW5lciBzaWRlIGVmZmVjdHMgbWF5IGhhdmUgbW9kaWZpZWQgdGlja2VyIHN0YXRlLlxuICAgICAgICAgICAgaWYgKF90aGlzLnN0YXJ0ZWQgJiYgX3RoaXMuX3JlcXVlc3RJZCA9PT0gbnVsbCAmJiBfdGhpcy5fZW1pdHRlci5saXN0ZW5lcnMoVElDSywgdHJ1ZSkpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgX3RoaXMuX3JlcXVlc3RJZCA9IHJlcXVlc3RBbmltYXRpb25GcmFtZShfdGhpcy5fdGljayk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgLyoqXG4gICAgICogSW50ZXJuYWwgZW1pdHRlciB1c2VkIHRvIGZpcmUgJ3RpY2snIGV2ZW50XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9lbWl0dGVyID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gICAgLyoqXG4gICAgICogSW50ZXJuYWwgY3VycmVudCBmcmFtZSByZXF1ZXN0IElEXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9yZXF1ZXN0SWQgPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogSW50ZXJuYWwgdmFsdWUgbWFuYWdlZCBieSBtaW5GUFMgcHJvcGVydHkgc2V0dGVyIGFuZCBnZXR0ZXIuXG4gICAgICogVGhpcyBpcyB0aGUgbWF4aW11bSBhbGxvd2VkIG1pbGxpc2Vjb25kcyBiZXR3ZWVuIHVwZGF0ZXMuXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9tYXhFbGFwc2VkTVMgPSAxMDA7XG5cbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIG9yIG5vdCB0aGlzIHRpY2tlciBzaG91bGQgaW52b2tlIHRoZSBtZXRob2RcbiAgICAgKiB7QGxpbmsgUElYSS50aWNrZXIuVGlja2VyI3N0YXJ0fSBhdXRvbWF0aWNhbGx5XG4gICAgICogd2hlbiBhIGxpc3RlbmVyIGlzIGFkZGVkLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgICAqL1xuICAgIHRoaXMuYXV0b1N0YXJ0ID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBTY2FsYXIgdGltZSB2YWx1ZSBmcm9tIGxhc3QgZnJhbWUgdG8gdGhpcyBmcmFtZS5cbiAgICAgKiBUaGlzIHZhbHVlIGlzIGNhcHBlZCBieSBzZXR0aW5nIHtAbGluayBQSVhJLnRpY2tlci5UaWNrZXIjbWluRlBTfVxuICAgICAqIGFuZCBpcyBzY2FsZWQgd2l0aCB7QGxpbmsgUElYSS50aWNrZXIuVGlja2VyI3NwZWVkfS5cbiAgICAgKiAqKk5vdGU6KiogVGhlIGNhcCBtYXkgYmUgZXhjZWVkZWQgYnkgc2NhbGluZy5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAxXG4gICAgICovXG4gICAgdGhpcy5kZWx0YVRpbWUgPSAxO1xuXG4gICAgLyoqXG4gICAgICogVGltZSBlbGFwc2VkIGluIG1pbGxpc2Vjb25kcyBmcm9tIGxhc3QgZnJhbWUgdG8gdGhpcyBmcmFtZS5cbiAgICAgKiBPcHBvc2VkIHRvIHdoYXQgdGhlIHNjYWxhciB7QGxpbmsgUElYSS50aWNrZXIuVGlja2VyI2RlbHRhVGltZX1cbiAgICAgKiBpcyBiYXNlZCwgdGhpcyB2YWx1ZSBpcyBuZWl0aGVyIGNhcHBlZCBub3Igc2NhbGVkLlxuICAgICAqIElmIHRoZSBwbGF0Zm9ybSBzdXBwb3J0cyBET01IaWdoUmVzVGltZVN0YW1wLFxuICAgICAqIHRoaXMgdmFsdWUgd2lsbCBoYXZlIGEgcHJlY2lzaW9uIG9mIDEgwrVzLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7RE9NSGlnaFJlc1RpbWVTdGFtcHxudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMSAvIFRBUkdFVF9GUE1TXG4gICAgICovXG4gICAgdGhpcy5lbGFwc2VkTVMgPSAxIC8gQ09OU1QuVEFSR0VUX0ZQTVM7IC8vIGRlZmF1bHQgdG8gdGFyZ2V0IGZyYW1lIHRpbWVcblxuICAgIC8qKlxuICAgICAqIFRoZSBsYXN0IHRpbWUge0BsaW5rIFBJWEkudGlja2VyLlRpY2tlciN1cGRhdGV9IHdhcyBpbnZva2VkLlxuICAgICAqIFRoaXMgdmFsdWUgaXMgYWxzbyByZXNldCBpbnRlcm5hbGx5IG91dHNpZGUgb2YgaW52b2tpbmdcbiAgICAgKiB1cGRhdGUsIGJ1dCBvbmx5IHdoZW4gYSBuZXcgYW5pbWF0aW9uIGZyYW1lIGlzIHJlcXVlc3RlZC5cbiAgICAgKiBJZiB0aGUgcGxhdGZvcm0gc3VwcG9ydHMgRE9NSGlnaFJlc1RpbWVTdGFtcCxcbiAgICAgKiB0aGlzIHZhbHVlIHdpbGwgaGF2ZSBhIHByZWNpc2lvbiBvZiAxIMK1cy5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge0RPTUhpZ2hSZXNUaW1lU3RhbXB8bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDBcbiAgICAgKi9cbiAgICB0aGlzLmxhc3RUaW1lID0gMDtcblxuICAgIC8qKlxuICAgICAqIEZhY3RvciBvZiBjdXJyZW50IHtAbGluayBQSVhJLnRpY2tlci5UaWNrZXIjZGVsdGFUaW1lfS5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIC8vIFNjYWxlcyB0aWNrZXIuZGVsdGFUaW1lIHRvIHdoYXQgd291bGQgYmVcbiAgICAgKiAvLyB0aGUgZXF1aXZhbGVudCBvZiBhcHByb3hpbWF0ZWx5IDEyMCBGUFNcbiAgICAgKiB0aWNrZXIuc3BlZWQgPSAyO1xuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDFcbiAgICAgKi9cbiAgICB0aGlzLnNwZWVkID0gMTtcblxuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgb3Igbm90IHRoaXMgdGlja2VyIGhhcyBiZWVuIHN0YXJ0ZWQuXG4gICAgICogYHRydWVgIGlmIHtAbGluayBQSVhJLnRpY2tlci5UaWNrZXIjc3RhcnR9IGhhcyBiZWVuIGNhbGxlZC5cbiAgICAgKiBgZmFsc2VgIGlmIHtAbGluayBQSVhJLnRpY2tlci5UaWNrZXIjc3RvcH0gaGFzIGJlZW4gY2FsbGVkLlxuICAgICAqIFdoaWxlIGBmYWxzZWAsIHRoaXMgdmFsdWUgbWF5IGNoYW5nZSB0byBgdHJ1ZWAgaW4gdGhlXG4gICAgICogZXZlbnQgb2Yge0BsaW5rIFBJWEkudGlja2VyLlRpY2tlciNhdXRvU3RhcnR9IGJlaW5nIGB0cnVlYFxuICAgICAqIGFuZCBhIGxpc3RlbmVyIGlzIGFkZGVkLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgICAqL1xuICAgIHRoaXMuc3RhcnRlZCA9IGZhbHNlO1xufVxuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhUaWNrZXIucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogVGhlIGZyYW1lcyBwZXIgc2Vjb25kIGF0IHdoaWNoIHRoaXMgdGlja2VyIGlzIHJ1bm5pbmcuXG4gICAgICogVGhlIGRlZmF1bHQgaXMgYXBwcm94aW1hdGVseSA2MCBpbiBtb3N0IG1vZGVybiBicm93c2Vycy5cbiAgICAgKiAqKk5vdGU6KiogVGhpcyBkb2VzIG5vdCBmYWN0b3IgaW4gdGhlIHZhbHVlIG9mXG4gICAgICoge0BsaW5rIFBJWEkudGlja2VyLlRpY2tlciNzcGVlZH0sIHdoaWNoIGlzIHNwZWNpZmljXG4gICAgICogdG8gc2NhbGluZyB7QGxpbmsgUElYSS50aWNrZXIuVGlja2VyI2RlbHRhVGltZX0uXG4gICAgICpcbiAgICAgKiBAbWVtYmVyXG4gICAgICogQG1lbWJlcm9mIFBJWEkudGlja2VyLlRpY2tlciNcbiAgICAgKiBAcmVhZG9ubHlcbiAgICAgKi9cbiAgICBGUFM6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbigpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiAxMDAwIC8gdGhpcy5lbGFwc2VkTVM7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogTWFuYWdlcyB0aGUgbWF4aW11bSBhbW91bnQgb2YgbWlsbGlzZWNvbmRzIGFsbG93ZWQgdG9cbiAgICAgKiBlbGFwc2UgYmV0d2VlbiBpbnZva2luZyB7QGxpbmsgUElYSS50aWNrZXIuVGlja2VyI3VwZGF0ZX0uXG4gICAgICogVGhpcyB2YWx1ZSBpcyB1c2VkIHRvIGNhcCB7QGxpbmsgUElYSS50aWNrZXIuVGlja2VyI2RlbHRhVGltZX0sXG4gICAgICogYnV0IGRvZXMgbm90IGVmZmVjdCB0aGUgbWVhc3VyZWQgdmFsdWUgb2Yge0BsaW5rIFBJWEkudGlja2VyLlRpY2tlciNGUFN9LlxuICAgICAqIFdoZW4gc2V0dGluZyB0aGlzIHByb3BlcnR5IGl0IGlzIGNsYW1wZWQgdG8gYSB2YWx1ZSBiZXR3ZWVuXG4gICAgICogYDBgIGFuZCBgUElYSS5UQVJHRVRfRlBNUyAqIDEwMDBgLlxuICAgICAqXG4gICAgICogQG1lbWJlclxuICAgICAqIEBtZW1iZXJvZiBQSVhJLnRpY2tlci5UaWNrZXIjXG4gICAgICogQGRlZmF1bHQgMTBcbiAgICAgKi9cbiAgICBtaW5GUFM6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbigpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiAxMDAwIC8gdGhpcy5fbWF4RWxhcHNlZE1TO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uKGZwcylcbiAgICAgICAge1xuICAgICAgICAgICAgLy8gQ2xhbXA6IDAgdG8gVEFSR0VUX0ZQTVNcbiAgICAgICAgICAgIHZhciBtaW5GUE1TID0gTWF0aC5taW4oTWF0aC5tYXgoMCwgZnBzKSAvIDEwMDAsIENPTlNULlRBUkdFVF9GUE1TKTtcbiAgICAgICAgICAgIHRoaXMuX21heEVsYXBzZWRNUyA9IDEgLyBtaW5GUE1TO1xuICAgICAgICB9XG4gICAgfVxufSk7XG5cbi8qKlxuICogQ29uZGl0aW9uYWxseSByZXF1ZXN0cyBhIG5ldyBhbmltYXRpb24gZnJhbWUuXG4gKiBJZiBhIGZyYW1lIGhhcyBub3QgYWxyZWFkeSBiZWVuIHJlcXVlc3RlZCwgYW5kIGlmIHRoZSBpbnRlcm5hbFxuICogZW1pdHRlciBoYXMgbGlzdGVuZXJzLCBhIG5ldyBmcmFtZSBpcyByZXF1ZXN0ZWQuXG4gKlxuICogQHByaXZhdGVcbiAqL1xuVGlja2VyLnByb3RvdHlwZS5fcmVxdWVzdElmTmVlZGVkID0gZnVuY3Rpb24gX3JlcXVlc3RJZk5lZWRlZCgpXG57XG4gICAgaWYgKHRoaXMuX3JlcXVlc3RJZCA9PT0gbnVsbCAmJiB0aGlzLl9lbWl0dGVyLmxpc3RlbmVycyhUSUNLLCB0cnVlKSlcbiAgICB7XG4gICAgICAgIC8vIGVuc3VyZSBjYWxsYmFja3MgZ2V0IGNvcnJlY3QgZGVsdGFcbiAgICAgICAgdGhpcy5sYXN0VGltZSA9IHBlcmZvcm1hbmNlLm5vdygpO1xuICAgICAgICB0aGlzLl9yZXF1ZXN0SWQgPSByZXF1ZXN0QW5pbWF0aW9uRnJhbWUodGhpcy5fdGljayk7XG4gICAgfVxufTtcblxuLyoqXG4gKiBDb25kaXRpb25hbGx5IGNhbmNlbHMgYSBwZW5kaW5nIGFuaW1hdGlvbiBmcmFtZS5cbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5UaWNrZXIucHJvdG90eXBlLl9jYW5jZWxJZk5lZWRlZCA9IGZ1bmN0aW9uIF9jYW5jZWxJZk5lZWRlZCgpXG57XG4gICAgaWYgKHRoaXMuX3JlcXVlc3RJZCAhPT0gbnVsbClcbiAgICB7XG4gICAgICAgIGNhbmNlbEFuaW1hdGlvbkZyYW1lKHRoaXMuX3JlcXVlc3RJZCk7XG4gICAgICAgIHRoaXMuX3JlcXVlc3RJZCA9IG51bGw7XG4gICAgfVxufTtcblxuLyoqXG4gKiBDb25kaXRpb25hbGx5IHJlcXVlc3RzIGEgbmV3IGFuaW1hdGlvbiBmcmFtZS5cbiAqIElmIHRoZSB0aWNrZXIgaGFzIGJlZW4gc3RhcnRlZCBpdCBjaGVja3MgaWYgYSBmcmFtZSBoYXMgbm90IGFscmVhZHlcbiAqIGJlZW4gcmVxdWVzdGVkLCBhbmQgaWYgdGhlIGludGVybmFsIGVtaXR0ZXIgaGFzIGxpc3RlbmVycy4gSWYgdGhlc2VcbiAqIGNvbmRpdGlvbnMgYXJlIG1ldCwgYSBuZXcgZnJhbWUgaXMgcmVxdWVzdGVkLiBJZiB0aGUgdGlja2VyIGhhcyBub3RcbiAqIGJlZW4gc3RhcnRlZCwgYnV0IGF1dG9TdGFydCBpcyBgdHJ1ZWAsIHRoZW4gdGhlIHRpY2tlciBzdGFydHMgbm93LFxuICogYW5kIGNvbnRpbnVlcyB3aXRoIHRoZSBwcmV2aW91cyBjb25kaXRpb25zIHRvIHJlcXVlc3QgYSBuZXcgZnJhbWUuXG4gKlxuICogQHByaXZhdGVcbiAqL1xuVGlja2VyLnByb3RvdHlwZS5fc3RhcnRJZlBvc3NpYmxlID0gZnVuY3Rpb24gX3N0YXJ0SWZQb3NzaWJsZSgpXG57XG4gICAgaWYgKHRoaXMuc3RhcnRlZClcbiAgICB7XG4gICAgICAgIHRoaXMuX3JlcXVlc3RJZk5lZWRlZCgpO1xuICAgIH1cbiAgICBlbHNlIGlmICh0aGlzLmF1dG9TdGFydClcbiAgICB7XG4gICAgICAgIHRoaXMuc3RhcnQoKTtcbiAgICB9XG59O1xuXG4vKipcbiAqIENhbGxzIHtAbGluayBtb2R1bGU6ZXZlbnRlbWl0dGVyMy5FdmVudEVtaXR0ZXIjb259IGludGVybmFsbHkgZm9yIHRoZVxuICogaW50ZXJuYWwgJ3RpY2snIGV2ZW50LiBJdCBjaGVja3MgaWYgdGhlIGVtaXR0ZXIgaGFzIGxpc3RlbmVycyxcbiAqIGFuZCBpZiBzbyBpdCByZXF1ZXN0cyBhIG5ldyBhbmltYXRpb24gZnJhbWUgYXQgdGhpcyBwb2ludC5cbiAqXG4gKiBAcGFyYW0gZm4ge0Z1bmN0aW9ufSBUaGUgbGlzdGVuZXIgZnVuY3Rpb24gdG8gYmUgYWRkZWQgZm9yIHVwZGF0ZXNcbiAqIEBwYXJhbSBbY29udGV4dF0ge0Z1bmN0aW9ufSBUaGUgbGlzdGVuZXIgY29udGV4dFxuICogQHJldHVybnMge1BJWEkudGlja2VyLlRpY2tlcn0gdGhpc1xuICovXG5UaWNrZXIucHJvdG90eXBlLmFkZCA9IGZ1bmN0aW9uIGFkZChmbiwgY29udGV4dClcbntcbiAgICB0aGlzLl9lbWl0dGVyLm9uKFRJQ0ssIGZuLCBjb250ZXh0KTtcblxuICAgIHRoaXMuX3N0YXJ0SWZQb3NzaWJsZSgpO1xuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIENhbGxzIHtAbGluayBtb2R1bGU6ZXZlbnRlbWl0dGVyMy5FdmVudEVtaXR0ZXIjb25jZX0gaW50ZXJuYWxseSBmb3IgdGhlXG4gKiBpbnRlcm5hbCAndGljaycgZXZlbnQuIEl0IGNoZWNrcyBpZiB0aGUgZW1pdHRlciBoYXMgbGlzdGVuZXJzLFxuICogYW5kIGlmIHNvIGl0IHJlcXVlc3RzIGEgbmV3IGFuaW1hdGlvbiBmcmFtZSBhdCB0aGlzIHBvaW50LlxuICpcbiAqIEBwYXJhbSBmbiB7RnVuY3Rpb259IFRoZSBsaXN0ZW5lciBmdW5jdGlvbiB0byBiZSBhZGRlZCBmb3Igb25lIHVwZGF0ZVxuICogQHBhcmFtIFtjb250ZXh0XSB7RnVuY3Rpb259IFRoZSBsaXN0ZW5lciBjb250ZXh0XG4gKiBAcmV0dXJucyB7UElYSS50aWNrZXIuVGlja2VyfSB0aGlzXG4gKi9cblRpY2tlci5wcm90b3R5cGUuYWRkT25jZSA9IGZ1bmN0aW9uIGFkZE9uY2UoZm4sIGNvbnRleHQpXG57XG4gICAgdGhpcy5fZW1pdHRlci5vbmNlKFRJQ0ssIGZuLCBjb250ZXh0KTtcblxuICAgIHRoaXMuX3N0YXJ0SWZQb3NzaWJsZSgpO1xuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIENhbGxzIHtAbGluayBtb2R1bGU6ZXZlbnRlbWl0dGVyMy5FdmVudEVtaXR0ZXIjb2ZmfSBpbnRlcm5hbGx5IGZvciAndGljaycgZXZlbnQuXG4gKiBJdCBjaGVja3MgaWYgdGhlIGVtaXR0ZXIgaGFzIGxpc3RlbmVycyBmb3IgJ3RpY2snIGV2ZW50LlxuICogSWYgaXQgZG9lcywgdGhlbiBpdCBjYW5jZWxzIHRoZSBhbmltYXRpb24gZnJhbWUuXG4gKlxuICogQHBhcmFtIFtmbl0ge0Z1bmN0aW9ufSBUaGUgbGlzdGVuZXIgZnVuY3Rpb24gdG8gYmUgcmVtb3ZlZFxuICogQHBhcmFtIFtjb250ZXh0XSB7RnVuY3Rpb259IFRoZSBsaXN0ZW5lciBjb250ZXh0IHRvIGJlIHJlbW92ZWRcbiAqIEByZXR1cm5zIHtQSVhJLnRpY2tlci5UaWNrZXJ9IHRoaXNcbiAqL1xuVGlja2VyLnByb3RvdHlwZS5yZW1vdmUgPSBmdW5jdGlvbiByZW1vdmUoZm4sIGNvbnRleHQpXG57XG4gICAgdGhpcy5fZW1pdHRlci5vZmYoVElDSywgZm4sIGNvbnRleHQpO1xuXG4gICAgaWYgKCF0aGlzLl9lbWl0dGVyLmxpc3RlbmVycyhUSUNLLCB0cnVlKSlcbiAgICB7XG4gICAgICAgIHRoaXMuX2NhbmNlbElmTmVlZGVkKCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIFN0YXJ0cyB0aGUgdGlja2VyLiBJZiB0aGUgdGlja2VyIGhhcyBsaXN0ZW5lcnNcbiAqIGEgbmV3IGFuaW1hdGlvbiBmcmFtZSBpcyByZXF1ZXN0ZWQgYXQgdGhpcyBwb2ludC5cbiAqL1xuVGlja2VyLnByb3RvdHlwZS5zdGFydCA9IGZ1bmN0aW9uIHN0YXJ0KClcbntcbiAgICBpZiAoIXRoaXMuc3RhcnRlZClcbiAgICB7XG4gICAgICAgIHRoaXMuc3RhcnRlZCA9IHRydWU7XG4gICAgICAgIHRoaXMuX3JlcXVlc3RJZk5lZWRlZCgpO1xuICAgIH1cbn07XG5cbi8qKlxuICogU3RvcHMgdGhlIHRpY2tlci4gSWYgdGhlIHRpY2tlciBoYXMgcmVxdWVzdGVkXG4gKiBhbiBhbmltYXRpb24gZnJhbWUgaXQgaXMgY2FuY2VsZWQgYXQgdGhpcyBwb2ludC5cbiAqL1xuVGlja2VyLnByb3RvdHlwZS5zdG9wID0gZnVuY3Rpb24gc3RvcCgpXG57XG4gICAgaWYgKHRoaXMuc3RhcnRlZClcbiAgICB7XG4gICAgICAgIHRoaXMuc3RhcnRlZCA9IGZhbHNlO1xuICAgICAgICB0aGlzLl9jYW5jZWxJZk5lZWRlZCgpO1xuICAgIH1cbn07XG5cbi8qKlxuICogVHJpZ2dlcnMgYW4gdXBkYXRlLiBBbiB1cGRhdGUgZW50YWlscyBzZXR0aW5nIHRoZVxuICogY3VycmVudCB7QGxpbmsgUElYSS50aWNrZXIuVGlja2VyI2VsYXBzZWRNU30sXG4gKiB0aGUgY3VycmVudCB7QGxpbmsgUElYSS50aWNrZXIuVGlja2VyI2RlbHRhVGltZX0sXG4gKiBpbnZva2luZyBhbGwgbGlzdGVuZXJzIHdpdGggY3VycmVudCBkZWx0YVRpbWUsXG4gKiBhbmQgdGhlbiBmaW5hbGx5IHNldHRpbmcge0BsaW5rIFBJWEkudGlja2VyLlRpY2tlciNsYXN0VGltZX1cbiAqIHdpdGggdGhlIHZhbHVlIG9mIGN1cnJlbnRUaW1lIHRoYXQgd2FzIHByb3ZpZGVkLlxuICogVGhpcyBtZXRob2Qgd2lsbCBiZSBjYWxsZWQgYXV0b21hdGljYWxseSBieSBhbmltYXRpb25cbiAqIGZyYW1lIGNhbGxiYWNrcyBpZiB0aGUgdGlja2VyIGluc3RhbmNlIGhhcyBiZWVuIHN0YXJ0ZWRcbiAqIGFuZCBsaXN0ZW5lcnMgYXJlIGFkZGVkLlxuICpcbiAqIEBwYXJhbSBbY3VycmVudFRpbWU9cGVyZm9ybWFuY2Uubm93KCldIHtET01IaWdoUmVzVGltZVN0YW1wfG51bWJlcn0gdGhlIGN1cnJlbnQgdGltZSBvZiBleGVjdXRpb25cbiAqL1xuVGlja2VyLnByb3RvdHlwZS51cGRhdGUgPSBmdW5jdGlvbiB1cGRhdGUoY3VycmVudFRpbWUpXG57XG4gICAgdmFyIGVsYXBzZWRNUztcblxuICAgIC8vIEFsbG93IGNhbGxpbmcgdXBkYXRlIGRpcmVjdGx5IHdpdGggZGVmYXVsdCBjdXJyZW50VGltZS5cbiAgICBjdXJyZW50VGltZSA9IGN1cnJlbnRUaW1lIHx8IHBlcmZvcm1hbmNlLm5vdygpO1xuICAgIC8vIFNhdmUgdW5jYXBwZWQgZWxhcHNlZE1TIGZvciBtZWFzdXJlbWVudFxuICAgIGVsYXBzZWRNUyA9IHRoaXMuZWxhcHNlZE1TID0gY3VycmVudFRpbWUgLSB0aGlzLmxhc3RUaW1lO1xuXG4gICAgLy8gY2FwIHRoZSBtaWxsaXNlY29uZHMgZWxhcHNlZCB1c2VkIGZvciBkZWx0YVRpbWVcbiAgICBpZiAoZWxhcHNlZE1TID4gdGhpcy5fbWF4RWxhcHNlZE1TKVxuICAgIHtcbiAgICAgICAgZWxhcHNlZE1TID0gdGhpcy5fbWF4RWxhcHNlZE1TO1xuICAgIH1cblxuICAgIHRoaXMuZGVsdGFUaW1lID0gZWxhcHNlZE1TICogQ09OU1QuVEFSR0VUX0ZQTVMgKiB0aGlzLnNwZWVkO1xuXG4gICAgLy8gSW52b2tlIGxpc3RlbmVycyBhZGRlZCB0byBpbnRlcm5hbCBlbWl0dGVyXG4gICAgdGhpcy5fZW1pdHRlci5lbWl0KFRJQ0ssIHRoaXMuZGVsdGFUaW1lKTtcblxuICAgIHRoaXMubGFzdFRpbWUgPSBjdXJyZW50VGltZTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gVGlja2VyO1xuIiwidmFyIFRpY2tlciA9IHJlcXVpcmUoJy4vVGlja2VyJyk7XG5cbi8qKlxuICogVGhlIHNoYXJlZCB0aWNrZXIgaW5zdGFuY2UgdXNlZCBieSB7QGxpbmsgUElYSS5leHRyYXMuTW92aWVDbGlwfS5cbiAqIGFuZCBieSB7QGxpbmsgUElYSS5pbnRlcmFjdGlvbi5JbnRlcmFjdGlvbk1hbmFnZXJ9LlxuICogVGhlIHByb3BlcnR5IHtAbGluayBQSVhJLnRpY2tlci5UaWNrZXIjYXV0b1N0YXJ0fSBpcyBzZXQgdG8gYHRydWVgXG4gKiBmb3IgdGhpcyBpbnN0YW5jZS4gUGxlYXNlIGZvbGxvdyB0aGUgZXhhbXBsZXMgZm9yIHVzYWdlLCBpbmNsdWRpbmdcbiAqIGhvdyB0byBvcHQtb3V0IG9mIGF1dG8tc3RhcnRpbmcgdGhlIHNoYXJlZCB0aWNrZXIuXG4gKlxuICogQGV4YW1wbGVcbiAqIHZhciB0aWNrZXIgPSBQSVhJLnRpY2tlci5zaGFyZWQ7XG4gKiAvLyBTZXQgdGhpcyB0byBwcmV2ZW50IHN0YXJ0aW5nIHRoaXMgdGlja2VyIHdoZW4gbGlzdGVuZXJzIGFyZSBhZGRlZC5cbiAqIC8vIEJ5IGRlZmF1bHQgdGhpcyBpcyB0cnVlIG9ubHkgZm9yIHRoZSBQSVhJLnRpY2tlci5zaGFyZWQgaW5zdGFuY2UuXG4gKiB0aWNrZXIuYXV0b1N0YXJ0ID0gZmFsc2U7XG4gKiAvLyBGWUksIGNhbGwgdGhpcyB0byBlbnN1cmUgdGhlIHRpY2tlciBpcyBzdG9wcGVkLiBJdCBzaG91bGQgYmUgc3RvcHBlZFxuICogLy8gaWYgeW91IGhhdmUgbm90IGF0dGVtcHRlZCB0byByZW5kZXIgYW55dGhpbmcgeWV0LlxuICogdGlja2VyLnN0b3AoKTtcbiAqIC8vIENhbGwgdGhpcyB3aGVuIHlvdSBhcmUgcmVhZHkgZm9yIGEgcnVubmluZyBzaGFyZWQgdGlja2VyLlxuICogdGlja2VyLnN0YXJ0KCk7XG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIFlvdSBtYXkgdXNlIHRoZSBzaGFyZWQgdGlja2VyIHRvIHJlbmRlci4uLlxuICogdmFyIHJlbmRlcmVyID0gUElYSS5hdXRvRGV0ZWN0UmVuZGVyZXIoODAwLCA2MDApO1xuICogdmFyIHN0YWdlID0gbmV3IFBJWEkuQ29udGFpbmVyKCk7XG4gKiB2YXIgaW50ZXJhY3Rpb25NYW5hZ2VyID0gUElYSS5pbnRlcmFjdGlvbi5JbnRlcmFjdGlvbk1hbmFnZXIocmVuZGVyZXIpO1xuICogZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChyZW5kZXJlci52aWV3KTtcbiAqIHRpY2tlci5hZGQoZnVuY3Rpb24gKHRpbWUpIHtcbiAqICAgICByZW5kZXJlci5yZW5kZXIoc3RhZ2UpO1xuICogfSk7XG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIE9yIHlvdSBjYW4ganVzdCB1cGRhdGUgaXQgbWFudWFsbHkuXG4gKiB0aWNrZXIuYXV0b1N0YXJ0ID0gZmFsc2U7XG4gKiB0aWNrZXIuc3RvcCgpO1xuICogZnVuY3Rpb24gYW5pbWF0ZSh0aW1lKSB7XG4gKiAgICAgdGlja2VyLnVwZGF0ZSh0aW1lKTtcbiAqICAgICByZW5kZXJlci5yZW5kZXIoc3RhZ2UpO1xuICogICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZShhbmltYXRlKTtcbiAqIH1cbiAqIGFuaW1hdGUocGVyZm9ybWFuY2Uubm93KCkpO1xuICpcbiAqIEB0eXBlIHtQSVhJLnRpY2tlci5UaWNrZXJ9XG4gKiBAbWVtYmVyb2YgUElYSS50aWNrZXJcbiAqL1xudmFyIHNoYXJlZCA9IG5ldyBUaWNrZXIoKTtcbnNoYXJlZC5hdXRvU3RhcnQgPSB0cnVlO1xuXG4vKipcbiAqIEBuYW1lc3BhY2UgUElYSS50aWNrZXJcbiAqL1xubW9kdWxlLmV4cG9ydHMgPSB7XG4gICAgc2hhcmVkOiBzaGFyZWQsXG4gICAgVGlja2VyOiBUaWNrZXJcbn07XG4iLCIvKipcbiAqIEdlbmVyaWMgTWFzayBTdGFjayBkYXRhIHN0cnVjdHVyZVxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICovXG5cbnZhciBHTF9NQVAgPSB7fTtcblxuXG52YXIgY3JlYXRlSW5kaWNlc0ZvclF1YWRzID0gZnVuY3Rpb24gKHNpemUpXG57XG4gICAgLy8gdGhlIHRvdGFsIG51bWJlciBvZiBpbmRpY2VzIGluIG91ciBhcnJheSwgdGhlcmUgYXJlIDYgcG9pbnRzIHBlciBxdWFkLlxuICAgXG4gICAgdmFyIHRvdGFsSW5kaWNlcyA9IHNpemUgKiA2O1xuXG4gICAgdmFyIGluZGljZXMgPSBuZXcgVWludDE2QXJyYXkodG90YWxJbmRpY2VzKTtcblxuXHQvLyBmaWxsIHRoZSBpbmRpY2VzIHdpdGggdGhlIHF1YWRzIHRvIGRyYXdcbiAgICBmb3IgKHZhciBpPTAsIGo9MDsgaSA8IHRvdGFsSW5kaWNlczsgaSArPSA2LCBqICs9IDQpXG4gICAge1xuICAgICAgICBpbmRpY2VzW2kgKyAwXSA9IGogKyAwO1xuICAgICAgICBpbmRpY2VzW2kgKyAxXSA9IGogKyAxO1xuICAgICAgICBpbmRpY2VzW2kgKyAyXSA9IGogKyAyO1xuICAgICAgICBpbmRpY2VzW2kgKyAzXSA9IGogKyAwO1xuICAgICAgICBpbmRpY2VzW2kgKyA0XSA9IGogKyAyO1xuICAgICAgICBpbmRpY2VzW2kgKyA1XSA9IGogKyAzO1xuICAgIH1cblxuICAgIHJldHVybiBpbmRpY2VzO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBjcmVhdGVJbmRpY2VzRm9yUXVhZHM7IiwidmFyIENPTlNUID0gcmVxdWlyZSgnLi4vY29uc3QnKTtcblxuLyoqXG4gKiBAbmFtZXNwYWNlIFBJWEkudXRpbHNcbiAqL1xudmFyIHV0aWxzID0gbW9kdWxlLmV4cG9ydHMgPSB7XG4gICAgX3VpZDogMCxcbiAgICBfc2FpZEhlbGxvOiBmYWxzZSxcblxuICAgIEV2ZW50RW1pdHRlcjogICByZXF1aXJlKCdldmVudGVtaXR0ZXIzJyksXG4gICAgcGx1Z2luVGFyZ2V0OiAgIHJlcXVpcmUoJy4vcGx1Z2luVGFyZ2V0JyksXG4gICAgYXN5bmM6ICAgICAgICAgIHJlcXVpcmUoJ2FzeW5jJyksXG5cbiAgICAvKipcbiAgICAgKiBHZXRzIHRoZSBuZXh0IHVuaXF1ZSBpZGVudGlmaWVyXG4gICAgICpcbiAgICAgKiBAcmV0dXJuIHtudW1iZXJ9IFRoZSBuZXh0IHVuaXF1ZSBpZGVudGlmaWVyIHRvIHVzZS5cbiAgICAgKi9cbiAgICB1aWQ6IGZ1bmN0aW9uICgpXG4gICAge1xuICAgICAgICByZXR1cm4gKyt1dGlscy5fdWlkO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBDb252ZXJ0cyBhIGhleCBjb2xvciBudW1iZXIgdG8gYW4gW1IsIEcsIEJdIGFycmF5XG4gICAgICpcbiAgICAgKiBAcGFyYW0gaGV4IHtudW1iZXJ9XG4gICAgICogQHBhcmFtICB7bnVtYmVyW119IFtvdXQ9W11dXG4gICAgICogQHJldHVybiB7bnVtYmVyW119IEFuIGFycmF5IHJlcHJlc2VudGluZyB0aGUgW1IsIEcsIEJdIG9mIHRoZSBjb2xvci5cbiAgICAgKi9cbiAgICBoZXgycmdiOiBmdW5jdGlvbiAoaGV4LCBvdXQpXG4gICAge1xuICAgICAgICBvdXQgPSBvdXQgfHwgW107XG5cbiAgICAgICAgb3V0WzBdID0gKGhleCA+PiAxNiAmIDB4RkYpIC8gMjU1O1xuICAgICAgICBvdXRbMV0gPSAoaGV4ID4+IDggJiAweEZGKSAvIDI1NTtcbiAgICAgICAgb3V0WzJdID0gKGhleCAmIDB4RkYpIC8gMjU1O1xuXG4gICAgICAgIHJldHVybiBvdXQ7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIENvbnZlcnRzIGEgaGV4IGNvbG9yIG51bWJlciB0byBhIHN0cmluZy5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBoZXgge251bWJlcn1cbiAgICAgKiBAcmV0dXJuIHtzdHJpbmd9IFRoZSBzdHJpbmcgY29sb3IuXG4gICAgICovXG4gICAgaGV4MnN0cmluZzogZnVuY3Rpb24gKGhleClcbiAgICB7XG4gICAgICAgIGhleCA9IGhleC50b1N0cmluZygxNik7XG4gICAgICAgIGhleCA9ICcwMDAwMDAnLnN1YnN0cigwLCA2IC0gaGV4Lmxlbmd0aCkgKyBoZXg7XG5cbiAgICAgICAgcmV0dXJuICcjJyArIGhleDtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQ29udmVydHMgYSBjb2xvciBhcyBhbiBbUiwgRywgQl0gYXJyYXkgdG8gYSBoZXggbnVtYmVyXG4gICAgICpcbiAgICAgKiBAcGFyYW0gcmdiIHtudW1iZXJbXX1cbiAgICAgKiBAcmV0dXJuIHtudW1iZXJ9IFRoZSBjb2xvciBudW1iZXJcbiAgICAgKi9cbiAgICByZ2IyaGV4OiBmdW5jdGlvbiAocmdiKVxuICAgIHtcbiAgICAgICAgcmV0dXJuICgocmdiWzBdKjI1NSA8PCAxNikgKyAocmdiWzFdKjI1NSA8PCA4KSArIHJnYlsyXSoyNTUpO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBDaGVja3Mgd2hldGhlciB0aGUgQ2FudmFzIEJsZW5kTW9kZXMgYXJlIHN1cHBvcnRlZCBieSB0aGUgY3VycmVudCBicm93c2VyXG4gICAgICpcbiAgICAgKiBAcmV0dXJuIHtib29sZWFufSB3aGV0aGVyIHRoZXkgYXJlIHN1cHBvcnRlZFxuICAgICAqL1xuICAgIGNhblVzZU5ld0NhbnZhc0JsZW5kTW9kZXM6IGZ1bmN0aW9uICgpXG4gICAge1xuICAgICAgICBpZiAodHlwZW9mIGRvY3VtZW50ID09PSAndW5kZWZpbmVkJylcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIHBuZ0hlYWQgPSAnZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFBUUFBQUFCQVFNQUFBREQ4cDJPQUFBQUExQk1WRVgvJztcbiAgICAgICAgdmFyIHBuZ0VuZCA9ICdBQUFBQ2tsRVFWUUkxMk5nQUFBQUFnQUI0aUc4TXdBQUFBQkpSVTVFcmtKZ2dnPT0nO1xuXG4gICAgICAgIHZhciBtYWdlbnRhID0gbmV3IEltYWdlKCk7XG4gICAgICAgIG1hZ2VudGEuc3JjID0gcG5nSGVhZCArICdBUDgwNE9hNicgKyBwbmdFbmQ7XG5cbiAgICAgICAgdmFyIHllbGxvdyA9IG5ldyBJbWFnZSgpO1xuICAgICAgICB5ZWxsb3cuc3JjID0gcG5nSGVhZCArICcvd0NLeHZSRicgKyBwbmdFbmQ7XG5cbiAgICAgICAgdmFyIGNhbnZhcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NhbnZhcycpO1xuICAgICAgICBjYW52YXMud2lkdGggPSA2O1xuICAgICAgICBjYW52YXMuaGVpZ2h0ID0gMTtcblxuICAgICAgICB2YXIgY29udGV4dCA9IGNhbnZhcy5nZXRDb250ZXh0KCcyZCcpO1xuICAgICAgICBjb250ZXh0Lmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbiA9ICdtdWx0aXBseSc7XG4gICAgICAgIGNvbnRleHQuZHJhd0ltYWdlKG1hZ2VudGEsIDAsIDApO1xuICAgICAgICBjb250ZXh0LmRyYXdJbWFnZSh5ZWxsb3csIDIsIDApO1xuXG4gICAgICAgIHZhciBkYXRhID0gY29udGV4dC5nZXRJbWFnZURhdGEoMiwwLDEsMSkuZGF0YTtcblxuICAgICAgICByZXR1cm4gKGRhdGFbMF0gPT09IDI1NSAmJiBkYXRhWzFdID09PSAwICYmIGRhdGFbMl0gPT09IDApO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBHaXZlbiBhIG51bWJlciwgdGhpcyBmdW5jdGlvbiByZXR1cm5zIHRoZSBjbG9zZXN0IG51bWJlciB0aGF0IGlzIGEgcG93ZXIgb2YgdHdvXG4gICAgICogdGhpcyBmdW5jdGlvbiBpcyB0YWtlbiBmcm9tIFN0YXJsaW5nIEZyYW1ld29yayBhcyBpdHMgcHJldHR5IG5lYXQgOylcbiAgICAgKlxuICAgICAqIEBwYXJhbSBudW1iZXIge251bWJlcn1cbiAgICAgKiBAcmV0dXJuIHtudW1iZXJ9IHRoZSBjbG9zZXN0IG51bWJlciB0aGF0IGlzIGEgcG93ZXIgb2YgdHdvXG4gICAgICovXG4gICAgZ2V0TmV4dFBvd2VyT2ZUd286IGZ1bmN0aW9uIChudW1iZXIpXG4gICAge1xuICAgICAgICAvLyBzZWU6IGh0dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvUG93ZXJfb2ZfdHdvI0Zhc3RfYWxnb3JpdGhtX3RvX2NoZWNrX2lmX2FfcG9zaXRpdmVfbnVtYmVyX2lzX2FfcG93ZXJfb2ZfdHdvXG4gICAgICAgIGlmIChudW1iZXIgPiAwICYmIChudW1iZXIgJiAobnVtYmVyIC0gMSkpID09PSAwKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gbnVtYmVyO1xuICAgICAgICB9XG4gICAgICAgIGVsc2VcbiAgICAgICAge1xuICAgICAgICAgICAgdmFyIHJlc3VsdCA9IDE7XG5cbiAgICAgICAgICAgIHdoaWxlIChyZXN1bHQgPCBudW1iZXIpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgcmVzdWx0IDw8PSAxO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIGNoZWNrcyBpZiB0aGUgZ2l2ZW4gd2lkdGggYW5kIGhlaWdodCBtYWtlIGEgcG93ZXIgb2YgdHdvIHJlY3RhbmdsZVxuICAgICAqXG4gICAgICogQHBhcmFtIHdpZHRoIHtudW1iZXJ9XG4gICAgICogQHBhcmFtIGhlaWdodCB7bnVtYmVyfVxuICAgICAqIEByZXR1cm4ge2Jvb2xlYW59XG4gICAgICovXG4gICAgaXNQb3dlck9mVHdvOiBmdW5jdGlvbiAod2lkdGgsIGhlaWdodClcbiAgICB7XG4gICAgICAgIHJldHVybiAod2lkdGggPiAwICYmICh3aWR0aCAmICh3aWR0aCAtIDEpKSA9PT0gMCAmJiBoZWlnaHQgPiAwICYmIChoZWlnaHQgJiAoaGVpZ2h0IC0gMSkpID09PSAwKTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogZ2V0IHRoZSByZXNvbHV0aW9uIG9mIGFuIGFzc2V0IGJ5IGxvb2tpbmcgZm9yIHRoZSBwcmVmaXhcbiAgICAgKiB1c2VkIGJ5IHNwcml0ZXNoZWV0cyBhbmQgaW1hZ2UgdXJsc1xuICAgICAqXG4gICAgICogQHBhcmFtIHVybCB7c3RyaW5nfSB0aGUgaW1hZ2UgcGF0aFxuICAgICAqIEByZXR1cm4ge251bWJlcn1cbiAgICAgKi9cbiAgICBnZXRSZXNvbHV0aW9uT2ZVcmw6IGZ1bmN0aW9uICh1cmwpXG4gICAge1xuICAgICAgICB2YXIgcmVzb2x1dGlvbiA9IENPTlNULlJFVElOQV9QUkVGSVguZXhlYyh1cmwpO1xuXG4gICAgICAgIGlmIChyZXNvbHV0aW9uKVxuICAgICAgICB7XG4gICAgICAgICAgIHJldHVybiBwYXJzZUZsb2F0KHJlc29sdXRpb25bMV0pO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIDE7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIExvZ3Mgb3V0IHRoZSB2ZXJzaW9uIGFuZCByZW5kZXJlciBpbmZvcm1hdGlvbiBmb3IgdGhpcyBydW5uaW5nIGluc3RhbmNlIG9mIFBJWEkuXG4gICAgICogSWYgeW91IGRvbid0IHdhbnQgdG8gc2VlIHRoaXMgbWVzc2FnZSB5b3UgY2FuIHNldCBgUElYSS51dGlscy5fc2FpZEhlbGxvID0gdHJ1ZTtgXG4gICAgICogc28gdGhlIGxpYnJhcnkgdGhpbmtzIGl0IGFscmVhZHkgc2FpZCBpdC4gS2VlcCBpbiBtaW5kIHRoYXQgZG9pbmcgdGhhdCB3aWxsIGZvcmV2ZXJcbiAgICAgKiBtYWtlcyB5b3UgYSBqZXJrIGZhY2UuXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gdHlwZSAtIFRoZSBzdHJpbmcgcmVuZGVyZXIgdHlwZSB0byBsb2cuXG4gICAgICogQGNvbnN0YW50XG4gICAgICogQHN0YXRpY1xuICAgICAqL1xuICAgIHNheUhlbGxvOiBmdW5jdGlvbiAodHlwZSlcbiAgICB7XG4gICAgICAgIGlmICh1dGlscy5fc2FpZEhlbGxvKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAobmF2aWdhdG9yLnVzZXJBZ2VudC50b0xvd2VyQ2FzZSgpLmluZGV4T2YoJ2Nocm9tZScpID4gLTEpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHZhciBhcmdzID0gW1xuICAgICAgICAgICAgICAgICdcXG4gJWMgJWMgJWMgUGl4aS5qcyAnICsgQ09OU1QuVkVSU0lPTiArICcgLSDinLAgJyArIHR5cGUgKyAnIOKcsCAgJWMgJyArICcgJWMgJyArICcgaHR0cDovL3d3dy5waXhpanMuY29tLyAgJWMgJWMg4pmlJWPimaUlY+KZpSBcXG5cXG4nLFxuICAgICAgICAgICAgICAgICdiYWNrZ3JvdW5kOiAjZmY2NmE1OyBwYWRkaW5nOjVweCAwOycsXG4gICAgICAgICAgICAgICAgJ2JhY2tncm91bmQ6ICNmZjY2YTU7IHBhZGRpbmc6NXB4IDA7JyxcbiAgICAgICAgICAgICAgICAnY29sb3I6ICNmZjY2YTU7IGJhY2tncm91bmQ6ICMwMzAzMDc7IHBhZGRpbmc6NXB4IDA7JyxcbiAgICAgICAgICAgICAgICAnYmFja2dyb3VuZDogI2ZmNjZhNTsgcGFkZGluZzo1cHggMDsnLFxuICAgICAgICAgICAgICAgICdiYWNrZ3JvdW5kOiAjZmZjM2RjOyBwYWRkaW5nOjVweCAwOycsXG4gICAgICAgICAgICAgICAgJ2JhY2tncm91bmQ6ICNmZjY2YTU7IHBhZGRpbmc6NXB4IDA7JyxcbiAgICAgICAgICAgICAgICAnY29sb3I6ICNmZjI0MjQ7IGJhY2tncm91bmQ6ICNmZmY7IHBhZGRpbmc6NXB4IDA7JyxcbiAgICAgICAgICAgICAgICAnY29sb3I6ICNmZjI0MjQ7IGJhY2tncm91bmQ6ICNmZmY7IHBhZGRpbmc6NXB4IDA7JyxcbiAgICAgICAgICAgICAgICAnY29sb3I6ICNmZjI0MjQ7IGJhY2tncm91bmQ6ICNmZmY7IHBhZGRpbmc6NXB4IDA7J1xuICAgICAgICAgICAgXTtcblxuICAgICAgICAgICAgd2luZG93LmNvbnNvbGUubG9nLmFwcGx5KGNvbnNvbGUsIGFyZ3MpOyAvL2pzaGludCBpZ25vcmU6bGluZVxuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHdpbmRvdy5jb25zb2xlKVxuICAgICAgICB7XG4gICAgICAgICAgICB3aW5kb3cuY29uc29sZS5sb2coJ1BpeGkuanMgJyArIENPTlNULlZFUlNJT04gKyAnIC0gJyArIHR5cGUgKyAnIC0gaHR0cDovL3d3dy5waXhpanMuY29tLycpOyAvL2pzaGludCBpZ25vcmU6bGluZVxuICAgICAgICB9XG5cbiAgICAgICAgdXRpbHMuX3NhaWRIZWxsbyA9IHRydWU7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIEhlbHBlciBmb3IgY2hlY2tpbmcgZm9yIHdlYmdsIHN1cHBvcnRcbiAgICAgKlxuICAgICAqIEByZXR1cm4ge2Jvb2xlYW59XG4gICAgICovXG4gICAgaXNXZWJHTFN1cHBvcnRlZDogZnVuY3Rpb24gKClcbiAgICB7XG4gICAgICAgIHZhciBjb250ZXh0T3B0aW9ucyA9IHsgc3RlbmNpbDogdHJ1ZSB9O1xuICAgICAgICB0cnlcbiAgICAgICAge1xuICAgICAgICAgICAgaWYgKCF3aW5kb3cuV2ViR0xSZW5kZXJpbmdDb250ZXh0KVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdmFyIGNhbnZhcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NhbnZhcycpLFxuICAgICAgICAgICAgICAgIGdsID0gY2FudmFzLmdldENvbnRleHQoJ3dlYmdsJywgY29udGV4dE9wdGlvbnMpIHx8IGNhbnZhcy5nZXRDb250ZXh0KCdleHBlcmltZW50YWwtd2ViZ2wnLCBjb250ZXh0T3B0aW9ucyk7XG5cbiAgICAgICAgICAgIHJldHVybiAhIShnbCAmJiBnbC5nZXRDb250ZXh0QXR0cmlidXRlcygpLnN0ZW5jaWwpO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyBzaWduIG9mIG51bWJlclxuICAgICAqXG4gICAgICogQHBhcmFtIG4ge251bWJlcn1cbiAgICAgKiBAcmV0dXJucyB7bnVtYmVyfSAwIGlmIG4gaXMgMCwgLTEgaWYgbiBpcyBuZWdhdGl2ZSwgMSBpZiBuIGkgcG9zaXRpdmVcbiAgICAgKi9cbiAgICBzaWduOiBmdW5jdGlvbiAobilcbiAgICB7XG4gICAgICAgIHJldHVybiBuID8gKG4gPCAwID8gLTEgOiAxKSA6IDA7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIHJlbW92ZUl0ZW1zXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge2FycmF5fSBhcnIgVGhlIHRhcmdldCBhcnJheVxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBzdGFydElkeCBUaGUgaW5kZXggdG8gYmVnaW4gcmVtb3ZpbmcgZnJvbSAoaW5jbHVzaXZlKVxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSByZW1vdmVDb3VudCBIb3cgbWFueSBpdGVtcyB0byByZW1vdmVcbiAgICAgKi9cbiAgICByZW1vdmVJdGVtczogZnVuY3Rpb24gKGFyciwgc3RhcnRJZHgsIHJlbW92ZUNvdW50KVxuICAgIHtcbiAgICAgICAgdmFyIGxlbmd0aCA9IGFyci5sZW5ndGg7XG5cbiAgICAgICAgaWYgKHN0YXJ0SWR4ID49IGxlbmd0aCB8fCByZW1vdmVDb3VudCA9PT0gMClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgcmVtb3ZlQ291bnQgPSAoc3RhcnRJZHgrcmVtb3ZlQ291bnQgPiBsZW5ndGggPyBsZW5ndGgtc3RhcnRJZHggOiByZW1vdmVDb3VudCk7XG4gICAgICAgIGZvciAodmFyIGkgPSBzdGFydElkeCwgbGVuID0gbGVuZ3RoLXJlbW92ZUNvdW50OyBpIDwgbGVuOyArK2kpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGFycltpXSA9IGFycltpICsgcmVtb3ZlQ291bnRdO1xuICAgICAgICB9XG5cbiAgICAgICAgYXJyLmxlbmd0aCA9IGxlbjtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQHRvZG8gRGVzY3JpYmUgcHJvcGVydHkgdXNhZ2VcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIFRleHR1cmVDYWNoZToge30sXG5cbiAgICAvKipcbiAgICAgKiBAdG9kbyBEZXNjcmliZSBwcm9wZXJ0eSB1c2FnZVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgQmFzZVRleHR1cmVDYWNoZToge31cbn07XG4iLCIvKipcbiAqIE1peGlucyBmdW5jdGlvbmFsaXR5IHRvIG1ha2UgYW4gb2JqZWN0IGhhdmUgXCJwbHVnaW5zXCIuXG4gKlxuICogQG1peGluXG4gKiBAbWVtYmVyb2YgUElYSS51dGlsc1xuICogQHBhcmFtIG9iaiB7b2JqZWN0fSBUaGUgb2JqZWN0IHRvIG1peCBpbnRvLlxuICogQGV4YW1wbGVcbiAqICAgICAgZnVuY3Rpb24gTXlPYmplY3QoKSB7fVxuICpcbiAqICAgICAgcGx1Z2luVGFyZ2V0Lm1peGluKE15T2JqZWN0KTtcbiAqL1xuZnVuY3Rpb24gcGx1Z2luVGFyZ2V0KG9iailcbntcbiAgICBvYmouX19wbHVnaW5zID0ge307XG5cbiAgICAvKipcbiAgICAgKiBBZGRzIGEgcGx1Z2luIHRvIGFuIG9iamVjdFxuICAgICAqXG4gICAgICogQHBhcmFtIHBsdWdpbk5hbWUge3N0cmluZ30gVGhlIGV2ZW50cyB0aGF0IHNob3VsZCBiZSBsaXN0ZWQuXG4gICAgICogQHBhcmFtIGN0b3Ige0Z1bmN0aW9ufSBUaGUgY29uc3RydWN0b3IgZnVuY3Rpb24gZm9yIHRoZSBwbHVnaW4uXG4gICAgICovXG4gICAgb2JqLnJlZ2lzdGVyUGx1Z2luID0gZnVuY3Rpb24gKHBsdWdpbk5hbWUsIGN0b3IpXG4gICAge1xuICAgICAgICBvYmouX19wbHVnaW5zW3BsdWdpbk5hbWVdID0gY3RvcjtcbiAgICB9O1xuXG4gICAgLyoqXG4gICAgICogSW5zdGFudGlhdGVzIGFsbCB0aGUgcGx1Z2lucyBvZiB0aGlzIG9iamVjdFxuICAgICAqXG4gICAgICovXG4gICAgb2JqLnByb3RvdHlwZS5pbml0UGx1Z2lucyA9IGZ1bmN0aW9uICgpXG4gICAge1xuICAgICAgICB0aGlzLnBsdWdpbnMgPSB0aGlzLnBsdWdpbnMgfHwge307XG5cbiAgICAgICAgZm9yICh2YXIgbyBpbiBvYmouX19wbHVnaW5zKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnBsdWdpbnNbb10gPSBuZXcgKG9iai5fX3BsdWdpbnNbb10pKHRoaXMpO1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIC8qKlxuICAgICAqIFJlbW92ZXMgYWxsIHRoZSBwbHVnaW5zIG9mIHRoaXMgb2JqZWN0XG4gICAgICpcbiAgICAgKi9cbiAgICBvYmoucHJvdG90eXBlLmRlc3Ryb3lQbHVnaW5zID0gZnVuY3Rpb24gKClcbiAgICB7XG4gICAgICAgIGZvciAodmFyIG8gaW4gdGhpcy5wbHVnaW5zKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnBsdWdpbnNbb10uZGVzdHJveSgpO1xuICAgICAgICAgICAgdGhpcy5wbHVnaW5zW29dID0gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMucGx1Z2lucyA9IG51bGw7XG4gICAgfTtcbn1cblxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgICAvKipcbiAgICAgKiBNaXhlcyBpbiB0aGUgcHJvcGVydGllcyBvZiB0aGUgcGx1Z2luVGFyZ2V0IGludG8gYW5vdGhlciBvYmplY3RcbiAgICAgKlxuICAgICAqIEBwYXJhbSBvYmplY3Qge29iamVjdH0gVGhlIG9iaiB0byBtaXggaW50b1xuICAgICAqL1xuICAgIG1peGluOiBmdW5jdGlvbiBtaXhpbihvYmopXG4gICAge1xuICAgICAgICBwbHVnaW5UYXJnZXQob2JqKTtcbiAgICB9XG59O1xuIiwiLypnbG9iYWwgY29uc29sZSAqL1xudmFyIGNvcmUgPSByZXF1aXJlKCcuL2NvcmUnKSxcbiAgICBtZXNoID0gcmVxdWlyZSgnLi9tZXNoJyksXG4gICAgZXh0cmFzID0gcmVxdWlyZSgnLi9leHRyYXMnKSxcbiAgICBmaWx0ZXJzID0gcmVxdWlyZSgnLi9maWx0ZXJzJyk7XG5cbi8qKlxuICogQGNsYXNzXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgU3ByaXRlQmF0Y2hcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAc2VlIFBJWEkuUGFydGljbGVDb250YWluZXJcbiAqIEB0aHJvd3Mge1JlZmVyZW5jZUVycm9yfSBTcHJpdGVCYXRjaCBkb2VzIG5vdCBleGlzdCBhbnkgbW9yZSwgcGxlYXNlIHVzZSB0aGUgbmV3IFBhcnRpY2xlQ29udGFpbmVyIGluc3RlYWQuXG4gKiBAZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDMuMC4wXG4gKi9cbmNvcmUuU3ByaXRlQmF0Y2ggPSBmdW5jdGlvbigpXG57XG4gICAgdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKCdTcHJpdGVCYXRjaCBkb2VzIG5vdCBleGlzdCBhbnkgbW9yZSwgcGxlYXNlIHVzZSB0aGUgbmV3IFBhcnRpY2xlQ29udGFpbmVyIGluc3RlYWQuJyk7XG59O1xuXG4vKipcbiAqIEBjbGFzc1xuICogQHByaXZhdGVcbiAqIEBuYW1lIEFzc2V0TG9hZGVyXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHNlZSBQSVhJLmxvYWRlcnMuTG9hZGVyXG4gKiBAdGhyb3dzIHtSZWZlcmVuY2VFcnJvcn0gVGhlIGxvYWRlciBzeXN0ZW0gd2FzIG92ZXJoYXVsZWQgaW4gcGl4aSB2MywgcGxlYXNlIHNlZSB0aGUgbmV3IFBJWEkubG9hZGVycy5Mb2FkZXIgY2xhc3MuXG4gKiBAZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDMuMC4wXG4gKi9cbmNvcmUuQXNzZXRMb2FkZXIgPSBmdW5jdGlvbigpXG57XG4gICAgdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKCdUaGUgbG9hZGVyIHN5c3RlbSB3YXMgb3ZlcmhhdWxlZCBpbiBwaXhpIHYzLCBwbGVhc2Ugc2VlIHRoZSBuZXcgUElYSS5sb2FkZXJzLkxvYWRlciBjbGFzcy4nKTtcbn07XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGNvcmUsIHtcblxuICAgIC8qKlxuICAgICAqIEBjbGFzc1xuICAgICAqIEBwcml2YXRlXG4gICAgICogQG5hbWUgU3RhZ2VcbiAgICAgKiBAbWVtYmVyb2YgUElYSVxuICAgICAqIEBzZWUgUElYSS5Db250YWluZXJcbiAgICAgKiBAZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDMuMC4wXG4gICAgICovXG4gICAgU3RhZ2U6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbigpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignWW91IGRvIG5vdCBuZWVkIHRvIHVzZSBhIFBJWEkgU3RhZ2UgYW55IG1vcmUsIHlvdSBjYW4gc2ltcGx5IHJlbmRlciBhbnkgY29udGFpbmVyLicpO1xuICAgICAgICAgICAgcmV0dXJuIGNvcmUuQ29udGFpbmVyO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIEBjbGFzc1xuICAgICAqIEBwcml2YXRlXG4gICAgICogQG5hbWUgRGlzcGxheU9iamVjdENvbnRhaW5lclxuICAgICAqIEBtZW1iZXJvZiBQSVhJXG4gICAgICogQHNlZSBQSVhJLkNvbnRhaW5lclxuICAgICAqIEBkZXByZWNhdGVkIHNpbmNlIHZlcnNpb24gMy4wLjBcbiAgICAgKi9cbiAgICBEaXNwbGF5T2JqZWN0Q29udGFpbmVyOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24oKVxuICAgICAgICB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ0Rpc3BsYXlPYmplY3RDb250YWluZXIgaGFzIGJlZW4gc2hvcnRlbmVkIHRvIENvbnRhaW5lciwgcGxlYXNlIHVzZSBDb250YWluZXIgZnJvbSBub3cgb24uJyk7XG4gICAgICAgICAgICByZXR1cm4gY29yZS5Db250YWluZXI7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQGNsYXNzXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAbmFtZSBTdHJpcFxuICAgICAqIEBtZW1iZXJvZiBQSVhJXG4gICAgICogQHNlZSBQSVhJLm1lc2guTWVzaFxuICAgICAqIEBkZXByZWNhdGVkIHNpbmNlIHZlcnNpb24gMy4wLjBcbiAgICAgKi9cbiAgICBTdHJpcDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uKClcbiAgICAgICAge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKCdUaGUgU3RyaXAgY2xhc3MgaGFzIGJlZW4gcmVuYW1lZCB0byBNZXNoIGFuZCBtb3ZlZCB0byBtZXNoLk1lc2gsIHBsZWFzZSB1c2UgbWVzaC5NZXNoIGZyb20gbm93IG9uLicpO1xuICAgICAgICAgICAgcmV0dXJuIG1lc2guTWVzaDtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBAY2xhc3NcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBuYW1lIFJvcGVcbiAgICAgKiBAbWVtYmVyb2YgUElYSVxuICAgICAqIEBzZWUgUElYSS5tZXNoLlJvcGVcbiAgICAgKiBAZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDMuMC4wXG4gICAgICovXG4gICAgUm9wZToge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uKClcbiAgICAgICAge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKCdUaGUgUm9wZSBjbGFzcyBoYXMgYmVlbiBtb3ZlZCB0byBtZXNoLlJvcGUsIHBsZWFzZSB1c2UgbWVzaC5Sb3BlIGZyb20gbm93IG9uLicpO1xuICAgICAgICAgICAgcmV0dXJuIG1lc2guUm9wZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBAY2xhc3NcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBuYW1lIE1vdmllQ2xpcFxuICAgICAqIEBtZW1iZXJvZiBQSVhJXG4gICAgICogQHNlZSBQSVhJLmV4dHJhcy5Nb3ZpZUNsaXBcbiAgICAgKiBAZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDMuMC4wXG4gICAgICovXG4gICAgTW92aWVDbGlwOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24oKVxuICAgICAgICB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ1RoZSBNb3ZpZUNsaXAgY2xhc3MgaGFzIGJlZW4gbW92ZWQgdG8gZXh0cmFzLk1vdmllQ2xpcCwgcGxlYXNlIHVzZSBleHRyYXMuTW92aWVDbGlwIGZyb20gbm93IG9uLicpO1xuICAgICAgICAgICAgcmV0dXJuIGV4dHJhcy5Nb3ZpZUNsaXA7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQGNsYXNzXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAbmFtZSBUaWxpbmdTcHJpdGVcbiAgICAgKiBAbWVtYmVyb2YgUElYSVxuICAgICAqIEBzZWUgUElYSS5leHRyYXMuVGlsaW5nU3ByaXRlXG4gICAgICogQGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiAzLjAuMFxuICAgICAqL1xuICAgIFRpbGluZ1Nwcml0ZToge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uKClcbiAgICAgICAge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKCdUaGUgVGlsaW5nU3ByaXRlIGNsYXNzIGhhcyBiZWVuIG1vdmVkIHRvIGV4dHJhcy5UaWxpbmdTcHJpdGUsIHBsZWFzZSB1c2UgZXh0cmFzLlRpbGluZ1Nwcml0ZSBmcm9tIG5vdyBvbi4nKTtcbiAgICAgICAgICAgIHJldHVybiBleHRyYXMuVGlsaW5nU3ByaXRlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIEBjbGFzc1xuICAgICAqIEBwcml2YXRlXG4gICAgICogQG5hbWUgQml0bWFwVGV4dFxuICAgICAqIEBtZW1iZXJvZiBQSVhJXG4gICAgICogQHNlZSBQSVhJLmV4dHJhcy5CaXRtYXBUZXh0XG4gICAgICogQGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiAzLjAuMFxuICAgICAqL1xuICAgIEJpdG1hcFRleHQ6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbigpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignVGhlIEJpdG1hcFRleHQgY2xhc3MgaGFzIGJlZW4gbW92ZWQgdG8gZXh0cmFzLkJpdG1hcFRleHQsIHBsZWFzZSB1c2UgZXh0cmFzLkJpdG1hcFRleHQgZnJvbSBub3cgb24uJyk7XG4gICAgICAgICAgICByZXR1cm4gZXh0cmFzLkJpdG1hcFRleHQ7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQGNsYXNzXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAbmFtZSBibGVuZE1vZGVzXG4gICAgICogQG1lbWJlcm9mIFBJWElcbiAgICAgKiBAc2VlIFBJWEkuQkxFTkRfTU9ERVNcbiAgICAgKiBAZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDMuMC4wXG4gICAgICovXG4gICAgYmxlbmRNb2Rlczoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uKClcbiAgICAgICAge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKCdUaGUgYmxlbmRNb2RlcyBoYXMgYmVlbiBtb3ZlZCB0byBCTEVORF9NT0RFUywgcGxlYXNlIHVzZSBCTEVORF9NT0RFUyBmcm9tIG5vdyBvbi4nKTtcbiAgICAgICAgICAgIHJldHVybiBjb3JlLkJMRU5EX01PREVTO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIEBjbGFzc1xuICAgICAqIEBwcml2YXRlXG4gICAgICogQG5hbWUgc2NhbGVNb2Rlc1xuICAgICAqIEBtZW1iZXJvZiBQSVhJXG4gICAgICogQHNlZSBQSVhJLlNDQUxFX01PREVTXG4gICAgICogQGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiAzLjAuMFxuICAgICAqL1xuICAgIHNjYWxlTW9kZXM6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbigpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignVGhlIHNjYWxlTW9kZXMgaGFzIGJlZW4gbW92ZWQgdG8gU0NBTEVfTU9ERVMsIHBsZWFzZSB1c2UgU0NBTEVfTU9ERVMgZnJvbSBub3cgb24uJyk7XG4gICAgICAgICAgICByZXR1cm4gY29yZS5TQ0FMRV9NT0RFUztcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBAY2xhc3NcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBuYW1lIEJhc2VUZXh0dXJlQ2FjaGVcbiAgICAgKiBAbWVtYmVyb2YgUElYSVxuICAgICAqIEBzZWUgUElYSS51dGlscy5CYXNlVGV4dHVyZUNhY2hlXG4gICAgICogQGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiAzLjAuMFxuICAgICAqL1xuICAgIEJhc2VUZXh0dXJlQ2FjaGU6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ1RoZSBCYXNlVGV4dHVyZUNhY2hlIGNsYXNzIGhhcyBiZWVuIG1vdmVkIHRvIHV0aWxzLkJhc2VUZXh0dXJlQ2FjaGUsIHBsZWFzZSB1c2UgdXRpbHMuQmFzZVRleHR1cmVDYWNoZSBmcm9tIG5vdyBvbi4nKTtcbiAgICAgICAgICAgIHJldHVybiBjb3JlLnV0aWxzLkJhc2VUZXh0dXJlQ2FjaGU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQGNsYXNzXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAbmFtZSBUZXh0dXJlQ2FjaGVcbiAgICAgKiBAbWVtYmVyb2YgUElYSVxuICAgICAqIEBzZWUgUElYSS51dGlscy5UZXh0dXJlQ2FjaGVcbiAgICAgKiBAZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDMuMC4wXG4gICAgICovXG4gICAgVGV4dHVyZUNhY2hlOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKCdUaGUgVGV4dHVyZUNhY2hlIGNsYXNzIGhhcyBiZWVuIG1vdmVkIHRvIHV0aWxzLlRleHR1cmVDYWNoZSwgcGxlYXNlIHVzZSB1dGlscy5UZXh0dXJlQ2FjaGUgZnJvbSBub3cgb24uJyk7XG4gICAgICAgICAgICByZXR1cm4gY29yZS51dGlscy5UZXh0dXJlQ2FjaGU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQG5hbWVzcGFjZVxuICAgICAqIEBwcml2YXRlXG4gICAgICogQG5hbWUgbWF0aFxuICAgICAqIEBtZW1iZXJvZiBQSVhJXG4gICAgICogQHNlZSBQSVhJXG4gICAgICogQGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiAzLjAuNlxuICAgICAqL1xuICAgIG1hdGg6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ1RoZSBtYXRoIG5hbWVzcGFjZSBpcyBkZXByZWNhdGVkLCBwbGVhc2UgYWNjZXNzIG1lbWJlcnMgYWxyZWFkeSBhY2Nlc3NpYmxlIG9uIFBJWEkuJyk7XG4gICAgICAgICAgICByZXR1cm4gY29yZTtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuXG4vKipcbiAqIEBtZXRob2RcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBQSVhJLlNwcml0ZSNzZXRUZXh0dXJlXG4gKiBAc2VlIFBJWEkuU3ByaXRlI3RleHR1cmVcbiAqIEBkZXByZWNhdGVkIHNpbmNlIHZlcnNpb24gMy4wLjBcbiAqL1xuY29yZS5TcHJpdGUucHJvdG90eXBlLnNldFRleHR1cmUgPSBmdW5jdGlvbih0ZXh0dXJlKVxue1xuICAgIHRoaXMudGV4dHVyZSA9IHRleHR1cmU7XG4gICAgY29uc29sZS53YXJuKCdzZXRUZXh0dXJlIGlzIG5vdyBkZXByZWNhdGVkLCBwbGVhc2UgdXNlIHRoZSB0ZXh0dXJlIHByb3BlcnR5LCBlLmcgOiBzcHJpdGUudGV4dHVyZSA9IHRleHR1cmU7Jyk7XG59O1xuXG4vKipcbiAqIEBtZXRob2RcbiAqIEBuYW1lIFBJWEkuZXh0cmFzLkJpdG1hcFRleHQjc2V0VGV4dFxuICogQHNlZSBQSVhJLmV4dHJhcy5CaXRtYXBUZXh0I3RleHRcbiAqIEBkZXByZWNhdGVkIHNpbmNlIHZlcnNpb24gMy4wLjBcbiAqL1xuZXh0cmFzLkJpdG1hcFRleHQucHJvdG90eXBlLnNldFRleHQgPSBmdW5jdGlvbih0ZXh0KVxue1xuICAgIHRoaXMudGV4dCA9IHRleHQ7XG4gICAgY29uc29sZS53YXJuKCdzZXRUZXh0IGlzIG5vdyBkZXByZWNhdGVkLCBwbGVhc2UgdXNlIHRoZSB0ZXh0IHByb3BlcnR5LCBlLmcgOiBteUJpdG1hcFRleHQudGV4dCA9IFxcJ215IHRleHRcXCc7Jyk7XG59O1xuXG4vKipcbiAqIEBtZXRob2RcbiAqIEBuYW1lIFBJWEkuVGV4dCNzZXRUZXh0XG4gKiBAc2VlIFBJWEkuVGV4dCN0ZXh0XG4gKiBAZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDMuMC4wXG4gKi9cbmNvcmUuVGV4dC5wcm90b3R5cGUuc2V0VGV4dCA9IGZ1bmN0aW9uKHRleHQpXG57XG4gICAgdGhpcy50ZXh0ID0gdGV4dDtcbiAgICBjb25zb2xlLndhcm4oJ3NldFRleHQgaXMgbm93IGRlcHJlY2F0ZWQsIHBsZWFzZSB1c2UgdGhlIHRleHQgcHJvcGVydHksIGUuZyA6IG15VGV4dC50ZXh0ID0gXFwnbXkgdGV4dFxcJzsnKTtcbn07XG5cbi8qKlxuICogQG1ldGhvZFxuICogQG5hbWUgUElYSS5UZXh0I3NldFN0eWxlXG4gKiBAc2VlIFBJWEkuVGV4dCNzdHlsZVxuICogQGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiAzLjAuMFxuICovXG5jb3JlLlRleHQucHJvdG90eXBlLnNldFN0eWxlID0gZnVuY3Rpb24oc3R5bGUpXG57XG4gICAgdGhpcy5zdHlsZSA9IHN0eWxlO1xuICAgIGNvbnNvbGUud2Fybignc2V0U3R5bGUgaXMgbm93IGRlcHJlY2F0ZWQsIHBsZWFzZSB1c2UgdGhlIHN0eWxlIHByb3BlcnR5LCBlLmcgOiBteVRleHQuc3R5bGUgPSBzdHlsZTsnKTtcbn07XG5cbi8qKlxuICogQG1ldGhvZFxuICogQG5hbWUgUElYSS5UZXh0dXJlI3NldEZyYW1lXG4gKiBAc2VlIFBJWEkuVGV4dHVyZSNzZXRGcmFtZVxuICogQGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiAzLjAuMFxuICovXG5jb3JlLlRleHR1cmUucHJvdG90eXBlLnNldEZyYW1lID0gZnVuY3Rpb24oZnJhbWUpXG57XG4gICAgdGhpcy5mcmFtZSA9IGZyYW1lO1xuICAgIGNvbnNvbGUud2Fybignc2V0RnJhbWUgaXMgbm93IGRlcHJlY2F0ZWQsIHBsZWFzZSB1c2UgdGhlIGZyYW1lIHByb3BlcnR5LCBlLmcgOiBteVRleHR1cmUuZnJhbWUgPSBmcmFtZTsnKTtcbn07XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGZpbHRlcnMsIHtcblxuICAgIC8qKlxuICAgICAqIEBjbGFzc1xuICAgICAqIEBwcml2YXRlXG4gICAgICogQG5hbWUgUElYSS5maWx0ZXJzLkFic3RyYWN0RmlsdGVyXG4gICAgICogQHNlZSBQSVhJLkFic3RyYWN0RmlsdGVyXG4gICAgICogQGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiAzLjAuNlxuICAgICAqL1xuICAgIEFic3RyYWN0RmlsdGVyOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24oKVxuICAgICAgICB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ2ZpbHRlcnMuQWJzdHJhY3RGaWx0ZXIgaXMgYW4gdW5kb2N1bWVudGVkIGFsaWFzLCBwbGVhc2UgdXNlIEFic3RyYWN0RmlsdGVyIGZyb20gbm93IG9uLicpO1xuICAgICAgICAgICAgcmV0dXJuIGNvcmUuQWJzdHJhY3RGaWx0ZXI7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQGNsYXNzXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAbmFtZSBQSVhJLmZpbHRlcnMuRlhBQUZpbHRlclxuICAgICAqIEBzZWUgUElYSS5GWEFBRmlsdGVyXG4gICAgICogQGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiAzLjAuNlxuICAgICAqL1xuICAgIEZYQUFGaWx0ZXI6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbigpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignZmlsdGVycy5GWEFBRmlsdGVyIGlzIGFuIHVuZG9jdW1lbnRlZCBhbGlhcywgcGxlYXNlIHVzZSBGWEFBRmlsdGVyIGZyb20gbm93IG9uLicpO1xuICAgICAgICAgICAgcmV0dXJuIGNvcmUuRlhBQUZpbHRlcjtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBAY2xhc3NcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBuYW1lIFBJWEkuZmlsdGVycy5TcHJpdGVNYXNrRmlsdGVyXG4gICAgICogQHNlZSBQSVhJLlNwcml0ZU1hc2tGaWx0ZXJcbiAgICAgKiBAZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDMuMC42XG4gICAgICovXG4gICAgU3ByaXRlTWFza0ZpbHRlcjoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uKClcbiAgICAgICAge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKCdmaWx0ZXJzLlNwcml0ZU1hc2tGaWx0ZXIgaXMgYW4gdW5kb2N1bWVudGVkIGFsaWFzLCBwbGVhc2UgdXNlIFNwcml0ZU1hc2tGaWx0ZXIgZnJvbSBub3cgb24uJyk7XG4gICAgICAgICAgICByZXR1cm4gY29yZS5TcHJpdGVNYXNrRmlsdGVyO1xuICAgICAgICB9XG4gICAgfVxufSk7XG5cbi8qKlxuICogQG1ldGhvZFxuICogQG5hbWUgUElYSS51dGlscy51dWlkXG4gKiBAc2VlIFBJWEkudXRpbHMudWlkXG4gKiBAZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDMuMC42XG4gKi9cbmNvcmUudXRpbHMudXVpZCA9IGZ1bmN0aW9uICgpXG57XG4gICAgY29uc29sZS53YXJuKCd1dGlscy51dWlkKCkgaXMgZGVwcmVjYXRlZCwgcGxlYXNlIHVzZSB1dGlscy51aWQoKSBmcm9tIG5vdyBvbi4nKTtcbiAgICByZXR1cm4gY29yZS51dGlscy51aWQoKTtcbn07XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uL2NvcmUnKTtcblxuLyoqXG4gKiBBIEJpdG1hcFRleHQgb2JqZWN0IHdpbGwgY3JlYXRlIGEgbGluZSBvciBtdWx0aXBsZSBsaW5lcyBvZiB0ZXh0IHVzaW5nIGJpdG1hcCBmb250LiBUb1xuICogc3BsaXQgYSBsaW5lIHlvdSBjYW4gdXNlICdcXG4nLCAnXFxyJyBvciAnXFxyXFxuJyBpbiB5b3VyIHN0cmluZy4gWW91IGNhbiBnZW5lcmF0ZSB0aGUgZm50IGZpbGVzIHVzaW5nOlxuICpcbiAqIEEgQml0bWFwVGV4dCBjYW4gb25seSBiZSBjcmVhdGVkIHdoZW4gdGhlIGZvbnQgaXMgbG9hZGVkXG4gKlxuICogYGBganNcbiAqIC8vIGluIHRoaXMgY2FzZSB0aGUgZm9udCBpcyBpbiBhIGZpbGUgY2FsbGVkICdkZXN5cmVsLmZudCdcbiAqIHZhciBiaXRtYXBUZXh0ID0gbmV3IFBJWEkuZXh0cmFzLkJpdG1hcFRleHQoXCJ0ZXh0IHVzaW5nIGEgZmFuY3kgZm9udCFcIiwge2ZvbnQ6IFwiMzVweCBEZXN5cmVsXCIsIGFsaWduOiBcInJpZ2h0XCJ9KTtcbiAqIGBgYFxuICpcbiAqXG4gKiBodHRwOi8vd3d3LmFuZ2VsY29kZS5jb20vcHJvZHVjdHMvYm1mb250LyBmb3Igd2luZG93cyBvclxuICogaHR0cDovL3d3dy5ibWdseXBoLmNvbS8gZm9yIG1hYy5cbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQ29udGFpbmVyXG4gKiBAbWVtYmVyb2YgUElYSS5leHRyYXNcbiAqIEBwYXJhbSB0ZXh0IHtzdHJpbmd9IFRoZSBjb3B5IHRoYXQgeW91IHdvdWxkIGxpa2UgdGhlIHRleHQgdG8gZGlzcGxheVxuICogQHBhcmFtIHN0eWxlIHtvYmplY3R9IFRoZSBzdHlsZSBwYXJhbWV0ZXJzXG4gKiBAcGFyYW0gc3R5bGUuZm9udCB7c3RyaW5nfG9iamVjdH0gVGhlIGZvbnQgZGVzY3JpcHRvciBmb3IgdGhlIG9iamVjdCwgY2FuIGJlIHBhc3NlZCBhcyBhIHN0cmluZyBvZiBmb3JtXG4gKiAgICAgIFwiMjRweCBGb250TmFtZVwiIG9yIFwiRm9udE5hbWVcIiBvciBhcyBhbiBvYmplY3Qgd2l0aCBleHBsaWNpdCBuYW1lL3NpemUgcHJvcGVydGllcy5cbiAqIEBwYXJhbSBbc3R5bGUuZm9udC5uYW1lXSB7c3RyaW5nfSBUaGUgYml0bWFwIGZvbnQgaWRcbiAqIEBwYXJhbSBbc3R5bGUuZm9udC5zaXplXSB7bnVtYmVyfSBUaGUgc2l6ZSBvZiB0aGUgZm9udCBpbiBwaXhlbHMsIGUuZy4gMjRcbiAqIEBwYXJhbSBbc3R5bGUuYWxpZ249J2xlZnQnXSB7c3RyaW5nfSBBbGlnbm1lbnQgZm9yIG11bHRpbGluZSB0ZXh0ICgnbGVmdCcsICdjZW50ZXInIG9yICdyaWdodCcpLCBkb2VzIG5vdCBhZmZlY3RcbiAqICAgICAgc2luZ2xlIGxpbmUgdGV4dFxuICogQHBhcmFtIFtzdHlsZS50aW50PTB4RkZGRkZGXSB7bnVtYmVyfSBUaGUgdGludCBjb2xvclxuICovXG5mdW5jdGlvbiBCaXRtYXBUZXh0KHRleHQsIHN0eWxlKVxue1xuICAgIGNvcmUuQ29udGFpbmVyLmNhbGwodGhpcyk7XG5cbiAgICBzdHlsZSA9IHN0eWxlIHx8IHt9O1xuXG4gICAgLyoqXG4gICAgICogVGhlIHdpZHRoIG9mIHRoZSBvdmVyYWxsIHRleHQsIGRpZmZlcmVudCBmcm9tIGZvbnRTaXplLFxuICAgICAqIHdoaWNoIGlzIGRlZmluZWQgaW4gdGhlIHN0eWxlIG9iamVjdFxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEByZWFkT25seVxuICAgICAqL1xuICAgIHRoaXMudGV4dFdpZHRoID0gMDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBoZWlnaHQgb2YgdGhlIG92ZXJhbGwgdGV4dCwgZGlmZmVyZW50IGZyb20gZm9udFNpemUsXG4gICAgICogd2hpY2ggaXMgZGVmaW5lZCBpbiB0aGUgc3R5bGUgb2JqZWN0XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQHJlYWRPbmx5XG4gICAgICovXG4gICAgdGhpcy50ZXh0SGVpZ2h0ID0gMDtcblxuICAgIC8qKlxuICAgICAqIFByaXZhdGUgdHJhY2tlciBmb3IgdGhlIGxldHRlciBzcHJpdGUgcG9vbC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuU3ByaXRlW119XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9nbHlwaHMgPSBbXTtcblxuICAgIC8qKlxuICAgICAqIFByaXZhdGUgdHJhY2tlciBmb3IgdGhlIGN1cnJlbnQgc3R5bGUuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtvYmplY3R9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9mb250ID0ge1xuICAgICAgICB0aW50OiBzdHlsZS50aW50ICE9PSB1bmRlZmluZWQgPyBzdHlsZS50aW50IDogMHhGRkZGRkYsXG4gICAgICAgIGFsaWduOiBzdHlsZS5hbGlnbiB8fCAnbGVmdCcsXG4gICAgICAgIG5hbWU6IG51bGwsXG4gICAgICAgIHNpemU6IDBcbiAgICB9O1xuXG4gICAgLyoqXG4gICAgICogUHJpdmF0ZSB0cmFja2VyIGZvciB0aGUgY3VycmVudCBmb250LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7b2JqZWN0fVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5mb250ID0gc3R5bGUuZm9udDsgLy8gcnVuIGZvbnQgc2V0dGVyXG5cbiAgICAvKipcbiAgICAgKiBQcml2YXRlIHRyYWNrZXIgZm9yIHRoZSBjdXJyZW50IHRleHQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtzdHJpbmd9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl90ZXh0ID0gdGV4dDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBtYXggd2lkdGggb2YgdGhpcyBiaXRtYXAgdGV4dCBpbiBwaXhlbHMuIElmIHRoZSB0ZXh0IHByb3ZpZGVkIGlzIGxvbmdlciB0aGFuIHRoZSB2YWx1ZSBwcm92aWRlZCwgbGluZSBicmVha3Mgd2lsbCBiZSBhdXRvbWF0aWNhbGx5IGluc2VydGVkIGluIHRoZSBsYXN0IHdoaXRlc3BhY2UuXG4gICAgICogRGlzYWJsZSBieSBzZXR0aW5nIHZhbHVlIHRvIDBcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLm1heFdpZHRoID0gMDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBtYXggbGluZSBoZWlnaHQuIFRoaXMgaXMgdXNlZnVsIHdoZW4gdHJ5aW5nIHRvIHVzZSB0aGUgdG90YWwgaGVpZ2h0IG9mIHRoZSBUZXh0LCBpZTogd2hlbiB0cnlpbmcgdG8gdmVydGljYWxseSBhbGlnbi5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLm1heExpbmVIZWlnaHQgPSAwO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGRpcnR5IHN0YXRlIG9mIHRoaXMgb2JqZWN0LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKi9cbiAgICB0aGlzLmRpcnR5ID0gZmFsc2U7XG5cbiAgICB0aGlzLnVwZGF0ZVRleHQoKTtcbn1cblxuLy8gY29uc3RydWN0b3JcbkJpdG1hcFRleHQucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShjb3JlLkNvbnRhaW5lci5wcm90b3R5cGUpO1xuQml0bWFwVGV4dC5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBCaXRtYXBUZXh0O1xubW9kdWxlLmV4cG9ydHMgPSBCaXRtYXBUZXh0O1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhCaXRtYXBUZXh0LnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFRoZSB0aW50IG9mIHRoZSBCaXRtYXBUZXh0IG9iamVjdFxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmV4dHJhcy5CaXRtYXBUZXh0I1xuICAgICAqL1xuICAgIHRpbnQ6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fZm9udC50aW50O1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5fZm9udC50aW50ID0gKHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicgJiYgdmFsdWUgPj0gMCkgPyB2YWx1ZSA6IDB4RkZGRkZGO1xuXG4gICAgICAgICAgICB0aGlzLmRpcnR5ID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBUaGUgYWxpZ25tZW50IG9mIHRoZSBCaXRtYXBUZXh0IG9iamVjdFxuICAgICAqXG4gICAgICogQG1lbWJlciB7c3RyaW5nfVxuICAgICAqIEBkZWZhdWx0ICdsZWZ0J1xuICAgICAqIEBtZW1iZXJvZiBQSVhJLmV4dHJhcy5CaXRtYXBUZXh0I1xuICAgICAqL1xuICAgIGFsaWduOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2ZvbnQuYWxpZ247XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLl9mb250LmFsaWduID0gdmFsdWUgfHwgJ2xlZnQnO1xuXG4gICAgICAgICAgICB0aGlzLmRpcnR5ID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBUaGUgZm9udCBkZXNjcmlwdG9yIG9mIHRoZSBCaXRtYXBUZXh0IG9iamVjdFxuICAgICAqXG4gICAgICogQG1lbWJlciB7Rm9udH1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5leHRyYXMuQml0bWFwVGV4dCNcbiAgICAgKi9cbiAgICBmb250OiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2ZvbnQ7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICBpZiAoIXZhbHVlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgICAgIHZhbHVlID0gdmFsdWUuc3BsaXQoJyAnKTtcblxuICAgICAgICAgICAgICAgIHRoaXMuX2ZvbnQubmFtZSA9IHZhbHVlLmxlbmd0aCA9PT0gMSA/IHZhbHVlWzBdIDogdmFsdWUuc2xpY2UoMSkuam9pbignICcpO1xuICAgICAgICAgICAgICAgIHRoaXMuX2ZvbnQuc2l6ZSA9IHZhbHVlLmxlbmd0aCA+PSAyID8gcGFyc2VJbnQodmFsdWVbMF0sIDEwKSA6IEJpdG1hcFRleHQuZm9udHNbdGhpcy5fZm9udC5uYW1lXS5zaXplO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fZm9udC5uYW1lID0gdmFsdWUubmFtZTtcbiAgICAgICAgICAgICAgICB0aGlzLl9mb250LnNpemUgPSB0eXBlb2YgdmFsdWUuc2l6ZSA9PT0gJ251bWJlcicgPyB2YWx1ZS5zaXplIDogcGFyc2VJbnQodmFsdWUuc2l6ZSwgMTApO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLmRpcnR5ID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBUaGUgdGV4dCBvZiB0aGUgQml0bWFwVGV4dCBvYmplY3RcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge3N0cmluZ31cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5leHRyYXMuQml0bWFwVGV4dCNcbiAgICAgKi9cbiAgICB0ZXh0OiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3RleHQ7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB2YWx1ZSA9IHZhbHVlLnRvU3RyaW5nKCkgfHwgJyAnO1xuICAgICAgICAgICAgaWYgKHRoaXMuX3RleHQgPT09IHZhbHVlKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuX3RleHQgPSB2YWx1ZTtcbiAgICAgICAgICAgIHRoaXMuZGlydHkgPSB0cnVlO1xuICAgICAgICB9XG4gICAgfVxufSk7XG5cbi8qKlxuICogUmVuZGVycyB0ZXh0IGFuZCB1cGRhdGVzIGl0IHdoZW4gbmVlZGVkXG4gKlxuICogQHByaXZhdGVcbiAqL1xuQml0bWFwVGV4dC5wcm90b3R5cGUudXBkYXRlVGV4dCA9IGZ1bmN0aW9uICgpXG57XG4gICAgdmFyIGRhdGEgPSBCaXRtYXBUZXh0LmZvbnRzW3RoaXMuX2ZvbnQubmFtZV07XG4gICAgdmFyIHBvcyA9IG5ldyBjb3JlLlBvaW50KCk7XG4gICAgdmFyIHByZXZDaGFyQ29kZSA9IG51bGw7XG4gICAgdmFyIGNoYXJzID0gW107XG4gICAgdmFyIGxhc3RMaW5lV2lkdGggPSAwO1xuICAgIHZhciBtYXhMaW5lV2lkdGggPSAwO1xuICAgIHZhciBsaW5lV2lkdGhzID0gW107XG4gICAgdmFyIGxpbmUgPSAwO1xuICAgIHZhciBzY2FsZSA9IHRoaXMuX2ZvbnQuc2l6ZSAvIGRhdGEuc2l6ZTtcbiAgICB2YXIgbGFzdFNwYWNlID0gLTE7XG4gICAgdmFyIG1heExpbmVIZWlnaHQgPSAwO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLnRleHQubGVuZ3RoOyBpKyspXG4gICAge1xuICAgICAgICB2YXIgY2hhckNvZGUgPSB0aGlzLnRleHQuY2hhckNvZGVBdChpKTtcbiAgICAgICAgbGFzdFNwYWNlID0gLyhcXHMpLy50ZXN0KHRoaXMudGV4dC5jaGFyQXQoaSkpID8gaSA6IGxhc3RTcGFjZTtcblxuICAgICAgICBpZiAoLyg/OlxcclxcbnxcXHJ8XFxuKS8udGVzdCh0aGlzLnRleHQuY2hhckF0KGkpKSlcbiAgICAgICAge1xuICAgICAgICAgICAgbGluZVdpZHRocy5wdXNoKGxhc3RMaW5lV2lkdGgpO1xuICAgICAgICAgICAgbWF4TGluZVdpZHRoID0gTWF0aC5tYXgobWF4TGluZVdpZHRoLCBsYXN0TGluZVdpZHRoKTtcbiAgICAgICAgICAgIGxpbmUrKztcblxuICAgICAgICAgICAgcG9zLnggPSAwO1xuICAgICAgICAgICAgcG9zLnkgKz0gZGF0YS5saW5lSGVpZ2h0O1xuICAgICAgICAgICAgcHJldkNoYXJDb2RlID0gbnVsbDtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGxhc3RTcGFjZSAhPT0gLTEgJiYgdGhpcy5tYXhXaWR0aCA+IDAgJiYgcG9zLnggKiBzY2FsZSA+IHRoaXMubWF4V2lkdGgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNvcmUudXRpbHMucmVtb3ZlSXRlbXMoY2hhcnMsIGxhc3RTcGFjZSwgaSAtIGxhc3RTcGFjZSk7XG4gICAgICAgICAgICBpID0gbGFzdFNwYWNlO1xuICAgICAgICAgICAgbGFzdFNwYWNlID0gLTE7XG5cbiAgICAgICAgICAgIGxpbmVXaWR0aHMucHVzaChsYXN0TGluZVdpZHRoKTtcbiAgICAgICAgICAgIG1heExpbmVXaWR0aCA9IE1hdGgubWF4KG1heExpbmVXaWR0aCwgbGFzdExpbmVXaWR0aCk7XG4gICAgICAgICAgICBsaW5lKys7XG5cbiAgICAgICAgICAgIHBvcy54ID0gMDtcbiAgICAgICAgICAgIHBvcy55ICs9IGRhdGEubGluZUhlaWdodDtcbiAgICAgICAgICAgIHByZXZDaGFyQ29kZSA9IG51bGw7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBjaGFyRGF0YSA9IGRhdGEuY2hhcnNbY2hhckNvZGVdO1xuXG4gICAgICAgIGlmICghY2hhckRhdGEpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHByZXZDaGFyQ29kZSAmJiBjaGFyRGF0YS5rZXJuaW5nW3ByZXZDaGFyQ29kZV0pXG4gICAgICAgIHtcbiAgICAgICAgICAgIHBvcy54ICs9IGNoYXJEYXRhLmtlcm5pbmdbcHJldkNoYXJDb2RlXTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNoYXJzLnB1c2goe3RleHR1cmU6Y2hhckRhdGEudGV4dHVyZSwgbGluZTogbGluZSwgY2hhckNvZGU6IGNoYXJDb2RlLCBwb3NpdGlvbjogbmV3IGNvcmUuUG9pbnQocG9zLnggKyBjaGFyRGF0YS54T2Zmc2V0LCBwb3MueSArIGNoYXJEYXRhLnlPZmZzZXQpfSk7XG4gICAgICAgIGxhc3RMaW5lV2lkdGggPSBwb3MueCArIChjaGFyRGF0YS50ZXh0dXJlLndpZHRoICsgY2hhckRhdGEueE9mZnNldCk7XG4gICAgICAgIHBvcy54ICs9IGNoYXJEYXRhLnhBZHZhbmNlO1xuICAgICAgICBtYXhMaW5lSGVpZ2h0ID0gTWF0aC5tYXgobWF4TGluZUhlaWdodCwgKGNoYXJEYXRhLnlPZmZzZXQgKyBjaGFyRGF0YS50ZXh0dXJlLmhlaWdodCkpO1xuICAgICAgICBwcmV2Q2hhckNvZGUgPSBjaGFyQ29kZTtcbiAgICB9XG5cbiAgICBsaW5lV2lkdGhzLnB1c2gobGFzdExpbmVXaWR0aCk7XG4gICAgbWF4TGluZVdpZHRoID0gTWF0aC5tYXgobWF4TGluZVdpZHRoLCBsYXN0TGluZVdpZHRoKTtcblxuICAgIHZhciBsaW5lQWxpZ25PZmZzZXRzID0gW107XG5cbiAgICBmb3IgKGkgPSAwOyBpIDw9IGxpbmU7IGkrKylcbiAgICB7XG4gICAgICAgIHZhciBhbGlnbk9mZnNldCA9IDA7XG5cbiAgICAgICAgaWYgKHRoaXMuX2ZvbnQuYWxpZ24gPT09ICdyaWdodCcpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGFsaWduT2Zmc2V0ID0gbWF4TGluZVdpZHRoIC0gbGluZVdpZHRoc1tpXTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh0aGlzLl9mb250LmFsaWduID09PSAnY2VudGVyJylcbiAgICAgICAge1xuICAgICAgICAgICAgYWxpZ25PZmZzZXQgPSAobWF4TGluZVdpZHRoIC0gbGluZVdpZHRoc1tpXSkgLyAyO1xuICAgICAgICB9XG5cbiAgICAgICAgbGluZUFsaWduT2Zmc2V0cy5wdXNoKGFsaWduT2Zmc2V0KTtcbiAgICB9XG5cbiAgICB2YXIgbGVuQ2hhcnMgPSBjaGFycy5sZW5ndGg7XG4gICAgdmFyIHRpbnQgPSB0aGlzLnRpbnQ7XG5cbiAgICBmb3IgKGkgPSAwOyBpIDwgbGVuQ2hhcnM7IGkrKylcbiAgICB7XG4gICAgICAgIHZhciBjID0gdGhpcy5fZ2x5cGhzW2ldOyAvLyBnZXQgdGhlIG5leHQgZ2x5cGggc3ByaXRlXG5cbiAgICAgICAgaWYgKGMpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGMudGV4dHVyZSA9IGNoYXJzW2ldLnRleHR1cmU7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgICBjID0gbmV3IGNvcmUuU3ByaXRlKGNoYXJzW2ldLnRleHR1cmUpO1xuICAgICAgICAgICAgdGhpcy5fZ2x5cGhzLnB1c2goYyk7XG4gICAgICAgIH1cblxuICAgICAgICBjLnBvc2l0aW9uLnggPSAoY2hhcnNbaV0ucG9zaXRpb24ueCArIGxpbmVBbGlnbk9mZnNldHNbY2hhcnNbaV0ubGluZV0pICogc2NhbGU7XG4gICAgICAgIGMucG9zaXRpb24ueSA9IGNoYXJzW2ldLnBvc2l0aW9uLnkgKiBzY2FsZTtcbiAgICAgICAgYy5zY2FsZS54ID0gYy5zY2FsZS55ID0gc2NhbGU7XG4gICAgICAgIGMudGludCA9IHRpbnQ7XG5cbiAgICAgICAgaWYgKCFjLnBhcmVudClcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5hZGRDaGlsZChjKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIHJlbW92ZSB1bm5lY2Vzc2FyeSBjaGlsZHJlbi5cbiAgICBmb3IgKGkgPSBsZW5DaGFyczsgaSA8IHRoaXMuX2dseXBocy5sZW5ndGg7ICsraSlcbiAgICB7XG4gICAgICAgIHRoaXMucmVtb3ZlQ2hpbGQodGhpcy5fZ2x5cGhzW2ldKTtcbiAgICB9XG5cbiAgICB0aGlzLnRleHRXaWR0aCA9IG1heExpbmVXaWR0aCAqIHNjYWxlO1xuICAgIHRoaXMudGV4dEhlaWdodCA9IChwb3MueSArIGRhdGEubGluZUhlaWdodCkgKiBzY2FsZTtcbiAgICB0aGlzLm1heExpbmVIZWlnaHQgPSBtYXhMaW5lSGVpZ2h0ICogc2NhbGU7XG59O1xuXG4vKipcbiAqIFVwZGF0ZXMgdGhlIHRyYW5zZm9ybSBvZiB0aGlzIG9iamVjdFxuICpcbiAqIEBwcml2YXRlXG4gKi9cbkJpdG1hcFRleHQucHJvdG90eXBlLnVwZGF0ZVRyYW5zZm9ybSA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy52YWxpZGF0ZSgpO1xuICAgIHRoaXMuY29udGFpbmVyVXBkYXRlVHJhbnNmb3JtKCk7XG59O1xuXG4vKipcbiAqIFZhbGlkYXRlcyB0ZXh0IGJlZm9yZSBjYWxsaW5nIHBhcmVudCdzIGdldExvY2FsQm91bmRzXG4gKlxuICogQHJldHVybiB7UElYSS5SZWN0YW5nbGV9IFRoZSByZWN0YW5ndWxhciBib3VuZGluZyBhcmVhXG4gKi9cblxuQml0bWFwVGV4dC5wcm90b3R5cGUuZ2V0TG9jYWxCb3VuZHMgPSBmdW5jdGlvbigpXG57XG4gICAgdGhpcy52YWxpZGF0ZSgpO1xuICAgIHJldHVybiBjb3JlLkNvbnRhaW5lci5wcm90b3R5cGUuZ2V0TG9jYWxCb3VuZHMuY2FsbCh0aGlzKTtcbn07XG5cbi8qKlxuICogVXBkYXRlcyB0ZXh0IHdoZW4gbmVlZGVkXG4gKlxuICogQHByaXZhdGVcbiAqL1xuQml0bWFwVGV4dC5wcm90b3R5cGUudmFsaWRhdGUgPSBmdW5jdGlvbigpXG57XG4gICAgaWYgKHRoaXMuZGlydHkpXG4gICAge1xuICAgICAgICB0aGlzLnVwZGF0ZVRleHQoKTtcbiAgICAgICAgdGhpcy5kaXJ0eSA9IGZhbHNlO1xuICAgIH1cbn07XG5cbkJpdG1hcFRleHQuZm9udHMgPSB7fTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vY29yZScpO1xuXG4vKipcbiAqIEEgTW92aWVDbGlwIGlzIGEgc2ltcGxlIHdheSB0byBkaXNwbGF5IGFuIGFuaW1hdGlvbiBkZXBpY3RlZCBieSBhIGxpc3Qgb2YgdGV4dHVyZXMuXG4gKlxuICogYGBganNcbiAqIHZhciBhbGllbkltYWdlcyA9IFtcImltYWdlX3NlcXVlbmNlXzAxLnBuZ1wiLFwiaW1hZ2Vfc2VxdWVuY2VfMDIucG5nXCIsXCJpbWFnZV9zZXF1ZW5jZV8wMy5wbmdcIixcImltYWdlX3NlcXVlbmNlXzA0LnBuZ1wiXTtcbiAqIHZhciB0ZXh0dXJlQXJyYXkgPSBbXTtcbiAqXG4gKiBmb3IgKHZhciBpPTA7IGkgPCA0OyBpKyspXG4gKiB7XG4gKiAgICAgIHZhciB0ZXh0dXJlID0gUElYSS5UZXh0dXJlLmZyb21JbWFnZShhbGllbkltYWdlc1tpXSk7XG4gKiAgICAgIHRleHR1cmVBcnJheS5wdXNoKHRleHR1cmUpO1xuICogfTtcbiAqXG4gKiB2YXIgbWMgPSBuZXcgUElYSS5Nb3ZpZUNsaXAodGV4dHVyZUFycmF5KTtcbiAqIGBgYFxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5TcHJpdGVcbiAqIEBtZW1iZXJvZiBQSVhJLmV4dHJhc1xuICogQHBhcmFtIHRleHR1cmVzIHtQSVhJLlRleHR1cmVbXXxPYmplY3RbXX0gYW4gYXJyYXkgb2Yge0BsaW5rIFBJWEkuVGV4dHVyZX0gb3IgZnJhbWUgb2JqZWN0cyB0aGF0IG1ha2UgdXAgdGhlIGFuaW1hdGlvblxuICogQHBhcmFtIHRleHR1cmVzW10udGV4dHVyZSB7UElYSS5UZXh0dXJlfSB0aGUge0BsaW5rIFBJWEkuVGV4dHVyZX0gb2YgdGhlIGZyYW1lXG4gKiBAcGFyYW0gdGV4dHVyZXNbXS50aW1lIHtudW1iZXJ9IHRoZSBkdXJhdGlvbiBvZiB0aGUgZnJhbWUgaW4gbXNcbiAqL1xuZnVuY3Rpb24gTW92aWVDbGlwKHRleHR1cmVzKVxue1xuICAgIGNvcmUuU3ByaXRlLmNhbGwodGhpcywgdGV4dHVyZXNbMF0gaW5zdGFuY2VvZiBjb3JlLlRleHR1cmUgPyB0ZXh0dXJlc1swXSA6IHRleHR1cmVzWzBdLnRleHR1cmUpO1xuXG4gICAgLyoqXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl90ZXh0dXJlcyA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX2R1cmF0aW9ucyA9IG51bGw7XG5cbiAgICB0aGlzLnRleHR1cmVzID0gdGV4dHVyZXM7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgc3BlZWQgdGhhdCB0aGUgTW92aWVDbGlwIHdpbGwgcGxheSBhdC4gSGlnaGVyIGlzIGZhc3RlciwgbG93ZXIgaXMgc2xvd2VyXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMVxuICAgICAqL1xuICAgIHRoaXMuYW5pbWF0aW9uU3BlZWQgPSAxO1xuXG4gICAgLyoqXG4gICAgICogV2hldGhlciBvciBub3QgdGhlIG1vdmllIGNsaXAgcmVwZWF0cyBhZnRlciBwbGF5aW5nLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKiBAZGVmYXVsdCB0cnVlXG4gICAgICovXG4gICAgdGhpcy5sb29wID0gdHJ1ZTtcblxuICAgIC8qKlxuICAgICAqIEZ1bmN0aW9uIHRvIGNhbGwgd2hlbiBhIE1vdmllQ2xpcCBmaW5pc2hlcyBwbGF5aW5nXG4gICAgICpcbiAgICAgKiBAbWV0aG9kXG4gICAgICogQG1lbWJlcm9mIFBJWEkuZXh0cmFzLk1vdmllQ2xpcCNcbiAgICAgKi9cbiAgICB0aGlzLm9uQ29tcGxldGUgPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogRWxhcHNlZCB0aW1lIHNpbmNlIGFuaW1hdGlvbiBoYXMgYmVlbiBzdGFydGVkLCB1c2VkIGludGVybmFsbHkgdG8gZGlzcGxheSBjdXJyZW50IHRleHR1cmVcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX2N1cnJlbnRUaW1lID0gMDtcblxuICAgIC8qKlxuICAgICAqIEluZGljYXRlcyBpZiB0aGUgTW92aWVDbGlwIGlzIGN1cnJlbnRseSBwbGF5aW5nXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqIEByZWFkb25seVxuICAgICAqL1xuICAgIHRoaXMucGxheWluZyA9IGZhbHNlO1xufVxuXG4vLyBjb25zdHJ1Y3RvclxuTW92aWVDbGlwLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoY29yZS5TcHJpdGUucHJvdG90eXBlKTtcbk1vdmllQ2xpcC5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBNb3ZpZUNsaXA7XG5tb2R1bGUuZXhwb3J0cyA9IE1vdmllQ2xpcDtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoTW92aWVDbGlwLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIHRvdGFsRnJhbWVzIGlzIHRoZSB0b3RhbCBudW1iZXIgb2YgZnJhbWVzIGluIHRoZSBNb3ZpZUNsaXAuIFRoaXMgaXMgdGhlIHNhbWUgYXMgbnVtYmVyIG9mIHRleHR1cmVzXG4gICAgICogYXNzaWduZWQgdG8gdGhlIE1vdmllQ2xpcC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5leHRyYXMuTW92aWVDbGlwI1xuICAgICAqIEBkZWZhdWx0IDBcbiAgICAgKiBAcmVhZG9ubHlcbiAgICAgKi9cbiAgICB0b3RhbEZyYW1lczoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3RleHR1cmVzLmxlbmd0aDtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBUaGUgYXJyYXkgb2YgdGV4dHVyZXMgdXNlZCBmb3IgdGhpcyBNb3ZpZUNsaXBcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuVGV4dHVyZVtdfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmV4dHJhcy5Nb3ZpZUNsaXAjXG4gICAgICpcbiAgICAgKi9cbiAgICB0ZXh0dXJlczoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl90ZXh0dXJlcztcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGlmKHZhbHVlWzBdIGluc3RhbmNlb2YgY29yZS5UZXh0dXJlKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHRoaXMuX3RleHR1cmVzID0gdmFsdWU7XG4gICAgICAgICAgICAgICAgdGhpcy5fZHVyYXRpb25zID0gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB0aGlzLl90ZXh0dXJlcyA9IFtdO1xuICAgICAgICAgICAgICAgIHRoaXMuX2R1cmF0aW9ucyA9IFtdO1xuICAgICAgICAgICAgICAgIGZvcih2YXIgaSA9IDA7IGkgPCB2YWx1ZS5sZW5ndGg7IGkrKylcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3RleHR1cmVzLnB1c2godmFsdWVbaV0udGV4dHVyZSk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2R1cmF0aW9ucy5wdXNoKHZhbHVlW2ldLnRpbWUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAqIFRoZSBNb3ZpZUNsaXBzIGN1cnJlbnQgZnJhbWUgaW5kZXhcbiAgICAqXG4gICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgKiBAbWVtYmVyb2YgUElYSS5leHRyYXMuTW92aWVDbGlwI1xuICAgICogQHJlYWRvbmx5XG4gICAgKi9cbiAgICBjdXJyZW50RnJhbWU6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICB2YXIgY3VycmVudEZyYW1lID0gTWF0aC5mbG9vcih0aGlzLl9jdXJyZW50VGltZSkgJSB0aGlzLl90ZXh0dXJlcy5sZW5ndGg7XG4gICAgICAgICAgICBpZiAoY3VycmVudEZyYW1lIDwgMClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjdXJyZW50RnJhbWUgKz0gdGhpcy5fdGV4dHVyZXMubGVuZ3RoO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGN1cnJlbnRGcmFtZTtcbiAgICAgICAgfVxuICAgIH1cblxufSk7XG5cbi8qKlxuICogU3RvcHMgdGhlIE1vdmllQ2xpcFxuICpcbiAqL1xuTW92aWVDbGlwLnByb3RvdHlwZS5zdG9wID0gZnVuY3Rpb24gKClcbntcbiAgICBpZighdGhpcy5wbGF5aW5nKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMucGxheWluZyA9IGZhbHNlO1xuICAgIGNvcmUudGlja2VyLnNoYXJlZC5yZW1vdmUodGhpcy51cGRhdGUsIHRoaXMpO1xufTtcblxuLyoqXG4gKiBQbGF5cyB0aGUgTW92aWVDbGlwXG4gKlxuICovXG5Nb3ZpZUNsaXAucHJvdG90eXBlLnBsYXkgPSBmdW5jdGlvbiAoKVxue1xuICAgIGlmKHRoaXMucGxheWluZylcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLnBsYXlpbmcgPSB0cnVlO1xuICAgIGNvcmUudGlja2VyLnNoYXJlZC5hZGQodGhpcy51cGRhdGUsIHRoaXMpO1xufTtcblxuLyoqXG4gKiBTdG9wcyB0aGUgTW92aWVDbGlwIGFuZCBnb2VzIHRvIGEgc3BlY2lmaWMgZnJhbWVcbiAqXG4gKiBAcGFyYW0gZnJhbWVOdW1iZXIge251bWJlcn0gZnJhbWUgaW5kZXggdG8gc3RvcCBhdFxuICovXG5Nb3ZpZUNsaXAucHJvdG90eXBlLmdvdG9BbmRTdG9wID0gZnVuY3Rpb24gKGZyYW1lTnVtYmVyKVxue1xuICAgIHRoaXMuc3RvcCgpO1xuXG4gICAgdGhpcy5fY3VycmVudFRpbWUgPSBmcmFtZU51bWJlcjtcblxuICAgIHRoaXMuX3RleHR1cmUgPSB0aGlzLl90ZXh0dXJlc1t0aGlzLmN1cnJlbnRGcmFtZV07XG59O1xuXG4vKipcbiAqIEdvZXMgdG8gYSBzcGVjaWZpYyBmcmFtZSBhbmQgYmVnaW5zIHBsYXlpbmcgdGhlIE1vdmllQ2xpcFxuICpcbiAqIEBwYXJhbSBmcmFtZU51bWJlciB7bnVtYmVyfSBmcmFtZSBpbmRleCB0byBzdGFydCBhdFxuICovXG5Nb3ZpZUNsaXAucHJvdG90eXBlLmdvdG9BbmRQbGF5ID0gZnVuY3Rpb24gKGZyYW1lTnVtYmVyKVxue1xuICAgIHRoaXMuX2N1cnJlbnRUaW1lID0gZnJhbWVOdW1iZXI7XG5cbiAgICB0aGlzLnBsYXkoKTtcbn07XG5cbi8qXG4gKiBVcGRhdGVzIHRoZSBvYmplY3QgdHJhbnNmb3JtIGZvciByZW5kZXJpbmdcbiAqIEBwcml2YXRlXG4gKi9cbk1vdmllQ2xpcC5wcm90b3R5cGUudXBkYXRlID0gZnVuY3Rpb24gKGRlbHRhVGltZSlcbntcbiAgICB2YXIgZWxhcHNlZCA9IHRoaXMuYW5pbWF0aW9uU3BlZWQgKiBkZWx0YVRpbWU7XG5cbiAgICBpZiAodGhpcy5fZHVyYXRpb25zICE9PSBudWxsKVxuICAgIHtcbiAgICAgICAgdmFyIGxhZyA9IHRoaXMuX2N1cnJlbnRUaW1lICUgMSAqIHRoaXMuX2R1cmF0aW9uc1t0aGlzLmN1cnJlbnRGcmFtZV07XG5cbiAgICAgICAgbGFnICs9IGVsYXBzZWQgLyA2MCAqIDEwMDA7XG5cbiAgICAgICAgd2hpbGUgKGxhZyA8IDApXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuX2N1cnJlbnRUaW1lLS07XG4gICAgICAgICAgICBsYWcgKz0gdGhpcy5fZHVyYXRpb25zW3RoaXMuY3VycmVudEZyYW1lXTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBzaWduID0gTWF0aC5zaWduKHRoaXMuYW5pbWF0aW9uU3BlZWQgKiBkZWx0YVRpbWUpO1xuICAgICAgICB0aGlzLl9jdXJyZW50VGltZSA9IE1hdGguZmxvb3IodGhpcy5fY3VycmVudFRpbWUpO1xuXG4gICAgICAgIHdoaWxlIChsYWcgPj0gdGhpcy5fZHVyYXRpb25zW3RoaXMuY3VycmVudEZyYW1lXSlcbiAgICAgICAge1xuICAgICAgICAgICAgbGFnIC09IHRoaXMuX2R1cmF0aW9uc1t0aGlzLmN1cnJlbnRGcmFtZV0gKiBzaWduO1xuICAgICAgICAgICAgdGhpcy5fY3VycmVudFRpbWUgKz0gc2lnbjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX2N1cnJlbnRUaW1lICs9IGxhZyAvIHRoaXMuX2R1cmF0aW9uc1t0aGlzLmN1cnJlbnRGcmFtZV07XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHRoaXMuX2N1cnJlbnRUaW1lICs9IGVsYXBzZWQ7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX2N1cnJlbnRUaW1lIDwgMCAmJiAhdGhpcy5sb29wKVxuICAgIHtcbiAgICAgICAgdGhpcy5nb3RvQW5kU3RvcCgwKTtcblxuICAgICAgICBpZiAodGhpcy5vbkNvbXBsZXRlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLm9uQ29tcGxldGUoKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBlbHNlIGlmICh0aGlzLl9jdXJyZW50VGltZSA+PSB0aGlzLl90ZXh0dXJlcy5sZW5ndGggJiYgIXRoaXMubG9vcClcbiAgICB7XG4gICAgICAgIHRoaXMuZ290b0FuZFN0b3AodGhpcy5fdGV4dHVyZXMubGVuZ3RoIC0gMSk7XG5cbiAgICAgICAgaWYgKHRoaXMub25Db21wbGV0ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5vbkNvbXBsZXRlKCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgdGhpcy5fdGV4dHVyZSA9IHRoaXMuX3RleHR1cmVzW3RoaXMuY3VycmVudEZyYW1lXTtcbiAgICB9XG5cbn07XG5cbi8qXG4gKiBTdG9wcyB0aGUgTW92aWVDbGlwIGFuZCBkZXN0cm95cyBpdFxuICpcbiAqL1xuTW92aWVDbGlwLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKCApXG57XG4gICAgdGhpcy5zdG9wKCk7XG4gICAgY29yZS5TcHJpdGUucHJvdG90eXBlLmRlc3Ryb3kuY2FsbCh0aGlzKTtcbn07XG5cbi8qKlxuICogQSBzaG9ydCBoYW5kIHdheSBvZiBjcmVhdGluZyBhIG1vdmllY2xpcCBmcm9tIGFuIGFycmF5IG9mIGZyYW1lIGlkc1xuICpcbiAqIEBzdGF0aWNcbiAqIEBwYXJhbSBmcmFtZXMge3N0cmluZ1tdfSB0aGUgYXJyYXkgb2YgZnJhbWVzIGlkcyB0aGUgbW92aWVjbGlwIHdpbGwgdXNlIGFzIGl0cyB0ZXh0dXJlIGZyYW1lc1xuICovXG5Nb3ZpZUNsaXAuZnJvbUZyYW1lcyA9IGZ1bmN0aW9uIChmcmFtZXMpXG57XG4gICAgdmFyIHRleHR1cmVzID0gW107XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGZyYW1lcy5sZW5ndGg7ICsraSlcbiAgICB7XG4gICAgICAgIHRleHR1cmVzLnB1c2gobmV3IGNvcmUuVGV4dHVyZS5mcm9tRnJhbWUoZnJhbWVzW2ldKSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBNb3ZpZUNsaXAodGV4dHVyZXMpO1xufTtcblxuLyoqXG4gKiBBIHNob3J0IGhhbmQgd2F5IG9mIGNyZWF0aW5nIGEgbW92aWVjbGlwIGZyb20gYW4gYXJyYXkgb2YgaW1hZ2UgaWRzXG4gKlxuICogQHN0YXRpY1xuICogQHBhcmFtIGltYWdlcyB7c3RyaW5nW119IHRoZSBhcnJheSBvZiBpbWFnZSB1cmxzIHRoZSBtb3ZpZWNsaXAgd2lsbCB1c2UgYXMgaXRzIHRleHR1cmUgZnJhbWVzXG4gKi9cbk1vdmllQ2xpcC5mcm9tSW1hZ2VzID0gZnVuY3Rpb24gKGltYWdlcylcbntcbiAgICB2YXIgdGV4dHVyZXMgPSBbXTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgaW1hZ2VzLmxlbmd0aDsgKytpKVxuICAgIHtcbiAgICAgICAgdGV4dHVyZXMucHVzaChuZXcgY29yZS5UZXh0dXJlLmZyb21JbWFnZShpbWFnZXNbaV0pKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IE1vdmllQ2xpcCh0ZXh0dXJlcyk7XG59OyIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vY29yZScpLFxuICAgIC8vIGEgc3ByaXRlIHVzZSBkZm9yIHJlbmRlcmluZyB0ZXh0dXJlcy4uXG4gICAgdGVtcFBvaW50ID0gbmV3IGNvcmUuUG9pbnQoKSxcbiAgICBDYW52YXNUaW50ZXIgPSByZXF1aXJlKCcuLi9jb3JlL3JlbmRlcmVycy9jYW52YXMvdXRpbHMvQ2FudmFzVGludGVyJyk7XG5cbi8qKlxuICogQSB0aWxpbmcgc3ByaXRlIGlzIGEgZmFzdCB3YXkgb2YgcmVuZGVyaW5nIGEgdGlsaW5nIGltYWdlXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLlNwcml0ZVxuICogQG1lbWJlcm9mIFBJWEkuZXh0cmFzXG4gKiBAcGFyYW0gdGV4dHVyZSB7VGV4dHVyZX0gdGhlIHRleHR1cmUgb2YgdGhlIHRpbGluZyBzcHJpdGVcbiAqIEBwYXJhbSB3aWR0aCB7bnVtYmVyfSAgdGhlIHdpZHRoIG9mIHRoZSB0aWxpbmcgc3ByaXRlXG4gKiBAcGFyYW0gaGVpZ2h0IHtudW1iZXJ9IHRoZSBoZWlnaHQgb2YgdGhlIHRpbGluZyBzcHJpdGVcbiAqL1xuZnVuY3Rpb24gVGlsaW5nU3ByaXRlKHRleHR1cmUsIHdpZHRoLCBoZWlnaHQpXG57XG4gICAgY29yZS5TcHJpdGUuY2FsbCh0aGlzLCB0ZXh0dXJlKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBzY2FsaW5nIG9mIHRoZSBpbWFnZSB0aGF0IGlzIGJlaW5nIHRpbGVkXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlBvaW50fVxuICAgICAqL1xuICAgIHRoaXMudGlsZVNjYWxlID0gbmV3IGNvcmUuUG9pbnQoMSwxKTtcblxuXG4gICAgLyoqXG4gICAgICogVGhlIG9mZnNldCBwb3NpdGlvbiBvZiB0aGUgaW1hZ2UgdGhhdCBpcyBiZWluZyB0aWxlZFxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5Qb2ludH1cbiAgICAgKi9cbiAgICB0aGlzLnRpbGVQb3NpdGlvbiA9IG5ldyBjb3JlLlBvaW50KDAsMCk7XG5cbiAgICAvLy8vLyBwcml2YXRlXG5cbiAgICAvKipcbiAgICAgKiBUaGUgd2l0aCBvZiB0aGUgdGlsaW5nIHNwcml0ZVxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fd2lkdGggPSB3aWR0aCB8fCAxMDA7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgaGVpZ2h0IG9mIHRoZSB0aWxpbmcgc3ByaXRlXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9oZWlnaHQgPSBoZWlnaHQgfHwgMTAwO1xuXG4gICAgLyoqXG4gICAgICogQW4gaW50ZXJuYWwgV2ViR0wgVVYgY2FjaGUuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlRleHR1cmVVdnN9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl91dnMgPSBuZXcgY29yZS5UZXh0dXJlVXZzKCk7XG5cbiAgICB0aGlzLl9jYW52YXNQYXR0ZXJuID0gbnVsbDtcblxuICAgIC8vVE9ETyBtb3ZlLi5cbiAgICB0aGlzLnNoYWRlciA9IG5ldyBjb3JlLkFic3RyYWN0RmlsdGVyKFxuXG4gICAgICBbXG4gICAgICAgICdwcmVjaXNpb24gbG93cCBmbG9hdDsnLFxuICAgICAgICAnYXR0cmlidXRlIHZlYzIgYVZlcnRleFBvc2l0aW9uOycsXG4gICAgICAgICdhdHRyaWJ1dGUgdmVjMiBhVGV4dHVyZUNvb3JkOycsXG4gICAgICAgICdhdHRyaWJ1dGUgdmVjNCBhQ29sb3I7JyxcblxuICAgICAgICAndW5pZm9ybSBtYXQzIHByb2plY3Rpb25NYXRyaXg7JyxcblxuICAgICAgICAndW5pZm9ybSB2ZWM0IHVGcmFtZTsnLFxuICAgICAgICAndW5pZm9ybSB2ZWM0IHVUcmFuc2Zvcm07JyxcblxuICAgICAgICAndmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7JyxcbiAgICAgICAgJ3ZhcnlpbmcgdmVjNCB2Q29sb3I7JyxcblxuICAgICAgICAndm9pZCBtYWluKHZvaWQpeycsXG4gICAgICAgICcgICBnbF9Qb3NpdGlvbiA9IHZlYzQoKHByb2plY3Rpb25NYXRyaXggKiB2ZWMzKGFWZXJ0ZXhQb3NpdGlvbiwgMS4wKSkueHksIDAuMCwgMS4wKTsnLFxuXG4gICAgICAgICcgICB2ZWMyIGNvb3JkID0gYVRleHR1cmVDb29yZDsnLFxuICAgICAgICAnICAgY29vcmQgLT0gdVRyYW5zZm9ybS54eTsnLFxuICAgICAgICAnICAgY29vcmQgLz0gdVRyYW5zZm9ybS56dzsnLFxuICAgICAgICAnICAgdlRleHR1cmVDb29yZCA9IGNvb3JkOycsXG5cbiAgICAgICAgJyAgIHZDb2xvciA9IHZlYzQoYUNvbG9yLnJnYiAqIGFDb2xvci5hLCBhQ29sb3IuYSk7JyxcbiAgICAgICAgJ30nXG4gICAgICBdLmpvaW4oJ1xcbicpLFxuICAgICAgW1xuICAgICAgICAncHJlY2lzaW9uIGxvd3AgZmxvYXQ7JyxcblxuICAgICAgICAndmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7JyxcbiAgICAgICAgJ3ZhcnlpbmcgdmVjNCB2Q29sb3I7JyxcblxuICAgICAgICAndW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXI7JyxcbiAgICAgICAgJ3VuaWZvcm0gdmVjNCB1RnJhbWU7JyxcbiAgICAgICAgJ3VuaWZvcm0gdmVjMiB1UGl4ZWxTaXplOycsXG5cbiAgICAgICAgJ3ZvaWQgbWFpbih2b2lkKXsnLFxuXG4gICAgICAgICcgICB2ZWMyIGNvb3JkID0gbW9kKHZUZXh0dXJlQ29vcmQsIHVGcmFtZS56dyk7JyxcbiAgICAgICAgJyAgIGNvb3JkID0gY2xhbXAoY29vcmQsIHVQaXhlbFNpemUsIHVGcmFtZS56dyAtIHVQaXhlbFNpemUpOycsXG4gICAgICAgICcgICBjb29yZCArPSB1RnJhbWUueHk7JyxcblxuICAgICAgICAnICAgZ2xfRnJhZ0NvbG9yID0gIHRleHR1cmUyRCh1U2FtcGxlciwgY29vcmQpICogdkNvbG9yIDsnLFxuICAgICAgICAnfSdcbiAgICAgIF0uam9pbignXFxuJyksXG5cbiAgICAgICAgICAgIC8vIHNldCB0aGUgdW5pZm9ybXNcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB1RnJhbWU6IHsgdHlwZTogJzRmdicsIHZhbHVlOiBbMCwwLDEsMV0gfSxcbiAgICAgICAgICAgICAgICB1VHJhbnNmb3JtOiB7IHR5cGU6ICc0ZnYnLCB2YWx1ZTogWzAsMCwxLDFdIH0sXG4gICAgICAgICAgICAgICAgdVBpeGVsU2l6ZSA6IHsgdHlwZSA6ICcyZnYnLCB2YWx1ZTogWzEsIDFdfVxuICAgICAgICAgICAgfVxuICAgICAgKTtcbn1cblxuVGlsaW5nU3ByaXRlLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoY29yZS5TcHJpdGUucHJvdG90eXBlKTtcblRpbGluZ1Nwcml0ZS5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBUaWxpbmdTcHJpdGU7XG5tb2R1bGUuZXhwb3J0cyA9IFRpbGluZ1Nwcml0ZTtcblxuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhUaWxpbmdTcHJpdGUucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogVGhlIHdpZHRoIG9mIHRoZSBzcHJpdGUsIHNldHRpbmcgdGhpcyB3aWxsIGFjdHVhbGx5IG1vZGlmeSB0aGUgc2NhbGUgdG8gYWNoaWV2ZSB0aGUgdmFsdWUgc2V0XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZXh0cmFzLlRpbGluZ1Nwcml0ZSNcbiAgICAgKi9cbiAgICB3aWR0aDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl93aWR0aDtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuX3dpZHRoID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVGhlIGhlaWdodCBvZiB0aGUgVGlsaW5nU3ByaXRlLCBzZXR0aW5nIHRoaXMgd2lsbCBhY3R1YWxseSBtb2RpZnkgdGhlIHNjYWxlIHRvIGFjaGlldmUgdGhlIHZhbHVlIHNldFxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmV4dHJhcy5UaWxpbmdTcHJpdGUjXG4gICAgICovXG4gICAgaGVpZ2h0OiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2hlaWdodDtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuX2hlaWdodCA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfVxufSk7XG5cblRpbGluZ1Nwcml0ZS5wcm90b3R5cGUuX29uVGV4dHVyZVVwZGF0ZSA9IGZ1bmN0aW9uICgpXG57XG4gICAgcmV0dXJuO1xufTtcblxuXG4vKipcbiAqIFJlbmRlcnMgdGhlIG9iamVjdCB1c2luZyB0aGUgV2ViR0wgcmVuZGVyZXJcbiAqXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcn1cbiAqIEBwcml2YXRlXG4gKi9cblRpbGluZ1Nwcml0ZS5wcm90b3R5cGUuX3JlbmRlcldlYkdMID0gZnVuY3Rpb24gKHJlbmRlcmVyKVxue1xuICAgIC8vIHR3ZWFrIG91ciB0ZXh0dXJlIHRlbXBvcmFyaWx5Li5cbiAgICB2YXIgdGV4dHVyZSA9IHRoaXMuX3RleHR1cmU7XG5cbiAgICBpZighdGV4dHVyZSB8fCAhdGV4dHVyZS5fdXZzKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHZhciB0ZW1wVXZzID0gdGV4dHVyZS5fdXZzLFxuICAgICAgICB0ZW1wV2lkdGggPSB0ZXh0dXJlLl9mcmFtZS53aWR0aCxcbiAgICAgICAgdGVtcEhlaWdodCA9IHRleHR1cmUuX2ZyYW1lLmhlaWdodCxcbiAgICAgICAgdHcgPSB0ZXh0dXJlLmJhc2VUZXh0dXJlLndpZHRoLFxuICAgICAgICB0aCA9IHRleHR1cmUuYmFzZVRleHR1cmUuaGVpZ2h0O1xuXG4gICAgdGV4dHVyZS5fdXZzID0gdGhpcy5fdXZzO1xuICAgIHRleHR1cmUuX2ZyYW1lLndpZHRoID0gdGhpcy53aWR0aDtcbiAgICB0ZXh0dXJlLl9mcmFtZS5oZWlnaHQgPSB0aGlzLmhlaWdodDtcblxuICAgIHRoaXMuc2hhZGVyLnVuaWZvcm1zLnVQaXhlbFNpemUudmFsdWVbMF0gPSAxLjAvdHc7XG4gICAgdGhpcy5zaGFkZXIudW5pZm9ybXMudVBpeGVsU2l6ZS52YWx1ZVsxXSA9IDEuMC90aDtcblxuICAgIHRoaXMuc2hhZGVyLnVuaWZvcm1zLnVGcmFtZS52YWx1ZVswXSA9IHRlbXBVdnMueDA7XG4gICAgdGhpcy5zaGFkZXIudW5pZm9ybXMudUZyYW1lLnZhbHVlWzFdID0gdGVtcFV2cy55MDtcbiAgICB0aGlzLnNoYWRlci51bmlmb3Jtcy51RnJhbWUudmFsdWVbMl0gPSB0ZW1wVXZzLngxIC0gdGVtcFV2cy54MDtcbiAgICB0aGlzLnNoYWRlci51bmlmb3Jtcy51RnJhbWUudmFsdWVbM10gPSB0ZW1wVXZzLnkyIC0gdGVtcFV2cy55MDtcblxuICAgIHRoaXMuc2hhZGVyLnVuaWZvcm1zLnVUcmFuc2Zvcm0udmFsdWVbMF0gPSAodGhpcy50aWxlUG9zaXRpb24ueCAlICh0ZW1wV2lkdGggKiB0aGlzLnRpbGVTY2FsZS54KSkgLyB0aGlzLl93aWR0aDtcbiAgICB0aGlzLnNoYWRlci51bmlmb3Jtcy51VHJhbnNmb3JtLnZhbHVlWzFdID0gKHRoaXMudGlsZVBvc2l0aW9uLnkgJSAodGVtcEhlaWdodCAqIHRoaXMudGlsZVNjYWxlLnkpKSAvIHRoaXMuX2hlaWdodDtcbiAgICB0aGlzLnNoYWRlci51bmlmb3Jtcy51VHJhbnNmb3JtLnZhbHVlWzJdID0gKCB0dyAvIHRoaXMuX3dpZHRoICkgKiB0aGlzLnRpbGVTY2FsZS54O1xuICAgIHRoaXMuc2hhZGVyLnVuaWZvcm1zLnVUcmFuc2Zvcm0udmFsdWVbM10gPSAoIHRoIC8gdGhpcy5faGVpZ2h0ICkgKiB0aGlzLnRpbGVTY2FsZS55O1xuXG4gICAgcmVuZGVyZXIuc2V0T2JqZWN0UmVuZGVyZXIocmVuZGVyZXIucGx1Z2lucy5zcHJpdGUpO1xuICAgIHJlbmRlcmVyLnBsdWdpbnMuc3ByaXRlLnJlbmRlcih0aGlzKTtcblxuICAgIHRleHR1cmUuX3V2cyA9IHRlbXBVdnM7XG4gICAgdGV4dHVyZS5fZnJhbWUud2lkdGggPSB0ZW1wV2lkdGg7XG4gICAgdGV4dHVyZS5fZnJhbWUuaGVpZ2h0ID0gdGVtcEhlaWdodDtcbn07XG5cbi8qKlxuICogUmVuZGVycyB0aGUgb2JqZWN0IHVzaW5nIHRoZSBDYW52YXMgcmVuZGVyZXJcbiAqXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuQ2FudmFzUmVuZGVyZXJ9IGEgcmVmZXJlbmNlIHRvIHRoZSBjYW52YXMgcmVuZGVyZXJcbiAqIEBwcml2YXRlXG4gKi9cblRpbGluZ1Nwcml0ZS5wcm90b3R5cGUuX3JlbmRlckNhbnZhcyA9IGZ1bmN0aW9uIChyZW5kZXJlcilcbntcbiAgICB2YXIgdGV4dHVyZSA9IHRoaXMuX3RleHR1cmU7XG5cbiAgICBpZiAoIXRleHR1cmUuYmFzZVRleHR1cmUuaGFzTG9hZGVkKVxuICAgIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB2YXIgY29udGV4dCA9IHJlbmRlcmVyLmNvbnRleHQsXG4gICAgICAgIHRyYW5zZm9ybSA9IHRoaXMud29ybGRUcmFuc2Zvcm0sXG4gICAgICAgIHJlc29sdXRpb24gPSByZW5kZXJlci5yZXNvbHV0aW9uLFxuICAgICAgICBiYXNlVGV4dHVyZSA9IHRleHR1cmUuYmFzZVRleHR1cmUsXG4gICAgICAgIG1vZFggPSAodGhpcy50aWxlUG9zaXRpb24ueCAvIHRoaXMudGlsZVNjYWxlLngpICUgdGV4dHVyZS5fZnJhbWUud2lkdGgsXG4gICAgICAgIG1vZFkgPSAodGhpcy50aWxlUG9zaXRpb24ueSAvIHRoaXMudGlsZVNjYWxlLnkpICUgdGV4dHVyZS5fZnJhbWUuaGVpZ2h0O1xuXG4gICAgLy8gY3JlYXRlIGEgbmljZSBzaGlueSBwYXR0ZXJuIVxuICAgIC8vIFRPRE8gdGhpcyBuZWVkcyB0byBiZSByZWZyZXNoZWQgaWYgdGV4dHVyZSBjaGFuZ2VzLi5cbiAgICBpZighdGhpcy5fY2FudmFzUGF0dGVybilcbiAgICB7XG4gICAgICAgIC8vIGN1dCBhbiBvYmplY3QgZnJvbSBhIHNwcml0ZXNoZWV0Li5cbiAgICAgICAgdmFyIHRlbXBDYW52YXMgPSBuZXcgY29yZS5DYW52YXNCdWZmZXIodGV4dHVyZS5fZnJhbWUud2lkdGgsIHRleHR1cmUuX2ZyYW1lLmhlaWdodCk7XG5cbiAgICAgICAgLy8gVGludCB0aGUgdGlsaW5nIHNwcml0ZVxuICAgICAgICBpZiAodGhpcy50aW50ICE9PSAweEZGRkZGRilcbiAgICAgICAge1xuICAgICAgICAgICAgaWYgKHRoaXMuY2FjaGVkVGludCAhPT0gdGhpcy50aW50KVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHRoaXMuY2FjaGVkVGludCA9IHRoaXMudGludDtcblxuICAgICAgICAgICAgICAgIHRoaXMudGludGVkVGV4dHVyZSA9IENhbnZhc1RpbnRlci5nZXRUaW50ZWRUZXh0dXJlKHRoaXMsIHRoaXMudGludCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0ZW1wQ2FudmFzLmNvbnRleHQuZHJhd0ltYWdlKHRoaXMudGludGVkVGV4dHVyZSwgMCwgMCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgICB0ZW1wQ2FudmFzLmNvbnRleHQuZHJhd0ltYWdlKGJhc2VUZXh0dXJlLnNvdXJjZSwgLXRleHR1cmUuX2ZyYW1lLngsIC10ZXh0dXJlLl9mcmFtZS55KTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9jYW52YXNQYXR0ZXJuID0gdGVtcENhbnZhcy5jb250ZXh0LmNyZWF0ZVBhdHRlcm4oIHRlbXBDYW52YXMuY2FudmFzLCAncmVwZWF0JyApO1xuICAgIH1cblxuICAgIC8vIHNldCBjb250ZXh0IHN0YXRlLi5cbiAgICBjb250ZXh0Lmdsb2JhbEFscGhhID0gdGhpcy53b3JsZEFscGhhO1xuICAgIGNvbnRleHQuc2V0VHJhbnNmb3JtKHRyYW5zZm9ybS5hICogcmVzb2x1dGlvbixcbiAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtLmIgKiByZXNvbHV0aW9uLFxuICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2Zvcm0uYyAqIHJlc29sdXRpb24sXG4gICAgICAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybS5kICogcmVzb2x1dGlvbixcbiAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtLnR4ICogcmVzb2x1dGlvbixcbiAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtLnR5ICogcmVzb2x1dGlvbik7XG5cbiAgICAvLyBUT0RPIC0gdGhpcyBzaG91bGQgYmUgcm9sbGVkIGludG8gdGhlIHNldFRyYW5zZm9ybSBhYm92ZS4uXG4gICAgY29udGV4dC5zY2FsZSh0aGlzLnRpbGVTY2FsZS54LHRoaXMudGlsZVNjYWxlLnkpO1xuXG4gICAgY29udGV4dC50cmFuc2xhdGUobW9kWCArICh0aGlzLmFuY2hvci54ICogLXRoaXMuX3dpZHRoICksXG4gICAgICAgICAgICAgICAgICAgICAgbW9kWSArICh0aGlzLmFuY2hvci55ICogLXRoaXMuX2hlaWdodCkpO1xuXG4gICAgLy8gY2hlY2sgYmxlbmQgbW9kZVxuICAgIHZhciBjb21wb3NpdGVPcGVyYXRpb24gPSByZW5kZXJlci5ibGVuZE1vZGVzW3RoaXMuYmxlbmRNb2RlXTtcbiAgICBpZiAoY29tcG9zaXRlT3BlcmF0aW9uICE9PSByZW5kZXJlci5jb250ZXh0Lmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbilcbiAgICB7XG4gICAgICAgIGNvbnRleHQuZ2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uID0gY29tcG9zaXRlT3BlcmF0aW9uO1xuICAgIH1cblxuICAgIC8vIGZpbGwgdGhlIHBhdHRlcm4hXG4gICAgY29udGV4dC5maWxsU3R5bGUgPSB0aGlzLl9jYW52YXNQYXR0ZXJuO1xuICAgIGNvbnRleHQuZmlsbFJlY3QoLW1vZFgsXG4gICAgICAgICAgICAgICAgICAgICAtbW9kWSxcbiAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3dpZHRoIC8gdGhpcy50aWxlU2NhbGUueCxcbiAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2hlaWdodCAvIHRoaXMudGlsZVNjYWxlLnkpO1xuXG5cbiAgICAvL1RPRE8gLSBwcmV0dHkgc3VyZSB0aGlzIGNhbiBiZSBkZWxldGVkLi4uXG4gICAgLy9jb250ZXh0LnRyYW5zbGF0ZSgtdGhpcy50aWxlUG9zaXRpb24ueCArICh0aGlzLmFuY2hvci54ICogdGhpcy5fd2lkdGgpLCAtdGhpcy50aWxlUG9zaXRpb24ueSArICh0aGlzLmFuY2hvci55ICogdGhpcy5faGVpZ2h0KSk7XG4gICAgLy9jb250ZXh0LnNjYWxlKDEgLyB0aGlzLnRpbGVTY2FsZS54LCAxIC8gdGhpcy50aWxlU2NhbGUueSk7XG59O1xuXG5cbi8qKlxuICogUmV0dXJucyB0aGUgZnJhbWluZyByZWN0YW5nbGUgb2YgdGhlIHNwcml0ZSBhcyBhIFJlY3RhbmdsZSBvYmplY3RcbipcbiAqIEByZXR1cm4ge1BJWEkuUmVjdGFuZ2xlfSB0aGUgZnJhbWluZyByZWN0YW5nbGVcbiAqL1xuVGlsaW5nU3ByaXRlLnByb3RvdHlwZS5nZXRCb3VuZHMgPSBmdW5jdGlvbiAoKVxue1xuICAgIHZhciB3aWR0aCA9IHRoaXMuX3dpZHRoO1xuICAgIHZhciBoZWlnaHQgPSB0aGlzLl9oZWlnaHQ7XG5cbiAgICB2YXIgdzAgPSB3aWR0aCAqICgxLXRoaXMuYW5jaG9yLngpO1xuICAgIHZhciB3MSA9IHdpZHRoICogLXRoaXMuYW5jaG9yLng7XG5cbiAgICB2YXIgaDAgPSBoZWlnaHQgKiAoMS10aGlzLmFuY2hvci55KTtcbiAgICB2YXIgaDEgPSBoZWlnaHQgKiAtdGhpcy5hbmNob3IueTtcblxuICAgIHZhciB3b3JsZFRyYW5zZm9ybSA9IHRoaXMud29ybGRUcmFuc2Zvcm07XG5cbiAgICB2YXIgYSA9IHdvcmxkVHJhbnNmb3JtLmE7XG4gICAgdmFyIGIgPSB3b3JsZFRyYW5zZm9ybS5iO1xuICAgIHZhciBjID0gd29ybGRUcmFuc2Zvcm0uYztcbiAgICB2YXIgZCA9IHdvcmxkVHJhbnNmb3JtLmQ7XG4gICAgdmFyIHR4ID0gd29ybGRUcmFuc2Zvcm0udHg7XG4gICAgdmFyIHR5ID0gd29ybGRUcmFuc2Zvcm0udHk7XG5cbiAgICB2YXIgeDEgPSBhICogdzEgKyBjICogaDEgKyB0eDtcbiAgICB2YXIgeTEgPSBkICogaDEgKyBiICogdzEgKyB0eTtcblxuICAgIHZhciB4MiA9IGEgKiB3MCArIGMgKiBoMSArIHR4O1xuICAgIHZhciB5MiA9IGQgKiBoMSArIGIgKiB3MCArIHR5O1xuXG4gICAgdmFyIHgzID0gYSAqIHcwICsgYyAqIGgwICsgdHg7XG4gICAgdmFyIHkzID0gZCAqIGgwICsgYiAqIHcwICsgdHk7XG5cbiAgICB2YXIgeDQgPSAgYSAqIHcxICsgYyAqIGgwICsgdHg7XG4gICAgdmFyIHk0ID0gIGQgKiBoMCArIGIgKiB3MSArIHR5O1xuXG4gICAgdmFyIG1pblgsXG4gICAgICAgIG1heFgsXG4gICAgICAgIG1pblksXG4gICAgICAgIG1heFk7XG5cbiAgICBtaW5YID0geDE7XG4gICAgbWluWCA9IHgyIDwgbWluWCA/IHgyIDogbWluWDtcbiAgICBtaW5YID0geDMgPCBtaW5YID8geDMgOiBtaW5YO1xuICAgIG1pblggPSB4NCA8IG1pblggPyB4NCA6IG1pblg7XG5cbiAgICBtaW5ZID0geTE7XG4gICAgbWluWSA9IHkyIDwgbWluWSA/IHkyIDogbWluWTtcbiAgICBtaW5ZID0geTMgPCBtaW5ZID8geTMgOiBtaW5ZO1xuICAgIG1pblkgPSB5NCA8IG1pblkgPyB5NCA6IG1pblk7XG5cbiAgICBtYXhYID0geDE7XG4gICAgbWF4WCA9IHgyID4gbWF4WCA/IHgyIDogbWF4WDtcbiAgICBtYXhYID0geDMgPiBtYXhYID8geDMgOiBtYXhYO1xuICAgIG1heFggPSB4NCA+IG1heFggPyB4NCA6IG1heFg7XG5cbiAgICBtYXhZID0geTE7XG4gICAgbWF4WSA9IHkyID4gbWF4WSA/IHkyIDogbWF4WTtcbiAgICBtYXhZID0geTMgPiBtYXhZID8geTMgOiBtYXhZO1xuICAgIG1heFkgPSB5NCA+IG1heFkgPyB5NCA6IG1heFk7XG5cbiAgICB2YXIgYm91bmRzID0gdGhpcy5fYm91bmRzO1xuXG4gICAgYm91bmRzLnggPSBtaW5YO1xuICAgIGJvdW5kcy53aWR0aCA9IG1heFggLSBtaW5YO1xuXG4gICAgYm91bmRzLnkgPSBtaW5ZO1xuICAgIGJvdW5kcy5oZWlnaHQgPSBtYXhZIC0gbWluWTtcblxuICAgIC8vIHN0b3JlIGEgcmVmZXJlbmNlIHNvIHRoYXQgaWYgdGhpcyBmdW5jdGlvbiBnZXRzIGNhbGxlZCBhZ2FpbiBpbiB0aGUgcmVuZGVyIGN5Y2xlIHdlIGRvIG5vdCBoYXZlIHRvIHJlY2FsY3VsYXRlXG4gICAgdGhpcy5fY3VycmVudEJvdW5kcyA9IGJvdW5kcztcblxuICAgIHJldHVybiBib3VuZHM7XG59O1xuXG4vKipcbiAqIENoZWNrcyBpZiBhIHBvaW50IGlzIGluc2lkZSB0aGlzIHRpbGluZyBzcHJpdGVcbiAqIEBwYXJhbSBwb2ludCB7UElYSS5Qb2ludH0gdGhlIHBvaW50IHRvIGNoZWNrXG4gKi9cblRpbGluZ1Nwcml0ZS5wcm90b3R5cGUuY29udGFpbnNQb2ludCA9IGZ1bmN0aW9uKCBwb2ludCApXG57XG4gICAgdGhpcy53b3JsZFRyYW5zZm9ybS5hcHBseUludmVyc2UocG9pbnQsICB0ZW1wUG9pbnQpO1xuXG4gICAgdmFyIHdpZHRoID0gdGhpcy5fd2lkdGg7XG4gICAgdmFyIGhlaWdodCA9IHRoaXMuX2hlaWdodDtcbiAgICB2YXIgeDEgPSAtd2lkdGggKiB0aGlzLmFuY2hvci54O1xuICAgIHZhciB5MTtcblxuICAgIGlmICggdGVtcFBvaW50LnggPiB4MSAmJiB0ZW1wUG9pbnQueCA8IHgxICsgd2lkdGggKVxuICAgIHtcbiAgICAgICAgeTEgPSAtaGVpZ2h0ICogdGhpcy5hbmNob3IueTtcblxuICAgICAgICBpZiAoIHRlbXBQb2ludC55ID4geTEgJiYgdGVtcFBvaW50LnkgPCB5MSArIGhlaWdodCApXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xufTtcblxuLyoqXG4gKiBEZXN0cm95cyB0aGlzIHRpbGluZyBzcHJpdGVcbiAqXG4gKi9cblRpbGluZ1Nwcml0ZS5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uICgpIHtcbiAgICBjb3JlLlNwcml0ZS5wcm90b3R5cGUuZGVzdHJveS5jYWxsKHRoaXMpO1xuXG4gICAgdGhpcy50aWxlU2NhbGUgPSBudWxsO1xuICAgIHRoaXMuX3RpbGVTY2FsZU9mZnNldCA9IG51bGw7XG4gICAgdGhpcy50aWxlUG9zaXRpb24gPSBudWxsO1xuXG4gICAgdGhpcy5fdXZzID0gbnVsbDtcbn07XG5cbi8qKlxuICogSGVscGVyIGZ1bmN0aW9uIHRoYXQgY3JlYXRlcyBhIHRpbGluZyBzcHJpdGUgdGhhdCB3aWxsIHVzZSBhIHRleHR1cmUgZnJvbSB0aGUgVGV4dHVyZUNhY2hlIGJhc2VkIG9uIHRoZSBmcmFtZUlkXG4gKiBUaGUgZnJhbWUgaWRzIGFyZSBjcmVhdGVkIHdoZW4gYSBUZXh0dXJlIHBhY2tlciBmaWxlIGhhcyBiZWVuIGxvYWRlZFxuICpcbiAqIEBzdGF0aWNcbiAqIEBwYXJhbSBmcmFtZUlkIHtzdHJpbmd9IFRoZSBmcmFtZSBJZCBvZiB0aGUgdGV4dHVyZSBpbiB0aGUgY2FjaGVcbiAqIEByZXR1cm4ge1BJWEkuZXh0cmFzLlRpbGluZ1Nwcml0ZX0gQSBuZXcgVGlsaW5nU3ByaXRlIHVzaW5nIGEgdGV4dHVyZSBmcm9tIHRoZSB0ZXh0dXJlIGNhY2hlIG1hdGNoaW5nIHRoZSBmcmFtZUlkXG4gKiBAcGFyYW0gd2lkdGgge251bWJlcn0gIHRoZSB3aWR0aCBvZiB0aGUgdGlsaW5nIHNwcml0ZVxuICogQHBhcmFtIGhlaWdodCB7bnVtYmVyfSB0aGUgaGVpZ2h0IG9mIHRoZSB0aWxpbmcgc3ByaXRlXG4gKi9cblRpbGluZ1Nwcml0ZS5mcm9tRnJhbWUgPSBmdW5jdGlvbiAoZnJhbWVJZCx3aWR0aCxoZWlnaHQpXG57XG4gICAgdmFyIHRleHR1cmUgPSBjb3JlLnV0aWxzLlRleHR1cmVDYWNoZVtmcmFtZUlkXTtcblxuICAgIGlmICghdGV4dHVyZSlcbiAgICB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignVGhlIGZyYW1lSWQgXCInICsgZnJhbWVJZCArICdcIiBkb2VzIG5vdCBleGlzdCBpbiB0aGUgdGV4dHVyZSBjYWNoZSAnICsgdGhpcyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBUaWxpbmdTcHJpdGUodGV4dHVyZSx3aWR0aCxoZWlnaHQpO1xufTtcblxuLyoqXG4gKiBIZWxwZXIgZnVuY3Rpb24gdGhhdCBjcmVhdGVzIGEgc3ByaXRlIHRoYXQgd2lsbCBjb250YWluIGEgdGV4dHVyZSBiYXNlZCBvbiBhbiBpbWFnZSB1cmxcbiAqIElmIHRoZSBpbWFnZSBpcyBub3QgaW4gdGhlIHRleHR1cmUgY2FjaGUgaXQgd2lsbCBiZSBsb2FkZWRcbiAqXG4gKiBAc3RhdGljXG4gKiBAcGFyYW0gaW1hZ2VJZCB7c3RyaW5nfSBUaGUgaW1hZ2UgdXJsIG9mIHRoZSB0ZXh0dXJlXG4gKiBAcGFyYW0gd2lkdGgge251bWJlcn0gIHRoZSB3aWR0aCBvZiB0aGUgdGlsaW5nIHNwcml0ZVxuICogQHBhcmFtIGhlaWdodCB7bnVtYmVyfSB0aGUgaGVpZ2h0IG9mIHRoZSB0aWxpbmcgc3ByaXRlXG4gKiBAcGFyYW0gW2Nyb3Nzb3JpZ2luPShhdXRvKV0ge2Jvb2xlYW59IGlmIHlvdSB3YW50IHRvIHNwZWNpZnkgdGhlIGNyb3NzLW9yaWdpbiBwYXJhbWV0ZXJcbiAqIEBwYXJhbSBbc2NhbGVNb2RlPVBJWEkuU0NBTEVfTU9ERVMuREVGQVVMVF0ge251bWJlcn0gaWYgeW91IHdhbnQgdG8gc3BlY2lmeSB0aGUgc2NhbGUgbW9kZSwgc2VlIHtAbGluayBQSVhJLlNDQUxFX01PREVTfSBmb3IgcG9zc2libGUgdmFsdWVzXG4gKiBAcmV0dXJuIHtQSVhJLmV4dHJhcy5UaWxpbmdTcHJpdGV9IEEgbmV3IFRpbGluZ1Nwcml0ZSB1c2luZyBhIHRleHR1cmUgZnJvbSB0aGUgdGV4dHVyZSBjYWNoZSBtYXRjaGluZyB0aGUgaW1hZ2UgaWRcbiAqL1xuVGlsaW5nU3ByaXRlLmZyb21JbWFnZSA9IGZ1bmN0aW9uIChpbWFnZUlkLCB3aWR0aCwgaGVpZ2h0LCBjcm9zc29yaWdpbiwgc2NhbGVNb2RlKVxue1xuICAgIHJldHVybiBuZXcgVGlsaW5nU3ByaXRlKGNvcmUuVGV4dHVyZS5mcm9tSW1hZ2UoaW1hZ2VJZCwgY3Jvc3NvcmlnaW4sIHNjYWxlTW9kZSksd2lkdGgsaGVpZ2h0KTtcbn07XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uL2NvcmUnKSxcbiAgICBEaXNwbGF5T2JqZWN0ID0gY29yZS5EaXNwbGF5T2JqZWN0LFxuICAgIF90ZW1wTWF0cml4ID0gbmV3IGNvcmUuTWF0cml4KCk7XG5cbkRpc3BsYXlPYmplY3QucHJvdG90eXBlLl9jYWNoZUFzQml0bWFwID0gZmFsc2U7XG5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS5fb3JpZ2luYWxSZW5kZXJXZWJHTCA9IG51bGw7XG5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS5fb3JpZ2luYWxSZW5kZXJDYW52YXMgPSBudWxsO1xuXG5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS5fb3JpZ2luYWxVcGRhdGVUcmFuc2Zvcm0gPSBudWxsO1xuRGlzcGxheU9iamVjdC5wcm90b3R5cGUuX29yaWdpbmFsSGl0VGVzdCA9IG51bGw7XG5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS5fb3JpZ2luYWxEZXN0cm95ID0gbnVsbDtcbkRpc3BsYXlPYmplY3QucHJvdG90eXBlLl9jYWNoZWRTcHJpdGUgPSBudWxsO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhEaXNwbGF5T2JqZWN0LnByb3RvdHlwZSwge1xuXG4gICAgLyoqXG4gICAgICogU2V0IHRoaXMgdG8gdHJ1ZSBpZiB5b3Ugd2FudCB0aGlzIGRpc3BsYXkgb2JqZWN0IHRvIGJlIGNhY2hlZCBhcyBhIGJpdG1hcC5cbiAgICAgKiBUaGlzIGJhc2ljYWxseSB0YWtlcyBhIHNuYXAgc2hvdCBvZiB0aGUgZGlzcGxheSBvYmplY3QgYXMgaXQgaXMgYXQgdGhhdCBtb21lbnQuIEl0IGNhbiBwcm92aWRlIGEgcGVyZm9ybWFuY2UgYmVuZWZpdCBmb3IgY29tcGxleCBzdGF0aWMgZGlzcGxheU9iamVjdHMuXG4gICAgICogVG8gcmVtb3ZlIHNpbXBseSBzZXQgdGhpcyBwcm9wZXJ0eSB0byAnZmFsc2UnXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLkRpc3BsYXlPYmplY3QjXG4gICAgICovXG4gICAgY2FjaGVBc0JpdG1hcDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9jYWNoZUFzQml0bWFwO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgaWYgKHRoaXMuX2NhY2hlQXNCaXRtYXAgPT09IHZhbHVlKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5fY2FjaGVBc0JpdG1hcCA9IHZhbHVlO1xuXG4gICAgICAgICAgICBpZiAodmFsdWUpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdGhpcy5fb3JpZ2luYWxSZW5kZXJXZWJHTCA9IHRoaXMucmVuZGVyV2ViR0w7XG4gICAgICAgICAgICAgICAgdGhpcy5fb3JpZ2luYWxSZW5kZXJDYW52YXMgPSB0aGlzLnJlbmRlckNhbnZhcztcblxuICAgICAgICAgICAgICAgIHRoaXMuX29yaWdpbmFsVXBkYXRlVHJhbnNmb3JtID0gdGhpcy51cGRhdGVUcmFuc2Zvcm07XG4gICAgICAgICAgICAgICAgdGhpcy5fb3JpZ2luYWxHZXRCb3VuZHMgPSB0aGlzLmdldEJvdW5kcztcblxuICAgICAgICAgICAgICAgIHRoaXMuX29yaWdpbmFsRGVzdHJveSA9IHRoaXMuZGVzdHJveTtcblxuICAgICAgICAgICAgICAgIHRoaXMuX29yaWdpbmFsQ29udGFpbnNQb2ludCA9IHRoaXMuY29udGFpbnNQb2ludDtcblxuICAgICAgICAgICAgICAgIHRoaXMucmVuZGVyV2ViR0wgPSB0aGlzLl9yZW5kZXJDYWNoZWRXZWJHTDtcbiAgICAgICAgICAgICAgICB0aGlzLnJlbmRlckNhbnZhcyA9IHRoaXMuX3JlbmRlckNhY2hlZENhbnZhcztcblxuICAgICAgICAgICAgICAgIHRoaXMuZGVzdHJveSA9IHRoaXMuX2NhY2hlQXNCaXRtYXBEZXN0cm95O1xuXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuX2NhY2hlZFNwcml0ZSlcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2Rlc3Ryb3lDYWNoZWREaXNwbGF5T2JqZWN0KCk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgdGhpcy5yZW5kZXJXZWJHTCA9IHRoaXMuX29yaWdpbmFsUmVuZGVyV2ViR0w7XG4gICAgICAgICAgICAgICAgdGhpcy5yZW5kZXJDYW52YXMgPSB0aGlzLl9vcmlnaW5hbFJlbmRlckNhbnZhcztcbiAgICAgICAgICAgICAgICB0aGlzLmdldEJvdW5kcyA9IHRoaXMuX29yaWdpbmFsR2V0Qm91bmRzO1xuXG4gICAgICAgICAgICAgICAgdGhpcy5kZXN0cm95ID0gdGhpcy5fb3JpZ2luYWxEZXN0cm95O1xuXG4gICAgICAgICAgICAgICAgdGhpcy51cGRhdGVUcmFuc2Zvcm0gPSB0aGlzLl9vcmlnaW5hbFVwZGF0ZVRyYW5zZm9ybTtcbiAgICAgICAgICAgICAgICB0aGlzLmNvbnRhaW5zUG9pbnQgPSB0aGlzLl9vcmlnaW5hbENvbnRhaW5zUG9pbnQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG59KTtcbi8qKlxuKiBSZW5kZXJzIGEgY2FjaGVkIHZlcnNpb24gb2YgdGhlIHNwcml0ZSB3aXRoIFdlYkdMXG4qXG4qIEBwYXJhbSByZW5kZXJlciB7UElYSS5XZWJHTFJlbmRlcmVyfSB0aGUgV2ViR0wgcmVuZGVyZXJcbiogQHByaXZhdGVcbiovXG5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS5fcmVuZGVyQ2FjaGVkV2ViR0wgPSBmdW5jdGlvbiAocmVuZGVyZXIpXG57XG4gICAgaWYgKCF0aGlzLnZpc2libGUgfHwgdGhpcy53b3JsZEFscGhhIDw9IDAgfHwgIXRoaXMucmVuZGVyYWJsZSlcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLl9pbml0Q2FjaGVkRGlzcGxheU9iamVjdCggcmVuZGVyZXIgKTtcblxuICAgIHRoaXMuX2NhY2hlZFNwcml0ZS53b3JsZEFscGhhID0gdGhpcy53b3JsZEFscGhhO1xuXG4gICAgcmVuZGVyZXIuc2V0T2JqZWN0UmVuZGVyZXIocmVuZGVyZXIucGx1Z2lucy5zcHJpdGUpO1xuICAgIHJlbmRlcmVyLnBsdWdpbnMuc3ByaXRlLnJlbmRlciggdGhpcy5fY2FjaGVkU3ByaXRlICk7XG59O1xuXG4vKipcbiogUHJlcGFyZXMgdGhlIFdlYkdMIHJlbmRlcmVyIHRvIGNhY2hlIHRoZSBzcHJpdGVcbipcbiogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLldlYkdMUmVuZGVyZXJ9IHRoZSBXZWJHTCByZW5kZXJlclxuKiBAcHJpdmF0ZVxuKi9cbkRpc3BsYXlPYmplY3QucHJvdG90eXBlLl9pbml0Q2FjaGVkRGlzcGxheU9iamVjdCA9IGZ1bmN0aW9uIChyZW5kZXJlcilcbntcbiAgICBpZih0aGlzLl9jYWNoZWRTcHJpdGUpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gZmlyc3Qgd2UgZmx1c2ggYW55dGhpbmcgbGVmdCBpbiB0aGUgcmVuZGVyZXIgKG90aGVyd2lzZSBpdCB3b3VsZCBnZXQgcmVuZGVyZWQgdG8gdGhlIGNhY2hlZCB0ZXh0dXJlKVxuICAgIHJlbmRlcmVyLmN1cnJlbnRSZW5kZXJlci5mbHVzaCgpO1xuICAgIC8vdGhpcy5maWx0ZXJzPSBbXTtcbiAgICAvLyBuZXh0IHdlIGZpbmQgdGhlIGRpbWVuc2lvbnMgb2YgdGhlIHVudHJhbnNmb3JtZWQgb2JqZWN0XG4gICAgLy8gdGhpcyBmdW5jdGlvbiBhbHNvIGNhbGxzIHVwZGF0ZXRyYW5zZm9ybSBvbiBhbGwgaXRzIGNoaWxkcmVuIGFzIHBhcnQgb2YgdGhlIG1lYXN1cmluZy4gVGhpcyBtZWFucyB3ZSBkb24ndCBuZWVkIHRvIHVwZGF0ZSB0aGUgdHJhbnNmb3JtIGFnYWluIGluIHRoaXMgZnVuY3Rpb25cbiAgICAvLyBUT0RPIHBhc3MgYW4gb2JqZWN0IHRvIGNsb25lIHRvbz8gc2F2ZXMgaGF2aW5nIHRvIGNyZWF0ZSBhIG5ldyBvbmUgZWFjaCB0aW1lIVxuICAgIHZhciBib3VuZHMgPSB0aGlzLmdldExvY2FsQm91bmRzKCkuY2xvbmUoKTtcblxuICAgIC8vIGFkZCBzb21lIHBhZGRpbmchXG4gICAgaWYodGhpcy5fZmlsdGVycylcbiAgICB7XG4gICAgICAgIHZhciBwYWRkaW5nID0gdGhpcy5fZmlsdGVyc1swXS5wYWRkaW5nO1xuICAgICAgICBib3VuZHMueCAtPSBwYWRkaW5nO1xuICAgICAgICBib3VuZHMueSAtPSBwYWRkaW5nO1xuXG4gICAgICAgIGJvdW5kcy53aWR0aCArPSBwYWRkaW5nICogMjtcbiAgICAgICAgYm91bmRzLmhlaWdodCArPSBwYWRkaW5nICogMjtcbiAgICB9XG5cbiAgICAvLyBmb3Igbm93IHdlIGNhY2hlIHRoZSBjdXJyZW50IHJlbmRlclRhcmdldCB0aGF0IHRoZSB3ZWJHTCByZW5kZXJlciBpcyBjdXJyZW50bHkgdXNpbmcuXG4gICAgLy8gdGhpcyBjb3VsZCBiZSBtb3JlIGVsZWdlbnQuLlxuICAgIHZhciBjYWNoZWRSZW5kZXJUYXJnZXQgPSByZW5kZXJlci5jdXJyZW50UmVuZGVyVGFyZ2V0O1xuICAgIC8vIFdlIGFsc28gc3RvcmUgdGhlIGZpbHRlciBzdGFjayAtIEkgd2lsbCBkZWZpbml0ZWx5IGxvb2sgdG8gY2hhbmdlIGhvdyB0aGlzIHdvcmtzIGEgbGl0dGxlIGxhdGVyIGRvd24gdGhlIGxpbmUuXG4gICAgdmFyIHN0YWNrID0gcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5maWx0ZXJTdGFjaztcblxuICAgIC8vIHRoaXMgcmVuZGVyVGV4dHVyZSB3aWxsIGJlIHVzZWQgdG8gc3RvcmUgdGhlIGNhY2hlZCBEaXNwbGF5T2JqZWN0XG4gICAgdmFyIHJlbmRlclRleHR1cmUgPSBuZXcgY29yZS5SZW5kZXJUZXh0dXJlKHJlbmRlcmVyLCBib3VuZHMud2lkdGggfCAwLCBib3VuZHMuaGVpZ2h0IHwgMCk7XG5cbiAgICAvLyBuZWVkIHRvIHNldCAvL1xuICAgIHZhciBtID0gX3RlbXBNYXRyaXg7XG5cbiAgICBtLnR4ID0gLWJvdW5kcy54O1xuICAgIG0udHkgPSAtYm91bmRzLnk7XG5cblxuXG4gICAgLy8gc2V0IGFsbCBwcm9wZXJ0aWVzIHRvIHRoZXJlIG9yaWdpbmFsIHNvIHdlIGNhbiByZW5kZXIgdG8gYSB0ZXh0dXJlXG4gICAgdGhpcy5yZW5kZXJXZWJHTCA9IHRoaXMuX29yaWdpbmFsUmVuZGVyV2ViR0w7XG5cbiAgICByZW5kZXJUZXh0dXJlLnJlbmRlcih0aGlzLCBtLCB0cnVlLCB0cnVlKTtcblxuICAgIC8vIG5vdyByZXN0b3JlIHRoZSBzdGF0ZSBiZSBzZXR0aW5nIHRoZSBuZXcgcHJvcGVydGllc1xuICAgIHJlbmRlcmVyLnNldFJlbmRlclRhcmdldChjYWNoZWRSZW5kZXJUYXJnZXQpO1xuICAgIHJlbmRlcmVyLmZpbHRlck1hbmFnZXIuZmlsdGVyU3RhY2sgPSBzdGFjaztcblxuICAgIHRoaXMucmVuZGVyV2ViR0wgICAgID0gdGhpcy5fcmVuZGVyQ2FjaGVkV2ViR0w7XG4gICAgdGhpcy51cGRhdGVUcmFuc2Zvcm0gPSB0aGlzLmRpc3BsYXlPYmplY3RVcGRhdGVUcmFuc2Zvcm07XG4gICAgdGhpcy5nZXRCb3VuZHMgICAgICAgPSB0aGlzLl9nZXRDYWNoZWRCb3VuZHM7XG5cblxuICAgIC8vIGNyZWF0ZSBvdXIgY2FjaGVkIHNwcml0ZVxuICAgIHRoaXMuX2NhY2hlZFNwcml0ZSA9IG5ldyBjb3JlLlNwcml0ZShyZW5kZXJUZXh0dXJlKTtcbiAgICB0aGlzLl9jYWNoZWRTcHJpdGUud29ybGRUcmFuc2Zvcm0gPSB0aGlzLndvcmxkVHJhbnNmb3JtO1xuICAgIHRoaXMuX2NhY2hlZFNwcml0ZS5hbmNob3IueCA9IC0oIGJvdW5kcy54IC8gYm91bmRzLndpZHRoICk7XG4gICAgdGhpcy5fY2FjaGVkU3ByaXRlLmFuY2hvci55ID0gLSggYm91bmRzLnkgLyBib3VuZHMuaGVpZ2h0ICk7XG5cbiAgICAvLyByZXN0b3JlIHRoZSB0cmFuc2Zvcm0gb2YgdGhlIGNhY2hlZCBzcHJpdGUgdG8gYXZvaWQgdGhlIG5hc3R5IGZsaWNrZXIuLlxuICAgIHRoaXMudXBkYXRlVHJhbnNmb3JtKCk7XG5cbiAgICAvLyBtYXAgdGhlIGhpdCB0ZXN0Li5cbiAgICB0aGlzLmNvbnRhaW5zUG9pbnQgPSB0aGlzLl9jYWNoZWRTcHJpdGUuY29udGFpbnNQb2ludC5iaW5kKHRoaXMuX2NhY2hlZFNwcml0ZSk7XG59O1xuXG4vKipcbiogUmVuZGVycyBhIGNhY2hlZCB2ZXJzaW9uIG9mIHRoZSBzcHJpdGUgd2l0aCBjYW52YXNcbipcbiogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLkNhbnZhc1JlbmRlcmVyfSB0aGUgQ2FudmFzIHJlbmRlcmVyXG4qIEBwcml2YXRlXG4qL1xuRGlzcGxheU9iamVjdC5wcm90b3R5cGUuX3JlbmRlckNhY2hlZENhbnZhcyA9IGZ1bmN0aW9uIChyZW5kZXJlcilcbntcbiAgICBpZiAoIXRoaXMudmlzaWJsZSB8fCB0aGlzLndvcmxkQWxwaGEgPD0gMCB8fCAhdGhpcy5yZW5kZXJhYmxlKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuX2luaXRDYWNoZWREaXNwbGF5T2JqZWN0Q2FudmFzKCByZW5kZXJlciApO1xuXG4gICAgdGhpcy5fY2FjaGVkU3ByaXRlLndvcmxkQWxwaGEgPSB0aGlzLndvcmxkQWxwaGE7XG5cbiAgICB0aGlzLl9jYWNoZWRTcHJpdGUucmVuZGVyQ2FudmFzKHJlbmRlcmVyKTtcbn07XG5cbi8vVE9ETyB0aGlzIGNhbiBiZSB0aGUgc2FtZSBhcyB0aGUgd2ViR0wgdmVyaXNvbi4uIHdpbGwgbmVlZCB0byBkbyBhIGxpdHRsZSB0d2Vha2luZyBmaXJzdCB0aG91Z2guLlxuLyoqXG4qIFByZXBhcmVzIHRoZSBDYW52YXMgcmVuZGVyZXIgdG8gY2FjaGUgdGhlIHNwcml0ZVxuKlxuKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuQ2FudmFzUmVuZGVyZXJ9IHRoZSBDYW52YXMgcmVuZGVyZXJcbiogQHByaXZhdGVcbiovXG5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS5faW5pdENhY2hlZERpc3BsYXlPYmplY3RDYW52YXMgPSBmdW5jdGlvbiAocmVuZGVyZXIpXG57XG4gICAgaWYodGhpcy5fY2FjaGVkU3ByaXRlKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vZ2V0IGJvdW5kcyBhY3R1YWxseSB0cmFuc2Zvcm1zIHRoZSBvYmplY3QgZm9yIHVzIGFscmVhZHkhXG4gICAgdmFyIGJvdW5kcyA9IHRoaXMuZ2V0TG9jYWxCb3VuZHMoKTtcblxuICAgIHZhciBjYWNoZWRSZW5kZXJUYXJnZXQgPSByZW5kZXJlci5jb250ZXh0O1xuXG4gICAgdmFyIHJlbmRlclRleHR1cmUgPSBuZXcgY29yZS5SZW5kZXJUZXh0dXJlKHJlbmRlcmVyLCBib3VuZHMud2lkdGggfCAwLCBib3VuZHMuaGVpZ2h0IHwgMCk7XG5cbiAgICAvLyBuZWVkIHRvIHNldCAvL1xuICAgIHZhciBtID0gX3RlbXBNYXRyaXg7XG5cbiAgICBtLnR4ID0gLWJvdW5kcy54O1xuICAgIG0udHkgPSAtYm91bmRzLnk7XG5cbiAgICAvLyBzZXQgYWxsIHByb3BlcnRpZXMgdG8gdGhlcmUgb3JpZ2luYWwgc28gd2UgY2FuIHJlbmRlciB0byBhIHRleHR1cmVcbiAgICB0aGlzLnJlbmRlckNhbnZhcyA9IHRoaXMuX29yaWdpbmFsUmVuZGVyQ2FudmFzO1xuXG4gICAgcmVuZGVyVGV4dHVyZS5yZW5kZXIodGhpcywgbSwgdHJ1ZSk7XG5cbiAgICAvLyBub3cgcmVzdG9yZSB0aGUgc3RhdGUgYmUgc2V0dGluZyB0aGUgbmV3IHByb3BlcnRpZXNcbiAgICByZW5kZXJlci5jb250ZXh0ID0gY2FjaGVkUmVuZGVyVGFyZ2V0O1xuXG4gICAgdGhpcy5yZW5kZXJDYW52YXMgPSB0aGlzLl9yZW5kZXJDYWNoZWRDYW52YXM7XG4gICAgdGhpcy51cGRhdGVUcmFuc2Zvcm0gPSB0aGlzLmRpc3BsYXlPYmplY3RVcGRhdGVUcmFuc2Zvcm07XG4gICAgdGhpcy5nZXRCb3VuZHMgID0gdGhpcy5fZ2V0Q2FjaGVkQm91bmRzO1xuXG5cbiAgICAvLyBjcmVhdGUgb3VyIGNhY2hlZCBzcHJpdGVcbiAgICB0aGlzLl9jYWNoZWRTcHJpdGUgPSBuZXcgY29yZS5TcHJpdGUocmVuZGVyVGV4dHVyZSk7XG4gICAgdGhpcy5fY2FjaGVkU3ByaXRlLndvcmxkVHJhbnNmb3JtID0gdGhpcy53b3JsZFRyYW5zZm9ybTtcbiAgICB0aGlzLl9jYWNoZWRTcHJpdGUuYW5jaG9yLnggPSAtKCBib3VuZHMueCAvIGJvdW5kcy53aWR0aCApO1xuICAgIHRoaXMuX2NhY2hlZFNwcml0ZS5hbmNob3IueSA9IC0oIGJvdW5kcy55IC8gYm91bmRzLmhlaWdodCApO1xuXG4gICAgdGhpcy51cGRhdGVUcmFuc2Zvcm0oKTtcblxuICAgIHRoaXMuY29udGFpbnNQb2ludCA9IHRoaXMuX2NhY2hlZFNwcml0ZS5jb250YWluc1BvaW50LmJpbmQodGhpcy5fY2FjaGVkU3ByaXRlKTtcbn07XG5cbi8qKlxuKiBDYWxjdWxhdGVzIHRoZSBib3VuZHMgb2YgdGhlIGNhY2hlZCBzcHJpdGVcbipcbiogQHByaXZhdGVcbiovXG5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS5fZ2V0Q2FjaGVkQm91bmRzID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLl9jYWNoZWRTcHJpdGUuX2N1cnJlbnRCb3VuZHMgPSBudWxsO1xuXG4gICAgcmV0dXJuIHRoaXMuX2NhY2hlZFNwcml0ZS5nZXRCb3VuZHMoKTtcbn07XG5cbi8qKlxuKiBEZXN0cm95cyB0aGUgY2FjaGVkIHNwcml0ZS5cbipcbiogQHByaXZhdGVcbiovXG5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS5fZGVzdHJveUNhY2hlZERpc3BsYXlPYmplY3QgPSBmdW5jdGlvbiAoKVxue1xuICAgIHRoaXMuX2NhY2hlZFNwcml0ZS5fdGV4dHVyZS5kZXN0cm95KCk7XG4gICAgdGhpcy5fY2FjaGVkU3ByaXRlID0gbnVsbDtcbn07XG5cbkRpc3BsYXlPYmplY3QucHJvdG90eXBlLl9jYWNoZUFzQml0bWFwRGVzdHJveSA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy5jYWNoZUFzQml0bWFwID0gZmFsc2U7XG4gICAgdGhpcy5fb3JpZ2luYWxEZXN0cm95KCk7XG59O1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi9jb3JlJyk7XG5cbi8qKlxuICogVGhlIGluc3RhbmNlIG5hbWUgb2YgdGhlIG9iamVjdC5cbiAqXG4gKiBAbWVtYmVyb2YgUElYSS5EaXNwbGF5T2JqZWN0I1xuICogQG1lbWJlciB7c3RyaW5nfVxuICovXG5jb3JlLkRpc3BsYXlPYmplY3QucHJvdG90eXBlLm5hbWUgPSBudWxsO1xuXG4vKipcbiogUmV0dXJucyB0aGUgZGlzcGxheSBvYmplY3QgaW4gdGhlIGNvbnRhaW5lclxuKlxuKiBAbWVtYmVyb2YgUElYSS5Db250YWluZXIjXG4qIEBwYXJhbSBuYW1lIHtzdHJpbmd9IGluc3RhbmNlIG5hbWVcbiogQHJldHVybiB7UElYSS5EaXNwbGF5T2JqZWN0fVxuKi9cbmNvcmUuQ29udGFpbmVyLnByb3RvdHlwZS5nZXRDaGlsZEJ5TmFtZSA9IGZ1bmN0aW9uIChuYW1lKVxue1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5jaGlsZHJlbi5sZW5ndGg7IGkrKylcbiAgICB7XG4gICAgICAgIGlmICh0aGlzLmNoaWxkcmVuW2ldLm5hbWUgPT09IG5hbWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmNoaWxkcmVuW2ldO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xufTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vY29yZScpO1xuXG4vKipcbiogUmV0dXJucyB0aGUgZ2xvYmFsIHBvc2l0aW9uIG9mIHRoZSBkaXNwbGF5T2JqZWN0XG4qXG4qIEBtZW1iZXJvZiBQSVhJLkRpc3BsYXlPYmplY3QjXG4qIEBwYXJhbSBwb2ludCB7UG9pbnR9IHRoZSBwb2ludCB0byB3cml0ZSB0aGUgZ2xvYmFsIHZhbHVlIHRvLiBJZiBudWxsIGEgbmV3IHBvaW50IHdpbGwgYmUgcmV0dXJuZWRcbiogQHJldHVybiB7UG9pbnR9XG4qL1xuY29yZS5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS5nZXRHbG9iYWxQb3NpdGlvbiA9IGZ1bmN0aW9uIChwb2ludClcbntcbiAgICBwb2ludCA9IHBvaW50IHx8IG5ldyBjb3JlLlBvaW50KCk7XG5cbiAgICBpZih0aGlzLnBhcmVudClcbiAgICB7XG4gICAgICAgIHRoaXMuZGlzcGxheU9iamVjdFVwZGF0ZVRyYW5zZm9ybSgpO1xuXG4gICAgICAgIHBvaW50LnggPSB0aGlzLndvcmxkVHJhbnNmb3JtLnR4O1xuICAgICAgICBwb2ludC55ID0gdGhpcy53b3JsZFRyYW5zZm9ybS50eTtcbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgcG9pbnQueCA9IHRoaXMucG9zaXRpb24ueDtcbiAgICAgICAgcG9pbnQueSA9IHRoaXMucG9zaXRpb24ueTtcbiAgICB9XG5cbiAgICByZXR1cm4gcG9pbnQ7XG59O1xuIiwiLyoqXG4gKiBAZmlsZSAgICAgICAgTWFpbiBleHBvcnQgb2YgdGhlIFBJWEkgZXh0cmFzIGxpYnJhcnlcbiAqIEBhdXRob3IgICAgICBNYXQgR3JvdmVzIDxtYXRAZ29vZGJveWRpZ2l0YWwuY29tPlxuICogQGNvcHlyaWdodCAgIDIwMTMtMjAxNSBHb29kQm95RGlnaXRhbFxuICogQGxpY2Vuc2UgICAgIHtAbGluayBodHRwczovL2dpdGh1Yi5jb20vcGl4aWpzL3BpeGkuanMvYmxvYi9tYXN0ZXIvTElDRU5TRXxNSVQgTGljZW5zZX1cbiAqL1xuXG5yZXF1aXJlKCcuL2NhY2hlQXNCaXRtYXAnKTtcbnJlcXVpcmUoJy4vZ2V0Q2hpbGRCeU5hbWUnKTtcbnJlcXVpcmUoJy4vZ2V0R2xvYmFsUG9zaXRpb24nKTtcblxuLyoqXG4gKiBAbmFtZXNwYWNlIFBJWEkuZXh0cmFzXG4gKi9cbm1vZHVsZS5leHBvcnRzID0ge1xuICAgIE1vdmllQ2xpcDogICAgICByZXF1aXJlKCcuL01vdmllQ2xpcCcpLFxuICAgIFRpbGluZ1Nwcml0ZTogICByZXF1aXJlKCcuL1RpbGluZ1Nwcml0ZScpLFxuICAgIEJpdG1hcFRleHQ6ICAgICByZXF1aXJlKCcuL0JpdG1hcFRleHQnKVxufTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vLi4vY29yZScpO1xuLy8gQHNlZSBodHRwczovL2dpdGh1Yi5jb20vc3Vic3RhY2svYnJmcy9pc3N1ZXMvMjVcblxuXG4vLyBUT0RPIChjZW5nbGVyKSAtIFRoZSBZIGlzIGZsaXBwZWQgaW4gdGhpcyBzaGFkZXIgZm9yIHNvbWUgcmVhc29uLlxuXG4vKipcbiAqIEBhdXRob3IgVmljbyBAdmljb2NvdGVhXG4gKiBvcmlnaW5hbCBzaGFkZXIgOiBodHRwczovL3d3dy5zaGFkZXJ0b3kuY29tL3ZpZXcvbHNzR0RqIGJ5IEBtb3ZBWDEzaFxuICovXG5cbi8qKlxuICogQW4gQVNDSUkgZmlsdGVyLlxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5BYnN0cmFjdEZpbHRlclxuICogQG1lbWJlcm9mIFBJWEkuZmlsdGVyc1xuICovXG5mdW5jdGlvbiBBc2NpaUZpbHRlcigpXG57XG4gICAgY29yZS5BYnN0cmFjdEZpbHRlci5jYWxsKHRoaXMsXG4gICAgICAgIC8vIHZlcnRleCBzaGFkZXJcbiAgICAgICAgbnVsbCxcbiAgICAgICAgLy8gZnJhZ21lbnQgc2hhZGVyXG4gICAgICAgIFwicHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XFxuXFxudW5pZm9ybSB2ZWM0IGRpbWVuc2lvbnM7XFxudW5pZm9ybSBmbG9hdCBwaXhlbFNpemU7XFxudW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXI7XFxuXFxuZmxvYXQgY2hhcmFjdGVyKGZsb2F0IG4sIHZlYzIgcClcXG57XFxuICAgIHAgPSBmbG9vcihwKnZlYzIoNC4wLCAtNC4wKSArIDIuNSk7XFxuICAgIGlmIChjbGFtcChwLngsIDAuMCwgNC4wKSA9PSBwLnggJiYgY2xhbXAocC55LCAwLjAsIDQuMCkgPT0gcC55KVxcbiAgICB7XFxuICAgICAgICBpZiAoaW50KG1vZChuL2V4cDIocC54ICsgNS4wKnAueSksIDIuMCkpID09IDEpIHJldHVybiAxLjA7XFxuICAgIH1cXG4gICAgcmV0dXJuIDAuMDtcXG59XFxuXFxudm9pZCBtYWluKClcXG57XFxuICAgIHZlYzIgdXYgPSBnbF9GcmFnQ29vcmQueHk7XFxuXFxuICAgIHZlYzMgY29sID0gdGV4dHVyZTJEKHVTYW1wbGVyLCBmbG9vciggdXYgLyBwaXhlbFNpemUgKSAqIHBpeGVsU2l6ZSAvIGRpbWVuc2lvbnMueHkpLnJnYjtcXG5cXG4gICAgZmxvYXQgZ3JheSA9IChjb2wuciArIGNvbC5nICsgY29sLmIpIC8gMy4wO1xcblxcbiAgICBmbG9hdCBuID0gIDY1NTM2LjA7ICAgICAgICAgICAgIC8vIC5cXG4gICAgaWYgKGdyYXkgPiAwLjIpIG4gPSA2NTYwMC4wOyAgICAvLyA6XFxuICAgIGlmIChncmF5ID4gMC4zKSBuID0gMzMyNzcyLjA7ICAgLy8gKlxcbiAgICBpZiAoZ3JheSA+IDAuNCkgbiA9IDE1MjU1MDg2LjA7IC8vIG9cXG4gICAgaWYgKGdyYXkgPiAwLjUpIG4gPSAyMzM4NTE2NC4wOyAvLyAmXFxuICAgIGlmIChncmF5ID4gMC42KSBuID0gMTUyNTIwMTQuMDsgLy8gOFxcbiAgICBpZiAoZ3JheSA+IDAuNykgbiA9IDEzMTk5NDUyLjA7IC8vIEBcXG4gICAgaWYgKGdyYXkgPiAwLjgpIG4gPSAxMTUxMjgxMC4wOyAvLyAjXFxuXFxuICAgIHZlYzIgcCA9IG1vZCggdXYgLyAoIHBpeGVsU2l6ZSAqIDAuNSApLCAyLjApIC0gdmVjMigxLjApO1xcbiAgICBjb2wgPSBjb2wgKiBjaGFyYWN0ZXIobiwgcCk7XFxuXFxuICAgIGdsX0ZyYWdDb2xvciA9IHZlYzQoY29sLCAxLjApO1xcbn1cXG5cIixcbiAgICAgICAgLy8gY3VzdG9tIHVuaWZvcm1zXG4gICAgICAgIHtcbiAgICAgICAgICAgIGRpbWVuc2lvbnM6IHsgdHlwZTogJzRmdicsIHZhbHVlOiBuZXcgRmxvYXQzMkFycmF5KFswLCAwLCAwLCAwXSkgfSxcbiAgICAgICAgICAgIHBpeGVsU2l6ZTogIHsgdHlwZTogJzFmJywgdmFsdWU6IDggfVxuICAgICAgICB9XG4gICAgKTtcbn1cblxuQXNjaWlGaWx0ZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShjb3JlLkFic3RyYWN0RmlsdGVyLnByb3RvdHlwZSk7XG5Bc2NpaUZpbHRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBBc2NpaUZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gQXNjaWlGaWx0ZXI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKEFzY2lpRmlsdGVyLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFRoZSBwaXhlbCBzaXplIHVzZWQgYnkgdGhlIGZpbHRlci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLkFzY2lpRmlsdGVyI1xuICAgICAqL1xuICAgIHNpemU6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy51bmlmb3Jtcy5waXhlbFNpemUudmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLnBpeGVsU2l6ZS52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfVxufSk7XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uLy4uL2NvcmUnKSxcbiAgICBCbHVyWEZpbHRlciA9IHJlcXVpcmUoJy4uL2JsdXIvQmx1clhGaWx0ZXInKSxcbiAgICBCbHVyWUZpbHRlciA9IHJlcXVpcmUoJy4uL2JsdXIvQmx1cllGaWx0ZXInKTtcblxuLyoqXG4gKiBUaGUgQmxvb21GaWx0ZXIgYXBwbGllcyBhIEdhdXNzaWFuIGJsdXIgdG8gYW4gb2JqZWN0LlxuICogVGhlIHN0cmVuZ3RoIG9mIHRoZSBibHVyIGNhbiBiZSBzZXQgZm9yIHgtIGFuZCB5LWF4aXMgc2VwYXJhdGVseS5cbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQWJzdHJhY3RGaWx0ZXJcbiAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnNcbiAqL1xuZnVuY3Rpb24gQmxvb21GaWx0ZXIoKVxue1xuICAgIGNvcmUuQWJzdHJhY3RGaWx0ZXIuY2FsbCh0aGlzKTtcblxuICAgIHRoaXMuYmx1clhGaWx0ZXIgPSBuZXcgQmx1clhGaWx0ZXIoKTtcbiAgICB0aGlzLmJsdXJZRmlsdGVyID0gbmV3IEJsdXJZRmlsdGVyKCk7XG5cbiAgICB0aGlzLmRlZmF1bHRGaWx0ZXIgPSBuZXcgY29yZS5BYnN0cmFjdEZpbHRlcigpO1xufVxuXG5CbG9vbUZpbHRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuQWJzdHJhY3RGaWx0ZXIucHJvdG90eXBlKTtcbkJsb29tRmlsdGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IEJsb29tRmlsdGVyO1xubW9kdWxlLmV4cG9ydHMgPSBCbG9vbUZpbHRlcjtcblxuQmxvb21GaWx0ZXIucHJvdG90eXBlLmFwcGx5RmlsdGVyID0gZnVuY3Rpb24gKHJlbmRlcmVyLCBpbnB1dCwgb3V0cHV0KVxue1xuICAgIHZhciByZW5kZXJUYXJnZXQgPSByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLmdldFJlbmRlclRhcmdldCh0cnVlKTtcblxuICAgIC8vVE9ETyAtIGNvcHlUZXhTdWJJbWFnZTJEIGNvdWxkIGJlIHVzZWQgaGVyZT9cbiAgICB0aGlzLmRlZmF1bHRGaWx0ZXIuYXBwbHlGaWx0ZXIocmVuZGVyZXIsIGlucHV0LCBvdXRwdXQpO1xuXG4gICAgdGhpcy5ibHVyWEZpbHRlci5hcHBseUZpbHRlcihyZW5kZXJlciwgaW5wdXQsIHJlbmRlclRhcmdldCk7XG5cbiAgICByZW5kZXJlci5ibGVuZE1vZGVNYW5hZ2VyLnNldEJsZW5kTW9kZShjb3JlLkJMRU5EX01PREVTLlNDUkVFTik7XG5cbiAgICB0aGlzLmJsdXJZRmlsdGVyLmFwcGx5RmlsdGVyKHJlbmRlcmVyLCByZW5kZXJUYXJnZXQsIG91dHB1dCk7XG5cbiAgICByZW5kZXJlci5ibGVuZE1vZGVNYW5hZ2VyLnNldEJsZW5kTW9kZShjb3JlLkJMRU5EX01PREVTLk5PUk1BTCk7XG5cbiAgICByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLnJldHVyblJlbmRlclRhcmdldChyZW5kZXJUYXJnZXQpO1xufTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoQmxvb21GaWx0ZXIucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgc3RyZW5ndGggb2YgYm90aCB0aGUgYmx1clggYW5kIGJsdXJZIHByb3BlcnRpZXMgc2ltdWx0YW5lb3VzbHlcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyT2YgUElYSS5maWx0ZXJzLkJsb29tRmlsdGVyI1xuICAgICAqIEBkZWZhdWx0IDJcbiAgICAgKi9cbiAgICBibHVyOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuYmx1clhGaWx0ZXIuYmx1cjtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuYmx1clhGaWx0ZXIuYmx1ciA9IHRoaXMuYmx1cllGaWx0ZXIuYmx1ciA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIHN0cmVuZ3RoIG9mIHRoZSBibHVyWCBwcm9wZXJ0eVxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJPZiBQSVhJLmZpbHRlcnMuQmxvb21GaWx0ZXIjXG4gICAgICogQGRlZmF1bHQgMlxuICAgICAqL1xuICAgIGJsdXJYOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuYmx1clhGaWx0ZXIuYmx1cjtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuYmx1clhGaWx0ZXIuYmx1ciA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIHN0cmVuZ3RoIG9mIHRoZSBibHVyWSBwcm9wZXJ0eVxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJPZiBQSVhJLmZpbHRlcnMuQmxvb21GaWx0ZXIjXG4gICAgICogQGRlZmF1bHQgMlxuICAgICAqL1xuICAgIGJsdXJZOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuYmx1cllGaWx0ZXIuYmx1cjtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuYmx1cllGaWx0ZXIuYmx1ciA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfVxufSk7XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uLy4uL2NvcmUnKTtcblxuXG4vKipcbiAqIFRoZSBCbHVyRGlyRmlsdGVyIGFwcGxpZXMgYSBHYXVzc2lhbiBibHVyIHRvd2FyZCBhIGRpcmVjdGlvbiB0byBhbiBvYmplY3QuXG4gKlxuICogQGNsYXNzXG4gKiBAcGFyYW0ge251bWJlcn0gZGlyWFxuICogQHBhcmFtIHtudW1iZXJ9IGRpcllcbiAqIEBleHRlbmRzIFBJWEkuQWJzdHJhY3RGaWx0ZXJcbiAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnNcbiAqL1xuZnVuY3Rpb24gQmx1ckRpckZpbHRlcihkaXJYLCBkaXJZKVxue1xuICAgIGNvcmUuQWJzdHJhY3RGaWx0ZXIuY2FsbCh0aGlzLFxuICAgICAgICAvLyB2ZXJ0ZXggc2hhZGVyXG4gICAgICAgIFwiYXR0cmlidXRlIHZlYzIgYVZlcnRleFBvc2l0aW9uO1xcbmF0dHJpYnV0ZSB2ZWMyIGFUZXh0dXJlQ29vcmQ7XFxuYXR0cmlidXRlIHZlYzQgYUNvbG9yO1xcblxcbnVuaWZvcm0gZmxvYXQgc3RyZW5ndGg7XFxudW5pZm9ybSBmbG9hdCBkaXJYO1xcbnVuaWZvcm0gZmxvYXQgZGlyWTtcXG51bmlmb3JtIG1hdDMgcHJvamVjdGlvbk1hdHJpeDtcXG5cXG52YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDtcXG52YXJ5aW5nIHZlYzQgdkNvbG9yO1xcbnZhcnlpbmcgdmVjMiB2Qmx1clRleENvb3Jkc1szXTtcXG5cXG52b2lkIG1haW4odm9pZClcXG57XFxuICAgIGdsX1Bvc2l0aW9uID0gdmVjNCgocHJvamVjdGlvbk1hdHJpeCAqIHZlYzMoKGFWZXJ0ZXhQb3NpdGlvbiksIDEuMCkpLnh5LCAwLjAsIDEuMCk7XFxuICAgIHZUZXh0dXJlQ29vcmQgPSBhVGV4dHVyZUNvb3JkO1xcblxcbiAgICB2Qmx1clRleENvb3Jkc1swXSA9IGFUZXh0dXJlQ29vcmQgKyB2ZWMyKCAoMC4wMDQgKiBzdHJlbmd0aCkgKiBkaXJYLCAoMC4wMDQgKiBzdHJlbmd0aCkgKiBkaXJZICk7XFxuICAgIHZCbHVyVGV4Q29vcmRzWzFdID0gYVRleHR1cmVDb29yZCArIHZlYzIoICgwLjAwOCAqIHN0cmVuZ3RoKSAqIGRpclgsICgwLjAwOCAqIHN0cmVuZ3RoKSAqIGRpclkgKTtcXG4gICAgdkJsdXJUZXhDb29yZHNbMl0gPSBhVGV4dHVyZUNvb3JkICsgdmVjMiggKDAuMDEyICogc3RyZW5ndGgpICogZGlyWCwgKDAuMDEyICogc3RyZW5ndGgpICogZGlyWSApO1xcblxcbiAgICB2Q29sb3IgPSB2ZWM0KGFDb2xvci5yZ2IgKiBhQ29sb3IuYSwgYUNvbG9yLmEpO1xcbn1cXG5cIixcbiAgICAgICAgLy8gZnJhZ21lbnQgc2hhZGVyXG4gICAgICAgIFwicHJlY2lzaW9uIGxvd3AgZmxvYXQ7XFxuXFxudmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7XFxudmFyeWluZyB2ZWMyIHZCbHVyVGV4Q29vcmRzWzNdO1xcbnZhcnlpbmcgdmVjNCB2Q29sb3I7XFxuXFxudW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXI7XFxuXFxudm9pZCBtYWluKHZvaWQpXFxue1xcbiAgICBnbF9GcmFnQ29sb3IgPSB2ZWM0KDAuMCk7XFxuXFxuICAgIGdsX0ZyYWdDb2xvciArPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZUZXh0dXJlQ29vcmQgICAgICkgKiAwLjM5ODk0MjI4MDQwMTQzMjc7XFxuICAgIGdsX0ZyYWdDb2xvciArPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZCbHVyVGV4Q29vcmRzWyAwXSkgKiAwLjI0MTk3MDcyNDUxOTE0NTQ7XFxuICAgIGdsX0ZyYWdDb2xvciArPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZCbHVyVGV4Q29vcmRzWyAxXSkgKiAwLjA1Mzk5MDk2NjUxMzE4OTg1O1xcbiAgICBnbF9GcmFnQ29sb3IgKz0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2Qmx1clRleENvb3Jkc1sgMl0pICogMC4wMDQ0MzE4NDg0MTE5MzgzNDE7XFxufVxcblwiLFxuICAgICAgICAvLyBzZXQgdGhlIHVuaWZvcm1zXG4gICAgICAgIHtcbiAgICAgICAgICAgIHN0cmVuZ3RoOiB7IHR5cGU6ICcxZicsIHZhbHVlOiAxIH0sXG4gICAgICAgICAgICBkaXJYOiB7IHR5cGU6ICcxZicsIHZhbHVlOiBkaXJYIHx8IDAgfSxcbiAgICAgICAgICAgIGRpclk6IHsgdHlwZTogJzFmJywgdmFsdWU6IGRpclkgfHwgMCB9XG4gICAgICAgIH1cbiAgICApO1xuXG4gICAgdGhpcy5kZWZhdWx0RmlsdGVyID0gbmV3IGNvcmUuQWJzdHJhY3RGaWx0ZXIoKTtcblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIG51bWJlciBvZiBwYXNzZXMgZm9yIGJsdXIuIE1vcmUgcGFzc2VzIG1lYW5zIGhpZ2hlciBxdWFpbGl0eSBibHVyaW5nLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDFcbiAgICAgKi9cbiAgICB0aGlzLnBhc3NlcyA9IDE7XG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBYIGRpcmVjdGlvbiBvZiB0aGUgYmx1clxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDBcbiAgICAgKi9cbiAgICB0aGlzLmRpclggPSBkaXJYIHx8IDA7XG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBZIGRpcmVjdGlvbiBvZiB0aGUgYmx1clxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDBcbiAgICAgKi9cbiAgICB0aGlzLmRpclkgPSBkaXJZIHx8IDA7XG5cbiAgICB0aGlzLnN0cmVuZ3RoID0gNDtcbn1cblxuQmx1ckRpckZpbHRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuQWJzdHJhY3RGaWx0ZXIucHJvdG90eXBlKTtcbkJsdXJEaXJGaWx0ZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gQmx1ckRpckZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gQmx1ckRpckZpbHRlcjtcblxuQmx1ckRpckZpbHRlci5wcm90b3R5cGUuYXBwbHlGaWx0ZXIgPSBmdW5jdGlvbiAocmVuZGVyZXIsIGlucHV0LCBvdXRwdXQsIGNsZWFyKSB7XG5cbiAgICB2YXIgc2hhZGVyID0gdGhpcy5nZXRTaGFkZXIocmVuZGVyZXIpO1xuXG4gICAgdGhpcy51bmlmb3Jtcy5zdHJlbmd0aC52YWx1ZSA9IHRoaXMuc3RyZW5ndGggLyA0IC8gdGhpcy5wYXNzZXMgKiAoaW5wdXQuZnJhbWUud2lkdGggLyBpbnB1dC5zaXplLndpZHRoKTtcblxuICAgIGlmICh0aGlzLnBhc3NlcyA9PT0gMSkge1xuICAgICAgICByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLmFwcGx5RmlsdGVyKHNoYWRlciwgaW5wdXQsIG91dHB1dCwgY2xlYXIpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHZhciByZW5kZXJUYXJnZXQgPSByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLmdldFJlbmRlclRhcmdldCh0cnVlKTtcblxuICAgICAgICByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLmFwcGx5RmlsdGVyKHNoYWRlciwgaW5wdXQsIHJlbmRlclRhcmdldCwgY2xlYXIpO1xuXG4gICAgICAgIGZvcih2YXIgaSA9IDA7IGkgPCB0aGlzLnBhc3Nlcy0yOyBpKyspXG4gICAgICAgIHtcbiAgICAgICAgICAgIC8vdGhpcy51bmlmb3Jtcy5zdHJlbmd0aC52YWx1ZSA9IHRoaXMuc3RyZW5ndGggLyA0IC8gKHRoaXMucGFzc2VzKyhpKjIpKSAqIChpbnB1dC5mcmFtZS53aWR0aCAvIGlucHV0LnNpemUud2lkdGgpO1xuICAgICAgICAgICAgcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5hcHBseUZpbHRlcihzaGFkZXIsIHJlbmRlclRhcmdldCwgcmVuZGVyVGFyZ2V0LCBjbGVhcik7XG4gICAgICAgIH1cblxuICAgICAgICByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLmFwcGx5RmlsdGVyKHNoYWRlciwgcmVuZGVyVGFyZ2V0LCBvdXRwdXQsIGNsZWFyKTtcblxuICAgICAgICByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLnJldHVyblJlbmRlclRhcmdldChyZW5kZXJUYXJnZXQpO1xuICAgIH1cbn07XG5cblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoQmx1ckRpckZpbHRlci5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBzdHJlbmd0aCBvZiBib3RoIHRoZSBibHVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuQmx1ckRpckZpbHRlciNcbiAgICAgKiBAZGVmYXVsdCAyXG4gICAgICovXG4gICAgYmx1cjoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnN0cmVuZ3RoO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5wYWRkaW5nID0gdmFsdWUgKiAwLjU7XG4gICAgICAgICAgICB0aGlzLnN0cmVuZ3RoID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9LFxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIFggZGlyZWN0aW9uIG9mIHRoZSBibHVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuQmx1cllGaWx0ZXIjXG4gICAgICogQGRlZmF1bHQgMFxuICAgICAqL1xuICAgIGRpclg6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5kaXJYO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy5kaXJYLnZhbHVlID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9LFxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIFkgZGlyZWN0aW9uIG9mIHRoZSBibHVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuQmx1ckRpckZpbHRlciNcbiAgICAgKiBAZGVmYXVsdCAwXG4gICAgICovXG4gICAgZGlyWToge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmRpclk7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLmRpclkudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi8uLi9jb3JlJyksXG4gICAgQmx1clhGaWx0ZXIgPSByZXF1aXJlKCcuL0JsdXJYRmlsdGVyJyksXG4gICAgQmx1cllGaWx0ZXIgPSByZXF1aXJlKCcuL0JsdXJZRmlsdGVyJyk7XG5cbi8qKlxuICogVGhlIEJsdXJGaWx0ZXIgYXBwbGllcyBhIEdhdXNzaWFuIGJsdXIgdG8gYW4gb2JqZWN0LlxuICogVGhlIHN0cmVuZ3RoIG9mIHRoZSBibHVyIGNhbiBiZSBzZXQgZm9yIHgtIGFuZCB5LWF4aXMgc2VwYXJhdGVseS5cbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQWJzdHJhY3RGaWx0ZXJcbiAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnNcbiAqL1xuZnVuY3Rpb24gQmx1ckZpbHRlcigpXG57XG4gICAgY29yZS5BYnN0cmFjdEZpbHRlci5jYWxsKHRoaXMpO1xuXG4gICAgdGhpcy5ibHVyWEZpbHRlciA9IG5ldyBCbHVyWEZpbHRlcigpO1xuICAgIHRoaXMuYmx1cllGaWx0ZXIgPSBuZXcgQmx1cllGaWx0ZXIoKTtcbn1cblxuQmx1ckZpbHRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuQWJzdHJhY3RGaWx0ZXIucHJvdG90eXBlKTtcbkJsdXJGaWx0ZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gQmx1ckZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gQmx1ckZpbHRlcjtcblxuQmx1ckZpbHRlci5wcm90b3R5cGUuYXBwbHlGaWx0ZXIgPSBmdW5jdGlvbiAocmVuZGVyZXIsIGlucHV0LCBvdXRwdXQpXG57XG4gICAgdmFyIHJlbmRlclRhcmdldCA9IHJlbmRlcmVyLmZpbHRlck1hbmFnZXIuZ2V0UmVuZGVyVGFyZ2V0KHRydWUpO1xuXG4gICAgdGhpcy5ibHVyWEZpbHRlci5hcHBseUZpbHRlcihyZW5kZXJlciwgaW5wdXQsIHJlbmRlclRhcmdldCk7XG4gICAgdGhpcy5ibHVyWUZpbHRlci5hcHBseUZpbHRlcihyZW5kZXJlciwgcmVuZGVyVGFyZ2V0LCBvdXRwdXQpO1xuXG4gICAgcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5yZXR1cm5SZW5kZXJUYXJnZXQocmVuZGVyVGFyZ2V0KTtcbn07XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKEJsdXJGaWx0ZXIucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgc3RyZW5ndGggb2YgYm90aCB0aGUgYmx1clggYW5kIGJsdXJZIHByb3BlcnRpZXMgc2ltdWx0YW5lb3VzbHlcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyT2YgUElYSS5maWx0ZXJzLkJsdXJGaWx0ZXIjXG4gICAgICogQGRlZmF1bHQgMlxuICAgICAqL1xuICAgIGJsdXI6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5ibHVyWEZpbHRlci5ibHVyO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5wYWRkaW5nID0gTWF0aC5hYnModmFsdWUpICogMC41O1xuICAgICAgICAgICAgdGhpcy5ibHVyWEZpbHRlci5ibHVyID0gdGhpcy5ibHVyWUZpbHRlci5ibHVyID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgbnVtYmVyIG9mIHBhc3NlcyBmb3IgYmx1ci4gTW9yZSBwYXNzZXMgbWVhbnMgaGlnaGVyIHF1YWlsaXR5IGJsdXJpbmcuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5CbHVyWUZpbHRlciNcbiAgICAgKiBAZGVmYXVsdCAxXG4gICAgICovXG4gICAgcGFzc2VzOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuICB0aGlzLmJsdXJYRmlsdGVyLnBhc3NlcztcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuYmx1clhGaWx0ZXIucGFzc2VzID0gdGhpcy5ibHVyWUZpbHRlci5wYXNzZXMgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBzdHJlbmd0aCBvZiB0aGUgYmx1clggcHJvcGVydHlcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyT2YgUElYSS5maWx0ZXJzLkJsdXJGaWx0ZXIjXG4gICAgICogQGRlZmF1bHQgMlxuICAgICAqL1xuICAgIGJsdXJYOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuYmx1clhGaWx0ZXIuYmx1cjtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuYmx1clhGaWx0ZXIuYmx1ciA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIHN0cmVuZ3RoIG9mIHRoZSBibHVyWSBwcm9wZXJ0eVxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJPZiBQSVhJLmZpbHRlcnMuQmx1ckZpbHRlciNcbiAgICAgKiBAZGVmYXVsdCAyXG4gICAgICovXG4gICAgYmx1clk6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5ibHVyWUZpbHRlci5ibHVyO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5ibHVyWUZpbHRlci5ibHVyID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG59KTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vLi4vY29yZScpO1xuLy8gQHNlZSBodHRwczovL2dpdGh1Yi5jb20vc3Vic3RhY2svYnJmcy9pc3N1ZXMvMjVcblxuXG4vKipcbiAqIFRoZSBCbHVyWEZpbHRlciBhcHBsaWVzIGEgaG9yaXpvbnRhbCBHYXVzc2lhbiBibHVyIHRvIGFuIG9iamVjdC5cbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQWJzdHJhY3RGaWx0ZXJcbiAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnNcbiAqL1xuZnVuY3Rpb24gQmx1clhGaWx0ZXIoKVxue1xuICAgIGNvcmUuQWJzdHJhY3RGaWx0ZXIuY2FsbCh0aGlzLFxuICAgICAgICAvLyB2ZXJ0ZXggc2hhZGVyXG4gICAgICAgIFwiYXR0cmlidXRlIHZlYzIgYVZlcnRleFBvc2l0aW9uO1xcbmF0dHJpYnV0ZSB2ZWMyIGFUZXh0dXJlQ29vcmQ7XFxuYXR0cmlidXRlIHZlYzQgYUNvbG9yO1xcblxcbnVuaWZvcm0gZmxvYXQgc3RyZW5ndGg7XFxudW5pZm9ybSBtYXQzIHByb2plY3Rpb25NYXRyaXg7XFxuXFxudmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7XFxudmFyeWluZyB2ZWM0IHZDb2xvcjtcXG52YXJ5aW5nIHZlYzIgdkJsdXJUZXhDb29yZHNbNl07XFxuXFxudm9pZCBtYWluKHZvaWQpXFxue1xcbiAgICBnbF9Qb3NpdGlvbiA9IHZlYzQoKHByb2plY3Rpb25NYXRyaXggKiB2ZWMzKChhVmVydGV4UG9zaXRpb24pLCAxLjApKS54eSwgMC4wLCAxLjApO1xcbiAgICB2VGV4dHVyZUNvb3JkID0gYVRleHR1cmVDb29yZDtcXG5cXG4gICAgdkJsdXJUZXhDb29yZHNbIDBdID0gYVRleHR1cmVDb29yZCArIHZlYzIoLTAuMDEyICogc3RyZW5ndGgsIDAuMCk7XFxuICAgIHZCbHVyVGV4Q29vcmRzWyAxXSA9IGFUZXh0dXJlQ29vcmQgKyB2ZWMyKC0wLjAwOCAqIHN0cmVuZ3RoLCAwLjApO1xcbiAgICB2Qmx1clRleENvb3Jkc1sgMl0gPSBhVGV4dHVyZUNvb3JkICsgdmVjMigtMC4wMDQgKiBzdHJlbmd0aCwgMC4wKTtcXG4gICAgdkJsdXJUZXhDb29yZHNbIDNdID0gYVRleHR1cmVDb29yZCArIHZlYzIoIDAuMDA0ICogc3RyZW5ndGgsIDAuMCk7XFxuICAgIHZCbHVyVGV4Q29vcmRzWyA0XSA9IGFUZXh0dXJlQ29vcmQgKyB2ZWMyKCAwLjAwOCAqIHN0cmVuZ3RoLCAwLjApO1xcbiAgICB2Qmx1clRleENvb3Jkc1sgNV0gPSBhVGV4dHVyZUNvb3JkICsgdmVjMiggMC4wMTIgKiBzdHJlbmd0aCwgMC4wKTtcXG5cXG4gICAgdkNvbG9yID0gdmVjNChhQ29sb3IucmdiICogYUNvbG9yLmEsIGFDb2xvci5hKTtcXG59XFxuXCIsXG4gICAgICAgIC8vIGZyYWdtZW50IHNoYWRlclxuICAgICAgICBcInByZWNpc2lvbiBsb3dwIGZsb2F0O1xcblxcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xcbnZhcnlpbmcgdmVjMiB2Qmx1clRleENvb3Jkc1s2XTtcXG52YXJ5aW5nIHZlYzQgdkNvbG9yO1xcblxcbnVuaWZvcm0gc2FtcGxlcjJEIHVTYW1wbGVyO1xcblxcbnZvaWQgbWFpbih2b2lkKVxcbntcXG4gICAgZ2xfRnJhZ0NvbG9yID0gdmVjNCgwLjApO1xcblxcbiAgICBnbF9GcmFnQ29sb3IgKz0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2Qmx1clRleENvb3Jkc1sgMF0pKjAuMDA0NDMxODQ4NDExOTM4MzQxO1xcbiAgICBnbF9GcmFnQ29sb3IgKz0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2Qmx1clRleENvb3Jkc1sgMV0pKjAuMDUzOTkwOTY2NTEzMTg5ODU7XFxuICAgIGdsX0ZyYWdDb2xvciArPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZCbHVyVGV4Q29vcmRzWyAyXSkqMC4yNDE5NzA3MjQ1MTkxNDU0O1xcbiAgICBnbF9GcmFnQ29sb3IgKz0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2VGV4dHVyZUNvb3JkICAgICApKjAuMzk4OTQyMjgwNDAxNDMyNztcXG4gICAgZ2xfRnJhZ0NvbG9yICs9IHRleHR1cmUyRCh1U2FtcGxlciwgdkJsdXJUZXhDb29yZHNbIDNdKSowLjI0MTk3MDcyNDUxOTE0NTQ7XFxuICAgIGdsX0ZyYWdDb2xvciArPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZCbHVyVGV4Q29vcmRzWyA0XSkqMC4wNTM5OTA5NjY1MTMxODk4NTtcXG4gICAgZ2xfRnJhZ0NvbG9yICs9IHRleHR1cmUyRCh1U2FtcGxlciwgdkJsdXJUZXhDb29yZHNbIDVdKSowLjAwNDQzMTg0ODQxMTkzODM0MTtcXG59XFxuXCIsXG4gICAgICAgIC8vIHNldCB0aGUgdW5pZm9ybXNcbiAgICAgICAge1xuICAgICAgICAgICAgc3RyZW5ndGg6IHsgdHlwZTogJzFmJywgdmFsdWU6IDEgfVxuICAgICAgICB9XG4gICAgKTtcblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIG51bWJlciBvZiBwYXNzZXMgZm9yIGJsdXIuIE1vcmUgcGFzc2VzIG1lYW5zIGhpZ2hlciBxdWFpbGl0eSBibHVyaW5nLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDFcbiAgICAgKi9cbiAgICB0aGlzLnBhc3NlcyA9IDE7XG5cbiAgICB0aGlzLnN0cmVuZ3RoID0gNDtcbn1cblxuQmx1clhGaWx0ZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShjb3JlLkFic3RyYWN0RmlsdGVyLnByb3RvdHlwZSk7XG5CbHVyWEZpbHRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBCbHVyWEZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gQmx1clhGaWx0ZXI7XG5cbkJsdXJYRmlsdGVyLnByb3RvdHlwZS5hcHBseUZpbHRlciA9IGZ1bmN0aW9uIChyZW5kZXJlciwgaW5wdXQsIG91dHB1dCwgY2xlYXIpXG57XG4gICAgdmFyIHNoYWRlciA9IHRoaXMuZ2V0U2hhZGVyKHJlbmRlcmVyKTtcblxuICAgIHRoaXMudW5pZm9ybXMuc3RyZW5ndGgudmFsdWUgPSB0aGlzLnN0cmVuZ3RoIC8gNCAvIHRoaXMucGFzc2VzICogKGlucHV0LmZyYW1lLndpZHRoIC8gaW5wdXQuc2l6ZS53aWR0aCk7XG5cbiAgICBpZih0aGlzLnBhc3NlcyA9PT0gMSlcbiAgICB7XG4gICAgICAgIHJlbmRlcmVyLmZpbHRlck1hbmFnZXIuYXBwbHlGaWx0ZXIoc2hhZGVyLCBpbnB1dCwgb3V0cHV0LCBjbGVhcik7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHZhciByZW5kZXJUYXJnZXQgPSByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLmdldFJlbmRlclRhcmdldCh0cnVlKTtcbiAgICAgICAgdmFyIGZsaXAgPSBpbnB1dDtcbiAgICAgICAgdmFyIGZsb3AgPSByZW5kZXJUYXJnZXQ7XG5cbiAgICAgICAgZm9yKHZhciBpID0gMDsgaSA8IHRoaXMucGFzc2VzLTE7IGkrKylcbiAgICAgICAge1xuICAgICAgICAgICAgcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5hcHBseUZpbHRlcihzaGFkZXIsIGZsaXAsIGZsb3AsIHRydWUpO1xuXG4gICAgICAgICAgIHZhciB0ZW1wID0gZmxvcDtcbiAgICAgICAgICAgZmxvcCA9IGZsaXA7XG4gICAgICAgICAgIGZsaXAgPSB0ZW1wO1xuICAgICAgICB9XG5cbiAgICAgICAgcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5hcHBseUZpbHRlcihzaGFkZXIsIGZsaXAsIG91dHB1dCwgY2xlYXIpO1xuXG4gICAgICAgIHJlbmRlcmVyLmZpbHRlck1hbmFnZXIucmV0dXJuUmVuZGVyVGFyZ2V0KHJlbmRlclRhcmdldCk7XG4gICAgfVxufTtcblxuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhCbHVyWEZpbHRlci5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBzdHJlbmd0aCBvZiBib3RoIHRoZSBibHVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuQmx1clhGaWx0ZXIjXG4gICAgICogQGRlZmF1bHQgMlxuICAgICAqL1xuICAgIGJsdXI6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gIHRoaXMuc3RyZW5ndGg7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnBhZGRpbmcgPSAgTWF0aC5hYnModmFsdWUpICogMC41O1xuICAgICAgICAgICAgdGhpcy5zdHJlbmd0aCA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfVxufSk7XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uLy4uL2NvcmUnKTtcbi8vIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL3N1YnN0YWNrL2JyZnMvaXNzdWVzLzI1XG5cblxuLyoqXG4gKiBUaGUgQmx1cllGaWx0ZXIgYXBwbGllcyBhIGhvcml6b250YWwgR2F1c3NpYW4gYmx1ciB0byBhbiBvYmplY3QuXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLkFic3RyYWN0RmlsdGVyXG4gKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzXG4gKi9cbmZ1bmN0aW9uIEJsdXJZRmlsdGVyKClcbntcbiAgICBjb3JlLkFic3RyYWN0RmlsdGVyLmNhbGwodGhpcyxcbiAgICAgICAgLy8gdmVydGV4IHNoYWRlclxuICAgICAgICBcImF0dHJpYnV0ZSB2ZWMyIGFWZXJ0ZXhQb3NpdGlvbjtcXG5hdHRyaWJ1dGUgdmVjMiBhVGV4dHVyZUNvb3JkO1xcbmF0dHJpYnV0ZSB2ZWM0IGFDb2xvcjtcXG5cXG51bmlmb3JtIGZsb2F0IHN0cmVuZ3RoO1xcbnVuaWZvcm0gbWF0MyBwcm9qZWN0aW9uTWF0cml4O1xcblxcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xcbnZhcnlpbmcgdmVjNCB2Q29sb3I7XFxudmFyeWluZyB2ZWMyIHZCbHVyVGV4Q29vcmRzWzZdO1xcblxcbnZvaWQgbWFpbih2b2lkKVxcbntcXG4gICAgZ2xfUG9zaXRpb24gPSB2ZWM0KChwcm9qZWN0aW9uTWF0cml4ICogdmVjMygoYVZlcnRleFBvc2l0aW9uKSwgMS4wKSkueHksIDAuMCwgMS4wKTtcXG4gICAgdlRleHR1cmVDb29yZCA9IGFUZXh0dXJlQ29vcmQ7XFxuXFxuICAgIHZCbHVyVGV4Q29vcmRzWyAwXSA9IGFUZXh0dXJlQ29vcmQgKyB2ZWMyKDAuMCwgLTAuMDEyICogc3RyZW5ndGgpO1xcbiAgICB2Qmx1clRleENvb3Jkc1sgMV0gPSBhVGV4dHVyZUNvb3JkICsgdmVjMigwLjAsIC0wLjAwOCAqIHN0cmVuZ3RoKTtcXG4gICAgdkJsdXJUZXhDb29yZHNbIDJdID0gYVRleHR1cmVDb29yZCArIHZlYzIoMC4wLCAtMC4wMDQgKiBzdHJlbmd0aCk7XFxuICAgIHZCbHVyVGV4Q29vcmRzWyAzXSA9IGFUZXh0dXJlQ29vcmQgKyB2ZWMyKDAuMCwgIDAuMDA0ICogc3RyZW5ndGgpO1xcbiAgICB2Qmx1clRleENvb3Jkc1sgNF0gPSBhVGV4dHVyZUNvb3JkICsgdmVjMigwLjAsICAwLjAwOCAqIHN0cmVuZ3RoKTtcXG4gICAgdkJsdXJUZXhDb29yZHNbIDVdID0gYVRleHR1cmVDb29yZCArIHZlYzIoMC4wLCAgMC4wMTIgKiBzdHJlbmd0aCk7XFxuXFxuICAgdkNvbG9yID0gdmVjNChhQ29sb3IucmdiICogYUNvbG9yLmEsIGFDb2xvci5hKTtcXG59XFxuXCIsXG4gICAgICAgIC8vIGZyYWdtZW50IHNoYWRlclxuICAgICAgICBcInByZWNpc2lvbiBsb3dwIGZsb2F0O1xcblxcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xcbnZhcnlpbmcgdmVjMiB2Qmx1clRleENvb3Jkc1s2XTtcXG52YXJ5aW5nIHZlYzQgdkNvbG9yO1xcblxcbnVuaWZvcm0gc2FtcGxlcjJEIHVTYW1wbGVyO1xcblxcbnZvaWQgbWFpbih2b2lkKVxcbntcXG4gICAgZ2xfRnJhZ0NvbG9yID0gdmVjNCgwLjApO1xcblxcbiAgICBnbF9GcmFnQ29sb3IgKz0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2Qmx1clRleENvb3Jkc1sgMF0pKjAuMDA0NDMxODQ4NDExOTM4MzQxO1xcbiAgICBnbF9GcmFnQ29sb3IgKz0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2Qmx1clRleENvb3Jkc1sgMV0pKjAuMDUzOTkwOTY2NTEzMTg5ODU7XFxuICAgIGdsX0ZyYWdDb2xvciArPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZCbHVyVGV4Q29vcmRzWyAyXSkqMC4yNDE5NzA3MjQ1MTkxNDU0O1xcbiAgICBnbF9GcmFnQ29sb3IgKz0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2VGV4dHVyZUNvb3JkICAgICApKjAuMzk4OTQyMjgwNDAxNDMyNztcXG4gICAgZ2xfRnJhZ0NvbG9yICs9IHRleHR1cmUyRCh1U2FtcGxlciwgdkJsdXJUZXhDb29yZHNbIDNdKSowLjI0MTk3MDcyNDUxOTE0NTQ7XFxuICAgIGdsX0ZyYWdDb2xvciArPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZCbHVyVGV4Q29vcmRzWyA0XSkqMC4wNTM5OTA5NjY1MTMxODk4NTtcXG4gICAgZ2xfRnJhZ0NvbG9yICs9IHRleHR1cmUyRCh1U2FtcGxlciwgdkJsdXJUZXhDb29yZHNbIDVdKSowLjAwNDQzMTg0ODQxMTkzODM0MTtcXG59XFxuXCIsXG4gICAgICAgIC8vIHNldCB0aGUgdW5pZm9ybXNcbiAgICAgICAge1xuICAgICAgICAgICAgc3RyZW5ndGg6IHsgdHlwZTogJzFmJywgdmFsdWU6IDEgfVxuICAgICAgICB9XG4gICAgKTtcblxuICAgIHRoaXMucGFzc2VzID0gMTtcbiAgICB0aGlzLnN0cmVuZ3RoID0gNDtcbn1cblxuQmx1cllGaWx0ZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShjb3JlLkFic3RyYWN0RmlsdGVyLnByb3RvdHlwZSk7XG5CbHVyWUZpbHRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBCbHVyWUZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gQmx1cllGaWx0ZXI7XG5cbkJsdXJZRmlsdGVyLnByb3RvdHlwZS5hcHBseUZpbHRlciA9IGZ1bmN0aW9uIChyZW5kZXJlciwgaW5wdXQsIG91dHB1dCwgY2xlYXIpXG57XG4gICAgdmFyIHNoYWRlciA9IHRoaXMuZ2V0U2hhZGVyKHJlbmRlcmVyKTtcblxuICAgIHRoaXMudW5pZm9ybXMuc3RyZW5ndGgudmFsdWUgPSBNYXRoLmFicyh0aGlzLnN0cmVuZ3RoKSAvIDQgLyB0aGlzLnBhc3NlcyAqIChpbnB1dC5mcmFtZS5oZWlnaHQgLyBpbnB1dC5zaXplLmhlaWdodCk7XG5cbiAgICBpZih0aGlzLnBhc3NlcyA9PT0gMSlcbiAgICB7XG4gICAgICAgIHJlbmRlcmVyLmZpbHRlck1hbmFnZXIuYXBwbHlGaWx0ZXIoc2hhZGVyLCBpbnB1dCwgb3V0cHV0LCBjbGVhcik7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHZhciByZW5kZXJUYXJnZXQgPSByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLmdldFJlbmRlclRhcmdldCh0cnVlKTtcbiAgICAgICAgdmFyIGZsaXAgPSBpbnB1dDtcbiAgICAgICAgdmFyIGZsb3AgPSByZW5kZXJUYXJnZXQ7XG5cbiAgICAgICAgZm9yKHZhciBpID0gMDsgaSA8IHRoaXMucGFzc2VzLTE7IGkrKylcbiAgICAgICAge1xuICAgICAgICAgICAgcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5hcHBseUZpbHRlcihzaGFkZXIsIGZsaXAsIGZsb3AsIHRydWUpO1xuXG4gICAgICAgICAgIHZhciB0ZW1wID0gZmxvcDtcbiAgICAgICAgICAgZmxvcCA9IGZsaXA7XG4gICAgICAgICAgIGZsaXAgPSB0ZW1wO1xuICAgICAgICB9XG5cbiAgICAgICAgcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5hcHBseUZpbHRlcihzaGFkZXIsIGZsaXAsIG91dHB1dCwgY2xlYXIpO1xuXG4gICAgICAgIHJlbmRlcmVyLmZpbHRlck1hbmFnZXIucmV0dXJuUmVuZGVyVGFyZ2V0KHJlbmRlclRhcmdldCk7XG4gICAgfVxufTtcblxuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhCbHVyWUZpbHRlci5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBzdHJlbmd0aCBvZiBib3RoIHRoZSBibHVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuQmx1cllGaWx0ZXIjXG4gICAgICogQGRlZmF1bHQgMlxuICAgICAqL1xuICAgIGJsdXI6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gIHRoaXMuc3RyZW5ndGg7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnBhZGRpbmcgPSBNYXRoLmFicyh2YWx1ZSkgKiAwLjU7XG4gICAgICAgICAgICB0aGlzLnN0cmVuZ3RoID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG59KTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vLi4vY29yZScpO1xuLy8gQHNlZSBodHRwczovL2dpdGh1Yi5jb20vc3Vic3RhY2svYnJmcy9pc3N1ZXMvMjVcblxuXG4vKipcbiAqIEEgU21hcnQgQmx1ciBGaWx0ZXIuXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLkFic3RyYWN0RmlsdGVyXG4gKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzXG4gKi9cbmZ1bmN0aW9uIFNtYXJ0Qmx1ckZpbHRlcigpXG57XG4gICAgY29yZS5BYnN0cmFjdEZpbHRlci5jYWxsKHRoaXMsXG4gICAgICAgIC8vIHZlcnRleCBzaGFkZXJcbiAgICAgICAgbnVsbCxcbiAgICAgICAgLy8gZnJhZ21lbnQgc2hhZGVyXG4gICAgICAgIFwicHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XFxuXFxudmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7XFxuXFxudW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXI7XFxudW5pZm9ybSB2ZWMyIGRlbHRhO1xcblxcbmZsb2F0IHJhbmRvbSh2ZWMzIHNjYWxlLCBmbG9hdCBzZWVkKVxcbntcXG4gICAgcmV0dXJuIGZyYWN0KHNpbihkb3QoZ2xfRnJhZ0Nvb3JkLnh5eiArIHNlZWQsIHNjYWxlKSkgKiA0Mzc1OC41NDUzICsgc2VlZCk7XFxufVxcblxcbnZvaWQgbWFpbih2b2lkKVxcbntcXG4gICAgdmVjNCBjb2xvciA9IHZlYzQoMC4wKTtcXG4gICAgZmxvYXQgdG90YWwgPSAwLjA7XFxuXFxuICAgIGZsb2F0IG9mZnNldCA9IHJhbmRvbSh2ZWMzKDEyLjk4OTgsIDc4LjIzMywgMTUxLjcxODIpLCAwLjApO1xcblxcbiAgICBmb3IgKGZsb2F0IHQgPSAtMzAuMDsgdCA8PSAzMC4wOyB0KyspXFxuICAgIHtcXG4gICAgICAgIGZsb2F0IHBlcmNlbnQgPSAodCArIG9mZnNldCAtIDAuNSkgLyAzMC4wO1xcbiAgICAgICAgZmxvYXQgd2VpZ2h0ID0gMS4wIC0gYWJzKHBlcmNlbnQpO1xcbiAgICAgICAgdmVjNCBzYW1wbGUgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZUZXh0dXJlQ29vcmQgKyBkZWx0YSAqIHBlcmNlbnQpO1xcbiAgICAgICAgc2FtcGxlLnJnYiAqPSBzYW1wbGUuYTtcXG4gICAgICAgIGNvbG9yICs9IHNhbXBsZSAqIHdlaWdodDtcXG4gICAgICAgIHRvdGFsICs9IHdlaWdodDtcXG4gICAgfVxcblxcbiAgICBnbF9GcmFnQ29sb3IgPSBjb2xvciAvIHRvdGFsO1xcbiAgICBnbF9GcmFnQ29sb3IucmdiIC89IGdsX0ZyYWdDb2xvci5hICsgMC4wMDAwMTtcXG59XFxuXCIsXG4gICAgICAgIC8vIHVuaWZvcm1zXG4gICAgICAgIHtcbiAgICAgICAgICBkZWx0YTogeyB0eXBlOiAndjInLCB2YWx1ZTogeyB4OiAwLjEsIHk6IDAuMCB9IH1cbiAgICAgICAgfVxuICAgICk7XG59XG5cblNtYXJ0Qmx1ckZpbHRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuQWJzdHJhY3RGaWx0ZXIucHJvdG90eXBlKTtcblNtYXJ0Qmx1ckZpbHRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBTbWFydEJsdXJGaWx0ZXI7XG5tb2R1bGUuZXhwb3J0cyA9IFNtYXJ0Qmx1ckZpbHRlcjtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vLi4vY29yZScpO1xuLy8gQHNlZSBodHRwczovL2dpdGh1Yi5jb20vc3Vic3RhY2svYnJmcy9pc3N1ZXMvMjVcblxuXG4vKipcbiAqIFRoZSBDb2xvck1hdHJpeEZpbHRlciBjbGFzcyBsZXRzIHlvdSBhcHBseSBhIDV4NCBtYXRyaXggdHJhbnNmb3JtYXRpb24gb24gdGhlIFJHQkFcbiAqIGNvbG9yIGFuZCBhbHBoYSB2YWx1ZXMgb2YgZXZlcnkgcGl4ZWwgb24geW91ciBkaXNwbGF5T2JqZWN0IHRvIHByb2R1Y2UgYSByZXN1bHRcbiAqIHdpdGggYSBuZXcgc2V0IG9mIFJHQkEgY29sb3IgYW5kIGFscGhhIHZhbHVlcy4gSXQncyBwcmV0dHkgcG93ZXJmdWwhXG4gKlxuICogYGBganNcbiAqICB2YXIgY29sb3JNYXRyaXggPSBuZXcgUElYSS5Db2xvck1hdHJpeEZpbHRlcigpO1xuICogIGNvbnRhaW5lci5maWx0ZXJzID0gW2NvbG9yTWF0cml4XTtcbiAqICBjb2xvck1hdHJpeC5jb250cmFzdCgyKTtcbiAqIGBgYFxuICogQGF1dGhvciBDbMOpbWVudCBDaGVuZWJhdWx0IDxjbGVtZW50QGdvb2Rib3lkaWdpdGFsLmNvbT5cbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5BYnN0cmFjdEZpbHRlclxuICogQG1lbWJlcm9mIFBJWEkuZmlsdGVyc1xuICovXG5mdW5jdGlvbiBDb2xvck1hdHJpeEZpbHRlcigpXG57XG4gICAgY29yZS5BYnN0cmFjdEZpbHRlci5jYWxsKHRoaXMsXG4gICAgICAgIC8vIHZlcnRleCBzaGFkZXJcbiAgICAgICAgbnVsbCxcbiAgICAgICAgLy8gZnJhZ21lbnQgc2hhZGVyXG4gICAgICAgIFwicHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XFxuXFxudmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7XFxudW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXI7XFxudW5pZm9ybSBmbG9hdCBtWzI1XTtcXG5cXG52b2lkIG1haW4odm9pZClcXG57XFxuXFxuICAgIHZlYzQgYyA9IHRleHR1cmUyRCh1U2FtcGxlciwgdlRleHR1cmVDb29yZCk7XFxuXFxuICAgIGdsX0ZyYWdDb2xvci5yID0gKG1bMF0gKiBjLnIpO1xcbiAgICAgICAgZ2xfRnJhZ0NvbG9yLnIgKz0gKG1bMV0gKiBjLmcpO1xcbiAgICAgICAgZ2xfRnJhZ0NvbG9yLnIgKz0gKG1bMl0gKiBjLmIpO1xcbiAgICAgICAgZ2xfRnJhZ0NvbG9yLnIgKz0gKG1bM10gKiBjLmEpO1xcbiAgICAgICAgZ2xfRnJhZ0NvbG9yLnIgKz0gbVs0XTtcXG5cXG4gICAgZ2xfRnJhZ0NvbG9yLmcgPSAobVs1XSAqIGMucik7XFxuICAgICAgICBnbF9GcmFnQ29sb3IuZyArPSAobVs2XSAqIGMuZyk7XFxuICAgICAgICBnbF9GcmFnQ29sb3IuZyArPSAobVs3XSAqIGMuYik7XFxuICAgICAgICBnbF9GcmFnQ29sb3IuZyArPSAobVs4XSAqIGMuYSk7XFxuICAgICAgICBnbF9GcmFnQ29sb3IuZyArPSBtWzldO1xcblxcbiAgICAgZ2xfRnJhZ0NvbG9yLmIgPSAobVsxMF0gKiBjLnIpO1xcbiAgICAgICAgZ2xfRnJhZ0NvbG9yLmIgKz0gKG1bMTFdICogYy5nKTtcXG4gICAgICAgIGdsX0ZyYWdDb2xvci5iICs9IChtWzEyXSAqIGMuYik7XFxuICAgICAgICBnbF9GcmFnQ29sb3IuYiArPSAobVsxM10gKiBjLmEpO1xcbiAgICAgICAgZ2xfRnJhZ0NvbG9yLmIgKz0gbVsxNF07XFxuXFxuICAgICBnbF9GcmFnQ29sb3IuYSA9IChtWzE1XSAqIGMucik7XFxuICAgICAgICBnbF9GcmFnQ29sb3IuYSArPSAobVsxNl0gKiBjLmcpO1xcbiAgICAgICAgZ2xfRnJhZ0NvbG9yLmEgKz0gKG1bMTddICogYy5iKTtcXG4gICAgICAgIGdsX0ZyYWdDb2xvci5hICs9IChtWzE4XSAqIGMuYSk7XFxuICAgICAgICBnbF9GcmFnQ29sb3IuYSArPSBtWzE5XTtcXG5cXG59XFxuXCIsXG4gICAgICAgIC8vIGN1c3RvbSB1bmlmb3Jtc1xuICAgICAgICB7XG4gICAgICAgICAgICBtOiB7XG4gICAgICAgICAgICAgICAgdHlwZTogJzFmdicsIHZhbHVlOiBbXG4gICAgICAgICAgICAgICAgICAgIDEsIDAsIDAsIDAsIDAsXG4gICAgICAgICAgICAgICAgICAgIDAsIDEsIDAsIDAsIDAsXG4gICAgICAgICAgICAgICAgICAgIDAsIDAsIDEsIDAsIDAsXG4gICAgICAgICAgICAgICAgICAgIDAsIDAsIDAsIDEsIDBcbiAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICApO1xufVxuXG5Db2xvck1hdHJpeEZpbHRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuQWJzdHJhY3RGaWx0ZXIucHJvdG90eXBlKTtcbkNvbG9yTWF0cml4RmlsdGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IENvbG9yTWF0cml4RmlsdGVyO1xubW9kdWxlLmV4cG9ydHMgPSBDb2xvck1hdHJpeEZpbHRlcjtcblxuXG4vKipcbiAqIFRyYW5zZm9ybXMgY3VycmVudCBtYXRyaXggYW5kIHNldCB0aGUgbmV3IG9uZVxuICpcbiAqIEBwYXJhbSBtYXRyaXgge251bWJlcltdfSAobWF0IDV4NClcbiAqIEBwYXJhbSBtdWx0aXBseSB7Ym9vbGVhbn0gaWYgdHJ1ZSwgY3VycmVudCBtYXRyaXggYW5kIG1hdHJpeCBhcmUgbXVsdGlwbGllZC4gSWYgZmFsc2UsIGp1c3Qgc2V0IHRoZSBjdXJyZW50IG1hdHJpeCB3aXRoIEBwYXJhbSBtYXRyaXhcbiAqL1xuQ29sb3JNYXRyaXhGaWx0ZXIucHJvdG90eXBlLl9sb2FkTWF0cml4ID0gZnVuY3Rpb24gKG1hdHJpeCwgbXVsdGlwbHkpXG57XG4gICAgbXVsdGlwbHkgPSAhIW11bHRpcGx5O1xuXG4gICAgdmFyIG5ld01hdHJpeCA9IG1hdHJpeDtcblxuICAgIGlmIChtdWx0aXBseSkge1xuICAgICAgICB0aGlzLl9tdWx0aXBseShuZXdNYXRyaXgsIHRoaXMudW5pZm9ybXMubS52YWx1ZSwgbWF0cml4KTtcbiAgICAgICAgbmV3TWF0cml4ID0gdGhpcy5fY29sb3JNYXRyaXgobmV3TWF0cml4KTtcbiAgICB9XG5cbiAgICAvLyBzZXQgdGhlIG5ldyBtYXRyaXhcbiAgICB0aGlzLnVuaWZvcm1zLm0udmFsdWUgPSBuZXdNYXRyaXg7XG59O1xuXG4vKipcbiAqIE11bHRpcGxpZXMgdHdvIG1hdDUnc1xuICpcbiAqIEBwYXJhbSBvdXQge251bWJlcltdfSAobWF0IDV4NCkgdGhlIHJlY2VpdmluZyBtYXRyaXhcbiAqIEBwYXJhbSBhIHtudW1iZXJbXX0gKG1hdCA1eDQpIHRoZSBmaXJzdCBvcGVyYW5kXG4gKiBAcGFyYW0gYiB7bnVtYmVyW119IChtYXQgNXg0KSB0aGUgc2Vjb25kIG9wZXJhbmRcbiAqIEByZXR1cm5zIG91dCB7bnVtYmVyW119IChtYXQgNXg0KVxuICovXG5Db2xvck1hdHJpeEZpbHRlci5wcm90b3R5cGUuX211bHRpcGx5ID0gZnVuY3Rpb24gKG91dCwgYSwgYilcbntcblxuICAgIC8vIFJlZCBDaGFubmVsXG4gICAgb3V0WzBdID0gKGFbMF0gKiBiWzBdKSArIChhWzFdICogYls1XSkgKyAoYVsyXSAqIGJbMTBdKSArIChhWzNdICogYlsxNV0pO1xuICAgIG91dFsxXSA9IChhWzBdICogYlsxXSkgKyAoYVsxXSAqIGJbNl0pICsgKGFbMl0gKiBiWzExXSkgKyAoYVszXSAqIGJbMTZdKTtcbiAgICBvdXRbMl0gPSAoYVswXSAqIGJbMl0pICsgKGFbMV0gKiBiWzddKSArIChhWzJdICogYlsxMl0pICsgKGFbM10gKiBiWzE3XSk7XG4gICAgb3V0WzNdID0gKGFbMF0gKiBiWzNdKSArIChhWzFdICogYls4XSkgKyAoYVsyXSAqIGJbMTNdKSArIChhWzNdICogYlsxOF0pO1xuICAgIG91dFs0XSA9IChhWzBdICogYls0XSkgKyAoYVsxXSAqIGJbOV0pICsgKGFbMl0gKiBiWzE0XSkgKyAoYVszXSAqIGJbMTldKTtcblxuICAgIC8vIEdyZWVuIENoYW5uZWxcbiAgICBvdXRbNV0gPSAoYVs1XSAqIGJbMF0pICsgKGFbNl0gKiBiWzVdKSArIChhWzddICogYlsxMF0pICsgKGFbOF0gKiBiWzE1XSk7XG4gICAgb3V0WzZdID0gKGFbNV0gKiBiWzFdKSArIChhWzZdICogYls2XSkgKyAoYVs3XSAqIGJbMTFdKSArIChhWzhdICogYlsxNl0pO1xuICAgIG91dFs3XSA9IChhWzVdICogYlsyXSkgKyAoYVs2XSAqIGJbN10pICsgKGFbN10gKiBiWzEyXSkgKyAoYVs4XSAqIGJbMTddKTtcbiAgICBvdXRbOF0gPSAoYVs1XSAqIGJbM10pICsgKGFbNl0gKiBiWzhdKSArIChhWzddICogYlsxM10pICsgKGFbOF0gKiBiWzE4XSk7XG4gICAgb3V0WzldID0gKGFbNV0gKiBiWzRdKSArIChhWzZdICogYls5XSkgKyAoYVs3XSAqIGJbMTRdKSArIChhWzhdICogYlsxOV0pO1xuXG4gICAgLy8gQmx1ZSBDaGFubmVsXG4gICAgb3V0WzEwXSA9IChhWzEwXSAqIGJbMF0pICsgKGFbMTFdICogYls1XSkgKyAoYVsxMl0gKiBiWzEwXSkgKyAoYVsxM10gKiBiWzE1XSk7XG4gICAgb3V0WzExXSA9IChhWzEwXSAqIGJbMV0pICsgKGFbMTFdICogYls2XSkgKyAoYVsxMl0gKiBiWzExXSkgKyAoYVsxM10gKiBiWzE2XSk7XG4gICAgb3V0WzEyXSA9IChhWzEwXSAqIGJbMl0pICsgKGFbMTFdICogYls3XSkgKyAoYVsxMl0gKiBiWzEyXSkgKyAoYVsxM10gKiBiWzE3XSk7XG4gICAgb3V0WzEzXSA9IChhWzEwXSAqIGJbM10pICsgKGFbMTFdICogYls4XSkgKyAoYVsxMl0gKiBiWzEzXSkgKyAoYVsxM10gKiBiWzE4XSk7XG4gICAgb3V0WzE0XSA9IChhWzEwXSAqIGJbNF0pICsgKGFbMTFdICogYls5XSkgKyAoYVsxMl0gKiBiWzE0XSkgKyAoYVsxM10gKiBiWzE5XSk7XG5cbiAgICAvLyBBbHBoYSBDaGFubmVsXG4gICAgb3V0WzE1XSA9IChhWzE1XSAqIGJbMF0pICsgKGFbMTZdICogYls1XSkgKyAoYVsxN10gKiBiWzEwXSkgKyAoYVsxOF0gKiBiWzE1XSk7XG4gICAgb3V0WzE2XSA9IChhWzE1XSAqIGJbMV0pICsgKGFbMTZdICogYls2XSkgKyAoYVsxN10gKiBiWzExXSkgKyAoYVsxOF0gKiBiWzE2XSk7XG4gICAgb3V0WzE3XSA9IChhWzE1XSAqIGJbMl0pICsgKGFbMTZdICogYls3XSkgKyAoYVsxN10gKiBiWzEyXSkgKyAoYVsxOF0gKiBiWzE3XSk7XG4gICAgb3V0WzE4XSA9IChhWzE1XSAqIGJbM10pICsgKGFbMTZdICogYls4XSkgKyAoYVsxN10gKiBiWzEzXSkgKyAoYVsxOF0gKiBiWzE4XSk7XG4gICAgb3V0WzE5XSA9IChhWzE1XSAqIGJbNF0pICsgKGFbMTZdICogYls5XSkgKyAoYVsxN10gKiBiWzE0XSkgKyAoYVsxOF0gKiBiWzE5XSk7XG5cbiAgICByZXR1cm4gb3V0O1xufTtcblxuLyoqXG4gKiBDcmVhdGUgYSBGbG9hdDMyIEFycmF5IGFuZCBub3JtYWxpemUgdGhlIG9mZnNldCBjb21wb25lbnQgdG8gMC0xXG4gKlxuICogQHBhcmFtIG1hdHJpeCB7bnVtYmVyW119IChtYXQgNXg0KVxuICogQHJldHVybiBtIHtudW1iZXJbXX0gKG1hdCA1eDQpIHdpdGggYWxsIHZhbHVlcyBiZXR3ZWVuIDAtMVxuICovXG5Db2xvck1hdHJpeEZpbHRlci5wcm90b3R5cGUuX2NvbG9yTWF0cml4ID0gZnVuY3Rpb24gKG1hdHJpeClcbntcbiAgICAvLyBDcmVhdGUgYSBGbG9hdDMyIEFycmF5IGFuZCBub3JtYWxpemUgdGhlIG9mZnNldCBjb21wb25lbnQgdG8gMC0xXG4gICAgdmFyIG0gPSBuZXcgRmxvYXQzMkFycmF5KG1hdHJpeCk7XG4gICAgbVs0XSAvPSAyNTU7XG4gICAgbVs5XSAvPSAyNTU7XG4gICAgbVsxNF0gLz0gMjU1O1xuICAgIG1bMTldIC89IDI1NTtcblxuICAgIHJldHVybiBtO1xufTtcblxuLyoqXG4gKiBBZGp1c3RzIGJyaWdodG5lc3NcbiAqXG4gKiBAcGFyYW0gYiB7bnVtYmVyfSB2YWx1ZSBvZiB0aGUgYnJpZ3RobmVzcyAoMCBpcyBibGFjaylcbiAqIEBwYXJhbSBtdWx0aXBseSB7Ym9vbGVhbn0gcmVmZXIgdG8gLl9sb2FkTWF0cml4KCkgbWV0aG9kXG4gKi9cbkNvbG9yTWF0cml4RmlsdGVyLnByb3RvdHlwZS5icmlnaHRuZXNzID0gZnVuY3Rpb24gKGIsIG11bHRpcGx5KVxue1xuICAgIHZhciBtYXRyaXggPSBbXG4gICAgICAgIGIsIDAsIDAsIDAsIDAsXG4gICAgICAgIDAsIGIsIDAsIDAsIDAsXG4gICAgICAgIDAsIDAsIGIsIDAsIDAsXG4gICAgICAgIDAsIDAsIDAsIDEsIDBcbiAgICBdO1xuXG4gICAgdGhpcy5fbG9hZE1hdHJpeChtYXRyaXgsIG11bHRpcGx5KTtcbn07XG5cbi8qKlxuICogU2V0IHRoZSBtYXRyaWNlcyBpbiBncmV5IHNjYWxlc1xuICpcbiAqIEBwYXJhbSBzY2FsZSB7bnVtYmVyfSB2YWx1ZSBvZiB0aGUgZ3JleSAoMCBpcyBibGFjaylcbiAqIEBwYXJhbSBtdWx0aXBseSB7Ym9vbGVhbn0gcmVmZXIgdG8gLl9sb2FkTWF0cml4KCkgbWV0aG9kXG4gKi9cbkNvbG9yTWF0cml4RmlsdGVyLnByb3RvdHlwZS5ncmV5c2NhbGUgPSBmdW5jdGlvbiAoc2NhbGUsIG11bHRpcGx5KVxue1xuICAgIHZhciBtYXRyaXggPSBbXG4gICAgICAgIHNjYWxlLCBzY2FsZSwgc2NhbGUsIDAsIDAsXG4gICAgICAgIHNjYWxlLCBzY2FsZSwgc2NhbGUsIDAsIDAsXG4gICAgICAgIHNjYWxlLCBzY2FsZSwgc2NhbGUsIDAsIDAsXG4gICAgICAgIDAsIDAsIDAsIDEsIDBcbiAgICBdO1xuXG4gICAgdGhpcy5fbG9hZE1hdHJpeChtYXRyaXgsIG11bHRpcGx5KTtcbn07XG4vL0FtZXJpY2FuaXplZCBhbGlhc1xuQ29sb3JNYXRyaXhGaWx0ZXIucHJvdG90eXBlLmdyYXlzY2FsZSA9IENvbG9yTWF0cml4RmlsdGVyLnByb3RvdHlwZS5ncmV5c2NhbGU7XG5cbi8qKlxuICogU2V0IHRoZSBibGFjayBhbmQgd2hpdGUgbWF0cmljZVxuICogTXVsdGlwbHkgdGhlIGN1cnJlbnQgbWF0cml4XG4gKlxuICogQHBhcmFtIG11bHRpcGx5IHtib29sZWFufSByZWZlciB0byAuX2xvYWRNYXRyaXgoKSBtZXRob2RcbiAqL1xuQ29sb3JNYXRyaXhGaWx0ZXIucHJvdG90eXBlLmJsYWNrQW5kV2hpdGUgPSBmdW5jdGlvbiAobXVsdGlwbHkpXG57XG4gICAgdmFyIG1hdHJpeCA9IFtcbiAgICAgICAgMC4zLCAwLjYsIDAuMSwgMCwgMCxcbiAgICAgICAgMC4zLCAwLjYsIDAuMSwgMCwgMCxcbiAgICAgICAgMC4zLCAwLjYsIDAuMSwgMCwgMCxcbiAgICAgICAgMCwgMCwgMCwgMSwgMFxuICAgIF07XG5cbiAgICB0aGlzLl9sb2FkTWF0cml4KG1hdHJpeCwgbXVsdGlwbHkpO1xufTtcblxuLyoqXG4gKiBTZXQgdGhlIGh1ZSBwcm9wZXJ0eSBvZiB0aGUgY29sb3JcbiAqXG4gKiBAcGFyYW0gcm90YXRpb24ge251bWJlcn0gaW4gZGVncmVlc1xuICogQHBhcmFtIG11bHRpcGx5IHtib29sZWFufSByZWZlciB0byAuX2xvYWRNYXRyaXgoKSBtZXRob2RcbiAqL1xuQ29sb3JNYXRyaXhGaWx0ZXIucHJvdG90eXBlLmh1ZSA9IGZ1bmN0aW9uIChyb3RhdGlvbiwgbXVsdGlwbHkpXG57XG4gICAgcm90YXRpb24gPSAocm90YXRpb24gfHwgMCkgLyAxODAgKiBNYXRoLlBJO1xuICAgIHZhciBjb3MgPSBNYXRoLmNvcyhyb3RhdGlvbiksXG4gICAgICAgIHNpbiA9IE1hdGguc2luKHJvdGF0aW9uKTtcblxuICAgIC8vIGx1bWluYW5jZVJlZCwgbHVtaW5hbmNlR3JlZW4sIGx1bWluYW5jZUJsdWVcbiAgICB2YXIgbHVtUiA9IDAuMjEzLCAvLyBvciAwLjMwODZcbiAgICAgICAgbHVtRyA9IDAuNzE1LCAvLyBvciAwLjYwOTRcbiAgICAgICAgbHVtQiA9IDAuMDcyOyAvLyBvciAwLjA4MjBcblxuICAgIHZhciBtYXRyaXggPSBbXG4gICAgICAgIGx1bVIgKyBjb3MgKiAoMSAtIGx1bVIpICsgc2luICogKC1sdW1SKSwgbHVtRyArIGNvcyAqICgtbHVtRykgKyBzaW4gKiAoLWx1bUcpLCBsdW1CICsgY29zICogKC1sdW1CKSArIHNpbiAqICgxIC0gbHVtQiksIDAsIDAsXG4gICAgICAgIGx1bVIgKyBjb3MgKiAoLWx1bVIpICsgc2luICogKDAuMTQzKSwgbHVtRyArIGNvcyAqICgxIC0gbHVtRykgKyBzaW4gKiAoMC4xNDApLCBsdW1CICsgY29zICogKC1sdW1CKSArIHNpbiAqICgtMC4yODMpLCAwLCAwLFxuICAgICAgICBsdW1SICsgY29zICogKC1sdW1SKSArIHNpbiAqICgtKDEgLSBsdW1SKSksIGx1bUcgKyBjb3MgKiAoLWx1bUcpICsgc2luICogKGx1bUcpLCBsdW1CICsgY29zICogKDEgLSBsdW1CKSArIHNpbiAqIChsdW1CKSwgMCwgMCxcbiAgICAgICAgMCwgMCwgMCwgMSwgMFxuICAgIF07XG5cbiAgICB0aGlzLl9sb2FkTWF0cml4KG1hdHJpeCwgbXVsdGlwbHkpO1xufTtcblxuXG4vKipcbiAqIFNldCB0aGUgY29udHJhc3QgbWF0cml4LCBpbmNyZWFzZSB0aGUgc2VwYXJhdGlvbiBiZXR3ZWVuIGRhcmsgYW5kIGJyaWdodFxuICogSW5jcmVhc2UgY29udHJhc3QgOiBzaGFkb3dzIGRhcmtlciBhbmQgaGlnaGxpZ2h0cyBicmlnaHRlclxuICogRGVjcmVhc2UgY29udHJhc3QgOiBicmluZyB0aGUgc2hhZG93cyB1cCBhbmQgdGhlIGhpZ2hsaWdodHMgZG93blxuICpcbiAqIEBwYXJhbSBhbW91bnQge251bWJlcn0gdmFsdWUgb2YgdGhlIGNvbnRyYXN0XG4gKiBAcGFyYW0gbXVsdGlwbHkge2Jvb2xlYW59IHJlZmVyIHRvIC5fbG9hZE1hdHJpeCgpIG1ldGhvZFxuICovXG5Db2xvck1hdHJpeEZpbHRlci5wcm90b3R5cGUuY29udHJhc3QgPSBmdW5jdGlvbiAoYW1vdW50LCBtdWx0aXBseSlcbntcbiAgICB2YXIgdiA9IChhbW91bnQgfHwgMCkgKyAxO1xuICAgIHZhciBvID0gLTEyOCAqICh2IC0gMSk7XG5cbiAgICB2YXIgbWF0cml4ID0gW1xuICAgICAgICB2LCAwLCAwLCAwLCBvLFxuICAgICAgICAwLCB2LCAwLCAwLCBvLFxuICAgICAgICAwLCAwLCB2LCAwLCBvLFxuICAgICAgICAwLCAwLCAwLCAxLCAwXG4gICAgXTtcblxuICAgIHRoaXMuX2xvYWRNYXRyaXgobWF0cml4LCBtdWx0aXBseSk7XG59O1xuXG4vKipcbiAqIFNldCB0aGUgc2F0dXJhdGlvbiBtYXRyaXgsIGluY3JlYXNlIHRoZSBzZXBhcmF0aW9uIGJldHdlZW4gY29sb3JzXG4gKiBJbmNyZWFzZSBzYXR1cmF0aW9uIDogaW5jcmVhc2UgY29udHJhc3QsIGJyaWdodG5lc3MsIGFuZCBzaGFycG5lc3NcbiAqXG4gKiBAcGFyYW0gYW1vdW50IHtudW1iZXJ9XG4gKiBAcGFyYW0gbXVsdGlwbHkge2Jvb2xlYW59IHJlZmVyIHRvIC5fbG9hZE1hdHJpeCgpIG1ldGhvZFxuICovXG5Db2xvck1hdHJpeEZpbHRlci5wcm90b3R5cGUuc2F0dXJhdGUgPSBmdW5jdGlvbiAoYW1vdW50LCBtdWx0aXBseSlcbntcbiAgICB2YXIgeCA9IChhbW91bnQgfHwgMCkgKiAyIC8gMyArIDE7XG4gICAgdmFyIHkgPSAoKHggLSAxKSAqIC0wLjUpO1xuXG4gICAgdmFyIG1hdHJpeCA9IFtcbiAgICAgICAgeCwgeSwgeSwgMCwgMCxcbiAgICAgICAgeSwgeCwgeSwgMCwgMCxcbiAgICAgICAgeSwgeSwgeCwgMCwgMCxcbiAgICAgICAgMCwgMCwgMCwgMSwgMFxuICAgIF07XG5cbiAgICB0aGlzLl9sb2FkTWF0cml4KG1hdHJpeCwgbXVsdGlwbHkpO1xufTtcblxuLyoqXG4gKiBEZXNhdHVyYXRlIGltYWdlIChyZW1vdmUgY29sb3IpXG4gKlxuICogQ2FsbCB0aGUgc2F0dXJhdGUgZnVuY3Rpb25cbiAqXG4gKiBAcGFyYW0gbXVsdGlwbHkge2Jvb2xlYW59IHJlZmVyIHRvIC5fbG9hZE1hdHJpeCgpIG1ldGhvZFxuICovXG5Db2xvck1hdHJpeEZpbHRlci5wcm90b3R5cGUuZGVzYXR1cmF0ZSA9IGZ1bmN0aW9uIChtdWx0aXBseSkgLy8ganNoaW50IHVudXNlZDpmYWxzZVxue1xuICAgIHRoaXMuc2F0dXJhdGUoLTEpO1xufTtcblxuLyoqXG4gKiBOZWdhdGl2ZSBpbWFnZSAoaW52ZXJzZSBvZiBjbGFzc2ljIHJnYiBtYXRyaXgpXG4gKlxuICogQHBhcmFtIG11bHRpcGx5IHtib29sZWFufSByZWZlciB0byAuX2xvYWRNYXRyaXgoKSBtZXRob2RcbiAqL1xuQ29sb3JNYXRyaXhGaWx0ZXIucHJvdG90eXBlLm5lZ2F0aXZlID0gZnVuY3Rpb24gKG11bHRpcGx5KVxue1xuICAgIHZhciBtYXRyaXggPSBbXG4gICAgICAgIDAsIDEsIDEsIDAsIDAsXG4gICAgICAgIDEsIDAsIDEsIDAsIDAsXG4gICAgICAgIDEsIDEsIDAsIDAsIDAsXG4gICAgICAgIDAsIDAsIDAsIDEsIDBcbiAgICBdO1xuXG4gICAgdGhpcy5fbG9hZE1hdHJpeChtYXRyaXgsIG11bHRpcGx5KTtcbn07XG5cbi8qKlxuICogU2VwaWEgaW1hZ2VcbiAqXG4gKiBAcGFyYW0gbXVsdGlwbHkge2Jvb2xlYW59IHJlZmVyIHRvIC5fbG9hZE1hdHJpeCgpIG1ldGhvZFxuICovXG5Db2xvck1hdHJpeEZpbHRlci5wcm90b3R5cGUuc2VwaWEgPSBmdW5jdGlvbiAobXVsdGlwbHkpXG57XG4gICAgdmFyIG1hdHJpeCA9IFtcbiAgICAgICAgMC4zOTMsIDAuNzY4OTk5OSwgMC4xODg5OTk5OSwgMCwgMCxcbiAgICAgICAgMC4zNDksIDAuNjg1OTk5OSwgMC4xNjc5OTk5OSwgMCwgMCxcbiAgICAgICAgMC4yNzIsIDAuNTMzOTk5OSwgMC4xMzA5OTk5OSwgMCwgMCxcbiAgICAgICAgMCwgMCwgMCwgMSwgMFxuICAgIF07XG5cbiAgICB0aGlzLl9sb2FkTWF0cml4KG1hdHJpeCwgbXVsdGlwbHkpO1xufTtcblxuLyoqXG4gKiBDb2xvciBtb3Rpb24gcGljdHVyZSBwcm9jZXNzIGludmVudGVkIGluIDE5MTYgKHRoYW5rcyBEb21pbmljIFN6YWJsZXdza2kpXG4gKlxuICogQHBhcmFtIG11bHRpcGx5IHtib29sZWFufSByZWZlciB0byAuX2xvYWRNYXRyaXgoKSBtZXRob2RcbiAqL1xuQ29sb3JNYXRyaXhGaWx0ZXIucHJvdG90eXBlLnRlY2huaWNvbG9yID0gZnVuY3Rpb24gKG11bHRpcGx5KVxue1xuICAgIHZhciBtYXRyaXggPSBbXG4gICAgICAgIDEuOTEyNTI3Nzg5MTQ1NjA4MywgLTAuODU0NTM0NDk3Njk1MTY0NSwgLTAuMDkxNTU1MDg0ODI3NTU1ODUsIDAsIDExLjc5MzYwMzQzNDM3NzMzNyxcbiAgICAgICAgLTAuMzA4NzgzMzM4NTkyODA5NywgMS43NjU4OTA4NTU1NDU4NDI4LCAtMC4xMDYwMTc0MzA3NDcyMjI0NSwgMCwgLTcwLjM1MjA1MTYxNDYxMzk4LFxuICAgICAgICAtMC4yMzExMDMzNzc1NDg2MTYsIC0wLjc1MDE4OTkxOTc0NDAyMTIsIDEuODQ3NTk3ODE2MTA4MTg5LCAwLCAzMC45NTA5NDA4Njk0OTExMzgsXG4gICAgICAgIDAsIDAsIDAsIDEsIDBcbiAgICBdO1xuXG4gICAgdGhpcy5fbG9hZE1hdHJpeChtYXRyaXgsIG11bHRpcGx5KTtcbn07XG5cbi8qKlxuICogUG9sYXJvaWQgZmlsdGVyXG4gKlxuICogQHBhcmFtIG11bHRpcGx5IHtib29sZWFufSByZWZlciB0byAuX2xvYWRNYXRyaXgoKSBtZXRob2RcbiAqL1xuQ29sb3JNYXRyaXhGaWx0ZXIucHJvdG90eXBlLnBvbGFyb2lkID0gZnVuY3Rpb24gKG11bHRpcGx5KVxue1xuICAgIHZhciBtYXRyaXggPSBbXG4gICAgICAgIDEuNDM4LCAtMC4wNjIsIC0wLjA2MiwgMCwgMCxcbiAgICAgICAgLTAuMTIyLCAxLjM3OCwgLTAuMTIyLCAwLCAwLFxuICAgICAgICAtMC4wMTYsIC0wLjAxNiwgMS40ODMsIDAsIDAsXG4gICAgICAgIDAsIDAsIDAsIDEsIDBcbiAgICBdO1xuXG4gICAgdGhpcy5fbG9hZE1hdHJpeChtYXRyaXgsIG11bHRpcGx5KTtcbn07XG5cbi8qKlxuICogRmlsdGVyIHdobyB0cmFuc2Zvcm1zIDogUmVkIC0+IEJsdWUgYW5kIEJsdWUgLT4gUmVkXG4gKlxuICogQHBhcmFtIG11bHRpcGx5IHtib29sZWFufSByZWZlciB0byAuX2xvYWRNYXRyaXgoKSBtZXRob2RcbiAqL1xuQ29sb3JNYXRyaXhGaWx0ZXIucHJvdG90eXBlLnRvQkdSID0gZnVuY3Rpb24gKG11bHRpcGx5KVxue1xuICAgIHZhciBtYXRyaXggPSBbXG4gICAgICAgIDAsIDAsIDEsIDAsIDAsXG4gICAgICAgIDAsIDEsIDAsIDAsIDAsXG4gICAgICAgIDEsIDAsIDAsIDAsIDAsXG4gICAgICAgIDAsIDAsIDAsIDEsIDBcbiAgICBdO1xuXG4gICAgdGhpcy5fbG9hZE1hdHJpeChtYXRyaXgsIG11bHRpcGx5KTtcbn07XG5cbi8qKlxuICogQ29sb3IgcmV2ZXJzYWwgZmlsbSBpbnRyb2R1Y2VkIGJ5IEVhc3RtYW4gS29kYWsgaW4gMTkzNS4gKHRoYW5rcyBEb21pbmljIFN6YWJsZXdza2kpXG4gKlxuICogQHBhcmFtIG11bHRpcGx5IHtib29sZWFufSByZWZlciB0byAuX2xvYWRNYXRyaXgoKSBtZXRob2RcbiAqL1xuQ29sb3JNYXRyaXhGaWx0ZXIucHJvdG90eXBlLmtvZGFjaHJvbWUgPSBmdW5jdGlvbiAobXVsdGlwbHkpXG57XG4gICAgdmFyIG1hdHJpeCA9IFtcbiAgICAgICAgMS4xMjg1NTgyMzk2NTkzNTI1LCAtMC4zOTY3MzgyMjgzNjAxMzQ4LCAtMC4wMzk5MjU1OTE3MjkyMTc5MywgMCwgNjMuNzI5NTg3NjIxOTY1MDIsXG4gICAgICAgIC0wLjE2NDA0MzM5OTYyMjQ0NjE2LCAxLjA4MzUyNTE1NjYyOTEzMDQsIC0wLjA1NDk4ODA1MTE1NjMzMTMyLCAwLCAyNC43MzI0MDc4OTY3MDYyMDMsXG4gICAgICAgIC0wLjE2Nzg2MDEwNzA2MTU1NzYzLCAtMC41NjAzNDE2Mjc3Njk1MjQ4LCAxLjYwMTQ4NTA3NjE5NjQ5NDMsIDAsIDM1LjYyOTgyODA3NDYwOTQ2LFxuICAgICAgICAwLCAwLCAwLCAxLCAwXG4gICAgXTtcblxuICAgIHRoaXMuX2xvYWRNYXRyaXgobWF0cml4LCBtdWx0aXBseSk7XG59O1xuXG4vKipcbiAqIEJyb3duIGRlbGljaW91cyBicm93bmkgZmlsdGVyICh0aGFua3MgRG9taW5pYyBTemFibGV3c2tpKVxuICpcbiAqIEBwYXJhbSBtdWx0aXBseSB7Ym9vbGVhbn0gcmVmZXIgdG8gLl9sb2FkTWF0cml4KCkgbWV0aG9kXG4gKi9cbkNvbG9yTWF0cml4RmlsdGVyLnByb3RvdHlwZS5icm93bmkgPSBmdW5jdGlvbiAobXVsdGlwbHkpXG57XG4gICAgdmFyIG1hdHJpeCA9IFtcbiAgICAgICAgMC41OTk3MDIzNDk4MTU5NzE1LCAwLjM0NTUzMjQzMDQ4MzkxMjYzLCAtMC4yNzA4Mjk4Njc0NTM4MDQyLCAwLCA0Ny40MzE5Mjg1NTYwMDg3MyxcbiAgICAgICAgLTAuMDM3NzAzMjQ5ODM3NzgzMTU3LCAwLjg2MDk1Nzc1ODc5OTI2NDEsIDAuMTUwNTk1NTIzODg0NTk5MTMsIDAsIC0zNi45Njg0MTQ5ODMxOTEyNyxcbiAgICAgICAgMC4yNDExMzYzNTEyODE1MzMzNSwgLTAuMDc0NDEwMzc5MDg0MjI0OTIsIDAuNDQ5NzIxODIwNjQ4NzcxNTMsIDAsIC03LjU2MjA3NTI3NzU5MTI4MyxcbiAgICAgICAgMCwgMCwgMCwgMSwgMFxuICAgIF07XG5cbiAgICB0aGlzLl9sb2FkTWF0cml4KG1hdHJpeCwgbXVsdGlwbHkpO1xufTtcblxuLypcbiAqIFZpbnRhZ2UgZmlsdGVyICh0aGFua3MgRG9taW5pYyBTemFibGV3c2tpKVxuICpcbiAqIEBwYXJhbSBtdWx0aXBseSB7Ym9vbGVhbn0gcmVmZXIgdG8gLl9sb2FkTWF0cml4KCkgbWV0aG9kXG4gKi9cbkNvbG9yTWF0cml4RmlsdGVyLnByb3RvdHlwZS52aW50YWdlID0gZnVuY3Rpb24gKG11bHRpcGx5KVxue1xuICAgIHZhciBtYXRyaXggPSBbXG4gICAgICAgIDAuNjI3OTM0NTYzNTYwNTk5NCwgMC4zMjAyMTgzNDIwODE5MzY3LCAtMC4wMzk2NTQwODIxMTMxMjQ1MywgMCwgOS42NTEyODU4MzUyOTQxMjMsXG4gICAgICAgIDAuMDI1NzgzOTc3MDQ4MDg4NjgsIDAuNjQ0MTE4ODY0NDM3NDc3MSwgMC4wMzI1OTEyNzYxNjE0OTI5NCwgMCwgNy40NjI4MjkxNzY0NzA1OTEsXG4gICAgICAgIDAuMDQ2NjA1NTU1Njc4MjcxOSwgLTAuMDg1MTIzMjk4NzI0Nzg5MSwgMC41MjQxNjQ4MDE4NzAwNDY1LCAwLCA1LjE1OTE5MDU4ODIzNTI5NixcbiAgICAgICAgMCwgMCwgMCwgMSwgMFxuICAgIF07XG5cbiAgICB0aGlzLl9sb2FkTWF0cml4KG1hdHJpeCwgbXVsdGlwbHkpO1xufTtcblxuLypcbiAqIFdlIGRvbid0IGtub3cgZXhhY3RseSB3aGF0IGl0IGRvZXMsIGtpbmQgb2YgZ3JhZGllbnQgbWFwLCBidXQgZnVubnkgdG8gcGxheSB3aXRoIVxuICpcbiAqIEBwYXJhbSBkZXNhdHVyYXRpb24ge251bWJlcn1cbiAqIEBwYXJhbSB0b25lZCB7bnVtYmVyfVxuICogQHBhcmFtIGxpZ2h0Q29sb3Ige3N0cmluZ30gKGV4YW1wbGUgOiBcIjB4RkZFNTgwXCIpXG4gKiBAcGFyYW0gZGFya0NvbG9yIHtzdHJpbmd9ICAoZXhhbXBsZSA6IFwiMHhGRkU1ODBcIilcbiAqXG4gKiBAcGFyYW0gbXVsdGlwbHkge2Jvb2xlYW59IHJlZmVyIHRvIC5fbG9hZE1hdHJpeCgpIG1ldGhvZFxuICovXG5Db2xvck1hdHJpeEZpbHRlci5wcm90b3R5cGUuY29sb3JUb25lID0gZnVuY3Rpb24gKGRlc2F0dXJhdGlvbiwgdG9uZWQsIGxpZ2h0Q29sb3IsIGRhcmtDb2xvciwgbXVsdGlwbHkpXG57XG4gICAgZGVzYXR1cmF0aW9uID0gZGVzYXR1cmF0aW9uIHx8IDAuMjtcbiAgICB0b25lZCA9IHRvbmVkIHx8IDAuMTU7XG4gICAgbGlnaHRDb2xvciA9IGxpZ2h0Q29sb3IgfHwgMHhGRkU1ODA7XG4gICAgZGFya0NvbG9yID0gZGFya0NvbG9yIHx8IDB4MzM4MDAwO1xuXG4gICAgdmFyIGxSID0gKChsaWdodENvbG9yID4+IDE2KSAmIDB4RkYpIC8gMjU1O1xuICAgIHZhciBsRyA9ICgobGlnaHRDb2xvciA+PiA4KSAmIDB4RkYpIC8gMjU1O1xuICAgIHZhciBsQiA9IChsaWdodENvbG9yICYgMHhGRikgLyAyNTU7XG5cbiAgICB2YXIgZFIgPSAoKGRhcmtDb2xvciA+PiAxNikgJiAweEZGKSAvIDI1NTtcbiAgICB2YXIgZEcgPSAoKGRhcmtDb2xvciA+PiA4KSAmIDB4RkYpIC8gMjU1O1xuICAgIHZhciBkQiA9IChkYXJrQ29sb3IgJiAweEZGKSAvIDI1NTtcblxuICAgIHZhciBtYXRyaXggPSBbXG4gICAgICAgIDAuMywgMC41OSwgMC4xMSwgMCwgMCxcbiAgICAgICAgbFIsIGxHLCBsQiwgZGVzYXR1cmF0aW9uLCAwLFxuICAgICAgICBkUiwgZEcsIGRCLCB0b25lZCwgMCxcbiAgICAgICAgbFIgLSBkUiwgbEcgLSBkRywgbEIgLSBkQiwgMCwgMFxuICAgIF07XG5cbiAgICB0aGlzLl9sb2FkTWF0cml4KG1hdHJpeCwgbXVsdGlwbHkpO1xufTtcblxuLypcbiAqIE5pZ2h0IGVmZmVjdFxuICpcbiAqIEBwYXJhbSBpbnRlbnNpdHkge251bWJlcn1cbiAqIEBwYXJhbSBtdWx0aXBseSB7Ym9vbGVhbn0gcmVmZXIgdG8gLl9sb2FkTWF0cml4KCkgbWV0aG9kXG4gKi9cbkNvbG9yTWF0cml4RmlsdGVyLnByb3RvdHlwZS5uaWdodCA9IGZ1bmN0aW9uIChpbnRlbnNpdHksIG11bHRpcGx5KVxue1xuICAgIGludGVuc2l0eSA9IGludGVuc2l0eSB8fCAwLjE7XG4gICAgdmFyIG1hdHJpeCA9IFtcbiAgICAgICAgaW50ZW5zaXR5ICogKCAtMi4wKSwgLWludGVuc2l0eSwgMCwgMCwgMCxcbiAgICAgICAgLWludGVuc2l0eSwgMCwgaW50ZW5zaXR5LCAwLCAwLFxuICAgICAgICAwLCBpbnRlbnNpdHksIGludGVuc2l0eSAqIDIuMCwgMCwgMCxcbiAgICAgICAgMCwgMCwgMCwgMSwgMFxuICAgIF07XG5cbiAgICB0aGlzLl9sb2FkTWF0cml4KG1hdHJpeCwgbXVsdGlwbHkpO1xufTtcblxuXG4vKlxuICogUHJlZGF0b3IgZWZmZWN0XG4gKlxuICogRXJhc2UgdGhlIGN1cnJlbnQgbWF0cml4IGJ5IHNldHRpbmcgYSBuZXcgaW5kZXBlbnQgb25lXG4gKlxuICogQHBhcmFtIGFtb3VudCB7bnVtYmVyfSBob3cgbXVjaCB0aGUgcHJlZGF0b3IgZmVlbHMgaGlzIGZ1dHVyZSB2aWN0aW1cbiAqIEBwYXJhbSBtdWx0aXBseSB7Ym9vbGVhbn0gcmVmZXIgdG8gLl9sb2FkTWF0cml4KCkgbWV0aG9kXG4gKi9cbkNvbG9yTWF0cml4RmlsdGVyLnByb3RvdHlwZS5wcmVkYXRvciA9IGZ1bmN0aW9uIChhbW91bnQsIG11bHRpcGx5KVxue1xuICAgIHZhciBtYXRyaXggPSBbXG4gICAgICAgIDExLjIyNDEzMDYzMDQ5MzE2NCAqIGFtb3VudCwgLTQuNzk0NDg2OTk5NTExNzE5ICogYW1vdW50LCAtMi44NzQ2MTE4NTQ1NTMyMjI3ICogYW1vdW50LCAwICogYW1vdW50LCAwLjQwMzQyNDM4MjIwOTc3NzgzICogYW1vdW50LFxuICAgICAgICAtMy42MzMwNjk3NTM2NDY4NTA2ICogYW1vdW50LCA5LjE5MzE1NzE5NjA0NDkyMiAqIGFtb3VudCwgLTIuOTUxODEwODM2NzkxOTkyICogYW1vdW50LCAwICogYW1vdW50LCAtMS4zMTYxMzUwNDg4NjYyNzIgKiBhbW91bnQsXG4gICAgICAgIC0zLjIxODQxOTc5MDI2Nzk0NDMgKiBhbW91bnQsIC00LjIzNzUwMzA1MTc1NzgxMjUgKiBhbW91bnQsIDcuNDc2NDQ4MDU5MDgyMDMxICogYW1vdW50LCAwICogYW1vdW50LCAwLjgwNDQ0NTkyMjM3NDcyNTMgKiBhbW91bnQsXG4gICAgICAgIDAsIDAsIDAsIDEsIDBcbiAgICBdO1xuXG4gICAgdGhpcy5fbG9hZE1hdHJpeChtYXRyaXgsIG11bHRpcGx5KTtcbn07XG5cbi8qXG4gKiBMU0QgZWZmZWN0XG4gKlxuICogTXVsdGlwbHkgdGhlIGN1cnJlbnQgbWF0cml4XG4gKlxuICogQHBhcmFtIGFtb3VudCB7bnVtYmVyfSBIb3cgY3JhenkgaXMgeW91ciBlZmZlY3RcbiAqIEBwYXJhbSBtdWx0aXBseSB7Ym9vbGVhbn0gcmVmZXIgdG8gLl9sb2FkTWF0cml4KCkgbWV0aG9kXG4gKi9cbkNvbG9yTWF0cml4RmlsdGVyLnByb3RvdHlwZS5sc2QgPSBmdW5jdGlvbiAobXVsdGlwbHkpXG57XG4gICAgdmFyIG1hdHJpeCA9IFtcbiAgICAgICAgMiwgLTAuNCwgMC41LCAwLCAwLFxuICAgICAgICAtMC41LCAyLCAtMC40LCAwLCAwLFxuICAgICAgICAtMC40LCAtMC41LCAzLCAwLCAwLFxuICAgICAgICAwLCAwLCAwLCAxLCAwXG4gICAgXTtcblxuICAgIHRoaXMuX2xvYWRNYXRyaXgobWF0cml4LCBtdWx0aXBseSk7XG59O1xuXG4vKlxuICogRXJhc2UgdGhlIGN1cnJlbnQgbWF0cml4IGJ5IHNldHRpbmcgdGhlIGRlZmF1bHQgb25lXG4gKlxuICovXG5Db2xvck1hdHJpeEZpbHRlci5wcm90b3R5cGUucmVzZXQgPSBmdW5jdGlvbiAoKVxue1xuICAgIHZhciBtYXRyaXggPSBbXG4gICAgICAgIDEsIDAsIDAsIDAsIDAsXG4gICAgICAgIDAsIDEsIDAsIDAsIDAsXG4gICAgICAgIDAsIDAsIDEsIDAsIDAsXG4gICAgICAgIDAsIDAsIDAsIDEsIDBcbiAgICBdO1xuXG4gICAgdGhpcy5fbG9hZE1hdHJpeChtYXRyaXgsIGZhbHNlKTtcbn07XG5cblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoQ29sb3JNYXRyaXhGaWx0ZXIucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgbWF0cml4IG9mIHRoZSBjb2xvciBtYXRyaXggZmlsdGVyXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJbXX1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLkNvbG9yTWF0cml4RmlsdGVyI1xuICAgICAqIEBkZWZhdWx0IFsxLCAwLCAwLCAwLCAwLCAwLCAxLCAwLCAwLCAwLCAwLCAwLCAxLCAwLCAwLCAwLCAwLCAwLCAxLCAwXVxuICAgICAqL1xuICAgIG1hdHJpeDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVuaWZvcm1zLm0udmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLm0udmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi8uLi9jb3JlJyk7XG4vLyBAc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9zdWJzdGFjay9icmZzL2lzc3Vlcy8yNVxuXG5cbi8qKlxuICogVGhpcyBsb3dlcnMgdGhlIGNvbG9yIGRlcHRoIG9mIHlvdXIgaW1hZ2UgYnkgdGhlIGdpdmVuIGFtb3VudCwgcHJvZHVjaW5nIGFuIGltYWdlIHdpdGggYSBzbWFsbGVyIHBhbGV0dGUuXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLkFic3RyYWN0RmlsdGVyXG4gKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzXG4gKi9cbmZ1bmN0aW9uIENvbG9yU3RlcEZpbHRlcigpXG57XG4gICAgY29yZS5BYnN0cmFjdEZpbHRlci5jYWxsKHRoaXMsXG4gICAgICAgIC8vIHZlcnRleCBzaGFkZXJcbiAgICAgICAgbnVsbCxcbiAgICAgICAgLy8gZnJhZ21lbnQgc2hhZGVyXG4gICAgICAgIFwicHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XFxuXFxudmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7XFxuXFxudW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXI7XFxudW5pZm9ybSBmbG9hdCBzdGVwO1xcblxcbnZvaWQgbWFpbih2b2lkKVxcbntcXG4gICAgdmVjNCBjb2xvciA9IHRleHR1cmUyRCh1U2FtcGxlciwgdlRleHR1cmVDb29yZCk7XFxuXFxuICAgIGNvbG9yID0gZmxvb3IoY29sb3IgKiBzdGVwKSAvIHN0ZXA7XFxuXFxuICAgIGdsX0ZyYWdDb2xvciA9IGNvbG9yO1xcbn1cXG5cIixcbiAgICAgICAgLy8gY3VzdG9tIHVuaWZvcm1zXG4gICAgICAgIHtcbiAgICAgICAgICAgIHN0ZXA6IHsgdHlwZTogJzFmJywgdmFsdWU6IDUgfVxuICAgICAgICB9XG4gICAgKTtcbn1cblxuQ29sb3JTdGVwRmlsdGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoY29yZS5BYnN0cmFjdEZpbHRlci5wcm90b3R5cGUpO1xuQ29sb3JTdGVwRmlsdGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IENvbG9yU3RlcEZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gQ29sb3JTdGVwRmlsdGVyO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhDb2xvclN0ZXBGaWx0ZXIucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogVGhlIG51bWJlciBvZiBzdGVwcyB0byByZWR1Y2UgdGhlIHBhbGV0dGUgYnkuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5Db2xvclN0ZXBGaWx0ZXIjXG4gICAgICovXG4gICAgc3RlcDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVuaWZvcm1zLnN0ZXAudmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLnN0ZXAudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi8uLi9jb3JlJyk7XG4vLyBAc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9zdWJzdGFjay9icmZzL2lzc3Vlcy8yNVxuXG5cbi8qKlxuICogVGhlIENvbnZvbHV0aW9uRmlsdGVyIGNsYXNzIGFwcGxpZXMgYSBtYXRyaXggY29udm9sdXRpb24gZmlsdGVyIGVmZmVjdC5cbiAqIEEgY29udm9sdXRpb24gY29tYmluZXMgcGl4ZWxzIGluIHRoZSBpbnB1dCBpbWFnZSB3aXRoIG5laWdoYm9yaW5nIHBpeGVscyB0byBwcm9kdWNlIGEgbmV3IGltYWdlLlxuICogQSB3aWRlIHZhcmlldHkgb2YgaW1hZ2UgZWZmZWN0cyBjYW4gYmUgYWNoaWV2ZWQgdGhyb3VnaCBjb252b2x1dGlvbnMsIGluY2x1ZGluZyBibHVycmluZywgZWRnZVxuICogZGV0ZWN0aW9uLCBzaGFycGVuaW5nLCBlbWJvc3NpbmcsIGFuZCBiZXZlbGluZy4gVGhlIG1hdHJpeCBzaG91bGQgYmUgc3BlY2lmaWVkIGFzIGEgOSBwb2ludCBBcnJheS5cbiAqIFNlZSBodHRwOi8vZG9jcy5naW1wLm9yZy9lbi9wbHVnLWluLWNvbnZtYXRyaXguaHRtbCBmb3IgbW9yZSBpbmZvLlxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5BYnN0cmFjdEZpbHRlclxuICogQG1lbWJlcm9mIFBJWEkuZmlsdGVyc1xuICogQHBhcmFtIG1hdHJpeCB7bnVtYmVyW119IEFuIGFycmF5IG9mIHZhbHVlcyB1c2VkIGZvciBtYXRyaXggdHJhbnNmb3JtYXRpb24uIFNwZWNpZmllZCBhcyBhIDkgcG9pbnQgQXJyYXkuXG4gKiBAcGFyYW0gd2lkdGgge251bWJlcn0gV2lkdGggb2YgdGhlIG9iamVjdCB5b3UgYXJlIHRyYW5zZm9ybWluZ1xuICogQHBhcmFtIGhlaWdodCB7bnVtYmVyfSBIZWlnaHQgb2YgdGhlIG9iamVjdCB5b3UgYXJlIHRyYW5zZm9ybWluZ1xuICovXG5mdW5jdGlvbiBDb252b2x1dGlvbkZpbHRlcihtYXRyaXgsIHdpZHRoLCBoZWlnaHQpXG57XG4gICAgY29yZS5BYnN0cmFjdEZpbHRlci5jYWxsKHRoaXMsXG4gICAgICAgIC8vIHZlcnRleCBzaGFkZXJcbiAgICAgICAgbnVsbCxcbiAgICAgICAgLy8gZnJhZ21lbnQgc2hhZGVyXG4gICAgICAgIFwicHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XFxuXFxudmFyeWluZyBtZWRpdW1wIHZlYzIgdlRleHR1cmVDb29yZDtcXG5cXG51bmlmb3JtIHNhbXBsZXIyRCB1U2FtcGxlcjtcXG51bmlmb3JtIHZlYzIgdGV4ZWxTaXplO1xcbnVuaWZvcm0gZmxvYXQgbWF0cml4WzldO1xcblxcbnZvaWQgbWFpbih2b2lkKVxcbntcXG4gICB2ZWM0IGMxMSA9IHRleHR1cmUyRCh1U2FtcGxlciwgdlRleHR1cmVDb29yZCAtIHRleGVsU2l6ZSk7IC8vIHRvcCBsZWZ0XFxuICAgdmVjNCBjMTIgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZlYzIodlRleHR1cmVDb29yZC54LCB2VGV4dHVyZUNvb3JkLnkgLSB0ZXhlbFNpemUueSkpOyAvLyB0b3AgY2VudGVyXFxuICAgdmVjNCBjMTMgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZlYzIodlRleHR1cmVDb29yZC54ICsgdGV4ZWxTaXplLngsIHZUZXh0dXJlQ29vcmQueSAtIHRleGVsU2l6ZS55KSk7IC8vIHRvcCByaWdodFxcblxcbiAgIHZlYzQgYzIxID0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2ZWMyKHZUZXh0dXJlQ29vcmQueCAtIHRleGVsU2l6ZS54LCB2VGV4dHVyZUNvb3JkLnkpKTsgLy8gbWlkIGxlZnRcXG4gICB2ZWM0IGMyMiA9IHRleHR1cmUyRCh1U2FtcGxlciwgdlRleHR1cmVDb29yZCk7IC8vIG1pZCBjZW50ZXJcXG4gICB2ZWM0IGMyMyA9IHRleHR1cmUyRCh1U2FtcGxlciwgdmVjMih2VGV4dHVyZUNvb3JkLnggKyB0ZXhlbFNpemUueCwgdlRleHR1cmVDb29yZC55KSk7IC8vIG1pZCByaWdodFxcblxcbiAgIHZlYzQgYzMxID0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2ZWMyKHZUZXh0dXJlQ29vcmQueCAtIHRleGVsU2l6ZS54LCB2VGV4dHVyZUNvb3JkLnkgKyB0ZXhlbFNpemUueSkpOyAvLyBib3R0b20gbGVmdFxcbiAgIHZlYzQgYzMyID0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2ZWMyKHZUZXh0dXJlQ29vcmQueCwgdlRleHR1cmVDb29yZC55ICsgdGV4ZWxTaXplLnkpKTsgLy8gYm90dG9tIGNlbnRlclxcbiAgIHZlYzQgYzMzID0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2VGV4dHVyZUNvb3JkICsgdGV4ZWxTaXplKTsgLy8gYm90dG9tIHJpZ2h0XFxuXFxuICAgZ2xfRnJhZ0NvbG9yID1cXG4gICAgICAgYzExICogbWF0cml4WzBdICsgYzEyICogbWF0cml4WzFdICsgYzEzICogbWF0cml4WzJdICtcXG4gICAgICAgYzIxICogbWF0cml4WzNdICsgYzIyICogbWF0cml4WzRdICsgYzIzICogbWF0cml4WzVdICtcXG4gICAgICAgYzMxICogbWF0cml4WzZdICsgYzMyICogbWF0cml4WzddICsgYzMzICogbWF0cml4WzhdO1xcblxcbiAgIGdsX0ZyYWdDb2xvci5hID0gYzIyLmE7XFxufVxcblwiLFxuICAgICAgICAvLyBjdXN0b20gdW5pZm9ybXNcbiAgICAgICAge1xuICAgICAgICAgICAgbWF0cml4OiAgICAgeyB0eXBlOiAnMWZ2JywgdmFsdWU6IG5ldyBGbG9hdDMyQXJyYXkobWF0cml4KSB9LFxuICAgICAgICAgICAgdGV4ZWxTaXplOiAgeyB0eXBlOiAndjInLCB2YWx1ZTogeyB4OiAxIC8gd2lkdGgsIHk6IDEgLyBoZWlnaHQgfSB9XG4gICAgICAgIH1cbiAgICApO1xufVxuXG5Db252b2x1dGlvbkZpbHRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuQWJzdHJhY3RGaWx0ZXIucHJvdG90eXBlKTtcbkNvbnZvbHV0aW9uRmlsdGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IENvbnZvbHV0aW9uRmlsdGVyO1xubW9kdWxlLmV4cG9ydHMgPSBDb252b2x1dGlvbkZpbHRlcjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoQ29udm9sdXRpb25GaWx0ZXIucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogQW4gYXJyYXkgb2YgdmFsdWVzIHVzZWQgZm9yIG1hdHJpeCB0cmFuc2Zvcm1hdGlvbi4gU3BlY2lmaWVkIGFzIGEgOSBwb2ludCBBcnJheS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcltdfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuQ29udm9sdXRpb25GaWx0ZXIjXG4gICAgICovXG4gICAgbWF0cml4OiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudW5pZm9ybXMubWF0cml4LnZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy5tYXRyaXgudmFsdWUgPSBuZXcgRmxvYXQzMkFycmF5KHZhbHVlKTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBXaWR0aCBvZiB0aGUgb2JqZWN0IHlvdSBhcmUgdHJhbnNmb3JtaW5nXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5Db252b2x1dGlvbkZpbHRlciNcbiAgICAgKi9cbiAgICB3aWR0aDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiAxL3RoaXMudW5pZm9ybXMudGV4ZWxTaXplLnZhbHVlLng7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLnRleGVsU2l6ZS52YWx1ZS54ID0gMS92YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBIZWlnaHQgb2YgdGhlIG9iamVjdCB5b3UgYXJlIHRyYW5zZm9ybWluZ1xuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuQ29udm9sdXRpb25GaWx0ZXIjXG4gICAgICovXG4gICAgaGVpZ2h0OiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIDEvdGhpcy51bmlmb3Jtcy50ZXhlbFNpemUudmFsdWUueTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudW5pZm9ybXMudGV4ZWxTaXplLnZhbHVlLnkgPSAxL3ZhbHVlO1xuICAgICAgICB9XG4gICAgfVxufSk7XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uLy4uL2NvcmUnKTtcbi8vIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL3N1YnN0YWNrL2JyZnMvaXNzdWVzLzI1XG5cblxuLyoqXG4gKiBBIENyb3NzIEhhdGNoIGVmZmVjdCBmaWx0ZXIuXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLkFic3RyYWN0RmlsdGVyXG4gKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzXG4gKi9cbmZ1bmN0aW9uIENyb3NzSGF0Y2hGaWx0ZXIoKVxue1xuICAgIGNvcmUuQWJzdHJhY3RGaWx0ZXIuY2FsbCh0aGlzLFxuICAgICAgICAvLyB2ZXJ0ZXggc2hhZGVyXG4gICAgICAgIG51bGwsXG4gICAgICAgIC8vIGZyYWdtZW50IHNoYWRlclxuICAgICAgICBcInByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xcblxcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xcblxcbnVuaWZvcm0gc2FtcGxlcjJEIHVTYW1wbGVyO1xcblxcbnZvaWQgbWFpbih2b2lkKVxcbntcXG4gICAgZmxvYXQgbHVtID0gbGVuZ3RoKHRleHR1cmUyRCh1U2FtcGxlciwgdlRleHR1cmVDb29yZC54eSkucmdiKTtcXG5cXG4gICAgZ2xfRnJhZ0NvbG9yID0gdmVjNCgxLjAsIDEuMCwgMS4wLCAxLjApO1xcblxcbiAgICBpZiAobHVtIDwgMS4wMClcXG4gICAge1xcbiAgICAgICAgaWYgKG1vZChnbF9GcmFnQ29vcmQueCArIGdsX0ZyYWdDb29yZC55LCAxMC4wKSA9PSAwLjApXFxuICAgICAgICB7XFxuICAgICAgICAgICAgZ2xfRnJhZ0NvbG9yID0gdmVjNCgwLjAsIDAuMCwgMC4wLCAxLjApO1xcbiAgICAgICAgfVxcbiAgICB9XFxuXFxuICAgIGlmIChsdW0gPCAwLjc1KVxcbiAgICB7XFxuICAgICAgICBpZiAobW9kKGdsX0ZyYWdDb29yZC54IC0gZ2xfRnJhZ0Nvb3JkLnksIDEwLjApID09IDAuMClcXG4gICAgICAgIHtcXG4gICAgICAgICAgICBnbF9GcmFnQ29sb3IgPSB2ZWM0KDAuMCwgMC4wLCAwLjAsIDEuMCk7XFxuICAgICAgICB9XFxuICAgIH1cXG5cXG4gICAgaWYgKGx1bSA8IDAuNTApXFxuICAgIHtcXG4gICAgICAgIGlmIChtb2QoZ2xfRnJhZ0Nvb3JkLnggKyBnbF9GcmFnQ29vcmQueSAtIDUuMCwgMTAuMCkgPT0gMC4wKVxcbiAgICAgICAge1xcbiAgICAgICAgICAgIGdsX0ZyYWdDb2xvciA9IHZlYzQoMC4wLCAwLjAsIDAuMCwgMS4wKTtcXG4gICAgICAgIH1cXG4gICAgfVxcblxcbiAgICBpZiAobHVtIDwgMC4zKVxcbiAgICB7XFxuICAgICAgICBpZiAobW9kKGdsX0ZyYWdDb29yZC54IC0gZ2xfRnJhZ0Nvb3JkLnkgLSA1LjAsIDEwLjApID09IDAuMClcXG4gICAgICAgIHtcXG4gICAgICAgICAgICBnbF9GcmFnQ29sb3IgPSB2ZWM0KDAuMCwgMC4wLCAwLjAsIDEuMCk7XFxuICAgICAgICB9XFxuICAgIH1cXG59XFxuXCJcbiAgICApO1xufVxuXG5Dcm9zc0hhdGNoRmlsdGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoY29yZS5BYnN0cmFjdEZpbHRlci5wcm90b3R5cGUpO1xuQ3Jvc3NIYXRjaEZpbHRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBDcm9zc0hhdGNoRmlsdGVyO1xubW9kdWxlLmV4cG9ydHMgPSBDcm9zc0hhdGNoRmlsdGVyO1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi8uLi9jb3JlJyk7XG4vLyBAc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9zdWJzdGFjay9icmZzL2lzc3Vlcy8yNVxuXG5cbi8qKlxuICogVGhlIERpc3BsYWNlbWVudEZpbHRlciBjbGFzcyB1c2VzIHRoZSBwaXhlbCB2YWx1ZXMgZnJvbSB0aGUgc3BlY2lmaWVkIHRleHR1cmUgKGNhbGxlZCB0aGUgZGlzcGxhY2VtZW50IG1hcCkgdG8gcGVyZm9ybSBhIGRpc3BsYWNlbWVudCBvZiBhbiBvYmplY3QuXG4gKiBZb3UgY2FuIHVzZSB0aGlzIGZpbHRlciB0byBhcHBseSBhbGwgbWFub3Igb2YgY3Jhenkgd2FycGluZyBlZmZlY3RzXG4gKiBDdXJyZW50bHkgdGhlIHIgcHJvcGVydHkgb2YgdGhlIHRleHR1cmUgaXMgdXNlZCB0byBvZmZzZXQgdGhlIHggYW5kIHRoZSBnIHByb3BlcnR5IG9mIHRoZSB0ZXh0dXJlIGlzIHVzZWQgdG8gb2Zmc2V0IHRoZSB5LlxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5BYnN0cmFjdEZpbHRlclxuICogQG1lbWJlcm9mIFBJWEkuZmlsdGVyc1xuICogQHBhcmFtIHNwcml0ZSB7UElYSS5TcHJpdGV9IHRoZSBzcHJpdGUgdXNlZCBmb3IgdGhlIGRpc3BsYWNlbWVudCBtYXAuIChtYWtlIHN1cmUgaXRzIGFkZGVkIHRvIHRoZSBzY2VuZSEpXG4gKi9cbmZ1bmN0aW9uIERpc3BsYWNlbWVudEZpbHRlcihzcHJpdGUsIHNjYWxlKVxue1xuICAgIHZhciBtYXNrTWF0cml4ID0gbmV3IGNvcmUuTWF0cml4KCk7XG4gICAgc3ByaXRlLnJlbmRlcmFibGUgPSBmYWxzZTtcblxuICAgIGNvcmUuQWJzdHJhY3RGaWx0ZXIuY2FsbCh0aGlzLFxuICAgICAgICAvLyB2ZXJ0ZXggc2hhZGVyXG4gICAgICAgIFwiYXR0cmlidXRlIHZlYzIgYVZlcnRleFBvc2l0aW9uO1xcbmF0dHJpYnV0ZSB2ZWMyIGFUZXh0dXJlQ29vcmQ7XFxuYXR0cmlidXRlIHZlYzQgYUNvbG9yO1xcblxcbnVuaWZvcm0gbWF0MyBwcm9qZWN0aW9uTWF0cml4O1xcbnVuaWZvcm0gbWF0MyBvdGhlck1hdHJpeDtcXG5cXG52YXJ5aW5nIHZlYzIgdk1hcENvb3JkO1xcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xcbnZhcnlpbmcgdmVjNCB2Q29sb3I7XFxuXFxudm9pZCBtYWluKHZvaWQpXFxue1xcbiAgIGdsX1Bvc2l0aW9uID0gdmVjNCgocHJvamVjdGlvbk1hdHJpeCAqIHZlYzMoYVZlcnRleFBvc2l0aW9uLCAxLjApKS54eSwgMC4wLCAxLjApO1xcbiAgIHZUZXh0dXJlQ29vcmQgPSBhVGV4dHVyZUNvb3JkO1xcbiAgIHZNYXBDb29yZCA9ICggb3RoZXJNYXRyaXggKiB2ZWMzKCBhVGV4dHVyZUNvb3JkLCAxLjApICApLnh5O1xcbiAgIHZDb2xvciA9IHZlYzQoYUNvbG9yLnJnYiAqIGFDb2xvci5hLCBhQ29sb3IuYSk7XFxufVxcblwiLFxuICAgICAgICAvLyBmcmFnbWVudCBzaGFkZXJcbiAgICAgICAgXCJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcXG5cXG52YXJ5aW5nIHZlYzIgdk1hcENvb3JkO1xcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xcbnZhcnlpbmcgdmVjNCB2Q29sb3I7XFxuXFxudW5pZm9ybSB2ZWMyIHNjYWxlO1xcblxcbnVuaWZvcm0gc2FtcGxlcjJEIHVTYW1wbGVyO1xcbnVuaWZvcm0gc2FtcGxlcjJEIG1hcFNhbXBsZXI7XFxuXFxudm9pZCBtYWluKHZvaWQpXFxue1xcbiAgIHZlYzQgbWFwID0gIHRleHR1cmUyRChtYXBTYW1wbGVyLCB2TWFwQ29vcmQpO1xcblxcbiAgIG1hcCAtPSAwLjU7XFxuICAgbWFwLnh5ICo9IHNjYWxlO1xcblxcbiAgIGdsX0ZyYWdDb2xvciA9IHRleHR1cmUyRCh1U2FtcGxlciwgdmVjMih2VGV4dHVyZUNvb3JkLnggKyBtYXAueCwgdlRleHR1cmVDb29yZC55ICsgbWFwLnkpKTtcXG59XFxuXCIsXG4gICAgICAgIC8vIHVuaWZvcm1zXG4gICAgICAgIHtcbiAgICAgICAgICAgIG1hcFNhbXBsZXI6ICAgICB7IHR5cGU6ICdzYW1wbGVyMkQnLCB2YWx1ZTogc3ByaXRlLnRleHR1cmUgfSxcbiAgICAgICAgICAgIG90aGVyTWF0cml4OiAgICB7IHR5cGU6ICdtYXQzJywgdmFsdWU6IG1hc2tNYXRyaXgudG9BcnJheSh0cnVlKSB9LFxuICAgICAgICAgICAgc2NhbGU6ICAgICAgICAgIHsgdHlwZTogJ3YyJywgdmFsdWU6IHsgeDogMSwgeTogMSB9IH1cbiAgICAgICAgfVxuICAgICk7XG5cbiAgICB0aGlzLm1hc2tTcHJpdGUgPSBzcHJpdGU7XG4gICAgdGhpcy5tYXNrTWF0cml4ID0gbWFza01hdHJpeDtcblxuICAgIGlmIChzY2FsZSA9PT0gbnVsbCB8fCBzY2FsZSA9PT0gdW5kZWZpbmVkKVxuICAgIHtcbiAgICAgICAgc2NhbGUgPSAyMDtcbiAgICB9XG5cbiAgICB0aGlzLnNjYWxlID0gbmV3IGNvcmUuUG9pbnQoc2NhbGUsIHNjYWxlKTtcbn1cblxuRGlzcGxhY2VtZW50RmlsdGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoY29yZS5BYnN0cmFjdEZpbHRlci5wcm90b3R5cGUpO1xuRGlzcGxhY2VtZW50RmlsdGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IERpc3BsYWNlbWVudEZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gRGlzcGxhY2VtZW50RmlsdGVyO1xuXG5EaXNwbGFjZW1lbnRGaWx0ZXIucHJvdG90eXBlLmFwcGx5RmlsdGVyID0gZnVuY3Rpb24gKHJlbmRlcmVyLCBpbnB1dCwgb3V0cHV0KVxue1xuICAgIHZhciBmaWx0ZXJNYW5hZ2VyID0gcmVuZGVyZXIuZmlsdGVyTWFuYWdlcjtcblxuICAgIGZpbHRlck1hbmFnZXIuY2FsY3VsYXRlTWFwcGVkTWF0cml4KGlucHV0LmZyYW1lLCB0aGlzLm1hc2tTcHJpdGUsIHRoaXMubWFza01hdHJpeCk7XG5cbiAgICB0aGlzLnVuaWZvcm1zLm90aGVyTWF0cml4LnZhbHVlID0gdGhpcy5tYXNrTWF0cml4LnRvQXJyYXkodHJ1ZSk7XG4gICAgdGhpcy51bmlmb3Jtcy5zY2FsZS52YWx1ZS54ID0gdGhpcy5zY2FsZS54ICogKDEvaW5wdXQuZnJhbWUud2lkdGgpO1xuICAgIHRoaXMudW5pZm9ybXMuc2NhbGUudmFsdWUueSA9IHRoaXMuc2NhbGUueSAqICgxL2lucHV0LmZyYW1lLmhlaWdodCk7XG5cbiAgICB2YXIgc2hhZGVyID0gdGhpcy5nZXRTaGFkZXIocmVuZGVyZXIpO1xuICAgICAvLyBkcmF3IHRoZSBmaWx0ZXIuLi5cbiAgICBmaWx0ZXJNYW5hZ2VyLmFwcGx5RmlsdGVyKHNoYWRlciwgaW5wdXQsIG91dHB1dCk7XG59O1xuXG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKERpc3BsYWNlbWVudEZpbHRlci5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBUaGUgdGV4dHVyZSB1c2VkIGZvciB0aGUgZGlzcGxhY2VtZW50IG1hcC4gTXVzdCBiZSBwb3dlciBvZiAyIHNpemVkIHRleHR1cmUuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlRleHR1cmV9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5EaXNwbGFjZW1lbnRGaWx0ZXIjXG4gICAgICovXG4gICAgbWFwOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudW5pZm9ybXMubWFwU2FtcGxlci52YWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudW5pZm9ybXMubWFwU2FtcGxlci52YWx1ZSA9IHZhbHVlO1xuXG4gICAgICAgIH1cbiAgICB9XG59KTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vLi4vY29yZScpO1xuLy8gQHNlZSBodHRwczovL2dpdGh1Yi5jb20vc3Vic3RhY2svYnJmcy9pc3N1ZXMvMjVcblxuXG4vKipcbiAqIEBhdXRob3IgTWF0IEdyb3ZlcyBodHRwOi8vbWF0Z3JvdmVzLmNvbS8gQERvb3JtYXQyM1xuICogb3JpZ2luYWwgZmlsdGVyOiBodHRwczovL2dpdGh1Yi5jb20vZXZhbncvZ2xmeC5qcy9ibG9iL21hc3Rlci9zcmMvZmlsdGVycy9mdW4vZG90c2NyZWVuLmpzXG4gKi9cblxuLyoqXG4gKiBUaGlzIGZpbHRlciBhcHBsaWVzIGEgZG90c2NyZWVuIGVmZmVjdCBtYWtpbmcgZGlzcGxheSBvYmplY3RzIGFwcGVhciB0byBiZSBtYWRlIG91dCBvZlxuICogYmxhY2sgYW5kIHdoaXRlIGhhbGZ0b25lIGRvdHMgbGlrZSBhbiBvbGQgcHJpbnRlci5cbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQWJzdHJhY3RGaWx0ZXJcbiAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnNcbiAqL1xuZnVuY3Rpb24gRG90U2NyZWVuRmlsdGVyKClcbntcbiAgICBjb3JlLkFic3RyYWN0RmlsdGVyLmNhbGwodGhpcyxcbiAgICAgICAgLy8gdmVydGV4IHNoYWRlclxuICAgICAgICBudWxsLFxuICAgICAgICAvLyBmcmFnbWVudCBzaGFkZXJcbiAgICAgICAgXCJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcXG5cXG52YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDtcXG52YXJ5aW5nIHZlYzQgdkNvbG9yO1xcblxcbnVuaWZvcm0gdmVjNCBkaW1lbnNpb25zO1xcbnVuaWZvcm0gc2FtcGxlcjJEIHVTYW1wbGVyO1xcblxcbnVuaWZvcm0gZmxvYXQgYW5nbGU7XFxudW5pZm9ybSBmbG9hdCBzY2FsZTtcXG5cXG5mbG9hdCBwYXR0ZXJuKClcXG57XFxuICAgZmxvYXQgcyA9IHNpbihhbmdsZSksIGMgPSBjb3MoYW5nbGUpO1xcbiAgIHZlYzIgdGV4ID0gdlRleHR1cmVDb29yZCAqIGRpbWVuc2lvbnMueHk7XFxuICAgdmVjMiBwb2ludCA9IHZlYzIoXFxuICAgICAgIGMgKiB0ZXgueCAtIHMgKiB0ZXgueSxcXG4gICAgICAgcyAqIHRleC54ICsgYyAqIHRleC55XFxuICAgKSAqIHNjYWxlO1xcbiAgIHJldHVybiAoc2luKHBvaW50LngpICogc2luKHBvaW50LnkpKSAqIDQuMDtcXG59XFxuXFxudm9pZCBtYWluKClcXG57XFxuICAgdmVjNCBjb2xvciA9IHRleHR1cmUyRCh1U2FtcGxlciwgdlRleHR1cmVDb29yZCk7XFxuICAgZmxvYXQgYXZlcmFnZSA9IChjb2xvci5yICsgY29sb3IuZyArIGNvbG9yLmIpIC8gMy4wO1xcbiAgIGdsX0ZyYWdDb2xvciA9IHZlYzQodmVjMyhhdmVyYWdlICogMTAuMCAtIDUuMCArIHBhdHRlcm4oKSksIGNvbG9yLmEpO1xcbn1cXG5cIixcbiAgICAgICAgLy8gY3VzdG9tIHVuaWZvcm1zXG4gICAgICAgIHtcbiAgICAgICAgICAgIHNjYWxlOiAgICAgIHsgdHlwZTogJzFmJywgdmFsdWU6IDEgfSxcbiAgICAgICAgICAgIGFuZ2xlOiAgICAgIHsgdHlwZTogJzFmJywgdmFsdWU6IDUgfSxcbiAgICAgICAgICAgIGRpbWVuc2lvbnM6IHsgdHlwZTogJzRmdicsIHZhbHVlOiBbMCwgMCwgMCwgMF0gfVxuICAgICAgICB9XG4gICAgKTtcbn1cblxuRG90U2NyZWVuRmlsdGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoY29yZS5BYnN0cmFjdEZpbHRlci5wcm90b3R5cGUpO1xuRG90U2NyZWVuRmlsdGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IERvdFNjcmVlbkZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gRG90U2NyZWVuRmlsdGVyO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhEb3RTY3JlZW5GaWx0ZXIucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogVGhlIHNjYWxlIG9mIHRoZSBlZmZlY3QuXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuRG90U2NyZWVuRmlsdGVyI1xuICAgICAqL1xuICAgIHNjYWxlOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudW5pZm9ybXMuc2NhbGUudmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLnNjYWxlLnZhbHVlID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVGhlIHJhZGl1cyBvZiB0aGUgZWZmZWN0LlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLkRvdFNjcmVlbkZpbHRlciNcbiAgICAgKi9cbiAgICBhbmdsZToge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVuaWZvcm1zLmFuZ2xlLnZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy5hbmdsZS52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfVxufSk7XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uLy4uL2NvcmUnKTtcblxuLy8gQHNlZSBodHRwczovL2dpdGh1Yi5jb20vc3Vic3RhY2svYnJmcy9pc3N1ZXMvMjVcblxuXG4vKipcbiAqIFRoZSBCbHVyWVRpbnRGaWx0ZXIgYXBwbGllcyBhIHZlcnRpY2FsIEdhdXNzaWFuIGJsdXIgdG8gYW4gb2JqZWN0LlxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5BYnN0cmFjdEZpbHRlclxuICogQG1lbWJlcm9mIFBJWEkuZmlsdGVyc1xuICovXG5mdW5jdGlvbiBCbHVyWVRpbnRGaWx0ZXIoKVxue1xuICAgIGNvcmUuQWJzdHJhY3RGaWx0ZXIuY2FsbCh0aGlzLFxuICAgICAgICAvLyB2ZXJ0ZXggc2hhZGVyXG4gICAgICAgIFwiYXR0cmlidXRlIHZlYzIgYVZlcnRleFBvc2l0aW9uO1xcbmF0dHJpYnV0ZSB2ZWMyIGFUZXh0dXJlQ29vcmQ7XFxuYXR0cmlidXRlIHZlYzQgYUNvbG9yO1xcblxcbnVuaWZvcm0gZmxvYXQgc3RyZW5ndGg7XFxudW5pZm9ybSB2ZWMyIG9mZnNldDtcXG5cXG51bmlmb3JtIG1hdDMgcHJvamVjdGlvbk1hdHJpeDtcXG5cXG52YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDtcXG52YXJ5aW5nIHZlYzQgdkNvbG9yO1xcbnZhcnlpbmcgdmVjMiB2Qmx1clRleENvb3Jkc1s2XTtcXG5cXG52b2lkIG1haW4odm9pZClcXG57XFxuICAgIGdsX1Bvc2l0aW9uID0gdmVjNCgocHJvamVjdGlvbk1hdHJpeCAqIHZlYzMoKGFWZXJ0ZXhQb3NpdGlvbitvZmZzZXQpLCAxLjApKS54eSwgMC4wLCAxLjApO1xcbiAgICB2VGV4dHVyZUNvb3JkID0gYVRleHR1cmVDb29yZDtcXG5cXG4gICAgdkJsdXJUZXhDb29yZHNbIDBdID0gYVRleHR1cmVDb29yZCArIHZlYzIoMC4wLCAtMC4wMTIgKiBzdHJlbmd0aCk7XFxuICAgIHZCbHVyVGV4Q29vcmRzWyAxXSA9IGFUZXh0dXJlQ29vcmQgKyB2ZWMyKDAuMCwgLTAuMDA4ICogc3RyZW5ndGgpO1xcbiAgICB2Qmx1clRleENvb3Jkc1sgMl0gPSBhVGV4dHVyZUNvb3JkICsgdmVjMigwLjAsIC0wLjAwNCAqIHN0cmVuZ3RoKTtcXG4gICAgdkJsdXJUZXhDb29yZHNbIDNdID0gYVRleHR1cmVDb29yZCArIHZlYzIoMC4wLCAgMC4wMDQgKiBzdHJlbmd0aCk7XFxuICAgIHZCbHVyVGV4Q29vcmRzWyA0XSA9IGFUZXh0dXJlQ29vcmQgKyB2ZWMyKDAuMCwgIDAuMDA4ICogc3RyZW5ndGgpO1xcbiAgICB2Qmx1clRleENvb3Jkc1sgNV0gPSBhVGV4dHVyZUNvb3JkICsgdmVjMigwLjAsICAwLjAxMiAqIHN0cmVuZ3RoKTtcXG5cXG4gICB2Q29sb3IgPSB2ZWM0KGFDb2xvci5yZ2IgKiBhQ29sb3IuYSwgYUNvbG9yLmEpO1xcbn1cXG5cIixcbiAgICAgICAgLy8gZnJhZ21lbnQgc2hhZGVyXG4gICAgICAgIFwicHJlY2lzaW9uIGxvd3AgZmxvYXQ7XFxuXFxudmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7XFxudmFyeWluZyB2ZWMyIHZCbHVyVGV4Q29vcmRzWzZdO1xcbnZhcnlpbmcgdmVjNCB2Q29sb3I7XFxuXFxudW5pZm9ybSB2ZWMzIGNvbG9yO1xcbnVuaWZvcm0gZmxvYXQgYWxwaGE7XFxuXFxudW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXI7XFxuXFxudm9pZCBtYWluKHZvaWQpXFxue1xcbiAgICB2ZWM0IHN1bSA9IHZlYzQoMC4wKTtcXG5cXG4gICAgc3VtICs9IHRleHR1cmUyRCh1U2FtcGxlciwgdkJsdXJUZXhDb29yZHNbIDBdKSowLjAwNDQzMTg0ODQxMTkzODM0MTtcXG4gICAgc3VtICs9IHRleHR1cmUyRCh1U2FtcGxlciwgdkJsdXJUZXhDb29yZHNbIDFdKSowLjA1Mzk5MDk2NjUxMzE4OTg1O1xcbiAgICBzdW0gKz0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2Qmx1clRleENvb3Jkc1sgMl0pKjAuMjQxOTcwNzI0NTE5MTQ1NDtcXG4gICAgc3VtICs9IHRleHR1cmUyRCh1U2FtcGxlciwgdlRleHR1cmVDb29yZCAgICAgKSowLjM5ODk0MjI4MDQwMTQzMjc7XFxuICAgIHN1bSArPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZCbHVyVGV4Q29vcmRzWyAzXSkqMC4yNDE5NzA3MjQ1MTkxNDU0O1xcbiAgICBzdW0gKz0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2Qmx1clRleENvb3Jkc1sgNF0pKjAuMDUzOTkwOTY2NTEzMTg5ODU7XFxuICAgIHN1bSArPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZCbHVyVGV4Q29vcmRzWyA1XSkqMC4wMDQ0MzE4NDg0MTE5MzgzNDE7XFxuXFxuICAgIGdsX0ZyYWdDb2xvciA9IHZlYzQoIGNvbG9yLnJnYiAqIHN1bS5hICogYWxwaGEsIHN1bS5hICogYWxwaGEgKTtcXG59XFxuXCIsXG4gICAgICAgIC8vIHNldCB0aGUgdW5pZm9ybXNcbiAgICAgICAge1xuICAgICAgICAgICAgYmx1cjogeyB0eXBlOiAnMWYnLCB2YWx1ZTogMSAvIDUxMiB9LFxuICAgICAgICAgICAgY29sb3I6IHsgdHlwZTogJ2MnLCB2YWx1ZTogWzAsMCwwXX0sXG4gICAgICAgICAgICBhbHBoYTogeyB0eXBlOiAnMWYnLCB2YWx1ZTogMC43IH0sXG4gICAgICAgICAgICBvZmZzZXQ6IHsgdHlwZTogJzJmJywgdmFsdWU6WzUsIDVdfSxcbiAgICAgICAgICAgIHN0cmVuZ3RoOiB7IHR5cGU6ICcxZicsIHZhbHVlOjF9XG4gICAgICAgIH1cbiAgICApO1xuXG4gICAgdGhpcy5wYXNzZXMgPSAxO1xuICAgIHRoaXMuc3RyZW5ndGggPSA0O1xufVxuXG5CbHVyWVRpbnRGaWx0ZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShjb3JlLkFic3RyYWN0RmlsdGVyLnByb3RvdHlwZSk7XG5CbHVyWVRpbnRGaWx0ZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gQmx1cllUaW50RmlsdGVyO1xubW9kdWxlLmV4cG9ydHMgPSBCbHVyWVRpbnRGaWx0ZXI7XG5cbkJsdXJZVGludEZpbHRlci5wcm90b3R5cGUuYXBwbHlGaWx0ZXIgPSBmdW5jdGlvbiAocmVuZGVyZXIsIGlucHV0LCBvdXRwdXQsIGNsZWFyKVxue1xuICAgIHZhciBzaGFkZXIgPSB0aGlzLmdldFNoYWRlcihyZW5kZXJlcik7XG5cbiAgICB0aGlzLnVuaWZvcm1zLnN0cmVuZ3RoLnZhbHVlID0gdGhpcy5zdHJlbmd0aCAvIDQgLyB0aGlzLnBhc3NlcyAqIChpbnB1dC5mcmFtZS5oZWlnaHQgLyBpbnB1dC5zaXplLmhlaWdodCk7XG5cbiAgICBpZih0aGlzLnBhc3NlcyA9PT0gMSlcbiAgICB7XG4gICAgICAgIHJlbmRlcmVyLmZpbHRlck1hbmFnZXIuYXBwbHlGaWx0ZXIoc2hhZGVyLCBpbnB1dCwgb3V0cHV0LCBjbGVhcik7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHZhciByZW5kZXJUYXJnZXQgPSByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLmdldFJlbmRlclRhcmdldCh0cnVlKTtcbiAgICAgICAgdmFyIGZsaXAgPSBpbnB1dDtcbiAgICAgICAgdmFyIGZsb3AgPSByZW5kZXJUYXJnZXQ7XG5cbiAgICAgICAgZm9yKHZhciBpID0gMDsgaSA8IHRoaXMucGFzc2VzLTE7IGkrKylcbiAgICAgICAge1xuICAgICAgICAgICAgcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5hcHBseUZpbHRlcihzaGFkZXIsIGZsaXAsIGZsb3AsIGNsZWFyKTtcblxuICAgICAgICAgICB2YXIgdGVtcCA9IGZsb3A7XG4gICAgICAgICAgIGZsb3AgPSBmbGlwO1xuICAgICAgICAgICBmbGlwID0gdGVtcDtcbiAgICAgICAgfVxuXG4gICAgICAgIHJlbmRlcmVyLmZpbHRlck1hbmFnZXIuYXBwbHlGaWx0ZXIoc2hhZGVyLCBmbGlwLCBvdXRwdXQsIGNsZWFyKTtcblxuICAgICAgICByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLnJldHVyblJlbmRlclRhcmdldChyZW5kZXJUYXJnZXQpO1xuICAgIH1cbn07XG5cblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoQmx1cllUaW50RmlsdGVyLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIHN0cmVuZ3RoIG9mIGJvdGggdGhlIGJsdXIuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5CbHVyWVRpbnRGaWx0ZXIjXG4gICAgICogQGRlZmF1bHQgMlxuICAgICAqL1xuICAgIGJsdXI6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gIHRoaXMuc3RyZW5ndGg7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnBhZGRpbmcgPSB2YWx1ZSAqIDAuNTtcbiAgICAgICAgICAgIHRoaXMuc3RyZW5ndGggPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi8uLi9jb3JlJyksXG4gICAgQmx1clhGaWx0ZXIgPSByZXF1aXJlKCcuLi9ibHVyL0JsdXJYRmlsdGVyJyksXG4gICAgQmx1cllUaW50RmlsdGVyID0gcmVxdWlyZSgnLi9CbHVyWVRpbnRGaWx0ZXInKTtcblxuLyoqXG4gKiBUaGUgRHJvcFNoYWRvd0ZpbHRlciBhcHBsaWVzIGEgR2F1c3NpYW4gYmx1ciB0byBhbiBvYmplY3QuXG4gKiBUaGUgc3RyZW5ndGggb2YgdGhlIGJsdXIgY2FuIGJlIHNldCBmb3IgeC0gYW5kIHktYXhpcyBzZXBhcmF0ZWx5LlxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5BYnN0cmFjdEZpbHRlclxuICogQG1lbWJlcm9mIFBJWEkuZmlsdGVyc1xuICovXG5mdW5jdGlvbiBEcm9wU2hhZG93RmlsdGVyKClcbntcbiAgICBjb3JlLkFic3RyYWN0RmlsdGVyLmNhbGwodGhpcyk7XG5cbiAgICB0aGlzLmJsdXJYRmlsdGVyID0gbmV3IEJsdXJYRmlsdGVyKCk7XG4gICAgdGhpcy5ibHVyWVRpbnRGaWx0ZXIgPSBuZXcgQmx1cllUaW50RmlsdGVyKCk7XG5cbiAgICB0aGlzLmRlZmF1bHRGaWx0ZXIgPSBuZXcgY29yZS5BYnN0cmFjdEZpbHRlcigpO1xuXG4gICAgdGhpcy5wYWRkaW5nID0gMzA7XG5cbiAgICB0aGlzLl9kaXJ0eVBvc2l0aW9uID0gdHJ1ZTtcbiAgICB0aGlzLl9hbmdsZSA9IDQ1ICogTWF0aC5QSSAvIDE4MDtcbiAgICB0aGlzLl9kaXN0YW5jZSA9IDEwO1xuICAgIHRoaXMuYWxwaGEgPSAwLjc1O1xuICAgIHRoaXMuaGlkZU9iamVjdCA9IGZhbHNlO1xuICAgIHRoaXMuYmxlbmRNb2RlID0gY29yZS5CTEVORF9NT0RFUy5NVUxUSVBMWTtcbn1cblxuRHJvcFNoYWRvd0ZpbHRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuQWJzdHJhY3RGaWx0ZXIucHJvdG90eXBlKTtcbkRyb3BTaGFkb3dGaWx0ZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gRHJvcFNoYWRvd0ZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gRHJvcFNoYWRvd0ZpbHRlcjtcblxuRHJvcFNoYWRvd0ZpbHRlci5wcm90b3R5cGUuYXBwbHlGaWx0ZXIgPSBmdW5jdGlvbiAocmVuZGVyZXIsIGlucHV0LCBvdXRwdXQpXG57XG4gICAgdmFyIHJlbmRlclRhcmdldCA9IHJlbmRlcmVyLmZpbHRlck1hbmFnZXIuZ2V0UmVuZGVyVGFyZ2V0KHRydWUpO1xuXG4gICAgLy9UT0RPIC0gY29weVRleFN1YkltYWdlMkQgY291bGQgYmUgdXNlZCBoZXJlP1xuICAgIGlmKHRoaXMuX2RpcnR5UG9zaXRpb24pXG4gICAge1xuICAgICAgICB0aGlzLl9kaXJ0eVBvc2l0aW9uID0gZmFsc2U7XG5cbiAgICAgICAgdGhpcy5ibHVyWVRpbnRGaWx0ZXIudW5pZm9ybXMub2Zmc2V0LnZhbHVlWzBdID0gTWF0aC5zaW4odGhpcy5fYW5nbGUpICogdGhpcy5fZGlzdGFuY2U7XG4gICAgICAgIHRoaXMuYmx1cllUaW50RmlsdGVyLnVuaWZvcm1zLm9mZnNldC52YWx1ZVsxXSA9IE1hdGguY29zKHRoaXMuX2FuZ2xlKSAqIHRoaXMuX2Rpc3RhbmNlO1xuICAgIH1cblxuICAgIHRoaXMuYmx1clhGaWx0ZXIuYXBwbHlGaWx0ZXIocmVuZGVyZXIsIGlucHV0LCByZW5kZXJUYXJnZXQpO1xuXG4gICAgcmVuZGVyZXIuYmxlbmRNb2RlTWFuYWdlci5zZXRCbGVuZE1vZGUodGhpcy5ibGVuZE1vZGUpO1xuXG4gICAgdGhpcy5ibHVyWVRpbnRGaWx0ZXIuYXBwbHlGaWx0ZXIocmVuZGVyZXIsIHJlbmRlclRhcmdldCwgb3V0cHV0KTtcblxuICAgIHJlbmRlcmVyLmJsZW5kTW9kZU1hbmFnZXIuc2V0QmxlbmRNb2RlKGNvcmUuQkxFTkRfTU9ERVMuTk9STUFMKTtcblxuICAgIGlmKCF0aGlzLmhpZGVPYmplY3QpXG4gICAge1xuXG4gICAgICAgIHRoaXMuZGVmYXVsdEZpbHRlci5hcHBseUZpbHRlcihyZW5kZXJlciwgaW5wdXQsIG91dHB1dCk7XG4gICAgfVxuXG5cbiAgICByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLnJldHVyblJlbmRlclRhcmdldChyZW5kZXJUYXJnZXQpO1xufTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoRHJvcFNoYWRvd0ZpbHRlci5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBzdHJlbmd0aCBvZiBib3RoIHRoZSBibHVyWCBhbmQgYmx1clkgcHJvcGVydGllcyBzaW11bHRhbmVvdXNseVxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJPZiBQSVhJLmZpbHRlcnMuRHJvcFNoYWRvd0ZpbHRlciNcbiAgICAgKiBAZGVmYXVsdCAyXG4gICAgICovXG4gICAgYmx1cjoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmJsdXJYRmlsdGVyLmJsdXI7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmJsdXJYRmlsdGVyLmJsdXIgPSB0aGlzLmJsdXJZVGludEZpbHRlci5ibHVyID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgc3RyZW5ndGggb2YgdGhlIGJsdXJYIHByb3BlcnR5XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlck9mIFBJWEkuZmlsdGVycy5Ecm9wU2hhZG93RmlsdGVyI1xuICAgICAqIEBkZWZhdWx0IDJcbiAgICAgKi9cbiAgICBibHVyWDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmJsdXJYRmlsdGVyLmJsdXI7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmJsdXJYRmlsdGVyLmJsdXIgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBzdHJlbmd0aCBvZiB0aGUgYmx1clkgcHJvcGVydHlcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyT2YgUElYSS5maWx0ZXJzLkRyb3BTaGFkb3dGaWx0ZXIjXG4gICAgICogQGRlZmF1bHQgMlxuICAgICAqL1xuICAgIGJsdXJZOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuYmx1cllUaW50RmlsdGVyLmJsdXI7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmJsdXJZVGludEZpbHRlci5ibHVyID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgY29sb3Igb2YgdGhlIHNoYWRvd1xuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJPZiBQSVhJLmZpbHRlcnMuRHJvcFNoYWRvd0ZpbHRlciNcbiAgICAgKi9cbiAgICBjb2xvcjoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiAgY29yZS51dGlscy5yZ2IyaGV4KCB0aGlzLmJsdXJZVGludEZpbHRlci51bmlmb3Jtcy5jb2xvci52YWx1ZSApO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5ibHVyWVRpbnRGaWx0ZXIudW5pZm9ybXMuY29sb3IudmFsdWUgPSBjb3JlLnV0aWxzLmhleDJyZ2IodmFsdWUpO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIGFscGhhIG9mIHRoZSBzaGFkb3dcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyT2YgUElYSS5maWx0ZXJzLkRyb3BTaGFkb3dGaWx0ZXIjXG4gICAgICovXG4gICAgYWxwaGE6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gIHRoaXMuYmx1cllUaW50RmlsdGVyLnVuaWZvcm1zLmFscGhhLnZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5ibHVyWVRpbnRGaWx0ZXIudW5pZm9ybXMuYWxwaGEudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBkaXN0YW5jZSBvZiB0aGUgc2hhZG93XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlck9mIFBJWEkuZmlsdGVycy5Ecm9wU2hhZG93RmlsdGVyI1xuICAgICAqL1xuICAgIGRpc3RhbmNlOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuICB0aGlzLl9kaXN0YW5jZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuX2RpcnR5UG9zaXRpb24gPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy5fZGlzdGFuY2UgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBhbmdsZSBvZiB0aGUgc2hhZG93XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlck9mIFBJWEkuZmlsdGVycy5Ecm9wU2hhZG93RmlsdGVyI1xuICAgICAqL1xuICAgIGFuZ2xlOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuICB0aGlzLl9hbmdsZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuX2RpcnR5UG9zaXRpb24gPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy5fYW5nbGUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi8uLi9jb3JlJyk7XG4vLyBAc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9zdWJzdGFjay9icmZzL2lzc3Vlcy8yNVxuXG5cbi8qKlxuICogVGhpcyBncmV5c2NhbGVzIHRoZSBwYWxldHRlIG9mIHlvdXIgRGlzcGxheSBPYmplY3RzLlxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5BYnN0cmFjdEZpbHRlclxuICogQG1lbWJlcm9mIFBJWEkuZmlsdGVyc1xuICovXG5mdW5jdGlvbiBHcmF5RmlsdGVyKClcbntcbiAgICBjb3JlLkFic3RyYWN0RmlsdGVyLmNhbGwodGhpcyxcbiAgICAgICAgLy8gdmVydGV4IHNoYWRlclxuICAgICAgICBudWxsLFxuICAgICAgICAvLyBmcmFnbWVudCBzaGFkZXJcbiAgICAgICAgXCJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcXG5cXG52YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDtcXG52YXJ5aW5nIHZlYzQgdkNvbG9yO1xcblxcbnVuaWZvcm0gc2FtcGxlcjJEIHVTYW1wbGVyO1xcbnVuaWZvcm0gZmxvYXQgZ3JheTtcXG5cXG52b2lkIG1haW4odm9pZClcXG57XFxuICAgZ2xfRnJhZ0NvbG9yID0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2VGV4dHVyZUNvb3JkKTtcXG4gICBnbF9GcmFnQ29sb3IucmdiID0gbWl4KGdsX0ZyYWdDb2xvci5yZ2IsIHZlYzMoMC4yMTI2KmdsX0ZyYWdDb2xvci5yICsgMC43MTUyKmdsX0ZyYWdDb2xvci5nICsgMC4wNzIyKmdsX0ZyYWdDb2xvci5iKSwgZ3JheSk7XFxufVxcblwiLFxuICAgICAgICAvLyBzZXQgdGhlIHVuaWZvcm1zXG4gICAgICAgIHtcbiAgICAgICAgICAgIGdyYXk6IHsgdHlwZTogJzFmJywgdmFsdWU6IDEgfVxuICAgICAgICB9XG4gICAgKTtcbn1cblxuR3JheUZpbHRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuQWJzdHJhY3RGaWx0ZXIucHJvdG90eXBlKTtcbkdyYXlGaWx0ZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gR3JheUZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gR3JheUZpbHRlcjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoR3JheUZpbHRlci5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBUaGUgc3RyZW5ndGggb2YgdGhlIGdyYXkuIDEgd2lsbCBtYWtlIHRoZSBvYmplY3QgYmxhY2sgYW5kIHdoaXRlLCAwIHdpbGwgbWFrZSB0aGUgb2JqZWN0IGl0cyBub3JtYWwgY29sb3IuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5HcmF5RmlsdGVyI1xuICAgICAqL1xuICAgIGdyYXk6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy51bmlmb3Jtcy5ncmF5LnZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy5ncmF5LnZhbHVlID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG59KTtcbiIsIi8qKlxuICogQGZpbGUgICAgICAgIE1haW4gZXhwb3J0IG9mIHRoZSBQSVhJIGZpbHRlcnMgbGlicmFyeVxuICogQGF1dGhvciAgICAgIE1hdCBHcm92ZXMgPG1hdEBnb29kYm95ZGlnaXRhbC5jb20+XG4gKiBAY29weXJpZ2h0ICAgMjAxMy0yMDE1IEdvb2RCb3lEaWdpdGFsXG4gKiBAbGljZW5zZSAgICAge0BsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9waXhpanMvcGl4aS5qcy9ibG9iL21hc3Rlci9MSUNFTlNFfE1JVCBMaWNlbnNlfVxuICovXG5cbi8qKlxuICogQG5hbWVzcGFjZSBQSVhJLmZpbHRlcnNcbiAqL1xubW9kdWxlLmV4cG9ydHMgPSB7XG4gICAgQXNjaWlGaWx0ZXI6ICAgICAgICByZXF1aXJlKCcuL2FzY2lpL0FzY2lpRmlsdGVyJyksXG4gICAgQmxvb21GaWx0ZXI6ICAgICAgICByZXF1aXJlKCcuL2Jsb29tL0Jsb29tRmlsdGVyJyksXG4gICAgQmx1ckZpbHRlcjogICAgICAgICByZXF1aXJlKCcuL2JsdXIvQmx1ckZpbHRlcicpLFxuICAgIEJsdXJYRmlsdGVyOiAgICAgICAgcmVxdWlyZSgnLi9ibHVyL0JsdXJYRmlsdGVyJyksXG4gICAgQmx1cllGaWx0ZXI6ICAgICAgICByZXF1aXJlKCcuL2JsdXIvQmx1cllGaWx0ZXInKSxcbiAgICBCbHVyRGlyRmlsdGVyOiAgICAgIHJlcXVpcmUoJy4vYmx1ci9CbHVyRGlyRmlsdGVyJyksXG4gICAgQ29sb3JNYXRyaXhGaWx0ZXI6ICByZXF1aXJlKCcuL2NvbG9yL0NvbG9yTWF0cml4RmlsdGVyJyksXG4gICAgQ29sb3JTdGVwRmlsdGVyOiAgICByZXF1aXJlKCcuL2NvbG9yL0NvbG9yU3RlcEZpbHRlcicpLFxuICAgIENvbnZvbHV0aW9uRmlsdGVyOiAgcmVxdWlyZSgnLi9jb252b2x1dGlvbi9Db252b2x1dGlvbkZpbHRlcicpLFxuICAgIENyb3NzSGF0Y2hGaWx0ZXI6ICAgcmVxdWlyZSgnLi9jcm9zc2hhdGNoL0Nyb3NzSGF0Y2hGaWx0ZXInKSxcbiAgICBEaXNwbGFjZW1lbnRGaWx0ZXI6IHJlcXVpcmUoJy4vZGlzcGxhY2VtZW50L0Rpc3BsYWNlbWVudEZpbHRlcicpLFxuICAgIERvdFNjcmVlbkZpbHRlcjogICAgcmVxdWlyZSgnLi9kb3QvRG90U2NyZWVuRmlsdGVyJyksXG4gICAgR3JheUZpbHRlcjogICAgICAgICByZXF1aXJlKCcuL2dyYXkvR3JheUZpbHRlcicpLFxuICAgIERyb3BTaGFkb3dGaWx0ZXI6ICAgcmVxdWlyZSgnLi9kcm9wc2hhZG93L0Ryb3BTaGFkb3dGaWx0ZXInKSxcbiAgICBJbnZlcnRGaWx0ZXI6ICAgICAgIHJlcXVpcmUoJy4vaW52ZXJ0L0ludmVydEZpbHRlcicpLFxuICAgIE5vaXNlRmlsdGVyOiAgICAgICAgcmVxdWlyZSgnLi9ub2lzZS9Ob2lzZUZpbHRlcicpLFxuICAgIFBpeGVsYXRlRmlsdGVyOiAgICAgcmVxdWlyZSgnLi9waXhlbGF0ZS9QaXhlbGF0ZUZpbHRlcicpLFxuICAgIFJHQlNwbGl0RmlsdGVyOiAgICAgcmVxdWlyZSgnLi9yZ2IvUkdCU3BsaXRGaWx0ZXInKSxcbiAgICBTaG9ja3dhdmVGaWx0ZXI6ICAgIHJlcXVpcmUoJy4vc2hvY2t3YXZlL1Nob2Nrd2F2ZUZpbHRlcicpLFxuICAgIFNlcGlhRmlsdGVyOiAgICAgICAgcmVxdWlyZSgnLi9zZXBpYS9TZXBpYUZpbHRlcicpLFxuICAgIFNtYXJ0Qmx1ckZpbHRlcjogICAgcmVxdWlyZSgnLi9ibHVyL1NtYXJ0Qmx1ckZpbHRlcicpLFxuICAgIFRpbHRTaGlmdEZpbHRlcjogICAgcmVxdWlyZSgnLi90aWx0c2hpZnQvVGlsdFNoaWZ0RmlsdGVyJyksXG4gICAgVGlsdFNoaWZ0WEZpbHRlcjogICByZXF1aXJlKCcuL3RpbHRzaGlmdC9UaWx0U2hpZnRYRmlsdGVyJyksXG4gICAgVGlsdFNoaWZ0WUZpbHRlcjogICByZXF1aXJlKCcuL3RpbHRzaGlmdC9UaWx0U2hpZnRZRmlsdGVyJyksXG4gICAgVHdpc3RGaWx0ZXI6ICAgICAgICByZXF1aXJlKCcuL3R3aXN0L1R3aXN0RmlsdGVyJylcbn07XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uLy4uL2NvcmUnKTtcbi8vIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL3N1YnN0YWNrL2JyZnMvaXNzdWVzLzI1XG5cblxuLyoqXG4gKiBUaGlzIGludmVydHMgeW91ciBEaXNwbGF5IE9iamVjdHMgY29sb3JzLlxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5BYnN0cmFjdEZpbHRlclxuICogQG1lbWJlcm9mIFBJWEkuZmlsdGVyc1xuICovXG5mdW5jdGlvbiBJbnZlcnRGaWx0ZXIoKVxue1xuICAgIGNvcmUuQWJzdHJhY3RGaWx0ZXIuY2FsbCh0aGlzLFxuICAgICAgICAvLyB2ZXJ0ZXggc2hhZGVyXG4gICAgICAgIG51bGwsXG4gICAgICAgIC8vIGZyYWdtZW50IHNoYWRlclxuICAgICAgICBcInByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xcblxcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xcblxcbnVuaWZvcm0gZmxvYXQgaW52ZXJ0O1xcbnVuaWZvcm0gc2FtcGxlcjJEIHVTYW1wbGVyO1xcblxcbnZvaWQgbWFpbih2b2lkKVxcbntcXG4gICAgZ2xfRnJhZ0NvbG9yID0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2VGV4dHVyZUNvb3JkKTtcXG5cXG4gICAgZ2xfRnJhZ0NvbG9yLnJnYiA9IG1peCggKHZlYzMoMSktZ2xfRnJhZ0NvbG9yLnJnYikgKiBnbF9GcmFnQ29sb3IuYSwgZ2xfRnJhZ0NvbG9yLnJnYiwgMS4wIC0gaW52ZXJ0KTtcXG59XFxuXCIsXG4gICAgICAgIC8vIGN1c3RvbSB1bmlmb3Jtc1xuICAgICAgICB7XG4gICAgICAgICAgICBpbnZlcnQ6IHsgdHlwZTogJzFmJywgdmFsdWU6IDEgfVxuICAgICAgICB9XG4gICAgKTtcbn1cblxuSW52ZXJ0RmlsdGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoY29yZS5BYnN0cmFjdEZpbHRlci5wcm90b3R5cGUpO1xuSW52ZXJ0RmlsdGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IEludmVydEZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gSW52ZXJ0RmlsdGVyO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhJbnZlcnRGaWx0ZXIucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogVGhlIHN0cmVuZ3RoIG9mIHRoZSBpbnZlcnQuIGAxYCB3aWxsIGZ1bGx5IGludmVydCB0aGUgY29sb3JzLCBhbmRcbiAgICAgKiBgMGAgd2lsbCBtYWtlIHRoZSBvYmplY3QgaXRzIG5vcm1hbCBjb2xvci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLkludmVydEZpbHRlciNcbiAgICAgKi9cbiAgICBpbnZlcnQ6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy51bmlmb3Jtcy5pbnZlcnQudmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLmludmVydC52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfVxufSk7XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uLy4uL2NvcmUnKTtcbi8vIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL3N1YnN0YWNrL2JyZnMvaXNzdWVzLzI1XG5cblxuLyoqXG4gKiBAYXV0aG9yIFZpY28gQHZpY29jb3RlYVxuICogb3JpZ2luYWwgZmlsdGVyOiBodHRwczovL2dpdGh1Yi5jb20vZXZhbncvZ2xmeC5qcy9ibG9iL21hc3Rlci9zcmMvZmlsdGVycy9hZGp1c3Qvbm9pc2UuanNcbiAqL1xuXG4vKipcbiAqIEEgTm9pc2UgZWZmZWN0IGZpbHRlci5cbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQWJzdHJhY3RGaWx0ZXJcbiAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnNcbiAqL1xuZnVuY3Rpb24gTm9pc2VGaWx0ZXIoKVxue1xuICAgIGNvcmUuQWJzdHJhY3RGaWx0ZXIuY2FsbCh0aGlzLFxuICAgICAgICAvLyB2ZXJ0ZXggc2hhZGVyXG4gICAgICAgIG51bGwsXG4gICAgICAgIC8vIGZyYWdtZW50IHNoYWRlclxuICAgICAgICBcInByZWNpc2lvbiBoaWdocCBmbG9hdDtcXG5cXG52YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDtcXG52YXJ5aW5nIHZlYzQgdkNvbG9yO1xcblxcbnVuaWZvcm0gZmxvYXQgbm9pc2U7XFxudW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXI7XFxuXFxuZmxvYXQgcmFuZCh2ZWMyIGNvKVxcbntcXG4gICAgcmV0dXJuIGZyYWN0KHNpbihkb3QoY28ueHksIHZlYzIoMTIuOTg5OCwgNzguMjMzKSkpICogNDM3NTguNTQ1Myk7XFxufVxcblxcbnZvaWQgbWFpbigpXFxue1xcbiAgICB2ZWM0IGNvbG9yID0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2VGV4dHVyZUNvb3JkKTtcXG5cXG4gICAgZmxvYXQgZGlmZiA9IChyYW5kKHZUZXh0dXJlQ29vcmQpIC0gMC41KSAqIG5vaXNlO1xcblxcbiAgICBjb2xvci5yICs9IGRpZmY7XFxuICAgIGNvbG9yLmcgKz0gZGlmZjtcXG4gICAgY29sb3IuYiArPSBkaWZmO1xcblxcbiAgICBnbF9GcmFnQ29sb3IgPSBjb2xvcjtcXG59XFxuXCIsXG4gICAgICAgIC8vIGN1c3RvbSB1bmlmb3Jtc1xuICAgICAgICB7XG4gICAgICAgICAgICBub2lzZTogeyB0eXBlOiAnMWYnLCB2YWx1ZTogMC41IH1cbiAgICAgICAgfVxuICAgICk7XG59XG5cbk5vaXNlRmlsdGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoY29yZS5BYnN0cmFjdEZpbHRlci5wcm90b3R5cGUpO1xuTm9pc2VGaWx0ZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gTm9pc2VGaWx0ZXI7XG5tb2R1bGUuZXhwb3J0cyA9IE5vaXNlRmlsdGVyO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhOb2lzZUZpbHRlci5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBUaGUgYW1vdW50IG9mIG5vaXNlIHRvIGFwcGx5LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuTm9pc2VGaWx0ZXIjXG4gICAgICogQGRlZmF1bHQgMC41XG4gICAgICovXG4gICAgbm9pc2U6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy51bmlmb3Jtcy5ub2lzZS52YWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudW5pZm9ybXMubm9pc2UudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi8uLi9jb3JlJyk7XG4vLyBAc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9zdWJzdGFjay9icmZzL2lzc3Vlcy8yNVxuXG5cbi8qKlxuICogVGhpcyBmaWx0ZXIgYXBwbGllcyBhIHBpeGVsYXRlIGVmZmVjdCBtYWtpbmcgZGlzcGxheSBvYmplY3RzIGFwcGVhciAnYmxvY2t5Jy5cbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQWJzdHJhY3RGaWx0ZXJcbiAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnNcbiAqL1xuZnVuY3Rpb24gUGl4ZWxhdGVGaWx0ZXIoKVxue1xuICAgIGNvcmUuQWJzdHJhY3RGaWx0ZXIuY2FsbCh0aGlzLFxuICAgICAgICAvLyB2ZXJ0ZXggc2hhZGVyXG4gICAgICAgIG51bGwsXG4gICAgICAgIC8vIGZyYWdtZW50IHNoYWRlclxuICAgICAgICBcInByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xcblxcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xcblxcbnVuaWZvcm0gdmVjNCBkaW1lbnNpb25zO1xcbnVuaWZvcm0gdmVjMiBwaXhlbFNpemU7XFxudW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXI7XFxuXFxudm9pZCBtYWluKHZvaWQpXFxue1xcbiAgICB2ZWMyIGNvb3JkID0gdlRleHR1cmVDb29yZDtcXG5cXG4gICAgdmVjMiBzaXplID0gZGltZW5zaW9ucy54eSAvIHBpeGVsU2l6ZTtcXG5cXG4gICAgdmVjMiBjb2xvciA9IGZsb29yKCAoIHZUZXh0dXJlQ29vcmQgKiBzaXplICkgKSAvIHNpemUgKyBwaXhlbFNpemUvZGltZW5zaW9ucy54eSAqIDAuNTtcXG5cXG4gICAgZ2xfRnJhZ0NvbG9yID0gdGV4dHVyZTJEKHVTYW1wbGVyLCBjb2xvcik7XFxufVxcblwiLFxuICAgICAgICAvLyBjdXN0b20gdW5pZm9ybXNcbiAgICAgICAge1xuICAgICAgICAgICAgZGltZW5zaW9uczogeyB0eXBlOiAnNGZ2JywgIHZhbHVlOiBuZXcgRmxvYXQzMkFycmF5KFswLCAwLCAwLCAwXSkgfSxcbiAgICAgICAgICAgIHBpeGVsU2l6ZTogIHsgdHlwZTogJ3YyJywgICB2YWx1ZTogeyB4OiAxMCwgeTogMTAgfSB9XG4gICAgICAgIH1cbiAgICApO1xufVxuXG5QaXhlbGF0ZUZpbHRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuQWJzdHJhY3RGaWx0ZXIucHJvdG90eXBlKTtcblBpeGVsYXRlRmlsdGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFBpeGVsYXRlRmlsdGVyO1xubW9kdWxlLmV4cG9ydHMgPSBQaXhlbGF0ZUZpbHRlcjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoUGl4ZWxhdGVGaWx0ZXIucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogVGhpcyBhIHBvaW50IHRoYXQgZGVzY3JpYmVzIHRoZSBzaXplIG9mIHRoZSBibG9ja3MuXG4gICAgICogeCBpcyB0aGUgd2lkdGggb2YgdGhlIGJsb2NrIGFuZCB5IGlzIHRoZSBoZWlnaHQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlBvaW50fVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuUGl4ZWxhdGVGaWx0ZXIjXG4gICAgICovXG4gICAgc2l6ZToge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVuaWZvcm1zLnBpeGVsU2l6ZS52YWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudW5pZm9ybXMucGl4ZWxTaXplLnZhbHVlID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG59KTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vLi4vY29yZScpO1xuLy8gQHNlZSBodHRwczovL2dpdGh1Yi5jb20vc3Vic3RhY2svYnJmcy9pc3N1ZXMvMjVcblxuXG4vKipcbiAqIEFuIFJHQiBTcGxpdCBGaWx0ZXIuXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLkFic3RyYWN0RmlsdGVyXG4gKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzXG4gKi9cbmZ1bmN0aW9uIFJHQlNwbGl0RmlsdGVyKClcbntcbiAgICBjb3JlLkFic3RyYWN0RmlsdGVyLmNhbGwodGhpcyxcbiAgICAgICAgLy8gdmVydGV4IHNoYWRlclxuICAgICAgICBudWxsLFxuICAgICAgICAvLyBmcmFnbWVudCBzaGFkZXJcbiAgICAgICAgXCJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcXG5cXG52YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDtcXG5cXG51bmlmb3JtIHNhbXBsZXIyRCB1U2FtcGxlcjtcXG51bmlmb3JtIHZlYzQgZGltZW5zaW9ucztcXG51bmlmb3JtIHZlYzIgcmVkO1xcbnVuaWZvcm0gdmVjMiBncmVlbjtcXG51bmlmb3JtIHZlYzIgYmx1ZTtcXG5cXG52b2lkIG1haW4odm9pZClcXG57XFxuICAgZ2xfRnJhZ0NvbG9yLnIgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZUZXh0dXJlQ29vcmQgKyByZWQvZGltZW5zaW9ucy54eSkucjtcXG4gICBnbF9GcmFnQ29sb3IuZyA9IHRleHR1cmUyRCh1U2FtcGxlciwgdlRleHR1cmVDb29yZCArIGdyZWVuL2RpbWVuc2lvbnMueHkpLmc7XFxuICAgZ2xfRnJhZ0NvbG9yLmIgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZUZXh0dXJlQ29vcmQgKyBibHVlL2RpbWVuc2lvbnMueHkpLmI7XFxuICAgZ2xfRnJhZ0NvbG9yLmEgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZUZXh0dXJlQ29vcmQpLmE7XFxufVxcblwiLFxuICAgICAgICAvLyBjdXN0b20gdW5pZm9ybXNcbiAgICAgICAge1xuICAgICAgICAgICAgcmVkOiAgICAgICAgeyB0eXBlOiAndjInLCB2YWx1ZTogeyB4OiAyMCwgeTogMjAgfSB9LFxuICAgICAgICAgICAgZ3JlZW46ICAgICAgeyB0eXBlOiAndjInLCB2YWx1ZTogeyB4OiAtMjAsIHk6IDIwIH0gfSxcbiAgICAgICAgICAgIGJsdWU6ICAgICAgIHsgdHlwZTogJ3YyJywgdmFsdWU6IHsgeDogMjAsIHk6IC0yMCB9IH0sXG4gICAgICAgICAgICBkaW1lbnNpb25zOiB7IHR5cGU6ICc0ZnYnLCB2YWx1ZTogWzAsIDAsIDAsIDBdIH1cbiAgICAgICAgfVxuICAgICk7XG59XG5cblJHQlNwbGl0RmlsdGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoY29yZS5BYnN0cmFjdEZpbHRlci5wcm90b3R5cGUpO1xuUkdCU3BsaXRGaWx0ZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gUkdCU3BsaXRGaWx0ZXI7XG5tb2R1bGUuZXhwb3J0cyA9IFJHQlNwbGl0RmlsdGVyO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhSR0JTcGxpdEZpbHRlci5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBSZWQgY2hhbm5lbCBvZmZzZXQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlBvaW50fVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuUkdCU3BsaXRGaWx0ZXIjXG4gICAgICovXG4gICAgcmVkOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudW5pZm9ybXMucmVkLnZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy5yZWQudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBHcmVlbiBjaGFubmVsIG9mZnNldC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuUG9pbnR9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5SR0JTcGxpdEZpbHRlciNcbiAgICAgKi9cbiAgICBncmVlbjoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVuaWZvcm1zLmdyZWVuLnZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy5ncmVlbi52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIEJsdWUgb2Zmc2V0LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5Qb2ludH1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLlJHQlNwbGl0RmlsdGVyI1xuICAgICAqL1xuICAgIGJsdWU6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy51bmlmb3Jtcy5ibHVlLnZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy5ibHVlLnZhbHVlID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG59KTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vLi4vY29yZScpO1xuLy8gQHNlZSBodHRwczovL2dpdGh1Yi5jb20vc3Vic3RhY2svYnJmcy9pc3N1ZXMvMjVcblxuXG4vKipcbiAqIFRoaXMgYXBwbGllcyBhIHNlcGlhIGVmZmVjdCB0byB5b3VyIERpc3BsYXkgT2JqZWN0cy5cbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQWJzdHJhY3RGaWx0ZXJcbiAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnNcbiAqL1xuZnVuY3Rpb24gU2VwaWFGaWx0ZXIoKVxue1xuICAgIGNvcmUuQWJzdHJhY3RGaWx0ZXIuY2FsbCh0aGlzLFxuICAgICAgICAvLyB2ZXJ0ZXggc2hhZGVyXG4gICAgICAgIG51bGwsXG4gICAgICAgIC8vIGZyYWdtZW50IHNoYWRlclxuICAgICAgICBcInByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xcblxcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xcblxcbnVuaWZvcm0gc2FtcGxlcjJEIHVTYW1wbGVyO1xcbnVuaWZvcm0gZmxvYXQgc2VwaWE7XFxuXFxuY29uc3QgbWF0MyBzZXBpYU1hdHJpeCA9IG1hdDMoMC4zNTg4LCAwLjcwNDQsIDAuMTM2OCwgMC4yOTkwLCAwLjU4NzAsIDAuMTE0MCwgMC4yMzkyLCAwLjQ2OTYsIDAuMDkxMik7XFxuXFxudm9pZCBtYWluKHZvaWQpXFxue1xcbiAgIGdsX0ZyYWdDb2xvciA9IHRleHR1cmUyRCh1U2FtcGxlciwgdlRleHR1cmVDb29yZCk7XFxuICAgZ2xfRnJhZ0NvbG9yLnJnYiA9IG1peCggZ2xfRnJhZ0NvbG9yLnJnYiwgZ2xfRnJhZ0NvbG9yLnJnYiAqIHNlcGlhTWF0cml4LCBzZXBpYSk7XFxufVxcblwiLFxuICAgICAgICAvLyBjdXN0b20gdW5pZm9ybXNcbiAgICAgICAge1xuICAgICAgICAgICAgc2VwaWE6IHsgdHlwZTogJzFmJywgdmFsdWU6IDEgfVxuICAgICAgICB9XG4gICAgKTtcbn1cblxuU2VwaWFGaWx0ZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShjb3JlLkFic3RyYWN0RmlsdGVyLnByb3RvdHlwZSk7XG5TZXBpYUZpbHRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBTZXBpYUZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gU2VwaWFGaWx0ZXI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKFNlcGlhRmlsdGVyLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFRoZSBzdHJlbmd0aCBvZiB0aGUgc2VwaWEuIGAxYCB3aWxsIGFwcGx5IHRoZSBmdWxsIHNlcGlhIGVmZmVjdCwgYW5kXG4gICAgICogYDBgIHdpbGwgbWFrZSB0aGUgb2JqZWN0IGl0cyBub3JtYWwgY29sb3IuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5TZXBpYUZpbHRlciNcbiAgICAgKi9cbiAgICBzZXBpYToge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVuaWZvcm1zLnNlcGlhLnZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy5zZXBpYS52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfVxufSk7XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uLy4uL2NvcmUnKTtcbi8vIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL3N1YnN0YWNrL2JyZnMvaXNzdWVzLzI1XG5cblxuLyoqXG4gKiBUaGUgQ29sb3JNYXRyaXhGaWx0ZXIgY2xhc3MgbGV0cyB5b3UgYXBwbHkgYSA0eDQgbWF0cml4IHRyYW5zZm9ybWF0aW9uIG9uIHRoZSBSR0JBXG4gKiBjb2xvciBhbmQgYWxwaGEgdmFsdWVzIG9mIGV2ZXJ5IHBpeGVsIG9uIHlvdXIgZGlzcGxheU9iamVjdCB0byBwcm9kdWNlIGEgcmVzdWx0XG4gKiB3aXRoIGEgbmV3IHNldCBvZiBSR0JBIGNvbG9yIGFuZCBhbHBoYSB2YWx1ZXMuIEl0J3MgcHJldHR5IHBvd2VyZnVsIVxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5BYnN0cmFjdEZpbHRlclxuICogQG1lbWJlcm9mIFBJWEkuZmlsdGVyc1xuICovXG5mdW5jdGlvbiBTaG9ja3dhdmVGaWx0ZXIoKVxue1xuICAgIGNvcmUuQWJzdHJhY3RGaWx0ZXIuY2FsbCh0aGlzLFxuICAgICAgICAvLyB2ZXJ0ZXggc2hhZGVyXG4gICAgICAgIG51bGwsXG4gICAgICAgIC8vIGZyYWdtZW50IHNoYWRlclxuICAgICAgICBcInByZWNpc2lvbiBsb3dwIGZsb2F0O1xcblxcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xcblxcbnVuaWZvcm0gc2FtcGxlcjJEIHVTYW1wbGVyO1xcblxcbnVuaWZvcm0gdmVjMiBjZW50ZXI7XFxudW5pZm9ybSB2ZWMzIHBhcmFtczsgLy8gMTAuMCwgMC44LCAwLjFcXG51bmlmb3JtIGZsb2F0IHRpbWU7XFxuXFxudm9pZCBtYWluKClcXG57XFxuICAgIHZlYzIgdXYgPSB2VGV4dHVyZUNvb3JkO1xcbiAgICB2ZWMyIHRleENvb3JkID0gdXY7XFxuXFxuICAgIGZsb2F0IGRpc3QgPSBkaXN0YW5jZSh1diwgY2VudGVyKTtcXG5cXG4gICAgaWYgKCAoZGlzdCA8PSAodGltZSArIHBhcmFtcy56KSkgJiYgKGRpc3QgPj0gKHRpbWUgLSBwYXJhbXMueikpIClcXG4gICAge1xcbiAgICAgICAgZmxvYXQgZGlmZiA9IChkaXN0IC0gdGltZSk7XFxuICAgICAgICBmbG9hdCBwb3dEaWZmID0gMS4wIC0gcG93KGFicyhkaWZmKnBhcmFtcy54KSwgcGFyYW1zLnkpO1xcblxcbiAgICAgICAgZmxvYXQgZGlmZlRpbWUgPSBkaWZmICAqIHBvd0RpZmY7XFxuICAgICAgICB2ZWMyIGRpZmZVViA9IG5vcm1hbGl6ZSh1diAtIGNlbnRlcik7XFxuICAgICAgICB0ZXhDb29yZCA9IHV2ICsgKGRpZmZVViAqIGRpZmZUaW1lKTtcXG4gICAgfVxcblxcbiAgICBnbF9GcmFnQ29sb3IgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHRleENvb3JkKTtcXG59XFxuXCIsXG4gICAgICAgIC8vIGN1c3RvbSB1bmlmb3Jtc1xuICAgICAgICB7XG4gICAgICAgICAgICBjZW50ZXI6IHsgdHlwZTogJ3YyJywgdmFsdWU6IHsgeDogMC41LCB5OiAwLjUgfSB9LFxuICAgICAgICAgICAgcGFyYW1zOiB7IHR5cGU6ICd2MycsIHZhbHVlOiB7IHg6IDEwLCB5OiAwLjgsIHo6IDAuMSB9IH0sXG4gICAgICAgICAgICB0aW1lOiB7IHR5cGU6ICcxZicsIHZhbHVlOiAwIH1cbiAgICAgICAgfVxuICAgICk7XG59XG5cblNob2Nrd2F2ZUZpbHRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuQWJzdHJhY3RGaWx0ZXIucHJvdG90eXBlKTtcblNob2Nrd2F2ZUZpbHRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBTaG9ja3dhdmVGaWx0ZXI7XG5tb2R1bGUuZXhwb3J0cyA9IFNob2Nrd2F2ZUZpbHRlcjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoU2hvY2t3YXZlRmlsdGVyLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIGNlbnRlciBvZiB0aGUgc2hvY2t3YXZlIGluIG5vcm1hbGl6ZWQgc2NyZWVuIGNvb3Jkcy4gVGhhdCBpc1xuICAgICAqICgwLDApIGlzIHRoZSB0b3AtbGVmdCBhbmQgKDEsMSkgaXMgdGhlIGJvdHRvbSByaWdodC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge29iamVjdDxzdHJpbmcsIG51bWJlcj59XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5TaG9ja3dhdmVGaWx0ZXIjXG4gICAgICovXG4gICAgY2VudGVyOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudW5pZm9ybXMuY2VudGVyLnZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy5jZW50ZXIudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgcGFyYW1zIG9mIHRoZSBzaG9ja3dhdmUuIFRoZXNlIG1vZGlmeSB0aGUgbG9vayBhbmQgYmVoYXZpb3Igb2ZcbiAgICAgKiB0aGUgc2hvY2t3YXZlIGFzIGl0IHJpcHBsZXMgb3V0LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7b2JqZWN0PHN0cmluZywgbnVtYmVyPn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLlNob2Nrd2F2ZUZpbHRlciNcbiAgICAgKi9cbiAgICBwYXJhbXM6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy51bmlmb3Jtcy5wYXJhbXMudmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLnBhcmFtcy52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfSxcbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBlbGFwc2VkIHRpbWUgb2YgdGhlIHNob2Nrd2F2ZS4gVGhpcyBjb250cm9scyB0aGUgc3BlZWQgYXQgd2hpY2hcbiAgICAgKiB0aGUgc2hvY2t3YXZlIHJpcHBsZXMgb3V0LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuU2hvY2t3YXZlRmlsdGVyI1xuICAgICAqL1xuICAgIHRpbWU6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy51bmlmb3Jtcy50aW1lLnZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy50aW1lLnZhbHVlID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG59KTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vLi4vY29yZScpO1xuLy8gQHNlZSBodHRwczovL2dpdGh1Yi5jb20vc3Vic3RhY2svYnJmcy9pc3N1ZXMvMjVcblxuXG4vKipcbiAqIEBhdXRob3IgVmljbyBAdmljb2NvdGVhXG4gKiBvcmlnaW5hbCBmaWx0ZXIgaHR0cHM6Ly9naXRodWIuY29tL2V2YW53L2dsZnguanMvYmxvYi9tYXN0ZXIvc3JjL2ZpbHRlcnMvYmx1ci90aWx0c2hpZnQuanMgYnkgRXZhbiBXYWxsYWNlIDogaHR0cDovL21hZGVieWV2YW4uY29tL1xuICovXG5cbi8qKlxuICogQSBUaWx0U2hpZnRBeGlzRmlsdGVyLlxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5BYnN0cmFjdEZpbHRlclxuICogQG1lbWJlcm9mIFBJWEkuZmlsdGVyc1xuICovXG5mdW5jdGlvbiBUaWx0U2hpZnRBeGlzRmlsdGVyKClcbntcbiAgICBjb3JlLkFic3RyYWN0RmlsdGVyLmNhbGwodGhpcyxcbiAgICAgICAgLy8gdmVydGV4IHNoYWRlclxuICAgICAgICBudWxsLFxuICAgICAgICAvLyBmcmFnbWVudCBzaGFkZXJcbiAgICAgICAgXCJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcXG5cXG52YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDtcXG5cXG51bmlmb3JtIHNhbXBsZXIyRCB1U2FtcGxlcjtcXG51bmlmb3JtIGZsb2F0IGJsdXI7XFxudW5pZm9ybSBmbG9hdCBncmFkaWVudEJsdXI7XFxudW5pZm9ybSB2ZWMyIHN0YXJ0O1xcbnVuaWZvcm0gdmVjMiBlbmQ7XFxudW5pZm9ybSB2ZWMyIGRlbHRhO1xcbnVuaWZvcm0gdmVjMiB0ZXhTaXplO1xcblxcbmZsb2F0IHJhbmRvbSh2ZWMzIHNjYWxlLCBmbG9hdCBzZWVkKVxcbntcXG4gICAgcmV0dXJuIGZyYWN0KHNpbihkb3QoZ2xfRnJhZ0Nvb3JkLnh5eiArIHNlZWQsIHNjYWxlKSkgKiA0Mzc1OC41NDUzICsgc2VlZCk7XFxufVxcblxcbnZvaWQgbWFpbih2b2lkKVxcbntcXG4gICAgdmVjNCBjb2xvciA9IHZlYzQoMC4wKTtcXG4gICAgZmxvYXQgdG90YWwgPSAwLjA7XFxuXFxuICAgIGZsb2F0IG9mZnNldCA9IHJhbmRvbSh2ZWMzKDEyLjk4OTgsIDc4LjIzMywgMTUxLjcxODIpLCAwLjApO1xcbiAgICB2ZWMyIG5vcm1hbCA9IG5vcm1hbGl6ZSh2ZWMyKHN0YXJ0LnkgLSBlbmQueSwgZW5kLnggLSBzdGFydC54KSk7XFxuICAgIGZsb2F0IHJhZGl1cyA9IHNtb290aHN0ZXAoMC4wLCAxLjAsIGFicyhkb3QodlRleHR1cmVDb29yZCAqIHRleFNpemUgLSBzdGFydCwgbm9ybWFsKSkgLyBncmFkaWVudEJsdXIpICogYmx1cjtcXG5cXG4gICAgZm9yIChmbG9hdCB0ID0gLTMwLjA7IHQgPD0gMzAuMDsgdCsrKVxcbiAgICB7XFxuICAgICAgICBmbG9hdCBwZXJjZW50ID0gKHQgKyBvZmZzZXQgLSAwLjUpIC8gMzAuMDtcXG4gICAgICAgIGZsb2F0IHdlaWdodCA9IDEuMCAtIGFicyhwZXJjZW50KTtcXG4gICAgICAgIHZlYzQgc2FtcGxlID0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2VGV4dHVyZUNvb3JkICsgZGVsdGEgLyB0ZXhTaXplICogcGVyY2VudCAqIHJhZGl1cyk7XFxuICAgICAgICBzYW1wbGUucmdiICo9IHNhbXBsZS5hO1xcbiAgICAgICAgY29sb3IgKz0gc2FtcGxlICogd2VpZ2h0O1xcbiAgICAgICAgdG90YWwgKz0gd2VpZ2h0O1xcbiAgICB9XFxuXFxuICAgIGdsX0ZyYWdDb2xvciA9IGNvbG9yIC8gdG90YWw7XFxuICAgIGdsX0ZyYWdDb2xvci5yZ2IgLz0gZ2xfRnJhZ0NvbG9yLmEgKyAwLjAwMDAxO1xcbn1cXG5cIixcbiAgICAgICAgLy8gY3VzdG9tIHVuaWZvcm1zXG4gICAgICAgIHtcbiAgICAgICAgICAgIGJsdXI6ICAgICAgICAgICB7IHR5cGU6ICcxZicsIHZhbHVlOiAxMDAgfSxcbiAgICAgICAgICAgIGdyYWRpZW50Qmx1cjogICB7IHR5cGU6ICcxZicsIHZhbHVlOiA2MDAgfSxcbiAgICAgICAgICAgIHN0YXJ0OiAgICAgICAgICB7IHR5cGU6ICd2MicsIHZhbHVlOiB7IHg6IDAsICAgIHk6IHdpbmRvdy5pbm5lckhlaWdodCAvIDIgfSB9LFxuICAgICAgICAgICAgZW5kOiAgICAgICAgICAgIHsgdHlwZTogJ3YyJywgdmFsdWU6IHsgeDogNjAwLCAgeTogd2luZG93LmlubmVySGVpZ2h0IC8gMiB9IH0sXG4gICAgICAgICAgICBkZWx0YTogICAgICAgICAgeyB0eXBlOiAndjInLCB2YWx1ZTogeyB4OiAzMCwgICB5OiAzMCB9IH0sXG4gICAgICAgICAgICB0ZXhTaXplOiAgICAgICAgeyB0eXBlOiAndjInLCB2YWx1ZTogeyB4OiB3aW5kb3cuaW5uZXJXaWR0aCwgeTogd2luZG93LmlubmVySGVpZ2h0IH0gfVxuICAgICAgICB9XG4gICAgKTtcblxuICAgIHRoaXMudXBkYXRlRGVsdGEoKTtcbn1cblxuVGlsdFNoaWZ0QXhpc0ZpbHRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuQWJzdHJhY3RGaWx0ZXIucHJvdG90eXBlKTtcblRpbHRTaGlmdEF4aXNGaWx0ZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gVGlsdFNoaWZ0QXhpc0ZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gVGlsdFNoaWZ0QXhpc0ZpbHRlcjtcblxuLyoqXG4gKiBVcGRhdGVzIHRoZSBmaWx0ZXIgZGVsdGEgdmFsdWVzLlxuICogVGhpcyBpcyBvdmVycmlkZGVuIGluIHRoZSBYIGFuZCBZIGZpbHRlcnMsIGRvZXMgbm90aGluZyBmb3IgdGhpcyBjbGFzcy5cbiAqXG4gKi9cblRpbHRTaGlmdEF4aXNGaWx0ZXIucHJvdG90eXBlLnVwZGF0ZURlbHRhID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLnVuaWZvcm1zLmRlbHRhLnZhbHVlLnggPSAwO1xuICAgIHRoaXMudW5pZm9ybXMuZGVsdGEudmFsdWUueSA9IDA7XG59O1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhUaWx0U2hpZnRBeGlzRmlsdGVyLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFRoZSBzdHJlbmd0aCBvZiB0aGUgYmx1ci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLlRpbHRTaGlmdEF4aXNGaWx0ZXIjXG4gICAgICovXG4gICAgYmx1cjoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVuaWZvcm1zLmJsdXIudmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLmJsdXIudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBUaGUgc3RyZW5ndGggb2YgdGhlIGdyYWRpZW50IGJsdXIuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5UaWx0U2hpZnRBeGlzRmlsdGVyI1xuICAgICAqL1xuICAgIGdyYWRpZW50Qmx1cjoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVuaWZvcm1zLmdyYWRpZW50Qmx1ci52YWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudW5pZm9ybXMuZ3JhZGllbnRCbHVyLnZhbHVlID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVGhlIFggdmFsdWUgdG8gc3RhcnQgdGhlIGVmZmVjdCBhdC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuUG9pbnR9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5UaWx0U2hpZnRBeGlzRmlsdGVyI1xuICAgICAqL1xuICAgIHN0YXJ0OiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudW5pZm9ybXMuc3RhcnQudmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLnN0YXJ0LnZhbHVlID0gdmFsdWU7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZURlbHRhKCk7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVGhlIFggdmFsdWUgdG8gZW5kIHRoZSBlZmZlY3QgYXQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlBvaW50fVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuVGlsdFNoaWZ0QXhpc0ZpbHRlciNcbiAgICAgKi9cbiAgICBlbmQ6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy51bmlmb3Jtcy5lbmQudmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLmVuZC52YWx1ZSA9IHZhbHVlO1xuICAgICAgICAgICAgdGhpcy51cGRhdGVEZWx0YSgpO1xuICAgICAgICB9XG4gICAgfVxufSk7XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uLy4uL2NvcmUnKSxcbiAgICBUaWx0U2hpZnRYRmlsdGVyID0gcmVxdWlyZSgnLi9UaWx0U2hpZnRYRmlsdGVyJyksXG4gICAgVGlsdFNoaWZ0WUZpbHRlciA9IHJlcXVpcmUoJy4vVGlsdFNoaWZ0WUZpbHRlcicpO1xuXG4vKipcbiAqIEBhdXRob3IgVmljbyBAdmljb2NvdGVhXG4gKiBvcmlnaW5hbCBmaWx0ZXIgaHR0cHM6Ly9naXRodWIuY29tL2V2YW53L2dsZnguanMvYmxvYi9tYXN0ZXIvc3JjL2ZpbHRlcnMvYmx1ci90aWx0c2hpZnQuanMgYnkgRXZhbiBXYWxsYWNlIDogaHR0cDovL21hZGVieWV2YW4uY29tL1xuICovXG5cbi8qKlxuICogQSBUaWx0U2hpZnQgRmlsdGVyLiBNYW5hZ2VzIHRoZSBwYXNzIG9mIGJvdGggYSBUaWx0U2hpZnRYRmlsdGVyIGFuZCBUaWx0U2hpZnRZRmlsdGVyLlxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5BYnN0cmFjdEZpbHRlclxuICogQG1lbWJlcm9mIFBJWEkuZmlsdGVyc1xuICovXG5mdW5jdGlvbiBUaWx0U2hpZnRGaWx0ZXIoKVxue1xuICAgIGNvcmUuQWJzdHJhY3RGaWx0ZXIuY2FsbCh0aGlzKTtcblxuICAgIHRoaXMudGlsdFNoaWZ0WEZpbHRlciA9IG5ldyBUaWx0U2hpZnRYRmlsdGVyKCk7XG4gICAgdGhpcy50aWx0U2hpZnRZRmlsdGVyID0gbmV3IFRpbHRTaGlmdFlGaWx0ZXIoKTtcbn1cblxuVGlsdFNoaWZ0RmlsdGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoY29yZS5BYnN0cmFjdEZpbHRlci5wcm90b3R5cGUpO1xuVGlsdFNoaWZ0RmlsdGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFRpbHRTaGlmdEZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gVGlsdFNoaWZ0RmlsdGVyO1xuXG5UaWx0U2hpZnRGaWx0ZXIucHJvdG90eXBlLmFwcGx5RmlsdGVyID0gZnVuY3Rpb24gKHJlbmRlcmVyLCBpbnB1dCwgb3V0cHV0KVxue1xuICAgIHZhciByZW5kZXJUYXJnZXQgPSByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLmdldFJlbmRlclRhcmdldCh0cnVlKTtcblxuICAgIHRoaXMudGlsdFNoaWZ0WEZpbHRlci5hcHBseUZpbHRlcihyZW5kZXJlciwgaW5wdXQsIHJlbmRlclRhcmdldCk7XG5cbiAgICB0aGlzLnRpbHRTaGlmdFlGaWx0ZXIuYXBwbHlGaWx0ZXIocmVuZGVyZXIsIHJlbmRlclRhcmdldCwgb3V0cHV0KTtcblxuICAgIHJlbmRlcmVyLmZpbHRlck1hbmFnZXIucmV0dXJuUmVuZGVyVGFyZ2V0KHJlbmRlclRhcmdldCk7XG59O1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhUaWx0U2hpZnRGaWx0ZXIucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogVGhlIHN0cmVuZ3RoIG9mIHRoZSBibHVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuVGlsdFNoaWZ0RmlsdGVyI1xuICAgICAqL1xuICAgIGJsdXI6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy50aWx0U2hpZnRYRmlsdGVyLmJsdXI7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnRpbHRTaGlmdFhGaWx0ZXIuYmx1ciA9IHRoaXMudGlsdFNoaWZ0WUZpbHRlci5ibHVyID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVGhlIHN0cmVuZ3RoIG9mIHRoZSBncmFkaWVudCBibHVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuVGlsdFNoaWZ0RmlsdGVyI1xuICAgICAqL1xuICAgIGdyYWRpZW50Qmx1cjoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnRpbHRTaGlmdFhGaWx0ZXIuZ3JhZGllbnRCbHVyO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy50aWx0U2hpZnRYRmlsdGVyLmdyYWRpZW50Qmx1ciA9IHRoaXMudGlsdFNoaWZ0WUZpbHRlci5ncmFkaWVudEJsdXIgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBUaGUgWSB2YWx1ZSB0byBzdGFydCB0aGUgZWZmZWN0IGF0LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuVGlsdFNoaWZ0RmlsdGVyI1xuICAgICAqL1xuICAgIHN0YXJ0OiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudGlsdFNoaWZ0WEZpbHRlci5zdGFydDtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudGlsdFNoaWZ0WEZpbHRlci5zdGFydCA9IHRoaXMudGlsdFNoaWZ0WUZpbHRlci5zdGFydCA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFRoZSBZIHZhbHVlIHRvIGVuZCB0aGUgZWZmZWN0IGF0LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuVGlsdFNoaWZ0RmlsdGVyI1xuICAgICAqL1xuICAgIGVuZDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnRpbHRTaGlmdFhGaWx0ZXIuZW5kO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy50aWx0U2hpZnRYRmlsdGVyLmVuZCA9IHRoaXMudGlsdFNoaWZ0WUZpbHRlci5lbmQgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuIiwidmFyIFRpbHRTaGlmdEF4aXNGaWx0ZXIgPSByZXF1aXJlKCcuL1RpbHRTaGlmdEF4aXNGaWx0ZXInKTtcblxuLyoqXG4gKiBAYXV0aG9yIFZpY28gQHZpY29jb3RlYVxuICogb3JpZ2luYWwgZmlsdGVyIGh0dHBzOi8vZ2l0aHViLmNvbS9ldmFudy9nbGZ4LmpzL2Jsb2IvbWFzdGVyL3NyYy9maWx0ZXJzL2JsdXIvdGlsdHNoaWZ0LmpzIGJ5IEV2YW4gV2FsbGFjZSA6IGh0dHA6Ly9tYWRlYnlldmFuLmNvbS9cbiAqL1xuXG4vKipcbiAqIEEgVGlsdFNoaWZ0WEZpbHRlci5cbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuVGlsdFNoaWZ0QXhpc0ZpbHRlclxuICogQG1lbWJlcm9mIFBJWEkuZmlsdGVyc1xuICovXG5mdW5jdGlvbiBUaWx0U2hpZnRYRmlsdGVyKClcbntcbiAgICBUaWx0U2hpZnRBeGlzRmlsdGVyLmNhbGwodGhpcyk7XG59XG5cblRpbHRTaGlmdFhGaWx0ZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShUaWx0U2hpZnRBeGlzRmlsdGVyLnByb3RvdHlwZSk7XG5UaWx0U2hpZnRYRmlsdGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFRpbHRTaGlmdFhGaWx0ZXI7XG5tb2R1bGUuZXhwb3J0cyA9IFRpbHRTaGlmdFhGaWx0ZXI7XG5cbi8qKlxuICogVXBkYXRlcyB0aGUgZmlsdGVyIGRlbHRhIHZhbHVlcy5cbiAqXG4gKi9cblRpbHRTaGlmdFhGaWx0ZXIucHJvdG90eXBlLnVwZGF0ZURlbHRhID0gZnVuY3Rpb24gKClcbntcbiAgICB2YXIgZHggPSB0aGlzLnVuaWZvcm1zLmVuZC52YWx1ZS54IC0gdGhpcy51bmlmb3Jtcy5zdGFydC52YWx1ZS54O1xuICAgIHZhciBkeSA9IHRoaXMudW5pZm9ybXMuZW5kLnZhbHVlLnkgLSB0aGlzLnVuaWZvcm1zLnN0YXJ0LnZhbHVlLnk7XG4gICAgdmFyIGQgPSBNYXRoLnNxcnQoZHggKiBkeCArIGR5ICogZHkpO1xuXG4gICAgdGhpcy51bmlmb3Jtcy5kZWx0YS52YWx1ZS54ID0gZHggLyBkO1xuICAgIHRoaXMudW5pZm9ybXMuZGVsdGEudmFsdWUueSA9IGR5IC8gZDtcbn07XG4iLCJ2YXIgVGlsdFNoaWZ0QXhpc0ZpbHRlciA9IHJlcXVpcmUoJy4vVGlsdFNoaWZ0QXhpc0ZpbHRlcicpO1xuXG4vKipcbiAqIEBhdXRob3IgVmljbyBAdmljb2NvdGVhXG4gKiBvcmlnaW5hbCBmaWx0ZXIgaHR0cHM6Ly9naXRodWIuY29tL2V2YW53L2dsZnguanMvYmxvYi9tYXN0ZXIvc3JjL2ZpbHRlcnMvYmx1ci90aWx0c2hpZnQuanMgYnkgRXZhbiBXYWxsYWNlIDogaHR0cDovL21hZGVieWV2YW4uY29tL1xuICovXG5cbi8qKlxuICogQSBUaWx0U2hpZnRZRmlsdGVyLlxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5UaWx0U2hpZnRBeGlzRmlsdGVyXG4gKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzXG4gKi9cbmZ1bmN0aW9uIFRpbHRTaGlmdFlGaWx0ZXIoKVxue1xuICAgIFRpbHRTaGlmdEF4aXNGaWx0ZXIuY2FsbCh0aGlzKTtcbn1cblxuVGlsdFNoaWZ0WUZpbHRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFRpbHRTaGlmdEF4aXNGaWx0ZXIucHJvdG90eXBlKTtcblRpbHRTaGlmdFlGaWx0ZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gVGlsdFNoaWZ0WUZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gVGlsdFNoaWZ0WUZpbHRlcjtcblxuLyoqXG4gKiBVcGRhdGVzIHRoZSBmaWx0ZXIgZGVsdGEgdmFsdWVzLlxuICpcbiAqL1xuVGlsdFNoaWZ0WUZpbHRlci5wcm90b3R5cGUudXBkYXRlRGVsdGEgPSBmdW5jdGlvbiAoKVxue1xuICAgIHZhciBkeCA9IHRoaXMudW5pZm9ybXMuZW5kLnZhbHVlLnggLSB0aGlzLnVuaWZvcm1zLnN0YXJ0LnZhbHVlLng7XG4gICAgdmFyIGR5ID0gdGhpcy51bmlmb3Jtcy5lbmQudmFsdWUueSAtIHRoaXMudW5pZm9ybXMuc3RhcnQudmFsdWUueTtcbiAgICB2YXIgZCA9IE1hdGguc3FydChkeCAqIGR4ICsgZHkgKiBkeSk7XG5cbiAgICB0aGlzLnVuaWZvcm1zLmRlbHRhLnZhbHVlLnggPSAtZHkgLyBkO1xuICAgIHRoaXMudW5pZm9ybXMuZGVsdGEudmFsdWUueSA9IGR4IC8gZDtcbn07XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uLy4uL2NvcmUnKTtcbi8vIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL3N1YnN0YWNrL2JyZnMvaXNzdWVzLzI1XG5cblxuLyoqXG4gKiBUaGlzIGZpbHRlciBhcHBsaWVzIGEgdHdpc3QgZWZmZWN0IG1ha2luZyBkaXNwbGF5IG9iamVjdHMgYXBwZWFyIHR3aXN0ZWQgaW4gdGhlIGdpdmVuIGRpcmVjdGlvbi5cbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQWJzdHJhY3RGaWx0ZXJcbiAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnNcbiAqL1xuZnVuY3Rpb24gVHdpc3RGaWx0ZXIoKVxue1xuICAgIGNvcmUuQWJzdHJhY3RGaWx0ZXIuY2FsbCh0aGlzLFxuICAgICAgICAvLyB2ZXJ0ZXggc2hhZGVyXG4gICAgICAgIG51bGwsXG4gICAgICAgIC8vIGZyYWdtZW50IHNoYWRlclxuICAgICAgICBcInByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xcblxcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xcblxcbnVuaWZvcm0gc2FtcGxlcjJEIHVTYW1wbGVyO1xcbnVuaWZvcm0gZmxvYXQgcmFkaXVzO1xcbnVuaWZvcm0gZmxvYXQgYW5nbGU7XFxudW5pZm9ybSB2ZWMyIG9mZnNldDtcXG5cXG52b2lkIG1haW4odm9pZClcXG57XFxuICAgdmVjMiBjb29yZCA9IHZUZXh0dXJlQ29vcmQgLSBvZmZzZXQ7XFxuICAgZmxvYXQgZGlzdCA9IGxlbmd0aChjb29yZCk7XFxuXFxuICAgaWYgKGRpc3QgPCByYWRpdXMpXFxuICAge1xcbiAgICAgICBmbG9hdCByYXRpbyA9IChyYWRpdXMgLSBkaXN0KSAvIHJhZGl1cztcXG4gICAgICAgZmxvYXQgYW5nbGVNb2QgPSByYXRpbyAqIHJhdGlvICogYW5nbGU7XFxuICAgICAgIGZsb2F0IHMgPSBzaW4oYW5nbGVNb2QpO1xcbiAgICAgICBmbG9hdCBjID0gY29zKGFuZ2xlTW9kKTtcXG4gICAgICAgY29vcmQgPSB2ZWMyKGNvb3JkLnggKiBjIC0gY29vcmQueSAqIHMsIGNvb3JkLnggKiBzICsgY29vcmQueSAqIGMpO1xcbiAgIH1cXG5cXG4gICBnbF9GcmFnQ29sb3IgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIGNvb3JkK29mZnNldCk7XFxufVxcblwiLFxuICAgICAgICAvLyBjdXN0b20gdW5pZm9ybXNcbiAgICAgICAge1xuICAgICAgICAgICAgcmFkaXVzOiAgICAgeyB0eXBlOiAnMWYnLCB2YWx1ZTogMC41IH0sXG4gICAgICAgICAgICBhbmdsZTogICAgICB7IHR5cGU6ICcxZicsIHZhbHVlOiA1IH0sXG4gICAgICAgICAgICBvZmZzZXQ6ICAgICB7IHR5cGU6ICd2MicsIHZhbHVlOiB7IHg6IDAuNSwgeTogMC41IH0gfVxuICAgICAgICB9XG4gICAgKTtcbn1cblxuVHdpc3RGaWx0ZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShjb3JlLkFic3RyYWN0RmlsdGVyLnByb3RvdHlwZSk7XG5Ud2lzdEZpbHRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBUd2lzdEZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gVHdpc3RGaWx0ZXI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKFR3aXN0RmlsdGVyLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFRoaXMgcG9pbnQgZGVzY3JpYmVzIHRoZSB0aGUgb2Zmc2V0IG9mIHRoZSB0d2lzdC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuUG9pbnR9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5Ud2lzdEZpbHRlciNcbiAgICAgKi9cbiAgICBvZmZzZXQ6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy51bmlmb3Jtcy5vZmZzZXQudmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLm9mZnNldC52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFRoaXMgcmFkaXVzIG9mIHRoZSB0d2lzdC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLlR3aXN0RmlsdGVyI1xuICAgICAqL1xuICAgIHJhZGl1czoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVuaWZvcm1zLnJhZGl1cy52YWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudW5pZm9ybXMucmFkaXVzLnZhbHVlID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVGhpcyBhbmdsZSBvZiB0aGUgdHdpc3QuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5Ud2lzdEZpbHRlciNcbiAgICAgKi9cbiAgICBhbmdsZToge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVuaWZvcm1zLmFuZ2xlLnZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy5hbmdsZS52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfVxufSk7XG4iLCIvLyBydW4gdGhlIHBvbHlmaWxsc1xucmVxdWlyZSgnLi9wb2x5ZmlsbCcpO1xuXG52YXIgY29yZSA9IG1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9jb3JlJyk7XG5cbi8vIGFkZCBjb3JlIHBsdWdpbnMuXG5jb3JlLmV4dHJhcyAgICAgICAgID0gcmVxdWlyZSgnLi9leHRyYXMnKTtcbmNvcmUuZmlsdGVycyAgICAgICAgPSByZXF1aXJlKCcuL2ZpbHRlcnMnKTtcbmNvcmUuaW50ZXJhY3Rpb24gICAgPSByZXF1aXJlKCcuL2ludGVyYWN0aW9uJyk7XG5jb3JlLmxvYWRlcnMgICAgICAgID0gcmVxdWlyZSgnLi9sb2FkZXJzJyk7XG5jb3JlLm1lc2ggICAgICAgICAgID0gcmVxdWlyZSgnLi9tZXNoJyk7XG5jb3JlLmFjY2Vzc2liaWxpdHkgID0gcmVxdWlyZSgnLi9hY2Nlc3NpYmlsaXR5Jyk7XG5cbi8vIGV4cG9ydCBhIHByZW1hZGUgbG9hZGVyIGluc3RhbmNlXG4vKipcbiAqIEEgcHJlbWFkZSBpbnN0YW5jZSBvZiB0aGUgbG9hZGVyIHRoYXQgY2FuIGJlIHVzZWQgdG8gbG9hZGVyIHJlc291cmNlcy5cbiAqXG4gKiBAbmFtZSBsb2FkZXJcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcHJvcGVydHkge1BJWEkubG9hZGVycy5Mb2FkZXJ9XG4gKi9cbmNvcmUubG9hZGVyID0gbmV3IGNvcmUubG9hZGVycy5Mb2FkZXIoKTtcblxuLy8gbWl4aW4gdGhlIGRlcHJlY2F0aW9uIGZlYXR1cmVzLlxuT2JqZWN0LmFzc2lnbihjb3JlLCByZXF1aXJlKCcuL2RlcHJlY2F0aW9uJykpO1xuXG4vLyBBbHdheXMgZXhwb3J0IHBpeGkgZ2xvYmFsbHkuXG5nbG9iYWwuUElYSSA9IGNvcmU7XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uL2NvcmUnKTtcblxuLyoqXG4gKiBIb2xkcyBhbGwgaW5mb3JtYXRpb24gcmVsYXRlZCB0byBhbiBJbnRlcmFjdGlvbiBldmVudFxuICpcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWEkuaW50ZXJhY3Rpb25cbiAqL1xuZnVuY3Rpb24gSW50ZXJhY3Rpb25EYXRhKClcbntcbiAgICAvKipcbiAgICAgKiBUaGlzIHBvaW50IHN0b3JlcyB0aGUgZ2xvYmFsIGNvb3JkcyBvZiB3aGVyZSB0aGUgdG91Y2gvbW91c2UgZXZlbnQgaGFwcGVuZWRcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuUG9pbnR9XG4gICAgICovXG4gICAgdGhpcy5nbG9iYWwgPSBuZXcgY29yZS5Qb2ludCgpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHRhcmdldCBTcHJpdGUgdGhhdCB3YXMgaW50ZXJhY3RlZCB3aXRoXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlNwcml0ZX1cbiAgICAgKi9cbiAgICB0aGlzLnRhcmdldCA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBXaGVuIHBhc3NlZCB0byBhbiBldmVudCBoYW5kbGVyLCB0aGlzIHdpbGwgYmUgdGhlIG9yaWdpbmFsIERPTSBFdmVudCB0aGF0IHdhcyBjYXB0dXJlZFxuICAgICAqXG4gICAgICogQG1lbWJlciB7RXZlbnR9XG4gICAgICovXG4gICAgdGhpcy5vcmlnaW5hbEV2ZW50ID0gbnVsbDtcbn1cblxuSW50ZXJhY3Rpb25EYXRhLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IEludGVyYWN0aW9uRGF0YTtcbm1vZHVsZS5leHBvcnRzID0gSW50ZXJhY3Rpb25EYXRhO1xuXG4vKipcbiAqIFRoaXMgd2lsbCByZXR1cm4gdGhlIGxvY2FsIGNvb3JkaW5hdGVzIG9mIHRoZSBzcGVjaWZpZWQgZGlzcGxheU9iamVjdCBmb3IgdGhpcyBJbnRlcmFjdGlvbkRhdGFcbiAqXG4gKiBAcGFyYW0gZGlzcGxheU9iamVjdCB7UElYSS5EaXNwbGF5T2JqZWN0fSBUaGUgRGlzcGxheU9iamVjdCB0aGF0IHlvdSB3b3VsZCBsaWtlIHRoZSBsb2NhbCBjb29yZHMgb2ZmXG4gKiBAcGFyYW0gW3BvaW50XSB7UElYSS5Qb2ludH0gQSBQb2ludCBvYmplY3QgaW4gd2hpY2ggdG8gc3RvcmUgdGhlIHZhbHVlLCBvcHRpb25hbCAob3RoZXJ3aXNlIHdpbGwgY3JlYXRlIGEgbmV3IHBvaW50KVxuICogQHBhcmFtIFtnbG9iYWxQb3NdIHtQSVhJLlBvaW50fSBBIFBvaW50IG9iamVjdCBjb250YWluaW5nIHlvdXIgY3VzdG9tIGdsb2JhbCBjb29yZHMsIG9wdGlvbmFsIChvdGhlcndpc2Ugd2lsbCB1c2UgdGhlIGN1cnJlbnQgZ2xvYmFsIGNvb3JkcylcbiAqIEByZXR1cm4ge1BJWEkuUG9pbnR9IEEgcG9pbnQgY29udGFpbmluZyB0aGUgY29vcmRpbmF0ZXMgb2YgdGhlIEludGVyYWN0aW9uRGF0YSBwb3NpdGlvbiByZWxhdGl2ZSB0byB0aGUgRGlzcGxheU9iamVjdFxuICovXG5JbnRlcmFjdGlvbkRhdGEucHJvdG90eXBlLmdldExvY2FsUG9zaXRpb24gPSBmdW5jdGlvbiAoZGlzcGxheU9iamVjdCwgcG9pbnQsIGdsb2JhbFBvcylcbntcbiAgICByZXR1cm4gZGlzcGxheU9iamVjdC53b3JsZFRyYW5zZm9ybS5hcHBseUludmVyc2UoZ2xvYmFsUG9zIHx8IHRoaXMuZ2xvYmFsLCBwb2ludCk7XG59O1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi9jb3JlJyksXG4gICAgSW50ZXJhY3Rpb25EYXRhID0gcmVxdWlyZSgnLi9JbnRlcmFjdGlvbkRhdGEnKTtcblxuLy8gTWl4IGludGVyYWN0aXZlVGFyZ2V0IGludG8gY29yZS5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZVxuT2JqZWN0LmFzc2lnbihcbiAgICBjb3JlLkRpc3BsYXlPYmplY3QucHJvdG90eXBlLFxuICAgIHJlcXVpcmUoJy4vaW50ZXJhY3RpdmVUYXJnZXQnKVxuKTtcblxuLyoqXG4gKiBUaGUgaW50ZXJhY3Rpb24gbWFuYWdlciBkZWFscyB3aXRoIG1vdXNlIGFuZCB0b3VjaCBldmVudHMuIEFueSBEaXNwbGF5T2JqZWN0IGNhbiBiZSBpbnRlcmFjdGl2ZVxuICogaWYgaXRzIGludGVyYWN0aXZlIHBhcmFtZXRlciBpcyBzZXQgdG8gdHJ1ZVxuICogVGhpcyBtYW5hZ2VyIGFsc28gc3VwcG9ydHMgbXVsdGl0b3VjaC5cbiAqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJLmludGVyYWN0aW9uXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuQ2FudmFzUmVuZGVyZXJ8UElYSS5XZWJHTFJlbmRlcmVyfSBBIHJlZmVyZW5jZSB0byB0aGUgY3VycmVudCByZW5kZXJlclxuICogQHBhcmFtIFtvcHRpb25zXSB7b2JqZWN0fVxuICogQHBhcmFtIFtvcHRpb25zLmF1dG9QcmV2ZW50RGVmYXVsdD10cnVlXSB7Ym9vbGVhbn0gU2hvdWxkIHRoZSBtYW5hZ2VyIGF1dG9tYXRpY2FsbHkgcHJldmVudCBkZWZhdWx0IGJyb3dzZXIgYWN0aW9ucy5cbiAqIEBwYXJhbSBbb3B0aW9ucy5pbnRlcmFjdGlvbkZyZXF1ZW5jeT0xMF0ge251bWJlcn0gRnJlcXVlbmN5IGluY3JlYXNlcyB0aGUgaW50ZXJhY3Rpb24gZXZlbnRzIHdpbGwgYmUgY2hlY2tlZC5cbiAqL1xuZnVuY3Rpb24gSW50ZXJhY3Rpb25NYW5hZ2VyKHJlbmRlcmVyLCBvcHRpb25zKVxue1xuICAgIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuXG4gICAgLyoqXG4gICAgICogVGhlIHJlbmRlcmVyIHRoaXMgaW50ZXJhY3Rpb24gbWFuYWdlciB3b3JrcyBmb3IuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlN5c3RlbVJlbmRlcmVyfVxuICAgICAqL1xuICAgIHRoaXMucmVuZGVyZXIgPSByZW5kZXJlcjtcblxuICAgIC8qKlxuICAgICAqIFNob3VsZCBkZWZhdWx0IGJyb3dzZXIgYWN0aW9ucyBhdXRvbWF0aWNhbGx5IGJlIHByZXZlbnRlZC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICogQGRlZmF1bHQgdHJ1ZVxuICAgICAqL1xuICAgIHRoaXMuYXV0b1ByZXZlbnREZWZhdWx0ID0gb3B0aW9ucy5hdXRvUHJldmVudERlZmF1bHQgIT09IHVuZGVmaW5lZCA/IG9wdGlvbnMuYXV0b1ByZXZlbnREZWZhdWx0IDogdHJ1ZTtcblxuICAgIC8qKlxuICAgICAqIEFzIHRoaXMgZnJlcXVlbmN5IGluY3JlYXNlcyB0aGUgaW50ZXJhY3Rpb24gZXZlbnRzIHdpbGwgYmUgY2hlY2tlZCBtb3JlIG9mdGVuLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDEwXG4gICAgICovXG4gICAgdGhpcy5pbnRlcmFjdGlvbkZyZXF1ZW5jeSA9IG9wdGlvbnMuaW50ZXJhY3Rpb25GcmVxdWVuY3kgfHwgMTA7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgbW91c2UgZGF0YVxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5pbnRlcmFjdGlvbi5JbnRlcmFjdGlvbkRhdGF9XG4gICAgICovXG4gICAgdGhpcy5tb3VzZSA9IG5ldyBJbnRlcmFjdGlvbkRhdGEoKTtcblxuICAgIC8qKlxuICAgICAqIEFuIGV2ZW50IGRhdGEgb2JqZWN0IHRvIGhhbmRsZSBhbGwgdGhlIGV2ZW50IHRyYWNraW5nL2Rpc3BhdGNoaW5nXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtvYmplY3R9XG4gICAgICovXG4gICAgdGhpcy5ldmVudERhdGEgPSB7XG4gICAgICAgIHN0b3BwZWQ6IGZhbHNlLFxuICAgICAgICB0YXJnZXQ6IG51bGwsXG4gICAgICAgIHR5cGU6IG51bGwsXG4gICAgICAgIGRhdGE6IHRoaXMubW91c2UsXG4gICAgICAgIHN0b3BQcm9wYWdhdGlvbjpmdW5jdGlvbigpe1xuICAgICAgICAgICAgdGhpcy5zdG9wcGVkID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH07XG5cbiAgICAvKipcbiAgICAgKiBUaW55IGxpdHRsZSBpbnRlcmFjdGl2ZURhdGEgcG9vbCAhXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLmludGVyYWN0aW9uLkludGVyYWN0aW9uRGF0YVtdfVxuICAgICAqL1xuICAgIHRoaXMuaW50ZXJhY3RpdmVEYXRhUG9vbCA9IFtdO1xuXG4gICAgLyoqXG4gICAgICogVGhlIERPTSBlbGVtZW50IHRvIGJpbmQgdG8uXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtIVE1MRWxlbWVudH1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuaW50ZXJhY3Rpb25ET01FbGVtZW50ID0gbnVsbDtcblxuICAgIC8qKlxuICAgICAqIEhhdmUgZXZlbnRzIGJlZW4gYXR0YWNoZWQgdG8gdGhlIGRvbSBlbGVtZW50P1xuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuZXZlbnRzQWRkZWQgPSBmYWxzZTtcblxuICAgIC8vdGhpcyB3aWxsIG1ha2UgaXQgc28gdGhhdCB5b3UgZG9uJ3QgaGF2ZSB0byBjYWxsIGJpbmQgYWxsIHRoZSB0aW1lXG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtGdW5jdGlvbn1cbiAgICAgKi9cbiAgICB0aGlzLm9uTW91c2VVcCA9IHRoaXMub25Nb3VzZVVwLmJpbmQodGhpcyk7XG4gICAgdGhpcy5wcm9jZXNzTW91c2VVcCA9IHRoaXMucHJvY2Vzc01vdXNlVXAuYmluZCggdGhpcyApO1xuXG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtGdW5jdGlvbn1cbiAgICAgKi9cbiAgICB0aGlzLm9uTW91c2VEb3duID0gdGhpcy5vbk1vdXNlRG93bi5iaW5kKHRoaXMpO1xuICAgIHRoaXMucHJvY2Vzc01vdXNlRG93biA9IHRoaXMucHJvY2Vzc01vdXNlRG93bi5iaW5kKCB0aGlzICk7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtGdW5jdGlvbn1cbiAgICAgKi9cbiAgICB0aGlzLm9uTW91c2VNb3ZlID0gdGhpcy5vbk1vdXNlTW92ZS5iaW5kKCB0aGlzICk7XG4gICAgdGhpcy5wcm9jZXNzTW91c2VNb3ZlID0gdGhpcy5wcm9jZXNzTW91c2VNb3ZlLmJpbmQoIHRoaXMgKTtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge0Z1bmN0aW9ufVxuICAgICAqL1xuICAgIHRoaXMub25Nb3VzZU91dCA9IHRoaXMub25Nb3VzZU91dC5iaW5kKHRoaXMpO1xuICAgIHRoaXMucHJvY2Vzc01vdXNlT3Zlck91dCA9IHRoaXMucHJvY2Vzc01vdXNlT3Zlck91dC5iaW5kKCB0aGlzICk7XG5cblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge0Z1bmN0aW9ufVxuICAgICAqL1xuICAgIHRoaXMub25Ub3VjaFN0YXJ0ID0gdGhpcy5vblRvdWNoU3RhcnQuYmluZCh0aGlzKTtcbiAgICB0aGlzLnByb2Nlc3NUb3VjaFN0YXJ0ID0gdGhpcy5wcm9jZXNzVG91Y2hTdGFydC5iaW5kKHRoaXMpO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7RnVuY3Rpb259XG4gICAgICovXG4gICAgdGhpcy5vblRvdWNoRW5kID0gdGhpcy5vblRvdWNoRW5kLmJpbmQodGhpcyk7XG4gICAgdGhpcy5wcm9jZXNzVG91Y2hFbmQgPSB0aGlzLnByb2Nlc3NUb3VjaEVuZC5iaW5kKHRoaXMpO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7RnVuY3Rpb259XG4gICAgICovXG4gICAgdGhpcy5vblRvdWNoTW92ZSA9IHRoaXMub25Ub3VjaE1vdmUuYmluZCh0aGlzKTtcbiAgICB0aGlzLnByb2Nlc3NUb3VjaE1vdmUgPSB0aGlzLnByb2Nlc3NUb3VjaE1vdmUuYmluZCh0aGlzKTtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLmxhc3QgPSAwO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGNzcyBzdHlsZSBvZiB0aGUgY3Vyc29yIHRoYXQgaXMgYmVpbmcgdXNlZFxuICAgICAqIEBtZW1iZXIge3N0cmluZ31cbiAgICAgKi9cbiAgICB0aGlzLmN1cnJlbnRDdXJzb3JTdHlsZSA9ICdpbmhlcml0JztcblxuICAgIC8qKlxuICAgICAqIEludGVybmFsIGNhY2hlZCB2YXJcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlBvaW50fVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fdGVtcFBvaW50ID0gbmV3IGNvcmUuUG9pbnQoKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBjdXJyZW50IHJlc29sdXRpb25cbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy5yZXNvbHV0aW9uID0gMTtcblxuICAgIHRoaXMuc2V0VGFyZ2V0RWxlbWVudCh0aGlzLnJlbmRlcmVyLnZpZXcsIHRoaXMucmVuZGVyZXIucmVzb2x1dGlvbik7XG59XG5cbkludGVyYWN0aW9uTWFuYWdlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBJbnRlcmFjdGlvbk1hbmFnZXI7XG5tb2R1bGUuZXhwb3J0cyA9IEludGVyYWN0aW9uTWFuYWdlcjtcblxuLyoqXG4gKiBTZXRzIHRoZSBET00gZWxlbWVudCB3aGljaCB3aWxsIHJlY2VpdmUgbW91c2UvdG91Y2ggZXZlbnRzLiBUaGlzIGlzIHVzZWZ1bCBmb3Igd2hlbiB5b3UgaGF2ZVxuICogb3RoZXIgRE9NIGVsZW1lbnRzIG9uIHRvcCBvZiB0aGUgcmVuZGVyZXJzIENhbnZhcyBlbGVtZW50LiBXaXRoIHRoaXMgeW91J2xsIGJlIGJhbGUgdG8gZGVsZXRlZ2F0ZVxuICogYW5vdGhlciBET00gZWxlbWVudCB0byByZWNlaXZlIHRob3NlIGV2ZW50cy5cbiAqXG4gKiBAcGFyYW0gZWxlbWVudCB7SFRNTEVsZW1lbnR9IHRoZSBET00gZWxlbWVudCB3aGljaCB3aWxsIHJlY2VpdmUgbW91c2UgYW5kIHRvdWNoIGV2ZW50cy5cbiAqIEBwYXJhbSBbcmVzb2x1dGlvbj0xXSB7bnVtYmVyfSBUSGUgcmVzb2x1dGlvbiBvZiB0aGUgbmV3IGVsZW1lbnQgKHJlbGF0aXZlIHRvIHRoZSBjYW52YXMpLlxuICogQHByaXZhdGVcbiAqL1xuSW50ZXJhY3Rpb25NYW5hZ2VyLnByb3RvdHlwZS5zZXRUYXJnZXRFbGVtZW50ID0gZnVuY3Rpb24gKGVsZW1lbnQsIHJlc29sdXRpb24pXG57XG4gICAgdGhpcy5yZW1vdmVFdmVudHMoKTtcblxuICAgIHRoaXMuaW50ZXJhY3Rpb25ET01FbGVtZW50ID0gZWxlbWVudDtcblxuICAgIHRoaXMucmVzb2x1dGlvbiA9IHJlc29sdXRpb24gfHwgMTtcblxuICAgIHRoaXMuYWRkRXZlbnRzKCk7XG59O1xuXG4vKipcbiAqIFJlZ2lzdGVycyBhbGwgdGhlIERPTSBldmVudHNcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5JbnRlcmFjdGlvbk1hbmFnZXIucHJvdG90eXBlLmFkZEV2ZW50cyA9IGZ1bmN0aW9uICgpXG57XG4gICAgaWYgKCF0aGlzLmludGVyYWN0aW9uRE9NRWxlbWVudClcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb3JlLnRpY2tlci5zaGFyZWQuYWRkKHRoaXMudXBkYXRlLCB0aGlzKTtcblxuICAgIGlmICh3aW5kb3cubmF2aWdhdG9yLm1zUG9pbnRlckVuYWJsZWQpXG4gICAge1xuICAgICAgICB0aGlzLmludGVyYWN0aW9uRE9NRWxlbWVudC5zdHlsZVsnLW1zLWNvbnRlbnQtem9vbWluZyddID0gJ25vbmUnO1xuICAgICAgICB0aGlzLmludGVyYWN0aW9uRE9NRWxlbWVudC5zdHlsZVsnLW1zLXRvdWNoLWFjdGlvbiddID0gJ25vbmUnO1xuICAgIH1cblxuICAgIHdpbmRvdy5kb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdtb3VzZW1vdmUnLCAgICB0aGlzLm9uTW91c2VNb3ZlLCB0cnVlKTtcbiAgICB0aGlzLmludGVyYWN0aW9uRE9NRWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCdtb3VzZWRvd24nLCAgICB0aGlzLm9uTW91c2VEb3duLCB0cnVlKTtcbiAgICB0aGlzLmludGVyYWN0aW9uRE9NRWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCdtb3VzZW91dCcsICAgICB0aGlzLm9uTW91c2VPdXQsIHRydWUpO1xuXG4gICAgdGhpcy5pbnRlcmFjdGlvbkRPTUVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigndG91Y2hzdGFydCcsICAgdGhpcy5vblRvdWNoU3RhcnQsIHRydWUpO1xuICAgIHRoaXMuaW50ZXJhY3Rpb25ET01FbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ3RvdWNoZW5kJywgICAgIHRoaXMub25Ub3VjaEVuZCwgdHJ1ZSk7XG4gICAgdGhpcy5pbnRlcmFjdGlvbkRPTUVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigndG91Y2htb3ZlJywgICAgdGhpcy5vblRvdWNoTW92ZSwgdHJ1ZSk7XG5cbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignbW91c2V1cCcsICB0aGlzLm9uTW91c2VVcCwgdHJ1ZSk7XG5cbiAgICB0aGlzLmV2ZW50c0FkZGVkID0gdHJ1ZTtcbn07XG5cbi8qKlxuICogUmVtb3ZlcyBhbGwgdGhlIERPTSBldmVudHMgdGhhdCB3ZXJlIHByZXZpb3VzbHkgcmVnaXN0ZXJlZFxuICpcbiAqIEBwcml2YXRlXG4gKi9cbkludGVyYWN0aW9uTWFuYWdlci5wcm90b3R5cGUucmVtb3ZlRXZlbnRzID0gZnVuY3Rpb24gKClcbntcbiAgICBpZiAoIXRoaXMuaW50ZXJhY3Rpb25ET01FbGVtZW50KVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvcmUudGlja2VyLnNoYXJlZC5yZW1vdmUodGhpcy51cGRhdGUpO1xuXG4gICAgaWYgKHdpbmRvdy5uYXZpZ2F0b3IubXNQb2ludGVyRW5hYmxlZClcbiAgICB7XG4gICAgICAgIHRoaXMuaW50ZXJhY3Rpb25ET01FbGVtZW50LnN0eWxlWyctbXMtY29udGVudC16b29taW5nJ10gPSAnJztcbiAgICAgICAgdGhpcy5pbnRlcmFjdGlvbkRPTUVsZW1lbnQuc3R5bGVbJy1tcy10b3VjaC1hY3Rpb24nXSA9ICcnO1xuICAgIH1cblxuICAgIHdpbmRvdy5kb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdtb3VzZW1vdmUnLCB0aGlzLm9uTW91c2VNb3ZlLCB0cnVlKTtcbiAgICB0aGlzLmludGVyYWN0aW9uRE9NRWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdtb3VzZWRvd24nLCB0aGlzLm9uTW91c2VEb3duLCB0cnVlKTtcbiAgICB0aGlzLmludGVyYWN0aW9uRE9NRWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdtb3VzZW91dCcsICB0aGlzLm9uTW91c2VPdXQsIHRydWUpO1xuXG4gICAgdGhpcy5pbnRlcmFjdGlvbkRPTUVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigndG91Y2hzdGFydCcsIHRoaXMub25Ub3VjaFN0YXJ0LCB0cnVlKTtcbiAgICB0aGlzLmludGVyYWN0aW9uRE9NRWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCd0b3VjaGVuZCcsICB0aGlzLm9uVG91Y2hFbmQsIHRydWUpO1xuICAgIHRoaXMuaW50ZXJhY3Rpb25ET01FbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3RvdWNobW92ZScsIHRoaXMub25Ub3VjaE1vdmUsIHRydWUpO1xuXG4gICAgdGhpcy5pbnRlcmFjdGlvbkRPTUVsZW1lbnQgPSBudWxsO1xuXG4gICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21vdXNldXAnLCAgdGhpcy5vbk1vdXNlVXAsIHRydWUpO1xuXG4gICAgdGhpcy5ldmVudHNBZGRlZCA9IGZhbHNlO1xufTtcblxuLyoqXG4gKiBVcGRhdGVzIHRoZSBzdGF0ZSBvZiBpbnRlcmFjdGl2ZSBvYmplY3RzLlxuICogSW52b2tlZCBieSBhIHRocm90dGxlZCB0aWNrZXIgdXBkYXRlIGZyb21cbiAqIHtAbGluayBQSVhJLnRpY2tlci5zaGFyZWR9LlxuICpcbiAqIEBwYXJhbSBkZWx0YVRpbWUge251bWJlcn1cbiAqL1xuSW50ZXJhY3Rpb25NYW5hZ2VyLnByb3RvdHlwZS51cGRhdGUgPSBmdW5jdGlvbiAoZGVsdGFUaW1lKVxue1xuICAgIHRoaXMuX2RlbHRhVGltZSArPSBkZWx0YVRpbWU7XG5cbiAgICBpZiAodGhpcy5fZGVsdGFUaW1lIDwgdGhpcy5pbnRlcmFjdGlvbkZyZXF1ZW5jeSlcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLl9kZWx0YVRpbWUgPSAwO1xuXG4gICAgaWYgKCF0aGlzLmludGVyYWN0aW9uRE9NRWxlbWVudClcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBpZiB0aGUgdXNlciBtb3ZlIHRoZSBtb3VzZSB0aGlzIGNoZWNrIGhhcyBhbHJlYWR5IGJlZW4gZGZvbmUgdXNpbmcgdGhlIG1vdXNlIG1vdmUhXG4gICAgaWYodGhpcy5kaWRNb3ZlKVxuICAgIHtcbiAgICAgICAgdGhpcy5kaWRNb3ZlID0gZmFsc2U7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLmN1cnNvciA9ICdpbmhlcml0JztcblxuICAgIHRoaXMucHJvY2Vzc0ludGVyYWN0aXZlKHRoaXMubW91c2UuZ2xvYmFsLCB0aGlzLnJlbmRlcmVyLl9sYXN0T2JqZWN0UmVuZGVyZWQsIHRoaXMucHJvY2Vzc01vdXNlT3Zlck91dCwgdHJ1ZSApO1xuXG4gICAgaWYgKHRoaXMuY3VycmVudEN1cnNvclN0eWxlICE9PSB0aGlzLmN1cnNvcilcbiAgICB7XG4gICAgICAgIHRoaXMuY3VycmVudEN1cnNvclN0eWxlID0gdGhpcy5jdXJzb3I7XG4gICAgICAgIHRoaXMuaW50ZXJhY3Rpb25ET01FbGVtZW50LnN0eWxlLmN1cnNvciA9IHRoaXMuY3Vyc29yO1xuICAgIH1cblxuICAgIC8vVE9ET1xufTtcblxuLyoqXG4gKiBEaXNwYXRjaGVzIGFuIGV2ZW50IG9uIHRoZSBkaXNwbGF5IG9iamVjdCB0aGF0IHdhcyBpbnRlcmFjdGVkIHdpdGhcbiAqXG4gKiBAcGFyYW0gZGlzcGxheU9iamVjdCB7UElYSS5Db250YWluZXJ8UElYSS5TcHJpdGV8UElYSS5leHRyYXMuVGlsaW5nU3ByaXRlfSB0aGUgZGlzcGxheSBvYmplY3QgaW4gcXVlc3Rpb25cbiAqIEBwYXJhbSBldmVudFN0cmluZyB7c3RyaW5nfSB0aGUgbmFtZSBvZiB0aGUgZXZlbnQgKGUuZywgbW91c2Vkb3duKVxuICogQHBhcmFtIGV2ZW50RGF0YSB7b2JqZWN0fSB0aGUgZXZlbnQgZGF0YSBvYmplY3RcbiAqIEBwcml2YXRlXG4gKi9cbkludGVyYWN0aW9uTWFuYWdlci5wcm90b3R5cGUuZGlzcGF0Y2hFdmVudCA9IGZ1bmN0aW9uICggZGlzcGxheU9iamVjdCwgZXZlbnRTdHJpbmcsIGV2ZW50RGF0YSApXG57XG4gICAgaWYoIWV2ZW50RGF0YS5zdG9wcGVkKVxuICAgIHtcbiAgICAgICAgZXZlbnREYXRhLnRhcmdldCA9IGRpc3BsYXlPYmplY3Q7XG4gICAgICAgIGV2ZW50RGF0YS50eXBlID0gZXZlbnRTdHJpbmc7XG5cbiAgICAgICAgZGlzcGxheU9iamVjdC5lbWl0KCBldmVudFN0cmluZywgZXZlbnREYXRhICk7XG5cbiAgICAgICAgaWYoIGRpc3BsYXlPYmplY3RbZXZlbnRTdHJpbmddIClcbiAgICAgICAge1xuICAgICAgICAgICAgZGlzcGxheU9iamVjdFtldmVudFN0cmluZ10oIGV2ZW50RGF0YSApO1xuICAgICAgICB9XG4gICAgfVxufTtcblxuLyoqXG4gKiBNYXBzIHggYW5kIHkgY29vcmRzIGZyb20gYSBET00gb2JqZWN0IGFuZCBtYXBzIHRoZW0gY29ycmVjdGx5IHRvIHRoZSBwaXhpIHZpZXcuIFRoZSByZXN1bHRpbmcgdmFsdWUgaXMgc3RvcmVkIGluIHRoZSBwb2ludC5cbiAqIFRoaXMgdGFrZXMgaW50byBhY2NvdW50IHRoZSBmYWN0IHRoYXQgdGhlIERPTSBlbGVtZW50IGNvdWxkIGJlIHNjYWxlZCBhbmQgcG9zaXRpb25lZCBhbnl3aGVyZSBvbiB0aGUgc2NyZWVuLlxuICpcbiAqIEBwYXJhbSAge1BJWEkuUG9pbnR9IHBvaW50IHRoZSBwb2ludCB0aGF0IHRoZSByZXN1bHQgd2lsbCBiZSBzdG9yZWQgaW5cbiAqIEBwYXJhbSAge251bWJlcn0geCAgICAgdGhlIHggY29vcmQgb2YgdGhlIHBvc2l0aW9uIHRvIG1hcFxuICogQHBhcmFtICB7bnVtYmVyfSB5ICAgICB0aGUgeSBjb29yZCBvZiB0aGUgcG9zaXRpb24gdG8gbWFwXG4gKi9cbkludGVyYWN0aW9uTWFuYWdlci5wcm90b3R5cGUubWFwUG9zaXRpb25Ub1BvaW50ID0gZnVuY3Rpb24gKCBwb2ludCwgeCwgeSApXG57XG4gICAgdmFyIHJlY3QgPSB0aGlzLmludGVyYWN0aW9uRE9NRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICBwb2ludC54ID0gKCAoIHggLSByZWN0LmxlZnQgKSAqICh0aGlzLmludGVyYWN0aW9uRE9NRWxlbWVudC53aWR0aCAgLyByZWN0LndpZHRoICApICkgLyB0aGlzLnJlc29sdXRpb247XG4gICAgcG9pbnQueSA9ICggKCB5IC0gcmVjdC50b3AgICkgKiAodGhpcy5pbnRlcmFjdGlvbkRPTUVsZW1lbnQuaGVpZ2h0IC8gcmVjdC5oZWlnaHQgKSApIC8gdGhpcy5yZXNvbHV0aW9uO1xufTtcblxuLyoqXG4gKiBUaGlzIGZ1bmN0aW9uIGlzIHByb3ZpZGVzIGEgbmVhdCB3YXkgb2YgY3Jhd2xpbmcgdGhyb3VnaCB0aGUgc2NlbmUgZ3JhcGggYW5kIHJ1bm5pbmcgYSBzcGVjaWZpZWQgZnVuY3Rpb24gb24gYWxsIGludGVyYWN0aXZlIG9iamVjdHMgaXQgZmluZHMuXG4gKiBJdCB3aWxsIGFsc28gdGFrZSBjYXJlIG9mIGhpdCB0ZXN0aW5nIHRoZSBpbnRlcmFjdGl2ZSBvYmplY3RzIGFuZCBwYXNzZXMgdGhlIGhpdCBhY3Jvc3MgaW4gdGhlIGZ1bmN0aW9uLlxuICpcbiAqIEBwYXJhbSAge1BJWEkuUG9pbnR9IHBvaW50IHRoZSBwb2ludCB0aGF0IGlzIHRlc3RlZCBmb3IgY29sbGlzaW9uXG4gKiBAcGFyYW0gIHtQSVhJLkNvbnRhaW5lcnxQSVhJLlNwcml0ZXxQSVhJLmV4dHJhcy5UaWxpbmdTcHJpdGV9IGRpc3BsYXlPYmplY3QgdGhlIGRpc3BsYXlPYmplY3QgdGhhdCB3aWxsIGJlIGhpdCB0ZXN0IChyZWN1cmNzaXZseSBjcmF3bHMgaXRzIGNoaWxkcmVuKVxuICogQHBhcmFtICB7RnVuY3Rpb259IGZ1bmMgdGhlIGZ1bmN0aW9uIHRoYXQgd2lsbCBiZSBjYWxsZWQgb24gZWFjaCBpbnRlcmFjdGl2ZSBvYmplY3QuIFRoZSBkaXNwbGF5T2JqZWN0IGFuZCBoaXQgd2lsbCBiZSBwYXNzZWQgdG8gdGhlIGZ1bmN0aW9uXG4gKiBAcGFyYW0gIHtib29sZWFufSBoaXRUZXN0IHRoaXMgaW5kaWNhdGVzIGlmIHRoZSBvYmplY3RzIGluc2lkZSBzaG91bGQgYmUgaGl0IHRlc3QgYWdhaW5zdCB0aGUgcG9pbnRcbiAqIEByZXR1cm4ge2Jvb2xlYW59IHJldHVybnMgdHJ1ZSBpZiB0aGUgZGlzcGxheU9iamVjdCBoaXQgdGhlIHBvaW50XG4gKi9cbkludGVyYWN0aW9uTWFuYWdlci5wcm90b3R5cGUucHJvY2Vzc0ludGVyYWN0aXZlID0gZnVuY3Rpb24gKHBvaW50LCBkaXNwbGF5T2JqZWN0LCBmdW5jLCBoaXRUZXN0LCBpbnRlcmFjdGl2ZSlcbntcbiAgICBpZighZGlzcGxheU9iamVjdCB8fCAhZGlzcGxheU9iamVjdC52aXNpYmxlKVxuICAgIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIC8vIFRvb2sgYSBsaXR0bGUgd2hpbGUgdG8gcmV3b3JrIHRoaXMgZnVuY3Rpb24gY29ycmVjdGx5ISBCdXQgbm93IGl0IGlzIGRvbmUgYW5kIG5pY2UgYW5kIG9wdGltaXNlZC4gXl9eXG4gICAgLy8gXG4gICAgLy8gVGhpcyBmdW5jdGlvbiB3aWxsIG5vdyBsb29wIHRocm91Z2ggYWxsIG9iamVjdHMgYW5kIHRoZW4gb25seSBoaXQgdGVzdCB0aGUgb2JqZWN0cyBpdCBIQVMgdG8sIG5vdCBhbGwgb2YgdGhlbS4gTVVDSCBmYXN0ZXIuLlxuICAgIC8vIEFuIG9iamVjdCB3aWxsIGJlIGhpdCB0ZXN0IGlmIHRoZSBmb2xsb3dpbmcgaXMgdHJ1ZTpcbiAgICAvLyBcbiAgICAvLyAxOiBJdCBpcyBpbnRlcmFjdGl2ZS5cbiAgICAvLyAyOiBJdCBiZWxvbmdzIHRvIGEgcGFyZW50IHRoYXQgaXMgaW50ZXJhY3RpdmUgQU5EIG9uZSBvZiB0aGUgcGFyZW50cyBjaGlsZHJlbiBoYXZlIG5vdCBhbHJlYWR5IGJlZW4gaGl0LlxuICAgIC8vIFxuICAgIC8vIEFzIGFub3RoZXIgbGl0dGxlIG9wdGltaXNhdGlvbiBvbmNlIGFuIGludGVyYWN0aXZlIG9iamVjdCBoYXMgYmVlbiBoaXQgd2UgY2FuIGNhcnJ5IG9uIHRocm91Z2ggdGhlIHNjZW5lZ3JhcGgsIGJ1dCB3ZSBrbm93IHRoYXQgdGhlcmUgd2lsbCBiZSBubyBtb3JlIGhpdHMhIFNvIHdlIGNhbiBhdm9pZCBleHRyYSBoaXQgdGVzdHNcbiAgICAvLyBBIGZpbmFsIG9wdGltaXNhdGlvbiBpcyB0aGF0IGFuIG9iamVjdCBpcyBub3QgaGl0IHRlc3QgZGlyZWN0bHkgaWYgYSBjaGlsZCBoYXMgYWxyZWFkeSBiZWVuIGhpdC5cbiAgICBcbiAgICB2YXIgaGl0ID0gZmFsc2UsXG4gICAgICAgIGludGVyYWN0aXZlUGFyZW50ID0gaW50ZXJhY3RpdmUgPSBkaXNwbGF5T2JqZWN0LmludGVyYWN0aXZlIHx8IGludGVyYWN0aXZlO1xuXG4gICAgLy8gaWYgdGhlIGRpc3BsYXlvYmplY3QgaGFzIGEgaGl0QXJlYSwgdGhlbiBpdCBkb2VzIG5vdCBuZWVkIHRvIGhpdFRlc3QgY2hpbGRyZW4uXG4gICAgaWYoZGlzcGxheU9iamVjdC5oaXRBcmVhKVxuICAgIHtcbiAgICAgICAgaW50ZXJhY3RpdmVQYXJlbnQgPSBmYWxzZTtcbiAgICB9XG5cbiAgICAvLyAqKiBGUkVFIFRJUCAqKiEgSWYgYW4gb2JqZWN0IGlzIG5vdCBpbnRlcmFjdHRpdmUgb3IgaGFzIG5vIGJ1dHRvbnMgaW4gaXQgKHN1Y2ggYXMgYSBnYW1lIHNjZW5lISkgc2V0IGludGVyYWN0aXZlQ2hpbGRyZW4gdG8gZmFsc2UgZm9yIHRoYXQgZGlzcGxheU9iamVjdC5cbiAgICAvLyBUaGlzIHdpbGwgYWxsb3cgcGl4aSB0byBjb21wbGV0bHkgaWdub3JlIGFuZCBieXBhc3MgY2hlY2tpbmcgdGhlIGRpc3BsYXlPYmplY3RzIGNoaWxkcmVuLlxuICAgIGlmKGRpc3BsYXlPYmplY3QuaW50ZXJhY3RpdmVDaGlsZHJlbilcbiAgICB7ICAgICAgIFxuICAgICAgICB2YXIgY2hpbGRyZW4gPSBkaXNwbGF5T2JqZWN0LmNoaWxkcmVuO1xuICAgICAgICBcbiAgICAgICAgZm9yICh2YXIgaSA9IGNoaWxkcmVuLmxlbmd0aC0xOyBpID49IDA7IGktLSlcbiAgICAgICAge1xuICAgICAgICAgICAgLy8gdGltZSB0byBnZXQgcmVjdXJzaXZlLi4gaWYgdGhpcyBmdW5jdGlvbiB3aWxsIHJldHVybiBpZiBzb210aGluZyBpcyBoaXQuLlxuICAgICAgICAgICAgaWYoIHRoaXMucHJvY2Vzc0ludGVyYWN0aXZlKHBvaW50LCBjaGlsZHJlbltpXSwgZnVuYywgaGl0VGVzdCwgaW50ZXJhY3RpdmVQYXJlbnQpIClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBoaXQgPSB0cnVlO1xuXG4gICAgICAgICAgICAgICAgLy8gd2Ugbm8gbG9uZ2VyIG5lZWQgdG8gaGl0IHRlc3QgYW55IG1vcmUgb2JqZWN0cyBpbiB0aGlzIGNvbnRhaW5lciBhcyB3ZSB3ZSBub3cga25vdyB0aGUgcGFyZW50IGhhcyBiZWVuIGhpdFxuICAgICAgICAgICAgICAgIGludGVyYWN0aXZlUGFyZW50ID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgLy8gSWYgdGhlIGNoaWxkIGlzIGludGVyYWN0aXZlICwgdGhhdCBtZWFucyB0aGF0IHRoZSBvYmplY3QgaGl0IHdhcyBhY3R1YWxseSBpbnRlcmFjdGl2ZSBhbmQgbm90IGp1c3QgdGhlIGNoaWxkIG9mIGFuIGludGVyYWN0aXZlIG9iamVjdC4gXG4gICAgICAgICAgICAgICAgLy8gVGhpcyBtZWFucyB3ZSBubyBsb25nZXIgbmVlZCB0byBoaXQgdGVzdCBhbnl0aGluZyBlbHNlLiBXZSBzdGlsbCBuZWVkIHRvIHJ1biB0aHJvdWdoIGFsbCBvYmplY3RzLCBidXQgd2UgZG9uJ3QgbmVlZCB0byBwZXJmb3JtIGFueSBoaXQgdGVzdHMuXG4gICAgICAgICAgICAgICAgaWYoY2hpbGRyZW5baV0uaW50ZXJhY3RpdmUpXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBoaXRUZXN0ID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gbm8gcG9pbnQgcnVubmluZyB0aGlzIGlmIHRoZSBpdGVtIGlzIG5vdCBpbnRlcmFjdGl2ZSBvciBkb2VzIG5vdCBoYXZlIGFuIGludGVyYWN0aXZlIHBhcmVudC5cbiAgICBpZihpbnRlcmFjdGl2ZSlcbiAgICB7XG4gICAgICAgIC8vIGlmIHdlIGFyZSBoaXQgdGVzdGluZyAoYXMgaW4gd2UgaGF2ZSBubyBoaXQgYW55IG9iamVjdHMgeWV0KVxuICAgICAgICAvLyBXZSBhbHNvIGRvbid0IG5lZWQgdG8gd29ycnkgYWJvdXQgaGl0IHRlc3RpbmcgaWYgb25jZSBvZiB0aGUgZGlzcGxheU9iamVjdHMgY2hpbGRyZW4gaGFzIGFscmVhZHkgYmVlbiBoaXQhXG4gICAgICAgIGlmKGhpdFRlc3QgJiYgIWhpdClcbiAgICAgICAgeyAgXG4gICAgICAgICAgICBpZihkaXNwbGF5T2JqZWN0LmhpdEFyZWEpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgZGlzcGxheU9iamVjdC53b3JsZFRyYW5zZm9ybS5hcHBseUludmVyc2UocG9pbnQsICB0aGlzLl90ZW1wUG9pbnQpO1xuICAgICAgICAgICAgICAgIGhpdCA9IGRpc3BsYXlPYmplY3QuaGl0QXJlYS5jb250YWlucyggdGhpcy5fdGVtcFBvaW50LngsIHRoaXMuX3RlbXBQb2ludC55ICk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmKGRpc3BsYXlPYmplY3QuY29udGFpbnNQb2ludClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBoaXQgPSBkaXNwbGF5T2JqZWN0LmNvbnRhaW5zUG9pbnQocG9pbnQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYoZGlzcGxheU9iamVjdC5pbnRlcmFjdGl2ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgZnVuYyhkaXNwbGF5T2JqZWN0LCBoaXQpOyBcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBoaXQ7XG4gIFxufTtcblxuXG4vKipcbiAqIElzIGNhbGxlZCB3aGVuIHRoZSBtb3VzZSBidXR0b24gaXMgcHJlc3NlZCBkb3duIG9uIHRoZSByZW5kZXJlciBlbGVtZW50XG4gKlxuICogQHBhcmFtIGV2ZW50IHtFdmVudH0gVGhlIERPTSBldmVudCBvZiBhIG1vdXNlIGJ1dHRvbiBiZWluZyBwcmVzc2VkIGRvd25cbiAqIEBwcml2YXRlXG4gKi9cbkludGVyYWN0aW9uTWFuYWdlci5wcm90b3R5cGUub25Nb3VzZURvd24gPSBmdW5jdGlvbiAoZXZlbnQpXG57XG4gICAgdGhpcy5tb3VzZS5vcmlnaW5hbEV2ZW50ID0gZXZlbnQ7XG4gICAgdGhpcy5ldmVudERhdGEuZGF0YSA9IHRoaXMubW91c2U7XG4gICAgdGhpcy5ldmVudERhdGEuc3RvcHBlZCA9IGZhbHNlO1xuXG4gICAgLy8gVXBkYXRlIGludGVybmFsIG1vdXNlIHJlZmVyZW5jZVxuICAgIHRoaXMubWFwUG9zaXRpb25Ub1BvaW50KCB0aGlzLm1vdXNlLmdsb2JhbCwgZXZlbnQuY2xpZW50WCwgZXZlbnQuY2xpZW50WSk7XG5cbiAgICBpZiAodGhpcy5hdXRvUHJldmVudERlZmF1bHQpXG4gICAge1xuICAgICAgICB0aGlzLm1vdXNlLm9yaWdpbmFsRXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICB9XG5cbiAgICB0aGlzLnByb2Nlc3NJbnRlcmFjdGl2ZSh0aGlzLm1vdXNlLmdsb2JhbCwgdGhpcy5yZW5kZXJlci5fbGFzdE9iamVjdFJlbmRlcmVkLCB0aGlzLnByb2Nlc3NNb3VzZURvd24sIHRydWUgKTtcbn07XG5cbi8qKlxuICogUHJvY2Vzc2VzIHRoZSByZXN1bHQgb2YgdGhlIG1vdXNlIGRvd24gY2hlY2sgYW5kIGRpc3BhdGNoZXMgdGhlIGV2ZW50IGlmIG5lZWQgYmVcbiAqXG4gKiBAcGFyYW0gZGlzcGxheU9iamVjdCB7UElYSS5Db250YWluZXJ8UElYSS5TcHJpdGV8UElYSS5leHRyYXMuVGlsaW5nU3ByaXRlfSBUaGUgZGlzcGxheSBvYmplY3QgdGhhdCB3YXMgdGVzdGVkXG4gKiBAcGFyYW0gaGl0IHtib29sZWFufSB0aGUgcmVzdWx0IG9mIHRoZSBoaXQgdGVzdCBvbiB0aGUgZGlzcGF5IG9iamVjdFxuICogQHByaXZhdGVcbiAqL1xuSW50ZXJhY3Rpb25NYW5hZ2VyLnByb3RvdHlwZS5wcm9jZXNzTW91c2VEb3duID0gZnVuY3Rpb24gKCBkaXNwbGF5T2JqZWN0LCBoaXQgKVxue1xuICAgIHZhciBlID0gdGhpcy5tb3VzZS5vcmlnaW5hbEV2ZW50O1xuICAgIFxuICAgIHZhciBpc1JpZ2h0QnV0dG9uID0gZS5idXR0b24gPT09IDIgfHwgZS53aGljaCA9PT0gMztcblxuICAgIGlmKGhpdClcbiAgICB7XG4gICAgICAgIGRpc3BsYXlPYmplY3RbIGlzUmlnaHRCdXR0b24gPyAnX2lzUmlnaHREb3duJyA6ICdfaXNMZWZ0RG93bicgXSA9IHRydWU7XG4gICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudCggZGlzcGxheU9iamVjdCwgaXNSaWdodEJ1dHRvbiA/ICdyaWdodGRvd24nIDogJ21vdXNlZG93bicsIHRoaXMuZXZlbnREYXRhICk7XG4gICAgfVxufTtcblxuXG5cbi8qKlxuICogSXMgY2FsbGVkIHdoZW4gdGhlIG1vdXNlIGJ1dHRvbiBpcyByZWxlYXNlZCBvbiB0aGUgcmVuZGVyZXIgZWxlbWVudFxuICpcbiAqIEBwYXJhbSBldmVudCB7RXZlbnR9IFRoZSBET00gZXZlbnQgb2YgYSBtb3VzZSBidXR0b24gYmVpbmcgcmVsZWFzZWRcbiAqIEBwcml2YXRlXG4gKi9cbkludGVyYWN0aW9uTWFuYWdlci5wcm90b3R5cGUub25Nb3VzZVVwID0gZnVuY3Rpb24gKGV2ZW50KVxue1xuICAgIHRoaXMubW91c2Uub3JpZ2luYWxFdmVudCA9IGV2ZW50O1xuICAgIHRoaXMuZXZlbnREYXRhLmRhdGEgPSB0aGlzLm1vdXNlO1xuICAgIHRoaXMuZXZlbnREYXRhLnN0b3BwZWQgPSBmYWxzZTtcblxuICAgIC8vIFVwZGF0ZSBpbnRlcm5hbCBtb3VzZSByZWZlcmVuY2VcbiAgICB0aGlzLm1hcFBvc2l0aW9uVG9Qb2ludCggdGhpcy5tb3VzZS5nbG9iYWwsIGV2ZW50LmNsaWVudFgsIGV2ZW50LmNsaWVudFkpO1xuXG4gICAgdGhpcy5wcm9jZXNzSW50ZXJhY3RpdmUodGhpcy5tb3VzZS5nbG9iYWwsIHRoaXMucmVuZGVyZXIuX2xhc3RPYmplY3RSZW5kZXJlZCwgdGhpcy5wcm9jZXNzTW91c2VVcCwgdHJ1ZSApO1xufTtcblxuLyoqXG4gKiBQcm9jZXNzZXMgdGhlIHJlc3VsdCBvZiB0aGUgbW91c2UgdXAgY2hlY2sgYW5kIGRpc3BhdGNoZXMgdGhlIGV2ZW50IGlmIG5lZWQgYmVcbiAqXG4gKiBAcGFyYW0gZGlzcGxheU9iamVjdCB7UElYSS5Db250YWluZXJ8UElYSS5TcHJpdGV8UElYSS5leHRyYXMuVGlsaW5nU3ByaXRlfSBUaGUgZGlzcGxheSBvYmplY3QgdGhhdCB3YXMgdGVzdGVkXG4gKiBAcGFyYW0gaGl0IHtib29sZWFufSB0aGUgcmVzdWx0IG9mIHRoZSBoaXQgdGVzdCBvbiB0aGUgZGlzcGxheSBvYmplY3RcbiAqIEBwcml2YXRlXG4gKi9cbkludGVyYWN0aW9uTWFuYWdlci5wcm90b3R5cGUucHJvY2Vzc01vdXNlVXAgPSBmdW5jdGlvbiAoIGRpc3BsYXlPYmplY3QsIGhpdCApXG57XG4gICAgdmFyIGUgPSB0aGlzLm1vdXNlLm9yaWdpbmFsRXZlbnQ7XG5cbiAgICB2YXIgaXNSaWdodEJ1dHRvbiA9IGUuYnV0dG9uID09PSAyIHx8IGUud2hpY2ggPT09IDM7XG4gICAgdmFyIGlzRG93biA9ICBpc1JpZ2h0QnV0dG9uID8gJ19pc1JpZ2h0RG93bicgOiAnX2lzTGVmdERvd24nO1xuXG4gICAgaWYoaGl0KVxuICAgIHtcbiAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50KCBkaXNwbGF5T2JqZWN0LCBpc1JpZ2h0QnV0dG9uID8gJ3JpZ2h0dXAnIDogJ21vdXNldXAnLCB0aGlzLmV2ZW50RGF0YSApO1xuXG4gICAgICAgIGlmKCBkaXNwbGF5T2JqZWN0WyBpc0Rvd24gXSApXG4gICAgICAgIHtcbiAgICAgICAgICAgIGRpc3BsYXlPYmplY3RbIGlzRG93biBdID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLmRpc3BhdGNoRXZlbnQoIGRpc3BsYXlPYmplY3QsIGlzUmlnaHRCdXR0b24gPyAncmlnaHRjbGljaycgOiAnY2xpY2snLCB0aGlzLmV2ZW50RGF0YSApO1xuICAgICAgICB9XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIGlmKCBkaXNwbGF5T2JqZWN0WyBpc0Rvd24gXSApXG4gICAgICAgIHtcbiAgICAgICAgICAgIGRpc3BsYXlPYmplY3RbIGlzRG93biBdID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLmRpc3BhdGNoRXZlbnQoIGRpc3BsYXlPYmplY3QsIGlzUmlnaHRCdXR0b24gPyAncmlnaHR1cG91dHNpZGUnIDogJ21vdXNldXBvdXRzaWRlJywgdGhpcy5ldmVudERhdGEgKTtcbiAgICAgICAgfVxuICAgIH1cbn07XG5cblxuLyoqXG4gKiBJcyBjYWxsZWQgd2hlbiB0aGUgbW91c2UgbW92ZXMgYWNyb3NzIHRoZSByZW5kZXJlciBlbGVtZW50XG4gKlxuICogQHBhcmFtIGV2ZW50IHtFdmVudH0gVGhlIERPTSBldmVudCBvZiB0aGUgbW91c2UgbW92aW5nXG4gKiBAcHJpdmF0ZVxuICovXG5JbnRlcmFjdGlvbk1hbmFnZXIucHJvdG90eXBlLm9uTW91c2VNb3ZlID0gZnVuY3Rpb24gKGV2ZW50KVxue1xuICAgIHRoaXMubW91c2Uub3JpZ2luYWxFdmVudCA9IGV2ZW50O1xuICAgIHRoaXMuZXZlbnREYXRhLmRhdGEgPSB0aGlzLm1vdXNlO1xuICAgIHRoaXMuZXZlbnREYXRhLnN0b3BwZWQgPSBmYWxzZTtcblxuICAgIHRoaXMubWFwUG9zaXRpb25Ub1BvaW50KCB0aGlzLm1vdXNlLmdsb2JhbCwgZXZlbnQuY2xpZW50WCwgZXZlbnQuY2xpZW50WSk7XG5cbiAgICB0aGlzLmRpZE1vdmUgPSB0cnVlO1xuXG4gICAgdGhpcy5jdXJzb3IgPSAnaW5oZXJpdCc7XG5cbiAgICB0aGlzLnByb2Nlc3NJbnRlcmFjdGl2ZSh0aGlzLm1vdXNlLmdsb2JhbCwgdGhpcy5yZW5kZXJlci5fbGFzdE9iamVjdFJlbmRlcmVkLCB0aGlzLnByb2Nlc3NNb3VzZU1vdmUsIHRydWUgKTtcblxuICAgIGlmICh0aGlzLmN1cnJlbnRDdXJzb3JTdHlsZSAhPT0gdGhpcy5jdXJzb3IpXG4gICAge1xuICAgICAgICB0aGlzLmN1cnJlbnRDdXJzb3JTdHlsZSA9IHRoaXMuY3Vyc29yO1xuICAgICAgICB0aGlzLmludGVyYWN0aW9uRE9NRWxlbWVudC5zdHlsZS5jdXJzb3IgPSB0aGlzLmN1cnNvcjtcbiAgICB9XG5cbiAgICAvL1RPRE8gQlVHIGZvciBwYXJlbnRzIGluZXJhY3RpdmUgb2JqZWN0IChib3JkZXIgb3JkZXIgaXNzdWUpXG59O1xuXG4vKipcbiAqIFByb2Nlc3NlcyB0aGUgcmVzdWx0IG9mIHRoZSBtb3VzZSBtb3ZlIGNoZWNrIGFuZCBkaXNwYXRjaGVzIHRoZSBldmVudCBpZiBuZWVkIGJlXG4gKlxuICogQHBhcmFtIGRpc3BsYXlPYmplY3Qge1BJWEkuQ29udGFpbmVyfFBJWEkuU3ByaXRlfFBJWEkuZXh0cmFzLlRpbGluZ1Nwcml0ZX0gVGhlIGRpc3BsYXkgb2JqZWN0IHRoYXQgd2FzIHRlc3RlZFxuICogQHBhcmFtIGhpdCB7Ym9vbGVhbn0gdGhlIHJlc3VsdCBvZiB0aGUgaGl0IHRlc3Qgb24gdGhlIGRpc3BsYXkgb2JqZWN0XG4gKiBAcHJpdmF0ZVxuICovXG5JbnRlcmFjdGlvbk1hbmFnZXIucHJvdG90eXBlLnByb2Nlc3NNb3VzZU1vdmUgPSBmdW5jdGlvbiAoIGRpc3BsYXlPYmplY3QsIGhpdCApXG57XG4gICAgdGhpcy5kaXNwYXRjaEV2ZW50KCBkaXNwbGF5T2JqZWN0LCAnbW91c2Vtb3ZlJywgdGhpcy5ldmVudERhdGEpO1xuICAgIHRoaXMucHJvY2Vzc01vdXNlT3Zlck91dChkaXNwbGF5T2JqZWN0LCBoaXQpO1xufTtcblxuXG4vKipcbiAqIElzIGNhbGxlZCB3aGVuIHRoZSBtb3VzZSBpcyBtb3ZlZCBvdXQgb2YgdGhlIHJlbmRlcmVyIGVsZW1lbnRcbiAqXG4gKiBAcGFyYW0gZXZlbnQge0V2ZW50fSBUaGUgRE9NIGV2ZW50IG9mIGEgbW91c2UgYmVpbmcgbW92ZWQgb3V0XG4gKiBAcHJpdmF0ZVxuICovXG5JbnRlcmFjdGlvbk1hbmFnZXIucHJvdG90eXBlLm9uTW91c2VPdXQgPSBmdW5jdGlvbiAoZXZlbnQpXG57XG4gICAgdGhpcy5tb3VzZS5vcmlnaW5hbEV2ZW50ID0gZXZlbnQ7XG4gICAgdGhpcy5ldmVudERhdGEuc3RvcHBlZCA9IGZhbHNlO1xuXG4gICAgLy8gVXBkYXRlIGludGVybmFsIG1vdXNlIHJlZmVyZW5jZVxuICAgIHRoaXMubWFwUG9zaXRpb25Ub1BvaW50KCB0aGlzLm1vdXNlLmdsb2JhbCwgZXZlbnQuY2xpZW50WCwgZXZlbnQuY2xpZW50WSk7XG5cbiAgICB0aGlzLmludGVyYWN0aW9uRE9NRWxlbWVudC5zdHlsZS5jdXJzb3IgPSAnaW5oZXJpdCc7XG5cbiAgICAvLyBUT0RPIG9wdGltaXplIGJ5IG5vdCBjaGVjayBFVkVSWSBUSU1FISBtYXliZSBoYWxmIGFzIG9mdGVuPyAvL1xuICAgIHRoaXMubWFwUG9zaXRpb25Ub1BvaW50KCB0aGlzLm1vdXNlLmdsb2JhbCwgZXZlbnQuY2xpZW50WCwgZXZlbnQuY2xpZW50WSApO1xuXG4gICAgdGhpcy5wcm9jZXNzSW50ZXJhY3RpdmUoIHRoaXMubW91c2UuZ2xvYmFsLCB0aGlzLnJlbmRlcmVyLl9sYXN0T2JqZWN0UmVuZGVyZWQsIHRoaXMucHJvY2Vzc01vdXNlT3Zlck91dCwgZmFsc2UgKTtcbn07XG5cbi8qKlxuICogUHJvY2Vzc2VzIHRoZSByZXN1bHQgb2YgdGhlIG1vdXNlIG92ZXIvb3V0IGNoZWNrIGFuZCBkaXNwYXRjaGVzIHRoZSBldmVudCBpZiBuZWVkIGJlXG4gKlxuICogQHBhcmFtIGRpc3BsYXlPYmplY3Qge1BJWEkuQ29udGFpbmVyfFBJWEkuU3ByaXRlfFBJWEkuZXh0cmFzLlRpbGluZ1Nwcml0ZX0gVGhlIGRpc3BsYXkgb2JqZWN0IHRoYXQgd2FzIHRlc3RlZFxuICogQHBhcmFtIGhpdCB7Ym9vbGVhbn0gdGhlIHJlc3VsdCBvZiB0aGUgaGl0IHRlc3Qgb24gdGhlIGRpc3BsYXkgb2JqZWN0XG4gKiBAcHJpdmF0ZVxuICovXG5JbnRlcmFjdGlvbk1hbmFnZXIucHJvdG90eXBlLnByb2Nlc3NNb3VzZU92ZXJPdXQgPSBmdW5jdGlvbiAoIGRpc3BsYXlPYmplY3QsIGhpdCApXG57XG4gICAgaWYoaGl0KVxuICAgIHtcbiAgICAgICAgaWYoIWRpc3BsYXlPYmplY3QuX292ZXIpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGRpc3BsYXlPYmplY3QuX292ZXIgPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50KCBkaXNwbGF5T2JqZWN0LCAnbW91c2VvdmVyJywgdGhpcy5ldmVudERhdGEgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChkaXNwbGF5T2JqZWN0LmJ1dHRvbk1vZGUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuY3Vyc29yID0gZGlzcGxheU9iamVjdC5kZWZhdWx0Q3Vyc29yO1xuICAgICAgICB9XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIGlmKGRpc3BsYXlPYmplY3QuX292ZXIpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGRpc3BsYXlPYmplY3QuX292ZXIgPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudCggZGlzcGxheU9iamVjdCwgJ21vdXNlb3V0JywgdGhpcy5ldmVudERhdGEpO1xuICAgICAgICB9XG4gICAgfVxufTtcblxuXG4vKipcbiAqIElzIGNhbGxlZCB3aGVuIGEgdG91Y2ggaXMgc3RhcnRlZCBvbiB0aGUgcmVuZGVyZXIgZWxlbWVudFxuICpcbiAqIEBwYXJhbSBldmVudCB7RXZlbnR9IFRoZSBET00gZXZlbnQgb2YgYSB0b3VjaCBzdGFydGluZyBvbiB0aGUgcmVuZGVyZXIgdmlld1xuICogQHByaXZhdGVcbiAqL1xuSW50ZXJhY3Rpb25NYW5hZ2VyLnByb3RvdHlwZS5vblRvdWNoU3RhcnQgPSBmdW5jdGlvbiAoZXZlbnQpXG57XG4gICAgaWYgKHRoaXMuYXV0b1ByZXZlbnREZWZhdWx0KVxuICAgIHtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICB9XG5cbiAgICB2YXIgY2hhbmdlZFRvdWNoZXMgPSBldmVudC5jaGFuZ2VkVG91Y2hlcztcbiAgICB2YXIgY0xlbmd0aCA9IGNoYW5nZWRUb3VjaGVzLmxlbmd0aDtcblxuICAgIGZvciAodmFyIGk9MDsgaSA8IGNMZW5ndGg7IGkrKylcbiAgICB7XG4gICAgICAgIHZhciB0b3VjaEV2ZW50ID0gY2hhbmdlZFRvdWNoZXNbaV07XG4gICAgICAgIC8vVE9ETyBQT09MXG4gICAgICAgIHZhciB0b3VjaERhdGEgPSB0aGlzLmdldFRvdWNoRGF0YSggdG91Y2hFdmVudCApO1xuXG4gICAgICAgIHRvdWNoRGF0YS5vcmlnaW5hbEV2ZW50ID0gZXZlbnQ7XG5cbiAgICAgICAgdGhpcy5ldmVudERhdGEuZGF0YSA9IHRvdWNoRGF0YTtcbiAgICAgICAgdGhpcy5ldmVudERhdGEuc3RvcHBlZCA9IGZhbHNlO1xuXG4gICAgICAgIHRoaXMucHJvY2Vzc0ludGVyYWN0aXZlKCB0b3VjaERhdGEuZ2xvYmFsLCB0aGlzLnJlbmRlcmVyLl9sYXN0T2JqZWN0UmVuZGVyZWQsIHRoaXMucHJvY2Vzc1RvdWNoU3RhcnQsIHRydWUgKTtcblxuICAgICAgICB0aGlzLnJldHVyblRvdWNoRGF0YSggdG91Y2hEYXRhICk7XG4gICAgfVxufTtcblxuLyoqXG4gKiBQcm9jZXNzZXMgdGhlIHJlc3VsdCBvZiBhIHRvdWNoIGNoZWNrIGFuZCBkaXNwYXRjaGVzIHRoZSBldmVudCBpZiBuZWVkIGJlXG4gKlxuICogQHBhcmFtIGRpc3BsYXlPYmplY3Qge1BJWEkuQ29udGFpbmVyfFBJWEkuU3ByaXRlfFBJWEkuZXh0cmFzLlRpbGluZ1Nwcml0ZX0gVGhlIGRpc3BsYXkgb2JqZWN0IHRoYXQgd2FzIHRlc3RlZFxuICogQHBhcmFtIGhpdCB7Ym9vbGVhbn0gdGhlIHJlc3VsdCBvZiB0aGUgaGl0IHRlc3Qgb24gdGhlIGRpc3BsYXkgb2JqZWN0XG4gKiBAcHJpdmF0ZVxuICovXG5JbnRlcmFjdGlvbk1hbmFnZXIucHJvdG90eXBlLnByb2Nlc3NUb3VjaFN0YXJ0ID0gZnVuY3Rpb24gKCBkaXNwbGF5T2JqZWN0LCBoaXQgKVxue1xuICAgIGlmKGhpdClcbiAgICB7XG4gICAgICAgIGRpc3BsYXlPYmplY3QuX3RvdWNoRG93biA9IHRydWU7XG4gICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudCggZGlzcGxheU9iamVjdCwgJ3RvdWNoc3RhcnQnLCB0aGlzLmV2ZW50RGF0YSApO1xuICAgIH1cbn07XG5cblxuLyoqXG4gKiBJcyBjYWxsZWQgd2hlbiBhIHRvdWNoIGVuZHMgb24gdGhlIHJlbmRlcmVyIGVsZW1lbnRcbiAqXG4gKiBAcGFyYW0gZXZlbnQge0V2ZW50fSBUaGUgRE9NIGV2ZW50IG9mIGEgdG91Y2ggZW5kaW5nIG9uIHRoZSByZW5kZXJlciB2aWV3XG4gKi9cbkludGVyYWN0aW9uTWFuYWdlci5wcm90b3R5cGUub25Ub3VjaEVuZCA9IGZ1bmN0aW9uIChldmVudClcbntcbiAgICBpZiAodGhpcy5hdXRvUHJldmVudERlZmF1bHQpXG4gICAge1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIH1cblxuICAgIHZhciBjaGFuZ2VkVG91Y2hlcyA9IGV2ZW50LmNoYW5nZWRUb3VjaGVzO1xuICAgIHZhciBjTGVuZ3RoID0gY2hhbmdlZFRvdWNoZXMubGVuZ3RoO1xuXG4gICAgZm9yICh2YXIgaT0wOyBpIDwgY0xlbmd0aDsgaSsrKVxuICAgIHtcbiAgICAgICAgdmFyIHRvdWNoRXZlbnQgPSBjaGFuZ2VkVG91Y2hlc1tpXTtcblxuICAgICAgICB2YXIgdG91Y2hEYXRhID0gdGhpcy5nZXRUb3VjaERhdGEoIHRvdWNoRXZlbnQgKTtcblxuICAgICAgICB0b3VjaERhdGEub3JpZ2luYWxFdmVudCA9IGV2ZW50O1xuXG4gICAgICAgIC8vVE9ETyB0aGlzIHNob3VsZCBiZSBwYXNzZWQgYWxvbmcuLiBubyBzZXRcbiAgICAgICAgdGhpcy5ldmVudERhdGEuZGF0YSA9IHRvdWNoRGF0YTtcbiAgICAgICAgdGhpcy5ldmVudERhdGEuc3RvcHBlZCA9IGZhbHNlO1xuXG5cbiAgICAgICAgdGhpcy5wcm9jZXNzSW50ZXJhY3RpdmUoIHRvdWNoRGF0YS5nbG9iYWwsIHRoaXMucmVuZGVyZXIuX2xhc3RPYmplY3RSZW5kZXJlZCwgdGhpcy5wcm9jZXNzVG91Y2hFbmQsIHRydWUgKTtcblxuICAgICAgICB0aGlzLnJldHVyblRvdWNoRGF0YSggdG91Y2hEYXRhICk7XG4gICAgfVxufTtcblxuLyoqXG4gKiBQcm9jZXNzZXMgdGhlIHJlc3VsdCBvZiB0aGUgZW5kIG9mIGEgdG91Y2ggYW5kIGRpc3BhdGNoZXMgdGhlIGV2ZW50IGlmIG5lZWQgYmVcbiAqXG4gKiBAcGFyYW0gZGlzcGxheU9iamVjdCB7UElYSS5Db250YWluZXJ8UElYSS5TcHJpdGV8UElYSS5leHRyYXMuVGlsaW5nU3ByaXRlfSBUaGUgZGlzcGxheSBvYmplY3QgdGhhdCB3YXMgdGVzdGVkXG4gKiBAcGFyYW0gaGl0IHtib29sZWFufSB0aGUgcmVzdWx0IG9mIHRoZSBoaXQgdGVzdCBvbiB0aGUgZGlzcGxheSBvYmplY3RcbiAqIEBwcml2YXRlXG4gKi9cbkludGVyYWN0aW9uTWFuYWdlci5wcm90b3R5cGUucHJvY2Vzc1RvdWNoRW5kID0gZnVuY3Rpb24gKCBkaXNwbGF5T2JqZWN0LCBoaXQgKVxue1xuICAgIGlmKGhpdClcbiAgICB7XG4gICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudCggZGlzcGxheU9iamVjdCwgJ3RvdWNoZW5kJywgdGhpcy5ldmVudERhdGEgKTtcblxuICAgICAgICBpZiggZGlzcGxheU9iamVjdC5fdG91Y2hEb3duIClcbiAgICAgICAge1xuICAgICAgICAgICAgZGlzcGxheU9iamVjdC5fdG91Y2hEb3duID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLmRpc3BhdGNoRXZlbnQoIGRpc3BsYXlPYmplY3QsICd0YXAnLCB0aGlzLmV2ZW50RGF0YSApO1xuICAgICAgICB9XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIGlmKCBkaXNwbGF5T2JqZWN0Ll90b3VjaERvd24gKVxuICAgICAgICB7XG4gICAgICAgICAgICBkaXNwbGF5T2JqZWN0Ll90b3VjaERvd24gPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudCggZGlzcGxheU9iamVjdCwgJ3RvdWNoZW5kb3V0c2lkZScsIHRoaXMuZXZlbnREYXRhICk7XG4gICAgICAgIH1cbiAgICB9XG59O1xuXG4vKipcbiAqIElzIGNhbGxlZCB3aGVuIGEgdG91Y2ggaXMgbW92ZWQgYWNyb3NzIHRoZSByZW5kZXJlciBlbGVtZW50XG4gKlxuICogQHBhcmFtIGV2ZW50IHtFdmVudH0gVGhlIERPTSBldmVudCBvZiBhIHRvdWNoIG1vdmluZyBhY3Jvc3MgdGhlIHJlbmRlcmVyIHZpZXdcbiAqIEBwcml2YXRlXG4gKi9cbkludGVyYWN0aW9uTWFuYWdlci5wcm90b3R5cGUub25Ub3VjaE1vdmUgPSBmdW5jdGlvbiAoZXZlbnQpXG57XG4gICAgaWYgKHRoaXMuYXV0b1ByZXZlbnREZWZhdWx0KVxuICAgIHtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICB9XG5cbiAgICB2YXIgY2hhbmdlZFRvdWNoZXMgPSBldmVudC5jaGFuZ2VkVG91Y2hlcztcbiAgICB2YXIgY0xlbmd0aCA9IGNoYW5nZWRUb3VjaGVzLmxlbmd0aDtcblxuICAgIGZvciAodmFyIGk9MDsgaSA8IGNMZW5ndGg7IGkrKylcbiAgICB7XG4gICAgICAgIHZhciB0b3VjaEV2ZW50ID0gY2hhbmdlZFRvdWNoZXNbaV07XG5cbiAgICAgICAgdmFyIHRvdWNoRGF0YSA9IHRoaXMuZ2V0VG91Y2hEYXRhKCB0b3VjaEV2ZW50ICk7XG5cbiAgICAgICAgdG91Y2hEYXRhLm9yaWdpbmFsRXZlbnQgPSBldmVudDtcblxuICAgICAgICB0aGlzLmV2ZW50RGF0YS5kYXRhID0gdG91Y2hEYXRhO1xuICAgICAgICB0aGlzLmV2ZW50RGF0YS5zdG9wcGVkID0gZmFsc2U7XG5cbiAgICAgICAgdGhpcy5wcm9jZXNzSW50ZXJhY3RpdmUoIHRvdWNoRGF0YS5nbG9iYWwsIHRoaXMucmVuZGVyZXIuX2xhc3RPYmplY3RSZW5kZXJlZCwgdGhpcy5wcm9jZXNzVG91Y2hNb3ZlLCB0cnVlICk7XG5cbiAgICAgICAgdGhpcy5yZXR1cm5Ub3VjaERhdGEoIHRvdWNoRGF0YSApO1xuICAgIH1cbn07XG5cbi8qKlxuICogUHJvY2Vzc2VzIHRoZSByZXN1bHQgb2YgYSB0b3VjaCBtb3ZlIGNoZWNrIGFuZCBkaXNwYXRjaGVzIHRoZSBldmVudCBpZiBuZWVkIGJlXG4gKlxuICogQHBhcmFtIGRpc3BsYXlPYmplY3Qge1BJWEkuQ29udGFpbmVyfFBJWEkuU3ByaXRlfFBJWEkuZXh0cmFzLlRpbGluZ1Nwcml0ZX0gVGhlIGRpc3BsYXkgb2JqZWN0IHRoYXQgd2FzIHRlc3RlZFxuICogQHBhcmFtIGhpdCB7Ym9vbGVhbn0gdGhlIHJlc3VsdCBvZiB0aGUgaGl0IHRlc3Qgb24gdGhlIGRpc3BsYXkgb2JqZWN0XG4gKiBAcHJpdmF0ZVxuICovXG5JbnRlcmFjdGlvbk1hbmFnZXIucHJvdG90eXBlLnByb2Nlc3NUb3VjaE1vdmUgPSBmdW5jdGlvbiAoIGRpc3BsYXlPYmplY3QsIGhpdCApXG57XG4gICAgaGl0ID0gaGl0O1xuICAgIHRoaXMuZGlzcGF0Y2hFdmVudCggZGlzcGxheU9iamVjdCwgJ3RvdWNobW92ZScsIHRoaXMuZXZlbnREYXRhKTtcbn07XG5cbi8qKlxuICogR3JhYnMgYW4gaW50ZXJhY3Rpb24gZGF0YSBvYmplY3QgZnJvbSB0aGUgaW50ZXJuYWwgcG9vbFxuICpcbiAqIEBwYXJhbSB0b3VjaEV2ZW50IHtFdmVudERhdGF9IFRoZSB0b3VjaCBldmVudCB3ZSBuZWVkIHRvIHBhaXIgd2l0aCBhbiBpbnRlcmFjdGlvbkRhdGEgb2JqZWN0XG4gKlxuICogQHByaXZhdGVcbiAqL1xuSW50ZXJhY3Rpb25NYW5hZ2VyLnByb3RvdHlwZS5nZXRUb3VjaERhdGEgPSBmdW5jdGlvbiAodG91Y2hFdmVudClcbntcbiAgICB2YXIgdG91Y2hEYXRhID0gdGhpcy5pbnRlcmFjdGl2ZURhdGFQb29sLnBvcCgpO1xuXG4gICAgaWYoIXRvdWNoRGF0YSlcbiAgICB7XG4gICAgICAgIHRvdWNoRGF0YSA9IG5ldyBJbnRlcmFjdGlvbkRhdGEoKTtcbiAgICB9XG5cbiAgICB0b3VjaERhdGEuaWRlbnRpZmllciA9IHRvdWNoRXZlbnQuaWRlbnRpZmllcjtcbiAgICB0aGlzLm1hcFBvc2l0aW9uVG9Qb2ludCggdG91Y2hEYXRhLmdsb2JhbCwgdG91Y2hFdmVudC5jbGllbnRYLCB0b3VjaEV2ZW50LmNsaWVudFkgKTtcblxuICAgIGlmKG5hdmlnYXRvci5pc0NvY29vbkpTKVxuICAgIHtcbiAgICAgICAgdG91Y2hEYXRhLmdsb2JhbC54ID0gdG91Y2hEYXRhLmdsb2JhbC54IC8gdGhpcy5yZXNvbHV0aW9uO1xuICAgICAgICB0b3VjaERhdGEuZ2xvYmFsLnkgPSB0b3VjaERhdGEuZ2xvYmFsLnkgLyB0aGlzLnJlc29sdXRpb247XG4gICAgfVxuXG4gICAgdG91Y2hFdmVudC5nbG9iYWxYID0gdG91Y2hEYXRhLmdsb2JhbC54O1xuICAgIHRvdWNoRXZlbnQuZ2xvYmFsWSA9IHRvdWNoRGF0YS5nbG9iYWwueTtcblxuICAgIHJldHVybiB0b3VjaERhdGE7XG59O1xuXG4vKipcbiAqIFJldHVybnMgYW4gaW50ZXJhY3Rpb24gZGF0YSBvYmplY3QgdG8gdGhlIGludGVybmFsIHBvb2xcbiAqXG4gKiBAcGFyYW0gdG91Y2hEYXRhIHtQSVhJLmludGVyYWN0aW9uLkludGVyYWN0aW9uRGF0YX0gVGhlIHRvdWNoIGRhdGEgb2JqZWN0IHdlIHdhbnQgdG8gcmV0dXJuIHRvIHRoZSBwb29sXG4gKlxuICogQHByaXZhdGVcbiAqL1xuSW50ZXJhY3Rpb25NYW5hZ2VyLnByb3RvdHlwZS5yZXR1cm5Ub3VjaERhdGEgPSBmdW5jdGlvbiAoIHRvdWNoRGF0YSApXG57XG4gICAgdGhpcy5pbnRlcmFjdGl2ZURhdGFQb29sLnB1c2goIHRvdWNoRGF0YSApO1xufTtcblxuLyoqXG4gKiBEZXN0cm95cyB0aGUgaW50ZXJhY3Rpb24gbWFuYWdlclxuICpcbiAqL1xuSW50ZXJhY3Rpb25NYW5hZ2VyLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKCkge1xuICAgIHRoaXMucmVtb3ZlRXZlbnRzKCk7XG5cbiAgICB0aGlzLnJlbmRlcmVyID0gbnVsbDtcblxuICAgIHRoaXMubW91c2UgPSBudWxsO1xuXG4gICAgdGhpcy5ldmVudERhdGEgPSBudWxsO1xuXG4gICAgdGhpcy5pbnRlcmFjdGl2ZURhdGFQb29sID0gbnVsbDtcblxuICAgIHRoaXMuaW50ZXJhY3Rpb25ET01FbGVtZW50ID0gbnVsbDtcblxuICAgIHRoaXMub25Nb3VzZVVwID0gbnVsbDtcbiAgICB0aGlzLnByb2Nlc3NNb3VzZVVwID0gbnVsbDtcblxuXG4gICAgdGhpcy5vbk1vdXNlRG93biA9IG51bGw7XG4gICAgdGhpcy5wcm9jZXNzTW91c2VEb3duID0gbnVsbDtcblxuICAgIHRoaXMub25Nb3VzZU1vdmUgPSBudWxsO1xuICAgIHRoaXMucHJvY2Vzc01vdXNlTW92ZSA9IG51bGw7XG5cbiAgICB0aGlzLm9uTW91c2VPdXQgPSBudWxsO1xuICAgIHRoaXMucHJvY2Vzc01vdXNlT3Zlck91dCA9IG51bGw7XG5cblxuICAgIHRoaXMub25Ub3VjaFN0YXJ0ID0gbnVsbDtcbiAgICB0aGlzLnByb2Nlc3NUb3VjaFN0YXJ0ID0gbnVsbDtcblxuICAgIHRoaXMub25Ub3VjaEVuZCA9IG51bGw7XG4gICAgdGhpcy5wcm9jZXNzVG91Y2hFbmQgPSBudWxsO1xuXG4gICAgdGhpcy5vblRvdWNoTW92ZSA9IG51bGw7XG4gICAgdGhpcy5wcm9jZXNzVG91Y2hNb3ZlID0gbnVsbDtcblxuICAgIHRoaXMuX3RlbXBQb2ludCA9IG51bGw7XG59O1xuXG5jb3JlLldlYkdMUmVuZGVyZXIucmVnaXN0ZXJQbHVnaW4oJ2ludGVyYWN0aW9uJywgSW50ZXJhY3Rpb25NYW5hZ2VyKTtcbmNvcmUuQ2FudmFzUmVuZGVyZXIucmVnaXN0ZXJQbHVnaW4oJ2ludGVyYWN0aW9uJywgSW50ZXJhY3Rpb25NYW5hZ2VyKTtcbiIsIi8qKlxuICogQGZpbGUgICAgICAgIE1haW4gZXhwb3J0IG9mIHRoZSBQSVhJIGludGVyYWN0aW9ucyBsaWJyYXJ5XG4gKiBAYXV0aG9yICAgICAgTWF0IEdyb3ZlcyA8bWF0QGdvb2Rib3lkaWdpdGFsLmNvbT5cbiAqIEBjb3B5cmlnaHQgICAyMDEzLTIwMTUgR29vZEJveURpZ2l0YWxcbiAqIEBsaWNlbnNlICAgICB7QGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL3BpeGlqcy9waXhpLmpzL2Jsb2IvbWFzdGVyL0xJQ0VOU0V8TUlUIExpY2Vuc2V9XG4gKi9cblxuLyoqXG4gKiBAbmFtZXNwYWNlIFBJWEkuaW50ZXJhY3Rpb25cbiAqL1xubW9kdWxlLmV4cG9ydHMgPSB7XG4gICAgSW50ZXJhY3Rpb25EYXRhOiAgICByZXF1aXJlKCcuL0ludGVyYWN0aW9uRGF0YScpLFxuICAgIEludGVyYWN0aW9uTWFuYWdlcjogcmVxdWlyZSgnLi9JbnRlcmFjdGlvbk1hbmFnZXInKSxcbiAgICBpbnRlcmFjdGl2ZVRhcmdldDogIHJlcXVpcmUoJy4vaW50ZXJhY3RpdmVUYXJnZXQnKVxufTtcbiIsIi8qKlxuICogRGVmYXVsdCBwcm9wZXJ0eSB2YWx1ZXMgb2YgaW50ZXJhY3RpdmUgb2JqZWN0c1xuICogdXNlZCBieSB7QGxpbmsgUElYSS5pbnRlcmFjdGlvbi5JbnRlcmFjdGlvbk1hbmFnZXJ9LlxuICpcbiAqIEBtaXhpblxuICogQG1lbWJlcm9mIFBJWEkuaW50ZXJhY3Rpb25cbiAqIEBleGFtcGxlXG4gKiAgICAgIGZ1bmN0aW9uIE15T2JqZWN0KCkge31cbiAqXG4gKiAgICAgIE9iamVjdC5hc3NpZ24oXG4gKiAgICAgICAgICBNeU9iamVjdC5wcm90b3R5cGUsXG4gKiAgICAgICAgICBQSVhJLmludGVyYWN0aW9uLmludGVyYWN0aXZlVGFyZ2V0XG4gKiAgICAgICk7XG4gKi9cbnZhciBpbnRlcmFjdGl2ZVRhcmdldCA9IHtcbiAgICAvKipcbiAgICAgKiBAdG9kbyBOZWVkcyBkb2NzLlxuICAgICAqL1xuICAgIGludGVyYWN0aXZlOiBmYWxzZSxcbiAgICAvKipcbiAgICAgKiBAdG9kbyBOZWVkcyBkb2NzLlxuICAgICAqL1xuICAgIGJ1dHRvbk1vZGU6IGZhbHNlLFxuICAgIC8qKlxuICAgICAqIEB0b2RvIE5lZWRzIGRvY3MuXG4gICAgICovXG4gICAgaW50ZXJhY3RpdmVDaGlsZHJlbjogdHJ1ZSxcbiAgICAvKipcbiAgICAgKiBAdG9kbyBOZWVkcyBkb2NzLlxuICAgICAqL1xuICAgIGRlZmF1bHRDdXJzb3I6ICdwb2ludGVyJyxcblxuICAgIC8vIHNvbWUgaW50ZXJuYWwgY2hlY2tzLi5cblxuICAgIC8qKlxuICAgICAqIEB0b2RvIE5lZWRzIGRvY3MuXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICBfb3ZlcjogZmFsc2UsXG4gICAgLyoqXG4gICAgICogQHRvZG8gTmVlZHMgZG9jcy5cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIF90b3VjaERvd246IGZhbHNlXG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGludGVyYWN0aXZlVGFyZ2V0O1xuIiwidmFyIFJlc291cmNlID0gcmVxdWlyZSgncmVzb3VyY2UtbG9hZGVyJykuUmVzb3VyY2UsXG4gICAgY29yZSA9IHJlcXVpcmUoJy4uL2NvcmUnKSxcbiAgICBleHRyYXMgPSByZXF1aXJlKCcuLi9leHRyYXMnKSxcbiAgICBwYXRoID0gcmVxdWlyZSgncGF0aCcpO1xuXG5cbmZ1bmN0aW9uIHBhcnNlKHJlc291cmNlLCB0ZXh0dXJlKSB7XG4gICAgdmFyIGRhdGEgPSB7fTtcbiAgICB2YXIgaW5mbyA9IHJlc291cmNlLmRhdGEuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2luZm8nKVswXTtcbiAgICB2YXIgY29tbW9uID0gcmVzb3VyY2UuZGF0YS5nZXRFbGVtZW50c0J5VGFnTmFtZSgnY29tbW9uJylbMF07XG5cbiAgICBkYXRhLmZvbnQgPSBpbmZvLmdldEF0dHJpYnV0ZSgnZmFjZScpO1xuICAgIGRhdGEuc2l6ZSA9IHBhcnNlSW50KGluZm8uZ2V0QXR0cmlidXRlKCdzaXplJyksIDEwKTtcbiAgICBkYXRhLmxpbmVIZWlnaHQgPSBwYXJzZUludChjb21tb24uZ2V0QXR0cmlidXRlKCdsaW5lSGVpZ2h0JyksIDEwKTtcbiAgICBkYXRhLmNoYXJzID0ge307XG5cbiAgICAvL3BhcnNlIGxldHRlcnNcbiAgICB2YXIgbGV0dGVycyA9IHJlc291cmNlLmRhdGEuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2NoYXInKTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGV0dGVycy5sZW5ndGg7IGkrKylcbiAgICB7XG4gICAgICAgIHZhciBjaGFyQ29kZSA9IHBhcnNlSW50KGxldHRlcnNbaV0uZ2V0QXR0cmlidXRlKCdpZCcpLCAxMCk7XG5cbiAgICAgICAgdmFyIHRleHR1cmVSZWN0ID0gbmV3IGNvcmUuUmVjdGFuZ2xlKFxuICAgICAgICAgICAgcGFyc2VJbnQobGV0dGVyc1tpXS5nZXRBdHRyaWJ1dGUoJ3gnKSwgMTApICsgdGV4dHVyZS5mcmFtZS54LFxuICAgICAgICAgICAgcGFyc2VJbnQobGV0dGVyc1tpXS5nZXRBdHRyaWJ1dGUoJ3knKSwgMTApICsgdGV4dHVyZS5mcmFtZS55LFxuICAgICAgICAgICAgcGFyc2VJbnQobGV0dGVyc1tpXS5nZXRBdHRyaWJ1dGUoJ3dpZHRoJyksIDEwKSxcbiAgICAgICAgICAgIHBhcnNlSW50KGxldHRlcnNbaV0uZ2V0QXR0cmlidXRlKCdoZWlnaHQnKSwgMTApXG4gICAgICAgICk7XG5cbiAgICAgICAgZGF0YS5jaGFyc1tjaGFyQ29kZV0gPSB7XG4gICAgICAgICAgICB4T2Zmc2V0OiBwYXJzZUludChsZXR0ZXJzW2ldLmdldEF0dHJpYnV0ZSgneG9mZnNldCcpLCAxMCksXG4gICAgICAgICAgICB5T2Zmc2V0OiBwYXJzZUludChsZXR0ZXJzW2ldLmdldEF0dHJpYnV0ZSgneW9mZnNldCcpLCAxMCksXG4gICAgICAgICAgICB4QWR2YW5jZTogcGFyc2VJbnQobGV0dGVyc1tpXS5nZXRBdHRyaWJ1dGUoJ3hhZHZhbmNlJyksIDEwKSxcbiAgICAgICAgICAgIGtlcm5pbmc6IHt9LFxuICAgICAgICAgICAgdGV4dHVyZTogbmV3IGNvcmUuVGV4dHVyZSh0ZXh0dXJlLmJhc2VUZXh0dXJlLCB0ZXh0dXJlUmVjdClcblxuICAgICAgICB9O1xuICAgIH1cblxuICAgIC8vcGFyc2Uga2VybmluZ3NcbiAgICB2YXIga2VybmluZ3MgPSByZXNvdXJjZS5kYXRhLmdldEVsZW1lbnRzQnlUYWdOYW1lKCdrZXJuaW5nJyk7XG4gICAgZm9yIChpID0gMDsgaSA8IGtlcm5pbmdzLmxlbmd0aDsgaSsrKVxuICAgIHtcbiAgICAgICAgdmFyIGZpcnN0ID0gcGFyc2VJbnQoa2VybmluZ3NbaV0uZ2V0QXR0cmlidXRlKCdmaXJzdCcpLCAxMCk7XG4gICAgICAgIHZhciBzZWNvbmQgPSBwYXJzZUludChrZXJuaW5nc1tpXS5nZXRBdHRyaWJ1dGUoJ3NlY29uZCcpLCAxMCk7XG4gICAgICAgIHZhciBhbW91bnQgPSBwYXJzZUludChrZXJuaW5nc1tpXS5nZXRBdHRyaWJ1dGUoJ2Ftb3VudCcpLCAxMCk7XG5cbiAgICAgICAgZGF0YS5jaGFyc1tzZWNvbmRdLmtlcm5pbmdbZmlyc3RdID0gYW1vdW50O1xuICAgIH1cblxuICAgIHJlc291cmNlLmJpdG1hcEZvbnQgPSBkYXRhO1xuXG4gICAgLy8gSSdtIGxlYXZpbmcgdGhpcyBhcyBhIHRlbXBvcmFyeSBmaXggc28gd2UgY2FuIHRlc3QgdGhlIGJpdG1hcCBmb250cyBpbiB2M1xuICAgIC8vIGJ1dCBpdCdzIHZlcnkgbGlrZWx5IHRvIGNoYW5nZVxuICAgIGV4dHJhcy5CaXRtYXBUZXh0LmZvbnRzW2RhdGEuZm9udF0gPSBkYXRhO1xufVxuXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKClcbntcbiAgICByZXR1cm4gZnVuY3Rpb24gKHJlc291cmNlLCBuZXh0KVxuICAgIHtcbiAgICAgICAgLy8gc2tpcCBpZiBubyBkYXRhIG9yIG5vdCB4bWwgZGF0YVxuICAgICAgICBpZiAoIXJlc291cmNlLmRhdGEgfHwgIXJlc291cmNlLmlzWG1sKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gbmV4dCgpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gc2tpcCBpZiBub3QgYml0bWFwIGZvbnQgZGF0YSwgdXNpbmcgc29tZSBzaWxseSBkdWNrLXR5cGluZ1xuICAgICAgICBpZiAoXG4gICAgICAgICAgICByZXNvdXJjZS5kYXRhLmdldEVsZW1lbnRzQnlUYWdOYW1lKCdwYWdlJykubGVuZ3RoID09PSAwIHx8XG4gICAgICAgICAgICByZXNvdXJjZS5kYXRhLmdldEVsZW1lbnRzQnlUYWdOYW1lKCdpbmZvJykubGVuZ3RoID09PSAwIHx8XG4gICAgICAgICAgICByZXNvdXJjZS5kYXRhLmdldEVsZW1lbnRzQnlUYWdOYW1lKCdpbmZvJylbMF0uZ2V0QXR0cmlidXRlKCdmYWNlJykgPT09IG51bGxcbiAgICAgICAgICAgIClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIG5leHQoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciB4bWxVcmwgPSBwYXRoLmRpcm5hbWUocmVzb3VyY2UudXJsKTtcblxuICAgICAgICBpZiAoeG1sVXJsID09PSAnLicpIHtcbiAgICAgICAgICAgIHhtbFVybCA9ICcnO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuYmFzZVVybCAmJiB4bWxVcmwpIHtcbiAgICAgICAgICAgIC8vIGlmIGJhc2V1cmwgaGFzIGEgdHJhaWxpbmcgc2xhc2ggdGhlbiBhZGQgb25lIHRvIHhtbFVybCBzbyB0aGUgcmVwbGFjZSB3b3JrcyBiZWxvd1xuICAgICAgICAgICAgaWYgKHRoaXMuYmFzZVVybC5jaGFyQXQodGhpcy5iYXNlVXJsLmxlbmd0aCAtIDEpID09PSAnLycpIHtcbiAgICAgICAgICAgICAgICB4bWxVcmwgKz0gJy8nO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyByZW1vdmUgYmFzZVVybCBmcm9tIHhtbFVybFxuICAgICAgICAgICAgeG1sVXJsID0geG1sVXJsLnJlcGxhY2UodGhpcy5iYXNlVXJsLCAnJyk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBpZiB0aGVyZSBpcyBhbiB4bWxVcmwgbm93LCBpdCBuZWVkcyBhIHRyYWlsaW5nIHNsYXNoLiBFbnN1cmUgdGhhdCBpdCBkb2VzIGlmIHRoZSBzdHJpbmcgaXNuJ3QgZW1wdHkuXG4gICAgICAgIGlmICh4bWxVcmwgJiYgeG1sVXJsLmNoYXJBdCh4bWxVcmwubGVuZ3RoIC0gMSkgIT09ICcvJykge1xuICAgICAgICAgICAgeG1sVXJsICs9ICcvJztcbiAgICAgICAgfVxuICAgICAgICB2YXIgdGV4dHVyZVVybCA9IHhtbFVybCArIHJlc291cmNlLmRhdGEuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ3BhZ2UnKVswXS5nZXRBdHRyaWJ1dGUoJ2ZpbGUnKTtcbiAgICAgICAgaWYgKGNvcmUudXRpbHMuVGV4dHVyZUNhY2hlW3RleHR1cmVVcmxdKSB7XG4gICAgICAgICAgICAvL3JldXNlIGV4aXN0aW5nIHRleHR1cmVcbiAgICAgICAgICAgIHBhcnNlKHJlc291cmNlLCBjb3JlLnV0aWxzLlRleHR1cmVDYWNoZVt0ZXh0dXJlVXJsXSk7XG4gICAgICAgICAgICBuZXh0KCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB2YXIgbG9hZE9wdGlvbnMgPSB7XG4gICAgICAgICAgICAgICAgY3Jvc3NPcmlnaW46IHJlc291cmNlLmNyb3NzT3JpZ2luLFxuICAgICAgICAgICAgICAgIGxvYWRUeXBlOiBSZXNvdXJjZS5MT0FEX1RZUEUuSU1BR0UsXG4gICAgICAgICAgICAgICAgbWV0YWRhdGE6IHJlc291cmNlLm1ldGFkYXRhLmltYWdlTWV0YWRhdGFcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICAvLyBsb2FkIHRoZSB0ZXh0dXJlIGZvciB0aGUgZm9udFxuICAgICAgICAgICAgdGhpcy5hZGQocmVzb3VyY2UubmFtZSArICdfaW1hZ2UnLCB0ZXh0dXJlVXJsLCBsb2FkT3B0aW9ucywgZnVuY3Rpb24gKHJlcykge1xuICAgICAgICAgICAgICAgIHBhcnNlKHJlc291cmNlLCByZXMudGV4dHVyZSk7XG4gICAgICAgICAgICAgICAgbmV4dCgpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9O1xufTtcbiIsIi8qKlxuICogQGZpbGUgICAgICAgIE1haW4gZXhwb3J0IG9mIHRoZSBQSVhJIGxvYWRlcnMgbGlicmFyeVxuICogQGF1dGhvciAgICAgIE1hdCBHcm92ZXMgPG1hdEBnb29kYm95ZGlnaXRhbC5jb20+XG4gKiBAY29weXJpZ2h0ICAgMjAxMy0yMDE1IEdvb2RCb3lEaWdpdGFsXG4gKiBAbGljZW5zZSAgICAge0BsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9waXhpanMvcGl4aS5qcy9ibG9iL21hc3Rlci9MSUNFTlNFfE1JVCBMaWNlbnNlfVxuICovXG5cbi8qKlxuICogQG5hbWVzcGFjZSBQSVhJLmxvYWRlcnNcbiAqL1xubW9kdWxlLmV4cG9ydHMgPSB7XG4gICAgTG9hZGVyOiAgICAgICAgICAgICByZXF1aXJlKCcuL2xvYWRlcicpLFxuXG4gICAgLy8gcGFyc2Vyc1xuICAgIGJpdG1hcEZvbnRQYXJzZXI6ICAgcmVxdWlyZSgnLi9iaXRtYXBGb250UGFyc2VyJyksXG4gICAgc3ByaXRlc2hlZXRQYXJzZXI6ICByZXF1aXJlKCcuL3Nwcml0ZXNoZWV0UGFyc2VyJyksXG4gICAgdGV4dHVyZVBhcnNlcjogICAgICByZXF1aXJlKCcuL3RleHR1cmVQYXJzZXInKSxcbiAgICBSZXNvdXJjZTogICAgICAgICAgIHJlcXVpcmUoJ3Jlc291cmNlLWxvYWRlcicpLlJlc291cmNlXG59O1xuIiwidmFyIFJlc291cmNlTG9hZGVyID0gcmVxdWlyZSgncmVzb3VyY2UtbG9hZGVyJyksXG4gICAgdGV4dHVyZVBhcnNlciA9IHJlcXVpcmUoJy4vdGV4dHVyZVBhcnNlcicpLFxuICAgIHNwcml0ZXNoZWV0UGFyc2VyID0gcmVxdWlyZSgnLi9zcHJpdGVzaGVldFBhcnNlcicpLFxuICAgIGJpdG1hcEZvbnRQYXJzZXIgPSByZXF1aXJlKCcuL2JpdG1hcEZvbnRQYXJzZXInKTtcblxuLyoqXG4gKlxuICogVGhlIG5ldyBsb2FkZXIsIGV4dGVuZHMgUmVzb3VyY2UgTG9hZGVyIGJ5IENoYWQgRW5nbGVyIDogaHR0cHM6Ly9naXRodWIuY29tL2VuZ2xlcmNqL3Jlc291cmNlLWxvYWRlclxuICpcbiAqIGBgYGpzXG4gKiB2YXIgbG9hZGVyID0gUElYSS5sb2FkZXI7IC8vIHBpeGkgZXhwb3NlcyBhIHByZW1hZGUgaW5zdGFuY2UgZm9yIHlvdSB0byB1c2UuXG4gKiAvL29yXG4gKiB2YXIgbG9hZGVyID0gbmV3IFBJWEkubG9hZGVycy5Mb2FkZXIoKTsgLy8geW91IGNhbiBhbHNvIGNyZWF0ZSB5b3VyIG93biBpZiB5b3Ugd2FudFxuICpcbiAqIGxvYWRlci5hZGQoJ2J1bm55JyxcImRhdGEvYnVubnkucG5nXCIpO1xuICpcbiAqIGxvYWRlci5vbmNlKCdjb21wbGV0ZScsb25Bc3NldHNMb2FkZWQpO1xuICpcbiAqIGxvYWRlci5sb2FkKCk7XG4gKiBgYGBcbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuUmVzb3VyY2VMb2FkZXJcbiAqIEBtZW1iZXJvZiBQSVhJLmxvYWRlcnNcbiAqIEBwYXJhbSBbYmFzZVVybD0nJ10ge3N0cmluZ30gVGhlIGJhc2UgdXJsIGZvciBhbGwgcmVzb3VyY2VzIGxvYWRlZCBieSB0aGlzIGxvYWRlci5cbiAqIEBwYXJhbSBbY29uY3VycmVuY3k9MTBdIHtudW1iZXJ9IFRoZSBudW1iZXIgb2YgcmVzb3VyY2VzIHRvIGxvYWQgY29uY3VycmVudGx5LlxuICovXG5mdW5jdGlvbiBMb2FkZXIoYmFzZVVybCwgY29uY3VycmVuY3kpXG57XG4gICAgUmVzb3VyY2VMb2FkZXIuY2FsbCh0aGlzLCBiYXNlVXJsLCBjb25jdXJyZW5jeSk7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IExvYWRlci5fcGl4aU1pZGRsZXdhcmUubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgdGhpcy51c2UoTG9hZGVyLl9waXhpTWlkZGxld2FyZVtpXSgpKTtcbiAgICB9XG59XG5cbkxvYWRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFJlc291cmNlTG9hZGVyLnByb3RvdHlwZSk7XG5Mb2FkZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gTG9hZGVyO1xuXG5tb2R1bGUuZXhwb3J0cyA9IExvYWRlcjtcblxuTG9hZGVyLl9waXhpTWlkZGxld2FyZSA9IFtcbiAgICAvLyBwYXJzZSBhbnkgYmxvYiBpbnRvIG1vcmUgdXNhYmxlIG9iamVjdHMgKGUuZy4gSW1hZ2UpXG4gICAgUmVzb3VyY2VMb2FkZXIubWlkZGxld2FyZS5wYXJzaW5nLmJsb2IsXG4gICAgLy8gcGFyc2UgYW55IEltYWdlIG9iamVjdHMgaW50byB0ZXh0dXJlc1xuICAgIHRleHR1cmVQYXJzZXIsXG4gICAgLy8gcGFyc2UgYW55IHNwcml0ZXNoZWV0IGRhdGEgaW50byBtdWx0aXBsZSB0ZXh0dXJlc1xuICAgIHNwcml0ZXNoZWV0UGFyc2VyLFxuICAgIC8vIHBhcnNlIGFueSBzcHJpdGVzaGVldCBkYXRhIGludG8gbXVsdGlwbGUgdGV4dHVyZXNcbiAgICBiaXRtYXBGb250UGFyc2VyXG5dO1xuXG5Mb2FkZXIuYWRkUGl4aU1pZGRsZXdhcmUgPSBmdW5jdGlvbiAoZm4pIHtcbiAgICBMb2FkZXIuX3BpeGlNaWRkbGV3YXJlLnB1c2goZm4pO1xufTtcblxuLy8gQWRkIGN1c3RvbSBleHRlbnRpb25zXG52YXIgUmVzb3VyY2UgPSBSZXNvdXJjZUxvYWRlci5SZXNvdXJjZTtcblxuUmVzb3VyY2Uuc2V0RXh0ZW5zaW9uWGhyVHlwZSgnZm50JywgUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuRE9DVU1FTlQpO1xuIiwidmFyIFJlc291cmNlID0gcmVxdWlyZSgncmVzb3VyY2UtbG9hZGVyJykuUmVzb3VyY2UsXG4gICAgcGF0aCA9IHJlcXVpcmUoJ3BhdGgnKSxcbiAgICBjb3JlID0gcmVxdWlyZSgnLi4vY29yZScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICgpXG57XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChyZXNvdXJjZSwgbmV4dClcbiAgICB7XG4gICAgICAgIC8vIHNraXAgaWYgbm8gZGF0YSwgaXRzIG5vdCBqc29uLCBvciBpdCBpc24ndCBzcHJpdGVzaGVldCBkYXRhXG4gICAgICAgIGlmICghcmVzb3VyY2UuZGF0YSB8fCAhcmVzb3VyY2UuaXNKc29uIHx8ICFyZXNvdXJjZS5kYXRhLmZyYW1lcylcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIG5leHQoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBsb2FkT3B0aW9ucyA9IHtcbiAgICAgICAgICAgIGNyb3NzT3JpZ2luOiByZXNvdXJjZS5jcm9zc09yaWdpbixcbiAgICAgICAgICAgIGxvYWRUeXBlOiBSZXNvdXJjZS5MT0FEX1RZUEUuSU1BR0UsXG4gICAgICAgICAgICBtZXRhZGF0YTogcmVzb3VyY2UubWV0YWRhdGEuaW1hZ2VNZXRhZGF0YVxuICAgICAgICB9O1xuXG4gICAgICAgIHZhciByb3V0ZSA9IHBhdGguZGlybmFtZShyZXNvdXJjZS51cmwucmVwbGFjZSh0aGlzLmJhc2VVcmwsICcnKSk7XG5cbiAgICAgICAgdmFyIHJlc29sdXRpb24gPSBjb3JlLnV0aWxzLmdldFJlc29sdXRpb25PZlVybCggcmVzb3VyY2UudXJsICk7XG5cbiAgICAgICAgLy8gbG9hZCB0aGUgaW1hZ2UgZm9yIHRoaXMgc2hlZXRcbiAgICAgICAgdGhpcy5hZGQocmVzb3VyY2UubmFtZSArICdfaW1hZ2UnLCByb3V0ZSArICcvJyArIHJlc291cmNlLmRhdGEubWV0YS5pbWFnZSwgbG9hZE9wdGlvbnMsIGZ1bmN0aW9uIChyZXMpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJlc291cmNlLnRleHR1cmVzID0ge307XG5cbiAgICAgICAgICAgIHZhciBmcmFtZXMgPSByZXNvdXJjZS5kYXRhLmZyYW1lcztcblxuICAgICAgICAgICAgZm9yICh2YXIgaSBpbiBmcmFtZXMpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdmFyIHJlY3QgPSBmcmFtZXNbaV0uZnJhbWU7XG5cbiAgICAgICAgICAgICAgICBpZiAocmVjdClcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBzaXplID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHRyaW0gPSBudWxsO1xuXG4gICAgICAgICAgICAgICAgICAgIGlmIChmcmFtZXNbaV0ucm90YXRlZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZSA9IG5ldyBjb3JlLlJlY3RhbmdsZShyZWN0LngsIHJlY3QueSwgcmVjdC5oLCByZWN0LncpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZSA9IG5ldyBjb3JlLlJlY3RhbmdsZShyZWN0LngsIHJlY3QueSwgcmVjdC53LCByZWN0LmgpO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgLy8gIENoZWNrIHRvIHNlZSBpZiB0aGUgc3ByaXRlIGlzIHRyaW1tZWRcbiAgICAgICAgICAgICAgICAgICAgaWYgKGZyYW1lc1tpXS50cmltbWVkKVxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0cmltID0gbmV3IGNvcmUuUmVjdGFuZ2xlKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyYW1lc1tpXS5zcHJpdGVTb3VyY2VTaXplLnggLyByZXNvbHV0aW9uLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyYW1lc1tpXS5zcHJpdGVTb3VyY2VTaXplLnkgLyByZXNvbHV0aW9uLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyYW1lc1tpXS5zb3VyY2VTaXplLncgLyByZXNvbHV0aW9uLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyYW1lc1tpXS5zb3VyY2VTaXplLmggLyByZXNvbHV0aW9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIC8vIGZsaXAgdGhlIHdpZHRoIGFuZCBoZWlnaHQhXG4gICAgICAgICAgICAgICAgICAgIGlmIChmcmFtZXNbaV0ucm90YXRlZClcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHRlbXAgPSBzaXplLndpZHRoO1xuICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZS53aWR0aCA9IHNpemUuaGVpZ2h0O1xuICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZS5oZWlnaHQgPSB0ZW1wO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgc2l6ZS54IC89IHJlc29sdXRpb247XG4gICAgICAgICAgICAgICAgICAgIHNpemUueSAvPSByZXNvbHV0aW9uO1xuICAgICAgICAgICAgICAgICAgICBzaXplLndpZHRoIC89IHJlc29sdXRpb247XG4gICAgICAgICAgICAgICAgICAgIHNpemUuaGVpZ2h0IC89IHJlc29sdXRpb247XG5cbiAgICAgICAgICAgICAgICAgICAgcmVzb3VyY2UudGV4dHVyZXNbaV0gPSBuZXcgY29yZS5UZXh0dXJlKHJlcy50ZXh0dXJlLmJhc2VUZXh0dXJlLCBzaXplLCBzaXplLmNsb25lKCksIHRyaW0sIGZyYW1lc1tpXS5yb3RhdGVkKTtcblxuICAgICAgICAgICAgICAgICAgICAvLyBsZXRzIGFsc28gYWRkIHRoZSBmcmFtZSB0byBwaXhpJ3MgZ2xvYmFsIGNhY2hlIGZvciBmcm9tRnJhbWUgYW5kIGZyb21JbWFnZSBmdW5jdGlvbnNcbiAgICAgICAgICAgICAgICAgICAgY29yZS51dGlscy5UZXh0dXJlQ2FjaGVbaV0gPSByZXNvdXJjZS50ZXh0dXJlc1tpXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIG5leHQoKTtcbiAgICAgICAgfSk7XG4gICAgfTtcbn07XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uL2NvcmUnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoKVxue1xuICAgIHJldHVybiBmdW5jdGlvbiAocmVzb3VyY2UsIG5leHQpXG4gICAge1xuICAgICAgICAvLyBjcmVhdGUgYSBuZXcgdGV4dHVyZSBpZiB0aGUgZGF0YSBpcyBhbiBJbWFnZSBvYmplY3RcbiAgICAgICAgaWYgKHJlc291cmNlLmRhdGEgJiYgcmVzb3VyY2UuaXNJbWFnZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdmFyIGJhc2VUZXh0dXJlID0gbmV3IGNvcmUuQmFzZVRleHR1cmUocmVzb3VyY2UuZGF0YSwgbnVsbCwgY29yZS51dGlscy5nZXRSZXNvbHV0aW9uT2ZVcmwocmVzb3VyY2UudXJsKSk7XG4gICAgICAgICAgICBiYXNlVGV4dHVyZS5pbWFnZVVybCA9IHJlc291cmNlLnVybDtcbiAgICAgICAgICAgIHJlc291cmNlLnRleHR1cmUgPSBuZXcgY29yZS5UZXh0dXJlKGJhc2VUZXh0dXJlKTtcbiAgICAgICAgICAgIC8vIGxldHMgYWxzbyBhZGQgdGhlIGZyYW1lIHRvIHBpeGkncyBnbG9iYWwgY2FjaGUgZm9yIGZyb21GcmFtZSBhbmQgZnJvbUltYWdlIGZ1Y250aW9uc1xuICAgICAgICAgICAgY29yZS51dGlscy5CYXNlVGV4dHVyZUNhY2hlW3Jlc291cmNlLnVybF0gPSBiYXNlVGV4dHVyZTtcbiAgICAgICAgICAgIGNvcmUudXRpbHMuVGV4dHVyZUNhY2hlW3Jlc291cmNlLnVybF0gPSByZXNvdXJjZS50ZXh0dXJlO1xuICAgICAgICB9XG5cbiAgICAgICAgbmV4dCgpO1xuICAgIH07XG59O1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi9jb3JlJyksXG4gICAgdGVtcFBvaW50ID0gbmV3IGNvcmUuUG9pbnQoKSxcbiAgICB0ZW1wUG9seWdvbiA9IG5ldyBjb3JlLlBvbHlnb24oKTtcblxuLyoqXG4gKiBCYXNlIG1lc2ggY2xhc3NcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5Db250YWluZXJcbiAqIEBtZW1iZXJvZiBQSVhJLm1lc2hcbiAqIEBwYXJhbSB0ZXh0dXJlIHtQSVhJLlRleHR1cmV9IFRoZSB0ZXh0dXJlIHRvIHVzZVxuICogQHBhcmFtIFt2ZXJ0aWNlc10ge0Zsb2F0MzJBcnJheX0gaWYgeW91IHdhbnQgdG8gc3BlY2lmeSB0aGUgdmVydGljZXNcbiAqIEBwYXJhbSBbdXZzXSB7RmxvYXQzMkFycmF5fSBpZiB5b3Ugd2FudCB0byBzcGVjaWZ5IHRoZSB1dnNcbiAqIEBwYXJhbSBbaW5kaWNlc10ge1VpbnQxNkFycmF5fSBpZiB5b3Ugd2FudCB0byBzcGVjaWZ5IHRoZSBpbmRpY2VzXG4gKiBAcGFyYW0gW2RyYXdNb2RlXSB7bnVtYmVyfSB0aGUgZHJhd01vZGUsIGNhbiBiZSBhbnkgb2YgdGhlIE1lc2guRFJBV19NT0RFUyBjb25zdHNcbiAqL1xuZnVuY3Rpb24gTWVzaCh0ZXh0dXJlLCB2ZXJ0aWNlcywgdXZzLCBpbmRpY2VzLCBkcmF3TW9kZSlcbntcbiAgICBjb3JlLkNvbnRhaW5lci5jYWxsKHRoaXMpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHRleHR1cmUgb2YgdGhlIE1lc2hcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuVGV4dHVyZX1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX3RleHR1cmUgPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogVGhlIFV2cyBvZiB0aGUgTWVzaFxuICAgICAqXG4gICAgICogQG1lbWJlciB7RmxvYXQzMkFycmF5fVxuICAgICAqL1xuICAgIHRoaXMudXZzID0gdXZzIHx8IG5ldyBGbG9hdDMyQXJyYXkoWzAsIDAsXG4gICAgICAgIDEsIDAsXG4gICAgICAgIDEsIDEsXG4gICAgICAgIDAsIDFdKTtcblxuICAgIC8qKlxuICAgICAqIEFuIGFycmF5IG9mIHZlcnRpY2VzXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtGbG9hdDMyQXJyYXl9XG4gICAgICovXG4gICAgdGhpcy52ZXJ0aWNlcyA9IHZlcnRpY2VzIHx8IG5ldyBGbG9hdDMyQXJyYXkoWzAsIDAsXG4gICAgICAgIDEwMCwgMCxcbiAgICAgICAgMTAwLCAxMDAsXG4gICAgICAgIDAsIDEwMF0pO1xuXG4gICAgLypcbiAgICAgKiBAbWVtYmVyIHtVaW50MTZBcnJheX0gQW4gYXJyYXkgY29udGFpbmluZyB0aGUgaW5kaWNlcyBvZiB0aGUgdmVydGljZXNcbiAgICAgKi9cbiAgICAvLyAgVE9ETyBhdXRvIGdlbmVyYXRlIHRoaXMgYmFzZWQgb24gZHJhdyBtb2RlIVxuICAgIHRoaXMuaW5kaWNlcyA9IGluZGljZXMgfHwgbmV3IFVpbnQxNkFycmF5KFswLCAxLCAzLCAyXSk7XG5cbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIHRoZSBNZXNoIGlzIGRpcnR5IG9yIG5vdFxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKi9cbiAgICB0aGlzLmRpcnR5ID0gdHJ1ZTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBibGVuZCBtb2RlIHRvIGJlIGFwcGxpZWQgdG8gdGhlIHNwcml0ZS4gU2V0IHRvIGBQSVhJLkJMRU5EX01PREVTLk5PUk1BTGAgdG8gcmVtb3ZlIGFueSBibGVuZCBtb2RlLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IFBJWEkuQkxFTkRfTU9ERVMuTk9STUFMXG4gICAgICogQHNlZSBQSVhJLkJMRU5EX01PREVTXG4gICAgICovXG4gICAgdGhpcy5ibGVuZE1vZGUgPSBjb3JlLkJMRU5EX01PREVTLk5PUk1BTDtcblxuICAgIC8qKlxuICAgICAqIFRyaWFuZ2xlcyBpbiBjYW52YXMgbW9kZSBhcmUgYXV0b21hdGljYWxseSBhbnRpYWxpYXNlZCwgdXNlIHRoaXMgdmFsdWUgdG8gZm9yY2UgdHJpYW5nbGVzIHRvIG92ZXJsYXAgYSBiaXQgd2l0aCBlYWNoIG90aGVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMuY2FudmFzUGFkZGluZyA9IDA7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgd2F5IHRoZSBNZXNoIHNob3VsZCBiZSBkcmF3biwgY2FuIGJlIGFueSBvZiB0aGUge0BsaW5rIFBJWEkubWVzaC5NZXNoLkRSQVdfTU9ERVN9IGNvbnN0c1xuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBzZWUgUElYSS5tZXNoLk1lc2guRFJBV19NT0RFU1xuICAgICAqL1xuICAgIHRoaXMuZHJhd01vZGUgPSBkcmF3TW9kZSB8fCBNZXNoLkRSQVdfTU9ERVMuVFJJQU5HTEVfTUVTSDtcblxuICAgIC8vIHJ1biB0ZXh0dXJlIHNldHRlcjtcbiAgICB0aGlzLnRleHR1cmUgPSB0ZXh0dXJlO1xuXG4gICAgIC8qKlxuICAgICAqIFRoZSBkZWZhdWx0IHNoYWRlciB0aGF0IGlzIHVzZWQgaWYgYSBtZXNoIGRvZXNuJ3QgaGF2ZSBhIG1vcmUgc3BlY2lmaWMgb25lLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5TaGFkZXJ9XG4gICAgICovXG4gICAgdGhpcy5zaGFkZXIgPSBudWxsO1xufVxuXG4vLyBjb25zdHJ1Y3RvclxuTWVzaC5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuQ29udGFpbmVyLnByb3RvdHlwZSk7XG5NZXNoLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IE1lc2g7XG5tb2R1bGUuZXhwb3J0cyA9IE1lc2g7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKE1lc2gucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogVGhlIHRleHR1cmUgdGhhdCB0aGUgc3ByaXRlIGlzIHVzaW5nXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlRleHR1cmV9XG4gICAgICogQG1lbWJlcm9mIFBJWEkubWVzaC5NZXNoI1xuICAgICAqL1xuICAgIHRleHR1cmU6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gIHRoaXMuX3RleHR1cmU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICBpZiAodGhpcy5fdGV4dHVyZSA9PT0gdmFsdWUpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLl90ZXh0dXJlID0gdmFsdWU7XG5cbiAgICAgICAgICAgIGlmICh2YWx1ZSlcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAvLyB3YWl0IGZvciB0aGUgdGV4dHVyZSB0byBsb2FkXG4gICAgICAgICAgICAgICAgaWYgKHZhbHVlLmJhc2VUZXh0dXJlLmhhc0xvYWRlZClcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX29uVGV4dHVyZVVwZGF0ZSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICB2YWx1ZS5vbmNlKCd1cGRhdGUnLCB0aGlzLl9vblRleHR1cmVVcGRhdGUsIHRoaXMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn0pO1xuXG4vKipcbiAqIFJlbmRlcnMgdGhlIG9iamVjdCB1c2luZyB0aGUgV2ViR0wgcmVuZGVyZXJcbiAqXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcn0gYSByZWZlcmVuY2UgdG8gdGhlIFdlYkdMIHJlbmRlcmVyXG4gKiBAcHJpdmF0ZVxuICovXG5NZXNoLnByb3RvdHlwZS5fcmVuZGVyV2ViR0wgPSBmdW5jdGlvbiAocmVuZGVyZXIpXG57XG4gICAgcmVuZGVyZXIuc2V0T2JqZWN0UmVuZGVyZXIocmVuZGVyZXIucGx1Z2lucy5tZXNoKTtcbiAgICByZW5kZXJlci5wbHVnaW5zLm1lc2gucmVuZGVyKHRoaXMpO1xufTtcblxuLyoqXG4gKiBSZW5kZXJzIHRoZSBvYmplY3QgdXNpbmcgdGhlIENhbnZhcyByZW5kZXJlclxuICpcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5DYW52YXNSZW5kZXJlcn1cbiAqIEBwcml2YXRlXG4gKi9cbk1lc2gucHJvdG90eXBlLl9yZW5kZXJDYW52YXMgPSBmdW5jdGlvbiAocmVuZGVyZXIpXG57XG4gICAgdmFyIGNvbnRleHQgPSByZW5kZXJlci5jb250ZXh0O1xuXG4gICAgdmFyIHRyYW5zZm9ybSA9IHRoaXMud29ybGRUcmFuc2Zvcm07XG5cbiAgICBpZiAocmVuZGVyZXIucm91bmRQaXhlbHMpXG4gICAge1xuICAgICAgICBjb250ZXh0LnNldFRyYW5zZm9ybSh0cmFuc2Zvcm0uYSwgdHJhbnNmb3JtLmIsIHRyYW5zZm9ybS5jLCB0cmFuc2Zvcm0uZCwgdHJhbnNmb3JtLnR4IHwgMCwgdHJhbnNmb3JtLnR5IHwgMCk7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIGNvbnRleHQuc2V0VHJhbnNmb3JtKHRyYW5zZm9ybS5hLCB0cmFuc2Zvcm0uYiwgdHJhbnNmb3JtLmMsIHRyYW5zZm9ybS5kLCB0cmFuc2Zvcm0udHgsIHRyYW5zZm9ybS50eSk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuZHJhd01vZGUgPT09IE1lc2guRFJBV19NT0RFUy5UUklBTkdMRV9NRVNIKVxuICAgIHtcbiAgICAgICAgdGhpcy5fcmVuZGVyQ2FudmFzVHJpYW5nbGVNZXNoKGNvbnRleHQpO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICB0aGlzLl9yZW5kZXJDYW52YXNUcmlhbmdsZXMoY29udGV4dCk7XG4gICAgfVxufTtcblxuLyoqXG4gKiBEcmF3cyB0aGUgb2JqZWN0IGluIFRyaWFuZ2xlIE1lc2ggbW9kZSB1c2luZyBjYW52YXNcbiAqXG4gKiBAcGFyYW0gY29udGV4dCB7Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEfSB0aGUgY3VycmVudCBkcmF3aW5nIGNvbnRleHRcbiAqIEBwcml2YXRlXG4gKi9cbk1lc2gucHJvdG90eXBlLl9yZW5kZXJDYW52YXNUcmlhbmdsZU1lc2ggPSBmdW5jdGlvbiAoY29udGV4dClcbntcbiAgICAvLyBkcmF3IHRyaWFuZ2xlcyEhXG4gICAgdmFyIHZlcnRpY2VzID0gdGhpcy52ZXJ0aWNlcztcbiAgICB2YXIgdXZzID0gdGhpcy51dnM7XG5cbiAgICB2YXIgbGVuZ3RoID0gdmVydGljZXMubGVuZ3RoIC8gMjtcbiAgICAvLyB0aGlzLmNvdW50Kys7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aCAtIDI7IGkrKylcbiAgICB7XG4gICAgICAgIC8vIGRyYXcgc29tZSB0cmlhbmdsZXMhXG4gICAgICAgIHZhciBpbmRleCA9IGkgKiAyO1xuICAgICAgICB0aGlzLl9yZW5kZXJDYW52YXNEcmF3VHJpYW5nbGUoY29udGV4dCwgdmVydGljZXMsIHV2cywgaW5kZXgsIChpbmRleCArIDIpLCAoaW5kZXggKyA0KSk7XG4gICAgfVxufTtcblxuLyoqXG4gKiBEcmF3cyB0aGUgb2JqZWN0IGluIHRyaWFuZ2xlIG1vZGUgdXNpbmcgY2FudmFzXG4gKlxuICogQHBhcmFtIGNvbnRleHQge0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRH0gdGhlIGN1cnJlbnQgZHJhd2luZyBjb250ZXh0XG4gKiBAcHJpdmF0ZVxuICovXG5NZXNoLnByb3RvdHlwZS5fcmVuZGVyQ2FudmFzVHJpYW5nbGVzID0gZnVuY3Rpb24gKGNvbnRleHQpXG57XG4gICAgLy8gZHJhdyB0cmlhbmdsZXMhIVxuICAgIHZhciB2ZXJ0aWNlcyA9IHRoaXMudmVydGljZXM7XG4gICAgdmFyIHV2cyA9IHRoaXMudXZzO1xuICAgIHZhciBpbmRpY2VzID0gdGhpcy5pbmRpY2VzO1xuXG4gICAgdmFyIGxlbmd0aCA9IGluZGljZXMubGVuZ3RoO1xuICAgIC8vIHRoaXMuY291bnQrKztcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyBpICs9IDMpXG4gICAge1xuICAgICAgICAvLyBkcmF3IHNvbWUgdHJpYW5nbGVzIVxuICAgICAgICB2YXIgaW5kZXgwID0gaW5kaWNlc1tpXSAqIDIsIGluZGV4MSA9IGluZGljZXNbaSArIDFdICogMiwgaW5kZXgyID0gaW5kaWNlc1tpICsgMl0gKiAyO1xuICAgICAgICB0aGlzLl9yZW5kZXJDYW52YXNEcmF3VHJpYW5nbGUoY29udGV4dCwgdmVydGljZXMsIHV2cywgaW5kZXgwLCBpbmRleDEsIGluZGV4Mik7XG4gICAgfVxufTtcblxuLyoqXG4gKiBEcmF3cyBvbmUgb2YgdGhlIHRyaWFuZ2xlcyB0aGF0IGZvcm0gdGhpcyBNZXNoXG4gKlxuICogQHBhcmFtIGNvbnRleHQge0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRH0gdGhlIGN1cnJlbnQgZHJhd2luZyBjb250ZXh0XG4gKiBAcGFyYW0gdmVydGljZXMge0Zsb2F0MzJBcnJheX0gYSByZWZlcmVuY2UgdG8gdGhlIHZlcnRpY2VzIG9mIHRoZSBNZXNoXG4gKiBAcGFyYW0gdXZzIHtGbG9hdDMyQXJyYXl9IGEgcmVmZXJlbmNlIHRvIHRoZSB1dnMgb2YgdGhlIE1lc2hcbiAqIEBwYXJhbSBpbmRleDAge251bWJlcn0gdGhlIGluZGV4IG9mIHRoZSBmaXJzdCB2ZXJ0ZXhcbiAqIEBwYXJhbSBpbmRleDEge251bWJlcn0gdGhlIGluZGV4IG9mIHRoZSBzZWNvbmQgdmVydGV4XG4gKiBAcGFyYW0gaW5kZXgyIHtudW1iZXJ9IHRoZSBpbmRleCBvZiB0aGUgdGhpcmQgdmVydGV4XG4gKiBAcHJpdmF0ZVxuICovXG5NZXNoLnByb3RvdHlwZS5fcmVuZGVyQ2FudmFzRHJhd1RyaWFuZ2xlID0gZnVuY3Rpb24gKGNvbnRleHQsIHZlcnRpY2VzLCB1dnMsIGluZGV4MCwgaW5kZXgxLCBpbmRleDIpXG57XG4gICAgdmFyIHRleHR1cmVTb3VyY2UgPSB0aGlzLl90ZXh0dXJlLmJhc2VUZXh0dXJlLnNvdXJjZTtcbiAgICB2YXIgdGV4dHVyZVdpZHRoID0gdGhpcy5fdGV4dHVyZS5iYXNlVGV4dHVyZS53aWR0aDtcbiAgICB2YXIgdGV4dHVyZUhlaWdodCA9IHRoaXMuX3RleHR1cmUuYmFzZVRleHR1cmUuaGVpZ2h0O1xuXG4gICAgdmFyIHgwID0gdmVydGljZXNbaW5kZXgwXSwgeDEgPSB2ZXJ0aWNlc1tpbmRleDFdLCB4MiA9IHZlcnRpY2VzW2luZGV4Ml07XG4gICAgdmFyIHkwID0gdmVydGljZXNbaW5kZXgwICsgMV0sIHkxID0gdmVydGljZXNbaW5kZXgxICsgMV0sIHkyID0gdmVydGljZXNbaW5kZXgyICsgMV07XG5cbiAgICB2YXIgdTAgPSB1dnNbaW5kZXgwXSAqIHRleHR1cmVXaWR0aCwgdTEgPSB1dnNbaW5kZXgxXSAqIHRleHR1cmVXaWR0aCwgdTIgPSB1dnNbaW5kZXgyXSAqIHRleHR1cmVXaWR0aDtcbiAgICB2YXIgdjAgPSB1dnNbaW5kZXgwICsgMV0gKiB0ZXh0dXJlSGVpZ2h0LCB2MSA9IHV2c1tpbmRleDEgKyAxXSAqIHRleHR1cmVIZWlnaHQsIHYyID0gdXZzW2luZGV4MiArIDFdICogdGV4dHVyZUhlaWdodDtcblxuICAgIGlmICh0aGlzLmNhbnZhc1BhZGRpbmcgPiAwKVxuICAgIHtcbiAgICAgICAgdmFyIHBhZGRpbmdYID0gdGhpcy5jYW52YXNQYWRkaW5nIC8gdGhpcy53b3JsZFRyYW5zZm9ybS5hO1xuICAgICAgICB2YXIgcGFkZGluZ1kgPSB0aGlzLmNhbnZhc1BhZGRpbmcgLyB0aGlzLndvcmxkVHJhbnNmb3JtLmQ7XG4gICAgICAgIHZhciBjZW50ZXJYID0gKHgwICsgeDEgKyB4MikgLyAzO1xuICAgICAgICB2YXIgY2VudGVyWSA9ICh5MCArIHkxICsgeTIpIC8gMztcblxuICAgICAgICB2YXIgbm9ybVggPSB4MCAtIGNlbnRlclg7XG4gICAgICAgIHZhciBub3JtWSA9IHkwIC0gY2VudGVyWTtcblxuICAgICAgICB2YXIgZGlzdCA9IE1hdGguc3FydChub3JtWCAqIG5vcm1YICsgbm9ybVkgKiBub3JtWSk7XG4gICAgICAgIHgwID0gY2VudGVyWCArIChub3JtWCAvIGRpc3QpICogKGRpc3QgKyBwYWRkaW5nWCk7XG4gICAgICAgIHkwID0gY2VudGVyWSArIChub3JtWSAvIGRpc3QpICogKGRpc3QgKyBwYWRkaW5nWSk7XG5cbiAgICAgICAgLy9cblxuICAgICAgICBub3JtWCA9IHgxIC0gY2VudGVyWDtcbiAgICAgICAgbm9ybVkgPSB5MSAtIGNlbnRlclk7XG5cbiAgICAgICAgZGlzdCA9IE1hdGguc3FydChub3JtWCAqIG5vcm1YICsgbm9ybVkgKiBub3JtWSk7XG4gICAgICAgIHgxID0gY2VudGVyWCArIChub3JtWCAvIGRpc3QpICogKGRpc3QgKyBwYWRkaW5nWCk7XG4gICAgICAgIHkxID0gY2VudGVyWSArIChub3JtWSAvIGRpc3QpICogKGRpc3QgKyBwYWRkaW5nWSk7XG5cbiAgICAgICAgbm9ybVggPSB4MiAtIGNlbnRlclg7XG4gICAgICAgIG5vcm1ZID0geTIgLSBjZW50ZXJZO1xuXG4gICAgICAgIGRpc3QgPSBNYXRoLnNxcnQobm9ybVggKiBub3JtWCArIG5vcm1ZICogbm9ybVkpO1xuICAgICAgICB4MiA9IGNlbnRlclggKyAobm9ybVggLyBkaXN0KSAqIChkaXN0ICsgcGFkZGluZ1gpO1xuICAgICAgICB5MiA9IGNlbnRlclkgKyAobm9ybVkgLyBkaXN0KSAqIChkaXN0ICsgcGFkZGluZ1kpO1xuICAgIH1cblxuICAgIGNvbnRleHQuc2F2ZSgpO1xuICAgIGNvbnRleHQuYmVnaW5QYXRoKCk7XG5cblxuICAgIGNvbnRleHQubW92ZVRvKHgwLCB5MCk7XG4gICAgY29udGV4dC5saW5lVG8oeDEsIHkxKTtcbiAgICBjb250ZXh0LmxpbmVUbyh4MiwgeTIpO1xuXG4gICAgY29udGV4dC5jbG9zZVBhdGgoKTtcblxuICAgIGNvbnRleHQuY2xpcCgpO1xuXG4gICAgLy8gQ29tcHV0ZSBtYXRyaXggdHJhbnNmb3JtXG4gICAgdmFyIGRlbHRhID0gICh1MCAqIHYxKSAgICAgICsgKHYwICogdTIpICAgICAgKyAodTEgKiB2MikgICAgICAtICh2MSAqIHUyKSAgICAgIC0gKHYwICogdTEpICAgICAgLSAodTAgKiB2Mik7XG4gICAgdmFyIGRlbHRhQSA9ICh4MCAqIHYxKSAgICAgICsgKHYwICogeDIpICAgICAgKyAoeDEgKiB2MikgICAgICAtICh2MSAqIHgyKSAgICAgIC0gKHYwICogeDEpICAgICAgLSAoeDAgKiB2Mik7XG4gICAgdmFyIGRlbHRhQiA9ICh1MCAqIHgxKSAgICAgICsgKHgwICogdTIpICAgICAgKyAodTEgKiB4MikgICAgICAtICh4MSAqIHUyKSAgICAgIC0gKHgwICogdTEpICAgICAgLSAodTAgKiB4Mik7XG4gICAgdmFyIGRlbHRhQyA9ICh1MCAqIHYxICogeDIpICsgKHYwICogeDEgKiB1MikgKyAoeDAgKiB1MSAqIHYyKSAtICh4MCAqIHYxICogdTIpIC0gKHYwICogdTEgKiB4MikgLSAodTAgKiB4MSAqIHYyKTtcbiAgICB2YXIgZGVsdGFEID0gKHkwICogdjEpICAgICAgKyAodjAgKiB5MikgICAgICArICh5MSAqIHYyKSAgICAgIC0gKHYxICogeTIpICAgICAgLSAodjAgKiB5MSkgICAgICAtICh5MCAqIHYyKTtcbiAgICB2YXIgZGVsdGFFID0gKHUwICogeTEpICAgICAgKyAoeTAgKiB1MikgICAgICArICh1MSAqIHkyKSAgICAgIC0gKHkxICogdTIpICAgICAgLSAoeTAgKiB1MSkgICAgICAtICh1MCAqIHkyKTtcbiAgICB2YXIgZGVsdGFGID0gKHUwICogdjEgKiB5MikgKyAodjAgKiB5MSAqIHUyKSArICh5MCAqIHUxICogdjIpIC0gKHkwICogdjEgKiB1MikgLSAodjAgKiB1MSAqIHkyKSAtICh1MCAqIHkxICogdjIpO1xuXG4gICAgY29udGV4dC50cmFuc2Zvcm0oZGVsdGFBIC8gZGVsdGEsIGRlbHRhRCAvIGRlbHRhLFxuICAgICAgICBkZWx0YUIgLyBkZWx0YSwgZGVsdGFFIC8gZGVsdGEsXG4gICAgICAgIGRlbHRhQyAvIGRlbHRhLCBkZWx0YUYgLyBkZWx0YSk7XG5cbiAgICBjb250ZXh0LmRyYXdJbWFnZSh0ZXh0dXJlU291cmNlLCAwLCAwKTtcbiAgICBjb250ZXh0LnJlc3RvcmUoKTtcbn07XG5cblxuXG4vKipcbiAqIFJlbmRlcnMgYSBmbGF0IE1lc2hcbiAqXG4gKiBAcGFyYW0gTWVzaCB7UElYSS5tZXNoLk1lc2h9IFRoZSBNZXNoIHRvIHJlbmRlclxuICogQHByaXZhdGVcbiAqL1xuTWVzaC5wcm90b3R5cGUucmVuZGVyTWVzaEZsYXQgPSBmdW5jdGlvbiAoTWVzaClcbntcbiAgICB2YXIgY29udGV4dCA9IHRoaXMuY29udGV4dDtcbiAgICB2YXIgdmVydGljZXMgPSBNZXNoLnZlcnRpY2VzO1xuXG4gICAgdmFyIGxlbmd0aCA9IHZlcnRpY2VzLmxlbmd0aC8yO1xuICAgIC8vIHRoaXMuY291bnQrKztcblxuICAgIGNvbnRleHQuYmVnaW5QYXRoKCk7XG4gICAgZm9yICh2YXIgaT0xOyBpIDwgbGVuZ3RoLTI7IGkrKylcbiAgICB7XG4gICAgICAgIC8vIGRyYXcgc29tZSB0cmlhbmdsZXMhXG4gICAgICAgIHZhciBpbmRleCA9IGkqMjtcblxuICAgICAgICB2YXIgeDAgPSB2ZXJ0aWNlc1tpbmRleF0sICAgeDEgPSB2ZXJ0aWNlc1tpbmRleCsyXSwgeDIgPSB2ZXJ0aWNlc1tpbmRleCs0XTtcbiAgICAgICAgdmFyIHkwID0gdmVydGljZXNbaW5kZXgrMV0sIHkxID0gdmVydGljZXNbaW5kZXgrM10sIHkyID0gdmVydGljZXNbaW5kZXgrNV07XG5cbiAgICAgICAgY29udGV4dC5tb3ZlVG8oeDAsIHkwKTtcbiAgICAgICAgY29udGV4dC5saW5lVG8oeDEsIHkxKTtcbiAgICAgICAgY29udGV4dC5saW5lVG8oeDIsIHkyKTtcbiAgICB9XG5cbiAgICBjb250ZXh0LmZpbGxTdHlsZSA9ICcjRkYwMDAwJztcbiAgICBjb250ZXh0LmZpbGwoKTtcbiAgICBjb250ZXh0LmNsb3NlUGF0aCgpO1xufTtcblxuLyoqXG4gKiBXaGVuIHRoZSB0ZXh0dXJlIGlzIHVwZGF0ZWQsIHRoaXMgZXZlbnQgd2lsbCBmaXJlIHRvIHVwZGF0ZSB0aGUgc2NhbGUgYW5kIGZyYW1lXG4gKlxuICogQHBhcmFtIGV2ZW50XG4gKiBAcHJpdmF0ZVxuICovXG5NZXNoLnByb3RvdHlwZS5fb25UZXh0dXJlVXBkYXRlID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLnVwZGF0ZUZyYW1lID0gdHJ1ZTtcbn07XG5cbi8qKlxuICogUmV0dXJucyB0aGUgYm91bmRzIG9mIHRoZSBtZXNoIGFzIGEgcmVjdGFuZ2xlLiBUaGUgYm91bmRzIGNhbGN1bGF0aW9uIHRha2VzIHRoZSB3b3JsZFRyYW5zZm9ybSBpbnRvIGFjY291bnQuXG4gKlxuICogQHBhcmFtIG1hdHJpeCB7UElYSS5NYXRyaXh9IHRoZSB0cmFuc2Zvcm1hdGlvbiBtYXRyaXggb2YgdGhlIHNwcml0ZVxuICogQHJldHVybiB7UElYSS5SZWN0YW5nbGV9IHRoZSBmcmFtaW5nIHJlY3RhbmdsZVxuICovXG5NZXNoLnByb3RvdHlwZS5nZXRCb3VuZHMgPSBmdW5jdGlvbiAobWF0cml4KVxue1xuICAgIGlmICghdGhpcy5fY3VycmVudEJvdW5kcykge1xuICAgICAgICB2YXIgd29ybGRUcmFuc2Zvcm0gPSBtYXRyaXggfHwgdGhpcy53b3JsZFRyYW5zZm9ybTtcblxuICAgICAgICB2YXIgYSA9IHdvcmxkVHJhbnNmb3JtLmE7XG4gICAgICAgIHZhciBiID0gd29ybGRUcmFuc2Zvcm0uYjtcbiAgICAgICAgdmFyIGMgPSB3b3JsZFRyYW5zZm9ybS5jO1xuICAgICAgICB2YXIgZCA9IHdvcmxkVHJhbnNmb3JtLmQ7XG4gICAgICAgIHZhciB0eCA9IHdvcmxkVHJhbnNmb3JtLnR4O1xuICAgICAgICB2YXIgdHkgPSB3b3JsZFRyYW5zZm9ybS50eTtcblxuICAgICAgICB2YXIgbWF4WCA9IC1JbmZpbml0eTtcbiAgICAgICAgdmFyIG1heFkgPSAtSW5maW5pdHk7XG5cbiAgICAgICAgdmFyIG1pblggPSBJbmZpbml0eTtcbiAgICAgICAgdmFyIG1pblkgPSBJbmZpbml0eTtcblxuICAgICAgICB2YXIgdmVydGljZXMgPSB0aGlzLnZlcnRpY2VzO1xuICAgICAgICBmb3IgKHZhciBpID0gMCwgbiA9IHZlcnRpY2VzLmxlbmd0aDsgaSA8IG47IGkgKz0gMikge1xuICAgICAgICAgICAgdmFyIHJhd1ggPSB2ZXJ0aWNlc1tpXSwgcmF3WSA9IHZlcnRpY2VzW2kgKyAxXTtcbiAgICAgICAgICAgIHZhciB4ID0gKGEgKiByYXdYKSArIChjICogcmF3WSkgKyB0eDtcbiAgICAgICAgICAgIHZhciB5ID0gKGQgKiByYXdZKSArIChiICogcmF3WCkgKyB0eTtcblxuICAgICAgICAgICAgbWluWCA9IHggPCBtaW5YID8geCA6IG1pblg7XG4gICAgICAgICAgICBtaW5ZID0geSA8IG1pblkgPyB5IDogbWluWTtcblxuICAgICAgICAgICAgbWF4WCA9IHggPiBtYXhYID8geCA6IG1heFg7XG4gICAgICAgICAgICBtYXhZID0geSA+IG1heFkgPyB5IDogbWF4WTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChtaW5YID09PSAtSW5maW5pdHkgfHwgbWF4WSA9PT0gSW5maW5pdHkpIHtcbiAgICAgICAgICAgIHJldHVybiBjb3JlLlJlY3RhbmdsZS5FTVBUWTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBib3VuZHMgPSB0aGlzLl9ib3VuZHM7XG5cbiAgICAgICAgYm91bmRzLnggPSBtaW5YO1xuICAgICAgICBib3VuZHMud2lkdGggPSBtYXhYIC0gbWluWDtcblxuICAgICAgICBib3VuZHMueSA9IG1pblk7XG4gICAgICAgIGJvdW5kcy5oZWlnaHQgPSBtYXhZIC0gbWluWTtcblxuICAgICAgICAvLyBzdG9yZSBhIHJlZmVyZW5jZSBzbyB0aGF0IGlmIHRoaXMgZnVuY3Rpb24gZ2V0cyBjYWxsZWQgYWdhaW4gaW4gdGhlIHJlbmRlciBjeWNsZSB3ZSBkbyBub3QgaGF2ZSB0byByZWNhbGN1bGF0ZVxuICAgICAgICB0aGlzLl9jdXJyZW50Qm91bmRzID0gYm91bmRzO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLl9jdXJyZW50Qm91bmRzO1xufTtcblxuLyoqXG4gKiBUZXN0cyBpZiBhIHBvaW50IGlzIGluc2lkZSB0aGlzIG1lc2guIFdvcmtzIG9ubHkgZm9yIFRSSUFOR0xFX01FU0hcbiAqXG4gKiBAcGFyYW0gcG9pbnQge1BJWEkuUG9pbnR9IHRoZSBwb2ludCB0byB0ZXN0XG4gKiBAcmV0dXJuIHtib29sZWFufSB0aGUgcmVzdWx0IG9mIHRoZSB0ZXN0XG4gKi9cbk1lc2gucHJvdG90eXBlLmNvbnRhaW5zUG9pbnQgPSBmdW5jdGlvbiggcG9pbnQgKSB7XG4gICAgaWYgKCF0aGlzLmdldEJvdW5kcygpLmNvbnRhaW5zKHBvaW50LngsIHBvaW50LnkpKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgdGhpcy53b3JsZFRyYW5zZm9ybS5hcHBseUludmVyc2UocG9pbnQsICB0ZW1wUG9pbnQpO1xuXG4gICAgdmFyIHZlcnRpY2VzID0gdGhpcy52ZXJ0aWNlcztcbiAgICB2YXIgcG9pbnRzID0gdGVtcFBvbHlnb24ucG9pbnRzO1xuICAgIHZhciBpLCBsZW47XG5cbiAgICBpZiAodGhpcy5kcmF3TW9kZSA9PT0gTWVzaC5EUkFXX01PREVTLlRSSUFOR0xFUykge1xuICAgICAgICB2YXIgaW5kaWNlcyA9IHRoaXMuaW5kaWNlcztcbiAgICAgICAgbGVuID0gdGhpcy5pbmRpY2VzLmxlbmd0aDtcbiAgICAgICAgLy9UT0RPOiBpbmxpbmUgdGhpcy5cbiAgICAgICAgZm9yIChpPTA7aTxsZW47aSs9Mykge1xuICAgICAgICAgICAgdmFyIGluZDAgPSBpbmRpY2VzW2ldKjIsIGluZDEgPSBpbmRpY2VzW2krMV0qMiwgaW5kMiA9IGluZGljZXNbaSsyXSoyO1xuICAgICAgICAgICAgcG9pbnRzWzBdID0gdmVydGljZXNbaW5kMF07XG4gICAgICAgICAgICBwb2ludHNbMV0gPSB2ZXJ0aWNlc1tpbmQwKzFdO1xuICAgICAgICAgICAgcG9pbnRzWzJdID0gdmVydGljZXNbaW5kMV07XG4gICAgICAgICAgICBwb2ludHNbM10gPSB2ZXJ0aWNlc1tpbmQxKzFdO1xuICAgICAgICAgICAgcG9pbnRzWzRdID0gdmVydGljZXNbaW5kMl07XG4gICAgICAgICAgICBwb2ludHNbNV0gPSB2ZXJ0aWNlc1tpbmQyKzFdO1xuICAgICAgICAgICAgaWYgKHRlbXBQb2x5Z29uLmNvbnRhaW5zKHRlbXBQb2ludC54LCB0ZW1wUG9pbnQueSkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAgIGxlbiA9IHZlcnRpY2VzLmxlbmd0aDtcbiAgICAgICAgZm9yIChpPTA7aTxsZW47aSs9Nikge1xuICAgICAgICAgICAgcG9pbnRzWzBdID0gdmVydGljZXNbaV07XG4gICAgICAgICAgICBwb2ludHNbMV0gPSB2ZXJ0aWNlc1tpKzFdO1xuICAgICAgICAgICAgcG9pbnRzWzJdID0gdmVydGljZXNbaSsyXTtcbiAgICAgICAgICAgIHBvaW50c1szXSA9IHZlcnRpY2VzW2krM107XG4gICAgICAgICAgICBwb2ludHNbNF0gPSB2ZXJ0aWNlc1tpKzRdO1xuICAgICAgICAgICAgcG9pbnRzWzVdID0gdmVydGljZXNbaSs1XTtcbiAgICAgICAgICAgIGlmICh0ZW1wUG9seWdvbi5jb250YWlucyh0ZW1wUG9pbnQueCwgdGVtcFBvaW50LnkpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xufTtcblxuLyoqXG4gKiBEaWZmZXJlbnQgZHJhd2luZyBidWZmZXIgbW9kZXMgc3VwcG9ydGVkXG4gKlxuICogQHN0YXRpY1xuICogQGNvbnN0YW50XG4gKiBAcHJvcGVydHkge29iamVjdH0gRFJBV19NT0RFU1xuICogQHByb3BlcnR5IHtudW1iZXJ9IERSQVdfTU9ERVMuVFJJQU5HTEVfTUVTSFxuICogQHByb3BlcnR5IHtudW1iZXJ9IERSQVdfTU9ERVMuVFJJQU5HTEVTXG4gKi9cbk1lc2guRFJBV19NT0RFUyA9IHtcbiAgICBUUklBTkdMRV9NRVNIOiAwLFxuICAgIFRSSUFOR0xFUzogMVxufTtcbiIsInZhciBNZXNoID0gcmVxdWlyZSgnLi9NZXNoJyk7XG5cbi8qKlxuICogVGhlIFBsYW5lIGFsbG93cyB5b3UgdG8gZHJhdyBhIHRleHR1cmUgYWNyb3NzIHNldmVyYWwgcG9pbnRzIGFuZCB0aGVtIG1hbmlwdWxhdGUgdGhlc2UgcG9pbnRzXG4gKlxuICpgYGBqc1xuICogZm9yICh2YXIgaSA9IDA7IGkgPCAyMDsgaSsrKSB7XG4gKiAgICAgcG9pbnRzLnB1c2gobmV3IFBJWEkuUG9pbnQoaSAqIDUwLCAwKSk7XG4gKiB9O1xuICogdmFyIFBsYW5lID0gbmV3IFBJWEkuUGxhbmUoUElYSS5UZXh0dXJlLmZyb21JbWFnZShcInNuYWtlLnBuZ1wiKSwgcG9pbnRzKTtcbiAqICBgYGBcbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkubWVzaC5NZXNoXG4gKiBAbWVtYmVyb2YgUElYSS5tZXNoXG4gKiBAcGFyYW0ge1BJWEkuVGV4dHVyZX0gdGV4dHVyZSAtIFRoZSB0ZXh0dXJlIHRvIHVzZSBvbiB0aGUgUGxhbmUuXG4gKiBAcGFyYW0ge2ludH0gc2VnbWVudHNYIC0gVGhlIG51bWJlciBveCB4IHNlZ21lbnRzXG4gKiBAcGFyYW0ge2ludH0gc2VnbWVudHNZIC0gVGhlIG51bWJlciBvZiB5IHNlZ21lbnRzXG4gKlxuICovXG5mdW5jdGlvbiBQbGFuZSh0ZXh0dXJlLCBzZWdtZW50c1gsIHNlZ21lbnRzWSlcbntcbiAgICBNZXNoLmNhbGwodGhpcywgdGV4dHVyZSk7XG5cbiAgICAvKipcbiAgICAgKiBUcmFja2VyIGZvciBpZiB0aGUgUGxhbmUgaXMgcmVhZHkgdG8gYmUgZHJhd24uIE5lZWRlZCBiZWNhdXNlIE1lc2ggY3RvciBjYW5cbiAgICAgKiBjYWxsIF9vblRleHR1cmVVcGRhdGVkIHdoaWNoIGNvdWxkIGNhbGwgcmVmcmVzaCB0b28gZWFybHkuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fcmVhZHkgPSB0cnVlO1xuXG4gICAgdGhpcy5zZWdtZW50c1ggPSAgc2VnbWVudHNYIHx8IDEwO1xuICAgIHRoaXMuc2VnbWVudHNZID0gc2VnbWVudHNZIHx8IDEwO1xuXG4gICAgdGhpcy5kcmF3TW9kZSA9IE1lc2guRFJBV19NT0RFUy5UUklBTkdMRVM7XG4gICAgdGhpcy5yZWZyZXNoKCk7XG5cbn1cblxuXG4vLyBjb25zdHJ1Y3RvclxuUGxhbmUucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZSggTWVzaC5wcm90b3R5cGUgKTtcblBsYW5lLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFBsYW5lO1xubW9kdWxlLmV4cG9ydHMgPSBQbGFuZTtcblxuLyoqXG4gKiBSZWZyZXNoZXNcbiAqXG4gKi9cblBsYW5lLnByb3RvdHlwZS5yZWZyZXNoID0gZnVuY3Rpb24oKVxue1xuICAgIHZhciB0b3RhbCA9IHRoaXMuc2VnbWVudHNYICogdGhpcy5zZWdtZW50c1k7XG4gICAgdmFyIHZlcnRzID0gW107XG4gICAgdmFyIGNvbG9ycyA9IFtdO1xuICAgIHZhciB1dnMgPSBbXTtcbiAgICB2YXIgaW5kaWNlcyA9IFtdO1xuICAgIHZhciB0ZXh0dXJlID0gdGhpcy50ZXh0dXJlO1xuXG4gIC8vICB0ZXh0dXJlLndpZHRoID0gODAwIHRleHR1cmUud2lkdGggfHwgODAwO1xuIC8vICAgdGV4dHVyZS5oZWlnaHQgPSA4MDAvL3RleHR1cmUuaGVpZ2h0IHx8IDgwMDtcblxuICAgIHZhciBzZWdtZW50c1hTdWIgPSB0aGlzLnNlZ21lbnRzWCAtIDE7XG4gICAgdmFyIHNlZ21lbnRzWVN1YiA9IHRoaXMuc2VnbWVudHNZIC0gMTtcbiAgICB2YXIgaSA9IDA7XG5cbiAgICB2YXIgc2l6ZVggPSB0ZXh0dXJlLndpZHRoIC8gc2VnbWVudHNYU3ViO1xuICAgIHZhciBzaXplWSA9IHRleHR1cmUuaGVpZ2h0IC8gc2VnbWVudHNZU3ViO1xuXG4gICAgZm9yIChpID0gMDsgaSA8IHRvdGFsOyBpKyspIHtcblxuICAgICAgICB2YXIgeCA9IChpICUgdGhpcy5zZWdtZW50c1gpO1xuICAgICAgICB2YXIgeSA9ICggKGkgLyB0aGlzLnNlZ21lbnRzWCApIHwgMCApO1xuXG5cbiAgICAgICAgdmVydHMucHVzaCgoeCAqIHNpemVYKSxcbiAgICAgICAgICAgICAgICAgICAoeSAqIHNpemVZKSk7XG5cbiAgICAgICAgLy8gdGhpcyB3b3JrcyBmb3IgcmVjdGFuZ3VsYXIgdGV4dHVyZXMuIFxuICAgICAgICB1dnMucHVzaCh0ZXh0dXJlLl91dnMueDAgKyAodGV4dHVyZS5fdXZzLngxIC0gdGV4dHVyZS5fdXZzLngwKSAqICh4IC8gKHRoaXMuc2VnbWVudHNYLTEpKSwgdGV4dHVyZS5fdXZzLnkwICsgKHRleHR1cmUuX3V2cy55My10ZXh0dXJlLl91dnMueTApICogKHkvICh0aGlzLnNlZ21lbnRzWS0xKSkpO1xuICAgICAgfVxuXG4gICAgLy8gIGNvbnNcblxuICAgIHZhciB0b3RhbFN1YiA9IHNlZ21lbnRzWFN1YiAqIHNlZ21lbnRzWVN1YjtcblxuICAgIGZvciAoaSA9IDA7IGkgPCB0b3RhbFN1YjsgaSsrKSB7XG5cbiAgICAgICAgdmFyIHhwb3MgPSBpICUgc2VnbWVudHNYU3ViO1xuICAgICAgICB2YXIgeXBvcyA9IChpIC8gc2VnbWVudHNYU3ViICkgfCAwO1xuXG5cbiAgICAgICAgdmFyICB2YWx1ZSA9ICh5cG9zICogdGhpcy5zZWdtZW50c1gpICsgeHBvcztcbiAgICAgICAgdmFyICB2YWx1ZTIgPSAoeXBvcyAqIHRoaXMuc2VnbWVudHNYKSArIHhwb3MgKyAxO1xuICAgICAgICB2YXIgIHZhbHVlMyA9ICgoeXBvcysxKSAqIHRoaXMuc2VnbWVudHNYKSArIHhwb3M7XG4gICAgICAgIHZhciAgdmFsdWU0ID0gKCh5cG9zKzEpICogdGhpcy5zZWdtZW50c1gpICsgeHBvcyArIDE7XG5cbiAgICAgICAgaW5kaWNlcy5wdXNoKHZhbHVlLCB2YWx1ZTIsIHZhbHVlMyk7XG4gICAgICAgIGluZGljZXMucHVzaCh2YWx1ZTIsIHZhbHVlNCwgdmFsdWUzKTtcbiAgICB9XG5cblxuICAgIC8vY29uc29sZS5sb2coaW5kaWNlcylcbiAgICB0aGlzLnZlcnRpY2VzID0gbmV3IEZsb2F0MzJBcnJheSh2ZXJ0cyk7XG4gICAgdGhpcy51dnMgPSBuZXcgRmxvYXQzMkFycmF5KHV2cyk7XG4gICAgdGhpcy5jb2xvcnMgPSBuZXcgRmxvYXQzMkFycmF5KGNvbG9ycyk7XG4gICAgdGhpcy5pbmRpY2VzID0gbmV3IFVpbnQxNkFycmF5KGluZGljZXMpO1xufTtcblxuLyoqXG4gKiBDbGVhciB0ZXh0dXJlIFVWcyB3aGVuIG5ldyB0ZXh0dXJlIGlzIHNldFxuICpcbiAqIEBwcml2YXRlXG4gKi9cblBsYW5lLnByb3RvdHlwZS5fb25UZXh0dXJlVXBkYXRlID0gZnVuY3Rpb24gKClcbntcbiAgICBNZXNoLnByb3RvdHlwZS5fb25UZXh0dXJlVXBkYXRlLmNhbGwodGhpcyk7XG5cbiAgICAvLyB3YWl0IGZvciB0aGUgUGxhbmUgY3RvciB0byBmaW5pc2ggYmVmb3JlIGNhbGxpbmcgcmVmcmVzaFxuICAgIGlmICh0aGlzLl9yZWFkeSkge1xuICAgICAgICB0aGlzLnJlZnJlc2goKTtcbiAgICB9XG59O1xuIiwidmFyIE1lc2ggPSByZXF1aXJlKCcuL01lc2gnKTtcbnZhciBjb3JlID0gcmVxdWlyZSgnLi4vY29yZScpO1xuXG4vKipcbiAqIFRoZSByb3BlIGFsbG93cyB5b3UgdG8gZHJhdyBhIHRleHR1cmUgYWNyb3NzIHNldmVyYWwgcG9pbnRzIGFuZCB0aGVtIG1hbmlwdWxhdGUgdGhlc2UgcG9pbnRzXG4gKlxuICpgYGBqc1xuICogZm9yICh2YXIgaSA9IDA7IGkgPCAyMDsgaSsrKSB7XG4gKiAgICAgcG9pbnRzLnB1c2gobmV3IFBJWEkuUG9pbnQoaSAqIDUwLCAwKSk7XG4gKiB9O1xuICogdmFyIHJvcGUgPSBuZXcgUElYSS5Sb3BlKFBJWEkuVGV4dHVyZS5mcm9tSW1hZ2UoXCJzbmFrZS5wbmdcIiksIHBvaW50cyk7XG4gKiAgYGBgXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLm1lc2guTWVzaFxuICogQG1lbWJlcm9mIFBJWEkubWVzaFxuICogQHBhcmFtIHtQSVhJLlRleHR1cmV9IHRleHR1cmUgLSBUaGUgdGV4dHVyZSB0byB1c2Ugb24gdGhlIHJvcGUuXG4gKiBAcGFyYW0ge1BJWEkuUG9pbnRbXX0gcG9pbnRzIC0gQW4gYXJyYXkgb2Yge0BsaW5rIFBJWEkuUG9pbnR9IG9iamVjdHMgdG8gY29uc3RydWN0IHRoaXMgcm9wZS5cbiAqXG4gKi9cbmZ1bmN0aW9uIFJvcGUodGV4dHVyZSwgcG9pbnRzKVxue1xuICAgIE1lc2guY2FsbCh0aGlzLCB0ZXh0dXJlKTtcblxuICAgIC8qXG4gICAgICogQG1lbWJlciB7UElYSS5Qb2ludFtdfSBBbiBhcnJheSBvZiBwb2ludHMgdGhhdCBkZXRlcm1pbmUgdGhlIHJvcGVcbiAgICAgKi9cbiAgICB0aGlzLnBvaW50cyA9IHBvaW50cztcblxuICAgIC8qXG4gICAgICogQG1lbWJlciB7RmxvYXQzMkFycmF5fSBBbiBhcnJheSBvZiB2ZXJ0aWNlcyB1c2VkIHRvIGNvbnN0cnVjdCB0aGlzIHJvcGUuXG4gICAgICovXG4gICAgdGhpcy52ZXJ0aWNlcyA9IG5ldyBGbG9hdDMyQXJyYXkocG9pbnRzLmxlbmd0aCAqIDQpO1xuXG4gICAgLypcbiAgICAgKiBAbWVtYmVyIHtGbG9hdDMyQXJyYXl9IFRoZSBXZWJHTCBVdnMgb2YgdGhlIHJvcGUuXG4gICAgICovXG4gICAgdGhpcy51dnMgPSBuZXcgRmxvYXQzMkFycmF5KHBvaW50cy5sZW5ndGggKiA0KTtcblxuICAgIC8qXG4gICAgICogQG1lbWJlciB7RmxvYXQzMkFycmF5fSBBbiBhcnJheSBjb250YWluaW5nIHRoZSBjb2xvciBjb21wb25lbnRzXG4gICAgICovXG4gICAgdGhpcy5jb2xvcnMgPSBuZXcgRmxvYXQzMkFycmF5KHBvaW50cy5sZW5ndGggKiAyKTtcblxuICAgIC8qXG4gICAgICogQG1lbWJlciB7VWludDE2QXJyYXl9IEFuIGFycmF5IGNvbnRhaW5pbmcgdGhlIGluZGljZXMgb2YgdGhlIHZlcnRpY2VzXG4gICAgICovXG4gICAgdGhpcy5pbmRpY2VzID0gbmV3IFVpbnQxNkFycmF5KHBvaW50cy5sZW5ndGggKiAyKTtcblxuICAgIC8qKlxuICAgICAqIFRyYWNrZXIgZm9yIGlmIHRoZSByb3BlIGlzIHJlYWR5IHRvIGJlIGRyYXduLiBOZWVkZWQgYmVjYXVzZSBNZXNoIGN0b3IgY2FuXG4gICAgICogY2FsbCBfb25UZXh0dXJlVXBkYXRlZCB3aGljaCBjb3VsZCBjYWxsIHJlZnJlc2ggdG9vIGVhcmx5LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgICB0aGlzLl9yZWFkeSA9IHRydWU7XG5cbiAgICAgdGhpcy5yZWZyZXNoKCk7XG59XG5cblxuLy8gY29uc3RydWN0b3JcblJvcGUucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShNZXNoLnByb3RvdHlwZSk7XG5Sb3BlLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFJvcGU7XG5tb2R1bGUuZXhwb3J0cyA9IFJvcGU7XG5cbi8qKlxuICogUmVmcmVzaGVzXG4gKlxuICovXG5Sb3BlLnByb3RvdHlwZS5yZWZyZXNoID0gZnVuY3Rpb24gKClcbntcbiAgICB2YXIgcG9pbnRzID0gdGhpcy5wb2ludHM7XG5cbiAgICAvLyBpZiB0b28gbGl0dGxlIHBvaW50cywgb3IgdGV4dHVyZSBoYXNuJ3QgZ290IFVWcyBzZXQgeWV0IGp1c3QgbW92ZSBvbi5cbiAgICBpZiAocG9pbnRzLmxlbmd0aCA8IDEgfHwgIXRoaXMuX3RleHR1cmUuX3V2cylcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB2YXIgdXZzID0gdGhpcy51dnM7XG5cbiAgICB2YXIgaW5kaWNlcyA9IHRoaXMuaW5kaWNlcztcbiAgICB2YXIgY29sb3JzID0gdGhpcy5jb2xvcnM7XG5cbiAgICB2YXIgdGV4dHVyZVV2cyA9IHRoaXMuX3RleHR1cmUuX3V2cztcbiAgICB2YXIgb2Zmc2V0ID0gbmV3IGNvcmUuUG9pbnQodGV4dHVyZVV2cy54MCwgdGV4dHVyZVV2cy55MCk7XG4gICAgdmFyIGZhY3RvciA9IG5ldyBjb3JlLlBvaW50KHRleHR1cmVVdnMueDIgLSB0ZXh0dXJlVXZzLngwLCB0ZXh0dXJlVXZzLnkyIC0gdGV4dHVyZVV2cy55MCk7XG5cbiAgICB1dnNbMF0gPSAwICsgb2Zmc2V0Lng7XG4gICAgdXZzWzFdID0gMCArIG9mZnNldC55O1xuICAgIHV2c1syXSA9IDAgKyBvZmZzZXQueDtcbiAgICB1dnNbM10gPSAxICogZmFjdG9yLnkgKyBvZmZzZXQueTtcblxuICAgIGNvbG9yc1swXSA9IDE7XG4gICAgY29sb3JzWzFdID0gMTtcblxuICAgIGluZGljZXNbMF0gPSAwO1xuICAgIGluZGljZXNbMV0gPSAxO1xuXG4gICAgdmFyIHRvdGFsID0gcG9pbnRzLmxlbmd0aCxcbiAgICAgICAgcG9pbnQsIGluZGV4LCBhbW91bnQ7XG5cbiAgICBmb3IgKHZhciBpID0gMTsgaSA8IHRvdGFsOyBpKyspXG4gICAge1xuICAgICAgICBwb2ludCA9IHBvaW50c1tpXTtcbiAgICAgICAgaW5kZXggPSBpICogNDtcbiAgICAgICAgLy8gdGltZSB0byBkbyBzb21lIHNtYXJ0IGRyYXdpbmchXG4gICAgICAgIGFtb3VudCA9IGkgLyAodG90YWwtMSk7XG5cbiAgICAgICAgdXZzW2luZGV4XSA9IGFtb3VudCAqIGZhY3Rvci54ICsgb2Zmc2V0Lng7XG4gICAgICAgIHV2c1tpbmRleCsxXSA9IDAgKyBvZmZzZXQueTtcblxuICAgICAgICB1dnNbaW5kZXgrMl0gPSBhbW91bnQgKiBmYWN0b3IueCArIG9mZnNldC54O1xuICAgICAgICB1dnNbaW5kZXgrM10gPSAxICogZmFjdG9yLnkgKyBvZmZzZXQueTtcblxuICAgICAgICBpbmRleCA9IGkgKiAyO1xuICAgICAgICBjb2xvcnNbaW5kZXhdID0gMTtcbiAgICAgICAgY29sb3JzW2luZGV4KzFdID0gMTtcblxuICAgICAgICBpbmRleCA9IGkgKiAyO1xuICAgICAgICBpbmRpY2VzW2luZGV4XSA9IGluZGV4O1xuICAgICAgICBpbmRpY2VzW2luZGV4ICsgMV0gPSBpbmRleCArIDE7XG4gICAgfVxuXG4gICAgdGhpcy5kaXJ0eSA9IHRydWU7XG59O1xuXG4vKipcbiAqIENsZWFyIHRleHR1cmUgVVZzIHdoZW4gbmV3IHRleHR1cmUgaXMgc2V0XG4gKlxuICogQHByaXZhdGVcbiAqL1xuUm9wZS5wcm90b3R5cGUuX29uVGV4dHVyZVVwZGF0ZSA9IGZ1bmN0aW9uICgpXG57XG4gICAgTWVzaC5wcm90b3R5cGUuX29uVGV4dHVyZVVwZGF0ZS5jYWxsKHRoaXMpO1xuXG4gICAgLy8gd2FpdCBmb3IgdGhlIFJvcGUgY3RvciB0byBmaW5pc2ggYmVmb3JlIGNhbGxpbmcgcmVmcmVzaFxuICAgIGlmICh0aGlzLl9yZWFkeSkge1xuICAgICAgICB0aGlzLnJlZnJlc2goKTtcbiAgICB9XG59O1xuXG4vKipcbiAqIFVwZGF0ZXMgdGhlIG9iamVjdCB0cmFuc2Zvcm0gZm9yIHJlbmRlcmluZ1xuICpcbiAqIEBwcml2YXRlXG4gKi9cblJvcGUucHJvdG90eXBlLnVwZGF0ZVRyYW5zZm9ybSA9IGZ1bmN0aW9uICgpXG57XG4gICAgdmFyIHBvaW50cyA9IHRoaXMucG9pbnRzO1xuXG4gICAgaWYgKHBvaW50cy5sZW5ndGggPCAxKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHZhciBsYXN0UG9pbnQgPSBwb2ludHNbMF07XG4gICAgdmFyIG5leHRQb2ludDtcbiAgICB2YXIgcGVycFggPSAwO1xuICAgIHZhciBwZXJwWSA9IDA7XG5cbiAgICAvLyB0aGlzLmNvdW50IC09IDAuMjtcblxuICAgIHZhciB2ZXJ0aWNlcyA9IHRoaXMudmVydGljZXM7XG4gICAgdmFyIHRvdGFsID0gcG9pbnRzLmxlbmd0aCxcbiAgICAgICAgcG9pbnQsIGluZGV4LCByYXRpbywgcGVycExlbmd0aCwgbnVtO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0b3RhbDsgaSsrKVxuICAgIHtcbiAgICAgICAgcG9pbnQgPSBwb2ludHNbaV07XG4gICAgICAgIGluZGV4ID0gaSAqIDQ7XG5cbiAgICAgICAgaWYgKGkgPCBwb2ludHMubGVuZ3RoLTEpXG4gICAgICAgIHtcbiAgICAgICAgICAgIG5leHRQb2ludCA9IHBvaW50c1tpKzFdO1xuICAgICAgICB9XG4gICAgICAgIGVsc2VcbiAgICAgICAge1xuICAgICAgICAgICAgbmV4dFBvaW50ID0gcG9pbnQ7XG4gICAgICAgIH1cblxuICAgICAgICBwZXJwWSA9IC0obmV4dFBvaW50LnggLSBsYXN0UG9pbnQueCk7XG4gICAgICAgIHBlcnBYID0gbmV4dFBvaW50LnkgLSBsYXN0UG9pbnQueTtcblxuICAgICAgICByYXRpbyA9ICgxIC0gKGkgLyAodG90YWwtMSkpKSAqIDEwO1xuXG4gICAgICAgIGlmIChyYXRpbyA+IDEpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJhdGlvID0gMTtcbiAgICAgICAgfVxuXG4gICAgICAgIHBlcnBMZW5ndGggPSBNYXRoLnNxcnQocGVycFggKiBwZXJwWCArIHBlcnBZICogcGVycFkpO1xuICAgICAgICBudW0gPSB0aGlzLl90ZXh0dXJlLmhlaWdodCAvIDI7IC8vKDIwICsgTWF0aC5hYnMoTWF0aC5zaW4oKGkgKyB0aGlzLmNvdW50KSAqIDAuMykgKiA1MCkgKSogcmF0aW87XG4gICAgICAgIHBlcnBYIC89IHBlcnBMZW5ndGg7XG4gICAgICAgIHBlcnBZIC89IHBlcnBMZW5ndGg7XG5cbiAgICAgICAgcGVycFggKj0gbnVtO1xuICAgICAgICBwZXJwWSAqPSBudW07XG5cbiAgICAgICAgdmVydGljZXNbaW5kZXhdID0gcG9pbnQueCArIHBlcnBYO1xuICAgICAgICB2ZXJ0aWNlc1tpbmRleCsxXSA9IHBvaW50LnkgKyBwZXJwWTtcbiAgICAgICAgdmVydGljZXNbaW5kZXgrMl0gPSBwb2ludC54IC0gcGVycFg7XG4gICAgICAgIHZlcnRpY2VzW2luZGV4KzNdID0gcG9pbnQueSAtIHBlcnBZO1xuXG4gICAgICAgIGxhc3RQb2ludCA9IHBvaW50O1xuICAgIH1cblxuICAgIHRoaXMuY29udGFpbmVyVXBkYXRlVHJhbnNmb3JtKCk7XG59O1xuIiwiLyoqXG4gKiBAZmlsZSAgICAgICAgTWFpbiBleHBvcnQgb2YgdGhlIFBJWEkgZXh0cmFzIGxpYnJhcnlcbiAqIEBhdXRob3IgICAgICBNYXQgR3JvdmVzIDxtYXRAZ29vZGJveWRpZ2l0YWwuY29tPlxuICogQGNvcHlyaWdodCAgIDIwMTMtMjAxNSBHb29kQm95RGlnaXRhbFxuICogQGxpY2Vuc2UgICAgIHtAbGluayBodHRwczovL2dpdGh1Yi5jb20vcGl4aWpzL3BpeGkuanMvYmxvYi9tYXN0ZXIvTElDRU5TRXxNSVQgTGljZW5zZX1cbiAqL1xuXG4vKipcbiAqIEBuYW1lc3BhY2UgUElYSS5tZXNoXG4gKi9cbm1vZHVsZS5leHBvcnRzID0ge1xuICAgIE1lc2g6ICAgICAgICAgICByZXF1aXJlKCcuL01lc2gnKSxcbiAgICBQbGFuZTogICAgICAgICAgIHJlcXVpcmUoJy4vUGxhbmUnKSxcbiAgICBSb3BlOiAgICAgICAgICAgcmVxdWlyZSgnLi9Sb3BlJyksXG4gICAgTWVzaFJlbmRlcmVyOiAgIHJlcXVpcmUoJy4vd2ViZ2wvTWVzaFJlbmRlcmVyJyksXG4gICAgTWVzaFNoYWRlcjogICAgIHJlcXVpcmUoJy4vd2ViZ2wvTWVzaFNoYWRlcicpXG59O1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi8uLi9jb3JlJyksXG4gICAgTWVzaCA9IHJlcXVpcmUoJy4uL01lc2gnKTtcblxuLyoqXG4gKiBAYXV0aG9yIE1hdCBHcm92ZXNcbiAqXG4gKiBCaWcgdGhhbmtzIHRvIHRoZSB2ZXJ5IGNsZXZlciBNYXR0IERlc0xhdXJpZXJzIDxtYXR0ZGVzbD4gaHR0cHM6Ly9naXRodWIuY29tL21hdHRkZXNsL1xuICogZm9yIGNyZWF0aW5nIHRoZSBvcmlnaW5hbCBwaXhpIHZlcnNpb24hXG4gKiBBbHNvIGEgdGhhbmtzIHRvIGh0dHBzOi8vZ2l0aHViLmNvbS9iY2hldmFsaWVyIGZvciB0d2Vha2luZyB0aGUgdGludCBhbmQgYWxwaGEgc28gdGhhdCB0aGV5IG5vdyBzaGFyZSA0IGJ5dGVzIG9uIHRoZSB2ZXJ0ZXggYnVmZmVyXG4gKlxuICogSGVhdmlseSBpbnNwaXJlZCBieSBMaWJHRFgncyBNZXNoUmVuZGVyZXI6XG4gKiBodHRwczovL2dpdGh1Yi5jb20vbGliZ2R4L2xpYmdkeC9ibG9iL21hc3Rlci9nZHgvc3JjL2NvbS9iYWRsb2dpYy9nZHgvZ3JhcGhpY3MvZzJkL01lc2hSZW5kZXJlci5qYXZhXG4gKi9cblxuLyoqXG4gKlxuICogQGNsYXNzXG4gKiBAcHJpdmF0ZVxuICogQG1lbWJlcm9mIFBJWEkubWVzaFxuICogQGV4dGVuZHMgUElYSS5PYmplY3RSZW5kZXJlclxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLldlYkdMUmVuZGVyZXJ9IFRoZSByZW5kZXJlciB0aGlzIHNwcml0ZSBiYXRjaCB3b3JrcyBmb3IuXG4gKi9cbmZ1bmN0aW9uIE1lc2hSZW5kZXJlcihyZW5kZXJlcilcbntcbiAgICBjb3JlLk9iamVjdFJlbmRlcmVyLmNhbGwodGhpcywgcmVuZGVyZXIpO1xuXG5cbiAgICAvKipcbiAgICAgKiBIb2xkcyB0aGUgaW5kaWNlc1xuICAgICAqXG4gICAgICogQG1lbWJlciB7VWludDE2QXJyYXl9XG4gICAgICovXG4gICAgXG4gICAgdGhpcy5pbmRpY2VzID0gbmV3IFVpbnQxNkFycmF5KDE1MDAwKTtcblxuICAgIC8vVE9ETyB0aGlzIGNvdWxkIGJlIGEgc2luZ2xlIGJ1ZmZlciBzaGFyZWQgYW1vbmdzdCBhbGwgcmVuZGVyZXJzIGFzIHdlIHJldXNlIHRoaXMgc2V0IHVwIGluIG1vc3QgcmVuZGVyZXJzXG4gICAgZm9yICh2YXIgaT0wLCBqPTA7IGkgPCAxNTAwMDsgaSArPSA2LCBqICs9IDQpXG4gICAge1xuICAgICAgICB0aGlzLmluZGljZXNbaSArIDBdID0gaiArIDA7XG4gICAgICAgIHRoaXMuaW5kaWNlc1tpICsgMV0gPSBqICsgMTtcbiAgICAgICAgdGhpcy5pbmRpY2VzW2kgKyAyXSA9IGogKyAyO1xuICAgICAgICB0aGlzLmluZGljZXNbaSArIDNdID0gaiArIDA7XG4gICAgICAgIHRoaXMuaW5kaWNlc1tpICsgNF0gPSBqICsgMjtcbiAgICAgICAgdGhpcy5pbmRpY2VzW2kgKyA1XSA9IGogKyAzO1xuICAgIH1cblxuICAgIHRoaXMuY3VycmVudFNoYWRlciA9IG51bGw7XG59XG5cbk1lc2hSZW5kZXJlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuT2JqZWN0UmVuZGVyZXIucHJvdG90eXBlKTtcbk1lc2hSZW5kZXJlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBNZXNoUmVuZGVyZXI7XG5tb2R1bGUuZXhwb3J0cyA9IE1lc2hSZW5kZXJlcjtcblxuY29yZS5XZWJHTFJlbmRlcmVyLnJlZ2lzdGVyUGx1Z2luKCdtZXNoJywgTWVzaFJlbmRlcmVyKTtcblxuLyoqXG4gKiBTZXRzIHVwIHRoZSByZW5kZXJlciBjb250ZXh0IGFuZCBuZWNlc3NhcnkgYnVmZmVycy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIGdsIHtXZWJHTFJlbmRlcmluZ0NvbnRleHR9IHRoZSBjdXJyZW50IFdlYkdMIGRyYXdpbmcgY29udGV4dFxuICovXG5NZXNoUmVuZGVyZXIucHJvdG90eXBlLm9uQ29udGV4dENoYW5nZSA9IGZ1bmN0aW9uICgpXG57XG5cbn07XG5cbi8qKlxuICogUmVuZGVycyB0aGUgc3ByaXRlIG9iamVjdC5cbiAqXG4gKiBAcGFyYW0gbWVzaCB7UElYSS5tZXNoLk1lc2h9IHRoZSBtZXNoIHRvIHJlbmRlclxuICovXG5NZXNoUmVuZGVyZXIucHJvdG90eXBlLnJlbmRlciA9IGZ1bmN0aW9uIChtZXNoKVxue1xuICAgIGlmKCFtZXNoLl92ZXJ0ZXhCdWZmZXIpXG4gICAge1xuICAgICAgICB0aGlzLl9pbml0V2ViR0wobWVzaCk7XG4gICAgfVxuXG4gICAgdmFyIHJlbmRlcmVyID0gdGhpcy5yZW5kZXJlcixcbiAgICAgICAgZ2wgPSByZW5kZXJlci5nbCxcbiAgICAgICAgdGV4dHVyZSA9IG1lc2guX3RleHR1cmUuYmFzZVRleHR1cmUsXG4gICAgICAgIHNoYWRlciA9IG1lc2guc2hhZGVyOy8vIHx8IHJlbmRlcmVyLnNoYWRlck1hbmFnZXIucGx1Z2lucy5tZXNoU2hhZGVyO1xuXG4gICAgdmFyIGRyYXdNb2RlID0gbWVzaC5kcmF3TW9kZSA9PT0gTWVzaC5EUkFXX01PREVTLlRSSUFOR0xFX01FU0ggPyBnbC5UUklBTkdMRV9TVFJJUCA6IGdsLlRSSUFOR0xFUztcblxuICAgIHJlbmRlcmVyLmJsZW5kTW9kZU1hbmFnZXIuc2V0QmxlbmRNb2RlKG1lc2guYmxlbmRNb2RlKTtcblxuICAgIC8vVE9ETyBjYWNoZSBjdXN0b20gc3RhdGUuLlxuICAgIGlmICghc2hhZGVyKVxuICAgIHtcbiAgICAgICAgc2hhZGVyID0gcmVuZGVyZXIuc2hhZGVyTWFuYWdlci5wbHVnaW5zLm1lc2hTaGFkZXI7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHNoYWRlciA9IHNoYWRlci5zaGFkZXJzW2dsLmlkXSB8fCBzaGFkZXIuZ2V0U2hhZGVyKHJlbmRlcmVyKTsvLyA6IHNoYWRlcjtcbiAgICB9XG5cbiAgICB0aGlzLnJlbmRlcmVyLnNoYWRlck1hbmFnZXIuc2V0U2hhZGVyKHNoYWRlcik7XG5cbiAgICBzaGFkZXIudW5pZm9ybXMudHJhbnNsYXRpb25NYXRyaXgudmFsdWUgPSBtZXNoLndvcmxkVHJhbnNmb3JtLnRvQXJyYXkodHJ1ZSk7XG4gICAgc2hhZGVyLnVuaWZvcm1zLnByb2plY3Rpb25NYXRyaXgudmFsdWUgPSByZW5kZXJlci5jdXJyZW50UmVuZGVyVGFyZ2V0LnByb2plY3Rpb25NYXRyaXgudG9BcnJheSh0cnVlKTtcbiAgICBzaGFkZXIudW5pZm9ybXMuYWxwaGEudmFsdWUgPSBtZXNoLndvcmxkQWxwaGE7XG5cbiAgICBzaGFkZXIuc3luY1VuaWZvcm1zKCk7XG5cbiAgICBpZiAoIW1lc2guZGlydHkpXG4gICAge1xuXG4gICAgICAgIGdsLmJpbmRCdWZmZXIoZ2wuQVJSQVlfQlVGRkVSLCBtZXNoLl92ZXJ0ZXhCdWZmZXIpO1xuICAgICAgICBnbC5idWZmZXJTdWJEYXRhKGdsLkFSUkFZX0JVRkZFUiwgMCwgbWVzaC52ZXJ0aWNlcyk7XG4gICAgICAgIGdsLnZlcnRleEF0dHJpYlBvaW50ZXIoc2hhZGVyLmF0dHJpYnV0ZXMuYVZlcnRleFBvc2l0aW9uLCAyLCBnbC5GTE9BVCwgZmFsc2UsIDAsIDApO1xuXG4gICAgICAgIC8vIHVwZGF0ZSB0aGUgdXZzXG4gICAgICAgIGdsLmJpbmRCdWZmZXIoZ2wuQVJSQVlfQlVGRkVSLCBtZXNoLl91dkJ1ZmZlcik7XG4gICAgICAgIGdsLnZlcnRleEF0dHJpYlBvaW50ZXIoc2hhZGVyLmF0dHJpYnV0ZXMuYVRleHR1cmVDb29yZCwgMiwgZ2wuRkxPQVQsIGZhbHNlLCAwLCAwKTtcblxuXG4gICAgICAgIGdsLmFjdGl2ZVRleHR1cmUoZ2wuVEVYVFVSRTApO1xuXG4gICAgICAgaWYgKCF0ZXh0dXJlLl9nbFRleHR1cmVzW2dsLmlkXSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5yZW5kZXJlci51cGRhdGVUZXh0dXJlKHRleHR1cmUpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2VcbiAgICAgICAge1xuICAgICAgICAgICAgLy8gYmluZCB0aGUgY3VycmVudCB0ZXh0dXJlXG4gICAgICAgICAgICBnbC5iaW5kVGV4dHVyZShnbC5URVhUVVJFXzJELCB0ZXh0dXJlLl9nbFRleHR1cmVzW2dsLmlkXSk7XG4gICAgICAgIH1cblxuICAgICAgICBnbC5iaW5kQnVmZmVyKGdsLkVMRU1FTlRfQVJSQVlfQlVGRkVSLCBtZXNoLl9pbmRleEJ1ZmZlcik7XG4gICAgICAgIGdsLmJ1ZmZlclN1YkRhdGEoZ2wuRUxFTUVOVF9BUlJBWV9CVUZGRVIsIDAsIG1lc2guaW5kaWNlcyk7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG5cbiAgICAgICAgbWVzaC5kaXJ0eSA9IGZhbHNlO1xuICAgICAgICBnbC5iaW5kQnVmZmVyKGdsLkFSUkFZX0JVRkZFUiwgbWVzaC5fdmVydGV4QnVmZmVyKTtcbiAgICAgICAgZ2wuYnVmZmVyRGF0YShnbC5BUlJBWV9CVUZGRVIsIG1lc2gudmVydGljZXMsIGdsLlNUQVRJQ19EUkFXKTtcbiAgICAgICAgZ2wudmVydGV4QXR0cmliUG9pbnRlcihzaGFkZXIuYXR0cmlidXRlcy5hVmVydGV4UG9zaXRpb24sIDIsIGdsLkZMT0FULCBmYWxzZSwgMCwgMCk7XG5cbiAgICAgICAgLy8gdXBkYXRlIHRoZSB1dnNcbiAgICAgICAgZ2wuYmluZEJ1ZmZlcihnbC5BUlJBWV9CVUZGRVIsIG1lc2guX3V2QnVmZmVyKTtcbiAgICAgICAgZ2wuYnVmZmVyRGF0YShnbC5BUlJBWV9CVUZGRVIsIG1lc2gudXZzLCBnbC5TVEFUSUNfRFJBVyk7XG4gICAgICAgIGdsLnZlcnRleEF0dHJpYlBvaW50ZXIoc2hhZGVyLmF0dHJpYnV0ZXMuYVRleHR1cmVDb29yZCwgMiwgZ2wuRkxPQVQsIGZhbHNlLCAwLCAwKTtcblxuICAgICAgICAgZ2wuYWN0aXZlVGV4dHVyZShnbC5URVhUVVJFMCk7XG5cbiAgICAgICAgaWYgKCF0ZXh0dXJlLl9nbFRleHR1cmVzW2dsLmlkXSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5yZW5kZXJlci51cGRhdGVUZXh0dXJlKHRleHR1cmUpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2VcbiAgICAgICAge1xuICAgICAgICAgICAgLy8gYmluZCB0aGUgY3VycmVudCB0ZXh0dXJlXG4gICAgICAgICAgICBnbC5iaW5kVGV4dHVyZShnbC5URVhUVVJFXzJELCB0ZXh0dXJlLl9nbFRleHR1cmVzW2dsLmlkXSk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBkb250IG5lZWQgdG8gdXBsb2FkIVxuICAgICAgICBnbC5iaW5kQnVmZmVyKGdsLkVMRU1FTlRfQVJSQVlfQlVGRkVSLCBtZXNoLl9pbmRleEJ1ZmZlcik7XG4gICAgICAgIGdsLmJ1ZmZlckRhdGEoZ2wuRUxFTUVOVF9BUlJBWV9CVUZGRVIsIG1lc2guaW5kaWNlcywgZ2wuU1RBVElDX0RSQVcpO1xuXG4gICAgfVxuXG4gICAgZ2wuZHJhd0VsZW1lbnRzKGRyYXdNb2RlLCBtZXNoLmluZGljZXMubGVuZ3RoLCBnbC5VTlNJR05FRF9TSE9SVCwgMCk7XG5cbn07XG5cbi8qKlxuICogUHJlcGFyZXMgYWxsIHRoZSBidWZmZXJzIHRvIHJlbmRlciB0aGlzIG1lc2hcbiAqIEBwYXJhbSBtZXNoIHtQSVhJLm1lc2guTWVzaH0gdGhlIG1lc2ggdG8gcmVuZGVyXG4gKi9cbk1lc2hSZW5kZXJlci5wcm90b3R5cGUuX2luaXRXZWJHTCA9IGZ1bmN0aW9uIChtZXNoKVxue1xuICAgIC8vIGJ1aWxkIHRoZSBzdHJpcCFcbiAgICB2YXIgZ2wgPSB0aGlzLnJlbmRlcmVyLmdsO1xuXG4gICAgbWVzaC5fdmVydGV4QnVmZmVyID0gZ2wuY3JlYXRlQnVmZmVyKCk7XG4gICAgbWVzaC5faW5kZXhCdWZmZXIgPSBnbC5jcmVhdGVCdWZmZXIoKTtcbiAgICBtZXNoLl91dkJ1ZmZlciA9IGdsLmNyZWF0ZUJ1ZmZlcigpO1xuXG5cblxuICAgIGdsLmJpbmRCdWZmZXIoZ2wuQVJSQVlfQlVGRkVSLCBtZXNoLl92ZXJ0ZXhCdWZmZXIpO1xuICAgIGdsLmJ1ZmZlckRhdGEoZ2wuQVJSQVlfQlVGRkVSLCBtZXNoLnZlcnRpY2VzLCBnbC5EWU5BTUlDX0RSQVcpO1xuXG4gICAgZ2wuYmluZEJ1ZmZlcihnbC5BUlJBWV9CVUZGRVIsIG1lc2guX3V2QnVmZmVyKTtcbiAgICBnbC5idWZmZXJEYXRhKGdsLkFSUkFZX0JVRkZFUiwgIG1lc2gudXZzLCBnbC5TVEFUSUNfRFJBVyk7XG5cbiAgICBpZihtZXNoLmNvbG9ycyl7XG4gICAgICAgIG1lc2guX2NvbG9yQnVmZmVyID0gZ2wuY3JlYXRlQnVmZmVyKCk7XG4gICAgICAgIGdsLmJpbmRCdWZmZXIoZ2wuQVJSQVlfQlVGRkVSLCBtZXNoLl9jb2xvckJ1ZmZlcik7XG4gICAgICAgIGdsLmJ1ZmZlckRhdGEoZ2wuQVJSQVlfQlVGRkVSLCBtZXNoLmNvbG9ycywgZ2wuU1RBVElDX0RSQVcpO1xuICAgIH1cblxuICAgIGdsLmJpbmRCdWZmZXIoZ2wuRUxFTUVOVF9BUlJBWV9CVUZGRVIsIG1lc2guX2luZGV4QnVmZmVyKTtcbiAgICBnbC5idWZmZXJEYXRhKGdsLkVMRU1FTlRfQVJSQVlfQlVGRkVSLCBtZXNoLmluZGljZXMsIGdsLlNUQVRJQ19EUkFXKTtcbn07XG5cblxuLyoqXG4gKiBFbXB0aWVzIHRoZSBjdXJyZW50IGJhdGNoLlxuICpcbiAqL1xuTWVzaFJlbmRlcmVyLnByb3RvdHlwZS5mbHVzaCA9IGZ1bmN0aW9uICgpXG57XG5cbn07XG5cbi8qKlxuICogU3RhcnRzIGEgbmV3IG1lc2ggcmVuZGVyZXIuXG4gKlxuICovXG5NZXNoUmVuZGVyZXIucHJvdG90eXBlLnN0YXJ0ID0gZnVuY3Rpb24gKClcbntcbiAgICBcblxuICAgIHRoaXMuY3VycmVudFNoYWRlciA9IG51bGw7XG59O1xuXG4vKipcbiAqIERlc3Ryb3lzIHRoZSBNZXNoIHJlbmRlcmVyXG4gKlxuICovXG5NZXNoUmVuZGVyZXIucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoKVxue1xuICAgIGNvcmUuT2JqZWN0UmVuZGVyZXIucHJvdG90eXBlLmRlc3Ryb3kuY2FsbCh0aGlzKTtcbn07XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uLy4uL2NvcmUnKTtcblxuLyoqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuU2hhZGVyXG4gKiBAbWVtYmVyb2YgUElYSS5tZXNoXG4gKiBAcGFyYW0gc2hhZGVyTWFuYWdlciB7UElYSS5TaGFkZXJNYW5hZ2VyfSBUaGUgV2ViR0wgc2hhZGVyIG1hbmFnZXIgdGhpcyBzaGFkZXIgd29ya3MgZm9yLlxuICovXG5mdW5jdGlvbiBNZXNoU2hhZGVyKHNoYWRlck1hbmFnZXIpXG57XG4gICAgY29yZS5TaGFkZXIuY2FsbCh0aGlzLFxuICAgICAgICBzaGFkZXJNYW5hZ2VyLFxuICAgICAgICAvLyB2ZXJ0ZXggc2hhZGVyXG4gICAgICAgIFtcbiAgICAgICAgICAgICdwcmVjaXNpb24gbG93cCBmbG9hdDsnLFxuICAgICAgICAgICAgJ2F0dHJpYnV0ZSB2ZWMyIGFWZXJ0ZXhQb3NpdGlvbjsnLFxuICAgICAgICAgICAgJ2F0dHJpYnV0ZSB2ZWMyIGFUZXh0dXJlQ29vcmQ7JyxcblxuICAgICAgICAgICAgJ3VuaWZvcm0gbWF0MyB0cmFuc2xhdGlvbk1hdHJpeDsnLFxuICAgICAgICAgICAgJ3VuaWZvcm0gbWF0MyBwcm9qZWN0aW9uTWF0cml4OycsXG5cbiAgICAgICAgICAgICd2YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDsnLFxuXG4gICAgICAgICAgICAndm9pZCBtYWluKHZvaWQpeycsXG4gICAgICAgICAgICAnICAgZ2xfUG9zaXRpb24gPSB2ZWM0KChwcm9qZWN0aW9uTWF0cml4ICogdHJhbnNsYXRpb25NYXRyaXggKiB2ZWMzKGFWZXJ0ZXhQb3NpdGlvbiwgMS4wKSkueHksIDAuMCwgMS4wKTsnLFxuICAgICAgICAgICAgJyAgIHZUZXh0dXJlQ29vcmQgPSBhVGV4dHVyZUNvb3JkOycsXG4gICAgICAgICAgICAnfSdcbiAgICAgICAgXS5qb2luKCdcXG4nKSxcbiAgICAgICAgW1xuICAgICAgICAgICAgJ3ByZWNpc2lvbiBsb3dwIGZsb2F0OycsXG5cbiAgICAgICAgICAgICd2YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDsnLFxuICAgICAgICAgICAgJ3VuaWZvcm0gZmxvYXQgYWxwaGE7JyxcblxuICAgICAgICAgICAgJ3VuaWZvcm0gc2FtcGxlcjJEIHVTYW1wbGVyOycsXG5cbiAgICAgICAgICAgICd2b2lkIG1haW4odm9pZCl7JyxcbiAgICAgICAgICAgICcgICBnbF9GcmFnQ29sb3IgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZUZXh0dXJlQ29vcmQpICogYWxwaGEgOycsXG4gICAgICAgICAgICAnfSdcbiAgICAgICAgXS5qb2luKCdcXG4nKSxcbiAgICAgICAgLy8gY3VzdG9tIHVuaWZvcm1zXG4gICAgICAgIHtcbiAgICAgICAgICAgIGFscGhhOiAgeyB0eXBlOiAnMWYnLCB2YWx1ZTogMCB9LFxuICAgICAgICAgICAgdHJhbnNsYXRpb25NYXRyaXg6IHsgdHlwZTogJ21hdDMnLCB2YWx1ZTogbmV3IEZsb2F0MzJBcnJheSg5KSB9LFxuICAgICAgICAgICAgcHJvamVjdGlvbk1hdHJpeDogeyB0eXBlOiAnbWF0MycsIHZhbHVlOiBuZXcgRmxvYXQzMkFycmF5KDkpIH1cbiAgICAgICAgfSxcbiAgICAgICAgLy8gY3VzdG9tIGF0dHJpYnV0ZXNcbiAgICAgICAge1xuICAgICAgICAgICAgYVZlcnRleFBvc2l0aW9uOjAsXG4gICAgICAgICAgICBhVGV4dHVyZUNvb3JkOjBcbiAgICAgICAgfVxuICAgICk7XG59XG5cbk1lc2hTaGFkZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShjb3JlLlNoYWRlci5wcm90b3R5cGUpO1xuTWVzaFNoYWRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBNZXNoU2hhZGVyO1xubW9kdWxlLmV4cG9ydHMgPSBNZXNoU2hhZGVyO1xuXG5jb3JlLlNoYWRlck1hbmFnZXIucmVnaXN0ZXJQbHVnaW4oJ21lc2hTaGFkZXInLCBNZXNoU2hhZGVyKTtcbiIsIi8vIFJlZmVyZW5jZXM6XG4vLyBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9KYXZhU2NyaXB0L1JlZmVyZW5jZS9HbG9iYWxfT2JqZWN0cy9NYXRoL3NpZ25cblxuaWYgKCFNYXRoLnNpZ24pXG57XG4gICAgTWF0aC5zaWduID0gZnVuY3Rpb24gKHgpIHtcbiAgICAgICAgeCA9ICt4O1xuICAgICAgICBpZiAoeCA9PT0gMCB8fCBpc05hTih4KSlcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHg7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHggPiAwID8gMSA6IC0xO1xuICAgIH07XG59XG4iLCIvLyBSZWZlcmVuY2VzOlxuLy8gaHR0cHM6Ly9naXRodWIuY29tL3NpbmRyZXNvcmh1cy9vYmplY3QtYXNzaWduXG4vLyBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9KYXZhU2NyaXB0L1JlZmVyZW5jZS9HbG9iYWxfT2JqZWN0cy9PYmplY3QvYXNzaWduXG5cbmlmICghT2JqZWN0LmFzc2lnbilcbntcbiAgICBPYmplY3QuYXNzaWduID0gcmVxdWlyZSgnb2JqZWN0LWFzc2lnbicpO1xufVxuIiwicmVxdWlyZSgnLi9PYmplY3QuYXNzaWduJyk7XG5yZXF1aXJlKCcuL3JlcXVlc3RBbmltYXRpb25GcmFtZScpO1xucmVxdWlyZSgnLi9NYXRoLnNpZ24nKTtcbiIsIi8vIFJlZmVyZW5jZXM6XG4vLyBodHRwOi8vcGF1bGlyaXNoLmNvbS8yMDExL3JlcXVlc3RhbmltYXRpb25mcmFtZS1mb3Itc21hcnQtYW5pbWF0aW5nL1xuLy8gaHR0cHM6Ly9naXN0LmdpdGh1Yi5jb20vMTU3OTY3MVxuLy8gaHR0cDovL3VwZGF0ZXMuaHRtbDVyb2Nrcy5jb20vMjAxMi8wNS9yZXF1ZXN0QW5pbWF0aW9uRnJhbWUtQVBJLW5vdy13aXRoLXN1Yi1taWxsaXNlY29uZC1wcmVjaXNpb25cbi8vIGh0dHBzOi8vZ2lzdC5naXRodWIuY29tL3RpbWhhbGwvNDA3ODYxNFxuLy8gaHR0cHM6Ly9naXRodWIuY29tL0ZpbmFuY2lhbC1UaW1lcy9wb2x5ZmlsbC1zZXJ2aWNlL3RyZWUvbWFzdGVyL3BvbHlmaWxscy9yZXF1ZXN0QW5pbWF0aW9uRnJhbWVcblxuLy8gRXhwZWN0ZWQgdG8gYmUgdXNlZCB3aXRoIEJyb3dzZXJmaXlcbi8vIEJyb3dzZXJpZnkgYXV0b21hdGljYWxseSBkZXRlY3RzIHRoZSB1c2Ugb2YgYGdsb2JhbGAgYW5kIHBhc3NlcyB0aGVcbi8vIGNvcnJlY3QgcmVmZXJlbmNlIG9mIGBnbG9iYWxgLCBgc2VsZmAsIGFuZCBmaW5hbGx5IGB3aW5kb3dgXG5cbi8vIERhdGUubm93XG5pZiAoIShEYXRlLm5vdyAmJiBEYXRlLnByb3RvdHlwZS5nZXRUaW1lKSkge1xuICAgIERhdGUubm93ID0gZnVuY3Rpb24gbm93KCkge1xuICAgICAgICByZXR1cm4gbmV3IERhdGUoKS5nZXRUaW1lKCk7XG4gICAgfTtcbn1cblxuLy8gcGVyZm9ybWFuY2Uubm93XG5pZiAoIShnbG9iYWwucGVyZm9ybWFuY2UgJiYgZ2xvYmFsLnBlcmZvcm1hbmNlLm5vdykpIHtcbiAgICB2YXIgc3RhcnRUaW1lID0gRGF0ZS5ub3coKTtcbiAgICBpZiAoIWdsb2JhbC5wZXJmb3JtYW5jZSkge1xuICAgICAgICBnbG9iYWwucGVyZm9ybWFuY2UgPSB7fTtcbiAgICB9XG4gICAgZ2xvYmFsLnBlcmZvcm1hbmNlLm5vdyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIERhdGUubm93KCkgLSBzdGFydFRpbWU7XG4gICAgfTtcbn1cblxuLy8gcmVxdWVzdEFuaW1hdGlvbkZyYW1lXG52YXIgbGFzdFRpbWUgPSBEYXRlLm5vdygpO1xudmFyIHZlbmRvcnMgPSBbJ21zJywgJ21veicsICd3ZWJraXQnLCAnbyddO1xuXG5mb3IodmFyIHggPSAwOyB4IDwgdmVuZG9ycy5sZW5ndGggJiYgIWdsb2JhbC5yZXF1ZXN0QW5pbWF0aW9uRnJhbWU7ICsreCkge1xuICAgIGdsb2JhbC5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUgPSBnbG9iYWxbdmVuZG9yc1t4XSArICdSZXF1ZXN0QW5pbWF0aW9uRnJhbWUnXTtcbiAgICBnbG9iYWwuY2FuY2VsQW5pbWF0aW9uRnJhbWUgPSBnbG9iYWxbdmVuZG9yc1t4XSArICdDYW5jZWxBbmltYXRpb25GcmFtZSddIHx8XG4gICAgICAgIGdsb2JhbFt2ZW5kb3JzW3hdICsgJ0NhbmNlbFJlcXVlc3RBbmltYXRpb25GcmFtZSddO1xufVxuXG5pZiAoIWdsb2JhbC5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUpIHtcbiAgICBnbG9iYWwucmVxdWVzdEFuaW1hdGlvbkZyYW1lID0gZnVuY3Rpb24gKGNhbGxiYWNrKSB7XG4gICAgICAgIGlmICh0eXBlb2YgY2FsbGJhY2sgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoY2FsbGJhY2sgKyAnaXMgbm90IGEgZnVuY3Rpb24nKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBjdXJyZW50VGltZSA9IERhdGUubm93KCksXG4gICAgICAgICAgICBkZWxheSA9IDE2ICsgbGFzdFRpbWUgLSBjdXJyZW50VGltZTtcblxuICAgICAgICBpZiAoZGVsYXkgPCAwKSB7XG4gICAgICAgICAgICBkZWxheSA9IDA7XG4gICAgICAgIH1cblxuICAgICAgICBsYXN0VGltZSA9IGN1cnJlbnRUaW1lO1xuXG4gICAgICAgIHJldHVybiBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGxhc3RUaW1lID0gRGF0ZS5ub3coKTtcbiAgICAgICAgICAgIGNhbGxiYWNrKHBlcmZvcm1hbmNlLm5vdygpKTtcbiAgICAgICAgfSwgZGVsYXkpO1xuICAgIH07XG59XG5cbmlmICghZ2xvYmFsLmNhbmNlbEFuaW1hdGlvbkZyYW1lKSB7XG4gICAgZ2xvYmFsLmNhbmNlbEFuaW1hdGlvbkZyYW1lID0gZnVuY3Rpb24oaWQpIHtcbiAgICAgICAgY2xlYXJUaW1lb3V0KGlkKTtcbiAgICB9O1xufVxuIl19 +//# sourceMappingURL=data:application/json;charset:utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIm5vZGVfbW9kdWxlcy9icm93c2VyaWZ5L25vZGVfbW9kdWxlcy9icm93c2VyLXBhY2svX3ByZWx1ZGUuanMiLCIuLi9waXhpLWdsLWNvcmUvaW5kZXguanMiLCIuLi9waXhpLWdsLWNvcmUvbGliL0dMQnVmZmVyLmpzIiwiLi4vcGl4aS1nbC1jb3JlL2xpYi9HTEZyYW1lYnVmZmVyLmpzIiwiLi4vcGl4aS1nbC1jb3JlL2xpYi9HTFNoYWRlci5qcyIsIi4uL3BpeGktZ2wtY29yZS9saWIvR0xUZXh0dXJlLmpzIiwiLi4vcGl4aS1nbC1jb3JlL2xpYi9WZXJ0ZXhBcnJheU9iamVjdC5qcyIsIi4uL3BpeGktZ2wtY29yZS9saWIvY3JlYXRlQ29udGV4dC5qcyIsIi4uL3BpeGktZ2wtY29yZS9saWIvc2V0VmVydGV4QXR0cmliQXJyYXlzLmpzIiwiLi4vcGl4aS1nbC1jb3JlL2xpYi9zaGFkZXIvY29tcGlsZVByb2dyYW0uanMiLCIuLi9waXhpLWdsLWNvcmUvbGliL3NoYWRlci9kZWZhdWx0VmFsdWUuanMiLCIuLi9waXhpLWdsLWNvcmUvbGliL3NoYWRlci9leHRyYWN0QXR0cmlidXRlcy5qcyIsIi4uL3BpeGktZ2wtY29yZS9saWIvc2hhZGVyL2V4dHJhY3RVbmlmb3Jtcy5qcyIsIi4uL3BpeGktZ2wtY29yZS9saWIvc2hhZGVyL2dlbmVyYXRlVW5pZm9ybUFjY2Vzc09iamVjdC5qcyIsIi4uL3BpeGktZ2wtY29yZS9saWIvc2hhZGVyL21hcFNpemUuanMiLCIuLi9waXhpLWdsLWNvcmUvbGliL3NoYWRlci9tYXBUeXBlLmpzIiwibm9kZV9tb2R1bGVzL2FzeW5jL2xpYi9hc3luYy5qcyIsIm5vZGVfbW9kdWxlcy9icm93c2VyaWZ5L25vZGVfbW9kdWxlcy9wYXRoLWJyb3dzZXJpZnkvaW5kZXguanMiLCJub2RlX21vZHVsZXMvYnJvd3NlcmlmeS9ub2RlX21vZHVsZXMvcHJvY2Vzcy9icm93c2VyLmpzIiwibm9kZV9tb2R1bGVzL2Jyb3dzZXJpZnkvbm9kZV9tb2R1bGVzL3B1bnljb2RlL3B1bnljb2RlLmpzIiwibm9kZV9tb2R1bGVzL2Jyb3dzZXJpZnkvbm9kZV9tb2R1bGVzL3F1ZXJ5c3RyaW5nLWVzMy9kZWNvZGUuanMiLCJub2RlX21vZHVsZXMvYnJvd3NlcmlmeS9ub2RlX21vZHVsZXMvcXVlcnlzdHJpbmctZXMzL2VuY29kZS5qcyIsIm5vZGVfbW9kdWxlcy9icm93c2VyaWZ5L25vZGVfbW9kdWxlcy9xdWVyeXN0cmluZy1lczMvaW5kZXguanMiLCJub2RlX21vZHVsZXMvYnJvd3NlcmlmeS9ub2RlX21vZHVsZXMvdXJsL3VybC5qcyIsIm5vZGVfbW9kdWxlcy9lYXJjdXQvc3JjL2VhcmN1dC5qcyIsIm5vZGVfbW9kdWxlcy9ldmVudGVtaXR0ZXIzL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL29iamVjdC1hc3NpZ24vaW5kZXguanMiLCJub2RlX21vZHVsZXMvcmVzb3VyY2UtbG9hZGVyL25vZGVfbW9kdWxlcy9hc3luYy9saWIvYXN5bmMuanMiLCJub2RlX21vZHVsZXMvcmVzb3VyY2UtbG9hZGVyL3NyYy9Mb2FkZXIuanMiLCJub2RlX21vZHVsZXMvcmVzb3VyY2UtbG9hZGVyL3NyYy9SZXNvdXJjZS5qcyIsIm5vZGVfbW9kdWxlcy9yZXNvdXJjZS1sb2FkZXIvc3JjL2I2NC5qcyIsIm5vZGVfbW9kdWxlcy9yZXNvdXJjZS1sb2FkZXIvc3JjL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL3Jlc291cmNlLWxvYWRlci9zcmMvbWlkZGxld2FyZXMvY2FjaGluZy9tZW1vcnkuanMiLCJub2RlX21vZHVsZXMvcmVzb3VyY2UtbG9hZGVyL3NyYy9taWRkbGV3YXJlcy9wYXJzaW5nL2Jsb2IuanMiLCJwYWNrYWdlLmpzb24iLCJzcmMvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5TWFuYWdlci5qcyIsInNyYy9hY2Nlc3NpYmlsaXR5L2FjY2Vzc2libGVUYXJnZXQuanMiLCJzcmMvYWNjZXNzaWJpbGl0eS9pbmRleC5qcyIsInNyYy9jb3JlL2NvbnN0LmpzIiwic3JjL2NvcmUvZGlzcGxheS9Db250YWluZXIuanMiLCJzcmMvY29yZS9kaXNwbGF5L0Rpc3BsYXlPYmplY3QuanMiLCJzcmMvY29yZS9ncmFwaGljcy9HcmFwaGljcy5qcyIsInNyYy9jb3JlL2dyYXBoaWNzL0dyYXBoaWNzRGF0YS5qcyIsInNyYy9jb3JlL2dyYXBoaWNzL3dlYmdsL0dyYXBoaWNzUmVuZGVyZXIuanMiLCJzcmMvY29yZS9ncmFwaGljcy93ZWJnbC9XZWJHTEdyYXBoaWNzRGF0YS5qcyIsInNyYy9jb3JlL2dyYXBoaWNzL3dlYmdsL3NoYWRlcnMvUHJpbWl0aXZlU2hhZGVyLmpzIiwic3JjL2NvcmUvZ3JhcGhpY3Mvd2ViZ2wvdXRpbHMvYnVpbGRDaXJjbGUuanMiLCJzcmMvY29yZS9ncmFwaGljcy93ZWJnbC91dGlscy9idWlsZENvbXBsZXhQb2x5LmpzIiwic3JjL2NvcmUvZ3JhcGhpY3Mvd2ViZ2wvdXRpbHMvYnVpbGRMaW5lLmpzIiwic3JjL2NvcmUvZ3JhcGhpY3Mvd2ViZ2wvdXRpbHMvYnVpbGRQb2x5LmpzIiwic3JjL2NvcmUvZ3JhcGhpY3Mvd2ViZ2wvdXRpbHMvYnVpbGRSZWN0YW5nbGUuanMiLCJzcmMvY29yZS9ncmFwaGljcy93ZWJnbC91dGlscy9idWlsZFJvdW5kZWRSZWN0YW5nbGUuanMiLCJzcmMvY29yZS9pbmRleC5qcyIsInNyYy9jb3JlL21hdGgvTWF0cml4LmpzIiwic3JjL2NvcmUvbWF0aC9Qb2ludC5qcyIsInNyYy9jb3JlL21hdGgvaW5kZXguanMiLCJzcmMvY29yZS9tYXRoL3NoYXBlcy9DaXJjbGUuanMiLCJzcmMvY29yZS9tYXRoL3NoYXBlcy9FbGxpcHNlLmpzIiwic3JjL2NvcmUvbWF0aC9zaGFwZXMvUG9seWdvbi5qcyIsInNyYy9jb3JlL21hdGgvc2hhcGVzL1JlY3RhbmdsZS5qcyIsInNyYy9jb3JlL21hdGgvc2hhcGVzL1JvdW5kZWRSZWN0YW5nbGUuanMiLCJzcmMvY29yZS9wYXJ0aWNsZXMvUGFydGljbGVDb250YWluZXIuanMiLCJzcmMvY29yZS9wYXJ0aWNsZXMvd2ViZ2wvUGFydGljbGVCdWZmZXIuanMiLCJzcmMvY29yZS9wYXJ0aWNsZXMvd2ViZ2wvUGFydGljbGVSZW5kZXJlci5qcyIsInNyYy9jb3JlL3BhcnRpY2xlcy93ZWJnbC9QYXJ0aWNsZVNoYWRlci5qcyIsInNyYy9jb3JlL3JlbmRlcmVycy9TeXN0ZW1SZW5kZXJlci5qcyIsInNyYy9jb3JlL3JlbmRlcmVycy9jYW52YXMvQ2FudmFzUmVuZGVyZXIuanMiLCJzcmMvY29yZS9yZW5kZXJlcnMvY2FudmFzL3V0aWxzL0NhbnZhc0J1ZmZlci5qcyIsInNyYy9jb3JlL3JlbmRlcmVycy9jYW52YXMvdXRpbHMvQ2FudmFzR3JhcGhpY3MuanMiLCJzcmMvY29yZS9yZW5kZXJlcnMvY2FudmFzL3V0aWxzL0NhbnZhc01hc2tNYW5hZ2VyLmpzIiwic3JjL2NvcmUvcmVuZGVyZXJzL2NhbnZhcy91dGlscy9DYW52YXNUaW50ZXIuanMiLCJzcmMvY29yZS9yZW5kZXJlcnMvd2ViZ2wvVGV4dHVyZU1hbmFnZXIuanMiLCJzcmMvY29yZS9yZW5kZXJlcnMvd2ViZ2wvV2ViR0xSZW5kZXJlci5qcyIsInNyYy9jb3JlL3JlbmRlcmVycy93ZWJnbC9maWx0ZXJzL0Fic3RyYWN0RmlsdGVyLmpzIiwic3JjL2NvcmUvcmVuZGVyZXJzL3dlYmdsL2ZpbHRlcnMvRlhBQUZpbHRlci5qcyIsInNyYy9jb3JlL3JlbmRlcmVycy93ZWJnbC9maWx0ZXJzL1Nwcml0ZU1hc2tGaWx0ZXIuanMiLCJzcmMvY29yZS9yZW5kZXJlcnMvd2ViZ2wvbWFuYWdlcnMvQmxlbmRNb2RlTWFuYWdlci5qcyIsInNyYy9jb3JlL3JlbmRlcmVycy93ZWJnbC9tYW5hZ2Vycy9GaWx0ZXJNYW5hZ2VyLmpzIiwic3JjL2NvcmUvcmVuZGVyZXJzL3dlYmdsL21hbmFnZXJzL01hc2tNYW5hZ2VyLmpzIiwic3JjL2NvcmUvcmVuZGVyZXJzL3dlYmdsL21hbmFnZXJzL1NoYWRlck1hbmFnZXIuanMiLCJzcmMvY29yZS9yZW5kZXJlcnMvd2ViZ2wvbWFuYWdlcnMvU3RlbmNpbE1hbmFnZXIuanMiLCJzcmMvY29yZS9yZW5kZXJlcnMvd2ViZ2wvbWFuYWdlcnMvV2ViR0xNYW5hZ2VyLmpzIiwic3JjL2NvcmUvcmVuZGVyZXJzL3dlYmdsL3NoYWRlcnMvQ29tcGxleFByaW1pdGl2ZVNoYWRlci5qcyIsInNyYy9jb3JlL3JlbmRlcmVycy93ZWJnbC9zaGFkZXJzL1ByaW1pdGl2ZVNoYWRlci5qcyIsInNyYy9jb3JlL3JlbmRlcmVycy93ZWJnbC9zaGFkZXJzL1NoYWRlci5qcyIsInNyYy9jb3JlL3JlbmRlcmVycy93ZWJnbC9zaGFkZXJzL1RleHR1cmVTaGFkZXIuanMiLCJzcmMvY29yZS9yZW5kZXJlcnMvd2ViZ2wvc2hhZGVycy9fVGV4dHVyZVNoYWRlci5qcyIsInNyYy9jb3JlL3JlbmRlcmVycy93ZWJnbC91dGlscy9PYmplY3RSZW5kZXJlci5qcyIsInNyYy9jb3JlL3JlbmRlcmVycy93ZWJnbC91dGlscy9RdWFkLmpzIiwic3JjL2NvcmUvcmVuZGVyZXJzL3dlYmdsL3V0aWxzL1JlbmRlclRhcmdldC5qcyIsInNyYy9jb3JlL3JlbmRlcmVycy93ZWJnbC91dGlscy9TdGVuY2lsTWFza1N0YWNrLmpzIiwic3JjL2NvcmUvcmVuZGVyZXJzL3dlYmdsL3V0aWxzL21hcFdlYkdMQmxlbmRNb2Rlc1RvUGl4aS5qcyIsInNyYy9jb3JlL3JlbmRlcmVycy93ZWJnbC91dGlscy9tYXBXZWJHTERyYXdNb2Rlc1RvUGl4aS5qcyIsInNyYy9jb3JlL3Nwcml0ZXMvU3ByaXRlLmpzIiwic3JjL2NvcmUvc3ByaXRlcy93ZWJnbC9TcHJpdGVSZW5kZXJlci5qcyIsInNyYy9jb3JlL3Nwcml0ZXMvd2ViZ2wvZ2VuZXJhdGVNdWx0aVRleHR1cmVTaGFkZXIuanMiLCJzcmMvY29yZS90ZXh0L1RleHQuanMiLCJzcmMvY29yZS90ZXh0dXJlcy9CYXNlVGV4dHVyZS5qcyIsInNyYy9jb3JlL3RleHR1cmVzL1JlbmRlclRleHR1cmUuanMiLCJzcmMvY29yZS90ZXh0dXJlcy9UZXh0dXJlLmpzIiwic3JjL2NvcmUvdGV4dHVyZXMvVGV4dHVyZVV2cy5qcyIsInNyYy9jb3JlL3RleHR1cmVzL1ZpZGVvQmFzZVRleHR1cmUuanMiLCJzcmMvY29yZS90aWNrZXIvVGlja2VyLmpzIiwic3JjL2NvcmUvdGlja2VyL2luZGV4LmpzIiwic3JjL2NvcmUvdXRpbHMvY3JlYXRlSW5kaWNlc0ZvclF1YWRzLmpzIiwic3JjL2NvcmUvdXRpbHMvaW5kZXguanMiLCJzcmMvY29yZS91dGlscy9wbHVnaW5UYXJnZXQuanMiLCJzcmMvZGVwcmVjYXRpb24uanMiLCJzcmMvZXh0cmFzL0JpdG1hcFRleHQuanMiLCJzcmMvZXh0cmFzL01vdmllQ2xpcC5qcyIsInNyYy9leHRyYXMvVGlsaW5nU3ByaXRlLmpzIiwic3JjL2V4dHJhcy9jYWNoZUFzQml0bWFwLmpzIiwic3JjL2V4dHJhcy9nZXRDaGlsZEJ5TmFtZS5qcyIsInNyYy9leHRyYXMvZ2V0R2xvYmFsUG9zaXRpb24uanMiLCJzcmMvZXh0cmFzL2luZGV4LmpzIiwic3JjL2ZpbHRlcnMvYXNjaWkvQXNjaWlGaWx0ZXIuanMiLCJzcmMvZmlsdGVycy9ibG9vbS9CbG9vbUZpbHRlci5qcyIsInNyYy9maWx0ZXJzL2JsdXIvQmx1ckRpckZpbHRlci5qcyIsInNyYy9maWx0ZXJzL2JsdXIvQmx1ckZpbHRlci5qcyIsInNyYy9maWx0ZXJzL2JsdXIvQmx1clhGaWx0ZXIuanMiLCJzcmMvZmlsdGVycy9ibHVyL0JsdXJZRmlsdGVyLmpzIiwic3JjL2ZpbHRlcnMvYmx1ci9TbWFydEJsdXJGaWx0ZXIuanMiLCJzcmMvZmlsdGVycy9jb2xvci9Db2xvck1hdHJpeEZpbHRlci5qcyIsInNyYy9maWx0ZXJzL2NvbG9yL0NvbG9yU3RlcEZpbHRlci5qcyIsInNyYy9maWx0ZXJzL2NvbnZvbHV0aW9uL0NvbnZvbHV0aW9uRmlsdGVyLmpzIiwic3JjL2ZpbHRlcnMvY3Jvc3NoYXRjaC9Dcm9zc0hhdGNoRmlsdGVyLmpzIiwic3JjL2ZpbHRlcnMvZGlzcGxhY2VtZW50L0Rpc3BsYWNlbWVudEZpbHRlci5qcyIsInNyYy9maWx0ZXJzL2RvdC9Eb3RTY3JlZW5GaWx0ZXIuanMiLCJzcmMvZmlsdGVycy9kcm9wc2hhZG93L0JsdXJZVGludEZpbHRlci5qcyIsInNyYy9maWx0ZXJzL2Ryb3BzaGFkb3cvRHJvcFNoYWRvd0ZpbHRlci5qcyIsInNyYy9maWx0ZXJzL2dyYXkvR3JheUZpbHRlci5qcyIsInNyYy9maWx0ZXJzL2luZGV4LmpzIiwic3JjL2ZpbHRlcnMvaW52ZXJ0L0ludmVydEZpbHRlci5qcyIsInNyYy9maWx0ZXJzL25vaXNlL05vaXNlRmlsdGVyLmpzIiwic3JjL2ZpbHRlcnMvcGl4ZWxhdGUvUGl4ZWxhdGVGaWx0ZXIuanMiLCJzcmMvZmlsdGVycy9yZ2IvUkdCU3BsaXRGaWx0ZXIuanMiLCJzcmMvZmlsdGVycy9zZXBpYS9TZXBpYUZpbHRlci5qcyIsInNyYy9maWx0ZXJzL3Nob2Nrd2F2ZS9TaG9ja3dhdmVGaWx0ZXIuanMiLCJzcmMvZmlsdGVycy90aWx0c2hpZnQvVGlsdFNoaWZ0QXhpc0ZpbHRlci5qcyIsInNyYy9maWx0ZXJzL3RpbHRzaGlmdC9UaWx0U2hpZnRGaWx0ZXIuanMiLCJzcmMvZmlsdGVycy90aWx0c2hpZnQvVGlsdFNoaWZ0WEZpbHRlci5qcyIsInNyYy9maWx0ZXJzL3RpbHRzaGlmdC9UaWx0U2hpZnRZRmlsdGVyLmpzIiwic3JjL2ZpbHRlcnMvdHdpc3QvVHdpc3RGaWx0ZXIuanMiLCJzcmMvc3JjL2luZGV4LmpzIiwic3JjL2ludGVyYWN0aW9uL0ludGVyYWN0aW9uRGF0YS5qcyIsInNyYy9pbnRlcmFjdGlvbi9JbnRlcmFjdGlvbk1hbmFnZXIuanMiLCJzcmMvaW50ZXJhY3Rpb24vaW5kZXguanMiLCJzcmMvaW50ZXJhY3Rpb24vaW50ZXJhY3RpdmVUYXJnZXQuanMiLCJzcmMvbG9hZGVycy9iaXRtYXBGb250UGFyc2VyLmpzIiwic3JjL2xvYWRlcnMvaW5kZXguanMiLCJzcmMvbG9hZGVycy9sb2FkZXIuanMiLCJzcmMvbG9hZGVycy9zcHJpdGVzaGVldFBhcnNlci5qcyIsInNyYy9sb2FkZXJzL3RleHR1cmVQYXJzZXIuanMiLCJzcmMvbWVzaC9NZXNoLmpzIiwic3JjL21lc2gvUGxhbmUuanMiLCJzcmMvbWVzaC9Sb3BlLmpzIiwic3JjL21lc2gvaW5kZXguanMiLCJzcmMvbWVzaC93ZWJnbC9NZXNoUmVuZGVyZXIuanMiLCJzcmMvbWVzaC93ZWJnbC9NZXNoU2hhZGVyLmpzIiwic3JjL3BvbHlmaWxsL01hdGguc2lnbi5qcyIsInNyYy9wb2x5ZmlsbC9PYmplY3QuYXNzaWduLmpzIiwic3JjL3BvbHlmaWxsL2luZGV4LmpzIiwic3JjL3BvbHlmaWxsL3JlcXVlc3RBbmltYXRpb25GcmFtZS5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQ0FBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDMUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN4Q0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN2TUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2pIQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM5QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdERBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3pEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDMUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbENBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM3QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3RJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDaENBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQzlDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7QUM1dUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7OztBQ2hPQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUMzRkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7O0FDcmhCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNwRkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNyRkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNKQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbnNCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0a0JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdFFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUN2Q0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7OztBQ25tQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDeGNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNoeUJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDaEVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ1pBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNwQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMxREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ25aQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDN05BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3JvQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdm1CQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0b0NBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDM0ZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzlUQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDcEhBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNsREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNyRkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDckVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMxTkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM3REE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDckVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzlIQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM3RkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdGJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNwRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3BCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdEZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzdGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDckdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM1RkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDMUZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM3VEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzFOQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMxZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM1RUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuUUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzFRQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbEdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDaFdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzVEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzFQQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMxSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzNZQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDOUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNyREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQy9GQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMxQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbGNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNqSEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDeEtBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM3V0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdkNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzVEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzdEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzlnQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM3R0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMvRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3hEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN6SkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNqU0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMvQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ25DQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3RCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDem1CQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdldBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDN0RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDM21CQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuYkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDN2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDeGFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDL0VBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDM09BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNqV0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdERBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDL0JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuUkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3BFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzdWQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbFlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzlUQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNsY0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDOVFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNUJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNUJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbkJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdkRBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ25HQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzVHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzNGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNwRkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM1QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdGhCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDL0NBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN6RkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDeEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbEZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdEVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN6RkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQy9MQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDL0NBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDckNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2hEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDckRBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDakRBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3BGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNoREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3RGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMzSEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3BDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNwQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUNuRkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7OztBQzVCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDL0NBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDMTJCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNmQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDL0NBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN2SEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNURBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbEZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNwQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDMWRBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNUhBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbk5BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNqQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ25PQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDM0RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDUkE7QUFDQTtBQUNBO0FBQ0E7OztBQ0hBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6ImdlbmVyYXRlZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzQ29udGVudCI6WyIoZnVuY3Rpb24gZSh0LG4scil7ZnVuY3Rpb24gcyhvLHUpe2lmKCFuW29dKXtpZighdFtvXSl7dmFyIGE9dHlwZW9mIHJlcXVpcmU9PVwiZnVuY3Rpb25cIiYmcmVxdWlyZTtpZighdSYmYSlyZXR1cm4gYShvLCEwKTtpZihpKXJldHVybiBpKG8sITApO3ZhciBmPW5ldyBFcnJvcihcIkNhbm5vdCBmaW5kIG1vZHVsZSAnXCIrbytcIidcIik7dGhyb3cgZi5jb2RlPVwiTU9EVUxFX05PVF9GT1VORFwiLGZ9dmFyIGw9bltvXT17ZXhwb3J0czp7fX07dFtvXVswXS5jYWxsKGwuZXhwb3J0cyxmdW5jdGlvbihlKXt2YXIgbj10W29dWzFdW2VdO3JldHVybiBzKG4/bjplKX0sbCxsLmV4cG9ydHMsZSx0LG4scil9cmV0dXJuIG5bb10uZXhwb3J0c312YXIgaT10eXBlb2YgcmVxdWlyZT09XCJmdW5jdGlvblwiJiZyZXF1aXJlO2Zvcih2YXIgbz0wO288ci5sZW5ndGg7bysrKXMocltvXSk7cmV0dXJuIHN9KSIsIlxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcblxuICAgIGNyZWF0ZUNvbnRleHQ6IFx0XHRcdHJlcXVpcmUoJy4vbGliL2NyZWF0ZUNvbnRleHQnKSxcbiAgICBzZXRWZXJ0ZXhBdHRyaWJBcnJheXM6IFx0cmVxdWlyZSgnLi9saWIvc2V0VmVydGV4QXR0cmliQXJyYXlzJyksXG4gICAgXG4gICAgR0xCdWZmZXI6IFx0XHRcdFx0cmVxdWlyZSgnLi9saWIvR0xCdWZmZXInKSxcbiAgICBHTEZyYW1lYnVmZmVyOiBcdFx0XHRyZXF1aXJlKCcuL2xpYi9HTEZyYW1lYnVmZmVyJyksXG4gICAgR0xTaGFkZXI6IFx0XHRcdFx0cmVxdWlyZSgnLi9saWIvR0xTaGFkZXInKSxcbiAgICBHTFRleHR1cmU6IFx0XHRcdFx0cmVxdWlyZSgnLi9saWIvR0xUZXh0dXJlJyksXG4gICAgXG4gICAgVmVydGV4QXJyYXlPYmplY3Q6IFx0XHRyZXF1aXJlKCcuL2xpYi9WZXJ0ZXhBcnJheU9iamVjdCcpXG5cbn07IiwiXG4vKipcbiAqIEhlbHBlciBjbGFzcyB0byBjcmVhdGUgYSB3ZWJHTCBidWZmZXJcbiAqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gZ2wge1dlYkdMUmVuZGVyaW5nQ29udGV4dH1cbiAqL1xuXG52YXIgRU1QVFlfQVJSQVlfQlVGRkVSID0gbmV3IEFycmF5QnVmZmVyKDApO1xuXG52YXIgQnVmZmVyID0gZnVuY3Rpb24oZ2wsIHR5cGUsIGRhdGEsIGRyYXdUeXBlKVxue1xuXHR0aGlzLmdsID0gZ2w7XG5cblx0dGhpcy5idWZmZXIgPSBnbC5jcmVhdGVCdWZmZXIoKTtcblx0dGhpcy50eXBlID0gdHlwZSB8fCBnbC5BUlJBWV9CVUZGRVI7XG5cdHRoaXMuZHJhd1R5cGUgPSBkcmF3VHlwZSB8fCBnbC5TVEFUSUNfRFJBVztcblx0dGhpcy5kYXRhID0gRU1QVFlfQVJSQVlfQlVGRkVSO1xuXG5cdGlmKGRhdGEpXG5cdHtcblx0XHR0aGlzLnVwbG9hZChkYXRhKTtcblx0fVxufVxuXG5CdWZmZXIucHJvdG90eXBlLnVwbG9hZCA9IGZ1bmN0aW9uKGRhdGEsIG9mZnNldCwgZG9udEJpbmQpXG57XG5cdC8vIHRvZG8gLSBuZWVkZWQ/XG5cdC8vaWYoIWRvbnRCaW5kKVxuXHR0aGlzLmJpbmQoKTtcblxuXHR2YXIgZ2wgPSB0aGlzLmdsO1xuXHRcblx0ZGF0YSA9IGRhdGEgfHwgdGhpcy5kYXRhO1xuXHRvZmZzZXQgPSBvZmZzZXQgfHwgMDtcblxuXHRpZih0aGlzLmRhdGEuYnl0ZUxlbmd0aCA+PSBkYXRhLmJ5dGVMZW5ndGgpXG5cdHtcdFxuXHRcdGdsLmJ1ZmZlclN1YkRhdGEodGhpcy50eXBlLCBvZmZzZXQsIGRhdGEpO1xuXHR9XG5cdGVsc2Vcblx0e1xuXHRcdGdsLmJ1ZmZlckRhdGEodGhpcy50eXBlLCBkYXRhLCB0aGlzLmRyYXdUeXBlKTtcblx0fVxuXG5cdHRoaXMuZGF0YSA9IGRhdGE7XG59XG5cbkJ1ZmZlci5wcm90b3R5cGUuYmluZCA9IGZ1bmN0aW9uKClcbntcblx0dmFyIGdsID0gdGhpcy5nbDtcblx0Z2wuYmluZEJ1ZmZlcih0aGlzLnR5cGUsIHRoaXMuYnVmZmVyKTtcbn1cblxuQnVmZmVyLmNyZWF0ZVZlcnRleEJ1ZmZlciA9IGZ1bmN0aW9uKGdsLCBkYXRhLCBkcmF3VHlwZSlcbntcblx0cmV0dXJuIG5ldyBCdWZmZXIoZ2wsIGdsLkFSUkFZX0JVRkZFUiwgZGF0YSwgZHJhd1R5cGUpO1xufVxuXG5CdWZmZXIuY3JlYXRlSW5kZXhCdWZmZXIgPSBmdW5jdGlvbihnbCwgZGF0YSwgZHJhd1R5cGUpXG57XG5cdHJldHVybiBuZXcgQnVmZmVyKGdsLCBnbC5FTEVNRU5UX0FSUkFZX0JVRkZFUiwgZGF0YSwgZHJhd1R5cGUpO1xufVxuXG5CdWZmZXIuY3JlYXRlID0gZnVuY3Rpb24oZ2wsIHR5cGUsIGRhdGEsIGRyYXdUeXBlKVxue1xuXHRyZXR1cm4gbmV3IEJ1ZmZlcihnbCwgdHlwZSwgZHJhd1R5cGUpO1xufVxuXG4vL1RPRE8gRGVzdHJveS4uXG5cbm1vZHVsZS5leHBvcnRzID0gQnVmZmVyO1xuXG4iLCJcbnZhciBUZXh0dXJlID0gcmVxdWlyZSgnLi9HTFRleHR1cmUnKTtcblxuLyoqXG4gKiBIZWxwZXIgY2xhc3MgdG8gY3JlYXRlIGEgd2ViR0wgRnJhbWVidWZmZXJcbiAqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gZ2wge1dlYkdMUmVuZGVyaW5nQ29udGV4dH1cbiAqL1xuXG52YXIgRnJhbWVidWZmZXIgPSBmdW5jdGlvbihnbCwgd2lkdGgsIGhlaWdodClcbntcblx0dGhpcy5nbCA9IGdsO1xuXG5cdHRoaXMuZnJhbWVidWZmZXIgPSBnbC5jcmVhdGVGcmFtZWJ1ZmZlcigpO1xuXHRcblx0dGhpcy5zdGVuY2lsID0gbnVsbDtcblx0dGhpcy50ZXh0dXJlID0gbnVsbDtcblxuXHR0aGlzLndpZHRoID0gd2lkdGggfHwgMTAwO1xuXHR0aGlzLmhlaWdodCA9IGhlaWdodCB8fCAxMDA7XG59XG5cbkZyYW1lYnVmZmVyLnByb3RvdHlwZS5lbmFibGVUZXh0dXJlID0gZnVuY3Rpb24odGV4dHVyZSlcbntcblx0dmFyIGdsID0gdGhpcy5nbDtcblxuXHR0aGlzLnRleHR1cmUgPSB0ZXh0dXJlIHx8IG5ldyBUZXh0dXJlKGdsKTtcblxuXHR0aGlzLnRleHR1cmUuYmluZCgpO1xuXG5cdC8vZ2wudGV4SW1hZ2UyRChnbC5URVhUVVJFXzJELCAwLCBnbC5SR0JBLCAgdGhpcy53aWR0aCwgdGhpcy5oZWlnaHQsIDAsIGdsLlJHQkEsIGdsLlVOU0lHTkVEX0JZVEUsIG51bGwpO1xuXG5cdHRoaXMuYmluZCgpO1xuXG5cdGdsLmZyYW1lYnVmZmVyVGV4dHVyZTJEKGdsLkZSQU1FQlVGRkVSLCBnbC5DT0xPUl9BVFRBQ0hNRU5UMCwgZ2wuVEVYVFVSRV8yRCwgdGhpcy50ZXh0dXJlLnRleHR1cmUsIDApO1xufVxuXG5GcmFtZWJ1ZmZlci5wcm90b3R5cGUuZW5hYmxlU3RlbmNpbCA9IGZ1bmN0aW9uKClcbntcblx0aWYodGhpcy5zdGVuY2lsKXJldHVybjtcblxuXHR2YXIgZ2wgPSB0aGlzLmdsO1xuXG5cdHRoaXMuc3RlbmNpbCA9IGdsLmNyZWF0ZVJlbmRlcmJ1ZmZlcigpO1xuICAgIFxuICAgIGdsLmJpbmRSZW5kZXJidWZmZXIoZ2wuUkVOREVSQlVGRkVSLCB0aGlzLnN0ZW5jaWwpO1xuICAgIFxuICAgIC8vIFRPRE8uLiB0aGlzIGlzIGRlcHRoIEFORCBzdGVuY2lsP1xuICAgIGdsLmZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyKGdsLkZSQU1FQlVGRkVSLCBnbC5ERVBUSF9TVEVOQ0lMX0FUVEFDSE1FTlQsIGdsLlJFTkRFUkJVRkZFUiwgdGhpcy5zdGVuY2lsKTtcbiAgICBnbC5yZW5kZXJidWZmZXJTdG9yYWdlKGdsLlJFTkRFUkJVRkZFUiwgZ2wuREVQVEhfU1RFTkNJTCwgIHRoaXMud2lkdGggICwgdGhpcy5oZWlnaHQgKTtcbn1cblxuRnJhbWVidWZmZXIucHJvdG90eXBlLmNsZWFyID0gZnVuY3Rpb24oIHIsIGcsIGIsIGEgKVxue1xuXHR0aGlzLmJpbmQoKTtcblxuXHR2YXIgZ2wgPSB0aGlzLmdsO1xuICAgIFxuICAgIGdsLmNsZWFyQ29sb3IociwgZywgYiwgYSk7XG4gICAgZ2wuY2xlYXIoZ2wuQ09MT1JfQlVGRkVSX0JJVCk7XG59XG5cbkZyYW1lYnVmZmVyLnByb3RvdHlwZS5iaW5kID0gZnVuY3Rpb24oKVxue1xuXHR2YXIgZ2wgPSB0aGlzLmdsO1xuXHRnbC5iaW5kRnJhbWVidWZmZXIoZ2wuRlJBTUVCVUZGRVIsIHRoaXMuZnJhbWVidWZmZXIgKTtcdFxufVxuXG5GcmFtZWJ1ZmZlci5wcm90b3R5cGUudW5iaW5kID0gZnVuY3Rpb24oKVxue1xuXHRnbC5iaW5kRnJhbWVidWZmZXIoZ2wuRlJBTUVCVUZGRVIsIG51bGwgKTtcdFxufVxuXG5GcmFtZWJ1ZmZlci5wcm90b3R5cGUucmVzaXplID0gZnVuY3Rpb24od2lkdGgsIGhlaWdodClcbntcblx0dmFyIGdsID0gdGhpcy5nbDtcblxuXHR0aGlzLndpZHRoID0gd2lkdGg7XG5cdHRoaXMuaGVpZ2h0ID0gaGVpZ2h0O1xuXG5cdGlmICggdGhpcy50ZXh0dXJlIClcbiAgICB7XG4gICAgXHR0aGlzLnRleHR1cmUudXBsb2FkRGF0YShudWxsLCB3aWR0aCwgaGVpZ2h0KTtcblx0fVxuXG5cdGlmICggdGhpcy5zdGVuY2lsIClcbiAgICB7XG4gICAgICAgIC8vIHVwZGF0ZSB0aGUgc3RlbmNpbCBidWZmZXIgd2lkdGggYW5kIGhlaWdodFxuICAgICAgICBnbC5iaW5kUmVuZGVyYnVmZmVyKGdsLlJFTkRFUkJVRkZFUiwgdGhpcy5zdGVuY2lsKTtcbiAgICAgICAgZ2wucmVuZGVyYnVmZmVyU3RvcmFnZShnbC5SRU5ERVJCVUZGRVIsIGdsLkRFUFRIX1NURU5DSUwsIHdpZHRoLCBoZWlnaHQpO1xuICAgIH1cbn1cblxuRnJhbWVidWZmZXIucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbigpXG57XG5cdHZhciBnbCA9IHRoaXMuZ2w7XG5cdC8vVE9ET1xuXHRnbC5kZWxldGVGcmFtZWJ1ZmZlcih0aGlzLmZyYW1lYnVmZmVyKTtcbn1cblxuRnJhbWVidWZmZXIuY3JlYXRlUkdCQSA9IGZ1bmN0aW9uKGdsLCB3aWR0aCwgaGVpZ2h0LCBkYXRhKVxue1xuXHR2YXIgdGV4dHVyZSA9IFRleHR1cmUuZnJvbURhdGEoZ2wsIG51bGwsIHdpZHRoLCBoZWlnaHQpO1xuXHR0ZXh0dXJlLmVuYWJsZU5lYXJlc3RTY2FsaW5nKCk7XG4gICAgdGV4dHVyZS5lbmFibGVXcmFwQ2xhbXAoKTtcblxuICAgIC8vbm93IGNyZWF0ZSB0aGUgZnJhbWVidWZmZXIgb2JqZWN0IGFuZCBhdHRhY2ggdGhlIHRleHR1cmUgdG8gaXQuXG4gICAgdmFyIGZibyA9IG5ldyBGcmFtZWJ1ZmZlcihnbCwgd2lkdGgsIGhlaWdodCk7XG4gICAgZmJvLmVuYWJsZVRleHR1cmUodGV4dHVyZSk7XG5cbiAgICByZXR1cm4gZmJvO1xufVxuXG5GcmFtZWJ1ZmZlci5jcmVhdGVGbG9hdDMyID0gZnVuY3Rpb24oZ2wsIHdpZHRoLCBoZWlnaHQsIGRhdGEpXG57XG5cdC8vIGNyZWF0ZSBhIG5ldyB0ZXh0dXJlLi5cbiAgICB2YXIgdGV4dHVyZSA9IG5ldyBUZXh0dXJlLmZyb21EYXRhKGdsLCBkYXRhLCB3aWR0aCwgaGVpZ2h0KTtcbiAgICB0ZXh0dXJlLmVuYWJsZU5lYXJlc3RTY2FsaW5nKCk7XG4gICAgdGV4dHVyZS5lbmFibGVXcmFwQ2xhbXAoKTtcblxuICAgIC8vbm93IGNyZWF0ZSB0aGUgZnJhbWVidWZmZXIgb2JqZWN0IGFuZCBhdHRhY2ggdGhlIHRleHR1cmUgdG8gaXQuXG4gICAgdmFyIGZibyA9IG5ldyBGcmFtZWJ1ZmZlcihnbCwgd2lkdGgsIGhlaWdodCk7XG4gICAgZmJvLmVuYWJsZVRleHR1cmUodGV4dHVyZSlcblxuICAgIHJldHVybiBmYm87XG59XG5cbm1vZHVsZS5leHBvcnRzID0gRnJhbWVidWZmZXI7XG5cbiIsIlxudmFyIGNvbXBpbGVQcm9ncmFtID0gcmVxdWlyZSgnLi9zaGFkZXIvY29tcGlsZVByb2dyYW0nKSxcblx0ZXh0cmFjdEF0dHJpYnV0ZXMgPSByZXF1aXJlKCcuL3NoYWRlci9leHRyYWN0QXR0cmlidXRlcycpLFxuXHRleHRyYWN0VW5pZm9ybXMgPSByZXF1aXJlKCcuL3NoYWRlci9leHRyYWN0VW5pZm9ybXMnKSxcblx0Z2VuZXJhdGVVbmlmb3JtQWNjZXNzT2JqZWN0ID0gcmVxdWlyZSgnLi9zaGFkZXIvZ2VuZXJhdGVVbmlmb3JtQWNjZXNzT2JqZWN0Jyk7XG5cbi8qKlxuICogSGVscGVyIGNsYXNzIHRvIGNyZWF0ZSBhIHdlYkdMIFNoYWRlclxuICpcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqIEBwYXJhbSBnbCB7V2ViR0xSZW5kZXJpbmdDb250ZXh0fVxuICovXG52YXIgU2hhZGVyID0gZnVuY3Rpb24oZ2wsIHZlcnRleFNyYywgZnJhZ21lbnRTcmMpXG57XG5cdHRoaXMuZ2wgPSBnbDtcblxuXHQvLyBGaXJzdCBjb21waWxlIHRoZSBwcm9ncmFtLi5cblx0dGhpcy5wcm9ncmFtID0gY29tcGlsZVByb2dyYW0oZ2wsIHZlcnRleFNyYywgZnJhZ21lbnRTcmMpO1xuXG5cdC8vIG5leHQgZXh0cmFjdCB0aGUgYXR0cmlidXRlc1xuXHR0aGlzLmF0dHJpYnV0ZXMgPSBleHRyYWN0QXR0cmlidXRlcyhnbCwgdGhpcy5wcm9ncmFtKTsgXG5cbiAgICB2YXIgdW5pZm9ybURhdGEgPSBleHRyYWN0VW5pZm9ybXMoZ2wsIHRoaXMucHJvZ3JhbSk7XG5cbiAgICB0aGlzLnVuaWZvcm1zID0gZ2VuZXJhdGVVbmlmb3JtQWNjZXNzT2JqZWN0KCBnbCwgdW5pZm9ybURhdGEgKTtcbn1cblxuU2hhZGVyLnByb3RvdHlwZS5iaW5kID0gZnVuY3Rpb24oKVxue1xuXHR0aGlzLmdsLnVzZVByb2dyYW0odGhpcy5wcm9ncmFtKTtcbn1cblxuU2hhZGVyLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24oKVxue1xuXHR2YXIgZ2wgPSB0aGlzLmdsO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IFNoYWRlcjtcblxuIiwiXG4vKipcbiAqIEhlbHBlciBjbGFzcyB0byBjcmVhdGUgYSB3ZWJHTCBUZXh0dXJlXG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIGdsIHtXZWJHTFJlbmRlcmluZ0NvbnRleHR9IGEgV2ViR0wgY29udGV4dFxuICogQHBhcmFtIHdpZHRoIHtudW1iZXJ9IHRoZSB3aWR0aCBvZiB0aGUgdGV4dHVyZSBcbiAqIEBwYXJhbSBoZWlnaHQge251bWJlcn0gdGhlIGhlaWdodCBvZiB0aGUgdGV4dHVyZSBcbiAqIEBwYXJhbSBmb3JtYXQge251bWJlcn0gdGhlIHBpeGVsIGZvcm1hdCBvZiB0aGUgdGV4dHVyZS4gZGVmYXVsdHMgdG8gZ2wuUkdCQVxuICogQHBhcmFtIHR5cGUge251bWJlcn0gdGhlIGdsIHR5cGUgb2YgdGhlIHRleHR1cmUuIGRlZmF1bHRzIHRvIGdsLlVOU0lHTkVEX0JZVEVcbiAqL1xudmFyIFRleHR1cmUgPSBmdW5jdGlvbihnbCwgd2lkdGgsIGhlaWdodCwgZm9ybWF0LCB0eXBlKVxue1xuXHR0aGlzLmdsID0gZ2w7XG5cblx0dGhpcy50ZXh0dXJlID0gZ2wuY3JlYXRlVGV4dHVyZSgpO1xuXG5cdC8vIHNvbWUgc2V0dGluZ3MuLlxuXHR0aGlzLm1pcG1hcCA9IGZhbHNlO1xuXG5cdHRoaXMucHJlbXVsdGlwbHlBbHBoYSA9IGZhbHNlO1xuXG5cdHRoaXMud2lkdGggPSB3aWR0aCB8fCAwO1xuXHR0aGlzLmhlaWdodCA9IGhlaWdodCB8fCAwO1xuXG5cdHRoaXMuZm9ybWF0ID0gZm9ybWF0IHx8IGdsLlJHQkE7XG5cdHRoaXMudHlwZSA9IHR5cGUgfHwgZ2wuVU5TSUdORURfQllURTtcblxuXG59XG5cbi8qKlxuICogQHBhcmFtIHtQSVhJLmdsQ29yZS5UZXh0dXJlfSBbdmFybmFtZV0gW2Rlc2NyaXB0aW9uXVxuICovXG5UZXh0dXJlLnByb3RvdHlwZS51cGxvYWQgPSBmdW5jdGlvbihzb3VyY2UpXG57XG5cdHRoaXMuYmluZCgpO1xuXG5cdHZhciBnbCA9IHRoaXMuZ2w7XG5cblx0dGhpcy53aWR0aCA9IHNvdXJjZS53aWR0aDtcblx0dGhpcy5oZWlnaHQgPSBzb3VyY2UuaGVpZ2h0O1xuXG5cdGdsLnBpeGVsU3RvcmVpKGdsLlVOUEFDS19QUkVNVUxUSVBMWV9BTFBIQV9XRUJHTCwgdGhpcy5wcmVtdWx0aXBseUFscGhhKTtcbiAgICBnbC50ZXhJbWFnZTJEKGdsLlRFWFRVUkVfMkQsIDAsIHRoaXMuZm9ybWF0LCB0aGlzLmZvcm1hdCwgdGhpcy50eXBlLCBzb3VyY2UpO1xufVxuXG52YXIgRkxPQVRJTkdfUE9JTlRfQVZBSUxBQkxFID0gZmFsc2U7XG5cblRleHR1cmUucHJvdG90eXBlLnVwbG9hZERhdGEgPSBmdW5jdGlvbihkYXRhLCB3aWR0aCwgaGVpZ2h0KVxue1xuXHR0aGlzLmJpbmQoKTtcblx0XG5cdHRoaXMud2lkdGggPSB3aWR0aCB8fCB0aGlzLndpZHRoO1xuXHR0aGlzLmhlaWdodCA9IGhlaWdodCB8fCB0aGlzLmhlaWdodDtcblxuXHRpZihkYXRhIGluc3RhbmNlb2YgRmxvYXQzMkFycmF5KVxuXHR7XG5cdFx0aWYoIUZMT0FUSU5HX1BPSU5UX0FWQUlMQUJMRSlcblx0XHR7XG5cdFx0XHR2YXIgZXh0ID0gZ2wuZ2V0RXh0ZW5zaW9uKFwiT0VTX3RleHR1cmVfZmxvYXRcIik7XG5cdFx0XHRcblx0XHRcdGlmKGV4dClcblx0XHRcdHtcblx0XHRcdFx0RkxPQVRJTkdfUE9JTlRfQVZBSUxBQkxFID0gdHJ1ZTtcblx0XHRcdH1cblx0XHRcdGVsc2Vcblx0XHRcdHtcblx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKCdmbG9hdGluZyBwb2ludCB0ZXh0dXJlcyBub3QgYXZhaWxhYmxlJyk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0dGhpcy50eXBlID0gZ2wuRkxPQVQ7XG5cdH1cblx0ZWxzZVxuXHR7XG5cdFx0Ly8gVE9ETyBzdXBwb3J0IGZvciBvdGhlciB0eXBlc1xuXHRcdHRoaXMudHlwZSA9IGdsLlVOU0lHTkVEX0JZVEU7XG5cdH1cblxuXHQvLyB3aGF0IHR5cGUgb2YgZGF0YT9cblx0Z2wucGl4ZWxTdG9yZWkoZ2wuVU5QQUNLX1BSRU1VTFRJUExZX0FMUEhBX1dFQkdMLCB0aGlzLnByZW11bHRpcGx5QWxwaGEpO1xuXHRnbC50ZXhJbWFnZTJEKGdsLlRFWFRVUkVfMkQsIDAsIHRoaXMuZm9ybWF0LCAgdGhpcy53aWR0aCwgdGhpcy5oZWlnaHQsIDAsIHRoaXMuZm9ybWF0LCB0aGlzLnR5cGUsIGRhdGEgfHwgbnVsbCk7XG5cbn1cblxuVGV4dHVyZS5wcm90b3R5cGUuYmluZCA9IGZ1bmN0aW9uKGxvY2F0aW9uKVxue1xuXHR2YXIgZ2wgPSB0aGlzLmdsO1xuXG5cdGlmKGxvY2F0aW9uICE9PSB1bmRlZmluZWQpXG5cdHtcblx0XHRnbC5hY3RpdmVUZXh0dXJlKGdsLlRFWFRVUkUwICsgbG9jYXRpb24pO1xuXHR9XG5cblx0Z2wuYmluZFRleHR1cmUoZ2wuVEVYVFVSRV8yRCwgdGhpcy50ZXh0dXJlKTtcbn1cblxuVGV4dHVyZS5wcm90b3R5cGUudW5iaW5kID0gZnVuY3Rpb24oKVxue1xuXHR2YXIgZ2wgPSB0aGlzLmdsO1xuXHRnbC5iaW5kVGV4dHVyZShnbC5URVhUVVJFXzJELCBudWxsKTtcbn1cblxuVGV4dHVyZS5wcm90b3R5cGUubWluRmlsdGVyID0gZnVuY3Rpb24oIGxpbmVhciApXG57XG5cdHZhciBnbCA9IHRoaXMuZ2w7XG5cblx0dGhpcy5iaW5kKCk7XG5cblx0aWYodGhpcy5taXBtYXApXG5cdHtcblx0XHRnbC50ZXhQYXJhbWV0ZXJpKGdsLlRFWFRVUkVfMkQsIGdsLlRFWFRVUkVfTUlOX0ZJTFRFUiwgbGluZWFyID8gZ2wuTElORUFSX01JUE1BUF9MSU5FQVIgOiBnbC5ORUFSRVNUX01JUE1BUF9ORUFSRVNUKTtcblx0fVxuXHRlbHNlXG5cdHtcblx0XHRnbC50ZXhQYXJhbWV0ZXJpKGdsLlRFWFRVUkVfMkQsIGdsLlRFWFRVUkVfTUlOX0ZJTFRFUiwgbGluZWFyID8gZ2wuTElORUFSIDogZ2wuTkVBUkVTVCk7XG5cdH1cdFxufVxuXG5UZXh0dXJlLnByb3RvdHlwZS5tYWdGaWx0ZXIgPSBmdW5jdGlvbiggbGluZWFyIClcbntcblx0dmFyIGdsID0gdGhpcy5nbDtcblxuXHR0aGlzLmJpbmQoKTtcblxuXHRnbC50ZXhQYXJhbWV0ZXJpKGdsLlRFWFRVUkVfMkQsIGdsLlRFWFRVUkVfTUFHX0ZJTFRFUiwgbGluZWFyID8gZ2wuTElORUFSIDogZ2wuTkVBUkVTVCk7XG59XG5cblRleHR1cmUucHJvdG90eXBlLmVuYWJsZU1pcG1hcCA9IGZ1bmN0aW9uKClcbntcblx0dGhpcy5iaW5kKCk7XG5cblx0dGhpcy5taXBtYXAgPSB0cnVlO1xuXHRnbC5nZW5lcmF0ZU1pcG1hcChnbC5URVhUVVJFXzJEKTtcbn1cblxuVGV4dHVyZS5wcm90b3R5cGUuZW5hYmxlTGluZWFyU2NhbGluZyA9IGZ1bmN0aW9uKClcbntcblx0dGhpcy5taW5GaWx0ZXIodHJ1ZSk7XG5cdHRoaXMubWFnRmlsdGVyKHRydWUpO1xufVxuXG5UZXh0dXJlLnByb3RvdHlwZS5lbmFibGVOZWFyZXN0U2NhbGluZyA9IGZ1bmN0aW9uKClcbntcblx0dGhpcy5taW5GaWx0ZXIoZmFsc2UpO1xuXHR0aGlzLm1hZ0ZpbHRlcihmYWxzZSk7XG59XG5cblRleHR1cmUucHJvdG90eXBlLmVuYWJsZVdyYXBDbGFtcCA9IGZ1bmN0aW9uKClcbntcblx0dmFyIGdsID0gdGhpcy5nbDtcblxuXHR0aGlzLmJpbmQoKTtcblxuXHRnbC50ZXhQYXJhbWV0ZXJpKGdsLlRFWFRVUkVfMkQsIGdsLlRFWFRVUkVfV1JBUF9TLCBnbC5DTEFNUF9UT19FREdFKTtcbiAgICBnbC50ZXhQYXJhbWV0ZXJpKGdsLlRFWFRVUkVfMkQsIGdsLlRFWFRVUkVfV1JBUF9ULCBnbC5DTEFNUF9UT19FREdFKTtcbn1cblxuVGV4dHVyZS5wcm90b3R5cGUuZW5hYmxlV3JhcFJlcGVhdCA9IGZ1bmN0aW9uKClcbntcblx0dmFyIGdsID0gdGhpcy5nbDtcblxuXHR0aGlzLmJpbmQoKTtcblx0XG5cdGdsLnRleFBhcmFtZXRlcmkoZ2wuVEVYVFVSRV8yRCwgZ2wuVEVYVFVSRV9XUkFQX1MsIGdsLlJFUEVBVCk7XG4gICAgZ2wudGV4UGFyYW1ldGVyaShnbC5URVhUVVJFXzJELCBnbC5URVhUVVJFX1dSQVBfVCwgZ2wuUkVQRUFUKTtcbn1cblxuVGV4dHVyZS5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uKClcbntcblx0dmFyIGdsID0gdGhpcy5nbDtcblx0Ly9UT0RPXG5cdGdsLmRlbGV0ZVRleHR1cmUodGhpcy50ZXh0dXJlKTtcbn1cblxuLy9UZXh0dXJlLlxuVGV4dHVyZS5mcm9tU291cmNlID0gZnVuY3Rpb24oZ2wsIHNvdXJjZSwgcHJlbXVsdGlwbHlBbHBoYSlcbntcblx0dmFyIHRleHR1cmUgPSBuZXcgVGV4dHVyZShnbCk7XG5cdHRleHR1cmUucHJlbXVsdGlwbHlBbHBoYSA9IHByZW11bHRpcGx5QWxwaGEgfHwgZmFsc2U7XG5cdHRleHR1cmUudXBsb2FkKHNvdXJjZSk7XG5cblx0cmV0dXJuIHRleHR1cmU7XG59XG5cblRleHR1cmUuZnJvbURhdGEgPSBmdW5jdGlvbihnbCwgZGF0YSwgd2lkdGgsIGhlaWdodClcbntcblx0Ly9jb25zb2xlLmxvZyhkYXRhLCB3aWR0aCwgaGVpZ2h0KTtcblx0dmFyIHRleHR1cmUgPSBuZXcgVGV4dHVyZShnbCk7XG5cdHRleHR1cmUudXBsb2FkRGF0YShkYXRhLCB3aWR0aCwgaGVpZ2h0KTtcblxuXHRyZXR1cm4gdGV4dHVyZTtcbn1cblxuXG5tb2R1bGUuZXhwb3J0cyA9IFRleHR1cmU7XG5cbiIsIlxuLyoqXG4gKiBHZW5lcmljIE1hc2sgU3RhY2sgZGF0YSBzdHJ1Y3R1cmVcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqL1xuXG4vLyBzdGF0ZSBvYmplY3QvL1xuXG5cbmZ1bmN0aW9uIFZlcnRleEFycmF5T2JqZWN0KGdsKVxue1xuXHRcblx0dGhpcy5uYXRpdmVWYW9FeHRlbnNpb24gPSAoXG4gICAgICBnbC5nZXRFeHRlbnNpb24oJ09FU192ZXJ0ZXhfYXJyYXlfb2JqZWN0JykgfHxcbiAgICAgIGdsLmdldEV4dGVuc2lvbignTU9aX09FU192ZXJ0ZXhfYXJyYXlfb2JqZWN0JykgfHxcbiAgICAgIGdsLmdldEV4dGVuc2lvbignV0VCS0lUX09FU192ZXJ0ZXhfYXJyYXlfb2JqZWN0JylcbiAgICApO1xuXG4vL1x0dGhpcy5uYXRpdmVWYW9FeHRlbnNpb24gPSBudWxsO1xuXG5cdGlmKHRoaXMubmF0aXZlVmFvRXh0ZW5zaW9uKVxuXHR7XG5cdFx0dGhpcy5uYXRpdmVWYW8gPSB0aGlzLm5hdGl2ZVZhb0V4dGVuc2lvbi5jcmVhdGVWZXJ0ZXhBcnJheU9FUygpOyAgXG5cdH1cblxuXHR0aGlzLmdsID0gZ2w7XG5cblx0dGhpcy5hdHRyaWJ1dGVzID0gW107XG5cblx0dGhpcy5pbmRleEJ1ZmZlciA9IG51bGw7XG5cblx0dGhpcy5kaXJ0eSA9IGZhbHNlO1xuXG5cdFxufVxuXG5WZXJ0ZXhBcnJheU9iamVjdC5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBWZXJ0ZXhBcnJheU9iamVjdDtcbm1vZHVsZS5leHBvcnRzID0gVmVydGV4QXJyYXlPYmplY3Q7XG5cblZlcnRleEFycmF5T2JqZWN0LnByb3RvdHlwZS5iaW5kID0gZnVuY3Rpb24oKVxue1xuXHRpZih0aGlzLm5hdGl2ZVZhbylcblx0e1xuXHRcdHRoaXMubmF0aXZlVmFvRXh0ZW5zaW9uLmJpbmRWZXJ0ZXhBcnJheU9FUyh0aGlzLm5hdGl2ZVZhbyk7ICBcblxuXHRcdGlmKHRoaXMuZGlydHkpXG5cdFx0e1xuXHRcdFx0dGhpcy5kaXJ0eSA9IGZhbHNlO1xuXHRcdFx0dGhpcy5hY3RpdmF0ZSgpO1xuXHRcdH1cblx0fVxuXHRlbHNlXG5cdHtcblx0XHR0aGlzLmFjdGl2YXRlKCk7XG5cdH1cbn1cblxuVmVydGV4QXJyYXlPYmplY3QucHJvdG90eXBlLnVuYmluZCA9IGZ1bmN0aW9uKClcbntcblx0aWYodGhpcy5uYXRpdmVWYW8pXG5cdHtcblx0XHR0aGlzLm5hdGl2ZVZhb0V4dGVuc2lvbi5iaW5kVmVydGV4QXJyYXlPRVMobnVsbCk7XG5cdH1cbn1cblxuVmVydGV4QXJyYXlPYmplY3QucHJvdG90eXBlLmFjdGl2YXRlID0gZnVuY3Rpb24oKVxue1xuXHR2YXIgZ2wgPSB0aGlzLmdsO1xuXG5cdGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5hdHRyaWJ1dGVzLmxlbmd0aDsgaSsrKSBcblx0e1xuXHRcdHZhciBhdHRyaWIgPSB0aGlzLmF0dHJpYnV0ZXNbaV07XG5cdFx0YXR0cmliLmJ1ZmZlci5iaW5kKCk7XHRcblxuXHRcdGF0dHJpYi5hdHRyaWJ1dGUucG9pbnRlcihhdHRyaWIudHlwZSwgYXR0cmliLm5vcm1hbGl6ZWQsIGF0dHJpYi5zdHJpZGUsIGF0dHJpYi5zdGFydCk7IFxuXHRcdFxuXHRcdGdsLmVuYWJsZVZlcnRleEF0dHJpYkFycmF5KGF0dHJpYi5hdHRyaWJ1dGUubG9jYXRpb24pO1xuXHR9O1xuXG5cdHRoaXMuaW5kZXhCdWZmZXIuYmluZCgpO1xufVxuXG5WZXJ0ZXhBcnJheU9iamVjdC5wcm90b3R5cGUuYWRkQXR0cmlidXRlID0gZnVuY3Rpb24oYnVmZmVyLCBhdHRyaWJ1dGUsIHR5cGUsIG5vcm1hbGl6ZWQsIHN0cmlkZSwgc3RhcnQpXG57XG4gICAgdGhpcy5hdHRyaWJ1dGVzLnB1c2goe1xuICAgIFx0YnVmZmVyOiBcdGJ1ZmZlcixcbiAgICBcdGF0dHJpYnV0ZTogXHRhdHRyaWJ1dGUsXG5cbiAgICBcdGxvY2F0aW9uOiBcdGF0dHJpYnV0ZS5sb2NhdGlvbixcblx0IFx0dHlwZTogXHRcdHR5cGUgfHwgdGhpcy5nbC5GTE9BVCxcblx0IFx0bm9ybWFsaXplZDogbm9ybWFsaXplZCB8fCBmYWxzZSxcblx0IFx0c3RyaWRlOiBcdHN0cmlkZSB8fCAwLFxuXHQgXHRzdGFydDogXHRcdHN0YXJ0IHx8IDBcblx0fSlcblxuXHR0aGlzLmRpcnR5ID0gdHJ1ZTtcbn1cblxuXG5WZXJ0ZXhBcnJheU9iamVjdC5wcm90b3R5cGUuYWRkSW5kZXggPSBmdW5jdGlvbihidWZmZXIsIG9wdGlvbnMpXG57XG4gICAgdGhpcy5pbmRleEJ1ZmZlciA9IGJ1ZmZlcjtcblxuICAgIHRoaXMuZGlydHkgPSB0cnVlO1xufVxuXG5WZXJ0ZXhBcnJheU9iamVjdC5wcm90b3R5cGUuZHJhdyA9IGZ1bmN0aW9uKHR5cGUsIHNpemUsIHN0YXJ0KVxue1xuXHR2YXIgZ2wgPSB0aGlzLmdsO1xuXHRnbC5kcmF3RWxlbWVudHModHlwZSwgc2l6ZSwgZ2wuVU5TSUdORURfU0hPUlQsIHN0YXJ0KTtcbn1cblxuIiwiXG4vKipcbiAqIEhlbHBlciBjbGFzcyB0byBjcmVhdGUgYSB3ZWJHTCBDb250ZXh0XG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIGdsIHtXZWJHTFJlbmRlcmluZ0NvbnRleHR9XG4gKi9cblxudmFyIENPTlRFWFRfVUlEID0gMDtcblxudmFyIGNyZWF0ZUNvbnRleHQgPSBmdW5jdGlvbihjYW52YXMsIG9wdGlvbnMpXG57XG4gICAgZ2wgPSBjYW52YXMuZ2V0Q29udGV4dCgnd2ViZ2wnLCBvcHRpb25zKSB8fCBcbiAgICBcdCBjYW52YXMuZ2V0Q29udGV4dCgnZXhwZXJpbWVudGFsLXdlYmdsJywgb3B0aW9ucyk7XG5cbiAgICBpZiAoIWdsKVxuICAgIHtcbiAgICAgICAgLy8gZmFpbCwgbm90IGFibGUgdG8gZ2V0IGEgY29udGV4dFxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RoaXMgYnJvd3NlciBkb2VzIG5vdCBzdXBwb3J0IHdlYkdMLiBUcnkgdXNpbmcgdGhlIGNhbnZhcyByZW5kZXJlcicpO1xuICAgIH1cblxuICAgIC8vIG1pZ2h0IHdhbnQgdG8gcGhhc2UgdGhpcyBvdXQ/XG4gICAgZ2wuaWQgPSBDT05URVhUX1VJRCsrO1xuXG4gICAgcmV0dXJuIGdsO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGNyZWF0ZUNvbnRleHQ7XG5cbiIsIi8qKlxuICogR2VuZXJpYyBNYXNrIFN0YWNrIGRhdGEgc3RydWN0dXJlXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKi9cblxudmFyIEdMX01BUCA9IHt9O1xuXG5cbnZhciBzZXRWZXJ0ZXhBdHRyaWJBcnJheXMgPSBmdW5jdGlvbiAoZ2wsIGF0dHJpYnMpXG57XHRcbiAgIC8vIGNvbnNvbGUubG9nKGdsLmlkKVxuICAgIHZhciBkYXRhID0gR0xfTUFQW2dsLmlkXTtcblxuICAgIGlmKCFkYXRhKVxuICAgIHtcblx0ICAgdmFyIG1heEF0dHJpYnMgPSBnbC5nZXRQYXJhbWV0ZXIoZ2wuTUFYX1ZFUlRFWF9BVFRSSUJTKTtcblx0XHRkYXRhID0gR0xfTUFQW2dsLmlkXSA9IHt0ZW1wQXR0cmliU3RhdGU6bmV3IEFycmF5KG1heEF0dHJpYnMpXG5cdFx0XHRcdCBcdCBcdFx0ICAgLGF0dHJpYlN0YXRlOm5ldyBBcnJheShtYXhBdHRyaWJzKX07XG5cdH1cblx0XG4gICAgdmFyIGksXG4gICAgXHR0ZW1wQXR0cmliU3RhdGUgPSBkYXRhLnRlbXBBdHRyaWJTdGF0ZSxcbiAgICBcdGF0dHJpYlN0YXRlID0gZGF0YS5hdHRyaWJTdGF0ZTtcblxuICAgIGZvciAoaSA9IDA7IGkgPCB0ZW1wQXR0cmliU3RhdGUubGVuZ3RoOyBpKyspXG4gICAge1xuICAgICAgICB0ZW1wQXR0cmliU3RhdGVbaV0gPSBmYWxzZTtcbiAgICB9XG5cbiAgICAvLyBzZXQgdGhlIG5ldyBhdHRyaWJzXG4gICAgZm9yIChpIGluIGF0dHJpYnMpXG4gICAge1xuICAgICAgICB0ZW1wQXR0cmliU3RhdGVbYXR0cmlic1tpXS5sb2NhdGlvbl0gPSB0cnVlO1xuICAgIH1cblxuICAgIGZvciAoaSA9IDE7IGkgPCBhdHRyaWJTdGF0ZS5sZW5ndGg7IGkrKylcbiAgICB7XG4gICAgICAgIGlmIChhdHRyaWJTdGF0ZVtpXSAhPT0gdGVtcEF0dHJpYlN0YXRlW2ldKVxuICAgICAgICB7XG4gICAgICAgICAgICBhdHRyaWJTdGF0ZVtpXSA9IHRlbXBBdHRyaWJTdGF0ZVtpXTtcblxuICAgICAgICAgICAgaWYgKGRhdGEuYXR0cmliU3RhdGVbaV0pXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgZ2wuZW5hYmxlVmVydGV4QXR0cmliQXJyYXkoaSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgZ2wuZGlzYWJsZVZlcnRleEF0dHJpYkFycmF5KGkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxufTtcblxubW9kdWxlLmV4cG9ydHMgPSBzZXRWZXJ0ZXhBdHRyaWJBcnJheXM7IiwiXG5cblxuXG5jb21waWxlUHJvZ3JhbSA9IGZ1bmN0aW9uKGdsLCB2ZXJ0ZXhTcmMsIGZyYWdtZW50U3JjKVxue1xuICAgIHZhciBnbFZlcnRTaGFkZXIgPSBjb21waWxlU2hhZGVyKGdsLCBnbC5WRVJURVhfU0hBREVSLCB2ZXJ0ZXhTcmMpO1xuICAgIHZhciBnbEZyYWdTaGFkZXIgPSBjb21waWxlU2hhZGVyKGdsLCBnbC5GUkFHTUVOVF9TSEFERVIsIGZyYWdtZW50U3JjKTtcblxuICAgIHZhciBwcm9ncmFtID0gZ2wuY3JlYXRlUHJvZ3JhbSgpO1xuXG4gICAgZ2wuYXR0YWNoU2hhZGVyKHByb2dyYW0sIGdsVmVydFNoYWRlcik7XG4gICAgZ2wuYXR0YWNoU2hhZGVyKHByb2dyYW0sIGdsRnJhZ1NoYWRlcik7XG4gICAgZ2wubGlua1Byb2dyYW0ocHJvZ3JhbSk7XG5cbiAgICAvLyBpZiBsaW5raW5nIGZhaWxzLCB0aGVuIGxvZyBhbmQgY2xlYW51cFxuICAgIGlmICghZ2wuZ2V0UHJvZ3JhbVBhcmFtZXRlcihwcm9ncmFtLCBnbC5MSU5LX1NUQVRVUykpXG4gICAge1xuICAgICAgICBjb25zb2xlLmVycm9yKCdQaXhpLmpzIEVycm9yOiBDb3VsZCBub3QgaW5pdGlhbGl6ZSBzaGFkZXIuJyk7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ2dsLlZBTElEQVRFX1NUQVRVUycsIGdsLmdldFByb2dyYW1QYXJhbWV0ZXIocHJvZ3JhbSwgZ2wuVkFMSURBVEVfU1RBVFVTKSk7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ2dsLmdldEVycm9yKCknLCBnbC5nZXRFcnJvcigpKTtcblxuICAgICAgICAvLyBpZiB0aGVyZSBpcyBhIHByb2dyYW0gaW5mbyBsb2csIGxvZyBpdFxuICAgICAgICBpZiAoZ2wuZ2V0UHJvZ3JhbUluZm9Mb2cocHJvZ3JhbSkgIT09ICcnKVxuICAgICAgICB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ1BpeGkuanMgV2FybmluZzogZ2wuZ2V0UHJvZ3JhbUluZm9Mb2coKScsIGdsLmdldFByb2dyYW1JbmZvTG9nKHByb2dyYW0pKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGdsLmRlbGV0ZVByb2dyYW0ocHJvZ3JhbSk7XG4gICAgICAgIHByb2dyYW0gPSBudWxsO1xuICAgIH1cblxuICAgIC8vIGNsZWFuIHVwIHNvbWUgc2hhZGVyc1xuICAgIGdsLmRlbGV0ZVNoYWRlcihnbFZlcnRTaGFkZXIpO1xuICAgIGdsLmRlbGV0ZVNoYWRlcihnbEZyYWdTaGFkZXIpO1xuXG4gICAgcmV0dXJuIHByb2dyYW07XG59XG5cbnZhciBjb21waWxlU2hhZGVyID0gZnVuY3Rpb24gKGdsLCB0eXBlLCBzcmMpXG57XG4gICAgdmFyIHNoYWRlciA9IGdsLmNyZWF0ZVNoYWRlcih0eXBlKTtcblxuICAgIGdsLnNoYWRlclNvdXJjZShzaGFkZXIsIHNyYyk7XG4gICAgZ2wuY29tcGlsZVNoYWRlcihzaGFkZXIpO1xuXG4gICAgaWYgKCFnbC5nZXRTaGFkZXJQYXJhbWV0ZXIoc2hhZGVyLCBnbC5DT01QSUxFX1NUQVRVUykpXG4gICAge1xuICAgICAgICBjb25zb2xlLmxvZyhnbC5nZXRTaGFkZXJJbmZvTG9nKHNoYWRlcikpO1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICByZXR1cm4gc2hhZGVyO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBjb21waWxlUHJvZ3JhbTtcblxuIiwiXG5cbnZhciBkZWZhdWx0VmFsdWUgPSBmdW5jdGlvbih0eXBlLCBzaXplKSBcbntcbiAgICBzd2l0Y2ggKHR5cGUpXG4gICAge1xuICAgICAgICBjYXNlICdmbG9hdCc6XG4gICAgICAgICAgICByZXR1cm4gMDtcblxuICAgICAgICBjYXNlICd2ZWMyJzogXG4gICAgICAgICAgICByZXR1cm4gbmV3IEZsb2F0MzJBcnJheSgyICogc2l6ZSk7XG5cbiAgICAgICAgY2FzZSAndmVjMyc6XG4gICAgICAgICAgICByZXR1cm4gbmV3IEZsb2F0MzJBcnJheSgzICogc2l6ZSk7XG5cbiAgICAgICAgY2FzZSAndmVjNCc6ICAgICBcbiAgICAgICAgICAgIHJldHVybiBuZXcgRmxvYXQzMkFycmF5KDQgKiBzaXplKTtcbiAgICAgICAgICAgIFxuICAgICAgICBjYXNlICdpbnQnOlxuICAgICAgICBjYXNlICdzYW1wbGVyMkQnOlxuICAgICAgICAgICAgcmV0dXJuIDA7XG5cbiAgICAgICAgY2FzZSAnaXZlYzInOiAgIFxuICAgICAgICAgICAgcmV0dXJuIG5ldyBJbnQzMkFycmF5KDIgKiBzaXplKTtcblxuICAgICAgICBjYXNlICdpdmVjMyc6XG4gICAgICAgICAgICByZXR1cm4gbmV3IEludDMyQXJyYXkoMyAqIHNpemUpO1xuXG4gICAgICAgIGNhc2UgJ2l2ZWM0JzogXG4gICAgICAgICAgICByZXR1cm4gbmV3IEludDMyQXJyYXkoNCAqIHNpemUpO1xuXG4gICAgICAgIGNhc2UgJ2Jvb2wnOiAgICAgXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG5cbiAgICAgICAgY2FzZSAnYnZlYzInOlxuXG4gICAgICAgICAgICByZXR1cm4gYm9vbGVhbkFycmF5KCAyICogc2l6ZSk7XG5cbiAgICAgICAgY2FzZSAnYnZlYzMnOlxuICAgICAgICAgICAgcmV0dXJuIGJvb2xlYW5BcnJheSgzICogc2l6ZSk7XG5cbiAgICAgICAgY2FzZSAnYnZlYzQnOlxuICAgICAgICAgICAgcmV0dXJuIGJvb2xlYW5BcnJheSg0ICogc2l6ZSk7XG5cbiAgICAgICAgY2FzZSAnbWF0Mic6XG4gICAgICAgICAgICByZXR1cm4gbmV3IEZsb2F0MzJBcnJheShbMSwgMFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLDAsIDFdKTtcblxuICAgICAgICBjYXNlICdtYXQzJzogXG4gICAgICAgICAgICByZXR1cm4gbmV3IEZsb2F0MzJBcnJheShbMSwgMCwgMFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLDAsIDEsIDBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwwLCAwLCAxXSk7XG5cbiAgICAgICAgY2FzZSAnbWF0NCc6XG4gICAgICAgICAgICByZXR1cm4gbmV3IEZsb2F0MzJBcnJheShbMSwgMCwgMCwgMFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLDAsIDEsIDAsIDBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwwLCAwLCAxLCAwXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsMCwgMCwgMCwgMV0pO1xuICAgIH1cbn1cblxudmFyIGJvb2xlYW5BcnJheSA9IGZ1bmN0aW9uKHNpemUpXG57XG4gICAgdmFyIGFycmF5ID0gbmV3IEFycmF5KHNpemUpO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcnJheS5sZW5ndGg7IGkrKykgXG4gICAge1xuICAgICAgICBhcnJheVtpXSA9IGZhbHNlO1xuICAgIH07XG5cbiAgICByZXR1cm4gYXJyYXk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZGVmYXVsdFZhbHVlO1xuIiwiXG52YXIgbWFwVHlwZSA9IHJlcXVpcmUoJy4vbWFwVHlwZScpO1xudmFyIG1hcFNpemUgPSByZXF1aXJlKCcuL21hcFNpemUnKTtcblxudmFyIGV4dHJhY3RBdHRyaWJ1dGVzID0gZnVuY3Rpb24oZ2wsIHByb2dyYW0pXG57XG4gICAgdmFyIGF0dHJpYnV0ZXMgPSB7fTtcblxuICAgIHZhciB0b3RhbEF0dHJpYnV0ZXMgPSBnbC5nZXRQcm9ncmFtUGFyYW1ldGVyKHByb2dyYW0sIGdsLkFDVElWRV9BVFRSSUJVVEVTKVxuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0b3RhbEF0dHJpYnV0ZXM7IGkrKykgXG4gICAge1xuICAgICAgICB2YXIgYXR0cmliRGF0YSA9IGdsLmdldEFjdGl2ZUF0dHJpYihwcm9ncmFtLCBpKTtcbiAgICAgICAgdmFyIHR5cGUgPSBtYXBUeXBlKGdsLCBhdHRyaWJEYXRhLnR5cGUpO1xuXG4gICAgICAgIGF0dHJpYnV0ZXNbYXR0cmliRGF0YS5uYW1lXSA9IHtcbiAgICAgICAgICAgIHR5cGU6dHlwZSxcbiAgICAgICAgICAgIHNpemU6bWFwU2l6ZSh0eXBlKSxcbiAgICAgICAgICAgIGxvY2F0aW9uOmdsLmdldEF0dHJpYkxvY2F0aW9uKHByb2dyYW0sIGF0dHJpYkRhdGEubmFtZSksXG4gICAgICAgICAgICAvL1RPRE8gLSBtYWtlIGFuIGF0dHJpYnV0ZSBvYmplY3RcbiAgICAgICAgICAgIHBvaW50ZXI6ZnVuY3Rpb24odHlwZSwgbm9ybWFsaXplZCwgc3RyaWRlLCBzdGFydCl7XG5cbiAgICAgICAgICAgICAvLyAgIGNvbnNvbGUubG9nKHRoaXMubG9jYXRpb24pXG4gICAgICAgICAgICAgICAgZ2wudmVydGV4QXR0cmliUG9pbnRlcih0aGlzLmxvY2F0aW9uLHRoaXMuc2l6ZSwgdHlwZSB8fCBnbC5GTE9BVCwgbm9ybWFsaXplZCB8fCBmYWxzZSwgc3RyaWRlIHx8IDAsIHN0YXJ0IHx8IDApOyBcblxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfTtcblxuICAgIHJldHVybiBhdHRyaWJ1dGVzOyAgXG59XG5cbm1vZHVsZS5leHBvcnRzID0gZXh0cmFjdEF0dHJpYnV0ZXM7XG5cbiIsInZhciBtYXBUeXBlID0gcmVxdWlyZSgnLi9tYXBUeXBlJyk7XG52YXIgZGVmYXVsdFZhbHVlID0gcmVxdWlyZSgnLi9kZWZhdWx0VmFsdWUnKTtcblxuXG52YXIgZXh0cmFjdFVuaWZvcm1zID0gZnVuY3Rpb24oZ2wsIHByb2dyYW0pXG57XG5cdHZhciB1bmlmb3JtcyA9IHt9O1xuXHRcbiAgICB2YXIgdG90YWxVbmlmb3JtcyA9IGdsLmdldFByb2dyYW1QYXJhbWV0ZXIocHJvZ3JhbSwgZ2wuQUNUSVZFX1VOSUZPUk1TKVxuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0b3RhbFVuaWZvcm1zOyBpKyspIFxuICAgIHtcbiAgICBcdHZhciB1bmlmb3JtRGF0YSA9IGdsLmdldEFjdGl2ZVVuaWZvcm0ocHJvZ3JhbSwgaSk7XG4gICAgXHR2YXIgbmFtZSA9IHVuaWZvcm1EYXRhLm5hbWUucmVwbGFjZSgvXFxbLio/XFxdLywgXCJcIik7XG4gICAgICAgIHZhciB0eXBlID0gbWFwVHlwZShnbCwgdW5pZm9ybURhdGEudHlwZSApO1xuXG4gICAgXHR1bmlmb3Jtc1tuYW1lXSA9IHtcbiAgICBcdFx0dHlwZTp0eXBlLFxuICAgIFx0XHRzaXplOnVuaWZvcm1EYXRhLnNpemUsXG4gICAgXHRcdGxvY2F0aW9uOmdsLmdldFVuaWZvcm1Mb2NhdGlvbihwcm9ncmFtLCBuYW1lKSxcbiAgICBcdFx0dmFsdWU6ZGVmYXVsdFZhbHVlKHR5cGUsIHVuaWZvcm1EYXRhLnNpemUpXG4gICAgXHR9XG4gICAgfTtcblx0XG5cdHJldHVybiB1bmlmb3JtcztcdFxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGV4dHJhY3RVbmlmb3JtcztcblxuIiwiXG52YXIgZ2VuZXJhdGVVbmlmb3JtQWNjZXNzT2JqZWN0ID0gZnVuY3Rpb24oZ2wsIHVuaWZvcm1EYXRhKVxue1xuICAgIC8vIHRoaXMgaXMgdGhlIG9iamVjdCB3ZSB3aWxsIGJlIHNlbmRpbmcgYmFjay5cbiAgICAvLyBhbiBvYmplY3QgaGllcmFjaHkgd2lsbCBiZSBjcmVhdGVkIGZvciBzdHJ1Y3RzXG4gICAgdmFyIHVuaWZvcm1zID0ge2RhdGE6e319O1xuXG4gICAgdW5pZm9ybXMuZ2wgPSBnbDtcbiAgICBcbiAgICB2YXIgdW5pZm9ybUtleXM9IE9iamVjdC5rZXlzKHVuaWZvcm1EYXRhKTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdW5pZm9ybUtleXMubGVuZ3RoOyBpKyspIFxuICAgIHtcbiAgICAgICAgdmFyIGZ1bGxOYW1lID0gdW5pZm9ybUtleXNbaV1cblxuICAgICAgICB2YXIgbmFtZVRva2VucyA9IGZ1bGxOYW1lLnNwbGl0KCcuJyk7XG4gICAgICAgIHZhciBuYW1lID0gbmFtZVRva2Vuc1tuYW1lVG9rZW5zLmxlbmd0aCAtIDFdO1xuXG4gICAgICAgIHZhciB1bmlmb3JtR3JvdXAgPSBnZXRVbmlmb3JtR3JvdXAobmFtZVRva2VucywgdW5pZm9ybXMpO1xuXG4gICAgICAgIHZhciB1bmlmb3JtID0gIHVuaWZvcm1EYXRhW2Z1bGxOYW1lXTtcbiAgICAgICAgdW5pZm9ybUdyb3VwLmRhdGFbbmFtZV0gPSB1bmlmb3JtO1xuXG4gICAgICAgIHVuaWZvcm1Hcm91cC5nbCA9IGdsO1xuXG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh1bmlmb3JtR3JvdXAsIG5hbWUsIHtcbiAgICAgICAgICAgIGdldDogZ2VuZXJhdGVHZXR0ZXIobmFtZSksXG4gICAgICAgICAgICBzZXQ6IGdlbmVyYXRlU2V0dGVyKG5hbWUsIHVuaWZvcm0pXG4gICAgICAgIH0pXG4gICAgfTtcblxuICAgIHJldHVybiB1bmlmb3Jtcztcbn1cblxudmFyIGdlbmVyYXRlR2V0dGVyID0gZnVuY3Rpb24obmFtZSlcbntcblx0dmFyIHRlbXBsYXRlID0gZ2V0dGVyVGVtcGxhdGUucmVwbGFjZSgnJSUnLCBuYW1lKTtcblx0cmV0dXJuIG5ldyBGdW5jdGlvbih0ZW1wbGF0ZSk7XG59XG5cbnZhciBnZW5lcmF0ZVNldHRlciA9IGZ1bmN0aW9uKG5hbWUsIHVuaWZvcm0pXG57XG4gICAgdmFyIHRlbXBsYXRlID0gc2V0dGVyVGVtcGxhdGUucmVwbGFjZSgvJSUvZywgbmFtZSk7XG4gICAgdmFyIHNldFRlbXBsYXRlXG4gICAgXG4gICAgaWYodW5pZm9ybS5zaXplID09PSAxKVxuICAgIHtcbiAgICAgICAgc2V0VGVtcGxhdGUgPSBHTFNMX1RPX1NJTkdMRV9TRVRURVJTW3VuaWZvcm0udHlwZV07XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHNldFRlbXBsYXRlID0gR0xTTF9UT19BUlJBWV9TRVRURVJTW3VuaWZvcm0udHlwZV07XG4gICAgfVxuXG4gICAgaWYoc2V0VGVtcGxhdGUpXG4gICAge1xuICAgICAgICB0ZW1wbGF0ZSArPSBcIlxcbnRoaXMuZ2wuXCIgKyBzZXRUZW1wbGF0ZSArIFwiO1wiO1xuICAgIH1cblxuICBcdHJldHVybiBuZXcgRnVuY3Rpb24oJ3ZhbHVlJywgdGVtcGxhdGUpO1xufVxuXG52YXIgZ2V0VW5pZm9ybUdyb3VwID0gZnVuY3Rpb24obmFtZVRva2VucywgdW5pZm9ybSlcbntcbiAgICB2YXIgY3VyID0gdW5pZm9ybTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbmFtZVRva2Vucy5sZW5ndGggLSAxOyBpKyspIFxuICAgIHtcbiAgICAgICAgdmFyIG8gPSBjdXJbbmFtZVRva2Vuc1tpXV0gfHwge2RhdGE6e319O1xuICAgICAgICBjdXJbbmFtZVRva2Vuc1tpXV0gPSBvO1xuICAgICAgICBjdXIgPSBvO1xuICAgIH07XG5cbiAgICByZXR1cm4gY3VyXG59XG5cbnZhciBnZXR0ZXJUZW1wbGF0ZSA9IFtcbiAgICAncmV0dXJuIHRoaXMuZGF0YS4lJS52YWx1ZTsnLFxuXS5qb2luKCdcXG4nKTtcblxudmFyIHNldHRlclRlbXBsYXRlID0gW1xuICAgICd0aGlzLmRhdGEuJSUudmFsdWUgPSB2YWx1ZTsnLFxuICAgICd2YXIgbG9jYXRpb24gPSB0aGlzLmRhdGEuJSUubG9jYXRpb247J1xuXS5qb2luKCdcXG4nKTtcblxuXG52YXIgR0xTTF9UT19TSU5HTEVfU0VUVEVSUyA9IHtcblxuICAgICdmbG9hdCc6ICAgICd1bmlmb3JtMWYobG9jYXRpb24sIHZhbHVlKScsXG5cbiAgICAndmVjMic6ICAgICAndW5pZm9ybTJmKGxvY2F0aW9uLCB2YWx1ZVswXSwgdmFsdWVbMV0pJyxcbiAgICAndmVjMyc6ICAgICAndW5pZm9ybTNmKGxvY2F0aW9uLCB2YWx1ZVswXSwgdmFsdWVbMV0sIHZhbHVlWzJdKScsXG4gICAgJ3ZlYzQnOiAgICAgJ3VuaWZvcm00Zihsb2NhdGlvbiwgdmFsdWVbMF0sIHZhbHVlWzFdLCB2YWx1ZVsyXSwgdmFsdWVbM10pJyxcbiAgICBcdFxuICAgICdpbnQnOiAgICAgICd1bmlmb3JtMWkobG9jYXRpb24sIHZhbHVlKScsXG4gICAgJ2l2ZWMyJzogICAgJ3VuaWZvcm0yaShsb2NhdGlvbiwgdmFsdWVbMF0sIHZhbHVlWzFdKScsXG4gICAgJ2l2ZWMzJzogICAgJ3VuaWZvcm0zaShsb2NhdGlvbiwgdmFsdWVbMF0sIHZhbHVlWzFdLCB2YWx1ZVsyXSknLFxuICAgICdpdmVjNCc6ICAgICd1bmlmb3JtNGkobG9jYXRpb24sIHZhbHVlWzBdLCB2YWx1ZVsxXSwgdmFsdWVbMl0sIHZhbHVlWzNdKScsXG5cbiAgICAnYm9vbCc6ICAgICAndW5pZm9ybTFpKGxvY2F0aW9uLCB2YWx1ZSknLFxuICAgICdidmVjMic6ICAgICd1bmlmb3JtMmkobG9jYXRpb24sIHZhbHVlWzBdLCB2YWx1ZVsxXSknLFxuICAgICdidmVjMyc6ICAgICd1bmlmb3JtM2kobG9jYXRpb24sIHZhbHVlWzBdLCB2YWx1ZVsxXSwgdmFsdWVbMl0pJyxcbiAgICAnYnZlYzQnOiAgICAndW5pZm9ybTRpKGxvY2F0aW9uLCB2YWx1ZVswXSwgdmFsdWVbMV0sIHZhbHVlWzJdLCB2YWx1ZVszXSknLFxuXG4gICAgJ21hdDInOiAgICAgJ3VuaWZvcm1NYXRyaXgyZnYobG9jYXRpb24sIGZhbHNlLCB2YWx1ZSknLFxuICAgICdtYXQzJzogICAgICd1bmlmb3JtTWF0cml4M2Z2KGxvY2F0aW9uLCBmYWxzZSwgdmFsdWUpJyxcbiAgICAnbWF0NCc6ICAgICAndW5pZm9ybU1hdHJpeDRmdihsb2NhdGlvbiwgZmFsc2UsIHZhbHVlKScsXG5cbiAgICAnc2FtcGxlcjJEJzondW5pZm9ybTFpKGxvY2F0aW9uLCB2YWx1ZSknXG59XG5cbnZhciBHTFNMX1RPX0FSUkFZX1NFVFRFUlMgPSB7XG5cbiAgICAnZmxvYXQnOiAgICAndW5pZm9ybTFmdihsb2NhdGlvbiwgdmFsdWUpJyxcblxuICAgICd2ZWMyJzogICAgICd1bmlmb3JtMmZ2KGxvY2F0aW9uLCB2YWx1ZSknLFxuICAgICd2ZWMzJzogICAgICd1bmlmb3JtM2Z2KGxvY2F0aW9uLCB2YWx1ZSknLFxuICAgICd2ZWM0JzogICAgICd1bmlmb3JtNGZ2KGxvY2F0aW9uLCB2YWx1ZSknLFxuICAgIFx0XG4gICAgJ2ludCc6ICAgICAgJ3VuaWZvcm0xaXYobG9jYXRpb24sIHZhbHVlKScsXG4gICAgJ2l2ZWMyJzogICAgJ3VuaWZvcm0yaXYobG9jYXRpb24sIHZhbHVlKScsXG4gICAgJ2l2ZWMzJzogICAgJ3VuaWZvcm0zaXYobG9jYXRpb24sIHZhbHVlKScsXG4gICAgJ2l2ZWM0JzogICAgJ3VuaWZvcm00aXYobG9jYXRpb24sIHZhbHVlKScsXG5cbiAgICAnYm9vbCc6ICAgICAndW5pZm9ybTFpdihsb2NhdGlvbiwgdmFsdWUpJyxcbiAgICAnYnZlYzInOiAgICAndW5pZm9ybTJpdihsb2NhdGlvbiwgdmFsdWUpJyxcbiAgICAnYnZlYzMnOiAgICAndW5pZm9ybTNpdihsb2NhdGlvbiwgdmFsdWUpJyxcbiAgICAnYnZlYzQnOiAgICAndW5pZm9ybTRpdihsb2NhdGlvbiwgdmFsdWUpJyxcbiAgIFxuICAgICdzYW1wbGVyMkQnOid1bmlmb3JtMWl2KGxvY2F0aW9uLCB2YWx1ZSknXG59XG5cbm1vZHVsZS5leHBvcnRzID0gZ2VuZXJhdGVVbmlmb3JtQWNjZXNzT2JqZWN0O1xuXG4iLCJcblxudmFyIG1hcFNpemUgPSBmdW5jdGlvbih0eXBlKSBcbnsgXG4gICAgcmV0dXJuIEdMU0xfVE9fU0laRVt0eXBlXTtcbn1cblxuXG52YXIgR0xTTF9UT19TSVpFID0ge1xuICAgICdmbG9hdCc6ICAgIDEsXG4gICAgJ3ZlYzInOiAgICAgMixcbiAgICAndmVjMyc6ICAgICAzLFxuICAgICd2ZWM0JzogICAgIDQsXG5cbiAgICAnaW50JzogICAgICAxLFxuICAgICdpdmVjMic6ICAgIDIsXG4gICAgJ2l2ZWMzJzogICAgMyxcbiAgICAnaXZlYzQnOiAgICA0LFxuXG4gICAgJ2Jvb2wnOiAgICAgMSxcbiAgICAnYnZlYzInOiAgICAyLFxuICAgICdidmVjMyc6ICAgIDMsXG4gICAgJ2J2ZWM0JzogICAgNCxcblxuICAgICdtYXQyJzogICAgIDQsXG4gICAgJ21hdDMnOiAgICAgOSxcbiAgICAnbWF0NCc6ICAgICAxNixcblxuICAgICdzYW1wbGVyMkQnOiAgMVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IG1hcFNpemU7XG4iLCJcblxudmFyIG1hcFNpemUgPSBmdW5jdGlvbihnbCwgdHlwZSkgXG57XG4gICAgaWYoIUdMX1RBQkxFKSBcbiAgICB7XG4gICAgICAgIHZhciB0eXBlTmFtZXMgPSBPYmplY3Qua2V5cyhHTF9UT19HTFNMX1RZUEVTKTtcblxuICAgICAgICBHTF9UQUJMRSA9IHt9O1xuXG4gICAgICAgIGZvcih2YXIgaSA9IDA7IGkgPCB0eXBlTmFtZXMubGVuZ3RoOyArK2kpIFxuICAgICAgICB7XG4gICAgICAgICAgICB2YXIgdG4gPSB0eXBlTmFtZXNbaV07XG4gICAgICAgICAgICBHTF9UQUJMRVsgZ2xbdG5dIF0gPSBHTF9UT19HTFNMX1RZUEVTW3RuXTtcbiAgICAgICAgfVxuICAgIH1cblxuICByZXR1cm4gR0xfVEFCTEVbdHlwZV07XG59XG5cbnZhciBHTF9UQUJMRSA9IG51bGw7XG5cbnZhciBHTF9UT19HTFNMX1RZUEVTID0ge1xuICAnRkxPQVQnOiAgICAgICAnZmxvYXQnLFxuICAnRkxPQVRfVkVDMic6ICAndmVjMicsXG4gICdGTE9BVF9WRUMzJzogICd2ZWMzJyxcbiAgJ0ZMT0FUX1ZFQzQnOiAgJ3ZlYzQnLFxuXG4gICdJTlQnOiAgICAgICAgICdpbnQnLFxuICAnSU5UX1ZFQzInOiAgICAnaXZlYzInLFxuICAnSU5UX1ZFQzMnOiAgICAnaXZlYzMnLFxuICAnSU5UX1ZFQzQnOiAgICAnaXZlYzQnLFxuICBcbiAgJ0JPT0wnOiAgICAgICAgJ2Jvb2wnLFxuICAnQk9PTF9WRUMyJzogICAnYnZlYzInLFxuICAnQk9PTF9WRUMzJzogICAnYnZlYzMnLFxuICAnQk9PTF9WRUM0JzogICAnYnZlYzQnLFxuICBcbiAgJ0ZMT0FUX01BVDInOiAgJ21hdDInLFxuICAnRkxPQVRfTUFUMyc6ICAnbWF0MycsXG4gICdGTE9BVF9NQVQ0JzogICdtYXQ0JyxcbiAgXG4gICdTQU1QTEVSXzJEJzogICdzYW1wbGVyMkQnICBcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBtYXBTaXplO1xuIiwiLyohXG4gKiBhc3luY1xuICogaHR0cHM6Ly9naXRodWIuY29tL2Nhb2xhbi9hc3luY1xuICpcbiAqIENvcHlyaWdodCAyMDEwLTIwMTQgQ2FvbGFuIE1jTWFob25cbiAqIFJlbGVhc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZVxuICovXG4oZnVuY3Rpb24gKCkge1xuXG4gICAgdmFyIGFzeW5jID0ge307XG4gICAgZnVuY3Rpb24gbm9vcCgpIHt9XG4gICAgZnVuY3Rpb24gaWRlbnRpdHkodikge1xuICAgICAgICByZXR1cm4gdjtcbiAgICB9XG4gICAgZnVuY3Rpb24gdG9Cb29sKHYpIHtcbiAgICAgICAgcmV0dXJuICEhdjtcbiAgICB9XG4gICAgZnVuY3Rpb24gbm90SWQodikge1xuICAgICAgICByZXR1cm4gIXY7XG4gICAgfVxuXG4gICAgLy8gZ2xvYmFsIG9uIHRoZSBzZXJ2ZXIsIHdpbmRvdyBpbiB0aGUgYnJvd3NlclxuICAgIHZhciBwcmV2aW91c19hc3luYztcblxuICAgIC8vIEVzdGFibGlzaCB0aGUgcm9vdCBvYmplY3QsIGB3aW5kb3dgIChgc2VsZmApIGluIHRoZSBicm93c2VyLCBgZ2xvYmFsYFxuICAgIC8vIG9uIHRoZSBzZXJ2ZXIsIG9yIGB0aGlzYCBpbiBzb21lIHZpcnR1YWwgbWFjaGluZXMuIFdlIHVzZSBgc2VsZmBcbiAgICAvLyBpbnN0ZWFkIG9mIGB3aW5kb3dgIGZvciBgV2ViV29ya2VyYCBzdXBwb3J0LlxuICAgIHZhciByb290ID0gdHlwZW9mIHNlbGYgPT09ICdvYmplY3QnICYmIHNlbGYuc2VsZiA9PT0gc2VsZiAmJiBzZWxmIHx8XG4gICAgICAgICAgICB0eXBlb2YgZ2xvYmFsID09PSAnb2JqZWN0JyAmJiBnbG9iYWwuZ2xvYmFsID09PSBnbG9iYWwgJiYgZ2xvYmFsIHx8XG4gICAgICAgICAgICB0aGlzO1xuXG4gICAgaWYgKHJvb3QgIT0gbnVsbCkge1xuICAgICAgICBwcmV2aW91c19hc3luYyA9IHJvb3QuYXN5bmM7XG4gICAgfVxuXG4gICAgYXN5bmMubm9Db25mbGljdCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcm9vdC5hc3luYyA9IHByZXZpb3VzX2FzeW5jO1xuICAgICAgICByZXR1cm4gYXN5bmM7XG4gICAgfTtcblxuICAgIGZ1bmN0aW9uIG9ubHlfb25jZShmbikge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICBpZiAoZm4gPT09IG51bGwpIHRocm93IG5ldyBFcnJvcihcIkNhbGxiYWNrIHdhcyBhbHJlYWR5IGNhbGxlZC5cIik7XG4gICAgICAgICAgICBmbi5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgICAgICAgICAgZm4gPSBudWxsO1xuICAgICAgICB9O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIF9vbmNlKGZuKSB7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIGlmIChmbiA9PT0gbnVsbCkgcmV0dXJuO1xuICAgICAgICAgICAgZm4uYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICAgICAgICAgIGZuID0gbnVsbDtcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICAvLy8vIGNyb3NzLWJyb3dzZXIgY29tcGF0aWJsaXR5IGZ1bmN0aW9ucyAvLy8vXG5cbiAgICB2YXIgX3RvU3RyaW5nID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZztcblxuICAgIHZhciBfaXNBcnJheSA9IEFycmF5LmlzQXJyYXkgfHwgZnVuY3Rpb24gKG9iaikge1xuICAgICAgICByZXR1cm4gX3RvU3RyaW5nLmNhbGwob2JqKSA9PT0gJ1tvYmplY3QgQXJyYXldJztcbiAgICB9O1xuXG4gICAgLy8gUG9ydGVkIGZyb20gdW5kZXJzY29yZS5qcyBpc09iamVjdFxuICAgIHZhciBfaXNPYmplY3QgPSBmdW5jdGlvbihvYmopIHtcbiAgICAgICAgdmFyIHR5cGUgPSB0eXBlb2Ygb2JqO1xuICAgICAgICByZXR1cm4gdHlwZSA9PT0gJ2Z1bmN0aW9uJyB8fCB0eXBlID09PSAnb2JqZWN0JyAmJiAhIW9iajtcbiAgICB9O1xuXG4gICAgZnVuY3Rpb24gX2lzQXJyYXlMaWtlKGFycikge1xuICAgICAgICByZXR1cm4gX2lzQXJyYXkoYXJyKSB8fCAoXG4gICAgICAgICAgICAvLyBoYXMgYSBwb3NpdGl2ZSBpbnRlZ2VyIGxlbmd0aCBwcm9wZXJ0eVxuICAgICAgICAgICAgdHlwZW9mIGFyci5sZW5ndGggPT09IFwibnVtYmVyXCIgJiZcbiAgICAgICAgICAgIGFyci5sZW5ndGggPj0gMCAmJlxuICAgICAgICAgICAgYXJyLmxlbmd0aCAlIDEgPT09IDBcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBfYXJyYXlFYWNoKGFyciwgaXRlcmF0b3IpIHtcbiAgICAgICAgdmFyIGluZGV4ID0gLTEsXG4gICAgICAgICAgICBsZW5ndGggPSBhcnIubGVuZ3RoO1xuXG4gICAgICAgIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgICAgICAgICBpdGVyYXRvcihhcnJbaW5kZXhdLCBpbmRleCwgYXJyKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIF9tYXAoYXJyLCBpdGVyYXRvcikge1xuICAgICAgICB2YXIgaW5kZXggPSAtMSxcbiAgICAgICAgICAgIGxlbmd0aCA9IGFyci5sZW5ndGgsXG4gICAgICAgICAgICByZXN1bHQgPSBBcnJheShsZW5ndGgpO1xuXG4gICAgICAgIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgICAgICAgICByZXN1bHRbaW5kZXhdID0gaXRlcmF0b3IoYXJyW2luZGV4XSwgaW5kZXgsIGFycik7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBfcmFuZ2UoY291bnQpIHtcbiAgICAgICAgcmV0dXJuIF9tYXAoQXJyYXkoY291bnQpLCBmdW5jdGlvbiAodiwgaSkgeyByZXR1cm4gaTsgfSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gX3JlZHVjZShhcnIsIGl0ZXJhdG9yLCBtZW1vKSB7XG4gICAgICAgIF9hcnJheUVhY2goYXJyLCBmdW5jdGlvbiAoeCwgaSwgYSkge1xuICAgICAgICAgICAgbWVtbyA9IGl0ZXJhdG9yKG1lbW8sIHgsIGksIGEpO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIG1lbW87XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gX2ZvckVhY2hPZihvYmplY3QsIGl0ZXJhdG9yKSB7XG4gICAgICAgIF9hcnJheUVhY2goX2tleXMob2JqZWN0KSwgZnVuY3Rpb24gKGtleSkge1xuICAgICAgICAgICAgaXRlcmF0b3Iob2JqZWN0W2tleV0sIGtleSk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIF9pbmRleE9mKGFyciwgaXRlbSkge1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFyci5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgaWYgKGFycltpXSA9PT0gaXRlbSkgcmV0dXJuIGk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIC0xO1xuICAgIH1cblxuICAgIHZhciBfa2V5cyA9IE9iamVjdC5rZXlzIHx8IGZ1bmN0aW9uIChvYmopIHtcbiAgICAgICAgdmFyIGtleXMgPSBbXTtcbiAgICAgICAgZm9yICh2YXIgayBpbiBvYmopIHtcbiAgICAgICAgICAgIGlmIChvYmouaGFzT3duUHJvcGVydHkoaykpIHtcbiAgICAgICAgICAgICAgICBrZXlzLnB1c2goayk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGtleXM7XG4gICAgfTtcblxuICAgIGZ1bmN0aW9uIF9rZXlJdGVyYXRvcihjb2xsKSB7XG4gICAgICAgIHZhciBpID0gLTE7XG4gICAgICAgIHZhciBsZW47XG4gICAgICAgIHZhciBrZXlzO1xuICAgICAgICBpZiAoX2lzQXJyYXlMaWtlKGNvbGwpKSB7XG4gICAgICAgICAgICBsZW4gPSBjb2xsLmxlbmd0aDtcbiAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbiBuZXh0KCkge1xuICAgICAgICAgICAgICAgIGkrKztcbiAgICAgICAgICAgICAgICByZXR1cm4gaSA8IGxlbiA/IGkgOiBudWxsO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGtleXMgPSBfa2V5cyhjb2xsKTtcbiAgICAgICAgICAgIGxlbiA9IGtleXMubGVuZ3RoO1xuICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIG5leHQoKSB7XG4gICAgICAgICAgICAgICAgaSsrO1xuICAgICAgICAgICAgICAgIHJldHVybiBpIDwgbGVuID8ga2V5c1tpXSA6IG51bGw7XG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gU2ltaWxhciB0byBFUzYncyByZXN0IHBhcmFtIChodHRwOi8vYXJpeWEub2ZpbGFicy5jb20vMjAxMy8wMy9lczYtYW5kLXJlc3QtcGFyYW1ldGVyLmh0bWwpXG4gICAgLy8gVGhpcyBhY2N1bXVsYXRlcyB0aGUgYXJndW1lbnRzIHBhc3NlZCBpbnRvIGFuIGFycmF5LCBhZnRlciBhIGdpdmVuIGluZGV4LlxuICAgIC8vIEZyb20gdW5kZXJzY29yZS5qcyAoaHR0cHM6Ly9naXRodWIuY29tL2phc2hrZW5hcy91bmRlcnNjb3JlL3B1bGwvMjE0MCkuXG4gICAgZnVuY3Rpb24gX3Jlc3RQYXJhbShmdW5jLCBzdGFydEluZGV4KSB7XG4gICAgICAgIHN0YXJ0SW5kZXggPSBzdGFydEluZGV4ID09IG51bGwgPyBmdW5jLmxlbmd0aCAtIDEgOiArc3RhcnRJbmRleDtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgdmFyIGxlbmd0aCA9IE1hdGgubWF4KGFyZ3VtZW50cy5sZW5ndGggLSBzdGFydEluZGV4LCAwKTtcbiAgICAgICAgICAgIHZhciByZXN0ID0gQXJyYXkobGVuZ3RoKTtcbiAgICAgICAgICAgIGZvciAodmFyIGluZGV4ID0gMDsgaW5kZXggPCBsZW5ndGg7IGluZGV4KyspIHtcbiAgICAgICAgICAgICAgICByZXN0W2luZGV4XSA9IGFyZ3VtZW50c1tpbmRleCArIHN0YXJ0SW5kZXhdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgc3dpdGNoIChzdGFydEluZGV4KSB7XG4gICAgICAgICAgICAgICAgY2FzZSAwOiByZXR1cm4gZnVuYy5jYWxsKHRoaXMsIHJlc3QpO1xuICAgICAgICAgICAgICAgIGNhc2UgMTogcmV0dXJuIGZ1bmMuY2FsbCh0aGlzLCBhcmd1bWVudHNbMF0sIHJlc3QpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gQ3VycmVudGx5IHVudXNlZCBidXQgaGFuZGxlIGNhc2VzIG91dHNpZGUgb2YgdGhlIHN3aXRjaCBzdGF0ZW1lbnQ6XG4gICAgICAgICAgICAvLyB2YXIgYXJncyA9IEFycmF5KHN0YXJ0SW5kZXggKyAxKTtcbiAgICAgICAgICAgIC8vIGZvciAoaW5kZXggPSAwOyBpbmRleCA8IHN0YXJ0SW5kZXg7IGluZGV4KyspIHtcbiAgICAgICAgICAgIC8vICAgICBhcmdzW2luZGV4XSA9IGFyZ3VtZW50c1tpbmRleF07XG4gICAgICAgICAgICAvLyB9XG4gICAgICAgICAgICAvLyBhcmdzW3N0YXJ0SW5kZXhdID0gcmVzdDtcbiAgICAgICAgICAgIC8vIHJldHVybiBmdW5jLmFwcGx5KHRoaXMsIGFyZ3MpO1xuICAgICAgICB9O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIF93aXRob3V0SW5kZXgoaXRlcmF0b3IpIHtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICh2YWx1ZSwgaW5kZXgsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICByZXR1cm4gaXRlcmF0b3IodmFsdWUsIGNhbGxiYWNrKTtcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICAvLy8vIGV4cG9ydGVkIGFzeW5jIG1vZHVsZSBmdW5jdGlvbnMgLy8vL1xuXG4gICAgLy8vLyBuZXh0VGljayBpbXBsZW1lbnRhdGlvbiB3aXRoIGJyb3dzZXItY29tcGF0aWJsZSBmYWxsYmFjayAvLy8vXG5cbiAgICAvLyBjYXB0dXJlIHRoZSBnbG9iYWwgcmVmZXJlbmNlIHRvIGd1YXJkIGFnYWluc3QgZmFrZVRpbWVyIG1vY2tzXG4gICAgdmFyIF9zZXRJbW1lZGlhdGUgPSB0eXBlb2Ygc2V0SW1tZWRpYXRlID09PSAnZnVuY3Rpb24nICYmIHNldEltbWVkaWF0ZTtcblxuICAgIHZhciBfZGVsYXkgPSBfc2V0SW1tZWRpYXRlID8gZnVuY3Rpb24oZm4pIHtcbiAgICAgICAgLy8gbm90IGEgZGlyZWN0IGFsaWFzIGZvciBJRTEwIGNvbXBhdGliaWxpdHlcbiAgICAgICAgX3NldEltbWVkaWF0ZShmbik7XG4gICAgfSA6IGZ1bmN0aW9uKGZuKSB7XG4gICAgICAgIHNldFRpbWVvdXQoZm4sIDApO1xuICAgIH07XG5cbiAgICBpZiAodHlwZW9mIHByb2Nlc3MgPT09ICdvYmplY3QnICYmIHR5cGVvZiBwcm9jZXNzLm5leHRUaWNrID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIGFzeW5jLm5leHRUaWNrID0gcHJvY2Vzcy5uZXh0VGljaztcbiAgICB9IGVsc2Uge1xuICAgICAgICBhc3luYy5uZXh0VGljayA9IF9kZWxheTtcbiAgICB9XG4gICAgYXN5bmMuc2V0SW1tZWRpYXRlID0gX3NldEltbWVkaWF0ZSA/IF9kZWxheSA6IGFzeW5jLm5leHRUaWNrO1xuXG5cbiAgICBhc3luYy5mb3JFYWNoID1cbiAgICBhc3luYy5lYWNoID0gZnVuY3Rpb24gKGFyciwgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgIHJldHVybiBhc3luYy5lYWNoT2YoYXJyLCBfd2l0aG91dEluZGV4KGl0ZXJhdG9yKSwgY2FsbGJhY2spO1xuICAgIH07XG5cbiAgICBhc3luYy5mb3JFYWNoU2VyaWVzID1cbiAgICBhc3luYy5lYWNoU2VyaWVzID0gZnVuY3Rpb24gKGFyciwgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgIHJldHVybiBhc3luYy5lYWNoT2ZTZXJpZXMoYXJyLCBfd2l0aG91dEluZGV4KGl0ZXJhdG9yKSwgY2FsbGJhY2spO1xuICAgIH07XG5cblxuICAgIGFzeW5jLmZvckVhY2hMaW1pdCA9XG4gICAgYXN5bmMuZWFjaExpbWl0ID0gZnVuY3Rpb24gKGFyciwgbGltaXQsIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICByZXR1cm4gX2VhY2hPZkxpbWl0KGxpbWl0KShhcnIsIF93aXRob3V0SW5kZXgoaXRlcmF0b3IpLCBjYWxsYmFjayk7XG4gICAgfTtcblxuICAgIGFzeW5jLmZvckVhY2hPZiA9XG4gICAgYXN5bmMuZWFjaE9mID0gZnVuY3Rpb24gKG9iamVjdCwgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgIGNhbGxiYWNrID0gX29uY2UoY2FsbGJhY2sgfHwgbm9vcCk7XG4gICAgICAgIG9iamVjdCA9IG9iamVjdCB8fCBbXTtcblxuICAgICAgICB2YXIgaXRlciA9IF9rZXlJdGVyYXRvcihvYmplY3QpO1xuICAgICAgICB2YXIga2V5LCBjb21wbGV0ZWQgPSAwO1xuXG4gICAgICAgIHdoaWxlICgoa2V5ID0gaXRlcigpKSAhPSBudWxsKSB7XG4gICAgICAgICAgICBjb21wbGV0ZWQgKz0gMTtcbiAgICAgICAgICAgIGl0ZXJhdG9yKG9iamVjdFtrZXldLCBrZXksIG9ubHlfb25jZShkb25lKSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoY29tcGxldGVkID09PSAwKSBjYWxsYmFjayhudWxsKTtcblxuICAgICAgICBmdW5jdGlvbiBkb25lKGVycikge1xuICAgICAgICAgICAgY29tcGxldGVkLS07XG4gICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIENoZWNrIGtleSBpcyBudWxsIGluIGNhc2UgaXRlcmF0b3IgaXNuJ3QgZXhoYXVzdGVkXG4gICAgICAgICAgICAvLyBhbmQgZG9uZSByZXNvbHZlZCBzeW5jaHJvbm91c2x5LlxuICAgICAgICAgICAgZWxzZSBpZiAoa2V5ID09PSBudWxsICYmIGNvbXBsZXRlZCA8PSAwKSB7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2sobnVsbCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgYXN5bmMuZm9yRWFjaE9mU2VyaWVzID1cbiAgICBhc3luYy5lYWNoT2ZTZXJpZXMgPSBmdW5jdGlvbiAob2JqLCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgY2FsbGJhY2sgPSBfb25jZShjYWxsYmFjayB8fCBub29wKTtcbiAgICAgICAgb2JqID0gb2JqIHx8IFtdO1xuICAgICAgICB2YXIgbmV4dEtleSA9IF9rZXlJdGVyYXRvcihvYmopO1xuICAgICAgICB2YXIga2V5ID0gbmV4dEtleSgpO1xuICAgICAgICBmdW5jdGlvbiBpdGVyYXRlKCkge1xuICAgICAgICAgICAgdmFyIHN5bmMgPSB0cnVlO1xuICAgICAgICAgICAgaWYgKGtleSA9PT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBjYWxsYmFjayhudWxsKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGl0ZXJhdG9yKG9ialtrZXldLCBrZXksIG9ubHlfb25jZShmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAga2V5ID0gbmV4dEtleSgpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoa2V5ID09PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gY2FsbGJhY2sobnVsbCk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3luYykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFzeW5jLnNldEltbWVkaWF0ZShpdGVyYXRlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlcmF0ZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSkpO1xuICAgICAgICAgICAgc3luYyA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGl0ZXJhdGUoKTtcbiAgICB9O1xuXG5cblxuICAgIGFzeW5jLmZvckVhY2hPZkxpbWl0ID1cbiAgICBhc3luYy5lYWNoT2ZMaW1pdCA9IGZ1bmN0aW9uIChvYmosIGxpbWl0LCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgX2VhY2hPZkxpbWl0KGxpbWl0KShvYmosIGl0ZXJhdG9yLCBjYWxsYmFjayk7XG4gICAgfTtcblxuICAgIGZ1bmN0aW9uIF9lYWNoT2ZMaW1pdChsaW1pdCkge1xuXG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAob2JqLCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIGNhbGxiYWNrID0gX29uY2UoY2FsbGJhY2sgfHwgbm9vcCk7XG4gICAgICAgICAgICBvYmogPSBvYmogfHwgW107XG4gICAgICAgICAgICB2YXIgbmV4dEtleSA9IF9rZXlJdGVyYXRvcihvYmopO1xuICAgICAgICAgICAgaWYgKGxpbWl0IDw9IDApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gY2FsbGJhY2sobnVsbCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB2YXIgZG9uZSA9IGZhbHNlO1xuICAgICAgICAgICAgdmFyIHJ1bm5pbmcgPSAwO1xuICAgICAgICAgICAgdmFyIGVycm9yZWQgPSBmYWxzZTtcblxuICAgICAgICAgICAgKGZ1bmN0aW9uIHJlcGxlbmlzaCAoKSB7XG4gICAgICAgICAgICAgICAgaWYgKGRvbmUgJiYgcnVubmluZyA8PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBjYWxsYmFjayhudWxsKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB3aGlsZSAocnVubmluZyA8IGxpbWl0ICYmICFlcnJvcmVkKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBrZXkgPSBuZXh0S2V5KCk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChrZXkgPT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRvbmUgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJ1bm5pbmcgPD0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKG51bGwpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJ1bm5pbmcgKz0gMTtcbiAgICAgICAgICAgICAgICAgICAgaXRlcmF0b3Iob2JqW2tleV0sIGtleSwgb25seV9vbmNlKGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJ1bm5pbmcgLT0gMTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVwbGVuaXNoKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KSgpO1xuICAgICAgICB9O1xuICAgIH1cblxuXG4gICAgZnVuY3Rpb24gZG9QYXJhbGxlbChmbikge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKG9iaiwgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICByZXR1cm4gZm4oYXN5bmMuZWFjaE9mLCBvYmosIGl0ZXJhdG9yLCBjYWxsYmFjayk7XG4gICAgICAgIH07XG4gICAgfVxuICAgIGZ1bmN0aW9uIGRvUGFyYWxsZWxMaW1pdChmbikge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKG9iaiwgbGltaXQsIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICAgICAgcmV0dXJuIGZuKF9lYWNoT2ZMaW1pdChsaW1pdCksIG9iaiwgaXRlcmF0b3IsIGNhbGxiYWNrKTtcbiAgICAgICAgfTtcbiAgICB9XG4gICAgZnVuY3Rpb24gZG9TZXJpZXMoZm4pIHtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChvYmosIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICAgICAgcmV0dXJuIGZuKGFzeW5jLmVhY2hPZlNlcmllcywgb2JqLCBpdGVyYXRvciwgY2FsbGJhY2spO1xuICAgICAgICB9O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIF9hc3luY01hcChlYWNoZm4sIGFyciwgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgIGNhbGxiYWNrID0gX29uY2UoY2FsbGJhY2sgfHwgbm9vcCk7XG4gICAgICAgIGFyciA9IGFyciB8fCBbXTtcbiAgICAgICAgdmFyIHJlc3VsdHMgPSBfaXNBcnJheUxpa2UoYXJyKSA/IFtdIDoge307XG4gICAgICAgIGVhY2hmbihhcnIsIGZ1bmN0aW9uICh2YWx1ZSwgaW5kZXgsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICBpdGVyYXRvcih2YWx1ZSwgZnVuY3Rpb24gKGVyciwgdikge1xuICAgICAgICAgICAgICAgIHJlc3VsdHNbaW5kZXhdID0gdjtcbiAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgIGNhbGxiYWNrKGVyciwgcmVzdWx0cyk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGFzeW5jLm1hcCA9IGRvUGFyYWxsZWwoX2FzeW5jTWFwKTtcbiAgICBhc3luYy5tYXBTZXJpZXMgPSBkb1NlcmllcyhfYXN5bmNNYXApO1xuICAgIGFzeW5jLm1hcExpbWl0ID0gZG9QYXJhbGxlbExpbWl0KF9hc3luY01hcCk7XG5cbiAgICAvLyByZWR1Y2Ugb25seSBoYXMgYSBzZXJpZXMgdmVyc2lvbiwgYXMgZG9pbmcgcmVkdWNlIGluIHBhcmFsbGVsIHdvbid0XG4gICAgLy8gd29yayBpbiBtYW55IHNpdHVhdGlvbnMuXG4gICAgYXN5bmMuaW5qZWN0ID1cbiAgICBhc3luYy5mb2xkbCA9XG4gICAgYXN5bmMucmVkdWNlID0gZnVuY3Rpb24gKGFyciwgbWVtbywgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgIGFzeW5jLmVhY2hPZlNlcmllcyhhcnIsIGZ1bmN0aW9uICh4LCBpLCBjYWxsYmFjaykge1xuICAgICAgICAgICAgaXRlcmF0b3IobWVtbywgeCwgZnVuY3Rpb24gKGVyciwgdikge1xuICAgICAgICAgICAgICAgIG1lbW8gPSB2O1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSwgZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgY2FsbGJhY2soZXJyLCBtZW1vKTtcbiAgICAgICAgfSk7XG4gICAgfTtcblxuICAgIGFzeW5jLmZvbGRyID1cbiAgICBhc3luYy5yZWR1Y2VSaWdodCA9IGZ1bmN0aW9uIChhcnIsIG1lbW8sIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICB2YXIgcmV2ZXJzZWQgPSBfbWFwKGFyciwgaWRlbnRpdHkpLnJldmVyc2UoKTtcbiAgICAgICAgYXN5bmMucmVkdWNlKHJldmVyc2VkLCBtZW1vLCBpdGVyYXRvciwgY2FsbGJhY2spO1xuICAgIH07XG5cbiAgICBhc3luYy50cmFuc2Zvcm0gPSBmdW5jdGlvbiAoYXJyLCBtZW1vLCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDMpIHtcbiAgICAgICAgICAgIGNhbGxiYWNrID0gaXRlcmF0b3I7XG4gICAgICAgICAgICBpdGVyYXRvciA9IG1lbW87XG4gICAgICAgICAgICBtZW1vID0gX2lzQXJyYXkoYXJyKSA/IFtdIDoge307XG4gICAgICAgIH1cblxuICAgICAgICBhc3luYy5lYWNoT2YoYXJyLCBmdW5jdGlvbih2LCBrLCBjYikge1xuICAgICAgICAgICAgaXRlcmF0b3IobWVtbywgdiwgaywgY2IpO1xuICAgICAgICB9LCBmdW5jdGlvbihlcnIpIHtcbiAgICAgICAgICAgIGNhbGxiYWNrKGVyciwgbWVtbyk7XG4gICAgICAgIH0pO1xuICAgIH07XG5cbiAgICBmdW5jdGlvbiBfZmlsdGVyKGVhY2hmbiwgYXJyLCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgdmFyIHJlc3VsdHMgPSBbXTtcbiAgICAgICAgZWFjaGZuKGFyciwgZnVuY3Rpb24gKHgsIGluZGV4LCBjYWxsYmFjaykge1xuICAgICAgICAgICAgaXRlcmF0b3IoeCwgZnVuY3Rpb24gKHYpIHtcbiAgICAgICAgICAgICAgICBpZiAodikge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHRzLnB1c2goe2luZGV4OiBpbmRleCwgdmFsdWU6IHh9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2FsbGJhY2soKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBjYWxsYmFjayhfbWFwKHJlc3VsdHMuc29ydChmdW5jdGlvbiAoYSwgYikge1xuICAgICAgICAgICAgICAgIHJldHVybiBhLmluZGV4IC0gYi5pbmRleDtcbiAgICAgICAgICAgIH0pLCBmdW5jdGlvbiAoeCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB4LnZhbHVlO1xuICAgICAgICAgICAgfSkpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBhc3luYy5zZWxlY3QgPVxuICAgIGFzeW5jLmZpbHRlciA9IGRvUGFyYWxsZWwoX2ZpbHRlcik7XG5cbiAgICBhc3luYy5zZWxlY3RMaW1pdCA9XG4gICAgYXN5bmMuZmlsdGVyTGltaXQgPSBkb1BhcmFsbGVsTGltaXQoX2ZpbHRlcik7XG5cbiAgICBhc3luYy5zZWxlY3RTZXJpZXMgPVxuICAgIGFzeW5jLmZpbHRlclNlcmllcyA9IGRvU2VyaWVzKF9maWx0ZXIpO1xuXG4gICAgZnVuY3Rpb24gX3JlamVjdChlYWNoZm4sIGFyciwgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgIF9maWx0ZXIoZWFjaGZuLCBhcnIsIGZ1bmN0aW9uKHZhbHVlLCBjYikge1xuICAgICAgICAgICAgaXRlcmF0b3IodmFsdWUsIGZ1bmN0aW9uKHYpIHtcbiAgICAgICAgICAgICAgICBjYighdik7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSwgY2FsbGJhY2spO1xuICAgIH1cbiAgICBhc3luYy5yZWplY3QgPSBkb1BhcmFsbGVsKF9yZWplY3QpO1xuICAgIGFzeW5jLnJlamVjdExpbWl0ID0gZG9QYXJhbGxlbExpbWl0KF9yZWplY3QpO1xuICAgIGFzeW5jLnJlamVjdFNlcmllcyA9IGRvU2VyaWVzKF9yZWplY3QpO1xuXG4gICAgZnVuY3Rpb24gX2NyZWF0ZVRlc3RlcihlYWNoZm4sIGNoZWNrLCBnZXRSZXN1bHQpIHtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKGFyciwgbGltaXQsIGl0ZXJhdG9yLCBjYikge1xuICAgICAgICAgICAgZnVuY3Rpb24gZG9uZSgpIHtcbiAgICAgICAgICAgICAgICBpZiAoY2IpIGNiKGdldFJlc3VsdChmYWxzZSwgdm9pZCAwKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmdW5jdGlvbiBpdGVyYXRlZSh4LCBfLCBjYWxsYmFjaykge1xuICAgICAgICAgICAgICAgIGlmICghY2IpIHJldHVybiBjYWxsYmFjaygpO1xuICAgICAgICAgICAgICAgIGl0ZXJhdG9yKHgsIGZ1bmN0aW9uICh2KSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChjYiAmJiBjaGVjayh2KSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY2IoZ2V0UmVzdWx0KHRydWUsIHgpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNiID0gaXRlcmF0b3IgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPiAzKSB7XG4gICAgICAgICAgICAgICAgZWFjaGZuKGFyciwgbGltaXQsIGl0ZXJhdGVlLCBkb25lKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgY2IgPSBpdGVyYXRvcjtcbiAgICAgICAgICAgICAgICBpdGVyYXRvciA9IGxpbWl0O1xuICAgICAgICAgICAgICAgIGVhY2hmbihhcnIsIGl0ZXJhdGVlLCBkb25lKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBhc3luYy5hbnkgPVxuICAgIGFzeW5jLnNvbWUgPSBfY3JlYXRlVGVzdGVyKGFzeW5jLmVhY2hPZiwgdG9Cb29sLCBpZGVudGl0eSk7XG5cbiAgICBhc3luYy5zb21lTGltaXQgPSBfY3JlYXRlVGVzdGVyKGFzeW5jLmVhY2hPZkxpbWl0LCB0b0Jvb2wsIGlkZW50aXR5KTtcblxuICAgIGFzeW5jLmFsbCA9XG4gICAgYXN5bmMuZXZlcnkgPSBfY3JlYXRlVGVzdGVyKGFzeW5jLmVhY2hPZiwgbm90SWQsIG5vdElkKTtcblxuICAgIGFzeW5jLmV2ZXJ5TGltaXQgPSBfY3JlYXRlVGVzdGVyKGFzeW5jLmVhY2hPZkxpbWl0LCBub3RJZCwgbm90SWQpO1xuXG4gICAgZnVuY3Rpb24gX2ZpbmRHZXRSZXN1bHQodiwgeCkge1xuICAgICAgICByZXR1cm4geDtcbiAgICB9XG4gICAgYXN5bmMuZGV0ZWN0ID0gX2NyZWF0ZVRlc3Rlcihhc3luYy5lYWNoT2YsIGlkZW50aXR5LCBfZmluZEdldFJlc3VsdCk7XG4gICAgYXN5bmMuZGV0ZWN0U2VyaWVzID0gX2NyZWF0ZVRlc3Rlcihhc3luYy5lYWNoT2ZTZXJpZXMsIGlkZW50aXR5LCBfZmluZEdldFJlc3VsdCk7XG4gICAgYXN5bmMuZGV0ZWN0TGltaXQgPSBfY3JlYXRlVGVzdGVyKGFzeW5jLmVhY2hPZkxpbWl0LCBpZGVudGl0eSwgX2ZpbmRHZXRSZXN1bHQpO1xuXG4gICAgYXN5bmMuc29ydEJ5ID0gZnVuY3Rpb24gKGFyciwgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgIGFzeW5jLm1hcChhcnIsIGZ1bmN0aW9uICh4LCBjYWxsYmFjaykge1xuICAgICAgICAgICAgaXRlcmF0b3IoeCwgZnVuY3Rpb24gKGVyciwgY3JpdGVyaWEpIHtcbiAgICAgICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhudWxsLCB7dmFsdWU6IHgsIGNyaXRlcmlhOiBjcml0ZXJpYX0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LCBmdW5jdGlvbiAoZXJyLCByZXN1bHRzKSB7XG4gICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBjYWxsYmFjayhudWxsLCBfbWFwKHJlc3VsdHMuc29ydChjb21wYXJhdG9yKSwgZnVuY3Rpb24gKHgpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHgudmFsdWU7XG4gICAgICAgICAgICAgICAgfSkpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGZ1bmN0aW9uIGNvbXBhcmF0b3IobGVmdCwgcmlnaHQpIHtcbiAgICAgICAgICAgIHZhciBhID0gbGVmdC5jcml0ZXJpYSwgYiA9IHJpZ2h0LmNyaXRlcmlhO1xuICAgICAgICAgICAgcmV0dXJuIGEgPCBiID8gLTEgOiBhID4gYiA/IDEgOiAwO1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIGFzeW5jLmF1dG8gPSBmdW5jdGlvbiAodGFza3MsIGNvbmN1cnJlbmN5LCBjYWxsYmFjaykge1xuICAgICAgICBpZiAoIWNhbGxiYWNrKSB7XG4gICAgICAgICAgICAvLyBjb25jdXJyZW5jeSBpcyBvcHRpb25hbCwgc2hpZnQgdGhlIGFyZ3MuXG4gICAgICAgICAgICBjYWxsYmFjayA9IGNvbmN1cnJlbmN5O1xuICAgICAgICAgICAgY29uY3VycmVuY3kgPSBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGNhbGxiYWNrID0gX29uY2UoY2FsbGJhY2sgfHwgbm9vcCk7XG4gICAgICAgIHZhciBrZXlzID0gX2tleXModGFza3MpO1xuICAgICAgICB2YXIgcmVtYWluaW5nVGFza3MgPSBrZXlzLmxlbmd0aDtcbiAgICAgICAgaWYgKCFyZW1haW5pbmdUYXNrcykge1xuICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKG51bGwpO1xuICAgICAgICB9XG4gICAgICAgIGlmICghY29uY3VycmVuY3kpIHtcbiAgICAgICAgICAgIGNvbmN1cnJlbmN5ID0gcmVtYWluaW5nVGFza3M7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgcmVzdWx0cyA9IHt9O1xuICAgICAgICB2YXIgcnVubmluZ1Rhc2tzID0gMDtcblxuICAgICAgICB2YXIgbGlzdGVuZXJzID0gW107XG4gICAgICAgIGZ1bmN0aW9uIGFkZExpc3RlbmVyKGZuKSB7XG4gICAgICAgICAgICBsaXN0ZW5lcnMudW5zaGlmdChmbik7XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gcmVtb3ZlTGlzdGVuZXIoZm4pIHtcbiAgICAgICAgICAgIHZhciBpZHggPSBfaW5kZXhPZihsaXN0ZW5lcnMsIGZuKTtcbiAgICAgICAgICAgIGlmIChpZHggPj0gMCkgbGlzdGVuZXJzLnNwbGljZShpZHgsIDEpO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIHRhc2tDb21wbGV0ZSgpIHtcbiAgICAgICAgICAgIHJlbWFpbmluZ1Rhc2tzLS07XG4gICAgICAgICAgICBfYXJyYXlFYWNoKGxpc3RlbmVycy5zbGljZSgwKSwgZnVuY3Rpb24gKGZuKSB7XG4gICAgICAgICAgICAgICAgZm4oKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgYWRkTGlzdGVuZXIoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgaWYgKCFyZW1haW5pbmdUYXNrcykge1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrKG51bGwsIHJlc3VsdHMpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICBfYXJyYXlFYWNoKGtleXMsIGZ1bmN0aW9uIChrKSB7XG4gICAgICAgICAgICB2YXIgdGFzayA9IF9pc0FycmF5KHRhc2tzW2tdKSA/IHRhc2tzW2tdOiBbdGFza3Nba11dO1xuICAgICAgICAgICAgdmFyIHRhc2tDYWxsYmFjayA9IF9yZXN0UGFyYW0oZnVuY3Rpb24oZXJyLCBhcmdzKSB7XG4gICAgICAgICAgICAgICAgcnVubmluZ1Rhc2tzLS07XG4gICAgICAgICAgICAgICAgaWYgKGFyZ3MubGVuZ3RoIDw9IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgYXJncyA9IGFyZ3NbMF07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHNhZmVSZXN1bHRzID0ge307XG4gICAgICAgICAgICAgICAgICAgIF9mb3JFYWNoT2YocmVzdWx0cywgZnVuY3Rpb24odmFsLCBya2V5KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzYWZlUmVzdWx0c1tya2V5XSA9IHZhbDtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIHNhZmVSZXN1bHRzW2tdID0gYXJncztcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soZXJyLCBzYWZlUmVzdWx0cyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHRzW2tdID0gYXJncztcbiAgICAgICAgICAgICAgICAgICAgYXN5bmMuc2V0SW1tZWRpYXRlKHRhc2tDb21wbGV0ZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB2YXIgcmVxdWlyZXMgPSB0YXNrLnNsaWNlKDAsIHRhc2subGVuZ3RoIC0gMSk7XG4gICAgICAgICAgICAvLyBwcmV2ZW50IGRlYWQtbG9ja3NcbiAgICAgICAgICAgIHZhciBsZW4gPSByZXF1aXJlcy5sZW5ndGg7XG4gICAgICAgICAgICB2YXIgZGVwO1xuICAgICAgICAgICAgd2hpbGUgKGxlbi0tKSB7XG4gICAgICAgICAgICAgICAgaWYgKCEoZGVwID0gdGFza3NbcmVxdWlyZXNbbGVuXV0pKSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignSGFzIGluZXhpc3RhbnQgZGVwZW5kZW5jeScpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoX2lzQXJyYXkoZGVwKSAmJiBfaW5kZXhPZihkZXAsIGspID49IDApIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdIYXMgY3ljbGljIGRlcGVuZGVuY2llcycpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZ1bmN0aW9uIHJlYWR5KCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBydW5uaW5nVGFza3MgPCBjb25jdXJyZW5jeSAmJiBfcmVkdWNlKHJlcXVpcmVzLCBmdW5jdGlvbiAoYSwgeCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gKGEgJiYgcmVzdWx0cy5oYXNPd25Qcm9wZXJ0eSh4KSk7XG4gICAgICAgICAgICAgICAgfSwgdHJ1ZSkgJiYgIXJlc3VsdHMuaGFzT3duUHJvcGVydHkoayk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAocmVhZHkoKSkge1xuICAgICAgICAgICAgICAgIHJ1bm5pbmdUYXNrcysrO1xuICAgICAgICAgICAgICAgIHRhc2tbdGFzay5sZW5ndGggLSAxXSh0YXNrQ2FsbGJhY2ssIHJlc3VsdHMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgYWRkTGlzdGVuZXIobGlzdGVuZXIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZnVuY3Rpb24gbGlzdGVuZXIoKSB7XG4gICAgICAgICAgICAgICAgaWYgKHJlYWR5KCkpIHtcbiAgICAgICAgICAgICAgICAgICAgcnVubmluZ1Rhc2tzKys7XG4gICAgICAgICAgICAgICAgICAgIHJlbW92ZUxpc3RlbmVyKGxpc3RlbmVyKTtcbiAgICAgICAgICAgICAgICAgICAgdGFza1t0YXNrLmxlbmd0aCAtIDFdKHRhc2tDYWxsYmFjaywgcmVzdWx0cyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9O1xuXG5cblxuICAgIGFzeW5jLnJldHJ5ID0gZnVuY3Rpb24odGltZXMsIHRhc2ssIGNhbGxiYWNrKSB7XG4gICAgICAgIHZhciBERUZBVUxUX1RJTUVTID0gNTtcbiAgICAgICAgdmFyIERFRkFVTFRfSU5URVJWQUwgPSAwO1xuXG4gICAgICAgIHZhciBhdHRlbXB0cyA9IFtdO1xuXG4gICAgICAgIHZhciBvcHRzID0ge1xuICAgICAgICAgICAgdGltZXM6IERFRkFVTFRfVElNRVMsXG4gICAgICAgICAgICBpbnRlcnZhbDogREVGQVVMVF9JTlRFUlZBTFxuICAgICAgICB9O1xuXG4gICAgICAgIGZ1bmN0aW9uIHBhcnNlVGltZXMoYWNjLCB0KXtcbiAgICAgICAgICAgIGlmKHR5cGVvZiB0ID09PSAnbnVtYmVyJyl7XG4gICAgICAgICAgICAgICAgYWNjLnRpbWVzID0gcGFyc2VJbnQodCwgMTApIHx8IERFRkFVTFRfVElNRVM7XG4gICAgICAgICAgICB9IGVsc2UgaWYodHlwZW9mIHQgPT09ICdvYmplY3QnKXtcbiAgICAgICAgICAgICAgICBhY2MudGltZXMgPSBwYXJzZUludCh0LnRpbWVzLCAxMCkgfHwgREVGQVVMVF9USU1FUztcbiAgICAgICAgICAgICAgICBhY2MuaW50ZXJ2YWwgPSBwYXJzZUludCh0LmludGVydmFsLCAxMCkgfHwgREVGQVVMVF9JTlRFUlZBTDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdVbnN1cHBvcnRlZCBhcmd1bWVudCB0eXBlIGZvciBcXCd0aW1lc1xcJzogJyArIHR5cGVvZiB0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBsZW5ndGggPSBhcmd1bWVudHMubGVuZ3RoO1xuICAgICAgICBpZiAobGVuZ3RoIDwgMSB8fCBsZW5ndGggPiAzKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgYXJndW1lbnRzIC0gbXVzdCBiZSBlaXRoZXIgKHRhc2spLCAodGFzaywgY2FsbGJhY2spLCAodGltZXMsIHRhc2spIG9yICh0aW1lcywgdGFzaywgY2FsbGJhY2spJyk7XG4gICAgICAgIH0gZWxzZSBpZiAobGVuZ3RoIDw9IDIgJiYgdHlwZW9mIHRpbWVzID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICBjYWxsYmFjayA9IHRhc2s7XG4gICAgICAgICAgICB0YXNrID0gdGltZXM7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHR5cGVvZiB0aW1lcyAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgcGFyc2VUaW1lcyhvcHRzLCB0aW1lcyk7XG4gICAgICAgIH1cbiAgICAgICAgb3B0cy5jYWxsYmFjayA9IGNhbGxiYWNrO1xuICAgICAgICBvcHRzLnRhc2sgPSB0YXNrO1xuXG4gICAgICAgIGZ1bmN0aW9uIHdyYXBwZWRUYXNrKHdyYXBwZWRDYWxsYmFjaywgd3JhcHBlZFJlc3VsdHMpIHtcbiAgICAgICAgICAgIGZ1bmN0aW9uIHJldHJ5QXR0ZW1wdCh0YXNrLCBmaW5hbEF0dGVtcHQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24oc2VyaWVzQ2FsbGJhY2spIHtcbiAgICAgICAgICAgICAgICAgICAgdGFzayhmdW5jdGlvbihlcnIsIHJlc3VsdCl7XG4gICAgICAgICAgICAgICAgICAgICAgICBzZXJpZXNDYWxsYmFjayghZXJyIHx8IGZpbmFsQXR0ZW1wdCwge2VycjogZXJyLCByZXN1bHQ6IHJlc3VsdH0pO1xuICAgICAgICAgICAgICAgICAgICB9LCB3cmFwcGVkUmVzdWx0cyk7XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZnVuY3Rpb24gcmV0cnlJbnRlcnZhbChpbnRlcnZhbCl7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKHNlcmllc0NhbGxiYWNrKXtcbiAgICAgICAgICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpe1xuICAgICAgICAgICAgICAgICAgICAgICAgc2VyaWVzQ2FsbGJhY2sobnVsbCk7XG4gICAgICAgICAgICAgICAgICAgIH0sIGludGVydmFsKTtcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB3aGlsZSAob3B0cy50aW1lcykge1xuXG4gICAgICAgICAgICAgICAgdmFyIGZpbmFsQXR0ZW1wdCA9ICEob3B0cy50aW1lcy09MSk7XG4gICAgICAgICAgICAgICAgYXR0ZW1wdHMucHVzaChyZXRyeUF0dGVtcHQob3B0cy50YXNrLCBmaW5hbEF0dGVtcHQpKTtcbiAgICAgICAgICAgICAgICBpZighZmluYWxBdHRlbXB0ICYmIG9wdHMuaW50ZXJ2YWwgPiAwKXtcbiAgICAgICAgICAgICAgICAgICAgYXR0ZW1wdHMucHVzaChyZXRyeUludGVydmFsKG9wdHMuaW50ZXJ2YWwpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGFzeW5jLnNlcmllcyhhdHRlbXB0cywgZnVuY3Rpb24oZG9uZSwgZGF0YSl7XG4gICAgICAgICAgICAgICAgZGF0YSA9IGRhdGFbZGF0YS5sZW5ndGggLSAxXTtcbiAgICAgICAgICAgICAgICAod3JhcHBlZENhbGxiYWNrIHx8IG9wdHMuY2FsbGJhY2spKGRhdGEuZXJyLCBkYXRhLnJlc3VsdCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIElmIGEgY2FsbGJhY2sgaXMgcGFzc2VkLCBydW4gdGhpcyBhcyBhIGNvbnRyb2xsIGZsb3dcbiAgICAgICAgcmV0dXJuIG9wdHMuY2FsbGJhY2sgPyB3cmFwcGVkVGFzaygpIDogd3JhcHBlZFRhc2s7XG4gICAgfTtcblxuICAgIGFzeW5jLndhdGVyZmFsbCA9IGZ1bmN0aW9uICh0YXNrcywgY2FsbGJhY2spIHtcbiAgICAgICAgY2FsbGJhY2sgPSBfb25jZShjYWxsYmFjayB8fCBub29wKTtcbiAgICAgICAgaWYgKCFfaXNBcnJheSh0YXNrcykpIHtcbiAgICAgICAgICAgIHZhciBlcnIgPSBuZXcgRXJyb3IoJ0ZpcnN0IGFyZ3VtZW50IHRvIHdhdGVyZmFsbCBtdXN0IGJlIGFuIGFycmF5IG9mIGZ1bmN0aW9ucycpO1xuICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKGVycik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCF0YXNrcy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHJldHVybiBjYWxsYmFjaygpO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIHdyYXBJdGVyYXRvcihpdGVyYXRvcikge1xuICAgICAgICAgICAgcmV0dXJuIF9yZXN0UGFyYW0oZnVuY3Rpb24gKGVyciwgYXJncykge1xuICAgICAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2suYXBwbHkobnVsbCwgW2Vycl0uY29uY2F0KGFyZ3MpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBuZXh0ID0gaXRlcmF0b3IubmV4dCgpO1xuICAgICAgICAgICAgICAgICAgICBpZiAobmV4dCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgYXJncy5wdXNoKHdyYXBJdGVyYXRvcihuZXh0KSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhcmdzLnB1c2goY2FsbGJhY2spO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVuc3VyZUFzeW5jKGl0ZXJhdG9yKS5hcHBseShudWxsLCBhcmdzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICB3cmFwSXRlcmF0b3IoYXN5bmMuaXRlcmF0b3IodGFza3MpKSgpO1xuICAgIH07XG5cbiAgICBmdW5jdGlvbiBfcGFyYWxsZWwoZWFjaGZuLCB0YXNrcywgY2FsbGJhY2spIHtcbiAgICAgICAgY2FsbGJhY2sgPSBjYWxsYmFjayB8fCBub29wO1xuICAgICAgICB2YXIgcmVzdWx0cyA9IF9pc0FycmF5TGlrZSh0YXNrcykgPyBbXSA6IHt9O1xuXG4gICAgICAgIGVhY2hmbih0YXNrcywgZnVuY3Rpb24gKHRhc2ssIGtleSwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIHRhc2soX3Jlc3RQYXJhbShmdW5jdGlvbiAoZXJyLCBhcmdzKSB7XG4gICAgICAgICAgICAgICAgaWYgKGFyZ3MubGVuZ3RoIDw9IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgYXJncyA9IGFyZ3NbMF07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJlc3VsdHNba2V5XSA9IGFyZ3M7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgfSwgZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgY2FsbGJhY2soZXJyLCByZXN1bHRzKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgYXN5bmMucGFyYWxsZWwgPSBmdW5jdGlvbiAodGFza3MsIGNhbGxiYWNrKSB7XG4gICAgICAgIF9wYXJhbGxlbChhc3luYy5lYWNoT2YsIHRhc2tzLCBjYWxsYmFjayk7XG4gICAgfTtcblxuICAgIGFzeW5jLnBhcmFsbGVsTGltaXQgPSBmdW5jdGlvbih0YXNrcywgbGltaXQsIGNhbGxiYWNrKSB7XG4gICAgICAgIF9wYXJhbGxlbChfZWFjaE9mTGltaXQobGltaXQpLCB0YXNrcywgY2FsbGJhY2spO1xuICAgIH07XG5cbiAgICBhc3luYy5zZXJpZXMgPSBmdW5jdGlvbih0YXNrcywgY2FsbGJhY2spIHtcbiAgICAgICAgX3BhcmFsbGVsKGFzeW5jLmVhY2hPZlNlcmllcywgdGFza3MsIGNhbGxiYWNrKTtcbiAgICB9O1xuXG4gICAgYXN5bmMuaXRlcmF0b3IgPSBmdW5jdGlvbiAodGFza3MpIHtcbiAgICAgICAgZnVuY3Rpb24gbWFrZUNhbGxiYWNrKGluZGV4KSB7XG4gICAgICAgICAgICBmdW5jdGlvbiBmbigpIHtcbiAgICAgICAgICAgICAgICBpZiAodGFza3MubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgIHRhc2tzW2luZGV4XS5hcHBseShudWxsLCBhcmd1bWVudHMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gZm4ubmV4dCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZm4ubmV4dCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gKGluZGV4IDwgdGFza3MubGVuZ3RoIC0gMSkgPyBtYWtlQ2FsbGJhY2soaW5kZXggKyAxKTogbnVsbDtcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICByZXR1cm4gZm47XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG1ha2VDYWxsYmFjaygwKTtcbiAgICB9O1xuXG4gICAgYXN5bmMuYXBwbHkgPSBfcmVzdFBhcmFtKGZ1bmN0aW9uIChmbiwgYXJncykge1xuICAgICAgICByZXR1cm4gX3Jlc3RQYXJhbShmdW5jdGlvbiAoY2FsbEFyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybiBmbi5hcHBseShcbiAgICAgICAgICAgICAgICBudWxsLCBhcmdzLmNvbmNhdChjYWxsQXJncylcbiAgICAgICAgICAgICk7XG4gICAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgZnVuY3Rpb24gX2NvbmNhdChlYWNoZm4sIGFyciwgZm4sIGNhbGxiYWNrKSB7XG4gICAgICAgIHZhciByZXN1bHQgPSBbXTtcbiAgICAgICAgZWFjaGZuKGFyciwgZnVuY3Rpb24gKHgsIGluZGV4LCBjYikge1xuICAgICAgICAgICAgZm4oeCwgZnVuY3Rpb24gKGVyciwgeSkge1xuICAgICAgICAgICAgICAgIHJlc3VsdCA9IHJlc3VsdC5jb25jYXQoeSB8fCBbXSk7XG4gICAgICAgICAgICAgICAgY2IoZXJyKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICBjYWxsYmFjayhlcnIsIHJlc3VsdCk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBhc3luYy5jb25jYXQgPSBkb1BhcmFsbGVsKF9jb25jYXQpO1xuICAgIGFzeW5jLmNvbmNhdFNlcmllcyA9IGRvU2VyaWVzKF9jb25jYXQpO1xuXG4gICAgYXN5bmMud2hpbHN0ID0gZnVuY3Rpb24gKHRlc3QsIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICBjYWxsYmFjayA9IGNhbGxiYWNrIHx8IG5vb3A7XG4gICAgICAgIGlmICh0ZXN0KCkpIHtcbiAgICAgICAgICAgIHZhciBuZXh0ID0gX3Jlc3RQYXJhbShmdW5jdGlvbihlcnIsIGFyZ3MpIHtcbiAgICAgICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0ZXN0LmFwcGx5KHRoaXMsIGFyZ3MpKSB7XG4gICAgICAgICAgICAgICAgICAgIGl0ZXJhdG9yKG5leHQpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKG51bGwpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgaXRlcmF0b3IobmV4dCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjYWxsYmFjayhudWxsKTtcbiAgICAgICAgfVxuICAgIH07XG5cbiAgICBhc3luYy5kb1doaWxzdCA9IGZ1bmN0aW9uIChpdGVyYXRvciwgdGVzdCwgY2FsbGJhY2spIHtcbiAgICAgICAgdmFyIGNhbGxzID0gMDtcbiAgICAgICAgcmV0dXJuIGFzeW5jLndoaWxzdChmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIHJldHVybiArK2NhbGxzIDw9IDEgfHwgdGVzdC5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgICAgICB9LCBpdGVyYXRvciwgY2FsbGJhY2spO1xuICAgIH07XG5cbiAgICBhc3luYy51bnRpbCA9IGZ1bmN0aW9uICh0ZXN0LCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgcmV0dXJuIGFzeW5jLndoaWxzdChmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIHJldHVybiAhdGVzdC5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgICAgICB9LCBpdGVyYXRvciwgY2FsbGJhY2spO1xuICAgIH07XG5cbiAgICBhc3luYy5kb1VudGlsID0gZnVuY3Rpb24gKGl0ZXJhdG9yLCB0ZXN0LCBjYWxsYmFjaykge1xuICAgICAgICByZXR1cm4gYXN5bmMuZG9XaGlsc3QoaXRlcmF0b3IsIGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgcmV0dXJuICF0ZXN0LmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgICAgIH0sIGNhbGxiYWNrKTtcbiAgICB9O1xuXG4gICAgYXN5bmMuZHVyaW5nID0gZnVuY3Rpb24gKHRlc3QsIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICBjYWxsYmFjayA9IGNhbGxiYWNrIHx8IG5vb3A7XG5cbiAgICAgICAgdmFyIG5leHQgPSBfcmVzdFBhcmFtKGZ1bmN0aW9uKGVyciwgYXJncykge1xuICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGFyZ3MucHVzaChjaGVjayk7XG4gICAgICAgICAgICAgICAgdGVzdC5hcHBseSh0aGlzLCBhcmdzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgdmFyIGNoZWNrID0gZnVuY3Rpb24oZXJyLCB0cnV0aCkge1xuICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHRydXRoKSB7XG4gICAgICAgICAgICAgICAgaXRlcmF0b3IobmV4dCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrKG51bGwpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuXG4gICAgICAgIHRlc3QoY2hlY2spO1xuICAgIH07XG5cbiAgICBhc3luYy5kb0R1cmluZyA9IGZ1bmN0aW9uIChpdGVyYXRvciwgdGVzdCwgY2FsbGJhY2spIHtcbiAgICAgICAgdmFyIGNhbGxzID0gMDtcbiAgICAgICAgYXN5bmMuZHVyaW5nKGZ1bmN0aW9uKG5leHQpIHtcbiAgICAgICAgICAgIGlmIChjYWxscysrIDwgMSkge1xuICAgICAgICAgICAgICAgIG5leHQobnVsbCwgdHJ1ZSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRlc3QuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSwgaXRlcmF0b3IsIGNhbGxiYWNrKTtcbiAgICB9O1xuXG4gICAgZnVuY3Rpb24gX3F1ZXVlKHdvcmtlciwgY29uY3VycmVuY3ksIHBheWxvYWQpIHtcbiAgICAgICAgaWYgKGNvbmN1cnJlbmN5ID09IG51bGwpIHtcbiAgICAgICAgICAgIGNvbmN1cnJlbmN5ID0gMTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmKGNvbmN1cnJlbmN5ID09PSAwKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0NvbmN1cnJlbmN5IG11c3Qgbm90IGJlIHplcm8nKTtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBfaW5zZXJ0KHEsIGRhdGEsIHBvcywgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIGlmIChjYWxsYmFjayAhPSBudWxsICYmIHR5cGVvZiBjYWxsYmFjayAhPT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwidGFzayBjYWxsYmFjayBtdXN0IGJlIGEgZnVuY3Rpb25cIik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBxLnN0YXJ0ZWQgPSB0cnVlO1xuICAgICAgICAgICAgaWYgKCFfaXNBcnJheShkYXRhKSkge1xuICAgICAgICAgICAgICAgIGRhdGEgPSBbZGF0YV07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZihkYXRhLmxlbmd0aCA9PT0gMCAmJiBxLmlkbGUoKSkge1xuICAgICAgICAgICAgICAgIC8vIGNhbGwgZHJhaW4gaW1tZWRpYXRlbHkgaWYgdGhlcmUgYXJlIG5vIHRhc2tzXG4gICAgICAgICAgICAgICAgcmV0dXJuIGFzeW5jLnNldEltbWVkaWF0ZShmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgICAgcS5kcmFpbigpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgX2FycmF5RWFjaChkYXRhLCBmdW5jdGlvbih0YXNrKSB7XG4gICAgICAgICAgICAgICAgdmFyIGl0ZW0gPSB7XG4gICAgICAgICAgICAgICAgICAgIGRhdGE6IHRhc2ssXG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrOiBjYWxsYmFjayB8fCBub29wXG4gICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgIGlmIChwb3MpIHtcbiAgICAgICAgICAgICAgICAgICAgcS50YXNrcy51bnNoaWZ0KGl0ZW0pO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHEudGFza3MucHVzaChpdGVtKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAocS50YXNrcy5sZW5ndGggPT09IHEuY29uY3VycmVuY3kpIHtcbiAgICAgICAgICAgICAgICAgICAgcS5zYXR1cmF0ZWQoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGFzeW5jLnNldEltbWVkaWF0ZShxLnByb2Nlc3MpO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIF9uZXh0KHEsIHRhc2tzKSB7XG4gICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24oKXtcbiAgICAgICAgICAgICAgICB3b3JrZXJzIC09IDE7XG5cbiAgICAgICAgICAgICAgICB2YXIgcmVtb3ZlZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHZhciBhcmdzID0gYXJndW1lbnRzO1xuICAgICAgICAgICAgICAgIF9hcnJheUVhY2godGFza3MsIGZ1bmN0aW9uICh0YXNrKSB7XG4gICAgICAgICAgICAgICAgICAgIF9hcnJheUVhY2god29ya2Vyc0xpc3QsIGZ1bmN0aW9uICh3b3JrZXIsIGluZGV4KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAod29ya2VyID09PSB0YXNrICYmICFyZW1vdmVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd29ya2Vyc0xpc3Quc3BsaWNlKGluZGV4LCAxKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZW1vdmVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICAgICAgdGFzay5jYWxsYmFjay5hcHBseSh0YXNrLCBhcmdzKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBpZiAocS50YXNrcy5sZW5ndGggKyB3b3JrZXJzID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIHEuZHJhaW4oKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcS5wcm9jZXNzKCk7XG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIHdvcmtlcnMgPSAwO1xuICAgICAgICB2YXIgd29ya2Vyc0xpc3QgPSBbXTtcbiAgICAgICAgdmFyIHEgPSB7XG4gICAgICAgICAgICB0YXNrczogW10sXG4gICAgICAgICAgICBjb25jdXJyZW5jeTogY29uY3VycmVuY3ksXG4gICAgICAgICAgICBwYXlsb2FkOiBwYXlsb2FkLFxuICAgICAgICAgICAgc2F0dXJhdGVkOiBub29wLFxuICAgICAgICAgICAgZW1wdHk6IG5vb3AsXG4gICAgICAgICAgICBkcmFpbjogbm9vcCxcbiAgICAgICAgICAgIHN0YXJ0ZWQ6IGZhbHNlLFxuICAgICAgICAgICAgcGF1c2VkOiBmYWxzZSxcbiAgICAgICAgICAgIHB1c2g6IGZ1bmN0aW9uIChkYXRhLCBjYWxsYmFjaykge1xuICAgICAgICAgICAgICAgIF9pbnNlcnQocSwgZGF0YSwgZmFsc2UsIGNhbGxiYWNrKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBraWxsOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgcS5kcmFpbiA9IG5vb3A7XG4gICAgICAgICAgICAgICAgcS50YXNrcyA9IFtdO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHVuc2hpZnQ6IGZ1bmN0aW9uIChkYXRhLCBjYWxsYmFjaykge1xuICAgICAgICAgICAgICAgIF9pbnNlcnQocSwgZGF0YSwgdHJ1ZSwgY2FsbGJhY2spO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHByb2Nlc3M6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBpZiAoIXEucGF1c2VkICYmIHdvcmtlcnMgPCBxLmNvbmN1cnJlbmN5ICYmIHEudGFza3MubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgIHdoaWxlKHdvcmtlcnMgPCBxLmNvbmN1cnJlbmN5ICYmIHEudGFza3MubGVuZ3RoKXtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0YXNrcyA9IHEucGF5bG9hZCA/XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcS50YXNrcy5zcGxpY2UoMCwgcS5wYXlsb2FkKSA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcS50YXNrcy5zcGxpY2UoMCwgcS50YXNrcy5sZW5ndGgpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgZGF0YSA9IF9tYXAodGFza3MsIGZ1bmN0aW9uICh0YXNrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRhc2suZGF0YTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocS50YXNrcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBxLmVtcHR5KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB3b3JrZXJzICs9IDE7XG4gICAgICAgICAgICAgICAgICAgICAgICB3b3JrZXJzTGlzdC5wdXNoKHRhc2tzWzBdKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjYiA9IG9ubHlfb25jZShfbmV4dChxLCB0YXNrcykpO1xuICAgICAgICAgICAgICAgICAgICAgICAgd29ya2VyKGRhdGEsIGNiKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBsZW5ndGg6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcS50YXNrcy5sZW5ndGg7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcnVubmluZzogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB3b3JrZXJzO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHdvcmtlcnNMaXN0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHdvcmtlcnNMaXN0O1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGlkbGU6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBxLnRhc2tzLmxlbmd0aCArIHdvcmtlcnMgPT09IDA7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcGF1c2U6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBxLnBhdXNlZCA9IHRydWU7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcmVzdW1lOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgaWYgKHEucGF1c2VkID09PSBmYWxzZSkgeyByZXR1cm47IH1cbiAgICAgICAgICAgICAgICBxLnBhdXNlZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHZhciByZXN1bWVDb3VudCA9IE1hdGgubWluKHEuY29uY3VycmVuY3ksIHEudGFza3MubGVuZ3RoKTtcbiAgICAgICAgICAgICAgICAvLyBOZWVkIHRvIGNhbGwgcS5wcm9jZXNzIG9uY2UgcGVyIGNvbmN1cnJlbnRcbiAgICAgICAgICAgICAgICAvLyB3b3JrZXIgdG8gcHJlc2VydmUgZnVsbCBjb25jdXJyZW5jeSBhZnRlciBwYXVzZVxuICAgICAgICAgICAgICAgIGZvciAodmFyIHcgPSAxOyB3IDw9IHJlc3VtZUNvdW50OyB3KyspIHtcbiAgICAgICAgICAgICAgICAgICAgYXN5bmMuc2V0SW1tZWRpYXRlKHEucHJvY2Vzcyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gcTtcbiAgICB9XG5cbiAgICBhc3luYy5xdWV1ZSA9IGZ1bmN0aW9uICh3b3JrZXIsIGNvbmN1cnJlbmN5KSB7XG4gICAgICAgIHZhciBxID0gX3F1ZXVlKGZ1bmN0aW9uIChpdGVtcywgY2IpIHtcbiAgICAgICAgICAgIHdvcmtlcihpdGVtc1swXSwgY2IpO1xuICAgICAgICB9LCBjb25jdXJyZW5jeSwgMSk7XG5cbiAgICAgICAgcmV0dXJuIHE7XG4gICAgfTtcblxuICAgIGFzeW5jLnByaW9yaXR5UXVldWUgPSBmdW5jdGlvbiAod29ya2VyLCBjb25jdXJyZW5jeSkge1xuXG4gICAgICAgIGZ1bmN0aW9uIF9jb21wYXJlVGFza3MoYSwgYil7XG4gICAgICAgICAgICByZXR1cm4gYS5wcmlvcml0eSAtIGIucHJpb3JpdHk7XG4gICAgICAgIH1cblxuICAgICAgICBmdW5jdGlvbiBfYmluYXJ5U2VhcmNoKHNlcXVlbmNlLCBpdGVtLCBjb21wYXJlKSB7XG4gICAgICAgICAgICB2YXIgYmVnID0gLTEsXG4gICAgICAgICAgICAgICAgZW5kID0gc2VxdWVuY2UubGVuZ3RoIC0gMTtcbiAgICAgICAgICAgIHdoaWxlIChiZWcgPCBlbmQpIHtcbiAgICAgICAgICAgICAgICB2YXIgbWlkID0gYmVnICsgKChlbmQgLSBiZWcgKyAxKSA+Pj4gMSk7XG4gICAgICAgICAgICAgICAgaWYgKGNvbXBhcmUoaXRlbSwgc2VxdWVuY2VbbWlkXSkgPj0gMCkge1xuICAgICAgICAgICAgICAgICAgICBiZWcgPSBtaWQ7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgZW5kID0gbWlkIC0gMTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gYmVnO1xuICAgICAgICB9XG5cbiAgICAgICAgZnVuY3Rpb24gX2luc2VydChxLCBkYXRhLCBwcmlvcml0eSwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIGlmIChjYWxsYmFjayAhPSBudWxsICYmIHR5cGVvZiBjYWxsYmFjayAhPT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwidGFzayBjYWxsYmFjayBtdXN0IGJlIGEgZnVuY3Rpb25cIik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBxLnN0YXJ0ZWQgPSB0cnVlO1xuICAgICAgICAgICAgaWYgKCFfaXNBcnJheShkYXRhKSkge1xuICAgICAgICAgICAgICAgIGRhdGEgPSBbZGF0YV07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZihkYXRhLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICAgIC8vIGNhbGwgZHJhaW4gaW1tZWRpYXRlbHkgaWYgdGhlcmUgYXJlIG5vIHRhc2tzXG4gICAgICAgICAgICAgICAgcmV0dXJuIGFzeW5jLnNldEltbWVkaWF0ZShmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgICAgcS5kcmFpbigpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgX2FycmF5RWFjaChkYXRhLCBmdW5jdGlvbih0YXNrKSB7XG4gICAgICAgICAgICAgICAgdmFyIGl0ZW0gPSB7XG4gICAgICAgICAgICAgICAgICAgIGRhdGE6IHRhc2ssXG4gICAgICAgICAgICAgICAgICAgIHByaW9yaXR5OiBwcmlvcml0eSxcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2s6IHR5cGVvZiBjYWxsYmFjayA9PT0gJ2Z1bmN0aW9uJyA/IGNhbGxiYWNrIDogbm9vcFxuICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICBxLnRhc2tzLnNwbGljZShfYmluYXJ5U2VhcmNoKHEudGFza3MsIGl0ZW0sIF9jb21wYXJlVGFza3MpICsgMSwgMCwgaXRlbSk7XG5cbiAgICAgICAgICAgICAgICBpZiAocS50YXNrcy5sZW5ndGggPT09IHEuY29uY3VycmVuY3kpIHtcbiAgICAgICAgICAgICAgICAgICAgcS5zYXR1cmF0ZWQoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYXN5bmMuc2V0SW1tZWRpYXRlKHEucHJvY2Vzcyk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFN0YXJ0IHdpdGggYSBub3JtYWwgcXVldWVcbiAgICAgICAgdmFyIHEgPSBhc3luYy5xdWV1ZSh3b3JrZXIsIGNvbmN1cnJlbmN5KTtcblxuICAgICAgICAvLyBPdmVycmlkZSBwdXNoIHRvIGFjY2VwdCBzZWNvbmQgcGFyYW1ldGVyIHJlcHJlc2VudGluZyBwcmlvcml0eVxuICAgICAgICBxLnB1c2ggPSBmdW5jdGlvbiAoZGF0YSwgcHJpb3JpdHksIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICBfaW5zZXJ0KHEsIGRhdGEsIHByaW9yaXR5LCBjYWxsYmFjayk7XG4gICAgICAgIH07XG5cbiAgICAgICAgLy8gUmVtb3ZlIHVuc2hpZnQgZnVuY3Rpb25cbiAgICAgICAgZGVsZXRlIHEudW5zaGlmdDtcblxuICAgICAgICByZXR1cm4gcTtcbiAgICB9O1xuXG4gICAgYXN5bmMuY2FyZ28gPSBmdW5jdGlvbiAod29ya2VyLCBwYXlsb2FkKSB7XG4gICAgICAgIHJldHVybiBfcXVldWUod29ya2VyLCAxLCBwYXlsb2FkKTtcbiAgICB9O1xuXG4gICAgZnVuY3Rpb24gX2NvbnNvbGVfZm4obmFtZSkge1xuICAgICAgICByZXR1cm4gX3Jlc3RQYXJhbShmdW5jdGlvbiAoZm4sIGFyZ3MpIHtcbiAgICAgICAgICAgIGZuLmFwcGx5KG51bGwsIGFyZ3MuY29uY2F0KFtfcmVzdFBhcmFtKGZ1bmN0aW9uIChlcnIsIGFyZ3MpIHtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGNvbnNvbGUgPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb25zb2xlLmVycm9yKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihlcnIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKGNvbnNvbGVbbmFtZV0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIF9hcnJheUVhY2goYXJncywgZnVuY3Rpb24gKHgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlW25hbWVdKHgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KV0pKTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGFzeW5jLmxvZyA9IF9jb25zb2xlX2ZuKCdsb2cnKTtcbiAgICBhc3luYy5kaXIgPSBfY29uc29sZV9mbignZGlyJyk7XG4gICAgLyphc3luYy5pbmZvID0gX2NvbnNvbGVfZm4oJ2luZm8nKTtcbiAgICBhc3luYy53YXJuID0gX2NvbnNvbGVfZm4oJ3dhcm4nKTtcbiAgICBhc3luYy5lcnJvciA9IF9jb25zb2xlX2ZuKCdlcnJvcicpOyovXG5cbiAgICBhc3luYy5tZW1vaXplID0gZnVuY3Rpb24gKGZuLCBoYXNoZXIpIHtcbiAgICAgICAgdmFyIG1lbW8gPSB7fTtcbiAgICAgICAgdmFyIHF1ZXVlcyA9IHt9O1xuICAgICAgICBoYXNoZXIgPSBoYXNoZXIgfHwgaWRlbnRpdHk7XG4gICAgICAgIHZhciBtZW1vaXplZCA9IF9yZXN0UGFyYW0oZnVuY3Rpb24gbWVtb2l6ZWQoYXJncykge1xuICAgICAgICAgICAgdmFyIGNhbGxiYWNrID0gYXJncy5wb3AoKTtcbiAgICAgICAgICAgIHZhciBrZXkgPSBoYXNoZXIuYXBwbHkobnVsbCwgYXJncyk7XG4gICAgICAgICAgICBpZiAoa2V5IGluIG1lbW8pIHtcbiAgICAgICAgICAgICAgICBhc3luYy5zZXRJbW1lZGlhdGUoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjay5hcHBseShudWxsLCBtZW1vW2tleV0pO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoa2V5IGluIHF1ZXVlcykge1xuICAgICAgICAgICAgICAgIHF1ZXVlc1trZXldLnB1c2goY2FsbGJhY2spO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgcXVldWVzW2tleV0gPSBbY2FsbGJhY2tdO1xuICAgICAgICAgICAgICAgIGZuLmFwcGx5KG51bGwsIGFyZ3MuY29uY2F0KFtfcmVzdFBhcmFtKGZ1bmN0aW9uIChhcmdzKSB7XG4gICAgICAgICAgICAgICAgICAgIG1lbW9ba2V5XSA9IGFyZ3M7XG4gICAgICAgICAgICAgICAgICAgIHZhciBxID0gcXVldWVzW2tleV07XG4gICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBxdWV1ZXNba2V5XTtcbiAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDAsIGwgPSBxLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgcVtpXS5hcHBseShudWxsLCBhcmdzKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pXSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgbWVtb2l6ZWQubWVtbyA9IG1lbW87XG4gICAgICAgIG1lbW9pemVkLnVubWVtb2l6ZWQgPSBmbjtcbiAgICAgICAgcmV0dXJuIG1lbW9pemVkO1xuICAgIH07XG5cbiAgICBhc3luYy51bm1lbW9pemUgPSBmdW5jdGlvbiAoZm4pIHtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiAoZm4udW5tZW1vaXplZCB8fCBmbikuYXBwbHkobnVsbCwgYXJndW1lbnRzKTtcbiAgICAgICAgfTtcbiAgICB9O1xuXG4gICAgZnVuY3Rpb24gX3RpbWVzKG1hcHBlcikge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKGNvdW50LCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIG1hcHBlcihfcmFuZ2UoY291bnQpLCBpdGVyYXRvciwgY2FsbGJhY2spO1xuICAgICAgICB9O1xuICAgIH1cblxuICAgIGFzeW5jLnRpbWVzID0gX3RpbWVzKGFzeW5jLm1hcCk7XG4gICAgYXN5bmMudGltZXNTZXJpZXMgPSBfdGltZXMoYXN5bmMubWFwU2VyaWVzKTtcbiAgICBhc3luYy50aW1lc0xpbWl0ID0gZnVuY3Rpb24gKGNvdW50LCBsaW1pdCwgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgIHJldHVybiBhc3luYy5tYXBMaW1pdChfcmFuZ2UoY291bnQpLCBsaW1pdCwgaXRlcmF0b3IsIGNhbGxiYWNrKTtcbiAgICB9O1xuXG4gICAgYXN5bmMuc2VxID0gZnVuY3Rpb24gKC8qIGZ1bmN0aW9ucy4uLiAqLykge1xuICAgICAgICB2YXIgZm5zID0gYXJndW1lbnRzO1xuICAgICAgICByZXR1cm4gX3Jlc3RQYXJhbShmdW5jdGlvbiAoYXJncykge1xuICAgICAgICAgICAgdmFyIHRoYXQgPSB0aGlzO1xuXG4gICAgICAgICAgICB2YXIgY2FsbGJhY2sgPSBhcmdzW2FyZ3MubGVuZ3RoIC0gMV07XG4gICAgICAgICAgICBpZiAodHlwZW9mIGNhbGxiYWNrID09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICBhcmdzLnBvcCgpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBjYWxsYmFjayA9IG5vb3A7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGFzeW5jLnJlZHVjZShmbnMsIGFyZ3MsIGZ1bmN0aW9uIChuZXdhcmdzLCBmbiwgY2IpIHtcbiAgICAgICAgICAgICAgICBmbi5hcHBseSh0aGF0LCBuZXdhcmdzLmNvbmNhdChbX3Jlc3RQYXJhbShmdW5jdGlvbiAoZXJyLCBuZXh0YXJncykge1xuICAgICAgICAgICAgICAgICAgICBjYihlcnIsIG5leHRhcmdzKTtcbiAgICAgICAgICAgICAgICB9KV0pKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBmdW5jdGlvbiAoZXJyLCByZXN1bHRzKSB7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2suYXBwbHkodGhhdCwgW2Vycl0uY29uY2F0KHJlc3VsdHMpKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9O1xuXG4gICAgYXN5bmMuY29tcG9zZSA9IGZ1bmN0aW9uICgvKiBmdW5jdGlvbnMuLi4gKi8pIHtcbiAgICAgICAgcmV0dXJuIGFzeW5jLnNlcS5hcHBseShudWxsLCBBcnJheS5wcm90b3R5cGUucmV2ZXJzZS5jYWxsKGFyZ3VtZW50cykpO1xuICAgIH07XG5cblxuICAgIGZ1bmN0aW9uIF9hcHBseUVhY2goZWFjaGZuKSB7XG4gICAgICAgIHJldHVybiBfcmVzdFBhcmFtKGZ1bmN0aW9uKGZucywgYXJncykge1xuICAgICAgICAgICAgdmFyIGdvID0gX3Jlc3RQYXJhbShmdW5jdGlvbihhcmdzKSB7XG4gICAgICAgICAgICAgICAgdmFyIHRoYXQgPSB0aGlzO1xuICAgICAgICAgICAgICAgIHZhciBjYWxsYmFjayA9IGFyZ3MucG9wKCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGVhY2hmbihmbnMsIGZ1bmN0aW9uIChmbiwgXywgY2IpIHtcbiAgICAgICAgICAgICAgICAgICAgZm4uYXBwbHkodGhhdCwgYXJncy5jb25jYXQoW2NiXSkpO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgY2FsbGJhY2spO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBpZiAoYXJncy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZ28uYXBwbHkodGhpcywgYXJncyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZ287XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGFzeW5jLmFwcGx5RWFjaCA9IF9hcHBseUVhY2goYXN5bmMuZWFjaE9mKTtcbiAgICBhc3luYy5hcHBseUVhY2hTZXJpZXMgPSBfYXBwbHlFYWNoKGFzeW5jLmVhY2hPZlNlcmllcyk7XG5cblxuICAgIGFzeW5jLmZvcmV2ZXIgPSBmdW5jdGlvbiAoZm4sIGNhbGxiYWNrKSB7XG4gICAgICAgIHZhciBkb25lID0gb25seV9vbmNlKGNhbGxiYWNrIHx8IG5vb3ApO1xuICAgICAgICB2YXIgdGFzayA9IGVuc3VyZUFzeW5jKGZuKTtcbiAgICAgICAgZnVuY3Rpb24gbmV4dChlcnIpIHtcbiAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZG9uZShlcnIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGFzayhuZXh0KTtcbiAgICAgICAgfVxuICAgICAgICBuZXh0KCk7XG4gICAgfTtcblxuICAgIGZ1bmN0aW9uIGVuc3VyZUFzeW5jKGZuKSB7XG4gICAgICAgIHJldHVybiBfcmVzdFBhcmFtKGZ1bmN0aW9uIChhcmdzKSB7XG4gICAgICAgICAgICB2YXIgY2FsbGJhY2sgPSBhcmdzLnBvcCgpO1xuICAgICAgICAgICAgYXJncy5wdXNoKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICB2YXIgaW5uZXJBcmdzID0gYXJndW1lbnRzO1xuICAgICAgICAgICAgICAgIGlmIChzeW5jKSB7XG4gICAgICAgICAgICAgICAgICAgIGFzeW5jLnNldEltbWVkaWF0ZShmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjYWxsYmFjay5hcHBseShudWxsLCBpbm5lckFyZ3MpO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjay5hcHBseShudWxsLCBpbm5lckFyZ3MpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdmFyIHN5bmMgPSB0cnVlO1xuICAgICAgICAgICAgZm4uYXBwbHkodGhpcywgYXJncyk7XG4gICAgICAgICAgICBzeW5jID0gZmFsc2U7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGFzeW5jLmVuc3VyZUFzeW5jID0gZW5zdXJlQXN5bmM7XG5cbiAgICBhc3luYy5jb25zdGFudCA9IF9yZXN0UGFyYW0oZnVuY3Rpb24odmFsdWVzKSB7XG4gICAgICAgIHZhciBhcmdzID0gW251bGxdLmNvbmNhdCh2YWx1ZXMpO1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKGNhbGxiYWNrKSB7XG4gICAgICAgICAgICByZXR1cm4gY2FsbGJhY2suYXBwbHkodGhpcywgYXJncyk7XG4gICAgICAgIH07XG4gICAgfSk7XG5cbiAgICBhc3luYy53cmFwU3luYyA9XG4gICAgYXN5bmMuYXN5bmNpZnkgPSBmdW5jdGlvbiBhc3luY2lmeShmdW5jKSB7XG4gICAgICAgIHJldHVybiBfcmVzdFBhcmFtKGZ1bmN0aW9uIChhcmdzKSB7XG4gICAgICAgICAgICB2YXIgY2FsbGJhY2sgPSBhcmdzLnBvcCgpO1xuICAgICAgICAgICAgdmFyIHJlc3VsdDtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0ID0gZnVuYy5hcHBseSh0aGlzLCBhcmdzKTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gY2FsbGJhY2soZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBpZiByZXN1bHQgaXMgUHJvbWlzZSBvYmplY3RcbiAgICAgICAgICAgIGlmIChfaXNPYmplY3QocmVzdWx0KSAmJiB0eXBlb2YgcmVzdWx0LnRoZW4gPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICAgICAgICAgIHJlc3VsdC50aGVuKGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKG51bGwsIHZhbHVlKTtcbiAgICAgICAgICAgICAgICB9KVtcImNhdGNoXCJdKGZ1bmN0aW9uKGVycikge1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnIubWVzc2FnZSA/IGVyciA6IG5ldyBFcnJvcihlcnIpKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2sobnVsbCwgcmVzdWx0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfTtcblxuICAgIC8vIE5vZGUuanNcbiAgICBpZiAodHlwZW9mIG1vZHVsZSA9PT0gJ29iamVjdCcgJiYgbW9kdWxlLmV4cG9ydHMpIHtcbiAgICAgICAgbW9kdWxlLmV4cG9ydHMgPSBhc3luYztcbiAgICB9XG4gICAgLy8gQU1EIC8gUmVxdWlyZUpTXG4gICAgZWxzZSBpZiAodHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kKSB7XG4gICAgICAgIGRlZmluZShbXSwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIGFzeW5jO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgLy8gaW5jbHVkZWQgZGlyZWN0bHkgdmlhIDxzY3JpcHQ+IHRhZ1xuICAgIGVsc2Uge1xuICAgICAgICByb290LmFzeW5jID0gYXN5bmM7XG4gICAgfVxuXG59KCkpO1xuIiwiLy8gQ29weXJpZ2h0IEpveWVudCwgSW5jLiBhbmQgb3RoZXIgTm9kZSBjb250cmlidXRvcnMuXG4vL1xuLy8gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGFcbi8vIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGVcbi8vIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZ1xuLy8gd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLFxuLy8gZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdFxuLy8gcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlXG4vLyBmb2xsb3dpbmcgY29uZGl0aW9uczpcbi8vXG4vLyBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZFxuLy8gaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4vL1xuLy8gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTU1xuLy8gT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRlxuLy8gTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTlxuLy8gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sXG4vLyBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1Jcbi8vIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEVcbi8vIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG5cbi8vIHJlc29sdmVzIC4gYW5kIC4uIGVsZW1lbnRzIGluIGEgcGF0aCBhcnJheSB3aXRoIGRpcmVjdG9yeSBuYW1lcyB0aGVyZVxuLy8gbXVzdCBiZSBubyBzbGFzaGVzLCBlbXB0eSBlbGVtZW50cywgb3IgZGV2aWNlIG5hbWVzIChjOlxcKSBpbiB0aGUgYXJyYXlcbi8vIChzbyBhbHNvIG5vIGxlYWRpbmcgYW5kIHRyYWlsaW5nIHNsYXNoZXMgLSBpdCBkb2VzIG5vdCBkaXN0aW5ndWlzaFxuLy8gcmVsYXRpdmUgYW5kIGFic29sdXRlIHBhdGhzKVxuZnVuY3Rpb24gbm9ybWFsaXplQXJyYXkocGFydHMsIGFsbG93QWJvdmVSb290KSB7XG4gIC8vIGlmIHRoZSBwYXRoIHRyaWVzIHRvIGdvIGFib3ZlIHRoZSByb290LCBgdXBgIGVuZHMgdXAgPiAwXG4gIHZhciB1cCA9IDA7XG4gIGZvciAodmFyIGkgPSBwYXJ0cy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgIHZhciBsYXN0ID0gcGFydHNbaV07XG4gICAgaWYgKGxhc3QgPT09ICcuJykge1xuICAgICAgcGFydHMuc3BsaWNlKGksIDEpO1xuICAgIH0gZWxzZSBpZiAobGFzdCA9PT0gJy4uJykge1xuICAgICAgcGFydHMuc3BsaWNlKGksIDEpO1xuICAgICAgdXArKztcbiAgICB9IGVsc2UgaWYgKHVwKSB7XG4gICAgICBwYXJ0cy5zcGxpY2UoaSwgMSk7XG4gICAgICB1cC0tO1xuICAgIH1cbiAgfVxuXG4gIC8vIGlmIHRoZSBwYXRoIGlzIGFsbG93ZWQgdG8gZ28gYWJvdmUgdGhlIHJvb3QsIHJlc3RvcmUgbGVhZGluZyAuLnNcbiAgaWYgKGFsbG93QWJvdmVSb290KSB7XG4gICAgZm9yICg7IHVwLS07IHVwKSB7XG4gICAgICBwYXJ0cy51bnNoaWZ0KCcuLicpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBwYXJ0cztcbn1cblxuLy8gU3BsaXQgYSBmaWxlbmFtZSBpbnRvIFtyb290LCBkaXIsIGJhc2VuYW1lLCBleHRdLCB1bml4IHZlcnNpb25cbi8vICdyb290JyBpcyBqdXN0IGEgc2xhc2gsIG9yIG5vdGhpbmcuXG52YXIgc3BsaXRQYXRoUmUgPVxuICAgIC9eKFxcLz98KShbXFxzXFxTXSo/KSgoPzpcXC57MSwyfXxbXlxcL10rP3wpKFxcLlteLlxcL10qfCkpKD86W1xcL10qKSQvO1xudmFyIHNwbGl0UGF0aCA9IGZ1bmN0aW9uKGZpbGVuYW1lKSB7XG4gIHJldHVybiBzcGxpdFBhdGhSZS5leGVjKGZpbGVuYW1lKS5zbGljZSgxKTtcbn07XG5cbi8vIHBhdGgucmVzb2x2ZShbZnJvbSAuLi5dLCB0bylcbi8vIHBvc2l4IHZlcnNpb25cbmV4cG9ydHMucmVzb2x2ZSA9IGZ1bmN0aW9uKCkge1xuICB2YXIgcmVzb2x2ZWRQYXRoID0gJycsXG4gICAgICByZXNvbHZlZEFic29sdXRlID0gZmFsc2U7XG5cbiAgZm9yICh2YXIgaSA9IGFyZ3VtZW50cy5sZW5ndGggLSAxOyBpID49IC0xICYmICFyZXNvbHZlZEFic29sdXRlOyBpLS0pIHtcbiAgICB2YXIgcGF0aCA9IChpID49IDApID8gYXJndW1lbnRzW2ldIDogcHJvY2Vzcy5jd2QoKTtcblxuICAgIC8vIFNraXAgZW1wdHkgYW5kIGludmFsaWQgZW50cmllc1xuICAgIGlmICh0eXBlb2YgcGF0aCAhPT0gJ3N0cmluZycpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0FyZ3VtZW50cyB0byBwYXRoLnJlc29sdmUgbXVzdCBiZSBzdHJpbmdzJyk7XG4gICAgfSBlbHNlIGlmICghcGF0aCkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgcmVzb2x2ZWRQYXRoID0gcGF0aCArICcvJyArIHJlc29sdmVkUGF0aDtcbiAgICByZXNvbHZlZEFic29sdXRlID0gcGF0aC5jaGFyQXQoMCkgPT09ICcvJztcbiAgfVxuXG4gIC8vIEF0IHRoaXMgcG9pbnQgdGhlIHBhdGggc2hvdWxkIGJlIHJlc29sdmVkIHRvIGEgZnVsbCBhYnNvbHV0ZSBwYXRoLCBidXRcbiAgLy8gaGFuZGxlIHJlbGF0aXZlIHBhdGhzIHRvIGJlIHNhZmUgKG1pZ2h0IGhhcHBlbiB3aGVuIHByb2Nlc3MuY3dkKCkgZmFpbHMpXG5cbiAgLy8gTm9ybWFsaXplIHRoZSBwYXRoXG4gIHJlc29sdmVkUGF0aCA9IG5vcm1hbGl6ZUFycmF5KGZpbHRlcihyZXNvbHZlZFBhdGguc3BsaXQoJy8nKSwgZnVuY3Rpb24ocCkge1xuICAgIHJldHVybiAhIXA7XG4gIH0pLCAhcmVzb2x2ZWRBYnNvbHV0ZSkuam9pbignLycpO1xuXG4gIHJldHVybiAoKHJlc29sdmVkQWJzb2x1dGUgPyAnLycgOiAnJykgKyByZXNvbHZlZFBhdGgpIHx8ICcuJztcbn07XG5cbi8vIHBhdGgubm9ybWFsaXplKHBhdGgpXG4vLyBwb3NpeCB2ZXJzaW9uXG5leHBvcnRzLm5vcm1hbGl6ZSA9IGZ1bmN0aW9uKHBhdGgpIHtcbiAgdmFyIGlzQWJzb2x1dGUgPSBleHBvcnRzLmlzQWJzb2x1dGUocGF0aCksXG4gICAgICB0cmFpbGluZ1NsYXNoID0gc3Vic3RyKHBhdGgsIC0xKSA9PT0gJy8nO1xuXG4gIC8vIE5vcm1hbGl6ZSB0aGUgcGF0aFxuICBwYXRoID0gbm9ybWFsaXplQXJyYXkoZmlsdGVyKHBhdGguc3BsaXQoJy8nKSwgZnVuY3Rpb24ocCkge1xuICAgIHJldHVybiAhIXA7XG4gIH0pLCAhaXNBYnNvbHV0ZSkuam9pbignLycpO1xuXG4gIGlmICghcGF0aCAmJiAhaXNBYnNvbHV0ZSkge1xuICAgIHBhdGggPSAnLic7XG4gIH1cbiAgaWYgKHBhdGggJiYgdHJhaWxpbmdTbGFzaCkge1xuICAgIHBhdGggKz0gJy8nO1xuICB9XG5cbiAgcmV0dXJuIChpc0Fic29sdXRlID8gJy8nIDogJycpICsgcGF0aDtcbn07XG5cbi8vIHBvc2l4IHZlcnNpb25cbmV4cG9ydHMuaXNBYnNvbHV0ZSA9IGZ1bmN0aW9uKHBhdGgpIHtcbiAgcmV0dXJuIHBhdGguY2hhckF0KDApID09PSAnLyc7XG59O1xuXG4vLyBwb3NpeCB2ZXJzaW9uXG5leHBvcnRzLmpvaW4gPSBmdW5jdGlvbigpIHtcbiAgdmFyIHBhdGhzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAwKTtcbiAgcmV0dXJuIGV4cG9ydHMubm9ybWFsaXplKGZpbHRlcihwYXRocywgZnVuY3Rpb24ocCwgaW5kZXgpIHtcbiAgICBpZiAodHlwZW9mIHAgIT09ICdzdHJpbmcnKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdBcmd1bWVudHMgdG8gcGF0aC5qb2luIG11c3QgYmUgc3RyaW5ncycpO1xuICAgIH1cbiAgICByZXR1cm4gcDtcbiAgfSkuam9pbignLycpKTtcbn07XG5cblxuLy8gcGF0aC5yZWxhdGl2ZShmcm9tLCB0bylcbi8vIHBvc2l4IHZlcnNpb25cbmV4cG9ydHMucmVsYXRpdmUgPSBmdW5jdGlvbihmcm9tLCB0bykge1xuICBmcm9tID0gZXhwb3J0cy5yZXNvbHZlKGZyb20pLnN1YnN0cigxKTtcbiAgdG8gPSBleHBvcnRzLnJlc29sdmUodG8pLnN1YnN0cigxKTtcblxuICBmdW5jdGlvbiB0cmltKGFycikge1xuICAgIHZhciBzdGFydCA9IDA7XG4gICAgZm9yICg7IHN0YXJ0IDwgYXJyLmxlbmd0aDsgc3RhcnQrKykge1xuICAgICAgaWYgKGFycltzdGFydF0gIT09ICcnKSBicmVhaztcbiAgICB9XG5cbiAgICB2YXIgZW5kID0gYXJyLmxlbmd0aCAtIDE7XG4gICAgZm9yICg7IGVuZCA+PSAwOyBlbmQtLSkge1xuICAgICAgaWYgKGFycltlbmRdICE9PSAnJykgYnJlYWs7XG4gICAgfVxuXG4gICAgaWYgKHN0YXJ0ID4gZW5kKSByZXR1cm4gW107XG4gICAgcmV0dXJuIGFyci5zbGljZShzdGFydCwgZW5kIC0gc3RhcnQgKyAxKTtcbiAgfVxuXG4gIHZhciBmcm9tUGFydHMgPSB0cmltKGZyb20uc3BsaXQoJy8nKSk7XG4gIHZhciB0b1BhcnRzID0gdHJpbSh0by5zcGxpdCgnLycpKTtcblxuICB2YXIgbGVuZ3RoID0gTWF0aC5taW4oZnJvbVBhcnRzLmxlbmd0aCwgdG9QYXJ0cy5sZW5ndGgpO1xuICB2YXIgc2FtZVBhcnRzTGVuZ3RoID0gbGVuZ3RoO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgaWYgKGZyb21QYXJ0c1tpXSAhPT0gdG9QYXJ0c1tpXSkge1xuICAgICAgc2FtZVBhcnRzTGVuZ3RoID0gaTtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuXG4gIHZhciBvdXRwdXRQYXJ0cyA9IFtdO1xuICBmb3IgKHZhciBpID0gc2FtZVBhcnRzTGVuZ3RoOyBpIDwgZnJvbVBhcnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgb3V0cHV0UGFydHMucHVzaCgnLi4nKTtcbiAgfVxuXG4gIG91dHB1dFBhcnRzID0gb3V0cHV0UGFydHMuY29uY2F0KHRvUGFydHMuc2xpY2Uoc2FtZVBhcnRzTGVuZ3RoKSk7XG5cbiAgcmV0dXJuIG91dHB1dFBhcnRzLmpvaW4oJy8nKTtcbn07XG5cbmV4cG9ydHMuc2VwID0gJy8nO1xuZXhwb3J0cy5kZWxpbWl0ZXIgPSAnOic7XG5cbmV4cG9ydHMuZGlybmFtZSA9IGZ1bmN0aW9uKHBhdGgpIHtcbiAgdmFyIHJlc3VsdCA9IHNwbGl0UGF0aChwYXRoKSxcbiAgICAgIHJvb3QgPSByZXN1bHRbMF0sXG4gICAgICBkaXIgPSByZXN1bHRbMV07XG5cbiAgaWYgKCFyb290ICYmICFkaXIpIHtcbiAgICAvLyBObyBkaXJuYW1lIHdoYXRzb2V2ZXJcbiAgICByZXR1cm4gJy4nO1xuICB9XG5cbiAgaWYgKGRpcikge1xuICAgIC8vIEl0IGhhcyBhIGRpcm5hbWUsIHN0cmlwIHRyYWlsaW5nIHNsYXNoXG4gICAgZGlyID0gZGlyLnN1YnN0cigwLCBkaXIubGVuZ3RoIC0gMSk7XG4gIH1cblxuICByZXR1cm4gcm9vdCArIGRpcjtcbn07XG5cblxuZXhwb3J0cy5iYXNlbmFtZSA9IGZ1bmN0aW9uKHBhdGgsIGV4dCkge1xuICB2YXIgZiA9IHNwbGl0UGF0aChwYXRoKVsyXTtcbiAgLy8gVE9ETzogbWFrZSB0aGlzIGNvbXBhcmlzb24gY2FzZS1pbnNlbnNpdGl2ZSBvbiB3aW5kb3dzP1xuICBpZiAoZXh0ICYmIGYuc3Vic3RyKC0xICogZXh0Lmxlbmd0aCkgPT09IGV4dCkge1xuICAgIGYgPSBmLnN1YnN0cigwLCBmLmxlbmd0aCAtIGV4dC5sZW5ndGgpO1xuICB9XG4gIHJldHVybiBmO1xufTtcblxuXG5leHBvcnRzLmV4dG5hbWUgPSBmdW5jdGlvbihwYXRoKSB7XG4gIHJldHVybiBzcGxpdFBhdGgocGF0aClbM107XG59O1xuXG5mdW5jdGlvbiBmaWx0ZXIgKHhzLCBmKSB7XG4gICAgaWYgKHhzLmZpbHRlcikgcmV0dXJuIHhzLmZpbHRlcihmKTtcbiAgICB2YXIgcmVzID0gW107XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB4cy5sZW5ndGg7IGkrKykge1xuICAgICAgICBpZiAoZih4c1tpXSwgaSwgeHMpKSByZXMucHVzaCh4c1tpXSk7XG4gICAgfVxuICAgIHJldHVybiByZXM7XG59XG5cbi8vIFN0cmluZy5wcm90b3R5cGUuc3Vic3RyIC0gbmVnYXRpdmUgaW5kZXggZG9uJ3Qgd29yayBpbiBJRThcbnZhciBzdWJzdHIgPSAnYWInLnN1YnN0cigtMSkgPT09ICdiJ1xuICAgID8gZnVuY3Rpb24gKHN0ciwgc3RhcnQsIGxlbikgeyByZXR1cm4gc3RyLnN1YnN0cihzdGFydCwgbGVuKSB9XG4gICAgOiBmdW5jdGlvbiAoc3RyLCBzdGFydCwgbGVuKSB7XG4gICAgICAgIGlmIChzdGFydCA8IDApIHN0YXJ0ID0gc3RyLmxlbmd0aCArIHN0YXJ0O1xuICAgICAgICByZXR1cm4gc3RyLnN1YnN0cihzdGFydCwgbGVuKTtcbiAgICB9XG47XG4iLCIvLyBzaGltIGZvciB1c2luZyBwcm9jZXNzIGluIGJyb3dzZXJcblxudmFyIHByb2Nlc3MgPSBtb2R1bGUuZXhwb3J0cyA9IHt9O1xudmFyIHF1ZXVlID0gW107XG52YXIgZHJhaW5pbmcgPSBmYWxzZTtcbnZhciBjdXJyZW50UXVldWU7XG52YXIgcXVldWVJbmRleCA9IC0xO1xuXG5mdW5jdGlvbiBjbGVhblVwTmV4dFRpY2soKSB7XG4gICAgZHJhaW5pbmcgPSBmYWxzZTtcbiAgICBpZiAoY3VycmVudFF1ZXVlLmxlbmd0aCkge1xuICAgICAgICBxdWV1ZSA9IGN1cnJlbnRRdWV1ZS5jb25jYXQocXVldWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHF1ZXVlSW5kZXggPSAtMTtcbiAgICB9XG4gICAgaWYgKHF1ZXVlLmxlbmd0aCkge1xuICAgICAgICBkcmFpblF1ZXVlKCk7XG4gICAgfVxufVxuXG5mdW5jdGlvbiBkcmFpblF1ZXVlKCkge1xuICAgIGlmIChkcmFpbmluZykge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIHZhciB0aW1lb3V0ID0gc2V0VGltZW91dChjbGVhblVwTmV4dFRpY2spO1xuICAgIGRyYWluaW5nID0gdHJ1ZTtcblxuICAgIHZhciBsZW4gPSBxdWV1ZS5sZW5ndGg7XG4gICAgd2hpbGUobGVuKSB7XG4gICAgICAgIGN1cnJlbnRRdWV1ZSA9IHF1ZXVlO1xuICAgICAgICBxdWV1ZSA9IFtdO1xuICAgICAgICB3aGlsZSAoKytxdWV1ZUluZGV4IDwgbGVuKSB7XG4gICAgICAgICAgICBpZiAoY3VycmVudFF1ZXVlKSB7XG4gICAgICAgICAgICAgICAgY3VycmVudFF1ZXVlW3F1ZXVlSW5kZXhdLnJ1bigpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHF1ZXVlSW5kZXggPSAtMTtcbiAgICAgICAgbGVuID0gcXVldWUubGVuZ3RoO1xuICAgIH1cbiAgICBjdXJyZW50UXVldWUgPSBudWxsO1xuICAgIGRyYWluaW5nID0gZmFsc2U7XG4gICAgY2xlYXJUaW1lb3V0KHRpbWVvdXQpO1xufVxuXG5wcm9jZXNzLm5leHRUaWNrID0gZnVuY3Rpb24gKGZ1bikge1xuICAgIHZhciBhcmdzID0gbmV3IEFycmF5KGFyZ3VtZW50cy5sZW5ndGggLSAxKTtcbiAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGFyZ3NbaSAtIDFdID0gYXJndW1lbnRzW2ldO1xuICAgICAgICB9XG4gICAgfVxuICAgIHF1ZXVlLnB1c2gobmV3IEl0ZW0oZnVuLCBhcmdzKSk7XG4gICAgaWYgKHF1ZXVlLmxlbmd0aCA9PT0gMSAmJiAhZHJhaW5pbmcpIHtcbiAgICAgICAgc2V0VGltZW91dChkcmFpblF1ZXVlLCAwKTtcbiAgICB9XG59O1xuXG4vLyB2OCBsaWtlcyBwcmVkaWN0aWJsZSBvYmplY3RzXG5mdW5jdGlvbiBJdGVtKGZ1biwgYXJyYXkpIHtcbiAgICB0aGlzLmZ1biA9IGZ1bjtcbiAgICB0aGlzLmFycmF5ID0gYXJyYXk7XG59XG5JdGVtLnByb3RvdHlwZS5ydW4gPSBmdW5jdGlvbiAoKSB7XG4gICAgdGhpcy5mdW4uYXBwbHkobnVsbCwgdGhpcy5hcnJheSk7XG59O1xucHJvY2Vzcy50aXRsZSA9ICdicm93c2VyJztcbnByb2Nlc3MuYnJvd3NlciA9IHRydWU7XG5wcm9jZXNzLmVudiA9IHt9O1xucHJvY2Vzcy5hcmd2ID0gW107XG5wcm9jZXNzLnZlcnNpb24gPSAnJzsgLy8gZW1wdHkgc3RyaW5nIHRvIGF2b2lkIHJlZ2V4cCBpc3N1ZXNcbnByb2Nlc3MudmVyc2lvbnMgPSB7fTtcblxuZnVuY3Rpb24gbm9vcCgpIHt9XG5cbnByb2Nlc3Mub24gPSBub29wO1xucHJvY2Vzcy5hZGRMaXN0ZW5lciA9IG5vb3A7XG5wcm9jZXNzLm9uY2UgPSBub29wO1xucHJvY2Vzcy5vZmYgPSBub29wO1xucHJvY2Vzcy5yZW1vdmVMaXN0ZW5lciA9IG5vb3A7XG5wcm9jZXNzLnJlbW92ZUFsbExpc3RlbmVycyA9IG5vb3A7XG5wcm9jZXNzLmVtaXQgPSBub29wO1xuXG5wcm9jZXNzLmJpbmRpbmcgPSBmdW5jdGlvbiAobmFtZSkge1xuICAgIHRocm93IG5ldyBFcnJvcigncHJvY2Vzcy5iaW5kaW5nIGlzIG5vdCBzdXBwb3J0ZWQnKTtcbn07XG5cbnByb2Nlc3MuY3dkID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gJy8nIH07XG5wcm9jZXNzLmNoZGlyID0gZnVuY3Rpb24gKGRpcikge1xuICAgIHRocm93IG5ldyBFcnJvcigncHJvY2Vzcy5jaGRpciBpcyBub3Qgc3VwcG9ydGVkJyk7XG59O1xucHJvY2Vzcy51bWFzayA9IGZ1bmN0aW9uKCkgeyByZXR1cm4gMDsgfTtcbiIsIi8qISBodHRwczovL210aHMuYmUvcHVueWNvZGUgdjEuNC4wIGJ5IEBtYXRoaWFzICovXG47KGZ1bmN0aW9uKHJvb3QpIHtcblxuXHQvKiogRGV0ZWN0IGZyZWUgdmFyaWFibGVzICovXG5cdHZhciBmcmVlRXhwb3J0cyA9IHR5cGVvZiBleHBvcnRzID09ICdvYmplY3QnICYmIGV4cG9ydHMgJiZcblx0XHQhZXhwb3J0cy5ub2RlVHlwZSAmJiBleHBvcnRzO1xuXHR2YXIgZnJlZU1vZHVsZSA9IHR5cGVvZiBtb2R1bGUgPT0gJ29iamVjdCcgJiYgbW9kdWxlICYmXG5cdFx0IW1vZHVsZS5ub2RlVHlwZSAmJiBtb2R1bGU7XG5cdHZhciBmcmVlR2xvYmFsID0gdHlwZW9mIGdsb2JhbCA9PSAnb2JqZWN0JyAmJiBnbG9iYWw7XG5cdGlmIChcblx0XHRmcmVlR2xvYmFsLmdsb2JhbCA9PT0gZnJlZUdsb2JhbCB8fFxuXHRcdGZyZWVHbG9iYWwud2luZG93ID09PSBmcmVlR2xvYmFsIHx8XG5cdFx0ZnJlZUdsb2JhbC5zZWxmID09PSBmcmVlR2xvYmFsXG5cdCkge1xuXHRcdHJvb3QgPSBmcmVlR2xvYmFsO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoZSBgcHVueWNvZGVgIG9iamVjdC5cblx0ICogQG5hbWUgcHVueWNvZGVcblx0ICogQHR5cGUgT2JqZWN0XG5cdCAqL1xuXHR2YXIgcHVueWNvZGUsXG5cblx0LyoqIEhpZ2hlc3QgcG9zaXRpdmUgc2lnbmVkIDMyLWJpdCBmbG9hdCB2YWx1ZSAqL1xuXHRtYXhJbnQgPSAyMTQ3NDgzNjQ3LCAvLyBha2EuIDB4N0ZGRkZGRkYgb3IgMl4zMS0xXG5cblx0LyoqIEJvb3RzdHJpbmcgcGFyYW1ldGVycyAqL1xuXHRiYXNlID0gMzYsXG5cdHRNaW4gPSAxLFxuXHR0TWF4ID0gMjYsXG5cdHNrZXcgPSAzOCxcblx0ZGFtcCA9IDcwMCxcblx0aW5pdGlhbEJpYXMgPSA3Mixcblx0aW5pdGlhbE4gPSAxMjgsIC8vIDB4ODBcblx0ZGVsaW1pdGVyID0gJy0nLCAvLyAnXFx4MkQnXG5cblx0LyoqIFJlZ3VsYXIgZXhwcmVzc2lvbnMgKi9cblx0cmVnZXhQdW55Y29kZSA9IC9eeG4tLS8sXG5cdHJlZ2V4Tm9uQVNDSUkgPSAvW15cXHgyMC1cXHg3RV0vLCAvLyB1bnByaW50YWJsZSBBU0NJSSBjaGFycyArIG5vbi1BU0NJSSBjaGFyc1xuXHRyZWdleFNlcGFyYXRvcnMgPSAvW1xceDJFXFx1MzAwMlxcdUZGMEVcXHVGRjYxXS9nLCAvLyBSRkMgMzQ5MCBzZXBhcmF0b3JzXG5cblx0LyoqIEVycm9yIG1lc3NhZ2VzICovXG5cdGVycm9ycyA9IHtcblx0XHQnb3ZlcmZsb3cnOiAnT3ZlcmZsb3c6IGlucHV0IG5lZWRzIHdpZGVyIGludGVnZXJzIHRvIHByb2Nlc3MnLFxuXHRcdCdub3QtYmFzaWMnOiAnSWxsZWdhbCBpbnB1dCA+PSAweDgwIChub3QgYSBiYXNpYyBjb2RlIHBvaW50KScsXG5cdFx0J2ludmFsaWQtaW5wdXQnOiAnSW52YWxpZCBpbnB1dCdcblx0fSxcblxuXHQvKiogQ29udmVuaWVuY2Ugc2hvcnRjdXRzICovXG5cdGJhc2VNaW51c1RNaW4gPSBiYXNlIC0gdE1pbixcblx0Zmxvb3IgPSBNYXRoLmZsb29yLFxuXHRzdHJpbmdGcm9tQ2hhckNvZGUgPSBTdHJpbmcuZnJvbUNoYXJDb2RlLFxuXG5cdC8qKiBUZW1wb3JhcnkgdmFyaWFibGUgKi9cblx0a2V5O1xuXG5cdC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuXG5cdC8qKlxuXHQgKiBBIGdlbmVyaWMgZXJyb3IgdXRpbGl0eSBmdW5jdGlvbi5cblx0ICogQHByaXZhdGVcblx0ICogQHBhcmFtIHtTdHJpbmd9IHR5cGUgVGhlIGVycm9yIHR5cGUuXG5cdCAqIEByZXR1cm5zIHtFcnJvcn0gVGhyb3dzIGEgYFJhbmdlRXJyb3JgIHdpdGggdGhlIGFwcGxpY2FibGUgZXJyb3IgbWVzc2FnZS5cblx0ICovXG5cdGZ1bmN0aW9uIGVycm9yKHR5cGUpIHtcblx0XHR0aHJvdyBuZXcgUmFuZ2VFcnJvcihlcnJvcnNbdHlwZV0pO1xuXHR9XG5cblx0LyoqXG5cdCAqIEEgZ2VuZXJpYyBgQXJyYXkjbWFwYCB1dGlsaXR5IGZ1bmN0aW9uLlxuXHQgKiBAcHJpdmF0ZVxuXHQgKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gaXRlcmF0ZSBvdmVyLlxuXHQgKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFjayBUaGUgZnVuY3Rpb24gdGhhdCBnZXRzIGNhbGxlZCBmb3IgZXZlcnkgYXJyYXlcblx0ICogaXRlbS5cblx0ICogQHJldHVybnMge0FycmF5fSBBIG5ldyBhcnJheSBvZiB2YWx1ZXMgcmV0dXJuZWQgYnkgdGhlIGNhbGxiYWNrIGZ1bmN0aW9uLlxuXHQgKi9cblx0ZnVuY3Rpb24gbWFwKGFycmF5LCBmbikge1xuXHRcdHZhciBsZW5ndGggPSBhcnJheS5sZW5ndGg7XG5cdFx0dmFyIHJlc3VsdCA9IFtdO1xuXHRcdHdoaWxlIChsZW5ndGgtLSkge1xuXHRcdFx0cmVzdWx0W2xlbmd0aF0gPSBmbihhcnJheVtsZW5ndGhdKTtcblx0XHR9XG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fVxuXG5cdC8qKlxuXHQgKiBBIHNpbXBsZSBgQXJyYXkjbWFwYC1saWtlIHdyYXBwZXIgdG8gd29yayB3aXRoIGRvbWFpbiBuYW1lIHN0cmluZ3Mgb3IgZW1haWxcblx0ICogYWRkcmVzc2VzLlxuXHQgKiBAcHJpdmF0ZVxuXHQgKiBAcGFyYW0ge1N0cmluZ30gZG9tYWluIFRoZSBkb21haW4gbmFtZSBvciBlbWFpbCBhZGRyZXNzLlxuXHQgKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFjayBUaGUgZnVuY3Rpb24gdGhhdCBnZXRzIGNhbGxlZCBmb3IgZXZlcnlcblx0ICogY2hhcmFjdGVyLlxuXHQgKiBAcmV0dXJucyB7QXJyYXl9IEEgbmV3IHN0cmluZyBvZiBjaGFyYWN0ZXJzIHJldHVybmVkIGJ5IHRoZSBjYWxsYmFja1xuXHQgKiBmdW5jdGlvbi5cblx0ICovXG5cdGZ1bmN0aW9uIG1hcERvbWFpbihzdHJpbmcsIGZuKSB7XG5cdFx0dmFyIHBhcnRzID0gc3RyaW5nLnNwbGl0KCdAJyk7XG5cdFx0dmFyIHJlc3VsdCA9ICcnO1xuXHRcdGlmIChwYXJ0cy5sZW5ndGggPiAxKSB7XG5cdFx0XHQvLyBJbiBlbWFpbCBhZGRyZXNzZXMsIG9ubHkgdGhlIGRvbWFpbiBuYW1lIHNob3VsZCBiZSBwdW55Y29kZWQuIExlYXZlXG5cdFx0XHQvLyB0aGUgbG9jYWwgcGFydCAoaS5lLiBldmVyeXRoaW5nIHVwIHRvIGBAYCkgaW50YWN0LlxuXHRcdFx0cmVzdWx0ID0gcGFydHNbMF0gKyAnQCc7XG5cdFx0XHRzdHJpbmcgPSBwYXJ0c1sxXTtcblx0XHR9XG5cdFx0Ly8gQXZvaWQgYHNwbGl0KHJlZ2V4KWAgZm9yIElFOCBjb21wYXRpYmlsaXR5LiBTZWUgIzE3LlxuXHRcdHN0cmluZyA9IHN0cmluZy5yZXBsYWNlKHJlZ2V4U2VwYXJhdG9ycywgJ1xceDJFJyk7XG5cdFx0dmFyIGxhYmVscyA9IHN0cmluZy5zcGxpdCgnLicpO1xuXHRcdHZhciBlbmNvZGVkID0gbWFwKGxhYmVscywgZm4pLmpvaW4oJy4nKTtcblx0XHRyZXR1cm4gcmVzdWx0ICsgZW5jb2RlZDtcblx0fVxuXG5cdC8qKlxuXHQgKiBDcmVhdGVzIGFuIGFycmF5IGNvbnRhaW5pbmcgdGhlIG51bWVyaWMgY29kZSBwb2ludHMgb2YgZWFjaCBVbmljb2RlXG5cdCAqIGNoYXJhY3RlciBpbiB0aGUgc3RyaW5nLiBXaGlsZSBKYXZhU2NyaXB0IHVzZXMgVUNTLTIgaW50ZXJuYWxseSxcblx0ICogdGhpcyBmdW5jdGlvbiB3aWxsIGNvbnZlcnQgYSBwYWlyIG9mIHN1cnJvZ2F0ZSBoYWx2ZXMgKGVhY2ggb2Ygd2hpY2hcblx0ICogVUNTLTIgZXhwb3NlcyBhcyBzZXBhcmF0ZSBjaGFyYWN0ZXJzKSBpbnRvIGEgc2luZ2xlIGNvZGUgcG9pbnQsXG5cdCAqIG1hdGNoaW5nIFVURi0xNi5cblx0ICogQHNlZSBgcHVueWNvZGUudWNzMi5lbmNvZGVgXG5cdCAqIEBzZWUgPGh0dHBzOi8vbWF0aGlhc2J5bmVucy5iZS9ub3Rlcy9qYXZhc2NyaXB0LWVuY29kaW5nPlxuXHQgKiBAbWVtYmVyT2YgcHVueWNvZGUudWNzMlxuXHQgKiBAbmFtZSBkZWNvZGVcblx0ICogQHBhcmFtIHtTdHJpbmd9IHN0cmluZyBUaGUgVW5pY29kZSBpbnB1dCBzdHJpbmcgKFVDUy0yKS5cblx0ICogQHJldHVybnMge0FycmF5fSBUaGUgbmV3IGFycmF5IG9mIGNvZGUgcG9pbnRzLlxuXHQgKi9cblx0ZnVuY3Rpb24gdWNzMmRlY29kZShzdHJpbmcpIHtcblx0XHR2YXIgb3V0cHV0ID0gW10sXG5cdFx0ICAgIGNvdW50ZXIgPSAwLFxuXHRcdCAgICBsZW5ndGggPSBzdHJpbmcubGVuZ3RoLFxuXHRcdCAgICB2YWx1ZSxcblx0XHQgICAgZXh0cmE7XG5cdFx0d2hpbGUgKGNvdW50ZXIgPCBsZW5ndGgpIHtcblx0XHRcdHZhbHVlID0gc3RyaW5nLmNoYXJDb2RlQXQoY291bnRlcisrKTtcblx0XHRcdGlmICh2YWx1ZSA+PSAweEQ4MDAgJiYgdmFsdWUgPD0gMHhEQkZGICYmIGNvdW50ZXIgPCBsZW5ndGgpIHtcblx0XHRcdFx0Ly8gaGlnaCBzdXJyb2dhdGUsIGFuZCB0aGVyZSBpcyBhIG5leHQgY2hhcmFjdGVyXG5cdFx0XHRcdGV4dHJhID0gc3RyaW5nLmNoYXJDb2RlQXQoY291bnRlcisrKTtcblx0XHRcdFx0aWYgKChleHRyYSAmIDB4RkMwMCkgPT0gMHhEQzAwKSB7IC8vIGxvdyBzdXJyb2dhdGVcblx0XHRcdFx0XHRvdXRwdXQucHVzaCgoKHZhbHVlICYgMHgzRkYpIDw8IDEwKSArIChleHRyYSAmIDB4M0ZGKSArIDB4MTAwMDApO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdC8vIHVubWF0Y2hlZCBzdXJyb2dhdGU7IG9ubHkgYXBwZW5kIHRoaXMgY29kZSB1bml0LCBpbiBjYXNlIHRoZSBuZXh0XG5cdFx0XHRcdFx0Ly8gY29kZSB1bml0IGlzIHRoZSBoaWdoIHN1cnJvZ2F0ZSBvZiBhIHN1cnJvZ2F0ZSBwYWlyXG5cdFx0XHRcdFx0b3V0cHV0LnB1c2godmFsdWUpO1xuXHRcdFx0XHRcdGNvdW50ZXItLTtcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0b3V0cHV0LnB1c2godmFsdWUpO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gb3V0cHV0O1xuXHR9XG5cblx0LyoqXG5cdCAqIENyZWF0ZXMgYSBzdHJpbmcgYmFzZWQgb24gYW4gYXJyYXkgb2YgbnVtZXJpYyBjb2RlIHBvaW50cy5cblx0ICogQHNlZSBgcHVueWNvZGUudWNzMi5kZWNvZGVgXG5cdCAqIEBtZW1iZXJPZiBwdW55Y29kZS51Y3MyXG5cdCAqIEBuYW1lIGVuY29kZVxuXHQgKiBAcGFyYW0ge0FycmF5fSBjb2RlUG9pbnRzIFRoZSBhcnJheSBvZiBudW1lcmljIGNvZGUgcG9pbnRzLlxuXHQgKiBAcmV0dXJucyB7U3RyaW5nfSBUaGUgbmV3IFVuaWNvZGUgc3RyaW5nIChVQ1MtMikuXG5cdCAqL1xuXHRmdW5jdGlvbiB1Y3MyZW5jb2RlKGFycmF5KSB7XG5cdFx0cmV0dXJuIG1hcChhcnJheSwgZnVuY3Rpb24odmFsdWUpIHtcblx0XHRcdHZhciBvdXRwdXQgPSAnJztcblx0XHRcdGlmICh2YWx1ZSA+IDB4RkZGRikge1xuXHRcdFx0XHR2YWx1ZSAtPSAweDEwMDAwO1xuXHRcdFx0XHRvdXRwdXQgKz0gc3RyaW5nRnJvbUNoYXJDb2RlKHZhbHVlID4+PiAxMCAmIDB4M0ZGIHwgMHhEODAwKTtcblx0XHRcdFx0dmFsdWUgPSAweERDMDAgfCB2YWx1ZSAmIDB4M0ZGO1xuXHRcdFx0fVxuXHRcdFx0b3V0cHV0ICs9IHN0cmluZ0Zyb21DaGFyQ29kZSh2YWx1ZSk7XG5cdFx0XHRyZXR1cm4gb3V0cHV0O1xuXHRcdH0pLmpvaW4oJycpO1xuXHR9XG5cblx0LyoqXG5cdCAqIENvbnZlcnRzIGEgYmFzaWMgY29kZSBwb2ludCBpbnRvIGEgZGlnaXQvaW50ZWdlci5cblx0ICogQHNlZSBgZGlnaXRUb0Jhc2ljKClgXG5cdCAqIEBwcml2YXRlXG5cdCAqIEBwYXJhbSB7TnVtYmVyfSBjb2RlUG9pbnQgVGhlIGJhc2ljIG51bWVyaWMgY29kZSBwb2ludCB2YWx1ZS5cblx0ICogQHJldHVybnMge051bWJlcn0gVGhlIG51bWVyaWMgdmFsdWUgb2YgYSBiYXNpYyBjb2RlIHBvaW50IChmb3IgdXNlIGluXG5cdCAqIHJlcHJlc2VudGluZyBpbnRlZ2VycykgaW4gdGhlIHJhbmdlIGAwYCB0byBgYmFzZSAtIDFgLCBvciBgYmFzZWAgaWZcblx0ICogdGhlIGNvZGUgcG9pbnQgZG9lcyBub3QgcmVwcmVzZW50IGEgdmFsdWUuXG5cdCAqL1xuXHRmdW5jdGlvbiBiYXNpY1RvRGlnaXQoY29kZVBvaW50KSB7XG5cdFx0aWYgKGNvZGVQb2ludCAtIDQ4IDwgMTApIHtcblx0XHRcdHJldHVybiBjb2RlUG9pbnQgLSAyMjtcblx0XHR9XG5cdFx0aWYgKGNvZGVQb2ludCAtIDY1IDwgMjYpIHtcblx0XHRcdHJldHVybiBjb2RlUG9pbnQgLSA2NTtcblx0XHR9XG5cdFx0aWYgKGNvZGVQb2ludCAtIDk3IDwgMjYpIHtcblx0XHRcdHJldHVybiBjb2RlUG9pbnQgLSA5Nztcblx0XHR9XG5cdFx0cmV0dXJuIGJhc2U7XG5cdH1cblxuXHQvKipcblx0ICogQ29udmVydHMgYSBkaWdpdC9pbnRlZ2VyIGludG8gYSBiYXNpYyBjb2RlIHBvaW50LlxuXHQgKiBAc2VlIGBiYXNpY1RvRGlnaXQoKWBcblx0ICogQHByaXZhdGVcblx0ICogQHBhcmFtIHtOdW1iZXJ9IGRpZ2l0IFRoZSBudW1lcmljIHZhbHVlIG9mIGEgYmFzaWMgY29kZSBwb2ludC5cblx0ICogQHJldHVybnMge051bWJlcn0gVGhlIGJhc2ljIGNvZGUgcG9pbnQgd2hvc2UgdmFsdWUgKHdoZW4gdXNlZCBmb3Jcblx0ICogcmVwcmVzZW50aW5nIGludGVnZXJzKSBpcyBgZGlnaXRgLCB3aGljaCBuZWVkcyB0byBiZSBpbiB0aGUgcmFuZ2Vcblx0ICogYDBgIHRvIGBiYXNlIC0gMWAuIElmIGBmbGFnYCBpcyBub24temVybywgdGhlIHVwcGVyY2FzZSBmb3JtIGlzXG5cdCAqIHVzZWQ7IGVsc2UsIHRoZSBsb3dlcmNhc2UgZm9ybSBpcyB1c2VkLiBUaGUgYmVoYXZpb3IgaXMgdW5kZWZpbmVkXG5cdCAqIGlmIGBmbGFnYCBpcyBub24temVybyBhbmQgYGRpZ2l0YCBoYXMgbm8gdXBwZXJjYXNlIGZvcm0uXG5cdCAqL1xuXHRmdW5jdGlvbiBkaWdpdFRvQmFzaWMoZGlnaXQsIGZsYWcpIHtcblx0XHQvLyAgMC4uMjUgbWFwIHRvIEFTQ0lJIGEuLnogb3IgQS4uWlxuXHRcdC8vIDI2Li4zNSBtYXAgdG8gQVNDSUkgMC4uOVxuXHRcdHJldHVybiBkaWdpdCArIDIyICsgNzUgKiAoZGlnaXQgPCAyNikgLSAoKGZsYWcgIT0gMCkgPDwgNSk7XG5cdH1cblxuXHQvKipcblx0ICogQmlhcyBhZGFwdGF0aW9uIGZ1bmN0aW9uIGFzIHBlciBzZWN0aW9uIDMuNCBvZiBSRkMgMzQ5Mi5cblx0ICogaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzM0OTIjc2VjdGlvbi0zLjRcblx0ICogQHByaXZhdGVcblx0ICovXG5cdGZ1bmN0aW9uIGFkYXB0KGRlbHRhLCBudW1Qb2ludHMsIGZpcnN0VGltZSkge1xuXHRcdHZhciBrID0gMDtcblx0XHRkZWx0YSA9IGZpcnN0VGltZSA/IGZsb29yKGRlbHRhIC8gZGFtcCkgOiBkZWx0YSA+PiAxO1xuXHRcdGRlbHRhICs9IGZsb29yKGRlbHRhIC8gbnVtUG9pbnRzKTtcblx0XHRmb3IgKC8qIG5vIGluaXRpYWxpemF0aW9uICovOyBkZWx0YSA+IGJhc2VNaW51c1RNaW4gKiB0TWF4ID4+IDE7IGsgKz0gYmFzZSkge1xuXHRcdFx0ZGVsdGEgPSBmbG9vcihkZWx0YSAvIGJhc2VNaW51c1RNaW4pO1xuXHRcdH1cblx0XHRyZXR1cm4gZmxvb3IoayArIChiYXNlTWludXNUTWluICsgMSkgKiBkZWx0YSAvIChkZWx0YSArIHNrZXcpKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBDb252ZXJ0cyBhIFB1bnljb2RlIHN0cmluZyBvZiBBU0NJSS1vbmx5IHN5bWJvbHMgdG8gYSBzdHJpbmcgb2YgVW5pY29kZVxuXHQgKiBzeW1ib2xzLlxuXHQgKiBAbWVtYmVyT2YgcHVueWNvZGVcblx0ICogQHBhcmFtIHtTdHJpbmd9IGlucHV0IFRoZSBQdW55Y29kZSBzdHJpbmcgb2YgQVNDSUktb25seSBzeW1ib2xzLlxuXHQgKiBAcmV0dXJucyB7U3RyaW5nfSBUaGUgcmVzdWx0aW5nIHN0cmluZyBvZiBVbmljb2RlIHN5bWJvbHMuXG5cdCAqL1xuXHRmdW5jdGlvbiBkZWNvZGUoaW5wdXQpIHtcblx0XHQvLyBEb24ndCB1c2UgVUNTLTJcblx0XHR2YXIgb3V0cHV0ID0gW10sXG5cdFx0ICAgIGlucHV0TGVuZ3RoID0gaW5wdXQubGVuZ3RoLFxuXHRcdCAgICBvdXQsXG5cdFx0ICAgIGkgPSAwLFxuXHRcdCAgICBuID0gaW5pdGlhbE4sXG5cdFx0ICAgIGJpYXMgPSBpbml0aWFsQmlhcyxcblx0XHQgICAgYmFzaWMsXG5cdFx0ICAgIGosXG5cdFx0ICAgIGluZGV4LFxuXHRcdCAgICBvbGRpLFxuXHRcdCAgICB3LFxuXHRcdCAgICBrLFxuXHRcdCAgICBkaWdpdCxcblx0XHQgICAgdCxcblx0XHQgICAgLyoqIENhY2hlZCBjYWxjdWxhdGlvbiByZXN1bHRzICovXG5cdFx0ICAgIGJhc2VNaW51c1Q7XG5cblx0XHQvLyBIYW5kbGUgdGhlIGJhc2ljIGNvZGUgcG9pbnRzOiBsZXQgYGJhc2ljYCBiZSB0aGUgbnVtYmVyIG9mIGlucHV0IGNvZGVcblx0XHQvLyBwb2ludHMgYmVmb3JlIHRoZSBsYXN0IGRlbGltaXRlciwgb3IgYDBgIGlmIHRoZXJlIGlzIG5vbmUsIHRoZW4gY29weVxuXHRcdC8vIHRoZSBmaXJzdCBiYXNpYyBjb2RlIHBvaW50cyB0byB0aGUgb3V0cHV0LlxuXG5cdFx0YmFzaWMgPSBpbnB1dC5sYXN0SW5kZXhPZihkZWxpbWl0ZXIpO1xuXHRcdGlmIChiYXNpYyA8IDApIHtcblx0XHRcdGJhc2ljID0gMDtcblx0XHR9XG5cblx0XHRmb3IgKGogPSAwOyBqIDwgYmFzaWM7ICsraikge1xuXHRcdFx0Ly8gaWYgaXQncyBub3QgYSBiYXNpYyBjb2RlIHBvaW50XG5cdFx0XHRpZiAoaW5wdXQuY2hhckNvZGVBdChqKSA+PSAweDgwKSB7XG5cdFx0XHRcdGVycm9yKCdub3QtYmFzaWMnKTtcblx0XHRcdH1cblx0XHRcdG91dHB1dC5wdXNoKGlucHV0LmNoYXJDb2RlQXQoaikpO1xuXHRcdH1cblxuXHRcdC8vIE1haW4gZGVjb2RpbmcgbG9vcDogc3RhcnQganVzdCBhZnRlciB0aGUgbGFzdCBkZWxpbWl0ZXIgaWYgYW55IGJhc2ljIGNvZGVcblx0XHQvLyBwb2ludHMgd2VyZSBjb3BpZWQ7IHN0YXJ0IGF0IHRoZSBiZWdpbm5pbmcgb3RoZXJ3aXNlLlxuXG5cdFx0Zm9yIChpbmRleCA9IGJhc2ljID4gMCA/IGJhc2ljICsgMSA6IDA7IGluZGV4IDwgaW5wdXRMZW5ndGg7IC8qIG5vIGZpbmFsIGV4cHJlc3Npb24gKi8pIHtcblxuXHRcdFx0Ly8gYGluZGV4YCBpcyB0aGUgaW5kZXggb2YgdGhlIG5leHQgY2hhcmFjdGVyIHRvIGJlIGNvbnN1bWVkLlxuXHRcdFx0Ly8gRGVjb2RlIGEgZ2VuZXJhbGl6ZWQgdmFyaWFibGUtbGVuZ3RoIGludGVnZXIgaW50byBgZGVsdGFgLFxuXHRcdFx0Ly8gd2hpY2ggZ2V0cyBhZGRlZCB0byBgaWAuIFRoZSBvdmVyZmxvdyBjaGVja2luZyBpcyBlYXNpZXJcblx0XHRcdC8vIGlmIHdlIGluY3JlYXNlIGBpYCBhcyB3ZSBnbywgdGhlbiBzdWJ0cmFjdCBvZmYgaXRzIHN0YXJ0aW5nXG5cdFx0XHQvLyB2YWx1ZSBhdCB0aGUgZW5kIHRvIG9idGFpbiBgZGVsdGFgLlxuXHRcdFx0Zm9yIChvbGRpID0gaSwgdyA9IDEsIGsgPSBiYXNlOyAvKiBubyBjb25kaXRpb24gKi87IGsgKz0gYmFzZSkge1xuXG5cdFx0XHRcdGlmIChpbmRleCA+PSBpbnB1dExlbmd0aCkge1xuXHRcdFx0XHRcdGVycm9yKCdpbnZhbGlkLWlucHV0Jyk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRkaWdpdCA9IGJhc2ljVG9EaWdpdChpbnB1dC5jaGFyQ29kZUF0KGluZGV4KyspKTtcblxuXHRcdFx0XHRpZiAoZGlnaXQgPj0gYmFzZSB8fCBkaWdpdCA+IGZsb29yKChtYXhJbnQgLSBpKSAvIHcpKSB7XG5cdFx0XHRcdFx0ZXJyb3IoJ292ZXJmbG93Jyk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpICs9IGRpZ2l0ICogdztcblx0XHRcdFx0dCA9IGsgPD0gYmlhcyA/IHRNaW4gOiAoayA+PSBiaWFzICsgdE1heCA/IHRNYXggOiBrIC0gYmlhcyk7XG5cblx0XHRcdFx0aWYgKGRpZ2l0IDwgdCkge1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0YmFzZU1pbnVzVCA9IGJhc2UgLSB0O1xuXHRcdFx0XHRpZiAodyA+IGZsb29yKG1heEludCAvIGJhc2VNaW51c1QpKSB7XG5cdFx0XHRcdFx0ZXJyb3IoJ292ZXJmbG93Jyk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHR3ICo9IGJhc2VNaW51c1Q7XG5cblx0XHRcdH1cblxuXHRcdFx0b3V0ID0gb3V0cHV0Lmxlbmd0aCArIDE7XG5cdFx0XHRiaWFzID0gYWRhcHQoaSAtIG9sZGksIG91dCwgb2xkaSA9PSAwKTtcblxuXHRcdFx0Ly8gYGlgIHdhcyBzdXBwb3NlZCB0byB3cmFwIGFyb3VuZCBmcm9tIGBvdXRgIHRvIGAwYCxcblx0XHRcdC8vIGluY3JlbWVudGluZyBgbmAgZWFjaCB0aW1lLCBzbyB3ZSdsbCBmaXggdGhhdCBub3c6XG5cdFx0XHRpZiAoZmxvb3IoaSAvIG91dCkgPiBtYXhJbnQgLSBuKSB7XG5cdFx0XHRcdGVycm9yKCdvdmVyZmxvdycpO1xuXHRcdFx0fVxuXG5cdFx0XHRuICs9IGZsb29yKGkgLyBvdXQpO1xuXHRcdFx0aSAlPSBvdXQ7XG5cblx0XHRcdC8vIEluc2VydCBgbmAgYXQgcG9zaXRpb24gYGlgIG9mIHRoZSBvdXRwdXRcblx0XHRcdG91dHB1dC5zcGxpY2UoaSsrLCAwLCBuKTtcblxuXHRcdH1cblxuXHRcdHJldHVybiB1Y3MyZW5jb2RlKG91dHB1dCk7XG5cdH1cblxuXHQvKipcblx0ICogQ29udmVydHMgYSBzdHJpbmcgb2YgVW5pY29kZSBzeW1ib2xzIChlLmcuIGEgZG9tYWluIG5hbWUgbGFiZWwpIHRvIGFcblx0ICogUHVueWNvZGUgc3RyaW5nIG9mIEFTQ0lJLW9ubHkgc3ltYm9scy5cblx0ICogQG1lbWJlck9mIHB1bnljb2RlXG5cdCAqIEBwYXJhbSB7U3RyaW5nfSBpbnB1dCBUaGUgc3RyaW5nIG9mIFVuaWNvZGUgc3ltYm9scy5cblx0ICogQHJldHVybnMge1N0cmluZ30gVGhlIHJlc3VsdGluZyBQdW55Y29kZSBzdHJpbmcgb2YgQVNDSUktb25seSBzeW1ib2xzLlxuXHQgKi9cblx0ZnVuY3Rpb24gZW5jb2RlKGlucHV0KSB7XG5cdFx0dmFyIG4sXG5cdFx0ICAgIGRlbHRhLFxuXHRcdCAgICBoYW5kbGVkQ1BDb3VudCxcblx0XHQgICAgYmFzaWNMZW5ndGgsXG5cdFx0ICAgIGJpYXMsXG5cdFx0ICAgIGosXG5cdFx0ICAgIG0sXG5cdFx0ICAgIHEsXG5cdFx0ICAgIGssXG5cdFx0ICAgIHQsXG5cdFx0ICAgIGN1cnJlbnRWYWx1ZSxcblx0XHQgICAgb3V0cHV0ID0gW10sXG5cdFx0ICAgIC8qKiBgaW5wdXRMZW5ndGhgIHdpbGwgaG9sZCB0aGUgbnVtYmVyIG9mIGNvZGUgcG9pbnRzIGluIGBpbnB1dGAuICovXG5cdFx0ICAgIGlucHV0TGVuZ3RoLFxuXHRcdCAgICAvKiogQ2FjaGVkIGNhbGN1bGF0aW9uIHJlc3VsdHMgKi9cblx0XHQgICAgaGFuZGxlZENQQ291bnRQbHVzT25lLFxuXHRcdCAgICBiYXNlTWludXNULFxuXHRcdCAgICBxTWludXNUO1xuXG5cdFx0Ly8gQ29udmVydCB0aGUgaW5wdXQgaW4gVUNTLTIgdG8gVW5pY29kZVxuXHRcdGlucHV0ID0gdWNzMmRlY29kZShpbnB1dCk7XG5cblx0XHQvLyBDYWNoZSB0aGUgbGVuZ3RoXG5cdFx0aW5wdXRMZW5ndGggPSBpbnB1dC5sZW5ndGg7XG5cblx0XHQvLyBJbml0aWFsaXplIHRoZSBzdGF0ZVxuXHRcdG4gPSBpbml0aWFsTjtcblx0XHRkZWx0YSA9IDA7XG5cdFx0YmlhcyA9IGluaXRpYWxCaWFzO1xuXG5cdFx0Ly8gSGFuZGxlIHRoZSBiYXNpYyBjb2RlIHBvaW50c1xuXHRcdGZvciAoaiA9IDA7IGogPCBpbnB1dExlbmd0aDsgKytqKSB7XG5cdFx0XHRjdXJyZW50VmFsdWUgPSBpbnB1dFtqXTtcblx0XHRcdGlmIChjdXJyZW50VmFsdWUgPCAweDgwKSB7XG5cdFx0XHRcdG91dHB1dC5wdXNoKHN0cmluZ0Zyb21DaGFyQ29kZShjdXJyZW50VmFsdWUpKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRoYW5kbGVkQ1BDb3VudCA9IGJhc2ljTGVuZ3RoID0gb3V0cHV0Lmxlbmd0aDtcblxuXHRcdC8vIGBoYW5kbGVkQ1BDb3VudGAgaXMgdGhlIG51bWJlciBvZiBjb2RlIHBvaW50cyB0aGF0IGhhdmUgYmVlbiBoYW5kbGVkO1xuXHRcdC8vIGBiYXNpY0xlbmd0aGAgaXMgdGhlIG51bWJlciBvZiBiYXNpYyBjb2RlIHBvaW50cy5cblxuXHRcdC8vIEZpbmlzaCB0aGUgYmFzaWMgc3RyaW5nIC0gaWYgaXQgaXMgbm90IGVtcHR5IC0gd2l0aCBhIGRlbGltaXRlclxuXHRcdGlmIChiYXNpY0xlbmd0aCkge1xuXHRcdFx0b3V0cHV0LnB1c2goZGVsaW1pdGVyKTtcblx0XHR9XG5cblx0XHQvLyBNYWluIGVuY29kaW5nIGxvb3A6XG5cdFx0d2hpbGUgKGhhbmRsZWRDUENvdW50IDwgaW5wdXRMZW5ndGgpIHtcblxuXHRcdFx0Ly8gQWxsIG5vbi1iYXNpYyBjb2RlIHBvaW50cyA8IG4gaGF2ZSBiZWVuIGhhbmRsZWQgYWxyZWFkeS4gRmluZCB0aGUgbmV4dFxuXHRcdFx0Ly8gbGFyZ2VyIG9uZTpcblx0XHRcdGZvciAobSA9IG1heEludCwgaiA9IDA7IGogPCBpbnB1dExlbmd0aDsgKytqKSB7XG5cdFx0XHRcdGN1cnJlbnRWYWx1ZSA9IGlucHV0W2pdO1xuXHRcdFx0XHRpZiAoY3VycmVudFZhbHVlID49IG4gJiYgY3VycmVudFZhbHVlIDwgbSkge1xuXHRcdFx0XHRcdG0gPSBjdXJyZW50VmFsdWU7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0Ly8gSW5jcmVhc2UgYGRlbHRhYCBlbm91Z2ggdG8gYWR2YW5jZSB0aGUgZGVjb2RlcidzIDxuLGk+IHN0YXRlIHRvIDxtLDA+LFxuXHRcdFx0Ly8gYnV0IGd1YXJkIGFnYWluc3Qgb3ZlcmZsb3dcblx0XHRcdGhhbmRsZWRDUENvdW50UGx1c09uZSA9IGhhbmRsZWRDUENvdW50ICsgMTtcblx0XHRcdGlmIChtIC0gbiA+IGZsb29yKChtYXhJbnQgLSBkZWx0YSkgLyBoYW5kbGVkQ1BDb3VudFBsdXNPbmUpKSB7XG5cdFx0XHRcdGVycm9yKCdvdmVyZmxvdycpO1xuXHRcdFx0fVxuXG5cdFx0XHRkZWx0YSArPSAobSAtIG4pICogaGFuZGxlZENQQ291bnRQbHVzT25lO1xuXHRcdFx0biA9IG07XG5cblx0XHRcdGZvciAoaiA9IDA7IGogPCBpbnB1dExlbmd0aDsgKytqKSB7XG5cdFx0XHRcdGN1cnJlbnRWYWx1ZSA9IGlucHV0W2pdO1xuXG5cdFx0XHRcdGlmIChjdXJyZW50VmFsdWUgPCBuICYmICsrZGVsdGEgPiBtYXhJbnQpIHtcblx0XHRcdFx0XHRlcnJvcignb3ZlcmZsb3cnKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGlmIChjdXJyZW50VmFsdWUgPT0gbikge1xuXHRcdFx0XHRcdC8vIFJlcHJlc2VudCBkZWx0YSBhcyBhIGdlbmVyYWxpemVkIHZhcmlhYmxlLWxlbmd0aCBpbnRlZ2VyXG5cdFx0XHRcdFx0Zm9yIChxID0gZGVsdGEsIGsgPSBiYXNlOyAvKiBubyBjb25kaXRpb24gKi87IGsgKz0gYmFzZSkge1xuXHRcdFx0XHRcdFx0dCA9IGsgPD0gYmlhcyA/IHRNaW4gOiAoayA+PSBiaWFzICsgdE1heCA/IHRNYXggOiBrIC0gYmlhcyk7XG5cdFx0XHRcdFx0XHRpZiAocSA8IHQpIHtcblx0XHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRxTWludXNUID0gcSAtIHQ7XG5cdFx0XHRcdFx0XHRiYXNlTWludXNUID0gYmFzZSAtIHQ7XG5cdFx0XHRcdFx0XHRvdXRwdXQucHVzaChcblx0XHRcdFx0XHRcdFx0c3RyaW5nRnJvbUNoYXJDb2RlKGRpZ2l0VG9CYXNpYyh0ICsgcU1pbnVzVCAlIGJhc2VNaW51c1QsIDApKVxuXHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdHEgPSBmbG9vcihxTWludXNUIC8gYmFzZU1pbnVzVCk7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0b3V0cHV0LnB1c2goc3RyaW5nRnJvbUNoYXJDb2RlKGRpZ2l0VG9CYXNpYyhxLCAwKSkpO1xuXHRcdFx0XHRcdGJpYXMgPSBhZGFwdChkZWx0YSwgaGFuZGxlZENQQ291bnRQbHVzT25lLCBoYW5kbGVkQ1BDb3VudCA9PSBiYXNpY0xlbmd0aCk7XG5cdFx0XHRcdFx0ZGVsdGEgPSAwO1xuXHRcdFx0XHRcdCsraGFuZGxlZENQQ291bnQ7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0KytkZWx0YTtcblx0XHRcdCsrbjtcblxuXHRcdH1cblx0XHRyZXR1cm4gb3V0cHV0LmpvaW4oJycpO1xuXHR9XG5cblx0LyoqXG5cdCAqIENvbnZlcnRzIGEgUHVueWNvZGUgc3RyaW5nIHJlcHJlc2VudGluZyBhIGRvbWFpbiBuYW1lIG9yIGFuIGVtYWlsIGFkZHJlc3Ncblx0ICogdG8gVW5pY29kZS4gT25seSB0aGUgUHVueWNvZGVkIHBhcnRzIG9mIHRoZSBpbnB1dCB3aWxsIGJlIGNvbnZlcnRlZCwgaS5lLlxuXHQgKiBpdCBkb2Vzbid0IG1hdHRlciBpZiB5b3UgY2FsbCBpdCBvbiBhIHN0cmluZyB0aGF0IGhhcyBhbHJlYWR5IGJlZW5cblx0ICogY29udmVydGVkIHRvIFVuaWNvZGUuXG5cdCAqIEBtZW1iZXJPZiBwdW55Y29kZVxuXHQgKiBAcGFyYW0ge1N0cmluZ30gaW5wdXQgVGhlIFB1bnljb2RlZCBkb21haW4gbmFtZSBvciBlbWFpbCBhZGRyZXNzIHRvXG5cdCAqIGNvbnZlcnQgdG8gVW5pY29kZS5cblx0ICogQHJldHVybnMge1N0cmluZ30gVGhlIFVuaWNvZGUgcmVwcmVzZW50YXRpb24gb2YgdGhlIGdpdmVuIFB1bnljb2RlXG5cdCAqIHN0cmluZy5cblx0ICovXG5cdGZ1bmN0aW9uIHRvVW5pY29kZShpbnB1dCkge1xuXHRcdHJldHVybiBtYXBEb21haW4oaW5wdXQsIGZ1bmN0aW9uKHN0cmluZykge1xuXHRcdFx0cmV0dXJuIHJlZ2V4UHVueWNvZGUudGVzdChzdHJpbmcpXG5cdFx0XHRcdD8gZGVjb2RlKHN0cmluZy5zbGljZSg0KS50b0xvd2VyQ2FzZSgpKVxuXHRcdFx0XHQ6IHN0cmluZztcblx0XHR9KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBDb252ZXJ0cyBhIFVuaWNvZGUgc3RyaW5nIHJlcHJlc2VudGluZyBhIGRvbWFpbiBuYW1lIG9yIGFuIGVtYWlsIGFkZHJlc3MgdG9cblx0ICogUHVueWNvZGUuIE9ubHkgdGhlIG5vbi1BU0NJSSBwYXJ0cyBvZiB0aGUgZG9tYWluIG5hbWUgd2lsbCBiZSBjb252ZXJ0ZWQsXG5cdCAqIGkuZS4gaXQgZG9lc24ndCBtYXR0ZXIgaWYgeW91IGNhbGwgaXQgd2l0aCBhIGRvbWFpbiB0aGF0J3MgYWxyZWFkeSBpblxuXHQgKiBBU0NJSS5cblx0ICogQG1lbWJlck9mIHB1bnljb2RlXG5cdCAqIEBwYXJhbSB7U3RyaW5nfSBpbnB1dCBUaGUgZG9tYWluIG5hbWUgb3IgZW1haWwgYWRkcmVzcyB0byBjb252ZXJ0LCBhcyBhXG5cdCAqIFVuaWNvZGUgc3RyaW5nLlxuXHQgKiBAcmV0dXJucyB7U3RyaW5nfSBUaGUgUHVueWNvZGUgcmVwcmVzZW50YXRpb24gb2YgdGhlIGdpdmVuIGRvbWFpbiBuYW1lIG9yXG5cdCAqIGVtYWlsIGFkZHJlc3MuXG5cdCAqL1xuXHRmdW5jdGlvbiB0b0FTQ0lJKGlucHV0KSB7XG5cdFx0cmV0dXJuIG1hcERvbWFpbihpbnB1dCwgZnVuY3Rpb24oc3RyaW5nKSB7XG5cdFx0XHRyZXR1cm4gcmVnZXhOb25BU0NJSS50ZXN0KHN0cmluZylcblx0XHRcdFx0PyAneG4tLScgKyBlbmNvZGUoc3RyaW5nKVxuXHRcdFx0XHQ6IHN0cmluZztcblx0XHR9KTtcblx0fVxuXG5cdC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuXG5cdC8qKiBEZWZpbmUgdGhlIHB1YmxpYyBBUEkgKi9cblx0cHVueWNvZGUgPSB7XG5cdFx0LyoqXG5cdFx0ICogQSBzdHJpbmcgcmVwcmVzZW50aW5nIHRoZSBjdXJyZW50IFB1bnljb2RlLmpzIHZlcnNpb24gbnVtYmVyLlxuXHRcdCAqIEBtZW1iZXJPZiBwdW55Y29kZVxuXHRcdCAqIEB0eXBlIFN0cmluZ1xuXHRcdCAqL1xuXHRcdCd2ZXJzaW9uJzogJzEuMy4yJyxcblx0XHQvKipcblx0XHQgKiBBbiBvYmplY3Qgb2YgbWV0aG9kcyB0byBjb252ZXJ0IGZyb20gSmF2YVNjcmlwdCdzIGludGVybmFsIGNoYXJhY3RlclxuXHRcdCAqIHJlcHJlc2VudGF0aW9uIChVQ1MtMikgdG8gVW5pY29kZSBjb2RlIHBvaW50cywgYW5kIGJhY2suXG5cdFx0ICogQHNlZSA8aHR0cHM6Ly9tYXRoaWFzYnluZW5zLmJlL25vdGVzL2phdmFzY3JpcHQtZW5jb2Rpbmc+XG5cdFx0ICogQG1lbWJlck9mIHB1bnljb2RlXG5cdFx0ICogQHR5cGUgT2JqZWN0XG5cdFx0ICovXG5cdFx0J3VjczInOiB7XG5cdFx0XHQnZGVjb2RlJzogdWNzMmRlY29kZSxcblx0XHRcdCdlbmNvZGUnOiB1Y3MyZW5jb2RlXG5cdFx0fSxcblx0XHQnZGVjb2RlJzogZGVjb2RlLFxuXHRcdCdlbmNvZGUnOiBlbmNvZGUsXG5cdFx0J3RvQVNDSUknOiB0b0FTQ0lJLFxuXHRcdCd0b1VuaWNvZGUnOiB0b1VuaWNvZGVcblx0fTtcblxuXHQvKiogRXhwb3NlIGBwdW55Y29kZWAgKi9cblx0Ly8gU29tZSBBTUQgYnVpbGQgb3B0aW1pemVycywgbGlrZSByLmpzLCBjaGVjayBmb3Igc3BlY2lmaWMgY29uZGl0aW9uIHBhdHRlcm5zXG5cdC8vIGxpa2UgdGhlIGZvbGxvd2luZzpcblx0aWYgKFxuXHRcdHR5cGVvZiBkZWZpbmUgPT0gJ2Z1bmN0aW9uJyAmJlxuXHRcdHR5cGVvZiBkZWZpbmUuYW1kID09ICdvYmplY3QnICYmXG5cdFx0ZGVmaW5lLmFtZFxuXHQpIHtcblx0XHRkZWZpbmUoJ3B1bnljb2RlJywgZnVuY3Rpb24oKSB7XG5cdFx0XHRyZXR1cm4gcHVueWNvZGU7XG5cdFx0fSk7XG5cdH0gZWxzZSBpZiAoZnJlZUV4cG9ydHMgJiYgZnJlZU1vZHVsZSkge1xuXHRcdGlmIChtb2R1bGUuZXhwb3J0cyA9PSBmcmVlRXhwb3J0cykge1xuXHRcdFx0Ly8gaW4gTm9kZS5qcywgaW8uanMsIG9yIFJpbmdvSlMgdjAuOC4wK1xuXHRcdFx0ZnJlZU1vZHVsZS5leHBvcnRzID0gcHVueWNvZGU7XG5cdFx0fSBlbHNlIHtcblx0XHRcdC8vIGluIE5hcndoYWwgb3IgUmluZ29KUyB2MC43LjAtXG5cdFx0XHRmb3IgKGtleSBpbiBwdW55Y29kZSkge1xuXHRcdFx0XHRwdW55Y29kZS5oYXNPd25Qcm9wZXJ0eShrZXkpICYmIChmcmVlRXhwb3J0c1trZXldID0gcHVueWNvZGVba2V5XSk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9IGVsc2Uge1xuXHRcdC8vIGluIFJoaW5vIG9yIGEgd2ViIGJyb3dzZXJcblx0XHRyb290LnB1bnljb2RlID0gcHVueWNvZGU7XG5cdH1cblxufSh0aGlzKSk7XG4iLCIvLyBDb3B5cmlnaHQgSm95ZW50LCBJbmMuIGFuZCBvdGhlciBOb2RlIGNvbnRyaWJ1dG9ycy5cbi8vXG4vLyBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYVxuLy8gY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZVxuLy8gXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nXG4vLyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsXG4vLyBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0XG4vLyBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGVcbi8vIGZvbGxvd2luZyBjb25kaXRpb25zOlxuLy9cbi8vIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkXG4vLyBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbi8vXG4vLyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTXG4vLyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GXG4vLyBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOXG4vLyBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSxcbi8vIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUlxuLy8gT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRVxuLy8gVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cblxuJ3VzZSBzdHJpY3QnO1xuXG4vLyBJZiBvYmouaGFzT3duUHJvcGVydHkgaGFzIGJlZW4gb3ZlcnJpZGRlbiwgdGhlbiBjYWxsaW5nXG4vLyBvYmouaGFzT3duUHJvcGVydHkocHJvcCkgd2lsbCBicmVhay5cbi8vIFNlZTogaHR0cHM6Ly9naXRodWIuY29tL2pveWVudC9ub2RlL2lzc3Vlcy8xNzA3XG5mdW5jdGlvbiBoYXNPd25Qcm9wZXJ0eShvYmosIHByb3ApIHtcbiAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmosIHByb3ApO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKHFzLCBzZXAsIGVxLCBvcHRpb25zKSB7XG4gIHNlcCA9IHNlcCB8fCAnJic7XG4gIGVxID0gZXEgfHwgJz0nO1xuICB2YXIgb2JqID0ge307XG5cbiAgaWYgKHR5cGVvZiBxcyAhPT0gJ3N0cmluZycgfHwgcXMubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIG9iajtcbiAgfVxuXG4gIHZhciByZWdleHAgPSAvXFwrL2c7XG4gIHFzID0gcXMuc3BsaXQoc2VwKTtcblxuICB2YXIgbWF4S2V5cyA9IDEwMDA7XG4gIGlmIChvcHRpb25zICYmIHR5cGVvZiBvcHRpb25zLm1heEtleXMgPT09ICdudW1iZXInKSB7XG4gICAgbWF4S2V5cyA9IG9wdGlvbnMubWF4S2V5cztcbiAgfVxuXG4gIHZhciBsZW4gPSBxcy5sZW5ndGg7XG4gIC8vIG1heEtleXMgPD0gMCBtZWFucyB0aGF0IHdlIHNob3VsZCBub3QgbGltaXQga2V5cyBjb3VudFxuICBpZiAobWF4S2V5cyA+IDAgJiYgbGVuID4gbWF4S2V5cykge1xuICAgIGxlbiA9IG1heEtleXM7XG4gIH1cblxuICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgKytpKSB7XG4gICAgdmFyIHggPSBxc1tpXS5yZXBsYWNlKHJlZ2V4cCwgJyUyMCcpLFxuICAgICAgICBpZHggPSB4LmluZGV4T2YoZXEpLFxuICAgICAgICBrc3RyLCB2c3RyLCBrLCB2O1xuXG4gICAgaWYgKGlkeCA+PSAwKSB7XG4gICAgICBrc3RyID0geC5zdWJzdHIoMCwgaWR4KTtcbiAgICAgIHZzdHIgPSB4LnN1YnN0cihpZHggKyAxKTtcbiAgICB9IGVsc2Uge1xuICAgICAga3N0ciA9IHg7XG4gICAgICB2c3RyID0gJyc7XG4gICAgfVxuXG4gICAgayA9IGRlY29kZVVSSUNvbXBvbmVudChrc3RyKTtcbiAgICB2ID0gZGVjb2RlVVJJQ29tcG9uZW50KHZzdHIpO1xuXG4gICAgaWYgKCFoYXNPd25Qcm9wZXJ0eShvYmosIGspKSB7XG4gICAgICBvYmpba10gPSB2O1xuICAgIH0gZWxzZSBpZiAoaXNBcnJheShvYmpba10pKSB7XG4gICAgICBvYmpba10ucHVzaCh2KTtcbiAgICB9IGVsc2Uge1xuICAgICAgb2JqW2tdID0gW29ialtrXSwgdl07XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG9iajtcbn07XG5cbnZhciBpc0FycmF5ID0gQXJyYXkuaXNBcnJheSB8fCBmdW5jdGlvbiAoeHMpIHtcbiAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh4cykgPT09ICdbb2JqZWN0IEFycmF5XSc7XG59O1xuIiwiLy8gQ29weXJpZ2h0IEpveWVudCwgSW5jLiBhbmQgb3RoZXIgTm9kZSBjb250cmlidXRvcnMuXG4vL1xuLy8gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGFcbi8vIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGVcbi8vIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZ1xuLy8gd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLFxuLy8gZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdFxuLy8gcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlXG4vLyBmb2xsb3dpbmcgY29uZGl0aW9uczpcbi8vXG4vLyBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZFxuLy8gaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4vL1xuLy8gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTU1xuLy8gT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRlxuLy8gTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTlxuLy8gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sXG4vLyBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1Jcbi8vIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEVcbi8vIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG5cbid1c2Ugc3RyaWN0JztcblxudmFyIHN0cmluZ2lmeVByaW1pdGl2ZSA9IGZ1bmN0aW9uKHYpIHtcbiAgc3dpdGNoICh0eXBlb2Ygdikge1xuICAgIGNhc2UgJ3N0cmluZyc6XG4gICAgICByZXR1cm4gdjtcblxuICAgIGNhc2UgJ2Jvb2xlYW4nOlxuICAgICAgcmV0dXJuIHYgPyAndHJ1ZScgOiAnZmFsc2UnO1xuXG4gICAgY2FzZSAnbnVtYmVyJzpcbiAgICAgIHJldHVybiBpc0Zpbml0ZSh2KSA/IHYgOiAnJztcblxuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gJyc7XG4gIH1cbn07XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24ob2JqLCBzZXAsIGVxLCBuYW1lKSB7XG4gIHNlcCA9IHNlcCB8fCAnJic7XG4gIGVxID0gZXEgfHwgJz0nO1xuICBpZiAob2JqID09PSBudWxsKSB7XG4gICAgb2JqID0gdW5kZWZpbmVkO1xuICB9XG5cbiAgaWYgKHR5cGVvZiBvYmogPT09ICdvYmplY3QnKSB7XG4gICAgcmV0dXJuIG1hcChvYmplY3RLZXlzKG9iaiksIGZ1bmN0aW9uKGspIHtcbiAgICAgIHZhciBrcyA9IGVuY29kZVVSSUNvbXBvbmVudChzdHJpbmdpZnlQcmltaXRpdmUoaykpICsgZXE7XG4gICAgICBpZiAoaXNBcnJheShvYmpba10pKSB7XG4gICAgICAgIHJldHVybiBtYXAob2JqW2tdLCBmdW5jdGlvbih2KSB7XG4gICAgICAgICAgcmV0dXJuIGtzICsgZW5jb2RlVVJJQ29tcG9uZW50KHN0cmluZ2lmeVByaW1pdGl2ZSh2KSk7XG4gICAgICAgIH0pLmpvaW4oc2VwKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBrcyArIGVuY29kZVVSSUNvbXBvbmVudChzdHJpbmdpZnlQcmltaXRpdmUob2JqW2tdKSk7XG4gICAgICB9XG4gICAgfSkuam9pbihzZXApO1xuXG4gIH1cblxuICBpZiAoIW5hbWUpIHJldHVybiAnJztcbiAgcmV0dXJuIGVuY29kZVVSSUNvbXBvbmVudChzdHJpbmdpZnlQcmltaXRpdmUobmFtZSkpICsgZXEgK1xuICAgICAgICAgZW5jb2RlVVJJQ29tcG9uZW50KHN0cmluZ2lmeVByaW1pdGl2ZShvYmopKTtcbn07XG5cbnZhciBpc0FycmF5ID0gQXJyYXkuaXNBcnJheSB8fCBmdW5jdGlvbiAoeHMpIHtcbiAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh4cykgPT09ICdbb2JqZWN0IEFycmF5XSc7XG59O1xuXG5mdW5jdGlvbiBtYXAgKHhzLCBmKSB7XG4gIGlmICh4cy5tYXApIHJldHVybiB4cy5tYXAoZik7XG4gIHZhciByZXMgPSBbXTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCB4cy5sZW5ndGg7IGkrKykge1xuICAgIHJlcy5wdXNoKGYoeHNbaV0sIGkpKTtcbiAgfVxuICByZXR1cm4gcmVzO1xufVxuXG52YXIgb2JqZWN0S2V5cyA9IE9iamVjdC5rZXlzIHx8IGZ1bmN0aW9uIChvYmopIHtcbiAgdmFyIHJlcyA9IFtdO1xuICBmb3IgKHZhciBrZXkgaW4gb2JqKSB7XG4gICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmosIGtleSkpIHJlcy5wdXNoKGtleSk7XG4gIH1cbiAgcmV0dXJuIHJlcztcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbmV4cG9ydHMuZGVjb2RlID0gZXhwb3J0cy5wYXJzZSA9IHJlcXVpcmUoJy4vZGVjb2RlJyk7XG5leHBvcnRzLmVuY29kZSA9IGV4cG9ydHMuc3RyaW5naWZ5ID0gcmVxdWlyZSgnLi9lbmNvZGUnKTtcbiIsIi8vIENvcHlyaWdodCBKb3llbnQsIEluYy4gYW5kIG90aGVyIE5vZGUgY29udHJpYnV0b3JzLlxuLy9cbi8vIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhXG4vLyBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlXG4vLyBcIlNvZnR3YXJlXCIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmdcbi8vIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCxcbi8vIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXRcbi8vIHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZVxuLy8gZm9sbG93aW5nIGNvbmRpdGlvbnM6XG4vL1xuLy8gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWRcbi8vIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuLy9cbi8vIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1Ncbi8vIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0Zcbi8vIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU5cbi8vIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLFxuLy8gREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SXG4vLyBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFXG4vLyBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLlxuXG52YXIgcHVueWNvZGUgPSByZXF1aXJlKCdwdW55Y29kZScpO1xuXG5leHBvcnRzLnBhcnNlID0gdXJsUGFyc2U7XG5leHBvcnRzLnJlc29sdmUgPSB1cmxSZXNvbHZlO1xuZXhwb3J0cy5yZXNvbHZlT2JqZWN0ID0gdXJsUmVzb2x2ZU9iamVjdDtcbmV4cG9ydHMuZm9ybWF0ID0gdXJsRm9ybWF0O1xuXG5leHBvcnRzLlVybCA9IFVybDtcblxuZnVuY3Rpb24gVXJsKCkge1xuICB0aGlzLnByb3RvY29sID0gbnVsbDtcbiAgdGhpcy5zbGFzaGVzID0gbnVsbDtcbiAgdGhpcy5hdXRoID0gbnVsbDtcbiAgdGhpcy5ob3N0ID0gbnVsbDtcbiAgdGhpcy5wb3J0ID0gbnVsbDtcbiAgdGhpcy5ob3N0bmFtZSA9IG51bGw7XG4gIHRoaXMuaGFzaCA9IG51bGw7XG4gIHRoaXMuc2VhcmNoID0gbnVsbDtcbiAgdGhpcy5xdWVyeSA9IG51bGw7XG4gIHRoaXMucGF0aG5hbWUgPSBudWxsO1xuICB0aGlzLnBhdGggPSBudWxsO1xuICB0aGlzLmhyZWYgPSBudWxsO1xufVxuXG4vLyBSZWZlcmVuY2U6IFJGQyAzOTg2LCBSRkMgMTgwOCwgUkZDIDIzOTZcblxuLy8gZGVmaW5lIHRoZXNlIGhlcmUgc28gYXQgbGVhc3QgdGhleSBvbmx5IGhhdmUgdG8gYmVcbi8vIGNvbXBpbGVkIG9uY2Ugb24gdGhlIGZpcnN0IG1vZHVsZSBsb2FkLlxudmFyIHByb3RvY29sUGF0dGVybiA9IC9eKFthLXowLTkuKy1dKzopL2ksXG4gICAgcG9ydFBhdHRlcm4gPSAvOlswLTldKiQvLFxuXG4gICAgLy8gUkZDIDIzOTY6IGNoYXJhY3RlcnMgcmVzZXJ2ZWQgZm9yIGRlbGltaXRpbmcgVVJMcy5cbiAgICAvLyBXZSBhY3R1YWxseSBqdXN0IGF1dG8tZXNjYXBlIHRoZXNlLlxuICAgIGRlbGltcyA9IFsnPCcsICc+JywgJ1wiJywgJ2AnLCAnICcsICdcXHInLCAnXFxuJywgJ1xcdCddLFxuXG4gICAgLy8gUkZDIDIzOTY6IGNoYXJhY3RlcnMgbm90IGFsbG93ZWQgZm9yIHZhcmlvdXMgcmVhc29ucy5cbiAgICB1bndpc2UgPSBbJ3snLCAnfScsICd8JywgJ1xcXFwnLCAnXicsICdgJ10uY29uY2F0KGRlbGltcyksXG5cbiAgICAvLyBBbGxvd2VkIGJ5IFJGQ3MsIGJ1dCBjYXVzZSBvZiBYU1MgYXR0YWNrcy4gIEFsd2F5cyBlc2NhcGUgdGhlc2UuXG4gICAgYXV0b0VzY2FwZSA9IFsnXFwnJ10uY29uY2F0KHVud2lzZSksXG4gICAgLy8gQ2hhcmFjdGVycyB0aGF0IGFyZSBuZXZlciBldmVyIGFsbG93ZWQgaW4gYSBob3N0bmFtZS5cbiAgICAvLyBOb3RlIHRoYXQgYW55IGludmFsaWQgY2hhcnMgYXJlIGFsc28gaGFuZGxlZCwgYnV0IHRoZXNlXG4gICAgLy8gYXJlIHRoZSBvbmVzIHRoYXQgYXJlICpleHBlY3RlZCogdG8gYmUgc2Vlbiwgc28gd2UgZmFzdC1wYXRoXG4gICAgLy8gdGhlbS5cbiAgICBub25Ib3N0Q2hhcnMgPSBbJyUnLCAnLycsICc/JywgJzsnLCAnIyddLmNvbmNhdChhdXRvRXNjYXBlKSxcbiAgICBob3N0RW5kaW5nQ2hhcnMgPSBbJy8nLCAnPycsICcjJ10sXG4gICAgaG9zdG5hbWVNYXhMZW4gPSAyNTUsXG4gICAgaG9zdG5hbWVQYXJ0UGF0dGVybiA9IC9eW2EtejAtOUEtWl8tXXswLDYzfSQvLFxuICAgIGhvc3RuYW1lUGFydFN0YXJ0ID0gL14oW2EtejAtOUEtWl8tXXswLDYzfSkoLiopJC8sXG4gICAgLy8gcHJvdG9jb2xzIHRoYXQgY2FuIGFsbG93IFwidW5zYWZlXCIgYW5kIFwidW53aXNlXCIgY2hhcnMuXG4gICAgdW5zYWZlUHJvdG9jb2wgPSB7XG4gICAgICAnamF2YXNjcmlwdCc6IHRydWUsXG4gICAgICAnamF2YXNjcmlwdDonOiB0cnVlXG4gICAgfSxcbiAgICAvLyBwcm90b2NvbHMgdGhhdCBuZXZlciBoYXZlIGEgaG9zdG5hbWUuXG4gICAgaG9zdGxlc3NQcm90b2NvbCA9IHtcbiAgICAgICdqYXZhc2NyaXB0JzogdHJ1ZSxcbiAgICAgICdqYXZhc2NyaXB0Oic6IHRydWVcbiAgICB9LFxuICAgIC8vIHByb3RvY29scyB0aGF0IGFsd2F5cyBjb250YWluIGEgLy8gYml0LlxuICAgIHNsYXNoZWRQcm90b2NvbCA9IHtcbiAgICAgICdodHRwJzogdHJ1ZSxcbiAgICAgICdodHRwcyc6IHRydWUsXG4gICAgICAnZnRwJzogdHJ1ZSxcbiAgICAgICdnb3BoZXInOiB0cnVlLFxuICAgICAgJ2ZpbGUnOiB0cnVlLFxuICAgICAgJ2h0dHA6JzogdHJ1ZSxcbiAgICAgICdodHRwczonOiB0cnVlLFxuICAgICAgJ2Z0cDonOiB0cnVlLFxuICAgICAgJ2dvcGhlcjonOiB0cnVlLFxuICAgICAgJ2ZpbGU6JzogdHJ1ZVxuICAgIH0sXG4gICAgcXVlcnlzdHJpbmcgPSByZXF1aXJlKCdxdWVyeXN0cmluZycpO1xuXG5mdW5jdGlvbiB1cmxQYXJzZSh1cmwsIHBhcnNlUXVlcnlTdHJpbmcsIHNsYXNoZXNEZW5vdGVIb3N0KSB7XG4gIGlmICh1cmwgJiYgaXNPYmplY3QodXJsKSAmJiB1cmwgaW5zdGFuY2VvZiBVcmwpIHJldHVybiB1cmw7XG5cbiAgdmFyIHUgPSBuZXcgVXJsO1xuICB1LnBhcnNlKHVybCwgcGFyc2VRdWVyeVN0cmluZywgc2xhc2hlc0Rlbm90ZUhvc3QpO1xuICByZXR1cm4gdTtcbn1cblxuVXJsLnByb3RvdHlwZS5wYXJzZSA9IGZ1bmN0aW9uKHVybCwgcGFyc2VRdWVyeVN0cmluZywgc2xhc2hlc0Rlbm90ZUhvc3QpIHtcbiAgaWYgKCFpc1N0cmluZyh1cmwpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlBhcmFtZXRlciAndXJsJyBtdXN0IGJlIGEgc3RyaW5nLCBub3QgXCIgKyB0eXBlb2YgdXJsKTtcbiAgfVxuXG4gIHZhciByZXN0ID0gdXJsO1xuXG4gIC8vIHRyaW0gYmVmb3JlIHByb2NlZWRpbmcuXG4gIC8vIFRoaXMgaXMgdG8gc3VwcG9ydCBwYXJzZSBzdHVmZiBsaWtlIFwiICBodHRwOi8vZm9vLmNvbSAgXFxuXCJcbiAgcmVzdCA9IHJlc3QudHJpbSgpO1xuXG4gIHZhciBwcm90byA9IHByb3RvY29sUGF0dGVybi5leGVjKHJlc3QpO1xuICBpZiAocHJvdG8pIHtcbiAgICBwcm90byA9IHByb3RvWzBdO1xuICAgIHZhciBsb3dlclByb3RvID0gcHJvdG8udG9Mb3dlckNhc2UoKTtcbiAgICB0aGlzLnByb3RvY29sID0gbG93ZXJQcm90bztcbiAgICByZXN0ID0gcmVzdC5zdWJzdHIocHJvdG8ubGVuZ3RoKTtcbiAgfVxuXG4gIC8vIGZpZ3VyZSBvdXQgaWYgaXQncyBnb3QgYSBob3N0XG4gIC8vIHVzZXJAc2VydmVyIGlzICphbHdheXMqIGludGVycHJldGVkIGFzIGEgaG9zdG5hbWUsIGFuZCB1cmxcbiAgLy8gcmVzb2x1dGlvbiB3aWxsIHRyZWF0IC8vZm9vL2JhciBhcyBob3N0PWZvbyxwYXRoPWJhciBiZWNhdXNlIHRoYXQnc1xuICAvLyBob3cgdGhlIGJyb3dzZXIgcmVzb2x2ZXMgcmVsYXRpdmUgVVJMcy5cbiAgaWYgKHNsYXNoZXNEZW5vdGVIb3N0IHx8IHByb3RvIHx8IHJlc3QubWF0Y2goL15cXC9cXC9bXkBcXC9dK0BbXkBcXC9dKy8pKSB7XG4gICAgdmFyIHNsYXNoZXMgPSByZXN0LnN1YnN0cigwLCAyKSA9PT0gJy8vJztcbiAgICBpZiAoc2xhc2hlcyAmJiAhKHByb3RvICYmIGhvc3RsZXNzUHJvdG9jb2xbcHJvdG9dKSkge1xuICAgICAgcmVzdCA9IHJlc3Quc3Vic3RyKDIpO1xuICAgICAgdGhpcy5zbGFzaGVzID0gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICBpZiAoIWhvc3RsZXNzUHJvdG9jb2xbcHJvdG9dICYmXG4gICAgICAoc2xhc2hlcyB8fCAocHJvdG8gJiYgIXNsYXNoZWRQcm90b2NvbFtwcm90b10pKSkge1xuXG4gICAgLy8gdGhlcmUncyBhIGhvc3RuYW1lLlxuICAgIC8vIHRoZSBmaXJzdCBpbnN0YW5jZSBvZiAvLCA/LCA7LCBvciAjIGVuZHMgdGhlIGhvc3QuXG4gICAgLy9cbiAgICAvLyBJZiB0aGVyZSBpcyBhbiBAIGluIHRoZSBob3N0bmFtZSwgdGhlbiBub24taG9zdCBjaGFycyAqYXJlKiBhbGxvd2VkXG4gICAgLy8gdG8gdGhlIGxlZnQgb2YgdGhlIGxhc3QgQCBzaWduLCB1bmxlc3Mgc29tZSBob3N0LWVuZGluZyBjaGFyYWN0ZXJcbiAgICAvLyBjb21lcyAqYmVmb3JlKiB0aGUgQC1zaWduLlxuICAgIC8vIFVSTHMgYXJlIG9ibm94aW91cy5cbiAgICAvL1xuICAgIC8vIGV4OlxuICAgIC8vIGh0dHA6Ly9hQGJAYy8gPT4gdXNlcjphQGIgaG9zdDpjXG4gICAgLy8gaHR0cDovL2FAYj9AYyA9PiB1c2VyOmEgaG9zdDpjIHBhdGg6Lz9AY1xuXG4gICAgLy8gdjAuMTIgVE9ETyhpc2FhY3MpOiBUaGlzIGlzIG5vdCBxdWl0ZSBob3cgQ2hyb21lIGRvZXMgdGhpbmdzLlxuICAgIC8vIFJldmlldyBvdXIgdGVzdCBjYXNlIGFnYWluc3QgYnJvd3NlcnMgbW9yZSBjb21wcmVoZW5zaXZlbHkuXG5cbiAgICAvLyBmaW5kIHRoZSBmaXJzdCBpbnN0YW5jZSBvZiBhbnkgaG9zdEVuZGluZ0NoYXJzXG4gICAgdmFyIGhvc3RFbmQgPSAtMTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGhvc3RFbmRpbmdDaGFycy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGhlYyA9IHJlc3QuaW5kZXhPZihob3N0RW5kaW5nQ2hhcnNbaV0pO1xuICAgICAgaWYgKGhlYyAhPT0gLTEgJiYgKGhvc3RFbmQgPT09IC0xIHx8IGhlYyA8IGhvc3RFbmQpKVxuICAgICAgICBob3N0RW5kID0gaGVjO1xuICAgIH1cblxuICAgIC8vIGF0IHRoaXMgcG9pbnQsIGVpdGhlciB3ZSBoYXZlIGFuIGV4cGxpY2l0IHBvaW50IHdoZXJlIHRoZVxuICAgIC8vIGF1dGggcG9ydGlvbiBjYW5ub3QgZ28gcGFzdCwgb3IgdGhlIGxhc3QgQCBjaGFyIGlzIHRoZSBkZWNpZGVyLlxuICAgIHZhciBhdXRoLCBhdFNpZ247XG4gICAgaWYgKGhvc3RFbmQgPT09IC0xKSB7XG4gICAgICAvLyBhdFNpZ24gY2FuIGJlIGFueXdoZXJlLlxuICAgICAgYXRTaWduID0gcmVzdC5sYXN0SW5kZXhPZignQCcpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBhdFNpZ24gbXVzdCBiZSBpbiBhdXRoIHBvcnRpb24uXG4gICAgICAvLyBodHRwOi8vYUBiL2NAZCA9PiBob3N0OmIgYXV0aDphIHBhdGg6L2NAZFxuICAgICAgYXRTaWduID0gcmVzdC5sYXN0SW5kZXhPZignQCcsIGhvc3RFbmQpO1xuICAgIH1cblxuICAgIC8vIE5vdyB3ZSBoYXZlIGEgcG9ydGlvbiB3aGljaCBpcyBkZWZpbml0ZWx5IHRoZSBhdXRoLlxuICAgIC8vIFB1bGwgdGhhdCBvZmYuXG4gICAgaWYgKGF0U2lnbiAhPT0gLTEpIHtcbiAgICAgIGF1dGggPSByZXN0LnNsaWNlKDAsIGF0U2lnbik7XG4gICAgICByZXN0ID0gcmVzdC5zbGljZShhdFNpZ24gKyAxKTtcbiAgICAgIHRoaXMuYXV0aCA9IGRlY29kZVVSSUNvbXBvbmVudChhdXRoKTtcbiAgICB9XG5cbiAgICAvLyB0aGUgaG9zdCBpcyB0aGUgcmVtYWluaW5nIHRvIHRoZSBsZWZ0IG9mIHRoZSBmaXJzdCBub24taG9zdCBjaGFyXG4gICAgaG9zdEVuZCA9IC0xO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbm9uSG9zdENoYXJzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgaGVjID0gcmVzdC5pbmRleE9mKG5vbkhvc3RDaGFyc1tpXSk7XG4gICAgICBpZiAoaGVjICE9PSAtMSAmJiAoaG9zdEVuZCA9PT0gLTEgfHwgaGVjIDwgaG9zdEVuZCkpXG4gICAgICAgIGhvc3RFbmQgPSBoZWM7XG4gICAgfVxuICAgIC8vIGlmIHdlIHN0aWxsIGhhdmUgbm90IGhpdCBpdCwgdGhlbiB0aGUgZW50aXJlIHRoaW5nIGlzIGEgaG9zdC5cbiAgICBpZiAoaG9zdEVuZCA9PT0gLTEpXG4gICAgICBob3N0RW5kID0gcmVzdC5sZW5ndGg7XG5cbiAgICB0aGlzLmhvc3QgPSByZXN0LnNsaWNlKDAsIGhvc3RFbmQpO1xuICAgIHJlc3QgPSByZXN0LnNsaWNlKGhvc3RFbmQpO1xuXG4gICAgLy8gcHVsbCBvdXQgcG9ydC5cbiAgICB0aGlzLnBhcnNlSG9zdCgpO1xuXG4gICAgLy8gd2UndmUgaW5kaWNhdGVkIHRoYXQgdGhlcmUgaXMgYSBob3N0bmFtZSxcbiAgICAvLyBzbyBldmVuIGlmIGl0J3MgZW1wdHksIGl0IGhhcyB0byBiZSBwcmVzZW50LlxuICAgIHRoaXMuaG9zdG5hbWUgPSB0aGlzLmhvc3RuYW1lIHx8ICcnO1xuXG4gICAgLy8gaWYgaG9zdG5hbWUgYmVnaW5zIHdpdGggWyBhbmQgZW5kcyB3aXRoIF1cbiAgICAvLyBhc3N1bWUgdGhhdCBpdCdzIGFuIElQdjYgYWRkcmVzcy5cbiAgICB2YXIgaXB2Nkhvc3RuYW1lID0gdGhpcy5ob3N0bmFtZVswXSA9PT0gJ1snICYmXG4gICAgICAgIHRoaXMuaG9zdG5hbWVbdGhpcy5ob3N0bmFtZS5sZW5ndGggLSAxXSA9PT0gJ10nO1xuXG4gICAgLy8gdmFsaWRhdGUgYSBsaXR0bGUuXG4gICAgaWYgKCFpcHY2SG9zdG5hbWUpIHtcbiAgICAgIHZhciBob3N0cGFydHMgPSB0aGlzLmhvc3RuYW1lLnNwbGl0KC9cXC4vKTtcbiAgICAgIGZvciAodmFyIGkgPSAwLCBsID0gaG9zdHBhcnRzLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgICAgICB2YXIgcGFydCA9IGhvc3RwYXJ0c1tpXTtcbiAgICAgICAgaWYgKCFwYXJ0KSBjb250aW51ZTtcbiAgICAgICAgaWYgKCFwYXJ0Lm1hdGNoKGhvc3RuYW1lUGFydFBhdHRlcm4pKSB7XG4gICAgICAgICAgdmFyIG5ld3BhcnQgPSAnJztcbiAgICAgICAgICBmb3IgKHZhciBqID0gMCwgayA9IHBhcnQubGVuZ3RoOyBqIDwgazsgaisrKSB7XG4gICAgICAgICAgICBpZiAocGFydC5jaGFyQ29kZUF0KGopID4gMTI3KSB7XG4gICAgICAgICAgICAgIC8vIHdlIHJlcGxhY2Ugbm9uLUFTQ0lJIGNoYXIgd2l0aCBhIHRlbXBvcmFyeSBwbGFjZWhvbGRlclxuICAgICAgICAgICAgICAvLyB3ZSBuZWVkIHRoaXMgdG8gbWFrZSBzdXJlIHNpemUgb2YgaG9zdG5hbWUgaXMgbm90XG4gICAgICAgICAgICAgIC8vIGJyb2tlbiBieSByZXBsYWNpbmcgbm9uLUFTQ0lJIGJ5IG5vdGhpbmdcbiAgICAgICAgICAgICAgbmV3cGFydCArPSAneCc7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBuZXdwYXJ0ICs9IHBhcnRbal07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIC8vIHdlIHRlc3QgYWdhaW4gd2l0aCBBU0NJSSBjaGFyIG9ubHlcbiAgICAgICAgICBpZiAoIW5ld3BhcnQubWF0Y2goaG9zdG5hbWVQYXJ0UGF0dGVybikpIHtcbiAgICAgICAgICAgIHZhciB2YWxpZFBhcnRzID0gaG9zdHBhcnRzLnNsaWNlKDAsIGkpO1xuICAgICAgICAgICAgdmFyIG5vdEhvc3QgPSBob3N0cGFydHMuc2xpY2UoaSArIDEpO1xuICAgICAgICAgICAgdmFyIGJpdCA9IHBhcnQubWF0Y2goaG9zdG5hbWVQYXJ0U3RhcnQpO1xuICAgICAgICAgICAgaWYgKGJpdCkge1xuICAgICAgICAgICAgICB2YWxpZFBhcnRzLnB1c2goYml0WzFdKTtcbiAgICAgICAgICAgICAgbm90SG9zdC51bnNoaWZ0KGJpdFsyXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAobm90SG9zdC5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgcmVzdCA9ICcvJyArIG5vdEhvc3Quam9pbignLicpICsgcmVzdDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuaG9zdG5hbWUgPSB2YWxpZFBhcnRzLmpvaW4oJy4nKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0aGlzLmhvc3RuYW1lLmxlbmd0aCA+IGhvc3RuYW1lTWF4TGVuKSB7XG4gICAgICB0aGlzLmhvc3RuYW1lID0gJyc7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIGhvc3RuYW1lcyBhcmUgYWx3YXlzIGxvd2VyIGNhc2UuXG4gICAgICB0aGlzLmhvc3RuYW1lID0gdGhpcy5ob3N0bmFtZS50b0xvd2VyQ2FzZSgpO1xuICAgIH1cblxuICAgIGlmICghaXB2Nkhvc3RuYW1lKSB7XG4gICAgICAvLyBJRE5BIFN1cHBvcnQ6IFJldHVybnMgYSBwdW55IGNvZGVkIHJlcHJlc2VudGF0aW9uIG9mIFwiZG9tYWluXCIuXG4gICAgICAvLyBJdCBvbmx5IGNvbnZlcnRzIHRoZSBwYXJ0IG9mIHRoZSBkb21haW4gbmFtZSB0aGF0XG4gICAgICAvLyBoYXMgbm9uIEFTQ0lJIGNoYXJhY3RlcnMuIEkuZS4gaXQgZG9zZW50IG1hdHRlciBpZlxuICAgICAgLy8geW91IGNhbGwgaXQgd2l0aCBhIGRvbWFpbiB0aGF0IGFscmVhZHkgaXMgaW4gQVNDSUkuXG4gICAgICB2YXIgZG9tYWluQXJyYXkgPSB0aGlzLmhvc3RuYW1lLnNwbGl0KCcuJyk7XG4gICAgICB2YXIgbmV3T3V0ID0gW107XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGRvbWFpbkFycmF5Lmxlbmd0aDsgKytpKSB7XG4gICAgICAgIHZhciBzID0gZG9tYWluQXJyYXlbaV07XG4gICAgICAgIG5ld091dC5wdXNoKHMubWF0Y2goL1teQS1aYS16MC05Xy1dLykgP1xuICAgICAgICAgICAgJ3huLS0nICsgcHVueWNvZGUuZW5jb2RlKHMpIDogcyk7XG4gICAgICB9XG4gICAgICB0aGlzLmhvc3RuYW1lID0gbmV3T3V0LmpvaW4oJy4nKTtcbiAgICB9XG5cbiAgICB2YXIgcCA9IHRoaXMucG9ydCA/ICc6JyArIHRoaXMucG9ydCA6ICcnO1xuICAgIHZhciBoID0gdGhpcy5ob3N0bmFtZSB8fCAnJztcbiAgICB0aGlzLmhvc3QgPSBoICsgcDtcbiAgICB0aGlzLmhyZWYgKz0gdGhpcy5ob3N0O1xuXG4gICAgLy8gc3RyaXAgWyBhbmQgXSBmcm9tIHRoZSBob3N0bmFtZVxuICAgIC8vIHRoZSBob3N0IGZpZWxkIHN0aWxsIHJldGFpbnMgdGhlbSwgdGhvdWdoXG4gICAgaWYgKGlwdjZIb3N0bmFtZSkge1xuICAgICAgdGhpcy5ob3N0bmFtZSA9IHRoaXMuaG9zdG5hbWUuc3Vic3RyKDEsIHRoaXMuaG9zdG5hbWUubGVuZ3RoIC0gMik7XG4gICAgICBpZiAocmVzdFswXSAhPT0gJy8nKSB7XG4gICAgICAgIHJlc3QgPSAnLycgKyByZXN0O1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIG5vdyByZXN0IGlzIHNldCB0byB0aGUgcG9zdC1ob3N0IHN0dWZmLlxuICAvLyBjaG9wIG9mZiBhbnkgZGVsaW0gY2hhcnMuXG4gIGlmICghdW5zYWZlUHJvdG9jb2xbbG93ZXJQcm90b10pIHtcblxuICAgIC8vIEZpcnN0LCBtYWtlIDEwMCUgc3VyZSB0aGF0IGFueSBcImF1dG9Fc2NhcGVcIiBjaGFycyBnZXRcbiAgICAvLyBlc2NhcGVkLCBldmVuIGlmIGVuY29kZVVSSUNvbXBvbmVudCBkb2Vzbid0IHRoaW5rIHRoZXlcbiAgICAvLyBuZWVkIHRvIGJlLlxuICAgIGZvciAodmFyIGkgPSAwLCBsID0gYXV0b0VzY2FwZS5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICAgIHZhciBhZSA9IGF1dG9Fc2NhcGVbaV07XG4gICAgICB2YXIgZXNjID0gZW5jb2RlVVJJQ29tcG9uZW50KGFlKTtcbiAgICAgIGlmIChlc2MgPT09IGFlKSB7XG4gICAgICAgIGVzYyA9IGVzY2FwZShhZSk7XG4gICAgICB9XG4gICAgICByZXN0ID0gcmVzdC5zcGxpdChhZSkuam9pbihlc2MpO1xuICAgIH1cbiAgfVxuXG5cbiAgLy8gY2hvcCBvZmYgZnJvbSB0aGUgdGFpbCBmaXJzdC5cbiAgdmFyIGhhc2ggPSByZXN0LmluZGV4T2YoJyMnKTtcbiAgaWYgKGhhc2ggIT09IC0xKSB7XG4gICAgLy8gZ290IGEgZnJhZ21lbnQgc3RyaW5nLlxuICAgIHRoaXMuaGFzaCA9IHJlc3Quc3Vic3RyKGhhc2gpO1xuICAgIHJlc3QgPSByZXN0LnNsaWNlKDAsIGhhc2gpO1xuICB9XG4gIHZhciBxbSA9IHJlc3QuaW5kZXhPZignPycpO1xuICBpZiAocW0gIT09IC0xKSB7XG4gICAgdGhpcy5zZWFyY2ggPSByZXN0LnN1YnN0cihxbSk7XG4gICAgdGhpcy5xdWVyeSA9IHJlc3Quc3Vic3RyKHFtICsgMSk7XG4gICAgaWYgKHBhcnNlUXVlcnlTdHJpbmcpIHtcbiAgICAgIHRoaXMucXVlcnkgPSBxdWVyeXN0cmluZy5wYXJzZSh0aGlzLnF1ZXJ5KTtcbiAgICB9XG4gICAgcmVzdCA9IHJlc3Quc2xpY2UoMCwgcW0pO1xuICB9IGVsc2UgaWYgKHBhcnNlUXVlcnlTdHJpbmcpIHtcbiAgICAvLyBubyBxdWVyeSBzdHJpbmcsIGJ1dCBwYXJzZVF1ZXJ5U3RyaW5nIHN0aWxsIHJlcXVlc3RlZFxuICAgIHRoaXMuc2VhcmNoID0gJyc7XG4gICAgdGhpcy5xdWVyeSA9IHt9O1xuICB9XG4gIGlmIChyZXN0KSB0aGlzLnBhdGhuYW1lID0gcmVzdDtcbiAgaWYgKHNsYXNoZWRQcm90b2NvbFtsb3dlclByb3RvXSAmJlxuICAgICAgdGhpcy5ob3N0bmFtZSAmJiAhdGhpcy5wYXRobmFtZSkge1xuICAgIHRoaXMucGF0aG5hbWUgPSAnLyc7XG4gIH1cblxuICAvL3RvIHN1cHBvcnQgaHR0cC5yZXF1ZXN0XG4gIGlmICh0aGlzLnBhdGhuYW1lIHx8IHRoaXMuc2VhcmNoKSB7XG4gICAgdmFyIHAgPSB0aGlzLnBhdGhuYW1lIHx8ICcnO1xuICAgIHZhciBzID0gdGhpcy5zZWFyY2ggfHwgJyc7XG4gICAgdGhpcy5wYXRoID0gcCArIHM7XG4gIH1cblxuICAvLyBmaW5hbGx5LCByZWNvbnN0cnVjdCB0aGUgaHJlZiBiYXNlZCBvbiB3aGF0IGhhcyBiZWVuIHZhbGlkYXRlZC5cbiAgdGhpcy5ocmVmID0gdGhpcy5mb3JtYXQoKTtcbiAgcmV0dXJuIHRoaXM7XG59O1xuXG4vLyBmb3JtYXQgYSBwYXJzZWQgb2JqZWN0IGludG8gYSB1cmwgc3RyaW5nXG5mdW5jdGlvbiB1cmxGb3JtYXQob2JqKSB7XG4gIC8vIGVuc3VyZSBpdCdzIGFuIG9iamVjdCwgYW5kIG5vdCBhIHN0cmluZyB1cmwuXG4gIC8vIElmIGl0J3MgYW4gb2JqLCB0aGlzIGlzIGEgbm8tb3AuXG4gIC8vIHRoaXMgd2F5LCB5b3UgY2FuIGNhbGwgdXJsX2Zvcm1hdCgpIG9uIHN0cmluZ3NcbiAgLy8gdG8gY2xlYW4gdXAgcG90ZW50aWFsbHkgd29ua3kgdXJscy5cbiAgaWYgKGlzU3RyaW5nKG9iaikpIG9iaiA9IHVybFBhcnNlKG9iaik7XG4gIGlmICghKG9iaiBpbnN0YW5jZW9mIFVybCkpIHJldHVybiBVcmwucHJvdG90eXBlLmZvcm1hdC5jYWxsKG9iaik7XG4gIHJldHVybiBvYmouZm9ybWF0KCk7XG59XG5cblVybC5wcm90b3R5cGUuZm9ybWF0ID0gZnVuY3Rpb24oKSB7XG4gIHZhciBhdXRoID0gdGhpcy5hdXRoIHx8ICcnO1xuICBpZiAoYXV0aCkge1xuICAgIGF1dGggPSBlbmNvZGVVUklDb21wb25lbnQoYXV0aCk7XG4gICAgYXV0aCA9IGF1dGgucmVwbGFjZSgvJTNBL2ksICc6Jyk7XG4gICAgYXV0aCArPSAnQCc7XG4gIH1cblxuICB2YXIgcHJvdG9jb2wgPSB0aGlzLnByb3RvY29sIHx8ICcnLFxuICAgICAgcGF0aG5hbWUgPSB0aGlzLnBhdGhuYW1lIHx8ICcnLFxuICAgICAgaGFzaCA9IHRoaXMuaGFzaCB8fCAnJyxcbiAgICAgIGhvc3QgPSBmYWxzZSxcbiAgICAgIHF1ZXJ5ID0gJyc7XG5cbiAgaWYgKHRoaXMuaG9zdCkge1xuICAgIGhvc3QgPSBhdXRoICsgdGhpcy5ob3N0O1xuICB9IGVsc2UgaWYgKHRoaXMuaG9zdG5hbWUpIHtcbiAgICBob3N0ID0gYXV0aCArICh0aGlzLmhvc3RuYW1lLmluZGV4T2YoJzonKSA9PT0gLTEgP1xuICAgICAgICB0aGlzLmhvc3RuYW1lIDpcbiAgICAgICAgJ1snICsgdGhpcy5ob3N0bmFtZSArICddJyk7XG4gICAgaWYgKHRoaXMucG9ydCkge1xuICAgICAgaG9zdCArPSAnOicgKyB0aGlzLnBvcnQ7XG4gICAgfVxuICB9XG5cbiAgaWYgKHRoaXMucXVlcnkgJiZcbiAgICAgIGlzT2JqZWN0KHRoaXMucXVlcnkpICYmXG4gICAgICBPYmplY3Qua2V5cyh0aGlzLnF1ZXJ5KS5sZW5ndGgpIHtcbiAgICBxdWVyeSA9IHF1ZXJ5c3RyaW5nLnN0cmluZ2lmeSh0aGlzLnF1ZXJ5KTtcbiAgfVxuXG4gIHZhciBzZWFyY2ggPSB0aGlzLnNlYXJjaCB8fCAocXVlcnkgJiYgKCc/JyArIHF1ZXJ5KSkgfHwgJyc7XG5cbiAgaWYgKHByb3RvY29sICYmIHByb3RvY29sLnN1YnN0cigtMSkgIT09ICc6JykgcHJvdG9jb2wgKz0gJzonO1xuXG4gIC8vIG9ubHkgdGhlIHNsYXNoZWRQcm90b2NvbHMgZ2V0IHRoZSAvLy4gIE5vdCBtYWlsdG86LCB4bXBwOiwgZXRjLlxuICAvLyB1bmxlc3MgdGhleSBoYWQgdGhlbSB0byBiZWdpbiB3aXRoLlxuICBpZiAodGhpcy5zbGFzaGVzIHx8XG4gICAgICAoIXByb3RvY29sIHx8IHNsYXNoZWRQcm90b2NvbFtwcm90b2NvbF0pICYmIGhvc3QgIT09IGZhbHNlKSB7XG4gICAgaG9zdCA9ICcvLycgKyAoaG9zdCB8fCAnJyk7XG4gICAgaWYgKHBhdGhuYW1lICYmIHBhdGhuYW1lLmNoYXJBdCgwKSAhPT0gJy8nKSBwYXRobmFtZSA9ICcvJyArIHBhdGhuYW1lO1xuICB9IGVsc2UgaWYgKCFob3N0KSB7XG4gICAgaG9zdCA9ICcnO1xuICB9XG5cbiAgaWYgKGhhc2ggJiYgaGFzaC5jaGFyQXQoMCkgIT09ICcjJykgaGFzaCA9ICcjJyArIGhhc2g7XG4gIGlmIChzZWFyY2ggJiYgc2VhcmNoLmNoYXJBdCgwKSAhPT0gJz8nKSBzZWFyY2ggPSAnPycgKyBzZWFyY2g7XG5cbiAgcGF0aG5hbWUgPSBwYXRobmFtZS5yZXBsYWNlKC9bPyNdL2csIGZ1bmN0aW9uKG1hdGNoKSB7XG4gICAgcmV0dXJuIGVuY29kZVVSSUNvbXBvbmVudChtYXRjaCk7XG4gIH0pO1xuICBzZWFyY2ggPSBzZWFyY2gucmVwbGFjZSgnIycsICclMjMnKTtcblxuICByZXR1cm4gcHJvdG9jb2wgKyBob3N0ICsgcGF0aG5hbWUgKyBzZWFyY2ggKyBoYXNoO1xufTtcblxuZnVuY3Rpb24gdXJsUmVzb2x2ZShzb3VyY2UsIHJlbGF0aXZlKSB7XG4gIHJldHVybiB1cmxQYXJzZShzb3VyY2UsIGZhbHNlLCB0cnVlKS5yZXNvbHZlKHJlbGF0aXZlKTtcbn1cblxuVXJsLnByb3RvdHlwZS5yZXNvbHZlID0gZnVuY3Rpb24ocmVsYXRpdmUpIHtcbiAgcmV0dXJuIHRoaXMucmVzb2x2ZU9iamVjdCh1cmxQYXJzZShyZWxhdGl2ZSwgZmFsc2UsIHRydWUpKS5mb3JtYXQoKTtcbn07XG5cbmZ1bmN0aW9uIHVybFJlc29sdmVPYmplY3Qoc291cmNlLCByZWxhdGl2ZSkge1xuICBpZiAoIXNvdXJjZSkgcmV0dXJuIHJlbGF0aXZlO1xuICByZXR1cm4gdXJsUGFyc2Uoc291cmNlLCBmYWxzZSwgdHJ1ZSkucmVzb2x2ZU9iamVjdChyZWxhdGl2ZSk7XG59XG5cblVybC5wcm90b3R5cGUucmVzb2x2ZU9iamVjdCA9IGZ1bmN0aW9uKHJlbGF0aXZlKSB7XG4gIGlmIChpc1N0cmluZyhyZWxhdGl2ZSkpIHtcbiAgICB2YXIgcmVsID0gbmV3IFVybCgpO1xuICAgIHJlbC5wYXJzZShyZWxhdGl2ZSwgZmFsc2UsIHRydWUpO1xuICAgIHJlbGF0aXZlID0gcmVsO1xuICB9XG5cbiAgdmFyIHJlc3VsdCA9IG5ldyBVcmwoKTtcbiAgT2JqZWN0LmtleXModGhpcykuZm9yRWFjaChmdW5jdGlvbihrKSB7XG4gICAgcmVzdWx0W2tdID0gdGhpc1trXTtcbiAgfSwgdGhpcyk7XG5cbiAgLy8gaGFzaCBpcyBhbHdheXMgb3ZlcnJpZGRlbiwgbm8gbWF0dGVyIHdoYXQuXG4gIC8vIGV2ZW4gaHJlZj1cIlwiIHdpbGwgcmVtb3ZlIGl0LlxuICByZXN1bHQuaGFzaCA9IHJlbGF0aXZlLmhhc2g7XG5cbiAgLy8gaWYgdGhlIHJlbGF0aXZlIHVybCBpcyBlbXB0eSwgdGhlbiB0aGVyZSdzIG5vdGhpbmcgbGVmdCB0byBkbyBoZXJlLlxuICBpZiAocmVsYXRpdmUuaHJlZiA9PT0gJycpIHtcbiAgICByZXN1bHQuaHJlZiA9IHJlc3VsdC5mb3JtYXQoKTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgLy8gaHJlZnMgbGlrZSAvL2Zvby9iYXIgYWx3YXlzIGN1dCB0byB0aGUgcHJvdG9jb2wuXG4gIGlmIChyZWxhdGl2ZS5zbGFzaGVzICYmICFyZWxhdGl2ZS5wcm90b2NvbCkge1xuICAgIC8vIHRha2UgZXZlcnl0aGluZyBleGNlcHQgdGhlIHByb3RvY29sIGZyb20gcmVsYXRpdmVcbiAgICBPYmplY3Qua2V5cyhyZWxhdGl2ZSkuZm9yRWFjaChmdW5jdGlvbihrKSB7XG4gICAgICBpZiAoayAhPT0gJ3Byb3RvY29sJylcbiAgICAgICAgcmVzdWx0W2tdID0gcmVsYXRpdmVba107XG4gICAgfSk7XG5cbiAgICAvL3VybFBhcnNlIGFwcGVuZHMgdHJhaWxpbmcgLyB0byB1cmxzIGxpa2UgaHR0cDovL3d3dy5leGFtcGxlLmNvbVxuICAgIGlmIChzbGFzaGVkUHJvdG9jb2xbcmVzdWx0LnByb3RvY29sXSAmJlxuICAgICAgICByZXN1bHQuaG9zdG5hbWUgJiYgIXJlc3VsdC5wYXRobmFtZSkge1xuICAgICAgcmVzdWx0LnBhdGggPSByZXN1bHQucGF0aG5hbWUgPSAnLyc7XG4gICAgfVxuXG4gICAgcmVzdWx0LmhyZWYgPSByZXN1bHQuZm9ybWF0KCk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIGlmIChyZWxhdGl2ZS5wcm90b2NvbCAmJiByZWxhdGl2ZS5wcm90b2NvbCAhPT0gcmVzdWx0LnByb3RvY29sKSB7XG4gICAgLy8gaWYgaXQncyBhIGtub3duIHVybCBwcm90b2NvbCwgdGhlbiBjaGFuZ2luZ1xuICAgIC8vIHRoZSBwcm90b2NvbCBkb2VzIHdlaXJkIHRoaW5nc1xuICAgIC8vIGZpcnN0LCBpZiBpdCdzIG5vdCBmaWxlOiwgdGhlbiB3ZSBNVVNUIGhhdmUgYSBob3N0LFxuICAgIC8vIGFuZCBpZiB0aGVyZSB3YXMgYSBwYXRoXG4gICAgLy8gdG8gYmVnaW4gd2l0aCwgdGhlbiB3ZSBNVVNUIGhhdmUgYSBwYXRoLlxuICAgIC8vIGlmIGl0IGlzIGZpbGU6LCB0aGVuIHRoZSBob3N0IGlzIGRyb3BwZWQsXG4gICAgLy8gYmVjYXVzZSB0aGF0J3Mga25vd24gdG8gYmUgaG9zdGxlc3MuXG4gICAgLy8gYW55dGhpbmcgZWxzZSBpcyBhc3N1bWVkIHRvIGJlIGFic29sdXRlLlxuICAgIGlmICghc2xhc2hlZFByb3RvY29sW3JlbGF0aXZlLnByb3RvY29sXSkge1xuICAgICAgT2JqZWN0LmtleXMocmVsYXRpdmUpLmZvckVhY2goZnVuY3Rpb24oaykge1xuICAgICAgICByZXN1bHRba10gPSByZWxhdGl2ZVtrXTtcbiAgICAgIH0pO1xuICAgICAgcmVzdWx0LmhyZWYgPSByZXN1bHQuZm9ybWF0KCk7XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIHJlc3VsdC5wcm90b2NvbCA9IHJlbGF0aXZlLnByb3RvY29sO1xuICAgIGlmICghcmVsYXRpdmUuaG9zdCAmJiAhaG9zdGxlc3NQcm90b2NvbFtyZWxhdGl2ZS5wcm90b2NvbF0pIHtcbiAgICAgIHZhciByZWxQYXRoID0gKHJlbGF0aXZlLnBhdGhuYW1lIHx8ICcnKS5zcGxpdCgnLycpO1xuICAgICAgd2hpbGUgKHJlbFBhdGgubGVuZ3RoICYmICEocmVsYXRpdmUuaG9zdCA9IHJlbFBhdGguc2hpZnQoKSkpO1xuICAgICAgaWYgKCFyZWxhdGl2ZS5ob3N0KSByZWxhdGl2ZS5ob3N0ID0gJyc7XG4gICAgICBpZiAoIXJlbGF0aXZlLmhvc3RuYW1lKSByZWxhdGl2ZS5ob3N0bmFtZSA9ICcnO1xuICAgICAgaWYgKHJlbFBhdGhbMF0gIT09ICcnKSByZWxQYXRoLnVuc2hpZnQoJycpO1xuICAgICAgaWYgKHJlbFBhdGgubGVuZ3RoIDwgMikgcmVsUGF0aC51bnNoaWZ0KCcnKTtcbiAgICAgIHJlc3VsdC5wYXRobmFtZSA9IHJlbFBhdGguam9pbignLycpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXN1bHQucGF0aG5hbWUgPSByZWxhdGl2ZS5wYXRobmFtZTtcbiAgICB9XG4gICAgcmVzdWx0LnNlYXJjaCA9IHJlbGF0aXZlLnNlYXJjaDtcbiAgICByZXN1bHQucXVlcnkgPSByZWxhdGl2ZS5xdWVyeTtcbiAgICByZXN1bHQuaG9zdCA9IHJlbGF0aXZlLmhvc3QgfHwgJyc7XG4gICAgcmVzdWx0LmF1dGggPSByZWxhdGl2ZS5hdXRoO1xuICAgIHJlc3VsdC5ob3N0bmFtZSA9IHJlbGF0aXZlLmhvc3RuYW1lIHx8IHJlbGF0aXZlLmhvc3Q7XG4gICAgcmVzdWx0LnBvcnQgPSByZWxhdGl2ZS5wb3J0O1xuICAgIC8vIHRvIHN1cHBvcnQgaHR0cC5yZXF1ZXN0XG4gICAgaWYgKHJlc3VsdC5wYXRobmFtZSB8fCByZXN1bHQuc2VhcmNoKSB7XG4gICAgICB2YXIgcCA9IHJlc3VsdC5wYXRobmFtZSB8fCAnJztcbiAgICAgIHZhciBzID0gcmVzdWx0LnNlYXJjaCB8fCAnJztcbiAgICAgIHJlc3VsdC5wYXRoID0gcCArIHM7XG4gICAgfVxuICAgIHJlc3VsdC5zbGFzaGVzID0gcmVzdWx0LnNsYXNoZXMgfHwgcmVsYXRpdmUuc2xhc2hlcztcbiAgICByZXN1bHQuaHJlZiA9IHJlc3VsdC5mb3JtYXQoKTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgdmFyIGlzU291cmNlQWJzID0gKHJlc3VsdC5wYXRobmFtZSAmJiByZXN1bHQucGF0aG5hbWUuY2hhckF0KDApID09PSAnLycpLFxuICAgICAgaXNSZWxBYnMgPSAoXG4gICAgICAgICAgcmVsYXRpdmUuaG9zdCB8fFxuICAgICAgICAgIHJlbGF0aXZlLnBhdGhuYW1lICYmIHJlbGF0aXZlLnBhdGhuYW1lLmNoYXJBdCgwKSA9PT0gJy8nXG4gICAgICApLFxuICAgICAgbXVzdEVuZEFicyA9IChpc1JlbEFicyB8fCBpc1NvdXJjZUFicyB8fFxuICAgICAgICAgICAgICAgICAgICAocmVzdWx0Lmhvc3QgJiYgcmVsYXRpdmUucGF0aG5hbWUpKSxcbiAgICAgIHJlbW92ZUFsbERvdHMgPSBtdXN0RW5kQWJzLFxuICAgICAgc3JjUGF0aCA9IHJlc3VsdC5wYXRobmFtZSAmJiByZXN1bHQucGF0aG5hbWUuc3BsaXQoJy8nKSB8fCBbXSxcbiAgICAgIHJlbFBhdGggPSByZWxhdGl2ZS5wYXRobmFtZSAmJiByZWxhdGl2ZS5wYXRobmFtZS5zcGxpdCgnLycpIHx8IFtdLFxuICAgICAgcHN5Y2hvdGljID0gcmVzdWx0LnByb3RvY29sICYmICFzbGFzaGVkUHJvdG9jb2xbcmVzdWx0LnByb3RvY29sXTtcblxuICAvLyBpZiB0aGUgdXJsIGlzIGEgbm9uLXNsYXNoZWQgdXJsLCB0aGVuIHJlbGF0aXZlXG4gIC8vIGxpbmtzIGxpa2UgLi4vLi4gc2hvdWxkIGJlIGFibGVcbiAgLy8gdG8gY3Jhd2wgdXAgdG8gdGhlIGhvc3RuYW1lLCBhcyB3ZWxsLiAgVGhpcyBpcyBzdHJhbmdlLlxuICAvLyByZXN1bHQucHJvdG9jb2wgaGFzIGFscmVhZHkgYmVlbiBzZXQgYnkgbm93LlxuICAvLyBMYXRlciBvbiwgcHV0IHRoZSBmaXJzdCBwYXRoIHBhcnQgaW50byB0aGUgaG9zdCBmaWVsZC5cbiAgaWYgKHBzeWNob3RpYykge1xuICAgIHJlc3VsdC5ob3N0bmFtZSA9ICcnO1xuICAgIHJlc3VsdC5wb3J0ID0gbnVsbDtcbiAgICBpZiAocmVzdWx0Lmhvc3QpIHtcbiAgICAgIGlmIChzcmNQYXRoWzBdID09PSAnJykgc3JjUGF0aFswXSA9IHJlc3VsdC5ob3N0O1xuICAgICAgZWxzZSBzcmNQYXRoLnVuc2hpZnQocmVzdWx0Lmhvc3QpO1xuICAgIH1cbiAgICByZXN1bHQuaG9zdCA9ICcnO1xuICAgIGlmIChyZWxhdGl2ZS5wcm90b2NvbCkge1xuICAgICAgcmVsYXRpdmUuaG9zdG5hbWUgPSBudWxsO1xuICAgICAgcmVsYXRpdmUucG9ydCA9IG51bGw7XG4gICAgICBpZiAocmVsYXRpdmUuaG9zdCkge1xuICAgICAgICBpZiAocmVsUGF0aFswXSA9PT0gJycpIHJlbFBhdGhbMF0gPSByZWxhdGl2ZS5ob3N0O1xuICAgICAgICBlbHNlIHJlbFBhdGgudW5zaGlmdChyZWxhdGl2ZS5ob3N0KTtcbiAgICAgIH1cbiAgICAgIHJlbGF0aXZlLmhvc3QgPSBudWxsO1xuICAgIH1cbiAgICBtdXN0RW5kQWJzID0gbXVzdEVuZEFicyAmJiAocmVsUGF0aFswXSA9PT0gJycgfHwgc3JjUGF0aFswXSA9PT0gJycpO1xuICB9XG5cbiAgaWYgKGlzUmVsQWJzKSB7XG4gICAgLy8gaXQncyBhYnNvbHV0ZS5cbiAgICByZXN1bHQuaG9zdCA9IChyZWxhdGl2ZS5ob3N0IHx8IHJlbGF0aXZlLmhvc3QgPT09ICcnKSA/XG4gICAgICAgICAgICAgICAgICByZWxhdGl2ZS5ob3N0IDogcmVzdWx0Lmhvc3Q7XG4gICAgcmVzdWx0Lmhvc3RuYW1lID0gKHJlbGF0aXZlLmhvc3RuYW1lIHx8IHJlbGF0aXZlLmhvc3RuYW1lID09PSAnJykgP1xuICAgICAgICAgICAgICAgICAgICAgIHJlbGF0aXZlLmhvc3RuYW1lIDogcmVzdWx0Lmhvc3RuYW1lO1xuICAgIHJlc3VsdC5zZWFyY2ggPSByZWxhdGl2ZS5zZWFyY2g7XG4gICAgcmVzdWx0LnF1ZXJ5ID0gcmVsYXRpdmUucXVlcnk7XG4gICAgc3JjUGF0aCA9IHJlbFBhdGg7XG4gICAgLy8gZmFsbCB0aHJvdWdoIHRvIHRoZSBkb3QtaGFuZGxpbmcgYmVsb3cuXG4gIH0gZWxzZSBpZiAocmVsUGF0aC5sZW5ndGgpIHtcbiAgICAvLyBpdCdzIHJlbGF0aXZlXG4gICAgLy8gdGhyb3cgYXdheSB0aGUgZXhpc3RpbmcgZmlsZSwgYW5kIHRha2UgdGhlIG5ldyBwYXRoIGluc3RlYWQuXG4gICAgaWYgKCFzcmNQYXRoKSBzcmNQYXRoID0gW107XG4gICAgc3JjUGF0aC5wb3AoKTtcbiAgICBzcmNQYXRoID0gc3JjUGF0aC5jb25jYXQocmVsUGF0aCk7XG4gICAgcmVzdWx0LnNlYXJjaCA9IHJlbGF0aXZlLnNlYXJjaDtcbiAgICByZXN1bHQucXVlcnkgPSByZWxhdGl2ZS5xdWVyeTtcbiAgfSBlbHNlIGlmICghaXNOdWxsT3JVbmRlZmluZWQocmVsYXRpdmUuc2VhcmNoKSkge1xuICAgIC8vIGp1c3QgcHVsbCBvdXQgdGhlIHNlYXJjaC5cbiAgICAvLyBsaWtlIGhyZWY9Jz9mb28nLlxuICAgIC8vIFB1dCB0aGlzIGFmdGVyIHRoZSBvdGhlciB0d28gY2FzZXMgYmVjYXVzZSBpdCBzaW1wbGlmaWVzIHRoZSBib29sZWFuc1xuICAgIGlmIChwc3ljaG90aWMpIHtcbiAgICAgIHJlc3VsdC5ob3N0bmFtZSA9IHJlc3VsdC5ob3N0ID0gc3JjUGF0aC5zaGlmdCgpO1xuICAgICAgLy9vY2NhdGlvbmFseSB0aGUgYXV0aCBjYW4gZ2V0IHN0dWNrIG9ubHkgaW4gaG9zdFxuICAgICAgLy90aGlzIGVzcGVjaWFseSBoYXBwZW5zIGluIGNhc2VzIGxpa2VcbiAgICAgIC8vdXJsLnJlc29sdmVPYmplY3QoJ21haWx0bzpsb2NhbDFAZG9tYWluMScsICdsb2NhbDJAZG9tYWluMicpXG4gICAgICB2YXIgYXV0aEluSG9zdCA9IHJlc3VsdC5ob3N0ICYmIHJlc3VsdC5ob3N0LmluZGV4T2YoJ0AnKSA+IDAgP1xuICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQuaG9zdC5zcGxpdCgnQCcpIDogZmFsc2U7XG4gICAgICBpZiAoYXV0aEluSG9zdCkge1xuICAgICAgICByZXN1bHQuYXV0aCA9IGF1dGhJbkhvc3Quc2hpZnQoKTtcbiAgICAgICAgcmVzdWx0Lmhvc3QgPSByZXN1bHQuaG9zdG5hbWUgPSBhdXRoSW5Ib3N0LnNoaWZ0KCk7XG4gICAgICB9XG4gICAgfVxuICAgIHJlc3VsdC5zZWFyY2ggPSByZWxhdGl2ZS5zZWFyY2g7XG4gICAgcmVzdWx0LnF1ZXJ5ID0gcmVsYXRpdmUucXVlcnk7XG4gICAgLy90byBzdXBwb3J0IGh0dHAucmVxdWVzdFxuICAgIGlmICghaXNOdWxsKHJlc3VsdC5wYXRobmFtZSkgfHwgIWlzTnVsbChyZXN1bHQuc2VhcmNoKSkge1xuICAgICAgcmVzdWx0LnBhdGggPSAocmVzdWx0LnBhdGhuYW1lID8gcmVzdWx0LnBhdGhuYW1lIDogJycpICtcbiAgICAgICAgICAgICAgICAgICAgKHJlc3VsdC5zZWFyY2ggPyByZXN1bHQuc2VhcmNoIDogJycpO1xuICAgIH1cbiAgICByZXN1bHQuaHJlZiA9IHJlc3VsdC5mb3JtYXQoKTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgaWYgKCFzcmNQYXRoLmxlbmd0aCkge1xuICAgIC8vIG5vIHBhdGggYXQgYWxsLiAgZWFzeS5cbiAgICAvLyB3ZSd2ZSBhbHJlYWR5IGhhbmRsZWQgdGhlIG90aGVyIHN0dWZmIGFib3ZlLlxuICAgIHJlc3VsdC5wYXRobmFtZSA9IG51bGw7XG4gICAgLy90byBzdXBwb3J0IGh0dHAucmVxdWVzdFxuICAgIGlmIChyZXN1bHQuc2VhcmNoKSB7XG4gICAgICByZXN1bHQucGF0aCA9ICcvJyArIHJlc3VsdC5zZWFyY2g7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJlc3VsdC5wYXRoID0gbnVsbDtcbiAgICB9XG4gICAgcmVzdWx0LmhyZWYgPSByZXN1bHQuZm9ybWF0KCk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIC8vIGlmIGEgdXJsIEVORHMgaW4gLiBvciAuLiwgdGhlbiBpdCBtdXN0IGdldCBhIHRyYWlsaW5nIHNsYXNoLlxuICAvLyBob3dldmVyLCBpZiBpdCBlbmRzIGluIGFueXRoaW5nIGVsc2Ugbm9uLXNsYXNoeSxcbiAgLy8gdGhlbiBpdCBtdXN0IE5PVCBnZXQgYSB0cmFpbGluZyBzbGFzaC5cbiAgdmFyIGxhc3QgPSBzcmNQYXRoLnNsaWNlKC0xKVswXTtcbiAgdmFyIGhhc1RyYWlsaW5nU2xhc2ggPSAoXG4gICAgICAocmVzdWx0Lmhvc3QgfHwgcmVsYXRpdmUuaG9zdCkgJiYgKGxhc3QgPT09ICcuJyB8fCBsYXN0ID09PSAnLi4nKSB8fFxuICAgICAgbGFzdCA9PT0gJycpO1xuXG4gIC8vIHN0cmlwIHNpbmdsZSBkb3RzLCByZXNvbHZlIGRvdWJsZSBkb3RzIHRvIHBhcmVudCBkaXJcbiAgLy8gaWYgdGhlIHBhdGggdHJpZXMgdG8gZ28gYWJvdmUgdGhlIHJvb3QsIGB1cGAgZW5kcyB1cCA+IDBcbiAgdmFyIHVwID0gMDtcbiAgZm9yICh2YXIgaSA9IHNyY1BhdGgubGVuZ3RoOyBpID49IDA7IGktLSkge1xuICAgIGxhc3QgPSBzcmNQYXRoW2ldO1xuICAgIGlmIChsYXN0ID09ICcuJykge1xuICAgICAgc3JjUGF0aC5zcGxpY2UoaSwgMSk7XG4gICAgfSBlbHNlIGlmIChsYXN0ID09PSAnLi4nKSB7XG4gICAgICBzcmNQYXRoLnNwbGljZShpLCAxKTtcbiAgICAgIHVwKys7XG4gICAgfSBlbHNlIGlmICh1cCkge1xuICAgICAgc3JjUGF0aC5zcGxpY2UoaSwgMSk7XG4gICAgICB1cC0tO1xuICAgIH1cbiAgfVxuXG4gIC8vIGlmIHRoZSBwYXRoIGlzIGFsbG93ZWQgdG8gZ28gYWJvdmUgdGhlIHJvb3QsIHJlc3RvcmUgbGVhZGluZyAuLnNcbiAgaWYgKCFtdXN0RW5kQWJzICYmICFyZW1vdmVBbGxEb3RzKSB7XG4gICAgZm9yICg7IHVwLS07IHVwKSB7XG4gICAgICBzcmNQYXRoLnVuc2hpZnQoJy4uJyk7XG4gICAgfVxuICB9XG5cbiAgaWYgKG11c3RFbmRBYnMgJiYgc3JjUGF0aFswXSAhPT0gJycgJiZcbiAgICAgICghc3JjUGF0aFswXSB8fCBzcmNQYXRoWzBdLmNoYXJBdCgwKSAhPT0gJy8nKSkge1xuICAgIHNyY1BhdGgudW5zaGlmdCgnJyk7XG4gIH1cblxuICBpZiAoaGFzVHJhaWxpbmdTbGFzaCAmJiAoc3JjUGF0aC5qb2luKCcvJykuc3Vic3RyKC0xKSAhPT0gJy8nKSkge1xuICAgIHNyY1BhdGgucHVzaCgnJyk7XG4gIH1cblxuICB2YXIgaXNBYnNvbHV0ZSA9IHNyY1BhdGhbMF0gPT09ICcnIHx8XG4gICAgICAoc3JjUGF0aFswXSAmJiBzcmNQYXRoWzBdLmNoYXJBdCgwKSA9PT0gJy8nKTtcblxuICAvLyBwdXQgdGhlIGhvc3QgYmFja1xuICBpZiAocHN5Y2hvdGljKSB7XG4gICAgcmVzdWx0Lmhvc3RuYW1lID0gcmVzdWx0Lmhvc3QgPSBpc0Fic29sdXRlID8gJycgOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjUGF0aC5sZW5ndGggPyBzcmNQYXRoLnNoaWZ0KCkgOiAnJztcbiAgICAvL29jY2F0aW9uYWx5IHRoZSBhdXRoIGNhbiBnZXQgc3R1Y2sgb25seSBpbiBob3N0XG4gICAgLy90aGlzIGVzcGVjaWFseSBoYXBwZW5zIGluIGNhc2VzIGxpa2VcbiAgICAvL3VybC5yZXNvbHZlT2JqZWN0KCdtYWlsdG86bG9jYWwxQGRvbWFpbjEnLCAnbG9jYWwyQGRvbWFpbjInKVxuICAgIHZhciBhdXRoSW5Ib3N0ID0gcmVzdWx0Lmhvc3QgJiYgcmVzdWx0Lmhvc3QuaW5kZXhPZignQCcpID4gMCA/XG4gICAgICAgICAgICAgICAgICAgICByZXN1bHQuaG9zdC5zcGxpdCgnQCcpIDogZmFsc2U7XG4gICAgaWYgKGF1dGhJbkhvc3QpIHtcbiAgICAgIHJlc3VsdC5hdXRoID0gYXV0aEluSG9zdC5zaGlmdCgpO1xuICAgICAgcmVzdWx0Lmhvc3QgPSByZXN1bHQuaG9zdG5hbWUgPSBhdXRoSW5Ib3N0LnNoaWZ0KCk7XG4gICAgfVxuICB9XG5cbiAgbXVzdEVuZEFicyA9IG11c3RFbmRBYnMgfHwgKHJlc3VsdC5ob3N0ICYmIHNyY1BhdGgubGVuZ3RoKTtcblxuICBpZiAobXVzdEVuZEFicyAmJiAhaXNBYnNvbHV0ZSkge1xuICAgIHNyY1BhdGgudW5zaGlmdCgnJyk7XG4gIH1cblxuICBpZiAoIXNyY1BhdGgubGVuZ3RoKSB7XG4gICAgcmVzdWx0LnBhdGhuYW1lID0gbnVsbDtcbiAgICByZXN1bHQucGF0aCA9IG51bGw7XG4gIH0gZWxzZSB7XG4gICAgcmVzdWx0LnBhdGhuYW1lID0gc3JjUGF0aC5qb2luKCcvJyk7XG4gIH1cblxuICAvL3RvIHN1cHBvcnQgcmVxdWVzdC5odHRwXG4gIGlmICghaXNOdWxsKHJlc3VsdC5wYXRobmFtZSkgfHwgIWlzTnVsbChyZXN1bHQuc2VhcmNoKSkge1xuICAgIHJlc3VsdC5wYXRoID0gKHJlc3VsdC5wYXRobmFtZSA/IHJlc3VsdC5wYXRobmFtZSA6ICcnKSArXG4gICAgICAgICAgICAgICAgICAocmVzdWx0LnNlYXJjaCA/IHJlc3VsdC5zZWFyY2ggOiAnJyk7XG4gIH1cbiAgcmVzdWx0LmF1dGggPSByZWxhdGl2ZS5hdXRoIHx8IHJlc3VsdC5hdXRoO1xuICByZXN1bHQuc2xhc2hlcyA9IHJlc3VsdC5zbGFzaGVzIHx8IHJlbGF0aXZlLnNsYXNoZXM7XG4gIHJlc3VsdC5ocmVmID0gcmVzdWx0LmZvcm1hdCgpO1xuICByZXR1cm4gcmVzdWx0O1xufTtcblxuVXJsLnByb3RvdHlwZS5wYXJzZUhvc3QgPSBmdW5jdGlvbigpIHtcbiAgdmFyIGhvc3QgPSB0aGlzLmhvc3Q7XG4gIHZhciBwb3J0ID0gcG9ydFBhdHRlcm4uZXhlYyhob3N0KTtcbiAgaWYgKHBvcnQpIHtcbiAgICBwb3J0ID0gcG9ydFswXTtcbiAgICBpZiAocG9ydCAhPT0gJzonKSB7XG4gICAgICB0aGlzLnBvcnQgPSBwb3J0LnN1YnN0cigxKTtcbiAgICB9XG4gICAgaG9zdCA9IGhvc3Quc3Vic3RyKDAsIGhvc3QubGVuZ3RoIC0gcG9ydC5sZW5ndGgpO1xuICB9XG4gIGlmIChob3N0KSB0aGlzLmhvc3RuYW1lID0gaG9zdDtcbn07XG5cbmZ1bmN0aW9uIGlzU3RyaW5nKGFyZykge1xuICByZXR1cm4gdHlwZW9mIGFyZyA9PT0gXCJzdHJpbmdcIjtcbn1cblxuZnVuY3Rpb24gaXNPYmplY3QoYXJnKSB7XG4gIHJldHVybiB0eXBlb2YgYXJnID09PSAnb2JqZWN0JyAmJiBhcmcgIT09IG51bGw7XG59XG5cbmZ1bmN0aW9uIGlzTnVsbChhcmcpIHtcbiAgcmV0dXJuIGFyZyA9PT0gbnVsbDtcbn1cbmZ1bmN0aW9uIGlzTnVsbE9yVW5kZWZpbmVkKGFyZykge1xuICByZXR1cm4gIGFyZyA9PSBudWxsO1xufVxuIiwiJ3VzZSBzdHJpY3QnO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGVhcmN1dDtcblxuZnVuY3Rpb24gZWFyY3V0KGRhdGEsIGhvbGVJbmRpY2VzLCBkaW0pIHtcblxuICAgIGRpbSA9IGRpbSB8fCAyO1xuXG4gICAgdmFyIGhhc0hvbGVzID0gaG9sZUluZGljZXMgJiYgaG9sZUluZGljZXMubGVuZ3RoLFxuICAgICAgICBvdXRlckxlbiA9IGhhc0hvbGVzID8gaG9sZUluZGljZXNbMF0gKiBkaW0gOiBkYXRhLmxlbmd0aCxcbiAgICAgICAgb3V0ZXJOb2RlID0gbGlua2VkTGlzdChkYXRhLCAwLCBvdXRlckxlbiwgZGltLCB0cnVlKSxcbiAgICAgICAgdHJpYW5nbGVzID0gW107XG5cbiAgICBpZiAoIW91dGVyTm9kZSkgcmV0dXJuIHRyaWFuZ2xlcztcblxuICAgIHZhciBtaW5YLCBtaW5ZLCBtYXhYLCBtYXhZLCB4LCB5LCBzaXplO1xuXG4gICAgaWYgKGhhc0hvbGVzKSBvdXRlck5vZGUgPSBlbGltaW5hdGVIb2xlcyhkYXRhLCBob2xlSW5kaWNlcywgb3V0ZXJOb2RlLCBkaW0pO1xuXG4gICAgLy8gaWYgdGhlIHNoYXBlIGlzIG5vdCB0b28gc2ltcGxlLCB3ZSdsbCB1c2Ugei1vcmRlciBjdXJ2ZSBoYXNoIGxhdGVyOyBjYWxjdWxhdGUgcG9seWdvbiBiYm94XG4gICAgaWYgKGRhdGEubGVuZ3RoID4gODAgKiBkaW0pIHtcbiAgICAgICAgbWluWCA9IG1heFggPSBkYXRhWzBdO1xuICAgICAgICBtaW5ZID0gbWF4WSA9IGRhdGFbMV07XG5cbiAgICAgICAgZm9yICh2YXIgaSA9IGRpbTsgaSA8IG91dGVyTGVuOyBpICs9IGRpbSkge1xuICAgICAgICAgICAgeCA9IGRhdGFbaV07XG4gICAgICAgICAgICB5ID0gZGF0YVtpICsgMV07XG4gICAgICAgICAgICBpZiAoeCA8IG1pblgpIG1pblggPSB4O1xuICAgICAgICAgICAgaWYgKHkgPCBtaW5ZKSBtaW5ZID0geTtcbiAgICAgICAgICAgIGlmICh4ID4gbWF4WCkgbWF4WCA9IHg7XG4gICAgICAgICAgICBpZiAoeSA+IG1heFkpIG1heFkgPSB5O1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gbWluWCwgbWluWSBhbmQgc2l6ZSBhcmUgbGF0ZXIgdXNlZCB0byB0cmFuc2Zvcm0gY29vcmRzIGludG8gaW50ZWdlcnMgZm9yIHotb3JkZXIgY2FsY3VsYXRpb25cbiAgICAgICAgc2l6ZSA9IE1hdGgubWF4KG1heFggLSBtaW5YLCBtYXhZIC0gbWluWSk7XG4gICAgfVxuXG4gICAgZWFyY3V0TGlua2VkKG91dGVyTm9kZSwgdHJpYW5nbGVzLCBkaW0sIG1pblgsIG1pblksIHNpemUpO1xuXG4gICAgcmV0dXJuIHRyaWFuZ2xlcztcbn1cblxuLy8gY3JlYXRlIGEgY2lyY3VsYXIgZG91Ymx5IGxpbmtlZCBsaXN0IGZyb20gcG9seWdvbiBwb2ludHMgaW4gdGhlIHNwZWNpZmllZCB3aW5kaW5nIG9yZGVyXG5mdW5jdGlvbiBsaW5rZWRMaXN0KGRhdGEsIHN0YXJ0LCBlbmQsIGRpbSwgY2xvY2t3aXNlKSB7XG4gICAgdmFyIHN1bSA9IDAsXG4gICAgICAgIGksIGosIGxhc3Q7XG5cbiAgICAvLyBjYWxjdWxhdGUgb3JpZ2luYWwgd2luZGluZyBvcmRlciBvZiBhIHBvbHlnb24gcmluZ1xuICAgIGZvciAoaSA9IHN0YXJ0LCBqID0gZW5kIC0gZGltOyBpIDwgZW5kOyBpICs9IGRpbSkge1xuICAgICAgICBzdW0gKz0gKGRhdGFbal0gLSBkYXRhW2ldKSAqIChkYXRhW2kgKyAxXSArIGRhdGFbaiArIDFdKTtcbiAgICAgICAgaiA9IGk7XG4gICAgfVxuXG4gICAgLy8gbGluayBwb2ludHMgaW50byBjaXJjdWxhciBkb3VibHktbGlua2VkIGxpc3QgaW4gdGhlIHNwZWNpZmllZCB3aW5kaW5nIG9yZGVyXG4gICAgaWYgKGNsb2Nrd2lzZSA9PT0gKHN1bSA+IDApKSB7XG4gICAgICAgIGZvciAoaSA9IHN0YXJ0OyBpIDwgZW5kOyBpICs9IGRpbSkgbGFzdCA9IGluc2VydE5vZGUoaSwgZGF0YVtpXSwgZGF0YVtpICsgMV0sIGxhc3QpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIGZvciAoaSA9IGVuZCAtIGRpbTsgaSA+PSBzdGFydDsgaSAtPSBkaW0pIGxhc3QgPSBpbnNlcnROb2RlKGksIGRhdGFbaV0sIGRhdGFbaSArIDFdLCBsYXN0KTtcbiAgICB9XG5cbiAgICByZXR1cm4gbGFzdDtcbn1cblxuLy8gZWxpbWluYXRlIGNvbGluZWFyIG9yIGR1cGxpY2F0ZSBwb2ludHNcbmZ1bmN0aW9uIGZpbHRlclBvaW50cyhzdGFydCwgZW5kKSB7XG4gICAgaWYgKCFzdGFydCkgcmV0dXJuIHN0YXJ0O1xuICAgIGlmICghZW5kKSBlbmQgPSBzdGFydDtcblxuICAgIHZhciBwID0gc3RhcnQsXG4gICAgICAgIGFnYWluO1xuICAgIGRvIHtcbiAgICAgICAgYWdhaW4gPSBmYWxzZTtcblxuICAgICAgICBpZiAoIXAuc3RlaW5lciAmJiAoZXF1YWxzKHAsIHAubmV4dCkgfHwgYXJlYShwLnByZXYsIHAsIHAubmV4dCkgPT09IDApKSB7XG4gICAgICAgICAgICByZW1vdmVOb2RlKHApO1xuICAgICAgICAgICAgcCA9IGVuZCA9IHAucHJldjtcbiAgICAgICAgICAgIGlmIChwID09PSBwLm5leHQpIHJldHVybiBudWxsO1xuICAgICAgICAgICAgYWdhaW4gPSB0cnVlO1xuXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBwID0gcC5uZXh0O1xuICAgICAgICB9XG4gICAgfSB3aGlsZSAoYWdhaW4gfHwgcCAhPT0gZW5kKTtcblxuICAgIHJldHVybiBlbmQ7XG59XG5cbi8vIG1haW4gZWFyIHNsaWNpbmcgbG9vcCB3aGljaCB0cmlhbmd1bGF0ZXMgYSBwb2x5Z29uIChnaXZlbiBhcyBhIGxpbmtlZCBsaXN0KVxuZnVuY3Rpb24gZWFyY3V0TGlua2VkKGVhciwgdHJpYW5nbGVzLCBkaW0sIG1pblgsIG1pblksIHNpemUsIHBhc3MpIHtcbiAgICBpZiAoIWVhcikgcmV0dXJuO1xuXG4gICAgLy8gaW50ZXJsaW5rIHBvbHlnb24gbm9kZXMgaW4gei1vcmRlclxuICAgIGlmICghcGFzcyAmJiBzaXplKSBpbmRleEN1cnZlKGVhciwgbWluWCwgbWluWSwgc2l6ZSk7XG5cbiAgICB2YXIgc3RvcCA9IGVhcixcbiAgICAgICAgcHJldiwgbmV4dDtcblxuICAgIC8vIGl0ZXJhdGUgdGhyb3VnaCBlYXJzLCBzbGljaW5nIHRoZW0gb25lIGJ5IG9uZVxuICAgIHdoaWxlIChlYXIucHJldiAhPT0gZWFyLm5leHQpIHtcbiAgICAgICAgcHJldiA9IGVhci5wcmV2O1xuICAgICAgICBuZXh0ID0gZWFyLm5leHQ7XG5cbiAgICAgICAgaWYgKHNpemUgPyBpc0Vhckhhc2hlZChlYXIsIG1pblgsIG1pblksIHNpemUpIDogaXNFYXIoZWFyKSkge1xuICAgICAgICAgICAgLy8gY3V0IG9mZiB0aGUgdHJpYW5nbGVcbiAgICAgICAgICAgIHRyaWFuZ2xlcy5wdXNoKHByZXYuaSAvIGRpbSk7XG4gICAgICAgICAgICB0cmlhbmdsZXMucHVzaChlYXIuaSAvIGRpbSk7XG4gICAgICAgICAgICB0cmlhbmdsZXMucHVzaChuZXh0LmkgLyBkaW0pO1xuXG4gICAgICAgICAgICByZW1vdmVOb2RlKGVhcik7XG5cbiAgICAgICAgICAgIC8vIHNraXBwaW5nIHRoZSBuZXh0IHZlcnRpY2UgbGVhZHMgdG8gbGVzcyBzbGl2ZXIgdHJpYW5nbGVzXG4gICAgICAgICAgICBlYXIgPSBuZXh0Lm5leHQ7XG4gICAgICAgICAgICBzdG9wID0gbmV4dC5uZXh0O1xuXG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGVhciA9IG5leHQ7XG5cbiAgICAgICAgLy8gaWYgd2UgbG9vcGVkIHRocm91Z2ggdGhlIHdob2xlIHJlbWFpbmluZyBwb2x5Z29uIGFuZCBjYW4ndCBmaW5kIGFueSBtb3JlIGVhcnNcbiAgICAgICAgaWYgKGVhciA9PT0gc3RvcCkge1xuICAgICAgICAgICAgLy8gdHJ5IGZpbHRlcmluZyBwb2ludHMgYW5kIHNsaWNpbmcgYWdhaW5cbiAgICAgICAgICAgIGlmICghcGFzcykge1xuICAgICAgICAgICAgICAgIGVhcmN1dExpbmtlZChmaWx0ZXJQb2ludHMoZWFyKSwgdHJpYW5nbGVzLCBkaW0sIG1pblgsIG1pblksIHNpemUsIDEpO1xuXG4gICAgICAgICAgICAvLyBpZiB0aGlzIGRpZG4ndCB3b3JrLCB0cnkgY3VyaW5nIGFsbCBzbWFsbCBzZWxmLWludGVyc2VjdGlvbnMgbG9jYWxseVxuICAgICAgICAgICAgfSBlbHNlIGlmIChwYXNzID09PSAxKSB7XG4gICAgICAgICAgICAgICAgZWFyID0gY3VyZUxvY2FsSW50ZXJzZWN0aW9ucyhlYXIsIHRyaWFuZ2xlcywgZGltKTtcbiAgICAgICAgICAgICAgICBlYXJjdXRMaW5rZWQoZWFyLCB0cmlhbmdsZXMsIGRpbSwgbWluWCwgbWluWSwgc2l6ZSwgMik7XG5cbiAgICAgICAgICAgIC8vIGFzIGEgbGFzdCByZXNvcnQsIHRyeSBzcGxpdHRpbmcgdGhlIHJlbWFpbmluZyBwb2x5Z29uIGludG8gdHdvXG4gICAgICAgICAgICB9IGVsc2UgaWYgKHBhc3MgPT09IDIpIHtcbiAgICAgICAgICAgICAgICBzcGxpdEVhcmN1dChlYXIsIHRyaWFuZ2xlcywgZGltLCBtaW5YLCBtaW5ZLCBzaXplKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbi8vIGNoZWNrIHdoZXRoZXIgYSBwb2x5Z29uIG5vZGUgZm9ybXMgYSB2YWxpZCBlYXIgd2l0aCBhZGphY2VudCBub2Rlc1xuZnVuY3Rpb24gaXNFYXIoZWFyKSB7XG4gICAgdmFyIGEgPSBlYXIucHJldixcbiAgICAgICAgYiA9IGVhcixcbiAgICAgICAgYyA9IGVhci5uZXh0O1xuXG4gICAgaWYgKGFyZWEoYSwgYiwgYykgPj0gMCkgcmV0dXJuIGZhbHNlOyAvLyByZWZsZXgsIGNhbid0IGJlIGFuIGVhclxuXG4gICAgLy8gbm93IG1ha2Ugc3VyZSB3ZSBkb24ndCBoYXZlIG90aGVyIHBvaW50cyBpbnNpZGUgdGhlIHBvdGVudGlhbCBlYXJcbiAgICB2YXIgcCA9IGVhci5uZXh0Lm5leHQ7XG5cbiAgICB3aGlsZSAocCAhPT0gZWFyLnByZXYpIHtcbiAgICAgICAgaWYgKHBvaW50SW5UcmlhbmdsZShhLngsIGEueSwgYi54LCBiLnksIGMueCwgYy55LCBwLngsIHAueSkgJiZcbiAgICAgICAgICAgIGFyZWEocC5wcmV2LCBwLCBwLm5leHQpID49IDApIHJldHVybiBmYWxzZTtcbiAgICAgICAgcCA9IHAubmV4dDtcbiAgICB9XG5cbiAgICByZXR1cm4gdHJ1ZTtcbn1cblxuZnVuY3Rpb24gaXNFYXJIYXNoZWQoZWFyLCBtaW5YLCBtaW5ZLCBzaXplKSB7XG4gICAgdmFyIGEgPSBlYXIucHJldixcbiAgICAgICAgYiA9IGVhcixcbiAgICAgICAgYyA9IGVhci5uZXh0O1xuXG4gICAgaWYgKGFyZWEoYSwgYiwgYykgPj0gMCkgcmV0dXJuIGZhbHNlOyAvLyByZWZsZXgsIGNhbid0IGJlIGFuIGVhclxuXG4gICAgLy8gdHJpYW5nbGUgYmJveDsgbWluICYgbWF4IGFyZSBjYWxjdWxhdGVkIGxpa2UgdGhpcyBmb3Igc3BlZWRcbiAgICB2YXIgbWluVFggPSBhLnggPCBiLnggPyAoYS54IDwgYy54ID8gYS54IDogYy54KSA6IChiLnggPCBjLnggPyBiLnggOiBjLngpLFxuICAgICAgICBtaW5UWSA9IGEueSA8IGIueSA/IChhLnkgPCBjLnkgPyBhLnkgOiBjLnkpIDogKGIueSA8IGMueSA/IGIueSA6IGMueSksXG4gICAgICAgIG1heFRYID0gYS54ID4gYi54ID8gKGEueCA+IGMueCA/IGEueCA6IGMueCkgOiAoYi54ID4gYy54ID8gYi54IDogYy54KSxcbiAgICAgICAgbWF4VFkgPSBhLnkgPiBiLnkgPyAoYS55ID4gYy55ID8gYS55IDogYy55KSA6IChiLnkgPiBjLnkgPyBiLnkgOiBjLnkpO1xuXG4gICAgLy8gei1vcmRlciByYW5nZSBmb3IgdGhlIGN1cnJlbnQgdHJpYW5nbGUgYmJveDtcbiAgICB2YXIgbWluWiA9IHpPcmRlcihtaW5UWCwgbWluVFksIG1pblgsIG1pblksIHNpemUpLFxuICAgICAgICBtYXhaID0gek9yZGVyKG1heFRYLCBtYXhUWSwgbWluWCwgbWluWSwgc2l6ZSk7XG5cbiAgICAvLyBmaXJzdCBsb29rIGZvciBwb2ludHMgaW5zaWRlIHRoZSB0cmlhbmdsZSBpbiBpbmNyZWFzaW5nIHotb3JkZXJcbiAgICB2YXIgcCA9IGVhci5uZXh0WjtcblxuICAgIHdoaWxlIChwICYmIHAueiA8PSBtYXhaKSB7XG4gICAgICAgIGlmIChwICE9PSBlYXIucHJldiAmJiBwICE9PSBlYXIubmV4dCAmJlxuICAgICAgICAgICAgcG9pbnRJblRyaWFuZ2xlKGEueCwgYS55LCBiLngsIGIueSwgYy54LCBjLnksIHAueCwgcC55KSAmJlxuICAgICAgICAgICAgYXJlYShwLnByZXYsIHAsIHAubmV4dCkgPj0gMCkgcmV0dXJuIGZhbHNlO1xuICAgICAgICBwID0gcC5uZXh0WjtcbiAgICB9XG5cbiAgICAvLyB0aGVuIGxvb2sgZm9yIHBvaW50cyBpbiBkZWNyZWFzaW5nIHotb3JkZXJcbiAgICBwID0gZWFyLnByZXZaO1xuXG4gICAgd2hpbGUgKHAgJiYgcC56ID49IG1pblopIHtcbiAgICAgICAgaWYgKHAgIT09IGVhci5wcmV2ICYmIHAgIT09IGVhci5uZXh0ICYmXG4gICAgICAgICAgICBwb2ludEluVHJpYW5nbGUoYS54LCBhLnksIGIueCwgYi55LCBjLngsIGMueSwgcC54LCBwLnkpICYmXG4gICAgICAgICAgICBhcmVhKHAucHJldiwgcCwgcC5uZXh0KSA+PSAwKSByZXR1cm4gZmFsc2U7XG4gICAgICAgIHAgPSBwLnByZXZaO1xuICAgIH1cblxuICAgIHJldHVybiB0cnVlO1xufVxuXG4vLyBnbyB0aHJvdWdoIGFsbCBwb2x5Z29uIG5vZGVzIGFuZCBjdXJlIHNtYWxsIGxvY2FsIHNlbGYtaW50ZXJzZWN0aW9uc1xuZnVuY3Rpb24gY3VyZUxvY2FsSW50ZXJzZWN0aW9ucyhzdGFydCwgdHJpYW5nbGVzLCBkaW0pIHtcbiAgICB2YXIgcCA9IHN0YXJ0O1xuICAgIGRvIHtcbiAgICAgICAgdmFyIGEgPSBwLnByZXYsXG4gICAgICAgICAgICBiID0gcC5uZXh0Lm5leHQ7XG5cbiAgICAgICAgLy8gYSBzZWxmLWludGVyc2VjdGlvbiB3aGVyZSBlZGdlICh2W2ktMV0sdltpXSkgaW50ZXJzZWN0cyAodltpKzFdLHZbaSsyXSlcbiAgICAgICAgaWYgKGludGVyc2VjdHMoYSwgcCwgcC5uZXh0LCBiKSAmJiBsb2NhbGx5SW5zaWRlKGEsIGIpICYmIGxvY2FsbHlJbnNpZGUoYiwgYSkpIHtcblxuICAgICAgICAgICAgdHJpYW5nbGVzLnB1c2goYS5pIC8gZGltKTtcbiAgICAgICAgICAgIHRyaWFuZ2xlcy5wdXNoKHAuaSAvIGRpbSk7XG4gICAgICAgICAgICB0cmlhbmdsZXMucHVzaChiLmkgLyBkaW0pO1xuXG4gICAgICAgICAgICAvLyByZW1vdmUgdHdvIG5vZGVzIGludm9sdmVkXG4gICAgICAgICAgICByZW1vdmVOb2RlKHApO1xuICAgICAgICAgICAgcmVtb3ZlTm9kZShwLm5leHQpO1xuXG4gICAgICAgICAgICBwID0gc3RhcnQgPSBiO1xuICAgICAgICB9XG4gICAgICAgIHAgPSBwLm5leHQ7XG4gICAgfSB3aGlsZSAocCAhPT0gc3RhcnQpO1xuXG4gICAgcmV0dXJuIHA7XG59XG5cbi8vIHRyeSBzcGxpdHRpbmcgcG9seWdvbiBpbnRvIHR3byBhbmQgdHJpYW5ndWxhdGUgdGhlbSBpbmRlcGVuZGVudGx5XG5mdW5jdGlvbiBzcGxpdEVhcmN1dChzdGFydCwgdHJpYW5nbGVzLCBkaW0sIG1pblgsIG1pblksIHNpemUpIHtcbiAgICAvLyBsb29rIGZvciBhIHZhbGlkIGRpYWdvbmFsIHRoYXQgZGl2aWRlcyB0aGUgcG9seWdvbiBpbnRvIHR3b1xuICAgIHZhciBhID0gc3RhcnQ7XG4gICAgZG8ge1xuICAgICAgICB2YXIgYiA9IGEubmV4dC5uZXh0O1xuICAgICAgICB3aGlsZSAoYiAhPT0gYS5wcmV2KSB7XG4gICAgICAgICAgICBpZiAoYS5pICE9PSBiLmkgJiYgaXNWYWxpZERpYWdvbmFsKGEsIGIpKSB7XG4gICAgICAgICAgICAgICAgLy8gc3BsaXQgdGhlIHBvbHlnb24gaW4gdHdvIGJ5IHRoZSBkaWFnb25hbFxuICAgICAgICAgICAgICAgIHZhciBjID0gc3BsaXRQb2x5Z29uKGEsIGIpO1xuXG4gICAgICAgICAgICAgICAgLy8gZmlsdGVyIGNvbGluZWFyIHBvaW50cyBhcm91bmQgdGhlIGN1dHNcbiAgICAgICAgICAgICAgICBhID0gZmlsdGVyUG9pbnRzKGEsIGEubmV4dCk7XG4gICAgICAgICAgICAgICAgYyA9IGZpbHRlclBvaW50cyhjLCBjLm5leHQpO1xuXG4gICAgICAgICAgICAgICAgLy8gcnVuIGVhcmN1dCBvbiBlYWNoIGhhbGZcbiAgICAgICAgICAgICAgICBlYXJjdXRMaW5rZWQoYSwgdHJpYW5nbGVzLCBkaW0sIG1pblgsIG1pblksIHNpemUpO1xuICAgICAgICAgICAgICAgIGVhcmN1dExpbmtlZChjLCB0cmlhbmdsZXMsIGRpbSwgbWluWCwgbWluWSwgc2l6ZSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYiA9IGIubmV4dDtcbiAgICAgICAgfVxuICAgICAgICBhID0gYS5uZXh0O1xuICAgIH0gd2hpbGUgKGEgIT09IHN0YXJ0KTtcbn1cblxuLy8gbGluayBldmVyeSBob2xlIGludG8gdGhlIG91dGVyIGxvb3AsIHByb2R1Y2luZyBhIHNpbmdsZS1yaW5nIHBvbHlnb24gd2l0aG91dCBob2xlc1xuZnVuY3Rpb24gZWxpbWluYXRlSG9sZXMoZGF0YSwgaG9sZUluZGljZXMsIG91dGVyTm9kZSwgZGltKSB7XG4gICAgdmFyIHF1ZXVlID0gW10sXG4gICAgICAgIGksIGxlbiwgc3RhcnQsIGVuZCwgbGlzdDtcblxuICAgIGZvciAoaSA9IDAsIGxlbiA9IGhvbGVJbmRpY2VzLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICAgIHN0YXJ0ID0gaG9sZUluZGljZXNbaV0gKiBkaW07XG4gICAgICAgIGVuZCA9IGkgPCBsZW4gLSAxID8gaG9sZUluZGljZXNbaSArIDFdICogZGltIDogZGF0YS5sZW5ndGg7XG4gICAgICAgIGxpc3QgPSBsaW5rZWRMaXN0KGRhdGEsIHN0YXJ0LCBlbmQsIGRpbSwgZmFsc2UpO1xuICAgICAgICBpZiAobGlzdCA9PT0gbGlzdC5uZXh0KSBsaXN0LnN0ZWluZXIgPSB0cnVlO1xuICAgICAgICBxdWV1ZS5wdXNoKGdldExlZnRtb3N0KGxpc3QpKTtcbiAgICB9XG5cbiAgICBxdWV1ZS5zb3J0KGNvbXBhcmVYKTtcblxuICAgIC8vIHByb2Nlc3MgaG9sZXMgZnJvbSBsZWZ0IHRvIHJpZ2h0XG4gICAgZm9yIChpID0gMDsgaSA8IHF1ZXVlLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGVsaW1pbmF0ZUhvbGUocXVldWVbaV0sIG91dGVyTm9kZSk7XG4gICAgICAgIG91dGVyTm9kZSA9IGZpbHRlclBvaW50cyhvdXRlck5vZGUsIG91dGVyTm9kZS5uZXh0KTtcbiAgICB9XG5cbiAgICByZXR1cm4gb3V0ZXJOb2RlO1xufVxuXG5mdW5jdGlvbiBjb21wYXJlWChhLCBiKSB7XG4gICAgcmV0dXJuIGEueCAtIGIueDtcbn1cblxuLy8gZmluZCBhIGJyaWRnZSBiZXR3ZWVuIHZlcnRpY2VzIHRoYXQgY29ubmVjdHMgaG9sZSB3aXRoIGFuIG91dGVyIHJpbmcgYW5kIGFuZCBsaW5rIGl0XG5mdW5jdGlvbiBlbGltaW5hdGVIb2xlKGhvbGUsIG91dGVyTm9kZSkge1xuICAgIG91dGVyTm9kZSA9IGZpbmRIb2xlQnJpZGdlKGhvbGUsIG91dGVyTm9kZSk7XG4gICAgaWYgKG91dGVyTm9kZSkge1xuICAgICAgICB2YXIgYiA9IHNwbGl0UG9seWdvbihvdXRlck5vZGUsIGhvbGUpO1xuICAgICAgICBmaWx0ZXJQb2ludHMoYiwgYi5uZXh0KTtcbiAgICB9XG59XG5cbi8vIERhdmlkIEViZXJseSdzIGFsZ29yaXRobSBmb3IgZmluZGluZyBhIGJyaWRnZSBiZXR3ZWVuIGhvbGUgYW5kIG91dGVyIHBvbHlnb25cbmZ1bmN0aW9uIGZpbmRIb2xlQnJpZGdlKGhvbGUsIG91dGVyTm9kZSkge1xuICAgIHZhciBwID0gb3V0ZXJOb2RlLFxuICAgICAgICBoeCA9IGhvbGUueCxcbiAgICAgICAgaHkgPSBob2xlLnksXG4gICAgICAgIHF4ID0gLUluZmluaXR5LFxuICAgICAgICBtO1xuXG4gICAgLy8gZmluZCBhIHNlZ21lbnQgaW50ZXJzZWN0ZWQgYnkgYSByYXkgZnJvbSB0aGUgaG9sZSdzIGxlZnRtb3N0IHBvaW50IHRvIHRoZSBsZWZ0O1xuICAgIC8vIHNlZ21lbnQncyBlbmRwb2ludCB3aXRoIGxlc3NlciB4IHdpbGwgYmUgcG90ZW50aWFsIGNvbm5lY3Rpb24gcG9pbnRcbiAgICBkbyB7XG4gICAgICAgIGlmIChoeSA8PSBwLnkgJiYgaHkgPj0gcC5uZXh0LnkpIHtcbiAgICAgICAgICAgIHZhciB4ID0gcC54ICsgKGh5IC0gcC55KSAqIChwLm5leHQueCAtIHAueCkgLyAocC5uZXh0LnkgLSBwLnkpO1xuICAgICAgICAgICAgaWYgKHggPD0gaHggJiYgeCA+IHF4KSB7XG4gICAgICAgICAgICAgICAgcXggPSB4O1xuICAgICAgICAgICAgICAgIG0gPSBwLnggPCBwLm5leHQueCA/IHAgOiBwLm5leHQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcCA9IHAubmV4dDtcbiAgICB9IHdoaWxlIChwICE9PSBvdXRlck5vZGUpO1xuXG4gICAgaWYgKCFtKSByZXR1cm4gbnVsbDtcblxuICAgIC8vIGxvb2sgZm9yIHBvaW50cyBpbnNpZGUgdGhlIHRyaWFuZ2xlIG9mIGhvbGUgcG9pbnQsIHNlZ21lbnQgaW50ZXJzZWN0aW9uIGFuZCBlbmRwb2ludDtcbiAgICAvLyBpZiB0aGVyZSBhcmUgbm8gcG9pbnRzIGZvdW5kLCB3ZSBoYXZlIGEgdmFsaWQgY29ubmVjdGlvbjtcbiAgICAvLyBvdGhlcndpc2UgY2hvb3NlIHRoZSBwb2ludCBvZiB0aGUgbWluaW11bSBhbmdsZSB3aXRoIHRoZSByYXkgYXMgY29ubmVjdGlvbiBwb2ludFxuXG4gICAgdmFyIHN0b3AgPSBtLFxuICAgICAgICB0YW5NaW4gPSBJbmZpbml0eSxcbiAgICAgICAgdGFuO1xuXG4gICAgcCA9IG0ubmV4dDtcblxuICAgIHdoaWxlIChwICE9PSBzdG9wKSB7XG4gICAgICAgIGlmIChoeCA+PSBwLnggJiYgcC54ID49IG0ueCAmJlxuICAgICAgICAgICAgICAgIHBvaW50SW5UcmlhbmdsZShoeSA8IG0ueSA/IGh4IDogcXgsIGh5LCBtLngsIG0ueSwgaHkgPCBtLnkgPyBxeCA6IGh4LCBoeSwgcC54LCBwLnkpKSB7XG5cbiAgICAgICAgICAgIHRhbiA9IE1hdGguYWJzKGh5IC0gcC55KSAvIChoeCAtIHAueCk7IC8vIHRhbmdlbnRpYWxcblxuICAgICAgICAgICAgaWYgKCh0YW4gPCB0YW5NaW4gfHwgKHRhbiA9PT0gdGFuTWluICYmIHAueCA+IG0ueCkpICYmIGxvY2FsbHlJbnNpZGUocCwgaG9sZSkpIHtcbiAgICAgICAgICAgICAgICBtID0gcDtcbiAgICAgICAgICAgICAgICB0YW5NaW4gPSB0YW47XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBwID0gcC5uZXh0O1xuICAgIH1cblxuICAgIHJldHVybiBtO1xufVxuXG4vLyBpbnRlcmxpbmsgcG9seWdvbiBub2RlcyBpbiB6LW9yZGVyXG5mdW5jdGlvbiBpbmRleEN1cnZlKHN0YXJ0LCBtaW5YLCBtaW5ZLCBzaXplKSB7XG4gICAgdmFyIHAgPSBzdGFydDtcbiAgICBkbyB7XG4gICAgICAgIGlmIChwLnogPT09IG51bGwpIHAueiA9IHpPcmRlcihwLngsIHAueSwgbWluWCwgbWluWSwgc2l6ZSk7XG4gICAgICAgIHAucHJldlogPSBwLnByZXY7XG4gICAgICAgIHAubmV4dFogPSBwLm5leHQ7XG4gICAgICAgIHAgPSBwLm5leHQ7XG4gICAgfSB3aGlsZSAocCAhPT0gc3RhcnQpO1xuXG4gICAgcC5wcmV2Wi5uZXh0WiA9IG51bGw7XG4gICAgcC5wcmV2WiA9IG51bGw7XG5cbiAgICBzb3J0TGlua2VkKHApO1xufVxuXG4vLyBTaW1vbiBUYXRoYW0ncyBsaW5rZWQgbGlzdCBtZXJnZSBzb3J0IGFsZ29yaXRobVxuLy8gaHR0cDovL3d3dy5jaGlhcmsuZ3JlZW5lbmQub3JnLnVrL35zZ3RhdGhhbS9hbGdvcml0aG1zL2xpc3Rzb3J0Lmh0bWxcbmZ1bmN0aW9uIHNvcnRMaW5rZWQobGlzdCkge1xuICAgIHZhciBpLCBwLCBxLCBlLCB0YWlsLCBudW1NZXJnZXMsIHBTaXplLCBxU2l6ZSxcbiAgICAgICAgaW5TaXplID0gMTtcblxuICAgIGRvIHtcbiAgICAgICAgcCA9IGxpc3Q7XG4gICAgICAgIGxpc3QgPSBudWxsO1xuICAgICAgICB0YWlsID0gbnVsbDtcbiAgICAgICAgbnVtTWVyZ2VzID0gMDtcblxuICAgICAgICB3aGlsZSAocCkge1xuICAgICAgICAgICAgbnVtTWVyZ2VzKys7XG4gICAgICAgICAgICBxID0gcDtcbiAgICAgICAgICAgIHBTaXplID0gMDtcbiAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBpblNpemU7IGkrKykge1xuICAgICAgICAgICAgICAgIHBTaXplKys7XG4gICAgICAgICAgICAgICAgcSA9IHEubmV4dFo7XG4gICAgICAgICAgICAgICAgaWYgKCFxKSBicmVhaztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcVNpemUgPSBpblNpemU7XG5cbiAgICAgICAgICAgIHdoaWxlIChwU2l6ZSA+IDAgfHwgKHFTaXplID4gMCAmJiBxKSkge1xuXG4gICAgICAgICAgICAgICAgaWYgKHBTaXplID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIGUgPSBxO1xuICAgICAgICAgICAgICAgICAgICBxID0gcS5uZXh0WjtcbiAgICAgICAgICAgICAgICAgICAgcVNpemUtLTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHFTaXplID09PSAwIHx8ICFxKSB7XG4gICAgICAgICAgICAgICAgICAgIGUgPSBwO1xuICAgICAgICAgICAgICAgICAgICBwID0gcC5uZXh0WjtcbiAgICAgICAgICAgICAgICAgICAgcFNpemUtLTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHAueiA8PSBxLnopIHtcbiAgICAgICAgICAgICAgICAgICAgZSA9IHA7XG4gICAgICAgICAgICAgICAgICAgIHAgPSBwLm5leHRaO1xuICAgICAgICAgICAgICAgICAgICBwU2l6ZS0tO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGUgPSBxO1xuICAgICAgICAgICAgICAgICAgICBxID0gcS5uZXh0WjtcbiAgICAgICAgICAgICAgICAgICAgcVNpemUtLTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAodGFpbCkgdGFpbC5uZXh0WiA9IGU7XG4gICAgICAgICAgICAgICAgZWxzZSBsaXN0ID0gZTtcblxuICAgICAgICAgICAgICAgIGUucHJldlogPSB0YWlsO1xuICAgICAgICAgICAgICAgIHRhaWwgPSBlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBwID0gcTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRhaWwubmV4dFogPSBudWxsO1xuICAgICAgICBpblNpemUgKj0gMjtcblxuICAgIH0gd2hpbGUgKG51bU1lcmdlcyA+IDEpO1xuXG4gICAgcmV0dXJuIGxpc3Q7XG59XG5cbi8vIHotb3JkZXIgb2YgYSBwb2ludCBnaXZlbiBjb29yZHMgYW5kIHNpemUgb2YgdGhlIGRhdGEgYm91bmRpbmcgYm94XG5mdW5jdGlvbiB6T3JkZXIoeCwgeSwgbWluWCwgbWluWSwgc2l6ZSkge1xuICAgIC8vIGNvb3JkcyBhcmUgdHJhbnNmb3JtZWQgaW50byBub24tbmVnYXRpdmUgMTUtYml0IGludGVnZXIgcmFuZ2VcbiAgICB4ID0gMzI3NjcgKiAoeCAtIG1pblgpIC8gc2l6ZTtcbiAgICB5ID0gMzI3NjcgKiAoeSAtIG1pblkpIC8gc2l6ZTtcblxuICAgIHggPSAoeCB8ICh4IDw8IDgpKSAmIDB4MDBGRjAwRkY7XG4gICAgeCA9ICh4IHwgKHggPDwgNCkpICYgMHgwRjBGMEYwRjtcbiAgICB4ID0gKHggfCAoeCA8PCAyKSkgJiAweDMzMzMzMzMzO1xuICAgIHggPSAoeCB8ICh4IDw8IDEpKSAmIDB4NTU1NTU1NTU7XG5cbiAgICB5ID0gKHkgfCAoeSA8PCA4KSkgJiAweDAwRkYwMEZGO1xuICAgIHkgPSAoeSB8ICh5IDw8IDQpKSAmIDB4MEYwRjBGMEY7XG4gICAgeSA9ICh5IHwgKHkgPDwgMikpICYgMHgzMzMzMzMzMztcbiAgICB5ID0gKHkgfCAoeSA8PCAxKSkgJiAweDU1NTU1NTU1O1xuXG4gICAgcmV0dXJuIHggfCAoeSA8PCAxKTtcbn1cblxuLy8gZmluZCB0aGUgbGVmdG1vc3Qgbm9kZSBvZiBhIHBvbHlnb24gcmluZ1xuZnVuY3Rpb24gZ2V0TGVmdG1vc3Qoc3RhcnQpIHtcbiAgICB2YXIgcCA9IHN0YXJ0LFxuICAgICAgICBsZWZ0bW9zdCA9IHN0YXJ0O1xuICAgIGRvIHtcbiAgICAgICAgaWYgKHAueCA8IGxlZnRtb3N0LngpIGxlZnRtb3N0ID0gcDtcbiAgICAgICAgcCA9IHAubmV4dDtcbiAgICB9IHdoaWxlIChwICE9PSBzdGFydCk7XG5cbiAgICByZXR1cm4gbGVmdG1vc3Q7XG59XG5cbi8vIGNoZWNrIGlmIGEgcG9pbnQgbGllcyB3aXRoaW4gYSBjb252ZXggdHJpYW5nbGVcbmZ1bmN0aW9uIHBvaW50SW5UcmlhbmdsZShheCwgYXksIGJ4LCBieSwgY3gsIGN5LCBweCwgcHkpIHtcbiAgICByZXR1cm4gKGN4IC0gcHgpICogKGF5IC0gcHkpIC0gKGF4IC0gcHgpICogKGN5IC0gcHkpID49IDAgJiZcbiAgICAgICAgICAgKGF4IC0gcHgpICogKGJ5IC0gcHkpIC0gKGJ4IC0gcHgpICogKGF5IC0gcHkpID49IDAgJiZcbiAgICAgICAgICAgKGJ4IC0gcHgpICogKGN5IC0gcHkpIC0gKGN4IC0gcHgpICogKGJ5IC0gcHkpID49IDA7XG59XG5cbi8vIGNoZWNrIGlmIGEgZGlhZ29uYWwgYmV0d2VlbiB0d28gcG9seWdvbiBub2RlcyBpcyB2YWxpZCAobGllcyBpbiBwb2x5Z29uIGludGVyaW9yKVxuZnVuY3Rpb24gaXNWYWxpZERpYWdvbmFsKGEsIGIpIHtcbiAgICByZXR1cm4gZXF1YWxzKGEsIGIpIHx8IGEubmV4dC5pICE9PSBiLmkgJiYgYS5wcmV2LmkgIT09IGIuaSAmJiAhaW50ZXJzZWN0c1BvbHlnb24oYSwgYikgJiZcbiAgICAgICAgICAgbG9jYWxseUluc2lkZShhLCBiKSAmJiBsb2NhbGx5SW5zaWRlKGIsIGEpICYmIG1pZGRsZUluc2lkZShhLCBiKTtcbn1cblxuLy8gc2lnbmVkIGFyZWEgb2YgYSB0cmlhbmdsZVxuZnVuY3Rpb24gYXJlYShwLCBxLCByKSB7XG4gICAgcmV0dXJuIChxLnkgLSBwLnkpICogKHIueCAtIHEueCkgLSAocS54IC0gcC54KSAqIChyLnkgLSBxLnkpO1xufVxuXG4vLyBjaGVjayBpZiB0d28gcG9pbnRzIGFyZSBlcXVhbFxuZnVuY3Rpb24gZXF1YWxzKHAxLCBwMikge1xuICAgIHJldHVybiBwMS54ID09PSBwMi54ICYmIHAxLnkgPT09IHAyLnk7XG59XG5cbi8vIGNoZWNrIGlmIHR3byBzZWdtZW50cyBpbnRlcnNlY3RcbmZ1bmN0aW9uIGludGVyc2VjdHMocDEsIHExLCBwMiwgcTIpIHtcbiAgICByZXR1cm4gYXJlYShwMSwgcTEsIHAyKSA+IDAgIT09IGFyZWEocDEsIHExLCBxMikgPiAwICYmXG4gICAgICAgICAgIGFyZWEocDIsIHEyLCBwMSkgPiAwICE9PSBhcmVhKHAyLCBxMiwgcTEpID4gMDtcbn1cblxuLy8gY2hlY2sgaWYgYSBwb2x5Z29uIGRpYWdvbmFsIGludGVyc2VjdHMgYW55IHBvbHlnb24gc2VnbWVudHNcbmZ1bmN0aW9uIGludGVyc2VjdHNQb2x5Z29uKGEsIGIpIHtcbiAgICB2YXIgcCA9IGE7XG4gICAgZG8ge1xuICAgICAgICBpZiAocC5pICE9PSBhLmkgJiYgcC5uZXh0LmkgIT09IGEuaSAmJiBwLmkgIT09IGIuaSAmJiBwLm5leHQuaSAhPT0gYi5pICYmXG4gICAgICAgICAgICAgICAgaW50ZXJzZWN0cyhwLCBwLm5leHQsIGEsIGIpKSByZXR1cm4gdHJ1ZTtcbiAgICAgICAgcCA9IHAubmV4dDtcbiAgICB9IHdoaWxlIChwICE9PSBhKTtcblxuICAgIHJldHVybiBmYWxzZTtcbn1cblxuLy8gY2hlY2sgaWYgYSBwb2x5Z29uIGRpYWdvbmFsIGlzIGxvY2FsbHkgaW5zaWRlIHRoZSBwb2x5Z29uXG5mdW5jdGlvbiBsb2NhbGx5SW5zaWRlKGEsIGIpIHtcbiAgICByZXR1cm4gYXJlYShhLnByZXYsIGEsIGEubmV4dCkgPCAwID9cbiAgICAgICAgYXJlYShhLCBiLCBhLm5leHQpID49IDAgJiYgYXJlYShhLCBhLnByZXYsIGIpID49IDAgOlxuICAgICAgICBhcmVhKGEsIGIsIGEucHJldikgPCAwIHx8IGFyZWEoYSwgYS5uZXh0LCBiKSA8IDA7XG59XG5cbi8vIGNoZWNrIGlmIHRoZSBtaWRkbGUgcG9pbnQgb2YgYSBwb2x5Z29uIGRpYWdvbmFsIGlzIGluc2lkZSB0aGUgcG9seWdvblxuZnVuY3Rpb24gbWlkZGxlSW5zaWRlKGEsIGIpIHtcbiAgICB2YXIgcCA9IGEsXG4gICAgICAgIGluc2lkZSA9IGZhbHNlLFxuICAgICAgICBweCA9IChhLnggKyBiLngpIC8gMixcbiAgICAgICAgcHkgPSAoYS55ICsgYi55KSAvIDI7XG4gICAgZG8ge1xuICAgICAgICBpZiAoKChwLnkgPiBweSkgIT09IChwLm5leHQueSA+IHB5KSkgJiYgKHB4IDwgKHAubmV4dC54IC0gcC54KSAqIChweSAtIHAueSkgLyAocC5uZXh0LnkgLSBwLnkpICsgcC54KSlcbiAgICAgICAgICAgIGluc2lkZSA9ICFpbnNpZGU7XG4gICAgICAgIHAgPSBwLm5leHQ7XG4gICAgfSB3aGlsZSAocCAhPT0gYSk7XG5cbiAgICByZXR1cm4gaW5zaWRlO1xufVxuXG4vLyBsaW5rIHR3byBwb2x5Z29uIHZlcnRpY2VzIHdpdGggYSBicmlkZ2U7IGlmIHRoZSB2ZXJ0aWNlcyBiZWxvbmcgdG8gdGhlIHNhbWUgcmluZywgaXQgc3BsaXRzIHBvbHlnb24gaW50byB0d287XG4vLyBpZiBvbmUgYmVsb25ncyB0byB0aGUgb3V0ZXIgcmluZyBhbmQgYW5vdGhlciB0byBhIGhvbGUsIGl0IG1lcmdlcyBpdCBpbnRvIGEgc2luZ2xlIHJpbmdcbmZ1bmN0aW9uIHNwbGl0UG9seWdvbihhLCBiKSB7XG4gICAgdmFyIGEyID0gbmV3IE5vZGUoYS5pLCBhLngsIGEueSksXG4gICAgICAgIGIyID0gbmV3IE5vZGUoYi5pLCBiLngsIGIueSksXG4gICAgICAgIGFuID0gYS5uZXh0LFxuICAgICAgICBicCA9IGIucHJldjtcblxuICAgIGEubmV4dCA9IGI7XG4gICAgYi5wcmV2ID0gYTtcblxuICAgIGEyLm5leHQgPSBhbjtcbiAgICBhbi5wcmV2ID0gYTI7XG5cbiAgICBiMi5uZXh0ID0gYTI7XG4gICAgYTIucHJldiA9IGIyO1xuXG4gICAgYnAubmV4dCA9IGIyO1xuICAgIGIyLnByZXYgPSBicDtcblxuICAgIHJldHVybiBiMjtcbn1cblxuLy8gY3JlYXRlIGEgbm9kZSBhbmQgb3B0aW9uYWxseSBsaW5rIGl0IHdpdGggcHJldmlvdXMgb25lIChpbiBhIGNpcmN1bGFyIGRvdWJseSBsaW5rZWQgbGlzdClcbmZ1bmN0aW9uIGluc2VydE5vZGUoaSwgeCwgeSwgbGFzdCkge1xuICAgIHZhciBwID0gbmV3IE5vZGUoaSwgeCwgeSk7XG5cbiAgICBpZiAoIWxhc3QpIHtcbiAgICAgICAgcC5wcmV2ID0gcDtcbiAgICAgICAgcC5uZXh0ID0gcDtcblxuICAgIH0gZWxzZSB7XG4gICAgICAgIHAubmV4dCA9IGxhc3QubmV4dDtcbiAgICAgICAgcC5wcmV2ID0gbGFzdDtcbiAgICAgICAgbGFzdC5uZXh0LnByZXYgPSBwO1xuICAgICAgICBsYXN0Lm5leHQgPSBwO1xuICAgIH1cbiAgICByZXR1cm4gcDtcbn1cblxuZnVuY3Rpb24gcmVtb3ZlTm9kZShwKSB7XG4gICAgcC5uZXh0LnByZXYgPSBwLnByZXY7XG4gICAgcC5wcmV2Lm5leHQgPSBwLm5leHQ7XG5cbiAgICBpZiAocC5wcmV2WikgcC5wcmV2Wi5uZXh0WiA9IHAubmV4dFo7XG4gICAgaWYgKHAubmV4dFopIHAubmV4dFoucHJldlogPSBwLnByZXZaO1xufVxuXG5mdW5jdGlvbiBOb2RlKGksIHgsIHkpIHtcbiAgICAvLyB2ZXJ0aWNlIGluZGV4IGluIGNvb3JkaW5hdGVzIGFycmF5XG4gICAgdGhpcy5pID0gaTtcblxuICAgIC8vIHZlcnRleCBjb29yZGluYXRlc1xuICAgIHRoaXMueCA9IHg7XG4gICAgdGhpcy55ID0geTtcblxuICAgIC8vIHByZXZpb3VzIGFuZCBuZXh0IHZlcnRpY2Ugbm9kZXMgaW4gYSBwb2x5Z29uIHJpbmdcbiAgICB0aGlzLnByZXYgPSBudWxsO1xuICAgIHRoaXMubmV4dCA9IG51bGw7XG5cbiAgICAvLyB6LW9yZGVyIGN1cnZlIHZhbHVlXG4gICAgdGhpcy56ID0gbnVsbDtcblxuICAgIC8vIHByZXZpb3VzIGFuZCBuZXh0IG5vZGVzIGluIHotb3JkZXJcbiAgICB0aGlzLnByZXZaID0gbnVsbDtcbiAgICB0aGlzLm5leHRaID0gbnVsbDtcblxuICAgIC8vIGluZGljYXRlcyB3aGV0aGVyIHRoaXMgaXMgYSBzdGVpbmVyIHBvaW50XG4gICAgdGhpcy5zdGVpbmVyID0gZmFsc2U7XG59XG4iLCIndXNlIHN0cmljdCc7XG5cbi8vXG4vLyBXZSBzdG9yZSBvdXIgRUUgb2JqZWN0cyBpbiBhIHBsYWluIG9iamVjdCB3aG9zZSBwcm9wZXJ0aWVzIGFyZSBldmVudCBuYW1lcy5cbi8vIElmIGBPYmplY3QuY3JlYXRlKG51bGwpYCBpcyBub3Qgc3VwcG9ydGVkIHdlIHByZWZpeCB0aGUgZXZlbnQgbmFtZXMgd2l0aCBhXG4vLyBgfmAgdG8gbWFrZSBzdXJlIHRoYXQgdGhlIGJ1aWx0LWluIG9iamVjdCBwcm9wZXJ0aWVzIGFyZSBub3Qgb3ZlcnJpZGRlbiBvclxuLy8gdXNlZCBhcyBhbiBhdHRhY2sgdmVjdG9yLlxuLy8gV2UgYWxzbyBhc3N1bWUgdGhhdCBgT2JqZWN0LmNyZWF0ZShudWxsKWAgaXMgYXZhaWxhYmxlIHdoZW4gdGhlIGV2ZW50IG5hbWVcbi8vIGlzIGFuIEVTNiBTeW1ib2wuXG4vL1xudmFyIHByZWZpeCA9IHR5cGVvZiBPYmplY3QuY3JlYXRlICE9PSAnZnVuY3Rpb24nID8gJ34nIDogZmFsc2U7XG5cbi8qKlxuICogUmVwcmVzZW50YXRpb24gb2YgYSBzaW5nbGUgRXZlbnRFbWl0dGVyIGZ1bmN0aW9uLlxuICpcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZuIEV2ZW50IGhhbmRsZXIgdG8gYmUgY2FsbGVkLlxuICogQHBhcmFtIHtNaXhlZH0gY29udGV4dCBDb250ZXh0IGZvciBmdW5jdGlvbiBleGVjdXRpb24uXG4gKiBAcGFyYW0ge0Jvb2xlYW59IG9uY2UgT25seSBlbWl0IG9uY2VcbiAqIEBhcGkgcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBFRShmbiwgY29udGV4dCwgb25jZSkge1xuICB0aGlzLmZuID0gZm47XG4gIHRoaXMuY29udGV4dCA9IGNvbnRleHQ7XG4gIHRoaXMub25jZSA9IG9uY2UgfHwgZmFsc2U7XG59XG5cbi8qKlxuICogTWluaW1hbCBFdmVudEVtaXR0ZXIgaW50ZXJmYWNlIHRoYXQgaXMgbW9sZGVkIGFnYWluc3QgdGhlIE5vZGUuanNcbiAqIEV2ZW50RW1pdHRlciBpbnRlcmZhY2UuXG4gKlxuICogQGNvbnN0cnVjdG9yXG4gKiBAYXBpIHB1YmxpY1xuICovXG5mdW5jdGlvbiBFdmVudEVtaXR0ZXIoKSB7IC8qIE5vdGhpbmcgdG8gc2V0ICovIH1cblxuLyoqXG4gKiBIb2xkcyB0aGUgYXNzaWduZWQgRXZlbnRFbWl0dGVycyBieSBuYW1lLlxuICpcbiAqIEB0eXBlIHtPYmplY3R9XG4gKiBAcHJpdmF0ZVxuICovXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLl9ldmVudHMgPSB1bmRlZmluZWQ7XG5cbi8qKlxuICogUmV0dXJuIGEgbGlzdCBvZiBhc3NpZ25lZCBldmVudCBsaXN0ZW5lcnMuXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IGV2ZW50IFRoZSBldmVudHMgdGhhdCBzaG91bGQgYmUgbGlzdGVkLlxuICogQHBhcmFtIHtCb29sZWFufSBleGlzdHMgV2Ugb25seSBuZWVkIHRvIGtub3cgaWYgdGhlcmUgYXJlIGxpc3RlbmVycy5cbiAqIEByZXR1cm5zIHtBcnJheXxCb29sZWFufVxuICogQGFwaSBwdWJsaWNcbiAqL1xuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5saXN0ZW5lcnMgPSBmdW5jdGlvbiBsaXN0ZW5lcnMoZXZlbnQsIGV4aXN0cykge1xuICB2YXIgZXZ0ID0gcHJlZml4ID8gcHJlZml4ICsgZXZlbnQgOiBldmVudFxuICAgICwgYXZhaWxhYmxlID0gdGhpcy5fZXZlbnRzICYmIHRoaXMuX2V2ZW50c1tldnRdO1xuXG4gIGlmIChleGlzdHMpIHJldHVybiAhIWF2YWlsYWJsZTtcbiAgaWYgKCFhdmFpbGFibGUpIHJldHVybiBbXTtcbiAgaWYgKGF2YWlsYWJsZS5mbikgcmV0dXJuIFthdmFpbGFibGUuZm5dO1xuXG4gIGZvciAodmFyIGkgPSAwLCBsID0gYXZhaWxhYmxlLmxlbmd0aCwgZWUgPSBuZXcgQXJyYXkobCk7IGkgPCBsOyBpKyspIHtcbiAgICBlZVtpXSA9IGF2YWlsYWJsZVtpXS5mbjtcbiAgfVxuXG4gIHJldHVybiBlZTtcbn07XG5cbi8qKlxuICogRW1pdCBhbiBldmVudCB0byBhbGwgcmVnaXN0ZXJlZCBldmVudCBsaXN0ZW5lcnMuXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IGV2ZW50IFRoZSBuYW1lIG9mIHRoZSBldmVudC5cbiAqIEByZXR1cm5zIHtCb29sZWFufSBJbmRpY2F0aW9uIGlmIHdlJ3ZlIGVtaXR0ZWQgYW4gZXZlbnQuXG4gKiBAYXBpIHB1YmxpY1xuICovXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLmVtaXQgPSBmdW5jdGlvbiBlbWl0KGV2ZW50LCBhMSwgYTIsIGEzLCBhNCwgYTUpIHtcbiAgdmFyIGV2dCA9IHByZWZpeCA/IHByZWZpeCArIGV2ZW50IDogZXZlbnQ7XG5cbiAgaWYgKCF0aGlzLl9ldmVudHMgfHwgIXRoaXMuX2V2ZW50c1tldnRdKSByZXR1cm4gZmFsc2U7XG5cbiAgdmFyIGxpc3RlbmVycyA9IHRoaXMuX2V2ZW50c1tldnRdXG4gICAgLCBsZW4gPSBhcmd1bWVudHMubGVuZ3RoXG4gICAgLCBhcmdzXG4gICAgLCBpO1xuXG4gIGlmICgnZnVuY3Rpb24nID09PSB0eXBlb2YgbGlzdGVuZXJzLmZuKSB7XG4gICAgaWYgKGxpc3RlbmVycy5vbmNlKSB0aGlzLnJlbW92ZUxpc3RlbmVyKGV2ZW50LCBsaXN0ZW5lcnMuZm4sIHVuZGVmaW5lZCwgdHJ1ZSk7XG5cbiAgICBzd2l0Y2ggKGxlbikge1xuICAgICAgY2FzZSAxOiByZXR1cm4gbGlzdGVuZXJzLmZuLmNhbGwobGlzdGVuZXJzLmNvbnRleHQpLCB0cnVlO1xuICAgICAgY2FzZSAyOiByZXR1cm4gbGlzdGVuZXJzLmZuLmNhbGwobGlzdGVuZXJzLmNvbnRleHQsIGExKSwgdHJ1ZTtcbiAgICAgIGNhc2UgMzogcmV0dXJuIGxpc3RlbmVycy5mbi5jYWxsKGxpc3RlbmVycy5jb250ZXh0LCBhMSwgYTIpLCB0cnVlO1xuICAgICAgY2FzZSA0OiByZXR1cm4gbGlzdGVuZXJzLmZuLmNhbGwobGlzdGVuZXJzLmNvbnRleHQsIGExLCBhMiwgYTMpLCB0cnVlO1xuICAgICAgY2FzZSA1OiByZXR1cm4gbGlzdGVuZXJzLmZuLmNhbGwobGlzdGVuZXJzLmNvbnRleHQsIGExLCBhMiwgYTMsIGE0KSwgdHJ1ZTtcbiAgICAgIGNhc2UgNjogcmV0dXJuIGxpc3RlbmVycy5mbi5jYWxsKGxpc3RlbmVycy5jb250ZXh0LCBhMSwgYTIsIGEzLCBhNCwgYTUpLCB0cnVlO1xuICAgIH1cblxuICAgIGZvciAoaSA9IDEsIGFyZ3MgPSBuZXcgQXJyYXkobGVuIC0xKTsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICBhcmdzW2kgLSAxXSA9IGFyZ3VtZW50c1tpXTtcbiAgICB9XG5cbiAgICBsaXN0ZW5lcnMuZm4uYXBwbHkobGlzdGVuZXJzLmNvbnRleHQsIGFyZ3MpO1xuICB9IGVsc2Uge1xuICAgIHZhciBsZW5ndGggPSBsaXN0ZW5lcnMubGVuZ3RoXG4gICAgICAsIGo7XG5cbiAgICBmb3IgKGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmIChsaXN0ZW5lcnNbaV0ub25jZSkgdGhpcy5yZW1vdmVMaXN0ZW5lcihldmVudCwgbGlzdGVuZXJzW2ldLmZuLCB1bmRlZmluZWQsIHRydWUpO1xuXG4gICAgICBzd2l0Y2ggKGxlbikge1xuICAgICAgICBjYXNlIDE6IGxpc3RlbmVyc1tpXS5mbi5jYWxsKGxpc3RlbmVyc1tpXS5jb250ZXh0KTsgYnJlYWs7XG4gICAgICAgIGNhc2UgMjogbGlzdGVuZXJzW2ldLmZuLmNhbGwobGlzdGVuZXJzW2ldLmNvbnRleHQsIGExKTsgYnJlYWs7XG4gICAgICAgIGNhc2UgMzogbGlzdGVuZXJzW2ldLmZuLmNhbGwobGlzdGVuZXJzW2ldLmNvbnRleHQsIGExLCBhMik7IGJyZWFrO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIGlmICghYXJncykgZm9yIChqID0gMSwgYXJncyA9IG5ldyBBcnJheShsZW4gLTEpOyBqIDwgbGVuOyBqKyspIHtcbiAgICAgICAgICAgIGFyZ3NbaiAtIDFdID0gYXJndW1lbnRzW2pdO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGxpc3RlbmVyc1tpXS5mbi5hcHBseShsaXN0ZW5lcnNbaV0uY29udGV4dCwgYXJncyk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHRydWU7XG59O1xuXG4vKipcbiAqIFJlZ2lzdGVyIGEgbmV3IEV2ZW50TGlzdGVuZXIgZm9yIHRoZSBnaXZlbiBldmVudC5cbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gZXZlbnQgTmFtZSBvZiB0aGUgZXZlbnQuXG4gKiBAcGFyYW0ge0Z1bmN0b259IGZuIENhbGxiYWNrIGZ1bmN0aW9uLlxuICogQHBhcmFtIHtNaXhlZH0gY29udGV4dCBUaGUgY29udGV4dCBvZiB0aGUgZnVuY3Rpb24uXG4gKiBAYXBpIHB1YmxpY1xuICovXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLm9uID0gZnVuY3Rpb24gb24oZXZlbnQsIGZuLCBjb250ZXh0KSB7XG4gIHZhciBsaXN0ZW5lciA9IG5ldyBFRShmbiwgY29udGV4dCB8fCB0aGlzKVxuICAgICwgZXZ0ID0gcHJlZml4ID8gcHJlZml4ICsgZXZlbnQgOiBldmVudDtcblxuICBpZiAoIXRoaXMuX2V2ZW50cykgdGhpcy5fZXZlbnRzID0gcHJlZml4ID8ge30gOiBPYmplY3QuY3JlYXRlKG51bGwpO1xuICBpZiAoIXRoaXMuX2V2ZW50c1tldnRdKSB0aGlzLl9ldmVudHNbZXZ0XSA9IGxpc3RlbmVyO1xuICBlbHNlIHtcbiAgICBpZiAoIXRoaXMuX2V2ZW50c1tldnRdLmZuKSB0aGlzLl9ldmVudHNbZXZ0XS5wdXNoKGxpc3RlbmVyKTtcbiAgICBlbHNlIHRoaXMuX2V2ZW50c1tldnRdID0gW1xuICAgICAgdGhpcy5fZXZlbnRzW2V2dF0sIGxpc3RlbmVyXG4gICAgXTtcbiAgfVxuXG4gIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBBZGQgYW4gRXZlbnRMaXN0ZW5lciB0aGF0J3Mgb25seSBjYWxsZWQgb25jZS5cbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gZXZlbnQgTmFtZSBvZiB0aGUgZXZlbnQuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmbiBDYWxsYmFjayBmdW5jdGlvbi5cbiAqIEBwYXJhbSB7TWl4ZWR9IGNvbnRleHQgVGhlIGNvbnRleHQgb2YgdGhlIGZ1bmN0aW9uLlxuICogQGFwaSBwdWJsaWNcbiAqL1xuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5vbmNlID0gZnVuY3Rpb24gb25jZShldmVudCwgZm4sIGNvbnRleHQpIHtcbiAgdmFyIGxpc3RlbmVyID0gbmV3IEVFKGZuLCBjb250ZXh0IHx8IHRoaXMsIHRydWUpXG4gICAgLCBldnQgPSBwcmVmaXggPyBwcmVmaXggKyBldmVudCA6IGV2ZW50O1xuXG4gIGlmICghdGhpcy5fZXZlbnRzKSB0aGlzLl9ldmVudHMgPSBwcmVmaXggPyB7fSA6IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gIGlmICghdGhpcy5fZXZlbnRzW2V2dF0pIHRoaXMuX2V2ZW50c1tldnRdID0gbGlzdGVuZXI7XG4gIGVsc2Uge1xuICAgIGlmICghdGhpcy5fZXZlbnRzW2V2dF0uZm4pIHRoaXMuX2V2ZW50c1tldnRdLnB1c2gobGlzdGVuZXIpO1xuICAgIGVsc2UgdGhpcy5fZXZlbnRzW2V2dF0gPSBbXG4gICAgICB0aGlzLl9ldmVudHNbZXZ0XSwgbGlzdGVuZXJcbiAgICBdO1xuICB9XG5cbiAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIFJlbW92ZSBldmVudCBsaXN0ZW5lcnMuXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IGV2ZW50IFRoZSBldmVudCB3ZSB3YW50IHRvIHJlbW92ZS5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZuIFRoZSBsaXN0ZW5lciB0aGF0IHdlIG5lZWQgdG8gZmluZC5cbiAqIEBwYXJhbSB7TWl4ZWR9IGNvbnRleHQgT25seSByZW1vdmUgbGlzdGVuZXJzIG1hdGNoaW5nIHRoaXMgY29udGV4dC5cbiAqIEBwYXJhbSB7Qm9vbGVhbn0gb25jZSBPbmx5IHJlbW92ZSBvbmNlIGxpc3RlbmVycy5cbiAqIEBhcGkgcHVibGljXG4gKi9cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUucmVtb3ZlTGlzdGVuZXIgPSBmdW5jdGlvbiByZW1vdmVMaXN0ZW5lcihldmVudCwgZm4sIGNvbnRleHQsIG9uY2UpIHtcbiAgdmFyIGV2dCA9IHByZWZpeCA/IHByZWZpeCArIGV2ZW50IDogZXZlbnQ7XG5cbiAgaWYgKCF0aGlzLl9ldmVudHMgfHwgIXRoaXMuX2V2ZW50c1tldnRdKSByZXR1cm4gdGhpcztcblxuICB2YXIgbGlzdGVuZXJzID0gdGhpcy5fZXZlbnRzW2V2dF1cbiAgICAsIGV2ZW50cyA9IFtdO1xuXG4gIGlmIChmbikge1xuICAgIGlmIChsaXN0ZW5lcnMuZm4pIHtcbiAgICAgIGlmIChcbiAgICAgICAgICAgbGlzdGVuZXJzLmZuICE9PSBmblxuICAgICAgICB8fCAob25jZSAmJiAhbGlzdGVuZXJzLm9uY2UpXG4gICAgICAgIHx8IChjb250ZXh0ICYmIGxpc3RlbmVycy5jb250ZXh0ICE9PSBjb250ZXh0KVxuICAgICAgKSB7XG4gICAgICAgIGV2ZW50cy5wdXNoKGxpc3RlbmVycyk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGZvciAodmFyIGkgPSAwLCBsZW5ndGggPSBsaXN0ZW5lcnMubGVuZ3RoOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgIGxpc3RlbmVyc1tpXS5mbiAhPT0gZm5cbiAgICAgICAgICB8fCAob25jZSAmJiAhbGlzdGVuZXJzW2ldLm9uY2UpXG4gICAgICAgICAgfHwgKGNvbnRleHQgJiYgbGlzdGVuZXJzW2ldLmNvbnRleHQgIT09IGNvbnRleHQpXG4gICAgICAgICkge1xuICAgICAgICAgIGV2ZW50cy5wdXNoKGxpc3RlbmVyc1tpXSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvL1xuICAvLyBSZXNldCB0aGUgYXJyYXksIG9yIHJlbW92ZSBpdCBjb21wbGV0ZWx5IGlmIHdlIGhhdmUgbm8gbW9yZSBsaXN0ZW5lcnMuXG4gIC8vXG4gIGlmIChldmVudHMubGVuZ3RoKSB7XG4gICAgdGhpcy5fZXZlbnRzW2V2dF0gPSBldmVudHMubGVuZ3RoID09PSAxID8gZXZlbnRzWzBdIDogZXZlbnRzO1xuICB9IGVsc2Uge1xuICAgIGRlbGV0ZSB0aGlzLl9ldmVudHNbZXZ0XTtcbiAgfVxuXG4gIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBSZW1vdmUgYWxsIGxpc3RlbmVycyBvciBvbmx5IHRoZSBsaXN0ZW5lcnMgZm9yIHRoZSBzcGVjaWZpZWQgZXZlbnQuXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IGV2ZW50IFRoZSBldmVudCB3YW50IHRvIHJlbW92ZSBhbGwgbGlzdGVuZXJzIGZvci5cbiAqIEBhcGkgcHVibGljXG4gKi9cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUucmVtb3ZlQWxsTGlzdGVuZXJzID0gZnVuY3Rpb24gcmVtb3ZlQWxsTGlzdGVuZXJzKGV2ZW50KSB7XG4gIGlmICghdGhpcy5fZXZlbnRzKSByZXR1cm4gdGhpcztcblxuICBpZiAoZXZlbnQpIGRlbGV0ZSB0aGlzLl9ldmVudHNbcHJlZml4ID8gcHJlZml4ICsgZXZlbnQgOiBldmVudF07XG4gIGVsc2UgdGhpcy5fZXZlbnRzID0gcHJlZml4ID8ge30gOiBPYmplY3QuY3JlYXRlKG51bGwpO1xuXG4gIHJldHVybiB0aGlzO1xufTtcblxuLy9cbi8vIEFsaWFzIG1ldGhvZHMgbmFtZXMgYmVjYXVzZSBwZW9wbGUgcm9sbCBsaWtlIHRoYXQuXG4vL1xuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5vZmYgPSBFdmVudEVtaXR0ZXIucHJvdG90eXBlLnJlbW92ZUxpc3RlbmVyO1xuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5hZGRMaXN0ZW5lciA9IEV2ZW50RW1pdHRlci5wcm90b3R5cGUub247XG5cbi8vXG4vLyBUaGlzIGZ1bmN0aW9uIGRvZXNuJ3QgYXBwbHkgYW55bW9yZS5cbi8vXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLnNldE1heExpc3RlbmVycyA9IGZ1bmN0aW9uIHNldE1heExpc3RlbmVycygpIHtcbiAgcmV0dXJuIHRoaXM7XG59O1xuXG4vL1xuLy8gRXhwb3NlIHRoZSBwcmVmaXguXG4vL1xuRXZlbnRFbWl0dGVyLnByZWZpeGVkID0gcHJlZml4O1xuXG4vL1xuLy8gRXhwb3NlIHRoZSBtb2R1bGUuXG4vL1xuaWYgKCd1bmRlZmluZWQnICE9PSB0eXBlb2YgbW9kdWxlKSB7XG4gIG1vZHVsZS5leHBvcnRzID0gRXZlbnRFbWl0dGVyO1xufVxuIiwiLyogZXNsaW50LWRpc2FibGUgbm8tdW51c2VkLXZhcnMgKi9cbid1c2Ugc3RyaWN0JztcbnZhciBoYXNPd25Qcm9wZXJ0eSA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7XG52YXIgcHJvcElzRW51bWVyYWJsZSA9IE9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGU7XG5cbmZ1bmN0aW9uIHRvT2JqZWN0KHZhbCkge1xuXHRpZiAodmFsID09PSBudWxsIHx8IHZhbCA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0dGhyb3cgbmV3IFR5cGVFcnJvcignT2JqZWN0LmFzc2lnbiBjYW5ub3QgYmUgY2FsbGVkIHdpdGggbnVsbCBvciB1bmRlZmluZWQnKTtcblx0fVxuXG5cdHJldHVybiBPYmplY3QodmFsKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQsIHNvdXJjZSkge1xuXHR2YXIgZnJvbTtcblx0dmFyIHRvID0gdG9PYmplY3QodGFyZ2V0KTtcblx0dmFyIHN5bWJvbHM7XG5cblx0Zm9yICh2YXIgcyA9IDE7IHMgPCBhcmd1bWVudHMubGVuZ3RoOyBzKyspIHtcblx0XHRmcm9tID0gT2JqZWN0KGFyZ3VtZW50c1tzXSk7XG5cblx0XHRmb3IgKHZhciBrZXkgaW4gZnJvbSkge1xuXHRcdFx0aWYgKGhhc093blByb3BlcnR5LmNhbGwoZnJvbSwga2V5KSkge1xuXHRcdFx0XHR0b1trZXldID0gZnJvbVtrZXldO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7XG5cdFx0XHRzeW1ib2xzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhmcm9tKTtcblx0XHRcdGZvciAodmFyIGkgPSAwOyBpIDwgc3ltYm9scy5sZW5ndGg7IGkrKykge1xuXHRcdFx0XHRpZiAocHJvcElzRW51bWVyYWJsZS5jYWxsKGZyb20sIHN5bWJvbHNbaV0pKSB7XG5cdFx0XHRcdFx0dG9bc3ltYm9sc1tpXV0gPSBmcm9tW3N5bWJvbHNbaV1dO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIHRvO1xufTtcbiIsIi8qIVxuICogYXN5bmNcbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS9jYW9sYW4vYXN5bmNcbiAqXG4gKiBDb3B5cmlnaHQgMjAxMC0yMDE0IENhb2xhbiBNY01haG9uXG4gKiBSZWxlYXNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2VcbiAqL1xuLypqc2hpbnQgb25ldmFyOiBmYWxzZSwgaW5kZW50OjQgKi9cbi8qZ2xvYmFsIHNldEltbWVkaWF0ZTogZmFsc2UsIHNldFRpbWVvdXQ6IGZhbHNlLCBjb25zb2xlOiBmYWxzZSAqL1xuKGZ1bmN0aW9uICgpIHtcblxuICAgIHZhciBhc3luYyA9IHt9O1xuXG4gICAgLy8gZ2xvYmFsIG9uIHRoZSBzZXJ2ZXIsIHdpbmRvdyBpbiB0aGUgYnJvd3NlclxuICAgIHZhciByb290LCBwcmV2aW91c19hc3luYztcblxuICAgIHJvb3QgPSB0aGlzO1xuICAgIGlmIChyb290ICE9IG51bGwpIHtcbiAgICAgIHByZXZpb3VzX2FzeW5jID0gcm9vdC5hc3luYztcbiAgICB9XG5cbiAgICBhc3luYy5ub0NvbmZsaWN0ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByb290LmFzeW5jID0gcHJldmlvdXNfYXN5bmM7XG4gICAgICAgIHJldHVybiBhc3luYztcbiAgICB9O1xuXG4gICAgZnVuY3Rpb24gb25seV9vbmNlKGZuKSB7XG4gICAgICAgIHZhciBjYWxsZWQgPSBmYWxzZTtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgaWYgKGNhbGxlZCkgdGhyb3cgbmV3IEVycm9yKFwiQ2FsbGJhY2sgd2FzIGFscmVhZHkgY2FsbGVkLlwiKTtcbiAgICAgICAgICAgIGNhbGxlZCA9IHRydWU7XG4gICAgICAgICAgICBmbi5hcHBseShyb290LCBhcmd1bWVudHMpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8vLyBjcm9zcy1icm93c2VyIGNvbXBhdGlibGl0eSBmdW5jdGlvbnMgLy8vL1xuXG4gICAgdmFyIF90b1N0cmluZyA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7XG5cbiAgICB2YXIgX2lzQXJyYXkgPSBBcnJheS5pc0FycmF5IHx8IGZ1bmN0aW9uIChvYmopIHtcbiAgICAgICAgcmV0dXJuIF90b1N0cmluZy5jYWxsKG9iaikgPT09ICdbb2JqZWN0IEFycmF5XSc7XG4gICAgfTtcblxuICAgIHZhciBfZWFjaCA9IGZ1bmN0aW9uIChhcnIsIGl0ZXJhdG9yKSB7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXJyLmxlbmd0aDsgaSArPSAxKSB7XG4gICAgICAgICAgICBpdGVyYXRvcihhcnJbaV0sIGksIGFycik7XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgdmFyIF9tYXAgPSBmdW5jdGlvbiAoYXJyLCBpdGVyYXRvcikge1xuICAgICAgICBpZiAoYXJyLm1hcCkge1xuICAgICAgICAgICAgcmV0dXJuIGFyci5tYXAoaXRlcmF0b3IpO1xuICAgICAgICB9XG4gICAgICAgIHZhciByZXN1bHRzID0gW107XG4gICAgICAgIF9lYWNoKGFyciwgZnVuY3Rpb24gKHgsIGksIGEpIHtcbiAgICAgICAgICAgIHJlc3VsdHMucHVzaChpdGVyYXRvcih4LCBpLCBhKSk7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gcmVzdWx0cztcbiAgICB9O1xuXG4gICAgdmFyIF9yZWR1Y2UgPSBmdW5jdGlvbiAoYXJyLCBpdGVyYXRvciwgbWVtbykge1xuICAgICAgICBpZiAoYXJyLnJlZHVjZSkge1xuICAgICAgICAgICAgcmV0dXJuIGFyci5yZWR1Y2UoaXRlcmF0b3IsIG1lbW8pO1xuICAgICAgICB9XG4gICAgICAgIF9lYWNoKGFyciwgZnVuY3Rpb24gKHgsIGksIGEpIHtcbiAgICAgICAgICAgIG1lbW8gPSBpdGVyYXRvcihtZW1vLCB4LCBpLCBhKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBtZW1vO1xuICAgIH07XG5cbiAgICB2YXIgX2tleXMgPSBmdW5jdGlvbiAob2JqKSB7XG4gICAgICAgIGlmIChPYmplY3Qua2V5cykge1xuICAgICAgICAgICAgcmV0dXJuIE9iamVjdC5rZXlzKG9iaik7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIGtleXMgPSBbXTtcbiAgICAgICAgZm9yICh2YXIgayBpbiBvYmopIHtcbiAgICAgICAgICAgIGlmIChvYmouaGFzT3duUHJvcGVydHkoaykpIHtcbiAgICAgICAgICAgICAgICBrZXlzLnB1c2goayk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGtleXM7XG4gICAgfTtcblxuICAgIC8vLy8gZXhwb3J0ZWQgYXN5bmMgbW9kdWxlIGZ1bmN0aW9ucyAvLy8vXG5cbiAgICAvLy8vIG5leHRUaWNrIGltcGxlbWVudGF0aW9uIHdpdGggYnJvd3Nlci1jb21wYXRpYmxlIGZhbGxiYWNrIC8vLy9cbiAgICBpZiAodHlwZW9mIHByb2Nlc3MgPT09ICd1bmRlZmluZWQnIHx8ICEocHJvY2Vzcy5uZXh0VGljaykpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBzZXRJbW1lZGlhdGUgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIGFzeW5jLm5leHRUaWNrID0gZnVuY3Rpb24gKGZuKSB7XG4gICAgICAgICAgICAgICAgLy8gbm90IGEgZGlyZWN0IGFsaWFzIGZvciBJRTEwIGNvbXBhdGliaWxpdHlcbiAgICAgICAgICAgICAgICBzZXRJbW1lZGlhdGUoZm4pO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGFzeW5jLnNldEltbWVkaWF0ZSA9IGFzeW5jLm5leHRUaWNrO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgYXN5bmMubmV4dFRpY2sgPSBmdW5jdGlvbiAoZm4pIHtcbiAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KGZuLCAwKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBhc3luYy5zZXRJbW1lZGlhdGUgPSBhc3luYy5uZXh0VGljaztcbiAgICAgICAgfVxuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgYXN5bmMubmV4dFRpY2sgPSBwcm9jZXNzLm5leHRUaWNrO1xuICAgICAgICBpZiAodHlwZW9mIHNldEltbWVkaWF0ZSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgIGFzeW5jLnNldEltbWVkaWF0ZSA9IGZ1bmN0aW9uIChmbikge1xuICAgICAgICAgICAgICAvLyBub3QgYSBkaXJlY3QgYWxpYXMgZm9yIElFMTAgY29tcGF0aWJpbGl0eVxuICAgICAgICAgICAgICBzZXRJbW1lZGlhdGUoZm4pO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGFzeW5jLnNldEltbWVkaWF0ZSA9IGFzeW5jLm5leHRUaWNrO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgYXN5bmMuZWFjaCA9IGZ1bmN0aW9uIChhcnIsIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICBjYWxsYmFjayA9IGNhbGxiYWNrIHx8IGZ1bmN0aW9uICgpIHt9O1xuICAgICAgICBpZiAoIWFyci5sZW5ndGgpIHtcbiAgICAgICAgICAgIHJldHVybiBjYWxsYmFjaygpO1xuICAgICAgICB9XG4gICAgICAgIHZhciBjb21wbGV0ZWQgPSAwO1xuICAgICAgICBfZWFjaChhcnIsIGZ1bmN0aW9uICh4KSB7XG4gICAgICAgICAgICBpdGVyYXRvcih4LCBvbmx5X29uY2UoZG9uZSkgKTtcbiAgICAgICAgfSk7XG4gICAgICAgIGZ1bmN0aW9uIGRvbmUoZXJyKSB7XG4gICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgICBjYWxsYmFjayA9IGZ1bmN0aW9uICgpIHt9O1xuICAgICAgICAgIH1cbiAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgY29tcGxldGVkICs9IDE7XG4gICAgICAgICAgICAgIGlmIChjb21wbGV0ZWQgPj0gYXJyLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgY2FsbGJhY2soKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH07XG4gICAgYXN5bmMuZm9yRWFjaCA9IGFzeW5jLmVhY2g7XG5cbiAgICBhc3luYy5lYWNoU2VyaWVzID0gZnVuY3Rpb24gKGFyciwgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgIGNhbGxiYWNrID0gY2FsbGJhY2sgfHwgZnVuY3Rpb24gKCkge307XG4gICAgICAgIGlmICghYXJyLmxlbmd0aCkge1xuICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKCk7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIGNvbXBsZXRlZCA9IDA7XG4gICAgICAgIHZhciBpdGVyYXRlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgaXRlcmF0b3IoYXJyW2NvbXBsZXRlZF0sIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrID0gZnVuY3Rpb24gKCkge307XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBjb21wbGV0ZWQgKz0gMTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNvbXBsZXRlZCA+PSBhcnIubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgaXRlcmF0ZSgpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH07XG4gICAgICAgIGl0ZXJhdGUoKTtcbiAgICB9O1xuICAgIGFzeW5jLmZvckVhY2hTZXJpZXMgPSBhc3luYy5lYWNoU2VyaWVzO1xuXG4gICAgYXN5bmMuZWFjaExpbWl0ID0gZnVuY3Rpb24gKGFyciwgbGltaXQsIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICB2YXIgZm4gPSBfZWFjaExpbWl0KGxpbWl0KTtcbiAgICAgICAgZm4uYXBwbHkobnVsbCwgW2FyciwgaXRlcmF0b3IsIGNhbGxiYWNrXSk7XG4gICAgfTtcbiAgICBhc3luYy5mb3JFYWNoTGltaXQgPSBhc3luYy5lYWNoTGltaXQ7XG5cbiAgICB2YXIgX2VhY2hMaW1pdCA9IGZ1bmN0aW9uIChsaW1pdCkge1xuXG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAoYXJyLCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIGNhbGxiYWNrID0gY2FsbGJhY2sgfHwgZnVuY3Rpb24gKCkge307XG4gICAgICAgICAgICBpZiAoIWFyci5sZW5ndGggfHwgbGltaXQgPD0gMCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBjYWxsYmFjaygpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdmFyIGNvbXBsZXRlZCA9IDA7XG4gICAgICAgICAgICB2YXIgc3RhcnRlZCA9IDA7XG4gICAgICAgICAgICB2YXIgcnVubmluZyA9IDA7XG5cbiAgICAgICAgICAgIChmdW5jdGlvbiByZXBsZW5pc2ggKCkge1xuICAgICAgICAgICAgICAgIGlmIChjb21wbGV0ZWQgPj0gYXJyLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gY2FsbGJhY2soKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB3aGlsZSAocnVubmluZyA8IGxpbWl0ICYmIHN0YXJ0ZWQgPCBhcnIubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgIHN0YXJ0ZWQgKz0gMTtcbiAgICAgICAgICAgICAgICAgICAgcnVubmluZyArPSAxO1xuICAgICAgICAgICAgICAgICAgICBpdGVyYXRvcihhcnJbc3RhcnRlZCAtIDFdLCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayA9IGZ1bmN0aW9uICgpIHt9O1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcGxldGVkICs9IDE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcnVubmluZyAtPSAxO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb21wbGV0ZWQgPj0gYXJyLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVwbGVuaXNoKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KSgpO1xuICAgICAgICB9O1xuICAgIH07XG5cblxuICAgIHZhciBkb1BhcmFsbGVsID0gZnVuY3Rpb24gKGZuKSB7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7XG4gICAgICAgICAgICByZXR1cm4gZm4uYXBwbHkobnVsbCwgW2FzeW5jLmVhY2hdLmNvbmNhdChhcmdzKSk7XG4gICAgICAgIH07XG4gICAgfTtcbiAgICB2YXIgZG9QYXJhbGxlbExpbWl0ID0gZnVuY3Rpb24obGltaXQsIGZuKSB7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7XG4gICAgICAgICAgICByZXR1cm4gZm4uYXBwbHkobnVsbCwgW19lYWNoTGltaXQobGltaXQpXS5jb25jYXQoYXJncykpO1xuICAgICAgICB9O1xuICAgIH07XG4gICAgdmFyIGRvU2VyaWVzID0gZnVuY3Rpb24gKGZuKSB7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7XG4gICAgICAgICAgICByZXR1cm4gZm4uYXBwbHkobnVsbCwgW2FzeW5jLmVhY2hTZXJpZXNdLmNvbmNhdChhcmdzKSk7XG4gICAgICAgIH07XG4gICAgfTtcblxuXG4gICAgdmFyIF9hc3luY01hcCA9IGZ1bmN0aW9uIChlYWNoZm4sIGFyciwgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgIGFyciA9IF9tYXAoYXJyLCBmdW5jdGlvbiAoeCwgaSkge1xuICAgICAgICAgICAgcmV0dXJuIHtpbmRleDogaSwgdmFsdWU6IHh9O1xuICAgICAgICB9KTtcbiAgICAgICAgaWYgKCFjYWxsYmFjaykge1xuICAgICAgICAgICAgZWFjaGZuKGFyciwgZnVuY3Rpb24gKHgsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICAgICAgaXRlcmF0b3IoeC52YWx1ZSwgZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB2YXIgcmVzdWx0cyA9IFtdO1xuICAgICAgICAgICAgZWFjaGZuKGFyciwgZnVuY3Rpb24gKHgsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICAgICAgaXRlcmF0b3IoeC52YWx1ZSwgZnVuY3Rpb24gKGVyciwgdikge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHRzW3guaW5kZXhdID0gdjtcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0sIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnIsIHJlc3VsdHMpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIGFzeW5jLm1hcCA9IGRvUGFyYWxsZWwoX2FzeW5jTWFwKTtcbiAgICBhc3luYy5tYXBTZXJpZXMgPSBkb1NlcmllcyhfYXN5bmNNYXApO1xuICAgIGFzeW5jLm1hcExpbWl0ID0gZnVuY3Rpb24gKGFyciwgbGltaXQsIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICByZXR1cm4gX21hcExpbWl0KGxpbWl0KShhcnIsIGl0ZXJhdG9yLCBjYWxsYmFjayk7XG4gICAgfTtcblxuICAgIHZhciBfbWFwTGltaXQgPSBmdW5jdGlvbihsaW1pdCkge1xuICAgICAgICByZXR1cm4gZG9QYXJhbGxlbExpbWl0KGxpbWl0LCBfYXN5bmNNYXApO1xuICAgIH07XG5cbiAgICAvLyByZWR1Y2Ugb25seSBoYXMgYSBzZXJpZXMgdmVyc2lvbiwgYXMgZG9pbmcgcmVkdWNlIGluIHBhcmFsbGVsIHdvbid0XG4gICAgLy8gd29yayBpbiBtYW55IHNpdHVhdGlvbnMuXG4gICAgYXN5bmMucmVkdWNlID0gZnVuY3Rpb24gKGFyciwgbWVtbywgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgIGFzeW5jLmVhY2hTZXJpZXMoYXJyLCBmdW5jdGlvbiAoeCwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIGl0ZXJhdG9yKG1lbW8sIHgsIGZ1bmN0aW9uIChlcnIsIHYpIHtcbiAgICAgICAgICAgICAgICBtZW1vID0gdjtcbiAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgIGNhbGxiYWNrKGVyciwgbWVtbyk7XG4gICAgICAgIH0pO1xuICAgIH07XG4gICAgLy8gaW5qZWN0IGFsaWFzXG4gICAgYXN5bmMuaW5qZWN0ID0gYXN5bmMucmVkdWNlO1xuICAgIC8vIGZvbGRsIGFsaWFzXG4gICAgYXN5bmMuZm9sZGwgPSBhc3luYy5yZWR1Y2U7XG5cbiAgICBhc3luYy5yZWR1Y2VSaWdodCA9IGZ1bmN0aW9uIChhcnIsIG1lbW8sIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICB2YXIgcmV2ZXJzZWQgPSBfbWFwKGFyciwgZnVuY3Rpb24gKHgpIHtcbiAgICAgICAgICAgIHJldHVybiB4O1xuICAgICAgICB9KS5yZXZlcnNlKCk7XG4gICAgICAgIGFzeW5jLnJlZHVjZShyZXZlcnNlZCwgbWVtbywgaXRlcmF0b3IsIGNhbGxiYWNrKTtcbiAgICB9O1xuICAgIC8vIGZvbGRyIGFsaWFzXG4gICAgYXN5bmMuZm9sZHIgPSBhc3luYy5yZWR1Y2VSaWdodDtcblxuICAgIHZhciBfZmlsdGVyID0gZnVuY3Rpb24gKGVhY2hmbiwgYXJyLCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgdmFyIHJlc3VsdHMgPSBbXTtcbiAgICAgICAgYXJyID0gX21hcChhcnIsIGZ1bmN0aW9uICh4LCBpKSB7XG4gICAgICAgICAgICByZXR1cm4ge2luZGV4OiBpLCB2YWx1ZTogeH07XG4gICAgICAgIH0pO1xuICAgICAgICBlYWNoZm4oYXJyLCBmdW5jdGlvbiAoeCwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIGl0ZXJhdG9yKHgudmFsdWUsIGZ1bmN0aW9uICh2KSB7XG4gICAgICAgICAgICAgICAgaWYgKHYpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0cy5wdXNoKHgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgIGNhbGxiYWNrKF9tYXAocmVzdWx0cy5zb3J0KGZ1bmN0aW9uIChhLCBiKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGEuaW5kZXggLSBiLmluZGV4O1xuICAgICAgICAgICAgfSksIGZ1bmN0aW9uICh4KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHgudmFsdWU7XG4gICAgICAgICAgICB9KSk7XG4gICAgICAgIH0pO1xuICAgIH07XG4gICAgYXN5bmMuZmlsdGVyID0gZG9QYXJhbGxlbChfZmlsdGVyKTtcbiAgICBhc3luYy5maWx0ZXJTZXJpZXMgPSBkb1NlcmllcyhfZmlsdGVyKTtcbiAgICAvLyBzZWxlY3QgYWxpYXNcbiAgICBhc3luYy5zZWxlY3QgPSBhc3luYy5maWx0ZXI7XG4gICAgYXN5bmMuc2VsZWN0U2VyaWVzID0gYXN5bmMuZmlsdGVyU2VyaWVzO1xuXG4gICAgdmFyIF9yZWplY3QgPSBmdW5jdGlvbiAoZWFjaGZuLCBhcnIsIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICB2YXIgcmVzdWx0cyA9IFtdO1xuICAgICAgICBhcnIgPSBfbWFwKGFyciwgZnVuY3Rpb24gKHgsIGkpIHtcbiAgICAgICAgICAgIHJldHVybiB7aW5kZXg6IGksIHZhbHVlOiB4fTtcbiAgICAgICAgfSk7XG4gICAgICAgIGVhY2hmbihhcnIsIGZ1bmN0aW9uICh4LCBjYWxsYmFjaykge1xuICAgICAgICAgICAgaXRlcmF0b3IoeC52YWx1ZSwgZnVuY3Rpb24gKHYpIHtcbiAgICAgICAgICAgICAgICBpZiAoIXYpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0cy5wdXNoKHgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgIGNhbGxiYWNrKF9tYXAocmVzdWx0cy5zb3J0KGZ1bmN0aW9uIChhLCBiKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGEuaW5kZXggLSBiLmluZGV4O1xuICAgICAgICAgICAgfSksIGZ1bmN0aW9uICh4KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHgudmFsdWU7XG4gICAgICAgICAgICB9KSk7XG4gICAgICAgIH0pO1xuICAgIH07XG4gICAgYXN5bmMucmVqZWN0ID0gZG9QYXJhbGxlbChfcmVqZWN0KTtcbiAgICBhc3luYy5yZWplY3RTZXJpZXMgPSBkb1NlcmllcyhfcmVqZWN0KTtcblxuICAgIHZhciBfZGV0ZWN0ID0gZnVuY3Rpb24gKGVhY2hmbiwgYXJyLCBpdGVyYXRvciwgbWFpbl9jYWxsYmFjaykge1xuICAgICAgICBlYWNoZm4oYXJyLCBmdW5jdGlvbiAoeCwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIGl0ZXJhdG9yKHgsIGZ1bmN0aW9uIChyZXN1bHQpIHtcbiAgICAgICAgICAgICAgICBpZiAocmVzdWx0KSB7XG4gICAgICAgICAgICAgICAgICAgIG1haW5fY2FsbGJhY2soeCk7XG4gICAgICAgICAgICAgICAgICAgIG1haW5fY2FsbGJhY2sgPSBmdW5jdGlvbiAoKSB7fTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgIG1haW5fY2FsbGJhY2soKTtcbiAgICAgICAgfSk7XG4gICAgfTtcbiAgICBhc3luYy5kZXRlY3QgPSBkb1BhcmFsbGVsKF9kZXRlY3QpO1xuICAgIGFzeW5jLmRldGVjdFNlcmllcyA9IGRvU2VyaWVzKF9kZXRlY3QpO1xuXG4gICAgYXN5bmMuc29tZSA9IGZ1bmN0aW9uIChhcnIsIGl0ZXJhdG9yLCBtYWluX2NhbGxiYWNrKSB7XG4gICAgICAgIGFzeW5jLmVhY2goYXJyLCBmdW5jdGlvbiAoeCwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIGl0ZXJhdG9yKHgsIGZ1bmN0aW9uICh2KSB7XG4gICAgICAgICAgICAgICAgaWYgKHYpIHtcbiAgICAgICAgICAgICAgICAgICAgbWFpbl9jYWxsYmFjayh0cnVlKTtcbiAgICAgICAgICAgICAgICAgICAgbWFpbl9jYWxsYmFjayA9IGZ1bmN0aW9uICgpIHt9O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgIG1haW5fY2FsbGJhY2soZmFsc2UpO1xuICAgICAgICB9KTtcbiAgICB9O1xuICAgIC8vIGFueSBhbGlhc1xuICAgIGFzeW5jLmFueSA9IGFzeW5jLnNvbWU7XG5cbiAgICBhc3luYy5ldmVyeSA9IGZ1bmN0aW9uIChhcnIsIGl0ZXJhdG9yLCBtYWluX2NhbGxiYWNrKSB7XG4gICAgICAgIGFzeW5jLmVhY2goYXJyLCBmdW5jdGlvbiAoeCwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIGl0ZXJhdG9yKHgsIGZ1bmN0aW9uICh2KSB7XG4gICAgICAgICAgICAgICAgaWYgKCF2KSB7XG4gICAgICAgICAgICAgICAgICAgIG1haW5fY2FsbGJhY2soZmFsc2UpO1xuICAgICAgICAgICAgICAgICAgICBtYWluX2NhbGxiYWNrID0gZnVuY3Rpb24gKCkge307XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhbGxiYWNrKCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSwgZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgbWFpbl9jYWxsYmFjayh0cnVlKTtcbiAgICAgICAgfSk7XG4gICAgfTtcbiAgICAvLyBhbGwgYWxpYXNcbiAgICBhc3luYy5hbGwgPSBhc3luYy5ldmVyeTtcblxuICAgIGFzeW5jLnNvcnRCeSA9IGZ1bmN0aW9uIChhcnIsIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICBhc3luYy5tYXAoYXJyLCBmdW5jdGlvbiAoeCwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIGl0ZXJhdG9yKHgsIGZ1bmN0aW9uIChlcnIsIGNyaXRlcmlhKSB7XG4gICAgICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2sobnVsbCwge3ZhbHVlOiB4LCBjcml0ZXJpYTogY3JpdGVyaWF9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSwgZnVuY3Rpb24gKGVyciwgcmVzdWx0cykge1xuICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAgIHJldHVybiBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgdmFyIGZuID0gZnVuY3Rpb24gKGxlZnQsIHJpZ2h0KSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBhID0gbGVmdC5jcml0ZXJpYSwgYiA9IHJpZ2h0LmNyaXRlcmlhO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYSA8IGIgPyAtMSA6IGEgPiBiID8gMSA6IDA7XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICBjYWxsYmFjayhudWxsLCBfbWFwKHJlc3VsdHMuc29ydChmbiksIGZ1bmN0aW9uICh4KSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB4LnZhbHVlO1xuICAgICAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfTtcblxuICAgIGFzeW5jLmF1dG8gPSBmdW5jdGlvbiAodGFza3MsIGNhbGxiYWNrKSB7XG4gICAgICAgIGNhbGxiYWNrID0gY2FsbGJhY2sgfHwgZnVuY3Rpb24gKCkge307XG4gICAgICAgIHZhciBrZXlzID0gX2tleXModGFza3MpO1xuICAgICAgICB2YXIgcmVtYWluaW5nVGFza3MgPSBrZXlzLmxlbmd0aFxuICAgICAgICBpZiAoIXJlbWFpbmluZ1Rhc2tzKSB7XG4gICAgICAgICAgICByZXR1cm4gY2FsbGJhY2soKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciByZXN1bHRzID0ge307XG5cbiAgICAgICAgdmFyIGxpc3RlbmVycyA9IFtdO1xuICAgICAgICB2YXIgYWRkTGlzdGVuZXIgPSBmdW5jdGlvbiAoZm4pIHtcbiAgICAgICAgICAgIGxpc3RlbmVycy51bnNoaWZ0KGZuKTtcbiAgICAgICAgfTtcbiAgICAgICAgdmFyIHJlbW92ZUxpc3RlbmVyID0gZnVuY3Rpb24gKGZuKSB7XG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxpc3RlbmVycy5sZW5ndGg7IGkgKz0gMSkge1xuICAgICAgICAgICAgICAgIGlmIChsaXN0ZW5lcnNbaV0gPT09IGZuKSB7XG4gICAgICAgICAgICAgICAgICAgIGxpc3RlbmVycy5zcGxpY2UoaSwgMSk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIHZhciB0YXNrQ29tcGxldGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZW1haW5pbmdUYXNrcy0tXG4gICAgICAgICAgICBfZWFjaChsaXN0ZW5lcnMuc2xpY2UoMCksIGZ1bmN0aW9uIChmbikge1xuICAgICAgICAgICAgICAgIGZuKCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfTtcblxuICAgICAgICBhZGRMaXN0ZW5lcihmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBpZiAoIXJlbWFpbmluZ1Rhc2tzKSB7XG4gICAgICAgICAgICAgICAgdmFyIHRoZUNhbGxiYWNrID0gY2FsbGJhY2s7XG4gICAgICAgICAgICAgICAgLy8gcHJldmVudCBmaW5hbCBjYWxsYmFjayBmcm9tIGNhbGxpbmcgaXRzZWxmIGlmIGl0IGVycm9yc1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrID0gZnVuY3Rpb24gKCkge307XG5cbiAgICAgICAgICAgICAgICB0aGVDYWxsYmFjayhudWxsLCByZXN1bHRzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgX2VhY2goa2V5cywgZnVuY3Rpb24gKGspIHtcbiAgICAgICAgICAgIHZhciB0YXNrID0gX2lzQXJyYXkodGFza3Nba10pID8gdGFza3Nba106IFt0YXNrc1trXV07XG4gICAgICAgICAgICB2YXIgdGFza0NhbGxiYWNrID0gZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgICAgIHZhciBhcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKTtcbiAgICAgICAgICAgICAgICBpZiAoYXJncy5sZW5ndGggPD0gMSkge1xuICAgICAgICAgICAgICAgICAgICBhcmdzID0gYXJnc1swXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAgICAgICB2YXIgc2FmZVJlc3VsdHMgPSB7fTtcbiAgICAgICAgICAgICAgICAgICAgX2VhY2goX2tleXMocmVzdWx0cyksIGZ1bmN0aW9uKHJrZXkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNhZmVSZXN1bHRzW3JrZXldID0gcmVzdWx0c1tya2V5XTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIHNhZmVSZXN1bHRzW2tdID0gYXJncztcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soZXJyLCBzYWZlUmVzdWx0cyk7XG4gICAgICAgICAgICAgICAgICAgIC8vIHN0b3Agc3Vic2VxdWVudCBlcnJvcnMgaGl0dGluZyBjYWxsYmFjayBtdWx0aXBsZSB0aW1lc1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayA9IGZ1bmN0aW9uICgpIHt9O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0c1trXSA9IGFyZ3M7XG4gICAgICAgICAgICAgICAgICAgIGFzeW5jLnNldEltbWVkaWF0ZSh0YXNrQ29tcGxldGUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICB2YXIgcmVxdWlyZXMgPSB0YXNrLnNsaWNlKDAsIE1hdGguYWJzKHRhc2subGVuZ3RoIC0gMSkpIHx8IFtdO1xuICAgICAgICAgICAgdmFyIHJlYWR5ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBfcmVkdWNlKHJlcXVpcmVzLCBmdW5jdGlvbiAoYSwgeCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gKGEgJiYgcmVzdWx0cy5oYXNPd25Qcm9wZXJ0eSh4KSk7XG4gICAgICAgICAgICAgICAgfSwgdHJ1ZSkgJiYgIXJlc3VsdHMuaGFzT3duUHJvcGVydHkoayk7XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgaWYgKHJlYWR5KCkpIHtcbiAgICAgICAgICAgICAgICB0YXNrW3Rhc2subGVuZ3RoIC0gMV0odGFza0NhbGxiYWNrLCByZXN1bHRzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHZhciBsaXN0ZW5lciA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlYWR5KCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlbW92ZUxpc3RlbmVyKGxpc3RlbmVyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRhc2tbdGFzay5sZW5ndGggLSAxXSh0YXNrQ2FsbGJhY2ssIHJlc3VsdHMpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICBhZGRMaXN0ZW5lcihsaXN0ZW5lcik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH07XG5cbiAgICBhc3luYy5yZXRyeSA9IGZ1bmN0aW9uKHRpbWVzLCB0YXNrLCBjYWxsYmFjaykge1xuICAgICAgICB2YXIgREVGQVVMVF9USU1FUyA9IDU7XG4gICAgICAgIHZhciBhdHRlbXB0cyA9IFtdO1xuICAgICAgICAvLyBVc2UgZGVmYXVsdHMgaWYgdGltZXMgbm90IHBhc3NlZFxuICAgICAgICBpZiAodHlwZW9mIHRpbWVzID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICBjYWxsYmFjayA9IHRhc2s7XG4gICAgICAgICAgICB0YXNrID0gdGltZXM7XG4gICAgICAgICAgICB0aW1lcyA9IERFRkFVTFRfVElNRVM7XG4gICAgICAgIH1cbiAgICAgICAgLy8gTWFrZSBzdXJlIHRpbWVzIGlzIGEgbnVtYmVyXG4gICAgICAgIHRpbWVzID0gcGFyc2VJbnQodGltZXMsIDEwKSB8fCBERUZBVUxUX1RJTUVTO1xuICAgICAgICB2YXIgd3JhcHBlZFRhc2sgPSBmdW5jdGlvbih3cmFwcGVkQ2FsbGJhY2ssIHdyYXBwZWRSZXN1bHRzKSB7XG4gICAgICAgICAgICB2YXIgcmV0cnlBdHRlbXB0ID0gZnVuY3Rpb24odGFzaywgZmluYWxBdHRlbXB0KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKHNlcmllc0NhbGxiYWNrKSB7XG4gICAgICAgICAgICAgICAgICAgIHRhc2soZnVuY3Rpb24oZXJyLCByZXN1bHQpe1xuICAgICAgICAgICAgICAgICAgICAgICAgc2VyaWVzQ2FsbGJhY2soIWVyciB8fCBmaW5hbEF0dGVtcHQsIHtlcnI6IGVyciwgcmVzdWx0OiByZXN1bHR9KTtcbiAgICAgICAgICAgICAgICAgICAgfSwgd3JhcHBlZFJlc3VsdHMpO1xuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgd2hpbGUgKHRpbWVzKSB7XG4gICAgICAgICAgICAgICAgYXR0ZW1wdHMucHVzaChyZXRyeUF0dGVtcHQodGFzaywgISh0aW1lcy09MSkpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGFzeW5jLnNlcmllcyhhdHRlbXB0cywgZnVuY3Rpb24oZG9uZSwgZGF0YSl7XG4gICAgICAgICAgICAgICAgZGF0YSA9IGRhdGFbZGF0YS5sZW5ndGggLSAxXTtcbiAgICAgICAgICAgICAgICAod3JhcHBlZENhbGxiYWNrIHx8IGNhbGxiYWNrKShkYXRhLmVyciwgZGF0YS5yZXN1bHQpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gSWYgYSBjYWxsYmFjayBpcyBwYXNzZWQsIHJ1biB0aGlzIGFzIGEgY29udHJvbGwgZmxvd1xuICAgICAgICByZXR1cm4gY2FsbGJhY2sgPyB3cmFwcGVkVGFzaygpIDogd3JhcHBlZFRhc2tcbiAgICB9O1xuXG4gICAgYXN5bmMud2F0ZXJmYWxsID0gZnVuY3Rpb24gKHRhc2tzLCBjYWxsYmFjaykge1xuICAgICAgICBjYWxsYmFjayA9IGNhbGxiYWNrIHx8IGZ1bmN0aW9uICgpIHt9O1xuICAgICAgICBpZiAoIV9pc0FycmF5KHRhc2tzKSkge1xuICAgICAgICAgIHZhciBlcnIgPSBuZXcgRXJyb3IoJ0ZpcnN0IGFyZ3VtZW50IHRvIHdhdGVyZmFsbCBtdXN0IGJlIGFuIGFycmF5IG9mIGZ1bmN0aW9ucycpO1xuICAgICAgICAgIHJldHVybiBjYWxsYmFjayhlcnIpO1xuICAgICAgICB9XG4gICAgICAgIGlmICghdGFza3MubGVuZ3RoKSB7XG4gICAgICAgICAgICByZXR1cm4gY2FsbGJhY2soKTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgd3JhcEl0ZXJhdG9yID0gZnVuY3Rpb24gKGl0ZXJhdG9yKSB7XG4gICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2suYXBwbHkobnVsbCwgYXJndW1lbnRzKTtcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2sgPSBmdW5jdGlvbiAoKSB7fTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBhcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKTtcbiAgICAgICAgICAgICAgICAgICAgdmFyIG5leHQgPSBpdGVyYXRvci5uZXh0KCk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChuZXh0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhcmdzLnB1c2god3JhcEl0ZXJhdG9yKG5leHQpKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3MucHVzaChjYWxsYmFjayk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgYXN5bmMuc2V0SW1tZWRpYXRlKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGl0ZXJhdG9yLmFwcGx5KG51bGwsIGFyZ3MpO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9O1xuICAgICAgICB9O1xuICAgICAgICB3cmFwSXRlcmF0b3IoYXN5bmMuaXRlcmF0b3IodGFza3MpKSgpO1xuICAgIH07XG5cbiAgICB2YXIgX3BhcmFsbGVsID0gZnVuY3Rpb24oZWFjaGZuLCB0YXNrcywgY2FsbGJhY2spIHtcbiAgICAgICAgY2FsbGJhY2sgPSBjYWxsYmFjayB8fCBmdW5jdGlvbiAoKSB7fTtcbiAgICAgICAgaWYgKF9pc0FycmF5KHRhc2tzKSkge1xuICAgICAgICAgICAgZWFjaGZuLm1hcCh0YXNrcywgZnVuY3Rpb24gKGZuLCBjYWxsYmFjaykge1xuICAgICAgICAgICAgICAgIGlmIChmbikge1xuICAgICAgICAgICAgICAgICAgICBmbihmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoYXJncy5sZW5ndGggPD0gMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3MgPSBhcmdzWzBdO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2suY2FsbChudWxsLCBlcnIsIGFyZ3MpO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LCBjYWxsYmFjayk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB2YXIgcmVzdWx0cyA9IHt9O1xuICAgICAgICAgICAgZWFjaGZuLmVhY2goX2tleXModGFza3MpLCBmdW5jdGlvbiAoaywgY2FsbGJhY2spIHtcbiAgICAgICAgICAgICAgICB0YXNrc1trXShmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBhcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGFyZ3MubGVuZ3RoIDw9IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3MgPSBhcmdzWzBdO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdHNba10gPSBhcmdzO1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSwgZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrKGVyciwgcmVzdWx0cyk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH07XG5cbiAgICBhc3luYy5wYXJhbGxlbCA9IGZ1bmN0aW9uICh0YXNrcywgY2FsbGJhY2spIHtcbiAgICAgICAgX3BhcmFsbGVsKHsgbWFwOiBhc3luYy5tYXAsIGVhY2g6IGFzeW5jLmVhY2ggfSwgdGFza3MsIGNhbGxiYWNrKTtcbiAgICB9O1xuXG4gICAgYXN5bmMucGFyYWxsZWxMaW1pdCA9IGZ1bmN0aW9uKHRhc2tzLCBsaW1pdCwgY2FsbGJhY2spIHtcbiAgICAgICAgX3BhcmFsbGVsKHsgbWFwOiBfbWFwTGltaXQobGltaXQpLCBlYWNoOiBfZWFjaExpbWl0KGxpbWl0KSB9LCB0YXNrcywgY2FsbGJhY2spO1xuICAgIH07XG5cbiAgICBhc3luYy5zZXJpZXMgPSBmdW5jdGlvbiAodGFza3MsIGNhbGxiYWNrKSB7XG4gICAgICAgIGNhbGxiYWNrID0gY2FsbGJhY2sgfHwgZnVuY3Rpb24gKCkge307XG4gICAgICAgIGlmIChfaXNBcnJheSh0YXNrcykpIHtcbiAgICAgICAgICAgIGFzeW5jLm1hcFNlcmllcyh0YXNrcywgZnVuY3Rpb24gKGZuLCBjYWxsYmFjaykge1xuICAgICAgICAgICAgICAgIGlmIChmbikge1xuICAgICAgICAgICAgICAgICAgICBmbihmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoYXJncy5sZW5ndGggPD0gMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3MgPSBhcmdzWzBdO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2suY2FsbChudWxsLCBlcnIsIGFyZ3MpO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LCBjYWxsYmFjayk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB2YXIgcmVzdWx0cyA9IHt9O1xuICAgICAgICAgICAgYXN5bmMuZWFjaFNlcmllcyhfa2V5cyh0YXNrcyksIGZ1bmN0aW9uIChrLCBjYWxsYmFjaykge1xuICAgICAgICAgICAgICAgIHRhc2tzW2tdKGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGFyZ3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsIDEpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoYXJncy5sZW5ndGggPD0gMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgYXJncyA9IGFyZ3NbMF07XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0c1trXSA9IGFyZ3M7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9LCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2soZXJyLCByZXN1bHRzKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIGFzeW5jLml0ZXJhdG9yID0gZnVuY3Rpb24gKHRhc2tzKSB7XG4gICAgICAgIHZhciBtYWtlQ2FsbGJhY2sgPSBmdW5jdGlvbiAoaW5kZXgpIHtcbiAgICAgICAgICAgIHZhciBmbiA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBpZiAodGFza3MubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgIHRhc2tzW2luZGV4XS5hcHBseShudWxsLCBhcmd1bWVudHMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gZm4ubmV4dCgpO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGZuLm5leHQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIChpbmRleCA8IHRhc2tzLmxlbmd0aCAtIDEpID8gbWFrZUNhbGxiYWNrKGluZGV4ICsgMSk6IG51bGw7XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgcmV0dXJuIGZuO1xuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gbWFrZUNhbGxiYWNrKDApO1xuICAgIH07XG5cbiAgICBhc3luYy5hcHBseSA9IGZ1bmN0aW9uIChmbikge1xuICAgICAgICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMSk7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gZm4uYXBwbHkoXG4gICAgICAgICAgICAgICAgbnVsbCwgYXJncy5jb25jYXQoQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKSlcbiAgICAgICAgICAgICk7XG4gICAgICAgIH07XG4gICAgfTtcblxuICAgIHZhciBfY29uY2F0ID0gZnVuY3Rpb24gKGVhY2hmbiwgYXJyLCBmbiwgY2FsbGJhY2spIHtcbiAgICAgICAgdmFyIHIgPSBbXTtcbiAgICAgICAgZWFjaGZuKGFyciwgZnVuY3Rpb24gKHgsIGNiKSB7XG4gICAgICAgICAgICBmbih4LCBmdW5jdGlvbiAoZXJyLCB5KSB7XG4gICAgICAgICAgICAgICAgciA9IHIuY29uY2F0KHkgfHwgW10pO1xuICAgICAgICAgICAgICAgIGNiKGVycik7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSwgZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgY2FsbGJhY2soZXJyLCByKTtcbiAgICAgICAgfSk7XG4gICAgfTtcbiAgICBhc3luYy5jb25jYXQgPSBkb1BhcmFsbGVsKF9jb25jYXQpO1xuICAgIGFzeW5jLmNvbmNhdFNlcmllcyA9IGRvU2VyaWVzKF9jb25jYXQpO1xuXG4gICAgYXN5bmMud2hpbHN0ID0gZnVuY3Rpb24gKHRlc3QsIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICBpZiAodGVzdCgpKSB7XG4gICAgICAgICAgICBpdGVyYXRvcihmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYXN5bmMud2hpbHN0KHRlc3QsIGl0ZXJhdG9yLCBjYWxsYmFjayk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGNhbGxiYWNrKCk7XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgYXN5bmMuZG9XaGlsc3QgPSBmdW5jdGlvbiAoaXRlcmF0b3IsIHRlc3QsIGNhbGxiYWNrKSB7XG4gICAgICAgIGl0ZXJhdG9yKGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHZhciBhcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKTtcbiAgICAgICAgICAgIGlmICh0ZXN0LmFwcGx5KG51bGwsIGFyZ3MpKSB7XG4gICAgICAgICAgICAgICAgYXN5bmMuZG9XaGlsc3QoaXRlcmF0b3IsIHRlc3QsIGNhbGxiYWNrKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH07XG5cbiAgICBhc3luYy51bnRpbCA9IGZ1bmN0aW9uICh0ZXN0LCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgaWYgKCF0ZXN0KCkpIHtcbiAgICAgICAgICAgIGl0ZXJhdG9yKGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBhc3luYy51bnRpbCh0ZXN0LCBpdGVyYXRvciwgY2FsbGJhY2spO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIGFzeW5jLmRvVW50aWwgPSBmdW5jdGlvbiAoaXRlcmF0b3IsIHRlc3QsIGNhbGxiYWNrKSB7XG4gICAgICAgIGl0ZXJhdG9yKGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHZhciBhcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKTtcbiAgICAgICAgICAgIGlmICghdGVzdC5hcHBseShudWxsLCBhcmdzKSkge1xuICAgICAgICAgICAgICAgIGFzeW5jLmRvVW50aWwoaXRlcmF0b3IsIHRlc3QsIGNhbGxiYWNrKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH07XG5cbiAgICBhc3luYy5xdWV1ZSA9IGZ1bmN0aW9uICh3b3JrZXIsIGNvbmN1cnJlbmN5KSB7XG4gICAgICAgIGlmIChjb25jdXJyZW5jeSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBjb25jdXJyZW5jeSA9IDE7XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gX2luc2VydChxLCBkYXRhLCBwb3MsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgaWYgKCFxLnN0YXJ0ZWQpe1xuICAgICAgICAgICAgcS5zdGFydGVkID0gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKCFfaXNBcnJheShkYXRhKSkge1xuICAgICAgICAgICAgICBkYXRhID0gW2RhdGFdO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZihkYXRhLmxlbmd0aCA9PSAwKSB7XG4gICAgICAgICAgICAgLy8gY2FsbCBkcmFpbiBpbW1lZGlhdGVseSBpZiB0aGVyZSBhcmUgbm8gdGFza3NcbiAgICAgICAgICAgICByZXR1cm4gYXN5bmMuc2V0SW1tZWRpYXRlKGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgICBpZiAocS5kcmFpbikge1xuICAgICAgICAgICAgICAgICAgICAgcS5kcmFpbigpO1xuICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIF9lYWNoKGRhdGEsIGZ1bmN0aW9uKHRhc2spIHtcbiAgICAgICAgICAgICAgdmFyIGl0ZW0gPSB7XG4gICAgICAgICAgICAgICAgICBkYXRhOiB0YXNrLFxuICAgICAgICAgICAgICAgICAgY2FsbGJhY2s6IHR5cGVvZiBjYWxsYmFjayA9PT0gJ2Z1bmN0aW9uJyA/IGNhbGxiYWNrIDogbnVsbFxuICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgIGlmIChwb3MpIHtcbiAgICAgICAgICAgICAgICBxLnRhc2tzLnVuc2hpZnQoaXRlbSk7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcS50YXNrcy5wdXNoKGl0ZW0pO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgaWYgKHEuc2F0dXJhdGVkICYmIHEudGFza3MubGVuZ3RoID09PSBxLmNvbmN1cnJlbmN5KSB7XG4gICAgICAgICAgICAgICAgICBxLnNhdHVyYXRlZCgpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGFzeW5jLnNldEltbWVkaWF0ZShxLnByb2Nlc3MpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIHdvcmtlcnMgPSAwO1xuICAgICAgICB2YXIgcSA9IHtcbiAgICAgICAgICAgIHRhc2tzOiBbXSxcbiAgICAgICAgICAgIGNvbmN1cnJlbmN5OiBjb25jdXJyZW5jeSxcbiAgICAgICAgICAgIHNhdHVyYXRlZDogbnVsbCxcbiAgICAgICAgICAgIGVtcHR5OiBudWxsLFxuICAgICAgICAgICAgZHJhaW46IG51bGwsXG4gICAgICAgICAgICBzdGFydGVkOiBmYWxzZSxcbiAgICAgICAgICAgIHBhdXNlZDogZmFsc2UsXG4gICAgICAgICAgICBwdXNoOiBmdW5jdGlvbiAoZGF0YSwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgICAgX2luc2VydChxLCBkYXRhLCBmYWxzZSwgY2FsbGJhY2spO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGtpbGw6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgcS5kcmFpbiA9IG51bGw7XG4gICAgICAgICAgICAgIHEudGFza3MgPSBbXTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB1bnNoaWZ0OiBmdW5jdGlvbiAoZGF0YSwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgICAgX2luc2VydChxLCBkYXRhLCB0cnVlLCBjYWxsYmFjayk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcHJvY2VzczogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGlmICghcS5wYXVzZWQgJiYgd29ya2VycyA8IHEuY29uY3VycmVuY3kgJiYgcS50YXNrcy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHRhc2sgPSBxLnRhc2tzLnNoaWZ0KCk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChxLmVtcHR5ICYmIHEudGFza3MubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBxLmVtcHR5KCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgd29ya2VycyArPSAxO1xuICAgICAgICAgICAgICAgICAgICB2YXIgbmV4dCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHdvcmtlcnMgLT0gMTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0YXNrLmNhbGxiYWNrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFzay5jYWxsYmFjay5hcHBseSh0YXNrLCBhcmd1bWVudHMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHEuZHJhaW4gJiYgcS50YXNrcy5sZW5ndGggKyB3b3JrZXJzID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcS5kcmFpbigpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgcS5wcm9jZXNzKCk7XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIHZhciBjYiA9IG9ubHlfb25jZShuZXh0KTtcbiAgICAgICAgICAgICAgICAgICAgd29ya2VyKHRhc2suZGF0YSwgY2IpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBsZW5ndGg6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcS50YXNrcy5sZW5ndGg7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcnVubmluZzogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB3b3JrZXJzO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGlkbGU6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBxLnRhc2tzLmxlbmd0aCArIHdvcmtlcnMgPT09IDA7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcGF1c2U6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBpZiAocS5wYXVzZWQgPT09IHRydWUpIHsgcmV0dXJuOyB9XG4gICAgICAgICAgICAgICAgcS5wYXVzZWQgPSB0cnVlO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHJlc3VtZTogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGlmIChxLnBhdXNlZCA9PT0gZmFsc2UpIHsgcmV0dXJuOyB9XG4gICAgICAgICAgICAgICAgcS5wYXVzZWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAvLyBOZWVkIHRvIGNhbGwgcS5wcm9jZXNzIG9uY2UgcGVyIGNvbmN1cnJlbnRcbiAgICAgICAgICAgICAgICAvLyB3b3JrZXIgdG8gcHJlc2VydmUgZnVsbCBjb25jdXJyZW5jeSBhZnRlciBwYXVzZVxuICAgICAgICAgICAgICAgIGZvciAodmFyIHcgPSAxOyB3IDw9IHEuY29uY3VycmVuY3k7IHcrKykge1xuICAgICAgICAgICAgICAgICAgICBhc3luYy5zZXRJbW1lZGlhdGUocS5wcm9jZXNzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiBxO1xuICAgIH07XG5cbiAgICBhc3luYy5wcmlvcml0eVF1ZXVlID0gZnVuY3Rpb24gKHdvcmtlciwgY29uY3VycmVuY3kpIHtcblxuICAgICAgICBmdW5jdGlvbiBfY29tcGFyZVRhc2tzKGEsIGIpe1xuICAgICAgICAgIHJldHVybiBhLnByaW9yaXR5IC0gYi5wcmlvcml0eTtcbiAgICAgICAgfTtcblxuICAgICAgICBmdW5jdGlvbiBfYmluYXJ5U2VhcmNoKHNlcXVlbmNlLCBpdGVtLCBjb21wYXJlKSB7XG4gICAgICAgICAgdmFyIGJlZyA9IC0xLFxuICAgICAgICAgICAgICBlbmQgPSBzZXF1ZW5jZS5sZW5ndGggLSAxO1xuICAgICAgICAgIHdoaWxlIChiZWcgPCBlbmQpIHtcbiAgICAgICAgICAgIHZhciBtaWQgPSBiZWcgKyAoKGVuZCAtIGJlZyArIDEpID4+PiAxKTtcbiAgICAgICAgICAgIGlmIChjb21wYXJlKGl0ZW0sIHNlcXVlbmNlW21pZF0pID49IDApIHtcbiAgICAgICAgICAgICAgYmVnID0gbWlkO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgZW5kID0gbWlkIC0gMTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIGJlZztcbiAgICAgICAgfVxuXG4gICAgICAgIGZ1bmN0aW9uIF9pbnNlcnQocSwgZGF0YSwgcHJpb3JpdHksIGNhbGxiYWNrKSB7XG4gICAgICAgICAgaWYgKCFxLnN0YXJ0ZWQpe1xuICAgICAgICAgICAgcS5zdGFydGVkID0gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKCFfaXNBcnJheShkYXRhKSkge1xuICAgICAgICAgICAgICBkYXRhID0gW2RhdGFdO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZihkYXRhLmxlbmd0aCA9PSAwKSB7XG4gICAgICAgICAgICAgLy8gY2FsbCBkcmFpbiBpbW1lZGlhdGVseSBpZiB0aGVyZSBhcmUgbm8gdGFza3NcbiAgICAgICAgICAgICByZXR1cm4gYXN5bmMuc2V0SW1tZWRpYXRlKGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgICBpZiAocS5kcmFpbikge1xuICAgICAgICAgICAgICAgICAgICAgcS5kcmFpbigpO1xuICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIF9lYWNoKGRhdGEsIGZ1bmN0aW9uKHRhc2spIHtcbiAgICAgICAgICAgICAgdmFyIGl0ZW0gPSB7XG4gICAgICAgICAgICAgICAgICBkYXRhOiB0YXNrLFxuICAgICAgICAgICAgICAgICAgcHJpb3JpdHk6IHByaW9yaXR5LFxuICAgICAgICAgICAgICAgICAgY2FsbGJhY2s6IHR5cGVvZiBjYWxsYmFjayA9PT0gJ2Z1bmN0aW9uJyA/IGNhbGxiYWNrIDogbnVsbFxuICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgIHEudGFza3Muc3BsaWNlKF9iaW5hcnlTZWFyY2gocS50YXNrcywgaXRlbSwgX2NvbXBhcmVUYXNrcykgKyAxLCAwLCBpdGVtKTtcblxuICAgICAgICAgICAgICBpZiAocS5zYXR1cmF0ZWQgJiYgcS50YXNrcy5sZW5ndGggPT09IHEuY29uY3VycmVuY3kpIHtcbiAgICAgICAgICAgICAgICAgIHEuc2F0dXJhdGVkKCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgYXN5bmMuc2V0SW1tZWRpYXRlKHEucHJvY2Vzcyk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBTdGFydCB3aXRoIGEgbm9ybWFsIHF1ZXVlXG4gICAgICAgIHZhciBxID0gYXN5bmMucXVldWUod29ya2VyLCBjb25jdXJyZW5jeSk7XG5cbiAgICAgICAgLy8gT3ZlcnJpZGUgcHVzaCB0byBhY2NlcHQgc2Vjb25kIHBhcmFtZXRlciByZXByZXNlbnRpbmcgcHJpb3JpdHlcbiAgICAgICAgcS5wdXNoID0gZnVuY3Rpb24gKGRhdGEsIHByaW9yaXR5LCBjYWxsYmFjaykge1xuICAgICAgICAgIF9pbnNlcnQocSwgZGF0YSwgcHJpb3JpdHksIGNhbGxiYWNrKTtcbiAgICAgICAgfTtcblxuICAgICAgICAvLyBSZW1vdmUgdW5zaGlmdCBmdW5jdGlvblxuICAgICAgICBkZWxldGUgcS51bnNoaWZ0O1xuXG4gICAgICAgIHJldHVybiBxO1xuICAgIH07XG5cbiAgICBhc3luYy5jYXJnbyA9IGZ1bmN0aW9uICh3b3JrZXIsIHBheWxvYWQpIHtcbiAgICAgICAgdmFyIHdvcmtpbmcgICAgID0gZmFsc2UsXG4gICAgICAgICAgICB0YXNrcyAgICAgICA9IFtdO1xuXG4gICAgICAgIHZhciBjYXJnbyA9IHtcbiAgICAgICAgICAgIHRhc2tzOiB0YXNrcyxcbiAgICAgICAgICAgIHBheWxvYWQ6IHBheWxvYWQsXG4gICAgICAgICAgICBzYXR1cmF0ZWQ6IG51bGwsXG4gICAgICAgICAgICBlbXB0eTogbnVsbCxcbiAgICAgICAgICAgIGRyYWluOiBudWxsLFxuICAgICAgICAgICAgZHJhaW5lZDogdHJ1ZSxcbiAgICAgICAgICAgIHB1c2g6IGZ1bmN0aW9uIChkYXRhLCBjYWxsYmFjaykge1xuICAgICAgICAgICAgICAgIGlmICghX2lzQXJyYXkoZGF0YSkpIHtcbiAgICAgICAgICAgICAgICAgICAgZGF0YSA9IFtkYXRhXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgX2VhY2goZGF0YSwgZnVuY3Rpb24odGFzaykge1xuICAgICAgICAgICAgICAgICAgICB0YXNrcy5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGE6IHRhc2ssXG4gICAgICAgICAgICAgICAgICAgICAgICBjYWxsYmFjazogdHlwZW9mIGNhbGxiYWNrID09PSAnZnVuY3Rpb24nID8gY2FsbGJhY2sgOiBudWxsXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICBjYXJnby5kcmFpbmVkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIGlmIChjYXJnby5zYXR1cmF0ZWQgJiYgdGFza3MubGVuZ3RoID09PSBwYXlsb2FkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjYXJnby5zYXR1cmF0ZWQoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGFzeW5jLnNldEltbWVkaWF0ZShjYXJnby5wcm9jZXNzKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBwcm9jZXNzOiBmdW5jdGlvbiBwcm9jZXNzKCkge1xuICAgICAgICAgICAgICAgIGlmICh3b3JraW5nKSByZXR1cm47XG4gICAgICAgICAgICAgICAgaWYgKHRhc2tzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICBpZihjYXJnby5kcmFpbiAmJiAhY2FyZ28uZHJhaW5lZCkgY2FyZ28uZHJhaW4oKTtcbiAgICAgICAgICAgICAgICAgICAgY2FyZ28uZHJhaW5lZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB2YXIgdHMgPSB0eXBlb2YgcGF5bG9hZCA9PT0gJ251bWJlcidcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IHRhc2tzLnNwbGljZSgwLCBwYXlsb2FkKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogdGFza3Muc3BsaWNlKDAsIHRhc2tzLmxlbmd0aCk7XG5cbiAgICAgICAgICAgICAgICB2YXIgZHMgPSBfbWFwKHRzLCBmdW5jdGlvbiAodGFzaykge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGFzay5kYXRhO1xuICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgaWYoY2FyZ28uZW1wdHkpIGNhcmdvLmVtcHR5KCk7XG4gICAgICAgICAgICAgICAgd29ya2luZyA9IHRydWU7XG4gICAgICAgICAgICAgICAgd29ya2VyKGRzLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIHdvcmtpbmcgPSBmYWxzZTtcblxuICAgICAgICAgICAgICAgICAgICB2YXIgYXJncyA9IGFyZ3VtZW50cztcbiAgICAgICAgICAgICAgICAgICAgX2VhY2godHMsIGZ1bmN0aW9uIChkYXRhKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZGF0YS5jYWxsYmFjaykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEuY2FsbGJhY2suYXBwbHkobnVsbCwgYXJncyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgICAgIHByb2Nlc3MoKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBsZW5ndGg6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGFza3MubGVuZ3RoO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHJ1bm5pbmc6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gd29ya2luZztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIGNhcmdvO1xuICAgIH07XG5cbiAgICB2YXIgX2NvbnNvbGVfZm4gPSBmdW5jdGlvbiAobmFtZSkge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKGZuKSB7XG4gICAgICAgICAgICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMSk7XG4gICAgICAgICAgICBmbi5hcHBseShudWxsLCBhcmdzLmNvbmNhdChbZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgICAgIHZhciBhcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKTtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGNvbnNvbGUgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb25zb2xlLmVycm9yKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihlcnIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKGNvbnNvbGVbbmFtZV0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIF9lYWNoKGFyZ3MsIGZ1bmN0aW9uICh4KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZVtuYW1lXSh4KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfV0pKTtcbiAgICAgICAgfTtcbiAgICB9O1xuICAgIGFzeW5jLmxvZyA9IF9jb25zb2xlX2ZuKCdsb2cnKTtcbiAgICBhc3luYy5kaXIgPSBfY29uc29sZV9mbignZGlyJyk7XG4gICAgLyphc3luYy5pbmZvID0gX2NvbnNvbGVfZm4oJ2luZm8nKTtcbiAgICBhc3luYy53YXJuID0gX2NvbnNvbGVfZm4oJ3dhcm4nKTtcbiAgICBhc3luYy5lcnJvciA9IF9jb25zb2xlX2ZuKCdlcnJvcicpOyovXG5cbiAgICBhc3luYy5tZW1vaXplID0gZnVuY3Rpb24gKGZuLCBoYXNoZXIpIHtcbiAgICAgICAgdmFyIG1lbW8gPSB7fTtcbiAgICAgICAgdmFyIHF1ZXVlcyA9IHt9O1xuICAgICAgICBoYXNoZXIgPSBoYXNoZXIgfHwgZnVuY3Rpb24gKHgpIHtcbiAgICAgICAgICAgIHJldHVybiB4O1xuICAgICAgICB9O1xuICAgICAgICB2YXIgbWVtb2l6ZWQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7XG4gICAgICAgICAgICB2YXIgY2FsbGJhY2sgPSBhcmdzLnBvcCgpO1xuICAgICAgICAgICAgdmFyIGtleSA9IGhhc2hlci5hcHBseShudWxsLCBhcmdzKTtcbiAgICAgICAgICAgIGlmIChrZXkgaW4gbWVtbykge1xuICAgICAgICAgICAgICAgIGFzeW5jLm5leHRUaWNrKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2suYXBwbHkobnVsbCwgbWVtb1trZXldKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGtleSBpbiBxdWV1ZXMpIHtcbiAgICAgICAgICAgICAgICBxdWV1ZXNba2V5XS5wdXNoKGNhbGxiYWNrKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHF1ZXVlc1trZXldID0gW2NhbGxiYWNrXTtcbiAgICAgICAgICAgICAgICBmbi5hcHBseShudWxsLCBhcmdzLmNvbmNhdChbZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICBtZW1vW2tleV0gPSBhcmd1bWVudHM7XG4gICAgICAgICAgICAgICAgICAgIHZhciBxID0gcXVldWVzW2tleV07XG4gICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBxdWV1ZXNba2V5XTtcbiAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDAsIGwgPSBxLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICAgIHFbaV0uYXBwbHkobnVsbCwgYXJndW1lbnRzKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1dKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIG1lbW9pemVkLm1lbW8gPSBtZW1vO1xuICAgICAgICBtZW1vaXplZC51bm1lbW9pemVkID0gZm47XG4gICAgICAgIHJldHVybiBtZW1vaXplZDtcbiAgICB9O1xuXG4gICAgYXN5bmMudW5tZW1vaXplID0gZnVuY3Rpb24gKGZuKSB7XG4gICAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gKGZuLnVubWVtb2l6ZWQgfHwgZm4pLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7XG4gICAgICB9O1xuICAgIH07XG5cbiAgICBhc3luYy50aW1lcyA9IGZ1bmN0aW9uIChjb3VudCwgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgIHZhciBjb3VudGVyID0gW107XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY291bnQ7IGkrKykge1xuICAgICAgICAgICAgY291bnRlci5wdXNoKGkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBhc3luYy5tYXAoY291bnRlciwgaXRlcmF0b3IsIGNhbGxiYWNrKTtcbiAgICB9O1xuXG4gICAgYXN5bmMudGltZXNTZXJpZXMgPSBmdW5jdGlvbiAoY291bnQsIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICB2YXIgY291bnRlciA9IFtdO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNvdW50OyBpKyspIHtcbiAgICAgICAgICAgIGNvdW50ZXIucHVzaChpKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYXN5bmMubWFwU2VyaWVzKGNvdW50ZXIsIGl0ZXJhdG9yLCBjYWxsYmFjayk7XG4gICAgfTtcblxuICAgIGFzeW5jLnNlcSA9IGZ1bmN0aW9uICgvKiBmdW5jdGlvbnMuLi4gKi8pIHtcbiAgICAgICAgdmFyIGZucyA9IGFyZ3VtZW50cztcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHZhciB0aGF0ID0gdGhpcztcbiAgICAgICAgICAgIHZhciBhcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKTtcbiAgICAgICAgICAgIHZhciBjYWxsYmFjayA9IGFyZ3MucG9wKCk7XG4gICAgICAgICAgICBhc3luYy5yZWR1Y2UoZm5zLCBhcmdzLCBmdW5jdGlvbiAobmV3YXJncywgZm4sIGNiKSB7XG4gICAgICAgICAgICAgICAgZm4uYXBwbHkodGhhdCwgbmV3YXJncy5jb25jYXQoW2Z1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGVyciA9IGFyZ3VtZW50c1swXTtcbiAgICAgICAgICAgICAgICAgICAgdmFyIG5leHRhcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKTtcbiAgICAgICAgICAgICAgICAgICAgY2IoZXJyLCBuZXh0YXJncyk7XG4gICAgICAgICAgICAgICAgfV0pKVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGZ1bmN0aW9uIChlcnIsIHJlc3VsdHMpIHtcbiAgICAgICAgICAgICAgICBjYWxsYmFjay5hcHBseSh0aGF0LCBbZXJyXS5jb25jYXQocmVzdWx0cykpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH07XG4gICAgfTtcblxuICAgIGFzeW5jLmNvbXBvc2UgPSBmdW5jdGlvbiAoLyogZnVuY3Rpb25zLi4uICovKSB7XG4gICAgICByZXR1cm4gYXN5bmMuc2VxLmFwcGx5KG51bGwsIEFycmF5LnByb3RvdHlwZS5yZXZlcnNlLmNhbGwoYXJndW1lbnRzKSk7XG4gICAgfTtcblxuICAgIHZhciBfYXBwbHlFYWNoID0gZnVuY3Rpb24gKGVhY2hmbiwgZm5zIC8qYXJncy4uLiovKSB7XG4gICAgICAgIHZhciBnbyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHZhciB0aGF0ID0gdGhpcztcbiAgICAgICAgICAgIHZhciBhcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKTtcbiAgICAgICAgICAgIHZhciBjYWxsYmFjayA9IGFyZ3MucG9wKCk7XG4gICAgICAgICAgICByZXR1cm4gZWFjaGZuKGZucywgZnVuY3Rpb24gKGZuLCBjYikge1xuICAgICAgICAgICAgICAgIGZuLmFwcGx5KHRoYXQsIGFyZ3MuY29uY2F0KFtjYl0pKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjYWxsYmFjayk7XG4gICAgICAgIH07XG4gICAgICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID4gMikge1xuICAgICAgICAgICAgdmFyIGFyZ3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsIDIpO1xuICAgICAgICAgICAgcmV0dXJuIGdvLmFwcGx5KHRoaXMsIGFyZ3MpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIGdvO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBhc3luYy5hcHBseUVhY2ggPSBkb1BhcmFsbGVsKF9hcHBseUVhY2gpO1xuICAgIGFzeW5jLmFwcGx5RWFjaFNlcmllcyA9IGRvU2VyaWVzKF9hcHBseUVhY2gpO1xuXG4gICAgYXN5bmMuZm9yZXZlciA9IGZ1bmN0aW9uIChmbiwgY2FsbGJhY2spIHtcbiAgICAgICAgZnVuY3Rpb24gbmV4dChlcnIpIHtcbiAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICBpZiAoY2FsbGJhY2spIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRocm93IGVycjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZuKG5leHQpO1xuICAgICAgICB9XG4gICAgICAgIG5leHQoKTtcbiAgICB9O1xuXG4gICAgLy8gTm9kZS5qc1xuICAgIGlmICh0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJyAmJiBtb2R1bGUuZXhwb3J0cykge1xuICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IGFzeW5jO1xuICAgIH1cbiAgICAvLyBBTUQgLyBSZXF1aXJlSlNcbiAgICBlbHNlIGlmICh0eXBlb2YgZGVmaW5lICE9PSAndW5kZWZpbmVkJyAmJiBkZWZpbmUuYW1kKSB7XG4gICAgICAgIGRlZmluZShbXSwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIGFzeW5jO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgLy8gaW5jbHVkZWQgZGlyZWN0bHkgdmlhIDxzY3JpcHQ+IHRhZ1xuICAgIGVsc2Uge1xuICAgICAgICByb290LmFzeW5jID0gYXN5bmM7XG4gICAgfVxuXG59KCkpO1xuIiwidmFyIGFzeW5jICAgICAgID0gcmVxdWlyZSgnYXN5bmMnKSxcbiAgICB1cmxQYXJzZXIgICA9IHJlcXVpcmUoJ3VybCcpLFxuICAgIFJlc291cmNlICAgID0gcmVxdWlyZSgnLi9SZXNvdXJjZScpLFxuICAgIEV2ZW50RW1pdHRlciA9IHJlcXVpcmUoJ2V2ZW50ZW1pdHRlcjMnKTtcblxuLyoqXG4gKiBNYW5hZ2VzIHRoZSBzdGF0ZSBhbmQgbG9hZGluZyBvZiBtdWx0aXBsZSByZXNvdXJjZXMgdG8gbG9hZC5cbiAqXG4gKiBAY2xhc3NcbiAqIEBwYXJhbSBbYmFzZVVybD0nJ10ge3N0cmluZ30gVGhlIGJhc2UgdXJsIGZvciBhbGwgcmVzb3VyY2VzIGxvYWRlZCBieSB0aGlzIGxvYWRlci5cbiAqIEBwYXJhbSBbY29uY3VycmVuY3k9MTBdIHtudW1iZXJ9IFRoZSBudW1iZXIgb2YgcmVzb3VyY2VzIHRvIGxvYWQgY29uY3VycmVudGx5LlxuICovXG5mdW5jdGlvbiBMb2FkZXIoYmFzZVVybCwgY29uY3VycmVuY3kpIHtcbiAgICBFdmVudEVtaXR0ZXIuY2FsbCh0aGlzKTtcblxuICAgIGNvbmN1cnJlbmN5ID0gY29uY3VycmVuY3kgfHwgMTA7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYmFzZSB1cmwgZm9yIGFsbCByZXNvdXJjZXMgbG9hZGVkIGJ5IHRoaXMgbG9hZGVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7c3RyaW5nfVxuICAgICAqL1xuICAgIHRoaXMuYmFzZVVybCA9IGJhc2VVcmwgfHwgJyc7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgcHJvZ3Jlc3MgcGVyY2VudCBvZiB0aGUgbG9hZGVyIGdvaW5nIHRocm91Z2ggdGhlIHF1ZXVlLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMucHJvZ3Jlc3MgPSAwO1xuXG4gICAgLyoqXG4gICAgICogTG9hZGluZyBzdGF0ZSBvZiB0aGUgbG9hZGVyLCB0cnVlIGlmIGl0IGlzIGN1cnJlbnRseSBsb2FkaW5nIHJlc291cmNlcy5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICovXG4gICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgcGVyY2VudGFnZSBvZiB0b3RhbCBwcm9ncmVzcyB0aGF0IGEgc2luZ2xlIHJlc291cmNlIHJlcHJlc2VudHMuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy5fcHJvZ3Jlc3NDaHVuayA9IDA7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgbWlkZGxld2FyZSB0byBydW4gYmVmb3JlIGxvYWRpbmcgZWFjaCByZXNvdXJjZS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Z1bmN0aW9uW119XG4gICAgICovXG4gICAgdGhpcy5fYmVmb3JlTWlkZGxld2FyZSA9IFtdO1xuXG4gICAgLyoqXG4gICAgICogVGhlIG1pZGRsZXdhcmUgdG8gcnVuIGFmdGVyIGxvYWRpbmcgZWFjaCByZXNvdXJjZS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Z1bmN0aW9uW119XG4gICAgICovXG4gICAgdGhpcy5fYWZ0ZXJNaWRkbGV3YXJlID0gW107XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYF9sb2FkUmVzb3VyY2VgIGZ1bmN0aW9uIGJvdW5kIHdpdGggdGhpcyBvYmplY3QgY29udGV4dC5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQG1lbWJlciB7ZnVuY3Rpb259XG4gICAgICovXG4gICAgdGhpcy5fYm91bmRMb2FkUmVzb3VyY2UgPSB0aGlzLl9sb2FkUmVzb3VyY2UuYmluZCh0aGlzKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBgX29uTG9hZGAgZnVuY3Rpb24gYm91bmQgd2l0aCB0aGlzIG9iamVjdCBjb250ZXh0LlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAbWVtYmVyIHtmdW5jdGlvbn1cbiAgICAgKi9cbiAgICB0aGlzLl9ib3VuZE9uTG9hZCA9IHRoaXMuX29uTG9hZC5iaW5kKHRoaXMpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHJlc291cmNlIGJ1ZmZlciB0aGF0IGZpbGxzIHVudGlsIGBsb2FkYCBpcyBjYWxsZWQgdG8gc3RhcnQgbG9hZGluZyByZXNvdXJjZXMuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBtZW1iZXIge1Jlc291cmNlW119XG4gICAgICovXG4gICAgdGhpcy5fYnVmZmVyID0gW107XG5cbiAgICAvKipcbiAgICAgKiBVc2VkIHRvIHRyYWNrIGxvYWQgY29tcGxldGlvbi5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMuX251bVRvTG9hZCA9IDA7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgcmVzb3VyY2VzIHdhaXRpbmcgdG8gYmUgbG9hZGVkLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAbWVtYmVyIHtSZXNvdXJjZVtdfVxuICAgICAqL1xuICAgIHRoaXMuX3F1ZXVlID0gYXN5bmMucXVldWUodGhpcy5fYm91bmRMb2FkUmVzb3VyY2UsIGNvbmN1cnJlbmN5KTtcblxuICAgIC8qKlxuICAgICAqIEFsbCB0aGUgcmVzb3VyY2VzIGZvciB0aGlzIGxvYWRlciBrZXllZCBieSBuYW1lLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7b2JqZWN0PHN0cmluZywgUmVzb3VyY2U+fVxuICAgICAqL1xuICAgIHRoaXMucmVzb3VyY2VzID0ge307XG5cbiAgICAvKipcbiAgICAgKiBFbWl0dGVkIG9uY2UgcGVyIGxvYWRlZCBvciBlcnJvcmVkIHJlc291cmNlLlxuICAgICAqXG4gICAgICogQGV2ZW50IHByb2dyZXNzXG4gICAgICogQG1lbWJlcm9mIExvYWRlciNcbiAgICAgKi9cblxuICAgIC8qKlxuICAgICAqIEVtaXR0ZWQgb25jZSBwZXIgZXJyb3JlZCByZXNvdXJjZS5cbiAgICAgKlxuICAgICAqIEBldmVudCBlcnJvclxuICAgICAqIEBtZW1iZXJvZiBMb2FkZXIjXG4gICAgICovXG5cbiAgICAvKipcbiAgICAgKiBFbWl0dGVkIG9uY2UgcGVyIGxvYWRlZCByZXNvdXJjZS5cbiAgICAgKlxuICAgICAqIEBldmVudCBsb2FkXG4gICAgICogQG1lbWJlcm9mIExvYWRlciNcbiAgICAgKi9cblxuICAgIC8qKlxuICAgICAqIEVtaXR0ZWQgd2hlbiB0aGUgbG9hZGVyIGJlZ2lucyB0byBwcm9jZXNzIHRoZSBxdWV1ZS5cbiAgICAgKlxuICAgICAqIEBldmVudCBzdGFydFxuICAgICAqIEBtZW1iZXJvZiBMb2FkZXIjXG4gICAgICovXG5cbiAgICAvKipcbiAgICAgKiBFbWl0dGVkIHdoZW4gdGhlIHF1ZXVlZCByZXNvdXJjZXMgYWxsIGxvYWQuXG4gICAgICpcbiAgICAgKiBAZXZlbnQgY29tcGxldGVcbiAgICAgKiBAbWVtYmVyb2YgTG9hZGVyI1xuICAgICAqL1xufVxuXG5Mb2FkZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShFdmVudEVtaXR0ZXIucHJvdG90eXBlKTtcbkxvYWRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBMb2FkZXI7XG5tb2R1bGUuZXhwb3J0cyA9IExvYWRlcjtcblxuLyoqXG4gKiBBZGRzIGEgcmVzb3VyY2UgKG9yIG11bHRpcGxlIHJlc291cmNlcykgdG8gdGhlIGxvYWRlciBxdWV1ZS5cbiAqXG4gKiBUaGlzIGZ1bmN0aW9uIGNhbiB0YWtlIGEgd2lkZSB2YXJpZXR5IG9mIGRpZmZlcmVudCBwYXJhbWV0ZXJzLiBUaGUgb25seSB0aGluZyB0aGF0IGlzIGFsd2F5c1xuICogcmVxdWlyZWQgdGhlIHVybCB0byBsb2FkLiBBbGwgdGhlIGZvbGxvd2luZyB3aWxsIHdvcms6XG4gKlxuICogYGBganNcbiAqIGxvYWRlclxuICogICAgIC8vIG5vcm1hbCBwYXJhbSBzeW50YXhcbiAqICAgICAuYWRkKCdrZXknLCAnaHR0cDovLy4uLicsIGZ1bmN0aW9uICgpIHt9KVxuICogICAgIC5hZGQoJ2h0dHA6Ly8uLi4nLCBmdW5jdGlvbiAoKSB7fSlcbiAqICAgICAuYWRkKCdodHRwOi8vLi4uJylcbiAqXG4gKiAgICAgLy8gb2JqZWN0IHN5bnRheFxuICogICAgIC5hZGQoe1xuICogICAgICAgICBuYW1lOiAna2V5MicsXG4gKiAgICAgICAgIHVybDogJ2h0dHA6Ly8uLi4nXG4gKiAgICAgfSwgZnVuY3Rpb24gKCkge30pXG4gKiAgICAgLmFkZCh7XG4gKiAgICAgICAgIHVybDogJ2h0dHA6Ly8uLi4nXG4gKiAgICAgfSwgZnVuY3Rpb24gKCkge30pXG4gKiAgICAgLmFkZCh7XG4gKiAgICAgICAgIG5hbWU6ICdrZXkzJyxcbiAqICAgICAgICAgdXJsOiAnaHR0cDovLy4uLidcbiAqICAgICAgICAgb25Db21wbGV0ZTogZnVuY3Rpb24gKCkge31cbiAqICAgICB9KVxuICogICAgIC5hZGQoe1xuICogICAgICAgICB1cmw6ICdodHRwczovLy4uLicsXG4gKiAgICAgICAgIG9uQ29tcGxldGU6IGZ1bmN0aW9uICgpIHt9LFxuICogICAgICAgICBjcm9zc09yaWdpbjogdHJ1ZVxuICogICAgIH0pXG4gKlxuICogICAgIC8vIHlvdSBjYW4gYWxzbyBwYXNzIGFuIGFycmF5IG9mIG9iamVjdHMgb3IgdXJscyBvciBib3RoXG4gKiAgICAgLmFkZChbXG4gKiAgICAgICAgIHsgbmFtZTogJ2tleTQnLCB1cmw6ICdodHRwOi8vLi4uJywgb25Db21wbGV0ZTogZnVuY3Rpb24gKCkge30gfSxcbiAqICAgICAgICAgeyB1cmw6ICdodHRwOi8vLi4uJywgb25Db21wbGV0ZTogZnVuY3Rpb24gKCkge30gfSxcbiAqICAgICAgICAgJ2h0dHA6Ly8uLi4nXG4gKiAgICAgXSk7XG4gKiBgYGBcbiAqXG4gKiBAYWxpYXMgZW5xdWV1ZVxuICogQHBhcmFtIFtuYW1lXSB7c3RyaW5nfSBUaGUgbmFtZSBvZiB0aGUgcmVzb3VyY2UgdG8gbG9hZCwgaWYgbm90IHBhc3NlZCB0aGUgdXJsIGlzIHVzZWQuXG4gKiBAcGFyYW0gdXJsIHtzdHJpbmd9IFRoZSB1cmwgZm9yIHRoaXMgcmVzb3VyY2UsIHJlbGF0aXZlIHRvIHRoZSBiYXNlVXJsIG9mIHRoaXMgbG9hZGVyLlxuICogQHBhcmFtIFtvcHRpb25zXSB7b2JqZWN0fSBUaGUgb3B0aW9ucyBmb3IgdGhlIGxvYWQuXG4gKiBAcGFyYW0gW29wdGlvbnMuY3Jvc3NPcmlnaW5dIHtib29sZWFufSBJcyB0aGlzIHJlcXVlc3QgY3Jvc3Mtb3JpZ2luPyBEZWZhdWx0IGlzIHRvIGRldGVybWluZSBhdXRvbWF0aWNhbGx5LlxuICogQHBhcmFtIFtvcHRpb25zLmxvYWRUeXBlPVJlc291cmNlLkxPQURfVFlQRS5YSFJdIHtSZXNvdXJjZS5YSFJfTE9BRF9UWVBFfSBIb3cgc2hvdWxkIHRoaXMgcmVzb3VyY2UgYmUgbG9hZGVkP1xuICogQHBhcmFtIFtvcHRpb25zLnhoclR5cGU9UmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuREVGQVVMVF0ge1Jlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFfSBIb3cgc2hvdWxkIHRoZSBkYXRhIGJlaW5nXG4gKiAgICAgIGxvYWRlZCBiZSBpbnRlcnByZXRlZCB3aGVuIHVzaW5nIFhIUj9cbiAqIEBwYXJhbSBbY2FsbGJhY2tdIHtmdW5jdGlvbn0gRnVuY3Rpb24gdG8gY2FsbCB3aGVuIHRoaXMgc3BlY2lmaWMgcmVzb3VyY2UgY29tcGxldGVzIGxvYWRpbmcuXG4gKiBAcmV0dXJuIHtMb2FkZXJ9XG4gKi9cbkxvYWRlci5wcm90b3R5cGUuYWRkID0gTG9hZGVyLnByb3RvdHlwZS5lbnF1ZXVlID0gZnVuY3Rpb24gKG5hbWUsIHVybCwgb3B0aW9ucywgY2IpIHtcbiAgICAvLyBzcGVjaWFsIGNhc2Ugb2YgYW4gYXJyYXkgb2Ygb2JqZWN0cyBvciB1cmxzXG4gICAgaWYgKEFycmF5LmlzQXJyYXkobmFtZSkpIHtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBuYW1lLmxlbmd0aDsgKytpKSB7XG4gICAgICAgICAgICB0aGlzLmFkZChuYW1lW2ldKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIC8vIGlmIGFuIG9iamVjdCBpcyBwYXNzZWQgaW5zdGVhZCBvZiBwYXJhbXNcbiAgICBpZiAodHlwZW9mIG5hbWUgPT09ICdvYmplY3QnKSB7XG4gICAgICAgIGNiID0gdXJsIHx8IG5hbWUuY2FsbGJhY2sgfHwgbmFtZS5vbkNvbXBsZXRlO1xuICAgICAgICBvcHRpb25zID0gbmFtZTtcbiAgICAgICAgdXJsID0gbmFtZS51cmw7XG4gICAgICAgIG5hbWUgPSBuYW1lLm5hbWUgfHwgbmFtZS5rZXkgfHwgbmFtZS51cmw7XG4gICAgfVxuXG4gICAgLy8gY2FzZSB3aGVyZSBubyBuYW1lIGlzIHBhc3NlZCBzaGlmdCBhbGwgYXJncyBvdmVyIGJ5IG9uZS5cbiAgICBpZiAodHlwZW9mIHVybCAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgY2IgPSBvcHRpb25zO1xuICAgICAgICBvcHRpb25zID0gdXJsO1xuICAgICAgICB1cmwgPSBuYW1lO1xuICAgIH1cblxuICAgIC8vIG5vdyB0aGF0IHdlIHNoaWZ0ZWQgbWFrZSBzdXJlIHdlIGhhdmUgYSBwcm9wZXIgdXJsLlxuICAgIGlmICh0eXBlb2YgdXJsICE9PSAnc3RyaW5nJykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ05vIHVybCBwYXNzZWQgdG8gYWRkIHJlc291cmNlIHRvIGxvYWRlci4nKTtcbiAgICB9XG5cbiAgICAvLyBvcHRpb25zIGFyZSBvcHRpb25hbCBzbyBwZW9wbGUgbWlnaHQgcGFzcyBhIGZ1bmN0aW9uIGFuZCBubyBvcHRpb25zXG4gICAgaWYgKHR5cGVvZiBvcHRpb25zID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIGNiID0gb3B0aW9ucztcbiAgICAgICAgb3B0aW9ucyA9IG51bGw7XG4gICAgfVxuXG4gICAgLy8gY2hlY2sgaWYgcmVzb3VyY2UgYWxyZWFkeSBleGlzdHMuXG4gICAgaWYgKHRoaXMucmVzb3VyY2VzW25hbWVdKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignUmVzb3VyY2Ugd2l0aCBuYW1lIFwiJyArIG5hbWUgKyAnXCIgYWxyZWFkeSBleGlzdHMuJyk7XG4gICAgfVxuXG4gICAgLy8gYWRkIGJhc2UgdXJsIGlmIHRoaXMgaXNuJ3QgYW4gYWJzb2x1dGUgdXJsXG4gICAgdXJsID0gdGhpcy5faGFuZGxlQmFzZVVybCh1cmwpO1xuXG4gICAgLy8gY3JlYXRlIHRoZSBzdG9yZSB0aGUgcmVzb3VyY2VcbiAgICB0aGlzLnJlc291cmNlc1tuYW1lXSA9IG5ldyBSZXNvdXJjZShuYW1lLCB1cmwsIG9wdGlvbnMpO1xuXG4gICAgaWYgKHR5cGVvZiBjYiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB0aGlzLnJlc291cmNlc1tuYW1lXS5vbmNlKCdhZnRlck1pZGRsZXdhcmUnLCBjYik7XG4gICAgfVxuXG4gICAgdGhpcy5fbnVtVG9Mb2FkKys7XG5cbiAgICAvLyBpZiBhbHJlYWR5IGxvYWRpbmcgYWRkIGl0IHRvIHRoZSB3b3JrZXIgcXVldWVcbiAgICBpZiAodGhpcy5fcXVldWUuc3RhcnRlZCkge1xuICAgICAgICB0aGlzLl9xdWV1ZS5wdXNoKHRoaXMucmVzb3VyY2VzW25hbWVdKTtcbiAgICAgICAgdGhpcy5fcHJvZ3Jlc3NDaHVuayA9ICgxMDAgLSB0aGlzLnByb2dyZXNzKSAvICh0aGlzLl9xdWV1ZS5sZW5ndGgoKSArIHRoaXMuX3F1ZXVlLnJ1bm5pbmcoKSk7XG4gICAgfVxuICAgIC8vIG90aGVyd2lzZSBidWZmZXIgaXQgdG8gYmUgYWRkZWQgdG8gdGhlIHF1ZXVlIGxhdGVyXG4gICAgZWxzZSB7XG4gICAgICAgIHRoaXMuX2J1ZmZlci5wdXNoKHRoaXMucmVzb3VyY2VzW25hbWVdKTtcbiAgICAgICAgdGhpcy5fcHJvZ3Jlc3NDaHVuayA9IDEwMCAvIHRoaXMuX2J1ZmZlci5sZW5ndGg7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG5Mb2FkZXIucHJvdG90eXBlLl9oYW5kbGVCYXNlVXJsID0gZnVuY3Rpb24gKHVybCkge1xuICAgIHZhciBwYXJzZWRVcmwgPSB1cmxQYXJzZXIucGFyc2UodXJsKTtcblxuICAgIC8vIGFic29sdXRlIHVybCwganVzdCB1c2UgaXQgYXMgaXMuXG4gICAgaWYgKHBhcnNlZFVybC5wcm90b2NvbCB8fCBwYXJzZWRVcmwucGF0aG5hbWUuaW5kZXhPZignLy8nKSA9PT0gMCkge1xuICAgICAgICByZXR1cm4gdXJsO1xuICAgIH1cblxuICAgIC8vIGlmIGJhc2VVcmwgZG9lc24ndCBlbmQgaW4gc2xhc2ggYW5kIHVybCBkb2Vzbid0IHN0YXJ0IHdpdGggc2xhc2gsIHRoZW4gYWRkIGEgc2xhc2ggaW5iZXR3ZWVuXG4gICAgaWYgKFxuICAgICAgICB0aGlzLmJhc2VVcmwubGVuZ3RoICYmXG4gICAgICAgIHRoaXMuYmFzZVVybC5sYXN0SW5kZXhPZignLycpICE9PSB0aGlzLmJhc2VVcmwubGVuZ3RoIC0gMSAmJlxuICAgICAgICB1cmwuY2hhckF0KDApICE9PSAnLydcbiAgICApIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYmFzZVVybCArICcvJyArIHVybDtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHJldHVybiB0aGlzLmJhc2VVcmwgKyB1cmw7XG4gICAgfVxufTtcblxuXG4vKipcbiAqIFNldHMgdXAgYSBtaWRkbGV3YXJlIGZ1bmN0aW9uIHRoYXQgd2lsbCBydW4gKmJlZm9yZSogdGhlXG4gKiByZXNvdXJjZSBpcyBsb2FkZWQuXG4gKlxuICogQGFsaWFzIHByZVxuICogQHBhcmFtIG1pZGRsZXdhcmUge2Z1bmN0aW9ufSBUaGUgbWlkZGxld2FyZSBmdW5jdGlvbiB0byByZWdpc3Rlci5cbiAqIEByZXR1cm4ge0xvYWRlcn1cbiAqL1xuTG9hZGVyLnByb3RvdHlwZS5iZWZvcmUgPSBMb2FkZXIucHJvdG90eXBlLnByZSA9IGZ1bmN0aW9uIChmbikge1xuICAgIHRoaXMuX2JlZm9yZU1pZGRsZXdhcmUucHVzaChmbik7XG5cbiAgICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogU2V0cyB1cCBhIG1pZGRsZXdhcmUgZnVuY3Rpb24gdGhhdCB3aWxsIHJ1biAqYWZ0ZXIqIHRoZVxuICogcmVzb3VyY2UgaXMgbG9hZGVkLlxuICpcbiAqIEBhbGlhcyB1c2VcbiAqIEBwYXJhbSBtaWRkbGV3YXJlIHtmdW5jdGlvbn0gVGhlIG1pZGRsZXdhcmUgZnVuY3Rpb24gdG8gcmVnaXN0ZXIuXG4gKiBAcmV0dXJuIHtMb2FkZXJ9XG4gKi9cbkxvYWRlci5wcm90b3R5cGUuYWZ0ZXIgPSBMb2FkZXIucHJvdG90eXBlLnVzZSA9IGZ1bmN0aW9uIChmbikge1xuICAgIHRoaXMuX2FmdGVyTWlkZGxld2FyZS5wdXNoKGZuKTtcblxuICAgIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBSZXNldHMgdGhlIHF1ZXVlIG9mIHRoZSBsb2FkZXIgdG8gcHJlcGFyZSBmb3IgYSBuZXcgbG9hZC5cbiAqXG4gKiBAcmV0dXJuIHtMb2FkZXJ9XG4gKi9cbkxvYWRlci5wcm90b3R5cGUucmVzZXQgPSBmdW5jdGlvbiAoKSB7XG4gICAgLy8gdGhpcy5iYXNlVXJsID0gYmFzZVVybCB8fCAnJztcblxuICAgIHRoaXMucHJvZ3Jlc3MgPSAwO1xuXG4gICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XG5cbiAgICB0aGlzLl9wcm9ncmVzc0NodW5rID0gMDtcblxuICAgIC8vIHRoaXMuX2JlZm9yZU1pZGRsZXdhcmUubGVuZ3RoID0gMDtcbiAgICAvLyB0aGlzLl9hZnRlck1pZGRsZXdhcmUubGVuZ3RoID0gMDtcblxuICAgIHRoaXMuX2J1ZmZlci5sZW5ndGggPSAwO1xuXG4gICAgdGhpcy5fbnVtVG9Mb2FkID0gMDtcblxuICAgIHRoaXMuX3F1ZXVlLmtpbGwoKTtcbiAgICB0aGlzLl9xdWV1ZS5zdGFydGVkID0gZmFsc2U7XG5cbiAgICB0aGlzLnJlc291cmNlcyA9IHt9O1xufTtcblxuLyoqXG4gKiBTdGFydHMgbG9hZGluZyB0aGUgcXVldWVkIHJlc291cmNlcy5cbiAqXG4gKiBAZmlyZXMgc3RhcnRcbiAqIEBwYXJhbSBbY2FsbGJhY2tdIHtmdW5jdGlvbn0gT3B0aW9uYWwgY2FsbGJhY2sgdGhhdCB3aWxsIGJlIGJvdW5kIHRvIHRoZSBgY29tcGxldGVgIGV2ZW50LlxuICogQHJldHVybiB7TG9hZGVyfVxuICovXG5Mb2FkZXIucHJvdG90eXBlLmxvYWQgPSBmdW5jdGlvbiAoY2IpIHtcbiAgICAvLyByZWdpc3RlciBjb21wbGV0ZSBjYWxsYmFjayBpZiB0aGV5IHBhc3Mgb25lXG4gICAgaWYgKHR5cGVvZiBjYiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB0aGlzLm9uY2UoJ2NvbXBsZXRlJywgY2IpO1xuICAgIH1cblxuICAgIC8vIGlmIHRoZSBxdWV1ZSBoYXMgYWxyZWFkeSBzdGFydGVkIHdlIGFyZSBkb25lIGhlcmVcbiAgICBpZiAodGhpcy5fcXVldWUuc3RhcnRlZCkge1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICAvLyBub3RpZnkgb2Ygc3RhcnRcbiAgICB0aGlzLmVtaXQoJ3N0YXJ0JywgdGhpcyk7XG5cbiAgICAvLyBzdGFydCB0aGUgaW50ZXJuYWwgcXVldWVcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuX2J1ZmZlci5sZW5ndGg7ICsraSkge1xuICAgICAgICB0aGlzLl9xdWV1ZS5wdXNoKHRoaXMuX2J1ZmZlcltpXSk7XG4gICAgfVxuXG4gICAgLy8gZW1wdHkgdGhlIGJ1ZmZlclxuICAgIHRoaXMuX2J1ZmZlci5sZW5ndGggPSAwO1xuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIExvYWRzIGEgc2luZ2xlIHJlc291cmNlLlxuICpcbiAqIEBmaXJlcyBwcm9ncmVzc1xuICogQHByaXZhdGVcbiAqL1xuTG9hZGVyLnByb3RvdHlwZS5fbG9hZFJlc291cmNlID0gZnVuY3Rpb24gKHJlc291cmNlLCBkZXF1ZXVlKSB7XG4gICAgdmFyIHNlbGYgPSB0aGlzO1xuXG4gICAgcmVzb3VyY2UuX2RlcXVldWUgPSBkZXF1ZXVlO1xuXG4gICAgdGhpcy5fcnVuTWlkZGxld2FyZShyZXNvdXJjZSwgdGhpcy5fYmVmb3JlTWlkZGxld2FyZSwgZnVuY3Rpb24gKCkge1xuICAgICAgICAvLyByZXNvdXJjZS5vbigncHJvZ3Jlc3MnLCBzZWxmLmVtaXQuYmluZChzZWxmLCAncHJvZ3Jlc3MnKSk7XG5cbiAgICAgICAgcmVzb3VyY2UubG9hZChzZWxmLl9ib3VuZE9uTG9hZCk7XG4gICAgfSk7XG59O1xuXG4vKipcbiAqIENhbGxlZCBvbmNlIGVhY2ggcmVzb3VyY2UgaGFzIGxvYWRlZC5cbiAqXG4gKiBAZmlyZXMgY29tcGxldGVcbiAqIEBwcml2YXRlXG4gKi9cbkxvYWRlci5wcm90b3R5cGUuX29uQ29tcGxldGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgdGhpcy5lbWl0KCdjb21wbGV0ZScsIHRoaXMsIHRoaXMucmVzb3VyY2VzKTtcbn07XG5cbi8qKlxuICogQ2FsbGVkIGVhY2ggdGltZSBhIHJlc291cmNlcyBpcyBsb2FkZWQuXG4gKlxuICogQGZpcmVzIHByb2dyZXNzXG4gKiBAZmlyZXMgZXJyb3JcbiAqIEBmaXJlcyBsb2FkXG4gKiBAcHJpdmF0ZVxuICovXG5Mb2FkZXIucHJvdG90eXBlLl9vbkxvYWQgPSBmdW5jdGlvbiAocmVzb3VyY2UpIHtcbiAgICB0aGlzLnByb2dyZXNzICs9IHRoaXMuX3Byb2dyZXNzQ2h1bms7XG5cbiAgICB0aGlzLmVtaXQoJ3Byb2dyZXNzJywgdGhpcywgcmVzb3VyY2UpO1xuXG4gICAgLy8gcnVuIG1pZGRsZXdhcmUsIHRoaXMgKm11c3QqIGhhcHBlbiBiZWZvcmUgZGVxdWV1ZSBzbyBzdWItYXNzZXRzIGdldCBhZGRlZCBwcm9wZXJseVxuICAgIHRoaXMuX3J1bk1pZGRsZXdhcmUocmVzb3VyY2UsIHRoaXMuX2FmdGVyTWlkZGxld2FyZSwgZnVuY3Rpb24gKCkge1xuICAgICAgICByZXNvdXJjZS5lbWl0KCdhZnRlck1pZGRsZXdhcmUnLCByZXNvdXJjZSk7XG5cbiAgICAgICAgdGhpcy5fbnVtVG9Mb2FkLS07XG5cbiAgICAgICAgLy8gZG8gY29tcGxldGlvbiBjaGVja1xuICAgICAgICBpZiAodGhpcy5fbnVtVG9Mb2FkID09PSAwKSB7XG4gICAgICAgICAgICB0aGlzLnByb2dyZXNzID0gMTAwO1xuICAgICAgICAgICAgdGhpcy5fb25Db21wbGV0ZSgpO1xuICAgICAgICB9XG4gICAgICAgIFxuICAgICAgICBpZiAocmVzb3VyY2UuZXJyb3IpIHtcbiAgICAgICAgICAgIHRoaXMuZW1pdCgnZXJyb3InLCByZXNvdXJjZS5lcnJvciwgdGhpcywgcmVzb3VyY2UpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5lbWl0KCdsb2FkJywgdGhpcywgcmVzb3VyY2UpO1xuICAgICAgICB9XG4gICAgfSk7XG4gICAgXG5cblxuICAgIC8vIHJlbW92ZSB0aGlzIHJlc291cmNlIGZyb20gdGhlIGFzeW5jIHF1ZXVlXG4gICAgcmVzb3VyY2UuX2RlcXVldWUoKTtcbn07XG5cbi8qKlxuICogUnVuIG1pZGRsZXdhcmUgZnVuY3Rpb25zIG9uIGEgcmVzb3VyY2UuXG4gKlxuICogQHByaXZhdGVcbiAqL1xuTG9hZGVyLnByb3RvdHlwZS5fcnVuTWlkZGxld2FyZSA9IGZ1bmN0aW9uIChyZXNvdXJjZSwgZm5zLCBjYikge1xuICAgIHZhciBzZWxmID0gdGhpcztcblxuICAgIGFzeW5jLmVhY2hTZXJpZXMoZm5zLCBmdW5jdGlvbiAoZm4sIG5leHQpIHtcbiAgICAgICAgZm4uY2FsbChzZWxmLCByZXNvdXJjZSwgbmV4dCk7XG4gICAgfSwgY2IuYmluZCh0aGlzLCByZXNvdXJjZSkpO1xufTtcblxuTG9hZGVyLkxPQURfVFlQRSA9IFJlc291cmNlLkxPQURfVFlQRTtcbkxvYWRlci5YSFJfUkVBRFlfU1RBVEUgPSBSZXNvdXJjZS5YSFJfUkVBRFlfU1RBVEU7XG5Mb2FkZXIuWEhSX1JFU1BPTlNFX1RZUEUgPSBSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRTtcbiIsInZhciBFdmVudEVtaXR0ZXIgPSByZXF1aXJlKCdldmVudGVtaXR0ZXIzJyksXG4gICAgX3VybCA9IHJlcXVpcmUoJ3VybCcpLFxuICAgIC8vIHRlc3RzIGlzIENPUlMgaXMgc3VwcG9ydGVkIGluIFhIUiwgaWYgbm90IHdlIG5lZWQgdG8gdXNlIFhEUlxuICAgIHVzZVhkciA9ICEhKHdpbmRvdy5YRG9tYWluUmVxdWVzdCAmJiAhKCd3aXRoQ3JlZGVudGlhbHMnIGluIChuZXcgWE1MSHR0cFJlcXVlc3QoKSkpKSxcbiAgICB0ZW1wQW5jaG9yID0gbnVsbDtcblxuLyoqXG4gKiBNYW5hZ2VzIHRoZSBzdGF0ZSBhbmQgbG9hZGluZyBvZiBhIHNpbmdsZSByZXNvdXJjZSByZXByZXNlbnRlZCBieVxuICogYSBzaW5nbGUgVVJMLlxuICpcbiAqIEBjbGFzc1xuICogQHBhcmFtIG5hbWUge3N0cmluZ30gVGhlIG5hbWUgb2YgdGhlIHJlc291cmNlIHRvIGxvYWQuXG4gKiBAcGFyYW0gdXJsIHtzdHJpbmd8c3RyaW5nW119IFRoZSB1cmwgZm9yIHRoaXMgcmVzb3VyY2UsIGZvciBhdWRpby92aWRlbyBsb2FkcyB5b3UgY2FuIHBhc3MgYW4gYXJyYXkgb2Ygc291cmNlcy5cbiAqIEBwYXJhbSBbb3B0aW9uc10ge29iamVjdH0gVGhlIG9wdGlvbnMgZm9yIHRoZSBsb2FkLlxuICogQHBhcmFtIFtvcHRpb25zLmNyb3NzT3JpZ2luXSB7c3RyaW5nfGJvb2xlYW59IElzIHRoaXMgcmVxdWVzdCBjcm9zcy1vcmlnaW4/IERlZmF1bHQgaXMgdG8gZGV0ZXJtaW5lIGF1dG9tYXRpY2FsbHkuXG4gKiBAcGFyYW0gW29wdGlvbnMubG9hZFR5cGU9UmVzb3VyY2UuTE9BRF9UWVBFLlhIUl0ge1Jlc291cmNlLkxPQURfVFlQRX0gSG93IHNob3VsZCB0aGlzIHJlc291cmNlIGJlIGxvYWRlZD9cbiAqIEBwYXJhbSBbb3B0aW9ucy54aHJUeXBlPVJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkRFRkFVTFRdIHtSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRX0gSG93IHNob3VsZCB0aGUgZGF0YSBiZWluZ1xuICogICAgICBsb2FkZWQgYmUgaW50ZXJwcmV0ZWQgd2hlbiB1c2luZyBYSFI/XG4gKiBAcGFyYW0gW29wdGlvbnMubWV0YWRhdGFdIHtvYmplY3R9IEV4dHJhIGluZm8gZm9yIG1pZGRsZXdhcmUuXG4gKi9cbmZ1bmN0aW9uIFJlc291cmNlKG5hbWUsIHVybCwgb3B0aW9ucykge1xuICAgIEV2ZW50RW1pdHRlci5jYWxsKHRoaXMpO1xuXG4gICAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG5cbiAgICBpZiAodHlwZW9mIG5hbWUgIT09ICdzdHJpbmcnIHx8IHR5cGVvZiB1cmwgIT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignQm90aCBuYW1lIGFuZCB1cmwgYXJlIHJlcXVpcmVkIGZvciBjb25zdHJ1Y3RpbmcgYSByZXNvdXJjZS4nKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGUgbmFtZSBvZiB0aGlzIHJlc291cmNlLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7c3RyaW5nfVxuICAgICAqIEByZWFkb25seVxuICAgICAqL1xuICAgIHRoaXMubmFtZSA9IG5hbWU7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgdXJsIHVzZWQgdG8gbG9hZCB0aGlzIHJlc291cmNlLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7c3RyaW5nfVxuICAgICAqIEByZWFkb25seVxuICAgICAqL1xuICAgIHRoaXMudXJsID0gdXJsO1xuXG4gICAgLyoqXG4gICAgICogU3RvcmVzIHdoZXRoZXIgb3Igbm90IHRoaXMgdXJsIGlzIGEgZGF0YSB1cmwuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqIEByZWFkb25seVxuICAgICAqL1xuICAgIHRoaXMuaXNEYXRhVXJsID0gdGhpcy51cmwuaW5kZXhPZignZGF0YTonKSA9PT0gMDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBkYXRhIHRoYXQgd2FzIGxvYWRlZCBieSB0aGUgcmVzb3VyY2UuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHthbnl9XG4gICAgICovXG4gICAgdGhpcy5kYXRhID0gbnVsbDtcblxuICAgIC8qKlxuICAgICAqIElzIHRoaXMgcmVxdWVzdCBjcm9zcy1vcmlnaW4/IElmIHVuc2V0LCBkZXRlcm1pbmVkIGF1dG9tYXRpY2FsbHkuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtzdHJpbmd9XG4gICAgICovXG4gICAgdGhpcy5jcm9zc09yaWdpbiA9IG9wdGlvbnMuY3Jvc3NPcmlnaW4gPT09IHRydWUgPyAnYW5vbnltb3VzJyA6IG9wdGlvbnMuY3Jvc3NPcmlnaW47XG5cbiAgICAvKipcbiAgICAgKiBUaGUgbWV0aG9kIG9mIGxvYWRpbmcgdG8gdXNlIGZvciB0aGlzIHJlc291cmNlLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UmVzb3VyY2UuTE9BRF9UWVBFfVxuICAgICAqL1xuICAgIHRoaXMubG9hZFR5cGUgPSBvcHRpb25zLmxvYWRUeXBlIHx8IHRoaXMuX2RldGVybWluZUxvYWRUeXBlKCk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgdHlwZSB1c2VkIHRvIGxvYWQgdGhlIHJlc291cmNlIHZpYSBYSFIuIElmIHVuc2V0LCBkZXRlcm1pbmVkIGF1dG9tYXRpY2FsbHkuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtzdHJpbmd9XG4gICAgICovXG4gICAgdGhpcy54aHJUeXBlID0gb3B0aW9ucy54aHJUeXBlO1xuXG4gICAgLyoqXG4gICAgICogRXh0cmEgaW5mbyBmb3IgbWlkZGxld2FyZVxuICAgICAqXG4gICAgICogQG1lbWJlciB7b2JqZWN0fVxuICAgICAqL1xuICAgIHRoaXMubWV0YWRhdGEgPSBvcHRpb25zLm1ldGFkYXRhIHx8IHt9O1xuXG4gICAgLyoqXG4gICAgICogVGhlIGVycm9yIHRoYXQgb2NjdXJyZWQgd2hpbGUgbG9hZGluZyAoaWYgYW55KS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge0Vycm9yfVxuICAgICAqIEByZWFkb25seVxuICAgICAqL1xuICAgIHRoaXMuZXJyb3IgPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogVGhlIFhIUiBvYmplY3QgdGhhdCB3YXMgdXNlZCB0byBsb2FkIHRoaXMgcmVzb3VyY2UuIFRoaXMgaXMgb25seSBzZXRcbiAgICAgKiB3aGVuIGBsb2FkVHlwZWAgaXMgYFJlc291cmNlLkxPQURfVFlQRS5YSFJgLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7WE1MSHR0cFJlcXVlc3R9XG4gICAgICovXG4gICAgdGhpcy54aHIgPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogRGVzY3JpYmVzIGlmIHRoaXMgcmVzb3VyY2Ugd2FzIGxvYWRlZCBhcyBqc29uLiBPbmx5IHZhbGlkIGFmdGVyIHRoZSByZXNvdXJjZVxuICAgICAqIGhhcyBjb21wbGV0ZWx5IGxvYWRlZC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICovXG4gICAgdGhpcy5pc0pzb24gPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIERlc2NyaWJlcyBpZiB0aGlzIHJlc291cmNlIHdhcyBsb2FkZWQgYXMgeG1sLiBPbmx5IHZhbGlkIGFmdGVyIHRoZSByZXNvdXJjZVxuICAgICAqIGhhcyBjb21wbGV0ZWx5IGxvYWRlZC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICovXG4gICAgdGhpcy5pc1htbCA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogRGVzY3JpYmVzIGlmIHRoaXMgcmVzb3VyY2Ugd2FzIGxvYWRlZCBhcyBhbiBpbWFnZSB0YWcuIE9ubHkgdmFsaWQgYWZ0ZXIgdGhlIHJlc291cmNlXG4gICAgICogaGFzIGNvbXBsZXRlbHkgbG9hZGVkLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKi9cbiAgICB0aGlzLmlzSW1hZ2UgPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIERlc2NyaWJlcyBpZiB0aGlzIHJlc291cmNlIHdhcyBsb2FkZWQgYXMgYW4gYXVkaW8gdGFnLiBPbmx5IHZhbGlkIGFmdGVyIHRoZSByZXNvdXJjZVxuICAgICAqIGhhcyBjb21wbGV0ZWx5IGxvYWRlZC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICovXG4gICAgdGhpcy5pc0F1ZGlvID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBEZXNjcmliZXMgaWYgdGhpcyByZXNvdXJjZSB3YXMgbG9hZGVkIGFzIGEgdmlkZW8gdGFnLiBPbmx5IHZhbGlkIGFmdGVyIHRoZSByZXNvdXJjZVxuICAgICAqIGhhcyBjb21wbGV0ZWx5IGxvYWRlZC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICovXG4gICAgdGhpcy5pc1ZpZGVvID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYGRlcXVldWVgIG1ldGhvZCB0aGF0IHdpbGwgYmUgdXNlZCBhIHN0b3JhZ2UgcGxhY2UgZm9yIHRoZSBhc3luYyBxdWV1ZSBkZXF1ZXVlIG1ldGhvZFxuICAgICAqIHVzZWQgcHJpdmF0ZWx5IGJ5IHRoZSBsb2FkZXIuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtmdW5jdGlvbn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX2RlcXVldWUgPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGBjb21wbGV0ZWAgZnVuY3Rpb24gYm91bmQgdG8gdGhpcyByZXNvdXJjZSdzIGNvbnRleHQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtmdW5jdGlvbn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX2JvdW5kQ29tcGxldGUgPSB0aGlzLmNvbXBsZXRlLmJpbmQodGhpcyk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYF9vbkVycm9yYCBmdW5jdGlvbiBib3VuZCB0byB0aGlzIHJlc291cmNlJ3MgY29udGV4dC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Z1bmN0aW9ufVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fYm91bmRPbkVycm9yID0gdGhpcy5fb25FcnJvci5iaW5kKHRoaXMpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGBfb25Qcm9ncmVzc2AgZnVuY3Rpb24gYm91bmQgdG8gdGhpcyByZXNvdXJjZSdzIGNvbnRleHQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtmdW5jdGlvbn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX2JvdW5kT25Qcm9ncmVzcyA9IHRoaXMuX29uUHJvZ3Jlc3MuYmluZCh0aGlzKTtcblxuICAgIC8vIHhociBjYWxsYmFja3NcbiAgICB0aGlzLl9ib3VuZFhock9uRXJyb3IgPSB0aGlzLl94aHJPbkVycm9yLmJpbmQodGhpcyk7XG4gICAgdGhpcy5fYm91bmRYaHJPbkFib3J0ID0gdGhpcy5feGhyT25BYm9ydC5iaW5kKHRoaXMpO1xuICAgIHRoaXMuX2JvdW5kWGhyT25Mb2FkID0gdGhpcy5feGhyT25Mb2FkLmJpbmQodGhpcyk7XG4gICAgdGhpcy5fYm91bmRYZHJPblRpbWVvdXQgPSB0aGlzLl94ZHJPblRpbWVvdXQuYmluZCh0aGlzKTtcblxuICAgIC8qKlxuICAgICAqIEVtaXR0ZWQgd2hlbiB0aGUgcmVzb3VyY2UgYmVpbmdzIHRvIGxvYWQuXG4gICAgICpcbiAgICAgKiBAZXZlbnQgc3RhcnRcbiAgICAgKiBAbWVtYmVyb2YgUmVzb3VyY2UjXG4gICAgICovXG5cbiAgICAvKipcbiAgICAgKiBFbWl0dGVkIGVhY2ggdGltZSBwcm9ncmVzcyBvZiB0aGlzIHJlc291cmNlIGxvYWQgdXBkYXRlcy5cbiAgICAgKiBOb3QgYWxsIHJlc291cmNlcyB0eXBlcyBhbmQgbG9hZGVyIHN5c3RlbXMgY2FuIHN1cHBvcnQgdGhpcyBldmVudFxuICAgICAqIHNvIHNvbWV0aW1lcyBpdCBtYXkgbm90IGJlIGF2YWlsYWJsZS4gSWYgdGhlIHJlc291cmNlXG4gICAgICogaXMgYmVpbmcgbG9hZGVkIG9uIGEgbW9kZXJuIGJyb3dzZXIsIHVzaW5nIFhIUiwgYW5kIHRoZSByZW1vdGUgc2VydmVyXG4gICAgICogcHJvcGVybHkgc2V0cyBDb250ZW50LUxlbmd0aCBoZWFkZXJzLCB0aGVuIHRoaXMgd2lsbCBiZSBhdmFpbGFibGUuXG4gICAgICpcbiAgICAgKiBAZXZlbnQgcHJvZ3Jlc3NcbiAgICAgKiBAbWVtYmVyb2YgUmVzb3VyY2UjXG4gICAgICovXG5cbiAgICAvKipcbiAgICAgKiBFbWl0dGVkIG9uY2UgdGhpcyByZXNvdXJjZSBoYXMgbG9hZGVkLCBpZiB0aGVyZSB3YXMgYW4gZXJyb3IgaXQgd2lsbFxuICAgICAqIGJlIGluIHRoZSBgZXJyb3JgIHByb3BlcnR5LlxuICAgICAqXG4gICAgICogQGV2ZW50IGNvbXBsZXRlXG4gICAgICogQG1lbWJlcm9mIFJlc291cmNlI1xuICAgICAqL1xufVxuXG5SZXNvdXJjZS5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKEV2ZW50RW1pdHRlci5wcm90b3R5cGUpO1xuUmVzb3VyY2UucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gUmVzb3VyY2U7XG5tb2R1bGUuZXhwb3J0cyA9IFJlc291cmNlO1xuXG4vKipcbiAqIE1hcmtzIHRoZSByZXNvdXJjZSBhcyBjb21wbGV0ZS5cbiAqXG4gKiBAZmlyZXMgY29tcGxldGVcbiAqL1xuUmVzb3VyY2UucHJvdG90eXBlLmNvbXBsZXRlID0gZnVuY3Rpb24gKCkge1xuICAgIC8vIFRPRE86IENsZWFuIHRoaXMgdXAgaW4gYSB3cmFwcGVyIG9yIHNvbWV0aGluZy4uLmdyb3NzLi4uLlxuICAgIGlmICh0aGlzLmRhdGEgJiYgdGhpcy5kYXRhLnJlbW92ZUV2ZW50TGlzdGVuZXIpIHtcbiAgICAgICAgdGhpcy5kYXRhLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2Vycm9yJywgdGhpcy5fYm91bmRPbkVycm9yKTtcbiAgICAgICAgdGhpcy5kYXRhLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2xvYWQnLCB0aGlzLl9ib3VuZENvbXBsZXRlKTtcbiAgICAgICAgdGhpcy5kYXRhLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3Byb2dyZXNzJywgdGhpcy5fYm91bmRPblByb2dyZXNzKTtcbiAgICAgICAgdGhpcy5kYXRhLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2NhbnBsYXl0aHJvdWdoJywgdGhpcy5fYm91bmRDb21wbGV0ZSk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMueGhyKSB7XG4gICAgICAgIGlmICh0aGlzLnhoci5yZW1vdmVFdmVudExpc3RlbmVyKSB7XG4gICAgICAgICAgICB0aGlzLnhoci5yZW1vdmVFdmVudExpc3RlbmVyKCdlcnJvcicsIHRoaXMuX2JvdW5kWGhyT25FcnJvcik7XG4gICAgICAgICAgICB0aGlzLnhoci5yZW1vdmVFdmVudExpc3RlbmVyKCdhYm9ydCcsIHRoaXMuX2JvdW5kWGhyT25BYm9ydCk7XG4gICAgICAgICAgICB0aGlzLnhoci5yZW1vdmVFdmVudExpc3RlbmVyKCdwcm9ncmVzcycsIHRoaXMuX2JvdW5kT25Qcm9ncmVzcyk7XG4gICAgICAgICAgICB0aGlzLnhoci5yZW1vdmVFdmVudExpc3RlbmVyKCdsb2FkJywgdGhpcy5fYm91bmRYaHJPbkxvYWQpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy54aHIub25lcnJvciA9IG51bGw7XG4gICAgICAgICAgICB0aGlzLnhoci5vbnRpbWVvdXQgPSBudWxsO1xuICAgICAgICAgICAgdGhpcy54aHIub25wcm9ncmVzcyA9IG51bGw7XG4gICAgICAgICAgICB0aGlzLnhoci5vbmxvYWQgPSBudWxsO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5lbWl0KCdjb21wbGV0ZScsIHRoaXMpO1xufTtcblxuLyoqXG4gKiBLaWNrcyBvZmYgbG9hZGluZyBvZiB0aGlzIHJlc291cmNlLlxuICpcbiAqIEBmaXJlcyBzdGFydFxuICogQHBhcmFtIFtjYWxsYmFja10ge2Z1bmN0aW9ufSBPcHRpb25hbCBjYWxsYmFjayB0byBjYWxsIG9uY2UgdGhlIHJlc291cmNlIGlzIGxvYWRlZC5cbiAqL1xuUmVzb3VyY2UucHJvdG90eXBlLmxvYWQgPSBmdW5jdGlvbiAoY2IpIHtcbiAgICB0aGlzLmVtaXQoJ3N0YXJ0JywgdGhpcyk7XG5cbiAgICAvLyBpZiBhIGNhbGxiYWNrIGlzIHNldCwgbGlzdGVuIGZvciBjb21wbGV0ZSBldmVudFxuICAgIGlmIChjYikge1xuICAgICAgICB0aGlzLm9uY2UoJ2NvbXBsZXRlJywgY2IpO1xuICAgIH1cblxuICAgIC8vIGlmIHVuc2V0LCBkZXRlcm1pbmUgdGhlIHZhbHVlXG4gICAgaWYgKHRoaXMuY3Jvc3NPcmlnaW4gPT09IGZhbHNlIHx8IHR5cGVvZiB0aGlzLmNyb3NzT3JpZ2luICE9PSAnc3RyaW5nJykge1xuICAgICAgICB0aGlzLmNyb3NzT3JpZ2luID0gdGhpcy5fZGV0ZXJtaW5lQ3Jvc3NPcmlnaW4odGhpcy51cmwpO1xuICAgIH1cblxuICAgIHN3aXRjaCh0aGlzLmxvYWRUeXBlKSB7XG4gICAgICAgIGNhc2UgUmVzb3VyY2UuTE9BRF9UWVBFLklNQUdFOlxuICAgICAgICAgICAgdGhpcy5fbG9hZEltYWdlKCk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIFJlc291cmNlLkxPQURfVFlQRS5BVURJTzpcbiAgICAgICAgICAgIHRoaXMuX2xvYWRFbGVtZW50KCdhdWRpbycpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSBSZXNvdXJjZS5MT0FEX1RZUEUuVklERU86XG4gICAgICAgICAgICB0aGlzLl9sb2FkRWxlbWVudCgndmlkZW8nKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgUmVzb3VyY2UuTE9BRF9UWVBFLlhIUjpcbiAgICAgICAgICAgIC8qIGZhbGxzIHRocm91Z2ggKi9cbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIGlmICh1c2VYZHIgJiYgdGhpcy5jcm9zc09yaWdpbikge1xuICAgICAgICAgICAgICAgIHRoaXMuX2xvYWRYZHIoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuX2xvYWRYaHIoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGJyZWFrO1xuICAgIH1cbn07XG5cbi8qKlxuICogTG9hZHMgdGhpcyByZXNvdXJjZXMgdXNpbmcgYW4gSW1hZ2Ugb2JqZWN0LlxuICpcbiAqIEBwcml2YXRlXG4gKi9cblJlc291cmNlLnByb3RvdHlwZS5fbG9hZEltYWdlID0gZnVuY3Rpb24gKCkge1xuICAgIHRoaXMuZGF0YSA9IG5ldyBJbWFnZSgpO1xuXG4gICAgaWYgKHRoaXMuY3Jvc3NPcmlnaW4pIHtcbiAgICAgICAgdGhpcy5kYXRhLmNyb3NzT3JpZ2luID0gdGhpcy5jcm9zc09yaWdpbjtcbiAgICB9XG5cbiAgICB0aGlzLmRhdGEuc3JjID0gdGhpcy51cmw7XG5cbiAgICB0aGlzLmlzSW1hZ2UgPSB0cnVlO1xuXG4gICAgdGhpcy5kYXRhLmFkZEV2ZW50TGlzdGVuZXIoJ2Vycm9yJywgdGhpcy5fYm91bmRPbkVycm9yLCBmYWxzZSk7XG4gICAgdGhpcy5kYXRhLmFkZEV2ZW50TGlzdGVuZXIoJ2xvYWQnLCB0aGlzLl9ib3VuZENvbXBsZXRlLCBmYWxzZSk7XG4gICAgdGhpcy5kYXRhLmFkZEV2ZW50TGlzdGVuZXIoJ3Byb2dyZXNzJywgdGhpcy5fYm91bmRPblByb2dyZXNzLCBmYWxzZSk7XG59O1xuXG4vKipcbiAqIExvYWRzIHRoaXMgcmVzb3VyY2VzIHVzaW5nIGFuIEhUTUxBdWRpb0VsZW1lbnQgb3IgSFRNTFZpZGVvRWxlbWVudC5cbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5SZXNvdXJjZS5wcm90b3R5cGUuX2xvYWRFbGVtZW50ID0gZnVuY3Rpb24gKHR5cGUpIHtcbiAgICBpZiAodHlwZSA9PT0gJ2F1ZGlvJyAmJiB0eXBlb2YgQXVkaW8gIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIHRoaXMuZGF0YSA9IG5ldyBBdWRpbygpO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgdGhpcy5kYXRhID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCh0eXBlKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5kYXRhID09PSBudWxsKSB7XG4gICAgICAgIHRoaXMuZXJyb3IgPSBuZXcgRXJyb3IoJ1Vuc3VwcG9ydGVkIGVsZW1lbnQgJyArIHR5cGUpO1xuICAgICAgICB0aGlzLmNvbXBsZXRlKCk7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBzdXBwb3J0IGZvciBDb2Nvb25KUyBDYW52YXMrIHJ1bnRpbWUsIGxhY2tzIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NvdXJjZScpXG4gICAgaWYgKG5hdmlnYXRvci5pc0NvY29vbkpTKSB7XG4gICAgICAgIHRoaXMuZGF0YS5zcmMgPSBBcnJheS5pc0FycmF5KHRoaXMudXJsKSA/IHRoaXMudXJsWzBdIDogdGhpcy51cmw7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSh0aGlzLnVybCkpIHtcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy51cmwubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmRhdGEuYXBwZW5kQ2hpbGQodGhpcy5fY3JlYXRlU291cmNlKHR5cGUsIHRoaXMudXJsW2ldKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmRhdGEuYXBwZW5kQ2hpbGQodGhpcy5fY3JlYXRlU291cmNlKHR5cGUsIHRoaXMudXJsKSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzWydpcycgKyB0eXBlWzBdLnRvVXBwZXJDYXNlKCkgKyB0eXBlLnN1YnN0cmluZygxKV0gPSB0cnVlO1xuXG4gICAgdGhpcy5kYXRhLmFkZEV2ZW50TGlzdGVuZXIoJ2Vycm9yJywgdGhpcy5fYm91bmRPbkVycm9yLCBmYWxzZSk7XG4gICAgdGhpcy5kYXRhLmFkZEV2ZW50TGlzdGVuZXIoJ2xvYWQnLCB0aGlzLl9ib3VuZENvbXBsZXRlLCBmYWxzZSk7XG4gICAgdGhpcy5kYXRhLmFkZEV2ZW50TGlzdGVuZXIoJ3Byb2dyZXNzJywgdGhpcy5fYm91bmRPblByb2dyZXNzLCBmYWxzZSk7XG4gICAgdGhpcy5kYXRhLmFkZEV2ZW50TGlzdGVuZXIoJ2NhbnBsYXl0aHJvdWdoJywgdGhpcy5fYm91bmRDb21wbGV0ZSwgZmFsc2UpO1xuXG4gICAgdGhpcy5kYXRhLmxvYWQoKTtcbn07XG5cbi8qKlxuICogTG9hZHMgdGhpcyByZXNvdXJjZXMgdXNpbmcgYW4gWE1MSHR0cFJlcXVlc3QuXG4gKlxuICogQHByaXZhdGVcbiAqL1xuUmVzb3VyY2UucHJvdG90eXBlLl9sb2FkWGhyID0gZnVuY3Rpb24gKCkge1xuICAgIC8vIGlmIHVuc2V0LCBkZXRlcm1pbmUgdGhlIHZhbHVlXG4gICAgaWYgKHR5cGVvZiB0aGlzLnhoclR5cGUgIT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHRoaXMueGhyVHlwZSA9IHRoaXMuX2RldGVybWluZVhoclR5cGUoKTtcbiAgICB9XG5cbiAgICB2YXIgeGhyID0gdGhpcy54aHIgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTtcblxuICAgIC8vIHNldCB0aGUgcmVxdWVzdCB0eXBlIGFuZCB1cmxcbiAgICB4aHIub3BlbignR0VUJywgdGhpcy51cmwsIHRydWUpO1xuXG4gICAgLy8gbG9hZCBqc29uIGFzIHRleHQgYW5kIHBhcnNlIGl0IG91cnNlbHZlcy4gV2UgZG8gdGhpcyBiZWNhdXNlIHNvbWUgYnJvd3NlcnNcbiAgICAvLyAqY291Z2gqIHNhZmFyaSAqY291Z2gqIGNhbid0IGRlYWwgd2l0aCBpdC5cbiAgICBpZiAodGhpcy54aHJUeXBlID09PSBSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRS5KU09OIHx8IHRoaXMueGhyVHlwZSA9PT0gUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuRE9DVU1FTlQpIHtcbiAgICAgICAgeGhyLnJlc3BvbnNlVHlwZSA9IFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLlRFWFQ7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICB4aHIucmVzcG9uc2VUeXBlID0gdGhpcy54aHJUeXBlO1xuICAgIH1cblxuICAgIHhoci5hZGRFdmVudExpc3RlbmVyKCdlcnJvcicsIHRoaXMuX2JvdW5kWGhyT25FcnJvciwgZmFsc2UpO1xuICAgIHhoci5hZGRFdmVudExpc3RlbmVyKCdhYm9ydCcsIHRoaXMuX2JvdW5kWGhyT25BYm9ydCwgZmFsc2UpO1xuICAgIHhoci5hZGRFdmVudExpc3RlbmVyKCdwcm9ncmVzcycsIHRoaXMuX2JvdW5kT25Qcm9ncmVzcywgZmFsc2UpO1xuICAgIHhoci5hZGRFdmVudExpc3RlbmVyKCdsb2FkJywgdGhpcy5fYm91bmRYaHJPbkxvYWQsIGZhbHNlKTtcblxuICAgIHhoci5zZW5kKCk7XG59O1xuXG4vKipcbiAqIExvYWRzIHRoaXMgcmVzb3VyY2VzIHVzaW5nIGFuIFhEb21haW5SZXF1ZXN0LiBUaGlzIGlzIGhlcmUgYmVjYXVzZSB3ZSBuZWVkIHRvIHN1cHBvcnQgSUU5IChncm9zcykuXG4gKlxuICogQHByaXZhdGVcbiAqL1xuUmVzb3VyY2UucHJvdG90eXBlLl9sb2FkWGRyID0gZnVuY3Rpb24gKCkge1xuICAgIC8vIGlmIHVuc2V0LCBkZXRlcm1pbmUgdGhlIHZhbHVlXG4gICAgaWYgKHR5cGVvZiB0aGlzLnhoclR5cGUgIT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHRoaXMueGhyVHlwZSA9IHRoaXMuX2RldGVybWluZVhoclR5cGUoKTtcbiAgICB9XG5cbiAgICB2YXIgeGRyID0gdGhpcy54aHIgPSBuZXcgWERvbWFpblJlcXVlc3QoKTtcblxuICAgIC8vIFhEb21haW5SZXF1ZXN0IGhhcyBhIGZldyBxdWlya3MuIE9jY2FzaW9uYWxseSBpdCB3aWxsIGFib3J0IHJlcXVlc3RzXG4gICAgLy8gQSB3YXkgdG8gYXZvaWQgdGhpcyBpcyB0byBtYWtlIHN1cmUgQUxMIGNhbGxiYWNrcyBhcmUgc2V0IGV2ZW4gaWYgbm90IHVzZWRcbiAgICAvLyBNb3JlIGluZm8gaGVyZTogaHR0cDovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy8xNTc4Njk2Ni94ZG9tYWlucmVxdWVzdC1hYm9ydHMtcG9zdC1vbi1pZS05XG4gICAgeGRyLnRpbWVvdXQgPSA1MDAwO1xuXG4gICAgeGRyLm9uZXJyb3IgPSB0aGlzLl9ib3VuZFhock9uRXJyb3I7XG4gICAgeGRyLm9udGltZW91dCA9IHRoaXMuX2JvdW5kWGRyT25UaW1lb3V0O1xuICAgIHhkci5vbnByb2dyZXNzID0gdGhpcy5fYm91bmRPblByb2dyZXNzO1xuICAgIHhkci5vbmxvYWQgPSB0aGlzLl9ib3VuZFhock9uTG9hZDtcblxuICAgIHhkci5vcGVuKCdHRVQnLCB0aGlzLnVybCwgdHJ1ZSk7XG5cbiAgICAvLyAgTm90ZTogVGhlIHhkci5zZW5kKCkgY2FsbCBpcyB3cmFwcGVkIGluIGEgdGltZW91dCB0byBwcmV2ZW50IGFuIGlzc3VlIHdpdGggdGhlIGludGVyZmFjZSB3aGVyZSBzb21lIHJlcXVlc3RzIGFyZSBsb3N0XG4gICAgLy8gIGlmIG11bHRpcGxlIFhEb21haW5SZXF1ZXN0cyBhcmUgYmVpbmcgc2VudCBhdCB0aGUgc2FtZSB0aW1lLlxuICAgIC8vIFNvbWUgaW5mbyBoZXJlOiBodHRwczovL2dpdGh1Yi5jb20vcGhvdG9uc3Rvcm0vcGhhc2VyL2lzc3Vlcy8xMjQ4XG4gICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICAgIHhkci5zZW5kKCk7XG4gICAgfSwgMCk7XG59O1xuXG4vKipcbiAqIENyZWF0ZXMgYSBzb3VyY2UgdXNlZCBpbiBsb2FkaW5nIHZpYSBhbiBlbGVtZW50LlxuICpcbiAqIEBwYXJhbSB0eXBlIHtzdHJpbmd9IFRoZSBlbGVtZW50IHR5cGUgKHZpZGVvIG9yIGF1ZGlvKS5cbiAqIEBwYXJhbSB1cmwge3N0cmluZ30gVGhlIHNvdXJjZSBVUkwgdG8gbG9hZCBmcm9tLlxuICogQHBhcmFtIFttaW1lXSB7c3RyaW5nfSBUaGUgbWltZSB0eXBlIG9mIHRoZSB2aWRlb1xuICogQHByaXZhdGVcbiAqL1xuUmVzb3VyY2UucHJvdG90eXBlLl9jcmVhdGVTb3VyY2UgPSBmdW5jdGlvbiAodHlwZSwgdXJsLCBtaW1lKSB7XG4gICAgaWYgKCFtaW1lKSB7XG4gICAgICAgIG1pbWUgPSB0eXBlICsgJy8nICsgdXJsLnN1YnN0cih1cmwubGFzdEluZGV4T2YoJy4nKSArIDEpO1xuICAgIH1cblxuICAgIHZhciBzb3VyY2UgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzb3VyY2UnKTtcblxuICAgIHNvdXJjZS5zcmMgPSB1cmw7XG4gICAgc291cmNlLnR5cGUgPSBtaW1lO1xuXG4gICAgcmV0dXJuIHNvdXJjZTtcbn07XG5cbi8qKlxuICogQ2FsbGVkIGlmIGEgbG9hZCBlcnJvcnMgb3V0LlxuICpcbiAqIEBwYXJhbSBldmVudCB7RXZlbnR9IFRoZSBlcnJvciBldmVudCBmcm9tIHRoZSBlbGVtZW50IHRoYXQgZW1pdHMgaXQuXG4gKiBAcHJpdmF0ZVxuICovXG5SZXNvdXJjZS5wcm90b3R5cGUuX29uRXJyb3IgPSBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICB0aGlzLmVycm9yID0gbmV3IEVycm9yKCdGYWlsZWQgdG8gbG9hZCBlbGVtZW50IHVzaW5nICcgKyBldmVudC50YXJnZXQubm9kZU5hbWUpO1xuICAgIHRoaXMuY29tcGxldGUoKTtcbn07XG5cbi8qKlxuICogQ2FsbGVkIGlmIGEgbG9hZCBwcm9ncmVzcyBldmVudCBmaXJlcyBmb3IgeGhyL3hkci5cbiAqXG4gKiBAZmlyZXMgcHJvZ3Jlc3NcbiAqIEBwYXJhbSBldmVudCB7WE1MSHR0cFJlcXVlc3RQcm9ncmVzc0V2ZW50fEV2ZW50fVxuICogQHByaXZhdGVcbiAqL1xuUmVzb3VyY2UucHJvdG90eXBlLl9vblByb2dyZXNzID0gIGZ1bmN0aW9uIChldmVudCkge1xuICAgIGlmIChldmVudCAmJiBldmVudC5sZW5ndGhDb21wdXRhYmxlKSB7XG4gICAgICAgIHRoaXMuZW1pdCgncHJvZ3Jlc3MnLCB0aGlzLCBldmVudC5sb2FkZWQgLyBldmVudC50b3RhbCk7XG4gICAgfVxufTtcblxuLyoqXG4gKiBDYWxsZWQgaWYgYW4gZXJyb3IgZXZlbnQgZmlyZXMgZm9yIHhoci94ZHIuXG4gKlxuICogQHBhcmFtIGV2ZW50IHtYTUxIdHRwUmVxdWVzdEVycm9yRXZlbnR8RXZlbnR9XG4gKiBAcHJpdmF0ZVxuICovXG5SZXNvdXJjZS5wcm90b3R5cGUuX3hock9uRXJyb3IgPSBmdW5jdGlvbiAoKSB7XG4gICAgdGhpcy5lcnJvciA9IG5ldyBFcnJvcihcbiAgICAgICAgcmVxVHlwZSh0aGlzLnhocikgKyAnIFJlcXVlc3QgZmFpbGVkLiAnICtcbiAgICAgICAgJ1N0YXR1czogJyArIHRoaXMueGhyLnN0YXR1cyArICcsIHRleHQ6IFwiJyArIHRoaXMueGhyLnN0YXR1c1RleHQgKyAnXCInXG4gICAgKTtcblxuICAgIHRoaXMuY29tcGxldGUoKTtcbn07XG5cbi8qKlxuICogQ2FsbGVkIGlmIGFuIGFib3J0IGV2ZW50IGZpcmVzIGZvciB4aHIuXG4gKlxuICogQHBhcmFtIGV2ZW50IHtYTUxIdHRwUmVxdWVzdEFib3J0RXZlbnR9XG4gKiBAcHJpdmF0ZVxuICovXG5SZXNvdXJjZS5wcm90b3R5cGUuX3hock9uQWJvcnQgPSBmdW5jdGlvbiAoKSB7XG4gICAgdGhpcy5lcnJvciA9IG5ldyBFcnJvcihyZXFUeXBlKHRoaXMueGhyKSArICcgUmVxdWVzdCB3YXMgYWJvcnRlZCBieSB0aGUgdXNlci4nKTtcbiAgICB0aGlzLmNvbXBsZXRlKCk7XG59O1xuXG4vKipcbiAqIENhbGxlZCBpZiBhIHRpbWVvdXQgZXZlbnQgZmlyZXMgZm9yIHhkci5cbiAqXG4gKiBAcGFyYW0gZXZlbnQge0V2ZW50fVxuICogQHByaXZhdGVcbiAqL1xuUmVzb3VyY2UucHJvdG90eXBlLl94ZHJPblRpbWVvdXQgPSBmdW5jdGlvbiAoKSB7XG4gICAgdGhpcy5lcnJvciA9IG5ldyBFcnJvcihyZXFUeXBlKHRoaXMueGhyKSArICcgUmVxdWVzdCB0aW1lZCBvdXQuJyk7XG4gICAgdGhpcy5jb21wbGV0ZSgpO1xufTtcblxuLyoqXG4gKiBDYWxsZWQgd2hlbiBkYXRhIHN1Y2Nlc3NmdWxseSBsb2FkcyBmcm9tIGFuIHhoci94ZHIgcmVxdWVzdC5cbiAqXG4gKiBAcGFyYW0gZXZlbnQge1hNTEh0dHBSZXF1ZXN0TG9hZEV2ZW50fEV2ZW50fVxuICogQHByaXZhdGVcbiAqL1xuUmVzb3VyY2UucHJvdG90eXBlLl94aHJPbkxvYWQgPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHhociA9IHRoaXMueGhyLFxuICAgICAgICBzdGF0dXMgPSB4aHIuc3RhdHVzICE9PSB1bmRlZmluZWQgPyB4aHIuc3RhdHVzIDogMjAwOyAvL1hEUiBoYXMgbm8gYC5zdGF0dXNgLCBhc3N1bWUgMjAwLlxuXG4gICAgLy8gc3RhdHVzIGNhbiBiZSAwIHdoZW4gdXNpbmcgdGhlIGZpbGU6Ly8gcHJvdG9jb2wsIGFsc28gY2hlY2sgaWYgYSByZXNwb25zZSB3YXMgZm91bmRcbiAgICBpZiAoc3RhdHVzID09PSAyMDAgfHwgc3RhdHVzID09PSAyMDQgfHwgKHN0YXR1cyA9PT0gMCAmJiB4aHIucmVzcG9uc2VUZXh0Lmxlbmd0aCA+IDApKSB7XG4gICAgICAgIC8vIGlmIHRleHQsIGp1c3QgcmV0dXJuIGl0XG4gICAgICAgIGlmICh0aGlzLnhoclR5cGUgPT09IFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLlRFWFQpIHtcbiAgICAgICAgICAgIHRoaXMuZGF0YSA9IHhoci5yZXNwb25zZVRleHQ7XG4gICAgICAgIH1cbiAgICAgICAgLy8gaWYganNvbiwgcGFyc2UgaW50byBqc29uIG9iamVjdFxuICAgICAgICBlbHNlIGlmICh0aGlzLnhoclR5cGUgPT09IFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkpTT04pIHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgdGhpcy5kYXRhID0gSlNPTi5wYXJzZSh4aHIucmVzcG9uc2VUZXh0KTtcbiAgICAgICAgICAgICAgICB0aGlzLmlzSnNvbiA9IHRydWU7XG4gICAgICAgICAgICB9IGNhdGNoKGUpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmVycm9yID0gbmV3IEVycm9yKCdFcnJvciB0cnlpbmcgdG8gcGFyc2UgbG9hZGVkIGpzb246JywgZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8gaWYgeG1sLCBwYXJzZSBpbnRvIGFuIHhtbCBkb2N1bWVudCBvciBkaXYgZWxlbWVudFxuICAgICAgICBlbHNlIGlmICh0aGlzLnhoclR5cGUgPT09IFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkRPQ1VNRU5UKSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGlmICh3aW5kb3cuRE9NUGFyc2VyKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBkb21wYXJzZXIgPSBuZXcgRE9NUGFyc2VyKCk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGF0YSA9IGRvbXBhcnNlci5wYXJzZUZyb21TdHJpbmcoeGhyLnJlc3BvbnNlVGV4dCwgJ3RleHQveG1sJyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB2YXIgZGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgICAgICAgICAgICAgIGRpdi5pbm5lckhUTUwgPSB4aHIucmVzcG9uc2VUZXh0O1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmRhdGEgPSBkaXY7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXMuaXNYbWwgPSB0cnVlO1xuICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgIHRoaXMuZXJyb3IgPSBuZXcgRXJyb3IoJ0Vycm9yIHRyeWluZyB0byBwYXJzZSBsb2FkZWQgeG1sOicsIGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIG90aGVyIHR5cGVzIGp1c3QgcmV0dXJuIHRoZSByZXNwb25zZVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuZGF0YSA9IHhoci5yZXNwb25zZSB8fCB4aHIucmVzcG9uc2VUZXh0O1xuICAgICAgICB9XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICB0aGlzLmVycm9yID0gbmV3IEVycm9yKCdbJyArIHhoci5zdGF0dXMgKyAnXScgKyB4aHIuc3RhdHVzVGV4dCArICc6JyArIHhoci5yZXNwb25zZVVSTCk7XG4gICAgfVxuXG4gICAgdGhpcy5jb21wbGV0ZSgpO1xufTtcblxuZnVuY3Rpb24gcmVxVHlwZSh4aHIpIHtcbiAgICByZXR1cm4geGhyLnRvU3RyaW5nKCkucmVwbGFjZSgnb2JqZWN0ICcsICcnKTtcbn1cblxuLyoqXG4gKiBTZXRzIHRoZSBgY3Jvc3NPcmlnaW5gIHByb3BlcnR5IGZvciB0aGlzIHJlc291cmNlIGJhc2VkIG9uIGlmIHRoZSB1cmxcbiAqIGZvciB0aGlzIHJlc291cmNlIGlzIGNyb3NzLW9yaWdpbi4gSWYgY3Jvc3NPcmlnaW4gd2FzIG1hbnVhbGx5IHNldCwgdGhpc1xuICogZnVuY3Rpb24gZG9lcyBub3RoaW5nLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0gdXJsIHtzdHJpbmd9IFRoZSB1cmwgdG8gdGVzdC5cbiAqIEBwYXJhbSBbbG9jYXRpb249d2luZG93LmxvY2F0aW9uXSB7b2JqZWN0fSBUaGUgbG9jYXRpb24gb2JqZWN0IHRvIHRlc3QgYWdhaW5zdC5cbiAqIEByZXR1cm4ge3N0cmluZ30gVGhlIGNyb3NzT3JpZ2luIHZhbHVlIHRvIHVzZSAob3IgZW1wdHkgc3RyaW5nIGZvciBub25lKS5cbiAqL1xuUmVzb3VyY2UucHJvdG90eXBlLl9kZXRlcm1pbmVDcm9zc09yaWdpbiA9IGZ1bmN0aW9uICh1cmwsIGxvYykge1xuICAgIC8vIGRhdGE6IGFuZCBqYXZhc2NyaXB0OiB1cmxzIGFyZSBjb25zaWRlcmVkIHNhbWUtb3JpZ2luXG4gICAgaWYgKHVybC5pbmRleE9mKCdkYXRhOicpID09PSAwKSB7XG4gICAgICAgIHJldHVybiAnJztcbiAgICB9XG5cbiAgICAvLyBkZWZhdWx0IGlzIHdpbmRvdy5sb2NhdGlvblxuICAgIGxvYyA9IGxvYyB8fCB3aW5kb3cubG9jYXRpb247XG5cbiAgICBpZiAoIXRlbXBBbmNob3IpIHtcbiAgICAgICAgdGVtcEFuY2hvciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2EnKTtcbiAgICB9XG5cbiAgICAvLyBsZXQgdGhlIGJyb3dzZXIgZGV0ZXJtaW5lIHRoZSBmdWxsIGhyZWYgZm9yIHRoZSB1cmwgb2YgdGhpcyByZXNvdXJjZSBhbmQgdGhlblxuICAgIC8vIHBhcnNlIHdpdGggdGhlIG5vZGUgdXJsIGxpYiwgd2UgY2FuJ3QgdXNlIHRoZSBwcm9wZXJ0aWVzIG9mIHRoZSBhbmNob3IgZWxlbWVudFxuICAgIC8vIGJlY2F1c2UgdGhleSBkb24ndCB3b3JrIGluIElFOSA6KFxuICAgIHRlbXBBbmNob3IuaHJlZiA9IHVybDtcbiAgICB1cmwgPSBfdXJsLnBhcnNlKHRlbXBBbmNob3IuaHJlZik7XG5cbiAgICB2YXIgc2FtZVBvcnQgPSAoIXVybC5wb3J0ICYmIGxvYy5wb3J0ID09PSAnJykgfHwgKHVybC5wb3J0ID09PSBsb2MucG9ydCk7XG5cbiAgICAvLyBpZiBjcm9zcyBvcmlnaW5cbiAgICBpZiAodXJsLmhvc3RuYW1lICE9PSBsb2MuaG9zdG5hbWUgfHwgIXNhbWVQb3J0IHx8IHVybC5wcm90b2NvbCAhPT0gbG9jLnByb3RvY29sKSB7XG4gICAgICAgIHJldHVybiAnYW5vbnltb3VzJztcbiAgICB9XG5cbiAgICByZXR1cm4gJyc7XG59O1xuXG4vKipcbiAqIERldGVybWluZXMgdGhlIHJlc3BvbnNlVHlwZSBvZiBhbiBYSFIgcmVxdWVzdCBiYXNlZCBvbiB0aGUgZXh0ZW5zaW9uIG9mIHRoZVxuICogcmVzb3VyY2UgYmVpbmcgbG9hZGVkLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcmV0dXJuIHtSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRX0gVGhlIHJlc3BvbnNlVHlwZSB0byB1c2UuXG4gKi9cblJlc291cmNlLnByb3RvdHlwZS5fZGV0ZXJtaW5lWGhyVHlwZSA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gUmVzb3VyY2UuX3hoclR5cGVNYXBbdGhpcy5fZ2V0RXh0ZW5zaW9uKCldIHx8IFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLlRFWFQ7XG59O1xuXG5SZXNvdXJjZS5wcm90b3R5cGUuX2RldGVybWluZUxvYWRUeXBlID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBSZXNvdXJjZS5fbG9hZFR5cGVNYXBbdGhpcy5fZ2V0RXh0ZW5zaW9uKCldIHx8IFJlc291cmNlLkxPQURfVFlQRS5YSFI7XG59O1xuXG5SZXNvdXJjZS5wcm90b3R5cGUuX2dldEV4dGVuc2lvbiA9IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgdXJsID0gdGhpcy51cmwsXG4gICAgICAgIGV4dDtcblxuICAgIGlmICh0aGlzLmlzRGF0YVVybCkge1xuICAgICAgICB2YXIgc2xhc2hJbmRleCA9IHVybC5pbmRleE9mKCcvJyk7XG4gICAgICAgIGV4dCA9IHVybC5zdWJzdHJpbmcoc2xhc2hJbmRleCArIDEsIHVybC5pbmRleE9mKCc7Jywgc2xhc2hJbmRleCkpO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgdmFyIHF1ZXJ5U3RhcnQgPSB1cmwuaW5kZXhPZignPycpO1xuICAgICAgICBpZiAocXVlcnlTdGFydCAhPT0gLTEpIHtcbiAgICAgICAgICAgIHVybCA9IHVybC5zdWJzdHJpbmcoMCwgcXVlcnlTdGFydCk7XG4gICAgICAgIH1cblxuICAgICAgICBleHQgPSB1cmwuc3Vic3RyaW5nKHVybC5sYXN0SW5kZXhPZignLicpICsgMSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGV4dDtcbn07XG5cbi8qKlxuICogRGV0ZXJtaW5lcyB0aGUgbWltZSB0eXBlIG9mIGFuIFhIUiByZXF1ZXN0IGJhc2VkIG9uIHRoZSByZXNwb25zZVR5cGUgb2ZcbiAqIHJlc291cmNlIGJlaW5nIGxvYWRlZC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHJldHVybiB7c3RyaW5nfSBUaGUgbWltZSB0eXBlIHRvIHVzZS5cbiAqL1xuUmVzb3VyY2UucHJvdG90eXBlLl9nZXRNaW1lRnJvbVhoclR5cGUgPSBmdW5jdGlvbiAodHlwZSkge1xuICAgIHN3aXRjaCh0eXBlKSB7XG4gICAgICAgIGNhc2UgUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuQlVGRkVSOlxuICAgICAgICAgICAgcmV0dXJuICdhcHBsaWNhdGlvbi9vY3RldC1iaW5hcnknO1xuXG4gICAgICAgIGNhc2UgUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuQkxPQjpcbiAgICAgICAgICAgIHJldHVybiAnYXBwbGljYXRpb24vYmxvYic7XG5cbiAgICAgICAgY2FzZSBSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRS5ET0NVTUVOVDpcbiAgICAgICAgICAgIHJldHVybiAnYXBwbGljYXRpb24veG1sJztcblxuICAgICAgICBjYXNlIFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkpTT046XG4gICAgICAgICAgICByZXR1cm4gJ2FwcGxpY2F0aW9uL2pzb24nO1xuXG4gICAgICAgIGNhc2UgUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuREVGQVVMVDpcbiAgICAgICAgY2FzZSBSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRS5URVhUOlxuICAgICAgICAgICAgLyogZmFsbHMgdGhyb3VnaCAqL1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgcmV0dXJuICd0ZXh0L3BsYWluJztcblxuICAgIH1cbn07XG5cbi8qKlxuICogVGhlIHR5cGVzIG9mIGxvYWRpbmcgYSByZXNvdXJjZSBjYW4gdXNlLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBjb25zdGFudFxuICogQHByb3BlcnR5IHtvYmplY3R9IExPQURfVFlQRVxuICogQHByb3BlcnR5IHtudW1iZXJ9IExPQURfVFlQRS5YSFIgLSBVc2VzIFhNTEh0dHBSZXF1ZXN0IHRvIGxvYWQgdGhlIHJlc291cmNlLlxuICogQHByb3BlcnR5IHtudW1iZXJ9IExPQURfVFlQRS5JTUFHRSAtIFVzZXMgYW4gYEltYWdlYCBvYmplY3QgdG8gbG9hZCB0aGUgcmVzb3VyY2UuXG4gKiBAcHJvcGVydHkge251bWJlcn0gTE9BRF9UWVBFLkFVRElPIC0gVXNlcyBhbiBgQXVkaW9gIG9iamVjdCB0byBsb2FkIHRoZSByZXNvdXJjZS5cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBMT0FEX1RZUEUuVklERU8gLSBVc2VzIGEgYFZpZGVvYCBvYmplY3QgdG8gbG9hZCB0aGUgcmVzb3VyY2UuXG4gKi9cblJlc291cmNlLkxPQURfVFlQRSA9IHtcbiAgICBYSFI6ICAgIDEsXG4gICAgSU1BR0U6ICAyLFxuICAgIEFVRElPOiAgMyxcbiAgICBWSURFTzogIDRcbn07XG5cbi8qKlxuICogVGhlIFhIUiByZWFkeSBzdGF0ZXMsIHVzZWQgaW50ZXJuYWxseS5cbiAqXG4gKiBAc3RhdGljXG4gKiBAY29uc3RhbnRcbiAqIEBwcm9wZXJ0eSB7b2JqZWN0fSBYSFJfUkVBRFlfU1RBVEVcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBYSFJfUkVBRFlfU1RBVEUuVU5TRU5UIC0gb3BlbigpaGFzIG5vdCBiZWVuIGNhbGxlZCB5ZXQuXG4gKiBAcHJvcGVydHkge251bWJlcn0gWEhSX1JFQURZX1NUQVRFLk9QRU5FRCAtIHNlbmQoKWhhcyBub3QgYmVlbiBjYWxsZWQgeWV0LlxuICogQHByb3BlcnR5IHtudW1iZXJ9IFhIUl9SRUFEWV9TVEFURS5IRUFERVJTX1JFQ0VJVkVEIC0gc2VuZCgpIGhhcyBiZWVuIGNhbGxlZCwgYW5kIGhlYWRlcnMgYW5kIHN0YXR1cyBhcmUgYXZhaWxhYmxlLlxuICogQHByb3BlcnR5IHtudW1iZXJ9IFhIUl9SRUFEWV9TVEFURS5MT0FESU5HIC0gRG93bmxvYWRpbmc7IHJlc3BvbnNlVGV4dCBob2xkcyBwYXJ0aWFsIGRhdGEuXG4gKiBAcHJvcGVydHkge251bWJlcn0gWEhSX1JFQURZX1NUQVRFLkRPTkUgLSBUaGUgb3BlcmF0aW9uIGlzIGNvbXBsZXRlLlxuICovXG5SZXNvdXJjZS5YSFJfUkVBRFlfU1RBVEUgPSB7XG4gICAgVU5TRU5UOiAwLFxuICAgIE9QRU5FRDogMSxcbiAgICBIRUFERVJTX1JFQ0VJVkVEOiAyLFxuICAgIExPQURJTkc6IDMsXG4gICAgRE9ORTogNFxufTtcblxuLyoqXG4gKiBUaGUgWEhSIHJlYWR5IHN0YXRlcywgdXNlZCBpbnRlcm5hbGx5LlxuICpcbiAqIEBzdGF0aWNcbiAqIEBjb25zdGFudFxuICogQHByb3BlcnR5IHtvYmplY3R9IFhIUl9SRVNQT05TRV9UWVBFXG4gKiBAcHJvcGVydHkge3N0cmluZ30gWEhSX1JFU1BPTlNFX1RZUEUuREVGQVVMVCAtIGRlZmF1bHRzIHRvIHRleHRcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBYSFJfUkVTUE9OU0VfVFlQRS5CVUZGRVIgLSBBcnJheUJ1ZmZlclxuICogQHByb3BlcnR5IHtzdHJpbmd9IFhIUl9SRVNQT05TRV9UWVBFLkJMT0IgLSBCbG9iXG4gKiBAcHJvcGVydHkge3N0cmluZ30gWEhSX1JFU1BPTlNFX1RZUEUuRE9DVU1FTlQgLSBEb2N1bWVudFxuICogQHByb3BlcnR5IHtzdHJpbmd9IFhIUl9SRVNQT05TRV9UWVBFLkpTT04gLSBPYmplY3RcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBYSFJfUkVTUE9OU0VfVFlQRS5URVhUIC0gU3RyaW5nXG4gKi9cblJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFID0ge1xuICAgIERFRkFVTFQ6ICAgICd0ZXh0JyxcbiAgICBCVUZGRVI6ICAgICAnYXJyYXlidWZmZXInLFxuICAgIEJMT0I6ICAgICAgICdibG9iJyxcbiAgICBET0NVTUVOVDogICAnZG9jdW1lbnQnLFxuICAgIEpTT046ICAgICAgICdqc29uJyxcbiAgICBURVhUOiAgICAgICAndGV4dCdcbn07XG5cblJlc291cmNlLl9sb2FkVHlwZU1hcCA9IHtcbiAgICAnZ2lmJzogICAgICBSZXNvdXJjZS5MT0FEX1RZUEUuSU1BR0UsXG4gICAgJ3BuZyc6ICAgICAgUmVzb3VyY2UuTE9BRF9UWVBFLklNQUdFLFxuICAgICdibXAnOiAgICAgIFJlc291cmNlLkxPQURfVFlQRS5JTUFHRSxcbiAgICAnanBnJzogICAgICBSZXNvdXJjZS5MT0FEX1RZUEUuSU1BR0UsXG4gICAgJ2pwZWcnOiAgICAgUmVzb3VyY2UuTE9BRF9UWVBFLklNQUdFLFxuICAgICd0aWYnOiAgICAgIFJlc291cmNlLkxPQURfVFlQRS5JTUFHRSxcbiAgICAndGlmZic6ICAgICBSZXNvdXJjZS5MT0FEX1RZUEUuSU1BR0UsXG4gICAgJ3dlYnAnOiAgICAgUmVzb3VyY2UuTE9BRF9UWVBFLklNQUdFLFxuICAgICd0Z2EnOiAgICAgIFJlc291cmNlLkxPQURfVFlQRS5JTUFHRVxufTtcblxuUmVzb3VyY2UuX3hoclR5cGVNYXAgPSB7XG4gICAgLy8geG1sXG4gICAgJ3hodG1sJzogICAgUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuRE9DVU1FTlQsXG4gICAgJ2h0bWwnOiAgICAgUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuRE9DVU1FTlQsXG4gICAgJ2h0bSc6ICAgICAgUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuRE9DVU1FTlQsXG4gICAgJ3htbCc6ICAgICAgUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuRE9DVU1FTlQsXG4gICAgJ3RteCc6ICAgICAgUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuRE9DVU1FTlQsXG4gICAgJ3RzeCc6ICAgICAgUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuRE9DVU1FTlQsXG4gICAgJ3N2Zyc6ICAgICAgUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuRE9DVU1FTlQsXG5cbiAgICAvLyBpbWFnZXNcbiAgICAnZ2lmJzogICAgICBSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRS5CTE9CLFxuICAgICdwbmcnOiAgICAgIFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkJMT0IsXG4gICAgJ2JtcCc6ICAgICAgUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuQkxPQixcbiAgICAnanBnJzogICAgICBSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRS5CTE9CLFxuICAgICdqcGVnJzogICAgIFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkJMT0IsXG4gICAgJ3RpZic6ICAgICAgUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuQkxPQixcbiAgICAndGlmZic6ICAgICBSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRS5CTE9CLFxuICAgICd3ZWJwJzogICAgIFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkJMT0IsXG4gICAgJ3RnYSc6ICAgICAgUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuQkxPQixcblxuICAgIC8vIGpzb25cbiAgICAnanNvbic6ICAgICBSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRS5KU09OLFxuXG4gICAgLy8gdGV4dFxuICAgICd0ZXh0JzogICAgIFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLlRFWFQsXG4gICAgJ3R4dCc6ICAgICAgUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuVEVYVFxufTtcblxuLyoqXG4gKiBTZXRzIHRoZSBsb2FkIHR5cGUgdG8gYmUgdXNlZCBmb3IgYSBzcGVjaWZpYyBleHRlbnNpb24uXG4gKlxuICogQHN0YXRpY1xuICogQHBhcmFtIGV4dG5hbWUge3N0cmluZ30gVGhlIGV4dGVuc2lvbiB0byBzZXQgdGhlIHR5cGUgZm9yLCBlLmcuIFwicG5nXCIgb3IgXCJmbnRcIlxuICogQHBhcmFtIGxvYWRUeXBlIHtSZXNvdXJjZS5MT0FEX1RZUEV9IFRoZSBsb2FkIHR5cGUgdG8gc2V0IGl0IHRvLlxuICovXG5SZXNvdXJjZS5zZXRFeHRlbnNpb25Mb2FkVHlwZSA9IGZ1bmN0aW9uIChleHRuYW1lLCBsb2FkVHlwZSkge1xuICAgIHNldEV4dE1hcChSZXNvdXJjZS5fbG9hZFR5cGVNYXAsIGV4dG5hbWUsIGxvYWRUeXBlKTtcbn07XG5cbi8qKlxuICogU2V0cyB0aGUgbG9hZCB0eXBlIHRvIGJlIHVzZWQgZm9yIGEgc3BlY2lmaWMgZXh0ZW5zaW9uLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBwYXJhbSBleHRuYW1lIHtzdHJpbmd9IFRoZSBleHRlbnNpb24gdG8gc2V0IHRoZSB0eXBlIGZvciwgZS5nLiBcInBuZ1wiIG9yIFwiZm50XCJcbiAqIEBwYXJhbSB4aHJUeXBlIHtSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRX0gVGhlIHhociB0eXBlIHRvIHNldCBpdCB0by5cbiAqL1xuUmVzb3VyY2Uuc2V0RXh0ZW5zaW9uWGhyVHlwZSA9IGZ1bmN0aW9uIChleHRuYW1lLCB4aHJUeXBlKSB7XG4gICAgc2V0RXh0TWFwKFJlc291cmNlLl94aHJUeXBlTWFwLCBleHRuYW1lLCB4aHJUeXBlKTtcbn07XG5cbmZ1bmN0aW9uIHNldEV4dE1hcChtYXAsIGV4dG5hbWUsIHZhbCkge1xuICAgIGlmIChleHRuYW1lICYmIGV4dG5hbWUuaW5kZXhPZignLicpID09PSAwKSB7XG4gICAgICAgIGV4dG5hbWUgPSBleHRuYW1lLnN1YnN0cmluZygxKTtcbiAgICB9XG5cbiAgICBpZiAoIWV4dG5hbWUpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIG1hcFtleHRuYW1lXSA9IHZhbDtcbn1cbiIsIm1vZHVsZS5leHBvcnRzID0ge1xuXG4gICAgLy8gcHJpdmF0ZSBwcm9wZXJ0eVxuICAgIF9rZXlTdHI6IFwiQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkrLz1cIixcblxuICAgIGVuY29kZUJpbmFyeTogZnVuY3Rpb24gKGlucHV0KSB7XG4gICAgICAgIHZhciBvdXRwdXQgPSBcIlwiO1xuICAgICAgICB2YXIgYnl0ZWJ1ZmZlcjtcbiAgICAgICAgdmFyIGVuY29kZWRDaGFySW5kZXhlcyA9IG5ldyBBcnJheSg0KTtcbiAgICAgICAgdmFyIGlueCA9IDA7XG4gICAgICAgIHZhciBqbnggPSAwO1xuICAgICAgICB2YXIgcGFkZGluZ0J5dGVzID0gMDtcblxuICAgICAgICB3aGlsZSAoaW54IDwgaW5wdXQubGVuZ3RoKSB7XG4gICAgICAgICAgICAvLyBGaWxsIGJ5dGUgYnVmZmVyIGFycmF5XG4gICAgICAgICAgICBieXRlYnVmZmVyID0gbmV3IEFycmF5KDMpO1xuICAgICAgICAgICAgZm9yIChqbnggPSAwOyBqbnggPCBieXRlYnVmZmVyLmxlbmd0aDsgam54KyspIHtcbiAgICAgICAgICAgICAgICBpZiAoaW54IDwgaW5wdXQubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIHRocm93IGF3YXkgaGlnaC1vcmRlciBieXRlLCBhcyBkb2N1bWVudGVkIGF0OlxuICAgICAgICAgICAgICAgICAgICAvLyBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9Fbi9Vc2luZ19YTUxIdHRwUmVxdWVzdCNIYW5kbGluZ19iaW5hcnlfZGF0YVxuICAgICAgICAgICAgICAgICAgICBieXRlYnVmZmVyW2pueF0gPSBpbnB1dC5jaGFyQ29kZUF0KGlueCsrKSAmIDB4ZmY7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBieXRlYnVmZmVyW2pueF0gPSAwO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gR2V0IGVhY2ggZW5jb2RlZCBjaGFyYWN0ZXIsIDYgYml0cyBhdCBhIHRpbWVcbiAgICAgICAgICAgIC8vIGluZGV4IDE6IGZpcnN0IDYgYml0c1xuICAgICAgICAgICAgZW5jb2RlZENoYXJJbmRleGVzWzBdID0gYnl0ZWJ1ZmZlclswXSA+PiAyO1xuICAgICAgICAgICAgLy8gaW5kZXggMjogc2Vjb25kIDYgYml0cyAoMiBsZWFzdCBzaWduaWZpY2FudCBiaXRzIGZyb20gaW5wdXQgYnl0ZSAxICsgNCBtb3N0IHNpZ25pZmljYW50IGJpdHMgZnJvbSBieXRlIDIpXG4gICAgICAgICAgICBlbmNvZGVkQ2hhckluZGV4ZXNbMV0gPSAoKGJ5dGVidWZmZXJbMF0gJiAweDMpIDw8IDQpIHwgKGJ5dGVidWZmZXJbMV0gPj4gNCk7XG4gICAgICAgICAgICAvLyBpbmRleCAzOiB0aGlyZCA2IGJpdHMgKDQgbGVhc3Qgc2lnbmlmaWNhbnQgYml0cyBmcm9tIGlucHV0IGJ5dGUgMiArIDIgbW9zdCBzaWduaWZpY2FudCBiaXRzIGZyb20gYnl0ZSAzKVxuICAgICAgICAgICAgZW5jb2RlZENoYXJJbmRleGVzWzJdID0gKChieXRlYnVmZmVyWzFdICYgMHgwZikgPDwgMikgfCAoYnl0ZWJ1ZmZlclsyXSA+PiA2KTtcbiAgICAgICAgICAgIC8vIGluZGV4IDM6IGZvcnRoIDYgYml0cyAoNiBsZWFzdCBzaWduaWZpY2FudCBiaXRzIGZyb20gaW5wdXQgYnl0ZSAzKVxuICAgICAgICAgICAgZW5jb2RlZENoYXJJbmRleGVzWzNdID0gYnl0ZWJ1ZmZlclsyXSAmIDB4M2Y7XG5cbiAgICAgICAgICAgIC8vIERldGVybWluZSB3aGV0aGVyIHBhZGRpbmcgaGFwcGVuZWQsIGFuZCBhZGp1c3QgYWNjb3JkaW5nbHlcbiAgICAgICAgICAgIHBhZGRpbmdCeXRlcyA9IGlueCAtIChpbnB1dC5sZW5ndGggLSAxKTtcbiAgICAgICAgICAgIHN3aXRjaCAocGFkZGluZ0J5dGVzKSB7XG4gICAgICAgICAgICAgICAgY2FzZSAyOlxuICAgICAgICAgICAgICAgICAgICAvLyBTZXQgbGFzdCAyIGNoYXJhY3RlcnMgdG8gcGFkZGluZyBjaGFyXG4gICAgICAgICAgICAgICAgICAgIGVuY29kZWRDaGFySW5kZXhlc1szXSA9IDY0O1xuICAgICAgICAgICAgICAgICAgICBlbmNvZGVkQ2hhckluZGV4ZXNbMl0gPSA2NDtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICAgICAgICAgIC8vIFNldCBsYXN0IGNoYXJhY3RlciB0byBwYWRkaW5nIGNoYXJcbiAgICAgICAgICAgICAgICAgICAgZW5jb2RlZENoYXJJbmRleGVzWzNdID0gNjQ7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7IC8vIE5vIHBhZGRpbmcgLSBwcm9jZWVkXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIE5vdyB3ZSB3aWxsIGdyYWIgZWFjaCBhcHByb3ByaWF0ZSBjaGFyYWN0ZXIgb3V0IG9mIG91ciBrZXlzdHJpbmdcbiAgICAgICAgICAgIC8vIGJhc2VkIG9uIG91ciBpbmRleCBhcnJheSBhbmQgYXBwZW5kIGl0IHRvIHRoZSBvdXRwdXQgc3RyaW5nXG4gICAgICAgICAgICBmb3IgKGpueCA9IDA7IGpueCA8IGVuY29kZWRDaGFySW5kZXhlcy5sZW5ndGg7IGpueCsrKSB7XG4gICAgICAgICAgICAgICAgb3V0cHV0ICs9IHRoaXMuX2tleVN0ci5jaGFyQXQoZW5jb2RlZENoYXJJbmRleGVzW2pueF0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBvdXRwdXQ7XG4gICAgfVxufTtcbiIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9Mb2FkZXInKTtcblxubW9kdWxlLmV4cG9ydHMuUmVzb3VyY2UgPSByZXF1aXJlKCcuL1Jlc291cmNlJyk7XG5cbm1vZHVsZS5leHBvcnRzLm1pZGRsZXdhcmUgPSB7XG4gICAgY2FjaGluZzoge1xuICAgICAgICBtZW1vcnk6IHJlcXVpcmUoJy4vbWlkZGxld2FyZXMvY2FjaGluZy9tZW1vcnknKVxuICAgIH0sXG4gICAgcGFyc2luZzoge1xuICAgICAgICBibG9iOiByZXF1aXJlKCcuL21pZGRsZXdhcmVzL3BhcnNpbmcvYmxvYicpXG4gICAgfVxufTtcbiIsIi8vIGEgc2ltcGxlIGluLW1lbW9yeSBjYWNoZSBmb3IgcmVzb3VyY2VzXG52YXIgY2FjaGUgPSB7fTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChyZXNvdXJjZSwgbmV4dCkge1xuICAgICAgICAvLyBpZiBjYWNoZWQsIHRoZW4gc2V0IGRhdGEgYW5kIGNvbXBsZXRlIHRoZSByZXNvdXJjZVxuICAgICAgICBpZiAoY2FjaGVbcmVzb3VyY2UudXJsXSkge1xuICAgICAgICAgICAgcmVzb3VyY2UuZGF0YSA9IGNhY2hlW3Jlc291cmNlLnVybF07XG4gICAgICAgICAgICByZXNvdXJjZS5jb21wbGV0ZSgpO1xuICAgICAgICB9XG4gICAgICAgIC8vIGlmIG5vdCBjYWNoZWQsIHdhaXQgZm9yIGNvbXBsZXRlIGFuZCBzdG9yZSBpdCBpbiB0aGUgY2FjaGUuXG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcmVzb3VyY2Uub25jZSgnY29tcGxldGUnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICBjYWNoZVt0aGlzLnVybF0gPSB0aGlzLmRhdGE7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBcbiAgICAgICAgbmV4dCgpO1xuICAgIH07XG59O1xuIiwidmFyIFJlc291cmNlID0gcmVxdWlyZSgnLi4vLi4vUmVzb3VyY2UnKSxcbiAgICBiNjQgPSByZXF1aXJlKCcuLi8uLi9iNjQnKTtcblxud2luZG93LlVSTCA9IHdpbmRvdy5VUkwgfHwgd2luZG93LndlYmtpdFVSTDtcblxuLy8gYSBtaWRkbGV3YXJlIGZvciB0cmFuc2Zvcm1pbmcgWEhSIGxvYWRlZCBCbG9icyBpbnRvIG1vcmUgdXNlZnVsIG9iamVjdHNcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChyZXNvdXJjZSwgbmV4dCkge1xuICAgICAgICBpZiAoIXJlc291cmNlLmRhdGEpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXh0KCk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBpZiB0aGlzIHdhcyBhbiBYSFIgbG9hZCBvZiBhIGJsb2JcbiAgICAgICAgaWYgKHJlc291cmNlLnhociAmJiByZXNvdXJjZS54aHJUeXBlID09PSBSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRS5CTE9CKSB7XG4gICAgICAgICAgICAvLyBpZiB0aGVyZSBpcyBubyBibG9iIHN1cHBvcnQgd2UgcHJvYmFibHkgZ290IGEgYmluYXJ5IHN0cmluZyBiYWNrXG4gICAgICAgICAgICBpZiAoIXdpbmRvdy5CbG9iIHx8IHR5cGVvZiByZXNvdXJjZS5kYXRhID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgICAgIHZhciB0eXBlID0gcmVzb3VyY2UueGhyLmdldFJlc3BvbnNlSGVhZGVyKCdjb250ZW50LXR5cGUnKTtcblxuICAgICAgICAgICAgICAgIC8vIHRoaXMgaXMgYW4gaW1hZ2UsIGNvbnZlcnQgdGhlIGJpbmFyeSBzdHJpbmcgaW50byBhIGRhdGEgdXJsXG4gICAgICAgICAgICAgICAgaWYgKHR5cGUgJiYgdHlwZS5pbmRleE9mKCdpbWFnZScpID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc291cmNlLmRhdGEgPSBuZXcgSW1hZ2UoKTtcbiAgICAgICAgICAgICAgICAgICAgcmVzb3VyY2UuZGF0YS5zcmMgPSAnZGF0YTonICsgdHlwZSArICc7YmFzZTY0LCcgKyBiNjQuZW5jb2RlQmluYXJ5KHJlc291cmNlLnhoci5yZXNwb25zZVRleHQpO1xuXG4gICAgICAgICAgICAgICAgICAgIHJlc291cmNlLmlzSW1hZ2UgPSB0cnVlO1xuXG4gICAgICAgICAgICAgICAgICAgIC8vIHdhaXQgdW50aWwgdGhlIGltYWdlIGxvYWRzIGFuZCB0aGVuIGNhbGxiYWNrXG4gICAgICAgICAgICAgICAgICAgIHJlc291cmNlLmRhdGEub25sb2FkID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVzb3VyY2UuZGF0YS5vbmxvYWQgPSBudWxsO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBuZXh0KCk7XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gaWYgY29udGVudCB0eXBlIHNheXMgdGhpcyBpcyBhbiBpbWFnZSwgdGhlbiB3ZSBzaG91bGQgdHJhbnNmb3JtIHRoZSBibG9iIGludG8gYW4gSW1hZ2Ugb2JqZWN0XG4gICAgICAgICAgICBlbHNlIGlmIChyZXNvdXJjZS5kYXRhLnR5cGUuaW5kZXhPZignaW1hZ2UnKSA9PT0gMCkge1xuICAgICAgICAgICAgICAgIHZhciBzcmMgPSBVUkwuY3JlYXRlT2JqZWN0VVJMKHJlc291cmNlLmRhdGEpO1xuXG4gICAgICAgICAgICAgICAgcmVzb3VyY2UuYmxvYiA9IHJlc291cmNlLmRhdGE7XG4gICAgICAgICAgICAgICAgcmVzb3VyY2UuZGF0YSA9IG5ldyBJbWFnZSgpO1xuICAgICAgICAgICAgICAgIHJlc291cmNlLmRhdGEuc3JjID0gc3JjO1xuXG4gICAgICAgICAgICAgICAgcmVzb3VyY2UuaXNJbWFnZSA9IHRydWU7XG5cbiAgICAgICAgICAgICAgICAvLyBjbGVhbnVwIHRoZSBubyBsb25nZXIgdXNlZCBibG9iIGFmdGVyIHRoZSBpbWFnZSBsb2Fkc1xuICAgICAgICAgICAgICAgIHJlc291cmNlLmRhdGEub25sb2FkID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICBVUkwucmV2b2tlT2JqZWN0VVJMKHNyYyk7XG4gICAgICAgICAgICAgICAgICAgIHJlc291cmNlLmRhdGEub25sb2FkID0gbnVsbDtcblxuICAgICAgICAgICAgICAgICAgICBuZXh0KCk7XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIG5leHQoKTtcbiAgICAgICAgfVxuICAgIH07XG59O1xuIiwibW9kdWxlLmV4cG9ydHM9e1xuICBcIm5hbWVcIjogXCJwaXhpLmpzXCIsXG4gIFwidmVyc2lvblwiOiBcIjMuMC4xMC1kZXZcIixcbiAgXCJkZXNjcmlwdGlvblwiOiBcIlBpeGkuanMgaXMgYSBmYXN0IGxpZ2h0d2VpZ2h0IDJEIGxpYnJhcnkgdGhhdCB3b3JrcyBhY3Jvc3MgYWxsIGRldmljZXMuXCIsXG4gIFwiYXV0aG9yXCI6IFwiTWF0IEdyb3Zlc1wiLFxuICBcImNvbnRyaWJ1dG9yc1wiOiBbXG4gICAgXCJDaGFkIEVuZ2xlciA8Y2hhZEBwYW50aGVyZGV2LmNvbT5cIixcbiAgICBcIlJpY2hhcmQgRGF2ZXkgPHJkYXZleUBnbWFpbC5jb20+XCJcbiAgXSxcbiAgXCJtYWluXCI6IFwiLi9zcmMvaW5kZXguanNcIixcbiAgXCJob21lcGFnZVwiOiBcImh0dHA6Ly9nb29kYm95ZGlnaXRhbC5jb20vXCIsXG4gIFwiYnVnc1wiOiBcImh0dHBzOi8vZ2l0aHViLmNvbS9waXhpanMvcGl4aS5qcy9pc3N1ZXNcIixcbiAgXCJsaWNlbnNlXCI6IFwiTUlUXCIsXG4gIFwicmVwb3NpdG9yeVwiOiB7XG4gICAgXCJ0eXBlXCI6IFwiZ2l0XCIsXG4gICAgXCJ1cmxcIjogXCJodHRwczovL2dpdGh1Yi5jb20vcGl4aWpzL3BpeGkuanMuZ2l0XCJcbiAgfSxcbiAgXCJzY3JpcHRzXCI6IHtcbiAgICBcInN0YXJ0XCI6IFwiZ3VscCAmJiBndWxwIHdhdGNoXCIsXG4gICAgXCJ0ZXN0XCI6IFwiZ3VscCAmJiB0ZXN0ZW0gY2lcIixcbiAgICBcImJ1aWxkXCI6IFwiZ3VscFwiLFxuICAgIFwiZG9jc1wiOiBcImpzZG9jIC1jIC4vZ3VscC91dGlsL2pzZG9jLmNvbmYuanNvbiAtUiBSRUFETUUubWRcIlxuICB9LFxuICBcImZpbGVzXCI6IFtcbiAgICBcImJpbi9cIixcbiAgICBcInNyYy9cIixcbiAgICBcIkNPTlRSSUJVVElORy5tZFwiLFxuICAgIFwiTElDRU5TRVwiLFxuICAgIFwicGFja2FnZS5qc29uXCIsXG4gICAgXCJSRUFETUUubWRcIlxuICBdLFxuICBcImRlcGVuZGVuY2llc1wiOiB7XG4gICAgXCJhc3luY1wiOiBcIl4xLjUuMFwiLFxuICAgIFwiYnJmc1wiOiBcIl4xLjQuMVwiLFxuICAgIFwiZWFyY3V0XCI6IFwiXjIuMC43XCIsXG4gICAgXCJldmVudGVtaXR0ZXIzXCI6IFwiXjEuMS4xXCIsXG4gICAgXCJvYmplY3QtYXNzaWduXCI6IFwiXjQuMC4xXCIsXG4gICAgXCJwaXhpLWdsLWNvcmVcIjogXCJnaXQraHR0cHM6Ly9naXRodWIuY29tL0dvb2RCb3lEaWdpdGFsL3BpeGktZ2wtY29yZS5naXRcIixcbiAgICBcInJlc291cmNlLWxvYWRlclwiOiBcIl4xLjYuNFwiXG4gIH0sXG4gIFwiZGV2RGVwZW5kZW5jaWVzXCI6IHtcbiAgICBcImJyb3dzZXJpZnlcIjogXCJeMTEuMS4wXCIsXG4gICAgXCJjaGFpXCI6IFwiXjMuMi4wXCIsXG4gICAgXCJkZWxcIjogXCJeMi4wLjJcIixcbiAgICBcImd1bHBcIjogXCJeMy45LjBcIixcbiAgICBcImd1bHAtY2FjaGVkXCI6IFwiXjEuMS4wXCIsXG4gICAgXCJndWxwLWNvbmNhdFwiOiBcIl4yLjYuMFwiLFxuICAgIFwiZ3VscC1kZWJ1Z1wiOiBcIl4yLjEuMFwiLFxuICAgIFwiZ3VscC1oZWFkZXJcIjogXCJeMS43LjFcIixcbiAgICBcImd1bHAtanNoaW50XCI6IFwiXjEuMTEuMlwiLFxuICAgIFwiZ3VscC1taXJyb3JcIjogXCJeMC40LjBcIixcbiAgICBcImd1bHAtcGx1bWJlclwiOiBcIl4xLjAuMVwiLFxuICAgIFwiZ3VscC1yZW5hbWVcIjogXCJeMS4yLjJcIixcbiAgICBcImd1bHAtc291cmNlbWFwc1wiOiBcIl4xLjUuMlwiLFxuICAgIFwiZ3VscC11Z2xpZnlcIjogXCJeMS40LjFcIixcbiAgICBcImd1bHAtdXRpbFwiOiBcIl4zLjAuNlwiLFxuICAgIFwiamFndWFyanMtanNkb2NcIjogXCJnaXQraHR0cHM6Ly9naXRodWIuY29tL2Rhdmlkc2hpbWpzL2phZ3VhcmpzLWpzZG9jLmdpdFwiLFxuICAgIFwianNkb2NcIjogXCJeMy4zLjJcIixcbiAgICBcImpzaGludC1zdW1tYXJ5XCI6IFwiXjAuNC4wXCIsXG4gICAgXCJtaW5pbWlzdFwiOiBcIl4xLjIuMFwiLFxuICAgIFwibW9jaGFcIjogXCJeMi4zLjJcIixcbiAgICBcInJlcXVpcmUtZGlyXCI6IFwiXjAuMy4wXCIsXG4gICAgXCJydW4tc2VxdWVuY2VcIjogXCJeMS4xLjJcIixcbiAgICBcInRlc3RlbVwiOiBcIl4wLjkuNFwiLFxuICAgIFwidmlueWwtYnVmZmVyXCI6IFwiXjEuMC4wXCIsXG4gICAgXCJ2aW55bC1zb3VyY2Utc3RyZWFtXCI6IFwiXjEuMS4wXCIsXG4gICAgXCJ3YXRjaGlmeVwiOiBcIl4zLjQuMFwiXG4gIH0sXG4gIFwiYnJvd3NlcmlmeVwiOiB7XG4gICAgXCJ0cmFuc2Zvcm1cIjogW1xuICAgICAgXCJicmZzXCJcbiAgICBdXG4gIH1cbn1cbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vY29yZScpO1xuXG4vLyBhZGQgc29tZSBleHRyYSB2YXJpYWJsZXMgdG8gdGhlIGNvbnRhaW5lci4uXG5PYmplY3QuYXNzaWduKFxuICAgIGNvcmUuRGlzcGxheU9iamVjdC5wcm90b3R5cGUsXG4gICAgcmVxdWlyZSgnLi9hY2Nlc3NpYmxlVGFyZ2V0Jylcbik7XG5cblxuLyoqXG4gKiBUaGUgQWNjZXNzaWJpbGl0eSBtYW5hZ2VyIHJlYWNyZWF0ZXMgdGhlIGFiaWxpdHkgdG8gdGFiIGFuZCBhbmQgaGF2ZSBjb250ZW50IHJlYWQgYnkgc2NyZWVuIHJlYWRlcnMuIFRoaXMgaXMgdmVyeSBpbXBvcnRhbnQgYXMgaXQgY2FuIHBvc3NpYmx5IGhlbHAgcGVvcGxlIHdpdGggZGlzYWJpbGl0aWVzIGFjY2VzcyBwaXhpIGNvbnRlbnQuXG4gKiBNdWNoIGxpa2UgaW50ZXJhY3Rpb24gYW55IERpc3BsYXlPYmplY3QgY2FuIGJlIG1hZGUgYWNjZXNzaWJsZS4gVGhpcyBtYW5hZ2VyIHdpbGwgbWFwIHRoZSBldmVudHMgYXMgaWYgdGhlIG1vdXNlIHdhcyBiZWluZyB1c2VkLCBtaW5pbWl6aW5nIHRoZSBlZmZlcm90IHJlcXVpcmVkIHRvIGltcGxlbWVudC5cbiAqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuQ2FudmFzUmVuZGVyZXJ8UElYSS5XZWJHTFJlbmRlcmVyfSBBIHJlZmVyZW5jZSB0byB0aGUgY3VycmVudCByZW5kZXJlclxuICovXG5mdW5jdGlvbiBBY2Nlc3NpYmlsaXR5TWFuYWdlcihyZW5kZXJlcilcbntcblx0Ly8gZmlyc3Qgd2UgY3JlYXRlIGEgZGl2IHRoYXQgd2lsbCBzaXQgb3ZlciB0aGUgcGl4aSBlbGVtZW50LiBUaGlzIGlzIHdoZXJlIHRoZSBkaXYgb3ZlcmxheXMgd2lsbCBnby5cbiAgICB2YXIgZGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgXG4gICAgZGl2LnN0eWxlLndpZHRoID0gMTAwICsgJ3B4JztcbiAgICBkaXYuc3R5bGUuaGVpZ2h0ID0gMTAwICsgJ3B4JztcbiAgICBkaXYuc3R5bGUucG9zaXRpb24gPSAnYWJzb2x1dGUnO1xuICAgIGRpdi5zdHlsZS50b3AgPSAwO1xuICAgIGRpdi5zdHlsZS5sZWZ0ID0gMDtcbiAgIC8vXG4gICAgZGl2LnN0eWxlLnpJbmRleCA9IDI7XG4gICBcdFxuICAgXHQvKipcbiAgIFx0ICogVGhpcyBpcyB0aGUgZG9tIGVsZW1lbnQgdGhhdCB3aWxsIHNpdCBvdmVyIHRoZSBwaXhpIGVsZW1lbnQuIFRoaXMgaXMgd2hlcmUgdGhlIGRpdiBvdmVybGF5cyB3aWxsIGdvLlxuICAgXHQgKiBcbiAgIFx0ICogQHR5cGUge0hUTUxFbGVtZW50fVxuICAgXHQgKiBAcHJpdmF0ZVxuICAgXHQgKi9cbiAgIFx0dGhpcy5kaXYgPSBkaXY7XG5cbiAgIFx0LyoqXG4gICBcdCAqIEEgc2ltcGxlIHBvb2wgZm9yIHN0b3JpbmcgZGl2cy5cbiAgIFx0ICogXG4gICBcdCAqIEB0eXBlIHtBcnJheX1cbiAgIFx0ICogQHByaXZhdGVcbiAgIFx0ICovXG4gXHR0aGlzLnBvb2wgPSBbXTtcblxuIFx0LyoqXG4gXHQgKiBUaGlzIGlzIGEgdGljayB1c2VkIHRvIGNoZWNrIGlmIGFuIG9iamVjdCBpcyBubyBsb25nZXIgYmVpbmcgcmVuZGVyZWQuXG4gXHQgKiBcbiBcdCAqIEB0eXBlIHtOdW1iZXJ9XG4gXHQgKiBAcHJpdmF0ZVxuIFx0ICovXG4gICBcdHRoaXMucmVuZGVySWQgPSAwO1xuXG4gICBcdC8qKlxuICAgXHQgKiBTZXR0aW5nIHRoaXMgdG8gdHJ1ZSB3aWxsIHZpc3VhbGx5IHNob3cgdGhlIGRpdnNcbiAgIFx0ICogXG4gICBcdCAqIEB0eXBlIHtCb29sZWFufVxuICAgXHQgKi9cbiAgIFx0dGhpcy5kZWJ1ZyA9IGZhbHNlO1xuXG4gIFx0LyoqXG4gICAgICogVGhlIHJlbmRlcmVyIHRoaXMgYWNjZXNzaWJpbGl0eSBtYW5hZ2VyIHdvcmtzIGZvci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuU3lzdGVtUmVuZGVyZXJ9XG4gICAgICovXG4gICBcdHRoaXMucmVuZGVyZXIgPSByZW5kZXJlcjtcblxuICAgXHQvKipcbiAgICAgKiBUaGUgYXJyYXkgb2YgY3VycmVudGx5IGFjdGl2ZSBhY2Nlc3NpYmxlIGl0ZW1zLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7QXJyYXl9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgIFx0dGhpcy5jaGlsZHJlbiA9IFtdO1xuICAgXHRcbiAgIFx0LyoqXG4gICAgICogcHJlIGJpbmQgdGhlIGZ1bmN0aW9ucy4uXG4gICAgICovXG4gICBcdHRoaXMuX29uS2V5RG93biA9IHRoaXMuX29uS2V5RG93bi5iaW5kKHRoaXMpO1xuICAgXHR0aGlzLl9vbk1vdXNlTW92ZSA9IHRoaXMuX29uTW91c2VNb3ZlLmJpbmQodGhpcyk7XG4gICBcdFxuICAgXHQvKipcbiAgICAgKiBzdG9yZXMgdGhlIHN0YXRlIG9mIHRoZSBtYW5hZ2VyLiBJZiB0aGVyZSBhcmUgbm8gYWNjZXNzaWJsZSBvYmplY3RzIG9yIHRoZSBtb3VzZSBpcyBtb3ZpbmcgdGhlIHdpbGwgYmUgZmFsc2UuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtBcnJheX1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgXHR0aGlzLmlzQWN0aXZlID0gZmFsc2U7XG5cblxuICAgXHQvLyBsZXQgbGlzdGVuIGZvciB0YWIuLiBvbmNlIHByZXNzZWQgd2UgY2FuIGZpcmUgdXAgYW5kIHNob3cgdGhlIGFjY2Vzc2liaWxpdHkgbGF5ZXJcbiAgIFx0d2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLCB0aGlzLl9vbktleURvd24sIGZhbHNlKTtcbn1cblxuXG5BY2Nlc3NpYmlsaXR5TWFuYWdlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBBY2Nlc3NpYmlsaXR5TWFuYWdlcjtcbm1vZHVsZS5leHBvcnRzID0gQWNjZXNzaWJpbGl0eU1hbmFnZXI7XG5cbi8qKlxuICogQWN0aXZhdGluZyB3aWxsIGNhdXNlIHRoZSBBY2Nlc3NpYmlsaXR5IGxheWVyIHRvIGJlIHNob3duLiBUaGlzIGlzIGNhbGxlZCB3aGVuIGEgdXNlciBwcmVzZXMgdGhlIHRhYiBrZXlcbiAqIEBwcml2YXRlXG4gKi9cbkFjY2Vzc2liaWxpdHlNYW5hZ2VyLnByb3RvdHlwZS5hY3RpdmF0ZSA9IGZ1bmN0aW9uKClcbntcblx0aWYodGhpcy5pc0FjdGl2ZSlcblx0e1xuXHRcdHJldHVybjtcblx0fVxuXG5cdHRoaXMuaXNBY3RpdmUgPSB0cnVlO1xuXG5cdHdpbmRvdy5kb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdtb3VzZW1vdmUnLCB0aGlzLl9vbk1vdXNlTW92ZSwgdHJ1ZSk7XG5cdHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdrZXlkb3duJywgdGhpcy5fb25LZXlEb3duLCBmYWxzZSk7XG5cblx0dGhpcy5yZW5kZXJlci5vbigncG9zdHJlbmRlcicsIHRoaXMudXBkYXRlLCB0aGlzKTtcblxuXHR0aGlzLnJlbmRlcmVyLnZpZXcucGFyZW50Tm9kZS5hcHBlbmRDaGlsZCh0aGlzLmRpdik7XHRcbn07XG5cbi8qKlxuICogRGVhY3RpdmF0aW5nIHdpbGwgY2F1c2UgdGhlIEFjY2Vzc2liaWxpdHkgbGF5ZXIgdG8gYmUgaGlkZGVuLiBUaGlzIGlzIGNhbGxlZCB3aGVuIGEgdXNlciBtb3ZlcyB0aGUgbW91c2VcbiAqIEBwcml2YXRlXG4gKi9cbkFjY2Vzc2liaWxpdHlNYW5hZ2VyLnByb3RvdHlwZS5kZWFjdGl2YXRlID0gZnVuY3Rpb24oKVxue1xuXHRpZighdGhpcy5pc0FjdGl2ZSlcblx0e1xuXHRcdHJldHVybjtcblx0fVxuXG5cdHRoaXMuaXNBY3RpdmUgPSBmYWxzZTtcblxuXHR3aW5kb3cuZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignbW91c2Vtb3ZlJywgdGhpcy5fb25Nb3VzZU1vdmUpO1xuXHR3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsIHRoaXMuX29uS2V5RG93biwgZmFsc2UpO1xuXG5cdHRoaXMucmVuZGVyZXIub2ZmKCdwb3N0cmVuZGVyJywgdGhpcy51cGRhdGUpO1xuXG5cdHRoaXMuZGl2LnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodGhpcy5kaXYpO1xuXG59O1xuXG4vKipcbiAqIFRoaXMgcmVjdXJzaXZlIGZ1bmN0aW9uIHdpbGwgcnVuIHRocm91Z2h0IGhlIHNjZW5lIGdyYXBoIGFuZCBhZGQgYW55IG5ldyBhY2Nlc3NpYmxlIG9iamVjdHMgdG8gdGhlIERPTSBsYXllci5cbiAqIEBwYXJhbSBlbGVtZW50IHtQSVhJLkNvbnRhaW5lcnxQSVhJLlNwcml0ZXxQSVhJLmV4dHJhcy5UaWxpbmdTcHJpdGV9IHRoZSBEaXNwbGF5T2JqZWN0IHRvIGNoZWNrLlxuICogQHByaXZhdGVcbiAqL1xuQWNjZXNzaWJpbGl0eU1hbmFnZXIucHJvdG90eXBlLnVwZGF0ZUFjY2Vzc2libGVPYmplY3RzID0gZnVuY3Rpb24oZGlzcGxheU9iamVjdClcbntcblx0aWYoIWRpc3BsYXlPYmplY3QudmlzaWJsZSlcblx0e1xuXHRcdHJldHVybjtcblx0fVxuXG5cdGlmKGRpc3BsYXlPYmplY3QuYWNjZXNzaWJsZSAmJiBkaXNwbGF5T2JqZWN0LmludGVyYWN0aXZlKVxuXHR7XG5cdFx0aWYoIWRpc3BsYXlPYmplY3QuX2FjY2Vzc2libGVBY3RpdmUpXG5cdFx0e1xuXHRcdFx0dGhpcy5hZGRDaGlsZChkaXNwbGF5T2JqZWN0KTtcblx0XHR9XG5cdCAgIFx0XG5cdCAgIFx0ZGlzcGxheU9iamVjdC5yZW5kZXJJZCA9IHRoaXMucmVuZGVySWQ7XG5cdH1cblxuXHR2YXIgY2hpbGRyZW4gPSBkaXNwbGF5T2JqZWN0LmNoaWxkcmVuO1xuXG5cdGZvciAodmFyIGkgPSBjaGlsZHJlbi5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuXHRcdFxuXHRcdHRoaXMudXBkYXRlQWNjZXNzaWJsZU9iamVjdHMoY2hpbGRyZW5baV0pO1xuXHR9XG59O1xuXG5cbi8qKlxuICogQmVmb3JlIGVhY2ggcmVuZGVyIHRoaXMgZnVuY3Rpb24gd2lsbCBlbnN1cmUgdGhhdCBhbGwgZGl2cyBhcmUgbWFwcGVkIGNvcnJlY3RseSB0byB0aGVpciBEaXNwbGF5T2JqZWN0c1xuICogQHByaXZhdGVcbiAqL1xuQWNjZXNzaWJpbGl0eU1hbmFnZXIucHJvdG90eXBlLnVwZGF0ZSA9IGZ1bmN0aW9uKClcbntcblxuXHQvLyB1cGRhdGUgY2hpbGRyZW4uLi5cblx0dGhpcy51cGRhdGVBY2Nlc3NpYmxlT2JqZWN0cyh0aGlzLnJlbmRlcmVyLl9sYXN0T2JqZWN0UmVuZGVyZWQpO1xuXG5cdHZhciByZWN0ID0gdGhpcy5yZW5kZXJlci52aWV3LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuXHR2YXIgc3ggPSByZWN0LndpZHRoICAvIHRoaXMucmVuZGVyZXIud2lkdGg7XG5cdHZhciBzeSA9IHJlY3QuaGVpZ2h0IC8gdGhpcy5yZW5kZXJlci5oZWlnaHQ7XG5cblx0dmFyIGRpdiA9IHRoaXMuZGl2O1xuXG5cdGRpdi5zdHlsZS5sZWZ0ID0gcmVjdC5sZWZ0ICsgJ3B4Jztcblx0ZGl2LnN0eWxlLnRvcCA9IHJlY3QudG9wICsgJ3B4Jztcblx0ZGl2LnN0eWxlLndpZHRoID0gdGhpcy5yZW5kZXJlci53aWR0aCArICdweCc7XG5cdGRpdi5zdHlsZS5oZWlnaHQgPSB0aGlzLnJlbmRlcmVyLmhlaWdodCArICdweCc7XG5cblx0Zm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmNoaWxkcmVuLmxlbmd0aDsgaSsrKVxuXHR7XG5cblx0XHR2YXIgY2hpbGQgPSB0aGlzLmNoaWxkcmVuW2ldO1xuXG5cdFx0aWYoY2hpbGQucmVuZGVySWQgIT09IHRoaXMucmVuZGVySWQpXG5cdFx0e1xuXHRcdFx0Y2hpbGQuX2FjY2Vzc2libGVBY3RpdmUgPSBmYWxzZTtcblxuICAgICAgICAgICAgY29yZS51dGlscy5yZW1vdmVJdGVtcyh0aGlzLmNoaWxkcmVuLCBpLCAxKTtcblx0XHRcdHRoaXMuZGl2LnJlbW92ZUNoaWxkKCBjaGlsZC5fYWNjZXNzaWJsZURpdiApO1xuXHRcdFx0dGhpcy5wb29sLnB1c2goY2hpbGQuX2FjY2Vzc2libGVEaXYpO1xuXHRcdFx0Y2hpbGQuX2FjY2Vzc2libGVEaXYgPSBudWxsO1xuXG5cdFx0XHRpLS07XG5cblx0XHRcdGlmKHRoaXMuY2hpbGRyZW4ubGVuZ3RoID09PSAwKVxuXHRcdFx0e1xuXHRcdFx0XHR0aGlzLmRlYWN0aXZhdGUoKTtcblx0XHRcdH1cblx0XHR9XG5cdFx0ZWxzZVxuXHRcdHtcblx0XHRcdC8vIG1hcCBkaXYgdG8gZGlzcGxheS4uXG5cdFx0XHRkaXYgPSBjaGlsZC5fYWNjZXNzaWJsZURpdjtcblx0XHRcdHZhciBoaXRBcmVhID0gY2hpbGQuaGl0QXJlYTtcblx0XHRcdHZhciB3dCA9IGNoaWxkLndvcmxkVHJhbnNmb3JtO1xuXG5cdFx0XHRpZihjaGlsZC5oaXRBcmVhKVxuXHRcdFx0e1xuXHRcdFx0XHRkaXYuc3R5bGUubGVmdCA9ICgod3QudHggKyAoaGl0QXJlYS54ICogd3QuYSkpICogc3gpICsgJ3B4Jztcblx0XHRcdFx0ZGl2LnN0eWxlLnRvcCA9ICAoKHd0LnR5ICsgKGhpdEFyZWEueSAqIHd0LmQpKSAqIHN5KSArICAncHgnO1xuXG5cdFx0XHRcdGRpdi5zdHlsZS53aWR0aCA9IChoaXRBcmVhLndpZHRoICogd3QuYSAqIHN4KSArICdweCc7XG5cdFx0XHRcdGRpdi5zdHlsZS5oZWlnaHQgPSAoaGl0QXJlYS5oZWlnaHQgKiB3dC5kICogc3kpICsgJ3B4Jztcblx0XHRcdFxuXHRcdFx0fVxuXHRcdFx0ZWxzZVxuXHRcdFx0e1xuXHRcdFx0XHRoaXRBcmVhID0gY2hpbGQuZ2V0Qm91bmRzKCk7XG5cblx0XHRcdFx0dGhpcy5jYXBIaXRBcmVhKGhpdEFyZWEpO1xuXG5cdFx0XHRcdGRpdi5zdHlsZS5sZWZ0ID0gKGhpdEFyZWEueCAqIHN4KSArICdweCc7XG5cdFx0XHRcdGRpdi5zdHlsZS50b3AgPSAgKGhpdEFyZWEueSAqIHN5KSArICAncHgnO1xuXG5cdFx0XHRcdGRpdi5zdHlsZS53aWR0aCA9IChoaXRBcmVhLndpZHRoICogc3gpICsgJ3B4Jztcblx0XHRcdFx0ZGl2LnN0eWxlLmhlaWdodCA9IChoaXRBcmVhLmhlaWdodCAqIHN5KSArICdweCc7XG5cdFx0XHR9XHRcdFxuXHRcdH1cblx0fVxuXG5cdC8vIGluY3JlbWVudCB0aGUgcmVuZGVyIGlkLi5cblx0dGhpcy5yZW5kZXJJZCsrO1xufTtcblxuQWNjZXNzaWJpbGl0eU1hbmFnZXIucHJvdG90eXBlLmNhcEhpdEFyZWEgPSBmdW5jdGlvbiAoaGl0QXJlYSlcbntcbiAgICBpZiAoaGl0QXJlYS54IDwgMClcbiAgICB7XG4gICAgICAgIGhpdEFyZWEud2lkdGggKz0gaGl0QXJlYS54O1xuICAgICAgICBoaXRBcmVhLnggPSAwO1xuICAgIH1cblxuICAgIGlmIChoaXRBcmVhLnkgPCAwKVxuICAgIHtcbiAgICAgICAgaGl0QXJlYS5oZWlnaHQgKz0gaGl0QXJlYS55O1xuICAgICAgICBoaXRBcmVhLnkgPSAwO1xuICAgIH1cblxuICAgIGlmICggaGl0QXJlYS54ICsgaGl0QXJlYS53aWR0aCA+IHRoaXMucmVuZGVyZXIud2lkdGggKVxuICAgIHtcbiAgICAgICAgaGl0QXJlYS53aWR0aCA9IHRoaXMucmVuZGVyZXIud2lkdGggLSBoaXRBcmVhLng7XG4gICAgfVxuXG4gICAgaWYgKCBoaXRBcmVhLnkgKyBoaXRBcmVhLmhlaWdodCA+IHRoaXMucmVuZGVyZXIuaGVpZ2h0IClcbiAgICB7XG4gICAgICAgIGhpdEFyZWEuaGVpZ2h0ID0gdGhpcy5yZW5kZXJlci5oZWlnaHQgLSBoaXRBcmVhLnk7XG4gICAgfVxufTtcblxuXG4vKipcbiAqIEFkZHMgYSBEaXNwbGF5T2JqZWN0IHRvIHRoZSBhY2Nlc3NpYmlsaXR5IG1hbmFnZXJcbiAqIEBwcml2YXRlXG4gKi9cbkFjY2Vzc2liaWxpdHlNYW5hZ2VyLnByb3RvdHlwZS5hZGRDaGlsZCA9IGZ1bmN0aW9uKGRpc3BsYXlPYmplY3QpXG57XG4vL1x0dGhpcy5hY3RpdmF0ZSgpO1xuXHRcblx0dmFyIGRpdiA9IHRoaXMucG9vbC5wb3AoKTtcblxuXHRpZighZGl2KVxuXHR7XG5cdFx0ZGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYnV0dG9uJyk7IFxuXG5cdCAgICBkaXYuc3R5bGUud2lkdGggPSAxMDAgKyAncHgnO1xuXHQgICAgZGl2LnN0eWxlLmhlaWdodCA9IDEwMCArICdweCc7XG5cdCAgICBkaXYuc3R5bGUuYmFja2dyb3VuZENvbG9yID0gdGhpcy5kZWJ1ZyA/ICdyZ2JhKDI1NSwwLDAsMC41KScgOiAndHJhbnNwYXJlbnQnO1xuXHQgICAgZGl2LnN0eWxlLnBvc2l0aW9uID0gJ2Fic29sdXRlJztcblx0ICAgIGRpdi5zdHlsZS56SW5kZXggPSAyO1xuXHQgICAgZGl2LnN0eWxlLmJvcmRlclN0eWxlID0gJ25vbmUnO1xuXG5cdCAgICBcblx0ICAgIGRpdi5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIHRoaXMuX29uQ2xpY2suYmluZCh0aGlzKSk7XG5cdCAgICBkaXYuYWRkRXZlbnRMaXN0ZW5lcignZm9jdXMnLCB0aGlzLl9vbkZvY3VzLmJpbmQodGhpcykpO1xuXHQgICAgZGl2LmFkZEV2ZW50TGlzdGVuZXIoJ2ZvY3Vzb3V0JywgdGhpcy5fb25Gb2N1c091dC5iaW5kKHRoaXMpKTtcblx0fVxuXHQgICBcdFxuXG5cblxuXHRkaXYudGl0bGUgPSBkaXNwbGF5T2JqZWN0LmFjY2Vzc2libGVUaXRsZSB8fCAnZGlzcGxheU9iamVjdCAnICsgdGhpcy50YWJJbmRleDtcblxuXHQvL1xuXHRcblx0ZGlzcGxheU9iamVjdC5fYWNjZXNzaWJsZUFjdGl2ZSA9IHRydWU7XG5cdGRpc3BsYXlPYmplY3QuX2FjY2Vzc2libGVEaXYgPSBkaXY7XG5cdGRpdi5kaXNwbGF5T2JqZWN0ID0gZGlzcGxheU9iamVjdDtcblxuXG5cdHRoaXMuY2hpbGRyZW4ucHVzaChkaXNwbGF5T2JqZWN0KTtcblx0dGhpcy5kaXYuYXBwZW5kQ2hpbGQoIGRpc3BsYXlPYmplY3QuX2FjY2Vzc2libGVEaXYgKTtcblx0ZGlzcGxheU9iamVjdC5fYWNjZXNzaWJsZURpdi50YWJJbmRleCA9IGRpc3BsYXlPYmplY3QudGFiSW5kZXg7XG59O1xuXG5cbi8qKlxuICogTWFwcyB0aGUgZGl2IGJ1dHRvbiBwcmVzcyB0byBwaXhpJ3MgSW50ZXJhY3Rpb25NYW5hZ2VyIChjbGljaylcbiAqIEBwcml2YXRlXG4gKi9cbkFjY2Vzc2liaWxpdHlNYW5hZ2VyLnByb3RvdHlwZS5fb25DbGljayA9IGZ1bmN0aW9uKGUpXG57XG5cdHZhciBpbnRlcmFjdGlvbk1hbmFnZXIgPSB0aGlzLnJlbmRlcmVyLnBsdWdpbnMuaW50ZXJhY3Rpb247XG5cdGludGVyYWN0aW9uTWFuYWdlci5kaXNwYXRjaEV2ZW50KGUudGFyZ2V0LmRpc3BsYXlPYmplY3QsICdjbGljaycsIGludGVyYWN0aW9uTWFuYWdlci5ldmVudERhdGEpO1xufTtcblxuLyoqXG4gKiBNYXBzIHRoZSBkaXYgZm9jdXMgZXZlbnRzIHRvIHBpeGlzIEludGVyYWN0aW9uTWFuYWdlciAobW91c2VvdmVyKVxuICogQHByaXZhdGVcbiAqL1xuQWNjZXNzaWJpbGl0eU1hbmFnZXIucHJvdG90eXBlLl9vbkZvY3VzID0gZnVuY3Rpb24oZSlcbntcblx0dmFyIGludGVyYWN0aW9uTWFuYWdlciA9IHRoaXMucmVuZGVyZXIucGx1Z2lucy5pbnRlcmFjdGlvbjtcblx0aW50ZXJhY3Rpb25NYW5hZ2VyLmRpc3BhdGNoRXZlbnQoZS50YXJnZXQuZGlzcGxheU9iamVjdCwgJ21vdXNlb3ZlcicsIGludGVyYWN0aW9uTWFuYWdlci5ldmVudERhdGEpO1xufTtcblxuLyoqXG4gKiBNYXBzIHRoZSBkaXYgZm9jdXMgZXZlbnRzIHRvIHBpeGlzIEludGVyYWN0aW9uTWFuYWdlciAobW91c2VvdXQpXG4gKiBAcHJpdmF0ZVxuICovXG5BY2Nlc3NpYmlsaXR5TWFuYWdlci5wcm90b3R5cGUuX29uRm9jdXNPdXQgPSBmdW5jdGlvbihlKVxue1xuXHR2YXIgaW50ZXJhY3Rpb25NYW5hZ2VyID0gdGhpcy5yZW5kZXJlci5wbHVnaW5zLmludGVyYWN0aW9uO1xuXHRpbnRlcmFjdGlvbk1hbmFnZXIuZGlzcGF0Y2hFdmVudChlLnRhcmdldC5kaXNwbGF5T2JqZWN0LCAnbW91c2VvdXQnLCBpbnRlcmFjdGlvbk1hbmFnZXIuZXZlbnREYXRhKTtcbn07XG5cbi8qKlxuICogSXMgY2FsbGVkIHdoZW4gYSBrZXkgaXMgcHJlc3NlZFxuICpcbiAqIEBwcml2YXRlXG4gKi9cbkFjY2Vzc2liaWxpdHlNYW5hZ2VyLnByb3RvdHlwZS5fb25LZXlEb3duID0gZnVuY3Rpb24oZSlcbntcblx0aWYoZS5rZXlDb2RlICE9PSA5KVxuXHR7XG5cdFx0cmV0dXJuO1xuXHR9XG5cblx0dGhpcy5hY3RpdmF0ZSgpO1xufTtcblxuLyoqXG4gKiBJcyBjYWxsZWQgd2hlbiB0aGUgbW91c2UgbW92ZXMgYWNyb3NzIHRoZSByZW5kZXJlciBlbGVtZW50XG4gKlxuICogQHByaXZhdGVcbiAqL1xuQWNjZXNzaWJpbGl0eU1hbmFnZXIucHJvdG90eXBlLl9vbk1vdXNlTW92ZSA9IGZ1bmN0aW9uKClcbntcblx0dGhpcy5kZWFjdGl2YXRlKCk7XG59O1xuXG5cbi8qKlxuICogRGVzdHJveXMgdGhlIGFjY2Vzc2liaWxpdHkgbWFuYWdlclxuICpcbiAqL1xuQWNjZXNzaWJpbGl0eU1hbmFnZXIucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoKSBcbntcblx0dGhpcy5kaXYgPSBudWxsO1xuXG5cdGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5jaGlsZHJlbi5sZW5ndGg7IGkrKylcblx0e1xuXHRcdHRoaXMuY2hpbGRyZW5baV0uZGl2ID0gbnVsbDtcblx0fVxuXG5cdFxuXHR3aW5kb3cuZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignbW91c2Vtb3ZlJywgdGhpcy5fb25Nb3VzZU1vdmUpO1xuXHR3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsIHRoaXMuX29uS2V5RG93bik7XG5cdFx0XG5cdHRoaXMucG9vbCA9IG51bGw7XG5cdHRoaXMuY2hpbGRyZW4gPSBudWxsO1xuXHR0aGlzLnJlbmRlcmVyID0gbnVsbDtcblxufTtcblxuY29yZS5XZWJHTFJlbmRlcmVyLnJlZ2lzdGVyUGx1Z2luKCdhY2Nlc3NpYmlsaXR5JywgQWNjZXNzaWJpbGl0eU1hbmFnZXIpO1xuY29yZS5DYW52YXNSZW5kZXJlci5yZWdpc3RlclBsdWdpbignYWNjZXNzaWJpbGl0eScsIEFjY2Vzc2liaWxpdHlNYW5hZ2VyKTtcblxuIiwiLyoqXG4gKiBEZWZhdWx0IHByb3BlcnR5IHZhbHVlcyBvZiBhY2Nlc3NpYmxlIG9iamVjdHNcbiAqIHVzZWQgYnkge0BsaW5rIFBJWEkuYWNjZXNzaWJpbGl0eS5BY2Nlc3NpYmlsaXR5TWFuYWdlcn0uXG4gKlxuICogQG1peGluXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQGV4YW1wbGVcbiAqICAgICAgZnVuY3Rpb24gTXlPYmplY3QoKSB7fVxuICpcbiAqICAgICAgT2JqZWN0LmFzc2lnbihcbiAqICAgICAgICAgIE15T2JqZWN0LnByb3RvdHlwZSxcbiAqICAgICAgICAgIFBJWEkuYWNjZXNzaWJpbGl0eS5hY2Nlc3NpYmxlVGFyZ2V0XG4gKiAgICAgICk7XG4gKi9cbnZhciBhY2Nlc3NpYmxlVGFyZ2V0ID0ge1xuICAgIFxuICAgIC8qKlxuICAgICAqIEB0b2RvIE5lZWRzIGRvY3MuXG4gICAgICovXG4gICAgYWNjZXNzaWJsZTpmYWxzZSxcblxuICAgIC8qKlxuICAgICAqIEB0b2RvIE5lZWRzIGRvY3MuXG4gICAgICovXG4gICAgYWNjZXNzaWJsZVRpdGxlOm51bGwsXG5cbiAgICAvKipcbiAgICAgKiBAdG9kbyBOZWVkcyBkb2NzLlxuICAgICAqL1xuICAgIHRhYkluZGV4OjAsXG5cbiAgICAvKipcbiAgICAgKiBAdG9kbyBOZWVkcyBkb2NzLlxuICAgICAqL1xuICAgIF9hY2Nlc3NpYmxlQWN0aXZlOmZhbHNlLFxuXG4gICAgLyoqXG4gICAgICogQHRvZG8gTmVlZHMgZG9jcy5cbiAgICAgKi9cbiAgICBfYWNjZXNzaWJsZURpdjpmYWxzZVxuXG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGFjY2Vzc2libGVUYXJnZXQ7XG4iLCIvKipcbiAqIEBmaWxlICAgICAgICBNYWluIGV4cG9ydCBvZiB0aGUgUElYSSBhY2Nlc3NpYmlsaXR5IGxpYnJhcnlcbiAqIEBhdXRob3IgICAgICBNYXQgR3JvdmVzIDxtYXRAZ29vZGJveWRpZ2l0YWwuY29tPlxuICogQGNvcHlyaWdodCAgIDIwMTMtMjAxNSBHb29kQm95RGlnaXRhbFxuICogQGxpY2Vuc2UgICAgIHtAbGluayBodHRwczovL2dpdGh1Yi5jb20vcGl4aWpzL3BpeGkuanMvYmxvYi9tYXN0ZXIvTElDRU5TRXxNSVQgTGljZW5zZX1cbiAqL1xuXG4vKipcbiAqIEBuYW1lc3BhY2UgUElYSS5pbnRlcmFjdGlvblxuICovXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgICBhY2Nlc3NpYmxlVGFyZ2V0OiAgICAgcmVxdWlyZSgnLi9hY2Nlc3NpYmxlVGFyZ2V0JyksXG4gICAgQWNjZXNzaWJpbGl0eU1hbmFnZXI6IHJlcXVpcmUoJy4vQWNjZXNzaWJpbGl0eU1hbmFnZXInKVxufTtcbiIsIi8qKlxuICogQ29uc3RhbnQgdmFsdWVzIHVzZWQgaW4gcGl4aVxuICpcbiAqIEBsZW5kcyBQSVhJXG4gKi9cbnZhciBDT05TVCA9IHtcbiAgICAvKipcbiAgICAgKiBTdHJpbmcgb2YgdGhlIGN1cnJlbnQgUElYSSB2ZXJzaW9uXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQGNvbnN0YW50XG4gICAgICogQHByb3BlcnR5IHtzdHJpbmd9IFZFUlNJT05cbiAgICAgKi9cbiAgICBWRVJTSU9OOiByZXF1aXJlKCcuLi8uLi9wYWNrYWdlLmpzb24nKS52ZXJzaW9uLFxuXG4gICAgLyoqXG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IFBJXzIgLSBUd28gUGlcbiAgICAgKiBAY29uc3RhbnRcbiAgICAgKiBAc3RhdGljXG4gICAgICovXG4gICAgUElfMjogTWF0aC5QSSAqIDIsXG5cbiAgICAvKipcbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gUkFEX1RPX0RFRyAtIENvbnN0YW50IGNvbnZlcnNpb24gZmFjdG9yIGZvciBjb252ZXJ0aW5nIHJhZGlhbnMgdG8gZGVncmVlc1xuICAgICAqIEBjb25zdGFudFxuICAgICAqIEBzdGF0aWNcbiAgICAgKi9cbiAgICBSQURfVE9fREVHOiAxODAgLyBNYXRoLlBJLFxuXG4gICAgLyoqXG4gICAgICogQHByb3BlcnR5IHtOdW1iZXJ9IERFR19UT19SQUQgLSBDb25zdGFudCBjb252ZXJzaW9uIGZhY3RvciBmb3IgY29udmVydGluZyBkZWdyZWVzIHRvIHJhZGlhbnNcbiAgICAgKiBAY29uc3RhbnRcbiAgICAgKiBAc3RhdGljXG4gICAgICovXG4gICAgREVHX1RPX1JBRDogTWF0aC5QSSAvIDE4MCxcblxuICAgIC8qKlxuICAgICAqIFRhcmdldCBmcmFtZXMgcGVyIG1pbGxpc2Vjb25kLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBjb25zdGFudFxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBUQVJHRVRfRlBNUz0wLjA2XG4gICAgICovXG4gICAgVEFSR0VUX0ZQTVM6IDAuMDYsXG5cbiAgICAvKipcbiAgICAgKiBDb25zdGFudCB0byBpZGVudGlmeSB0aGUgUmVuZGVyZXIgVHlwZS5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAY29uc3RhbnRcbiAgICAgKiBAcHJvcGVydHkge29iamVjdH0gUkVOREVSRVJfVFlQRVxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBSRU5ERVJFUl9UWVBFLlVOS05PV05cbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gUkVOREVSRVJfVFlQRS5XRUJHTFxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBSRU5ERVJFUl9UWVBFLkNBTlZBU1xuICAgICAqL1xuICAgIFJFTkRFUkVSX1RZUEU6IHtcbiAgICAgICAgVU5LTk9XTjogICAgMCxcbiAgICAgICAgV0VCR0w6ICAgICAgMSxcbiAgICAgICAgQ0FOVkFTOiAgICAgMlxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBWYXJpb3VzIGJsZW5kIG1vZGVzIHN1cHBvcnRlZCBieSBQSVhJLiBJTVBPUlRBTlQgLSBUaGUgV2ViR0wgcmVuZGVyZXIgb25seSBzdXBwb3J0c1xuICAgICAqIHRoZSBOT1JNQUwsIEFERCwgTVVMVElQTFkgYW5kIFNDUkVFTiBibGVuZCBtb2Rlcy4gQW55dGhpbmcgZWxzZSB3aWxsIHNpbGVudGx5IGFjdCBsaWtlXG4gICAgICogTk9STUFMLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBjb25zdGFudFxuICAgICAqIEBwcm9wZXJ0eSB7b2JqZWN0fSBCTEVORF9NT0RFU1xuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBCTEVORF9NT0RFUy5OT1JNQUxcbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gQkxFTkRfTU9ERVMuQUREXG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IEJMRU5EX01PREVTLk1VTFRJUExZXG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IEJMRU5EX01PREVTLlNDUkVFTlxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBCTEVORF9NT0RFUy5PVkVSTEFZXG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IEJMRU5EX01PREVTLkRBUktFTlxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBCTEVORF9NT0RFUy5MSUdIVEVOXG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IEJMRU5EX01PREVTLkNPTE9SX0RPREdFXG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IEJMRU5EX01PREVTLkNPTE9SX0JVUk5cbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gQkxFTkRfTU9ERVMuSEFSRF9MSUdIVFxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBCTEVORF9NT0RFUy5TT0ZUX0xJR0hUXG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IEJMRU5EX01PREVTLkRJRkZFUkVOQ0VcbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gQkxFTkRfTU9ERVMuRVhDTFVTSU9OXG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IEJMRU5EX01PREVTLkhVRVxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBCTEVORF9NT0RFUy5TQVRVUkFUSU9OXG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IEJMRU5EX01PREVTLkNPTE9SXG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IEJMRU5EX01PREVTLkxVTUlOT1NJVFlcbiAgICAgKi9cbiAgICBCTEVORF9NT0RFUzoge1xuICAgICAgICBOT1JNQUw6ICAgICAgICAgMCxcbiAgICAgICAgQUREOiAgICAgICAgICAgIDEsXG4gICAgICAgIE1VTFRJUExZOiAgICAgICAyLFxuICAgICAgICBTQ1JFRU46ICAgICAgICAgMyxcbiAgICAgICAgT1ZFUkxBWTogICAgICAgIDQsXG4gICAgICAgIERBUktFTjogICAgICAgICA1LFxuICAgICAgICBMSUdIVEVOOiAgICAgICAgNixcbiAgICAgICAgQ09MT1JfRE9ER0U6ICAgIDcsXG4gICAgICAgIENPTE9SX0JVUk46ICAgICA4LFxuICAgICAgICBIQVJEX0xJR0hUOiAgICAgOSxcbiAgICAgICAgU09GVF9MSUdIVDogICAgIDEwLFxuICAgICAgICBESUZGRVJFTkNFOiAgICAgMTEsXG4gICAgICAgIEVYQ0xVU0lPTjogICAgICAxMixcbiAgICAgICAgSFVFOiAgICAgICAgICAgIDEzLFxuICAgICAgICBTQVRVUkFUSU9OOiAgICAgMTQsXG4gICAgICAgIENPTE9SOiAgICAgICAgICAxNSxcbiAgICAgICAgTFVNSU5PU0lUWTogICAgIDE2XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFZhcmlvdXMgd2ViZ2wgZHJhdyBtb2Rlcy4gVGhlc2UgY2FuIGJlIHVzZWQgdG8gc3BlY2lmeSB3aGljaCBHTCBkcmF3TW9kZSB0byB1c2VcbiAgICAgKiB1bmRlciBjZXJ0YWluIHNpdHVhdGlvbnMgYW5kIHJlbmRlcmVycy5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAY29uc3RhbnRcbiAgICAgKiBAcHJvcGVydHkge29iamVjdH0gRFJBV19NT0RFU1xuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBEUkFXX01PREVTLlBPSU5UU1xuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBEUkFXX01PREVTLkxJTkVTXG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IERSQVdfTU9ERVMuTElORV9MT09QXG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IERSQVdfTU9ERVMuTElORV9TVFJJUFxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBEUkFXX01PREVTLlRSSUFOR0xFU1xuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBEUkFXX01PREVTLlRSSUFOR0xFX1NUUklQXG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IERSQVdfTU9ERVMuVFJJQU5HTEVfRkFOXG4gICAgICovXG4gICAgRFJBV19NT0RFUzoge1xuICAgICAgICBQT0lOVFM6ICAgICAgICAgMCxcbiAgICAgICAgTElORVM6ICAgICAgICAgIDEsXG4gICAgICAgIExJTkVfTE9PUDogICAgICAyLFxuICAgICAgICBMSU5FX1NUUklQOiAgICAgMyxcbiAgICAgICAgVFJJQU5HTEVTOiAgICAgIDQsXG4gICAgICAgIFRSSUFOR0xFX1NUUklQOiA1LFxuICAgICAgICBUUklBTkdMRV9GQU46ICAgNlxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBUaGUgc2NhbGUgbW9kZXMgdGhhdCBhcmUgc3VwcG9ydGVkIGJ5IHBpeGkuXG4gICAgICpcbiAgICAgKiBUaGUgREVGQVVMVCBzY2FsZSBtb2RlIGFmZmVjdHMgdGhlIGRlZmF1bHQgc2NhbGluZyBtb2RlIG9mIGZ1dHVyZSBvcGVyYXRpb25zLlxuICAgICAqIEl0IGNhbiBiZSByZS1hc3NpZ25lZCB0byBlaXRoZXIgTElORUFSIG9yIE5FQVJFU1QsIGRlcGVuZGluZyB1cG9uIHN1aXRhYmlsaXR5LlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBjb25zdGFudFxuICAgICAqIEBwcm9wZXJ0eSB7b2JqZWN0fSBTQ0FMRV9NT0RFU1xuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBTQ0FMRV9NT0RFUy5ERUZBVUxUPUxJTkVBUlxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBTQ0FMRV9NT0RFUy5MSU5FQVIgU21vb3RoIHNjYWxpbmdcbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gU0NBTEVfTU9ERVMuTkVBUkVTVCBQaXhlbGF0aW5nIHNjYWxpbmdcbiAgICAgKi9cbiAgICBTQ0FMRV9NT0RFUzoge1xuICAgICAgICBERUZBVUxUOiAgICAwLFxuICAgICAgICBMSU5FQVI6ICAgICAwLFxuICAgICAgICBORUFSRVNUOiAgICAxXG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFRoZSBwcmVmaXggdGhhdCBkZW5vdGVzIGEgVVJMIGlzIGZvciBhIHJldGluYSBhc3NldFxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBjb25zdGFudFxuICAgICAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBSRVRJTkFfUFJFRklYXG4gICAgICovXG4gICAgLy9leGFtcGxlOiAnQDJ4JyxcbiAgICBSRVRJTkFfUFJFRklYOiAvQCguKyl4LyxcblxuICAgIFJFU09MVVRJT046MSxcblxuICAgIEZJTFRFUl9SRVNPTFVUSU9OOjEsXG5cbiAgICAvKipcbiAgICAgKiBUaGUgZGVmYXVsdCByZW5kZXIgb3B0aW9ucyBpZiBub25lIGFyZSBzdXBwbGllZCB0byB7QGxpbmsgUElYSS5XZWJHTFJlbmRlcmVyfVxuICAgICAqIG9yIHtAbGluayBQSVhJLkNhbnZhc1JlbmRlcmVyfS5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAY29uc3RhbnRcbiAgICAgKiBAcHJvcGVydHkge29iamVjdH0gREVGQVVMVF9SRU5ERVJfT1BUSU9OU1xuICAgICAqIEBwcm9wZXJ0eSB7SFRNTENhbnZhc0VsZW1lbnR9IERFRkFVTFRfUkVOREVSX09QVElPTlMudmlldz1udWxsXG4gICAgICogQHByb3BlcnR5IHtib29sZWFufSBERUZBVUxUX1JFTkRFUl9PUFRJT05TLnRyYW5zcGFyZW50PWZhbHNlXG4gICAgICogQHByb3BlcnR5IHtib29sZWFufSBERUZBVUxUX1JFTkRFUl9PUFRJT05TLmFudGlhbGlhcz1mYWxzZVxuICAgICAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gREVGQVVMVF9SRU5ERVJfT1BUSU9OUy5mb3JjZUZYQUE9ZmFsc2VcbiAgICAgKiBAcHJvcGVydHkge2Jvb2xlYW59IERFRkFVTFRfUkVOREVSX09QVElPTlMucHJlc2VydmVEcmF3aW5nQnVmZmVyPWZhbHNlXG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IERFRkFVTFRfUkVOREVSX09QVElPTlMucmVzb2x1dGlvbj0xXG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IERFRkFVTFRfUkVOREVSX09QVElPTlMuYmFja2dyb3VuZENvbG9yPTB4MDAwMDAwXG4gICAgICogQHByb3BlcnR5IHtib29sZWFufSBERUZBVUxUX1JFTkRFUl9PUFRJT05TLmNsZWFyQmVmb3JlUmVuZGVyPXRydWVcbiAgICAgKiBAcHJvcGVydHkge2Jvb2xlYW59IERFRkFVTFRfUkVOREVSX09QVElPTlMuYXV0b1Jlc2l6ZT1mYWxzZVxuICAgICAqL1xuICAgIERFRkFVTFRfUkVOREVSX09QVElPTlM6IHtcbiAgICAgICAgdmlldzogbnVsbCxcbiAgICAgICAgcmVzb2x1dGlvbjogMSxcbiAgICAgICAgYW50aWFsaWFzOiBmYWxzZSxcbiAgICAgICAgZm9yY2VGWEFBOiBmYWxzZSxcbiAgICAgICAgYXV0b1Jlc2l6ZTogZmFsc2UsXG4gICAgICAgIHRyYW5zcGFyZW50OiBmYWxzZSxcbiAgICAgICAgYmFja2dyb3VuZENvbG9yOiAweDAwMDAwMCxcbiAgICAgICAgY2xlYXJCZWZvcmVSZW5kZXI6IHRydWUsXG4gICAgICAgIHByZXNlcnZlRHJhd2luZ0J1ZmZlcjogZmFsc2UsXG4gICAgICAgIHJvdW5kUGl4ZWxzOiBmYWxzZVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBDb25zdGFudHMgdGhhdCBpZGVudGlmeSBzaGFwZXMsIG1haW5seSB0byBwcmV2ZW50IGBpbnN0YW5jZW9mYCBjYWxscy5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAY29uc3RhbnRcbiAgICAgKiBAcHJvcGVydHkge29iamVjdH0gU0hBUEVTXG4gICAgICogQHByb3BlcnR5IHtvYmplY3R9IFNIQVBFUy5QT0xZPTBcbiAgICAgKiBAcHJvcGVydHkge29iamVjdH0gU0hBUEVTLlJFQ1Q9MVxuICAgICAqIEBwcm9wZXJ0eSB7b2JqZWN0fSBTSEFQRVMuQ0lSQz0yXG4gICAgICogQHByb3BlcnR5IHtvYmplY3R9IFNIQVBFUy5FTElQPTNcbiAgICAgKiBAcHJvcGVydHkge29iamVjdH0gU0hBUEVTLlJSRUM9NFxuICAgICAqL1xuICAgIFNIQVBFUzoge1xuICAgICAgICBQT0xZOiAwLFxuICAgICAgICBSRUNUOiAxLFxuICAgICAgICBDSVJDOiAyLFxuICAgICAgICBFTElQOiAzLFxuICAgICAgICBSUkVDOiA0XG4gICAgfSxcblxuICAgIC8vIFRPRE86IG1heWJlIGNoYW5nZSB0byBTUFJJVEUuQkFUQ0hfU0laRTogMjAwMFxuICAgIC8vIFRPRE86IG1heWJlIGFkZCBQQVJUSUNMRS5CQVRDSF9TSVpFOiAxNTAwMFxuICAgIFNQUklURV9CQVRDSF9TSVpFOiAyMDAwIC8vbmljZSBiYWxhbmNlIGJldHdlZW4gbW9iaWxlIGFuZCBkZXNrdG9wIG1hY2hpbmVzXG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IENPTlNUO1xuIiwidmFyIG1hdGggPSByZXF1aXJlKCcuLi9tYXRoJyksXG4gICAgdXRpbHMgPSByZXF1aXJlKCcuLi91dGlscycpLFxuICAgIERpc3BsYXlPYmplY3QgPSByZXF1aXJlKCcuL0Rpc3BsYXlPYmplY3QnKSxcbiAgICBSZW5kZXJUZXh0dXJlID0gcmVxdWlyZSgnLi4vdGV4dHVyZXMvUmVuZGVyVGV4dHVyZScpLFxuICAgIF90ZW1wTWF0cml4ID0gbmV3IG1hdGguTWF0cml4KCk7XG5cbi8qKlxuICogQSBDb250YWluZXIgcmVwcmVzZW50cyBhIGNvbGxlY3Rpb24gb2YgZGlzcGxheSBvYmplY3RzLlxuICogSXQgaXMgdGhlIGJhc2UgY2xhc3Mgb2YgYWxsIGRpc3BsYXkgb2JqZWN0cyB0aGF0IGFjdCBhcyBhIGNvbnRhaW5lciBmb3Igb3RoZXIgb2JqZWN0cy5cbiAqXG4gKmBgYGpzXG4gKiB2YXIgY29udGFpbmVyID0gbmV3IFBJWEkuQ29udGFpbmVyKCk7XG4gKiBjb250YWluZXIuYWRkQ2hpbGQoc3ByaXRlKTtcbiAqIGBgYFxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLkRpc3BsYXlPYmplY3RcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKi9cbmZ1bmN0aW9uIENvbnRhaW5lcigpXG57XG4gICAgRGlzcGxheU9iamVjdC5jYWxsKHRoaXMpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGFycmF5IG9mIGNoaWxkcmVuIG9mIHRoaXMgY29udGFpbmVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5EaXNwbGF5T2JqZWN0W119XG4gICAgICogQHJlYWRvbmx5XG4gICAgICovXG4gICAgdGhpcy5jaGlsZHJlbiA9IFtdO1xufVxuXG4vLyBjb25zdHJ1Y3RvclxuQ29udGFpbmVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoRGlzcGxheU9iamVjdC5wcm90b3R5cGUpO1xuQ29udGFpbmVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IENvbnRhaW5lcjtcbm1vZHVsZS5leHBvcnRzID0gQ29udGFpbmVyO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhDb250YWluZXIucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogVGhlIHdpZHRoIG9mIHRoZSBDb250YWluZXIsIHNldHRpbmcgdGhpcyB3aWxsIGFjdHVhbGx5IG1vZGlmeSB0aGUgc2NhbGUgdG8gYWNoaWV2ZSB0aGUgdmFsdWUgc2V0XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuQ29udGFpbmVyI1xuICAgICAqL1xuICAgIHdpZHRoOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuc2NhbGUueCAqIHRoaXMuZ2V0TG9jYWxCb3VuZHMoKS53aWR0aDtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcblxuICAgICAgICAgICAgdmFyIHdpZHRoID0gdGhpcy5nZXRMb2NhbEJvdW5kcygpLndpZHRoO1xuXG4gICAgICAgICAgICBpZiAod2lkdGggIT09IDApXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdGhpcy5zY2FsZS54ID0gdmFsdWUgLyB3aWR0aDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNjYWxlLnggPSAxO1xuICAgICAgICAgICAgfVxuXG5cbiAgICAgICAgICAgIHRoaXMuX3dpZHRoID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVGhlIGhlaWdodCBvZiB0aGUgQ29udGFpbmVyLCBzZXR0aW5nIHRoaXMgd2lsbCBhY3R1YWxseSBtb2RpZnkgdGhlIHNjYWxlIHRvIGFjaGlldmUgdGhlIHZhbHVlIHNldFxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLkNvbnRhaW5lciNcbiAgICAgKi9cbiAgICBoZWlnaHQ6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gIHRoaXMuc2NhbGUueSAqIHRoaXMuZ2V0TG9jYWxCb3VuZHMoKS5oZWlnaHQ7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG5cbiAgICAgICAgICAgIHZhciBoZWlnaHQgPSB0aGlzLmdldExvY2FsQm91bmRzKCkuaGVpZ2h0O1xuXG4gICAgICAgICAgICBpZiAoaGVpZ2h0ICE9PSAwKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHRoaXMuc2NhbGUueSA9IHZhbHVlIC8gaGVpZ2h0IDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNjYWxlLnkgPSAxO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLl9oZWlnaHQgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuXG4vKipcbiAqIE92ZXJyaWRhYmxlIG1ldGhvZCB0aGF0IGNhbiBiZSB1c2VkIGJ5IENvbnRhaW5lciBzdWJjbGFzc2VzIHdoZW5ldmVyIHRoZSBjaGlsZHJlbiBhcnJheSBpcyBtb2RpZmllZFxuICpcbiAqIEBwcml2YXRlXG4gKi9cbkNvbnRhaW5lci5wcm90b3R5cGUub25DaGlsZHJlbkNoYW5nZSA9IGZ1bmN0aW9uICgpIHt9O1xuXG4vKipcbiAqIEFkZHMgYSBjaGlsZCB0byB0aGUgY29udGFpbmVyLlxuICogXG4gKiBZb3UgY2FuIGFsc28gYWRkIG11bHRwbGUgaXRlbXMgbGlrZSBzbzogbXlDb250YWluZXIuYWRkQ2hpbGQodGhpbmtPbmUsIHRoaW5nVHdvLCB0aGluZ1RocmVlKVxuICogQHBhcmFtIGNoaWxkIHtQSVhJLkRpc3BsYXlPYmplY3R9IFRoZSBEaXNwbGF5T2JqZWN0IHRvIGFkZCB0byB0aGUgY29udGFpbmVyXG4gKiBAcmV0dXJuIHtQSVhJLkRpc3BsYXlPYmplY3R9IFRoZSBjaGlsZCB0aGF0IHdhcyBhZGRlZC5cbiAqL1xuQ29udGFpbmVyLnByb3RvdHlwZS5hZGRDaGlsZCA9IGZ1bmN0aW9uIChjaGlsZClcbnsgXG4gICAgdmFyIGFyZ3VtZW50c0xlbmd0aCA9IGFyZ3VtZW50cy5sZW5ndGg7XG5cbiAgICAvLyBpZiB0aGVyZSBpcyBvbmx5IG9uZSBhcmd1bWVudCB3ZSBjYW4gYnlwYXNzIGxvb3BpbmcgdGhyb3VnaCB0aGUgdGhlbVxuICAgIGlmKGFyZ3VtZW50c0xlbmd0aCA+IDEpXG4gICAge1xuICAgICAgICAvLyBsb29wIHRocm91Z2ggdGhlIGFyZ3VtZW50cyBwcm9wZXJ0eSBhbmQgYWRkIGFsbCBjaGlsZHJlblxuICAgICAgICAvLyB1c2UgaXQgdGhlIHJpZ2h0IHdheSAoLmxlbmd0aCBhbmQgW2ldKSBzbyB0aGF0IHRoaXMgZnVuY3Rpb24gY2FuIHN0aWxsIGJlIG9wdGltaXNlZCBieSBKUyBydW50aW1lc1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFyZ3VtZW50c0xlbmd0aDsgaSsrKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmFkZENoaWxkKCBhcmd1bWVudHNbaV0gKTtcbiAgICAgICAgfVxuICAgIH0gICAgIFxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIC8vIGlmIHRoZSBjaGlsZCBoYXMgYSBwYXJlbnQgdGhlbiBsZXRzIHJlbW92ZSBpdCBhcyBQaXhpIG9iamVjdHMgY2FuIG9ubHkgZXhpc3QgaW4gb25lIHBsYWNlXG4gICAgICAgIGlmIChjaGlsZC5wYXJlbnQpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNoaWxkLnBhcmVudC5yZW1vdmVDaGlsZChjaGlsZCk7XG4gICAgICAgIH1cblxuICAgICAgICBjaGlsZC5wYXJlbnQgPSB0aGlzO1xuICAgICAgICBcbiAgICAgICAgdGhpcy5jaGlsZHJlbi5wdXNoKGNoaWxkKTtcblxuICAgICAgICAvLyBUT0RPIC0gbGV0cyBlaXRoZXIgZG8gYWxsIGNhbGxiYWNrcyBvciBhbGwgZXZlbnRzLi4gbm90IGJvdGghXG4gICAgICAgIHRoaXMub25DaGlsZHJlbkNoYW5nZSh0aGlzLmNoaWxkcmVuLmxlbmd0aC0xKTtcbiAgICAgICAgY2hpbGQuZW1pdCgnYWRkZWQnLCB0aGlzKTtcbiAgICB9XG5cbiAgICByZXR1cm4gY2hpbGQ7XG59O1xuXG4vKipcbiAqIEFkZHMgYSBjaGlsZCB0byB0aGUgY29udGFpbmVyIGF0IGEgc3BlY2lmaWVkIGluZGV4LiBJZiB0aGUgaW5kZXggaXMgb3V0IG9mIGJvdW5kcyBhbiBlcnJvciB3aWxsIGJlIHRocm93blxuICpcbiAqIEBwYXJhbSBjaGlsZCB7UElYSS5EaXNwbGF5T2JqZWN0fSBUaGUgY2hpbGQgdG8gYWRkXG4gKiBAcGFyYW0gaW5kZXgge251bWJlcn0gVGhlIGluZGV4IHRvIHBsYWNlIHRoZSBjaGlsZCBpblxuICogQHJldHVybiB7UElYSS5EaXNwbGF5T2JqZWN0fSBUaGUgY2hpbGQgdGhhdCB3YXMgYWRkZWQuXG4gKi9cbkNvbnRhaW5lci5wcm90b3R5cGUuYWRkQ2hpbGRBdCA9IGZ1bmN0aW9uIChjaGlsZCwgaW5kZXgpXG57XG4gICAgaWYgKGluZGV4ID49IDAgJiYgaW5kZXggPD0gdGhpcy5jaGlsZHJlbi5sZW5ndGgpXG4gICAge1xuICAgICAgICBpZiAoY2hpbGQucGFyZW50KVxuICAgICAgICB7XG4gICAgICAgICAgICBjaGlsZC5wYXJlbnQucmVtb3ZlQ2hpbGQoY2hpbGQpO1xuICAgICAgICB9XG5cbiAgICAgICAgY2hpbGQucGFyZW50ID0gdGhpcztcblxuICAgICAgICB0aGlzLmNoaWxkcmVuLnNwbGljZShpbmRleCwgMCwgY2hpbGQpO1xuXG4gICAgICAgIC8vIFRPRE8gLSBsZXRzIGVpdGhlciBkbyBhbGwgY2FsbGJhY2tzIG9yIGFsbCBldmVudHMuLiBub3QgYm90aCFcbiAgICAgICAgdGhpcy5vbkNoaWxkcmVuQ2hhbmdlKGluZGV4KTtcbiAgICAgICAgY2hpbGQuZW1pdCgnYWRkZWQnLCB0aGlzKTtcblxuICAgICAgICByZXR1cm4gY2hpbGQ7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihjaGlsZCArICdhZGRDaGlsZEF0OiBUaGUgaW5kZXggJysgaW5kZXggKycgc3VwcGxpZWQgaXMgb3V0IG9mIGJvdW5kcyAnICsgdGhpcy5jaGlsZHJlbi5sZW5ndGgpO1xuICAgIH1cbn07XG5cbi8qKlxuICogU3dhcHMgdGhlIHBvc2l0aW9uIG9mIDIgRGlzcGxheSBPYmplY3RzIHdpdGhpbiB0aGlzIGNvbnRhaW5lci5cbiAqXG4gKiBAcGFyYW0gY2hpbGQge1BJWEkuRGlzcGxheU9iamVjdH1cbiAqIEBwYXJhbSBjaGlsZDIge1BJWEkuRGlzcGxheU9iamVjdH1cbiAqL1xuQ29udGFpbmVyLnByb3RvdHlwZS5zd2FwQ2hpbGRyZW4gPSBmdW5jdGlvbiAoY2hpbGQsIGNoaWxkMilcbntcbiAgICBpZiAoY2hpbGQgPT09IGNoaWxkMilcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB2YXIgaW5kZXgxID0gdGhpcy5nZXRDaGlsZEluZGV4KGNoaWxkKTtcbiAgICB2YXIgaW5kZXgyID0gdGhpcy5nZXRDaGlsZEluZGV4KGNoaWxkMik7XG5cbiAgICBpZiAoaW5kZXgxIDwgMCB8fCBpbmRleDIgPCAwKVxuICAgIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdzd2FwQ2hpbGRyZW46IEJvdGggdGhlIHN1cHBsaWVkIERpc3BsYXlPYmplY3RzIG11c3QgYmUgY2hpbGRyZW4gb2YgdGhlIGNhbGxlci4nKTtcbiAgICB9XG5cbiAgICB0aGlzLmNoaWxkcmVuW2luZGV4MV0gPSBjaGlsZDI7XG4gICAgdGhpcy5jaGlsZHJlbltpbmRleDJdID0gY2hpbGQ7XG4gICAgdGhpcy5vbkNoaWxkcmVuQ2hhbmdlKGluZGV4MSA8IGluZGV4MiA/IGluZGV4MSA6IGluZGV4Mik7XG59O1xuXG4vKipcbiAqIFJldHVybnMgdGhlIGluZGV4IHBvc2l0aW9uIG9mIGEgY2hpbGQgRGlzcGxheU9iamVjdCBpbnN0YW5jZVxuICpcbiAqIEBwYXJhbSBjaGlsZCB7UElYSS5EaXNwbGF5T2JqZWN0fSBUaGUgRGlzcGxheU9iamVjdCBpbnN0YW5jZSB0byBpZGVudGlmeVxuICogQHJldHVybiB7bnVtYmVyfSBUaGUgaW5kZXggcG9zaXRpb24gb2YgdGhlIGNoaWxkIGRpc3BsYXkgb2JqZWN0IHRvIGlkZW50aWZ5XG4gKi9cbkNvbnRhaW5lci5wcm90b3R5cGUuZ2V0Q2hpbGRJbmRleCA9IGZ1bmN0aW9uIChjaGlsZClcbntcbiAgICB2YXIgaW5kZXggPSB0aGlzLmNoaWxkcmVuLmluZGV4T2YoY2hpbGQpO1xuXG4gICAgaWYgKGluZGV4ID09PSAtMSlcbiAgICB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignVGhlIHN1cHBsaWVkIERpc3BsYXlPYmplY3QgbXVzdCBiZSBhIGNoaWxkIG9mIHRoZSBjYWxsZXInKTtcbiAgICB9XG5cbiAgICByZXR1cm4gaW5kZXg7XG59O1xuXG4vKipcbiAqIENoYW5nZXMgdGhlIHBvc2l0aW9uIG9mIGFuIGV4aXN0aW5nIGNoaWxkIGluIHRoZSBkaXNwbGF5IG9iamVjdCBjb250YWluZXJcbiAqXG4gKiBAcGFyYW0gY2hpbGQge1BJWEkuRGlzcGxheU9iamVjdH0gVGhlIGNoaWxkIERpc3BsYXlPYmplY3QgaW5zdGFuY2UgZm9yIHdoaWNoIHlvdSB3YW50IHRvIGNoYW5nZSB0aGUgaW5kZXggbnVtYmVyXG4gKiBAcGFyYW0gaW5kZXgge251bWJlcn0gVGhlIHJlc3VsdGluZyBpbmRleCBudW1iZXIgZm9yIHRoZSBjaGlsZCBkaXNwbGF5IG9iamVjdFxuICovXG5Db250YWluZXIucHJvdG90eXBlLnNldENoaWxkSW5kZXggPSBmdW5jdGlvbiAoY2hpbGQsIGluZGV4KVxue1xuICAgIGlmIChpbmRleCA8IDAgfHwgaW5kZXggPj0gdGhpcy5jaGlsZHJlbi5sZW5ndGgpXG4gICAge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RoZSBzdXBwbGllZCBpbmRleCBpcyBvdXQgb2YgYm91bmRzJyk7XG4gICAgfVxuXG4gICAgdmFyIGN1cnJlbnRJbmRleCA9IHRoaXMuZ2V0Q2hpbGRJbmRleChjaGlsZCk7XG5cbiAgICB1dGlscy5yZW1vdmVJdGVtcyh0aGlzLmNoaWxkcmVuLCBjdXJyZW50SW5kZXgsIDEpOyAvLyByZW1vdmUgZnJvbSBvbGQgcG9zaXRpb25cbiAgICB0aGlzLmNoaWxkcmVuLnNwbGljZShpbmRleCwgMCwgY2hpbGQpOyAvL2FkZCBhdCBuZXcgcG9zaXRpb25cbiAgICB0aGlzLm9uQ2hpbGRyZW5DaGFuZ2UoaW5kZXgpO1xufTtcblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBjaGlsZCBhdCB0aGUgc3BlY2lmaWVkIGluZGV4XG4gKlxuICogQHBhcmFtIGluZGV4IHtudW1iZXJ9IFRoZSBpbmRleCB0byBnZXQgdGhlIGNoaWxkIGF0XG4gKiBAcmV0dXJuIHtQSVhJLkRpc3BsYXlPYmplY3R9IFRoZSBjaGlsZCBhdCB0aGUgZ2l2ZW4gaW5kZXgsIGlmIGFueS5cbiAqL1xuQ29udGFpbmVyLnByb3RvdHlwZS5nZXRDaGlsZEF0ID0gZnVuY3Rpb24gKGluZGV4KVxue1xuICAgIGlmIChpbmRleCA8IDAgfHwgaW5kZXggPj0gdGhpcy5jaGlsZHJlbi5sZW5ndGgpXG4gICAge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2dldENoaWxkQXQ6IFN1cHBsaWVkIGluZGV4ICcgKyBpbmRleCArICcgZG9lcyBub3QgZXhpc3QgaW4gdGhlIGNoaWxkIGxpc3QsIG9yIHRoZSBzdXBwbGllZCBEaXNwbGF5T2JqZWN0IGlzIG5vdCBhIGNoaWxkIG9mIHRoZSBjYWxsZXInKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5jaGlsZHJlbltpbmRleF07XG59O1xuXG4vKipcbiAqIFJlbW92ZXMgYSBjaGlsZCBmcm9tIHRoZSBjb250YWluZXIuXG4gKlxuICogQHBhcmFtIGNoaWxkIHtQSVhJLkRpc3BsYXlPYmplY3R9IFRoZSBEaXNwbGF5T2JqZWN0IHRvIHJlbW92ZVxuICogQHJldHVybiB7UElYSS5EaXNwbGF5T2JqZWN0fSBUaGUgY2hpbGQgdGhhdCB3YXMgcmVtb3ZlZC5cbiAqL1xuQ29udGFpbmVyLnByb3RvdHlwZS5yZW1vdmVDaGlsZCA9IGZ1bmN0aW9uIChjaGlsZClcbntcbiAgICB2YXIgYXJndW1lbnRzTGVuZ3RoID0gYXJndW1lbnRzLmxlbmd0aDtcblxuICAgIC8vIGlmIHRoZXJlIGlzIG9ubHkgb25lIGFyZ3VtZW50IHdlIGNhbiBieXBhc3MgbG9vcGluZyB0aHJvdWdoIHRoZSB0aGVtXG4gICAgaWYoYXJndW1lbnRzTGVuZ3RoID4gMSlcbiAgICB7XG4gICAgICAgIC8vIGxvb3AgdGhyb3VnaCB0aGUgYXJndW1lbnRzIHByb3BlcnR5IGFuZCBhZGQgYWxsIGNoaWxkcmVuXG4gICAgICAgIC8vIHVzZSBpdCB0aGUgcmlnaHQgd2F5ICgubGVuZ3RoIGFuZCBbaV0pIHNvIHRoYXQgdGhpcyBmdW5jdGlvbiBjYW4gc3RpbGwgYmUgb3B0aW1pc2VkIGJ5IEpTIHJ1bnRpbWVzXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXJndW1lbnRzTGVuZ3RoOyBpKyspXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMucmVtb3ZlQ2hpbGQoIGFyZ3VtZW50c1tpXSApO1xuICAgICAgICB9XG4gICAgfSAgICAgXG4gICAgZWxzZVxuICAgIHsgICBcbiAgICAgICAgdmFyIGluZGV4ID0gdGhpcy5jaGlsZHJlbi5pbmRleE9mKGNoaWxkKTtcblxuICAgICAgICBpZiAoaW5kZXggPT09IC0xKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjaGlsZC5wYXJlbnQgPSBudWxsO1xuICAgICAgICB1dGlscy5yZW1vdmVJdGVtcyh0aGlzLmNoaWxkcmVuLCBpbmRleCwgMSk7XG5cbiAgICAgICAgLy8gVE9ETyAtIGxldHMgZWl0aGVyIGRvIGFsbCBjYWxsYmFja3Mgb3IgYWxsIGV2ZW50cy4uIG5vdCBib3RoIVxuICAgICAgICB0aGlzLm9uQ2hpbGRyZW5DaGFuZ2UoaW5kZXgpO1xuICAgICAgICBjaGlsZC5lbWl0KCdyZW1vdmVkJywgdGhpcyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGNoaWxkO1xufTtcblxuLyoqXG4gKiBSZW1vdmVzIGEgY2hpbGQgZnJvbSB0aGUgc3BlY2lmaWVkIGluZGV4IHBvc2l0aW9uLlxuICpcbiAqIEBwYXJhbSBpbmRleCB7bnVtYmVyfSBUaGUgaW5kZXggdG8gZ2V0IHRoZSBjaGlsZCBmcm9tXG4gKiBAcmV0dXJuIHtQSVhJLkRpc3BsYXlPYmplY3R9IFRoZSBjaGlsZCB0aGF0IHdhcyByZW1vdmVkLlxuICovXG5Db250YWluZXIucHJvdG90eXBlLnJlbW92ZUNoaWxkQXQgPSBmdW5jdGlvbiAoaW5kZXgpXG57XG4gICAgdmFyIGNoaWxkID0gdGhpcy5nZXRDaGlsZEF0KGluZGV4KTtcblxuICAgIGNoaWxkLnBhcmVudCA9IG51bGw7XG4gICAgdXRpbHMucmVtb3ZlSXRlbXModGhpcy5jaGlsZHJlbiwgaW5kZXgsIDEpO1xuXG4gICAgLy8gVE9ETyAtIGxldHMgZWl0aGVyIGRvIGFsbCBjYWxsYmFja3Mgb3IgYWxsIGV2ZW50cy4uIG5vdCBib3RoIVxuICAgIHRoaXMub25DaGlsZHJlbkNoYW5nZShpbmRleCk7XG4gICAgY2hpbGQuZW1pdCgncmVtb3ZlZCcsIHRoaXMpO1xuXG4gICAgcmV0dXJuIGNoaWxkO1xufTtcblxuLyoqXG4gKiBSZW1vdmVzIGFsbCBjaGlsZHJlbiBmcm9tIHRoaXMgY29udGFpbmVyIHRoYXQgYXJlIHdpdGhpbiB0aGUgYmVnaW4gYW5kIGVuZCBpbmRleGVzLlxuICpcbiAqIEBwYXJhbSBiZWdpbkluZGV4IHtudW1iZXJ9IFRoZSBiZWdpbm5pbmcgcG9zaXRpb24uIERlZmF1bHQgdmFsdWUgaXMgMC5cbiAqIEBwYXJhbSBlbmRJbmRleCB7bnVtYmVyfSBUaGUgZW5kaW5nIHBvc2l0aW9uLiBEZWZhdWx0IHZhbHVlIGlzIHNpemUgb2YgdGhlIGNvbnRhaW5lci5cbiAqL1xuQ29udGFpbmVyLnByb3RvdHlwZS5yZW1vdmVDaGlsZHJlbiA9IGZ1bmN0aW9uIChiZWdpbkluZGV4LCBlbmRJbmRleClcbntcbiAgICB2YXIgYmVnaW4gPSBiZWdpbkluZGV4IHx8IDA7XG4gICAgdmFyIGVuZCA9IHR5cGVvZiBlbmRJbmRleCA9PT0gJ251bWJlcicgPyBlbmRJbmRleCA6IHRoaXMuY2hpbGRyZW4ubGVuZ3RoO1xuICAgIHZhciByYW5nZSA9IGVuZCAtIGJlZ2luO1xuICAgIHZhciByZW1vdmVkLCBpO1xuXG4gICAgaWYgKHJhbmdlID4gMCAmJiByYW5nZSA8PSBlbmQpXG4gICAge1xuICAgICAgICByZW1vdmVkID0gdGhpcy5jaGlsZHJlbi5zcGxpY2UoYmVnaW4sIHJhbmdlKTtcblxuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgcmVtb3ZlZC5sZW5ndGg7ICsraSlcbiAgICAgICAge1xuICAgICAgICAgICAgcmVtb3ZlZFtpXS5wYXJlbnQgPSBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5vbkNoaWxkcmVuQ2hhbmdlKGJlZ2luSW5kZXgpO1xuXG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCByZW1vdmVkLmxlbmd0aDsgKytpKVxuICAgICAgICB7XG4gICAgICAgICAgICByZW1vdmVkW2ldLmVtaXQoJ3JlbW92ZWQnLCB0aGlzKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiByZW1vdmVkO1xuICAgIH1cbiAgICBlbHNlIGlmIChyYW5nZSA9PT0gMCAmJiB0aGlzLmNoaWxkcmVuLmxlbmd0aCA9PT0gMClcbiAgICB7XG4gICAgICAgIHJldHVybiBbXTtcbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ3JlbW92ZUNoaWxkcmVuOiBudW1lcmljIHZhbHVlcyBhcmUgb3V0c2lkZSB0aGUgYWNjZXB0YWJsZSByYW5nZS4nKTtcbiAgICB9XG59O1xuXG4vKipcbiAqIFVzZWZ1bCBmdW5jdGlvbiB0aGF0IHJldHVybnMgYSB0ZXh0dXJlIG9mIHRoZSBkaXNwbGF5IG9iamVjdCB0aGF0IGNhbiB0aGVuIGJlIHVzZWQgdG8gY3JlYXRlIHNwcml0ZXNcbiAqIFRoaXMgY2FuIGJlIHF1aXRlIHVzZWZ1bCBpZiB5b3VyIGRpc3BsYXlPYmplY3QgaXMgc3RhdGljIC8gY29tcGxpY2F0ZWQgYW5kIG5lZWRzIHRvIGJlIHJldXNlZCBtdWx0aXBsZSB0aW1lcy5cbiAqXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuQ2FudmFzUmVuZGVyZXJ8UElYSS5XZWJHTFJlbmRlcmVyfSBUaGUgcmVuZGVyZXIgdXNlZCB0byBnZW5lcmF0ZSB0aGUgdGV4dHVyZS5cbiAqIEBwYXJhbSByZXNvbHV0aW9uIHtudW1iZXJ9IFRoZSByZXNvbHV0aW9uIG9mIHRoZSB0ZXh0dXJlIGJlaW5nIGdlbmVyYXRlZFxuICogQHBhcmFtIHNjYWxlTW9kZSB7bnVtYmVyfSBTZWUge0BsaW5rIFBJWEkuU0NBTEVfTU9ERVN9IGZvciBwb3NzaWJsZSB2YWx1ZXNcbiAqIEByZXR1cm4ge1BJWEkuVGV4dHVyZX0gYSB0ZXh0dXJlIG9mIHRoZSBkaXNwbGF5IG9iamVjdFxuICovXG5Db250YWluZXIucHJvdG90eXBlLmdlbmVyYXRlVGV4dHVyZSA9IGZ1bmN0aW9uIChyZW5kZXJlciwgcmVzb2x1dGlvbiwgc2NhbGVNb2RlKVxue1xuICAgIHZhciBib3VuZHMgPSB0aGlzLmdldExvY2FsQm91bmRzKCk7XG5cbiAgICB2YXIgcmVuZGVyVGV4dHVyZSA9IG5ldyBSZW5kZXJUZXh0dXJlKHJlbmRlcmVyLCBib3VuZHMud2lkdGggfCAwLCBib3VuZHMuaGVpZ2h0IHwgMCwgc2NhbGVNb2RlLCByZXNvbHV0aW9uKTtcblxuICAgIF90ZW1wTWF0cml4LnR4ID0gLWJvdW5kcy54O1xuICAgIF90ZW1wTWF0cml4LnR5ID0gLWJvdW5kcy55O1xuXG4gICAgcmVuZGVyVGV4dHVyZS5yZW5kZXIodGhpcywgX3RlbXBNYXRyaXgpO1xuXG4gICAgcmV0dXJuIHJlbmRlclRleHR1cmU7XG59O1xuXG4vKlxuICogVXBkYXRlcyB0aGUgdHJhbnNmb3JtIG9uIGFsbCBjaGlsZHJlbiBvZiB0aGlzIGNvbnRhaW5lciBmb3IgcmVuZGVyaW5nXG4gKlxuICogQHByaXZhdGVcbiAqL1xuQ29udGFpbmVyLnByb3RvdHlwZS51cGRhdGVUcmFuc2Zvcm0gPSBmdW5jdGlvbiAoKVxue1xuICAgIGlmICghdGhpcy52aXNpYmxlKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuZGlzcGxheU9iamVjdFVwZGF0ZVRyYW5zZm9ybSgpO1xuXG4gICAgZm9yICh2YXIgaSA9IDAsIGogPSB0aGlzLmNoaWxkcmVuLmxlbmd0aDsgaSA8IGo7ICsraSlcbiAgICB7XG4gICAgICAgIHRoaXMuY2hpbGRyZW5baV0udXBkYXRlVHJhbnNmb3JtKCk7XG4gICAgfVxuXG4gICAgdGhpcy5kaXJ0eVRyYW5zZm9ybSA9IGZhbHNlO1xufTtcblxuLy8gcGVyZm9ybWFuY2UgaW5jcmVhc2UgdG8gYXZvaWQgdXNpbmcgY2FsbC4uICgxMHggZmFzdGVyKVxuQ29udGFpbmVyLnByb3RvdHlwZS5jb250YWluZXJVcGRhdGVUcmFuc2Zvcm0gPSBDb250YWluZXIucHJvdG90eXBlLnVwZGF0ZVRyYW5zZm9ybTtcblxuLyoqXG4gKiBSZXRyaWV2ZXMgdGhlIGJvdW5kcyBvZiB0aGUgQ29udGFpbmVyIGFzIGEgcmVjdGFuZ2xlLiBUaGUgYm91bmRzIGNhbGN1bGF0aW9uIHRha2VzIGFsbCB2aXNpYmxlIGNoaWxkcmVuIGludG8gY29uc2lkZXJhdGlvbi5cbiAqXG4gKiBAcmV0dXJuIHtQSVhJLlJlY3RhbmdsZX0gVGhlIHJlY3Rhbmd1bGFyIGJvdW5kaW5nIGFyZWFcbiAqL1xuQ29udGFpbmVyLnByb3RvdHlwZS5nZXRCb3VuZHMgPSBmdW5jdGlvbiAoKVxue1xuICAgIGlmKCF0aGlzLl9jdXJyZW50Qm91bmRzKVxuICAgIHtcblxuICAgICAgICBpZiAodGhpcy5jaGlsZHJlbi5sZW5ndGggPT09IDApXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiBtYXRoLlJlY3RhbmdsZS5FTVBUWTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFRPRE8gdGhlIGJvdW5kcyBoYXZlIGFscmVhZHkgYmVlbiBjYWxjdWxhdGVkIHRoaXMgcmVuZGVyIHNlc3Npb24gc28gcmV0dXJuIHdoYXQgd2UgaGF2ZVxuXG4gICAgICAgIHZhciBtaW5YID0gSW5maW5pdHk7XG4gICAgICAgIHZhciBtaW5ZID0gSW5maW5pdHk7XG5cbiAgICAgICAgdmFyIG1heFggPSAtSW5maW5pdHk7XG4gICAgICAgIHZhciBtYXhZID0gLUluZmluaXR5O1xuXG4gICAgICAgIHZhciBjaGlsZEJvdW5kcztcbiAgICAgICAgdmFyIGNoaWxkTWF4WDtcbiAgICAgICAgdmFyIGNoaWxkTWF4WTtcblxuICAgICAgICB2YXIgY2hpbGRWaXNpYmxlID0gZmFsc2U7XG5cbiAgICAgICAgZm9yICh2YXIgaSA9IDAsIGogPSB0aGlzLmNoaWxkcmVuLmxlbmd0aDsgaSA8IGo7ICsraSlcbiAgICAgICAge1xuICAgICAgICAgICAgdmFyIGNoaWxkID0gdGhpcy5jaGlsZHJlbltpXTtcblxuICAgICAgICAgICAgaWYgKCFjaGlsZC52aXNpYmxlKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjaGlsZFZpc2libGUgPSB0cnVlO1xuXG4gICAgICAgICAgICBjaGlsZEJvdW5kcyA9IHRoaXMuY2hpbGRyZW5baV0uZ2V0Qm91bmRzKCk7XG5cbiAgICAgICAgICAgIG1pblggPSBtaW5YIDwgY2hpbGRCb3VuZHMueCA/IG1pblggOiBjaGlsZEJvdW5kcy54O1xuICAgICAgICAgICAgbWluWSA9IG1pblkgPCBjaGlsZEJvdW5kcy55ID8gbWluWSA6IGNoaWxkQm91bmRzLnk7XG5cbiAgICAgICAgICAgIGNoaWxkTWF4WCA9IGNoaWxkQm91bmRzLndpZHRoICsgY2hpbGRCb3VuZHMueDtcbiAgICAgICAgICAgIGNoaWxkTWF4WSA9IGNoaWxkQm91bmRzLmhlaWdodCArIGNoaWxkQm91bmRzLnk7XG5cbiAgICAgICAgICAgIG1heFggPSBtYXhYID4gY2hpbGRNYXhYID8gbWF4WCA6IGNoaWxkTWF4WDtcbiAgICAgICAgICAgIG1heFkgPSBtYXhZID4gY2hpbGRNYXhZID8gbWF4WSA6IGNoaWxkTWF4WTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghY2hpbGRWaXNpYmxlKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gbWF0aC5SZWN0YW5nbGUuRU1QVFk7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgYm91bmRzID0gdGhpcy5fYm91bmRzO1xuXG4gICAgICAgIGJvdW5kcy54ID0gbWluWDtcbiAgICAgICAgYm91bmRzLnkgPSBtaW5ZO1xuICAgICAgICBib3VuZHMud2lkdGggPSBtYXhYIC0gbWluWDtcbiAgICAgICAgYm91bmRzLmhlaWdodCA9IG1heFkgLSBtaW5ZO1xuXG4gICAgICAgIHRoaXMuX2N1cnJlbnRCb3VuZHMgPSBib3VuZHM7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuX2N1cnJlbnRCb3VuZHM7XG59O1xuXG5Db250YWluZXIucHJvdG90eXBlLmNvbnRhaW5lckdldEJvdW5kcyA9IENvbnRhaW5lci5wcm90b3R5cGUuZ2V0Qm91bmRzO1xuXG4vKipcbiAqIFJldHJpZXZlcyB0aGUgbm9uLWdsb2JhbCBsb2NhbCBib3VuZHMgb2YgdGhlIENvbnRhaW5lciBhcyBhIHJlY3RhbmdsZS5cbiAqIFRoZSBjYWxjdWxhdGlvbiB0YWtlcyBhbGwgdmlzaWJsZSBjaGlsZHJlbiBpbnRvIGNvbnNpZGVyYXRpb24uXG4gKlxuICogQHJldHVybiB7UElYSS5SZWN0YW5nbGV9IFRoZSByZWN0YW5ndWxhciBib3VuZGluZyBhcmVhXG4gKi9cbkNvbnRhaW5lci5wcm90b3R5cGUuZ2V0TG9jYWxCb3VuZHMgPSBmdW5jdGlvbiAoKVxue1xuICAgIHZhciBtYXRyaXhDYWNoZSA9IHRoaXMud29ybGRUcmFuc2Zvcm07XG5cbiAgICB0aGlzLndvcmxkVHJhbnNmb3JtID0gbWF0aC5NYXRyaXguSURFTlRJVFk7XG5cbiAgICBmb3IgKHZhciBpID0gMCwgaiA9IHRoaXMuY2hpbGRyZW4ubGVuZ3RoOyBpIDwgajsgKytpKVxuICAgIHtcbiAgICAgICAgdGhpcy5jaGlsZHJlbltpXS51cGRhdGVUcmFuc2Zvcm0oKTtcbiAgICB9XG5cbiAgICB0aGlzLndvcmxkVHJhbnNmb3JtID0gbWF0cml4Q2FjaGU7XG5cbiAgICB0aGlzLl9jdXJyZW50Qm91bmRzID0gbnVsbDtcblxuICAgIHJldHVybiB0aGlzLmdldEJvdW5kcyggbWF0aC5NYXRyaXguSURFTlRJVFkgKTtcbn07XG5cbi8qKlxuICogUmVuZGVycyB0aGUgb2JqZWN0IHVzaW5nIHRoZSBXZWJHTCByZW5kZXJlclxuICpcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5XZWJHTFJlbmRlcmVyfSBUaGUgcmVuZGVyZXJcbiAqL1xuQ29udGFpbmVyLnByb3RvdHlwZS5yZW5kZXJXZWJHTCA9IGZ1bmN0aW9uIChyZW5kZXJlcilcbntcblxuICAgIC8vIGlmIHRoZSBvYmplY3QgaXMgbm90IHZpc2libGUgb3IgdGhlIGFscGhhIGlzIDAgdGhlbiBubyBuZWVkIHRvIHJlbmRlciB0aGlzIGVsZW1lbnRcbiAgICBpZiAoIXRoaXMudmlzaWJsZSB8fCB0aGlzLndvcmxkQWxwaGEgPD0gMCB8fCAhdGhpcy5yZW5kZXJhYmxlKVxuICAgIHtcbiAgICAgIFxuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFyIGksIGo7XG5cbiAgICAvLyBkbyBhIHF1aWNrIGNoZWNrIHRvIHNlZSBpZiB0aGlzIGVsZW1lbnQgaGFzIGEgbWFzayBvciBhIGZpbHRlci5cbiAgICBpZiAodGhpcy5fbWFzayB8fCB0aGlzLl9maWx0ZXJzKVxuICAgIHtcbiAgICAgICAgcmVuZGVyZXIuY3VycmVudFJlbmRlcmVyLmZsdXNoKCk7XG5cbiAgICAgICAgLy8gcHVzaCBmaWx0ZXIgZmlyc3QgYXMgd2UgbmVlZCB0byBlbnN1cmUgdGhlIHN0ZW5jaWwgYnVmZmVyIGlzIGNvcnJlY3QgZm9yIGFueSBtYXNraW5nXG4gICAgICAgIGlmICh0aGlzLl9maWx0ZXJzICYmIHRoaXMuX2ZpbHRlcnMubGVuZ3RoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLnB1c2hGaWx0ZXIodGhpcywgdGhpcy5fZmlsdGVycyk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5fbWFzaylcbiAgICAgICAge1xuICAgICAgICAgICAgcmVuZGVyZXIubWFza01hbmFnZXIucHVzaE1hc2sodGhpcywgdGhpcy5fbWFzayk7XG4gICAgICAgIH1cblxuICAgICAgICByZW5kZXJlci5jdXJyZW50UmVuZGVyZXIuc3RhcnQoKTtcblxuICAgICAgICAvLyBhZGQgdGhpcyBvYmplY3QgdG8gdGhlIGJhdGNoLCBvbmx5IHJlbmRlcmVkIGlmIGl0IGhhcyBhIHRleHR1cmUuXG4gICAgICAgIHRoaXMuX3JlbmRlcldlYkdMKHJlbmRlcmVyKTtcblxuICAgICAgICAvLyBub3cgbG9vcCB0aHJvdWdoIHRoZSBjaGlsZHJlbiBhbmQgbWFrZSBzdXJlIHRoZXkgZ2V0IHJlbmRlcmVkXG4gICAgICAgIGZvciAoaSA9IDAsIGogPSB0aGlzLmNoaWxkcmVuLmxlbmd0aDsgaSA8IGo7IGkrKylcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5jaGlsZHJlbltpXS5yZW5kZXJXZWJHTChyZW5kZXJlcik7XG4gICAgICAgIH1cblxuICAgICAgICByZW5kZXJlci5jdXJyZW50UmVuZGVyZXIuZmx1c2goKTtcblxuICAgICAgICBpZiAodGhpcy5fbWFzaylcbiAgICAgICAge1xuICAgICAgICAgICAgcmVuZGVyZXIubWFza01hbmFnZXIucG9wTWFzayh0aGlzLCB0aGlzLl9tYXNrKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLl9maWx0ZXJzKVxuICAgICAgICB7XG4gICAgICAgICAgICByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLnBvcEZpbHRlcigpO1xuXG4gICAgICAgIH1cbiAgICAgICAgcmVuZGVyZXIuY3VycmVudFJlbmRlcmVyLnN0YXJ0KCk7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHRoaXMuX3JlbmRlcldlYkdMKHJlbmRlcmVyKTtcblxuICAgICAgICAvLyBzaW1wbGUgcmVuZGVyIGNoaWxkcmVuIVxuICAgICAgICBmb3IgKGkgPSAwLCBqID0gdGhpcy5jaGlsZHJlbi5sZW5ndGg7IGkgPCBqOyArK2kpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuY2hpbGRyZW5baV0ucmVuZGVyV2ViR0wocmVuZGVyZXIpO1xuICAgICAgICB9XG4gICAgfVxufTtcblxuLyoqXG4gKiBUbyBiZSBvdmVycmlkZGVuIGJ5IHRoZSBzdWJjbGFzc1xuICpcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5XZWJHTFJlbmRlcmVyfSBUaGUgcmVuZGVyZXJcbiAqIEBwcml2YXRlXG4gKi9cbkNvbnRhaW5lci5wcm90b3R5cGUuX3JlbmRlcldlYkdMID0gZnVuY3Rpb24gKHJlbmRlcmVyKSAvLyBqc2hpbnQgdW51c2VkOmZhbHNlXG57XG4gICAgLy8gdGhpcyBpcyB3aGVyZSBjb250ZW50IGl0c2VsZiBnZXRzIHJlbmRlcmVkLi4uXG59O1xuXG4vKipcbiAqIFRvIGJlIG92ZXJyaWRkZW4gYnkgdGhlIHN1YmNsYXNzXG4gKlxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLkNhbnZhc1JlbmRlcmVyfSBUaGUgcmVuZGVyZXJcbiAqIEBwcml2YXRlXG4gKi9cbkNvbnRhaW5lci5wcm90b3R5cGUuX3JlbmRlckNhbnZhcyA9IGZ1bmN0aW9uIChyZW5kZXJlcikgLy8ganNoaW50IHVudXNlZDpmYWxzZVxue1xuICAgIC8vIHRoaXMgaXMgd2hlcmUgY29udGVudCBpdHNlbGYgZ2V0cyByZW5kZXJlZC4uLlxufTtcblxuXG4vKipcbiAqIFJlbmRlcnMgdGhlIG9iamVjdCB1c2luZyB0aGUgQ2FudmFzIHJlbmRlcmVyXG4gKlxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLkNhbnZhc1JlbmRlcmVyfSBUaGUgcmVuZGVyZXJcbiAqL1xuQ29udGFpbmVyLnByb3RvdHlwZS5yZW5kZXJDYW52YXMgPSBmdW5jdGlvbiAocmVuZGVyZXIpXG57XG4gICAgLy8gaWYgbm90IHZpc2libGUgb3IgdGhlIGFscGhhIGlzIDAgdGhlbiBubyBuZWVkIHRvIHJlbmRlciB0aGlzXG4gICAgaWYgKCF0aGlzLnZpc2libGUgfHwgdGhpcy5hbHBoYSA8PSAwIHx8ICF0aGlzLnJlbmRlcmFibGUpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX21hc2spXG4gICAge1xuICAgICAgICByZW5kZXJlci5tYXNrTWFuYWdlci5wdXNoTWFzayh0aGlzLl9tYXNrLCByZW5kZXJlcik7XG4gICAgfVxuXG4gICAgdGhpcy5fcmVuZGVyQ2FudmFzKHJlbmRlcmVyKTtcbiAgICBmb3IgKHZhciBpID0gMCwgaiA9IHRoaXMuY2hpbGRyZW4ubGVuZ3RoOyBpIDwgajsgKytpKVxuICAgIHtcbiAgICAgICAgdGhpcy5jaGlsZHJlbltpXS5yZW5kZXJDYW52YXMocmVuZGVyZXIpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLl9tYXNrKVxuICAgIHtcbiAgICAgICAgcmVuZGVyZXIubWFza01hbmFnZXIucG9wTWFzayhyZW5kZXJlcik7XG4gICAgfVxufTtcblxuLyoqXG4gKiBEZXN0cm95cyB0aGUgY29udGFpbmVyXG4gKiBAcGFyYW0gW2Rlc3Ryb3lDaGlsZHJlbj1mYWxzZV0ge2Jvb2xlYW59IGlmIHNldCB0byB0cnVlLCBhbGwgdGhlIGNoaWxkcmVuIHdpbGwgaGF2ZSB0aGVpciBkZXN0cm95IG1ldGhvZCBjYWxsZWQgYXMgd2VsbFxuICovXG5Db250YWluZXIucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoZGVzdHJveUNoaWxkcmVuKVxue1xuICAgIERpc3BsYXlPYmplY3QucHJvdG90eXBlLmRlc3Ryb3kuY2FsbCh0aGlzKTtcblxuICAgIGlmIChkZXN0cm95Q2hpbGRyZW4pXG4gICAge1xuICAgICAgICBmb3IgKHZhciBpID0gMCwgaiA9IHRoaXMuY2hpbGRyZW4ubGVuZ3RoOyBpIDwgajsgKytpKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmNoaWxkcmVuW2ldLmRlc3Ryb3koZGVzdHJveUNoaWxkcmVuKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMucmVtb3ZlQ2hpbGRyZW4oKTtcblxuICAgIHRoaXMuY2hpbGRyZW4gPSBudWxsO1xufTtcbiIsInZhciBtYXRoID0gcmVxdWlyZSgnLi4vbWF0aCcpLFxuICAgIFJlbmRlclRleHR1cmUgPSByZXF1aXJlKCcuLi90ZXh0dXJlcy9SZW5kZXJUZXh0dXJlJyksXG4gICAgRXZlbnRFbWl0dGVyID0gcmVxdWlyZSgnZXZlbnRlbWl0dGVyMycpLFxuICAgIENPTlNUID0gcmVxdWlyZSgnLi4vY29uc3QnKSxcbiAgICBfdGVtcE1hdHJpeCA9IG5ldyBtYXRoLk1hdHJpeCgpLFxuICAgIF90ZW1wRGlzcGxheU9iamVjdFBhcmVudCA9IHt3b3JsZFRyYW5zZm9ybTpuZXcgbWF0aC5NYXRyaXgoKSwgd29ybGRBbHBoYToxLCBjaGlsZHJlbjpbXX07XG5cblxuLyoqXG4gKiBUaGUgYmFzZSBjbGFzcyBmb3IgYWxsIG9iamVjdHMgdGhhdCBhcmUgcmVuZGVyZWQgb24gdGhlIHNjcmVlbi5cbiAqIFRoaXMgaXMgYW4gYWJzdHJhY3QgY2xhc3MgYW5kIHNob3VsZCBub3QgYmUgdXNlZCBvbiBpdHMgb3duIHJhdGhlciBpdCBzaG91bGQgYmUgZXh0ZW5kZWQuXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBFdmVudEVtaXR0ZXJcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKi9cbmZ1bmN0aW9uIERpc3BsYXlPYmplY3QoKVxue1xuICAgIEV2ZW50RW1pdHRlci5jYWxsKHRoaXMpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGNvb3JkaW5hdGUgb2YgdGhlIG9iamVjdCByZWxhdGl2ZSB0byB0aGUgbG9jYWwgY29vcmRpbmF0ZXMgb2YgdGhlIHBhcmVudC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuUG9pbnR9XG4gICAgICovXG4gICAgdGhpcy5wb3NpdGlvbiA9IG5ldyBtYXRoLlBvaW50KCk7XG4gICAgdGhpcy5fcG9zaXRpb24gPSBuZXcgQ2FjaGVQb2ludCh0aGlzKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBzY2FsZSBmYWN0b3Igb2YgdGhlIG9iamVjdC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuUG9pbnR9XG4gICAgICovXG4gICAgdGhpcy5zY2FsZSA9IG5ldyBtYXRoLlBvaW50KDEsIDEpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHBpdm90IHBvaW50IG9mIHRoZSBkaXNwbGF5T2JqZWN0IHRoYXQgaXQgcm90YXRlcyBhcm91bmRcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuUG9pbnR9XG4gICAgICovXG4gICAgdGhpcy5waXZvdCA9IG5ldyBtYXRoLlBvaW50KDAsIDApO1xuXG5cbiAgICAvKipcbiAgICAgKiBUaGUgc2tldyBmYWN0b3IgZm9yIHRoZSBvYmplY3QgaW4gcmFkaWFucy5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuUG9pbnR9XG4gICAgICovXG4gICAgdGhpcy5za2V3ID0gbmV3IG1hdGguUG9pbnQoMCwgMCk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgcm90YXRpb24gb2YgdGhlIG9iamVjdCBpbiByYWRpYW5zLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMuX3JvdGF0aW9uID0gMDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBvcGFjaXR5IG9mIHRoZSBvYmplY3QuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy5hbHBoYSA9IDE7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgdmlzaWJpbGl0eSBvZiB0aGUgb2JqZWN0LiBJZiBmYWxzZSB0aGUgb2JqZWN0IHdpbGwgbm90IGJlIGRyYXduLCBhbmRcbiAgICAgKiB0aGUgdXBkYXRlVHJhbnNmb3JtIGZ1bmN0aW9uIHdpbGwgbm90IGJlIGNhbGxlZC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICovXG4gICAgdGhpcy52aXNpYmxlID0gdHJ1ZTtcblxuICAgIC8qKlxuICAgICAqIENhbiB0aGlzIG9iamVjdCBiZSByZW5kZXJlZCwgaWYgZmFsc2UgdGhlIG9iamVjdCB3aWxsIG5vdCBiZSBkcmF3biBidXQgdGhlIHVwZGF0ZVRyYW5zZm9ybVxuICAgICAqIG1ldGhvZHMgd2lsbCBzdGlsbCBiZSBjYWxsZWQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqL1xuICAgIHRoaXMucmVuZGVyYWJsZSA9IHRydWU7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgZGlzcGxheSBvYmplY3QgY29udGFpbmVyIHRoYXQgY29udGFpbnMgdGhpcyBkaXNwbGF5IG9iamVjdC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuQ29udGFpbmVyfVxuICAgICAqIEByZWFkT25seVxuICAgICAqL1xuICAgIHRoaXMucGFyZW50ID0gbnVsbDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBtdWx0aXBsaWVkIGFscGhhIG9mIHRoZSBkaXNwbGF5T2JqZWN0XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQHJlYWRPbmx5XG4gICAgICovXG4gICAgdGhpcy53b3JsZEFscGhhID0gMTtcblxuICAgIC8qKlxuICAgICAqIEN1cnJlbnQgdHJhbnNmb3JtIG9mIHRoZSBvYmplY3QgYmFzZWQgb24gd29ybGQgKHBhcmVudCkgZmFjdG9yc1xuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5NYXRyaXh9XG4gICAgICogQHJlYWRPbmx5XG4gICAgICovXG4gICAgdGhpcy53b3JsZFRyYW5zZm9ybSA9IG5ldyBtYXRoLk1hdHJpeCgpO1xuICAgIHRoaXMubG9jYWxUcmFuc2Zvcm0gPSBuZXcgbWF0aC5NYXRyaXgoKTtcblxuXG4gICAgLyoqXG4gICAgICogVGhlIGFyZWEgdGhlIGZpbHRlciBpcyBhcHBsaWVkIHRvLiBUaGlzIGlzIHVzZWQgYXMgbW9yZSBvZiBhbiBvcHRpbWlzYXRpb25cbiAgICAgKiByYXRoZXIgdGhhbiBmaWd1cmluZyBvdXQgdGhlIGRpbWVuc2lvbnMgb2YgdGhlIGRpc3BsYXlPYmplY3QgZWFjaCBmcmFtZSB5b3UgY2FuIHNldCB0aGlzIHJlY3RhbmdsZVxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5SZWN0YW5nbGV9XG4gICAgICovXG4gICAgdGhpcy5maWx0ZXJBcmVhID0gbnVsbDtcblxuICAgIC8qKlxuICAgICAqIGNhY2hlZCBzaW4gcm90YXRpb25cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX3NyID0gMDtcblxuICAgIC8qKlxuICAgICAqIGNhY2hlZCBjb3Mgcm90YXRpb25cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX2NyID0gMTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBvcmlnaW5hbCwgY2FjaGVkIGJvdW5kcyBvZiB0aGUgb2JqZWN0XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlJlY3RhbmdsZX1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX2JvdW5kcyA9IG5ldyBtYXRoLlJlY3RhbmdsZSgwLCAwLCAxLCAxKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBtb3N0IHVwLXRvLWRhdGUgYm91bmRzIG9mIHRoZSBvYmplY3RcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuUmVjdGFuZ2xlfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fY3VycmVudEJvdW5kcyA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgb3JpZ2luYWwsIGNhY2hlZCBtYXNrIG9mIHRoZSBvYmplY3RcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuUmVjdGFuZ2xlfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fbWFzayA9IG51bGw7XG5cbiAgICB0aGlzLmRpcnR5VHJhbnNmb3JtID0gdHJ1ZTtcbn1cblxuLy8gY29uc3RydWN0b3JcbkRpc3BsYXlPYmplY3QucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShFdmVudEVtaXR0ZXIucHJvdG90eXBlKTtcbkRpc3BsYXlPYmplY3QucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gRGlzcGxheU9iamVjdDtcbm1vZHVsZS5leHBvcnRzID0gRGlzcGxheU9iamVjdDtcblxudmFyIENhY2hlUG9pbnQgPSBmdW5jdGlvbihkb2Mpe1xuICAgIFxuICAgIHRoaXMuZG9jID0gZG9jO1xuXG4gICAgdGhpcy54ID0gMDtcbiAgICB0aGlzLnkgPSAwO1xufVxuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhDYWNoZVBvaW50LnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFRoZSBwb3NpdGlvbiBvZiB0aGUgZGlzcGxheU9iamVjdCBvbiB0aGUgeCBheGlzIHJlbGF0aXZlIHRvIHRoZSBsb2NhbCBjb29yZGluYXRlcyBvZiB0aGUgcGFyZW50LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLkRpc3BsYXlPYmplY3QjXG4gICAgICovXG4gICAgeDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmRvYy5wb3NpdGlvbi54O1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5kb2MucG9zaXRpb24ueCA9IHZhbHVlO1xuICAgICAgICAgICAgdGhpcy5kb2MuZGlydHlUcmFuc2Zvcm0gPSB0cnVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIHk6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5kb2MucG9zaWl0b24ueTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuZG9jLnBvc2l0aW9uLnkgPSB2YWx1ZTtcbiAgICAgICAgICAgIHRoaXMuZG9jLmRpcnR5VHJhbnNmb3JtID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuXG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKERpc3BsYXlPYmplY3QucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogVGhlIHBvc2l0aW9uIG9mIHRoZSBkaXNwbGF5T2JqZWN0IG9uIHRoZSB4IGF4aXMgcmVsYXRpdmUgdG8gdGhlIGxvY2FsIGNvb3JkaW5hdGVzIG9mIHRoZSBwYXJlbnQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuRGlzcGxheU9iamVjdCNcbiAgICAgKi9cbiAgICB4OiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMucG9zaXRpb24ueDtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMucG9zaXRpb24ueCA9IHZhbHVlO1xuICAgICAgICAgICAgdGhpcy5kaXJ0eVRyYW5zZm9ybSA9IHRydWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVGhlIHBvc2l0aW9uIG9mIHRoZSBkaXNwbGF5T2JqZWN0IG9uIHRoZSB5IGF4aXMgcmVsYXRpdmUgdG8gdGhlIGxvY2FsIGNvb3JkaW5hdGVzIG9mIHRoZSBwYXJlbnQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuRGlzcGxheU9iamVjdCNcbiAgICAgKi9cbiAgICB5OiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMucG9zaXRpb24ueTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMucG9zaXRpb24ueSA9IHZhbHVlO1xuICAgICAgICAgICAgdGhpcy5kaXJ0eVRyYW5zZm9ybSA9IHRydWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgc2NhbGVYOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuc2NhbGUueDtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuc2NhbGUueCA9IHZhbHVlO1xuICAgICAgICAgICAgdGhpcy5kaXJ0eVRyYW5zZm9ybSA9IHRydWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVGhlIHBvc2l0aW9uIG9mIHRoZSBkaXNwbGF5T2JqZWN0IG9uIHRoZSB5IGF4aXMgcmVsYXRpdmUgdG8gdGhlIGxvY2FsIGNvb3JkaW5hdGVzIG9mIHRoZSBwYXJlbnQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuRGlzcGxheU9iamVjdCNcbiAgICAgKi9cbiAgICBzY2FsZVk6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5zY2FsZS55O1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5zY2FsZS55ID0gdmFsdWU7XG4gICAgICAgICAgICB0aGlzLmRpcnR5VHJhbnNmb3JtID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICByb3RhdGlvbjoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9yb3RhdGlvbjtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuX3JvdGF0aW9uID0gdmFsdWU7XG4gICAgICAgICAgICB0aGlzLmRpcnR5VHJhbnNmb3JtID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMuX3NyID0gTWF0aC5zaW4odmFsdWUpO1xuICAgICAgICAgICAgdGhpcy5fY3IgPSBNYXRoLmNvcyh2YWx1ZSk7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVGhlIHBvc2l0aW9uIG9mIHRoZSBkaXNwbGF5T2JqZWN0IG9uIHRoZSB5IGF4aXMgcmVsYXRpdmUgdG8gdGhlIGxvY2FsIGNvb3JkaW5hdGVzIG9mIHRoZSBwYXJlbnQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuRGlzcGxheU9iamVjdCNcbiAgICAgKi9cbiAgICBzY2FsZVk6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5zY2FsZS55O1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5zY2FsZS55ID0gdmFsdWU7XG4gICAgICAgICAgICB0aGlzLmRpcnR5VHJhbnNmb3JtID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBJbmRpY2F0ZXMgaWYgdGhlIHNwcml0ZSBpcyBnbG9iYWxseSB2aXNpYmxlLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5EaXNwbGF5T2JqZWN0I1xuICAgICAqIEByZWFkb25seVxuICAgICAqL1xuICAgIHdvcmxkVmlzaWJsZToge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHZhciBpdGVtID0gdGhpcztcblxuICAgICAgICAgICAgZG8ge1xuICAgICAgICAgICAgICAgIGlmICghaXRlbS52aXNpYmxlKVxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGl0ZW0gPSBpdGVtLnBhcmVudDtcbiAgICAgICAgICAgIH0gd2hpbGUgKGl0ZW0pO1xuXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBTZXRzIGEgbWFzayBmb3IgdGhlIGRpc3BsYXlPYmplY3QuIEEgbWFzayBpcyBhbiBvYmplY3QgdGhhdCBsaW1pdHMgdGhlIHZpc2liaWxpdHkgb2YgYW4gb2JqZWN0IHRvIHRoZSBzaGFwZSBvZiB0aGUgbWFzayBhcHBsaWVkIHRvIGl0LlxuICAgICAqIEluIFBJWEkgYSByZWd1bGFyIG1hc2sgbXVzdCBiZSBhIFBJWEkuR3JhcGhpY3Mgb3IgYSBQSVhJLlNwcml0ZSBvYmplY3QuIFRoaXMgYWxsb3dzIGZvciBtdWNoIGZhc3RlciBtYXNraW5nIGluIGNhbnZhcyBhcyBpdCB1dGlsaXNlcyBzaGFwZSBjbGlwcGluZy5cbiAgICAgKiBUbyByZW1vdmUgYSBtYXNrLCBzZXQgdGhpcyBwcm9wZXJ0eSB0byBudWxsLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5HcmFwaGljc3xQSVhJLlNwcml0ZX1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5EaXNwbGF5T2JqZWN0I1xuICAgICAqL1xuICAgIG1hc2s6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fbWFzaztcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGlmICh0aGlzLl9tYXNrKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHRoaXMuX21hc2sucmVuZGVyYWJsZSA9IHRydWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuX21hc2sgPSB2YWx1ZTtcblxuICAgICAgICAgICAgaWYgKHRoaXMuX21hc2spXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdGhpcy5fbWFzay5yZW5kZXJhYmxlID0gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgZmlsdGVycyBmb3IgdGhlIGRpc3BsYXlPYmplY3QuXG4gICAgICogKiBJTVBPUlRBTlQ6IFRoaXMgaXMgYSB3ZWJHTCBvbmx5IGZlYXR1cmUgYW5kIHdpbGwgYmUgaWdub3JlZCBieSB0aGUgY2FudmFzIHJlbmRlcmVyLlxuICAgICAqIFRvIHJlbW92ZSBmaWx0ZXJzIHNpbXBseSBzZXQgdGhpcyBwcm9wZXJ0eSB0byAnbnVsbCdcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuQWJzdHJhY3RGaWx0ZXJbXX1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5EaXNwbGF5T2JqZWN0I1xuICAgICAqL1xuICAgIGZpbHRlcnM6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fZmlsdGVycyAmJiB0aGlzLl9maWx0ZXJzLnNsaWNlKCk7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLl9maWx0ZXJzID0gdmFsdWUgJiYgdmFsdWUuc2xpY2UoKTtcbiAgICAgICAgfVxuICAgIH1cblxufSk7XG5cbi8qXG4gKiBVcGRhdGVzIHRoZSBvYmplY3QgdHJhbnNmb3JtIGZvciByZW5kZXJpbmdcbiAqXG4gKiBUT0RPIC0gT3B0aW1pemF0aW9uIHBhc3MhXG4gKi9cbkRpc3BsYXlPYmplY3QucHJvdG90eXBlLnVwZGF0ZVRyYW5zZm9ybSA9IGZ1bmN0aW9uICgpXG57XG4gICAgdmFyIHB0ID0gdGhpcy5wYXJlbnQud29ybGRUcmFuc2Zvcm07XG4gICAgdmFyIHd0ID0gdGhpcy53b3JsZFRyYW5zZm9ybTtcbiAgICB2YXIgbHQgPSB0aGlzLmxvY2FsVHJhbnNmb3JtO1xuXG4gICAgaWYodGhpcy5kaXJ0eVRyYW5zZm9ybSlcbiAgICB7XG4gICAgICAgIC8vIGdldCB0aGUgbWF0cml4IHZhbHVlcyBvZiB0aGUgZGlzcGxheW9iamVjdCBiYXNlZCBvbiBpdHMgdHJhbnNmb3JtIHByb3BlcnRpZXMuLlxuICAgICAgICBsdC5hICA9ICB0aGlzLl9jciAqIHRoaXMuc2NhbGUueDtcbiAgICAgICAgbHQuYiAgPSAgdGhpcy5fc3IgKiB0aGlzLnNjYWxlLng7XG4gICAgICAgIGx0LmMgID0gLXRoaXMuX3NyICogdGhpcy5zY2FsZS55O1xuICAgICAgICBsdC5kICA9ICB0aGlzLl9jciAqIHRoaXMuc2NhbGUueTtcbiAgICAgICAgbHQudHggPSAgdGhpcy5wb3NpdGlvbi54IC0gKHRoaXMucGl2b3QueCAqIGx0LmEgKyB0aGlzLnBpdm90LnkgKiBsdC5jKTtcbiAgICAgICAgbHQudHkgPSAgdGhpcy5wb3NpdGlvbi55IC0gKHRoaXMucGl2b3QueCAqIGx0LmIgKyB0aGlzLnBpdm90LnkgKiBsdC5kKTtcbiAgICB9XG5cbiAgICBpZih0aGlzLmRpcnR5VHJhbnNmb3JtIHx8IHRoaXMucGFyZW50LmRpcnR5VHJhbnNmb3JtKVxuICAgIHsgICAgICBcbiAgICAgICAgLy8gY29uY2F0IHRoZSBwYXJlbnQgbWF0cml4IHdpdGggdGhlIG9iamVjdHMgdHJhbnNmb3JtLlxuICAgICAgICB3dC5hICA9IGx0LmEgICogcHQuYSArIGx0LmIgICogcHQuYztcbiAgICAgICAgd3QuYiAgPSBsdC5hICAqIHB0LmIgKyBsdC5iICAqIHB0LmQ7XG4gICAgICAgIHd0LmMgID0gbHQuYyAgKiBwdC5hICsgbHQuZCAgKiBwdC5jO1xuICAgICAgICB3dC5kICA9IGx0LmMgICogcHQuYiArIGx0LmQgICogcHQuZDtcbiAgICAgICAgd3QudHggPSBsdC50eCAqIHB0LmEgKyBsdC50eSAqIHB0LmMgKyBwdC50eDtcbiAgICAgICAgd3QudHkgPSBsdC50eCAqIHB0LmIgKyBsdC50eSAqIHB0LmQgKyBwdC50eTsgICAgICAgXG4gICAgXG4gICAgICAgIHRoaXMuX2N1cnJlbnRCb3VuZHMgPSBudWxsO1xuICAgIH1cblxuICAgIC8vIG11bHRpcGx5IHRoZSBhbHBoYXMuLlxuICAgIHRoaXMud29ybGRBbHBoYSA9IHRoaXMuYWxwaGEgKiB0aGlzLnBhcmVudC53b3JsZEFscGhhO1xuXG4gICAgLy8gcmVzZXQgdGhlIGJvdW5kcyBlYWNoIHRpbWUgdGhpcyBpcyBjYWxsZWQhXG4gICAgXG59O1xuXG4vLyBwZXJmb3JtYW5jZSBpbmNyZWFzZSB0byBhdm9pZCB1c2luZyBjYWxsLi4gKDEweCBmYXN0ZXIpXG5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS5kaXNwbGF5T2JqZWN0VXBkYXRlVHJhbnNmb3JtID0gRGlzcGxheU9iamVjdC5wcm90b3R5cGUudXBkYXRlVHJhbnNmb3JtO1xuXG4vKipcbiAqXG4gKlxuICogUmV0cmlldmVzIHRoZSBib3VuZHMgb2YgdGhlIGRpc3BsYXlPYmplY3QgYXMgYSByZWN0YW5nbGUgb2JqZWN0XG4gKlxuICogQHBhcmFtIG1hdHJpeCB7UElYSS5NYXRyaXh9XG4gKiBAcmV0dXJuIHtQSVhJLlJlY3RhbmdsZX0gdGhlIHJlY3Rhbmd1bGFyIGJvdW5kaW5nIGFyZWFcbiAqL1xuRGlzcGxheU9iamVjdC5wcm90b3R5cGUuZ2V0Qm91bmRzID0gZnVuY3Rpb24gKG1hdHJpeCkgLy8ganNoaW50IHVudXNlZDpmYWxzZVxue1xuICAgIHJldHVybiBtYXRoLlJlY3RhbmdsZS5FTVBUWTtcbn07XG5cbi8qKlxuICogUmV0cmlldmVzIHRoZSBsb2NhbCBib3VuZHMgb2YgdGhlIGRpc3BsYXlPYmplY3QgYXMgYSByZWN0YW5nbGUgb2JqZWN0XG4gKlxuICogQHJldHVybiB7UElYSS5SZWN0YW5nbGV9IHRoZSByZWN0YW5ndWxhciBib3VuZGluZyBhcmVhXG4gKi9cbkRpc3BsYXlPYmplY3QucHJvdG90eXBlLmdldExvY2FsQm91bmRzID0gZnVuY3Rpb24gKClcbntcbiAgICByZXR1cm4gdGhpcy5nZXRCb3VuZHMobWF0aC5NYXRyaXguSURFTlRJVFkpO1xufTtcblxuLyoqXG4gKiBDYWxjdWxhdGVzIHRoZSBnbG9iYWwgcG9zaXRpb24gb2YgdGhlIGRpc3BsYXkgb2JqZWN0XG4gKlxuICogQHBhcmFtIHBvc2l0aW9uIHtQSVhJLlBvaW50fSBUaGUgd29ybGQgb3JpZ2luIHRvIGNhbGN1bGF0ZSBmcm9tXG4gKiBAcmV0dXJuIHtQSVhJLlBvaW50fSBBIHBvaW50IG9iamVjdCByZXByZXNlbnRpbmcgdGhlIHBvc2l0aW9uIG9mIHRoaXMgb2JqZWN0XG4gKi9cbkRpc3BsYXlPYmplY3QucHJvdG90eXBlLnRvR2xvYmFsID0gZnVuY3Rpb24gKHBvc2l0aW9uKVxue1xuICAgIC8vIHRoaXMgcGFyZW50IGNoZWNrIGlzIGZvciBqdXN0IGluIGNhc2UgdGhlIGl0ZW0gaXMgYSByb290IG9iamVjdC5cbiAgICAvLyBJZiBpdCBpcyB3ZSBuZWVkIHRvIGdpdmUgaXQgYSB0ZW1wb3JhcnkgcGFyZW50IHNvIHRoYXQgZGlzcGxheU9iamVjdFVwZGF0ZVRyYW5zZm9ybSB3b3JrcyBjb3JyZWN0bHlcbiAgICAvLyB0aGlzIGlzIG1haW5seSB0byBhdm9pZCBhIHBhcmVudCBjaGVjayBpbiB0aGUgbWFpbiBsb29wLiBFdmVyeSBsaXR0bGUgaGVscHMgZm9yIHBlcmZvcm1hbmNlIDopXG4gICAgaWYoIXRoaXMucGFyZW50KVxuICAgIHtcbiAgICAgICAgdGhpcy5wYXJlbnQgPSBfdGVtcERpc3BsYXlPYmplY3RQYXJlbnQ7XG4gICAgICAgIHRoaXMuZGlzcGxheU9iamVjdFVwZGF0ZVRyYW5zZm9ybSgpO1xuICAgICAgICB0aGlzLnBhcmVudCA9IG51bGw7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHRoaXMuZGlzcGxheU9iamVjdFVwZGF0ZVRyYW5zZm9ybSgpO1xuICAgIH1cblxuICAgIC8vIGRvbid0IG5lZWQgdG8gdXBkYXRlIHRoZSBsb3RcbiAgICByZXR1cm4gdGhpcy53b3JsZFRyYW5zZm9ybS5hcHBseShwb3NpdGlvbik7XG59O1xuXG4vKipcbiAqIENhbGN1bGF0ZXMgdGhlIGxvY2FsIHBvc2l0aW9uIG9mIHRoZSBkaXNwbGF5IG9iamVjdCByZWxhdGl2ZSB0byBhbm90aGVyIHBvaW50XG4gKlxuICogQHBhcmFtIHBvc2l0aW9uIHtQSVhJLlBvaW50fSBUaGUgd29ybGQgb3JpZ2luIHRvIGNhbGN1bGF0ZSBmcm9tXG4gKiBAcGFyYW0gW2Zyb21dIHtQSVhJLkRpc3BsYXlPYmplY3R9IFRoZSBEaXNwbGF5T2JqZWN0IHRvIGNhbGN1bGF0ZSB0aGUgZ2xvYmFsIHBvc2l0aW9uIGZyb21cbiAqIEBwYXJhbSBbcG9pbnRdIHtQSVhJLlBvaW50fSBBIFBvaW50IG9iamVjdCBpbiB3aGljaCB0byBzdG9yZSB0aGUgdmFsdWUsIG9wdGlvbmFsIChvdGhlcndpc2Ugd2lsbCBjcmVhdGUgYSBuZXcgUG9pbnQpXG4gKiBAcmV0dXJuIHtQSVhJLlBvaW50fSBBIHBvaW50IG9iamVjdCByZXByZXNlbnRpbmcgdGhlIHBvc2l0aW9uIG9mIHRoaXMgb2JqZWN0XG4gKi9cbkRpc3BsYXlPYmplY3QucHJvdG90eXBlLnRvTG9jYWwgPSBmdW5jdGlvbiAocG9zaXRpb24sIGZyb20sIHBvaW50KVxue1xuICAgIGlmIChmcm9tKVxuICAgIHtcbiAgICAgICAgcG9zaXRpb24gPSBmcm9tLnRvR2xvYmFsKHBvc2l0aW9uKTtcbiAgICB9XG5cbiAgICAvLyB0aGlzIHBhcmVudCBjaGVjayBpcyBmb3IganVzdCBpbiBjYXNlIHRoZSBpdGVtIGlzIGEgcm9vdCBvYmplY3QuXG4gICAgLy8gSWYgaXQgaXMgd2UgbmVlZCB0byBnaXZlIGl0IGEgdGVtcG9yYXJ5IHBhcmVudCBzbyB0aGF0IGRpc3BsYXlPYmplY3RVcGRhdGVUcmFuc2Zvcm0gd29ya3MgY29ycmVjdGx5XG4gICAgLy8gdGhpcyBpcyBtYWlubHkgdG8gYXZvaWQgYSBwYXJlbnQgY2hlY2sgaW4gdGhlIG1haW4gbG9vcC4gRXZlcnkgbGl0dGxlIGhlbHBzIGZvciBwZXJmb3JtYW5jZSA6KVxuICAgIGlmKCF0aGlzLnBhcmVudClcbiAgICB7XG4gICAgICAgIHRoaXMucGFyZW50ID0gX3RlbXBEaXNwbGF5T2JqZWN0UGFyZW50O1xuICAgICAgICB0aGlzLmRpc3BsYXlPYmplY3RVcGRhdGVUcmFuc2Zvcm0oKTtcbiAgICAgICAgdGhpcy5wYXJlbnQgPSBudWxsO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICB0aGlzLmRpc3BsYXlPYmplY3RVcGRhdGVUcmFuc2Zvcm0oKTtcbiAgICB9XG5cbiAgICAvLyBzaW1wbHkgYXBwbHkgdGhlIG1hdHJpeC4uXG4gICAgcmV0dXJuIHRoaXMud29ybGRUcmFuc2Zvcm0uYXBwbHlJbnZlcnNlKHBvc2l0aW9uLCBwb2ludCk7XG59O1xuXG4vKipcbiAqIFJlbmRlcnMgdGhlIG9iamVjdCB1c2luZyB0aGUgV2ViR0wgcmVuZGVyZXJcbiAqXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcn0gVGhlIHJlbmRlcmVyXG4gKiBAcHJpdmF0ZVxuICovXG5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS5yZW5kZXJXZWJHTCA9IGZ1bmN0aW9uIChyZW5kZXJlcikgLy8ganNoaW50IHVudXNlZDpmYWxzZVxue1xuICAgIC8vIE9WRVJXUklURTtcbn07XG5cbi8qKlxuICogUmVuZGVycyB0aGUgb2JqZWN0IHVzaW5nIHRoZSBDYW52YXMgcmVuZGVyZXJcbiAqXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuQ2FudmFzUmVuZGVyZXJ9IFRoZSByZW5kZXJlclxuICogQHByaXZhdGVcbiAqL1xuRGlzcGxheU9iamVjdC5wcm90b3R5cGUucmVuZGVyQ2FudmFzID0gZnVuY3Rpb24gKHJlbmRlcmVyKSAvLyBqc2hpbnQgdW51c2VkOmZhbHNlXG57XG4gICAgLy8gT1ZFUldSSVRFO1xufTtcbi8qKlxuICogVXNlZnVsIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyBhIHRleHR1cmUgb2YgdGhlIGRpc3BsYXkgb2JqZWN0IHRoYXQgY2FuIHRoZW4gYmUgdXNlZCB0byBjcmVhdGUgc3ByaXRlc1xuICogVGhpcyBjYW4gYmUgcXVpdGUgdXNlZnVsIGlmIHlvdXIgZGlzcGxheU9iamVjdCBpcyBzdGF0aWMgLyBjb21wbGljYXRlZCBhbmQgbmVlZHMgdG8gYmUgcmV1c2VkIG11bHRpcGxlIHRpbWVzLlxuICpcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5DYW52YXNSZW5kZXJlcnxQSVhJLldlYkdMUmVuZGVyZXJ9IFRoZSByZW5kZXJlciB1c2VkIHRvIGdlbmVyYXRlIHRoZSB0ZXh0dXJlLlxuICogQHBhcmFtIHNjYWxlTW9kZSB7bnVtYmVyfSBTZWUge0BsaW5rIFBJWEkuU0NBTEVfTU9ERVN9IGZvciBwb3NzaWJsZSB2YWx1ZXNcbiAqIEBwYXJhbSByZXNvbHV0aW9uIHtudW1iZXJ9IFRoZSByZXNvbHV0aW9uIG9mIHRoZSB0ZXh0dXJlIGJlaW5nIGdlbmVyYXRlZFxuICogQHJldHVybiB7UElYSS5UZXh0dXJlfSBhIHRleHR1cmUgb2YgdGhlIGRpc3BsYXkgb2JqZWN0XG4gKi9cbkRpc3BsYXlPYmplY3QucHJvdG90eXBlLmdlbmVyYXRlVGV4dHVyZSA9IGZ1bmN0aW9uIChyZW5kZXJlciwgc2NhbGVNb2RlLCByZXNvbHV0aW9uKVxue1xuICAgIHZhciBib3VuZHMgPSB0aGlzLmdldExvY2FsQm91bmRzKCk7XG5cbiAgICB2YXIgcmVuZGVyVGV4dHVyZSA9IG5ldyBSZW5kZXJUZXh0dXJlKHJlbmRlcmVyLCBib3VuZHMud2lkdGggfCAwLCBib3VuZHMuaGVpZ2h0IHwgMCwgc2NhbGVNb2RlLCByZXNvbHV0aW9uKTtcblxuICAgIF90ZW1wTWF0cml4LnR4ID0gLWJvdW5kcy54O1xuICAgIF90ZW1wTWF0cml4LnR5ID0gLWJvdW5kcy55O1xuXG4gICAgcmVuZGVyVGV4dHVyZS5yZW5kZXIodGhpcywgX3RlbXBNYXRyaXgpO1xuXG4gICAgcmV0dXJuIHJlbmRlclRleHR1cmU7XG59O1xuXG4vKipcbiAqIFNldCB0aGUgcGFyZW50IENvbnRhaW5lciBvZiB0aGlzIERpc3BsYXlPYmplY3RcbiAqXG4gKiBAcGFyYW0gY29udGFpbmVyIHtDb250YWluZXJ9IFRoZSBDb250YWluZXIgdG8gYWRkIHRoaXMgRGlzcGxheU9iamVjdCB0b1xuICogQHJldHVybiB7Q29udGFpbmVyfSBUaGUgQ29udGFpbmVyIHRoYXQgdGhpcyBEaXNwbGF5T2JqZWN0IHdhcyBhZGRlZCB0b1xuICovXG5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS5zZXRQYXJlbnQgPSBmdW5jdGlvbiAoY29udGFpbmVyKVxue1xuICAgIGlmICghY29udGFpbmVyIHx8ICFjb250YWluZXIuYWRkQ2hpbGQpXG4gICAge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3NldFBhcmVudDogQXJndW1lbnQgbXVzdCBiZSBhIENvbnRhaW5lcicpO1xuICAgIH1cblxuICAgIGNvbnRhaW5lci5hZGRDaGlsZCh0aGlzKTtcbiAgICByZXR1cm4gY29udGFpbmVyO1xufTtcblxuLyoqXG4gKiBDb252ZW5pZW5jZSBmdW5jdGlvbiB0byBzZXQgdGhlIHBvc3Rpb24sIHNjYWxlLCBza2V3IGFuZCBwaXZvdCBhdCBvbmNlLlxuICpcbiAqIEBwYXJhbSBbeD0wXSB7bnVtYmVyfSBUaGUgWCBwb3NpdGlvblxuICogQHBhcmFtIFt5PTBdIHtudW1iZXJ9IFRoZSBZIHBvc2l0aW9uXG4gKiBAcGFyYW0gW3NjYWxlWD0xXSB7bnVtYmVyfSBUaGUgWCBzY2FsZSB2YWx1ZVxuICogQHBhcmFtIFtzY2FsZVk9MV0ge251bWJlcn0gVGhlIFkgc2NhbGUgdmFsdWVcbiAqIEBwYXJhbSBbcm90YXRpb249MF0ge251bWJlcn0gVGhlIHJvdGF0aW9uXG4gKiBAcGFyYW0gW3NrZXdYPTBdIHtudW1iZXJ9IFRoZSBYIHNrZXcgdmFsdWVcbiAqIEBwYXJhbSBbc2tld1k9MF0ge251bWJlcn0gVGhlIFkgc2tldyB2YWx1ZVxuICogQHBhcmFtIFtwaXZvdFg9MF0ge251bWJlcn0gVGhlIFggcGl2b3QgdmFsdWVcbiAqIEBwYXJhbSBbcGl2b3RZPTBdIHtudW1iZXJ9IFRoZSBZIHBpdm90IHZhbHVlXG4gKiBAcmV0dXJuIHtQSVhJLkRpc3BsYXlPYmplY3R9XG4gKi9cbkRpc3BsYXlPYmplY3QucHJvdG90eXBlLnNldFRyYW5zZm9ybSA9IGZ1bmN0aW9uKHgsIHksIHNjYWxlWCwgc2NhbGVZLCByb3RhdGlvbiwgc2tld1gsIHNrZXdZLCBwaXZvdFgsIHBpdm90WSkgLy9qc2hpbnQgaWdub3JlOmxpbmVcbntcbiAgICB0aGlzLnBvc2l0aW9uLnggPSB4IHx8IDA7XG4gICAgdGhpcy5wb3NpdGlvbi55ID0geSB8fCAwO1xuICAgIHRoaXMuc2NhbGUueCA9ICFzY2FsZVggPyAxIDogc2NhbGVYO1xuICAgIHRoaXMuc2NhbGUueSA9ICFzY2FsZVkgPyAxIDogc2NhbGVZO1xuICAgIHRoaXMucm90YXRpb24gPSByb3RhdGlvbiB8fCAwO1xuICAgIHRoaXMuc2tldy54ID0gc2tld1ggfHwgMDtcbiAgICB0aGlzLnNrZXcueSA9IHNrZXdZIHx8IDA7XG4gICAgdGhpcy5waXZvdC54ID0gcGl2b3RYIHx8IDA7XG4gICAgdGhpcy5waXZvdC55ID0gcGl2b3RZIHx8IDA7XG4gICAgdGhpcy5kaXJ0eVRyYW5zZm9ybSA9IHRydWU7XG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIEJhc2UgZGVzdHJveSBtZXRob2QgZm9yIGdlbmVyaWMgZGlzcGxheSBvYmplY3RzXG4gKlxuICovXG5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKClcbntcblxuICAgIHRoaXMucG9zaXRpb24gPSBudWxsO1xuICAgIHRoaXMuc2NhbGUgPSBudWxsO1xuICAgIHRoaXMucGl2b3QgPSBudWxsO1xuICAgIHRoaXMuc2tldyA9IG51bGw7XG5cbiAgICB0aGlzLnBhcmVudCA9IG51bGw7XG5cbiAgICB0aGlzLl9ib3VuZHMgPSBudWxsO1xuICAgIHRoaXMuX2N1cnJlbnRCb3VuZHMgPSBudWxsO1xuICAgIHRoaXMuX21hc2sgPSBudWxsO1xuXG4gICAgdGhpcy53b3JsZFRyYW5zZm9ybSA9IG51bGw7XG4gICAgdGhpcy5maWx0ZXJBcmVhID0gbnVsbDtcbn07XG4iLCJ2YXIgQ29udGFpbmVyID0gcmVxdWlyZSgnLi4vZGlzcGxheS9Db250YWluZXInKSxcbiAgICBUZXh0dXJlID0gcmVxdWlyZSgnLi4vdGV4dHVyZXMvVGV4dHVyZScpLFxuICAgIENhbnZhc0J1ZmZlciA9IHJlcXVpcmUoJy4uL3JlbmRlcmVycy9jYW52YXMvdXRpbHMvQ2FudmFzQnVmZmVyJyksXG4gICAgQ2FudmFzR3JhcGhpY3MgPSByZXF1aXJlKCcuLi9yZW5kZXJlcnMvY2FudmFzL3V0aWxzL0NhbnZhc0dyYXBoaWNzJyksXG4gICAgR3JhcGhpY3NEYXRhID0gcmVxdWlyZSgnLi9HcmFwaGljc0RhdGEnKSxcbiAgICBtYXRoID0gcmVxdWlyZSgnLi4vbWF0aCcpLFxuICAgIENPTlNUID0gcmVxdWlyZSgnLi4vY29uc3QnKSxcbiAgICB0ZW1wUG9pbnQgPSBuZXcgbWF0aC5Qb2ludCgpO1xuXG4vKipcbiAqIFRoZSBHcmFwaGljcyBjbGFzcyBjb250YWlucyBtZXRob2RzIHVzZWQgdG8gZHJhdyBwcmltaXRpdmUgc2hhcGVzIHN1Y2ggYXMgbGluZXMsIGNpcmNsZXMgYW5kXG4gKiByZWN0YW5nbGVzIHRvIHRoZSBkaXNwbGF5LCBhbmQgdG8gY29sb3IgYW5kIGZpbGwgdGhlbS5cbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQ29udGFpbmVyXG4gKiBAbWVtYmVyb2YgUElYSVxuICovXG5mdW5jdGlvbiBHcmFwaGljcygpXG57XG4gICAgQ29udGFpbmVyLmNhbGwodGhpcyk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYWxwaGEgdmFsdWUgdXNlZCB3aGVuIGZpbGxpbmcgdGhlIEdyYXBoaWNzIG9iamVjdC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAxXG4gICAgICovXG4gICAgdGhpcy5maWxsQWxwaGEgPSAxO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHdpZHRoICh0aGlja25lc3MpIG9mIGFueSBsaW5lcyBkcmF3bi5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAwXG4gICAgICovXG4gICAgdGhpcy5saW5lV2lkdGggPSAwO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGNvbG9yIG9mIGFueSBsaW5lcyBkcmF3bi5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge3N0cmluZ31cbiAgICAgKiBAZGVmYXVsdCAwXG4gICAgICovXG4gICAgdGhpcy5saW5lQ29sb3IgPSAwO1xuXG4gICAgLyoqXG4gICAgICogR3JhcGhpY3MgZGF0YVxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5HcmFwaGljc0RhdGFbXX1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuZ3JhcGhpY3NEYXRhID0gW107XG5cbiAgICAvKipcbiAgICAgKiBUaGUgdGludCBhcHBsaWVkIHRvIHRoZSBncmFwaGljIHNoYXBlLiBUaGlzIGlzIGEgaGV4IHZhbHVlLiBBcHBseSBhIHZhbHVlIG9mIDB4RkZGRkZGIHRvIHJlc2V0IHRoZSB0aW50LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDB4RkZGRkZGXG4gICAgICovXG4gICAgdGhpcy50aW50ID0gMHhGRkZGRkY7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgcHJldmlvdXMgdGludCBhcHBsaWVkIHRvIHRoZSBncmFwaGljIHNoYXBlLiBVc2VkIHRvIGNvbXBhcmUgdG8gdGhlIGN1cnJlbnQgdGludCBhbmQgY2hlY2sgaWYgdGhlcmVzIGNoYW5nZS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBkZWZhdWx0IDB4RkZGRkZGXG4gICAgICovXG4gICAgdGhpcy5fcHJldlRpbnQgPSAweEZGRkZGRjtcblxuICAgIC8qKlxuICAgICAqIFRoZSBibGVuZCBtb2RlIHRvIGJlIGFwcGxpZWQgdG8gdGhlIGdyYXBoaWMgc2hhcGUuIEFwcGx5IGEgdmFsdWUgb2YgYFBJWEkuQkxFTkRfTU9ERVMuTk9STUFMYCB0byByZXNldCB0aGUgYmxlbmQgbW9kZS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCBQSVhJLkJMRU5EX01PREVTLk5PUk1BTDtcbiAgICAgKiBAc2VlIFBJWEkuQkxFTkRfTU9ERVNcbiAgICAgKi9cbiAgICB0aGlzLmJsZW5kTW9kZSA9IENPTlNULkJMRU5EX01PREVTLk5PUk1BTDtcblxuICAgIC8qKlxuICAgICAqIEN1cnJlbnQgcGF0aFxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5HcmFwaGljc0RhdGF9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLmN1cnJlbnRQYXRoID0gbnVsbDtcblxuICAgIC8qKlxuICAgICAqIEFycmF5IGNvbnRhaW5pbmcgc29tZSBXZWJHTC1yZWxhdGVkIHByb3BlcnRpZXMgdXNlZCBieSB0aGUgV2ViR0wgcmVuZGVyZXIuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtvYmplY3Q8bnVtYmVyLCBvYmplY3Q+fVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgLy8gVE9ETyAtIF93ZWJnbCBzaG91bGQgdXNlIGEgcHJvdG90eXBlIG9iamVjdCwgbm90IGEgcmFuZG9tIHVuZG9jdW1lbnRlZCBvYmplY3QuLi5cbiAgICB0aGlzLl93ZWJHTCA9IHt9O1xuXG4gICAgLyoqXG4gICAgICogV2hldGhlciB0aGlzIHNoYXBlIGlzIGJlaW5nIHVzZWQgYXMgYSBtYXNrLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKi9cbiAgICB0aGlzLmlzTWFzayA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGJvdW5kcycgcGFkZGluZyB1c2VkIGZvciBib3VuZHMgY2FsY3VsYXRpb24uXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy5ib3VuZHNQYWRkaW5nID0gMDtcblxuICAgIC8qKlxuICAgICAqIEEgY2FjaGUgb2YgdGhlIGxvY2FsIGJvdW5kcyB0byBwcmV2ZW50IHJlY2FsY3VsYXRpb24uXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlJlY3RhbmdsZX1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX2xvY2FsQm91bmRzID0gbmV3IG1hdGguUmVjdGFuZ2xlKDAsMCwxLDEpO1xuXG4gICAgLyoqXG4gICAgICogVXNlZCB0byBkZXRlY3QgaWYgdGhlIGdyYXBoaWNzIG9iamVjdCBoYXMgY2hhbmdlZC4gSWYgdGhpcyBpcyBzZXQgdG8gdHJ1ZSB0aGVuIHRoZSBncmFwaGljc1xuICAgICAqIG9iamVjdCB3aWxsIGJlIHJlY2FsY3VsYXRlZC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLmRpcnR5ID0gdHJ1ZTtcblxuICAgIC8qKlxuICAgICAqIFVzZWQgdG8gZGV0ZWN0IGlmIHRoZSBXZWJHTCBncmFwaGljcyBvYmplY3QgaGFzIGNoYW5nZWQuIElmIHRoaXMgaXMgc2V0IHRvIHRydWUgdGhlbiB0aGVcbiAgICAgKiBncmFwaGljcyBvYmplY3Qgd2lsbCBiZSByZWNhbGN1bGF0ZWQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5nbERpcnR5ID0gZmFsc2U7XG5cbiAgICB0aGlzLmJvdW5kc0RpcnR5ID0gdHJ1ZTtcblxuICAgIC8qKlxuICAgICAqIFVzZWQgdG8gZGV0ZWN0IGlmIHRoZSBjYWNoZWQgc3ByaXRlIG9iamVjdCBuZWVkcyB0byBiZSB1cGRhdGVkLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuY2FjaGVkU3ByaXRlRGlydHkgPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIFdoZW4gY2FjaGVBc0JpdG1hcCBpcyBzZXQgdG8gdHJ1ZSB0aGUgZ3JhcGhpY3Mgb2JqZWN0IHdpbGwgYmUgcmVuZGVyZWQgYXMgaWYgaXQgd2FzIGEgc3ByaXRlLlxuICAgICAqIFRoaXMgaXMgdXNlZnVsIGlmIHlvdXIgZ3JhcGhpY3MgZWxlbWVudCBkb2VzIG5vdCBjaGFuZ2Ugb2Z0ZW4sIGFzIGl0IHdpbGwgc3BlZWQgdXAgdGhlIHJlbmRlcmluZ1xuICAgICAqIG9mIHRoZSBvYmplY3QgaW4gZXhjaGFuZ2UgZm9yIHRha2luZyB1cCB0ZXh0dXJlIG1lbW9yeS4gSXQgaXMgYWxzbyB1c2VmdWwgaWYgeW91IG5lZWQgdGhlIGdyYXBoaWNzXG4gICAgICogb2JqZWN0IHRvIGJlIGFudGktYWxpYXNlZCwgYmVjYXVzZSBpdCB3aWxsIGJlIHJlbmRlcmVkIHVzaW5nIGNhbnZhcy4gVGhpcyBpcyBub3QgcmVjb21tZW5kZWQgaWZcbiAgICAgKiB5b3UgYXJlIGNvbnN0YW50bHkgcmVkcmF3aW5nIHRoZSBncmFwaGljcyBlbGVtZW50LlxuICAgICAqXG4gICAgICogQG5hbWUgY2FjaGVBc0JpdG1hcFxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICogQG1lbWJlcm9mIFBJWEkuR3JhcGhpY3MjXG4gICAgICogQGRlZmF1bHQgZmFsc2VcbiAgICAgKi9cbn1cblxuLy8gY29uc3RydWN0b3JcbkdyYXBoaWNzLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoQ29udGFpbmVyLnByb3RvdHlwZSk7XG5HcmFwaGljcy5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBHcmFwaGljcztcbm1vZHVsZS5leHBvcnRzID0gR3JhcGhpY3M7XG5cbi8qKlxuICogQ3JlYXRlcyBhIG5ldyBHcmFwaGljcyBvYmplY3Qgd2l0aCB0aGUgc2FtZSB2YWx1ZXMgYXMgdGhpcyBvbmUuXG4gKiBOb3RlIHRoYXQgdGhlIG9ubHkgdGhlIHByb3BlcnRpZXMgb2YgdGhlIG9iamVjdCBhcmUgY2xvbmVkLCBub3QgaXRzIHRyYW5zZm9ybSAocG9zaXRpb24sc2NhbGUsZXRjKVxuICpcbiAqIEByZXR1cm4ge1BJWEkuR3JhcGhpY3N9XG4gKi9cbkdyYXBoaWNzLnByb3RvdHlwZS5jbG9uZSA9IGZ1bmN0aW9uICgpXG57XG4gICAgdmFyIGNsb25lID0gbmV3IEdyYXBoaWNzKCk7XG5cbiAgICBjbG9uZS5yZW5kZXJhYmxlICAgID0gdGhpcy5yZW5kZXJhYmxlO1xuICAgIGNsb25lLmZpbGxBbHBoYSAgICAgPSB0aGlzLmZpbGxBbHBoYTtcbiAgICBjbG9uZS5saW5lV2lkdGggICAgID0gdGhpcy5saW5lV2lkdGg7XG4gICAgY2xvbmUubGluZUNvbG9yICAgICA9IHRoaXMubGluZUNvbG9yO1xuICAgIGNsb25lLnRpbnQgICAgICAgICAgPSB0aGlzLnRpbnQ7XG4gICAgY2xvbmUuYmxlbmRNb2RlICAgICA9IHRoaXMuYmxlbmRNb2RlO1xuICAgIGNsb25lLmlzTWFzayAgICAgICAgPSB0aGlzLmlzTWFzaztcbiAgICBjbG9uZS5ib3VuZHNQYWRkaW5nID0gdGhpcy5ib3VuZHNQYWRkaW5nO1xuICAgIGNsb25lLmRpcnR5ICAgICAgICAgPSB0cnVlO1xuICAgIGNsb25lLmdsRGlydHkgICAgICAgPSB0cnVlO1xuICAgIGNsb25lLmNhY2hlZFNwcml0ZURpcnR5ID0gdGhpcy5jYWNoZWRTcHJpdGVEaXJ0eTtcblxuICAgIC8vIGNvcHkgZ3JhcGhpY3MgZGF0YVxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5ncmFwaGljc0RhdGEubGVuZ3RoOyArK2kpXG4gICAge1xuICAgICAgICBjbG9uZS5ncmFwaGljc0RhdGEucHVzaCh0aGlzLmdyYXBoaWNzRGF0YVtpXS5jbG9uZSgpKTtcbiAgICB9XG5cbiAgICBjbG9uZS5jdXJyZW50UGF0aCA9IGNsb25lLmdyYXBoaWNzRGF0YVtjbG9uZS5ncmFwaGljc0RhdGEubGVuZ3RoIC0gMV07XG5cbiAgICBjbG9uZS51cGRhdGVMb2NhbEJvdW5kcygpO1xuXG4gICAgcmV0dXJuIGNsb25lO1xufTtcblxuLyoqXG4gKiBTcGVjaWZpZXMgdGhlIGxpbmUgc3R5bGUgdXNlZCBmb3Igc3Vic2VxdWVudCBjYWxscyB0byBHcmFwaGljcyBtZXRob2RzIHN1Y2ggYXMgdGhlIGxpbmVUbygpIG1ldGhvZCBvciB0aGUgZHJhd0NpcmNsZSgpIG1ldGhvZC5cbiAqXG4gKiBAcGFyYW0gbGluZVdpZHRoIHtudW1iZXJ9IHdpZHRoIG9mIHRoZSBsaW5lIHRvIGRyYXcsIHdpbGwgdXBkYXRlIHRoZSBvYmplY3RzIHN0b3JlZCBzdHlsZVxuICogQHBhcmFtIGNvbG9yIHtudW1iZXJ9IGNvbG9yIG9mIHRoZSBsaW5lIHRvIGRyYXcsIHdpbGwgdXBkYXRlIHRoZSBvYmplY3RzIHN0b3JlZCBzdHlsZVxuICogQHBhcmFtIGFscGhhIHtudW1iZXJ9IGFscGhhIG9mIHRoZSBsaW5lIHRvIGRyYXcsIHdpbGwgdXBkYXRlIHRoZSBvYmplY3RzIHN0b3JlZCBzdHlsZVxuICogQHJldHVybiB7UElYSS5HcmFwaGljc31cbiAqL1xuR3JhcGhpY3MucHJvdG90eXBlLmxpbmVTdHlsZSA9IGZ1bmN0aW9uIChsaW5lV2lkdGgsIGNvbG9yLCBhbHBoYSlcbntcbiAgICB0aGlzLmxpbmVXaWR0aCA9IGxpbmVXaWR0aCB8fCAwO1xuICAgIHRoaXMubGluZUNvbG9yID0gY29sb3IgfHwgMDtcbiAgICB0aGlzLmxpbmVBbHBoYSA9IChhbHBoYSA9PT0gdW5kZWZpbmVkKSA/IDEgOiBhbHBoYTtcblxuICAgIGlmICh0aGlzLmN1cnJlbnRQYXRoKVxuICAgIHtcbiAgICAgICAgaWYgKHRoaXMuY3VycmVudFBhdGguc2hhcGUucG9pbnRzLmxlbmd0aClcbiAgICAgICAge1xuICAgICAgICAgICAgLy8gaGFsZndheSB0aHJvdWdoIGEgbGluZT8gc3RhcnQgYSBuZXcgb25lIVxuICAgICAgICAgICAgdmFyIHNoYXBlID0gbmV3IG1hdGguUG9seWdvbih0aGlzLmN1cnJlbnRQYXRoLnNoYXBlLnBvaW50cy5zbGljZSgtMikpO1xuICAgICAgICAgICAgc2hhcGUuY2xvc2VkID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLmRyYXdTaGFwZShzaGFwZSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgICAvLyBvdGhlcndpc2UgaXRzIGVtcHR5IHNvIGxldHMganVzdCBzZXQgdGhlIGxpbmUgcHJvcGVydGllc1xuICAgICAgICAgICAgdGhpcy5jdXJyZW50UGF0aC5saW5lV2lkdGggPSB0aGlzLmxpbmVXaWR0aDtcbiAgICAgICAgICAgIHRoaXMuY3VycmVudFBhdGgubGluZUNvbG9yID0gdGhpcy5saW5lQ29sb3I7XG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRQYXRoLmxpbmVBbHBoYSA9IHRoaXMubGluZUFscGhhO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIE1vdmVzIHRoZSBjdXJyZW50IGRyYXdpbmcgcG9zaXRpb24gdG8geCwgeS5cbiAqXG4gKiBAcGFyYW0geCB7bnVtYmVyfSB0aGUgWCBjb29yZGluYXRlIHRvIG1vdmUgdG9cbiAqIEBwYXJhbSB5IHtudW1iZXJ9IHRoZSBZIGNvb3JkaW5hdGUgdG8gbW92ZSB0b1xuICogQHJldHVybiB7UElYSS5HcmFwaGljc31cbiAgKi9cbkdyYXBoaWNzLnByb3RvdHlwZS5tb3ZlVG8gPSBmdW5jdGlvbiAoeCwgeSlcbntcbiAgICB2YXIgc2hhcGUgPSBuZXcgbWF0aC5Qb2x5Z29uKFt4LHldKTtcbiAgICBzaGFwZS5jbG9zZWQgPSBmYWxzZTtcbiAgICB0aGlzLmRyYXdTaGFwZShzaGFwZSk7XG5cbiAgICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogRHJhd3MgYSBsaW5lIHVzaW5nIHRoZSBjdXJyZW50IGxpbmUgc3R5bGUgZnJvbSB0aGUgY3VycmVudCBkcmF3aW5nIHBvc2l0aW9uIHRvICh4LCB5KTtcbiAqIFRoZSBjdXJyZW50IGRyYXdpbmcgcG9zaXRpb24gaXMgdGhlbiBzZXQgdG8gKHgsIHkpLlxuICpcbiAqIEBwYXJhbSB4IHtudW1iZXJ9IHRoZSBYIGNvb3JkaW5hdGUgdG8gZHJhdyB0b1xuICogQHBhcmFtIHkge251bWJlcn0gdGhlIFkgY29vcmRpbmF0ZSB0byBkcmF3IHRvXG4gKiBAcmV0dXJuIHtQSVhJLkdyYXBoaWNzfVxuICovXG5HcmFwaGljcy5wcm90b3R5cGUubGluZVRvID0gZnVuY3Rpb24gKHgsIHkpXG57XG4gICAgdGhpcy5jdXJyZW50UGF0aC5zaGFwZS5wb2ludHMucHVzaCh4LCB5KTtcbiAgICB0aGlzLmRpcnR5ID0gdHJ1ZTtcblxuICAgIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBDYWxjdWxhdGUgdGhlIHBvaW50cyBmb3IgYSBxdWFkcmF0aWMgYmV6aWVyIGN1cnZlIGFuZCB0aGVuIGRyYXdzIGl0LlxuICogQmFzZWQgb246IGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vcXVlc3Rpb25zLzc4NTA5Ny9ob3ctZG8taS1pbXBsZW1lbnQtYS1iZXppZXItY3VydmUtaW4tY1xuICpcbiAqIEBwYXJhbSBjcFgge251bWJlcn0gQ29udHJvbCBwb2ludCB4XG4gKiBAcGFyYW0gY3BZIHtudW1iZXJ9IENvbnRyb2wgcG9pbnQgeVxuICogQHBhcmFtIHRvWCB7bnVtYmVyfSBEZXN0aW5hdGlvbiBwb2ludCB4XG4gKiBAcGFyYW0gdG9ZIHtudW1iZXJ9IERlc3RpbmF0aW9uIHBvaW50IHlcbiAqIEByZXR1cm4ge1BJWEkuR3JhcGhpY3N9XG4gKi9cbkdyYXBoaWNzLnByb3RvdHlwZS5xdWFkcmF0aWNDdXJ2ZVRvID0gZnVuY3Rpb24gKGNwWCwgY3BZLCB0b1gsIHRvWSlcbntcbiAgICBpZiAodGhpcy5jdXJyZW50UGF0aClcbiAgICB7XG4gICAgICAgIGlmICh0aGlzLmN1cnJlbnRQYXRoLnNoYXBlLnBvaW50cy5sZW5ndGggPT09IDApXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuY3VycmVudFBhdGguc2hhcGUucG9pbnRzID0gWzAsIDBdO1xuICAgICAgICB9XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHRoaXMubW92ZVRvKDAsMCk7XG4gICAgfVxuXG4gICAgdmFyIHhhLFxuICAgICAgICB5YSxcbiAgICAgICAgbiA9IDIwLFxuICAgICAgICBwb2ludHMgPSB0aGlzLmN1cnJlbnRQYXRoLnNoYXBlLnBvaW50cztcblxuICAgIGlmIChwb2ludHMubGVuZ3RoID09PSAwKVxuICAgIHtcbiAgICAgICAgdGhpcy5tb3ZlVG8oMCwgMCk7XG4gICAgfVxuXG4gICAgdmFyIGZyb21YID0gcG9pbnRzW3BvaW50cy5sZW5ndGgtMl07XG4gICAgdmFyIGZyb21ZID0gcG9pbnRzW3BvaW50cy5sZW5ndGgtMV07XG5cbiAgICB2YXIgaiA9IDA7XG4gICAgZm9yICh2YXIgaSA9IDE7IGkgPD0gbjsgKytpKVxuICAgIHtcbiAgICAgICAgaiA9IGkgLyBuO1xuXG4gICAgICAgIHhhID0gZnJvbVggKyAoIChjcFggLSBmcm9tWCkgKiBqICk7XG4gICAgICAgIHlhID0gZnJvbVkgKyAoIChjcFkgLSBmcm9tWSkgKiBqICk7XG5cbiAgICAgICAgcG9pbnRzLnB1c2goIHhhICsgKCAoKGNwWCArICggKHRvWCAtIGNwWCkgKiBqICkpIC0geGEpICogaiApLFxuICAgICAgICAgICAgICAgICAgICAgeWEgKyAoICgoY3BZICsgKCAodG9ZIC0gY3BZKSAqIGogKSkgLSB5YSkgKiBqICkgKTtcbiAgICB9XG5cbiAgICB0aGlzLmRpcnR5ID0gdGhpcy5ib3VuZHNEaXJ0eSA9IHRydWU7XG5cbiAgICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogQ2FsY3VsYXRlIHRoZSBwb2ludHMgZm9yIGEgYmV6aWVyIGN1cnZlIGFuZCB0aGVuIGRyYXdzIGl0LlxuICpcbiAqIEBwYXJhbSBjcFgge251bWJlcn0gQ29udHJvbCBwb2ludCB4XG4gKiBAcGFyYW0gY3BZIHtudW1iZXJ9IENvbnRyb2wgcG9pbnQgeVxuICogQHBhcmFtIGNwWDIge251bWJlcn0gU2Vjb25kIENvbnRyb2wgcG9pbnQgeFxuICogQHBhcmFtIGNwWTIge251bWJlcn0gU2Vjb25kIENvbnRyb2wgcG9pbnQgeVxuICogQHBhcmFtIHRvWCB7bnVtYmVyfSBEZXN0aW5hdGlvbiBwb2ludCB4XG4gKiBAcGFyYW0gdG9ZIHtudW1iZXJ9IERlc3RpbmF0aW9uIHBvaW50IHlcbiAqIEByZXR1cm4ge1BJWEkuR3JhcGhpY3N9XG4gKi9cbkdyYXBoaWNzLnByb3RvdHlwZS5iZXppZXJDdXJ2ZVRvID0gZnVuY3Rpb24gKGNwWCwgY3BZLCBjcFgyLCBjcFkyLCB0b1gsIHRvWSlcbntcbiAgICBpZiAodGhpcy5jdXJyZW50UGF0aClcbiAgICB7XG4gICAgICAgIGlmICh0aGlzLmN1cnJlbnRQYXRoLnNoYXBlLnBvaW50cy5sZW5ndGggPT09IDApXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuY3VycmVudFBhdGguc2hhcGUucG9pbnRzID0gWzAsIDBdO1xuICAgICAgICB9XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHRoaXMubW92ZVRvKDAsMCk7XG4gICAgfVxuXG4gICAgdmFyIG4gPSAyMCxcbiAgICAgICAgZHQsXG4gICAgICAgIGR0MixcbiAgICAgICAgZHQzLFxuICAgICAgICB0MixcbiAgICAgICAgdDMsXG4gICAgICAgIHBvaW50cyA9IHRoaXMuY3VycmVudFBhdGguc2hhcGUucG9pbnRzO1xuXG4gICAgdmFyIGZyb21YID0gcG9pbnRzW3BvaW50cy5sZW5ndGgtMl07XG4gICAgdmFyIGZyb21ZID0gcG9pbnRzW3BvaW50cy5sZW5ndGgtMV07XG5cbiAgICB2YXIgaiA9IDA7XG5cbiAgICBmb3IgKHZhciBpID0gMTsgaSA8PSBuOyArK2kpXG4gICAge1xuICAgICAgICBqID0gaSAvIG47XG5cbiAgICAgICAgZHQgPSAoMSAtIGopO1xuICAgICAgICBkdDIgPSBkdCAqIGR0O1xuICAgICAgICBkdDMgPSBkdDIgKiBkdDtcblxuICAgICAgICB0MiA9IGogKiBqO1xuICAgICAgICB0MyA9IHQyICogajtcblxuICAgICAgICBwb2ludHMucHVzaCggZHQzICogZnJvbVggKyAzICogZHQyICogaiAqIGNwWCArIDMgKiBkdCAqIHQyICogY3BYMiArIHQzICogdG9YLFxuICAgICAgICAgICAgICAgICAgICAgZHQzICogZnJvbVkgKyAzICogZHQyICogaiAqIGNwWSArIDMgKiBkdCAqIHQyICogY3BZMiArIHQzICogdG9ZKTtcbiAgICB9XG5cbiAgICB0aGlzLmRpcnR5ID0gdGhpcy5ib3VuZHNEaXJ0eSA9IHRydWU7XG5cbiAgICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogVGhlIGFyY1RvKCkgbWV0aG9kIGNyZWF0ZXMgYW4gYXJjL2N1cnZlIGJldHdlZW4gdHdvIHRhbmdlbnRzIG9uIHRoZSBjYW52YXMuXG4gKlxuICogXCJib3Jyb3dlZFwiIGZyb20gaHR0cHM6Ly9jb2RlLmdvb2dsZS5jb20vcC9meGNhbnZhcy8gLSB0aGFua3MgZ29vZ2xlIVxuICpcbiAqIEBwYXJhbSB4MSB7bnVtYmVyfSBUaGUgeC1jb29yZGluYXRlIG9mIHRoZSBiZWdpbm5pbmcgb2YgdGhlIGFyY1xuICogQHBhcmFtIHkxIHtudW1iZXJ9IFRoZSB5LWNvb3JkaW5hdGUgb2YgdGhlIGJlZ2lubmluZyBvZiB0aGUgYXJjXG4gKiBAcGFyYW0geDIge251bWJlcn0gVGhlIHgtY29vcmRpbmF0ZSBvZiB0aGUgZW5kIG9mIHRoZSBhcmNcbiAqIEBwYXJhbSB5MiB7bnVtYmVyfSBUaGUgeS1jb29yZGluYXRlIG9mIHRoZSBlbmQgb2YgdGhlIGFyY1xuICogQHBhcmFtIHJhZGl1cyB7bnVtYmVyfSBUaGUgcmFkaXVzIG9mIHRoZSBhcmNcbiAqIEByZXR1cm4ge1BJWEkuR3JhcGhpY3N9XG4gKi9cbkdyYXBoaWNzLnByb3RvdHlwZS5hcmNUbyA9IGZ1bmN0aW9uICh4MSwgeTEsIHgyLCB5MiwgcmFkaXVzKVxue1xuICAgIGlmICh0aGlzLmN1cnJlbnRQYXRoKVxuICAgIHtcbiAgICAgICAgaWYgKHRoaXMuY3VycmVudFBhdGguc2hhcGUucG9pbnRzLmxlbmd0aCA9PT0gMClcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5jdXJyZW50UGF0aC5zaGFwZS5wb2ludHMucHVzaCh4MSwgeTEpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHRoaXMubW92ZVRvKHgxLCB5MSk7XG4gICAgfVxuXG4gICAgdmFyIHBvaW50cyA9IHRoaXMuY3VycmVudFBhdGguc2hhcGUucG9pbnRzLFxuICAgICAgICBmcm9tWCA9IHBvaW50c1twb2ludHMubGVuZ3RoLTJdLFxuICAgICAgICBmcm9tWSA9IHBvaW50c1twb2ludHMubGVuZ3RoLTFdLFxuICAgICAgICBhMSA9IGZyb21ZIC0geTEsXG4gICAgICAgIGIxID0gZnJvbVggLSB4MSxcbiAgICAgICAgYTIgPSB5MiAgIC0geTEsXG4gICAgICAgIGIyID0geDIgICAtIHgxLFxuICAgICAgICBtbSA9IE1hdGguYWJzKGExICogYjIgLSBiMSAqIGEyKTtcblxuICAgIGlmIChtbSA8IDEuMGUtOCB8fCByYWRpdXMgPT09IDApXG4gICAge1xuICAgICAgICBpZiAocG9pbnRzW3BvaW50cy5sZW5ndGgtMl0gIT09IHgxIHx8IHBvaW50c1twb2ludHMubGVuZ3RoLTFdICE9PSB5MSlcbiAgICAgICAge1xuICAgICAgICAgICAgcG9pbnRzLnB1c2goeDEsIHkxKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICB2YXIgZGQgPSBhMSAqIGExICsgYjEgKiBiMSxcbiAgICAgICAgICAgIGNjID0gYTIgKiBhMiArIGIyICogYjIsXG4gICAgICAgICAgICB0dCA9IGExICogYTIgKyBiMSAqIGIyLFxuICAgICAgICAgICAgazEgPSByYWRpdXMgKiBNYXRoLnNxcnQoZGQpIC8gbW0sXG4gICAgICAgICAgICBrMiA9IHJhZGl1cyAqIE1hdGguc3FydChjYykgLyBtbSxcbiAgICAgICAgICAgIGoxID0gazEgKiB0dCAvIGRkLFxuICAgICAgICAgICAgajIgPSBrMiAqIHR0IC8gY2MsXG4gICAgICAgICAgICBjeCA9IGsxICogYjIgKyBrMiAqIGIxLFxuICAgICAgICAgICAgY3kgPSBrMSAqIGEyICsgazIgKiBhMSxcbiAgICAgICAgICAgIHB4ID0gYjEgKiAoazIgKyBqMSksXG4gICAgICAgICAgICBweSA9IGExICogKGsyICsgajEpLFxuICAgICAgICAgICAgcXggPSBiMiAqIChrMSArIGoyKSxcbiAgICAgICAgICAgIHF5ID0gYTIgKiAoazEgKyBqMiksXG4gICAgICAgICAgICBzdGFydEFuZ2xlID0gTWF0aC5hdGFuMihweSAtIGN5LCBweCAtIGN4KSxcbiAgICAgICAgICAgIGVuZEFuZ2xlICAgPSBNYXRoLmF0YW4yKHF5IC0gY3ksIHF4IC0gY3gpO1xuXG4gICAgICAgIHRoaXMuYXJjKGN4ICsgeDEsIGN5ICsgeTEsIHJhZGl1cywgc3RhcnRBbmdsZSwgZW5kQW5nbGUsIGIxICogYTIgPiBiMiAqIGExKTtcbiAgICB9XG5cbiAgICB0aGlzLmRpcnR5ID0gdGhpcy5ib3VuZHNEaXJ0eSA9IHRydWU7XG5cbiAgICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogVGhlIGFyYyBtZXRob2QgY3JlYXRlcyBhbiBhcmMvY3VydmUgKHVzZWQgdG8gY3JlYXRlIGNpcmNsZXMsIG9yIHBhcnRzIG9mIGNpcmNsZXMpLlxuICpcbiAqIEBwYXJhbSBjeCB7bnVtYmVyfSBUaGUgeC1jb29yZGluYXRlIG9mIHRoZSBjZW50ZXIgb2YgdGhlIGNpcmNsZVxuICogQHBhcmFtIGN5IHtudW1iZXJ9IFRoZSB5LWNvb3JkaW5hdGUgb2YgdGhlIGNlbnRlciBvZiB0aGUgY2lyY2xlXG4gKiBAcGFyYW0gcmFkaXVzIHtudW1iZXJ9IFRoZSByYWRpdXMgb2YgdGhlIGNpcmNsZVxuICogQHBhcmFtIHN0YXJ0QW5nbGUge251bWJlcn0gVGhlIHN0YXJ0aW5nIGFuZ2xlLCBpbiByYWRpYW5zICgwIGlzIGF0IHRoZSAzIG8nY2xvY2sgcG9zaXRpb24gb2YgdGhlIGFyYydzIGNpcmNsZSlcbiAqIEBwYXJhbSBlbmRBbmdsZSB7bnVtYmVyfSBUaGUgZW5kaW5nIGFuZ2xlLCBpbiByYWRpYW5zXG4gKiBAcGFyYW0gYW50aWNsb2Nrd2lzZSB7Ym9vbGVhbn0gT3B0aW9uYWwuIFNwZWNpZmllcyB3aGV0aGVyIHRoZSBkcmF3aW5nIHNob3VsZCBiZSBjb3VudGVyY2xvY2t3aXNlIG9yIGNsb2Nrd2lzZS4gRmFsc2UgaXMgZGVmYXVsdCwgYW5kIGluZGljYXRlcyBjbG9ja3dpc2UsIHdoaWxlIHRydWUgaW5kaWNhdGVzIGNvdW50ZXItY2xvY2t3aXNlLlxuICogQHJldHVybiB7UElYSS5HcmFwaGljc31cbiAqL1xuR3JhcGhpY3MucHJvdG90eXBlLmFyYyA9IGZ1bmN0aW9uKGN4LCBjeSwgcmFkaXVzLCBzdGFydEFuZ2xlLCBlbmRBbmdsZSwgYW50aWNsb2Nrd2lzZSlcbntcbiAgICBhbnRpY2xvY2t3aXNlID0gYW50aWNsb2Nrd2lzZSB8fCBmYWxzZTtcblxuICAgIGlmIChzdGFydEFuZ2xlID09PSBlbmRBbmdsZSlcbiAgICB7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIGlmKCAhYW50aWNsb2Nrd2lzZSAmJiBlbmRBbmdsZSA8PSBzdGFydEFuZ2xlIClcbiAgICB7XG4gICAgICAgIGVuZEFuZ2xlICs9IE1hdGguUEkgKiAyO1xuICAgIH1cbiAgICBlbHNlIGlmKCBhbnRpY2xvY2t3aXNlICYmIHN0YXJ0QW5nbGUgPD0gZW5kQW5nbGUgKVxuICAgIHtcbiAgICAgICAgc3RhcnRBbmdsZSArPSBNYXRoLlBJICogMjtcbiAgICB9XG5cbiAgICB2YXIgc3dlZXAgPSBhbnRpY2xvY2t3aXNlID8gKHN0YXJ0QW5nbGUgLSBlbmRBbmdsZSkgKiAtMSA6IChlbmRBbmdsZSAtIHN0YXJ0QW5nbGUpO1xuICAgIHZhciBzZWdzID0gIE1hdGguY2VpbChNYXRoLmFicyhzd2VlcCkgLyAoTWF0aC5QSSAqIDIpKSAqIDQwO1xuXG4gICAgaWYoc3dlZXAgPT09IDApXG4gICAge1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICB2YXIgc3RhcnRYID0gY3ggKyBNYXRoLmNvcyhzdGFydEFuZ2xlKSAqIHJhZGl1cztcbiAgICB2YXIgc3RhcnRZID0gY3kgKyBNYXRoLnNpbihzdGFydEFuZ2xlKSAqIHJhZGl1cztcblxuICAgIGlmICh0aGlzLmN1cnJlbnRQYXRoKVxuICAgIHtcbiAgICAgICAgdGhpcy5jdXJyZW50UGF0aC5zaGFwZS5wb2ludHMucHVzaChzdGFydFgsIHN0YXJ0WSk7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHRoaXMubW92ZVRvKHN0YXJ0WCwgc3RhcnRZKTtcbiAgICB9XG5cbiAgICB2YXIgcG9pbnRzID0gdGhpcy5jdXJyZW50UGF0aC5zaGFwZS5wb2ludHM7XG5cbiAgICB2YXIgdGhldGEgPSBzd2VlcC8oc2VncyoyKTtcbiAgICB2YXIgdGhldGEyID0gdGhldGEqMjtcblxuICAgIHZhciBjVGhldGEgPSBNYXRoLmNvcyh0aGV0YSk7XG4gICAgdmFyIHNUaGV0YSA9IE1hdGguc2luKHRoZXRhKTtcblxuICAgIHZhciBzZWdNaW51cyA9IHNlZ3MgLSAxO1xuXG4gICAgdmFyIHJlbWFpbmRlciA9ICggc2VnTWludXMgJSAxICkgLyBzZWdNaW51cztcblxuICAgIGZvcih2YXIgaT0wOyBpPD1zZWdNaW51czsgaSsrKVxuICAgIHtcbiAgICAgICAgdmFyIHJlYWwgPSAgaSArIHJlbWFpbmRlciAqIGk7XG5cblxuICAgICAgICB2YXIgYW5nbGUgPSAoKHRoZXRhKSArIHN0YXJ0QW5nbGUgKyAodGhldGEyICogcmVhbCkpO1xuXG4gICAgICAgIHZhciBjID0gTWF0aC5jb3MoYW5nbGUpO1xuICAgICAgICB2YXIgcyA9IC1NYXRoLnNpbihhbmdsZSk7XG5cbiAgICAgICAgcG9pbnRzLnB1c2goKCAoY1RoZXRhICogIGMpICsgKHNUaGV0YSAqIHMpICkgKiByYWRpdXMgKyBjeCxcbiAgICAgICAgICAgICAgICAgICAgKCAoY1RoZXRhICogLXMpICsgKHNUaGV0YSAqIGMpICkgKiByYWRpdXMgKyBjeSk7XG4gICAgfVxuXG4gICAgdGhpcy5kaXJ0eSA9IHRoaXMuYm91bmRzRGlydHkgPSB0cnVlO1xuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIFNwZWNpZmllcyBhIHNpbXBsZSBvbmUtY29sb3IgZmlsbCB0aGF0IHN1YnNlcXVlbnQgY2FsbHMgdG8gb3RoZXIgR3JhcGhpY3MgbWV0aG9kc1xuICogKHN1Y2ggYXMgbGluZVRvKCkgb3IgZHJhd0NpcmNsZSgpKSB1c2Ugd2hlbiBkcmF3aW5nLlxuICpcbiAqIEBwYXJhbSBjb2xvciB7bnVtYmVyfSB0aGUgY29sb3Igb2YgdGhlIGZpbGxcbiAqIEBwYXJhbSBhbHBoYSB7bnVtYmVyfSB0aGUgYWxwaGEgb2YgdGhlIGZpbGxcbiAqIEByZXR1cm4ge1BJWEkuR3JhcGhpY3N9XG4gKi9cbkdyYXBoaWNzLnByb3RvdHlwZS5iZWdpbkZpbGwgPSBmdW5jdGlvbiAoY29sb3IsIGFscGhhKVxue1xuICAgIHRoaXMuZmlsbGluZyA9IHRydWU7XG4gICAgdGhpcy5maWxsQ29sb3IgPSBjb2xvciB8fCAwO1xuICAgIHRoaXMuZmlsbEFscGhhID0gKGFscGhhID09PSB1bmRlZmluZWQpID8gMSA6IGFscGhhO1xuXG4gICAgaWYgKHRoaXMuY3VycmVudFBhdGgpXG4gICAge1xuICAgICAgICBpZiAodGhpcy5jdXJyZW50UGF0aC5zaGFwZS5wb2ludHMubGVuZ3RoIDw9IDIpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuY3VycmVudFBhdGguZmlsbCA9IHRoaXMuZmlsbGluZztcbiAgICAgICAgICAgIHRoaXMuY3VycmVudFBhdGguZmlsbENvbG9yID0gdGhpcy5maWxsQ29sb3I7XG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRQYXRoLmZpbGxBbHBoYSA9IHRoaXMuZmlsbEFscGhhO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBBcHBsaWVzIGEgZmlsbCB0byB0aGUgbGluZXMgYW5kIHNoYXBlcyB0aGF0IHdlcmUgYWRkZWQgc2luY2UgdGhlIGxhc3QgY2FsbCB0byB0aGUgYmVnaW5GaWxsKCkgbWV0aG9kLlxuICpcbiAqIEByZXR1cm4ge0dyYXBoaWNzfVxuICovXG5HcmFwaGljcy5wcm90b3R5cGUuZW5kRmlsbCA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy5maWxsaW5nID0gZmFsc2U7XG4gICAgdGhpcy5maWxsQ29sb3IgPSBudWxsO1xuICAgIHRoaXMuZmlsbEFscGhhID0gMTtcblxuICAgIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKlxuICogQHBhcmFtIHgge251bWJlcn0gVGhlIFggY29vcmQgb2YgdGhlIHRvcC1sZWZ0IG9mIHRoZSByZWN0YW5nbGVcbiAqIEBwYXJhbSB5IHtudW1iZXJ9IFRoZSBZIGNvb3JkIG9mIHRoZSB0b3AtbGVmdCBvZiB0aGUgcmVjdGFuZ2xlXG4gKiBAcGFyYW0gd2lkdGgge251bWJlcn0gVGhlIHdpZHRoIG9mIHRoZSByZWN0YW5nbGVcbiAqIEBwYXJhbSBoZWlnaHQge251bWJlcn0gVGhlIGhlaWdodCBvZiB0aGUgcmVjdGFuZ2xlXG4gKiBAcmV0dXJuIHtQSVhJLkdyYXBoaWNzfVxuICovXG5HcmFwaGljcy5wcm90b3R5cGUuZHJhd1JlY3QgPSBmdW5jdGlvbiAoIHgsIHksIHdpZHRoLCBoZWlnaHQgKVxue1xuICAgIHRoaXMuZHJhd1NoYXBlKG5ldyBtYXRoLlJlY3RhbmdsZSh4LHksIHdpZHRoLCBoZWlnaHQpKTtcblxuICAgIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKlxuICogQHBhcmFtIHgge251bWJlcn0gVGhlIFggY29vcmQgb2YgdGhlIHRvcC1sZWZ0IG9mIHRoZSByZWN0YW5nbGVcbiAqIEBwYXJhbSB5IHtudW1iZXJ9IFRoZSBZIGNvb3JkIG9mIHRoZSB0b3AtbGVmdCBvZiB0aGUgcmVjdGFuZ2xlXG4gKiBAcGFyYW0gd2lkdGgge251bWJlcn0gVGhlIHdpZHRoIG9mIHRoZSByZWN0YW5nbGVcbiAqIEBwYXJhbSBoZWlnaHQge251bWJlcn0gVGhlIGhlaWdodCBvZiB0aGUgcmVjdGFuZ2xlXG4gKiBAcGFyYW0gcmFkaXVzIHtudW1iZXJ9IFJhZGl1cyBvZiB0aGUgcmVjdGFuZ2xlIGNvcm5lcnNcbiAqIEByZXR1cm4ge1BJWEkuR3JhcGhpY3N9XG4gKi9cbkdyYXBoaWNzLnByb3RvdHlwZS5kcmF3Um91bmRlZFJlY3QgPSBmdW5jdGlvbiAoIHgsIHksIHdpZHRoLCBoZWlnaHQsIHJhZGl1cyApXG57XG4gICAgdGhpcy5kcmF3U2hhcGUobmV3IG1hdGguUm91bmRlZFJlY3RhbmdsZSh4LCB5LCB3aWR0aCwgaGVpZ2h0LCByYWRpdXMpKTtcblxuICAgIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBEcmF3cyBhIGNpcmNsZS5cbiAqXG4gKiBAcGFyYW0geCB7bnVtYmVyfSBUaGUgWCBjb29yZGluYXRlIG9mIHRoZSBjZW50ZXIgb2YgdGhlIGNpcmNsZVxuICogQHBhcmFtIHkge251bWJlcn0gVGhlIFkgY29vcmRpbmF0ZSBvZiB0aGUgY2VudGVyIG9mIHRoZSBjaXJjbGVcbiAqIEBwYXJhbSByYWRpdXMge251bWJlcn0gVGhlIHJhZGl1cyBvZiB0aGUgY2lyY2xlXG4gKiBAcmV0dXJuIHtQSVhJLkdyYXBoaWNzfVxuICovXG5HcmFwaGljcy5wcm90b3R5cGUuZHJhd0NpcmNsZSA9IGZ1bmN0aW9uICh4LCB5LCByYWRpdXMpXG57XG4gICAgdGhpcy5kcmF3U2hhcGUobmV3IG1hdGguQ2lyY2xlKHgseSwgcmFkaXVzKSk7XG5cbiAgICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogRHJhd3MgYW4gZWxsaXBzZS5cbiAqXG4gKiBAcGFyYW0geCB7bnVtYmVyfSBUaGUgWCBjb29yZGluYXRlIG9mIHRoZSBjZW50ZXIgb2YgdGhlIGVsbGlwc2VcbiAqIEBwYXJhbSB5IHtudW1iZXJ9IFRoZSBZIGNvb3JkaW5hdGUgb2YgdGhlIGNlbnRlciBvZiB0aGUgZWxsaXBzZVxuICogQHBhcmFtIHdpZHRoIHtudW1iZXJ9IFRoZSBoYWxmIHdpZHRoIG9mIHRoZSBlbGxpcHNlXG4gKiBAcGFyYW0gaGVpZ2h0IHtudW1iZXJ9IFRoZSBoYWxmIGhlaWdodCBvZiB0aGUgZWxsaXBzZVxuICogQHJldHVybiB7UElYSS5HcmFwaGljc31cbiAqL1xuR3JhcGhpY3MucHJvdG90eXBlLmRyYXdFbGxpcHNlID0gZnVuY3Rpb24gKHgsIHksIHdpZHRoLCBoZWlnaHQpXG57XG4gICAgdGhpcy5kcmF3U2hhcGUobmV3IG1hdGguRWxsaXBzZSh4LCB5LCB3aWR0aCwgaGVpZ2h0KSk7XG5cbiAgICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogRHJhd3MgYSBwb2x5Z29uIHVzaW5nIHRoZSBnaXZlbiBwYXRoLlxuICpcbiAqIEBwYXJhbSBwYXRoIHtudW1iZXJbXXxQSVhJLlBvaW50W119IFRoZSBwYXRoIGRhdGEgdXNlZCB0byBjb25zdHJ1Y3QgdGhlIHBvbHlnb24uXG4gKiBAcmV0dXJuIHtQSVhJLkdyYXBoaWNzfVxuICovXG5HcmFwaGljcy5wcm90b3R5cGUuZHJhd1BvbHlnb24gPSBmdW5jdGlvbiAocGF0aClcbntcbiAgICAvLyBwcmV2ZW50cyBhbiBhcmd1bWVudCBhc3NpZ25tZW50IGRlb3B0XG4gICAgLy8gc2VlIHNlY3Rpb24gMy4xOiBodHRwczovL2dpdGh1Yi5jb20vcGV0a2FhbnRvbm92L2JsdWViaXJkL3dpa2kvT3B0aW1pemF0aW9uLWtpbGxlcnMjMy1tYW5hZ2luZy1hcmd1bWVudHNcbiAgICB2YXIgcG9pbnRzID0gcGF0aDtcblxuICAgIHZhciBjbG9zZWQgPSB0cnVlO1xuXG4gICAgaWYgKHBvaW50cyBpbnN0YW5jZW9mIG1hdGguUG9seWdvbilcbiAgICB7XG4gICAgICAgIGNsb3NlZCA9IHBvaW50cy5jbG9zZWQ7XG4gICAgICAgIHBvaW50cyA9IHBvaW50cy5wb2ludHM7XG4gICAgfVxuXG4gICAgaWYgKCFBcnJheS5pc0FycmF5KHBvaW50cykpXG4gICAge1xuICAgICAgICAvLyBwcmV2ZW50cyBhbiBhcmd1bWVudCBsZWFrIGRlb3B0XG4gICAgICAgIC8vIHNlZSBzZWN0aW9uIDMuMjogaHR0cHM6Ly9naXRodWIuY29tL3BldGthYW50b25vdi9ibHVlYmlyZC93aWtpL09wdGltaXphdGlvbi1raWxsZXJzIzMtbWFuYWdpbmctYXJndW1lbnRzXG4gICAgICAgIHBvaW50cyA9IG5ldyBBcnJheShhcmd1bWVudHMubGVuZ3RoKTtcblxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHBvaW50cy5sZW5ndGg7ICsraSlcbiAgICAgICAge1xuICAgICAgICAgICAgcG9pbnRzW2ldID0gYXJndW1lbnRzW2ldO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgdmFyIHNoYXBlID0gbmV3IG1hdGguUG9seWdvbihwb2ludHMpO1xuICAgIHNoYXBlLmNsb3NlZCA9IGNsb3NlZDtcblxuICAgIHRoaXMuZHJhd1NoYXBlKHNoYXBlKTtcblxuICAgIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBDbGVhcnMgdGhlIGdyYXBoaWNzIHRoYXQgd2VyZSBkcmF3biB0byB0aGlzIEdyYXBoaWNzIG9iamVjdCwgYW5kIHJlc2V0cyBmaWxsIGFuZCBsaW5lIHN0eWxlIHNldHRpbmdzLlxuICpcbiAqIEByZXR1cm4ge1BJWEkuR3JhcGhpY3N9XG4gKi9cbkdyYXBoaWNzLnByb3RvdHlwZS5jbGVhciA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy5saW5lV2lkdGggPSAwO1xuICAgIHRoaXMuZmlsbGluZyA9IGZhbHNlO1xuXG4gICAgdGhpcy5kaXJ0eSA9IHRydWU7XG4gICAgdGhpcy5jbGVhckRpcnR5ID0gdHJ1ZTtcbiAgICB0aGlzLmdyYXBoaWNzRGF0YSA9IFtdO1xuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIFVzZWZ1bCBmdW5jdGlvbiB0aGF0IHJldHVybnMgYSB0ZXh0dXJlIG9mIHRoZSBncmFwaGljcyBvYmplY3QgdGhhdCBjYW4gdGhlbiBiZSB1c2VkIHRvIGNyZWF0ZSBzcHJpdGVzXG4gKiBUaGlzIGNhbiBiZSBxdWl0ZSB1c2VmdWwgaWYgeW91ciBnZW9tZXRyeSBpcyBjb21wbGljYXRlZCBhbmQgbmVlZHMgdG8gYmUgcmV1c2VkIG11bHRpcGxlIHRpbWVzLlxuICpcbiAqIEBwYXJhbSByZXNvbHV0aW9uIHtudW1iZXJ9IFRoZSByZXNvbHV0aW9uIG9mIHRoZSB0ZXh0dXJlIGJlaW5nIGdlbmVyYXRlZFxuICogQHBhcmFtIHNjYWxlTW9kZSB7bnVtYmVyfSBTaG91bGQgYmUgb25lIG9mIHRoZSBzY2FsZU1vZGUgY29uc3RzXG4gKiBAcmV0dXJuIHtQSVhJLlRleHR1cmV9IGEgdGV4dHVyZSBvZiB0aGUgZ3JhcGhpY3Mgb2JqZWN0XG4gKi9cbkdyYXBoaWNzLnByb3RvdHlwZS5nZW5lcmF0ZVRleHR1cmUgPSBmdW5jdGlvbiAocmVuZGVyZXIsIHJlc29sdXRpb24sIHNjYWxlTW9kZSlcbntcblxuICAgIHJlc29sdXRpb24gPSByZXNvbHV0aW9uIHx8IDE7XG5cbiAgICB2YXIgYm91bmRzID0gdGhpcy5nZXRMb2NhbEJvdW5kcygpO1xuXG4gICAgdmFyIGNhbnZhc0J1ZmZlciA9IG5ldyBDYW52YXNCdWZmZXIoYm91bmRzLndpZHRoICogcmVzb2x1dGlvbiwgYm91bmRzLmhlaWdodCAqIHJlc29sdXRpb24pO1xuXG4gICAgdmFyIHRleHR1cmUgPSBUZXh0dXJlLmZyb21DYW52YXMoY2FudmFzQnVmZmVyLmNhbnZhcywgc2NhbGVNb2RlKTtcbiAgICB0ZXh0dXJlLmJhc2VUZXh0dXJlLnJlc29sdXRpb24gPSByZXNvbHV0aW9uO1xuXG4gICAgY2FudmFzQnVmZmVyLmNvbnRleHQuc2NhbGUocmVzb2x1dGlvbiwgcmVzb2x1dGlvbik7XG5cbiAgICBjYW52YXNCdWZmZXIuY29udGV4dC50cmFuc2xhdGUoLWJvdW5kcy54LC1ib3VuZHMueSk7XG5cbiAgICBDYW52YXNHcmFwaGljcy5yZW5kZXJHcmFwaGljcyh0aGlzLCBjYW52YXNCdWZmZXIuY29udGV4dCk7XG5cbiAgICByZXR1cm4gdGV4dHVyZTtcbn07XG5cbi8qKlxuICogUmVuZGVycyB0aGUgb2JqZWN0IHVzaW5nIHRoZSBXZWJHTCByZW5kZXJlclxuICpcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5XZWJHTFJlbmRlcmVyfVxuICogQHByaXZhdGVcbiAqL1xuR3JhcGhpY3MucHJvdG90eXBlLl9yZW5kZXJXZWJHTCA9IGZ1bmN0aW9uIChyZW5kZXJlcilcbntcbiAgICAvLyBpZiB0aGUgc3ByaXRlIGlzIG5vdCB2aXNpYmxlIG9yIHRoZSBhbHBoYSBpcyAwIHRoZW4gbm8gbmVlZCB0byByZW5kZXIgdGhpcyBlbGVtZW50XG5cbiAgICBpZiAodGhpcy5nbERpcnR5KVxuICAgIHtcbiAgICAgICAgdGhpcy5kaXJ0eSA9IHRydWU7XG4gICAgICAgIHRoaXMuZ2xEaXJ0eSA9IGZhbHNlO1xuICAgIH1cblxuICAgIHJlbmRlcmVyLnNldE9iamVjdFJlbmRlcmVyKHJlbmRlcmVyLnBsdWdpbnMuZ3JhcGhpY3MpO1xuICAgIHJlbmRlcmVyLnBsdWdpbnMuZ3JhcGhpY3MucmVuZGVyKHRoaXMpO1xuXG59O1xuXG4vKipcbiAqIFJlbmRlcnMgdGhlIG9iamVjdCB1c2luZyB0aGUgQ2FudmFzIHJlbmRlcmVyXG4gKlxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLkNhbnZhc1JlbmRlcmVyfVxuICogQHByaXZhdGVcbiAqL1xuR3JhcGhpY3MucHJvdG90eXBlLl9yZW5kZXJDYW52YXMgPSBmdW5jdGlvbiAocmVuZGVyZXIpXG57XG4gICAgaWYgKHRoaXMuaXNNYXNrID09PSB0cnVlKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIGlmIHRoZSB0aW50IGhhcyBjaGFuZ2VkLCBzZXQgdGhlIGdyYXBoaWNzIG9iamVjdCB0byBkaXJ0eS5cbiAgICBpZiAodGhpcy5fcHJldlRpbnQgIT09IHRoaXMudGludCkge1xuICAgICAgICB0aGlzLmRpcnR5ID0gdHJ1ZTtcbiAgICB9XG5cbiAgICAvLyB0aGlzIGNvZGUgbWF5IHN0aWxsIGJlIG5lZWRlZCBzbyBsZWF2aW5nIGZvciBub3cuLlxuICAgIC8vXG4gICAgLypcbiAgICBpZiAodGhpcy5fY2FjaGVBc0JpdG1hcClcbiAgICB7XG4gICAgICAgIGlmICh0aGlzLmRpcnR5IHx8IHRoaXMuY2FjaGVkU3ByaXRlRGlydHkpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuX2dlbmVyYXRlQ2FjaGVkU3ByaXRlKCk7XG5cbiAgICAgICAgICAgIC8vIHdlIHdpbGwgYWxzbyBuZWVkIHRvIHVwZGF0ZSB0aGUgdGV4dHVyZVxuICAgICAgICAgICAgdGhpcy51cGRhdGVDYWNoZWRTcHJpdGVUZXh0dXJlKCk7XG5cbiAgICAgICAgICAgIHRoaXMuY2FjaGVkU3ByaXRlRGlydHkgPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMuZGlydHkgPSBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX2NhY2hlZFNwcml0ZS5hbHBoYSA9IHRoaXMuYWxwaGE7XG5cbiAgICAgICAgU3ByaXRlLnByb3RvdHlwZS5fcmVuZGVyQ2FudmFzLmNhbGwodGhpcy5fY2FjaGVkU3ByaXRlLCByZW5kZXJlcik7XG5cbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICAqL1xuICAgIHZhciBjb250ZXh0ID0gcmVuZGVyZXIuY29udGV4dDtcbiAgICB2YXIgdHJhbnNmb3JtID0gdGhpcy53b3JsZFRyYW5zZm9ybTtcblxuICAgIHZhciBjb21wb3NpdGVPcGVyYXRpb24gPSByZW5kZXJlci5ibGVuZE1vZGVzW3RoaXMuYmxlbmRNb2RlXTtcbiAgICBpZiAoY29tcG9zaXRlT3BlcmF0aW9uICE9PSBjb250ZXh0Lmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbilcbiAgICB7XG4gICAgICAgIGNvbnRleHQuZ2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uID0gY29tcG9zaXRlT3BlcmF0aW9uO1xuICAgIH1cblxuICAgIHZhciByZXNvbHV0aW9uID0gcmVuZGVyZXIucmVzb2x1dGlvbjtcbiAgICBjb250ZXh0LnNldFRyYW5zZm9ybShcbiAgICAgICAgdHJhbnNmb3JtLmEgKiByZXNvbHV0aW9uLFxuICAgICAgICB0cmFuc2Zvcm0uYiAqIHJlc29sdXRpb24sXG4gICAgICAgIHRyYW5zZm9ybS5jICogcmVzb2x1dGlvbixcbiAgICAgICAgdHJhbnNmb3JtLmQgKiByZXNvbHV0aW9uLFxuICAgICAgICB0cmFuc2Zvcm0udHggKiByZXNvbHV0aW9uLFxuICAgICAgICB0cmFuc2Zvcm0udHkgKiByZXNvbHV0aW9uXG4gICAgKTtcblxuICAgIENhbnZhc0dyYXBoaWNzLnJlbmRlckdyYXBoaWNzKHRoaXMsIGNvbnRleHQpO1xufTtcblxuLyoqXG4gKiBSZXRyaWV2ZXMgdGhlIGJvdW5kcyBvZiB0aGUgZ3JhcGhpYyBzaGFwZSBhcyBhIHJlY3RhbmdsZSBvYmplY3RcbiAqXG4gKiBAcGFyYW0gW21hdHJpeF0ge1BJWEkuTWF0cml4fSBUaGUgd29ybGQgdHJhbnNmb3JtIG1hdHJpeCB0byB1c2UsIGRlZmF1bHRzIHRvIHRoaXNcbiAqICBvYmplY3QncyB3b3JsZFRyYW5zZm9ybS5cbiAqIEByZXR1cm4ge1BJWEkuUmVjdGFuZ2xlfSB0aGUgcmVjdGFuZ3VsYXIgYm91bmRpbmcgYXJlYVxuICovXG5HcmFwaGljcy5wcm90b3R5cGUuZ2V0Qm91bmRzID0gZnVuY3Rpb24gKG1hdHJpeClcbntcbiAgICBpZighdGhpcy5fY3VycmVudEJvdW5kcylcbiAgICB7XG5cbiAgICAgICAgLy8gcmV0dXJuIGFuIGVtcHR5IG9iamVjdCBpZiB0aGUgaXRlbSBpcyBhIG1hc2shXG4gICAgICAgIGlmICghdGhpcy5yZW5kZXJhYmxlKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gbWF0aC5SZWN0YW5nbGUuRU1QVFk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5ib3VuZHNEaXJ0eSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51cGRhdGVMb2NhbEJvdW5kcygpO1xuXG4gICAgICAgICAgICB0aGlzLmdsRGlydHkgPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy5jYWNoZWRTcHJpdGVEaXJ0eSA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLmJvdW5kc0RpcnR5ID0gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgYm91bmRzID0gdGhpcy5fbG9jYWxCb3VuZHM7XG5cbiAgICAgICAgdmFyIHcwID0gYm91bmRzLng7XG4gICAgICAgIHZhciB3MSA9IGJvdW5kcy53aWR0aCArIGJvdW5kcy54O1xuXG4gICAgICAgIHZhciBoMCA9IGJvdW5kcy55O1xuICAgICAgICB2YXIgaDEgPSBib3VuZHMuaGVpZ2h0ICsgYm91bmRzLnk7XG5cbiAgICAgICAgdmFyIHdvcmxkVHJhbnNmb3JtID0gbWF0cml4IHx8IHRoaXMud29ybGRUcmFuc2Zvcm07XG5cbiAgICAgICAgdmFyIGEgPSB3b3JsZFRyYW5zZm9ybS5hO1xuICAgICAgICB2YXIgYiA9IHdvcmxkVHJhbnNmb3JtLmI7XG4gICAgICAgIHZhciBjID0gd29ybGRUcmFuc2Zvcm0uYztcbiAgICAgICAgdmFyIGQgPSB3b3JsZFRyYW5zZm9ybS5kO1xuICAgICAgICB2YXIgdHggPSB3b3JsZFRyYW5zZm9ybS50eDtcbiAgICAgICAgdmFyIHR5ID0gd29ybGRUcmFuc2Zvcm0udHk7XG5cbiAgICAgICAgdmFyIHgxID0gYSAqIHcxICsgYyAqIGgxICsgdHg7XG4gICAgICAgIHZhciB5MSA9IGQgKiBoMSArIGIgKiB3MSArIHR5O1xuXG4gICAgICAgIHZhciB4MiA9IGEgKiB3MCArIGMgKiBoMSArIHR4O1xuICAgICAgICB2YXIgeTIgPSBkICogaDEgKyBiICogdzAgKyB0eTtcblxuICAgICAgICB2YXIgeDMgPSBhICogdzAgKyBjICogaDAgKyB0eDtcbiAgICAgICAgdmFyIHkzID0gZCAqIGgwICsgYiAqIHcwICsgdHk7XG5cbiAgICAgICAgdmFyIHg0ID0gIGEgKiB3MSArIGMgKiBoMCArIHR4O1xuICAgICAgICB2YXIgeTQgPSAgZCAqIGgwICsgYiAqIHcxICsgdHk7XG5cbiAgICAgICAgdmFyIG1heFggPSB4MTtcbiAgICAgICAgdmFyIG1heFkgPSB5MTtcblxuICAgICAgICB2YXIgbWluWCA9IHgxO1xuICAgICAgICB2YXIgbWluWSA9IHkxO1xuXG4gICAgICAgIG1pblggPSB4MiA8IG1pblggPyB4MiA6IG1pblg7XG4gICAgICAgIG1pblggPSB4MyA8IG1pblggPyB4MyA6IG1pblg7XG4gICAgICAgIG1pblggPSB4NCA8IG1pblggPyB4NCA6IG1pblg7XG5cbiAgICAgICAgbWluWSA9IHkyIDwgbWluWSA/IHkyIDogbWluWTtcbiAgICAgICAgbWluWSA9IHkzIDwgbWluWSA/IHkzIDogbWluWTtcbiAgICAgICAgbWluWSA9IHk0IDwgbWluWSA/IHk0IDogbWluWTtcblxuICAgICAgICBtYXhYID0geDIgPiBtYXhYID8geDIgOiBtYXhYO1xuICAgICAgICBtYXhYID0geDMgPiBtYXhYID8geDMgOiBtYXhYO1xuICAgICAgICBtYXhYID0geDQgPiBtYXhYID8geDQgOiBtYXhYO1xuXG4gICAgICAgIG1heFkgPSB5MiA+IG1heFkgPyB5MiA6IG1heFk7XG4gICAgICAgIG1heFkgPSB5MyA+IG1heFkgPyB5MyA6IG1heFk7XG4gICAgICAgIG1heFkgPSB5NCA+IG1heFkgPyB5NCA6IG1heFk7XG5cbiAgICAgICAgdGhpcy5fYm91bmRzLnggPSBtaW5YO1xuICAgICAgICB0aGlzLl9ib3VuZHMud2lkdGggPSBtYXhYIC0gbWluWDtcblxuICAgICAgICB0aGlzLl9ib3VuZHMueSA9IG1pblk7XG4gICAgICAgIHRoaXMuX2JvdW5kcy5oZWlnaHQgPSBtYXhZIC0gbWluWTtcblxuICAgICAgICB0aGlzLl9jdXJyZW50Qm91bmRzID0gdGhpcy5fYm91bmRzO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLl9jdXJyZW50Qm91bmRzO1xufTtcblxuLyoqXG4qIFRlc3RzIGlmIGEgcG9pbnQgaXMgaW5zaWRlIHRoaXMgZ3JhcGhpY3Mgb2JqZWN0XG4qXG4qIEBwYXJhbSBwb2ludCB7UElYSS5Qb2ludH0gdGhlIHBvaW50IHRvIHRlc3RcbiogQHJldHVybiB7Ym9vbGVhbn0gdGhlIHJlc3VsdCBvZiB0aGUgdGVzdFxuKi9cbkdyYXBoaWNzLnByb3RvdHlwZS5jb250YWluc1BvaW50ID0gZnVuY3Rpb24oIHBvaW50IClcbntcbiAgICB0aGlzLndvcmxkVHJhbnNmb3JtLmFwcGx5SW52ZXJzZShwb2ludCwgIHRlbXBQb2ludCk7XG5cbiAgICB2YXIgZ3JhcGhpY3NEYXRhID0gdGhpcy5ncmFwaGljc0RhdGE7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGdyYXBoaWNzRGF0YS5sZW5ndGg7IGkrKylcbiAgICB7XG4gICAgICAgIHZhciBkYXRhID0gZ3JhcGhpY3NEYXRhW2ldO1xuXG4gICAgICAgIGlmICghZGF0YS5maWxsKVxuICAgICAgICB7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIG9ubHkgZGVhbCB3aXRoIGZpbGxzLi5cbiAgICAgICAgaWYgKGRhdGEuc2hhcGUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGlmICggZGF0YS5zaGFwZS5jb250YWlucyggdGVtcFBvaW50LngsIHRlbXBQb2ludC55ICkgKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xufTtcblxuLyoqXG4gKiBVcGRhdGUgdGhlIGJvdW5kcyBvZiB0aGUgb2JqZWN0XG4gKlxuICovXG5HcmFwaGljcy5wcm90b3R5cGUudXBkYXRlTG9jYWxCb3VuZHMgPSBmdW5jdGlvbiAoKVxue1xuICAgIHZhciBtaW5YID0gSW5maW5pdHk7XG4gICAgdmFyIG1heFggPSAtSW5maW5pdHk7XG5cbiAgICB2YXIgbWluWSA9IEluZmluaXR5O1xuICAgIHZhciBtYXhZID0gLUluZmluaXR5O1xuXG4gICAgaWYgKHRoaXMuZ3JhcGhpY3NEYXRhLmxlbmd0aClcbiAgICB7XG4gICAgICAgIHZhciBzaGFwZSwgcG9pbnRzLCB4LCB5LCB3LCBoO1xuXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5ncmFwaGljc0RhdGEubGVuZ3RoOyBpKyspXG4gICAgICAgIHtcbiAgICAgICAgICAgIHZhciBkYXRhID0gdGhpcy5ncmFwaGljc0RhdGFbaV07XG4gICAgICAgICAgICB2YXIgdHlwZSA9IGRhdGEudHlwZTtcbiAgICAgICAgICAgIHZhciBsaW5lV2lkdGggPSBkYXRhLmxpbmVXaWR0aDtcbiAgICAgICAgICAgIHNoYXBlID0gZGF0YS5zaGFwZTtcblxuICAgICAgICAgICAgaWYgKHR5cGUgPT09IENPTlNULlNIQVBFUy5SRUNUIHx8IHR5cGUgPT09IENPTlNULlNIQVBFUy5SUkVDKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHggPSBzaGFwZS54IC0gbGluZVdpZHRoLzI7XG4gICAgICAgICAgICAgICAgeSA9IHNoYXBlLnkgLSBsaW5lV2lkdGgvMjtcbiAgICAgICAgICAgICAgICB3ID0gc2hhcGUud2lkdGggKyBsaW5lV2lkdGg7XG4gICAgICAgICAgICAgICAgaCA9IHNoYXBlLmhlaWdodCArIGxpbmVXaWR0aDtcblxuICAgICAgICAgICAgICAgIG1pblggPSB4IDwgbWluWCA/IHggOiBtaW5YO1xuICAgICAgICAgICAgICAgIG1heFggPSB4ICsgdyA+IG1heFggPyB4ICsgdyA6IG1heFg7XG5cbiAgICAgICAgICAgICAgICBtaW5ZID0geSA8IG1pblkgPyB5IDogbWluWTtcbiAgICAgICAgICAgICAgICBtYXhZID0geSArIGggPiBtYXhZID8geSArIGggOiBtYXhZO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAodHlwZSA9PT0gQ09OU1QuU0hBUEVTLkNJUkMpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgeCA9IHNoYXBlLng7XG4gICAgICAgICAgICAgICAgeSA9IHNoYXBlLnk7XG4gICAgICAgICAgICAgICAgdyA9IHNoYXBlLnJhZGl1cyArIGxpbmVXaWR0aC8yO1xuICAgICAgICAgICAgICAgIGggPSBzaGFwZS5yYWRpdXMgKyBsaW5lV2lkdGgvMjtcblxuICAgICAgICAgICAgICAgIG1pblggPSB4IC0gdyA8IG1pblggPyB4IC0gdyA6IG1pblg7XG4gICAgICAgICAgICAgICAgbWF4WCA9IHggKyB3ID4gbWF4WCA/IHggKyB3IDogbWF4WDtcblxuICAgICAgICAgICAgICAgIG1pblkgPSB5IC0gaCA8IG1pblkgPyB5IC0gaCA6IG1pblk7XG4gICAgICAgICAgICAgICAgbWF4WSA9IHkgKyBoID4gbWF4WSA/IHkgKyBoIDogbWF4WTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKHR5cGUgPT09IENPTlNULlNIQVBFUy5FTElQKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHggPSBzaGFwZS54O1xuICAgICAgICAgICAgICAgIHkgPSBzaGFwZS55O1xuICAgICAgICAgICAgICAgIHcgPSBzaGFwZS53aWR0aCArIGxpbmVXaWR0aC8yO1xuICAgICAgICAgICAgICAgIGggPSBzaGFwZS5oZWlnaHQgKyBsaW5lV2lkdGgvMjtcblxuICAgICAgICAgICAgICAgIG1pblggPSB4IC0gdyA8IG1pblggPyB4IC0gdyA6IG1pblg7XG4gICAgICAgICAgICAgICAgbWF4WCA9IHggKyB3ID4gbWF4WCA/IHggKyB3IDogbWF4WDtcblxuICAgICAgICAgICAgICAgIG1pblkgPSB5IC0gaCA8IG1pblkgPyB5IC0gaCA6IG1pblk7XG4gICAgICAgICAgICAgICAgbWF4WSA9IHkgKyBoID4gbWF4WSA/IHkgKyBoIDogbWF4WTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAvLyBQT0xZXG4gICAgICAgICAgICAgICAgcG9pbnRzID0gc2hhcGUucG9pbnRzO1xuXG4gICAgICAgICAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBwb2ludHMubGVuZ3RoOyBqICs9IDIpXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICB4ID0gcG9pbnRzW2pdO1xuICAgICAgICAgICAgICAgICAgICB5ID0gcG9pbnRzW2orMV07XG5cbiAgICAgICAgICAgICAgICAgICAgbWluWCA9IHgtbGluZVdpZHRoIDwgbWluWCA/IHgtbGluZVdpZHRoIDogbWluWDtcbiAgICAgICAgICAgICAgICAgICAgbWF4WCA9IHgrbGluZVdpZHRoID4gbWF4WCA/IHgrbGluZVdpZHRoIDogbWF4WDtcblxuICAgICAgICAgICAgICAgICAgICBtaW5ZID0geS1saW5lV2lkdGggPCBtaW5ZID8geS1saW5lV2lkdGggOiBtaW5ZO1xuICAgICAgICAgICAgICAgICAgICBtYXhZID0geStsaW5lV2lkdGggPiBtYXhZID8geStsaW5lV2lkdGggOiBtYXhZO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICBtaW5YID0gMDtcbiAgICAgICAgbWF4WCA9IDA7XG4gICAgICAgIG1pblkgPSAwO1xuICAgICAgICBtYXhZID0gMDtcbiAgICB9XG5cbiAgICB2YXIgcGFkZGluZyA9IHRoaXMuYm91bmRzUGFkZGluZztcblxuICAgIHRoaXMuX2xvY2FsQm91bmRzLnggPSBtaW5YIC0gcGFkZGluZztcbiAgICB0aGlzLl9sb2NhbEJvdW5kcy53aWR0aCA9IChtYXhYIC0gbWluWCkgKyBwYWRkaW5nICogMjtcblxuICAgIHRoaXMuX2xvY2FsQm91bmRzLnkgPSBtaW5ZIC0gcGFkZGluZztcbiAgICB0aGlzLl9sb2NhbEJvdW5kcy5oZWlnaHQgPSAobWF4WSAtIG1pblkpICsgcGFkZGluZyAqIDI7XG59O1xuXG4vKipcbiAqIEdlbmVyYXRlcyB0aGUgY2FjaGVkIHNwcml0ZSB3aGVuIHRoZSBzcHJpdGUgaGFzIGNhY2hlQXNCaXRtYXAgPSB0cnVlXG4gKlxuICogQHByaXZhdGVcbiAqL1xuLypcbkdyYXBoaWNzLnByb3RvdHlwZS5fZ2VuZXJhdGVDYWNoZWRTcHJpdGUgPSBmdW5jdGlvbiAoKVxue1xuICAgIHZhciBib3VuZHMgPSB0aGlzLmdldExvY2FsQm91bmRzKCk7XG5cbiAgICBpZiAoIXRoaXMuX2NhY2hlZFNwcml0ZSlcbiAgICB7XG4gICAgICAgIHZhciBjYW52YXNCdWZmZXIgPSBuZXcgQ2FudmFzQnVmZmVyKGJvdW5kcy53aWR0aCwgYm91bmRzLmhlaWdodCk7XG4gICAgICAgIHZhciB0ZXh0dXJlID0gVGV4dHVyZS5mcm9tQ2FudmFzKGNhbnZhc0J1ZmZlci5jYW52YXMpO1xuXG4gICAgICAgIHRoaXMuX2NhY2hlZFNwcml0ZSA9IG5ldyBTcHJpdGUodGV4dHVyZSk7XG4gICAgICAgIHRoaXMuX2NhY2hlZFNwcml0ZS5idWZmZXIgPSBjYW52YXNCdWZmZXI7XG5cbiAgICAgICAgdGhpcy5fY2FjaGVkU3ByaXRlLndvcmxkVHJhbnNmb3JtID0gdGhpcy53b3JsZFRyYW5zZm9ybTtcbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgdGhpcy5fY2FjaGVkU3ByaXRlLmJ1ZmZlci5yZXNpemUoYm91bmRzLndpZHRoLCBib3VuZHMuaGVpZ2h0KTtcbiAgICB9XG5cbiAgICAvLyBsZXZlcmFnZSB0aGUgYW5jaG9yIHRvIGFjY291bnQgZm9yIHRoZSBvZmZzZXQgb2YgdGhlIGVsZW1lbnRcbiAgICB0aGlzLl9jYWNoZWRTcHJpdGUuYW5jaG9yLnggPSAtKCBib3VuZHMueCAvIGJvdW5kcy53aWR0aCApO1xuICAgIHRoaXMuX2NhY2hlZFNwcml0ZS5hbmNob3IueSA9IC0oIGJvdW5kcy55IC8gYm91bmRzLmhlaWdodCApO1xuXG4gICAgLy8gdGhpcy5fY2FjaGVkU3ByaXRlLmJ1ZmZlci5jb250ZXh0LnNhdmUoKTtcbiAgICB0aGlzLl9jYWNoZWRTcHJpdGUuYnVmZmVyLmNvbnRleHQudHJhbnNsYXRlKC1ib3VuZHMueCwtYm91bmRzLnkpO1xuXG4gICAgLy8gbWFrZSBzdXJlIHdlIHNldCB0aGUgYWxwaGEgb2YgdGhlIGdyYXBoaWNzIHRvIDEgZm9yIHRoZSByZW5kZXIuLlxuICAgIHRoaXMud29ybGRBbHBoYSA9IDE7XG5cbiAgICAvLyBub3cgcmVuZGVyIHRoZSBncmFwaGljLi5cbiAgICBDYW52YXNHcmFwaGljcy5yZW5kZXJHcmFwaGljcyh0aGlzLCB0aGlzLl9jYWNoZWRTcHJpdGUuYnVmZmVyLmNvbnRleHQpO1xuXG4gICAgdGhpcy5fY2FjaGVkU3ByaXRlLmFscGhhID0gdGhpcy5hbHBoYTtcbn07XG4qL1xuLyoqXG4gKiBVcGRhdGVzIHRleHR1cmUgc2l6ZSBiYXNlZCBvbiBjYW52YXMgc2l6ZVxuICpcbiAqIEBwcml2YXRlXG4gKi9cbi8qXG5HcmFwaGljcy5wcm90b3R5cGUudXBkYXRlQ2FjaGVkU3ByaXRlVGV4dHVyZSA9IGZ1bmN0aW9uICgpXG57XG4gICAgdmFyIGNhY2hlZFNwcml0ZSA9IHRoaXMuX2NhY2hlZFNwcml0ZTtcbiAgICB2YXIgdGV4dHVyZSA9IGNhY2hlZFNwcml0ZS50ZXh0dXJlO1xuICAgIHZhciBjYW52YXMgPSBjYWNoZWRTcHJpdGUuYnVmZmVyLmNhbnZhcztcblxuICAgIHRleHR1cmUuYmFzZVRleHR1cmUud2lkdGggPSBjYW52YXMud2lkdGg7XG4gICAgdGV4dHVyZS5iYXNlVGV4dHVyZS5oZWlnaHQgPSBjYW52YXMuaGVpZ2h0O1xuICAgIHRleHR1cmUuY3JvcC53aWR0aCA9IHRleHR1cmUuZnJhbWUud2lkdGggPSBjYW52YXMud2lkdGg7XG4gICAgdGV4dHVyZS5jcm9wLmhlaWdodCA9IHRleHR1cmUuZnJhbWUuaGVpZ2h0ID0gY2FudmFzLmhlaWdodDtcblxuICAgIGNhY2hlZFNwcml0ZS5fd2lkdGggPSBjYW52YXMud2lkdGg7XG4gICAgY2FjaGVkU3ByaXRlLl9oZWlnaHQgPSBjYW52YXMuaGVpZ2h0O1xuXG4gICAgLy8gdXBkYXRlIHRoZSBkaXJ0eSBiYXNlIHRleHR1cmVzXG4gICAgdGV4dHVyZS5iYXNlVGV4dHVyZS5kaXJ0eSgpO1xufTsqL1xuXG4vKipcbiAqIERlc3Ryb3lzIGEgcHJldmlvdXMgY2FjaGVkIHNwcml0ZS5cbiAqXG4gKi9cbi8qXG5HcmFwaGljcy5wcm90b3R5cGUuZGVzdHJveUNhY2hlZFNwcml0ZSA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy5fY2FjaGVkU3ByaXRlLnRleHR1cmUuZGVzdHJveSh0cnVlKTtcblxuICAgIC8vIGxldCB0aGUgZ2MgY29sbGVjdCB0aGUgdW51c2VkIHNwcml0ZVxuICAgIC8vIFRPRE8gY291bGQgYmUgb2JqZWN0IHBvb2xlZCFcbiAgICB0aGlzLl9jYWNoZWRTcHJpdGUgPSBudWxsO1xufTsqL1xuXG4vKipcbiAqIERyYXdzIHRoZSBnaXZlbiBzaGFwZSB0byB0aGlzIEdyYXBoaWNzIG9iamVjdC4gQ2FuIGJlIGFueSBvZiBDaXJjbGUsIFJlY3RhbmdsZSwgRWxsaXBzZSwgTGluZSBvciBQb2x5Z29uLlxuICpcbiAqIEBwYXJhbSBzaGFwZSB7UElYSS5DaXJjbGV8UElYSS5SZWN0YW5nbGV8UElYSS5FbGxpcHNlfFBJWEkuTGluZXxQSVhJLlBvbHlnb259IFRoZSBzaGFwZSBvYmplY3QgdG8gZHJhdy5cbiAqIEByZXR1cm4ge1BJWEkuR3JhcGhpY3NEYXRhfSBUaGUgZ2VuZXJhdGVkIEdyYXBoaWNzRGF0YSBvYmplY3QuXG4gKi9cbkdyYXBoaWNzLnByb3RvdHlwZS5kcmF3U2hhcGUgPSBmdW5jdGlvbiAoc2hhcGUpXG57XG4gICAgaWYgKHRoaXMuY3VycmVudFBhdGgpXG4gICAge1xuICAgICAgICAvLyBjaGVjayBjdXJyZW50IHBhdGghXG4gICAgICAgIGlmICh0aGlzLmN1cnJlbnRQYXRoLnNoYXBlLnBvaW50cy5sZW5ndGggPD0gMilcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5ncmFwaGljc0RhdGEucG9wKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLmN1cnJlbnRQYXRoID0gbnVsbDtcblxuICAgIHZhciBkYXRhID0gbmV3IEdyYXBoaWNzRGF0YSh0aGlzLmxpbmVXaWR0aCwgdGhpcy5saW5lQ29sb3IsIHRoaXMubGluZUFscGhhLCB0aGlzLmZpbGxDb2xvciwgdGhpcy5maWxsQWxwaGEsIHRoaXMuZmlsbGluZywgc2hhcGUpO1xuXG4gICAgdGhpcy5ncmFwaGljc0RhdGEucHVzaChkYXRhKTtcblxuICAgIGlmIChkYXRhLnR5cGUgPT09IENPTlNULlNIQVBFUy5QT0xZKVxuICAgIHtcbiAgICAgICAgZGF0YS5zaGFwZS5jbG9zZWQgPSBkYXRhLnNoYXBlLmNsb3NlZCB8fCB0aGlzLmZpbGxpbmc7XG4gICAgICAgIHRoaXMuY3VycmVudFBhdGggPSBkYXRhO1xuICAgIH1cblxuICAgIHRoaXMuZGlydHkgPSB0aGlzLmJvdW5kc0RpcnR5ID0gdHJ1ZTtcblxuICAgIHJldHVybiBkYXRhO1xufTtcblxuLyoqXG4gKiBEZXN0cm95cyB0aGUgR3JhcGhpY3Mgb2JqZWN0LlxuICovXG5HcmFwaGljcy5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uICgpIHtcbiAgICBDb250YWluZXIucHJvdG90eXBlLmRlc3Ryb3kuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcblxuICAgIC8vIGRlc3Ryb3kgZWFjaCBvZiB0aGUgR3JhcGhpY3NEYXRhIG9iamVjdHNcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuZ3JhcGhpY3NEYXRhLmxlbmd0aDsgKytpKSB7XG4gICAgICAgIHRoaXMuZ3JhcGhpY3NEYXRhW2ldLmRlc3Ryb3koKTtcbiAgICB9XG5cbiAgICAvLyBmb3IgZWFjaCB3ZWJnbCBkYXRhIGVudHJ5LCBkZXN0cm95IHRoZSBXZWJHTEdyYXBoaWNzRGF0YVxuICAgIGZvciAodmFyIGlkIGluIHRoaXMuX3dlYmdsKSB7XG4gICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgdGhpcy5fd2ViZ2xbaWRdLmRhdGEubGVuZ3RoOyArK2opIHtcbiAgICAgICAgICAgIHRoaXMuX3dlYmdsW2lkXS5kYXRhW2pdLmRlc3Ryb3koKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMuZ3JhcGhpY3NEYXRhID0gbnVsbDtcblxuICAgIHRoaXMuY3VycmVudFBhdGggPSBudWxsO1xuICAgIHRoaXMuX3dlYmdsID0gbnVsbDtcbiAgICB0aGlzLl9sb2NhbEJvdW5kcyA9IG51bGw7XG59O1xuIiwiLyoqXG4gKiBBIEdyYXBoaWNzRGF0YSBvYmplY3QuXG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIGxpbmVXaWR0aCB7bnVtYmVyfSB0aGUgd2lkdGggb2YgdGhlIGxpbmUgdG8gZHJhd1xuICogQHBhcmFtIGxpbmVDb2xvciB7bnVtYmVyfSB0aGUgY29sb3Igb2YgdGhlIGxpbmUgdG8gZHJhd1xuICogQHBhcmFtIGxpbmVBbHBoYSB7bnVtYmVyfSB0aGUgYWxwaGEgb2YgdGhlIGxpbmUgdG8gZHJhd1xuICogQHBhcmFtIGZpbGxDb2xvciB7bnVtYmVyfSB0aGUgY29sb3Igb2YgdGhlIGZpbGxcbiAqIEBwYXJhbSBmaWxsQWxwaGEge251bWJlcn0gdGhlIGFscGhhIG9mIHRoZSBmaWxsXG4gKiBAcGFyYW0gZmlsbCAgICAgIHtib29sZWFufSB3aGV0aGVyIG9yIG5vdCB0aGUgc2hhcGUgaXMgZmlsbGVkIHdpdGggYSBjb2xvdXJcbiAqIEBwYXJhbSBzaGFwZSAgICAge0NpcmNsZXxSZWN0YW5nbGV8RWxsaXBzZXxMaW5lfFBvbHlnb259IFRoZSBzaGFwZSBvYmplY3QgdG8gZHJhdy5cbiAqL1xuZnVuY3Rpb24gR3JhcGhpY3NEYXRhKGxpbmVXaWR0aCwgbGluZUNvbG9yLCBsaW5lQWxwaGEsIGZpbGxDb2xvciwgZmlsbEFscGhhLCBmaWxsLCBzaGFwZSlcbntcbiAgICAvKlxuICAgICAqIEBtZW1iZXIge251bWJlcn0gdGhlIHdpZHRoIG9mIHRoZSBsaW5lIHRvIGRyYXdcbiAgICAgKi9cbiAgICB0aGlzLmxpbmVXaWR0aCA9IGxpbmVXaWR0aDtcblxuICAgIC8qXG4gICAgICogQG1lbWJlciB7bnVtYmVyfSB0aGUgY29sb3Igb2YgdGhlIGxpbmUgdG8gZHJhd1xuICAgICAqL1xuICAgIHRoaXMubGluZUNvbG9yID0gbGluZUNvbG9yO1xuICAgIC8qXG4gICAgICogQG1lbWJlciB7bnVtYmVyfSB0aGUgYWxwaGEgb2YgdGhlIGxpbmUgdG8gZHJhd1xuICAgICAqL1xuICAgIHRoaXMubGluZUFscGhhID0gbGluZUFscGhhO1xuICAgIC8qXG4gICAgICogQG1lbWJlciB7bnVtYmVyfSBjYWNoZWQgdGludCBvZiB0aGUgbGluZSB0byBkcmF3XG4gICAgICovXG4gICAgdGhpcy5fbGluZVRpbnQgPSBsaW5lQ29sb3I7XG5cbiAgICAvKlxuICAgICAqIEBtZW1iZXIge251bWJlcn0gdGhlIGNvbG9yIG9mIHRoZSBmaWxsXG4gICAgICovXG4gICAgdGhpcy5maWxsQ29sb3IgPSBmaWxsQ29sb3I7XG5cbiAgICAvKlxuICAgICAqIEBtZW1iZXIge251bWJlcn0gdGhlIGFscGhhIG9mIHRoZSBmaWxsXG4gICAgICovXG4gICAgdGhpcy5maWxsQWxwaGEgPSBmaWxsQWxwaGE7XG5cbiAgICAvKlxuICAgICAqIEBtZW1iZXIge251bWJlcn0gY2FjaGVkIHRpbnQgb2YgdGhlIGZpbGxcbiAgICAgKi9cbiAgICB0aGlzLl9maWxsVGludCA9IGZpbGxDb2xvcjtcblxuICAgIC8qXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn0gd2hldGhlciBvciBub3QgdGhlIHNoYXBlIGlzIGZpbGxlZCB3aXRoIGEgY29sb3VyXG4gICAgICovXG4gICAgdGhpcy5maWxsID0gZmlsbDtcblxuICAgIC8qXG4gICAgICogQG1lbWJlciB7UElYSS5DaXJjbGV8UElYSS5SZWN0YW5nbGV8UElYSS5FbGxpcHNlfFBJWEkuTGluZXxQSVhJLlBvbHlnb259IFRoZSBzaGFwZSBvYmplY3QgdG8gZHJhdy5cbiAgICAgKi9cbiAgICB0aGlzLnNoYXBlID0gc2hhcGU7XG5cbiAgICAvKlxuICAgICAqIEBtZW1iZXIge251bWJlcn0gVGhlIHR5cGUgb2YgdGhlIHNoYXBlLCBzZWUgdGhlIENvbnN0LlNoYXBlcyBmaWxlIGZvciBhbGwgdGhlIGV4aXN0aW5nIHR5cGVzLFxuICAgICAqL1xuICAgIHRoaXMudHlwZSA9IHNoYXBlLnR5cGU7XG59XG5cbkdyYXBoaWNzRGF0YS5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBHcmFwaGljc0RhdGE7XG5tb2R1bGUuZXhwb3J0cyA9IEdyYXBoaWNzRGF0YTtcblxuLyoqXG4gKiBDcmVhdGVzIGEgbmV3IEdyYXBoaWNzRGF0YSBvYmplY3Qgd2l0aCB0aGUgc2FtZSB2YWx1ZXMgYXMgdGhpcyBvbmUuXG4gKlxuICogQHJldHVybiB7UElYSS5HcmFwaGljc0RhdGF9XG4gKi9cbkdyYXBoaWNzRGF0YS5wcm90b3R5cGUuY2xvbmUgPSBmdW5jdGlvbiAoKVxue1xuICAgIHJldHVybiBuZXcgR3JhcGhpY3NEYXRhKFxuICAgICAgICB0aGlzLmxpbmVXaWR0aCxcbiAgICAgICAgdGhpcy5saW5lQ29sb3IsXG4gICAgICAgIHRoaXMubGluZUFscGhhLFxuICAgICAgICB0aGlzLmZpbGxDb2xvcixcbiAgICAgICAgdGhpcy5maWxsQWxwaGEsXG4gICAgICAgIHRoaXMuZmlsbCxcbiAgICAgICAgdGhpcy5zaGFwZVxuICAgICk7XG59O1xuXG4vKipcbiAqIERlc3Ryb3lzIHRoZSBHcmFwaGljcyBkYXRhLlxuICovXG5HcmFwaGljc0RhdGEucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoKSB7XG4gICAgdGhpcy5zaGFwZSA9IG51bGw7XG59O1xuIiwidmFyIHV0aWxzID0gcmVxdWlyZSgnLi4vLi4vdXRpbHMnKSxcbiAgICBtYXRoID0gcmVxdWlyZSgnLi4vLi4vbWF0aCcpLFxuICAgIENPTlNUID0gcmVxdWlyZSgnLi4vLi4vY29uc3QnKSxcbiAgICBPYmplY3RSZW5kZXJlciA9IHJlcXVpcmUoJy4uLy4uL3JlbmRlcmVycy93ZWJnbC91dGlscy9PYmplY3RSZW5kZXJlcicpLFxuICAgIFdlYkdMUmVuZGVyZXIgPSByZXF1aXJlKCcuLi8uLi9yZW5kZXJlcnMvd2ViZ2wvV2ViR0xSZW5kZXJlcicpLFxuICAgIFdlYkdMR3JhcGhpY3NEYXRhID0gcmVxdWlyZSgnLi9XZWJHTEdyYXBoaWNzRGF0YScpLFxuICAgIFByaW1pdGl2ZVNoYWRlciA9IHJlcXVpcmUoJy4vc2hhZGVycy9QcmltaXRpdmVTaGFkZXInKSxcblxuICAgIC8vIHNvbWUgZHJhd2luZyBmdW5jdGlvbnMuLlxuICAgIGJ1aWxkTGluZSA9IHJlcXVpcmUoJy4vdXRpbHMvYnVpbGRMaW5lJyk7XG4gICAgYnVpbGRQb2x5ID0gcmVxdWlyZSgnLi91dGlscy9idWlsZFBvbHknKTtcbiAgICBidWlsZENvbXBsZXhQb2x5ID0gcmVxdWlyZSgnLi91dGlscy9idWlsZENvbXBsZXhQb2x5Jyk7XG4gICAgYnVpbGRSZWN0YW5nbGUgPSByZXF1aXJlKCcuL3V0aWxzL2J1aWxkUmVjdGFuZ2xlJyk7XG4gICAgYnVpbGRSb3VuZGVkUmVjdGFuZ2xlID0gcmVxdWlyZSgnLi91dGlscy9idWlsZFJvdW5kZWRSZWN0YW5nbGUnKTtcbiAgICBidWlsZENpcmNsZSA9IHJlcXVpcmUoJy4vdXRpbHMvYnVpbGRDaXJjbGUnKTtcblxuICAgIGVhcmN1dCA9IHJlcXVpcmUoJ2VhcmN1dCcpO1xuXG4vKipcbiAqIFJlbmRlcnMgdGhlIGdyYXBoaWNzIG9iamVjdC5cbiAqXG4gKiBAY2xhc3NcbiAqIEBwcml2YXRlXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQGV4dGVuZHMgUElYSS5PYmplY3RSZW5kZXJlclxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLldlYkdMUmVuZGVyZXJ9IFRoZSByZW5kZXJlciB0aGlzIG9iamVjdCByZW5kZXJlciB3b3JrcyBmb3IuXG4gKi9cbmZ1bmN0aW9uIEdyYXBoaWNzUmVuZGVyZXIocmVuZGVyZXIpXG57XG4gICAgT2JqZWN0UmVuZGVyZXIuY2FsbCh0aGlzLCByZW5kZXJlcik7XG5cbiAgICB0aGlzLmdyYXBoaWNzRGF0YVBvb2wgPSBbXTtcblxuICAgIHRoaXMucHJpbWl0aXZlU2hhZGVyID0gbnVsbDtcbiAgICB0aGlzLmNvbXBsZXhQcmltaXRpdmVTaGFkZXIgPSBudWxsO1xuXG4gICAgdGhpcy5nbCA9IHJlbmRlcmVyLmdsO1xuXG4gICAgLyoqXG4gICAgICogVGhpcyBpcyB0aGUgbWF4aW11bSBudW1iZXIgb2YgcG9pbnRzIGEgcG9seSBjYW4gY29udGFpbiBiZWZvcmUgaXQgaXMgcmVuZGVyZWQgYXMgYSBjb21wbGV4IHBvbHlnb24gKHVzaW5nIHRoZSBzdGVuY2lsIGJ1ZmZlcilcbiAgICAgKiBAdHlwZSB7TnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMubWF4aW11bVNpbXBsZVBvbHlTaXplID0gMjAwO1xufVxuXG5HcmFwaGljc1JlbmRlcmVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoT2JqZWN0UmVuZGVyZXIucHJvdG90eXBlKTtcbkdyYXBoaWNzUmVuZGVyZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gR3JhcGhpY3NSZW5kZXJlcjtcbm1vZHVsZS5leHBvcnRzID0gR3JhcGhpY3NSZW5kZXJlcjtcblxuV2ViR0xSZW5kZXJlci5yZWdpc3RlclBsdWdpbignZ3JhcGhpY3MnLCBHcmFwaGljc1JlbmRlcmVyKTtcblxuLyoqXG4gKiBDYWxsZWQgd2hlbiB0aGVyZSBpcyBhIFdlYkdMIGNvbnRleHQgY2hhbmdlXG4gKlxuICogQHByaXZhdGVcbiAqXG4gKi9cbkdyYXBoaWNzUmVuZGVyZXIucHJvdG90eXBlLm9uQ29udGV4dENoYW5nZSA9IGZ1bmN0aW9uKClcbntcbiAgICB0aGlzLmdsID0gdGhpcy5yZW5kZXJlci5nbDtcbiAgICB0aGlzLnByaW1pdGl2ZVNoYWRlciA9IG5ldyBQcmltaXRpdmVTaGFkZXIodGhpcy5nbClcbn07XG5cbi8qKlxuICogRGVzdHJveXMgdGhpcyByZW5kZXJlci5cbiAqXG4gKi9cbkdyYXBoaWNzUmVuZGVyZXIucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoKSB7XG4gICAgT2JqZWN0UmVuZGVyZXIucHJvdG90eXBlLmRlc3Ryb3kuY2FsbCh0aGlzKTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5ncmFwaGljc0RhdGFQb29sLmxlbmd0aDsgKytpKSB7XG4gICAgICAgIHRoaXMuZ3JhcGhpY3NEYXRhUG9vbFtpXS5kZXN0cm95KCk7XG4gICAgfVxuXG4gICAgdGhpcy5ncmFwaGljc0RhdGFQb29sID0gbnVsbDtcbn07XG5cbi8qKlxuICogUmVuZGVycyBhIGdyYXBoaWNzIG9iamVjdC5cbiAqXG4gKiBAcGFyYW0gZ3JhcGhpY3Mge1BJWEkuR3JhcGhpY3N9IFRoZSBncmFwaGljcyBvYmplY3QgdG8gcmVuZGVyLlxuICovXG5HcmFwaGljc1JlbmRlcmVyLnByb3RvdHlwZS5yZW5kZXIgPSBmdW5jdGlvbihncmFwaGljcylcbntcbiAgICB2YXIgcmVuZGVyZXIgPSB0aGlzLnJlbmRlcmVyO1xuICAgIHZhciBnbCA9IHJlbmRlcmVyLmdsO1xuXG4gICAgdmFyIHdlYkdMRGF0YTtcbiAgLy8gIGNvbnNvbGUubG9nKGdyYXBoaWNzKVxuICAgIGlmIChncmFwaGljcy5kaXJ0eSB8fCAhZ3JhcGhpY3MuX3dlYkdMW2dsLmlkXSlcbiAgICB7XG4gICAgICAgIHRoaXMudXBkYXRlR3JhcGhpY3MoZ3JhcGhpY3MpO1xuICAgIH1cblxuICAgIHZhciB3ZWJHTCA9IGdyYXBoaWNzLl93ZWJHTFtnbC5pZF07XG5cbiAgICAvLyBUaGlzICBjb3VsZCBiZSBzcGVlZGVkIHVwIGZvciBzdXJlIVxuXG4gICAgcmVuZGVyZXIuYmxlbmRNb2RlTWFuYWdlci5zZXRCbGVuZE1vZGUoIGdyYXBoaWNzLmJsZW5kTW9kZSApO1xuXG4vLyAgICB2YXIgbWF0cml4ID0gIGdyYXBoaWNzLndvcmxkVHJhbnNmb3JtLmNsb25lKCk7XG4vLyAgICB2YXIgbWF0cml4ID0gIHJlbmRlcmVyLmN1cnJlbnRSZW5kZXJUYXJnZXQucHJvamVjdGlvbk1hdHJpeC5jbG9uZSgpO1xuLy8gICAgbWF0cml4LmFwcGVuZChncmFwaGljcy53b3JsZFRyYW5zZm9ybSk7XG5cbiAgICBmb3IgKHZhciBpID0gMCwgbiA9IHdlYkdMLmRhdGEubGVuZ3RoOyBpIDwgbjsgaSsrKVxuICAgIHtcbiAgICAgICAgd2ViR0xEYXRhID0gd2ViR0wuZGF0YVtpXTtcblxuICAgICAgICBpZiAod2ViR0wuZGF0YVtpXS5tb2RlID09PSAxKVxuICAgICAgICB7XG4gICAgICAgICAgICAvL1RPRE8gZml4IHRoaXMgb25lIVxuICAgICAgICAgICAgXG4gICAgICAgICAgICAvKlxuICAgICAgICAgICAgcmVuZGVyZXIuc3RlbmNpbE1hbmFnZXIucHVzaFN0ZW5jaWwoZ3JhcGhpY3MsIHdlYkdMRGF0YSk7XG5cbiAgICAgICAgICAgIGdsLnVuaWZvcm0xZihyZW5kZXJlci5zaGFkZXJNYW5hZ2VyLmNvbXBsZXhQcmltaXRpdmVTaGFkZXIudW5pZm9ybXMuYWxwaGEuX2xvY2F0aW9uLCBncmFwaGljcy53b3JsZEFscGhhICogd2ViR0xEYXRhLmFscGhhKTtcblxuICAgICAgICAgICAgLy8gcmVuZGVyIHF1YWQuLlxuICAgICAgICAgICAgZ2wuZHJhd0VsZW1lbnRzKGdsLlRSSUFOR0xFX0ZBTiwgNCwgZ2wuVU5TSUdORURfU0hPUlQsICggd2ViR0xEYXRhLmluZGljZXMubGVuZ3RoIC0gNCApICogMiApO1xuXG4gICAgICAgICAgICByZW5kZXJlci5zdGVuY2lsTWFuYWdlci5wb3BTdGVuY2lsKGdyYXBoaWNzLCB3ZWJHTERhdGEpO1xuICAgICAgICAgICAgKi9cbiAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgIHtcblxuICAgICAgICAgICAgc2hhZGVyID0gdGhpcy5wcmltaXRpdmVTaGFkZXI7XG5cbiAgICAgICAgICAgIHJlbmRlcmVyLmJpbmRTaGFkZXIoc2hhZGVyKVxuXG4gICAgICAgICAgICBzaGFkZXIudW5pZm9ybXMudHJhbnNsYXRpb25NYXRyaXggPSBncmFwaGljcy53b3JsZFRyYW5zZm9ybS50b0FycmF5KHRydWUpO1xuICAgICAgICAgICAgc2hhZGVyLnVuaWZvcm1zLnRpbnQgPSB1dGlscy5oZXgycmdiKGdyYXBoaWNzLnRpbnQpO1xuICAgICAgICAgICAgc2hhZGVyLnVuaWZvcm1zLmFscGhhID0gZ3JhcGhpY3Mud29ybGRBbHBoYTtcblxuXG4gICAgICAgICAgICBnbC5iaW5kQnVmZmVyKGdsLkFSUkFZX0JVRkZFUiwgd2ViR0xEYXRhLmJ1ZmZlcik7XG5cbiAgICAgICAgICAgIHNoYWRlciA9IHRoaXMucHJpbWl0aXZlU2hhZGVyO1xuXG4gICAgICAgICAgICBzaGFkZXIuYXR0cmlidXRlcy5hVmVydGV4UG9zaXRpb24ucG9pbnRlcihnbC5GTE9BVCwgZmFsc2UsIDQgKiA2LCAwKTtcbiAgICAgICAgICAgIHNoYWRlci5hdHRyaWJ1dGVzLmFDb2xvci5wb2ludGVyKGdsLkZMT0FULCBmYWxzZSwgNCAqIDYsIDIgKiA0KTtcblxuICAgICAgICAgICAgZ2wuZW5hYmxlVmVydGV4QXR0cmliQXJyYXkoc2hhZGVyLmF0dHJpYnV0ZXMuYVZlcnRleFBvc2l0aW9uLmxvY2F0aW9uKTtcbiAgICAgICAgICAgIGdsLmVuYWJsZVZlcnRleEF0dHJpYkFycmF5KHNoYWRlci5hdHRyaWJ1dGVzLmFDb2xvci5sb2NhdGlvbik7XG5cbiAgICAgICAgICAgIC8vIHNldCB0aGUgaW5kZXggYnVmZmVyIVxuICAgICAgICAgICAgZ2wuYmluZEJ1ZmZlcihnbC5FTEVNRU5UX0FSUkFZX0JVRkZFUiwgd2ViR0xEYXRhLmluZGV4QnVmZmVyKTtcbiAgICAgICAgICAgIGdsLmRyYXdFbGVtZW50cyhnbC5UUklBTkdMRV9TVFJJUCwgIHdlYkdMRGF0YS5pbmRpY2VzLmxlbmd0aCwgZ2wuVU5TSUdORURfU0hPUlQsIDAgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJlbmRlcmVyLmRyYXdDb3VudCsrO1xuICAgIH1cbn07XG5cbi8qKlxuICogVXBkYXRlcyB0aGUgZ3JhcGhpY3Mgb2JqZWN0XG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSBncmFwaGljcyB7UElYSS5HcmFwaGljc30gVGhlIGdyYXBoaWNzIG9iamVjdCB0byB1cGRhdGVcbiAqL1xuR3JhcGhpY3NSZW5kZXJlci5wcm90b3R5cGUudXBkYXRlR3JhcGhpY3MgPSBmdW5jdGlvbihncmFwaGljcylcbntcbiAgICB2YXIgZ2wgPSB0aGlzLnJlbmRlcmVyLmdsO1xuXG4gICAgIC8vIGdldCB0aGUgY29udGV4dHMgZ3JhcGhpY3Mgb2JqZWN0XG4gICAgdmFyIHdlYkdMID0gZ3JhcGhpY3MuX3dlYkdMW2dsLmlkXTtcblxuICAgIC8vIGlmIHRoZSBncmFwaGljcyBvYmplY3QgZG9lcyBub3QgZXhpc3QgaW4gdGhlIHdlYkdMIGNvbnRleHQgdGltZSB0byBjcmVhdGUgaXQhXG4gICAgaWYgKCF3ZWJHTClcbiAgICB7XG4gICAgICAgIHdlYkdMID0gZ3JhcGhpY3MuX3dlYkdMW2dsLmlkXSA9IHtsYXN0SW5kZXg6MCwgZGF0YTpbXSwgZ2w6Z2x9O1xuICAgIH1cblxuICAgXG4gICAgLy8gZmxhZyB0aGUgZ3JhcGhpY3MgYXMgbm90IGRpcnR5IGFzIHdlIGFyZSBhYm91dCB0byB1cGRhdGUgaXQuLi5cbiAgICBncmFwaGljcy5kaXJ0eSA9IGZhbHNlO1xuXG4gICAgdmFyIGk7XG5cbiAgICAvLyBpZiB0aGUgdXNlciBjbGVhcmVkIHRoZSBncmFwaGljcyBvYmplY3Qgd2Ugd2lsbCBuZWVkIHRvIGNsZWFyIGV2ZXJ5IG9iamVjdFxuICAgIGlmIChncmFwaGljcy5jbGVhckRpcnR5KVxuICAgIHtcbiAgICAgICAgZ3JhcGhpY3MuY2xlYXJEaXJ0eSA9IGZhbHNlO1xuXG4gICAgICAgIC8vIGxvb3AgdGhyb3VnaCBhbmQgcmV0dXJuIGFsbCB0aGUgd2ViR0xEYXRhcyB0byB0aGUgb2JqZWN0IHBvb2wgc28gdGhhbiBjYW4gYmUgcmV1c2VkIGxhdGVyIG9uXG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCB3ZWJHTC5kYXRhLmxlbmd0aDsgaSsrKVxuICAgICAgICB7XG4gICAgICAgICAgICB2YXIgZ3JhcGhpY3NEYXRhID0gd2ViR0wuZGF0YVtpXTtcbiAgICAgICAgICAgIGdyYXBoaWNzRGF0YS5yZXNldCgpO1xuICAgICAgICAgICAgdGhpcy5ncmFwaGljc0RhdGFQb29sLnB1c2goIGdyYXBoaWNzRGF0YSApO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gY2xlYXIgdGhlIGFycmF5IGFuZCByZXNldCB0aGUgaW5kZXguLlxuICAgICAgICB3ZWJHTC5kYXRhID0gW107XG4gICAgICAgIHdlYkdMLmxhc3RJbmRleCA9IDA7XG4gICAgfVxuXG4gICAgdmFyIHdlYkdMRGF0YTtcblxuICAgIC8vIGxvb3AgdGhyb3VnaCB0aGUgZ3JhcGhpY3MgZGF0YXMgYW5kIGNvbnN0cnVjdCBlYWNoIG9uZS4uXG4gICAgLy8gaWYgdGhlIG9iamVjdCBpcyBhIGNvbXBsZXggZmlsbCB0aGVuIHRoZSBuZXcgc3RlbmNpbCBidWZmZXIgdGVjaG5pcXVlIHdpbGwgYmUgdXNlZFxuICAgIC8vIG90aGVyIHdpc2UgZ3JhcGhpY3Mgb2JqZWN0cyB3aWxsIGJlIHB1c2hlZCBpbnRvIGEgYmF0Y2guLlxuICAgIGZvciAoaSA9IHdlYkdMLmxhc3RJbmRleDsgaSA8IGdyYXBoaWNzLmdyYXBoaWNzRGF0YS5sZW5ndGg7IGkrKylcbiAgICB7XG4gICAgICAgIHZhciBkYXRhID0gZ3JhcGhpY3MuZ3JhcGhpY3NEYXRhW2ldO1xuXG4gICAgICAgIGlmIChkYXRhLnR5cGUgPT09IENPTlNULlNIQVBFUy5QT0xZKVxuICAgICAgICB7XG4gICAgICAgICAgICAvLyBuZWVkIHRvIGFkZCB0aGUgcG9pbnRzIHRoZSB0aGUgZ3JhcGhpY3Mgb2JqZWN0Li5cbiAgICAgICAgICAgIGRhdGEucG9pbnRzID0gZGF0YS5zaGFwZS5wb2ludHMuc2xpY2UoKTtcbiAgICAgICAgICAgIGlmIChkYXRhLnNoYXBlLmNsb3NlZClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAvLyBjbG9zZSB0aGUgcG9seSBpZiB0aGUgdmFsdWUgaXMgdHJ1ZSFcbiAgICAgICAgICAgICAgICBpZiAoZGF0YS5wb2ludHNbMF0gIT09IGRhdGEucG9pbnRzW2RhdGEucG9pbnRzLmxlbmd0aC0yXSB8fCBkYXRhLnBvaW50c1sxXSAhPT0gZGF0YS5wb2ludHNbZGF0YS5wb2ludHMubGVuZ3RoLTFdKVxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgZGF0YS5wb2ludHMucHVzaChkYXRhLnBvaW50c1swXSwgZGF0YS5wb2ludHNbMV0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gTUFLRSBTVVJFIFdFIEhBVkUgVEhFIENPUlJFQ1QgVFlQRS4uXG4gICAgICAgICAgICBpZiAoZGF0YS5maWxsKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGlmIChkYXRhLnBvaW50cy5sZW5ndGggPj0gNilcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChkYXRhLnBvaW50cy5sZW5ndGggPCB0aGlzLm1heGltdW1TaW1wbGVQb2x5U2l6ZSAqIDIpXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHdlYkdMRGF0YSA9IHRoaXMuc3dpdGNoTW9kZSh3ZWJHTCwgMCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjYW5EcmF3VXNpbmdTaW1wbGUgPSBidWlsZFBvbHkoZGF0YSwgd2ViR0xEYXRhKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFjYW5EcmF3VXNpbmdTaW1wbGUpXG4gICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd2ViR0xEYXRhID0gdGhpcy5zd2l0Y2hNb2RlKHdlYkdMLCAxKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWlsZENvbXBsZXhQb2x5KGRhdGEsIHdlYkdMRGF0YSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHdlYkdMRGF0YSA9IHRoaXMuc3dpdGNoTW9kZSh3ZWJHTCwgMSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBidWlsZENvbXBsZXhQb2x5KGRhdGEsIHdlYkdMRGF0YSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChkYXRhLmxpbmVXaWR0aCA+IDApXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgd2ViR0xEYXRhID0gdGhpcy5zd2l0Y2hNb2RlKHdlYkdMLCAwKTtcbiAgICAgICAgICAgICAgICBidWlsZExpbmUoZGF0YSwgd2ViR0xEYXRhKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgIHtcbiAgICAgICAgICAgIHdlYkdMRGF0YSA9IHRoaXMuc3dpdGNoTW9kZSh3ZWJHTCwgMCk7XG5cbiAgICAgICAgICAgIGlmIChkYXRhLnR5cGUgPT09IENPTlNULlNIQVBFUy5SRUNUKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGJ1aWxkUmVjdGFuZ2xlKGRhdGEsIHdlYkdMRGF0YSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChkYXRhLnR5cGUgPT09IENPTlNULlNIQVBFUy5DSVJDIHx8IGRhdGEudHlwZSA9PT0gQ09OU1QuU0hBUEVTLkVMSVApXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgYnVpbGRDaXJjbGUoZGF0YSwgd2ViR0xEYXRhKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGRhdGEudHlwZSA9PT0gQ09OU1QuU0hBUEVTLlJSRUMpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgYnVpbGRSb3VuZGVkUmVjdGFuZ2xlKGRhdGEsIHdlYkdMRGF0YSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICB3ZWJHTC5sYXN0SW5kZXgrKztcbiAgICB9XG5cbiAgICAvLyB1cGxvYWQgYWxsIHRoZSBkaXJ0eSBkYXRhLi4uXG4gICAgZm9yIChpID0gMDsgaSA8IHdlYkdMLmRhdGEubGVuZ3RoOyBpKyspXG4gICAge1xuICAgICAgICB3ZWJHTERhdGEgPSB3ZWJHTC5kYXRhW2ldO1xuXG4gICAgICAgIGlmICh3ZWJHTERhdGEuZGlydHkpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHdlYkdMRGF0YS51cGxvYWQoKTtcbiAgICAgICAgfVxuICAgIH1cbn07XG5cbi8qKlxuICpcbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHdlYkdMIHtXZWJHTFJlbmRlcmluZ0NvbnRleHR9IHRoZSBjdXJyZW50IFdlYkdMIGRyYXdpbmcgY29udGV4dFxuICogQHBhcmFtIHR5cGUge251bWJlcn0gVE9ETyBAQWx2aW5cbiAqL1xuR3JhcGhpY3NSZW5kZXJlci5wcm90b3R5cGUuc3dpdGNoTW9kZSA9IGZ1bmN0aW9uICh3ZWJHTCwgdHlwZSlcbntcbiAgICB2YXIgd2ViR0xEYXRhO1xuXG4gICAgaWYgKCF3ZWJHTC5kYXRhLmxlbmd0aClcbiAgICB7XG4gICAgICAgIHdlYkdMRGF0YSA9IHRoaXMuZ3JhcGhpY3NEYXRhUG9vbC5wb3AoKSB8fCBuZXcgV2ViR0xHcmFwaGljc0RhdGEod2ViR0wuZ2wpO1xuICAgICAgICB3ZWJHTERhdGEubW9kZSA9IHR5cGU7XG4gICAgICAgIHdlYkdMLmRhdGEucHVzaCh3ZWJHTERhdGEpO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICB3ZWJHTERhdGEgPSB3ZWJHTC5kYXRhW3dlYkdMLmRhdGEubGVuZ3RoLTFdO1xuXG4gICAgICAgIGlmICgod2ViR0xEYXRhLnBvaW50cy5sZW5ndGggPiAzMjAwMDApIHx8IHdlYkdMRGF0YS5tb2RlICE9PSB0eXBlIHx8IHR5cGUgPT09IDEpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHdlYkdMRGF0YSA9IHRoaXMuZ3JhcGhpY3NEYXRhUG9vbC5wb3AoKSB8fCBuZXcgV2ViR0xHcmFwaGljc0RhdGEod2ViR0wuZ2wpO1xuICAgICAgICAgICAgd2ViR0xEYXRhLm1vZGUgPSB0eXBlO1xuICAgICAgICAgICAgd2ViR0wuZGF0YS5wdXNoKHdlYkdMRGF0YSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB3ZWJHTERhdGEuZGlydHkgPSB0cnVlO1xuXG4gICAgcmV0dXJuIHdlYkdMRGF0YTtcbn07XG5cbiIsIi8qKlxuICogQW4gb2JqZWN0IGNvbnRhaW5pbmcgV2ViR0wgc3BlY2lmaWMgcHJvcGVydGllcyB0byBiZSB1c2VkIGJ5IHRoZSBXZWJHTCByZW5kZXJlclxuICpcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqIEBwYXJhbSBnbCB7V2ViR0xSZW5kZXJpbmdDb250ZXh0fSB0aGUgY3VycmVudCBXZWJHTCBkcmF3aW5nIGNvbnRleHRcbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIFdlYkdMR3JhcGhpY3NEYXRhKGdsKSB7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgY3VycmVudCBXZWJHTCBkcmF3aW5nIGNvbnRleHRcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1dlYkdMUmVuZGVyaW5nQ29udGV4dH1cbiAgICAgKi9cbiAgICB0aGlzLmdsID0gZ2w7XG5cbiAgICAvL1RPRE8gZG9lcyB0aGlzIG5lZWQgdG8gYmUgc3BsaXQgYmVmb3JlIHVwbG9kaW5nPz9cbiAgICAvKipcbiAgICAgKiBBbiBhcnJheSBvZiBjb2xvciBjb21wb25lbnRzIChyLGcsYilcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJbXX1cbiAgICAgKi9cbiAgICB0aGlzLmNvbG9yID0gWzAsMCwwXTsgLy8gY29sb3Igc3BsaXQhXG5cbiAgICAvKipcbiAgICAgKiBBbiBhcnJheSBvZiBwb2ludHMgdG8gZHJhd1xuICAgICAqIEBtZW1iZXIge1BJWEkuUG9pbnRbXX1cbiAgICAgKi9cbiAgICB0aGlzLnBvaW50cyA9IFtdO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGluZGljZXMgb2YgdGhlIHZlcnRpY2VzXG4gICAgICogQG1lbWJlciB7bnVtYmVyW119XG4gICAgICovXG4gICAgdGhpcy5pbmRpY2VzID0gW107XG4gICAgLyoqXG4gICAgICogVGhlIG1haW4gYnVmZmVyXG4gICAgICogQG1lbWJlciB7V2ViR0xCdWZmZXJ9XG4gICAgICovXG4gICAgdGhpcy5idWZmZXIgPSBnbC5jcmVhdGVCdWZmZXIoKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBpbmRleCBidWZmZXJcbiAgICAgKiBAbWVtYmVyIHtXZWJHTEJ1ZmZlcn1cbiAgICAgKi9cbiAgICB0aGlzLmluZGV4QnVmZmVyID0gZ2wuY3JlYXRlQnVmZmVyKCk7XG5cbiAgICAvKipcbiAgICAgKiB0b2RvIEBhbHZpblxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLm1vZGUgPSAxO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGFscGhhIG9mIHRoZSBncmFwaGljc1xuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLmFscGhhID0gMTtcblxuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgdGhpcyBncmFwaGljcyBpcyBkaXJ0eSBvciBub3RcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqL1xuICAgIHRoaXMuZGlydHkgPSB0cnVlO1xuXG4gICAgdGhpcy5nbFBvaW50cyA9IG51bGw7XG4gICAgdGhpcy5nbEluZGljZXMgPSBudWxsO1xufVxuXG5XZWJHTEdyYXBoaWNzRGF0YS5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBXZWJHTEdyYXBoaWNzRGF0YTtcbm1vZHVsZS5leHBvcnRzID0gV2ViR0xHcmFwaGljc0RhdGE7XG5cbi8qKlxuICogUmVzZXRzIHRoZSB2ZXJ0aWNlcyBhbmQgdGhlIGluZGljZXNcbiAqL1xuV2ViR0xHcmFwaGljc0RhdGEucHJvdG90eXBlLnJlc2V0ID0gZnVuY3Rpb24gKCkge1xuICAgIHRoaXMucG9pbnRzLmxlbmd0aCA9IDA7XG4gICAgdGhpcy5pbmRpY2VzLmxlbmd0aCA9IDA7XG59O1xuXG4vKipcbiAqIEJpbmRzIHRoZSBidWZmZXJzIGFuZCB1cGxvYWRzIHRoZSBkYXRhXG4gKi9cbldlYkdMR3JhcGhpY3NEYXRhLnByb3RvdHlwZS51cGxvYWQgPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGdsID0gdGhpcy5nbDtcblxuLy8gICAgdGhpcy5sYXN0SW5kZXggPSBncmFwaGljcy5ncmFwaGljc0RhdGEubGVuZ3RoO1xuICAgIHRoaXMuZ2xQb2ludHMgPSBuZXcgRmxvYXQzMkFycmF5KHRoaXMucG9pbnRzKTtcblxuICAgIGdsLmJpbmRCdWZmZXIoZ2wuQVJSQVlfQlVGRkVSLCB0aGlzLmJ1ZmZlcik7XG4gICAgZ2wuYnVmZmVyRGF0YShnbC5BUlJBWV9CVUZGRVIsIHRoaXMuZ2xQb2ludHMsIGdsLlNUQVRJQ19EUkFXKTtcblxuICAgIHRoaXMuZ2xJbmRpY2VzID0gbmV3IFVpbnQxNkFycmF5KHRoaXMuaW5kaWNlcyk7XG5cbiAgICBnbC5iaW5kQnVmZmVyKGdsLkVMRU1FTlRfQVJSQVlfQlVGRkVSLCB0aGlzLmluZGV4QnVmZmVyKTtcbiAgICBnbC5idWZmZXJEYXRhKGdsLkVMRU1FTlRfQVJSQVlfQlVGRkVSLCB0aGlzLmdsSW5kaWNlcywgZ2wuU1RBVElDX0RSQVcpO1xuXG4gICAgdGhpcy5kaXJ0eSA9IGZhbHNlO1xufTtcblxuV2ViR0xHcmFwaGljc0RhdGEucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoKSB7XG4gICAgdGhpcy5jb2xvciA9IG51bGw7XG4gICAgdGhpcy5wb2ludHMgPSBudWxsO1xuICAgIHRoaXMuaW5kaWNlcyA9IG51bGw7XG5cbiAgICB0aGlzLmdsLmRlbGV0ZUJ1ZmZlcih0aGlzLmJ1ZmZlcik7XG4gICAgdGhpcy5nbC5kZWxldGVCdWZmZXIodGhpcy5pbmRleEJ1ZmZlcik7XG4gICAgXG4gICAgdGhpcy5nbCA9IG51bGw7XG5cbiAgICB0aGlzLmJ1ZmZlciA9IG51bGw7XG4gICAgdGhpcy5pbmRleEJ1ZmZlciA9IG51bGw7XG5cbiAgICB0aGlzLmdsUG9pbnRzID0gbnVsbDtcbiAgICB0aGlzLmdsSW5kaWNlcyA9IG51bGw7XG59O1xuIiwidmFyIFNoYWRlciA9IHJlcXVpcmUoJ3BpeGktZ2wtY29yZScpLkdMU2hhZGVyO1xuXG4vKipcbiAqIFRoaXMgc2hhZGVyIGlzIHVzZWQgdG8gZHJhdyBzaW1wbGUgcHJpbWl0aXZlIHNoYXBlcyBmb3Ige0BsaW5rIFBJWEkuR3JhcGhpY3N9LlxuICpcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqIEBleHRlbmRzIFBJWEkuU2hhZGVyXG4gKiBAcGFyYW0gc2hhZGVyTWFuYWdlciB7U2hhZGVyTWFuYWdlcn0gVGhlIHdlYmdsIHNoYWRlciBtYW5hZ2VyIHRoaXMgc2hhZGVyIHdvcmtzIGZvci5cbiAqL1xuZnVuY3Rpb24gUHJpbWl0aXZlU2hhZGVyKGdsKVxue1xuICAgIFNoYWRlci5jYWxsKHRoaXMsXG4gICAgICAgIGdsLFxuICAgICAgICAvLyB2ZXJ0ZXggc2hhZGVyXG4gICAgICAgIFtcbiAgICAgICAgICAgICdhdHRyaWJ1dGUgdmVjMiBhVmVydGV4UG9zaXRpb247JyxcbiAgICAgICAgICAgICdhdHRyaWJ1dGUgdmVjNCBhQ29sb3I7JyxcblxuICAgICAgICAgICAgJ3VuaWZvcm0gbWF0MyB0cmFuc2xhdGlvbk1hdHJpeDsnLFxuICAgICAgICAgICAgJ3VuaWZvcm0gbWF0MyBwcm9qZWN0aW9uTWF0cml4OycsXG5cbiAgICAgICAgICAgICd1bmlmb3JtIGZsb2F0IGFscGhhOycsXG4gICAgICAgICAgICAndW5pZm9ybSBmbG9hdCBmbGlwWTsnLFxuICAgICAgICAgICAgJ3VuaWZvcm0gdmVjMyB0aW50OycsXG5cbiAgICAgICAgICAgICd2YXJ5aW5nIHZlYzQgdkNvbG9yOycsXG5cbiAgICAgICAgICAgICd2b2lkIG1haW4odm9pZCl7JyxcbiAgICAgICAgICAgICcgICBnbF9Qb3NpdGlvbiA9IHZlYzQoKHByb2plY3Rpb25NYXRyaXggKiB0cmFuc2xhdGlvbk1hdHJpeCAqIHZlYzMoYVZlcnRleFBvc2l0aW9uLCAxLjApKS54eSwgMC4wLCAxLjApOycsXG4gICAgICAgICAgICAnICAgdkNvbG9yID0gYUNvbG9yICogdmVjNCh0aW50ICogYWxwaGEsIGFscGhhKTsnLFxuICAgICAgICAgICAgJ30nXG4gICAgICAgIF0uam9pbignXFxuJyksXG4gICAgICAgIC8vIGZyYWdtZW50IHNoYWRlclxuICAgICAgICBbXG4gICAgICAgICAgICAncHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7JyxcblxuICAgICAgICAgICAgJ3ZhcnlpbmcgdmVjNCB2Q29sb3I7JyxcblxuICAgICAgICAgICAgJ3ZvaWQgbWFpbih2b2lkKXsnLFxuICAgICAgICAgICAgJyAgIGdsX0ZyYWdDb2xvciA9IHZDb2xvcjsnLFxuICAgICAgICAgICAgJ30nXG4gICAgICAgIF0uam9pbignXFxuJylcbiAgICApO1xufVxuXG5QcmltaXRpdmVTaGFkZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShTaGFkZXIucHJvdG90eXBlKTtcblByaW1pdGl2ZVNoYWRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBQcmltaXRpdmVTaGFkZXI7XG5cbm1vZHVsZS5leHBvcnRzID0gUHJpbWl0aXZlU2hhZGVyO1xuIiwidmFyIGJ1aWxkTGluZSA9IHJlcXVpcmUoJy4vYnVpbGRMaW5lJyksXG4gICAgdXRpbHMgPSByZXF1aXJlKCcuLi8uLi8uLi91dGlscycpO1xuXG4vKipcbiAqIEJ1aWxkcyBhIGNpcmNsZSB0byBkcmF3XG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSBncmFwaGljc0RhdGEge1BJWEkuR3JhcGhpY3N9IFRoZSBncmFwaGljcyBvYmplY3QgdG8gZHJhd1xuICogQHBhcmFtIHdlYkdMRGF0YSB7b2JqZWN0fSBhbiBvYmplY3QgY29udGFpbmluZyBhbGwgdGhlIHdlYkdMLXNwZWNpZmljIGluZm9ybWF0aW9uIHRvIGNyZWF0ZSB0aGlzIHNoYXBlXG4gKi9cbnZhciBidWlsZENpcmNsZSA9IGZ1bmN0aW9uIChncmFwaGljc0RhdGEsIHdlYkdMRGF0YSlcbntcbiAgICAvLyBuZWVkIHRvIGNvbnZlcnQgcG9pbnRzIHRvIGEgbmljZSByZWd1bGFyIGRhdGFcbiAgICB2YXIgY2lyY2xlRGF0YSA9IGdyYXBoaWNzRGF0YS5zaGFwZTtcbiAgICB2YXIgeCA9IGNpcmNsZURhdGEueDtcbiAgICB2YXIgeSA9IGNpcmNsZURhdGEueTtcbiAgICB2YXIgd2lkdGg7XG4gICAgdmFyIGhlaWdodDtcblxuICAgIC8vIFRPRE8gLSBiaXQgaGFja3k/P1xuICAgIGlmIChncmFwaGljc0RhdGEudHlwZSA9PT0gQ09OU1QuU0hBUEVTLkNJUkMpXG4gICAge1xuICAgICAgICB3aWR0aCA9IGNpcmNsZURhdGEucmFkaXVzO1xuICAgICAgICBoZWlnaHQgPSBjaXJjbGVEYXRhLnJhZGl1cztcbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgd2lkdGggPSBjaXJjbGVEYXRhLndpZHRoO1xuICAgICAgICBoZWlnaHQgPSBjaXJjbGVEYXRhLmhlaWdodDtcbiAgICB9XG5cbiAgICB2YXIgdG90YWxTZWdzID0gTWF0aC5mbG9vcigzMCAqIE1hdGguc3FydChjaXJjbGVEYXRhLnJhZGl1cykpIHx8IE1hdGguZmxvb3IoMTUgKiBNYXRoLnNxcnQoY2lyY2xlRGF0YS53aWR0aCArIGNpcmNsZURhdGEuaGVpZ2h0KSk7XG4gICAgdmFyIHNlZyA9IChNYXRoLlBJICogMikgLyB0b3RhbFNlZ3MgO1xuXG4gICAgdmFyIGkgPSAwO1xuXG4gICAgaWYgKGdyYXBoaWNzRGF0YS5maWxsKVxuICAgIHtcbiAgICAgICAgdmFyIGNvbG9yID0gdXRpbHMuaGV4MnJnYihncmFwaGljc0RhdGEuZmlsbENvbG9yKTtcbiAgICAgICAgdmFyIGFscGhhID0gZ3JhcGhpY3NEYXRhLmZpbGxBbHBoYTtcblxuICAgICAgICB2YXIgciA9IGNvbG9yWzBdICogYWxwaGE7XG4gICAgICAgIHZhciBnID0gY29sb3JbMV0gKiBhbHBoYTtcbiAgICAgICAgdmFyIGIgPSBjb2xvclsyXSAqIGFscGhhO1xuXG4gICAgICAgIHZhciB2ZXJ0cyA9IHdlYkdMRGF0YS5wb2ludHM7XG4gICAgICAgIHZhciBpbmRpY2VzID0gd2ViR0xEYXRhLmluZGljZXM7XG5cbiAgICAgICAgdmFyIHZlY1BvcyA9IHZlcnRzLmxlbmd0aC82O1xuXG4gICAgICAgIGluZGljZXMucHVzaCh2ZWNQb3MpO1xuXG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCB0b3RhbFNlZ3MgKyAxIDsgaSsrKVxuICAgICAgICB7XG4gICAgICAgICAgICB2ZXJ0cy5wdXNoKHgseSwgciwgZywgYiwgYWxwaGEpO1xuXG4gICAgICAgICAgICB2ZXJ0cy5wdXNoKHggKyBNYXRoLnNpbihzZWcgKiBpKSAqIHdpZHRoLFxuICAgICAgICAgICAgICAgICAgICAgICB5ICsgTWF0aC5jb3Moc2VnICogaSkgKiBoZWlnaHQsXG4gICAgICAgICAgICAgICAgICAgICAgIHIsIGcsIGIsIGFscGhhKTtcblxuICAgICAgICAgICAgaW5kaWNlcy5wdXNoKHZlY1BvcysrLCB2ZWNQb3MrKyk7XG4gICAgICAgIH1cblxuICAgICAgICBpbmRpY2VzLnB1c2godmVjUG9zLTEpO1xuICAgIH1cblxuICAgIGlmIChncmFwaGljc0RhdGEubGluZVdpZHRoKVxuICAgIHtcbiAgICAgICAgdmFyIHRlbXBQb2ludHMgPSBncmFwaGljc0RhdGEucG9pbnRzO1xuXG4gICAgICAgIGdyYXBoaWNzRGF0YS5wb2ludHMgPSBbXTtcblxuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgdG90YWxTZWdzICsgMTsgaSsrKVxuICAgICAgICB7XG4gICAgICAgICAgICBncmFwaGljc0RhdGEucG9pbnRzLnB1c2goeCArIE1hdGguc2luKHNlZyAqIGkpICogd2lkdGgsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeSArIE1hdGguY29zKHNlZyAqIGkpICogaGVpZ2h0KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGJ1aWxkTGluZShncmFwaGljc0RhdGEsIHdlYkdMRGF0YSk7XG5cbiAgICAgICAgZ3JhcGhpY3NEYXRhLnBvaW50cyA9IHRlbXBQb2ludHM7XG4gICAgfVxufTtcblxuXG5tb2R1bGUuZXhwb3J0cyA9IGJ1aWxkQ2lyY2xlOyIsInZhciBidWlsZExpbmUgPSByZXF1aXJlKCcuL2J1aWxkTGluZScpLFxuICAgIHV0aWxzID0gcmVxdWlyZSgnLi4vLi4vLi4vdXRpbHMnKTtcbiAgICBcblxuXG4vKipcbiAqIEJ1aWxkcyBhIGNvbXBsZXggcG9seWdvbiB0byBkcmF3XG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSBncmFwaGljc0RhdGEge1BJWEkuR3JhcGhpY3N9IFRoZSBncmFwaGljcyBvYmplY3QgY29udGFpbmluZyBhbGwgdGhlIG5lY2Vzc2FyeSBwcm9wZXJ0aWVzXG4gKiBAcGFyYW0gd2ViR0xEYXRhIHtvYmplY3R9IGFuIG9iamVjdCBjb250YWluaW5nIGFsbCB0aGUgd2ViR0wtc3BlY2lmaWMgaW5mb3JtYXRpb24gdG8gY3JlYXRlIHRoaXMgc2hhcGVcbiAqL1xudmFyIGJ1aWxkQ29tcGxleFBvbHkgPSBmdW5jdGlvbiAoZ3JhcGhpY3NEYXRhLCB3ZWJHTERhdGEpXG57XG4gICAgLy9UT0RPIC0gbm8gbmVlZCB0byBjb3B5IHRoaXMgYXMgaXQgZ2V0cyB0dXJuZWQgaW50byBhIEZMb2F0MzJBcnJheSBhbnl3YXlzLi5cbiAgICB2YXIgcG9pbnRzID0gZ3JhcGhpY3NEYXRhLnBvaW50cy5zbGljZSgpO1xuXG4gICAgaWYgKHBvaW50cy5sZW5ndGggPCA2KVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIGdldCBmaXJzdCBhbmQgbGFzdCBwb2ludC4uIGZpZ3VyZSBvdXQgdGhlIG1pZGRsZSFcbiAgICB2YXIgaW5kaWNlcyA9IHdlYkdMRGF0YS5pbmRpY2VzO1xuICAgIHdlYkdMRGF0YS5wb2ludHMgPSBwb2ludHM7XG4gICAgd2ViR0xEYXRhLmFscGhhID0gZ3JhcGhpY3NEYXRhLmZpbGxBbHBoYTtcbiAgICB3ZWJHTERhdGEuY29sb3IgPSB1dGlscy5oZXgycmdiKGdyYXBoaWNzRGF0YS5maWxsQ29sb3IpO1xuXG4gICAgLy8gY2FsY2xhdGUgdGhlIGJvdW5kcy4uXG4gICAgdmFyIG1pblggPSBJbmZpbml0eTtcbiAgICB2YXIgbWF4WCA9IC1JbmZpbml0eTtcblxuICAgIHZhciBtaW5ZID0gSW5maW5pdHk7XG4gICAgdmFyIG1heFkgPSAtSW5maW5pdHk7XG5cbiAgICB2YXIgeCx5O1xuXG4gICAgLy8gZ2V0IHNpemUuLlxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcG9pbnRzLmxlbmd0aDsgaSs9MilcbiAgICB7XG4gICAgICAgIHggPSBwb2ludHNbaV07XG4gICAgICAgIHkgPSBwb2ludHNbaSsxXTtcblxuICAgICAgICBtaW5YID0geCA8IG1pblggPyB4IDogbWluWDtcbiAgICAgICAgbWF4WCA9IHggPiBtYXhYID8geCA6IG1heFg7XG5cbiAgICAgICAgbWluWSA9IHkgPCBtaW5ZID8geSA6IG1pblk7XG4gICAgICAgIG1heFkgPSB5ID4gbWF4WSA/IHkgOiBtYXhZO1xuICAgIH1cblxuICAgIC8vIGFkZCBhIHF1YWQgdG8gdGhlIGVuZCBjb3MgdGhlcmUgaXMgbm8gcG9pbnQgbWFraW5nIGFub3RoZXIgYnVmZmVyIVxuICAgIHBvaW50cy5wdXNoKG1pblgsIG1pblksXG4gICAgICAgICAgICAgICAgbWF4WCwgbWluWSxcbiAgICAgICAgICAgICAgICBtYXhYLCBtYXhZLFxuICAgICAgICAgICAgICAgIG1pblgsIG1heFkpO1xuXG4gICAgLy8gcHVzaCBhIHF1YWQgb250byB0aGUgZW5kLi5cblxuICAgIC8vVE9ETyAtIHRoaXMgYWludCBuZWVkZWQhXG4gICAgdmFyIGxlbmd0aCA9IHBvaW50cy5sZW5ndGggLyAyO1xuICAgIGZvciAoaSA9IDA7IGkgPCBsZW5ndGg7IGkrKylcbiAgICB7XG4gICAgICAgIGluZGljZXMucHVzaCggaSApO1xuICAgIH1cblxufTtcblxuXG5cbm1vZHVsZS5leHBvcnRzID0gYnVpbGRDb21wbGV4UG9seTsiLCJ2YXIgbWF0aCA9IHJlcXVpcmUoJy4uLy4uLy4uL21hdGgnKSxcbiAgICB1dGlscyA9IHJlcXVpcmUoJy4uLy4uLy4uL3V0aWxzJyk7XG5cbi8qKlxuICogQnVpbGRzIGEgbGluZSB0byBkcmF3XG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSBncmFwaGljc0RhdGEge1BJWEkuR3JhcGhpY3N9IFRoZSBncmFwaGljcyBvYmplY3QgY29udGFpbmluZyBhbGwgdGhlIG5lY2Vzc2FyeSBwcm9wZXJ0aWVzXG4gKiBAcGFyYW0gd2ViR0xEYXRhIHtvYmplY3R9IGFuIG9iamVjdCBjb250YWluaW5nIGFsbCB0aGUgd2ViR0wtc3BlY2lmaWMgaW5mb3JtYXRpb24gdG8gY3JlYXRlIHRoaXMgc2hhcGVcbiAqL1xudmFyIGJ1aWxkTGluZSA9IGZ1bmN0aW9uIChncmFwaGljc0RhdGEsIHdlYkdMRGF0YSlcbntcbiAgICAvLyBUT0RPIE9QVElNSVNFIVxuICAgIHZhciBpID0gMDtcbiAgICB2YXIgcG9pbnRzID0gZ3JhcGhpY3NEYXRhLnBvaW50cztcblxuICAgIGlmIChwb2ludHMubGVuZ3RoID09PSAwKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICAvLyBpZiB0aGUgbGluZSB3aWR0aCBpcyBhbiBvZGQgbnVtYmVyIGFkZCAwLjUgdG8gYWxpZ24gdG8gYSB3aG9sZSBwaXhlbFxuICAgIC8vIGNvbW1lbnRpbmcgdGhpcyBvdXQgZml4ZXMgIzcxMSBhbmQgIzE2MjBcbiAgICAvLyBpZiAoZ3JhcGhpY3NEYXRhLmxpbmVXaWR0aCUyKVxuICAgIC8vIHtcbiAgICAvLyAgICAgZm9yIChpID0gMDsgaSA8IHBvaW50cy5sZW5ndGg7IGkrKylcbiAgICAvLyAgICAge1xuICAgIC8vICAgICAgICAgcG9pbnRzW2ldICs9IDAuNTtcbiAgICAvLyAgICAgfVxuICAgIC8vIH1cblxuICAgIC8vIGdldCBmaXJzdCBhbmQgbGFzdCBwb2ludC4uIGZpZ3VyZSBvdXQgdGhlIG1pZGRsZSFcbiAgICB2YXIgZmlyc3RQb2ludCA9IG5ldyBtYXRoLlBvaW50KHBvaW50c1swXSwgcG9pbnRzWzFdKTtcbiAgICB2YXIgbGFzdFBvaW50ID0gbmV3IG1hdGguUG9pbnQocG9pbnRzW3BvaW50cy5sZW5ndGggLSAyXSwgcG9pbnRzW3BvaW50cy5sZW5ndGggLSAxXSk7XG5cbiAgICAvLyBpZiB0aGUgZmlyc3QgcG9pbnQgaXMgdGhlIGxhc3QgcG9pbnQgLSBnb25uYSBoYXZlIGlzc3VlcyA6KVxuICAgIGlmIChmaXJzdFBvaW50LnggPT09IGxhc3RQb2ludC54ICYmIGZpcnN0UG9pbnQueSA9PT0gbGFzdFBvaW50LnkpXG4gICAge1xuICAgICAgICAvLyBuZWVkIHRvIGNsb25lIGFzIHdlIGFyZSBnb2luZyB0byBzbGlnaHRseSBtb2RpZnkgdGhlIHNoYXBlLi5cbiAgICAgICAgcG9pbnRzID0gcG9pbnRzLnNsaWNlKCk7XG5cbiAgICAgICAgcG9pbnRzLnBvcCgpO1xuICAgICAgICBwb2ludHMucG9wKCk7XG5cbiAgICAgICAgbGFzdFBvaW50ID0gbmV3IG1hdGguUG9pbnQocG9pbnRzW3BvaW50cy5sZW5ndGggLSAyXSwgcG9pbnRzW3BvaW50cy5sZW5ndGggLSAxXSk7XG5cbiAgICAgICAgdmFyIG1pZFBvaW50WCA9IGxhc3RQb2ludC54ICsgKGZpcnN0UG9pbnQueCAtIGxhc3RQb2ludC54KSAqMC41O1xuICAgICAgICB2YXIgbWlkUG9pbnRZID0gbGFzdFBvaW50LnkgKyAoZmlyc3RQb2ludC55IC0gbGFzdFBvaW50LnkpICowLjU7XG5cbiAgICAgICAgcG9pbnRzLnVuc2hpZnQobWlkUG9pbnRYLCBtaWRQb2ludFkpO1xuICAgICAgICBwb2ludHMucHVzaChtaWRQb2ludFgsIG1pZFBvaW50WSk7XG4gICAgfVxuXG4gICAgdmFyIHZlcnRzID0gd2ViR0xEYXRhLnBvaW50cztcbiAgICB2YXIgaW5kaWNlcyA9IHdlYkdMRGF0YS5pbmRpY2VzO1xuICAgIHZhciBsZW5ndGggPSBwb2ludHMubGVuZ3RoIC8gMjtcbiAgICB2YXIgaW5kZXhDb3VudCA9IHBvaW50cy5sZW5ndGg7XG4gICAgdmFyIGluZGV4U3RhcnQgPSB2ZXJ0cy5sZW5ndGgvNjtcblxuICAgIC8vIERSQVcgdGhlIExpbmVcbiAgICB2YXIgd2lkdGggPSBncmFwaGljc0RhdGEubGluZVdpZHRoIC8gMjtcblxuICAgIC8vIHNvcnQgY29sb3JcbiAgICB2YXIgY29sb3IgPSB1dGlscy5oZXgycmdiKGdyYXBoaWNzRGF0YS5saW5lQ29sb3IpO1xuICAgIHZhciBhbHBoYSA9IGdyYXBoaWNzRGF0YS5saW5lQWxwaGE7XG4gICAgdmFyIHIgPSBjb2xvclswXSAqIGFscGhhO1xuICAgIHZhciBnID0gY29sb3JbMV0gKiBhbHBoYTtcbiAgICB2YXIgYiA9IGNvbG9yWzJdICogYWxwaGE7XG5cbiAgICB2YXIgcHgsIHB5LCBwMXgsIHAxeSwgcDJ4LCBwMnksIHAzeCwgcDN5O1xuICAgIHZhciBwZXJweCwgcGVycHksIHBlcnAyeCwgcGVycDJ5LCBwZXJwM3gsIHBlcnAzeTtcbiAgICB2YXIgYTEsIGIxLCBjMSwgYTIsIGIyLCBjMjtcbiAgICB2YXIgZGVub20sIHBkaXN0LCBkaXN0O1xuXG4gICAgcDF4ID0gcG9pbnRzWzBdO1xuICAgIHAxeSA9IHBvaW50c1sxXTtcblxuICAgIHAyeCA9IHBvaW50c1syXTtcbiAgICBwMnkgPSBwb2ludHNbM107XG5cbiAgICBwZXJweCA9IC0ocDF5IC0gcDJ5KTtcbiAgICBwZXJweSA9ICBwMXggLSBwMng7XG5cbiAgICBkaXN0ID0gTWF0aC5zcXJ0KHBlcnB4KnBlcnB4ICsgcGVycHkqcGVycHkpO1xuXG4gICAgcGVycHggLz0gZGlzdDtcbiAgICBwZXJweSAvPSBkaXN0O1xuICAgIHBlcnB4ICo9IHdpZHRoO1xuICAgIHBlcnB5ICo9IHdpZHRoO1xuXG4gICAgLy8gc3RhcnRcbiAgICB2ZXJ0cy5wdXNoKHAxeCAtIHBlcnB4ICwgcDF5IC0gcGVycHksXG4gICAgICAgICAgICAgICAgciwgZywgYiwgYWxwaGEpO1xuXG4gICAgdmVydHMucHVzaChwMXggKyBwZXJweCAsIHAxeSArIHBlcnB5LFxuICAgICAgICAgICAgICAgIHIsIGcsIGIsIGFscGhhKTtcblxuICAgIGZvciAoaSA9IDE7IGkgPCBsZW5ndGgtMTsgaSsrKVxuICAgIHtcbiAgICAgICAgcDF4ID0gcG9pbnRzWyhpLTEpKjJdO1xuICAgICAgICBwMXkgPSBwb2ludHNbKGktMSkqMiArIDFdO1xuXG4gICAgICAgIHAyeCA9IHBvaW50c1soaSkqMl07XG4gICAgICAgIHAyeSA9IHBvaW50c1soaSkqMiArIDFdO1xuXG4gICAgICAgIHAzeCA9IHBvaW50c1soaSsxKSoyXTtcbiAgICAgICAgcDN5ID0gcG9pbnRzWyhpKzEpKjIgKyAxXTtcblxuICAgICAgICBwZXJweCA9IC0ocDF5IC0gcDJ5KTtcbiAgICAgICAgcGVycHkgPSBwMXggLSBwMng7XG5cbiAgICAgICAgZGlzdCA9IE1hdGguc3FydChwZXJweCpwZXJweCArIHBlcnB5KnBlcnB5KTtcbiAgICAgICAgcGVycHggLz0gZGlzdDtcbiAgICAgICAgcGVycHkgLz0gZGlzdDtcbiAgICAgICAgcGVycHggKj0gd2lkdGg7XG4gICAgICAgIHBlcnB5ICo9IHdpZHRoO1xuXG4gICAgICAgIHBlcnAyeCA9IC0ocDJ5IC0gcDN5KTtcbiAgICAgICAgcGVycDJ5ID0gcDJ4IC0gcDN4O1xuXG4gICAgICAgIGRpc3QgPSBNYXRoLnNxcnQocGVycDJ4KnBlcnAyeCArIHBlcnAyeSpwZXJwMnkpO1xuICAgICAgICBwZXJwMnggLz0gZGlzdDtcbiAgICAgICAgcGVycDJ5IC89IGRpc3Q7XG4gICAgICAgIHBlcnAyeCAqPSB3aWR0aDtcbiAgICAgICAgcGVycDJ5ICo9IHdpZHRoO1xuXG4gICAgICAgIGExID0gKC1wZXJweSArIHAxeSkgLSAoLXBlcnB5ICsgcDJ5KTtcbiAgICAgICAgYjEgPSAoLXBlcnB4ICsgcDJ4KSAtICgtcGVycHggKyBwMXgpO1xuICAgICAgICBjMSA9ICgtcGVycHggKyBwMXgpICogKC1wZXJweSArIHAyeSkgLSAoLXBlcnB4ICsgcDJ4KSAqICgtcGVycHkgKyBwMXkpO1xuICAgICAgICBhMiA9ICgtcGVycDJ5ICsgcDN5KSAtICgtcGVycDJ5ICsgcDJ5KTtcbiAgICAgICAgYjIgPSAoLXBlcnAyeCArIHAyeCkgLSAoLXBlcnAyeCArIHAzeCk7XG4gICAgICAgIGMyID0gKC1wZXJwMnggKyBwM3gpICogKC1wZXJwMnkgKyBwMnkpIC0gKC1wZXJwMnggKyBwMngpICogKC1wZXJwMnkgKyBwM3kpO1xuXG4gICAgICAgIGRlbm9tID0gYTEqYjIgLSBhMipiMTtcblxuICAgICAgICBpZiAoTWF0aC5hYnMoZGVub20pIDwgMC4xIClcbiAgICAgICAge1xuXG4gICAgICAgICAgICBkZW5vbSs9MTAuMTtcbiAgICAgICAgICAgIHZlcnRzLnB1c2gocDJ4IC0gcGVycHggLCBwMnkgLSBwZXJweSxcbiAgICAgICAgICAgICAgICByLCBnLCBiLCBhbHBoYSk7XG5cbiAgICAgICAgICAgIHZlcnRzLnB1c2gocDJ4ICsgcGVycHggLCBwMnkgKyBwZXJweSxcbiAgICAgICAgICAgICAgICByLCBnLCBiLCBhbHBoYSk7XG5cbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgcHggPSAoYjEqYzIgLSBiMipjMSkvZGVub207XG4gICAgICAgIHB5ID0gKGEyKmMxIC0gYTEqYzIpL2Rlbm9tO1xuXG5cbiAgICAgICAgcGRpc3QgPSAocHggLXAyeCkgKiAocHggLXAyeCkgKyAocHkgLXAyeSkgKiAocHkgLXAyeSk7XG5cblxuICAgICAgICBpZiAocGRpc3QgPiAxNDAgKiAxNDApXG4gICAgICAgIHtcbiAgICAgICAgICAgIHBlcnAzeCA9IHBlcnB4IC0gcGVycDJ4O1xuICAgICAgICAgICAgcGVycDN5ID0gcGVycHkgLSBwZXJwMnk7XG5cbiAgICAgICAgICAgIGRpc3QgPSBNYXRoLnNxcnQocGVycDN4KnBlcnAzeCArIHBlcnAzeSpwZXJwM3kpO1xuICAgICAgICAgICAgcGVycDN4IC89IGRpc3Q7XG4gICAgICAgICAgICBwZXJwM3kgLz0gZGlzdDtcbiAgICAgICAgICAgIHBlcnAzeCAqPSB3aWR0aDtcbiAgICAgICAgICAgIHBlcnAzeSAqPSB3aWR0aDtcblxuICAgICAgICAgICAgdmVydHMucHVzaChwMnggLSBwZXJwM3gsIHAyeSAtcGVycDN5KTtcbiAgICAgICAgICAgIHZlcnRzLnB1c2gociwgZywgYiwgYWxwaGEpO1xuXG4gICAgICAgICAgICB2ZXJ0cy5wdXNoKHAyeCArIHBlcnAzeCwgcDJ5ICtwZXJwM3kpO1xuICAgICAgICAgICAgdmVydHMucHVzaChyLCBnLCBiLCBhbHBoYSk7XG5cbiAgICAgICAgICAgIHZlcnRzLnB1c2gocDJ4IC0gcGVycDN4LCBwMnkgLXBlcnAzeSk7XG4gICAgICAgICAgICB2ZXJ0cy5wdXNoKHIsIGcsIGIsIGFscGhhKTtcblxuICAgICAgICAgICAgaW5kZXhDb3VudCsrO1xuICAgICAgICB9XG4gICAgICAgIGVsc2VcbiAgICAgICAge1xuXG4gICAgICAgICAgICB2ZXJ0cy5wdXNoKHB4ICwgcHkpO1xuICAgICAgICAgICAgdmVydHMucHVzaChyLCBnLCBiLCBhbHBoYSk7XG5cbiAgICAgICAgICAgIHZlcnRzLnB1c2gocDJ4IC0gKHB4LXAyeCksIHAyeSAtIChweSAtIHAyeSkpO1xuICAgICAgICAgICAgdmVydHMucHVzaChyLCBnLCBiLCBhbHBoYSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwMXggPSBwb2ludHNbKGxlbmd0aC0yKSoyXTtcbiAgICBwMXkgPSBwb2ludHNbKGxlbmd0aC0yKSoyICsgMV07XG5cbiAgICBwMnggPSBwb2ludHNbKGxlbmd0aC0xKSoyXTtcbiAgICBwMnkgPSBwb2ludHNbKGxlbmd0aC0xKSoyICsgMV07XG5cbiAgICBwZXJweCA9IC0ocDF5IC0gcDJ5KTtcbiAgICBwZXJweSA9IHAxeCAtIHAyeDtcblxuICAgIGRpc3QgPSBNYXRoLnNxcnQocGVycHgqcGVycHggKyBwZXJweSpwZXJweSk7XG4gICAgcGVycHggLz0gZGlzdDtcbiAgICBwZXJweSAvPSBkaXN0O1xuICAgIHBlcnB4ICo9IHdpZHRoO1xuICAgIHBlcnB5ICo9IHdpZHRoO1xuXG4gICAgdmVydHMucHVzaChwMnggLSBwZXJweCAsIHAyeSAtIHBlcnB5KTtcbiAgICB2ZXJ0cy5wdXNoKHIsIGcsIGIsIGFscGhhKTtcblxuICAgIHZlcnRzLnB1c2gocDJ4ICsgcGVycHggLCBwMnkgKyBwZXJweSk7XG4gICAgdmVydHMucHVzaChyLCBnLCBiLCBhbHBoYSk7XG5cbiAgICBpbmRpY2VzLnB1c2goaW5kZXhTdGFydCk7XG5cbiAgICBmb3IgKGkgPSAwOyBpIDwgaW5kZXhDb3VudDsgaSsrKVxuICAgIHtcbiAgICAgICAgaW5kaWNlcy5wdXNoKGluZGV4U3RhcnQrKyk7XG4gICAgfVxuXG4gICAgaW5kaWNlcy5wdXNoKGluZGV4U3RhcnQtMSk7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGJ1aWxkTGluZTsiLCJ2YXIgdXRpbHMgPSByZXF1aXJlKCcuLi8uLi8uLi91dGlscycpO1xuXG4vKipcbiAqIEJ1aWxkcyBhIHBvbHlnb24gdG8gZHJhd1xuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0gZ3JhcGhpY3NEYXRhIHtQSVhJLldlYkdMR3JhcGhpY3NEYXRhfSBUaGUgZ3JhcGhpY3Mgb2JqZWN0IGNvbnRhaW5pbmcgYWxsIHRoZSBuZWNlc3NhcnkgcHJvcGVydGllc1xuICogQHBhcmFtIHdlYkdMRGF0YSB7b2JqZWN0fSBhbiBvYmplY3QgY29udGFpbmluZyBhbGwgdGhlIHdlYkdMLXNwZWNpZmljIGluZm9ybWF0aW9uIHRvIGNyZWF0ZSB0aGlzIHNoYXBlXG4gKi9cbnZhciBidWlsZFBvbHkgPSBmdW5jdGlvbiAoZ3JhcGhpY3NEYXRhLCB3ZWJHTERhdGEpXG57XG4gICAgdmFyIHBvaW50cyA9IGdyYXBoaWNzRGF0YS5wb2ludHM7XG5cbiAgICBpZiAocG9pbnRzLmxlbmd0aCA8IDYpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gZ2V0IGZpcnN0IGFuZCBsYXN0IHBvaW50Li4gZmlndXJlIG91dCB0aGUgbWlkZGxlIVxuICAgIHZhciB2ZXJ0cyA9IHdlYkdMRGF0YS5wb2ludHM7XG4gICAgdmFyIGluZGljZXMgPSB3ZWJHTERhdGEuaW5kaWNlcztcblxuICAgIHZhciBsZW5ndGggPSBwb2ludHMubGVuZ3RoIC8gMjtcblxuICAgIC8vIHNvcnQgY29sb3JcbiAgICB2YXIgY29sb3IgPSB1dGlscy5oZXgycmdiKGdyYXBoaWNzRGF0YS5maWxsQ29sb3IpO1xuICAgIHZhciBhbHBoYSA9IGdyYXBoaWNzRGF0YS5maWxsQWxwaGE7XG4gICAgdmFyIHIgPSBjb2xvclswXSAqIGFscGhhO1xuICAgIHZhciBnID0gY29sb3JbMV0gKiBhbHBoYTtcbiAgICB2YXIgYiA9IGNvbG9yWzJdICogYWxwaGE7XG5cbiAgICB2YXIgdHJpYW5nbGVzID0gZWFyY3V0KHBvaW50cywgbnVsbCwgMik7XG5cbiAgICBpZiAoIXRyaWFuZ2xlcykge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgdmFyIHZlcnRQb3MgPSB2ZXJ0cy5sZW5ndGggLyA2O1xuXG4gICAgdmFyIGkgPSAwO1xuXG4gICAgZm9yIChpID0gMDsgaSA8IHRyaWFuZ2xlcy5sZW5ndGg7IGkrPTMpXG4gICAge1xuICAgICAgICBpbmRpY2VzLnB1c2godHJpYW5nbGVzW2ldICsgdmVydFBvcyk7XG4gICAgICAgIGluZGljZXMucHVzaCh0cmlhbmdsZXNbaV0gKyB2ZXJ0UG9zKTtcbiAgICAgICAgaW5kaWNlcy5wdXNoKHRyaWFuZ2xlc1tpKzFdICsgdmVydFBvcyk7XG4gICAgICAgIGluZGljZXMucHVzaCh0cmlhbmdsZXNbaSsyXSArdmVydFBvcyk7XG4gICAgICAgIGluZGljZXMucHVzaCh0cmlhbmdsZXNbaSsyXSArIHZlcnRQb3MpO1xuICAgIH1cblxuICAgIGZvciAoaSA9IDA7IGkgPCBsZW5ndGg7IGkrKylcbiAgICB7XG4gICAgICAgIHZlcnRzLnB1c2gocG9pbnRzW2kgKiAyXSwgcG9pbnRzW2kgKiAyICsgMV0sXG4gICAgICAgICAgICAgICAgICAgciwgZywgYiwgYWxwaGEpO1xuICAgIH1cblxuICAgIHJldHVybiB0cnVlO1xufTtcblxuXG5tb2R1bGUuZXhwb3J0cyA9IGJ1aWxkUG9seTtcbiIsInZhciBidWlsZExpbmUgPSByZXF1aXJlKCcuL2J1aWxkTGluZScpLFxuICAgIHV0aWxzID0gcmVxdWlyZSgnLi4vLi4vLi4vdXRpbHMnKTtcblxuLyoqXG4gKiBCdWlsZHMgYSByZWN0YW5nbGUgdG8gZHJhd1xuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0gZ3JhcGhpY3NEYXRhIHtQSVhJLkdyYXBoaWNzfSBUaGUgZ3JhcGhpY3Mgb2JqZWN0IGNvbnRhaW5pbmcgYWxsIHRoZSBuZWNlc3NhcnkgcHJvcGVydGllc1xuICogQHBhcmFtIHdlYkdMRGF0YSB7b2JqZWN0fSBhbiBvYmplY3QgY29udGFpbmluZyBhbGwgdGhlIHdlYkdMLXNwZWNpZmljIGluZm9ybWF0aW9uIHRvIGNyZWF0ZSB0aGlzIHNoYXBlXG4gKi9cbnZhciBidWlsZFJlY3RhbmdsZSA9IGZ1bmN0aW9uIChncmFwaGljc0RhdGEsIHdlYkdMRGF0YSlcbntcbiAgICAvLyAtLS0gLy9cbiAgICAvLyBuZWVkIHRvIGNvbnZlcnQgcG9pbnRzIHRvIGEgbmljZSByZWd1bGFyIGRhdGFcbiAgICAvL1xuICAgIHZhciByZWN0RGF0YSA9IGdyYXBoaWNzRGF0YS5zaGFwZTtcbiAgICB2YXIgeCA9IHJlY3REYXRhLng7XG4gICAgdmFyIHkgPSByZWN0RGF0YS55O1xuICAgIHZhciB3aWR0aCA9IHJlY3REYXRhLndpZHRoO1xuICAgIHZhciBoZWlnaHQgPSByZWN0RGF0YS5oZWlnaHQ7XG5cbiAgICBpZiAoZ3JhcGhpY3NEYXRhLmZpbGwpXG4gICAge1xuICAgICAgICB2YXIgY29sb3IgPSB1dGlscy5oZXgycmdiKGdyYXBoaWNzRGF0YS5maWxsQ29sb3IpO1xuICAgICAgICB2YXIgYWxwaGEgPSBncmFwaGljc0RhdGEuZmlsbEFscGhhO1xuXG4gICAgICAgIHZhciByID0gY29sb3JbMF0gKiBhbHBoYTtcbiAgICAgICAgdmFyIGcgPSBjb2xvclsxXSAqIGFscGhhO1xuICAgICAgICB2YXIgYiA9IGNvbG9yWzJdICogYWxwaGE7XG5cbiAgICAgICAgdmFyIHZlcnRzID0gd2ViR0xEYXRhLnBvaW50cztcbiAgICAgICAgdmFyIGluZGljZXMgPSB3ZWJHTERhdGEuaW5kaWNlcztcblxuICAgICAgICB2YXIgdmVydFBvcyA9IHZlcnRzLmxlbmd0aC82O1xuXG4gICAgICAgIC8vIHN0YXJ0XG4gICAgICAgIHZlcnRzLnB1c2goeCwgeSk7XG4gICAgICAgIHZlcnRzLnB1c2gociwgZywgYiwgYWxwaGEpO1xuXG4gICAgICAgIHZlcnRzLnB1c2goeCArIHdpZHRoLCB5KTtcbiAgICAgICAgdmVydHMucHVzaChyLCBnLCBiLCBhbHBoYSk7XG5cbiAgICAgICAgdmVydHMucHVzaCh4ICwgeSArIGhlaWdodCk7XG4gICAgICAgIHZlcnRzLnB1c2gociwgZywgYiwgYWxwaGEpO1xuXG4gICAgICAgIHZlcnRzLnB1c2goeCArIHdpZHRoLCB5ICsgaGVpZ2h0KTtcbiAgICAgICAgdmVydHMucHVzaChyLCBnLCBiLCBhbHBoYSk7XG5cbiAgICAgICAgLy8gaW5zZXJ0IDIgZGVhZCB0cmlhbmdsZXMuLlxuICAgICAgICBpbmRpY2VzLnB1c2godmVydFBvcywgdmVydFBvcywgdmVydFBvcysxLCB2ZXJ0UG9zKzIsIHZlcnRQb3MrMywgdmVydFBvcyszKTtcbiAgICB9XG5cbiAgICBpZiAoZ3JhcGhpY3NEYXRhLmxpbmVXaWR0aClcbiAgICB7XG4gICAgICAgIHZhciB0ZW1wUG9pbnRzID0gZ3JhcGhpY3NEYXRhLnBvaW50cztcblxuICAgICAgICBncmFwaGljc0RhdGEucG9pbnRzID0gW3gsIHksXG4gICAgICAgICAgICAgICAgICB4ICsgd2lkdGgsIHksXG4gICAgICAgICAgICAgICAgICB4ICsgd2lkdGgsIHkgKyBoZWlnaHQsXG4gICAgICAgICAgICAgICAgICB4LCB5ICsgaGVpZ2h0LFxuICAgICAgICAgICAgICAgICAgeCwgeV07XG5cblxuICAgICAgICBidWlsZExpbmUoZ3JhcGhpY3NEYXRhLCB3ZWJHTERhdGEpO1xuXG4gICAgICAgIGdyYXBoaWNzRGF0YS5wb2ludHMgPSB0ZW1wUG9pbnRzO1xuICAgIH1cbn07XG5cbm1vZHVsZS5leHBvcnRzID0gYnVpbGRSZWN0YW5nbGU7IiwidmFyIGJ1aWxkTGluZSA9IHJlcXVpcmUoJy4vYnVpbGRMaW5lJyksXG4gICAgdXRpbHMgPSByZXF1aXJlKCcuLi8uLi8uLi91dGlscycpO1xuICAgIFxuLyoqXG4gKiBCdWlsZHMgYSByb3VuZGVkIHJlY3RhbmdsZSB0byBkcmF3XG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSBncmFwaGljc0RhdGEge1BJWEkuR3JhcGhpY3N9IFRoZSBncmFwaGljcyBvYmplY3QgY29udGFpbmluZyBhbGwgdGhlIG5lY2Vzc2FyeSBwcm9wZXJ0aWVzXG4gKiBAcGFyYW0gd2ViR0xEYXRhIHtvYmplY3R9IGFuIG9iamVjdCBjb250YWluaW5nIGFsbCB0aGUgd2ViR0wtc3BlY2lmaWMgaW5mb3JtYXRpb24gdG8gY3JlYXRlIHRoaXMgc2hhcGVcbiAqL1xuYnVpbGRSb3VuZGVkUmVjdGFuZ2xlID0gZnVuY3Rpb24gKGdyYXBoaWNzRGF0YSwgd2ViR0xEYXRhKVxue1xuICAgIHZhciBycmVjdERhdGEgPSBncmFwaGljc0RhdGEuc2hhcGU7XG4gICAgdmFyIHggPSBycmVjdERhdGEueDtcbiAgICB2YXIgeSA9IHJyZWN0RGF0YS55O1xuICAgIHZhciB3aWR0aCA9IHJyZWN0RGF0YS53aWR0aDtcbiAgICB2YXIgaGVpZ2h0ID0gcnJlY3REYXRhLmhlaWdodDtcblxuICAgIHZhciByYWRpdXMgPSBycmVjdERhdGEucmFkaXVzO1xuXG4gICAgdmFyIHJlY1BvaW50cyA9IFtdO1xuICAgIHJlY1BvaW50cy5wdXNoKHgsIHkgKyByYWRpdXMpO1xuICAgIHRoaXMucXVhZHJhdGljQmV6aWVyQ3VydmUoeCwgeSArIGhlaWdodCAtIHJhZGl1cywgeCwgeSArIGhlaWdodCwgeCArIHJhZGl1cywgeSArIGhlaWdodCwgcmVjUG9pbnRzKTtcbiAgICB0aGlzLnF1YWRyYXRpY0JlemllckN1cnZlKHggKyB3aWR0aCAtIHJhZGl1cywgeSArIGhlaWdodCwgeCArIHdpZHRoLCB5ICsgaGVpZ2h0LCB4ICsgd2lkdGgsIHkgKyBoZWlnaHQgLSByYWRpdXMsIHJlY1BvaW50cyk7XG4gICAgdGhpcy5xdWFkcmF0aWNCZXppZXJDdXJ2ZSh4ICsgd2lkdGgsIHkgKyByYWRpdXMsIHggKyB3aWR0aCwgeSwgeCArIHdpZHRoIC0gcmFkaXVzLCB5LCByZWNQb2ludHMpO1xuICAgIHRoaXMucXVhZHJhdGljQmV6aWVyQ3VydmUoeCArIHJhZGl1cywgeSwgeCwgeSwgeCwgeSArIHJhZGl1cyArIDAuMDAwMDAwMDAwMSwgcmVjUG9pbnRzKTtcblxuICAgIC8vIHRoaXMgdGlueSBudW1iZXIgZGVhbHMgd2l0aCB0aGUgaXNzdWUgdGhhdCBvY2N1cnMgd2hlbiBwb2ludHMgb3ZlcmxhcCBhbmQgZWFyY3V0IGZhaWxzIHRvIHRyaWFuZ3VsYXRlIHRoZSBpdGVtLlxuICAgIC8vIFRPRE8gLSBmaXggdGhpcyBwcm9wZXJseSwgdGhpcyBpcyBub3QgdmVyeSBlbGVnYW50Li4gYnV0IGl0IHdvcmtzIGZvciBub3cuXG5cbiAgICBpZiAoZ3JhcGhpY3NEYXRhLmZpbGwpXG4gICAge1xuICAgICAgICB2YXIgY29sb3IgPSB1dGlscy5oZXgycmdiKGdyYXBoaWNzRGF0YS5maWxsQ29sb3IpO1xuICAgICAgICB2YXIgYWxwaGEgPSBncmFwaGljc0RhdGEuZmlsbEFscGhhO1xuXG4gICAgICAgIHZhciByID0gY29sb3JbMF0gKiBhbHBoYTtcbiAgICAgICAgdmFyIGcgPSBjb2xvclsxXSAqIGFscGhhO1xuICAgICAgICB2YXIgYiA9IGNvbG9yWzJdICogYWxwaGE7XG5cbiAgICAgICAgdmFyIHZlcnRzID0gd2ViR0xEYXRhLnBvaW50cztcbiAgICAgICAgdmFyIGluZGljZXMgPSB3ZWJHTERhdGEuaW5kaWNlcztcblxuICAgICAgICB2YXIgdmVjUG9zID0gdmVydHMubGVuZ3RoLzY7XG5cbiAgICAgICAgdmFyIHRyaWFuZ2xlcyA9IGVhcmN1dChyZWNQb2ludHMsIG51bGwsIDIpO1xuXG4gICAgICAgIHZhciBpID0gMDtcbiAgICAgICAgZm9yIChpID0gMDsgaSA8IHRyaWFuZ2xlcy5sZW5ndGg7IGkrPTMpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGluZGljZXMucHVzaCh0cmlhbmdsZXNbaV0gKyB2ZWNQb3MpO1xuICAgICAgICAgICAgaW5kaWNlcy5wdXNoKHRyaWFuZ2xlc1tpXSArIHZlY1Bvcyk7XG4gICAgICAgICAgICBpbmRpY2VzLnB1c2godHJpYW5nbGVzW2krMV0gKyB2ZWNQb3MpO1xuICAgICAgICAgICAgaW5kaWNlcy5wdXNoKHRyaWFuZ2xlc1tpKzJdICsgdmVjUG9zKTtcbiAgICAgICAgICAgIGluZGljZXMucHVzaCh0cmlhbmdsZXNbaSsyXSArIHZlY1Bvcyk7XG4gICAgICAgIH1cblxuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgcmVjUG9pbnRzLmxlbmd0aDsgaSsrKVxuICAgICAgICB7XG4gICAgICAgICAgICB2ZXJ0cy5wdXNoKHJlY1BvaW50c1tpXSwgcmVjUG9pbnRzWysraV0sIHIsIGcsIGIsIGFscGhhKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGlmIChncmFwaGljc0RhdGEubGluZVdpZHRoKVxuICAgIHtcbiAgICAgICAgdmFyIHRlbXBQb2ludHMgPSBncmFwaGljc0RhdGEucG9pbnRzO1xuXG4gICAgICAgIGdyYXBoaWNzRGF0YS5wb2ludHMgPSByZWNQb2ludHM7XG5cbiAgICAgICAgdGhpcy5idWlsZExpbmUoZ3JhcGhpY3NEYXRhLCB3ZWJHTERhdGEpO1xuXG4gICAgICAgIGdyYXBoaWNzRGF0YS5wb2ludHMgPSB0ZW1wUG9pbnRzO1xuICAgIH1cbn07XG5cbi8qKlxuICogQ2FsY3VsYXRlIHRoZSBwb2ludHMgZm9yIGEgcXVhZHJhdGljIGJlemllciBjdXJ2ZS4gKGhlbHBlciBmdW5jdGlvbi4uKVxuICogQmFzZWQgb246IGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vcXVlc3Rpb25zLzc4NTA5Ny9ob3ctZG8taS1pbXBsZW1lbnQtYS1iZXppZXItY3VydmUtaW4tY1xuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0gZnJvbVgge251bWJlcn0gT3JpZ2luIHBvaW50IHhcbiAqIEBwYXJhbSBmcm9tWSB7bnVtYmVyfSBPcmlnaW4gcG9pbnQgeFxuICogQHBhcmFtIGNwWCB7bnVtYmVyfSBDb250cm9sIHBvaW50IHhcbiAqIEBwYXJhbSBjcFkge251bWJlcn0gQ29udHJvbCBwb2ludCB5XG4gKiBAcGFyYW0gdG9YIHtudW1iZXJ9IERlc3RpbmF0aW9uIHBvaW50IHhcbiAqIEBwYXJhbSB0b1kge251bWJlcn0gRGVzdGluYXRpb24gcG9pbnQgeVxuICogQHBhcmFtIFtvdXRdIHtudW1iZXJbXX0gVGhlIG91dHB1dCBhcnJheSB0byBhZGQgcG9pbnRzIGludG8uIElmIG5vdCBwYXNzZWQsIGEgbmV3IGFycmF5IGlzIGNyZWF0ZWQuXG4gKiBAcmV0dXJuIHtudW1iZXJbXX0gYW4gYXJyYXkgb2YgcG9pbnRzXG4gKi9cbnF1YWRyYXRpY0JlemllckN1cnZlID0gZnVuY3Rpb24gKGZyb21YLCBmcm9tWSwgY3BYLCBjcFksIHRvWCwgdG9ZLCBvdXQpXG57XG4gICAgdmFyIHhhLFxuICAgICAgICB5YSxcbiAgICAgICAgeGIsXG4gICAgICAgIHliLFxuICAgICAgICB4LFxuICAgICAgICB5LFxuICAgICAgICBuID0gMjAsXG4gICAgICAgIHBvaW50cyA9IG91dCB8fCBbXTtcblxuICAgIGZ1bmN0aW9uIGdldFB0KG4xICwgbjIsIHBlcmMpIHtcbiAgICAgICAgdmFyIGRpZmYgPSBuMiAtIG4xO1xuXG4gICAgICAgIHJldHVybiBuMSArICggZGlmZiAqIHBlcmMgKTtcbiAgICB9XG5cbiAgICB2YXIgaiA9IDA7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPD0gbjsgaSsrICkge1xuICAgICAgICBqID0gaSAvIG47XG5cbiAgICAgICAgLy8gVGhlIEdyZWVuIExpbmVcbiAgICAgICAgeGEgPSBnZXRQdCggZnJvbVggLCBjcFggLCBqICk7XG4gICAgICAgIHlhID0gZ2V0UHQoIGZyb21ZICwgY3BZICwgaiApO1xuICAgICAgICB4YiA9IGdldFB0KCBjcFggLCB0b1ggLCBqICk7XG4gICAgICAgIHliID0gZ2V0UHQoIGNwWSAsIHRvWSAsIGogKTtcblxuICAgICAgICAvLyBUaGUgQmxhY2sgRG90XG4gICAgICAgIHggPSBnZXRQdCggeGEgLCB4YiAsIGogKTtcbiAgICAgICAgeSA9IGdldFB0KCB5YSAsIHliICwgaiApO1xuXG4gICAgICAgIHBvaW50cy5wdXNoKHgsIHkpO1xuICAgIH1cblxuICAgIHJldHVybiBwb2ludHM7XG59O1xuXG5cbm1vZHVsZS5leHBvcnRzID0gYnVpbGRSb3VuZGVkUmVjdGFuZ2xlOyIsIi8qKlxuICogQGZpbGUgICAgICAgIE1haW4gZXhwb3J0IG9mIHRoZSBQSVhJIGNvcmUgbGlicmFyeVxuICogQGF1dGhvciAgICAgIE1hdCBHcm92ZXMgPG1hdEBnb29kYm95ZGlnaXRhbC5jb20+XG4gKiBAY29weXJpZ2h0ICAgMjAxMy0yMDE1IEdvb2RCb3lEaWdpdGFsXG4gKiBAbGljZW5zZSAgICAge0BsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9waXhpanMvcGl4aS5qcy9ibG9iL21hc3Rlci9MSUNFTlNFfE1JVCBMaWNlbnNlfVxuICovXG5cbi8qKlxuICogQG5hbWVzcGFjZSBQSVhJXG4gKi9cbi8vIGV4cG9ydCBjb3JlIGFuZCBjb25zdC4gV2UgYXNzaWduIGNvcmUgdG8gY29uc3Qgc28gdGhhdCB0aGUgbm9uLXJlZmVyZW5jZSB0eXBlcyBpbiBjb25zdCByZW1haW4gaW4tdGFjdFxudmFyIGNvcmUgPSBtb2R1bGUuZXhwb3J0cyA9IE9iamVjdC5hc3NpZ24ocmVxdWlyZSgnLi9jb25zdCcpLCByZXF1aXJlKCcuL21hdGgnKSwge1xuICAgIC8vIHV0aWxzXG4gICAgdXRpbHM6IHJlcXVpcmUoJy4vdXRpbHMnKSxcbiAgICB0aWNrZXI6IHJlcXVpcmUoJy4vdGlja2VyJyksXG5cbiAgICAvLyBkaXNwbGF5XG4gICAgRGlzcGxheU9iamVjdDogICAgICAgICAgcmVxdWlyZSgnLi9kaXNwbGF5L0Rpc3BsYXlPYmplY3QnKSxcbiAgICBDb250YWluZXI6ICAgICAgICAgICAgICByZXF1aXJlKCcuL2Rpc3BsYXkvQ29udGFpbmVyJyksXG5cbiAgICAvLyBzcHJpdGVzXG4gICAgU3ByaXRlOiAgICAgICAgICAgICAgICAgcmVxdWlyZSgnLi9zcHJpdGVzL1Nwcml0ZScpLFxuICAgIFBhcnRpY2xlQ29udGFpbmVyOiAgICAgIHJlcXVpcmUoJy4vcGFydGljbGVzL1BhcnRpY2xlQ29udGFpbmVyJyksXG4gICAgU3ByaXRlUmVuZGVyZXI6ICAgICAgICAgcmVxdWlyZSgnLi9zcHJpdGVzL3dlYmdsL1Nwcml0ZVJlbmRlcmVyJyksXG4gICAgUGFydGljbGVSZW5kZXJlcjogICAgICAgcmVxdWlyZSgnLi9wYXJ0aWNsZXMvd2ViZ2wvUGFydGljbGVSZW5kZXJlcicpLFxuXG4gICAgLy8gdGV4dFxuICAgIFRleHQ6ICAgICAgICAgICAgICAgICAgIHJlcXVpcmUoJy4vdGV4dC9UZXh0JyksXG5cbiAgICAvLyBwcmltaXRpdmVzXG4gICAgR3JhcGhpY3M6ICAgICAgICAgICAgICAgcmVxdWlyZSgnLi9ncmFwaGljcy9HcmFwaGljcycpLFxuICAgIEdyYXBoaWNzRGF0YTogICAgICAgICAgIHJlcXVpcmUoJy4vZ3JhcGhpY3MvR3JhcGhpY3NEYXRhJyksXG4gICAgR3JhcGhpY3NSZW5kZXJlcjogICAgICAgcmVxdWlyZSgnLi9ncmFwaGljcy93ZWJnbC9HcmFwaGljc1JlbmRlcmVyJyksXG5cbiAgICAvLyB0ZXh0dXJlc1xuICAgIFRleHR1cmU6ICAgICAgICAgICAgICAgIHJlcXVpcmUoJy4vdGV4dHVyZXMvVGV4dHVyZScpLFxuICAgIEJhc2VUZXh0dXJlOiAgICAgICAgICAgIHJlcXVpcmUoJy4vdGV4dHVyZXMvQmFzZVRleHR1cmUnKSxcbiAgICBSZW5kZXJUZXh0dXJlOiAgICAgICAgICByZXF1aXJlKCcuL3RleHR1cmVzL1JlbmRlclRleHR1cmUnKSxcbiAgICBWaWRlb0Jhc2VUZXh0dXJlOiAgICAgICByZXF1aXJlKCcuL3RleHR1cmVzL1ZpZGVvQmFzZVRleHR1cmUnKSxcbiAgICBUZXh0dXJlVXZzOiAgICAgICAgICAgICByZXF1aXJlKCcuL3RleHR1cmVzL1RleHR1cmVVdnMnKSxcblxuICAgIC8vIHJlbmRlcmVycyAtIGNhbnZhc1xuICAgIENhbnZhc1JlbmRlcmVyOiAgICAgICAgIHJlcXVpcmUoJy4vcmVuZGVyZXJzL2NhbnZhcy9DYW52YXNSZW5kZXJlcicpLFxuICAgIENhbnZhc0dyYXBoaWNzOiAgICAgICAgIHJlcXVpcmUoJy4vcmVuZGVyZXJzL2NhbnZhcy91dGlscy9DYW52YXNHcmFwaGljcycpLFxuICAgIENhbnZhc0J1ZmZlcjogICAgICAgICAgIHJlcXVpcmUoJy4vcmVuZGVyZXJzL2NhbnZhcy91dGlscy9DYW52YXNCdWZmZXInKSxcblxuICAgIC8vIHJlbmRlcmVycyAtIHdlYmdsXG4gICAgV2ViR0xSZW5kZXJlcjogICAgICAgICAgcmVxdWlyZSgnLi9yZW5kZXJlcnMvd2ViZ2wvV2ViR0xSZW5kZXJlcicpLFxuICAgIFdlYkdMTWFuYWdlcjogICAgICAgICAgcmVxdWlyZSgnLi9yZW5kZXJlcnMvd2ViZ2wvbWFuYWdlcnMvV2ViR0xNYW5hZ2VyJyksXG4gICAgU2hhZGVyTWFuYWdlcjogICAgICAgICAgcmVxdWlyZSgnLi9yZW5kZXJlcnMvd2ViZ2wvbWFuYWdlcnMvU2hhZGVyTWFuYWdlcicpLFxuICAgIFNoYWRlcjogICAgICAgICAgICAgICAgIHJlcXVpcmUoJy4vcmVuZGVyZXJzL3dlYmdsL3NoYWRlcnMvU2hhZGVyJyksXG4gICAgT2JqZWN0UmVuZGVyZXI6ICAgICAgICAgcmVxdWlyZSgnLi9yZW5kZXJlcnMvd2ViZ2wvdXRpbHMvT2JqZWN0UmVuZGVyZXInKSxcbiAgICBSZW5kZXJUYXJnZXQ6ICAgICAgICAgICByZXF1aXJlKCcuL3JlbmRlcmVycy93ZWJnbC91dGlscy9SZW5kZXJUYXJnZXQnKSxcblxuICAgIC8vIGZpbHRlcnMgLSB3ZWJnbFxuICAgIEFic3RyYWN0RmlsdGVyOiAgICAgICAgIHJlcXVpcmUoJy4vcmVuZGVyZXJzL3dlYmdsL2ZpbHRlcnMvQWJzdHJhY3RGaWx0ZXInKSxcbiAgICBGWEFBRmlsdGVyOiAgICAgICAgICAgICByZXF1aXJlKCcuL3JlbmRlcmVycy93ZWJnbC9maWx0ZXJzL0ZYQUFGaWx0ZXInKSxcbiAgICBTcHJpdGVNYXNrRmlsdGVyOiAgICAgICByZXF1aXJlKCcuL3JlbmRlcmVycy93ZWJnbC9maWx0ZXJzL1Nwcml0ZU1hc2tGaWx0ZXInKSxcblxuICAgIGdsQ29yZTogICAgICAgICAgICAgICAgICAgcmVxdWlyZSgncGl4aS1nbC1jb3JlJyksXG5cbiAgICAvKipcbiAgICAgKiBUaGlzIGhlbHBlciBmdW5jdGlvbiB3aWxsIGF1dG9tYXRpY2FsbHkgZGV0ZWN0IHdoaWNoIHJlbmRlcmVyIHlvdSBzaG91bGQgYmUgdXNpbmcuXG4gICAgICogV2ViR0wgaXMgdGhlIHByZWZlcnJlZCByZW5kZXJlciBhcyBpdCBpcyBhIGxvdCBmYXN0ZXIuIElmIHdlYkdMIGlzIG5vdCBzdXBwb3J0ZWQgYnlcbiAgICAgKiB0aGUgYnJvd3NlciB0aGVuIHRoaXMgZnVuY3Rpb24gd2lsbCByZXR1cm4gYSBjYW52YXMgcmVuZGVyZXJcbiAgICAgKlxuICAgICAqIEBtZW1iZXJvZiBQSVhJXG4gICAgICogQHBhcmFtIHdpZHRoPTgwMCB7bnVtYmVyfSB0aGUgd2lkdGggb2YgdGhlIHJlbmRlcmVycyB2aWV3XG4gICAgICogQHBhcmFtIGhlaWdodD02MDAge251bWJlcn0gdGhlIGhlaWdodCBvZiB0aGUgcmVuZGVyZXJzIHZpZXdcbiAgICAgKiBAcGFyYW0gW29wdGlvbnNdIHtvYmplY3R9IFRoZSBvcHRpb25hbCByZW5kZXJlciBwYXJhbWV0ZXJzXG4gICAgICogQHBhcmFtIFtvcHRpb25zLnZpZXddIHtIVE1MQ2FudmFzRWxlbWVudH0gdGhlIGNhbnZhcyB0byB1c2UgYXMgYSB2aWV3LCBvcHRpb25hbFxuICAgICAqIEBwYXJhbSBbb3B0aW9ucy50cmFuc3BhcmVudD1mYWxzZV0ge2Jvb2xlYW59IElmIHRoZSByZW5kZXIgdmlldyBpcyB0cmFuc3BhcmVudCwgZGVmYXVsdCBmYWxzZVxuICAgICAqIEBwYXJhbSBbb3B0aW9ucy5hbnRpYWxpYXM9ZmFsc2VdIHtib29sZWFufSBzZXRzIGFudGlhbGlhcyAob25seSBhcHBsaWNhYmxlIGluIGNocm9tZSBhdCB0aGUgbW9tZW50KVxuICAgICAqIEBwYXJhbSBbb3B0aW9ucy5wcmVzZXJ2ZURyYXdpbmdCdWZmZXI9ZmFsc2VdIHtib29sZWFufSBlbmFibGVzIGRyYXdpbmcgYnVmZmVyIHByZXNlcnZhdGlvbiwgZW5hYmxlIHRoaXMgaWYgeW91XG4gICAgICogICAgICBuZWVkIHRvIGNhbGwgdG9EYXRhVXJsIG9uIHRoZSB3ZWJnbCBjb250ZXh0XG4gICAgICogQHBhcmFtIFtvcHRpb25zLnJlc29sdXRpb249MV0ge251bWJlcn0gdGhlIHJlc29sdXRpb24gb2YgdGhlIHJlbmRlcmVyLCByZXRpbmEgd291bGQgYmUgMlxuICAgICAqIEBwYXJhbSBbbm9XZWJHTD1mYWxzZV0ge2Jvb2xlYW59IHByZXZlbnRzIHNlbGVjdGlvbiBvZiBXZWJHTCByZW5kZXJlciwgZXZlbiBpZiBzdWNoIGlzIHByZXNlbnRcbiAgICAgKlxuICAgICAqIEByZXR1cm4ge1dlYkdMUmVuZGVyZXJ8Q2FudmFzUmVuZGVyZXJ9IFJldHVybnMgV2ViR0wgcmVuZGVyZXIgaWYgYXZhaWxhYmxlLCBvdGhlcndpc2UgQ2FudmFzUmVuZGVyZXJcbiAgICAgKi9cbiAgICBhdXRvRGV0ZWN0UmVuZGVyZXI6IGZ1bmN0aW9uICh3aWR0aCwgaGVpZ2h0LCBvcHRpb25zLCBub1dlYkdMKVxuICAgIHtcbiAgICAgICAgd2lkdGggPSB3aWR0aCB8fCA4MDA7XG4gICAgICAgIGhlaWdodCA9IGhlaWdodCB8fCA2MDA7XG5cbiAgICAgICAgaWYgKCFub1dlYkdMICYmIGNvcmUudXRpbHMuaXNXZWJHTFN1cHBvcnRlZCgpKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IGNvcmUuV2ViR0xSZW5kZXJlcih3aWR0aCwgaGVpZ2h0LCBvcHRpb25zKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBuZXcgY29yZS5DYW52YXNSZW5kZXJlcih3aWR0aCwgaGVpZ2h0LCBvcHRpb25zKTtcbiAgICB9XG59KTtcbiIsIi8vIEB0b2RvIC0gaWdub3JlIHRoZSB0b28gbWFueSBwYXJhbWV0ZXJzIHdhcm5pbmcgZm9yIG5vd1xuLy8gc2hvdWxkIGVpdGhlciBmaXggaXQgb3IgY2hhbmdlIHRoZSBqc2hpbnQgY29uZmlnXG4vLyBqc2hpbnQgLVcwNzJcblxudmFyIFBvaW50ID0gcmVxdWlyZSgnLi9Qb2ludCcpO1xuXG4vKipcbiAqIFRoZSBwaXhpIE1hdHJpeCBjbGFzcyBhcyBhbiBvYmplY3QsIHdoaWNoIG1ha2VzIGl0IGEgbG90IGZhc3RlcixcbiAqIGhlcmUgaXMgYSByZXByZXNlbnRhdGlvbiBvZiBpdCA6XG4gKiB8IGEgfCBiIHwgdHh8XG4gKiB8IGMgfCBkIHwgdHl8XG4gKiB8IDAgfCAwIHwgMSB8XG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICovXG5mdW5jdGlvbiBNYXRyaXgoKVxue1xuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAxXG4gICAgICovXG4gICAgdGhpcy5hID0gMTtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAwXG4gICAgICovXG4gICAgdGhpcy5iID0gMDtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAwXG4gICAgICovXG4gICAgdGhpcy5jID0gMDtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAxXG4gICAgICovXG4gICAgdGhpcy5kID0gMTtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAwXG4gICAgICovXG4gICAgdGhpcy50eCA9IDA7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMFxuICAgICAqL1xuICAgIHRoaXMudHkgPSAwO1xufVxuXG5NYXRyaXgucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gTWF0cml4O1xubW9kdWxlLmV4cG9ydHMgPSBNYXRyaXg7XG5cbi8qKlxuICogQ3JlYXRlcyBhIE1hdHJpeCBvYmplY3QgYmFzZWQgb24gdGhlIGdpdmVuIGFycmF5LiBUaGUgRWxlbWVudCB0byBNYXRyaXggbWFwcGluZyBvcmRlciBpcyBhcyBmb2xsb3dzOlxuICpcbiAqIGEgPSBhcnJheVswXVxuICogYiA9IGFycmF5WzFdXG4gKiBjID0gYXJyYXlbM11cbiAqIGQgPSBhcnJheVs0XVxuICogdHggPSBhcnJheVsyXVxuICogdHkgPSBhcnJheVs1XVxuICpcbiAqIEBwYXJhbSBhcnJheSB7bnVtYmVyW119IFRoZSBhcnJheSB0aGF0IHRoZSBtYXRyaXggd2lsbCBiZSBwb3B1bGF0ZWQgZnJvbS5cbiAqL1xuTWF0cml4LnByb3RvdHlwZS5mcm9tQXJyYXkgPSBmdW5jdGlvbiAoYXJyYXkpXG57XG4gICAgdGhpcy5hID0gYXJyYXlbMF07XG4gICAgdGhpcy5iID0gYXJyYXlbMV07XG4gICAgdGhpcy5jID0gYXJyYXlbM107XG4gICAgdGhpcy5kID0gYXJyYXlbNF07XG4gICAgdGhpcy50eCA9IGFycmF5WzJdO1xuICAgIHRoaXMudHkgPSBhcnJheVs1XTtcbn07XG5cblxuLyoqXG4gKiBzZXRzIHRoZSBtYXRyaXggcHJvcGVydGllc1xuICpcbiAqIEBwYXJhbSB7bnVtYmVyfSBhXG4gKiBAcGFyYW0ge251bWJlcn0gYlxuICogQHBhcmFtIHtudW1iZXJ9IGNcbiAqIEBwYXJhbSB7bnVtYmVyfSBkXG4gKiBAcGFyYW0ge251bWJlcn0gdHhcbiAqIEBwYXJhbSB7bnVtYmVyfSB0eVxuICpcbiAqIEByZXR1cm4ge1BJWEkuTWF0cml4fSBUaGlzIG1hdHJpeC4gR29vZCBmb3IgY2hhaW5pbmcgbWV0aG9kIGNhbGxzLlxuICovXG5NYXRyaXgucHJvdG90eXBlLnNldCA9IGZ1bmN0aW9uIChhLCBiLCBjLCBkLCB0eCwgdHkpXG57XG4gICAgdGhpcy5hID0gYTtcbiAgICB0aGlzLmIgPSBiO1xuICAgIHRoaXMuYyA9IGM7XG4gICAgdGhpcy5kID0gZDtcbiAgICB0aGlzLnR4ID0gdHg7XG4gICAgdGhpcy50eSA9IHR5O1xuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG5cbi8qKlxuICogQ3JlYXRlcyBhbiBhcnJheSBmcm9tIHRoZSBjdXJyZW50IE1hdHJpeCBvYmplY3QuXG4gKlxuICogQHBhcmFtIHRyYW5zcG9zZSB7Ym9vbGVhbn0gV2hldGhlciB3ZSBuZWVkIHRvIHRyYW5zcG9zZSB0aGUgbWF0cml4IG9yIG5vdFxuICogQHBhcmFtIFtvdXRdIHtBcnJheX0gSWYgcHJvdmlkZWQgdGhlIGFycmF5IHdpbGwgYmUgYXNzaWduZWQgdG8gb3V0XG4gKiBAcmV0dXJuIHtudW1iZXJbXX0gdGhlIG5ld2x5IGNyZWF0ZWQgYXJyYXkgd2hpY2ggY29udGFpbnMgdGhlIG1hdHJpeFxuICovXG5NYXRyaXgucHJvdG90eXBlLnRvQXJyYXkgPSBmdW5jdGlvbiAodHJhbnNwb3NlLCBvdXQpXG57XG4gICAgaWYgKCF0aGlzLmFycmF5KVxuICAgIHtcbiAgICAgICAgdGhpcy5hcnJheSA9IG5ldyBGbG9hdDMyQXJyYXkoOSk7XG4gICAgfVxuXG4gICAgdmFyIGFycmF5ID0gb3V0IHx8IHRoaXMuYXJyYXk7XG5cbiAgICBpZiAodHJhbnNwb3NlKVxuICAgIHtcbiAgICAgICAgYXJyYXlbMF0gPSB0aGlzLmE7XG4gICAgICAgIGFycmF5WzFdID0gdGhpcy5iO1xuICAgICAgICBhcnJheVsyXSA9IDA7XG4gICAgICAgIGFycmF5WzNdID0gdGhpcy5jO1xuICAgICAgICBhcnJheVs0XSA9IHRoaXMuZDtcbiAgICAgICAgYXJyYXlbNV0gPSAwO1xuICAgICAgICBhcnJheVs2XSA9IHRoaXMudHg7XG4gICAgICAgIGFycmF5WzddID0gdGhpcy50eTtcbiAgICAgICAgYXJyYXlbOF0gPSAxO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICBhcnJheVswXSA9IHRoaXMuYTtcbiAgICAgICAgYXJyYXlbMV0gPSB0aGlzLmM7XG4gICAgICAgIGFycmF5WzJdID0gdGhpcy50eDtcbiAgICAgICAgYXJyYXlbM10gPSB0aGlzLmI7XG4gICAgICAgIGFycmF5WzRdID0gdGhpcy5kO1xuICAgICAgICBhcnJheVs1XSA9IHRoaXMudHk7XG4gICAgICAgIGFycmF5WzZdID0gMDtcbiAgICAgICAgYXJyYXlbN10gPSAwO1xuICAgICAgICBhcnJheVs4XSA9IDE7XG4gICAgfVxuXG4gICAgcmV0dXJuIGFycmF5O1xufTtcblxuLyoqXG4gKiBHZXQgYSBuZXcgcG9zaXRpb24gd2l0aCB0aGUgY3VycmVudCB0cmFuc2Zvcm1hdGlvbiBhcHBsaWVkLlxuICogQ2FuIGJlIHVzZWQgdG8gZ28gZnJvbSBhIGNoaWxkJ3MgY29vcmRpbmF0ZSBzcGFjZSB0byB0aGUgd29ybGQgY29vcmRpbmF0ZSBzcGFjZS4gKGUuZy4gcmVuZGVyaW5nKVxuICpcbiAqIEBwYXJhbSBwb3Mge1BJWEkuUG9pbnR9IFRoZSBvcmlnaW5cbiAqIEBwYXJhbSBbbmV3UG9zXSB7UElYSS5Qb2ludH0gVGhlIHBvaW50IHRoYXQgdGhlIG5ldyBwb3NpdGlvbiBpcyBhc3NpZ25lZCB0byAoYWxsb3dlZCB0byBiZSBzYW1lIGFzIGlucHV0KVxuICogQHJldHVybiB7UElYSS5Qb2ludH0gVGhlIG5ldyBwb2ludCwgdHJhbnNmb3JtZWQgdGhyb3VnaCB0aGlzIG1hdHJpeFxuICovXG5NYXRyaXgucHJvdG90eXBlLmFwcGx5ID0gZnVuY3Rpb24gKHBvcywgbmV3UG9zKVxue1xuICAgIG5ld1BvcyA9IG5ld1BvcyB8fCBuZXcgUG9pbnQoKTtcblxuICAgIHZhciB4ID0gcG9zLng7XG4gICAgdmFyIHkgPSBwb3MueTtcblxuICAgIG5ld1Bvcy54ID0gdGhpcy5hICogeCArIHRoaXMuYyAqIHkgKyB0aGlzLnR4O1xuICAgIG5ld1Bvcy55ID0gdGhpcy5iICogeCArIHRoaXMuZCAqIHkgKyB0aGlzLnR5O1xuXG4gICAgcmV0dXJuIG5ld1Bvcztcbn07XG5cbi8qKlxuICogR2V0IGEgbmV3IHBvc2l0aW9uIHdpdGggdGhlIGludmVyc2Ugb2YgdGhlIGN1cnJlbnQgdHJhbnNmb3JtYXRpb24gYXBwbGllZC5cbiAqIENhbiBiZSB1c2VkIHRvIGdvIGZyb20gdGhlIHdvcmxkIGNvb3JkaW5hdGUgc3BhY2UgdG8gYSBjaGlsZCdzIGNvb3JkaW5hdGUgc3BhY2UuIChlLmcuIGlucHV0KVxuICpcbiAqIEBwYXJhbSBwb3Mge1BJWEkuUG9pbnR9IFRoZSBvcmlnaW5cbiAqIEBwYXJhbSBbbmV3UG9zXSB7UElYSS5Qb2ludH0gVGhlIHBvaW50IHRoYXQgdGhlIG5ldyBwb3NpdGlvbiBpcyBhc3NpZ25lZCB0byAoYWxsb3dlZCB0byBiZSBzYW1lIGFzIGlucHV0KVxuICogQHJldHVybiB7UElYSS5Qb2ludH0gVGhlIG5ldyBwb2ludCwgaW52ZXJzZS10cmFuc2Zvcm1lZCB0aHJvdWdoIHRoaXMgbWF0cml4XG4gKi9cbk1hdHJpeC5wcm90b3R5cGUuYXBwbHlJbnZlcnNlID0gZnVuY3Rpb24gKHBvcywgbmV3UG9zKVxue1xuICAgIG5ld1BvcyA9IG5ld1BvcyB8fCBuZXcgUG9pbnQoKTtcblxuICAgIHZhciBpZCA9IDEgLyAodGhpcy5hICogdGhpcy5kICsgdGhpcy5jICogLXRoaXMuYik7XG5cbiAgICB2YXIgeCA9IHBvcy54O1xuICAgIHZhciB5ID0gcG9zLnk7XG5cbiAgICBuZXdQb3MueCA9IHRoaXMuZCAqIGlkICogeCArIC10aGlzLmMgKiBpZCAqIHkgKyAodGhpcy50eSAqIHRoaXMuYyAtIHRoaXMudHggKiB0aGlzLmQpICogaWQ7XG4gICAgbmV3UG9zLnkgPSB0aGlzLmEgKiBpZCAqIHkgKyAtdGhpcy5iICogaWQgKiB4ICsgKC10aGlzLnR5ICogdGhpcy5hICsgdGhpcy50eCAqIHRoaXMuYikgKiBpZDtcblxuICAgIHJldHVybiBuZXdQb3M7XG59O1xuXG4vKipcbiAqIFRyYW5zbGF0ZXMgdGhlIG1hdHJpeCBvbiB0aGUgeCBhbmQgeS5cbiAqXG4gKiBAcGFyYW0ge251bWJlcn0geFxuICogQHBhcmFtIHtudW1iZXJ9IHlcbiAqIEByZXR1cm4ge1BJWEkuTWF0cml4fSBUaGlzIG1hdHJpeC4gR29vZCBmb3IgY2hhaW5pbmcgbWV0aG9kIGNhbGxzLlxuICovXG5NYXRyaXgucHJvdG90eXBlLnRyYW5zbGF0ZSA9IGZ1bmN0aW9uICh4LCB5KVxue1xuICAgIHRoaXMudHggKz0geDtcbiAgICB0aGlzLnR5ICs9IHk7XG5cbiAgICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogQXBwbGllcyBhIHNjYWxlIHRyYW5zZm9ybWF0aW9uIHRvIHRoZSBtYXRyaXguXG4gKlxuICogQHBhcmFtIHtudW1iZXJ9IHggVGhlIGFtb3VudCB0byBzY2FsZSBob3Jpem9udGFsbHlcbiAqIEBwYXJhbSB7bnVtYmVyfSB5IFRoZSBhbW91bnQgdG8gc2NhbGUgdmVydGljYWxseVxuICogQHJldHVybiB7UElYSS5NYXRyaXh9IFRoaXMgbWF0cml4LiBHb29kIGZvciBjaGFpbmluZyBtZXRob2QgY2FsbHMuXG4gKi9cbk1hdHJpeC5wcm90b3R5cGUuc2NhbGUgPSBmdW5jdGlvbiAoeCwgeSlcbntcbiAgICB0aGlzLmEgKj0geDtcbiAgICB0aGlzLmQgKj0geTtcbiAgICB0aGlzLmMgKj0geDtcbiAgICB0aGlzLmIgKj0geTtcbiAgICB0aGlzLnR4ICo9IHg7XG4gICAgdGhpcy50eSAqPSB5O1xuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG5cbi8qKlxuICogQXBwbGllcyBhIHJvdGF0aW9uIHRyYW5zZm9ybWF0aW9uIHRvIHRoZSBtYXRyaXguXG4gKlxuICogQHBhcmFtIHtudW1iZXJ9IGFuZ2xlIC0gVGhlIGFuZ2xlIGluIHJhZGlhbnMuXG4gKiBAcmV0dXJuIHtQSVhJLk1hdHJpeH0gVGhpcyBtYXRyaXguIEdvb2QgZm9yIGNoYWluaW5nIG1ldGhvZCBjYWxscy5cbiAqL1xuTWF0cml4LnByb3RvdHlwZS5yb3RhdGUgPSBmdW5jdGlvbiAoYW5nbGUpXG57XG4gICAgdmFyIGNvcyA9IE1hdGguY29zKCBhbmdsZSApO1xuICAgIHZhciBzaW4gPSBNYXRoLnNpbiggYW5nbGUgKTtcblxuICAgIHZhciBhMSA9IHRoaXMuYTtcbiAgICB2YXIgYzEgPSB0aGlzLmM7XG4gICAgdmFyIHR4MSA9IHRoaXMudHg7XG5cbiAgICB0aGlzLmEgPSBhMSAqIGNvcy10aGlzLmIgKiBzaW47XG4gICAgdGhpcy5iID0gYTEgKiBzaW4rdGhpcy5iICogY29zO1xuICAgIHRoaXMuYyA9IGMxICogY29zLXRoaXMuZCAqIHNpbjtcbiAgICB0aGlzLmQgPSBjMSAqIHNpbit0aGlzLmQgKiBjb3M7XG4gICAgdGhpcy50eCA9IHR4MSAqIGNvcyAtIHRoaXMudHkgKiBzaW47XG4gICAgdGhpcy50eSA9IHR4MSAqIHNpbiArIHRoaXMudHkgKiBjb3M7XG5cbiAgICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogQXBwZW5kcyB0aGUgZ2l2ZW4gTWF0cml4IHRvIHRoaXMgTWF0cml4LlxuICpcbiAqIEBwYXJhbSB7UElYSS5NYXRyaXh9IG1hdHJpeFxuICogQHJldHVybiB7UElYSS5NYXRyaXh9IFRoaXMgbWF0cml4LiBHb29kIGZvciBjaGFpbmluZyBtZXRob2QgY2FsbHMuXG4gKi9cbk1hdHJpeC5wcm90b3R5cGUuYXBwZW5kID0gZnVuY3Rpb24gKG1hdHJpeClcbntcbiAgICB2YXIgYTEgPSB0aGlzLmE7XG4gICAgdmFyIGIxID0gdGhpcy5iO1xuICAgIHZhciBjMSA9IHRoaXMuYztcbiAgICB2YXIgZDEgPSB0aGlzLmQ7XG5cbiAgICB0aGlzLmEgID0gbWF0cml4LmEgKiBhMSArIG1hdHJpeC5iICogYzE7XG4gICAgdGhpcy5iICA9IG1hdHJpeC5hICogYjEgKyBtYXRyaXguYiAqIGQxO1xuICAgIHRoaXMuYyAgPSBtYXRyaXguYyAqIGExICsgbWF0cml4LmQgKiBjMTtcbiAgICB0aGlzLmQgID0gbWF0cml4LmMgKiBiMSArIG1hdHJpeC5kICogZDE7XG5cbiAgICB0aGlzLnR4ID0gbWF0cml4LnR4ICogYTEgKyBtYXRyaXgudHkgKiBjMSArIHRoaXMudHg7XG4gICAgdGhpcy50eSA9IG1hdHJpeC50eCAqIGIxICsgbWF0cml4LnR5ICogZDEgKyB0aGlzLnR5O1xuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIFNldHMgdGhlIG1hdHJpeCBiYXNlZCBvbiBhbGwgdGhlIGF2YWlsYWJsZSBwcm9wZXJ0aWVzXG4gKlxuICogQHBhcmFtIHtudW1iZXJ9IHhcbiAqIEBwYXJhbSB7bnVtYmVyfSB5XG4gKiBAcGFyYW0ge251bWJlcn0gcGl2b3RYXG4gKiBAcGFyYW0ge251bWJlcn0gcGl2b3RZXG4gKiBAcGFyYW0ge251bWJlcn0gc2NhbGVYXG4gKiBAcGFyYW0ge251bWJlcn0gc2NhbGVZXG4gKiBAcGFyYW0ge251bWJlcn0gcm90YXRpb25cbiAqIEBwYXJhbSB7bnVtYmVyfSBza2V3WFxuICogQHBhcmFtIHtudW1iZXJ9IHNrZXdZXG4gKlxuICogQHJldHVybiB7UElYSS5NYXRyaXh9IFRoaXMgbWF0cml4LiBHb29kIGZvciBjaGFpbmluZyBtZXRob2QgY2FsbHMuXG4gKi9cbk1hdHJpeC5wcm90b3R5cGUuc2V0VHJhbnNmb3JtID0gZnVuY3Rpb24gKHgsIHksIHBpdm90WCwgcGl2b3RZLCBzY2FsZVgsIHNjYWxlWSwgcm90YXRpb24sIHNrZXdYLCBza2V3WSlcbntcbiAgICB2YXIgYSwgYiwgYywgZCwgc3IsIGNyLCBjeSwgc3ksIG5zeCwgY3g7XG5cbiAgICBzciAgPSBNYXRoLnNpbihyb3RhdGlvbik7XG4gICAgY3IgID0gTWF0aC5jb3Mocm90YXRpb24pO1xuICAgIGN5ICA9IE1hdGguY29zKHNrZXdZKTtcbiAgICBzeSAgPSBNYXRoLnNpbihza2V3WSk7XG4gICAgbnN4ID0gLU1hdGguc2luKHNrZXdYKTtcbiAgICBjeCAgPSAgTWF0aC5jb3Moc2tld1gpO1xuXG4gICAgYSAgPSAgY3IgKiBzY2FsZVg7XG4gICAgYiAgPSAgc3IgKiBzY2FsZVg7XG4gICAgYyAgPSAtc3IgKiBzY2FsZVk7XG4gICAgZCAgPSAgY3IgKiBzY2FsZVk7XG5cbiAgICB0aGlzLmEgID0gY3kgKiBhICsgc3kgKiBjO1xuICAgIHRoaXMuYiAgPSBjeSAqIGIgKyBzeSAqIGQ7XG4gICAgdGhpcy5jICA9IG5zeCAqIGEgKyBjeCAqIGM7XG4gICAgdGhpcy5kICA9IG5zeCAqIGIgKyBjeCAqIGQ7XG5cbiAgICB0aGlzLnR4ID0geCArICggcGl2b3RYICogYSArIHBpdm90WSAqIGMgKTtcbiAgICB0aGlzLnR5ID0geSArICggcGl2b3RYICogYiArIHBpdm90WSAqIGQgKTtcblxuICAgIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBQcmVwZW5kcyB0aGUgZ2l2ZW4gTWF0cml4IHRvIHRoaXMgTWF0cml4LlxuICpcbiAqIEBwYXJhbSB7UElYSS5NYXRyaXh9IG1hdHJpeFxuICogQHJldHVybiB7UElYSS5NYXRyaXh9IFRoaXMgbWF0cml4LiBHb29kIGZvciBjaGFpbmluZyBtZXRob2QgY2FsbHMuXG4gKi9cbk1hdHJpeC5wcm90b3R5cGUucHJlcGVuZCA9IGZ1bmN0aW9uKG1hdHJpeClcbntcbiAgICB2YXIgdHgxID0gdGhpcy50eDtcblxuICAgIGlmIChtYXRyaXguYSAhPT0gMSB8fCBtYXRyaXguYiAhPT0gMCB8fCBtYXRyaXguYyAhPT0gMCB8fCBtYXRyaXguZCAhPT0gMSlcbiAgICB7XG4gICAgICAgIHZhciBhMSA9IHRoaXMuYTtcbiAgICAgICAgdmFyIGMxID0gdGhpcy5jO1xuICAgICAgICB0aGlzLmEgID0gYTEqbWF0cml4LmErdGhpcy5iKm1hdHJpeC5jO1xuICAgICAgICB0aGlzLmIgID0gYTEqbWF0cml4LmIrdGhpcy5iKm1hdHJpeC5kO1xuICAgICAgICB0aGlzLmMgID0gYzEqbWF0cml4LmErdGhpcy5kKm1hdHJpeC5jO1xuICAgICAgICB0aGlzLmQgID0gYzEqbWF0cml4LmIrdGhpcy5kKm1hdHJpeC5kO1xuICAgIH1cblxuICAgIHRoaXMudHggPSB0eDEqbWF0cml4LmErdGhpcy50eSptYXRyaXguYyttYXRyaXgudHg7XG4gICAgdGhpcy50eSA9IHR4MSptYXRyaXguYit0aGlzLnR5Km1hdHJpeC5kK21hdHJpeC50eTtcblxuICAgIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBJbnZlcnRzIHRoaXMgbWF0cml4XG4gKlxuICogQHJldHVybiB7UElYSS5NYXRyaXh9IFRoaXMgbWF0cml4LiBHb29kIGZvciBjaGFpbmluZyBtZXRob2QgY2FsbHMuXG4gKi9cbk1hdHJpeC5wcm90b3R5cGUuaW52ZXJ0ID0gZnVuY3Rpb24oKVxue1xuICAgIHZhciBhMSA9IHRoaXMuYTtcbiAgICB2YXIgYjEgPSB0aGlzLmI7XG4gICAgdmFyIGMxID0gdGhpcy5jO1xuICAgIHZhciBkMSA9IHRoaXMuZDtcbiAgICB2YXIgdHgxID0gdGhpcy50eDtcbiAgICB2YXIgbiA9IGExKmQxLWIxKmMxO1xuXG4gICAgdGhpcy5hID0gZDEvbjtcbiAgICB0aGlzLmIgPSAtYjEvbjtcbiAgICB0aGlzLmMgPSAtYzEvbjtcbiAgICB0aGlzLmQgPSBhMS9uO1xuICAgIHRoaXMudHggPSAoYzEqdGhpcy50eS1kMSp0eDEpL247XG4gICAgdGhpcy50eSA9IC0oYTEqdGhpcy50eS1iMSp0eDEpL247XG5cbiAgICByZXR1cm4gdGhpcztcbn07XG5cblxuLyoqXG4gKiBSZXNldHMgdGhpcyBNYXRpeCB0byBhbiBpZGVudGl0eSAoZGVmYXVsdCkgbWF0cml4LlxuICpcbiAqIEByZXR1cm4ge1BJWEkuTWF0cml4fSBUaGlzIG1hdHJpeC4gR29vZCBmb3IgY2hhaW5pbmcgbWV0aG9kIGNhbGxzLlxuICovXG5NYXRyaXgucHJvdG90eXBlLmlkZW50aXR5ID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLmEgPSAxO1xuICAgIHRoaXMuYiA9IDA7XG4gICAgdGhpcy5jID0gMDtcbiAgICB0aGlzLmQgPSAxO1xuICAgIHRoaXMudHggPSAwO1xuICAgIHRoaXMudHkgPSAwO1xuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIENyZWF0ZXMgYSBuZXcgTWF0cml4IG9iamVjdCB3aXRoIHRoZSBzYW1lIHZhbHVlcyBhcyB0aGlzIG9uZS5cbiAqXG4gKiBAcmV0dXJuIHtQSVhJLk1hdHJpeH0gQSBjb3B5IG9mIHRoaXMgbWF0cml4LiBHb29kIGZvciBjaGFpbmluZyBtZXRob2QgY2FsbHMuXG4gKi9cbk1hdHJpeC5wcm90b3R5cGUuY2xvbmUgPSBmdW5jdGlvbiAoKVxue1xuICAgIHZhciBtYXRyaXggPSBuZXcgTWF0cml4KCk7XG4gICAgbWF0cml4LmEgPSB0aGlzLmE7XG4gICAgbWF0cml4LmIgPSB0aGlzLmI7XG4gICAgbWF0cml4LmMgPSB0aGlzLmM7XG4gICAgbWF0cml4LmQgPSB0aGlzLmQ7XG4gICAgbWF0cml4LnR4ID0gdGhpcy50eDtcbiAgICBtYXRyaXgudHkgPSB0aGlzLnR5O1xuXG4gICAgcmV0dXJuIG1hdHJpeDtcbn07XG5cbi8qKlxuICogQ2hhbmdlcyB0aGUgdmFsdWVzIG9mIHRoZSBnaXZlbiBtYXRyaXggdG8gYmUgdGhlIHNhbWUgYXMgdGhlIG9uZXMgaW4gdGhpcyBtYXRyaXhcbiAqXG4gKiBAcmV0dXJuIHtQSVhJLk1hdHJpeH0gVGhlIG1hdHJpeCBnaXZlbiBpbiBwYXJhbWV0ZXIgd2l0aCBpdHMgdmFsdWVzIHVwZGF0ZWQuXG4gKi9cbk1hdHJpeC5wcm90b3R5cGUuY29weSA9IGZ1bmN0aW9uIChtYXRyaXgpXG57XG4gICAgbWF0cml4LmEgPSB0aGlzLmE7XG4gICAgbWF0cml4LmIgPSB0aGlzLmI7XG4gICAgbWF0cml4LmMgPSB0aGlzLmM7XG4gICAgbWF0cml4LmQgPSB0aGlzLmQ7XG4gICAgbWF0cml4LnR4ID0gdGhpcy50eDtcbiAgICBtYXRyaXgudHkgPSB0aGlzLnR5O1xuXG4gICAgcmV0dXJuIG1hdHJpeDtcbn07XG5cbi8qKlxuICogQSBkZWZhdWx0IChpZGVudGl0eSkgbWF0cml4XG4gKlxuICogQHN0YXRpY1xuICogQGNvbnN0XG4gKi9cbk1hdHJpeC5JREVOVElUWSA9IG5ldyBNYXRyaXgoKTtcblxuLyoqXG4gKiBBIHRlbXAgbWF0cml4XG4gKlxuICogQHN0YXRpY1xuICogQGNvbnN0XG4gKi9cbk1hdHJpeC5URU1QX01BVFJJWCA9IG5ldyBNYXRyaXgoKTtcbiIsIi8qKlxuICogVGhlIFBvaW50IG9iamVjdCByZXByZXNlbnRzIGEgbG9jYXRpb24gaW4gYSB0d28tZGltZW5zaW9uYWwgY29vcmRpbmF0ZSBzeXN0ZW0sIHdoZXJlIHggcmVwcmVzZW50c1xuICogdGhlIGhvcml6b250YWwgYXhpcyBhbmQgeSByZXByZXNlbnRzIHRoZSB2ZXJ0aWNhbCBheGlzLlxuICpcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqIEBwYXJhbSBbeD0wXSB7bnVtYmVyfSBwb3NpdGlvbiBvZiB0aGUgcG9pbnQgb24gdGhlIHggYXhpc1xuICogQHBhcmFtIFt5PTBdIHtudW1iZXJ9IHBvc2l0aW9uIG9mIHRoZSBwb2ludCBvbiB0aGUgeSBheGlzXG4gKi9cbmZ1bmN0aW9uIFBvaW50KHgsIHkpXG57XG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDBcbiAgICAgKi9cbiAgICB0aGlzLnggPSB4IHx8IDA7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMFxuICAgICAqL1xuICAgIHRoaXMueSA9IHkgfHwgMDtcbn1cblxuUG9pbnQucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gUG9pbnQ7XG5tb2R1bGUuZXhwb3J0cyA9IFBvaW50O1xuXG4vKipcbiAqIENyZWF0ZXMgYSBjbG9uZSBvZiB0aGlzIHBvaW50XG4gKlxuICogQHJldHVybiB7UElYSS5Qb2ludH0gYSBjb3B5IG9mIHRoZSBwb2ludFxuICovXG5Qb2ludC5wcm90b3R5cGUuY2xvbmUgPSBmdW5jdGlvbiAoKVxue1xuICAgIHJldHVybiBuZXcgUG9pbnQodGhpcy54LCB0aGlzLnkpO1xufTtcblxuLyoqXG4gKiBDb3BpZXMgeCBhbmQgeSBmcm9tIHRoZSBnaXZlbiBwb2ludFxuICpcbiAqIEBwYXJhbSBwIHtQSVhJLlBvaW50fVxuICovXG5Qb2ludC5wcm90b3R5cGUuY29weSA9IGZ1bmN0aW9uIChwKSB7XG4gICAgdGhpcy5zZXQocC54LCBwLnkpO1xufTtcblxuLyoqXG4gKiBSZXR1cm5zIHRydWUgaWYgdGhlIGdpdmVuIHBvaW50IGlzIGVxdWFsIHRvIHRoaXMgcG9pbnRcbiAqXG4gKiBAcGFyYW0gcCB7UElYSS5Qb2ludH1cbiAqIEByZXR1cm5zIHtib29sZWFufVxuICovXG5Qb2ludC5wcm90b3R5cGUuZXF1YWxzID0gZnVuY3Rpb24gKHApIHtcbiAgICByZXR1cm4gKHAueCA9PT0gdGhpcy54KSAmJiAocC55ID09PSB0aGlzLnkpO1xufTtcblxuLyoqXG4gKiBTZXRzIHRoZSBwb2ludCB0byBhIG5ldyB4IGFuZCB5IHBvc2l0aW9uLlxuICogSWYgeSBpcyBvbWl0dGVkLCBib3RoIHggYW5kIHkgd2lsbCBiZSBzZXQgdG8geC5cbiAqXG4gKiBAcGFyYW0gW3g9MF0ge251bWJlcn0gcG9zaXRpb24gb2YgdGhlIHBvaW50IG9uIHRoZSB4IGF4aXNcbiAqIEBwYXJhbSBbeT0wXSB7bnVtYmVyfSBwb3NpdGlvbiBvZiB0aGUgcG9pbnQgb24gdGhlIHkgYXhpc1xuICovXG5Qb2ludC5wcm90b3R5cGUuc2V0ID0gZnVuY3Rpb24gKHgsIHkpXG57XG4gICAgdGhpcy54ID0geCB8fCAwO1xuICAgIHRoaXMueSA9IHkgfHwgKCAoeSAhPT0gMCkgPyB0aGlzLnggOiAwICkgO1xufTtcbiIsIi8qKlxuICogTWF0aCBjbGFzc2VzIGFuZCB1dGlsaXRpZXMgbWl4ZWQgaW50byBQSVhJIG5hbWVzcGFjZS5cbiAqXG4gKiBAbGVuZHMgUElYSVxuICovXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgICAvLyBUaGVzZSB3aWxsIGJlIG1peGVkIHRvIGJlIG1hZGUgcHVibGljbHkgYXZhaWxhYmxlLFxuICAgIC8vIHdoaWxlIHRoaXMgbW9kdWxlIGlzIHVzZWQgaW50ZXJuYWxseSBpbiBjb3JlXG4gICAgLy8gdG8gYXZvaWQgY2lyY3VsYXIgZGVwZW5kZW5jaWVzIGFuZCBjdXQgZG93biBvblxuICAgIC8vIGludGVybmFsIG1vZHVsZSByZXF1aXJlcy5cblxuICAgIFBvaW50OiAgICAgIHJlcXVpcmUoJy4vUG9pbnQnKSxcbiAgICBNYXRyaXg6ICAgICByZXF1aXJlKCcuL01hdHJpeCcpLFxuXG4gICAgQ2lyY2xlOiAgICAgcmVxdWlyZSgnLi9zaGFwZXMvQ2lyY2xlJyksXG4gICAgRWxsaXBzZTogICAgcmVxdWlyZSgnLi9zaGFwZXMvRWxsaXBzZScpLFxuICAgIFBvbHlnb246ICAgIHJlcXVpcmUoJy4vc2hhcGVzL1BvbHlnb24nKSxcbiAgICBSZWN0YW5nbGU6ICByZXF1aXJlKCcuL3NoYXBlcy9SZWN0YW5nbGUnKSxcbiAgICBSb3VuZGVkUmVjdGFuZ2xlOiByZXF1aXJlKCcuL3NoYXBlcy9Sb3VuZGVkUmVjdGFuZ2xlJylcbn07XG4iLCJ2YXIgUmVjdGFuZ2xlID0gcmVxdWlyZSgnLi9SZWN0YW5nbGUnKSxcbiAgICBDT05TVCA9IHJlcXVpcmUoJy4uLy4uL2NvbnN0Jyk7XG5cbi8qKlxuICogVGhlIENpcmNsZSBvYmplY3QgY2FuIGJlIHVzZWQgdG8gc3BlY2lmeSBhIGhpdCBhcmVhIGZvciBkaXNwbGF5T2JqZWN0c1xuICpcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqIEBwYXJhbSB4IHtudW1iZXJ9IFRoZSBYIGNvb3JkaW5hdGUgb2YgdGhlIGNlbnRlciBvZiB0aGlzIGNpcmNsZVxuICogQHBhcmFtIHkge251bWJlcn0gVGhlIFkgY29vcmRpbmF0ZSBvZiB0aGUgY2VudGVyIG9mIHRoaXMgY2lyY2xlXG4gKiBAcGFyYW0gcmFkaXVzIHtudW1iZXJ9IFRoZSByYWRpdXMgb2YgdGhlIGNpcmNsZVxuICovXG5mdW5jdGlvbiBDaXJjbGUoeCwgeSwgcmFkaXVzKVxue1xuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAwXG4gICAgICovXG4gICAgdGhpcy54ID0geCB8fCAwO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDBcbiAgICAgKi9cbiAgICB0aGlzLnkgPSB5IHx8IDA7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMFxuICAgICAqL1xuICAgIHRoaXMucmFkaXVzID0gcmFkaXVzIHx8IDA7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgdHlwZSBvZiB0aGUgb2JqZWN0LCBtYWlubHkgdXNlZCB0byBhdm9pZCBgaW5zdGFuY2VvZmAgY2hlY2tzXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy50eXBlID0gQ09OU1QuU0hBUEVTLkNJUkM7XG59XG5cbkNpcmNsZS5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBDaXJjbGU7XG5tb2R1bGUuZXhwb3J0cyA9IENpcmNsZTtcblxuLyoqXG4gKiBDcmVhdGVzIGEgY2xvbmUgb2YgdGhpcyBDaXJjbGUgaW5zdGFuY2VcbiAqXG4gKiBAcmV0dXJuIHtQSVhJLkNpcmNsZX0gYSBjb3B5IG9mIHRoZSBDaXJjbGVcbiAqL1xuQ2lyY2xlLnByb3RvdHlwZS5jbG9uZSA9IGZ1bmN0aW9uICgpXG57XG4gICAgcmV0dXJuIG5ldyBDaXJjbGUodGhpcy54LCB0aGlzLnksIHRoaXMucmFkaXVzKTtcbn07XG5cbi8qKlxuICogQ2hlY2tzIHdoZXRoZXIgdGhlIHggYW5kIHkgY29vcmRpbmF0ZXMgZ2l2ZW4gYXJlIGNvbnRhaW5lZCB3aXRoaW4gdGhpcyBjaXJjbGVcbiAqXG4gKiBAcGFyYW0geCB7bnVtYmVyfSBUaGUgWCBjb29yZGluYXRlIG9mIHRoZSBwb2ludCB0byB0ZXN0XG4gKiBAcGFyYW0geSB7bnVtYmVyfSBUaGUgWSBjb29yZGluYXRlIG9mIHRoZSBwb2ludCB0byB0ZXN0XG4gKiBAcmV0dXJuIHtib29sZWFufSBXaGV0aGVyIHRoZSB4L3kgY29vcmRpbmF0ZXMgYXJlIHdpdGhpbiB0aGlzIENpcmNsZVxuICovXG5DaXJjbGUucHJvdG90eXBlLmNvbnRhaW5zID0gZnVuY3Rpb24gKHgsIHkpXG57XG4gICAgaWYgKHRoaXMucmFkaXVzIDw9IDApXG4gICAge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgdmFyIGR4ID0gKHRoaXMueCAtIHgpLFxuICAgICAgICBkeSA9ICh0aGlzLnkgLSB5KSxcbiAgICAgICAgcjIgPSB0aGlzLnJhZGl1cyAqIHRoaXMucmFkaXVzO1xuXG4gICAgZHggKj0gZHg7XG4gICAgZHkgKj0gZHk7XG5cbiAgICByZXR1cm4gKGR4ICsgZHkgPD0gcjIpO1xufTtcblxuLyoqXG4qIFJldHVybnMgdGhlIGZyYW1pbmcgcmVjdGFuZ2xlIG9mIHRoZSBjaXJjbGUgYXMgYSBSZWN0YW5nbGUgb2JqZWN0XG4qXG4qIEByZXR1cm4ge1BJWEkuUmVjdGFuZ2xlfSB0aGUgZnJhbWluZyByZWN0YW5nbGVcbiovXG5DaXJjbGUucHJvdG90eXBlLmdldEJvdW5kcyA9IGZ1bmN0aW9uICgpXG57XG4gICAgcmV0dXJuIG5ldyBSZWN0YW5nbGUodGhpcy54IC0gdGhpcy5yYWRpdXMsIHRoaXMueSAtIHRoaXMucmFkaXVzLCB0aGlzLnJhZGl1cyAqIDIsIHRoaXMucmFkaXVzICogMik7XG59O1xuIiwidmFyIFJlY3RhbmdsZSA9IHJlcXVpcmUoJy4vUmVjdGFuZ2xlJyksXG4gICAgQ09OU1QgPSByZXF1aXJlKCcuLi8uLi9jb25zdCcpO1xuXG4vKipcbiAqIFRoZSBFbGxpcHNlIG9iamVjdCBjYW4gYmUgdXNlZCB0byBzcGVjaWZ5IGEgaGl0IGFyZWEgZm9yIGRpc3BsYXlPYmplY3RzXG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIHgge251bWJlcn0gVGhlIFggY29vcmRpbmF0ZSBvZiB0aGUgY2VudGVyIG9mIHRoZSBlbGxpcHNlXG4gKiBAcGFyYW0geSB7bnVtYmVyfSBUaGUgWSBjb29yZGluYXRlIG9mIHRoZSBjZW50ZXIgb2YgdGhlIGVsbGlwc2VcbiAqIEBwYXJhbSB3aWR0aCB7bnVtYmVyfSBUaGUgaGFsZiB3aWR0aCBvZiB0aGlzIGVsbGlwc2VcbiAqIEBwYXJhbSBoZWlnaHQge251bWJlcn0gVGhlIGhhbGYgaGVpZ2h0IG9mIHRoaXMgZWxsaXBzZVxuICovXG5mdW5jdGlvbiBFbGxpcHNlKHgsIHksIHdpZHRoLCBoZWlnaHQpXG57XG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDBcbiAgICAgKi9cbiAgICB0aGlzLnggPSB4IHx8IDA7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMFxuICAgICAqL1xuICAgIHRoaXMueSA9IHkgfHwgMDtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAwXG4gICAgICovXG4gICAgdGhpcy53aWR0aCA9IHdpZHRoIHx8IDA7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMFxuICAgICAqL1xuICAgIHRoaXMuaGVpZ2h0ID0gaGVpZ2h0IHx8IDA7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgdHlwZSBvZiB0aGUgb2JqZWN0LCBtYWlubHkgdXNlZCB0byBhdm9pZCBgaW5zdGFuY2VvZmAgY2hlY2tzXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy50eXBlID0gQ09OU1QuU0hBUEVTLkVMSVA7XG59XG5cbkVsbGlwc2UucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gRWxsaXBzZTtcbm1vZHVsZS5leHBvcnRzID0gRWxsaXBzZTtcblxuLyoqXG4gKiBDcmVhdGVzIGEgY2xvbmUgb2YgdGhpcyBFbGxpcHNlIGluc3RhbmNlXG4gKlxuICogQHJldHVybiB7UElYSS5FbGxpcHNlfSBhIGNvcHkgb2YgdGhlIGVsbGlwc2VcbiAqL1xuRWxsaXBzZS5wcm90b3R5cGUuY2xvbmUgPSBmdW5jdGlvbiAoKVxue1xuICAgIHJldHVybiBuZXcgRWxsaXBzZSh0aGlzLngsIHRoaXMueSwgdGhpcy53aWR0aCwgdGhpcy5oZWlnaHQpO1xufTtcblxuLyoqXG4gKiBDaGVja3Mgd2hldGhlciB0aGUgeCBhbmQgeSBjb29yZGluYXRlcyBnaXZlbiBhcmUgY29udGFpbmVkIHdpdGhpbiB0aGlzIGVsbGlwc2VcbiAqXG4gKiBAcGFyYW0geCB7bnVtYmVyfSBUaGUgWCBjb29yZGluYXRlIG9mIHRoZSBwb2ludCB0byB0ZXN0XG4gKiBAcGFyYW0geSB7bnVtYmVyfSBUaGUgWSBjb29yZGluYXRlIG9mIHRoZSBwb2ludCB0byB0ZXN0XG4gKiBAcmV0dXJuIHtib29sZWFufSBXaGV0aGVyIHRoZSB4L3kgY29vcmRzIGFyZSB3aXRoaW4gdGhpcyBlbGxpcHNlXG4gKi9cbkVsbGlwc2UucHJvdG90eXBlLmNvbnRhaW5zID0gZnVuY3Rpb24gKHgsIHkpXG57XG4gICAgaWYgKHRoaXMud2lkdGggPD0gMCB8fCB0aGlzLmhlaWdodCA8PSAwKVxuICAgIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIC8vbm9ybWFsaXplIHRoZSBjb29yZHMgdG8gYW4gZWxsaXBzZSB3aXRoIGNlbnRlciAwLDBcbiAgICB2YXIgbm9ybXggPSAoKHggLSB0aGlzLngpIC8gdGhpcy53aWR0aCksXG4gICAgICAgIG5vcm15ID0gKCh5IC0gdGhpcy55KSAvIHRoaXMuaGVpZ2h0KTtcblxuICAgIG5vcm14ICo9IG5vcm14O1xuICAgIG5vcm15ICo9IG5vcm15O1xuXG4gICAgcmV0dXJuIChub3JteCArIG5vcm15IDw9IDEpO1xufTtcblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBmcmFtaW5nIHJlY3RhbmdsZSBvZiB0aGUgZWxsaXBzZSBhcyBhIFJlY3RhbmdsZSBvYmplY3RcbiAqXG4gKiBAcmV0dXJuIHtQSVhJLlJlY3RhbmdsZX0gdGhlIGZyYW1pbmcgcmVjdGFuZ2xlXG4gKi9cbkVsbGlwc2UucHJvdG90eXBlLmdldEJvdW5kcyA9IGZ1bmN0aW9uICgpXG57XG4gICAgcmV0dXJuIG5ldyBSZWN0YW5nbGUodGhpcy54IC0gdGhpcy53aWR0aCwgdGhpcy55IC0gdGhpcy5oZWlnaHQsIHRoaXMud2lkdGgsIHRoaXMuaGVpZ2h0KTtcbn07XG4iLCJ2YXIgUG9pbnQgPSByZXF1aXJlKCcuLi9Qb2ludCcpLFxuICAgIENPTlNUID0gcmVxdWlyZSgnLi4vLi4vY29uc3QnKTtcblxuLyoqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gcG9pbnRzIHtQSVhJLlBvaW50W118bnVtYmVyW118Li4uUElYSS5Qb2ludHwuLi5udW1iZXJ9IFRoaXMgY2FuIGJlIGFuIGFycmF5IG9mIFBvaW50cyB0aGF0IGZvcm0gdGhlIHBvbHlnb24sXG4gKiAgICAgIGEgZmxhdCBhcnJheSBvZiBudW1iZXJzIHRoYXQgd2lsbCBiZSBpbnRlcnByZXRlZCBhcyBbeCx5LCB4LHksIC4uLl0sIG9yIHRoZSBhcmd1bWVudHMgcGFzc2VkIGNhbiBiZVxuICogICAgICBhbGwgdGhlIHBvaW50cyBvZiB0aGUgcG9seWdvbiBlLmcuIGBuZXcgUElYSS5Qb2x5Z29uKG5ldyBQSVhJLlBvaW50KCksIG5ldyBQSVhJLlBvaW50KCksIC4uLilgLCBvciB0aGVcbiAqICAgICAgYXJndW1lbnRzIHBhc3NlZCBjYW4gYmUgZmxhdCB4LHkgdmFsdWVzIGUuZy4gYG5ldyBQb2x5Z29uKHgseSwgeCx5LCB4LHksIC4uLilgIHdoZXJlIGB4YCBhbmQgYHlgIGFyZVxuICogICAgICBOdW1iZXJzLlxuICovXG5mdW5jdGlvbiBQb2x5Z29uKHBvaW50c18pXG57XG4gICAgLy8gcHJldmVudHMgYW4gYXJndW1lbnQgYXNzaWdubWVudCBkZW9wdFxuICAgIC8vIHNlZSBzZWN0aW9uIDMuMTogaHR0cHM6Ly9naXRodWIuY29tL3BldGthYW50b25vdi9ibHVlYmlyZC93aWtpL09wdGltaXphdGlvbi1raWxsZXJzIzMtbWFuYWdpbmctYXJndW1lbnRzXG4gICAgdmFyIHBvaW50cyA9IHBvaW50c187XG5cbiAgICAvL2lmIHBvaW50cyBpc24ndCBhbiBhcnJheSwgdXNlIGFyZ3VtZW50cyBhcyB0aGUgYXJyYXlcbiAgICBpZiAoIUFycmF5LmlzQXJyYXkocG9pbnRzKSlcbiAgICB7XG4gICAgICAgIC8vIHByZXZlbnRzIGFuIGFyZ3VtZW50IGxlYWsgZGVvcHRcbiAgICAgICAgLy8gc2VlIHNlY3Rpb24gMy4yOiBodHRwczovL2dpdGh1Yi5jb20vcGV0a2FhbnRvbm92L2JsdWViaXJkL3dpa2kvT3B0aW1pemF0aW9uLWtpbGxlcnMjMy1tYW5hZ2luZy1hcmd1bWVudHNcbiAgICAgICAgcG9pbnRzID0gbmV3IEFycmF5KGFyZ3VtZW50cy5sZW5ndGgpO1xuXG4gICAgICAgIGZvciAodmFyIGEgPSAwOyBhIDwgcG9pbnRzLmxlbmd0aDsgKythKSB7XG4gICAgICAgICAgICBwb2ludHNbYV0gPSBhcmd1bWVudHNbYV07XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBpZiB0aGlzIGlzIGFuIGFycmF5IG9mIHBvaW50cywgY29udmVydCBpdCB0byBhIGZsYXQgYXJyYXkgb2YgbnVtYmVyc1xuICAgIGlmIChwb2ludHNbMF0gaW5zdGFuY2VvZiBQb2ludClcbiAgICB7XG4gICAgICAgIHZhciBwID0gW107XG4gICAgICAgIGZvciAodmFyIGkgPSAwLCBpbCA9IHBvaW50cy5sZW5ndGg7IGkgPCBpbDsgaSsrKVxuICAgICAgICB7XG4gICAgICAgICAgICBwLnB1c2gocG9pbnRzW2ldLngsIHBvaW50c1tpXS55KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHBvaW50cyA9IHA7XG4gICAgfVxuXG4gICAgdGhpcy5jbG9zZWQgPSB0cnVlO1xuXG4gICAgLyoqXG4gICAgICogQW4gYXJyYXkgb2YgdGhlIHBvaW50cyBvZiB0aGlzIHBvbHlnb25cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcltdfVxuICAgICAqL1xuICAgIHRoaXMucG9pbnRzID0gcG9pbnRzO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHR5cGUgb2YgdGhlIG9iamVjdCwgbWFpbmx5IHVzZWQgdG8gYXZvaWQgYGluc3RhbmNlb2ZgIGNoZWNrc1xuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMudHlwZSA9IENPTlNULlNIQVBFUy5QT0xZO1xufVxuXG5Qb2x5Z29uLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFBvbHlnb247XG5tb2R1bGUuZXhwb3J0cyA9IFBvbHlnb247XG5cbi8qKlxuICogQ3JlYXRlcyBhIGNsb25lIG9mIHRoaXMgcG9seWdvblxuICpcbiAqIEByZXR1cm4ge1BJWEkuUG9seWdvbn0gYSBjb3B5IG9mIHRoZSBwb2x5Z29uXG4gKi9cblBvbHlnb24ucHJvdG90eXBlLmNsb25lID0gZnVuY3Rpb24gKClcbntcbiAgICByZXR1cm4gbmV3IFBvbHlnb24odGhpcy5wb2ludHMuc2xpY2UoKSk7XG59O1xuXG4vKipcbiAqIENoZWNrcyB3aGV0aGVyIHRoZSB4IGFuZCB5IGNvb3JkaW5hdGVzIHBhc3NlZCB0byB0aGlzIGZ1bmN0aW9uIGFyZSBjb250YWluZWQgd2l0aGluIHRoaXMgcG9seWdvblxuICpcbiAqIEBwYXJhbSB4IHtudW1iZXJ9IFRoZSBYIGNvb3JkaW5hdGUgb2YgdGhlIHBvaW50IHRvIHRlc3RcbiAqIEBwYXJhbSB5IHtudW1iZXJ9IFRoZSBZIGNvb3JkaW5hdGUgb2YgdGhlIHBvaW50IHRvIHRlc3RcbiAqIEByZXR1cm4ge2Jvb2xlYW59IFdoZXRoZXIgdGhlIHgveSBjb29yZGluYXRlcyBhcmUgd2l0aGluIHRoaXMgcG9seWdvblxuICovXG5Qb2x5Z29uLnByb3RvdHlwZS5jb250YWlucyA9IGZ1bmN0aW9uICh4LCB5KVxue1xuICAgIHZhciBpbnNpZGUgPSBmYWxzZTtcblxuICAgIC8vIHVzZSBzb21lIHJheWNhc3RpbmcgdG8gdGVzdCBoaXRzXG4gICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL3N1YnN0YWNrL3BvaW50LWluLXBvbHlnb24vYmxvYi9tYXN0ZXIvaW5kZXguanNcbiAgICB2YXIgbGVuZ3RoID0gdGhpcy5wb2ludHMubGVuZ3RoIC8gMjtcblxuICAgIGZvciAodmFyIGkgPSAwLCBqID0gbGVuZ3RoIC0gMTsgaSA8IGxlbmd0aDsgaiA9IGkrKylcbiAgICB7XG4gICAgICAgIHZhciB4aSA9IHRoaXMucG9pbnRzW2kgKiAyXSwgeWkgPSB0aGlzLnBvaW50c1tpICogMiArIDFdLFxuICAgICAgICAgICAgeGogPSB0aGlzLnBvaW50c1tqICogMl0sIHlqID0gdGhpcy5wb2ludHNbaiAqIDIgKyAxXSxcbiAgICAgICAgICAgIGludGVyc2VjdCA9ICgoeWkgPiB5KSAhPT0gKHlqID4geSkpICYmICh4IDwgKHhqIC0geGkpICogKHkgLSB5aSkgLyAoeWogLSB5aSkgKyB4aSk7XG5cbiAgICAgICAgaWYgKGludGVyc2VjdClcbiAgICAgICAge1xuICAgICAgICAgICAgaW5zaWRlID0gIWluc2lkZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBpbnNpZGU7XG59O1xuIiwidmFyIENPTlNUID0gcmVxdWlyZSgnLi4vLi4vY29uc3QnKTtcblxuLyoqXG4gKiB0aGUgUmVjdGFuZ2xlIG9iamVjdCBpcyBhbiBhcmVhIGRlZmluZWQgYnkgaXRzIHBvc2l0aW9uLCBhcyBpbmRpY2F0ZWQgYnkgaXRzIHRvcC1sZWZ0IGNvcm5lciBwb2ludCAoeCwgeSkgYW5kIGJ5IGl0cyB3aWR0aCBhbmQgaXRzIGhlaWdodC5cbiAqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0geCB7bnVtYmVyfSBUaGUgWCBjb29yZGluYXRlIG9mIHRoZSB1cHBlci1sZWZ0IGNvcm5lciBvZiB0aGUgcmVjdGFuZ2xlXG4gKiBAcGFyYW0geSB7bnVtYmVyfSBUaGUgWSBjb29yZGluYXRlIG9mIHRoZSB1cHBlci1sZWZ0IGNvcm5lciBvZiB0aGUgcmVjdGFuZ2xlXG4gKiBAcGFyYW0gd2lkdGgge251bWJlcn0gVGhlIG92ZXJhbGwgd2lkdGggb2YgdGhpcyByZWN0YW5nbGVcbiAqIEBwYXJhbSBoZWlnaHQge251bWJlcn0gVGhlIG92ZXJhbGwgaGVpZ2h0IG9mIHRoaXMgcmVjdGFuZ2xlXG4gKi9cbmZ1bmN0aW9uIFJlY3RhbmdsZSh4LCB5LCB3aWR0aCwgaGVpZ2h0KVxue1xuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAwXG4gICAgICovXG4gICAgdGhpcy54ID0geCB8fCAwO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDBcbiAgICAgKi9cbiAgICB0aGlzLnkgPSB5IHx8IDA7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMFxuICAgICAqL1xuICAgIHRoaXMud2lkdGggPSB3aWR0aCB8fCAwO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDBcbiAgICAgKi9cbiAgICB0aGlzLmhlaWdodCA9IGhlaWdodCB8fCAwO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHR5cGUgb2YgdGhlIG9iamVjdCwgbWFpbmx5IHVzZWQgdG8gYXZvaWQgYGluc3RhbmNlb2ZgIGNoZWNrc1xuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMudHlwZSA9IENPTlNULlNIQVBFUy5SRUNUO1xufVxuXG5SZWN0YW5nbGUucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gUmVjdGFuZ2xlO1xubW9kdWxlLmV4cG9ydHMgPSBSZWN0YW5nbGU7XG5cbi8qKlxuICogQSBjb25zdGFudCBlbXB0eSByZWN0YW5nbGUuXG4gKlxuICogQHN0YXRpY1xuICogQGNvbnN0YW50XG4gKi9cblJlY3RhbmdsZS5FTVBUWSA9IG5ldyBSZWN0YW5nbGUoMCwgMCwgMCwgMCk7XG5cblxuLyoqXG4gKiBDcmVhdGVzIGEgY2xvbmUgb2YgdGhpcyBSZWN0YW5nbGVcbiAqXG4gKiBAcmV0dXJuIHtQSVhJLlJlY3RhbmdsZX0gYSBjb3B5IG9mIHRoZSByZWN0YW5nbGVcbiAqL1xuUmVjdGFuZ2xlLnByb3RvdHlwZS5jbG9uZSA9IGZ1bmN0aW9uICgpXG57XG4gICAgcmV0dXJuIG5ldyBSZWN0YW5nbGUodGhpcy54LCB0aGlzLnksIHRoaXMud2lkdGgsIHRoaXMuaGVpZ2h0KTtcbn07XG5cbi8qKlxuICogQ2hlY2tzIHdoZXRoZXIgdGhlIHggYW5kIHkgY29vcmRpbmF0ZXMgZ2l2ZW4gYXJlIGNvbnRhaW5lZCB3aXRoaW4gdGhpcyBSZWN0YW5nbGVcbiAqXG4gKiBAcGFyYW0geCB7bnVtYmVyfSBUaGUgWCBjb29yZGluYXRlIG9mIHRoZSBwb2ludCB0byB0ZXN0XG4gKiBAcGFyYW0geSB7bnVtYmVyfSBUaGUgWSBjb29yZGluYXRlIG9mIHRoZSBwb2ludCB0byB0ZXN0XG4gKiBAcmV0dXJuIHtib29sZWFufSBXaGV0aGVyIHRoZSB4L3kgY29vcmRpbmF0ZXMgYXJlIHdpdGhpbiB0aGlzIFJlY3RhbmdsZVxuICovXG5SZWN0YW5nbGUucHJvdG90eXBlLmNvbnRhaW5zID0gZnVuY3Rpb24gKHgsIHkpXG57XG4gICAgaWYgKHRoaXMud2lkdGggPD0gMCB8fCB0aGlzLmhlaWdodCA8PSAwKVxuICAgIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGlmICh4ID49IHRoaXMueCAmJiB4IDwgdGhpcy54ICsgdGhpcy53aWR0aClcbiAgICB7XG4gICAgICAgIGlmICh5ID49IHRoaXMueSAmJiB5IDwgdGhpcy55ICsgdGhpcy5oZWlnaHQpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xufTtcbiIsInZhciBDT05TVCA9IHJlcXVpcmUoJy4uLy4uL2NvbnN0Jyk7XG5cbi8qKlxuICogVGhlIFJvdW5kZWQgUmVjdGFuZ2xlIG9iamVjdCBpcyBhbiBhcmVhIHRoYXQgaGFzIG5pY2Ugcm91bmRlZCBjb3JuZXJzLCBhcyBpbmRpY2F0ZWQgYnkgaXRzIHRvcC1sZWZ0IGNvcm5lciBwb2ludCAoeCwgeSkgYW5kIGJ5IGl0cyB3aWR0aCBhbmQgaXRzIGhlaWdodCBhbmQgaXRzIHJhZGl1cy5cbiAqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0geCB7bnVtYmVyfSBUaGUgWCBjb29yZGluYXRlIG9mIHRoZSB1cHBlci1sZWZ0IGNvcm5lciBvZiB0aGUgcm91bmRlZCByZWN0YW5nbGVcbiAqIEBwYXJhbSB5IHtudW1iZXJ9IFRoZSBZIGNvb3JkaW5hdGUgb2YgdGhlIHVwcGVyLWxlZnQgY29ybmVyIG9mIHRoZSByb3VuZGVkIHJlY3RhbmdsZVxuICogQHBhcmFtIHdpZHRoIHtudW1iZXJ9IFRoZSBvdmVyYWxsIHdpZHRoIG9mIHRoaXMgcm91bmRlZCByZWN0YW5nbGVcbiAqIEBwYXJhbSBoZWlnaHQge251bWJlcn0gVGhlIG92ZXJhbGwgaGVpZ2h0IG9mIHRoaXMgcm91bmRlZCByZWN0YW5nbGVcbiAqIEBwYXJhbSByYWRpdXMge251bWJlcn0gQ29udHJvbHMgdGhlIHJhZGl1cyBvZiB0aGUgcm91bmRlZCBjb3JuZXJzXG4gKi9cbmZ1bmN0aW9uIFJvdW5kZWRSZWN0YW5nbGUoeCwgeSwgd2lkdGgsIGhlaWdodCwgcmFkaXVzKVxue1xuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAwXG4gICAgICovXG4gICAgdGhpcy54ID0geCB8fCAwO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDBcbiAgICAgKi9cbiAgICB0aGlzLnkgPSB5IHx8IDA7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMFxuICAgICAqL1xuICAgIHRoaXMud2lkdGggPSB3aWR0aCB8fCAwO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDBcbiAgICAgKi9cbiAgICB0aGlzLmhlaWdodCA9IGhlaWdodCB8fCAwO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDIwXG4gICAgICovXG4gICAgdGhpcy5yYWRpdXMgPSByYWRpdXMgfHwgMjA7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgdHlwZSBvZiB0aGUgb2JqZWN0LCBtYWlubHkgdXNlZCB0byBhdm9pZCBgaW5zdGFuY2VvZmAgY2hlY2tzXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy50eXBlID0gQ09OU1QuU0hBUEVTLlJSRUM7XG59XG5cblJvdW5kZWRSZWN0YW5nbGUucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gUm91bmRlZFJlY3RhbmdsZTtcbm1vZHVsZS5leHBvcnRzID0gUm91bmRlZFJlY3RhbmdsZTtcblxuLyoqXG4gKiBDcmVhdGVzIGEgY2xvbmUgb2YgdGhpcyBSb3VuZGVkIFJlY3RhbmdsZVxuICpcbiAqIEByZXR1cm4ge1BJWEkuUm91bmRlZFJlY3RhbmdsZX0gYSBjb3B5IG9mIHRoZSByb3VuZGVkIHJlY3RhbmdsZVxuICovXG5Sb3VuZGVkUmVjdGFuZ2xlLnByb3RvdHlwZS5jbG9uZSA9IGZ1bmN0aW9uICgpXG57XG4gICAgcmV0dXJuIG5ldyBSb3VuZGVkUmVjdGFuZ2xlKHRoaXMueCwgdGhpcy55LCB0aGlzLndpZHRoLCB0aGlzLmhlaWdodCwgdGhpcy5yYWRpdXMpO1xufTtcblxuLyoqXG4gKiBDaGVja3Mgd2hldGhlciB0aGUgeCBhbmQgeSBjb29yZGluYXRlcyBnaXZlbiBhcmUgY29udGFpbmVkIHdpdGhpbiB0aGlzIFJvdW5kZWQgUmVjdGFuZ2xlXG4gKlxuICogQHBhcmFtIHgge251bWJlcn0gVGhlIFggY29vcmRpbmF0ZSBvZiB0aGUgcG9pbnQgdG8gdGVzdFxuICogQHBhcmFtIHkge251bWJlcn0gVGhlIFkgY29vcmRpbmF0ZSBvZiB0aGUgcG9pbnQgdG8gdGVzdFxuICogQHJldHVybiB7Ym9vbGVhbn0gV2hldGhlciB0aGUgeC95IGNvb3JkaW5hdGVzIGFyZSB3aXRoaW4gdGhpcyBSb3VuZGVkIFJlY3RhbmdsZVxuICovXG5Sb3VuZGVkUmVjdGFuZ2xlLnByb3RvdHlwZS5jb250YWlucyA9IGZ1bmN0aW9uICh4LCB5KVxue1xuICAgIGlmICh0aGlzLndpZHRoIDw9IDAgfHwgdGhpcy5oZWlnaHQgPD0gMClcbiAgICB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBpZiAoeCA+PSB0aGlzLnggJiYgeCA8PSB0aGlzLnggKyB0aGlzLndpZHRoKVxuICAgIHtcbiAgICAgICAgaWYgKHkgPj0gdGhpcy55ICYmIHkgPD0gdGhpcy55ICsgdGhpcy5oZWlnaHQpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xufTtcbiIsInZhciBDb250YWluZXIgPSByZXF1aXJlKCcuLi9kaXNwbGF5L0NvbnRhaW5lcicpLFxuICAgIENPTlNUID0gcmVxdWlyZSgnLi4vY29uc3QnKTtcblxuLyoqXG4gKiBUaGUgUGFydGljbGVDb250YWluZXIgY2xhc3MgaXMgYSByZWFsbHkgZmFzdCB2ZXJzaW9uIG9mIHRoZSBDb250YWluZXIgYnVpbHQgc29sZWx5IGZvciBzcGVlZCxcbiAqIHNvIHVzZSB3aGVuIHlvdSBuZWVkIGEgbG90IG9mIHNwcml0ZXMgb3IgcGFydGljbGVzLiBUaGUgdHJhZGVvZmYgb2YgdGhlIFBhcnRpY2xlQ29udGFpbmVyIGlzIHRoYXQgYWR2YW5jZWRcbiAqIGZ1bmN0aW9uYWxpdHkgd2lsbCBub3Qgd29yay4gUGFydGljbGVDb250YWluZXIgaW1wbGVtZW50cyBvbmx5IHRoZSBiYXNpYyBvYmplY3QgdHJhbnNmb3JtIChwb3NpdGlvbiwgc2NhbGUsIHJvdGF0aW9uKS5cbiAqIEFueSBvdGhlciBmdW5jdGlvbmFsaXR5IGxpa2UgdGludGluZywgbWFza2luZywgZXRjIHdpbGwgbm90IHdvcmsgb24gc3ByaXRlcyBpbiB0aGlzIGJhdGNoLlxuICpcbiAqIEl0J3MgZXh0cmVtZWx5IGVhc3kgdG8gdXNlIDpcbiAqXG4gKiBgYGBqc1xuICogdmFyIGNvbnRhaW5lciA9IG5ldyBQYXJ0aWNsZUNvbnRhaW5lcigpO1xuICpcbiAqIGZvciAodmFyIGkgPSAwOyBpIDwgMTAwOyArK2kpXG4gKiB7XG4gKiAgICAgdmFyIHNwcml0ZSA9IG5ldyBQSVhJLlNwcml0ZS5mcm9tSW1hZ2UoXCJteUltYWdlLnBuZ1wiKTtcbiAqICAgICBjb250YWluZXIuYWRkQ2hpbGQoc3ByaXRlKTtcbiAqIH1cbiAqIGBgYFxuICpcbiAqIEFuZCBoZXJlIHlvdSBoYXZlIGEgaHVuZHJlZCBzcHJpdGVzIHRoYXQgd2lsbCBiZSByZW5kZXJlciBhdCB0aGUgc3BlZWQgb2YgbGlnaHQuXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLkNvbnRhaW5lclxuICogQG1lbWJlcm9mIFBJWElcbiAqIEBwYXJhbSBbbWF4U2l6ZT0xNTAwMF0ge251bWJlcn0gVGhlIG1heGltdW0gbnVtYmVyIG9mIHBhcnRpY2xlcyB0aGF0IGNhbiBiZSByZW5kZXJlciBieSB0aGUgY29udGFpbmVyLlxuICogQHBhcmFtIFtwcm9wZXJ0aWVzXSB7b2JqZWN0fSBUaGUgcHJvcGVydGllcyBvZiBjaGlsZHJlbiB0aGF0IHNob3VsZCBiZSB1cGxvYWRlZCB0byB0aGUgZ3B1IGFuZCBhcHBsaWVkLlxuICogQHBhcmFtIFtwcm9wZXJ0aWVzLnNjYWxlPWZhbHNlXSB7Ym9vbGVhbn0gV2hlbiB0cnVlLCBzY2FsZSBiZSB1cGxvYWRlZCBhbmQgYXBwbGllZC5cbiAqIEBwYXJhbSBbcHJvcGVydGllcy5wb3NpdGlvbj10cnVlXSB7Ym9vbGVhbn0gV2hlbiB0cnVlLCBwb3NpdGlvbiBiZSB1cGxvYWRlZCBhbmQgYXBwbGllZC5cbiAqIEBwYXJhbSBbcHJvcGVydGllcy5yb3RhdGlvbj1mYWxzZV0ge2Jvb2xlYW59IFdoZW4gdHJ1ZSwgcm90YXRpb24gYmUgdXBsb2FkZWQgYW5kIGFwcGxpZWQuXG4gKiBAcGFyYW0gW3Byb3BlcnRpZXMudXZzPWZhbHNlXSB7Ym9vbGVhbn0gV2hlbiB0cnVlLCB1dnMgYmUgdXBsb2FkZWQgYW5kIGFwcGxpZWQuXG4gKiBAcGFyYW0gW3Byb3BlcnRpZXMuYWxwaGE9ZmFsc2VdIHtib29sZWFufSBXaGVuIHRydWUsIGFscGhhIGJlIHVwbG9hZGVkIGFuZCBhcHBsaWVkLlxuICogQHBhcmFtIFtiYXRjaFNpemU9MTUwMDBdIHtudW1iZXJ9IE51bWJlciBvZiBwYXJ0aWNsZXMgcGVyIGJhdGNoLlxuICovXG5mdW5jdGlvbiBQYXJ0aWNsZUNvbnRhaW5lcihtYXhTaXplLCBwcm9wZXJ0aWVzLCBiYXRjaFNpemUpXG57XG4gICAgQ29udGFpbmVyLmNhbGwodGhpcyk7XG5cbiAgICBiYXRjaFNpemUgPSBiYXRjaFNpemUgfHwgMTUwMDA7IC8vQ09OU1QuU1BSSVRFX0JBVENIX1NJWkU7IC8vIDIwMDAgaXMgYSBuaWNlIGJhbGFuY2UgYmV0d2VlbiBtb2JpbGUgLyBkZXNrdG9wXG4gICAgbWF4U2l6ZSA9IG1heFNpemUgfHwgMTUwMDA7XG5cbiAgICAvLyBNYWtpbmcgc3VyZSB0aGUgYmF0Y2ggc2l6ZSBpcyB2YWxpZFxuICAgIC8vIDY1NTM1IGlzIG1heCB2ZXJ0ZXggaW5kZXggaW4gdGhlIGluZGV4IGJ1ZmZlciAoc2VlIFBhcnRpY2xlUmVuZGVyZXIpXG4gICAgLy8gc28gbWF4IG51bWJlciBvZiBwYXJ0aWNsZXMgaXMgNjU1MzYgLyA0ID0gMTYzODRcbiAgICB2YXIgbWF4QmF0Y2hTaXplID0gMTYzODQ7XG4gICAgaWYgKGJhdGNoU2l6ZSA+IG1heEJhdGNoU2l6ZSkge1xuICAgICAgICBiYXRjaFNpemUgPSBtYXhCYXRjaFNpemU7XG4gICAgfVxuXG4gICAgaWYgKGJhdGNoU2l6ZSA+IG1heFNpemUpIHtcbiAgICAgICAgYmF0Y2hTaXplID0gbWF4U2l6ZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTZXQgcHJvcGVydGllcyB0byBiZSBkeW5hbWljICh0cnVlKSAvIHN0YXRpYyAoZmFsc2UpXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFuW119XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9wcm9wZXJ0aWVzID0gW2ZhbHNlLCB0cnVlLCBmYWxzZSwgZmFsc2UsIGZhbHNlXTtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX21heFNpemUgPSBtYXhTaXplO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fYmF0Y2hTaXplID0gYmF0Y2hTaXplO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7V2ViR0xCdWZmZXJ9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9idWZmZXJzID0gbnVsbDtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX2J1ZmZlclRvVXBkYXRlID0gMDtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICpcbiAgICAgKi9cbiAgICB0aGlzLmludGVyYWN0aXZlQ2hpbGRyZW4gPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBibGVuZCBtb2RlIHRvIGJlIGFwcGxpZWQgdG8gdGhlIHNwcml0ZS4gQXBwbHkgYSB2YWx1ZSBvZiBgUElYSS5CTEVORF9NT0RFUy5OT1JNQUxgIHRvIHJlc2V0IHRoZSBibGVuZCBtb2RlLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IFBJWEkuQkxFTkRfTU9ERVMuTk9STUFMXG4gICAgICogQHNlZSBQSVhJLkJMRU5EX01PREVTXG4gICAgICovXG4gICAgdGhpcy5ibGVuZE1vZGUgPSBDT05TVC5CTEVORF9NT0RFUy5OT1JNQUw7XG5cbiAgICAvKipcbiAgICAgKiBVc2VkIGZvciBjYW52YXMgcmVuZGVyZXJpbmcuIElmIHRydWUgdGhlbiB0aGUgZWxlbWVudHMgd2lsbCBiZSBwb3NpdGlvbmVkIGF0IHRoZSBuZWFyZXN0IHBpeGVsLiBUaGlzIHByb3ZpZGVzIGEgbmljZSBzcGVlZCBib29zdC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICogQGRlZmF1bHQgdHJ1ZTtcbiAgICAgKi9cbiAgICB0aGlzLnJvdW5kUGl4ZWxzID0gdHJ1ZTtcblxuICAgIHRoaXMuc2V0UHJvcGVydGllcyhwcm9wZXJ0aWVzKTtcbn1cblxuUGFydGljbGVDb250YWluZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShDb250YWluZXIucHJvdG90eXBlKTtcblBhcnRpY2xlQ29udGFpbmVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFBhcnRpY2xlQ29udGFpbmVyO1xubW9kdWxlLmV4cG9ydHMgPSBQYXJ0aWNsZUNvbnRhaW5lcjtcblxuLyoqXG4gKiBTZXRzIHRoZSBwcml2YXRlIHByb3BlcnRpZXMgYXJyYXkgdG8gZHluYW1pYyAvIHN0YXRpYyBiYXNlZCBvbiB0aGUgcGFzc2VkIHByb3BlcnRpZXMgb2JqZWN0XG4gKlxuICogQHBhcmFtIHByb3BlcnRpZXMge29iamVjdH0gVGhlIHByb3BlcnRpZXMgdG8gYmUgdXBsb2FkZWRcbiAqL1xuUGFydGljbGVDb250YWluZXIucHJvdG90eXBlLnNldFByb3BlcnRpZXMgPSBmdW5jdGlvbihwcm9wZXJ0aWVzKVxue1xuICAgIGlmICggcHJvcGVydGllcyApIHtcbiAgICAgICAgdGhpcy5fcHJvcGVydGllc1swXSA9ICdzY2FsZScgaW4gcHJvcGVydGllcyA/ICEhcHJvcGVydGllcy5zY2FsZSA6IHRoaXMuX3Byb3BlcnRpZXNbMF07XG4gICAgICAgIHRoaXMuX3Byb3BlcnRpZXNbMV0gPSAncG9zaXRpb24nIGluIHByb3BlcnRpZXMgPyAhIXByb3BlcnRpZXMucG9zaXRpb24gOiB0aGlzLl9wcm9wZXJ0aWVzWzFdO1xuICAgICAgICB0aGlzLl9wcm9wZXJ0aWVzWzJdID0gJ3JvdGF0aW9uJyBpbiBwcm9wZXJ0aWVzID8gISFwcm9wZXJ0aWVzLnJvdGF0aW9uIDogdGhpcy5fcHJvcGVydGllc1syXTtcbiAgICAgICAgdGhpcy5fcHJvcGVydGllc1szXSA9ICd1dnMnIGluIHByb3BlcnRpZXMgPyAhIXByb3BlcnRpZXMudXZzIDogdGhpcy5fcHJvcGVydGllc1szXTtcbiAgICAgICAgdGhpcy5fcHJvcGVydGllc1s0XSA9ICdhbHBoYScgaW4gcHJvcGVydGllcyA/ICEhcHJvcGVydGllcy5hbHBoYSA6IHRoaXMuX3Byb3BlcnRpZXNbNF07XG4gICAgfVxufTtcblxuLyoqXG4gKiBVcGRhdGVzIHRoZSBvYmplY3QgdHJhbnNmb3JtIGZvciByZW5kZXJpbmdcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5QYXJ0aWNsZUNvbnRhaW5lci5wcm90b3R5cGUudXBkYXRlVHJhbnNmb3JtID0gZnVuY3Rpb24gKClcbntcblxuICAgIC8vIFRPRE8gZG9uJ3QgbmVlZCB0byFcbiAgICB0aGlzLmRpc3BsYXlPYmplY3RVcGRhdGVUcmFuc2Zvcm0oKTtcbiAgICAvLyAgUElYSS5Db250YWluZXIucHJvdG90eXBlLnVwZGF0ZVRyYW5zZm9ybS5jYWxsKCB0aGlzICk7XG59O1xuXG4vKipcbiAqIFJlbmRlcnMgdGhlIGNvbnRhaW5lciB1c2luZyB0aGUgV2ViR0wgcmVuZGVyZXJcbiAqXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcn0gVGhlIHdlYmdsIHJlbmRlcmVyXG4gKiBAcHJpdmF0ZVxuICovXG5QYXJ0aWNsZUNvbnRhaW5lci5wcm90b3R5cGUucmVuZGVyV2ViR0wgPSBmdW5jdGlvbiAocmVuZGVyZXIpXG57XG4gICAgaWYgKCF0aGlzLnZpc2libGUgfHwgdGhpcy53b3JsZEFscGhhIDw9IDAgfHwgIXRoaXMuY2hpbGRyZW4ubGVuZ3RoIHx8ICF0aGlzLnJlbmRlcmFibGUpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgcmVuZGVyZXIuc2V0T2JqZWN0UmVuZGVyZXIoIHJlbmRlcmVyLnBsdWdpbnMucGFydGljbGUgKTtcbiAgICByZW5kZXJlci5wbHVnaW5zLnBhcnRpY2xlLnJlbmRlciggdGhpcyApO1xufTtcblxuLyoqXG4gKiBTZXQgdGhlIGZsYWcgdGhhdCBzdGF0aWMgZGF0YSBzaG91bGQgYmUgdXBkYXRlZCB0byB0cnVlXG4gKlxuICogQHByaXZhdGVcbiAqL1xuUGFydGljbGVDb250YWluZXIucHJvdG90eXBlLm9uQ2hpbGRyZW5DaGFuZ2UgPSBmdW5jdGlvbiAoc21hbGxlc3RDaGlsZEluZGV4KVxue1xuICAgIHZhciBidWZmZXJJbmRleCA9IE1hdGguZmxvb3Ioc21hbGxlc3RDaGlsZEluZGV4IC8gdGhpcy5fYmF0Y2hTaXplKTtcbiAgICBpZiAoYnVmZmVySW5kZXggPCB0aGlzLl9idWZmZXJUb1VwZGF0ZSkge1xuICAgICAgICB0aGlzLl9idWZmZXJUb1VwZGF0ZSA9IGJ1ZmZlckluZGV4O1xuICAgIH1cbn07XG5cbi8qKlxuICogUmVuZGVycyB0aGUgb2JqZWN0IHVzaW5nIHRoZSBDYW52YXMgcmVuZGVyZXJcbiAqXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuQ2FudmFzUmVuZGVyZXJ9IFRoZSBjYW52YXMgcmVuZGVyZXJcbiAqIEBwcml2YXRlXG4gKi9cblBhcnRpY2xlQ29udGFpbmVyLnByb3RvdHlwZS5yZW5kZXJDYW52YXMgPSBmdW5jdGlvbiAocmVuZGVyZXIpXG57XG4gICAgaWYgKCF0aGlzLnZpc2libGUgfHwgdGhpcy53b3JsZEFscGhhIDw9IDAgfHwgIXRoaXMuY2hpbGRyZW4ubGVuZ3RoIHx8ICF0aGlzLnJlbmRlcmFibGUpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFyIGNvbnRleHQgPSByZW5kZXJlci5jb250ZXh0O1xuICAgIHZhciB0cmFuc2Zvcm0gPSB0aGlzLndvcmxkVHJhbnNmb3JtO1xuICAgIHZhciBpc1JvdGF0ZWQgPSB0cnVlO1xuXG4gICAgdmFyIHBvc2l0aW9uWCA9IDA7XG4gICAgdmFyIHBvc2l0aW9uWSA9IDA7XG5cbiAgICB2YXIgZmluYWxXaWR0aCA9IDA7XG4gICAgdmFyIGZpbmFsSGVpZ2h0ID0gMDtcblxuICAgIHZhciBjb21wb3NpdGVPcGVyYXRpb24gPSByZW5kZXJlci5ibGVuZE1vZGVzW3RoaXMuYmxlbmRNb2RlXTtcbiAgICBpZiAoY29tcG9zaXRlT3BlcmF0aW9uICE9PSBjb250ZXh0Lmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbilcbiAgICB7XG4gICAgICAgIGNvbnRleHQuZ2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uID0gY29tcG9zaXRlT3BlcmF0aW9uO1xuICAgIH1cblxuICAgIGNvbnRleHQuZ2xvYmFsQWxwaGEgPSB0aGlzLndvcmxkQWxwaGE7XG5cbiAgICB0aGlzLmRpc3BsYXlPYmplY3RVcGRhdGVUcmFuc2Zvcm0oKTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5jaGlsZHJlbi5sZW5ndGg7ICsraSlcbiAgICB7XG4gICAgICAgIHZhciBjaGlsZCA9IHRoaXMuY2hpbGRyZW5baV07XG5cbiAgICAgICAgaWYgKCFjaGlsZC52aXNpYmxlKVxuICAgICAgICB7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBmcmFtZSA9IGNoaWxkLnRleHR1cmUuZnJhbWU7XG5cbiAgICAgICAgY29udGV4dC5nbG9iYWxBbHBoYSA9IHRoaXMud29ybGRBbHBoYSAqIGNoaWxkLmFscGhhO1xuXG4gICAgICAgIGlmIChjaGlsZC5yb3RhdGlvbiAlIChNYXRoLlBJICogMikgPT09IDApXG4gICAgICAgIHtcbiAgICAgICAgICAgIC8vIHRoaXMgaXMgdGhlIGZhc3Rlc3QgIHdheSB0byBvcHRpbWlzZSEgLSBpZiByb3RhdGlvbiBpcyAwIHRoZW4gd2UgY2FuIGF2b2lkIGFueSBraW5kIG9mIHNldFRyYW5zZm9ybSBjYWxsXG4gICAgICAgICAgICBpZiAoaXNSb3RhdGVkKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGNvbnRleHQuc2V0VHJhbnNmb3JtKFxuICAgICAgICAgICAgICAgICAgICB0cmFuc2Zvcm0uYSxcbiAgICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtLmIsXG4gICAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybS5jLFxuICAgICAgICAgICAgICAgICAgICB0cmFuc2Zvcm0uZCxcbiAgICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtLnR4LFxuICAgICAgICAgICAgICAgICAgICB0cmFuc2Zvcm0udHlcbiAgICAgICAgICAgICAgICApO1xuXG4gICAgICAgICAgICAgICAgaXNSb3RhdGVkID0gZmFsc2U7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHBvc2l0aW9uWCA9ICgoY2hpbGQuYW5jaG9yLngpICogKC1mcmFtZS53aWR0aCAqIGNoaWxkLnNjYWxlLngpICsgY2hpbGQucG9zaXRpb24ueCAgKyAwLjUpO1xuICAgICAgICAgICAgcG9zaXRpb25ZID0gKChjaGlsZC5hbmNob3IueSkgKiAoLWZyYW1lLmhlaWdodCAqIGNoaWxkLnNjYWxlLnkpICsgY2hpbGQucG9zaXRpb24ueSAgKyAwLjUpO1xuXG4gICAgICAgICAgICBmaW5hbFdpZHRoID0gZnJhbWUud2lkdGggKiBjaGlsZC5zY2FsZS54O1xuICAgICAgICAgICAgZmluYWxIZWlnaHQgPSBmcmFtZS5oZWlnaHQgKiBjaGlsZC5zY2FsZS55O1xuXG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgICBpZiAoIWlzUm90YXRlZClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBpc1JvdGF0ZWQgPSB0cnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjaGlsZC5kaXNwbGF5T2JqZWN0VXBkYXRlVHJhbnNmb3JtKCk7XG5cbiAgICAgICAgICAgIHZhciBjaGlsZFRyYW5zZm9ybSA9IGNoaWxkLndvcmxkVHJhbnNmb3JtO1xuXG4gICAgICAgICAgICBpZiAocmVuZGVyZXIucm91bmRQaXhlbHMpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29udGV4dC5zZXRUcmFuc2Zvcm0oXG4gICAgICAgICAgICAgICAgICAgIGNoaWxkVHJhbnNmb3JtLmEsXG4gICAgICAgICAgICAgICAgICAgIGNoaWxkVHJhbnNmb3JtLmIsXG4gICAgICAgICAgICAgICAgICAgIGNoaWxkVHJhbnNmb3JtLmMsXG4gICAgICAgICAgICAgICAgICAgIGNoaWxkVHJhbnNmb3JtLmQsXG4gICAgICAgICAgICAgICAgICAgIGNoaWxkVHJhbnNmb3JtLnR4IHwgMCxcbiAgICAgICAgICAgICAgICAgICAgY2hpbGRUcmFuc2Zvcm0udHkgfCAwXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb250ZXh0LnNldFRyYW5zZm9ybShcbiAgICAgICAgICAgICAgICAgICAgY2hpbGRUcmFuc2Zvcm0uYSxcbiAgICAgICAgICAgICAgICAgICAgY2hpbGRUcmFuc2Zvcm0uYixcbiAgICAgICAgICAgICAgICAgICAgY2hpbGRUcmFuc2Zvcm0uYyxcbiAgICAgICAgICAgICAgICAgICAgY2hpbGRUcmFuc2Zvcm0uZCxcbiAgICAgICAgICAgICAgICAgICAgY2hpbGRUcmFuc2Zvcm0udHgsXG4gICAgICAgICAgICAgICAgICAgIGNoaWxkVHJhbnNmb3JtLnR5XG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcG9zaXRpb25YID0gKChjaGlsZC5hbmNob3IueCkgKiAoLWZyYW1lLndpZHRoKSArIDAuNSk7XG4gICAgICAgICAgICBwb3NpdGlvblkgPSAoKGNoaWxkLmFuY2hvci55KSAqICgtZnJhbWUuaGVpZ2h0KSArIDAuNSk7XG5cbiAgICAgICAgICAgIGZpbmFsV2lkdGggPSBmcmFtZS53aWR0aDtcbiAgICAgICAgICAgIGZpbmFsSGVpZ2h0ID0gZnJhbWUuaGVpZ2h0O1xuICAgICAgICB9XG5cbiAgICAgICAgY29udGV4dC5kcmF3SW1hZ2UoXG4gICAgICAgICAgICBjaGlsZC50ZXh0dXJlLmJhc2VUZXh0dXJlLnNvdXJjZSxcbiAgICAgICAgICAgIGZyYW1lLngsXG4gICAgICAgICAgICBmcmFtZS55LFxuICAgICAgICAgICAgZnJhbWUud2lkdGgsXG4gICAgICAgICAgICBmcmFtZS5oZWlnaHQsXG4gICAgICAgICAgICBwb3NpdGlvblgsXG4gICAgICAgICAgICBwb3NpdGlvblksXG4gICAgICAgICAgICBmaW5hbFdpZHRoLFxuICAgICAgICAgICAgZmluYWxIZWlnaHRcbiAgICAgICAgKTtcbiAgICB9XG59O1xuXG4vKipcbiAqIERlc3Ryb3lzIHRoZSBjb250YWluZXJcbiAqXG4gKiBAcGFyYW0gW2Rlc3Ryb3lDaGlsZHJlbj1mYWxzZV0ge2Jvb2xlYW59IGlmIHNldCB0byB0cnVlLCBhbGwgdGhlIGNoaWxkcmVuIHdpbGwgaGF2ZSB0aGVpciBkZXN0cm95IG1ldGhvZCBjYWxsZWQgYXMgd2VsbFxuICovXG5QYXJ0aWNsZUNvbnRhaW5lci5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uICgpIHtcbiAgICBDb250YWluZXIucHJvdG90eXBlLmRlc3Ryb3kuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcblxuICAgIGlmICh0aGlzLl9idWZmZXJzKSB7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5fYnVmZmVycy5sZW5ndGg7ICsraSkge1xuICAgICAgICAgICAgdGhpcy5fYnVmZmVyc1tpXS5kZXN0cm95KCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLl9wcm9wZXJ0aWVzID0gbnVsbDtcbiAgICB0aGlzLl9idWZmZXJzID0gbnVsbDtcbn07XG4iLCJcbi8qKlxuICogQGF1dGhvciBNYXQgR3JvdmVzXG4gKlxuICogQmlnIHRoYW5rcyB0byB0aGUgdmVyeSBjbGV2ZXIgTWF0dCBEZXNMYXVyaWVycyA8bWF0dGRlc2w+IGh0dHBzOi8vZ2l0aHViLmNvbS9tYXR0ZGVzbC9cbiAqIGZvciBjcmVhdGluZyB0aGUgb3JpZ2luYWwgcGl4aSB2ZXJzaW9uIVxuICogQWxzbyBhIHRoYW5rcyB0byBodHRwczovL2dpdGh1Yi5jb20vYmNoZXZhbGllciBmb3IgdHdlYWtpbmcgdGhlIHRpbnQgYW5kIGFscGhhIHNvIHRoYXQgdGhleSBub3cgc2hhcmUgNCBieXRlcyBvbiB0aGUgdmVydGV4IGJ1ZmZlclxuICpcbiAqIEhlYXZpbHkgaW5zcGlyZWQgYnkgTGliR0RYJ3MgUGFydGljbGVCdWZmZXI6XG4gKiBodHRwczovL2dpdGh1Yi5jb20vbGliZ2R4L2xpYmdkeC9ibG9iL21hc3Rlci9nZHgvc3JjL2NvbS9iYWRsb2dpYy9nZHgvZ3JhcGhpY3MvZzJkL1BhcnRpY2xlQnVmZmVyLmphdmFcbiAqL1xuXG4vKipcbiAqIFRoZSBwYXJ0aWNsZSBidWZmZXIgbWFuYWdlcyB0aGUgc3RhdGljIGFuZCBkeW5hbWljIGJ1ZmZlcnMgZm9yIGEgcGFydGljbGUgY29udGFpbmVyLlxuICpcbiAqIEBjbGFzc1xuICogQHByaXZhdGVcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKi9cbmZ1bmN0aW9uIFBhcnRpY2xlQnVmZmVyKGdsLCBwcm9wZXJ0aWVzLCBkeW5hbWljUHJvcGVydHlGbGFncywgc2l6ZSlcbntcbiAgICAvKipcbiAgICAgKiBUaGUgY3VycmVudCBXZWJHTCBkcmF3aW5nIGNvbnRleHQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtXZWJHTFJlbmRlcmluZ0NvbnRleHR9XG4gICAgICovXG4gICAgdGhpcy5nbCA9IGdsO1xuXG4gICAgLyoqXG4gICAgICogU2l6ZSBvZiBhIHNpbmdsZSB2ZXJ0ZXguXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy52ZXJ0U2l6ZSA9IDI7XG5cbiAgICAvKipcbiAgICAgKiBTaXplIG9mIGEgc2luZ2xlIHZlcnRleCBpbiBieXRlcy5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLnZlcnRCeXRlU2l6ZSA9IHRoaXMudmVydFNpemUgKiA0O1xuXG4gICAgLyoqXG4gICAgICogVGhlIG51bWJlciBvZiBwYXJ0aWNsZXMgdGhlIGJ1ZmZlciBjYW4gaG9sZFxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMuc2l6ZSA9IHNpemU7XG5cbiAgICAvKipcbiAgICAgKiBBIGxpc3Qgb2YgdGhlIHByb3BlcnRpZXMgdGhhdCBhcmUgZHluYW1pYy5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge29iamVjdFtdfVxuICAgICAqL1xuICAgIHRoaXMuZHluYW1pY1Byb3BlcnRpZXMgPSBbXTtcblxuICAgIC8qKlxuICAgICAqIEEgbGlzdCBvZiB0aGUgcHJvcGVydGllcyB0aGF0IGFyZSBzdGF0aWMuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtvYmplY3RbXX1cbiAgICAgKi9cbiAgICB0aGlzLnN0YXRpY1Byb3BlcnRpZXMgPSBbXTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcGVydGllcy5sZW5ndGg7IGkrKylcbiAgICB7XG4gICAgICAgIHZhciBwcm9wZXJ0eSA9IHByb3BlcnRpZXNbaV07XG5cbiAgICAgICAgaWYoZHluYW1pY1Byb3BlcnR5RmxhZ3NbaV0pXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuZHluYW1pY1Byb3BlcnRpZXMucHVzaChwcm9wZXJ0eSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnN0YXRpY1Byb3BlcnRpZXMucHVzaChwcm9wZXJ0eSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLnN0YXRpY1N0cmlkZSA9IDA7XG4gICAgdGhpcy5zdGF0aWNCdWZmZXIgPSBudWxsO1xuICAgIHRoaXMuc3RhdGljRGF0YSA9IG51bGw7XG5cbiAgICB0aGlzLmR5bmFtaWNTdHJpZGUgPSAwO1xuICAgIHRoaXMuZHluYW1pY0J1ZmZlciA9IG51bGw7XG4gICAgdGhpcy5keW5hbWljRGF0YSA9IG51bGw7XG5cbiAgICB0aGlzLmluaXRCdWZmZXJzKCk7XG5cbn1cblxuUGFydGljbGVCdWZmZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gUGFydGljbGVCdWZmZXI7XG5tb2R1bGUuZXhwb3J0cyA9IFBhcnRpY2xlQnVmZmVyO1xuXG4vKipcbiAqIFNldHMgdXAgdGhlIHJlbmRlcmVyIGNvbnRleHQgYW5kIG5lY2Vzc2FyeSBidWZmZXJzLlxuICpcbiAqIEBwcml2YXRlXG4gKi9cblBhcnRpY2xlQnVmZmVyLnByb3RvdHlwZS5pbml0QnVmZmVycyA9IGZ1bmN0aW9uICgpXG57XG4gICAgdmFyIGdsID0gdGhpcy5nbDtcbiAgICB2YXIgaTtcbiAgICB2YXIgcHJvcGVydHk7XG5cbiAgICB2YXIgZHluYW1pY09mZnNldCA9IDA7XG4gICAgdGhpcy5keW5hbWljU3RyaWRlID0gMDtcblxuICAgIGZvciAoaSA9IDA7IGkgPCB0aGlzLmR5bmFtaWNQcm9wZXJ0aWVzLmxlbmd0aDsgaSsrKVxuICAgIHtcbiAgICAgICAgcHJvcGVydHkgPSB0aGlzLmR5bmFtaWNQcm9wZXJ0aWVzW2ldO1xuXG4gICAgICAgIHByb3BlcnR5Lm9mZnNldCA9IGR5bmFtaWNPZmZzZXQ7XG4gICAgICAgIGR5bmFtaWNPZmZzZXQgKz0gcHJvcGVydHkuc2l6ZTtcbiAgICAgICAgdGhpcy5keW5hbWljU3RyaWRlICs9IHByb3BlcnR5LnNpemU7XG4gICAgfVxuXG4gICAgdGhpcy5keW5hbWljRGF0YSA9IG5ldyBGbG9hdDMyQXJyYXkoIHRoaXMuc2l6ZSAqIHRoaXMuZHluYW1pY1N0cmlkZSAqIDQpO1xuICAgIHRoaXMuZHluYW1pY0J1ZmZlciA9IGdsLmNyZWF0ZUJ1ZmZlcigpO1xuXG4gICAgZ2wuYmluZEJ1ZmZlcihnbC5BUlJBWV9CVUZGRVIsIHRoaXMuZHluYW1pY0J1ZmZlcik7XG4gICAgZ2wuYnVmZmVyRGF0YShnbC5BUlJBWV9CVUZGRVIsIHRoaXMuZHluYW1pY0RhdGEsIGdsLkRZTkFNSUNfRFJBVyk7XG5cblxuICAgIC8vIHN0YXRpYyAvL1xuICAgIHZhciBzdGF0aWNPZmZzZXQgPSAwO1xuICAgIHRoaXMuc3RhdGljU3RyaWRlID0gMDtcblxuICAgIGZvciAoaSA9IDA7IGkgPCB0aGlzLnN0YXRpY1Byb3BlcnRpZXMubGVuZ3RoOyBpKyspXG4gICAge1xuICAgICAgICBwcm9wZXJ0eSA9IHRoaXMuc3RhdGljUHJvcGVydGllc1tpXTtcblxuICAgICAgICBwcm9wZXJ0eS5vZmZzZXQgPSBzdGF0aWNPZmZzZXQ7XG4gICAgICAgIHN0YXRpY09mZnNldCArPSBwcm9wZXJ0eS5zaXplO1xuICAgICAgICB0aGlzLnN0YXRpY1N0cmlkZSArPSBwcm9wZXJ0eS5zaXplO1xuICAgIH1cblxuICAgIHRoaXMuc3RhdGljRGF0YSA9IG5ldyBGbG9hdDMyQXJyYXkoIHRoaXMuc2l6ZSAqIHRoaXMuc3RhdGljU3RyaWRlICogNCk7XG4gICAgdGhpcy5zdGF0aWNCdWZmZXIgPSBnbC5jcmVhdGVCdWZmZXIoKTtcblxuICAgIGdsLmJpbmRCdWZmZXIoZ2wuQVJSQVlfQlVGRkVSLCB0aGlzLnN0YXRpY0J1ZmZlcik7XG4gICAgZ2wuYnVmZmVyRGF0YShnbC5BUlJBWV9CVUZGRVIsIHRoaXMuc3RhdGljRGF0YSwgZ2wuRFlOQU1JQ19EUkFXKTtcbn07XG5cbi8qKlxuICogVXBsb2FkcyB0aGUgZHluYW1pYyBwcm9wZXJ0aWVzLlxuICpcbiAqL1xuUGFydGljbGVCdWZmZXIucHJvdG90eXBlLnVwbG9hZER5bmFtaWMgPSBmdW5jdGlvbihjaGlsZHJlbiwgc3RhcnRJbmRleCwgYW1vdW50KVxue1xuICAgIHZhciBnbCA9IHRoaXMuZ2w7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuZHluYW1pY1Byb3BlcnRpZXMubGVuZ3RoOyBpKyspXG4gICAge1xuICAgICAgICB2YXIgcHJvcGVydHkgPSB0aGlzLmR5bmFtaWNQcm9wZXJ0aWVzW2ldO1xuICAgICAgICBwcm9wZXJ0eS51cGxvYWRGdW5jdGlvbihjaGlsZHJlbiwgc3RhcnRJbmRleCwgYW1vdW50LCB0aGlzLmR5bmFtaWNEYXRhLCB0aGlzLmR5bmFtaWNTdHJpZGUsIHByb3BlcnR5Lm9mZnNldCk7XG4gICAgfVxuXG4gICAgZ2wuYmluZEJ1ZmZlcihnbC5BUlJBWV9CVUZGRVIsIHRoaXMuZHluYW1pY0J1ZmZlcik7XG4gICAgZ2wuYnVmZmVyU3ViRGF0YShnbC5BUlJBWV9CVUZGRVIsIDAsIHRoaXMuZHluYW1pY0RhdGEpO1xufTtcblxuLyoqXG4gKiBVcGxvYWRzIHRoZSBzdGF0aWMgcHJvcGVydGllcy5cbiAqXG4gKi9cblBhcnRpY2xlQnVmZmVyLnByb3RvdHlwZS51cGxvYWRTdGF0aWMgPSBmdW5jdGlvbihjaGlsZHJlbiwgc3RhcnRJbmRleCwgYW1vdW50KVxue1xuICAgIHZhciBnbCA9IHRoaXMuZ2w7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuc3RhdGljUHJvcGVydGllcy5sZW5ndGg7IGkrKylcbiAgICB7XG4gICAgICAgIHZhciBwcm9wZXJ0eSA9IHRoaXMuc3RhdGljUHJvcGVydGllc1tpXTtcbiAgICAgICAgcHJvcGVydHkudXBsb2FkRnVuY3Rpb24oY2hpbGRyZW4sIHN0YXJ0SW5kZXgsIGFtb3VudCwgdGhpcy5zdGF0aWNEYXRhLCB0aGlzLnN0YXRpY1N0cmlkZSwgcHJvcGVydHkub2Zmc2V0KTtcbiAgICB9XG5cbiAgICBnbC5iaW5kQnVmZmVyKGdsLkFSUkFZX0JVRkZFUiwgdGhpcy5zdGF0aWNCdWZmZXIpO1xuICAgIGdsLmJ1ZmZlclN1YkRhdGEoZ2wuQVJSQVlfQlVGRkVSLCAwLCB0aGlzLnN0YXRpY0RhdGEpO1xufTtcblxuLyoqXG4gKiBCaW5kcyB0aGUgYnVmZmVycyB0byB0aGUgR1BVXG4gKlxuICovXG5QYXJ0aWNsZUJ1ZmZlci5wcm90b3R5cGUuYmluZCA9IGZ1bmN0aW9uICgpXG57XG4gICAgdmFyIGdsID0gdGhpcy5nbDtcbiAgICB2YXIgaSwgcHJvcGVydHk7XG5cbiAgICBnbC5iaW5kQnVmZmVyKGdsLkFSUkFZX0JVRkZFUiwgdGhpcy5keW5hbWljQnVmZmVyKTtcblxuICAgIGZvciAoaSA9IDA7IGkgPCB0aGlzLmR5bmFtaWNQcm9wZXJ0aWVzLmxlbmd0aDsgaSsrKVxuICAgIHtcbiAgICAgICAgcHJvcGVydHkgPSB0aGlzLmR5bmFtaWNQcm9wZXJ0aWVzW2ldO1xuICAgICAgICBnbC52ZXJ0ZXhBdHRyaWJQb2ludGVyKHByb3BlcnR5LmF0dHJpYnV0ZSwgcHJvcGVydHkuc2l6ZSwgZ2wuRkxPQVQsIGZhbHNlLCB0aGlzLmR5bmFtaWNTdHJpZGUgKiA0LCBwcm9wZXJ0eS5vZmZzZXQgKiA0KTtcbiAgICB9XG5cbiAgICBnbC5iaW5kQnVmZmVyKGdsLkFSUkFZX0JVRkZFUiwgdGhpcy5zdGF0aWNCdWZmZXIpO1xuXG4gICAgZm9yIChpID0gMDsgaSA8IHRoaXMuc3RhdGljUHJvcGVydGllcy5sZW5ndGg7IGkrKylcbiAgICB7XG4gICAgICAgIHByb3BlcnR5ID0gdGhpcy5zdGF0aWNQcm9wZXJ0aWVzW2ldO1xuICAgICAgICBnbC52ZXJ0ZXhBdHRyaWJQb2ludGVyKHByb3BlcnR5LmF0dHJpYnV0ZSwgcHJvcGVydHkuc2l6ZSwgZ2wuRkxPQVQsIGZhbHNlLCB0aGlzLnN0YXRpY1N0cmlkZSAqIDQsIHByb3BlcnR5Lm9mZnNldCAqIDQpO1xuICAgIH1cbn07XG5cbi8qKlxuICogRGVzdHJveXMgdGhlIFBhcnRpY2xlQnVmZmVyLlxuICpcbiAqL1xuUGFydGljbGVCdWZmZXIucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoKVxue1xuICAgIHRoaXMuZHluYW1pY1Byb3BlcnRpZXMgPSBudWxsO1xuICAgIHRoaXMuZHluYW1pY0RhdGEgPSBudWxsO1xuICAgIHRoaXMuZ2wuZGVsZXRlQnVmZmVyKHRoaXMuZHluYW1pY0J1ZmZlcik7XG5cbiAgICB0aGlzLnN0YXRpY1Byb3BlcnRpZXMgPSBudWxsO1xuICAgIHRoaXMuc3RhdGljRGF0YSA9IG51bGw7XG4gICAgdGhpcy5nbC5kZWxldGVCdWZmZXIodGhpcy5zdGF0aWNCdWZmZXIpO1xufTtcbiIsInZhciBPYmplY3RSZW5kZXJlciA9IHJlcXVpcmUoJy4uLy4uL3JlbmRlcmVycy93ZWJnbC91dGlscy9PYmplY3RSZW5kZXJlcicpLFxuICAgIFdlYkdMUmVuZGVyZXIgPSByZXF1aXJlKCcuLi8uLi9yZW5kZXJlcnMvd2ViZ2wvV2ViR0xSZW5kZXJlcicpLFxuICAgIFBhcnRpY2xlU2hhZGVyID0gcmVxdWlyZSgnLi9QYXJ0aWNsZVNoYWRlcicpLFxuICAgIFBhcnRpY2xlQnVmZmVyID0gcmVxdWlyZSgnLi9QYXJ0aWNsZUJ1ZmZlcicpLFxuICAgIG1hdGggICAgICAgICAgICA9IHJlcXVpcmUoJy4uLy4uL21hdGgnKTtcblxuLyoqXG4gKiBAYXV0aG9yIE1hdCBHcm92ZXNcbiAqXG4gKiBCaWcgdGhhbmtzIHRvIHRoZSB2ZXJ5IGNsZXZlciBNYXR0IERlc0xhdXJpZXJzIDxtYXR0ZGVzbD4gaHR0cHM6Ly9naXRodWIuY29tL21hdHRkZXNsL1xuICogZm9yIGNyZWF0aW5nIHRoZSBvcmlnaW5hbCBwaXhpIHZlcnNpb24hXG4gKiBBbHNvIGEgdGhhbmtzIHRvIGh0dHBzOi8vZ2l0aHViLmNvbS9iY2hldmFsaWVyIGZvciB0d2Vha2luZyB0aGUgdGludCBhbmQgYWxwaGEgc28gdGhhdCB0aGV5IG5vdyBzaGFyZSA0IGJ5dGVzIG9uIHRoZSB2ZXJ0ZXggYnVmZmVyXG4gKlxuICogSGVhdmlseSBpbnNwaXJlZCBieSBMaWJHRFgncyBQYXJ0aWNsZVJlbmRlcmVyOlxuICogaHR0cHM6Ly9naXRodWIuY29tL2xpYmdkeC9saWJnZHgvYmxvYi9tYXN0ZXIvZ2R4L3NyYy9jb20vYmFkbG9naWMvZ2R4L2dyYXBoaWNzL2cyZC9QYXJ0aWNsZVJlbmRlcmVyLmphdmFcbiAqL1xuXG4vKipcbiAqXG4gKiBAY2xhc3NcbiAqIEBwcml2YXRlXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLldlYkdMUmVuZGVyZXJ9IFRoZSByZW5kZXJlciB0aGlzIHNwcml0ZSBiYXRjaCB3b3JrcyBmb3IuXG4gKi9cbmZ1bmN0aW9uIFBhcnRpY2xlUmVuZGVyZXIocmVuZGVyZXIpXG57XG4gICAgT2JqZWN0UmVuZGVyZXIuY2FsbCh0aGlzLCByZW5kZXJlcik7XG5cbiAgICAvLyA2NTUzNSBpcyBtYXggdmVydGV4IGluZGV4IGluIHRoZSBpbmRleCBidWZmZXIgKHNlZSBQYXJ0aWNsZVJlbmRlcmVyKVxuICAgIC8vIHNvIG1heCBudW1iZXIgb2YgcGFydGljbGVzIGlzIDY1NTM2IC8gNCA9IDE2Mzg0XG4gICAgLy8gYW5kIG1heCBudW1iZXIgb2YgZWxlbWVudCBpbiB0aGUgaW5kZXggYnVmZmVyIGlzIDE2Mzg0ICogNiA9IDk4MzA0XG4gICAgLy8gQ3JlYXRpbmcgYSBmdWxsIGluZGV4IGJ1ZmZlciwgb3ZlcmhlYWQgaXMgOTgzMDQgKiAyID0gMTk2S29cbiAgICB2YXIgbnVtSW5kaWNlcyA9IDk4MzA0O1xuXG4gICAgLyoqXG4gICAgICogSG9sZHMgdGhlIGluZGljZXNcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1VpbnQxNkFycmF5fVxuICAgICAqL1xuICAgIHRoaXMuaW5kaWNlcyA9IG5ldyBVaW50MTZBcnJheShudW1JbmRpY2VzKTtcblxuICAgIGZvciAodmFyIGk9MCwgaj0wOyBpIDwgbnVtSW5kaWNlczsgaSArPSA2LCBqICs9IDQpXG4gICAge1xuICAgICAgICB0aGlzLmluZGljZXNbaSArIDBdID0gaiArIDA7XG4gICAgICAgIHRoaXMuaW5kaWNlc1tpICsgMV0gPSBqICsgMTtcbiAgICAgICAgdGhpcy5pbmRpY2VzW2kgKyAyXSA9IGogKyAyO1xuICAgICAgICB0aGlzLmluZGljZXNbaSArIDNdID0gaiArIDA7XG4gICAgICAgIHRoaXMuaW5kaWNlc1tpICsgNF0gPSBqICsgMjtcbiAgICAgICAgdGhpcy5pbmRpY2VzW2kgKyA1XSA9IGogKyAzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoZSBkZWZhdWx0IHNoYWRlciB0aGF0IGlzIHVzZWQgaWYgYSBzcHJpdGUgZG9lc24ndCBoYXZlIGEgbW9yZSBzcGVjaWZpYyBvbmUuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlNoYWRlcn1cbiAgICAgKi9cbiAgICB0aGlzLnNoYWRlciA9IG51bGw7XG5cbiAgICB0aGlzLmluZGV4QnVmZmVyID0gbnVsbDtcblxuICAgIHRoaXMucHJvcGVydGllcyA9IG51bGw7XG5cbiAgICB0aGlzLnRlbXBNYXRyaXggPSBuZXcgbWF0aC5NYXRyaXgoKTtcbn1cblxuUGFydGljbGVSZW5kZXJlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKE9iamVjdFJlbmRlcmVyLnByb3RvdHlwZSk7XG5QYXJ0aWNsZVJlbmRlcmVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFBhcnRpY2xlUmVuZGVyZXI7XG5tb2R1bGUuZXhwb3J0cyA9IFBhcnRpY2xlUmVuZGVyZXI7XG5cbldlYkdMUmVuZGVyZXIucmVnaXN0ZXJQbHVnaW4oJ3BhcnRpY2xlJywgUGFydGljbGVSZW5kZXJlcik7XG5cbi8qKlxuICogV2hlbiB0aGVyZSBpcyBhIFdlYkdMIGNvbnRleHQgY2hhbmdlXG4gKlxuICogQHByaXZhdGVcbiAqL1xuUGFydGljbGVSZW5kZXJlci5wcm90b3R5cGUub25Db250ZXh0Q2hhbmdlID0gZnVuY3Rpb24gKClcbntcbiAgICB2YXIgZ2wgPSB0aGlzLnJlbmRlcmVyLmdsO1xuXG4gICAgLy8gc2V0dXAgZGVmYXVsdCBzaGFkZXJcbiAgICB0aGlzLnNoYWRlciA9IG5ldyBQYXJ0aWNsZVNoYWRlcih0aGlzLnJlbmRlcmVyLnNoYWRlck1hbmFnZXIpO1xuXG4gICAgdGhpcy5pbmRleEJ1ZmZlciA9IGdsLmNyZWF0ZUJ1ZmZlcigpO1xuXG4gICAgLy8gNjU1MzUgaXMgbWF4IGluZGV4LCBzbyA2NTUzNSAvIDYgPSAxMDkyMi5cblxuICAgIC8vdXBsb2FkIHRoZSBpbmRleCBkYXRhXG4gICAgZ2wuYmluZEJ1ZmZlcihnbC5FTEVNRU5UX0FSUkFZX0JVRkZFUiwgdGhpcy5pbmRleEJ1ZmZlcik7XG4gICAgZ2wuYnVmZmVyRGF0YShnbC5FTEVNRU5UX0FSUkFZX0JVRkZFUiwgdGhpcy5pbmRpY2VzLCBnbC5TVEFUSUNfRFJBVyk7XG5cbiAgICB0aGlzLnByb3BlcnRpZXMgPSBbXG4gICAgICAgIC8vIHZlcnRpY2VzRGF0YVxuICAgICAgICB7XG4gICAgICAgICAgICBhdHRyaWJ1dGU6dGhpcy5zaGFkZXIuYXR0cmlidXRlcy5hVmVydGV4UG9zaXRpb24sXG4gICAgICAgICAgICBzaXplOjIsXG4gICAgICAgICAgICB1cGxvYWRGdW5jdGlvbjp0aGlzLnVwbG9hZFZlcnRpY2VzLFxuICAgICAgICAgICAgb2Zmc2V0OjBcbiAgICAgICAgfSxcbiAgICAgICAgLy8gcG9zaXRpb25EYXRhXG4gICAgICAgIHtcbiAgICAgICAgICAgIGF0dHJpYnV0ZTp0aGlzLnNoYWRlci5hdHRyaWJ1dGVzLmFQb3NpdGlvbkNvb3JkLFxuICAgICAgICAgICAgc2l6ZToyLFxuICAgICAgICAgICAgdXBsb2FkRnVuY3Rpb246dGhpcy51cGxvYWRQb3NpdGlvbixcbiAgICAgICAgICAgIG9mZnNldDowXG4gICAgICAgIH0sXG4gICAgICAgIC8vIHJvdGF0aW9uRGF0YVxuICAgICAgICB7XG4gICAgICAgICAgICBhdHRyaWJ1dGU6dGhpcy5zaGFkZXIuYXR0cmlidXRlcy5hUm90YXRpb24sXG4gICAgICAgICAgICBzaXplOjEsXG4gICAgICAgICAgICB1cGxvYWRGdW5jdGlvbjp0aGlzLnVwbG9hZFJvdGF0aW9uLFxuICAgICAgICAgICAgb2Zmc2V0OjBcbiAgICAgICAgfSxcbiAgICAgICAgLy8gdXZzRGF0YVxuICAgICAgICB7XG4gICAgICAgICAgICBhdHRyaWJ1dGU6dGhpcy5zaGFkZXIuYXR0cmlidXRlcy5hVGV4dHVyZUNvb3JkLFxuICAgICAgICAgICAgc2l6ZToyLFxuICAgICAgICAgICAgdXBsb2FkRnVuY3Rpb246dGhpcy51cGxvYWRVdnMsXG4gICAgICAgICAgICBvZmZzZXQ6MFxuICAgICAgICB9LFxuICAgICAgICAvLyBhbHBoYURhdGFcbiAgICAgICAge1xuICAgICAgICAgICAgYXR0cmlidXRlOnRoaXMuc2hhZGVyLmF0dHJpYnV0ZXMuYUNvbG9yLFxuICAgICAgICAgICAgc2l6ZToxLFxuICAgICAgICAgICAgdXBsb2FkRnVuY3Rpb246dGhpcy51cGxvYWRBbHBoYSxcbiAgICAgICAgICAgIG9mZnNldDowXG4gICAgICAgIH1cbiAgICBdO1xufTtcblxuLyoqXG4gKiBTdGFydHMgYSBuZXcgcGFydGljbGUgYmF0Y2guXG4gKlxuICovXG5QYXJ0aWNsZVJlbmRlcmVyLnByb3RvdHlwZS5zdGFydCA9IGZ1bmN0aW9uICgpXG57XG4gICAgdmFyIGdsID0gdGhpcy5yZW5kZXJlci5nbDtcblxuICAgIC8vIGJpbmQgdGhlIG1haW4gdGV4dHVyZVxuICAgIGdsLmFjdGl2ZVRleHR1cmUoZ2wuVEVYVFVSRTApO1xuXG4gICAgLy8gYmluZCB0aGUgYnVmZmVyc1xuXG4gICAgZ2wuYmluZEJ1ZmZlcihnbC5FTEVNRU5UX0FSUkFZX0JVRkZFUiwgdGhpcy5pbmRleEJ1ZmZlcik7XG5cbiAgICB2YXIgc2hhZGVyID0gdGhpcy5zaGFkZXI7XG5cbiAgICB0aGlzLnJlbmRlcmVyLnNoYWRlck1hbmFnZXIuc2V0U2hhZGVyKHNoYWRlcik7XG59O1xuXG5cbi8qKlxuICogUmVuZGVycyB0aGUgcGFydGljbGUgY29udGFpbmVyIG9iamVjdC5cbiAqXG4gKiBAcGFyYW0gY29udGFpbmVyIHtQSVhJLlBhcnRpY2xlQ29udGFpbmVyfSBUaGUgY29udGFpbmVyIHRvIHJlbmRlciB1c2luZyB0aGlzIFBhcnRpY2xlUmVuZGVyZXJcbiAqL1xuUGFydGljbGVSZW5kZXJlci5wcm90b3R5cGUucmVuZGVyID0gZnVuY3Rpb24gKGNvbnRhaW5lcilcbntcbiAgICB2YXIgY2hpbGRyZW4gPSBjb250YWluZXIuY2hpbGRyZW4sXG4gICAgICAgIHRvdGFsQ2hpbGRyZW4gPSBjaGlsZHJlbi5sZW5ndGgsXG4gICAgICAgIG1heFNpemUgPSBjb250YWluZXIuX21heFNpemUsXG4gICAgICAgIGJhdGNoU2l6ZSA9IGNvbnRhaW5lci5fYmF0Y2hTaXplO1xuXG4gICAgaWYodG90YWxDaGlsZHJlbiA9PT0gMClcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgZWxzZSBpZih0b3RhbENoaWxkcmVuID4gbWF4U2l6ZSlcbiAgICB7XG4gICAgICAgIHRvdGFsQ2hpbGRyZW4gPSBtYXhTaXplO1xuICAgIH1cblxuICAgIGlmKCFjb250YWluZXIuX2J1ZmZlcnMpXG4gICAge1xuICAgICAgICBjb250YWluZXIuX2J1ZmZlcnMgPSB0aGlzLmdlbmVyYXRlQnVmZmVycyggY29udGFpbmVyICk7XG4gICAgfVxuXG4gICAgLy8gaWYgdGhlIHV2cyBoYXZlIG5vdCB1cGRhdGVkIHRoZW4gbm8gcG9pbnQgcmVuZGVyaW5nIGp1c3QgeWV0IVxuICAgIHRoaXMucmVuZGVyZXIuYmxlbmRNb2RlTWFuYWdlci5zZXRCbGVuZE1vZGUoY29udGFpbmVyLmJsZW5kTW9kZSk7XG5cbiAgICB2YXIgZ2wgPSB0aGlzLnJlbmRlcmVyLmdsO1xuXG4gICAgdmFyIG0gPSAgY29udGFpbmVyLndvcmxkVHJhbnNmb3JtLmNvcHkoIHRoaXMudGVtcE1hdHJpeCApO1xuICAgIG0ucHJlcGVuZCggdGhpcy5yZW5kZXJlci5jdXJyZW50UmVuZGVyVGFyZ2V0LnByb2plY3Rpb25NYXRyaXggKTtcbiAgICBnbC51bmlmb3JtTWF0cml4M2Z2KHRoaXMuc2hhZGVyLnVuaWZvcm1zLnByb2plY3Rpb25NYXRyaXguX2xvY2F0aW9uLCBmYWxzZSwgbS50b0FycmF5KHRydWUpKTtcbiAgICBnbC51bmlmb3JtMWYodGhpcy5zaGFkZXIudW5pZm9ybXMudUFscGhhLl9sb2NhdGlvbiwgY29udGFpbmVyLndvcmxkQWxwaGEpO1xuXG5cbiAgICAvLyBtYWtlIHN1cmUgdGhlIHRleHR1cmUgaXMgYm91bmQuLlxuICAgIHZhciBiYXNlVGV4dHVyZSA9IGNoaWxkcmVuWzBdLl90ZXh0dXJlLmJhc2VUZXh0dXJlO1xuXG4gICAgaWYgKCFiYXNlVGV4dHVyZS5fZ2xUZXh0dXJlc1tnbC5pZF0pXG4gICAge1xuICAgICAgICAvLyBpZiB0aGUgdGV4dHVyZSBoYXMgbm90IHVwZGF0ZWQgdGhlbiBsZXRzIG5vdCB1cGxvYWQgYW55IHN0YXRpYyBwcm9wZXJ0aWVzXG4gICAgICAgIGlmKCF0aGlzLnJlbmRlcmVyLnVwZGF0ZVRleHR1cmUoYmFzZVRleHR1cmUpKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZighY29udGFpbmVyLl9wcm9wZXJ0aWVzWzBdIHx8ICFjb250YWluZXIuX3Byb3BlcnRpZXNbM10pXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNvbnRhaW5lci5fYnVmZmVyVG9VcGRhdGUgPSAwO1xuICAgICAgICB9XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIGdsLmJpbmRUZXh0dXJlKGdsLlRFWFRVUkVfMkQsIGJhc2VUZXh0dXJlLl9nbFRleHR1cmVzW2dsLmlkXSk7XG4gICAgfVxuXG4gICAgLy8gbm93IGxldHMgdXBsb2FkIGFuZCByZW5kZXIgdGhlIGJ1ZmZlcnMuLlxuICAgIGZvciAodmFyIGkgPSAwLCBqID0gMDsgaSA8IHRvdGFsQ2hpbGRyZW47IGkgKz0gYmF0Y2hTaXplLCBqICs9IDEpXG4gICAge1xuICAgICAgICB2YXIgYW1vdW50ID0gKCB0b3RhbENoaWxkcmVuIC0gaSk7XG4gICAgICAgIGlmKGFtb3VudCA+IGJhdGNoU2l6ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgYW1vdW50ID0gYmF0Y2hTaXplO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGJ1ZmZlciA9IGNvbnRhaW5lci5fYnVmZmVyc1tqXTtcblxuICAgICAgICAvLyB3ZSBhbHdheXMgdXBsb2FkIHRoZSBkeW5hbWljXG4gICAgICAgIGJ1ZmZlci51cGxvYWREeW5hbWljKGNoaWxkcmVuLCBpLCBhbW91bnQpO1xuXG4gICAgICAgIC8vIHdlIG9ubHkgdXBsb2FkIHRoZSBzdGF0aWMgY29udGVudCB3aGVuIHdlIGhhdmUgdG8hXG4gICAgICAgIGlmKGNvbnRhaW5lci5fYnVmZmVyVG9VcGRhdGUgPT09IGopXG4gICAgICAgIHtcbiAgICAgICAgICAgIGJ1ZmZlci51cGxvYWRTdGF0aWMoY2hpbGRyZW4sIGksIGFtb3VudCk7XG4gICAgICAgICAgICBjb250YWluZXIuX2J1ZmZlclRvVXBkYXRlID0gaiArIDE7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBiaW5kIHRoZSBidWZmZXJcbiAgICAgICAgYnVmZmVyLmJpbmQoIHRoaXMuc2hhZGVyICk7XG5cbiAgICAgICAgIC8vIG5vdyBkcmF3IHRob3NlIHN1Y2thcyFcbiAgICAgICAgZ2wuZHJhd0VsZW1lbnRzKGdsLlRSSUFOR0xFUywgYW1vdW50ICogNiwgZ2wuVU5TSUdORURfU0hPUlQsIDApO1xuICAgICAgICB0aGlzLnJlbmRlcmVyLmRyYXdDb3VudCsrO1xuICAgIH1cbn07XG5cbi8qKlxuICogQ3JlYXRlcyBvbmUgcGFydGljbGUgYnVmZmVyIGZvciBlYWNoIGNoaWxkIGluIHRoZSBjb250YWluZXIgd2Ugd2FudCB0byByZW5kZXIgYW5kIHVwZGF0ZXMgaW50ZXJuYWwgcHJvcGVydGllc1xuICpcbiAqIEBwYXJhbSBjb250YWluZXIge1BJWEkuUGFydGljbGVDb250YWluZXJ9IFRoZSBjb250YWluZXIgdG8gcmVuZGVyIHVzaW5nIHRoaXMgUGFydGljbGVSZW5kZXJlclxuICovXG5QYXJ0aWNsZVJlbmRlcmVyLnByb3RvdHlwZS5nZW5lcmF0ZUJ1ZmZlcnMgPSBmdW5jdGlvbiAoY29udGFpbmVyKVxue1xuICAgIHZhciBnbCA9IHRoaXMucmVuZGVyZXIuZ2wsXG4gICAgICAgIGJ1ZmZlcnMgPSBbXSxcbiAgICAgICAgc2l6ZSA9IGNvbnRhaW5lci5fbWF4U2l6ZSxcbiAgICAgICAgYmF0Y2hTaXplID0gY29udGFpbmVyLl9iYXRjaFNpemUsXG4gICAgICAgIGR5bmFtaWNQcm9wZXJ0eUZsYWdzID0gY29udGFpbmVyLl9wcm9wZXJ0aWVzLFxuICAgICAgICBpO1xuXG4gICAgZm9yIChpID0gMDsgaSA8IHNpemU7IGkgKz0gYmF0Y2hTaXplKVxuICAgIHtcbiAgICAgICAgYnVmZmVycy5wdXNoKG5ldyBQYXJ0aWNsZUJ1ZmZlcihnbCwgdGhpcy5wcm9wZXJ0aWVzLCBkeW5hbWljUHJvcGVydHlGbGFncywgYmF0Y2hTaXplKSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGJ1ZmZlcnM7XG59O1xuXG4vKipcbiAqIFVwbG9hZHMgdGhlIHZlcnRpY2llcy5cbiAqXG4gKiBAcGFyYW0gY2hpbGRyZW4ge1BJWEkuRGlzcGxheU9iamVjdFtdfSB0aGUgYXJyYXkgb2YgZGlzcGxheSBvYmplY3RzIHRvIHJlbmRlclxuICogQHBhcmFtIHN0YXJ0SW5kZXgge251bWJlcn0gdGhlIGluZGV4IHRvIHN0YXJ0IGZyb20gaW4gdGhlIGNoaWxkcmVuIGFycmF5XG4gKiBAcGFyYW0gYW1vdW50IHtudW1iZXJ9IHRoZSBhbW91bnQgb2YgY2hpbGRyZW4gdGhhdCB3aWxsIGhhdmUgdGhlaXIgdmVydGljZXMgdXBsb2FkZWRcbiAqIEBwYXJhbSBhcnJheSB7bnVtYmVyW119XG4gKiBAcGFyYW0gc3RyaWRlIHtudW1iZXJ9XG4gKiBAcGFyYW0gb2Zmc2V0IHtudW1iZXJ9XG4gKi9cblBhcnRpY2xlUmVuZGVyZXIucHJvdG90eXBlLnVwbG9hZFZlcnRpY2VzID0gZnVuY3Rpb24gKGNoaWxkcmVuLCBzdGFydEluZGV4LCBhbW91bnQsIGFycmF5LCBzdHJpZGUsIG9mZnNldClcbntcbiAgICB2YXIgc3ByaXRlLFxuICAgICAgICB0ZXh0dXJlLFxuICAgICAgICB0cmltLFxuICAgICAgICBzeCxcbiAgICAgICAgc3ksXG4gICAgICAgIHcwLCB3MSwgaDAsIGgxO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhbW91bnQ7IGkrKykge1xuXG4gICAgICAgIHNwcml0ZSA9IGNoaWxkcmVuW3N0YXJ0SW5kZXggKyBpXTtcbiAgICAgICAgdGV4dHVyZSA9IHNwcml0ZS5fdGV4dHVyZTtcbiAgICAgICAgc3ggPSBzcHJpdGUuc2NhbGUueDtcbiAgICAgICAgc3kgPSBzcHJpdGUuc2NhbGUueTtcblxuICAgICAgICBpZiAodGV4dHVyZS50cmltKVxuICAgICAgICB7XG4gICAgICAgICAgICAvLyBpZiB0aGUgc3ByaXRlIGlzIHRyaW1tZWQgdGhlbiB3ZSBuZWVkIHRvIGFkZCB0aGUgZXh0cmEgc3BhY2UgYmVmb3JlIHRyYW5zZm9ybWluZyB0aGUgc3ByaXRlIGNvb3Jkcy4uXG4gICAgICAgICAgICB0cmltID0gdGV4dHVyZS50cmltO1xuXG4gICAgICAgICAgICB3MSA9IHRyaW0ueCAtIHNwcml0ZS5hbmNob3IueCAqIHRyaW0ud2lkdGg7XG4gICAgICAgICAgICB3MCA9IHcxICsgdGV4dHVyZS5jcm9wLndpZHRoO1xuXG4gICAgICAgICAgICBoMSA9IHRyaW0ueSAtIHNwcml0ZS5hbmNob3IueSAqIHRyaW0uaGVpZ2h0O1xuICAgICAgICAgICAgaDAgPSBoMSArIHRleHR1cmUuY3JvcC5oZWlnaHQ7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgICB3MCA9ICh0ZXh0dXJlLl9mcmFtZS53aWR0aCApICogKDEtc3ByaXRlLmFuY2hvci54KTtcbiAgICAgICAgICAgIHcxID0gKHRleHR1cmUuX2ZyYW1lLndpZHRoICkgKiAtc3ByaXRlLmFuY2hvci54O1xuXG4gICAgICAgICAgICBoMCA9IHRleHR1cmUuX2ZyYW1lLmhlaWdodCAqICgxLXNwcml0ZS5hbmNob3IueSk7XG4gICAgICAgICAgICBoMSA9IHRleHR1cmUuX2ZyYW1lLmhlaWdodCAqIC1zcHJpdGUuYW5jaG9yLnk7XG4gICAgICAgIH1cblxuICAgICAgICBhcnJheVtvZmZzZXRdID0gdzEgKiBzeDtcbiAgICAgICAgYXJyYXlbb2Zmc2V0ICsgMV0gPSBoMSAqIHN5O1xuXG4gICAgICAgIGFycmF5W29mZnNldCArIHN0cmlkZV0gPSB3MCAqIHN4O1xuICAgICAgICBhcnJheVtvZmZzZXQgKyBzdHJpZGUgKyAxXSA9IGgxICogc3k7XG5cbiAgICAgICAgYXJyYXlbb2Zmc2V0ICsgc3RyaWRlICogMl0gPSB3MCAqIHN4O1xuICAgICAgICBhcnJheVtvZmZzZXQgKyBzdHJpZGUgKiAyICsgMV0gPSBoMCAqIHN5O1xuXG4gICAgICAgIGFycmF5W29mZnNldCArIHN0cmlkZSAqIDNdID0gdzEgKiBzeDtcbiAgICAgICAgYXJyYXlbb2Zmc2V0ICsgc3RyaWRlICogMyArIDFdID0gaDAgKiBzeTtcblxuICAgICAgICBvZmZzZXQgKz0gc3RyaWRlICogNDtcbiAgICB9XG5cbn07XG5cbi8qKlxuICpcbiAqIEBwYXJhbSBjaGlsZHJlbiB7UElYSS5EaXNwbGF5T2JqZWN0W119IHRoZSBhcnJheSBvZiBkaXNwbGF5IG9iamVjdHMgdG8gcmVuZGVyXG4gKiBAcGFyYW0gc3RhcnRJbmRleCB7bnVtYmVyfSB0aGUgaW5kZXggdG8gc3RhcnQgZnJvbSBpbiB0aGUgY2hpbGRyZW4gYXJyYXlcbiAqIEBwYXJhbSBhbW91bnQge251bWJlcn0gdGhlIGFtb3VudCBvZiBjaGlsZHJlbiB0aGF0IHdpbGwgaGF2ZSB0aGVpciBwb3NpdGlvbnMgdXBsb2FkZWRcbiAqIEBwYXJhbSBhcnJheSB7bnVtYmVyW119XG4gKiBAcGFyYW0gc3RyaWRlIHtudW1iZXJ9XG4gKiBAcGFyYW0gb2Zmc2V0IHtudW1iZXJ9XG4gKi9cblBhcnRpY2xlUmVuZGVyZXIucHJvdG90eXBlLnVwbG9hZFBvc2l0aW9uID0gZnVuY3Rpb24gKGNoaWxkcmVuLHN0YXJ0SW5kZXgsIGFtb3VudCwgYXJyYXksIHN0cmlkZSwgb2Zmc2V0KVxue1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYW1vdW50OyBpKyspXG4gICAge1xuICAgICAgICB2YXIgc3ByaXRlUG9zaXRpb24gPSBjaGlsZHJlbltzdGFydEluZGV4ICsgaV0ucG9zaXRpb247XG5cbiAgICAgICAgYXJyYXlbb2Zmc2V0XSA9IHNwcml0ZVBvc2l0aW9uLng7XG4gICAgICAgIGFycmF5W29mZnNldCArIDFdID0gc3ByaXRlUG9zaXRpb24ueTtcblxuICAgICAgICBhcnJheVtvZmZzZXQgKyBzdHJpZGVdID0gc3ByaXRlUG9zaXRpb24ueDtcbiAgICAgICAgYXJyYXlbb2Zmc2V0ICsgc3RyaWRlICsgMV0gPSBzcHJpdGVQb3NpdGlvbi55O1xuXG4gICAgICAgIGFycmF5W29mZnNldCArIHN0cmlkZSAqIDJdID0gc3ByaXRlUG9zaXRpb24ueDtcbiAgICAgICAgYXJyYXlbb2Zmc2V0ICsgc3RyaWRlICogMiArIDFdID0gc3ByaXRlUG9zaXRpb24ueTtcblxuICAgICAgICBhcnJheVtvZmZzZXQgKyBzdHJpZGUgKiAzXSA9IHNwcml0ZVBvc2l0aW9uLng7XG4gICAgICAgIGFycmF5W29mZnNldCArIHN0cmlkZSAqIDMgKyAxXSA9IHNwcml0ZVBvc2l0aW9uLnk7XG5cbiAgICAgICAgb2Zmc2V0ICs9IHN0cmlkZSAqIDQ7XG4gICAgfVxuXG59O1xuXG4vKipcbiAqXG4gKiBAcGFyYW0gY2hpbGRyZW4ge1BJWEkuRGlzcGxheU9iamVjdFtdfSB0aGUgYXJyYXkgb2YgZGlzcGxheSBvYmplY3RzIHRvIHJlbmRlclxuICogQHBhcmFtIHN0YXJ0SW5kZXgge251bWJlcn0gdGhlIGluZGV4IHRvIHN0YXJ0IGZyb20gaW4gdGhlIGNoaWxkcmVuIGFycmF5XG4gKiBAcGFyYW0gYW1vdW50IHtudW1iZXJ9IHRoZSBhbW91bnQgb2YgY2hpbGRyZW4gdGhhdCB3aWxsIGhhdmUgdGhlaXIgcm90YXRpb24gdXBsb2FkZWRcbiAqIEBwYXJhbSBhcnJheSB7bnVtYmVyW119XG4gKiBAcGFyYW0gc3RyaWRlIHtudW1iZXJ9XG4gKiBAcGFyYW0gb2Zmc2V0IHtudW1iZXJ9XG4gKi9cblBhcnRpY2xlUmVuZGVyZXIucHJvdG90eXBlLnVwbG9hZFJvdGF0aW9uID0gZnVuY3Rpb24gKGNoaWxkcmVuLHN0YXJ0SW5kZXgsIGFtb3VudCwgYXJyYXksIHN0cmlkZSwgb2Zmc2V0KVxue1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYW1vdW50OyBpKyspXG4gICAge1xuICAgICAgICB2YXIgc3ByaXRlUm90YXRpb24gPSBjaGlsZHJlbltzdGFydEluZGV4ICsgaV0ucm90YXRpb247XG5cblxuICAgICAgICBhcnJheVtvZmZzZXRdID0gc3ByaXRlUm90YXRpb247XG4gICAgICAgIGFycmF5W29mZnNldCArIHN0cmlkZV0gPSBzcHJpdGVSb3RhdGlvbjtcbiAgICAgICAgYXJyYXlbb2Zmc2V0ICsgc3RyaWRlICogMl0gPSBzcHJpdGVSb3RhdGlvbjtcbiAgICAgICAgYXJyYXlbb2Zmc2V0ICsgc3RyaWRlICogM10gPSBzcHJpdGVSb3RhdGlvbjtcblxuICAgICAgICBvZmZzZXQgKz0gc3RyaWRlICogNDtcbiAgICB9XG59O1xuXG4vKipcbiAqXG4gKiBAcGFyYW0gY2hpbGRyZW4ge1BJWEkuRGlzcGxheU9iamVjdFtdfSB0aGUgYXJyYXkgb2YgZGlzcGxheSBvYmplY3RzIHRvIHJlbmRlclxuICogQHBhcmFtIHN0YXJ0SW5kZXgge251bWJlcn0gdGhlIGluZGV4IHRvIHN0YXJ0IGZyb20gaW4gdGhlIGNoaWxkcmVuIGFycmF5XG4gKiBAcGFyYW0gYW1vdW50IHtudW1iZXJ9IHRoZSBhbW91bnQgb2YgY2hpbGRyZW4gdGhhdCB3aWxsIGhhdmUgdGhlaXIgVXZzIHVwbG9hZGVkXG4gKiBAcGFyYW0gYXJyYXkge251bWJlcltdfVxuICogQHBhcmFtIHN0cmlkZSB7bnVtYmVyfVxuICogQHBhcmFtIG9mZnNldCB7bnVtYmVyfVxuICovXG5QYXJ0aWNsZVJlbmRlcmVyLnByb3RvdHlwZS51cGxvYWRVdnMgPSBmdW5jdGlvbiAoY2hpbGRyZW4sc3RhcnRJbmRleCwgYW1vdW50LCBhcnJheSwgc3RyaWRlLCBvZmZzZXQpXG57XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhbW91bnQ7IGkrKylcbiAgICB7XG4gICAgICAgIHZhciB0ZXh0dXJlVXZzID0gY2hpbGRyZW5bc3RhcnRJbmRleCArIGldLl90ZXh0dXJlLl91dnM7XG5cbiAgICAgICAgaWYgKHRleHR1cmVVdnMpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGFycmF5W29mZnNldF0gPSB0ZXh0dXJlVXZzLngwO1xuICAgICAgICAgICAgYXJyYXlbb2Zmc2V0ICsgMV0gPSB0ZXh0dXJlVXZzLnkwO1xuXG4gICAgICAgICAgICBhcnJheVtvZmZzZXQgKyBzdHJpZGVdID0gdGV4dHVyZVV2cy54MTtcbiAgICAgICAgICAgIGFycmF5W29mZnNldCArIHN0cmlkZSArIDFdID0gdGV4dHVyZVV2cy55MTtcblxuICAgICAgICAgICAgYXJyYXlbb2Zmc2V0ICsgc3RyaWRlICogMl0gPSB0ZXh0dXJlVXZzLngyO1xuICAgICAgICAgICAgYXJyYXlbb2Zmc2V0ICsgc3RyaWRlICogMiArIDFdID0gdGV4dHVyZVV2cy55MjtcblxuICAgICAgICAgICAgYXJyYXlbb2Zmc2V0ICsgc3RyaWRlICogM10gPSB0ZXh0dXJlVXZzLngzO1xuICAgICAgICAgICAgYXJyYXlbb2Zmc2V0ICsgc3RyaWRlICogMyArIDFdID0gdGV4dHVyZVV2cy55MztcblxuICAgICAgICAgICAgb2Zmc2V0ICs9IHN0cmlkZSAqIDQ7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgICAvL1RPRE8geW91IGtub3cgdGhpcyBjYW4gYmUgZWFzaWVyIVxuICAgICAgICAgICAgYXJyYXlbb2Zmc2V0XSA9IDA7XG4gICAgICAgICAgICBhcnJheVtvZmZzZXQgKyAxXSA9IDA7XG5cbiAgICAgICAgICAgIGFycmF5W29mZnNldCArIHN0cmlkZV0gPSAwO1xuICAgICAgICAgICAgYXJyYXlbb2Zmc2V0ICsgc3RyaWRlICsgMV0gPSAwO1xuXG4gICAgICAgICAgICBhcnJheVtvZmZzZXQgKyBzdHJpZGUgKiAyXSA9IDA7XG4gICAgICAgICAgICBhcnJheVtvZmZzZXQgKyBzdHJpZGUgKiAyICsgMV0gPSAwO1xuXG4gICAgICAgICAgICBhcnJheVtvZmZzZXQgKyBzdHJpZGUgKiAzXSA9IDA7XG4gICAgICAgICAgICBhcnJheVtvZmZzZXQgKyBzdHJpZGUgKiAzICsgMV0gPSAwO1xuXG4gICAgICAgICAgICBvZmZzZXQgKz0gc3RyaWRlICogNDtcbiAgICAgICAgfVxuICAgIH1cbn07XG5cbi8qKlxuICpcbiAqIEBwYXJhbSBjaGlsZHJlbiB7UElYSS5EaXNwbGF5T2JqZWN0W119IHRoZSBhcnJheSBvZiBkaXNwbGF5IG9iamVjdHMgdG8gcmVuZGVyXG4gKiBAcGFyYW0gc3RhcnRJbmRleCB7bnVtYmVyfSB0aGUgaW5kZXggdG8gc3RhcnQgZnJvbSBpbiB0aGUgY2hpbGRyZW4gYXJyYXlcbiAqIEBwYXJhbSBhbW91bnQge251bWJlcn0gdGhlIGFtb3VudCBvZiBjaGlsZHJlbiB0aGF0IHdpbGwgaGF2ZSB0aGVpciBhbHBoYSB1cGxvYWRlZFxuICogQHBhcmFtIGFycmF5IHtudW1iZXJbXX1cbiAqIEBwYXJhbSBzdHJpZGUge251bWJlcn1cbiAqIEBwYXJhbSBvZmZzZXQge251bWJlcn1cbiAqL1xuUGFydGljbGVSZW5kZXJlci5wcm90b3R5cGUudXBsb2FkQWxwaGEgPSBmdW5jdGlvbiAoY2hpbGRyZW4sc3RhcnRJbmRleCwgYW1vdW50LCBhcnJheSwgc3RyaWRlLCBvZmZzZXQpXG57XG4gICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYW1vdW50OyBpKyspXG4gICAgIHtcbiAgICAgICAgdmFyIHNwcml0ZUFscGhhID0gY2hpbGRyZW5bc3RhcnRJbmRleCArIGldLmFscGhhO1xuXG4gICAgICAgIGFycmF5W29mZnNldF0gPSBzcHJpdGVBbHBoYTtcbiAgICAgICAgYXJyYXlbb2Zmc2V0ICsgc3RyaWRlXSA9IHNwcml0ZUFscGhhO1xuICAgICAgICBhcnJheVtvZmZzZXQgKyBzdHJpZGUgKiAyXSA9IHNwcml0ZUFscGhhO1xuICAgICAgICBhcnJheVtvZmZzZXQgKyBzdHJpZGUgKiAzXSA9IHNwcml0ZUFscGhhO1xuXG4gICAgICAgIG9mZnNldCArPSBzdHJpZGUgKiA0O1xuICAgIH1cbn07XG5cblxuLyoqXG4gKiBEZXN0cm95cyB0aGUgUGFydGljbGVSZW5kZXJlci5cbiAqXG4gKi9cblBhcnRpY2xlUmVuZGVyZXIucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoKVxue1xuICAgIGlmICh0aGlzLnJlbmRlcmVyLmdsKSB7XG4gICAgICAgIHRoaXMucmVuZGVyZXIuZ2wuZGVsZXRlQnVmZmVyKHRoaXMuaW5kZXhCdWZmZXIpO1xuICAgIH1cblxuICAgIE9iamVjdFJlbmRlcmVyLnByb3RvdHlwZS5kZXN0cm95LmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG5cbiAgICB0aGlzLnNoYWRlci5kZXN0cm95KCk7XG5cbiAgICB0aGlzLmluZGljZXMgPSBudWxsO1xuICAgIHRoaXMudGVtcE1hdHJpeCA9IG51bGw7XG59O1xuIiwidmFyIFRleHR1cmVTaGFkZXIgPSByZXF1aXJlKCcuLi8uLi9yZW5kZXJlcnMvd2ViZ2wvc2hhZGVycy9UZXh0dXJlU2hhZGVyJyk7XG5cbi8qKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLlRleHR1cmVTaGFkZXJcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gc2hhZGVyTWFuYWdlciB7U2hhZGVyTWFuYWdlcn0gVGhlIHdlYmdsIHNoYWRlciBtYW5hZ2VyIHRoaXMgc2hhZGVyIHdvcmtzIGZvci5cbiAqL1xuZnVuY3Rpb24gUGFydGljbGVTaGFkZXIoc2hhZGVyTWFuYWdlcilcbntcbiAgICBUZXh0dXJlU2hhZGVyLmNhbGwodGhpcyxcbiAgICAgICAgc2hhZGVyTWFuYWdlcixcbiAgICAgICAgLy8gdmVydGV4IHNoYWRlclxuICAgICAgICBbXG4gICAgICAgICAgICAnYXR0cmlidXRlIHZlYzIgYVZlcnRleFBvc2l0aW9uOycsXG4gICAgICAgICAgICAnYXR0cmlidXRlIHZlYzIgYVRleHR1cmVDb29yZDsnLFxuICAgICAgICAgICAgJ2F0dHJpYnV0ZSBmbG9hdCBhQ29sb3I7JyxcblxuICAgICAgICAgICAgJ2F0dHJpYnV0ZSB2ZWMyIGFQb3NpdGlvbkNvb3JkOycsXG4gICAgICAgICAgICAnYXR0cmlidXRlIHZlYzIgYVNjYWxlOycsXG4gICAgICAgICAgICAnYXR0cmlidXRlIGZsb2F0IGFSb3RhdGlvbjsnLFxuXG4gICAgICAgICAgICAndW5pZm9ybSBtYXQzIHByb2plY3Rpb25NYXRyaXg7JyxcblxuICAgICAgICAgICAgJ3ZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkOycsXG4gICAgICAgICAgICAndmFyeWluZyBmbG9hdCB2Q29sb3I7JyxcblxuICAgICAgICAgICAgJ3ZvaWQgbWFpbih2b2lkKXsnLFxuICAgICAgICAgICAgJyAgIHZlYzIgdiA9IGFWZXJ0ZXhQb3NpdGlvbjsnLFxuXG4gICAgICAgICAgICAnICAgdi54ID0gKGFWZXJ0ZXhQb3NpdGlvbi54KSAqIGNvcyhhUm90YXRpb24pIC0gKGFWZXJ0ZXhQb3NpdGlvbi55KSAqIHNpbihhUm90YXRpb24pOycsXG4gICAgICAgICAgICAnICAgdi55ID0gKGFWZXJ0ZXhQb3NpdGlvbi54KSAqIHNpbihhUm90YXRpb24pICsgKGFWZXJ0ZXhQb3NpdGlvbi55KSAqIGNvcyhhUm90YXRpb24pOycsXG4gICAgICAgICAgICAnICAgdiA9IHYgKyBhUG9zaXRpb25Db29yZDsnLFxuXG4gICAgICAgICAgICAnICAgZ2xfUG9zaXRpb24gPSB2ZWM0KChwcm9qZWN0aW9uTWF0cml4ICogdmVjMyh2LCAxLjApKS54eSwgMC4wLCAxLjApOycsXG5cbiAgICAgICAgICAgICcgICB2VGV4dHVyZUNvb3JkID0gYVRleHR1cmVDb29yZDsnLFxuICAgICAgICAgICAgJyAgIHZDb2xvciA9IGFDb2xvcjsnLFxuICAgICAgICAgICAgJ30nXG4gICAgICAgIF0uam9pbignXFxuJyksXG4gICAgICAgIC8vIGhlbGxvXG4gICAgICAgICBbXG4gICAgICAgICAgICAncHJlY2lzaW9uIGxvd3AgZmxvYXQ7JyxcblxuICAgICAgICAgICAgJ3ZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkOycsXG4gICAgICAgICAgICAndmFyeWluZyBmbG9hdCB2Q29sb3I7JyxcblxuICAgICAgICAgICAgJ3VuaWZvcm0gc2FtcGxlcjJEIHVTYW1wbGVyOycsXG4gICAgICAgICAgICAndW5pZm9ybSBmbG9hdCB1QWxwaGE7JyxcblxuICAgICAgICAgICAgJ3ZvaWQgbWFpbih2b2lkKXsnLFxuICAgICAgICAgICAgJyAgdmVjNCBjb2xvciA9IHRleHR1cmUyRCh1U2FtcGxlciwgdlRleHR1cmVDb29yZCkgKiB2Q29sb3IgKiB1QWxwaGE7JyxcbiAgICAgICAgICAgICcgIGlmIChjb2xvci5hID09IDAuMCkgZGlzY2FyZDsnLFxuICAgICAgICAgICAgJyAgZ2xfRnJhZ0NvbG9yID0gY29sb3I7JyxcbiAgICAgICAgICAgICd9J1xuICAgICAgICBdLmpvaW4oJ1xcbicpLFxuICAgICAgICAvLyBjdXN0b20gdW5pZm9ybXNcbiAgICAgICAge1xuICAgICAgICAgICAgdUFscGhhOiAgeyB0eXBlOiAnMWYnLCB2YWx1ZTogMSB9XG4gICAgICAgIH0sXG4gICAgICAgIC8vIGN1c3RvbSBhdHRyaWJ1dGVzXG4gICAgICAgIHtcbiAgICAgICAgICAgIGFQb3NpdGlvbkNvb3JkOiAwLFxuICAgICAgICAgICAvLyBhU2NhbGU6ICAgICAgICAgMCxcbiAgICAgICAgICAgIGFSb3RhdGlvbjogICAgICAwXG4gICAgICAgIH1cbiAgICApO1xuXG4gICAgLy8gVEVNUCBIQUNLXG5cbn1cblxuUGFydGljbGVTaGFkZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShUZXh0dXJlU2hhZGVyLnByb3RvdHlwZSk7XG5QYXJ0aWNsZVNoYWRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBQYXJ0aWNsZVNoYWRlcjtcblxubW9kdWxlLmV4cG9ydHMgPSBQYXJ0aWNsZVNoYWRlcjtcbiIsInZhciB1dGlscyA9IHJlcXVpcmUoJy4uL3V0aWxzJyksXG4gICAgbWF0aCA9IHJlcXVpcmUoJy4uL21hdGgnKSxcbiAgICBDT05TVCA9IHJlcXVpcmUoJy4uL2NvbnN0JyksXG4gICAgRXZlbnRFbWl0dGVyID0gcmVxdWlyZSgnZXZlbnRlbWl0dGVyMycpO1xuXG4vKipcbiAqIFRoZSBDYW52YXNSZW5kZXJlciBkcmF3cyB0aGUgc2NlbmUgYW5kIGFsbCBpdHMgY29udGVudCBvbnRvIGEgMmQgY2FudmFzLiBUaGlzIHJlbmRlcmVyIHNob3VsZCBiZSB1c2VkIGZvciBicm93c2VycyB0aGF0IGRvIG5vdCBzdXBwb3J0IHdlYkdMLlxuICogRG9uJ3QgZm9yZ2V0IHRvIGFkZCB0aGUgQ2FudmFzUmVuZGVyZXIudmlldyB0byB5b3VyIERPTSBvciB5b3Ugd2lsbCBub3Qgc2VlIGFueXRoaW5nIDopXG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIHN5c3RlbSB7c3RyaW5nfSBUaGUgbmFtZSBvZiB0aGUgc3lzdGVtIHRoaXMgcmVuZGVyZXIgaXMgZm9yLlxuICogQHBhcmFtIFt3aWR0aD04MDBdIHtudW1iZXJ9IHRoZSB3aWR0aCBvZiB0aGUgY2FudmFzIHZpZXdcbiAqIEBwYXJhbSBbaGVpZ2h0PTYwMF0ge251bWJlcn0gdGhlIGhlaWdodCBvZiB0aGUgY2FudmFzIHZpZXdcbiAqIEBwYXJhbSBbb3B0aW9uc10ge29iamVjdH0gVGhlIG9wdGlvbmFsIHJlbmRlcmVyIHBhcmFtZXRlcnNcbiAqIEBwYXJhbSBbb3B0aW9ucy52aWV3XSB7SFRNTENhbnZhc0VsZW1lbnR9IHRoZSBjYW52YXMgdG8gdXNlIGFzIGEgdmlldywgb3B0aW9uYWxcbiAqIEBwYXJhbSBbb3B0aW9ucy50cmFuc3BhcmVudD1mYWxzZV0ge2Jvb2xlYW59IElmIHRoZSByZW5kZXIgdmlldyBpcyB0cmFuc3BhcmVudCwgZGVmYXVsdCBmYWxzZVxuICogQHBhcmFtIFtvcHRpb25zLmF1dG9SZXNpemU9ZmFsc2VdIHtib29sZWFufSBJZiB0aGUgcmVuZGVyIHZpZXcgaXMgYXV0b21hdGljYWxseSByZXNpemVkLCBkZWZhdWx0IGZhbHNlXG4gKiBAcGFyYW0gW29wdGlvbnMuYW50aWFsaWFzPWZhbHNlXSB7Ym9vbGVhbn0gc2V0cyBhbnRpYWxpYXMgKG9ubHkgYXBwbGljYWJsZSBpbiBjaHJvbWUgYXQgdGhlIG1vbWVudClcbiAqIEBwYXJhbSBbb3B0aW9ucy5yZXNvbHV0aW9uPTFdIHtudW1iZXJ9IHRoZSByZXNvbHV0aW9uIG9mIHRoZSByZW5kZXJlciByZXRpbmEgd291bGQgYmUgMlxuICogQHBhcmFtIFtvcHRpb25zLmNsZWFyQmVmb3JlUmVuZGVyPXRydWVdIHtib29sZWFufSBUaGlzIHNldHMgaWYgdGhlIENhbnZhc1JlbmRlcmVyIHdpbGwgY2xlYXIgdGhlIGNhbnZhcyBvclxuICogICAgICBub3QgYmVmb3JlIHRoZSBuZXcgcmVuZGVyIHBhc3MuXG4gKiBAcGFyYW0gW29wdGlvbnMuYmFja2dyb3VuZENvbG9yPTB4MDAwMDAwXSB7bnVtYmVyfSBUaGUgYmFja2dyb3VuZCBjb2xvciBvZiB0aGUgcmVuZGVyZWQgYXJlYSAoc2hvd24gaWYgbm90IHRyYW5zcGFyZW50KS5cbiAqIEBwYXJhbSBbb3B0aW9ucy5yb3VuZFBpeGVscz1mYWxzZV0ge2Jvb2xlYW59IElmIHRydWUgUGl4aSB3aWxsIE1hdGguZmxvb3IoKSB4L3kgdmFsdWVzIHdoZW4gcmVuZGVyaW5nLCBzdG9wcGluZyBwaXhlbCBpbnRlcnBvbGF0aW9uLlxuICovXG5mdW5jdGlvbiBTeXN0ZW1SZW5kZXJlcihzeXN0ZW0sIHdpZHRoLCBoZWlnaHQsIG9wdGlvbnMpXG57XG4gICAgRXZlbnRFbWl0dGVyLmNhbGwodGhpcyk7XG5cbiAgICB1dGlscy5zYXlIZWxsbyhzeXN0ZW0pO1xuXG4gICAgLy8gcHJlcGFyZSBvcHRpb25zXG4gICAgaWYgKG9wdGlvbnMpXG4gICAge1xuICAgICAgICBmb3IgKHZhciBpIGluIENPTlNULkRFRkFVTFRfUkVOREVSX09QVElPTlMpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGlmICh0eXBlb2Ygb3B0aW9uc1tpXSA9PT0gJ3VuZGVmaW5lZCcpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgb3B0aW9uc1tpXSA9IENPTlNULkRFRkFVTFRfUkVOREVSX09QVElPTlNbaV07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgb3B0aW9ucyA9IENPTlNULkRFRkFVTFRfUkVOREVSX09QVElPTlM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhlIHR5cGUgb2YgdGhlIHJlbmRlcmVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IFBJWEkuUkVOREVSRVJfVFlQRS5VTktOT1dOXG4gICAgICogQHNlZSBQSVhJLlJFTkRFUkVSX1RZUEVcbiAgICAgKi9cbiAgICB0aGlzLnR5cGUgPSBDT05TVC5SRU5ERVJFUl9UWVBFLlVOS05PV047XG5cbiAgICAvKipcbiAgICAgKiBUaGUgd2lkdGggb2YgdGhlIGNhbnZhcyB2aWV3XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgODAwXG4gICAgICovXG4gICAgdGhpcy53aWR0aCA9IHdpZHRoIHx8IDgwMDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBoZWlnaHQgb2YgdGhlIGNhbnZhcyB2aWV3XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgNjAwXG4gICAgICovXG4gICAgdGhpcy5oZWlnaHQgPSBoZWlnaHQgfHwgNjAwO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGNhbnZhcyBlbGVtZW50IHRoYXQgZXZlcnl0aGluZyBpcyBkcmF3biB0b1xuICAgICAqXG4gICAgICogQG1lbWJlciB7SFRNTENhbnZhc0VsZW1lbnR9XG4gICAgICovXG4gICAgdGhpcy52aWV3ID0gb3B0aW9ucy52aWV3IHx8IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NhbnZhcycpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHJlc29sdXRpb24gb2YgdGhlIHJlbmRlcmVyXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMVxuICAgICAqL1xuICAgIHRoaXMucmVzb2x1dGlvbiA9IG9wdGlvbnMucmVzb2x1dGlvbjtcblxuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgdGhlIHJlbmRlciB2aWV3IGlzIHRyYW5zcGFyZW50XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqL1xuICAgIHRoaXMudHJhbnNwYXJlbnQgPSBvcHRpb25zLnRyYW5zcGFyZW50O1xuXG4gICAgLyoqXG4gICAgICogV2hldGhlciB0aGUgcmVuZGVyIHZpZXcgc2hvdWxkIGJlIHJlc2l6ZWQgYXV0b21hdGljYWxseVxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKi9cbiAgICB0aGlzLmF1dG9SZXNpemUgPSBvcHRpb25zLmF1dG9SZXNpemUgfHwgZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBUcmFja3MgdGhlIGJsZW5kIG1vZGVzIHVzZWZ1bCBmb3IgdGhpcyByZW5kZXJlci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge29iamVjdDxzdHJpbmcsIG1peGVkPn1cbiAgICAgKi9cbiAgICB0aGlzLmJsZW5kTW9kZXMgPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHZhbHVlIG9mIHRoZSBwcmVzZXJ2ZURyYXdpbmdCdWZmZXIgZmxhZyBhZmZlY3RzIHdoZXRoZXIgb3Igbm90IHRoZSBjb250ZW50cyBvZiB0aGUgc3RlbmNpbCBidWZmZXIgaXMgcmV0YWluZWQgYWZ0ZXIgcmVuZGVyaW5nLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKi9cbiAgICB0aGlzLnByZXNlcnZlRHJhd2luZ0J1ZmZlciA9IG9wdGlvbnMucHJlc2VydmVEcmF3aW5nQnVmZmVyO1xuXG4gICAgLyoqXG4gICAgICogVGhpcyBzZXRzIGlmIHRoZSBDYW52YXNSZW5kZXJlciB3aWxsIGNsZWFyIHRoZSBjYW52YXMgb3Igbm90IGJlZm9yZSB0aGUgbmV3IHJlbmRlciBwYXNzLlxuICAgICAqIElmIHRoZSBzY2VuZSBpcyBOT1QgdHJhbnNwYXJlbnQgUGl4aSB3aWxsIHVzZSBhIGNhbnZhcyBzaXplZCBmaWxsUmVjdCBvcGVyYXRpb24gZXZlcnkgZnJhbWUgdG8gc2V0IHRoZSBjYW52YXMgYmFja2dyb3VuZCBjb2xvci5cbiAgICAgKiBJZiB0aGUgc2NlbmUgaXMgdHJhbnNwYXJlbnQgUGl4aSB3aWxsIHVzZSBjbGVhclJlY3QgdG8gY2xlYXIgdGhlIGNhbnZhcyBldmVyeSBmcmFtZS5cbiAgICAgKiBEaXNhYmxlIHRoaXMgYnkgc2V0dGluZyB0aGlzIHRvIGZhbHNlLiBGb3IgZXhhbXBsZSBpZiB5b3VyIGdhbWUgaGFzIGEgY2FudmFzIGZpbGxpbmcgYmFja2dyb3VuZCBpbWFnZSB5b3Ugb2Z0ZW4gZG9uJ3QgbmVlZCB0aGlzIHNldC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICogQGRlZmF1bHRcbiAgICAgKi9cbiAgICB0aGlzLmNsZWFyQmVmb3JlUmVuZGVyID0gb3B0aW9ucy5jbGVhckJlZm9yZVJlbmRlcjtcblxuICAgIC8qKlxuICAgICAqIElmIHRydWUgUGl4aSB3aWxsIE1hdGguZmxvb3IoKSB4L3kgdmFsdWVzIHdoZW4gcmVuZGVyaW5nLCBzdG9wcGluZyBwaXhlbCBpbnRlcnBvbGF0aW9uLlxuICAgICAqIEhhbmR5IGZvciBjcmlzcCBwaXhlbCBhcnQgYW5kIHNwZWVkIG9uIGxlZ2FjeSBkZXZpY2VzLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKi9cbiAgICB0aGlzLnJvdW5kUGl4ZWxzID0gb3B0aW9ucy5yb3VuZFBpeGVscztcblxuICAgIC8qKlxuICAgICAqIFRoZSBiYWNrZ3JvdW5kIGNvbG9yIGFzIGEgbnVtYmVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fYmFja2dyb3VuZENvbG9yID0gMHgwMDAwMDA7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYmFja2dyb3VuZCBjb2xvciBhcyBhbiBbUiwgRywgQl0gYXJyYXkuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJbXX1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX2JhY2tncm91bmRDb2xvclJnYmEgPSBbMCwgMCwgMCwgMF07XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYmFja2dyb3VuZCBjb2xvciBhcyBhIHN0cmluZy5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge3N0cmluZ31cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX2JhY2tncm91bmRDb2xvclN0cmluZyA9ICcjMDAwMDAwJztcblxuICAgIHRoaXMuYmFja2dyb3VuZENvbG9yID0gb3B0aW9ucy5iYWNrZ3JvdW5kQ29sb3IgfHwgdGhpcy5fYmFja2dyb3VuZENvbG9yOyAvLyBydW4gYmcgY29sb3Igc2V0dGVyXG5cbiAgICAvKipcbiAgICAgKiBUaGlzIHRlbXBvcmFyeSBkaXNwbGF5IG9iamVjdCB1c2VkIGFzIHRoZSBwYXJlbnQgb2YgdGhlIGN1cnJlbnRseSBiZWluZyByZW5kZXJlZCBpdGVtXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLkRpc3BsYXlPYmplY3R9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl90ZW1wRGlzcGxheU9iamVjdFBhcmVudCA9IHt3b3JsZFRyYW5zZm9ybTpuZXcgbWF0aC5NYXRyaXgoKSwgd29ybGRBbHBoYToxLCBjaGlsZHJlbjpbXX07XG5cbiAgICAvKipcbiAgICAgKiBUaGUgbGFzdCByb290IG9iamVjdCB0aGF0IHRoZSByZW5kZXJlciB0cmllZCB0byByZW5kZXIuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLkRpc3BsYXlPYmplY3R9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9sYXN0T2JqZWN0UmVuZGVyZWQgPSB0aGlzLl90ZW1wRGlzcGxheU9iamVjdFBhcmVudDtcbn1cblxuLy8gY29uc3RydWN0b3JcblN5c3RlbVJlbmRlcmVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoRXZlbnRFbWl0dGVyLnByb3RvdHlwZSk7XG5TeXN0ZW1SZW5kZXJlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBTeXN0ZW1SZW5kZXJlcjtcbm1vZHVsZS5leHBvcnRzID0gU3lzdGVtUmVuZGVyZXI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKFN5c3RlbVJlbmRlcmVyLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFRoZSBiYWNrZ3JvdW5kIGNvbG9yIHRvIGZpbGwgaWYgbm90IHRyYW5zcGFyZW50XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuU3lzdGVtUmVuZGVyZXIjXG4gICAgICovXG4gICAgYmFja2dyb3VuZENvbG9yOlxuICAgIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fYmFja2dyb3VuZENvbG9yO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWwpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuX2JhY2tncm91bmRDb2xvciA9IHZhbDtcbiAgICAgICAgICAgIHRoaXMuX2JhY2tncm91bmRDb2xvclN0cmluZyA9IHV0aWxzLmhleDJzdHJpbmcodmFsKTtcbiAgICAgICAgICAgIHV0aWxzLmhleDJyZ2IodmFsLCB0aGlzLl9iYWNrZ3JvdW5kQ29sb3JSZ2JhKTtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuXG4vKipcbiAqIFJlc2l6ZXMgdGhlIGNhbnZhcyB2aWV3IHRvIHRoZSBzcGVjaWZpZWQgd2lkdGggYW5kIGhlaWdodFxuICpcbiAqIEBwYXJhbSB3aWR0aCB7bnVtYmVyfSB0aGUgbmV3IHdpZHRoIG9mIHRoZSBjYW52YXMgdmlld1xuICogQHBhcmFtIGhlaWdodCB7bnVtYmVyfSB0aGUgbmV3IGhlaWdodCBvZiB0aGUgY2FudmFzIHZpZXdcbiAqL1xuU3lzdGVtUmVuZGVyZXIucHJvdG90eXBlLnJlc2l6ZSA9IGZ1bmN0aW9uICh3aWR0aCwgaGVpZ2h0KSB7XG4gICAgdGhpcy53aWR0aCA9IHdpZHRoICogdGhpcy5yZXNvbHV0aW9uO1xuICAgIHRoaXMuaGVpZ2h0ID0gaGVpZ2h0ICogdGhpcy5yZXNvbHV0aW9uO1xuXG4gICAgdGhpcy52aWV3LndpZHRoID0gdGhpcy53aWR0aDtcbiAgICB0aGlzLnZpZXcuaGVpZ2h0ID0gdGhpcy5oZWlnaHQ7XG5cbiAgICBpZiAodGhpcy5hdXRvUmVzaXplKVxuICAgIHtcbiAgICAgICAgdGhpcy52aWV3LnN0eWxlLndpZHRoID0gdGhpcy53aWR0aCAvIHRoaXMucmVzb2x1dGlvbiArICdweCc7XG4gICAgICAgIHRoaXMudmlldy5zdHlsZS5oZWlnaHQgPSB0aGlzLmhlaWdodCAvIHRoaXMucmVzb2x1dGlvbiArICdweCc7XG4gICAgfVxufTtcblxuLyoqXG4gKiBSZW1vdmVzIGV2ZXJ5dGhpbmcgZnJvbSB0aGUgcmVuZGVyZXIgYW5kIG9wdGlvbmFsbHkgcmVtb3ZlcyB0aGUgQ2FudmFzIERPTSBlbGVtZW50LlxuICpcbiAqIEBwYXJhbSBbcmVtb3ZlVmlldz1mYWxzZV0ge2Jvb2xlYW59IFJlbW92ZXMgdGhlIENhbnZhcyBlbGVtZW50IGZyb20gdGhlIERPTS5cbiAqL1xuU3lzdGVtUmVuZGVyZXIucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAocmVtb3ZlVmlldykge1xuICAgIGlmIChyZW1vdmVWaWV3ICYmIHRoaXMudmlldy5wYXJlbnROb2RlKVxuICAgIHtcbiAgICAgICAgdGhpcy52aWV3LnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodGhpcy52aWV3KTtcbiAgICB9XG5cbiAgICB0aGlzLnR5cGUgPSBDT05TVC5SRU5ERVJFUl9UWVBFLlVOS05PV047XG5cbiAgICB0aGlzLndpZHRoID0gMDtcbiAgICB0aGlzLmhlaWdodCA9IDA7XG5cbiAgICB0aGlzLnZpZXcgPSBudWxsO1xuXG4gICAgdGhpcy5yZXNvbHV0aW9uID0gMDtcblxuICAgIHRoaXMudHJhbnNwYXJlbnQgPSBmYWxzZTtcblxuICAgIHRoaXMuYXV0b1Jlc2l6ZSA9IGZhbHNlO1xuXG4gICAgdGhpcy5ibGVuZE1vZGVzID0gbnVsbDtcblxuICAgIHRoaXMucHJlc2VydmVEcmF3aW5nQnVmZmVyID0gZmFsc2U7XG4gICAgdGhpcy5jbGVhckJlZm9yZVJlbmRlciA9IGZhbHNlO1xuXG4gICAgdGhpcy5yb3VuZFBpeGVscyA9IGZhbHNlO1xuXG4gICAgdGhpcy5fYmFja2dyb3VuZENvbG9yID0gMDtcbiAgICB0aGlzLl9iYWNrZ3JvdW5kQ29sb3JSZ2JhID0gbnVsbDtcbiAgICB0aGlzLl9iYWNrZ3JvdW5kQ29sb3JTdHJpbmcgPSBudWxsO1xufTtcbiIsInZhciBTeXN0ZW1SZW5kZXJlciA9IHJlcXVpcmUoJy4uL1N5c3RlbVJlbmRlcmVyJyksXG4gICAgQ2FudmFzTWFza01hbmFnZXIgPSByZXF1aXJlKCcuL3V0aWxzL0NhbnZhc01hc2tNYW5hZ2VyJyksXG4gICAgdXRpbHMgPSByZXF1aXJlKCcuLi8uLi91dGlscycpLFxuICAgIG1hdGggPSByZXF1aXJlKCcuLi8uLi9tYXRoJyksXG4gICAgQ09OU1QgPSByZXF1aXJlKCcuLi8uLi9jb25zdCcpO1xuXG4vKipcbiAqIFRoZSBDYW52YXNSZW5kZXJlciBkcmF3cyB0aGUgc2NlbmUgYW5kIGFsbCBpdHMgY29udGVudCBvbnRvIGEgMmQgY2FudmFzLiBUaGlzIHJlbmRlcmVyIHNob3VsZCBiZSB1c2VkIGZvciBicm93c2VycyB0aGF0IGRvIG5vdCBzdXBwb3J0IHdlYkdMLlxuICogRG9uJ3QgZm9yZ2V0IHRvIGFkZCB0aGUgQ2FudmFzUmVuZGVyZXIudmlldyB0byB5b3VyIERPTSBvciB5b3Ugd2lsbCBub3Qgc2VlIGFueXRoaW5nIDopXG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQGV4dGVuZHMgUElYSS5TeXN0ZW1SZW5kZXJlclxuICogQHBhcmFtIFt3aWR0aD04MDBdIHtudW1iZXJ9IHRoZSB3aWR0aCBvZiB0aGUgY2FudmFzIHZpZXdcbiAqIEBwYXJhbSBbaGVpZ2h0PTYwMF0ge251bWJlcn0gdGhlIGhlaWdodCBvZiB0aGUgY2FudmFzIHZpZXdcbiAqIEBwYXJhbSBbb3B0aW9uc10ge29iamVjdH0gVGhlIG9wdGlvbmFsIHJlbmRlcmVyIHBhcmFtZXRlcnNcbiAqIEBwYXJhbSBbb3B0aW9ucy52aWV3XSB7SFRNTENhbnZhc0VsZW1lbnR9IHRoZSBjYW52YXMgdG8gdXNlIGFzIGEgdmlldywgb3B0aW9uYWxcbiAqIEBwYXJhbSBbb3B0aW9ucy50cmFuc3BhcmVudD1mYWxzZV0ge2Jvb2xlYW59IElmIHRoZSByZW5kZXIgdmlldyBpcyB0cmFuc3BhcmVudCwgZGVmYXVsdCBmYWxzZVxuICogQHBhcmFtIFtvcHRpb25zLmF1dG9SZXNpemU9ZmFsc2VdIHtib29sZWFufSBJZiB0aGUgcmVuZGVyIHZpZXcgaXMgYXV0b21hdGljYWxseSByZXNpemVkLCBkZWZhdWx0IGZhbHNlXG4gKiBAcGFyYW0gW29wdGlvbnMuYW50aWFsaWFzPWZhbHNlXSB7Ym9vbGVhbn0gc2V0cyBhbnRpYWxpYXMgKG9ubHkgYXBwbGljYWJsZSBpbiBjaHJvbWUgYXQgdGhlIG1vbWVudClcbiAqIEBwYXJhbSBbb3B0aW9ucy5yZXNvbHV0aW9uPTFdIHtudW1iZXJ9IHRoZSByZXNvbHV0aW9uIG9mIHRoZSByZW5kZXJlciByZXRpbmEgd291bGQgYmUgMlxuICogQHBhcmFtIFtvcHRpb25zLmNsZWFyQmVmb3JlUmVuZGVyPXRydWVdIHtib29sZWFufSBUaGlzIHNldHMgaWYgdGhlIENhbnZhc1JlbmRlcmVyIHdpbGwgY2xlYXIgdGhlIGNhbnZhcyBvclxuICogICAgICBub3QgYmVmb3JlIHRoZSBuZXcgcmVuZGVyIHBhc3MuXG4gKiBAcGFyYW0gW29wdGlvbnMucm91bmRQaXhlbHM9ZmFsc2VdIHtib29sZWFufSBJZiB0cnVlIFBpeGkgd2lsbCBNYXRoLmZsb29yKCkgeC95IHZhbHVlcyB3aGVuIHJlbmRlcmluZywgc3RvcHBpbmcgcGl4ZWwgaW50ZXJwb2xhdGlvbi5cbiAqL1xuZnVuY3Rpb24gQ2FudmFzUmVuZGVyZXIod2lkdGgsIGhlaWdodCwgb3B0aW9ucylcbntcbiAgICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcblxuICAgIFN5c3RlbVJlbmRlcmVyLmNhbGwodGhpcywgJ0NhbnZhcycsIHdpZHRoLCBoZWlnaHQsIG9wdGlvbnMpO1xuXG4gICAgdGhpcy50eXBlID0gQ09OU1QuUkVOREVSRVJfVFlQRS5DQU5WQVM7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgY2FudmFzIDJkIGNvbnRleHQgdGhhdCBldmVyeXRoaW5nIGlzIGRyYXduIHdpdGguXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtDYW52YXNSZW5kZXJpbmdDb250ZXh0MkR9XG4gICAgICovXG4gICAgdGhpcy5jb250ZXh0ID0gdGhpcy52aWV3LmdldENvbnRleHQoJzJkJywgeyBhbHBoYTogdGhpcy50cmFuc3BhcmVudCB9KTtcblxuICAgIC8qKlxuICAgICAqIEJvb2xlYW4gZmxhZyBjb250cm9sbGluZyBjYW52YXMgcmVmcmVzaC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICovXG4gICAgdGhpcy5yZWZyZXNoID0gdHJ1ZTtcblxuICAgIC8qKlxuICAgICAqIEluc3RhbmNlIG9mIGEgQ2FudmFzTWFza01hbmFnZXIsIGhhbmRsZXMgbWFza2luZyB3aGVuIHVzaW5nIHRoZSBjYW52YXMgcmVuZGVyZXIuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLkNhbnZhc01hc2tNYW5hZ2VyfVxuICAgICAqL1xuICAgIHRoaXMubWFza01hbmFnZXIgPSBuZXcgQ2FudmFzTWFza01hbmFnZXIoKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBjYW52YXMgcHJvcGVydHkgdXNlZCB0byBzZXQgdGhlIGNhbnZhcyBzbW9vdGhpbmcgcHJvcGVydHkuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtzdHJpbmd9XG4gICAgICovXG4gICAgdGhpcy5zbW9vdGhQcm9wZXJ0eSA9ICdpbWFnZVNtb290aGluZ0VuYWJsZWQnO1xuXG4gICAgaWYgKCF0aGlzLmNvbnRleHQuaW1hZ2VTbW9vdGhpbmdFbmFibGVkKVxuICAgIHtcbiAgICAgICAgaWYgKHRoaXMuY29udGV4dC53ZWJraXRJbWFnZVNtb290aGluZ0VuYWJsZWQpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuc21vb3RoUHJvcGVydHkgPSAnd2Via2l0SW1hZ2VTbW9vdGhpbmdFbmFibGVkJztcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh0aGlzLmNvbnRleHQubW96SW1hZ2VTbW9vdGhpbmdFbmFibGVkKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnNtb290aFByb3BlcnR5ID0gJ21vekltYWdlU21vb3RoaW5nRW5hYmxlZCc7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodGhpcy5jb250ZXh0Lm9JbWFnZVNtb290aGluZ0VuYWJsZWQpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuc21vb3RoUHJvcGVydHkgPSAnb0ltYWdlU21vb3RoaW5nRW5hYmxlZCc7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodGhpcy5jb250ZXh0Lm1zSW1hZ2VTbW9vdGhpbmdFbmFibGVkKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnNtb290aFByb3BlcnR5ID0gJ21zSW1hZ2VTbW9vdGhpbmdFbmFibGVkJztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMuaW5pdFBsdWdpbnMoKTtcblxuICAgIHRoaXMuX21hcEJsZW5kTW9kZXMoKTtcblxuICAgIC8qKlxuICAgICAqIFRoaXMgdGVtcG9yYXJ5IGRpc3BsYXkgb2JqZWN0IHVzZWQgYXMgdGhlIHBhcmVudCBvZiB0aGUgY3VycmVudGx5IGJlaW5nIHJlbmRlcmVkIGl0ZW1cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuRGlzcGxheU9iamVjdH1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX3RlbXBEaXNwbGF5T2JqZWN0UGFyZW50ID0ge1xuICAgICAgICB3b3JsZFRyYW5zZm9ybTogbmV3IG1hdGguTWF0cml4KCksXG4gICAgICAgIHdvcmxkQWxwaGE6IDFcbiAgICB9O1xuXG5cbiAgICB0aGlzLnJlc2l6ZSh3aWR0aCwgaGVpZ2h0KTtcbn1cblxuLy8gY29uc3RydWN0b3JcbkNhbnZhc1JlbmRlcmVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoU3lzdGVtUmVuZGVyZXIucHJvdG90eXBlKTtcbkNhbnZhc1JlbmRlcmVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IENhbnZhc1JlbmRlcmVyO1xubW9kdWxlLmV4cG9ydHMgPSBDYW52YXNSZW5kZXJlcjtcbnV0aWxzLnBsdWdpblRhcmdldC5taXhpbihDYW52YXNSZW5kZXJlcik7XG5cbi8qKlxuICogUmVuZGVycyB0aGUgb2JqZWN0IHRvIHRoaXMgY2FudmFzIHZpZXdcbiAqXG4gKiBAcGFyYW0gb2JqZWN0IHtQSVhJLkRpc3BsYXlPYmplY3R9IHRoZSBvYmplY3QgdG8gYmUgcmVuZGVyZWRcbiAqL1xuQ2FudmFzUmVuZGVyZXIucHJvdG90eXBlLnJlbmRlciA9IGZ1bmN0aW9uIChvYmplY3QpXG57XG4gICAgdGhpcy5lbWl0KCdwcmVyZW5kZXInKTtcblxuICAgIHZhciBjYWNoZVBhcmVudCA9IG9iamVjdC5wYXJlbnQ7XG5cbiAgICB0aGlzLl9sYXN0T2JqZWN0UmVuZGVyZWQgPSBvYmplY3Q7XG5cbiAgICBvYmplY3QucGFyZW50ID0gdGhpcy5fdGVtcERpc3BsYXlPYmplY3RQYXJlbnQ7XG5cbiAgICAvLyB1cGRhdGUgdGhlIHNjZW5lIGdyYXBoXG4gICAgb2JqZWN0LnVwZGF0ZVRyYW5zZm9ybSgpO1xuXG4gICAgb2JqZWN0LnBhcmVudCA9IGNhY2hlUGFyZW50O1xuXG4gICAgdGhpcy5jb250ZXh0LnNldFRyYW5zZm9ybSgxLCAwLCAwLCAxLCAwLCAwKTtcblxuICAgIHRoaXMuY29udGV4dC5nbG9iYWxBbHBoYSA9IDE7XG5cbiAgICB0aGlzLmNvbnRleHQuZ2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uID0gdGhpcy5ibGVuZE1vZGVzW0NPTlNULkJMRU5EX01PREVTLk5PUk1BTF07XG5cbiAgICBpZiAobmF2aWdhdG9yLmlzQ29jb29uSlMgJiYgdGhpcy52aWV3LnNjcmVlbmNhbnZhcylcbiAgICB7XG4gICAgICAgIHRoaXMuY29udGV4dC5maWxsU3R5bGUgPSAnYmxhY2snO1xuICAgICAgICB0aGlzLmNvbnRleHQuY2xlYXIoKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5jbGVhckJlZm9yZVJlbmRlcilcbiAgICB7XG4gICAgICAgIGlmICh0aGlzLnRyYW5zcGFyZW50KVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmNvbnRleHQuY2xlYXJSZWN0KDAsIDAsIHRoaXMud2lkdGgsIHRoaXMuaGVpZ2h0KTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuY29udGV4dC5maWxsU3R5bGUgPSB0aGlzLl9iYWNrZ3JvdW5kQ29sb3JTdHJpbmc7XG4gICAgICAgICAgICB0aGlzLmNvbnRleHQuZmlsbFJlY3QoMCwgMCwgdGhpcy53aWR0aCAsIHRoaXMuaGVpZ2h0KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMucmVuZGVyRGlzcGxheU9iamVjdChvYmplY3QsIHRoaXMuY29udGV4dCk7XG5cbiAgICB0aGlzLmVtaXQoJ3Bvc3RyZW5kZXInKTtcbn07XG5cbi8qKlxuICogUmVtb3ZlcyBldmVyeXRoaW5nIGZyb20gdGhlIHJlbmRlcmVyIGFuZCBvcHRpb25hbGx5IHJlbW92ZXMgdGhlIENhbnZhcyBET00gZWxlbWVudC5cbiAqXG4gKiBAcGFyYW0gW3JlbW92ZVZpZXc9ZmFsc2VdIHtib29sZWFufSBSZW1vdmVzIHRoZSBDYW52YXMgZWxlbWVudCBmcm9tIHRoZSBET00uXG4gKi9cbkNhbnZhc1JlbmRlcmVyLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKHJlbW92ZVZpZXcpXG57XG4gICAgdGhpcy5kZXN0cm95UGx1Z2lucygpO1xuXG4gICAgLy8gY2FsbCB0aGUgYmFzZSBkZXN0cm95XG4gICAgU3lzdGVtUmVuZGVyZXIucHJvdG90eXBlLmRlc3Ryb3kuY2FsbCh0aGlzLCByZW1vdmVWaWV3KTtcblxuICAgIHRoaXMuY29udGV4dCA9IG51bGw7XG5cbiAgICB0aGlzLnJlZnJlc2ggPSB0cnVlO1xuXG4gICAgdGhpcy5tYXNrTWFuYWdlci5kZXN0cm95KCk7XG4gICAgdGhpcy5tYXNrTWFuYWdlciA9IG51bGw7XG5cbiAgICB0aGlzLnNtb290aFByb3BlcnR5ID0gbnVsbDtcbn07XG5cbi8qKlxuICogUmVuZGVycyBhIGRpc3BsYXkgb2JqZWN0XG4gKlxuICogQHBhcmFtIGRpc3BsYXlPYmplY3Qge1BJWEkuRGlzcGxheU9iamVjdH0gVGhlIGRpc3BsYXlPYmplY3QgdG8gcmVuZGVyXG4gKiBAcHJpdmF0ZVxuICovXG5DYW52YXNSZW5kZXJlci5wcm90b3R5cGUucmVuZGVyRGlzcGxheU9iamVjdCA9IGZ1bmN0aW9uIChkaXNwbGF5T2JqZWN0LCBjb250ZXh0KVxue1xuICAgIHZhciB0ZW1wQ29udGV4dCA9IHRoaXMuY29udGV4dDtcblxuICAgIHRoaXMuY29udGV4dCA9IGNvbnRleHQ7XG4gICAgZGlzcGxheU9iamVjdC5yZW5kZXJDYW52YXModGhpcyk7XG4gICAgdGhpcy5jb250ZXh0ID0gdGVtcENvbnRleHQ7XG59O1xuXG4vKipcbiAqIEBleHRlbmRzIFBJWEkuU3lzdGVtUmVuZGVyZXIjcmVzaXplXG4gKlxuICogQHBhcmFtIHtudW1iZXJ9IHdcbiAqIEBwYXJhbSB7bnVtYmVyfSBoXG4gKi9cbkNhbnZhc1JlbmRlcmVyLnByb3RvdHlwZS5yZXNpemUgPSBmdW5jdGlvbiAodywgaClcbntcbiAgICBTeXN0ZW1SZW5kZXJlci5wcm90b3R5cGUucmVzaXplLmNhbGwodGhpcywgdywgaCk7XG5cbiAgICAvL3Jlc2V0IHRoZSBzY2FsZSBtb2RlLi4gb2RkbHkgdGhpcyBzZWVtcyB0byBiZSByZXNldCB3aGVuIHRoZSBjYW52YXMgaXMgcmVzaXplZC5cbiAgICAvL3N1cmVseSBhIGJyb3dzZXIgYnVnPz8gTGV0IHBpeGkgZml4IHRoYXQgZm9yIHlvdS4uXG4gICAgaWYodGhpcy5zbW9vdGhQcm9wZXJ0eSlcbiAgICB7XG4gICAgICAgIHRoaXMuY29udGV4dFt0aGlzLnNtb290aFByb3BlcnR5XSA9IChDT05TVC5TQ0FMRV9NT0RFUy5ERUZBVUxUID09PSBDT05TVC5TQ0FMRV9NT0RFUy5MSU5FQVIpO1xuICAgIH1cblxufTtcblxuLyoqXG4gKiBNYXBzIFBpeGkgYmxlbmQgbW9kZXMgdG8gY2FudmFzIGJsZW5kIG1vZGVzLlxuICpcbiAqIEBwcml2YXRlXG4gKi9cbkNhbnZhc1JlbmRlcmVyLnByb3RvdHlwZS5fbWFwQmxlbmRNb2RlcyA9IGZ1bmN0aW9uICgpXG57XG4gICAgaWYgKCF0aGlzLmJsZW5kTW9kZXMpXG4gICAge1xuICAgICAgICB0aGlzLmJsZW5kTW9kZXMgPSB7fTtcblxuICAgICAgICBpZiAodXRpbHMuY2FuVXNlTmV3Q2FudmFzQmxlbmRNb2RlcygpKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuTk9STUFMXSAgICAgICAgPSAnc291cmNlLW92ZXInO1xuICAgICAgICAgICAgdGhpcy5ibGVuZE1vZGVzW0NPTlNULkJMRU5EX01PREVTLkFERF0gICAgICAgICAgID0gJ2xpZ2h0ZXInOyAvL0lTIFRISVMgT0s/Pz9cbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5NVUxUSVBMWV0gICAgICA9ICdtdWx0aXBseSc7XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuU0NSRUVOXSAgICAgICAgPSAnc2NyZWVuJztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5PVkVSTEFZXSAgICAgICA9ICdvdmVybGF5JztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5EQVJLRU5dICAgICAgICA9ICdkYXJrZW4nO1xuICAgICAgICAgICAgdGhpcy5ibGVuZE1vZGVzW0NPTlNULkJMRU5EX01PREVTLkxJR0hURU5dICAgICAgID0gJ2xpZ2h0ZW4nO1xuICAgICAgICAgICAgdGhpcy5ibGVuZE1vZGVzW0NPTlNULkJMRU5EX01PREVTLkNPTE9SX0RPREdFXSAgID0gJ2NvbG9yLWRvZGdlJztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5DT0xPUl9CVVJOXSAgICA9ICdjb2xvci1idXJuJztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5IQVJEX0xJR0hUXSAgICA9ICdoYXJkLWxpZ2h0JztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5TT0ZUX0xJR0hUXSAgICA9ICdzb2Z0LWxpZ2h0JztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5ESUZGRVJFTkNFXSAgICA9ICdkaWZmZXJlbmNlJztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5FWENMVVNJT05dICAgICA9ICdleGNsdXNpb24nO1xuICAgICAgICAgICAgdGhpcy5ibGVuZE1vZGVzW0NPTlNULkJMRU5EX01PREVTLkhVRV0gICAgICAgICAgID0gJ2h1ZSc7XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuU0FUVVJBVElPTl0gICAgPSAnc2F0dXJhdGUnO1xuICAgICAgICAgICAgdGhpcy5ibGVuZE1vZGVzW0NPTlNULkJMRU5EX01PREVTLkNPTE9SXSAgICAgICAgID0gJ2NvbG9yJztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5MVU1JTk9TSVRZXSAgICA9ICdsdW1pbm9zaXR5JztcbiAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgIHtcbiAgICAgICAgICAgIC8vIHRoaXMgbWVhbnMgdGhhdCB0aGUgYnJvd3NlciBkb2VzIG5vdCBzdXBwb3J0IHRoZSBjb29sIG5ldyBibGVuZCBtb2RlcyBpbiBjYW52YXMgJ2NvdWdoJyBpZSAnY291Z2gnXG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuTk9STUFMXSAgICAgICAgPSAnc291cmNlLW92ZXInO1xuICAgICAgICAgICAgdGhpcy5ibGVuZE1vZGVzW0NPTlNULkJMRU5EX01PREVTLkFERF0gICAgICAgICAgID0gJ2xpZ2h0ZXInOyAvL0lTIFRISVMgT0s/Pz9cbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5NVUxUSVBMWV0gICAgICA9ICdzb3VyY2Utb3Zlcic7XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuU0NSRUVOXSAgICAgICAgPSAnc291cmNlLW92ZXInO1xuICAgICAgICAgICAgdGhpcy5ibGVuZE1vZGVzW0NPTlNULkJMRU5EX01PREVTLk9WRVJMQVldICAgICAgID0gJ3NvdXJjZS1vdmVyJztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5EQVJLRU5dICAgICAgICA9ICdzb3VyY2Utb3Zlcic7XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuTElHSFRFTl0gICAgICAgPSAnc291cmNlLW92ZXInO1xuICAgICAgICAgICAgdGhpcy5ibGVuZE1vZGVzW0NPTlNULkJMRU5EX01PREVTLkNPTE9SX0RPREdFXSAgID0gJ3NvdXJjZS1vdmVyJztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5DT0xPUl9CVVJOXSAgICA9ICdzb3VyY2Utb3Zlcic7XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuSEFSRF9MSUdIVF0gICAgPSAnc291cmNlLW92ZXInO1xuICAgICAgICAgICAgdGhpcy5ibGVuZE1vZGVzW0NPTlNULkJMRU5EX01PREVTLlNPRlRfTElHSFRdICAgID0gJ3NvdXJjZS1vdmVyJztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5ESUZGRVJFTkNFXSAgICA9ICdzb3VyY2Utb3Zlcic7XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuRVhDTFVTSU9OXSAgICAgPSAnc291cmNlLW92ZXInO1xuICAgICAgICAgICAgdGhpcy5ibGVuZE1vZGVzW0NPTlNULkJMRU5EX01PREVTLkhVRV0gICAgICAgICAgID0gJ3NvdXJjZS1vdmVyJztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5TQVRVUkFUSU9OXSAgICA9ICdzb3VyY2Utb3Zlcic7XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuQ09MT1JdICAgICAgICAgPSAnc291cmNlLW92ZXInO1xuICAgICAgICAgICAgdGhpcy5ibGVuZE1vZGVzW0NPTlNULkJMRU5EX01PREVTLkxVTUlOT1NJVFldICAgID0gJ3NvdXJjZS1vdmVyJztcbiAgICAgICAgfVxuICAgIH1cbn07XG4iLCIvKipcbiAqIENyZWF0ZXMgYSBDYW52YXMgZWxlbWVudCBvZiB0aGUgZ2l2ZW4gc2l6ZS5cbiAqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gd2lkdGgge251bWJlcn0gdGhlIHdpZHRoIGZvciB0aGUgbmV3bHkgY3JlYXRlZCBjYW52YXNcbiAqIEBwYXJhbSBoZWlnaHQge251bWJlcn0gdGhlIGhlaWdodCBmb3IgdGhlIG5ld2x5IGNyZWF0ZWQgY2FudmFzXG4gKi9cbmZ1bmN0aW9uIENhbnZhc0J1ZmZlcih3aWR0aCwgaGVpZ2h0KVxue1xuICAgIC8qKlxuICAgICAqIFRoZSBDYW52YXMgb2JqZWN0IHRoYXQgYmVsb25ncyB0byB0aGlzIENhbnZhc0J1ZmZlci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge0hUTUxDYW52YXNFbGVtZW50fVxuICAgICAqL1xuICAgIHRoaXMuY2FudmFzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnY2FudmFzJyk7XG5cbiAgICAvKipcbiAgICAgKiBBIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRCBvYmplY3QgcmVwcmVzZW50aW5nIGEgdHdvLWRpbWVuc2lvbmFsIHJlbmRlcmluZyBjb250ZXh0LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEfVxuICAgICAqL1xuICAgIHRoaXMuY29udGV4dCA9IHRoaXMuY2FudmFzLmdldENvbnRleHQoJzJkJyk7XG5cbiAgICB0aGlzLmNhbnZhcy53aWR0aCA9IHdpZHRoO1xuICAgIHRoaXMuY2FudmFzLmhlaWdodCA9IGhlaWdodDtcbn1cblxuQ2FudmFzQnVmZmVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IENhbnZhc0J1ZmZlcjtcbm1vZHVsZS5leHBvcnRzID0gQ2FudmFzQnVmZmVyO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhDYW52YXNCdWZmZXIucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogVGhlIHdpZHRoIG9mIHRoZSBjYW52YXMgYnVmZmVyIGluIHBpeGVscy5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5DYW52YXNCdWZmZXIjXG4gICAgICovXG4gICAgd2lkdGg6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jYW52YXMud2lkdGg7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbClcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5jYW52YXMud2lkdGggPSB2YWw7XG4gICAgICAgIH1cbiAgICB9LFxuICAgIC8qKlxuICAgICAqIFRoZSBoZWlnaHQgb2YgdGhlIGNhbnZhcyBidWZmZXIgaW4gcGl4ZWxzLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLkNhbnZhc0J1ZmZlciNcbiAgICAgKi9cbiAgICBoZWlnaHQ6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jYW52YXMuaGVpZ2h0O1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWwpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuY2FudmFzLmhlaWdodCA9IHZhbDtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuXG4vKipcbiAqIENsZWFycyB0aGUgY2FudmFzIHRoYXQgd2FzIGNyZWF0ZWQgYnkgdGhlIENhbnZhc0J1ZmZlciBjbGFzcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5DYW52YXNCdWZmZXIucHJvdG90eXBlLmNsZWFyID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLmNvbnRleHQuc2V0VHJhbnNmb3JtKDEsIDAsIDAsIDEsIDAsIDApO1xuICAgIHRoaXMuY29udGV4dC5jbGVhclJlY3QoMCwwLCB0aGlzLmNhbnZhcy53aWR0aCwgdGhpcy5jYW52YXMuaGVpZ2h0KTtcbn07XG5cbi8qKlxuICogUmVzaXplcyB0aGUgY2FudmFzIHRvIHRoZSBzcGVjaWZpZWQgd2lkdGggYW5kIGhlaWdodC5cbiAqXG4gKiBAcGFyYW0gd2lkdGgge251bWJlcn0gdGhlIG5ldyB3aWR0aCBvZiB0aGUgY2FudmFzXG4gKiBAcGFyYW0gaGVpZ2h0IHtudW1iZXJ9IHRoZSBuZXcgaGVpZ2h0IG9mIHRoZSBjYW52YXNcbiAqL1xuQ2FudmFzQnVmZmVyLnByb3RvdHlwZS5yZXNpemUgPSBmdW5jdGlvbiAod2lkdGgsIGhlaWdodClcbntcbiAgICB0aGlzLmNhbnZhcy53aWR0aCA9IHdpZHRoO1xuICAgIHRoaXMuY2FudmFzLmhlaWdodCA9IGhlaWdodDtcbn07XG5cbi8qKlxuICogRGVzdHJveXMgdGhpcyBjYW52YXMuXG4gKlxuICovXG5DYW52YXNCdWZmZXIucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoKVxue1xuICAgIHRoaXMuY29udGV4dCA9IG51bGw7XG4gICAgdGhpcy5jYW52YXMgPSBudWxsO1xufTtcbiIsInZhciBDT05TVCA9IHJlcXVpcmUoJy4uLy4uLy4uL2NvbnN0Jyk7XG5cbi8qKlxuICogQSBzZXQgb2YgZnVuY3Rpb25zIHVzZWQgYnkgdGhlIGNhbnZhcyByZW5kZXJlciB0byBkcmF3IHRoZSBwcmltaXRpdmUgZ3JhcGhpY3MgZGF0YS5cbiAqIEBzdGF0aWNcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqL1xudmFyIENhbnZhc0dyYXBoaWNzID0ge307XG5tb2R1bGUuZXhwb3J0cyA9IENhbnZhc0dyYXBoaWNzO1xuXG4vKlxuICogUmVuZGVycyBhIEdyYXBoaWNzIG9iamVjdCB0byBhIGNhbnZhcy5cbiAqXG4gKiBAcGFyYW0gZ3JhcGhpY3Mge1BJWEkuR3JhcGhpY3N9IHRoZSBhY3R1YWwgZ3JhcGhpY3Mgb2JqZWN0IHRvIHJlbmRlclxuICogQHBhcmFtIGNvbnRleHQge0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRH0gdGhlIDJkIGRyYXdpbmcgbWV0aG9kIG9mIHRoZSBjYW52YXNcbiAqL1xuQ2FudmFzR3JhcGhpY3MucmVuZGVyR3JhcGhpY3MgPSBmdW5jdGlvbiAoZ3JhcGhpY3MsIGNvbnRleHQpXG57XG4gICAgdmFyIHdvcmxkQWxwaGEgPSBncmFwaGljcy53b3JsZEFscGhhO1xuXG4gICAgaWYgKGdyYXBoaWNzLmRpcnR5KVxuICAgIHtcbiAgICAgICAgdGhpcy51cGRhdGVHcmFwaGljc1RpbnQoZ3JhcGhpY3MpO1xuICAgICAgICBncmFwaGljcy5kaXJ0eSA9IGZhbHNlO1xuICAgIH1cblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZ3JhcGhpY3MuZ3JhcGhpY3NEYXRhLmxlbmd0aDsgaSsrKVxuICAgIHtcbiAgICAgICAgdmFyIGRhdGEgPSBncmFwaGljcy5ncmFwaGljc0RhdGFbaV07XG4gICAgICAgIHZhciBzaGFwZSA9IGRhdGEuc2hhcGU7XG5cbiAgICAgICAgdmFyIGZpbGxDb2xvciA9IGRhdGEuX2ZpbGxUaW50O1xuICAgICAgICB2YXIgbGluZUNvbG9yID0gZGF0YS5fbGluZVRpbnQ7XG5cbiAgICAgICAgY29udGV4dC5saW5lV2lkdGggPSBkYXRhLmxpbmVXaWR0aDtcblxuICAgICAgICBpZiAoZGF0YS50eXBlID09PSBDT05TVC5TSEFQRVMuUE9MWSlcbiAgICAgICAge1xuICAgICAgICAgICAgY29udGV4dC5iZWdpblBhdGgoKTtcblxuICAgICAgICAgICAgdmFyIHBvaW50cyA9IHNoYXBlLnBvaW50cztcblxuICAgICAgICAgICAgY29udGV4dC5tb3ZlVG8ocG9pbnRzWzBdLCBwb2ludHNbMV0pO1xuXG4gICAgICAgICAgICBmb3IgKHZhciBqPTE7IGogPCBwb2ludHMubGVuZ3RoLzI7IGorKylcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb250ZXh0LmxpbmVUbyhwb2ludHNbaiAqIDJdLCBwb2ludHNbaiAqIDIgKyAxXSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChzaGFwZS5jbG9zZWQpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29udGV4dC5saW5lVG8ocG9pbnRzWzBdLCBwb2ludHNbMV0pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBpZiB0aGUgZmlyc3QgYW5kIGxhc3QgcG9pbnQgYXJlIHRoZSBzYW1lIGNsb3NlIHRoZSBwYXRoIC0gbXVjaCBuZWF0ZXIgOilcbiAgICAgICAgICAgIGlmIChwb2ludHNbMF0gPT09IHBvaW50c1twb2ludHMubGVuZ3RoLTJdICYmIHBvaW50c1sxXSA9PT0gcG9pbnRzW3BvaW50cy5sZW5ndGgtMV0pXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29udGV4dC5jbG9zZVBhdGgoKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGRhdGEuZmlsbClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb250ZXh0Lmdsb2JhbEFscGhhID0gZGF0YS5maWxsQWxwaGEgKiB3b3JsZEFscGhhO1xuICAgICAgICAgICAgICAgIGNvbnRleHQuZmlsbFN0eWxlID0gJyMnICsgKCcwMDAwMCcgKyAoIGZpbGxDb2xvciB8IDApLnRvU3RyaW5nKDE2KSkuc3Vic3RyKC02KTtcbiAgICAgICAgICAgICAgICBjb250ZXh0LmZpbGwoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChkYXRhLmxpbmVXaWR0aClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb250ZXh0Lmdsb2JhbEFscGhhID0gZGF0YS5saW5lQWxwaGEgKiB3b3JsZEFscGhhO1xuICAgICAgICAgICAgICAgIGNvbnRleHQuc3Ryb2tlU3R5bGUgPSAnIycgKyAoJzAwMDAwJyArICggbGluZUNvbG9yIHwgMCkudG9TdHJpbmcoMTYpKS5zdWJzdHIoLTYpO1xuICAgICAgICAgICAgICAgIGNvbnRleHQuc3Ryb2tlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoZGF0YS50eXBlID09PSBDT05TVC5TSEFQRVMuUkVDVClcbiAgICAgICAge1xuXG4gICAgICAgICAgICBpZiAoZGF0YS5maWxsQ29sb3IgfHwgZGF0YS5maWxsQ29sb3IgPT09IDApXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29udGV4dC5nbG9iYWxBbHBoYSA9IGRhdGEuZmlsbEFscGhhICogd29ybGRBbHBoYTtcbiAgICAgICAgICAgICAgICBjb250ZXh0LmZpbGxTdHlsZSA9ICcjJyArICgnMDAwMDAnICsgKCBmaWxsQ29sb3IgfCAwKS50b1N0cmluZygxNikpLnN1YnN0cigtNik7XG4gICAgICAgICAgICAgICAgY29udGV4dC5maWxsUmVjdChzaGFwZS54LCBzaGFwZS55LCBzaGFwZS53aWR0aCwgc2hhcGUuaGVpZ2h0KTtcblxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGRhdGEubGluZVdpZHRoKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGNvbnRleHQuZ2xvYmFsQWxwaGEgPSBkYXRhLmxpbmVBbHBoYSAqIHdvcmxkQWxwaGE7XG4gICAgICAgICAgICAgICAgY29udGV4dC5zdHJva2VTdHlsZSA9ICcjJyArICgnMDAwMDAnICsgKCBsaW5lQ29sb3IgfCAwKS50b1N0cmluZygxNikpLnN1YnN0cigtNik7XG4gICAgICAgICAgICAgICAgY29udGV4dC5zdHJva2VSZWN0KHNoYXBlLngsIHNoYXBlLnksIHNoYXBlLndpZHRoLCBzaGFwZS5oZWlnaHQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGRhdGEudHlwZSA9PT0gQ09OU1QuU0hBUEVTLkNJUkMpXG4gICAgICAgIHtcbiAgICAgICAgICAgIC8vIFRPRE8gLSBuZWVkIHRvIGJlIFVuZGVmaW5lZCFcbiAgICAgICAgICAgIGNvbnRleHQuYmVnaW5QYXRoKCk7XG4gICAgICAgICAgICBjb250ZXh0LmFyYyhzaGFwZS54LCBzaGFwZS55LCBzaGFwZS5yYWRpdXMsMCwyKk1hdGguUEkpO1xuICAgICAgICAgICAgY29udGV4dC5jbG9zZVBhdGgoKTtcblxuICAgICAgICAgICAgaWYgKGRhdGEuZmlsbClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb250ZXh0Lmdsb2JhbEFscGhhID0gZGF0YS5maWxsQWxwaGEgKiB3b3JsZEFscGhhO1xuICAgICAgICAgICAgICAgIGNvbnRleHQuZmlsbFN0eWxlID0gJyMnICsgKCcwMDAwMCcgKyAoIGZpbGxDb2xvciB8IDApLnRvU3RyaW5nKDE2KSkuc3Vic3RyKC02KTtcbiAgICAgICAgICAgICAgICBjb250ZXh0LmZpbGwoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChkYXRhLmxpbmVXaWR0aClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb250ZXh0Lmdsb2JhbEFscGhhID0gZGF0YS5saW5lQWxwaGEgKiB3b3JsZEFscGhhO1xuICAgICAgICAgICAgICAgIGNvbnRleHQuc3Ryb2tlU3R5bGUgPSAnIycgKyAoJzAwMDAwJyArICggbGluZUNvbG9yIHwgMCkudG9TdHJpbmcoMTYpKS5zdWJzdHIoLTYpO1xuICAgICAgICAgICAgICAgIGNvbnRleHQuc3Ryb2tlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoZGF0YS50eXBlID09PSBDT05TVC5TSEFQRVMuRUxJUClcbiAgICAgICAge1xuICAgICAgICAgICAgLy8gZWxsaXBzZSBjb2RlIHRha2VuIGZyb206IGh0dHA6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvMjE3Mjc5OC9ob3ctdG8tZHJhdy1hbi1vdmFsLWluLWh0bWw1LWNhbnZhc1xuXG4gICAgICAgICAgICB2YXIgdyA9IHNoYXBlLndpZHRoICogMjtcbiAgICAgICAgICAgIHZhciBoID0gc2hhcGUuaGVpZ2h0ICogMjtcblxuICAgICAgICAgICAgdmFyIHggPSBzaGFwZS54IC0gdy8yO1xuICAgICAgICAgICAgdmFyIHkgPSBzaGFwZS55IC0gaC8yO1xuXG4gICAgICAgICAgICBjb250ZXh0LmJlZ2luUGF0aCgpO1xuXG4gICAgICAgICAgICB2YXIga2FwcGEgPSAwLjU1MjI4NDgsXG4gICAgICAgICAgICAgICAgb3ggPSAodyAvIDIpICoga2FwcGEsIC8vIGNvbnRyb2wgcG9pbnQgb2Zmc2V0IGhvcml6b250YWxcbiAgICAgICAgICAgICAgICBveSA9IChoIC8gMikgKiBrYXBwYSwgLy8gY29udHJvbCBwb2ludCBvZmZzZXQgdmVydGljYWxcbiAgICAgICAgICAgICAgICB4ZSA9IHggKyB3LCAgICAgICAgICAgLy8geC1lbmRcbiAgICAgICAgICAgICAgICB5ZSA9IHkgKyBoLCAgICAgICAgICAgLy8geS1lbmRcbiAgICAgICAgICAgICAgICB4bSA9IHggKyB3IC8gMiwgICAgICAgLy8geC1taWRkbGVcbiAgICAgICAgICAgICAgICB5bSA9IHkgKyBoIC8gMjsgICAgICAgLy8geS1taWRkbGVcblxuICAgICAgICAgICAgY29udGV4dC5tb3ZlVG8oeCwgeW0pO1xuICAgICAgICAgICAgY29udGV4dC5iZXppZXJDdXJ2ZVRvKHgsIHltIC0gb3ksIHhtIC0gb3gsIHksIHhtLCB5KTtcbiAgICAgICAgICAgIGNvbnRleHQuYmV6aWVyQ3VydmVUbyh4bSArIG94LCB5LCB4ZSwgeW0gLSBveSwgeGUsIHltKTtcbiAgICAgICAgICAgIGNvbnRleHQuYmV6aWVyQ3VydmVUbyh4ZSwgeW0gKyBveSwgeG0gKyBveCwgeWUsIHhtLCB5ZSk7XG4gICAgICAgICAgICBjb250ZXh0LmJlemllckN1cnZlVG8oeG0gLSBveCwgeWUsIHgsIHltICsgb3ksIHgsIHltKTtcblxuICAgICAgICAgICAgY29udGV4dC5jbG9zZVBhdGgoKTtcblxuICAgICAgICAgICAgaWYgKGRhdGEuZmlsbClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb250ZXh0Lmdsb2JhbEFscGhhID0gZGF0YS5maWxsQWxwaGEgKiB3b3JsZEFscGhhO1xuICAgICAgICAgICAgICAgIGNvbnRleHQuZmlsbFN0eWxlID0gJyMnICsgKCcwMDAwMCcgKyAoIGZpbGxDb2xvciB8IDApLnRvU3RyaW5nKDE2KSkuc3Vic3RyKC02KTtcbiAgICAgICAgICAgICAgICBjb250ZXh0LmZpbGwoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChkYXRhLmxpbmVXaWR0aClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb250ZXh0Lmdsb2JhbEFscGhhID0gZGF0YS5saW5lQWxwaGEgKiB3b3JsZEFscGhhO1xuICAgICAgICAgICAgICAgIGNvbnRleHQuc3Ryb2tlU3R5bGUgPSAnIycgKyAoJzAwMDAwJyArICggbGluZUNvbG9yIHwgMCkudG9TdHJpbmcoMTYpKS5zdWJzdHIoLTYpO1xuICAgICAgICAgICAgICAgIGNvbnRleHQuc3Ryb2tlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoZGF0YS50eXBlID09PSBDT05TVC5TSEFQRVMuUlJFQylcbiAgICAgICAge1xuICAgICAgICAgICAgdmFyIHJ4ID0gc2hhcGUueDtcbiAgICAgICAgICAgIHZhciByeSA9IHNoYXBlLnk7XG4gICAgICAgICAgICB2YXIgd2lkdGggPSBzaGFwZS53aWR0aDtcbiAgICAgICAgICAgIHZhciBoZWlnaHQgPSBzaGFwZS5oZWlnaHQ7XG4gICAgICAgICAgICB2YXIgcmFkaXVzID0gc2hhcGUucmFkaXVzO1xuXG4gICAgICAgICAgICB2YXIgbWF4UmFkaXVzID0gTWF0aC5taW4od2lkdGgsIGhlaWdodCkgLyAyIHwgMDtcbiAgICAgICAgICAgIHJhZGl1cyA9IHJhZGl1cyA+IG1heFJhZGl1cyA/IG1heFJhZGl1cyA6IHJhZGl1cztcblxuICAgICAgICAgICAgY29udGV4dC5iZWdpblBhdGgoKTtcbiAgICAgICAgICAgIGNvbnRleHQubW92ZVRvKHJ4LCByeSArIHJhZGl1cyk7XG4gICAgICAgICAgICBjb250ZXh0LmxpbmVUbyhyeCwgcnkgKyBoZWlnaHQgLSByYWRpdXMpO1xuICAgICAgICAgICAgY29udGV4dC5xdWFkcmF0aWNDdXJ2ZVRvKHJ4LCByeSArIGhlaWdodCwgcnggKyByYWRpdXMsIHJ5ICsgaGVpZ2h0KTtcbiAgICAgICAgICAgIGNvbnRleHQubGluZVRvKHJ4ICsgd2lkdGggLSByYWRpdXMsIHJ5ICsgaGVpZ2h0KTtcbiAgICAgICAgICAgIGNvbnRleHQucXVhZHJhdGljQ3VydmVUbyhyeCArIHdpZHRoLCByeSArIGhlaWdodCwgcnggKyB3aWR0aCwgcnkgKyBoZWlnaHQgLSByYWRpdXMpO1xuICAgICAgICAgICAgY29udGV4dC5saW5lVG8ocnggKyB3aWR0aCwgcnkgKyByYWRpdXMpO1xuICAgICAgICAgICAgY29udGV4dC5xdWFkcmF0aWNDdXJ2ZVRvKHJ4ICsgd2lkdGgsIHJ5LCByeCArIHdpZHRoIC0gcmFkaXVzLCByeSk7XG4gICAgICAgICAgICBjb250ZXh0LmxpbmVUbyhyeCArIHJhZGl1cywgcnkpO1xuICAgICAgICAgICAgY29udGV4dC5xdWFkcmF0aWNDdXJ2ZVRvKHJ4LCByeSwgcngsIHJ5ICsgcmFkaXVzKTtcbiAgICAgICAgICAgIGNvbnRleHQuY2xvc2VQYXRoKCk7XG5cbiAgICAgICAgICAgIGlmIChkYXRhLmZpbGxDb2xvciB8fCBkYXRhLmZpbGxDb2xvciA9PT0gMClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb250ZXh0Lmdsb2JhbEFscGhhID0gZGF0YS5maWxsQWxwaGEgKiB3b3JsZEFscGhhO1xuICAgICAgICAgICAgICAgIGNvbnRleHQuZmlsbFN0eWxlID0gJyMnICsgKCcwMDAwMCcgKyAoIGZpbGxDb2xvciB8IDApLnRvU3RyaW5nKDE2KSkuc3Vic3RyKC02KTtcbiAgICAgICAgICAgICAgICBjb250ZXh0LmZpbGwoKTtcblxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGRhdGEubGluZVdpZHRoKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGNvbnRleHQuZ2xvYmFsQWxwaGEgPSBkYXRhLmxpbmVBbHBoYSAqIHdvcmxkQWxwaGE7XG4gICAgICAgICAgICAgICAgY29udGV4dC5zdHJva2VTdHlsZSA9ICcjJyArICgnMDAwMDAnICsgKCBsaW5lQ29sb3IgfCAwKS50b1N0cmluZygxNikpLnN1YnN0cigtNik7XG4gICAgICAgICAgICAgICAgY29udGV4dC5zdHJva2UoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn07XG5cbi8qXG4gKiBSZW5kZXJzIGEgZ3JhcGhpY3MgbWFza1xuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0gZ3JhcGhpY3Mge1BJWEkuR3JhcGhpY3N9IHRoZSBncmFwaGljcyB3aGljaCB3aWxsIGJlIHVzZWQgYXMgYSBtYXNrXG4gKiBAcGFyYW0gY29udGV4dCB7Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEfSB0aGUgY29udGV4dCAyZCBtZXRob2Qgb2YgdGhlIGNhbnZhc1xuICovXG5DYW52YXNHcmFwaGljcy5yZW5kZXJHcmFwaGljc01hc2sgPSBmdW5jdGlvbiAoZ3JhcGhpY3MsIGNvbnRleHQpXG57XG4gICAgdmFyIGxlbiA9IGdyYXBoaWNzLmdyYXBoaWNzRGF0YS5sZW5ndGg7XG5cbiAgICBpZiAobGVuID09PSAwKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnRleHQuYmVnaW5QYXRoKCk7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgaSsrKVxuICAgIHtcbiAgICAgICAgdmFyIGRhdGEgPSBncmFwaGljcy5ncmFwaGljc0RhdGFbaV07XG4gICAgICAgIHZhciBzaGFwZSA9IGRhdGEuc2hhcGU7XG5cbiAgICAgICAgaWYgKGRhdGEudHlwZSA9PT0gQ09OU1QuU0hBUEVTLlBPTFkpXG4gICAgICAgIHtcblxuICAgICAgICAgICAgdmFyIHBvaW50cyA9IHNoYXBlLnBvaW50cztcblxuICAgICAgICAgICAgY29udGV4dC5tb3ZlVG8ocG9pbnRzWzBdLCBwb2ludHNbMV0pO1xuXG4gICAgICAgICAgICBmb3IgKHZhciBqPTE7IGogPCBwb2ludHMubGVuZ3RoLzI7IGorKylcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb250ZXh0LmxpbmVUbyhwb2ludHNbaiAqIDJdLCBwb2ludHNbaiAqIDIgKyAxXSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIGlmIHRoZSBmaXJzdCBhbmQgbGFzdCBwb2ludCBhcmUgdGhlIHNhbWUgY2xvc2UgdGhlIHBhdGggLSBtdWNoIG5lYXRlciA6KVxuICAgICAgICAgICAgaWYgKHBvaW50c1swXSA9PT0gcG9pbnRzW3BvaW50cy5sZW5ndGgtMl0gJiYgcG9pbnRzWzFdID09PSBwb2ludHNbcG9pbnRzLmxlbmd0aC0xXSlcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb250ZXh0LmNsb3NlUGF0aCgpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoZGF0YS50eXBlID09PSBDT05TVC5TSEFQRVMuUkVDVClcbiAgICAgICAge1xuICAgICAgICAgICAgY29udGV4dC5yZWN0KHNoYXBlLngsIHNoYXBlLnksIHNoYXBlLndpZHRoLCBzaGFwZS5oZWlnaHQpO1xuICAgICAgICAgICAgY29udGV4dC5jbG9zZVBhdGgoKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChkYXRhLnR5cGUgPT09IENPTlNULlNIQVBFUy5DSVJDKVxuICAgICAgICB7XG4gICAgICAgICAgICAvLyBUT0RPIC0gbmVlZCB0byBiZSBVbmRlZmluZWQhXG4gICAgICAgICAgICBjb250ZXh0LmFyYyhzaGFwZS54LCBzaGFwZS55LCBzaGFwZS5yYWRpdXMsIDAsIDIgKiBNYXRoLlBJKTtcbiAgICAgICAgICAgIGNvbnRleHQuY2xvc2VQYXRoKCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoZGF0YS50eXBlID09PSBDT05TVC5TSEFQRVMuRUxJUClcbiAgICAgICAge1xuXG4gICAgICAgICAgICAvLyBlbGxpcHNlIGNvZGUgdGFrZW4gZnJvbTogaHR0cDovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy8yMTcyNzk4L2hvdy10by1kcmF3LWFuLW92YWwtaW4taHRtbDUtY2FudmFzXG5cbiAgICAgICAgICAgIHZhciB3ID0gc2hhcGUud2lkdGggKiAyO1xuICAgICAgICAgICAgdmFyIGggPSBzaGFwZS5oZWlnaHQgKiAyO1xuXG4gICAgICAgICAgICB2YXIgeCA9IHNoYXBlLnggLSB3LzI7XG4gICAgICAgICAgICB2YXIgeSA9IHNoYXBlLnkgLSBoLzI7XG5cbiAgICAgICAgICAgIHZhciBrYXBwYSA9IDAuNTUyMjg0OCxcbiAgICAgICAgICAgICAgICBveCA9ICh3IC8gMikgKiBrYXBwYSwgLy8gY29udHJvbCBwb2ludCBvZmZzZXQgaG9yaXpvbnRhbFxuICAgICAgICAgICAgICAgIG95ID0gKGggLyAyKSAqIGthcHBhLCAvLyBjb250cm9sIHBvaW50IG9mZnNldCB2ZXJ0aWNhbFxuICAgICAgICAgICAgICAgIHhlID0geCArIHcsICAgICAgICAgICAvLyB4LWVuZFxuICAgICAgICAgICAgICAgIHllID0geSArIGgsICAgICAgICAgICAvLyB5LWVuZFxuICAgICAgICAgICAgICAgIHhtID0geCArIHcgLyAyLCAgICAgICAvLyB4LW1pZGRsZVxuICAgICAgICAgICAgICAgIHltID0geSArIGggLyAyOyAgICAgICAvLyB5LW1pZGRsZVxuXG4gICAgICAgICAgICBjb250ZXh0Lm1vdmVUbyh4LCB5bSk7XG4gICAgICAgICAgICBjb250ZXh0LmJlemllckN1cnZlVG8oeCwgeW0gLSBveSwgeG0gLSBveCwgeSwgeG0sIHkpO1xuICAgICAgICAgICAgY29udGV4dC5iZXppZXJDdXJ2ZVRvKHhtICsgb3gsIHksIHhlLCB5bSAtIG95LCB4ZSwgeW0pO1xuICAgICAgICAgICAgY29udGV4dC5iZXppZXJDdXJ2ZVRvKHhlLCB5bSArIG95LCB4bSArIG94LCB5ZSwgeG0sIHllKTtcbiAgICAgICAgICAgIGNvbnRleHQuYmV6aWVyQ3VydmVUbyh4bSAtIG94LCB5ZSwgeCwgeW0gKyBveSwgeCwgeW0pO1xuICAgICAgICAgICAgY29udGV4dC5jbG9zZVBhdGgoKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChkYXRhLnR5cGUgPT09IENPTlNULlNIQVBFUy5SUkVDKVxuICAgICAgICB7XG5cbiAgICAgICAgICAgIHZhciByeCA9IHNoYXBlLng7XG4gICAgICAgICAgICB2YXIgcnkgPSBzaGFwZS55O1xuICAgICAgICAgICAgdmFyIHdpZHRoID0gc2hhcGUud2lkdGg7XG4gICAgICAgICAgICB2YXIgaGVpZ2h0ID0gc2hhcGUuaGVpZ2h0O1xuICAgICAgICAgICAgdmFyIHJhZGl1cyA9IHNoYXBlLnJhZGl1cztcblxuICAgICAgICAgICAgdmFyIG1heFJhZGl1cyA9IE1hdGgubWluKHdpZHRoLCBoZWlnaHQpIC8gMiB8IDA7XG4gICAgICAgICAgICByYWRpdXMgPSByYWRpdXMgPiBtYXhSYWRpdXMgPyBtYXhSYWRpdXMgOiByYWRpdXM7XG5cbiAgICAgICAgICAgIGNvbnRleHQubW92ZVRvKHJ4LCByeSArIHJhZGl1cyk7XG4gICAgICAgICAgICBjb250ZXh0LmxpbmVUbyhyeCwgcnkgKyBoZWlnaHQgLSByYWRpdXMpO1xuICAgICAgICAgICAgY29udGV4dC5xdWFkcmF0aWNDdXJ2ZVRvKHJ4LCByeSArIGhlaWdodCwgcnggKyByYWRpdXMsIHJ5ICsgaGVpZ2h0KTtcbiAgICAgICAgICAgIGNvbnRleHQubGluZVRvKHJ4ICsgd2lkdGggLSByYWRpdXMsIHJ5ICsgaGVpZ2h0KTtcbiAgICAgICAgICAgIGNvbnRleHQucXVhZHJhdGljQ3VydmVUbyhyeCArIHdpZHRoLCByeSArIGhlaWdodCwgcnggKyB3aWR0aCwgcnkgKyBoZWlnaHQgLSByYWRpdXMpO1xuICAgICAgICAgICAgY29udGV4dC5saW5lVG8ocnggKyB3aWR0aCwgcnkgKyByYWRpdXMpO1xuICAgICAgICAgICAgY29udGV4dC5xdWFkcmF0aWNDdXJ2ZVRvKHJ4ICsgd2lkdGgsIHJ5LCByeCArIHdpZHRoIC0gcmFkaXVzLCByeSk7XG4gICAgICAgICAgICBjb250ZXh0LmxpbmVUbyhyeCArIHJhZGl1cywgcnkpO1xuICAgICAgICAgICAgY29udGV4dC5xdWFkcmF0aWNDdXJ2ZVRvKHJ4LCByeSwgcngsIHJ5ICsgcmFkaXVzKTtcbiAgICAgICAgICAgIGNvbnRleHQuY2xvc2VQYXRoKCk7XG4gICAgICAgIH1cbiAgICB9XG59O1xuXG4vKlxuICogVXBkYXRlcyB0aGUgdGludCBvZiBhIGdyYXBoaWNzIG9iamVjdFxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0gZ3JhcGhpY3Mge1BJWEkuR3JhcGhpY3N9IHRoZSBncmFwaGljcyB0aGF0IHdpbGwgaGF2ZSBpdHMgdGludCB1cGRhdGVkXG4gKlxuICovXG5DYW52YXNHcmFwaGljcy51cGRhdGVHcmFwaGljc1RpbnQgPSBmdW5jdGlvbiAoZ3JhcGhpY3MpXG57XG4gICAgaWYgKGdyYXBoaWNzLnRpbnQgPT09IDB4RkZGRkZGICYmIGdyYXBoaWNzLl9wcmV2VGludCA9PT0gZ3JhcGhpY3MudGludClcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgZ3JhcGhpY3MuX3ByZXZUaW50ID0gZ3JhcGhpY3MudGludDtcblxuICAgIHZhciB0aW50UiA9IChncmFwaGljcy50aW50ID4+IDE2ICYgMHhGRikgLyAyNTU7XG4gICAgdmFyIHRpbnRHID0gKGdyYXBoaWNzLnRpbnQgPj4gOCAmIDB4RkYpIC8gMjU1O1xuICAgIHZhciB0aW50QiA9IChncmFwaGljcy50aW50ICYgMHhGRikvIDI1NTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZ3JhcGhpY3MuZ3JhcGhpY3NEYXRhLmxlbmd0aDsgaSsrKVxuICAgIHtcbiAgICAgICAgdmFyIGRhdGEgPSBncmFwaGljcy5ncmFwaGljc0RhdGFbaV07XG5cbiAgICAgICAgdmFyIGZpbGxDb2xvciA9IGRhdGEuZmlsbENvbG9yIHwgMDtcbiAgICAgICAgdmFyIGxpbmVDb2xvciA9IGRhdGEubGluZUNvbG9yIHwgMDtcblxuICAgICAgICAvKlxuICAgICAgICB2YXIgY29sb3JSID0gKGZpbGxDb2xvciA+PiAxNiAmIDB4RkYpIC8gMjU1O1xuICAgICAgICB2YXIgY29sb3JHID0gKGZpbGxDb2xvciA+PiA4ICYgMHhGRikgLyAyNTU7XG4gICAgICAgIHZhciBjb2xvckIgPSAoZmlsbENvbG9yICYgMHhGRikgLyAyNTU7XG5cbiAgICAgICAgY29sb3JSICo9IHRpbnRSO1xuICAgICAgICBjb2xvckcgKj0gdGludEc7XG4gICAgICAgIGNvbG9yQiAqPSB0aW50QjtcblxuICAgICAgICBmaWxsQ29sb3IgPSAoKGNvbG9yUioyNTUgPDwgMTYpICsgKGNvbG9yRyoyNTUgPDwgOCkgKyBjb2xvckIqMjU1KTtcblxuICAgICAgICBjb2xvclIgPSAobGluZUNvbG9yID4+IDE2ICYgMHhGRikgLyAyNTU7XG4gICAgICAgIGNvbG9yRyA9IChsaW5lQ29sb3IgPj4gOCAmIDB4RkYpIC8gMjU1O1xuICAgICAgICBjb2xvckIgPSAobGluZUNvbG9yICYgMHhGRikgLyAyNTU7XG5cbiAgICAgICAgY29sb3JSICo9IHRpbnRSO1xuICAgICAgICBjb2xvckcgKj0gdGludEc7XG4gICAgICAgIGNvbG9yQiAqPSB0aW50QjtcblxuICAgICAgICBsaW5lQ29sb3IgPSAoKGNvbG9yUioyNTUgPDwgMTYpICsgKGNvbG9yRyoyNTUgPDwgOCkgKyBjb2xvckIqMjU1KTtcbiAgICAgICAgKi9cblxuICAgICAgICAvLyBzdXBlciBpbmxpbmUgY29zIGltIGFuIG9wdGltaXphdGlvbiBOQVpJIDopXG4gICAgICAgIGRhdGEuX2ZpbGxUaW50ID0gKCgoZmlsbENvbG9yID4+IDE2ICYgMHhGRikgLyAyNTUgKiB0aW50UioyNTUgPDwgMTYpICsgKChmaWxsQ29sb3IgPj4gOCAmIDB4RkYpIC8gMjU1ICogdGludEcqMjU1IDw8IDgpICsgIChmaWxsQ29sb3IgJiAweEZGKSAvIDI1NSAqIHRpbnRCKjI1NSk7XG4gICAgICAgIGRhdGEuX2xpbmVUaW50ID0gKCgobGluZUNvbG9yID4+IDE2ICYgMHhGRikgLyAyNTUgKiB0aW50UioyNTUgPDwgMTYpICsgKChsaW5lQ29sb3IgPj4gOCAmIDB4RkYpIC8gMjU1ICogdGludEcqMjU1IDw8IDgpICsgIChsaW5lQ29sb3IgJiAweEZGKSAvIDI1NSAqIHRpbnRCKjI1NSk7XG5cbiAgICB9XG59O1xuXG4iLCJ2YXIgQ2FudmFzR3JhcGhpY3MgPSByZXF1aXJlKCcuL0NhbnZhc0dyYXBoaWNzJyk7XG5cbi8qKlxuICogQSBzZXQgb2YgZnVuY3Rpb25zIHVzZWQgdG8gaGFuZGxlIG1hc2tpbmcuXG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICovXG5mdW5jdGlvbiBDYW52YXNNYXNrTWFuYWdlcigpXG57fVxuXG5DYW52YXNNYXNrTWFuYWdlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBDYW52YXNNYXNrTWFuYWdlcjtcbm1vZHVsZS5leHBvcnRzID0gQ2FudmFzTWFza01hbmFnZXI7XG5cbi8qKlxuICogVGhpcyBtZXRob2QgYWRkcyBpdCB0byB0aGUgY3VycmVudCBzdGFjayBvZiBtYXNrcy5cbiAqXG4gKiBAcGFyYW0gbWFza0RhdGEge29iamVjdH0gdGhlIG1hc2tEYXRhIHRoYXQgd2lsbCBiZSBwdXNoZWRcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5XZWJHTFJlbmRlcmVyfFBJWEkuQ2FudmFzUmVuZGVyZXJ9IFRoZSByZW5kZXJlciBjb250ZXh0IHRvIHVzZS5cbiAqL1xuQ2FudmFzTWFza01hbmFnZXIucHJvdG90eXBlLnB1c2hNYXNrID0gZnVuY3Rpb24gKG1hc2tEYXRhLCByZW5kZXJlcilcbntcblxuICAgIHJlbmRlcmVyLmNvbnRleHQuc2F2ZSgpO1xuXG4gICAgdmFyIGNhY2hlQWxwaGEgPSBtYXNrRGF0YS5hbHBoYTtcbiAgICB2YXIgdHJhbnNmb3JtID0gbWFza0RhdGEud29ybGRUcmFuc2Zvcm07XG4gICAgdmFyIHJlc29sdXRpb24gPSByZW5kZXJlci5yZXNvbHV0aW9uO1xuXG4gICAgcmVuZGVyZXIuY29udGV4dC5zZXRUcmFuc2Zvcm0oXG4gICAgICAgIHRyYW5zZm9ybS5hICogcmVzb2x1dGlvbixcbiAgICAgICAgdHJhbnNmb3JtLmIgKiByZXNvbHV0aW9uLFxuICAgICAgICB0cmFuc2Zvcm0uYyAqIHJlc29sdXRpb24sXG4gICAgICAgIHRyYW5zZm9ybS5kICogcmVzb2x1dGlvbixcbiAgICAgICAgdHJhbnNmb3JtLnR4ICogcmVzb2x1dGlvbixcbiAgICAgICAgdHJhbnNmb3JtLnR5ICogcmVzb2x1dGlvblxuICAgICk7XG5cbiAgICAvL1RPRE8gc3Vwb3J0IHNwcml0ZSBhbHBoYSBtYXNrcz8/XG4gICAgLy9sb3RzIG9mIGVmZm9ydCByZXF1aXJlZC4gSWYgZGVtYW5kIGlzIGdyZWF0IGVub3VnaC4uXG4gICAgaWYoIW1hc2tEYXRhLnRleHR1cmUpXG4gICAge1xuICAgICAgICBDYW52YXNHcmFwaGljcy5yZW5kZXJHcmFwaGljc01hc2sobWFza0RhdGEsIHJlbmRlcmVyLmNvbnRleHQpO1xuICAgICAgICByZW5kZXJlci5jb250ZXh0LmNsaXAoKTtcbiAgICB9XG5cbiAgICBtYXNrRGF0YS53b3JsZEFscGhhID0gY2FjaGVBbHBoYTtcbn07XG5cbi8qKlxuICogUmVzdG9yZXMgdGhlIGN1cnJlbnQgZHJhd2luZyBjb250ZXh0IHRvIHRoZSBzdGF0ZSBpdCB3YXMgYmVmb3JlIHRoZSBtYXNrIHdhcyBhcHBsaWVkLlxuICpcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5XZWJHTFJlbmRlcmVyfFBJWEkuQ2FudmFzUmVuZGVyZXJ9IFRoZSByZW5kZXJlciBjb250ZXh0IHRvIHVzZS5cbiAqL1xuQ2FudmFzTWFza01hbmFnZXIucHJvdG90eXBlLnBvcE1hc2sgPSBmdW5jdGlvbiAocmVuZGVyZXIpXG57XG4gICAgcmVuZGVyZXIuY29udGV4dC5yZXN0b3JlKCk7XG59O1xuXG5DYW52YXNNYXNrTWFuYWdlci5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uICgpIHt9O1xuIiwidmFyIHV0aWxzID0gcmVxdWlyZSgnLi4vLi4vLi4vdXRpbHMnKTtcblxuLyoqXG4gKiBVdGlsaXR5IG1ldGhvZHMgZm9yIFNwcml0ZS9UZXh0dXJlIHRpbnRpbmcuXG4gKiBAc3RhdGljXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKi9cbnZhciBDYW52YXNUaW50ZXIgPSB7fTtcbm1vZHVsZS5leHBvcnRzID0gQ2FudmFzVGludGVyO1xuXG4vKipcbiAqIEJhc2ljYWxseSB0aGlzIG1ldGhvZCBqdXN0IG5lZWRzIGEgc3ByaXRlIGFuZCBhIGNvbG9yIGFuZCB0aW50cyB0aGUgc3ByaXRlIHdpdGggdGhlIGdpdmVuIGNvbG9yLlxuICpcbiAqIEBwYXJhbSBzcHJpdGUge1BJWEkuU3ByaXRlfSB0aGUgc3ByaXRlIHRvIHRpbnRcbiAqIEBwYXJhbSBjb2xvciB7bnVtYmVyfSB0aGUgY29sb3IgdG8gdXNlIHRvIHRpbnQgdGhlIHNwcml0ZSB3aXRoXG4gKiBAcmV0dXJuIHtIVE1MQ2FudmFzRWxlbWVudH0gVGhlIHRpbnRlZCBjYW52YXNcbiAqL1xuQ2FudmFzVGludGVyLmdldFRpbnRlZFRleHR1cmUgPSBmdW5jdGlvbiAoc3ByaXRlLCBjb2xvcilcbntcbiAgICB2YXIgdGV4dHVyZSA9IHNwcml0ZS50ZXh0dXJlO1xuXG4gICAgY29sb3IgPSBDYW52YXNUaW50ZXIucm91bmRDb2xvcihjb2xvcik7XG5cbiAgICB2YXIgc3RyaW5nQ29sb3IgPSAnIycgKyAoJzAwMDAwJyArICggY29sb3IgfCAwKS50b1N0cmluZygxNikpLnN1YnN0cigtNik7XG5cbiAgICB0ZXh0dXJlLnRpbnRDYWNoZSA9IHRleHR1cmUudGludENhY2hlIHx8IHt9O1xuXG4gICAgaWYgKHRleHR1cmUudGludENhY2hlW3N0cmluZ0NvbG9yXSlcbiAgICB7XG4gICAgICAgIHJldHVybiB0ZXh0dXJlLnRpbnRDYWNoZVtzdHJpbmdDb2xvcl07XG4gICAgfVxuXG4gICAgIC8vIGNsb25lIHRleHR1cmUuLlxuICAgIHZhciBjYW52YXMgPSBDYW52YXNUaW50ZXIuY2FudmFzIHx8IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NhbnZhcycpO1xuXG4gICAgLy9DYW52YXNUaW50ZXIudGludFdpdGhQZXJQaXhlbCh0ZXh0dXJlLCBzdHJpbmdDb2xvciwgY2FudmFzKTtcbiAgICBDYW52YXNUaW50ZXIudGludE1ldGhvZCh0ZXh0dXJlLCBjb2xvciwgY2FudmFzKTtcblxuICAgIGlmIChDYW52YXNUaW50ZXIuY29udmVydFRpbnRUb0ltYWdlKVxuICAgIHtcbiAgICAgICAgLy8gaXMgdGhpcyBiZXR0ZXI/XG4gICAgICAgIHZhciB0aW50SW1hZ2UgPSBuZXcgSW1hZ2UoKTtcbiAgICAgICAgdGludEltYWdlLnNyYyA9IGNhbnZhcy50b0RhdGFVUkwoKTtcblxuICAgICAgICB0ZXh0dXJlLnRpbnRDYWNoZVtzdHJpbmdDb2xvcl0gPSB0aW50SW1hZ2U7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHRleHR1cmUudGludENhY2hlW3N0cmluZ0NvbG9yXSA9IGNhbnZhcztcbiAgICAgICAgLy8gaWYgd2UgYXJlIG5vdCBjb252ZXJ0aW5nIHRoZSB0ZXh0dXJlIHRvIGFuIGltYWdlIHRoZW4gd2UgbmVlZCB0byBsb3NlIHRoZSByZWZlcmVuY2UgdG8gdGhlIGNhbnZhc1xuICAgICAgICBDYW52YXNUaW50ZXIuY2FudmFzID0gbnVsbDtcbiAgICB9XG5cbiAgICByZXR1cm4gY2FudmFzO1xufTtcblxuLyoqXG4gKiBUaW50IGEgdGV4dHVyZSB1c2luZyB0aGUgJ211bHRpcGx5JyBvcGVyYXRpb24uXG4gKlxuICogQHBhcmFtIHRleHR1cmUge1BJWEkuVGV4dHVyZX0gdGhlIHRleHR1cmUgdG8gdGludFxuICogQHBhcmFtIGNvbG9yIHtudW1iZXJ9IHRoZSBjb2xvciB0byB1c2UgdG8gdGludCB0aGUgc3ByaXRlIHdpdGhcbiAqIEBwYXJhbSBjYW52YXMge0hUTUxDYW52YXNFbGVtZW50fSB0aGUgY3VycmVudCBjYW52YXNcbiAqL1xuQ2FudmFzVGludGVyLnRpbnRXaXRoTXVsdGlwbHkgPSBmdW5jdGlvbiAodGV4dHVyZSwgY29sb3IsIGNhbnZhcylcbntcbiAgICB2YXIgY29udGV4dCA9IGNhbnZhcy5nZXRDb250ZXh0KCAnMmQnICk7XG5cbiAgICB2YXIgcmVzb2x1dGlvbiA9IHRleHR1cmUuYmFzZVRleHR1cmUucmVzb2x1dGlvbjtcblxuICAgIHZhciBjcm9wID0gdGV4dHVyZS5jcm9wLmNsb25lKCk7XG4gICAgY3JvcC54ICo9IHJlc29sdXRpb247XG4gICAgY3JvcC55ICo9IHJlc29sdXRpb247XG4gICAgY3JvcC53aWR0aCAqPSByZXNvbHV0aW9uO1xuICAgIGNyb3AuaGVpZ2h0ICo9IHJlc29sdXRpb247XG5cbiAgICBjYW52YXMud2lkdGggPSBjcm9wLndpZHRoO1xuICAgIGNhbnZhcy5oZWlnaHQgPSBjcm9wLmhlaWdodDtcblxuICAgIGNvbnRleHQuZmlsbFN0eWxlID0gJyMnICsgKCcwMDAwMCcgKyAoIGNvbG9yIHwgMCkudG9TdHJpbmcoMTYpKS5zdWJzdHIoLTYpO1xuXG4gICAgY29udGV4dC5maWxsUmVjdCgwLCAwLCBjcm9wLndpZHRoLCBjcm9wLmhlaWdodCk7XG5cbiAgICBjb250ZXh0Lmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbiA9ICdtdWx0aXBseSc7XG5cbiAgICBjb250ZXh0LmRyYXdJbWFnZShcbiAgICAgICAgdGV4dHVyZS5iYXNlVGV4dHVyZS5zb3VyY2UsXG4gICAgICAgIGNyb3AueCxcbiAgICAgICAgY3JvcC55LFxuICAgICAgICBjcm9wLndpZHRoLFxuICAgICAgICBjcm9wLmhlaWdodCxcbiAgICAgICAgMCxcbiAgICAgICAgMCxcbiAgICAgICAgY3JvcC53aWR0aCxcbiAgICAgICAgY3JvcC5oZWlnaHRcbiAgICApO1xuXG4gICAgY29udGV4dC5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb24gPSAnZGVzdGluYXRpb24tYXRvcCc7XG5cbiAgICBjb250ZXh0LmRyYXdJbWFnZShcbiAgICAgICAgdGV4dHVyZS5iYXNlVGV4dHVyZS5zb3VyY2UsXG4gICAgICAgIGNyb3AueCxcbiAgICAgICAgY3JvcC55LFxuICAgICAgICBjcm9wLndpZHRoLFxuICAgICAgICBjcm9wLmhlaWdodCxcbiAgICAgICAgMCxcbiAgICAgICAgMCxcbiAgICAgICAgY3JvcC53aWR0aCxcbiAgICAgICAgY3JvcC5oZWlnaHRcbiAgICApO1xufTtcblxuLyoqXG4gKiBUaW50IGEgdGV4dHVyZSB1c2luZyB0aGUgJ292ZXJsYXknIG9wZXJhdGlvbi5cbiAqXG4gKiBAcGFyYW0gdGV4dHVyZSB7UElYSS5UZXh0dXJlfSB0aGUgdGV4dHVyZSB0byB0aW50XG4gKiBAcGFyYW0gY29sb3Ige251bWJlcn0gdGhlIGNvbG9yIHRvIHVzZSB0byB0aW50IHRoZSBzcHJpdGUgd2l0aFxuICogQHBhcmFtIGNhbnZhcyB7SFRNTENhbnZhc0VsZW1lbnR9IHRoZSBjdXJyZW50IGNhbnZhc1xuICovXG5DYW52YXNUaW50ZXIudGludFdpdGhPdmVybGF5ID0gZnVuY3Rpb24gKHRleHR1cmUsIGNvbG9yLCBjYW52YXMpXG57XG4gICAgdmFyIGNvbnRleHQgPSBjYW52YXMuZ2V0Q29udGV4dCggJzJkJyApO1xuXG4gICAgdmFyIHJlc29sdXRpb24gPSB0ZXh0dXJlLmJhc2VUZXh0dXJlLnJlc29sdXRpb247XG5cbiAgICB2YXIgY3JvcCA9IHRleHR1cmUuY3JvcC5jbG9uZSgpO1xuICAgIGNyb3AueCAqPSByZXNvbHV0aW9uO1xuICAgIGNyb3AueSAqPSByZXNvbHV0aW9uO1xuICAgIGNyb3Aud2lkdGggKj0gcmVzb2x1dGlvbjtcbiAgICBjcm9wLmhlaWdodCAqPSByZXNvbHV0aW9uO1xuXG4gICAgY2FudmFzLndpZHRoID0gY3JvcC53aWR0aDtcbiAgICBjYW52YXMuaGVpZ2h0ID0gY3JvcC5oZWlnaHQ7XG5cbiAgICBjb250ZXh0Lmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbiA9ICdjb3B5JztcbiAgICBjb250ZXh0LmZpbGxTdHlsZSA9ICcjJyArICgnMDAwMDAnICsgKCBjb2xvciB8IDApLnRvU3RyaW5nKDE2KSkuc3Vic3RyKC02KTtcbiAgICBjb250ZXh0LmZpbGxSZWN0KDAsIDAsIGNyb3Aud2lkdGgsIGNyb3AuaGVpZ2h0KTtcblxuICAgIGNvbnRleHQuZ2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uID0gJ2Rlc3RpbmF0aW9uLWF0b3AnO1xuICAgIGNvbnRleHQuZHJhd0ltYWdlKFxuICAgICAgICB0ZXh0dXJlLmJhc2VUZXh0dXJlLnNvdXJjZSxcbiAgICAgICAgY3JvcC54LFxuICAgICAgICBjcm9wLnksXG4gICAgICAgIGNyb3Aud2lkdGgsXG4gICAgICAgIGNyb3AuaGVpZ2h0LFxuICAgICAgICAwLFxuICAgICAgICAwLFxuICAgICAgICBjcm9wLndpZHRoLFxuICAgICAgICBjcm9wLmhlaWdodFxuICAgICk7XG5cbiAgICAvLyBjb250ZXh0Lmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbiA9ICdjb3B5Jztcbn07XG5cbi8qKlxuICogVGludCBhIHRleHR1cmUgcGl4ZWwgcGVyIHBpeGVsLlxuICpcbiAqIEBwYXJhbSB0ZXh0dXJlIHtQSVhJLlRleHR1cmV9IHRoZSB0ZXh0dXJlIHRvIHRpbnRcbiAqIEBwYXJhbSBjb2xvciB7bnVtYmVyfSB0aGUgY29sb3IgdG8gdXNlIHRvIHRpbnQgdGhlIHNwcml0ZSB3aXRoXG4gKiBAcGFyYW0gY2FudmFzIHtIVE1MQ2FudmFzRWxlbWVudH0gdGhlIGN1cnJlbnQgY2FudmFzXG4gKi9cbkNhbnZhc1RpbnRlci50aW50V2l0aFBlclBpeGVsID0gZnVuY3Rpb24gKHRleHR1cmUsIGNvbG9yLCBjYW52YXMpXG57XG4gICAgdmFyIGNvbnRleHQgPSBjYW52YXMuZ2V0Q29udGV4dCggJzJkJyApO1xuXG4gICAgdmFyIHJlc29sdXRpb24gPSB0ZXh0dXJlLmJhc2VUZXh0dXJlLnJlc29sdXRpb247XG5cbiAgICB2YXIgY3JvcCA9IHRleHR1cmUuY3JvcC5jbG9uZSgpO1xuICAgIGNyb3AueCAqPSByZXNvbHV0aW9uO1xuICAgIGNyb3AueSAqPSByZXNvbHV0aW9uO1xuICAgIGNyb3Aud2lkdGggKj0gcmVzb2x1dGlvbjtcbiAgICBjcm9wLmhlaWdodCAqPSByZXNvbHV0aW9uO1xuXG4gICAgY2FudmFzLndpZHRoID0gY3JvcC53aWR0aDtcbiAgICBjYW52YXMuaGVpZ2h0ID0gY3JvcC5oZWlnaHQ7XG5cbiAgICBjb250ZXh0Lmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbiA9ICdjb3B5JztcbiAgICBjb250ZXh0LmRyYXdJbWFnZShcbiAgICAgICAgdGV4dHVyZS5iYXNlVGV4dHVyZS5zb3VyY2UsXG4gICAgICAgIGNyb3AueCxcbiAgICAgICAgY3JvcC55LFxuICAgICAgICBjcm9wLndpZHRoLFxuICAgICAgICBjcm9wLmhlaWdodCxcbiAgICAgICAgMCxcbiAgICAgICAgMCxcbiAgICAgICAgY3JvcC53aWR0aCxcbiAgICAgICAgY3JvcC5oZWlnaHRcbiAgICApO1xuXG4gICAgdmFyIHJnYlZhbHVlcyA9IHV0aWxzLmhleDJyZ2IoY29sb3IpO1xuICAgIHZhciByID0gcmdiVmFsdWVzWzBdLCBnID0gcmdiVmFsdWVzWzFdLCBiID0gcmdiVmFsdWVzWzJdO1xuXG4gICAgdmFyIHBpeGVsRGF0YSA9IGNvbnRleHQuZ2V0SW1hZ2VEYXRhKDAsIDAsIGNyb3Aud2lkdGgsIGNyb3AuaGVpZ2h0KTtcblxuICAgIHZhciBwaXhlbHMgPSBwaXhlbERhdGEuZGF0YTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcGl4ZWxzLmxlbmd0aDsgaSArPSA0KVxuICAgIHtcbiAgICAgICAgcGl4ZWxzW2krMF0gKj0gcjtcbiAgICAgICAgcGl4ZWxzW2krMV0gKj0gZztcbiAgICAgICAgcGl4ZWxzW2krMl0gKj0gYjtcbiAgICB9XG5cbiAgICBjb250ZXh0LnB1dEltYWdlRGF0YShwaXhlbERhdGEsIDAsIDApO1xufTtcblxuLyoqXG4gKiBSb3VuZHMgdGhlIHNwZWNpZmllZCBjb2xvciBhY2NvcmRpbmcgdG8gdGhlIENhbnZhc1RpbnRlci5jYWNoZVN0ZXBzUGVyQ29sb3JDaGFubmVsLlxuICpcbiAqIEBwYXJhbSBjb2xvciB7bnVtYmVyfSB0aGUgY29sb3IgdG8gcm91bmQsIHNob3VsZCBiZSBhIGhleCBjb2xvclxuICovXG5DYW52YXNUaW50ZXIucm91bmRDb2xvciA9IGZ1bmN0aW9uIChjb2xvcilcbntcbiAgICB2YXIgc3RlcCA9IENhbnZhc1RpbnRlci5jYWNoZVN0ZXBzUGVyQ29sb3JDaGFubmVsO1xuXG4gICAgdmFyIHJnYlZhbHVlcyA9IHV0aWxzLmhleDJyZ2IoY29sb3IpO1xuXG4gICAgcmdiVmFsdWVzWzBdID0gTWF0aC5taW4oMjU1LCAocmdiVmFsdWVzWzBdIC8gc3RlcCkgKiBzdGVwKTtcbiAgICByZ2JWYWx1ZXNbMV0gPSBNYXRoLm1pbigyNTUsIChyZ2JWYWx1ZXNbMV0gLyBzdGVwKSAqIHN0ZXApO1xuICAgIHJnYlZhbHVlc1syXSA9IE1hdGgubWluKDI1NSwgKHJnYlZhbHVlc1syXSAvIHN0ZXApICogc3RlcCk7XG5cbiAgICByZXR1cm4gdXRpbHMucmdiMmhleChyZ2JWYWx1ZXMpO1xufTtcblxuLyoqXG4gKiBOdW1iZXIgb2Ygc3RlcHMgd2hpY2ggd2lsbCBiZSB1c2VkIGFzIGEgY2FwIHdoZW4gcm91bmRpbmcgY29sb3JzLlxuICpcbiAqIEBtZW1iZXJcbiAqL1xuQ2FudmFzVGludGVyLmNhY2hlU3RlcHNQZXJDb2xvckNoYW5uZWwgPSA4O1xuXG4vKipcbiAqIFRpbnQgY2FjaGUgYm9vbGVhbiBmbGFnLlxuICpcbiAqIEBtZW1iZXJcbiAqL1xuQ2FudmFzVGludGVyLmNvbnZlcnRUaW50VG9JbWFnZSA9IGZhbHNlO1xuXG4vKipcbiAqIFdoZXRoZXIgb3Igbm90IHRoZSBDYW52YXMgQmxlbmRNb2RlcyBhcmUgc3VwcG9ydGVkLCBjb25zZXF1ZW50bHkgdGhlIGFiaWxpdHkgdG8gdGludCB1c2luZyB0aGUgbXVsdGlwbHkgbWV0aG9kLlxuICpcbiAqIEBtZW1iZXJcbiAqL1xuQ2FudmFzVGludGVyLmNhblVzZU11bHRpcGx5ID0gdXRpbHMuY2FuVXNlTmV3Q2FudmFzQmxlbmRNb2RlcygpO1xuXG4vKipcbiAqIFRoZSB0aW50aW5nIG1ldGhvZCB0aGF0IHdpbGwgYmUgdXNlZC5cbiAqXG4gKi9cbkNhbnZhc1RpbnRlci50aW50TWV0aG9kID0gQ2FudmFzVGludGVyLmNhblVzZU11bHRpcGx5ID8gQ2FudmFzVGludGVyLnRpbnRXaXRoTXVsdGlwbHkgOiAgQ2FudmFzVGludGVyLnRpbnRXaXRoUGVyUGl4ZWw7XG4iLCJ2YXIgR0xUZXh0dXJlID0gcmVxdWlyZSgncGl4aS1nbC1jb3JlJykuR0xUZXh0dXJlLFxuXHR1dGlscyA9IHJlcXVpcmUoJy4uLy4uL3V0aWxzJyk7XG5cbi8qKlxuICogSGVscGVyIGNsYXNzIHRvIGNyZWF0ZSBhIHdlYkdMIFRleHR1cmVcbiAqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gZ2wge1dlYkdMUmVuZGVyaW5nQ29udGV4dH1cbiAqL1xuXG52YXIgVGV4dHVyZU1hbmFnZXIgPSBmdW5jdGlvbihnbClcbntcblx0dGhpcy5nbCA9IGdsO1xuXG5cdC8vIHRyYWNrIHRleHR1cmVzIGluIHRoZSByZW5kZXJlciBzbyB3ZSBjYW4gbm8gbG9uZ2VyIGxpc3RlbiB0byB0aGVtIG9uIGRlc3RydWN0aW9uLlxuXHR0aGlzLl9tYW5hZ2VkVGV4dHVyZXMgPSBbXTtcbiAgICB0aGlzLmdsVGV4dHVyZXMgPSB7fTtcblxufVxuXG5UZXh0dXJlTWFuYWdlci5wcm90b3R5cGUuYmluZFRleHR1cmUgPSBmdW5jdGlvbih0ZXh0dXJlKVxue1xuXG59XG5cblxuVGV4dHVyZU1hbmFnZXIucHJvdG90eXBlLmdldFRleHR1cmUgPSBmdW5jdGlvbih0ZXh0dXJlKVxue1xuXG59XG5cbi8qKlxuICogVXBkYXRlcyBhbmQvb3IgQ3JlYXRlcyBhIFdlYkdMIHRleHR1cmUgZm9yIHRoZSByZW5kZXJlcidzIGNvbnRleHQuXG4gKlxuICogQHBhcmFtIHRleHR1cmUge1BJWEkuQmFzZVRleHR1cmV8UElYSS5UZXh0dXJlfSB0aGUgdGV4dHVyZSB0byB1cGRhdGVcbiAqL1xuVGV4dHVyZU1hbmFnZXIucHJvdG90eXBlLnVwZGF0ZVRleHR1cmUgPSBmdW5jdGlvbih0ZXh0dXJlKVxue1xuXHR0ZXh0dXJlID0gdGV4dHVyZS5iYXNlVGV4dHVyZSB8fCB0ZXh0dXJlO1xuXG5cdGlmICghdGV4dHVyZS5oYXNMb2FkZWQpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgXG4gICAgdmFyIGdsID0gdGhpcy5nbDtcbiAgICB2YXIgZ2xUZXh0dXJlID0gdGhpcy5nbFRleHR1cmVzW3RleHR1cmUudWlkXS8vdGV4dHVyZS5fZ2xUZXh0dXJlc1tnbC5pZF07XG5cbiAgICBpZiAoIWdsVGV4dHVyZSlcbiAgICB7XG4gICAgICAgIGdsVGV4dHVyZSA9IG5ldyBHTFRleHR1cmUoZ2wpO1xuICAgICAgICBnbFRleHR1cmUucHJlbXVsdGlwbHlBbHBoYSA9IHRydWVcbiAgICAgICAgdGV4dHVyZS5fZ2xUZXh0dXJlc1tnbC5pZF0gPSBnbFRleHR1cmU7XG5cbiAgICAgICAvLyB0aGlzLmdsVGV4dHVyZXNbdGV4dHVyZS51aWRdID0gZ2xUZXh0dXJlO1xuXG4gICAgICAgIHRleHR1cmUub24oJ3VwZGF0ZScsIHRoaXMudXBkYXRlVGV4dHVyZSwgdGhpcyk7XG4gICAgICAgIHRleHR1cmUub24oJ2Rpc3Bvc2UnLCB0aGlzLmRlc3Ryb3lUZXh0dXJlLCB0aGlzKTtcbiAgICAgICAgXG4gICAgICAgIHRoaXMuX21hbmFnZWRUZXh0dXJlcy5wdXNoKHRleHR1cmUpO1xuICAgIH1cblxuICAgIGdsVGV4dHVyZS51cGxvYWQodGV4dHVyZS5zb3VyY2UpO1xuICAgIFxuICAgIC8vVE9ETyBjaGVjayBpcyBwb3dlciBvZiB0d28uLlxuICAgIGdsVGV4dHVyZS5lbmFibGVXcmFwQ2xhbXAoKTtcblxuXG4gICAgLy8gVE9ETyBjaGVjayBmb3Igc2NhbGluZyB0eXBlXG4gICAgZ2xUZXh0dXJlLmVuYWJsZUxpbmVhclNjYWxpbmcoKTtcblxuICAgIHJldHVybiAgdGV4dHVyZS5fZ2xUZXh0dXJlc1tnbC5pZF07XG59XG5cbi8qKlxuICogRGVsZXRlcyB0aGUgdGV4dHVyZSBmcm9tIFdlYkdMXG4gKlxuICogQHBhcmFtIHRleHR1cmUge1BJWEkuQmFzZVRleHR1cmV8UElYSS5UZXh0dXJlfSB0aGUgdGV4dHVyZSB0byBkZXN0cm95XG4gKi9cblRleHR1cmVNYW5hZ2VyLnByb3RvdHlwZS5kZXN0cm95VGV4dHVyZSA9IGZ1bmN0aW9uKHRleHR1cmUsIF9za2lwUmVtb3ZlKVxue1xuXHR0ZXh0dXJlID0gdGV4dHVyZS5iYXNlVGV4dHVyZSB8fCB0ZXh0dXJlO1xuXG4gICAgaWYgKCF0ZXh0dXJlLmhhc0xvYWRlZClcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAodGV4dHVyZS5fZ2xUZXh0dXJlc1t0aGlzLmdsLmlkXSlcbiAgICB7XG4gICAgICAgIHRleHR1cmUuX2dsVGV4dHVyZXNbdGhpcy5nbC5pZF0uZGVzdHJveSgpO1xuICAgICAgICB0ZXh0dXJlLm9mZigndXBkYXRlJywgdGhpcy51cGRhdGVUZXh0dXJlLCB0aGlzKTtcbiAgICAgICAgdGV4dHVyZS5vZmYoJ2Rpc3Bvc2UnLCB0aGlzLmRlc3Ryb3lUZXh0dXJlLCB0aGlzKTtcblxuXG4gICAgICAgIGRlbGV0ZSB0ZXh0dXJlLl9nbFRleHR1cmVzW3RoaXMuZ2wuaWRdO1xuXG4gICAgICAgIGlmICghX3NraXBSZW1vdmUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHZhciBpID0gdGhpcy5fbWFuYWdlZFRleHR1cmVzLmluZGV4T2YodGV4dHVyZSk7XG4gICAgICAgICAgICBpZiAoaSAhPT0gLTEpIHtcbiAgICAgICAgICAgICAgICB1dGlscy5yZW1vdmVJdGVtcyh0aGlzLl9tYW5hZ2VkVGV4dHVyZXMsIGksIDEpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxufVxuXG5UZXh0dXJlTWFuYWdlci5wcm90b3R5cGUucmVtb3ZlQWxsID0gZnVuY3Rpb24oKVxue1xuXHQvLyBlbXB0eSBhbGwgdGhlIG9sZCBnbCB0ZXh0dXJlcyBhcyB0aGV5IGFyZSB1c2VsZXNzIG5vd1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5fbWFuYWdlZFRleHR1cmVzLmxlbmd0aDsgKytpKVxuICAgIHtcbiAgICAgICAgdmFyIHRleHR1cmUgPSB0aGlzLl9tYW5hZ2VkVGV4dHVyZXNbaV07XG4gICAgICAgIGlmICh0ZXh0dXJlLl9nbFRleHR1cmVzW3RoaXMuZ2wuaWRdKVxuICAgICAgICB7XG4gICAgICAgICAgICBkZWxldGUgdGV4dHVyZS5fZ2xUZXh0dXJlc1t0aGlzLmdsLmlkXTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuVGV4dHVyZU1hbmFnZXIucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbigpXG57XG4gICAgLy8gZGVzdHJveSBtYW5hZ2VkIHRleHR1cmVzXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLl9tYW5hZ2VkVGV4dHVyZXMubGVuZ3RoOyArK2kpXG4gICAge1xuICAgICAgICB2YXIgdGV4dHVyZSA9IHRoaXMuX21hbmFnZWRUZXh0dXJlc1tpXTtcbiAgICAgICAgdGhpcy5kZXN0cm95VGV4dHVyZSh0ZXh0dXJlLCB0cnVlKTtcbiAgICAgICAgdGV4dHVyZS5vZmYoJ3VwZGF0ZScsIHRoaXMudXBkYXRlVGV4dHVyZSwgdGhpcyk7XG4gICAgICAgIHRleHR1cmUub2ZmKCdkaXNwb3NlJywgdGhpcy5kZXN0cm95VGV4dHVyZSwgdGhpcyk7XG4gICAgfVxuXG4gICAgdGhpcy5fbWFuYWdlZFRleHR1cmVzID0gbnVsbDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBUZXh0dXJlTWFuYWdlcjtcblxuIiwidmFyIFN5c3RlbVJlbmRlcmVyID0gcmVxdWlyZSgnLi4vU3lzdGVtUmVuZGVyZXInKSxcbiAgICBTaGFkZXJNYW5hZ2VyID0gcmVxdWlyZSgnLi9tYW5hZ2Vycy9TaGFkZXJNYW5hZ2VyJyksXG4gICAgTWFza01hbmFnZXIgPSByZXF1aXJlKCcuL21hbmFnZXJzL01hc2tNYW5hZ2VyJyksXG4gICAgU3RlbmNpbE1hbmFnZXIgPSByZXF1aXJlKCcuL21hbmFnZXJzL1N0ZW5jaWxNYW5hZ2VyJyksXG4gICAgRmlsdGVyTWFuYWdlciA9IHJlcXVpcmUoJy4vbWFuYWdlcnMvRmlsdGVyTWFuYWdlcicpLFxuICAgIEJsZW5kTW9kZU1hbmFnZXIgPSByZXF1aXJlKCcuL21hbmFnZXJzL0JsZW5kTW9kZU1hbmFnZXInKSxcbiAgICBSZW5kZXJUYXJnZXQgPSByZXF1aXJlKCcuL3V0aWxzL1JlbmRlclRhcmdldCcpLFxuICAgIE9iamVjdFJlbmRlcmVyID0gcmVxdWlyZSgnLi91dGlscy9PYmplY3RSZW5kZXJlcicpLFxuICAgIEZYQUFGaWx0ZXIgPSByZXF1aXJlKCcuL2ZpbHRlcnMvRlhBQUZpbHRlcicpLFxuICAgIFRleHR1cmVNYW5hZ2VyID0gcmVxdWlyZSgnLi9UZXh0dXJlTWFuYWdlcicpLFxuICAgIGNyZWF0ZUNvbnRleHQgPSByZXF1aXJlKCdwaXhpLWdsLWNvcmUnKS5jcmVhdGVDb250ZXh0LFxuICAgIG1hcFdlYkdMQmxlbmRNb2Rlc1RvUGl4aSA9IHJlcXVpcmUoJy4vdXRpbHMvbWFwV2ViR0xCbGVuZE1vZGVzVG9QaXhpJyksXG4gICAgbWFwV2ViR0xEcmF3TW9kZXNUb1BpeGkgPSByZXF1aXJlKCcuL3V0aWxzL21hcFdlYkdMRHJhd01vZGVzVG9QaXhpJyksXG4gICAgdXRpbHMgPSByZXF1aXJlKCcuLi8uLi91dGlscycpLFxuICAgIENPTlNUID0gcmVxdWlyZSgnLi4vLi4vY29uc3QnKTtcblxuLyoqXG4gKiBUaGUgV2ViR0xSZW5kZXJlciBkcmF3cyB0aGUgc2NlbmUgYW5kIGFsbCBpdHMgY29udGVudCBvbnRvIGEgd2ViR0wgZW5hYmxlZCBjYW52YXMuIFRoaXMgcmVuZGVyZXJcbiAqIHNob3VsZCBiZSB1c2VkIGZvciBicm93c2VycyB0aGF0IHN1cHBvcnQgd2ViR0wuIFRoaXMgUmVuZGVyIHdvcmtzIGJ5IGF1dG9tYXRpY2FsbHkgbWFuYWdpbmcgd2ViR0xCYXRjaHMuXG4gKiBTbyBubyBuZWVkIGZvciBTcHJpdGUgQmF0Y2hlcyBvciBTcHJpdGUgQ2xvdWRzLlxuICogRG9uJ3QgZm9yZ2V0IHRvIGFkZCB0aGUgdmlldyB0byB5b3VyIERPTSBvciB5b3Ugd2lsbCBub3Qgc2VlIGFueXRoaW5nIDopXG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQGV4dGVuZHMgUElYSS5TeXN0ZW1SZW5kZXJlclxuICogQHBhcmFtIFt3aWR0aD0wXSB7bnVtYmVyfSB0aGUgd2lkdGggb2YgdGhlIGNhbnZhcyB2aWV3XG4gKiBAcGFyYW0gW2hlaWdodD0wXSB7bnVtYmVyfSB0aGUgaGVpZ2h0IG9mIHRoZSBjYW52YXMgdmlld1xuICogQHBhcmFtIFtvcHRpb25zXSB7b2JqZWN0fSBUaGUgb3B0aW9uYWwgcmVuZGVyZXIgcGFyYW1ldGVyc1xuICogQHBhcmFtIFtvcHRpb25zLnZpZXddIHtIVE1MQ2FudmFzRWxlbWVudH0gdGhlIGNhbnZhcyB0byB1c2UgYXMgYSB2aWV3LCBvcHRpb25hbFxuICogQHBhcmFtIFtvcHRpb25zLnRyYW5zcGFyZW50PWZhbHNlXSB7Ym9vbGVhbn0gSWYgdGhlIHJlbmRlciB2aWV3IGlzIHRyYW5zcGFyZW50LCBkZWZhdWx0IGZhbHNlXG4gKiBAcGFyYW0gW29wdGlvbnMuYXV0b1Jlc2l6ZT1mYWxzZV0ge2Jvb2xlYW59IElmIHRoZSByZW5kZXIgdmlldyBpcyBhdXRvbWF0aWNhbGx5IHJlc2l6ZWQsIGRlZmF1bHQgZmFsc2VcbiAqIEBwYXJhbSBbb3B0aW9ucy5hbnRpYWxpYXM9ZmFsc2VdIHtib29sZWFufSBzZXRzIGFudGlhbGlhcy4gSWYgbm90IGF2YWlsYWJsZSBuYXRpdmVseSB0aGVuIEZYQUEgYW50aWFsaWFzaW5nIGlzIHVzZWRcbiAqIEBwYXJhbSBbb3B0aW9ucy5mb3JjZUZYQUE9ZmFsc2VdIHtib29sZWFufSBmb3JjZXMgRlhBQSBhbnRpYWxpYXNpbmcgdG8gYmUgdXNlZCBvdmVyIG5hdGl2ZS4gRlhBQSBpcyBmYXN0ZXIsIGJ1dCBtYXkgbm90IGFsd2F5cyBsb29rIGFzIGdyZWF0XG4gKiBAcGFyYW0gW29wdGlvbnMucmVzb2x1dGlvbj0xXSB7bnVtYmVyfSB0aGUgcmVzb2x1dGlvbiBvZiB0aGUgcmVuZGVyZXIgcmV0aW5hIHdvdWxkIGJlIDJcbiAqIEBwYXJhbSBbb3B0aW9ucy5jbGVhckJlZm9yZVJlbmRlcj10cnVlXSB7Ym9vbGVhbn0gVGhpcyBzZXRzIGlmIHRoZSBDYW52YXNSZW5kZXJlciB3aWxsIGNsZWFyIHRoZSBjYW52YXMgb3JcbiAqICAgICAgbm90IGJlZm9yZSB0aGUgbmV3IHJlbmRlciBwYXNzLiBJZiB5b3Ugd2lzaCB0byBzZXQgdGhpcyB0byBmYWxzZSwgeW91ICptdXN0KiBzZXQgcHJlc2VydmVEcmF3aW5nQnVmZmVyIHRvIGB0cnVlYC5cbiAqIEBwYXJhbSBbb3B0aW9ucy5wcmVzZXJ2ZURyYXdpbmdCdWZmZXI9ZmFsc2VdIHtib29sZWFufSBlbmFibGVzIGRyYXdpbmcgYnVmZmVyIHByZXNlcnZhdGlvbiwgZW5hYmxlIHRoaXMgaWZcbiAqICAgICAgeW91IG5lZWQgdG8gY2FsbCB0b0RhdGFVcmwgb24gdGhlIHdlYmdsIGNvbnRleHQuXG4gKiBAcGFyYW0gW29wdGlvbnMucm91bmRQaXhlbHM9ZmFsc2VdIHtib29sZWFufSBJZiB0cnVlIFBpeGkgd2lsbCBNYXRoLmZsb29yKCkgeC95IHZhbHVlcyB3aGVuIHJlbmRlcmluZywgc3RvcHBpbmcgcGl4ZWwgaW50ZXJwb2xhdGlvbi5cbiAqL1xuZnVuY3Rpb24gV2ViR0xSZW5kZXJlcih3aWR0aCwgaGVpZ2h0LCBvcHRpb25zKVxue1xuICAgIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuXG4gICAgU3lzdGVtUmVuZGVyZXIuY2FsbCh0aGlzLCAnV2ViR0wnLCB3aWR0aCwgaGVpZ2h0LCBvcHRpb25zKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSB0eXBlIG9mIHRoaXMgcmVuZGVyZXIgYXMgYSBzdGFuZGFyZGlzZWQgY29uc3RcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn0vL1xuICAgICAqXG4gICAgICovXG4gICAgdGhpcy50eXBlID0gQ09OU1QuUkVOREVSRVJfVFlQRS5XRUJHTDtcblxuICAgIHRoaXMuaGFuZGxlQ29udGV4dExvc3QgPSB0aGlzLmhhbmRsZUNvbnRleHRMb3N0LmJpbmQodGhpcyk7XG4gICAgdGhpcy5oYW5kbGVDb250ZXh0UmVzdG9yZWQgPSB0aGlzLmhhbmRsZUNvbnRleHRSZXN0b3JlZC5iaW5kKHRoaXMpO1xuXG4gICAgdGhpcy52aWV3LmFkZEV2ZW50TGlzdGVuZXIoJ3dlYmdsY29udGV4dGxvc3QnLCB0aGlzLmhhbmRsZUNvbnRleHRMb3N0LCBmYWxzZSk7XG4gICAgdGhpcy52aWV3LmFkZEV2ZW50TGlzdGVuZXIoJ3dlYmdsY29udGV4dHJlc3RvcmVkJywgdGhpcy5oYW5kbGVDb250ZXh0UmVzdG9yZWQsIGZhbHNlKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBvcHRpb25zIHBhc3NlZCBpbiB0byBjcmVhdGUgYSBuZXcgd2ViZ2wgY29udGV4dC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge29iamVjdH1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX2NvbnRleHRPcHRpb25zID0ge1xuICAgICAgICBhbHBoYTogdGhpcy50cmFuc3BhcmVudCxcbiAgICAgICAgYW50aWFsaWFzOiBvcHRpb25zLmFudGlhbGlhcyxcbiAgICAgICAgcHJlbXVsdGlwbGllZEFscGhhOiB0aGlzLnRyYW5zcGFyZW50ICYmIHRoaXMudHJhbnNwYXJlbnQgIT09ICdub3RNdWx0aXBsaWVkJyxcbiAgICAgICAgc3RlbmNpbDogdHJ1ZSxcbiAgICAgICAgcHJlc2VydmVEcmF3aW5nQnVmZmVyOiBvcHRpb25zLnByZXNlcnZlRHJhd2luZ0J1ZmZlclxuICAgIH07XG5cbiAgICB0aGlzLl9iYWNrZ3JvdW5kQ29sb3JSZ2JhWzNdID0gdGhpcy50cmFuc3BhcmVudCA/IDAgOiAxO1xuXG4gICAgLyoqXG4gICAgICogRGVhbHMgd2l0aCBtYW5hZ2luZyB0aGUgc2hhZGVyIHByb2dyYW1zIGFuZCB0aGVpciBhdHRyaWJzLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5TaGFkZXJNYW5hZ2VyfVxuICAgICAqL1xuICAgIHRoaXMuc2hhZGVyTWFuYWdlciA9IG5ldyBTaGFkZXJNYW5hZ2VyKHRoaXMpO1xuXG4gICAgLyoqXG4gICAgICogTWFuYWdlcyB0aGUgbWFza3MgdXNpbmcgdGhlIHN0ZW5jaWwgYnVmZmVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5NYXNrTWFuYWdlcn1cbiAgICAgKi9cbiAgICB0aGlzLm1hc2tNYW5hZ2VyID0gbmV3IE1hc2tNYW5hZ2VyKHRoaXMpO1xuXG4gICAgLyoqXG4gICAgICogTWFuYWdlcyB0aGUgc3RlbmNpbCBidWZmZXIuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlN0ZW5jaWxNYW5hZ2VyfVxuICAgICAqL1xuICAgIHRoaXMuc3RlbmNpbE1hbmFnZXIgPSBuZXcgU3RlbmNpbE1hbmFnZXIodGhpcyk7XG5cbiAgICAvKipcbiAgICAgKiBNYW5hZ2VzIHRoZSBmaWx0ZXJzLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5GaWx0ZXJNYW5hZ2VyfVxuICAgICAqL1xuICAgIHRoaXMuZmlsdGVyTWFuYWdlciA9IG5ldyBGaWx0ZXJNYW5hZ2VyKHRoaXMpO1xuXG4gICAgLyoqXG4gICAgICogTWFuYWdlcyB0aGUgYmxlbmRNb2Rlc1xuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5CbGVuZE1vZGVNYW5hZ2VyfVxuICAgICAqL1xuICAgIHRoaXMuYmxlbmRNb2RlTWFuYWdlciA9IG5ldyBCbGVuZE1vZGVNYW5hZ2VyKHRoaXMpO1xuXG4gICAgXG4gICAgLyoqXG4gICAgICogVGhlIGN1cnJlbnRseSBhY3RpdmUgT2JqZWN0UmVuZGVyZXIuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLk9iamVjdFJlbmRlcmVyfVxuICAgICAqL1xuICAgIHRoaXMuY3VycmVudFJlbmRlcmVyID0gbmV3IE9iamVjdFJlbmRlcmVyKHRoaXMpO1xuXG4gICAgdGhpcy5pbml0UGx1Z2lucygpO1xuXG4gICAgLy8gaW5pdGlhbGl6ZSB0aGUgY29udGV4dCBzbyBpdCBpcyByZWFkeSBmb3IgdGhlIG1hbmFnZXJzLlxuICAgIHRoaXMuZ2wgPSBjcmVhdGVDb250ZXh0KHRoaXMudmlldywgdGhpcy5fY29udGV4dE9wdGlvbnMpO1xuXG4gICAgdGhpcy5faW5pdENvbnRleHQoKTtcblxuICAgIC8vIG1hcCBzb21lIHdlYkdMIGJsZW5kIGFuZCBkcmF3bW9kZXMuLlxuICAgIHRoaXMuYmxlbmRNb2RlcyA9IG1hcFdlYkdMQmxlbmRNb2Rlc1RvUGl4aShnbCk7XG4gICAgdGhpcy5kcmF3TW9kZXMgPSBtYXBXZWJHTERyYXdNb2Rlc1RvUGl4aShnbClcblxuICAgIHRoaXMuX2FjdGl2ZVNoYWRlciA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBIb2xkcyB0aGUgY3VycmVudCByZW5kZXIgdGFyZ2V0XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlJlbmRlclRhcmdldH1cbiAgICAgKi9cbiAgICB0aGlzLl9hY3RpdmVSZW5kZXJUYXJnZXQgPSBudWxsO1xuICAgIHRoaXMuX2FjdGl2ZVRleHR1cmVMb2NhdGlvbiA9IG51bGw7XG4gICAgdGhpcy5fYWN0aXZlVGV4dHVyZSA9IG51bGw7XG59XG5cbi8vIGNvbnN0cnVjdG9yXG5XZWJHTFJlbmRlcmVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoU3lzdGVtUmVuZGVyZXIucHJvdG90eXBlKTtcbldlYkdMUmVuZGVyZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gV2ViR0xSZW5kZXJlcjtcbm1vZHVsZS5leHBvcnRzID0gV2ViR0xSZW5kZXJlcjtcbnV0aWxzLnBsdWdpblRhcmdldC5taXhpbihXZWJHTFJlbmRlcmVyKTtcblxuLyoqXG4gKiBDcmVhdGVzIHRoZSBXZWJHTCBjb250ZXh0XG4gKlxuICogQHByaXZhdGVcbiAqL1xuV2ViR0xSZW5kZXJlci5wcm90b3R5cGUuX2luaXRDb250ZXh0ID0gZnVuY3Rpb24gKClcbntcbiAgICB2YXIgZ2wgPSB0aGlzLmdsO1xuXG4gICAgLy8gY3JlYXRlIGEgdGV4dHVyZSBtYW5hZ2VyLi4uXG4gICAgdGhpcy50ZXh0dXJlTWFuYWdlciA9IG5ldyBUZXh0dXJlTWFuYWdlcihnbCk7XG5cbiAgICAvLyBzZXQgdXAgdGhlIGRlZmF1bHQgcGl4aSBzZXR0aW5ncy4uXG4gICAgZ2wuZGlzYWJsZShnbC5ERVBUSF9URVNUKTtcbiAgICBnbC5kaXNhYmxlKGdsLkNVTExfRkFDRSk7XG4gICAgZ2wuZW5hYmxlKGdsLkJMRU5EKTtcblxuXG4gICAgdGhpcy5yb290UmVuZGVyVGFyZ2V0ID0gbmV3IFJlbmRlclRhcmdldChnbCwgdGhpcy53aWR0aCwgdGhpcy5oZWlnaHQsIG51bGwsIHRoaXMucmVzb2x1dGlvbiwgdHJ1ZSk7XG4gICAgdGhpcy5yb290UmVuZGVyVGFyZ2V0LmNsZWFyQ29sb3IgPSB0aGlzLl9iYWNrZ3JvdW5kQ29sb3JSZ2JhO1xuICAgIFxuICAgIHRoaXMuYmluZFJlbmRlclRhcmdldCh0aGlzLnJvb3RSZW5kZXJUYXJnZXQpO1xuXG4gICAgdGhpcy5lbWl0KCdjb250ZXh0JywgZ2wpO1xuXG4gICAgLy8gc2V0dXAgdGhlIHdpZHRoL2hlaWdodCBwcm9wZXJ0aWVzIGFuZCBnbCB2aWV3cG9ydFxuICAgIHRoaXMucmVzaXplKHRoaXMud2lkdGgsIHRoaXMuaGVpZ2h0KTsgICAgXG59O1xuXG4vKipcbiAqIFJlbmRlcnMgdGhlIG9iamVjdCB0byBpdHMgd2ViR0wgdmlld1xuICpcbiAqIEBwYXJhbSBvYmplY3Qge1BJWEkuRGlzcGxheU9iamVjdH0gdGhlIG9iamVjdCB0byBiZSByZW5kZXJlZFxuICovXG5XZWJHTFJlbmRlcmVyLnByb3RvdHlwZS5yZW5kZXIgPSBmdW5jdGlvbiAoZGlzcGxheU9iamVjdClcbntcbiAgICB0aGlzLmVtaXQoJ3ByZXJlbmRlcicpO1xuXG4gICAgLy8gbm8gcG9pbnQgcmVuZGVyaW5nIGlmIG91ciBjb250ZXh0IGhhcyBiZWVuIGJsb3duIHVwIVxuICAgIGlmICh0aGlzLmdsLmlzQ29udGV4dExvc3QoKSlcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLl9sYXN0T2JqZWN0UmVuZGVyZWQgPSBkaXNwbGF5T2JqZWN0O1xuXG4gICAgdmFyIGNhY2hlUGFyZW50ID0gZGlzcGxheU9iamVjdC5wYXJlbnQ7XG4gICAgZGlzcGxheU9iamVjdC5wYXJlbnQgPSB0aGlzLl90ZW1wRGlzcGxheU9iamVjdFBhcmVudDtcbiAgICAvLyB1cGRhdGUgdGhlIHNjZW5lIGdyYXBoXG4gICAgZGlzcGxheU9iamVjdC51cGRhdGVUcmFuc2Zvcm0oKTtcbiAgICBkaXNwbGF5T2JqZWN0LnBhcmVudCA9IGNhY2hlUGFyZW50O1xuXG4gICAgdGhpcy5yZW5kZXJEaXNwbGF5T2JqZWN0KGRpc3BsYXlPYmplY3QsIHRoaXMucm9vdFJlbmRlclRhcmdldCwgdGhpcy5jbGVhckJlZm9yZVJlbmRlcik7Ly90aGlzLnByb2plY3Rpb24pO1xuXG4gICAgdGhpcy5lbWl0KCdwb3N0cmVuZGVyJyk7XG59O1xuXG4vKipcbiAqIFJlbmRlcnMgYSBEaXNwbGF5IE9iamVjdC5cbiAqXG4gKiBAcGFyYW0gZGlzcGxheU9iamVjdCB7UElYSS5EaXNwbGF5T2JqZWN0fSBUaGUgRGlzcGxheU9iamVjdCB0byByZW5kZXJcbiAqIEBwYXJhbSByZW5kZXJUYXJnZXQge1BJWEkuUmVuZGVyVGFyZ2V0fSBUaGUgcmVuZGVyIHRhcmdldCB0byB1c2UgdG8gcmVuZGVyIHRoaXMgZGlzcGxheSBvYmplY3RcbiAqXG4gKi9cbldlYkdMUmVuZGVyZXIucHJvdG90eXBlLnJlbmRlckRpc3BsYXlPYmplY3QgPSBmdW5jdGlvbiAoZGlzcGxheU9iamVjdCwgcmVuZGVyVGFyZ2V0LCBjbGVhcikvL3Byb2plY3Rpb24sIGJ1ZmZlcilcbntcbiAgICB0aGlzLmJpbmRSZW5kZXJUYXJnZXQocmVuZGVyVGFyZ2V0KTtcblxuICAgIGlmKGNsZWFyKVxuICAgIHtcbiAgICAgICAgcmVuZGVyVGFyZ2V0LmNsZWFyKCk7XG4gICAgfVxuXG4gICAgLy8gc3RhcnQgdGhlIGZpbHRlciBtYW5hZ2VyXG4gICAgdGhpcy5maWx0ZXJNYW5hZ2VyLnNldEZpbHRlclN0YWNrKCByZW5kZXJUYXJnZXQuZmlsdGVyU3RhY2sgKTtcblxuICAgIC8vIHJlbmRlciB0aGUgc2NlbmUhXG4gICAgZGlzcGxheU9iamVjdC5yZW5kZXJXZWJHTCh0aGlzKTtcblxuICAgIC8vIGZpbmlzaCB0aGUgY3VycmVudCByZW5kZXJlci4uXG4gICAgdGhpcy5jdXJyZW50UmVuZGVyZXIuZmx1c2goKTtcbn07XG5cbi8qKlxuICogQ2hhbmdlcyB0aGUgY3VycmVudCByZW5kZXJlciB0byB0aGUgb25lIGdpdmVuIGluIHBhcmFtZXRlclxuICpcbiAqIEBwYXJhbSBvYmplY3RSZW5kZXJlciB7UElYSS5PYmplY3RSZW5kZXJlcn0gVGhlIG9iamVjdCByZW5kZXJlciB0byB1c2UuXG4gKi9cbldlYkdMUmVuZGVyZXIucHJvdG90eXBlLnNldE9iamVjdFJlbmRlcmVyID0gZnVuY3Rpb24gKG9iamVjdFJlbmRlcmVyKVxue1xuICAgIGlmICh0aGlzLmN1cnJlbnRSZW5kZXJlciA9PT0gb2JqZWN0UmVuZGVyZXIpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5jdXJyZW50UmVuZGVyZXIuc3RvcCgpO1xuICAgIHRoaXMuY3VycmVudFJlbmRlcmVyID0gb2JqZWN0UmVuZGVyZXI7XG4gICAgdGhpcy5jdXJyZW50UmVuZGVyZXIuc3RhcnQoKTtcbn07XG5cbi8qKlxuICogUmVzaXplcyB0aGUgd2ViR0wgdmlldyB0byB0aGUgc3BlY2lmaWVkIHdpZHRoIGFuZCBoZWlnaHQuXG4gKlxuICogQHBhcmFtIHdpZHRoIHtudW1iZXJ9IHRoZSBuZXcgd2lkdGggb2YgdGhlIHdlYkdMIHZpZXdcbiAqIEBwYXJhbSBoZWlnaHQge251bWJlcn0gdGhlIG5ldyBoZWlnaHQgb2YgdGhlIHdlYkdMIHZpZXdcbiAqL1xuV2ViR0xSZW5kZXJlci5wcm90b3R5cGUucmVzaXplID0gZnVuY3Rpb24gKHdpZHRoLCBoZWlnaHQpXG57XG4gICAgU3lzdGVtUmVuZGVyZXIucHJvdG90eXBlLnJlc2l6ZS5jYWxsKHRoaXMsIHdpZHRoLCBoZWlnaHQpO1xuXG4gICAgdGhpcy5maWx0ZXJNYW5hZ2VyLnJlc2l6ZSh3aWR0aCwgaGVpZ2h0KTtcbiAgICB0aGlzLnJvb3RSZW5kZXJUYXJnZXQucmVzaXplKHdpZHRoLCBoZWlnaHQpO1xuXG4gICAgaWYodGhpcy5jdXJyZW50UmVuZGVyVGFyZ2V0ID09PSB0aGlzLnJlbmRlclRhcmdldClcbiAgICB7XG4gICAgICAgIHRoaXMucm9vdFJlbmRlclRhcmdldC5hY3RpdmF0ZSgpO1xuICAgIH1cbn07XG5cbi8qKlxuICogQ2hhbmdlcyB0aGUgY3VycmVudCByZW5kZXIgdGFyZ2V0IHRvIHRoZSBvbmUgZ2l2ZW4gaW4gcGFyYW1ldGVyXG4gKlxuICogQHBhcmFtIHJlbmRlclRhcmdldCB7UElYSS5SZW5kZXJUYXJnZXR9IHRoZSBuZXcgcmVuZGVyIHRhcmdldFxuICovXG5XZWJHTFJlbmRlcmVyLnByb3RvdHlwZS5iaW5kUmVuZGVyVGFyZ2V0ID0gZnVuY3Rpb24gKHJlbmRlclRhcmdldCkvL3Byb2plY3Rpb24sIGJ1ZmZlcilcbntcbiAgICBpZihyZW5kZXJUYXJnZXQgIT09IHRoaXMuX2FjdGl2ZVJlbmRlclRhcmdldClcbiAgICB7XG4gICAgICAgIHRoaXMuX2FjdGl2ZVJlbmRlclRhcmdldCA9IHJlbmRlclRhcmdldDtcblxuICAgICAgICBpZih0aGlzLl9hY3RpdmVTaGFkZXIpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuX2FjdGl2ZVNoYWRlci51bmlmb3Jtcy5wcm9qZWN0aW9uTWF0cml4ID0gcmVuZGVyVGFyZ2V0LnByb2plY3Rpb25NYXRyaXgudG9BcnJheSh0cnVlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJlbmRlclRhcmdldC5hY3RpdmF0ZSgpO1xuXG4gICAgICAgIHRoaXMuc3RlbmNpbE1hbmFnZXIuc2V0TWFza1N0YWNrKCByZW5kZXJUYXJnZXQuc3RlbmNpbE1hc2tTdGFjayApO1xuICAgIH1cbn1cblxuV2ViR0xSZW5kZXJlci5wcm90b3R5cGUuYmluZFNoYWRlciA9IGZ1bmN0aW9uIChzaGFkZXIpLy9wcm9qZWN0aW9uLCBidWZmZXIpXG57XG4gICAgLy9UT0RPIGNhY2hlXG4gICAgaWYodGhpcy5fYWN0aXZlU2hhZGVyICE9PSBzaGFkZXIpXG4gICAge1xuICAgICAgICB0aGlzLl9hY3RpdmVTaGFkZXIgPSBzaGFkZXI7XG4gICAgICAgIHNoYWRlci5iaW5kKCk7XG5cbiAgICAgICAgLy8gYXV0b21hdGljYWxseSBzZXQgdGhlIHByb2plY3Rpb24gbWF0cml4XG4gICAgICAgIHNoYWRlci51bmlmb3Jtcy5wcm9qZWN0aW9uTWF0cml4ID0gdGhpcy5fYWN0aXZlUmVuZGVyVGFyZ2V0LnByb2plY3Rpb25NYXRyaXgudG9BcnJheSh0cnVlKTtcbiAgICB9XG59XG5cblxuV2ViR0xSZW5kZXJlci5wcm90b3R5cGUuYmluZFRleHR1cmUgPSBmdW5jdGlvbiAodGV4dHVyZSwgbG9jYXRpb24pXG57XG4gICAgdmFyIGdsID0gdGhpcy5nbDtcblxuICAgIC8vVE9ETyB0ZXN0IHBlcmYgb2YgY2FjaGU/XG4gICAgbG9jYXRpb24gPSBsb2NhdGlvbiB8fCAwO1xuXG4gICAgaWYodGhpcy5fYWN0aXZlVGV4dHVyZUxvY2F0aW9uICE9PSBsb2NhdGlvbikvL1xuICAgIHtcbiAgICAgICAgdGhpcy5fYWN0aXZlVGV4dHVyZUxvY2F0aW9uID0gbG9jYXRpb25cbiAgICAgICAgZ2wuYWN0aXZlVGV4dHVyZShnbC5URVhUVVJFMCArIGxvY2F0aW9uICk7XG4gICAgfVxuXG4gICAgLy9UT0RPIC0gY2FuIHdlIGNhY2hlIHRoaXMgdGV4dHVyZSB0b28/XG4gICAgdGhpcy5fYWN0aXZlVGV4dHVyZSA9IHRleHR1cmU7ICAgICAgXG4gICAgXG4gICAgaWYgKCF0ZXh0dXJlLl9nbFRleHR1cmVzW2dsLmlkXSlcbiAgICB7XG4gICAgICAgIC8vIHRoaXMgd2lsbCBhbHNvIGJpbmQgdGhlIHRleHR1cmUuLlxuICAgICAgICB0aGlzLnRleHR1cmVNYW5hZ2VyLnVwZGF0ZVRleHR1cmUodGV4dHVyZSk7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7ICAgXG4gICAgICAgIC8vIGJpbmQgdGhlIGN1cnJlbnQgdGV4dHVyZVxuICAgICAgICB0ZXh0dXJlLl9nbFRleHR1cmVzW2dsLmlkXS5iaW5kKCk7XG4gICAgfVxufVxuXG5cbi8qKlxuICogSGFuZGxlcyBhIGxvc3Qgd2ViZ2wgY29udGV4dFxuICpcbiAqIEBwcml2YXRlXG4gKi9cbldlYkdMUmVuZGVyZXIucHJvdG90eXBlLmhhbmRsZUNvbnRleHRMb3N0ID0gZnVuY3Rpb24gKGV2ZW50KVxue1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG59O1xuXG4vKipcbiAqIEhhbmRsZXMgYSByZXN0b3JlZCB3ZWJnbCBjb250ZXh0XG4gKlxuICogQHByaXZhdGVcbiAqL1xuV2ViR0xSZW5kZXJlci5wcm90b3R5cGUuaGFuZGxlQ29udGV4dFJlc3RvcmVkID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLl9pbml0Q29udGV4dCgpO1xuICAgIHRoaXMudGV4dHVyZU1hbmFnZXIucmVtb3ZlQWxsKCk7XG59O1xuXG4vKipcbiAqIFJlbW92ZXMgZXZlcnl0aGluZyBmcm9tIHRoZSByZW5kZXJlciAoZXZlbnQgbGlzdGVuZXJzLCBzcHJpdGViYXRjaCwgZXRjLi4uKVxuICpcbiAqIEBwYXJhbSBbcmVtb3ZlVmlldz1mYWxzZV0ge2Jvb2xlYW59IFJlbW92ZXMgdGhlIENhbnZhcyBlbGVtZW50IGZyb20gdGhlIERPTS5cbiAqL1xuV2ViR0xSZW5kZXJlci5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uIChyZW1vdmVWaWV3KVxue1xuICAgIHRoaXMuZGVzdHJveVBsdWdpbnMoKTtcblxuICAgIC8vIHJlbW92ZSBsaXN0ZW5lcnNcbiAgICB0aGlzLnZpZXcucmVtb3ZlRXZlbnRMaXN0ZW5lcignd2ViZ2xjb250ZXh0bG9zdCcsIHRoaXMuaGFuZGxlQ29udGV4dExvc3QpO1xuICAgIHRoaXMudmlldy5yZW1vdmVFdmVudExpc3RlbmVyKCd3ZWJnbGNvbnRleHRyZXN0b3JlZCcsIHRoaXMuaGFuZGxlQ29udGV4dFJlc3RvcmVkKTtcblxuICAgIHRoaXMudGV4dHVyZU1hbmFnZXIuZGVzdHJveUFsbCgpO1xuXG4gICAgLy8gY2FsbCBiYXNlIGRlc3Ryb3lcbiAgICBTeXN0ZW1SZW5kZXJlci5wcm90b3R5cGUuZGVzdHJveS5jYWxsKHRoaXMsIHJlbW92ZVZpZXcpO1xuXG4gICAgdGhpcy51aWQgPSAwO1xuXG4gICAgLy8gZGVzdHJveSB0aGUgbWFuYWdlcnNcbiAgICB0aGlzLnNoYWRlck1hbmFnZXIuZGVzdHJveSgpO1xuICAgIHRoaXMubWFza01hbmFnZXIuZGVzdHJveSgpO1xuICAgIHRoaXMuc3RlbmNpbE1hbmFnZXIuZGVzdHJveSgpO1xuICAgIHRoaXMuZmlsdGVyTWFuYWdlci5kZXN0cm95KCk7XG4gICAgdGhpcy5ibGVuZE1vZGVNYW5hZ2VyLmRlc3Ryb3koKTtcblxuICAgIHRoaXMuc2hhZGVyTWFuYWdlciA9IG51bGw7XG4gICAgdGhpcy5tYXNrTWFuYWdlciA9IG51bGw7XG4gICAgdGhpcy5maWx0ZXJNYW5hZ2VyID0gbnVsbDtcbiAgICB0aGlzLmJsZW5kTW9kZU1hbmFnZXIgPSBudWxsO1xuICAgIHRoaXMuY3VycmVudFJlbmRlcmVyID0gbnVsbDtcblxuICAgIHRoaXMuaGFuZGxlQ29udGV4dExvc3QgPSBudWxsO1xuICAgIHRoaXMuaGFuZGxlQ29udGV4dFJlc3RvcmVkID0gbnVsbDtcblxuICAgIHRoaXMuX2NvbnRleHRPcHRpb25zID0gbnVsbDtcblxuICAgIHRoaXMuZ2wudXNlUHJvZ3JhbShudWxsKTtcbiAgICB0aGlzLmdsID0gbnVsbDtcbn07XG5cbiIsInZhciBEZWZhdWx0U2hhZGVyID0gcmVxdWlyZSgnLi4vc2hhZGVycy9UZXh0dXJlU2hhZGVyJyk7XG5cbi8qKlxuICogVGhpcyBpcyB0aGUgYmFzZSBjbGFzcyBmb3IgY3JlYXRpbmcgYSBQSVhJIGZpbHRlci4gQ3VycmVudGx5IG9ubHkgV2ViR0wgc3VwcG9ydHMgZmlsdGVycy5cbiAqIElmIHlvdSB3YW50IHRvIG1ha2UgYSBjdXN0b20gZmlsdGVyIHRoaXMgc2hvdWxkIGJlIHlvdXIgYmFzZSBjbGFzcy5cbiAqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gdmVydGV4U3JjIHtzdHJpbmd8c3RyaW5nW119IFRoZSB2ZXJ0ZXggc2hhZGVyIHNvdXJjZSBhcyBhbiBhcnJheSBvZiBzdHJpbmdzLlxuICogQHBhcmFtIGZyYWdtZW50U3JjIHtzdHJpbmd8c3RyaW5nW119IFRoZSBmcmFnbWVudCBzaGFkZXIgc291cmNlIGFzIGFuIGFycmF5IG9mIHN0cmluZ3MuXG4gKiBAcGFyYW0gdW5pZm9ybXMge29iamVjdH0gQW4gb2JqZWN0IGNvbnRhaW5pbmcgdGhlIHVuaWZvcm1zIGZvciB0aGlzIGZpbHRlci5cbiAqL1xuZnVuY3Rpb24gQWJzdHJhY3RGaWx0ZXIodmVydGV4U3JjLCBmcmFnbWVudFNyYywgdW5pZm9ybXMpXG57XG5cbiAgICAvKipcbiAgICAgKiBBbiBhcnJheSBvZiBzaGFkZXJzXG4gICAgICogQG1lbWJlciB7UElYSS5TaGFkZXJbXX1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuc2hhZGVycyA9IFtdO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGV4dHJhIHBhZGRpbmcgdGhhdCB0aGUgZmlsdGVyIG1pZ2h0IG5lZWRcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy5wYWRkaW5nID0gMDtcblxuICAgIC8qKlxuICAgICAqIFRoZSB1bmlmb3JtcyBhcyBhbiBvYmplY3RcbiAgICAgKiBAbWVtYmVyIHtvYmplY3R9XG4gICAgICovXG4gICAgdGhpcy51bmlmb3JtcyA9IHVuaWZvcm1zIHx8IHt9O1xuXG5cbiAgICAvKipcbiAgICAgKiBUaGUgY29kZSBvZiB0aGUgdmVydGV4IHNoYWRlclxuICAgICAqIEBtZW1iZXIge3N0cmluZ1tdfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy52ZXJ0ZXhTcmMgPSB2ZXJ0ZXhTcmMgfHwgRGVmYXVsdFNoYWRlci5kZWZhdWx0VmVydGV4U3JjO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGNvZGUgb2YgdGhlIGZyYW1lbnQgc2hhZGVyXG4gICAgICogQG1lbWJlciB7c3RyaW5nW119XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLmZyYWdtZW50U3JjID0gZnJhZ21lbnRTcmMgfHwgRGVmYXVsdFNoYWRlci5kZWZhdWx0RnJhZ21lbnRTcmM7XG5cbiAgICAvL1RPRE8gYSByZW1pbmRlciAtIHdvdWxkIGJlIGNvb2wgdG8gaGF2ZSBsb3dlciByZXMgZmlsdGVycyBhcyB0aGlzIHdvdWxkIGdpdmUgYmV0dGVyIHBlcmZvcm1hbmNlLlxuXG4gICAgLy90eXBlb2YgZnJhZ21lbnRTcmMgPT09ICdzdHJpbmcnID8gZnJhZ21lbnRTcmMuc3BsaXQoJycpIDogKGZyYWdtZW50U3JjIHx8IFtdKTtcblxufVxuXG5BYnN0cmFjdEZpbHRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBBYnN0cmFjdEZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gQWJzdHJhY3RGaWx0ZXI7XG5cbi8qKlxuICogR3JhYnMgYSBzaGFkZXIgZnJvbSB0aGUgY3VycmVudCByZW5kZXJlclxuICpcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5XZWJHTFJlbmRlcmVyfSBUaGUgcmVuZGVyZXIgdG8gcmV0cmlldmUgdGhlIHNoYWRlciBmcm9tXG4gKi9cbkFic3RyYWN0RmlsdGVyLnByb3RvdHlwZS5nZXRTaGFkZXIgPSBmdW5jdGlvbiAocmVuZGVyZXIpXG57XG4gICAgdmFyIGdsID0gcmVuZGVyZXIuZ2w7XG5cbiAgICB2YXIgc2hhZGVyID0gdGhpcy5zaGFkZXJzW2dsLmlkXTtcblxuICAgIGlmICghc2hhZGVyKVxuICAgIHtcbiAgICAgICAgc2hhZGVyID0gbmV3IERlZmF1bHRTaGFkZXIocmVuZGVyZXIuc2hhZGVyTWFuYWdlcixcbiAgICAgICAgICAgIHRoaXMudmVydGV4U3JjLFxuICAgICAgICAgICAgdGhpcy5mcmFnbWVudFNyYyxcbiAgICAgICAgICAgIHRoaXMudW5pZm9ybXMsXG4gICAgICAgICAgICB0aGlzLmF0dHJpYnV0ZXNcbiAgICAgICAgKTtcblxuICAgICAgICB0aGlzLnNoYWRlcnNbZ2wuaWRdID0gc2hhZGVyO1xuICAgIH1cblxuICAgIHJldHVybiBzaGFkZXI7XG59O1xuXG4vKipcbiAqIEFwcGxpZXMgdGhlIGZpbHRlclxuICpcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5XZWJHTFJlbmRlcmVyfSBUaGUgcmVuZGVyZXIgdG8gcmV0cmlldmUgdGhlIGZpbHRlciBmcm9tXG4gKiBAcGFyYW0gaW5wdXQge1BJWEkuUmVuZGVyVGFyZ2V0fVxuICogQHBhcmFtIG91dHB1dCB7UElYSS5SZW5kZXJUYXJnZXR9XG4gKiBAcGFyYW0gY2xlYXIge2Jvb2xlYW59IFdoZXRoZXIgb3Igbm90IHdlIHdhbnQgdG8gY2xlYXIgdGhlIG91dHB1dFRhcmdldFxuICovXG5BYnN0cmFjdEZpbHRlci5wcm90b3R5cGUuYXBwbHlGaWx0ZXIgPSBmdW5jdGlvbiAocmVuZGVyZXIsIGlucHV0LCBvdXRwdXQsIGNsZWFyKVxue1xuICAgIHZhciBzaGFkZXIgPSB0aGlzLmdldFNoYWRlcihyZW5kZXJlcik7XG5cbiAgICByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLmFwcGx5RmlsdGVyKHNoYWRlciwgaW5wdXQsIG91dHB1dCwgY2xlYXIpO1xufTtcblxuLyoqXG4gKiBTeW5jcyBhIHVuaWZvcm0gYmV0d2VlbiB0aGUgY2xhc3Mgb2JqZWN0IGFuZCB0aGUgc2hhZGVycy5cbiAqXG4gKi9cbkFic3RyYWN0RmlsdGVyLnByb3RvdHlwZS5zeW5jVW5pZm9ybSA9IGZ1bmN0aW9uICh1bmlmb3JtKVxue1xuICAgIGZvciAodmFyIGkgPSAwLCBqID0gdGhpcy5zaGFkZXJzLmxlbmd0aDsgaSA8IGo7ICsraSlcbiAgICB7XG4gICAgICAgIHRoaXMuc2hhZGVyc1tpXS5zeW5jVW5pZm9ybSh1bmlmb3JtKTtcbiAgICB9XG59O1xuIiwidmFyIEFic3RyYWN0RmlsdGVyID0gcmVxdWlyZSgnLi9BYnN0cmFjdEZpbHRlcicpO1xuLy8gQHNlZSBodHRwczovL2dpdGh1Yi5jb20vc3Vic3RhY2svYnJmcy9pc3N1ZXMvMjVcblxuXG4vKipcbiAqXG4gKiBCYXNpYyBGWEFBIGltcGxlbWVudGF0aW9uIGJhc2VkIG9uIHRoZSBjb2RlIG9uIGdlZWtzM2QuY29tIHdpdGggdGhlXG4gKiBtb2RpZmljYXRpb24gdGhhdCB0aGUgdGV4dHVyZTJETG9kIHN0dWZmIHdhcyByZW1vdmVkIHNpbmNlIGl0J3NcbiAqIHVuc3VwcG9ydGVkIGJ5IFdlYkdMLlxuICpcbiAqIC0tXG4gKiBGcm9tOlxuICogaHR0cHM6Ly9naXRodWIuY29tL21pdHN1aGlrby93ZWJnbC1tZWluY3JhZnRcbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQWJzdHJhY3RGaWx0ZXJcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKlxuICovXG5mdW5jdGlvbiBGWEFBRmlsdGVyKClcbntcbiAgICBBYnN0cmFjdEZpbHRlci5jYWxsKHRoaXMsXG4gICAgICAgIC8vIHZlcnRleCBzaGFkZXJcbiAgICAgICAgXCJcXG5wcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcXG5cXG5hdHRyaWJ1dGUgdmVjMiBhVmVydGV4UG9zaXRpb247XFxuYXR0cmlidXRlIHZlYzIgYVRleHR1cmVDb29yZDtcXG5hdHRyaWJ1dGUgdmVjNCBhQ29sb3I7XFxuXFxudW5pZm9ybSBtYXQzIHByb2plY3Rpb25NYXRyaXg7XFxudW5pZm9ybSB2ZWMyIHJlc29sdXRpb247XFxuXFxudmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7XFxudmFyeWluZyB2ZWM0IHZDb2xvcjtcXG5cXG52YXJ5aW5nIHZlYzIgdlJlc29sdXRpb247XFxuXFxuLy90ZXhjb29yZHMgY29tcHV0ZWQgaW4gdmVydGV4IHN0ZXBcXG4vL3RvIGF2b2lkIGRlcGVuZGVudCB0ZXh0dXJlIHJlYWRzXFxudmFyeWluZyB2ZWMyIHZfcmdiTlc7XFxudmFyeWluZyB2ZWMyIHZfcmdiTkU7XFxudmFyeWluZyB2ZWMyIHZfcmdiU1c7XFxudmFyeWluZyB2ZWMyIHZfcmdiU0U7XFxudmFyeWluZyB2ZWMyIHZfcmdiTTtcXG5cXG5cXG52b2lkIHRleGNvb3Jkcyh2ZWMyIGZyYWdDb29yZCwgdmVjMiByZXNvbHV0aW9uLFxcbiAgICAgICAgICAgIG91dCB2ZWMyIHZfcmdiTlcsIG91dCB2ZWMyIHZfcmdiTkUsXFxuICAgICAgICAgICAgb3V0IHZlYzIgdl9yZ2JTVywgb3V0IHZlYzIgdl9yZ2JTRSxcXG4gICAgICAgICAgICBvdXQgdmVjMiB2X3JnYk0pIHtcXG4gICAgdmVjMiBpbnZlcnNlVlAgPSAxLjAgLyByZXNvbHV0aW9uLnh5O1xcbiAgICB2X3JnYk5XID0gKGZyYWdDb29yZCArIHZlYzIoLTEuMCwgLTEuMCkpICogaW52ZXJzZVZQO1xcbiAgICB2X3JnYk5FID0gKGZyYWdDb29yZCArIHZlYzIoMS4wLCAtMS4wKSkgKiBpbnZlcnNlVlA7XFxuICAgIHZfcmdiU1cgPSAoZnJhZ0Nvb3JkICsgdmVjMigtMS4wLCAxLjApKSAqIGludmVyc2VWUDtcXG4gICAgdl9yZ2JTRSA9IChmcmFnQ29vcmQgKyB2ZWMyKDEuMCwgMS4wKSkgKiBpbnZlcnNlVlA7XFxuICAgIHZfcmdiTSA9IHZlYzIoZnJhZ0Nvb3JkICogaW52ZXJzZVZQKTtcXG59XFxuXFxudm9pZCBtYWluKHZvaWQpe1xcbiAgIGdsX1Bvc2l0aW9uID0gdmVjNCgocHJvamVjdGlvbk1hdHJpeCAqIHZlYzMoYVZlcnRleFBvc2l0aW9uLCAxLjApKS54eSwgMC4wLCAxLjApO1xcbiAgIHZUZXh0dXJlQ29vcmQgPSBhVGV4dHVyZUNvb3JkO1xcbiAgIHZDb2xvciA9IHZlYzQoYUNvbG9yLnJnYiAqIGFDb2xvci5hLCBhQ29sb3IuYSk7XFxuICAgdlJlc29sdXRpb24gPSByZXNvbHV0aW9uO1xcblxcbiAgIC8vY29tcHV0ZSB0aGUgdGV4dHVyZSBjb29yZHMgYW5kIHNlbmQgdGhlbSB0byB2YXJ5aW5nc1xcbiAgIHRleGNvb3JkcyhhVGV4dHVyZUNvb3JkICogcmVzb2x1dGlvbiwgcmVzb2x1dGlvbiwgdl9yZ2JOVywgdl9yZ2JORSwgdl9yZ2JTVywgdl9yZ2JTRSwgdl9yZ2JNKTtcXG59XFxuXCIsXG4gICAgICAgIC8vIGZyYWdtZW50IHNoYWRlclxuICAgICAgICBcInByZWNpc2lvbiBsb3dwIGZsb2F0O1xcblxcblxcbi8qKlxcbkJhc2ljIEZYQUEgaW1wbGVtZW50YXRpb24gYmFzZWQgb24gdGhlIGNvZGUgb24gZ2Vla3MzZC5jb20gd2l0aCB0aGVcXG5tb2RpZmljYXRpb24gdGhhdCB0aGUgdGV4dHVyZTJETG9kIHN0dWZmIHdhcyByZW1vdmVkIHNpbmNlIGl0J3NcXG51bnN1cHBvcnRlZCBieSBXZWJHTC5cXG5cXG4tLVxcblxcbkZyb206XFxuaHR0cHM6Ly9naXRodWIuY29tL21pdHN1aGlrby93ZWJnbC1tZWluY3JhZnRcXG5cXG5Db3B5cmlnaHQgKGMpIDIwMTEgYnkgQXJtaW4gUm9uYWNoZXIuXFxuXFxuU29tZSByaWdodHMgcmVzZXJ2ZWQuXFxuXFxuUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0XFxubW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZVxcbm1ldDpcXG5cXG4gICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodFxcbiAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci5cXG5cXG4gICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlXFxuICAgICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmdcXG4gICAgICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWRcXG4gICAgICB3aXRoIHRoZSBkaXN0cmlidXRpb24uXFxuXFxuICAgICogVGhlIG5hbWVzIG9mIHRoZSBjb250cmlidXRvcnMgbWF5IG5vdCBiZSB1c2VkIHRvIGVuZG9yc2Ugb3JcXG4gICAgICBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWNcXG4gICAgICBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uXFxuXFxuVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SU1xcblxcXCJBUyBJU1xcXCIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UXFxuTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SXFxuQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFRcXG5PV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCxcXG5TUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UXFxuTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsXFxuREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZXFxuVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVFxcbihJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRVxcbk9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuXFxuKi9cXG5cXG4jaWZuZGVmIEZYQUFfUkVEVUNFX01JTlxcbiAgICAjZGVmaW5lIEZYQUFfUkVEVUNFX01JTiAgICgxLjAvIDEyOC4wKVxcbiNlbmRpZlxcbiNpZm5kZWYgRlhBQV9SRURVQ0VfTVVMXFxuICAgICNkZWZpbmUgRlhBQV9SRURVQ0VfTVVMICAgKDEuMCAvIDguMClcXG4jZW5kaWZcXG4jaWZuZGVmIEZYQUFfU1BBTl9NQVhcXG4gICAgI2RlZmluZSBGWEFBX1NQQU5fTUFYICAgICA4LjBcXG4jZW5kaWZcXG5cXG4vL29wdGltaXplZCB2ZXJzaW9uIGZvciBtb2JpbGUsIHdoZXJlIGRlcGVuZGVudFxcbi8vdGV4dHVyZSByZWFkcyBjYW4gYmUgYSBib3R0bGVuZWNrXFxudmVjNCBmeGFhKHNhbXBsZXIyRCB0ZXgsIHZlYzIgZnJhZ0Nvb3JkLCB2ZWMyIHJlc29sdXRpb24sXFxuICAgICAgICAgICAgdmVjMiB2X3JnYk5XLCB2ZWMyIHZfcmdiTkUsXFxuICAgICAgICAgICAgdmVjMiB2X3JnYlNXLCB2ZWMyIHZfcmdiU0UsXFxuICAgICAgICAgICAgdmVjMiB2X3JnYk0pIHtcXG4gICAgdmVjNCBjb2xvcjtcXG4gICAgbWVkaXVtcCB2ZWMyIGludmVyc2VWUCA9IHZlYzIoMS4wIC8gcmVzb2x1dGlvbi54LCAxLjAgLyByZXNvbHV0aW9uLnkpO1xcbiAgICB2ZWMzIHJnYk5XID0gdGV4dHVyZTJEKHRleCwgdl9yZ2JOVykueHl6O1xcbiAgICB2ZWMzIHJnYk5FID0gdGV4dHVyZTJEKHRleCwgdl9yZ2JORSkueHl6O1xcbiAgICB2ZWMzIHJnYlNXID0gdGV4dHVyZTJEKHRleCwgdl9yZ2JTVykueHl6O1xcbiAgICB2ZWMzIHJnYlNFID0gdGV4dHVyZTJEKHRleCwgdl9yZ2JTRSkueHl6O1xcbiAgICB2ZWM0IHRleENvbG9yID0gdGV4dHVyZTJEKHRleCwgdl9yZ2JNKTtcXG4gICAgdmVjMyByZ2JNICA9IHRleENvbG9yLnh5ejtcXG4gICAgdmVjMyBsdW1hID0gdmVjMygwLjI5OSwgMC41ODcsIDAuMTE0KTtcXG4gICAgZmxvYXQgbHVtYU5XID0gZG90KHJnYk5XLCBsdW1hKTtcXG4gICAgZmxvYXQgbHVtYU5FID0gZG90KHJnYk5FLCBsdW1hKTtcXG4gICAgZmxvYXQgbHVtYVNXID0gZG90KHJnYlNXLCBsdW1hKTtcXG4gICAgZmxvYXQgbHVtYVNFID0gZG90KHJnYlNFLCBsdW1hKTtcXG4gICAgZmxvYXQgbHVtYU0gID0gZG90KHJnYk0sICBsdW1hKTtcXG4gICAgZmxvYXQgbHVtYU1pbiA9IG1pbihsdW1hTSwgbWluKG1pbihsdW1hTlcsIGx1bWFORSksIG1pbihsdW1hU1csIGx1bWFTRSkpKTtcXG4gICAgZmxvYXQgbHVtYU1heCA9IG1heChsdW1hTSwgbWF4KG1heChsdW1hTlcsIGx1bWFORSksIG1heChsdW1hU1csIGx1bWFTRSkpKTtcXG5cXG4gICAgbWVkaXVtcCB2ZWMyIGRpcjtcXG4gICAgZGlyLnggPSAtKChsdW1hTlcgKyBsdW1hTkUpIC0gKGx1bWFTVyArIGx1bWFTRSkpO1xcbiAgICBkaXIueSA9ICAoKGx1bWFOVyArIGx1bWFTVykgLSAobHVtYU5FICsgbHVtYVNFKSk7XFxuXFxuICAgIGZsb2F0IGRpclJlZHVjZSA9IG1heCgobHVtYU5XICsgbHVtYU5FICsgbHVtYVNXICsgbHVtYVNFKSAqXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAoMC4yNSAqIEZYQUFfUkVEVUNFX01VTCksIEZYQUFfUkVEVUNFX01JTik7XFxuXFxuICAgIGZsb2F0IHJjcERpck1pbiA9IDEuMCAvIChtaW4oYWJzKGRpci54KSwgYWJzKGRpci55KSkgKyBkaXJSZWR1Y2UpO1xcbiAgICBkaXIgPSBtaW4odmVjMihGWEFBX1NQQU5fTUFYLCBGWEFBX1NQQU5fTUFYKSxcXG4gICAgICAgICAgICAgIG1heCh2ZWMyKC1GWEFBX1NQQU5fTUFYLCAtRlhBQV9TUEFOX01BWCksXFxuICAgICAgICAgICAgICBkaXIgKiByY3BEaXJNaW4pKSAqIGludmVyc2VWUDtcXG5cXG4gICAgdmVjMyByZ2JBID0gMC41ICogKFxcbiAgICAgICAgdGV4dHVyZTJEKHRleCwgZnJhZ0Nvb3JkICogaW52ZXJzZVZQICsgZGlyICogKDEuMCAvIDMuMCAtIDAuNSkpLnh5eiArXFxuICAgICAgICB0ZXh0dXJlMkQodGV4LCBmcmFnQ29vcmQgKiBpbnZlcnNlVlAgKyBkaXIgKiAoMi4wIC8gMy4wIC0gMC41KSkueHl6KTtcXG4gICAgdmVjMyByZ2JCID0gcmdiQSAqIDAuNSArIDAuMjUgKiAoXFxuICAgICAgICB0ZXh0dXJlMkQodGV4LCBmcmFnQ29vcmQgKiBpbnZlcnNlVlAgKyBkaXIgKiAtMC41KS54eXogK1xcbiAgICAgICAgdGV4dHVyZTJEKHRleCwgZnJhZ0Nvb3JkICogaW52ZXJzZVZQICsgZGlyICogMC41KS54eXopO1xcblxcbiAgICBmbG9hdCBsdW1hQiA9IGRvdChyZ2JCLCBsdW1hKTtcXG4gICAgaWYgKChsdW1hQiA8IGx1bWFNaW4pIHx8IChsdW1hQiA+IGx1bWFNYXgpKVxcbiAgICAgICAgY29sb3IgPSB2ZWM0KHJnYkEsIHRleENvbG9yLmEpO1xcbiAgICBlbHNlXFxuICAgICAgICBjb2xvciA9IHZlYzQocmdiQiwgdGV4Q29sb3IuYSk7XFxuICAgIHJldHVybiBjb2xvcjtcXG59XFxuXFxuXFxudmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7XFxudmFyeWluZyB2ZWM0IHZDb2xvcjtcXG52YXJ5aW5nIHZlYzIgdlJlc29sdXRpb247XFxuXFxuLy90ZXhjb29yZHMgY29tcHV0ZWQgaW4gdmVydGV4IHN0ZXBcXG4vL3RvIGF2b2lkIGRlcGVuZGVudCB0ZXh0dXJlIHJlYWRzXFxudmFyeWluZyB2ZWMyIHZfcmdiTlc7XFxudmFyeWluZyB2ZWMyIHZfcmdiTkU7XFxudmFyeWluZyB2ZWMyIHZfcmdiU1c7XFxudmFyeWluZyB2ZWMyIHZfcmdiU0U7XFxudmFyeWluZyB2ZWMyIHZfcmdiTTtcXG5cXG51bmlmb3JtIHNhbXBsZXIyRCB1U2FtcGxlcjtcXG5cXG5cXG52b2lkIG1haW4odm9pZCl7XFxuXFxuICAgIGdsX0ZyYWdDb2xvciA9IGZ4YWEodVNhbXBsZXIsIHZUZXh0dXJlQ29vcmQgKiB2UmVzb2x1dGlvbiwgdlJlc29sdXRpb24sIHZfcmdiTlcsIHZfcmdiTkUsIHZfcmdiU1csIHZfcmdiU0UsIHZfcmdiTSk7XFxuXFxufVxcblwiLFxuICAgICAgICAvLyB1bmlmb3Jtc1xuICAgICAgICB7XG4gICAgICAgICAgICByZXNvbHV0aW9uOiB7IHR5cGU6ICd2MicsIHZhbHVlOiB7IHg6IDEsIHk6IDEgfSB9XG4gICAgICAgIH1cbiAgICApO1xuXG59XG5cbkZYQUFGaWx0ZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShBYnN0cmFjdEZpbHRlci5wcm90b3R5cGUpO1xuRlhBQUZpbHRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBGWEFBRmlsdGVyO1xubW9kdWxlLmV4cG9ydHMgPSBGWEFBRmlsdGVyO1xuXG4vKipcbiAqIEFwcGxpZXMgdGhlIGZpbHRlclxuICpcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5XZWJHTFJlbmRlcmVyfSBUaGUgcmVuZGVyZXIgdG8gcmV0cmlldmUgdGhlIGZpbHRlciBmcm9tXG4gKiBAcGFyYW0gaW5wdXQge1BJWEkuUmVuZGVyVGFyZ2V0fVxuICogQHBhcmFtIG91dHB1dCB7UElYSS5SZW5kZXJUYXJnZXR9XG4gKi9cbkZYQUFGaWx0ZXIucHJvdG90eXBlLmFwcGx5RmlsdGVyID0gZnVuY3Rpb24gKHJlbmRlcmVyLCBpbnB1dCwgb3V0cHV0KVxue1xuICAgIHZhciBmaWx0ZXJNYW5hZ2VyID0gcmVuZGVyZXIuZmlsdGVyTWFuYWdlcjtcblxuICAgIHZhciBzaGFkZXIgPSB0aGlzLmdldFNoYWRlciggcmVuZGVyZXIgKTtcbiAgICAgLy8gZHJhdyB0aGUgZmlsdGVyLi4uXG4gICAgZmlsdGVyTWFuYWdlci5hcHBseUZpbHRlcihzaGFkZXIsIGlucHV0LCBvdXRwdXQpO1xufTtcbiIsInZhciBBYnN0cmFjdEZpbHRlciA9IHJlcXVpcmUoJy4vQWJzdHJhY3RGaWx0ZXInKSxcbiAgICBtYXRoID0gIHJlcXVpcmUoJy4uLy4uLy4uL21hdGgnKTtcblxuLy8gQHNlZSBodHRwczovL2dpdGh1Yi5jb20vc3Vic3RhY2svYnJmcy9pc3N1ZXMvMjVcblxuXG4vKipcbiAqIFRoZSBTcHJpdGVNYXNrRmlsdGVyIGNsYXNzXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLkFic3RyYWN0RmlsdGVyXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIHNwcml0ZSB7UElYSS5TcHJpdGV9IHRoZSB0YXJnZXQgc3ByaXRlXG4gKi9cbmZ1bmN0aW9uIFNwcml0ZU1hc2tGaWx0ZXIoc3ByaXRlKVxue1xuICAgIHZhciBtYXNrTWF0cml4ID0gbmV3IG1hdGguTWF0cml4KCk7XG5cbiAgICBBYnN0cmFjdEZpbHRlci5jYWxsKHRoaXMsXG4gICAgICAgIFwiYXR0cmlidXRlIHZlYzIgYVZlcnRleFBvc2l0aW9uO1xcbmF0dHJpYnV0ZSB2ZWMyIGFUZXh0dXJlQ29vcmQ7XFxuYXR0cmlidXRlIHZlYzQgYUNvbG9yO1xcblxcbnVuaWZvcm0gbWF0MyBwcm9qZWN0aW9uTWF0cml4O1xcbnVuaWZvcm0gbWF0MyBvdGhlck1hdHJpeDtcXG5cXG52YXJ5aW5nIHZlYzIgdk1hc2tDb29yZDtcXG52YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDtcXG52YXJ5aW5nIHZlYzQgdkNvbG9yO1xcblxcbnZvaWQgbWFpbih2b2lkKVxcbntcXG4gICAgZ2xfUG9zaXRpb24gPSB2ZWM0KChwcm9qZWN0aW9uTWF0cml4ICogdmVjMyhhVmVydGV4UG9zaXRpb24sIDEuMCkpLnh5LCAwLjAsIDEuMCk7XFxuICAgIHZUZXh0dXJlQ29vcmQgPSBhVGV4dHVyZUNvb3JkO1xcbiAgICB2TWFza0Nvb3JkID0gKCBvdGhlck1hdHJpeCAqIHZlYzMoIGFUZXh0dXJlQ29vcmQsIDEuMCkgICkueHk7XFxuICAgIHZDb2xvciA9IHZlYzQoYUNvbG9yLnJnYiAqIGFDb2xvci5hLCBhQ29sb3IuYSk7XFxufVxcblwiLFxuICAgICAgICBcInByZWNpc2lvbiBsb3dwIGZsb2F0O1xcblxcbnZhcnlpbmcgdmVjMiB2TWFza0Nvb3JkO1xcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xcbnZhcnlpbmcgdmVjNCB2Q29sb3I7XFxuXFxudW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXI7XFxudW5pZm9ybSBmbG9hdCBhbHBoYTtcXG51bmlmb3JtIHNhbXBsZXIyRCBtYXNrO1xcblxcbnZvaWQgbWFpbih2b2lkKVxcbntcXG4gICAgLy8gY2hlY2sgY2xpcCEgdGhpcyB3aWxsIHN0b3AgdGhlIG1hc2sgYmxlZWRpbmcgb3V0IGZyb20gdGhlIGVkZ2VzXFxuICAgIHZlYzIgdGV4dCA9IGFicyggdk1hc2tDb29yZCAtIDAuNSApO1xcbiAgICB0ZXh0ID0gc3RlcCgwLjUsIHRleHQpO1xcbiAgICBmbG9hdCBjbGlwID0gMS4wIC0gbWF4KHRleHQueSwgdGV4dC54KTtcXG4gICAgdmVjNCBvcmlnaW5hbCA9IHRleHR1cmUyRCh1U2FtcGxlciwgdlRleHR1cmVDb29yZCk7XFxuICAgIHZlYzQgbWFza3kgPSB0ZXh0dXJlMkQobWFzaywgdk1hc2tDb29yZCk7XFxuICAgIG9yaWdpbmFsICo9IChtYXNreS5yICogbWFza3kuYSAqIGFscGhhICogY2xpcCk7XFxuICAgIGdsX0ZyYWdDb2xvciA9IG9yaWdpbmFsO1xcbn1cXG5cIixcbiAgICAgICAge1xuICAgICAgICAgICAgbWFzazogICAgICAgICAgIHsgdHlwZTogJ3NhbXBsZXIyRCcsIHZhbHVlOiBzcHJpdGUuX3RleHR1cmUgfSxcbiAgICAgICAgICAgIGFscGhhOiAgICAgICAgICB7IHR5cGU6ICdmJywgdmFsdWU6IDF9LFxuICAgICAgICAgICAgb3RoZXJNYXRyaXg6ICAgIHsgdHlwZTogJ21hdDMnLCB2YWx1ZTogbWFza01hdHJpeC50b0FycmF5KHRydWUpIH1cbiAgICAgICAgfVxuICAgICk7XG5cbiAgICB0aGlzLm1hc2tTcHJpdGUgPSBzcHJpdGU7XG4gICAgdGhpcy5tYXNrTWF0cml4ID0gbWFza01hdHJpeDtcbn1cblxuU3ByaXRlTWFza0ZpbHRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKEFic3RyYWN0RmlsdGVyLnByb3RvdHlwZSk7XG5TcHJpdGVNYXNrRmlsdGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFNwcml0ZU1hc2tGaWx0ZXI7XG5tb2R1bGUuZXhwb3J0cyA9IFNwcml0ZU1hc2tGaWx0ZXI7XG5cbi8qKlxuICogQXBwbGllcyB0aGUgZmlsdGVyXG4gKlxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLldlYkdMUmVuZGVyZXJ9IFRoZSByZW5kZXJlciB0byByZXRyaWV2ZSB0aGUgZmlsdGVyIGZyb21cbiAqIEBwYXJhbSBpbnB1dCB7UElYSS5SZW5kZXJUYXJnZXR9XG4gKiBAcGFyYW0gb3V0cHV0IHtQSVhJLlJlbmRlclRhcmdldH1cbiAqL1xuU3ByaXRlTWFza0ZpbHRlci5wcm90b3R5cGUuYXBwbHlGaWx0ZXIgPSBmdW5jdGlvbiAocmVuZGVyZXIsIGlucHV0LCBvdXRwdXQpXG57XG4gICAgdmFyIGZpbHRlck1hbmFnZXIgPSByZW5kZXJlci5maWx0ZXJNYW5hZ2VyO1xuXG4gICAgdGhpcy51bmlmb3Jtcy5tYXNrLnZhbHVlID0gdGhpcy5tYXNrU3ByaXRlLl90ZXh0dXJlO1xuXG4gICAgZmlsdGVyTWFuYWdlci5jYWxjdWxhdGVNYXBwZWRNYXRyaXgoaW5wdXQuZnJhbWUsIHRoaXMubWFza1Nwcml0ZSwgdGhpcy5tYXNrTWF0cml4KTtcblxuICAgIHRoaXMudW5pZm9ybXMub3RoZXJNYXRyaXgudmFsdWUgPSB0aGlzLm1hc2tNYXRyaXgudG9BcnJheSh0cnVlKTtcbiAgICB0aGlzLnVuaWZvcm1zLmFscGhhLnZhbHVlID0gdGhpcy5tYXNrU3ByaXRlLndvcmxkQWxwaGE7XG5cbiAgICB2YXIgc2hhZGVyID0gdGhpcy5nZXRTaGFkZXIocmVuZGVyZXIpO1xuICAgICAvLyBkcmF3IHRoZSBmaWx0ZXIuLi5cbiAgICBmaWx0ZXJNYW5hZ2VyLmFwcGx5RmlsdGVyKHNoYWRlciwgaW5wdXQsIG91dHB1dCk7XG59O1xuXG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKFNwcml0ZU1hc2tGaWx0ZXIucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogVGhlIHRleHR1cmUgdXNlZCBmb3IgdGhlIGRpc3BsYWNlbWVudCBtYXAuIE11c3QgYmUgcG93ZXIgb2YgMiBzaXplZCB0ZXh0dXJlLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5UZXh0dXJlfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLlNwcml0ZU1hc2tGaWx0ZXIjXG4gICAgICovXG4gICAgbWFwOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudW5pZm9ybXMubWFzay52YWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudW5pZm9ybXMubWFzay52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFRoZSBvZmZzZXQgdXNlZCB0byBtb3ZlIHRoZSBkaXNwbGFjZW1lbnQgbWFwLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5Qb2ludH1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5TcHJpdGVNYXNrRmlsdGVyI1xuICAgICAqL1xuICAgIG9mZnNldDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudW5pZm9ybXMub2Zmc2V0LnZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLm9mZnNldC52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfVxufSk7XG4iLCJ2YXIgV2ViR0xNYW5hZ2VyID0gcmVxdWlyZSgnLi9XZWJHTE1hbmFnZXInKTtcblxuLyoqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAZXh0ZW5kcyBQSVhJLldlYkdsTWFuYWdlclxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLldlYkdMUmVuZGVyZXJ9IFRoZSByZW5kZXJlciB0aGlzIG1hbmFnZXIgd29ya3MgZm9yLlxuICovXG5mdW5jdGlvbiBCbGVuZE1vZGVNYW5hZ2VyKHJlbmRlcmVyKVxue1xuICAgIFdlYkdMTWFuYWdlci5jYWxsKHRoaXMsIHJlbmRlcmVyKTtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLmN1cnJlbnRCbGVuZE1vZGUgPSA5OTk5OTtcbn1cblxuQmxlbmRNb2RlTWFuYWdlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFdlYkdMTWFuYWdlci5wcm90b3R5cGUpO1xuQmxlbmRNb2RlTWFuYWdlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBCbGVuZE1vZGVNYW5hZ2VyO1xubW9kdWxlLmV4cG9ydHMgPSBCbGVuZE1vZGVNYW5hZ2VyO1xuXG4vKipcbiAqIFNldHMtdXAgdGhlIGdpdmVuIGJsZW5kTW9kZSBmcm9tIFdlYkdMJ3MgcG9pbnQgb2Ygdmlldy5cbiAqXG4gKiBAcGFyYW0gYmxlbmRNb2RlIHtudW1iZXJ9IHRoZSBibGVuZE1vZGUsIHNob3VsZCBiZSBhIFBpeGkgY29uc3QsIHN1Y2ggYXMgYFBJWEkuQkxFTkRfTU9ERVMuQUREYC4gU2VlXG4gKiAge0BsaW5rIFBJWEkuQkxFTkRfTU9ERVN9IGZvciBwb3NzaWJsZSB2YWx1ZXMuXG4gKi9cbkJsZW5kTW9kZU1hbmFnZXIucHJvdG90eXBlLnNldEJsZW5kTW9kZSA9IGZ1bmN0aW9uIChibGVuZE1vZGUpXG57XG4gICAgaWYgKHRoaXMuY3VycmVudEJsZW5kTW9kZSA9PT0gYmxlbmRNb2RlKVxuICAgIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHRoaXMuY3VycmVudEJsZW5kTW9kZSA9IGJsZW5kTW9kZTtcblxuICAgIHZhciBtb2RlID0gdGhpcy5yZW5kZXJlci5ibGVuZE1vZGVzW3RoaXMuY3VycmVudEJsZW5kTW9kZV07XG4gICAgdGhpcy5yZW5kZXJlci5nbC5ibGVuZEZ1bmMobW9kZVswXSwgbW9kZVsxXSk7XG5cbiAgICByZXR1cm4gdHJ1ZTtcbn07XG4iLCJ2YXIgV2ViR0xNYW5hZ2VyID0gcmVxdWlyZSgnLi9XZWJHTE1hbmFnZXInKSxcbiAgICBSZW5kZXJUYXJnZXQgPSByZXF1aXJlKCcuLi91dGlscy9SZW5kZXJUYXJnZXQnKSxcbiAgICBDT05TVCA9IHJlcXVpcmUoJy4uLy4uLy4uL2NvbnN0JyksXG4gICAgUXVhZCA9IHJlcXVpcmUoJy4uL3V0aWxzL1F1YWQnKSxcbiAgICBtYXRoID0gIHJlcXVpcmUoJy4uLy4uLy4uL21hdGgnKTtcblxuLyoqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAZXh0ZW5kcyBQSVhJLldlYkdMTWFuYWdlclxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLldlYkdMUmVuZGVyZXJ9IFRoZSByZW5kZXJlciB0aGlzIG1hbmFnZXIgd29ya3MgZm9yLlxuICovXG5mdW5jdGlvbiBGaWx0ZXJNYW5hZ2VyKHJlbmRlcmVyKVxue1xuICAgIFdlYkdMTWFuYWdlci5jYWxsKHRoaXMsIHJlbmRlcmVyKTtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge29iamVjdFtdfVxuICAgICAqL1xuICAgIHRoaXMuZmlsdGVyU3RhY2sgPSBbXTtcblxuICAgIHRoaXMuZmlsdGVyU3RhY2sucHVzaCh7XG4gICAgICAgIHJlbmRlclRhcmdldDpyZW5kZXJlci5jdXJyZW50UmVuZGVyVGFyZ2V0LFxuICAgICAgICBmaWx0ZXI6W10sXG4gICAgICAgIGJvdW5kczpudWxsXG4gICAgfSk7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlJlbmRlclRhcmdldFtdfVxuICAgICAqL1xuICAgIHRoaXMudGV4dHVyZVBvb2wgPSBbXTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBzaXplIG9mIHRoZSB0ZXh0dXJlXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlJlY3RhbmdsZX1cbiAgICAgKi9cbiAgICAvLyBsaXN0ZW4gZm9yIGNvbnRleHQgYW5kIHVwZGF0ZSBuZWNlc3NhcnkgYnVmZmVyc1xuICAgIC8vVE9ETyBtYWtlIHRoaXMgZHluYW1pYyFcbiAgICAvL1RPRE8gdGVzdCB0aGlzIG91dCBieSBmb3JjZXMgcG93ZXIgb2YgdHdvP1xuICAgIHRoaXMudGV4dHVyZVNpemUgPSBuZXcgbWF0aC5SZWN0YW5nbGUoMCwgMCwgcmVuZGVyZXIud2lkdGgsIHJlbmRlcmVyLmhlaWdodCk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgY3VycmVudCBmcmFtZVxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5SZWN0YW5nbGV9XG4gICAgICovXG4gICAgdGhpcy5jdXJyZW50RnJhbWUgPSBudWxsO1xufVxuXG5GaWx0ZXJNYW5hZ2VyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoV2ViR0xNYW5hZ2VyLnByb3RvdHlwZSk7XG5GaWx0ZXJNYW5hZ2VyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IEZpbHRlck1hbmFnZXI7XG5tb2R1bGUuZXhwb3J0cyA9IEZpbHRlck1hbmFnZXI7XG5cblxuLyoqXG4gKiBDYWxsZWQgd2hlbiB0aGVyZSBpcyBhIFdlYkdMIGNvbnRleHQgY2hhbmdlLlxuICpcbiAqL1xuRmlsdGVyTWFuYWdlci5wcm90b3R5cGUub25Db250ZXh0Q2hhbmdlID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLnRleHR1cmVQb29sLmxlbmd0aCA9IDA7XG5cbiAgICB2YXIgZ2wgPSB0aGlzLnJlbmRlcmVyLmdsO1xuICAgIHRoaXMucXVhZCA9IG5ldyBRdWFkKGdsKTtcbn07XG5cbi8qKlxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLldlYkdMUmVuZGVyZXJ9XG4gKiBAcGFyYW0gYnVmZmVyIHtBcnJheUJ1ZmZlcn1cbiAqL1xuRmlsdGVyTWFuYWdlci5wcm90b3R5cGUuc2V0RmlsdGVyU3RhY2sgPSBmdW5jdGlvbiAoIGZpbHRlclN0YWNrIClcbntcbiAgICB0aGlzLmZpbHRlclN0YWNrID0gZmlsdGVyU3RhY2s7XG59O1xuXG4vKipcbiAqIEFwcGxpZXMgdGhlIGZpbHRlciBhbmQgYWRkcyBpdCB0byB0aGUgY3VycmVudCBmaWx0ZXIgc3RhY2suXG4gKlxuICogQHBhcmFtIHRhcmdldCB7UElYSS5EaXNwbGF5T2JqZWN0fVxuICogQHBhcmFtIGZpbHRlcnMge1BJWEkuQWJzdHJhY3RGaWxlcltdfSB0aGUgZmlsdGVycyB0aGF0IHdpbGwgYmUgcHVzaGVkIHRvIHRoZSBjdXJyZW50IGZpbHRlciBzdGFja1xuICovXG5GaWx0ZXJNYW5hZ2VyLnByb3RvdHlwZS5wdXNoRmlsdGVyID0gZnVuY3Rpb24gKHRhcmdldCwgZmlsdGVycylcbntcbiAgICAvLyBnZXQgdGhlIGJvdW5kcyBvZiB0aGUgb2JqZWN0Li5cbiAgICAvLyBUT0RPIHJlcGxhY2UgY2xvbmUgd2l0aCBhIGNvcHkgdG8gc2F2ZSBvYmplY3QgY3JlYXRpb25cbiAgICB2YXIgYm91bmRzID0gdGFyZ2V0LmZpbHRlckFyZWEgPyB0YXJnZXQuZmlsdGVyQXJlYS5jbG9uZSgpIDogdGFyZ2V0LmdldEJvdW5kcygpO1xuXG4gICAgLy9ib3VuZHMgPSBib3VuZHMuY2xvbmUoKTtcblxuICAgIC8vIHJvdW5kIG9mZiB0aGUgcmVjdGFuZ2xlIHRvIGdldCBhIG5pY2Ugc21vb29vb29vdGggZmlsdGVyIDopXG4gICAgYm91bmRzLnggPSBib3VuZHMueCB8IDA7XG4gICAgYm91bmRzLnkgPSBib3VuZHMueSB8IDA7XG4gICAgYm91bmRzLndpZHRoID0gYm91bmRzLndpZHRoIHwgMDtcbiAgICBib3VuZHMuaGVpZ2h0ID0gYm91bmRzLmhlaWdodCB8IDA7XG5cblxuICAgIC8vIHBhZGRpbmchXG4gICAgdmFyIHBhZGRpbmcgPSBmaWx0ZXJzWzBdLnBhZGRpbmcgfCAwO1xuICAgIGJvdW5kcy54IC09IHBhZGRpbmc7XG4gICAgYm91bmRzLnkgLT0gcGFkZGluZztcbiAgICBib3VuZHMud2lkdGggKz0gcGFkZGluZyAqIDI7XG4gICAgYm91bmRzLmhlaWdodCArPSBwYWRkaW5nICogMjtcblxuXG4gICAgaWYodGhpcy5yZW5kZXJlci5jdXJyZW50UmVuZGVyVGFyZ2V0LnRyYW5zZm9ybSlcbiAgICB7XG4gICAgICAgIC8vVE9ETyB0aGlzIHdpbGwgYnJlYWsgaWYgdGhlIHJlbmRlclRleHR1cmUgdHJhbnNmb3JtIGlzIGFueXRoaW5nIG90aGVyIHRoYW4gYSB0cmFuc2xhdGlvbi5cbiAgICAgICAgLy9XaWxsIG5lZWQgdG8gdGFrZSB0aGUgZnVsbCBtYXRyaXggdHJhbnNmb3JtIGludG8gYWNvdW50Li5cbiAgICAgICAgdmFyIHRyYW5zZm9ybSA9IHRoaXMucmVuZGVyZXIuY3VycmVudFJlbmRlclRhcmdldC50cmFuc2Zvcm07XG5cbiAgICAgICAgYm91bmRzLnggKz0gdHJhbnNmb3JtLnR4O1xuICAgICAgICBib3VuZHMueSArPSB0cmFuc2Zvcm0udHk7XG5cbiAgICAgICAgdGhpcy5jYXBGaWx0ZXJBcmVhKCBib3VuZHMgKTtcblxuICAgICAgICBib3VuZHMueCAtPSB0cmFuc2Zvcm0udHg7XG4gICAgICAgIGJvdW5kcy55IC09IHRyYW5zZm9ybS50eTtcbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgIHRoaXMuY2FwRmlsdGVyQXJlYSggYm91bmRzICk7XG4gICAgfVxuXG4gICAgaWYoYm91bmRzLndpZHRoID4gMCAmJiBib3VuZHMuaGVpZ2h0ID4gMClcbiAgICB7XG4gICAgICAgIHRoaXMuY3VycmVudEZyYW1lID0gYm91bmRzO1xuXG4gICAgICAgIHZhciB0ZXh0dXJlID0gdGhpcy5nZXRSZW5kZXJUYXJnZXQoKTtcblxuICAgICAgICB0aGlzLnJlbmRlcmVyLnNldFJlbmRlclRhcmdldCh0ZXh0dXJlKTtcblxuICAgICAgICAvLyBjbGVhciB0aGUgdGV4dHVyZS4uXG4gICAgICAgIHRleHR1cmUuY2xlYXIoKTtcblxuICAgICAgICAvLyBUT0RPIGdldCByaWQgb2Ygb2JqZWN0IGNyZWF0aW9uIVxuICAgICAgICB0aGlzLmZpbHRlclN0YWNrLnB1c2goe1xuICAgICAgICAgICAgcmVuZGVyVGFyZ2V0OiB0ZXh0dXJlLFxuICAgICAgICAgICAgZmlsdGVyOiBmaWx0ZXJzXG4gICAgICAgIH0pO1xuXG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIC8vIHB1c2ggc29tdGhpbmcgb24gdG8gdGhlIHN0YWNrIHRoYXQgaXMgZW1wdHlcbiAgICAgICAgdGhpcy5maWx0ZXJTdGFjay5wdXNoKHtcbiAgICAgICAgICAgIHJlbmRlclRhcmdldDogbnVsbCxcbiAgICAgICAgICAgIGZpbHRlcjogZmlsdGVyc1xuICAgICAgICB9KTtcbiAgICB9XG59O1xuXG5cbi8qKlxuICogUmVtb3ZlcyB0aGUgbGFzdCBmaWx0ZXIgZnJvbSB0aGUgZmlsdGVyIHN0YWNrIGFuZCByZXR1cm5zIGl0LlxuICpcbiAqL1xuRmlsdGVyTWFuYWdlci5wcm90b3R5cGUucG9wRmlsdGVyID0gZnVuY3Rpb24gKClcbntcbiAgICB2YXIgZmlsdGVyRGF0YSA9IHRoaXMuZmlsdGVyU3RhY2sucG9wKCk7XG4gICAgdmFyIHByZXZpb3VzRmlsdGVyRGF0YSA9IHRoaXMuZmlsdGVyU3RhY2tbdGhpcy5maWx0ZXJTdGFjay5sZW5ndGgtMV07XG5cbiAgICB2YXIgaW5wdXQgPSBmaWx0ZXJEYXRhLnJlbmRlclRhcmdldDtcblxuICAgIC8vIGlmIHRoZSByZW5kZXJUYXJnZXQgaXMgbnVsbCB0aGVuIHdlIGRvbid0IGFwcGx5IHRoZSBmaWx0ZXIgYXMgaXRzIG9mZnNjcmVlblxuICAgIGlmKCFmaWx0ZXJEYXRhLnJlbmRlclRhcmdldClcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB2YXIgb3V0cHV0ID0gcHJldmlvdXNGaWx0ZXJEYXRhLnJlbmRlclRhcmdldDtcblxuICAgIC8vIHVzZSBwcm9ncmFtXG4gICAgdmFyIGdsID0gdGhpcy5yZW5kZXJlci5nbDtcblxuXG4gICAgdGhpcy5jdXJyZW50RnJhbWUgPSBpbnB1dC5mcmFtZTtcblxuICAgIHRoaXMucXVhZC5tYXAodGhpcy50ZXh0dXJlU2l6ZSwgaW5wdXQuZnJhbWUpO1xuXG5cbiAgICAvLyBUT0RPLi4gdGhpcyBwcm9iYWJseSBvbmx5IG5lZWRzIHRvIGJlIGRvbmUgb25jZSFcbiAgICBnbC5iaW5kQnVmZmVyKGdsLkFSUkFZX0JVRkZFUiwgdGhpcy5xdWFkLnZlcnRleEJ1ZmZlcik7XG4gICAgZ2wuYmluZEJ1ZmZlcihnbC5FTEVNRU5UX0FSUkFZX0JVRkZFUiwgdGhpcy5xdWFkLmluZGV4QnVmZmVyKTtcblxuICAgIHZhciBmaWx0ZXJzID0gZmlsdGVyRGF0YS5maWx0ZXI7XG5cbiAgICAvLyBhc3N1bWluZyBhbGwgZmlsdGVycyBmb2xsb3cgdGhlIGNvcnJlY3QgZm9ybWF0Pz9cbiAgICBnbC52ZXJ0ZXhBdHRyaWJQb2ludGVyKHRoaXMucmVuZGVyZXIuc2hhZGVyTWFuYWdlci5kZWZhdWx0U2hhZGVyLmF0dHJpYnV0ZXMuYVZlcnRleFBvc2l0aW9uLCAyLCBnbC5GTE9BVCwgZmFsc2UsIDAsIDApO1xuICAgIGdsLnZlcnRleEF0dHJpYlBvaW50ZXIodGhpcy5yZW5kZXJlci5zaGFkZXJNYW5hZ2VyLmRlZmF1bHRTaGFkZXIuYXR0cmlidXRlcy5hVGV4dHVyZUNvb3JkLCAyLCBnbC5GTE9BVCwgZmFsc2UsIDAsIDIgKiA0ICogNCk7XG4gICAgZ2wudmVydGV4QXR0cmliUG9pbnRlcih0aGlzLnJlbmRlcmVyLnNoYWRlck1hbmFnZXIuZGVmYXVsdFNoYWRlci5hdHRyaWJ1dGVzLmFDb2xvciwgNCwgZ2wuRkxPQVQsIGZhbHNlLCAwLCA0ICogNCAqIDQpO1xuXG4gICAgLy8gcmVzdG9yZSB0aGUgbm9ybWFsIGJsZW5kbW9kZSFcbiAgICB0aGlzLnJlbmRlcmVyLmJsZW5kTW9kZU1hbmFnZXIuc2V0QmxlbmRNb2RlKENPTlNULkJMRU5EX01PREVTLk5PUk1BTCk7XG5cbiAgICBpZiAoZmlsdGVycy5sZW5ndGggPT09IDEpXG4gICAge1xuICAgICAgICAvLyBUT0RPIChjZW5nbGVyKSAtIFRoZXJlIGhhcyB0byBiZSBhIGJldHRlciB3YXkgdGhlbiBzZXR0aW5nIHRoaXMgZWFjaCB0aW1lP1xuICAgICAgICBpZiAoZmlsdGVyc1swXS51bmlmb3Jtcy5kaW1lbnNpb25zKVxuICAgICAgICB7XG4gICAgICAgICAgICBmaWx0ZXJzWzBdLnVuaWZvcm1zLmRpbWVuc2lvbnMudmFsdWVbMF0gPSB0aGlzLnJlbmRlcmVyLndpZHRoO1xuICAgICAgICAgICAgZmlsdGVyc1swXS51bmlmb3Jtcy5kaW1lbnNpb25zLnZhbHVlWzFdID0gdGhpcy5yZW5kZXJlci5oZWlnaHQ7XG4gICAgICAgICAgICBmaWx0ZXJzWzBdLnVuaWZvcm1zLmRpbWVuc2lvbnMudmFsdWVbMl0gPSB0aGlzLnF1YWQudmVydGljZXNbMF07XG4gICAgICAgICAgICBmaWx0ZXJzWzBdLnVuaWZvcm1zLmRpbWVuc2lvbnMudmFsdWVbM10gPSB0aGlzLnF1YWQudmVydGljZXNbNV07XG4gICAgICAgIH1cblxuICAgICAgICBmaWx0ZXJzWzBdLmFwcGx5RmlsdGVyKCB0aGlzLnJlbmRlcmVyLCBpbnB1dCwgb3V0cHV0ICk7XG4gICAgICAgIHRoaXMucmV0dXJuUmVuZGVyVGFyZ2V0KCBpbnB1dCApO1xuXG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHZhciBmbGlwVGV4dHVyZSA9IGlucHV0O1xuICAgICAgICB2YXIgZmxvcFRleHR1cmUgPSB0aGlzLmdldFJlbmRlclRhcmdldCh0cnVlKTtcblxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGZpbHRlcnMubGVuZ3RoLTE7IGkrKylcbiAgICAgICAge1xuICAgICAgICAgICAgdmFyIGZpbHRlciA9IGZpbHRlcnNbaV07XG5cbiAgICAgICAgICAgIC8vIFRPRE8gKGNlbmdsZXIpIC0gVGhlcmUgaGFzIHRvIGJlIGEgYmV0dGVyIHdheSB0aGVuIHNldHRpbmcgdGhpcyBlYWNoIHRpbWU/XG4gICAgICAgICAgICBpZiAoZmlsdGVyLnVuaWZvcm1zLmRpbWVuc2lvbnMpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgZmlsdGVyLnVuaWZvcm1zLmRpbWVuc2lvbnMudmFsdWVbMF0gPSB0aGlzLnJlbmRlcmVyLndpZHRoO1xuICAgICAgICAgICAgICAgIGZpbHRlci51bmlmb3Jtcy5kaW1lbnNpb25zLnZhbHVlWzFdID0gdGhpcy5yZW5kZXJlci5oZWlnaHQ7XG4gICAgICAgICAgICAgICAgZmlsdGVyLnVuaWZvcm1zLmRpbWVuc2lvbnMudmFsdWVbMl0gPSB0aGlzLnF1YWQudmVydGljZXNbMF07XG4gICAgICAgICAgICAgICAgZmlsdGVyLnVuaWZvcm1zLmRpbWVuc2lvbnMudmFsdWVbM10gPSB0aGlzLnF1YWQudmVydGljZXNbNV07XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGZpbHRlci5hcHBseUZpbHRlciggdGhpcy5yZW5kZXJlciwgZmxpcFRleHR1cmUsIGZsb3BUZXh0dXJlICk7XG5cbiAgICAgICAgICAgIHZhciB0ZW1wID0gZmxpcFRleHR1cmU7XG4gICAgICAgICAgICBmbGlwVGV4dHVyZSA9IGZsb3BUZXh0dXJlO1xuICAgICAgICAgICAgZmxvcFRleHR1cmUgPSB0ZW1wO1xuICAgICAgICB9XG5cbiAgICAgICAgZmlsdGVyc1tmaWx0ZXJzLmxlbmd0aC0xXS5hcHBseUZpbHRlciggdGhpcy5yZW5kZXJlciwgZmxpcFRleHR1cmUsIG91dHB1dCApO1xuXG4gICAgICAgIHRoaXMucmV0dXJuUmVuZGVyVGFyZ2V0KCBmbGlwVGV4dHVyZSApO1xuICAgICAgICB0aGlzLnJldHVyblJlbmRlclRhcmdldCggZmxvcFRleHR1cmUgKTtcbiAgICB9XG5cbiAgICByZXR1cm4gZmlsdGVyRGF0YS5maWx0ZXI7XG59O1xuXG4vKipcbiAqIEdyYWJzIGFuIHJlbmRlciB0YXJnZXQgZnJvbSB0aGUgaW50ZXJuYWwgcG9vbFxuICpcbiAqIEBwYXJhbSBjbGVhciB7Ym9vbGVhbn0gV2hldGhlciBvciBub3Qgd2UgbmVlZCB0byBjbGVhciB0aGUgUmVuZGVyVGFyZ2V0XG4gKiBAcmV0dXJuIHtSZW5kZXJUYXJnZXR9XG4gKi9cbkZpbHRlck1hbmFnZXIucHJvdG90eXBlLmdldFJlbmRlclRhcmdldCA9IGZ1bmN0aW9uICggY2xlYXIgKVxue1xuICAgIHZhciByZW5kZXJUYXJnZXQgPSB0aGlzLnRleHR1cmVQb29sLnBvcCgpIHx8IG5ldyBSZW5kZXJUYXJnZXQodGhpcy5yZW5kZXJlci5nbCwgdGhpcy50ZXh0dXJlU2l6ZS53aWR0aCwgdGhpcy50ZXh0dXJlU2l6ZS5oZWlnaHQsIENPTlNULlNDQUxFX01PREVTLkxJTkVBUiwgdGhpcy5yZW5kZXJlci5yZXNvbHV0aW9uICogQ09OU1QuRklMVEVSX1JFU09MVVRJT04pO1xuICAgIHJlbmRlclRhcmdldC5mcmFtZSA9IHRoaXMuY3VycmVudEZyYW1lO1xuXG4gICAgaWYgKGNsZWFyKVxuICAgIHtcbiAgICAgICAgcmVuZGVyVGFyZ2V0LmNsZWFyKHRydWUpO1xuICAgIH1cblxuICAgIHJldHVybiByZW5kZXJUYXJnZXQ7XG59O1xuXG4vKlxuICogUmV0dXJucyBhIFJlbmRlclRhcmdldCB0byB0aGUgaW50ZXJuYWwgcG9vbFxuICogQHBhcmFtIHJlbmRlclRhcmdldCB7UmVuZGVyVGFyZ2V0fSBUaGUgUmVuZGVyVGFyZ2V0IHdlIHdhbnQgdG8gcmV0dXJuIHRvIHRoZSBwb29sXG4gKi9cbkZpbHRlck1hbmFnZXIucHJvdG90eXBlLnJldHVyblJlbmRlclRhcmdldCA9IGZ1bmN0aW9uIChyZW5kZXJUYXJnZXQpXG57XG4gICAgdGhpcy50ZXh0dXJlUG9vbC5wdXNoKCByZW5kZXJUYXJnZXQgKTtcbn07XG5cbi8qXG4gKiBBcHBsaWVzIHRoZSBmaWx0ZXJcbiAqIEBwYXJhbSBzaGFkZXIge1NoYWRlcn0gVGhlIHNoYWRlciB0byB1cGxvYWRcbiAqIEBwYXJhbSBpbnB1dFRhcmdldCB7UmVuZGVyVGFyZ2V0fVxuICogQHBhcmFtIG91dHB1dFRhcmdldCB7UmVuZGVyVGFyZ2V0fVxuICogQHBhcmFtIGNsZWFyIHtib29sZWFufSBXaGV0aGVyIG9yIG5vdCB3ZSB3YW50IHRvIGNsZWFyIHRoZSBvdXRwdXRUYXJnZXRcbiAqL1xuRmlsdGVyTWFuYWdlci5wcm90b3R5cGUuYXBwbHlGaWx0ZXIgPSBmdW5jdGlvbiAoc2hhZGVyLCBpbnB1dFRhcmdldCwgb3V0cHV0VGFyZ2V0LCBjbGVhcilcbntcbiAgICB2YXIgZ2wgPSB0aGlzLnJlbmRlcmVyLmdsO1xuXG4gICAgdGhpcy5yZW5kZXJlci5zZXRSZW5kZXJUYXJnZXQob3V0cHV0VGFyZ2V0KTtcblxuICAgIGlmIChjbGVhcilcbiAgICB7XG4gICAgICAgIG91dHB1dFRhcmdldC5jbGVhcigpO1xuICAgIH1cblxuICAgIC8vIHNldCB0aGUgc2hhZGVyXG4gICAgdGhpcy5yZW5kZXJlci5zaGFkZXJNYW5hZ2VyLnNldFNoYWRlcihzaGFkZXIpO1xuXG4gICAgLy8gVE9ETyAoY2VuZ2xlcikgLSBDYW4gdGhpcyBiZSBjYWNoZWQgYW5kIG5vdCBgdG9BcnJheWBlZCBlYWNoIGZyYW1lP1xuICAgIHNoYWRlci51bmlmb3Jtcy5wcm9qZWN0aW9uTWF0cml4LnZhbHVlID0gdGhpcy5yZW5kZXJlci5jdXJyZW50UmVuZGVyVGFyZ2V0LnByb2plY3Rpb25NYXRyaXgudG9BcnJheSh0cnVlKTtcblxuICAgIC8vVE9ETyBjYW4gdGhpcyBiZSBvcHRpbWlzZWQ/XG4gICAgc2hhZGVyLnN5bmNVbmlmb3JtcygpO1xuLypcbiAgICBnbC52ZXJ0ZXhBdHRyaWJQb2ludGVyKHNoYWRlci5hdHRyaWJ1dGVzLmFWZXJ0ZXhQb3NpdGlvbiwgMiwgZ2wuRkxPQVQsIGZhbHNlLCAwLCAwKTtcbiAgICBnbC52ZXJ0ZXhBdHRyaWJQb2ludGVyKHNoYWRlci5hdHRyaWJ1dGVzLmFUZXh0dXJlQ29vcmQsIDIsIGdsLkZMT0FULCBmYWxzZSwgMCwgMiAqIDQgKiA0KTtcbiAgICBnbC52ZXJ0ZXhBdHRyaWJQb2ludGVyKHNoYWRlci5hdHRyaWJ1dGVzLmFDb2xvciwgNCwgZ2wuRkxPQVQsIGZhbHNlLCAwLCA0ICogNCAqIDQpO1xuKi9cblxuICAgIGdsLmFjdGl2ZVRleHR1cmUoZ2wuVEVYVFVSRTApO1xuICAgIGdsLmJpbmRUZXh0dXJlKGdsLlRFWFRVUkVfMkQsIGlucHV0VGFyZ2V0LnRleHR1cmUpO1xuXG4gICAgZ2wuZHJhd0VsZW1lbnRzKGdsLlRSSUFOR0xFUywgNiwgZ2wuVU5TSUdORURfU0hPUlQsIDAgKTtcbiAgICB0aGlzLnJlbmRlcmVyLmRyYXdDb3VudCsrO1xufTtcblxuLypcbiAqIENhbGN1bGF0ZXMgdGhlIG1hcHBlZCBtYXRyaXhcbiAqIEBwYXJhbSBmaWx0ZXJBcmVhIHtSZWN0YW5nbGV9IFRoZSBmaWx0ZXIgYXJlYVxuICogQHBhcmFtIHNwcml0ZSB7U3ByaXRlfSB0aGUgdGFyZ2V0IHNwcml0ZVxuICogQHBhcmFtIG91dHB1dE1hdHJpeCB7TWF0cml4fSBAYWx2aW5cbiAqL1xuLy8gVE9ETyBwbGF5aW5nIGFyb3VuZCBoZXJlLi4gdGhpcyBpcyB0ZW1wb3JhcnkgLSAod2lsbCBlbmQgdXAgaW4gdGhlIHNoYWRlcilcbkZpbHRlck1hbmFnZXIucHJvdG90eXBlLmNhbGN1bGF0ZU1hcHBlZE1hdHJpeCA9IGZ1bmN0aW9uIChmaWx0ZXJBcmVhLCBzcHJpdGUsIG91dHB1dE1hdHJpeClcbntcbiAgICB2YXIgd29ybGRUcmFuc2Zvcm0gPSBzcHJpdGUud29ybGRUcmFuc2Zvcm0uY29weShtYXRoLk1hdHJpeC5URU1QX01BVFJJWCksXG4gICAgdGV4dHVyZSA9IHNwcml0ZS5fdGV4dHVyZS5iYXNlVGV4dHVyZTtcblxuICAgIHZhciBtYXBwZWRNYXRyaXggPSBvdXRwdXRNYXRyaXguaWRlbnRpdHkoKTtcblxuICAgIC8vIHNjYWxlLi5cbiAgICB2YXIgcmF0aW8gPSB0aGlzLnRleHR1cmVTaXplLmhlaWdodCAvIHRoaXMudGV4dHVyZVNpemUud2lkdGg7XG5cbiAgICBtYXBwZWRNYXRyaXgudHJhbnNsYXRlKGZpbHRlckFyZWEueCAvIHRoaXMudGV4dHVyZVNpemUud2lkdGgsIGZpbHRlckFyZWEueSAvIHRoaXMudGV4dHVyZVNpemUuaGVpZ2h0ICk7XG5cbiAgICBtYXBwZWRNYXRyaXguc2NhbGUoMSAsIHJhdGlvKTtcblxuICAgIHZhciB0cmFuc2xhdGVTY2FsZVggPSAodGhpcy50ZXh0dXJlU2l6ZS53aWR0aCAvIHRleHR1cmUud2lkdGgpO1xuICAgIHZhciB0cmFuc2xhdGVTY2FsZVkgPSAodGhpcy50ZXh0dXJlU2l6ZS5oZWlnaHQgLyB0ZXh0dXJlLmhlaWdodCk7XG5cbiAgICB3b3JsZFRyYW5zZm9ybS50eCAvPSB0ZXh0dXJlLndpZHRoICogdHJhbnNsYXRlU2NhbGVYO1xuICAgIHdvcmxkVHJhbnNmb3JtLnR5IC89IHRleHR1cmUud2lkdGggKiB0cmFuc2xhdGVTY2FsZVg7XG5cbiAgICB3b3JsZFRyYW5zZm9ybS5pbnZlcnQoKTtcblxuICAgIG1hcHBlZE1hdHJpeC5wcmVwZW5kKHdvcmxkVHJhbnNmb3JtKTtcblxuICAgIC8vIGFwcGx5IGludmVyc2Ugc2NhbGUuLlxuICAgIG1hcHBlZE1hdHJpeC5zY2FsZSgxICwgMS9yYXRpbyk7XG5cbiAgICBtYXBwZWRNYXRyaXguc2NhbGUoIHRyYW5zbGF0ZVNjYWxlWCAsIHRyYW5zbGF0ZVNjYWxlWSApO1xuXG4gICAgbWFwcGVkTWF0cml4LnRyYW5zbGF0ZShzcHJpdGUuYW5jaG9yLngsIHNwcml0ZS5hbmNob3IueSk7XG5cbiAgICByZXR1cm4gbWFwcGVkTWF0cml4O1xuXG4gICAgLy8gS2VlcGluZyB0aGUgb3JnaW5hbCBhcyBhIHJlbWluZGVyIHRvIG1lIG9uIGhvdyB0aGlzIHdvcmtzIVxuICAgIC8vXG4gICAgLy8gdmFyIG0gPSBuZXcgbWF0aC5NYXRyaXgoKTtcblxuICAgIC8vIC8vIHNjYWxlLi5cbiAgICAvLyB2YXIgcmF0aW8gPSB0aGlzLnRleHR1cmVTaXplLmhlaWdodCAvIHRoaXMudGV4dHVyZVNpemUud2lkdGg7XG5cbiAgICAvLyBtLnRyYW5zbGF0ZShmaWx0ZXJBcmVhLnggLyB0aGlzLnRleHR1cmVTaXplLndpZHRoLCBmaWx0ZXJBcmVhLnkgLyB0aGlzLnRleHR1cmVTaXplLmhlaWdodCk7XG5cblxuICAgIC8vIG0uc2NhbGUoMSAsIHJhdGlvKTtcblxuXG4gICAgLy8gdmFyIHRyYW5zZm9ybSA9IHd0LmNsb25lKCk7XG5cbiAgICAvLyB2YXIgdHJhbnNsYXRlU2NhbGVYID0gKHRoaXMudGV4dHVyZVNpemUud2lkdGggLyA2MjApO1xuICAgIC8vIHZhciB0cmFuc2xhdGVTY2FsZVkgPSAodGhpcy50ZXh0dXJlU2l6ZS5oZWlnaHQgLyAzODApO1xuXG4gICAgLy8gdHJhbnNmb3JtLnR4IC89IDYyMCAqIHRyYW5zbGF0ZVNjYWxlWDtcbiAgICAvLyB0cmFuc2Zvcm0udHkgLz0gNjIwICogdHJhbnNsYXRlU2NhbGVYO1xuXG4gICAgLy8gdHJhbnNmb3JtLmludmVydCgpO1xuXG4gICAgLy8gdHJhbnNmb3JtLmFwcGVuZChtKTtcblxuICAgIC8vIC8vIGFwcGx5IGludmVyc2Ugc2NhbGUuLlxuICAgIC8vIHRyYW5zZm9ybS5zY2FsZSgxICwgMS9yYXRpbyk7XG5cbiAgICAvLyB0cmFuc2Zvcm0uc2NhbGUoIHRyYW5zbGF0ZVNjYWxlWCAsIHRyYW5zbGF0ZVNjYWxlWSApO1xuXG4gICAgLy8gcmV0dXJuIHRyYW5zZm9ybTtcbn07XG5cbi8qXG4gKiBDb25zdHJhaW5zIHRoZSBmaWx0ZXIgYXJlYSB0byB0aGUgdGV4dHVyZSBzaXplXG4gKiBAcGFyYW0gZmlsdGVyQXJlYSB7UmVjdGFuZ2xlfSBUaGUgZmlsdGVyIGFyZWEgd2Ugd2FudCB0byBjYXBcbiAqL1xuRmlsdGVyTWFuYWdlci5wcm90b3R5cGUuY2FwRmlsdGVyQXJlYSA9IGZ1bmN0aW9uIChmaWx0ZXJBcmVhKVxue1xuICAgIGlmIChmaWx0ZXJBcmVhLnggPCAwKVxuICAgIHtcbiAgICAgICAgZmlsdGVyQXJlYS53aWR0aCArPSBmaWx0ZXJBcmVhLng7XG4gICAgICAgIGZpbHRlckFyZWEueCA9IDA7XG4gICAgfVxuXG4gICAgaWYgKGZpbHRlckFyZWEueSA8IDApXG4gICAge1xuICAgICAgICBmaWx0ZXJBcmVhLmhlaWdodCArPSBmaWx0ZXJBcmVhLnk7XG4gICAgICAgIGZpbHRlckFyZWEueSA9IDA7XG4gICAgfVxuXG4gICAgaWYgKCBmaWx0ZXJBcmVhLnggKyBmaWx0ZXJBcmVhLndpZHRoID4gdGhpcy50ZXh0dXJlU2l6ZS53aWR0aCApXG4gICAge1xuICAgICAgICBmaWx0ZXJBcmVhLndpZHRoID0gdGhpcy50ZXh0dXJlU2l6ZS53aWR0aCAtIGZpbHRlckFyZWEueDtcbiAgICB9XG5cbiAgICBpZiAoIGZpbHRlckFyZWEueSArIGZpbHRlckFyZWEuaGVpZ2h0ID4gdGhpcy50ZXh0dXJlU2l6ZS5oZWlnaHQgKVxuICAgIHtcbiAgICAgICAgZmlsdGVyQXJlYS5oZWlnaHQgPSB0aGlzLnRleHR1cmVTaXplLmhlaWdodCAtIGZpbHRlckFyZWEueTtcbiAgICB9XG59O1xuXG4vKlxuICogUmVzaXplcyBhbGwgdGhlIHJlbmRlciB0YXJnZXRzIGluIHRoZSBwb29sXG4gKiBAcGFyYW0gd2lkdGgge251bWJlcn0gdGhlIG5ldyB3aWR0aFxuICogQHBhcmFtIGhlaWdodCB7bnVtYmVyfSB0aGUgbmV3IGhlaWdodFxuICovXG5GaWx0ZXJNYW5hZ2VyLnByb3RvdHlwZS5yZXNpemUgPSBmdW5jdGlvbiAoIHdpZHRoLCBoZWlnaHQgKVxue1xuICAgIHRoaXMudGV4dHVyZVNpemUud2lkdGggPSB3aWR0aDtcbiAgICB0aGlzLnRleHR1cmVTaXplLmhlaWdodCA9IGhlaWdodDtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy50ZXh0dXJlUG9vbC5sZW5ndGg7IGkrKylcbiAgICB7XG4gICAgICAgIHRoaXMudGV4dHVyZVBvb2xbaV0ucmVzaXplKCB3aWR0aCwgaGVpZ2h0ICk7XG4gICAgfVxufTtcblxuLyoqXG4gKiBEZXN0cm95cyB0aGUgZmlsdGVyIGFuZCByZW1vdmVzIGl0IGZyb20gdGhlIGZpbHRlciBzdGFjay5cbiAqXG4gKi9cbkZpbHRlck1hbmFnZXIucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoKVxue1xuICAgIHRoaXMucXVhZC5kZXN0cm95KCk7XG4gICAgXG4gICAgV2ViR0xNYW5hZ2VyLnByb3RvdHlwZS5kZXN0cm95LmNhbGwodGhpcyk7XG4gICAgXG4gICAgdGhpcy5maWx0ZXJTdGFjayA9IG51bGw7XG4gICAgdGhpcy5vZmZzZXRZID0gMDtcblxuICAgIC8vIGRlc3Ryb3kgdGV4dHVyZXNcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMudGV4dHVyZVBvb2wubGVuZ3RoOyBpKyspXG4gICAge1xuICAgICAgICB0aGlzLnRleHR1cmVQb29sW2ldLmRlc3Ryb3koKTtcbiAgICB9XG5cbiAgICB0aGlzLnRleHR1cmVQb29sID0gbnVsbDtcbn07XG4iLCJ2YXIgV2ViR0xNYW5hZ2VyID0gcmVxdWlyZSgnLi9XZWJHTE1hbmFnZXInKSxcbiAgICBBbHBoYU1hc2tGaWx0ZXIgPSByZXF1aXJlKCcuLi9maWx0ZXJzL1Nwcml0ZU1hc2tGaWx0ZXInKTtcblxuLyoqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcn0gVGhlIHJlbmRlcmVyIHRoaXMgbWFuYWdlciB3b3JrcyBmb3IuXG4gKi9cbmZ1bmN0aW9uIE1hc2tNYW5hZ2VyKHJlbmRlcmVyKVxue1xuICAgIFdlYkdMTWFuYWdlci5jYWxsKHRoaXMsIHJlbmRlcmVyKTtcblxuICAgIHRoaXMuc3RlbmNpbFN0YWNrID0gW107XG4gICAgdGhpcy5yZXZlcnNlID0gdHJ1ZTtcbiAgICB0aGlzLmNvdW50ID0gMDtcblxuICAgIHRoaXMuYWxwaGFNYXNrUG9vbCA9IFtdO1xufVxuXG5NYXNrTWFuYWdlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFdlYkdMTWFuYWdlci5wcm90b3R5cGUpO1xuTWFza01hbmFnZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gTWFza01hbmFnZXI7XG5tb2R1bGUuZXhwb3J0cyA9IE1hc2tNYW5hZ2VyO1xuXG4vKipcbiAqIEFwcGxpZXMgdGhlIE1hc2sgYW5kIGFkZHMgaXQgdG8gdGhlIGN1cnJlbnQgZmlsdGVyIHN0YWNrLlxuICpcbiAqIEBwYXJhbSBncmFwaGljcyB7UElYSS5HcmFwaGljc31cbiAqIEBwYXJhbSB3ZWJHTERhdGEge2FueVtdfVxuICovXG5NYXNrTWFuYWdlci5wcm90b3R5cGUucHVzaE1hc2sgPSBmdW5jdGlvbiAodGFyZ2V0LCBtYXNrRGF0YSlcbntcbiAgICBpZiAobWFza0RhdGEudGV4dHVyZSlcbiAgICB7XG4gICAgICAgIHRoaXMucHVzaFNwcml0ZU1hc2sodGFyZ2V0LCBtYXNrRGF0YSk7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHRoaXMucHVzaFN0ZW5jaWxNYXNrKHRhcmdldCwgbWFza0RhdGEpO1xuICAgIH1cblxufTtcblxuLyoqXG4gKiBSZW1vdmVzIHRoZSBsYXN0IG1hc2sgZnJvbSB0aGUgbWFzayBzdGFjayBhbmQgZG9lc24ndCByZXR1cm4gaXQuXG4gKlxuICogQHBhcmFtIHRhcmdldCB7UElYSS5SZW5kZXJUYXJnZXR9XG4gKiBAcGFyYW0gbWFza0RhdGEge2FueVtdfVxuICovXG5NYXNrTWFuYWdlci5wcm90b3R5cGUucG9wTWFzayA9IGZ1bmN0aW9uICh0YXJnZXQsIG1hc2tEYXRhKVxue1xuICAgIGlmIChtYXNrRGF0YS50ZXh0dXJlKVxuICAgIHtcbiAgICAgICAgdGhpcy5wb3BTcHJpdGVNYXNrKHRhcmdldCwgbWFza0RhdGEpO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICB0aGlzLnBvcFN0ZW5jaWxNYXNrKHRhcmdldCwgbWFza0RhdGEpO1xuICAgIH1cbn07XG5cbi8qKlxuICogQXBwbGllcyB0aGUgTWFzayBhbmQgYWRkcyBpdCB0byB0aGUgY3VycmVudCBmaWx0ZXIgc3RhY2suXG4gKlxuICogQHBhcmFtIHRhcmdldCB7UElYSS5SZW5kZXJUYXJnZXR9XG4gKiBAcGFyYW0gbWFza0RhdGEge2FueVtdfVxuICovXG5NYXNrTWFuYWdlci5wcm90b3R5cGUucHVzaFNwcml0ZU1hc2sgPSBmdW5jdGlvbiAodGFyZ2V0LCBtYXNrRGF0YSlcbntcbiAgICB2YXIgYWxwaGFNYXNrRmlsdGVyID0gdGhpcy5hbHBoYU1hc2tQb29sLnBvcCgpO1xuXG4gICAgaWYgKCFhbHBoYU1hc2tGaWx0ZXIpXG4gICAge1xuICAgICAgICBhbHBoYU1hc2tGaWx0ZXIgPSBbbmV3IEFscGhhTWFza0ZpbHRlcihtYXNrRGF0YSldO1xuICAgIH1cblxuICAgIGFscGhhTWFza0ZpbHRlclswXS5tYXNrU3ByaXRlID0gbWFza0RhdGE7XG4gICAgdGhpcy5yZW5kZXJlci5maWx0ZXJNYW5hZ2VyLnB1c2hGaWx0ZXIodGFyZ2V0LCBhbHBoYU1hc2tGaWx0ZXIpO1xufTtcblxuLyoqXG4gKiBSZW1vdmVzIHRoZSBsYXN0IGZpbHRlciBmcm9tIHRoZSBmaWx0ZXIgc3RhY2sgYW5kIGRvZXNuJ3QgcmV0dXJuIGl0LlxuICpcbiAqL1xuTWFza01hbmFnZXIucHJvdG90eXBlLnBvcFNwcml0ZU1hc2sgPSBmdW5jdGlvbiAoKVxue1xuICAgIHZhciBmaWx0ZXJzID0gdGhpcy5yZW5kZXJlci5maWx0ZXJNYW5hZ2VyLnBvcEZpbHRlcigpO1xuXG4gICAgdGhpcy5hbHBoYU1hc2tQb29sLnB1c2goZmlsdGVycyk7XG59O1xuXG5cbi8qKlxuICogQXBwbGllcyB0aGUgTWFzayBhbmQgYWRkcyBpdCB0byB0aGUgY3VycmVudCBmaWx0ZXIgc3RhY2suXG4gKlxuICogQHBhcmFtIHRhcmdldCB7UElYSS5SZW5kZXJUYXJnZXR9XG4gKiBAcGFyYW0gbWFza0RhdGEge2FueVtdfVxuICovXG5NYXNrTWFuYWdlci5wcm90b3R5cGUucHVzaFN0ZW5jaWxNYXNrID0gZnVuY3Rpb24gKHRhcmdldCwgbWFza0RhdGEpXG57XG4gICAgdGhpcy5yZW5kZXJlci5zdGVuY2lsTWFuYWdlci5wdXNoTWFzayhtYXNrRGF0YSk7XG59O1xuXG4vKipcbiAqIFJlbW92ZXMgdGhlIGxhc3QgZmlsdGVyIGZyb20gdGhlIGZpbHRlciBzdGFjayBhbmQgZG9lc24ndCByZXR1cm4gaXQuXG4gKlxuICogQHBhcmFtIHRhcmdldCB7UElYSS5SZW5kZXJUYXJnZXR9XG4gKiBAcGFyYW0gbWFza0RhdGEge2FueVtdfVxuICovXG5NYXNrTWFuYWdlci5wcm90b3R5cGUucG9wU3RlbmNpbE1hc2sgPSBmdW5jdGlvbiAodGFyZ2V0LCBtYXNrRGF0YSlcbntcbiAgICB0aGlzLnJlbmRlcmVyLnN0ZW5jaWxNYW5hZ2VyLnBvcE1hc2sobWFza0RhdGEpO1xufTtcblxuIiwidmFyIFdlYkdMTWFuYWdlciA9IHJlcXVpcmUoJy4vV2ViR0xNYW5hZ2VyJyksXG4gICAgVGV4dHVyZVNoYWRlciA9IHJlcXVpcmUoJy4uL3NoYWRlcnMvVGV4dHVyZVNoYWRlcicpLFxuICAgIENvbXBsZXhQcmltaXRpdmVTaGFkZXIgPSByZXF1aXJlKCcuLi9zaGFkZXJzL0NvbXBsZXhQcmltaXRpdmVTaGFkZXInKSxcbiAgICBQcmltaXRpdmVTaGFkZXIgPSByZXF1aXJlKCcuLi9zaGFkZXJzL1ByaW1pdGl2ZVNoYWRlcicpLFxuICAgIHV0aWxzID0gcmVxdWlyZSgnLi4vLi4vLi4vdXRpbHMnKTtcblxuLyoqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAZXh0ZW5kcyBQSVhJLldlYkdMTWFuYWdlclxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLldlYkdMUmVuZGVyZXJ9IFRoZSByZW5kZXJlciB0aGlzIG1hbmFnZXIgd29ya3MgZm9yLlxuICovXG5mdW5jdGlvbiBTaGFkZXJNYW5hZ2VyKHJlbmRlcmVyKVxue1xuICAgIFdlYkdMTWFuYWdlci5jYWxsKHRoaXMsIHJlbmRlcmVyKTtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLm1heEF0dGlicyA9IDEwO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7YW55W119XG4gICAgICovXG4gICAgdGhpcy5hdHRyaWJTdGF0ZSA9IFtdO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7YW55W119XG4gICAgICovXG4gICAgdGhpcy50ZW1wQXR0cmliU3RhdGUgPSBbXTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5tYXhBdHRpYnM7IGkrKylcbiAgICB7XG4gICAgICAgIHRoaXMuYXR0cmliU3RhdGVbaV0gPSBmYWxzZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHthbnlbXX1cbiAgICAgKi9cbiAgICB0aGlzLnN0YWNrID0gW107XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9jdXJyZW50SWQgPSAtMTtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge1BJWEkuU2hhZGVyfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5jdXJyZW50U2hhZGVyID0gbnVsbDtcblxuLy8gICAgdGhpcy5pbml0UGx1Z2lucygpO1xufVxuXG5TaGFkZXJNYW5hZ2VyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoV2ViR0xNYW5hZ2VyLnByb3RvdHlwZSk7XG5TaGFkZXJNYW5hZ2VyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFNoYWRlck1hbmFnZXI7XG51dGlscy5wbHVnaW5UYXJnZXQubWl4aW4oU2hhZGVyTWFuYWdlcik7XG5cbm1vZHVsZS5leHBvcnRzID0gU2hhZGVyTWFuYWdlcjtcblxuLyoqXG4gKiBDYWxsZWQgd2hlbiB0aGVyZSBpcyBhIFdlYkdMIGNvbnRleHQgY2hhbmdlLlxuICpcbiAqL1xuU2hhZGVyTWFuYWdlci5wcm90b3R5cGUub25Db250ZXh0Q2hhbmdlID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLmluaXRQbHVnaW5zKCk7XG5cbiAgICB2YXIgZ2wgPSB0aGlzLnJlbmRlcmVyLmdsO1xuXG4gICAgLy8gZ2V0IHRoZSBtYXhpbXVtIG51bWJlciBvZiBhdHRyaWJ1dGUgY29ycmVjdGx5IGFzIHRoaXMgdGVuZHMgdG8gdmFyeVxuICAgIHRoaXMubWF4QXR0aWJzID0gZ2wuZ2V0UGFyYW1ldGVyKGdsLk1BWF9WRVJURVhfQVRUUklCUyk7XG5cbiAgICB0aGlzLmF0dHJpYlN0YXRlID0gW107XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMubWF4QXR0aWJzOyBpKyspXG4gICAge1xuICAgICAgICB0aGlzLmF0dHJpYlN0YXRlW2ldID0gZmFsc2U7XG4gICAgfVxuXG4gICAgLy8gVE9ETyAtIFdoeSBhcmUgdGhlc2Ugbm90IHBsdWdpbnM/IFdlIGNhbid0IGRlY291cGxlIHByaW1pdGl2ZXMgdW5sZXNzIHRoZXkgYXJlLi4uLlxuICAgIHRoaXMuZGVmYXVsdFNoYWRlciA9IG5ldyBUZXh0dXJlU2hhZGVyKHRoaXMpO1xuICAgIHRoaXMucHJpbWl0aXZlU2hhZGVyID0gbmV3IFByaW1pdGl2ZVNoYWRlcih0aGlzKTtcbiAgICB0aGlzLmNvbXBsZXhQcmltaXRpdmVTaGFkZXIgPSBuZXcgQ29tcGxleFByaW1pdGl2ZVNoYWRlcih0aGlzKTtcbn07XG5cbi8qKlxuICogVGFrZXMgdGhlIGF0dHJpYnV0ZXMgZ2l2ZW4gaW4gcGFyYW1ldGVycyBhbmQgdXBsb2FkcyB0aGVtLlxuICpcbiAqIEBwYXJhbSBhdHRyaWJzIHthbnlbXX0gYXR0cmlic1xuICovXG5TaGFkZXJNYW5hZ2VyLnByb3RvdHlwZS5zZXRBdHRyaWJzID0gZnVuY3Rpb24gKGF0dHJpYnMpXG57XG4gICAgLy8gcmVzZXQgdGVtcCBzdGF0ZVxuICAgIHZhciBpO1xuXG4gICAgZm9yIChpID0gMDsgaSA8IHRoaXMudGVtcEF0dHJpYlN0YXRlLmxlbmd0aDsgaSsrKVxuICAgIHtcbiAgICAgICAgdGhpcy50ZW1wQXR0cmliU3RhdGVbaV0gPSBmYWxzZTtcbiAgICB9XG5cbiAgICAvLyBzZXQgdGhlIG5ldyBhdHRyaWJzXG4gICAgZm9yICh2YXIgYSBpbiBhdHRyaWJzKVxuICAgIHtcbiAgICAgICAgdGhpcy50ZW1wQXR0cmliU3RhdGVbYXR0cmlic1thXV0gPSB0cnVlO1xuICAgIH1cblxuICAgIHZhciBnbCA9IHRoaXMucmVuZGVyZXIuZ2w7XG5cbiAgICBmb3IgKGkgPSAwOyBpIDwgdGhpcy5hdHRyaWJTdGF0ZS5sZW5ndGg7IGkrKylcbiAgICB7XG4gICAgICAgIGlmICh0aGlzLmF0dHJpYlN0YXRlW2ldICE9PSB0aGlzLnRlbXBBdHRyaWJTdGF0ZVtpXSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5hdHRyaWJTdGF0ZVtpXSA9IHRoaXMudGVtcEF0dHJpYlN0YXRlW2ldO1xuXG4gICAgICAgICAgICBpZiAodGhpcy5hdHRyaWJTdGF0ZVtpXSlcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBnbC5lbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBnbC5kaXNhYmxlVmVydGV4QXR0cmliQXJyYXkoaSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG59O1xuXG4vKipcbiAqIFNldHMgdGhlIGN1cnJlbnQgc2hhZGVyLlxuICpcbiAqIEBwYXJhbSBzaGFkZXIge1BJWEkuU2hhZGVyfSB0aGUgc2hhZGVyIHRvIHVwbG9hZFxuICovXG5TaGFkZXJNYW5hZ2VyLnByb3RvdHlwZS5zZXRTaGFkZXIgPSBmdW5jdGlvbiAoc2hhZGVyKVxue1xuICAgIHJldHVybjtcbiAgICBpZiAodGhpcy5fY3VycmVudElkID09PSBzaGFkZXIudWlkKVxuICAgIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHRoaXMuX2N1cnJlbnRJZCA9IHNoYWRlci51aWQ7XG5cbiAgICB0aGlzLmN1cnJlbnRTaGFkZXIgPSBzaGFkZXI7XG5cbiAgICB0aGlzLnJlbmRlcmVyLmdsLnVzZVByb2dyYW0oc2hhZGVyLnByb2dyYW0pO1xuICAgIHRoaXMuc2V0QXR0cmlicyhzaGFkZXIuYXR0cmlidXRlcyk7XG5cbiAgICByZXR1cm4gdHJ1ZTtcbn07XG5cbi8qKlxuICogRGVzdHJveXMgdGhpcyBvYmplY3QuXG4gKlxuICovXG5TaGFkZXJNYW5hZ2VyLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLnByaW1pdGl2ZVNoYWRlci5kZXN0cm95KCk7XG4gICAgdGhpcy5jb21wbGV4UHJpbWl0aXZlU2hhZGVyLmRlc3Ryb3koKTtcbiAgICBXZWJHTE1hbmFnZXIucHJvdG90eXBlLmRlc3Ryb3kuY2FsbCh0aGlzKTtcblxuICAgIHRoaXMuZGVzdHJveVBsdWdpbnMoKTtcblxuICAgIHRoaXMuYXR0cmliU3RhdGUgPSBudWxsO1xuXG4gICAgdGhpcy50ZW1wQXR0cmliU3RhdGUgPSBudWxsO1xufTtcbiIsInZhciBXZWJHTE1hbmFnZXIgPSByZXF1aXJlKCcuL1dlYkdMTWFuYWdlcicpLFxuICAgIHV0aWxzID0gcmVxdWlyZSgnLi4vLi4vLi4vdXRpbHMnKTtcblxuLyoqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcn0gVGhlIHJlbmRlcmVyIHRoaXMgbWFuYWdlciB3b3JrcyBmb3IuXG4gKi9cbmZ1bmN0aW9uIFdlYkdMTWFza01hbmFnZXIocmVuZGVyZXIpXG57XG4gICAgV2ViR0xNYW5hZ2VyLmNhbGwodGhpcywgcmVuZGVyZXIpO1xuICAgIHRoaXMuc3RlbmNpbE1hc2tTdGFjayA9IG51bGw7XG59XG5cbldlYkdMTWFza01hbmFnZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShXZWJHTE1hbmFnZXIucHJvdG90eXBlKTtcbldlYkdMTWFza01hbmFnZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gV2ViR0xNYXNrTWFuYWdlcjtcbm1vZHVsZS5leHBvcnRzID0gV2ViR0xNYXNrTWFuYWdlcjtcblxuLyoqXG4gKiBDaGFuZ2VzIHRoZSBtYXNrIHN0YWNrIHRoYXQgaXMgdXNlZCBieSB0aGlzIG1hbmFnZXIuXG4gKlxuICogQHBhcmFtIHN0ZW5jaWxNYXNrU3RhY2sge1BJWEkuU3RlbmNpbE1hc2tTdGFja30gVGhlIG1hc2sgc3RhY2tcbiAqL1xuV2ViR0xNYXNrTWFuYWdlci5wcm90b3R5cGUuc2V0TWFza1N0YWNrID0gZnVuY3Rpb24gKCBzdGVuY2lsTWFza1N0YWNrIClcbntcbiAgICB0aGlzLnN0ZW5jaWxNYXNrU3RhY2sgPSBzdGVuY2lsTWFza1N0YWNrO1xuXG4gICAgdmFyIGdsID0gdGhpcy5yZW5kZXJlci5nbDtcblxuICAgIGlmIChzdGVuY2lsTWFza1N0YWNrLnN0ZW5jaWxTdGFjay5sZW5ndGggPT09IDApXG4gICAge1xuICAgICAgICBnbC5kaXNhYmxlKGdsLlNURU5DSUxfVEVTVCk7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIGdsLmVuYWJsZShnbC5TVEVOQ0lMX1RFU1QpO1xuICAgIH1cbn07XG5cbi8qKlxuICogQXBwbGllcyB0aGUgTWFzayBhbmQgYWRkcyBpdCB0byB0aGUgY3VycmVudCBmaWx0ZXIgc3RhY2suIEBhbHZpblxuICpcbiAqIEBwYXJhbSBncmFwaGljcyB7UElYSS5HcmFwaGljc31cbiAqIEBwYXJhbSB3ZWJHTERhdGEge2FueVtdfVxuICovXG5XZWJHTE1hc2tNYW5hZ2VyLnByb3RvdHlwZS5wdXNoU3RlbmNpbCA9IGZ1bmN0aW9uIChncmFwaGljcywgd2ViR0xEYXRhKVxue1xuICAgIHRoaXMucmVuZGVyZXIuX2FjdGl2ZVJlbmRlclRhcmdldC5hdHRhY2hTdGVuY2lsQnVmZmVyKCk7XG5cbiAgICB2YXIgZ2wgPSB0aGlzLnJlbmRlcmVyLmdsLFxuICAgICAgICBzbXMgPSB0aGlzLnN0ZW5jaWxNYXNrU3RhY2s7XG5cbiAgICB0aGlzLmJpbmRHcmFwaGljcyhncmFwaGljcywgd2ViR0xEYXRhKTtcblxuICAgIGlmIChzbXMuc3RlbmNpbFN0YWNrLmxlbmd0aCA9PT0gMClcbiAgICB7XG4gICAgICAgIGdsLmVuYWJsZShnbC5TVEVOQ0lMX1RFU1QpO1xuICAgICAgICBnbC5jbGVhcihnbC5TVEVOQ0lMX0JVRkZFUl9CSVQpO1xuICAgICAgICBzbXMucmV2ZXJzZSA9IHRydWU7XG4gICAgICAgIHNtcy5jb3VudCA9IDA7XG4gICAgfVxuXG4gICAgc21zLnN0ZW5jaWxTdGFjay5wdXNoKHdlYkdMRGF0YSk7XG5cbiAgICB2YXIgbGV2ZWwgPSBzbXMuY291bnQ7XG5cbiAgICBnbC5jb2xvck1hc2soZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UpO1xuXG4gICAgZ2wuc3RlbmNpbEZ1bmMoZ2wuQUxXQVlTLDAsMHhGRik7XG4gICAgZ2wuc3RlbmNpbE9wKGdsLktFRVAsZ2wuS0VFUCxnbC5JTlZFUlQpO1xuXG4gICAgLy8gZHJhdyB0aGUgdHJpYW5nbGUgc3RyaXAhXG5cbiAgICBpZiAod2ViR0xEYXRhLm1vZGUgPT09IDEpXG4gICAge1xuICAgICAgICBnbC5kcmF3RWxlbWVudHMoZ2wuVFJJQU5HTEVfRkFOLCAgd2ViR0xEYXRhLmluZGljZXMubGVuZ3RoIC0gNCwgZ2wuVU5TSUdORURfU0hPUlQsIDAgKTtcblxuICAgICAgICBpZiAoc21zLnJldmVyc2UpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGdsLnN0ZW5jaWxGdW5jKGdsLkVRVUFMLCAweEZGIC0gbGV2ZWwsIDB4RkYpO1xuICAgICAgICAgICAgZ2wuc3RlbmNpbE9wKGdsLktFRVAsZ2wuS0VFUCxnbC5ERUNSKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgIHtcbiAgICAgICAgICAgIGdsLnN0ZW5jaWxGdW5jKGdsLkVRVUFMLGxldmVsLCAweEZGKTtcbiAgICAgICAgICAgIGdsLnN0ZW5jaWxPcChnbC5LRUVQLGdsLktFRVAsZ2wuSU5DUik7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBkcmF3IGEgcXVhZCB0byBpbmNyZW1lbnQuLlxuICAgICAgICBnbC5kcmF3RWxlbWVudHMoZ2wuVFJJQU5HTEVfRkFOLCA0LCBnbC5VTlNJR05FRF9TSE9SVCwgKCB3ZWJHTERhdGEuaW5kaWNlcy5sZW5ndGggLSA0ICkgKiAyICk7XG5cbiAgICAgICAgaWYgKHNtcy5yZXZlcnNlKVxuICAgICAgICB7XG4gICAgICAgICAgICBnbC5zdGVuY2lsRnVuYyhnbC5FUVVBTCwweEZGLShsZXZlbCsxKSwgMHhGRik7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgICBnbC5zdGVuY2lsRnVuYyhnbC5FUVVBTCxsZXZlbCsxLCAweEZGKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHNtcy5yZXZlcnNlID0gIXNtcy5yZXZlcnNlO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICBpZiAoIXNtcy5yZXZlcnNlKVxuICAgICAgICB7XG4gICAgICAgICAgICBnbC5zdGVuY2lsRnVuYyhnbC5FUVVBTCwgMHhGRiAtIGxldmVsLCAweEZGKTtcbiAgICAgICAgICAgIGdsLnN0ZW5jaWxPcChnbC5LRUVQLGdsLktFRVAsZ2wuREVDUik7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgICBnbC5zdGVuY2lsRnVuYyhnbC5FUVVBTCxsZXZlbCwgMHhGRik7XG4gICAgICAgICAgICBnbC5zdGVuY2lsT3AoZ2wuS0VFUCxnbC5LRUVQLGdsLklOQ1IpO1xuICAgICAgICB9XG5cbiAgICAgICAgZ2wuZHJhd0VsZW1lbnRzKGdsLlRSSUFOR0xFX1NUUklQLCAgd2ViR0xEYXRhLmluZGljZXMubGVuZ3RoLCBnbC5VTlNJR05FRF9TSE9SVCwgMCApO1xuXG4gICAgICAgIGlmICghc21zLnJldmVyc2UpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGdsLnN0ZW5jaWxGdW5jKGdsLkVRVUFMLDB4RkYtKGxldmVsKzEpLCAweEZGKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgIHtcbiAgICAgICAgICAgIGdsLnN0ZW5jaWxGdW5jKGdsLkVRVUFMLGxldmVsKzEsIDB4RkYpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZ2wuY29sb3JNYXNrKHRydWUsIHRydWUsIHRydWUsIHRydWUpO1xuICAgIGdsLnN0ZW5jaWxPcChnbC5LRUVQLGdsLktFRVAsZ2wuS0VFUCk7XG5cbiAgICBzbXMuY291bnQrKztcbn07XG5cbi8qKlxuICogVE9ETyB0aGlzIGRvZXMgbm90IGJlbG9uZyBoZXJlIVxuICpcbiAqIEBwYXJhbSBncmFwaGljcyB7UElYSS5HcmFwaGljc31cbiAqIEBwYXJhbSB3ZWJHTERhdGEge2FueVtdfVxuICovXG5XZWJHTE1hc2tNYW5hZ2VyLnByb3RvdHlwZS5iaW5kR3JhcGhpY3MgPSBmdW5jdGlvbiAoZ3JhcGhpY3MsIHdlYkdMRGF0YSlcbntcbiAgICAvL2lmICh0aGlzLl9jdXJyZW50R3JhcGhpY3MgPT09IGdyYXBoaWNzKXJldHVybjtcbiAgICB2YXIgZ2wgPSB0aGlzLnJlbmRlcmVyLmdsO1xuXG4gICAgIC8vIGJpbmQgdGhlIGdyYXBoaWNzIG9iamVjdC4uXG4gICAgdmFyIHNoYWRlciA9IHRoaXMucmVuZGVyZXIucGx1Z2lucy5ncmFwaGljcy5wcmltaXRpdmVTaGFkZXI7XG5cbiAgICBpZiAod2ViR0xEYXRhLm1vZGUgPT09IDEpXG4gICAge1xuICAgICAgICAvKlxuICAgICAgICBzaGFkZXIgPSB0aGlzLnJlbmRlcmVyLnNoYWRlck1hbmFnZXIuY29tcGxleFByaW1pdGl2ZVNoYWRlcjtcblxuICAgICAgICB0aGlzLnJlbmRlcmVyLnNoYWRlck1hbmFnZXIuc2V0U2hhZGVyKHNoYWRlcik7XG5cbiAgICAgICAgZ2wudW5pZm9ybU1hdHJpeDNmdihzaGFkZXIudW5pZm9ybXMudHJhbnNsYXRpb25NYXRyaXguX2xvY2F0aW9uLCBmYWxzZSwgZ3JhcGhpY3Mud29ybGRUcmFuc2Zvcm0udG9BcnJheSh0cnVlKSk7XG5cbiAgICAgICAgZ2wudW5pZm9ybU1hdHJpeDNmdihzaGFkZXIudW5pZm9ybXMucHJvamVjdGlvbk1hdHJpeC5fbG9jYXRpb24sIGZhbHNlLCB0aGlzLnJlbmRlcmVyLmN1cnJlbnRSZW5kZXJUYXJnZXQucHJvamVjdGlvbk1hdHJpeC50b0FycmF5KHRydWUpKTtcblxuICAgICAgICBnbC51bmlmb3JtM2Z2KHNoYWRlci51bmlmb3Jtcy50aW50Ll9sb2NhdGlvbiwgdXRpbHMuaGV4MnJnYihncmFwaGljcy50aW50KSk7XG5cbiAgICAgICAgZ2wudW5pZm9ybTNmdihzaGFkZXIudW5pZm9ybXMuY29sb3IuX2xvY2F0aW9uLCB3ZWJHTERhdGEuY29sb3IpO1xuXG4gICAgICAgIGdsLnVuaWZvcm0xZihzaGFkZXIudW5pZm9ybXMuYWxwaGEuX2xvY2F0aW9uLCBncmFwaGljcy53b3JsZEFscGhhKTtcblxuICAgICAgICBnbC5iaW5kQnVmZmVyKGdsLkFSUkFZX0JVRkZFUiwgd2ViR0xEYXRhLmJ1ZmZlcik7XG5cbiAgICAgICAgZ2wudmVydGV4QXR0cmliUG9pbnRlcihzaGFkZXIuYXR0cmlidXRlcy5hVmVydGV4UG9zaXRpb24sIDIsIGdsLkZMT0FULCBmYWxzZSwgNCAqIDIsIDApO1xuXG4gICAgICAgIC8vIG5vdyBkbyB0aGUgcmVzdC4uXG4gICAgICAgIC8vIHNldCB0aGUgaW5kZXggYnVmZmVyIVxuICAgICAgICBnbC5iaW5kQnVmZmVyKGdsLkVMRU1FTlRfQVJSQVlfQlVGRkVSLCB3ZWJHTERhdGEuaW5kZXhCdWZmZXIpO1xuICAgICovXG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIC8vdGhpcy5yZW5kZXJlci5zaGFkZXJNYW5hZ2VyLmFjdGl2YXRlUHJpbWl0aXZlU2hhZGVyKCk7XG4vLyAgICAgICAgc2hhZGVyID0gdGhpcy5yZW5kZXJlci5zaGFkZXJNYW5hZ2VyLnByaW1pdGl2ZVNoYWRlcjtcbiAgICAgICBcbiAgICAgICAgdGhpcy5yZW5kZXJlci5iaW5kU2hhZGVyKHNoYWRlcilcblxuICAgICAgICBzaGFkZXIudW5pZm9ybXMudHJhbnNsYXRpb25NYXRyaXggPSBncmFwaGljcy53b3JsZFRyYW5zZm9ybS50b0FycmF5KHRydWUpO1xuICAgICAgICBzaGFkZXIudW5pZm9ybXMudGludCA9IHV0aWxzLmhleDJyZ2IoZ3JhcGhpY3MudGludCk7XG4gICAgICAgIHNoYWRlci51bmlmb3Jtcy5hbHBoYSA9IGdyYXBoaWNzLndvcmxkQWxwaGE7XG5cblxuICAgICAgICBnbC5iaW5kQnVmZmVyKGdsLkFSUkFZX0JVRkZFUiwgd2ViR0xEYXRhLmJ1ZmZlcik7XG5cblxuICAgICAgICBzaGFkZXIuYXR0cmlidXRlcy5hVmVydGV4UG9zaXRpb24ucG9pbnRlcihnbC5GTE9BVCwgZmFsc2UsIDQgKiA2LCAwKTtcbiAgICAgICAgc2hhZGVyLmF0dHJpYnV0ZXMuYUNvbG9yLnBvaW50ZXIoZ2wuRkxPQVQsIGZhbHNlLCA0ICogNiwgMiAqIDQpO1xuXG4gICAgICAgIGdsLmVuYWJsZVZlcnRleEF0dHJpYkFycmF5KHNoYWRlci5hdHRyaWJ1dGVzLmFWZXJ0ZXhQb3NpdGlvbi5sb2NhdGlvbik7XG4gICAgICAgIGdsLmVuYWJsZVZlcnRleEF0dHJpYkFycmF5KHNoYWRlci5hdHRyaWJ1dGVzLmFDb2xvci5sb2NhdGlvbik7XG5cbiAgICAgICAgLy8gc2V0IHRoZSBpbmRleCBidWZmZXIhXG4gICAgICAgIGdsLmJpbmRCdWZmZXIoZ2wuRUxFTUVOVF9BUlJBWV9CVUZGRVIsIHdlYkdMRGF0YS5pbmRleEJ1ZmZlcik7XG4vLyAgICAgICAgZ2wuZHJhd0VsZW1lbnRzKGdsLlRSSUFOR0xFX1NUUklQLCAgd2ViR0xEYXRhLmluZGljZXMubGVuZ3RoLCBnbC5VTlNJR05FRF9TSE9SVCwgMCApO1xuXG5cbiAgICAgIC8qICB0aGlzLnJlbmRlcmVyLnNoYWRlck1hbmFnZXIuc2V0U2hhZGVyKHNoYWRlcik7XG5cbiAgICAgICAgZ2wudW5pZm9ybU1hdHJpeDNmdihzaGFkZXIudW5pZm9ybXMudHJhbnNsYXRpb25NYXRyaXguX2xvY2F0aW9uLCBmYWxzZSwgZ3JhcGhpY3Mud29ybGRUcmFuc2Zvcm0udG9BcnJheSh0cnVlKSk7XG5cbiAgICAgICAgZ2wudW5pZm9ybU1hdHJpeDNmdihzaGFkZXIudW5pZm9ybXMucHJvamVjdGlvbk1hdHJpeC5fbG9jYXRpb24sIGZhbHNlLCB0aGlzLnJlbmRlcmVyLmN1cnJlbnRSZW5kZXJUYXJnZXQucHJvamVjdGlvbk1hdHJpeC50b0FycmF5KHRydWUpKTtcblxuICAgICAgICBnbC51bmlmb3JtM2Z2KHNoYWRlci51bmlmb3Jtcy50aW50Ll9sb2NhdGlvbiwgdXRpbHMuaGV4MnJnYihncmFwaGljcy50aW50KSk7XG5cbiAgICAgICAgZ2wudW5pZm9ybTFmKHNoYWRlci51bmlmb3Jtcy5hbHBoYS5fbG9jYXRpb24sIGdyYXBoaWNzLndvcmxkQWxwaGEpO1xuXG4gICAgICAgIGdsLmJpbmRCdWZmZXIoZ2wuQVJSQVlfQlVGRkVSLCB3ZWJHTERhdGEuYnVmZmVyKTtcblxuICAgICAgICBnbC52ZXJ0ZXhBdHRyaWJQb2ludGVyKHNoYWRlci5hdHRyaWJ1dGVzLmFWZXJ0ZXhQb3NpdGlvbiwgMiwgZ2wuRkxPQVQsIGZhbHNlLCA0ICogNiwgMCk7XG4gICAgICAgIGdsLnZlcnRleEF0dHJpYlBvaW50ZXIoc2hhZGVyLmF0dHJpYnV0ZXMuYUNvbG9yLCA0LCBnbC5GTE9BVCwgZmFsc2UsNCAqIDYsIDIgKiA0KTtcblxuICAgICAgICAvLyBzZXQgdGhlIGluZGV4IGJ1ZmZlciFcbiAgICAgICAgZ2wuYmluZEJ1ZmZlcihnbC5FTEVNRU5UX0FSUkFZX0JVRkZFUiwgd2ViR0xEYXRhLmluZGV4QnVmZmVyKTsqL1xuICAgIH1cbn07XG5cbi8qKlxuICogVE9ETyBAYWx2aW5cbiAqIEBwYXJhbSBncmFwaGljcyB7UElYSS5HcmFwaGljc31cbiAqIEBwYXJhbSB3ZWJHTERhdGEge2FueVtdfVxuICovXG5XZWJHTE1hc2tNYW5hZ2VyLnByb3RvdHlwZS5wb3BTdGVuY2lsID0gZnVuY3Rpb24gKGdyYXBoaWNzLCB3ZWJHTERhdGEpXG57XG4gICAgdmFyIGdsID0gdGhpcy5yZW5kZXJlci5nbCxcbiAgICAgICAgc21zID0gdGhpcy5zdGVuY2lsTWFza1N0YWNrO1xuXG4gICAgc21zLnN0ZW5jaWxTdGFjay5wb3AoKTtcblxuICAgIHNtcy5jb3VudC0tO1xuXG4gICAgaWYgKHNtcy5zdGVuY2lsU3RhY2subGVuZ3RoID09PSAwKVxuICAgIHtcbiAgICAgICAgLy8gdGhlIHN0YWNrIGlzIGVtcHR5IVxuICAgICAgICBnbC5kaXNhYmxlKGdsLlNURU5DSUxfVEVTVCk7XG5cbiAgICB9XG4gICAgZWxzZVxuICAgIHtcblxuICAgICAgICB2YXIgbGV2ZWwgPSBzbXMuY291bnQ7XG5cbiAgICAgICAgdGhpcy5iaW5kR3JhcGhpY3MoZ3JhcGhpY3MsIHdlYkdMRGF0YSk7XG5cbiAgICAgICAgZ2wuY29sb3JNYXNrKGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlKTtcblxuICAgICAgICBpZiAod2ViR0xEYXRhLm1vZGUgPT09IDEpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHNtcy5yZXZlcnNlID0gIXNtcy5yZXZlcnNlO1xuXG4gICAgICAgICAgICBpZiAoc21zLnJldmVyc2UpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgZ2wuc3RlbmNpbEZ1bmMoZ2wuRVFVQUwsIDB4RkYgLSAobGV2ZWwrMSksIDB4RkYpO1xuICAgICAgICAgICAgICAgIGdsLnN0ZW5jaWxPcChnbC5LRUVQLGdsLktFRVAsZ2wuSU5DUik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgZ2wuc3RlbmNpbEZ1bmMoZ2wuRVFVQUwsbGV2ZWwrMSwgMHhGRik7XG4gICAgICAgICAgICAgICAgZ2wuc3RlbmNpbE9wKGdsLktFRVAsZ2wuS0VFUCxnbC5ERUNSKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gZHJhdyBhIHF1YWQgdG8gaW5jcmVtZW50Li5cbiAgICAgICAgICAgIGdsLmRyYXdFbGVtZW50cyhnbC5UUklBTkdMRV9GQU4sIDQsIGdsLlVOU0lHTkVEX1NIT1JULCAoIHdlYkdMRGF0YS5pbmRpY2VzLmxlbmd0aCAtIDQgKSAqIDIgKTtcblxuICAgICAgICAgICAgZ2wuc3RlbmNpbEZ1bmMoZ2wuQUxXQVlTLDAsMHhGRik7XG4gICAgICAgICAgICBnbC5zdGVuY2lsT3AoZ2wuS0VFUCxnbC5LRUVQLGdsLklOVkVSVCk7XG5cbiAgICAgICAgICAgIC8vIGRyYXcgdGhlIHRyaWFuZ2xlIHN0cmlwIVxuICAgICAgICAgICAgZ2wuZHJhd0VsZW1lbnRzKGdsLlRSSUFOR0xFX0ZBTiwgIHdlYkdMRGF0YS5pbmRpY2VzLmxlbmd0aCAtIDQsIGdsLlVOU0lHTkVEX1NIT1JULCAwICk7XG5cbiAgICAgICAgICAgIHRoaXMucmVuZGVyZXIuZHJhd0NvdW50ICs9IDI7XG5cbiAgICAgICAgICAgIGlmICghc21zLnJldmVyc2UpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgZ2wuc3RlbmNpbEZ1bmMoZ2wuRVFVQUwsMHhGRi0obGV2ZWwpLCAweEZGKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBnbC5zdGVuY2lsRnVuYyhnbC5FUVVBTCxsZXZlbCwgMHhGRik7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgIHtcbiAgICAgICAgICAvLyAgY29uc29sZS5sb2coXCI8PD4+XCIpXG4gICAgICAgICAgICBpZiAoIXNtcy5yZXZlcnNlKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGdsLnN0ZW5jaWxGdW5jKGdsLkVRVUFMLCAweEZGIC0gKGxldmVsKzEpLCAweEZGKTtcbiAgICAgICAgICAgICAgICBnbC5zdGVuY2lsT3AoZ2wuS0VFUCxnbC5LRUVQLGdsLklOQ1IpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGdsLnN0ZW5jaWxGdW5jKGdsLkVRVUFMLGxldmVsKzEsIDB4RkYpO1xuICAgICAgICAgICAgICAgIGdsLnN0ZW5jaWxPcChnbC5LRUVQLGdsLktFRVAsZ2wuREVDUik7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGdsLmRyYXdFbGVtZW50cyhnbC5UUklBTkdMRV9TVFJJUCwgIHdlYkdMRGF0YS5pbmRpY2VzLmxlbmd0aCwgZ2wuVU5TSUdORURfU0hPUlQsIDAgKTtcblxuICAgICAgICAgICAgdGhpcy5yZW5kZXJlci5kcmF3Q291bnQrKztcblxuICAgICAgICAgICAgaWYgKCFzbXMucmV2ZXJzZSlcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBnbC5zdGVuY2lsRnVuYyhnbC5FUVVBTCwweEZGLShsZXZlbCksIDB4RkYpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGdsLnN0ZW5jaWxGdW5jKGdsLkVRVUFMLGxldmVsLCAweEZGKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGdsLmNvbG9yTWFzayh0cnVlLCB0cnVlLCB0cnVlLCB0cnVlKTtcbiAgICAgICAgZ2wuc3RlbmNpbE9wKGdsLktFRVAsZ2wuS0VFUCxnbC5LRUVQKTtcblxuXG4gICAgfVxufTtcblxuLyoqXG4gKiBEZXN0cm95cyB0aGUgbWFzayBzdGFjay5cbiAqXG4gKi9cbldlYkdMTWFza01hbmFnZXIucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoKVxue1xuICAgIFdlYkdMTWFuYWdlci5wcm90b3R5cGUuZGVzdHJveS5jYWxsKHRoaXMpO1xuXG4gICAgdGhpcy5zdGVuY2lsTWFza1N0YWNrLnN0ZW5jaWxTdGFjayA9IG51bGw7XG59O1xuXG4vKipcbiAqIEFwcGxpZXMgdGhlIE1hc2sgYW5kIGFkZHMgaXQgdG8gdGhlIGN1cnJlbnQgZmlsdGVyIHN0YWNrLlxuICpcbiAqIEBwYXJhbSBtYXNrRGF0YSB7YW55W119IFRoZSBtYXNrIGRhdGEgc3RydWN0dXJlIHRvIHVzZVxuICovXG5XZWJHTE1hc2tNYW5hZ2VyLnByb3RvdHlwZS5wdXNoTWFzayA9IGZ1bmN0aW9uIChtYXNrRGF0YSlcbntcbiAgICB0aGlzLnJlbmRlcmVyLnNldE9iamVjdFJlbmRlcmVyKHRoaXMucmVuZGVyZXIucGx1Z2lucy5ncmFwaGljcyk7XG4gICAgXG4gICAgLy9UT0RPIEZJWFxuICAgIGlmIChtYXNrRGF0YS5kaXJ0eSlcbiAgICB7XG4gICAgICAgIHRoaXMucmVuZGVyZXIucGx1Z2lucy5ncmFwaGljcy51cGRhdGVHcmFwaGljcyhtYXNrRGF0YSwgdGhpcy5yZW5kZXJlci5nbCk7XG4gICAgfVxuXG4gICAgaWYgKCFtYXNrRGF0YS5fd2ViR0xbdGhpcy5yZW5kZXJlci5nbC5pZF0uZGF0YS5sZW5ndGgpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5wdXNoU3RlbmNpbChtYXNrRGF0YSwgbWFza0RhdGEuX3dlYkdMW3RoaXMucmVuZGVyZXIuZ2wuaWRdLmRhdGFbMF0pO1xufTtcblxuLyoqXG4gKiBSZW1vdmVzIHRoZSBsYXN0IGZpbHRlciBmcm9tIHRoZSBmaWx0ZXIgc3RhY2sgYW5kIGRvZXNuJ3QgcmV0dXJuIGl0LlxuICpcbiAqIEBwYXJhbSBtYXNrRGF0YSB7YW55W119XG4gKi9cbldlYkdMTWFza01hbmFnZXIucHJvdG90eXBlLnBvcE1hc2sgPSBmdW5jdGlvbiAobWFza0RhdGEpXG57XG4gICAgdGhpcy5yZW5kZXJlci5zZXRPYmplY3RSZW5kZXJlcih0aGlzLnJlbmRlcmVyLnBsdWdpbnMuZ3JhcGhpY3MpO1xuXG4gICAgdGhpcy5wb3BTdGVuY2lsKG1hc2tEYXRhLCBtYXNrRGF0YS5fd2ViR0xbdGhpcy5yZW5kZXJlci5nbC5pZF0uZGF0YVswXSk7XG59O1xuXG4iLCIvKipcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5XZWJHTFJlbmRlcmVyfSBUaGUgcmVuZGVyZXIgdGhpcyBtYW5hZ2VyIHdvcmtzIGZvci5cbiAqL1xuZnVuY3Rpb24gV2ViR0xNYW5hZ2VyKHJlbmRlcmVyKVxue1xuICAgIC8qKlxuICAgICAqIFRoZSByZW5kZXJlciB0aGlzIG1hbmFnZXIgd29ya3MgZm9yLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5XZWJHTFJlbmRlcmVyfVxuICAgICAqL1xuICAgIHRoaXMucmVuZGVyZXIgPSByZW5kZXJlcjtcblxuICAgIHRoaXMucmVuZGVyZXIub24oJ2NvbnRleHQnLCB0aGlzLm9uQ29udGV4dENoYW5nZSwgdGhpcyk7XG59XG5cbldlYkdMTWFuYWdlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBXZWJHTE1hbmFnZXI7XG5tb2R1bGUuZXhwb3J0cyA9IFdlYkdMTWFuYWdlcjtcblxuLyoqXG4gKiBHZW5lcmljIG1ldGhvZCBjYWxsZWQgd2hlbiB0aGVyZSBpcyBhIFdlYkdMIGNvbnRleHQgY2hhbmdlLlxuICpcbiAqL1xuV2ViR0xNYW5hZ2VyLnByb3RvdHlwZS5vbkNvbnRleHRDaGFuZ2UgPSBmdW5jdGlvbiAoKVxue1xuXHQvLyBkbyBzb21lIGNvZGVzIGluaXQhXG59O1xuXG4vKipcbiAqIEdlbmVyaWMgZGVzdHJveSBtZXRob2RzIHRvIGJlIG92ZXJyaWRkZW4gYnkgdGhlIHN1YmNsYXNzXG4gKlxuICovXG5XZWJHTE1hbmFnZXIucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoKVxue1xuICAgIHRoaXMucmVuZGVyZXIub2ZmKCdjb250ZXh0JywgdGhpcy5vbkNvbnRleHRDaGFuZ2UsIHRoaXMpO1xuXG4gICAgdGhpcy5yZW5kZXJlciA9IG51bGw7XG59O1xuIiwidmFyIFNoYWRlciA9IHJlcXVpcmUoJy4vU2hhZGVyJyk7XG5cbi8qKlxuICogVGhpcyBzaGFkZXIgaXMgdXNlZCB0byBkcmF3IGNvbXBsZXggcHJpbWl0aXZlIHNoYXBlcyBmb3Ige0BsaW5rIFBJWEkuR3JhcGhpY3N9LlxuICpcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqIEBleHRlbmRzIFBJWEkuU2hhZGVyXG4gKiBAcGFyYW0gc2hhZGVyTWFuYWdlciB7UElYSS5TaGFkZXJNYW5hZ2VyfSBUaGUgd2ViZ2wgc2hhZGVyIG1hbmFnZXIgdGhpcyBzaGFkZXIgd29ya3MgZm9yLlxuICovXG5mdW5jdGlvbiBDb21wbGV4UHJpbWl0aXZlU2hhZGVyKHNoYWRlck1hbmFnZXIpXG57XG4gICAgU2hhZGVyLmNhbGwodGhpcyxcbiAgICAgICAgc2hhZGVyTWFuYWdlcixcbiAgICAgICAgLy8gdmVydGV4IHNoYWRlclxuICAgICAgICBbXG4gICAgICAgICAgICAnYXR0cmlidXRlIHZlYzIgYVZlcnRleFBvc2l0aW9uOycsXG5cbiAgICAgICAgICAgICd1bmlmb3JtIG1hdDMgdHJhbnNsYXRpb25NYXRyaXg7JyxcbiAgICAgICAgICAgICd1bmlmb3JtIG1hdDMgcHJvamVjdGlvbk1hdHJpeDsnLFxuXG4gICAgICAgICAgICAndW5pZm9ybSB2ZWMzIHRpbnQ7JyxcbiAgICAgICAgICAgICd1bmlmb3JtIGZsb2F0IGFscGhhOycsXG4gICAgICAgICAgICAndW5pZm9ybSB2ZWMzIGNvbG9yOycsXG5cbiAgICAgICAgICAgICd2YXJ5aW5nIHZlYzQgdkNvbG9yOycsXG5cbiAgICAgICAgICAgICd2b2lkIG1haW4odm9pZCl7JyxcbiAgICAgICAgICAgICcgICBnbF9Qb3NpdGlvbiA9IHZlYzQoKHByb2plY3Rpb25NYXRyaXggKiB0cmFuc2xhdGlvbk1hdHJpeCAqIHZlYzMoYVZlcnRleFBvc2l0aW9uLCAxLjApKS54eSwgMC4wLCAxLjApOycsXG4gICAgICAgICAgICAnICAgdkNvbG9yID0gdmVjNChjb2xvciAqIGFscGhhICogdGludCwgYWxwaGEpOycsLy9cIiAqIHZlYzQodGludCAqIGFscGhhLCBhbHBoYSk7JyxcbiAgICAgICAgICAgICd9J1xuICAgICAgICBdLmpvaW4oJ1xcbicpLFxuICAgICAgICAvLyBmcmFnbWVudCBzaGFkZXJcbiAgICAgICAgW1xuICAgICAgICAgICAgJ3ByZWNpc2lvbiBtZWRpdW1wIGZsb2F0OycsXG5cbiAgICAgICAgICAgICd2YXJ5aW5nIHZlYzQgdkNvbG9yOycsXG5cbiAgICAgICAgICAgICd2b2lkIG1haW4odm9pZCl7JyxcbiAgICAgICAgICAgICcgICBnbF9GcmFnQ29sb3IgPSB2Q29sb3I7JyxcbiAgICAgICAgICAgICd9J1xuICAgICAgICBdLmpvaW4oJ1xcbicpLFxuICAgICAgICAvLyBjdXN0b20gdW5pZm9ybXNcbiAgICAgICAge1xuICAgICAgICAgICAgdGludDogICB7IHR5cGU6ICczZicsIHZhbHVlOiBbMCwgMCwgMF0gfSxcbiAgICAgICAgICAgIGFscGhhOiAgeyB0eXBlOiAnMWYnLCB2YWx1ZTogMCB9LFxuICAgICAgICAgICAgY29sb3I6ICB7IHR5cGU6ICczZicsIHZhbHVlOiBbMCwwLDBdIH0sXG4gICAgICAgICAgICB0cmFuc2xhdGlvbk1hdHJpeDogeyB0eXBlOiAnbWF0MycsIHZhbHVlOiBuZXcgRmxvYXQzMkFycmF5KDkpIH0sXG4gICAgICAgICAgICBwcm9qZWN0aW9uTWF0cml4OiB7IHR5cGU6ICdtYXQzJywgdmFsdWU6IG5ldyBGbG9hdDMyQXJyYXkoOSkgfVxuICAgICAgICB9LFxuICAgICAgICAvLyBhdHRyaWJ1dGVzXG4gICAgICAgIHtcbiAgICAgICAgICAgIGFWZXJ0ZXhQb3NpdGlvbjowXG4gICAgICAgIH1cbiAgICApO1xufVxuXG5Db21wbGV4UHJpbWl0aXZlU2hhZGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoU2hhZGVyLnByb3RvdHlwZSk7XG5Db21wbGV4UHJpbWl0aXZlU2hhZGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IENvbXBsZXhQcmltaXRpdmVTaGFkZXI7XG5tb2R1bGUuZXhwb3J0cyA9IENvbXBsZXhQcmltaXRpdmVTaGFkZXI7XG4iLCJ2YXIgU2hhZGVyID0gcmVxdWlyZSgnLi9TaGFkZXInKTtcblxuLyoqXG4gKiBUaGlzIHNoYWRlciBpcyB1c2VkIHRvIGRyYXcgc2ltcGxlIHByaW1pdGl2ZSBzaGFwZXMgZm9yIHtAbGluayBQSVhJLkdyYXBoaWNzfS5cbiAqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAZXh0ZW5kcyBQSVhJLlNoYWRlclxuICogQHBhcmFtIHNoYWRlck1hbmFnZXIge1NoYWRlck1hbmFnZXJ9IFRoZSB3ZWJnbCBzaGFkZXIgbWFuYWdlciB0aGlzIHNoYWRlciB3b3JrcyBmb3IuXG4gKi9cbmZ1bmN0aW9uIFByaW1pdGl2ZVNoYWRlcihzaGFkZXJNYW5hZ2VyKVxue1xuICAgIFNoYWRlci5jYWxsKHRoaXMsXG4gICAgICAgIHNoYWRlck1hbmFnZXIsXG4gICAgICAgIC8vIHZlcnRleCBzaGFkZXJcbiAgICAgICAgW1xuICAgICAgICAgICAgJ2F0dHJpYnV0ZSB2ZWMyIGFWZXJ0ZXhQb3NpdGlvbjsnLFxuICAgICAgICAgICAgJ2F0dHJpYnV0ZSB2ZWM0IGFDb2xvcjsnLFxuXG4gICAgICAgICAgICAndW5pZm9ybSBtYXQzIHRyYW5zbGF0aW9uTWF0cml4OycsXG4gICAgICAgICAgICAndW5pZm9ybSBtYXQzIHByb2plY3Rpb25NYXRyaXg7JyxcblxuICAgICAgICAgICAgJ3VuaWZvcm0gZmxvYXQgYWxwaGE7JyxcbiAgICAgICAgICAgICd1bmlmb3JtIGZsb2F0IGZsaXBZOycsXG4gICAgICAgICAgICAndW5pZm9ybSB2ZWMzIHRpbnQ7JyxcblxuICAgICAgICAgICAgJ3ZhcnlpbmcgdmVjNCB2Q29sb3I7JyxcblxuICAgICAgICAgICAgJ3ZvaWQgbWFpbih2b2lkKXsnLFxuICAgICAgICAgICAgJyAgIGdsX1Bvc2l0aW9uID0gdmVjNCgocHJvamVjdGlvbk1hdHJpeCAqIHRyYW5zbGF0aW9uTWF0cml4ICogdmVjMyhhVmVydGV4UG9zaXRpb24sIDEuMCkpLnh5LCAwLjAsIDEuMCk7JyxcbiAgICAgICAgICAgICcgICB2Q29sb3IgPSBhQ29sb3IgKiB2ZWM0KHRpbnQgKiBhbHBoYSwgYWxwaGEpOycsXG4gICAgICAgICAgICAnfSdcbiAgICAgICAgXS5qb2luKCdcXG4nKSxcbiAgICAgICAgLy8gZnJhZ21lbnQgc2hhZGVyXG4gICAgICAgIFtcbiAgICAgICAgICAgICdwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDsnLFxuXG4gICAgICAgICAgICAndmFyeWluZyB2ZWM0IHZDb2xvcjsnLFxuXG4gICAgICAgICAgICAndm9pZCBtYWluKHZvaWQpeycsXG4gICAgICAgICAgICAnICAgZ2xfRnJhZ0NvbG9yID0gdkNvbG9yOycsXG4gICAgICAgICAgICAnfSdcbiAgICAgICAgXS5qb2luKCdcXG4nKSxcbiAgICAgICAgLy8gY3VzdG9tIHVuaWZvcm1zXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRpbnQ6ICAgeyB0eXBlOiAnM2YnLCB2YWx1ZTogWzAsIDAsIDBdIH0sXG4gICAgICAgICAgICBhbHBoYTogIHsgdHlwZTogJzFmJywgdmFsdWU6IDAgfSxcbiAgICAgICAgICAgIHRyYW5zbGF0aW9uTWF0cml4OiB7IHR5cGU6ICdtYXQzJywgdmFsdWU6IG5ldyBGbG9hdDMyQXJyYXkoOSkgfSxcbiAgICAgICAgICAgIHByb2plY3Rpb25NYXRyaXg6IHsgdHlwZTogJ21hdDMnLCB2YWx1ZTogbmV3IEZsb2F0MzJBcnJheSg5KSB9XG4gICAgICAgIH0sXG4gICAgICAgIC8vIGN1c3RvbSBhdHRyaWJ1dGVzXG4gICAgICAgIHtcbiAgICAgICAgICAgIGFWZXJ0ZXhQb3NpdGlvbjowLFxuICAgICAgICAgICAgYUNvbG9yOjBcbiAgICAgICAgfVxuICAgICk7XG59XG5cblByaW1pdGl2ZVNoYWRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFNoYWRlci5wcm90b3R5cGUpO1xuUHJpbWl0aXZlU2hhZGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFByaW1pdGl2ZVNoYWRlcjtcbm1vZHVsZS5leHBvcnRzID0gUHJpbWl0aXZlU2hhZGVyO1xuIiwiLypnbG9iYWwgY29uc29sZSAqL1xudmFyIHV0aWxzID0gcmVxdWlyZSgnLi4vLi4vLi4vdXRpbHMnKTtcblxuLyoqXG4gKiBCYXNlIHNoYWRlciBjbGFzcyBmb3IgUElYSSBtYW5hZ2VkIHNoYWRlcnMuXG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIHNoYWRlck1hbmFnZXIge1BJWEkuU2hhZGVyTWFuYWdlcn0gVGhlIHdlYmdsIHNoYWRlciBtYW5hZ2VyIHRoaXMgc2hhZGVyIHdvcmtzIGZvci5cbiAqIEBwYXJhbSBbdmVydGV4U3JjXSB7c3RyaW5nfSBUaGUgc291cmNlIG9mIHRoZSB2ZXJ0ZXggc2hhZGVyLlxuICogQHBhcmFtIFtmcmFnbWVudFNyY10ge3N0cmluZ30gVGhlIHNvdXJjZSBvZiB0aGUgZnJhZ21lbnQgc2hhZGVyLlxuICogQHBhcmFtIFt1bmlmb3Jtc10ge29iamVjdH0gVW5pZm9ybXMgZm9yIHRoaXMgc2hhZGVyLlxuICogQHBhcmFtIFthdHRyaWJ1dGVzXSB7b2JqZWN0fSBBdHRyaWJ1dGVzIGZvciB0aGlzIHNoYWRlci5cbiAqL1xuZnVuY3Rpb24gU2hhZGVyKHNoYWRlck1hbmFnZXIsIHZlcnRleFNyYywgZnJhZ21lbnRTcmMsIHVuaWZvcm1zLCBhdHRyaWJ1dGVzKVxue1xuICAgIGlmICghdmVydGV4U3JjIHx8ICFmcmFnbWVudFNyYylcbiAgICB7XG4gICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1BpeGkuanMgRXJyb3IuIFNoYWRlciByZXF1aXJlcyB2ZXJ0ZXhTcmMgYW5kIGZyYWdtZW50U3JjJyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQSB1bmlxdWUgaWRcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQHJlYWRvbmx5XG4gICAgICovXG4gICAgdGhpcy51aWQgPSB1dGlscy51aWQoKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBjdXJyZW50IFdlYkdMIGRyYXdpbmcgY29udGV4dFxuICAgICAqIEBtZW1iZXIge1dlYkdMUmVuZGVyaW5nQ29udGV4dH1cbiAgICAgKiBAcmVhZG9ubHlcbiAgICAgKi9cbiAgICB0aGlzLmdsID0gc2hhZGVyTWFuYWdlci5yZW5kZXJlci5nbDtcblxuICAgIC8vVE9ETyBtYXliZSB3ZSBzaG91bGQgcGFzcyByZW5kZXJlciByYXRoZXIgdGhhbiBzaGFkZXIgbWFuZ2VyPz8gZm9vZCBmb3IgdGhvdWdodC4uXG4gICAgdGhpcy5zaGFkZXJNYW5hZ2VyID0gc2hhZGVyTWFuYWdlcjtcblxuICAgIC8qKlxuICAgICAqIFRoZSBXZWJHTCBwcm9ncmFtLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7V2ViR0xQcm9ncmFtfVxuICAgICAqIEByZWFkb25seVxuICAgICAqL1xuICAgIHRoaXMucHJvZ3JhbSA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgdW5pZm9ybXMgYXMgYW4gb2JqZWN0XG4gICAgICogQG1lbWJlciB7b2JqZWN0fVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy51bmlmb3JtcyA9IHVuaWZvcm1zIHx8IHt9O1xuXG4gICAgLyoqXG4gICAgICogVGhlIGF0dHJpYnV0ZXMgYXMgYW4gb2JqZWN0XG4gICAgICogQG1lbWJlciB7b2JqZWN0fVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5hdHRyaWJ1dGVzID0gYXR0cmlidXRlcyB8fCB7fTtcblxuICAgIC8qKlxuICAgICAqIEludGVybmFsIHRleHR1cmUgY291bnRlclxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMudGV4dHVyZUNvdW50ID0gMTtcblxuICAgIC8qKlxuICAgICAqIFRoZSB2ZXJ0ZXggc2hhZGVyIGFzIGFuIGFycmF5IG9mIHN0cmluZ3NcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge3N0cmluZ31cbiAgICAgKi9cbiAgICB0aGlzLnZlcnRleFNyYyA9IHZlcnRleFNyYztcblxuICAgIC8qKlxuICAgICAqIFRoZSBmcmFnbWVudCBzaGFkZXIgYXMgYW4gYXJyYXkgb2Ygc3RyaW5nc1xuICAgICAqXG4gICAgICogQG1lbWJlciB7c3RyaW5nfVxuICAgICAqL1xuICAgIHRoaXMuZnJhZ21lbnRTcmMgPSBmcmFnbWVudFNyYztcblxuICAgIHRoaXMuaW5pdCgpO1xufVxuXG5TaGFkZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gU2hhZGVyO1xubW9kdWxlLmV4cG9ydHMgPSBTaGFkZXI7XG5cbi8qKlxuICogQ3JlYXRlcyB0aGUgc2hhZGVyIGFuZCB1c2VzIGl0XG4gKlxuICovXG5TaGFkZXIucHJvdG90eXBlLmluaXQgPSBmdW5jdGlvbiAoKVxue1xuICAgIHRoaXMuY29tcGlsZSgpO1xuXG4gICAgdGhpcy5nbC51c2VQcm9ncmFtKHRoaXMucHJvZ3JhbSk7XG5cbiAgICB0aGlzLmNhY2hlVW5pZm9ybUxvY2F0aW9ucyhPYmplY3Qua2V5cyh0aGlzLnVuaWZvcm1zKSk7XG4gICAgdGhpcy5jYWNoZUF0dHJpYnV0ZUxvY2F0aW9ucyhPYmplY3Qua2V5cyh0aGlzLmF0dHJpYnV0ZXMpKTtcbn07XG5cbi8qKlxuICogQ2FjaGVzIHRoZSBsb2NhdGlvbnMgb2YgdGhlIHVuaWZvcm0gZm9yIHJldXNlLlxuICpcbiAqIEBwYXJhbSBrZXlzIHtzdHJpbmd9IHRoZSB1bmlmb3JtcyB0byBjYWNoZVxuICovXG5TaGFkZXIucHJvdG90eXBlLmNhY2hlVW5pZm9ybUxvY2F0aW9ucyA9IGZ1bmN0aW9uIChrZXlzKVxue1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7ICsraSlcbiAgICB7XG4gICAgICAgIHRoaXMudW5pZm9ybXNba2V5c1tpXV0uX2xvY2F0aW9uID0gdGhpcy5nbC5nZXRVbmlmb3JtTG9jYXRpb24odGhpcy5wcm9ncmFtLCBrZXlzW2ldKTtcbiAgICB9XG59O1xuXG4vKipcbiAqIENhY2hlcyB0aGUgbG9jYXRpb25zIG9mIHRoZSBhdHRyaWJ1dGUgZm9yIHJldXNlLlxuICpcbiAqIEBwYXJhbSBrZXlzIHtzdHJpbmd9IHRoZSBhdHRyaWJ1dGVzIHRvIGNhY2hlXG4gKi9cblNoYWRlci5wcm90b3R5cGUuY2FjaGVBdHRyaWJ1dGVMb2NhdGlvbnMgPSBmdW5jdGlvbiAoa2V5cylcbntcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyArK2kpXG4gICAge1xuICAgICAgICB0aGlzLmF0dHJpYnV0ZXNba2V5c1tpXV0gPSB0aGlzLmdsLmdldEF0dHJpYkxvY2F0aW9uKHRoaXMucHJvZ3JhbSwga2V5c1tpXSk7XG4gICAgfVxuXG4gICAgLy8gVE9ETzogQ2hlY2sgaWYgdGhpcyBpcyBuZWVkZWQgYW55bW9yZS4uLlxuXG4gICAgLy8gQmVnaW4gd29yc3QgaGFjayBldmEgLy9cblxuICAgIC8vIFdIWT8/PyBPTkxZIG9uIG15IGNocm9tZSBwaXhlbCB0aGUgbGluZSBhYm92ZSByZXR1cm5zIC0xIHdoZW4gdXNpbmcgZmlsdGVycz9cbiAgICAvLyBtYXliZSBpdHMgc29tZXRoaW5nIHRvIGRvIHdpdGggdGhlIGN1cnJlbnQgc3RhdGUgb2YgdGhlIGdsIGNvbnRleHQuXG4gICAgLy8gSSdtIGNvbnZpbmNlZCB0aGlzIGlzIGEgYnVnIGluIHRoZSBjaHJvbWUgYnJvd3NlciBhcyB0aGVyZSBpcyBOTyByZWFzb24gd2h5IHRoaXMgc2hvdWxkIGJlIHJldHVybmluZyAtMSBlc3BlY2lhbGx5IGFzIGl0IG9ubHkgbWFuaWZlc3RzIG9uIG15IGNocm9tZSBwaXhlbFxuICAgIC8vIElmIHRoZXJlcyBhbnkgd2ViR0wgcGVvcGxlIHRoYXQga25vdyB3aHkgY291bGQgaGFwcGVuIHBsZWFzZSBoZWxwIDopXG4gICAgLy8gaWYgKHRoaXMuYXR0cmlidXRlcy5hQ29sb3IgPT09IC0xKXtcbiAgICAvLyAgICAgdGhpcy5hdHRyaWJ1dGVzLmFDb2xvciA9IDI7XG4gICAgLy8gfVxuXG4gICAgLy8gRW5kIHdvcnN0IGhhY2sgZXZhIC8vXG59O1xuXG4vKipcbiAqIEF0dGFjaGVzIHRoZSBzaGFkZXJzIGFuZCBjcmVhdGVzIHRoZSBwcm9ncmFtLlxuICpcbiAqIEByZXR1cm4ge1dlYkdMUHJvZ3JhbX1cbiAqL1xuU2hhZGVyLnByb3RvdHlwZS5jb21waWxlID0gZnVuY3Rpb24gKClcbntcbiAgICB2YXIgZ2wgPSB0aGlzLmdsO1xuXG4gICAgdmFyIGdsVmVydFNoYWRlciA9IHRoaXMuX2dsQ29tcGlsZShnbC5WRVJURVhfU0hBREVSLCB0aGlzLnZlcnRleFNyYyk7XG4gICAgdmFyIGdsRnJhZ1NoYWRlciA9IHRoaXMuX2dsQ29tcGlsZShnbC5GUkFHTUVOVF9TSEFERVIsIHRoaXMuZnJhZ21lbnRTcmMpO1xuXG4gICAgdmFyIHByb2dyYW0gPSBnbC5jcmVhdGVQcm9ncmFtKCk7XG5cbiAgICBnbC5hdHRhY2hTaGFkZXIocHJvZ3JhbSwgZ2xWZXJ0U2hhZGVyKTtcbiAgICBnbC5hdHRhY2hTaGFkZXIocHJvZ3JhbSwgZ2xGcmFnU2hhZGVyKTtcbiAgICBnbC5saW5rUHJvZ3JhbShwcm9ncmFtKTtcblxuICAgIC8vIGlmIGxpbmtpbmcgZmFpbHMsIHRoZW4gbG9nIGFuZCBjbGVhbnVwXG4gICAgaWYgKCFnbC5nZXRQcm9ncmFtUGFyYW1ldGVyKHByb2dyYW0sIGdsLkxJTktfU1RBVFVTKSlcbiAgICB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ1BpeGkuanMgRXJyb3I6IENvdWxkIG5vdCBpbml0aWFsaXplIHNoYWRlci4nKTtcbiAgICAgICAgY29uc29sZS5lcnJvcignZ2wuVkFMSURBVEVfU1RBVFVTJywgZ2wuZ2V0UHJvZ3JhbVBhcmFtZXRlcihwcm9ncmFtLCBnbC5WQUxJREFURV9TVEFUVVMpKTtcbiAgICAgICAgY29uc29sZS5lcnJvcignZ2wuZ2V0RXJyb3IoKScsIGdsLmdldEVycm9yKCkpO1xuXG4gICAgICAgIC8vIGlmIHRoZXJlIGlzIGEgcHJvZ3JhbSBpbmZvIGxvZywgbG9nIGl0XG4gICAgICAgIGlmIChnbC5nZXRQcm9ncmFtSW5mb0xvZyhwcm9ncmFtKSAhPT0gJycpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignUGl4aS5qcyBXYXJuaW5nOiBnbC5nZXRQcm9ncmFtSW5mb0xvZygpJywgZ2wuZ2V0UHJvZ3JhbUluZm9Mb2cocHJvZ3JhbSkpO1xuICAgICAgICB9XG5cbiAgICAgICAgZ2wuZGVsZXRlUHJvZ3JhbShwcm9ncmFtKTtcbiAgICAgICAgcHJvZ3JhbSA9IG51bGw7XG4gICAgfVxuXG4gICAgLy8gY2xlYW4gdXAgc29tZSBzaGFkZXJzXG4gICAgZ2wuZGVsZXRlU2hhZGVyKGdsVmVydFNoYWRlcik7XG4gICAgZ2wuZGVsZXRlU2hhZGVyKGdsRnJhZ1NoYWRlcik7XG5cbiAgICByZXR1cm4gKHRoaXMucHJvZ3JhbSA9IHByb2dyYW0pO1xufTtcblxuLyoqXG4qIEFkZHMgYSBuZXcgdW5pZm9ybVxuKlxuKiBAcGFyYW0gdW5pZm9ybSB7b2JqZWN0fSB0aGUgbmV3IHVuaWZvcm0gdG8gYXR0YWNoXG4qL1xuU2hhZGVyLnByb3RvdHlwZS5zeW5jVW5pZm9ybSA9IGZ1bmN0aW9uICh1bmlmb3JtKVxue1xuICAgIHZhciBsb2NhdGlvbiA9IHVuaWZvcm0uX2xvY2F0aW9uLFxuICAgICAgICB2YWx1ZSA9IHVuaWZvcm0udmFsdWUsXG4gICAgICAgIGdsID0gdGhpcy5nbCxcbiAgICAgICAgaSwgaWw7XG5cbiAgICBzd2l0Y2ggKHVuaWZvcm0udHlwZSlcbiAgICB7XG4gICAgICAgIGNhc2UgJ2InOlxuICAgICAgICBjYXNlICdib29sJzpcbiAgICAgICAgY2FzZSAnYm9vbGVhbic6XG4gICAgICAgICAgICBnbC51bmlmb3JtMWkobG9jYXRpb24sIHZhbHVlID8gMSA6IDApO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLy8gc2luZ2xlIGludCB2YWx1ZVxuICAgICAgICBjYXNlICdpJzpcbiAgICAgICAgY2FzZSAnMWknOlxuICAgICAgICAgICAgZ2wudW5pZm9ybTFpKGxvY2F0aW9uLCB2YWx1ZSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAvLyBzaW5nbGUgZmxvYXQgdmFsdWVcbiAgICAgICAgY2FzZSAnZic6XG4gICAgICAgIGNhc2UgJzFmJzpcbiAgICAgICAgICAgIGdsLnVuaWZvcm0xZihsb2NhdGlvbiwgdmFsdWUpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLy8gRmxvYXQzMkFycmF5KDIpIG9yIEpTIEFycnJheVxuICAgICAgICBjYXNlICcyZic6XG4gICAgICAgICAgICBnbC51bmlmb3JtMmYobG9jYXRpb24sIHZhbHVlWzBdLCB2YWx1ZVsxXSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAvLyBGbG9hdDMyQXJyYXkoMykgb3IgSlMgQXJycmF5XG4gICAgICAgIGNhc2UgJzNmJzpcbiAgICAgICAgICAgIGdsLnVuaWZvcm0zZihsb2NhdGlvbiwgdmFsdWVbMF0sIHZhbHVlWzFdLCB2YWx1ZVsyXSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAvLyBGbG9hdDMyQXJyYXkoNCkgb3IgSlMgQXJycmF5XG4gICAgICAgIGNhc2UgJzRmJzpcbiAgICAgICAgICAgIGdsLnVuaWZvcm00Zihsb2NhdGlvbiwgdmFsdWVbMF0sIHZhbHVlWzFdLCB2YWx1ZVsyXSwgdmFsdWVbM10pO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLy8gYSAyRCBQb2ludCBvYmplY3RcbiAgICAgICAgY2FzZSAndjInOlxuICAgICAgICAgICAgZ2wudW5pZm9ybTJmKGxvY2F0aW9uLCB2YWx1ZS54LCB2YWx1ZS55KTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIC8vIGEgM0QgUG9pbnQgb2JqZWN0XG4gICAgICAgIGNhc2UgJ3YzJzpcbiAgICAgICAgICAgIGdsLnVuaWZvcm0zZihsb2NhdGlvbiwgdmFsdWUueCwgdmFsdWUueSwgdmFsdWUueik7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAvLyBhIDREIFBvaW50IG9iamVjdFxuICAgICAgICBjYXNlICd2NCc6XG4gICAgICAgICAgICBnbC51bmlmb3JtNGYobG9jYXRpb24sIHZhbHVlLngsIHZhbHVlLnksIHZhbHVlLnosIHZhbHVlLncpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLy8gSW50MzJBcnJheSBvciBKUyBBcnJheVxuICAgICAgICBjYXNlICcxaXYnOlxuICAgICAgICAgICAgZ2wudW5pZm9ybTFpdihsb2NhdGlvbiwgdmFsdWUpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLy8gSW50MzJBcnJheSBvciBKUyBBcnJheVxuICAgICAgICBjYXNlICcyaXYnOlxuICAgICAgICAgICAgZ2wudW5pZm9ybTJpdihsb2NhdGlvbiwgdmFsdWUpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLy8gSW50MzJBcnJheSBvciBKUyBBcnJheVxuICAgICAgICBjYXNlICczaXYnOlxuICAgICAgICAgICAgZ2wudW5pZm9ybTNpdihsb2NhdGlvbiwgdmFsdWUpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLy8gSW50MzJBcnJheSBvciBKUyBBcnJheVxuICAgICAgICBjYXNlICc0aXYnOlxuICAgICAgICAgICAgZ2wudW5pZm9ybTRpdihsb2NhdGlvbiwgdmFsdWUpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLy8gRmxvYXQzMkFycmF5IG9yIEpTIEFycmF5XG4gICAgICAgIGNhc2UgJzFmdic6XG4gICAgICAgICAgICBnbC51bmlmb3JtMWZ2KGxvY2F0aW9uLCB2YWx1ZSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAvLyBGbG9hdDMyQXJyYXkgb3IgSlMgQXJyYXlcbiAgICAgICAgY2FzZSAnMmZ2JzpcbiAgICAgICAgICAgIGdsLnVuaWZvcm0yZnYobG9jYXRpb24sIHZhbHVlKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIC8vIEZsb2F0MzJBcnJheSBvciBKUyBBcnJheVxuICAgICAgICBjYXNlICczZnYnOlxuICAgICAgICAgICAgZ2wudW5pZm9ybTNmdihsb2NhdGlvbiwgdmFsdWUpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLy8gRmxvYXQzMkFycmF5IG9yIEpTIEFycmF5XG4gICAgICAgIGNhc2UgJzRmdic6XG4gICAgICAgICAgICBnbC51bmlmb3JtNGZ2KGxvY2F0aW9uLCB2YWx1ZSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAvLyBGbG9hdDMyQXJyYXkgb3IgSlMgQXJyYXlcbiAgICAgICAgY2FzZSAnbTInOlxuICAgICAgICBjYXNlICdtYXQyJzpcbiAgICAgICAgY2FzZSAnTWF0cml4MmZ2JzpcbiAgICAgICAgICAgIGdsLnVuaWZvcm1NYXRyaXgyZnYobG9jYXRpb24sIHVuaWZvcm0udHJhbnNwb3NlLCB2YWx1ZSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAvLyBGbG9hdDMyQXJyYXkgb3IgSlMgQXJyYXlcbiAgICAgICAgY2FzZSAnbTMnOlxuICAgICAgICBjYXNlICdtYXQzJzpcbiAgICAgICAgY2FzZSAnTWF0cml4M2Z2JzpcblxuICAgICAgICAgICAgZ2wudW5pZm9ybU1hdHJpeDNmdihsb2NhdGlvbiwgdW5pZm9ybS50cmFuc3Bvc2UsIHZhbHVlKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIC8vIEZsb2F0MzJBcnJheSBvciBKUyBBcnJheVxuICAgICAgICBjYXNlICdtNCc6XG4gICAgICAgIGNhc2UgJ21hdDQnOlxuICAgICAgICBjYXNlICdNYXRyaXg0ZnYnOlxuICAgICAgICAgICAgZ2wudW5pZm9ybU1hdHJpeDRmdihsb2NhdGlvbiwgdW5pZm9ybS50cmFuc3Bvc2UsIHZhbHVlKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIC8vIGEgQ29sb3IgVmFsdWVcbiAgICAgICAgY2FzZSAnYyc6XG4gICAgICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJylcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB2YWx1ZSA9IHV0aWxzLmhleDJyZ2IodmFsdWUpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBnbC51bmlmb3JtM2YobG9jYXRpb24sIHZhbHVlWzBdLCB2YWx1ZVsxXSwgdmFsdWVbMl0pO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLy8gZmxhdCBhcnJheSBvZiBpbnRlZ2VycyAoSlMgb3IgdHlwZWQgYXJyYXkpXG4gICAgICAgIGNhc2UgJ2l2MSc6XG4gICAgICAgICAgICBnbC51bmlmb3JtMWl2KGxvY2F0aW9uLCB2YWx1ZSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAvLyBmbGF0IGFycmF5IG9mIGludGVnZXJzIHdpdGggMyB4IE4gc2l6ZSAoSlMgb3IgdHlwZWQgYXJyYXkpXG4gICAgICAgIGNhc2UgJ2l2JzpcbiAgICAgICAgICAgIGdsLnVuaWZvcm0zaXYobG9jYXRpb24sIHZhbHVlKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIC8vIGZsYXQgYXJyYXkgb2YgZmxvYXRzIChKUyBvciB0eXBlZCBhcnJheSlcbiAgICAgICAgY2FzZSAnZnYxJzpcbiAgICAgICAgICAgIGdsLnVuaWZvcm0xZnYobG9jYXRpb24sIHZhbHVlKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIC8vIGZsYXQgYXJyYXkgb2YgZmxvYXRzIHdpdGggMyB4IE4gc2l6ZSAoSlMgb3IgdHlwZWQgYXJyYXkpXG4gICAgICAgIGNhc2UgJ2Z2JzpcbiAgICAgICAgICAgIGdsLnVuaWZvcm0zZnYobG9jYXRpb24sIHZhbHVlKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIC8vIGFycmF5IG9mIDJEIFBvaW50IG9iamVjdHNcbiAgICAgICAgY2FzZSAndjJ2JzpcbiAgICAgICAgICAgIGlmICghdW5pZm9ybS5fYXJyYXkpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdW5pZm9ybS5fYXJyYXkgPSBuZXcgRmxvYXQzMkFycmF5KDIgKiB2YWx1ZS5sZW5ndGgpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBmb3IgKGkgPSAwLCBpbCA9IHZhbHVlLmxlbmd0aDsgaSA8IGlsOyArK2kpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdW5pZm9ybS5fYXJyYXlbaSAqIDJdICAgICAgID0gdmFsdWVbaV0ueDtcbiAgICAgICAgICAgICAgICB1bmlmb3JtLl9hcnJheVtpICogMiArIDFdICAgPSB2YWx1ZVtpXS55O1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBnbC51bmlmb3JtMmZ2KGxvY2F0aW9uLCB1bmlmb3JtLl9hcnJheSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAvLyBhcnJheSBvZiAzRCBQb2ludCBvYmplY3RzXG4gICAgICAgIGNhc2UgJ3Yzdic6XG4gICAgICAgICAgICBpZiAoIXVuaWZvcm0uX2FycmF5KVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHVuaWZvcm0uX2FycmF5ID0gbmV3IEZsb2F0MzJBcnJheSgzICogdmFsdWUubGVuZ3RoKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZm9yIChpID0gMCwgaWwgPSB2YWx1ZS5sZW5ndGg7IGkgPCBpbDsgKytpKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHVuaWZvcm0uX2FycmF5W2kgKiAzXSAgICAgICA9IHZhbHVlW2ldLng7XG4gICAgICAgICAgICAgICAgdW5pZm9ybS5fYXJyYXlbaSAqIDMgKyAxXSAgID0gdmFsdWVbaV0ueTtcbiAgICAgICAgICAgICAgICB1bmlmb3JtLl9hcnJheVtpICogMyArIDJdICAgPSB2YWx1ZVtpXS56O1xuXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGdsLnVuaWZvcm0zZnYobG9jYXRpb24sIHVuaWZvcm0uX2FycmF5KTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIC8vIGFycmF5IG9mIDREIFBvaW50IG9iamVjdHNcbiAgICAgICAgY2FzZSAndjR2JzpcbiAgICAgICAgICAgIGlmICghdW5pZm9ybS5fYXJyYXkpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdW5pZm9ybS5fYXJyYXkgPSBuZXcgRmxvYXQzMkFycmF5KDQgKiB2YWx1ZS5sZW5ndGgpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBmb3IgKGkgPSAwLCBpbCA9IHZhbHVlLmxlbmd0aDsgaSA8IGlsOyArK2kpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdW5pZm9ybS5fYXJyYXlbaSAqIDRdICAgICAgID0gdmFsdWVbaV0ueDtcbiAgICAgICAgICAgICAgICB1bmlmb3JtLl9hcnJheVtpICogNCArIDFdICAgPSB2YWx1ZVtpXS55O1xuICAgICAgICAgICAgICAgIHVuaWZvcm0uX2FycmF5W2kgKiA0ICsgMl0gICA9IHZhbHVlW2ldLno7XG4gICAgICAgICAgICAgICAgdW5pZm9ybS5fYXJyYXlbaSAqIDQgKyAzXSAgID0gdmFsdWVbaV0udztcblxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBnbC51bmlmb3JtNGZ2KGxvY2F0aW9uLCB1bmlmb3JtLl9hcnJheSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAvLyBQSVhJLlRleHR1cmVcbiAgICAgICAgY2FzZSAndCc6XG4gICAgICAgIGNhc2UgJ3NhbXBsZXIyRCc6XG5cbiAgICAgICAgICAgIGlmICghdW5pZm9ybS52YWx1ZSB8fCAhdW5pZm9ybS52YWx1ZS5iYXNlVGV4dHVyZS5oYXNMb2FkZWQpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIGFjdGl2YXRlIHRoaXMgdGV4dHVyZVxuICAgICAgICAgICAgZ2wuYWN0aXZlVGV4dHVyZShnbFsnVEVYVFVSRScgKyB0aGlzLnRleHR1cmVDb3VudF0pO1xuXG4gICAgICAgICAgICB2YXIgdGV4dHVyZSA9IHVuaWZvcm0udmFsdWUuYmFzZVRleHR1cmUuX2dsVGV4dHVyZXNbZ2wuaWRdO1xuXG4gICAgICAgICAgICBpZiAoIXRleHR1cmUpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdGhpcy5pbml0U2FtcGxlcjJEKHVuaWZvcm0pO1xuXG4gICAgICAgICAgICAgICAgLy8gc2V0IHRoZSB0ZXh0dXIgdG8gdGhlIG5ld2x5IGNyZWF0ZWQgb25lLi5cbiAgICAgICAgICAgICAgICB0ZXh0dXJlID0gdW5pZm9ybS52YWx1ZS5iYXNlVGV4dHVyZS5fZ2xUZXh0dXJlc1tnbC5pZF07XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIGJpbmQgdGhlIHRleHR1cmVcbiAgICAgICAgICAgIGdsLmJpbmRUZXh0dXJlKGdsLlRFWFRVUkVfMkQsIHRleHR1cmUpO1xuXG4gICAgICAgICAgICAvLyBzZXQgdW5pZm9ybSB0byB0ZXh0dXJlIGluZGV4XG4gICAgICAgICAgICBnbC51bmlmb3JtMWkodW5pZm9ybS5fbG9jYXRpb24sIHRoaXMudGV4dHVyZUNvdW50KTtcblxuICAgICAgICAgICAgLy8gaW5jcmVtZW50IG5leHQgdGV4dHVyZSBpZFxuICAgICAgICAgICAgdGhpcy50ZXh0dXJlQ291bnQrKztcblxuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignUGl4aS5qcyBTaGFkZXIgV2FybmluZzogVW5rbm93biB1bmlmb3JtIHR5cGU6ICcgKyB1bmlmb3JtLnR5cGUpO1xuICAgIH1cbn07XG5cbi8qKlxuICogVXBkYXRlcyB0aGUgc2hhZGVyIHVuaWZvcm0gdmFsdWVzLlxuICpcbiAqL1xuU2hhZGVyLnByb3RvdHlwZS5zeW5jVW5pZm9ybXMgPSBmdW5jdGlvbiAoKVxue1xuICAgIHRoaXMudGV4dHVyZUNvdW50ID0gMTtcblxuICAgIGZvciAodmFyIGtleSBpbiB0aGlzLnVuaWZvcm1zKVxuICAgIHtcbiAgICAgICAgdGhpcy5zeW5jVW5pZm9ybSh0aGlzLnVuaWZvcm1zW2tleV0pO1xuICAgIH1cbn07XG5cblxuLyoqXG4gKiBJbml0aWFsaXNlcyBhIFNhbXBsZXIyRCB1bmlmb3JtICh3aGljaCBtYXkgb25seSBiZSBhdmFpbGFibGUgbGF0ZXIgb24gYWZ0ZXIgaW5pdFVuaWZvcm1zIG9uY2UgdGhlIHRleHR1cmUgaGFzIGxvYWRlZClcbiAqXG4gKi9cblNoYWRlci5wcm90b3R5cGUuaW5pdFNhbXBsZXIyRCA9IGZ1bmN0aW9uICh1bmlmb3JtKVxue1xuICAgIHZhciBnbCA9IHRoaXMuZ2w7XG5cbiAgICB2YXIgdGV4dHVyZSA9IHVuaWZvcm0udmFsdWUuYmFzZVRleHR1cmU7XG5cbiAgICBpZighdGV4dHVyZS5oYXNMb2FkZWQpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG5cblxuICAgIGlmICh1bmlmb3JtLnRleHR1cmVEYXRhKVxuICAgIHtcblxuICAgICAgICAvL1RPRE8gbW92ZSB0aGlzLi4uXG4gICAgICAgIHZhciBkYXRhID0gdW5pZm9ybS50ZXh0dXJlRGF0YTtcblxuICAgICAgICB0ZXh0dXJlLl9nbFRleHR1cmVzW2dsLmlkXSA9IGdsLmNyZWF0ZVRleHR1cmUoKTtcblxuICAgICAgICBnbC5iaW5kVGV4dHVyZShnbC5URVhUVVJFXzJELCB0ZXh0dXJlLl9nbFRleHR1cmVzW2dsLmlkXSk7XG5cbiAgICAgICAgZ2wucGl4ZWxTdG9yZWkoZ2wuVU5QQUNLX1BSRU1VTFRJUExZX0FMUEhBX1dFQkdMLCB0ZXh0dXJlLnByZW11bHRpcGxpZWRBbHBoYSk7XG4gICAgICAgIC8vIEdMVGV4dHVyZSA9IG1hZyBsaW5lYXIsIG1pbiBsaW5lYXJfbWlwbWFwX2xpbmVhciwgd3JhcCByZXBlYXQgKyBnbC5nZW5lcmF0ZU1pcG1hcChnbC5URVhUVVJFXzJEKTtcbiAgICAgICAgLy8gR0xUZXh0dXJlTGluZWFyID0gbWFnL21pbiBsaW5lYXIsIHdyYXAgY2xhbXBcbiAgICAgICAgLy8gR0xUZXh0dXJlTmVhcmVzdFJlcGVhdCA9IG1hZy9taW4gTkVBUkVTVCwgd3JhcCByZXBlYXRcbiAgICAgICAgLy8gR0xUZXh0dXJlTmVhcmVzdCA9IG1hZy9taW4gbmVhcmVzdCwgd3JhcCBjbGFtcFxuICAgICAgICAvLyBBdWRpb1RleHR1cmUgPSB3aGF0ZXZlciArIGx1bWluYW5jZSArIHdpZHRoIDUxMiwgaGVpZ2h0IDIsIGJvcmRlciAwXG4gICAgICAgIC8vIEtleVRleHR1cmUgPSB3aGF0ZXZlciArIGx1bWluYW5jZSArIHdpZHRoIDI1NiwgaGVpZ2h0IDIsIGJvcmRlciAwXG5cbiAgICAgICAgLy8gIG1hZ0ZpbHRlciBjYW4gYmU6IGdsLkxJTkVBUiwgZ2wuTElORUFSX01JUE1BUF9MSU5FQVIgb3IgZ2wuTkVBUkVTVFxuICAgICAgICAvLyAgd3JhcFMvVCBjYW4gYmU6IGdsLkNMQU1QX1RPX0VER0Ugb3IgZ2wuUkVQRUFUXG5cbiAgICAgICAgZ2wudGV4SW1hZ2UyRChnbC5URVhUVVJFXzJELCAwLCBkYXRhLmx1bWluYW5jZSA/IGdsLkxVTUlOQU5DRSA6IGdsLlJHQkEsIGdsLlJHQkEsIGdsLlVOU0lHTkVEX0JZVEUsIHRleHR1cmUuc291cmNlKTtcblxuICAgICAgICBnbC50ZXhQYXJhbWV0ZXJpKGdsLlRFWFRVUkVfMkQsIGdsLlRFWFRVUkVfTUFHX0ZJTFRFUiwgZGF0YS5tYWdGaWx0ZXIgPyBkYXRhLm1hZ0ZpbHRlciA6IGdsLkxJTkVBUiApO1xuICAgICAgICBnbC50ZXhQYXJhbWV0ZXJpKGdsLlRFWFRVUkVfMkQsIGdsLlRFWFRVUkVfTUlOX0ZJTFRFUiwgZGF0YS53cmFwUyA/IGRhdGEud3JhcFMgOiBnbC5DTEFNUF9UT19FREdFICk7XG5cbiAgICAgICAgZ2wudGV4UGFyYW1ldGVyaShnbC5URVhUVVJFXzJELCBnbC5URVhUVVJFX1dSQVBfVCwgZGF0YS53cmFwUyA/IGRhdGEud3JhcFMgOiBnbC5DTEFNUF9UT19FREdFKTtcbiAgICAgICAgZ2wudGV4UGFyYW1ldGVyaShnbC5URVhUVVJFXzJELCBnbC5URVhUVVJFX1dSQVBfUywgZGF0YS53cmFwVCA/IGRhdGEud3JhcFQgOiBnbC5DTEFNUF9UT19FREdFKTtcbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgdGhpcy5zaGFkZXJNYW5hZ2VyLnJlbmRlcmVyLnVwZGF0ZVRleHR1cmUodGV4dHVyZSk7XG4gICAgfVxufTtcblxuLyoqXG4gKiBEZXN0cm95cyB0aGUgc2hhZGVyLlxuICpcbiAqL1xuU2hhZGVyLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLmdsLmRlbGV0ZVByb2dyYW0odGhpcy5wcm9ncmFtKTtcblxuICAgIHRoaXMuZ2wgPSBudWxsO1xuICAgIHRoaXMudW5pZm9ybXMgPSBudWxsO1xuICAgIHRoaXMuYXR0cmlidXRlcyA9IG51bGw7XG5cbiAgICB0aGlzLnZlcnRleFNyYyA9IG51bGw7XG4gICAgdGhpcy5mcmFnbWVudFNyYyA9IG51bGw7XG59O1xuXG5TaGFkZXIucHJvdG90eXBlLl9nbENvbXBpbGUgPSBmdW5jdGlvbiAodHlwZSwgc3JjKVxue1xuICAgIHZhciBzaGFkZXIgPSB0aGlzLmdsLmNyZWF0ZVNoYWRlcih0eXBlKTtcblxuICAgIHRoaXMuZ2wuc2hhZGVyU291cmNlKHNoYWRlciwgc3JjKTtcbiAgICB0aGlzLmdsLmNvbXBpbGVTaGFkZXIoc2hhZGVyKTtcblxuICAgIGlmICghdGhpcy5nbC5nZXRTaGFkZXJQYXJhbWV0ZXIoc2hhZGVyLCB0aGlzLmdsLkNPTVBJTEVfU1RBVFVTKSlcbiAgICB7XG4gICAgICAgIGNvbnNvbGUubG9nKHRoaXMuZ2wuZ2V0U2hhZGVySW5mb0xvZyhzaGFkZXIpKTtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgcmV0dXJuIHNoYWRlcjtcbn07XG4iLCJ2YXIgU2hhZGVyID0gcmVxdWlyZSgnLi9TaGFkZXInKTtcblxuLyoqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAZXh0ZW5kcyBQSVhJLlNoYWRlclxuICogQHBhcmFtIHNoYWRlck1hbmFnZXIge1BJWEkuU2hhZGVyTWFuYWdlcn0gVGhlIHdlYmdsIHNoYWRlciBtYW5hZ2VyIHRoaXMgc2hhZGVyIHdvcmtzIGZvci5cbiAqIEBwYXJhbSBbdmVydGV4U3JjXSB7c3RyaW5nfSBUaGUgc291cmNlIG9mIHRoZSB2ZXJ0ZXggc2hhZGVyLlxuICogQHBhcmFtIFtmcmFnbWVudFNyY10ge3N0cmluZ30gVGhlIHNvdXJjZSBvZiB0aGUgZnJhZ21lbnQgc2hhZGVyLlxuICogQHBhcmFtIFtjdXN0b21Vbmlmb3Jtc10ge29iamVjdH0gQ3VzdG9tIHVuaWZvcm1zIHRvIHVzZSB0byBhdWdtZW50IHRoZSBidWlsdC1pbiBvbmVzLlxuICogQHBhcmFtIFtmcmFnbWVudFNyY10ge3N0cmluZ30gVGhlIHNvdXJjZSBvZiB0aGUgZnJhZ21lbnQgc2hhZGVyLlxuICovXG5mdW5jdGlvbiBUZXh0dXJlU2hhZGVyKHNoYWRlck1hbmFnZXIsIHZlcnRleFNyYywgZnJhZ21lbnRTcmMsIGN1c3RvbVVuaWZvcm1zLCBjdXN0b21BdHRyaWJ1dGVzKVxue1xuICAgIHZhciB1bmlmb3JtcyA9IHtcblxuICAgICAgICB1U2FtcGxlcjogICAgICAgICAgIHsgdHlwZTogJ3NhbXBsZXIyRCcsIHZhbHVlOiAwIH0sXG4gICAgICAgIHByb2plY3Rpb25NYXRyaXg6ICAgeyB0eXBlOiAnbWF0MycsIHZhbHVlOiBuZXcgRmxvYXQzMkFycmF5KFsxLCAwLCAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgMSwgMCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsIDAsIDFdKSB9XG4gICAgfTtcblxuICAgIGlmIChjdXN0b21Vbmlmb3JtcylcbiAgICB7XG4gICAgICAgIGZvciAodmFyIHUgaW4gY3VzdG9tVW5pZm9ybXMpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHVuaWZvcm1zW3VdID0gY3VzdG9tVW5pZm9ybXNbdV07XG4gICAgICAgIH1cbiAgICB9XG5cblxuICAgIHZhciBhdHRyaWJ1dGVzID0ge1xuICAgICAgICBhVmVydGV4UG9zaXRpb246ICAgIDAsXG4gICAgICAgIGFUZXh0dXJlQ29vcmQ6ICAgICAgMCxcbiAgICAgICAgYUNvbG9yOiAgICAgICAgICAgICAwXG4gICAgfTtcblxuICAgIGlmIChjdXN0b21BdHRyaWJ1dGVzKVxuICAgIHtcbiAgICAgICAgZm9yICh2YXIgYSBpbiBjdXN0b21BdHRyaWJ1dGVzKVxuICAgICAgICB7XG4gICAgICAgICAgICBhdHRyaWJ1dGVzW2FdID0gY3VzdG9tQXR0cmlidXRlc1thXTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoZSB2ZXJ0ZXggc2hhZGVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7c3RyaW5nfVxuICAgICAqL1xuICAgIHZlcnRleFNyYyA9IHZlcnRleFNyYyB8fCBUZXh0dXJlU2hhZGVyLmRlZmF1bHRWZXJ0ZXhTcmM7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgZnJhZ21lbnQgc2hhZGVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7c3RyaW5nfVxuICAgICAqL1xuICAgIGZyYWdtZW50U3JjID0gZnJhZ21lbnRTcmMgfHwgVGV4dHVyZVNoYWRlci5kZWZhdWx0RnJhZ21lbnRTcmM7XG5cbiAgICBTaGFkZXIuY2FsbCh0aGlzLCBzaGFkZXJNYW5hZ2VyLCB2ZXJ0ZXhTcmMsIGZyYWdtZW50U3JjLCB1bmlmb3JtcywgYXR0cmlidXRlcyk7XG59XG5cbi8vIGNvbnN0cnVjdG9yXG5UZXh0dXJlU2hhZGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoU2hhZGVyLnByb3RvdHlwZSk7XG5UZXh0dXJlU2hhZGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFRleHR1cmVTaGFkZXI7XG5tb2R1bGUuZXhwb3J0cyA9IFRleHR1cmVTaGFkZXI7XG5cbi8qKlxuICogVGhlIGRlZmF1bHQgdmVydGV4IHNoYWRlciBzb3VyY2VcbiAqXG4gKiBAc3RhdGljXG4gKiBAY29uc3RhbnRcbiAqL1xuVGV4dHVyZVNoYWRlci5kZWZhdWx0VmVydGV4U3JjID0gW1xuICAgICdwcmVjaXNpb24gbG93cCBmbG9hdDsnLFxuICAgICdhdHRyaWJ1dGUgdmVjMiBhVmVydGV4UG9zaXRpb247JyxcbiAgICAnYXR0cmlidXRlIHZlYzIgYVRleHR1cmVDb29yZDsnLFxuICAgICdhdHRyaWJ1dGUgdmVjNCBhQ29sb3I7JyxcblxuICAgICd1bmlmb3JtIG1hdDMgcHJvamVjdGlvbk1hdHJpeDsnLFxuXG4gICAgJ3ZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkOycsXG4gICAgJ3ZhcnlpbmcgdmVjNCB2Q29sb3I7JyxcblxuICAgICd2b2lkIG1haW4odm9pZCl7JyxcbiAgICAnICAgZ2xfUG9zaXRpb24gPSB2ZWM0KChwcm9qZWN0aW9uTWF0cml4ICogdmVjMyhhVmVydGV4UG9zaXRpb24sIDEuMCkpLnh5LCAwLjAsIDEuMCk7JyxcbiAgICAnICAgdlRleHR1cmVDb29yZCA9IGFUZXh0dXJlQ29vcmQ7JyxcbiAgICAnICAgdkNvbG9yID0gdmVjNChhQ29sb3IucmdiICogYUNvbG9yLmEsIGFDb2xvci5hKTsnLFxuICAgICd9J1xuXS5qb2luKCdcXG4nKTtcblxuLyoqXG4gKiBUaGUgZGVmYXVsdCBmcmFnbWVudCBzaGFkZXIgc291cmNlXG4gKlxuICogQHN0YXRpY1xuICogQGNvbnN0YW50XG4gKi9cblRleHR1cmVTaGFkZXIuZGVmYXVsdEZyYWdtZW50U3JjID0gW1xuICAgICdwcmVjaXNpb24gbG93cCBmbG9hdDsnLFxuXG4gICAgJ3ZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkOycsXG4gICAgJ3ZhcnlpbmcgdmVjNCB2Q29sb3I7JyxcblxuICAgICd1bmlmb3JtIHNhbXBsZXIyRCB1U2FtcGxlcjsnLFxuXG4gICAgJ3ZvaWQgbWFpbih2b2lkKXsnLFxuICAgICcgICBnbF9GcmFnQ29sb3IgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZUZXh0dXJlQ29vcmQpICogdkNvbG9yIDsnLFxuICAgICd9J1xuXS5qb2luKCdcXG4nKTtcbiIsInZhciBTaGFkZXIgPSByZXF1aXJlKCdwaXhpLWdsLWNvcmUnKS5HTFNoYWRlcjtcblxuLyoqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAZXh0ZW5kcyBQSVhJLlNoYWRlclxuICogQHBhcmFtIHNoYWRlck1hbmFnZXIge1BJWEkuU2hhZGVyTWFuYWdlcn0gVGhlIHdlYmdsIHNoYWRlciBtYW5hZ2VyIHRoaXMgc2hhZGVyIHdvcmtzIGZvci5cbiAqIEBwYXJhbSBbdmVydGV4U3JjXSB7c3RyaW5nfSBUaGUgc291cmNlIG9mIHRoZSB2ZXJ0ZXggc2hhZGVyLlxuICogQHBhcmFtIFtmcmFnbWVudFNyY10ge3N0cmluZ30gVGhlIHNvdXJjZSBvZiB0aGUgZnJhZ21lbnQgc2hhZGVyLlxuICogQHBhcmFtIFtjdXN0b21Vbmlmb3Jtc10ge29iamVjdH0gQ3VzdG9tIHVuaWZvcm1zIHRvIHVzZSB0byBhdWdtZW50IHRoZSBidWlsdC1pbiBvbmVzLlxuICogQHBhcmFtIFtmcmFnbWVudFNyY10ge3N0cmluZ30gVGhlIHNvdXJjZSBvZiB0aGUgZnJhZ21lbnQgc2hhZGVyLlxuICovXG5mdW5jdGlvbiBUZXh0dXJlU2hhZGVyKGdsKVxue1xuICAgIC8qKlxuICAgICAqIFRoZSB2ZXJ0ZXggc2hhZGVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7c3RyaW5nfVxuICAgICAqL1xuICAgIHZlcnRleFNyYyA9IFRleHR1cmVTaGFkZXIuZGVmYXVsdFZlcnRleFNyYztcblxuICAgIC8qKlxuICAgICAqIFRoZSBmcmFnbWVudCBzaGFkZXIuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtzdHJpbmd9XG4gICAgICovXG4gICAgZnJhZ21lbnRTcmMgPSBUZXh0dXJlU2hhZGVyLmRlZmF1bHRGcmFnbWVudFNyYztcblxuICAgIFNoYWRlci5jYWxsKHRoaXMsIGdsLCB2ZXJ0ZXhTcmMsIGZyYWdtZW50U3JjKTsvLywgdW5pZm9ybXMsIGF0dHJpYnV0ZXMpO1xuXG59XG5cbi8vIGNvbnN0cnVjdG9yXG5UZXh0dXJlU2hhZGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoU2hhZGVyLnByb3RvdHlwZSk7XG5UZXh0dXJlU2hhZGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFRleHR1cmVTaGFkZXI7XG5tb2R1bGUuZXhwb3J0cyA9IFRleHR1cmVTaGFkZXI7XG5cbi8qKlxuICogVGhlIGRlZmF1bHQgdmVydGV4IHNoYWRlciBzb3VyY2VcbiAqXG4gKiBAc3RhdGljXG4gKiBAY29uc3RhbnRcbiAqL1xuVGV4dHVyZVNoYWRlci5kZWZhdWx0VmVydGV4U3JjID0gW1xuICAgICdwcmVjaXNpb24gbG93cCBmbG9hdDsnLFxuICAgICdhdHRyaWJ1dGUgdmVjMiBhVmVydGV4UG9zaXRpb247JyxcbiAgICAnYXR0cmlidXRlIHZlYzIgYVRleHR1cmVDb29yZDsnLFxuICAgICdhdHRyaWJ1dGUgdmVjNCBhQ29sb3I7JyxcblxuICAgICd1bmlmb3JtIG1hdDMgcHJvamVjdGlvbk1hdHJpeDsnLFxuXG4gICAgJ3ZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkOycsXG4gICAgJ3ZhcnlpbmcgdmVjNCB2Q29sb3I7JyxcblxuICAgICd2b2lkIG1haW4odm9pZCl7JyxcbiAgICAnICAgZ2xfUG9zaXRpb24gPSB2ZWM0KChwcm9qZWN0aW9uTWF0cml4ICogdmVjMyhhVmVydGV4UG9zaXRpb24sIDEuMCkpLnh5LCAwLjAsIDEuMCk7JyxcbiAgICAnICAgdlRleHR1cmVDb29yZCA9IGFUZXh0dXJlQ29vcmQ7JyxcbiAgICAnICAgdkNvbG9yID0gdmVjNChhQ29sb3IucmdiICogYUNvbG9yLmEsIGFDb2xvci5hKTsnLFxuICAgICd9J1xuXS5qb2luKCdcXG4nKTtcblxuLyoqXG4gKiBUaGUgZGVmYXVsdCBmcmFnbWVudCBzaGFkZXIgc291cmNlXG4gKlxuICogQHN0YXRpY1xuICogQGNvbnN0YW50XG4gKi9cblRleHR1cmVTaGFkZXIuZGVmYXVsdEZyYWdtZW50U3JjID0gW1xuICAgICdwcmVjaXNpb24gbG93cCBmbG9hdDsnLFxuXG4gICAgJ3ZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkOycsXG4gICAgJ3ZhcnlpbmcgdmVjNCB2Q29sb3I7JyxcblxuICAgICd1bmlmb3JtIHNhbXBsZXIyRCB1U2FtcGxlcjsnLFxuXG4gICAgJ3ZvaWQgbWFpbih2b2lkKXsnLFxuICAgICcgICBnbF9GcmFnQ29sb3IgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZUZXh0dXJlQ29vcmQpICogdkNvbG9yIDsnLFxuICAgICd9J1xuXS5qb2luKCdcXG4nKTtcbiIsInZhciBXZWJHTE1hbmFnZXIgPSByZXF1aXJlKCcuLi9tYW5hZ2Vycy9XZWJHTE1hbmFnZXInKTtcblxuLyoqXG4gKiBCYXNlIGZvciBhIGNvbW1vbiBvYmplY3QgcmVuZGVyZXIgdGhhdCBjYW4gYmUgdXNlZCBhcyBhIHN5c3RlbSByZW5kZXJlciBwbHVnaW4uXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLldlYkdMTWFuYWdlclxuICogQG1lbWJlcm9mIFBJWElcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5XZWJHTFJlbmRlcmVyfSBUaGUgcmVuZGVyZXIgdGhpcyBvYmplY3QgcmVuZGVyZXIgd29ya3MgZm9yLlxuICovXG5mdW5jdGlvbiBPYmplY3RSZW5kZXJlcihyZW5kZXJlcilcbntcbiAgICBXZWJHTE1hbmFnZXIuY2FsbCh0aGlzLCByZW5kZXJlcik7XG59XG5cblxuT2JqZWN0UmVuZGVyZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShXZWJHTE1hbmFnZXIucHJvdG90eXBlKTtcbk9iamVjdFJlbmRlcmVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IE9iamVjdFJlbmRlcmVyO1xubW9kdWxlLmV4cG9ydHMgPSBPYmplY3RSZW5kZXJlcjtcblxuLyoqXG4gKiBTdGFydHMgdGhlIHJlbmRlcmVyIGFuZCBzZXRzIHRoZSBzaGFkZXJcbiAqXG4gKi9cbk9iamVjdFJlbmRlcmVyLnByb3RvdHlwZS5zdGFydCA9IGZ1bmN0aW9uICgpXG57XG4gICAgLy8gc2V0IHRoZSBzaGFkZXIuLlxufTtcblxuLyoqXG4gKiBTdG9wcyB0aGUgcmVuZGVyZXJcbiAqXG4gKi9cbk9iamVjdFJlbmRlcmVyLnByb3RvdHlwZS5zdG9wID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLmZsdXNoKCk7XG59O1xuXG4vKipcbiAqIGZsdXNoZXNcbiAqXG4gKi9cbk9iamVjdFJlbmRlcmVyLnByb3RvdHlwZS5mbHVzaCA9IGZ1bmN0aW9uICgpXG57XG4gICAgLy8gZmx1c2ghXG59O1xuXG4vKipcbiAqIFJlbmRlcnMgYW4gb2JqZWN0XG4gKlxuICogQHBhcmFtIG9iamVjdCB7UElYSS5EaXNwbGF5T2JqZWN0fSBUaGUgb2JqZWN0IHRvIHJlbmRlci5cbiAqL1xuT2JqZWN0UmVuZGVyZXIucHJvdG90eXBlLnJlbmRlciA9IGZ1bmN0aW9uIChvYmplY3QpIC8vIGpzaGludCB1bnVzZWQ6ZmFsc2VcbntcbiAgICAvLyByZW5kZXIgdGhlIG9iamVjdFxufTtcbiIsIi8qKlxuICogSGVscGVyIGNsYXNzIHRvIGNyZWF0ZSBhIHF1YWRcbiAqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gZ2wge1dlYkdMUmVuZGVyaW5nQ29udGV4dH0gVGhlIGdsIGNvbnRleHQgZm9yIHRoaXMgcXVhZCB0byB1c2UuXG4gKi9cbmZ1bmN0aW9uIFF1YWQoZ2wpXG57XG4gICAgLypcbiAgICAgKiB0aGUgY3VycmVudCBXZWJHTCBkcmF3aW5nIGNvbnRleHRcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1dlYkdMUmVuZGVyaW5nQ29udGV4dH1cbiAgICAgKi9cbiAgICB0aGlzLmdsID0gZ2w7XG5cbi8vICAgIHRoaXMudGV4dHVyZXMgPSBuZXcgVGV4dHVyZVV2cygpO1xuXG4gICAgLyoqXG4gICAgICogQW4gYXJyYXkgb2YgdmVydGljZXNcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge0Zsb2F0MzJBcnJheX1cbiAgICAgKi9cbiAgICB0aGlzLnZlcnRpY2VzID0gbmV3IEZsb2F0MzJBcnJheShbXG4gICAgICAgIDAsMCxcbiAgICAgICAgMjAwLDAsXG4gICAgICAgIDIwMCwyMDAsXG4gICAgICAgIDAsMjAwXG4gICAgXSk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgVXZzIG9mIHRoZSBxdWFkXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtGbG9hdDMyQXJyYXl9XG4gICAgICovXG4gICAgdGhpcy51dnMgPSBuZXcgRmxvYXQzMkFycmF5KFtcbiAgICAgICAgMCwwLFxuICAgICAgICAxLDAsXG4gICAgICAgIDEsMSxcbiAgICAgICAgMCwxXG4gICAgXSk7XG5cbi8vICAgIHZhciB3aGl0ZSA9ICgweEZGRkZGRiA+PiAxNikgKyAoMHhGRkZGRkYgJiAweGZmMDApICsgKCgweEZGRkZGRiAmIDB4ZmYpIDw8IDE2KSArICgxICogMjU1IDw8IDI0KTtcbiAgICAvL1RPRE8gY29udmVydCB0aGlzIHRvIGEgMzIgdW5zaWduZWQgaW50IGFycmF5XG4gICAgLyoqXG4gICAgICogVGhlIGNvbG9yIGNvbXBvbmVudHMgb2YgdGhlIHRyaWFuZ2xlc1xuICAgICAqXG4gICAgICogQG1lbWJlciB7RmxvYXQzMkFycmF5fVxuICAgICAqL1xuICAgIHRoaXMuY29sb3JzID0gbmV3IEZsb2F0MzJBcnJheShbXG4gICAgICAgIDEsMSwxLDEsXG4gICAgICAgIDEsMSwxLDEsXG4gICAgICAgIDEsMSwxLDEsXG4gICAgICAgIDEsMSwxLDFcbiAgICBdKTtcblxuICAgIC8qXG4gICAgICogQG1lbWJlciB7VWludDE2QXJyYXl9IEFuIGFycmF5IGNvbnRhaW5pbmcgdGhlIGluZGljZXMgb2YgdGhlIHZlcnRpY2VzXG4gICAgICovXG4gICAgdGhpcy5pbmRpY2VzID0gbmV3IFVpbnQxNkFycmF5KFtcbiAgICAgICAgMCwgMSwgMiwgMCwgMywgMlxuICAgIF0pO1xuXG4gICAgLypcbiAgICAgKiBAbWVtYmVyIHtXZWJHTEJ1ZmZlcn0gVGhlIHZlcnRleCBidWZmZXJcbiAgICAgKi9cbiAgICB0aGlzLnZlcnRleEJ1ZmZlciA9IGdsLmNyZWF0ZUJ1ZmZlcigpO1xuXG4gICAgLypcbiAgICAgKiBAbWVtYmVyIHtXZWJHTEJ1ZmZlcn0gVGhlIGluZGV4IGJ1ZmZlclxuICAgICAqL1xuICAgIHRoaXMuaW5kZXhCdWZmZXIgPSBnbC5jcmVhdGVCdWZmZXIoKTtcblxuICAgIGdsLmJpbmRCdWZmZXIoZ2wuQVJSQVlfQlVGRkVSLCB0aGlzLnZlcnRleEJ1ZmZlcik7XG4gICAgZ2wuYnVmZmVyRGF0YShnbC5BUlJBWV9CVUZGRVIsICg4ICsgOCArIDE2KSAqIDQsIGdsLkRZTkFNSUNfRFJBVyk7XG5cbiAgICBnbC5iaW5kQnVmZmVyKGdsLkVMRU1FTlRfQVJSQVlfQlVGRkVSLCB0aGlzLmluZGV4QnVmZmVyKTtcbiAgICBnbC5idWZmZXJEYXRhKGdsLkVMRU1FTlRfQVJSQVlfQlVGRkVSLCB0aGlzLmluZGljZXMsIGdsLlNUQVRJQ19EUkFXKTtcblxuICAgIHRoaXMudXBsb2FkKCk7XG59XG5cblF1YWQucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gUXVhZDtcblxuLyoqXG4gKiBNYXBzIHR3byBSZWN0YW5nbGUgdG8gdGhlIHF1YWRcbiAqIEBwYXJhbSByZWN0IHtQSVhJLlJlY3RhbmdsZX0gdGhlIGZpcnN0IHJlY3RhbmdsZVxuICogQHBhcmFtIHJlY3QyIHtQSVhJLlJlY3RhbmdsZX0gdGhlIHNlY29uZCByZWN0YW5nbGVcbiAqL1xuUXVhZC5wcm90b3R5cGUubWFwID0gZnVuY3Rpb24ocmVjdCwgcmVjdDIpXG57XG4gICAgdmFyIHggPSAwOyAvL3JlY3QyLnggLyByZWN0LndpZHRoO1xuICAgIHZhciB5ID0gMDsgLy9yZWN0Mi55IC8gcmVjdC5oZWlnaHQ7XG5cbiAgICB0aGlzLnV2c1swXSA9IHg7XG4gICAgdGhpcy51dnNbMV0gPSB5O1xuXG4gICAgdGhpcy51dnNbMl0gPSB4ICsgcmVjdDIud2lkdGggLyByZWN0LndpZHRoO1xuICAgIHRoaXMudXZzWzNdID0geTtcblxuICAgIHRoaXMudXZzWzRdID0geCArIHJlY3QyLndpZHRoIC8gcmVjdC53aWR0aDtcbiAgICB0aGlzLnV2c1s1XSA9IHkgKyByZWN0Mi5oZWlnaHQgLyByZWN0LmhlaWdodDtcblxuICAgIHRoaXMudXZzWzZdID0geDtcbiAgICB0aGlzLnV2c1s3XSA9IHkgKyByZWN0Mi5oZWlnaHQgLyByZWN0LmhlaWdodDtcblxuICAgIC8vLyAtLS0tLVxuICAgIHggPSByZWN0Mi54O1xuICAgIHkgPSByZWN0Mi55O1xuXG4gICAgdGhpcy52ZXJ0aWNlc1swXSA9IHg7XG4gICAgdGhpcy52ZXJ0aWNlc1sxXSA9IHk7XG5cbiAgICB0aGlzLnZlcnRpY2VzWzJdID0geCArIHJlY3QyLndpZHRoO1xuICAgIHRoaXMudmVydGljZXNbM10gPSB5O1xuXG4gICAgdGhpcy52ZXJ0aWNlc1s0XSA9IHggKyByZWN0Mi53aWR0aDtcbiAgICB0aGlzLnZlcnRpY2VzWzVdID0geSArIHJlY3QyLmhlaWdodDtcblxuICAgIHRoaXMudmVydGljZXNbNl0gPSB4O1xuICAgIHRoaXMudmVydGljZXNbN10gPSB5ICsgcmVjdDIuaGVpZ2h0O1xuXG4gICAgdGhpcy51cGxvYWQoKTtcbn07XG5cbi8qKlxuICogQmluZHMgdGhlIGJ1ZmZlciBhbmQgdXBsb2FkcyB0aGUgZGF0YVxuICovXG5RdWFkLnByb3RvdHlwZS51cGxvYWQgPSBmdW5jdGlvbigpXG57XG4gICAgdmFyIGdsID0gdGhpcy5nbDtcblxuICAgIC8vIFRPRE8gY291bGQgcHJvYmFibHkgYmUgcHVzaGVkIGludG8gb25lIHVwbG9hZCFcbiAgICBnbC5iaW5kQnVmZmVyKCBnbC5BUlJBWV9CVUZGRVIsIHRoaXMudmVydGV4QnVmZmVyICk7XG5cbiAgICBnbC5idWZmZXJTdWJEYXRhKGdsLkFSUkFZX0JVRkZFUiwgMCwgdGhpcy52ZXJ0aWNlcyk7XG5cbiAgICBnbC5idWZmZXJTdWJEYXRhKGdsLkFSUkFZX0JVRkZFUiwgOCAqIDQsIHRoaXMudXZzKTtcblxuICAgIGdsLmJ1ZmZlclN1YkRhdGEoZ2wuQVJSQVlfQlVGRkVSLCAoOCArIDgpICogNCwgdGhpcy5jb2xvcnMpO1xufTtcblxuUXVhZC5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uKClcbntcbiAgICB2YXIgZ2wgPSB0aGlzLmdsO1xuICAgIFxuICAgICBnbC5kZWxldGVCdWZmZXIodGhpcy52ZXJ0ZXhCdWZmZXIpO1xuICAgICBnbC5kZWxldGVCdWZmZXIodGhpcy5pbmRleEJ1ZmZlcik7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IFF1YWQ7XG5cblxuIiwidmFyIG1hdGggPSByZXF1aXJlKCcuLi8uLi8uLi9tYXRoJyksXG4gICAgdXRpbHMgPSByZXF1aXJlKCcuLi8uLi8uLi91dGlscycpLFxuICAgIENPTlNUID0gcmVxdWlyZSgnLi4vLi4vLi4vY29uc3QnKSxcbiAgICAgICAgXG4gICAgR0xUZXh0dXJlID0gcmVxdWlyZSgncGl4aS1nbC1jb3JlJykuR0xUZXh0dXJlLFxuICAgIEdMRnJhbWVidWZmZXIgPSByZXF1aXJlKCdwaXhpLWdsLWNvcmUnKS5HTEZyYW1lYnVmZmVyLFxuICAgIFxuICAgIFN0ZW5jaWxNYXNrU3RhY2sgPSByZXF1aXJlKCcuL1N0ZW5jaWxNYXNrU3RhY2snKTtcblxuLyoqXG4gKiBAYXV0aG9yIE1hdCBHcm92ZXMgaHR0cDovL21hdGdyb3Zlcy5jb20vIEBEb29ybWF0MjNcbiAqL1xuXG4vKipcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqIEBwYXJhbSBnbCB7V2ViR0xSZW5kZXJpbmdDb250ZXh0fSB0aGUgY3VycmVudCBXZWJHTCBkcmF3aW5nIGNvbnRleHRcbiAqIEBwYXJhbSB3aWR0aCB7bnVtYmVyfSB0aGUgaG9yaXpvbnRhbCByYW5nZSBvZiB0aGUgZmlsdGVyXG4gKiBAcGFyYW0gaGVpZ2h0IHtudW1iZXJ9IHRoZSB2ZXJ0aWNhbCByYW5nZSBvZiB0aGUgZmlsdGVyXG4gKiBAcGFyYW0gc2NhbGVNb2RlIHtudW1iZXJ9IFNlZSB7QGxpbmsgUElYSS5TQ0FMRV9NT0RFU30gZm9yIHBvc3NpYmxlIHZhbHVlc1xuICogQHBhcmFtIHJlc29sdXRpb24ge251bWJlcn0gdGhlIGN1cnJlbnQgcmVzb2x1dGlvblxuICogQHBhcmFtIHJvb3Qge2Jvb2xlYW59IFdoZXRoZXIgdGhpcyBvYmplY3QgaXMgdGhlIHJvb3QgZWxlbWVudCBvciBub3RcbiAqL1xudmFyIFJlbmRlclRhcmdldCA9IGZ1bmN0aW9uKGdsLCB3aWR0aCwgaGVpZ2h0LCBzY2FsZU1vZGUsIHJlc29sdXRpb24sIHJvb3QpXG57XG4gICAgLy9UT0RPIFJlc29sdXRpb24gY291bGQgZ28gaGVyZSAoIGVnIGxvdyByZXMgYmx1cnMgKVxuXG4gICAgLyoqXG4gICAgICogVGhlIGN1cnJlbnQgV2ViR0wgZHJhd2luZyBjb250ZXh0LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7V2ViR0xSZW5kZXJpbmdDb250ZXh0fVxuICAgICAqL1xuICAgIHRoaXMuZ2wgPSBnbDtcblxuICAgIC8vIG5leHQgdGltZSB0byBjcmVhdGUgYSBmcmFtZSBidWZmZXIgYW5kIHRleHR1cmVcblxuICAgIC8qKlxuICAgICAqIEEgZnJhbWUgYnVmZmVyXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtXZWJHTEZyYW1lQnVmZmVyfVxuICAgICAqL1xuICAgIHRoaXMuZnJhbWVCdWZmZXIgPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHRleHR1cmVcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuVGV4dHVyZX1cbiAgICAgKi9cbiAgICB0aGlzLnRleHR1cmUgPSBudWxsO1xuXG4gICAgdGhpcy5jbGVhckNvbG9yID0gWzAsIDAsIDAsIDBdO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHNpemUgb2YgdGhlIG9iamVjdCBhcyBhIHJlY3RhbmdsZVxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5SZWN0YW5nbGV9XG4gICAgICovXG4gICAgdGhpcy5zaXplID0gbmV3IG1hdGguUmVjdGFuZ2xlKDAsIDAsIDEsIDEpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGN1cnJlbnQgcmVzb2x1dGlvblxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMucmVzb2x1dGlvbiA9IHJlc29sdXRpb24gfHwgQ09OU1QuUkVTT0xVVElPTjtcblxuICAgIC8qKlxuICAgICAqIFRoZSBwcm9qZWN0aW9uIG1hdHJpeFxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5NYXRyaXh9XG4gICAgICovXG4gICAgdGhpcy5wcm9qZWN0aW9uTWF0cml4ID0gbmV3IG1hdGguTWF0cml4KCk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgb2JqZWN0J3MgdHJhbnNmb3JtXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLk1hdHJpeH1cbiAgICAgKi9cbiAgICB0aGlzLnRyYW5zZm9ybSA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgZnJhbWUuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlJlY3RhbmdsZX1cbiAgICAgKi9cbiAgICB0aGlzLmZyYW1lID0gbnVsbDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBzdGVuY2lsIGJ1ZmZlciBzdG9yZXMgbWFza2luZyBkYXRhIGZvciB0aGUgcmVuZGVyIHRhcmdldFxuICAgICAqXG4gICAgICogQG1lbWJlciB7V2ViR0xSZW5kZXJCdWZmZXJ9XG4gICAgICovXG4gICAgdGhpcy5zdGVuY2lsQnVmZmVyID0gbnVsbDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBkYXRhIHN0cnVjdHVyZSBmb3IgdGhlIHN0ZW5jaWwgbWFza3NcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuU3RlbmNpbE1hc2tTdGFja31cbiAgICAgKi9cbiAgICB0aGlzLnN0ZW5jaWxNYXNrU3RhY2sgPSBuZXcgU3RlbmNpbE1hc2tTdGFjaygpO1xuXG4gICAgLyoqXG4gICAgICogU3RvcmVzIGZpbHRlciBkYXRhIGZvciB0aGUgcmVuZGVyIHRhcmdldFxuICAgICAqXG4gICAgICogQG1lbWJlciB7b2JqZWN0W119XG4gICAgICovXG4gICAgdGhpcy5maWx0ZXJTdGFjayA9IFtcbiAgICAgICAge1xuICAgICAgICAgICAgcmVuZGVyVGFyZ2V0OnRoaXMsXG4gICAgICAgICAgICBmaWx0ZXI6W10sXG4gICAgICAgICAgICBib3VuZHM6dGhpcy5zaXplXG4gICAgICAgIH1cbiAgICBdO1xuXG5cbiAgICAvKipcbiAgICAgKiBUaGUgc2NhbGUgbW9kZS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCBQSVhJLlNDQUxFX01PREVTLkRFRkFVTFRcbiAgICAgKiBAc2VlIFBJWEkuU0NBTEVfTU9ERVNcbiAgICAgKi9cbiAgICB0aGlzLnNjYWxlTW9kZSA9IHNjYWxlTW9kZSB8fCBDT05TVC5TQ0FMRV9NT0RFUy5ERUZBVUxUO1xuXG4gICAgLyoqXG4gICAgICogV2hldGhlciB0aGlzIG9iamVjdCBpcyB0aGUgcm9vdCBlbGVtZW50IG9yIG5vdFxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKi9cbiAgICB0aGlzLnJvb3QgPSByb290O1xuXG4gICAgdGhpcy5mcmFtZUJ1ZmZlciA9IEdMRnJhbWVidWZmZXIuY3JlYXRlUkdCQShnbCwgMTAwLCAxMDApO1xuICAgIGlmKHRoaXMuZnJhbWVCdWZmZXIpdGhpcy5mcmFtZUJ1ZmZlci51bmJpbmQoKTtcblxuICAgLy8gdGhpcy5mcmFtZUJ1ZmZlciA9IHtmcmFtZWJ1ZmZlcjpudWxsLCBiaW5kOmZ1bmN0aW9uKCl7fSwgY2xlYXI6ZnVuY3Rpb24oKXt9LCByZXNpemU6ZnVuY3Rpb24oKXt9fS8vbmV3IEdMRnJhbWVidWZmZXIuY3JlYXRlUkdCQShnbCwgMTAwLCAxMDApO1xuXG5cblxuICAgIGlmICghdGhpcy5yb290KVxuICAgIHtcbiAgICAgICAgLypcbiAgICAgICAgICAgIEEgZnJhbWUgYnVmZmVyIG5lZWRzIGEgdGFyZ2V0IHRvIHJlbmRlciB0by4uXG4gICAgICAgICAgICBjcmVhdGUgYSB0ZXh0dXJlIGFuZCBiaW5kIGl0IGF0dGFjaCBpdCB0byB0aGUgZnJhbWVidWZmZXIuLlxuICAgICAgICAgKi9cbiAgICAgICAgXG4gICAgICAgIC8vIGNyZWF0ZSBhIHRleHR1cmUgdG8gYmluZCBhdHRhY2ggdG8gdGhlIGZyYW1lQnVmZmVyLi5cbiAgICAgICAgdmFyIHRleHR1cmUgPSBuZXcgR0xUZXh0dXJlKGdsKTtcblxuICAgICAgICB0ZXh0dXJlLmVuYWJsZUxpbmVhclNjYWxpbmcoKVxuICAgICAgICB0ZXh0dXJlLmVuYWJsZVdyYXBDbGFtcCgpXG5cbiAgICAgICAgdGhpcy5mcmFtZUJ1ZmZlci5lbmFibGVUZXh0dXJlKHRleHR1cmUpO1xuXG4gICAgICAgIC8vIFRPRE8gY2hhbmdlIVxuICAgICAgICAvLyB0aGlzIGlzIHVzZWQgYnkgdGhlIGJhc2UgdGV4dHVyZVxuICAgICAgICB0aGlzLnRleHR1cmUgPSB0ZXh0dXJlLnRleHR1cmU7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIC8vIG1ha2UgaXQgYSBudWxsIGZyYW1lYnVmZmVyLi5cbiAgICAgICAgdGhpcy5mcmFtZUJ1ZmZlci5mcmFtZWJ1ZmZlciA9IG51bGw7XG4gICAgfVxuXG4gICAgdGhpcy5yZXNpemUod2lkdGgsIGhlaWdodCk7XG59O1xuXG5SZW5kZXJUYXJnZXQucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gUmVuZGVyVGFyZ2V0O1xubW9kdWxlLmV4cG9ydHMgPSBSZW5kZXJUYXJnZXQ7XG5cbi8qKlxuICogQ2xlYXJzIHRoZSBmaWx0ZXIgdGV4dHVyZS5cbiAqXG4gKiBAcGFyYW0gW2JpbmQ9ZmFsc2VdIHtib29sZWFufSBTaG91bGQgd2UgYmluZCBvdXIgZnJhbWVidWZmZXIgYmVmb3JlIGNsZWFyaW5nP1xuICovXG5SZW5kZXJUYXJnZXQucHJvdG90eXBlLmNsZWFyID0gZnVuY3Rpb24oY2xlYXJDb2xvcilcbntcbiAgICB2YXIgY2MgPSBjbGVhckNvbG9yIHx8IHRoaXMuY2xlYXJDb2xvclxuICAgIHRoaXMuZnJhbWVCdWZmZXIuY2xlYXIoY2NbMF0sY2NbMV0sY2NbMl0sY2NbM10pLy9yLGcsYixhKTtcbn07XG5cbi8qKlxuICogQmluZHMgdGhlIHN0ZW5jaWwgYnVmZmVyLlxuICpcbiAqL1xuUmVuZGVyVGFyZ2V0LnByb3RvdHlwZS5hdHRhY2hTdGVuY2lsQnVmZmVyID0gZnVuY3Rpb24oKVxue1xuICAgIC8vVE9ETyBjaGVjayBpZiBzdGVuY2lsIGlzIGRvbmU/XG4gICAgLyoqXG4gICAgICogVGhlIHN0ZW5jaWwgYnVmZmVyIGlzIHVzZWQgZm9yIG1hc2tpbmcgaW4gcGl4aVxuICAgICAqIGxldHMgY3JlYXRlIG9uZSBhbmQgdGhlbiBhZGQgYXR0YWNoIGl0IHRvIHRoZSBmcmFtZWJ1ZmZlci4uXG4gICAgICovXG4gICAgaWYgKCF0aGlzLnJvb3QpXG4gICAge1xuICAgICAgICB0aGlzLmZyYW1lQnVmZmVyLmVuYWJsZVN0ZW5jaWwoKTtcbiAgICB9XG59O1xuXG4vKipcbiAqIEJpbmRzIHRoZSBidWZmZXJzIGFuZCBpbml0aWFsaXNlcyB0aGUgdmlld3BvcnQuXG4gKlxuICovXG5SZW5kZXJUYXJnZXQucHJvdG90eXBlLmFjdGl2YXRlID0gZnVuY3Rpb24oKVxue1xuICAgIC8vVE9PRCByZWZhY3RvciB1c2FnZSBvZiBmcmFtZS4uXG4gICAgdmFyIGdsID0gdGhpcy5nbDtcblxuICAgIHRoaXMuZnJhbWVCdWZmZXIuYmluZCgpO1xuXG5cbiAgICB2YXIgcHJvamVjdGlvbkZyYW1lID0gdGhpcy5mcmFtZSB8fCB0aGlzLnNpemU7XG5cbiAgICAvLyBUT0RPIGFkZCBhIGRpcnR5IGZsYWcgdG8gdGhpcyBvZiBhIHNldHRlciBmb3IgdGhlIGZyYW1lP1xuICAgIHRoaXMuY2FsY3VsYXRlUHJvamVjdGlvbiggcHJvamVjdGlvbkZyYW1lICk7XG5cbiAgICBpZih0aGlzLnRyYW5zZm9ybSlcbiAgICB7XG4gICAgICAgIHRoaXMucHJvamVjdGlvbk1hdHJpeC5hcHBlbmQodGhpcy50cmFuc2Zvcm0pO1xuICAgIH1cblxuICAgIGdsLnZpZXdwb3J0KDAsMCwgcHJvamVjdGlvbkZyYW1lLndpZHRoICogdGhpcy5yZXNvbHV0aW9uLCBwcm9qZWN0aW9uRnJhbWUuaGVpZ2h0ICogdGhpcy5yZXNvbHV0aW9uKTtcbn07XG5cbi8qKlxuICogVXBkYXRlcyB0aGUgcHJvamVjdGlvbiBtYXRyaXggYmFzZWQgb24gYSBwcm9qZWN0aW9uIGZyYW1lICh3aGljaCBpcyBhIHJlY3RhbmdsZSlcbiAqXG4gKi9cblJlbmRlclRhcmdldC5wcm90b3R5cGUuY2FsY3VsYXRlUHJvamVjdGlvbiA9IGZ1bmN0aW9uIChwcm9qZWN0aW9uRnJhbWUpXG57XG4gICAgdmFyIHBtID0gdGhpcy5wcm9qZWN0aW9uTWF0cml4O1xuXG4gICAgcG0uaWRlbnRpdHkoKTtcblxuICAgIGlmICghdGhpcy5yb290KVxuICAgIHtcbiAgICAgICAgcG0uYSA9IDEgLyBwcm9qZWN0aW9uRnJhbWUud2lkdGgqMjtcbiAgICAgICAgcG0uZCA9IDEgLyBwcm9qZWN0aW9uRnJhbWUuaGVpZ2h0KjI7XG5cbiAgICAgICAgcG0udHggPSAtMSAtIHByb2plY3Rpb25GcmFtZS54ICogcG0uYTtcbiAgICAgICAgcG0udHkgPSAtMSAtIHByb2plY3Rpb25GcmFtZS55ICogcG0uZDtcbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgcG0uYSA9IDEgLyBwcm9qZWN0aW9uRnJhbWUud2lkdGgqMjtcbiAgICAgICAgcG0uZCA9IC0xIC8gcHJvamVjdGlvbkZyYW1lLmhlaWdodCoyO1xuXG4gICAgICAgIHBtLnR4ID0gLTEgLSBwcm9qZWN0aW9uRnJhbWUueCAqIHBtLmE7XG4gICAgICAgIHBtLnR5ID0gMSAtIHByb2plY3Rpb25GcmFtZS55ICogcG0uZDtcbiAgICB9XG59O1xuXG4vKipcbiAqIFJlc2l6ZXMgdGhlIHRleHR1cmUgdG8gdGhlIHNwZWNpZmllZCB3aWR0aCBhbmQgaGVpZ2h0XG4gKlxuICogQHBhcmFtIHdpZHRoIHtOdW1iZXJ9IHRoZSBuZXcgd2lkdGggb2YgdGhlIHRleHR1cmVcbiAqIEBwYXJhbSBoZWlnaHQge051bWJlcn0gdGhlIG5ldyBoZWlnaHQgb2YgdGhlIHRleHR1cmVcbiAqL1xuUmVuZGVyVGFyZ2V0LnByb3RvdHlwZS5yZXNpemUgPSBmdW5jdGlvbiAod2lkdGgsIGhlaWdodClcbntcbiAgICB3aWR0aCA9IHdpZHRoIHwgMDtcbiAgICBoZWlnaHQgPSBoZWlnaHQgfCAwO1xuXG4gICAgaWYgKHRoaXMuc2l6ZS53aWR0aCA9PT0gd2lkdGggJiYgdGhpcy5zaXplLmhlaWdodCA9PT0gaGVpZ2h0KSBcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLnNpemUud2lkdGggPSB3aWR0aDtcbiAgICB0aGlzLnNpemUuaGVpZ2h0ID0gaGVpZ2h0O1xuXG4gICAgdGhpcy5mcmFtZUJ1ZmZlci5yZXNpemUod2lkdGggKiB0aGlzLnJlc29sdXRpb24sIGhlaWdodCAqIHRoaXMucmVzb2x1dGlvbik7XG4gICAgXG4gICAgdmFyIHByb2plY3Rpb25GcmFtZSA9IHRoaXMuZnJhbWUgfHwgdGhpcy5zaXplO1xuXG4gICAgdGhpcy5jYWxjdWxhdGVQcm9qZWN0aW9uKCBwcm9qZWN0aW9uRnJhbWUgKTtcbn07XG5cbi8qKlxuICogRGVzdHJveXMgdGhlIHJlbmRlciB0YXJnZXQuXG4gKlxuICovXG5SZW5kZXJUYXJnZXQucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoKVxue1xuICAgIHZhciBnbCA9IHRoaXMuZ2w7XG4gICAgXG4gICAgdGhpcy5mcmFtZUJ1ZmZlci5kZXN0cm95KCk7XG5cbiAgICB0aGlzLmZyYW1lQnVmZmVyID0gbnVsbDtcbiAgICB0aGlzLnRleHR1cmUgPSBudWxsO1xufTtcbiIsIi8qKlxuICogR2VuZXJpYyBNYXNrIFN0YWNrIGRhdGEgc3RydWN0dXJlXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKi9cbmZ1bmN0aW9uIFN0ZW5jaWxNYXNrU3RhY2soKVxue1xuXHQvKipcbiAgICAgKiBUaGUgYWN0dWFsIHN0YWNrXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHthbnlbXX1cbiAgICAgKi9cbiAgICB0aGlzLnN0ZW5jaWxTdGFjayA9IFtdO1xuXG4gICAgLyoqXG4gICAgICogVE9ETyBAYWx2aW5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICovXG4gICAgdGhpcy5yZXZlcnNlID0gdHJ1ZTtcblxuICAgIC8qKlxuICAgICAqIEludGVybmFsIGNvdW50XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy5jb3VudCA9IDA7XG59XG5cblN0ZW5jaWxNYXNrU3RhY2sucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gU3RlbmNpbE1hc2tTdGFjaztcbm1vZHVsZS5leHBvcnRzID0gU3RlbmNpbE1hc2tTdGFjaztcbiIsIkNPTlNUID0gcmVxdWlyZSgnLi4vLi4vLi4vY29uc3QnKTtcblxuLyoqXG4gKiBNYXBzIGdsIGJsZW5kIGNvbWJpbmF0aW9ucyB0byBXZWJHTFxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICovXG5mdW5jdGlvbiBtYXBXZWJHTEJsZW5kTW9kZXNUb1BpeGkoZ2wsIG9iamVjdClcbntcbiAgICBvYmplY3QgPSBvYmplY3QgfHwge307XG5cbiAgICAvL1RPRE8gLSBwcmVtdWx0aXBseSBhbHBoYSB3b3VsZCBiZSBkaWZmZXJlbnQuXG4gICAgLy9hZGQgYSBib29sZWFuIGZvciB0aGF0IVxuICAgIG9iamVjdFtDT05TVC5CTEVORF9NT0RFUy5OT1JNQUxdICAgICAgICA9IFtnbC5PTkUsICAgICAgIGdsLk9ORV9NSU5VU19TUkNfQUxQSEFdO1xuICAgIG9iamVjdFtDT05TVC5CTEVORF9NT0RFUy5BRERdICAgICAgICAgICA9IFtnbC5TUkNfQUxQSEEsIGdsLkRTVF9BTFBIQV07XG4gICAgb2JqZWN0W0NPTlNULkJMRU5EX01PREVTLk1VTFRJUExZXSAgICAgID0gW2dsLkRTVF9DT0xPUiwgZ2wuT05FX01JTlVTX1NSQ19BTFBIQV07XG4gICAgb2JqZWN0W0NPTlNULkJMRU5EX01PREVTLlNDUkVFTl0gICAgICAgID0gW2dsLlNSQ19BTFBIQSwgZ2wuT05FXTtcbiAgICBvYmplY3RbQ09OU1QuQkxFTkRfTU9ERVMuT1ZFUkxBWV0gICAgICAgPSBbZ2wuT05FLCAgICAgICBnbC5PTkVfTUlOVVNfU1JDX0FMUEhBXTtcbiAgICBvYmplY3RbQ09OU1QuQkxFTkRfTU9ERVMuREFSS0VOXSAgICAgICAgPSBbZ2wuT05FLCAgICAgICBnbC5PTkVfTUlOVVNfU1JDX0FMUEhBXTtcbiAgICBvYmplY3RbQ09OU1QuQkxFTkRfTU9ERVMuTElHSFRFTl0gICAgICAgPSBbZ2wuT05FLCAgICAgICBnbC5PTkVfTUlOVVNfU1JDX0FMUEhBXTtcbiAgICBvYmplY3RbQ09OU1QuQkxFTkRfTU9ERVMuQ09MT1JfRE9ER0VdICAgPSBbZ2wuT05FLCAgICAgICBnbC5PTkVfTUlOVVNfU1JDX0FMUEhBXTtcbiAgICBvYmplY3RbQ09OU1QuQkxFTkRfTU9ERVMuQ09MT1JfQlVSTl0gICAgPSBbZ2wuT05FLCAgICAgICBnbC5PTkVfTUlOVVNfU1JDX0FMUEhBXTtcbiAgICBvYmplY3RbQ09OU1QuQkxFTkRfTU9ERVMuSEFSRF9MSUdIVF0gICAgPSBbZ2wuT05FLCAgICAgICBnbC5PTkVfTUlOVVNfU1JDX0FMUEhBXTtcbiAgICBvYmplY3RbQ09OU1QuQkxFTkRfTU9ERVMuU09GVF9MSUdIVF0gICAgPSBbZ2wuT05FLCAgICAgICBnbC5PTkVfTUlOVVNfU1JDX0FMUEhBXTtcbiAgICBvYmplY3RbQ09OU1QuQkxFTkRfTU9ERVMuRElGRkVSRU5DRV0gICAgPSBbZ2wuT05FLCAgICAgICBnbC5PTkVfTUlOVVNfU1JDX0FMUEhBXTtcbiAgICBvYmplY3RbQ09OU1QuQkxFTkRfTU9ERVMuRVhDTFVTSU9OXSAgICAgPSBbZ2wuT05FLCAgICAgICBnbC5PTkVfTUlOVVNfU1JDX0FMUEhBXTtcbiAgICBvYmplY3RbQ09OU1QuQkxFTkRfTU9ERVMuSFVFXSAgICAgICAgICAgPSBbZ2wuT05FLCAgICAgICBnbC5PTkVfTUlOVVNfU1JDX0FMUEhBXTtcbiAgICBvYmplY3RbQ09OU1QuQkxFTkRfTU9ERVMuU0FUVVJBVElPTl0gICAgPSBbZ2wuT05FLCAgICAgICBnbC5PTkVfTUlOVVNfU1JDX0FMUEhBXTtcbiAgICBvYmplY3RbQ09OU1QuQkxFTkRfTU9ERVMuQ09MT1JdICAgICAgICAgPSBbZ2wuT05FLCAgICAgICBnbC5PTkVfTUlOVVNfU1JDX0FMUEhBXTtcbiAgICBvYmplY3RbQ09OU1QuQkxFTkRfTU9ERVMuTFVNSU5PU0lUWV0gICAgPSBbZ2wuT05FLCAgICAgICBnbC5PTkVfTUlOVVNfU1JDX0FMUEhBXTtcblxuICAgIHJldHVybiBvYmplY3Q7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gbWFwV2ViR0xCbGVuZE1vZGVzVG9QaXhpO1xuIiwiQ09OU1QgPSByZXF1aXJlKCcuLi8uLi8uLi9jb25zdCcpO1xuXG4vKipcbiAqIEdlbmVyaWMgTWFzayBTdGFjayBkYXRhIHN0cnVjdHVyZVxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICovXG5mdW5jdGlvbiBtYXBXZWJHTERyYXdNb2Rlc1RvUGl4aShnbCwgb2JqZWN0KVxue1xuXHRvYmplY3Q9IG9iamVjdCB8fCB7fTtcblxuICAgIG9iamVjdFtDT05TVC5EUkFXX01PREVTLlBPSU5UU10gICAgICAgICA9IGdsLlBPSU5UUztcbiAgICBvYmplY3RbQ09OU1QuRFJBV19NT0RFUy5MSU5FU10gICAgICAgICAgPSBnbC5MSU5FUztcbiAgICBvYmplY3RbQ09OU1QuRFJBV19NT0RFUy5MSU5FX0xPT1BdICAgICAgPSBnbC5MSU5FX0xPT1A7XG4gICAgb2JqZWN0W0NPTlNULkRSQVdfTU9ERVMuTElORV9TVFJJUF0gICAgID0gZ2wuTElORV9TVFJJUDtcbiAgICBvYmplY3RbQ09OU1QuRFJBV19NT0RFUy5UUklBTkdMRVNdICAgICAgPSBnbC5UUklBTkdMRVM7XG4gICAgb2JqZWN0W0NPTlNULkRSQVdfTU9ERVMuVFJJQU5HTEVfU1RSSVBdID0gZ2wuVFJJQU5HTEVfU1RSSVA7XG4gICAgb2JqZWN0W0NPTlNULkRSQVdfTU9ERVMuVFJJQU5HTEVfRkFOXSAgID0gZ2wuVFJJQU5HTEVfRkFOO1xuXG59XG5cbm1vZHVsZS5leHBvcnRzID0gbWFwV2ViR0xEcmF3TW9kZXNUb1BpeGk7XG4iLCJ2YXIgbWF0aCA9IHJlcXVpcmUoJy4uL21hdGgnKSxcbiAgICBUZXh0dXJlID0gcmVxdWlyZSgnLi4vdGV4dHVyZXMvVGV4dHVyZScpLFxuICAgIENvbnRhaW5lciA9IHJlcXVpcmUoJy4uL2Rpc3BsYXkvQ29udGFpbmVyJyksXG4gICAgQ2FudmFzVGludGVyID0gcmVxdWlyZSgnLi4vcmVuZGVyZXJzL2NhbnZhcy91dGlscy9DYW52YXNUaW50ZXInKSxcbiAgICB1dGlscyA9IHJlcXVpcmUoJy4uL3V0aWxzJyksXG4gICAgQ09OU1QgPSByZXF1aXJlKCcuLi9jb25zdCcpLFxuICAgIHRlbXBQb2ludCA9IG5ldyBtYXRoLlBvaW50KCk7XG5cbi8qKlxuICogVGhlIFNwcml0ZSBvYmplY3QgaXMgdGhlIGJhc2UgZm9yIGFsbCB0ZXh0dXJlZCBvYmplY3RzIHRoYXQgYXJlIHJlbmRlcmVkIHRvIHRoZSBzY3JlZW5cbiAqXG4gKiBBIHNwcml0ZSBjYW4gYmUgY3JlYXRlZCBkaXJlY3RseSBmcm9tIGFuIGltYWdlIGxpa2UgdGhpczpcbiAqXG4gKiBgYGBqc1xuICogdmFyIHNwcml0ZSA9IG5ldyBQSVhJLlNwcml0ZS5mcm9tSW1hZ2UoJ2Fzc2V0cy9pbWFnZS5wbmcnKTtcbiAqIGBgYFxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5Db250YWluZXJcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gdGV4dHVyZSB7UElYSS5UZXh0dXJlfSBUaGUgdGV4dHVyZSBmb3IgdGhpcyBzcHJpdGVcbiAqL1xuZnVuY3Rpb24gU3ByaXRlKHRleHR1cmUpXG57XG4gICAgQ29udGFpbmVyLmNhbGwodGhpcyk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYW5jaG9yIHNldHMgdGhlIG9yaWdpbiBwb2ludCBvZiB0aGUgdGV4dHVyZS5cbiAgICAgKiBUaGUgZGVmYXVsdCBpcyAwLDAgdGhpcyBtZWFucyB0aGUgdGV4dHVyZSdzIG9yaWdpbiBpcyB0aGUgdG9wIGxlZnRcbiAgICAgKiBTZXR0aW5nIHRoZSBhbmNob3IgdG8gMC41LDAuNSBtZWFucyB0aGUgdGV4dHVyZSdzIG9yaWdpbiBpcyBjZW50ZXJlZFxuICAgICAqIFNldHRpbmcgdGhlIGFuY2hvciB0byAxLDEgd291bGQgbWVhbiB0aGUgdGV4dHVyZSdzIG9yaWdpbiBwb2ludCB3aWxsIGJlIHRoZSBib3R0b20gcmlnaHQgY29ybmVyXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlBvaW50fVxuICAgICAqL1xuICAgIHRoaXMuYW5jaG9yID0gbmV3IG1hdGguUG9pbnQoKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSB0ZXh0dXJlIHRoYXQgdGhlIHNwcml0ZSBpcyB1c2luZ1xuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5UZXh0dXJlfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fdGV4dHVyZSA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgd2lkdGggb2YgdGhlIHNwcml0ZSAodGhpcyBpcyBpbml0aWFsbHkgc2V0IGJ5IHRoZSB0ZXh0dXJlKVxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fd2lkdGggPSAwO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGhlaWdodCBvZiB0aGUgc3ByaXRlICh0aGlzIGlzIGluaXRpYWxseSBzZXQgYnkgdGhlIHRleHR1cmUpXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9oZWlnaHQgPSAwO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHRpbnQgYXBwbGllZCB0byB0aGUgc3ByaXRlLiBUaGlzIGlzIGEgaGV4IHZhbHVlLiBBIHZhbHVlIG9mIDB4RkZGRkZGIHdpbGwgcmVtb3ZlIGFueSB0aW50IGVmZmVjdC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAweEZGRkZGRlxuICAgICAqL1xuICAgIHRoaXMudGludCA9IDB4RkZGRkZGO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGJsZW5kIG1vZGUgdG8gYmUgYXBwbGllZCB0byB0aGUgc3ByaXRlLiBBcHBseSBhIHZhbHVlIG9mIGBQSVhJLkJMRU5EX01PREVTLk5PUk1BTGAgdG8gcmVzZXQgdGhlIGJsZW5kIG1vZGUuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgUElYSS5CTEVORF9NT0RFUy5OT1JNQUxcbiAgICAgKiBAc2VlIFBJWEkuQkxFTkRfTU9ERVNcbiAgICAgKi9cbiAgICB0aGlzLmJsZW5kTW9kZSA9IENPTlNULkJMRU5EX01PREVTLk5PUk1BTDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBzaGFkZXIgdGhhdCB3aWxsIGJlIHVzZWQgdG8gcmVuZGVyIHRoZSBzcHJpdGUuIFNldCB0byBudWxsIHRvIHJlbW92ZSBhIGN1cnJlbnQgc2hhZGVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5BYnN0cmFjdEZpbHRlcnxQSVhJLlNoYWRlcn1cbiAgICAgKi9cbiAgICB0aGlzLnNoYWRlciA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBBbiBpbnRlcm5hbCBjYWNoZWQgdmFsdWUgb2YgdGhlIHRpbnQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMHhGRkZGRkZcbiAgICAgKi9cbiAgICB0aGlzLmNhY2hlZFRpbnQgPSAweEZGRkZGRjtcblxuICAgIC8vIGNhbGwgdGV4dHVyZSBzZXR0ZXJcbiAgICB0aGlzLnRleHR1cmUgPSB0ZXh0dXJlIHx8IFRleHR1cmUuRU1QVFk7XG4gICAgdGhpcy50ZXh0dXJlRGlydHkgPSB0cnVlXG4gICAgdGhpcy52ZXJ0ZXhEaXJ0eSA9IHRydWU7XG4gICAgdGhpcy52ZXJ0ZXhEYXRhID0gbmV3IEZsb2F0MzJBcnJheSg4KTtcbn1cblxuLy8gY29uc3RydWN0b3JcblNwcml0ZS5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKENvbnRhaW5lci5wcm90b3R5cGUpO1xuU3ByaXRlLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFNwcml0ZTtcbm1vZHVsZS5leHBvcnRzID0gU3ByaXRlO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhTcHJpdGUucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogVGhlIHdpZHRoIG9mIHRoZSBzcHJpdGUsIHNldHRpbmcgdGhpcyB3aWxsIGFjdHVhbGx5IG1vZGlmeSB0aGUgc2NhbGUgdG8gYWNoaWV2ZSB0aGUgdmFsdWUgc2V0XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuU3ByaXRlI1xuICAgICAqL1xuICAgIHdpZHRoOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIE1hdGguYWJzKHRoaXMuc2NhbGUueCkgKiB0aGlzLnRleHR1cmUuX2ZyYW1lLndpZHRoO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdmFyIHNpZ24gPSB1dGlscy5zaWduKHRoaXMuc2NhbGUueCkgfHwgMTtcbiAgICAgICAgICAgIHRoaXMuc2NhbGUueCA9IHNpZ24gKiB2YWx1ZSAvIHRoaXMudGV4dHVyZS5fZnJhbWUud2lkdGg7XG4gICAgICAgICAgICB0aGlzLl93aWR0aCA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFRoZSBoZWlnaHQgb2YgdGhlIHNwcml0ZSwgc2V0dGluZyB0aGlzIHdpbGwgYWN0dWFsbHkgbW9kaWZ5IHRoZSBzY2FsZSB0byBhY2hpZXZlIHRoZSB2YWx1ZSBzZXRcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5TcHJpdGUjXG4gICAgICovXG4gICAgaGVpZ2h0OiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuICBNYXRoLmFicyh0aGlzLnNjYWxlLnkpICogdGhpcy50ZXh0dXJlLl9mcmFtZS5oZWlnaHQ7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB2YXIgc2lnbiA9IHV0aWxzLnNpZ24odGhpcy5zY2FsZS55KSB8fCAxO1xuICAgICAgICAgICAgdGhpcy5zY2FsZS55ID0gc2lnbiAqIHZhbHVlIC8gdGhpcy50ZXh0dXJlLl9mcmFtZS5oZWlnaHQ7XG4gICAgICAgICAgICB0aGlzLl9oZWlnaHQgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBUaGUgdGV4dHVyZSB0aGF0IHRoZSBzcHJpdGUgaXMgdXNpbmdcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuVGV4dHVyZX1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5TcHJpdGUjXG4gICAgICovXG4gICAgdGV4dHVyZToge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiAgdGhpcy5fdGV4dHVyZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGlmICh0aGlzLl90ZXh0dXJlID09PSB2YWx1ZSlcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuX3RleHR1cmUgPSB2YWx1ZTtcbiAgICAgICAgICAgIHRoaXMuY2FjaGVkVGludCA9IDB4RkZGRkZGO1xuXG4gICAgICAgICAgICB0aGlzLnRleHR1cmVEaXJ0eSA9IHRydWU7XG5cbiAgICAgICAgICAgIGlmICh2YWx1ZSlcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAvLyB3YWl0IGZvciB0aGUgdGV4dHVyZSB0byBsb2FkXG4gICAgICAgICAgICAgICAgaWYgKHZhbHVlLmJhc2VUZXh0dXJlLmhhc0xvYWRlZClcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX29uVGV4dHVyZVVwZGF0ZSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICB2YWx1ZS5vbmNlKCd1cGRhdGUnLCB0aGlzLl9vblRleHR1cmVVcGRhdGUsIHRoaXMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn0pO1xuXG4vKipcbiAqIFdoZW4gdGhlIHRleHR1cmUgaXMgdXBkYXRlZCwgdGhpcyBldmVudCB3aWxsIGZpcmUgdG8gdXBkYXRlIHRoZSBzY2FsZSBhbmQgZnJhbWVcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5TcHJpdGUucHJvdG90eXBlLl9vblRleHR1cmVVcGRhdGUgPSBmdW5jdGlvbiAoKVxue1xuICAgIHRoaXMudGV4dHVyZURpcnR5ID0gdHJ1ZTtcblxuICAgIC8vIHNvIGlmIF93aWR0aCBpcyAwIHRoZW4gd2lkdGggd2FzIG5vdCBzZXQuLlxuICAgIGlmICh0aGlzLl93aWR0aClcbiAgICB7XG4gICAgICAgIHRoaXMuc2NhbGUueCA9IHV0aWxzLnNpZ24odGhpcy5zY2FsZS54KSAqIHRoaXMuX3dpZHRoIC8gdGhpcy50ZXh0dXJlLmZyYW1lLndpZHRoO1xuICAgIH1cblxuICAgIGlmICh0aGlzLl9oZWlnaHQpXG4gICAge1xuICAgICAgICB0aGlzLnNjYWxlLnkgPSB1dGlscy5zaWduKHRoaXMuc2NhbGUueSkgKiB0aGlzLl9oZWlnaHQgLyB0aGlzLnRleHR1cmUuZnJhbWUuaGVpZ2h0O1xuICAgIH1cbn07XG5cblNwcml0ZS5wcm90b3R5cGUuY2FjbHVsYXRlVmVydGljZXMgPSBmdW5jdGlvbiAoKVxue1xuXG4gICAgdmFyIHRleHR1cmUgPSB0aGlzLl90ZXh0dXJlLFxuICAgICAgICB3dCA9IHRoaXMud29ybGRUcmFuc2Zvcm0sXG4gICAgICAgIGEgPSB3dC5hLCBiID0gd3QuYiwgYyA9IHd0LmMsIGQgPSB3dC5kLCB0eCA9IHd0LnR4LCB0eSA9IHd0LnR5LFxuICAgICAgICB2ZXJ0ZXhEYXRhID0gdGhpcy52ZXJ0ZXhEYXRhLFxuICAgICAgICB3MCwgdzEsIGgwLCBoMSxcbiAgICAgICAgdHJpbSA9IHRleHR1cmUudHJpbTtcbiAgICBcbiAgICBpZiAodHJpbSlcbiAgICB7XG4gICAgICAgIC8vIGlmIHRoZSBzcHJpdGUgaXMgdHJpbW1lZCBhbmQgaXMgbm90IGEgdGlsaW5nc3ByaXRlIHRoZW4gd2UgbmVlZCB0byBhZGQgdGhlIGV4dHJhIHNwYWNlIGJlZm9yZSB0cmFuc2Zvcm1pbmcgdGhlIHNwcml0ZSBjb29yZHMuLlxuICAgICAgICB3MSA9IHRyaW0ueCAtIHRoaXMuYW5jaG9yLnggKiB0cmltLndpZHRoO1xuICAgICAgICB3MCA9IHcxICsgdGV4dHVyZS5jcm9wLndpZHRoO1xuXG4gICAgICAgIGgxID0gdHJpbS55IC0gdGhpcy5hbmNob3IueSAqIHRyaW0uaGVpZ2h0O1xuICAgICAgICBoMCA9IGgxICsgdGV4dHVyZS5jcm9wLmhlaWdodDtcblxuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICB3MCA9ICh0ZXh0dXJlLl9mcmFtZS53aWR0aCApICogKDEtdGhpcy5hbmNob3IueCk7XG4gICAgICAgIHcxID0gKHRleHR1cmUuX2ZyYW1lLndpZHRoICkgKiAtdGhpcy5hbmNob3IueDtcblxuICAgICAgICBoMCA9IHRleHR1cmUuX2ZyYW1lLmhlaWdodCAqICgxLXRoaXMuYW5jaG9yLnkpO1xuICAgICAgICBoMSA9IHRleHR1cmUuX2ZyYW1lLmhlaWdodCAqIC10aGlzLmFuY2hvci55O1xuICAgIH1cblxuICAgIC8vIHh5XG4gICAgdmVydGV4RGF0YVswXSA9IGEgKiB3MSArIGMgKiBoMSArIHR4O1xuICAgIHZlcnRleERhdGFbMV0gPSBkICogaDEgKyBiICogdzEgKyB0eTtcblxuICAgIC8vIHh5XG4gICAgdmVydGV4RGF0YVsyXSA9IGEgKiB3MCArIGMgKiBoMSArIHR4O1xuICAgIHZlcnRleERhdGFbM10gPSBkICogaDEgKyBiICogdzAgKyB0eTtcblxuICAgICAvLyB4eVxuICAgIHZlcnRleERhdGFbNF0gPSBhICogdzAgKyBjICogaDAgKyB0eDtcbiAgICB2ZXJ0ZXhEYXRhWzVdID0gZCAqIGgwICsgYiAqIHcwICsgdHk7XG5cbiAgICAvLyB4eVxuICAgIHZlcnRleERhdGFbNl0gPSBhICogdzEgKyBjICogaDAgKyB0eDtcbiAgICB2ZXJ0ZXhEYXRhWzddID0gZCAqIGgwICsgYiAqIHcxICsgdHk7XG5cblxufVxuXG4vKipcbipcbiogUmVuZGVycyB0aGUgb2JqZWN0IHVzaW5nIHRoZSBXZWJHTCByZW5kZXJlclxuKlxuKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcn1cbiogQHByaXZhdGVcbiovXG5TcHJpdGUucHJvdG90eXBlLl9yZW5kZXJXZWJHTCA9IGZ1bmN0aW9uIChyZW5kZXJlcilcbntcbiAgICBpZih0aGlzLnRleHR1cmVEaXJ0eSlcbiAgICB7XG4gICAgICAgIHRoaXMudGV4dHVyZURpcnR5ID0gZmFsc2U7XG5cbiAgICAgICAgdGhpcy5fb25UZXh0dXJlVXBkYXRlKCk7XG4gICAgICAgIFxuICAgICAgICB0aGlzLnZlcnRleERpcnR5ID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBpZih0aGlzLnZlcnRleERpcnR5KVxuICAgIHtcbiAgICAgICAgdGhpcy52ZXJ0ZXhEaXJ0eSA9IGZhbHNlO1xuXG4gICAgICAgIC8vIHNldCB0aGUgdmVydGV4IGRhdGFcbiAgICAgICAgdGhpcy5jYWNsdWxhdGVWZXJ0aWNlcygpO1xuXG4gICAgfVxuICAgIFxuICAgIHJlbmRlcmVyLnNldE9iamVjdFJlbmRlcmVyKHJlbmRlcmVyLnBsdWdpbnMuc3ByaXRlKTtcbiAgICByZW5kZXJlci5wbHVnaW5zLnNwcml0ZS5yZW5kZXIodGhpcyk7XG59O1xuXG4vKipcbiAqIFJldHVybnMgdGhlIGJvdW5kcyBvZiB0aGUgU3ByaXRlIGFzIGEgcmVjdGFuZ2xlLiBUaGUgYm91bmRzIGNhbGN1bGF0aW9uIHRha2VzIHRoZSB3b3JsZFRyYW5zZm9ybSBpbnRvIGFjY291bnQuXG4gKlxuICogQHBhcmFtIG1hdHJpeCB7UElYSS5NYXRyaXh9IHRoZSB0cmFuc2Zvcm1hdGlvbiBtYXRyaXggb2YgdGhlIHNwcml0ZVxuICogQHJldHVybiB7UElYSS5SZWN0YW5nbGV9IHRoZSBmcmFtaW5nIHJlY3RhbmdsZVxuICovXG5TcHJpdGUucHJvdG90eXBlLmdldEJvdW5kcyA9IGZ1bmN0aW9uIChtYXRyaXgpXG57XG4gICAgaWYoIXRoaXMuX2N1cnJlbnRCb3VuZHMpXG4gICAge1xuICAgICAgICBpZih0aGlzLnZlcnRleERpcnR5KVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnZlcnRleERpcnR5ID0gZmFsc2U7XG5cbiAgICAgICAgICAgIC8vIHNldCB0aGUgdmVydGV4IGRhdGFcbiAgICAgICAgICAgIHRoaXMuY2FjbHVsYXRlVmVydGljZXMoKTtcblxuICAgICAgICB9XG5cbiAgICAgICAgdmFyIG1pblgsXG4gICAgICAgICAgICBtYXhYLFxuICAgICAgICAgICAgbWluWSxcbiAgICAgICAgICAgIG1heFksXG4gICAgICAgICAgICB2ZXJ0ZXhEYXRhID0gdGhpcy52ZXJ0ZXhEYXRhO1xuXG4gICAgICAgIHZhciB4MSA9IHZlcnRleERhdGFbMF1cbiAgICAgICAgdmFyIHkxID0gdmVydGV4RGF0YVsxXVxuXG4gICAgICAgIHZhciB4MiA9IHZlcnRleERhdGFbMl1cbiAgICAgICAgdmFyIHkyID0gdmVydGV4RGF0YVszXVxuXG4gICAgICAgIHZhciB4MyA9IHZlcnRleERhdGFbNF1cbiAgICAgICAgdmFyIHkzID0gdmVydGV4RGF0YVs1XVxuXG4gICAgICAgIHZhciB4NCA9IHZlcnRleERhdGFbNl1cbiAgICAgICAgdmFyIHk0ID0gdmVydGV4RGF0YVs3XVxuXG4gICAgICAgIG1pblggPSB4MTtcbiAgICAgICAgbWluWCA9IHgyIDwgbWluWCA/IHgyIDogbWluWDtcbiAgICAgICAgbWluWCA9IHgzIDwgbWluWCA/IHgzIDogbWluWDtcbiAgICAgICAgbWluWCA9IHg0IDwgbWluWCA/IHg0IDogbWluWDtcblxuICAgICAgICBtaW5ZID0geTE7XG4gICAgICAgIG1pblkgPSB5MiA8IG1pblkgPyB5MiA6IG1pblk7XG4gICAgICAgIG1pblkgPSB5MyA8IG1pblkgPyB5MyA6IG1pblk7XG4gICAgICAgIG1pblkgPSB5NCA8IG1pblkgPyB5NCA6IG1pblk7XG5cbiAgICAgICAgbWF4WCA9IHgxO1xuICAgICAgICBtYXhYID0geDIgPiBtYXhYID8geDIgOiBtYXhYO1xuICAgICAgICBtYXhYID0geDMgPiBtYXhYID8geDMgOiBtYXhYO1xuICAgICAgICBtYXhYID0geDQgPiBtYXhYID8geDQgOiBtYXhYO1xuXG4gICAgICAgIG1heFkgPSB5MTtcbiAgICAgICAgbWF4WSA9IHkyID4gbWF4WSA/IHkyIDogbWF4WTtcbiAgICAgICAgbWF4WSA9IHkzID4gbWF4WSA/IHkzIDogbWF4WTtcbiAgICAgICAgbWF4WSA9IHk0ID4gbWF4WSA/IHk0IDogbWF4WTtcblxuICAgICAgICAvLyBjaGVjayBmb3IgY2hpbGRyZW5cbiAgICAgICAgaWYodGhpcy5jaGlsZHJlbi5sZW5ndGgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHZhciBjaGlsZEJvdW5kcyA9IHRoaXMuY29udGFpbmVyR2V0Qm91bmRzKCk7XG5cbiAgICAgICAgICAgIHcwID0gY2hpbGRCb3VuZHMueDtcbiAgICAgICAgICAgIHcxID0gY2hpbGRCb3VuZHMueCArIGNoaWxkQm91bmRzLndpZHRoO1xuICAgICAgICAgICAgaDAgPSBjaGlsZEJvdW5kcy55O1xuICAgICAgICAgICAgaDEgPSBjaGlsZEJvdW5kcy55ICsgY2hpbGRCb3VuZHMuaGVpZ2h0O1xuXG4gICAgICAgICAgICBtaW5YID0gKG1pblggPCB3MCkgPyBtaW5YIDogdzA7XG4gICAgICAgICAgICBtaW5ZID0gKG1pblkgPCBoMCkgPyBtaW5ZIDogaDA7XG5cbiAgICAgICAgICAgIG1heFggPSAobWF4WCA+IHcxKSA/IG1heFggOiB3MTtcbiAgICAgICAgICAgIG1heFkgPSAobWF4WSA+IGgxKSA/IG1heFkgOiBoMTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBib3VuZHMgPSB0aGlzLl9ib3VuZHM7XG5cbiAgICAgICAgYm91bmRzLnggPSBtaW5YO1xuICAgICAgICBib3VuZHMud2lkdGggPSBtYXhYIC0gbWluWDtcblxuICAgICAgICBib3VuZHMueSA9IG1pblk7XG4gICAgICAgIGJvdW5kcy5oZWlnaHQgPSBtYXhZIC0gbWluWTtcblxuICAgICAgICAvLyBzdG9yZSBhIHJlZmVyZW5jZSBzbyB0aGF0IGlmIHRoaXMgZnVuY3Rpb24gZ2V0cyBjYWxsZWQgYWdhaW4gaW4gdGhlIHJlbmRlciBjeWNsZSB3ZSBkbyBub3QgaGF2ZSB0byByZWNhbGN1bGF0ZVxuICAgICAgICB0aGlzLl9jdXJyZW50Qm91bmRzID0gYm91bmRzO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLl9jdXJyZW50Qm91bmRzO1xufTtcblxuLyoqXG4gKiBHZXRzIHRoZSBsb2NhbCBib3VuZHMgb2YgdGhlIHNwcml0ZSBvYmplY3QuXG4gKlxuICovXG5TcHJpdGUucHJvdG90eXBlLmdldExvY2FsQm91bmRzID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLl9ib3VuZHMueCA9IC10aGlzLl90ZXh0dXJlLl9mcmFtZS53aWR0aCAqIHRoaXMuYW5jaG9yLng7XG4gICAgdGhpcy5fYm91bmRzLnkgPSAtdGhpcy5fdGV4dHVyZS5fZnJhbWUuaGVpZ2h0ICogdGhpcy5hbmNob3IueTtcbiAgICB0aGlzLl9ib3VuZHMud2lkdGggPSB0aGlzLl90ZXh0dXJlLl9mcmFtZS53aWR0aDtcbiAgICB0aGlzLl9ib3VuZHMuaGVpZ2h0ID0gdGhpcy5fdGV4dHVyZS5fZnJhbWUuaGVpZ2h0O1xuICAgIHJldHVybiB0aGlzLl9ib3VuZHM7XG59O1xuXG4vKipcbiogVGVzdHMgaWYgYSBwb2ludCBpcyBpbnNpZGUgdGhpcyBzcHJpdGVcbipcbiogQHBhcmFtIHBvaW50IHtQSVhJLlBvaW50fSB0aGUgcG9pbnQgdG8gdGVzdFxuKiBAcmV0dXJuIHtib29sZWFufSB0aGUgcmVzdWx0IG9mIHRoZSB0ZXN0XG4qL1xuU3ByaXRlLnByb3RvdHlwZS5jb250YWluc1BvaW50ID0gZnVuY3Rpb24oIHBvaW50IClcbntcbiAgICB0aGlzLndvcmxkVHJhbnNmb3JtLmFwcGx5SW52ZXJzZShwb2ludCwgIHRlbXBQb2ludCk7XG5cbiAgICB2YXIgd2lkdGggPSB0aGlzLl90ZXh0dXJlLl9mcmFtZS53aWR0aDtcbiAgICB2YXIgaGVpZ2h0ID0gdGhpcy5fdGV4dHVyZS5fZnJhbWUuaGVpZ2h0O1xuICAgIHZhciB4MSA9IC13aWR0aCAqIHRoaXMuYW5jaG9yLng7XG4gICAgdmFyIHkxO1xuXG4gICAgaWYgKCB0ZW1wUG9pbnQueCA+IHgxICYmIHRlbXBQb2ludC54IDwgeDEgKyB3aWR0aCApXG4gICAge1xuICAgICAgICB5MSA9IC1oZWlnaHQgKiB0aGlzLmFuY2hvci55O1xuXG4gICAgICAgIGlmICggdGVtcFBvaW50LnkgPiB5MSAmJiB0ZW1wUG9pbnQueSA8IHkxICsgaGVpZ2h0IClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2U7XG59O1xuXG4vKipcbiogUmVuZGVycyB0aGUgb2JqZWN0IHVzaW5nIHRoZSBDYW52YXMgcmVuZGVyZXJcbipcbiogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLkNhbnZhc1JlbmRlcmVyfSBUaGUgcmVuZGVyZXJcbiogQHByaXZhdGVcbiovXG5TcHJpdGUucHJvdG90eXBlLl9yZW5kZXJDYW52YXMgPSBmdW5jdGlvbiAocmVuZGVyZXIpXG57XG4gICAgaWYgKHRoaXMudGV4dHVyZS5jcm9wLndpZHRoIDw9IDAgfHwgdGhpcy50ZXh0dXJlLmNyb3AuaGVpZ2h0IDw9IDApXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFyIGNvbXBvc2l0ZU9wZXJhdGlvbiA9IHJlbmRlcmVyLmJsZW5kTW9kZXNbdGhpcy5ibGVuZE1vZGVdO1xuICAgIGlmIChjb21wb3NpdGVPcGVyYXRpb24gIT09IHJlbmRlcmVyLmNvbnRleHQuZ2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uKVxuICAgIHtcbiAgICAgICAgcmVuZGVyZXIuY29udGV4dC5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb24gPSBjb21wb3NpdGVPcGVyYXRpb247XG4gICAgfVxuXG4gICAgLy8gIElnbm9yZSBudWxsIHNvdXJjZXNcbiAgICBpZiAodGhpcy50ZXh0dXJlLnZhbGlkKVxuICAgIHtcbiAgICAgICAgdmFyIHRleHR1cmUgPSB0aGlzLl90ZXh0dXJlLFxuICAgICAgICAgICAgd3QgPSB0aGlzLndvcmxkVHJhbnNmb3JtLFxuICAgICAgICAgICAgZHgsXG4gICAgICAgICAgICBkeSxcbiAgICAgICAgICAgIHdpZHRoLFxuICAgICAgICAgICAgaGVpZ2h0O1xuXG4gICAgICAgIHJlbmRlcmVyLmNvbnRleHQuZ2xvYmFsQWxwaGEgPSB0aGlzLndvcmxkQWxwaGE7XG5cbiAgICAgICAgLy8gSWYgc21vb3RoaW5nRW5hYmxlZCBpcyBzdXBwb3J0ZWQgYW5kIHdlIG5lZWQgdG8gY2hhbmdlIHRoZSBzbW9vdGhpbmcgcHJvcGVydHkgZm9yIHRoaXMgdGV4dHVyZVxuICAgICAgICB2YXIgc21vb3RoaW5nRW5hYmxlZCA9IHRleHR1cmUuYmFzZVRleHR1cmUuc2NhbGVNb2RlID09PSBDT05TVC5TQ0FMRV9NT0RFUy5MSU5FQVI7XG4gICAgICAgIGlmIChyZW5kZXJlci5zbW9vdGhQcm9wZXJ0eSAmJiByZW5kZXJlci5jb250ZXh0W3JlbmRlcmVyLnNtb290aFByb3BlcnR5XSAhPT0gc21vb3RoaW5nRW5hYmxlZClcbiAgICAgICAge1xuICAgICAgICAgICAgcmVuZGVyZXIuY29udGV4dFtyZW5kZXJlci5zbW9vdGhQcm9wZXJ0eV0gPSBzbW9vdGhpbmdFbmFibGVkO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gSWYgdGhlIHRleHR1cmUgaXMgdHJpbW1lZCB3ZSBvZmZzZXQgYnkgdGhlIHRyaW0geC95LCBvdGhlcndpc2Ugd2UgdXNlIHRoZSBmcmFtZSBkaW1lbnNpb25zXG5cbiAgICAgICAgaWYodGV4dHVyZS5yb3RhdGUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHdpZHRoID0gdGV4dHVyZS5jcm9wLmhlaWdodDtcbiAgICAgICAgICAgIGhlaWdodCA9IHRleHR1cmUuY3JvcC53aWR0aDtcblxuICAgICAgICAgICAgZHggPSAodGV4dHVyZS50cmltKSA/IHRleHR1cmUudHJpbS55IC0gdGhpcy5hbmNob3IueSAqIHRleHR1cmUudHJpbS5oZWlnaHQgOiB0aGlzLmFuY2hvci55ICogLXRleHR1cmUuX2ZyYW1lLmhlaWdodDtcbiAgICAgICAgICAgIGR5ID0gKHRleHR1cmUudHJpbSkgPyB0ZXh0dXJlLnRyaW0ueCAtIHRoaXMuYW5jaG9yLnggKiB0ZXh0dXJlLnRyaW0ud2lkdGggOiB0aGlzLmFuY2hvci54ICogLXRleHR1cmUuX2ZyYW1lLndpZHRoO1xuICAgICAgIFxuICAgICAgICAgICAgZHggKz0gd2lkdGg7XG5cbiAgICAgICAgICAgIHd0LnR4ID0gZHkgKiB3dC5hICsgZHggKiB3dC5jICsgd3QudHg7XG4gICAgICAgICAgICB3dC50eSA9IGR5ICogd3QuYiArIGR4ICogd3QuZCArIHd0LnR5O1xuXG4gICAgICAgICAgICB2YXIgdGVtcCA9IHd0LmE7XG4gICAgICAgICAgICB3dC5hICA9IC13dC5jO1xuICAgICAgICAgICAgd3QuYyAgPSAgdGVtcDtcblxuICAgICAgICAgICAgdGVtcCA9IHd0LmI7XG4gICAgICAgICAgICB3dC5iICA9IC13dC5kO1xuICAgICAgICAgICAgd3QuZCAgPSAgdGVtcDtcblxuICAgICAgICAgICAgLy8gdGhlIGFuY2hvciBoYXMgYWxyZWFkeSBiZWVuIGFwcGxpZWQgYWJvdmUsIHNvIGxldHMgc2V0IGl0IHRvIHplcm9cbiAgICAgICAgICAgIGR4ID0gMDtcbiAgICAgICAgICAgIGR5ID0gMDtcblxuICAgICAgICB9XG4gICAgICAgIGVsc2VcbiAgICAgICAge1xuICAgICAgICAgICAgd2lkdGggPSB0ZXh0dXJlLmNyb3Aud2lkdGg7XG4gICAgICAgICAgICBoZWlnaHQgPSB0ZXh0dXJlLmNyb3AuaGVpZ2h0O1xuXG4gICAgICAgICAgICBkeCA9ICh0ZXh0dXJlLnRyaW0pID8gdGV4dHVyZS50cmltLnggLSB0aGlzLmFuY2hvci54ICogdGV4dHVyZS50cmltLndpZHRoIDogdGhpcy5hbmNob3IueCAqIC10ZXh0dXJlLl9mcmFtZS53aWR0aDtcbiAgICAgICAgICAgIGR5ID0gKHRleHR1cmUudHJpbSkgPyB0ZXh0dXJlLnRyaW0ueSAtIHRoaXMuYW5jaG9yLnkgKiB0ZXh0dXJlLnRyaW0uaGVpZ2h0IDogdGhpcy5hbmNob3IueSAqIC10ZXh0dXJlLl9mcmFtZS5oZWlnaHQ7XG4gICAgICAgIH1cblxuXG5cbiAgICAgICAgLy8gQWxsb3cgZm9yIHBpeGVsIHJvdW5kaW5nXG4gICAgICAgIGlmIChyZW5kZXJlci5yb3VuZFBpeGVscylcbiAgICAgICAge1xuICAgICAgICAgICAgcmVuZGVyZXIuY29udGV4dC5zZXRUcmFuc2Zvcm0oXG4gICAgICAgICAgICAgICAgd3QuYSxcbiAgICAgICAgICAgICAgICB3dC5iLFxuICAgICAgICAgICAgICAgIHd0LmMsXG4gICAgICAgICAgICAgICAgd3QuZCxcbiAgICAgICAgICAgICAgICAod3QudHggKiByZW5kZXJlci5yZXNvbHV0aW9uKSB8IDAsXG4gICAgICAgICAgICAgICAgKHd0LnR5ICogcmVuZGVyZXIucmVzb2x1dGlvbikgfCAwXG4gICAgICAgICAgICApO1xuXG4gICAgICAgICAgICBkeCA9IGR4IHwgMDtcbiAgICAgICAgICAgIGR5ID0gZHkgfCAwO1xuICAgICAgICB9XG4gICAgICAgIGVsc2VcbiAgICAgICAge1xuXG4gICAgICAgICAgICByZW5kZXJlci5jb250ZXh0LnNldFRyYW5zZm9ybShcbiAgICAgICAgICAgICAgICB3dC5hLFxuICAgICAgICAgICAgICAgIHd0LmIsXG4gICAgICAgICAgICAgICAgd3QuYyxcbiAgICAgICAgICAgICAgICB3dC5kLFxuICAgICAgICAgICAgICAgIHd0LnR4ICogcmVuZGVyZXIucmVzb2x1dGlvbixcbiAgICAgICAgICAgICAgICB3dC50eSAqIHJlbmRlcmVyLnJlc29sdXRpb25cbiAgICAgICAgICAgICk7XG5cblxuICAgICAgICB9XG5cbiAgICAgICAgdmFyIHJlc29sdXRpb24gPSB0ZXh0dXJlLmJhc2VUZXh0dXJlLnJlc29sdXRpb247XG5cbiAgICAgICAgaWYgKHRoaXMudGludCAhPT0gMHhGRkZGRkYpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmNhY2hlZFRpbnQgIT09IHRoaXMudGludClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB0aGlzLmNhY2hlZFRpbnQgPSB0aGlzLnRpbnQ7XG5cbiAgICAgICAgICAgICAgICAvLyBUT0RPIGNsZWFuIHVwIGNhY2hpbmcgLSBob3cgdG8gY2xlYW4gdXAgdGhlIGNhY2hlcz9cbiAgICAgICAgICAgICAgICB0aGlzLnRpbnRlZFRleHR1cmUgPSBDYW52YXNUaW50ZXIuZ2V0VGludGVkVGV4dHVyZSh0aGlzLCB0aGlzLnRpbnQpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZW5kZXJlci5jb250ZXh0LmRyYXdJbWFnZShcbiAgICAgICAgICAgICAgICB0aGlzLnRpbnRlZFRleHR1cmUsXG4gICAgICAgICAgICAgICAgMCxcbiAgICAgICAgICAgICAgICAwLFxuICAgICAgICAgICAgICAgIHdpZHRoICogcmVzb2x1dGlvbixcbiAgICAgICAgICAgICAgICBoZWlnaHQgKiByZXNvbHV0aW9uLFxuICAgICAgICAgICAgICAgIGR4ICogcmVuZGVyZXIucmVzb2x1dGlvbixcbiAgICAgICAgICAgICAgICBkeSAqIHJlbmRlcmVyLnJlc29sdXRpb24sXG4gICAgICAgICAgICAgICAgd2lkdGggKiByZW5kZXJlci5yZXNvbHV0aW9uLFxuICAgICAgICAgICAgICAgIGhlaWdodCAqIHJlbmRlcmVyLnJlc29sdXRpb25cbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgICByZW5kZXJlci5jb250ZXh0LmRyYXdJbWFnZShcbiAgICAgICAgICAgICAgICB0ZXh0dXJlLmJhc2VUZXh0dXJlLnNvdXJjZSxcbiAgICAgICAgICAgICAgICB0ZXh0dXJlLmNyb3AueCAqIHJlc29sdXRpb24sXG4gICAgICAgICAgICAgICAgdGV4dHVyZS5jcm9wLnkgKiByZXNvbHV0aW9uLFxuICAgICAgICAgICAgICAgIHdpZHRoICogcmVzb2x1dGlvbixcbiAgICAgICAgICAgICAgICBoZWlnaHQgKiByZXNvbHV0aW9uLFxuICAgICAgICAgICAgICAgIGR4ICAqIHJlbmRlcmVyLnJlc29sdXRpb24sXG4gICAgICAgICAgICAgICAgZHkgICogcmVuZGVyZXIucmVzb2x1dGlvbixcbiAgICAgICAgICAgICAgICB3aWR0aCAqIHJlbmRlcmVyLnJlc29sdXRpb24sXG4gICAgICAgICAgICAgICAgaGVpZ2h0ICogcmVuZGVyZXIucmVzb2x1dGlvblxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgIH1cbn07XG5cbi8qKlxuICogRGVzdHJveXMgdGhpcyBzcHJpdGUgYW5kIG9wdGlvbmFsbHkgaXRzIHRleHR1cmVcbiAqXG4gKiBAcGFyYW0gW2Rlc3Ryb3lUZXh0dXJlPWZhbHNlXSB7Ym9vbGVhbn0gU2hvdWxkIGl0IGRlc3Ryb3kgdGhlIGN1cnJlbnQgdGV4dHVyZSBvZiB0aGUgc3ByaXRlIGFzIHdlbGxcbiAqIEBwYXJhbSBbZGVzdHJveUJhc2VUZXh0dXJlPWZhbHNlXSB7Ym9vbGVhbn0gU2hvdWxkIGl0IGRlc3Ryb3kgdGhlIGJhc2UgdGV4dHVyZSBvZiB0aGUgc3ByaXRlIGFzIHdlbGxcbiAqL1xuU3ByaXRlLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKGRlc3Ryb3lUZXh0dXJlLCBkZXN0cm95QmFzZVRleHR1cmUpXG57XG4gICAgQ29udGFpbmVyLnByb3RvdHlwZS5kZXN0cm95LmNhbGwodGhpcyk7XG5cbiAgICB0aGlzLmFuY2hvciA9IG51bGw7XG5cbiAgICBpZiAoZGVzdHJveVRleHR1cmUpXG4gICAge1xuICAgICAgICB0aGlzLl90ZXh0dXJlLmRlc3Ryb3koZGVzdHJveUJhc2VUZXh0dXJlKTtcbiAgICB9XG5cbiAgICB0aGlzLl90ZXh0dXJlID0gbnVsbDtcbiAgICB0aGlzLnNoYWRlciA9IG51bGw7XG59O1xuXG4vLyBzb21lIGhlbHBlciBmdW5jdGlvbnMuLlxuXG4vKipcbiAqIEhlbHBlciBmdW5jdGlvbiB0aGF0IGNyZWF0ZXMgYSBzcHJpdGUgdGhhdCB3aWxsIGNvbnRhaW4gYSB0ZXh0dXJlIGZyb20gdGhlIFRleHR1cmVDYWNoZSBiYXNlZCBvbiB0aGUgZnJhbWVJZFxuICogVGhlIGZyYW1lIGlkcyBhcmUgY3JlYXRlZCB3aGVuIGEgVGV4dHVyZSBwYWNrZXIgZmlsZSBoYXMgYmVlbiBsb2FkZWRcbiAqXG4gKiBAc3RhdGljXG4gKiBAcGFyYW0gZnJhbWVJZCB7c3RyaW5nfSBUaGUgZnJhbWUgSWQgb2YgdGhlIHRleHR1cmUgaW4gdGhlIGNhY2hlXG4gKiBAcGFyYW0gW2Nyb3Nzb3JpZ2luPShhdXRvKV0ge2Jvb2xlYW59IGlmIHlvdSB3YW50IHRvIHNwZWNpZnkgdGhlIGNyb3NzLW9yaWdpbiBwYXJhbWV0ZXJcbiAqIEBwYXJhbSBbc2NhbGVNb2RlPVBJWEkuU0NBTEVfTU9ERVMuREVGQVVMVF0ge251bWJlcn0gaWYgeW91IHdhbnQgdG8gc3BlY2lmeSB0aGUgc2NhbGUgbW9kZSwgc2VlIHtAbGluayBQSVhJLlNDQUxFX01PREVTfSBmb3IgcG9zc2libGUgdmFsdWVzXG4gKiBAcmV0dXJuIHtQSVhJLlNwcml0ZX0gQSBuZXcgU3ByaXRlIHVzaW5nIGEgdGV4dHVyZSBmcm9tIHRoZSB0ZXh0dXJlIGNhY2hlIG1hdGNoaW5nIHRoZSBmcmFtZUlkXG4gKi9cblNwcml0ZS5mcm9tRnJhbWUgPSBmdW5jdGlvbiAoZnJhbWVJZClcbntcbiAgICB2YXIgdGV4dHVyZSA9IHV0aWxzLlRleHR1cmVDYWNoZVtmcmFtZUlkXTtcblxuICAgIGlmICghdGV4dHVyZSlcbiAgICB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignVGhlIGZyYW1lSWQgXCInICsgZnJhbWVJZCArICdcIiBkb2VzIG5vdCBleGlzdCBpbiB0aGUgdGV4dHVyZSBjYWNoZScpO1xuICAgIH1cblxuICAgIHJldHVybiBuZXcgU3ByaXRlKHRleHR1cmUpO1xufTtcblxuLyoqXG4gKiBIZWxwZXIgZnVuY3Rpb24gdGhhdCBjcmVhdGVzIGEgc3ByaXRlIHRoYXQgd2lsbCBjb250YWluIGEgdGV4dHVyZSBiYXNlZCBvbiBhbiBpbWFnZSB1cmxcbiAqIElmIHRoZSBpbWFnZSBpcyBub3QgaW4gdGhlIHRleHR1cmUgY2FjaGUgaXQgd2lsbCBiZSBsb2FkZWRcbiAqXG4gKiBAc3RhdGljXG4gKiBAcGFyYW0gaW1hZ2VJZCB7c3RyaW5nfSBUaGUgaW1hZ2UgdXJsIG9mIHRoZSB0ZXh0dXJlXG4gKiBAcmV0dXJuIHtQSVhJLlNwcml0ZX0gQSBuZXcgU3ByaXRlIHVzaW5nIGEgdGV4dHVyZSBmcm9tIHRoZSB0ZXh0dXJlIGNhY2hlIG1hdGNoaW5nIHRoZSBpbWFnZSBpZFxuICovXG5TcHJpdGUuZnJvbUltYWdlID0gZnVuY3Rpb24gKGltYWdlSWQsIGNyb3Nzb3JpZ2luLCBzY2FsZU1vZGUpXG57XG4gICAgcmV0dXJuIG5ldyBTcHJpdGUoVGV4dHVyZS5mcm9tSW1hZ2UoaW1hZ2VJZCwgY3Jvc3NvcmlnaW4sIHNjYWxlTW9kZSkpO1xufTtcbiIsInZhciBPYmplY3RSZW5kZXJlciA9IHJlcXVpcmUoJy4uLy4uL3JlbmRlcmVycy93ZWJnbC91dGlscy9PYmplY3RSZW5kZXJlcicpLFxuICAgIFdlYkdMUmVuZGVyZXIgPSByZXF1aXJlKCcuLi8uLi9yZW5kZXJlcnMvd2ViZ2wvV2ViR0xSZW5kZXJlcicpLFxuICAgIFRleHR1cmVTaGFkZXIgPSByZXF1aXJlKCcuLi8uLi9yZW5kZXJlcnMvd2ViZ2wvc2hhZGVycy9fVGV4dHVyZVNoYWRlcicpLFxuICAgIGNyZWF0ZUluZGljZXNGb3JRdWFkcyA9IHJlcXVpcmUoJy4uLy4uL3V0aWxzL2NyZWF0ZUluZGljZXNGb3JRdWFkcycpLFxuICAgIGdlbmVyYXRlTXVsdGlUZXh0dXJlU2hhZGVyID0gcmVxdWlyZSgnLi9nZW5lcmF0ZU11bHRpVGV4dHVyZVNoYWRlcicpLFxuICAgIENPTlNUID0gcmVxdWlyZSgnLi4vLi4vY29uc3QnKSxcbiAgICBnbENvcmUgPSByZXF1aXJlKCdwaXhpLWdsLWNvcmUnKTtcblxuLyoqXG4gKiBAYXV0aG9yIE1hdCBHcm92ZXNcbiAqXG4gKiBCaWcgdGhhbmtzIHRvIHRoZSB2ZXJ5IGNsZXZlciBNYXR0IERlc0xhdXJpZXJzIDxtYXR0ZGVzbD4gaHR0cHM6Ly9naXRodWIuY29tL21hdHRkZXNsL1xuICogZm9yIGNyZWF0aW5nIHRoZSBvcmlnaW5hbCBwaXhpIHZlcnNpb24hXG4gKiBBbHNvIGEgdGhhbmtzIHRvIGh0dHBzOi8vZ2l0aHViLmNvbS9iY2hldmFsaWVyIGZvciB0d2Vha2luZyB0aGUgdGludCBhbmQgYWxwaGEgc28gdGhhdCB0aGV5IG5vdyBzaGFyZSA0IGJ5dGVzIG9uIHRoZSB2ZXJ0ZXggYnVmZmVyXG4gKlxuICogSGVhdmlseSBpbnNwaXJlZCBieSBMaWJHRFgncyBTcHJpdGVSZW5kZXJlcjpcbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS9saWJnZHgvbGliZ2R4L2Jsb2IvbWFzdGVyL2dkeC9zcmMvY29tL2JhZGxvZ2ljL2dkeC9ncmFwaGljcy9nMmQvU3ByaXRlUmVuZGVyZXIuamF2YVxuICovXG5cbi8qKlxuICogUmVuZGVyZXIgZGVkaWNhdGVkIHRvIGRyYXdpbmcgYW5kIGJhdGNoaW5nIHNwcml0ZXMuXG4gKlxuICogQGNsYXNzXG4gKiBAcHJpdmF0ZVxuICogQG1lbWJlcm9mIFBJWElcbiAqIEBleHRlbmRzIFBJWEkuT2JqZWN0UmVuZGVyZXJcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5XZWJHTFJlbmRlcmVyfSBUaGUgcmVuZGVyZXIgdGhpcyBzcHJpdGUgYmF0Y2ggd29ya3MgZm9yLlxuICovXG5mdW5jdGlvbiBTcHJpdGVSZW5kZXJlcihyZW5kZXJlcilcbntcbiAgICBPYmplY3RSZW5kZXJlci5jYWxsKHRoaXMsIHJlbmRlcmVyKTtcblxuICAgIC8qKlxuICAgICAqIE51bWJlciBvZiB2YWx1ZXMgc2VudCBpbiB0aGUgdmVydGV4IGJ1ZmZlci5cbiAgICAgKiBwb3NpdGlvblgsIHBvc2l0aW9uWSwgY29sb3JSLCBjb2xvckcsIGNvbG9yQiA9IDVcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLnZlcnRTaXplID0gNTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBzaXplIG9mIHRoZSB2ZXJ0ZXggaW5mb3JtYXRpb24gaW4gYnl0ZXMuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy52ZXJ0Qnl0ZVNpemUgPSB0aGlzLnZlcnRTaXplICogNDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBudW1iZXIgb2YgaW1hZ2VzIGluIHRoZSBTcHJpdGVCYXRjaCBiZWZvcmUgaXQgZmx1c2hlcy5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLnNpemUgPSBDT05TVC5TUFJJVEVfQkFUQ0hfU0laRTsgLy8gMjAwMCBpcyBhIG5pY2UgYmFsYW5jZSBiZXR3ZWVuIG1vYmlsZSAvIGRlc2t0b3BcblxuICAgIC8vIHRoZSB0b3RhbCBudW1iZXIgb2YgYnl0ZXMgaW4gb3VyIGJhdGNoXG4gICAgdmFyIG51bVZlcnRzID0gKHRoaXMuc2l6ZSAqIDQpICogdGhpcy52ZXJ0Qnl0ZVNpemU7XG5cbiAgICAvLyB0aGUgdG90YWwgbnVtYmVyIG9mIGluZGljZXMgaW4gb3VyIGJhdGNoLCB0aGVyZSBhcmUgNiBwb2ludHMgcGVyIHF1YWQuXG4gICAgdmFyIG51bUluZGljZXMgPSB0aGlzLnNpemUgKiA2O1xuXG4gICAgLyoqXG4gICAgICogSG9sZHMgdGhlIHZlcnRleCBkYXRhIHRoYXQgd2lsbCBiZSBzZW50IHRvIHRoZSB2ZXJ0ZXggc2hhZGVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7QXJyYXlCdWZmZXJ9XG4gICAgICovXG4gICAgdGhpcy52ZXJ0aWNlcyA9IG5ldyBBcnJheUJ1ZmZlcihudW1WZXJ0cyk7XG5cbiAgICAvKipcbiAgICAgKiBWaWV3IG9uIHRoZSB2ZXJ0aWNlcyBhcyBhIEZsb2F0MzJBcnJheSBmb3IgcG9zaXRpb25zXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtGbG9hdDMyQXJyYXl9XG4gICAgICovXG4gICAgdGhpcy5wb3NpdGlvbnMgPSBuZXcgRmxvYXQzMkFycmF5KHRoaXMudmVydGljZXMpO1xuICAgIFxuICAgIC8qKlxuICAgICAqIFZpZXcgb24gdGhlIHZlcnRpY2VzIGFzIGEgVWludDMyQXJyYXkgZm9yIHV2c1xuICAgICAqXG4gICAgICogQG1lbWJlciB7RmxvYXQzMkFycmF5fVxuICAgICAqL1xuICAgIHRoaXMudXZzID0gbmV3IFVpbnQzMkFycmF5KHRoaXMudmVydGljZXMpO1xuXG4gICAgLyoqXG4gICAgICogVmlldyBvbiB0aGUgdmVydGljZXMgYXMgYSBVaW50MzJBcnJheSBmb3IgY29sb3JzXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtVaW50MzJBcnJheX1cbiAgICAgKi9cbiAgICB0aGlzLmNvbG9ycyA9IG5ldyBVaW50MzJBcnJheSh0aGlzLnZlcnRpY2VzKTtcblxuICAgIC8qKlxuICAgICAqIEhvbGRzIHRoZSBpbmRpY2VzIG9mIHRoZSBnZW9tZXRyeSAocXVhZHMpIHRvIGRyYXdcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1VpbnQxNkFycmF5fVxuICAgICAqL1xuICAgIHRoaXMuaW5kaWNlcyA9IGNyZWF0ZUluZGljZXNGb3JRdWFkcyh0aGlzLnNpemUpXG5cbiAgICAvKipcbiAgICAgKiBUaGUgZGVmYXVsdCBzaGFkZXIgdGhhdCBpcyB1c2VkIGlmIGEgc3ByaXRlIGRvZXNuJ3QgaGF2ZSBhIG1vcmUgc3BlY2lmaWMgb25lLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5TaGFkZXJ9XG4gICAgICovXG4gICAgdGhpcy5zaGFkZXIgPSBudWxsO1xuXG4gICAgdGhpcy50ZXh0dXJlQ291bnQgPSAwO1xuICAgIHRoaXMuY3VycmVudEluZGV4ID0gMDtcbiAgXG4gICAgdGhpcy5ncm91cENvdW50ID0gMDtcbiAgICB0aGlzLmdyb3VwcyA9IFtdO1xuICAgIFxuICAgIC8vVE9ETyAtIDMwMCBpcyBhIGJpdCBtYWdpYywgZmlndXJlIG91dCBhIG5pY2VyIGFtb3VudCFcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuc2l6ZTsgaSsrKSBcbiAgICB7XG4gICAgICAgIHRoaXMuZ3JvdXBzW2ldID0ge3RleHR1cmVzOltdLCB0ZXh0dXJlQ291bnQ6MCwgaWRzOltdLCBzaXplOjAsIHN0YXJ0OjAsIGJsZW5kOjB9OyBcbiAgICB9O1xuICAgIFxuICAgIHRoaXMuY3VycmVudEdyb3VwID0gdGhpcy5ncm91cHNbdGhpcy5ncm91cENvdW50KytdO1xuXG4gICAgdGhpcy5jdXJyZW50VGV4dHVyZSA9IG51bGw7ICAgIFxufVxuXG5cblNwcml0ZVJlbmRlcmVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoT2JqZWN0UmVuZGVyZXIucHJvdG90eXBlKTtcblNwcml0ZVJlbmRlcmVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFNwcml0ZVJlbmRlcmVyO1xubW9kdWxlLmV4cG9ydHMgPSBTcHJpdGVSZW5kZXJlcjtcblxuV2ViR0xSZW5kZXJlci5yZWdpc3RlclBsdWdpbignc3ByaXRlJywgU3ByaXRlUmVuZGVyZXIpO1xuXG4vKipcbiAqIFNldHMgdXAgdGhlIHJlbmRlcmVyIGNvbnRleHQgYW5kIG5lY2Vzc2FyeSBidWZmZXJzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0gZ2wge1dlYkdMUmVuZGVyaW5nQ29udGV4dH0gdGhlIGN1cnJlbnQgV2ViR0wgZHJhd2luZyBjb250ZXh0XG4gKi9cblNwcml0ZVJlbmRlcmVyLnByb3RvdHlwZS5vbkNvbnRleHRDaGFuZ2UgPSBmdW5jdGlvbiAoKVxue1xuICAgIHZhciBnbCA9IHRoaXMucmVuZGVyZXIuZ2w7XG5cbiAgICB0aGlzLk1BWF9URVhUVUVTID0gZ2wuZ2V0UGFyYW1ldGVyKGdsLk1BWF9URVhUVVJFX0lNQUdFX1VOSVRTKTtcblxuICAgIHRoaXMuX3NoYWRlciA9IGdlbmVyYXRlTXVsdGlUZXh0dXJlU2hhZGVyKGdsLCB0aGlzLk1BWF9URVhUVUVTKS8vbmV3IFRleHR1cmVTaGFkZXIoZ2wpO1xuXG4gICAgLy8gc2V0dXAgZGVmYXVsdCBzaGFkZXJcbiAgICB0aGlzLnNoYWRlciA9IHRoaXMucmVuZGVyZXIuc2hhZGVyTWFuYWdlci5kZWZhdWx0U2hhZGVyO1xuXG4gICAgLy8gY3JlYXRlIGEgY291cGxlIG9mIGJ1ZmZlcnNcbiAgICB0aGlzLnZlcnRleEJ1ZmZlciA9IGdsQ29yZS5HTEJ1ZmZlci5jcmVhdGVWZXJ0ZXhCdWZmZXIoZ2wsIG51bGwsIGdsLkRZTkFNSUNfRFJBVyk7XG4gICAgdGhpcy5pbmRleEJ1ZmZlciA9IGdsQ29yZS5HTEJ1ZmZlci5jcmVhdGVJbmRleEJ1ZmZlcihnbCwgdGhpcy5pbmRpY2VzLCBnbC5TVEFUSUNfRFJBVyk7XG5cbiAgICAvLyBidWlsZCB0aGUgdmFvIG9iamVjdCB0aGF0IHdpbGwgcmVuZGVyLi5cbiAgICB0aGlzLnZhbyA9IG5ldyBnbENvcmUuVmVydGV4QXJyYXlPYmplY3QoZ2wpO1xuXG4gICAgdGhpcy52YW8uYWRkSW5kZXgodGhpcy5pbmRleEJ1ZmZlcik7XG4gICAgdGhpcy52YW8uYWRkQXR0cmlidXRlKHRoaXMudmVydGV4QnVmZmVyLCB0aGlzLl9zaGFkZXIuYXR0cmlidXRlcy5hVmVydGV4UG9zaXRpb24sIGdsLkZMT0FULCBmYWxzZSwgdGhpcy52ZXJ0Qnl0ZVNpemUsIDApO1xuICAgIHRoaXMudmFvLmFkZEF0dHJpYnV0ZSh0aGlzLnZlcnRleEJ1ZmZlciwgdGhpcy5fc2hhZGVyLmF0dHJpYnV0ZXMuYVRleHR1cmVDb29yZCwgZ2wuVU5TSUdORURfU0hPUlQsIHRydWUsIHRoaXMudmVydEJ5dGVTaXplLCAyICogNCk7XG4gICAgdGhpcy52YW8uYWRkQXR0cmlidXRlKHRoaXMudmVydGV4QnVmZmVyLCB0aGlzLl9zaGFkZXIuYXR0cmlidXRlcy5hQ29sb3IsIGdsLlVOU0lHTkVEX0JZVEUsIHRydWUsIHRoaXMudmVydEJ5dGVTaXplLCAzICogNCk7XG4gICAgdGhpcy52YW8uYWRkQXR0cmlidXRlKHRoaXMudmVydGV4QnVmZmVyLCB0aGlzLl9zaGFkZXIuYXR0cmlidXRlcy5hVGV4dHVyZUlkLCBnbC5GTE9BVCwgZmFsc2UsIHRoaXMudmVydEJ5dGVTaXplLCA0ICogNCk7XG5cbiAgICB0aGlzLmN1cnJlbnRCbGVuZE1vZGUgPSA5OTk5OTtcbn07XG5cbi8qKlxuICogUmVuZGVycyB0aGUgc3ByaXRlIG9iamVjdC5cbiAqXG4gKiBAcGFyYW0gc3ByaXRlIHtQSVhJLlNwcml0ZX0gdGhlIHNwcml0ZSB0byByZW5kZXIgd2hlbiB1c2luZyB0aGlzIHNwcml0ZWJhdGNoXG4gKi9cblNwcml0ZVJlbmRlcmVyLnByb3RvdHlwZS5yZW5kZXIgPSBmdW5jdGlvbiAoc3ByaXRlKVxue1xuICAgIC8vVE9ETyBzZXQgYmxlbmQgbW9kZXMuLlxuICAgIC8vIGNoZWNrIHRleHR1cmUuLlxuICAgIGlmICh0aGlzLmN1cnJlbnRJbmRleCA+PSB0aGlzLnNpemUpXG4gICAge1xuICAgICAgICB0aGlzLmZsdXNoKCk7XG4gICAgfVxuXG4gIFxuICAgIC8vIGdldCB0aGUgdXZzIGZvciB0aGUgdGV4dHVyZVxuICAgXG5cbiAgICAvLyBpZiB0aGUgdXZzIGhhdmUgbm90IHVwZGF0ZWQgdGhlbiBubyBwb2ludCByZW5kZXJpbmcganVzdCB5ZXQhXG4gICAgaWYgKCFzcHJpdGUudGV4dHVyZS5fdXZzKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgICAvLyBwdXNoIGEgdGV4dHVyZS5cbiAgICAvLyBpbmNyZW1lbnQgdGhlIGJhdGNoc2l6ZVxuICAgIHZhciBuZXh0VGV4dHVyZSA9ICBzcHJpdGUudGV4dHVyZS5iYXNlVGV4dHVyZTtcbiAgICB2YXIgY3VycmVudEdyb3VwID0gdGhpcy5jdXJyZW50R3JvdXA7XG4gICAgdmFyIGk7XG5cbiAgICBpZih0aGlzLmN1cnJlbnRUZXh0dXJlICE9PSBuZXh0VGV4dHVyZSlcbiAgICB7XG4gICAgICAgIHRoaXMuY3VycmVudFRleHR1cmUgPSBuZXh0VGV4dHVyZTtcbiAgICAgICAgXG4gICAgICAgIGlmKCFuZXh0VGV4dHVyZS5fZW5hYmxlZClcbiAgICAgICAge1xuICAgICAgICAgICAgbmV4dFRleHR1cmUuX2VuYWJsZWQgPSB0cnVlO1xuICAgICAgICAgICAgbmV4dFRleHR1cmUuX2lkID0gdGhpcy50ZXh0dXJlQ291bnQ7XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIGlmKHRoaXMudGV4dHVyZUNvdW50ID09PSB0aGlzLk1BWF9URVhUVUVTKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGZvciAoIGkgPSAwOyBpIDwgY3VycmVudEdyb3VwLnRleHR1cmVDb3VudDsgaSsrKSBcbiAgICAgICAgICAgICAgICB7ICAgICBcbiAgICAgICAgICAgICAgICAgICAgY3VycmVudEdyb3VwLnRleHR1cmVzW2ldLl9lbmFibGVkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgIHRoaXMudGV4dHVyZUNvdW50ID0gMDtcblxuICAgICAgICAgICAgICAgIGN1cnJlbnRHcm91cC5zaXplID0gdGhpcy5jdXJyZW50SW5kZXggLSBjdXJyZW50R3JvdXAuc3RhcnQ7XG4gICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICBjdXJyZW50R3JvdXAgPSB0aGlzLmN1cnJlbnRHcm91cCA9IHRoaXMuZ3JvdXBzW3RoaXMuZ3JvdXBDb3VudCsrXTtcbiAgICAgICAgICAgICAgICBjdXJyZW50R3JvdXAudGV4dHVyZUNvdW50ID0gMDtcbiAgICAgICAgICAgICAgICBjdXJyZW50R3JvdXAuc3RhcnQgPSB0aGlzLmN1cnJlbnRJbmRleDtcbiAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY3VycmVudEdyb3VwLnRleHR1cmVzW2N1cnJlbnRHcm91cC50ZXh0dXJlQ291bnQrK10gPSBuZXh0VGV4dHVyZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMudGV4dHVyZUNvdW50Kys7XG4gICAgfVxuXG4gICAgLy8gVE9ETyB0cmltPz9cbiAgICB2YXIgaW5kZXggPSB0aGlzLmN1cnJlbnRJbmRleCAqIHRoaXMudmVydEJ5dGVTaXplO1xuXG4gICAgdGhpcy5jdXJyZW50SW5kZXgrKztcblxuICAgIC8vIHVwbG9hZCB0aGUgc3ByaXRlIGVsZW1ldG5zLi4uXG4gICAgLy8gdGhleSBoYXZlIGFsbCByZWFkeSBiZWVuIGNhbGN1bGF0ZWQgc28gd2UganVzdCBuZWVkIHRvIHB1c2ggdGhlbSBpbnRvIHRoZSBidWZmZXIuXG4gICAgdmFyIGNvbG9ycyA9IHRoaXMuY29sb3JzO1xuICAgIHZhciBwb3NpdGlvbnMgPSB0aGlzLnBvc2l0aW9ucztcbiAgICB2YXIgdmVydGV4RGF0YSA9IHNwcml0ZS52ZXJ0ZXhEYXRhXG4gICAgdmFyIHRpbnQgPSAoc3ByaXRlLnRpbnQgPj4gMTYpICsgKHNwcml0ZS50aW50ICYgMHhmZjAwKSArICgoc3ByaXRlLnRpbnQgJiAweGZmKSA8PCAxNikgKyAoc3ByaXRlLndvcmxkQWxwaGEgKiAyNTUgPDwgMjQpO1xuICAgIHZhciB1dnMgPSBzcHJpdGUudGV4dHVyZS5fdXZzLnV2c191aW50MzI7XG4gICAgLy94eVxuICAgIHBvc2l0aW9uc1tpbmRleCsrXSA9IHZlcnRleERhdGFbMF07XG4gICAgcG9zaXRpb25zW2luZGV4KytdID0gdmVydGV4RGF0YVsxXTtcbiAgICB0aGlzLnV2c1tpbmRleCsrXSA9IHV2c1swXTtcbiAgICBjb2xvcnNbaW5kZXgrK10gPSB0aW50O1xuICAgIHBvc2l0aW9uc1tpbmRleCsrXSA9IG5leHRUZXh0dXJlLl9pZDsgXG4gICAgXG4gICAgLy8geHlcbiAgICBwb3NpdGlvbnNbaW5kZXgrK10gPSB2ZXJ0ZXhEYXRhWzJdO1xuICAgIHBvc2l0aW9uc1tpbmRleCsrXSA9IHZlcnRleERhdGFbM107XG4gICAgdGhpcy51dnNbaW5kZXgrK10gPSB1dnNbMV07XG4gICAgY29sb3JzW2luZGV4KytdID0gdGludDtcbiAgICBwb3NpdGlvbnNbaW5kZXgrK10gPSBuZXh0VGV4dHVyZS5faWQ7XG5cbiAgICAgLy8geHlcbiAgICBwb3NpdGlvbnNbaW5kZXgrK10gPSB2ZXJ0ZXhEYXRhWzRdO1xuICAgIHBvc2l0aW9uc1tpbmRleCsrXSA9IHZlcnRleERhdGFbNV07XG4gICAgdGhpcy51dnNbaW5kZXgrK10gPSB1dnNbMl07XG4gICAgY29sb3JzW2luZGV4KytdID0gdGludDtcbiAgICBwb3NpdGlvbnNbaW5kZXgrK10gPSBuZXh0VGV4dHVyZS5faWQ7XG5cbiAgICAvLyB4eVxuICAgIHBvc2l0aW9uc1tpbmRleCsrXSA9IHZlcnRleERhdGFbNl07XG4gICAgcG9zaXRpb25zW2luZGV4KytdID0gdmVydGV4RGF0YVs3XTtcbiAgICB0aGlzLnV2c1tpbmRleCsrXSA9IHV2c1szXTtcbiAgICBjb2xvcnNbaW5kZXgrK10gPSB0aW50O1xuICAgIHBvc2l0aW9uc1tpbmRleCsrXSA9IG5leHRUZXh0dXJlLl9pZDtcbn07XG5cbi8qKlxuICogUmVuZGVycyB0aGUgY29udGVudCBhbmQgZW1wdGllcyB0aGUgY3VycmVudCBiYXRjaC5cbiAqXG4gKi9cblNwcml0ZVJlbmRlcmVyLnByb3RvdHlwZS5mbHVzaCA9IGZ1bmN0aW9uICgpXG57XG4gICAgaWYgKHRoaXMuY3VycmVudEluZGV4ID09PSAwKXJldHVybjtcblxuICAgIHZhciBnbCA9IHRoaXMucmVuZGVyZXIuZ2w7XG5cblxuICAgIHRoaXMuY3VycmVudEdyb3VwLnNpemUgPSB0aGlzLmN1cnJlbnRJbmRleCAtIHRoaXMuY3VycmVudEdyb3VwLnN0YXJ0O1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5jdXJyZW50R3JvdXAudGV4dHVyZUNvdW50OyBpKyspIFxuICAgIHsgICAgIFxuICAgICAgICB0aGlzLmN1cnJlbnRHcm91cC50ZXh0dXJlc1tpXS5fZW5hYmxlZCA9IGZhbHNlO1xuICAgIH07XG4gICBcbiAgICAvLyBkbyBzb21lIHNtYXJ0IGFycmF5IHN0dWZmLi5cbiAgICAvLyBkb3VibGUgc2l6ZSBzbyB3ZSBkb250IGFsd2F5IHN1YmFycmF5IHRoZSBlbGVtZW50cy4uXG4gICAgLy8gdXBsb2FkIHRoZSB2ZXJ0cyB0byB0aGUgYnVmZmVyXG4gICAgaWYgKHRoaXMuY3VycmVudEJhdGNoU2l6ZSA+ICggdGhpcy5zaXplICogMC41ICkgKVxuICAgIHtcbiAgICAgICAgdGhpcy52ZXJ0ZXhCdWZmZXIudXBsb2FkKHRoaXMudmVydGljZXMsIDAsIHRydWUpO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICAvLyBvIGsgLi4gc3ViIGFycmF5IGlzIFNMT1c+P1xuICAgICAgICB2YXIgdmlldyA9IHRoaXMucG9zaXRpb25zLnN1YmFycmF5KDAsIHRoaXMuY3VycmVudEluZGV4ICogdGhpcy52ZXJ0Qnl0ZVNpemUpO1xuICAgICAgICB0aGlzLnZlcnRleEJ1ZmZlci51cGxvYWQodmlldywgMCwgdHJ1ZSk7XG4gICAgfVxuXG4gICAgLy8gYmluZCBzaGFkZXIuLlxuICAgIHRoaXMucmVuZGVyZXIuYmluZFNoYWRlcih0aGlzLl9zaGFkZXIpO1xuICAgIHRoaXMucmVuZGVyZXIuYmxlbmRNb2RlTWFuYWdlci5zZXRCbGVuZE1vZGUoIDAgKTtcblxuICAgIC8vLyByZW5kZXIgdGhlIGdyb3Vwcy4uXG4gICAgZm9yIChpID0gMDsgaSA8IHRoaXMuZ3JvdXBDb3VudDsgaSsrKSB7XG4gICAgICAgIFxuICAgICAgICB2YXIgZ3JvdXAgPSB0aGlzLmdyb3Vwc1tpXTtcblxuICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IGdyb3VwLnRleHR1cmVDb3VudDsgaisrKSB7XG4gICAgICAgICAgICB0aGlzLnJlbmRlcmVyLmJpbmRUZXh0dXJlKGdyb3VwLnRleHR1cmVzW2pdLCBqKTtcbiAgICAgICAgfTtcblxuICAgICAgICBnbC5kcmF3RWxlbWVudHMoZ2wuVFJJQU5HTEVTLCBncm91cC5zaXplICogNiwgZ2wuVU5TSUdORURfU0hPUlQsIGdyb3VwLnN0YXJ0ICogNiAqIDIpO1xuICAgIH07XG5cbiAgICAvLyByZXNldCBlbGVtZW50cyBmb3IgdGhlIG5leHQgZmx1c2hcbiAgICB0aGlzLmN1cnJlbnRUZXh0dXJlID0gbnVsbDtcbiAgICB0aGlzLmN1cnJlbnRJbmRleCA9IDA7XG4gICAgdGhpcy50ZXh0dXJlQ291bnQgPSAwO1xuICAgIHRoaXMuZ3JvdXBDb3VudCA9IDA7XG4gICAgXG4gICAgdGhpcy5jdXJyZW50R3JvdXAgPSB0aGlzLmdyb3Vwc1t0aGlzLmdyb3VwQ291bnQrK107XG4gICAgdGhpcy5jdXJyZW50R3JvdXAudGV4dHVyZUNvdW50ID0gMDtcbn07XG5cbi8qKlxuICogU3RhcnRzIGEgbmV3IHNwcml0ZSBiYXRjaC5cbiAqXG4gKi9cblNwcml0ZVJlbmRlcmVyLnByb3RvdHlwZS5zdGFydCA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy52YW8uYmluZCgpO1xufTtcblxuU3ByaXRlUmVuZGVyZXIucHJvdG90eXBlLnN0b3AgPSBmdW5jdGlvbiAoKVxue1xuICAgIHRoaXMuZmx1c2goKTtcbiAgICB0aGlzLnZhby51bmJpbmQoKTtcbn07XG4vKipcbiAqIERlc3Ryb3lzIHRoZSBTcHJpdGVCYXRjaC5cbiAqXG4gKi9cblNwcml0ZVJlbmRlcmVyLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLnZlcnRleEJ1ZmZlci5kZXN0cm95KCk7XG4gICAgdGhpcy5pbmRleEJ1ZmZlci5kZXN0cm95KCk7XG5cbiAgICBPYmplY3RSZW5kZXJlci5wcm90b3R5cGUuZGVzdHJveS5jYWxsKHRoaXMpO1xuXG4gICAgdGhpcy5zaGFkZXIuZGVzdHJveSgpO1xuXG4gICAgdGhpcy5yZW5kZXJlciA9IG51bGw7XG5cbiAgICB0aGlzLnZlcnRpY2VzID0gbnVsbDtcbiAgICB0aGlzLnBvc2l0aW9ucyA9IG51bGw7XG4gICAgdGhpcy5jb2xvcnMgPSBudWxsO1xuICAgIHRoaXMuaW5kaWNlcyA9IG51bGw7XG5cbiAgICB0aGlzLnZlcnRleEJ1ZmZlciA9IG51bGw7XG4gICAgdGhpcy5pbmRleEJ1ZmZlciA9IG51bGw7XG5cbiAgICB0aGlzLnNwcml0ZXMgPSBudWxsO1xuICAgIHRoaXMuc2hhZGVyID0gbnVsbDtcbn07XG4iLCJ2YXIgU2hhZGVyID0gcmVxdWlyZSgncGl4aS1nbC1jb3JlJykuR0xTaGFkZXI7XG5cblxuZnVuY3Rpb24gZ2VuZXJhdGVNdWx0aVRleHR1cmVTaGFkZXIoZ2wsIG1heFRleHR1cmVzKVxue1xuICAgIHZhciB2ZXJ0ZXhTcmMgPSBcInByZWNpc2lvbiBsb3dwIGZsb2F0O1xcbmF0dHJpYnV0ZSB2ZWMyIGFWZXJ0ZXhQb3NpdGlvbjtcXG5hdHRyaWJ1dGUgdmVjMiBhVGV4dHVyZUNvb3JkO1xcbmF0dHJpYnV0ZSB2ZWM0IGFDb2xvcjtcXG5hdHRyaWJ1dGUgZmxvYXQgYVRleHR1cmVJZDtcXG5cXG51bmlmb3JtIG1hdDMgcHJvamVjdGlvbk1hdHJpeDtcXG5cXG52YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDtcXG52YXJ5aW5nIHZlYzQgdkNvbG9yO1xcbnZhcnlpbmcgZmxvYXQgdlRleHR1cmVJZDtcXG5cXG52b2lkIG1haW4odm9pZCl7XFxuICAgZ2xfUG9zaXRpb24gPSB2ZWM0KChwcm9qZWN0aW9uTWF0cml4ICogdmVjMyhhVmVydGV4UG9zaXRpb24sIDEuMCkpLnh5LCAwLjAsIDEuMCk7XFxuICAgdlRleHR1cmVDb29yZCA9IGFUZXh0dXJlQ29vcmQ7XFxuICAgdlRleHR1cmVJZCA9IGFUZXh0dXJlSWQ7XFxuICAgdkNvbG9yID0gdmVjNChhQ29sb3IucmdiICogYUNvbG9yLmEsIGFDb2xvci5hKTtcXG59XCI7XG4gICAgdmFyIGZyYWdtZW50U3JjID0gJ3ByZWNpc2lvbiBsb3dwIGZsb2F0O1xcblxcbicgKyBnZW5lcmF0ZVNhbXBsZVNyYyhtYXhUZXh0dXJlcykgKyBcIlxcblxcblwiICsgZnJhZ1RlbXBsYXRlXG5cbiAgICBmcmFnbWVudFNyYyA9IGZyYWdtZW50U3JjLnJlcGxhY2UoL1xcJVxcJS9naSwgJzE2Jyk7XG5cbiAgICB2YXIgc2hhZGVyID0gbmV3IFNoYWRlcihnbCwgdmVydGV4U3JjLCBmcmFnbWVudFNyYyk7XG5cblxuICAgIHZhciBzYW1wbGVWYWx1ZXMgPSBbXTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG1heFRleHR1cmVzOyBpKyspIHtcbiAgICAgICAgc2FtcGxlVmFsdWVzW2ldID0gaTtcbiAgICB9O1xuXG4gICAgc2hhZGVyLmJpbmQoKTtcbiAgICBzaGFkZXIudW5pZm9ybXMudVNhbXBsZXJzID0gc2FtcGxlVmFsdWVzO1xuXG4gICAgcmV0dXJuIHNoYWRlcjtcbn1cblxuZnVuY3Rpb24gZ2VuZXJhdGVTYW1wbGVTcmMobWF4VGV4dHVyZXMpXG57XG4gICAgdmFyIHNyYyA9ICd2ZWM0IGdldFNhbXBsZUZyb21BcnJheShzYW1wbGVyMkQgdGV4dHVyZXNbJSVdLCBpbnQgbmR4LCB2ZWMyIHV2KSB7XFxuXFxudmVjNCBjb2xvcjsnXG5cbiAgICBzcmMgKz0gJ1xcbic7XG4gICAgc3JjICs9ICdcXG4nO1xuICAgIFxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbWF4VGV4dHVyZXM7IGkrKykgXG4gICAge1xuICAgICAgICBpZihpID4gMClzcmMgKz0gJ1xcbmVsc2UgJztcbiAgICAgICAgaWYoaSA8IG1heFRleHR1cmVzLTEpc3JjICs9ICdpZihuZHggPT0gJyArIGkgKyAnKSc7XG4gICAgICAgIHNyYyArPSAnXFxueyc7XG4gICAgICAgIHNyYyArPSAnXFxuXFx0Y29sb3IgPSB0ZXh0dXJlMkQodGV4dHVyZXNbJytpKyddLCB1dik7JztcbiAgICAgICAgc3JjICs9ICdcXG59JztcbiAgICB9O1xuXG4gICAgc3JjICs9ICdcXG4nO1xuICAgIHNyYyArPSAnXFxuJztcbiAgICBzcmMgKz0gJ3JldHVybiBjb2xvcjsnO1xuICAgIHNyYyArPSAnXFxufSc7XG5cbiAgICByZXR1cm4gc3JjO1xufVxuXG52YXIgZnJhZ1RlbXBsYXRlID0gW1xuXG4gICAgJ3ZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkOycsXG4gICAgJ3ZhcnlpbmcgdmVjNCB2Q29sb3I7JyxcbiAgICAndmFyeWluZyBmbG9hdCB2VGV4dHVyZUlkOycsXG4gICAgJ3VuaWZvcm0gc2FtcGxlcjJEIHVTYW1wbGVyc1slJV07JyxcblxuICAgICd2b2lkIG1haW4odm9pZCl7JyxcbiAgICAgICAgJ2dsX0ZyYWdDb2xvciA9IGdldFNhbXBsZUZyb21BcnJheSh1U2FtcGxlcnMsIGludCh2VGV4dHVyZUlkKSwgdlRleHR1cmVDb29yZCkgKiB2Q29sb3I7JyxcbiAgICAnfSdcbl0uam9pbignXFxuJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZ2VuZXJhdGVNdWx0aVRleHR1cmVTaGFkZXI7XG4iLCJ2YXIgU3ByaXRlID0gcmVxdWlyZSgnLi4vc3ByaXRlcy9TcHJpdGUnKSxcbiAgICBUZXh0dXJlID0gcmVxdWlyZSgnLi4vdGV4dHVyZXMvVGV4dHVyZScpLFxuICAgIG1hdGggPSByZXF1aXJlKCcuLi9tYXRoJyksXG4gICAgdXRpbHMgPSByZXF1aXJlKCcuLi91dGlscycpLFxuICAgIENPTlNUID0gcmVxdWlyZSgnLi4vY29uc3QnKTtcblxuLyoqXG4gKiBBIFRleHQgT2JqZWN0IHdpbGwgY3JlYXRlIGEgbGluZSBvciBtdWx0aXBsZSBsaW5lcyBvZiB0ZXh0LiBUbyBzcGxpdCBhIGxpbmUgeW91IGNhbiB1c2UgJ1xcbicgaW4geW91ciB0ZXh0IHN0cmluZyxcbiAqIG9yIGFkZCBhIHdvcmRXcmFwIHByb3BlcnR5IHNldCB0byB0cnVlIGFuZCBhbmQgd29yZFdyYXBXaWR0aCBwcm9wZXJ0eSB3aXRoIGEgdmFsdWUgaW4gdGhlIHN0eWxlIG9iamVjdC5cbiAqXG4gKiBBIFRleHQgY2FuIGJlIGNyZWF0ZWQgZGlyZWN0bHkgZnJvbSBhIHN0cmluZyBhbmQgYSBzdHlsZSBvYmplY3RcbiAqXG4gKiBgYGBqc1xuICogdmFyIHRleHQgPSBuZXcgUElYSS5UZXh0KCdUaGlzIGlzIGEgcGl4aSB0ZXh0Jyx7Zm9udCA6ICcyNHB4IEFyaWFsJywgZmlsbCA6IDB4ZmYxMDEwLCBhbGlnbiA6ICdjZW50ZXInfSk7XG4gKiBgYGBcbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuU3ByaXRlXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIHRleHQge3N0cmluZ30gVGhlIGNvcHkgdGhhdCB5b3Ugd291bGQgbGlrZSB0aGUgdGV4dCB0byBkaXNwbGF5XG4gKiBAcGFyYW0gW3N0eWxlXSB7b2JqZWN0fSBUaGUgc3R5bGUgcGFyYW1ldGVyc1xuICogQHBhcmFtIFtzdHlsZS5mb250XSB7c3RyaW5nfSBkZWZhdWx0ICdib2xkIDIwcHggQXJpYWwnIFRoZSBzdHlsZSBhbmQgc2l6ZSBvZiB0aGUgZm9udFxuICogQHBhcmFtIFtzdHlsZS5maWxsPSdibGFjayddIHtTdHJpbmd8TnVtYmVyfSBBIGNhbnZhcyBmaWxsc3R5bGUgdGhhdCB3aWxsIGJlIHVzZWQgb24gdGhlIHRleHQgZS5nICdyZWQnLCAnIzAwRkYwMCdcbiAqIEBwYXJhbSBbc3R5bGUuYWxpZ249J2xlZnQnXSB7c3RyaW5nfSBBbGlnbm1lbnQgZm9yIG11bHRpbGluZSB0ZXh0ICgnbGVmdCcsICdjZW50ZXInIG9yICdyaWdodCcpLCBkb2VzIG5vdCBhZmZlY3Qgc2luZ2xlIGxpbmUgdGV4dFxuICogQHBhcmFtIFtzdHlsZS5zdHJva2VdIHtTdHJpbmd8TnVtYmVyfSBBIGNhbnZhcyBmaWxsc3R5bGUgdGhhdCB3aWxsIGJlIHVzZWQgb24gdGhlIHRleHQgc3Ryb2tlIGUuZyAnYmx1ZScsICcjRkNGRjAwJ1xuICogQHBhcmFtIFtzdHlsZS5zdHJva2VUaGlja25lc3M9MF0ge251bWJlcn0gQSBudW1iZXIgdGhhdCByZXByZXNlbnRzIHRoZSB0aGlja25lc3Mgb2YgdGhlIHN0cm9rZS4gRGVmYXVsdCBpcyAwIChubyBzdHJva2UpXG4gKiBAcGFyYW0gW3N0eWxlLndvcmRXcmFwPWZhbHNlXSB7Ym9vbGVhbn0gSW5kaWNhdGVzIGlmIHdvcmQgd3JhcCBzaG91bGQgYmUgdXNlZFxuICogQHBhcmFtIFtzdHlsZS53b3JkV3JhcFdpZHRoPTEwMF0ge251bWJlcn0gVGhlIHdpZHRoIGF0IHdoaWNoIHRleHQgd2lsbCB3cmFwLCBpdCBuZWVkcyB3b3JkV3JhcCB0byBiZSBzZXQgdG8gdHJ1ZVxuICogQHBhcmFtIFtzdHlsZS5saW5lSGVpZ2h0XSB7bnVtYmVyfSBUaGUgbGluZSBoZWlnaHQsIGEgbnVtYmVyIHRoYXQgcmVwcmVzZW50cyB0aGUgdmVydGljYWwgc3BhY2UgdGhhdCBhIGxldHRlciB1c2VzXG4gKiBAcGFyYW0gW3N0eWxlLmRyb3BTaGFkb3c9ZmFsc2VdIHtib29sZWFufSBTZXQgYSBkcm9wIHNoYWRvdyBmb3IgdGhlIHRleHRcbiAqIEBwYXJhbSBbc3R5bGUuZHJvcFNoYWRvd0NvbG9yPScjMDAwMDAwJ10ge3N0cmluZ30gQSBmaWxsIHN0eWxlIHRvIGJlIHVzZWQgb24gdGhlIGRyb3BzaGFkb3cgZS5nICdyZWQnLCAnIzAwRkYwMCdcbiAqIEBwYXJhbSBbc3R5bGUuZHJvcFNoYWRvd0FuZ2xlPU1hdGguUEkvNF0ge251bWJlcn0gU2V0IGEgYW5nbGUgb2YgdGhlIGRyb3Agc2hhZG93XG4gKiBAcGFyYW0gW3N0eWxlLmRyb3BTaGFkb3dEaXN0YW5jZT01XSB7bnVtYmVyfSBTZXQgYSBkaXN0YW5jZSBvZiB0aGUgZHJvcCBzaGFkb3dcbiAqIEBwYXJhbSBbc3R5bGUuZHJvcFNoYWRvd0JsdXI9MF0ge251bWJlcn0gU2V0IGEgc2hhZG93IGJsdXIgcmFkaXVzXG4gKiBAcGFyYW0gW3N0eWxlLnBhZGRpbmc9MF0ge251bWJlcn0gT2NjYXNpb25hbGx5IHNvbWUgZm9udHMgYXJlIGNyb3BwZWQgb24gdG9wIG9yIGJvdHRvbS4gQWRkaW5nIHNvbWUgcGFkZGluZyB3aWxsXG4gKiAgICAgIHByZXZlbnQgdGhpcyBmcm9tIGhhcHBlbmluZyBieSBhZGRpbmcgcGFkZGluZyB0byB0aGUgdG9wIGFuZCBib3R0b20gb2YgdGV4dCBoZWlnaHQuXG4gKiBAcGFyYW0gW3N0eWxlLnRleHRCYXNlbGluZT0nYWxwaGFiZXRpYyddIHtzdHJpbmd9IFRoZSBiYXNlbGluZSBvZiB0aGUgdGV4dCB0aGF0IGlzIHJlbmRlcmVkLlxuICogQHBhcmFtIFtzdHlsZS5saW5lSm9pbj0nbWl0ZXInXSB7c3RyaW5nfSBUaGUgbGluZUpvaW4gcHJvcGVydHkgc2V0cyB0aGUgdHlwZSBvZiBjb3JuZXIgY3JlYXRlZCwgaXQgY2FuIHJlc29sdmVcbiAqICAgICAgc3Bpa2VkIHRleHQgaXNzdWVzLiBEZWZhdWx0IGlzICdtaXRlcicgKGNyZWF0ZXMgYSBzaGFycCBjb3JuZXIpLlxuICogQHBhcmFtIFtzdHlsZS5taXRlckxpbWl0PTEwXSB7bnVtYmVyfSBUaGUgbWl0ZXIgbGltaXQgdG8gdXNlIHdoZW4gdXNpbmcgdGhlICdtaXRlcicgbGluZUpvaW4gbW9kZS4gVGhpcyBjYW4gcmVkdWNlXG4gKiAgICAgIG9yIGluY3JlYXNlIHRoZSBzcGlraW5lc3Mgb2YgcmVuZGVyZWQgdGV4dC5cbiAqL1xuZnVuY3Rpb24gVGV4dCh0ZXh0LCBzdHlsZSwgcmVzb2x1dGlvbilcbntcbiAgICAvKipcbiAgICAgKiBUaGUgY2FudmFzIGVsZW1lbnQgdGhhdCBldmVyeXRoaW5nIGlzIGRyYXduIHRvXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtIVE1MQ2FudmFzRWxlbWVudH1cbiAgICAgKi9cbiAgICB0aGlzLmNhbnZhcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NhbnZhcycpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGNhbnZhcyAyZCBjb250ZXh0IHRoYXQgZXZlcnl0aGluZyBpcyBkcmF3biB3aXRoXG4gICAgICogQG1lbWJlciB7SFRNTENhbnZhc0VsZW1lbnR9XG4gICAgICovXG4gICAgdGhpcy5jb250ZXh0ID0gdGhpcy5jYW52YXMuZ2V0Q29udGV4dCgnMmQnKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSByZXNvbHV0aW9uIG9mIHRoZSBjYW52YXMuXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMucmVzb2x1dGlvbiA9IHJlc29sdXRpb24gfHwgQ09OU1QuUkVTT0xVVElPTjtcblxuICAgIC8qKlxuICAgICAqIFByaXZhdGUgdHJhY2tlciBmb3IgdGhlIGN1cnJlbnQgdGV4dC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge3N0cmluZ31cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX3RleHQgPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogUHJpdmF0ZSB0cmFja2VyIGZvciB0aGUgY3VycmVudCBzdHlsZS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge29iamVjdH1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX3N0eWxlID0gbnVsbDtcblxuICAgIHZhciB0ZXh0dXJlID0gVGV4dHVyZS5mcm9tQ2FudmFzKHRoaXMuY2FudmFzKTtcbiAgICB0ZXh0dXJlLnRyaW0gPSBuZXcgbWF0aC5SZWN0YW5nbGUoKTtcbiAgICBTcHJpdGUuY2FsbCh0aGlzLCB0ZXh0dXJlKTtcblxuICAgIHRoaXMudGV4dCA9IHRleHQ7XG4gICAgdGhpcy5zdHlsZSA9IHN0eWxlO1xufVxuXG4vLyBjb25zdHJ1Y3RvclxuVGV4dC5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFNwcml0ZS5wcm90b3R5cGUpO1xuVGV4dC5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBUZXh0O1xubW9kdWxlLmV4cG9ydHMgPSBUZXh0O1xuXG5UZXh0LmZvbnRQcm9wZXJ0aWVzQ2FjaGUgPSB7fTtcblRleHQuZm9udFByb3BlcnRpZXNDYW52YXMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdjYW52YXMnKTtcblRleHQuZm9udFByb3BlcnRpZXNDb250ZXh0ID0gVGV4dC5mb250UHJvcGVydGllc0NhbnZhcy5nZXRDb250ZXh0KCcyZCcpO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhUZXh0LnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFRoZSB3aWR0aCBvZiB0aGUgVGV4dCwgc2V0dGluZyB0aGlzIHdpbGwgYWN0dWFsbHkgbW9kaWZ5IHRoZSBzY2FsZSB0byBhY2hpZXZlIHRoZSB2YWx1ZSBzZXRcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5UZXh0I1xuICAgICAqL1xuICAgIHdpZHRoOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgaWYgKHRoaXMuZGlydHkpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdGhpcy51cGRhdGVUZXh0KCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiB0aGlzLnNjYWxlLnggKiB0aGlzLl90ZXh0dXJlLl9mcmFtZS53aWR0aDtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuc2NhbGUueCA9IHZhbHVlIC8gdGhpcy5fdGV4dHVyZS5fZnJhbWUud2lkdGg7XG4gICAgICAgICAgICB0aGlzLl93aWR0aCA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFRoZSBoZWlnaHQgb2YgdGhlIFRleHQsIHNldHRpbmcgdGhpcyB3aWxsIGFjdHVhbGx5IG1vZGlmeSB0aGUgc2NhbGUgdG8gYWNoaWV2ZSB0aGUgdmFsdWUgc2V0XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuVGV4dCNcbiAgICAgKi9cbiAgICBoZWlnaHQ6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICBpZiAodGhpcy5kaXJ0eSlcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZVRleHQoKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuICB0aGlzLnNjYWxlLnkgKiB0aGlzLl90ZXh0dXJlLl9mcmFtZS5oZWlnaHQ7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnNjYWxlLnkgPSB2YWx1ZSAvIHRoaXMuX3RleHR1cmUuX2ZyYW1lLmhlaWdodDtcbiAgICAgICAgICAgIHRoaXMuX2hlaWdodCA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFNldCB0aGUgc3R5bGUgb2YgdGhlIHRleHRcbiAgICAgKlxuICAgICAqIEBwYXJhbSBbc3R5bGVdIHtvYmplY3R9IFRoZSBzdHlsZSBwYXJhbWV0ZXJzXG4gICAgICogQHBhcmFtIFtzdHlsZS5mb250PSdib2xkIDIwcHQgQXJpYWwnXSB7c3RyaW5nfSBUaGUgc3R5bGUgYW5kIHNpemUgb2YgdGhlIGZvbnRcbiAgICAgKiBAcGFyYW0gW3N0eWxlLmZpbGw9J2JsYWNrJ10ge3N0cmluZ3xudW1iZXJ9IEEgY2FudmFzIGZpbGxzdHlsZSB0aGF0IHdpbGwgYmUgdXNlZCBvbiB0aGUgdGV4dCBlZyAncmVkJywgJyMwMEZGMDAnXG4gICAgICogQHBhcmFtIFtzdHlsZS5hbGlnbj0nbGVmdCddIHtzdHJpbmd9IEFsaWdubWVudCBmb3IgbXVsdGlsaW5lIHRleHQgKCdsZWZ0JywgJ2NlbnRlcicgb3IgJ3JpZ2h0JyksIGRvZXMgbm90IGFmZmVjdCBzaW5nbGUgbGluZSB0ZXh0XG4gICAgICogQHBhcmFtIFtzdHlsZS5zdHJva2U9J2JsYWNrJ10ge3N0cmluZ3xudW1iZXJ9IEEgY2FudmFzIGZpbGxzdHlsZSB0aGF0IHdpbGwgYmUgdXNlZCBvbiB0aGUgdGV4dCBzdHJva2UgZWcgJ2JsdWUnLCAnI0ZDRkYwMCdcbiAgICAgKiBAcGFyYW0gW3N0eWxlLnN0cm9rZVRoaWNrbmVzcz0wXSB7bnVtYmVyfSBBIG51bWJlciB0aGF0IHJlcHJlc2VudHMgdGhlIHRoaWNrbmVzcyBvZiB0aGUgc3Ryb2tlLiBEZWZhdWx0IGlzIDAgKG5vIHN0cm9rZSlcbiAgICAgKiBAcGFyYW0gW3N0eWxlLndvcmRXcmFwPWZhbHNlXSB7Ym9vbGVhbn0gSW5kaWNhdGVzIGlmIHdvcmQgd3JhcCBzaG91bGQgYmUgdXNlZFxuICAgICAqIEBwYXJhbSBbc3R5bGUud29yZFdyYXBXaWR0aD0xMDBdIHtudW1iZXJ9IFRoZSB3aWR0aCBhdCB3aGljaCB0ZXh0IHdpbGwgd3JhcFxuICAgICAqIEBwYXJhbSBbc3R5bGUubGluZUhlaWdodF0ge251bWJlcn0gVGhlIGxpbmUgaGVpZ2h0LCBhIG51bWJlciB0aGF0IHJlcHJlc2VudHMgdGhlIHZlcnRpY2FsIHNwYWNlIHRoYXQgYSBsZXR0ZXIgdXNlc1xuICAgICAqIEBwYXJhbSBbc3R5bGUuZHJvcFNoYWRvdz1mYWxzZV0ge2Jvb2xlYW59IFNldCBhIGRyb3Agc2hhZG93IGZvciB0aGUgdGV4dFxuICAgICAqIEBwYXJhbSBbc3R5bGUuZHJvcFNoYWRvd0NvbG9yPScjMDAwMDAwJ10ge3N0cmluZ3xudW1iZXJ9IEEgZmlsbCBzdHlsZSB0byBiZSB1c2VkIG9uIHRoZSBkcm9wc2hhZG93IGUuZyAncmVkJywgJyMwMEZGMDAnXG4gICAgICogQHBhcmFtIFtzdHlsZS5kcm9wU2hhZG93QW5nbGU9TWF0aC5QSS82XSB7bnVtYmVyfSBTZXQgYSBhbmdsZSBvZiB0aGUgZHJvcCBzaGFkb3dcbiAgICAgKiBAcGFyYW0gW3N0eWxlLmRyb3BTaGFkb3dEaXN0YW5jZT01XSB7bnVtYmVyfSBTZXQgYSBkaXN0YW5jZSBvZiB0aGUgZHJvcCBzaGFkb3dcbiAgICAgKiBAcGFyYW0gW3N0eWxlLmRyb3BTaGFkb3dCbHVyPTBdIHtudW1iZXJ9IFNldCBhIHNoYWRvdyBibHVyIHJhZGl1c1xuICAgICAqIEBwYXJhbSBbc3R5bGUucGFkZGluZz0wXSB7bnVtYmVyfSBPY2Nhc2lvbmFsbHkgc29tZSBmb250cyBhcmUgY3JvcHBlZCBvbiB0b3Agb3IgYm90dG9tLiBBZGRpbmcgc29tZSBwYWRkaW5nIHdpbGxcbiAgICAgKiAgICAgIHByZXZlbnQgdGhpcyBmcm9tIGhhcHBlbmluZyBieSBhZGRpbmcgcGFkZGluZyB0byB0aGUgdG9wIGFuZCBib3R0b20gb2YgdGV4dCBoZWlnaHQuXG4gICAgICogQHBhcmFtIFtzdHlsZS50ZXh0QmFzZWxpbmU9J2FscGhhYmV0aWMnXSB7c3RyaW5nfSBUaGUgYmFzZWxpbmUgb2YgdGhlIHRleHQgdGhhdCBpcyByZW5kZXJlZC5cbiAgICAgKiBAcGFyYW0gW3N0eWxlLmxpbmVKb2luPSdtaXRlciddIHtzdHJpbmd9IFRoZSBsaW5lSm9pbiBwcm9wZXJ0eSBzZXRzIHRoZSB0eXBlIG9mIGNvcm5lciBjcmVhdGVkLCBpdCBjYW4gcmVzb2x2ZVxuICAgICAqICAgICAgc3Bpa2VkIHRleHQgaXNzdWVzLiBEZWZhdWx0IGlzICdtaXRlcicgKGNyZWF0ZXMgYSBzaGFycCBjb3JuZXIpLlxuICAgICAqIEBwYXJhbSBbc3R5bGUubWl0ZXJMaW1pdD0xMF0ge251bWJlcn0gVGhlIG1pdGVyIGxpbWl0IHRvIHVzZSB3aGVuIHVzaW5nIHRoZSAnbWl0ZXInIGxpbmVKb2luIG1vZGUuIFRoaXMgY2FuIHJlZHVjZVxuICAgICAqICAgICAgb3IgaW5jcmVhc2UgdGhlIHNwaWtpbmVzcyBvZiByZW5kZXJlZCB0ZXh0LlxuICAgICAqIEBtZW1iZXJvZiBQSVhJLlRleHQjXG4gICAgICovXG4gICAgc3R5bGU6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fc3R5bGU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHN0eWxlKVxuICAgICAgICB7XG4gICAgICAgICAgICBzdHlsZSA9IHN0eWxlIHx8IHt9O1xuXG4gICAgICAgICAgICBpZiAodHlwZW9mIHN0eWxlLmZpbGwgPT09ICdudW1iZXInKSB7XG4gICAgICAgICAgICAgICAgc3R5bGUuZmlsbCA9IHV0aWxzLmhleDJzdHJpbmcoc3R5bGUuZmlsbCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICh0eXBlb2Ygc3R5bGUuc3Ryb2tlID09PSAnbnVtYmVyJykge1xuICAgICAgICAgICAgICAgIHN0eWxlLnN0cm9rZSA9IHV0aWxzLmhleDJzdHJpbmcoc3R5bGUuc3Ryb2tlKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHR5cGVvZiBzdHlsZS5kcm9wU2hhZG93Q29sb3IgPT09ICdudW1iZXInKSB7XG4gICAgICAgICAgICAgICAgc3R5bGUuZHJvcFNoYWRvd0NvbG9yID0gdXRpbHMuaGV4MnN0cmluZyhzdHlsZS5kcm9wU2hhZG93Q29sb3IpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBzdHlsZS5mb250ID0gc3R5bGUuZm9udCB8fCAnYm9sZCAyMHB0IEFyaWFsJztcbiAgICAgICAgICAgIHN0eWxlLmZpbGwgPSBzdHlsZS5maWxsIHx8ICdibGFjayc7XG4gICAgICAgICAgICBzdHlsZS5hbGlnbiA9IHN0eWxlLmFsaWduIHx8ICdsZWZ0JztcbiAgICAgICAgICAgIHN0eWxlLnN0cm9rZSA9IHN0eWxlLnN0cm9rZSB8fCAnYmxhY2snOyAvL3Byb3ZpZGUgYSBkZWZhdWx0LCBzZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9waXhpanMvcGl4aS5qcy9pc3N1ZXMvMTM2XG4gICAgICAgICAgICBzdHlsZS5zdHJva2VUaGlja25lc3MgPSBzdHlsZS5zdHJva2VUaGlja25lc3MgfHwgMDtcbiAgICAgICAgICAgIHN0eWxlLndvcmRXcmFwID0gc3R5bGUud29yZFdyYXAgfHwgZmFsc2U7XG4gICAgICAgICAgICBzdHlsZS53b3JkV3JhcFdpZHRoID0gc3R5bGUud29yZFdyYXBXaWR0aCB8fCAxMDA7XG5cbiAgICAgICAgICAgIHN0eWxlLmRyb3BTaGFkb3cgPSBzdHlsZS5kcm9wU2hhZG93IHx8IGZhbHNlO1xuICAgICAgICAgICAgc3R5bGUuZHJvcFNoYWRvd0NvbG9yID0gc3R5bGUuZHJvcFNoYWRvd0NvbG9yIHx8ICcjMDAwMDAwJztcbiAgICAgICAgICAgIHN0eWxlLmRyb3BTaGFkb3dBbmdsZSA9IHN0eWxlLmRyb3BTaGFkb3dBbmdsZSAhPT0gdW5kZWZpbmVkID8gc3R5bGUuZHJvcFNoYWRvd0FuZ2xlIDogTWF0aC5QSSAvIDY7XG4gICAgICAgICAgICBzdHlsZS5kcm9wU2hhZG93RGlzdGFuY2UgPSBzdHlsZS5kcm9wU2hhZG93RGlzdGFuY2UgIT09IHVuZGVmaW5lZCA/IHN0eWxlLmRyb3BTaGFkb3dEaXN0YW5jZSA6IDU7XG4gICAgICAgICAgICBzdHlsZS5kcm9wU2hhZG93Qmx1ciA9IHN0eWxlLmRyb3BTaGFkb3dCbHVyICE9PSB1bmRlZmluZWQgPyBzdHlsZS5kcm9wU2hhZG93Qmx1ciA6IDA7IC8vc2hhZG93Qmx1ciBpcyAnMCcgYnkgZGVmYXVsdCBhY2NvcmRpbmcgdG8gSFRNTFxuXG4gICAgICAgICAgICBzdHlsZS5wYWRkaW5nID0gc3R5bGUucGFkZGluZyB8fCAwO1xuXG4gICAgICAgICAgICBzdHlsZS50ZXh0QmFzZWxpbmUgPSBzdHlsZS50ZXh0QmFzZWxpbmUgfHwgJ2FscGhhYmV0aWMnO1xuXG4gICAgICAgICAgICBzdHlsZS5saW5lSm9pbiA9IHN0eWxlLmxpbmVKb2luIHx8ICdtaXRlcic7XG4gICAgICAgICAgICBzdHlsZS5taXRlckxpbWl0ID0gc3R5bGUubWl0ZXJMaW1pdCB8fCAxMDtcblxuICAgICAgICAgICAgdGhpcy5fc3R5bGUgPSBzdHlsZTtcbiAgICAgICAgICAgIHRoaXMuZGlydHkgPSB0cnVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFNldCB0aGUgY29weSBmb3IgdGhlIHRleHQgb2JqZWN0LiBUbyBzcGxpdCBhIGxpbmUgeW91IGNhbiB1c2UgJ1xcbicuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gdGV4dCB7c3RyaW5nfSBUaGUgY29weSB0aGF0IHlvdSB3b3VsZCBsaWtlIHRoZSB0ZXh0IHRvIGRpc3BsYXlcbiAgICAgKiBAbWVtYmVyb2YgUElYSS5UZXh0I1xuICAgICAqL1xuICAgIHRleHQ6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbigpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl90ZXh0O1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh0ZXh0KXtcbiAgICAgICAgICAgIHRleHQgPSB0ZXh0LnRvU3RyaW5nKCkgfHwgJyAnO1xuICAgICAgICAgICAgaWYgKHRoaXMuX3RleHQgPT09IHRleHQpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5fdGV4dCA9IHRleHQ7XG4gICAgICAgICAgICB0aGlzLmRpcnR5ID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuXG4vKipcbiAqIFJlbmRlcnMgdGV4dCBhbmQgdXBkYXRlcyBpdCB3aGVuIG5lZWRlZFxuICpcbiAqIEBwcml2YXRlXG4gKi9cblRleHQucHJvdG90eXBlLnVwZGF0ZVRleHQgPSBmdW5jdGlvbiAoKVxue1xuICAgIHZhciBzdHlsZSA9IHRoaXMuX3N0eWxlO1xuICAgIHRoaXMuY29udGV4dC5mb250ID0gc3R5bGUuZm9udDtcblxuICAgIC8vIHdvcmQgd3JhcFxuICAgIC8vIHByZXNlcnZlIG9yaWdpbmFsIHRleHRcbiAgICB2YXIgb3V0cHV0VGV4dCA9IHN0eWxlLndvcmRXcmFwID8gdGhpcy53b3JkV3JhcCh0aGlzLl90ZXh0KSA6IHRoaXMuX3RleHQ7XG5cbiAgICAvLyBzcGxpdCB0ZXh0IGludG8gbGluZXNcbiAgICB2YXIgbGluZXMgPSBvdXRwdXRUZXh0LnNwbGl0KC8oPzpcXHJcXG58XFxyfFxcbikvKTtcblxuICAgIC8vIGNhbGN1bGF0ZSB0ZXh0IHdpZHRoXG4gICAgdmFyIGxpbmVXaWR0aHMgPSBuZXcgQXJyYXkobGluZXMubGVuZ3RoKTtcbiAgICB2YXIgbWF4TGluZVdpZHRoID0gMDtcbiAgICB2YXIgZm9udFByb3BlcnRpZXMgPSB0aGlzLmRldGVybWluZUZvbnRQcm9wZXJ0aWVzKHN0eWxlLmZvbnQpO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGluZXMubGVuZ3RoOyBpKyspXG4gICAge1xuICAgICAgICB2YXIgbGluZVdpZHRoID0gdGhpcy5jb250ZXh0Lm1lYXN1cmVUZXh0KGxpbmVzW2ldKS53aWR0aDtcbiAgICAgICAgbGluZVdpZHRoc1tpXSA9IGxpbmVXaWR0aDtcbiAgICAgICAgbWF4TGluZVdpZHRoID0gTWF0aC5tYXgobWF4TGluZVdpZHRoLCBsaW5lV2lkdGgpO1xuICAgIH1cblxuICAgIHZhciB3aWR0aCA9IG1heExpbmVXaWR0aCArIHN0eWxlLnN0cm9rZVRoaWNrbmVzcztcbiAgICBpZiAoc3R5bGUuZHJvcFNoYWRvdylcbiAgICB7XG4gICAgICAgIHdpZHRoICs9IHN0eWxlLmRyb3BTaGFkb3dEaXN0YW5jZTtcbiAgICB9XG5cbiAgICB0aGlzLmNhbnZhcy53aWR0aCA9ICggd2lkdGggKyB0aGlzLmNvbnRleHQubGluZVdpZHRoICkgKiB0aGlzLnJlc29sdXRpb247XG5cbiAgICAvLyBjYWxjdWxhdGUgdGV4dCBoZWlnaHRcbiAgICB2YXIgbGluZUhlaWdodCA9IHRoaXMuc3R5bGUubGluZUhlaWdodCB8fCBmb250UHJvcGVydGllcy5mb250U2l6ZSArIHN0eWxlLnN0cm9rZVRoaWNrbmVzcztcblxuICAgIHZhciBoZWlnaHQgPSBsaW5lSGVpZ2h0ICogbGluZXMubGVuZ3RoO1xuICAgIGlmIChzdHlsZS5kcm9wU2hhZG93KVxuICAgIHtcbiAgICAgICAgaGVpZ2h0ICs9IHN0eWxlLmRyb3BTaGFkb3dEaXN0YW5jZTtcbiAgICB9XG5cbiAgICB0aGlzLmNhbnZhcy5oZWlnaHQgPSAoIGhlaWdodCArIHRoaXMuX3N0eWxlLnBhZGRpbmcgKiAyICkgKiB0aGlzLnJlc29sdXRpb247XG5cbiAgICB0aGlzLmNvbnRleHQuc2NhbGUoIHRoaXMucmVzb2x1dGlvbiwgdGhpcy5yZXNvbHV0aW9uKTtcblxuICAgIGlmIChuYXZpZ2F0b3IuaXNDb2Nvb25KUylcbiAgICB7XG4gICAgICAgIHRoaXMuY29udGV4dC5jbGVhclJlY3QoMCwgMCwgdGhpcy5jYW52YXMud2lkdGgsIHRoaXMuY2FudmFzLmhlaWdodCk7XG5cbiAgICB9XG5cbiAgICAvL3RoaXMuY29udGV4dC5maWxsU3R5bGU9XCIjRkYwMDAwXCI7XG4gICAgLy90aGlzLmNvbnRleHQuZmlsbFJlY3QoMCwgMCwgdGhpcy5jYW52YXMud2lkdGgsIHRoaXMuY2FudmFzLmhlaWdodCk7XG5cbiAgICB0aGlzLmNvbnRleHQuZm9udCA9IHN0eWxlLmZvbnQ7XG4gICAgdGhpcy5jb250ZXh0LnN0cm9rZVN0eWxlID0gc3R5bGUuc3Ryb2tlO1xuICAgIHRoaXMuY29udGV4dC5saW5lV2lkdGggPSBzdHlsZS5zdHJva2VUaGlja25lc3M7XG4gICAgdGhpcy5jb250ZXh0LnRleHRCYXNlbGluZSA9IHN0eWxlLnRleHRCYXNlbGluZTtcbiAgICB0aGlzLmNvbnRleHQubGluZUpvaW4gPSBzdHlsZS5saW5lSm9pbjtcbiAgICB0aGlzLmNvbnRleHQubWl0ZXJMaW1pdCA9IHN0eWxlLm1pdGVyTGltaXQ7XG5cbiAgICB2YXIgbGluZVBvc2l0aW9uWDtcbiAgICB2YXIgbGluZVBvc2l0aW9uWTtcblxuICAgIGlmIChzdHlsZS5kcm9wU2hhZG93KVxuICAgIHtcbiAgICAgICAgaWYgKHN0eWxlLmRyb3BTaGFkb3dCbHVyID4gMCkge1xuICAgICAgICAgICAgdGhpcy5jb250ZXh0LnNoYWRvd0NvbG9yID0gc3R5bGUuZHJvcFNoYWRvd0NvbG9yO1xuICAgICAgICAgICAgdGhpcy5jb250ZXh0LnNoYWRvd0JsdXIgPSBzdHlsZS5kcm9wU2hhZG93Qmx1cjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuY29udGV4dC5maWxsU3R5bGUgPSBzdHlsZS5kcm9wU2hhZG93Q29sb3I7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgeFNoYWRvd09mZnNldCA9IE1hdGguY29zKHN0eWxlLmRyb3BTaGFkb3dBbmdsZSkgKiBzdHlsZS5kcm9wU2hhZG93RGlzdGFuY2U7XG4gICAgICAgIHZhciB5U2hhZG93T2Zmc2V0ID0gTWF0aC5zaW4oc3R5bGUuZHJvcFNoYWRvd0FuZ2xlKSAqIHN0eWxlLmRyb3BTaGFkb3dEaXN0YW5jZTtcblxuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbGluZXMubGVuZ3RoOyBpKyspXG4gICAgICAgIHtcbiAgICAgICAgICAgIGxpbmVQb3NpdGlvblggPSBzdHlsZS5zdHJva2VUaGlja25lc3MgLyAyO1xuICAgICAgICAgICAgbGluZVBvc2l0aW9uWSA9IChzdHlsZS5zdHJva2VUaGlja25lc3MgLyAyICsgaSAqIGxpbmVIZWlnaHQpICsgZm9udFByb3BlcnRpZXMuYXNjZW50O1xuXG4gICAgICAgICAgICBpZiAoc3R5bGUuYWxpZ24gPT09ICdyaWdodCcpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgbGluZVBvc2l0aW9uWCArPSBtYXhMaW5lV2lkdGggLSBsaW5lV2lkdGhzW2ldO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoc3R5bGUuYWxpZ24gPT09ICdjZW50ZXInKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGxpbmVQb3NpdGlvblggKz0gKG1heExpbmVXaWR0aCAtIGxpbmVXaWR0aHNbaV0pIC8gMjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHN0eWxlLmZpbGwpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdGhpcy5jb250ZXh0LmZpbGxUZXh0KGxpbmVzW2ldLCBsaW5lUG9zaXRpb25YICsgeFNoYWRvd09mZnNldCwgbGluZVBvc2l0aW9uWSArIHlTaGFkb3dPZmZzZXQgKyB0aGlzLl9zdHlsZS5wYWRkaW5nKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vc2V0IGNhbnZhcyB0ZXh0IHN0eWxlc1xuICAgIHRoaXMuY29udGV4dC5maWxsU3R5bGUgPSBzdHlsZS5maWxsO1xuXG4gICAgLy9kcmF3IGxpbmVzIGxpbmUgYnkgbGluZVxuICAgIGZvciAoaSA9IDA7IGkgPCBsaW5lcy5sZW5ndGg7IGkrKylcbiAgICB7XG4gICAgICAgIGxpbmVQb3NpdGlvblggPSBzdHlsZS5zdHJva2VUaGlja25lc3MgLyAyO1xuICAgICAgICBsaW5lUG9zaXRpb25ZID0gKHN0eWxlLnN0cm9rZVRoaWNrbmVzcyAvIDIgKyBpICogbGluZUhlaWdodCkgKyBmb250UHJvcGVydGllcy5hc2NlbnQ7XG5cbiAgICAgICAgaWYgKHN0eWxlLmFsaWduID09PSAncmlnaHQnKVxuICAgICAgICB7XG4gICAgICAgICAgICBsaW5lUG9zaXRpb25YICs9IG1heExpbmVXaWR0aCAtIGxpbmVXaWR0aHNbaV07XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoc3R5bGUuYWxpZ24gPT09ICdjZW50ZXInKVxuICAgICAgICB7XG4gICAgICAgICAgICBsaW5lUG9zaXRpb25YICs9IChtYXhMaW5lV2lkdGggLSBsaW5lV2lkdGhzW2ldKSAvIDI7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoc3R5bGUuc3Ryb2tlICYmIHN0eWxlLnN0cm9rZVRoaWNrbmVzcylcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5jb250ZXh0LnN0cm9rZVRleHQobGluZXNbaV0sIGxpbmVQb3NpdGlvblgsIGxpbmVQb3NpdGlvblkgKyB0aGlzLl9zdHlsZS5wYWRkaW5nKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChzdHlsZS5maWxsKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmNvbnRleHQuZmlsbFRleHQobGluZXNbaV0sIGxpbmVQb3NpdGlvblgsIGxpbmVQb3NpdGlvblkgKyB0aGlzLl9zdHlsZS5wYWRkaW5nKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMudXBkYXRlVGV4dHVyZSgpO1xufTtcblxuLyoqXG4gKiBVcGRhdGVzIHRleHR1cmUgc2l6ZSBiYXNlZCBvbiBjYW52YXMgc2l6ZVxuICpcbiAqIEBwcml2YXRlXG4gKi9cblRleHQucHJvdG90eXBlLnVwZGF0ZVRleHR1cmUgPSBmdW5jdGlvbiAoKVxue1xuICAgIHZhciB0ZXh0dXJlID0gdGhpcy5fdGV4dHVyZTtcblxuICAgIHRleHR1cmUuYmFzZVRleHR1cmUuaGFzTG9hZGVkID0gdHJ1ZTtcbiAgICB0ZXh0dXJlLmJhc2VUZXh0dXJlLnJlc29sdXRpb24gPSB0aGlzLnJlc29sdXRpb247XG5cbiAgICB0ZXh0dXJlLmJhc2VUZXh0dXJlLndpZHRoID0gdGhpcy5jYW52YXMud2lkdGggLyB0aGlzLnJlc29sdXRpb247XG4gICAgdGV4dHVyZS5iYXNlVGV4dHVyZS5oZWlnaHQgPSB0aGlzLmNhbnZhcy5oZWlnaHQgLyB0aGlzLnJlc29sdXRpb247XG4gICAgdGV4dHVyZS5jcm9wLndpZHRoID0gdGV4dHVyZS5fZnJhbWUud2lkdGggPSB0aGlzLmNhbnZhcy53aWR0aCAvIHRoaXMucmVzb2x1dGlvbjtcbiAgICB0ZXh0dXJlLmNyb3AuaGVpZ2h0ID0gdGV4dHVyZS5fZnJhbWUuaGVpZ2h0ID0gdGhpcy5jYW52YXMuaGVpZ2h0IC8gdGhpcy5yZXNvbHV0aW9uO1xuXG4gICAgdGV4dHVyZS50cmltLnggPSAwO1xuICAgIHRleHR1cmUudHJpbS55ID0gLXRoaXMuX3N0eWxlLnBhZGRpbmc7XG5cbiAgICB0ZXh0dXJlLnRyaW0ud2lkdGggPSB0ZXh0dXJlLl9mcmFtZS53aWR0aDtcbiAgICB0ZXh0dXJlLnRyaW0uaGVpZ2h0ID0gdGV4dHVyZS5fZnJhbWUuaGVpZ2h0IC0gdGhpcy5fc3R5bGUucGFkZGluZyoyO1xuXG4gICAgdGhpcy5fd2lkdGggPSB0aGlzLmNhbnZhcy53aWR0aCAvIHRoaXMucmVzb2x1dGlvbjtcbiAgICB0aGlzLl9oZWlnaHQgPSB0aGlzLmNhbnZhcy5oZWlnaHQgLyB0aGlzLnJlc29sdXRpb247XG5cbiAgICB0ZXh0dXJlLmJhc2VUZXh0dXJlLmVtaXQoJ3VwZGF0ZScsICB0ZXh0dXJlLmJhc2VUZXh0dXJlKTtcblxuICAgIHRoaXMuZGlydHkgPSBmYWxzZTtcbn07XG5cbi8qKlxuICogUmVuZGVycyB0aGUgb2JqZWN0IHVzaW5nIHRoZSBXZWJHTCByZW5kZXJlclxuICpcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5XZWJHTFJlbmRlcmVyfVxuICovXG5UZXh0LnByb3RvdHlwZS5yZW5kZXJXZWJHTCA9IGZ1bmN0aW9uIChyZW5kZXJlcilcbntcbiAgICBpZiAodGhpcy5kaXJ0eSlcbiAgICB7XG4gICAgICAgIC8vdGhpcy5yZXNvbHV0aW9uID0gMS8vcmVuZGVyZXIucmVzb2x1dGlvbjtcblxuICAgICAgICB0aGlzLnVwZGF0ZVRleHQoKTtcbiAgICB9XG5cbiAgICBTcHJpdGUucHJvdG90eXBlLnJlbmRlcldlYkdMLmNhbGwodGhpcywgcmVuZGVyZXIpO1xufTtcblxuLyoqXG4gKiBSZW5kZXJzIHRoZSBvYmplY3QgdXNpbmcgdGhlIENhbnZhcyByZW5kZXJlclxuICpcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5DYW52YXNSZW5kZXJlcn1cbiAqIEBwcml2YXRlXG4gKi9cblRleHQucHJvdG90eXBlLl9yZW5kZXJDYW52YXMgPSBmdW5jdGlvbiAocmVuZGVyZXIpXG57XG4gICAgaWYgKHRoaXMuZGlydHkpXG4gICAge1xuICAgICAvLyAgIHRoaXMucmVzb2x1dGlvbiA9IDEvL3JlbmRlcmVyLnJlc29sdXRpb247XG5cbiAgICAgICAgdGhpcy51cGRhdGVUZXh0KCk7XG4gICAgfVxuXG4gICAgU3ByaXRlLnByb3RvdHlwZS5fcmVuZGVyQ2FudmFzLmNhbGwodGhpcywgcmVuZGVyZXIpO1xufTtcblxuLyoqXG4gKiBDYWxjdWxhdGVzIHRoZSBhc2NlbnQsIGRlc2NlbnQgYW5kIGZvbnRTaXplIG9mIGEgZ2l2ZW4gZm9udFN0eWxlXG4gKlxuICogQHBhcmFtIGZvbnRTdHlsZSB7b2JqZWN0fVxuICogQHByaXZhdGVcbiAqL1xuVGV4dC5wcm90b3R5cGUuZGV0ZXJtaW5lRm9udFByb3BlcnRpZXMgPSBmdW5jdGlvbiAoZm9udFN0eWxlKVxue1xuICAgIHZhciBwcm9wZXJ0aWVzID0gVGV4dC5mb250UHJvcGVydGllc0NhY2hlW2ZvbnRTdHlsZV07XG5cbiAgICBpZiAoIXByb3BlcnRpZXMpXG4gICAge1xuICAgICAgICBwcm9wZXJ0aWVzID0ge307XG5cbiAgICAgICAgdmFyIGNhbnZhcyA9IFRleHQuZm9udFByb3BlcnRpZXNDYW52YXM7XG4gICAgICAgIHZhciBjb250ZXh0ID0gVGV4dC5mb250UHJvcGVydGllc0NvbnRleHQ7XG5cbiAgICAgICAgY29udGV4dC5mb250ID0gZm9udFN0eWxlO1xuXG4gICAgICAgIHZhciB3aWR0aCA9IE1hdGguY2VpbChjb250ZXh0Lm1lYXN1cmVUZXh0KCd8TcOJcScpLndpZHRoKTtcbiAgICAgICAgdmFyIGJhc2VsaW5lID0gTWF0aC5jZWlsKGNvbnRleHQubWVhc3VyZVRleHQoJ00nKS53aWR0aCk7XG4gICAgICAgIHZhciBoZWlnaHQgPSAyICogYmFzZWxpbmU7XG5cbiAgICAgICAgYmFzZWxpbmUgPSBiYXNlbGluZSAqIDEuNCB8IDA7XG5cbiAgICAgICAgY2FudmFzLndpZHRoID0gd2lkdGg7XG4gICAgICAgIGNhbnZhcy5oZWlnaHQgPSBoZWlnaHQ7XG5cbiAgICAgICAgY29udGV4dC5maWxsU3R5bGUgPSAnI2YwMCc7XG4gICAgICAgIGNvbnRleHQuZmlsbFJlY3QoMCwgMCwgd2lkdGgsIGhlaWdodCk7XG5cbiAgICAgICAgY29udGV4dC5mb250ID0gZm9udFN0eWxlO1xuXG4gICAgICAgIGNvbnRleHQudGV4dEJhc2VsaW5lID0gJ2FscGhhYmV0aWMnO1xuICAgICAgICBjb250ZXh0LmZpbGxTdHlsZSA9ICcjMDAwJztcbiAgICAgICAgY29udGV4dC5maWxsVGV4dCgnfE3DiXEnLCAwLCBiYXNlbGluZSk7XG5cbiAgICAgICAgdmFyIGltYWdlZGF0YSA9IGNvbnRleHQuZ2V0SW1hZ2VEYXRhKDAsIDAsIHdpZHRoLCBoZWlnaHQpLmRhdGE7XG4gICAgICAgIHZhciBwaXhlbHMgPSBpbWFnZWRhdGEubGVuZ3RoO1xuICAgICAgICB2YXIgbGluZSA9IHdpZHRoICogNDtcblxuICAgICAgICB2YXIgaSwgajtcblxuICAgICAgICB2YXIgaWR4ID0gMDtcbiAgICAgICAgdmFyIHN0b3AgPSBmYWxzZTtcblxuICAgICAgICAvLyBhc2NlbnQuIHNjYW4gZnJvbSB0b3AgdG8gYm90dG9tIHVudGlsIHdlIGZpbmQgYSBub24gcmVkIHBpeGVsXG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCBiYXNlbGluZTsgaSsrKVxuICAgICAgICB7XG4gICAgICAgICAgICBmb3IgKGogPSAwOyBqIDwgbGluZTsgaiArPSA0KVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGlmIChpbWFnZWRhdGFbaWR4ICsgal0gIT09IDI1NSlcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIHN0b3AgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIXN0b3ApXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgaWR4ICs9IGxpbmU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBwcm9wZXJ0aWVzLmFzY2VudCA9IGJhc2VsaW5lIC0gaTtcblxuICAgICAgICBpZHggPSBwaXhlbHMgLSBsaW5lO1xuICAgICAgICBzdG9wID0gZmFsc2U7XG5cbiAgICAgICAgLy8gZGVzY2VudC4gc2NhbiBmcm9tIGJvdHRvbSB0byB0b3AgdW50aWwgd2UgZmluZCBhIG5vbiByZWQgcGl4ZWxcbiAgICAgICAgZm9yIChpID0gaGVpZ2h0OyBpID4gYmFzZWxpbmU7IGktLSlcbiAgICAgICAge1xuICAgICAgICAgICAgZm9yIChqID0gMDsgaiA8IGxpbmU7IGogKz0gNClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBpZiAoaW1hZ2VkYXRhW2lkeCArIGpdICE9PSAyNTUpXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBzdG9wID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCFzdG9wKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGlkeCAtPSBsaW5lO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcHJvcGVydGllcy5kZXNjZW50ID0gaSAtIGJhc2VsaW5lO1xuICAgICAgICBwcm9wZXJ0aWVzLmZvbnRTaXplID0gcHJvcGVydGllcy5hc2NlbnQgKyBwcm9wZXJ0aWVzLmRlc2NlbnQ7XG5cbiAgICAgICAgVGV4dC5mb250UHJvcGVydGllc0NhY2hlW2ZvbnRTdHlsZV0gPSBwcm9wZXJ0aWVzO1xuICAgIH1cblxuICAgIHJldHVybiBwcm9wZXJ0aWVzO1xufTtcblxuLyoqXG4gKiBBcHBsaWVzIG5ld2xpbmVzIHRvIGEgc3RyaW5nIHRvIGhhdmUgaXQgb3B0aW1hbGx5IGZpdCBpbnRvIHRoZSBob3Jpem9udGFsXG4gKiBib3VuZHMgc2V0IGJ5IHRoZSBUZXh0IG9iamVjdCdzIHdvcmRXcmFwV2lkdGggcHJvcGVydHkuXG4gKlxuICogQHBhcmFtIHRleHQge3N0cmluZ31cbiAqIEBwcml2YXRlXG4gKi9cblRleHQucHJvdG90eXBlLndvcmRXcmFwID0gZnVuY3Rpb24gKHRleHQpXG57XG4gICAgLy8gR3JlZWR5IHdyYXBwaW5nIGFsZ29yaXRobSB0aGF0IHdpbGwgd3JhcCB3b3JkcyBhcyB0aGUgbGluZSBncm93cyBsb25nZXJcbiAgICAvLyB0aGFuIGl0cyBob3Jpem9udGFsIGJvdW5kcy5cbiAgICB2YXIgcmVzdWx0ID0gJyc7XG4gICAgdmFyIGxpbmVzID0gdGV4dC5zcGxpdCgnXFxuJyk7XG4gICAgdmFyIHdvcmRXcmFwV2lkdGggPSB0aGlzLl9zdHlsZS53b3JkV3JhcFdpZHRoO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGluZXMubGVuZ3RoOyBpKyspXG4gICAge1xuICAgICAgICB2YXIgc3BhY2VMZWZ0ID0gd29yZFdyYXBXaWR0aDtcbiAgICAgICAgdmFyIHdvcmRzID0gbGluZXNbaV0uc3BsaXQoJyAnKTtcbiAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCB3b3Jkcy5sZW5ndGg7IGorKylcbiAgICAgICAge1xuICAgICAgICAgICAgdmFyIHdvcmRXaWR0aCA9IHRoaXMuY29udGV4dC5tZWFzdXJlVGV4dCh3b3Jkc1tqXSkud2lkdGg7XG4gICAgICAgICAgICB2YXIgd29yZFdpZHRoV2l0aFNwYWNlID0gd29yZFdpZHRoICsgdGhpcy5jb250ZXh0Lm1lYXN1cmVUZXh0KCcgJykud2lkdGg7XG4gICAgICAgICAgICBpZiAoaiA9PT0gMCB8fCB3b3JkV2lkdGhXaXRoU3BhY2UgPiBzcGFjZUxlZnQpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgLy8gU2tpcCBwcmludGluZyB0aGUgbmV3bGluZSBpZiBpdCdzIHRoZSBmaXJzdCB3b3JkIG9mIHRoZSBsaW5lIHRoYXQgaXNcbiAgICAgICAgICAgICAgICAvLyBncmVhdGVyIHRoYW4gdGhlIHdvcmQgd3JhcCB3aWR0aC5cbiAgICAgICAgICAgICAgICBpZiAoaiA+IDApXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQgKz0gJ1xcbic7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJlc3VsdCArPSB3b3Jkc1tqXTtcbiAgICAgICAgICAgICAgICBzcGFjZUxlZnQgPSB3b3JkV3JhcFdpZHRoIC0gd29yZFdpZHRoO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHNwYWNlTGVmdCAtPSB3b3JkV2lkdGhXaXRoU3BhY2U7XG4gICAgICAgICAgICAgICAgcmVzdWx0ICs9ICcgJyArIHdvcmRzW2pdO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGkgPCBsaW5lcy5sZW5ndGgtMSlcbiAgICAgICAge1xuICAgICAgICAgICAgcmVzdWx0ICs9ICdcXG4nO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG59O1xuXG4vKipcbiAqIFJldHVybnMgdGhlIGJvdW5kcyBvZiB0aGUgVGV4dCBhcyBhIHJlY3RhbmdsZS4gVGhlIGJvdW5kcyBjYWxjdWxhdGlvbiB0YWtlcyB0aGUgd29ybGRUcmFuc2Zvcm0gaW50byBhY2NvdW50LlxuICpcbiAqIEBwYXJhbSBtYXRyaXgge1BJWEkuTWF0cml4fSB0aGUgdHJhbnNmb3JtYXRpb24gbWF0cml4IG9mIHRoZSBUZXh0XG4gKiBAcmV0dXJuIHtQSVhJLlJlY3RhbmdsZX0gdGhlIGZyYW1pbmcgcmVjdGFuZ2xlXG4gKi9cblRleHQucHJvdG90eXBlLmdldEJvdW5kcyA9IGZ1bmN0aW9uIChtYXRyaXgpXG57XG4gICAgaWYgKHRoaXMuZGlydHkpXG4gICAge1xuICAgICAgICB0aGlzLnVwZGF0ZVRleHQoKTtcbiAgICB9XG5cbiAgICByZXR1cm4gU3ByaXRlLnByb3RvdHlwZS5nZXRCb3VuZHMuY2FsbCh0aGlzLCBtYXRyaXgpO1xufTtcblxuLyoqXG4gKiBEZXN0cm95cyB0aGlzIHRleHQgb2JqZWN0LlxuICpcbiAqIEBwYXJhbSBbZGVzdHJveUJhc2VUZXh0dXJlPXRydWVdIHtib29sZWFufSB3aGV0aGVyIHRvIGRlc3Ryb3kgdGhlIGJhc2UgdGV4dHVyZSBhcyB3ZWxsXG4gKi9cblRleHQucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoZGVzdHJveUJhc2VUZXh0dXJlKVxue1xuICAgIC8vIG1ha2Ugc3VyZSB0byByZXNldCB0aGUgdGhlIGNvbnRleHQgYW5kIGNhbnZhcy4uIGRvbnQgd2FudCB0aGlzIGhhbmdpbmcgYXJvdW5kIGluIG1lbW9yeSFcbiAgICB0aGlzLmNvbnRleHQgPSBudWxsO1xuICAgIHRoaXMuY2FudmFzID0gbnVsbDtcblxuICAgIHRoaXMuX3N0eWxlID0gbnVsbDtcblxuICAgIHRoaXMuX3RleHR1cmUuZGVzdHJveShkZXN0cm95QmFzZVRleHR1cmUgPT09IHVuZGVmaW5lZCA/IHRydWUgOiBkZXN0cm95QmFzZVRleHR1cmUpO1xufTtcbiIsInZhciB1dGlscyA9IHJlcXVpcmUoJy4uL3V0aWxzJyksXG4gICAgQ09OU1QgPSByZXF1aXJlKCcuLi9jb25zdCcpLFxuICAgIEV2ZW50RW1pdHRlciA9IHJlcXVpcmUoJ2V2ZW50ZW1pdHRlcjMnKTtcblxuLyoqXG4gKiBBIHRleHR1cmUgc3RvcmVzIHRoZSBpbmZvcm1hdGlvbiB0aGF0IHJlcHJlc2VudHMgYW4gaW1hZ2UuIEFsbCB0ZXh0dXJlcyBoYXZlIGEgYmFzZSB0ZXh0dXJlLlxuICpcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqIEBwYXJhbSBzb3VyY2Uge0ltYWdlfENhbnZhc30gdGhlIHNvdXJjZSBvYmplY3Qgb2YgdGhlIHRleHR1cmUuXG4gKiBAcGFyYW0gW3NjYWxlTW9kZT1QSVhJLlNDQUxFX01PREVTLkRFRkFVTFRdIHtudW1iZXJ9IFNlZSB7QGxpbmsgUElYSS5TQ0FMRV9NT0RFU30gZm9yIHBvc3NpYmxlIHZhbHVlc1xuICogQHBhcmFtIHJlc29sdXRpb24ge251bWJlcn0gdGhlIHJlc29sdXRpb24gb2YgdGhlIHRleHR1cmUgZm9yIGRldmljZXMgd2l0aCBkaWZmZXJlbnQgcGl4ZWwgcmF0aW9zXG4gKi9cbmZ1bmN0aW9uIEJhc2VUZXh0dXJlKHNvdXJjZSwgc2NhbGVNb2RlLCByZXNvbHV0aW9uKVxue1xuICAgIEV2ZW50RW1pdHRlci5jYWxsKHRoaXMpO1xuXG4gICAgdGhpcy51aWQgPSB1dGlscy51aWQoKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBSZXNvbHV0aW9uIG9mIHRoZSB0ZXh0dXJlLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMucmVzb2x1dGlvbiA9IHJlc29sdXRpb24gfHwgMTtcblxuICAgIC8qKlxuICAgICAqIFRoZSB3aWR0aCBvZiB0aGUgYmFzZSB0ZXh0dXJlIHNldCB3aGVuIHRoZSBpbWFnZSBoYXMgbG9hZGVkXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQHJlYWRPbmx5XG4gICAgICovXG4gICAgdGhpcy53aWR0aCA9IDEwMDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBoZWlnaHQgb2YgdGhlIGJhc2UgdGV4dHVyZSBzZXQgd2hlbiB0aGUgaW1hZ2UgaGFzIGxvYWRlZFxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEByZWFkT25seVxuICAgICAqL1xuICAgIHRoaXMuaGVpZ2h0ID0gMTAwO1xuXG4gICAgLy8gVE9ETyBkb2NzXG4gICAgLy8gdXNlZCB0byBzdG9yZSB0aGUgYWN0dWFsIGRpbWVuc2lvbnMgb2YgdGhlIHNvdXJjZVxuICAgIC8qKlxuICAgICAqIFVzZWQgdG8gc3RvcmUgdGhlIGFjdHVhbCB3aWR0aCBvZiB0aGUgc291cmNlIG9mIHRoaXMgdGV4dHVyZVxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEByZWFkT25seVxuICAgICAqL1xuICAgIHRoaXMucmVhbFdpZHRoID0gMTAwO1xuICAgIC8qKlxuICAgICAqIFVzZWQgdG8gc3RvcmUgdGhlIGFjdHVhbCBoZWlnaHQgb2YgdGhlIHNvdXJjZSBvZiB0aGlzIHRleHR1cmVcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAcmVhZE9ubHlcbiAgICAgKi9cbiAgICB0aGlzLnJlYWxIZWlnaHQgPSAxMDA7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgc2NhbGUgbW9kZSB0byBhcHBseSB3aGVuIHNjYWxpbmcgdGhpcyB0ZXh0dXJlXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgUElYSS5TQ0FMRV9NT0RFUy5MSU5FQVJcbiAgICAgKiBAc2VlIFBJWEkuU0NBTEVfTU9ERVNcbiAgICAgKi9cbiAgICB0aGlzLnNjYWxlTW9kZSA9IHNjYWxlTW9kZSB8fCBDT05TVC5TQ0FMRV9NT0RFUy5ERUZBVUxUO1xuXG4gICAgLyoqXG4gICAgICogU2V0IHRvIHRydWUgb25jZSB0aGUgYmFzZSB0ZXh0dXJlIGhhcyBzdWNjZXNzZnVsbHkgbG9hZGVkLlxuICAgICAqXG4gICAgICogVGhpcyBpcyBuZXZlciB0cnVlIGlmIHRoZSB1bmRlcmx5aW5nIHNvdXJjZSBmYWlscyB0byBsb2FkIG9yIGhhcyBubyB0ZXh0dXJlIGRhdGEuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqIEByZWFkT25seVxuICAgICAqL1xuICAgIHRoaXMuaGFzTG9hZGVkID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBTZXQgdG8gdHJ1ZSBpZiB0aGUgc291cmNlIGlzIGN1cnJlbnRseSBsb2FkaW5nLlxuICAgICAqXG4gICAgICogSWYgYW4gSW1hZ2Ugc291cmNlIGlzIGxvYWRpbmcgdGhlICdsb2FkZWQnIG9yICdlcnJvcicgZXZlbnQgd2lsbCBiZVxuICAgICAqIGRpc3BhdGNoZWQgd2hlbiB0aGUgb3BlcmF0aW9uIGVuZHMuIEFuIHVuZGVyeWxpbmcgc291cmNlIHRoYXQgaXNcbiAgICAgKiBpbW1lZGlhdGVseS1hdmFpbGFibGUgYnlwYXNzZXMgbG9hZGluZyBlbnRpcmVseS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICogQHJlYWRvbmx5XG4gICAgICovXG4gICAgdGhpcy5pc0xvYWRpbmcgPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBpbWFnZSBzb3VyY2UgdGhhdCBpcyB1c2VkIHRvIGNyZWF0ZSB0aGUgdGV4dHVyZS5cbiAgICAgKlxuICAgICAqIFRPRE86IE1ha2UgdGhpcyBhIHNldHRlciB0aGF0IGNhbGxzIGxvYWRTb3VyY2UoKTtcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge0ltYWdlfENhbnZhc31cbiAgICAgKiBAcmVhZG9ubHlcbiAgICAgKi9cbiAgICB0aGlzLnNvdXJjZSA9IG51bGw7IC8vIHNldCBpbiBsb2FkU291cmNlLCBpZiBhdCBhbGxcblxuICAgIC8qKlxuICAgICAqIENvbnRyb2xzIGlmIFJHQiBjaGFubmVscyBzaG91bGQgYmUgcHJlLW11bHRpcGxpZWQgYnkgQWxwaGEgIChXZWJHTCBvbmx5KVxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKiBAZGVmYXVsdCB0cnVlXG4gICAgICovXG4gICAgdGhpcy5wcmVtdWx0aXBsaWVkQWxwaGEgPSB0cnVlO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7c3RyaW5nfVxuICAgICAqL1xuICAgIHRoaXMuaW1hZ2VVcmwgPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogV2V0aGVyIG9yIG5vdCB0aGUgdGV4dHVyZSBpcyBhIHBvd2VyIG9mIHR3bywgdHJ5IHRvIHVzZSBwb3dlciBvZiB0d28gdGV4dHVyZXMgYXMgbXVjaCBhcyB5b3UgY2FuXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuaXNQb3dlck9mVHdvID0gZmFsc2U7XG5cbiAgICAvLyB1c2VkIGZvciB3ZWJHTFxuXG4gICAgLyoqXG4gICAgICpcbiAgICAgKiBTZXQgdGhpcyB0byB0cnVlIGlmIGEgbWlwbWFwIG9mIHRoaXMgdGV4dHVyZSBuZWVkcyB0byBiZSBnZW5lcmF0ZWQuIFRoaXMgdmFsdWUgbmVlZHMgdG8gYmUgc2V0IGJlZm9yZSB0aGUgdGV4dHVyZSBpcyB1c2VkXG4gICAgICogQWxzbyB0aGUgdGV4dHVyZSBtdXN0IGJlIGEgcG93ZXIgb2YgdHdvIHNpemUgdG8gd29ya1xuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKi9cbiAgICB0aGlzLm1pcG1hcCA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogQSBtYXAgb2YgcmVuZGVyZXIgSURzIHRvIHdlYmdsIHRleHR1cmVzXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtvYmplY3Q8bnVtYmVyLCBXZWJHTFRleHR1cmU+fVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fZ2xUZXh0dXJlcyA9IHt9O1xuICAgIHRoaXMuX2FjdGl2ZSA9IGZhbHNlO1xuICAgIHRoaXMuX2lkID0gMDtcbiAgICBcbiAgICAvLyBpZiBubyBzb3VyY2UgcGFzc2VkIGRvbid0IHRyeSB0byBsb2FkXG4gICAgaWYgKHNvdXJjZSlcbiAgICB7XG4gICAgICAgIHRoaXMubG9hZFNvdXJjZShzb3VyY2UpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEZpcmVkIHdoZW4gYSBub3QtaW1tZWRpYXRlbHktYXZhaWxhYmxlIHNvdXJjZSBmaW5pc2hlcyBsb2FkaW5nLlxuICAgICAqXG4gICAgICogQGV2ZW50IGxvYWRlZFxuICAgICAqIEBtZW1iZXJvZiBQSVhJLkJhc2VUZXh0dXJlI1xuICAgICAqIEBwcm90ZWN0ZWRcbiAgICAgKi9cblxuICAgIC8qKlxuICAgICAqIEZpcmVkIHdoZW4gYSBub3QtaW1tZWRpYXRlbHktYXZhaWxhYmxlIHNvdXJjZSBmYWlscyB0byBsb2FkLlxuICAgICAqXG4gICAgICogQGV2ZW50IGVycm9yXG4gICAgICogQG1lbWJlcm9mIFBJWEkuQmFzZVRleHR1cmUjXG4gICAgICogQHByb3RlY3RlZFxuICAgICAqL1xufVxuXG5CYXNlVGV4dHVyZS5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKEV2ZW50RW1pdHRlci5wcm90b3R5cGUpO1xuQmFzZVRleHR1cmUucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gQmFzZVRleHR1cmU7XG5tb2R1bGUuZXhwb3J0cyA9IEJhc2VUZXh0dXJlO1xuXG4vKipcbiAqIFVwZGF0ZXMgdGhlIHRleHR1cmUgb24gYWxsIHRoZSB3ZWJnbCByZW5kZXJlcnMsIHRoaXMgYWxzbyBhc3N1bWVzIHRoZSBzcmMgaGFzIGNoYW5nZWQuXG4gKlxuICogQGZpcmVzIHVwZGF0ZVxuICovXG5CYXNlVGV4dHVyZS5wcm90b3R5cGUudXBkYXRlID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLnJlYWxXaWR0aCA9IHRoaXMuc291cmNlLm5hdHVyYWxXaWR0aCB8fCB0aGlzLnNvdXJjZS53aWR0aDtcbiAgICB0aGlzLnJlYWxIZWlnaHQgPSB0aGlzLnNvdXJjZS5uYXR1cmFsSGVpZ2h0IHx8IHRoaXMuc291cmNlLmhlaWdodDtcblxuICAgIHRoaXMud2lkdGggPSB0aGlzLnJlYWxXaWR0aCAvIHRoaXMucmVzb2x1dGlvbjtcbiAgICB0aGlzLmhlaWdodCA9IHRoaXMucmVhbEhlaWdodCAvIHRoaXMucmVzb2x1dGlvbjtcblxuICAgIHRoaXMuaXNQb3dlck9mVHdvID0gdXRpbHMuaXNQb3dlck9mVHdvKHRoaXMucmVhbFdpZHRoLCB0aGlzLnJlYWxIZWlnaHQpO1xuXG4gICAgdGhpcy5lbWl0KCd1cGRhdGUnLCB0aGlzKTtcbn07XG5cbi8qKlxuICogTG9hZCBhIHNvdXJjZS5cbiAqXG4gKiBJZiB0aGUgc291cmNlIGlzIG5vdC1pbW1lZGlhdGVseS1hdmFpbGFibGUsIHN1Y2ggYXMgYW4gaW1hZ2UgdGhhdCBuZWVkcyB0byBiZVxuICogZG93bmxvYWRlZCwgdGhlbiB0aGUgJ2xvYWRlZCcgb3IgJ2Vycm9yJyBldmVudCB3aWxsIGJlIGRpc3BhdGNoZWQgaW4gdGhlIGZ1dHVyZVxuICogYW5kIGBoYXNMb2FkZWRgIHdpbGwgcmVtYWluIGZhbHNlIGFmdGVyIHRoaXMgY2FsbC5cbiAqXG4gKiBUaGUgbG9naWMgc3RhdGUgYWZ0ZXIgY2FsbGluZyBgbG9hZFNvdXJjZWAgZGlyZWN0bHkgb3IgaW5kaXJlY3RseSAoZWcuIGBmcm9tSW1hZ2VgLCBgbmV3IEJhc2VUZXh0dXJlYCkgaXM6XG4gKlxuICogICAgIGlmICh0ZXh0dXJlLmhhc0xvYWRlZClcbiB7XG4gKiAgICAgICAgLy8gdGV4dHVyZSByZWFkeSBmb3IgdXNlXG4gKiAgICAgfSBlbHNlIGlmICh0ZXh0dXJlLmlzTG9hZGluZylcbiB7XG4gKiAgICAgICAgLy8gbGlzdGVuIHRvICdsb2FkZWQnIGFuZC9vciAnZXJyb3InIGV2ZW50cyBvbiB0ZXh0dXJlXG4gKiAgICAgfSBlbHNlIHtcbiAqICAgICAgICAvLyBub3QgbG9hZGluZywgbm90IGdvaW5nIHRvIGxvYWQgVU5MRVNTIHRoZSBzb3VyY2UgaXMgcmVsb2FkZWRcbiAqICAgICAgICAvLyAoaXQgbWF5IHN0aWxsIG1ha2Ugc2Vuc2UgdG8gbGlzdGVuIHRvIHRoZSBldmVudHMpXG4gKiAgICAgfVxuICpcbiAqIEBwcm90ZWN0ZWRcbiAqIEBwYXJhbSBzb3VyY2Uge0ltYWdlfENhbnZhc30gdGhlIHNvdXJjZSBvYmplY3Qgb2YgdGhlIHRleHR1cmUuXG4gKi9cbkJhc2VUZXh0dXJlLnByb3RvdHlwZS5sb2FkU291cmNlID0gZnVuY3Rpb24gKHNvdXJjZSlcbntcbiAgICB2YXIgd2FzTG9hZGluZyA9IHRoaXMuaXNMb2FkaW5nO1xuICAgIHRoaXMuaGFzTG9hZGVkID0gZmFsc2U7XG4gICAgdGhpcy5pc0xvYWRpbmcgPSBmYWxzZTtcblxuICAgIGlmICh3YXNMb2FkaW5nICYmIHRoaXMuc291cmNlKVxuICAgIHtcbiAgICAgICAgdGhpcy5zb3VyY2Uub25sb2FkID0gbnVsbDtcbiAgICAgICAgdGhpcy5zb3VyY2Uub25lcnJvciA9IG51bGw7XG4gICAgfVxuXG4gICAgdGhpcy5zb3VyY2UgPSBzb3VyY2U7XG5cbiAgICAvLyBBcHBseSBzb3VyY2UgaWYgbG9hZGVkLiBPdGhlcndpc2Ugc2V0dXAgYXBwcm9wcmlhdGUgbG9hZGluZyBtb25pdG9ycy5cbiAgICBpZiAoKHRoaXMuc291cmNlLmNvbXBsZXRlIHx8IHRoaXMuc291cmNlLmdldENvbnRleHQpICYmIHRoaXMuc291cmNlLndpZHRoICYmIHRoaXMuc291cmNlLmhlaWdodClcbiAgICB7XG4gICAgICAgIHRoaXMuX3NvdXJjZUxvYWRlZCgpO1xuICAgIH1cbiAgICBlbHNlIGlmICghc291cmNlLmdldENvbnRleHQpXG4gICAge1xuXG4gICAgICAgIC8vIEltYWdlIGZhaWwgLyBub3QgcmVhZHlcbiAgICAgICAgdGhpcy5pc0xvYWRpbmcgPSB0cnVlO1xuXG4gICAgICAgIHZhciBzY29wZSA9IHRoaXM7XG5cbiAgICAgICAgc291cmNlLm9ubG9hZCA9IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHNvdXJjZS5vbmxvYWQgPSBudWxsO1xuICAgICAgICAgICAgc291cmNlLm9uZXJyb3IgPSBudWxsO1xuXG4gICAgICAgICAgICBpZiAoIXNjb3BlLmlzTG9hZGluZylcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHNjb3BlLmlzTG9hZGluZyA9IGZhbHNlO1xuICAgICAgICAgICAgc2NvcGUuX3NvdXJjZUxvYWRlZCgpO1xuXG4gICAgICAgICAgICBzY29wZS5lbWl0KCdsb2FkZWQnLCBzY29wZSk7XG4gICAgICAgIH07XG5cbiAgICAgICAgc291cmNlLm9uZXJyb3IgPSBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICBzb3VyY2Uub25sb2FkID0gbnVsbDtcbiAgICAgICAgICAgIHNvdXJjZS5vbmVycm9yID0gbnVsbDtcblxuICAgICAgICAgICAgaWYgKCFzY29wZS5pc0xvYWRpbmcpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBzY29wZS5pc0xvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgICAgIHNjb3BlLmVtaXQoJ2Vycm9yJywgc2NvcGUpO1xuICAgICAgICB9O1xuXG4gICAgICAgIC8vIFBlciBodHRwOi8vd3d3LnczLm9yZy9UUi9odG1sNS9lbWJlZGRlZC1jb250ZW50LTAuaHRtbCN0aGUtaW1nLWVsZW1lbnRcbiAgICAgICAgLy8gICBcIlRoZSB2YWx1ZSBvZiBgY29tcGxldGVgIGNhbiB0aHVzIGNoYW5nZSB3aGlsZSBhIHNjcmlwdCBpcyBleGVjdXRpbmcuXCJcbiAgICAgICAgLy8gU28gY29tcGxldGUgbmVlZHMgdG8gYmUgcmUtY2hlY2tlZCBhZnRlciB0aGUgY2FsbGJhY2tzIGhhdmUgYmVlbiBhZGRlZC4uXG4gICAgICAgIC8vIE5PVEU6IGNvbXBsZXRlIHdpbGwgYmUgdHJ1ZSBpZiB0aGUgaW1hZ2UgaGFzIG5vIHNyYyBzbyBiZXN0IHRvIGNoZWNrIGlmIHRoZSBzcmMgaXMgc2V0LlxuICAgICAgICBpZiAoc291cmNlLmNvbXBsZXRlICYmIHNvdXJjZS5zcmMpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuaXNMb2FkaW5nID0gZmFsc2U7XG5cbiAgICAgICAgICAgIC8vIC4uYW5kIGlmIHdlJ3JlIGNvbXBsZXRlIG5vdywgbm8gbmVlZCBmb3IgY2FsbGJhY2tzXG4gICAgICAgICAgICBzb3VyY2Uub25sb2FkID0gbnVsbDtcbiAgICAgICAgICAgIHNvdXJjZS5vbmVycm9yID0gbnVsbDtcblxuICAgICAgICAgICAgaWYgKHNvdXJjZS53aWR0aCAmJiBzb3VyY2UuaGVpZ2h0KVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHRoaXMuX3NvdXJjZUxvYWRlZCgpO1xuXG4gICAgICAgICAgICAgICAgLy8gSWYgYW55IHByZXZpb3VzIHN1YnNjcmliZXJzIHBvc3NpYmxlXG4gICAgICAgICAgICAgICAgaWYgKHdhc0xvYWRpbmcpXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmVtaXQoJ2xvYWRlZCcsIHRoaXMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAvLyBJZiBhbnkgcHJldmlvdXMgc3Vic2NyaWJlcnMgcG9zc2libGVcbiAgICAgICAgICAgICAgICBpZiAod2FzTG9hZGluZylcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZW1pdCgnZXJyb3InLCB0aGlzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG59O1xuXG4vKipcbiAqIFVzZWQgaW50ZXJuYWxseSB0byB1cGRhdGUgdGhlIHdpZHRoLCBoZWlnaHQsIGFuZCBzb21lIG90aGVyIHRyYWNraW5nIHZhcnMgb25jZVxuICogYSBzb3VyY2UgaGFzIHN1Y2Nlc3NmdWxseSBsb2FkZWQuXG4gKlxuICogQHByaXZhdGVcbiAqL1xuQmFzZVRleHR1cmUucHJvdG90eXBlLl9zb3VyY2VMb2FkZWQgPSBmdW5jdGlvbiAoKVxue1xuICAgIHRoaXMuaGFzTG9hZGVkID0gdHJ1ZTtcbiAgICB0aGlzLnVwZGF0ZSgpO1xufTtcblxuLyoqXG4gKiBEZXN0cm95cyB0aGlzIGJhc2UgdGV4dHVyZVxuICpcbiAqL1xuQmFzZVRleHR1cmUucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoKVxue1xuICAgIGlmICh0aGlzLmltYWdlVXJsKVxuICAgIHtcbiAgICAgICAgZGVsZXRlIHV0aWxzLkJhc2VUZXh0dXJlQ2FjaGVbdGhpcy5pbWFnZVVybF07XG4gICAgICAgIGRlbGV0ZSB1dGlscy5UZXh0dXJlQ2FjaGVbdGhpcy5pbWFnZVVybF07XG5cbiAgICAgICAgdGhpcy5pbWFnZVVybCA9IG51bGw7XG5cbiAgICAgICAgaWYgKCFuYXZpZ2F0b3IuaXNDb2Nvb25KUylcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5zb3VyY2Uuc3JjID0gJyc7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZWxzZSBpZiAodGhpcy5zb3VyY2UgJiYgdGhpcy5zb3VyY2UuX3BpeGlJZClcbiAgICB7XG4gICAgICAgIGRlbGV0ZSB1dGlscy5CYXNlVGV4dHVyZUNhY2hlW3RoaXMuc291cmNlLl9waXhpSWRdO1xuICAgIH1cblxuICAgIHRoaXMuc291cmNlID0gbnVsbDtcblxuICAgIHRoaXMuZGlzcG9zZSgpO1xufTtcblxuLyoqXG4gKiBGcmVlcyB0aGUgdGV4dHVyZSBmcm9tIFdlYkdMIG1lbW9yeSB3aXRob3V0IGRlc3Ryb3lpbmcgdGhpcyB0ZXh0dXJlIG9iamVjdC5cbiAqIFRoaXMgbWVhbnMgeW91IGNhbiBzdGlsbCB1c2UgdGhlIHRleHR1cmUgbGF0ZXIgd2hpY2ggd2lsbCB1cGxvYWQgaXQgdG8gR1BVXG4gKiBtZW1vcnkgYWdhaW4uXG4gKlxuICovXG5CYXNlVGV4dHVyZS5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy5lbWl0KCdkaXNwb3NlJywgdGhpcyk7XG5cbiAgICAvLyB0aGlzIHNob3VsZCBubyBsb25nZXIgYmUgbmVlZGVkLCB0aGUgcmVuZGVyZXJzIHNob3VsZCBjbGVhbnVwIGFsbCB0aGUgZ2wgdGV4dHVyZXMuXG4gICAgLy8gdGhpcy5fZ2xUZXh0dXJlcyA9IHt9O1xufTtcblxuLyoqXG4gKiBDaGFuZ2VzIHRoZSBzb3VyY2UgaW1hZ2Ugb2YgdGhlIHRleHR1cmUuXG4gKiBUaGUgb3JpZ2luYWwgc291cmNlIG11c3QgYmUgYW4gSW1hZ2UgZWxlbWVudC5cbiAqXG4gKiBAcGFyYW0gbmV3U3JjIHtzdHJpbmd9IHRoZSBwYXRoIG9mIHRoZSBpbWFnZVxuICovXG5CYXNlVGV4dHVyZS5wcm90b3R5cGUudXBkYXRlU291cmNlSW1hZ2UgPSBmdW5jdGlvbiAobmV3U3JjKVxue1xuICAgIHRoaXMuc291cmNlLnNyYyA9IG5ld1NyYztcblxuICAgIHRoaXMubG9hZFNvdXJjZSh0aGlzLnNvdXJjZSk7XG59O1xuXG4vKipcbiAqIEhlbHBlciBmdW5jdGlvbiB0aGF0IGNyZWF0ZXMgYSBiYXNlIHRleHR1cmUgZnJvbSB0aGUgZ2l2ZW4gaW1hZ2UgdXJsLlxuICogSWYgdGhlIGltYWdlIGlzIG5vdCBpbiB0aGUgYmFzZSB0ZXh0dXJlIGNhY2hlIGl0IHdpbGwgYmUgY3JlYXRlZCBhbmQgbG9hZGVkLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBwYXJhbSBpbWFnZVVybCB7c3RyaW5nfSBUaGUgaW1hZ2UgdXJsIG9mIHRoZSB0ZXh0dXJlXG4gKiBAcGFyYW0gW2Nyb3Nzb3JpZ2luPShhdXRvKV0ge2Jvb2xlYW59IFNob3VsZCB1c2UgYW5vbnltb3VzIENPUlM/IERlZmF1bHRzIHRvIHRydWUgaWYgdGhlIFVSTCBpcyBub3QgYSBkYXRhLVVSSS5cbiAqIEBwYXJhbSBbc2NhbGVNb2RlPVBJWEkuU0NBTEVfTU9ERVMuREVGQVVMVF0ge251bWJlcn0gU2VlIHtAbGluayBQSVhJLlNDQUxFX01PREVTfSBmb3IgcG9zc2libGUgdmFsdWVzXG4gKiBAcmV0dXJuIFBJWEkuQmFzZVRleHR1cmVcbiAqL1xuQmFzZVRleHR1cmUuZnJvbUltYWdlID0gZnVuY3Rpb24gKGltYWdlVXJsLCBjcm9zc29yaWdpbiwgc2NhbGVNb2RlKVxue1xuICAgIHZhciBiYXNlVGV4dHVyZSA9IHV0aWxzLkJhc2VUZXh0dXJlQ2FjaGVbaW1hZ2VVcmxdO1xuXG4gICAgaWYgKGNyb3Nzb3JpZ2luID09PSB1bmRlZmluZWQgJiYgaW1hZ2VVcmwuaW5kZXhPZignZGF0YTonKSAhPT0gMClcbiAgICB7XG4gICAgICAgIGNyb3Nzb3JpZ2luID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBpZiAoIWJhc2VUZXh0dXJlKVxuICAgIHtcbiAgICAgICAgLy8gbmV3IEltYWdlKCkgYnJlYWtzIHRleCBsb2FkaW5nIGluIHNvbWUgdmVyc2lvbnMgb2YgQ2hyb21lLlxuICAgICAgICAvLyBTZWUgaHR0cHM6Ly9jb2RlLmdvb2dsZS5jb20vcC9jaHJvbWl1bS9pc3N1ZXMvZGV0YWlsP2lkPTIzODA3MVxuICAgICAgICB2YXIgaW1hZ2UgPSBuZXcgSW1hZ2UoKTsvL2RvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2ltZycpO1xuICAgICAgICBpZiAoY3Jvc3NvcmlnaW4pXG4gICAgICAgIHtcbiAgICAgICAgICAgIGltYWdlLmNyb3NzT3JpZ2luID0gJyc7XG4gICAgICAgIH1cblxuICAgICAgICBiYXNlVGV4dHVyZSA9IG5ldyBCYXNlVGV4dHVyZShpbWFnZSwgc2NhbGVNb2RlKTtcbiAgICAgICAgYmFzZVRleHR1cmUuaW1hZ2VVcmwgPSBpbWFnZVVybDtcblxuICAgICAgICBpbWFnZS5zcmMgPSBpbWFnZVVybDtcblxuICAgICAgICB1dGlscy5CYXNlVGV4dHVyZUNhY2hlW2ltYWdlVXJsXSA9IGJhc2VUZXh0dXJlO1xuXG4gICAgICAgIC8vIGlmIHRoZXJlIGlzIGFuIEAyeCBhdCB0aGUgZW5kIG9mIHRoZSB1cmwgd2UgYXJlIGdvaW5nIHRvIGFzc3VtZSBpdHMgYSBoaWdocmVzIGltYWdlXG4gICAgICAgIGJhc2VUZXh0dXJlLnJlc29sdXRpb24gPSB1dGlscy5nZXRSZXNvbHV0aW9uT2ZVcmwoaW1hZ2VVcmwpO1xuICAgIH1cblxuICAgIHJldHVybiBiYXNlVGV4dHVyZTtcbn07XG5cbi8qKlxuICogSGVscGVyIGZ1bmN0aW9uIHRoYXQgY3JlYXRlcyBhIGJhc2UgdGV4dHVyZSBmcm9tIHRoZSBnaXZlbiBjYW52YXMgZWxlbWVudC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAcGFyYW0gY2FudmFzIHtDYW52YXN9IFRoZSBjYW52YXMgZWxlbWVudCBzb3VyY2Ugb2YgdGhlIHRleHR1cmVcbiAqIEBwYXJhbSBzY2FsZU1vZGUge251bWJlcn0gU2VlIHtAbGluayBQSVhJLlNDQUxFX01PREVTfSBmb3IgcG9zc2libGUgdmFsdWVzXG4gKiBAcmV0dXJuIFBJWEkuQmFzZVRleHR1cmVcbiAqL1xuQmFzZVRleHR1cmUuZnJvbUNhbnZhcyA9IGZ1bmN0aW9uIChjYW52YXMsIHNjYWxlTW9kZSlcbntcbiAgICBpZiAoIWNhbnZhcy5fcGl4aUlkKVxuICAgIHtcbiAgICAgICAgY2FudmFzLl9waXhpSWQgPSAnY2FudmFzXycgKyB1dGlscy51aWQoKTtcbiAgICB9XG5cbiAgICB2YXIgYmFzZVRleHR1cmUgPSB1dGlscy5CYXNlVGV4dHVyZUNhY2hlW2NhbnZhcy5fcGl4aUlkXTtcblxuICAgIGlmICghYmFzZVRleHR1cmUpXG4gICAge1xuICAgICAgICBiYXNlVGV4dHVyZSA9IG5ldyBCYXNlVGV4dHVyZShjYW52YXMsIHNjYWxlTW9kZSk7XG4gICAgICAgIHV0aWxzLkJhc2VUZXh0dXJlQ2FjaGVbY2FudmFzLl9waXhpSWRdID0gYmFzZVRleHR1cmU7XG4gICAgfVxuXG4gICAgcmV0dXJuIGJhc2VUZXh0dXJlO1xufTtcbiIsInZhciBCYXNlVGV4dHVyZSA9IHJlcXVpcmUoJy4vQmFzZVRleHR1cmUnKSxcbiAgICBUZXh0dXJlID0gcmVxdWlyZSgnLi9UZXh0dXJlJyksXG4gICAgUmVuZGVyVGFyZ2V0ID0gcmVxdWlyZSgnLi4vcmVuZGVyZXJzL3dlYmdsL3V0aWxzL1JlbmRlclRhcmdldCcpLFxuICAgIEZpbHRlck1hbmFnZXIgPSByZXF1aXJlKCcuLi9yZW5kZXJlcnMvd2ViZ2wvbWFuYWdlcnMvRmlsdGVyTWFuYWdlcicpLFxuICAgIENhbnZhc0J1ZmZlciA9IHJlcXVpcmUoJy4uL3JlbmRlcmVycy9jYW52YXMvdXRpbHMvQ2FudmFzQnVmZmVyJyksXG4gICAgbWF0aCA9IHJlcXVpcmUoJy4uL21hdGgnKSxcbiAgICBDT05TVCA9IHJlcXVpcmUoJy4uL2NvbnN0JyksXG4gICAgdGVtcE1hdHJpeCA9IG5ldyBtYXRoLk1hdHJpeCgpO1xuXG4vKipcbiAqIEEgUmVuZGVyVGV4dHVyZSBpcyBhIHNwZWNpYWwgdGV4dHVyZSB0aGF0IGFsbG93cyBhbnkgUGl4aSBkaXNwbGF5IG9iamVjdCB0byBiZSByZW5kZXJlZCB0byBpdC5cbiAqXG4gKiBfX0hpbnRfXzogQWxsIERpc3BsYXlPYmplY3RzIChpLmUuIFNwcml0ZXMpIHRoYXQgcmVuZGVyIHRvIGEgUmVuZGVyVGV4dHVyZSBzaG91bGQgYmUgcHJlbG9hZGVkXG4gKiBvdGhlcndpc2UgYmxhY2sgcmVjdGFuZ2xlcyB3aWxsIGJlIGRyYXduIGluc3RlYWQuXG4gKlxuICogQSBSZW5kZXJUZXh0dXJlIHRha2VzIGEgc25hcHNob3Qgb2YgYW55IERpc3BsYXkgT2JqZWN0IGdpdmVuIHRvIGl0cyByZW5kZXIgbWV0aG9kLiBUaGUgcG9zaXRpb25cbiAqIGFuZCByb3RhdGlvbiBvZiB0aGUgZ2l2ZW4gRGlzcGxheSBPYmplY3RzIGlzIGlnbm9yZWQuIEZvciBleGFtcGxlOlxuICpcbiAqIGBgYGpzXG4gKiB2YXIgcmVuZGVyZXIgPSBQSVhJLmF1dG9EZXRlY3RSZW5kZXJlcigxMDI0LCAxMDI0LCB7IHZpZXc6IGNhbnZhcywgcmF0aW86IDEgfSk7XG4gKiB2YXIgcmVuZGVyVGV4dHVyZSA9IG5ldyBQSVhJLlJlbmRlclRleHR1cmUocmVuZGVyZXIsIDgwMCwgNjAwKTtcbiAqIHZhciBzcHJpdGUgPSBQSVhJLlNwcml0ZS5mcm9tSW1hZ2UoXCJzcGluT2JqXzAxLnBuZ1wiKTtcbiAqXG4gKiBzcHJpdGUucG9zaXRpb24ueCA9IDgwMC8yO1xuICogc3ByaXRlLnBvc2l0aW9uLnkgPSA2MDAvMjtcbiAqIHNwcml0ZS5hbmNob3IueCA9IDAuNTtcbiAqIHNwcml0ZS5hbmNob3IueSA9IDAuNTtcbiAqXG4gKiByZW5kZXJUZXh0dXJlLnJlbmRlcihzcHJpdGUpO1xuICogYGBgXG4gKlxuICogVGhlIFNwcml0ZSBpbiB0aGlzIGNhc2Ugd2lsbCBiZSByZW5kZXJlZCB0byBhIHBvc2l0aW9uIG9mIDAsMC4gVG8gcmVuZGVyIHRoaXMgc3ByaXRlIGF0IGl0cyBhY3R1YWxcbiAqIHBvc2l0aW9uIGEgQ29udGFpbmVyIHNob3VsZCBiZSB1c2VkOlxuICpcbiAqIGBgYGpzXG4gKiB2YXIgZG9jID0gbmV3IFBJWEkuQ29udGFpbmVyKCk7XG4gKlxuICogZG9jLmFkZENoaWxkKHNwcml0ZSk7XG4gKlxuICogcmVuZGVyVGV4dHVyZS5yZW5kZXIoZG9jKTsgIC8vIFJlbmRlcnMgdG8gY2VudGVyIG9mIHJlbmRlclRleHR1cmVcbiAqIGBgYFxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5UZXh0dXJlXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLkNhbnZhc1JlbmRlcmVyfFBJWEkuV2ViR0xSZW5kZXJlcn0gVGhlIHJlbmRlcmVyIHVzZWQgZm9yIHRoaXMgUmVuZGVyVGV4dHVyZVxuICogQHBhcmFtIFt3aWR0aD0xMDBdIHtudW1iZXJ9IFRoZSB3aWR0aCBvZiB0aGUgcmVuZGVyIHRleHR1cmVcbiAqIEBwYXJhbSBbaGVpZ2h0PTEwMF0ge251bWJlcn0gVGhlIGhlaWdodCBvZiB0aGUgcmVuZGVyIHRleHR1cmVcbiAqIEBwYXJhbSBbc2NhbGVNb2RlXSB7bnVtYmVyfSBTZWUge0BsaW5rIFBJWEkuU0NBTEVfTU9ERVN9IGZvciBwb3NzaWJsZSB2YWx1ZXNcbiAqIEBwYXJhbSBbcmVzb2x1dGlvbj0xXSB7bnVtYmVyfSBUaGUgcmVzb2x1dGlvbiBvZiB0aGUgdGV4dHVyZSBiZWluZyBnZW5lcmF0ZWRcbiAqL1xuZnVuY3Rpb24gUmVuZGVyVGV4dHVyZShyZW5kZXJlciwgd2lkdGgsIGhlaWdodCwgc2NhbGVNb2RlLCByZXNvbHV0aW9uKVxue1xuICAgIGlmICghcmVuZGVyZXIpXG4gICAge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1VuYWJsZSB0byBjcmVhdGUgUmVuZGVyVGV4dHVyZSwgeW91IG11c3QgcGFzcyBhIHJlbmRlcmVyIGludG8gdGhlIGNvbnN0cnVjdG9yLicpO1xuICAgIH1cblxuICAgIHdpZHRoID0gd2lkdGggfHwgMTAwO1xuICAgIGhlaWdodCA9IGhlaWdodCB8fCAxMDA7XG4gICAgcmVzb2x1dGlvbiA9IHJlc29sdXRpb24gfHwgQ09OU1QuUkVTT0xVVElPTjtcblxuICAgIC8qKlxuICAgICAqIFRoZSBiYXNlIHRleHR1cmUgb2JqZWN0IHRoYXQgdGhpcyB0ZXh0dXJlIHVzZXNcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge0Jhc2VUZXh0dXJlfVxuICAgICAqL1xuICAgIHZhciBiYXNlVGV4dHVyZSA9IG5ldyBCYXNlVGV4dHVyZSgpO1xuICAgIGJhc2VUZXh0dXJlLndpZHRoID0gd2lkdGg7XG4gICAgYmFzZVRleHR1cmUuaGVpZ2h0ID0gaGVpZ2h0O1xuICAgIGJhc2VUZXh0dXJlLnJlc29sdXRpb24gPSByZXNvbHV0aW9uO1xuICAgIGJhc2VUZXh0dXJlLnNjYWxlTW9kZSA9IHNjYWxlTW9kZSB8fCBDT05TVC5TQ0FMRV9NT0RFUy5ERUZBVUxUO1xuICAgIGJhc2VUZXh0dXJlLmhhc0xvYWRlZCA9IHRydWU7XG5cblxuICAgIFRleHR1cmUuY2FsbCh0aGlzLFxuICAgICAgICBiYXNlVGV4dHVyZSxcbiAgICAgICAgbmV3IG1hdGguUmVjdGFuZ2xlKDAsIDAsIHdpZHRoLCBoZWlnaHQpXG4gICAgKTtcblxuXG4gICAgLyoqXG4gICAgICogVGhlIHdpdGggb2YgdGhlIHJlbmRlciB0ZXh0dXJlXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy53aWR0aCA9IHdpZHRoO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGhlaWdodCBvZiB0aGUgcmVuZGVyIHRleHR1cmVcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLmhlaWdodCA9IGhlaWdodDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBSZXNvbHV0aW9uIG9mIHRoZSB0ZXh0dXJlLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMucmVzb2x1dGlvbiA9IHJlc29sdXRpb247XG5cbiAgICAvKipcbiAgICAgKiBEcmF3L3JlbmRlciB0aGUgZ2l2ZW4gRGlzcGxheU9iamVjdCBvbnRvIHRoZSB0ZXh0dXJlLlxuICAgICAqXG4gICAgICogVGhlIGRpc3BsYXlPYmplY3QgYW5kIGRlc2NlbmRlbnRzIGFyZSB0cmFuc2Zvcm1lZCBkdXJpbmcgdGhpcyBvcGVyYXRpb24uXG4gICAgICogSWYgYHVwZGF0ZVRyYW5zZm9ybWAgaXMgdHJ1ZSB0aGVuIHRoZSB0cmFuc2Zvcm1hdGlvbnMgd2lsbCBiZSByZXN0b3JlZCBiZWZvcmUgdGhlXG4gICAgICogbWV0aG9kIHJldHVybnMuIE90aGVyd2lzZSBpdCBpcyB1cCB0byB0aGUgY2FsbGluZyBjb2RlIHRvIGNvcnJlY3RseSB1c2Ugb3IgcmVzZXRcbiAgICAgKiB0aGUgdHJhbnNmb3JtZWQgZGlzcGxheSBvYmplY3RzLlxuICAgICAqXG4gICAgICogVGhlIGRpc3BsYXkgb2JqZWN0IGlzIGFsd2F5cyByZW5kZXJlZCB3aXRoIGEgd29ybGRBbHBoYSB2YWx1ZSBvZiAxLlxuICAgICAqXG4gICAgICogQG1ldGhvZFxuICAgICAqIEBwYXJhbSBkaXNwbGF5T2JqZWN0IHtQSVhJLkRpc3BsYXlPYmplY3R9IFRoZSBkaXNwbGF5IG9iamVjdCB0byByZW5kZXIgdGhpcyB0ZXh0dXJlIG9uXG4gICAgICogQHBhcmFtIFttYXRyaXhdIHtQSVhJLk1hdHJpeH0gT3B0aW9uYWwgbWF0cml4IHRvIGFwcGx5IHRvIHRoZSBkaXNwbGF5IG9iamVjdCBiZWZvcmUgcmVuZGVyaW5nLlxuICAgICAqIEBwYXJhbSBbY2xlYXI9ZmFsc2VdIHtib29sZWFufSBJZiB0cnVlIHRoZSB0ZXh0dXJlIHdpbGwgYmUgY2xlYXJlZCBiZWZvcmUgdGhlIGRpc3BsYXlPYmplY3QgaXMgZHJhd25cbiAgICAgKiBAcGFyYW0gW3VwZGF0ZVRyYW5zZm9ybT10cnVlXSB7Ym9vbGVhbn0gSWYgdHJ1ZSB0aGUgZGlzcGxheU9iamVjdCdzIHdvcmxkVHJhbnNmb3JtL3dvcmxkQWxwaGEgYW5kIGFsbCBjaGlsZHJlblxuICAgICAqICB0cmFuc2Zvcm1hdGlvbnMgd2lsbCBiZSByZXN0b3JlZC4gTm90IHJlc3RvcmluZyB0aGlzIGluZm9ybWF0aW9uIHdpbGwgYmUgYSBsaXR0bGUgZmFzdGVyLlxuICAgICAqL1xuICAgIHRoaXMucmVuZGVyID0gbnVsbDtcblxuICAgIC8qKlxuICAgICAqIFRoZSByZW5kZXJlciB0aGlzIFJlbmRlclRleHR1cmUgdXNlcy4gQSBSZW5kZXJUZXh0dXJlIGNhbiBvbmx5IGJlbG9uZyB0byBvbmUgcmVuZGVyZXIgYXQgdGhlIG1vbWVudCBpZiBpdHMgd2ViR0wuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLkNhbnZhc1JlbmRlcmVyfFBJWEkuV2ViR0xSZW5kZXJlcn1cbiAgICAgKi9cbiAgICB0aGlzLnJlbmRlcmVyID0gcmVuZGVyZXI7XG5cbiAgICBpZiAodGhpcy5yZW5kZXJlci50eXBlID09PSBDT05TVC5SRU5ERVJFUl9UWVBFLldFQkdMKVxuICAgIHtcbiAgICAgICAgdmFyIGdsID0gdGhpcy5yZW5kZXJlci5nbDtcblxuICAgICAgICB0aGlzLnRleHR1cmVCdWZmZXIgPSBuZXcgUmVuZGVyVGFyZ2V0KGdsLCB0aGlzLndpZHRoLCB0aGlzLmhlaWdodCwgYmFzZVRleHR1cmUuc2NhbGVNb2RlLCB0aGlzLnJlc29sdXRpb24pOy8vLCB0aGlzLmJhc2VUZXh0dXJlLnNjYWxlTW9kZSk7XG4gICAgICAgIHRoaXMuYmFzZVRleHR1cmUuX2dsVGV4dHVyZXNbZ2wuaWRdID0gdGhpcy50ZXh0dXJlQnVmZmVyLnRleHR1cmU7XG5cbiAgICAgICAgLy9UT0RPIHJlZmFjdG9yIGZpbHRlciBtYW5hZ2VyLi4gYXMgcmVhbGx5IGl0cyBubyBsb25nZXIgYSBtYW5hZ2VyIGlmIHdlIHVzZSBpdCBoZXJlLi5cbiAgICAgICAgdGhpcy5maWx0ZXJNYW5hZ2VyID0gbmV3IEZpbHRlck1hbmFnZXIodGhpcy5yZW5kZXJlcik7XG4gICAgICAgIHRoaXMuZmlsdGVyTWFuYWdlci5vbkNvbnRleHRDaGFuZ2UoKTtcbiAgICAgICAgdGhpcy5maWx0ZXJNYW5hZ2VyLnJlc2l6ZSh3aWR0aCwgaGVpZ2h0KTtcbiAgICAgICAgdGhpcy5yZW5kZXIgPSB0aGlzLnJlbmRlcldlYkdMO1xuXG4gICAgICAgIC8vIHRoZSBjcmVhdGlvbiBvZiBhIGZpbHRlciBtYW5hZ2VyIHVuYmluZHMgdGhlIGJ1ZmZlcnMuLlxuICAgICAgICB0aGlzLnJlbmRlcmVyLmN1cnJlbnRSZW5kZXJlci5zdGFydCgpO1xuICAgICAgICB0aGlzLnJlbmRlcmVyLmN1cnJlbnRSZW5kZXJUYXJnZXQuYWN0aXZhdGUoKTtcbiAgICB9XG4gICAgZWxzZVxuICAgIHtcblxuICAgICAgICB0aGlzLnJlbmRlciA9IHRoaXMucmVuZGVyQ2FudmFzO1xuICAgICAgICB0aGlzLnRleHR1cmVCdWZmZXIgPSBuZXcgQ2FudmFzQnVmZmVyKHRoaXMud2lkdGgqIHRoaXMucmVzb2x1dGlvbiwgdGhpcy5oZWlnaHQqIHRoaXMucmVzb2x1dGlvbik7XG4gICAgICAgIHRoaXMuYmFzZVRleHR1cmUuc291cmNlID0gdGhpcy50ZXh0dXJlQnVmZmVyLmNhbnZhcztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqL1xuICAgIHRoaXMudmFsaWQgPSB0cnVlO1xuXG4gICAgdGhpcy5fdXBkYXRlVXZzKCk7XG59XG5cblJlbmRlclRleHR1cmUucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShUZXh0dXJlLnByb3RvdHlwZSk7XG5SZW5kZXJUZXh0dXJlLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFJlbmRlclRleHR1cmU7XG5tb2R1bGUuZXhwb3J0cyA9IFJlbmRlclRleHR1cmU7XG5cbi8qKlxuICogUmVzaXplcyB0aGUgUmVuZGVyVGV4dHVyZS5cbiAqXG4gKiBAcGFyYW0gd2lkdGgge251bWJlcn0gVGhlIHdpZHRoIHRvIHJlc2l6ZSB0by5cbiAqIEBwYXJhbSBoZWlnaHQge251bWJlcn0gVGhlIGhlaWdodCB0byByZXNpemUgdG8uXG4gKiBAcGFyYW0gdXBkYXRlQmFzZSB7Ym9vbGVhbn0gU2hvdWxkIHRoZSBiYXNlVGV4dHVyZS53aWR0aCBhbmQgaGVpZ2h0IHZhbHVlcyBiZSByZXNpemVkIGFzIHdlbGw/XG4gKi9cblJlbmRlclRleHR1cmUucHJvdG90eXBlLnJlc2l6ZSA9IGZ1bmN0aW9uICh3aWR0aCwgaGVpZ2h0LCB1cGRhdGVCYXNlKVxue1xuICAgIGlmICh3aWR0aCA9PT0gdGhpcy53aWR0aCAmJiBoZWlnaHQgPT09IHRoaXMuaGVpZ2h0KVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMudmFsaWQgPSAod2lkdGggPiAwICYmIGhlaWdodCA+IDApO1xuXG4gICAgdGhpcy53aWR0aCA9IHRoaXMuX2ZyYW1lLndpZHRoID0gdGhpcy5jcm9wLndpZHRoID0gd2lkdGg7XG4gICAgdGhpcy5oZWlnaHQgPSAgdGhpcy5fZnJhbWUuaGVpZ2h0ID0gdGhpcy5jcm9wLmhlaWdodCA9IGhlaWdodDtcblxuICAgIGlmICh1cGRhdGVCYXNlKVxuICAgIHtcbiAgICAgICAgdGhpcy5iYXNlVGV4dHVyZS53aWR0aCA9IHRoaXMud2lkdGg7XG4gICAgICAgIHRoaXMuYmFzZVRleHR1cmUuaGVpZ2h0ID0gdGhpcy5oZWlnaHQ7XG4gICAgfVxuXG4gICAgaWYgKCF0aGlzLnZhbGlkKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMudGV4dHVyZUJ1ZmZlci5yZXNpemUodGhpcy53aWR0aCwgdGhpcy5oZWlnaHQpO1xuXG4gICAgaWYodGhpcy5maWx0ZXJNYW5hZ2VyKVxuICAgIHtcbiAgICAgICAgdGhpcy5maWx0ZXJNYW5hZ2VyLnJlc2l6ZSh0aGlzLndpZHRoLCB0aGlzLmhlaWdodCk7XG4gICAgfVxufTtcblxuLyoqXG4gKiBDbGVhcnMgdGhlIFJlbmRlclRleHR1cmUuXG4gKlxuICovXG5SZW5kZXJUZXh0dXJlLnByb3RvdHlwZS5jbGVhciA9IGZ1bmN0aW9uICgpXG57XG4gICAgaWYgKCF0aGlzLnZhbGlkKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnJlbmRlcmVyLnR5cGUgPT09IENPTlNULlJFTkRFUkVSX1RZUEUuV0VCR0wpXG4gICAge1xuICAgICAgICB0aGlzLnJlbmRlcmVyLmdsLmJpbmRGcmFtZWJ1ZmZlcih0aGlzLnJlbmRlcmVyLmdsLkZSQU1FQlVGRkVSLCB0aGlzLnRleHR1cmVCdWZmZXIuZnJhbWVCdWZmZXIpO1xuICAgIH1cblxuICAgIHRoaXMudGV4dHVyZUJ1ZmZlci5jbGVhcigpO1xufTtcblxuLyoqXG4gKiBJbnRlcm5hbCBtZXRob2QgYXNzaWduZWQgdG8gdGhlIGByZW5kZXJgIHByb3BlcnR5IGlmIHVzaW5nIGEgQ2FudmFzUmVuZGVyZXIuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSBkaXNwbGF5T2JqZWN0IHtQSVhJLkRpc3BsYXlPYmplY3R9IFRoZSBkaXNwbGF5IG9iamVjdCB0byByZW5kZXIgdGhpcyB0ZXh0dXJlIG9uXG4gKiBAcGFyYW0gW21hdHJpeF0ge1BJWEkuTWF0cml4fSBPcHRpb25hbCBtYXRyaXggdG8gYXBwbHkgdG8gdGhlIGRpc3BsYXkgb2JqZWN0IGJlZm9yZSByZW5kZXJpbmcuXG4gKiBAcGFyYW0gW2NsZWFyPWZhbHNlXSB7Ym9vbGVhbn0gSWYgdHJ1ZSB0aGUgdGV4dHVyZSB3aWxsIGJlIGNsZWFyZWQgYmVmb3JlIHRoZSBkaXNwbGF5T2JqZWN0IGlzIGRyYXduXG4gKiBAcGFyYW0gW3VwZGF0ZVRyYW5zZm9ybT10cnVlXSB7Ym9vbGVhbn0gSWYgdHJ1ZSB0aGUgZGlzcGxheU9iamVjdCdzIHdvcmxkVHJhbnNmb3JtL3dvcmxkQWxwaGEgYW5kIGFsbCBjaGlsZHJlblxuICogIHRyYW5zZm9ybWF0aW9ucyB3aWxsIGJlIHJlc3RvcmVkLiBOb3QgcmVzdG9yaW5nIHRoaXMgaW5mb3JtYXRpb24gd2lsbCBiZSBhIGxpdHRsZSBmYXN0ZXIuXG4gKi9cblJlbmRlclRleHR1cmUucHJvdG90eXBlLnJlbmRlcldlYkdMID0gZnVuY3Rpb24gKGRpc3BsYXlPYmplY3QsIG1hdHJpeCwgY2xlYXIsIHVwZGF0ZVRyYW5zZm9ybSlcbntcbiAgICBpZiAoIXRoaXMudmFsaWQpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG5cbiAgICB1cGRhdGVUcmFuc2Zvcm0gPSAodXBkYXRlVHJhbnNmb3JtICE9PSB1bmRlZmluZWQpID8gdXBkYXRlVHJhbnNmb3JtIDogdHJ1ZTsvLyF1cGRhdGVUcmFuc2Zvcm07XG5cbiAgICB0aGlzLnRleHR1cmVCdWZmZXIudHJhbnNmb3JtID0gbWF0cml4O1xuXG4gICAgLy9UT0RPIG5vdCBhIGZhbiB0aGF0IHRoaXMgaXMgaGVyZS4uLiBpdCB3aWxsIG1vdmUhXG4gICAgdGhpcy50ZXh0dXJlQnVmZmVyLmFjdGl2YXRlKCk7XG5cbiAgICAvLyBzZXRXb3JsZCBBbHBoYSB0byBlbnN1cmUgdGhhdCB0aGUgb2JqZWN0IGlzIHJlbmRlcmVyIGF0IGZ1bGwgb3BhY2l0eVxuICAgIGRpc3BsYXlPYmplY3Qud29ybGRBbHBoYSA9IDE7XG5cbiAgICBpZiAodXBkYXRlVHJhbnNmb3JtKVxuICAgIHtcblxuICAgICAgICAvLyByZXNldCB0aGUgbWF0cml4IG9mIHRoZSBkaXNwbGF0eU9iamVjdC4uXG4gICAgICAgIGRpc3BsYXlPYmplY3Qud29ybGRUcmFuc2Zvcm0uaWRlbnRpdHkoKTtcblxuICAgICAgICBkaXNwbGF5T2JqZWN0LmN1cnJlbnRCb3VuZHMgPSBudWxsO1xuXG4gICAgICAgIC8vIFRpbWUgdG8gdXBkYXRlIGFsbCB0aGUgY2hpbGRyZW4gb2YgdGhlIGRpc3BsYXlPYmplY3Qgd2l0aCB0aGUgbmV3IG1hdHJpeC4uXG4gICAgICAgIHZhciBjaGlsZHJlbiA9IGRpc3BsYXlPYmplY3QuY2hpbGRyZW47XG4gICAgICAgIHZhciBpLCBqO1xuXG4gICAgICAgIGZvciAoaSA9IDAsIGogPSBjaGlsZHJlbi5sZW5ndGg7IGkgPCBqOyArK2kpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNoaWxkcmVuW2ldLnVwZGF0ZVRyYW5zZm9ybSgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy9UT0RPIHJlbmFtZSB0ZXh0dXJlQnVmZmVyIHRvIHJlbmRlclRhcmdldC4uXG4gICAgdmFyIHRlbXAgPSAgdGhpcy5yZW5kZXJlci5maWx0ZXJNYW5hZ2VyO1xuXG4gICAgdGhpcy5yZW5kZXJlci5maWx0ZXJNYW5hZ2VyID0gdGhpcy5maWx0ZXJNYW5hZ2VyO1xuICAgIHRoaXMucmVuZGVyZXIucmVuZGVyRGlzcGxheU9iamVjdChkaXNwbGF5T2JqZWN0LCB0aGlzLnRleHR1cmVCdWZmZXIsIGNsZWFyKTtcblxuICAgIHRoaXMucmVuZGVyZXIuZmlsdGVyTWFuYWdlciA9IHRlbXA7XG59O1xuXG5cbi8qKlxuICogSW50ZXJuYWwgbWV0aG9kIGFzc2lnbmVkIHRvIHRoZSBgcmVuZGVyYCBwcm9wZXJ0eSBpZiB1c2luZyBhIENhbnZhc1JlbmRlcmVyLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0gZGlzcGxheU9iamVjdCB7UElYSS5EaXNwbGF5T2JqZWN0fSBUaGUgZGlzcGxheSBvYmplY3QgdG8gcmVuZGVyIHRoaXMgdGV4dHVyZSBvblxuICogQHBhcmFtIFttYXRyaXhdIHtQSVhJLk1hdHJpeH0gT3B0aW9uYWwgbWF0cml4IHRvIGFwcGx5IHRvIHRoZSBkaXNwbGF5IG9iamVjdCBiZWZvcmUgcmVuZGVyaW5nLlxuICogQHBhcmFtIFtjbGVhcl0ge2Jvb2xlYW59IElmIHRydWUgdGhlIHRleHR1cmUgd2lsbCBiZSBjbGVhcmVkIGJlZm9yZSB0aGUgZGlzcGxheU9iamVjdCBpcyBkcmF3blxuICovXG5SZW5kZXJUZXh0dXJlLnByb3RvdHlwZS5yZW5kZXJDYW52YXMgPSBmdW5jdGlvbiAoZGlzcGxheU9iamVjdCwgbWF0cml4LCBjbGVhciwgdXBkYXRlVHJhbnNmb3JtKVxue1xuICAgIGlmICghdGhpcy52YWxpZClcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB1cGRhdGVUcmFuc2Zvcm0gPSAhIXVwZGF0ZVRyYW5zZm9ybTtcblxuICAgIHZhciB3dCA9IHRlbXBNYXRyaXg7XG5cbiAgICB3dC5pZGVudGl0eSgpO1xuXG4gICAgaWYgKG1hdHJpeClcbiAgICB7XG4gICAgICAgIHd0LmFwcGVuZChtYXRyaXgpO1xuICAgIH1cblxuICAgIHZhciBjYWNoZWRXdCA9IGRpc3BsYXlPYmplY3Qud29ybGRUcmFuc2Zvcm07XG4gICAgZGlzcGxheU9iamVjdC53b3JsZFRyYW5zZm9ybSA9IHd0O1xuXG4gICAgLy8gc2V0V29ybGQgQWxwaGEgdG8gZW5zdXJlIHRoYXQgdGhlIG9iamVjdCBpcyByZW5kZXJlciBhdCBmdWxsIG9wYWNpdHlcbiAgICBkaXNwbGF5T2JqZWN0LndvcmxkQWxwaGEgPSAxO1xuXG4gICAgLy8gVGltZSB0byB1cGRhdGUgYWxsIHRoZSBjaGlsZHJlbiBvZiB0aGUgZGlzcGxheU9iamVjdCB3aXRoIHRoZSBuZXcgbWF0cml4Li5cbiAgICB2YXIgY2hpbGRyZW4gPSBkaXNwbGF5T2JqZWN0LmNoaWxkcmVuO1xuICAgIHZhciBpLCBqO1xuXG4gICAgZm9yIChpID0gMCwgaiA9IGNoaWxkcmVuLmxlbmd0aDsgaSA8IGo7ICsraSlcbiAgICB7XG4gICAgICAgIGNoaWxkcmVuW2ldLnVwZGF0ZVRyYW5zZm9ybSgpO1xuICAgIH1cblxuICAgIGlmIChjbGVhcilcbiAgICB7XG4gICAgICAgIHRoaXMudGV4dHVyZUJ1ZmZlci5jbGVhcigpO1xuICAgIH1cblxuXG4vLyAgICB0aGlzLnRleHR1cmVCdWZmZXIuXG4gICAgdmFyIGNvbnRleHQgPSB0aGlzLnRleHR1cmVCdWZmZXIuY29udGV4dDtcblxuICAgIHZhciByZWFsUmVzb2x1dGlvbiA9IHRoaXMucmVuZGVyZXIucmVzb2x1dGlvbjtcblxuICAgIHRoaXMucmVuZGVyZXIucmVzb2x1dGlvbiA9IHRoaXMucmVzb2x1dGlvbjtcblxuICAgIHRoaXMucmVuZGVyZXIucmVuZGVyRGlzcGxheU9iamVjdChkaXNwbGF5T2JqZWN0LCBjb250ZXh0KTtcblxuICAgIHRoaXMucmVuZGVyZXIucmVzb2x1dGlvbiA9IHJlYWxSZXNvbHV0aW9uO1xuXG4gICAgaWYoZGlzcGxheU9iamVjdC53b3JsZFRyYW5zZm9ybSA9PT0gd3QpXG4gICAge1xuICAgICAgICAvLyBmaXhlcyBjYWNoZUFzQml0bWFwIEhhcHBlbmluZyBkdXJpbmcgdGhlIGFib3ZlLi5cbiAgICAgICAgZGlzcGxheU9iamVjdC53b3JsZFRyYW5zZm9ybSA9IGNhY2hlZFd0O1xuICAgIH1cblxufTtcblxuLyoqXG4gKiBEZXN0cm95cyB0aGlzIHRleHR1cmVcbiAqXG4gKiBAcGFyYW0gZGVzdHJveUJhc2Uge2Jvb2xlYW59IFdoZXRoZXIgdG8gZGVzdHJveSB0aGUgYmFzZSB0ZXh0dXJlIGFzIHdlbGxcbiAqL1xuUmVuZGVyVGV4dHVyZS5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uICgpXG57XG4gICAgVGV4dHVyZS5wcm90b3R5cGUuZGVzdHJveS5jYWxsKHRoaXMsIHRydWUpO1xuXG4gICAgdGhpcy50ZXh0dXJlQnVmZmVyLmRlc3Ryb3koKTtcblxuICAgIC8vIGRlc3Ryb3kgdGhlIGZpbHRlcm1hbmFnZXIuLlxuICAgIGlmKHRoaXMuZmlsdGVyTWFuYWdlcilcbiAgICB7XG4gICAgICAgIHRoaXMuZmlsdGVyTWFuYWdlci5kZXN0cm95KCk7XG4gICAgfVxuXG4gICAgdGhpcy5yZW5kZXJlciA9IG51bGw7XG59O1xuXG4vKipcbiAqIFdpbGwgcmV0dXJuIGEgSFRNTCBJbWFnZSBvZiB0aGUgdGV4dHVyZVxuICpcbiAqIEByZXR1cm4ge0ltYWdlfVxuICovXG5SZW5kZXJUZXh0dXJlLnByb3RvdHlwZS5nZXRJbWFnZSA9IGZ1bmN0aW9uICgpXG57XG4gICAgdmFyIGltYWdlID0gbmV3IEltYWdlKCk7XG4gICAgaW1hZ2Uuc3JjID0gdGhpcy5nZXRCYXNlNjQoKTtcbiAgICByZXR1cm4gaW1hZ2U7XG59O1xuXG4vKipcbiAqIFdpbGwgcmV0dXJuIGEgYSBiYXNlNjQgZW5jb2RlZCBzdHJpbmcgb2YgdGhpcyB0ZXh0dXJlLiBJdCB3b3JrcyBieSBjYWxsaW5nIFJlbmRlclRleHR1cmUuZ2V0Q2FudmFzIGFuZCB0aGVuIHJ1bm5pbmcgdG9EYXRhVVJMIG9uIHRoYXQuXG4gKlxuICogQHJldHVybiB7c3RyaW5nfSBBIGJhc2U2NCBlbmNvZGVkIHN0cmluZyBvZiB0aGUgdGV4dHVyZS5cbiAqL1xuUmVuZGVyVGV4dHVyZS5wcm90b3R5cGUuZ2V0QmFzZTY0ID0gZnVuY3Rpb24gKClcbntcbiAgICByZXR1cm4gdGhpcy5nZXRDYW52YXMoKS50b0RhdGFVUkwoKTtcbn07XG5cbi8qKlxuICogQ3JlYXRlcyBhIENhbnZhcyBlbGVtZW50LCByZW5kZXJzIHRoaXMgUmVuZGVyVGV4dHVyZSB0byBpdCBhbmQgdGhlbiByZXR1cm5zIGl0LlxuICpcbiAqIEByZXR1cm4ge0hUTUxDYW52YXNFbGVtZW50fSBBIENhbnZhcyBlbGVtZW50IHdpdGggdGhlIHRleHR1cmUgcmVuZGVyZWQgb24uXG4gKi9cblJlbmRlclRleHR1cmUucHJvdG90eXBlLmdldENhbnZhcyA9IGZ1bmN0aW9uICgpXG57XG4gICAgaWYgKHRoaXMucmVuZGVyZXIudHlwZSA9PT0gQ09OU1QuUkVOREVSRVJfVFlQRS5XRUJHTClcbiAgICB7XG4gICAgICAgIHZhciBnbCA9IHRoaXMucmVuZGVyZXIuZ2w7XG4gICAgICAgIHZhciB3aWR0aCA9IHRoaXMudGV4dHVyZUJ1ZmZlci5zaXplLndpZHRoO1xuICAgICAgICB2YXIgaGVpZ2h0ID0gdGhpcy50ZXh0dXJlQnVmZmVyLnNpemUuaGVpZ2h0O1xuXG4gICAgICAgIHZhciB3ZWJHTFBpeGVscyA9IG5ldyBVaW50OEFycmF5KDQgKiB3aWR0aCAqIGhlaWdodCk7XG5cbiAgICAgICAgZ2wuYmluZEZyYW1lYnVmZmVyKGdsLkZSQU1FQlVGRkVSLCB0aGlzLnRleHR1cmVCdWZmZXIuZnJhbWVCdWZmZXIpO1xuICAgICAgICBnbC5yZWFkUGl4ZWxzKDAsIDAsIHdpZHRoLCBoZWlnaHQsIGdsLlJHQkEsIGdsLlVOU0lHTkVEX0JZVEUsIHdlYkdMUGl4ZWxzKTtcbiAgICAgICAgZ2wuYmluZEZyYW1lYnVmZmVyKGdsLkZSQU1FQlVGRkVSLCBudWxsKTtcblxuICAgICAgICB2YXIgdGVtcENhbnZhcyA9IG5ldyBDYW52YXNCdWZmZXIod2lkdGgsIGhlaWdodCk7XG4gICAgICAgIHZhciBjYW52YXNEYXRhID0gdGVtcENhbnZhcy5jb250ZXh0LmdldEltYWdlRGF0YSgwLCAwLCB3aWR0aCwgaGVpZ2h0KTtcbiAgICAgICAgY2FudmFzRGF0YS5kYXRhLnNldCh3ZWJHTFBpeGVscyk7XG5cbiAgICAgICAgdGVtcENhbnZhcy5jb250ZXh0LnB1dEltYWdlRGF0YShjYW52YXNEYXRhLCAwLCAwKTtcblxuICAgICAgICByZXR1cm4gdGVtcENhbnZhcy5jYW52YXM7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHJldHVybiB0aGlzLnRleHR1cmVCdWZmZXIuY2FudmFzO1xuICAgIH1cbn07XG5cbi8qKlxuICogV2lsbCByZXR1cm4gYSBvbmUtZGltZW5zaW9uYWwgYXJyYXkgY29udGFpbmluZyB0aGUgcGl4ZWwgZGF0YSBvZiB0aGUgZW50aXJlIHRleHR1cmUgaW4gUkdCQSBvcmRlciwgd2l0aCBpbnRlZ2VyIHZhbHVlcyBiZXR3ZWVuIDAgYW5kIDI1NSAoaW5jbHVkZWQpLlxuICpcbiAqIEByZXR1cm4ge1VpbnQ4Q2xhbXBlZEFycmF5fVxuICovXG5SZW5kZXJUZXh0dXJlLnByb3RvdHlwZS5nZXRQaXhlbHMgPSBmdW5jdGlvbiAoKVxue1xuICAgIHZhciB3aWR0aCwgaGVpZ2h0O1xuXG4gICAgaWYgKHRoaXMucmVuZGVyZXIudHlwZSA9PT0gQ09OU1QuUkVOREVSRVJfVFlQRS5XRUJHTClcbiAgICB7XG4gICAgICAgIHZhciBnbCA9IHRoaXMucmVuZGVyZXIuZ2w7XG4gICAgICAgIHdpZHRoID0gdGhpcy50ZXh0dXJlQnVmZmVyLnNpemUud2lkdGg7XG4gICAgICAgIGhlaWdodCA9IHRoaXMudGV4dHVyZUJ1ZmZlci5zaXplLmhlaWdodDtcblxuICAgICAgICB2YXIgd2ViR0xQaXhlbHMgPSBuZXcgVWludDhBcnJheSg0ICogd2lkdGggKiBoZWlnaHQpO1xuXG4gICAgICAgIGdsLmJpbmRGcmFtZWJ1ZmZlcihnbC5GUkFNRUJVRkZFUiwgdGhpcy50ZXh0dXJlQnVmZmVyLmZyYW1lQnVmZmVyKTtcbiAgICAgICAgZ2wucmVhZFBpeGVscygwLCAwLCB3aWR0aCwgaGVpZ2h0LCBnbC5SR0JBLCBnbC5VTlNJR05FRF9CWVRFLCB3ZWJHTFBpeGVscyk7XG4gICAgICAgIGdsLmJpbmRGcmFtZWJ1ZmZlcihnbC5GUkFNRUJVRkZFUiwgbnVsbCk7XG5cbiAgICAgICAgcmV0dXJuIHdlYkdMUGl4ZWxzO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICB3aWR0aCA9IHRoaXMudGV4dHVyZUJ1ZmZlci5jYW52YXMud2lkdGg7XG4gICAgICAgIGhlaWdodCA9IHRoaXMudGV4dHVyZUJ1ZmZlci5jYW52YXMuaGVpZ2h0O1xuXG4gICAgICAgIHJldHVybiB0aGlzLnRleHR1cmVCdWZmZXIuY2FudmFzLmdldENvbnRleHQoJzJkJykuZ2V0SW1hZ2VEYXRhKDAsIDAsIHdpZHRoLCBoZWlnaHQpLmRhdGE7XG4gICAgfVxufTtcblxuLyoqXG4gKiBXaWxsIHJldHVybiBhIG9uZS1kaW1lbnNpb25hbCBhcnJheSBjb250YWluaW5nIHRoZSBwaXhlbCBkYXRhIG9mIGEgcGl4ZWwgd2l0aGluIHRoZSB0ZXh0dXJlIGluIFJHQkEgb3JkZXIsIHdpdGggaW50ZWdlciB2YWx1ZXMgYmV0d2VlbiAwIGFuZCAyNTUgKGluY2x1ZGVkKS5cbiAqXG4gKiBAcGFyYW0geCB7bnVtYmVyfSBUaGUgeCBjb29yZGluYXRlIG9mIHRoZSBwaXhlbCB0byByZXRyaWV2ZS5cbiAqIEBwYXJhbSB5IHtudW1iZXJ9IFRoZSB5IGNvb3JkaW5hdGUgb2YgdGhlIHBpeGVsIHRvIHJldHJpZXZlLlxuICogQHJldHVybiB7VWludDhDbGFtcGVkQXJyYXl9XG4gKi9cblJlbmRlclRleHR1cmUucHJvdG90eXBlLmdldFBpeGVsID0gZnVuY3Rpb24gKHgsIHkpXG57XG4gICAgaWYgKHRoaXMucmVuZGVyZXIudHlwZSA9PT0gQ09OU1QuUkVOREVSRVJfVFlQRS5XRUJHTClcbiAgICB7XG4gICAgICAgIHZhciBnbCA9IHRoaXMucmVuZGVyZXIuZ2w7XG5cbiAgICAgICAgdmFyIHdlYkdMUGl4ZWxzID0gbmV3IFVpbnQ4QXJyYXkoNCk7XG5cbiAgICAgICAgZ2wuYmluZEZyYW1lYnVmZmVyKGdsLkZSQU1FQlVGRkVSLCB0aGlzLnRleHR1cmVCdWZmZXIuZnJhbWVCdWZmZXIpO1xuICAgICAgICBnbC5yZWFkUGl4ZWxzKHgsIHksIDEsIDEsIGdsLlJHQkEsIGdsLlVOU0lHTkVEX0JZVEUsIHdlYkdMUGl4ZWxzKTtcbiAgICAgICAgZ2wuYmluZEZyYW1lYnVmZmVyKGdsLkZSQU1FQlVGRkVSLCBudWxsKTtcblxuICAgICAgICByZXR1cm4gd2ViR0xQaXhlbHM7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHJldHVybiB0aGlzLnRleHR1cmVCdWZmZXIuY2FudmFzLmdldENvbnRleHQoJzJkJykuZ2V0SW1hZ2VEYXRhKHgsIHksIDEsIDEpLmRhdGE7XG4gICAgfVxufTtcbiIsInZhciBCYXNlVGV4dHVyZSA9IHJlcXVpcmUoJy4vQmFzZVRleHR1cmUnKSxcbiAgICBWaWRlb0Jhc2VUZXh0dXJlID0gcmVxdWlyZSgnLi9WaWRlb0Jhc2VUZXh0dXJlJyksXG4gICAgVGV4dHVyZVV2cyA9IHJlcXVpcmUoJy4vVGV4dHVyZVV2cycpLFxuICAgIEV2ZW50RW1pdHRlciA9IHJlcXVpcmUoJ2V2ZW50ZW1pdHRlcjMnKSxcbiAgICBtYXRoID0gcmVxdWlyZSgnLi4vbWF0aCcpLFxuICAgIHV0aWxzID0gcmVxdWlyZSgnLi4vdXRpbHMnKTtcblxuLyoqXG4gKiBBIHRleHR1cmUgc3RvcmVzIHRoZSBpbmZvcm1hdGlvbiB0aGF0IHJlcHJlc2VudHMgYW4gaW1hZ2Ugb3IgcGFydCBvZiBhbiBpbWFnZS4gSXQgY2Fubm90IGJlIGFkZGVkXG4gKiB0byB0aGUgZGlzcGxheSBsaXN0IGRpcmVjdGx5LiBJbnN0ZWFkIHVzZSBpdCBhcyB0aGUgdGV4dHVyZSBmb3IgYSBTcHJpdGUuIElmIG5vIGZyYW1lIGlzIHByb3ZpZGVkIHRoZW4gdGhlIHdob2xlIGltYWdlIGlzIHVzZWQuXG4gKlxuICogWW91IGNhbiBkaXJlY3RseSBjcmVhdGUgYSB0ZXh0dXJlIGZyb20gYW4gaW1hZ2UgYW5kIHRoZW4gcmV1c2UgaXQgbXVsdGlwbGUgdGltZXMgbGlrZSB0aGlzIDpcbiAqXG4gKiBgYGBqc1xuICogdmFyIHRleHR1cmUgPSBQSVhJLlRleHR1cmUuZnJvbUltYWdlKCdhc3NldHMvaW1hZ2UucG5nJyk7XG4gKiB2YXIgc3ByaXRlMSA9IG5ldyBQSVhJLlNwcml0ZSh0ZXh0dXJlKTtcbiAqIHZhciBzcHJpdGUyID0gbmV3IFBJWEkuU3ByaXRlKHRleHR1cmUpO1xuICogYGBgXG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIGJhc2VUZXh0dXJlIHtQSVhJLkJhc2VUZXh0dXJlfSBUaGUgYmFzZSB0ZXh0dXJlIHNvdXJjZSB0byBjcmVhdGUgdGhlIHRleHR1cmUgZnJvbVxuICogQHBhcmFtIFtmcmFtZV0ge1BJWEkuUmVjdGFuZ2xlfSBUaGUgcmVjdGFuZ2xlIGZyYW1lIG9mIHRoZSB0ZXh0dXJlIHRvIHNob3dcbiAqIEBwYXJhbSBbY3JvcF0ge1BJWEkuUmVjdGFuZ2xlfSBUaGUgYXJlYSBvZiBvcmlnaW5hbCB0ZXh0dXJlXG4gKiBAcGFyYW0gW3RyaW1dIHtQSVhJLlJlY3RhbmdsZX0gVHJpbW1lZCB0ZXh0dXJlIHJlY3RhbmdsZVxuICogQHBhcmFtIFtyb3RhdGVdIHtib29sZWFufSBpbmRpY2F0ZXMgd2hldGhlciB0aGUgdGV4dHVyZSBzaG91bGQgYmUgcm90YXRlZCBieSA5MCBkZWdyZWVzICggdXNlZCBieSB0ZXh0dXJlIHBhY2tlciApXG4gKi9cbmZ1bmN0aW9uIFRleHR1cmUoYmFzZVRleHR1cmUsIGZyYW1lLCBjcm9wLCB0cmltLCByb3RhdGUpXG57XG4gICAgRXZlbnRFbWl0dGVyLmNhbGwodGhpcyk7XG5cbiAgICAvKipcbiAgICAgKiBEb2VzIHRoaXMgVGV4dHVyZSBoYXZlIGFueSBmcmFtZSBkYXRhIGFzc2lnbmVkIHRvIGl0P1xuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKi9cbiAgICB0aGlzLm5vRnJhbWUgPSBmYWxzZTtcblxuICAgIGlmICghZnJhbWUpXG4gICAge1xuICAgICAgICB0aGlzLm5vRnJhbWUgPSB0cnVlO1xuICAgICAgICBmcmFtZSA9IG5ldyBtYXRoLlJlY3RhbmdsZSgwLCAwLCAxLCAxKTtcbiAgICB9XG5cbiAgICBpZiAoYmFzZVRleHR1cmUgaW5zdGFuY2VvZiBUZXh0dXJlKVxuICAgIHtcbiAgICAgICAgYmFzZVRleHR1cmUgPSBiYXNlVGV4dHVyZS5iYXNlVGV4dHVyZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYmFzZSB0ZXh0dXJlIHRoYXQgdGhpcyB0ZXh0dXJlIHVzZXMuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLkJhc2VUZXh0dXJlfVxuICAgICAqL1xuICAgIHRoaXMuYmFzZVRleHR1cmUgPSBiYXNlVGV4dHVyZTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBmcmFtZSBzcGVjaWZpZXMgdGhlIHJlZ2lvbiBvZiB0aGUgYmFzZSB0ZXh0dXJlIHRoYXQgdGhpcyB0ZXh0dXJlIHVzZXNcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuUmVjdGFuZ2xlfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fZnJhbWUgPSBmcmFtZTtcblxuICAgIC8qKlxuICAgICAqIFRoZSB0ZXh0dXJlIHRyaW0gZGF0YS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuUmVjdGFuZ2xlfVxuICAgICAqL1xuICAgIHRoaXMudHJpbSA9IHRyaW07XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIHdpbGwgbGV0IHRoZSByZW5kZXJlciBrbm93IGlmIHRoZSB0ZXh0dXJlIGlzIHZhbGlkLiBJZiBpdCdzIG5vdCB0aGVuIGl0IGNhbm5vdCBiZSByZW5kZXJlZC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICovXG4gICAgdGhpcy52YWxpZCA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogVGhpcyB3aWxsIGxldCBhIHJlbmRlcmVyIGtub3cgdGhhdCBhIHRleHR1cmUgaGFzIGJlZW4gdXBkYXRlZCAodXNlZCBtYWlubHkgZm9yIHdlYkdMIHV2IHVwZGF0ZXMpXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqL1xuICAgIHRoaXMucmVxdWlyZXNVcGRhdGUgPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBXZWJHTCBVViBkYXRhIGNhY2hlLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5UZXh0dXJlVXZzfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fdXZzID0gbnVsbDtcblxuICAgIC8qKlxuICAgICAqIFRoZSB3aWR0aCBvZiB0aGUgVGV4dHVyZSBpbiBwaXhlbHMuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy53aWR0aCA9IDA7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgaGVpZ2h0IG9mIHRoZSBUZXh0dXJlIGluIHBpeGVscy5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLmhlaWdodCA9IDA7XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIGlzIHRoZSBhcmVhIG9mIHRoZSBCYXNlVGV4dHVyZSBpbWFnZSB0byBhY3R1YWxseSBjb3B5IHRvIHRoZSBDYW52YXMgLyBXZWJHTCB3aGVuIHJlbmRlcmluZyxcbiAgICAgKiBpcnJlc3BlY3RpdmUgb2YgdGhlIGFjdHVhbCBmcmFtZSBzaXplIG9yIHBsYWNlbWVudCAod2hpY2ggY2FuIGJlIGluZmx1ZW5jZWQgYnkgdHJpbW1lZCB0ZXh0dXJlIGF0bGFzZXMpXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlJlY3RhbmdsZX1cbiAgICAgKi9cbiAgICB0aGlzLmNyb3AgPSBjcm9wIHx8IGZyYW1lOy8vbmV3IG1hdGguUmVjdGFuZ2xlKDAsIDAsIDEsIDEpO1xuXG4gICAgLyoqXG4gICAgICogSW5kaWNhdGVzIHdoZXRoZXIgdGhlIHRleHR1cmUgc2hvdWxkIGJlIHJvdGF0ZWQgYnkgOTAgZGVncmVlc1xuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqL1xuICAgIHRoaXMucm90YXRlID0gISFyb3RhdGU7XG5cbiAgICBpZiAoYmFzZVRleHR1cmUuaGFzTG9hZGVkKVxuICAgIHtcbiAgICAgICAgaWYgKHRoaXMubm9GcmFtZSlcbiAgICAgICAge1xuICAgICAgICAgICAgZnJhbWUgPSBuZXcgbWF0aC5SZWN0YW5nbGUoMCwgMCwgYmFzZVRleHR1cmUud2lkdGgsIGJhc2VUZXh0dXJlLmhlaWdodCk7XG5cbiAgICAgICAgICAgIC8vIGlmIHRoZXJlIGlzIG5vIGZyYW1lIHdlIHNob3VsZCBtb25pdG9yIGZvciBhbnkgYmFzZSB0ZXh0dXJlIGNoYW5nZXMuLlxuICAgICAgICAgICAgYmFzZVRleHR1cmUub24oJ3VwZGF0ZScsIHRoaXMub25CYXNlVGV4dHVyZVVwZGF0ZWQsIHRoaXMpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZnJhbWUgPSBmcmFtZTtcbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgYmFzZVRleHR1cmUub25jZSgnbG9hZGVkJywgdGhpcy5vbkJhc2VUZXh0dXJlTG9hZGVkLCB0aGlzKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBGaXJlZCB3aGVuIHRoZSB0ZXh0dXJlIGlzIHVwZGF0ZWQuIFRoaXMgaGFwcGVucyBpZiB0aGUgZnJhbWUgb3IgdGhlIGJhc2VUZXh0dXJlIGlzIHVwZGF0ZWQuXG4gICAgICpcbiAgICAgKiBAZXZlbnQgdXBkYXRlXG4gICAgICogQG1lbWJlcm9mIFBJWEkuVGV4dHVyZSNcbiAgICAgKiBAcHJvdGVjdGVkXG4gICAgICovXG59XG5cblRleHR1cmUucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShFdmVudEVtaXR0ZXIucHJvdG90eXBlKTtcblRleHR1cmUucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gVGV4dHVyZTtcbm1vZHVsZS5leHBvcnRzID0gVGV4dHVyZTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoVGV4dHVyZS5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBUaGUgZnJhbWUgc3BlY2lmaWVzIHRoZSByZWdpb24gb2YgdGhlIGJhc2UgdGV4dHVyZSB0aGF0IHRoaXMgdGV4dHVyZSB1c2VzLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5SZWN0YW5nbGV9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuVGV4dHVyZSNcbiAgICAgKi9cbiAgICBmcmFtZToge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9mcmFtZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAoZnJhbWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuX2ZyYW1lID0gZnJhbWU7XG5cbiAgICAgICAgICAgIHRoaXMubm9GcmFtZSA9IGZhbHNlO1xuXG4gICAgICAgICAgICB0aGlzLndpZHRoID0gZnJhbWUud2lkdGg7XG4gICAgICAgICAgICB0aGlzLmhlaWdodCA9IGZyYW1lLmhlaWdodDtcblxuICAgICAgICAgICAgaWYgKCF0aGlzLnRyaW0gJiYgIXRoaXMucm90YXRlICYmIChmcmFtZS54ICsgZnJhbWUud2lkdGggPiB0aGlzLmJhc2VUZXh0dXJlLndpZHRoIHx8IGZyYW1lLnkgKyBmcmFtZS5oZWlnaHQgPiB0aGlzLmJhc2VUZXh0dXJlLmhlaWdodCkpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdUZXh0dXJlIEVycm9yOiBmcmFtZSBkb2VzIG5vdCBmaXQgaW5zaWRlIHRoZSBiYXNlIFRleHR1cmUgZGltZW5zaW9ucyAnICsgdGhpcyk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vdGhpcy52YWxpZCA9IGZyYW1lICYmIGZyYW1lLndpZHRoICYmIGZyYW1lLmhlaWdodCAmJiB0aGlzLmJhc2VUZXh0dXJlLnNvdXJjZSAmJiB0aGlzLmJhc2VUZXh0dXJlLmhhc0xvYWRlZDtcbiAgICAgICAgICAgIHRoaXMudmFsaWQgPSBmcmFtZSAmJiBmcmFtZS53aWR0aCAmJiBmcmFtZS5oZWlnaHQgJiYgdGhpcy5iYXNlVGV4dHVyZS5oYXNMb2FkZWQ7XG5cbiAgICAgICAgICAgIGlmICh0aGlzLnRyaW0pXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdGhpcy53aWR0aCA9IHRoaXMudHJpbS53aWR0aDtcbiAgICAgICAgICAgICAgICB0aGlzLmhlaWdodCA9IHRoaXMudHJpbS5oZWlnaHQ7XG4gICAgICAgICAgICAgICAgdGhpcy5fZnJhbWUud2lkdGggPSB0aGlzLnRyaW0ud2lkdGg7XG4gICAgICAgICAgICAgICAgdGhpcy5fZnJhbWUuaGVpZ2h0ID0gdGhpcy50cmltLmhlaWdodDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB0aGlzLmNyb3AgPSBmcmFtZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHRoaXMudmFsaWQpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdGhpcy5fdXBkYXRlVXZzKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG59KTtcblxuLyoqXG4gKiBVcGRhdGVzIHRoaXMgdGV4dHVyZSBvbiB0aGUgZ3B1LlxuICpcbiAqL1xuVGV4dHVyZS5wcm90b3R5cGUudXBkYXRlID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLmJhc2VUZXh0dXJlLnVwZGF0ZSgpO1xufTtcblxuLyoqXG4gKiBDYWxsZWQgd2hlbiB0aGUgYmFzZSB0ZXh0dXJlIGlzIGxvYWRlZFxuICpcbiAqIEBwcml2YXRlXG4gKi9cblRleHR1cmUucHJvdG90eXBlLm9uQmFzZVRleHR1cmVMb2FkZWQgPSBmdW5jdGlvbiAoYmFzZVRleHR1cmUpXG57XG4gICAgLy8gVE9ETyB0aGlzIGNvZGUgbG9va3MgY29uZnVzaW5nLi4gYm9vIHRvIGFidXNpbmcgZ2V0dGVycyBhbmQgc2V0dGVyc3MhXG4gICAgaWYgKHRoaXMubm9GcmFtZSlcbiAgICB7XG4gICAgICAgIHRoaXMuZnJhbWUgPSBuZXcgbWF0aC5SZWN0YW5nbGUoMCwgMCwgYmFzZVRleHR1cmUud2lkdGgsIGJhc2VUZXh0dXJlLmhlaWdodCk7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHRoaXMuZnJhbWUgPSB0aGlzLl9mcmFtZTtcbiAgICB9XG5cbiAgICB0aGlzLmVtaXQoJ3VwZGF0ZScsIHRoaXMpO1xufTtcblxuLyoqXG4gKiBDYWxsZWQgd2hlbiB0aGUgYmFzZSB0ZXh0dXJlIGlzIHVwZGF0ZWRcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5UZXh0dXJlLnByb3RvdHlwZS5vbkJhc2VUZXh0dXJlVXBkYXRlZCA9IGZ1bmN0aW9uIChiYXNlVGV4dHVyZSlcbntcbiAgICB0aGlzLl9mcmFtZS53aWR0aCA9IGJhc2VUZXh0dXJlLndpZHRoO1xuICAgIHRoaXMuX2ZyYW1lLmhlaWdodCA9IGJhc2VUZXh0dXJlLmhlaWdodDtcblxuICAgIHRoaXMuZW1pdCgndXBkYXRlJywgdGhpcyk7XG59O1xuXG4vKipcbiAqIERlc3Ryb3lzIHRoaXMgdGV4dHVyZVxuICpcbiAqIEBwYXJhbSBbZGVzdHJveUJhc2U9ZmFsc2VdIHtib29sZWFufSBXaGV0aGVyIHRvIGRlc3Ryb3kgdGhlIGJhc2UgdGV4dHVyZSBhcyB3ZWxsXG4gKi9cblRleHR1cmUucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoZGVzdHJveUJhc2UpXG57XG4gICAgaWYgKHRoaXMuYmFzZVRleHR1cmUpXG4gICAge1xuICAgICAgICBpZiAoZGVzdHJveUJhc2UpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuYmFzZVRleHR1cmUuZGVzdHJveSgpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5iYXNlVGV4dHVyZS5vZmYoJ3VwZGF0ZScsIHRoaXMub25CYXNlVGV4dHVyZVVwZGF0ZWQsIHRoaXMpO1xuICAgICAgICB0aGlzLmJhc2VUZXh0dXJlLm9mZignbG9hZGVkJywgdGhpcy5vbkJhc2VUZXh0dXJlTG9hZGVkLCB0aGlzKTtcblxuICAgICAgICB0aGlzLmJhc2VUZXh0dXJlID0gbnVsbDtcbiAgICB9XG5cbiAgICB0aGlzLl9mcmFtZSA9IG51bGw7XG4gICAgdGhpcy5fdXZzID0gbnVsbDtcbiAgICB0aGlzLnRyaW0gPSBudWxsO1xuICAgIHRoaXMuY3JvcCA9IG51bGw7XG5cbiAgICB0aGlzLnZhbGlkID0gZmFsc2U7XG5cbiAgICB0aGlzLm9mZignZGlzcG9zZScsIHRoaXMuZGlzcG9zZSwgdGhpcyk7XG4gICAgdGhpcy5vZmYoJ3VwZGF0ZScsIHRoaXMudXBkYXRlLCB0aGlzKTtcbn07XG5cbi8qKlxuICogQ3JlYXRlcyBhIG5ldyB0ZXh0dXJlIG9iamVjdCB0aGF0IGFjdHMgdGhlIHNhbWUgYXMgdGhpcyBvbmUuXG4gKlxuICogQHJldHVybiB7UElYSS5UZXh0dXJlfVxuICovXG5UZXh0dXJlLnByb3RvdHlwZS5jbG9uZSA9IGZ1bmN0aW9uICgpXG57XG4gICAgcmV0dXJuIG5ldyBUZXh0dXJlKHRoaXMuYmFzZVRleHR1cmUsIHRoaXMuZnJhbWUsIHRoaXMuY3JvcCwgdGhpcy50cmltLCB0aGlzLnJvdGF0ZSk7XG59O1xuXG4vKipcbiAqIFVwZGF0ZXMgdGhlIGludGVybmFsIFdlYkdMIFVWIGNhY2hlLlxuICpcbiAqIEBwcml2YXRlXG4gKi9cblRleHR1cmUucHJvdG90eXBlLl91cGRhdGVVdnMgPSBmdW5jdGlvbiAoKVxue1xuICAgIGlmICghdGhpcy5fdXZzKVxuICAgIHtcbiAgICAgICAgdGhpcy5fdXZzID0gbmV3IFRleHR1cmVVdnMoKTtcbiAgICB9XG5cbiAgICB0aGlzLl91dnMuc2V0KHRoaXMuY3JvcCwgdGhpcy5iYXNlVGV4dHVyZSwgdGhpcy5yb3RhdGUpO1xufTtcblxuLyoqXG4gKiBIZWxwZXIgZnVuY3Rpb24gdGhhdCBjcmVhdGVzIGEgVGV4dHVyZSBvYmplY3QgZnJvbSB0aGUgZ2l2ZW4gaW1hZ2UgdXJsLlxuICogSWYgdGhlIGltYWdlIGlzIG5vdCBpbiB0aGUgdGV4dHVyZSBjYWNoZSBpdCB3aWxsIGJlICBjcmVhdGVkIGFuZCBsb2FkZWQuXG4gKlxuICogQHN0YXRpY1xuICogQHBhcmFtIGltYWdlVXJsIHtzdHJpbmd9IFRoZSBpbWFnZSB1cmwgb2YgdGhlIHRleHR1cmVcbiAqIEBwYXJhbSBjcm9zc29yaWdpbiB7Ym9vbGVhbn0gV2hldGhlciByZXF1ZXN0cyBzaG91bGQgYmUgdHJlYXRlZCBhcyBjcm9zc29yaWdpblxuICogQHBhcmFtIHNjYWxlTW9kZSB7bnVtYmVyfSBTZWUge0BsaW5rIFBJWEkuU0NBTEVfTU9ERVN9IGZvciBwb3NzaWJsZSB2YWx1ZXNcbiAqIEByZXR1cm4ge1BJWEkuVGV4dHVyZX0gVGhlIG5ld2x5IGNyZWF0ZWQgdGV4dHVyZVxuICovXG5UZXh0dXJlLmZyb21JbWFnZSA9IGZ1bmN0aW9uIChpbWFnZVVybCwgY3Jvc3NvcmlnaW4sIHNjYWxlTW9kZSlcbntcbiAgICB2YXIgdGV4dHVyZSA9IHV0aWxzLlRleHR1cmVDYWNoZVtpbWFnZVVybF07XG5cbiAgICBpZiAoIXRleHR1cmUpXG4gICAge1xuICAgICAgICB0ZXh0dXJlID0gbmV3IFRleHR1cmUoQmFzZVRleHR1cmUuZnJvbUltYWdlKGltYWdlVXJsLCBjcm9zc29yaWdpbiwgc2NhbGVNb2RlKSk7XG4gICAgICAgIHV0aWxzLlRleHR1cmVDYWNoZVtpbWFnZVVybF0gPSB0ZXh0dXJlO1xuICAgIH1cblxuICAgIHJldHVybiB0ZXh0dXJlO1xufTtcblxuLyoqXG4gKiBIZWxwZXIgZnVuY3Rpb24gdGhhdCBjcmVhdGVzIGEgc3ByaXRlIHRoYXQgd2lsbCBjb250YWluIGEgdGV4dHVyZSBmcm9tIHRoZSBUZXh0dXJlQ2FjaGUgYmFzZWQgb24gdGhlIGZyYW1lSWRcbiAqIFRoZSBmcmFtZSBpZHMgYXJlIGNyZWF0ZWQgd2hlbiBhIFRleHR1cmUgcGFja2VyIGZpbGUgaGFzIGJlZW4gbG9hZGVkXG4gKlxuICogQHN0YXRpY1xuICogQHBhcmFtIGZyYW1lSWQge3N0cmluZ30gVGhlIGZyYW1lIElkIG9mIHRoZSB0ZXh0dXJlIGluIHRoZSBjYWNoZVxuICogQHJldHVybiB7UElYSS5UZXh0dXJlfSBUaGUgbmV3bHkgY3JlYXRlZCB0ZXh0dXJlXG4gKi9cblRleHR1cmUuZnJvbUZyYW1lID0gZnVuY3Rpb24gKGZyYW1lSWQpXG57XG4gICAgdmFyIHRleHR1cmUgPSB1dGlscy5UZXh0dXJlQ2FjaGVbZnJhbWVJZF07XG5cbiAgICBpZiAoIXRleHR1cmUpXG4gICAge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RoZSBmcmFtZUlkIFwiJyArIGZyYW1lSWQgKyAnXCIgZG9lcyBub3QgZXhpc3QgaW4gdGhlIHRleHR1cmUgY2FjaGUnKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGV4dHVyZTtcbn07XG5cbi8qKlxuICogSGVscGVyIGZ1bmN0aW9uIHRoYXQgY3JlYXRlcyBhIG5ldyBUZXh0dXJlIGJhc2VkIG9uIHRoZSBnaXZlbiBjYW52YXMgZWxlbWVudC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAcGFyYW0gY2FudmFzIHtDYW52YXN9IFRoZSBjYW52YXMgZWxlbWVudCBzb3VyY2Ugb2YgdGhlIHRleHR1cmVcbiAqIEBwYXJhbSBzY2FsZU1vZGUge251bWJlcn0gU2VlIHtAbGluayBQSVhJLlNDQUxFX01PREVTfSBmb3IgcG9zc2libGUgdmFsdWVzXG4gKiBAcmV0dXJuIHtQSVhJLlRleHR1cmV9XG4gKi9cblRleHR1cmUuZnJvbUNhbnZhcyA9IGZ1bmN0aW9uIChjYW52YXMsIHNjYWxlTW9kZSlcbntcbiAgICByZXR1cm4gbmV3IFRleHR1cmUoQmFzZVRleHR1cmUuZnJvbUNhbnZhcyhjYW52YXMsIHNjYWxlTW9kZSkpO1xufTtcblxuLyoqXG4gKiBIZWxwZXIgZnVuY3Rpb24gdGhhdCBjcmVhdGVzIGEgbmV3IFRleHR1cmUgYmFzZWQgb24gdGhlIGdpdmVuIHZpZGVvIGVsZW1lbnQuXG4gKlxuICogQHN0YXRpY1xuICogQHBhcmFtIHZpZGVvIHtIVE1MVmlkZW9FbGVtZW50fVxuICogQHBhcmFtIHNjYWxlTW9kZSB7bnVtYmVyfSBTZWUge0BsaW5rIFBJWEkuU0NBTEVfTU9ERVN9IGZvciBwb3NzaWJsZSB2YWx1ZXNcbiAqIEByZXR1cm4ge1BJWEkuVGV4dHVyZX0gQSBUZXh0dXJlXG4gKi9cblRleHR1cmUuZnJvbVZpZGVvID0gZnVuY3Rpb24gKHZpZGVvLCBzY2FsZU1vZGUpXG57XG4gICAgaWYgKHR5cGVvZiB2aWRlbyA9PT0gJ3N0cmluZycpXG4gICAge1xuICAgICAgICByZXR1cm4gVGV4dHVyZS5mcm9tVmlkZW9VcmwodmlkZW8sIHNjYWxlTW9kZSk7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHJldHVybiBuZXcgVGV4dHVyZShWaWRlb0Jhc2VUZXh0dXJlLmZyb21WaWRlbyh2aWRlbywgc2NhbGVNb2RlKSk7XG4gICAgfVxufTtcblxuLyoqXG4gKiBIZWxwZXIgZnVuY3Rpb24gdGhhdCBjcmVhdGVzIGEgbmV3IFRleHR1cmUgYmFzZWQgb24gdGhlIHZpZGVvIHVybC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAcGFyYW0gdmlkZW9Vcmwge3N0cmluZ31cbiAqIEBwYXJhbSBzY2FsZU1vZGUge251bWJlcn0gU2VlIHtAbGluayBQSVhJLlNDQUxFX01PREVTfSBmb3IgcG9zc2libGUgdmFsdWVzXG4gKiBAcmV0dXJuIHtQSVhJLlRleHR1cmV9IEEgVGV4dHVyZVxuICovXG5UZXh0dXJlLmZyb21WaWRlb1VybCA9IGZ1bmN0aW9uICh2aWRlb1VybCwgc2NhbGVNb2RlKVxue1xuICAgIHJldHVybiBuZXcgVGV4dHVyZShWaWRlb0Jhc2VUZXh0dXJlLmZyb21VcmwodmlkZW9VcmwsIHNjYWxlTW9kZSkpO1xufTtcblxuLyoqXG4gKiBBZGRzIGEgdGV4dHVyZSB0byB0aGUgZ2xvYmFsIHV0aWxzLlRleHR1cmVDYWNoZS4gVGhpcyBjYWNoZSBpcyBzaGFyZWQgYWNyb3NzIHRoZSB3aG9sZSBQSVhJIG9iamVjdC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAcGFyYW0gdGV4dHVyZSB7UElYSS5UZXh0dXJlfSBUaGUgVGV4dHVyZSB0byBhZGQgdG8gdGhlIGNhY2hlLlxuICogQHBhcmFtIGlkIHtzdHJpbmd9IFRoZSBpZCB0aGF0IHRoZSB0ZXh0dXJlIHdpbGwgYmUgc3RvcmVkIGFnYWluc3QuXG4gKi9cblRleHR1cmUuYWRkVGV4dHVyZVRvQ2FjaGUgPSBmdW5jdGlvbiAodGV4dHVyZSwgaWQpXG57XG4gICAgdXRpbHMuVGV4dHVyZUNhY2hlW2lkXSA9IHRleHR1cmU7XG59O1xuXG4vKipcbiAqIFJlbW92ZSBhIHRleHR1cmUgZnJvbSB0aGUgZ2xvYmFsIHV0aWxzLlRleHR1cmVDYWNoZS5cbiAqXG4gKiBAc3RhdGljXG4gKiBAcGFyYW0gaWQge3N0cmluZ30gVGhlIGlkIG9mIHRoZSB0ZXh0dXJlIHRvIGJlIHJlbW92ZWRcbiAqIEByZXR1cm4ge1BJWEkuVGV4dHVyZX0gVGhlIHRleHR1cmUgdGhhdCB3YXMgcmVtb3ZlZFxuICovXG5UZXh0dXJlLnJlbW92ZVRleHR1cmVGcm9tQ2FjaGUgPSBmdW5jdGlvbiAoaWQpXG57XG4gICAgdmFyIHRleHR1cmUgPSB1dGlscy5UZXh0dXJlQ2FjaGVbaWRdO1xuXG4gICAgZGVsZXRlIHV0aWxzLlRleHR1cmVDYWNoZVtpZF07XG4gICAgZGVsZXRlIHV0aWxzLkJhc2VUZXh0dXJlQ2FjaGVbaWRdO1xuXG4gICAgcmV0dXJuIHRleHR1cmU7XG59O1xuXG4vKipcbiAqIEFuIGVtcHR5IHRleHR1cmUsIHVzZWQgb2Z0ZW4gdG8gbm90IGhhdmUgdG8gY3JlYXRlIG11bHRpcGxlIGVtcHR5IHRleHR1cmVzLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBjb25zdGFudFxuICovXG5UZXh0dXJlLkVNUFRZID0gbmV3IFRleHR1cmUobmV3IEJhc2VUZXh0dXJlKCkpO1xuIiwiXG4vKipcbiAqIEEgc3RhbmRhcmQgb2JqZWN0IHRvIHN0b3JlIHRoZSBVdnMgb2YgYSB0ZXh0dXJlXG4gKlxuICogQGNsYXNzXG4gKiBAcHJpdmF0ZVxuICogQG1lbWJlcm9mIFBJWElcbiAqL1xuZnVuY3Rpb24gVGV4dHVyZVV2cygpXG57XG4gICAgdGhpcy54MCA9IDA7XG4gICAgdGhpcy55MCA9IDA7XG5cbiAgICB0aGlzLngxID0gMTtcbiAgICB0aGlzLnkxID0gMDtcblxuICAgIHRoaXMueDIgPSAxO1xuICAgIHRoaXMueTIgPSAxO1xuXG4gICAgdGhpcy54MyA9IDA7XG4gICAgdGhpcy55MyA9IDE7XG5cbiAgICB0aGlzLnh5MF91aW50MzIgPSAwO1xuICAgIHRoaXMueHkxX3VpbnQzMiA9IDA7XG4gICAgdGhpcy54eTJfdWludDMyID0gMDtcbiAgICB0aGlzLnh5M191aW50MzIgPSAwO1xuXG4gICAgdGhpcy51dnNfdWludDMyID0gbmV3IFVpbnQzMkFycmF5KDQpXG59XG5cbm1vZHVsZS5leHBvcnRzID0gVGV4dHVyZVV2cztcblxuLyoqXG4gKiBTZXRzIHRoZSB0ZXh0dXJlIFV2cyBiYXNlZCBvbiB0aGUgZ2l2ZW4gZnJhbWUgaW5mb3JtYXRpb25cbiAqIEBwYXJhbSBmcmFtZSB7UElYSS5SZWN0YW5nbGV9XG4gKiBAcGFyYW0gYmFzZUZyYW1lIHtQSVhJLlJlY3RhbmdsZX1cbiAqIEBwYXJhbSByb3RhdGUge2Jvb2xlYW59IFdoZXRoZXIgb3Igbm90IHRoZSBmcmFtZSBpcyByb3RhdGVkXG4gKiBAcHJpdmF0ZVxuICovXG5UZXh0dXJlVXZzLnByb3RvdHlwZS5zZXQgPSBmdW5jdGlvbiAoZnJhbWUsIGJhc2VGcmFtZSwgcm90YXRlKVxue1xuICAgIHZhciB0dyA9IGJhc2VGcmFtZS53aWR0aDtcbiAgICB2YXIgdGggPSBiYXNlRnJhbWUuaGVpZ2h0O1xuXG4gICAgaWYocm90YXRlKVxuICAgIHtcbiAgICAgICAgdGhpcy54MCA9IChmcmFtZS54ICsgZnJhbWUuaGVpZ2h0KSAvIHR3O1xuICAgICAgICB0aGlzLnkwID0gZnJhbWUueSAvIHRoO1xuXG4gICAgICAgIHRoaXMueDEgPSAoZnJhbWUueCArIGZyYW1lLmhlaWdodCkgLyB0dztcbiAgICAgICAgdGhpcy55MSA9IChmcmFtZS55ICsgZnJhbWUud2lkdGgpIC8gdGg7XG5cbiAgICAgICAgdGhpcy54MiA9IGZyYW1lLnggLyB0dztcbiAgICAgICAgdGhpcy55MiA9IChmcmFtZS55ICsgZnJhbWUud2lkdGgpIC8gdGg7XG5cbiAgICAgICAgdGhpcy54MyA9IGZyYW1lLnggLyB0dztcbiAgICAgICAgdGhpcy55MyA9IGZyYW1lLnkgLyB0aDtcbiAgICB9XG4gICAgZWxzZVxuICAgIHtcblxuICAgICAgICB0aGlzLngwID0gZnJhbWUueCAvIHR3O1xuICAgICAgICB0aGlzLnkwID0gZnJhbWUueSAvIHRoO1xuXG4gICAgICAgIHRoaXMueDEgPSAoZnJhbWUueCArIGZyYW1lLndpZHRoKSAvIHR3O1xuICAgICAgICB0aGlzLnkxID0gZnJhbWUueSAvIHRoO1xuXG4gICAgICAgIHRoaXMueDIgPSAoZnJhbWUueCArIGZyYW1lLndpZHRoKSAvIHR3O1xuICAgICAgICB0aGlzLnkyID0gKGZyYW1lLnkgKyBmcmFtZS5oZWlnaHQpIC8gdGg7XG5cbiAgICAgICAgdGhpcy54MyA9IGZyYW1lLnggLyB0dztcbiAgICAgICAgdGhpcy55MyA9IChmcmFtZS55ICsgZnJhbWUuaGVpZ2h0KSAvIHRoO1xuICAgIH1cblxuICAgIHRoaXMudXZzX3VpbnQzMlswXSA9ICgoKHRoaXMueTAgKiA2NTUzNSkgJiAweEZGRkYpIDw8IDE2KSB8ICgodGhpcy54MCAqIDY1NTM1KSAmIDB4RkZGRik7XG4gICAgdGhpcy51dnNfdWludDMyWzFdID0gKCgodGhpcy55MSAqIDY1NTM1KSAmIDB4RkZGRikgPDwgMTYpIHwgKCh0aGlzLngxICogNjU1MzUpICYgMHhGRkZGKTtcbiAgICB0aGlzLnV2c191aW50MzJbMl0gPSAoKCh0aGlzLnkyICogNjU1MzUpICYgMHhGRkZGKSA8PCAxNikgfCAoKHRoaXMueDIgKiA2NTUzNSkgJiAweEZGRkYpO1xuICAgIHRoaXMudXZzX3VpbnQzMlszXSA9ICgoKHRoaXMueTMgKiA2NTUzNSkgJiAweEZGRkYpIDw8IDE2KSB8ICgodGhpcy54MyAqIDY1NTM1KSAmIDB4RkZGRik7XG59O1xuIiwidmFyIEJhc2VUZXh0dXJlID0gcmVxdWlyZSgnLi9CYXNlVGV4dHVyZScpLFxuICAgIHV0aWxzID0gcmVxdWlyZSgnLi4vdXRpbHMnKTtcblxuLyoqXG4gKiBBIHRleHR1cmUgb2YgYSBbcGxheWluZ10gVmlkZW8uXG4gKlxuICogVmlkZW8gYmFzZSB0ZXh0dXJlcyBtaW1pYyBQaXhpIEJhc2VUZXh0dXJlLmZyb20uLi4uIG1ldGhvZCBpbiB0aGVpciBjcmVhdGlvbiBwcm9jZXNzLlxuICpcbiAqIFRoaXMgY2FuIGJlIHVzZWQgaW4gc2V2ZXJhbCB3YXlzLCBzdWNoIGFzOlxuICpcbiAqIGBgYGpzXG4gKiB2YXIgdGV4dHVyZSA9IFBJWEkuVmlkZW9CYXNlVGV4dHVyZS5mcm9tVXJsKCdodHRwOi8vbXlkb21haW4uY29tL3ZpZGVvLm1wNCcpO1xuICpcbiAqIHZhciB0ZXh0dXJlID0gUElYSS5WaWRlb0Jhc2VUZXh0dXJlLmZyb21VcmwoeyBzcmM6ICdodHRwOi8vbXlkb21haW4uY29tL3ZpZGVvLm1wNCcsIG1pbWU6ICd2aWRlby9tcDQnIH0pO1xuICpcbiAqIHZhciB0ZXh0dXJlID0gUElYSS5WaWRlb0Jhc2VUZXh0dXJlLmZyb21VcmxzKFsnL3ZpZGVvLndlYm0nLCAnL3ZpZGVvLm1wNCddKTtcbiAqXG4gKiB2YXIgdGV4dHVyZSA9IFBJWEkuVmlkZW9CYXNlVGV4dHVyZS5mcm9tVXJscyhbXG4gKiAgICAgeyBzcmM6ICcvdmlkZW8ud2VibScsIG1pbWU6ICd2aWRlby93ZWJtJyB9LFxuICogICAgIHsgc3JjOiAnL3ZpZGVvLm1wNCcsIG1pbWU6ICd2aWRlby9tcDQnIH1cbiAqIF0pO1xuICogYGBgXG4gKlxuICogU2VlIHRoZSBbXCJkZXVzXCIgZGVtb10oaHR0cDovL3d3dy5nb29kYm95ZGlnaXRhbC5jb20vcGl4aWpzL2V4YW1wbGVzL2RldXMvKS5cbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQmFzZVRleHR1cmVcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gc291cmNlIHtIVE1MVmlkZW9FbGVtZW50fVxuICogQHBhcmFtIFtzY2FsZU1vZGVdIHtudW1iZXJ9IFNlZSB7QGxpbmsgUElYSS5TQ0FMRV9NT0RFU30gZm9yIHBvc3NpYmxlIHZhbHVlc1xuICovXG5mdW5jdGlvbiBWaWRlb0Jhc2VUZXh0dXJlKHNvdXJjZSwgc2NhbGVNb2RlKVxue1xuICAgIGlmICghc291cmNlKVxuICAgIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdObyB2aWRlbyBzb3VyY2UgZWxlbWVudCBzcGVjaWZpZWQuJyk7XG4gICAgfVxuXG4gICAgLy8gaG9vayBpbiBoZXJlIHRvIGNoZWNrIGlmIHZpZGVvIGlzIGFscmVhZHkgYXZhaWxhYmxlLlxuICAgIC8vIEJhc2VUZXh0dXJlIGxvb2tzIGZvciBhIHNvdXJjZS5jb21wbGV0ZSBib29sZWFuLCBwbHVzIHdpZHRoICYgaGVpZ2h0LlxuXG4gICAgaWYgKChzb3VyY2UucmVhZHlTdGF0ZSA9PT0gc291cmNlLkhBVkVfRU5PVUdIX0RBVEEgfHwgc291cmNlLnJlYWR5U3RhdGUgPT09IHNvdXJjZS5IQVZFX0ZVVFVSRV9EQVRBKSAmJiBzb3VyY2Uud2lkdGggJiYgc291cmNlLmhlaWdodClcbiAgICB7XG4gICAgICAgIHNvdXJjZS5jb21wbGV0ZSA9IHRydWU7XG4gICAgfVxuXG4gICAgQmFzZVRleHR1cmUuY2FsbCh0aGlzLCBzb3VyY2UsIHNjYWxlTW9kZSk7XG5cbiAgICAvKipcbiAgICAgKiBTaG91bGQgdGhlIGJhc2UgdGV4dHVyZSBhdXRvbWF0aWNhbGx5IHVwZGF0ZSBpdHNlbGYsIHNldCB0byB0cnVlIGJ5IGRlZmF1bHRcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICogQGRlZmF1bHQgdHJ1ZVxuICAgICAqL1xuICAgIHRoaXMuYXV0b1VwZGF0ZSA9IGZhbHNlO1xuXG4gICAgdGhpcy5fb25VcGRhdGUgPSB0aGlzLl9vblVwZGF0ZS5iaW5kKHRoaXMpO1xuICAgIHRoaXMuX29uQ2FuUGxheSA9IHRoaXMuX29uQ2FuUGxheS5iaW5kKHRoaXMpO1xuXG4gICAgaWYgKCFzb3VyY2UuY29tcGxldGUpXG4gICAge1xuICAgICAgICBzb3VyY2UuYWRkRXZlbnRMaXN0ZW5lcignY2FucGxheScsIHRoaXMuX29uQ2FuUGxheSk7XG4gICAgICAgIHNvdXJjZS5hZGRFdmVudExpc3RlbmVyKCdjYW5wbGF5dGhyb3VnaCcsIHRoaXMuX29uQ2FuUGxheSk7XG5cbiAgICAgICAgLy8gc3RhcnRlZCBwbGF5aW5nLi5cbiAgICAgICAgc291cmNlLmFkZEV2ZW50TGlzdGVuZXIoJ3BsYXknLCB0aGlzLl9vblBsYXlTdGFydC5iaW5kKHRoaXMpKTtcbiAgICAgICAgc291cmNlLmFkZEV2ZW50TGlzdGVuZXIoJ3BhdXNlJywgdGhpcy5fb25QbGF5U3RvcC5iaW5kKHRoaXMpKTtcbiAgICB9XG5cbiAgICB0aGlzLl9fbG9hZGVkID0gZmFsc2U7XG59XG5cblZpZGVvQmFzZVRleHR1cmUucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShCYXNlVGV4dHVyZS5wcm90b3R5cGUpO1xuVmlkZW9CYXNlVGV4dHVyZS5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBWaWRlb0Jhc2VUZXh0dXJlO1xubW9kdWxlLmV4cG9ydHMgPSBWaWRlb0Jhc2VUZXh0dXJlO1xuXG4vKipcbiAqIFRoZSBpbnRlcm5hbCB1cGRhdGUgbG9vcCBvZiB0aGUgdmlkZW8gYmFzZSB0ZXh0dXJlLCBvbmx5IHJ1bnMgd2hlbiBhdXRvVXBkYXRlIGlzIHNldCB0byB0cnVlXG4gKlxuICogQHByaXZhdGVcbiAqL1xuVmlkZW9CYXNlVGV4dHVyZS5wcm90b3R5cGUuX29uVXBkYXRlID0gZnVuY3Rpb24gKClcbntcbiAgICBpZiAodGhpcy5hdXRvVXBkYXRlKVxuICAgIHtcbiAgICAgICAgd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZSh0aGlzLl9vblVwZGF0ZSk7XG4gICAgICAgIHRoaXMudXBkYXRlKCk7XG4gICAgfVxufTtcblxuLyoqXG4gKiBSdW5zIHRoZSB1cGRhdGUgbG9vcCB3aGVuIHRoZSB2aWRlbyBpcyByZWFkeSB0byBwbGF5XG4gKlxuICogQHByaXZhdGVcbiAqL1xuVmlkZW9CYXNlVGV4dHVyZS5wcm90b3R5cGUuX29uUGxheVN0YXJ0ID0gZnVuY3Rpb24gKClcbntcbiAgICBpZiAoIXRoaXMuYXV0b1VwZGF0ZSlcbiAgICB7XG4gICAgICAgIHdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUodGhpcy5fb25VcGRhdGUpO1xuICAgICAgICB0aGlzLmF1dG9VcGRhdGUgPSB0cnVlO1xuICAgIH1cbn07XG5cbi8qKlxuICogRmlyZWQgd2hlbiBhIHBhdXNlIGV2ZW50IGlzIHRyaWdnZXJlZCwgc3RvcHMgdGhlIHVwZGF0ZSBsb29wXG4gKlxuICogQHByaXZhdGVcbiAqL1xuVmlkZW9CYXNlVGV4dHVyZS5wcm90b3R5cGUuX29uUGxheVN0b3AgPSBmdW5jdGlvbiAoKVxue1xuICAgIHRoaXMuYXV0b1VwZGF0ZSA9IGZhbHNlO1xufTtcblxuLyoqXG4gKiBGaXJlZCB3aGVuIHRoZSB2aWRlbyBpcyBsb2FkZWQgYW5kIHJlYWR5IHRvIHBsYXlcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5WaWRlb0Jhc2VUZXh0dXJlLnByb3RvdHlwZS5fb25DYW5QbGF5ID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLmhhc0xvYWRlZCA9IHRydWU7XG5cbiAgICBpZiAodGhpcy5zb3VyY2UpXG4gICAge1xuICAgICAgICB0aGlzLnNvdXJjZS5yZW1vdmVFdmVudExpc3RlbmVyKCdjYW5wbGF5JywgdGhpcy5fb25DYW5QbGF5KTtcbiAgICAgICAgdGhpcy5zb3VyY2UucmVtb3ZlRXZlbnRMaXN0ZW5lcignY2FucGxheXRocm91Z2gnLCB0aGlzLl9vbkNhblBsYXkpO1xuXG4gICAgICAgIHRoaXMud2lkdGggPSB0aGlzLnNvdXJjZS52aWRlb1dpZHRoO1xuICAgICAgICB0aGlzLmhlaWdodCA9IHRoaXMuc291cmNlLnZpZGVvSGVpZ2h0O1xuXG4gICAgICAgIHRoaXMuc291cmNlLnBsYXkoKTtcblxuICAgICAgICAvLyBwcmV2ZW50IG11bHRpcGxlIGxvYWRlZCBkaXNwYXRjaGVzLi5cbiAgICAgICAgaWYgKCF0aGlzLl9fbG9hZGVkKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLl9fbG9hZGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMuZW1pdCgnbG9hZGVkJywgdGhpcyk7XG4gICAgICAgIH1cbiAgICB9XG59O1xuXG4vKipcbiAqIERlc3Ryb3lzIHRoaXMgdGV4dHVyZVxuICpcbiAqL1xuVmlkZW9CYXNlVGV4dHVyZS5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uICgpXG57XG4gICAgaWYgKHRoaXMuc291cmNlICYmIHRoaXMuc291cmNlLl9waXhpSWQpXG4gICAge1xuICAgICAgICBkZWxldGUgdXRpbHMuQmFzZVRleHR1cmVDYWNoZVsgdGhpcy5zb3VyY2UuX3BpeGlJZCBdO1xuICAgICAgICBkZWxldGUgdGhpcy5zb3VyY2UuX3BpeGlJZDtcbiAgICB9XG5cbiAgICBCYXNlVGV4dHVyZS5wcm90b3R5cGUuZGVzdHJveS5jYWxsKHRoaXMpO1xufTtcblxuLyoqXG4gKiBNaW1pYyBQaXhpIEJhc2VUZXh0dXJlLmZyb20uLi4uIG1ldGhvZC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAcGFyYW0gdmlkZW8ge0hUTUxWaWRlb0VsZW1lbnR9XG4gKiBAcGFyYW0gc2NhbGVNb2RlIHtudW1iZXJ9IFNlZSB7QGxpbmsgUElYSS5TQ0FMRV9NT0RFU30gZm9yIHBvc3NpYmxlIHZhbHVlc1xuICogQHJldHVybiB7UElYSS5WaWRlb0Jhc2VUZXh0dXJlfVxuICovXG5WaWRlb0Jhc2VUZXh0dXJlLmZyb21WaWRlbyA9IGZ1bmN0aW9uICh2aWRlbywgc2NhbGVNb2RlKVxue1xuICAgIGlmICghdmlkZW8uX3BpeGlJZClcbiAgICB7XG4gICAgICAgIHZpZGVvLl9waXhpSWQgPSAndmlkZW9fJyArIHV0aWxzLnVpZCgpO1xuICAgIH1cblxuICAgIHZhciBiYXNlVGV4dHVyZSA9IHV0aWxzLkJhc2VUZXh0dXJlQ2FjaGVbdmlkZW8uX3BpeGlJZF07XG5cbiAgICBpZiAoIWJhc2VUZXh0dXJlKVxuICAgIHtcbiAgICAgICAgYmFzZVRleHR1cmUgPSBuZXcgVmlkZW9CYXNlVGV4dHVyZSh2aWRlbywgc2NhbGVNb2RlKTtcbiAgICAgICAgdXRpbHMuQmFzZVRleHR1cmVDYWNoZVsgdmlkZW8uX3BpeGlJZCBdID0gYmFzZVRleHR1cmU7XG4gICAgfVxuXG4gICAgcmV0dXJuIGJhc2VUZXh0dXJlO1xufTtcblxuLyoqXG4gKiBIZWxwZXIgZnVuY3Rpb24gdGhhdCBjcmVhdGVzIGEgbmV3IEJhc2VUZXh0dXJlIGJhc2VkIG9uIHRoZSBnaXZlbiB2aWRlbyBlbGVtZW50LlxuICogVGhpcyBCYXNlVGV4dHVyZSBjYW4gdGhlbiBiZSB1c2VkIHRvIGNyZWF0ZSBhIHRleHR1cmVcbiAqXG4gKiBAc3RhdGljXG4gKiBAcGFyYW0gdmlkZW9TcmMge3N0cmluZ3xvYmplY3R8c3RyaW5nW118b2JqZWN0W119IFRoZSBVUkwocykgZm9yIHRoZSB2aWRlby5cbiAqIEBwYXJhbSBbdmlkZW9TcmMuc3JjXSB7c3RyaW5nfSBPbmUgb2YgdGhlIHNvdXJjZSB1cmxzIGZvciB0aGUgdmlkZW9cbiAqIEBwYXJhbSBbdmlkZW9TcmMubWltZV0ge3N0cmluZ30gVGhlIG1pbWV0eXBlIG9mIHRoZSB2aWRlbyAoZS5nLiAndmlkZW8vbXA0JykuIElmIG5vdCBzcGVjaWZpZWRcbiAqICB0aGUgdXJsJ3MgZXh0ZW5zaW9uIHdpbGwgYmUgdXNlZCBhcyB0aGUgc2Vjb25kIHBhcnQgb2YgdGhlIG1pbWUgdHlwZS5cbiAqIEBwYXJhbSBzY2FsZU1vZGUge251bWJlcn0gU2VlIHtAbGluayBQSVhJLlNDQUxFX01PREVTfSBmb3IgcG9zc2libGUgdmFsdWVzXG4gKiBAcmV0dXJuIHtQSVhJLlZpZGVvQmFzZVRleHR1cmV9XG4gKi9cblZpZGVvQmFzZVRleHR1cmUuZnJvbVVybCA9IGZ1bmN0aW9uICh2aWRlb1NyYywgc2NhbGVNb2RlKVxue1xuICAgIHZhciB2aWRlbyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3ZpZGVvJyk7XG5cbiAgICAvLyBhcnJheSBvZiBvYmplY3RzIG9yIHN0cmluZ3NcbiAgICBpZiAoQXJyYXkuaXNBcnJheSh2aWRlb1NyYykpXG4gICAge1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHZpZGVvU3JjLmxlbmd0aDsgKytpKVxuICAgICAgICB7XG4gICAgICAgICAgICB2aWRlby5hcHBlbmRDaGlsZChjcmVhdGVTb3VyY2UodmlkZW9TcmNbaV0uc3JjIHx8IHZpZGVvU3JjW2ldLCB2aWRlb1NyY1tpXS5taW1lKSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLy8gc2luZ2xlIG9iamVjdCBvciBzdHJpbmdcbiAgICBlbHNlXG4gICAge1xuICAgICAgICB2aWRlby5hcHBlbmRDaGlsZChjcmVhdGVTb3VyY2UodmlkZW9TcmMuc3JjIHx8IHZpZGVvU3JjLCB2aWRlb1NyYy5taW1lKSk7XG4gICAgfVxuXG4gICAgdmlkZW8ubG9hZCgpO1xuICAgIHZpZGVvLnBsYXkoKTtcblxuICAgIHJldHVybiBWaWRlb0Jhc2VUZXh0dXJlLmZyb21WaWRlbyh2aWRlbywgc2NhbGVNb2RlKTtcbn07XG5cblZpZGVvQmFzZVRleHR1cmUuZnJvbVVybHMgPSBWaWRlb0Jhc2VUZXh0dXJlLmZyb21Vcmw7XG5cbmZ1bmN0aW9uIGNyZWF0ZVNvdXJjZShwYXRoLCB0eXBlKVxue1xuICAgIGlmICghdHlwZSlcbiAgICB7XG4gICAgICAgIHR5cGUgPSAndmlkZW8vJyArIHBhdGguc3Vic3RyKHBhdGgubGFzdEluZGV4T2YoJy4nKSArIDEpO1xuICAgIH1cblxuICAgIHZhciBzb3VyY2UgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzb3VyY2UnKTtcblxuICAgIHNvdXJjZS5zcmMgPSBwYXRoO1xuICAgIHNvdXJjZS50eXBlID0gdHlwZTtcblxuICAgIHJldHVybiBzb3VyY2U7XG59XG4iLCJ2YXIgQ09OU1QgPSByZXF1aXJlKCcuLi9jb25zdCcpLFxuICAgIEV2ZW50RW1pdHRlciA9IHJlcXVpcmUoJ2V2ZW50ZW1pdHRlcjMnKSxcbiAgICAvLyBJbnRlcm5hbCBldmVudCB1c2VkIGJ5IGNvbXBvc2VkIGVtaXR0ZXJcbiAgICBUSUNLID0gJ3RpY2snO1xuXG4vKipcbiAqIEEgVGlja2VyIGNsYXNzIHRoYXQgcnVucyBhbiB1cGRhdGUgbG9vcCB0aGF0IG90aGVyIG9iamVjdHMgbGlzdGVuIHRvLlxuICogVGhpcyBjbGFzcyBpcyBjb21wb3NlZCBhcm91bmQgYW4gRXZlbnRFbWl0dGVyIG9iamVjdCB0byBhZGQgbGlzdGVuZXJzXG4gKiBtZWFudCBmb3IgZXhlY3V0aW9uIG9uIHRoZSBuZXh0IHJlcXVlc3RlZCBhbmltYXRpb24gZnJhbWUuXG4gKiBBbmltYXRpb24gZnJhbWVzIGFyZSByZXF1ZXN0ZWQgb25seSB3aGVuIG5lY2Vzc2FyeSxcbiAqIGUuZy4gV2hlbiB0aGUgdGlja2VyIGlzIHN0YXJ0ZWQgYW5kIHRoZSBlbWl0dGVyIGhhcyBsaXN0ZW5lcnMuXG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSS50aWNrZXJcbiAqL1xuZnVuY3Rpb24gVGlja2VyKClcbntcbiAgICB2YXIgX3RoaXMgPSB0aGlzO1xuXG4gICAgLyoqXG4gICAgICogSW50ZXJuYWwgdGljayBtZXRob2QgYm91bmQgdG8gdGlja2VyIGluc3RhbmNlLlxuICAgICAqIFRoaXMgaXMgYmVjYXVzZSBpbiBlYXJseSAyMDE1LCBGdW5jdGlvbi5iaW5kXG4gICAgICogaXMgc3RpbGwgNjAlIHNsb3dlciBpbiBoaWdoIHBlcmZvcm1hbmNlIHNjZW5hcmlvcy5cbiAgICAgKiBBbHNvIHNlcGFyYXRpbmcgZnJhbWUgcmVxdWVzdHMgZnJvbSB1cGRhdGUgbWV0aG9kXG4gICAgICogc28gbGlzdGVuZXJzIG1heSBiZSBjYWxsZWQgYXQgYW55IHRpbWUgYW5kIHdpdGhcbiAgICAgKiBhbnkgYW5pbWF0aW9uIEFQSSwganVzdCBpbnZva2UgdGlja2VyLnVwZGF0ZSh0aW1lKS5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fdGljayA9IGZ1bmN0aW9uIF90aWNrKHRpbWUpIHtcblxuICAgICAgICBfdGhpcy5fcmVxdWVzdElkID0gbnVsbDtcblxuICAgICAgICBpZiAoX3RoaXMuc3RhcnRlZClcbiAgICAgICAge1xuICAgICAgICAgICAgLy8gSW52b2tlIGxpc3RlbmVycyBub3dcbiAgICAgICAgICAgIF90aGlzLnVwZGF0ZSh0aW1lKTtcbiAgICAgICAgICAgIC8vIExpc3RlbmVyIHNpZGUgZWZmZWN0cyBtYXkgaGF2ZSBtb2RpZmllZCB0aWNrZXIgc3RhdGUuXG4gICAgICAgICAgICBpZiAoX3RoaXMuc3RhcnRlZCAmJiBfdGhpcy5fcmVxdWVzdElkID09PSBudWxsICYmIF90aGlzLl9lbWl0dGVyLmxpc3RlbmVycyhUSUNLLCB0cnVlKSlcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBfdGhpcy5fcmVxdWVzdElkID0gcmVxdWVzdEFuaW1hdGlvbkZyYW1lKF90aGlzLl90aWNrKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH07XG5cbiAgICAvKipcbiAgICAgKiBJbnRlcm5hbCBlbWl0dGVyIHVzZWQgdG8gZmlyZSAndGljaycgZXZlbnRcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX2VtaXR0ZXIgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgICAvKipcbiAgICAgKiBJbnRlcm5hbCBjdXJyZW50IGZyYW1lIHJlcXVlc3QgSURcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX3JlcXVlc3RJZCA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBJbnRlcm5hbCB2YWx1ZSBtYW5hZ2VkIGJ5IG1pbkZQUyBwcm9wZXJ0eSBzZXR0ZXIgYW5kIGdldHRlci5cbiAgICAgKiBUaGlzIGlzIHRoZSBtYXhpbXVtIGFsbG93ZWQgbWlsbGlzZWNvbmRzIGJldHdlZW4gdXBkYXRlcy5cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX21heEVsYXBzZWRNUyA9IDEwMDtcblxuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgb3Igbm90IHRoaXMgdGlja2VyIHNob3VsZCBpbnZva2UgdGhlIG1ldGhvZFxuICAgICAqIHtAbGluayBQSVhJLnRpY2tlci5UaWNrZXIjc3RhcnR9IGF1dG9tYXRpY2FsbHlcbiAgICAgKiB3aGVuIGEgbGlzdGVuZXIgaXMgYWRkZWQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqIEBkZWZhdWx0IGZhbHNlXG4gICAgICovXG4gICAgdGhpcy5hdXRvU3RhcnQgPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIFNjYWxhciB0aW1lIHZhbHVlIGZyb20gbGFzdCBmcmFtZSB0byB0aGlzIGZyYW1lLlxuICAgICAqIFRoaXMgdmFsdWUgaXMgY2FwcGVkIGJ5IHNldHRpbmcge0BsaW5rIFBJWEkudGlja2VyLlRpY2tlciNtaW5GUFN9XG4gICAgICogYW5kIGlzIHNjYWxlZCB3aXRoIHtAbGluayBQSVhJLnRpY2tlci5UaWNrZXIjc3BlZWR9LlxuICAgICAqICoqTm90ZToqKiBUaGUgY2FwIG1heSBiZSBleGNlZWRlZCBieSBzY2FsaW5nLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDFcbiAgICAgKi9cbiAgICB0aGlzLmRlbHRhVGltZSA9IDE7XG5cbiAgICAvKipcbiAgICAgKiBUaW1lIGVsYXBzZWQgaW4gbWlsbGlzZWNvbmRzIGZyb20gbGFzdCBmcmFtZSB0byB0aGlzIGZyYW1lLlxuICAgICAqIE9wcG9zZWQgdG8gd2hhdCB0aGUgc2NhbGFyIHtAbGluayBQSVhJLnRpY2tlci5UaWNrZXIjZGVsdGFUaW1lfVxuICAgICAqIGlzIGJhc2VkLCB0aGlzIHZhbHVlIGlzIG5laXRoZXIgY2FwcGVkIG5vciBzY2FsZWQuXG4gICAgICogSWYgdGhlIHBsYXRmb3JtIHN1cHBvcnRzIERPTUhpZ2hSZXNUaW1lU3RhbXAsXG4gICAgICogdGhpcyB2YWx1ZSB3aWxsIGhhdmUgYSBwcmVjaXNpb24gb2YgMSDCtXMuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtET01IaWdoUmVzVGltZVN0YW1wfG51bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAxIC8gVEFSR0VUX0ZQTVNcbiAgICAgKi9cbiAgICB0aGlzLmVsYXBzZWRNUyA9IDEgLyBDT05TVC5UQVJHRVRfRlBNUzsgLy8gZGVmYXVsdCB0byB0YXJnZXQgZnJhbWUgdGltZVxuXG4gICAgLyoqXG4gICAgICogVGhlIGxhc3QgdGltZSB7QGxpbmsgUElYSS50aWNrZXIuVGlja2VyI3VwZGF0ZX0gd2FzIGludm9rZWQuXG4gICAgICogVGhpcyB2YWx1ZSBpcyBhbHNvIHJlc2V0IGludGVybmFsbHkgb3V0c2lkZSBvZiBpbnZva2luZ1xuICAgICAqIHVwZGF0ZSwgYnV0IG9ubHkgd2hlbiBhIG5ldyBhbmltYXRpb24gZnJhbWUgaXMgcmVxdWVzdGVkLlxuICAgICAqIElmIHRoZSBwbGF0Zm9ybSBzdXBwb3J0cyBET01IaWdoUmVzVGltZVN0YW1wLFxuICAgICAqIHRoaXMgdmFsdWUgd2lsbCBoYXZlIGEgcHJlY2lzaW9uIG9mIDEgwrVzLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7RE9NSGlnaFJlc1RpbWVTdGFtcHxudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMFxuICAgICAqL1xuICAgIHRoaXMubGFzdFRpbWUgPSAwO1xuXG4gICAgLyoqXG4gICAgICogRmFjdG9yIG9mIGN1cnJlbnQge0BsaW5rIFBJWEkudGlja2VyLlRpY2tlciNkZWx0YVRpbWV9LlxuICAgICAqIEBleGFtcGxlXG4gICAgICogLy8gU2NhbGVzIHRpY2tlci5kZWx0YVRpbWUgdG8gd2hhdCB3b3VsZCBiZVxuICAgICAqIC8vIHRoZSBlcXVpdmFsZW50IG9mIGFwcHJveGltYXRlbHkgMTIwIEZQU1xuICAgICAqIHRpY2tlci5zcGVlZCA9IDI7XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMVxuICAgICAqL1xuICAgIHRoaXMuc3BlZWQgPSAxO1xuXG4gICAgLyoqXG4gICAgICogV2hldGhlciBvciBub3QgdGhpcyB0aWNrZXIgaGFzIGJlZW4gc3RhcnRlZC5cbiAgICAgKiBgdHJ1ZWAgaWYge0BsaW5rIFBJWEkudGlja2VyLlRpY2tlciNzdGFydH0gaGFzIGJlZW4gY2FsbGVkLlxuICAgICAqIGBmYWxzZWAgaWYge0BsaW5rIFBJWEkudGlja2VyLlRpY2tlciNzdG9wfSBoYXMgYmVlbiBjYWxsZWQuXG4gICAgICogV2hpbGUgYGZhbHNlYCwgdGhpcyB2YWx1ZSBtYXkgY2hhbmdlIHRvIGB0cnVlYCBpbiB0aGVcbiAgICAgKiBldmVudCBvZiB7QGxpbmsgUElYSS50aWNrZXIuVGlja2VyI2F1dG9TdGFydH0gYmVpbmcgYHRydWVgXG4gICAgICogYW5kIGEgbGlzdGVuZXIgaXMgYWRkZWQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqIEBkZWZhdWx0IGZhbHNlXG4gICAgICovXG4gICAgdGhpcy5zdGFydGVkID0gZmFsc2U7XG59XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKFRpY2tlci5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBUaGUgZnJhbWVzIHBlciBzZWNvbmQgYXQgd2hpY2ggdGhpcyB0aWNrZXIgaXMgcnVubmluZy5cbiAgICAgKiBUaGUgZGVmYXVsdCBpcyBhcHByb3hpbWF0ZWx5IDYwIGluIG1vc3QgbW9kZXJuIGJyb3dzZXJzLlxuICAgICAqICoqTm90ZToqKiBUaGlzIGRvZXMgbm90IGZhY3RvciBpbiB0aGUgdmFsdWUgb2ZcbiAgICAgKiB7QGxpbmsgUElYSS50aWNrZXIuVGlja2VyI3NwZWVkfSwgd2hpY2ggaXMgc3BlY2lmaWNcbiAgICAgKiB0byBzY2FsaW5nIHtAbGluayBQSVhJLnRpY2tlci5UaWNrZXIjZGVsdGFUaW1lfS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXJcbiAgICAgKiBAbWVtYmVyb2YgUElYSS50aWNrZXIuVGlja2VyI1xuICAgICAqIEByZWFkb25seVxuICAgICAqL1xuICAgIEZQUzoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIDEwMDAgLyB0aGlzLmVsYXBzZWRNUztcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBNYW5hZ2VzIHRoZSBtYXhpbXVtIGFtb3VudCBvZiBtaWxsaXNlY29uZHMgYWxsb3dlZCB0b1xuICAgICAqIGVsYXBzZSBiZXR3ZWVuIGludm9raW5nIHtAbGluayBQSVhJLnRpY2tlci5UaWNrZXIjdXBkYXRlfS5cbiAgICAgKiBUaGlzIHZhbHVlIGlzIHVzZWQgdG8gY2FwIHtAbGluayBQSVhJLnRpY2tlci5UaWNrZXIjZGVsdGFUaW1lfSxcbiAgICAgKiBidXQgZG9lcyBub3QgZWZmZWN0IHRoZSBtZWFzdXJlZCB2YWx1ZSBvZiB7QGxpbmsgUElYSS50aWNrZXIuVGlja2VyI0ZQU30uXG4gICAgICogV2hlbiBzZXR0aW5nIHRoaXMgcHJvcGVydHkgaXQgaXMgY2xhbXBlZCB0byBhIHZhbHVlIGJldHdlZW5cbiAgICAgKiBgMGAgYW5kIGBQSVhJLlRBUkdFVF9GUE1TICogMTAwMGAuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyXG4gICAgICogQG1lbWJlcm9mIFBJWEkudGlja2VyLlRpY2tlciNcbiAgICAgKiBAZGVmYXVsdCAxMFxuICAgICAqL1xuICAgIG1pbkZQUzoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIDEwMDAgLyB0aGlzLl9tYXhFbGFwc2VkTVM7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24oZnBzKVxuICAgICAgICB7XG4gICAgICAgICAgICAvLyBDbGFtcDogMCB0byBUQVJHRVRfRlBNU1xuICAgICAgICAgICAgdmFyIG1pbkZQTVMgPSBNYXRoLm1pbihNYXRoLm1heCgwLCBmcHMpIC8gMTAwMCwgQ09OU1QuVEFSR0VUX0ZQTVMpO1xuICAgICAgICAgICAgdGhpcy5fbWF4RWxhcHNlZE1TID0gMSAvIG1pbkZQTVM7XG4gICAgICAgIH1cbiAgICB9XG59KTtcblxuLyoqXG4gKiBDb25kaXRpb25hbGx5IHJlcXVlc3RzIGEgbmV3IGFuaW1hdGlvbiBmcmFtZS5cbiAqIElmIGEgZnJhbWUgaGFzIG5vdCBhbHJlYWR5IGJlZW4gcmVxdWVzdGVkLCBhbmQgaWYgdGhlIGludGVybmFsXG4gKiBlbWl0dGVyIGhhcyBsaXN0ZW5lcnMsIGEgbmV3IGZyYW1lIGlzIHJlcXVlc3RlZC5cbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5UaWNrZXIucHJvdG90eXBlLl9yZXF1ZXN0SWZOZWVkZWQgPSBmdW5jdGlvbiBfcmVxdWVzdElmTmVlZGVkKClcbntcbiAgICBpZiAodGhpcy5fcmVxdWVzdElkID09PSBudWxsICYmIHRoaXMuX2VtaXR0ZXIubGlzdGVuZXJzKFRJQ0ssIHRydWUpKVxuICAgIHtcbiAgICAgICAgLy8gZW5zdXJlIGNhbGxiYWNrcyBnZXQgY29ycmVjdCBkZWx0YVxuICAgICAgICB0aGlzLmxhc3RUaW1lID0gcGVyZm9ybWFuY2Uubm93KCk7XG4gICAgICAgIHRoaXMuX3JlcXVlc3RJZCA9IHJlcXVlc3RBbmltYXRpb25GcmFtZSh0aGlzLl90aWNrKTtcbiAgICB9XG59O1xuXG4vKipcbiAqIENvbmRpdGlvbmFsbHkgY2FuY2VscyBhIHBlbmRpbmcgYW5pbWF0aW9uIGZyYW1lLlxuICpcbiAqIEBwcml2YXRlXG4gKi9cblRpY2tlci5wcm90b3R5cGUuX2NhbmNlbElmTmVlZGVkID0gZnVuY3Rpb24gX2NhbmNlbElmTmVlZGVkKClcbntcbiAgICBpZiAodGhpcy5fcmVxdWVzdElkICE9PSBudWxsKVxuICAgIHtcbiAgICAgICAgY2FuY2VsQW5pbWF0aW9uRnJhbWUodGhpcy5fcmVxdWVzdElkKTtcbiAgICAgICAgdGhpcy5fcmVxdWVzdElkID0gbnVsbDtcbiAgICB9XG59O1xuXG4vKipcbiAqIENvbmRpdGlvbmFsbHkgcmVxdWVzdHMgYSBuZXcgYW5pbWF0aW9uIGZyYW1lLlxuICogSWYgdGhlIHRpY2tlciBoYXMgYmVlbiBzdGFydGVkIGl0IGNoZWNrcyBpZiBhIGZyYW1lIGhhcyBub3QgYWxyZWFkeVxuICogYmVlbiByZXF1ZXN0ZWQsIGFuZCBpZiB0aGUgaW50ZXJuYWwgZW1pdHRlciBoYXMgbGlzdGVuZXJzLiBJZiB0aGVzZVxuICogY29uZGl0aW9ucyBhcmUgbWV0LCBhIG5ldyBmcmFtZSBpcyByZXF1ZXN0ZWQuIElmIHRoZSB0aWNrZXIgaGFzIG5vdFxuICogYmVlbiBzdGFydGVkLCBidXQgYXV0b1N0YXJ0IGlzIGB0cnVlYCwgdGhlbiB0aGUgdGlja2VyIHN0YXJ0cyBub3csXG4gKiBhbmQgY29udGludWVzIHdpdGggdGhlIHByZXZpb3VzIGNvbmRpdGlvbnMgdG8gcmVxdWVzdCBhIG5ldyBmcmFtZS5cbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5UaWNrZXIucHJvdG90eXBlLl9zdGFydElmUG9zc2libGUgPSBmdW5jdGlvbiBfc3RhcnRJZlBvc3NpYmxlKClcbntcbiAgICBpZiAodGhpcy5zdGFydGVkKVxuICAgIHtcbiAgICAgICAgdGhpcy5fcmVxdWVzdElmTmVlZGVkKCk7XG4gICAgfVxuICAgIGVsc2UgaWYgKHRoaXMuYXV0b1N0YXJ0KVxuICAgIHtcbiAgICAgICAgdGhpcy5zdGFydCgpO1xuICAgIH1cbn07XG5cbi8qKlxuICogQ2FsbHMge0BsaW5rIG1vZHVsZTpldmVudGVtaXR0ZXIzLkV2ZW50RW1pdHRlciNvbn0gaW50ZXJuYWxseSBmb3IgdGhlXG4gKiBpbnRlcm5hbCAndGljaycgZXZlbnQuIEl0IGNoZWNrcyBpZiB0aGUgZW1pdHRlciBoYXMgbGlzdGVuZXJzLFxuICogYW5kIGlmIHNvIGl0IHJlcXVlc3RzIGEgbmV3IGFuaW1hdGlvbiBmcmFtZSBhdCB0aGlzIHBvaW50LlxuICpcbiAqIEBwYXJhbSBmbiB7RnVuY3Rpb259IFRoZSBsaXN0ZW5lciBmdW5jdGlvbiB0byBiZSBhZGRlZCBmb3IgdXBkYXRlc1xuICogQHBhcmFtIFtjb250ZXh0XSB7RnVuY3Rpb259IFRoZSBsaXN0ZW5lciBjb250ZXh0XG4gKiBAcmV0dXJucyB7UElYSS50aWNrZXIuVGlja2VyfSB0aGlzXG4gKi9cblRpY2tlci5wcm90b3R5cGUuYWRkID0gZnVuY3Rpb24gYWRkKGZuLCBjb250ZXh0KVxue1xuICAgIHRoaXMuX2VtaXR0ZXIub24oVElDSywgZm4sIGNvbnRleHQpO1xuXG4gICAgdGhpcy5fc3RhcnRJZlBvc3NpYmxlKCk7XG5cbiAgICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogQ2FsbHMge0BsaW5rIG1vZHVsZTpldmVudGVtaXR0ZXIzLkV2ZW50RW1pdHRlciNvbmNlfSBpbnRlcm5hbGx5IGZvciB0aGVcbiAqIGludGVybmFsICd0aWNrJyBldmVudC4gSXQgY2hlY2tzIGlmIHRoZSBlbWl0dGVyIGhhcyBsaXN0ZW5lcnMsXG4gKiBhbmQgaWYgc28gaXQgcmVxdWVzdHMgYSBuZXcgYW5pbWF0aW9uIGZyYW1lIGF0IHRoaXMgcG9pbnQuXG4gKlxuICogQHBhcmFtIGZuIHtGdW5jdGlvbn0gVGhlIGxpc3RlbmVyIGZ1bmN0aW9uIHRvIGJlIGFkZGVkIGZvciBvbmUgdXBkYXRlXG4gKiBAcGFyYW0gW2NvbnRleHRdIHtGdW5jdGlvbn0gVGhlIGxpc3RlbmVyIGNvbnRleHRcbiAqIEByZXR1cm5zIHtQSVhJLnRpY2tlci5UaWNrZXJ9IHRoaXNcbiAqL1xuVGlja2VyLnByb3RvdHlwZS5hZGRPbmNlID0gZnVuY3Rpb24gYWRkT25jZShmbiwgY29udGV4dClcbntcbiAgICB0aGlzLl9lbWl0dGVyLm9uY2UoVElDSywgZm4sIGNvbnRleHQpO1xuXG4gICAgdGhpcy5fc3RhcnRJZlBvc3NpYmxlKCk7XG5cbiAgICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogQ2FsbHMge0BsaW5rIG1vZHVsZTpldmVudGVtaXR0ZXIzLkV2ZW50RW1pdHRlciNvZmZ9IGludGVybmFsbHkgZm9yICd0aWNrJyBldmVudC5cbiAqIEl0IGNoZWNrcyBpZiB0aGUgZW1pdHRlciBoYXMgbGlzdGVuZXJzIGZvciAndGljaycgZXZlbnQuXG4gKiBJZiBpdCBkb2VzLCB0aGVuIGl0IGNhbmNlbHMgdGhlIGFuaW1hdGlvbiBmcmFtZS5cbiAqXG4gKiBAcGFyYW0gW2ZuXSB7RnVuY3Rpb259IFRoZSBsaXN0ZW5lciBmdW5jdGlvbiB0byBiZSByZW1vdmVkXG4gKiBAcGFyYW0gW2NvbnRleHRdIHtGdW5jdGlvbn0gVGhlIGxpc3RlbmVyIGNvbnRleHQgdG8gYmUgcmVtb3ZlZFxuICogQHJldHVybnMge1BJWEkudGlja2VyLlRpY2tlcn0gdGhpc1xuICovXG5UaWNrZXIucHJvdG90eXBlLnJlbW92ZSA9IGZ1bmN0aW9uIHJlbW92ZShmbiwgY29udGV4dClcbntcbiAgICB0aGlzLl9lbWl0dGVyLm9mZihUSUNLLCBmbiwgY29udGV4dCk7XG5cbiAgICBpZiAoIXRoaXMuX2VtaXR0ZXIubGlzdGVuZXJzKFRJQ0ssIHRydWUpKVxuICAgIHtcbiAgICAgICAgdGhpcy5fY2FuY2VsSWZOZWVkZWQoKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogU3RhcnRzIHRoZSB0aWNrZXIuIElmIHRoZSB0aWNrZXIgaGFzIGxpc3RlbmVyc1xuICogYSBuZXcgYW5pbWF0aW9uIGZyYW1lIGlzIHJlcXVlc3RlZCBhdCB0aGlzIHBvaW50LlxuICovXG5UaWNrZXIucHJvdG90eXBlLnN0YXJ0ID0gZnVuY3Rpb24gc3RhcnQoKVxue1xuICAgIGlmICghdGhpcy5zdGFydGVkKVxuICAgIHtcbiAgICAgICAgdGhpcy5zdGFydGVkID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5fcmVxdWVzdElmTmVlZGVkKCk7XG4gICAgfVxufTtcblxuLyoqXG4gKiBTdG9wcyB0aGUgdGlja2VyLiBJZiB0aGUgdGlja2VyIGhhcyByZXF1ZXN0ZWRcbiAqIGFuIGFuaW1hdGlvbiBmcmFtZSBpdCBpcyBjYW5jZWxlZCBhdCB0aGlzIHBvaW50LlxuICovXG5UaWNrZXIucHJvdG90eXBlLnN0b3AgPSBmdW5jdGlvbiBzdG9wKClcbntcbiAgICBpZiAodGhpcy5zdGFydGVkKVxuICAgIHtcbiAgICAgICAgdGhpcy5zdGFydGVkID0gZmFsc2U7XG4gICAgICAgIHRoaXMuX2NhbmNlbElmTmVlZGVkKCk7XG4gICAgfVxufTtcblxuLyoqXG4gKiBUcmlnZ2VycyBhbiB1cGRhdGUuIEFuIHVwZGF0ZSBlbnRhaWxzIHNldHRpbmcgdGhlXG4gKiBjdXJyZW50IHtAbGluayBQSVhJLnRpY2tlci5UaWNrZXIjZWxhcHNlZE1TfSxcbiAqIHRoZSBjdXJyZW50IHtAbGluayBQSVhJLnRpY2tlci5UaWNrZXIjZGVsdGFUaW1lfSxcbiAqIGludm9raW5nIGFsbCBsaXN0ZW5lcnMgd2l0aCBjdXJyZW50IGRlbHRhVGltZSxcbiAqIGFuZCB0aGVuIGZpbmFsbHkgc2V0dGluZyB7QGxpbmsgUElYSS50aWNrZXIuVGlja2VyI2xhc3RUaW1lfVxuICogd2l0aCB0aGUgdmFsdWUgb2YgY3VycmVudFRpbWUgdGhhdCB3YXMgcHJvdmlkZWQuXG4gKiBUaGlzIG1ldGhvZCB3aWxsIGJlIGNhbGxlZCBhdXRvbWF0aWNhbGx5IGJ5IGFuaW1hdGlvblxuICogZnJhbWUgY2FsbGJhY2tzIGlmIHRoZSB0aWNrZXIgaW5zdGFuY2UgaGFzIGJlZW4gc3RhcnRlZFxuICogYW5kIGxpc3RlbmVycyBhcmUgYWRkZWQuXG4gKlxuICogQHBhcmFtIFtjdXJyZW50VGltZT1wZXJmb3JtYW5jZS5ub3coKV0ge0RPTUhpZ2hSZXNUaW1lU3RhbXB8bnVtYmVyfSB0aGUgY3VycmVudCB0aW1lIG9mIGV4ZWN1dGlvblxuICovXG5UaWNrZXIucHJvdG90eXBlLnVwZGF0ZSA9IGZ1bmN0aW9uIHVwZGF0ZShjdXJyZW50VGltZSlcbntcbiAgICB2YXIgZWxhcHNlZE1TO1xuXG4gICAgLy8gQWxsb3cgY2FsbGluZyB1cGRhdGUgZGlyZWN0bHkgd2l0aCBkZWZhdWx0IGN1cnJlbnRUaW1lLlxuICAgIGN1cnJlbnRUaW1lID0gY3VycmVudFRpbWUgfHwgcGVyZm9ybWFuY2Uubm93KCk7XG4gICAgLy8gU2F2ZSB1bmNhcHBlZCBlbGFwc2VkTVMgZm9yIG1lYXN1cmVtZW50XG4gICAgZWxhcHNlZE1TID0gdGhpcy5lbGFwc2VkTVMgPSBjdXJyZW50VGltZSAtIHRoaXMubGFzdFRpbWU7XG5cbiAgICAvLyBjYXAgdGhlIG1pbGxpc2Vjb25kcyBlbGFwc2VkIHVzZWQgZm9yIGRlbHRhVGltZVxuICAgIGlmIChlbGFwc2VkTVMgPiB0aGlzLl9tYXhFbGFwc2VkTVMpXG4gICAge1xuICAgICAgICBlbGFwc2VkTVMgPSB0aGlzLl9tYXhFbGFwc2VkTVM7XG4gICAgfVxuXG4gICAgdGhpcy5kZWx0YVRpbWUgPSBlbGFwc2VkTVMgKiBDT05TVC5UQVJHRVRfRlBNUyAqIHRoaXMuc3BlZWQ7XG5cbiAgICAvLyBJbnZva2UgbGlzdGVuZXJzIGFkZGVkIHRvIGludGVybmFsIGVtaXR0ZXJcbiAgICB0aGlzLl9lbWl0dGVyLmVtaXQoVElDSywgdGhpcy5kZWx0YVRpbWUpO1xuXG4gICAgdGhpcy5sYXN0VGltZSA9IGN1cnJlbnRUaW1lO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBUaWNrZXI7XG4iLCJ2YXIgVGlja2VyID0gcmVxdWlyZSgnLi9UaWNrZXInKTtcblxuLyoqXG4gKiBUaGUgc2hhcmVkIHRpY2tlciBpbnN0YW5jZSB1c2VkIGJ5IHtAbGluayBQSVhJLmV4dHJhcy5Nb3ZpZUNsaXB9LlxuICogYW5kIGJ5IHtAbGluayBQSVhJLmludGVyYWN0aW9uLkludGVyYWN0aW9uTWFuYWdlcn0uXG4gKiBUaGUgcHJvcGVydHkge0BsaW5rIFBJWEkudGlja2VyLlRpY2tlciNhdXRvU3RhcnR9IGlzIHNldCB0byBgdHJ1ZWBcbiAqIGZvciB0aGlzIGluc3RhbmNlLiBQbGVhc2UgZm9sbG93IHRoZSBleGFtcGxlcyBmb3IgdXNhZ2UsIGluY2x1ZGluZ1xuICogaG93IHRvIG9wdC1vdXQgb2YgYXV0by1zdGFydGluZyB0aGUgc2hhcmVkIHRpY2tlci5cbiAqXG4gKiBAZXhhbXBsZVxuICogdmFyIHRpY2tlciA9IFBJWEkudGlja2VyLnNoYXJlZDtcbiAqIC8vIFNldCB0aGlzIHRvIHByZXZlbnQgc3RhcnRpbmcgdGhpcyB0aWNrZXIgd2hlbiBsaXN0ZW5lcnMgYXJlIGFkZGVkLlxuICogLy8gQnkgZGVmYXVsdCB0aGlzIGlzIHRydWUgb25seSBmb3IgdGhlIFBJWEkudGlja2VyLnNoYXJlZCBpbnN0YW5jZS5cbiAqIHRpY2tlci5hdXRvU3RhcnQgPSBmYWxzZTtcbiAqIC8vIEZZSSwgY2FsbCB0aGlzIHRvIGVuc3VyZSB0aGUgdGlja2VyIGlzIHN0b3BwZWQuIEl0IHNob3VsZCBiZSBzdG9wcGVkXG4gKiAvLyBpZiB5b3UgaGF2ZSBub3QgYXR0ZW1wdGVkIHRvIHJlbmRlciBhbnl0aGluZyB5ZXQuXG4gKiB0aWNrZXIuc3RvcCgpO1xuICogLy8gQ2FsbCB0aGlzIHdoZW4geW91IGFyZSByZWFkeSBmb3IgYSBydW5uaW5nIHNoYXJlZCB0aWNrZXIuXG4gKiB0aWNrZXIuc3RhcnQoKTtcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gWW91IG1heSB1c2UgdGhlIHNoYXJlZCB0aWNrZXIgdG8gcmVuZGVyLi4uXG4gKiB2YXIgcmVuZGVyZXIgPSBQSVhJLmF1dG9EZXRlY3RSZW5kZXJlcig4MDAsIDYwMCk7XG4gKiB2YXIgc3RhZ2UgPSBuZXcgUElYSS5Db250YWluZXIoKTtcbiAqIHZhciBpbnRlcmFjdGlvbk1hbmFnZXIgPSBQSVhJLmludGVyYWN0aW9uLkludGVyYWN0aW9uTWFuYWdlcihyZW5kZXJlcik7XG4gKiBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKHJlbmRlcmVyLnZpZXcpO1xuICogdGlja2VyLmFkZChmdW5jdGlvbiAodGltZSkge1xuICogICAgIHJlbmRlcmVyLnJlbmRlcihzdGFnZSk7XG4gKiB9KTtcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gT3IgeW91IGNhbiBqdXN0IHVwZGF0ZSBpdCBtYW51YWxseS5cbiAqIHRpY2tlci5hdXRvU3RhcnQgPSBmYWxzZTtcbiAqIHRpY2tlci5zdG9wKCk7XG4gKiBmdW5jdGlvbiBhbmltYXRlKHRpbWUpIHtcbiAqICAgICB0aWNrZXIudXBkYXRlKHRpbWUpO1xuICogICAgIHJlbmRlcmVyLnJlbmRlcihzdGFnZSk7XG4gKiAgICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKGFuaW1hdGUpO1xuICogfVxuICogYW5pbWF0ZShwZXJmb3JtYW5jZS5ub3coKSk7XG4gKlxuICogQHR5cGUge1BJWEkudGlja2VyLlRpY2tlcn1cbiAqIEBtZW1iZXJvZiBQSVhJLnRpY2tlclxuICovXG52YXIgc2hhcmVkID0gbmV3IFRpY2tlcigpO1xuc2hhcmVkLmF1dG9TdGFydCA9IHRydWU7XG5cbi8qKlxuICogQG5hbWVzcGFjZSBQSVhJLnRpY2tlclxuICovXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgICBzaGFyZWQ6IHNoYXJlZCxcbiAgICBUaWNrZXI6IFRpY2tlclxufTtcbiIsIi8qKlxuICogR2VuZXJpYyBNYXNrIFN0YWNrIGRhdGEgc3RydWN0dXJlXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKi9cblxudmFyIEdMX01BUCA9IHt9O1xuXG5cbnZhciBjcmVhdGVJbmRpY2VzRm9yUXVhZHMgPSBmdW5jdGlvbiAoc2l6ZSlcbntcbiAgICAvLyB0aGUgdG90YWwgbnVtYmVyIG9mIGluZGljZXMgaW4gb3VyIGFycmF5LCB0aGVyZSBhcmUgNiBwb2ludHMgcGVyIHF1YWQuXG4gICBcbiAgICB2YXIgdG90YWxJbmRpY2VzID0gc2l6ZSAqIDY7XG5cbiAgICB2YXIgaW5kaWNlcyA9IG5ldyBVaW50MTZBcnJheSh0b3RhbEluZGljZXMpO1xuXG5cdC8vIGZpbGwgdGhlIGluZGljZXMgd2l0aCB0aGUgcXVhZHMgdG8gZHJhd1xuICAgIGZvciAodmFyIGk9MCwgaj0wOyBpIDwgdG90YWxJbmRpY2VzOyBpICs9IDYsIGogKz0gNClcbiAgICB7XG4gICAgICAgIGluZGljZXNbaSArIDBdID0gaiArIDA7XG4gICAgICAgIGluZGljZXNbaSArIDFdID0gaiArIDE7XG4gICAgICAgIGluZGljZXNbaSArIDJdID0gaiArIDI7XG4gICAgICAgIGluZGljZXNbaSArIDNdID0gaiArIDA7XG4gICAgICAgIGluZGljZXNbaSArIDRdID0gaiArIDI7XG4gICAgICAgIGluZGljZXNbaSArIDVdID0gaiArIDM7XG4gICAgfVxuXG4gICAgcmV0dXJuIGluZGljZXM7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGNyZWF0ZUluZGljZXNGb3JRdWFkczsiLCJ2YXIgQ09OU1QgPSByZXF1aXJlKCcuLi9jb25zdCcpO1xuXG4vKipcbiAqIEBuYW1lc3BhY2UgUElYSS51dGlsc1xuICovXG52YXIgdXRpbHMgPSBtb2R1bGUuZXhwb3J0cyA9IHtcbiAgICBfdWlkOiAwLFxuICAgIF9zYWlkSGVsbG86IGZhbHNlLFxuXG4gICAgRXZlbnRFbWl0dGVyOiAgIHJlcXVpcmUoJ2V2ZW50ZW1pdHRlcjMnKSxcbiAgICBwbHVnaW5UYXJnZXQ6ICAgcmVxdWlyZSgnLi9wbHVnaW5UYXJnZXQnKSxcbiAgICBhc3luYzogICAgICAgICAgcmVxdWlyZSgnYXN5bmMnKSxcblxuICAgIC8qKlxuICAgICAqIEdldHMgdGhlIG5leHQgdW5pcXVlIGlkZW50aWZpZXJcbiAgICAgKlxuICAgICAqIEByZXR1cm4ge251bWJlcn0gVGhlIG5leHQgdW5pcXVlIGlkZW50aWZpZXIgdG8gdXNlLlxuICAgICAqL1xuICAgIHVpZDogZnVuY3Rpb24gKClcbiAgICB7XG4gICAgICAgIHJldHVybiArK3V0aWxzLl91aWQ7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIENvbnZlcnRzIGEgaGV4IGNvbG9yIG51bWJlciB0byBhbiBbUiwgRywgQl0gYXJyYXlcbiAgICAgKlxuICAgICAqIEBwYXJhbSBoZXgge251bWJlcn1cbiAgICAgKiBAcGFyYW0gIHtudW1iZXJbXX0gW291dD1bXV1cbiAgICAgKiBAcmV0dXJuIHtudW1iZXJbXX0gQW4gYXJyYXkgcmVwcmVzZW50aW5nIHRoZSBbUiwgRywgQl0gb2YgdGhlIGNvbG9yLlxuICAgICAqL1xuICAgIGhleDJyZ2I6IGZ1bmN0aW9uIChoZXgsIG91dClcbiAgICB7XG4gICAgICAgIG91dCA9IG91dCB8fCBbXTtcblxuICAgICAgICBvdXRbMF0gPSAoaGV4ID4+IDE2ICYgMHhGRikgLyAyNTU7XG4gICAgICAgIG91dFsxXSA9IChoZXggPj4gOCAmIDB4RkYpIC8gMjU1O1xuICAgICAgICBvdXRbMl0gPSAoaGV4ICYgMHhGRikgLyAyNTU7XG5cbiAgICAgICAgcmV0dXJuIG91dDtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQ29udmVydHMgYSBoZXggY29sb3IgbnVtYmVyIHRvIGEgc3RyaW5nLlxuICAgICAqXG4gICAgICogQHBhcmFtIGhleCB7bnVtYmVyfVxuICAgICAqIEByZXR1cm4ge3N0cmluZ30gVGhlIHN0cmluZyBjb2xvci5cbiAgICAgKi9cbiAgICBoZXgyc3RyaW5nOiBmdW5jdGlvbiAoaGV4KVxuICAgIHtcbiAgICAgICAgaGV4ID0gaGV4LnRvU3RyaW5nKDE2KTtcbiAgICAgICAgaGV4ID0gJzAwMDAwMCcuc3Vic3RyKDAsIDYgLSBoZXgubGVuZ3RoKSArIGhleDtcblxuICAgICAgICByZXR1cm4gJyMnICsgaGV4O1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBDb252ZXJ0cyBhIGNvbG9yIGFzIGFuIFtSLCBHLCBCXSBhcnJheSB0byBhIGhleCBudW1iZXJcbiAgICAgKlxuICAgICAqIEBwYXJhbSByZ2Ige251bWJlcltdfVxuICAgICAqIEByZXR1cm4ge251bWJlcn0gVGhlIGNvbG9yIG51bWJlclxuICAgICAqL1xuICAgIHJnYjJoZXg6IGZ1bmN0aW9uIChyZ2IpXG4gICAge1xuICAgICAgICByZXR1cm4gKChyZ2JbMF0qMjU1IDw8IDE2KSArIChyZ2JbMV0qMjU1IDw8IDgpICsgcmdiWzJdKjI1NSk7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIENoZWNrcyB3aGV0aGVyIHRoZSBDYW52YXMgQmxlbmRNb2RlcyBhcmUgc3VwcG9ydGVkIGJ5IHRoZSBjdXJyZW50IGJyb3dzZXJcbiAgICAgKlxuICAgICAqIEByZXR1cm4ge2Jvb2xlYW59IHdoZXRoZXIgdGhleSBhcmUgc3VwcG9ydGVkXG4gICAgICovXG4gICAgY2FuVXNlTmV3Q2FudmFzQmxlbmRNb2RlczogZnVuY3Rpb24gKClcbiAgICB7XG4gICAgICAgIGlmICh0eXBlb2YgZG9jdW1lbnQgPT09ICd1bmRlZmluZWQnKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgcG5nSGVhZCA9ICdkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQUFRQUFBQUJBUU1BQUFERDhwMk9BQUFBQTFCTVZFWC8nO1xuICAgICAgICB2YXIgcG5nRW5kID0gJ0FBQUFDa2xFUVZRSTEyTmdBQUFBQWdBQjRpRzhNd0FBQUFCSlJVNUVya0pnZ2c9PSc7XG5cbiAgICAgICAgdmFyIG1hZ2VudGEgPSBuZXcgSW1hZ2UoKTtcbiAgICAgICAgbWFnZW50YS5zcmMgPSBwbmdIZWFkICsgJ0FQODA0T2E2JyArIHBuZ0VuZDtcblxuICAgICAgICB2YXIgeWVsbG93ID0gbmV3IEltYWdlKCk7XG4gICAgICAgIHllbGxvdy5zcmMgPSBwbmdIZWFkICsgJy93Q0t4dlJGJyArIHBuZ0VuZDtcblxuICAgICAgICB2YXIgY2FudmFzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnY2FudmFzJyk7XG4gICAgICAgIGNhbnZhcy53aWR0aCA9IDY7XG4gICAgICAgIGNhbnZhcy5oZWlnaHQgPSAxO1xuXG4gICAgICAgIHZhciBjb250ZXh0ID0gY2FudmFzLmdldENvbnRleHQoJzJkJyk7XG4gICAgICAgIGNvbnRleHQuZ2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uID0gJ211bHRpcGx5JztcbiAgICAgICAgY29udGV4dC5kcmF3SW1hZ2UobWFnZW50YSwgMCwgMCk7XG4gICAgICAgIGNvbnRleHQuZHJhd0ltYWdlKHllbGxvdywgMiwgMCk7XG5cbiAgICAgICAgdmFyIGRhdGEgPSBjb250ZXh0LmdldEltYWdlRGF0YSgyLDAsMSwxKS5kYXRhO1xuXG4gICAgICAgIHJldHVybiAoZGF0YVswXSA9PT0gMjU1ICYmIGRhdGFbMV0gPT09IDAgJiYgZGF0YVsyXSA9PT0gMCk7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIEdpdmVuIGEgbnVtYmVyLCB0aGlzIGZ1bmN0aW9uIHJldHVybnMgdGhlIGNsb3Nlc3QgbnVtYmVyIHRoYXQgaXMgYSBwb3dlciBvZiB0d29cbiAgICAgKiB0aGlzIGZ1bmN0aW9uIGlzIHRha2VuIGZyb20gU3RhcmxpbmcgRnJhbWV3b3JrIGFzIGl0cyBwcmV0dHkgbmVhdCA7KVxuICAgICAqXG4gICAgICogQHBhcmFtIG51bWJlciB7bnVtYmVyfVxuICAgICAqIEByZXR1cm4ge251bWJlcn0gdGhlIGNsb3Nlc3QgbnVtYmVyIHRoYXQgaXMgYSBwb3dlciBvZiB0d29cbiAgICAgKi9cbiAgICBnZXROZXh0UG93ZXJPZlR3bzogZnVuY3Rpb24gKG51bWJlcilcbiAgICB7XG4gICAgICAgIC8vIHNlZTogaHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9Qb3dlcl9vZl90d28jRmFzdF9hbGdvcml0aG1fdG9fY2hlY2tfaWZfYV9wb3NpdGl2ZV9udW1iZXJfaXNfYV9wb3dlcl9vZl90d29cbiAgICAgICAgaWYgKG51bWJlciA+IDAgJiYgKG51bWJlciAmIChudW1iZXIgLSAxKSkgPT09IDApXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiBudW1iZXI7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgICB2YXIgcmVzdWx0ID0gMTtcblxuICAgICAgICAgICAgd2hpbGUgKHJlc3VsdCA8IG51bWJlcilcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICByZXN1bHQgPDw9IDE7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogY2hlY2tzIGlmIHRoZSBnaXZlbiB3aWR0aCBhbmQgaGVpZ2h0IG1ha2UgYSBwb3dlciBvZiB0d28gcmVjdGFuZ2xlXG4gICAgICpcbiAgICAgKiBAcGFyYW0gd2lkdGgge251bWJlcn1cbiAgICAgKiBAcGFyYW0gaGVpZ2h0IHtudW1iZXJ9XG4gICAgICogQHJldHVybiB7Ym9vbGVhbn1cbiAgICAgKi9cbiAgICBpc1Bvd2VyT2ZUd286IGZ1bmN0aW9uICh3aWR0aCwgaGVpZ2h0KVxuICAgIHtcbiAgICAgICAgcmV0dXJuICh3aWR0aCA+IDAgJiYgKHdpZHRoICYgKHdpZHRoIC0gMSkpID09PSAwICYmIGhlaWdodCA+IDAgJiYgKGhlaWdodCAmIChoZWlnaHQgLSAxKSkgPT09IDApO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBnZXQgdGhlIHJlc29sdXRpb24gb2YgYW4gYXNzZXQgYnkgbG9va2luZyBmb3IgdGhlIHByZWZpeFxuICAgICAqIHVzZWQgYnkgc3ByaXRlc2hlZXRzIGFuZCBpbWFnZSB1cmxzXG4gICAgICpcbiAgICAgKiBAcGFyYW0gdXJsIHtzdHJpbmd9IHRoZSBpbWFnZSBwYXRoXG4gICAgICogQHJldHVybiB7bnVtYmVyfVxuICAgICAqL1xuICAgIGdldFJlc29sdXRpb25PZlVybDogZnVuY3Rpb24gKHVybClcbiAgICB7XG4gICAgICAgIHZhciByZXNvbHV0aW9uID0gQ09OU1QuUkVUSU5BX1BSRUZJWC5leGVjKHVybCk7XG5cbiAgICAgICAgaWYgKHJlc29sdXRpb24pXG4gICAgICAgIHtcbiAgICAgICAgICAgcmV0dXJuIHBhcnNlRmxvYXQocmVzb2x1dGlvblsxXSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gMTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogTG9ncyBvdXQgdGhlIHZlcnNpb24gYW5kIHJlbmRlcmVyIGluZm9ybWF0aW9uIGZvciB0aGlzIHJ1bm5pbmcgaW5zdGFuY2Ugb2YgUElYSS5cbiAgICAgKiBJZiB5b3UgZG9uJ3Qgd2FudCB0byBzZWUgdGhpcyBtZXNzYWdlIHlvdSBjYW4gc2V0IGBQSVhJLnV0aWxzLl9zYWlkSGVsbG8gPSB0cnVlO2BcbiAgICAgKiBzbyB0aGUgbGlicmFyeSB0aGlua3MgaXQgYWxyZWFkeSBzYWlkIGl0LiBLZWVwIGluIG1pbmQgdGhhdCBkb2luZyB0aGF0IHdpbGwgZm9yZXZlclxuICAgICAqIG1ha2VzIHlvdSBhIGplcmsgZmFjZS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSB0eXBlIC0gVGhlIHN0cmluZyByZW5kZXJlciB0eXBlIHRvIGxvZy5cbiAgICAgKiBAY29uc3RhbnRcbiAgICAgKiBAc3RhdGljXG4gICAgICovXG4gICAgc2F5SGVsbG86IGZ1bmN0aW9uICh0eXBlKVxuICAgIHtcbiAgICAgICAgaWYgKHV0aWxzLl9zYWlkSGVsbG8pXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChuYXZpZ2F0b3IudXNlckFnZW50LnRvTG93ZXJDYXNlKCkuaW5kZXhPZignY2hyb21lJykgPiAtMSlcbiAgICAgICAge1xuICAgICAgICAgICAgdmFyIGFyZ3MgPSBbXG4gICAgICAgICAgICAgICAgJ1xcbiAlYyAlYyAlYyBQaXhpLmpzICcgKyBDT05TVC5WRVJTSU9OICsgJyAtIOKcsCAnICsgdHlwZSArICcg4pywICAlYyAnICsgJyAlYyAnICsgJyBodHRwOi8vd3d3LnBpeGlqcy5jb20vICAlYyAlYyDimaUlY+KZpSVj4pmlIFxcblxcbicsXG4gICAgICAgICAgICAgICAgJ2JhY2tncm91bmQ6ICNmZjY2YTU7IHBhZGRpbmc6NXB4IDA7JyxcbiAgICAgICAgICAgICAgICAnYmFja2dyb3VuZDogI2ZmNjZhNTsgcGFkZGluZzo1cHggMDsnLFxuICAgICAgICAgICAgICAgICdjb2xvcjogI2ZmNjZhNTsgYmFja2dyb3VuZDogIzAzMDMwNzsgcGFkZGluZzo1cHggMDsnLFxuICAgICAgICAgICAgICAgICdiYWNrZ3JvdW5kOiAjZmY2NmE1OyBwYWRkaW5nOjVweCAwOycsXG4gICAgICAgICAgICAgICAgJ2JhY2tncm91bmQ6ICNmZmMzZGM7IHBhZGRpbmc6NXB4IDA7JyxcbiAgICAgICAgICAgICAgICAnYmFja2dyb3VuZDogI2ZmNjZhNTsgcGFkZGluZzo1cHggMDsnLFxuICAgICAgICAgICAgICAgICdjb2xvcjogI2ZmMjQyNDsgYmFja2dyb3VuZDogI2ZmZjsgcGFkZGluZzo1cHggMDsnLFxuICAgICAgICAgICAgICAgICdjb2xvcjogI2ZmMjQyNDsgYmFja2dyb3VuZDogI2ZmZjsgcGFkZGluZzo1cHggMDsnLFxuICAgICAgICAgICAgICAgICdjb2xvcjogI2ZmMjQyNDsgYmFja2dyb3VuZDogI2ZmZjsgcGFkZGluZzo1cHggMDsnXG4gICAgICAgICAgICBdO1xuXG4gICAgICAgICAgICB3aW5kb3cuY29uc29sZS5sb2cuYXBwbHkoY29uc29sZSwgYXJncyk7IC8vanNoaW50IGlnbm9yZTpsaW5lXG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAod2luZG93LmNvbnNvbGUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHdpbmRvdy5jb25zb2xlLmxvZygnUGl4aS5qcyAnICsgQ09OU1QuVkVSU0lPTiArICcgLSAnICsgdHlwZSArICcgLSBodHRwOi8vd3d3LnBpeGlqcy5jb20vJyk7IC8vanNoaW50IGlnbm9yZTpsaW5lXG4gICAgICAgIH1cblxuICAgICAgICB1dGlscy5fc2FpZEhlbGxvID0gdHJ1ZTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogSGVscGVyIGZvciBjaGVja2luZyBmb3Igd2ViZ2wgc3VwcG9ydFxuICAgICAqXG4gICAgICogQHJldHVybiB7Ym9vbGVhbn1cbiAgICAgKi9cbiAgICBpc1dlYkdMU3VwcG9ydGVkOiBmdW5jdGlvbiAoKVxuICAgIHtcbiAgICAgICAgdmFyIGNvbnRleHRPcHRpb25zID0geyBzdGVuY2lsOiB0cnVlIH07XG4gICAgICAgIHRyeVxuICAgICAgICB7XG4gICAgICAgICAgICBpZiAoIXdpbmRvdy5XZWJHTFJlbmRlcmluZ0NvbnRleHQpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB2YXIgY2FudmFzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnY2FudmFzJyksXG4gICAgICAgICAgICAgICAgZ2wgPSBjYW52YXMuZ2V0Q29udGV4dCgnd2ViZ2wnLCBjb250ZXh0T3B0aW9ucykgfHwgY2FudmFzLmdldENvbnRleHQoJ2V4cGVyaW1lbnRhbC13ZWJnbCcsIGNvbnRleHRPcHRpb25zKTtcblxuICAgICAgICAgICAgcmV0dXJuICEhKGdsICYmIGdsLmdldENvbnRleHRBdHRyaWJ1dGVzKCkuc3RlbmNpbCk7XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHNpZ24gb2YgbnVtYmVyXG4gICAgICpcbiAgICAgKiBAcGFyYW0gbiB7bnVtYmVyfVxuICAgICAqIEByZXR1cm5zIHtudW1iZXJ9IDAgaWYgbiBpcyAwLCAtMSBpZiBuIGlzIG5lZ2F0aXZlLCAxIGlmIG4gaSBwb3NpdGl2ZVxuICAgICAqL1xuICAgIHNpZ246IGZ1bmN0aW9uIChuKVxuICAgIHtcbiAgICAgICAgcmV0dXJuIG4gPyAobiA8IDAgPyAtMSA6IDEpIDogMDtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogcmVtb3ZlSXRlbXNcbiAgICAgKlxuICAgICAqIEBwYXJhbSB7YXJyYXl9IGFyciBUaGUgdGFyZ2V0IGFycmF5XG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHN0YXJ0SWR4IFRoZSBpbmRleCB0byBiZWdpbiByZW1vdmluZyBmcm9tIChpbmNsdXNpdmUpXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHJlbW92ZUNvdW50IEhvdyBtYW55IGl0ZW1zIHRvIHJlbW92ZVxuICAgICAqL1xuICAgIHJlbW92ZUl0ZW1zOiBmdW5jdGlvbiAoYXJyLCBzdGFydElkeCwgcmVtb3ZlQ291bnQpXG4gICAge1xuICAgICAgICB2YXIgbGVuZ3RoID0gYXJyLmxlbmd0aDtcblxuICAgICAgICBpZiAoc3RhcnRJZHggPj0gbGVuZ3RoIHx8IHJlbW92ZUNvdW50ID09PSAwKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICByZW1vdmVDb3VudCA9IChzdGFydElkeCtyZW1vdmVDb3VudCA+IGxlbmd0aCA/IGxlbmd0aC1zdGFydElkeCA6IHJlbW92ZUNvdW50KTtcbiAgICAgICAgZm9yICh2YXIgaSA9IHN0YXJ0SWR4LCBsZW4gPSBsZW5ndGgtcmVtb3ZlQ291bnQ7IGkgPCBsZW47ICsraSlcbiAgICAgICAge1xuICAgICAgICAgICAgYXJyW2ldID0gYXJyW2kgKyByZW1vdmVDb3VudF07XG4gICAgICAgIH1cblxuICAgICAgICBhcnIubGVuZ3RoID0gbGVuO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBAdG9kbyBEZXNjcmliZSBwcm9wZXJ0eSB1c2FnZVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgVGV4dHVyZUNhY2hlOiB7fSxcblxuICAgIC8qKlxuICAgICAqIEB0b2RvIERlc2NyaWJlIHByb3BlcnR5IHVzYWdlXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICBCYXNlVGV4dHVyZUNhY2hlOiB7fVxufTtcbiIsIi8qKlxuICogTWl4aW5zIGZ1bmN0aW9uYWxpdHkgdG8gbWFrZSBhbiBvYmplY3QgaGF2ZSBcInBsdWdpbnNcIi5cbiAqXG4gKiBAbWl4aW5cbiAqIEBtZW1iZXJvZiBQSVhJLnV0aWxzXG4gKiBAcGFyYW0gb2JqIHtvYmplY3R9IFRoZSBvYmplY3QgdG8gbWl4IGludG8uXG4gKiBAZXhhbXBsZVxuICogICAgICBmdW5jdGlvbiBNeU9iamVjdCgpIHt9XG4gKlxuICogICAgICBwbHVnaW5UYXJnZXQubWl4aW4oTXlPYmplY3QpO1xuICovXG5mdW5jdGlvbiBwbHVnaW5UYXJnZXQob2JqKVxue1xuICAgIG9iai5fX3BsdWdpbnMgPSB7fTtcblxuICAgIC8qKlxuICAgICAqIEFkZHMgYSBwbHVnaW4gdG8gYW4gb2JqZWN0XG4gICAgICpcbiAgICAgKiBAcGFyYW0gcGx1Z2luTmFtZSB7c3RyaW5nfSBUaGUgZXZlbnRzIHRoYXQgc2hvdWxkIGJlIGxpc3RlZC5cbiAgICAgKiBAcGFyYW0gY3RvciB7RnVuY3Rpb259IFRoZSBjb25zdHJ1Y3RvciBmdW5jdGlvbiBmb3IgdGhlIHBsdWdpbi5cbiAgICAgKi9cbiAgICBvYmoucmVnaXN0ZXJQbHVnaW4gPSBmdW5jdGlvbiAocGx1Z2luTmFtZSwgY3RvcilcbiAgICB7XG4gICAgICAgIG9iai5fX3BsdWdpbnNbcGx1Z2luTmFtZV0gPSBjdG9yO1xuICAgIH07XG5cbiAgICAvKipcbiAgICAgKiBJbnN0YW50aWF0ZXMgYWxsIHRoZSBwbHVnaW5zIG9mIHRoaXMgb2JqZWN0XG4gICAgICpcbiAgICAgKi9cbiAgICBvYmoucHJvdG90eXBlLmluaXRQbHVnaW5zID0gZnVuY3Rpb24gKClcbiAgICB7XG4gICAgICAgIHRoaXMucGx1Z2lucyA9IHRoaXMucGx1Z2lucyB8fCB7fTtcblxuICAgICAgICBmb3IgKHZhciBvIGluIG9iai5fX3BsdWdpbnMpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMucGx1Z2luc1tvXSA9IG5ldyAob2JqLl9fcGx1Z2luc1tvXSkodGhpcyk7XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgLyoqXG4gICAgICogUmVtb3ZlcyBhbGwgdGhlIHBsdWdpbnMgb2YgdGhpcyBvYmplY3RcbiAgICAgKlxuICAgICAqL1xuICAgIG9iai5wcm90b3R5cGUuZGVzdHJveVBsdWdpbnMgPSBmdW5jdGlvbiAoKVxuICAgIHtcbiAgICAgICAgZm9yICh2YXIgbyBpbiB0aGlzLnBsdWdpbnMpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMucGx1Z2luc1tvXS5kZXN0cm95KCk7XG4gICAgICAgICAgICB0aGlzLnBsdWdpbnNbb10gPSBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5wbHVnaW5zID0gbnVsbDtcbiAgICB9O1xufVxuXG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICAgIC8qKlxuICAgICAqIE1peGVzIGluIHRoZSBwcm9wZXJ0aWVzIG9mIHRoZSBwbHVnaW5UYXJnZXQgaW50byBhbm90aGVyIG9iamVjdFxuICAgICAqXG4gICAgICogQHBhcmFtIG9iamVjdCB7b2JqZWN0fSBUaGUgb2JqIHRvIG1peCBpbnRvXG4gICAgICovXG4gICAgbWl4aW46IGZ1bmN0aW9uIG1peGluKG9iailcbiAgICB7XG4gICAgICAgIHBsdWdpblRhcmdldChvYmopO1xuICAgIH1cbn07XG4iLCIvKmdsb2JhbCBjb25zb2xlICovXG52YXIgY29yZSA9IHJlcXVpcmUoJy4vY29yZScpLFxuICAgIG1lc2ggPSByZXF1aXJlKCcuL21lc2gnKSxcbiAgICBleHRyYXMgPSByZXF1aXJlKCcuL2V4dHJhcycpLFxuICAgIGZpbHRlcnMgPSByZXF1aXJlKCcuL2ZpbHRlcnMnKTtcblxuLyoqXG4gKiBAY2xhc3NcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBTcHJpdGVCYXRjaFxuICogQG1lbWJlcm9mIFBJWElcbiAqIEBzZWUgUElYSS5QYXJ0aWNsZUNvbnRhaW5lclxuICogQHRocm93cyB7UmVmZXJlbmNlRXJyb3J9IFNwcml0ZUJhdGNoIGRvZXMgbm90IGV4aXN0IGFueSBtb3JlLCBwbGVhc2UgdXNlIHRoZSBuZXcgUGFydGljbGVDb250YWluZXIgaW5zdGVhZC5cbiAqIEBkZXByZWNhdGVkIHNpbmNlIHZlcnNpb24gMy4wLjBcbiAqL1xuY29yZS5TcHJpdGVCYXRjaCA9IGZ1bmN0aW9uKClcbntcbiAgICB0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoJ1Nwcml0ZUJhdGNoIGRvZXMgbm90IGV4aXN0IGFueSBtb3JlLCBwbGVhc2UgdXNlIHRoZSBuZXcgUGFydGljbGVDb250YWluZXIgaW5zdGVhZC4nKTtcbn07XG5cbi8qKlxuICogQGNsYXNzXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgQXNzZXRMb2FkZXJcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAc2VlIFBJWEkubG9hZGVycy5Mb2FkZXJcbiAqIEB0aHJvd3Mge1JlZmVyZW5jZUVycm9yfSBUaGUgbG9hZGVyIHN5c3RlbSB3YXMgb3ZlcmhhdWxlZCBpbiBwaXhpIHYzLCBwbGVhc2Ugc2VlIHRoZSBuZXcgUElYSS5sb2FkZXJzLkxvYWRlciBjbGFzcy5cbiAqIEBkZXByZWNhdGVkIHNpbmNlIHZlcnNpb24gMy4wLjBcbiAqL1xuY29yZS5Bc3NldExvYWRlciA9IGZ1bmN0aW9uKClcbntcbiAgICB0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoJ1RoZSBsb2FkZXIgc3lzdGVtIHdhcyBvdmVyaGF1bGVkIGluIHBpeGkgdjMsIHBsZWFzZSBzZWUgdGhlIG5ldyBQSVhJLmxvYWRlcnMuTG9hZGVyIGNsYXNzLicpO1xufTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoY29yZSwge1xuXG4gICAgLyoqXG4gICAgICogQGNsYXNzXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAbmFtZSBTdGFnZVxuICAgICAqIEBtZW1iZXJvZiBQSVhJXG4gICAgICogQHNlZSBQSVhJLkNvbnRhaW5lclxuICAgICAqIEBkZXByZWNhdGVkIHNpbmNlIHZlcnNpb24gMy4wLjBcbiAgICAgKi9cbiAgICBTdGFnZToge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uKClcbiAgICAgICAge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKCdZb3UgZG8gbm90IG5lZWQgdG8gdXNlIGEgUElYSSBTdGFnZSBhbnkgbW9yZSwgeW91IGNhbiBzaW1wbHkgcmVuZGVyIGFueSBjb250YWluZXIuJyk7XG4gICAgICAgICAgICByZXR1cm4gY29yZS5Db250YWluZXI7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQGNsYXNzXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAbmFtZSBEaXNwbGF5T2JqZWN0Q29udGFpbmVyXG4gICAgICogQG1lbWJlcm9mIFBJWElcbiAgICAgKiBAc2VlIFBJWEkuQ29udGFpbmVyXG4gICAgICogQGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiAzLjAuMFxuICAgICAqL1xuICAgIERpc3BsYXlPYmplY3RDb250YWluZXI6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbigpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignRGlzcGxheU9iamVjdENvbnRhaW5lciBoYXMgYmVlbiBzaG9ydGVuZWQgdG8gQ29udGFpbmVyLCBwbGVhc2UgdXNlIENvbnRhaW5lciBmcm9tIG5vdyBvbi4nKTtcbiAgICAgICAgICAgIHJldHVybiBjb3JlLkNvbnRhaW5lcjtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBAY2xhc3NcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBuYW1lIFN0cmlwXG4gICAgICogQG1lbWJlcm9mIFBJWElcbiAgICAgKiBAc2VlIFBJWEkubWVzaC5NZXNoXG4gICAgICogQGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiAzLjAuMFxuICAgICAqL1xuICAgIFN0cmlwOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24oKVxuICAgICAgICB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ1RoZSBTdHJpcCBjbGFzcyBoYXMgYmVlbiByZW5hbWVkIHRvIE1lc2ggYW5kIG1vdmVkIHRvIG1lc2guTWVzaCwgcGxlYXNlIHVzZSBtZXNoLk1lc2ggZnJvbSBub3cgb24uJyk7XG4gICAgICAgICAgICByZXR1cm4gbWVzaC5NZXNoO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIEBjbGFzc1xuICAgICAqIEBwcml2YXRlXG4gICAgICogQG5hbWUgUm9wZVxuICAgICAqIEBtZW1iZXJvZiBQSVhJXG4gICAgICogQHNlZSBQSVhJLm1lc2guUm9wZVxuICAgICAqIEBkZXByZWNhdGVkIHNpbmNlIHZlcnNpb24gMy4wLjBcbiAgICAgKi9cbiAgICBSb3BlOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24oKVxuICAgICAgICB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ1RoZSBSb3BlIGNsYXNzIGhhcyBiZWVuIG1vdmVkIHRvIG1lc2guUm9wZSwgcGxlYXNlIHVzZSBtZXNoLlJvcGUgZnJvbSBub3cgb24uJyk7XG4gICAgICAgICAgICByZXR1cm4gbWVzaC5Sb3BlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIEBjbGFzc1xuICAgICAqIEBwcml2YXRlXG4gICAgICogQG5hbWUgTW92aWVDbGlwXG4gICAgICogQG1lbWJlcm9mIFBJWElcbiAgICAgKiBAc2VlIFBJWEkuZXh0cmFzLk1vdmllQ2xpcFxuICAgICAqIEBkZXByZWNhdGVkIHNpbmNlIHZlcnNpb24gMy4wLjBcbiAgICAgKi9cbiAgICBNb3ZpZUNsaXA6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbigpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignVGhlIE1vdmllQ2xpcCBjbGFzcyBoYXMgYmVlbiBtb3ZlZCB0byBleHRyYXMuTW92aWVDbGlwLCBwbGVhc2UgdXNlIGV4dHJhcy5Nb3ZpZUNsaXAgZnJvbSBub3cgb24uJyk7XG4gICAgICAgICAgICByZXR1cm4gZXh0cmFzLk1vdmllQ2xpcDtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBAY2xhc3NcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBuYW1lIFRpbGluZ1Nwcml0ZVxuICAgICAqIEBtZW1iZXJvZiBQSVhJXG4gICAgICogQHNlZSBQSVhJLmV4dHJhcy5UaWxpbmdTcHJpdGVcbiAgICAgKiBAZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDMuMC4wXG4gICAgICovXG4gICAgVGlsaW5nU3ByaXRlOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24oKVxuICAgICAgICB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ1RoZSBUaWxpbmdTcHJpdGUgY2xhc3MgaGFzIGJlZW4gbW92ZWQgdG8gZXh0cmFzLlRpbGluZ1Nwcml0ZSwgcGxlYXNlIHVzZSBleHRyYXMuVGlsaW5nU3ByaXRlIGZyb20gbm93IG9uLicpO1xuICAgICAgICAgICAgcmV0dXJuIGV4dHJhcy5UaWxpbmdTcHJpdGU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQGNsYXNzXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAbmFtZSBCaXRtYXBUZXh0XG4gICAgICogQG1lbWJlcm9mIFBJWElcbiAgICAgKiBAc2VlIFBJWEkuZXh0cmFzLkJpdG1hcFRleHRcbiAgICAgKiBAZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDMuMC4wXG4gICAgICovXG4gICAgQml0bWFwVGV4dDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uKClcbiAgICAgICAge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKCdUaGUgQml0bWFwVGV4dCBjbGFzcyBoYXMgYmVlbiBtb3ZlZCB0byBleHRyYXMuQml0bWFwVGV4dCwgcGxlYXNlIHVzZSBleHRyYXMuQml0bWFwVGV4dCBmcm9tIG5vdyBvbi4nKTtcbiAgICAgICAgICAgIHJldHVybiBleHRyYXMuQml0bWFwVGV4dDtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBAY2xhc3NcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBuYW1lIGJsZW5kTW9kZXNcbiAgICAgKiBAbWVtYmVyb2YgUElYSVxuICAgICAqIEBzZWUgUElYSS5CTEVORF9NT0RFU1xuICAgICAqIEBkZXByZWNhdGVkIHNpbmNlIHZlcnNpb24gMy4wLjBcbiAgICAgKi9cbiAgICBibGVuZE1vZGVzOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24oKVxuICAgICAgICB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ1RoZSBibGVuZE1vZGVzIGhhcyBiZWVuIG1vdmVkIHRvIEJMRU5EX01PREVTLCBwbGVhc2UgdXNlIEJMRU5EX01PREVTIGZyb20gbm93IG9uLicpO1xuICAgICAgICAgICAgcmV0dXJuIGNvcmUuQkxFTkRfTU9ERVM7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQGNsYXNzXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAbmFtZSBzY2FsZU1vZGVzXG4gICAgICogQG1lbWJlcm9mIFBJWElcbiAgICAgKiBAc2VlIFBJWEkuU0NBTEVfTU9ERVNcbiAgICAgKiBAZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDMuMC4wXG4gICAgICovXG4gICAgc2NhbGVNb2Rlczoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uKClcbiAgICAgICAge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKCdUaGUgc2NhbGVNb2RlcyBoYXMgYmVlbiBtb3ZlZCB0byBTQ0FMRV9NT0RFUywgcGxlYXNlIHVzZSBTQ0FMRV9NT0RFUyBmcm9tIG5vdyBvbi4nKTtcbiAgICAgICAgICAgIHJldHVybiBjb3JlLlNDQUxFX01PREVTO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIEBjbGFzc1xuICAgICAqIEBwcml2YXRlXG4gICAgICogQG5hbWUgQmFzZVRleHR1cmVDYWNoZVxuICAgICAqIEBtZW1iZXJvZiBQSVhJXG4gICAgICogQHNlZSBQSVhJLnV0aWxzLkJhc2VUZXh0dXJlQ2FjaGVcbiAgICAgKiBAZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDMuMC4wXG4gICAgICovXG4gICAgQmFzZVRleHR1cmVDYWNoZToge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignVGhlIEJhc2VUZXh0dXJlQ2FjaGUgY2xhc3MgaGFzIGJlZW4gbW92ZWQgdG8gdXRpbHMuQmFzZVRleHR1cmVDYWNoZSwgcGxlYXNlIHVzZSB1dGlscy5CYXNlVGV4dHVyZUNhY2hlIGZyb20gbm93IG9uLicpO1xuICAgICAgICAgICAgcmV0dXJuIGNvcmUudXRpbHMuQmFzZVRleHR1cmVDYWNoZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBAY2xhc3NcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBuYW1lIFRleHR1cmVDYWNoZVxuICAgICAqIEBtZW1iZXJvZiBQSVhJXG4gICAgICogQHNlZSBQSVhJLnV0aWxzLlRleHR1cmVDYWNoZVxuICAgICAqIEBkZXByZWNhdGVkIHNpbmNlIHZlcnNpb24gMy4wLjBcbiAgICAgKi9cbiAgICBUZXh0dXJlQ2FjaGU6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ1RoZSBUZXh0dXJlQ2FjaGUgY2xhc3MgaGFzIGJlZW4gbW92ZWQgdG8gdXRpbHMuVGV4dHVyZUNhY2hlLCBwbGVhc2UgdXNlIHV0aWxzLlRleHR1cmVDYWNoZSBmcm9tIG5vdyBvbi4nKTtcbiAgICAgICAgICAgIHJldHVybiBjb3JlLnV0aWxzLlRleHR1cmVDYWNoZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBAbmFtZXNwYWNlXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAbmFtZSBtYXRoXG4gICAgICogQG1lbWJlcm9mIFBJWElcbiAgICAgKiBAc2VlIFBJWElcbiAgICAgKiBAZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDMuMC42XG4gICAgICovXG4gICAgbWF0aDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignVGhlIG1hdGggbmFtZXNwYWNlIGlzIGRlcHJlY2F0ZWQsIHBsZWFzZSBhY2Nlc3MgbWVtYmVycyBhbHJlYWR5IGFjY2Vzc2libGUgb24gUElYSS4nKTtcbiAgICAgICAgICAgIHJldHVybiBjb3JlO1xuICAgICAgICB9XG4gICAgfVxufSk7XG5cbi8qKlxuICogQG1ldGhvZFxuICogQHByaXZhdGVcbiAqIEBuYW1lIFBJWEkuU3ByaXRlI3NldFRleHR1cmVcbiAqIEBzZWUgUElYSS5TcHJpdGUjdGV4dHVyZVxuICogQGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiAzLjAuMFxuICovXG5jb3JlLlNwcml0ZS5wcm90b3R5cGUuc2V0VGV4dHVyZSA9IGZ1bmN0aW9uKHRleHR1cmUpXG57XG4gICAgdGhpcy50ZXh0dXJlID0gdGV4dHVyZTtcbiAgICBjb25zb2xlLndhcm4oJ3NldFRleHR1cmUgaXMgbm93IGRlcHJlY2F0ZWQsIHBsZWFzZSB1c2UgdGhlIHRleHR1cmUgcHJvcGVydHksIGUuZyA6IHNwcml0ZS50ZXh0dXJlID0gdGV4dHVyZTsnKTtcbn07XG5cbi8qKlxuICogQG1ldGhvZFxuICogQG5hbWUgUElYSS5leHRyYXMuQml0bWFwVGV4dCNzZXRUZXh0XG4gKiBAc2VlIFBJWEkuZXh0cmFzLkJpdG1hcFRleHQjdGV4dFxuICogQGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiAzLjAuMFxuICovXG5leHRyYXMuQml0bWFwVGV4dC5wcm90b3R5cGUuc2V0VGV4dCA9IGZ1bmN0aW9uKHRleHQpXG57XG4gICAgdGhpcy50ZXh0ID0gdGV4dDtcbiAgICBjb25zb2xlLndhcm4oJ3NldFRleHQgaXMgbm93IGRlcHJlY2F0ZWQsIHBsZWFzZSB1c2UgdGhlIHRleHQgcHJvcGVydHksIGUuZyA6IG15Qml0bWFwVGV4dC50ZXh0ID0gXFwnbXkgdGV4dFxcJzsnKTtcbn07XG5cbi8qKlxuICogQG1ldGhvZFxuICogQG5hbWUgUElYSS5UZXh0I3NldFRleHRcbiAqIEBzZWUgUElYSS5UZXh0I3RleHRcbiAqIEBkZXByZWNhdGVkIHNpbmNlIHZlcnNpb24gMy4wLjBcbiAqL1xuY29yZS5UZXh0LnByb3RvdHlwZS5zZXRUZXh0ID0gZnVuY3Rpb24odGV4dClcbntcbiAgICB0aGlzLnRleHQgPSB0ZXh0O1xuICAgIGNvbnNvbGUud2Fybignc2V0VGV4dCBpcyBub3cgZGVwcmVjYXRlZCwgcGxlYXNlIHVzZSB0aGUgdGV4dCBwcm9wZXJ0eSwgZS5nIDogbXlUZXh0LnRleHQgPSBcXCdteSB0ZXh0XFwnOycpO1xufTtcblxuLyoqXG4gKiBAbWV0aG9kXG4gKiBAbmFtZSBQSVhJLlRleHQjc2V0U3R5bGVcbiAqIEBzZWUgUElYSS5UZXh0I3N0eWxlXG4gKiBAZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDMuMC4wXG4gKi9cbmNvcmUuVGV4dC5wcm90b3R5cGUuc2V0U3R5bGUgPSBmdW5jdGlvbihzdHlsZSlcbntcbiAgICB0aGlzLnN0eWxlID0gc3R5bGU7XG4gICAgY29uc29sZS53YXJuKCdzZXRTdHlsZSBpcyBub3cgZGVwcmVjYXRlZCwgcGxlYXNlIHVzZSB0aGUgc3R5bGUgcHJvcGVydHksIGUuZyA6IG15VGV4dC5zdHlsZSA9IHN0eWxlOycpO1xufTtcblxuLyoqXG4gKiBAbWV0aG9kXG4gKiBAbmFtZSBQSVhJLlRleHR1cmUjc2V0RnJhbWVcbiAqIEBzZWUgUElYSS5UZXh0dXJlI3NldEZyYW1lXG4gKiBAZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDMuMC4wXG4gKi9cbmNvcmUuVGV4dHVyZS5wcm90b3R5cGUuc2V0RnJhbWUgPSBmdW5jdGlvbihmcmFtZSlcbntcbiAgICB0aGlzLmZyYW1lID0gZnJhbWU7XG4gICAgY29uc29sZS53YXJuKCdzZXRGcmFtZSBpcyBub3cgZGVwcmVjYXRlZCwgcGxlYXNlIHVzZSB0aGUgZnJhbWUgcHJvcGVydHksIGUuZyA6IG15VGV4dHVyZS5mcmFtZSA9IGZyYW1lOycpO1xufTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoZmlsdGVycywge1xuXG4gICAgLyoqXG4gICAgICogQGNsYXNzXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAbmFtZSBQSVhJLmZpbHRlcnMuQWJzdHJhY3RGaWx0ZXJcbiAgICAgKiBAc2VlIFBJWEkuQWJzdHJhY3RGaWx0ZXJcbiAgICAgKiBAZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDMuMC42XG4gICAgICovXG4gICAgQWJzdHJhY3RGaWx0ZXI6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbigpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignZmlsdGVycy5BYnN0cmFjdEZpbHRlciBpcyBhbiB1bmRvY3VtZW50ZWQgYWxpYXMsIHBsZWFzZSB1c2UgQWJzdHJhY3RGaWx0ZXIgZnJvbSBub3cgb24uJyk7XG4gICAgICAgICAgICByZXR1cm4gY29yZS5BYnN0cmFjdEZpbHRlcjtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBAY2xhc3NcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBuYW1lIFBJWEkuZmlsdGVycy5GWEFBRmlsdGVyXG4gICAgICogQHNlZSBQSVhJLkZYQUFGaWx0ZXJcbiAgICAgKiBAZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDMuMC42XG4gICAgICovXG4gICAgRlhBQUZpbHRlcjoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uKClcbiAgICAgICAge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKCdmaWx0ZXJzLkZYQUFGaWx0ZXIgaXMgYW4gdW5kb2N1bWVudGVkIGFsaWFzLCBwbGVhc2UgdXNlIEZYQUFGaWx0ZXIgZnJvbSBub3cgb24uJyk7XG4gICAgICAgICAgICByZXR1cm4gY29yZS5GWEFBRmlsdGVyO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIEBjbGFzc1xuICAgICAqIEBwcml2YXRlXG4gICAgICogQG5hbWUgUElYSS5maWx0ZXJzLlNwcml0ZU1hc2tGaWx0ZXJcbiAgICAgKiBAc2VlIFBJWEkuU3ByaXRlTWFza0ZpbHRlclxuICAgICAqIEBkZXByZWNhdGVkIHNpbmNlIHZlcnNpb24gMy4wLjZcbiAgICAgKi9cbiAgICBTcHJpdGVNYXNrRmlsdGVyOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24oKVxuICAgICAgICB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ2ZpbHRlcnMuU3ByaXRlTWFza0ZpbHRlciBpcyBhbiB1bmRvY3VtZW50ZWQgYWxpYXMsIHBsZWFzZSB1c2UgU3ByaXRlTWFza0ZpbHRlciBmcm9tIG5vdyBvbi4nKTtcbiAgICAgICAgICAgIHJldHVybiBjb3JlLlNwcml0ZU1hc2tGaWx0ZXI7XG4gICAgICAgIH1cbiAgICB9XG59KTtcblxuLyoqXG4gKiBAbWV0aG9kXG4gKiBAbmFtZSBQSVhJLnV0aWxzLnV1aWRcbiAqIEBzZWUgUElYSS51dGlscy51aWRcbiAqIEBkZXByZWNhdGVkIHNpbmNlIHZlcnNpb24gMy4wLjZcbiAqL1xuY29yZS51dGlscy51dWlkID0gZnVuY3Rpb24gKClcbntcbiAgICBjb25zb2xlLndhcm4oJ3V0aWxzLnV1aWQoKSBpcyBkZXByZWNhdGVkLCBwbGVhc2UgdXNlIHV0aWxzLnVpZCgpIGZyb20gbm93IG9uLicpO1xuICAgIHJldHVybiBjb3JlLnV0aWxzLnVpZCgpO1xufTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vY29yZScpO1xuXG4vKipcbiAqIEEgQml0bWFwVGV4dCBvYmplY3Qgd2lsbCBjcmVhdGUgYSBsaW5lIG9yIG11bHRpcGxlIGxpbmVzIG9mIHRleHQgdXNpbmcgYml0bWFwIGZvbnQuIFRvXG4gKiBzcGxpdCBhIGxpbmUgeW91IGNhbiB1c2UgJ1xcbicsICdcXHInIG9yICdcXHJcXG4nIGluIHlvdXIgc3RyaW5nLiBZb3UgY2FuIGdlbmVyYXRlIHRoZSBmbnQgZmlsZXMgdXNpbmc6XG4gKlxuICogQSBCaXRtYXBUZXh0IGNhbiBvbmx5IGJlIGNyZWF0ZWQgd2hlbiB0aGUgZm9udCBpcyBsb2FkZWRcbiAqXG4gKiBgYGBqc1xuICogLy8gaW4gdGhpcyBjYXNlIHRoZSBmb250IGlzIGluIGEgZmlsZSBjYWxsZWQgJ2Rlc3lyZWwuZm50J1xuICogdmFyIGJpdG1hcFRleHQgPSBuZXcgUElYSS5leHRyYXMuQml0bWFwVGV4dChcInRleHQgdXNpbmcgYSBmYW5jeSBmb250IVwiLCB7Zm9udDogXCIzNXB4IERlc3lyZWxcIiwgYWxpZ246IFwicmlnaHRcIn0pO1xuICogYGBgXG4gKlxuICpcbiAqIGh0dHA6Ly93d3cuYW5nZWxjb2RlLmNvbS9wcm9kdWN0cy9ibWZvbnQvIGZvciB3aW5kb3dzIG9yXG4gKiBodHRwOi8vd3d3LmJtZ2x5cGguY29tLyBmb3IgbWFjLlxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5Db250YWluZXJcbiAqIEBtZW1iZXJvZiBQSVhJLmV4dHJhc1xuICogQHBhcmFtIHRleHQge3N0cmluZ30gVGhlIGNvcHkgdGhhdCB5b3Ugd291bGQgbGlrZSB0aGUgdGV4dCB0byBkaXNwbGF5XG4gKiBAcGFyYW0gc3R5bGUge29iamVjdH0gVGhlIHN0eWxlIHBhcmFtZXRlcnNcbiAqIEBwYXJhbSBzdHlsZS5mb250IHtzdHJpbmd8b2JqZWN0fSBUaGUgZm9udCBkZXNjcmlwdG9yIGZvciB0aGUgb2JqZWN0LCBjYW4gYmUgcGFzc2VkIGFzIGEgc3RyaW5nIG9mIGZvcm1cbiAqICAgICAgXCIyNHB4IEZvbnROYW1lXCIgb3IgXCJGb250TmFtZVwiIG9yIGFzIGFuIG9iamVjdCB3aXRoIGV4cGxpY2l0IG5hbWUvc2l6ZSBwcm9wZXJ0aWVzLlxuICogQHBhcmFtIFtzdHlsZS5mb250Lm5hbWVdIHtzdHJpbmd9IFRoZSBiaXRtYXAgZm9udCBpZFxuICogQHBhcmFtIFtzdHlsZS5mb250LnNpemVdIHtudW1iZXJ9IFRoZSBzaXplIG9mIHRoZSBmb250IGluIHBpeGVscywgZS5nLiAyNFxuICogQHBhcmFtIFtzdHlsZS5hbGlnbj0nbGVmdCddIHtzdHJpbmd9IEFsaWdubWVudCBmb3IgbXVsdGlsaW5lIHRleHQgKCdsZWZ0JywgJ2NlbnRlcicgb3IgJ3JpZ2h0JyksIGRvZXMgbm90IGFmZmVjdFxuICogICAgICBzaW5nbGUgbGluZSB0ZXh0XG4gKiBAcGFyYW0gW3N0eWxlLnRpbnQ9MHhGRkZGRkZdIHtudW1iZXJ9IFRoZSB0aW50IGNvbG9yXG4gKi9cbmZ1bmN0aW9uIEJpdG1hcFRleHQodGV4dCwgc3R5bGUpXG57XG4gICAgY29yZS5Db250YWluZXIuY2FsbCh0aGlzKTtcblxuICAgIHN0eWxlID0gc3R5bGUgfHwge307XG5cbiAgICAvKipcbiAgICAgKiBUaGUgd2lkdGggb2YgdGhlIG92ZXJhbGwgdGV4dCwgZGlmZmVyZW50IGZyb20gZm9udFNpemUsXG4gICAgICogd2hpY2ggaXMgZGVmaW5lZCBpbiB0aGUgc3R5bGUgb2JqZWN0XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQHJlYWRPbmx5XG4gICAgICovXG4gICAgdGhpcy50ZXh0V2lkdGggPSAwO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGhlaWdodCBvZiB0aGUgb3ZlcmFsbCB0ZXh0LCBkaWZmZXJlbnQgZnJvbSBmb250U2l6ZSxcbiAgICAgKiB3aGljaCBpcyBkZWZpbmVkIGluIHRoZSBzdHlsZSBvYmplY3RcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAcmVhZE9ubHlcbiAgICAgKi9cbiAgICB0aGlzLnRleHRIZWlnaHQgPSAwO1xuXG4gICAgLyoqXG4gICAgICogUHJpdmF0ZSB0cmFja2VyIGZvciB0aGUgbGV0dGVyIHNwcml0ZSBwb29sLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5TcHJpdGVbXX1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX2dseXBocyA9IFtdO1xuXG4gICAgLyoqXG4gICAgICogUHJpdmF0ZSB0cmFja2VyIGZvciB0aGUgY3VycmVudCBzdHlsZS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge29iamVjdH1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX2ZvbnQgPSB7XG4gICAgICAgIHRpbnQ6IHN0eWxlLnRpbnQgIT09IHVuZGVmaW5lZCA/IHN0eWxlLnRpbnQgOiAweEZGRkZGRixcbiAgICAgICAgYWxpZ246IHN0eWxlLmFsaWduIHx8ICdsZWZ0JyxcbiAgICAgICAgbmFtZTogbnVsbCxcbiAgICAgICAgc2l6ZTogMFxuICAgIH07XG5cbiAgICAvKipcbiAgICAgKiBQcml2YXRlIHRyYWNrZXIgZm9yIHRoZSBjdXJyZW50IGZvbnQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtvYmplY3R9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLmZvbnQgPSBzdHlsZS5mb250OyAvLyBydW4gZm9udCBzZXR0ZXJcblxuICAgIC8qKlxuICAgICAqIFByaXZhdGUgdHJhY2tlciBmb3IgdGhlIGN1cnJlbnQgdGV4dC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge3N0cmluZ31cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX3RleHQgPSB0ZXh0O1xuXG4gICAgLyoqXG4gICAgICogVGhlIG1heCB3aWR0aCBvZiB0aGlzIGJpdG1hcCB0ZXh0IGluIHBpeGVscy4gSWYgdGhlIHRleHQgcHJvdmlkZWQgaXMgbG9uZ2VyIHRoYW4gdGhlIHZhbHVlIHByb3ZpZGVkLCBsaW5lIGJyZWFrcyB3aWxsIGJlIGF1dG9tYXRpY2FsbHkgaW5zZXJ0ZWQgaW4gdGhlIGxhc3Qgd2hpdGVzcGFjZS5cbiAgICAgKiBEaXNhYmxlIGJ5IHNldHRpbmcgdmFsdWUgdG8gMFxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMubWF4V2lkdGggPSAwO1xuXG4gICAgLyoqXG4gICAgICogVGhlIG1heCBsaW5lIGhlaWdodC4gVGhpcyBpcyB1c2VmdWwgd2hlbiB0cnlpbmcgdG8gdXNlIHRoZSB0b3RhbCBoZWlnaHQgb2YgdGhlIFRleHQsIGllOiB3aGVuIHRyeWluZyB0byB2ZXJ0aWNhbGx5IGFsaWduLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMubWF4TGluZUhlaWdodCA9IDA7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgZGlydHkgc3RhdGUgb2YgdGhpcyBvYmplY3QuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqL1xuICAgIHRoaXMuZGlydHkgPSBmYWxzZTtcblxuICAgIHRoaXMudXBkYXRlVGV4dCgpO1xufVxuXG4vLyBjb25zdHJ1Y3RvclxuQml0bWFwVGV4dC5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuQ29udGFpbmVyLnByb3RvdHlwZSk7XG5CaXRtYXBUZXh0LnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IEJpdG1hcFRleHQ7XG5tb2R1bGUuZXhwb3J0cyA9IEJpdG1hcFRleHQ7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKEJpdG1hcFRleHQucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogVGhlIHRpbnQgb2YgdGhlIEJpdG1hcFRleHQgb2JqZWN0XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZXh0cmFzLkJpdG1hcFRleHQjXG4gICAgICovXG4gICAgdGludDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9mb250LnRpbnQ7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLl9mb250LnRpbnQgPSAodHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJyAmJiB2YWx1ZSA+PSAwKSA/IHZhbHVlIDogMHhGRkZGRkY7XG5cbiAgICAgICAgICAgIHRoaXMuZGlydHkgPSB0cnVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFRoZSBhbGlnbm1lbnQgb2YgdGhlIEJpdG1hcFRleHQgb2JqZWN0XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtzdHJpbmd9XG4gICAgICogQGRlZmF1bHQgJ2xlZnQnXG4gICAgICogQG1lbWJlcm9mIFBJWEkuZXh0cmFzLkJpdG1hcFRleHQjXG4gICAgICovXG4gICAgYWxpZ246IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fZm9udC5hbGlnbjtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuX2ZvbnQuYWxpZ24gPSB2YWx1ZSB8fCAnbGVmdCc7XG5cbiAgICAgICAgICAgIHRoaXMuZGlydHkgPSB0cnVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFRoZSBmb250IGRlc2NyaXB0b3Igb2YgdGhlIEJpdG1hcFRleHQgb2JqZWN0XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtGb250fVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmV4dHJhcy5CaXRtYXBUZXh0I1xuICAgICAqL1xuICAgIGZvbnQ6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fZm9udDtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGlmICghdmFsdWUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICAgICAgdmFsdWUgPSB2YWx1ZS5zcGxpdCgnICcpO1xuXG4gICAgICAgICAgICAgICAgdGhpcy5fZm9udC5uYW1lID0gdmFsdWUubGVuZ3RoID09PSAxID8gdmFsdWVbMF0gOiB2YWx1ZS5zbGljZSgxKS5qb2luKCcgJyk7XG4gICAgICAgICAgICAgICAgdGhpcy5fZm9udC5zaXplID0gdmFsdWUubGVuZ3RoID49IDIgPyBwYXJzZUludCh2YWx1ZVswXSwgMTApIDogQml0bWFwVGV4dC5mb250c1t0aGlzLl9mb250Lm5hbWVdLnNpemU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9mb250Lm5hbWUgPSB2YWx1ZS5uYW1lO1xuICAgICAgICAgICAgICAgIHRoaXMuX2ZvbnQuc2l6ZSA9IHR5cGVvZiB2YWx1ZS5zaXplID09PSAnbnVtYmVyJyA/IHZhbHVlLnNpemUgOiBwYXJzZUludCh2YWx1ZS5zaXplLCAxMCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuZGlydHkgPSB0cnVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFRoZSB0ZXh0IG9mIHRoZSBCaXRtYXBUZXh0IG9iamVjdFxuICAgICAqXG4gICAgICogQG1lbWJlciB7c3RyaW5nfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmV4dHJhcy5CaXRtYXBUZXh0I1xuICAgICAqL1xuICAgIHRleHQ6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fdGV4dDtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHZhbHVlID0gdmFsdWUudG9TdHJpbmcoKSB8fCAnICc7XG4gICAgICAgICAgICBpZiAodGhpcy5fdGV4dCA9PT0gdmFsdWUpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5fdGV4dCA9IHZhbHVlO1xuICAgICAgICAgICAgdGhpcy5kaXJ0eSA9IHRydWU7XG4gICAgICAgIH1cbiAgICB9XG59KTtcblxuLyoqXG4gKiBSZW5kZXJzIHRleHQgYW5kIHVwZGF0ZXMgaXQgd2hlbiBuZWVkZWRcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5CaXRtYXBUZXh0LnByb3RvdHlwZS51cGRhdGVUZXh0ID0gZnVuY3Rpb24gKClcbntcbiAgICB2YXIgZGF0YSA9IEJpdG1hcFRleHQuZm9udHNbdGhpcy5fZm9udC5uYW1lXTtcbiAgICB2YXIgcG9zID0gbmV3IGNvcmUuUG9pbnQoKTtcbiAgICB2YXIgcHJldkNoYXJDb2RlID0gbnVsbDtcbiAgICB2YXIgY2hhcnMgPSBbXTtcbiAgICB2YXIgbGFzdExpbmVXaWR0aCA9IDA7XG4gICAgdmFyIG1heExpbmVXaWR0aCA9IDA7XG4gICAgdmFyIGxpbmVXaWR0aHMgPSBbXTtcbiAgICB2YXIgbGluZSA9IDA7XG4gICAgdmFyIHNjYWxlID0gdGhpcy5fZm9udC5zaXplIC8gZGF0YS5zaXplO1xuICAgIHZhciBsYXN0U3BhY2UgPSAtMTtcbiAgICB2YXIgbWF4TGluZUhlaWdodCA9IDA7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMudGV4dC5sZW5ndGg7IGkrKylcbiAgICB7XG4gICAgICAgIHZhciBjaGFyQ29kZSA9IHRoaXMudGV4dC5jaGFyQ29kZUF0KGkpO1xuICAgICAgICBsYXN0U3BhY2UgPSAvKFxccykvLnRlc3QodGhpcy50ZXh0LmNoYXJBdChpKSkgPyBpIDogbGFzdFNwYWNlO1xuXG4gICAgICAgIGlmICgvKD86XFxyXFxufFxccnxcXG4pLy50ZXN0KHRoaXMudGV4dC5jaGFyQXQoaSkpKVxuICAgICAgICB7XG4gICAgICAgICAgICBsaW5lV2lkdGhzLnB1c2gobGFzdExpbmVXaWR0aCk7XG4gICAgICAgICAgICBtYXhMaW5lV2lkdGggPSBNYXRoLm1heChtYXhMaW5lV2lkdGgsIGxhc3RMaW5lV2lkdGgpO1xuICAgICAgICAgICAgbGluZSsrO1xuXG4gICAgICAgICAgICBwb3MueCA9IDA7XG4gICAgICAgICAgICBwb3MueSArPSBkYXRhLmxpbmVIZWlnaHQ7XG4gICAgICAgICAgICBwcmV2Q2hhckNvZGUgPSBudWxsO1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAobGFzdFNwYWNlICE9PSAtMSAmJiB0aGlzLm1heFdpZHRoID4gMCAmJiBwb3MueCAqIHNjYWxlID4gdGhpcy5tYXhXaWR0aClcbiAgICAgICAge1xuICAgICAgICAgICAgY29yZS51dGlscy5yZW1vdmVJdGVtcyhjaGFycywgbGFzdFNwYWNlLCBpIC0gbGFzdFNwYWNlKTtcbiAgICAgICAgICAgIGkgPSBsYXN0U3BhY2U7XG4gICAgICAgICAgICBsYXN0U3BhY2UgPSAtMTtcblxuICAgICAgICAgICAgbGluZVdpZHRocy5wdXNoKGxhc3RMaW5lV2lkdGgpO1xuICAgICAgICAgICAgbWF4TGluZVdpZHRoID0gTWF0aC5tYXgobWF4TGluZVdpZHRoLCBsYXN0TGluZVdpZHRoKTtcbiAgICAgICAgICAgIGxpbmUrKztcblxuICAgICAgICAgICAgcG9zLnggPSAwO1xuICAgICAgICAgICAgcG9zLnkgKz0gZGF0YS5saW5lSGVpZ2h0O1xuICAgICAgICAgICAgcHJldkNoYXJDb2RlID0gbnVsbDtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGNoYXJEYXRhID0gZGF0YS5jaGFyc1tjaGFyQ29kZV07XG5cbiAgICAgICAgaWYgKCFjaGFyRGF0YSlcbiAgICAgICAge1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAocHJldkNoYXJDb2RlICYmIGNoYXJEYXRhLmtlcm5pbmdbcHJldkNoYXJDb2RlXSlcbiAgICAgICAge1xuICAgICAgICAgICAgcG9zLnggKz0gY2hhckRhdGEua2VybmluZ1twcmV2Q2hhckNvZGVdO1xuICAgICAgICB9XG5cbiAgICAgICAgY2hhcnMucHVzaCh7dGV4dHVyZTpjaGFyRGF0YS50ZXh0dXJlLCBsaW5lOiBsaW5lLCBjaGFyQ29kZTogY2hhckNvZGUsIHBvc2l0aW9uOiBuZXcgY29yZS5Qb2ludChwb3MueCArIGNoYXJEYXRhLnhPZmZzZXQsIHBvcy55ICsgY2hhckRhdGEueU9mZnNldCl9KTtcbiAgICAgICAgbGFzdExpbmVXaWR0aCA9IHBvcy54ICsgKGNoYXJEYXRhLnRleHR1cmUud2lkdGggKyBjaGFyRGF0YS54T2Zmc2V0KTtcbiAgICAgICAgcG9zLnggKz0gY2hhckRhdGEueEFkdmFuY2U7XG4gICAgICAgIG1heExpbmVIZWlnaHQgPSBNYXRoLm1heChtYXhMaW5lSGVpZ2h0LCAoY2hhckRhdGEueU9mZnNldCArIGNoYXJEYXRhLnRleHR1cmUuaGVpZ2h0KSk7XG4gICAgICAgIHByZXZDaGFyQ29kZSA9IGNoYXJDb2RlO1xuICAgIH1cblxuICAgIGxpbmVXaWR0aHMucHVzaChsYXN0TGluZVdpZHRoKTtcbiAgICBtYXhMaW5lV2lkdGggPSBNYXRoLm1heChtYXhMaW5lV2lkdGgsIGxhc3RMaW5lV2lkdGgpO1xuXG4gICAgdmFyIGxpbmVBbGlnbk9mZnNldHMgPSBbXTtcblxuICAgIGZvciAoaSA9IDA7IGkgPD0gbGluZTsgaSsrKVxuICAgIHtcbiAgICAgICAgdmFyIGFsaWduT2Zmc2V0ID0gMDtcblxuICAgICAgICBpZiAodGhpcy5fZm9udC5hbGlnbiA9PT0gJ3JpZ2h0JylcbiAgICAgICAge1xuICAgICAgICAgICAgYWxpZ25PZmZzZXQgPSBtYXhMaW5lV2lkdGggLSBsaW5lV2lkdGhzW2ldO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHRoaXMuX2ZvbnQuYWxpZ24gPT09ICdjZW50ZXInKVxuICAgICAgICB7XG4gICAgICAgICAgICBhbGlnbk9mZnNldCA9IChtYXhMaW5lV2lkdGggLSBsaW5lV2lkdGhzW2ldKSAvIDI7XG4gICAgICAgIH1cblxuICAgICAgICBsaW5lQWxpZ25PZmZzZXRzLnB1c2goYWxpZ25PZmZzZXQpO1xuICAgIH1cblxuICAgIHZhciBsZW5DaGFycyA9IGNoYXJzLmxlbmd0aDtcbiAgICB2YXIgdGludCA9IHRoaXMudGludDtcblxuICAgIGZvciAoaSA9IDA7IGkgPCBsZW5DaGFyczsgaSsrKVxuICAgIHtcbiAgICAgICAgdmFyIGMgPSB0aGlzLl9nbHlwaHNbaV07IC8vIGdldCB0aGUgbmV4dCBnbHlwaCBzcHJpdGVcblxuICAgICAgICBpZiAoYylcbiAgICAgICAge1xuICAgICAgICAgICAgYy50ZXh0dXJlID0gY2hhcnNbaV0udGV4dHVyZTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgIHtcbiAgICAgICAgICAgIGMgPSBuZXcgY29yZS5TcHJpdGUoY2hhcnNbaV0udGV4dHVyZSk7XG4gICAgICAgICAgICB0aGlzLl9nbHlwaHMucHVzaChjKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGMucG9zaXRpb24ueCA9IChjaGFyc1tpXS5wb3NpdGlvbi54ICsgbGluZUFsaWduT2Zmc2V0c1tjaGFyc1tpXS5saW5lXSkgKiBzY2FsZTtcbiAgICAgICAgYy5wb3NpdGlvbi55ID0gY2hhcnNbaV0ucG9zaXRpb24ueSAqIHNjYWxlO1xuICAgICAgICBjLnNjYWxlLnggPSBjLnNjYWxlLnkgPSBzY2FsZTtcbiAgICAgICAgYy50aW50ID0gdGludDtcblxuICAgICAgICBpZiAoIWMucGFyZW50KVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmFkZENoaWxkKGMpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gcmVtb3ZlIHVubmVjZXNzYXJ5IGNoaWxkcmVuLlxuICAgIGZvciAoaSA9IGxlbkNoYXJzOyBpIDwgdGhpcy5fZ2x5cGhzLmxlbmd0aDsgKytpKVxuICAgIHtcbiAgICAgICAgdGhpcy5yZW1vdmVDaGlsZCh0aGlzLl9nbHlwaHNbaV0pO1xuICAgIH1cblxuICAgIHRoaXMudGV4dFdpZHRoID0gbWF4TGluZVdpZHRoICogc2NhbGU7XG4gICAgdGhpcy50ZXh0SGVpZ2h0ID0gKHBvcy55ICsgZGF0YS5saW5lSGVpZ2h0KSAqIHNjYWxlO1xuICAgIHRoaXMubWF4TGluZUhlaWdodCA9IG1heExpbmVIZWlnaHQgKiBzY2FsZTtcbn07XG5cbi8qKlxuICogVXBkYXRlcyB0aGUgdHJhbnNmb3JtIG9mIHRoaXMgb2JqZWN0XG4gKlxuICogQHByaXZhdGVcbiAqL1xuQml0bWFwVGV4dC5wcm90b3R5cGUudXBkYXRlVHJhbnNmb3JtID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLnZhbGlkYXRlKCk7XG4gICAgdGhpcy5jb250YWluZXJVcGRhdGVUcmFuc2Zvcm0oKTtcbn07XG5cbi8qKlxuICogVmFsaWRhdGVzIHRleHQgYmVmb3JlIGNhbGxpbmcgcGFyZW50J3MgZ2V0TG9jYWxCb3VuZHNcbiAqXG4gKiBAcmV0dXJuIHtQSVhJLlJlY3RhbmdsZX0gVGhlIHJlY3Rhbmd1bGFyIGJvdW5kaW5nIGFyZWFcbiAqL1xuXG5CaXRtYXBUZXh0LnByb3RvdHlwZS5nZXRMb2NhbEJvdW5kcyA9IGZ1bmN0aW9uKClcbntcbiAgICB0aGlzLnZhbGlkYXRlKCk7XG4gICAgcmV0dXJuIGNvcmUuQ29udGFpbmVyLnByb3RvdHlwZS5nZXRMb2NhbEJvdW5kcy5jYWxsKHRoaXMpO1xufTtcblxuLyoqXG4gKiBVcGRhdGVzIHRleHQgd2hlbiBuZWVkZWRcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5CaXRtYXBUZXh0LnByb3RvdHlwZS52YWxpZGF0ZSA9IGZ1bmN0aW9uKClcbntcbiAgICBpZiAodGhpcy5kaXJ0eSlcbiAgICB7XG4gICAgICAgIHRoaXMudXBkYXRlVGV4dCgpO1xuICAgICAgICB0aGlzLmRpcnR5ID0gZmFsc2U7XG4gICAgfVxufTtcblxuQml0bWFwVGV4dC5mb250cyA9IHt9O1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi9jb3JlJyk7XG5cbi8qKlxuICogQSBNb3ZpZUNsaXAgaXMgYSBzaW1wbGUgd2F5IHRvIGRpc3BsYXkgYW4gYW5pbWF0aW9uIGRlcGljdGVkIGJ5IGEgbGlzdCBvZiB0ZXh0dXJlcy5cbiAqXG4gKiBgYGBqc1xuICogdmFyIGFsaWVuSW1hZ2VzID0gW1wiaW1hZ2Vfc2VxdWVuY2VfMDEucG5nXCIsXCJpbWFnZV9zZXF1ZW5jZV8wMi5wbmdcIixcImltYWdlX3NlcXVlbmNlXzAzLnBuZ1wiLFwiaW1hZ2Vfc2VxdWVuY2VfMDQucG5nXCJdO1xuICogdmFyIHRleHR1cmVBcnJheSA9IFtdO1xuICpcbiAqIGZvciAodmFyIGk9MDsgaSA8IDQ7IGkrKylcbiAqIHtcbiAqICAgICAgdmFyIHRleHR1cmUgPSBQSVhJLlRleHR1cmUuZnJvbUltYWdlKGFsaWVuSW1hZ2VzW2ldKTtcbiAqICAgICAgdGV4dHVyZUFycmF5LnB1c2godGV4dHVyZSk7XG4gKiB9O1xuICpcbiAqIHZhciBtYyA9IG5ldyBQSVhJLk1vdmllQ2xpcCh0ZXh0dXJlQXJyYXkpO1xuICogYGBgXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLlNwcml0ZVxuICogQG1lbWJlcm9mIFBJWEkuZXh0cmFzXG4gKiBAcGFyYW0gdGV4dHVyZXMge1BJWEkuVGV4dHVyZVtdfE9iamVjdFtdfSBhbiBhcnJheSBvZiB7QGxpbmsgUElYSS5UZXh0dXJlfSBvciBmcmFtZSBvYmplY3RzIHRoYXQgbWFrZSB1cCB0aGUgYW5pbWF0aW9uXG4gKiBAcGFyYW0gdGV4dHVyZXNbXS50ZXh0dXJlIHtQSVhJLlRleHR1cmV9IHRoZSB7QGxpbmsgUElYSS5UZXh0dXJlfSBvZiB0aGUgZnJhbWVcbiAqIEBwYXJhbSB0ZXh0dXJlc1tdLnRpbWUge251bWJlcn0gdGhlIGR1cmF0aW9uIG9mIHRoZSBmcmFtZSBpbiBtc1xuICovXG5mdW5jdGlvbiBNb3ZpZUNsaXAodGV4dHVyZXMpXG57XG4gICAgY29yZS5TcHJpdGUuY2FsbCh0aGlzLCB0ZXh0dXJlc1swXSBpbnN0YW5jZW9mIGNvcmUuVGV4dHVyZSA/IHRleHR1cmVzWzBdIDogdGV4dHVyZXNbMF0udGV4dHVyZSk7XG5cbiAgICAvKipcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX3RleHR1cmVzID0gbnVsbDtcblxuICAgIC8qKlxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fZHVyYXRpb25zID0gbnVsbDtcblxuICAgIHRoaXMudGV4dHVyZXMgPSB0ZXh0dXJlcztcblxuICAgIC8qKlxuICAgICAqIFRoZSBzcGVlZCB0aGF0IHRoZSBNb3ZpZUNsaXAgd2lsbCBwbGF5IGF0LiBIaWdoZXIgaXMgZmFzdGVyLCBsb3dlciBpcyBzbG93ZXJcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAxXG4gICAgICovXG4gICAgdGhpcy5hbmltYXRpb25TcGVlZCA9IDE7XG5cbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIG9yIG5vdCB0aGUgbW92aWUgY2xpcCByZXBlYXRzIGFmdGVyIHBsYXlpbmcuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqIEBkZWZhdWx0IHRydWVcbiAgICAgKi9cbiAgICB0aGlzLmxvb3AgPSB0cnVlO1xuXG4gICAgLyoqXG4gICAgICogRnVuY3Rpb24gdG8gY2FsbCB3aGVuIGEgTW92aWVDbGlwIGZpbmlzaGVzIHBsYXlpbmdcbiAgICAgKlxuICAgICAqIEBtZXRob2RcbiAgICAgKiBAbWVtYmVyb2YgUElYSS5leHRyYXMuTW92aWVDbGlwI1xuICAgICAqL1xuICAgIHRoaXMub25Db21wbGV0ZSA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBFbGFwc2VkIHRpbWUgc2luY2UgYW5pbWF0aW9uIGhhcyBiZWVuIHN0YXJ0ZWQsIHVzZWQgaW50ZXJuYWxseSB0byBkaXNwbGF5IGN1cnJlbnQgdGV4dHVyZVxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fY3VycmVudFRpbWUgPSAwO1xuXG4gICAgLyoqXG4gICAgICogSW5kaWNhdGVzIGlmIHRoZSBNb3ZpZUNsaXAgaXMgY3VycmVudGx5IHBsYXlpbmdcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICogQHJlYWRvbmx5XG4gICAgICovXG4gICAgdGhpcy5wbGF5aW5nID0gZmFsc2U7XG59XG5cbi8vIGNvbnN0cnVjdG9yXG5Nb3ZpZUNsaXAucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShjb3JlLlNwcml0ZS5wcm90b3R5cGUpO1xuTW92aWVDbGlwLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IE1vdmllQ2xpcDtcbm1vZHVsZS5leHBvcnRzID0gTW92aWVDbGlwO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhNb3ZpZUNsaXAucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogdG90YWxGcmFtZXMgaXMgdGhlIHRvdGFsIG51bWJlciBvZiBmcmFtZXMgaW4gdGhlIE1vdmllQ2xpcC4gVGhpcyBpcyB0aGUgc2FtZSBhcyBudW1iZXIgb2YgdGV4dHVyZXNcbiAgICAgKiBhc3NpZ25lZCB0byB0aGUgTW92aWVDbGlwLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmV4dHJhcy5Nb3ZpZUNsaXAjXG4gICAgICogQGRlZmF1bHQgMFxuICAgICAqIEByZWFkb25seVxuICAgICAqL1xuICAgIHRvdGFsRnJhbWVzOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24oKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fdGV4dHVyZXMubGVuZ3RoO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFRoZSBhcnJheSBvZiB0ZXh0dXJlcyB1c2VkIGZvciB0aGlzIE1vdmllQ2xpcFxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5UZXh0dXJlW119XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZXh0cmFzLk1vdmllQ2xpcCNcbiAgICAgKlxuICAgICAqL1xuICAgIHRleHR1cmVzOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3RleHR1cmVzO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgaWYodmFsdWVbMF0gaW5zdGFuY2VvZiBjb3JlLlRleHR1cmUpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdGhpcy5fdGV4dHVyZXMgPSB2YWx1ZTtcbiAgICAgICAgICAgICAgICB0aGlzLl9kdXJhdGlvbnMgPSBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHRoaXMuX3RleHR1cmVzID0gW107XG4gICAgICAgICAgICAgICAgdGhpcy5fZHVyYXRpb25zID0gW107XG4gICAgICAgICAgICAgICAgZm9yKHZhciBpID0gMDsgaSA8IHZhbHVlLmxlbmd0aDsgaSsrKVxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fdGV4dHVyZXMucHVzaCh2YWx1ZVtpXS50ZXh0dXJlKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fZHVyYXRpb25zLnB1c2godmFsdWVbaV0udGltZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICogVGhlIE1vdmllQ2xpcHMgY3VycmVudCBmcmFtZSBpbmRleFxuICAgICpcbiAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAqIEBtZW1iZXJvZiBQSVhJLmV4dHJhcy5Nb3ZpZUNsaXAjXG4gICAgKiBAcmVhZG9ubHlcbiAgICAqL1xuICAgIGN1cnJlbnRGcmFtZToge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHZhciBjdXJyZW50RnJhbWUgPSBNYXRoLmZsb29yKHRoaXMuX2N1cnJlbnRUaW1lKSAlIHRoaXMuX3RleHR1cmVzLmxlbmd0aDtcbiAgICAgICAgICAgIGlmIChjdXJyZW50RnJhbWUgPCAwKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGN1cnJlbnRGcmFtZSArPSB0aGlzLl90ZXh0dXJlcy5sZW5ndGg7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gY3VycmVudEZyYW1lO1xuICAgICAgICB9XG4gICAgfVxuXG59KTtcblxuLyoqXG4gKiBTdG9wcyB0aGUgTW92aWVDbGlwXG4gKlxuICovXG5Nb3ZpZUNsaXAucHJvdG90eXBlLnN0b3AgPSBmdW5jdGlvbiAoKVxue1xuICAgIGlmKCF0aGlzLnBsYXlpbmcpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5wbGF5aW5nID0gZmFsc2U7XG4gICAgY29yZS50aWNrZXIuc2hhcmVkLnJlbW92ZSh0aGlzLnVwZGF0ZSwgdGhpcyk7XG59O1xuXG4vKipcbiAqIFBsYXlzIHRoZSBNb3ZpZUNsaXBcbiAqXG4gKi9cbk1vdmllQ2xpcC5wcm90b3R5cGUucGxheSA9IGZ1bmN0aW9uICgpXG57XG4gICAgaWYodGhpcy5wbGF5aW5nKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMucGxheWluZyA9IHRydWU7XG4gICAgY29yZS50aWNrZXIuc2hhcmVkLmFkZCh0aGlzLnVwZGF0ZSwgdGhpcyk7XG59O1xuXG4vKipcbiAqIFN0b3BzIHRoZSBNb3ZpZUNsaXAgYW5kIGdvZXMgdG8gYSBzcGVjaWZpYyBmcmFtZVxuICpcbiAqIEBwYXJhbSBmcmFtZU51bWJlciB7bnVtYmVyfSBmcmFtZSBpbmRleCB0byBzdG9wIGF0XG4gKi9cbk1vdmllQ2xpcC5wcm90b3R5cGUuZ290b0FuZFN0b3AgPSBmdW5jdGlvbiAoZnJhbWVOdW1iZXIpXG57XG4gICAgdGhpcy5zdG9wKCk7XG5cbiAgICB0aGlzLl9jdXJyZW50VGltZSA9IGZyYW1lTnVtYmVyO1xuXG4gICAgdGhpcy5fdGV4dHVyZSA9IHRoaXMuX3RleHR1cmVzW3RoaXMuY3VycmVudEZyYW1lXTtcbn07XG5cbi8qKlxuICogR29lcyB0byBhIHNwZWNpZmljIGZyYW1lIGFuZCBiZWdpbnMgcGxheWluZyB0aGUgTW92aWVDbGlwXG4gKlxuICogQHBhcmFtIGZyYW1lTnVtYmVyIHtudW1iZXJ9IGZyYW1lIGluZGV4IHRvIHN0YXJ0IGF0XG4gKi9cbk1vdmllQ2xpcC5wcm90b3R5cGUuZ290b0FuZFBsYXkgPSBmdW5jdGlvbiAoZnJhbWVOdW1iZXIpXG57XG4gICAgdGhpcy5fY3VycmVudFRpbWUgPSBmcmFtZU51bWJlcjtcblxuICAgIHRoaXMucGxheSgpO1xufTtcblxuLypcbiAqIFVwZGF0ZXMgdGhlIG9iamVjdCB0cmFuc2Zvcm0gZm9yIHJlbmRlcmluZ1xuICogQHByaXZhdGVcbiAqL1xuTW92aWVDbGlwLnByb3RvdHlwZS51cGRhdGUgPSBmdW5jdGlvbiAoZGVsdGFUaW1lKVxue1xuICAgIHZhciBlbGFwc2VkID0gdGhpcy5hbmltYXRpb25TcGVlZCAqIGRlbHRhVGltZTtcblxuICAgIGlmICh0aGlzLl9kdXJhdGlvbnMgIT09IG51bGwpXG4gICAge1xuICAgICAgICB2YXIgbGFnID0gdGhpcy5fY3VycmVudFRpbWUgJSAxICogdGhpcy5fZHVyYXRpb25zW3RoaXMuY3VycmVudEZyYW1lXTtcblxuICAgICAgICBsYWcgKz0gZWxhcHNlZCAvIDYwICogMTAwMDtcblxuICAgICAgICB3aGlsZSAobGFnIDwgMClcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5fY3VycmVudFRpbWUtLTtcbiAgICAgICAgICAgIGxhZyArPSB0aGlzLl9kdXJhdGlvbnNbdGhpcy5jdXJyZW50RnJhbWVdO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIHNpZ24gPSBNYXRoLnNpZ24odGhpcy5hbmltYXRpb25TcGVlZCAqIGRlbHRhVGltZSk7XG4gICAgICAgIHRoaXMuX2N1cnJlbnRUaW1lID0gTWF0aC5mbG9vcih0aGlzLl9jdXJyZW50VGltZSk7XG5cbiAgICAgICAgd2hpbGUgKGxhZyA+PSB0aGlzLl9kdXJhdGlvbnNbdGhpcy5jdXJyZW50RnJhbWVdKVxuICAgICAgICB7XG4gICAgICAgICAgICBsYWcgLT0gdGhpcy5fZHVyYXRpb25zW3RoaXMuY3VycmVudEZyYW1lXSAqIHNpZ247XG4gICAgICAgICAgICB0aGlzLl9jdXJyZW50VGltZSArPSBzaWduO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fY3VycmVudFRpbWUgKz0gbGFnIC8gdGhpcy5fZHVyYXRpb25zW3RoaXMuY3VycmVudEZyYW1lXTtcbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgdGhpcy5fY3VycmVudFRpbWUgKz0gZWxhcHNlZDtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5fY3VycmVudFRpbWUgPCAwICYmICF0aGlzLmxvb3ApXG4gICAge1xuICAgICAgICB0aGlzLmdvdG9BbmRTdG9wKDApO1xuXG4gICAgICAgIGlmICh0aGlzLm9uQ29tcGxldGUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMub25Db21wbGV0ZSgpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGVsc2UgaWYgKHRoaXMuX2N1cnJlbnRUaW1lID49IHRoaXMuX3RleHR1cmVzLmxlbmd0aCAmJiAhdGhpcy5sb29wKVxuICAgIHtcbiAgICAgICAgdGhpcy5nb3RvQW5kU3RvcCh0aGlzLl90ZXh0dXJlcy5sZW5ndGggLSAxKTtcblxuICAgICAgICBpZiAodGhpcy5vbkNvbXBsZXRlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLm9uQ29tcGxldGUoKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICB0aGlzLl90ZXh0dXJlID0gdGhpcy5fdGV4dHVyZXNbdGhpcy5jdXJyZW50RnJhbWVdO1xuICAgIH1cblxufTtcblxuLypcbiAqIFN0b3BzIHRoZSBNb3ZpZUNsaXAgYW5kIGRlc3Ryb3lzIGl0XG4gKlxuICovXG5Nb3ZpZUNsaXAucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoIClcbntcbiAgICB0aGlzLnN0b3AoKTtcbiAgICBjb3JlLlNwcml0ZS5wcm90b3R5cGUuZGVzdHJveS5jYWxsKHRoaXMpO1xufTtcblxuLyoqXG4gKiBBIHNob3J0IGhhbmQgd2F5IG9mIGNyZWF0aW5nIGEgbW92aWVjbGlwIGZyb20gYW4gYXJyYXkgb2YgZnJhbWUgaWRzXG4gKlxuICogQHN0YXRpY1xuICogQHBhcmFtIGZyYW1lcyB7c3RyaW5nW119IHRoZSBhcnJheSBvZiBmcmFtZXMgaWRzIHRoZSBtb3ZpZWNsaXAgd2lsbCB1c2UgYXMgaXRzIHRleHR1cmUgZnJhbWVzXG4gKi9cbk1vdmllQ2xpcC5mcm9tRnJhbWVzID0gZnVuY3Rpb24gKGZyYW1lcylcbntcbiAgICB2YXIgdGV4dHVyZXMgPSBbXTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZnJhbWVzLmxlbmd0aDsgKytpKVxuICAgIHtcbiAgICAgICAgdGV4dHVyZXMucHVzaChuZXcgY29yZS5UZXh0dXJlLmZyb21GcmFtZShmcmFtZXNbaV0pKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IE1vdmllQ2xpcCh0ZXh0dXJlcyk7XG59O1xuXG4vKipcbiAqIEEgc2hvcnQgaGFuZCB3YXkgb2YgY3JlYXRpbmcgYSBtb3ZpZWNsaXAgZnJvbSBhbiBhcnJheSBvZiBpbWFnZSBpZHNcbiAqXG4gKiBAc3RhdGljXG4gKiBAcGFyYW0gaW1hZ2VzIHtzdHJpbmdbXX0gdGhlIGFycmF5IG9mIGltYWdlIHVybHMgdGhlIG1vdmllY2xpcCB3aWxsIHVzZSBhcyBpdHMgdGV4dHVyZSBmcmFtZXNcbiAqL1xuTW92aWVDbGlwLmZyb21JbWFnZXMgPSBmdW5jdGlvbiAoaW1hZ2VzKVxue1xuICAgIHZhciB0ZXh0dXJlcyA9IFtdO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBpbWFnZXMubGVuZ3RoOyArK2kpXG4gICAge1xuICAgICAgICB0ZXh0dXJlcy5wdXNoKG5ldyBjb3JlLlRleHR1cmUuZnJvbUltYWdlKGltYWdlc1tpXSkpO1xuICAgIH1cblxuICAgIHJldHVybiBuZXcgTW92aWVDbGlwKHRleHR1cmVzKTtcbn07IiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi9jb3JlJyksXG4gICAgLy8gYSBzcHJpdGUgdXNlIGRmb3IgcmVuZGVyaW5nIHRleHR1cmVzLi5cbiAgICB0ZW1wUG9pbnQgPSBuZXcgY29yZS5Qb2ludCgpLFxuICAgIENhbnZhc1RpbnRlciA9IHJlcXVpcmUoJy4uL2NvcmUvcmVuZGVyZXJzL2NhbnZhcy91dGlscy9DYW52YXNUaW50ZXInKTtcblxuLyoqXG4gKiBBIHRpbGluZyBzcHJpdGUgaXMgYSBmYXN0IHdheSBvZiByZW5kZXJpbmcgYSB0aWxpbmcgaW1hZ2VcbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuU3ByaXRlXG4gKiBAbWVtYmVyb2YgUElYSS5leHRyYXNcbiAqIEBwYXJhbSB0ZXh0dXJlIHtUZXh0dXJlfSB0aGUgdGV4dHVyZSBvZiB0aGUgdGlsaW5nIHNwcml0ZVxuICogQHBhcmFtIHdpZHRoIHtudW1iZXJ9ICB0aGUgd2lkdGggb2YgdGhlIHRpbGluZyBzcHJpdGVcbiAqIEBwYXJhbSBoZWlnaHQge251bWJlcn0gdGhlIGhlaWdodCBvZiB0aGUgdGlsaW5nIHNwcml0ZVxuICovXG5mdW5jdGlvbiBUaWxpbmdTcHJpdGUodGV4dHVyZSwgd2lkdGgsIGhlaWdodClcbntcbiAgICBjb3JlLlNwcml0ZS5jYWxsKHRoaXMsIHRleHR1cmUpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHNjYWxpbmcgb2YgdGhlIGltYWdlIHRoYXQgaXMgYmVpbmcgdGlsZWRcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuUG9pbnR9XG4gICAgICovXG4gICAgdGhpcy50aWxlU2NhbGUgPSBuZXcgY29yZS5Qb2ludCgxLDEpO1xuXG5cbiAgICAvKipcbiAgICAgKiBUaGUgb2Zmc2V0IHBvc2l0aW9uIG9mIHRoZSBpbWFnZSB0aGF0IGlzIGJlaW5nIHRpbGVkXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlBvaW50fVxuICAgICAqL1xuICAgIHRoaXMudGlsZVBvc2l0aW9uID0gbmV3IGNvcmUuUG9pbnQoMCwwKTtcblxuICAgIC8vLy8vIHByaXZhdGVcblxuICAgIC8qKlxuICAgICAqIFRoZSB3aXRoIG9mIHRoZSB0aWxpbmcgc3ByaXRlXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl93aWR0aCA9IHdpZHRoIHx8IDEwMDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBoZWlnaHQgb2YgdGhlIHRpbGluZyBzcHJpdGVcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX2hlaWdodCA9IGhlaWdodCB8fCAxMDA7XG5cbiAgICAvKipcbiAgICAgKiBBbiBpbnRlcm5hbCBXZWJHTCBVViBjYWNoZS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuVGV4dHVyZVV2c31cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX3V2cyA9IG5ldyBjb3JlLlRleHR1cmVVdnMoKTtcblxuICAgIHRoaXMuX2NhbnZhc1BhdHRlcm4gPSBudWxsO1xuXG4gICAgLy9UT0RPIG1vdmUuLlxuICAgIHRoaXMuc2hhZGVyID0gbmV3IGNvcmUuQWJzdHJhY3RGaWx0ZXIoXG5cbiAgICAgIFtcbiAgICAgICAgJ3ByZWNpc2lvbiBsb3dwIGZsb2F0OycsXG4gICAgICAgICdhdHRyaWJ1dGUgdmVjMiBhVmVydGV4UG9zaXRpb247JyxcbiAgICAgICAgJ2F0dHJpYnV0ZSB2ZWMyIGFUZXh0dXJlQ29vcmQ7JyxcbiAgICAgICAgJ2F0dHJpYnV0ZSB2ZWM0IGFDb2xvcjsnLFxuXG4gICAgICAgICd1bmlmb3JtIG1hdDMgcHJvamVjdGlvbk1hdHJpeDsnLFxuXG4gICAgICAgICd1bmlmb3JtIHZlYzQgdUZyYW1lOycsXG4gICAgICAgICd1bmlmb3JtIHZlYzQgdVRyYW5zZm9ybTsnLFxuXG4gICAgICAgICd2YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDsnLFxuICAgICAgICAndmFyeWluZyB2ZWM0IHZDb2xvcjsnLFxuXG4gICAgICAgICd2b2lkIG1haW4odm9pZCl7JyxcbiAgICAgICAgJyAgIGdsX1Bvc2l0aW9uID0gdmVjNCgocHJvamVjdGlvbk1hdHJpeCAqIHZlYzMoYVZlcnRleFBvc2l0aW9uLCAxLjApKS54eSwgMC4wLCAxLjApOycsXG5cbiAgICAgICAgJyAgIHZlYzIgY29vcmQgPSBhVGV4dHVyZUNvb3JkOycsXG4gICAgICAgICcgICBjb29yZCAtPSB1VHJhbnNmb3JtLnh5OycsXG4gICAgICAgICcgICBjb29yZCAvPSB1VHJhbnNmb3JtLnp3OycsXG4gICAgICAgICcgICB2VGV4dHVyZUNvb3JkID0gY29vcmQ7JyxcblxuICAgICAgICAnICAgdkNvbG9yID0gdmVjNChhQ29sb3IucmdiICogYUNvbG9yLmEsIGFDb2xvci5hKTsnLFxuICAgICAgICAnfSdcbiAgICAgIF0uam9pbignXFxuJyksXG4gICAgICBbXG4gICAgICAgICdwcmVjaXNpb24gbG93cCBmbG9hdDsnLFxuXG4gICAgICAgICd2YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDsnLFxuICAgICAgICAndmFyeWluZyB2ZWM0IHZDb2xvcjsnLFxuXG4gICAgICAgICd1bmlmb3JtIHNhbXBsZXIyRCB1U2FtcGxlcjsnLFxuICAgICAgICAndW5pZm9ybSB2ZWM0IHVGcmFtZTsnLFxuICAgICAgICAndW5pZm9ybSB2ZWMyIHVQaXhlbFNpemU7JyxcblxuICAgICAgICAndm9pZCBtYWluKHZvaWQpeycsXG5cbiAgICAgICAgJyAgIHZlYzIgY29vcmQgPSBtb2QodlRleHR1cmVDb29yZCwgdUZyYW1lLnp3KTsnLFxuICAgICAgICAnICAgY29vcmQgPSBjbGFtcChjb29yZCwgdVBpeGVsU2l6ZSwgdUZyYW1lLnp3IC0gdVBpeGVsU2l6ZSk7JyxcbiAgICAgICAgJyAgIGNvb3JkICs9IHVGcmFtZS54eTsnLFxuXG4gICAgICAgICcgICBnbF9GcmFnQ29sb3IgPSAgdGV4dHVyZTJEKHVTYW1wbGVyLCBjb29yZCkgKiB2Q29sb3IgOycsXG4gICAgICAgICd9J1xuICAgICAgXS5qb2luKCdcXG4nKSxcblxuICAgICAgICAgICAgLy8gc2V0IHRoZSB1bmlmb3Jtc1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHVGcmFtZTogeyB0eXBlOiAnNGZ2JywgdmFsdWU6IFswLDAsMSwxXSB9LFxuICAgICAgICAgICAgICAgIHVUcmFuc2Zvcm06IHsgdHlwZTogJzRmdicsIHZhbHVlOiBbMCwwLDEsMV0gfSxcbiAgICAgICAgICAgICAgICB1UGl4ZWxTaXplIDogeyB0eXBlIDogJzJmdicsIHZhbHVlOiBbMSwgMV19XG4gICAgICAgICAgICB9XG4gICAgICApO1xufVxuXG5UaWxpbmdTcHJpdGUucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShjb3JlLlNwcml0ZS5wcm90b3R5cGUpO1xuVGlsaW5nU3ByaXRlLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFRpbGluZ1Nwcml0ZTtcbm1vZHVsZS5leHBvcnRzID0gVGlsaW5nU3ByaXRlO1xuXG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKFRpbGluZ1Nwcml0ZS5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBUaGUgd2lkdGggb2YgdGhlIHNwcml0ZSwgc2V0dGluZyB0aGlzIHdpbGwgYWN0dWFsbHkgbW9kaWZ5IHRoZSBzY2FsZSB0byBhY2hpZXZlIHRoZSB2YWx1ZSBzZXRcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5leHRyYXMuVGlsaW5nU3ByaXRlI1xuICAgICAqL1xuICAgIHdpZHRoOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3dpZHRoO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5fd2lkdGggPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBUaGUgaGVpZ2h0IG9mIHRoZSBUaWxpbmdTcHJpdGUsIHNldHRpbmcgdGhpcyB3aWxsIGFjdHVhbGx5IG1vZGlmeSB0aGUgc2NhbGUgdG8gYWNoaWV2ZSB0aGUgdmFsdWUgc2V0XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZXh0cmFzLlRpbGluZ1Nwcml0ZSNcbiAgICAgKi9cbiAgICBoZWlnaHQ6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5faGVpZ2h0O1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5faGVpZ2h0ID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG59KTtcblxuVGlsaW5nU3ByaXRlLnByb3RvdHlwZS5fb25UZXh0dXJlVXBkYXRlID0gZnVuY3Rpb24gKClcbntcbiAgICByZXR1cm47XG59O1xuXG5cbi8qKlxuICogUmVuZGVycyB0aGUgb2JqZWN0IHVzaW5nIHRoZSBXZWJHTCByZW5kZXJlclxuICpcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5XZWJHTFJlbmRlcmVyfVxuICogQHByaXZhdGVcbiAqL1xuVGlsaW5nU3ByaXRlLnByb3RvdHlwZS5fcmVuZGVyV2ViR0wgPSBmdW5jdGlvbiAocmVuZGVyZXIpXG57XG4gICAgLy8gdHdlYWsgb3VyIHRleHR1cmUgdGVtcG9yYXJpbHkuLlxuICAgIHZhciB0ZXh0dXJlID0gdGhpcy5fdGV4dHVyZTtcblxuICAgIGlmKCF0ZXh0dXJlIHx8ICF0ZXh0dXJlLl91dnMpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFyIHRlbXBVdnMgPSB0ZXh0dXJlLl91dnMsXG4gICAgICAgIHRlbXBXaWR0aCA9IHRleHR1cmUuX2ZyYW1lLndpZHRoLFxuICAgICAgICB0ZW1wSGVpZ2h0ID0gdGV4dHVyZS5fZnJhbWUuaGVpZ2h0LFxuICAgICAgICB0dyA9IHRleHR1cmUuYmFzZVRleHR1cmUud2lkdGgsXG4gICAgICAgIHRoID0gdGV4dHVyZS5iYXNlVGV4dHVyZS5oZWlnaHQ7XG5cbiAgICB0ZXh0dXJlLl91dnMgPSB0aGlzLl91dnM7XG4gICAgdGV4dHVyZS5fZnJhbWUud2lkdGggPSB0aGlzLndpZHRoO1xuICAgIHRleHR1cmUuX2ZyYW1lLmhlaWdodCA9IHRoaXMuaGVpZ2h0O1xuXG4gICAgdGhpcy5zaGFkZXIudW5pZm9ybXMudVBpeGVsU2l6ZS52YWx1ZVswXSA9IDEuMC90dztcbiAgICB0aGlzLnNoYWRlci51bmlmb3Jtcy51UGl4ZWxTaXplLnZhbHVlWzFdID0gMS4wL3RoO1xuXG4gICAgdGhpcy5zaGFkZXIudW5pZm9ybXMudUZyYW1lLnZhbHVlWzBdID0gdGVtcFV2cy54MDtcbiAgICB0aGlzLnNoYWRlci51bmlmb3Jtcy51RnJhbWUudmFsdWVbMV0gPSB0ZW1wVXZzLnkwO1xuICAgIHRoaXMuc2hhZGVyLnVuaWZvcm1zLnVGcmFtZS52YWx1ZVsyXSA9IHRlbXBVdnMueDEgLSB0ZW1wVXZzLngwO1xuICAgIHRoaXMuc2hhZGVyLnVuaWZvcm1zLnVGcmFtZS52YWx1ZVszXSA9IHRlbXBVdnMueTIgLSB0ZW1wVXZzLnkwO1xuXG4gICAgdGhpcy5zaGFkZXIudW5pZm9ybXMudVRyYW5zZm9ybS52YWx1ZVswXSA9ICh0aGlzLnRpbGVQb3NpdGlvbi54ICUgKHRlbXBXaWR0aCAqIHRoaXMudGlsZVNjYWxlLngpKSAvIHRoaXMuX3dpZHRoO1xuICAgIHRoaXMuc2hhZGVyLnVuaWZvcm1zLnVUcmFuc2Zvcm0udmFsdWVbMV0gPSAodGhpcy50aWxlUG9zaXRpb24ueSAlICh0ZW1wSGVpZ2h0ICogdGhpcy50aWxlU2NhbGUueSkpIC8gdGhpcy5faGVpZ2h0O1xuICAgIHRoaXMuc2hhZGVyLnVuaWZvcm1zLnVUcmFuc2Zvcm0udmFsdWVbMl0gPSAoIHR3IC8gdGhpcy5fd2lkdGggKSAqIHRoaXMudGlsZVNjYWxlLng7XG4gICAgdGhpcy5zaGFkZXIudW5pZm9ybXMudVRyYW5zZm9ybS52YWx1ZVszXSA9ICggdGggLyB0aGlzLl9oZWlnaHQgKSAqIHRoaXMudGlsZVNjYWxlLnk7XG5cbiAgICByZW5kZXJlci5zZXRPYmplY3RSZW5kZXJlcihyZW5kZXJlci5wbHVnaW5zLnNwcml0ZSk7XG4gICAgcmVuZGVyZXIucGx1Z2lucy5zcHJpdGUucmVuZGVyKHRoaXMpO1xuXG4gICAgdGV4dHVyZS5fdXZzID0gdGVtcFV2cztcbiAgICB0ZXh0dXJlLl9mcmFtZS53aWR0aCA9IHRlbXBXaWR0aDtcbiAgICB0ZXh0dXJlLl9mcmFtZS5oZWlnaHQgPSB0ZW1wSGVpZ2h0O1xufTtcblxuLyoqXG4gKiBSZW5kZXJzIHRoZSBvYmplY3QgdXNpbmcgdGhlIENhbnZhcyByZW5kZXJlclxuICpcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5DYW52YXNSZW5kZXJlcn0gYSByZWZlcmVuY2UgdG8gdGhlIGNhbnZhcyByZW5kZXJlclxuICogQHByaXZhdGVcbiAqL1xuVGlsaW5nU3ByaXRlLnByb3RvdHlwZS5fcmVuZGVyQ2FudmFzID0gZnVuY3Rpb24gKHJlbmRlcmVyKVxue1xuICAgIHZhciB0ZXh0dXJlID0gdGhpcy5fdGV4dHVyZTtcblxuICAgIGlmICghdGV4dHVyZS5iYXNlVGV4dHVyZS5oYXNMb2FkZWQpXG4gICAge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHZhciBjb250ZXh0ID0gcmVuZGVyZXIuY29udGV4dCxcbiAgICAgICAgdHJhbnNmb3JtID0gdGhpcy53b3JsZFRyYW5zZm9ybSxcbiAgICAgICAgcmVzb2x1dGlvbiA9IHJlbmRlcmVyLnJlc29sdXRpb24sXG4gICAgICAgIGJhc2VUZXh0dXJlID0gdGV4dHVyZS5iYXNlVGV4dHVyZSxcbiAgICAgICAgbW9kWCA9ICh0aGlzLnRpbGVQb3NpdGlvbi54IC8gdGhpcy50aWxlU2NhbGUueCkgJSB0ZXh0dXJlLl9mcmFtZS53aWR0aCxcbiAgICAgICAgbW9kWSA9ICh0aGlzLnRpbGVQb3NpdGlvbi55IC8gdGhpcy50aWxlU2NhbGUueSkgJSB0ZXh0dXJlLl9mcmFtZS5oZWlnaHQ7XG5cbiAgICAvLyBjcmVhdGUgYSBuaWNlIHNoaW55IHBhdHRlcm4hXG4gICAgLy8gVE9ETyB0aGlzIG5lZWRzIHRvIGJlIHJlZnJlc2hlZCBpZiB0ZXh0dXJlIGNoYW5nZXMuLlxuICAgIGlmKCF0aGlzLl9jYW52YXNQYXR0ZXJuKVxuICAgIHtcbiAgICAgICAgLy8gY3V0IGFuIG9iamVjdCBmcm9tIGEgc3ByaXRlc2hlZXQuLlxuICAgICAgICB2YXIgdGVtcENhbnZhcyA9IG5ldyBjb3JlLkNhbnZhc0J1ZmZlcih0ZXh0dXJlLl9mcmFtZS53aWR0aCwgdGV4dHVyZS5fZnJhbWUuaGVpZ2h0KTtcblxuICAgICAgICAvLyBUaW50IHRoZSB0aWxpbmcgc3ByaXRlXG4gICAgICAgIGlmICh0aGlzLnRpbnQgIT09IDB4RkZGRkZGKVxuICAgICAgICB7XG4gICAgICAgICAgICBpZiAodGhpcy5jYWNoZWRUaW50ICE9PSB0aGlzLnRpbnQpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdGhpcy5jYWNoZWRUaW50ID0gdGhpcy50aW50O1xuXG4gICAgICAgICAgICAgICAgdGhpcy50aW50ZWRUZXh0dXJlID0gQ2FudmFzVGludGVyLmdldFRpbnRlZFRleHR1cmUodGhpcywgdGhpcy50aW50KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRlbXBDYW52YXMuY29udGV4dC5kcmF3SW1hZ2UodGhpcy50aW50ZWRUZXh0dXJlLCAwLCAwKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRlbXBDYW52YXMuY29udGV4dC5kcmF3SW1hZ2UoYmFzZVRleHR1cmUuc291cmNlLCAtdGV4dHVyZS5fZnJhbWUueCwgLXRleHR1cmUuX2ZyYW1lLnkpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX2NhbnZhc1BhdHRlcm4gPSB0ZW1wQ2FudmFzLmNvbnRleHQuY3JlYXRlUGF0dGVybiggdGVtcENhbnZhcy5jYW52YXMsICdyZXBlYXQnICk7XG4gICAgfVxuXG4gICAgLy8gc2V0IGNvbnRleHQgc3RhdGUuLlxuICAgIGNvbnRleHQuZ2xvYmFsQWxwaGEgPSB0aGlzLndvcmxkQWxwaGE7XG4gICAgY29udGV4dC5zZXRUcmFuc2Zvcm0odHJhbnNmb3JtLmEgKiByZXNvbHV0aW9uLFxuICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2Zvcm0uYiAqIHJlc29sdXRpb24sXG4gICAgICAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybS5jICogcmVzb2x1dGlvbixcbiAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtLmQgKiByZXNvbHV0aW9uLFxuICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2Zvcm0udHggKiByZXNvbHV0aW9uLFxuICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2Zvcm0udHkgKiByZXNvbHV0aW9uKTtcblxuICAgIC8vIFRPRE8gLSB0aGlzIHNob3VsZCBiZSByb2xsZWQgaW50byB0aGUgc2V0VHJhbnNmb3JtIGFib3ZlLi5cbiAgICBjb250ZXh0LnNjYWxlKHRoaXMudGlsZVNjYWxlLngsdGhpcy50aWxlU2NhbGUueSk7XG5cbiAgICBjb250ZXh0LnRyYW5zbGF0ZShtb2RYICsgKHRoaXMuYW5jaG9yLnggKiAtdGhpcy5fd2lkdGggKSxcbiAgICAgICAgICAgICAgICAgICAgICBtb2RZICsgKHRoaXMuYW5jaG9yLnkgKiAtdGhpcy5faGVpZ2h0KSk7XG5cbiAgICAvLyBjaGVjayBibGVuZCBtb2RlXG4gICAgdmFyIGNvbXBvc2l0ZU9wZXJhdGlvbiA9IHJlbmRlcmVyLmJsZW5kTW9kZXNbdGhpcy5ibGVuZE1vZGVdO1xuICAgIGlmIChjb21wb3NpdGVPcGVyYXRpb24gIT09IHJlbmRlcmVyLmNvbnRleHQuZ2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uKVxuICAgIHtcbiAgICAgICAgY29udGV4dC5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb24gPSBjb21wb3NpdGVPcGVyYXRpb247XG4gICAgfVxuXG4gICAgLy8gZmlsbCB0aGUgcGF0dGVybiFcbiAgICBjb250ZXh0LmZpbGxTdHlsZSA9IHRoaXMuX2NhbnZhc1BhdHRlcm47XG4gICAgY29udGV4dC5maWxsUmVjdCgtbW9kWCxcbiAgICAgICAgICAgICAgICAgICAgIC1tb2RZLFxuICAgICAgICAgICAgICAgICAgICAgdGhpcy5fd2lkdGggLyB0aGlzLnRpbGVTY2FsZS54LFxuICAgICAgICAgICAgICAgICAgICAgdGhpcy5faGVpZ2h0IC8gdGhpcy50aWxlU2NhbGUueSk7XG5cblxuICAgIC8vVE9ETyAtIHByZXR0eSBzdXJlIHRoaXMgY2FuIGJlIGRlbGV0ZWQuLi5cbiAgICAvL2NvbnRleHQudHJhbnNsYXRlKC10aGlzLnRpbGVQb3NpdGlvbi54ICsgKHRoaXMuYW5jaG9yLnggKiB0aGlzLl93aWR0aCksIC10aGlzLnRpbGVQb3NpdGlvbi55ICsgKHRoaXMuYW5jaG9yLnkgKiB0aGlzLl9oZWlnaHQpKTtcbiAgICAvL2NvbnRleHQuc2NhbGUoMSAvIHRoaXMudGlsZVNjYWxlLngsIDEgLyB0aGlzLnRpbGVTY2FsZS55KTtcbn07XG5cblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBmcmFtaW5nIHJlY3RhbmdsZSBvZiB0aGUgc3ByaXRlIGFzIGEgUmVjdGFuZ2xlIG9iamVjdFxuKlxuICogQHJldHVybiB7UElYSS5SZWN0YW5nbGV9IHRoZSBmcmFtaW5nIHJlY3RhbmdsZVxuICovXG5UaWxpbmdTcHJpdGUucHJvdG90eXBlLmdldEJvdW5kcyA9IGZ1bmN0aW9uICgpXG57XG4gICAgdmFyIHdpZHRoID0gdGhpcy5fd2lkdGg7XG4gICAgdmFyIGhlaWdodCA9IHRoaXMuX2hlaWdodDtcblxuICAgIHZhciB3MCA9IHdpZHRoICogKDEtdGhpcy5hbmNob3IueCk7XG4gICAgdmFyIHcxID0gd2lkdGggKiAtdGhpcy5hbmNob3IueDtcblxuICAgIHZhciBoMCA9IGhlaWdodCAqICgxLXRoaXMuYW5jaG9yLnkpO1xuICAgIHZhciBoMSA9IGhlaWdodCAqIC10aGlzLmFuY2hvci55O1xuXG4gICAgdmFyIHdvcmxkVHJhbnNmb3JtID0gdGhpcy53b3JsZFRyYW5zZm9ybTtcblxuICAgIHZhciBhID0gd29ybGRUcmFuc2Zvcm0uYTtcbiAgICB2YXIgYiA9IHdvcmxkVHJhbnNmb3JtLmI7XG4gICAgdmFyIGMgPSB3b3JsZFRyYW5zZm9ybS5jO1xuICAgIHZhciBkID0gd29ybGRUcmFuc2Zvcm0uZDtcbiAgICB2YXIgdHggPSB3b3JsZFRyYW5zZm9ybS50eDtcbiAgICB2YXIgdHkgPSB3b3JsZFRyYW5zZm9ybS50eTtcblxuICAgIHZhciB4MSA9IGEgKiB3MSArIGMgKiBoMSArIHR4O1xuICAgIHZhciB5MSA9IGQgKiBoMSArIGIgKiB3MSArIHR5O1xuXG4gICAgdmFyIHgyID0gYSAqIHcwICsgYyAqIGgxICsgdHg7XG4gICAgdmFyIHkyID0gZCAqIGgxICsgYiAqIHcwICsgdHk7XG5cbiAgICB2YXIgeDMgPSBhICogdzAgKyBjICogaDAgKyB0eDtcbiAgICB2YXIgeTMgPSBkICogaDAgKyBiICogdzAgKyB0eTtcblxuICAgIHZhciB4NCA9ICBhICogdzEgKyBjICogaDAgKyB0eDtcbiAgICB2YXIgeTQgPSAgZCAqIGgwICsgYiAqIHcxICsgdHk7XG5cbiAgICB2YXIgbWluWCxcbiAgICAgICAgbWF4WCxcbiAgICAgICAgbWluWSxcbiAgICAgICAgbWF4WTtcblxuICAgIG1pblggPSB4MTtcbiAgICBtaW5YID0geDIgPCBtaW5YID8geDIgOiBtaW5YO1xuICAgIG1pblggPSB4MyA8IG1pblggPyB4MyA6IG1pblg7XG4gICAgbWluWCA9IHg0IDwgbWluWCA/IHg0IDogbWluWDtcblxuICAgIG1pblkgPSB5MTtcbiAgICBtaW5ZID0geTIgPCBtaW5ZID8geTIgOiBtaW5ZO1xuICAgIG1pblkgPSB5MyA8IG1pblkgPyB5MyA6IG1pblk7XG4gICAgbWluWSA9IHk0IDwgbWluWSA/IHk0IDogbWluWTtcblxuICAgIG1heFggPSB4MTtcbiAgICBtYXhYID0geDIgPiBtYXhYID8geDIgOiBtYXhYO1xuICAgIG1heFggPSB4MyA+IG1heFggPyB4MyA6IG1heFg7XG4gICAgbWF4WCA9IHg0ID4gbWF4WCA/IHg0IDogbWF4WDtcblxuICAgIG1heFkgPSB5MTtcbiAgICBtYXhZID0geTIgPiBtYXhZID8geTIgOiBtYXhZO1xuICAgIG1heFkgPSB5MyA+IG1heFkgPyB5MyA6IG1heFk7XG4gICAgbWF4WSA9IHk0ID4gbWF4WSA/IHk0IDogbWF4WTtcblxuICAgIHZhciBib3VuZHMgPSB0aGlzLl9ib3VuZHM7XG5cbiAgICBib3VuZHMueCA9IG1pblg7XG4gICAgYm91bmRzLndpZHRoID0gbWF4WCAtIG1pblg7XG5cbiAgICBib3VuZHMueSA9IG1pblk7XG4gICAgYm91bmRzLmhlaWdodCA9IG1heFkgLSBtaW5ZO1xuXG4gICAgLy8gc3RvcmUgYSByZWZlcmVuY2Ugc28gdGhhdCBpZiB0aGlzIGZ1bmN0aW9uIGdldHMgY2FsbGVkIGFnYWluIGluIHRoZSByZW5kZXIgY3ljbGUgd2UgZG8gbm90IGhhdmUgdG8gcmVjYWxjdWxhdGVcbiAgICB0aGlzLl9jdXJyZW50Qm91bmRzID0gYm91bmRzO1xuXG4gICAgcmV0dXJuIGJvdW5kcztcbn07XG5cbi8qKlxuICogQ2hlY2tzIGlmIGEgcG9pbnQgaXMgaW5zaWRlIHRoaXMgdGlsaW5nIHNwcml0ZVxuICogQHBhcmFtIHBvaW50IHtQSVhJLlBvaW50fSB0aGUgcG9pbnQgdG8gY2hlY2tcbiAqL1xuVGlsaW5nU3ByaXRlLnByb3RvdHlwZS5jb250YWluc1BvaW50ID0gZnVuY3Rpb24oIHBvaW50IClcbntcbiAgICB0aGlzLndvcmxkVHJhbnNmb3JtLmFwcGx5SW52ZXJzZShwb2ludCwgIHRlbXBQb2ludCk7XG5cbiAgICB2YXIgd2lkdGggPSB0aGlzLl93aWR0aDtcbiAgICB2YXIgaGVpZ2h0ID0gdGhpcy5faGVpZ2h0O1xuICAgIHZhciB4MSA9IC13aWR0aCAqIHRoaXMuYW5jaG9yLng7XG4gICAgdmFyIHkxO1xuXG4gICAgaWYgKCB0ZW1wUG9pbnQueCA+IHgxICYmIHRlbXBQb2ludC54IDwgeDEgKyB3aWR0aCApXG4gICAge1xuICAgICAgICB5MSA9IC1oZWlnaHQgKiB0aGlzLmFuY2hvci55O1xuXG4gICAgICAgIGlmICggdGVtcFBvaW50LnkgPiB5MSAmJiB0ZW1wUG9pbnQueSA8IHkxICsgaGVpZ2h0IClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2U7XG59O1xuXG4vKipcbiAqIERlc3Ryb3lzIHRoaXMgdGlsaW5nIHNwcml0ZVxuICpcbiAqL1xuVGlsaW5nU3ByaXRlLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKCkge1xuICAgIGNvcmUuU3ByaXRlLnByb3RvdHlwZS5kZXN0cm95LmNhbGwodGhpcyk7XG5cbiAgICB0aGlzLnRpbGVTY2FsZSA9IG51bGw7XG4gICAgdGhpcy5fdGlsZVNjYWxlT2Zmc2V0ID0gbnVsbDtcbiAgICB0aGlzLnRpbGVQb3NpdGlvbiA9IG51bGw7XG5cbiAgICB0aGlzLl91dnMgPSBudWxsO1xufTtcblxuLyoqXG4gKiBIZWxwZXIgZnVuY3Rpb24gdGhhdCBjcmVhdGVzIGEgdGlsaW5nIHNwcml0ZSB0aGF0IHdpbGwgdXNlIGEgdGV4dHVyZSBmcm9tIHRoZSBUZXh0dXJlQ2FjaGUgYmFzZWQgb24gdGhlIGZyYW1lSWRcbiAqIFRoZSBmcmFtZSBpZHMgYXJlIGNyZWF0ZWQgd2hlbiBhIFRleHR1cmUgcGFja2VyIGZpbGUgaGFzIGJlZW4gbG9hZGVkXG4gKlxuICogQHN0YXRpY1xuICogQHBhcmFtIGZyYW1lSWQge3N0cmluZ30gVGhlIGZyYW1lIElkIG9mIHRoZSB0ZXh0dXJlIGluIHRoZSBjYWNoZVxuICogQHJldHVybiB7UElYSS5leHRyYXMuVGlsaW5nU3ByaXRlfSBBIG5ldyBUaWxpbmdTcHJpdGUgdXNpbmcgYSB0ZXh0dXJlIGZyb20gdGhlIHRleHR1cmUgY2FjaGUgbWF0Y2hpbmcgdGhlIGZyYW1lSWRcbiAqIEBwYXJhbSB3aWR0aCB7bnVtYmVyfSAgdGhlIHdpZHRoIG9mIHRoZSB0aWxpbmcgc3ByaXRlXG4gKiBAcGFyYW0gaGVpZ2h0IHtudW1iZXJ9IHRoZSBoZWlnaHQgb2YgdGhlIHRpbGluZyBzcHJpdGVcbiAqL1xuVGlsaW5nU3ByaXRlLmZyb21GcmFtZSA9IGZ1bmN0aW9uIChmcmFtZUlkLHdpZHRoLGhlaWdodClcbntcbiAgICB2YXIgdGV4dHVyZSA9IGNvcmUudXRpbHMuVGV4dHVyZUNhY2hlW2ZyYW1lSWRdO1xuXG4gICAgaWYgKCF0ZXh0dXJlKVxuICAgIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdUaGUgZnJhbWVJZCBcIicgKyBmcmFtZUlkICsgJ1wiIGRvZXMgbm90IGV4aXN0IGluIHRoZSB0ZXh0dXJlIGNhY2hlICcgKyB0aGlzKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IFRpbGluZ1Nwcml0ZSh0ZXh0dXJlLHdpZHRoLGhlaWdodCk7XG59O1xuXG4vKipcbiAqIEhlbHBlciBmdW5jdGlvbiB0aGF0IGNyZWF0ZXMgYSBzcHJpdGUgdGhhdCB3aWxsIGNvbnRhaW4gYSB0ZXh0dXJlIGJhc2VkIG9uIGFuIGltYWdlIHVybFxuICogSWYgdGhlIGltYWdlIGlzIG5vdCBpbiB0aGUgdGV4dHVyZSBjYWNoZSBpdCB3aWxsIGJlIGxvYWRlZFxuICpcbiAqIEBzdGF0aWNcbiAqIEBwYXJhbSBpbWFnZUlkIHtzdHJpbmd9IFRoZSBpbWFnZSB1cmwgb2YgdGhlIHRleHR1cmVcbiAqIEBwYXJhbSB3aWR0aCB7bnVtYmVyfSAgdGhlIHdpZHRoIG9mIHRoZSB0aWxpbmcgc3ByaXRlXG4gKiBAcGFyYW0gaGVpZ2h0IHtudW1iZXJ9IHRoZSBoZWlnaHQgb2YgdGhlIHRpbGluZyBzcHJpdGVcbiAqIEBwYXJhbSBbY3Jvc3NvcmlnaW49KGF1dG8pXSB7Ym9vbGVhbn0gaWYgeW91IHdhbnQgdG8gc3BlY2lmeSB0aGUgY3Jvc3Mtb3JpZ2luIHBhcmFtZXRlclxuICogQHBhcmFtIFtzY2FsZU1vZGU9UElYSS5TQ0FMRV9NT0RFUy5ERUZBVUxUXSB7bnVtYmVyfSBpZiB5b3Ugd2FudCB0byBzcGVjaWZ5IHRoZSBzY2FsZSBtb2RlLCBzZWUge0BsaW5rIFBJWEkuU0NBTEVfTU9ERVN9IGZvciBwb3NzaWJsZSB2YWx1ZXNcbiAqIEByZXR1cm4ge1BJWEkuZXh0cmFzLlRpbGluZ1Nwcml0ZX0gQSBuZXcgVGlsaW5nU3ByaXRlIHVzaW5nIGEgdGV4dHVyZSBmcm9tIHRoZSB0ZXh0dXJlIGNhY2hlIG1hdGNoaW5nIHRoZSBpbWFnZSBpZFxuICovXG5UaWxpbmdTcHJpdGUuZnJvbUltYWdlID0gZnVuY3Rpb24gKGltYWdlSWQsIHdpZHRoLCBoZWlnaHQsIGNyb3Nzb3JpZ2luLCBzY2FsZU1vZGUpXG57XG4gICAgcmV0dXJuIG5ldyBUaWxpbmdTcHJpdGUoY29yZS5UZXh0dXJlLmZyb21JbWFnZShpbWFnZUlkLCBjcm9zc29yaWdpbiwgc2NhbGVNb2RlKSx3aWR0aCxoZWlnaHQpO1xufTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vY29yZScpLFxuICAgIERpc3BsYXlPYmplY3QgPSBjb3JlLkRpc3BsYXlPYmplY3QsXG4gICAgX3RlbXBNYXRyaXggPSBuZXcgY29yZS5NYXRyaXgoKTtcblxuRGlzcGxheU9iamVjdC5wcm90b3R5cGUuX2NhY2hlQXNCaXRtYXAgPSBmYWxzZTtcbkRpc3BsYXlPYmplY3QucHJvdG90eXBlLl9vcmlnaW5hbFJlbmRlcldlYkdMID0gbnVsbDtcbkRpc3BsYXlPYmplY3QucHJvdG90eXBlLl9vcmlnaW5hbFJlbmRlckNhbnZhcyA9IG51bGw7XG5cbkRpc3BsYXlPYmplY3QucHJvdG90eXBlLl9vcmlnaW5hbFVwZGF0ZVRyYW5zZm9ybSA9IG51bGw7XG5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS5fb3JpZ2luYWxIaXRUZXN0ID0gbnVsbDtcbkRpc3BsYXlPYmplY3QucHJvdG90eXBlLl9vcmlnaW5hbERlc3Ryb3kgPSBudWxsO1xuRGlzcGxheU9iamVjdC5wcm90b3R5cGUuX2NhY2hlZFNwcml0ZSA9IG51bGw7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKERpc3BsYXlPYmplY3QucHJvdG90eXBlLCB7XG5cbiAgICAvKipcbiAgICAgKiBTZXQgdGhpcyB0byB0cnVlIGlmIHlvdSB3YW50IHRoaXMgZGlzcGxheSBvYmplY3QgdG8gYmUgY2FjaGVkIGFzIGEgYml0bWFwLlxuICAgICAqIFRoaXMgYmFzaWNhbGx5IHRha2VzIGEgc25hcCBzaG90IG9mIHRoZSBkaXNwbGF5IG9iamVjdCBhcyBpdCBpcyBhdCB0aGF0IG1vbWVudC4gSXQgY2FuIHByb3ZpZGUgYSBwZXJmb3JtYW5jZSBiZW5lZml0IGZvciBjb21wbGV4IHN0YXRpYyBkaXNwbGF5T2JqZWN0cy5cbiAgICAgKiBUbyByZW1vdmUgc2ltcGx5IHNldCB0aGlzIHByb3BlcnR5IHRvICdmYWxzZSdcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICogQG1lbWJlcm9mIFBJWEkuRGlzcGxheU9iamVjdCNcbiAgICAgKi9cbiAgICBjYWNoZUFzQml0bWFwOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2NhY2hlQXNCaXRtYXA7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICBpZiAodGhpcy5fY2FjaGVBc0JpdG1hcCA9PT0gdmFsdWUpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLl9jYWNoZUFzQml0bWFwID0gdmFsdWU7XG5cbiAgICAgICAgICAgIGlmICh2YWx1ZSlcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9vcmlnaW5hbFJlbmRlcldlYkdMID0gdGhpcy5yZW5kZXJXZWJHTDtcbiAgICAgICAgICAgICAgICB0aGlzLl9vcmlnaW5hbFJlbmRlckNhbnZhcyA9IHRoaXMucmVuZGVyQ2FudmFzO1xuXG4gICAgICAgICAgICAgICAgdGhpcy5fb3JpZ2luYWxVcGRhdGVUcmFuc2Zvcm0gPSB0aGlzLnVwZGF0ZVRyYW5zZm9ybTtcbiAgICAgICAgICAgICAgICB0aGlzLl9vcmlnaW5hbEdldEJvdW5kcyA9IHRoaXMuZ2V0Qm91bmRzO1xuXG4gICAgICAgICAgICAgICAgdGhpcy5fb3JpZ2luYWxEZXN0cm95ID0gdGhpcy5kZXN0cm95O1xuXG4gICAgICAgICAgICAgICAgdGhpcy5fb3JpZ2luYWxDb250YWluc1BvaW50ID0gdGhpcy5jb250YWluc1BvaW50O1xuXG4gICAgICAgICAgICAgICAgdGhpcy5yZW5kZXJXZWJHTCA9IHRoaXMuX3JlbmRlckNhY2hlZFdlYkdMO1xuICAgICAgICAgICAgICAgIHRoaXMucmVuZGVyQ2FudmFzID0gdGhpcy5fcmVuZGVyQ2FjaGVkQ2FudmFzO1xuXG4gICAgICAgICAgICAgICAgdGhpcy5kZXN0cm95ID0gdGhpcy5fY2FjaGVBc0JpdG1hcERlc3Ryb3k7XG5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5fY2FjaGVkU3ByaXRlKVxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fZGVzdHJveUNhY2hlZERpc3BsYXlPYmplY3QoKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB0aGlzLnJlbmRlcldlYkdMID0gdGhpcy5fb3JpZ2luYWxSZW5kZXJXZWJHTDtcbiAgICAgICAgICAgICAgICB0aGlzLnJlbmRlckNhbnZhcyA9IHRoaXMuX29yaWdpbmFsUmVuZGVyQ2FudmFzO1xuICAgICAgICAgICAgICAgIHRoaXMuZ2V0Qm91bmRzID0gdGhpcy5fb3JpZ2luYWxHZXRCb3VuZHM7XG5cbiAgICAgICAgICAgICAgICB0aGlzLmRlc3Ryb3kgPSB0aGlzLl9vcmlnaW5hbERlc3Ryb3k7XG5cbiAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZVRyYW5zZm9ybSA9IHRoaXMuX29yaWdpbmFsVXBkYXRlVHJhbnNmb3JtO1xuICAgICAgICAgICAgICAgIHRoaXMuY29udGFpbnNQb2ludCA9IHRoaXMuX29yaWdpbmFsQ29udGFpbnNQb2ludDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn0pO1xuLyoqXG4qIFJlbmRlcnMgYSBjYWNoZWQgdmVyc2lvbiBvZiB0aGUgc3ByaXRlIHdpdGggV2ViR0xcbipcbiogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLldlYkdMUmVuZGVyZXJ9IHRoZSBXZWJHTCByZW5kZXJlclxuKiBAcHJpdmF0ZVxuKi9cbkRpc3BsYXlPYmplY3QucHJvdG90eXBlLl9yZW5kZXJDYWNoZWRXZWJHTCA9IGZ1bmN0aW9uIChyZW5kZXJlcilcbntcbiAgICBpZiAoIXRoaXMudmlzaWJsZSB8fCB0aGlzLndvcmxkQWxwaGEgPD0gMCB8fCAhdGhpcy5yZW5kZXJhYmxlKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuX2luaXRDYWNoZWREaXNwbGF5T2JqZWN0KCByZW5kZXJlciApO1xuXG4gICAgdGhpcy5fY2FjaGVkU3ByaXRlLndvcmxkQWxwaGEgPSB0aGlzLndvcmxkQWxwaGE7XG5cbiAgICByZW5kZXJlci5zZXRPYmplY3RSZW5kZXJlcihyZW5kZXJlci5wbHVnaW5zLnNwcml0ZSk7XG4gICAgcmVuZGVyZXIucGx1Z2lucy5zcHJpdGUucmVuZGVyKCB0aGlzLl9jYWNoZWRTcHJpdGUgKTtcbn07XG5cbi8qKlxuKiBQcmVwYXJlcyB0aGUgV2ViR0wgcmVuZGVyZXIgdG8gY2FjaGUgdGhlIHNwcml0ZVxuKlxuKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcn0gdGhlIFdlYkdMIHJlbmRlcmVyXG4qIEBwcml2YXRlXG4qL1xuRGlzcGxheU9iamVjdC5wcm90b3R5cGUuX2luaXRDYWNoZWREaXNwbGF5T2JqZWN0ID0gZnVuY3Rpb24gKHJlbmRlcmVyKVxue1xuICAgIGlmKHRoaXMuX2NhY2hlZFNwcml0ZSlcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBmaXJzdCB3ZSBmbHVzaCBhbnl0aGluZyBsZWZ0IGluIHRoZSByZW5kZXJlciAob3RoZXJ3aXNlIGl0IHdvdWxkIGdldCByZW5kZXJlZCB0byB0aGUgY2FjaGVkIHRleHR1cmUpXG4gICAgcmVuZGVyZXIuY3VycmVudFJlbmRlcmVyLmZsdXNoKCk7XG4gICAgLy90aGlzLmZpbHRlcnM9IFtdO1xuICAgIC8vIG5leHQgd2UgZmluZCB0aGUgZGltZW5zaW9ucyBvZiB0aGUgdW50cmFuc2Zvcm1lZCBvYmplY3RcbiAgICAvLyB0aGlzIGZ1bmN0aW9uIGFsc28gY2FsbHMgdXBkYXRldHJhbnNmb3JtIG9uIGFsbCBpdHMgY2hpbGRyZW4gYXMgcGFydCBvZiB0aGUgbWVhc3VyaW5nLiBUaGlzIG1lYW5zIHdlIGRvbid0IG5lZWQgdG8gdXBkYXRlIHRoZSB0cmFuc2Zvcm0gYWdhaW4gaW4gdGhpcyBmdW5jdGlvblxuICAgIC8vIFRPRE8gcGFzcyBhbiBvYmplY3QgdG8gY2xvbmUgdG9vPyBzYXZlcyBoYXZpbmcgdG8gY3JlYXRlIGEgbmV3IG9uZSBlYWNoIHRpbWUhXG4gICAgdmFyIGJvdW5kcyA9IHRoaXMuZ2V0TG9jYWxCb3VuZHMoKS5jbG9uZSgpO1xuXG4gICAgLy8gYWRkIHNvbWUgcGFkZGluZyFcbiAgICBpZih0aGlzLl9maWx0ZXJzKVxuICAgIHtcbiAgICAgICAgdmFyIHBhZGRpbmcgPSB0aGlzLl9maWx0ZXJzWzBdLnBhZGRpbmc7XG4gICAgICAgIGJvdW5kcy54IC09IHBhZGRpbmc7XG4gICAgICAgIGJvdW5kcy55IC09IHBhZGRpbmc7XG5cbiAgICAgICAgYm91bmRzLndpZHRoICs9IHBhZGRpbmcgKiAyO1xuICAgICAgICBib3VuZHMuaGVpZ2h0ICs9IHBhZGRpbmcgKiAyO1xuICAgIH1cblxuICAgIC8vIGZvciBub3cgd2UgY2FjaGUgdGhlIGN1cnJlbnQgcmVuZGVyVGFyZ2V0IHRoYXQgdGhlIHdlYkdMIHJlbmRlcmVyIGlzIGN1cnJlbnRseSB1c2luZy5cbiAgICAvLyB0aGlzIGNvdWxkIGJlIG1vcmUgZWxlZ2VudC4uXG4gICAgdmFyIGNhY2hlZFJlbmRlclRhcmdldCA9IHJlbmRlcmVyLmN1cnJlbnRSZW5kZXJUYXJnZXQ7XG4gICAgLy8gV2UgYWxzbyBzdG9yZSB0aGUgZmlsdGVyIHN0YWNrIC0gSSB3aWxsIGRlZmluaXRlbHkgbG9vayB0byBjaGFuZ2UgaG93IHRoaXMgd29ya3MgYSBsaXR0bGUgbGF0ZXIgZG93biB0aGUgbGluZS5cbiAgICB2YXIgc3RhY2sgPSByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLmZpbHRlclN0YWNrO1xuXG4gICAgLy8gdGhpcyByZW5kZXJUZXh0dXJlIHdpbGwgYmUgdXNlZCB0byBzdG9yZSB0aGUgY2FjaGVkIERpc3BsYXlPYmplY3RcbiAgICB2YXIgcmVuZGVyVGV4dHVyZSA9IG5ldyBjb3JlLlJlbmRlclRleHR1cmUocmVuZGVyZXIsIGJvdW5kcy53aWR0aCB8IDAsIGJvdW5kcy5oZWlnaHQgfCAwKTtcblxuICAgIC8vIG5lZWQgdG8gc2V0IC8vXG4gICAgdmFyIG0gPSBfdGVtcE1hdHJpeDtcblxuICAgIG0udHggPSAtYm91bmRzLng7XG4gICAgbS50eSA9IC1ib3VuZHMueTtcblxuXG5cbiAgICAvLyBzZXQgYWxsIHByb3BlcnRpZXMgdG8gdGhlcmUgb3JpZ2luYWwgc28gd2UgY2FuIHJlbmRlciB0byBhIHRleHR1cmVcbiAgICB0aGlzLnJlbmRlcldlYkdMID0gdGhpcy5fb3JpZ2luYWxSZW5kZXJXZWJHTDtcblxuICAgIHJlbmRlclRleHR1cmUucmVuZGVyKHRoaXMsIG0sIHRydWUsIHRydWUpO1xuXG4gICAgLy8gbm93IHJlc3RvcmUgdGhlIHN0YXRlIGJlIHNldHRpbmcgdGhlIG5ldyBwcm9wZXJ0aWVzXG4gICAgcmVuZGVyZXIuc2V0UmVuZGVyVGFyZ2V0KGNhY2hlZFJlbmRlclRhcmdldCk7XG4gICAgcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5maWx0ZXJTdGFjayA9IHN0YWNrO1xuXG4gICAgdGhpcy5yZW5kZXJXZWJHTCAgICAgPSB0aGlzLl9yZW5kZXJDYWNoZWRXZWJHTDtcbiAgICB0aGlzLnVwZGF0ZVRyYW5zZm9ybSA9IHRoaXMuZGlzcGxheU9iamVjdFVwZGF0ZVRyYW5zZm9ybTtcbiAgICB0aGlzLmdldEJvdW5kcyAgICAgICA9IHRoaXMuX2dldENhY2hlZEJvdW5kcztcblxuXG4gICAgLy8gY3JlYXRlIG91ciBjYWNoZWQgc3ByaXRlXG4gICAgdGhpcy5fY2FjaGVkU3ByaXRlID0gbmV3IGNvcmUuU3ByaXRlKHJlbmRlclRleHR1cmUpO1xuICAgIHRoaXMuX2NhY2hlZFNwcml0ZS53b3JsZFRyYW5zZm9ybSA9IHRoaXMud29ybGRUcmFuc2Zvcm07XG4gICAgdGhpcy5fY2FjaGVkU3ByaXRlLmFuY2hvci54ID0gLSggYm91bmRzLnggLyBib3VuZHMud2lkdGggKTtcbiAgICB0aGlzLl9jYWNoZWRTcHJpdGUuYW5jaG9yLnkgPSAtKCBib3VuZHMueSAvIGJvdW5kcy5oZWlnaHQgKTtcblxuICAgIC8vIHJlc3RvcmUgdGhlIHRyYW5zZm9ybSBvZiB0aGUgY2FjaGVkIHNwcml0ZSB0byBhdm9pZCB0aGUgbmFzdHkgZmxpY2tlci4uXG4gICAgdGhpcy51cGRhdGVUcmFuc2Zvcm0oKTtcblxuICAgIC8vIG1hcCB0aGUgaGl0IHRlc3QuLlxuICAgIHRoaXMuY29udGFpbnNQb2ludCA9IHRoaXMuX2NhY2hlZFNwcml0ZS5jb250YWluc1BvaW50LmJpbmQodGhpcy5fY2FjaGVkU3ByaXRlKTtcbn07XG5cbi8qKlxuKiBSZW5kZXJzIGEgY2FjaGVkIHZlcnNpb24gb2YgdGhlIHNwcml0ZSB3aXRoIGNhbnZhc1xuKlxuKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuQ2FudmFzUmVuZGVyZXJ9IHRoZSBDYW52YXMgcmVuZGVyZXJcbiogQHByaXZhdGVcbiovXG5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS5fcmVuZGVyQ2FjaGVkQ2FudmFzID0gZnVuY3Rpb24gKHJlbmRlcmVyKVxue1xuICAgIGlmICghdGhpcy52aXNpYmxlIHx8IHRoaXMud29ybGRBbHBoYSA8PSAwIHx8ICF0aGlzLnJlbmRlcmFibGUpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5faW5pdENhY2hlZERpc3BsYXlPYmplY3RDYW52YXMoIHJlbmRlcmVyICk7XG5cbiAgICB0aGlzLl9jYWNoZWRTcHJpdGUud29ybGRBbHBoYSA9IHRoaXMud29ybGRBbHBoYTtcblxuICAgIHRoaXMuX2NhY2hlZFNwcml0ZS5yZW5kZXJDYW52YXMocmVuZGVyZXIpO1xufTtcblxuLy9UT0RPIHRoaXMgY2FuIGJlIHRoZSBzYW1lIGFzIHRoZSB3ZWJHTCB2ZXJpc29uLi4gd2lsbCBuZWVkIHRvIGRvIGEgbGl0dGxlIHR3ZWFraW5nIGZpcnN0IHRob3VnaC4uXG4vKipcbiogUHJlcGFyZXMgdGhlIENhbnZhcyByZW5kZXJlciB0byBjYWNoZSB0aGUgc3ByaXRlXG4qXG4qIEBwYXJhbSByZW5kZXJlciB7UElYSS5DYW52YXNSZW5kZXJlcn0gdGhlIENhbnZhcyByZW5kZXJlclxuKiBAcHJpdmF0ZVxuKi9cbkRpc3BsYXlPYmplY3QucHJvdG90eXBlLl9pbml0Q2FjaGVkRGlzcGxheU9iamVjdENhbnZhcyA9IGZ1bmN0aW9uIChyZW5kZXJlcilcbntcbiAgICBpZih0aGlzLl9jYWNoZWRTcHJpdGUpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy9nZXQgYm91bmRzIGFjdHVhbGx5IHRyYW5zZm9ybXMgdGhlIG9iamVjdCBmb3IgdXMgYWxyZWFkeSFcbiAgICB2YXIgYm91bmRzID0gdGhpcy5nZXRMb2NhbEJvdW5kcygpO1xuXG4gICAgdmFyIGNhY2hlZFJlbmRlclRhcmdldCA9IHJlbmRlcmVyLmNvbnRleHQ7XG5cbiAgICB2YXIgcmVuZGVyVGV4dHVyZSA9IG5ldyBjb3JlLlJlbmRlclRleHR1cmUocmVuZGVyZXIsIGJvdW5kcy53aWR0aCB8IDAsIGJvdW5kcy5oZWlnaHQgfCAwKTtcblxuICAgIC8vIG5lZWQgdG8gc2V0IC8vXG4gICAgdmFyIG0gPSBfdGVtcE1hdHJpeDtcblxuICAgIG0udHggPSAtYm91bmRzLng7XG4gICAgbS50eSA9IC1ib3VuZHMueTtcblxuICAgIC8vIHNldCBhbGwgcHJvcGVydGllcyB0byB0aGVyZSBvcmlnaW5hbCBzbyB3ZSBjYW4gcmVuZGVyIHRvIGEgdGV4dHVyZVxuICAgIHRoaXMucmVuZGVyQ2FudmFzID0gdGhpcy5fb3JpZ2luYWxSZW5kZXJDYW52YXM7XG5cbiAgICByZW5kZXJUZXh0dXJlLnJlbmRlcih0aGlzLCBtLCB0cnVlKTtcblxuICAgIC8vIG5vdyByZXN0b3JlIHRoZSBzdGF0ZSBiZSBzZXR0aW5nIHRoZSBuZXcgcHJvcGVydGllc1xuICAgIHJlbmRlcmVyLmNvbnRleHQgPSBjYWNoZWRSZW5kZXJUYXJnZXQ7XG5cbiAgICB0aGlzLnJlbmRlckNhbnZhcyA9IHRoaXMuX3JlbmRlckNhY2hlZENhbnZhcztcbiAgICB0aGlzLnVwZGF0ZVRyYW5zZm9ybSA9IHRoaXMuZGlzcGxheU9iamVjdFVwZGF0ZVRyYW5zZm9ybTtcbiAgICB0aGlzLmdldEJvdW5kcyAgPSB0aGlzLl9nZXRDYWNoZWRCb3VuZHM7XG5cblxuICAgIC8vIGNyZWF0ZSBvdXIgY2FjaGVkIHNwcml0ZVxuICAgIHRoaXMuX2NhY2hlZFNwcml0ZSA9IG5ldyBjb3JlLlNwcml0ZShyZW5kZXJUZXh0dXJlKTtcbiAgICB0aGlzLl9jYWNoZWRTcHJpdGUud29ybGRUcmFuc2Zvcm0gPSB0aGlzLndvcmxkVHJhbnNmb3JtO1xuICAgIHRoaXMuX2NhY2hlZFNwcml0ZS5hbmNob3IueCA9IC0oIGJvdW5kcy54IC8gYm91bmRzLndpZHRoICk7XG4gICAgdGhpcy5fY2FjaGVkU3ByaXRlLmFuY2hvci55ID0gLSggYm91bmRzLnkgLyBib3VuZHMuaGVpZ2h0ICk7XG5cbiAgICB0aGlzLnVwZGF0ZVRyYW5zZm9ybSgpO1xuXG4gICAgdGhpcy5jb250YWluc1BvaW50ID0gdGhpcy5fY2FjaGVkU3ByaXRlLmNvbnRhaW5zUG9pbnQuYmluZCh0aGlzLl9jYWNoZWRTcHJpdGUpO1xufTtcblxuLyoqXG4qIENhbGN1bGF0ZXMgdGhlIGJvdW5kcyBvZiB0aGUgY2FjaGVkIHNwcml0ZVxuKlxuKiBAcHJpdmF0ZVxuKi9cbkRpc3BsYXlPYmplY3QucHJvdG90eXBlLl9nZXRDYWNoZWRCb3VuZHMgPSBmdW5jdGlvbiAoKVxue1xuICAgIHRoaXMuX2NhY2hlZFNwcml0ZS5fY3VycmVudEJvdW5kcyA9IG51bGw7XG5cbiAgICByZXR1cm4gdGhpcy5fY2FjaGVkU3ByaXRlLmdldEJvdW5kcygpO1xufTtcblxuLyoqXG4qIERlc3Ryb3lzIHRoZSBjYWNoZWQgc3ByaXRlLlxuKlxuKiBAcHJpdmF0ZVxuKi9cbkRpc3BsYXlPYmplY3QucHJvdG90eXBlLl9kZXN0cm95Q2FjaGVkRGlzcGxheU9iamVjdCA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy5fY2FjaGVkU3ByaXRlLl90ZXh0dXJlLmRlc3Ryb3koKTtcbiAgICB0aGlzLl9jYWNoZWRTcHJpdGUgPSBudWxsO1xufTtcblxuRGlzcGxheU9iamVjdC5wcm90b3R5cGUuX2NhY2hlQXNCaXRtYXBEZXN0cm95ID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLmNhY2hlQXNCaXRtYXAgPSBmYWxzZTtcbiAgICB0aGlzLl9vcmlnaW5hbERlc3Ryb3koKTtcbn07XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uL2NvcmUnKTtcblxuLyoqXG4gKiBUaGUgaW5zdGFuY2UgbmFtZSBvZiB0aGUgb2JqZWN0LlxuICpcbiAqIEBtZW1iZXJvZiBQSVhJLkRpc3BsYXlPYmplY3QjXG4gKiBAbWVtYmVyIHtzdHJpbmd9XG4gKi9cbmNvcmUuRGlzcGxheU9iamVjdC5wcm90b3R5cGUubmFtZSA9IG51bGw7XG5cbi8qKlxuKiBSZXR1cm5zIHRoZSBkaXNwbGF5IG9iamVjdCBpbiB0aGUgY29udGFpbmVyXG4qXG4qIEBtZW1iZXJvZiBQSVhJLkNvbnRhaW5lciNcbiogQHBhcmFtIG5hbWUge3N0cmluZ30gaW5zdGFuY2UgbmFtZVxuKiBAcmV0dXJuIHtQSVhJLkRpc3BsYXlPYmplY3R9XG4qL1xuY29yZS5Db250YWluZXIucHJvdG90eXBlLmdldENoaWxkQnlOYW1lID0gZnVuY3Rpb24gKG5hbWUpXG57XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmNoaWxkcmVuLmxlbmd0aDsgaSsrKVxuICAgIHtcbiAgICAgICAgaWYgKHRoaXMuY2hpbGRyZW5baV0ubmFtZSA9PT0gbmFtZSlcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY2hpbGRyZW5baV07XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG59O1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi9jb3JlJyk7XG5cbi8qKlxuKiBSZXR1cm5zIHRoZSBnbG9iYWwgcG9zaXRpb24gb2YgdGhlIGRpc3BsYXlPYmplY3RcbipcbiogQG1lbWJlcm9mIFBJWEkuRGlzcGxheU9iamVjdCNcbiogQHBhcmFtIHBvaW50IHtQb2ludH0gdGhlIHBvaW50IHRvIHdyaXRlIHRoZSBnbG9iYWwgdmFsdWUgdG8uIElmIG51bGwgYSBuZXcgcG9pbnQgd2lsbCBiZSByZXR1cm5lZFxuKiBAcmV0dXJuIHtQb2ludH1cbiovXG5jb3JlLkRpc3BsYXlPYmplY3QucHJvdG90eXBlLmdldEdsb2JhbFBvc2l0aW9uID0gZnVuY3Rpb24gKHBvaW50KVxue1xuICAgIHBvaW50ID0gcG9pbnQgfHwgbmV3IGNvcmUuUG9pbnQoKTtcblxuICAgIGlmKHRoaXMucGFyZW50KVxuICAgIHtcbiAgICAgICAgdGhpcy5kaXNwbGF5T2JqZWN0VXBkYXRlVHJhbnNmb3JtKCk7XG5cbiAgICAgICAgcG9pbnQueCA9IHRoaXMud29ybGRUcmFuc2Zvcm0udHg7XG4gICAgICAgIHBvaW50LnkgPSB0aGlzLndvcmxkVHJhbnNmb3JtLnR5O1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICBwb2ludC54ID0gdGhpcy5wb3NpdGlvbi54O1xuICAgICAgICBwb2ludC55ID0gdGhpcy5wb3NpdGlvbi55O1xuICAgIH1cblxuICAgIHJldHVybiBwb2ludDtcbn07XG4iLCIvKipcbiAqIEBmaWxlICAgICAgICBNYWluIGV4cG9ydCBvZiB0aGUgUElYSSBleHRyYXMgbGlicmFyeVxuICogQGF1dGhvciAgICAgIE1hdCBHcm92ZXMgPG1hdEBnb29kYm95ZGlnaXRhbC5jb20+XG4gKiBAY29weXJpZ2h0ICAgMjAxMy0yMDE1IEdvb2RCb3lEaWdpdGFsXG4gKiBAbGljZW5zZSAgICAge0BsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9waXhpanMvcGl4aS5qcy9ibG9iL21hc3Rlci9MSUNFTlNFfE1JVCBMaWNlbnNlfVxuICovXG5cbnJlcXVpcmUoJy4vY2FjaGVBc0JpdG1hcCcpO1xucmVxdWlyZSgnLi9nZXRDaGlsZEJ5TmFtZScpO1xucmVxdWlyZSgnLi9nZXRHbG9iYWxQb3NpdGlvbicpO1xuXG4vKipcbiAqIEBuYW1lc3BhY2UgUElYSS5leHRyYXNcbiAqL1xubW9kdWxlLmV4cG9ydHMgPSB7XG4gICAgTW92aWVDbGlwOiAgICAgIHJlcXVpcmUoJy4vTW92aWVDbGlwJyksXG4gICAgVGlsaW5nU3ByaXRlOiAgIHJlcXVpcmUoJy4vVGlsaW5nU3ByaXRlJyksXG4gICAgQml0bWFwVGV4dDogICAgIHJlcXVpcmUoJy4vQml0bWFwVGV4dCcpXG59O1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi8uLi9jb3JlJyk7XG4vLyBAc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9zdWJzdGFjay9icmZzL2lzc3Vlcy8yNVxuXG5cbi8vIFRPRE8gKGNlbmdsZXIpIC0gVGhlIFkgaXMgZmxpcHBlZCBpbiB0aGlzIHNoYWRlciBmb3Igc29tZSByZWFzb24uXG5cbi8qKlxuICogQGF1dGhvciBWaWNvIEB2aWNvY290ZWFcbiAqIG9yaWdpbmFsIHNoYWRlciA6IGh0dHBzOi8vd3d3LnNoYWRlcnRveS5jb20vdmlldy9sc3NHRGogYnkgQG1vdkFYMTNoXG4gKi9cblxuLyoqXG4gKiBBbiBBU0NJSSBmaWx0ZXIuXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLkFic3RyYWN0RmlsdGVyXG4gKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzXG4gKi9cbmZ1bmN0aW9uIEFzY2lpRmlsdGVyKClcbntcbiAgICBjb3JlLkFic3RyYWN0RmlsdGVyLmNhbGwodGhpcyxcbiAgICAgICAgLy8gdmVydGV4IHNoYWRlclxuICAgICAgICBudWxsLFxuICAgICAgICAvLyBmcmFnbWVudCBzaGFkZXJcbiAgICAgICAgXCJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcXG5cXG51bmlmb3JtIHZlYzQgZGltZW5zaW9ucztcXG51bmlmb3JtIGZsb2F0IHBpeGVsU2l6ZTtcXG51bmlmb3JtIHNhbXBsZXIyRCB1U2FtcGxlcjtcXG5cXG5mbG9hdCBjaGFyYWN0ZXIoZmxvYXQgbiwgdmVjMiBwKVxcbntcXG4gICAgcCA9IGZsb29yKHAqdmVjMig0LjAsIC00LjApICsgMi41KTtcXG4gICAgaWYgKGNsYW1wKHAueCwgMC4wLCA0LjApID09IHAueCAmJiBjbGFtcChwLnksIDAuMCwgNC4wKSA9PSBwLnkpXFxuICAgIHtcXG4gICAgICAgIGlmIChpbnQobW9kKG4vZXhwMihwLnggKyA1LjAqcC55KSwgMi4wKSkgPT0gMSkgcmV0dXJuIDEuMDtcXG4gICAgfVxcbiAgICByZXR1cm4gMC4wO1xcbn1cXG5cXG52b2lkIG1haW4oKVxcbntcXG4gICAgdmVjMiB1diA9IGdsX0ZyYWdDb29yZC54eTtcXG5cXG4gICAgdmVjMyBjb2wgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIGZsb29yKCB1diAvIHBpeGVsU2l6ZSApICogcGl4ZWxTaXplIC8gZGltZW5zaW9ucy54eSkucmdiO1xcblxcbiAgICBmbG9hdCBncmF5ID0gKGNvbC5yICsgY29sLmcgKyBjb2wuYikgLyAzLjA7XFxuXFxuICAgIGZsb2F0IG4gPSAgNjU1MzYuMDsgICAgICAgICAgICAgLy8gLlxcbiAgICBpZiAoZ3JheSA+IDAuMikgbiA9IDY1NjAwLjA7ICAgIC8vIDpcXG4gICAgaWYgKGdyYXkgPiAwLjMpIG4gPSAzMzI3NzIuMDsgICAvLyAqXFxuICAgIGlmIChncmF5ID4gMC40KSBuID0gMTUyNTUwODYuMDsgLy8gb1xcbiAgICBpZiAoZ3JheSA+IDAuNSkgbiA9IDIzMzg1MTY0LjA7IC8vICZcXG4gICAgaWYgKGdyYXkgPiAwLjYpIG4gPSAxNTI1MjAxNC4wOyAvLyA4XFxuICAgIGlmIChncmF5ID4gMC43KSBuID0gMTMxOTk0NTIuMDsgLy8gQFxcbiAgICBpZiAoZ3JheSA+IDAuOCkgbiA9IDExNTEyODEwLjA7IC8vICNcXG5cXG4gICAgdmVjMiBwID0gbW9kKCB1diAvICggcGl4ZWxTaXplICogMC41ICksIDIuMCkgLSB2ZWMyKDEuMCk7XFxuICAgIGNvbCA9IGNvbCAqIGNoYXJhY3RlcihuLCBwKTtcXG5cXG4gICAgZ2xfRnJhZ0NvbG9yID0gdmVjNChjb2wsIDEuMCk7XFxufVxcblwiLFxuICAgICAgICAvLyBjdXN0b20gdW5pZm9ybXNcbiAgICAgICAge1xuICAgICAgICAgICAgZGltZW5zaW9uczogeyB0eXBlOiAnNGZ2JywgdmFsdWU6IG5ldyBGbG9hdDMyQXJyYXkoWzAsIDAsIDAsIDBdKSB9LFxuICAgICAgICAgICAgcGl4ZWxTaXplOiAgeyB0eXBlOiAnMWYnLCB2YWx1ZTogOCB9XG4gICAgICAgIH1cbiAgICApO1xufVxuXG5Bc2NpaUZpbHRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuQWJzdHJhY3RGaWx0ZXIucHJvdG90eXBlKTtcbkFzY2lpRmlsdGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IEFzY2lpRmlsdGVyO1xubW9kdWxlLmV4cG9ydHMgPSBBc2NpaUZpbHRlcjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoQXNjaWlGaWx0ZXIucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogVGhlIHBpeGVsIHNpemUgdXNlZCBieSB0aGUgZmlsdGVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuQXNjaWlGaWx0ZXIjXG4gICAgICovXG4gICAgc2l6ZToge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVuaWZvcm1zLnBpeGVsU2l6ZS52YWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudW5pZm9ybXMucGl4ZWxTaXplLnZhbHVlID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG59KTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vLi4vY29yZScpLFxuICAgIEJsdXJYRmlsdGVyID0gcmVxdWlyZSgnLi4vYmx1ci9CbHVyWEZpbHRlcicpLFxuICAgIEJsdXJZRmlsdGVyID0gcmVxdWlyZSgnLi4vYmx1ci9CbHVyWUZpbHRlcicpO1xuXG4vKipcbiAqIFRoZSBCbG9vbUZpbHRlciBhcHBsaWVzIGEgR2F1c3NpYW4gYmx1ciB0byBhbiBvYmplY3QuXG4gKiBUaGUgc3RyZW5ndGggb2YgdGhlIGJsdXIgY2FuIGJlIHNldCBmb3IgeC0gYW5kIHktYXhpcyBzZXBhcmF0ZWx5LlxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5BYnN0cmFjdEZpbHRlclxuICogQG1lbWJlcm9mIFBJWEkuZmlsdGVyc1xuICovXG5mdW5jdGlvbiBCbG9vbUZpbHRlcigpXG57XG4gICAgY29yZS5BYnN0cmFjdEZpbHRlci5jYWxsKHRoaXMpO1xuXG4gICAgdGhpcy5ibHVyWEZpbHRlciA9IG5ldyBCbHVyWEZpbHRlcigpO1xuICAgIHRoaXMuYmx1cllGaWx0ZXIgPSBuZXcgQmx1cllGaWx0ZXIoKTtcblxuICAgIHRoaXMuZGVmYXVsdEZpbHRlciA9IG5ldyBjb3JlLkFic3RyYWN0RmlsdGVyKCk7XG59XG5cbkJsb29tRmlsdGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoY29yZS5BYnN0cmFjdEZpbHRlci5wcm90b3R5cGUpO1xuQmxvb21GaWx0ZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gQmxvb21GaWx0ZXI7XG5tb2R1bGUuZXhwb3J0cyA9IEJsb29tRmlsdGVyO1xuXG5CbG9vbUZpbHRlci5wcm90b3R5cGUuYXBwbHlGaWx0ZXIgPSBmdW5jdGlvbiAocmVuZGVyZXIsIGlucHV0LCBvdXRwdXQpXG57XG4gICAgdmFyIHJlbmRlclRhcmdldCA9IHJlbmRlcmVyLmZpbHRlck1hbmFnZXIuZ2V0UmVuZGVyVGFyZ2V0KHRydWUpO1xuXG4gICAgLy9UT0RPIC0gY29weVRleFN1YkltYWdlMkQgY291bGQgYmUgdXNlZCBoZXJlP1xuICAgIHRoaXMuZGVmYXVsdEZpbHRlci5hcHBseUZpbHRlcihyZW5kZXJlciwgaW5wdXQsIG91dHB1dCk7XG5cbiAgICB0aGlzLmJsdXJYRmlsdGVyLmFwcGx5RmlsdGVyKHJlbmRlcmVyLCBpbnB1dCwgcmVuZGVyVGFyZ2V0KTtcblxuICAgIHJlbmRlcmVyLmJsZW5kTW9kZU1hbmFnZXIuc2V0QmxlbmRNb2RlKGNvcmUuQkxFTkRfTU9ERVMuU0NSRUVOKTtcblxuICAgIHRoaXMuYmx1cllGaWx0ZXIuYXBwbHlGaWx0ZXIocmVuZGVyZXIsIHJlbmRlclRhcmdldCwgb3V0cHV0KTtcblxuICAgIHJlbmRlcmVyLmJsZW5kTW9kZU1hbmFnZXIuc2V0QmxlbmRNb2RlKGNvcmUuQkxFTkRfTU9ERVMuTk9STUFMKTtcblxuICAgIHJlbmRlcmVyLmZpbHRlck1hbmFnZXIucmV0dXJuUmVuZGVyVGFyZ2V0KHJlbmRlclRhcmdldCk7XG59O1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhCbG9vbUZpbHRlci5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBzdHJlbmd0aCBvZiBib3RoIHRoZSBibHVyWCBhbmQgYmx1clkgcHJvcGVydGllcyBzaW11bHRhbmVvdXNseVxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJPZiBQSVhJLmZpbHRlcnMuQmxvb21GaWx0ZXIjXG4gICAgICogQGRlZmF1bHQgMlxuICAgICAqL1xuICAgIGJsdXI6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5ibHVyWEZpbHRlci5ibHVyO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5ibHVyWEZpbHRlci5ibHVyID0gdGhpcy5ibHVyWUZpbHRlci5ibHVyID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgc3RyZW5ndGggb2YgdGhlIGJsdXJYIHByb3BlcnR5XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlck9mIFBJWEkuZmlsdGVycy5CbG9vbUZpbHRlciNcbiAgICAgKiBAZGVmYXVsdCAyXG4gICAgICovXG4gICAgYmx1clg6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5ibHVyWEZpbHRlci5ibHVyO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5ibHVyWEZpbHRlci5ibHVyID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgc3RyZW5ndGggb2YgdGhlIGJsdXJZIHByb3BlcnR5XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlck9mIFBJWEkuZmlsdGVycy5CbG9vbUZpbHRlciNcbiAgICAgKiBAZGVmYXVsdCAyXG4gICAgICovXG4gICAgYmx1clk6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5ibHVyWUZpbHRlci5ibHVyO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5ibHVyWUZpbHRlci5ibHVyID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG59KTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vLi4vY29yZScpO1xuXG5cbi8qKlxuICogVGhlIEJsdXJEaXJGaWx0ZXIgYXBwbGllcyBhIEdhdXNzaWFuIGJsdXIgdG93YXJkIGEgZGlyZWN0aW9uIHRvIGFuIG9iamVjdC5cbiAqXG4gKiBAY2xhc3NcbiAqIEBwYXJhbSB7bnVtYmVyfSBkaXJYXG4gKiBAcGFyYW0ge251bWJlcn0gZGlyWVxuICogQGV4dGVuZHMgUElYSS5BYnN0cmFjdEZpbHRlclxuICogQG1lbWJlcm9mIFBJWEkuZmlsdGVyc1xuICovXG5mdW5jdGlvbiBCbHVyRGlyRmlsdGVyKGRpclgsIGRpclkpXG57XG4gICAgY29yZS5BYnN0cmFjdEZpbHRlci5jYWxsKHRoaXMsXG4gICAgICAgIC8vIHZlcnRleCBzaGFkZXJcbiAgICAgICAgXCJhdHRyaWJ1dGUgdmVjMiBhVmVydGV4UG9zaXRpb247XFxuYXR0cmlidXRlIHZlYzIgYVRleHR1cmVDb29yZDtcXG5hdHRyaWJ1dGUgdmVjNCBhQ29sb3I7XFxuXFxudW5pZm9ybSBmbG9hdCBzdHJlbmd0aDtcXG51bmlmb3JtIGZsb2F0IGRpclg7XFxudW5pZm9ybSBmbG9hdCBkaXJZO1xcbnVuaWZvcm0gbWF0MyBwcm9qZWN0aW9uTWF0cml4O1xcblxcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xcbnZhcnlpbmcgdmVjNCB2Q29sb3I7XFxudmFyeWluZyB2ZWMyIHZCbHVyVGV4Q29vcmRzWzNdO1xcblxcbnZvaWQgbWFpbih2b2lkKVxcbntcXG4gICAgZ2xfUG9zaXRpb24gPSB2ZWM0KChwcm9qZWN0aW9uTWF0cml4ICogdmVjMygoYVZlcnRleFBvc2l0aW9uKSwgMS4wKSkueHksIDAuMCwgMS4wKTtcXG4gICAgdlRleHR1cmVDb29yZCA9IGFUZXh0dXJlQ29vcmQ7XFxuXFxuICAgIHZCbHVyVGV4Q29vcmRzWzBdID0gYVRleHR1cmVDb29yZCArIHZlYzIoICgwLjAwNCAqIHN0cmVuZ3RoKSAqIGRpclgsICgwLjAwNCAqIHN0cmVuZ3RoKSAqIGRpclkgKTtcXG4gICAgdkJsdXJUZXhDb29yZHNbMV0gPSBhVGV4dHVyZUNvb3JkICsgdmVjMiggKDAuMDA4ICogc3RyZW5ndGgpICogZGlyWCwgKDAuMDA4ICogc3RyZW5ndGgpICogZGlyWSApO1xcbiAgICB2Qmx1clRleENvb3Jkc1syXSA9IGFUZXh0dXJlQ29vcmQgKyB2ZWMyKCAoMC4wMTIgKiBzdHJlbmd0aCkgKiBkaXJYLCAoMC4wMTIgKiBzdHJlbmd0aCkgKiBkaXJZICk7XFxuXFxuICAgIHZDb2xvciA9IHZlYzQoYUNvbG9yLnJnYiAqIGFDb2xvci5hLCBhQ29sb3IuYSk7XFxufVxcblwiLFxuICAgICAgICAvLyBmcmFnbWVudCBzaGFkZXJcbiAgICAgICAgXCJwcmVjaXNpb24gbG93cCBmbG9hdDtcXG5cXG52YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDtcXG52YXJ5aW5nIHZlYzIgdkJsdXJUZXhDb29yZHNbM107XFxudmFyeWluZyB2ZWM0IHZDb2xvcjtcXG5cXG51bmlmb3JtIHNhbXBsZXIyRCB1U2FtcGxlcjtcXG5cXG52b2lkIG1haW4odm9pZClcXG57XFxuICAgIGdsX0ZyYWdDb2xvciA9IHZlYzQoMC4wKTtcXG5cXG4gICAgZ2xfRnJhZ0NvbG9yICs9IHRleHR1cmUyRCh1U2FtcGxlciwgdlRleHR1cmVDb29yZCAgICAgKSAqIDAuMzk4OTQyMjgwNDAxNDMyNztcXG4gICAgZ2xfRnJhZ0NvbG9yICs9IHRleHR1cmUyRCh1U2FtcGxlciwgdkJsdXJUZXhDb29yZHNbIDBdKSAqIDAuMjQxOTcwNzI0NTE5MTQ1NDtcXG4gICAgZ2xfRnJhZ0NvbG9yICs9IHRleHR1cmUyRCh1U2FtcGxlciwgdkJsdXJUZXhDb29yZHNbIDFdKSAqIDAuMDUzOTkwOTY2NTEzMTg5ODU7XFxuICAgIGdsX0ZyYWdDb2xvciArPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZCbHVyVGV4Q29vcmRzWyAyXSkgKiAwLjAwNDQzMTg0ODQxMTkzODM0MTtcXG59XFxuXCIsXG4gICAgICAgIC8vIHNldCB0aGUgdW5pZm9ybXNcbiAgICAgICAge1xuICAgICAgICAgICAgc3RyZW5ndGg6IHsgdHlwZTogJzFmJywgdmFsdWU6IDEgfSxcbiAgICAgICAgICAgIGRpclg6IHsgdHlwZTogJzFmJywgdmFsdWU6IGRpclggfHwgMCB9LFxuICAgICAgICAgICAgZGlyWTogeyB0eXBlOiAnMWYnLCB2YWx1ZTogZGlyWSB8fCAwIH1cbiAgICAgICAgfVxuICAgICk7XG5cbiAgICB0aGlzLmRlZmF1bHRGaWx0ZXIgPSBuZXcgY29yZS5BYnN0cmFjdEZpbHRlcigpO1xuXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgbnVtYmVyIG9mIHBhc3NlcyBmb3IgYmx1ci4gTW9yZSBwYXNzZXMgbWVhbnMgaGlnaGVyIHF1YWlsaXR5IGJsdXJpbmcuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMVxuICAgICAqL1xuICAgIHRoaXMucGFzc2VzID0gMTtcblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIFggZGlyZWN0aW9uIG9mIHRoZSBibHVyXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMFxuICAgICAqL1xuICAgIHRoaXMuZGlyWCA9IGRpclggfHwgMDtcblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIFkgZGlyZWN0aW9uIG9mIHRoZSBibHVyXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMFxuICAgICAqL1xuICAgIHRoaXMuZGlyWSA9IGRpclkgfHwgMDtcblxuICAgIHRoaXMuc3RyZW5ndGggPSA0O1xufVxuXG5CbHVyRGlyRmlsdGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoY29yZS5BYnN0cmFjdEZpbHRlci5wcm90b3R5cGUpO1xuQmx1ckRpckZpbHRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBCbHVyRGlyRmlsdGVyO1xubW9kdWxlLmV4cG9ydHMgPSBCbHVyRGlyRmlsdGVyO1xuXG5CbHVyRGlyRmlsdGVyLnByb3RvdHlwZS5hcHBseUZpbHRlciA9IGZ1bmN0aW9uIChyZW5kZXJlciwgaW5wdXQsIG91dHB1dCwgY2xlYXIpIHtcblxuICAgIHZhciBzaGFkZXIgPSB0aGlzLmdldFNoYWRlcihyZW5kZXJlcik7XG5cbiAgICB0aGlzLnVuaWZvcm1zLnN0cmVuZ3RoLnZhbHVlID0gdGhpcy5zdHJlbmd0aCAvIDQgLyB0aGlzLnBhc3NlcyAqIChpbnB1dC5mcmFtZS53aWR0aCAvIGlucHV0LnNpemUud2lkdGgpO1xuXG4gICAgaWYgKHRoaXMucGFzc2VzID09PSAxKSB7XG4gICAgICAgIHJlbmRlcmVyLmZpbHRlck1hbmFnZXIuYXBwbHlGaWx0ZXIoc2hhZGVyLCBpbnB1dCwgb3V0cHV0LCBjbGVhcik7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgdmFyIHJlbmRlclRhcmdldCA9IHJlbmRlcmVyLmZpbHRlck1hbmFnZXIuZ2V0UmVuZGVyVGFyZ2V0KHRydWUpO1xuXG4gICAgICAgIHJlbmRlcmVyLmZpbHRlck1hbmFnZXIuYXBwbHlGaWx0ZXIoc2hhZGVyLCBpbnB1dCwgcmVuZGVyVGFyZ2V0LCBjbGVhcik7XG5cbiAgICAgICAgZm9yKHZhciBpID0gMDsgaSA8IHRoaXMucGFzc2VzLTI7IGkrKylcbiAgICAgICAge1xuICAgICAgICAgICAgLy90aGlzLnVuaWZvcm1zLnN0cmVuZ3RoLnZhbHVlID0gdGhpcy5zdHJlbmd0aCAvIDQgLyAodGhpcy5wYXNzZXMrKGkqMikpICogKGlucHV0LmZyYW1lLndpZHRoIC8gaW5wdXQuc2l6ZS53aWR0aCk7XG4gICAgICAgICAgICByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLmFwcGx5RmlsdGVyKHNoYWRlciwgcmVuZGVyVGFyZ2V0LCByZW5kZXJUYXJnZXQsIGNsZWFyKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJlbmRlcmVyLmZpbHRlck1hbmFnZXIuYXBwbHlGaWx0ZXIoc2hhZGVyLCByZW5kZXJUYXJnZXQsIG91dHB1dCwgY2xlYXIpO1xuXG4gICAgICAgIHJlbmRlcmVyLmZpbHRlck1hbmFnZXIucmV0dXJuUmVuZGVyVGFyZ2V0KHJlbmRlclRhcmdldCk7XG4gICAgfVxufTtcblxuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhCbHVyRGlyRmlsdGVyLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIHN0cmVuZ3RoIG9mIGJvdGggdGhlIGJsdXIuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5CbHVyRGlyRmlsdGVyI1xuICAgICAqIEBkZWZhdWx0IDJcbiAgICAgKi9cbiAgICBibHVyOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuc3RyZW5ndGg7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnBhZGRpbmcgPSB2YWx1ZSAqIDAuNTtcbiAgICAgICAgICAgIHRoaXMuc3RyZW5ndGggPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgWCBkaXJlY3Rpb24gb2YgdGhlIGJsdXIuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5CbHVyWUZpbHRlciNcbiAgICAgKiBAZGVmYXVsdCAwXG4gICAgICovXG4gICAgZGlyWDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmRpclg7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLmRpclgudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgWSBkaXJlY3Rpb24gb2YgdGhlIGJsdXIuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5CbHVyRGlyRmlsdGVyI1xuICAgICAqIEBkZWZhdWx0IDBcbiAgICAgKi9cbiAgICBkaXJZOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZGlyWTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudW5pZm9ybXMuZGlyWS52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfVxufSk7XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uLy4uL2NvcmUnKSxcbiAgICBCbHVyWEZpbHRlciA9IHJlcXVpcmUoJy4vQmx1clhGaWx0ZXInKSxcbiAgICBCbHVyWUZpbHRlciA9IHJlcXVpcmUoJy4vQmx1cllGaWx0ZXInKTtcblxuLyoqXG4gKiBUaGUgQmx1ckZpbHRlciBhcHBsaWVzIGEgR2F1c3NpYW4gYmx1ciB0byBhbiBvYmplY3QuXG4gKiBUaGUgc3RyZW5ndGggb2YgdGhlIGJsdXIgY2FuIGJlIHNldCBmb3IgeC0gYW5kIHktYXhpcyBzZXBhcmF0ZWx5LlxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5BYnN0cmFjdEZpbHRlclxuICogQG1lbWJlcm9mIFBJWEkuZmlsdGVyc1xuICovXG5mdW5jdGlvbiBCbHVyRmlsdGVyKClcbntcbiAgICBjb3JlLkFic3RyYWN0RmlsdGVyLmNhbGwodGhpcyk7XG5cbiAgICB0aGlzLmJsdXJYRmlsdGVyID0gbmV3IEJsdXJYRmlsdGVyKCk7XG4gICAgdGhpcy5ibHVyWUZpbHRlciA9IG5ldyBCbHVyWUZpbHRlcigpO1xufVxuXG5CbHVyRmlsdGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoY29yZS5BYnN0cmFjdEZpbHRlci5wcm90b3R5cGUpO1xuQmx1ckZpbHRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBCbHVyRmlsdGVyO1xubW9kdWxlLmV4cG9ydHMgPSBCbHVyRmlsdGVyO1xuXG5CbHVyRmlsdGVyLnByb3RvdHlwZS5hcHBseUZpbHRlciA9IGZ1bmN0aW9uIChyZW5kZXJlciwgaW5wdXQsIG91dHB1dClcbntcbiAgICB2YXIgcmVuZGVyVGFyZ2V0ID0gcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5nZXRSZW5kZXJUYXJnZXQodHJ1ZSk7XG5cbiAgICB0aGlzLmJsdXJYRmlsdGVyLmFwcGx5RmlsdGVyKHJlbmRlcmVyLCBpbnB1dCwgcmVuZGVyVGFyZ2V0KTtcbiAgICB0aGlzLmJsdXJZRmlsdGVyLmFwcGx5RmlsdGVyKHJlbmRlcmVyLCByZW5kZXJUYXJnZXQsIG91dHB1dCk7XG5cbiAgICByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLnJldHVyblJlbmRlclRhcmdldChyZW5kZXJUYXJnZXQpO1xufTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoQmx1ckZpbHRlci5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBzdHJlbmd0aCBvZiBib3RoIHRoZSBibHVyWCBhbmQgYmx1clkgcHJvcGVydGllcyBzaW11bHRhbmVvdXNseVxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJPZiBQSVhJLmZpbHRlcnMuQmx1ckZpbHRlciNcbiAgICAgKiBAZGVmYXVsdCAyXG4gICAgICovXG4gICAgYmx1cjoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmJsdXJYRmlsdGVyLmJsdXI7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnBhZGRpbmcgPSBNYXRoLmFicyh2YWx1ZSkgKiAwLjU7XG4gICAgICAgICAgICB0aGlzLmJsdXJYRmlsdGVyLmJsdXIgPSB0aGlzLmJsdXJZRmlsdGVyLmJsdXIgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBudW1iZXIgb2YgcGFzc2VzIGZvciBibHVyLiBNb3JlIHBhc3NlcyBtZWFucyBoaWdoZXIgcXVhaWxpdHkgYmx1cmluZy5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLkJsdXJZRmlsdGVyI1xuICAgICAqIEBkZWZhdWx0IDFcbiAgICAgKi9cbiAgICBwYXNzZXM6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gIHRoaXMuYmx1clhGaWx0ZXIucGFzc2VzO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5ibHVyWEZpbHRlci5wYXNzZXMgPSB0aGlzLmJsdXJZRmlsdGVyLnBhc3NlcyA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIHN0cmVuZ3RoIG9mIHRoZSBibHVyWCBwcm9wZXJ0eVxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJPZiBQSVhJLmZpbHRlcnMuQmx1ckZpbHRlciNcbiAgICAgKiBAZGVmYXVsdCAyXG4gICAgICovXG4gICAgYmx1clg6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5ibHVyWEZpbHRlci5ibHVyO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5ibHVyWEZpbHRlci5ibHVyID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgc3RyZW5ndGggb2YgdGhlIGJsdXJZIHByb3BlcnR5XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlck9mIFBJWEkuZmlsdGVycy5CbHVyRmlsdGVyI1xuICAgICAqIEBkZWZhdWx0IDJcbiAgICAgKi9cbiAgICBibHVyWToge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmJsdXJZRmlsdGVyLmJsdXI7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmJsdXJZRmlsdGVyLmJsdXIgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi8uLi9jb3JlJyk7XG4vLyBAc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9zdWJzdGFjay9icmZzL2lzc3Vlcy8yNVxuXG5cbi8qKlxuICogVGhlIEJsdXJYRmlsdGVyIGFwcGxpZXMgYSBob3Jpem9udGFsIEdhdXNzaWFuIGJsdXIgdG8gYW4gb2JqZWN0LlxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5BYnN0cmFjdEZpbHRlclxuICogQG1lbWJlcm9mIFBJWEkuZmlsdGVyc1xuICovXG5mdW5jdGlvbiBCbHVyWEZpbHRlcigpXG57XG4gICAgY29yZS5BYnN0cmFjdEZpbHRlci5jYWxsKHRoaXMsXG4gICAgICAgIC8vIHZlcnRleCBzaGFkZXJcbiAgICAgICAgXCJhdHRyaWJ1dGUgdmVjMiBhVmVydGV4UG9zaXRpb247XFxuYXR0cmlidXRlIHZlYzIgYVRleHR1cmVDb29yZDtcXG5hdHRyaWJ1dGUgdmVjNCBhQ29sb3I7XFxuXFxudW5pZm9ybSBmbG9hdCBzdHJlbmd0aDtcXG51bmlmb3JtIG1hdDMgcHJvamVjdGlvbk1hdHJpeDtcXG5cXG52YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDtcXG52YXJ5aW5nIHZlYzQgdkNvbG9yO1xcbnZhcnlpbmcgdmVjMiB2Qmx1clRleENvb3Jkc1s2XTtcXG5cXG52b2lkIG1haW4odm9pZClcXG57XFxuICAgIGdsX1Bvc2l0aW9uID0gdmVjNCgocHJvamVjdGlvbk1hdHJpeCAqIHZlYzMoKGFWZXJ0ZXhQb3NpdGlvbiksIDEuMCkpLnh5LCAwLjAsIDEuMCk7XFxuICAgIHZUZXh0dXJlQ29vcmQgPSBhVGV4dHVyZUNvb3JkO1xcblxcbiAgICB2Qmx1clRleENvb3Jkc1sgMF0gPSBhVGV4dHVyZUNvb3JkICsgdmVjMigtMC4wMTIgKiBzdHJlbmd0aCwgMC4wKTtcXG4gICAgdkJsdXJUZXhDb29yZHNbIDFdID0gYVRleHR1cmVDb29yZCArIHZlYzIoLTAuMDA4ICogc3RyZW5ndGgsIDAuMCk7XFxuICAgIHZCbHVyVGV4Q29vcmRzWyAyXSA9IGFUZXh0dXJlQ29vcmQgKyB2ZWMyKC0wLjAwNCAqIHN0cmVuZ3RoLCAwLjApO1xcbiAgICB2Qmx1clRleENvb3Jkc1sgM10gPSBhVGV4dHVyZUNvb3JkICsgdmVjMiggMC4wMDQgKiBzdHJlbmd0aCwgMC4wKTtcXG4gICAgdkJsdXJUZXhDb29yZHNbIDRdID0gYVRleHR1cmVDb29yZCArIHZlYzIoIDAuMDA4ICogc3RyZW5ndGgsIDAuMCk7XFxuICAgIHZCbHVyVGV4Q29vcmRzWyA1XSA9IGFUZXh0dXJlQ29vcmQgKyB2ZWMyKCAwLjAxMiAqIHN0cmVuZ3RoLCAwLjApO1xcblxcbiAgICB2Q29sb3IgPSB2ZWM0KGFDb2xvci5yZ2IgKiBhQ29sb3IuYSwgYUNvbG9yLmEpO1xcbn1cXG5cIixcbiAgICAgICAgLy8gZnJhZ21lbnQgc2hhZGVyXG4gICAgICAgIFwicHJlY2lzaW9uIGxvd3AgZmxvYXQ7XFxuXFxudmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7XFxudmFyeWluZyB2ZWMyIHZCbHVyVGV4Q29vcmRzWzZdO1xcbnZhcnlpbmcgdmVjNCB2Q29sb3I7XFxuXFxudW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXI7XFxuXFxudm9pZCBtYWluKHZvaWQpXFxue1xcbiAgICBnbF9GcmFnQ29sb3IgPSB2ZWM0KDAuMCk7XFxuXFxuICAgIGdsX0ZyYWdDb2xvciArPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZCbHVyVGV4Q29vcmRzWyAwXSkqMC4wMDQ0MzE4NDg0MTE5MzgzNDE7XFxuICAgIGdsX0ZyYWdDb2xvciArPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZCbHVyVGV4Q29vcmRzWyAxXSkqMC4wNTM5OTA5NjY1MTMxODk4NTtcXG4gICAgZ2xfRnJhZ0NvbG9yICs9IHRleHR1cmUyRCh1U2FtcGxlciwgdkJsdXJUZXhDb29yZHNbIDJdKSowLjI0MTk3MDcyNDUxOTE0NTQ7XFxuICAgIGdsX0ZyYWdDb2xvciArPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZUZXh0dXJlQ29vcmQgICAgICkqMC4zOTg5NDIyODA0MDE0MzI3O1xcbiAgICBnbF9GcmFnQ29sb3IgKz0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2Qmx1clRleENvb3Jkc1sgM10pKjAuMjQxOTcwNzI0NTE5MTQ1NDtcXG4gICAgZ2xfRnJhZ0NvbG9yICs9IHRleHR1cmUyRCh1U2FtcGxlciwgdkJsdXJUZXhDb29yZHNbIDRdKSowLjA1Mzk5MDk2NjUxMzE4OTg1O1xcbiAgICBnbF9GcmFnQ29sb3IgKz0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2Qmx1clRleENvb3Jkc1sgNV0pKjAuMDA0NDMxODQ4NDExOTM4MzQxO1xcbn1cXG5cIixcbiAgICAgICAgLy8gc2V0IHRoZSB1bmlmb3Jtc1xuICAgICAgICB7XG4gICAgICAgICAgICBzdHJlbmd0aDogeyB0eXBlOiAnMWYnLCB2YWx1ZTogMSB9XG4gICAgICAgIH1cbiAgICApO1xuXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgbnVtYmVyIG9mIHBhc3NlcyBmb3IgYmx1ci4gTW9yZSBwYXNzZXMgbWVhbnMgaGlnaGVyIHF1YWlsaXR5IGJsdXJpbmcuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMVxuICAgICAqL1xuICAgIHRoaXMucGFzc2VzID0gMTtcblxuICAgIHRoaXMuc3RyZW5ndGggPSA0O1xufVxuXG5CbHVyWEZpbHRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuQWJzdHJhY3RGaWx0ZXIucHJvdG90eXBlKTtcbkJsdXJYRmlsdGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IEJsdXJYRmlsdGVyO1xubW9kdWxlLmV4cG9ydHMgPSBCbHVyWEZpbHRlcjtcblxuQmx1clhGaWx0ZXIucHJvdG90eXBlLmFwcGx5RmlsdGVyID0gZnVuY3Rpb24gKHJlbmRlcmVyLCBpbnB1dCwgb3V0cHV0LCBjbGVhcilcbntcbiAgICB2YXIgc2hhZGVyID0gdGhpcy5nZXRTaGFkZXIocmVuZGVyZXIpO1xuXG4gICAgdGhpcy51bmlmb3Jtcy5zdHJlbmd0aC52YWx1ZSA9IHRoaXMuc3RyZW5ndGggLyA0IC8gdGhpcy5wYXNzZXMgKiAoaW5wdXQuZnJhbWUud2lkdGggLyBpbnB1dC5zaXplLndpZHRoKTtcblxuICAgIGlmKHRoaXMucGFzc2VzID09PSAxKVxuICAgIHtcbiAgICAgICAgcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5hcHBseUZpbHRlcihzaGFkZXIsIGlucHV0LCBvdXRwdXQsIGNsZWFyKTtcbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgdmFyIHJlbmRlclRhcmdldCA9IHJlbmRlcmVyLmZpbHRlck1hbmFnZXIuZ2V0UmVuZGVyVGFyZ2V0KHRydWUpO1xuICAgICAgICB2YXIgZmxpcCA9IGlucHV0O1xuICAgICAgICB2YXIgZmxvcCA9IHJlbmRlclRhcmdldDtcblxuICAgICAgICBmb3IodmFyIGkgPSAwOyBpIDwgdGhpcy5wYXNzZXMtMTsgaSsrKVxuICAgICAgICB7XG4gICAgICAgICAgICByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLmFwcGx5RmlsdGVyKHNoYWRlciwgZmxpcCwgZmxvcCwgdHJ1ZSk7XG5cbiAgICAgICAgICAgdmFyIHRlbXAgPSBmbG9wO1xuICAgICAgICAgICBmbG9wID0gZmxpcDtcbiAgICAgICAgICAgZmxpcCA9IHRlbXA7XG4gICAgICAgIH1cblxuICAgICAgICByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLmFwcGx5RmlsdGVyKHNoYWRlciwgZmxpcCwgb3V0cHV0LCBjbGVhcik7XG5cbiAgICAgICAgcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5yZXR1cm5SZW5kZXJUYXJnZXQocmVuZGVyVGFyZ2V0KTtcbiAgICB9XG59O1xuXG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKEJsdXJYRmlsdGVyLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIHN0cmVuZ3RoIG9mIGJvdGggdGhlIGJsdXIuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5CbHVyWEZpbHRlciNcbiAgICAgKiBAZGVmYXVsdCAyXG4gICAgICovXG4gICAgYmx1cjoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiAgdGhpcy5zdHJlbmd0aDtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMucGFkZGluZyA9ICBNYXRoLmFicyh2YWx1ZSkgKiAwLjU7XG4gICAgICAgICAgICB0aGlzLnN0cmVuZ3RoID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG59KTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vLi4vY29yZScpO1xuLy8gQHNlZSBodHRwczovL2dpdGh1Yi5jb20vc3Vic3RhY2svYnJmcy9pc3N1ZXMvMjVcblxuXG4vKipcbiAqIFRoZSBCbHVyWUZpbHRlciBhcHBsaWVzIGEgaG9yaXpvbnRhbCBHYXVzc2lhbiBibHVyIHRvIGFuIG9iamVjdC5cbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQWJzdHJhY3RGaWx0ZXJcbiAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnNcbiAqL1xuZnVuY3Rpb24gQmx1cllGaWx0ZXIoKVxue1xuICAgIGNvcmUuQWJzdHJhY3RGaWx0ZXIuY2FsbCh0aGlzLFxuICAgICAgICAvLyB2ZXJ0ZXggc2hhZGVyXG4gICAgICAgIFwiYXR0cmlidXRlIHZlYzIgYVZlcnRleFBvc2l0aW9uO1xcbmF0dHJpYnV0ZSB2ZWMyIGFUZXh0dXJlQ29vcmQ7XFxuYXR0cmlidXRlIHZlYzQgYUNvbG9yO1xcblxcbnVuaWZvcm0gZmxvYXQgc3RyZW5ndGg7XFxudW5pZm9ybSBtYXQzIHByb2plY3Rpb25NYXRyaXg7XFxuXFxudmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7XFxudmFyeWluZyB2ZWM0IHZDb2xvcjtcXG52YXJ5aW5nIHZlYzIgdkJsdXJUZXhDb29yZHNbNl07XFxuXFxudm9pZCBtYWluKHZvaWQpXFxue1xcbiAgICBnbF9Qb3NpdGlvbiA9IHZlYzQoKHByb2plY3Rpb25NYXRyaXggKiB2ZWMzKChhVmVydGV4UG9zaXRpb24pLCAxLjApKS54eSwgMC4wLCAxLjApO1xcbiAgICB2VGV4dHVyZUNvb3JkID0gYVRleHR1cmVDb29yZDtcXG5cXG4gICAgdkJsdXJUZXhDb29yZHNbIDBdID0gYVRleHR1cmVDb29yZCArIHZlYzIoMC4wLCAtMC4wMTIgKiBzdHJlbmd0aCk7XFxuICAgIHZCbHVyVGV4Q29vcmRzWyAxXSA9IGFUZXh0dXJlQ29vcmQgKyB2ZWMyKDAuMCwgLTAuMDA4ICogc3RyZW5ndGgpO1xcbiAgICB2Qmx1clRleENvb3Jkc1sgMl0gPSBhVGV4dHVyZUNvb3JkICsgdmVjMigwLjAsIC0wLjAwNCAqIHN0cmVuZ3RoKTtcXG4gICAgdkJsdXJUZXhDb29yZHNbIDNdID0gYVRleHR1cmVDb29yZCArIHZlYzIoMC4wLCAgMC4wMDQgKiBzdHJlbmd0aCk7XFxuICAgIHZCbHVyVGV4Q29vcmRzWyA0XSA9IGFUZXh0dXJlQ29vcmQgKyB2ZWMyKDAuMCwgIDAuMDA4ICogc3RyZW5ndGgpO1xcbiAgICB2Qmx1clRleENvb3Jkc1sgNV0gPSBhVGV4dHVyZUNvb3JkICsgdmVjMigwLjAsICAwLjAxMiAqIHN0cmVuZ3RoKTtcXG5cXG4gICB2Q29sb3IgPSB2ZWM0KGFDb2xvci5yZ2IgKiBhQ29sb3IuYSwgYUNvbG9yLmEpO1xcbn1cXG5cIixcbiAgICAgICAgLy8gZnJhZ21lbnQgc2hhZGVyXG4gICAgICAgIFwicHJlY2lzaW9uIGxvd3AgZmxvYXQ7XFxuXFxudmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7XFxudmFyeWluZyB2ZWMyIHZCbHVyVGV4Q29vcmRzWzZdO1xcbnZhcnlpbmcgdmVjNCB2Q29sb3I7XFxuXFxudW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXI7XFxuXFxudm9pZCBtYWluKHZvaWQpXFxue1xcbiAgICBnbF9GcmFnQ29sb3IgPSB2ZWM0KDAuMCk7XFxuXFxuICAgIGdsX0ZyYWdDb2xvciArPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZCbHVyVGV4Q29vcmRzWyAwXSkqMC4wMDQ0MzE4NDg0MTE5MzgzNDE7XFxuICAgIGdsX0ZyYWdDb2xvciArPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZCbHVyVGV4Q29vcmRzWyAxXSkqMC4wNTM5OTA5NjY1MTMxODk4NTtcXG4gICAgZ2xfRnJhZ0NvbG9yICs9IHRleHR1cmUyRCh1U2FtcGxlciwgdkJsdXJUZXhDb29yZHNbIDJdKSowLjI0MTk3MDcyNDUxOTE0NTQ7XFxuICAgIGdsX0ZyYWdDb2xvciArPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZUZXh0dXJlQ29vcmQgICAgICkqMC4zOTg5NDIyODA0MDE0MzI3O1xcbiAgICBnbF9GcmFnQ29sb3IgKz0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2Qmx1clRleENvb3Jkc1sgM10pKjAuMjQxOTcwNzI0NTE5MTQ1NDtcXG4gICAgZ2xfRnJhZ0NvbG9yICs9IHRleHR1cmUyRCh1U2FtcGxlciwgdkJsdXJUZXhDb29yZHNbIDRdKSowLjA1Mzk5MDk2NjUxMzE4OTg1O1xcbiAgICBnbF9GcmFnQ29sb3IgKz0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2Qmx1clRleENvb3Jkc1sgNV0pKjAuMDA0NDMxODQ4NDExOTM4MzQxO1xcbn1cXG5cIixcbiAgICAgICAgLy8gc2V0IHRoZSB1bmlmb3Jtc1xuICAgICAgICB7XG4gICAgICAgICAgICBzdHJlbmd0aDogeyB0eXBlOiAnMWYnLCB2YWx1ZTogMSB9XG4gICAgICAgIH1cbiAgICApO1xuXG4gICAgdGhpcy5wYXNzZXMgPSAxO1xuICAgIHRoaXMuc3RyZW5ndGggPSA0O1xufVxuXG5CbHVyWUZpbHRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuQWJzdHJhY3RGaWx0ZXIucHJvdG90eXBlKTtcbkJsdXJZRmlsdGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IEJsdXJZRmlsdGVyO1xubW9kdWxlLmV4cG9ydHMgPSBCbHVyWUZpbHRlcjtcblxuQmx1cllGaWx0ZXIucHJvdG90eXBlLmFwcGx5RmlsdGVyID0gZnVuY3Rpb24gKHJlbmRlcmVyLCBpbnB1dCwgb3V0cHV0LCBjbGVhcilcbntcbiAgICB2YXIgc2hhZGVyID0gdGhpcy5nZXRTaGFkZXIocmVuZGVyZXIpO1xuXG4gICAgdGhpcy51bmlmb3Jtcy5zdHJlbmd0aC52YWx1ZSA9IE1hdGguYWJzKHRoaXMuc3RyZW5ndGgpIC8gNCAvIHRoaXMucGFzc2VzICogKGlucHV0LmZyYW1lLmhlaWdodCAvIGlucHV0LnNpemUuaGVpZ2h0KTtcblxuICAgIGlmKHRoaXMucGFzc2VzID09PSAxKVxuICAgIHtcbiAgICAgICAgcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5hcHBseUZpbHRlcihzaGFkZXIsIGlucHV0LCBvdXRwdXQsIGNsZWFyKTtcbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgdmFyIHJlbmRlclRhcmdldCA9IHJlbmRlcmVyLmZpbHRlck1hbmFnZXIuZ2V0UmVuZGVyVGFyZ2V0KHRydWUpO1xuICAgICAgICB2YXIgZmxpcCA9IGlucHV0O1xuICAgICAgICB2YXIgZmxvcCA9IHJlbmRlclRhcmdldDtcblxuICAgICAgICBmb3IodmFyIGkgPSAwOyBpIDwgdGhpcy5wYXNzZXMtMTsgaSsrKVxuICAgICAgICB7XG4gICAgICAgICAgICByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLmFwcGx5RmlsdGVyKHNoYWRlciwgZmxpcCwgZmxvcCwgdHJ1ZSk7XG5cbiAgICAgICAgICAgdmFyIHRlbXAgPSBmbG9wO1xuICAgICAgICAgICBmbG9wID0gZmxpcDtcbiAgICAgICAgICAgZmxpcCA9IHRlbXA7XG4gICAgICAgIH1cblxuICAgICAgICByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLmFwcGx5RmlsdGVyKHNoYWRlciwgZmxpcCwgb3V0cHV0LCBjbGVhcik7XG5cbiAgICAgICAgcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5yZXR1cm5SZW5kZXJUYXJnZXQocmVuZGVyVGFyZ2V0KTtcbiAgICB9XG59O1xuXG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKEJsdXJZRmlsdGVyLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIHN0cmVuZ3RoIG9mIGJvdGggdGhlIGJsdXIuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5CbHVyWUZpbHRlciNcbiAgICAgKiBAZGVmYXVsdCAyXG4gICAgICovXG4gICAgYmx1cjoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiAgdGhpcy5zdHJlbmd0aDtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMucGFkZGluZyA9IE1hdGguYWJzKHZhbHVlKSAqIDAuNTtcbiAgICAgICAgICAgIHRoaXMuc3RyZW5ndGggPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi8uLi9jb3JlJyk7XG4vLyBAc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9zdWJzdGFjay9icmZzL2lzc3Vlcy8yNVxuXG5cbi8qKlxuICogQSBTbWFydCBCbHVyIEZpbHRlci5cbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQWJzdHJhY3RGaWx0ZXJcbiAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnNcbiAqL1xuZnVuY3Rpb24gU21hcnRCbHVyRmlsdGVyKClcbntcbiAgICBjb3JlLkFic3RyYWN0RmlsdGVyLmNhbGwodGhpcyxcbiAgICAgICAgLy8gdmVydGV4IHNoYWRlclxuICAgICAgICBudWxsLFxuICAgICAgICAvLyBmcmFnbWVudCBzaGFkZXJcbiAgICAgICAgXCJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcXG5cXG52YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDtcXG5cXG51bmlmb3JtIHNhbXBsZXIyRCB1U2FtcGxlcjtcXG51bmlmb3JtIHZlYzIgZGVsdGE7XFxuXFxuZmxvYXQgcmFuZG9tKHZlYzMgc2NhbGUsIGZsb2F0IHNlZWQpXFxue1xcbiAgICByZXR1cm4gZnJhY3Qoc2luKGRvdChnbF9GcmFnQ29vcmQueHl6ICsgc2VlZCwgc2NhbGUpKSAqIDQzNzU4LjU0NTMgKyBzZWVkKTtcXG59XFxuXFxudm9pZCBtYWluKHZvaWQpXFxue1xcbiAgICB2ZWM0IGNvbG9yID0gdmVjNCgwLjApO1xcbiAgICBmbG9hdCB0b3RhbCA9IDAuMDtcXG5cXG4gICAgZmxvYXQgb2Zmc2V0ID0gcmFuZG9tKHZlYzMoMTIuOTg5OCwgNzguMjMzLCAxNTEuNzE4MiksIDAuMCk7XFxuXFxuICAgIGZvciAoZmxvYXQgdCA9IC0zMC4wOyB0IDw9IDMwLjA7IHQrKylcXG4gICAge1xcbiAgICAgICAgZmxvYXQgcGVyY2VudCA9ICh0ICsgb2Zmc2V0IC0gMC41KSAvIDMwLjA7XFxuICAgICAgICBmbG9hdCB3ZWlnaHQgPSAxLjAgLSBhYnMocGVyY2VudCk7XFxuICAgICAgICB2ZWM0IHNhbXBsZSA9IHRleHR1cmUyRCh1U2FtcGxlciwgdlRleHR1cmVDb29yZCArIGRlbHRhICogcGVyY2VudCk7XFxuICAgICAgICBzYW1wbGUucmdiICo9IHNhbXBsZS5hO1xcbiAgICAgICAgY29sb3IgKz0gc2FtcGxlICogd2VpZ2h0O1xcbiAgICAgICAgdG90YWwgKz0gd2VpZ2h0O1xcbiAgICB9XFxuXFxuICAgIGdsX0ZyYWdDb2xvciA9IGNvbG9yIC8gdG90YWw7XFxuICAgIGdsX0ZyYWdDb2xvci5yZ2IgLz0gZ2xfRnJhZ0NvbG9yLmEgKyAwLjAwMDAxO1xcbn1cXG5cIixcbiAgICAgICAgLy8gdW5pZm9ybXNcbiAgICAgICAge1xuICAgICAgICAgIGRlbHRhOiB7IHR5cGU6ICd2MicsIHZhbHVlOiB7IHg6IDAuMSwgeTogMC4wIH0gfVxuICAgICAgICB9XG4gICAgKTtcbn1cblxuU21hcnRCbHVyRmlsdGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoY29yZS5BYnN0cmFjdEZpbHRlci5wcm90b3R5cGUpO1xuU21hcnRCbHVyRmlsdGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFNtYXJ0Qmx1ckZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gU21hcnRCbHVyRmlsdGVyO1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi8uLi9jb3JlJyk7XG4vLyBAc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9zdWJzdGFjay9icmZzL2lzc3Vlcy8yNVxuXG5cbi8qKlxuICogVGhlIENvbG9yTWF0cml4RmlsdGVyIGNsYXNzIGxldHMgeW91IGFwcGx5IGEgNXg0IG1hdHJpeCB0cmFuc2Zvcm1hdGlvbiBvbiB0aGUgUkdCQVxuICogY29sb3IgYW5kIGFscGhhIHZhbHVlcyBvZiBldmVyeSBwaXhlbCBvbiB5b3VyIGRpc3BsYXlPYmplY3QgdG8gcHJvZHVjZSBhIHJlc3VsdFxuICogd2l0aCBhIG5ldyBzZXQgb2YgUkdCQSBjb2xvciBhbmQgYWxwaGEgdmFsdWVzLiBJdCdzIHByZXR0eSBwb3dlcmZ1bCFcbiAqXG4gKiBgYGBqc1xuICogIHZhciBjb2xvck1hdHJpeCA9IG5ldyBQSVhJLkNvbG9yTWF0cml4RmlsdGVyKCk7XG4gKiAgY29udGFpbmVyLmZpbHRlcnMgPSBbY29sb3JNYXRyaXhdO1xuICogIGNvbG9yTWF0cml4LmNvbnRyYXN0KDIpO1xuICogYGBgXG4gKiBAYXV0aG9yIENsw6ltZW50IENoZW5lYmF1bHQgPGNsZW1lbnRAZ29vZGJveWRpZ2l0YWwuY29tPlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLkFic3RyYWN0RmlsdGVyXG4gKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzXG4gKi9cbmZ1bmN0aW9uIENvbG9yTWF0cml4RmlsdGVyKClcbntcbiAgICBjb3JlLkFic3RyYWN0RmlsdGVyLmNhbGwodGhpcyxcbiAgICAgICAgLy8gdmVydGV4IHNoYWRlclxuICAgICAgICBudWxsLFxuICAgICAgICAvLyBmcmFnbWVudCBzaGFkZXJcbiAgICAgICAgXCJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcXG5cXG52YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDtcXG51bmlmb3JtIHNhbXBsZXIyRCB1U2FtcGxlcjtcXG51bmlmb3JtIGZsb2F0IG1bMjVdO1xcblxcbnZvaWQgbWFpbih2b2lkKVxcbntcXG5cXG4gICAgdmVjNCBjID0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2VGV4dHVyZUNvb3JkKTtcXG5cXG4gICAgZ2xfRnJhZ0NvbG9yLnIgPSAobVswXSAqIGMucik7XFxuICAgICAgICBnbF9GcmFnQ29sb3IuciArPSAobVsxXSAqIGMuZyk7XFxuICAgICAgICBnbF9GcmFnQ29sb3IuciArPSAobVsyXSAqIGMuYik7XFxuICAgICAgICBnbF9GcmFnQ29sb3IuciArPSAobVszXSAqIGMuYSk7XFxuICAgICAgICBnbF9GcmFnQ29sb3IuciArPSBtWzRdO1xcblxcbiAgICBnbF9GcmFnQ29sb3IuZyA9IChtWzVdICogYy5yKTtcXG4gICAgICAgIGdsX0ZyYWdDb2xvci5nICs9IChtWzZdICogYy5nKTtcXG4gICAgICAgIGdsX0ZyYWdDb2xvci5nICs9IChtWzddICogYy5iKTtcXG4gICAgICAgIGdsX0ZyYWdDb2xvci5nICs9IChtWzhdICogYy5hKTtcXG4gICAgICAgIGdsX0ZyYWdDb2xvci5nICs9IG1bOV07XFxuXFxuICAgICBnbF9GcmFnQ29sb3IuYiA9IChtWzEwXSAqIGMucik7XFxuICAgICAgICBnbF9GcmFnQ29sb3IuYiArPSAobVsxMV0gKiBjLmcpO1xcbiAgICAgICAgZ2xfRnJhZ0NvbG9yLmIgKz0gKG1bMTJdICogYy5iKTtcXG4gICAgICAgIGdsX0ZyYWdDb2xvci5iICs9IChtWzEzXSAqIGMuYSk7XFxuICAgICAgICBnbF9GcmFnQ29sb3IuYiArPSBtWzE0XTtcXG5cXG4gICAgIGdsX0ZyYWdDb2xvci5hID0gKG1bMTVdICogYy5yKTtcXG4gICAgICAgIGdsX0ZyYWdDb2xvci5hICs9IChtWzE2XSAqIGMuZyk7XFxuICAgICAgICBnbF9GcmFnQ29sb3IuYSArPSAobVsxN10gKiBjLmIpO1xcbiAgICAgICAgZ2xfRnJhZ0NvbG9yLmEgKz0gKG1bMThdICogYy5hKTtcXG4gICAgICAgIGdsX0ZyYWdDb2xvci5hICs9IG1bMTldO1xcblxcbn1cXG5cIixcbiAgICAgICAgLy8gY3VzdG9tIHVuaWZvcm1zXG4gICAgICAgIHtcbiAgICAgICAgICAgIG06IHtcbiAgICAgICAgICAgICAgICB0eXBlOiAnMWZ2JywgdmFsdWU6IFtcbiAgICAgICAgICAgICAgICAgICAgMSwgMCwgMCwgMCwgMCxcbiAgICAgICAgICAgICAgICAgICAgMCwgMSwgMCwgMCwgMCxcbiAgICAgICAgICAgICAgICAgICAgMCwgMCwgMSwgMCwgMCxcbiAgICAgICAgICAgICAgICAgICAgMCwgMCwgMCwgMSwgMFxuICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICk7XG59XG5cbkNvbG9yTWF0cml4RmlsdGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoY29yZS5BYnN0cmFjdEZpbHRlci5wcm90b3R5cGUpO1xuQ29sb3JNYXRyaXhGaWx0ZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gQ29sb3JNYXRyaXhGaWx0ZXI7XG5tb2R1bGUuZXhwb3J0cyA9IENvbG9yTWF0cml4RmlsdGVyO1xuXG5cbi8qKlxuICogVHJhbnNmb3JtcyBjdXJyZW50IG1hdHJpeCBhbmQgc2V0IHRoZSBuZXcgb25lXG4gKlxuICogQHBhcmFtIG1hdHJpeCB7bnVtYmVyW119IChtYXQgNXg0KVxuICogQHBhcmFtIG11bHRpcGx5IHtib29sZWFufSBpZiB0cnVlLCBjdXJyZW50IG1hdHJpeCBhbmQgbWF0cml4IGFyZSBtdWx0aXBsaWVkLiBJZiBmYWxzZSwganVzdCBzZXQgdGhlIGN1cnJlbnQgbWF0cml4IHdpdGggQHBhcmFtIG1hdHJpeFxuICovXG5Db2xvck1hdHJpeEZpbHRlci5wcm90b3R5cGUuX2xvYWRNYXRyaXggPSBmdW5jdGlvbiAobWF0cml4LCBtdWx0aXBseSlcbntcbiAgICBtdWx0aXBseSA9ICEhbXVsdGlwbHk7XG5cbiAgICB2YXIgbmV3TWF0cml4ID0gbWF0cml4O1xuXG4gICAgaWYgKG11bHRpcGx5KSB7XG4gICAgICAgIHRoaXMuX211bHRpcGx5KG5ld01hdHJpeCwgdGhpcy51bmlmb3Jtcy5tLnZhbHVlLCBtYXRyaXgpO1xuICAgICAgICBuZXdNYXRyaXggPSB0aGlzLl9jb2xvck1hdHJpeChuZXdNYXRyaXgpO1xuICAgIH1cblxuICAgIC8vIHNldCB0aGUgbmV3IG1hdHJpeFxuICAgIHRoaXMudW5pZm9ybXMubS52YWx1ZSA9IG5ld01hdHJpeDtcbn07XG5cbi8qKlxuICogTXVsdGlwbGllcyB0d28gbWF0NSdzXG4gKlxuICogQHBhcmFtIG91dCB7bnVtYmVyW119IChtYXQgNXg0KSB0aGUgcmVjZWl2aW5nIG1hdHJpeFxuICogQHBhcmFtIGEge251bWJlcltdfSAobWF0IDV4NCkgdGhlIGZpcnN0IG9wZXJhbmRcbiAqIEBwYXJhbSBiIHtudW1iZXJbXX0gKG1hdCA1eDQpIHRoZSBzZWNvbmQgb3BlcmFuZFxuICogQHJldHVybnMgb3V0IHtudW1iZXJbXX0gKG1hdCA1eDQpXG4gKi9cbkNvbG9yTWF0cml4RmlsdGVyLnByb3RvdHlwZS5fbXVsdGlwbHkgPSBmdW5jdGlvbiAob3V0LCBhLCBiKVxue1xuXG4gICAgLy8gUmVkIENoYW5uZWxcbiAgICBvdXRbMF0gPSAoYVswXSAqIGJbMF0pICsgKGFbMV0gKiBiWzVdKSArIChhWzJdICogYlsxMF0pICsgKGFbM10gKiBiWzE1XSk7XG4gICAgb3V0WzFdID0gKGFbMF0gKiBiWzFdKSArIChhWzFdICogYls2XSkgKyAoYVsyXSAqIGJbMTFdKSArIChhWzNdICogYlsxNl0pO1xuICAgIG91dFsyXSA9IChhWzBdICogYlsyXSkgKyAoYVsxXSAqIGJbN10pICsgKGFbMl0gKiBiWzEyXSkgKyAoYVszXSAqIGJbMTddKTtcbiAgICBvdXRbM10gPSAoYVswXSAqIGJbM10pICsgKGFbMV0gKiBiWzhdKSArIChhWzJdICogYlsxM10pICsgKGFbM10gKiBiWzE4XSk7XG4gICAgb3V0WzRdID0gKGFbMF0gKiBiWzRdKSArIChhWzFdICogYls5XSkgKyAoYVsyXSAqIGJbMTRdKSArIChhWzNdICogYlsxOV0pO1xuXG4gICAgLy8gR3JlZW4gQ2hhbm5lbFxuICAgIG91dFs1XSA9IChhWzVdICogYlswXSkgKyAoYVs2XSAqIGJbNV0pICsgKGFbN10gKiBiWzEwXSkgKyAoYVs4XSAqIGJbMTVdKTtcbiAgICBvdXRbNl0gPSAoYVs1XSAqIGJbMV0pICsgKGFbNl0gKiBiWzZdKSArIChhWzddICogYlsxMV0pICsgKGFbOF0gKiBiWzE2XSk7XG4gICAgb3V0WzddID0gKGFbNV0gKiBiWzJdKSArIChhWzZdICogYls3XSkgKyAoYVs3XSAqIGJbMTJdKSArIChhWzhdICogYlsxN10pO1xuICAgIG91dFs4XSA9IChhWzVdICogYlszXSkgKyAoYVs2XSAqIGJbOF0pICsgKGFbN10gKiBiWzEzXSkgKyAoYVs4XSAqIGJbMThdKTtcbiAgICBvdXRbOV0gPSAoYVs1XSAqIGJbNF0pICsgKGFbNl0gKiBiWzldKSArIChhWzddICogYlsxNF0pICsgKGFbOF0gKiBiWzE5XSk7XG5cbiAgICAvLyBCbHVlIENoYW5uZWxcbiAgICBvdXRbMTBdID0gKGFbMTBdICogYlswXSkgKyAoYVsxMV0gKiBiWzVdKSArIChhWzEyXSAqIGJbMTBdKSArIChhWzEzXSAqIGJbMTVdKTtcbiAgICBvdXRbMTFdID0gKGFbMTBdICogYlsxXSkgKyAoYVsxMV0gKiBiWzZdKSArIChhWzEyXSAqIGJbMTFdKSArIChhWzEzXSAqIGJbMTZdKTtcbiAgICBvdXRbMTJdID0gKGFbMTBdICogYlsyXSkgKyAoYVsxMV0gKiBiWzddKSArIChhWzEyXSAqIGJbMTJdKSArIChhWzEzXSAqIGJbMTddKTtcbiAgICBvdXRbMTNdID0gKGFbMTBdICogYlszXSkgKyAoYVsxMV0gKiBiWzhdKSArIChhWzEyXSAqIGJbMTNdKSArIChhWzEzXSAqIGJbMThdKTtcbiAgICBvdXRbMTRdID0gKGFbMTBdICogYls0XSkgKyAoYVsxMV0gKiBiWzldKSArIChhWzEyXSAqIGJbMTRdKSArIChhWzEzXSAqIGJbMTldKTtcblxuICAgIC8vIEFscGhhIENoYW5uZWxcbiAgICBvdXRbMTVdID0gKGFbMTVdICogYlswXSkgKyAoYVsxNl0gKiBiWzVdKSArIChhWzE3XSAqIGJbMTBdKSArIChhWzE4XSAqIGJbMTVdKTtcbiAgICBvdXRbMTZdID0gKGFbMTVdICogYlsxXSkgKyAoYVsxNl0gKiBiWzZdKSArIChhWzE3XSAqIGJbMTFdKSArIChhWzE4XSAqIGJbMTZdKTtcbiAgICBvdXRbMTddID0gKGFbMTVdICogYlsyXSkgKyAoYVsxNl0gKiBiWzddKSArIChhWzE3XSAqIGJbMTJdKSArIChhWzE4XSAqIGJbMTddKTtcbiAgICBvdXRbMThdID0gKGFbMTVdICogYlszXSkgKyAoYVsxNl0gKiBiWzhdKSArIChhWzE3XSAqIGJbMTNdKSArIChhWzE4XSAqIGJbMThdKTtcbiAgICBvdXRbMTldID0gKGFbMTVdICogYls0XSkgKyAoYVsxNl0gKiBiWzldKSArIChhWzE3XSAqIGJbMTRdKSArIChhWzE4XSAqIGJbMTldKTtcblxuICAgIHJldHVybiBvdXQ7XG59O1xuXG4vKipcbiAqIENyZWF0ZSBhIEZsb2F0MzIgQXJyYXkgYW5kIG5vcm1hbGl6ZSB0aGUgb2Zmc2V0IGNvbXBvbmVudCB0byAwLTFcbiAqXG4gKiBAcGFyYW0gbWF0cml4IHtudW1iZXJbXX0gKG1hdCA1eDQpXG4gKiBAcmV0dXJuIG0ge251bWJlcltdfSAobWF0IDV4NCkgd2l0aCBhbGwgdmFsdWVzIGJldHdlZW4gMC0xXG4gKi9cbkNvbG9yTWF0cml4RmlsdGVyLnByb3RvdHlwZS5fY29sb3JNYXRyaXggPSBmdW5jdGlvbiAobWF0cml4KVxue1xuICAgIC8vIENyZWF0ZSBhIEZsb2F0MzIgQXJyYXkgYW5kIG5vcm1hbGl6ZSB0aGUgb2Zmc2V0IGNvbXBvbmVudCB0byAwLTFcbiAgICB2YXIgbSA9IG5ldyBGbG9hdDMyQXJyYXkobWF0cml4KTtcbiAgICBtWzRdIC89IDI1NTtcbiAgICBtWzldIC89IDI1NTtcbiAgICBtWzE0XSAvPSAyNTU7XG4gICAgbVsxOV0gLz0gMjU1O1xuXG4gICAgcmV0dXJuIG07XG59O1xuXG4vKipcbiAqIEFkanVzdHMgYnJpZ2h0bmVzc1xuICpcbiAqIEBwYXJhbSBiIHtudW1iZXJ9IHZhbHVlIG9mIHRoZSBicmlndGhuZXNzICgwIGlzIGJsYWNrKVxuICogQHBhcmFtIG11bHRpcGx5IHtib29sZWFufSByZWZlciB0byAuX2xvYWRNYXRyaXgoKSBtZXRob2RcbiAqL1xuQ29sb3JNYXRyaXhGaWx0ZXIucHJvdG90eXBlLmJyaWdodG5lc3MgPSBmdW5jdGlvbiAoYiwgbXVsdGlwbHkpXG57XG4gICAgdmFyIG1hdHJpeCA9IFtcbiAgICAgICAgYiwgMCwgMCwgMCwgMCxcbiAgICAgICAgMCwgYiwgMCwgMCwgMCxcbiAgICAgICAgMCwgMCwgYiwgMCwgMCxcbiAgICAgICAgMCwgMCwgMCwgMSwgMFxuICAgIF07XG5cbiAgICB0aGlzLl9sb2FkTWF0cml4KG1hdHJpeCwgbXVsdGlwbHkpO1xufTtcblxuLyoqXG4gKiBTZXQgdGhlIG1hdHJpY2VzIGluIGdyZXkgc2NhbGVzXG4gKlxuICogQHBhcmFtIHNjYWxlIHtudW1iZXJ9IHZhbHVlIG9mIHRoZSBncmV5ICgwIGlzIGJsYWNrKVxuICogQHBhcmFtIG11bHRpcGx5IHtib29sZWFufSByZWZlciB0byAuX2xvYWRNYXRyaXgoKSBtZXRob2RcbiAqL1xuQ29sb3JNYXRyaXhGaWx0ZXIucHJvdG90eXBlLmdyZXlzY2FsZSA9IGZ1bmN0aW9uIChzY2FsZSwgbXVsdGlwbHkpXG57XG4gICAgdmFyIG1hdHJpeCA9IFtcbiAgICAgICAgc2NhbGUsIHNjYWxlLCBzY2FsZSwgMCwgMCxcbiAgICAgICAgc2NhbGUsIHNjYWxlLCBzY2FsZSwgMCwgMCxcbiAgICAgICAgc2NhbGUsIHNjYWxlLCBzY2FsZSwgMCwgMCxcbiAgICAgICAgMCwgMCwgMCwgMSwgMFxuICAgIF07XG5cbiAgICB0aGlzLl9sb2FkTWF0cml4KG1hdHJpeCwgbXVsdGlwbHkpO1xufTtcbi8vQW1lcmljYW5pemVkIGFsaWFzXG5Db2xvck1hdHJpeEZpbHRlci5wcm90b3R5cGUuZ3JheXNjYWxlID0gQ29sb3JNYXRyaXhGaWx0ZXIucHJvdG90eXBlLmdyZXlzY2FsZTtcblxuLyoqXG4gKiBTZXQgdGhlIGJsYWNrIGFuZCB3aGl0ZSBtYXRyaWNlXG4gKiBNdWx0aXBseSB0aGUgY3VycmVudCBtYXRyaXhcbiAqXG4gKiBAcGFyYW0gbXVsdGlwbHkge2Jvb2xlYW59IHJlZmVyIHRvIC5fbG9hZE1hdHJpeCgpIG1ldGhvZFxuICovXG5Db2xvck1hdHJpeEZpbHRlci5wcm90b3R5cGUuYmxhY2tBbmRXaGl0ZSA9IGZ1bmN0aW9uIChtdWx0aXBseSlcbntcbiAgICB2YXIgbWF0cml4ID0gW1xuICAgICAgICAwLjMsIDAuNiwgMC4xLCAwLCAwLFxuICAgICAgICAwLjMsIDAuNiwgMC4xLCAwLCAwLFxuICAgICAgICAwLjMsIDAuNiwgMC4xLCAwLCAwLFxuICAgICAgICAwLCAwLCAwLCAxLCAwXG4gICAgXTtcblxuICAgIHRoaXMuX2xvYWRNYXRyaXgobWF0cml4LCBtdWx0aXBseSk7XG59O1xuXG4vKipcbiAqIFNldCB0aGUgaHVlIHByb3BlcnR5IG9mIHRoZSBjb2xvclxuICpcbiAqIEBwYXJhbSByb3RhdGlvbiB7bnVtYmVyfSBpbiBkZWdyZWVzXG4gKiBAcGFyYW0gbXVsdGlwbHkge2Jvb2xlYW59IHJlZmVyIHRvIC5fbG9hZE1hdHJpeCgpIG1ldGhvZFxuICovXG5Db2xvck1hdHJpeEZpbHRlci5wcm90b3R5cGUuaHVlID0gZnVuY3Rpb24gKHJvdGF0aW9uLCBtdWx0aXBseSlcbntcbiAgICByb3RhdGlvbiA9IChyb3RhdGlvbiB8fCAwKSAvIDE4MCAqIE1hdGguUEk7XG4gICAgdmFyIGNvcyA9IE1hdGguY29zKHJvdGF0aW9uKSxcbiAgICAgICAgc2luID0gTWF0aC5zaW4ocm90YXRpb24pO1xuXG4gICAgLy8gbHVtaW5hbmNlUmVkLCBsdW1pbmFuY2VHcmVlbiwgbHVtaW5hbmNlQmx1ZVxuICAgIHZhciBsdW1SID0gMC4yMTMsIC8vIG9yIDAuMzA4NlxuICAgICAgICBsdW1HID0gMC43MTUsIC8vIG9yIDAuNjA5NFxuICAgICAgICBsdW1CID0gMC4wNzI7IC8vIG9yIDAuMDgyMFxuXG4gICAgdmFyIG1hdHJpeCA9IFtcbiAgICAgICAgbHVtUiArIGNvcyAqICgxIC0gbHVtUikgKyBzaW4gKiAoLWx1bVIpLCBsdW1HICsgY29zICogKC1sdW1HKSArIHNpbiAqICgtbHVtRyksIGx1bUIgKyBjb3MgKiAoLWx1bUIpICsgc2luICogKDEgLSBsdW1CKSwgMCwgMCxcbiAgICAgICAgbHVtUiArIGNvcyAqICgtbHVtUikgKyBzaW4gKiAoMC4xNDMpLCBsdW1HICsgY29zICogKDEgLSBsdW1HKSArIHNpbiAqICgwLjE0MCksIGx1bUIgKyBjb3MgKiAoLWx1bUIpICsgc2luICogKC0wLjI4MyksIDAsIDAsXG4gICAgICAgIGx1bVIgKyBjb3MgKiAoLWx1bVIpICsgc2luICogKC0oMSAtIGx1bVIpKSwgbHVtRyArIGNvcyAqICgtbHVtRykgKyBzaW4gKiAobHVtRyksIGx1bUIgKyBjb3MgKiAoMSAtIGx1bUIpICsgc2luICogKGx1bUIpLCAwLCAwLFxuICAgICAgICAwLCAwLCAwLCAxLCAwXG4gICAgXTtcblxuICAgIHRoaXMuX2xvYWRNYXRyaXgobWF0cml4LCBtdWx0aXBseSk7XG59O1xuXG5cbi8qKlxuICogU2V0IHRoZSBjb250cmFzdCBtYXRyaXgsIGluY3JlYXNlIHRoZSBzZXBhcmF0aW9uIGJldHdlZW4gZGFyayBhbmQgYnJpZ2h0XG4gKiBJbmNyZWFzZSBjb250cmFzdCA6IHNoYWRvd3MgZGFya2VyIGFuZCBoaWdobGlnaHRzIGJyaWdodGVyXG4gKiBEZWNyZWFzZSBjb250cmFzdCA6IGJyaW5nIHRoZSBzaGFkb3dzIHVwIGFuZCB0aGUgaGlnaGxpZ2h0cyBkb3duXG4gKlxuICogQHBhcmFtIGFtb3VudCB7bnVtYmVyfSB2YWx1ZSBvZiB0aGUgY29udHJhc3RcbiAqIEBwYXJhbSBtdWx0aXBseSB7Ym9vbGVhbn0gcmVmZXIgdG8gLl9sb2FkTWF0cml4KCkgbWV0aG9kXG4gKi9cbkNvbG9yTWF0cml4RmlsdGVyLnByb3RvdHlwZS5jb250cmFzdCA9IGZ1bmN0aW9uIChhbW91bnQsIG11bHRpcGx5KVxue1xuICAgIHZhciB2ID0gKGFtb3VudCB8fCAwKSArIDE7XG4gICAgdmFyIG8gPSAtMTI4ICogKHYgLSAxKTtcblxuICAgIHZhciBtYXRyaXggPSBbXG4gICAgICAgIHYsIDAsIDAsIDAsIG8sXG4gICAgICAgIDAsIHYsIDAsIDAsIG8sXG4gICAgICAgIDAsIDAsIHYsIDAsIG8sXG4gICAgICAgIDAsIDAsIDAsIDEsIDBcbiAgICBdO1xuXG4gICAgdGhpcy5fbG9hZE1hdHJpeChtYXRyaXgsIG11bHRpcGx5KTtcbn07XG5cbi8qKlxuICogU2V0IHRoZSBzYXR1cmF0aW9uIG1hdHJpeCwgaW5jcmVhc2UgdGhlIHNlcGFyYXRpb24gYmV0d2VlbiBjb2xvcnNcbiAqIEluY3JlYXNlIHNhdHVyYXRpb24gOiBpbmNyZWFzZSBjb250cmFzdCwgYnJpZ2h0bmVzcywgYW5kIHNoYXJwbmVzc1xuICpcbiAqIEBwYXJhbSBhbW91bnQge251bWJlcn1cbiAqIEBwYXJhbSBtdWx0aXBseSB7Ym9vbGVhbn0gcmVmZXIgdG8gLl9sb2FkTWF0cml4KCkgbWV0aG9kXG4gKi9cbkNvbG9yTWF0cml4RmlsdGVyLnByb3RvdHlwZS5zYXR1cmF0ZSA9IGZ1bmN0aW9uIChhbW91bnQsIG11bHRpcGx5KVxue1xuICAgIHZhciB4ID0gKGFtb3VudCB8fCAwKSAqIDIgLyAzICsgMTtcbiAgICB2YXIgeSA9ICgoeCAtIDEpICogLTAuNSk7XG5cbiAgICB2YXIgbWF0cml4ID0gW1xuICAgICAgICB4LCB5LCB5LCAwLCAwLFxuICAgICAgICB5LCB4LCB5LCAwLCAwLFxuICAgICAgICB5LCB5LCB4LCAwLCAwLFxuICAgICAgICAwLCAwLCAwLCAxLCAwXG4gICAgXTtcblxuICAgIHRoaXMuX2xvYWRNYXRyaXgobWF0cml4LCBtdWx0aXBseSk7XG59O1xuXG4vKipcbiAqIERlc2F0dXJhdGUgaW1hZ2UgKHJlbW92ZSBjb2xvcilcbiAqXG4gKiBDYWxsIHRoZSBzYXR1cmF0ZSBmdW5jdGlvblxuICpcbiAqIEBwYXJhbSBtdWx0aXBseSB7Ym9vbGVhbn0gcmVmZXIgdG8gLl9sb2FkTWF0cml4KCkgbWV0aG9kXG4gKi9cbkNvbG9yTWF0cml4RmlsdGVyLnByb3RvdHlwZS5kZXNhdHVyYXRlID0gZnVuY3Rpb24gKG11bHRpcGx5KSAvLyBqc2hpbnQgdW51c2VkOmZhbHNlXG57XG4gICAgdGhpcy5zYXR1cmF0ZSgtMSk7XG59O1xuXG4vKipcbiAqIE5lZ2F0aXZlIGltYWdlIChpbnZlcnNlIG9mIGNsYXNzaWMgcmdiIG1hdHJpeClcbiAqXG4gKiBAcGFyYW0gbXVsdGlwbHkge2Jvb2xlYW59IHJlZmVyIHRvIC5fbG9hZE1hdHJpeCgpIG1ldGhvZFxuICovXG5Db2xvck1hdHJpeEZpbHRlci5wcm90b3R5cGUubmVnYXRpdmUgPSBmdW5jdGlvbiAobXVsdGlwbHkpXG57XG4gICAgdmFyIG1hdHJpeCA9IFtcbiAgICAgICAgMCwgMSwgMSwgMCwgMCxcbiAgICAgICAgMSwgMCwgMSwgMCwgMCxcbiAgICAgICAgMSwgMSwgMCwgMCwgMCxcbiAgICAgICAgMCwgMCwgMCwgMSwgMFxuICAgIF07XG5cbiAgICB0aGlzLl9sb2FkTWF0cml4KG1hdHJpeCwgbXVsdGlwbHkpO1xufTtcblxuLyoqXG4gKiBTZXBpYSBpbWFnZVxuICpcbiAqIEBwYXJhbSBtdWx0aXBseSB7Ym9vbGVhbn0gcmVmZXIgdG8gLl9sb2FkTWF0cml4KCkgbWV0aG9kXG4gKi9cbkNvbG9yTWF0cml4RmlsdGVyLnByb3RvdHlwZS5zZXBpYSA9IGZ1bmN0aW9uIChtdWx0aXBseSlcbntcbiAgICB2YXIgbWF0cml4ID0gW1xuICAgICAgICAwLjM5MywgMC43Njg5OTk5LCAwLjE4ODk5OTk5LCAwLCAwLFxuICAgICAgICAwLjM0OSwgMC42ODU5OTk5LCAwLjE2Nzk5OTk5LCAwLCAwLFxuICAgICAgICAwLjI3MiwgMC41MzM5OTk5LCAwLjEzMDk5OTk5LCAwLCAwLFxuICAgICAgICAwLCAwLCAwLCAxLCAwXG4gICAgXTtcblxuICAgIHRoaXMuX2xvYWRNYXRyaXgobWF0cml4LCBtdWx0aXBseSk7XG59O1xuXG4vKipcbiAqIENvbG9yIG1vdGlvbiBwaWN0dXJlIHByb2Nlc3MgaW52ZW50ZWQgaW4gMTkxNiAodGhhbmtzIERvbWluaWMgU3phYmxld3NraSlcbiAqXG4gKiBAcGFyYW0gbXVsdGlwbHkge2Jvb2xlYW59IHJlZmVyIHRvIC5fbG9hZE1hdHJpeCgpIG1ldGhvZFxuICovXG5Db2xvck1hdHJpeEZpbHRlci5wcm90b3R5cGUudGVjaG5pY29sb3IgPSBmdW5jdGlvbiAobXVsdGlwbHkpXG57XG4gICAgdmFyIG1hdHJpeCA9IFtcbiAgICAgICAgMS45MTI1Mjc3ODkxNDU2MDgzLCAtMC44NTQ1MzQ0OTc2OTUxNjQ1LCAtMC4wOTE1NTUwODQ4Mjc1NTU4NSwgMCwgMTEuNzkzNjAzNDM0Mzc3MzM3LFxuICAgICAgICAtMC4zMDg3ODMzMzg1OTI4MDk3LCAxLjc2NTg5MDg1NTU0NTg0MjgsIC0wLjEwNjAxNzQzMDc0NzIyMjQ1LCAwLCAtNzAuMzUyMDUxNjE0NjEzOTgsXG4gICAgICAgIC0wLjIzMTEwMzM3NzU0ODYxNiwgLTAuNzUwMTg5OTE5NzQ0MDIxMiwgMS44NDc1OTc4MTYxMDgxODksIDAsIDMwLjk1MDk0MDg2OTQ5MTEzOCxcbiAgICAgICAgMCwgMCwgMCwgMSwgMFxuICAgIF07XG5cbiAgICB0aGlzLl9sb2FkTWF0cml4KG1hdHJpeCwgbXVsdGlwbHkpO1xufTtcblxuLyoqXG4gKiBQb2xhcm9pZCBmaWx0ZXJcbiAqXG4gKiBAcGFyYW0gbXVsdGlwbHkge2Jvb2xlYW59IHJlZmVyIHRvIC5fbG9hZE1hdHJpeCgpIG1ldGhvZFxuICovXG5Db2xvck1hdHJpeEZpbHRlci5wcm90b3R5cGUucG9sYXJvaWQgPSBmdW5jdGlvbiAobXVsdGlwbHkpXG57XG4gICAgdmFyIG1hdHJpeCA9IFtcbiAgICAgICAgMS40MzgsIC0wLjA2MiwgLTAuMDYyLCAwLCAwLFxuICAgICAgICAtMC4xMjIsIDEuMzc4LCAtMC4xMjIsIDAsIDAsXG4gICAgICAgIC0wLjAxNiwgLTAuMDE2LCAxLjQ4MywgMCwgMCxcbiAgICAgICAgMCwgMCwgMCwgMSwgMFxuICAgIF07XG5cbiAgICB0aGlzLl9sb2FkTWF0cml4KG1hdHJpeCwgbXVsdGlwbHkpO1xufTtcblxuLyoqXG4gKiBGaWx0ZXIgd2hvIHRyYW5zZm9ybXMgOiBSZWQgLT4gQmx1ZSBhbmQgQmx1ZSAtPiBSZWRcbiAqXG4gKiBAcGFyYW0gbXVsdGlwbHkge2Jvb2xlYW59IHJlZmVyIHRvIC5fbG9hZE1hdHJpeCgpIG1ldGhvZFxuICovXG5Db2xvck1hdHJpeEZpbHRlci5wcm90b3R5cGUudG9CR1IgPSBmdW5jdGlvbiAobXVsdGlwbHkpXG57XG4gICAgdmFyIG1hdHJpeCA9IFtcbiAgICAgICAgMCwgMCwgMSwgMCwgMCxcbiAgICAgICAgMCwgMSwgMCwgMCwgMCxcbiAgICAgICAgMSwgMCwgMCwgMCwgMCxcbiAgICAgICAgMCwgMCwgMCwgMSwgMFxuICAgIF07XG5cbiAgICB0aGlzLl9sb2FkTWF0cml4KG1hdHJpeCwgbXVsdGlwbHkpO1xufTtcblxuLyoqXG4gKiBDb2xvciByZXZlcnNhbCBmaWxtIGludHJvZHVjZWQgYnkgRWFzdG1hbiBLb2RhayBpbiAxOTM1LiAodGhhbmtzIERvbWluaWMgU3phYmxld3NraSlcbiAqXG4gKiBAcGFyYW0gbXVsdGlwbHkge2Jvb2xlYW59IHJlZmVyIHRvIC5fbG9hZE1hdHJpeCgpIG1ldGhvZFxuICovXG5Db2xvck1hdHJpeEZpbHRlci5wcm90b3R5cGUua29kYWNocm9tZSA9IGZ1bmN0aW9uIChtdWx0aXBseSlcbntcbiAgICB2YXIgbWF0cml4ID0gW1xuICAgICAgICAxLjEyODU1ODIzOTY1OTM1MjUsIC0wLjM5NjczODIyODM2MDEzNDgsIC0wLjAzOTkyNTU5MTcyOTIxNzkzLCAwLCA2My43Mjk1ODc2MjE5NjUwMixcbiAgICAgICAgLTAuMTY0MDQzMzk5NjIyNDQ2MTYsIDEuMDgzNTI1MTU2NjI5MTMwNCwgLTAuMDU0OTg4MDUxMTU2MzMxMzIsIDAsIDI0LjczMjQwNzg5NjcwNjIwMyxcbiAgICAgICAgLTAuMTY3ODYwMTA3MDYxNTU3NjMsIC0wLjU2MDM0MTYyNzc2OTUyNDgsIDEuNjAxNDg1MDc2MTk2NDk0MywgMCwgMzUuNjI5ODI4MDc0NjA5NDYsXG4gICAgICAgIDAsIDAsIDAsIDEsIDBcbiAgICBdO1xuXG4gICAgdGhpcy5fbG9hZE1hdHJpeChtYXRyaXgsIG11bHRpcGx5KTtcbn07XG5cbi8qKlxuICogQnJvd24gZGVsaWNpb3VzIGJyb3duaSBmaWx0ZXIgKHRoYW5rcyBEb21pbmljIFN6YWJsZXdza2kpXG4gKlxuICogQHBhcmFtIG11bHRpcGx5IHtib29sZWFufSByZWZlciB0byAuX2xvYWRNYXRyaXgoKSBtZXRob2RcbiAqL1xuQ29sb3JNYXRyaXhGaWx0ZXIucHJvdG90eXBlLmJyb3duaSA9IGZ1bmN0aW9uIChtdWx0aXBseSlcbntcbiAgICB2YXIgbWF0cml4ID0gW1xuICAgICAgICAwLjU5OTcwMjM0OTgxNTk3MTUsIDAuMzQ1NTMyNDMwNDgzOTEyNjMsIC0wLjI3MDgyOTg2NzQ1MzgwNDIsIDAsIDQ3LjQzMTkyODU1NjAwODczLFxuICAgICAgICAtMC4wMzc3MDMyNDk4Mzc3ODMxNTcsIDAuODYwOTU3NzU4Nzk5MjY0MSwgMC4xNTA1OTU1MjM4ODQ1OTkxMywgMCwgLTM2Ljk2ODQxNDk4MzE5MTI3LFxuICAgICAgICAwLjI0MTEzNjM1MTI4MTUzMzM1LCAtMC4wNzQ0MTAzNzkwODQyMjQ5MiwgMC40NDk3MjE4MjA2NDg3NzE1MywgMCwgLTcuNTYyMDc1Mjc3NTkxMjgzLFxuICAgICAgICAwLCAwLCAwLCAxLCAwXG4gICAgXTtcblxuICAgIHRoaXMuX2xvYWRNYXRyaXgobWF0cml4LCBtdWx0aXBseSk7XG59O1xuXG4vKlxuICogVmludGFnZSBmaWx0ZXIgKHRoYW5rcyBEb21pbmljIFN6YWJsZXdza2kpXG4gKlxuICogQHBhcmFtIG11bHRpcGx5IHtib29sZWFufSByZWZlciB0byAuX2xvYWRNYXRyaXgoKSBtZXRob2RcbiAqL1xuQ29sb3JNYXRyaXhGaWx0ZXIucHJvdG90eXBlLnZpbnRhZ2UgPSBmdW5jdGlvbiAobXVsdGlwbHkpXG57XG4gICAgdmFyIG1hdHJpeCA9IFtcbiAgICAgICAgMC42Mjc5MzQ1NjM1NjA1OTk0LCAwLjMyMDIxODM0MjA4MTkzNjcsIC0wLjAzOTY1NDA4MjExMzEyNDUzLCAwLCA5LjY1MTI4NTgzNTI5NDEyMyxcbiAgICAgICAgMC4wMjU3ODM5NzcwNDgwODg2OCwgMC42NDQxMTg4NjQ0Mzc0NzcxLCAwLjAzMjU5MTI3NjE2MTQ5Mjk0LCAwLCA3LjQ2MjgyOTE3NjQ3MDU5MSxcbiAgICAgICAgMC4wNDY2MDU1NTU2NzgyNzE5LCAtMC4wODUxMjMyOTg3MjQ3ODkxLCAwLjUyNDE2NDgwMTg3MDA0NjUsIDAsIDUuMTU5MTkwNTg4MjM1Mjk2LFxuICAgICAgICAwLCAwLCAwLCAxLCAwXG4gICAgXTtcblxuICAgIHRoaXMuX2xvYWRNYXRyaXgobWF0cml4LCBtdWx0aXBseSk7XG59O1xuXG4vKlxuICogV2UgZG9uJ3Qga25vdyBleGFjdGx5IHdoYXQgaXQgZG9lcywga2luZCBvZiBncmFkaWVudCBtYXAsIGJ1dCBmdW5ueSB0byBwbGF5IHdpdGghXG4gKlxuICogQHBhcmFtIGRlc2F0dXJhdGlvbiB7bnVtYmVyfVxuICogQHBhcmFtIHRvbmVkIHtudW1iZXJ9XG4gKiBAcGFyYW0gbGlnaHRDb2xvciB7c3RyaW5nfSAoZXhhbXBsZSA6IFwiMHhGRkU1ODBcIilcbiAqIEBwYXJhbSBkYXJrQ29sb3Ige3N0cmluZ30gIChleGFtcGxlIDogXCIweEZGRTU4MFwiKVxuICpcbiAqIEBwYXJhbSBtdWx0aXBseSB7Ym9vbGVhbn0gcmVmZXIgdG8gLl9sb2FkTWF0cml4KCkgbWV0aG9kXG4gKi9cbkNvbG9yTWF0cml4RmlsdGVyLnByb3RvdHlwZS5jb2xvclRvbmUgPSBmdW5jdGlvbiAoZGVzYXR1cmF0aW9uLCB0b25lZCwgbGlnaHRDb2xvciwgZGFya0NvbG9yLCBtdWx0aXBseSlcbntcbiAgICBkZXNhdHVyYXRpb24gPSBkZXNhdHVyYXRpb24gfHwgMC4yO1xuICAgIHRvbmVkID0gdG9uZWQgfHwgMC4xNTtcbiAgICBsaWdodENvbG9yID0gbGlnaHRDb2xvciB8fCAweEZGRTU4MDtcbiAgICBkYXJrQ29sb3IgPSBkYXJrQ29sb3IgfHwgMHgzMzgwMDA7XG5cbiAgICB2YXIgbFIgPSAoKGxpZ2h0Q29sb3IgPj4gMTYpICYgMHhGRikgLyAyNTU7XG4gICAgdmFyIGxHID0gKChsaWdodENvbG9yID4+IDgpICYgMHhGRikgLyAyNTU7XG4gICAgdmFyIGxCID0gKGxpZ2h0Q29sb3IgJiAweEZGKSAvIDI1NTtcblxuICAgIHZhciBkUiA9ICgoZGFya0NvbG9yID4+IDE2KSAmIDB4RkYpIC8gMjU1O1xuICAgIHZhciBkRyA9ICgoZGFya0NvbG9yID4+IDgpICYgMHhGRikgLyAyNTU7XG4gICAgdmFyIGRCID0gKGRhcmtDb2xvciAmIDB4RkYpIC8gMjU1O1xuXG4gICAgdmFyIG1hdHJpeCA9IFtcbiAgICAgICAgMC4zLCAwLjU5LCAwLjExLCAwLCAwLFxuICAgICAgICBsUiwgbEcsIGxCLCBkZXNhdHVyYXRpb24sIDAsXG4gICAgICAgIGRSLCBkRywgZEIsIHRvbmVkLCAwLFxuICAgICAgICBsUiAtIGRSLCBsRyAtIGRHLCBsQiAtIGRCLCAwLCAwXG4gICAgXTtcblxuICAgIHRoaXMuX2xvYWRNYXRyaXgobWF0cml4LCBtdWx0aXBseSk7XG59O1xuXG4vKlxuICogTmlnaHQgZWZmZWN0XG4gKlxuICogQHBhcmFtIGludGVuc2l0eSB7bnVtYmVyfVxuICogQHBhcmFtIG11bHRpcGx5IHtib29sZWFufSByZWZlciB0byAuX2xvYWRNYXRyaXgoKSBtZXRob2RcbiAqL1xuQ29sb3JNYXRyaXhGaWx0ZXIucHJvdG90eXBlLm5pZ2h0ID0gZnVuY3Rpb24gKGludGVuc2l0eSwgbXVsdGlwbHkpXG57XG4gICAgaW50ZW5zaXR5ID0gaW50ZW5zaXR5IHx8IDAuMTtcbiAgICB2YXIgbWF0cml4ID0gW1xuICAgICAgICBpbnRlbnNpdHkgKiAoIC0yLjApLCAtaW50ZW5zaXR5LCAwLCAwLCAwLFxuICAgICAgICAtaW50ZW5zaXR5LCAwLCBpbnRlbnNpdHksIDAsIDAsXG4gICAgICAgIDAsIGludGVuc2l0eSwgaW50ZW5zaXR5ICogMi4wLCAwLCAwLFxuICAgICAgICAwLCAwLCAwLCAxLCAwXG4gICAgXTtcblxuICAgIHRoaXMuX2xvYWRNYXRyaXgobWF0cml4LCBtdWx0aXBseSk7XG59O1xuXG5cbi8qXG4gKiBQcmVkYXRvciBlZmZlY3RcbiAqXG4gKiBFcmFzZSB0aGUgY3VycmVudCBtYXRyaXggYnkgc2V0dGluZyBhIG5ldyBpbmRlcGVudCBvbmVcbiAqXG4gKiBAcGFyYW0gYW1vdW50IHtudW1iZXJ9IGhvdyBtdWNoIHRoZSBwcmVkYXRvciBmZWVscyBoaXMgZnV0dXJlIHZpY3RpbVxuICogQHBhcmFtIG11bHRpcGx5IHtib29sZWFufSByZWZlciB0byAuX2xvYWRNYXRyaXgoKSBtZXRob2RcbiAqL1xuQ29sb3JNYXRyaXhGaWx0ZXIucHJvdG90eXBlLnByZWRhdG9yID0gZnVuY3Rpb24gKGFtb3VudCwgbXVsdGlwbHkpXG57XG4gICAgdmFyIG1hdHJpeCA9IFtcbiAgICAgICAgMTEuMjI0MTMwNjMwNDkzMTY0ICogYW1vdW50LCAtNC43OTQ0ODY5OTk1MTE3MTkgKiBhbW91bnQsIC0yLjg3NDYxMTg1NDU1MzIyMjcgKiBhbW91bnQsIDAgKiBhbW91bnQsIDAuNDAzNDI0MzgyMjA5Nzc3ODMgKiBhbW91bnQsXG4gICAgICAgIC0zLjYzMzA2OTc1MzY0Njg1MDYgKiBhbW91bnQsIDkuMTkzMTU3MTk2MDQ0OTIyICogYW1vdW50LCAtMi45NTE4MTA4MzY3OTE5OTIgKiBhbW91bnQsIDAgKiBhbW91bnQsIC0xLjMxNjEzNTA0ODg2NjI3MiAqIGFtb3VudCxcbiAgICAgICAgLTMuMjE4NDE5NzkwMjY3OTQ0MyAqIGFtb3VudCwgLTQuMjM3NTAzMDUxNzU3ODEyNSAqIGFtb3VudCwgNy40NzY0NDgwNTkwODIwMzEgKiBhbW91bnQsIDAgKiBhbW91bnQsIDAuODA0NDQ1OTIyMzc0NzI1MyAqIGFtb3VudCxcbiAgICAgICAgMCwgMCwgMCwgMSwgMFxuICAgIF07XG5cbiAgICB0aGlzLl9sb2FkTWF0cml4KG1hdHJpeCwgbXVsdGlwbHkpO1xufTtcblxuLypcbiAqIExTRCBlZmZlY3RcbiAqXG4gKiBNdWx0aXBseSB0aGUgY3VycmVudCBtYXRyaXhcbiAqXG4gKiBAcGFyYW0gYW1vdW50IHtudW1iZXJ9IEhvdyBjcmF6eSBpcyB5b3VyIGVmZmVjdFxuICogQHBhcmFtIG11bHRpcGx5IHtib29sZWFufSByZWZlciB0byAuX2xvYWRNYXRyaXgoKSBtZXRob2RcbiAqL1xuQ29sb3JNYXRyaXhGaWx0ZXIucHJvdG90eXBlLmxzZCA9IGZ1bmN0aW9uIChtdWx0aXBseSlcbntcbiAgICB2YXIgbWF0cml4ID0gW1xuICAgICAgICAyLCAtMC40LCAwLjUsIDAsIDAsXG4gICAgICAgIC0wLjUsIDIsIC0wLjQsIDAsIDAsXG4gICAgICAgIC0wLjQsIC0wLjUsIDMsIDAsIDAsXG4gICAgICAgIDAsIDAsIDAsIDEsIDBcbiAgICBdO1xuXG4gICAgdGhpcy5fbG9hZE1hdHJpeChtYXRyaXgsIG11bHRpcGx5KTtcbn07XG5cbi8qXG4gKiBFcmFzZSB0aGUgY3VycmVudCBtYXRyaXggYnkgc2V0dGluZyB0aGUgZGVmYXVsdCBvbmVcbiAqXG4gKi9cbkNvbG9yTWF0cml4RmlsdGVyLnByb3RvdHlwZS5yZXNldCA9IGZ1bmN0aW9uICgpXG57XG4gICAgdmFyIG1hdHJpeCA9IFtcbiAgICAgICAgMSwgMCwgMCwgMCwgMCxcbiAgICAgICAgMCwgMSwgMCwgMCwgMCxcbiAgICAgICAgMCwgMCwgMSwgMCwgMCxcbiAgICAgICAgMCwgMCwgMCwgMSwgMFxuICAgIF07XG5cbiAgICB0aGlzLl9sb2FkTWF0cml4KG1hdHJpeCwgZmFsc2UpO1xufTtcblxuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhDb2xvck1hdHJpeEZpbHRlci5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBtYXRyaXggb2YgdGhlIGNvbG9yIG1hdHJpeCBmaWx0ZXJcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcltdfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuQ29sb3JNYXRyaXhGaWx0ZXIjXG4gICAgICogQGRlZmF1bHQgWzEsIDAsIDAsIDAsIDAsIDAsIDEsIDAsIDAsIDAsIDAsIDAsIDEsIDAsIDAsIDAsIDAsIDAsIDEsIDBdXG4gICAgICovXG4gICAgbWF0cml4OiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudW5pZm9ybXMubS52YWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudW5pZm9ybXMubS52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfVxufSk7XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uLy4uL2NvcmUnKTtcbi8vIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL3N1YnN0YWNrL2JyZnMvaXNzdWVzLzI1XG5cblxuLyoqXG4gKiBUaGlzIGxvd2VycyB0aGUgY29sb3IgZGVwdGggb2YgeW91ciBpbWFnZSBieSB0aGUgZ2l2ZW4gYW1vdW50LCBwcm9kdWNpbmcgYW4gaW1hZ2Ugd2l0aCBhIHNtYWxsZXIgcGFsZXR0ZS5cbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQWJzdHJhY3RGaWx0ZXJcbiAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnNcbiAqL1xuZnVuY3Rpb24gQ29sb3JTdGVwRmlsdGVyKClcbntcbiAgICBjb3JlLkFic3RyYWN0RmlsdGVyLmNhbGwodGhpcyxcbiAgICAgICAgLy8gdmVydGV4IHNoYWRlclxuICAgICAgICBudWxsLFxuICAgICAgICAvLyBmcmFnbWVudCBzaGFkZXJcbiAgICAgICAgXCJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcXG5cXG52YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDtcXG5cXG51bmlmb3JtIHNhbXBsZXIyRCB1U2FtcGxlcjtcXG51bmlmb3JtIGZsb2F0IHN0ZXA7XFxuXFxudm9pZCBtYWluKHZvaWQpXFxue1xcbiAgICB2ZWM0IGNvbG9yID0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2VGV4dHVyZUNvb3JkKTtcXG5cXG4gICAgY29sb3IgPSBmbG9vcihjb2xvciAqIHN0ZXApIC8gc3RlcDtcXG5cXG4gICAgZ2xfRnJhZ0NvbG9yID0gY29sb3I7XFxufVxcblwiLFxuICAgICAgICAvLyBjdXN0b20gdW5pZm9ybXNcbiAgICAgICAge1xuICAgICAgICAgICAgc3RlcDogeyB0eXBlOiAnMWYnLCB2YWx1ZTogNSB9XG4gICAgICAgIH1cbiAgICApO1xufVxuXG5Db2xvclN0ZXBGaWx0ZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShjb3JlLkFic3RyYWN0RmlsdGVyLnByb3RvdHlwZSk7XG5Db2xvclN0ZXBGaWx0ZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gQ29sb3JTdGVwRmlsdGVyO1xubW9kdWxlLmV4cG9ydHMgPSBDb2xvclN0ZXBGaWx0ZXI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKENvbG9yU3RlcEZpbHRlci5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBUaGUgbnVtYmVyIG9mIHN0ZXBzIHRvIHJlZHVjZSB0aGUgcGFsZXR0ZSBieS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLkNvbG9yU3RlcEZpbHRlciNcbiAgICAgKi9cbiAgICBzdGVwOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudW5pZm9ybXMuc3RlcC52YWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudW5pZm9ybXMuc3RlcC52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfVxufSk7XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uLy4uL2NvcmUnKTtcbi8vIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL3N1YnN0YWNrL2JyZnMvaXNzdWVzLzI1XG5cblxuLyoqXG4gKiBUaGUgQ29udm9sdXRpb25GaWx0ZXIgY2xhc3MgYXBwbGllcyBhIG1hdHJpeCBjb252b2x1dGlvbiBmaWx0ZXIgZWZmZWN0LlxuICogQSBjb252b2x1dGlvbiBjb21iaW5lcyBwaXhlbHMgaW4gdGhlIGlucHV0IGltYWdlIHdpdGggbmVpZ2hib3JpbmcgcGl4ZWxzIHRvIHByb2R1Y2UgYSBuZXcgaW1hZ2UuXG4gKiBBIHdpZGUgdmFyaWV0eSBvZiBpbWFnZSBlZmZlY3RzIGNhbiBiZSBhY2hpZXZlZCB0aHJvdWdoIGNvbnZvbHV0aW9ucywgaW5jbHVkaW5nIGJsdXJyaW5nLCBlZGdlXG4gKiBkZXRlY3Rpb24sIHNoYXJwZW5pbmcsIGVtYm9zc2luZywgYW5kIGJldmVsaW5nLiBUaGUgbWF0cml4IHNob3VsZCBiZSBzcGVjaWZpZWQgYXMgYSA5IHBvaW50IEFycmF5LlxuICogU2VlIGh0dHA6Ly9kb2NzLmdpbXAub3JnL2VuL3BsdWctaW4tY29udm1hdHJpeC5odG1sIGZvciBtb3JlIGluZm8uXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLkFic3RyYWN0RmlsdGVyXG4gKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzXG4gKiBAcGFyYW0gbWF0cml4IHtudW1iZXJbXX0gQW4gYXJyYXkgb2YgdmFsdWVzIHVzZWQgZm9yIG1hdHJpeCB0cmFuc2Zvcm1hdGlvbi4gU3BlY2lmaWVkIGFzIGEgOSBwb2ludCBBcnJheS5cbiAqIEBwYXJhbSB3aWR0aCB7bnVtYmVyfSBXaWR0aCBvZiB0aGUgb2JqZWN0IHlvdSBhcmUgdHJhbnNmb3JtaW5nXG4gKiBAcGFyYW0gaGVpZ2h0IHtudW1iZXJ9IEhlaWdodCBvZiB0aGUgb2JqZWN0IHlvdSBhcmUgdHJhbnNmb3JtaW5nXG4gKi9cbmZ1bmN0aW9uIENvbnZvbHV0aW9uRmlsdGVyKG1hdHJpeCwgd2lkdGgsIGhlaWdodClcbntcbiAgICBjb3JlLkFic3RyYWN0RmlsdGVyLmNhbGwodGhpcyxcbiAgICAgICAgLy8gdmVydGV4IHNoYWRlclxuICAgICAgICBudWxsLFxuICAgICAgICAvLyBmcmFnbWVudCBzaGFkZXJcbiAgICAgICAgXCJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcXG5cXG52YXJ5aW5nIG1lZGl1bXAgdmVjMiB2VGV4dHVyZUNvb3JkO1xcblxcbnVuaWZvcm0gc2FtcGxlcjJEIHVTYW1wbGVyO1xcbnVuaWZvcm0gdmVjMiB0ZXhlbFNpemU7XFxudW5pZm9ybSBmbG9hdCBtYXRyaXhbOV07XFxuXFxudm9pZCBtYWluKHZvaWQpXFxue1xcbiAgIHZlYzQgYzExID0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2VGV4dHVyZUNvb3JkIC0gdGV4ZWxTaXplKTsgLy8gdG9wIGxlZnRcXG4gICB2ZWM0IGMxMiA9IHRleHR1cmUyRCh1U2FtcGxlciwgdmVjMih2VGV4dHVyZUNvb3JkLngsIHZUZXh0dXJlQ29vcmQueSAtIHRleGVsU2l6ZS55KSk7IC8vIHRvcCBjZW50ZXJcXG4gICB2ZWM0IGMxMyA9IHRleHR1cmUyRCh1U2FtcGxlciwgdmVjMih2VGV4dHVyZUNvb3JkLnggKyB0ZXhlbFNpemUueCwgdlRleHR1cmVDb29yZC55IC0gdGV4ZWxTaXplLnkpKTsgLy8gdG9wIHJpZ2h0XFxuXFxuICAgdmVjNCBjMjEgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZlYzIodlRleHR1cmVDb29yZC54IC0gdGV4ZWxTaXplLngsIHZUZXh0dXJlQ29vcmQueSkpOyAvLyBtaWQgbGVmdFxcbiAgIHZlYzQgYzIyID0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2VGV4dHVyZUNvb3JkKTsgLy8gbWlkIGNlbnRlclxcbiAgIHZlYzQgYzIzID0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2ZWMyKHZUZXh0dXJlQ29vcmQueCArIHRleGVsU2l6ZS54LCB2VGV4dHVyZUNvb3JkLnkpKTsgLy8gbWlkIHJpZ2h0XFxuXFxuICAgdmVjNCBjMzEgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZlYzIodlRleHR1cmVDb29yZC54IC0gdGV4ZWxTaXplLngsIHZUZXh0dXJlQ29vcmQueSArIHRleGVsU2l6ZS55KSk7IC8vIGJvdHRvbSBsZWZ0XFxuICAgdmVjNCBjMzIgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZlYzIodlRleHR1cmVDb29yZC54LCB2VGV4dHVyZUNvb3JkLnkgKyB0ZXhlbFNpemUueSkpOyAvLyBib3R0b20gY2VudGVyXFxuICAgdmVjNCBjMzMgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZUZXh0dXJlQ29vcmQgKyB0ZXhlbFNpemUpOyAvLyBib3R0b20gcmlnaHRcXG5cXG4gICBnbF9GcmFnQ29sb3IgPVxcbiAgICAgICBjMTEgKiBtYXRyaXhbMF0gKyBjMTIgKiBtYXRyaXhbMV0gKyBjMTMgKiBtYXRyaXhbMl0gK1xcbiAgICAgICBjMjEgKiBtYXRyaXhbM10gKyBjMjIgKiBtYXRyaXhbNF0gKyBjMjMgKiBtYXRyaXhbNV0gK1xcbiAgICAgICBjMzEgKiBtYXRyaXhbNl0gKyBjMzIgKiBtYXRyaXhbN10gKyBjMzMgKiBtYXRyaXhbOF07XFxuXFxuICAgZ2xfRnJhZ0NvbG9yLmEgPSBjMjIuYTtcXG59XFxuXCIsXG4gICAgICAgIC8vIGN1c3RvbSB1bmlmb3Jtc1xuICAgICAgICB7XG4gICAgICAgICAgICBtYXRyaXg6ICAgICB7IHR5cGU6ICcxZnYnLCB2YWx1ZTogbmV3IEZsb2F0MzJBcnJheShtYXRyaXgpIH0sXG4gICAgICAgICAgICB0ZXhlbFNpemU6ICB7IHR5cGU6ICd2MicsIHZhbHVlOiB7IHg6IDEgLyB3aWR0aCwgeTogMSAvIGhlaWdodCB9IH1cbiAgICAgICAgfVxuICAgICk7XG59XG5cbkNvbnZvbHV0aW9uRmlsdGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoY29yZS5BYnN0cmFjdEZpbHRlci5wcm90b3R5cGUpO1xuQ29udm9sdXRpb25GaWx0ZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gQ29udm9sdXRpb25GaWx0ZXI7XG5tb2R1bGUuZXhwb3J0cyA9IENvbnZvbHV0aW9uRmlsdGVyO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhDb252b2x1dGlvbkZpbHRlci5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBBbiBhcnJheSBvZiB2YWx1ZXMgdXNlZCBmb3IgbWF0cml4IHRyYW5zZm9ybWF0aW9uLiBTcGVjaWZpZWQgYXMgYSA5IHBvaW50IEFycmF5LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyW119XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5Db252b2x1dGlvbkZpbHRlciNcbiAgICAgKi9cbiAgICBtYXRyaXg6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy51bmlmb3Jtcy5tYXRyaXgudmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLm1hdHJpeC52YWx1ZSA9IG5ldyBGbG9hdDMyQXJyYXkodmFsdWUpO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFdpZHRoIG9mIHRoZSBvYmplY3QgeW91IGFyZSB0cmFuc2Zvcm1pbmdcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLkNvbnZvbHV0aW9uRmlsdGVyI1xuICAgICAqL1xuICAgIHdpZHRoOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIDEvdGhpcy51bmlmb3Jtcy50ZXhlbFNpemUudmFsdWUueDtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudW5pZm9ybXMudGV4ZWxTaXplLnZhbHVlLnggPSAxL3ZhbHVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIEhlaWdodCBvZiB0aGUgb2JqZWN0IHlvdSBhcmUgdHJhbnNmb3JtaW5nXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5Db252b2x1dGlvbkZpbHRlciNcbiAgICAgKi9cbiAgICBoZWlnaHQ6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gMS90aGlzLnVuaWZvcm1zLnRleGVsU2l6ZS52YWx1ZS55O1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy50ZXhlbFNpemUudmFsdWUueSA9IDEvdmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG59KTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vLi4vY29yZScpO1xuLy8gQHNlZSBodHRwczovL2dpdGh1Yi5jb20vc3Vic3RhY2svYnJmcy9pc3N1ZXMvMjVcblxuXG4vKipcbiAqIEEgQ3Jvc3MgSGF0Y2ggZWZmZWN0IGZpbHRlci5cbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQWJzdHJhY3RGaWx0ZXJcbiAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnNcbiAqL1xuZnVuY3Rpb24gQ3Jvc3NIYXRjaEZpbHRlcigpXG57XG4gICAgY29yZS5BYnN0cmFjdEZpbHRlci5jYWxsKHRoaXMsXG4gICAgICAgIC8vIHZlcnRleCBzaGFkZXJcbiAgICAgICAgbnVsbCxcbiAgICAgICAgLy8gZnJhZ21lbnQgc2hhZGVyXG4gICAgICAgIFwicHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XFxuXFxudmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7XFxuXFxudW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXI7XFxuXFxudm9pZCBtYWluKHZvaWQpXFxue1xcbiAgICBmbG9hdCBsdW0gPSBsZW5ndGgodGV4dHVyZTJEKHVTYW1wbGVyLCB2VGV4dHVyZUNvb3JkLnh5KS5yZ2IpO1xcblxcbiAgICBnbF9GcmFnQ29sb3IgPSB2ZWM0KDEuMCwgMS4wLCAxLjAsIDEuMCk7XFxuXFxuICAgIGlmIChsdW0gPCAxLjAwKVxcbiAgICB7XFxuICAgICAgICBpZiAobW9kKGdsX0ZyYWdDb29yZC54ICsgZ2xfRnJhZ0Nvb3JkLnksIDEwLjApID09IDAuMClcXG4gICAgICAgIHtcXG4gICAgICAgICAgICBnbF9GcmFnQ29sb3IgPSB2ZWM0KDAuMCwgMC4wLCAwLjAsIDEuMCk7XFxuICAgICAgICB9XFxuICAgIH1cXG5cXG4gICAgaWYgKGx1bSA8IDAuNzUpXFxuICAgIHtcXG4gICAgICAgIGlmIChtb2QoZ2xfRnJhZ0Nvb3JkLnggLSBnbF9GcmFnQ29vcmQueSwgMTAuMCkgPT0gMC4wKVxcbiAgICAgICAge1xcbiAgICAgICAgICAgIGdsX0ZyYWdDb2xvciA9IHZlYzQoMC4wLCAwLjAsIDAuMCwgMS4wKTtcXG4gICAgICAgIH1cXG4gICAgfVxcblxcbiAgICBpZiAobHVtIDwgMC41MClcXG4gICAge1xcbiAgICAgICAgaWYgKG1vZChnbF9GcmFnQ29vcmQueCArIGdsX0ZyYWdDb29yZC55IC0gNS4wLCAxMC4wKSA9PSAwLjApXFxuICAgICAgICB7XFxuICAgICAgICAgICAgZ2xfRnJhZ0NvbG9yID0gdmVjNCgwLjAsIDAuMCwgMC4wLCAxLjApO1xcbiAgICAgICAgfVxcbiAgICB9XFxuXFxuICAgIGlmIChsdW0gPCAwLjMpXFxuICAgIHtcXG4gICAgICAgIGlmIChtb2QoZ2xfRnJhZ0Nvb3JkLnggLSBnbF9GcmFnQ29vcmQueSAtIDUuMCwgMTAuMCkgPT0gMC4wKVxcbiAgICAgICAge1xcbiAgICAgICAgICAgIGdsX0ZyYWdDb2xvciA9IHZlYzQoMC4wLCAwLjAsIDAuMCwgMS4wKTtcXG4gICAgICAgIH1cXG4gICAgfVxcbn1cXG5cIlxuICAgICk7XG59XG5cbkNyb3NzSGF0Y2hGaWx0ZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShjb3JlLkFic3RyYWN0RmlsdGVyLnByb3RvdHlwZSk7XG5Dcm9zc0hhdGNoRmlsdGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IENyb3NzSGF0Y2hGaWx0ZXI7XG5tb2R1bGUuZXhwb3J0cyA9IENyb3NzSGF0Y2hGaWx0ZXI7XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uLy4uL2NvcmUnKTtcbi8vIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL3N1YnN0YWNrL2JyZnMvaXNzdWVzLzI1XG5cblxuLyoqXG4gKiBUaGUgRGlzcGxhY2VtZW50RmlsdGVyIGNsYXNzIHVzZXMgdGhlIHBpeGVsIHZhbHVlcyBmcm9tIHRoZSBzcGVjaWZpZWQgdGV4dHVyZSAoY2FsbGVkIHRoZSBkaXNwbGFjZW1lbnQgbWFwKSB0byBwZXJmb3JtIGEgZGlzcGxhY2VtZW50IG9mIGFuIG9iamVjdC5cbiAqIFlvdSBjYW4gdXNlIHRoaXMgZmlsdGVyIHRvIGFwcGx5IGFsbCBtYW5vciBvZiBjcmF6eSB3YXJwaW5nIGVmZmVjdHNcbiAqIEN1cnJlbnRseSB0aGUgciBwcm9wZXJ0eSBvZiB0aGUgdGV4dHVyZSBpcyB1c2VkIHRvIG9mZnNldCB0aGUgeCBhbmQgdGhlIGcgcHJvcGVydHkgb2YgdGhlIHRleHR1cmUgaXMgdXNlZCB0byBvZmZzZXQgdGhlIHkuXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLkFic3RyYWN0RmlsdGVyXG4gKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzXG4gKiBAcGFyYW0gc3ByaXRlIHtQSVhJLlNwcml0ZX0gdGhlIHNwcml0ZSB1c2VkIGZvciB0aGUgZGlzcGxhY2VtZW50IG1hcC4gKG1ha2Ugc3VyZSBpdHMgYWRkZWQgdG8gdGhlIHNjZW5lISlcbiAqL1xuZnVuY3Rpb24gRGlzcGxhY2VtZW50RmlsdGVyKHNwcml0ZSwgc2NhbGUpXG57XG4gICAgdmFyIG1hc2tNYXRyaXggPSBuZXcgY29yZS5NYXRyaXgoKTtcbiAgICBzcHJpdGUucmVuZGVyYWJsZSA9IGZhbHNlO1xuXG4gICAgY29yZS5BYnN0cmFjdEZpbHRlci5jYWxsKHRoaXMsXG4gICAgICAgIC8vIHZlcnRleCBzaGFkZXJcbiAgICAgICAgXCJhdHRyaWJ1dGUgdmVjMiBhVmVydGV4UG9zaXRpb247XFxuYXR0cmlidXRlIHZlYzIgYVRleHR1cmVDb29yZDtcXG5hdHRyaWJ1dGUgdmVjNCBhQ29sb3I7XFxuXFxudW5pZm9ybSBtYXQzIHByb2plY3Rpb25NYXRyaXg7XFxudW5pZm9ybSBtYXQzIG90aGVyTWF0cml4O1xcblxcbnZhcnlpbmcgdmVjMiB2TWFwQ29vcmQ7XFxudmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7XFxudmFyeWluZyB2ZWM0IHZDb2xvcjtcXG5cXG52b2lkIG1haW4odm9pZClcXG57XFxuICAgZ2xfUG9zaXRpb24gPSB2ZWM0KChwcm9qZWN0aW9uTWF0cml4ICogdmVjMyhhVmVydGV4UG9zaXRpb24sIDEuMCkpLnh5LCAwLjAsIDEuMCk7XFxuICAgdlRleHR1cmVDb29yZCA9IGFUZXh0dXJlQ29vcmQ7XFxuICAgdk1hcENvb3JkID0gKCBvdGhlck1hdHJpeCAqIHZlYzMoIGFUZXh0dXJlQ29vcmQsIDEuMCkgICkueHk7XFxuICAgdkNvbG9yID0gdmVjNChhQ29sb3IucmdiICogYUNvbG9yLmEsIGFDb2xvci5hKTtcXG59XFxuXCIsXG4gICAgICAgIC8vIGZyYWdtZW50IHNoYWRlclxuICAgICAgICBcInByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xcblxcbnZhcnlpbmcgdmVjMiB2TWFwQ29vcmQ7XFxudmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7XFxudmFyeWluZyB2ZWM0IHZDb2xvcjtcXG5cXG51bmlmb3JtIHZlYzIgc2NhbGU7XFxuXFxudW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXI7XFxudW5pZm9ybSBzYW1wbGVyMkQgbWFwU2FtcGxlcjtcXG5cXG52b2lkIG1haW4odm9pZClcXG57XFxuICAgdmVjNCBtYXAgPSAgdGV4dHVyZTJEKG1hcFNhbXBsZXIsIHZNYXBDb29yZCk7XFxuXFxuICAgbWFwIC09IDAuNTtcXG4gICBtYXAueHkgKj0gc2NhbGU7XFxuXFxuICAgZ2xfRnJhZ0NvbG9yID0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2ZWMyKHZUZXh0dXJlQ29vcmQueCArIG1hcC54LCB2VGV4dHVyZUNvb3JkLnkgKyBtYXAueSkpO1xcbn1cXG5cIixcbiAgICAgICAgLy8gdW5pZm9ybXNcbiAgICAgICAge1xuICAgICAgICAgICAgbWFwU2FtcGxlcjogICAgIHsgdHlwZTogJ3NhbXBsZXIyRCcsIHZhbHVlOiBzcHJpdGUudGV4dHVyZSB9LFxuICAgICAgICAgICAgb3RoZXJNYXRyaXg6ICAgIHsgdHlwZTogJ21hdDMnLCB2YWx1ZTogbWFza01hdHJpeC50b0FycmF5KHRydWUpIH0sXG4gICAgICAgICAgICBzY2FsZTogICAgICAgICAgeyB0eXBlOiAndjInLCB2YWx1ZTogeyB4OiAxLCB5OiAxIH0gfVxuICAgICAgICB9XG4gICAgKTtcblxuICAgIHRoaXMubWFza1Nwcml0ZSA9IHNwcml0ZTtcbiAgICB0aGlzLm1hc2tNYXRyaXggPSBtYXNrTWF0cml4O1xuXG4gICAgaWYgKHNjYWxlID09PSBudWxsIHx8IHNjYWxlID09PSB1bmRlZmluZWQpXG4gICAge1xuICAgICAgICBzY2FsZSA9IDIwO1xuICAgIH1cblxuICAgIHRoaXMuc2NhbGUgPSBuZXcgY29yZS5Qb2ludChzY2FsZSwgc2NhbGUpO1xufVxuXG5EaXNwbGFjZW1lbnRGaWx0ZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShjb3JlLkFic3RyYWN0RmlsdGVyLnByb3RvdHlwZSk7XG5EaXNwbGFjZW1lbnRGaWx0ZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gRGlzcGxhY2VtZW50RmlsdGVyO1xubW9kdWxlLmV4cG9ydHMgPSBEaXNwbGFjZW1lbnRGaWx0ZXI7XG5cbkRpc3BsYWNlbWVudEZpbHRlci5wcm90b3R5cGUuYXBwbHlGaWx0ZXIgPSBmdW5jdGlvbiAocmVuZGVyZXIsIGlucHV0LCBvdXRwdXQpXG57XG4gICAgdmFyIGZpbHRlck1hbmFnZXIgPSByZW5kZXJlci5maWx0ZXJNYW5hZ2VyO1xuXG4gICAgZmlsdGVyTWFuYWdlci5jYWxjdWxhdGVNYXBwZWRNYXRyaXgoaW5wdXQuZnJhbWUsIHRoaXMubWFza1Nwcml0ZSwgdGhpcy5tYXNrTWF0cml4KTtcblxuICAgIHRoaXMudW5pZm9ybXMub3RoZXJNYXRyaXgudmFsdWUgPSB0aGlzLm1hc2tNYXRyaXgudG9BcnJheSh0cnVlKTtcbiAgICB0aGlzLnVuaWZvcm1zLnNjYWxlLnZhbHVlLnggPSB0aGlzLnNjYWxlLnggKiAoMS9pbnB1dC5mcmFtZS53aWR0aCk7XG4gICAgdGhpcy51bmlmb3Jtcy5zY2FsZS52YWx1ZS55ID0gdGhpcy5zY2FsZS55ICogKDEvaW5wdXQuZnJhbWUuaGVpZ2h0KTtcblxuICAgIHZhciBzaGFkZXIgPSB0aGlzLmdldFNoYWRlcihyZW5kZXJlcik7XG4gICAgIC8vIGRyYXcgdGhlIGZpbHRlci4uLlxuICAgIGZpbHRlck1hbmFnZXIuYXBwbHlGaWx0ZXIoc2hhZGVyLCBpbnB1dCwgb3V0cHV0KTtcbn07XG5cblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoRGlzcGxhY2VtZW50RmlsdGVyLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFRoZSB0ZXh0dXJlIHVzZWQgZm9yIHRoZSBkaXNwbGFjZW1lbnQgbWFwLiBNdXN0IGJlIHBvd2VyIG9mIDIgc2l6ZWQgdGV4dHVyZS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuVGV4dHVyZX1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLkRpc3BsYWNlbWVudEZpbHRlciNcbiAgICAgKi9cbiAgICBtYXA6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy51bmlmb3Jtcy5tYXBTYW1wbGVyLnZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy5tYXBTYW1wbGVyLnZhbHVlID0gdmFsdWU7XG5cbiAgICAgICAgfVxuICAgIH1cbn0pO1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi8uLi9jb3JlJyk7XG4vLyBAc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9zdWJzdGFjay9icmZzL2lzc3Vlcy8yNVxuXG5cbi8qKlxuICogQGF1dGhvciBNYXQgR3JvdmVzIGh0dHA6Ly9tYXRncm92ZXMuY29tLyBARG9vcm1hdDIzXG4gKiBvcmlnaW5hbCBmaWx0ZXI6IGh0dHBzOi8vZ2l0aHViLmNvbS9ldmFudy9nbGZ4LmpzL2Jsb2IvbWFzdGVyL3NyYy9maWx0ZXJzL2Z1bi9kb3RzY3JlZW4uanNcbiAqL1xuXG4vKipcbiAqIFRoaXMgZmlsdGVyIGFwcGxpZXMgYSBkb3RzY3JlZW4gZWZmZWN0IG1ha2luZyBkaXNwbGF5IG9iamVjdHMgYXBwZWFyIHRvIGJlIG1hZGUgb3V0IG9mXG4gKiBibGFjayBhbmQgd2hpdGUgaGFsZnRvbmUgZG90cyBsaWtlIGFuIG9sZCBwcmludGVyLlxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5BYnN0cmFjdEZpbHRlclxuICogQG1lbWJlcm9mIFBJWEkuZmlsdGVyc1xuICovXG5mdW5jdGlvbiBEb3RTY3JlZW5GaWx0ZXIoKVxue1xuICAgIGNvcmUuQWJzdHJhY3RGaWx0ZXIuY2FsbCh0aGlzLFxuICAgICAgICAvLyB2ZXJ0ZXggc2hhZGVyXG4gICAgICAgIG51bGwsXG4gICAgICAgIC8vIGZyYWdtZW50IHNoYWRlclxuICAgICAgICBcInByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xcblxcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xcbnZhcnlpbmcgdmVjNCB2Q29sb3I7XFxuXFxudW5pZm9ybSB2ZWM0IGRpbWVuc2lvbnM7XFxudW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXI7XFxuXFxudW5pZm9ybSBmbG9hdCBhbmdsZTtcXG51bmlmb3JtIGZsb2F0IHNjYWxlO1xcblxcbmZsb2F0IHBhdHRlcm4oKVxcbntcXG4gICBmbG9hdCBzID0gc2luKGFuZ2xlKSwgYyA9IGNvcyhhbmdsZSk7XFxuICAgdmVjMiB0ZXggPSB2VGV4dHVyZUNvb3JkICogZGltZW5zaW9ucy54eTtcXG4gICB2ZWMyIHBvaW50ID0gdmVjMihcXG4gICAgICAgYyAqIHRleC54IC0gcyAqIHRleC55LFxcbiAgICAgICBzICogdGV4LnggKyBjICogdGV4LnlcXG4gICApICogc2NhbGU7XFxuICAgcmV0dXJuIChzaW4ocG9pbnQueCkgKiBzaW4ocG9pbnQueSkpICogNC4wO1xcbn1cXG5cXG52b2lkIG1haW4oKVxcbntcXG4gICB2ZWM0IGNvbG9yID0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2VGV4dHVyZUNvb3JkKTtcXG4gICBmbG9hdCBhdmVyYWdlID0gKGNvbG9yLnIgKyBjb2xvci5nICsgY29sb3IuYikgLyAzLjA7XFxuICAgZ2xfRnJhZ0NvbG9yID0gdmVjNCh2ZWMzKGF2ZXJhZ2UgKiAxMC4wIC0gNS4wICsgcGF0dGVybigpKSwgY29sb3IuYSk7XFxufVxcblwiLFxuICAgICAgICAvLyBjdXN0b20gdW5pZm9ybXNcbiAgICAgICAge1xuICAgICAgICAgICAgc2NhbGU6ICAgICAgeyB0eXBlOiAnMWYnLCB2YWx1ZTogMSB9LFxuICAgICAgICAgICAgYW5nbGU6ICAgICAgeyB0eXBlOiAnMWYnLCB2YWx1ZTogNSB9LFxuICAgICAgICAgICAgZGltZW5zaW9uczogeyB0eXBlOiAnNGZ2JywgdmFsdWU6IFswLCAwLCAwLCAwXSB9XG4gICAgICAgIH1cbiAgICApO1xufVxuXG5Eb3RTY3JlZW5GaWx0ZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShjb3JlLkFic3RyYWN0RmlsdGVyLnByb3RvdHlwZSk7XG5Eb3RTY3JlZW5GaWx0ZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gRG90U2NyZWVuRmlsdGVyO1xubW9kdWxlLmV4cG9ydHMgPSBEb3RTY3JlZW5GaWx0ZXI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKERvdFNjcmVlbkZpbHRlci5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBUaGUgc2NhbGUgb2YgdGhlIGVmZmVjdC5cbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5Eb3RTY3JlZW5GaWx0ZXIjXG4gICAgICovXG4gICAgc2NhbGU6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy51bmlmb3Jtcy5zY2FsZS52YWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudW5pZm9ybXMuc2NhbGUudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBUaGUgcmFkaXVzIG9mIHRoZSBlZmZlY3QuXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuRG90U2NyZWVuRmlsdGVyI1xuICAgICAqL1xuICAgIGFuZ2xlOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudW5pZm9ybXMuYW5nbGUudmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLmFuZ2xlLnZhbHVlID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG59KTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vLi4vY29yZScpO1xuXG4vLyBAc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9zdWJzdGFjay9icmZzL2lzc3Vlcy8yNVxuXG5cbi8qKlxuICogVGhlIEJsdXJZVGludEZpbHRlciBhcHBsaWVzIGEgdmVydGljYWwgR2F1c3NpYW4gYmx1ciB0byBhbiBvYmplY3QuXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLkFic3RyYWN0RmlsdGVyXG4gKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzXG4gKi9cbmZ1bmN0aW9uIEJsdXJZVGludEZpbHRlcigpXG57XG4gICAgY29yZS5BYnN0cmFjdEZpbHRlci5jYWxsKHRoaXMsXG4gICAgICAgIC8vIHZlcnRleCBzaGFkZXJcbiAgICAgICAgXCJhdHRyaWJ1dGUgdmVjMiBhVmVydGV4UG9zaXRpb247XFxuYXR0cmlidXRlIHZlYzIgYVRleHR1cmVDb29yZDtcXG5hdHRyaWJ1dGUgdmVjNCBhQ29sb3I7XFxuXFxudW5pZm9ybSBmbG9hdCBzdHJlbmd0aDtcXG51bmlmb3JtIHZlYzIgb2Zmc2V0O1xcblxcbnVuaWZvcm0gbWF0MyBwcm9qZWN0aW9uTWF0cml4O1xcblxcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xcbnZhcnlpbmcgdmVjNCB2Q29sb3I7XFxudmFyeWluZyB2ZWMyIHZCbHVyVGV4Q29vcmRzWzZdO1xcblxcbnZvaWQgbWFpbih2b2lkKVxcbntcXG4gICAgZ2xfUG9zaXRpb24gPSB2ZWM0KChwcm9qZWN0aW9uTWF0cml4ICogdmVjMygoYVZlcnRleFBvc2l0aW9uK29mZnNldCksIDEuMCkpLnh5LCAwLjAsIDEuMCk7XFxuICAgIHZUZXh0dXJlQ29vcmQgPSBhVGV4dHVyZUNvb3JkO1xcblxcbiAgICB2Qmx1clRleENvb3Jkc1sgMF0gPSBhVGV4dHVyZUNvb3JkICsgdmVjMigwLjAsIC0wLjAxMiAqIHN0cmVuZ3RoKTtcXG4gICAgdkJsdXJUZXhDb29yZHNbIDFdID0gYVRleHR1cmVDb29yZCArIHZlYzIoMC4wLCAtMC4wMDggKiBzdHJlbmd0aCk7XFxuICAgIHZCbHVyVGV4Q29vcmRzWyAyXSA9IGFUZXh0dXJlQ29vcmQgKyB2ZWMyKDAuMCwgLTAuMDA0ICogc3RyZW5ndGgpO1xcbiAgICB2Qmx1clRleENvb3Jkc1sgM10gPSBhVGV4dHVyZUNvb3JkICsgdmVjMigwLjAsICAwLjAwNCAqIHN0cmVuZ3RoKTtcXG4gICAgdkJsdXJUZXhDb29yZHNbIDRdID0gYVRleHR1cmVDb29yZCArIHZlYzIoMC4wLCAgMC4wMDggKiBzdHJlbmd0aCk7XFxuICAgIHZCbHVyVGV4Q29vcmRzWyA1XSA9IGFUZXh0dXJlQ29vcmQgKyB2ZWMyKDAuMCwgIDAuMDEyICogc3RyZW5ndGgpO1xcblxcbiAgIHZDb2xvciA9IHZlYzQoYUNvbG9yLnJnYiAqIGFDb2xvci5hLCBhQ29sb3IuYSk7XFxufVxcblwiLFxuICAgICAgICAvLyBmcmFnbWVudCBzaGFkZXJcbiAgICAgICAgXCJwcmVjaXNpb24gbG93cCBmbG9hdDtcXG5cXG52YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDtcXG52YXJ5aW5nIHZlYzIgdkJsdXJUZXhDb29yZHNbNl07XFxudmFyeWluZyB2ZWM0IHZDb2xvcjtcXG5cXG51bmlmb3JtIHZlYzMgY29sb3I7XFxudW5pZm9ybSBmbG9hdCBhbHBoYTtcXG5cXG51bmlmb3JtIHNhbXBsZXIyRCB1U2FtcGxlcjtcXG5cXG52b2lkIG1haW4odm9pZClcXG57XFxuICAgIHZlYzQgc3VtID0gdmVjNCgwLjApO1xcblxcbiAgICBzdW0gKz0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2Qmx1clRleENvb3Jkc1sgMF0pKjAuMDA0NDMxODQ4NDExOTM4MzQxO1xcbiAgICBzdW0gKz0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2Qmx1clRleENvb3Jkc1sgMV0pKjAuMDUzOTkwOTY2NTEzMTg5ODU7XFxuICAgIHN1bSArPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZCbHVyVGV4Q29vcmRzWyAyXSkqMC4yNDE5NzA3MjQ1MTkxNDU0O1xcbiAgICBzdW0gKz0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2VGV4dHVyZUNvb3JkICAgICApKjAuMzk4OTQyMjgwNDAxNDMyNztcXG4gICAgc3VtICs9IHRleHR1cmUyRCh1U2FtcGxlciwgdkJsdXJUZXhDb29yZHNbIDNdKSowLjI0MTk3MDcyNDUxOTE0NTQ7XFxuICAgIHN1bSArPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZCbHVyVGV4Q29vcmRzWyA0XSkqMC4wNTM5OTA5NjY1MTMxODk4NTtcXG4gICAgc3VtICs9IHRleHR1cmUyRCh1U2FtcGxlciwgdkJsdXJUZXhDb29yZHNbIDVdKSowLjAwNDQzMTg0ODQxMTkzODM0MTtcXG5cXG4gICAgZ2xfRnJhZ0NvbG9yID0gdmVjNCggY29sb3IucmdiICogc3VtLmEgKiBhbHBoYSwgc3VtLmEgKiBhbHBoYSApO1xcbn1cXG5cIixcbiAgICAgICAgLy8gc2V0IHRoZSB1bmlmb3Jtc1xuICAgICAgICB7XG4gICAgICAgICAgICBibHVyOiB7IHR5cGU6ICcxZicsIHZhbHVlOiAxIC8gNTEyIH0sXG4gICAgICAgICAgICBjb2xvcjogeyB0eXBlOiAnYycsIHZhbHVlOiBbMCwwLDBdfSxcbiAgICAgICAgICAgIGFscGhhOiB7IHR5cGU6ICcxZicsIHZhbHVlOiAwLjcgfSxcbiAgICAgICAgICAgIG9mZnNldDogeyB0eXBlOiAnMmYnLCB2YWx1ZTpbNSwgNV19LFxuICAgICAgICAgICAgc3RyZW5ndGg6IHsgdHlwZTogJzFmJywgdmFsdWU6MX1cbiAgICAgICAgfVxuICAgICk7XG5cbiAgICB0aGlzLnBhc3NlcyA9IDE7XG4gICAgdGhpcy5zdHJlbmd0aCA9IDQ7XG59XG5cbkJsdXJZVGludEZpbHRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuQWJzdHJhY3RGaWx0ZXIucHJvdG90eXBlKTtcbkJsdXJZVGludEZpbHRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBCbHVyWVRpbnRGaWx0ZXI7XG5tb2R1bGUuZXhwb3J0cyA9IEJsdXJZVGludEZpbHRlcjtcblxuQmx1cllUaW50RmlsdGVyLnByb3RvdHlwZS5hcHBseUZpbHRlciA9IGZ1bmN0aW9uIChyZW5kZXJlciwgaW5wdXQsIG91dHB1dCwgY2xlYXIpXG57XG4gICAgdmFyIHNoYWRlciA9IHRoaXMuZ2V0U2hhZGVyKHJlbmRlcmVyKTtcblxuICAgIHRoaXMudW5pZm9ybXMuc3RyZW5ndGgudmFsdWUgPSB0aGlzLnN0cmVuZ3RoIC8gNCAvIHRoaXMucGFzc2VzICogKGlucHV0LmZyYW1lLmhlaWdodCAvIGlucHV0LnNpemUuaGVpZ2h0KTtcblxuICAgIGlmKHRoaXMucGFzc2VzID09PSAxKVxuICAgIHtcbiAgICAgICAgcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5hcHBseUZpbHRlcihzaGFkZXIsIGlucHV0LCBvdXRwdXQsIGNsZWFyKTtcbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgdmFyIHJlbmRlclRhcmdldCA9IHJlbmRlcmVyLmZpbHRlck1hbmFnZXIuZ2V0UmVuZGVyVGFyZ2V0KHRydWUpO1xuICAgICAgICB2YXIgZmxpcCA9IGlucHV0O1xuICAgICAgICB2YXIgZmxvcCA9IHJlbmRlclRhcmdldDtcblxuICAgICAgICBmb3IodmFyIGkgPSAwOyBpIDwgdGhpcy5wYXNzZXMtMTsgaSsrKVxuICAgICAgICB7XG4gICAgICAgICAgICByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLmFwcGx5RmlsdGVyKHNoYWRlciwgZmxpcCwgZmxvcCwgY2xlYXIpO1xuXG4gICAgICAgICAgIHZhciB0ZW1wID0gZmxvcDtcbiAgICAgICAgICAgZmxvcCA9IGZsaXA7XG4gICAgICAgICAgIGZsaXAgPSB0ZW1wO1xuICAgICAgICB9XG5cbiAgICAgICAgcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5hcHBseUZpbHRlcihzaGFkZXIsIGZsaXAsIG91dHB1dCwgY2xlYXIpO1xuXG4gICAgICAgIHJlbmRlcmVyLmZpbHRlck1hbmFnZXIucmV0dXJuUmVuZGVyVGFyZ2V0KHJlbmRlclRhcmdldCk7XG4gICAgfVxufTtcblxuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhCbHVyWVRpbnRGaWx0ZXIucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgc3RyZW5ndGggb2YgYm90aCB0aGUgYmx1ci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLkJsdXJZVGludEZpbHRlciNcbiAgICAgKiBAZGVmYXVsdCAyXG4gICAgICovXG4gICAgYmx1cjoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiAgdGhpcy5zdHJlbmd0aDtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMucGFkZGluZyA9IHZhbHVlICogMC41O1xuICAgICAgICAgICAgdGhpcy5zdHJlbmd0aCA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfVxufSk7XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uLy4uL2NvcmUnKSxcbiAgICBCbHVyWEZpbHRlciA9IHJlcXVpcmUoJy4uL2JsdXIvQmx1clhGaWx0ZXInKSxcbiAgICBCbHVyWVRpbnRGaWx0ZXIgPSByZXF1aXJlKCcuL0JsdXJZVGludEZpbHRlcicpO1xuXG4vKipcbiAqIFRoZSBEcm9wU2hhZG93RmlsdGVyIGFwcGxpZXMgYSBHYXVzc2lhbiBibHVyIHRvIGFuIG9iamVjdC5cbiAqIFRoZSBzdHJlbmd0aCBvZiB0aGUgYmx1ciBjYW4gYmUgc2V0IGZvciB4LSBhbmQgeS1heGlzIHNlcGFyYXRlbHkuXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLkFic3RyYWN0RmlsdGVyXG4gKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzXG4gKi9cbmZ1bmN0aW9uIERyb3BTaGFkb3dGaWx0ZXIoKVxue1xuICAgIGNvcmUuQWJzdHJhY3RGaWx0ZXIuY2FsbCh0aGlzKTtcblxuICAgIHRoaXMuYmx1clhGaWx0ZXIgPSBuZXcgQmx1clhGaWx0ZXIoKTtcbiAgICB0aGlzLmJsdXJZVGludEZpbHRlciA9IG5ldyBCbHVyWVRpbnRGaWx0ZXIoKTtcblxuICAgIHRoaXMuZGVmYXVsdEZpbHRlciA9IG5ldyBjb3JlLkFic3RyYWN0RmlsdGVyKCk7XG5cbiAgICB0aGlzLnBhZGRpbmcgPSAzMDtcblxuICAgIHRoaXMuX2RpcnR5UG9zaXRpb24gPSB0cnVlO1xuICAgIHRoaXMuX2FuZ2xlID0gNDUgKiBNYXRoLlBJIC8gMTgwO1xuICAgIHRoaXMuX2Rpc3RhbmNlID0gMTA7XG4gICAgdGhpcy5hbHBoYSA9IDAuNzU7XG4gICAgdGhpcy5oaWRlT2JqZWN0ID0gZmFsc2U7XG4gICAgdGhpcy5ibGVuZE1vZGUgPSBjb3JlLkJMRU5EX01PREVTLk1VTFRJUExZO1xufVxuXG5Ecm9wU2hhZG93RmlsdGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoY29yZS5BYnN0cmFjdEZpbHRlci5wcm90b3R5cGUpO1xuRHJvcFNoYWRvd0ZpbHRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBEcm9wU2hhZG93RmlsdGVyO1xubW9kdWxlLmV4cG9ydHMgPSBEcm9wU2hhZG93RmlsdGVyO1xuXG5Ecm9wU2hhZG93RmlsdGVyLnByb3RvdHlwZS5hcHBseUZpbHRlciA9IGZ1bmN0aW9uIChyZW5kZXJlciwgaW5wdXQsIG91dHB1dClcbntcbiAgICB2YXIgcmVuZGVyVGFyZ2V0ID0gcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5nZXRSZW5kZXJUYXJnZXQodHJ1ZSk7XG5cbiAgICAvL1RPRE8gLSBjb3B5VGV4U3ViSW1hZ2UyRCBjb3VsZCBiZSB1c2VkIGhlcmU/XG4gICAgaWYodGhpcy5fZGlydHlQb3NpdGlvbilcbiAgICB7XG4gICAgICAgIHRoaXMuX2RpcnR5UG9zaXRpb24gPSBmYWxzZTtcblxuICAgICAgICB0aGlzLmJsdXJZVGludEZpbHRlci51bmlmb3Jtcy5vZmZzZXQudmFsdWVbMF0gPSBNYXRoLnNpbih0aGlzLl9hbmdsZSkgKiB0aGlzLl9kaXN0YW5jZTtcbiAgICAgICAgdGhpcy5ibHVyWVRpbnRGaWx0ZXIudW5pZm9ybXMub2Zmc2V0LnZhbHVlWzFdID0gTWF0aC5jb3ModGhpcy5fYW5nbGUpICogdGhpcy5fZGlzdGFuY2U7XG4gICAgfVxuXG4gICAgdGhpcy5ibHVyWEZpbHRlci5hcHBseUZpbHRlcihyZW5kZXJlciwgaW5wdXQsIHJlbmRlclRhcmdldCk7XG5cbiAgICByZW5kZXJlci5ibGVuZE1vZGVNYW5hZ2VyLnNldEJsZW5kTW9kZSh0aGlzLmJsZW5kTW9kZSk7XG5cbiAgICB0aGlzLmJsdXJZVGludEZpbHRlci5hcHBseUZpbHRlcihyZW5kZXJlciwgcmVuZGVyVGFyZ2V0LCBvdXRwdXQpO1xuXG4gICAgcmVuZGVyZXIuYmxlbmRNb2RlTWFuYWdlci5zZXRCbGVuZE1vZGUoY29yZS5CTEVORF9NT0RFUy5OT1JNQUwpO1xuXG4gICAgaWYoIXRoaXMuaGlkZU9iamVjdClcbiAgICB7XG5cbiAgICAgICAgdGhpcy5kZWZhdWx0RmlsdGVyLmFwcGx5RmlsdGVyKHJlbmRlcmVyLCBpbnB1dCwgb3V0cHV0KTtcbiAgICB9XG5cblxuICAgIHJlbmRlcmVyLmZpbHRlck1hbmFnZXIucmV0dXJuUmVuZGVyVGFyZ2V0KHJlbmRlclRhcmdldCk7XG59O1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhEcm9wU2hhZG93RmlsdGVyLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIHN0cmVuZ3RoIG9mIGJvdGggdGhlIGJsdXJYIGFuZCBibHVyWSBwcm9wZXJ0aWVzIHNpbXVsdGFuZW91c2x5XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlck9mIFBJWEkuZmlsdGVycy5Ecm9wU2hhZG93RmlsdGVyI1xuICAgICAqIEBkZWZhdWx0IDJcbiAgICAgKi9cbiAgICBibHVyOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuYmx1clhGaWx0ZXIuYmx1cjtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuYmx1clhGaWx0ZXIuYmx1ciA9IHRoaXMuYmx1cllUaW50RmlsdGVyLmJsdXIgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBzdHJlbmd0aCBvZiB0aGUgYmx1clggcHJvcGVydHlcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyT2YgUElYSS5maWx0ZXJzLkRyb3BTaGFkb3dGaWx0ZXIjXG4gICAgICogQGRlZmF1bHQgMlxuICAgICAqL1xuICAgIGJsdXJYOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuYmx1clhGaWx0ZXIuYmx1cjtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuYmx1clhGaWx0ZXIuYmx1ciA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIHN0cmVuZ3RoIG9mIHRoZSBibHVyWSBwcm9wZXJ0eVxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJPZiBQSVhJLmZpbHRlcnMuRHJvcFNoYWRvd0ZpbHRlciNcbiAgICAgKiBAZGVmYXVsdCAyXG4gICAgICovXG4gICAgYmx1clk6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5ibHVyWVRpbnRGaWx0ZXIuYmx1cjtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuYmx1cllUaW50RmlsdGVyLmJsdXIgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBjb2xvciBvZiB0aGUgc2hhZG93XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlck9mIFBJWEkuZmlsdGVycy5Ecm9wU2hhZG93RmlsdGVyI1xuICAgICAqL1xuICAgIGNvbG9yOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuICBjb3JlLnV0aWxzLnJnYjJoZXgoIHRoaXMuYmx1cllUaW50RmlsdGVyLnVuaWZvcm1zLmNvbG9yLnZhbHVlICk7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmJsdXJZVGludEZpbHRlci51bmlmb3Jtcy5jb2xvci52YWx1ZSA9IGNvcmUudXRpbHMuaGV4MnJnYih2YWx1ZSk7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgYWxwaGEgb2YgdGhlIHNoYWRvd1xuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJPZiBQSVhJLmZpbHRlcnMuRHJvcFNoYWRvd0ZpbHRlciNcbiAgICAgKi9cbiAgICBhbHBoYToge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiAgdGhpcy5ibHVyWVRpbnRGaWx0ZXIudW5pZm9ybXMuYWxwaGEudmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmJsdXJZVGludEZpbHRlci51bmlmb3Jtcy5hbHBoYS52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIGRpc3RhbmNlIG9mIHRoZSBzaGFkb3dcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyT2YgUElYSS5maWx0ZXJzLkRyb3BTaGFkb3dGaWx0ZXIjXG4gICAgICovXG4gICAgZGlzdGFuY2U6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gIHRoaXMuX2Rpc3RhbmNlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5fZGlydHlQb3NpdGlvbiA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLl9kaXN0YW5jZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIGFuZ2xlIG9mIHRoZSBzaGFkb3dcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyT2YgUElYSS5maWx0ZXJzLkRyb3BTaGFkb3dGaWx0ZXIjXG4gICAgICovXG4gICAgYW5nbGU6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gIHRoaXMuX2FuZ2xlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5fZGlydHlQb3NpdGlvbiA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLl9hbmdsZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfVxufSk7XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uLy4uL2NvcmUnKTtcbi8vIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL3N1YnN0YWNrL2JyZnMvaXNzdWVzLzI1XG5cblxuLyoqXG4gKiBUaGlzIGdyZXlzY2FsZXMgdGhlIHBhbGV0dGUgb2YgeW91ciBEaXNwbGF5IE9iamVjdHMuXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLkFic3RyYWN0RmlsdGVyXG4gKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzXG4gKi9cbmZ1bmN0aW9uIEdyYXlGaWx0ZXIoKVxue1xuICAgIGNvcmUuQWJzdHJhY3RGaWx0ZXIuY2FsbCh0aGlzLFxuICAgICAgICAvLyB2ZXJ0ZXggc2hhZGVyXG4gICAgICAgIG51bGwsXG4gICAgICAgIC8vIGZyYWdtZW50IHNoYWRlclxuICAgICAgICBcInByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xcblxcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xcbnZhcnlpbmcgdmVjNCB2Q29sb3I7XFxuXFxudW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXI7XFxudW5pZm9ybSBmbG9hdCBncmF5O1xcblxcbnZvaWQgbWFpbih2b2lkKVxcbntcXG4gICBnbF9GcmFnQ29sb3IgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZUZXh0dXJlQ29vcmQpO1xcbiAgIGdsX0ZyYWdDb2xvci5yZ2IgPSBtaXgoZ2xfRnJhZ0NvbG9yLnJnYiwgdmVjMygwLjIxMjYqZ2xfRnJhZ0NvbG9yLnIgKyAwLjcxNTIqZ2xfRnJhZ0NvbG9yLmcgKyAwLjA3MjIqZ2xfRnJhZ0NvbG9yLmIpLCBncmF5KTtcXG59XFxuXCIsXG4gICAgICAgIC8vIHNldCB0aGUgdW5pZm9ybXNcbiAgICAgICAge1xuICAgICAgICAgICAgZ3JheTogeyB0eXBlOiAnMWYnLCB2YWx1ZTogMSB9XG4gICAgICAgIH1cbiAgICApO1xufVxuXG5HcmF5RmlsdGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoY29yZS5BYnN0cmFjdEZpbHRlci5wcm90b3R5cGUpO1xuR3JheUZpbHRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBHcmF5RmlsdGVyO1xubW9kdWxlLmV4cG9ydHMgPSBHcmF5RmlsdGVyO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhHcmF5RmlsdGVyLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFRoZSBzdHJlbmd0aCBvZiB0aGUgZ3JheS4gMSB3aWxsIG1ha2UgdGhlIG9iamVjdCBibGFjayBhbmQgd2hpdGUsIDAgd2lsbCBtYWtlIHRoZSBvYmplY3QgaXRzIG5vcm1hbCBjb2xvci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLkdyYXlGaWx0ZXIjXG4gICAgICovXG4gICAgZ3JheToge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVuaWZvcm1zLmdyYXkudmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLmdyYXkudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuIiwiLyoqXG4gKiBAZmlsZSAgICAgICAgTWFpbiBleHBvcnQgb2YgdGhlIFBJWEkgZmlsdGVycyBsaWJyYXJ5XG4gKiBAYXV0aG9yICAgICAgTWF0IEdyb3ZlcyA8bWF0QGdvb2Rib3lkaWdpdGFsLmNvbT5cbiAqIEBjb3B5cmlnaHQgICAyMDEzLTIwMTUgR29vZEJveURpZ2l0YWxcbiAqIEBsaWNlbnNlICAgICB7QGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL3BpeGlqcy9waXhpLmpzL2Jsb2IvbWFzdGVyL0xJQ0VOU0V8TUlUIExpY2Vuc2V9XG4gKi9cblxuLyoqXG4gKiBAbmFtZXNwYWNlIFBJWEkuZmlsdGVyc1xuICovXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgICBBc2NpaUZpbHRlcjogICAgICAgIHJlcXVpcmUoJy4vYXNjaWkvQXNjaWlGaWx0ZXInKSxcbiAgICBCbG9vbUZpbHRlcjogICAgICAgIHJlcXVpcmUoJy4vYmxvb20vQmxvb21GaWx0ZXInKSxcbiAgICBCbHVyRmlsdGVyOiAgICAgICAgIHJlcXVpcmUoJy4vYmx1ci9CbHVyRmlsdGVyJyksXG4gICAgQmx1clhGaWx0ZXI6ICAgICAgICByZXF1aXJlKCcuL2JsdXIvQmx1clhGaWx0ZXInKSxcbiAgICBCbHVyWUZpbHRlcjogICAgICAgIHJlcXVpcmUoJy4vYmx1ci9CbHVyWUZpbHRlcicpLFxuICAgIEJsdXJEaXJGaWx0ZXI6ICAgICAgcmVxdWlyZSgnLi9ibHVyL0JsdXJEaXJGaWx0ZXInKSxcbiAgICBDb2xvck1hdHJpeEZpbHRlcjogIHJlcXVpcmUoJy4vY29sb3IvQ29sb3JNYXRyaXhGaWx0ZXInKSxcbiAgICBDb2xvclN0ZXBGaWx0ZXI6ICAgIHJlcXVpcmUoJy4vY29sb3IvQ29sb3JTdGVwRmlsdGVyJyksXG4gICAgQ29udm9sdXRpb25GaWx0ZXI6ICByZXF1aXJlKCcuL2NvbnZvbHV0aW9uL0NvbnZvbHV0aW9uRmlsdGVyJyksXG4gICAgQ3Jvc3NIYXRjaEZpbHRlcjogICByZXF1aXJlKCcuL2Nyb3NzaGF0Y2gvQ3Jvc3NIYXRjaEZpbHRlcicpLFxuICAgIERpc3BsYWNlbWVudEZpbHRlcjogcmVxdWlyZSgnLi9kaXNwbGFjZW1lbnQvRGlzcGxhY2VtZW50RmlsdGVyJyksXG4gICAgRG90U2NyZWVuRmlsdGVyOiAgICByZXF1aXJlKCcuL2RvdC9Eb3RTY3JlZW5GaWx0ZXInKSxcbiAgICBHcmF5RmlsdGVyOiAgICAgICAgIHJlcXVpcmUoJy4vZ3JheS9HcmF5RmlsdGVyJyksXG4gICAgRHJvcFNoYWRvd0ZpbHRlcjogICByZXF1aXJlKCcuL2Ryb3BzaGFkb3cvRHJvcFNoYWRvd0ZpbHRlcicpLFxuICAgIEludmVydEZpbHRlcjogICAgICAgcmVxdWlyZSgnLi9pbnZlcnQvSW52ZXJ0RmlsdGVyJyksXG4gICAgTm9pc2VGaWx0ZXI6ICAgICAgICByZXF1aXJlKCcuL25vaXNlL05vaXNlRmlsdGVyJyksXG4gICAgUGl4ZWxhdGVGaWx0ZXI6ICAgICByZXF1aXJlKCcuL3BpeGVsYXRlL1BpeGVsYXRlRmlsdGVyJyksXG4gICAgUkdCU3BsaXRGaWx0ZXI6ICAgICByZXF1aXJlKCcuL3JnYi9SR0JTcGxpdEZpbHRlcicpLFxuICAgIFNob2Nrd2F2ZUZpbHRlcjogICAgcmVxdWlyZSgnLi9zaG9ja3dhdmUvU2hvY2t3YXZlRmlsdGVyJyksXG4gICAgU2VwaWFGaWx0ZXI6ICAgICAgICByZXF1aXJlKCcuL3NlcGlhL1NlcGlhRmlsdGVyJyksXG4gICAgU21hcnRCbHVyRmlsdGVyOiAgICByZXF1aXJlKCcuL2JsdXIvU21hcnRCbHVyRmlsdGVyJyksXG4gICAgVGlsdFNoaWZ0RmlsdGVyOiAgICByZXF1aXJlKCcuL3RpbHRzaGlmdC9UaWx0U2hpZnRGaWx0ZXInKSxcbiAgICBUaWx0U2hpZnRYRmlsdGVyOiAgIHJlcXVpcmUoJy4vdGlsdHNoaWZ0L1RpbHRTaGlmdFhGaWx0ZXInKSxcbiAgICBUaWx0U2hpZnRZRmlsdGVyOiAgIHJlcXVpcmUoJy4vdGlsdHNoaWZ0L1RpbHRTaGlmdFlGaWx0ZXInKSxcbiAgICBUd2lzdEZpbHRlcjogICAgICAgIHJlcXVpcmUoJy4vdHdpc3QvVHdpc3RGaWx0ZXInKVxufTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vLi4vY29yZScpO1xuLy8gQHNlZSBodHRwczovL2dpdGh1Yi5jb20vc3Vic3RhY2svYnJmcy9pc3N1ZXMvMjVcblxuXG4vKipcbiAqIFRoaXMgaW52ZXJ0cyB5b3VyIERpc3BsYXkgT2JqZWN0cyBjb2xvcnMuXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLkFic3RyYWN0RmlsdGVyXG4gKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzXG4gKi9cbmZ1bmN0aW9uIEludmVydEZpbHRlcigpXG57XG4gICAgY29yZS5BYnN0cmFjdEZpbHRlci5jYWxsKHRoaXMsXG4gICAgICAgIC8vIHZlcnRleCBzaGFkZXJcbiAgICAgICAgbnVsbCxcbiAgICAgICAgLy8gZnJhZ21lbnQgc2hhZGVyXG4gICAgICAgIFwicHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XFxuXFxudmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7XFxuXFxudW5pZm9ybSBmbG9hdCBpbnZlcnQ7XFxudW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXI7XFxuXFxudm9pZCBtYWluKHZvaWQpXFxue1xcbiAgICBnbF9GcmFnQ29sb3IgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZUZXh0dXJlQ29vcmQpO1xcblxcbiAgICBnbF9GcmFnQ29sb3IucmdiID0gbWl4KCAodmVjMygxKS1nbF9GcmFnQ29sb3IucmdiKSAqIGdsX0ZyYWdDb2xvci5hLCBnbF9GcmFnQ29sb3IucmdiLCAxLjAgLSBpbnZlcnQpO1xcbn1cXG5cIixcbiAgICAgICAgLy8gY3VzdG9tIHVuaWZvcm1zXG4gICAgICAgIHtcbiAgICAgICAgICAgIGludmVydDogeyB0eXBlOiAnMWYnLCB2YWx1ZTogMSB9XG4gICAgICAgIH1cbiAgICApO1xufVxuXG5JbnZlcnRGaWx0ZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShjb3JlLkFic3RyYWN0RmlsdGVyLnByb3RvdHlwZSk7XG5JbnZlcnRGaWx0ZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gSW52ZXJ0RmlsdGVyO1xubW9kdWxlLmV4cG9ydHMgPSBJbnZlcnRGaWx0ZXI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKEludmVydEZpbHRlci5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBUaGUgc3RyZW5ndGggb2YgdGhlIGludmVydC4gYDFgIHdpbGwgZnVsbHkgaW52ZXJ0IHRoZSBjb2xvcnMsIGFuZFxuICAgICAqIGAwYCB3aWxsIG1ha2UgdGhlIG9iamVjdCBpdHMgbm9ybWFsIGNvbG9yLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuSW52ZXJ0RmlsdGVyI1xuICAgICAqL1xuICAgIGludmVydDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVuaWZvcm1zLmludmVydC52YWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudW5pZm9ybXMuaW52ZXJ0LnZhbHVlID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG59KTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vLi4vY29yZScpO1xuLy8gQHNlZSBodHRwczovL2dpdGh1Yi5jb20vc3Vic3RhY2svYnJmcy9pc3N1ZXMvMjVcblxuXG4vKipcbiAqIEBhdXRob3IgVmljbyBAdmljb2NvdGVhXG4gKiBvcmlnaW5hbCBmaWx0ZXI6IGh0dHBzOi8vZ2l0aHViLmNvbS9ldmFudy9nbGZ4LmpzL2Jsb2IvbWFzdGVyL3NyYy9maWx0ZXJzL2FkanVzdC9ub2lzZS5qc1xuICovXG5cbi8qKlxuICogQSBOb2lzZSBlZmZlY3QgZmlsdGVyLlxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5BYnN0cmFjdEZpbHRlclxuICogQG1lbWJlcm9mIFBJWEkuZmlsdGVyc1xuICovXG5mdW5jdGlvbiBOb2lzZUZpbHRlcigpXG57XG4gICAgY29yZS5BYnN0cmFjdEZpbHRlci5jYWxsKHRoaXMsXG4gICAgICAgIC8vIHZlcnRleCBzaGFkZXJcbiAgICAgICAgbnVsbCxcbiAgICAgICAgLy8gZnJhZ21lbnQgc2hhZGVyXG4gICAgICAgIFwicHJlY2lzaW9uIGhpZ2hwIGZsb2F0O1xcblxcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xcbnZhcnlpbmcgdmVjNCB2Q29sb3I7XFxuXFxudW5pZm9ybSBmbG9hdCBub2lzZTtcXG51bmlmb3JtIHNhbXBsZXIyRCB1U2FtcGxlcjtcXG5cXG5mbG9hdCByYW5kKHZlYzIgY28pXFxue1xcbiAgICByZXR1cm4gZnJhY3Qoc2luKGRvdChjby54eSwgdmVjMigxMi45ODk4LCA3OC4yMzMpKSkgKiA0Mzc1OC41NDUzKTtcXG59XFxuXFxudm9pZCBtYWluKClcXG57XFxuICAgIHZlYzQgY29sb3IgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZUZXh0dXJlQ29vcmQpO1xcblxcbiAgICBmbG9hdCBkaWZmID0gKHJhbmQodlRleHR1cmVDb29yZCkgLSAwLjUpICogbm9pc2U7XFxuXFxuICAgIGNvbG9yLnIgKz0gZGlmZjtcXG4gICAgY29sb3IuZyArPSBkaWZmO1xcbiAgICBjb2xvci5iICs9IGRpZmY7XFxuXFxuICAgIGdsX0ZyYWdDb2xvciA9IGNvbG9yO1xcbn1cXG5cIixcbiAgICAgICAgLy8gY3VzdG9tIHVuaWZvcm1zXG4gICAgICAgIHtcbiAgICAgICAgICAgIG5vaXNlOiB7IHR5cGU6ICcxZicsIHZhbHVlOiAwLjUgfVxuICAgICAgICB9XG4gICAgKTtcbn1cblxuTm9pc2VGaWx0ZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShjb3JlLkFic3RyYWN0RmlsdGVyLnByb3RvdHlwZSk7XG5Ob2lzZUZpbHRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBOb2lzZUZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gTm9pc2VGaWx0ZXI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKE5vaXNlRmlsdGVyLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFRoZSBhbW91bnQgb2Ygbm9pc2UgdG8gYXBwbHkuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5Ob2lzZUZpbHRlciNcbiAgICAgKiBAZGVmYXVsdCAwLjVcbiAgICAgKi9cbiAgICBub2lzZToge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVuaWZvcm1zLm5vaXNlLnZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy5ub2lzZS52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfVxufSk7XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uLy4uL2NvcmUnKTtcbi8vIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL3N1YnN0YWNrL2JyZnMvaXNzdWVzLzI1XG5cblxuLyoqXG4gKiBUaGlzIGZpbHRlciBhcHBsaWVzIGEgcGl4ZWxhdGUgZWZmZWN0IG1ha2luZyBkaXNwbGF5IG9iamVjdHMgYXBwZWFyICdibG9ja3knLlxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5BYnN0cmFjdEZpbHRlclxuICogQG1lbWJlcm9mIFBJWEkuZmlsdGVyc1xuICovXG5mdW5jdGlvbiBQaXhlbGF0ZUZpbHRlcigpXG57XG4gICAgY29yZS5BYnN0cmFjdEZpbHRlci5jYWxsKHRoaXMsXG4gICAgICAgIC8vIHZlcnRleCBzaGFkZXJcbiAgICAgICAgbnVsbCxcbiAgICAgICAgLy8gZnJhZ21lbnQgc2hhZGVyXG4gICAgICAgIFwicHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XFxuXFxudmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7XFxuXFxudW5pZm9ybSB2ZWM0IGRpbWVuc2lvbnM7XFxudW5pZm9ybSB2ZWMyIHBpeGVsU2l6ZTtcXG51bmlmb3JtIHNhbXBsZXIyRCB1U2FtcGxlcjtcXG5cXG52b2lkIG1haW4odm9pZClcXG57XFxuICAgIHZlYzIgY29vcmQgPSB2VGV4dHVyZUNvb3JkO1xcblxcbiAgICB2ZWMyIHNpemUgPSBkaW1lbnNpb25zLnh5IC8gcGl4ZWxTaXplO1xcblxcbiAgICB2ZWMyIGNvbG9yID0gZmxvb3IoICggdlRleHR1cmVDb29yZCAqIHNpemUgKSApIC8gc2l6ZSArIHBpeGVsU2l6ZS9kaW1lbnNpb25zLnh5ICogMC41O1xcblxcbiAgICBnbF9GcmFnQ29sb3IgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIGNvbG9yKTtcXG59XFxuXCIsXG4gICAgICAgIC8vIGN1c3RvbSB1bmlmb3Jtc1xuICAgICAgICB7XG4gICAgICAgICAgICBkaW1lbnNpb25zOiB7IHR5cGU6ICc0ZnYnLCAgdmFsdWU6IG5ldyBGbG9hdDMyQXJyYXkoWzAsIDAsIDAsIDBdKSB9LFxuICAgICAgICAgICAgcGl4ZWxTaXplOiAgeyB0eXBlOiAndjInLCAgIHZhbHVlOiB7IHg6IDEwLCB5OiAxMCB9IH1cbiAgICAgICAgfVxuICAgICk7XG59XG5cblBpeGVsYXRlRmlsdGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoY29yZS5BYnN0cmFjdEZpbHRlci5wcm90b3R5cGUpO1xuUGl4ZWxhdGVGaWx0ZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gUGl4ZWxhdGVGaWx0ZXI7XG5tb2R1bGUuZXhwb3J0cyA9IFBpeGVsYXRlRmlsdGVyO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhQaXhlbGF0ZUZpbHRlci5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBUaGlzIGEgcG9pbnQgdGhhdCBkZXNjcmliZXMgdGhlIHNpemUgb2YgdGhlIGJsb2Nrcy5cbiAgICAgKiB4IGlzIHRoZSB3aWR0aCBvZiB0aGUgYmxvY2sgYW5kIHkgaXMgdGhlIGhlaWdodC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuUG9pbnR9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5QaXhlbGF0ZUZpbHRlciNcbiAgICAgKi9cbiAgICBzaXplOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudW5pZm9ybXMucGl4ZWxTaXplLnZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy5waXhlbFNpemUudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi8uLi9jb3JlJyk7XG4vLyBAc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9zdWJzdGFjay9icmZzL2lzc3Vlcy8yNVxuXG5cbi8qKlxuICogQW4gUkdCIFNwbGl0IEZpbHRlci5cbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQWJzdHJhY3RGaWx0ZXJcbiAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnNcbiAqL1xuZnVuY3Rpb24gUkdCU3BsaXRGaWx0ZXIoKVxue1xuICAgIGNvcmUuQWJzdHJhY3RGaWx0ZXIuY2FsbCh0aGlzLFxuICAgICAgICAvLyB2ZXJ0ZXggc2hhZGVyXG4gICAgICAgIG51bGwsXG4gICAgICAgIC8vIGZyYWdtZW50IHNoYWRlclxuICAgICAgICBcInByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xcblxcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xcblxcbnVuaWZvcm0gc2FtcGxlcjJEIHVTYW1wbGVyO1xcbnVuaWZvcm0gdmVjNCBkaW1lbnNpb25zO1xcbnVuaWZvcm0gdmVjMiByZWQ7XFxudW5pZm9ybSB2ZWMyIGdyZWVuO1xcbnVuaWZvcm0gdmVjMiBibHVlO1xcblxcbnZvaWQgbWFpbih2b2lkKVxcbntcXG4gICBnbF9GcmFnQ29sb3IuciA9IHRleHR1cmUyRCh1U2FtcGxlciwgdlRleHR1cmVDb29yZCArIHJlZC9kaW1lbnNpb25zLnh5KS5yO1xcbiAgIGdsX0ZyYWdDb2xvci5nID0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2VGV4dHVyZUNvb3JkICsgZ3JlZW4vZGltZW5zaW9ucy54eSkuZztcXG4gICBnbF9GcmFnQ29sb3IuYiA9IHRleHR1cmUyRCh1U2FtcGxlciwgdlRleHR1cmVDb29yZCArIGJsdWUvZGltZW5zaW9ucy54eSkuYjtcXG4gICBnbF9GcmFnQ29sb3IuYSA9IHRleHR1cmUyRCh1U2FtcGxlciwgdlRleHR1cmVDb29yZCkuYTtcXG59XFxuXCIsXG4gICAgICAgIC8vIGN1c3RvbSB1bmlmb3Jtc1xuICAgICAgICB7XG4gICAgICAgICAgICByZWQ6ICAgICAgICB7IHR5cGU6ICd2MicsIHZhbHVlOiB7IHg6IDIwLCB5OiAyMCB9IH0sXG4gICAgICAgICAgICBncmVlbjogICAgICB7IHR5cGU6ICd2MicsIHZhbHVlOiB7IHg6IC0yMCwgeTogMjAgfSB9LFxuICAgICAgICAgICAgYmx1ZTogICAgICAgeyB0eXBlOiAndjInLCB2YWx1ZTogeyB4OiAyMCwgeTogLTIwIH0gfSxcbiAgICAgICAgICAgIGRpbWVuc2lvbnM6IHsgdHlwZTogJzRmdicsIHZhbHVlOiBbMCwgMCwgMCwgMF0gfVxuICAgICAgICB9XG4gICAgKTtcbn1cblxuUkdCU3BsaXRGaWx0ZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShjb3JlLkFic3RyYWN0RmlsdGVyLnByb3RvdHlwZSk7XG5SR0JTcGxpdEZpbHRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBSR0JTcGxpdEZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gUkdCU3BsaXRGaWx0ZXI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKFJHQlNwbGl0RmlsdGVyLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFJlZCBjaGFubmVsIG9mZnNldC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuUG9pbnR9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5SR0JTcGxpdEZpbHRlciNcbiAgICAgKi9cbiAgICByZWQ6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy51bmlmb3Jtcy5yZWQudmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLnJlZC52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIEdyZWVuIGNoYW5uZWwgb2Zmc2V0LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5Qb2ludH1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLlJHQlNwbGl0RmlsdGVyI1xuICAgICAqL1xuICAgIGdyZWVuOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudW5pZm9ybXMuZ3JlZW4udmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLmdyZWVuLnZhbHVlID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQmx1ZSBvZmZzZXQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlBvaW50fVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuUkdCU3BsaXRGaWx0ZXIjXG4gICAgICovXG4gICAgYmx1ZToge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVuaWZvcm1zLmJsdWUudmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLmJsdWUudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi8uLi9jb3JlJyk7XG4vLyBAc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9zdWJzdGFjay9icmZzL2lzc3Vlcy8yNVxuXG5cbi8qKlxuICogVGhpcyBhcHBsaWVzIGEgc2VwaWEgZWZmZWN0IHRvIHlvdXIgRGlzcGxheSBPYmplY3RzLlxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5BYnN0cmFjdEZpbHRlclxuICogQG1lbWJlcm9mIFBJWEkuZmlsdGVyc1xuICovXG5mdW5jdGlvbiBTZXBpYUZpbHRlcigpXG57XG4gICAgY29yZS5BYnN0cmFjdEZpbHRlci5jYWxsKHRoaXMsXG4gICAgICAgIC8vIHZlcnRleCBzaGFkZXJcbiAgICAgICAgbnVsbCxcbiAgICAgICAgLy8gZnJhZ21lbnQgc2hhZGVyXG4gICAgICAgIFwicHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XFxuXFxudmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7XFxuXFxudW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXI7XFxudW5pZm9ybSBmbG9hdCBzZXBpYTtcXG5cXG5jb25zdCBtYXQzIHNlcGlhTWF0cml4ID0gbWF0MygwLjM1ODgsIDAuNzA0NCwgMC4xMzY4LCAwLjI5OTAsIDAuNTg3MCwgMC4xMTQwLCAwLjIzOTIsIDAuNDY5NiwgMC4wOTEyKTtcXG5cXG52b2lkIG1haW4odm9pZClcXG57XFxuICAgZ2xfRnJhZ0NvbG9yID0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2VGV4dHVyZUNvb3JkKTtcXG4gICBnbF9GcmFnQ29sb3IucmdiID0gbWl4KCBnbF9GcmFnQ29sb3IucmdiLCBnbF9GcmFnQ29sb3IucmdiICogc2VwaWFNYXRyaXgsIHNlcGlhKTtcXG59XFxuXCIsXG4gICAgICAgIC8vIGN1c3RvbSB1bmlmb3Jtc1xuICAgICAgICB7XG4gICAgICAgICAgICBzZXBpYTogeyB0eXBlOiAnMWYnLCB2YWx1ZTogMSB9XG4gICAgICAgIH1cbiAgICApO1xufVxuXG5TZXBpYUZpbHRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuQWJzdHJhY3RGaWx0ZXIucHJvdG90eXBlKTtcblNlcGlhRmlsdGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFNlcGlhRmlsdGVyO1xubW9kdWxlLmV4cG9ydHMgPSBTZXBpYUZpbHRlcjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoU2VwaWFGaWx0ZXIucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogVGhlIHN0cmVuZ3RoIG9mIHRoZSBzZXBpYS4gYDFgIHdpbGwgYXBwbHkgdGhlIGZ1bGwgc2VwaWEgZWZmZWN0LCBhbmRcbiAgICAgKiBgMGAgd2lsbCBtYWtlIHRoZSBvYmplY3QgaXRzIG5vcm1hbCBjb2xvci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLlNlcGlhRmlsdGVyI1xuICAgICAqL1xuICAgIHNlcGlhOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudW5pZm9ybXMuc2VwaWEudmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLnNlcGlhLnZhbHVlID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG59KTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vLi4vY29yZScpO1xuLy8gQHNlZSBodHRwczovL2dpdGh1Yi5jb20vc3Vic3RhY2svYnJmcy9pc3N1ZXMvMjVcblxuXG4vKipcbiAqIFRoZSBDb2xvck1hdHJpeEZpbHRlciBjbGFzcyBsZXRzIHlvdSBhcHBseSBhIDR4NCBtYXRyaXggdHJhbnNmb3JtYXRpb24gb24gdGhlIFJHQkFcbiAqIGNvbG9yIGFuZCBhbHBoYSB2YWx1ZXMgb2YgZXZlcnkgcGl4ZWwgb24geW91ciBkaXNwbGF5T2JqZWN0IHRvIHByb2R1Y2UgYSByZXN1bHRcbiAqIHdpdGggYSBuZXcgc2V0IG9mIFJHQkEgY29sb3IgYW5kIGFscGhhIHZhbHVlcy4gSXQncyBwcmV0dHkgcG93ZXJmdWwhXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLkFic3RyYWN0RmlsdGVyXG4gKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzXG4gKi9cbmZ1bmN0aW9uIFNob2Nrd2F2ZUZpbHRlcigpXG57XG4gICAgY29yZS5BYnN0cmFjdEZpbHRlci5jYWxsKHRoaXMsXG4gICAgICAgIC8vIHZlcnRleCBzaGFkZXJcbiAgICAgICAgbnVsbCxcbiAgICAgICAgLy8gZnJhZ21lbnQgc2hhZGVyXG4gICAgICAgIFwicHJlY2lzaW9uIGxvd3AgZmxvYXQ7XFxuXFxudmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7XFxuXFxudW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXI7XFxuXFxudW5pZm9ybSB2ZWMyIGNlbnRlcjtcXG51bmlmb3JtIHZlYzMgcGFyYW1zOyAvLyAxMC4wLCAwLjgsIDAuMVxcbnVuaWZvcm0gZmxvYXQgdGltZTtcXG5cXG52b2lkIG1haW4oKVxcbntcXG4gICAgdmVjMiB1diA9IHZUZXh0dXJlQ29vcmQ7XFxuICAgIHZlYzIgdGV4Q29vcmQgPSB1djtcXG5cXG4gICAgZmxvYXQgZGlzdCA9IGRpc3RhbmNlKHV2LCBjZW50ZXIpO1xcblxcbiAgICBpZiAoIChkaXN0IDw9ICh0aW1lICsgcGFyYW1zLnopKSAmJiAoZGlzdCA+PSAodGltZSAtIHBhcmFtcy56KSkgKVxcbiAgICB7XFxuICAgICAgICBmbG9hdCBkaWZmID0gKGRpc3QgLSB0aW1lKTtcXG4gICAgICAgIGZsb2F0IHBvd0RpZmYgPSAxLjAgLSBwb3coYWJzKGRpZmYqcGFyYW1zLngpLCBwYXJhbXMueSk7XFxuXFxuICAgICAgICBmbG9hdCBkaWZmVGltZSA9IGRpZmYgICogcG93RGlmZjtcXG4gICAgICAgIHZlYzIgZGlmZlVWID0gbm9ybWFsaXplKHV2IC0gY2VudGVyKTtcXG4gICAgICAgIHRleENvb3JkID0gdXYgKyAoZGlmZlVWICogZGlmZlRpbWUpO1xcbiAgICB9XFxuXFxuICAgIGdsX0ZyYWdDb2xvciA9IHRleHR1cmUyRCh1U2FtcGxlciwgdGV4Q29vcmQpO1xcbn1cXG5cIixcbiAgICAgICAgLy8gY3VzdG9tIHVuaWZvcm1zXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNlbnRlcjogeyB0eXBlOiAndjInLCB2YWx1ZTogeyB4OiAwLjUsIHk6IDAuNSB9IH0sXG4gICAgICAgICAgICBwYXJhbXM6IHsgdHlwZTogJ3YzJywgdmFsdWU6IHsgeDogMTAsIHk6IDAuOCwgejogMC4xIH0gfSxcbiAgICAgICAgICAgIHRpbWU6IHsgdHlwZTogJzFmJywgdmFsdWU6IDAgfVxuICAgICAgICB9XG4gICAgKTtcbn1cblxuU2hvY2t3YXZlRmlsdGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoY29yZS5BYnN0cmFjdEZpbHRlci5wcm90b3R5cGUpO1xuU2hvY2t3YXZlRmlsdGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFNob2Nrd2F2ZUZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gU2hvY2t3YXZlRmlsdGVyO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhTaG9ja3dhdmVGaWx0ZXIucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgY2VudGVyIG9mIHRoZSBzaG9ja3dhdmUgaW4gbm9ybWFsaXplZCBzY3JlZW4gY29vcmRzLiBUaGF0IGlzXG4gICAgICogKDAsMCkgaXMgdGhlIHRvcC1sZWZ0IGFuZCAoMSwxKSBpcyB0aGUgYm90dG9tIHJpZ2h0LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7b2JqZWN0PHN0cmluZywgbnVtYmVyPn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLlNob2Nrd2F2ZUZpbHRlciNcbiAgICAgKi9cbiAgICBjZW50ZXI6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy51bmlmb3Jtcy5jZW50ZXIudmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLmNlbnRlci52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfSxcbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBwYXJhbXMgb2YgdGhlIHNob2Nrd2F2ZS4gVGhlc2UgbW9kaWZ5IHRoZSBsb29rIGFuZCBiZWhhdmlvciBvZlxuICAgICAqIHRoZSBzaG9ja3dhdmUgYXMgaXQgcmlwcGxlcyBvdXQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtvYmplY3Q8c3RyaW5nLCBudW1iZXI+fVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuU2hvY2t3YXZlRmlsdGVyI1xuICAgICAqL1xuICAgIHBhcmFtczoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVuaWZvcm1zLnBhcmFtcy52YWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudW5pZm9ybXMucGFyYW1zLnZhbHVlID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9LFxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIGVsYXBzZWQgdGltZSBvZiB0aGUgc2hvY2t3YXZlLiBUaGlzIGNvbnRyb2xzIHRoZSBzcGVlZCBhdCB3aGljaFxuICAgICAqIHRoZSBzaG9ja3dhdmUgcmlwcGxlcyBvdXQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5TaG9ja3dhdmVGaWx0ZXIjXG4gICAgICovXG4gICAgdGltZToge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVuaWZvcm1zLnRpbWUudmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLnRpbWUudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi8uLi9jb3JlJyk7XG4vLyBAc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9zdWJzdGFjay9icmZzL2lzc3Vlcy8yNVxuXG5cbi8qKlxuICogQGF1dGhvciBWaWNvIEB2aWNvY290ZWFcbiAqIG9yaWdpbmFsIGZpbHRlciBodHRwczovL2dpdGh1Yi5jb20vZXZhbncvZ2xmeC5qcy9ibG9iL21hc3Rlci9zcmMvZmlsdGVycy9ibHVyL3RpbHRzaGlmdC5qcyBieSBFdmFuIFdhbGxhY2UgOiBodHRwOi8vbWFkZWJ5ZXZhbi5jb20vXG4gKi9cblxuLyoqXG4gKiBBIFRpbHRTaGlmdEF4aXNGaWx0ZXIuXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLkFic3RyYWN0RmlsdGVyXG4gKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzXG4gKi9cbmZ1bmN0aW9uIFRpbHRTaGlmdEF4aXNGaWx0ZXIoKVxue1xuICAgIGNvcmUuQWJzdHJhY3RGaWx0ZXIuY2FsbCh0aGlzLFxuICAgICAgICAvLyB2ZXJ0ZXggc2hhZGVyXG4gICAgICAgIG51bGwsXG4gICAgICAgIC8vIGZyYWdtZW50IHNoYWRlclxuICAgICAgICBcInByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xcblxcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xcblxcbnVuaWZvcm0gc2FtcGxlcjJEIHVTYW1wbGVyO1xcbnVuaWZvcm0gZmxvYXQgYmx1cjtcXG51bmlmb3JtIGZsb2F0IGdyYWRpZW50Qmx1cjtcXG51bmlmb3JtIHZlYzIgc3RhcnQ7XFxudW5pZm9ybSB2ZWMyIGVuZDtcXG51bmlmb3JtIHZlYzIgZGVsdGE7XFxudW5pZm9ybSB2ZWMyIHRleFNpemU7XFxuXFxuZmxvYXQgcmFuZG9tKHZlYzMgc2NhbGUsIGZsb2F0IHNlZWQpXFxue1xcbiAgICByZXR1cm4gZnJhY3Qoc2luKGRvdChnbF9GcmFnQ29vcmQueHl6ICsgc2VlZCwgc2NhbGUpKSAqIDQzNzU4LjU0NTMgKyBzZWVkKTtcXG59XFxuXFxudm9pZCBtYWluKHZvaWQpXFxue1xcbiAgICB2ZWM0IGNvbG9yID0gdmVjNCgwLjApO1xcbiAgICBmbG9hdCB0b3RhbCA9IDAuMDtcXG5cXG4gICAgZmxvYXQgb2Zmc2V0ID0gcmFuZG9tKHZlYzMoMTIuOTg5OCwgNzguMjMzLCAxNTEuNzE4MiksIDAuMCk7XFxuICAgIHZlYzIgbm9ybWFsID0gbm9ybWFsaXplKHZlYzIoc3RhcnQueSAtIGVuZC55LCBlbmQueCAtIHN0YXJ0LngpKTtcXG4gICAgZmxvYXQgcmFkaXVzID0gc21vb3Roc3RlcCgwLjAsIDEuMCwgYWJzKGRvdCh2VGV4dHVyZUNvb3JkICogdGV4U2l6ZSAtIHN0YXJ0LCBub3JtYWwpKSAvIGdyYWRpZW50Qmx1cikgKiBibHVyO1xcblxcbiAgICBmb3IgKGZsb2F0IHQgPSAtMzAuMDsgdCA8PSAzMC4wOyB0KyspXFxuICAgIHtcXG4gICAgICAgIGZsb2F0IHBlcmNlbnQgPSAodCArIG9mZnNldCAtIDAuNSkgLyAzMC4wO1xcbiAgICAgICAgZmxvYXQgd2VpZ2h0ID0gMS4wIC0gYWJzKHBlcmNlbnQpO1xcbiAgICAgICAgdmVjNCBzYW1wbGUgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZUZXh0dXJlQ29vcmQgKyBkZWx0YSAvIHRleFNpemUgKiBwZXJjZW50ICogcmFkaXVzKTtcXG4gICAgICAgIHNhbXBsZS5yZ2IgKj0gc2FtcGxlLmE7XFxuICAgICAgICBjb2xvciArPSBzYW1wbGUgKiB3ZWlnaHQ7XFxuICAgICAgICB0b3RhbCArPSB3ZWlnaHQ7XFxuICAgIH1cXG5cXG4gICAgZ2xfRnJhZ0NvbG9yID0gY29sb3IgLyB0b3RhbDtcXG4gICAgZ2xfRnJhZ0NvbG9yLnJnYiAvPSBnbF9GcmFnQ29sb3IuYSArIDAuMDAwMDE7XFxufVxcblwiLFxuICAgICAgICAvLyBjdXN0b20gdW5pZm9ybXNcbiAgICAgICAge1xuICAgICAgICAgICAgYmx1cjogICAgICAgICAgIHsgdHlwZTogJzFmJywgdmFsdWU6IDEwMCB9LFxuICAgICAgICAgICAgZ3JhZGllbnRCbHVyOiAgIHsgdHlwZTogJzFmJywgdmFsdWU6IDYwMCB9LFxuICAgICAgICAgICAgc3RhcnQ6ICAgICAgICAgIHsgdHlwZTogJ3YyJywgdmFsdWU6IHsgeDogMCwgICAgeTogd2luZG93LmlubmVySGVpZ2h0IC8gMiB9IH0sXG4gICAgICAgICAgICBlbmQ6ICAgICAgICAgICAgeyB0eXBlOiAndjInLCB2YWx1ZTogeyB4OiA2MDAsICB5OiB3aW5kb3cuaW5uZXJIZWlnaHQgLyAyIH0gfSxcbiAgICAgICAgICAgIGRlbHRhOiAgICAgICAgICB7IHR5cGU6ICd2MicsIHZhbHVlOiB7IHg6IDMwLCAgIHk6IDMwIH0gfSxcbiAgICAgICAgICAgIHRleFNpemU6ICAgICAgICB7IHR5cGU6ICd2MicsIHZhbHVlOiB7IHg6IHdpbmRvdy5pbm5lcldpZHRoLCB5OiB3aW5kb3cuaW5uZXJIZWlnaHQgfSB9XG4gICAgICAgIH1cbiAgICApO1xuXG4gICAgdGhpcy51cGRhdGVEZWx0YSgpO1xufVxuXG5UaWx0U2hpZnRBeGlzRmlsdGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoY29yZS5BYnN0cmFjdEZpbHRlci5wcm90b3R5cGUpO1xuVGlsdFNoaWZ0QXhpc0ZpbHRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBUaWx0U2hpZnRBeGlzRmlsdGVyO1xubW9kdWxlLmV4cG9ydHMgPSBUaWx0U2hpZnRBeGlzRmlsdGVyO1xuXG4vKipcbiAqIFVwZGF0ZXMgdGhlIGZpbHRlciBkZWx0YSB2YWx1ZXMuXG4gKiBUaGlzIGlzIG92ZXJyaWRkZW4gaW4gdGhlIFggYW5kIFkgZmlsdGVycywgZG9lcyBub3RoaW5nIGZvciB0aGlzIGNsYXNzLlxuICpcbiAqL1xuVGlsdFNoaWZ0QXhpc0ZpbHRlci5wcm90b3R5cGUudXBkYXRlRGVsdGEgPSBmdW5jdGlvbiAoKVxue1xuICAgIHRoaXMudW5pZm9ybXMuZGVsdGEudmFsdWUueCA9IDA7XG4gICAgdGhpcy51bmlmb3Jtcy5kZWx0YS52YWx1ZS55ID0gMDtcbn07XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKFRpbHRTaGlmdEF4aXNGaWx0ZXIucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogVGhlIHN0cmVuZ3RoIG9mIHRoZSBibHVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuVGlsdFNoaWZ0QXhpc0ZpbHRlciNcbiAgICAgKi9cbiAgICBibHVyOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudW5pZm9ybXMuYmx1ci52YWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudW5pZm9ybXMuYmx1ci52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFRoZSBzdHJlbmd0aCBvZiB0aGUgZ3JhZGllbnQgYmx1ci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLlRpbHRTaGlmdEF4aXNGaWx0ZXIjXG4gICAgICovXG4gICAgZ3JhZGllbnRCbHVyOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudW5pZm9ybXMuZ3JhZGllbnRCbHVyLnZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy5ncmFkaWVudEJsdXIudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBUaGUgWCB2YWx1ZSB0byBzdGFydCB0aGUgZWZmZWN0IGF0LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5Qb2ludH1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLlRpbHRTaGlmdEF4aXNGaWx0ZXIjXG4gICAgICovXG4gICAgc3RhcnQ6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy51bmlmb3Jtcy5zdGFydC52YWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudW5pZm9ybXMuc3RhcnQudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlRGVsdGEoKTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBUaGUgWCB2YWx1ZSB0byBlbmQgdGhlIGVmZmVjdCBhdC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuUG9pbnR9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5UaWx0U2hpZnRBeGlzRmlsdGVyI1xuICAgICAqL1xuICAgIGVuZDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVuaWZvcm1zLmVuZC52YWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudW5pZm9ybXMuZW5kLnZhbHVlID0gdmFsdWU7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZURlbHRhKCk7XG4gICAgICAgIH1cbiAgICB9XG59KTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vLi4vY29yZScpLFxuICAgIFRpbHRTaGlmdFhGaWx0ZXIgPSByZXF1aXJlKCcuL1RpbHRTaGlmdFhGaWx0ZXInKSxcbiAgICBUaWx0U2hpZnRZRmlsdGVyID0gcmVxdWlyZSgnLi9UaWx0U2hpZnRZRmlsdGVyJyk7XG5cbi8qKlxuICogQGF1dGhvciBWaWNvIEB2aWNvY290ZWFcbiAqIG9yaWdpbmFsIGZpbHRlciBodHRwczovL2dpdGh1Yi5jb20vZXZhbncvZ2xmeC5qcy9ibG9iL21hc3Rlci9zcmMvZmlsdGVycy9ibHVyL3RpbHRzaGlmdC5qcyBieSBFdmFuIFdhbGxhY2UgOiBodHRwOi8vbWFkZWJ5ZXZhbi5jb20vXG4gKi9cblxuLyoqXG4gKiBBIFRpbHRTaGlmdCBGaWx0ZXIuIE1hbmFnZXMgdGhlIHBhc3Mgb2YgYm90aCBhIFRpbHRTaGlmdFhGaWx0ZXIgYW5kIFRpbHRTaGlmdFlGaWx0ZXIuXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLkFic3RyYWN0RmlsdGVyXG4gKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzXG4gKi9cbmZ1bmN0aW9uIFRpbHRTaGlmdEZpbHRlcigpXG57XG4gICAgY29yZS5BYnN0cmFjdEZpbHRlci5jYWxsKHRoaXMpO1xuXG4gICAgdGhpcy50aWx0U2hpZnRYRmlsdGVyID0gbmV3IFRpbHRTaGlmdFhGaWx0ZXIoKTtcbiAgICB0aGlzLnRpbHRTaGlmdFlGaWx0ZXIgPSBuZXcgVGlsdFNoaWZ0WUZpbHRlcigpO1xufVxuXG5UaWx0U2hpZnRGaWx0ZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShjb3JlLkFic3RyYWN0RmlsdGVyLnByb3RvdHlwZSk7XG5UaWx0U2hpZnRGaWx0ZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gVGlsdFNoaWZ0RmlsdGVyO1xubW9kdWxlLmV4cG9ydHMgPSBUaWx0U2hpZnRGaWx0ZXI7XG5cblRpbHRTaGlmdEZpbHRlci5wcm90b3R5cGUuYXBwbHlGaWx0ZXIgPSBmdW5jdGlvbiAocmVuZGVyZXIsIGlucHV0LCBvdXRwdXQpXG57XG4gICAgdmFyIHJlbmRlclRhcmdldCA9IHJlbmRlcmVyLmZpbHRlck1hbmFnZXIuZ2V0UmVuZGVyVGFyZ2V0KHRydWUpO1xuXG4gICAgdGhpcy50aWx0U2hpZnRYRmlsdGVyLmFwcGx5RmlsdGVyKHJlbmRlcmVyLCBpbnB1dCwgcmVuZGVyVGFyZ2V0KTtcblxuICAgIHRoaXMudGlsdFNoaWZ0WUZpbHRlci5hcHBseUZpbHRlcihyZW5kZXJlciwgcmVuZGVyVGFyZ2V0LCBvdXRwdXQpO1xuXG4gICAgcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5yZXR1cm5SZW5kZXJUYXJnZXQocmVuZGVyVGFyZ2V0KTtcbn07XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKFRpbHRTaGlmdEZpbHRlci5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBUaGUgc3RyZW5ndGggb2YgdGhlIGJsdXIuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5UaWx0U2hpZnRGaWx0ZXIjXG4gICAgICovXG4gICAgYmx1cjoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnRpbHRTaGlmdFhGaWx0ZXIuYmx1cjtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudGlsdFNoaWZ0WEZpbHRlci5ibHVyID0gdGhpcy50aWx0U2hpZnRZRmlsdGVyLmJsdXIgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBUaGUgc3RyZW5ndGggb2YgdGhlIGdyYWRpZW50IGJsdXIuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5UaWx0U2hpZnRGaWx0ZXIjXG4gICAgICovXG4gICAgZ3JhZGllbnRCbHVyOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudGlsdFNoaWZ0WEZpbHRlci5ncmFkaWVudEJsdXI7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnRpbHRTaGlmdFhGaWx0ZXIuZ3JhZGllbnRCbHVyID0gdGhpcy50aWx0U2hpZnRZRmlsdGVyLmdyYWRpZW50Qmx1ciA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFRoZSBZIHZhbHVlIHRvIHN0YXJ0IHRoZSBlZmZlY3QgYXQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5UaWx0U2hpZnRGaWx0ZXIjXG4gICAgICovXG4gICAgc3RhcnQ6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy50aWx0U2hpZnRYRmlsdGVyLnN0YXJ0O1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy50aWx0U2hpZnRYRmlsdGVyLnN0YXJ0ID0gdGhpcy50aWx0U2hpZnRZRmlsdGVyLnN0YXJ0ID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVGhlIFkgdmFsdWUgdG8gZW5kIHRoZSBlZmZlY3QgYXQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5UaWx0U2hpZnRGaWx0ZXIjXG4gICAgICovXG4gICAgZW5kOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudGlsdFNoaWZ0WEZpbHRlci5lbmQ7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnRpbHRTaGlmdFhGaWx0ZXIuZW5kID0gdGhpcy50aWx0U2hpZnRZRmlsdGVyLmVuZCA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfVxufSk7XG4iLCJ2YXIgVGlsdFNoaWZ0QXhpc0ZpbHRlciA9IHJlcXVpcmUoJy4vVGlsdFNoaWZ0QXhpc0ZpbHRlcicpO1xuXG4vKipcbiAqIEBhdXRob3IgVmljbyBAdmljb2NvdGVhXG4gKiBvcmlnaW5hbCBmaWx0ZXIgaHR0cHM6Ly9naXRodWIuY29tL2V2YW53L2dsZnguanMvYmxvYi9tYXN0ZXIvc3JjL2ZpbHRlcnMvYmx1ci90aWx0c2hpZnQuanMgYnkgRXZhbiBXYWxsYWNlIDogaHR0cDovL21hZGVieWV2YW4uY29tL1xuICovXG5cbi8qKlxuICogQSBUaWx0U2hpZnRYRmlsdGVyLlxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5UaWx0U2hpZnRBeGlzRmlsdGVyXG4gKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzXG4gKi9cbmZ1bmN0aW9uIFRpbHRTaGlmdFhGaWx0ZXIoKVxue1xuICAgIFRpbHRTaGlmdEF4aXNGaWx0ZXIuY2FsbCh0aGlzKTtcbn1cblxuVGlsdFNoaWZ0WEZpbHRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFRpbHRTaGlmdEF4aXNGaWx0ZXIucHJvdG90eXBlKTtcblRpbHRTaGlmdFhGaWx0ZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gVGlsdFNoaWZ0WEZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gVGlsdFNoaWZ0WEZpbHRlcjtcblxuLyoqXG4gKiBVcGRhdGVzIHRoZSBmaWx0ZXIgZGVsdGEgdmFsdWVzLlxuICpcbiAqL1xuVGlsdFNoaWZ0WEZpbHRlci5wcm90b3R5cGUudXBkYXRlRGVsdGEgPSBmdW5jdGlvbiAoKVxue1xuICAgIHZhciBkeCA9IHRoaXMudW5pZm9ybXMuZW5kLnZhbHVlLnggLSB0aGlzLnVuaWZvcm1zLnN0YXJ0LnZhbHVlLng7XG4gICAgdmFyIGR5ID0gdGhpcy51bmlmb3Jtcy5lbmQudmFsdWUueSAtIHRoaXMudW5pZm9ybXMuc3RhcnQudmFsdWUueTtcbiAgICB2YXIgZCA9IE1hdGguc3FydChkeCAqIGR4ICsgZHkgKiBkeSk7XG5cbiAgICB0aGlzLnVuaWZvcm1zLmRlbHRhLnZhbHVlLnggPSBkeCAvIGQ7XG4gICAgdGhpcy51bmlmb3Jtcy5kZWx0YS52YWx1ZS55ID0gZHkgLyBkO1xufTtcbiIsInZhciBUaWx0U2hpZnRBeGlzRmlsdGVyID0gcmVxdWlyZSgnLi9UaWx0U2hpZnRBeGlzRmlsdGVyJyk7XG5cbi8qKlxuICogQGF1dGhvciBWaWNvIEB2aWNvY290ZWFcbiAqIG9yaWdpbmFsIGZpbHRlciBodHRwczovL2dpdGh1Yi5jb20vZXZhbncvZ2xmeC5qcy9ibG9iL21hc3Rlci9zcmMvZmlsdGVycy9ibHVyL3RpbHRzaGlmdC5qcyBieSBFdmFuIFdhbGxhY2UgOiBodHRwOi8vbWFkZWJ5ZXZhbi5jb20vXG4gKi9cblxuLyoqXG4gKiBBIFRpbHRTaGlmdFlGaWx0ZXIuXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLlRpbHRTaGlmdEF4aXNGaWx0ZXJcbiAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnNcbiAqL1xuZnVuY3Rpb24gVGlsdFNoaWZ0WUZpbHRlcigpXG57XG4gICAgVGlsdFNoaWZ0QXhpc0ZpbHRlci5jYWxsKHRoaXMpO1xufVxuXG5UaWx0U2hpZnRZRmlsdGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoVGlsdFNoaWZ0QXhpc0ZpbHRlci5wcm90b3R5cGUpO1xuVGlsdFNoaWZ0WUZpbHRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBUaWx0U2hpZnRZRmlsdGVyO1xubW9kdWxlLmV4cG9ydHMgPSBUaWx0U2hpZnRZRmlsdGVyO1xuXG4vKipcbiAqIFVwZGF0ZXMgdGhlIGZpbHRlciBkZWx0YSB2YWx1ZXMuXG4gKlxuICovXG5UaWx0U2hpZnRZRmlsdGVyLnByb3RvdHlwZS51cGRhdGVEZWx0YSA9IGZ1bmN0aW9uICgpXG57XG4gICAgdmFyIGR4ID0gdGhpcy51bmlmb3Jtcy5lbmQudmFsdWUueCAtIHRoaXMudW5pZm9ybXMuc3RhcnQudmFsdWUueDtcbiAgICB2YXIgZHkgPSB0aGlzLnVuaWZvcm1zLmVuZC52YWx1ZS55IC0gdGhpcy51bmlmb3Jtcy5zdGFydC52YWx1ZS55O1xuICAgIHZhciBkID0gTWF0aC5zcXJ0KGR4ICogZHggKyBkeSAqIGR5KTtcblxuICAgIHRoaXMudW5pZm9ybXMuZGVsdGEudmFsdWUueCA9IC1keSAvIGQ7XG4gICAgdGhpcy51bmlmb3Jtcy5kZWx0YS52YWx1ZS55ID0gZHggLyBkO1xufTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vLi4vY29yZScpO1xuLy8gQHNlZSBodHRwczovL2dpdGh1Yi5jb20vc3Vic3RhY2svYnJmcy9pc3N1ZXMvMjVcblxuXG4vKipcbiAqIFRoaXMgZmlsdGVyIGFwcGxpZXMgYSB0d2lzdCBlZmZlY3QgbWFraW5nIGRpc3BsYXkgb2JqZWN0cyBhcHBlYXIgdHdpc3RlZCBpbiB0aGUgZ2l2ZW4gZGlyZWN0aW9uLlxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5BYnN0cmFjdEZpbHRlclxuICogQG1lbWJlcm9mIFBJWEkuZmlsdGVyc1xuICovXG5mdW5jdGlvbiBUd2lzdEZpbHRlcigpXG57XG4gICAgY29yZS5BYnN0cmFjdEZpbHRlci5jYWxsKHRoaXMsXG4gICAgICAgIC8vIHZlcnRleCBzaGFkZXJcbiAgICAgICAgbnVsbCxcbiAgICAgICAgLy8gZnJhZ21lbnQgc2hhZGVyXG4gICAgICAgIFwicHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XFxuXFxudmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7XFxuXFxudW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXI7XFxudW5pZm9ybSBmbG9hdCByYWRpdXM7XFxudW5pZm9ybSBmbG9hdCBhbmdsZTtcXG51bmlmb3JtIHZlYzIgb2Zmc2V0O1xcblxcbnZvaWQgbWFpbih2b2lkKVxcbntcXG4gICB2ZWMyIGNvb3JkID0gdlRleHR1cmVDb29yZCAtIG9mZnNldDtcXG4gICBmbG9hdCBkaXN0ID0gbGVuZ3RoKGNvb3JkKTtcXG5cXG4gICBpZiAoZGlzdCA8IHJhZGl1cylcXG4gICB7XFxuICAgICAgIGZsb2F0IHJhdGlvID0gKHJhZGl1cyAtIGRpc3QpIC8gcmFkaXVzO1xcbiAgICAgICBmbG9hdCBhbmdsZU1vZCA9IHJhdGlvICogcmF0aW8gKiBhbmdsZTtcXG4gICAgICAgZmxvYXQgcyA9IHNpbihhbmdsZU1vZCk7XFxuICAgICAgIGZsb2F0IGMgPSBjb3MoYW5nbGVNb2QpO1xcbiAgICAgICBjb29yZCA9IHZlYzIoY29vcmQueCAqIGMgLSBjb29yZC55ICogcywgY29vcmQueCAqIHMgKyBjb29yZC55ICogYyk7XFxuICAgfVxcblxcbiAgIGdsX0ZyYWdDb2xvciA9IHRleHR1cmUyRCh1U2FtcGxlciwgY29vcmQrb2Zmc2V0KTtcXG59XFxuXCIsXG4gICAgICAgIC8vIGN1c3RvbSB1bmlmb3Jtc1xuICAgICAgICB7XG4gICAgICAgICAgICByYWRpdXM6ICAgICB7IHR5cGU6ICcxZicsIHZhbHVlOiAwLjUgfSxcbiAgICAgICAgICAgIGFuZ2xlOiAgICAgIHsgdHlwZTogJzFmJywgdmFsdWU6IDUgfSxcbiAgICAgICAgICAgIG9mZnNldDogICAgIHsgdHlwZTogJ3YyJywgdmFsdWU6IHsgeDogMC41LCB5OiAwLjUgfSB9XG4gICAgICAgIH1cbiAgICApO1xufVxuXG5Ud2lzdEZpbHRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuQWJzdHJhY3RGaWx0ZXIucHJvdG90eXBlKTtcblR3aXN0RmlsdGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFR3aXN0RmlsdGVyO1xubW9kdWxlLmV4cG9ydHMgPSBUd2lzdEZpbHRlcjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoVHdpc3RGaWx0ZXIucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogVGhpcyBwb2ludCBkZXNjcmliZXMgdGhlIHRoZSBvZmZzZXQgb2YgdGhlIHR3aXN0LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5Qb2ludH1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLlR3aXN0RmlsdGVyI1xuICAgICAqL1xuICAgIG9mZnNldDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVuaWZvcm1zLm9mZnNldC52YWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudW5pZm9ybXMub2Zmc2V0LnZhbHVlID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVGhpcyByYWRpdXMgb2YgdGhlIHR3aXN0LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuVHdpc3RGaWx0ZXIjXG4gICAgICovXG4gICAgcmFkaXVzOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudW5pZm9ybXMucmFkaXVzLnZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy5yYWRpdXMudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBUaGlzIGFuZ2xlIG9mIHRoZSB0d2lzdC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLlR3aXN0RmlsdGVyI1xuICAgICAqL1xuICAgIGFuZ2xlOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudW5pZm9ybXMuYW5nbGUudmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLmFuZ2xlLnZhbHVlID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG59KTtcbiIsIi8vIHJ1biB0aGUgcG9seWZpbGxzXG5yZXF1aXJlKCcuL3BvbHlmaWxsJyk7XG5cbnZhciBjb3JlID0gbW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL2NvcmUnKTtcblxuLy8gYWRkIGNvcmUgcGx1Z2lucy5cbmNvcmUuZXh0cmFzICAgICAgICAgPSByZXF1aXJlKCcuL2V4dHJhcycpO1xuY29yZS5maWx0ZXJzICAgICAgICA9IHJlcXVpcmUoJy4vZmlsdGVycycpO1xuY29yZS5pbnRlcmFjdGlvbiAgICA9IHJlcXVpcmUoJy4vaW50ZXJhY3Rpb24nKTtcbmNvcmUubG9hZGVycyAgICAgICAgPSByZXF1aXJlKCcuL2xvYWRlcnMnKTtcbmNvcmUubWVzaCAgICAgICAgICAgPSByZXF1aXJlKCcuL21lc2gnKTtcbmNvcmUuYWNjZXNzaWJpbGl0eSAgPSByZXF1aXJlKCcuL2FjY2Vzc2liaWxpdHknKTtcblxuLy8gZXhwb3J0IGEgcHJlbWFkZSBsb2FkZXIgaW5zdGFuY2Vcbi8qKlxuICogQSBwcmVtYWRlIGluc3RhbmNlIG9mIHRoZSBsb2FkZXIgdGhhdCBjYW4gYmUgdXNlZCB0byBsb2FkZXIgcmVzb3VyY2VzLlxuICpcbiAqIEBuYW1lIGxvYWRlclxuICogQG1lbWJlcm9mIFBJWElcbiAqIEBwcm9wZXJ0eSB7UElYSS5sb2FkZXJzLkxvYWRlcn1cbiAqL1xuY29yZS5sb2FkZXIgPSBuZXcgY29yZS5sb2FkZXJzLkxvYWRlcigpO1xuXG4vLyBtaXhpbiB0aGUgZGVwcmVjYXRpb24gZmVhdHVyZXMuXG5PYmplY3QuYXNzaWduKGNvcmUsIHJlcXVpcmUoJy4vZGVwcmVjYXRpb24nKSk7XG5cbi8vIEFsd2F5cyBleHBvcnQgcGl4aSBnbG9iYWxseS5cbmdsb2JhbC5QSVhJID0gY29yZTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vY29yZScpO1xuXG4vKipcbiAqIEhvbGRzIGFsbCBpbmZvcm1hdGlvbiByZWxhdGVkIHRvIGFuIEludGVyYWN0aW9uIGV2ZW50XG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSS5pbnRlcmFjdGlvblxuICovXG5mdW5jdGlvbiBJbnRlcmFjdGlvbkRhdGEoKVxue1xuICAgIC8qKlxuICAgICAqIFRoaXMgcG9pbnQgc3RvcmVzIHRoZSBnbG9iYWwgY29vcmRzIG9mIHdoZXJlIHRoZSB0b3VjaC9tb3VzZSBldmVudCBoYXBwZW5lZFxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5Qb2ludH1cbiAgICAgKi9cbiAgICB0aGlzLmdsb2JhbCA9IG5ldyBjb3JlLlBvaW50KCk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgdGFyZ2V0IFNwcml0ZSB0aGF0IHdhcyBpbnRlcmFjdGVkIHdpdGhcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuU3ByaXRlfVxuICAgICAqL1xuICAgIHRoaXMudGFyZ2V0ID0gbnVsbDtcblxuICAgIC8qKlxuICAgICAqIFdoZW4gcGFzc2VkIHRvIGFuIGV2ZW50IGhhbmRsZXIsIHRoaXMgd2lsbCBiZSB0aGUgb3JpZ2luYWwgRE9NIEV2ZW50IHRoYXQgd2FzIGNhcHR1cmVkXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtFdmVudH1cbiAgICAgKi9cbiAgICB0aGlzLm9yaWdpbmFsRXZlbnQgPSBudWxsO1xufVxuXG5JbnRlcmFjdGlvbkRhdGEucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gSW50ZXJhY3Rpb25EYXRhO1xubW9kdWxlLmV4cG9ydHMgPSBJbnRlcmFjdGlvbkRhdGE7XG5cbi8qKlxuICogVGhpcyB3aWxsIHJldHVybiB0aGUgbG9jYWwgY29vcmRpbmF0ZXMgb2YgdGhlIHNwZWNpZmllZCBkaXNwbGF5T2JqZWN0IGZvciB0aGlzIEludGVyYWN0aW9uRGF0YVxuICpcbiAqIEBwYXJhbSBkaXNwbGF5T2JqZWN0IHtQSVhJLkRpc3BsYXlPYmplY3R9IFRoZSBEaXNwbGF5T2JqZWN0IHRoYXQgeW91IHdvdWxkIGxpa2UgdGhlIGxvY2FsIGNvb3JkcyBvZmZcbiAqIEBwYXJhbSBbcG9pbnRdIHtQSVhJLlBvaW50fSBBIFBvaW50IG9iamVjdCBpbiB3aGljaCB0byBzdG9yZSB0aGUgdmFsdWUsIG9wdGlvbmFsIChvdGhlcndpc2Ugd2lsbCBjcmVhdGUgYSBuZXcgcG9pbnQpXG4gKiBAcGFyYW0gW2dsb2JhbFBvc10ge1BJWEkuUG9pbnR9IEEgUG9pbnQgb2JqZWN0IGNvbnRhaW5pbmcgeW91ciBjdXN0b20gZ2xvYmFsIGNvb3Jkcywgb3B0aW9uYWwgKG90aGVyd2lzZSB3aWxsIHVzZSB0aGUgY3VycmVudCBnbG9iYWwgY29vcmRzKVxuICogQHJldHVybiB7UElYSS5Qb2ludH0gQSBwb2ludCBjb250YWluaW5nIHRoZSBjb29yZGluYXRlcyBvZiB0aGUgSW50ZXJhY3Rpb25EYXRhIHBvc2l0aW9uIHJlbGF0aXZlIHRvIHRoZSBEaXNwbGF5T2JqZWN0XG4gKi9cbkludGVyYWN0aW9uRGF0YS5wcm90b3R5cGUuZ2V0TG9jYWxQb3NpdGlvbiA9IGZ1bmN0aW9uIChkaXNwbGF5T2JqZWN0LCBwb2ludCwgZ2xvYmFsUG9zKVxue1xuICAgIHJldHVybiBkaXNwbGF5T2JqZWN0LndvcmxkVHJhbnNmb3JtLmFwcGx5SW52ZXJzZShnbG9iYWxQb3MgfHwgdGhpcy5nbG9iYWwsIHBvaW50KTtcbn07XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uL2NvcmUnKSxcbiAgICBJbnRlcmFjdGlvbkRhdGEgPSByZXF1aXJlKCcuL0ludGVyYWN0aW9uRGF0YScpO1xuXG4vLyBNaXggaW50ZXJhY3RpdmVUYXJnZXQgaW50byBjb3JlLkRpc3BsYXlPYmplY3QucHJvdG90eXBlXG5PYmplY3QuYXNzaWduKFxuICAgIGNvcmUuRGlzcGxheU9iamVjdC5wcm90b3R5cGUsXG4gICAgcmVxdWlyZSgnLi9pbnRlcmFjdGl2ZVRhcmdldCcpXG4pO1xuXG4vKipcbiAqIFRoZSBpbnRlcmFjdGlvbiBtYW5hZ2VyIGRlYWxzIHdpdGggbW91c2UgYW5kIHRvdWNoIGV2ZW50cy4gQW55IERpc3BsYXlPYmplY3QgY2FuIGJlIGludGVyYWN0aXZlXG4gKiBpZiBpdHMgaW50ZXJhY3RpdmUgcGFyYW1ldGVyIGlzIHNldCB0byB0cnVlXG4gKiBUaGlzIG1hbmFnZXIgYWxzbyBzdXBwb3J0cyBtdWx0aXRvdWNoLlxuICpcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWEkuaW50ZXJhY3Rpb25cbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5DYW52YXNSZW5kZXJlcnxQSVhJLldlYkdMUmVuZGVyZXJ9IEEgcmVmZXJlbmNlIHRvIHRoZSBjdXJyZW50IHJlbmRlcmVyXG4gKiBAcGFyYW0gW29wdGlvbnNdIHtvYmplY3R9XG4gKiBAcGFyYW0gW29wdGlvbnMuYXV0b1ByZXZlbnREZWZhdWx0PXRydWVdIHtib29sZWFufSBTaG91bGQgdGhlIG1hbmFnZXIgYXV0b21hdGljYWxseSBwcmV2ZW50IGRlZmF1bHQgYnJvd3NlciBhY3Rpb25zLlxuICogQHBhcmFtIFtvcHRpb25zLmludGVyYWN0aW9uRnJlcXVlbmN5PTEwXSB7bnVtYmVyfSBGcmVxdWVuY3kgaW5jcmVhc2VzIHRoZSBpbnRlcmFjdGlvbiBldmVudHMgd2lsbCBiZSBjaGVja2VkLlxuICovXG5mdW5jdGlvbiBJbnRlcmFjdGlvbk1hbmFnZXIocmVuZGVyZXIsIG9wdGlvbnMpXG57XG4gICAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG5cbiAgICAvKipcbiAgICAgKiBUaGUgcmVuZGVyZXIgdGhpcyBpbnRlcmFjdGlvbiBtYW5hZ2VyIHdvcmtzIGZvci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuU3lzdGVtUmVuZGVyZXJ9XG4gICAgICovXG4gICAgdGhpcy5yZW5kZXJlciA9IHJlbmRlcmVyO1xuXG4gICAgLyoqXG4gICAgICogU2hvdWxkIGRlZmF1bHQgYnJvd3NlciBhY3Rpb25zIGF1dG9tYXRpY2FsbHkgYmUgcHJldmVudGVkLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKiBAZGVmYXVsdCB0cnVlXG4gICAgICovXG4gICAgdGhpcy5hdXRvUHJldmVudERlZmF1bHQgPSBvcHRpb25zLmF1dG9QcmV2ZW50RGVmYXVsdCAhPT0gdW5kZWZpbmVkID8gb3B0aW9ucy5hdXRvUHJldmVudERlZmF1bHQgOiB0cnVlO1xuXG4gICAgLyoqXG4gICAgICogQXMgdGhpcyBmcmVxdWVuY3kgaW5jcmVhc2VzIHRoZSBpbnRlcmFjdGlvbiBldmVudHMgd2lsbCBiZSBjaGVja2VkIG1vcmUgb2Z0ZW4uXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMTBcbiAgICAgKi9cbiAgICB0aGlzLmludGVyYWN0aW9uRnJlcXVlbmN5ID0gb3B0aW9ucy5pbnRlcmFjdGlvbkZyZXF1ZW5jeSB8fCAxMDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBtb3VzZSBkYXRhXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLmludGVyYWN0aW9uLkludGVyYWN0aW9uRGF0YX1cbiAgICAgKi9cbiAgICB0aGlzLm1vdXNlID0gbmV3IEludGVyYWN0aW9uRGF0YSgpO1xuXG4gICAgLyoqXG4gICAgICogQW4gZXZlbnQgZGF0YSBvYmplY3QgdG8gaGFuZGxlIGFsbCB0aGUgZXZlbnQgdHJhY2tpbmcvZGlzcGF0Y2hpbmdcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge29iamVjdH1cbiAgICAgKi9cbiAgICB0aGlzLmV2ZW50RGF0YSA9IHtcbiAgICAgICAgc3RvcHBlZDogZmFsc2UsXG4gICAgICAgIHRhcmdldDogbnVsbCxcbiAgICAgICAgdHlwZTogbnVsbCxcbiAgICAgICAgZGF0YTogdGhpcy5tb3VzZSxcbiAgICAgICAgc3RvcFByb3BhZ2F0aW9uOmZ1bmN0aW9uKCl7XG4gICAgICAgICAgICB0aGlzLnN0b3BwZWQgPSB0cnVlO1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIC8qKlxuICAgICAqIFRpbnkgbGl0dGxlIGludGVyYWN0aXZlRGF0YSBwb29sICFcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuaW50ZXJhY3Rpb24uSW50ZXJhY3Rpb25EYXRhW119XG4gICAgICovXG4gICAgdGhpcy5pbnRlcmFjdGl2ZURhdGFQb29sID0gW107XG5cbiAgICAvKipcbiAgICAgKiBUaGUgRE9NIGVsZW1lbnQgdG8gYmluZCB0by5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge0hUTUxFbGVtZW50fVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5pbnRlcmFjdGlvbkRPTUVsZW1lbnQgPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogSGF2ZSBldmVudHMgYmVlbiBhdHRhY2hlZCB0byB0aGUgZG9tIGVsZW1lbnQ/XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5ldmVudHNBZGRlZCA9IGZhbHNlO1xuXG4gICAgLy90aGlzIHdpbGwgbWFrZSBpdCBzbyB0aGF0IHlvdSBkb24ndCBoYXZlIHRvIGNhbGwgYmluZCBhbGwgdGhlIHRpbWVcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge0Z1bmN0aW9ufVxuICAgICAqL1xuICAgIHRoaXMub25Nb3VzZVVwID0gdGhpcy5vbk1vdXNlVXAuYmluZCh0aGlzKTtcbiAgICB0aGlzLnByb2Nlc3NNb3VzZVVwID0gdGhpcy5wcm9jZXNzTW91c2VVcC5iaW5kKCB0aGlzICk7XG5cblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge0Z1bmN0aW9ufVxuICAgICAqL1xuICAgIHRoaXMub25Nb3VzZURvd24gPSB0aGlzLm9uTW91c2VEb3duLmJpbmQodGhpcyk7XG4gICAgdGhpcy5wcm9jZXNzTW91c2VEb3duID0gdGhpcy5wcm9jZXNzTW91c2VEb3duLmJpbmQoIHRoaXMgKTtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge0Z1bmN0aW9ufVxuICAgICAqL1xuICAgIHRoaXMub25Nb3VzZU1vdmUgPSB0aGlzLm9uTW91c2VNb3ZlLmJpbmQoIHRoaXMgKTtcbiAgICB0aGlzLnByb2Nlc3NNb3VzZU1vdmUgPSB0aGlzLnByb2Nlc3NNb3VzZU1vdmUuYmluZCggdGhpcyApO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7RnVuY3Rpb259XG4gICAgICovXG4gICAgdGhpcy5vbk1vdXNlT3V0ID0gdGhpcy5vbk1vdXNlT3V0LmJpbmQodGhpcyk7XG4gICAgdGhpcy5wcm9jZXNzTW91c2VPdmVyT3V0ID0gdGhpcy5wcm9jZXNzTW91c2VPdmVyT3V0LmJpbmQoIHRoaXMgKTtcblxuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7RnVuY3Rpb259XG4gICAgICovXG4gICAgdGhpcy5vblRvdWNoU3RhcnQgPSB0aGlzLm9uVG91Y2hTdGFydC5iaW5kKHRoaXMpO1xuICAgIHRoaXMucHJvY2Vzc1RvdWNoU3RhcnQgPSB0aGlzLnByb2Nlc3NUb3VjaFN0YXJ0LmJpbmQodGhpcyk7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtGdW5jdGlvbn1cbiAgICAgKi9cbiAgICB0aGlzLm9uVG91Y2hFbmQgPSB0aGlzLm9uVG91Y2hFbmQuYmluZCh0aGlzKTtcbiAgICB0aGlzLnByb2Nlc3NUb3VjaEVuZCA9IHRoaXMucHJvY2Vzc1RvdWNoRW5kLmJpbmQodGhpcyk7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtGdW5jdGlvbn1cbiAgICAgKi9cbiAgICB0aGlzLm9uVG91Y2hNb3ZlID0gdGhpcy5vblRvdWNoTW92ZS5iaW5kKHRoaXMpO1xuICAgIHRoaXMucHJvY2Vzc1RvdWNoTW92ZSA9IHRoaXMucHJvY2Vzc1RvdWNoTW92ZS5iaW5kKHRoaXMpO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMubGFzdCA9IDA7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgY3NzIHN0eWxlIG9mIHRoZSBjdXJzb3IgdGhhdCBpcyBiZWluZyB1c2VkXG4gICAgICogQG1lbWJlciB7c3RyaW5nfVxuICAgICAqL1xuICAgIHRoaXMuY3VycmVudEN1cnNvclN0eWxlID0gJ2luaGVyaXQnO1xuXG4gICAgLyoqXG4gICAgICogSW50ZXJuYWwgY2FjaGVkIHZhclxuICAgICAqIEBtZW1iZXIge1BJWEkuUG9pbnR9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl90ZW1wUG9pbnQgPSBuZXcgY29yZS5Qb2ludCgpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGN1cnJlbnQgcmVzb2x1dGlvblxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLnJlc29sdXRpb24gPSAxO1xuXG4gICAgdGhpcy5zZXRUYXJnZXRFbGVtZW50KHRoaXMucmVuZGVyZXIudmlldywgdGhpcy5yZW5kZXJlci5yZXNvbHV0aW9uKTtcbn1cblxuSW50ZXJhY3Rpb25NYW5hZ2VyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IEludGVyYWN0aW9uTWFuYWdlcjtcbm1vZHVsZS5leHBvcnRzID0gSW50ZXJhY3Rpb25NYW5hZ2VyO1xuXG4vKipcbiAqIFNldHMgdGhlIERPTSBlbGVtZW50IHdoaWNoIHdpbGwgcmVjZWl2ZSBtb3VzZS90b3VjaCBldmVudHMuIFRoaXMgaXMgdXNlZnVsIGZvciB3aGVuIHlvdSBoYXZlXG4gKiBvdGhlciBET00gZWxlbWVudHMgb24gdG9wIG9mIHRoZSByZW5kZXJlcnMgQ2FudmFzIGVsZW1lbnQuIFdpdGggdGhpcyB5b3UnbGwgYmUgYmFsZSB0byBkZWxldGVnYXRlXG4gKiBhbm90aGVyIERPTSBlbGVtZW50IHRvIHJlY2VpdmUgdGhvc2UgZXZlbnRzLlxuICpcbiAqIEBwYXJhbSBlbGVtZW50IHtIVE1MRWxlbWVudH0gdGhlIERPTSBlbGVtZW50IHdoaWNoIHdpbGwgcmVjZWl2ZSBtb3VzZSBhbmQgdG91Y2ggZXZlbnRzLlxuICogQHBhcmFtIFtyZXNvbHV0aW9uPTFdIHtudW1iZXJ9IFRIZSByZXNvbHV0aW9uIG9mIHRoZSBuZXcgZWxlbWVudCAocmVsYXRpdmUgdG8gdGhlIGNhbnZhcykuXG4gKiBAcHJpdmF0ZVxuICovXG5JbnRlcmFjdGlvbk1hbmFnZXIucHJvdG90eXBlLnNldFRhcmdldEVsZW1lbnQgPSBmdW5jdGlvbiAoZWxlbWVudCwgcmVzb2x1dGlvbilcbntcbiAgICB0aGlzLnJlbW92ZUV2ZW50cygpO1xuXG4gICAgdGhpcy5pbnRlcmFjdGlvbkRPTUVsZW1lbnQgPSBlbGVtZW50O1xuXG4gICAgdGhpcy5yZXNvbHV0aW9uID0gcmVzb2x1dGlvbiB8fCAxO1xuXG4gICAgdGhpcy5hZGRFdmVudHMoKTtcbn07XG5cbi8qKlxuICogUmVnaXN0ZXJzIGFsbCB0aGUgRE9NIGV2ZW50c1xuICpcbiAqIEBwcml2YXRlXG4gKi9cbkludGVyYWN0aW9uTWFuYWdlci5wcm90b3R5cGUuYWRkRXZlbnRzID0gZnVuY3Rpb24gKClcbntcbiAgICBpZiAoIXRoaXMuaW50ZXJhY3Rpb25ET01FbGVtZW50KVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvcmUudGlja2VyLnNoYXJlZC5hZGQodGhpcy51cGRhdGUsIHRoaXMpO1xuXG4gICAgaWYgKHdpbmRvdy5uYXZpZ2F0b3IubXNQb2ludGVyRW5hYmxlZClcbiAgICB7XG4gICAgICAgIHRoaXMuaW50ZXJhY3Rpb25ET01FbGVtZW50LnN0eWxlWyctbXMtY29udGVudC16b29taW5nJ10gPSAnbm9uZSc7XG4gICAgICAgIHRoaXMuaW50ZXJhY3Rpb25ET01FbGVtZW50LnN0eWxlWyctbXMtdG91Y2gtYWN0aW9uJ10gPSAnbm9uZSc7XG4gICAgfVxuXG4gICAgd2luZG93LmRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlbW92ZScsICAgIHRoaXMub25Nb3VzZU1vdmUsIHRydWUpO1xuICAgIHRoaXMuaW50ZXJhY3Rpb25ET01FbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlZG93bicsICAgIHRoaXMub25Nb3VzZURvd24sIHRydWUpO1xuICAgIHRoaXMuaW50ZXJhY3Rpb25ET01FbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlb3V0JywgICAgIHRoaXMub25Nb3VzZU91dCwgdHJ1ZSk7XG5cbiAgICB0aGlzLmludGVyYWN0aW9uRE9NRWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCd0b3VjaHN0YXJ0JywgICB0aGlzLm9uVG91Y2hTdGFydCwgdHJ1ZSk7XG4gICAgdGhpcy5pbnRlcmFjdGlvbkRPTUVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigndG91Y2hlbmQnLCAgICAgdGhpcy5vblRvdWNoRW5kLCB0cnVlKTtcbiAgICB0aGlzLmludGVyYWN0aW9uRE9NRWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCd0b3VjaG1vdmUnLCAgICB0aGlzLm9uVG91Y2hNb3ZlLCB0cnVlKTtcblxuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdtb3VzZXVwJywgIHRoaXMub25Nb3VzZVVwLCB0cnVlKTtcblxuICAgIHRoaXMuZXZlbnRzQWRkZWQgPSB0cnVlO1xufTtcblxuLyoqXG4gKiBSZW1vdmVzIGFsbCB0aGUgRE9NIGV2ZW50cyB0aGF0IHdlcmUgcHJldmlvdXNseSByZWdpc3RlcmVkXG4gKlxuICogQHByaXZhdGVcbiAqL1xuSW50ZXJhY3Rpb25NYW5hZ2VyLnByb3RvdHlwZS5yZW1vdmVFdmVudHMgPSBmdW5jdGlvbiAoKVxue1xuICAgIGlmICghdGhpcy5pbnRlcmFjdGlvbkRPTUVsZW1lbnQpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29yZS50aWNrZXIuc2hhcmVkLnJlbW92ZSh0aGlzLnVwZGF0ZSk7XG5cbiAgICBpZiAod2luZG93Lm5hdmlnYXRvci5tc1BvaW50ZXJFbmFibGVkKVxuICAgIHtcbiAgICAgICAgdGhpcy5pbnRlcmFjdGlvbkRPTUVsZW1lbnQuc3R5bGVbJy1tcy1jb250ZW50LXpvb21pbmcnXSA9ICcnO1xuICAgICAgICB0aGlzLmludGVyYWN0aW9uRE9NRWxlbWVudC5zdHlsZVsnLW1zLXRvdWNoLWFjdGlvbiddID0gJyc7XG4gICAgfVxuXG4gICAgd2luZG93LmRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21vdXNlbW92ZScsIHRoaXMub25Nb3VzZU1vdmUsIHRydWUpO1xuICAgIHRoaXMuaW50ZXJhY3Rpb25ET01FbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21vdXNlZG93bicsIHRoaXMub25Nb3VzZURvd24sIHRydWUpO1xuICAgIHRoaXMuaW50ZXJhY3Rpb25ET01FbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21vdXNlb3V0JywgIHRoaXMub25Nb3VzZU91dCwgdHJ1ZSk7XG5cbiAgICB0aGlzLmludGVyYWN0aW9uRE9NRWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCd0b3VjaHN0YXJ0JywgdGhpcy5vblRvdWNoU3RhcnQsIHRydWUpO1xuICAgIHRoaXMuaW50ZXJhY3Rpb25ET01FbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3RvdWNoZW5kJywgIHRoaXMub25Ub3VjaEVuZCwgdHJ1ZSk7XG4gICAgdGhpcy5pbnRlcmFjdGlvbkRPTUVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigndG91Y2htb3ZlJywgdGhpcy5vblRvdWNoTW92ZSwgdHJ1ZSk7XG5cbiAgICB0aGlzLmludGVyYWN0aW9uRE9NRWxlbWVudCA9IG51bGw7XG5cbiAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcignbW91c2V1cCcsICB0aGlzLm9uTW91c2VVcCwgdHJ1ZSk7XG5cbiAgICB0aGlzLmV2ZW50c0FkZGVkID0gZmFsc2U7XG59O1xuXG4vKipcbiAqIFVwZGF0ZXMgdGhlIHN0YXRlIG9mIGludGVyYWN0aXZlIG9iamVjdHMuXG4gKiBJbnZva2VkIGJ5IGEgdGhyb3R0bGVkIHRpY2tlciB1cGRhdGUgZnJvbVxuICoge0BsaW5rIFBJWEkudGlja2VyLnNoYXJlZH0uXG4gKlxuICogQHBhcmFtIGRlbHRhVGltZSB7bnVtYmVyfVxuICovXG5JbnRlcmFjdGlvbk1hbmFnZXIucHJvdG90eXBlLnVwZGF0ZSA9IGZ1bmN0aW9uIChkZWx0YVRpbWUpXG57XG4gICAgdGhpcy5fZGVsdGFUaW1lICs9IGRlbHRhVGltZTtcblxuICAgIGlmICh0aGlzLl9kZWx0YVRpbWUgPCB0aGlzLmludGVyYWN0aW9uRnJlcXVlbmN5KVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuX2RlbHRhVGltZSA9IDA7XG5cbiAgICBpZiAoIXRoaXMuaW50ZXJhY3Rpb25ET01FbGVtZW50KVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIGlmIHRoZSB1c2VyIG1vdmUgdGhlIG1vdXNlIHRoaXMgY2hlY2sgaGFzIGFscmVhZHkgYmVlbiBkZm9uZSB1c2luZyB0aGUgbW91c2UgbW92ZSFcbiAgICBpZih0aGlzLmRpZE1vdmUpXG4gICAge1xuICAgICAgICB0aGlzLmRpZE1vdmUgPSBmYWxzZTtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuY3Vyc29yID0gJ2luaGVyaXQnO1xuXG4gICAgdGhpcy5wcm9jZXNzSW50ZXJhY3RpdmUodGhpcy5tb3VzZS5nbG9iYWwsIHRoaXMucmVuZGVyZXIuX2xhc3RPYmplY3RSZW5kZXJlZCwgdGhpcy5wcm9jZXNzTW91c2VPdmVyT3V0LCB0cnVlICk7XG5cbiAgICBpZiAodGhpcy5jdXJyZW50Q3Vyc29yU3R5bGUgIT09IHRoaXMuY3Vyc29yKVxuICAgIHtcbiAgICAgICAgdGhpcy5jdXJyZW50Q3Vyc29yU3R5bGUgPSB0aGlzLmN1cnNvcjtcbiAgICAgICAgdGhpcy5pbnRlcmFjdGlvbkRPTUVsZW1lbnQuc3R5bGUuY3Vyc29yID0gdGhpcy5jdXJzb3I7XG4gICAgfVxuXG4gICAgLy9UT0RPXG59O1xuXG4vKipcbiAqIERpc3BhdGNoZXMgYW4gZXZlbnQgb24gdGhlIGRpc3BsYXkgb2JqZWN0IHRoYXQgd2FzIGludGVyYWN0ZWQgd2l0aFxuICpcbiAqIEBwYXJhbSBkaXNwbGF5T2JqZWN0IHtQSVhJLkNvbnRhaW5lcnxQSVhJLlNwcml0ZXxQSVhJLmV4dHJhcy5UaWxpbmdTcHJpdGV9IHRoZSBkaXNwbGF5IG9iamVjdCBpbiBxdWVzdGlvblxuICogQHBhcmFtIGV2ZW50U3RyaW5nIHtzdHJpbmd9IHRoZSBuYW1lIG9mIHRoZSBldmVudCAoZS5nLCBtb3VzZWRvd24pXG4gKiBAcGFyYW0gZXZlbnREYXRhIHtvYmplY3R9IHRoZSBldmVudCBkYXRhIG9iamVjdFxuICogQHByaXZhdGVcbiAqL1xuSW50ZXJhY3Rpb25NYW5hZ2VyLnByb3RvdHlwZS5kaXNwYXRjaEV2ZW50ID0gZnVuY3Rpb24gKCBkaXNwbGF5T2JqZWN0LCBldmVudFN0cmluZywgZXZlbnREYXRhIClcbntcbiAgICBpZighZXZlbnREYXRhLnN0b3BwZWQpXG4gICAge1xuICAgICAgICBldmVudERhdGEudGFyZ2V0ID0gZGlzcGxheU9iamVjdDtcbiAgICAgICAgZXZlbnREYXRhLnR5cGUgPSBldmVudFN0cmluZztcblxuICAgICAgICBkaXNwbGF5T2JqZWN0LmVtaXQoIGV2ZW50U3RyaW5nLCBldmVudERhdGEgKTtcblxuICAgICAgICBpZiggZGlzcGxheU9iamVjdFtldmVudFN0cmluZ10gKVxuICAgICAgICB7XG4gICAgICAgICAgICBkaXNwbGF5T2JqZWN0W2V2ZW50U3RyaW5nXSggZXZlbnREYXRhICk7XG4gICAgICAgIH1cbiAgICB9XG59O1xuXG4vKipcbiAqIE1hcHMgeCBhbmQgeSBjb29yZHMgZnJvbSBhIERPTSBvYmplY3QgYW5kIG1hcHMgdGhlbSBjb3JyZWN0bHkgdG8gdGhlIHBpeGkgdmlldy4gVGhlIHJlc3VsdGluZyB2YWx1ZSBpcyBzdG9yZWQgaW4gdGhlIHBvaW50LlxuICogVGhpcyB0YWtlcyBpbnRvIGFjY291bnQgdGhlIGZhY3QgdGhhdCB0aGUgRE9NIGVsZW1lbnQgY291bGQgYmUgc2NhbGVkIGFuZCBwb3NpdGlvbmVkIGFueXdoZXJlIG9uIHRoZSBzY3JlZW4uXG4gKlxuICogQHBhcmFtICB7UElYSS5Qb2ludH0gcG9pbnQgdGhlIHBvaW50IHRoYXQgdGhlIHJlc3VsdCB3aWxsIGJlIHN0b3JlZCBpblxuICogQHBhcmFtICB7bnVtYmVyfSB4ICAgICB0aGUgeCBjb29yZCBvZiB0aGUgcG9zaXRpb24gdG8gbWFwXG4gKiBAcGFyYW0gIHtudW1iZXJ9IHkgICAgIHRoZSB5IGNvb3JkIG9mIHRoZSBwb3NpdGlvbiB0byBtYXBcbiAqL1xuSW50ZXJhY3Rpb25NYW5hZ2VyLnByb3RvdHlwZS5tYXBQb3NpdGlvblRvUG9pbnQgPSBmdW5jdGlvbiAoIHBvaW50LCB4LCB5IClcbntcbiAgICB2YXIgcmVjdCA9IHRoaXMuaW50ZXJhY3Rpb25ET01FbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgIHBvaW50LnggPSAoICggeCAtIHJlY3QubGVmdCApICogKHRoaXMuaW50ZXJhY3Rpb25ET01FbGVtZW50LndpZHRoICAvIHJlY3Qud2lkdGggICkgKSAvIHRoaXMucmVzb2x1dGlvbjtcbiAgICBwb2ludC55ID0gKCAoIHkgLSByZWN0LnRvcCAgKSAqICh0aGlzLmludGVyYWN0aW9uRE9NRWxlbWVudC5oZWlnaHQgLyByZWN0LmhlaWdodCApICkgLyB0aGlzLnJlc29sdXRpb247XG59O1xuXG4vKipcbiAqIFRoaXMgZnVuY3Rpb24gaXMgcHJvdmlkZXMgYSBuZWF0IHdheSBvZiBjcmF3bGluZyB0aHJvdWdoIHRoZSBzY2VuZSBncmFwaCBhbmQgcnVubmluZyBhIHNwZWNpZmllZCBmdW5jdGlvbiBvbiBhbGwgaW50ZXJhY3RpdmUgb2JqZWN0cyBpdCBmaW5kcy5cbiAqIEl0IHdpbGwgYWxzbyB0YWtlIGNhcmUgb2YgaGl0IHRlc3RpbmcgdGhlIGludGVyYWN0aXZlIG9iamVjdHMgYW5kIHBhc3NlcyB0aGUgaGl0IGFjcm9zcyBpbiB0aGUgZnVuY3Rpb24uXG4gKlxuICogQHBhcmFtICB7UElYSS5Qb2ludH0gcG9pbnQgdGhlIHBvaW50IHRoYXQgaXMgdGVzdGVkIGZvciBjb2xsaXNpb25cbiAqIEBwYXJhbSAge1BJWEkuQ29udGFpbmVyfFBJWEkuU3ByaXRlfFBJWEkuZXh0cmFzLlRpbGluZ1Nwcml0ZX0gZGlzcGxheU9iamVjdCB0aGUgZGlzcGxheU9iamVjdCB0aGF0IHdpbGwgYmUgaGl0IHRlc3QgKHJlY3VyY3Npdmx5IGNyYXdscyBpdHMgY2hpbGRyZW4pXG4gKiBAcGFyYW0gIHtGdW5jdGlvbn0gZnVuYyB0aGUgZnVuY3Rpb24gdGhhdCB3aWxsIGJlIGNhbGxlZCBvbiBlYWNoIGludGVyYWN0aXZlIG9iamVjdC4gVGhlIGRpc3BsYXlPYmplY3QgYW5kIGhpdCB3aWxsIGJlIHBhc3NlZCB0byB0aGUgZnVuY3Rpb25cbiAqIEBwYXJhbSAge2Jvb2xlYW59IGhpdFRlc3QgdGhpcyBpbmRpY2F0ZXMgaWYgdGhlIG9iamVjdHMgaW5zaWRlIHNob3VsZCBiZSBoaXQgdGVzdCBhZ2FpbnN0IHRoZSBwb2ludFxuICogQHJldHVybiB7Ym9vbGVhbn0gcmV0dXJucyB0cnVlIGlmIHRoZSBkaXNwbGF5T2JqZWN0IGhpdCB0aGUgcG9pbnRcbiAqL1xuSW50ZXJhY3Rpb25NYW5hZ2VyLnByb3RvdHlwZS5wcm9jZXNzSW50ZXJhY3RpdmUgPSBmdW5jdGlvbiAocG9pbnQsIGRpc3BsYXlPYmplY3QsIGZ1bmMsIGhpdFRlc3QsIGludGVyYWN0aXZlKVxue1xuICAgIGlmKCFkaXNwbGF5T2JqZWN0IHx8ICFkaXNwbGF5T2JqZWN0LnZpc2libGUpXG4gICAge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgLy8gVG9vayBhIGxpdHRsZSB3aGlsZSB0byByZXdvcmsgdGhpcyBmdW5jdGlvbiBjb3JyZWN0bHkhIEJ1dCBub3cgaXQgaXMgZG9uZSBhbmQgbmljZSBhbmQgb3B0aW1pc2VkLiBeX15cbiAgICAvLyBcbiAgICAvLyBUaGlzIGZ1bmN0aW9uIHdpbGwgbm93IGxvb3AgdGhyb3VnaCBhbGwgb2JqZWN0cyBhbmQgdGhlbiBvbmx5IGhpdCB0ZXN0IHRoZSBvYmplY3RzIGl0IEhBUyB0bywgbm90IGFsbCBvZiB0aGVtLiBNVUNIIGZhc3Rlci4uXG4gICAgLy8gQW4gb2JqZWN0IHdpbGwgYmUgaGl0IHRlc3QgaWYgdGhlIGZvbGxvd2luZyBpcyB0cnVlOlxuICAgIC8vIFxuICAgIC8vIDE6IEl0IGlzIGludGVyYWN0aXZlLlxuICAgIC8vIDI6IEl0IGJlbG9uZ3MgdG8gYSBwYXJlbnQgdGhhdCBpcyBpbnRlcmFjdGl2ZSBBTkQgb25lIG9mIHRoZSBwYXJlbnRzIGNoaWxkcmVuIGhhdmUgbm90IGFscmVhZHkgYmVlbiBoaXQuXG4gICAgLy8gXG4gICAgLy8gQXMgYW5vdGhlciBsaXR0bGUgb3B0aW1pc2F0aW9uIG9uY2UgYW4gaW50ZXJhY3RpdmUgb2JqZWN0IGhhcyBiZWVuIGhpdCB3ZSBjYW4gY2Fycnkgb24gdGhyb3VnaCB0aGUgc2NlbmVncmFwaCwgYnV0IHdlIGtub3cgdGhhdCB0aGVyZSB3aWxsIGJlIG5vIG1vcmUgaGl0cyEgU28gd2UgY2FuIGF2b2lkIGV4dHJhIGhpdCB0ZXN0c1xuICAgIC8vIEEgZmluYWwgb3B0aW1pc2F0aW9uIGlzIHRoYXQgYW4gb2JqZWN0IGlzIG5vdCBoaXQgdGVzdCBkaXJlY3RseSBpZiBhIGNoaWxkIGhhcyBhbHJlYWR5IGJlZW4gaGl0LlxuICAgIFxuICAgIHZhciBoaXQgPSBmYWxzZSxcbiAgICAgICAgaW50ZXJhY3RpdmVQYXJlbnQgPSBpbnRlcmFjdGl2ZSA9IGRpc3BsYXlPYmplY3QuaW50ZXJhY3RpdmUgfHwgaW50ZXJhY3RpdmU7XG5cbiAgICAvLyBpZiB0aGUgZGlzcGxheW9iamVjdCBoYXMgYSBoaXRBcmVhLCB0aGVuIGl0IGRvZXMgbm90IG5lZWQgdG8gaGl0VGVzdCBjaGlsZHJlbi5cbiAgICBpZihkaXNwbGF5T2JqZWN0LmhpdEFyZWEpXG4gICAge1xuICAgICAgICBpbnRlcmFjdGl2ZVBhcmVudCA9IGZhbHNlO1xuICAgIH1cblxuICAgIC8vICoqIEZSRUUgVElQICoqISBJZiBhbiBvYmplY3QgaXMgbm90IGludGVyYWN0dGl2ZSBvciBoYXMgbm8gYnV0dG9ucyBpbiBpdCAoc3VjaCBhcyBhIGdhbWUgc2NlbmUhKSBzZXQgaW50ZXJhY3RpdmVDaGlsZHJlbiB0byBmYWxzZSBmb3IgdGhhdCBkaXNwbGF5T2JqZWN0LlxuICAgIC8vIFRoaXMgd2lsbCBhbGxvdyBwaXhpIHRvIGNvbXBsZXRseSBpZ25vcmUgYW5kIGJ5cGFzcyBjaGVja2luZyB0aGUgZGlzcGxheU9iamVjdHMgY2hpbGRyZW4uXG4gICAgaWYoZGlzcGxheU9iamVjdC5pbnRlcmFjdGl2ZUNoaWxkcmVuKVxuICAgIHsgICAgICAgXG4gICAgICAgIHZhciBjaGlsZHJlbiA9IGRpc3BsYXlPYmplY3QuY2hpbGRyZW47XG4gICAgICAgIFxuICAgICAgICBmb3IgKHZhciBpID0gY2hpbGRyZW4ubGVuZ3RoLTE7IGkgPj0gMDsgaS0tKVxuICAgICAgICB7XG4gICAgICAgICAgICAvLyB0aW1lIHRvIGdldCByZWN1cnNpdmUuLiBpZiB0aGlzIGZ1bmN0aW9uIHdpbGwgcmV0dXJuIGlmIHNvbXRoaW5nIGlzIGhpdC4uXG4gICAgICAgICAgICBpZiggdGhpcy5wcm9jZXNzSW50ZXJhY3RpdmUocG9pbnQsIGNoaWxkcmVuW2ldLCBmdW5jLCBoaXRUZXN0LCBpbnRlcmFjdGl2ZVBhcmVudCkgKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGhpdCA9IHRydWU7XG5cbiAgICAgICAgICAgICAgICAvLyB3ZSBubyBsb25nZXIgbmVlZCB0byBoaXQgdGVzdCBhbnkgbW9yZSBvYmplY3RzIGluIHRoaXMgY29udGFpbmVyIGFzIHdlIHdlIG5vdyBrbm93IHRoZSBwYXJlbnQgaGFzIGJlZW4gaGl0XG4gICAgICAgICAgICAgICAgaW50ZXJhY3RpdmVQYXJlbnQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAvLyBJZiB0aGUgY2hpbGQgaXMgaW50ZXJhY3RpdmUgLCB0aGF0IG1lYW5zIHRoYXQgdGhlIG9iamVjdCBoaXQgd2FzIGFjdHVhbGx5IGludGVyYWN0aXZlIGFuZCBub3QganVzdCB0aGUgY2hpbGQgb2YgYW4gaW50ZXJhY3RpdmUgb2JqZWN0LiBcbiAgICAgICAgICAgICAgICAvLyBUaGlzIG1lYW5zIHdlIG5vIGxvbmdlciBuZWVkIHRvIGhpdCB0ZXN0IGFueXRoaW5nIGVsc2UuIFdlIHN0aWxsIG5lZWQgdG8gcnVuIHRocm91Z2ggYWxsIG9iamVjdHMsIGJ1dCB3ZSBkb24ndCBuZWVkIHRvIHBlcmZvcm0gYW55IGhpdCB0ZXN0cy5cbiAgICAgICAgICAgICAgICBpZihjaGlsZHJlbltpXS5pbnRlcmFjdGl2ZSlcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIGhpdFRlc3QgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBubyBwb2ludCBydW5uaW5nIHRoaXMgaWYgdGhlIGl0ZW0gaXMgbm90IGludGVyYWN0aXZlIG9yIGRvZXMgbm90IGhhdmUgYW4gaW50ZXJhY3RpdmUgcGFyZW50LlxuICAgIGlmKGludGVyYWN0aXZlKVxuICAgIHtcbiAgICAgICAgLy8gaWYgd2UgYXJlIGhpdCB0ZXN0aW5nIChhcyBpbiB3ZSBoYXZlIG5vIGhpdCBhbnkgb2JqZWN0cyB5ZXQpXG4gICAgICAgIC8vIFdlIGFsc28gZG9uJ3QgbmVlZCB0byB3b3JyeSBhYm91dCBoaXQgdGVzdGluZyBpZiBvbmNlIG9mIHRoZSBkaXNwbGF5T2JqZWN0cyBjaGlsZHJlbiBoYXMgYWxyZWFkeSBiZWVuIGhpdCFcbiAgICAgICAgaWYoaGl0VGVzdCAmJiAhaGl0KVxuICAgICAgICB7ICBcbiAgICAgICAgICAgIGlmKGRpc3BsYXlPYmplY3QuaGl0QXJlYSlcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBkaXNwbGF5T2JqZWN0LndvcmxkVHJhbnNmb3JtLmFwcGx5SW52ZXJzZShwb2ludCwgIHRoaXMuX3RlbXBQb2ludCk7XG4gICAgICAgICAgICAgICAgaGl0ID0gZGlzcGxheU9iamVjdC5oaXRBcmVhLmNvbnRhaW5zKCB0aGlzLl90ZW1wUG9pbnQueCwgdGhpcy5fdGVtcFBvaW50LnkgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYoZGlzcGxheU9iamVjdC5jb250YWluc1BvaW50KVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGhpdCA9IGRpc3BsYXlPYmplY3QuY29udGFpbnNQb2ludChwb2ludCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZihkaXNwbGF5T2JqZWN0LmludGVyYWN0aXZlKVxuICAgICAgICB7XG4gICAgICAgICAgICBmdW5jKGRpc3BsYXlPYmplY3QsIGhpdCk7IFxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGhpdDtcbiAgXG59O1xuXG5cbi8qKlxuICogSXMgY2FsbGVkIHdoZW4gdGhlIG1vdXNlIGJ1dHRvbiBpcyBwcmVzc2VkIGRvd24gb24gdGhlIHJlbmRlcmVyIGVsZW1lbnRcbiAqXG4gKiBAcGFyYW0gZXZlbnQge0V2ZW50fSBUaGUgRE9NIGV2ZW50IG9mIGEgbW91c2UgYnV0dG9uIGJlaW5nIHByZXNzZWQgZG93blxuICogQHByaXZhdGVcbiAqL1xuSW50ZXJhY3Rpb25NYW5hZ2VyLnByb3RvdHlwZS5vbk1vdXNlRG93biA9IGZ1bmN0aW9uIChldmVudClcbntcbiAgICB0aGlzLm1vdXNlLm9yaWdpbmFsRXZlbnQgPSBldmVudDtcbiAgICB0aGlzLmV2ZW50RGF0YS5kYXRhID0gdGhpcy5tb3VzZTtcbiAgICB0aGlzLmV2ZW50RGF0YS5zdG9wcGVkID0gZmFsc2U7XG5cbiAgICAvLyBVcGRhdGUgaW50ZXJuYWwgbW91c2UgcmVmZXJlbmNlXG4gICAgdGhpcy5tYXBQb3NpdGlvblRvUG9pbnQoIHRoaXMubW91c2UuZ2xvYmFsLCBldmVudC5jbGllbnRYLCBldmVudC5jbGllbnRZKTtcblxuICAgIGlmICh0aGlzLmF1dG9QcmV2ZW50RGVmYXVsdClcbiAgICB7XG4gICAgICAgIHRoaXMubW91c2Uub3JpZ2luYWxFdmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIH1cblxuICAgIHRoaXMucHJvY2Vzc0ludGVyYWN0aXZlKHRoaXMubW91c2UuZ2xvYmFsLCB0aGlzLnJlbmRlcmVyLl9sYXN0T2JqZWN0UmVuZGVyZWQsIHRoaXMucHJvY2Vzc01vdXNlRG93biwgdHJ1ZSApO1xufTtcblxuLyoqXG4gKiBQcm9jZXNzZXMgdGhlIHJlc3VsdCBvZiB0aGUgbW91c2UgZG93biBjaGVjayBhbmQgZGlzcGF0Y2hlcyB0aGUgZXZlbnQgaWYgbmVlZCBiZVxuICpcbiAqIEBwYXJhbSBkaXNwbGF5T2JqZWN0IHtQSVhJLkNvbnRhaW5lcnxQSVhJLlNwcml0ZXxQSVhJLmV4dHJhcy5UaWxpbmdTcHJpdGV9IFRoZSBkaXNwbGF5IG9iamVjdCB0aGF0IHdhcyB0ZXN0ZWRcbiAqIEBwYXJhbSBoaXQge2Jvb2xlYW59IHRoZSByZXN1bHQgb2YgdGhlIGhpdCB0ZXN0IG9uIHRoZSBkaXNwYXkgb2JqZWN0XG4gKiBAcHJpdmF0ZVxuICovXG5JbnRlcmFjdGlvbk1hbmFnZXIucHJvdG90eXBlLnByb2Nlc3NNb3VzZURvd24gPSBmdW5jdGlvbiAoIGRpc3BsYXlPYmplY3QsIGhpdCApXG57XG4gICAgdmFyIGUgPSB0aGlzLm1vdXNlLm9yaWdpbmFsRXZlbnQ7XG4gICAgXG4gICAgdmFyIGlzUmlnaHRCdXR0b24gPSBlLmJ1dHRvbiA9PT0gMiB8fCBlLndoaWNoID09PSAzO1xuXG4gICAgaWYoaGl0KVxuICAgIHtcbiAgICAgICAgZGlzcGxheU9iamVjdFsgaXNSaWdodEJ1dHRvbiA/ICdfaXNSaWdodERvd24nIDogJ19pc0xlZnREb3duJyBdID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50KCBkaXNwbGF5T2JqZWN0LCBpc1JpZ2h0QnV0dG9uID8gJ3JpZ2h0ZG93bicgOiAnbW91c2Vkb3duJywgdGhpcy5ldmVudERhdGEgKTtcbiAgICB9XG59O1xuXG5cblxuLyoqXG4gKiBJcyBjYWxsZWQgd2hlbiB0aGUgbW91c2UgYnV0dG9uIGlzIHJlbGVhc2VkIG9uIHRoZSByZW5kZXJlciBlbGVtZW50XG4gKlxuICogQHBhcmFtIGV2ZW50IHtFdmVudH0gVGhlIERPTSBldmVudCBvZiBhIG1vdXNlIGJ1dHRvbiBiZWluZyByZWxlYXNlZFxuICogQHByaXZhdGVcbiAqL1xuSW50ZXJhY3Rpb25NYW5hZ2VyLnByb3RvdHlwZS5vbk1vdXNlVXAgPSBmdW5jdGlvbiAoZXZlbnQpXG57XG4gICAgdGhpcy5tb3VzZS5vcmlnaW5hbEV2ZW50ID0gZXZlbnQ7XG4gICAgdGhpcy5ldmVudERhdGEuZGF0YSA9IHRoaXMubW91c2U7XG4gICAgdGhpcy5ldmVudERhdGEuc3RvcHBlZCA9IGZhbHNlO1xuXG4gICAgLy8gVXBkYXRlIGludGVybmFsIG1vdXNlIHJlZmVyZW5jZVxuICAgIHRoaXMubWFwUG9zaXRpb25Ub1BvaW50KCB0aGlzLm1vdXNlLmdsb2JhbCwgZXZlbnQuY2xpZW50WCwgZXZlbnQuY2xpZW50WSk7XG5cbiAgICB0aGlzLnByb2Nlc3NJbnRlcmFjdGl2ZSh0aGlzLm1vdXNlLmdsb2JhbCwgdGhpcy5yZW5kZXJlci5fbGFzdE9iamVjdFJlbmRlcmVkLCB0aGlzLnByb2Nlc3NNb3VzZVVwLCB0cnVlICk7XG59O1xuXG4vKipcbiAqIFByb2Nlc3NlcyB0aGUgcmVzdWx0IG9mIHRoZSBtb3VzZSB1cCBjaGVjayBhbmQgZGlzcGF0Y2hlcyB0aGUgZXZlbnQgaWYgbmVlZCBiZVxuICpcbiAqIEBwYXJhbSBkaXNwbGF5T2JqZWN0IHtQSVhJLkNvbnRhaW5lcnxQSVhJLlNwcml0ZXxQSVhJLmV4dHJhcy5UaWxpbmdTcHJpdGV9IFRoZSBkaXNwbGF5IG9iamVjdCB0aGF0IHdhcyB0ZXN0ZWRcbiAqIEBwYXJhbSBoaXQge2Jvb2xlYW59IHRoZSByZXN1bHQgb2YgdGhlIGhpdCB0ZXN0IG9uIHRoZSBkaXNwbGF5IG9iamVjdFxuICogQHByaXZhdGVcbiAqL1xuSW50ZXJhY3Rpb25NYW5hZ2VyLnByb3RvdHlwZS5wcm9jZXNzTW91c2VVcCA9IGZ1bmN0aW9uICggZGlzcGxheU9iamVjdCwgaGl0IClcbntcbiAgICB2YXIgZSA9IHRoaXMubW91c2Uub3JpZ2luYWxFdmVudDtcblxuICAgIHZhciBpc1JpZ2h0QnV0dG9uID0gZS5idXR0b24gPT09IDIgfHwgZS53aGljaCA9PT0gMztcbiAgICB2YXIgaXNEb3duID0gIGlzUmlnaHRCdXR0b24gPyAnX2lzUmlnaHREb3duJyA6ICdfaXNMZWZ0RG93bic7XG5cbiAgICBpZihoaXQpXG4gICAge1xuICAgICAgICB0aGlzLmRpc3BhdGNoRXZlbnQoIGRpc3BsYXlPYmplY3QsIGlzUmlnaHRCdXR0b24gPyAncmlnaHR1cCcgOiAnbW91c2V1cCcsIHRoaXMuZXZlbnREYXRhICk7XG5cbiAgICAgICAgaWYoIGRpc3BsYXlPYmplY3RbIGlzRG93biBdIClcbiAgICAgICAge1xuICAgICAgICAgICAgZGlzcGxheU9iamVjdFsgaXNEb3duIF0gPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudCggZGlzcGxheU9iamVjdCwgaXNSaWdodEJ1dHRvbiA/ICdyaWdodGNsaWNrJyA6ICdjbGljaycsIHRoaXMuZXZlbnREYXRhICk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgaWYoIGRpc3BsYXlPYmplY3RbIGlzRG93biBdIClcbiAgICAgICAge1xuICAgICAgICAgICAgZGlzcGxheU9iamVjdFsgaXNEb3duIF0gPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudCggZGlzcGxheU9iamVjdCwgaXNSaWdodEJ1dHRvbiA/ICdyaWdodHVwb3V0c2lkZScgOiAnbW91c2V1cG91dHNpZGUnLCB0aGlzLmV2ZW50RGF0YSApO1xuICAgICAgICB9XG4gICAgfVxufTtcblxuXG4vKipcbiAqIElzIGNhbGxlZCB3aGVuIHRoZSBtb3VzZSBtb3ZlcyBhY3Jvc3MgdGhlIHJlbmRlcmVyIGVsZW1lbnRcbiAqXG4gKiBAcGFyYW0gZXZlbnQge0V2ZW50fSBUaGUgRE9NIGV2ZW50IG9mIHRoZSBtb3VzZSBtb3ZpbmdcbiAqIEBwcml2YXRlXG4gKi9cbkludGVyYWN0aW9uTWFuYWdlci5wcm90b3R5cGUub25Nb3VzZU1vdmUgPSBmdW5jdGlvbiAoZXZlbnQpXG57XG4gICAgdGhpcy5tb3VzZS5vcmlnaW5hbEV2ZW50ID0gZXZlbnQ7XG4gICAgdGhpcy5ldmVudERhdGEuZGF0YSA9IHRoaXMubW91c2U7XG4gICAgdGhpcy5ldmVudERhdGEuc3RvcHBlZCA9IGZhbHNlO1xuXG4gICAgdGhpcy5tYXBQb3NpdGlvblRvUG9pbnQoIHRoaXMubW91c2UuZ2xvYmFsLCBldmVudC5jbGllbnRYLCBldmVudC5jbGllbnRZKTtcblxuICAgIHRoaXMuZGlkTW92ZSA9IHRydWU7XG5cbiAgICB0aGlzLmN1cnNvciA9ICdpbmhlcml0JztcblxuICAgIHRoaXMucHJvY2Vzc0ludGVyYWN0aXZlKHRoaXMubW91c2UuZ2xvYmFsLCB0aGlzLnJlbmRlcmVyLl9sYXN0T2JqZWN0UmVuZGVyZWQsIHRoaXMucHJvY2Vzc01vdXNlTW92ZSwgdHJ1ZSApO1xuXG4gICAgaWYgKHRoaXMuY3VycmVudEN1cnNvclN0eWxlICE9PSB0aGlzLmN1cnNvcilcbiAgICB7XG4gICAgICAgIHRoaXMuY3VycmVudEN1cnNvclN0eWxlID0gdGhpcy5jdXJzb3I7XG4gICAgICAgIHRoaXMuaW50ZXJhY3Rpb25ET01FbGVtZW50LnN0eWxlLmN1cnNvciA9IHRoaXMuY3Vyc29yO1xuICAgIH1cblxuICAgIC8vVE9ETyBCVUcgZm9yIHBhcmVudHMgaW5lcmFjdGl2ZSBvYmplY3QgKGJvcmRlciBvcmRlciBpc3N1ZSlcbn07XG5cbi8qKlxuICogUHJvY2Vzc2VzIHRoZSByZXN1bHQgb2YgdGhlIG1vdXNlIG1vdmUgY2hlY2sgYW5kIGRpc3BhdGNoZXMgdGhlIGV2ZW50IGlmIG5lZWQgYmVcbiAqXG4gKiBAcGFyYW0gZGlzcGxheU9iamVjdCB7UElYSS5Db250YWluZXJ8UElYSS5TcHJpdGV8UElYSS5leHRyYXMuVGlsaW5nU3ByaXRlfSBUaGUgZGlzcGxheSBvYmplY3QgdGhhdCB3YXMgdGVzdGVkXG4gKiBAcGFyYW0gaGl0IHtib29sZWFufSB0aGUgcmVzdWx0IG9mIHRoZSBoaXQgdGVzdCBvbiB0aGUgZGlzcGxheSBvYmplY3RcbiAqIEBwcml2YXRlXG4gKi9cbkludGVyYWN0aW9uTWFuYWdlci5wcm90b3R5cGUucHJvY2Vzc01vdXNlTW92ZSA9IGZ1bmN0aW9uICggZGlzcGxheU9iamVjdCwgaGl0IClcbntcbiAgICB0aGlzLmRpc3BhdGNoRXZlbnQoIGRpc3BsYXlPYmplY3QsICdtb3VzZW1vdmUnLCB0aGlzLmV2ZW50RGF0YSk7XG4gICAgdGhpcy5wcm9jZXNzTW91c2VPdmVyT3V0KGRpc3BsYXlPYmplY3QsIGhpdCk7XG59O1xuXG5cbi8qKlxuICogSXMgY2FsbGVkIHdoZW4gdGhlIG1vdXNlIGlzIG1vdmVkIG91dCBvZiB0aGUgcmVuZGVyZXIgZWxlbWVudFxuICpcbiAqIEBwYXJhbSBldmVudCB7RXZlbnR9IFRoZSBET00gZXZlbnQgb2YgYSBtb3VzZSBiZWluZyBtb3ZlZCBvdXRcbiAqIEBwcml2YXRlXG4gKi9cbkludGVyYWN0aW9uTWFuYWdlci5wcm90b3R5cGUub25Nb3VzZU91dCA9IGZ1bmN0aW9uIChldmVudClcbntcbiAgICB0aGlzLm1vdXNlLm9yaWdpbmFsRXZlbnQgPSBldmVudDtcbiAgICB0aGlzLmV2ZW50RGF0YS5zdG9wcGVkID0gZmFsc2U7XG5cbiAgICAvLyBVcGRhdGUgaW50ZXJuYWwgbW91c2UgcmVmZXJlbmNlXG4gICAgdGhpcy5tYXBQb3NpdGlvblRvUG9pbnQoIHRoaXMubW91c2UuZ2xvYmFsLCBldmVudC5jbGllbnRYLCBldmVudC5jbGllbnRZKTtcblxuICAgIHRoaXMuaW50ZXJhY3Rpb25ET01FbGVtZW50LnN0eWxlLmN1cnNvciA9ICdpbmhlcml0JztcblxuICAgIC8vIFRPRE8gb3B0aW1pemUgYnkgbm90IGNoZWNrIEVWRVJZIFRJTUUhIG1heWJlIGhhbGYgYXMgb2Z0ZW4/IC8vXG4gICAgdGhpcy5tYXBQb3NpdGlvblRvUG9pbnQoIHRoaXMubW91c2UuZ2xvYmFsLCBldmVudC5jbGllbnRYLCBldmVudC5jbGllbnRZICk7XG5cbiAgICB0aGlzLnByb2Nlc3NJbnRlcmFjdGl2ZSggdGhpcy5tb3VzZS5nbG9iYWwsIHRoaXMucmVuZGVyZXIuX2xhc3RPYmplY3RSZW5kZXJlZCwgdGhpcy5wcm9jZXNzTW91c2VPdmVyT3V0LCBmYWxzZSApO1xufTtcblxuLyoqXG4gKiBQcm9jZXNzZXMgdGhlIHJlc3VsdCBvZiB0aGUgbW91c2Ugb3Zlci9vdXQgY2hlY2sgYW5kIGRpc3BhdGNoZXMgdGhlIGV2ZW50IGlmIG5lZWQgYmVcbiAqXG4gKiBAcGFyYW0gZGlzcGxheU9iamVjdCB7UElYSS5Db250YWluZXJ8UElYSS5TcHJpdGV8UElYSS5leHRyYXMuVGlsaW5nU3ByaXRlfSBUaGUgZGlzcGxheSBvYmplY3QgdGhhdCB3YXMgdGVzdGVkXG4gKiBAcGFyYW0gaGl0IHtib29sZWFufSB0aGUgcmVzdWx0IG9mIHRoZSBoaXQgdGVzdCBvbiB0aGUgZGlzcGxheSBvYmplY3RcbiAqIEBwcml2YXRlXG4gKi9cbkludGVyYWN0aW9uTWFuYWdlci5wcm90b3R5cGUucHJvY2Vzc01vdXNlT3Zlck91dCA9IGZ1bmN0aW9uICggZGlzcGxheU9iamVjdCwgaGl0IClcbntcbiAgICBpZihoaXQpXG4gICAge1xuICAgICAgICBpZighZGlzcGxheU9iamVjdC5fb3ZlcilcbiAgICAgICAge1xuICAgICAgICAgICAgZGlzcGxheU9iamVjdC5fb3ZlciA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLmRpc3BhdGNoRXZlbnQoIGRpc3BsYXlPYmplY3QsICdtb3VzZW92ZXInLCB0aGlzLmV2ZW50RGF0YSApO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGRpc3BsYXlPYmplY3QuYnV0dG9uTW9kZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5jdXJzb3IgPSBkaXNwbGF5T2JqZWN0LmRlZmF1bHRDdXJzb3I7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgaWYoZGlzcGxheU9iamVjdC5fb3ZlcilcbiAgICAgICAge1xuICAgICAgICAgICAgZGlzcGxheU9iamVjdC5fb3ZlciA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50KCBkaXNwbGF5T2JqZWN0LCAnbW91c2VvdXQnLCB0aGlzLmV2ZW50RGF0YSk7XG4gICAgICAgIH1cbiAgICB9XG59O1xuXG5cbi8qKlxuICogSXMgY2FsbGVkIHdoZW4gYSB0b3VjaCBpcyBzdGFydGVkIG9uIHRoZSByZW5kZXJlciBlbGVtZW50XG4gKlxuICogQHBhcmFtIGV2ZW50IHtFdmVudH0gVGhlIERPTSBldmVudCBvZiBhIHRvdWNoIHN0YXJ0aW5nIG9uIHRoZSByZW5kZXJlciB2aWV3XG4gKiBAcHJpdmF0ZVxuICovXG5JbnRlcmFjdGlvbk1hbmFnZXIucHJvdG90eXBlLm9uVG91Y2hTdGFydCA9IGZ1bmN0aW9uIChldmVudClcbntcbiAgICBpZiAodGhpcy5hdXRvUHJldmVudERlZmF1bHQpXG4gICAge1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIH1cblxuICAgIHZhciBjaGFuZ2VkVG91Y2hlcyA9IGV2ZW50LmNoYW5nZWRUb3VjaGVzO1xuICAgIHZhciBjTGVuZ3RoID0gY2hhbmdlZFRvdWNoZXMubGVuZ3RoO1xuXG4gICAgZm9yICh2YXIgaT0wOyBpIDwgY0xlbmd0aDsgaSsrKVxuICAgIHtcbiAgICAgICAgdmFyIHRvdWNoRXZlbnQgPSBjaGFuZ2VkVG91Y2hlc1tpXTtcbiAgICAgICAgLy9UT0RPIFBPT0xcbiAgICAgICAgdmFyIHRvdWNoRGF0YSA9IHRoaXMuZ2V0VG91Y2hEYXRhKCB0b3VjaEV2ZW50ICk7XG5cbiAgICAgICAgdG91Y2hEYXRhLm9yaWdpbmFsRXZlbnQgPSBldmVudDtcblxuICAgICAgICB0aGlzLmV2ZW50RGF0YS5kYXRhID0gdG91Y2hEYXRhO1xuICAgICAgICB0aGlzLmV2ZW50RGF0YS5zdG9wcGVkID0gZmFsc2U7XG5cbiAgICAgICAgdGhpcy5wcm9jZXNzSW50ZXJhY3RpdmUoIHRvdWNoRGF0YS5nbG9iYWwsIHRoaXMucmVuZGVyZXIuX2xhc3RPYmplY3RSZW5kZXJlZCwgdGhpcy5wcm9jZXNzVG91Y2hTdGFydCwgdHJ1ZSApO1xuXG4gICAgICAgIHRoaXMucmV0dXJuVG91Y2hEYXRhKCB0b3VjaERhdGEgKTtcbiAgICB9XG59O1xuXG4vKipcbiAqIFByb2Nlc3NlcyB0aGUgcmVzdWx0IG9mIGEgdG91Y2ggY2hlY2sgYW5kIGRpc3BhdGNoZXMgdGhlIGV2ZW50IGlmIG5lZWQgYmVcbiAqXG4gKiBAcGFyYW0gZGlzcGxheU9iamVjdCB7UElYSS5Db250YWluZXJ8UElYSS5TcHJpdGV8UElYSS5leHRyYXMuVGlsaW5nU3ByaXRlfSBUaGUgZGlzcGxheSBvYmplY3QgdGhhdCB3YXMgdGVzdGVkXG4gKiBAcGFyYW0gaGl0IHtib29sZWFufSB0aGUgcmVzdWx0IG9mIHRoZSBoaXQgdGVzdCBvbiB0aGUgZGlzcGxheSBvYmplY3RcbiAqIEBwcml2YXRlXG4gKi9cbkludGVyYWN0aW9uTWFuYWdlci5wcm90b3R5cGUucHJvY2Vzc1RvdWNoU3RhcnQgPSBmdW5jdGlvbiAoIGRpc3BsYXlPYmplY3QsIGhpdCApXG57XG4gICAgaWYoaGl0KVxuICAgIHtcbiAgICAgICAgZGlzcGxheU9iamVjdC5fdG91Y2hEb3duID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50KCBkaXNwbGF5T2JqZWN0LCAndG91Y2hzdGFydCcsIHRoaXMuZXZlbnREYXRhICk7XG4gICAgfVxufTtcblxuXG4vKipcbiAqIElzIGNhbGxlZCB3aGVuIGEgdG91Y2ggZW5kcyBvbiB0aGUgcmVuZGVyZXIgZWxlbWVudFxuICpcbiAqIEBwYXJhbSBldmVudCB7RXZlbnR9IFRoZSBET00gZXZlbnQgb2YgYSB0b3VjaCBlbmRpbmcgb24gdGhlIHJlbmRlcmVyIHZpZXdcbiAqL1xuSW50ZXJhY3Rpb25NYW5hZ2VyLnByb3RvdHlwZS5vblRvdWNoRW5kID0gZnVuY3Rpb24gKGV2ZW50KVxue1xuICAgIGlmICh0aGlzLmF1dG9QcmV2ZW50RGVmYXVsdClcbiAgICB7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgfVxuXG4gICAgdmFyIGNoYW5nZWRUb3VjaGVzID0gZXZlbnQuY2hhbmdlZFRvdWNoZXM7XG4gICAgdmFyIGNMZW5ndGggPSBjaGFuZ2VkVG91Y2hlcy5sZW5ndGg7XG5cbiAgICBmb3IgKHZhciBpPTA7IGkgPCBjTGVuZ3RoOyBpKyspXG4gICAge1xuICAgICAgICB2YXIgdG91Y2hFdmVudCA9IGNoYW5nZWRUb3VjaGVzW2ldO1xuXG4gICAgICAgIHZhciB0b3VjaERhdGEgPSB0aGlzLmdldFRvdWNoRGF0YSggdG91Y2hFdmVudCApO1xuXG4gICAgICAgIHRvdWNoRGF0YS5vcmlnaW5hbEV2ZW50ID0gZXZlbnQ7XG5cbiAgICAgICAgLy9UT0RPIHRoaXMgc2hvdWxkIGJlIHBhc3NlZCBhbG9uZy4uIG5vIHNldFxuICAgICAgICB0aGlzLmV2ZW50RGF0YS5kYXRhID0gdG91Y2hEYXRhO1xuICAgICAgICB0aGlzLmV2ZW50RGF0YS5zdG9wcGVkID0gZmFsc2U7XG5cblxuICAgICAgICB0aGlzLnByb2Nlc3NJbnRlcmFjdGl2ZSggdG91Y2hEYXRhLmdsb2JhbCwgdGhpcy5yZW5kZXJlci5fbGFzdE9iamVjdFJlbmRlcmVkLCB0aGlzLnByb2Nlc3NUb3VjaEVuZCwgdHJ1ZSApO1xuXG4gICAgICAgIHRoaXMucmV0dXJuVG91Y2hEYXRhKCB0b3VjaERhdGEgKTtcbiAgICB9XG59O1xuXG4vKipcbiAqIFByb2Nlc3NlcyB0aGUgcmVzdWx0IG9mIHRoZSBlbmQgb2YgYSB0b3VjaCBhbmQgZGlzcGF0Y2hlcyB0aGUgZXZlbnQgaWYgbmVlZCBiZVxuICpcbiAqIEBwYXJhbSBkaXNwbGF5T2JqZWN0IHtQSVhJLkNvbnRhaW5lcnxQSVhJLlNwcml0ZXxQSVhJLmV4dHJhcy5UaWxpbmdTcHJpdGV9IFRoZSBkaXNwbGF5IG9iamVjdCB0aGF0IHdhcyB0ZXN0ZWRcbiAqIEBwYXJhbSBoaXQge2Jvb2xlYW59IHRoZSByZXN1bHQgb2YgdGhlIGhpdCB0ZXN0IG9uIHRoZSBkaXNwbGF5IG9iamVjdFxuICogQHByaXZhdGVcbiAqL1xuSW50ZXJhY3Rpb25NYW5hZ2VyLnByb3RvdHlwZS5wcm9jZXNzVG91Y2hFbmQgPSBmdW5jdGlvbiAoIGRpc3BsYXlPYmplY3QsIGhpdCApXG57XG4gICAgaWYoaGl0KVxuICAgIHtcbiAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50KCBkaXNwbGF5T2JqZWN0LCAndG91Y2hlbmQnLCB0aGlzLmV2ZW50RGF0YSApO1xuXG4gICAgICAgIGlmKCBkaXNwbGF5T2JqZWN0Ll90b3VjaERvd24gKVxuICAgICAgICB7XG4gICAgICAgICAgICBkaXNwbGF5T2JqZWN0Ll90b3VjaERvd24gPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudCggZGlzcGxheU9iamVjdCwgJ3RhcCcsIHRoaXMuZXZlbnREYXRhICk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgaWYoIGRpc3BsYXlPYmplY3QuX3RvdWNoRG93biApXG4gICAgICAgIHtcbiAgICAgICAgICAgIGRpc3BsYXlPYmplY3QuX3RvdWNoRG93biA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50KCBkaXNwbGF5T2JqZWN0LCAndG91Y2hlbmRvdXRzaWRlJywgdGhpcy5ldmVudERhdGEgKTtcbiAgICAgICAgfVxuICAgIH1cbn07XG5cbi8qKlxuICogSXMgY2FsbGVkIHdoZW4gYSB0b3VjaCBpcyBtb3ZlZCBhY3Jvc3MgdGhlIHJlbmRlcmVyIGVsZW1lbnRcbiAqXG4gKiBAcGFyYW0gZXZlbnQge0V2ZW50fSBUaGUgRE9NIGV2ZW50IG9mIGEgdG91Y2ggbW92aW5nIGFjcm9zcyB0aGUgcmVuZGVyZXIgdmlld1xuICogQHByaXZhdGVcbiAqL1xuSW50ZXJhY3Rpb25NYW5hZ2VyLnByb3RvdHlwZS5vblRvdWNoTW92ZSA9IGZ1bmN0aW9uIChldmVudClcbntcbiAgICBpZiAodGhpcy5hdXRvUHJldmVudERlZmF1bHQpXG4gICAge1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIH1cblxuICAgIHZhciBjaGFuZ2VkVG91Y2hlcyA9IGV2ZW50LmNoYW5nZWRUb3VjaGVzO1xuICAgIHZhciBjTGVuZ3RoID0gY2hhbmdlZFRvdWNoZXMubGVuZ3RoO1xuXG4gICAgZm9yICh2YXIgaT0wOyBpIDwgY0xlbmd0aDsgaSsrKVxuICAgIHtcbiAgICAgICAgdmFyIHRvdWNoRXZlbnQgPSBjaGFuZ2VkVG91Y2hlc1tpXTtcblxuICAgICAgICB2YXIgdG91Y2hEYXRhID0gdGhpcy5nZXRUb3VjaERhdGEoIHRvdWNoRXZlbnQgKTtcblxuICAgICAgICB0b3VjaERhdGEub3JpZ2luYWxFdmVudCA9IGV2ZW50O1xuXG4gICAgICAgIHRoaXMuZXZlbnREYXRhLmRhdGEgPSB0b3VjaERhdGE7XG4gICAgICAgIHRoaXMuZXZlbnREYXRhLnN0b3BwZWQgPSBmYWxzZTtcblxuICAgICAgICB0aGlzLnByb2Nlc3NJbnRlcmFjdGl2ZSggdG91Y2hEYXRhLmdsb2JhbCwgdGhpcy5yZW5kZXJlci5fbGFzdE9iamVjdFJlbmRlcmVkLCB0aGlzLnByb2Nlc3NUb3VjaE1vdmUsIHRydWUgKTtcblxuICAgICAgICB0aGlzLnJldHVyblRvdWNoRGF0YSggdG91Y2hEYXRhICk7XG4gICAgfVxufTtcblxuLyoqXG4gKiBQcm9jZXNzZXMgdGhlIHJlc3VsdCBvZiBhIHRvdWNoIG1vdmUgY2hlY2sgYW5kIGRpc3BhdGNoZXMgdGhlIGV2ZW50IGlmIG5lZWQgYmVcbiAqXG4gKiBAcGFyYW0gZGlzcGxheU9iamVjdCB7UElYSS5Db250YWluZXJ8UElYSS5TcHJpdGV8UElYSS5leHRyYXMuVGlsaW5nU3ByaXRlfSBUaGUgZGlzcGxheSBvYmplY3QgdGhhdCB3YXMgdGVzdGVkXG4gKiBAcGFyYW0gaGl0IHtib29sZWFufSB0aGUgcmVzdWx0IG9mIHRoZSBoaXQgdGVzdCBvbiB0aGUgZGlzcGxheSBvYmplY3RcbiAqIEBwcml2YXRlXG4gKi9cbkludGVyYWN0aW9uTWFuYWdlci5wcm90b3R5cGUucHJvY2Vzc1RvdWNoTW92ZSA9IGZ1bmN0aW9uICggZGlzcGxheU9iamVjdCwgaGl0IClcbntcbiAgICBoaXQgPSBoaXQ7XG4gICAgdGhpcy5kaXNwYXRjaEV2ZW50KCBkaXNwbGF5T2JqZWN0LCAndG91Y2htb3ZlJywgdGhpcy5ldmVudERhdGEpO1xufTtcblxuLyoqXG4gKiBHcmFicyBhbiBpbnRlcmFjdGlvbiBkYXRhIG9iamVjdCBmcm9tIHRoZSBpbnRlcm5hbCBwb29sXG4gKlxuICogQHBhcmFtIHRvdWNoRXZlbnQge0V2ZW50RGF0YX0gVGhlIHRvdWNoIGV2ZW50IHdlIG5lZWQgdG8gcGFpciB3aXRoIGFuIGludGVyYWN0aW9uRGF0YSBvYmplY3RcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5JbnRlcmFjdGlvbk1hbmFnZXIucHJvdG90eXBlLmdldFRvdWNoRGF0YSA9IGZ1bmN0aW9uICh0b3VjaEV2ZW50KVxue1xuICAgIHZhciB0b3VjaERhdGEgPSB0aGlzLmludGVyYWN0aXZlRGF0YVBvb2wucG9wKCk7XG5cbiAgICBpZighdG91Y2hEYXRhKVxuICAgIHtcbiAgICAgICAgdG91Y2hEYXRhID0gbmV3IEludGVyYWN0aW9uRGF0YSgpO1xuICAgIH1cblxuICAgIHRvdWNoRGF0YS5pZGVudGlmaWVyID0gdG91Y2hFdmVudC5pZGVudGlmaWVyO1xuICAgIHRoaXMubWFwUG9zaXRpb25Ub1BvaW50KCB0b3VjaERhdGEuZ2xvYmFsLCB0b3VjaEV2ZW50LmNsaWVudFgsIHRvdWNoRXZlbnQuY2xpZW50WSApO1xuXG4gICAgaWYobmF2aWdhdG9yLmlzQ29jb29uSlMpXG4gICAge1xuICAgICAgICB0b3VjaERhdGEuZ2xvYmFsLnggPSB0b3VjaERhdGEuZ2xvYmFsLnggLyB0aGlzLnJlc29sdXRpb247XG4gICAgICAgIHRvdWNoRGF0YS5nbG9iYWwueSA9IHRvdWNoRGF0YS5nbG9iYWwueSAvIHRoaXMucmVzb2x1dGlvbjtcbiAgICB9XG5cbiAgICB0b3VjaEV2ZW50Lmdsb2JhbFggPSB0b3VjaERhdGEuZ2xvYmFsLng7XG4gICAgdG91Y2hFdmVudC5nbG9iYWxZID0gdG91Y2hEYXRhLmdsb2JhbC55O1xuXG4gICAgcmV0dXJuIHRvdWNoRGF0YTtcbn07XG5cbi8qKlxuICogUmV0dXJucyBhbiBpbnRlcmFjdGlvbiBkYXRhIG9iamVjdCB0byB0aGUgaW50ZXJuYWwgcG9vbFxuICpcbiAqIEBwYXJhbSB0b3VjaERhdGEge1BJWEkuaW50ZXJhY3Rpb24uSW50ZXJhY3Rpb25EYXRhfSBUaGUgdG91Y2ggZGF0YSBvYmplY3Qgd2Ugd2FudCB0byByZXR1cm4gdG8gdGhlIHBvb2xcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5JbnRlcmFjdGlvbk1hbmFnZXIucHJvdG90eXBlLnJldHVyblRvdWNoRGF0YSA9IGZ1bmN0aW9uICggdG91Y2hEYXRhIClcbntcbiAgICB0aGlzLmludGVyYWN0aXZlRGF0YVBvb2wucHVzaCggdG91Y2hEYXRhICk7XG59O1xuXG4vKipcbiAqIERlc3Ryb3lzIHRoZSBpbnRlcmFjdGlvbiBtYW5hZ2VyXG4gKlxuICovXG5JbnRlcmFjdGlvbk1hbmFnZXIucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoKSB7XG4gICAgdGhpcy5yZW1vdmVFdmVudHMoKTtcblxuICAgIHRoaXMucmVuZGVyZXIgPSBudWxsO1xuXG4gICAgdGhpcy5tb3VzZSA9IG51bGw7XG5cbiAgICB0aGlzLmV2ZW50RGF0YSA9IG51bGw7XG5cbiAgICB0aGlzLmludGVyYWN0aXZlRGF0YVBvb2wgPSBudWxsO1xuXG4gICAgdGhpcy5pbnRlcmFjdGlvbkRPTUVsZW1lbnQgPSBudWxsO1xuXG4gICAgdGhpcy5vbk1vdXNlVXAgPSBudWxsO1xuICAgIHRoaXMucHJvY2Vzc01vdXNlVXAgPSBudWxsO1xuXG5cbiAgICB0aGlzLm9uTW91c2VEb3duID0gbnVsbDtcbiAgICB0aGlzLnByb2Nlc3NNb3VzZURvd24gPSBudWxsO1xuXG4gICAgdGhpcy5vbk1vdXNlTW92ZSA9IG51bGw7XG4gICAgdGhpcy5wcm9jZXNzTW91c2VNb3ZlID0gbnVsbDtcblxuICAgIHRoaXMub25Nb3VzZU91dCA9IG51bGw7XG4gICAgdGhpcy5wcm9jZXNzTW91c2VPdmVyT3V0ID0gbnVsbDtcblxuXG4gICAgdGhpcy5vblRvdWNoU3RhcnQgPSBudWxsO1xuICAgIHRoaXMucHJvY2Vzc1RvdWNoU3RhcnQgPSBudWxsO1xuXG4gICAgdGhpcy5vblRvdWNoRW5kID0gbnVsbDtcbiAgICB0aGlzLnByb2Nlc3NUb3VjaEVuZCA9IG51bGw7XG5cbiAgICB0aGlzLm9uVG91Y2hNb3ZlID0gbnVsbDtcbiAgICB0aGlzLnByb2Nlc3NUb3VjaE1vdmUgPSBudWxsO1xuXG4gICAgdGhpcy5fdGVtcFBvaW50ID0gbnVsbDtcbn07XG5cbmNvcmUuV2ViR0xSZW5kZXJlci5yZWdpc3RlclBsdWdpbignaW50ZXJhY3Rpb24nLCBJbnRlcmFjdGlvbk1hbmFnZXIpO1xuY29yZS5DYW52YXNSZW5kZXJlci5yZWdpc3RlclBsdWdpbignaW50ZXJhY3Rpb24nLCBJbnRlcmFjdGlvbk1hbmFnZXIpO1xuIiwiLyoqXG4gKiBAZmlsZSAgICAgICAgTWFpbiBleHBvcnQgb2YgdGhlIFBJWEkgaW50ZXJhY3Rpb25zIGxpYnJhcnlcbiAqIEBhdXRob3IgICAgICBNYXQgR3JvdmVzIDxtYXRAZ29vZGJveWRpZ2l0YWwuY29tPlxuICogQGNvcHlyaWdodCAgIDIwMTMtMjAxNSBHb29kQm95RGlnaXRhbFxuICogQGxpY2Vuc2UgICAgIHtAbGluayBodHRwczovL2dpdGh1Yi5jb20vcGl4aWpzL3BpeGkuanMvYmxvYi9tYXN0ZXIvTElDRU5TRXxNSVQgTGljZW5zZX1cbiAqL1xuXG4vKipcbiAqIEBuYW1lc3BhY2UgUElYSS5pbnRlcmFjdGlvblxuICovXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgICBJbnRlcmFjdGlvbkRhdGE6ICAgIHJlcXVpcmUoJy4vSW50ZXJhY3Rpb25EYXRhJyksXG4gICAgSW50ZXJhY3Rpb25NYW5hZ2VyOiByZXF1aXJlKCcuL0ludGVyYWN0aW9uTWFuYWdlcicpLFxuICAgIGludGVyYWN0aXZlVGFyZ2V0OiAgcmVxdWlyZSgnLi9pbnRlcmFjdGl2ZVRhcmdldCcpXG59O1xuIiwiLyoqXG4gKiBEZWZhdWx0IHByb3BlcnR5IHZhbHVlcyBvZiBpbnRlcmFjdGl2ZSBvYmplY3RzXG4gKiB1c2VkIGJ5IHtAbGluayBQSVhJLmludGVyYWN0aW9uLkludGVyYWN0aW9uTWFuYWdlcn0uXG4gKlxuICogQG1peGluXG4gKiBAbWVtYmVyb2YgUElYSS5pbnRlcmFjdGlvblxuICogQGV4YW1wbGVcbiAqICAgICAgZnVuY3Rpb24gTXlPYmplY3QoKSB7fVxuICpcbiAqICAgICAgT2JqZWN0LmFzc2lnbihcbiAqICAgICAgICAgIE15T2JqZWN0LnByb3RvdHlwZSxcbiAqICAgICAgICAgIFBJWEkuaW50ZXJhY3Rpb24uaW50ZXJhY3RpdmVUYXJnZXRcbiAqICAgICAgKTtcbiAqL1xudmFyIGludGVyYWN0aXZlVGFyZ2V0ID0ge1xuICAgIC8qKlxuICAgICAqIEB0b2RvIE5lZWRzIGRvY3MuXG4gICAgICovXG4gICAgaW50ZXJhY3RpdmU6IGZhbHNlLFxuICAgIC8qKlxuICAgICAqIEB0b2RvIE5lZWRzIGRvY3MuXG4gICAgICovXG4gICAgYnV0dG9uTW9kZTogZmFsc2UsXG4gICAgLyoqXG4gICAgICogQHRvZG8gTmVlZHMgZG9jcy5cbiAgICAgKi9cbiAgICBpbnRlcmFjdGl2ZUNoaWxkcmVuOiB0cnVlLFxuICAgIC8qKlxuICAgICAqIEB0b2RvIE5lZWRzIGRvY3MuXG4gICAgICovXG4gICAgZGVmYXVsdEN1cnNvcjogJ3BvaW50ZXInLFxuXG4gICAgLy8gc29tZSBpbnRlcm5hbCBjaGVja3MuLlxuXG4gICAgLyoqXG4gICAgICogQHRvZG8gTmVlZHMgZG9jcy5cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIF9vdmVyOiBmYWxzZSxcbiAgICAvKipcbiAgICAgKiBAdG9kbyBOZWVkcyBkb2NzLlxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgX3RvdWNoRG93bjogZmFsc2Vcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gaW50ZXJhY3RpdmVUYXJnZXQ7XG4iLCJ2YXIgUmVzb3VyY2UgPSByZXF1aXJlKCdyZXNvdXJjZS1sb2FkZXInKS5SZXNvdXJjZSxcbiAgICBjb3JlID0gcmVxdWlyZSgnLi4vY29yZScpLFxuICAgIGV4dHJhcyA9IHJlcXVpcmUoJy4uL2V4dHJhcycpLFxuICAgIHBhdGggPSByZXF1aXJlKCdwYXRoJyk7XG5cblxuZnVuY3Rpb24gcGFyc2UocmVzb3VyY2UsIHRleHR1cmUpIHtcbiAgICB2YXIgZGF0YSA9IHt9O1xuICAgIHZhciBpbmZvID0gcmVzb3VyY2UuZGF0YS5nZXRFbGVtZW50c0J5VGFnTmFtZSgnaW5mbycpWzBdO1xuICAgIHZhciBjb21tb24gPSByZXNvdXJjZS5kYXRhLmdldEVsZW1lbnRzQnlUYWdOYW1lKCdjb21tb24nKVswXTtcblxuICAgIGRhdGEuZm9udCA9IGluZm8uZ2V0QXR0cmlidXRlKCdmYWNlJyk7XG4gICAgZGF0YS5zaXplID0gcGFyc2VJbnQoaW5mby5nZXRBdHRyaWJ1dGUoJ3NpemUnKSwgMTApO1xuICAgIGRhdGEubGluZUhlaWdodCA9IHBhcnNlSW50KGNvbW1vbi5nZXRBdHRyaWJ1dGUoJ2xpbmVIZWlnaHQnKSwgMTApO1xuICAgIGRhdGEuY2hhcnMgPSB7fTtcblxuICAgIC8vcGFyc2UgbGV0dGVyc1xuICAgIHZhciBsZXR0ZXJzID0gcmVzb3VyY2UuZGF0YS5nZXRFbGVtZW50c0J5VGFnTmFtZSgnY2hhcicpO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZXR0ZXJzLmxlbmd0aDsgaSsrKVxuICAgIHtcbiAgICAgICAgdmFyIGNoYXJDb2RlID0gcGFyc2VJbnQobGV0dGVyc1tpXS5nZXRBdHRyaWJ1dGUoJ2lkJyksIDEwKTtcblxuICAgICAgICB2YXIgdGV4dHVyZVJlY3QgPSBuZXcgY29yZS5SZWN0YW5nbGUoXG4gICAgICAgICAgICBwYXJzZUludChsZXR0ZXJzW2ldLmdldEF0dHJpYnV0ZSgneCcpLCAxMCkgKyB0ZXh0dXJlLmZyYW1lLngsXG4gICAgICAgICAgICBwYXJzZUludChsZXR0ZXJzW2ldLmdldEF0dHJpYnV0ZSgneScpLCAxMCkgKyB0ZXh0dXJlLmZyYW1lLnksXG4gICAgICAgICAgICBwYXJzZUludChsZXR0ZXJzW2ldLmdldEF0dHJpYnV0ZSgnd2lkdGgnKSwgMTApLFxuICAgICAgICAgICAgcGFyc2VJbnQobGV0dGVyc1tpXS5nZXRBdHRyaWJ1dGUoJ2hlaWdodCcpLCAxMClcbiAgICAgICAgKTtcblxuICAgICAgICBkYXRhLmNoYXJzW2NoYXJDb2RlXSA9IHtcbiAgICAgICAgICAgIHhPZmZzZXQ6IHBhcnNlSW50KGxldHRlcnNbaV0uZ2V0QXR0cmlidXRlKCd4b2Zmc2V0JyksIDEwKSxcbiAgICAgICAgICAgIHlPZmZzZXQ6IHBhcnNlSW50KGxldHRlcnNbaV0uZ2V0QXR0cmlidXRlKCd5b2Zmc2V0JyksIDEwKSxcbiAgICAgICAgICAgIHhBZHZhbmNlOiBwYXJzZUludChsZXR0ZXJzW2ldLmdldEF0dHJpYnV0ZSgneGFkdmFuY2UnKSwgMTApLFxuICAgICAgICAgICAga2VybmluZzoge30sXG4gICAgICAgICAgICB0ZXh0dXJlOiBuZXcgY29yZS5UZXh0dXJlKHRleHR1cmUuYmFzZVRleHR1cmUsIHRleHR1cmVSZWN0KVxuXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgLy9wYXJzZSBrZXJuaW5nc1xuICAgIHZhciBrZXJuaW5ncyA9IHJlc291cmNlLmRhdGEuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2tlcm5pbmcnKTtcbiAgICBmb3IgKGkgPSAwOyBpIDwga2VybmluZ3MubGVuZ3RoOyBpKyspXG4gICAge1xuICAgICAgICB2YXIgZmlyc3QgPSBwYXJzZUludChrZXJuaW5nc1tpXS5nZXRBdHRyaWJ1dGUoJ2ZpcnN0JyksIDEwKTtcbiAgICAgICAgdmFyIHNlY29uZCA9IHBhcnNlSW50KGtlcm5pbmdzW2ldLmdldEF0dHJpYnV0ZSgnc2Vjb25kJyksIDEwKTtcbiAgICAgICAgdmFyIGFtb3VudCA9IHBhcnNlSW50KGtlcm5pbmdzW2ldLmdldEF0dHJpYnV0ZSgnYW1vdW50JyksIDEwKTtcblxuICAgICAgICBkYXRhLmNoYXJzW3NlY29uZF0ua2VybmluZ1tmaXJzdF0gPSBhbW91bnQ7XG4gICAgfVxuXG4gICAgcmVzb3VyY2UuYml0bWFwRm9udCA9IGRhdGE7XG5cbiAgICAvLyBJJ20gbGVhdmluZyB0aGlzIGFzIGEgdGVtcG9yYXJ5IGZpeCBzbyB3ZSBjYW4gdGVzdCB0aGUgYml0bWFwIGZvbnRzIGluIHYzXG4gICAgLy8gYnV0IGl0J3MgdmVyeSBsaWtlbHkgdG8gY2hhbmdlXG4gICAgZXh0cmFzLkJpdG1hcFRleHQuZm9udHNbZGF0YS5mb250XSA9IGRhdGE7XG59XG5cblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoKVxue1xuICAgIHJldHVybiBmdW5jdGlvbiAocmVzb3VyY2UsIG5leHQpXG4gICAge1xuICAgICAgICAvLyBza2lwIGlmIG5vIGRhdGEgb3Igbm90IHhtbCBkYXRhXG4gICAgICAgIGlmICghcmVzb3VyY2UuZGF0YSB8fCAhcmVzb3VyY2UuaXNYbWwpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiBuZXh0KCk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBza2lwIGlmIG5vdCBiaXRtYXAgZm9udCBkYXRhLCB1c2luZyBzb21lIHNpbGx5IGR1Y2stdHlwaW5nXG4gICAgICAgIGlmIChcbiAgICAgICAgICAgIHJlc291cmNlLmRhdGEuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ3BhZ2UnKS5sZW5ndGggPT09IDAgfHxcbiAgICAgICAgICAgIHJlc291cmNlLmRhdGEuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2luZm8nKS5sZW5ndGggPT09IDAgfHxcbiAgICAgICAgICAgIHJlc291cmNlLmRhdGEuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2luZm8nKVswXS5nZXRBdHRyaWJ1dGUoJ2ZhY2UnKSA9PT0gbnVsbFxuICAgICAgICAgICAgKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gbmV4dCgpO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIHhtbFVybCA9IHBhdGguZGlybmFtZShyZXNvdXJjZS51cmwpO1xuXG4gICAgICAgIGlmICh4bWxVcmwgPT09ICcuJykge1xuICAgICAgICAgICAgeG1sVXJsID0gJyc7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5iYXNlVXJsICYmIHhtbFVybCkge1xuICAgICAgICAgICAgLy8gaWYgYmFzZXVybCBoYXMgYSB0cmFpbGluZyBzbGFzaCB0aGVuIGFkZCBvbmUgdG8geG1sVXJsIHNvIHRoZSByZXBsYWNlIHdvcmtzIGJlbG93XG4gICAgICAgICAgICBpZiAodGhpcy5iYXNlVXJsLmNoYXJBdCh0aGlzLmJhc2VVcmwubGVuZ3RoIC0gMSkgPT09ICcvJykge1xuICAgICAgICAgICAgICAgIHhtbFVybCArPSAnLyc7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIHJlbW92ZSBiYXNlVXJsIGZyb20geG1sVXJsXG4gICAgICAgICAgICB4bWxVcmwgPSB4bWxVcmwucmVwbGFjZSh0aGlzLmJhc2VVcmwsICcnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGlmIHRoZXJlIGlzIGFuIHhtbFVybCBub3csIGl0IG5lZWRzIGEgdHJhaWxpbmcgc2xhc2guIEVuc3VyZSB0aGF0IGl0IGRvZXMgaWYgdGhlIHN0cmluZyBpc24ndCBlbXB0eS5cbiAgICAgICAgaWYgKHhtbFVybCAmJiB4bWxVcmwuY2hhckF0KHhtbFVybC5sZW5ndGggLSAxKSAhPT0gJy8nKSB7XG4gICAgICAgICAgICB4bWxVcmwgKz0gJy8nO1xuICAgICAgICB9XG4gICAgICAgIHZhciB0ZXh0dXJlVXJsID0geG1sVXJsICsgcmVzb3VyY2UuZGF0YS5nZXRFbGVtZW50c0J5VGFnTmFtZSgncGFnZScpWzBdLmdldEF0dHJpYnV0ZSgnZmlsZScpO1xuICAgICAgICBpZiAoY29yZS51dGlscy5UZXh0dXJlQ2FjaGVbdGV4dHVyZVVybF0pIHtcbiAgICAgICAgICAgIC8vcmV1c2UgZXhpc3RpbmcgdGV4dHVyZVxuICAgICAgICAgICAgcGFyc2UocmVzb3VyY2UsIGNvcmUudXRpbHMuVGV4dHVyZUNhY2hlW3RleHR1cmVVcmxdKTtcbiAgICAgICAgICAgIG5leHQoKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHZhciBsb2FkT3B0aW9ucyA9IHtcbiAgICAgICAgICAgICAgICBjcm9zc09yaWdpbjogcmVzb3VyY2UuY3Jvc3NPcmlnaW4sXG4gICAgICAgICAgICAgICAgbG9hZFR5cGU6IFJlc291cmNlLkxPQURfVFlQRS5JTUFHRSxcbiAgICAgICAgICAgICAgICBtZXRhZGF0YTogcmVzb3VyY2UubWV0YWRhdGEuaW1hZ2VNZXRhZGF0YVxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIC8vIGxvYWQgdGhlIHRleHR1cmUgZm9yIHRoZSBmb250XG4gICAgICAgICAgICB0aGlzLmFkZChyZXNvdXJjZS5uYW1lICsgJ19pbWFnZScsIHRleHR1cmVVcmwsIGxvYWRPcHRpb25zLCBmdW5jdGlvbiAocmVzKSB7XG4gICAgICAgICAgICAgICAgcGFyc2UocmVzb3VyY2UsIHJlcy50ZXh0dXJlKTtcbiAgICAgICAgICAgICAgICBuZXh0KCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH07XG59O1xuIiwiLyoqXG4gKiBAZmlsZSAgICAgICAgTWFpbiBleHBvcnQgb2YgdGhlIFBJWEkgbG9hZGVycyBsaWJyYXJ5XG4gKiBAYXV0aG9yICAgICAgTWF0IEdyb3ZlcyA8bWF0QGdvb2Rib3lkaWdpdGFsLmNvbT5cbiAqIEBjb3B5cmlnaHQgICAyMDEzLTIwMTUgR29vZEJveURpZ2l0YWxcbiAqIEBsaWNlbnNlICAgICB7QGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL3BpeGlqcy9waXhpLmpzL2Jsb2IvbWFzdGVyL0xJQ0VOU0V8TUlUIExpY2Vuc2V9XG4gKi9cblxuLyoqXG4gKiBAbmFtZXNwYWNlIFBJWEkubG9hZGVyc1xuICovXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgICBMb2FkZXI6ICAgICAgICAgICAgIHJlcXVpcmUoJy4vbG9hZGVyJyksXG5cbiAgICAvLyBwYXJzZXJzXG4gICAgYml0bWFwRm9udFBhcnNlcjogICByZXF1aXJlKCcuL2JpdG1hcEZvbnRQYXJzZXInKSxcbiAgICBzcHJpdGVzaGVldFBhcnNlcjogIHJlcXVpcmUoJy4vc3ByaXRlc2hlZXRQYXJzZXInKSxcbiAgICB0ZXh0dXJlUGFyc2VyOiAgICAgIHJlcXVpcmUoJy4vdGV4dHVyZVBhcnNlcicpLFxuICAgIFJlc291cmNlOiAgICAgICAgICAgcmVxdWlyZSgncmVzb3VyY2UtbG9hZGVyJykuUmVzb3VyY2Vcbn07XG4iLCJ2YXIgUmVzb3VyY2VMb2FkZXIgPSByZXF1aXJlKCdyZXNvdXJjZS1sb2FkZXInKSxcbiAgICB0ZXh0dXJlUGFyc2VyID0gcmVxdWlyZSgnLi90ZXh0dXJlUGFyc2VyJyksXG4gICAgc3ByaXRlc2hlZXRQYXJzZXIgPSByZXF1aXJlKCcuL3Nwcml0ZXNoZWV0UGFyc2VyJyksXG4gICAgYml0bWFwRm9udFBhcnNlciA9IHJlcXVpcmUoJy4vYml0bWFwRm9udFBhcnNlcicpO1xuXG4vKipcbiAqXG4gKiBUaGUgbmV3IGxvYWRlciwgZXh0ZW5kcyBSZXNvdXJjZSBMb2FkZXIgYnkgQ2hhZCBFbmdsZXIgOiBodHRwczovL2dpdGh1Yi5jb20vZW5nbGVyY2ovcmVzb3VyY2UtbG9hZGVyXG4gKlxuICogYGBganNcbiAqIHZhciBsb2FkZXIgPSBQSVhJLmxvYWRlcjsgLy8gcGl4aSBleHBvc2VzIGEgcHJlbWFkZSBpbnN0YW5jZSBmb3IgeW91IHRvIHVzZS5cbiAqIC8vb3JcbiAqIHZhciBsb2FkZXIgPSBuZXcgUElYSS5sb2FkZXJzLkxvYWRlcigpOyAvLyB5b3UgY2FuIGFsc28gY3JlYXRlIHlvdXIgb3duIGlmIHlvdSB3YW50XG4gKlxuICogbG9hZGVyLmFkZCgnYnVubnknLFwiZGF0YS9idW5ueS5wbmdcIik7XG4gKlxuICogbG9hZGVyLm9uY2UoJ2NvbXBsZXRlJyxvbkFzc2V0c0xvYWRlZCk7XG4gKlxuICogbG9hZGVyLmxvYWQoKTtcbiAqIGBgYFxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5SZXNvdXJjZUxvYWRlclxuICogQG1lbWJlcm9mIFBJWEkubG9hZGVyc1xuICogQHBhcmFtIFtiYXNlVXJsPScnXSB7c3RyaW5nfSBUaGUgYmFzZSB1cmwgZm9yIGFsbCByZXNvdXJjZXMgbG9hZGVkIGJ5IHRoaXMgbG9hZGVyLlxuICogQHBhcmFtIFtjb25jdXJyZW5jeT0xMF0ge251bWJlcn0gVGhlIG51bWJlciBvZiByZXNvdXJjZXMgdG8gbG9hZCBjb25jdXJyZW50bHkuXG4gKi9cbmZ1bmN0aW9uIExvYWRlcihiYXNlVXJsLCBjb25jdXJyZW5jeSlcbntcbiAgICBSZXNvdXJjZUxvYWRlci5jYWxsKHRoaXMsIGJhc2VVcmwsIGNvbmN1cnJlbmN5KTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgTG9hZGVyLl9waXhpTWlkZGxld2FyZS5sZW5ndGg7ICsraSkge1xuICAgICAgICB0aGlzLnVzZShMb2FkZXIuX3BpeGlNaWRkbGV3YXJlW2ldKCkpO1xuICAgIH1cbn1cblxuTG9hZGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoUmVzb3VyY2VMb2FkZXIucHJvdG90eXBlKTtcbkxvYWRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBMb2FkZXI7XG5cbm1vZHVsZS5leHBvcnRzID0gTG9hZGVyO1xuXG5Mb2FkZXIuX3BpeGlNaWRkbGV3YXJlID0gW1xuICAgIC8vIHBhcnNlIGFueSBibG9iIGludG8gbW9yZSB1c2FibGUgb2JqZWN0cyAoZS5nLiBJbWFnZSlcbiAgICBSZXNvdXJjZUxvYWRlci5taWRkbGV3YXJlLnBhcnNpbmcuYmxvYixcbiAgICAvLyBwYXJzZSBhbnkgSW1hZ2Ugb2JqZWN0cyBpbnRvIHRleHR1cmVzXG4gICAgdGV4dHVyZVBhcnNlcixcbiAgICAvLyBwYXJzZSBhbnkgc3ByaXRlc2hlZXQgZGF0YSBpbnRvIG11bHRpcGxlIHRleHR1cmVzXG4gICAgc3ByaXRlc2hlZXRQYXJzZXIsXG4gICAgLy8gcGFyc2UgYW55IHNwcml0ZXNoZWV0IGRhdGEgaW50byBtdWx0aXBsZSB0ZXh0dXJlc1xuICAgIGJpdG1hcEZvbnRQYXJzZXJcbl07XG5cbkxvYWRlci5hZGRQaXhpTWlkZGxld2FyZSA9IGZ1bmN0aW9uIChmbikge1xuICAgIExvYWRlci5fcGl4aU1pZGRsZXdhcmUucHVzaChmbik7XG59O1xuXG4vLyBBZGQgY3VzdG9tIGV4dGVudGlvbnNcbnZhciBSZXNvdXJjZSA9IFJlc291cmNlTG9hZGVyLlJlc291cmNlO1xuXG5SZXNvdXJjZS5zZXRFeHRlbnNpb25YaHJUeXBlKCdmbnQnLCBSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRS5ET0NVTUVOVCk7XG4iLCJ2YXIgUmVzb3VyY2UgPSByZXF1aXJlKCdyZXNvdXJjZS1sb2FkZXInKS5SZXNvdXJjZSxcbiAgICBwYXRoID0gcmVxdWlyZSgncGF0aCcpLFxuICAgIGNvcmUgPSByZXF1aXJlKCcuLi9jb3JlJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKClcbntcbiAgICByZXR1cm4gZnVuY3Rpb24gKHJlc291cmNlLCBuZXh0KVxuICAgIHtcbiAgICAgICAgLy8gc2tpcCBpZiBubyBkYXRhLCBpdHMgbm90IGpzb24sIG9yIGl0IGlzbid0IHNwcml0ZXNoZWV0IGRhdGFcbiAgICAgICAgaWYgKCFyZXNvdXJjZS5kYXRhIHx8ICFyZXNvdXJjZS5pc0pzb24gfHwgIXJlc291cmNlLmRhdGEuZnJhbWVzKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gbmV4dCgpO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGxvYWRPcHRpb25zID0ge1xuICAgICAgICAgICAgY3Jvc3NPcmlnaW46IHJlc291cmNlLmNyb3NzT3JpZ2luLFxuICAgICAgICAgICAgbG9hZFR5cGU6IFJlc291cmNlLkxPQURfVFlQRS5JTUFHRSxcbiAgICAgICAgICAgIG1ldGFkYXRhOiByZXNvdXJjZS5tZXRhZGF0YS5pbWFnZU1ldGFkYXRhXG4gICAgICAgIH07XG5cbiAgICAgICAgdmFyIHJvdXRlID0gcGF0aC5kaXJuYW1lKHJlc291cmNlLnVybC5yZXBsYWNlKHRoaXMuYmFzZVVybCwgJycpKTtcblxuICAgICAgICB2YXIgcmVzb2x1dGlvbiA9IGNvcmUudXRpbHMuZ2V0UmVzb2x1dGlvbk9mVXJsKCByZXNvdXJjZS51cmwgKTtcblxuICAgICAgICAvLyBsb2FkIHRoZSBpbWFnZSBmb3IgdGhpcyBzaGVldFxuICAgICAgICB0aGlzLmFkZChyZXNvdXJjZS5uYW1lICsgJ19pbWFnZScsIHJvdXRlICsgJy8nICsgcmVzb3VyY2UuZGF0YS5tZXRhLmltYWdlLCBsb2FkT3B0aW9ucywgZnVuY3Rpb24gKHJlcylcbiAgICAgICAge1xuICAgICAgICAgICAgcmVzb3VyY2UudGV4dHVyZXMgPSB7fTtcblxuICAgICAgICAgICAgdmFyIGZyYW1lcyA9IHJlc291cmNlLmRhdGEuZnJhbWVzO1xuXG4gICAgICAgICAgICBmb3IgKHZhciBpIGluIGZyYW1lcylcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB2YXIgcmVjdCA9IGZyYW1lc1tpXS5mcmFtZTtcblxuICAgICAgICAgICAgICAgIGlmIChyZWN0KVxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHNpemUgPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICB2YXIgdHJpbSA9IG51bGw7XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKGZyYW1lc1tpXS5yb3RhdGVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzaXplID0gbmV3IGNvcmUuUmVjdGFuZ2xlKHJlY3QueCwgcmVjdC55LCByZWN0LmgsIHJlY3Qudyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzaXplID0gbmV3IGNvcmUuUmVjdGFuZ2xlKHJlY3QueCwgcmVjdC55LCByZWN0LncsIHJlY3QuaCk7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAvLyAgQ2hlY2sgdG8gc2VlIGlmIHRoZSBzcHJpdGUgaXMgdHJpbW1lZFxuICAgICAgICAgICAgICAgICAgICBpZiAoZnJhbWVzW2ldLnRyaW1tZWQpXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRyaW0gPSBuZXcgY29yZS5SZWN0YW5nbGUoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJhbWVzW2ldLnNwcml0ZVNvdXJjZVNpemUueCAvIHJlc29sdXRpb24sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJhbWVzW2ldLnNwcml0ZVNvdXJjZVNpemUueSAvIHJlc29sdXRpb24sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJhbWVzW2ldLnNvdXJjZVNpemUudyAvIHJlc29sdXRpb24sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJhbWVzW2ldLnNvdXJjZVNpemUuaCAvIHJlc29sdXRpb25cbiAgICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgLy8gZmxpcCB0aGUgd2lkdGggYW5kIGhlaWdodCFcbiAgICAgICAgICAgICAgICAgICAgaWYgKGZyYW1lc1tpXS5yb3RhdGVkKVxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgdGVtcCA9IHNpemUud2lkdGg7XG4gICAgICAgICAgICAgICAgICAgICAgICBzaXplLndpZHRoID0gc2l6ZS5oZWlnaHQ7XG4gICAgICAgICAgICAgICAgICAgICAgICBzaXplLmhlaWdodCA9IHRlbXA7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBzaXplLnggLz0gcmVzb2x1dGlvbjtcbiAgICAgICAgICAgICAgICAgICAgc2l6ZS55IC89IHJlc29sdXRpb247XG4gICAgICAgICAgICAgICAgICAgIHNpemUud2lkdGggLz0gcmVzb2x1dGlvbjtcbiAgICAgICAgICAgICAgICAgICAgc2l6ZS5oZWlnaHQgLz0gcmVzb2x1dGlvbjtcblxuICAgICAgICAgICAgICAgICAgICByZXNvdXJjZS50ZXh0dXJlc1tpXSA9IG5ldyBjb3JlLlRleHR1cmUocmVzLnRleHR1cmUuYmFzZVRleHR1cmUsIHNpemUsIHNpemUuY2xvbmUoKSwgdHJpbSwgZnJhbWVzW2ldLnJvdGF0ZWQpO1xuXG4gICAgICAgICAgICAgICAgICAgIC8vIGxldHMgYWxzbyBhZGQgdGhlIGZyYW1lIHRvIHBpeGkncyBnbG9iYWwgY2FjaGUgZm9yIGZyb21GcmFtZSBhbmQgZnJvbUltYWdlIGZ1bmN0aW9uc1xuICAgICAgICAgICAgICAgICAgICBjb3JlLnV0aWxzLlRleHR1cmVDYWNoZVtpXSA9IHJlc291cmNlLnRleHR1cmVzW2ldO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgbmV4dCgpO1xuICAgICAgICB9KTtcbiAgICB9O1xufTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vY29yZScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICgpXG57XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChyZXNvdXJjZSwgbmV4dClcbiAgICB7XG4gICAgICAgIC8vIGNyZWF0ZSBhIG5ldyB0ZXh0dXJlIGlmIHRoZSBkYXRhIGlzIGFuIEltYWdlIG9iamVjdFxuICAgICAgICBpZiAocmVzb3VyY2UuZGF0YSAmJiByZXNvdXJjZS5pc0ltYWdlKVxuICAgICAgICB7XG4gICAgICAgICAgICB2YXIgYmFzZVRleHR1cmUgPSBuZXcgY29yZS5CYXNlVGV4dHVyZShyZXNvdXJjZS5kYXRhLCBudWxsLCBjb3JlLnV0aWxzLmdldFJlc29sdXRpb25PZlVybChyZXNvdXJjZS51cmwpKTtcbiAgICAgICAgICAgIGJhc2VUZXh0dXJlLmltYWdlVXJsID0gcmVzb3VyY2UudXJsO1xuICAgICAgICAgICAgcmVzb3VyY2UudGV4dHVyZSA9IG5ldyBjb3JlLlRleHR1cmUoYmFzZVRleHR1cmUpO1xuICAgICAgICAgICAgLy8gbGV0cyBhbHNvIGFkZCB0aGUgZnJhbWUgdG8gcGl4aSdzIGdsb2JhbCBjYWNoZSBmb3IgZnJvbUZyYW1lIGFuZCBmcm9tSW1hZ2UgZnVjbnRpb25zXG4gICAgICAgICAgICBjb3JlLnV0aWxzLkJhc2VUZXh0dXJlQ2FjaGVbcmVzb3VyY2UudXJsXSA9IGJhc2VUZXh0dXJlO1xuICAgICAgICAgICAgY29yZS51dGlscy5UZXh0dXJlQ2FjaGVbcmVzb3VyY2UudXJsXSA9IHJlc291cmNlLnRleHR1cmU7XG4gICAgICAgIH1cblxuICAgICAgICBuZXh0KCk7XG4gICAgfTtcbn07XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uL2NvcmUnKSxcbiAgICB0ZW1wUG9pbnQgPSBuZXcgY29yZS5Qb2ludCgpLFxuICAgIHRlbXBQb2x5Z29uID0gbmV3IGNvcmUuUG9seWdvbigpO1xuXG4vKipcbiAqIEJhc2UgbWVzaCBjbGFzc1xuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLkNvbnRhaW5lclxuICogQG1lbWJlcm9mIFBJWEkubWVzaFxuICogQHBhcmFtIHRleHR1cmUge1BJWEkuVGV4dHVyZX0gVGhlIHRleHR1cmUgdG8gdXNlXG4gKiBAcGFyYW0gW3ZlcnRpY2VzXSB7RmxvYXQzMkFycmF5fSBpZiB5b3Ugd2FudCB0byBzcGVjaWZ5IHRoZSB2ZXJ0aWNlc1xuICogQHBhcmFtIFt1dnNdIHtGbG9hdDMyQXJyYXl9IGlmIHlvdSB3YW50IHRvIHNwZWNpZnkgdGhlIHV2c1xuICogQHBhcmFtIFtpbmRpY2VzXSB7VWludDE2QXJyYXl9IGlmIHlvdSB3YW50IHRvIHNwZWNpZnkgdGhlIGluZGljZXNcbiAqIEBwYXJhbSBbZHJhd01vZGVdIHtudW1iZXJ9IHRoZSBkcmF3TW9kZSwgY2FuIGJlIGFueSBvZiB0aGUgTWVzaC5EUkFXX01PREVTIGNvbnN0c1xuICovXG5mdW5jdGlvbiBNZXNoKHRleHR1cmUsIHZlcnRpY2VzLCB1dnMsIGluZGljZXMsIGRyYXdNb2RlKVxue1xuICAgIGNvcmUuQ29udGFpbmVyLmNhbGwodGhpcyk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgdGV4dHVyZSBvZiB0aGUgTWVzaFxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5UZXh0dXJlfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fdGV4dHVyZSA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgVXZzIG9mIHRoZSBNZXNoXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtGbG9hdDMyQXJyYXl9XG4gICAgICovXG4gICAgdGhpcy51dnMgPSB1dnMgfHwgbmV3IEZsb2F0MzJBcnJheShbMCwgMCxcbiAgICAgICAgMSwgMCxcbiAgICAgICAgMSwgMSxcbiAgICAgICAgMCwgMV0pO1xuXG4gICAgLyoqXG4gICAgICogQW4gYXJyYXkgb2YgdmVydGljZXNcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge0Zsb2F0MzJBcnJheX1cbiAgICAgKi9cbiAgICB0aGlzLnZlcnRpY2VzID0gdmVydGljZXMgfHwgbmV3IEZsb2F0MzJBcnJheShbMCwgMCxcbiAgICAgICAgMTAwLCAwLFxuICAgICAgICAxMDAsIDEwMCxcbiAgICAgICAgMCwgMTAwXSk7XG5cbiAgICAvKlxuICAgICAqIEBtZW1iZXIge1VpbnQxNkFycmF5fSBBbiBhcnJheSBjb250YWluaW5nIHRoZSBpbmRpY2VzIG9mIHRoZSB2ZXJ0aWNlc1xuICAgICAqL1xuICAgIC8vICBUT0RPIGF1dG8gZ2VuZXJhdGUgdGhpcyBiYXNlZCBvbiBkcmF3IG1vZGUhXG4gICAgdGhpcy5pbmRpY2VzID0gaW5kaWNlcyB8fCBuZXcgVWludDE2QXJyYXkoWzAsIDEsIDMsIDJdKTtcblxuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgdGhlIE1lc2ggaXMgZGlydHkgb3Igbm90XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqL1xuICAgIHRoaXMuZGlydHkgPSB0cnVlO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGJsZW5kIG1vZGUgdG8gYmUgYXBwbGllZCB0byB0aGUgc3ByaXRlLiBTZXQgdG8gYFBJWEkuQkxFTkRfTU9ERVMuTk9STUFMYCB0byByZW1vdmUgYW55IGJsZW5kIG1vZGUuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgUElYSS5CTEVORF9NT0RFUy5OT1JNQUxcbiAgICAgKiBAc2VlIFBJWEkuQkxFTkRfTU9ERVNcbiAgICAgKi9cbiAgICB0aGlzLmJsZW5kTW9kZSA9IGNvcmUuQkxFTkRfTU9ERVMuTk9STUFMO1xuXG4gICAgLyoqXG4gICAgICogVHJpYW5nbGVzIGluIGNhbnZhcyBtb2RlIGFyZSBhdXRvbWF0aWNhbGx5IGFudGlhbGlhc2VkLCB1c2UgdGhpcyB2YWx1ZSB0byBmb3JjZSB0cmlhbmdsZXMgdG8gb3ZlcmxhcCBhIGJpdCB3aXRoIGVhY2ggb3RoZXIuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy5jYW52YXNQYWRkaW5nID0gMDtcblxuICAgIC8qKlxuICAgICAqIFRoZSB3YXkgdGhlIE1lc2ggc2hvdWxkIGJlIGRyYXduLCBjYW4gYmUgYW55IG9mIHRoZSB7QGxpbmsgUElYSS5tZXNoLk1lc2guRFJBV19NT0RFU30gY29uc3RzXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQHNlZSBQSVhJLm1lc2guTWVzaC5EUkFXX01PREVTXG4gICAgICovXG4gICAgdGhpcy5kcmF3TW9kZSA9IGRyYXdNb2RlIHx8IE1lc2guRFJBV19NT0RFUy5UUklBTkdMRV9NRVNIO1xuXG4gICAgLy8gcnVuIHRleHR1cmUgc2V0dGVyO1xuICAgIHRoaXMudGV4dHVyZSA9IHRleHR1cmU7XG5cbiAgICAgLyoqXG4gICAgICogVGhlIGRlZmF1bHQgc2hhZGVyIHRoYXQgaXMgdXNlZCBpZiBhIG1lc2ggZG9lc24ndCBoYXZlIGEgbW9yZSBzcGVjaWZpYyBvbmUuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlNoYWRlcn1cbiAgICAgKi9cbiAgICB0aGlzLnNoYWRlciA9IG51bGw7XG59XG5cbi8vIGNvbnN0cnVjdG9yXG5NZXNoLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoY29yZS5Db250YWluZXIucHJvdG90eXBlKTtcbk1lc2gucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gTWVzaDtcbm1vZHVsZS5leHBvcnRzID0gTWVzaDtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoTWVzaC5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBUaGUgdGV4dHVyZSB0aGF0IHRoZSBzcHJpdGUgaXMgdXNpbmdcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuVGV4dHVyZX1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5tZXNoLk1lc2gjXG4gICAgICovXG4gICAgdGV4dHVyZToge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiAgdGhpcy5fdGV4dHVyZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGlmICh0aGlzLl90ZXh0dXJlID09PSB2YWx1ZSlcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuX3RleHR1cmUgPSB2YWx1ZTtcblxuICAgICAgICAgICAgaWYgKHZhbHVlKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIC8vIHdhaXQgZm9yIHRoZSB0ZXh0dXJlIHRvIGxvYWRcbiAgICAgICAgICAgICAgICBpZiAodmFsdWUuYmFzZVRleHR1cmUuaGFzTG9hZGVkKVxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fb25UZXh0dXJlVXBkYXRlKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlLm9uY2UoJ3VwZGF0ZScsIHRoaXMuX29uVGV4dHVyZVVwZGF0ZSwgdGhpcyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxufSk7XG5cbi8qKlxuICogUmVuZGVycyB0aGUgb2JqZWN0IHVzaW5nIHRoZSBXZWJHTCByZW5kZXJlclxuICpcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5XZWJHTFJlbmRlcmVyfSBhIHJlZmVyZW5jZSB0byB0aGUgV2ViR0wgcmVuZGVyZXJcbiAqIEBwcml2YXRlXG4gKi9cbk1lc2gucHJvdG90eXBlLl9yZW5kZXJXZWJHTCA9IGZ1bmN0aW9uIChyZW5kZXJlcilcbntcbiAgICByZW5kZXJlci5zZXRPYmplY3RSZW5kZXJlcihyZW5kZXJlci5wbHVnaW5zLm1lc2gpO1xuICAgIHJlbmRlcmVyLnBsdWdpbnMubWVzaC5yZW5kZXIodGhpcyk7XG59O1xuXG4vKipcbiAqIFJlbmRlcnMgdGhlIG9iamVjdCB1c2luZyB0aGUgQ2FudmFzIHJlbmRlcmVyXG4gKlxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLkNhbnZhc1JlbmRlcmVyfVxuICogQHByaXZhdGVcbiAqL1xuTWVzaC5wcm90b3R5cGUuX3JlbmRlckNhbnZhcyA9IGZ1bmN0aW9uIChyZW5kZXJlcilcbntcbiAgICB2YXIgY29udGV4dCA9IHJlbmRlcmVyLmNvbnRleHQ7XG5cbiAgICB2YXIgdHJhbnNmb3JtID0gdGhpcy53b3JsZFRyYW5zZm9ybTtcblxuICAgIGlmIChyZW5kZXJlci5yb3VuZFBpeGVscylcbiAgICB7XG4gICAgICAgIGNvbnRleHQuc2V0VHJhbnNmb3JtKHRyYW5zZm9ybS5hLCB0cmFuc2Zvcm0uYiwgdHJhbnNmb3JtLmMsIHRyYW5zZm9ybS5kLCB0cmFuc2Zvcm0udHggfCAwLCB0cmFuc2Zvcm0udHkgfCAwKTtcbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgY29udGV4dC5zZXRUcmFuc2Zvcm0odHJhbnNmb3JtLmEsIHRyYW5zZm9ybS5iLCB0cmFuc2Zvcm0uYywgdHJhbnNmb3JtLmQsIHRyYW5zZm9ybS50eCwgdHJhbnNmb3JtLnR5KTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5kcmF3TW9kZSA9PT0gTWVzaC5EUkFXX01PREVTLlRSSUFOR0xFX01FU0gpXG4gICAge1xuICAgICAgICB0aGlzLl9yZW5kZXJDYW52YXNUcmlhbmdsZU1lc2goY29udGV4dCk7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHRoaXMuX3JlbmRlckNhbnZhc1RyaWFuZ2xlcyhjb250ZXh0KTtcbiAgICB9XG59O1xuXG4vKipcbiAqIERyYXdzIHRoZSBvYmplY3QgaW4gVHJpYW5nbGUgTWVzaCBtb2RlIHVzaW5nIGNhbnZhc1xuICpcbiAqIEBwYXJhbSBjb250ZXh0IHtDYW52YXNSZW5kZXJpbmdDb250ZXh0MkR9IHRoZSBjdXJyZW50IGRyYXdpbmcgY29udGV4dFxuICogQHByaXZhdGVcbiAqL1xuTWVzaC5wcm90b3R5cGUuX3JlbmRlckNhbnZhc1RyaWFuZ2xlTWVzaCA9IGZ1bmN0aW9uIChjb250ZXh0KVxue1xuICAgIC8vIGRyYXcgdHJpYW5nbGVzISFcbiAgICB2YXIgdmVydGljZXMgPSB0aGlzLnZlcnRpY2VzO1xuICAgIHZhciB1dnMgPSB0aGlzLnV2cztcblxuICAgIHZhciBsZW5ndGggPSB2ZXJ0aWNlcy5sZW5ndGggLyAyO1xuICAgIC8vIHRoaXMuY291bnQrKztcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoIC0gMjsgaSsrKVxuICAgIHtcbiAgICAgICAgLy8gZHJhdyBzb21lIHRyaWFuZ2xlcyFcbiAgICAgICAgdmFyIGluZGV4ID0gaSAqIDI7XG4gICAgICAgIHRoaXMuX3JlbmRlckNhbnZhc0RyYXdUcmlhbmdsZShjb250ZXh0LCB2ZXJ0aWNlcywgdXZzLCBpbmRleCwgKGluZGV4ICsgMiksIChpbmRleCArIDQpKTtcbiAgICB9XG59O1xuXG4vKipcbiAqIERyYXdzIHRoZSBvYmplY3QgaW4gdHJpYW5nbGUgbW9kZSB1c2luZyBjYW52YXNcbiAqXG4gKiBAcGFyYW0gY29udGV4dCB7Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEfSB0aGUgY3VycmVudCBkcmF3aW5nIGNvbnRleHRcbiAqIEBwcml2YXRlXG4gKi9cbk1lc2gucHJvdG90eXBlLl9yZW5kZXJDYW52YXNUcmlhbmdsZXMgPSBmdW5jdGlvbiAoY29udGV4dClcbntcbiAgICAvLyBkcmF3IHRyaWFuZ2xlcyEhXG4gICAgdmFyIHZlcnRpY2VzID0gdGhpcy52ZXJ0aWNlcztcbiAgICB2YXIgdXZzID0gdGhpcy51dnM7XG4gICAgdmFyIGluZGljZXMgPSB0aGlzLmluZGljZXM7XG5cbiAgICB2YXIgbGVuZ3RoID0gaW5kaWNlcy5sZW5ndGg7XG4gICAgLy8gdGhpcy5jb3VudCsrO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7IGkgKz0gMylcbiAgICB7XG4gICAgICAgIC8vIGRyYXcgc29tZSB0cmlhbmdsZXMhXG4gICAgICAgIHZhciBpbmRleDAgPSBpbmRpY2VzW2ldICogMiwgaW5kZXgxID0gaW5kaWNlc1tpICsgMV0gKiAyLCBpbmRleDIgPSBpbmRpY2VzW2kgKyAyXSAqIDI7XG4gICAgICAgIHRoaXMuX3JlbmRlckNhbnZhc0RyYXdUcmlhbmdsZShjb250ZXh0LCB2ZXJ0aWNlcywgdXZzLCBpbmRleDAsIGluZGV4MSwgaW5kZXgyKTtcbiAgICB9XG59O1xuXG4vKipcbiAqIERyYXdzIG9uZSBvZiB0aGUgdHJpYW5nbGVzIHRoYXQgZm9ybSB0aGlzIE1lc2hcbiAqXG4gKiBAcGFyYW0gY29udGV4dCB7Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEfSB0aGUgY3VycmVudCBkcmF3aW5nIGNvbnRleHRcbiAqIEBwYXJhbSB2ZXJ0aWNlcyB7RmxvYXQzMkFycmF5fSBhIHJlZmVyZW5jZSB0byB0aGUgdmVydGljZXMgb2YgdGhlIE1lc2hcbiAqIEBwYXJhbSB1dnMge0Zsb2F0MzJBcnJheX0gYSByZWZlcmVuY2UgdG8gdGhlIHV2cyBvZiB0aGUgTWVzaFxuICogQHBhcmFtIGluZGV4MCB7bnVtYmVyfSB0aGUgaW5kZXggb2YgdGhlIGZpcnN0IHZlcnRleFxuICogQHBhcmFtIGluZGV4MSB7bnVtYmVyfSB0aGUgaW5kZXggb2YgdGhlIHNlY29uZCB2ZXJ0ZXhcbiAqIEBwYXJhbSBpbmRleDIge251bWJlcn0gdGhlIGluZGV4IG9mIHRoZSB0aGlyZCB2ZXJ0ZXhcbiAqIEBwcml2YXRlXG4gKi9cbk1lc2gucHJvdG90eXBlLl9yZW5kZXJDYW52YXNEcmF3VHJpYW5nbGUgPSBmdW5jdGlvbiAoY29udGV4dCwgdmVydGljZXMsIHV2cywgaW5kZXgwLCBpbmRleDEsIGluZGV4MilcbntcbiAgICB2YXIgdGV4dHVyZVNvdXJjZSA9IHRoaXMuX3RleHR1cmUuYmFzZVRleHR1cmUuc291cmNlO1xuICAgIHZhciB0ZXh0dXJlV2lkdGggPSB0aGlzLl90ZXh0dXJlLmJhc2VUZXh0dXJlLndpZHRoO1xuICAgIHZhciB0ZXh0dXJlSGVpZ2h0ID0gdGhpcy5fdGV4dHVyZS5iYXNlVGV4dHVyZS5oZWlnaHQ7XG5cbiAgICB2YXIgeDAgPSB2ZXJ0aWNlc1tpbmRleDBdLCB4MSA9IHZlcnRpY2VzW2luZGV4MV0sIHgyID0gdmVydGljZXNbaW5kZXgyXTtcbiAgICB2YXIgeTAgPSB2ZXJ0aWNlc1tpbmRleDAgKyAxXSwgeTEgPSB2ZXJ0aWNlc1tpbmRleDEgKyAxXSwgeTIgPSB2ZXJ0aWNlc1tpbmRleDIgKyAxXTtcblxuICAgIHZhciB1MCA9IHV2c1tpbmRleDBdICogdGV4dHVyZVdpZHRoLCB1MSA9IHV2c1tpbmRleDFdICogdGV4dHVyZVdpZHRoLCB1MiA9IHV2c1tpbmRleDJdICogdGV4dHVyZVdpZHRoO1xuICAgIHZhciB2MCA9IHV2c1tpbmRleDAgKyAxXSAqIHRleHR1cmVIZWlnaHQsIHYxID0gdXZzW2luZGV4MSArIDFdICogdGV4dHVyZUhlaWdodCwgdjIgPSB1dnNbaW5kZXgyICsgMV0gKiB0ZXh0dXJlSGVpZ2h0O1xuXG4gICAgaWYgKHRoaXMuY2FudmFzUGFkZGluZyA+IDApXG4gICAge1xuICAgICAgICB2YXIgcGFkZGluZ1ggPSB0aGlzLmNhbnZhc1BhZGRpbmcgLyB0aGlzLndvcmxkVHJhbnNmb3JtLmE7XG4gICAgICAgIHZhciBwYWRkaW5nWSA9IHRoaXMuY2FudmFzUGFkZGluZyAvIHRoaXMud29ybGRUcmFuc2Zvcm0uZDtcbiAgICAgICAgdmFyIGNlbnRlclggPSAoeDAgKyB4MSArIHgyKSAvIDM7XG4gICAgICAgIHZhciBjZW50ZXJZID0gKHkwICsgeTEgKyB5MikgLyAzO1xuXG4gICAgICAgIHZhciBub3JtWCA9IHgwIC0gY2VudGVyWDtcbiAgICAgICAgdmFyIG5vcm1ZID0geTAgLSBjZW50ZXJZO1xuXG4gICAgICAgIHZhciBkaXN0ID0gTWF0aC5zcXJ0KG5vcm1YICogbm9ybVggKyBub3JtWSAqIG5vcm1ZKTtcbiAgICAgICAgeDAgPSBjZW50ZXJYICsgKG5vcm1YIC8gZGlzdCkgKiAoZGlzdCArIHBhZGRpbmdYKTtcbiAgICAgICAgeTAgPSBjZW50ZXJZICsgKG5vcm1ZIC8gZGlzdCkgKiAoZGlzdCArIHBhZGRpbmdZKTtcblxuICAgICAgICAvL1xuXG4gICAgICAgIG5vcm1YID0geDEgLSBjZW50ZXJYO1xuICAgICAgICBub3JtWSA9IHkxIC0gY2VudGVyWTtcblxuICAgICAgICBkaXN0ID0gTWF0aC5zcXJ0KG5vcm1YICogbm9ybVggKyBub3JtWSAqIG5vcm1ZKTtcbiAgICAgICAgeDEgPSBjZW50ZXJYICsgKG5vcm1YIC8gZGlzdCkgKiAoZGlzdCArIHBhZGRpbmdYKTtcbiAgICAgICAgeTEgPSBjZW50ZXJZICsgKG5vcm1ZIC8gZGlzdCkgKiAoZGlzdCArIHBhZGRpbmdZKTtcblxuICAgICAgICBub3JtWCA9IHgyIC0gY2VudGVyWDtcbiAgICAgICAgbm9ybVkgPSB5MiAtIGNlbnRlclk7XG5cbiAgICAgICAgZGlzdCA9IE1hdGguc3FydChub3JtWCAqIG5vcm1YICsgbm9ybVkgKiBub3JtWSk7XG4gICAgICAgIHgyID0gY2VudGVyWCArIChub3JtWCAvIGRpc3QpICogKGRpc3QgKyBwYWRkaW5nWCk7XG4gICAgICAgIHkyID0gY2VudGVyWSArIChub3JtWSAvIGRpc3QpICogKGRpc3QgKyBwYWRkaW5nWSk7XG4gICAgfVxuXG4gICAgY29udGV4dC5zYXZlKCk7XG4gICAgY29udGV4dC5iZWdpblBhdGgoKTtcblxuXG4gICAgY29udGV4dC5tb3ZlVG8oeDAsIHkwKTtcbiAgICBjb250ZXh0LmxpbmVUbyh4MSwgeTEpO1xuICAgIGNvbnRleHQubGluZVRvKHgyLCB5Mik7XG5cbiAgICBjb250ZXh0LmNsb3NlUGF0aCgpO1xuXG4gICAgY29udGV4dC5jbGlwKCk7XG5cbiAgICAvLyBDb21wdXRlIG1hdHJpeCB0cmFuc2Zvcm1cbiAgICB2YXIgZGVsdGEgPSAgKHUwICogdjEpICAgICAgKyAodjAgKiB1MikgICAgICArICh1MSAqIHYyKSAgICAgIC0gKHYxICogdTIpICAgICAgLSAodjAgKiB1MSkgICAgICAtICh1MCAqIHYyKTtcbiAgICB2YXIgZGVsdGFBID0gKHgwICogdjEpICAgICAgKyAodjAgKiB4MikgICAgICArICh4MSAqIHYyKSAgICAgIC0gKHYxICogeDIpICAgICAgLSAodjAgKiB4MSkgICAgICAtICh4MCAqIHYyKTtcbiAgICB2YXIgZGVsdGFCID0gKHUwICogeDEpICAgICAgKyAoeDAgKiB1MikgICAgICArICh1MSAqIHgyKSAgICAgIC0gKHgxICogdTIpICAgICAgLSAoeDAgKiB1MSkgICAgICAtICh1MCAqIHgyKTtcbiAgICB2YXIgZGVsdGFDID0gKHUwICogdjEgKiB4MikgKyAodjAgKiB4MSAqIHUyKSArICh4MCAqIHUxICogdjIpIC0gKHgwICogdjEgKiB1MikgLSAodjAgKiB1MSAqIHgyKSAtICh1MCAqIHgxICogdjIpO1xuICAgIHZhciBkZWx0YUQgPSAoeTAgKiB2MSkgICAgICArICh2MCAqIHkyKSAgICAgICsgKHkxICogdjIpICAgICAgLSAodjEgKiB5MikgICAgICAtICh2MCAqIHkxKSAgICAgIC0gKHkwICogdjIpO1xuICAgIHZhciBkZWx0YUUgPSAodTAgKiB5MSkgICAgICArICh5MCAqIHUyKSAgICAgICsgKHUxICogeTIpICAgICAgLSAoeTEgKiB1MikgICAgICAtICh5MCAqIHUxKSAgICAgIC0gKHUwICogeTIpO1xuICAgIHZhciBkZWx0YUYgPSAodTAgKiB2MSAqIHkyKSArICh2MCAqIHkxICogdTIpICsgKHkwICogdTEgKiB2MikgLSAoeTAgKiB2MSAqIHUyKSAtICh2MCAqIHUxICogeTIpIC0gKHUwICogeTEgKiB2Mik7XG5cbiAgICBjb250ZXh0LnRyYW5zZm9ybShkZWx0YUEgLyBkZWx0YSwgZGVsdGFEIC8gZGVsdGEsXG4gICAgICAgIGRlbHRhQiAvIGRlbHRhLCBkZWx0YUUgLyBkZWx0YSxcbiAgICAgICAgZGVsdGFDIC8gZGVsdGEsIGRlbHRhRiAvIGRlbHRhKTtcblxuICAgIGNvbnRleHQuZHJhd0ltYWdlKHRleHR1cmVTb3VyY2UsIDAsIDApO1xuICAgIGNvbnRleHQucmVzdG9yZSgpO1xufTtcblxuXG5cbi8qKlxuICogUmVuZGVycyBhIGZsYXQgTWVzaFxuICpcbiAqIEBwYXJhbSBNZXNoIHtQSVhJLm1lc2guTWVzaH0gVGhlIE1lc2ggdG8gcmVuZGVyXG4gKiBAcHJpdmF0ZVxuICovXG5NZXNoLnByb3RvdHlwZS5yZW5kZXJNZXNoRmxhdCA9IGZ1bmN0aW9uIChNZXNoKVxue1xuICAgIHZhciBjb250ZXh0ID0gdGhpcy5jb250ZXh0O1xuICAgIHZhciB2ZXJ0aWNlcyA9IE1lc2gudmVydGljZXM7XG5cbiAgICB2YXIgbGVuZ3RoID0gdmVydGljZXMubGVuZ3RoLzI7XG4gICAgLy8gdGhpcy5jb3VudCsrO1xuXG4gICAgY29udGV4dC5iZWdpblBhdGgoKTtcbiAgICBmb3IgKHZhciBpPTE7IGkgPCBsZW5ndGgtMjsgaSsrKVxuICAgIHtcbiAgICAgICAgLy8gZHJhdyBzb21lIHRyaWFuZ2xlcyFcbiAgICAgICAgdmFyIGluZGV4ID0gaSoyO1xuXG4gICAgICAgIHZhciB4MCA9IHZlcnRpY2VzW2luZGV4XSwgICB4MSA9IHZlcnRpY2VzW2luZGV4KzJdLCB4MiA9IHZlcnRpY2VzW2luZGV4KzRdO1xuICAgICAgICB2YXIgeTAgPSB2ZXJ0aWNlc1tpbmRleCsxXSwgeTEgPSB2ZXJ0aWNlc1tpbmRleCszXSwgeTIgPSB2ZXJ0aWNlc1tpbmRleCs1XTtcblxuICAgICAgICBjb250ZXh0Lm1vdmVUbyh4MCwgeTApO1xuICAgICAgICBjb250ZXh0LmxpbmVUbyh4MSwgeTEpO1xuICAgICAgICBjb250ZXh0LmxpbmVUbyh4MiwgeTIpO1xuICAgIH1cblxuICAgIGNvbnRleHQuZmlsbFN0eWxlID0gJyNGRjAwMDAnO1xuICAgIGNvbnRleHQuZmlsbCgpO1xuICAgIGNvbnRleHQuY2xvc2VQYXRoKCk7XG59O1xuXG4vKipcbiAqIFdoZW4gdGhlIHRleHR1cmUgaXMgdXBkYXRlZCwgdGhpcyBldmVudCB3aWxsIGZpcmUgdG8gdXBkYXRlIHRoZSBzY2FsZSBhbmQgZnJhbWVcbiAqXG4gKiBAcGFyYW0gZXZlbnRcbiAqIEBwcml2YXRlXG4gKi9cbk1lc2gucHJvdG90eXBlLl9vblRleHR1cmVVcGRhdGUgPSBmdW5jdGlvbiAoKVxue1xuICAgIHRoaXMudXBkYXRlRnJhbWUgPSB0cnVlO1xufTtcblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBib3VuZHMgb2YgdGhlIG1lc2ggYXMgYSByZWN0YW5nbGUuIFRoZSBib3VuZHMgY2FsY3VsYXRpb24gdGFrZXMgdGhlIHdvcmxkVHJhbnNmb3JtIGludG8gYWNjb3VudC5cbiAqXG4gKiBAcGFyYW0gbWF0cml4IHtQSVhJLk1hdHJpeH0gdGhlIHRyYW5zZm9ybWF0aW9uIG1hdHJpeCBvZiB0aGUgc3ByaXRlXG4gKiBAcmV0dXJuIHtQSVhJLlJlY3RhbmdsZX0gdGhlIGZyYW1pbmcgcmVjdGFuZ2xlXG4gKi9cbk1lc2gucHJvdG90eXBlLmdldEJvdW5kcyA9IGZ1bmN0aW9uIChtYXRyaXgpXG57XG4gICAgaWYgKCF0aGlzLl9jdXJyZW50Qm91bmRzKSB7XG4gICAgICAgIHZhciB3b3JsZFRyYW5zZm9ybSA9IG1hdHJpeCB8fCB0aGlzLndvcmxkVHJhbnNmb3JtO1xuXG4gICAgICAgIHZhciBhID0gd29ybGRUcmFuc2Zvcm0uYTtcbiAgICAgICAgdmFyIGIgPSB3b3JsZFRyYW5zZm9ybS5iO1xuICAgICAgICB2YXIgYyA9IHdvcmxkVHJhbnNmb3JtLmM7XG4gICAgICAgIHZhciBkID0gd29ybGRUcmFuc2Zvcm0uZDtcbiAgICAgICAgdmFyIHR4ID0gd29ybGRUcmFuc2Zvcm0udHg7XG4gICAgICAgIHZhciB0eSA9IHdvcmxkVHJhbnNmb3JtLnR5O1xuXG4gICAgICAgIHZhciBtYXhYID0gLUluZmluaXR5O1xuICAgICAgICB2YXIgbWF4WSA9IC1JbmZpbml0eTtcblxuICAgICAgICB2YXIgbWluWCA9IEluZmluaXR5O1xuICAgICAgICB2YXIgbWluWSA9IEluZmluaXR5O1xuXG4gICAgICAgIHZhciB2ZXJ0aWNlcyA9IHRoaXMudmVydGljZXM7XG4gICAgICAgIGZvciAodmFyIGkgPSAwLCBuID0gdmVydGljZXMubGVuZ3RoOyBpIDwgbjsgaSArPSAyKSB7XG4gICAgICAgICAgICB2YXIgcmF3WCA9IHZlcnRpY2VzW2ldLCByYXdZID0gdmVydGljZXNbaSArIDFdO1xuICAgICAgICAgICAgdmFyIHggPSAoYSAqIHJhd1gpICsgKGMgKiByYXdZKSArIHR4O1xuICAgICAgICAgICAgdmFyIHkgPSAoZCAqIHJhd1kpICsgKGIgKiByYXdYKSArIHR5O1xuXG4gICAgICAgICAgICBtaW5YID0geCA8IG1pblggPyB4IDogbWluWDtcbiAgICAgICAgICAgIG1pblkgPSB5IDwgbWluWSA/IHkgOiBtaW5ZO1xuXG4gICAgICAgICAgICBtYXhYID0geCA+IG1heFggPyB4IDogbWF4WDtcbiAgICAgICAgICAgIG1heFkgPSB5ID4gbWF4WSA/IHkgOiBtYXhZO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG1pblggPT09IC1JbmZpbml0eSB8fCBtYXhZID09PSBJbmZpbml0eSkge1xuICAgICAgICAgICAgcmV0dXJuIGNvcmUuUmVjdGFuZ2xlLkVNUFRZO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGJvdW5kcyA9IHRoaXMuX2JvdW5kcztcblxuICAgICAgICBib3VuZHMueCA9IG1pblg7XG4gICAgICAgIGJvdW5kcy53aWR0aCA9IG1heFggLSBtaW5YO1xuXG4gICAgICAgIGJvdW5kcy55ID0gbWluWTtcbiAgICAgICAgYm91bmRzLmhlaWdodCA9IG1heFkgLSBtaW5ZO1xuXG4gICAgICAgIC8vIHN0b3JlIGEgcmVmZXJlbmNlIHNvIHRoYXQgaWYgdGhpcyBmdW5jdGlvbiBnZXRzIGNhbGxlZCBhZ2FpbiBpbiB0aGUgcmVuZGVyIGN5Y2xlIHdlIGRvIG5vdCBoYXZlIHRvIHJlY2FsY3VsYXRlXG4gICAgICAgIHRoaXMuX2N1cnJlbnRCb3VuZHMgPSBib3VuZHM7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuX2N1cnJlbnRCb3VuZHM7XG59O1xuXG4vKipcbiAqIFRlc3RzIGlmIGEgcG9pbnQgaXMgaW5zaWRlIHRoaXMgbWVzaC4gV29ya3Mgb25seSBmb3IgVFJJQU5HTEVfTUVTSFxuICpcbiAqIEBwYXJhbSBwb2ludCB7UElYSS5Qb2ludH0gdGhlIHBvaW50IHRvIHRlc3RcbiAqIEByZXR1cm4ge2Jvb2xlYW59IHRoZSByZXN1bHQgb2YgdGhlIHRlc3RcbiAqL1xuTWVzaC5wcm90b3R5cGUuY29udGFpbnNQb2ludCA9IGZ1bmN0aW9uKCBwb2ludCApIHtcbiAgICBpZiAoIXRoaXMuZ2V0Qm91bmRzKCkuY29udGFpbnMocG9pbnQueCwgcG9pbnQueSkpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICB0aGlzLndvcmxkVHJhbnNmb3JtLmFwcGx5SW52ZXJzZShwb2ludCwgIHRlbXBQb2ludCk7XG5cbiAgICB2YXIgdmVydGljZXMgPSB0aGlzLnZlcnRpY2VzO1xuICAgIHZhciBwb2ludHMgPSB0ZW1wUG9seWdvbi5wb2ludHM7XG4gICAgdmFyIGksIGxlbjtcblxuICAgIGlmICh0aGlzLmRyYXdNb2RlID09PSBNZXNoLkRSQVdfTU9ERVMuVFJJQU5HTEVTKSB7XG4gICAgICAgIHZhciBpbmRpY2VzID0gdGhpcy5pbmRpY2VzO1xuICAgICAgICBsZW4gPSB0aGlzLmluZGljZXMubGVuZ3RoO1xuICAgICAgICAvL1RPRE86IGlubGluZSB0aGlzLlxuICAgICAgICBmb3IgKGk9MDtpPGxlbjtpKz0zKSB7XG4gICAgICAgICAgICB2YXIgaW5kMCA9IGluZGljZXNbaV0qMiwgaW5kMSA9IGluZGljZXNbaSsxXSoyLCBpbmQyID0gaW5kaWNlc1tpKzJdKjI7XG4gICAgICAgICAgICBwb2ludHNbMF0gPSB2ZXJ0aWNlc1tpbmQwXTtcbiAgICAgICAgICAgIHBvaW50c1sxXSA9IHZlcnRpY2VzW2luZDArMV07XG4gICAgICAgICAgICBwb2ludHNbMl0gPSB2ZXJ0aWNlc1tpbmQxXTtcbiAgICAgICAgICAgIHBvaW50c1szXSA9IHZlcnRpY2VzW2luZDErMV07XG4gICAgICAgICAgICBwb2ludHNbNF0gPSB2ZXJ0aWNlc1tpbmQyXTtcbiAgICAgICAgICAgIHBvaW50c1s1XSA9IHZlcnRpY2VzW2luZDIrMV07XG4gICAgICAgICAgICBpZiAodGVtcFBvbHlnb24uY29udGFpbnModGVtcFBvaW50LngsIHRlbXBQb2ludC55KSkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgICAgbGVuID0gdmVydGljZXMubGVuZ3RoO1xuICAgICAgICBmb3IgKGk9MDtpPGxlbjtpKz02KSB7XG4gICAgICAgICAgICBwb2ludHNbMF0gPSB2ZXJ0aWNlc1tpXTtcbiAgICAgICAgICAgIHBvaW50c1sxXSA9IHZlcnRpY2VzW2krMV07XG4gICAgICAgICAgICBwb2ludHNbMl0gPSB2ZXJ0aWNlc1tpKzJdO1xuICAgICAgICAgICAgcG9pbnRzWzNdID0gdmVydGljZXNbaSszXTtcbiAgICAgICAgICAgIHBvaW50c1s0XSA9IHZlcnRpY2VzW2krNF07XG4gICAgICAgICAgICBwb2ludHNbNV0gPSB2ZXJ0aWNlc1tpKzVdO1xuICAgICAgICAgICAgaWYgKHRlbXBQb2x5Z29uLmNvbnRhaW5zKHRlbXBQb2ludC54LCB0ZW1wUG9pbnQueSkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG59O1xuXG4vKipcbiAqIERpZmZlcmVudCBkcmF3aW5nIGJ1ZmZlciBtb2RlcyBzdXBwb3J0ZWRcbiAqXG4gKiBAc3RhdGljXG4gKiBAY29uc3RhbnRcbiAqIEBwcm9wZXJ0eSB7b2JqZWN0fSBEUkFXX01PREVTXG4gKiBAcHJvcGVydHkge251bWJlcn0gRFJBV19NT0RFUy5UUklBTkdMRV9NRVNIXG4gKiBAcHJvcGVydHkge251bWJlcn0gRFJBV19NT0RFUy5UUklBTkdMRVNcbiAqL1xuTWVzaC5EUkFXX01PREVTID0ge1xuICAgIFRSSUFOR0xFX01FU0g6IDAsXG4gICAgVFJJQU5HTEVTOiAxXG59O1xuIiwidmFyIE1lc2ggPSByZXF1aXJlKCcuL01lc2gnKTtcblxuLyoqXG4gKiBUaGUgUGxhbmUgYWxsb3dzIHlvdSB0byBkcmF3IGEgdGV4dHVyZSBhY3Jvc3Mgc2V2ZXJhbCBwb2ludHMgYW5kIHRoZW0gbWFuaXB1bGF0ZSB0aGVzZSBwb2ludHNcbiAqXG4gKmBgYGpzXG4gKiBmb3IgKHZhciBpID0gMDsgaSA8IDIwOyBpKyspIHtcbiAqICAgICBwb2ludHMucHVzaChuZXcgUElYSS5Qb2ludChpICogNTAsIDApKTtcbiAqIH07XG4gKiB2YXIgUGxhbmUgPSBuZXcgUElYSS5QbGFuZShQSVhJLlRleHR1cmUuZnJvbUltYWdlKFwic25ha2UucG5nXCIpLCBwb2ludHMpO1xuICogIGBgYFxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5tZXNoLk1lc2hcbiAqIEBtZW1iZXJvZiBQSVhJLm1lc2hcbiAqIEBwYXJhbSB7UElYSS5UZXh0dXJlfSB0ZXh0dXJlIC0gVGhlIHRleHR1cmUgdG8gdXNlIG9uIHRoZSBQbGFuZS5cbiAqIEBwYXJhbSB7aW50fSBzZWdtZW50c1ggLSBUaGUgbnVtYmVyIG94IHggc2VnbWVudHNcbiAqIEBwYXJhbSB7aW50fSBzZWdtZW50c1kgLSBUaGUgbnVtYmVyIG9mIHkgc2VnbWVudHNcbiAqXG4gKi9cbmZ1bmN0aW9uIFBsYW5lKHRleHR1cmUsIHNlZ21lbnRzWCwgc2VnbWVudHNZKVxue1xuICAgIE1lc2guY2FsbCh0aGlzLCB0ZXh0dXJlKTtcblxuICAgIC8qKlxuICAgICAqIFRyYWNrZXIgZm9yIGlmIHRoZSBQbGFuZSBpcyByZWFkeSB0byBiZSBkcmF3bi4gTmVlZGVkIGJlY2F1c2UgTWVzaCBjdG9yIGNhblxuICAgICAqIGNhbGwgX29uVGV4dHVyZVVwZGF0ZWQgd2hpY2ggY291bGQgY2FsbCByZWZyZXNoIHRvbyBlYXJseS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9yZWFkeSA9IHRydWU7XG5cbiAgICB0aGlzLnNlZ21lbnRzWCA9ICBzZWdtZW50c1ggfHwgMTA7XG4gICAgdGhpcy5zZWdtZW50c1kgPSBzZWdtZW50c1kgfHwgMTA7XG5cbiAgICB0aGlzLmRyYXdNb2RlID0gTWVzaC5EUkFXX01PREVTLlRSSUFOR0xFUztcbiAgICB0aGlzLnJlZnJlc2goKTtcblxufVxuXG5cbi8vIGNvbnN0cnVjdG9yXG5QbGFuZS5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKCBNZXNoLnByb3RvdHlwZSApO1xuUGxhbmUucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gUGxhbmU7XG5tb2R1bGUuZXhwb3J0cyA9IFBsYW5lO1xuXG4vKipcbiAqIFJlZnJlc2hlc1xuICpcbiAqL1xuUGxhbmUucHJvdG90eXBlLnJlZnJlc2ggPSBmdW5jdGlvbigpXG57XG4gICAgdmFyIHRvdGFsID0gdGhpcy5zZWdtZW50c1ggKiB0aGlzLnNlZ21lbnRzWTtcbiAgICB2YXIgdmVydHMgPSBbXTtcbiAgICB2YXIgY29sb3JzID0gW107XG4gICAgdmFyIHV2cyA9IFtdO1xuICAgIHZhciBpbmRpY2VzID0gW107XG4gICAgdmFyIHRleHR1cmUgPSB0aGlzLnRleHR1cmU7XG5cbiAgLy8gIHRleHR1cmUud2lkdGggPSA4MDAgdGV4dHVyZS53aWR0aCB8fCA4MDA7XG4gLy8gICB0ZXh0dXJlLmhlaWdodCA9IDgwMC8vdGV4dHVyZS5oZWlnaHQgfHwgODAwO1xuXG4gICAgdmFyIHNlZ21lbnRzWFN1YiA9IHRoaXMuc2VnbWVudHNYIC0gMTtcbiAgICB2YXIgc2VnbWVudHNZU3ViID0gdGhpcy5zZWdtZW50c1kgLSAxO1xuICAgIHZhciBpID0gMDtcblxuICAgIHZhciBzaXplWCA9IHRleHR1cmUud2lkdGggLyBzZWdtZW50c1hTdWI7XG4gICAgdmFyIHNpemVZID0gdGV4dHVyZS5oZWlnaHQgLyBzZWdtZW50c1lTdWI7XG5cbiAgICBmb3IgKGkgPSAwOyBpIDwgdG90YWw7IGkrKykge1xuXG4gICAgICAgIHZhciB4ID0gKGkgJSB0aGlzLnNlZ21lbnRzWCk7XG4gICAgICAgIHZhciB5ID0gKCAoaSAvIHRoaXMuc2VnbWVudHNYICkgfCAwICk7XG5cblxuICAgICAgICB2ZXJ0cy5wdXNoKCh4ICogc2l6ZVgpLFxuICAgICAgICAgICAgICAgICAgICh5ICogc2l6ZVkpKTtcblxuICAgICAgICAvLyB0aGlzIHdvcmtzIGZvciByZWN0YW5ndWxhciB0ZXh0dXJlcy4gXG4gICAgICAgIHV2cy5wdXNoKHRleHR1cmUuX3V2cy54MCArICh0ZXh0dXJlLl91dnMueDEgLSB0ZXh0dXJlLl91dnMueDApICogKHggLyAodGhpcy5zZWdtZW50c1gtMSkpLCB0ZXh0dXJlLl91dnMueTAgKyAodGV4dHVyZS5fdXZzLnkzLXRleHR1cmUuX3V2cy55MCkgKiAoeS8gKHRoaXMuc2VnbWVudHNZLTEpKSk7XG4gICAgICB9XG5cbiAgICAvLyAgY29uc1xuXG4gICAgdmFyIHRvdGFsU3ViID0gc2VnbWVudHNYU3ViICogc2VnbWVudHNZU3ViO1xuXG4gICAgZm9yIChpID0gMDsgaSA8IHRvdGFsU3ViOyBpKyspIHtcblxuICAgICAgICB2YXIgeHBvcyA9IGkgJSBzZWdtZW50c1hTdWI7XG4gICAgICAgIHZhciB5cG9zID0gKGkgLyBzZWdtZW50c1hTdWIgKSB8IDA7XG5cblxuICAgICAgICB2YXIgIHZhbHVlID0gKHlwb3MgKiB0aGlzLnNlZ21lbnRzWCkgKyB4cG9zO1xuICAgICAgICB2YXIgIHZhbHVlMiA9ICh5cG9zICogdGhpcy5zZWdtZW50c1gpICsgeHBvcyArIDE7XG4gICAgICAgIHZhciAgdmFsdWUzID0gKCh5cG9zKzEpICogdGhpcy5zZWdtZW50c1gpICsgeHBvcztcbiAgICAgICAgdmFyICB2YWx1ZTQgPSAoKHlwb3MrMSkgKiB0aGlzLnNlZ21lbnRzWCkgKyB4cG9zICsgMTtcblxuICAgICAgICBpbmRpY2VzLnB1c2godmFsdWUsIHZhbHVlMiwgdmFsdWUzKTtcbiAgICAgICAgaW5kaWNlcy5wdXNoKHZhbHVlMiwgdmFsdWU0LCB2YWx1ZTMpO1xuICAgIH1cblxuXG4gICAgLy9jb25zb2xlLmxvZyhpbmRpY2VzKVxuICAgIHRoaXMudmVydGljZXMgPSBuZXcgRmxvYXQzMkFycmF5KHZlcnRzKTtcbiAgICB0aGlzLnV2cyA9IG5ldyBGbG9hdDMyQXJyYXkodXZzKTtcbiAgICB0aGlzLmNvbG9ycyA9IG5ldyBGbG9hdDMyQXJyYXkoY29sb3JzKTtcbiAgICB0aGlzLmluZGljZXMgPSBuZXcgVWludDE2QXJyYXkoaW5kaWNlcyk7XG59O1xuXG4vKipcbiAqIENsZWFyIHRleHR1cmUgVVZzIHdoZW4gbmV3IHRleHR1cmUgaXMgc2V0XG4gKlxuICogQHByaXZhdGVcbiAqL1xuUGxhbmUucHJvdG90eXBlLl9vblRleHR1cmVVcGRhdGUgPSBmdW5jdGlvbiAoKVxue1xuICAgIE1lc2gucHJvdG90eXBlLl9vblRleHR1cmVVcGRhdGUuY2FsbCh0aGlzKTtcblxuICAgIC8vIHdhaXQgZm9yIHRoZSBQbGFuZSBjdG9yIHRvIGZpbmlzaCBiZWZvcmUgY2FsbGluZyByZWZyZXNoXG4gICAgaWYgKHRoaXMuX3JlYWR5KSB7XG4gICAgICAgIHRoaXMucmVmcmVzaCgpO1xuICAgIH1cbn07XG4iLCJ2YXIgTWVzaCA9IHJlcXVpcmUoJy4vTWVzaCcpO1xudmFyIGNvcmUgPSByZXF1aXJlKCcuLi9jb3JlJyk7XG5cbi8qKlxuICogVGhlIHJvcGUgYWxsb3dzIHlvdSB0byBkcmF3IGEgdGV4dHVyZSBhY3Jvc3Mgc2V2ZXJhbCBwb2ludHMgYW5kIHRoZW0gbWFuaXB1bGF0ZSB0aGVzZSBwb2ludHNcbiAqXG4gKmBgYGpzXG4gKiBmb3IgKHZhciBpID0gMDsgaSA8IDIwOyBpKyspIHtcbiAqICAgICBwb2ludHMucHVzaChuZXcgUElYSS5Qb2ludChpICogNTAsIDApKTtcbiAqIH07XG4gKiB2YXIgcm9wZSA9IG5ldyBQSVhJLlJvcGUoUElYSS5UZXh0dXJlLmZyb21JbWFnZShcInNuYWtlLnBuZ1wiKSwgcG9pbnRzKTtcbiAqICBgYGBcbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkubWVzaC5NZXNoXG4gKiBAbWVtYmVyb2YgUElYSS5tZXNoXG4gKiBAcGFyYW0ge1BJWEkuVGV4dHVyZX0gdGV4dHVyZSAtIFRoZSB0ZXh0dXJlIHRvIHVzZSBvbiB0aGUgcm9wZS5cbiAqIEBwYXJhbSB7UElYSS5Qb2ludFtdfSBwb2ludHMgLSBBbiBhcnJheSBvZiB7QGxpbmsgUElYSS5Qb2ludH0gb2JqZWN0cyB0byBjb25zdHJ1Y3QgdGhpcyByb3BlLlxuICpcbiAqL1xuZnVuY3Rpb24gUm9wZSh0ZXh0dXJlLCBwb2ludHMpXG57XG4gICAgTWVzaC5jYWxsKHRoaXMsIHRleHR1cmUpO1xuXG4gICAgLypcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlBvaW50W119IEFuIGFycmF5IG9mIHBvaW50cyB0aGF0IGRldGVybWluZSB0aGUgcm9wZVxuICAgICAqL1xuICAgIHRoaXMucG9pbnRzID0gcG9pbnRzO1xuXG4gICAgLypcbiAgICAgKiBAbWVtYmVyIHtGbG9hdDMyQXJyYXl9IEFuIGFycmF5IG9mIHZlcnRpY2VzIHVzZWQgdG8gY29uc3RydWN0IHRoaXMgcm9wZS5cbiAgICAgKi9cbiAgICB0aGlzLnZlcnRpY2VzID0gbmV3IEZsb2F0MzJBcnJheShwb2ludHMubGVuZ3RoICogNCk7XG5cbiAgICAvKlxuICAgICAqIEBtZW1iZXIge0Zsb2F0MzJBcnJheX0gVGhlIFdlYkdMIFV2cyBvZiB0aGUgcm9wZS5cbiAgICAgKi9cbiAgICB0aGlzLnV2cyA9IG5ldyBGbG9hdDMyQXJyYXkocG9pbnRzLmxlbmd0aCAqIDQpO1xuXG4gICAgLypcbiAgICAgKiBAbWVtYmVyIHtGbG9hdDMyQXJyYXl9IEFuIGFycmF5IGNvbnRhaW5pbmcgdGhlIGNvbG9yIGNvbXBvbmVudHNcbiAgICAgKi9cbiAgICB0aGlzLmNvbG9ycyA9IG5ldyBGbG9hdDMyQXJyYXkocG9pbnRzLmxlbmd0aCAqIDIpO1xuXG4gICAgLypcbiAgICAgKiBAbWVtYmVyIHtVaW50MTZBcnJheX0gQW4gYXJyYXkgY29udGFpbmluZyB0aGUgaW5kaWNlcyBvZiB0aGUgdmVydGljZXNcbiAgICAgKi9cbiAgICB0aGlzLmluZGljZXMgPSBuZXcgVWludDE2QXJyYXkocG9pbnRzLmxlbmd0aCAqIDIpO1xuXG4gICAgLyoqXG4gICAgICogVHJhY2tlciBmb3IgaWYgdGhlIHJvcGUgaXMgcmVhZHkgdG8gYmUgZHJhd24uIE5lZWRlZCBiZWNhdXNlIE1lc2ggY3RvciBjYW5cbiAgICAgKiBjYWxsIF9vblRleHR1cmVVcGRhdGVkIHdoaWNoIGNvdWxkIGNhbGwgcmVmcmVzaCB0b28gZWFybHkuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgIHRoaXMuX3JlYWR5ID0gdHJ1ZTtcblxuICAgICB0aGlzLnJlZnJlc2goKTtcbn1cblxuXG4vLyBjb25zdHJ1Y3RvclxuUm9wZS5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKE1lc2gucHJvdG90eXBlKTtcblJvcGUucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gUm9wZTtcbm1vZHVsZS5leHBvcnRzID0gUm9wZTtcblxuLyoqXG4gKiBSZWZyZXNoZXNcbiAqXG4gKi9cblJvcGUucHJvdG90eXBlLnJlZnJlc2ggPSBmdW5jdGlvbiAoKVxue1xuICAgIHZhciBwb2ludHMgPSB0aGlzLnBvaW50cztcblxuICAgIC8vIGlmIHRvbyBsaXR0bGUgcG9pbnRzLCBvciB0ZXh0dXJlIGhhc24ndCBnb3QgVVZzIHNldCB5ZXQganVzdCBtb3ZlIG9uLlxuICAgIGlmIChwb2ludHMubGVuZ3RoIDwgMSB8fCAhdGhpcy5fdGV4dHVyZS5fdXZzKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHZhciB1dnMgPSB0aGlzLnV2cztcblxuICAgIHZhciBpbmRpY2VzID0gdGhpcy5pbmRpY2VzO1xuICAgIHZhciBjb2xvcnMgPSB0aGlzLmNvbG9ycztcblxuICAgIHZhciB0ZXh0dXJlVXZzID0gdGhpcy5fdGV4dHVyZS5fdXZzO1xuICAgIHZhciBvZmZzZXQgPSBuZXcgY29yZS5Qb2ludCh0ZXh0dXJlVXZzLngwLCB0ZXh0dXJlVXZzLnkwKTtcbiAgICB2YXIgZmFjdG9yID0gbmV3IGNvcmUuUG9pbnQodGV4dHVyZVV2cy54MiAtIHRleHR1cmVVdnMueDAsIHRleHR1cmVVdnMueTIgLSB0ZXh0dXJlVXZzLnkwKTtcblxuICAgIHV2c1swXSA9IDAgKyBvZmZzZXQueDtcbiAgICB1dnNbMV0gPSAwICsgb2Zmc2V0Lnk7XG4gICAgdXZzWzJdID0gMCArIG9mZnNldC54O1xuICAgIHV2c1szXSA9IDEgKiBmYWN0b3IueSArIG9mZnNldC55O1xuXG4gICAgY29sb3JzWzBdID0gMTtcbiAgICBjb2xvcnNbMV0gPSAxO1xuXG4gICAgaW5kaWNlc1swXSA9IDA7XG4gICAgaW5kaWNlc1sxXSA9IDE7XG5cbiAgICB2YXIgdG90YWwgPSBwb2ludHMubGVuZ3RoLFxuICAgICAgICBwb2ludCwgaW5kZXgsIGFtb3VudDtcblxuICAgIGZvciAodmFyIGkgPSAxOyBpIDwgdG90YWw7IGkrKylcbiAgICB7XG4gICAgICAgIHBvaW50ID0gcG9pbnRzW2ldO1xuICAgICAgICBpbmRleCA9IGkgKiA0O1xuICAgICAgICAvLyB0aW1lIHRvIGRvIHNvbWUgc21hcnQgZHJhd2luZyFcbiAgICAgICAgYW1vdW50ID0gaSAvICh0b3RhbC0xKTtcblxuICAgICAgICB1dnNbaW5kZXhdID0gYW1vdW50ICogZmFjdG9yLnggKyBvZmZzZXQueDtcbiAgICAgICAgdXZzW2luZGV4KzFdID0gMCArIG9mZnNldC55O1xuXG4gICAgICAgIHV2c1tpbmRleCsyXSA9IGFtb3VudCAqIGZhY3Rvci54ICsgb2Zmc2V0Lng7XG4gICAgICAgIHV2c1tpbmRleCszXSA9IDEgKiBmYWN0b3IueSArIG9mZnNldC55O1xuXG4gICAgICAgIGluZGV4ID0gaSAqIDI7XG4gICAgICAgIGNvbG9yc1tpbmRleF0gPSAxO1xuICAgICAgICBjb2xvcnNbaW5kZXgrMV0gPSAxO1xuXG4gICAgICAgIGluZGV4ID0gaSAqIDI7XG4gICAgICAgIGluZGljZXNbaW5kZXhdID0gaW5kZXg7XG4gICAgICAgIGluZGljZXNbaW5kZXggKyAxXSA9IGluZGV4ICsgMTtcbiAgICB9XG5cbiAgICB0aGlzLmRpcnR5ID0gdHJ1ZTtcbn07XG5cbi8qKlxuICogQ2xlYXIgdGV4dHVyZSBVVnMgd2hlbiBuZXcgdGV4dHVyZSBpcyBzZXRcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5Sb3BlLnByb3RvdHlwZS5fb25UZXh0dXJlVXBkYXRlID0gZnVuY3Rpb24gKClcbntcbiAgICBNZXNoLnByb3RvdHlwZS5fb25UZXh0dXJlVXBkYXRlLmNhbGwodGhpcyk7XG5cbiAgICAvLyB3YWl0IGZvciB0aGUgUm9wZSBjdG9yIHRvIGZpbmlzaCBiZWZvcmUgY2FsbGluZyByZWZyZXNoXG4gICAgaWYgKHRoaXMuX3JlYWR5KSB7XG4gICAgICAgIHRoaXMucmVmcmVzaCgpO1xuICAgIH1cbn07XG5cbi8qKlxuICogVXBkYXRlcyB0aGUgb2JqZWN0IHRyYW5zZm9ybSBmb3IgcmVuZGVyaW5nXG4gKlxuICogQHByaXZhdGVcbiAqL1xuUm9wZS5wcm90b3R5cGUudXBkYXRlVHJhbnNmb3JtID0gZnVuY3Rpb24gKClcbntcbiAgICB2YXIgcG9pbnRzID0gdGhpcy5wb2ludHM7XG5cbiAgICBpZiAocG9pbnRzLmxlbmd0aCA8IDEpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFyIGxhc3RQb2ludCA9IHBvaW50c1swXTtcbiAgICB2YXIgbmV4dFBvaW50O1xuICAgIHZhciBwZXJwWCA9IDA7XG4gICAgdmFyIHBlcnBZID0gMDtcblxuICAgIC8vIHRoaXMuY291bnQgLT0gMC4yO1xuXG4gICAgdmFyIHZlcnRpY2VzID0gdGhpcy52ZXJ0aWNlcztcbiAgICB2YXIgdG90YWwgPSBwb2ludHMubGVuZ3RoLFxuICAgICAgICBwb2ludCwgaW5kZXgsIHJhdGlvLCBwZXJwTGVuZ3RoLCBudW07XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRvdGFsOyBpKyspXG4gICAge1xuICAgICAgICBwb2ludCA9IHBvaW50c1tpXTtcbiAgICAgICAgaW5kZXggPSBpICogNDtcblxuICAgICAgICBpZiAoaSA8IHBvaW50cy5sZW5ndGgtMSlcbiAgICAgICAge1xuICAgICAgICAgICAgbmV4dFBvaW50ID0gcG9pbnRzW2krMV07XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgICBuZXh0UG9pbnQgPSBwb2ludDtcbiAgICAgICAgfVxuXG4gICAgICAgIHBlcnBZID0gLShuZXh0UG9pbnQueCAtIGxhc3RQb2ludC54KTtcbiAgICAgICAgcGVycFggPSBuZXh0UG9pbnQueSAtIGxhc3RQb2ludC55O1xuXG4gICAgICAgIHJhdGlvID0gKDEgLSAoaSAvICh0b3RhbC0xKSkpICogMTA7XG5cbiAgICAgICAgaWYgKHJhdGlvID4gMSlcbiAgICAgICAge1xuICAgICAgICAgICAgcmF0aW8gPSAxO1xuICAgICAgICB9XG5cbiAgICAgICAgcGVycExlbmd0aCA9IE1hdGguc3FydChwZXJwWCAqIHBlcnBYICsgcGVycFkgKiBwZXJwWSk7XG4gICAgICAgIG51bSA9IHRoaXMuX3RleHR1cmUuaGVpZ2h0IC8gMjsgLy8oMjAgKyBNYXRoLmFicyhNYXRoLnNpbigoaSArIHRoaXMuY291bnQpICogMC4zKSAqIDUwKSApKiByYXRpbztcbiAgICAgICAgcGVycFggLz0gcGVycExlbmd0aDtcbiAgICAgICAgcGVycFkgLz0gcGVycExlbmd0aDtcblxuICAgICAgICBwZXJwWCAqPSBudW07XG4gICAgICAgIHBlcnBZICo9IG51bTtcblxuICAgICAgICB2ZXJ0aWNlc1tpbmRleF0gPSBwb2ludC54ICsgcGVycFg7XG4gICAgICAgIHZlcnRpY2VzW2luZGV4KzFdID0gcG9pbnQueSArIHBlcnBZO1xuICAgICAgICB2ZXJ0aWNlc1tpbmRleCsyXSA9IHBvaW50LnggLSBwZXJwWDtcbiAgICAgICAgdmVydGljZXNbaW5kZXgrM10gPSBwb2ludC55IC0gcGVycFk7XG5cbiAgICAgICAgbGFzdFBvaW50ID0gcG9pbnQ7XG4gICAgfVxuXG4gICAgdGhpcy5jb250YWluZXJVcGRhdGVUcmFuc2Zvcm0oKTtcbn07XG4iLCIvKipcbiAqIEBmaWxlICAgICAgICBNYWluIGV4cG9ydCBvZiB0aGUgUElYSSBleHRyYXMgbGlicmFyeVxuICogQGF1dGhvciAgICAgIE1hdCBHcm92ZXMgPG1hdEBnb29kYm95ZGlnaXRhbC5jb20+XG4gKiBAY29weXJpZ2h0ICAgMjAxMy0yMDE1IEdvb2RCb3lEaWdpdGFsXG4gKiBAbGljZW5zZSAgICAge0BsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9waXhpanMvcGl4aS5qcy9ibG9iL21hc3Rlci9MSUNFTlNFfE1JVCBMaWNlbnNlfVxuICovXG5cbi8qKlxuICogQG5hbWVzcGFjZSBQSVhJLm1lc2hcbiAqL1xubW9kdWxlLmV4cG9ydHMgPSB7XG4gICAgTWVzaDogICAgICAgICAgIHJlcXVpcmUoJy4vTWVzaCcpLFxuICAgIFBsYW5lOiAgICAgICAgICAgcmVxdWlyZSgnLi9QbGFuZScpLFxuICAgIFJvcGU6ICAgICAgICAgICByZXF1aXJlKCcuL1JvcGUnKSxcbiAgICBNZXNoUmVuZGVyZXI6ICAgcmVxdWlyZSgnLi93ZWJnbC9NZXNoUmVuZGVyZXInKSxcbiAgICBNZXNoU2hhZGVyOiAgICAgcmVxdWlyZSgnLi93ZWJnbC9NZXNoU2hhZGVyJylcbn07XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uLy4uL2NvcmUnKSxcbiAgICBNZXNoID0gcmVxdWlyZSgnLi4vTWVzaCcpO1xuXG4vKipcbiAqIEBhdXRob3IgTWF0IEdyb3Zlc1xuICpcbiAqIEJpZyB0aGFua3MgdG8gdGhlIHZlcnkgY2xldmVyIE1hdHQgRGVzTGF1cmllcnMgPG1hdHRkZXNsPiBodHRwczovL2dpdGh1Yi5jb20vbWF0dGRlc2wvXG4gKiBmb3IgY3JlYXRpbmcgdGhlIG9yaWdpbmFsIHBpeGkgdmVyc2lvbiFcbiAqIEFsc28gYSB0aGFua3MgdG8gaHR0cHM6Ly9naXRodWIuY29tL2JjaGV2YWxpZXIgZm9yIHR3ZWFraW5nIHRoZSB0aW50IGFuZCBhbHBoYSBzbyB0aGF0IHRoZXkgbm93IHNoYXJlIDQgYnl0ZXMgb24gdGhlIHZlcnRleCBidWZmZXJcbiAqXG4gKiBIZWF2aWx5IGluc3BpcmVkIGJ5IExpYkdEWCdzIE1lc2hSZW5kZXJlcjpcbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS9saWJnZHgvbGliZ2R4L2Jsb2IvbWFzdGVyL2dkeC9zcmMvY29tL2JhZGxvZ2ljL2dkeC9ncmFwaGljcy9nMmQvTWVzaFJlbmRlcmVyLmphdmFcbiAqL1xuXG4vKipcbiAqXG4gKiBAY2xhc3NcbiAqIEBwcml2YXRlXG4gKiBAbWVtYmVyb2YgUElYSS5tZXNoXG4gKiBAZXh0ZW5kcyBQSVhJLk9iamVjdFJlbmRlcmVyXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcn0gVGhlIHJlbmRlcmVyIHRoaXMgc3ByaXRlIGJhdGNoIHdvcmtzIGZvci5cbiAqL1xuZnVuY3Rpb24gTWVzaFJlbmRlcmVyKHJlbmRlcmVyKVxue1xuICAgIGNvcmUuT2JqZWN0UmVuZGVyZXIuY2FsbCh0aGlzLCByZW5kZXJlcik7XG5cblxuICAgIC8qKlxuICAgICAqIEhvbGRzIHRoZSBpbmRpY2VzXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtVaW50MTZBcnJheX1cbiAgICAgKi9cbiAgICBcbiAgICB0aGlzLmluZGljZXMgPSBuZXcgVWludDE2QXJyYXkoMTUwMDApO1xuXG4gICAgLy9UT0RPIHRoaXMgY291bGQgYmUgYSBzaW5nbGUgYnVmZmVyIHNoYXJlZCBhbW9uZ3N0IGFsbCByZW5kZXJlcnMgYXMgd2UgcmV1c2UgdGhpcyBzZXQgdXAgaW4gbW9zdCByZW5kZXJlcnNcbiAgICBmb3IgKHZhciBpPTAsIGo9MDsgaSA8IDE1MDAwOyBpICs9IDYsIGogKz0gNClcbiAgICB7XG4gICAgICAgIHRoaXMuaW5kaWNlc1tpICsgMF0gPSBqICsgMDtcbiAgICAgICAgdGhpcy5pbmRpY2VzW2kgKyAxXSA9IGogKyAxO1xuICAgICAgICB0aGlzLmluZGljZXNbaSArIDJdID0gaiArIDI7XG4gICAgICAgIHRoaXMuaW5kaWNlc1tpICsgM10gPSBqICsgMDtcbiAgICAgICAgdGhpcy5pbmRpY2VzW2kgKyA0XSA9IGogKyAyO1xuICAgICAgICB0aGlzLmluZGljZXNbaSArIDVdID0gaiArIDM7XG4gICAgfVxuXG4gICAgdGhpcy5jdXJyZW50U2hhZGVyID0gbnVsbDtcbn1cblxuTWVzaFJlbmRlcmVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoY29yZS5PYmplY3RSZW5kZXJlci5wcm90b3R5cGUpO1xuTWVzaFJlbmRlcmVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IE1lc2hSZW5kZXJlcjtcbm1vZHVsZS5leHBvcnRzID0gTWVzaFJlbmRlcmVyO1xuXG5jb3JlLldlYkdMUmVuZGVyZXIucmVnaXN0ZXJQbHVnaW4oJ21lc2gnLCBNZXNoUmVuZGVyZXIpO1xuXG4vKipcbiAqIFNldHMgdXAgdGhlIHJlbmRlcmVyIGNvbnRleHQgYW5kIG5lY2Vzc2FyeSBidWZmZXJzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0gZ2wge1dlYkdMUmVuZGVyaW5nQ29udGV4dH0gdGhlIGN1cnJlbnQgV2ViR0wgZHJhd2luZyBjb250ZXh0XG4gKi9cbk1lc2hSZW5kZXJlci5wcm90b3R5cGUub25Db250ZXh0Q2hhbmdlID0gZnVuY3Rpb24gKClcbntcblxufTtcblxuLyoqXG4gKiBSZW5kZXJzIHRoZSBzcHJpdGUgb2JqZWN0LlxuICpcbiAqIEBwYXJhbSBtZXNoIHtQSVhJLm1lc2guTWVzaH0gdGhlIG1lc2ggdG8gcmVuZGVyXG4gKi9cbk1lc2hSZW5kZXJlci5wcm90b3R5cGUucmVuZGVyID0gZnVuY3Rpb24gKG1lc2gpXG57XG4gICAgaWYoIW1lc2guX3ZlcnRleEJ1ZmZlcilcbiAgICB7XG4gICAgICAgIHRoaXMuX2luaXRXZWJHTChtZXNoKTtcbiAgICB9XG5cbiAgICB2YXIgcmVuZGVyZXIgPSB0aGlzLnJlbmRlcmVyLFxuICAgICAgICBnbCA9IHJlbmRlcmVyLmdsLFxuICAgICAgICB0ZXh0dXJlID0gbWVzaC5fdGV4dHVyZS5iYXNlVGV4dHVyZSxcbiAgICAgICAgc2hhZGVyID0gbWVzaC5zaGFkZXI7Ly8gfHwgcmVuZGVyZXIuc2hhZGVyTWFuYWdlci5wbHVnaW5zLm1lc2hTaGFkZXI7XG5cbiAgICB2YXIgZHJhd01vZGUgPSBtZXNoLmRyYXdNb2RlID09PSBNZXNoLkRSQVdfTU9ERVMuVFJJQU5HTEVfTUVTSCA/IGdsLlRSSUFOR0xFX1NUUklQIDogZ2wuVFJJQU5HTEVTO1xuXG4gICAgcmVuZGVyZXIuYmxlbmRNb2RlTWFuYWdlci5zZXRCbGVuZE1vZGUobWVzaC5ibGVuZE1vZGUpO1xuXG4gICAgLy9UT0RPIGNhY2hlIGN1c3RvbSBzdGF0ZS4uXG4gICAgaWYgKCFzaGFkZXIpXG4gICAge1xuICAgICAgICBzaGFkZXIgPSByZW5kZXJlci5zaGFkZXJNYW5hZ2VyLnBsdWdpbnMubWVzaFNoYWRlcjtcbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgc2hhZGVyID0gc2hhZGVyLnNoYWRlcnNbZ2wuaWRdIHx8IHNoYWRlci5nZXRTaGFkZXIocmVuZGVyZXIpOy8vIDogc2hhZGVyO1xuICAgIH1cblxuICAgIHRoaXMucmVuZGVyZXIuc2hhZGVyTWFuYWdlci5zZXRTaGFkZXIoc2hhZGVyKTtcblxuICAgIHNoYWRlci51bmlmb3Jtcy50cmFuc2xhdGlvbk1hdHJpeC52YWx1ZSA9IG1lc2gud29ybGRUcmFuc2Zvcm0udG9BcnJheSh0cnVlKTtcbiAgICBzaGFkZXIudW5pZm9ybXMucHJvamVjdGlvbk1hdHJpeC52YWx1ZSA9IHJlbmRlcmVyLmN1cnJlbnRSZW5kZXJUYXJnZXQucHJvamVjdGlvbk1hdHJpeC50b0FycmF5KHRydWUpO1xuICAgIHNoYWRlci51bmlmb3Jtcy5hbHBoYS52YWx1ZSA9IG1lc2gud29ybGRBbHBoYTtcblxuICAgIHNoYWRlci5zeW5jVW5pZm9ybXMoKTtcblxuICAgIGlmICghbWVzaC5kaXJ0eSlcbiAgICB7XG5cbiAgICAgICAgZ2wuYmluZEJ1ZmZlcihnbC5BUlJBWV9CVUZGRVIsIG1lc2guX3ZlcnRleEJ1ZmZlcik7XG4gICAgICAgIGdsLmJ1ZmZlclN1YkRhdGEoZ2wuQVJSQVlfQlVGRkVSLCAwLCBtZXNoLnZlcnRpY2VzKTtcbiAgICAgICAgZ2wudmVydGV4QXR0cmliUG9pbnRlcihzaGFkZXIuYXR0cmlidXRlcy5hVmVydGV4UG9zaXRpb24sIDIsIGdsLkZMT0FULCBmYWxzZSwgMCwgMCk7XG5cbiAgICAgICAgLy8gdXBkYXRlIHRoZSB1dnNcbiAgICAgICAgZ2wuYmluZEJ1ZmZlcihnbC5BUlJBWV9CVUZGRVIsIG1lc2guX3V2QnVmZmVyKTtcbiAgICAgICAgZ2wudmVydGV4QXR0cmliUG9pbnRlcihzaGFkZXIuYXR0cmlidXRlcy5hVGV4dHVyZUNvb3JkLCAyLCBnbC5GTE9BVCwgZmFsc2UsIDAsIDApO1xuXG5cbiAgICAgICAgZ2wuYWN0aXZlVGV4dHVyZShnbC5URVhUVVJFMCk7XG5cbiAgICAgICBpZiAoIXRleHR1cmUuX2dsVGV4dHVyZXNbZ2wuaWRdKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnJlbmRlcmVyLnVwZGF0ZVRleHR1cmUodGV4dHVyZSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgICAvLyBiaW5kIHRoZSBjdXJyZW50IHRleHR1cmVcbiAgICAgICAgICAgIGdsLmJpbmRUZXh0dXJlKGdsLlRFWFRVUkVfMkQsIHRleHR1cmUuX2dsVGV4dHVyZXNbZ2wuaWRdKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGdsLmJpbmRCdWZmZXIoZ2wuRUxFTUVOVF9BUlJBWV9CVUZGRVIsIG1lc2guX2luZGV4QnVmZmVyKTtcbiAgICAgICAgZ2wuYnVmZmVyU3ViRGF0YShnbC5FTEVNRU5UX0FSUkFZX0JVRkZFUiwgMCwgbWVzaC5pbmRpY2VzKTtcbiAgICB9XG4gICAgZWxzZVxuICAgIHtcblxuICAgICAgICBtZXNoLmRpcnR5ID0gZmFsc2U7XG4gICAgICAgIGdsLmJpbmRCdWZmZXIoZ2wuQVJSQVlfQlVGRkVSLCBtZXNoLl92ZXJ0ZXhCdWZmZXIpO1xuICAgICAgICBnbC5idWZmZXJEYXRhKGdsLkFSUkFZX0JVRkZFUiwgbWVzaC52ZXJ0aWNlcywgZ2wuU1RBVElDX0RSQVcpO1xuICAgICAgICBnbC52ZXJ0ZXhBdHRyaWJQb2ludGVyKHNoYWRlci5hdHRyaWJ1dGVzLmFWZXJ0ZXhQb3NpdGlvbiwgMiwgZ2wuRkxPQVQsIGZhbHNlLCAwLCAwKTtcblxuICAgICAgICAvLyB1cGRhdGUgdGhlIHV2c1xuICAgICAgICBnbC5iaW5kQnVmZmVyKGdsLkFSUkFZX0JVRkZFUiwgbWVzaC5fdXZCdWZmZXIpO1xuICAgICAgICBnbC5idWZmZXJEYXRhKGdsLkFSUkFZX0JVRkZFUiwgbWVzaC51dnMsIGdsLlNUQVRJQ19EUkFXKTtcbiAgICAgICAgZ2wudmVydGV4QXR0cmliUG9pbnRlcihzaGFkZXIuYXR0cmlidXRlcy5hVGV4dHVyZUNvb3JkLCAyLCBnbC5GTE9BVCwgZmFsc2UsIDAsIDApO1xuXG4gICAgICAgICBnbC5hY3RpdmVUZXh0dXJlKGdsLlRFWFRVUkUwKTtcblxuICAgICAgICBpZiAoIXRleHR1cmUuX2dsVGV4dHVyZXNbZ2wuaWRdKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnJlbmRlcmVyLnVwZGF0ZVRleHR1cmUodGV4dHVyZSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgICAvLyBiaW5kIHRoZSBjdXJyZW50IHRleHR1cmVcbiAgICAgICAgICAgIGdsLmJpbmRUZXh0dXJlKGdsLlRFWFRVUkVfMkQsIHRleHR1cmUuX2dsVGV4dHVyZXNbZ2wuaWRdKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGRvbnQgbmVlZCB0byB1cGxvYWQhXG4gICAgICAgIGdsLmJpbmRCdWZmZXIoZ2wuRUxFTUVOVF9BUlJBWV9CVUZGRVIsIG1lc2guX2luZGV4QnVmZmVyKTtcbiAgICAgICAgZ2wuYnVmZmVyRGF0YShnbC5FTEVNRU5UX0FSUkFZX0JVRkZFUiwgbWVzaC5pbmRpY2VzLCBnbC5TVEFUSUNfRFJBVyk7XG5cbiAgICB9XG5cbiAgICBnbC5kcmF3RWxlbWVudHMoZHJhd01vZGUsIG1lc2guaW5kaWNlcy5sZW5ndGgsIGdsLlVOU0lHTkVEX1NIT1JULCAwKTtcblxufTtcblxuLyoqXG4gKiBQcmVwYXJlcyBhbGwgdGhlIGJ1ZmZlcnMgdG8gcmVuZGVyIHRoaXMgbWVzaFxuICogQHBhcmFtIG1lc2gge1BJWEkubWVzaC5NZXNofSB0aGUgbWVzaCB0byByZW5kZXJcbiAqL1xuTWVzaFJlbmRlcmVyLnByb3RvdHlwZS5faW5pdFdlYkdMID0gZnVuY3Rpb24gKG1lc2gpXG57XG4gICAgLy8gYnVpbGQgdGhlIHN0cmlwIVxuICAgIHZhciBnbCA9IHRoaXMucmVuZGVyZXIuZ2w7XG5cbiAgICBtZXNoLl92ZXJ0ZXhCdWZmZXIgPSBnbC5jcmVhdGVCdWZmZXIoKTtcbiAgICBtZXNoLl9pbmRleEJ1ZmZlciA9IGdsLmNyZWF0ZUJ1ZmZlcigpO1xuICAgIG1lc2guX3V2QnVmZmVyID0gZ2wuY3JlYXRlQnVmZmVyKCk7XG5cblxuXG4gICAgZ2wuYmluZEJ1ZmZlcihnbC5BUlJBWV9CVUZGRVIsIG1lc2guX3ZlcnRleEJ1ZmZlcik7XG4gICAgZ2wuYnVmZmVyRGF0YShnbC5BUlJBWV9CVUZGRVIsIG1lc2gudmVydGljZXMsIGdsLkRZTkFNSUNfRFJBVyk7XG5cbiAgICBnbC5iaW5kQnVmZmVyKGdsLkFSUkFZX0JVRkZFUiwgbWVzaC5fdXZCdWZmZXIpO1xuICAgIGdsLmJ1ZmZlckRhdGEoZ2wuQVJSQVlfQlVGRkVSLCAgbWVzaC51dnMsIGdsLlNUQVRJQ19EUkFXKTtcblxuICAgIGlmKG1lc2guY29sb3JzKXtcbiAgICAgICAgbWVzaC5fY29sb3JCdWZmZXIgPSBnbC5jcmVhdGVCdWZmZXIoKTtcbiAgICAgICAgZ2wuYmluZEJ1ZmZlcihnbC5BUlJBWV9CVUZGRVIsIG1lc2guX2NvbG9yQnVmZmVyKTtcbiAgICAgICAgZ2wuYnVmZmVyRGF0YShnbC5BUlJBWV9CVUZGRVIsIG1lc2guY29sb3JzLCBnbC5TVEFUSUNfRFJBVyk7XG4gICAgfVxuXG4gICAgZ2wuYmluZEJ1ZmZlcihnbC5FTEVNRU5UX0FSUkFZX0JVRkZFUiwgbWVzaC5faW5kZXhCdWZmZXIpO1xuICAgIGdsLmJ1ZmZlckRhdGEoZ2wuRUxFTUVOVF9BUlJBWV9CVUZGRVIsIG1lc2guaW5kaWNlcywgZ2wuU1RBVElDX0RSQVcpO1xufTtcblxuXG4vKipcbiAqIEVtcHRpZXMgdGhlIGN1cnJlbnQgYmF0Y2guXG4gKlxuICovXG5NZXNoUmVuZGVyZXIucHJvdG90eXBlLmZsdXNoID0gZnVuY3Rpb24gKClcbntcblxufTtcblxuLyoqXG4gKiBTdGFydHMgYSBuZXcgbWVzaCByZW5kZXJlci5cbiAqXG4gKi9cbk1lc2hSZW5kZXJlci5wcm90b3R5cGUuc3RhcnQgPSBmdW5jdGlvbiAoKVxue1xuICAgIFxuXG4gICAgdGhpcy5jdXJyZW50U2hhZGVyID0gbnVsbDtcbn07XG5cbi8qKlxuICogRGVzdHJveXMgdGhlIE1lc2ggcmVuZGVyZXJcbiAqXG4gKi9cbk1lc2hSZW5kZXJlci5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uICgpXG57XG4gICAgY29yZS5PYmplY3RSZW5kZXJlci5wcm90b3R5cGUuZGVzdHJveS5jYWxsKHRoaXMpO1xufTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vLi4vY29yZScpO1xuXG4vKipcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5TaGFkZXJcbiAqIEBtZW1iZXJvZiBQSVhJLm1lc2hcbiAqIEBwYXJhbSBzaGFkZXJNYW5hZ2VyIHtQSVhJLlNoYWRlck1hbmFnZXJ9IFRoZSBXZWJHTCBzaGFkZXIgbWFuYWdlciB0aGlzIHNoYWRlciB3b3JrcyBmb3IuXG4gKi9cbmZ1bmN0aW9uIE1lc2hTaGFkZXIoc2hhZGVyTWFuYWdlcilcbntcbiAgICBjb3JlLlNoYWRlci5jYWxsKHRoaXMsXG4gICAgICAgIHNoYWRlck1hbmFnZXIsXG4gICAgICAgIC8vIHZlcnRleCBzaGFkZXJcbiAgICAgICAgW1xuICAgICAgICAgICAgJ3ByZWNpc2lvbiBsb3dwIGZsb2F0OycsXG4gICAgICAgICAgICAnYXR0cmlidXRlIHZlYzIgYVZlcnRleFBvc2l0aW9uOycsXG4gICAgICAgICAgICAnYXR0cmlidXRlIHZlYzIgYVRleHR1cmVDb29yZDsnLFxuXG4gICAgICAgICAgICAndW5pZm9ybSBtYXQzIHRyYW5zbGF0aW9uTWF0cml4OycsXG4gICAgICAgICAgICAndW5pZm9ybSBtYXQzIHByb2plY3Rpb25NYXRyaXg7JyxcblxuICAgICAgICAgICAgJ3ZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkOycsXG5cbiAgICAgICAgICAgICd2b2lkIG1haW4odm9pZCl7JyxcbiAgICAgICAgICAgICcgICBnbF9Qb3NpdGlvbiA9IHZlYzQoKHByb2plY3Rpb25NYXRyaXggKiB0cmFuc2xhdGlvbk1hdHJpeCAqIHZlYzMoYVZlcnRleFBvc2l0aW9uLCAxLjApKS54eSwgMC4wLCAxLjApOycsXG4gICAgICAgICAgICAnICAgdlRleHR1cmVDb29yZCA9IGFUZXh0dXJlQ29vcmQ7JyxcbiAgICAgICAgICAgICd9J1xuICAgICAgICBdLmpvaW4oJ1xcbicpLFxuICAgICAgICBbXG4gICAgICAgICAgICAncHJlY2lzaW9uIGxvd3AgZmxvYXQ7JyxcblxuICAgICAgICAgICAgJ3ZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkOycsXG4gICAgICAgICAgICAndW5pZm9ybSBmbG9hdCBhbHBoYTsnLFxuXG4gICAgICAgICAgICAndW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXI7JyxcblxuICAgICAgICAgICAgJ3ZvaWQgbWFpbih2b2lkKXsnLFxuICAgICAgICAgICAgJyAgIGdsX0ZyYWdDb2xvciA9IHRleHR1cmUyRCh1U2FtcGxlciwgdlRleHR1cmVDb29yZCkgKiBhbHBoYSA7JyxcbiAgICAgICAgICAgICd9J1xuICAgICAgICBdLmpvaW4oJ1xcbicpLFxuICAgICAgICAvLyBjdXN0b20gdW5pZm9ybXNcbiAgICAgICAge1xuICAgICAgICAgICAgYWxwaGE6ICB7IHR5cGU6ICcxZicsIHZhbHVlOiAwIH0sXG4gICAgICAgICAgICB0cmFuc2xhdGlvbk1hdHJpeDogeyB0eXBlOiAnbWF0MycsIHZhbHVlOiBuZXcgRmxvYXQzMkFycmF5KDkpIH0sXG4gICAgICAgICAgICBwcm9qZWN0aW9uTWF0cml4OiB7IHR5cGU6ICdtYXQzJywgdmFsdWU6IG5ldyBGbG9hdDMyQXJyYXkoOSkgfVxuICAgICAgICB9LFxuICAgICAgICAvLyBjdXN0b20gYXR0cmlidXRlc1xuICAgICAgICB7XG4gICAgICAgICAgICBhVmVydGV4UG9zaXRpb246MCxcbiAgICAgICAgICAgIGFUZXh0dXJlQ29vcmQ6MFxuICAgICAgICB9XG4gICAgKTtcbn1cblxuTWVzaFNoYWRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuU2hhZGVyLnByb3RvdHlwZSk7XG5NZXNoU2hhZGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IE1lc2hTaGFkZXI7XG5tb2R1bGUuZXhwb3J0cyA9IE1lc2hTaGFkZXI7XG5cbmNvcmUuU2hhZGVyTWFuYWdlci5yZWdpc3RlclBsdWdpbignbWVzaFNoYWRlcicsIE1lc2hTaGFkZXIpO1xuIiwiLy8gUmVmZXJlbmNlczpcbi8vIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0phdmFTY3JpcHQvUmVmZXJlbmNlL0dsb2JhbF9PYmplY3RzL01hdGgvc2lnblxuXG5pZiAoIU1hdGguc2lnbilcbntcbiAgICBNYXRoLnNpZ24gPSBmdW5jdGlvbiAoeCkge1xuICAgICAgICB4ID0gK3g7XG4gICAgICAgIGlmICh4ID09PSAwIHx8IGlzTmFOKHgpKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4geDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4geCA+IDAgPyAxIDogLTE7XG4gICAgfTtcbn1cbiIsIi8vIFJlZmVyZW5jZXM6XG4vLyBodHRwczovL2dpdGh1Yi5jb20vc2luZHJlc29yaHVzL29iamVjdC1hc3NpZ25cbi8vIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0phdmFTY3JpcHQvUmVmZXJlbmNlL0dsb2JhbF9PYmplY3RzL09iamVjdC9hc3NpZ25cblxuaWYgKCFPYmplY3QuYXNzaWduKVxue1xuICAgIE9iamVjdC5hc3NpZ24gPSByZXF1aXJlKCdvYmplY3QtYXNzaWduJyk7XG59XG4iLCJyZXF1aXJlKCcuL09iamVjdC5hc3NpZ24nKTtcbnJlcXVpcmUoJy4vcmVxdWVzdEFuaW1hdGlvbkZyYW1lJyk7XG5yZXF1aXJlKCcuL01hdGguc2lnbicpO1xuIiwiLy8gUmVmZXJlbmNlczpcbi8vIGh0dHA6Ly9wYXVsaXJpc2guY29tLzIwMTEvcmVxdWVzdGFuaW1hdGlvbmZyYW1lLWZvci1zbWFydC1hbmltYXRpbmcvXG4vLyBodHRwczovL2dpc3QuZ2l0aHViLmNvbS8xNTc5NjcxXG4vLyBodHRwOi8vdXBkYXRlcy5odG1sNXJvY2tzLmNvbS8yMDEyLzA1L3JlcXVlc3RBbmltYXRpb25GcmFtZS1BUEktbm93LXdpdGgtc3ViLW1pbGxpc2Vjb25kLXByZWNpc2lvblxuLy8gaHR0cHM6Ly9naXN0LmdpdGh1Yi5jb20vdGltaGFsbC80MDc4NjE0XG4vLyBodHRwczovL2dpdGh1Yi5jb20vRmluYW5jaWFsLVRpbWVzL3BvbHlmaWxsLXNlcnZpY2UvdHJlZS9tYXN0ZXIvcG9seWZpbGxzL3JlcXVlc3RBbmltYXRpb25GcmFtZVxuXG4vLyBFeHBlY3RlZCB0byBiZSB1c2VkIHdpdGggQnJvd3NlcmZpeVxuLy8gQnJvd3NlcmlmeSBhdXRvbWF0aWNhbGx5IGRldGVjdHMgdGhlIHVzZSBvZiBgZ2xvYmFsYCBhbmQgcGFzc2VzIHRoZVxuLy8gY29ycmVjdCByZWZlcmVuY2Ugb2YgYGdsb2JhbGAsIGBzZWxmYCwgYW5kIGZpbmFsbHkgYHdpbmRvd2BcblxuLy8gRGF0ZS5ub3dcbmlmICghKERhdGUubm93ICYmIERhdGUucHJvdG90eXBlLmdldFRpbWUpKSB7XG4gICAgRGF0ZS5ub3cgPSBmdW5jdGlvbiBub3coKSB7XG4gICAgICAgIHJldHVybiBuZXcgRGF0ZSgpLmdldFRpbWUoKTtcbiAgICB9O1xufVxuXG4vLyBwZXJmb3JtYW5jZS5ub3dcbmlmICghKGdsb2JhbC5wZXJmb3JtYW5jZSAmJiBnbG9iYWwucGVyZm9ybWFuY2Uubm93KSkge1xuICAgIHZhciBzdGFydFRpbWUgPSBEYXRlLm5vdygpO1xuICAgIGlmICghZ2xvYmFsLnBlcmZvcm1hbmNlKSB7XG4gICAgICAgIGdsb2JhbC5wZXJmb3JtYW5jZSA9IHt9O1xuICAgIH1cbiAgICBnbG9iYWwucGVyZm9ybWFuY2Uubm93ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gRGF0ZS5ub3coKSAtIHN0YXJ0VGltZTtcbiAgICB9O1xufVxuXG4vLyByZXF1ZXN0QW5pbWF0aW9uRnJhbWVcbnZhciBsYXN0VGltZSA9IERhdGUubm93KCk7XG52YXIgdmVuZG9ycyA9IFsnbXMnLCAnbW96JywgJ3dlYmtpdCcsICdvJ107XG5cbmZvcih2YXIgeCA9IDA7IHggPCB2ZW5kb3JzLmxlbmd0aCAmJiAhZ2xvYmFsLnJlcXVlc3RBbmltYXRpb25GcmFtZTsgKyt4KSB7XG4gICAgZ2xvYmFsLnJlcXVlc3RBbmltYXRpb25GcmFtZSA9IGdsb2JhbFt2ZW5kb3JzW3hdICsgJ1JlcXVlc3RBbmltYXRpb25GcmFtZSddO1xuICAgIGdsb2JhbC5jYW5jZWxBbmltYXRpb25GcmFtZSA9IGdsb2JhbFt2ZW5kb3JzW3hdICsgJ0NhbmNlbEFuaW1hdGlvbkZyYW1lJ10gfHxcbiAgICAgICAgZ2xvYmFsW3ZlbmRvcnNbeF0gKyAnQ2FuY2VsUmVxdWVzdEFuaW1hdGlvbkZyYW1lJ107XG59XG5cbmlmICghZ2xvYmFsLnJlcXVlc3RBbmltYXRpb25GcmFtZSkge1xuICAgIGdsb2JhbC5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUgPSBmdW5jdGlvbiAoY2FsbGJhY2spIHtcbiAgICAgICAgaWYgKHR5cGVvZiBjYWxsYmFjayAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihjYWxsYmFjayArICdpcyBub3QgYSBmdW5jdGlvbicpO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGN1cnJlbnRUaW1lID0gRGF0ZS5ub3coKSxcbiAgICAgICAgICAgIGRlbGF5ID0gMTYgKyBsYXN0VGltZSAtIGN1cnJlbnRUaW1lO1xuXG4gICAgICAgIGlmIChkZWxheSA8IDApIHtcbiAgICAgICAgICAgIGRlbGF5ID0gMDtcbiAgICAgICAgfVxuXG4gICAgICAgIGxhc3RUaW1lID0gY3VycmVudFRpbWU7XG5cbiAgICAgICAgcmV0dXJuIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgbGFzdFRpbWUgPSBEYXRlLm5vdygpO1xuICAgICAgICAgICAgY2FsbGJhY2socGVyZm9ybWFuY2Uubm93KCkpO1xuICAgICAgICB9LCBkZWxheSk7XG4gICAgfTtcbn1cblxuaWYgKCFnbG9iYWwuY2FuY2VsQW5pbWF0aW9uRnJhbWUpIHtcbiAgICBnbG9iYWwuY2FuY2VsQW5pbWF0aW9uRnJhbWUgPSBmdW5jdGlvbihpZCkge1xuICAgICAgICBjbGVhclRpbWVvdXQoaWQpO1xuICAgIH07XG59XG4iXX0= //# sourceMappingURL=pixi.js.map diff --git a/bin/pixi.min.js b/bin/pixi.min.js index f7a788e..d59cd98 100644 --- a/bin/pixi.min.js +++ b/bin/pixi.min.js @@ -1,11 +1,11 @@ -!function(t){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=t();else if("function"==typeof define&&define.amd)define([],t);else{var e;e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:this,e.PIXI=t()}}(function(){var t;return function e(t,r,i){function n(s,a){if(!r[s]){if(!t[s]){var h="function"==typeof require&&require;if(!a&&h)return h(s,!0);if(o)return o(s,!0);var u=new Error("Cannot find module '"+s+"'");throw u.code="MODULE_NOT_FOUND",u}var l=r[s]={exports:{}};t[s][0].call(l.exports,function(e){var r=t[s][1][e];return n(r?r:e)},l,l.exports,e,t,r,i)}return r[s].exports}for(var o="function"==typeof require&&require,s=0;s=t.byteLength?i.bufferSubData(this.type,e,t):i.bufferData(this.type,t,this.drawType),this.data=t},n.prototype.bind=function(){var t=this.gl;t.bindBuffer(this.type,this.buffer)},n.createVertexBuffer=function(t,e,r){return new n(t,t.ARRAY_BUFFER,e,r)},n.createIndexBuffer=function(t,e,r){return new n(t,t.ELEMENT_ARRAY_BUFFER,e,r)},n.create=function(t,e,r,i){return new n(t,e,i)},e.exports=n},{}],3:[function(t,e,r){var i=t("./GLTexture"),n=function(t,e,r){this.gl=t,this.framebuffer=t.createFramebuffer(),this.stencil=null,this.texture=null,this.width=e||100,this.height=r||100};n.prototype.enableTexture=function(t){var e=this.gl;this.texture=t||new i(e),this.texture.bind(),this.bind(),e.framebufferTexture2D(e.FRAMEBUFFER,e.COLOR_ATTACHMENT0,e.TEXTURE_2D,this.texture.texture,0)},n.prototype.enableStencil=function(){if(!this.stencil){var t=this.gl;this.stencil=t.createRenderbuffer(),t.bindRenderbuffer(t.RENDERBUFFER,this.stencil),t.framebufferRenderbuffer(t.FRAMEBUFFER,t.DEPTH_STENCIL_ATTACHMENT,t.RENDERBUFFER,this.stencil),t.renderbufferStorage(t.RENDERBUFFER,t.DEPTH_STENCIL,this.width,this.height)}},n.prototype.clear=function(t,e,r,i){this.bind();var n=this.gl;n.clearColor(t,e,r,i),n.clear(n.COLOR_BUFFER_BIT)},n.prototype.bind=function(){var t=this.gl;t.bindFramebuffer(t.FRAMEBUFFER,this.framebuffer)},n.prototype.unbind=function(){gl.bindFramebuffer(gl.FRAMEBUFFER,null)},n.prototype.resize=function(t,e){var r=this.gl;this.width=t,this.height=e,this.texture&&(this.texture.bind(),r.texImage2D(r.TEXTURE_2D,0,this.format,t,e,0,this.format,this.type,null)),this.stencil&&(r.bindRenderbuffer(r.RENDERBUFFER,this.stencil),r.renderbufferStorage(r.RENDERBUFFER,r.DEPTH_STENCIL,t,e))},n.prototype.destroy=function(){var t=this.gl;t.deleteFramebuffer(this.framebuffer)},n.createRGBA=function(t,e,r,o){var s=new i(t,e,r);s.enableNearestScaling(),s.enableWrapClamp(),t.texImage2D(t.TEXTURE_2D,0,t.RGBA,e,r,0,t.RGBA,t.UNSIGNED_BYTE,o);var a=new n(t,e,r);return a.enableTexture(s),a},n.createFloat32=function(t,e,r,o){var s=new i.fromData(t,o,e,r);s.enableNearestScaling(),s.enableWrapClamp();var a=new n(t,e,r);return a.enableTexture(s),a},e.exports=n},{"./GLTexture":5}],4:[function(t,e,r){var i=t("./shader/compileProgram"),n=t("./shader/extractAttributes"),o=t("./shader/extractUniforms"),s=t("./shader/generateUniformAccessObject"),a=function(t,e,r){this.gl=t,this.program=i(t,e,r),this.attributes=n(t,this.program);var a=o(t,this.program);this.uniforms=s(t,a)};a.prototype.bind=function(){this.gl.useProgram(this.program)},a.prototype.destroy=function(){this.gl},e.exports=a},{"./shader/compileProgram":9,"./shader/extractAttributes":11,"./shader/extractUniforms":12,"./shader/generateUniformAccessObject":13}],5:[function(t,e,r){var i=function(t,e,r,i,n){this.gl=t,this.texture=t.createTexture(),this.mipmap=!1,this.premultiplyAlpha=!1,this.width=e||0,this.height=r||0,this.format=i||t.RGBA,this.type=n||t.UNSIGNED_BYTE};i.prototype.upload=function(t){this.bind();var e=this.gl;this.width=t.width,this.height=t.height,e.pixelStorei(e.UNPACK_PREMULTIPLY_ALPHA_WEBGL,this.premultiplyAlpha),e.texImage2D(e.TEXTURE_2D,0,this.format,this.format,this.type,t)};var n=!1;i.prototype.uploadData=function(t,e,r){if(this.bind(),this.width=e||this.width,this.height=r||this.height,t instanceof Float32Array){if(!n){var i=gl.getExtension("OES_texture_float");if(!i)throw new Error("floating point textures not available");n=!0}this.type=gl.FLOAT}else this.type=gl.UNSIGNED_BYTE;gl.pixelStorei(gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL,this.premultiplyAlpha),gl.texImage2D(gl.TEXTURE_2D,0,this.format,this.width,this.height,0,this.format,this.type,t)},i.prototype.bind=function(t){var e=this.gl;void 0!==t&&e.activeTexture(e.TEXTURE0+t),e.bindTexture(e.TEXTURE_2D,this.texture)},i.prototype.unbind=function(){var t=this.gl;t.bindTexture(t.TEXTURE_2D,null)},i.prototype.minFilter=function(t){var e=this.gl;this.bind(),this.mipmap?e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MIN_FILTER,t?e.LINEAR_MIPMAP_LINEAR:e.NEAREST_MIPMAP_NEAREST):e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MIN_FILTER,t?e.LINEAR:e.NEAREST)},i.prototype.magFilter=function(t){var e=this.gl;this.bind(),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MAG_FILTER,t?e.LINEAR:e.NEAREST)},i.prototype.enableMipmap=function(){this.bind(),this.mipmap=!0,gl.generateMipmap(gl.TEXTURE_2D)},i.prototype.enableLinearScaling=function(){this.minFilter(!0),this.magFilter(!0)},i.prototype.enableNearestScaling=function(){this.minFilter(!1),this.magFilter(!1)},i.prototype.enableWrapClamp=function(){var t=this.gl;this.bind(),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_WRAP_S,t.CLAMP_TO_EDGE),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_WRAP_T,t.CLAMP_TO_EDGE)},i.prototype.enableWrapRepeat=function(){var t=this.gl;this.bind(),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_WRAP_S,t.REPEAT),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_WRAP_T,t.REPEAT)},i.prototype.destroy=function(){var t=this.gl;t.deleteTexture(this.texture)},i.fromSource=function(t,e,r){var n=new i(t);return n.premultiplyAlpha=r||!1,n.upload(e),n},i.fromData=function(t,e,r,n){var o=new i(t);return o.uploadData(e,r,n),o},e.exports=i},{}],6:[function(t,e,r){function i(t){this.nativeVaoExtension=t.getExtension("OES_vertex_array_object")||t.getExtension("MOZ_OES_vertex_array_object")||t.getExtension("WEBKIT_OES_vertex_array_object"),this.nativeVaoExtension&&(this.nativeVao=this.nativeVaoExtension.createVertexArrayOES()),this.gl=t,this.attributes=[],this.indexBuffer=null,this.dirty=!1}i.prototype.constructor=i,e.exports=i,i.prototype.bind=function(){this.nativeVao?(this.nativeVaoExtension.bindVertexArrayOES(this.nativeVao),this.dirty&&(this.dirty=!1,this.activate())):this.activate()},i.prototype.unbind=function(){this.nativeVao&&this.nativeVaoExtension.bindVertexArrayOES(null)},i.prototype.activate=function(){for(var t=this.gl,e=0;es;s++){var a=t.getActiveAttrib(e,s),h=i(t,a.type);r[a.name]={type:h,size:n(h),location:t.getAttribLocation(e,a.name),pointer:function(e,r,i,n){t.vertexAttribPointer(this.location,this.size,e||t.FLOAT,r||!1,i||0,n||0)}}}return r};e.exports=o},{"./mapSize":14,"./mapType":15}],12:[function(t,e,r){var i=t("./mapType"),n=t("./defaultValue"),o=function(t,e){for(var r={},o=t.getProgramParameter(e,t.ACTIVE_UNIFORMS),s=0;o>s;s++){var a=t.getActiveUniform(e,s),h=a.name.replace(/\[.*?\]/,""),u=i(t,a.type);r[h]={type:u,size:a.size,location:t.getUniformLocation(e,h),value:n(u,a.size)}}return r};e.exports=o},{"./defaultValue":10,"./mapType":15}],13:[function(t,e,r){var i=function(t,e){var r={data:{}};r.gl=t;for(var i=Object.keys(e),a=0;a=0&&t.length%1===0}function c(t,e){for(var r=-1,i=t.length;++ri?i:null}):(r=Y(t),e=r.length,function(){return i++,e>i?r[i]:null})}function y(t,e){return e=null==e?t.length-1:+e,function(){for(var r=Math.max(arguments.length-e,0),i=Array(r),n=0;r>n;n++)i[n]=arguments[n+e];switch(e){case 0:return t.call(this,i);case 1:return t.call(this,arguments[0],i)}}}function x(t){return function(e,r,i){return t(e,i)}}function b(t){return function(e,r,i){i=u(i||n),e=e||[];var o=m(e);if(0>=t)return i(null);var s=!1,a=0,l=!1;!function c(){if(s&&0>=a)return i(null);for(;t>a&&!l;){var n=o();if(null===n)return s=!0,void(0>=a&&i(null));a+=1,r(e[n],n,h(function(t){a-=1,t?(i(t),l=!0):c()}))}}()}}function _(t){return function(e,r,i){return t(N.eachOf,e,r,i)}}function T(t){return function(e,r,i,n){return t(b(r),e,i,n)}}function E(t){return function(e,r,i){return t(N.eachOfSeries,e,r,i)}}function S(t,e,r,i){i=u(i||n),e=e||[];var o=l(e)?[]:{};t(e,function(t,e,i){r(t,function(t,r){o[e]=r,i(t)})},function(t){i(t,o)})}function w(t,e,r,i){var n=[];t(e,function(t,e,i){r(t,function(r){r&&n.push({index:e,value:t}),i()})},function(){i(p(n.sort(function(t,e){return t.index-e.index}),function(t){return t.value}))})}function C(t,e,r,i){w(t,e,function(t,e){r(t,function(t){e(!t)})},i)}function A(t,e,r){return function(i,n,o,s){function a(){s&&s(r(!1,void 0))}function h(t,i,n){return s?void o(t,function(i){s&&e(i)&&(s(r(!0,t)),s=o=!1),n()}):n()}arguments.length>3?t(i,n,h,a):(s=o,o=n,t(i,h,a))}}function M(t,e){return e}function R(t,e,r){r=r||n;var i=l(e)?[]:{};t(e,function(t,e,r){t(y(function(t,n){n.length<=1&&(n=n[0]),i[e]=n,r(t)}))},function(t){r(t,i)})}function O(t,e,r,i){var n=[];t(e,function(t,e,i){r(t,function(t,e){n=n.concat(e||[]),i(t)})},function(t){i(t,n)})}function D(t,e,r){function i(t,e,r,i){if(null!=i&&"function"!=typeof i)throw new Error("task callback must be a function");return t.started=!0,j(e)||(e=[e]),0===e.length&&t.idle()?N.setImmediate(function(){t.drain()}):(c(e,function(e){var o={data:e,callback:i||n};r?t.tasks.unshift(o):t.tasks.push(o),t.tasks.length===t.concurrency&&t.saturated()}),void N.setImmediate(t.process))}function o(t,e){return function(){s-=1;var r=!1,i=arguments;c(e,function(t){c(a,function(e,i){e!==t||r||(a.splice(i,1),r=!0)}),t.callback.apply(t,i)}),t.tasks.length+s===0&&t.drain(),t.process()}}if(null==e)e=1;else if(0===e)throw new Error("Concurrency must not be zero");var s=0,a=[],u={tasks:[],concurrency:e,payload:r,saturated:n,empty:n,drain:n,started:!1,paused:!1,push:function(t,e){i(u,t,!1,e)},kill:function(){u.drain=n,u.tasks=[]},unshift:function(t,e){i(u,t,!0,e)},process:function(){if(!u.paused&&s=e;e++)N.setImmediate(u.process)}}};return u}function P(t){return y(function(e,r){e.apply(null,r.concat([y(function(e,r){"object"==typeof console&&(e?console.error&&console.error(e):console[t]&&c(r,function(e){console[t](e)}))})]))})}function F(t){return function(e,r,i){t(d(e),r,i)}}function L(t){return y(function(e,r){var i=y(function(r){var i=this,n=r.pop();return t(e,function(t,e,n){t.apply(i,r.concat([n]))},n)});return r.length?i.apply(this,r):i})}function B(t){return y(function(e){var r=e.pop();e.push(function(){var t=arguments;i?N.setImmediate(function(){r.apply(null,t)}):r.apply(null,t)});var i=!0;t.apply(this,e),i=!1})}var I,N={},U="object"==typeof self&&self.self===self&&self||"object"==typeof i&&i.global===i&&i||this;null!=U&&(I=U.async),N.noConflict=function(){return U.async=I,N};var k=Object.prototype.toString,j=Array.isArray||function(t){return"[object Array]"===k.call(t)},G=function(t){var e=typeof t;return"function"===e||"object"===e&&!!t},Y=Object.keys||function(t){var e=[];for(var r in t)t.hasOwnProperty(r)&&e.push(r);return e},X="function"==typeof setImmediate&&setImmediate,z=X?function(t){X(t)}:function(t){setTimeout(t,0)};"object"==typeof e&&"function"==typeof e.nextTick?N.nextTick=e.nextTick:N.nextTick=z,N.setImmediate=X?z:N.nextTick,N.forEach=N.each=function(t,e,r){return N.eachOf(t,x(e),r)},N.forEachSeries=N.eachSeries=function(t,e,r){return N.eachOfSeries(t,x(e),r)},N.forEachLimit=N.eachLimit=function(t,e,r,i){return b(e)(t,x(r),i)},N.forEachOf=N.eachOf=function(t,e,r){function i(t){a--,t?r(t):null===o&&0>=a&&r(null)}r=u(r||n),t=t||[];for(var o,s=m(t),a=0;null!=(o=s());)a+=1,e(t[o],o,h(i));0===a&&r(null)},N.forEachOfSeries=N.eachOfSeries=function(t,e,r){function i(){var n=!0;return null===s?r(null):(e(t[s],s,h(function(t){if(t)r(t);else{if(s=o(),null===s)return r(null);n?N.setImmediate(i):i()}})),void(n=!1))}r=u(r||n),t=t||[];var o=m(t),s=o();i()},N.forEachOfLimit=N.eachOfLimit=function(t,e,r,i){b(e)(t,r,i)},N.map=_(S),N.mapSeries=E(S),N.mapLimit=T(S),N.inject=N.foldl=N.reduce=function(t,e,r,i){N.eachOfSeries(t,function(t,i,n){r(e,t,function(t,r){e=r,n(t)})},function(t){i(t,e)})},N.foldr=N.reduceRight=function(t,e,r,i){var n=p(t,o).reverse();N.reduce(n,e,r,i)},N.transform=function(t,e,r,i){3===arguments.length&&(i=r,r=e,e=j(t)?[]:{}),N.eachOf(t,function(t,i,n){r(e,t,i,n)},function(t){i(t,e)})},N.select=N.filter=_(w),N.selectLimit=N.filterLimit=T(w),N.selectSeries=N.filterSeries=E(w),N.reject=_(C),N.rejectLimit=T(C),N.rejectSeries=E(C),N.any=N.some=A(N.eachOf,s,o),N.someLimit=A(N.eachOfLimit,s,o),N.all=N.every=A(N.eachOf,a,a),N.everyLimit=A(N.eachOfLimit,a,a),N.detect=A(N.eachOf,o,M),N.detectSeries=A(N.eachOfSeries,o,M),N.detectLimit=A(N.eachOfLimit,o,M),N.sortBy=function(t,e,r){function i(t,e){var r=t.criteria,i=e.criteria;return i>r?-1:r>i?1:0}N.map(t,function(t,r){e(t,function(e,i){e?r(e):r(null,{value:t,criteria:i})})},function(t,e){return t?r(t):void r(null,p(e.sort(i),function(t){return t.value}))})},N.auto=function(t,e,r){function i(t){d.unshift(t)}function o(t){var e=g(d,t);e>=0&&d.splice(e,1)}function s(){h--,c(d.slice(0),function(t){t()})}r||(r=e,e=null),r=u(r||n);var a=Y(t),h=a.length;if(!h)return r(null);e||(e=h);var l={},p=0,d=[];i(function(){h||r(null,l)}),c(a,function(n){function a(){return e>p&&f(m,function(t,e){return t&&l.hasOwnProperty(e)},!0)&&!l.hasOwnProperty(n)}function h(){a()&&(p++,o(h),c[c.length-1](d,l))}for(var u,c=j(t[n])?t[n]:[t[n]],d=y(function(t,e){if(p--,e.length<=1&&(e=e[0]),t){var i={};v(l,function(t,e){i[e]=t}),i[n]=e,r(t,i)}else l[n]=e,N.setImmediate(s)}),m=c.slice(0,c.length-1),x=m.length;x--;){if(!(u=t[m[x]]))throw new Error("Has inexistant dependency");if(j(u)&&g(u,n)>=0)throw new Error("Has cyclic dependencies")}a()?(p++,c[c.length-1](d,l)):i(h)})},N.retry=function(t,e,r){function i(t,e){if("number"==typeof e)t.times=parseInt(e,10)||o;else{if("object"!=typeof e)throw new Error("Unsupported argument type for 'times': "+typeof e);t.times=parseInt(e.times,10)||o,t.interval=parseInt(e.interval,10)||s}}function n(t,e){function r(t,r){return function(i){t(function(t,e){i(!t||r,{err:t,result:e})},e)}}function i(t){return function(e){setTimeout(function(){e(null)},t)}}for(;h.times;){var n=!(h.times-=1);a.push(r(h.task,n)),!n&&h.interval>0&&a.push(i(h.interval))}N.series(a,function(e,r){r=r[r.length-1],(t||h.callback)(r.err,r.result)})}var o=5,s=0,a=[],h={times:o,interval:s},u=arguments.length;if(1>u||u>3)throw new Error("Invalid arguments - must be either (task), (task, callback), (times, task) or (times, task, callback)");return 2>=u&&"function"==typeof t&&(r=e,e=t),"function"!=typeof t&&i(h,t),h.callback=r,h.task=e,h.callback?n():n},N.waterfall=function(t,e){function r(t){return y(function(i,n){if(i)e.apply(null,[i].concat(n));else{var o=t.next();o?n.push(r(o)):n.push(e),B(t).apply(null,n)}})}if(e=u(e||n),!j(t)){var i=new Error("First argument to waterfall must be an array of functions");return e(i)}return t.length?void r(N.iterator(t))():e()},N.parallel=function(t,e){R(N.eachOf,t,e)},N.parallelLimit=function(t,e,r){R(b(e),t,r)},N.series=function(t,e){R(N.eachOfSeries,t,e)},N.iterator=function(t){function e(r){function i(){return t.length&&t[r].apply(null,arguments),i.next()}return i.next=function(){return ri;){var o=i+(n-i+1>>>1);r(e,t[o])>=0?i=o:n=o-1}return i}function o(t,e,o,s){if(null!=s&&"function"!=typeof s)throw new Error("task callback must be a function");return t.started=!0,j(e)||(e=[e]),0===e.length?N.setImmediate(function(){t.drain()}):void c(e,function(e){var a={data:e,priority:o,callback:"function"==typeof s?s:n};t.tasks.splice(i(t.tasks,a,r)+1,0,a),t.tasks.length===t.concurrency&&t.saturated(),N.setImmediate(t.process)})}var s=N.queue(t,e);return s.push=function(t,e,r){o(s,t,e,r)},delete s.unshift,s},N.cargo=function(t,e){return D(t,1,e)},N.log=P("log"),N.dir=P("dir"),N.memoize=function(t,e){var r={},i={};e=e||o;var n=y(function(n){var o=n.pop(),s=e.apply(null,n);s in r?N.setImmediate(function(){o.apply(null,r[s])}):s in i?i[s].push(o):(i[s]=[o],t.apply(null,n.concat([y(function(t){r[s]=t;var e=i[s];delete i[s];for(var n=0,o=e.length;o>n;n++)e[n].apply(null,t)})])))});return n.memo=r,n.unmemoized=t,n},N.unmemoize=function(t){return function(){return(t.unmemoized||t).apply(null,arguments)}},N.times=F(N.map),N.timesSeries=F(N.mapSeries),N.timesLimit=function(t,e,r,i){return N.mapLimit(d(t),e,r,i)},N.seq=function(){var t=arguments;return y(function(e){var r=this,i=e[e.length-1];"function"==typeof i?e.pop():i=n,N.reduce(t,e,function(t,e,i){e.apply(r,t.concat([y(function(t,e){i(t,e)})]))},function(t,e){i.apply(r,[t].concat(e))})})},N.compose=function(){return N.seq.apply(null,Array.prototype.reverse.call(arguments))},N.applyEach=L(N.eachOf),N.applyEachSeries=L(N.eachOfSeries),N.forever=function(t,e){function r(t){return t?i(t):void o(r)}var i=h(e||n),o=B(t);r()},N.ensureAsync=B,N.constant=y(function(t){var e=[null].concat(t);return function(t){return t.apply(this,e)}}),N.wrapSync=N.asyncify=function(t){return y(function(e){var r,i=e.pop();try{r=t.apply(this,e)}catch(n){return i(n)}G(r)&&"function"==typeof r.then?r.then(function(t){i(null,t)})["catch"](function(t){i(t.message?t:new Error(t))}):i(null,r)})},"object"==typeof r&&r.exports?r.exports=N:"function"==typeof t&&t.amd?t([],function(){return N}):U.async=N}()}).call(this,e("_process"),"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{_process:18}],17:[function(t,e,r){(function(t){function e(t,e){for(var r=0,i=t.length-1;i>=0;i--){var n=t[i];"."===n?t.splice(i,1):".."===n?(t.splice(i,1),r++):r&&(t.splice(i,1),r--)}if(e)for(;r--;r)t.unshift("..");return t}function i(t,e){if(t.filter)return t.filter(e);for(var r=[],i=0;i=-1&&!n;o--){var s=o>=0?arguments[o]:t.cwd();if("string"!=typeof s)throw new TypeError("Arguments to path.resolve must be strings");s&&(r=s+"/"+r,n="/"===s.charAt(0))}return r=e(i(r.split("/"),function(t){return!!t}),!n).join("/"),(n?"/":"")+r||"."},r.normalize=function(t){var n=r.isAbsolute(t),o="/"===s(t,-1);return t=e(i(t.split("/"),function(t){return!!t}),!n).join("/"),t||n||(t="."),t&&o&&(t+="/"),(n?"/":"")+t},r.isAbsolute=function(t){return"/"===t.charAt(0)},r.join=function(){var t=Array.prototype.slice.call(arguments,0);return r.normalize(i(t,function(t,e){if("string"!=typeof t)throw new TypeError("Arguments to path.join must be strings");return t}).join("/"))},r.relative=function(t,e){function i(t){for(var e=0;e=0&&""===t[r];r--);return e>r?[]:t.slice(e,r-e+1)}t=r.resolve(t).substr(1),e=r.resolve(e).substr(1);for(var n=i(t.split("/")),o=i(e.split("/")),s=Math.min(n.length,o.length),a=s,h=0;s>h;h++)if(n[h]!==o[h]){a=h;break}for(var u=[],h=a;he&&(e=t.length+e),t.substr(e,r)}}).call(this,t("_process"))},{_process:18}],18:[function(t,e,r){function i(){l=!1,a.length?u=a.concat(u):c=-1,u.length&&n()}function n(){if(!l){var t=setTimeout(i);l=!0;for(var e=u.length;e;){for(a=u,u=[];++c1)for(var r=1;r1&&(i=r[0]+"@",t=r[1]),t=t.replace(F,".");var n=t.split("."),o=s(n,e).join(".");return i+o}function h(t){for(var e,r,i=[],n=0,o=t.length;o>n;)e=t.charCodeAt(n++),e>=55296&&56319>=e&&o>n?(r=t.charCodeAt(n++),56320==(64512&r)?i.push(((1023&e)<<10)+(1023&r)+65536):(i.push(e),n--)):i.push(e);return i}function u(t){return s(t,function(t){var e="";return t>65535&&(t-=65536,e+=N(t>>>10&1023|55296),t=56320|1023&t),e+=N(t)}).join("")}function l(t){return 10>t-48?t-22:26>t-65?t-65:26>t-97?t-97:E}function c(t,e){return t+22+75*(26>t)-((0!=e)<<5)}function p(t,e,r){var i=0;for(t=r?I(t/A):t>>1,t+=I(t/e);t>B*w>>1;i+=E)t=I(t/B);return I(i+(B+1)*t/(t+C))}function d(t){var e,r,i,n,s,a,h,c,d,f,v=[],g=t.length,m=0,y=R,x=M;for(r=t.lastIndexOf(O),0>r&&(r=0),i=0;r>i;++i)t.charCodeAt(i)>=128&&o("not-basic"),v.push(t.charCodeAt(i));for(n=r>0?r+1:0;g>n;){for(s=m,a=1,h=E;n>=g&&o("invalid-input"),c=l(t.charCodeAt(n++)),(c>=E||c>I((T-m)/a))&&o("overflow"),m+=c*a,d=x>=h?S:h>=x+w?w:h-x,!(d>c);h+=E)f=E-d,a>I(T/f)&&o("overflow"),a*=f;e=v.length+1,x=p(m-s,e,0==s),I(m/e)>T-y&&o("overflow"),y+=I(m/e),m%=e,v.splice(m++,0,y)}return u(v)}function f(t){var e,r,i,n,s,a,u,l,d,f,v,g,m,y,x,b=[];for(t=h(t),g=t.length,e=R,r=0,s=M,a=0;g>a;++a)v=t[a],128>v&&b.push(N(v));for(i=n=b.length,n&&b.push(O);g>i;){for(u=T,a=0;g>a;++a)v=t[a],v>=e&&u>v&&(u=v);for(m=i+1,u-e>I((T-r)/m)&&o("overflow"),r+=(u-e)*m,e=u,a=0;g>a;++a)if(v=t[a],e>v&&++r>T&&o("overflow"),v==e){for(l=r,d=E;f=s>=d?S:d>=s+w?w:d-s,!(f>l);d+=E)x=l-f,y=E-f,b.push(N(c(f+x%y,0))),l=I(x/y);b.push(N(c(l,0))),s=p(r,m,i==n),r=0,++i}++r,++e}return b.join("")}function v(t){return a(t,function(t){return D.test(t)?d(t.slice(4).toLowerCase()):t})}function g(t){return a(t,function(t){return P.test(t)?"xn--"+f(t):t})}var m="object"==typeof i&&i&&!i.nodeType&&i,y="object"==typeof r&&r&&!r.nodeType&&r,x="object"==typeof e&&e;(x.global===x||x.window===x||x.self===x)&&(n=x);var b,_,T=2147483647,E=36,S=1,w=26,C=38,A=700,M=72,R=128,O="-",D=/^xn--/,P=/[^\x20-\x7E]/,F=/[\x2E\u3002\uFF0E\uFF61]/g,L={overflow:"Overflow: input needs wider integers to process","not-basic":"Illegal input >= 0x80 (not a basic code point)","invalid-input":"Invalid input"},B=E-S,I=Math.floor,N=String.fromCharCode;if(b={version:"1.3.2",ucs2:{decode:h,encode:u},decode:d,encode:f,toASCII:g,toUnicode:v},"function"==typeof t&&"object"==typeof t.amd&&t.amd)t("punycode",function(){return b});else if(m&&y)if(r.exports==m)y.exports=b;else for(_ in b)b.hasOwnProperty(_)&&(m[_]=b[_]);else n.punycode=b}(this)}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{}],20:[function(t,e,r){"use strict";function i(t,e){return Object.prototype.hasOwnProperty.call(t,e)}e.exports=function(t,e,r,o){e=e||"&",r=r||"=";var s={};if("string"!=typeof t||0===t.length)return s;var a=/\+/g;t=t.split(e);var h=1e3;o&&"number"==typeof o.maxKeys&&(h=o.maxKeys);var u=t.length;h>0&&u>h&&(u=h);for(var l=0;u>l;++l){var c,p,d,f,v=t[l].replace(a,"%20"),g=v.indexOf(r);g>=0?(c=v.substr(0,g),p=v.substr(g+1)):(c=v, -p=""),d=decodeURIComponent(c),f=decodeURIComponent(p),i(s,d)?n(s[d])?s[d].push(f):s[d]=[s[d],f]:s[d]=f}return s};var n=Array.isArray||function(t){return"[object Array]"===Object.prototype.toString.call(t)}},{}],21:[function(t,e,r){"use strict";function i(t,e){if(t.map)return t.map(e);for(var r=[],i=0;i",'"',"`"," ","\r","\n"," "],g=["{","}","|","\\","^","`"].concat(v),m=["'"].concat(g),y=["%","/","?",";","#"].concat(m),x=["/","?","#"],b=255,_=/^[a-z0-9A-Z_-]{0,63}$/,T=/^([a-z0-9A-Z_-]{0,63})(.*)$/,E={javascript:!0,"javascript:":!0},S={javascript:!0,"javascript:":!0},w={http:!0,https:!0,ftp:!0,gopher:!0,file:!0,"http:":!0,"https:":!0,"ftp:":!0,"gopher:":!0,"file:":!0},C=t("querystring");i.prototype.parse=function(t,e,r){if(!h(t))throw new TypeError("Parameter 'url' must be a string, not "+typeof t);var i=t;i=i.trim();var n=d.exec(i);if(n){n=n[0];var o=n.toLowerCase();this.protocol=o,i=i.substr(n.length)}if(r||n||i.match(/^\/\/[^@\/]+@[^@\/]+/)){var s="//"===i.substr(0,2);!s||n&&S[n]||(i=i.substr(2),this.slashes=!0)}if(!S[n]&&(s||n&&!w[n])){for(var a=-1,u=0;ul)&&(a=l)}var c,f;f=-1===a?i.lastIndexOf("@"):i.lastIndexOf("@",a),-1!==f&&(c=i.slice(0,f),i=i.slice(f+1),this.auth=decodeURIComponent(c)),a=-1;for(var u=0;ul)&&(a=l)}-1===a&&(a=i.length),this.host=i.slice(0,a),i=i.slice(a),this.parseHost(),this.hostname=this.hostname||"";var v="["===this.hostname[0]&&"]"===this.hostname[this.hostname.length-1];if(!v)for(var g=this.hostname.split(/\./),u=0,A=g.length;A>u;u++){var M=g[u];if(M&&!M.match(_)){for(var R="",O=0,D=M.length;D>O;O++)R+=M.charCodeAt(O)>127?"x":M[O];if(!R.match(_)){var P=g.slice(0,u),F=g.slice(u+1),L=M.match(T);L&&(P.push(L[1]),F.unshift(L[2])),F.length&&(i="/"+F.join(".")+i),this.hostname=P.join(".");break}}}if(this.hostname.length>b?this.hostname="":this.hostname=this.hostname.toLowerCase(),!v){for(var B=this.hostname.split("."),I=[],u=0;uu;u++){var j=m[u],G=encodeURIComponent(j);G===j&&(G=escape(j)),i=i.split(j).join(G)}var Y=i.indexOf("#");-1!==Y&&(this.hash=i.substr(Y),i=i.slice(0,Y));var X=i.indexOf("?");if(-1!==X?(this.search=i.substr(X),this.query=i.substr(X+1),e&&(this.query=C.parse(this.query)),i=i.slice(0,X)):e&&(this.search="",this.query={}),i&&(this.pathname=i),w[o]&&this.hostname&&!this.pathname&&(this.pathname="/"),this.pathname||this.search){var U=this.pathname||"",N=this.search||"";this.path=U+N}return this.href=this.format(),this},i.prototype.format=function(){var t=this.auth||"";t&&(t=encodeURIComponent(t),t=t.replace(/%3A/i,":"),t+="@");var e=this.protocol||"",r=this.pathname||"",i=this.hash||"",n=!1,o="";this.host?n=t+this.host:this.hostname&&(n=t+(-1===this.hostname.indexOf(":")?this.hostname:"["+this.hostname+"]"),this.port&&(n+=":"+this.port)),this.query&&u(this.query)&&Object.keys(this.query).length&&(o=C.stringify(this.query));var s=this.search||o&&"?"+o||"";return e&&":"!==e.substr(-1)&&(e+=":"),this.slashes||(!e||w[e])&&n!==!1?(n="//"+(n||""),r&&"/"!==r.charAt(0)&&(r="/"+r)):n||(n=""),i&&"#"!==i.charAt(0)&&(i="#"+i),s&&"?"!==s.charAt(0)&&(s="?"+s),r=r.replace(/[?#]/g,function(t){return encodeURIComponent(t)}),s=s.replace("#","%23"),e+n+r+s+i},i.prototype.resolve=function(t){return this.resolveObject(n(t,!1,!0)).format()},i.prototype.resolveObject=function(t){if(h(t)){var e=new i;e.parse(t,!1,!0),t=e}var r=new i;if(Object.keys(this).forEach(function(t){r[t]=this[t]},this),r.hash=t.hash,""===t.href)return r.href=r.format(),r;if(t.slashes&&!t.protocol)return Object.keys(t).forEach(function(e){"protocol"!==e&&(r[e]=t[e])}),w[r.protocol]&&r.hostname&&!r.pathname&&(r.path=r.pathname="/"),r.href=r.format(),r;if(t.protocol&&t.protocol!==r.protocol){if(!w[t.protocol])return Object.keys(t).forEach(function(e){r[e]=t[e]}),r.href=r.format(),r;if(r.protocol=t.protocol,t.host||S[t.protocol])r.pathname=t.pathname;else{for(var n=(t.pathname||"").split("/");n.length&&!(t.host=n.shift()););t.host||(t.host=""),t.hostname||(t.hostname=""),""!==n[0]&&n.unshift(""),n.length<2&&n.unshift(""),r.pathname=n.join("/")}if(r.search=t.search,r.query=t.query,r.host=t.host||"",r.auth=t.auth,r.hostname=t.hostname||t.host,r.port=t.port,r.pathname||r.search){var o=r.pathname||"",s=r.search||"";r.path=o+s}return r.slashes=r.slashes||t.slashes,r.href=r.format(),r}var a=r.pathname&&"/"===r.pathname.charAt(0),u=t.host||t.pathname&&"/"===t.pathname.charAt(0),p=u||a||r.host&&t.pathname,d=p,f=r.pathname&&r.pathname.split("/")||[],n=t.pathname&&t.pathname.split("/")||[],v=r.protocol&&!w[r.protocol];if(v&&(r.hostname="",r.port=null,r.host&&(""===f[0]?f[0]=r.host:f.unshift(r.host)),r.host="",t.protocol&&(t.hostname=null,t.port=null,t.host&&(""===n[0]?n[0]=t.host:n.unshift(t.host)),t.host=null),p=p&&(""===n[0]||""===f[0])),u)r.host=t.host||""===t.host?t.host:r.host,r.hostname=t.hostname||""===t.hostname?t.hostname:r.hostname,r.search=t.search,r.query=t.query,f=n;else if(n.length)f||(f=[]),f.pop(),f=f.concat(n),r.search=t.search,r.query=t.query;else if(!c(t.search)){if(v){r.hostname=r.host=f.shift();var g=r.host&&r.host.indexOf("@")>0?r.host.split("@"):!1;g&&(r.auth=g.shift(),r.host=r.hostname=g.shift())}return r.search=t.search,r.query=t.query,l(r.pathname)&&l(r.search)||(r.path=(r.pathname?r.pathname:"")+(r.search?r.search:"")),r.href=r.format(),r}if(!f.length)return r.pathname=null,r.search?r.path="/"+r.search:r.path=null,r.href=r.format(),r;for(var m=f.slice(-1)[0],y=(r.host||t.host)&&("."===m||".."===m)||""===m,x=0,b=f.length;b>=0;b--)m=f[b],"."==m?f.splice(b,1):".."===m?(f.splice(b,1),x++):x&&(f.splice(b,1),x--);if(!p&&!d)for(;x--;x)f.unshift("..");!p||""===f[0]||f[0]&&"/"===f[0].charAt(0)||f.unshift(""),y&&"/"!==f.join("/").substr(-1)&&f.push("");var _=""===f[0]||f[0]&&"/"===f[0].charAt(0);if(v){r.hostname=r.host=_?"":f.length?f.shift():"";var g=r.host&&r.host.indexOf("@")>0?r.host.split("@"):!1;g&&(r.auth=g.shift(),r.host=r.hostname=g.shift())}return p=p||r.host&&f.length,p&&!_&&f.unshift(""),f.length?r.pathname=f.join("/"):(r.pathname=null,r.path=null),l(r.pathname)&&l(r.search)||(r.path=(r.pathname?r.pathname:"")+(r.search?r.search:"")),r.auth=t.auth||r.auth,r.slashes=r.slashes||t.slashes,r.href=r.format(),r},i.prototype.parseHost=function(){var t=this.host,e=f.exec(t);e&&(e=e[0],":"!==e&&(this.port=e.substr(1)),t=t.substr(0,t.length-e.length)),t&&(this.hostname=t)}},{punycode:19,querystring:22}],24:[function(t,e,r){"use strict";function i(t,e,r){r=r||2;var i=e&&e.length,o=i?e[0]*r:t.length,a=n(t,0,o,r,!0),h=[];if(!a)return h;var u,l,p,d,f,v,g;if(i&&(a=c(t,e,a,r)),t.length>80*r){u=p=t[0],l=d=t[1];for(var m=r;o>m;m+=r)f=t[m],v=t[m+1],u>f&&(u=f),l>v&&(l=v),f>p&&(p=f),v>d&&(d=v);g=Math.max(p-u,d-l)}return s(a,h,r,u,l,g),h}function n(t,e,r,i,n){var o,s,a,h=0;for(o=e,s=r-i;r>o;o+=i)h+=(t[s]-t[o])*(t[o+1]+t[s+1]),s=o;if(n===h>0)for(o=e;r>o;o+=i)a=M(o,t[o],t[o+1],a);else for(o=r-i;o>=e;o-=i)a=M(o,t[o],t[o+1],a);return a}function o(t,e){if(!t)return t;e||(e=t);var r,i=t;do if(r=!1,i.steiner||!T(i,i.next)&&0!==_(i.prev,i,i.next))i=i.next;else{if(R(i),i=e=i.prev,i===i.next)return null;r=!0}while(r||i!==e);return e}function s(t,e,r,i,n,c,p){if(t){!p&&c&&v(t,i,n,c);for(var d,f,g=t;t.prev!==t.next;)if(d=t.prev,f=t.next,c?h(t,i,n,c):a(t))e.push(d.i/r),e.push(t.i/r),e.push(f.i/r),R(t),t=f.next,g=f.next;else if(t=f,t===g){p?1===p?(t=u(t,e,r),s(t,e,r,i,n,c,2)):2===p&&l(t,e,r,i,n,c):s(o(t),e,r,i,n,c,1);break}}}function a(t){var e=t.prev,r=t,i=t.next;if(_(e,r,i)>=0)return!1;for(var n=t.next.next;n!==t.prev;){if(x(e.x,e.y,r.x,r.y,i.x,i.y,n.x,n.y)&&_(n.prev,n,n.next)>=0)return!1;n=n.next}return!0}function h(t,e,r,i){var n=t.prev,o=t,s=t.next;if(_(n,o,s)>=0)return!1;for(var a=n.xo.x?n.x>s.x?n.x:s.x:o.x>s.x?o.x:s.x,l=n.y>o.y?n.y>s.y?n.y:s.y:o.y>s.y?o.y:s.y,c=m(a,h,e,r,i),p=m(u,l,e,r,i),d=t.nextZ;d&&d.z<=p;){if(d!==t.prev&&d!==t.next&&x(n.x,n.y,o.x,o.y,s.x,s.y,d.x,d.y)&&_(d.prev,d,d.next)>=0)return!1;d=d.nextZ}for(d=t.prevZ;d&&d.z>=c;){if(d!==t.prev&&d!==t.next&&x(n.x,n.y,o.x,o.y,s.x,s.y,d.x,d.y)&&_(d.prev,d,d.next)>=0)return!1;d=d.prevZ}return!0}function u(t,e,r){var i=t;do{var n=i.prev,o=i.next.next;E(n,i,i.next,o)&&w(n,o)&&w(o,n)&&(e.push(n.i/r),e.push(i.i/r),e.push(o.i/r),R(i),R(i.next),i=t=o),i=i.next}while(i!==t);return i}function l(t,e,r,i,n,a){var h=t;do{for(var u=h.next.next;u!==h.prev;){if(h.i!==u.i&&b(h,u)){var l=A(h,u);return h=o(h,h.next),l=o(l,l.next),s(h,e,r,i,n,a),void s(l,e,r,i,n,a)}u=u.next}h=h.next}while(h!==t)}function c(t,e,r,i){var s,a,h,u,l,c=[];for(s=0,a=e.length;a>s;s++)h=e[s]*i,u=a-1>s?e[s+1]*i:t.length,l=n(t,h,u,i,!1),l===l.next&&(l.steiner=!0),c.push(y(l));for(c.sort(p),s=0;s=i.next.y){var a=i.x+(o-i.y)*(i.next.x-i.x)/(i.next.y-i.y);n>=a&&a>s&&(s=a,r=i.x=i.x&&i.x>=r.x&&x(oh||h===l&&i.x>r.x)&&w(i,t)&&(r=i,l=h)),i=i.next;return r}function v(t,e,r,i){var n=t;do null===n.z&&(n.z=m(n.x,n.y,e,r,i)),n.prevZ=n.prev,n.nextZ=n.next,n=n.next;while(n!==t);n.prevZ.nextZ=null,n.prevZ=null,g(n)}function g(t){var e,r,i,n,o,s,a,h,u=1;do{for(r=t,t=null,o=null,s=0;r;){for(s++,i=r,a=0,e=0;u>e&&(a++,i=i.nextZ,i);e++);for(h=u;a>0||h>0&&i;)0===a?(n=i,i=i.nextZ,h--):0!==h&&i?r.z<=i.z?(n=r,r=r.nextZ,a--):(n=i,i=i.nextZ,h--):(n=r,r=r.nextZ,a--),o?o.nextZ=n:t=n,n.prevZ=o,o=n;r=i}o.nextZ=null,u*=2}while(s>1);return t}function m(t,e,r,i,n){return t=32767*(t-r)/n,e=32767*(e-i)/n,t=16711935&(t|t<<8),t=252645135&(t|t<<4),t=858993459&(t|t<<2),t=1431655765&(t|t<<1),e=16711935&(e|e<<8),e=252645135&(e|e<<4),e=858993459&(e|e<<2),e=1431655765&(e|e<<1),t|e<<1}function y(t){var e=t,r=t;do e.x=0&&(t-s)*(i-a)-(r-s)*(e-a)>=0&&(r-s)*(o-a)-(n-s)*(i-a)>=0}function b(t,e){return T(t,e)||t.next.i!==e.i&&t.prev.i!==e.i&&!S(t,e)&&w(t,e)&&w(e,t)&&C(t,e)}function _(t,e,r){return(e.y-t.y)*(r.x-e.x)-(e.x-t.x)*(r.y-e.y)}function T(t,e){return t.x===e.x&&t.y===e.y}function E(t,e,r,i){return _(t,e,r)>0!=_(t,e,i)>0&&_(r,i,t)>0!=_(r,i,e)>0}function S(t,e){var r=t;do{if(r.i!==t.i&&r.next.i!==t.i&&r.i!==e.i&&r.next.i!==e.i&&E(r,r.next,t,e))return!0;r=r.next}while(r!==t);return!1}function w(t,e){return _(t.prev,t,t.next)<0?_(t,e,t.next)>=0&&_(t,t.prev,e)>=0:_(t,e,t.prev)<0||_(t,t.next,e)<0}function C(t,e){var r=t,i=!1,n=(t.x+e.x)/2,o=(t.y+e.y)/2;do r.y>o!=r.next.y>o&&n<(r.next.x-r.x)*(o-r.y)/(r.next.y-r.y)+r.x&&(i=!i),r=r.next;while(r!==t);return i}function A(t,e){var r=new O(t.i,t.x,t.y),i=new O(e.i,e.x,e.y),n=t.next,o=e.prev;return t.next=e,e.prev=t,r.next=n,n.prev=r,i.next=r,r.prev=i,o.next=i,i.prev=o,i}function M(t,e,r,i){var n=new O(t,e,r);return i?(n.next=i.next,n.prev=i,i.next.prev=n,i.next=n):(n.prev=n,n.next=n),n}function R(t){t.next.prev=t.prev,t.prev.next=t.next,t.prevZ&&(t.prevZ.nextZ=t.nextZ),t.nextZ&&(t.nextZ.prevZ=t.prevZ)}function O(t,e,r){this.i=t,this.x=e,this.y=r,this.prev=null,this.next=null,this.z=null,this.prevZ=null,this.nextZ=null,this.steiner=!1}e.exports=i},{}],25:[function(t,e,r){"use strict";function i(t,e,r){this.fn=t,this.context=e,this.once=r||!1}function n(){}var o="function"!=typeof Object.create?"~":!1;n.prototype._events=void 0,n.prototype.listeners=function(t,e){var r=o?o+t:t,i=this._events&&this._events[r];if(e)return!!i;if(!i)return[];if(i.fn)return[i.fn];for(var n=0,s=i.length,a=new Array(s);s>n;n++)a[n]=i[n].fn;return a},n.prototype.emit=function(t,e,r,i,n,s){var a=o?o+t:t;if(!this._events||!this._events[a])return!1;var h,u,l=this._events[a],c=arguments.length;if("function"==typeof l.fn){switch(l.once&&this.removeListener(t,l.fn,void 0,!0),c){case 1:return l.fn.call(l.context),!0;case 2:return l.fn.call(l.context,e),!0;case 3:return l.fn.call(l.context,e,r),!0;case 4:return l.fn.call(l.context,e,r,i),!0;case 5:return l.fn.call(l.context,e,r,i,n),!0;case 6:return l.fn.call(l.context,e,r,i,n,s),!0}for(u=1,h=new Array(c-1);c>u;u++)h[u-1]=arguments[u];l.fn.apply(l.context,h)}else{var p,d=l.length;for(u=0;d>u;u++)switch(l[u].once&&this.removeListener(t,l[u].fn,void 0,!0),c){case 1:l[u].fn.call(l[u].context);break;case 2:l[u].fn.call(l[u].context,e);break;case 3:l[u].fn.call(l[u].context,e,r);break;default:if(!h)for(p=1,h=new Array(c-1);c>p;p++)h[p-1]=arguments[p];l[u].fn.apply(l[u].context,h)}}return!0},n.prototype.on=function(t,e,r){var n=new i(e,r||this),s=o?o+t:t;return this._events||(this._events=o?{}:Object.create(null)),this._events[s]?this._events[s].fn?this._events[s]=[this._events[s],n]:this._events[s].push(n):this._events[s]=n,this},n.prototype.once=function(t,e,r){var n=new i(e,r||this,!0),s=o?o+t:t;return this._events||(this._events=o?{}:Object.create(null)),this._events[s]?this._events[s].fn?this._events[s]=[this._events[s],n]:this._events[s].push(n):this._events[s]=n,this},n.prototype.removeListener=function(t,e,r,i){var n=o?o+t:t;if(!this._events||!this._events[n])return this;var s=this._events[n],a=[];if(e)if(s.fn)(s.fn!==e||i&&!s.once||r&&s.context!==r)&&a.push(s);else for(var h=0,u=s.length;u>h;h++)(s[h].fn!==e||i&&!s[h].once||r&&s[h].context!==r)&&a.push(s[h]);return a.length?this._events[n]=1===a.length?a[0]:a:delete this._events[n],this},n.prototype.removeAllListeners=function(t){return this._events?(t?delete this._events[o?o+t:t]:this._events=o?{}:Object.create(null),this):this},n.prototype.off=n.prototype.removeListener,n.prototype.addListener=n.prototype.on,n.prototype.setMaxListeners=function(){return this},n.prefixed=o,"undefined"!=typeof e&&(e.exports=n)},{}],26:[function(t,e,r){"use strict";function i(t){if(null===t||void 0===t)throw new TypeError("Object.assign cannot be called with null or undefined");return Object(t)}var n=Object.prototype.hasOwnProperty,o=Object.prototype.propertyIsEnumerable;e.exports=Object.assign||function(t,e){for(var r,s,a=i(t),h=1;h=t.length&&r())}if(r=r||function(){},!t.length)return r();var o=0;u(t,function(t){e(t,i(n))})},s.forEach=s.each,s.eachSeries=function(t,e,r){if(r=r||function(){},!t.length)return r();var i=0,n=function(){e(t[i],function(e){e?(r(e),r=function(){}):(i+=1,i>=t.length?r():n())})};n()},s.forEachSeries=s.eachSeries,s.eachLimit=function(t,e,r,i){var n=d(e);n.apply(null,[t,r,i])},s.forEachLimit=s.eachLimit;var d=function(t){return function(e,r,i){if(i=i||function(){},!e.length||0>=t)return i();var n=0,o=0,s=0;!function a(){if(n>=e.length)return i();for(;t>s&&o=e.length?i():a())})}()}},f=function(t){return function(){var e=Array.prototype.slice.call(arguments);return t.apply(null,[s.each].concat(e))}},v=function(t,e){return function(){var r=Array.prototype.slice.call(arguments);return e.apply(null,[d(t)].concat(r))}},g=function(t){return function(){var e=Array.prototype.slice.call(arguments);return t.apply(null,[s.eachSeries].concat(e))}},m=function(t,e,r,i){if(e=l(e,function(t,e){return{index:e,value:t}}),i){var n=[];t(e,function(t,e){r(t.value,function(r,i){n[t.index]=i,e(r)})},function(t){i(t,n)})}else t(e,function(t,e){r(t.value,function(t){e(t)})})};s.map=f(m),s.mapSeries=g(m),s.mapLimit=function(t,e,r,i){return y(e)(t,r,i)};var y=function(t){return v(t,m)};s.reduce=function(t,e,r,i){s.eachSeries(t,function(t,i){r(e,t,function(t,r){e=r,i(t)})},function(t){i(t,e)})},s.inject=s.reduce,s.foldl=s.reduce,s.reduceRight=function(t,e,r,i){var n=l(t,function(t){return t}).reverse();s.reduce(n,e,r,i)},s.foldr=s.reduceRight;var x=function(t,e,r,i){var n=[];e=l(e,function(t,e){return{index:e,value:t}}),t(e,function(t,e){r(t.value,function(r){r&&n.push(t),e()})},function(t){i(l(n.sort(function(t,e){return t.index-e.index}),function(t){return t.value}))})};s.filter=f(x),s.filterSeries=g(x),s.select=s.filter,s.selectSeries=s.filterSeries;var b=function(t,e,r,i){var n=[];e=l(e,function(t,e){return{index:e,value:t}}),t(e,function(t,e){r(t.value,function(r){r||n.push(t),e()})},function(t){i(l(n.sort(function(t,e){return t.index-e.index}),function(t){return t.value}))})};s.reject=f(b),s.rejectSeries=g(b);var _=function(t,e,r,i){t(e,function(t,e){r(t,function(r){r?(i(t),i=function(){}):e()})},function(t){i()})};s.detect=f(_),s.detectSeries=g(_),s.some=function(t,e,r){s.each(t,function(t,i){e(t,function(t){t&&(r(!0),r=function(){}),i()})},function(t){r(!1)})},s.any=s.some,s.every=function(t,e,r){s.each(t,function(t,i){e(t,function(t){t||(r(!1),r=function(){}),i()})},function(t){r(!0)})},s.all=s.every,s.sortBy=function(t,e,r){s.map(t,function(t,r){e(t,function(e,i){e?r(e):r(null,{value:t,criteria:i})})},function(t,e){if(t)return r(t);var i=function(t,e){var r=t.criteria,i=e.criteria;return i>r?-1:r>i?1:0};r(null,l(e.sort(i),function(t){return t.value}))})},s.auto=function(t,e){e=e||function(){};var r=p(t),i=r.length;if(!i)return e();var n={},o=[],a=function(t){o.unshift(t)},l=function(t){for(var e=0;ei;){var o=i+(n-i+1>>>1);r(e,t[o])>=0?i=o:n=o-1}return i}function n(t,e,n,o){return t.started||(t.started=!0),h(e)||(e=[e]),0==e.length?s.setImmediate(function(){t.drain&&t.drain()}):void u(e,function(e){var a={data:e,priority:n,callback:"function"==typeof o?o:null};t.tasks.splice(i(t.tasks,a,r)+1,0,a),t.saturated&&t.tasks.length===t.concurrency&&t.saturated(),s.setImmediate(t.process)})}var o=s.queue(t,e);return o.push=function(t,e,r){n(o,t,e,r)},delete o.unshift,o},s.cargo=function(t,e){var r=!1,i=[],n={tasks:i,payload:e,saturated:null,empty:null,drain:null,drained:!0,push:function(t,r){h(t)||(t=[t]),u(t,function(t){i.push({data:t,callback:"function"==typeof r?r:null}),n.drained=!1,n.saturated&&i.length===e&&n.saturated()}),s.setImmediate(n.process)},process:function o(){if(!r){if(0===i.length)return n.drain&&!n.drained&&n.drain(),void(n.drained=!0);var s="number"==typeof e?i.splice(0,e):i.splice(0,i.length),a=l(s,function(t){return t.data});n.empty&&n.empty(),r=!0,t(a,function(){r=!1;var t=arguments;u(s,function(e){e.callback&&e.callback.apply(null,t)}),o()})}},length:function(){return i.length},running:function(){return r}};return n};var S=function(t){return function(e){var r=Array.prototype.slice.call(arguments,1);e.apply(null,r.concat([function(e){var r=Array.prototype.slice.call(arguments,1);"undefined"!=typeof console&&(e?console.error&&console.error(e):console[t]&&u(r,function(e){console[t](e)}))}]))}};s.log=S("log"),s.dir=S("dir"),s.memoize=function(t,e){var r={},i={};e=e||function(t){return t};var n=function(){var n=Array.prototype.slice.call(arguments),o=n.pop(),a=e.apply(null,n);a in r?s.nextTick(function(){o.apply(null,r[a])}):a in i?i[a].push(o):(i[a]=[o],t.apply(null,n.concat([function(){r[a]=arguments;var t=i[a];delete i[a];for(var e=0,n=t.length;n>e;e++)t[e].apply(null,arguments)}])))};return n.memo=r,n.unmemoized=t,n},s.unmemoize=function(t){return function(){return(t.unmemoized||t).apply(null,arguments)}},s.times=function(t,e,r){for(var i=[],n=0;t>n;n++)i.push(n);return s.map(i,e,r)},s.timesSeries=function(t,e,r){for(var i=[],n=0;t>n;n++)i.push(n);return s.mapSeries(i,e,r)},s.seq=function(){var t=arguments;return function(){var e=this,r=Array.prototype.slice.call(arguments),i=r.pop();s.reduce(t,r,function(t,r,i){r.apply(e,t.concat([function(){var t=arguments[0],e=Array.prototype.slice.call(arguments,1);i(t,e)}]))},function(t,r){i.apply(e,[t].concat(r))})}},s.compose=function(){return s.seq.apply(null,Array.prototype.reverse.call(arguments))};var w=function(t,e){var r=function(){var r=this,i=Array.prototype.slice.call(arguments),n=i.pop();return t(e,function(t,e){t.apply(r,i.concat([e]))},n)};if(arguments.length>2){var i=Array.prototype.slice.call(arguments,2);return r.apply(this,i)}return r};s.applyEach=f(w),s.applyEachSeries=g(w),s.forever=function(t,e){function r(i){if(i){if(e)return e(i);throw i}t(r)}r()},"undefined"!=typeof r&&r.exports?r.exports=s:"undefined"!=typeof t&&t.amd?t([],function(){return s}):n.async=s}()}).call(this,e("_process"))},{_process:18}],28:[function(t,e,r){function i(t,e){a.call(this),e=e||10,this.baseUrl=t||"",this.progress=0,this.loading=!1,this._progressChunk=0,this._beforeMiddleware=[],this._afterMiddleware=[],this._boundLoadResource=this._loadResource.bind(this),this._boundOnLoad=this._onLoad.bind(this),this._buffer=[],this._numToLoad=0,this._queue=n.queue(this._boundLoadResource,e),this.resources={}}var n=t("async"),o=t("url"),s=t("./Resource"),a=t("eventemitter3");i.prototype=Object.create(a.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.add=i.prototype.enqueue=function(t,e,r,i){if(Array.isArray(t)){for(var n=0;n0)if(this.xhrType===i.XHR_RESPONSE_TYPE.TEXT)this.data=t.responseText;else if(this.xhrType===i.XHR_RESPONSE_TYPE.JSON)try{this.data=JSON.parse(t.responseText),this.isJson=!0}catch(r){this.error=new Error("Error trying to parse loaded json:",r)}else if(this.xhrType===i.XHR_RESPONSE_TYPE.DOCUMENT)try{if(window.DOMParser){var n=new DOMParser;this.data=n.parseFromString(t.responseText,"text/xml")}else{var o=document.createElement("div");o.innerHTML=t.responseText,this.data=o}this.isXml=!0}catch(r){this.error=new Error("Error trying to parse loaded xml:",r)}else this.data=t.response||t.responseText;else this.error=new Error("["+t.status+"]"+t.statusText+":"+t.responseURL);this.complete()},i.prototype._determineCrossOrigin=function(t,e){if(0===t.indexOf("data:"))return"";e=e||window.location,u||(u=document.createElement("a")),u.href=t,t=a.parse(u.href);var r=!t.port&&""===e.port||t.port===e.port;return t.hostname===e.hostname&&r&&t.protocol===e.protocol?"":"anonymous"},i.prototype._determineXhrType=function(){return i._xhrTypeMap[this._getExtension()]||i.XHR_RESPONSE_TYPE.TEXT},i.prototype._determineLoadType=function(){return i._loadTypeMap[this._getExtension()]||i.LOAD_TYPE.XHR},i.prototype._getExtension=function(){var t,e=this.url;if(this.isDataUrl){var r=e.indexOf("/");t=e.substring(r+1,e.indexOf(";",r))}else{var i=e.indexOf("?");-1!==i&&(e=e.substring(0,i)),t=e.substring(e.lastIndexOf(".")+1)}return t},i.prototype._getMimeFromXhrType=function(t){switch(t){case i.XHR_RESPONSE_TYPE.BUFFER:return"application/octet-binary";case i.XHR_RESPONSE_TYPE.BLOB:return"application/blob";case i.XHR_RESPONSE_TYPE.DOCUMENT:return"application/xml";case i.XHR_RESPONSE_TYPE.JSON:return"application/json";case i.XHR_RESPONSE_TYPE.DEFAULT:case i.XHR_RESPONSE_TYPE.TEXT:default:return"text/plain"}},i.LOAD_TYPE={XHR:1,IMAGE:2,AUDIO:3,VIDEO:4},i.XHR_READY_STATE={UNSENT:0,OPENED:1,HEADERS_RECEIVED:2,LOADING:3,DONE:4},i.XHR_RESPONSE_TYPE={DEFAULT:"text",BUFFER:"arraybuffer",BLOB:"blob",DOCUMENT:"document",JSON:"json",TEXT:"text"},i._loadTypeMap={gif:i.LOAD_TYPE.IMAGE,png:i.LOAD_TYPE.IMAGE,bmp:i.LOAD_TYPE.IMAGE,jpg:i.LOAD_TYPE.IMAGE,jpeg:i.LOAD_TYPE.IMAGE,tif:i.LOAD_TYPE.IMAGE,tiff:i.LOAD_TYPE.IMAGE,webp:i.LOAD_TYPE.IMAGE,tga:i.LOAD_TYPE.IMAGE},i._xhrTypeMap={xhtml:i.XHR_RESPONSE_TYPE.DOCUMENT,html:i.XHR_RESPONSE_TYPE.DOCUMENT,htm:i.XHR_RESPONSE_TYPE.DOCUMENT,xml:i.XHR_RESPONSE_TYPE.DOCUMENT,tmx:i.XHR_RESPONSE_TYPE.DOCUMENT,tsx:i.XHR_RESPONSE_TYPE.DOCUMENT,svg:i.XHR_RESPONSE_TYPE.DOCUMENT,gif:i.XHR_RESPONSE_TYPE.BLOB,png:i.XHR_RESPONSE_TYPE.BLOB,bmp:i.XHR_RESPONSE_TYPE.BLOB,jpg:i.XHR_RESPONSE_TYPE.BLOB,jpeg:i.XHR_RESPONSE_TYPE.BLOB,tif:i.XHR_RESPONSE_TYPE.BLOB,tiff:i.XHR_RESPONSE_TYPE.BLOB,webp:i.XHR_RESPONSE_TYPE.BLOB,tga:i.XHR_RESPONSE_TYPE.BLOB,json:i.XHR_RESPONSE_TYPE.JSON,text:i.XHR_RESPONSE_TYPE.TEXT,txt:i.XHR_RESPONSE_TYPE.TEXT},i.setExtensionLoadType=function(t,e){o(i._loadTypeMap,t,e)},i.setExtensionXhrType=function(t,e){o(i._xhrTypeMap,t,e)}},{eventemitter3:25,url:23}],30:[function(t,e,r){e.exports={_keyStr:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",encodeBinary:function(t){for(var e,r="",i=new Array(4),n=0,o=0,s=0;n>2,i[1]=(3&e[0])<<4|e[1]>>4,i[2]=(15&e[1])<<2|e[2]>>6,i[3]=63&e[2],s=n-(t.length-1)){case 2:i[3]=64,i[2]=64;break;case 1:i[3]=64}for(o=0;o","Richard Davey "],main:"./src/index.js",homepage:"http://goodboydigital.com/",bugs:"https://github.com/pixijs/pixi.js/issues",license:"MIT",repository:{type:"git",url:"https://github.com/pixijs/pixi.js.git"},scripts:{start:"gulp && gulp watch",test:"gulp && testem ci",build:"gulp",docs:"jsdoc -c ./gulp/util/jsdoc.conf.json -R README.md"},files:["bin/","src/","CONTRIBUTING.md","LICENSE","package.json","README.md"],dependencies:{async:"^1.5.0",brfs:"^1.4.1",earcut:"^2.0.7",eventemitter3:"^1.1.1","object-assign":"^4.0.1","pixi-gl-core":"git+https://github.com/GoodBoyDigital/pixi-gl-core.git","resource-loader":"^1.6.4"},devDependencies:{browserify:"^11.1.0",chai:"^3.2.0",del:"^2.0.2",gulp:"^3.9.0","gulp-cached":"^1.1.0","gulp-concat":"^2.6.0","gulp-debug":"^2.1.0","gulp-header":"^1.7.1","gulp-jshint":"^1.11.2","gulp-mirror":"^0.4.0","gulp-plumber":"^1.0.1","gulp-rename":"^1.2.2","gulp-sourcemaps":"^1.5.2","gulp-uglify":"^1.4.1","gulp-util":"^3.0.6","jaguarjs-jsdoc":"git+https://github.com/davidshimjs/jaguarjs-jsdoc.git",jsdoc:"^3.3.2","jshint-summary":"^0.4.0",minimist:"^1.2.0",mocha:"^2.3.2","require-dir":"^0.3.0","run-sequence":"^1.1.2",testem:"^0.9.4","vinyl-buffer":"^1.0.0","vinyl-source-stream":"^1.1.0",watchify:"^3.4.0"},browserify:{transform:["brfs"]}}},{}],35:[function(t,e,r){function i(t){var e=document.createElement("div");e.style.width="100px",e.style.height="100px",e.style.position="absolute",e.style.top=0,e.style.left=0,e.style.zIndex=2,this.div=e,this.pool=[],this.renderId=0,this.debug=!1,this.renderer=t,this.children=[],this._onKeyDown=this._onKeyDown.bind(this),this._onMouseMove=this._onMouseMove.bind(this),this.isActive=!1,window.addEventListener("keydown",this._onKeyDown,!1)}var n=t("../core");Object.assign(n.DisplayObject.prototype,t("./accessibleTarget")),i.prototype.constructor=i,e.exports=i,i.prototype.activate=function(){this.isActive||(this.isActive=!0,window.document.addEventListener("mousemove",this._onMouseMove,!0),window.removeEventListener("keydown",this._onKeyDown,!1),this.renderer.on("postrender",this.update,this),this.renderer.view.parentNode.appendChild(this.div))},i.prototype.deactivate=function(){this.isActive&&(this.isActive=!1,window.document.removeEventListener("mousemove",this._onMouseMove),window.addEventListener("keydown",this._onKeyDown,!1),this.renderer.off("postrender",this.update),this.div.parentNode.removeChild(this.div))},i.prototype.updateAccessibleObjects=function(t){if(t.visible){t.accessible&&t.interactive&&(t._accessibleActive||this.addChild(t),t.renderId=this.renderId);for(var e=t.children,r=e.length-1;r>=0;r--)this.updateAccessibleObjects(e[r])}},i.prototype.update=function(){this.updateAccessibleObjects(this.renderer._lastObjectRendered);var t=this.renderer.view.getBoundingClientRect(),e=t.width/this.renderer.width,r=t.height/this.renderer.height,i=this.div;i.style.left=t.left+"px",i.style.top=t.top+"px",i.style.width=this.renderer.width+"px",i.style.height=this.renderer.height+"px";for(var o=0;othis.renderer.width&&(t.width=this.renderer.width-t.x),t.y+t.height>this.renderer.height&&(t.height=this.renderer.height-t.y)},i.prototype.addChild=function(t){var e=this.pool.pop();e||(e=document.createElement("button"),e.style.width="100px",e.style.height="100px",e.style.backgroundColor=this.debug?"rgba(255,0,0,0.5)":"transparent",e.style.position="absolute",e.style.zIndex=2,e.style.borderStyle="none",e.addEventListener("click",this._onClick.bind(this)),e.addEventListener("focus",this._onFocus.bind(this)),e.addEventListener("focusout",this._onFocusOut.bind(this))),e.title=t.accessibleTitle||"displayObject "+this.tabIndex,t._accessibleActive=!0,t._accessibleDiv=e,e.displayObject=t,this.children.push(t),this.div.appendChild(t._accessibleDiv),t._accessibleDiv.tabIndex=t.tabIndex},i.prototype._onClick=function(t){var e=this.renderer.plugins.interaction;e.dispatchEvent(t.target.displayObject,"click",e.eventData)},i.prototype._onFocus=function(t){var e=this.renderer.plugins.interaction;e.dispatchEvent(t.target.displayObject,"mouseover",e.eventData)},i.prototype._onFocusOut=function(t){var e=this.renderer.plugins.interaction;e.dispatchEvent(t.target.displayObject,"mouseout",e.eventData)},i.prototype._onKeyDown=function(t){9===t.keyCode&&this.activate()},i.prototype._onMouseMove=function(){this.deactivate()},i.prototype.destroy=function(){this.div=null;for(var t=0;t1)for(var r=0;e>r;r++)this.addChild(arguments[r]);else t.parent&&t.parent.removeChild(t),t.parent=this,this.children.push(t),this.onChildrenChange(this.children.length-1),t.emit("added",this);return t},i.prototype.addChildAt=function(t,e){if(e>=0&&e<=this.children.length)return t.parent&&t.parent.removeChild(t),t.parent=this,this.children.splice(e,0,t),this.onChildrenChange(e),t.emit("added",this),t;throw new Error(t+"addChildAt: The index "+e+" supplied is out of bounds "+this.children.length)},i.prototype.swapChildren=function(t,e){if(t!==e){var r=this.getChildIndex(t),i=this.getChildIndex(e);if(0>r||0>i)throw new Error("swapChildren: Both the supplied DisplayObjects must be children of the caller.");this.children[r]=e,this.children[i]=t,this.onChildrenChange(i>r?r:i)}},i.prototype.getChildIndex=function(t){var e=this.children.indexOf(t);if(-1===e)throw new Error("The supplied DisplayObject must be a child of the caller");return e},i.prototype.setChildIndex=function(t,e){if(0>e||e>=this.children.length)throw new Error("The supplied index is out of bounds");var r=this.getChildIndex(t);o.removeItems(this.children,r,1),this.children.splice(e,0,t),this.onChildrenChange(e)},i.prototype.getChildAt=function(t){if(0>t||t>=this.children.length)throw new Error("getChildAt: Supplied index "+t+" does not exist in the child list, or the supplied DisplayObject is not a child of the caller");return this.children[t]},i.prototype.removeChild=function(t){var e=arguments.length;if(e>1)for(var r=0;e>r;r++)this.removeChild(arguments[r]);else{var i=this.children.indexOf(t);if(-1===i)return;t.parent=null,o.removeItems(this.children,i,1),this.onChildrenChange(i),t.emit("removed",this)}return t},i.prototype.removeChildAt=function(t){var e=this.getChildAt(t);return e.parent=null,o.removeItems(this.children,t,1),this.onChildrenChange(t),e.emit("removed",this),e},i.prototype.removeChildren=function(t,e){var r,i,n=t||0,o="number"==typeof e?e:this.children.length,s=o-n;if(s>0&&o>=s){for(r=this.children.splice(n,s),i=0;it;++t)this.children[t].updateTransform();this.dirty=!1}},i.prototype.containerUpdateTransform=i.prototype.updateTransform,i.prototype.getBounds=function(){if(!this._currentBounds){if(0===this.children.length)return n.Rectangle.EMPTY;for(var t,e,r,i=1/0,o=1/0,s=-(1/0),a=-(1/0),h=!1,u=0,l=this.children.length;l>u;++u){var c=this.children[u];c.visible&&(h=!0,t=this.children[u].getBounds(),i=ie?s:e,a=a>r?a:r)}if(!h)return n.Rectangle.EMPTY;var p=this._bounds;p.x=i,p.y=o,p.width=s-i,p.height=a-o,this._currentBounds=p}return this._currentBounds},i.prototype.containerGetBounds=i.prototype.getBounds,i.prototype.getLocalBounds=function(){var t=this.worldTransform;this.worldTransform=n.Matrix.IDENTITY;for(var e=0,r=this.children.length;r>e;++e)this.children[e].updateTransform();return this.worldTransform=t,this._currentBounds=null,this.getBounds(n.Matrix.IDENTITY)},i.prototype.renderWebGL=function(t){if(this.visible&&!(this.worldAlpha<=0)&&this.renderable){var e,r;if(this._mask||this._filters){for(t.currentRenderer.flush(),this._filters&&this._filters.length&&t.filterManager.pushFilter(this,this._filters),this._mask&&t.maskManager.pushMask(this,this._mask),t.currentRenderer.start(),this._renderWebGL(t),e=0,r=this.children.length;r>e;e++)this.children[e].renderWebGL(t);t.currentRenderer.flush(),this._mask&&t.maskManager.popMask(this,this._mask),this._filters&&t.filterManager.popFilter(),t.currentRenderer.start()}else for(this._renderWebGL(t),e=0,r=this.children.length;r>e;++e)this.children[e].renderWebGL(t)}},i.prototype._renderWebGL=function(t){},i.prototype._renderCanvas=function(t){},i.prototype.renderCanvas=function(t){if(this.visible&&!(this.alpha<=0)&&this.renderable){this._mask&&t.maskManager.pushMask(this._mask,t),this._renderCanvas(t);for(var e=0,r=this.children.length;r>e;++e)this.children[e].renderCanvas(t);this._mask&&t.maskManager.popMask(t)}},i.prototype.destroy=function(t){if(s.prototype.destroy.call(this),t)for(var e=0,r=this.children.length;r>e;++e)this.children[e].destroy(t);this.removeChildren(),this.children=null}},{"../math":48,"../textures/RenderTexture":91,"../utils":98,"./DisplayObject":40}],40:[function(t,e,r){function i(){s.call(this),this.position=new n.Point,this.scale=new n.Point(1,1),this.pivot=new n.Point(0,0),this.skew=new n.Point(0,0),this._rotation=0,this.alpha=1,this.visible=!0,this.renderable=!0,this.parent=null,this.worldAlpha=1,this.worldTransform=new n.Matrix,this.localTransform=new n.Matrix,this.filterArea=null,this._sr=0,this._cr=1,this._bounds=new n.Rectangle(0,0,1,1),this._currentBounds=null,this._mask=null,this.dirty=!0}var n=t("../math"),o=t("../textures/RenderTexture"),s=t("eventemitter3"),a=(t("../const"),new n.Matrix),h={worldTransform:new n.Matrix,worldAlpha:1,children:[]};i.prototype=Object.create(s.prototype),i.prototype.constructor=i,e.exports=i,Object.defineProperties(i.prototype,{x:{get:function(){return this.position.x},set:function(t){this.position.x=t,this.dirty=!0}},y:{get:function(){return this.position.y},set:function(t){this.position.y=t,this.dirty=!0}},scaleX:{get:function(){return this.scale.x},set:function(t){this.scale.x=t,this.dirty=!0}},scaleY:{get:function(){return this.scale.y},set:function(t){this.scale.y=t,this.dirty=!0}},rotation:{get:function(){return this._rotation},set:function(t){this._rotation=t,this.dirty=!0,this._sr=Math.sin(t),this._cr=Math.cos(t)}},scaleY:{get:function(){return this.scale.y},set:function(t){this.scale.y=t,this.dirty=!0}},worldVisible:{get:function(){var t=this;do{if(!t.visible)return!1;t=t.parent}while(t);return!0}},mask:{get:function(){return this._mask},set:function(t){this._mask&&(this._mask.renderable=!0),this._mask=t,this._mask&&(this._mask.renderable=!1)}},filters:{get:function(){return this._filters&&this._filters.slice()},set:function(t){this._filters=t&&t.slice()}}}),i.prototype.updateTransform=function(){var t=this.parent.worldTransform,e=this.worldTransform,r=this.localTransform;this.dirty&&(r.a=this._cr*this.scale.x,r.b=this._sr*this.scale.x,r.c=-this._sr*this.scale.y,r.d=this._cr*this.scale.y,r.tx=this.position.x-(this.pivot.x*r.a+this.pivot.y*r.c),r.ty=this.position.y-(this.pivot.x*r.b+this.pivot.y*r.d)),(this.dirty||this.parent.dirty)&&(e.a=r.a*t.a+r.b*t.c,e.b=r.a*t.b+r.b*t.d,e.c=r.c*t.a+r.d*t.c,e.d=r.c*t.b+r.d*t.d,e.tx=r.tx*t.a+r.ty*t.c+t.tx,e.ty=r.tx*t.b+r.ty*t.d+t.ty,this._currentBounds=null),this.worldAlpha=this.alpha*this.parent.worldAlpha},i.prototype.displayObjectUpdateTransform=i.prototype.updateTransform,i.prototype.getBounds=function(t){return n.Rectangle.EMPTY},i.prototype.getLocalBounds=function(){return this.getBounds(n.Matrix.IDENTITY)},i.prototype.toGlobal=function(t){return this.parent?this.displayObjectUpdateTransform():(this.parent=h,this.displayObjectUpdateTransform(),this.parent=null),this.worldTransform.apply(t)},i.prototype.toLocal=function(t,e,r){return e&&(t=e.toGlobal(t)),this.parent?this.displayObjectUpdateTransform():(this.parent=h,this.displayObjectUpdateTransform(),this.parent=null),this.worldTransform.applyInverse(t,r)},i.prototype.renderWebGL=function(t){},i.prototype.renderCanvas=function(t){},i.prototype.generateTexture=function(t,e,r){var i=this.getLocalBounds(),n=new o(t,0|i.width,0|i.height,e,r);return a.tx=-i.x,a.ty=-i.y,n.render(this,a),n},i.prototype.setParent=function(t){if(!t||!t.addChild)throw new Error("setParent: Argument must be a Container");return t.addChild(this),t},i.prototype.setTransform=function(t,e,r,i,n,o,s,a,h){return this.position.x=t||0,this.position.y=e||0,this.scale.x=r?r:1,this.scale.y=i?i:1,this.rotation=n||0,this.skew.x=o||0,this.skew.y=s||0,this.pivot.x=a||0,this.pivot.y=h||0,this.dirty=!0,this},i.prototype.destroy=function(){this.position=null,this.scale=null,this.pivot=null,this.skew=null,this.parent=null,this._bounds=null,this._currentBounds=null,this._mask=null,this.worldTransform=null,this.filterArea=null}},{"../const":38,"../math":48,"../textures/RenderTexture":91,eventemitter3:25}],41:[function(t,e,r){function i(){n.call(this),this.fillAlpha=1,this.lineWidth=0,this.lineColor=0,this.graphicsData=[],this.tint=16777215,this._prevTint=16777215,this.blendMode=l.BLEND_MODES.NORMAL,this.currentPath=null,this._webGL={},this.isMask=!1,this.boundsPadding=0,this._localBounds=new u.Rectangle(0,0,1,1),this.dirty=!0,this.glDirty=!1,this.boundsDirty=!0,this.cachedSpriteDirty=!1}var n=t("../display/Container"),o=t("../textures/Texture"),s=t("../renderers/canvas/utils/CanvasBuffer"),a=t("../renderers/canvas/utils/CanvasGraphics"),h=t("./GraphicsData"),u=t("../math"),l=t("../const"),c=new u.Point;i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.clone=function(){var t=new i;t.renderable=this.renderable,t.fillAlpha=this.fillAlpha,t.lineWidth=this.lineWidth,t.lineColor=this.lineColor,t.tint=this.tint,t.blendMode=this.blendMode,t.isMask=this.isMask,t.boundsPadding=this.boundsPadding,t.dirty=!0,t.glDirty=!0,t.cachedSpriteDirty=this.cachedSpriteDirty;for(var e=0;e=c;++c)l=c/s,n=h+(t-h)*l,o=u+(e-u)*l,a.push(n+(t+(r-t)*l-n)*l,o+(e+(i-e)*l-o)*l);return this.dirty=this.boundsDirty=!0,this},i.prototype.bezierCurveTo=function(t,e,r,i,n,o){this.currentPath?0===this.currentPath.shape.points.length&&(this.currentPath.shape.points=[0,0]):this.moveTo(0,0);for(var s,a,h,u,l,c=20,p=this.currentPath.shape.points,d=p[p.length-2],f=p[p.length-1],v=0,g=1;c>=g;++g)v=g/c,s=1-v,a=s*s,h=a*s,u=v*v,l=u*v,p.push(h*d+3*a*v*t+3*s*u*r+l*n,h*f+3*a*v*e+3*s*u*i+l*o);return this.dirty=this.boundsDirty=!0,this},i.prototype.arcTo=function(t,e,r,i,n){this.currentPath?0===this.currentPath.shape.points.length&&this.currentPath.shape.points.push(t,e):this.moveTo(t,e);var o=this.currentPath.shape.points,s=o[o.length-2],a=o[o.length-1],h=a-e,u=s-t,l=i-e,c=r-t,p=Math.abs(h*c-u*l);if(1e-8>p||0===n)(o[o.length-2]!==t||o[o.length-1]!==e)&&o.push(t,e);else{var d=h*h+u*u,f=l*l+c*c,v=h*l+u*c,g=n*Math.sqrt(d)/p,m=n*Math.sqrt(f)/p,y=g*v/d,x=m*v/f,b=g*c+m*u,_=g*l+m*h,T=u*(m+y),E=h*(m+y),S=c*(g+x),w=l*(g+x),C=Math.atan2(E-_,T-b),A=Math.atan2(w-_,S-b);this.arc(b+t,_+e,n,C,A,u*l>c*h)}return this.dirty=this.boundsDirty=!0,this},i.prototype.arc=function(t,e,r,i,n,o){if(o=o||!1,i===n)return this;!o&&i>=n?n+=2*Math.PI:o&&n>=i&&(i+=2*Math.PI);var s=o?-1*(i-n):n-i,a=40*Math.ceil(Math.abs(s)/(2*Math.PI));if(0===s)return this;var h=t+Math.cos(i)*r,u=e+Math.sin(i)*r;this.currentPath?this.currentPath.shape.points.push(h,u):this.moveTo(h,u);for(var l=this.currentPath.shape.points,c=s/(2*a),p=2*c,d=Math.cos(c),f=Math.sin(c),v=a-1,g=v%1/v,m=0;v>=m;m++){var y=m+g*m,x=c+i+p*y,b=Math.cos(x),_=-Math.sin(x);l.push((d*b+f*_)*r+t,(d*-_+f*b)*r+e)}return this.dirty=this.boundsDirty=!0,this},i.prototype.beginFill=function(t,e){return this.filling=!0,this.fillColor=t||0,this.fillAlpha=void 0===e?1:e,this.currentPath&&this.currentPath.shape.points.length<=2&&(this.currentPath.fill=this.filling,this.currentPath.fillColor=this.fillColor,this.currentPath.fillAlpha=this.fillAlpha),this},i.prototype.endFill=function(){return this.filling=!1,this.fillColor=null,this.fillAlpha=1,this},i.prototype.drawRect=function(t,e,r,i){return this.drawShape(new u.Rectangle(t,e,r,i)),this},i.prototype.drawRoundedRect=function(t,e,r,i,n){return this.drawShape(new u.RoundedRectangle(t,e,r,i,n)),this},i.prototype.drawCircle=function(t,e,r){return this.drawShape(new u.Circle(t,e,r)),this},i.prototype.drawEllipse=function(t,e,r,i){return this.drawShape(new u.Ellipse(t,e,r,i)),this},i.prototype.drawPolygon=function(t){var e=t,r=!0;if(e instanceof u.Polygon&&(r=e.closed,e=e.points),!Array.isArray(e)){e=new Array(arguments.length);for(var i=0;ig?g:S,S=S>y?y:S,S=S>b?b:S,w=w>m?m:w,w=w>x?x:w,w=w>_?_:w,T=g>T?g:T,T=y>T?y:T,T=b>T?b:T,E=m>E?m:E,E=x>E?x:E,E=_>E?_:E,this._bounds.x=S,this._bounds.width=T-S,this._bounds.y=w,this._bounds.height=E-w,this._currentBounds=this._bounds}return this._currentBounds},i.prototype.containsPoint=function(t){this.worldTransform.applyInverse(t,c);for(var e=this.graphicsData,r=0;rs?s:t,e=s+h>e?s+h:e,r=r>a?a:r,i=a+u>i?a+u:i;else if(d===l.SHAPES.CIRC)s=n.x,a=n.y,h=n.radius+f/2,u=n.radius+f/2,t=t>s-h?s-h:t,e=s+h>e?s+h:e,r=r>a-u?a-u:r,i=a+u>i?a+u:i;else if(d===l.SHAPES.ELIP)s=n.x,a=n.y,h=n.width+f/2,u=n.height+f/2,t=t>s-h?s-h:t,e=s+h>e?s+h:e,r=r>a-u?a-u:r,i=a+u>i?a+u:i;else{o=n.points;for(var v=0;vs-f?s-f:t,e=s+f>e?s+f:e,r=r>a-f?a-f:r,i=a+f>i?a+f:i}}else t=0,e=0,r=0,i=0;var g=this.boundsPadding;this._localBounds.x=t-g,this._localBounds.width=e-t+2*g,this._localBounds.y=r-g,this._localBounds.height=i-r+2*g},i.prototype.drawShape=function(t){this.currentPath&&this.currentPath.shape.points.length<=2&&this.graphicsData.pop(),this.currentPath=null;var e=new h(this.lineWidth,this.lineColor,this.lineAlpha,this.fillColor,this.fillAlpha,this.filling,t);return this.graphicsData.push(e),e.type===l.SHAPES.POLY&&(e.shape.closed=e.shape.closed||this.filling,this.currentPath=e),this.dirty=this.boundsDirty=!0,e},i.prototype.destroy=function(){n.prototype.destroy.apply(this,arguments);for(var t=0;ta;a++)e=s.data[a],1===s.data[a].mode?(r.stencilManager.pushStencil(t,e),i.uniform1f(r.shaderManager.complexPrimitiveShader.uniforms.alpha._location,t.worldAlpha*e.alpha),i.drawElements(i.TRIANGLE_FAN,4,i.UNSIGNED_SHORT,2*(e.indices.length-4)),r.stencilManager.popStencil(t,e)):(o=r.shaderManager.primitiveShader,r.shaderManager.setShader(o),i.uniformMatrix3fv(o.uniforms.translationMatrix._location,!1,t.worldTransform.toArray(!0)),i.uniformMatrix3fv(o.uniforms.projectionMatrix._location,!1,r.currentRenderTarget.projectionMatrix.toArray(!0)),i.uniform3fv(o.uniforms.tint._location,n.hex2rgb(t.tint)),i.uniform1f(o.uniforms.alpha._location,t.worldAlpha),i.bindBuffer(i.ARRAY_BUFFER,e.buffer),i.vertexAttribPointer(o.attributes.aVertexPosition,2,i.FLOAT,!1,24,0),i.vertexAttribPointer(o.attributes.aColor,4,i.FLOAT,!1,24,8),i.bindBuffer(i.ELEMENT_ARRAY_BUFFER,e.indexBuffer),i.drawElements(i.TRIANGLE_STRIP,e.indices.length,i.UNSIGNED_SHORT,0)),r.drawCount++},i.prototype.updateGraphics=function(t){var e=this.renderer.gl,r=t._webGL[e.id];r||(r=t._webGL[e.id]={lastIndex:0,data:[],gl:e}),t.dirty=!1;var i;if(t.clearDirty){for(t.clearDirty=!1,i=0;i=6)if(a.points.length<2*this.maximumSimplePolySize){o=this.switchMode(r,0);var h=this.buildPoly(a,o);h||(o=this.switchMode(r,1),this.buildComplexPoly(a,o))}else o=this.switchMode(r,1),this.buildComplexPoly(a,o);a.lineWidth>0&&(o=this.switchMode(r,0),this.buildLine(a,o))}else o=this.switchMode(r,0),a.type===s.SHAPES.RECT?this.buildRectangle(a,o):a.type===s.SHAPES.CIRC||a.type===s.SHAPES.ELIP?this.buildCircle(a,o):a.type===s.SHAPES.RREC&&this.buildRoundedRectangle(a,o);r.lastIndex++}for(i=0;i32e4||r.mode!==e||1===e)&&(r=this.graphicsDataPool.pop()||new u(t.gl),r.mode=e,t.data.push(r))):(r=this.graphicsDataPool.pop()||new u(t.gl),r.mode=e,t.data.push(r)),r.dirty=!0,r},i.prototype.buildRectangle=function(t,e){var r=t.shape,i=r.x,o=r.y,s=r.width,a=r.height;if(t.fill){var h=n.hex2rgb(t.fillColor),u=t.fillAlpha,l=h[0]*u,c=h[1]*u,p=h[2]*u,d=e.points,f=e.indices,v=d.length/6;d.push(i,o),d.push(l,c,p,u),d.push(i+s,o),d.push(l,c,p,u),d.push(i,o+a),d.push(l,c,p,u),d.push(i+s,o+a),d.push(l,c,p,u),f.push(v,v,v+1,v+2,v+3,v+3)}if(t.lineWidth){var g=t.points;t.points=[i,o,i+s,o,i+s,o+a,i,o+a,i,o],this.buildLine(t,e),t.points=g}},i.prototype.buildRoundedRectangle=function(t,e){var r=t.shape,i=r.x,o=r.y,s=r.width,a=r.height,h=r.radius,u=[];if(u.push(i,o+h),this.quadraticBezierCurve(i,o+a-h,i,o+a,i+h,o+a,u),this.quadraticBezierCurve(i+s-h,o+a,i+s,o+a,i+s,o+a-h,u),this.quadraticBezierCurve(i+s,o+h,i+s,o,i+s-h,o,u),this.quadraticBezierCurve(i+h,o,i,o,i,o+h+1e-10,u),t.fill){var c=n.hex2rgb(t.fillColor),p=t.fillAlpha,d=c[0]*p,f=c[1]*p,v=c[2]*p,g=e.points,m=e.indices,y=g.length/6,x=l(u,null,2),b=0;for(b=0;b=m;m++)g=m/f,h=a(t,r,g),u=a(e,i,g),l=a(r,n,g),c=a(i,o,g),p=a(h,l,g),d=a(u,c,g),v.push(p,d);return v},i.prototype.buildCircle=function(t,e){var r,i,o=t.shape,a=o.x,h=o.y;t.type===s.SHAPES.CIRC?(r=o.radius,i=o.radius):(r=o.width,i=o.height);var u=Math.floor(30*Math.sqrt(o.radius))||Math.floor(15*Math.sqrt(o.width+o.height)),l=2*Math.PI/u,c=0;if(t.fill){var p=n.hex2rgb(t.fillColor),d=t.fillAlpha,f=p[0]*d,v=p[1]*d,g=p[2]*d,m=e.points,y=e.indices,x=m.length/6;for(y.push(x),c=0;u+1>c;c++)m.push(a,h,f,v,g,d),m.push(a+Math.sin(l*c)*r,h+Math.cos(l*c)*i,f,v,g,d),y.push(x++,x++);y.push(x-1)}if(t.lineWidth){var b=t.points;for(t.points=[],c=0;u+1>c;c++)t.points.push(a+Math.sin(l*c)*r,h+Math.cos(l*c)*i);this.buildLine(t,e),t.points=b}},i.prototype.buildLine=function(t,e){var r=0,i=t.points;if(0!==i.length){var s=new o.Point(i[0],i[1]),a=new o.Point(i[i.length-2],i[i.length-1]);if(s.x===a.x&&s.y===a.y){i=i.slice(),i.pop(),i.pop(),a=new o.Point(i[i.length-2],i[i.length-1]);var h=a.x+.5*(s.x-a.x),u=a.y+.5*(s.y-a.y);i.unshift(h,u),i.push(h,u)}var l,c,p,d,f,v,g,m,y,x,b,_,T,E,S,w,C,A,M,R,O,D,P,F=e.points,L=e.indices,B=i.length/2,I=i.length,N=F.length/6,U=t.lineWidth/2,k=n.hex2rgb(t.lineColor),j=t.lineAlpha,G=k[0]*j,Y=k[1]*j,X=k[2]*j;for(p=i[0],d=i[1],f=i[2],v=i[3],y=-(d-v),x=p-f,P=Math.sqrt(y*y+x*x),y/=P,x/=P,y*=U,x*=U,F.push(p-y,d-x,G,Y,X,j),F.push(p+y,d+x,G,Y,X,j),r=1;B-1>r;r++)p=i[2*(r-1)],d=i[2*(r-1)+1],f=i[2*r],v=i[2*r+1],g=i[2*(r+1)],m=i[2*(r+1)+1],y=-(d-v),x=p-f,P=Math.sqrt(y*y+x*x),y/=P,x/=P,y*=U,x*=U,b=-(v-m),_=f-g,P=Math.sqrt(b*b+_*_),b/=P,_/=P,b*=U,_*=U,S=-x+d-(-x+v),w=-y+f-(-y+p),C=(-y+p)*(-x+v)-(-y+f)*(-x+d),A=-_+m-(-_+v),M=-b+f-(-b+g),R=(-b+g)*(-_+v)-(-b+f)*(-_+m),O=S*M-A*w,Math.abs(O)<.1?(O+=10.1,F.push(f-y,v-x,G,Y,X,j),F.push(f+y,v+x,G,Y,X,j)):(l=(w*R-M*C)/O,c=(A*C-S*R)/O,D=(l-f)*(l-f)+(c-v)*(c-v),D>19600?(T=y-b,E=x-_,P=Math.sqrt(T*T+E*E),T/=P,E/=P,T*=U,E*=U,F.push(f-T,v-E),F.push(G,Y,X,j),F.push(f+T,v+E),F.push(G,Y,X,j),F.push(f-T,v-E),F.push(G,Y,X,j),I++):(F.push(l,c),F.push(G,Y,X,j),F.push(f-(l-f),v-(c-v)),F.push(G,Y,X,j)));for(p=i[2*(B-2)],d=i[2*(B-2)+1],f=i[2*(B-1)],v=i[2*(B-1)+1],y=-(d-v),x=p-f,P=Math.sqrt(y*y+x*x),y/=P,x/=P,y*=U,x*=U,F.push(f-y,v-x),F.push(G,Y,X,j),F.push(f+y,v+x),F.push(G,Y,X,j),L.push(N),r=0;I>r;r++)L.push(N++);L.push(N-1)}},i.prototype.buildComplexPoly=function(t,e){var r=t.points.slice();if(!(r.length<6)){var i=e.indices;e.points=r,e.alpha=t.fillAlpha,e.color=n.hex2rgb(t.fillColor);for(var o,s,a=1/0,h=-(1/0),u=1/0,l=-(1/0),c=0;co?o:a,h=o>h?o:h,u=u>s?s:u,l=s>l?s:l;r.push(a,u,h,u,h,l,a,l);var p=r.length/2;for(c=0;p>c;c++)i.push(c)}},i.prototype.buildPoly=function(t,e){var r=t.points;if(!(r.length<6)){var i=e.points,o=e.indices,s=r.length/2,a=n.hex2rgb(t.fillColor),h=t.fillAlpha,u=a[0]*h,c=a[1]*h,p=a[2]*h,d=l(r,null,2);if(!d)return!1;var f=i.length/6,v=0;for(v=0;vv;v++)i.push(r[2*v],r[2*v+1],u,c,p,h);return!0}}},{"../../const":38,"../../math":48,"../../renderers/webgl/WebGLRenderer":65,"../../renderers/webgl/utils/ObjectRenderer":80,"../../utils":98,"./WebGLGraphicsData":44,earcut:24}],44:[function(t,e,r){function i(t){this.gl=t,this.color=[0,0,0],this.points=[],this.indices=[],this.buffer=t.createBuffer(),this.indexBuffer=t.createBuffer(),this.mode=1,this.alpha=1,this.dirty=!0,this.glPoints=null,this.glIndices=null}i.prototype.constructor=i,e.exports=i,i.prototype.reset=function(){this.points.length=0,this.indices.length=0},i.prototype.upload=function(){var t=this.gl;this.glPoints=new Float32Array(this.points),t.bindBuffer(t.ARRAY_BUFFER,this.buffer),t.bufferData(t.ARRAY_BUFFER,this.glPoints,t.STATIC_DRAW),this.glIndices=new Uint16Array(this.indices),t.bindBuffer(t.ELEMENT_ARRAY_BUFFER,this.indexBuffer),t.bufferData(t.ELEMENT_ARRAY_BUFFER,this.glIndices,t.STATIC_DRAW),this.dirty=!1},i.prototype.destroy=function(){this.color=null,this.points=null,this.indices=null,this.gl.deleteBuffer(this.buffer),this.gl.deleteBuffer(this.indexBuffer),this.gl=null,this.buffer=null,this.indexBuffer=null,this.glPoints=null,this.glIndices=null}},{}],45:[function(t,e,r){var i=e.exports=Object.assign(t("./const"),t("./math"),{utils:t("./utils"),ticker:t("./ticker"),DisplayObject:t("./display/DisplayObject"),Container:t("./display/Container"),Sprite:t("./sprites/Sprite"),ParticleContainer:t("./particles/ParticleContainer"),SpriteRenderer:t("./sprites/webgl/SpriteRenderer"),ParticleRenderer:t("./particles/webgl/ParticleRenderer"),Text:t("./text/Text"),Graphics:t("./graphics/Graphics"),GraphicsData:t("./graphics/GraphicsData"),GraphicsRenderer:t("./graphics/webgl/GraphicsRenderer"),Texture:t("./textures/Texture"),BaseTexture:t("./textures/BaseTexture"),RenderTexture:t("./textures/RenderTexture"),VideoBaseTexture:t("./textures/VideoBaseTexture"),TextureUvs:t("./textures/TextureUvs"),CanvasRenderer:t("./renderers/canvas/CanvasRenderer"),CanvasGraphics:t("./renderers/canvas/utils/CanvasGraphics"),CanvasBuffer:t("./renderers/canvas/utils/CanvasBuffer"),WebGLRenderer:t("./renderers/webgl/WebGLRenderer"),WebGLManager:t("./renderers/webgl/managers/WebGLManager"),ShaderManager:t("./renderers/webgl/managers/ShaderManager"),Shader:t("./renderers/webgl/shaders/Shader"),ObjectRenderer:t("./renderers/webgl/utils/ObjectRenderer"),RenderTarget:t("./renderers/webgl/utils/RenderTarget"),AbstractFilter:t("./renderers/webgl/filters/AbstractFilter"),FXAAFilter:t("./renderers/webgl/filters/FXAAFilter"),SpriteMaskFilter:t("./renderers/webgl/filters/SpriteMaskFilter"),glCore:t("pixi-gl-core"),autoDetectRenderer:function(t,e,r,n){return t=t||800,e=e||600,!n&&i.utils.isWebGLSupported()?new i.WebGLRenderer(t,e,r):new i.CanvasRenderer(t,e,r)}})},{"./const":38,"./display/Container":39,"./display/DisplayObject":40,"./graphics/Graphics":41,"./graphics/GraphicsData":42,"./graphics/webgl/GraphicsRenderer":43,"./math":48,"./particles/ParticleContainer":54,"./particles/webgl/ParticleRenderer":56,"./renderers/canvas/CanvasRenderer":59,"./renderers/canvas/utils/CanvasBuffer":60,"./renderers/canvas/utils/CanvasGraphics":61,"./renderers/webgl/WebGLRenderer":65,"./renderers/webgl/filters/AbstractFilter":66,"./renderers/webgl/filters/FXAAFilter":67,"./renderers/webgl/filters/SpriteMaskFilter":68,"./renderers/webgl/managers/ShaderManager":72,"./renderers/webgl/managers/WebGLManager":74,"./renderers/webgl/shaders/Shader":77,"./renderers/webgl/utils/ObjectRenderer":80,"./renderers/webgl/utils/RenderTarget":82,"./sprites/Sprite":86,"./sprites/webgl/SpriteRenderer":87,"./text/Text":89,"./textures/BaseTexture":90,"./textures/RenderTexture":91,"./textures/Texture":92,"./textures/TextureUvs":93,"./textures/VideoBaseTexture":94,"./ticker":96,"./utils":98,"pixi-gl-core":1}],46:[function(t,e,r){function i(){this.a=1,this.b=0,this.c=0,this.d=1,this.tx=0,this.ty=0}var n=t("./Point");i.prototype.constructor=i,e.exports=i,i.prototype.fromArray=function(t){this.a=t[0],this.b=t[1],this.c=t[3],this.d=t[4],this.tx=t[2],this.ty=t[5]},i.prototype.set=function(t,e,r,i,n,o){return this.a=t,this.b=e,this.c=r,this.d=i,this.tx=n,this.ty=o,this},i.prototype.toArray=function(t,e){this.array||(this.array=new Float32Array(9));var r=e||this.array;return t?(r[0]=this.a,r[1]=this.b,r[2]=0,r[3]=this.c,r[4]=this.d,r[5]=0,r[6]=this.tx,r[7]=this.ty,r[8]=1):(r[0]=this.a,r[1]=this.c,r[2]=this.tx,r[3]=this.b,r[4]=this.d,r[5]=this.ty,r[6]=0,r[7]=0,r[8]=1),r},i.prototype.apply=function(t,e){e=e||new n;var r=t.x,i=t.y;return e.x=this.a*r+this.c*i+this.tx,e.y=this.b*r+this.d*i+this.ty,e},i.prototype.applyInverse=function(t,e){e=e||new n;var r=1/(this.a*this.d+this.c*-this.b),i=t.x,o=t.y;return e.x=this.d*r*i+-this.c*r*o+(this.ty*this.c-this.tx*this.d)*r,e.y=this.a*r*o+-this.b*r*i+(-this.ty*this.a+this.tx*this.b)*r,e},i.prototype.translate=function(t,e){return this.tx+=t,this.ty+=e,this},i.prototype.scale=function(t,e){return this.a*=t,this.d*=e,this.c*=t,this.b*=e,this.tx*=t,this.ty*=e,this},i.prototype.rotate=function(t){var e=Math.cos(t),r=Math.sin(t),i=this.a,n=this.c,o=this.tx;return this.a=i*e-this.b*r,this.b=i*r+this.b*e,this.c=n*e-this.d*r,this.d=n*r+this.d*e,this.tx=o*e-this.ty*r,this.ty=o*r+this.ty*e,this},i.prototype.append=function(t){var e=this.a,r=this.b,i=this.c,n=this.d;return this.a=t.a*e+t.b*i,this.b=t.a*r+t.b*n,this.c=t.c*e+t.d*i,this.d=t.c*r+t.d*n,this.tx=t.tx*e+t.ty*i+this.tx,this.ty=t.tx*r+t.ty*n+this.ty,this},i.prototype.setTransform=function(t,e,r,i,n,o,s,a,h){var u,l,c,p,d,f,v,g,m,y;return d=Math.sin(s),f=Math.cos(s),v=Math.cos(h),g=Math.sin(h),m=-Math.sin(a),y=Math.cos(a),u=f*n,l=d*n,c=-d*o,p=f*o,this.a=v*u+g*c,this.b=v*l+g*p,this.c=m*u+y*c,this.d=m*l+y*p,this.tx=t+(r*u+i*c),this.ty=e+(r*l+i*p),this},i.prototype.prepend=function(t){var e=this.tx;if(1!==t.a||0!==t.b||0!==t.c||1!==t.d){var r=this.a,i=this.c;this.a=r*t.a+this.b*t.c,this.b=r*t.b+this.b*t.d,this.c=i*t.a+this.d*t.c,this.d=i*t.b+this.d*t.d}return this.tx=e*t.a+this.ty*t.c+t.tx,this.ty=e*t.b+this.ty*t.d+t.ty,this},i.prototype.invert=function(){var t=this.a,e=this.b,r=this.c,i=this.d,n=this.tx,o=t*i-e*r;return this.a=i/o,this.b=-e/o,this.c=-r/o,this.d=t/o,this.tx=(r*this.ty-i*n)/o,this.ty=-(t*this.ty-e*n)/o,this},i.prototype.identity=function(){return this.a=1,this.b=0,this.c=0,this.d=1,this.tx=0,this.ty=0,this},i.prototype.clone=function(){var t=new i;return t.a=this.a,t.b=this.b,t.c=this.c,t.d=this.d,t.tx=this.tx,t.ty=this.ty,t},i.prototype.copy=function(t){return t.a=this.a,t.b=this.b,t.c=this.c,t.d=this.d,t.tx=this.tx,t.ty=this.ty,t},i.IDENTITY=new i,i.TEMP_MATRIX=new i},{"./Point":47}],47:[function(t,e,r){function i(t,e){this.x=t||0,this.y=e||0}i.prototype.constructor=i,e.exports=i,i.prototype.clone=function(){return new i(this.x,this.y)},i.prototype.copy=function(t){this.set(t.x,t.y)},i.prototype.equals=function(t){return t.x===this.x&&t.y===this.y},i.prototype.set=function(t,e){this.x=t||0,this.y=e||(0!==e?this.x:0)}},{}],48:[function(t,e,r){e.exports={Point:t("./Point"),Matrix:t("./Matrix"),Circle:t("./shapes/Circle"),Ellipse:t("./shapes/Ellipse"),Polygon:t("./shapes/Polygon"),Rectangle:t("./shapes/Rectangle"),RoundedRectangle:t("./shapes/RoundedRectangle")}},{"./Matrix":46,"./Point":47,"./shapes/Circle":49,"./shapes/Ellipse":50,"./shapes/Polygon":51,"./shapes/Rectangle":52,"./shapes/RoundedRectangle":53}],49:[function(t,e,r){function i(t,e,r){this.x=t||0,this.y=e||0,this.radius=r||0,this.type=o.SHAPES.CIRC}var n=t("./Rectangle"),o=t("../../const");i.prototype.constructor=i,e.exports=i,i.prototype.clone=function(){return new i(this.x,this.y,this.radius)},i.prototype.contains=function(t,e){if(this.radius<=0)return!1;var r=this.x-t,i=this.y-e,n=this.radius*this.radius;return r*=r,i*=i,n>=r+i},i.prototype.getBounds=function(){return new n(this.x-this.radius,this.y-this.radius,2*this.radius,2*this.radius)}},{"../../const":38,"./Rectangle":52}],50:[function(t,e,r){function i(t,e,r,i){this.x=t||0,this.y=e||0,this.width=r||0,this.height=i||0,this.type=o.SHAPES.ELIP}var n=t("./Rectangle"),o=t("../../const");i.prototype.constructor=i,e.exports=i,i.prototype.clone=function(){return new i(this.x,this.y,this.width,this.height)},i.prototype.contains=function(t,e){if(this.width<=0||this.height<=0)return!1;var r=(t-this.x)/this.width,i=(e-this.y)/this.height;return r*=r,i*=i,1>=r+i},i.prototype.getBounds=function(){return new n(this.x-this.width,this.y-this.height,this.width,this.height)}},{"../../const":38,"./Rectangle":52}],51:[function(t,e,r){function i(t){var e=t;if(!Array.isArray(e)){e=new Array(arguments.length);for(var r=0;rs;s++)i.push(e[s].x,e[s].y);e=i}this.closed=!0,this.points=e,this.type=o.SHAPES.POLY}var n=t("../Point"),o=t("../../const");i.prototype.constructor=i,e.exports=i,i.prototype.clone=function(){return new i(this.points.slice())},i.prototype.contains=function(t,e){for(var r=!1,i=this.points.length/2,n=0,o=i-1;i>n;o=n++){var s=this.points[2*n],a=this.points[2*n+1],h=this.points[2*o],u=this.points[2*o+1],l=a>e!=u>e&&(h-s)*(e-a)/(u-a)+s>t;l&&(r=!r)}return r}},{"../../const":38,"../Point":47}],52:[function(t,e,r){function i(t,e,r,i){this.x=t||0,this.y=e||0,this.width=r||0,this.height=i||0,this.type=n.SHAPES.RECT}var n=t("../../const");i.prototype.constructor=i,e.exports=i,i.EMPTY=new i(0,0,0,0),i.prototype.clone=function(){return new i(this.x,this.y,this.width,this.height)},i.prototype.contains=function(t,e){return this.width<=0||this.height<=0?!1:t>=this.x&&t=this.y&&e=this.x&&t<=this.x+this.width&&e>=this.y&&e<=this.y+this.height?!0:!1}},{"../../const":38}],54:[function(t,e,r){function i(t,e,r){n.call(this),r=r||15e3,t=t||15e3;var i=16384;r>i&&(r=i),r>t&&(r=t),this._properties=[!1,!0,!1,!1,!1],this._maxSize=t,this._batchSize=r,this._buffers=null,this._bufferToUpdate=0,this.interactiveChildren=!1,this.blendMode=o.BLEND_MODES.NORMAL,this.roundPixels=!0,this.setProperties(e)}var n=t("../display/Container"),o=t("../const");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.setProperties=function(t){t&&(this._properties[0]="scale"in t?!!t.scale:this._properties[0],this._properties[1]="position"in t?!!t.position:this._properties[1],this._properties[2]="rotation"in t?!!t.rotation:this._properties[2],this._properties[3]="uvs"in t?!!t.uvs:this._properties[3],this._properties[4]="alpha"in t?!!t.alpha:this._properties[4])},i.prototype.updateTransform=function(){this.displayObjectUpdateTransform()},i.prototype.renderWebGL=function(t){this.visible&&!(this.worldAlpha<=0)&&this.children.length&&this.renderable&&(t.setObjectRenderer(t.plugins.particle),t.plugins.particle.render(this))},i.prototype.onChildrenChange=function(t){var e=Math.floor(t/this._batchSize);er;r+=6,i+=4)this.indices[r+0]=i+0,this.indices[r+1]=i+1,this.indices[r+2]=i+2,this.indices[r+3]=i+0,this.indices[r+4]=i+2,this.indices[r+5]=i+3;this.shader=null,this.indexBuffer=null,this.properties=null,this.tempMatrix=new h.Matrix}var n=t("../../renderers/webgl/utils/ObjectRenderer"),o=t("../../renderers/webgl/WebGLRenderer"),s=t("./ParticleShader"),a=t("./ParticleBuffer"),h=t("../../math");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,o.registerPlugin("particle",i),i.prototype.onContextChange=function(){var t=this.renderer.gl;this.shader=new s(this.renderer.shaderManager),this.indexBuffer=t.createBuffer(),t.bindBuffer(t.ELEMENT_ARRAY_BUFFER,this.indexBuffer),t.bufferData(t.ELEMENT_ARRAY_BUFFER,this.indices,t.STATIC_DRAW),this.properties=[{attribute:this.shader.attributes.aVertexPosition,size:2,uploadFunction:this.uploadVertices,offset:0},{attribute:this.shader.attributes.aPositionCoord,size:2,uploadFunction:this.uploadPosition,offset:0},{attribute:this.shader.attributes.aRotation,size:1,uploadFunction:this.uploadRotation,offset:0},{attribute:this.shader.attributes.aTextureCoord,size:2,uploadFunction:this.uploadUvs,offset:0},{attribute:this.shader.attributes.aColor,size:1,uploadFunction:this.uploadAlpha,offset:0}]},i.prototype.start=function(){var t=this.renderer.gl;t.activeTexture(t.TEXTURE0),t.bindBuffer(t.ELEMENT_ARRAY_BUFFER,this.indexBuffer);var e=this.shader;this.renderer.shaderManager.setShader(e)},i.prototype.render=function(t){var e=t.children,r=e.length,i=t._maxSize,n=t._batchSize;if(0!==r){r>i&&(r=i),t._buffers||(t._buffers=this.generateBuffers(t)),this.renderer.blendModeManager.setBlendMode(t.blendMode);var o=this.renderer.gl,s=t.worldTransform.copy(this.tempMatrix);s.prepend(this.renderer.currentRenderTarget.projectionMatrix),o.uniformMatrix3fv(this.shader.uniforms.projectionMatrix._location,!1,s.toArray(!0)),o.uniform1f(this.shader.uniforms.uAlpha._location,t.worldAlpha);var a=e[0]._texture.baseTexture;if(a._glTextures[o.id])o.bindTexture(o.TEXTURE_2D,a._glTextures[o.id]);else{if(!this.renderer.updateTexture(a))return;t._properties[0]&&t._properties[3]||(t._bufferToUpdate=0)}for(var h=0,u=0;r>h;h+=n,u+=1){var l=r-h;l>n&&(l=n);var c=t._buffers[u];c.uploadDynamic(e,h,l),t._bufferToUpdate===u&&(c.uploadStatic(e,h,l),t._bufferToUpdate=u+1),c.bind(this.shader),o.drawElements(o.TRIANGLES,6*l,o.UNSIGNED_SHORT,0),this.renderer.drawCount++}}},i.prototype.generateBuffers=function(t){var e,r=this.renderer.gl,i=[],n=t._maxSize,o=t._batchSize,s=t._properties;for(e=0;n>e;e+=o)i.push(new a(r,this.properties,s,o));return i},i.prototype.uploadVertices=function(t,e,r,i,n,o){for(var s,a,h,u,l,c,p,d,f,v=0;r>v;v++)s=t[e+v],a=s._texture,u=s.scale.x,l=s.scale.y,a.trim?(h=a.trim,p=h.x-s.anchor.x*h.width,c=p+a.crop.width,f=h.y-s.anchor.y*h.height,d=f+a.crop.height):(c=a._frame.width*(1-s.anchor.x),p=a._frame.width*-s.anchor.x,d=a._frame.height*(1-s.anchor.y),f=a._frame.height*-s.anchor.y),i[o]=p*u,i[o+1]=f*l,i[o+n]=c*u,i[o+n+1]=f*l,i[o+2*n]=c*u,i[o+2*n+1]=d*l,i[o+3*n]=p*u,i[o+3*n+1]=d*l,o+=4*n},i.prototype.uploadPosition=function(t,e,r,i,n,o){for(var s=0;r>s;s++){var a=t[e+s].position;i[o]=a.x,i[o+1]=a.y,i[o+n]=a.x,i[o+n+1]=a.y,i[o+2*n]=a.x,i[o+2*n+1]=a.y,i[o+3*n]=a.x,i[o+3*n+1]=a.y,o+=4*n}},i.prototype.uploadRotation=function(t,e,r,i,n,o){for(var s=0;r>s;s++){var a=t[e+s].rotation;i[o]=a,i[o+n]=a,i[o+2*n]=a,i[o+3*n]=a,o+=4*n}},i.prototype.uploadUvs=function(t,e,r,i,n,o){for(var s=0;r>s;s++){var a=t[e+s]._texture._uvs;a?(i[o]=a.x0,i[o+1]=a.y0,i[o+n]=a.x1,i[o+n+1]=a.y1,i[o+2*n]=a.x2,i[o+2*n+1]=a.y2,i[o+3*n]=a.x3,i[o+3*n+1]=a.y3,o+=4*n):(i[o]=0,i[o+1]=0,i[o+n]=0,i[o+n+1]=0,i[o+2*n]=0,i[o+2*n+1]=0,i[o+3*n]=0,i[o+3*n+1]=0,o+=4*n)}},i.prototype.uploadAlpha=function(t,e,r,i,n,o){for(var s=0;r>s;s++){var a=t[e+s].alpha;i[o]=a,i[o+n]=a,i[o+2*n]=a,i[o+3*n]=a,o+=4*n}},i.prototype.destroy=function(){this.renderer.gl&&this.renderer.gl.deleteBuffer(this.indexBuffer),n.prototype.destroy.apply(this,arguments),this.shader.destroy(),this.indices=null,this.tempMatrix=null}},{"../../math":48,"../../renderers/webgl/WebGLRenderer":65,"../../renderers/webgl/utils/ObjectRenderer":80,"./ParticleBuffer":55,"./ParticleShader":57}],57:[function(t,e,r){function i(t){n.call(this,t,["attribute vec2 aVertexPosition;","attribute vec2 aTextureCoord;","attribute float aColor;","attribute vec2 aPositionCoord;","attribute vec2 aScale;","attribute float aRotation;","uniform mat3 projectionMatrix;","varying vec2 vTextureCoord;","varying float vColor;","void main(void){"," vec2 v = aVertexPosition;"," v.x = (aVertexPosition.x) * cos(aRotation) - (aVertexPosition.y) * sin(aRotation);"," v.y = (aVertexPosition.x) * sin(aRotation) + (aVertexPosition.y) * cos(aRotation);"," v = v + aPositionCoord;"," gl_Position = vec4((projectionMatrix * vec3(v, 1.0)).xy, 0.0, 1.0);"," vTextureCoord = aTextureCoord;"," vColor = aColor;","}"].join("\n"),["precision lowp float;","varying vec2 vTextureCoord;","varying float vColor;","uniform sampler2D uSampler;","uniform float uAlpha;","void main(void){"," vec4 color = texture2D(uSampler, vTextureCoord) * vColor * uAlpha;"," if (color.a == 0.0) discard;"," gl_FragColor = color;","}"].join("\n"),{uAlpha:{type:"1f",value:1}},{aPositionCoord:0,aRotation:0})}var n=t("../../renderers/webgl/shaders/TextureShader");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i},{"../../renderers/webgl/shaders/TextureShader":78}],58:[function(t,e,r){function i(t,e,r,i){if(a.call(this),n.sayHello(t),i)for(var h in s.DEFAULT_RENDER_OPTIONS)"undefined"==typeof i[h]&&(i[h]=s.DEFAULT_RENDER_OPTIONS[h]);else i=s.DEFAULT_RENDER_OPTIONS;this.type=s.RENDERER_TYPE.UNKNOWN,this.width=e||800,this.height=r||600,this.view=i.view||document.createElement("canvas"),this.resolution=i.resolution,this.transparent=i.transparent,this.autoResize=i.autoResize||!1,this.blendModes=null,this.preserveDrawingBuffer=i.preserveDrawingBuffer,this.clearBeforeRender=i.clearBeforeRender,this.roundPixels=i.roundPixels,this._backgroundColor=0,this._backgroundColorRgba=[0,0,0,0],this._backgroundColorString="#000000",this.backgroundColor=i.backgroundColor||this._backgroundColor,this._tempDisplayObjectParent={worldTransform:new o.Matrix,worldAlpha:1,children:[]},this._lastObjectRendered=this._tempDisplayObjectParent}var n=t("../utils"),o=t("../math"),s=t("../const"),a=t("eventemitter3");i.prototype=Object.create(a.prototype),i.prototype.constructor=i,e.exports=i,Object.defineProperties(i.prototype,{backgroundColor:{get:function(){return this._backgroundColor},set:function(t){this._backgroundColor=t,this._backgroundColorString=n.hex2string(t),n.hex2rgb(t,this._backgroundColorRgba)}}}),i.prototype.resize=function(t,e){this.width=t*this.resolution,this.height=e*this.resolution,this.view.width=this.width,this.view.height=this.height,this.autoResize&&(this.view.style.width=this.width/this.resolution+"px",this.view.style.height=this.height/this.resolution+"px")},i.prototype.destroy=function(t){t&&this.view.parentNode&&this.view.parentNode.removeChild(this.view),this.type=s.RENDERER_TYPE.UNKNOWN,this.width=0,this.height=0,this.view=null,this.resolution=0,this.transparent=!1,this.autoResize=!1,this.blendModes=null,this.preserveDrawingBuffer=!1,this.clearBeforeRender=!1,this.roundPixels=!1,this._backgroundColor=0, -this._backgroundColorRgba=null,this._backgroundColorString=null}},{"../const":38,"../math":48,"../utils":98,eventemitter3:25}],59:[function(t,e,r){function i(t,e,r){r=r||{},n.call(this,"Canvas",t,e,r),this.type=h.RENDERER_TYPE.CANVAS,this.context=this.view.getContext("2d",{alpha:this.transparent}),this.refresh=!0,this.maskManager=new o,this.smoothProperty="imageSmoothingEnabled",this.context.imageSmoothingEnabled||(this.context.webkitImageSmoothingEnabled?this.smoothProperty="webkitImageSmoothingEnabled":this.context.mozImageSmoothingEnabled?this.smoothProperty="mozImageSmoothingEnabled":this.context.oImageSmoothingEnabled?this.smoothProperty="oImageSmoothingEnabled":this.context.msImageSmoothingEnabled&&(this.smoothProperty="msImageSmoothingEnabled")),this.initPlugins(),this._mapBlendModes(),this._tempDisplayObjectParent={worldTransform:new a.Matrix,worldAlpha:1},this.resize(t,e)}var n=t("../SystemRenderer"),o=t("./utils/CanvasMaskManager"),s=t("../../utils"),a=t("../../math"),h=t("../../const");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,s.pluginTarget.mixin(i),i.prototype.render=function(t){this.emit("prerender");var e=t.parent;this._lastObjectRendered=t,t.parent=this._tempDisplayObjectParent,t.updateTransform(),t.parent=e,this.context.setTransform(1,0,0,1,0,0),this.context.globalAlpha=1,this.context.globalCompositeOperation=this.blendModes[h.BLEND_MODES.NORMAL],navigator.isCocoonJS&&this.view.screencanvas&&(this.context.fillStyle="black",this.context.clear()),this.clearBeforeRender&&(this.transparent?this.context.clearRect(0,0,this.width,this.height):(this.context.fillStyle=this._backgroundColorString,this.context.fillRect(0,0,this.width,this.height))),this.renderDisplayObject(t,this.context),this.emit("postrender")},i.prototype.destroy=function(t){this.destroyPlugins(),n.prototype.destroy.call(this,t),this.context=null,this.refresh=!0,this.maskManager.destroy(),this.maskManager=null,this.smoothProperty=null},i.prototype.renderDisplayObject=function(t,e){var r=this.context;this.context=e,t.renderCanvas(this),this.context=r},i.prototype.resize=function(t,e){n.prototype.resize.call(this,t,e),this.smoothProperty&&(this.context[this.smoothProperty]=h.SCALE_MODES.DEFAULT===h.SCALE_MODES.LINEAR)},i.prototype._mapBlendModes=function(){this.blendModes||(this.blendModes={},s.canUseNewCanvasBlendModes()?(this.blendModes[h.BLEND_MODES.NORMAL]="source-over",this.blendModes[h.BLEND_MODES.ADD]="lighter",this.blendModes[h.BLEND_MODES.MULTIPLY]="multiply",this.blendModes[h.BLEND_MODES.SCREEN]="screen",this.blendModes[h.BLEND_MODES.OVERLAY]="overlay",this.blendModes[h.BLEND_MODES.DARKEN]="darken",this.blendModes[h.BLEND_MODES.LIGHTEN]="lighten",this.blendModes[h.BLEND_MODES.COLOR_DODGE]="color-dodge",this.blendModes[h.BLEND_MODES.COLOR_BURN]="color-burn",this.blendModes[h.BLEND_MODES.HARD_LIGHT]="hard-light",this.blendModes[h.BLEND_MODES.SOFT_LIGHT]="soft-light",this.blendModes[h.BLEND_MODES.DIFFERENCE]="difference",this.blendModes[h.BLEND_MODES.EXCLUSION]="exclusion",this.blendModes[h.BLEND_MODES.HUE]="hue",this.blendModes[h.BLEND_MODES.SATURATION]="saturate",this.blendModes[h.BLEND_MODES.COLOR]="color",this.blendModes[h.BLEND_MODES.LUMINOSITY]="luminosity"):(this.blendModes[h.BLEND_MODES.NORMAL]="source-over",this.blendModes[h.BLEND_MODES.ADD]="lighter",this.blendModes[h.BLEND_MODES.MULTIPLY]="source-over",this.blendModes[h.BLEND_MODES.SCREEN]="source-over",this.blendModes[h.BLEND_MODES.OVERLAY]="source-over",this.blendModes[h.BLEND_MODES.DARKEN]="source-over",this.blendModes[h.BLEND_MODES.LIGHTEN]="source-over",this.blendModes[h.BLEND_MODES.COLOR_DODGE]="source-over",this.blendModes[h.BLEND_MODES.COLOR_BURN]="source-over",this.blendModes[h.BLEND_MODES.HARD_LIGHT]="source-over",this.blendModes[h.BLEND_MODES.SOFT_LIGHT]="source-over",this.blendModes[h.BLEND_MODES.DIFFERENCE]="source-over",this.blendModes[h.BLEND_MODES.EXCLUSION]="source-over",this.blendModes[h.BLEND_MODES.HUE]="source-over",this.blendModes[h.BLEND_MODES.SATURATION]="source-over",this.blendModes[h.BLEND_MODES.COLOR]="source-over",this.blendModes[h.BLEND_MODES.LUMINOSITY]="source-over"))}},{"../../const":38,"../../math":48,"../../utils":98,"../SystemRenderer":58,"./utils/CanvasMaskManager":62}],60:[function(t,e,r){function i(t,e){this.canvas=document.createElement("canvas"),this.context=this.canvas.getContext("2d"),this.canvas.width=t,this.canvas.height=e}i.prototype.constructor=i,e.exports=i,Object.defineProperties(i.prototype,{width:{get:function(){return this.canvas.width},set:function(t){this.canvas.width=t}},height:{get:function(){return this.canvas.height},set:function(t){this.canvas.height=t}}}),i.prototype.clear=function(){this.context.setTransform(1,0,0,1,0,0),this.context.clearRect(0,0,this.canvas.width,this.canvas.height)},i.prototype.resize=function(t,e){this.canvas.width=t,this.canvas.height=e},i.prototype.destroy=function(){this.context=null,this.canvas=null}},{}],61:[function(t,e,r){var i=t("../../../const"),n={};e.exports=n,n.renderGraphics=function(t,e){var r=t.worldAlpha;t.dirty&&(this.updateGraphicsTint(t),t.dirty=!1);for(var n=0;nA?A:C,e.beginPath(),e.moveTo(T,E+C),e.lineTo(T,E+w-C),e.quadraticCurveTo(T,E+w,T+C,E+w),e.lineTo(T+S-C,E+w),e.quadraticCurveTo(T+S,E+w,T+S,E+w-C),e.lineTo(T+S,E+C),e.quadraticCurveTo(T+S,E,T+S-C,E),e.lineTo(T+C,E),e.quadraticCurveTo(T,E,T,E+C),e.closePath(),(o.fillColor||0===o.fillColor)&&(e.globalAlpha=o.fillAlpha*r,e.fillStyle="#"+("00000"+(0|a).toString(16)).substr(-6),e.fill()),o.lineWidth&&(e.globalAlpha=o.lineAlpha*r,e.strokeStyle="#"+("00000"+(0|h).toString(16)).substr(-6),e.stroke())}}},n.renderGraphicsMask=function(t,e){var r=t.graphicsData.length;if(0!==r){e.beginPath();for(var n=0;r>n;n++){var o=t.graphicsData[n],s=o.shape;if(o.type===i.SHAPES.POLY){var a=s.points;e.moveTo(a[0],a[1]);for(var h=1;hw?w:S,e.moveTo(b,_+S),e.lineTo(b,_+E-S),e.quadraticCurveTo(b,_+E,b+S,_+E),e.lineTo(b+T-S,_+E),e.quadraticCurveTo(b+T,_+E,b+T,_+E-S),e.lineTo(b+T,_+S),e.quadraticCurveTo(b+T,_,b+T-S,_),e.lineTo(b+S,_),e.quadraticCurveTo(b,_,b,_+S),e.closePath()}}}},n.updateGraphicsTint=function(t){if(16777215!==t.tint||t._prevTint!==t.tint){t._prevTint=t.tint;for(var e=(t.tint>>16&255)/255,r=(t.tint>>8&255)/255,i=(255&t.tint)/255,n=0;n>16&255)/255*e*255<<16)+((s>>8&255)/255*r*255<<8)+(255&s)/255*i*255,o._lineTint=((a>>16&255)/255*e*255<<16)+((a>>8&255)/255*r*255<<8)+(255&a)/255*i*255}}}},{"../../../const":38}],62:[function(t,e,r){function i(){}var n=t("./CanvasGraphics");i.prototype.constructor=i,e.exports=i,i.prototype.pushMask=function(t,e){e.context.save();var r=t.alpha,i=t.worldTransform,o=e.resolution;e.context.setTransform(i.a*o,i.b*o,i.c*o,i.d*o,i.tx*o,i.ty*o),t.texture||(n.renderGraphicsMask(t,e.context),e.context.clip()),t.worldAlpha=r},i.prototype.popMask=function(t){t.context.restore()},i.prototype.destroy=function(){}},{"./CanvasGraphics":61}],63:[function(t,e,r){var i=t("../../../utils"),n={};e.exports=n,n.getTintedTexture=function(t,e){var r=t.texture;e=n.roundColor(e);var i="#"+("00000"+(0|e).toString(16)).substr(-6);if(r.tintCache=r.tintCache||{},r.tintCache[i])return r.tintCache[i];var o=n.canvas||document.createElement("canvas");if(n.tintMethod(r,e,o),n.convertTintToImage){var s=new Image;s.src=o.toDataURL(),r.tintCache[i]=s}else r.tintCache[i]=o,n.canvas=null;return o},n.tintWithMultiply=function(t,e,r){var i=r.getContext("2d"),n=t.baseTexture.resolution,o=t.crop.clone();o.x*=n,o.y*=n,o.width*=n,o.height*=n,r.width=o.width,r.height=o.height,i.fillStyle="#"+("00000"+(0|e).toString(16)).substr(-6),i.fillRect(0,0,o.width,o.height),i.globalCompositeOperation="multiply",i.drawImage(t.baseTexture.source,o.x,o.y,o.width,o.height,0,0,o.width,o.height),i.globalCompositeOperation="destination-atop",i.drawImage(t.baseTexture.source,o.x,o.y,o.width,o.height,0,0,o.width,o.height)},n.tintWithOverlay=function(t,e,r){var i=r.getContext("2d"),n=t.baseTexture.resolution,o=t.crop.clone();o.x*=n,o.y*=n,o.width*=n,o.height*=n,r.width=o.width,r.height=o.height,i.globalCompositeOperation="copy",i.fillStyle="#"+("00000"+(0|e).toString(16)).substr(-6),i.fillRect(0,0,o.width,o.height),i.globalCompositeOperation="destination-atop",i.drawImage(t.baseTexture.source,o.x,o.y,o.width,o.height,0,0,o.width,o.height)},n.tintWithPerPixel=function(t,e,r){var n=r.getContext("2d"),o=t.baseTexture.resolution,s=t.crop.clone();s.x*=o,s.y*=o,s.width*=o,s.height*=o,r.width=s.width,r.height=s.height,n.globalCompositeOperation="copy",n.drawImage(t.baseTexture.source,s.x,s.y,s.width,s.height,0,0,s.width,s.height);for(var a=i.hex2rgb(e),h=a[0],u=a[1],l=a[2],c=n.getImageData(0,0,s.width,s.height),p=c.data,d=0;de;++e)this.shaders[e].syncUniform(t)}},{"../shaders/TextureShader":78}],67:[function(t,e,r){function i(){n.call(this,"\nprecision mediump float;\n\nattribute vec2 aVertexPosition;\nattribute vec2 aTextureCoord;\nattribute vec4 aColor;\n\nuniform mat3 projectionMatrix;\nuniform vec2 resolution;\n\nvarying vec2 vTextureCoord;\nvarying vec4 vColor;\n\nvarying vec2 vResolution;\n\n//texcoords computed in vertex step\n//to avoid dependent texture reads\nvarying vec2 v_rgbNW;\nvarying vec2 v_rgbNE;\nvarying vec2 v_rgbSW;\nvarying vec2 v_rgbSE;\nvarying vec2 v_rgbM;\n\n\nvoid texcoords(vec2 fragCoord, vec2 resolution,\n out vec2 v_rgbNW, out vec2 v_rgbNE,\n out vec2 v_rgbSW, out vec2 v_rgbSE,\n out vec2 v_rgbM) {\n vec2 inverseVP = 1.0 / resolution.xy;\n v_rgbNW = (fragCoord + vec2(-1.0, -1.0)) * inverseVP;\n v_rgbNE = (fragCoord + vec2(1.0, -1.0)) * inverseVP;\n v_rgbSW = (fragCoord + vec2(-1.0, 1.0)) * inverseVP;\n v_rgbSE = (fragCoord + vec2(1.0, 1.0)) * inverseVP;\n v_rgbM = vec2(fragCoord * inverseVP);\n}\n\nvoid main(void){\n gl_Position = vec4((projectionMatrix * vec3(aVertexPosition, 1.0)).xy, 0.0, 1.0);\n vTextureCoord = aTextureCoord;\n vColor = vec4(aColor.rgb * aColor.a, aColor.a);\n vResolution = resolution;\n\n //compute the texture coords and send them to varyings\n texcoords(aTextureCoord * resolution, resolution, v_rgbNW, v_rgbNE, v_rgbSW, v_rgbSE, v_rgbM);\n}\n",'precision lowp float;\n\n\n/**\nBasic FXAA implementation based on the code on geeks3d.com with the\nmodification that the texture2DLod stuff was removed since it\'s\nunsupported by WebGL.\n\n--\n\nFrom:\nhttps://github.com/mitsuhiko/webgl-meincraft\n\nCopyright (c) 2011 by Armin Ronacher.\n\nSome rights reserved.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are\nmet:\n\n * Redistributions of source code must retain the above copyright\n notice, this list of conditions and the following disclaimer.\n\n * Redistributions in binary form must reproduce the above\n copyright notice, this list of conditions and the following\n disclaimer in the documentation and/or other materials provided\n with the distribution.\n\n * The names of the contributors may not be used to endorse or\n promote products derived from this software without specific\n prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\nLIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\nA PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\nOWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\nSPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\nLIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\nDATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\nTHEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\nOF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n*/\n\n#ifndef FXAA_REDUCE_MIN\n #define FXAA_REDUCE_MIN (1.0/ 128.0)\n#endif\n#ifndef FXAA_REDUCE_MUL\n #define FXAA_REDUCE_MUL (1.0 / 8.0)\n#endif\n#ifndef FXAA_SPAN_MAX\n #define FXAA_SPAN_MAX 8.0\n#endif\n\n//optimized version for mobile, where dependent\n//texture reads can be a bottleneck\nvec4 fxaa(sampler2D tex, vec2 fragCoord, vec2 resolution,\n vec2 v_rgbNW, vec2 v_rgbNE,\n vec2 v_rgbSW, vec2 v_rgbSE,\n vec2 v_rgbM) {\n vec4 color;\n mediump vec2 inverseVP = vec2(1.0 / resolution.x, 1.0 / resolution.y);\n vec3 rgbNW = texture2D(tex, v_rgbNW).xyz;\n vec3 rgbNE = texture2D(tex, v_rgbNE).xyz;\n vec3 rgbSW = texture2D(tex, v_rgbSW).xyz;\n vec3 rgbSE = texture2D(tex, v_rgbSE).xyz;\n vec4 texColor = texture2D(tex, v_rgbM);\n vec3 rgbM = texColor.xyz;\n vec3 luma = vec3(0.299, 0.587, 0.114);\n float lumaNW = dot(rgbNW, luma);\n float lumaNE = dot(rgbNE, luma);\n float lumaSW = dot(rgbSW, luma);\n float lumaSE = dot(rgbSE, luma);\n float lumaM = dot(rgbM, luma);\n float lumaMin = min(lumaM, min(min(lumaNW, lumaNE), min(lumaSW, lumaSE)));\n float lumaMax = max(lumaM, max(max(lumaNW, lumaNE), max(lumaSW, lumaSE)));\n\n mediump vec2 dir;\n dir.x = -((lumaNW + lumaNE) - (lumaSW + lumaSE));\n dir.y = ((lumaNW + lumaSW) - (lumaNE + lumaSE));\n\n float dirReduce = max((lumaNW + lumaNE + lumaSW + lumaSE) *\n (0.25 * FXAA_REDUCE_MUL), FXAA_REDUCE_MIN);\n\n float rcpDirMin = 1.0 / (min(abs(dir.x), abs(dir.y)) + dirReduce);\n dir = min(vec2(FXAA_SPAN_MAX, FXAA_SPAN_MAX),\n max(vec2(-FXAA_SPAN_MAX, -FXAA_SPAN_MAX),\n dir * rcpDirMin)) * inverseVP;\n\n vec3 rgbA = 0.5 * (\n texture2D(tex, fragCoord * inverseVP + dir * (1.0 / 3.0 - 0.5)).xyz +\n texture2D(tex, fragCoord * inverseVP + dir * (2.0 / 3.0 - 0.5)).xyz);\n vec3 rgbB = rgbA * 0.5 + 0.25 * (\n texture2D(tex, fragCoord * inverseVP + dir * -0.5).xyz +\n texture2D(tex, fragCoord * inverseVP + dir * 0.5).xyz);\n\n float lumaB = dot(rgbB, luma);\n if ((lumaB < lumaMin) || (lumaB > lumaMax))\n color = vec4(rgbA, texColor.a);\n else\n color = vec4(rgbB, texColor.a);\n return color;\n}\n\n\nvarying vec2 vTextureCoord;\nvarying vec4 vColor;\nvarying vec2 vResolution;\n\n//texcoords computed in vertex step\n//to avoid dependent texture reads\nvarying vec2 v_rgbNW;\nvarying vec2 v_rgbNE;\nvarying vec2 v_rgbSW;\nvarying vec2 v_rgbSE;\nvarying vec2 v_rgbM;\n\nuniform sampler2D uSampler;\n\n\nvoid main(void){\n\n gl_FragColor = fxaa(uSampler, vTextureCoord * vResolution, vResolution, v_rgbNW, v_rgbNE, v_rgbSW, v_rgbSE, v_rgbM);\n\n}\n',{resolution:{type:"v2",value:{x:1,y:1}}})}var n=t("./AbstractFilter");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.applyFilter=function(t,e,r){var i=t.filterManager,n=this.getShader(t);i.applyFilter(n,e,r)}},{"./AbstractFilter":66}],68:[function(t,e,r){function i(t){var e=new o.Matrix;n.call(this,"attribute vec2 aVertexPosition;\nattribute vec2 aTextureCoord;\nattribute vec4 aColor;\n\nuniform mat3 projectionMatrix;\nuniform mat3 otherMatrix;\n\nvarying vec2 vMaskCoord;\nvarying vec2 vTextureCoord;\nvarying vec4 vColor;\n\nvoid main(void)\n{\n gl_Position = vec4((projectionMatrix * vec3(aVertexPosition, 1.0)).xy, 0.0, 1.0);\n vTextureCoord = aTextureCoord;\n vMaskCoord = ( otherMatrix * vec3( aTextureCoord, 1.0) ).xy;\n vColor = vec4(aColor.rgb * aColor.a, aColor.a);\n}\n","precision lowp float;\n\nvarying vec2 vMaskCoord;\nvarying vec2 vTextureCoord;\nvarying vec4 vColor;\n\nuniform sampler2D uSampler;\nuniform float alpha;\nuniform sampler2D mask;\n\nvoid main(void)\n{\n // check clip! this will stop the mask bleeding out from the edges\n vec2 text = abs( vMaskCoord - 0.5 );\n text = step(0.5, text);\n float clip = 1.0 - max(text.y, text.x);\n vec4 original = texture2D(uSampler, vTextureCoord);\n vec4 masky = texture2D(mask, vMaskCoord);\n original *= (masky.r * masky.a * alpha * clip);\n gl_FragColor = original;\n}\n",{mask:{type:"sampler2D",value:t._texture},alpha:{type:"f",value:1},otherMatrix:{type:"mat3",value:e.toArray(!0)}}),this.maskSprite=t,this.maskMatrix=e}var n=t("./AbstractFilter"),o=t("../../../math");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.applyFilter=function(t,e,r){var i=t.filterManager;this.uniforms.mask.value=this.maskSprite._texture,i.calculateMappedMatrix(e.frame,this.maskSprite,this.maskMatrix),this.uniforms.otherMatrix.value=this.maskMatrix.toArray(!0),this.uniforms.alpha.value=this.maskSprite.worldAlpha;var n=this.getShader(t);i.applyFilter(n,e,r)},Object.defineProperties(i.prototype,{map:{get:function(){return this.uniforms.mask.value},set:function(t){this.uniforms.mask.value=t}},offset:{get:function(){return this.uniforms.offset.value},set:function(t){this.uniforms.offset.value=t}}})},{"../../../math":48,"./AbstractFilter":66}],69:[function(t,e,r){function i(t){n.call(this,t),this.currentBlendMode=99999}var n=t("./WebGLManager");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.setBlendMode=function(t){if(this.currentBlendMode===t)return!1;this.currentBlendMode=t;var e=this.renderer.blendModes[this.currentBlendMode];return this.renderer.gl.blendFunc(e[0],e[1]),!0}},{"./WebGLManager":74}],70:[function(t,e,r){function i(t){n.call(this,t),this.filterStack=[],this.filterStack.push({renderTarget:t.currentRenderTarget,filter:[],bounds:null}),this.texturePool=[],this.textureSize=new h.Rectangle(0,0,t.width,t.height),this.currentFrame=null}var n=t("./WebGLManager"),o=t("../utils/RenderTarget"),s=t("../../../const"),a=t("../utils/Quad"),h=t("../../../math");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.onContextChange=function(){this.texturePool.length=0;var t=this.renderer.gl;this.quad=new a(t)},i.prototype.setFilterStack=function(t){this.filterStack=t},i.prototype.pushFilter=function(t,e){var r=t.filterArea?t.filterArea.clone():t.getBounds();r.x=0|r.x,r.y=0|r.y,r.width=0|r.width,r.height=0|r.height;var i=0|e[0].padding;if(r.x-=i,r.y-=i,r.width+=2*i,r.height+=2*i,this.renderer.currentRenderTarget.transform){var n=this.renderer.currentRenderTarget.transform;r.x+=n.tx,r.y+=n.ty,this.capFilterArea(r),r.x-=n.tx,r.y-=n.ty}else this.capFilterArea(r);if(r.width>0&&r.height>0){this.currentFrame=r;var o=this.getRenderTarget();this.renderer.setRenderTarget(o),o.clear(),this.filterStack.push({renderTarget:o,filter:e})}else this.filterStack.push({renderTarget:null,filter:e})},i.prototype.popFilter=function(){var t=this.filterStack.pop(),e=this.filterStack[this.filterStack.length-1],r=t.renderTarget;if(t.renderTarget){var i=e.renderTarget,n=this.renderer.gl;this.currentFrame=r.frame,this.quad.map(this.textureSize,r.frame),n.bindBuffer(n.ARRAY_BUFFER,this.quad.vertexBuffer),n.bindBuffer(n.ELEMENT_ARRAY_BUFFER,this.quad.indexBuffer);var o=t.filter;if(n.vertexAttribPointer(this.renderer.shaderManager.defaultShader.attributes.aVertexPosition,2,n.FLOAT,!1,0,0),n.vertexAttribPointer(this.renderer.shaderManager.defaultShader.attributes.aTextureCoord,2,n.FLOAT,!1,0,32),n.vertexAttribPointer(this.renderer.shaderManager.defaultShader.attributes.aColor,4,n.FLOAT,!1,0,64),this.renderer.blendModeManager.setBlendMode(s.BLEND_MODES.NORMAL),1===o.length)o[0].uniforms.dimensions&&(o[0].uniforms.dimensions.value[0]=this.renderer.width,o[0].uniforms.dimensions.value[1]=this.renderer.height,o[0].uniforms.dimensions.value[2]=this.quad.vertices[0],o[0].uniforms.dimensions.value[3]=this.quad.vertices[5]),o[0].applyFilter(this.renderer,r,i),this.returnRenderTarget(r);else{for(var a=r,h=this.getRenderTarget(!0),u=0;uthis.textureSize.width&&(t.width=this.textureSize.width-t.x),t.y+t.height>this.textureSize.height&&(t.height=this.textureSize.height-t.y)},i.prototype.resize=function(t,e){this.textureSize.width=t,this.textureSize.height=e;for(var r=0;re;++e)t._array[2*e]=o[e].x,t._array[2*e+1]=o[e].y;s.uniform2fv(i,t._array);break;case"v3v":for(t._array||(t._array=new Float32Array(3*o.length)),e=0,r=o.length;r>e;++e)t._array[3*e]=o[e].x,t._array[3*e+1]=o[e].y,t._array[3*e+2]=o[e].z;s.uniform3fv(i,t._array);break;case"v4v":for(t._array||(t._array=new Float32Array(4*o.length)),e=0,r=o.length;r>e;++e)t._array[4*e]=o[e].x,t._array[4*e+1]=o[e].y,t._array[4*e+2]=o[e].z,t._array[4*e+3]=o[e].w;s.uniform4fv(i,t._array);break;case"t":case"sampler2D":if(!t.value||!t.value.baseTexture.hasLoaded)break;s.activeTexture(s["TEXTURE"+this.textureCount]);var a=t.value.baseTexture._glTextures[s.id];a||(this.initSampler2D(t),a=t.value.baseTexture._glTextures[s.id]),s.bindTexture(s.TEXTURE_2D,a),s.uniform1i(t._location,this.textureCount),this.textureCount++;break;default:console.warn("Pixi.js Shader Warning: Unknown uniform type: "+t.type)}},i.prototype.syncUniforms=function(){this.textureCount=1;for(var t in this.uniforms)this.syncUniform(this.uniforms[t])},i.prototype.initSampler2D=function(t){var e=this.gl,r=t.value.baseTexture;if(r.hasLoaded)if(t.textureData){var i=t.textureData;r._glTextures[e.id]=e.createTexture(),e.bindTexture(e.TEXTURE_2D,r._glTextures[e.id]),e.pixelStorei(e.UNPACK_PREMULTIPLY_ALPHA_WEBGL,r.premultipliedAlpha),e.texImage2D(e.TEXTURE_2D,0,i.luminance?e.LUMINANCE:e.RGBA,e.RGBA,e.UNSIGNED_BYTE,r.source),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MAG_FILTER,i.magFilter?i.magFilter:e.LINEAR),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MIN_FILTER,i.wrapS?i.wrapS:e.CLAMP_TO_EDGE),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,i.wrapS?i.wrapS:e.CLAMP_TO_EDGE),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,i.wrapT?i.wrapT:e.CLAMP_TO_EDGE)}else this.shaderManager.renderer.updateTexture(r)},i.prototype.destroy=function(){this.gl.deleteProgram(this.program),this.gl=null,this.uniforms=null,this.attributes=null,this.vertexSrc=null,this.fragmentSrc=null},i.prototype._glCompile=function(t,e){var r=this.gl.createShader(t);return this.gl.shaderSource(r,e),this.gl.compileShader(r),this.gl.getShaderParameter(r,this.gl.COMPILE_STATUS)?r:(console.log(this.gl.getShaderInfoLog(r)),null)}},{"../../../utils":98}],78:[function(t,e,r){function i(t,e,r,o,s){var a={uSampler:{type:"sampler2D",value:0},projectionMatrix:{type:"mat3",value:new Float32Array([1,0,0,0,1,0,0,0,1])}};if(o)for(var h in o)a[h]=o[h];var u={aVertexPosition:0,aTextureCoord:0,aColor:0};if(s)for(var l in s)u[l]=s[l];e=e||i.defaultVertexSrc,r=r||i.defaultFragmentSrc,n.call(this,t,e,r,a,u)}var n=t("./Shader");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.defaultVertexSrc=["precision lowp float;","attribute vec2 aVertexPosition;","attribute vec2 aTextureCoord;","attribute vec4 aColor;","uniform mat3 projectionMatrix;","varying vec2 vTextureCoord;","varying vec4 vColor;","void main(void){"," gl_Position = vec4((projectionMatrix * vec3(aVertexPosition, 1.0)).xy, 0.0, 1.0);"," vTextureCoord = aTextureCoord;"," vColor = vec4(aColor.rgb * aColor.a, aColor.a);","}"].join("\n"),i.defaultFragmentSrc=["precision lowp float;","varying vec2 vTextureCoord;","varying vec4 vColor;","uniform sampler2D uSampler;","void main(void){"," gl_FragColor = texture2D(uSampler, vTextureCoord) * vColor ;","}"].join("\n")},{"./Shader":77}],79:[function(t,e,r){function i(t){vertexSrc=i.defaultVertexSrc,fragmentSrc=i.defaultFragmentSrc,console.log(fragmentSrc),n.call(this,t,vertexSrc,fragmentSrc)}var n=t("pixi-gl-core").GLShader;i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.defaultVertexSrc=["precision lowp float;","attribute vec2 aVertexPosition;","attribute vec2 aTextureCoord;","attribute vec4 aColor;","uniform mat3 projectionMatrix;","varying vec2 vTextureCoord;","varying vec4 vColor;","void main(void){"," gl_Position = vec4((projectionMatrix * vec3(aVertexPosition, 1.0)).xy, 0.0, 1.0);"," vTextureCoord = aTextureCoord;"," vColor = vec4(aColor.rgb * aColor.a, aColor.a);","}"].join("\n"),i.defaultFragmentSrc=["precision lowp float;","varying vec2 vTextureCoord;","varying vec4 vColor;","uniform sampler2D uSampler;","void main(void){"," gl_FragColor = texture2D(uSampler, vTextureCoord) * vColor ;","}"].join("\n")},{"pixi-gl-core":1}],80:[function(t,e,r){function i(t){n.call(this,t)}var n=t("../managers/WebGLManager");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.start=function(){},i.prototype.stop=function(){this.flush()},i.prototype.flush=function(){},i.prototype.render=function(t){}},{"../managers/WebGLManager":74}],81:[function(t,e,r){function i(t){this.gl=t,this.vertices=new Float32Array([0,0,200,0,200,200,0,200]),this.uvs=new Float32Array([0,0,1,0,1,1,0,1]),this.colors=new Float32Array([1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]),this.indices=new Uint16Array([0,1,2,0,3,2]),this.vertexBuffer=t.createBuffer(),this.indexBuffer=t.createBuffer(),t.bindBuffer(t.ARRAY_BUFFER,this.vertexBuffer),t.bufferData(t.ARRAY_BUFFER,128,t.DYNAMIC_DRAW),t.bindBuffer(t.ELEMENT_ARRAY_BUFFER,this.indexBuffer),t.bufferData(t.ELEMENT_ARRAY_BUFFER,this.indices,t.STATIC_DRAW),this.upload()}i.prototype.constructor=i,i.prototype.map=function(t,e){var r=0,i=0;this.uvs[0]=r,this.uvs[1]=i,this.uvs[2]=r+e.width/t.width,this.uvs[3]=i,this.uvs[4]=r+e.width/t.width,this.uvs[5]=i+e.height/t.height,this.uvs[6]=r,this.uvs[7]=i+e.height/t.height,r=e.x,i=e.y,this.vertices[0]=r,this.vertices[1]=i,this.vertices[2]=r+e.width,this.vertices[3]=i,this.vertices[4]=r+e.width,this.vertices[5]=i+e.height,this.vertices[6]=r,this.vertices[7]=i+e.height,this.upload()},i.prototype.upload=function(){var t=this.gl;t.bindBuffer(t.ARRAY_BUFFER,this.vertexBuffer),t.bufferSubData(t.ARRAY_BUFFER,0,this.vertices),t.bufferSubData(t.ARRAY_BUFFER,32,this.uvs),t.bufferSubData(t.ARRAY_BUFFER,64,this.colors)},i.prototype.destroy=function(){var t=this.gl;t.deleteBuffer(this.vertexBuffer),t.deleteBuffer(this.indexBuffer)},e.exports=i},{}],82:[function(t,e,r){var i=t("../../../math"),n=(t("../../../utils"),t("../../../const")),o=t("pixi-gl-core").GLTexture,s=t("pixi-gl-core").GLFramebuffer,a=t("./StencilMaskStack"),h=function(t,e,r,h,u,l){if(this.gl=t,this.frameBuffer=null,this.texture=null,this.clearColor=[0,0,0,0],this.size=new i.Rectangle(0,0,1,1),this.resolution=u||n.RESOLUTION,this.projectionMatrix=new i.Matrix,this.transform=null,this.frame=null,this.stencilBuffer=null,this.stencilMaskStack=new a,this.filterStack=[{renderTarget:this,filter:[],bounds:this.size}],this.scaleMode=h||n.SCALE_MODES.DEFAULT,this.root=l,this.frameBuffer=new s.createRGBA(t,100,100),this.root)this.frameBuffer.framebuffer=null;else{var c=new o(t);c.enableLinearScaling(),c.enableWrapClamp(),this.frameBuffer.enableTexture(c),this.texture=c.texture}this.resize(e,r)};h.prototype.constructor=h,e.exports=h,h.prototype.clear=function(t){var e=t||this.clearColor;this.frameBuffer.clear(e[0],e[1],e[2],e[3])},h.prototype.attachStencilBuffer=function(){this.root||this.frameBuffer.enableStencil()},h.prototype.activate=function(){var t=this.gl;this.frameBuffer.bind();var e=this.frame||this.size;this.calculateProjection(e),this.transform&&this.projectionMatrix.append(this.transform),t.viewport(0,0,e.width*this.resolution,e.height*this.resolution)},h.prototype.calculateProjection=function(t){var e=this.projectionMatrix;e.identity(),this.root?(e.a=1/t.width*2,e.d=-1/t.height*2,e.tx=-1-t.x*e.a,e.ty=1-t.y*e.d):(e.a=1/t.width*2,e.d=1/t.height*2,e.tx=-1-t.x*e.a,e.ty=-1-t.y*e.d)},h.prototype.resize=function(t,e){if(t=0|t,e=0|e,this.size.width!==t||this.size.height!==e){this.size.width=t,this.size.height=e,this.frameBuffer.resize(t*this.resolution,e*this.resolution);var r=this.frame||this.size;this.calculateProjection(r)}},h.prototype.destroy=function(){this.gl;this.frameBuffer.destroy(),this.frameBuffer=null,this.texture=null}},{"../../../const":38,"../../../math":48,"../../../utils":98,"./StencilMaskStack":83,"pixi-gl-core":1}],83:[function(t,e,r){function i(){this.stencilStack=[],this.reverse=!0,this.count=0}i.prototype.constructor=i,e.exports=i},{}],84:[function(t,e,r){function i(t,e){return e=e||{},e[CONST.BLEND_MODES.NORMAL]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.ADD]=[t.SRC_ALPHA,t.DST_ALPHA],e[CONST.BLEND_MODES.MULTIPLY]=[t.DST_COLOR,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.SCREEN]=[t.SRC_ALPHA,t.ONE],e[CONST.BLEND_MODES.OVERLAY]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.DARKEN]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.LIGHTEN]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.COLOR_DODGE]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.COLOR_BURN]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.HARD_LIGHT]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.SOFT_LIGHT]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.DIFFERENCE]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.EXCLUSION]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.HUE]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.SATURATION]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.COLOR]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.LUMINOSITY]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e}CONST=t("../../../const"),e.exports=i},{"../../../const":38}],85:[function(t,e,r){function i(t,e){e=e||{},e[CONST.DRAW_MODES.POINTS]=t.POINTS,e[CONST.DRAW_MODES.LINES]=t.LINES,e[CONST.DRAW_MODES.LINE_LOOP]=t.LINE_LOOP,e[CONST.DRAW_MODES.LINE_STRIP]=t.LINE_STRIP,e[CONST.DRAW_MODES.TRIANGLES]=t.TRIANGLES,e[CONST.DRAW_MODES.TRIANGLE_STRIP]=t.TRIANGLE_STRIP,e[CONST.DRAW_MODES.TRIANGLE_FAN]=t.TRIANGLE_FAN}CONST=t("../../../const"),e.exports=i},{"../../../const":38}],86:[function(t,e,r){function i(t){s.call(this),this.anchor=new n.Point,this._texture=null,this._width=0,this._height=0,this.tint=16777215,this.blendMode=u.BLEND_MODES.NORMAL,this.shader=null,this.cachedTint=16777215,this.texture=t||o.EMPTY,this.textureDirty=!0,this.vertexDirty=!0,this.vertexData=new Float32Array(8)}var n=t("../math"),o=t("../textures/Texture"),s=t("../display/Container"),a=t("../renderers/canvas/utils/CanvasTinter"),h=t("../utils"),u=t("../const"),l=new n.Point;i.prototype=Object.create(s.prototype),i.prototype.constructor=i,e.exports=i,Object.defineProperties(i.prototype,{width:{get:function(){return Math.abs(this.scale.x)*this.texture._frame.width},set:function(t){var e=h.sign(this.scale.x)||1;this.scale.x=e*t/this.texture._frame.width,this._width=t}},height:{get:function(){return Math.abs(this.scale.y)*this.texture._frame.height},set:function(t){var e=h.sign(this.scale.y)||1;this.scale.y=e*t/this.texture._frame.height,this._height=t}},texture:{get:function(){return this._texture},set:function(t){this._texture!==t&&(this._texture=t,this.cachedTint=16777215,this.textureDirty=!0,t&&(t.baseTexture.hasLoaded?this._onTextureUpdate():t.once("update",this._onTextureUpdate,this)))}}}),i.prototype._onTextureUpdate=function(){this.textureDirty=!0,this._width&&(this.scale.x=h.sign(this.scale.x)*this._width/this.texture.frame.width),this._height&&(this.scale.y=h.sign(this.scale.y)*this._height/this.texture.frame.height)},i.prototype.caclulateVertices=function(){var t,e,r,i,n=this._texture,o=this.worldTransform,s=o.a,a=o.b,h=o.c,u=o.d,l=o.tx,c=o.ty,p=this.vertexData,d=n.trim;d?(e=d.x-this.anchor.x*d.width,t=e+n.crop.width,i=d.y-this.anchor.y*d.height,r=i+n.crop.height):(t=n._frame.width*(1-this.anchor.x),e=n._frame.width*-this.anchor.x,r=n._frame.height*(1-this.anchor.y),i=n._frame.height*-this.anchor.y),p[0]=s*e+h*i+l,p[1]=u*i+a*e+c,p[2]=s*t+h*i+l,p[3]=u*i+a*t+c,p[4]=s*t+h*r+l,p[5]=u*r+a*t+c,p[6]=s*e+h*r+l,p[7]=u*r+a*e+c},i.prototype._renderWebGL=function(t){this.textureDirty&&(this.textureDirty=!1,this._onTextureUpdate(),this.vertexDirty=!0),this.vertexDirty&&(this.vertexDirty=!1,this.caclulateVertices()),t.setObjectRenderer(t.plugins.sprite),t.plugins.sprite.render(this)},i.prototype.getBounds=function(t){if(!this._currentBounds){this.vertexDirty&&(this.vertexDirty=!1,this.caclulateVertices());var e,r,i,n,o=this.vertexData,s=o[0],a=o[1],h=o[2],u=o[3],l=o[4],c=o[5],p=o[6],d=o[7];if(e=s,e=e>h?h:e,e=e>l?l:e,e=e>p?p:e,i=a,i=i>u?u:i,i=i>c?c:i,i=i>d?d:i,r=s,r=h>r?h:r,r=l>r?l:r,r=p>r?p:r,n=a,n=u>n?u:n,n=c>n?c:n,n=d>n?d:n,this.children.length){var f=this.containerGetBounds();w0=f.x,w1=f.x+f.width,h0=f.y,h1=f.y+f.height,e=ew1?r:w1,n=n>h1?n:h1}var v=this._bounds;v.x=e,v.width=r-e,v.y=i,v.height=n-i,this._currentBounds=v}return this._currentBounds},i.prototype.getLocalBounds=function(){return this._bounds.x=-this._texture._frame.width*this.anchor.x,this._bounds.y=-this._texture._frame.height*this.anchor.y,this._bounds.width=this._texture._frame.width,this._bounds.height=this._texture._frame.height,this._bounds},i.prototype.containsPoint=function(t){this.worldTransform.applyInverse(t,l);var e,r=this._texture._frame.width,i=this._texture._frame.height,n=-r*this.anchor.x;return l.x>n&&l.xe&&l.yr;r++)this.groups[r]={textures:[],textureCount:0,ids:[],size:0,start:0,blend:0};this.currentGroup=this.groups[this.groupCount++],this.currentTexture=null}var n=t("../../renderers/webgl/utils/ObjectRenderer"),o=t("../../renderers/webgl/WebGLRenderer"),s=(t("../../renderers/webgl/shaders/_TextureShader"),t("../../utils/createIndicesForQuads")),a=t("./generateMultiTextureShader"),h=t("../../const"),u=t("pixi-gl-core"),l=2;i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,o.registerPlugin("sprite",i),i.prototype.onContextChange=function(){var t=this.renderer.gl;this._shader=a(t,l),this.shader=this.renderer.shaderManager.defaultShader,this.vertexBuffer=u.GLBuffer.createVertexBuffer(t,null,t.DYNAMIC_DRAW),this.indexBuffer=u.GLBuffer.createIndexBuffer(t,this.indices,t.STATIC_DRAW),this.vao=new u.VertexArrayObject(t),this.vao.addIndex(this.indexBuffer),this.vao.addAttribute(this.vertexBuffer,this._shader.attributes.aVertexPosition,t.FLOAT,!1,this.vertByteSize,0),this.vao.addAttribute(this.vertexBuffer,this._shader.attributes.aTextureCoord,t.UNSIGNED_SHORT,!0,this.vertByteSize,8),this.vao.addAttribute(this.vertexBuffer,this._shader.attributes.aColor,t.UNSIGNED_BYTE,!0,this.vertByteSize,12),this.vao.addAttribute(this.vertexBuffer,this._shader.attributes.aTextureId,t.FLOAT,!1,this.vertByteSize,16),this.currentBlendMode=99999},i.prototype.render=function(t){this.currentIndex>=this.size&&this.flush();var e=t.texture._uvs;if(e){var r=(this.groups,t.texture.baseTexture),i=this.currentGroup;if(this.currentTexture!==r&&(this.currentTexture=r,!r._enabled)){if(r._enabled=!0,r._id=this.textureCount,this.textureCount===l){for(var n=0;n>16)+(65280&t.tint)+((255&t.tint)<<16)+(255*t.worldAlpha<<24);a[o++]=h[0],a[o++]=h[1],this.uvs[o++]=e.uvs_uint32[0],s[o++]=u,a[o++]=r._id,a[o++]=h[2],a[o++]=h[3],this.uvs[o++]=e.uvs_uint32[1],s[o++]=u,a[o++]=r._id,a[o++]=h[4],a[o++]=h[5],this.uvs[o++]=e.uvs_uint32[2],s[o++]=u,a[o++]=r._id,a[o++]=h[6],a[o++]=h[7],this.uvs[o++]=e.uvs_uint32[3],s[o++]=u,a[o++]=r._id,this.sprites[this.currentBatchSize++]=t}},i.prototype.renderSprites=function(t){for(var e=0;e.5*this.size)this.vertexBuffer.upload(this.vertices,0,!0);else{var e=this.positions.subarray(0,this.currentIndex*this.vertByteSize);this.vertexBuffer.upload(e,0,!0)}for(this.renderer.bindShader(this._shader),this.renderer.blendModeManager.setBlendMode(0),t=0;tu;u++)h[u]=u;return a.bind(),a.uniforms.uSamplers=h,a}function n(t){var e="vec4 getSampleFromArray(sampler2D textures[%%], int ndx, vec2 uv) {\n\nvec4 color;";e+="\n", -e+="\n";for(var r=0;t>r;r++)r>0&&(e+="\nelse "),t-1>r&&(e+="if(ndx == "+r+")"),e+="\n{",e+="\n color = texture2D(textures["+r+"], uv);",e+="\n}";return e+="\n",e+="\n",e+="return color;",e+="\n}"}var o=t("pixi-gl-core").GLShader,s=["varying vec2 vTextureCoord;","varying vec4 vColor;","varying float vTextureId;","uniform sampler2D uSamplers[%%];","void main(void){","gl_FragColor = getSampleFromArray(uSamplers, int(vTextureId), vTextureCoord) * vColor;","}"].join("\n");e.exports=i},{"pixi-gl-core":1}],89:[function(t,e,r){function i(t,e,r){this.canvas=document.createElement("canvas"),this.context=this.canvas.getContext("2d"),this.resolution=r||h.RESOLUTION,this._text=null,this._style=null;var i=o.fromCanvas(this.canvas);i.trim=new s.Rectangle,n.call(this,i),this.text=t,this.style=e}var n=t("../sprites/Sprite"),o=t("../textures/Texture"),s=t("../math"),a=t("../utils"),h=t("../const");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.fontPropertiesCache={},i.fontPropertiesCanvas=document.createElement("canvas"),i.fontPropertiesContext=i.fontPropertiesCanvas.getContext("2d"),Object.defineProperties(i.prototype,{width:{get:function(){return this.dirty&&this.updateText(),this.scale.x*this._texture._frame.width},set:function(t){this.scale.x=t/this._texture._frame.width,this._width=t}},height:{get:function(){return this.dirty&&this.updateText(),this.scale.y*this._texture._frame.height},set:function(t){this.scale.y=t/this._texture._frame.height,this._height=t}},style:{get:function(){return this._style},set:function(t){t=t||{},"number"==typeof t.fill&&(t.fill=a.hex2string(t.fill)),"number"==typeof t.stroke&&(t.stroke=a.hex2string(t.stroke)),"number"==typeof t.dropShadowColor&&(t.dropShadowColor=a.hex2string(t.dropShadowColor)),t.font=t.font||"bold 20pt Arial",t.fill=t.fill||"black",t.align=t.align||"left",t.stroke=t.stroke||"black",t.strokeThickness=t.strokeThickness||0,t.wordWrap=t.wordWrap||!1,t.wordWrapWidth=t.wordWrapWidth||100,t.dropShadow=t.dropShadow||!1,t.dropShadowColor=t.dropShadowColor||"#000000",t.dropShadowAngle=void 0!==t.dropShadowAngle?t.dropShadowAngle:Math.PI/6,t.dropShadowDistance=void 0!==t.dropShadowDistance?t.dropShadowDistance:5,t.dropShadowBlur=void 0!==t.dropShadowBlur?t.dropShadowBlur:0,t.padding=t.padding||0,t.textBaseline=t.textBaseline||"alphabetic",t.lineJoin=t.lineJoin||"miter",t.miterLimit=t.miterLimit||10,this._style=t,this.dirty=!0}},text:{get:function(){return this._text},set:function(t){t=t.toString()||" ",this._text!==t&&(this._text=t,this.dirty=!0)}}}),i.prototype.updateText=function(){var t=this._style;this.context.font=t.font;for(var e=t.wordWrap?this.wordWrap(this._text):this._text,r=e.split(/(?:\r\n|\r|\n)/),i=new Array(r.length),n=0,o=this.determineFontProperties(t.font),s=0;s0?(this.context.shadowColor=t.dropShadowColor,this.context.shadowBlur=t.dropShadowBlur):this.context.fillStyle=t.dropShadowColor;var d=Math.cos(t.dropShadowAngle)*t.dropShadowDistance,f=Math.sin(t.dropShadowAngle)*t.dropShadowDistance;for(s=0;sh;h++){for(u=0;p>u;u+=4)if(255!==l[d+u]){f=!0;break}if(f)break;d+=p}for(e.ascent=s-h,d=c-p,f=!1,h=a;h>s;h--){for(u=0;p>u;u+=4)if(255!==l[d+u]){f=!0;break}if(f)break;d-=p}e.descent=h-s,e.fontSize=e.ascent+e.descent,i.fontPropertiesCache[t]=e}return e},i.prototype.wordWrap=function(t){for(var e="",r=t.split("\n"),i=this._style.wordWrapWidth,n=0;no?(a>0&&(e+="\n"),e+=s[a],o=i-h):(o-=u,e+=" "+s[a])}n0&&e>0,this.width=this._frame.width=this.crop.width=t,this.height=this._frame.height=this.crop.height=e,r&&(this.baseTexture.width=this.width,this.baseTexture.height=this.height),this.valid&&(this.textureBuffer.resize(this.width,this.height),this.filterManager&&this.filterManager.resize(this.width,this.height)))},i.prototype.clear=function(){this.valid&&(this.renderer.type===l.RENDERER_TYPE.WEBGL&&this.renderer.gl.bindFramebuffer(this.renderer.gl.FRAMEBUFFER,this.textureBuffer.frameBuffer),this.textureBuffer.clear())},i.prototype.renderWebGL=function(t,e,r,i){if(this.valid){if(i=void 0!==i?i:!0,this.textureBuffer.transform=e,this.textureBuffer.activate(),t.worldAlpha=1,i){t.worldTransform.identity(),t.currentBounds=null;var n,o,s=t.children;for(n=0,o=s.length;o>n;++n)s[n].updateTransform()}var a=this.renderer.filterManager;this.renderer.filterManager=this.filterManager,this.renderer.renderDisplayObject(t,this.textureBuffer,r),this.renderer.filterManager=a}},i.prototype.renderCanvas=function(t,e,r,i){if(this.valid){i=!!i;var n=c;n.identity(),e&&n.append(e);var o=t.worldTransform;t.worldTransform=n,t.worldAlpha=1;var s,a,h=t.children;for(s=0,a=h.length;a>s;++s)h[s].updateTransform();r&&this.textureBuffer.clear();var u=this.textureBuffer.context,l=this.renderer.resolution;this.renderer.resolution=this.resolution,this.renderer.renderDisplayObject(t,u),this.renderer.resolution=l,t.worldTransform===n&&(t.worldTransform=o)}},i.prototype.destroy=function(){o.prototype.destroy.call(this,!0),this.textureBuffer.destroy(),this.filterManager&&this.filterManager.destroy(),this.renderer=null},i.prototype.getImage=function(){var t=new Image;return t.src=this.getBase64(),t},i.prototype.getBase64=function(){return this.getCanvas().toDataURL()},i.prototype.getCanvas=function(){if(this.renderer.type===l.RENDERER_TYPE.WEBGL){var t=this.renderer.gl,e=this.textureBuffer.size.width,r=this.textureBuffer.size.height,i=new Uint8Array(4*e*r);t.bindFramebuffer(t.FRAMEBUFFER,this.textureBuffer.frameBuffer),t.readPixels(0,0,e,r,t.RGBA,t.UNSIGNED_BYTE,i),t.bindFramebuffer(t.FRAMEBUFFER,null);var n=new h(e,r),o=n.context.getImageData(0,0,e,r);return o.data.set(i),n.context.putImageData(o,0,0),n.canvas}return this.textureBuffer.canvas},i.prototype.getPixels=function(){var t,e;if(this.renderer.type===l.RENDERER_TYPE.WEBGL){var r=this.renderer.gl;t=this.textureBuffer.size.width,e=this.textureBuffer.size.height;var i=new Uint8Array(4*t*e);return r.bindFramebuffer(r.FRAMEBUFFER,this.textureBuffer.frameBuffer),r.readPixels(0,0,t,e,r.RGBA,r.UNSIGNED_BYTE,i),r.bindFramebuffer(r.FRAMEBUFFER,null),i}return t=this.textureBuffer.canvas.width,e=this.textureBuffer.canvas.height,this.textureBuffer.canvas.getContext("2d").getImageData(0,0,t,e).data},i.prototype.getPixel=function(t,e){if(this.renderer.type===l.RENDERER_TYPE.WEBGL){var r=this.renderer.gl,i=new Uint8Array(4);return r.bindFramebuffer(r.FRAMEBUFFER,this.textureBuffer.frameBuffer),r.readPixels(t,e,1,1,r.RGBA,r.UNSIGNED_BYTE,i),r.bindFramebuffer(r.FRAMEBUFFER,null),i}return this.textureBuffer.canvas.getContext("2d").getImageData(t,e,1,1).data}},{"../const":38,"../math":48,"../renderers/canvas/utils/CanvasBuffer":60,"../renderers/webgl/managers/FilterManager":70,"../renderers/webgl/utils/RenderTarget":82,"./BaseTexture":90,"./Texture":92}],92:[function(t,e,r){function i(t,e,r,n,o){a.call(this),this.noFrame=!1,e||(this.noFrame=!0,e=new h.Rectangle(0,0,1,1)),t instanceof i&&(t=t.baseTexture),this.baseTexture=t,this._frame=e,this.trim=n,this.valid=!1,this.requiresUpdate=!1,this._uvs=null,this.width=0,this.height=0,this.crop=r||e,this.rotate=!!o,t.hasLoaded?(this.noFrame&&(e=new h.Rectangle(0,0,t.width,t.height),t.on("update",this.onBaseTextureUpdated,this)),this.frame=e):t.once("loaded",this.onBaseTextureLoaded,this)}var n=t("./BaseTexture"),o=t("./VideoBaseTexture"),s=t("./TextureUvs"),a=t("eventemitter3"),h=t("../math"),u=t("../utils");i.prototype=Object.create(a.prototype),i.prototype.constructor=i,e.exports=i,Object.defineProperties(i.prototype,{frame:{get:function(){return this._frame},set:function(t){if(this._frame=t,this.noFrame=!1,this.width=t.width,this.height=t.height,!this.trim&&!this.rotate&&(t.x+t.width>this.baseTexture.width||t.y+t.height>this.baseTexture.height))throw new Error("Texture Error: frame does not fit inside the base Texture dimensions "+this);this.valid=t&&t.width&&t.height&&this.baseTexture.hasLoaded,this.trim?(this.width=this.trim.width,this.height=this.trim.height,this._frame.width=this.trim.width,this._frame.height=this.trim.height):this.crop=t,this.valid&&this._updateUvs()}}}),i.prototype.update=function(){this.baseTexture.update()},i.prototype.onBaseTextureLoaded=function(t){this.noFrame?this.frame=new h.Rectangle(0,0,t.width,t.height):this.frame=this._frame,this.emit("update",this)},i.prototype.onBaseTextureUpdated=function(t){this._frame.width=t.width,this._frame.height=t.height,this.emit("update",this)},i.prototype.destroy=function(t){this.baseTexture&&(t&&this.baseTexture.destroy(),this.baseTexture.off("update",this.onBaseTextureUpdated,this),this.baseTexture.off("loaded",this.onBaseTextureLoaded,this),this.baseTexture=null),this._frame=null,this._uvs=null,this.trim=null,this.crop=null,this.valid=!1,this.off("dispose",this.dispose,this),this.off("update",this.update,this)},i.prototype.clone=function(){return new i(this.baseTexture,this.frame,this.crop,this.trim,this.rotate)},i.prototype._updateUvs=function(){this._uvs||(this._uvs=new s),this._uvs.set(this.crop,this.baseTexture,this.rotate)},i.fromImage=function(t,e,r){var o=u.TextureCache[t];return o||(o=new i(n.fromImage(t,e,r)),u.TextureCache[t]=o),o},i.fromFrame=function(t){var e=u.TextureCache[t];if(!e)throw new Error('The frameId "'+t+'" does not exist in the texture cache');return e},i.fromCanvas=function(t,e){return new i(n.fromCanvas(t,e))},i.fromVideo=function(t,e){return"string"==typeof t?i.fromVideoUrl(t,e):new i(o.fromVideo(t,e))},i.fromVideoUrl=function(t,e){return new i(o.fromUrl(t,e))},i.addTextureToCache=function(t,e){u.TextureCache[e]=t},i.removeTextureFromCache=function(t){var e=u.TextureCache[t];return delete u.TextureCache[t],delete u.BaseTextureCache[t],e},i.EMPTY=new i(new n)},{"../math":48,"../utils":98,"./BaseTexture":90,"./TextureUvs":93,"./VideoBaseTexture":94,eventemitter3:25}],93:[function(t,e,r){function i(){this.x0=0,this.y0=0,this.x1=1,this.y1=0,this.x2=1,this.y2=1,this.x3=0,this.y3=1,this.xy0_uint32=0,this.xy1_uint32=0,this.xy2_uint32=0,this.xy3_uint32=0,this.uvs_uint32=new Uint32Array(4)}e.exports=i,i.prototype.set=function(t,e,r){var i=e.width,n=e.height;r?(this.x0=(t.x+t.height)/i,this.y0=t.y/n,this.x1=(t.x+t.height)/i,this.y1=(t.y+t.width)/n,this.x2=t.x/i,this.y2=(t.y+t.width)/n,this.x3=t.x/i,this.y3=t.y/n):(this.x0=t.x/i,this.y0=t.y/n,this.x1=(t.x+t.width)/i,this.y1=t.y/n,this.x2=(t.x+t.width)/i,this.y2=(t.y+t.height)/n,this.x3=t.x/i,this.y3=(t.y+t.height)/n),this.uvs_uint32[0]=(65535*this.y0&65535)<<16|65535*this.x0&65535,this.uvs_uint32[1]=(65535*this.y1&65535)<<16|65535*this.x1&65535,this.uvs_uint32[2]=(65535*this.y2&65535)<<16|65535*this.x2&65535,this.uvs_uint32[3]=(65535*this.y3&65535)<<16|65535*this.x3&65535}},{}],94:[function(t,e,r){function i(t,e){if(!t)throw new Error("No video source element specified.");(t.readyState===t.HAVE_ENOUGH_DATA||t.readyState===t.HAVE_FUTURE_DATA)&&t.width&&t.height&&(t.complete=!0),o.call(this,t,e),this.autoUpdate=!1,this._onUpdate=this._onUpdate.bind(this),this._onCanPlay=this._onCanPlay.bind(this),t.complete||(t.addEventListener("canplay",this._onCanPlay),t.addEventListener("canplaythrough",this._onCanPlay),t.addEventListener("play",this._onPlayStart.bind(this)),t.addEventListener("pause",this._onPlayStop.bind(this))),this.__loaded=!1}function n(t,e){e||(e="video/"+t.substr(t.lastIndexOf(".")+1));var r=document.createElement("source");return r.src=t,r.type=e,r}var o=t("./BaseTexture"),s=t("../utils");i.prototype=Object.create(o.prototype),i.prototype.constructor=i,e.exports=i,i.prototype._onUpdate=function(){this.autoUpdate&&(window.requestAnimationFrame(this._onUpdate),this.update())},i.prototype._onPlayStart=function(){this.autoUpdate||(window.requestAnimationFrame(this._onUpdate),this.autoUpdate=!0)},i.prototype._onPlayStop=function(){this.autoUpdate=!1},i.prototype._onCanPlay=function(){this.hasLoaded=!0,this.source&&(this.source.removeEventListener("canplay",this._onCanPlay),this.source.removeEventListener("canplaythrough",this._onCanPlay),this.width=this.source.videoWidth,this.height=this.source.videoHeight,this.source.play(),this.__loaded||(this.__loaded=!0,this.emit("loaded",this)))},i.prototype.destroy=function(){this.source&&this.source._pixiId&&(delete s.BaseTextureCache[this.source._pixiId],delete this.source._pixiId),o.prototype.destroy.call(this)},i.fromVideo=function(t,e){t._pixiId||(t._pixiId="video_"+s.uid());var r=s.BaseTextureCache[t._pixiId];return r||(r=new i(t,e),s.BaseTextureCache[t._pixiId]=r),r},i.fromUrl=function(t,e){var r=document.createElement("video");if(Array.isArray(t))for(var o=0;othis._maxElapsedMS&&(e=this._maxElapsedMS),this.deltaTime=e*n.TARGET_FPMS*this.speed,this._emitter.emit(s,this.deltaTime),this.lastTime=t},e.exports=i},{"../const":38,eventemitter3:25}],96:[function(t,e,r){var i=t("./Ticker"),n=new i;n.autoStart=!0,e.exports={shared:n,Ticker:i}},{"./Ticker":95}],97:[function(t,e,r){var i=function(t){for(var e=6*t,r=new Uint16Array(e),i=0,n=0;e>i;i+=6,n+=4)r[i+0]=n+0,r[i+1]=n+1,r[i+2]=n+2,r[i+3]=n+0,r[i+4]=n+2,r[i+5]=n+3;return r};e.exports=i},{}],98:[function(t,e,r){var i=t("../const"),n=e.exports={_uid:0,_saidHello:!1,EventEmitter:t("eventemitter3"),pluginTarget:t("./pluginTarget"),async:t("async"),uid:function(){return++n._uid},hex2rgb:function(t,e){return e=e||[],e[0]=(t>>16&255)/255,e[1]=(t>>8&255)/255,e[2]=(255&t)/255,e},hex2string:function(t){return t=t.toString(16),t="000000".substr(0,6-t.length)+t,"#"+t},rgb2hex:function(t){return(255*t[0]<<16)+(255*t[1]<<8)+255*t[2]},canUseNewCanvasBlendModes:function(){if("undefined"==typeof document)return!1;var t="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAQAAAABAQMAAADD8p2OAAAAA1BMVEX/",e="AAAACklEQVQI12NgAAAAAgAB4iG8MwAAAABJRU5ErkJggg==",r=new Image;r.src=t+"AP804Oa6"+e;var i=new Image;i.src=t+"/wCKxvRF"+e;var n=document.createElement("canvas");n.width=6,n.height=1;var o=n.getContext("2d");o.globalCompositeOperation="multiply",o.drawImage(r,0,0),o.drawImage(i,2,0);var s=o.getImageData(2,0,1,1).data;return 255===s[0]&&0===s[1]&&0===s[2]},getNextPowerOfTwo:function(t){if(t>0&&0===(t&t-1))return t;for(var e=1;t>e;)e<<=1;return e},isPowerOfTwo:function(t,e){return t>0&&0===(t&t-1)&&e>0&&0===(e&e-1)},getResolutionOfUrl:function(t){var e=i.RETINA_PREFIX.exec(t);return e?parseFloat(e[1]):1},sayHello:function(t){if(!n._saidHello){if(navigator.userAgent.toLowerCase().indexOf("chrome")>-1){var e=["\n %c %c %c Pixi.js "+i.VERSION+" - ✰ "+t+" ✰ %c %c http://www.pixijs.com/ %c %c ♥%c♥%c♥ \n\n","background: #ff66a5; padding:5px 0;","background: #ff66a5; padding:5px 0;","color: #ff66a5; background: #030307; padding:5px 0;","background: #ff66a5; padding:5px 0;","background: #ffc3dc; padding:5px 0;","background: #ff66a5; padding:5px 0;","color: #ff2424; background: #fff; padding:5px 0;","color: #ff2424; background: #fff; padding:5px 0;","color: #ff2424; background: #fff; padding:5px 0;"];window.console.log.apply(console,e)}else window.console&&window.console.log("Pixi.js "+i.VERSION+" - "+t+" - http://www.pixijs.com/");n._saidHello=!0}},isWebGLSupported:function(){var t={stencil:!0};try{if(!window.WebGLRenderingContext)return!1;var e=document.createElement("canvas"),r=e.getContext("webgl",t)||e.getContext("experimental-webgl",t);return!(!r||!r.getContextAttributes().stencil)}catch(i){return!1}},sign:function(t){return t?0>t?-1:1:0},removeItems:function(t,e,r){var i=t.length;if(!(e>=i||0===r)){r=e+r>i?i-e:r;for(var n=e,o=i-r;o>n;++n)t[n]=t[n+r];t.length=o}},TextureCache:{},BaseTextureCache:{}}},{"../const":38,"./pluginTarget":99,async:16,eventemitter3:25}],99:[function(t,e,r){function i(t){t.__plugins={},t.registerPlugin=function(e,r){t.__plugins[e]=r},t.prototype.initPlugins=function(){this.plugins=this.plugins||{};for(var e in t.__plugins)this.plugins[e]=new t.__plugins[e](this)},t.prototype.destroyPlugins=function(){for(var t in this.plugins)this.plugins[t].destroy(),this.plugins[t]=null;this.plugins=null}}e.exports={mixin:function(t){i(t)}}},{}],100:[function(t,e,r){var i=t("./core"),n=t("./mesh"),o=t("./extras"),s=t("./filters");i.SpriteBatch=function(){throw new ReferenceError("SpriteBatch does not exist any more, please use the new ParticleContainer instead.")},i.AssetLoader=function(){throw new ReferenceError("The loader system was overhauled in pixi v3, please see the new PIXI.loaders.Loader class.")},Object.defineProperties(i,{Stage:{get:function(){return console.warn("You do not need to use a PIXI Stage any more, you can simply render any container."),i.Container}},DisplayObjectContainer:{get:function(){return console.warn("DisplayObjectContainer has been shortened to Container, please use Container from now on."),i.Container}},Strip:{get:function(){return console.warn("The Strip class has been renamed to Mesh and moved to mesh.Mesh, please use mesh.Mesh from now on."),n.Mesh}},Rope:{get:function(){return console.warn("The Rope class has been moved to mesh.Rope, please use mesh.Rope from now on."),n.Rope}},MovieClip:{get:function(){return console.warn("The MovieClip class has been moved to extras.MovieClip, please use extras.MovieClip from now on."),o.MovieClip}},TilingSprite:{get:function(){return console.warn("The TilingSprite class has been moved to extras.TilingSprite, please use extras.TilingSprite from now on."),o.TilingSprite}},BitmapText:{get:function(){return console.warn("The BitmapText class has been moved to extras.BitmapText, please use extras.BitmapText from now on."),o.BitmapText}},blendModes:{get:function(){return console.warn("The blendModes has been moved to BLEND_MODES, please use BLEND_MODES from now on."),i.BLEND_MODES}},scaleModes:{get:function(){return console.warn("The scaleModes has been moved to SCALE_MODES, please use SCALE_MODES from now on."),i.SCALE_MODES}},BaseTextureCache:{get:function(){return console.warn("The BaseTextureCache class has been moved to utils.BaseTextureCache, please use utils.BaseTextureCache from now on."),i.utils.BaseTextureCache}},TextureCache:{get:function(){return console.warn("The TextureCache class has been moved to utils.TextureCache, please use utils.TextureCache from now on."),i.utils.TextureCache}},math:{get:function(){return console.warn("The math namespace is deprecated, please access members already accessible on PIXI."),i}}}),i.Sprite.prototype.setTexture=function(t){this.texture=t,console.warn("setTexture is now deprecated, please use the texture property, e.g : sprite.texture = texture;")},o.BitmapText.prototype.setText=function(t){this.text=t,console.warn("setText is now deprecated, please use the text property, e.g : myBitmapText.text = 'my text';")},i.Text.prototype.setText=function(t){this.text=t,console.warn("setText is now deprecated, please use the text property, e.g : myText.text = 'my text';")},i.Text.prototype.setStyle=function(t){this.style=t,console.warn("setStyle is now deprecated, please use the style property, e.g : myText.style = style;")},i.Texture.prototype.setFrame=function(t){this.frame=t,console.warn("setFrame is now deprecated, please use the frame property, e.g : myTexture.frame = frame;")},Object.defineProperties(s,{AbstractFilter:{get:function(){return console.warn("filters.AbstractFilter is an undocumented alias, please use AbstractFilter from now on."),i.AbstractFilter}},FXAAFilter:{get:function(){return console.warn("filters.FXAAFilter is an undocumented alias, please use FXAAFilter from now on."),i.FXAAFilter}},SpriteMaskFilter:{get:function(){return console.warn("filters.SpriteMaskFilter is an undocumented alias, please use SpriteMaskFilter from now on."),i.SpriteMaskFilter}}}),i.utils.uuid=function(){return console.warn("utils.uuid() is deprecated, please use utils.uid() from now on."),i.utils.uid()}},{"./core":45,"./extras":107,"./filters":124,"./mesh":149}],101:[function(t,e,r){function i(t,e){n.Container.call(this),e=e||{},this.textWidth=0,this.textHeight=0,this._glyphs=[],this._font={tint:void 0!==e.tint?e.tint:16777215,align:e.align||"left",name:null,size:0},this.font=e.font,this._text=t,this.maxWidth=0,this.maxLineHeight=0,this.dirty=!1,this.updateText()}var n=t("../core");i.prototype=Object.create(n.Container.prototype),i.prototype.constructor=i,e.exports=i,Object.defineProperties(i.prototype,{tint:{get:function(){return this._font.tint},set:function(t){this._font.tint="number"==typeof t&&t>=0?t:16777215,this.dirty=!0}},align:{get:function(){return this._font.align},set:function(t){this._font.align=t||"left",this.dirty=!0}},font:{get:function(){return this._font},set:function(t){t&&("string"==typeof t?(t=t.split(" "),this._font.name=1===t.length?t[0]:t.slice(1).join(" "),this._font.size=t.length>=2?parseInt(t[0],10):i.fonts[this._font.name].size):(this._font.name=t.name,this._font.size="number"==typeof t.size?t.size:parseInt(t.size,10)),this.dirty=!0)}},text:{get:function(){return this._text},set:function(t){t=t.toString()||" ",this._text!==t&&(this._text=t,this.dirty=!0)}}}),i.prototype.updateText=function(){for(var t=i.fonts[this._font.name],e=new n.Point,r=null,o=[],s=0,a=0,h=[],u=0,l=this._font.size/t.size,c=-1,p=0,d=0;d0&&e.x*l>this.maxWidth)n.utils.removeItems(o,c,d-c),d=c,c=-1,h.push(s),a=Math.max(a,s),u++,e.x=0,e.y+=t.lineHeight,r=null;else{var v=t.chars[f];v&&(r&&v.kerning[r]&&(e.x+=v.kerning[r]),o.push({texture:v.texture,line:u,charCode:f,position:new n.Point(e.x+v.xOffset,e.y+v.yOffset)}),s=e.x+(v.texture.width+v.xOffset),e.x+=v.xAdvance,p=Math.max(p,v.yOffset+v.texture.height),r=f)}}h.push(s),a=Math.max(a,s);var g=[];for(d=0;u>=d;d++){var m=0;"right"===this._font.align?m=a-h[d]:"center"===this._font.align&&(m=(a-h[d])/2),g.push(m)}var y=o.length,x=this.tint;for(d=0;y>d;d++){var b=this._glyphs[d];b?b.texture=o[d].texture:(b=new n.Sprite(o[d].texture),this._glyphs.push(b)),b.position.x=(o[d].position.x+g[o[d].line])*l,b.position.y=o[d].position.y*l,b.scale.x=b.scale.y=l,b.tint=x,b.parent||this.addChild(b)}for(d=y;dt&&(t+=this._textures.length),t}}}),i.prototype.stop=function(){this.playing&&(this.playing=!1,n.ticker.shared.remove(this.update,this))},i.prototype.play=function(){this.playing||(this.playing=!0,n.ticker.shared.add(this.update,this))},i.prototype.gotoAndStop=function(t){this.stop(),this._currentTime=t,this._texture=this._textures[this.currentFrame]},i.prototype.gotoAndPlay=function(t){this._currentTime=t,this.play()},i.prototype.update=function(t){var e=this.animationSpeed*t;if(null!==this._durations){var r=this._currentTime%1*this._durations[this.currentFrame];for(r+=e/60*1e3;0>r;)this._currentTime--,r+=this._durations[this.currentFrame];var i=Math.sign(this.animationSpeed*t);for(this._currentTime=Math.floor(this._currentTime);r>=this._durations[this.currentFrame];)r-=this._durations[this.currentFrame]*i,this._currentTime+=i;this._currentTime+=r/this._durations[this.currentFrame]}else this._currentTime+=e;this._currentTime<0&&!this.loop?(this.gotoAndStop(0),this.onComplete&&this.onComplete()):this._currentTime>=this._textures.length&&!this.loop?(this.gotoAndStop(this._textures.length-1),this.onComplete&&this.onComplete()):this._texture=this._textures[this.currentFrame]},i.prototype.destroy=function(){this.stop(),n.Sprite.prototype.destroy.call(this)},i.fromFrames=function(t){for(var e=[],r=0;rx?x:t,t=t>_?_:t,t=t>E?E:t,r=y,r=r>b?b:r,r=r>T?T:r,r=r>S?S:r,e=m,e=x>e?x:e,e=_>e?_:e,e=E>e?E:e,i=y,i=b>i?b:i,i=T>i?T:i,i=S>i?S:i;var w=this._bounds;return w.x=t,w.width=e-t,w.y=r,w.height=i-r,this._currentBounds=w,w},i.prototype.containsPoint=function(t){this.worldTransform.applyInverse(t,o);var e,r=this._width,i=this._height,n=-r*this.anchor.x;return o.x>n&&o.xe&&o.y 0.2) n = 65600.0; // :\n if (gray > 0.3) n = 332772.0; // *\n if (gray > 0.4) n = 15255086.0; // o\n if (gray > 0.5) n = 23385164.0; // &\n if (gray > 0.6) n = 15252014.0; // 8\n if (gray > 0.7) n = 13199452.0; // @\n if (gray > 0.8) n = 11512810.0; // #\n\n vec2 p = mod( uv / ( pixelSize * 0.5 ), 2.0) - vec2(1.0);\n col = col * character(n, p);\n\n gl_FragColor = vec4(col, 1.0);\n}\n",{dimensions:{type:"4fv",value:new Float32Array([0,0,0,0])},pixelSize:{type:"1f",value:8}})}var n=t("../../core");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i,Object.defineProperties(i.prototype,{size:{get:function(){return this.uniforms.pixelSize.value},set:function(t){this.uniforms.pixelSize.value=t}}})},{"../../core":45}],109:[function(t,e,r){function i(){n.AbstractFilter.call(this),this.blurXFilter=new o,this.blurYFilter=new s,this.defaultFilter=new n.AbstractFilter}var n=t("../../core"),o=t("../blur/BlurXFilter"),s=t("../blur/BlurYFilter");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.applyFilter=function(t,e,r){var i=t.filterManager.getRenderTarget(!0);this.defaultFilter.applyFilter(t,e,r),this.blurXFilter.applyFilter(t,e,i),t.blendModeManager.setBlendMode(n.BLEND_MODES.SCREEN),this.blurYFilter.applyFilter(t,i,r),t.blendModeManager.setBlendMode(n.BLEND_MODES.NORMAL),t.filterManager.returnRenderTarget(i)},Object.defineProperties(i.prototype,{blur:{get:function(){return this.blurXFilter.blur},set:function(t){this.blurXFilter.blur=this.blurYFilter.blur=t}},blurX:{get:function(){return this.blurXFilter.blur},set:function(t){this.blurXFilter.blur=t}},blurY:{get:function(){return this.blurYFilter.blur},set:function(t){this.blurYFilter.blur=t}}})},{"../../core":45,"../blur/BlurXFilter":112,"../blur/BlurYFilter":113}],110:[function(t,e,r){function i(t,e){n.AbstractFilter.call(this,"attribute vec2 aVertexPosition;\nattribute vec2 aTextureCoord;\nattribute vec4 aColor;\n\nuniform float strength;\nuniform float dirX;\nuniform float dirY;\nuniform mat3 projectionMatrix;\n\nvarying vec2 vTextureCoord;\nvarying vec4 vColor;\nvarying vec2 vBlurTexCoords[3];\n\nvoid main(void)\n{\n gl_Position = vec4((projectionMatrix * vec3((aVertexPosition), 1.0)).xy, 0.0, 1.0);\n vTextureCoord = aTextureCoord;\n\n vBlurTexCoords[0] = aTextureCoord + vec2( (0.004 * strength) * dirX, (0.004 * strength) * dirY );\n vBlurTexCoords[1] = aTextureCoord + vec2( (0.008 * strength) * dirX, (0.008 * strength) * dirY );\n vBlurTexCoords[2] = aTextureCoord + vec2( (0.012 * strength) * dirX, (0.012 * strength) * dirY );\n\n vColor = vec4(aColor.rgb * aColor.a, aColor.a);\n}\n","precision lowp float;\n\nvarying vec2 vTextureCoord;\nvarying vec2 vBlurTexCoords[3];\nvarying vec4 vColor;\n\nuniform sampler2D uSampler;\n\nvoid main(void)\n{\n gl_FragColor = vec4(0.0);\n\n gl_FragColor += texture2D(uSampler, vTextureCoord ) * 0.3989422804014327;\n gl_FragColor += texture2D(uSampler, vBlurTexCoords[ 0]) * 0.2419707245191454;\n gl_FragColor += texture2D(uSampler, vBlurTexCoords[ 1]) * 0.05399096651318985;\n gl_FragColor += texture2D(uSampler, vBlurTexCoords[ 2]) * 0.004431848411938341;\n}\n",{strength:{type:"1f",value:1},dirX:{type:"1f",value:t||0},dirY:{type:"1f",value:e||0}}),this.defaultFilter=new n.AbstractFilter,this.passes=1,this.dirX=t||0,this.dirY=e||0,this.strength=4}var n=t("../../core");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.applyFilter=function(t,e,r,i){var n=this.getShader(t);if(this.uniforms.strength.value=this.strength/4/this.passes*(e.frame.width/e.size.width),1===this.passes)t.filterManager.applyFilter(n,e,r,i);else{var o=t.filterManager.getRenderTarget(!0);t.filterManager.applyFilter(n,e,o,i);for(var s=0;s>16&255)/255,s=(r>>8&255)/255,a=(255&r)/255,h=(i>>16&255)/255,u=(i>>8&255)/255,l=(255&i)/255,c=[.3,.59,.11,0,0,o,s,a,t,0,h,u,l,e,0,o-h,s-u,a-l,0,0];this._loadMatrix(c,n)},i.prototype.night=function(t,e){t=t||.1;var r=[-2*t,-t,0,0,0,-t,0,t,0,0,0,t,2*t,0,0,0,0,0,1,0];this._loadMatrix(r,e)},i.prototype.predator=function(t,e){var r=[11.224130630493164*t,-4.794486999511719*t,-2.8746118545532227*t,0*t,.40342438220977783*t,-3.6330697536468506*t,9.193157196044922*t,-2.951810836791992*t,0*t,-1.316135048866272*t,-3.2184197902679443*t,-4.2375030517578125*t,7.476448059082031*t,0*t,.8044459223747253*t,0,0,0,1,0];this._loadMatrix(r,e)},i.prototype.lsd=function(t){var e=[2,-.4,.5,0,0,-.5,2,-.4,0,0,-.4,-.5,3,0,0,0,0,0,1,0];this._loadMatrix(e,t)},i.prototype.reset=function(){var t=[1,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,1,0];this._loadMatrix(t,!1)},Object.defineProperties(i.prototype,{matrix:{get:function(){return this.uniforms.m.value},set:function(t){this.uniforms.m.value=t}}})},{"../../core":45}],116:[function(t,e,r){function i(){n.AbstractFilter.call(this,null,"precision mediump float;\n\nvarying vec2 vTextureCoord;\n\nuniform sampler2D uSampler;\nuniform float step;\n\nvoid main(void)\n{\n vec4 color = texture2D(uSampler, vTextureCoord);\n\n color = floor(color * step) / step;\n\n gl_FragColor = color;\n}\n",{step:{type:"1f",value:5}})}var n=t("../../core");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i,Object.defineProperties(i.prototype,{step:{get:function(){return this.uniforms.step.value},set:function(t){this.uniforms.step.value=t}}})},{"../../core":45}],117:[function(t,e,r){function i(t,e,r){n.AbstractFilter.call(this,null,"precision mediump float;\n\nvarying mediump vec2 vTextureCoord;\n\nuniform sampler2D uSampler;\nuniform vec2 texelSize;\nuniform float matrix[9];\n\nvoid main(void)\n{\n vec4 c11 = texture2D(uSampler, vTextureCoord - texelSize); // top left\n vec4 c12 = texture2D(uSampler, vec2(vTextureCoord.x, vTextureCoord.y - texelSize.y)); // top center\n vec4 c13 = texture2D(uSampler, vec2(vTextureCoord.x + texelSize.x, vTextureCoord.y - texelSize.y)); // top right\n\n vec4 c21 = texture2D(uSampler, vec2(vTextureCoord.x - texelSize.x, vTextureCoord.y)); // mid left\n vec4 c22 = texture2D(uSampler, vTextureCoord); // mid center\n vec4 c23 = texture2D(uSampler, vec2(vTextureCoord.x + texelSize.x, vTextureCoord.y)); // mid right\n\n vec4 c31 = texture2D(uSampler, vec2(vTextureCoord.x - texelSize.x, vTextureCoord.y + texelSize.y)); // bottom left\n vec4 c32 = texture2D(uSampler, vec2(vTextureCoord.x, vTextureCoord.y + texelSize.y)); // bottom center\n vec4 c33 = texture2D(uSampler, vTextureCoord + texelSize); // bottom right\n\n gl_FragColor =\n c11 * matrix[0] + c12 * matrix[1] + c13 * matrix[2] +\n c21 * matrix[3] + c22 * matrix[4] + c23 * matrix[5] +\n c31 * matrix[6] + c32 * matrix[7] + c33 * matrix[8];\n\n gl_FragColor.a = c22.a;\n}\n",{matrix:{type:"1fv",value:new Float32Array(t)},texelSize:{type:"v2",value:{x:1/e,y:1/r}}})}var n=t("../../core");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i,Object.defineProperties(i.prototype,{matrix:{get:function(){return this.uniforms.matrix.value},set:function(t){this.uniforms.matrix.value=new Float32Array(t)}},width:{get:function(){return 1/this.uniforms.texelSize.value.x},set:function(t){this.uniforms.texelSize.value.x=1/t}},height:{get:function(){return 1/this.uniforms.texelSize.value.y},set:function(t){this.uniforms.texelSize.value.y=1/t}}})},{"../../core":45 -}],118:[function(t,e,r){function i(){n.AbstractFilter.call(this,null,"precision mediump float;\n\nvarying vec2 vTextureCoord;\n\nuniform sampler2D uSampler;\n\nvoid main(void)\n{\n float lum = length(texture2D(uSampler, vTextureCoord.xy).rgb);\n\n gl_FragColor = vec4(1.0, 1.0, 1.0, 1.0);\n\n if (lum < 1.00)\n {\n if (mod(gl_FragCoord.x + gl_FragCoord.y, 10.0) == 0.0)\n {\n gl_FragColor = vec4(0.0, 0.0, 0.0, 1.0);\n }\n }\n\n if (lum < 0.75)\n {\n if (mod(gl_FragCoord.x - gl_FragCoord.y, 10.0) == 0.0)\n {\n gl_FragColor = vec4(0.0, 0.0, 0.0, 1.0);\n }\n }\n\n if (lum < 0.50)\n {\n if (mod(gl_FragCoord.x + gl_FragCoord.y - 5.0, 10.0) == 0.0)\n {\n gl_FragColor = vec4(0.0, 0.0, 0.0, 1.0);\n }\n }\n\n if (lum < 0.3)\n {\n if (mod(gl_FragCoord.x - gl_FragCoord.y - 5.0, 10.0) == 0.0)\n {\n gl_FragColor = vec4(0.0, 0.0, 0.0, 1.0);\n }\n }\n}\n")}var n=t("../../core");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i},{"../../core":45}],119:[function(t,e,r){function i(t,e){var r=new n.Matrix;t.renderable=!1,n.AbstractFilter.call(this,"attribute vec2 aVertexPosition;\nattribute vec2 aTextureCoord;\nattribute vec4 aColor;\n\nuniform mat3 projectionMatrix;\nuniform mat3 otherMatrix;\n\nvarying vec2 vMapCoord;\nvarying vec2 vTextureCoord;\nvarying vec4 vColor;\n\nvoid main(void)\n{\n gl_Position = vec4((projectionMatrix * vec3(aVertexPosition, 1.0)).xy, 0.0, 1.0);\n vTextureCoord = aTextureCoord;\n vMapCoord = ( otherMatrix * vec3( aTextureCoord, 1.0) ).xy;\n vColor = vec4(aColor.rgb * aColor.a, aColor.a);\n}\n","precision mediump float;\n\nvarying vec2 vMapCoord;\nvarying vec2 vTextureCoord;\nvarying vec4 vColor;\n\nuniform vec2 scale;\n\nuniform sampler2D uSampler;\nuniform sampler2D mapSampler;\n\nvoid main(void)\n{\n vec4 map = texture2D(mapSampler, vMapCoord);\n\n map -= 0.5;\n map.xy *= scale;\n\n gl_FragColor = texture2D(uSampler, vec2(vTextureCoord.x + map.x, vTextureCoord.y + map.y));\n}\n",{mapSampler:{type:"sampler2D",value:t.texture},otherMatrix:{type:"mat3",value:r.toArray(!0)},scale:{type:"v2",value:{x:1,y:1}}}),this.maskSprite=t,this.maskMatrix=r,(null===e||void 0===e)&&(e=20),this.scale=new n.Point(e,e)}var n=t("../../core");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.applyFilter=function(t,e,r){var i=t.filterManager;i.calculateMappedMatrix(e.frame,this.maskSprite,this.maskMatrix),this.uniforms.otherMatrix.value=this.maskMatrix.toArray(!0),this.uniforms.scale.value.x=this.scale.x*(1/e.frame.width),this.uniforms.scale.value.y=this.scale.y*(1/e.frame.height);var n=this.getShader(t);i.applyFilter(n,e,r)},Object.defineProperties(i.prototype,{map:{get:function(){return this.uniforms.mapSampler.value},set:function(t){this.uniforms.mapSampler.value=t}}})},{"../../core":45}],120:[function(t,e,r){function i(){n.AbstractFilter.call(this,null,"precision mediump float;\n\nvarying vec2 vTextureCoord;\nvarying vec4 vColor;\n\nuniform vec4 dimensions;\nuniform sampler2D uSampler;\n\nuniform float angle;\nuniform float scale;\n\nfloat pattern()\n{\n float s = sin(angle), c = cos(angle);\n vec2 tex = vTextureCoord * dimensions.xy;\n vec2 point = vec2(\n c * tex.x - s * tex.y,\n s * tex.x + c * tex.y\n ) * scale;\n return (sin(point.x) * sin(point.y)) * 4.0;\n}\n\nvoid main()\n{\n vec4 color = texture2D(uSampler, vTextureCoord);\n float average = (color.r + color.g + color.b) / 3.0;\n gl_FragColor = vec4(vec3(average * 10.0 - 5.0 + pattern()), color.a);\n}\n",{scale:{type:"1f",value:1},angle:{type:"1f",value:5},dimensions:{type:"4fv",value:[0,0,0,0]}})}var n=t("../../core");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i,Object.defineProperties(i.prototype,{scale:{get:function(){return this.uniforms.scale.value},set:function(t){this.uniforms.scale.value=t}},angle:{get:function(){return this.uniforms.angle.value},set:function(t){this.uniforms.angle.value=t}}})},{"../../core":45}],121:[function(t,e,r){function i(){n.AbstractFilter.call(this,"attribute vec2 aVertexPosition;\nattribute vec2 aTextureCoord;\nattribute vec4 aColor;\n\nuniform float strength;\nuniform vec2 offset;\n\nuniform mat3 projectionMatrix;\n\nvarying vec2 vTextureCoord;\nvarying vec4 vColor;\nvarying vec2 vBlurTexCoords[6];\n\nvoid main(void)\n{\n gl_Position = vec4((projectionMatrix * vec3((aVertexPosition+offset), 1.0)).xy, 0.0, 1.0);\n vTextureCoord = aTextureCoord;\n\n vBlurTexCoords[ 0] = aTextureCoord + vec2(0.0, -0.012 * strength);\n vBlurTexCoords[ 1] = aTextureCoord + vec2(0.0, -0.008 * strength);\n vBlurTexCoords[ 2] = aTextureCoord + vec2(0.0, -0.004 * strength);\n vBlurTexCoords[ 3] = aTextureCoord + vec2(0.0, 0.004 * strength);\n vBlurTexCoords[ 4] = aTextureCoord + vec2(0.0, 0.008 * strength);\n vBlurTexCoords[ 5] = aTextureCoord + vec2(0.0, 0.012 * strength);\n\n vColor = vec4(aColor.rgb * aColor.a, aColor.a);\n}\n","precision lowp float;\n\nvarying vec2 vTextureCoord;\nvarying vec2 vBlurTexCoords[6];\nvarying vec4 vColor;\n\nuniform vec3 color;\nuniform float alpha;\n\nuniform sampler2D uSampler;\n\nvoid main(void)\n{\n vec4 sum = vec4(0.0);\n\n sum += texture2D(uSampler, vBlurTexCoords[ 0])*0.004431848411938341;\n sum += texture2D(uSampler, vBlurTexCoords[ 1])*0.05399096651318985;\n sum += texture2D(uSampler, vBlurTexCoords[ 2])*0.2419707245191454;\n sum += texture2D(uSampler, vTextureCoord )*0.3989422804014327;\n sum += texture2D(uSampler, vBlurTexCoords[ 3])*0.2419707245191454;\n sum += texture2D(uSampler, vBlurTexCoords[ 4])*0.05399096651318985;\n sum += texture2D(uSampler, vBlurTexCoords[ 5])*0.004431848411938341;\n\n gl_FragColor = vec4( color.rgb * sum.a * alpha, sum.a * alpha );\n}\n",{blur:{type:"1f",value:1/512},color:{type:"c",value:[0,0,0]},alpha:{type:"1f",value:.7},offset:{type:"2f",value:[5,5]},strength:{type:"1f",value:1}}),this.passes=1,this.strength=4}var n=t("../../core");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.applyFilter=function(t,e,r,i){var n=this.getShader(t);if(this.uniforms.strength.value=this.strength/4/this.passes*(e.frame.height/e.size.height),1===this.passes)t.filterManager.applyFilter(n,e,r,i);else{for(var o=t.filterManager.getRenderTarget(!0),s=e,a=o,h=0;h= (time - params.z)) )\n {\n float diff = (dist - time);\n float powDiff = 1.0 - pow(abs(diff*params.x), params.y);\n\n float diffTime = diff * powDiff;\n vec2 diffUV = normalize(uv - center);\n texCoord = uv + (diffUV * diffTime);\n }\n\n gl_FragColor = texture2D(uSampler, texCoord);\n}\n",{center:{type:"v2",value:{x:.5,y:.5}},params:{type:"v3",value:{x:10,y:.8,z:.1}},time:{type:"1f",value:0}})}var n=t("../../core");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i,Object.defineProperties(i.prototype,{center:{get:function(){return this.uniforms.center.value},set:function(t){this.uniforms.center.value=t}},params:{get:function(){return this.uniforms.params.value},set:function(t){this.uniforms.params.value=t}},time:{get:function(){return this.uniforms.time.value},set:function(t){this.uniforms.time.value=t}}})},{"../../core":45}],131:[function(t,e,r){function i(){n.AbstractFilter.call(this,null,"precision mediump float;\n\nvarying vec2 vTextureCoord;\n\nuniform sampler2D uSampler;\nuniform float blur;\nuniform float gradientBlur;\nuniform vec2 start;\nuniform vec2 end;\nuniform vec2 delta;\nuniform vec2 texSize;\n\nfloat random(vec3 scale, float seed)\n{\n return fract(sin(dot(gl_FragCoord.xyz + seed, scale)) * 43758.5453 + seed);\n}\n\nvoid main(void)\n{\n vec4 color = vec4(0.0);\n float total = 0.0;\n\n float offset = random(vec3(12.9898, 78.233, 151.7182), 0.0);\n vec2 normal = normalize(vec2(start.y - end.y, end.x - start.x));\n float radius = smoothstep(0.0, 1.0, abs(dot(vTextureCoord * texSize - start, normal)) / gradientBlur) * blur;\n\n for (float t = -30.0; t <= 30.0; t++)\n {\n float percent = (t + offset - 0.5) / 30.0;\n float weight = 1.0 - abs(percent);\n vec4 sample = texture2D(uSampler, vTextureCoord + delta / texSize * percent * radius);\n sample.rgb *= sample.a;\n color += sample * weight;\n total += weight;\n }\n\n gl_FragColor = color / total;\n gl_FragColor.rgb /= gl_FragColor.a + 0.00001;\n}\n",{blur:{type:"1f",value:100},gradientBlur:{type:"1f",value:600},start:{type:"v2",value:{x:0,y:window.innerHeight/2}},end:{type:"v2",value:{x:600,y:window.innerHeight/2}},delta:{type:"v2",value:{x:30,y:30}},texSize:{type:"v2",value:{x:window.innerWidth,y:window.innerHeight}}}),this.updateDelta()}var n=t("../../core");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.updateDelta=function(){this.uniforms.delta.value.x=0,this.uniforms.delta.value.y=0},Object.defineProperties(i.prototype,{blur:{get:function(){return this.uniforms.blur.value},set:function(t){this.uniforms.blur.value=t}},gradientBlur:{get:function(){return this.uniforms.gradientBlur.value},set:function(t){this.uniforms.gradientBlur.value=t}},start:{get:function(){return this.uniforms.start.value},set:function(t){this.uniforms.start.value=t,this.updateDelta()}},end:{get:function(){return this.uniforms.end.value},set:function(t){this.uniforms.end.value=t,this.updateDelta()}}})},{"../../core":45}],132:[function(t,e,r){function i(){n.AbstractFilter.call(this),this.tiltShiftXFilter=new o,this.tiltShiftYFilter=new s}var n=t("../../core"),o=t("./TiltShiftXFilter"),s=t("./TiltShiftYFilter");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.applyFilter=function(t,e,r){var i=t.filterManager.getRenderTarget(!0);this.tiltShiftXFilter.applyFilter(t,e,i),this.tiltShiftYFilter.applyFilter(t,i,r),t.filterManager.returnRenderTarget(i)},Object.defineProperties(i.prototype,{blur:{get:function(){return this.tiltShiftXFilter.blur},set:function(t){this.tiltShiftXFilter.blur=this.tiltShiftYFilter.blur=t}},gradientBlur:{get:function(){return this.tiltShiftXFilter.gradientBlur},set:function(t){this.tiltShiftXFilter.gradientBlur=this.tiltShiftYFilter.gradientBlur=t}},start:{get:function(){return this.tiltShiftXFilter.start},set:function(t){this.tiltShiftXFilter.start=this.tiltShiftYFilter.start=t}},end:{get:function(){return this.tiltShiftXFilter.end},set:function(t){this.tiltShiftXFilter.end=this.tiltShiftYFilter.end=t}}})},{"../../core":45,"./TiltShiftXFilter":133,"./TiltShiftYFilter":134}],133:[function(t,e,r){function i(){n.call(this)}var n=t("./TiltShiftAxisFilter");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.updateDelta=function(){var t=this.uniforms.end.value.x-this.uniforms.start.value.x,e=this.uniforms.end.value.y-this.uniforms.start.value.y,r=Math.sqrt(t*t+e*e);this.uniforms.delta.value.x=t/r,this.uniforms.delta.value.y=e/r}},{"./TiltShiftAxisFilter":131}],134:[function(t,e,r){function i(){n.call(this)}var n=t("./TiltShiftAxisFilter");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.updateDelta=function(){var t=this.uniforms.end.value.x-this.uniforms.start.value.x,e=this.uniforms.end.value.y-this.uniforms.start.value.y,r=Math.sqrt(t*t+e*e);this.uniforms.delta.value.x=-e/r,this.uniforms.delta.value.y=t/r}},{"./TiltShiftAxisFilter":131}],135:[function(t,e,r){function i(){n.AbstractFilter.call(this,null,"precision mediump float;\n\nvarying vec2 vTextureCoord;\n\nuniform sampler2D uSampler;\nuniform float radius;\nuniform float angle;\nuniform vec2 offset;\n\nvoid main(void)\n{\n vec2 coord = vTextureCoord - offset;\n float dist = length(coord);\n\n if (dist < radius)\n {\n float ratio = (radius - dist) / radius;\n float angleMod = ratio * ratio * angle;\n float s = sin(angleMod);\n float c = cos(angleMod);\n coord = vec2(coord.x * c - coord.y * s, coord.x * s + coord.y * c);\n }\n\n gl_FragColor = texture2D(uSampler, coord+offset);\n}\n",{radius:{type:"1f",value:.5},angle:{type:"1f",value:5},offset:{type:"v2",value:{x:.5,y:.5}}})}var n=t("../../core");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i,Object.defineProperties(i.prototype,{offset:{get:function(){return this.uniforms.offset.value},set:function(t){this.uniforms.offset.value=t}},radius:{get:function(){return this.uniforms.radius.value},set:function(t){this.uniforms.radius.value=t}},angle:{get:function(){return this.uniforms.angle.value},set:function(t){this.uniforms.angle.value=t}}})},{"../../core":45}],136:[function(t,e,r){(function(r){t("./polyfill");var i=e.exports=t("./core");i.extras=t("./extras"),i.filters=t("./filters"),i.interaction=t("./interaction"),i.loaders=t("./loaders"),i.mesh=t("./mesh"),i.accessibility=t("./accessibility"),i.loader=new i.loaders.Loader,Object.assign(i,t("./deprecation")),r.PIXI=i}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{"./accessibility":37,"./core":45,"./deprecation":100,"./extras":107,"./filters":124,"./interaction":139,"./loaders":142,"./mesh":149,"./polyfill":154}],137:[function(t,e,r){function i(){this.global=new n.Point,this.target=null,this.originalEvent=null}var n=t("../core");i.prototype.constructor=i,e.exports=i,i.prototype.getLocalPosition=function(t,e,r){return t.worldTransform.applyInverse(r||this.global,e)}},{"../core":45}],138:[function(t,e,r){function i(t,e){e=e||{},this.renderer=t,this.autoPreventDefault=void 0!==e.autoPreventDefault?e.autoPreventDefault:!0,this.interactionFrequency=e.interactionFrequency||10,this.mouse=new o,this.eventData={stopped:!1,target:null,type:null,data:this.mouse,stopPropagation:function(){this.stopped=!0}},this.interactiveDataPool=[],this.interactionDOMElement=null,this.eventsAdded=!1,this.onMouseUp=this.onMouseUp.bind(this),this.processMouseUp=this.processMouseUp.bind(this),this.onMouseDown=this.onMouseDown.bind(this),this.processMouseDown=this.processMouseDown.bind(this),this.onMouseMove=this.onMouseMove.bind(this),this.processMouseMove=this.processMouseMove.bind(this),this.onMouseOut=this.onMouseOut.bind(this),this.processMouseOverOut=this.processMouseOverOut.bind(this),this.onTouchStart=this.onTouchStart.bind(this),this.processTouchStart=this.processTouchStart.bind(this),this.onTouchEnd=this.onTouchEnd.bind(this),this.processTouchEnd=this.processTouchEnd.bind(this),this.onTouchMove=this.onTouchMove.bind(this),this.processTouchMove=this.processTouchMove.bind(this),this.last=0,this.currentCursorStyle="inherit",this._tempPoint=new n.Point,this.resolution=1,this.setTargetElement(this.renderer.view,this.renderer.resolution)}var n=t("../core"),o=t("./InteractionData");Object.assign(n.DisplayObject.prototype,t("./interactiveTarget")),i.prototype.constructor=i,e.exports=i,i.prototype.setTargetElement=function(t,e){this.removeEvents(),this.interactionDOMElement=t,this.resolution=e||1,this.addEvents()},i.prototype.addEvents=function(){this.interactionDOMElement&&(n.ticker.shared.add(this.update,this),window.navigator.msPointerEnabled&&(this.interactionDOMElement.style["-ms-content-zooming"]="none",this.interactionDOMElement.style["-ms-touch-action"]="none"),window.document.addEventListener("mousemove",this.onMouseMove,!0),this.interactionDOMElement.addEventListener("mousedown",this.onMouseDown,!0),this.interactionDOMElement.addEventListener("mouseout",this.onMouseOut,!0),this.interactionDOMElement.addEventListener("touchstart",this.onTouchStart,!0),this.interactionDOMElement.addEventListener("touchend",this.onTouchEnd,!0),this.interactionDOMElement.addEventListener("touchmove",this.onTouchMove,!0),window.addEventListener("mouseup",this.onMouseUp,!0),this.eventsAdded=!0)},i.prototype.removeEvents=function(){this.interactionDOMElement&&(n.ticker.shared.remove(this.update),window.navigator.msPointerEnabled&&(this.interactionDOMElement.style["-ms-content-zooming"]="",this.interactionDOMElement.style["-ms-touch-action"]=""),window.document.removeEventListener("mousemove",this.onMouseMove,!0),this.interactionDOMElement.removeEventListener("mousedown",this.onMouseDown,!0),this.interactionDOMElement.removeEventListener("mouseout",this.onMouseOut,!0),this.interactionDOMElement.removeEventListener("touchstart",this.onTouchStart,!0),this.interactionDOMElement.removeEventListener("touchend",this.onTouchEnd,!0),this.interactionDOMElement.removeEventListener("touchmove",this.onTouchMove,!0),this.interactionDOMElement=null,window.removeEventListener("mouseup",this.onMouseUp,!0),this.eventsAdded=!1)},i.prototype.update=function(t){if(this._deltaTime+=t,!(this._deltaTime=0;h--)this.processInteractive(t,a[h],r,i,s)&&(o=!0,s=!1,a[h].interactive&&(i=!1));return n&&(i&&!o&&(e.hitArea?(e.worldTransform.applyInverse(t,this._tempPoint),o=e.hitArea.contains(this._tempPoint.x,this._tempPoint.y)):e.containsPoint&&(o=e.containsPoint(t))),e.interactive&&r(e,o)),o},i.prototype.onMouseDown=function(t){this.mouse.originalEvent=t,this.eventData.data=this.mouse,this.eventData.stopped=!1,this.mapPositionToPoint(this.mouse.global,t.clientX,t.clientY),this.autoPreventDefault&&this.mouse.originalEvent.preventDefault(),this.processInteractive(this.mouse.global,this.renderer._lastObjectRendered,this.processMouseDown,!0)},i.prototype.processMouseDown=function(t,e){var r=this.mouse.originalEvent,i=2===r.button||3===r.which;e&&(t[i?"_isRightDown":"_isLeftDown"]=!0,this.dispatchEvent(t,i?"rightdown":"mousedown",this.eventData))},i.prototype.onMouseUp=function(t){this.mouse.originalEvent=t,this.eventData.data=this.mouse,this.eventData.stopped=!1,this.mapPositionToPoint(this.mouse.global,t.clientX,t.clientY),this.processInteractive(this.mouse.global,this.renderer._lastObjectRendered,this.processMouseUp,!0)},i.prototype.processMouseUp=function(t,e){var r=this.mouse.originalEvent,i=2===r.button||3===r.which,n=i?"_isRightDown":"_isLeftDown";e?(this.dispatchEvent(t,i?"rightup":"mouseup",this.eventData),t[n]&&(t[n]=!1,this.dispatchEvent(t,i?"rightclick":"click",this.eventData))):t[n]&&(t[n]=!1,this.dispatchEvent(t,i?"rightupoutside":"mouseupoutside",this.eventData))},i.prototype.onMouseMove=function(t){this.mouse.originalEvent=t,this.eventData.data=this.mouse,this.eventData.stopped=!1,this.mapPositionToPoint(this.mouse.global,t.clientX,t.clientY),this.didMove=!0,this.cursor="inherit",this.processInteractive(this.mouse.global,this.renderer._lastObjectRendered,this.processMouseMove,!0),this.currentCursorStyle!==this.cursor&&(this.currentCursorStyle=this.cursor,this.interactionDOMElement.style.cursor=this.cursor)},i.prototype.processMouseMove=function(t,e){this.dispatchEvent(t,"mousemove",this.eventData),this.processMouseOverOut(t,e)},i.prototype.onMouseOut=function(t){this.mouse.originalEvent=t,this.eventData.stopped=!1,this.mapPositionToPoint(this.mouse.global,t.clientX,t.clientY),this.interactionDOMElement.style.cursor="inherit",this.mapPositionToPoint(this.mouse.global,t.clientX,t.clientY),this.processInteractive(this.mouse.global,this.renderer._lastObjectRendered,this.processMouseOverOut,!1)},i.prototype.processMouseOverOut=function(t,e){e?(t._over||(t._over=!0,this.dispatchEvent(t,"mouseover",this.eventData)),t.buttonMode&&(this.cursor=t.defaultCursor)):t._over&&(t._over=!1,this.dispatchEvent(t,"mouseout",this.eventData))},i.prototype.onTouchStart=function(t){this.autoPreventDefault&&t.preventDefault();for(var e=t.changedTouches,r=e.length,i=0;r>i;i++){var n=e[i],o=this.getTouchData(n);o.originalEvent=t,this.eventData.data=o,this.eventData.stopped=!1,this.processInteractive(o.global,this.renderer._lastObjectRendered,this.processTouchStart,!0),this.returnTouchData(o)}},i.prototype.processTouchStart=function(t,e){e&&(t._touchDown=!0,this.dispatchEvent(t,"touchstart",this.eventData))},i.prototype.onTouchEnd=function(t){this.autoPreventDefault&&t.preventDefault();for(var e=t.changedTouches,r=e.length,i=0;r>i;i++){var n=e[i],o=this.getTouchData(n);o.originalEvent=t,this.eventData.data=o,this.eventData.stopped=!1,this.processInteractive(o.global,this.renderer._lastObjectRendered,this.processTouchEnd,!0),this.returnTouchData(o)}},i.prototype.processTouchEnd=function(t,e){e?(this.dispatchEvent(t,"touchend",this.eventData),t._touchDown&&(t._touchDown=!1,this.dispatchEvent(t,"tap",this.eventData))):t._touchDown&&(t._touchDown=!1,this.dispatchEvent(t,"touchendoutside",this.eventData))},i.prototype.onTouchMove=function(t){this.autoPreventDefault&&t.preventDefault();for(var e=t.changedTouches,r=e.length,i=0;r>i;i++){var n=e[i],o=this.getTouchData(n);o.originalEvent=t,this.eventData.data=o,this.eventData.stopped=!1,this.processInteractive(o.global,this.renderer._lastObjectRendered,this.processTouchMove,!0),this.returnTouchData(o)}},i.prototype.processTouchMove=function(t,e){e=e,this.dispatchEvent(t,"touchmove",this.eventData)},i.prototype.getTouchData=function(t){var e=this.interactiveDataPool.pop();return e||(e=new o),e.identifier=t.identifier,this.mapPositionToPoint(e.global,t.clientX,t.clientY),navigator.isCocoonJS&&(e.global.x=e.global.x/this.resolution,e.global.y=e.global.y/this.resolution),t.globalX=e.global.x,t.globalY=e.global.y,e},i.prototype.returnTouchData=function(t){ -this.interactiveDataPool.push(t)},i.prototype.destroy=function(){this.removeEvents(),this.renderer=null,this.mouse=null,this.eventData=null,this.interactiveDataPool=null,this.interactionDOMElement=null,this.onMouseUp=null,this.processMouseUp=null,this.onMouseDown=null,this.processMouseDown=null,this.onMouseMove=null,this.processMouseMove=null,this.onMouseOut=null,this.processMouseOverOut=null,this.onTouchStart=null,this.processTouchStart=null,this.onTouchEnd=null,this.processTouchEnd=null,this.onTouchMove=null,this.processTouchMove=null,this._tempPoint=null},n.WebGLRenderer.registerPlugin("interaction",i),n.CanvasRenderer.registerPlugin("interaction",i)},{"../core":45,"./InteractionData":137,"./interactiveTarget":140}],139:[function(t,e,r){e.exports={InteractionData:t("./InteractionData"),InteractionManager:t("./InteractionManager"),interactiveTarget:t("./interactiveTarget")}},{"./InteractionData":137,"./InteractionManager":138,"./interactiveTarget":140}],140:[function(t,e,r){var i={interactive:!1,buttonMode:!1,interactiveChildren:!0,defaultCursor:"pointer",_over:!1,_touchDown:!1};e.exports=i},{}],141:[function(t,e,r){function i(t,e){var r={},i=t.data.getElementsByTagName("info")[0],n=t.data.getElementsByTagName("common")[0];r.font=i.getAttribute("face"),r.size=parseInt(i.getAttribute("size"),10),r.lineHeight=parseInt(n.getAttribute("lineHeight"),10),r.chars={};for(var a=t.data.getElementsByTagName("char"),h=0;hn;n++){var o=2*n;this._renderCanvasDrawTriangle(t,e,r,o,o+2,o+4)}},i.prototype._renderCanvasTriangles=function(t){for(var e=this.vertices,r=this.uvs,i=this.indices,n=i.length,o=0;n>o;o+=3){var s=2*i[o],a=2*i[o+1],h=2*i[o+2];this._renderCanvasDrawTriangle(t,e,r,s,a,h)}},i.prototype._renderCanvasDrawTriangle=function(t,e,r,i,n,o){var s=this._texture.baseTexture.source,a=this._texture.baseTexture.width,h=this._texture.baseTexture.height,u=e[i],l=e[n],c=e[o],p=e[i+1],d=e[n+1],f=e[o+1],v=r[i]*a,g=r[n]*a,m=r[o]*a,y=r[i+1]*h,x=r[n+1]*h,b=r[o+1]*h;if(this.canvasPadding>0){var _=this.canvasPadding/this.worldTransform.a,T=this.canvasPadding/this.worldTransform.d,E=(u+l+c)/3,S=(p+d+f)/3,w=u-E,C=p-S,A=Math.sqrt(w*w+C*C);u=E+w/A*(A+_),p=S+C/A*(A+T),w=l-E,C=d-S,A=Math.sqrt(w*w+C*C),l=E+w/A*(A+_),d=S+C/A*(A+T),w=c-E,C=f-S,A=Math.sqrt(w*w+C*C),c=E+w/A*(A+_),f=S+C/A*(A+T)}t.save(),t.beginPath(),t.moveTo(u,p),t.lineTo(l,d),t.lineTo(c,f),t.closePath(),t.clip();var M=v*x+y*m+g*b-x*m-y*g-v*b,R=u*x+y*c+l*b-x*c-y*l-u*b,O=v*l+u*m+g*c-l*m-u*g-v*c,D=v*x*c+y*l*m+u*g*b-u*x*m-y*g*c-v*l*b,P=p*x+y*f+d*b-x*f-y*d-p*b,F=v*d+p*m+g*f-d*m-p*g-v*f,L=v*x*f+y*d*m+p*g*b-p*x*m-y*g*f-v*d*b;t.transform(R/M,P/M,O/M,F/M,D/M,L/M),t.drawImage(s,0,0),t.restore()},i.prototype.renderMeshFlat=function(t){var e=this.context,r=t.vertices,i=r.length/2;e.beginPath();for(var n=1;i-2>n;n++){var o=2*n,s=r[o],a=r[o+2],h=r[o+4],u=r[o+1],l=r[o+3],c=r[o+5];e.moveTo(s,u),e.lineTo(a,l),e.lineTo(h,c)}e.fillStyle="#FF0000",e.fill(),e.closePath()},i.prototype._onTextureUpdate=function(){this.updateFrame=!0},i.prototype.getBounds=function(t){if(!this._currentBounds){for(var e=t||this.worldTransform,r=e.a,i=e.b,o=e.c,s=e.d,a=e.tx,h=e.ty,u=-(1/0),l=-(1/0),c=1/0,p=1/0,d=this.vertices,f=0,v=d.length;v>f;f+=2){var g=d[f],m=d[f+1],y=r*g+o*m+a,x=s*m+i*g+h;c=c>y?y:c,p=p>x?x:p,u=y>u?y:u,l=x>l?x:l}if(c===-(1/0)||l===1/0)return n.Rectangle.EMPTY;var b=this._bounds;b.x=c,b.width=u-c,b.y=p,b.height=l-p,this._currentBounds=b}return this._currentBounds},i.prototype.containsPoint=function(t){if(!this.getBounds().contains(t.x,t.y))return!1;this.worldTransform.applyInverse(t,o);var e,r,n=this.vertices,a=s.points;if(this.drawMode===i.DRAW_MODES.TRIANGLES){var h=this.indices;for(r=this.indices.length,e=0;r>e;e+=3){var u=2*h[e],l=2*h[e+1],c=2*h[e+2];if(a[0]=n[u],a[1]=n[u+1],a[2]=n[l],a[3]=n[l+1],a[4]=n[c],a[5]=n[c+1],s.contains(o.x,o.y))return!0}}else for(r=n.length,e=0;r>e;e+=6)if(a[0]=n[e],a[1]=n[e+1],a[2]=n[e+2],a[3]=n[e+3],a[4]=n[e+4],a[5]=n[e+5],s.contains(o.x,o.y))return!0;return!1},i.DRAW_MODES={TRIANGLE_MESH:0,TRIANGLES:1}},{"../core":45}],147:[function(t,e,r){function i(t,e,r){n.call(this,t),this._ready=!0,this.segmentsX=e||10,this.segmentsY=r||10,this.drawMode=n.DRAW_MODES.TRIANGLES,this.refresh()}var n=t("./Mesh");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.refresh=function(){var t=this.segmentsX*this.segmentsY,e=[],r=[],i=[],n=[],o=this.texture,s=this.segmentsX-1,a=this.segmentsY-1,h=0,u=o.width/s,l=o.height/a;for(h=0;t>h;h++){var c=h%this.segmentsX,p=h/this.segmentsX|0;e.push(c*u,p*l),i.push(o._uvs.x0+(o._uvs.x1-o._uvs.x0)*(c/(this.segmentsX-1)),o._uvs.y0+(o._uvs.y3-o._uvs.y0)*(p/(this.segmentsY-1)))}var d=s*a;for(h=0;d>h;h++){var f=h%s,v=h/s|0,g=v*this.segmentsX+f,m=v*this.segmentsX+f+1,y=(v+1)*this.segmentsX+f,x=(v+1)*this.segmentsX+f+1;n.push(g,m,y),n.push(m,x,y)}this.vertices=new Float32Array(e),this.uvs=new Float32Array(i),this.colors=new Float32Array(r),this.indices=new Uint16Array(n)},i.prototype._onTextureUpdate=function(){n.prototype._onTextureUpdate.call(this),this._ready&&this.refresh()}},{"./Mesh":146}],148:[function(t,e,r){function i(t,e){n.call(this,t),this.points=e,this.vertices=new Float32Array(4*e.length),this.uvs=new Float32Array(4*e.length),this.colors=new Float32Array(2*e.length),this.indices=new Uint16Array(2*e.length),this._ready=!0,this.refresh()}var n=t("./Mesh"),o=t("../core");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.refresh=function(){var t=this.points;if(!(t.length<1)&&this._texture._uvs){var e=this.uvs,r=this.indices,i=this.colors,n=this._texture._uvs,s=new o.Point(n.x0,n.y0),a=new o.Point(n.x2-n.x0,n.y2-n.y0);e[0]=0+s.x,e[1]=0+s.y,e[2]=0+s.x,e[3]=1*a.y+s.y,i[0]=1,i[1]=1,r[0]=0,r[1]=1;for(var h,u,l,c=t.length,p=1;c>p;p++)h=t[p],u=4*p,l=p/(c-1),e[u]=l*a.x+s.x,e[u+1]=0+s.y,e[u+2]=l*a.x+s.x,e[u+3]=1*a.y+s.y,u=2*p,i[u]=1,i[u+1]=1,u=2*p,r[u]=u,r[u+1]=u+1;this.dirty=!0}},i.prototype._onTextureUpdate=function(){n.prototype._onTextureUpdate.call(this),this._ready&&this.refresh()},i.prototype.updateTransform=function(){var t=this.points;if(!(t.length<1)){for(var e,r,i,n,o,s,a=t[0],h=0,u=0,l=this.vertices,c=t.length,p=0;c>p;p++)r=t[p],i=4*p,e=p1&&(n=1),o=Math.sqrt(h*h+u*u),s=this._texture.height/2,h/=o,u/=o,h*=s,u*=s,l[i]=r.x+h,l[i+1]=r.y+u,l[i+2]=r.x-h,l[i+3]=r.y-u,a=r;this.containerUpdateTransform()}}},{"../core":45,"./Mesh":146}],149:[function(t,e,r){e.exports={Mesh:t("./Mesh"),Plane:t("./Plane"),Rope:t("./Rope"),MeshRenderer:t("./webgl/MeshRenderer"),MeshShader:t("./webgl/MeshShader")}},{"./Mesh":146,"./Plane":147,"./Rope":148,"./webgl/MeshRenderer":150,"./webgl/MeshShader":151}],150:[function(t,e,r){function i(t){n.ObjectRenderer.call(this,t),this.indices=new Uint16Array(15e3);for(var e=0,r=0;15e3>e;e+=6,r+=4)this.indices[e+0]=r+0,this.indices[e+1]=r+1,this.indices[e+2]=r+2,this.indices[e+3]=r+0,this.indices[e+4]=r+2,this.indices[e+5]=r+3;this.currentShader=null}var n=t("../../core"),o=t("../Mesh");i.prototype=Object.create(n.ObjectRenderer.prototype),i.prototype.constructor=i,e.exports=i,n.WebGLRenderer.registerPlugin("mesh",i),i.prototype.onContextChange=function(){},i.prototype.render=function(t){t._vertexBuffer||this._initWebGL(t);var e=this.renderer,r=e.gl,i=t._texture.baseTexture,n=t.shader,s=t.drawMode===o.DRAW_MODES.TRIANGLE_MESH?r.TRIANGLE_STRIP:r.TRIANGLES;e.blendModeManager.setBlendMode(t.blendMode),n=n?n.shaders[r.id]||n.getShader(e):e.shaderManager.plugins.meshShader,this.renderer.shaderManager.setShader(n),n.uniforms.translationMatrix.value=t.worldTransform.toArray(!0),n.uniforms.projectionMatrix.value=e.currentRenderTarget.projectionMatrix.toArray(!0),n.uniforms.alpha.value=t.worldAlpha,n.syncUniforms(),t.dirty?(t.dirty=!1,r.bindBuffer(r.ARRAY_BUFFER,t._vertexBuffer),r.bufferData(r.ARRAY_BUFFER,t.vertices,r.STATIC_DRAW),r.vertexAttribPointer(n.attributes.aVertexPosition,2,r.FLOAT,!1,0,0),r.bindBuffer(r.ARRAY_BUFFER,t._uvBuffer),r.bufferData(r.ARRAY_BUFFER,t.uvs,r.STATIC_DRAW),r.vertexAttribPointer(n.attributes.aTextureCoord,2,r.FLOAT,!1,0,0),r.activeTexture(r.TEXTURE0),i._glTextures[r.id]?r.bindTexture(r.TEXTURE_2D,i._glTextures[r.id]):this.renderer.updateTexture(i),r.bindBuffer(r.ELEMENT_ARRAY_BUFFER,t._indexBuffer),r.bufferData(r.ELEMENT_ARRAY_BUFFER,t.indices,r.STATIC_DRAW)):(r.bindBuffer(r.ARRAY_BUFFER,t._vertexBuffer),r.bufferSubData(r.ARRAY_BUFFER,0,t.vertices),r.vertexAttribPointer(n.attributes.aVertexPosition,2,r.FLOAT,!1,0,0),r.bindBuffer(r.ARRAY_BUFFER,t._uvBuffer),r.vertexAttribPointer(n.attributes.aTextureCoord,2,r.FLOAT,!1,0,0),r.activeTexture(r.TEXTURE0),i._glTextures[r.id]?r.bindTexture(r.TEXTURE_2D,i._glTextures[r.id]):this.renderer.updateTexture(i),r.bindBuffer(r.ELEMENT_ARRAY_BUFFER,t._indexBuffer),r.bufferSubData(r.ELEMENT_ARRAY_BUFFER,0,t.indices)),r.drawElements(s,t.indices.length,r.UNSIGNED_SHORT,0)},i.prototype._initWebGL=function(t){var e=this.renderer.gl;t._vertexBuffer=e.createBuffer(),t._indexBuffer=e.createBuffer(),t._uvBuffer=e.createBuffer(),e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferData(e.ARRAY_BUFFER,t.vertices,e.DYNAMIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferData(e.ARRAY_BUFFER,t.uvs,e.STATIC_DRAW),t.colors&&(t._colorBuffer=e.createBuffer(),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.bufferData(e.ARRAY_BUFFER,t.colors,e.STATIC_DRAW)),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer),e.bufferData(e.ELEMENT_ARRAY_BUFFER,t.indices,e.STATIC_DRAW)},i.prototype.flush=function(){},i.prototype.start=function(){this.currentShader=null},i.prototype.destroy=function(){n.ObjectRenderer.prototype.destroy.call(this)}},{"../../core":45,"../Mesh":146}],151:[function(t,e,r){function i(t){n.Shader.call(this,t,["precision lowp float;","attribute vec2 aVertexPosition;","attribute vec2 aTextureCoord;","uniform mat3 translationMatrix;","uniform mat3 projectionMatrix;","varying vec2 vTextureCoord;","void main(void){"," gl_Position = vec4((projectionMatrix * translationMatrix * vec3(aVertexPosition, 1.0)).xy, 0.0, 1.0);"," vTextureCoord = aTextureCoord;","}"].join("\n"),["precision lowp float;","varying vec2 vTextureCoord;","uniform float alpha;","uniform sampler2D uSampler;","void main(void){"," gl_FragColor = texture2D(uSampler, vTextureCoord) * alpha ;","}"].join("\n"),{alpha:{type:"1f",value:0},translationMatrix:{type:"mat3",value:new Float32Array(9)},projectionMatrix:{type:"mat3",value:new Float32Array(9)}},{aVertexPosition:0,aTextureCoord:0})}var n=t("../../core");i.prototype=Object.create(n.Shader.prototype),i.prototype.constructor=i,e.exports=i,n.ShaderManager.registerPlugin("meshShader",i)},{"../../core":45}],152:[function(t,e,r){Math.sign||(Math.sign=function(t){return t=+t,0===t||isNaN(t)?t:t>0?1:-1})},{}],153:[function(t,e,r){Object.assign||(Object.assign=t("object-assign"))},{"object-assign":26}],154:[function(t,e,r){t("./Object.assign"),t("./requestAnimationFrame"),t("./Math.sign")},{"./Math.sign":152,"./Object.assign":153,"./requestAnimationFrame":155}],155:[function(t,e,r){(function(t){if(Date.now&&Date.prototype.getTime||(Date.now=function(){return(new Date).getTime()}),!t.performance||!t.performance.now){var e=Date.now();t.performance||(t.performance={}),t.performance.now=function(){return Date.now()-e}}for(var r=Date.now(),i=["ms","moz","webkit","o"],n=0;ni&&(i=0),r=e,setTimeout(function(){r=Date.now(),t(performance.now())},i)}),t.cancelAnimationFrame||(t.cancelAnimationFrame=function(t){clearTimeout(t)})}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{}]},{},[136])(136)}); +!function(t){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=t();else if("function"==typeof define&&define.amd)define([],t);else{var e;e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:this,e.PIXI=t()}}(function(){var t;return function e(t,r,i){function n(s,a){if(!r[s]){if(!t[s]){var h="function"==typeof require&&require;if(!a&&h)return h(s,!0);if(o)return o(s,!0);var u=new Error("Cannot find module '"+s+"'");throw u.code="MODULE_NOT_FOUND",u}var l=r[s]={exports:{}};t[s][0].call(l.exports,function(e){var r=t[s][1][e];return n(r?r:e)},l,l.exports,e,t,r,i)}return r[s].exports}for(var o="function"==typeof require&&require,s=0;s=t.byteLength?i.bufferSubData(this.type,e,t):i.bufferData(this.type,t,this.drawType),this.data=t},n.prototype.bind=function(){var t=this.gl;t.bindBuffer(this.type,this.buffer)},n.createVertexBuffer=function(t,e,r){return new n(t,t.ARRAY_BUFFER,e,r)},n.createIndexBuffer=function(t,e,r){return new n(t,t.ELEMENT_ARRAY_BUFFER,e,r)},n.create=function(t,e,r,i){return new n(t,e,i)},e.exports=n},{}],3:[function(t,e,r){var i=t("./GLTexture"),n=function(t,e,r){this.gl=t,this.framebuffer=t.createFramebuffer(),this.stencil=null,this.texture=null,this.width=e||100,this.height=r||100};n.prototype.enableTexture=function(t){var e=this.gl;this.texture=t||new i(e),this.texture.bind(),this.bind(),e.framebufferTexture2D(e.FRAMEBUFFER,e.COLOR_ATTACHMENT0,e.TEXTURE_2D,this.texture.texture,0)},n.prototype.enableStencil=function(){if(!this.stencil){var t=this.gl;this.stencil=t.createRenderbuffer(),t.bindRenderbuffer(t.RENDERBUFFER,this.stencil),t.framebufferRenderbuffer(t.FRAMEBUFFER,t.DEPTH_STENCIL_ATTACHMENT,t.RENDERBUFFER,this.stencil),t.renderbufferStorage(t.RENDERBUFFER,t.DEPTH_STENCIL,this.width,this.height)}},n.prototype.clear=function(t,e,r,i){this.bind();var n=this.gl;n.clearColor(t,e,r,i),n.clear(n.COLOR_BUFFER_BIT)},n.prototype.bind=function(){var t=this.gl;t.bindFramebuffer(t.FRAMEBUFFER,this.framebuffer)},n.prototype.unbind=function(){gl.bindFramebuffer(gl.FRAMEBUFFER,null)},n.prototype.resize=function(t,e){var r=this.gl;this.width=t,this.height=e,this.texture&&this.texture.uploadData(null,t,e),this.stencil&&(r.bindRenderbuffer(r.RENDERBUFFER,this.stencil),r.renderbufferStorage(r.RENDERBUFFER,r.DEPTH_STENCIL,t,e))},n.prototype.destroy=function(){var t=this.gl;t.deleteFramebuffer(this.framebuffer)},n.createRGBA=function(t,e,r,o){var s=i.fromData(t,null,e,r);s.enableNearestScaling(),s.enableWrapClamp();var a=new n(t,e,r);return a.enableTexture(s),a},n.createFloat32=function(t,e,r,o){var s=new i.fromData(t,o,e,r);s.enableNearestScaling(),s.enableWrapClamp();var a=new n(t,e,r);return a.enableTexture(s),a},e.exports=n},{"./GLTexture":5}],4:[function(t,e,r){var i=t("./shader/compileProgram"),n=t("./shader/extractAttributes"),o=t("./shader/extractUniforms"),s=t("./shader/generateUniformAccessObject"),a=function(t,e,r){this.gl=t,this.program=i(t,e,r),this.attributes=n(t,this.program);var a=o(t,this.program);this.uniforms=s(t,a)};a.prototype.bind=function(){this.gl.useProgram(this.program)},a.prototype.destroy=function(){this.gl},e.exports=a},{"./shader/compileProgram":9,"./shader/extractAttributes":11,"./shader/extractUniforms":12,"./shader/generateUniformAccessObject":13}],5:[function(t,e,r){var i=function(t,e,r,i,n){this.gl=t,this.texture=t.createTexture(),this.mipmap=!1,this.premultiplyAlpha=!1,this.width=e||0,this.height=r||0,this.format=i||t.RGBA,this.type=n||t.UNSIGNED_BYTE};i.prototype.upload=function(t){this.bind();var e=this.gl;this.width=t.width,this.height=t.height,e.pixelStorei(e.UNPACK_PREMULTIPLY_ALPHA_WEBGL,this.premultiplyAlpha),e.texImage2D(e.TEXTURE_2D,0,this.format,this.format,this.type,t)};var n=!1;i.prototype.uploadData=function(t,e,r){if(this.bind(),this.width=e||this.width,this.height=r||this.height,t instanceof Float32Array){if(!n){var i=gl.getExtension("OES_texture_float");if(!i)throw new Error("floating point textures not available");n=!0}this.type=gl.FLOAT}else this.type=gl.UNSIGNED_BYTE;gl.pixelStorei(gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL,this.premultiplyAlpha),gl.texImage2D(gl.TEXTURE_2D,0,this.format,this.width,this.height,0,this.format,this.type,t||null)},i.prototype.bind=function(t){var e=this.gl;void 0!==t&&e.activeTexture(e.TEXTURE0+t),e.bindTexture(e.TEXTURE_2D,this.texture)},i.prototype.unbind=function(){var t=this.gl;t.bindTexture(t.TEXTURE_2D,null)},i.prototype.minFilter=function(t){var e=this.gl;this.bind(),this.mipmap?e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MIN_FILTER,t?e.LINEAR_MIPMAP_LINEAR:e.NEAREST_MIPMAP_NEAREST):e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MIN_FILTER,t?e.LINEAR:e.NEAREST)},i.prototype.magFilter=function(t){var e=this.gl;this.bind(),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MAG_FILTER,t?e.LINEAR:e.NEAREST)},i.prototype.enableMipmap=function(){this.bind(),this.mipmap=!0,gl.generateMipmap(gl.TEXTURE_2D)},i.prototype.enableLinearScaling=function(){this.minFilter(!0),this.magFilter(!0)},i.prototype.enableNearestScaling=function(){this.minFilter(!1),this.magFilter(!1)},i.prototype.enableWrapClamp=function(){var t=this.gl;this.bind(),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_WRAP_S,t.CLAMP_TO_EDGE),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_WRAP_T,t.CLAMP_TO_EDGE)},i.prototype.enableWrapRepeat=function(){var t=this.gl;this.bind(),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_WRAP_S,t.REPEAT),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_WRAP_T,t.REPEAT)},i.prototype.destroy=function(){var t=this.gl;t.deleteTexture(this.texture)},i.fromSource=function(t,e,r){var n=new i(t);return n.premultiplyAlpha=r||!1,n.upload(e),n},i.fromData=function(t,e,r,n){var o=new i(t);return o.uploadData(e,r,n),o},e.exports=i},{}],6:[function(t,e,r){function i(t){this.nativeVaoExtension=t.getExtension("OES_vertex_array_object")||t.getExtension("MOZ_OES_vertex_array_object")||t.getExtension("WEBKIT_OES_vertex_array_object"),this.nativeVaoExtension&&(this.nativeVao=this.nativeVaoExtension.createVertexArrayOES()),this.gl=t,this.attributes=[],this.indexBuffer=null,this.dirty=!1}i.prototype.constructor=i,e.exports=i,i.prototype.bind=function(){this.nativeVao?(this.nativeVaoExtension.bindVertexArrayOES(this.nativeVao),this.dirty&&(this.dirty=!1,this.activate())):this.activate()},i.prototype.unbind=function(){this.nativeVao&&this.nativeVaoExtension.bindVertexArrayOES(null)},i.prototype.activate=function(){for(var t=this.gl,e=0;es;s++){var a=t.getActiveAttrib(e,s),h=i(t,a.type);r[a.name]={type:h,size:n(h),location:t.getAttribLocation(e,a.name),pointer:function(e,r,i,n){t.vertexAttribPointer(this.location,this.size,e||t.FLOAT,r||!1,i||0,n||0)}}}return r};e.exports=o},{"./mapSize":14,"./mapType":15}],12:[function(t,e,r){var i=t("./mapType"),n=t("./defaultValue"),o=function(t,e){for(var r={},o=t.getProgramParameter(e,t.ACTIVE_UNIFORMS),s=0;o>s;s++){var a=t.getActiveUniform(e,s),h=a.name.replace(/\[.*?\]/,""),u=i(t,a.type);r[h]={type:u,size:a.size,location:t.getUniformLocation(e,h),value:n(u,a.size)}}return r};e.exports=o},{"./defaultValue":10,"./mapType":15}],13:[function(t,e,r){var i=function(t,e){var r={data:{}};r.gl=t;for(var i=Object.keys(e),a=0;a=0&&t.length%1===0}function c(t,e){for(var r=-1,i=t.length;++ri?i:null}):(r=X(t),e=r.length,function(){return i++,e>i?r[i]:null})}function y(t,e){return e=null==e?t.length-1:+e,function(){for(var r=Math.max(arguments.length-e,0),i=Array(r),n=0;r>n;n++)i[n]=arguments[n+e];switch(e){case 0:return t.call(this,i);case 1:return t.call(this,arguments[0],i)}}}function x(t){return function(e,r,i){return t(e,i)}}function b(t){return function(e,r,i){i=u(i||n),e=e||[];var o=m(e);if(0>=t)return i(null);var s=!1,a=0,l=!1;!function c(){if(s&&0>=a)return i(null);for(;t>a&&!l;){var n=o();if(null===n)return s=!0,void(0>=a&&i(null));a+=1,r(e[n],n,h(function(t){a-=1,t?(i(t),l=!0):c()}))}}()}}function _(t){return function(e,r,i){return t(N.eachOf,e,r,i)}}function T(t){return function(e,r,i,n){return t(b(r),e,i,n)}}function E(t){return function(e,r,i){return t(N.eachOfSeries,e,r,i)}}function S(t,e,r,i){i=u(i||n),e=e||[];var o=l(e)?[]:{};t(e,function(t,e,i){r(t,function(t,r){o[e]=r,i(t)})},function(t){i(t,o)})}function w(t,e,r,i){var n=[];t(e,function(t,e,i){r(t,function(r){r&&n.push({index:e,value:t}),i()})},function(){i(p(n.sort(function(t,e){return t.index-e.index}),function(t){return t.value}))})}function C(t,e,r,i){w(t,e,function(t,e){r(t,function(t){e(!t)})},i)}function A(t,e,r){return function(i,n,o,s){function a(){s&&s(r(!1,void 0))}function h(t,i,n){return s?void o(t,function(i){s&&e(i)&&(s(r(!0,t)),s=o=!1),n()}):n()}arguments.length>3?t(i,n,h,a):(s=o,o=n,t(i,h,a))}}function M(t,e){return e}function R(t,e,r){r=r||n;var i=l(e)?[]:{};t(e,function(t,e,r){t(y(function(t,n){n.length<=1&&(n=n[0]),i[e]=n,r(t)}))},function(t){r(t,i)})}function O(t,e,r,i){var n=[];t(e,function(t,e,i){r(t,function(t,e){n=n.concat(e||[]),i(t)})},function(t){i(t,n)})}function P(t,e,r){function i(t,e,r,i){if(null!=i&&"function"!=typeof i)throw new Error("task callback must be a function");return t.started=!0,j(e)||(e=[e]),0===e.length&&t.idle()?N.setImmediate(function(){t.drain()}):(c(e,function(e){var o={data:e,callback:i||n};r?t.tasks.unshift(o):t.tasks.push(o),t.tasks.length===t.concurrency&&t.saturated()}),void N.setImmediate(t.process))}function o(t,e){return function(){s-=1;var r=!1,i=arguments;c(e,function(t){c(a,function(e,i){e!==t||r||(a.splice(i,1),r=!0)}),t.callback.apply(t,i)}),t.tasks.length+s===0&&t.drain(),t.process()}}if(null==e)e=1;else if(0===e)throw new Error("Concurrency must not be zero");var s=0,a=[],u={tasks:[],concurrency:e,payload:r,saturated:n,empty:n,drain:n,started:!1,paused:!1,push:function(t,e){i(u,t,!1,e)},kill:function(){u.drain=n,u.tasks=[]},unshift:function(t,e){i(u,t,!0,e)},process:function(){if(!u.paused&&s=e;e++)N.setImmediate(u.process)}}};return u}function D(t){return y(function(e,r){e.apply(null,r.concat([y(function(e,r){"object"==typeof console&&(e?console.error&&console.error(e):console[t]&&c(r,function(e){console[t](e)}))})]))})}function F(t){return function(e,r,i){t(d(e),r,i)}}function L(t){return y(function(e,r){var i=y(function(r){var i=this,n=r.pop();return t(e,function(t,e,n){t.apply(i,r.concat([n]))},n)});return r.length?i.apply(this,r):i})}function B(t){return y(function(e){var r=e.pop();e.push(function(){var t=arguments;i?N.setImmediate(function(){r.apply(null,t)}):r.apply(null,t)});var i=!0;t.apply(this,e),i=!1})}var I,N={},U="object"==typeof self&&self.self===self&&self||"object"==typeof i&&i.global===i&&i||this;null!=U&&(I=U.async),N.noConflict=function(){return U.async=I,N};var k=Object.prototype.toString,j=Array.isArray||function(t){return"[object Array]"===k.call(t)},G=function(t){var e=typeof t;return"function"===e||"object"===e&&!!t},X=Object.keys||function(t){var e=[];for(var r in t)t.hasOwnProperty(r)&&e.push(r);return e},Y="function"==typeof setImmediate&&setImmediate,z=Y?function(t){Y(t)}:function(t){setTimeout(t,0)};"object"==typeof e&&"function"==typeof e.nextTick?N.nextTick=e.nextTick:N.nextTick=z,N.setImmediate=Y?z:N.nextTick,N.forEach=N.each=function(t,e,r){return N.eachOf(t,x(e),r)},N.forEachSeries=N.eachSeries=function(t,e,r){return N.eachOfSeries(t,x(e),r)},N.forEachLimit=N.eachLimit=function(t,e,r,i){return b(e)(t,x(r),i)},N.forEachOf=N.eachOf=function(t,e,r){function i(t){a--,t?r(t):null===o&&0>=a&&r(null)}r=u(r||n),t=t||[];for(var o,s=m(t),a=0;null!=(o=s());)a+=1,e(t[o],o,h(i));0===a&&r(null)},N.forEachOfSeries=N.eachOfSeries=function(t,e,r){function i(){var n=!0;return null===s?r(null):(e(t[s],s,h(function(t){if(t)r(t);else{if(s=o(),null===s)return r(null);n?N.setImmediate(i):i()}})),void(n=!1))}r=u(r||n),t=t||[];var o=m(t),s=o();i()},N.forEachOfLimit=N.eachOfLimit=function(t,e,r,i){b(e)(t,r,i)},N.map=_(S),N.mapSeries=E(S),N.mapLimit=T(S),N.inject=N.foldl=N.reduce=function(t,e,r,i){N.eachOfSeries(t,function(t,i,n){r(e,t,function(t,r){e=r,n(t)})},function(t){i(t,e)})},N.foldr=N.reduceRight=function(t,e,r,i){var n=p(t,o).reverse();N.reduce(n,e,r,i)},N.transform=function(t,e,r,i){3===arguments.length&&(i=r,r=e,e=j(t)?[]:{}),N.eachOf(t,function(t,i,n){r(e,t,i,n)},function(t){i(t,e)})},N.select=N.filter=_(w),N.selectLimit=N.filterLimit=T(w),N.selectSeries=N.filterSeries=E(w),N.reject=_(C),N.rejectLimit=T(C),N.rejectSeries=E(C),N.any=N.some=A(N.eachOf,s,o),N.someLimit=A(N.eachOfLimit,s,o),N.all=N.every=A(N.eachOf,a,a),N.everyLimit=A(N.eachOfLimit,a,a),N.detect=A(N.eachOf,o,M),N.detectSeries=A(N.eachOfSeries,o,M),N.detectLimit=A(N.eachOfLimit,o,M),N.sortBy=function(t,e,r){function i(t,e){var r=t.criteria,i=e.criteria;return i>r?-1:r>i?1:0}N.map(t,function(t,r){e(t,function(e,i){e?r(e):r(null,{value:t,criteria:i})})},function(t,e){return t?r(t):void r(null,p(e.sort(i),function(t){return t.value}))})},N.auto=function(t,e,r){function i(t){d.unshift(t)}function o(t){var e=g(d,t);e>=0&&d.splice(e,1)}function s(){h--,c(d.slice(0),function(t){t()})}r||(r=e,e=null),r=u(r||n);var a=X(t),h=a.length;if(!h)return r(null);e||(e=h);var l={},p=0,d=[];i(function(){h||r(null,l)}),c(a,function(n){function a(){return e>p&&f(m,function(t,e){return t&&l.hasOwnProperty(e)},!0)&&!l.hasOwnProperty(n)}function h(){a()&&(p++,o(h),c[c.length-1](d,l))}for(var u,c=j(t[n])?t[n]:[t[n]],d=y(function(t,e){if(p--,e.length<=1&&(e=e[0]),t){var i={};v(l,function(t,e){i[e]=t}),i[n]=e,r(t,i)}else l[n]=e,N.setImmediate(s)}),m=c.slice(0,c.length-1),x=m.length;x--;){if(!(u=t[m[x]]))throw new Error("Has inexistant dependency");if(j(u)&&g(u,n)>=0)throw new Error("Has cyclic dependencies")}a()?(p++,c[c.length-1](d,l)):i(h)})},N.retry=function(t,e,r){function i(t,e){if("number"==typeof e)t.times=parseInt(e,10)||o;else{if("object"!=typeof e)throw new Error("Unsupported argument type for 'times': "+typeof e);t.times=parseInt(e.times,10)||o,t.interval=parseInt(e.interval,10)||s}}function n(t,e){function r(t,r){return function(i){t(function(t,e){i(!t||r,{err:t,result:e})},e)}}function i(t){return function(e){setTimeout(function(){e(null)},t)}}for(;h.times;){var n=!(h.times-=1);a.push(r(h.task,n)),!n&&h.interval>0&&a.push(i(h.interval))}N.series(a,function(e,r){r=r[r.length-1],(t||h.callback)(r.err,r.result)})}var o=5,s=0,a=[],h={times:o,interval:s},u=arguments.length;if(1>u||u>3)throw new Error("Invalid arguments - must be either (task), (task, callback), (times, task) or (times, task, callback)");return 2>=u&&"function"==typeof t&&(r=e,e=t),"function"!=typeof t&&i(h,t),h.callback=r,h.task=e,h.callback?n():n},N.waterfall=function(t,e){function r(t){return y(function(i,n){if(i)e.apply(null,[i].concat(n));else{var o=t.next();o?n.push(r(o)):n.push(e),B(t).apply(null,n)}})}if(e=u(e||n),!j(t)){var i=new Error("First argument to waterfall must be an array of functions");return e(i)}return t.length?void r(N.iterator(t))():e()},N.parallel=function(t,e){R(N.eachOf,t,e)},N.parallelLimit=function(t,e,r){R(b(e),t,r)},N.series=function(t,e){R(N.eachOfSeries,t,e)},N.iterator=function(t){function e(r){function i(){return t.length&&t[r].apply(null,arguments),i.next()}return i.next=function(){return ri;){var o=i+(n-i+1>>>1);r(e,t[o])>=0?i=o:n=o-1}return i}function o(t,e,o,s){if(null!=s&&"function"!=typeof s)throw new Error("task callback must be a function");return t.started=!0,j(e)||(e=[e]),0===e.length?N.setImmediate(function(){t.drain()}):void c(e,function(e){var a={data:e,priority:o,callback:"function"==typeof s?s:n};t.tasks.splice(i(t.tasks,a,r)+1,0,a),t.tasks.length===t.concurrency&&t.saturated(),N.setImmediate(t.process)})}var s=N.queue(t,e);return s.push=function(t,e,r){o(s,t,e,r)},delete s.unshift,s},N.cargo=function(t,e){return P(t,1,e)},N.log=D("log"),N.dir=D("dir"),N.memoize=function(t,e){var r={},i={};e=e||o;var n=y(function(n){var o=n.pop(),s=e.apply(null,n);s in r?N.setImmediate(function(){o.apply(null,r[s])}):s in i?i[s].push(o):(i[s]=[o],t.apply(null,n.concat([y(function(t){r[s]=t;var e=i[s];delete i[s];for(var n=0,o=e.length;o>n;n++)e[n].apply(null,t)})])))});return n.memo=r,n.unmemoized=t,n},N.unmemoize=function(t){return function(){return(t.unmemoized||t).apply(null,arguments)}},N.times=F(N.map),N.timesSeries=F(N.mapSeries),N.timesLimit=function(t,e,r,i){return N.mapLimit(d(t),e,r,i)},N.seq=function(){var t=arguments;return y(function(e){var r=this,i=e[e.length-1];"function"==typeof i?e.pop():i=n,N.reduce(t,e,function(t,e,i){e.apply(r,t.concat([y(function(t,e){i(t,e)})]))},function(t,e){i.apply(r,[t].concat(e))})})},N.compose=function(){return N.seq.apply(null,Array.prototype.reverse.call(arguments))},N.applyEach=L(N.eachOf),N.applyEachSeries=L(N.eachOfSeries),N.forever=function(t,e){function r(t){return t?i(t):void o(r)}var i=h(e||n),o=B(t);r()},N.ensureAsync=B,N.constant=y(function(t){var e=[null].concat(t);return function(t){return t.apply(this,e)}}),N.wrapSync=N.asyncify=function(t){return y(function(e){var r,i=e.pop();try{r=t.apply(this,e)}catch(n){return i(n)}G(r)&&"function"==typeof r.then?r.then(function(t){i(null,t)})["catch"](function(t){i(t.message?t:new Error(t))}):i(null,r)})},"object"==typeof r&&r.exports?r.exports=N:"function"==typeof t&&t.amd?t([],function(){return N}):U.async=N}()}).call(this,e("_process"),"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{_process:18}],17:[function(t,e,r){(function(t){function e(t,e){for(var r=0,i=t.length-1;i>=0;i--){var n=t[i];"."===n?t.splice(i,1):".."===n?(t.splice(i,1),r++):r&&(t.splice(i,1),r--)}if(e)for(;r--;r)t.unshift("..");return t}function i(t,e){if(t.filter)return t.filter(e);for(var r=[],i=0;i=-1&&!n;o--){var s=o>=0?arguments[o]:t.cwd();if("string"!=typeof s)throw new TypeError("Arguments to path.resolve must be strings");s&&(r=s+"/"+r,n="/"===s.charAt(0))}return r=e(i(r.split("/"),function(t){return!!t}),!n).join("/"),(n?"/":"")+r||"."},r.normalize=function(t){var n=r.isAbsolute(t),o="/"===s(t,-1);return t=e(i(t.split("/"),function(t){return!!t}),!n).join("/"),t||n||(t="."),t&&o&&(t+="/"),(n?"/":"")+t},r.isAbsolute=function(t){return"/"===t.charAt(0)},r.join=function(){var t=Array.prototype.slice.call(arguments,0);return r.normalize(i(t,function(t,e){if("string"!=typeof t)throw new TypeError("Arguments to path.join must be strings");return t}).join("/"))},r.relative=function(t,e){function i(t){for(var e=0;e=0&&""===t[r];r--);return e>r?[]:t.slice(e,r-e+1)}t=r.resolve(t).substr(1),e=r.resolve(e).substr(1);for(var n=i(t.split("/")),o=i(e.split("/")),s=Math.min(n.length,o.length),a=s,h=0;s>h;h++)if(n[h]!==o[h]){a=h;break}for(var u=[],h=a;he&&(e=t.length+e),t.substr(e,r)}}).call(this,t("_process"))},{_process:18}],18:[function(t,e,r){function i(){l=!1,a.length?u=a.concat(u):c=-1,u.length&&n()}function n(){if(!l){var t=setTimeout(i);l=!0;for(var e=u.length;e;){for(a=u,u=[];++c1)for(var r=1;r1&&(i=r[0]+"@",t=r[1]),t=t.replace(F,".");var n=t.split("."),o=s(n,e).join(".");return i+o}function h(t){for(var e,r,i=[],n=0,o=t.length;o>n;)e=t.charCodeAt(n++),e>=55296&&56319>=e&&o>n?(r=t.charCodeAt(n++),56320==(64512&r)?i.push(((1023&e)<<10)+(1023&r)+65536):(i.push(e),n--)):i.push(e);return i}function u(t){return s(t,function(t){var e="";return t>65535&&(t-=65536,e+=N(t>>>10&1023|55296),t=56320|1023&t),e+=N(t)}).join("")}function l(t){return 10>t-48?t-22:26>t-65?t-65:26>t-97?t-97:E}function c(t,e){return t+22+75*(26>t)-((0!=e)<<5)}function p(t,e,r){var i=0;for(t=r?I(t/A):t>>1,t+=I(t/e);t>B*w>>1;i+=E)t=I(t/B);return I(i+(B+1)*t/(t+C))}function d(t){var e,r,i,n,s,a,h,c,d,f,v=[],g=t.length,m=0,y=R,x=M;for(r=t.lastIndexOf(O),0>r&&(r=0),i=0;r>i;++i)t.charCodeAt(i)>=128&&o("not-basic"),v.push(t.charCodeAt(i));for(n=r>0?r+1:0;g>n;){for(s=m,a=1,h=E;n>=g&&o("invalid-input"),c=l(t.charCodeAt(n++)),(c>=E||c>I((T-m)/a))&&o("overflow"),m+=c*a,d=x>=h?S:h>=x+w?w:h-x,!(d>c);h+=E)f=E-d,a>I(T/f)&&o("overflow"),a*=f;e=v.length+1,x=p(m-s,e,0==s),I(m/e)>T-y&&o("overflow"),y+=I(m/e),m%=e,v.splice(m++,0,y)}return u(v)}function f(t){var e,r,i,n,s,a,u,l,d,f,v,g,m,y,x,b=[];for(t=h(t),g=t.length,e=R,r=0,s=M,a=0;g>a;++a)v=t[a],128>v&&b.push(N(v));for(i=n=b.length,n&&b.push(O);g>i;){for(u=T,a=0;g>a;++a)v=t[a],v>=e&&u>v&&(u=v);for(m=i+1,u-e>I((T-r)/m)&&o("overflow"),r+=(u-e)*m,e=u,a=0;g>a;++a)if(v=t[a],e>v&&++r>T&&o("overflow"),v==e){for(l=r,d=E;f=s>=d?S:d>=s+w?w:d-s,!(f>l);d+=E)x=l-f,y=E-f,b.push(N(c(f+x%y,0))),l=I(x/y);b.push(N(c(l,0))),s=p(r,m,i==n),r=0,++i}++r,++e}return b.join("")}function v(t){return a(t,function(t){return P.test(t)?d(t.slice(4).toLowerCase()):t})}function g(t){return a(t,function(t){return D.test(t)?"xn--"+f(t):t})}var m="object"==typeof i&&i&&!i.nodeType&&i,y="object"==typeof r&&r&&!r.nodeType&&r,x="object"==typeof e&&e;(x.global===x||x.window===x||x.self===x)&&(n=x);var b,_,T=2147483647,E=36,S=1,w=26,C=38,A=700,M=72,R=128,O="-",P=/^xn--/,D=/[^\x20-\x7E]/,F=/[\x2E\u3002\uFF0E\uFF61]/g,L={overflow:"Overflow: input needs wider integers to process","not-basic":"Illegal input >= 0x80 (not a basic code point)","invalid-input":"Invalid input"},B=E-S,I=Math.floor,N=String.fromCharCode;if(b={version:"1.3.2",ucs2:{decode:h,encode:u},decode:d,encode:f,toASCII:g,toUnicode:v},"function"==typeof t&&"object"==typeof t.amd&&t.amd)t("punycode",function(){return b});else if(m&&y)if(r.exports==m)y.exports=b;else for(_ in b)b.hasOwnProperty(_)&&(m[_]=b[_]);else n.punycode=b}(this)}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{}],20:[function(t,e,r){"use strict";function i(t,e){return Object.prototype.hasOwnProperty.call(t,e)}e.exports=function(t,e,r,o){e=e||"&",r=r||"=";var s={};if("string"!=typeof t||0===t.length)return s;var a=/\+/g;t=t.split(e);var h=1e3;o&&"number"==typeof o.maxKeys&&(h=o.maxKeys);var u=t.length;h>0&&u>h&&(u=h);for(var l=0;u>l;++l){var c,p,d,f,v=t[l].replace(a,"%20"),g=v.indexOf(r);g>=0?(c=v.substr(0,g),p=v.substr(g+1)):(c=v,p=""),d=decodeURIComponent(c), +f=decodeURIComponent(p),i(s,d)?n(s[d])?s[d].push(f):s[d]=[s[d],f]:s[d]=f}return s};var n=Array.isArray||function(t){return"[object Array]"===Object.prototype.toString.call(t)}},{}],21:[function(t,e,r){"use strict";function i(t,e){if(t.map)return t.map(e);for(var r=[],i=0;i",'"',"`"," ","\r","\n"," "],g=["{","}","|","\\","^","`"].concat(v),m=["'"].concat(g),y=["%","/","?",";","#"].concat(m),x=["/","?","#"],b=255,_=/^[a-z0-9A-Z_-]{0,63}$/,T=/^([a-z0-9A-Z_-]{0,63})(.*)$/,E={javascript:!0,"javascript:":!0},S={javascript:!0,"javascript:":!0},w={http:!0,https:!0,ftp:!0,gopher:!0,file:!0,"http:":!0,"https:":!0,"ftp:":!0,"gopher:":!0,"file:":!0},C=t("querystring");i.prototype.parse=function(t,e,r){if(!h(t))throw new TypeError("Parameter 'url' must be a string, not "+typeof t);var i=t;i=i.trim();var n=d.exec(i);if(n){n=n[0];var o=n.toLowerCase();this.protocol=o,i=i.substr(n.length)}if(r||n||i.match(/^\/\/[^@\/]+@[^@\/]+/)){var s="//"===i.substr(0,2);!s||n&&S[n]||(i=i.substr(2),this.slashes=!0)}if(!S[n]&&(s||n&&!w[n])){for(var a=-1,u=0;ul)&&(a=l)}var c,f;f=-1===a?i.lastIndexOf("@"):i.lastIndexOf("@",a),-1!==f&&(c=i.slice(0,f),i=i.slice(f+1),this.auth=decodeURIComponent(c)),a=-1;for(var u=0;ul)&&(a=l)}-1===a&&(a=i.length),this.host=i.slice(0,a),i=i.slice(a),this.parseHost(),this.hostname=this.hostname||"";var v="["===this.hostname[0]&&"]"===this.hostname[this.hostname.length-1];if(!v)for(var g=this.hostname.split(/\./),u=0,A=g.length;A>u;u++){var M=g[u];if(M&&!M.match(_)){for(var R="",O=0,P=M.length;P>O;O++)R+=M.charCodeAt(O)>127?"x":M[O];if(!R.match(_)){var D=g.slice(0,u),F=g.slice(u+1),L=M.match(T);L&&(D.push(L[1]),F.unshift(L[2])),F.length&&(i="/"+F.join(".")+i),this.hostname=D.join(".");break}}}if(this.hostname.length>b?this.hostname="":this.hostname=this.hostname.toLowerCase(),!v){for(var B=this.hostname.split("."),I=[],u=0;uu;u++){var j=m[u],G=encodeURIComponent(j);G===j&&(G=escape(j)),i=i.split(j).join(G)}var X=i.indexOf("#");-1!==X&&(this.hash=i.substr(X),i=i.slice(0,X));var Y=i.indexOf("?");if(-1!==Y?(this.search=i.substr(Y),this.query=i.substr(Y+1),e&&(this.query=C.parse(this.query)),i=i.slice(0,Y)):e&&(this.search="",this.query={}),i&&(this.pathname=i),w[o]&&this.hostname&&!this.pathname&&(this.pathname="/"),this.pathname||this.search){var U=this.pathname||"",N=this.search||"";this.path=U+N}return this.href=this.format(),this},i.prototype.format=function(){var t=this.auth||"";t&&(t=encodeURIComponent(t),t=t.replace(/%3A/i,":"),t+="@");var e=this.protocol||"",r=this.pathname||"",i=this.hash||"",n=!1,o="";this.host?n=t+this.host:this.hostname&&(n=t+(-1===this.hostname.indexOf(":")?this.hostname:"["+this.hostname+"]"),this.port&&(n+=":"+this.port)),this.query&&u(this.query)&&Object.keys(this.query).length&&(o=C.stringify(this.query));var s=this.search||o&&"?"+o||"";return e&&":"!==e.substr(-1)&&(e+=":"),this.slashes||(!e||w[e])&&n!==!1?(n="//"+(n||""),r&&"/"!==r.charAt(0)&&(r="/"+r)):n||(n=""),i&&"#"!==i.charAt(0)&&(i="#"+i),s&&"?"!==s.charAt(0)&&(s="?"+s),r=r.replace(/[?#]/g,function(t){return encodeURIComponent(t)}),s=s.replace("#","%23"),e+n+r+s+i},i.prototype.resolve=function(t){return this.resolveObject(n(t,!1,!0)).format()},i.prototype.resolveObject=function(t){if(h(t)){var e=new i;e.parse(t,!1,!0),t=e}var r=new i;if(Object.keys(this).forEach(function(t){r[t]=this[t]},this),r.hash=t.hash,""===t.href)return r.href=r.format(),r;if(t.slashes&&!t.protocol)return Object.keys(t).forEach(function(e){"protocol"!==e&&(r[e]=t[e])}),w[r.protocol]&&r.hostname&&!r.pathname&&(r.path=r.pathname="/"),r.href=r.format(),r;if(t.protocol&&t.protocol!==r.protocol){if(!w[t.protocol])return Object.keys(t).forEach(function(e){r[e]=t[e]}),r.href=r.format(),r;if(r.protocol=t.protocol,t.host||S[t.protocol])r.pathname=t.pathname;else{for(var n=(t.pathname||"").split("/");n.length&&!(t.host=n.shift()););t.host||(t.host=""),t.hostname||(t.hostname=""),""!==n[0]&&n.unshift(""),n.length<2&&n.unshift(""),r.pathname=n.join("/")}if(r.search=t.search,r.query=t.query,r.host=t.host||"",r.auth=t.auth,r.hostname=t.hostname||t.host,r.port=t.port,r.pathname||r.search){var o=r.pathname||"",s=r.search||"";r.path=o+s}return r.slashes=r.slashes||t.slashes,r.href=r.format(),r}var a=r.pathname&&"/"===r.pathname.charAt(0),u=t.host||t.pathname&&"/"===t.pathname.charAt(0),p=u||a||r.host&&t.pathname,d=p,f=r.pathname&&r.pathname.split("/")||[],n=t.pathname&&t.pathname.split("/")||[],v=r.protocol&&!w[r.protocol];if(v&&(r.hostname="",r.port=null,r.host&&(""===f[0]?f[0]=r.host:f.unshift(r.host)),r.host="",t.protocol&&(t.hostname=null,t.port=null,t.host&&(""===n[0]?n[0]=t.host:n.unshift(t.host)),t.host=null),p=p&&(""===n[0]||""===f[0])),u)r.host=t.host||""===t.host?t.host:r.host,r.hostname=t.hostname||""===t.hostname?t.hostname:r.hostname,r.search=t.search,r.query=t.query,f=n;else if(n.length)f||(f=[]),f.pop(),f=f.concat(n),r.search=t.search,r.query=t.query;else if(!c(t.search)){if(v){r.hostname=r.host=f.shift();var g=r.host&&r.host.indexOf("@")>0?r.host.split("@"):!1;g&&(r.auth=g.shift(),r.host=r.hostname=g.shift())}return r.search=t.search,r.query=t.query,l(r.pathname)&&l(r.search)||(r.path=(r.pathname?r.pathname:"")+(r.search?r.search:"")),r.href=r.format(),r}if(!f.length)return r.pathname=null,r.search?r.path="/"+r.search:r.path=null,r.href=r.format(),r;for(var m=f.slice(-1)[0],y=(r.host||t.host)&&("."===m||".."===m)||""===m,x=0,b=f.length;b>=0;b--)m=f[b],"."==m?f.splice(b,1):".."===m?(f.splice(b,1),x++):x&&(f.splice(b,1),x--);if(!p&&!d)for(;x--;x)f.unshift("..");!p||""===f[0]||f[0]&&"/"===f[0].charAt(0)||f.unshift(""),y&&"/"!==f.join("/").substr(-1)&&f.push("");var _=""===f[0]||f[0]&&"/"===f[0].charAt(0);if(v){r.hostname=r.host=_?"":f.length?f.shift():"";var g=r.host&&r.host.indexOf("@")>0?r.host.split("@"):!1;g&&(r.auth=g.shift(),r.host=r.hostname=g.shift())}return p=p||r.host&&f.length,p&&!_&&f.unshift(""),f.length?r.pathname=f.join("/"):(r.pathname=null,r.path=null),l(r.pathname)&&l(r.search)||(r.path=(r.pathname?r.pathname:"")+(r.search?r.search:"")),r.auth=t.auth||r.auth,r.slashes=r.slashes||t.slashes,r.href=r.format(),r},i.prototype.parseHost=function(){var t=this.host,e=f.exec(t);e&&(e=e[0],":"!==e&&(this.port=e.substr(1)),t=t.substr(0,t.length-e.length)),t&&(this.hostname=t)}},{punycode:19,querystring:22}],24:[function(t,e,r){"use strict";function i(t,e,r){r=r||2;var i=e&&e.length,o=i?e[0]*r:t.length,a=n(t,0,o,r,!0),h=[];if(!a)return h;var u,l,p,d,f,v,g;if(i&&(a=c(t,e,a,r)),t.length>80*r){u=p=t[0],l=d=t[1];for(var m=r;o>m;m+=r)f=t[m],v=t[m+1],u>f&&(u=f),l>v&&(l=v),f>p&&(p=f),v>d&&(d=v);g=Math.max(p-u,d-l)}return s(a,h,r,u,l,g),h}function n(t,e,r,i,n){var o,s,a,h=0;for(o=e,s=r-i;r>o;o+=i)h+=(t[s]-t[o])*(t[o+1]+t[s+1]),s=o;if(n===h>0)for(o=e;r>o;o+=i)a=M(o,t[o],t[o+1],a);else for(o=r-i;o>=e;o-=i)a=M(o,t[o],t[o+1],a);return a}function o(t,e){if(!t)return t;e||(e=t);var r,i=t;do if(r=!1,i.steiner||!T(i,i.next)&&0!==_(i.prev,i,i.next))i=i.next;else{if(R(i),i=e=i.prev,i===i.next)return null;r=!0}while(r||i!==e);return e}function s(t,e,r,i,n,c,p){if(t){!p&&c&&v(t,i,n,c);for(var d,f,g=t;t.prev!==t.next;)if(d=t.prev,f=t.next,c?h(t,i,n,c):a(t))e.push(d.i/r),e.push(t.i/r),e.push(f.i/r),R(t),t=f.next,g=f.next;else if(t=f,t===g){p?1===p?(t=u(t,e,r),s(t,e,r,i,n,c,2)):2===p&&l(t,e,r,i,n,c):s(o(t),e,r,i,n,c,1);break}}}function a(t){var e=t.prev,r=t,i=t.next;if(_(e,r,i)>=0)return!1;for(var n=t.next.next;n!==t.prev;){if(x(e.x,e.y,r.x,r.y,i.x,i.y,n.x,n.y)&&_(n.prev,n,n.next)>=0)return!1;n=n.next}return!0}function h(t,e,r,i){var n=t.prev,o=t,s=t.next;if(_(n,o,s)>=0)return!1;for(var a=n.xo.x?n.x>s.x?n.x:s.x:o.x>s.x?o.x:s.x,l=n.y>o.y?n.y>s.y?n.y:s.y:o.y>s.y?o.y:s.y,c=m(a,h,e,r,i),p=m(u,l,e,r,i),d=t.nextZ;d&&d.z<=p;){if(d!==t.prev&&d!==t.next&&x(n.x,n.y,o.x,o.y,s.x,s.y,d.x,d.y)&&_(d.prev,d,d.next)>=0)return!1;d=d.nextZ}for(d=t.prevZ;d&&d.z>=c;){if(d!==t.prev&&d!==t.next&&x(n.x,n.y,o.x,o.y,s.x,s.y,d.x,d.y)&&_(d.prev,d,d.next)>=0)return!1;d=d.prevZ}return!0}function u(t,e,r){var i=t;do{var n=i.prev,o=i.next.next;E(n,i,i.next,o)&&w(n,o)&&w(o,n)&&(e.push(n.i/r),e.push(i.i/r),e.push(o.i/r),R(i),R(i.next),i=t=o),i=i.next}while(i!==t);return i}function l(t,e,r,i,n,a){var h=t;do{for(var u=h.next.next;u!==h.prev;){if(h.i!==u.i&&b(h,u)){var l=A(h,u);return h=o(h,h.next),l=o(l,l.next),s(h,e,r,i,n,a),void s(l,e,r,i,n,a)}u=u.next}h=h.next}while(h!==t)}function c(t,e,r,i){var s,a,h,u,l,c=[];for(s=0,a=e.length;a>s;s++)h=e[s]*i,u=a-1>s?e[s+1]*i:t.length,l=n(t,h,u,i,!1),l===l.next&&(l.steiner=!0),c.push(y(l));for(c.sort(p),s=0;s=i.next.y){var a=i.x+(o-i.y)*(i.next.x-i.x)/(i.next.y-i.y);n>=a&&a>s&&(s=a,r=i.x=i.x&&i.x>=r.x&&x(oh||h===l&&i.x>r.x)&&w(i,t)&&(r=i,l=h)),i=i.next;return r}function v(t,e,r,i){var n=t;do null===n.z&&(n.z=m(n.x,n.y,e,r,i)),n.prevZ=n.prev,n.nextZ=n.next,n=n.next;while(n!==t);n.prevZ.nextZ=null,n.prevZ=null,g(n)}function g(t){var e,r,i,n,o,s,a,h,u=1;do{for(r=t,t=null,o=null,s=0;r;){for(s++,i=r,a=0,e=0;u>e&&(a++,i=i.nextZ,i);e++);for(h=u;a>0||h>0&&i;)0===a?(n=i,i=i.nextZ,h--):0!==h&&i?r.z<=i.z?(n=r,r=r.nextZ,a--):(n=i,i=i.nextZ,h--):(n=r,r=r.nextZ,a--),o?o.nextZ=n:t=n,n.prevZ=o,o=n;r=i}o.nextZ=null,u*=2}while(s>1);return t}function m(t,e,r,i,n){return t=32767*(t-r)/n,e=32767*(e-i)/n,t=16711935&(t|t<<8),t=252645135&(t|t<<4),t=858993459&(t|t<<2),t=1431655765&(t|t<<1),e=16711935&(e|e<<8),e=252645135&(e|e<<4),e=858993459&(e|e<<2),e=1431655765&(e|e<<1),t|e<<1}function y(t){var e=t,r=t;do e.x=0&&(t-s)*(i-a)-(r-s)*(e-a)>=0&&(r-s)*(o-a)-(n-s)*(i-a)>=0}function b(t,e){return T(t,e)||t.next.i!==e.i&&t.prev.i!==e.i&&!S(t,e)&&w(t,e)&&w(e,t)&&C(t,e)}function _(t,e,r){return(e.y-t.y)*(r.x-e.x)-(e.x-t.x)*(r.y-e.y)}function T(t,e){return t.x===e.x&&t.y===e.y}function E(t,e,r,i){return _(t,e,r)>0!=_(t,e,i)>0&&_(r,i,t)>0!=_(r,i,e)>0}function S(t,e){var r=t;do{if(r.i!==t.i&&r.next.i!==t.i&&r.i!==e.i&&r.next.i!==e.i&&E(r,r.next,t,e))return!0;r=r.next}while(r!==t);return!1}function w(t,e){return _(t.prev,t,t.next)<0?_(t,e,t.next)>=0&&_(t,t.prev,e)>=0:_(t,e,t.prev)<0||_(t,t.next,e)<0}function C(t,e){var r=t,i=!1,n=(t.x+e.x)/2,o=(t.y+e.y)/2;do r.y>o!=r.next.y>o&&n<(r.next.x-r.x)*(o-r.y)/(r.next.y-r.y)+r.x&&(i=!i),r=r.next;while(r!==t);return i}function A(t,e){var r=new O(t.i,t.x,t.y),i=new O(e.i,e.x,e.y),n=t.next,o=e.prev;return t.next=e,e.prev=t,r.next=n,n.prev=r,i.next=r,r.prev=i,o.next=i,i.prev=o,i}function M(t,e,r,i){var n=new O(t,e,r);return i?(n.next=i.next,n.prev=i,i.next.prev=n,i.next=n):(n.prev=n,n.next=n),n}function R(t){t.next.prev=t.prev,t.prev.next=t.next,t.prevZ&&(t.prevZ.nextZ=t.nextZ),t.nextZ&&(t.nextZ.prevZ=t.prevZ)}function O(t,e,r){this.i=t,this.x=e,this.y=r,this.prev=null,this.next=null,this.z=null,this.prevZ=null,this.nextZ=null,this.steiner=!1}e.exports=i},{}],25:[function(t,e,r){"use strict";function i(t,e,r){this.fn=t,this.context=e,this.once=r||!1}function n(){}var o="function"!=typeof Object.create?"~":!1;n.prototype._events=void 0,n.prototype.listeners=function(t,e){var r=o?o+t:t,i=this._events&&this._events[r];if(e)return!!i;if(!i)return[];if(i.fn)return[i.fn];for(var n=0,s=i.length,a=new Array(s);s>n;n++)a[n]=i[n].fn;return a},n.prototype.emit=function(t,e,r,i,n,s){var a=o?o+t:t;if(!this._events||!this._events[a])return!1;var h,u,l=this._events[a],c=arguments.length;if("function"==typeof l.fn){switch(l.once&&this.removeListener(t,l.fn,void 0,!0),c){case 1:return l.fn.call(l.context),!0;case 2:return l.fn.call(l.context,e),!0;case 3:return l.fn.call(l.context,e,r),!0;case 4:return l.fn.call(l.context,e,r,i),!0;case 5:return l.fn.call(l.context,e,r,i,n),!0;case 6:return l.fn.call(l.context,e,r,i,n,s),!0}for(u=1,h=new Array(c-1);c>u;u++)h[u-1]=arguments[u];l.fn.apply(l.context,h)}else{var p,d=l.length;for(u=0;d>u;u++)switch(l[u].once&&this.removeListener(t,l[u].fn,void 0,!0),c){case 1:l[u].fn.call(l[u].context);break;case 2:l[u].fn.call(l[u].context,e);break;case 3:l[u].fn.call(l[u].context,e,r);break;default:if(!h)for(p=1,h=new Array(c-1);c>p;p++)h[p-1]=arguments[p];l[u].fn.apply(l[u].context,h)}}return!0},n.prototype.on=function(t,e,r){var n=new i(e,r||this),s=o?o+t:t;return this._events||(this._events=o?{}:Object.create(null)),this._events[s]?this._events[s].fn?this._events[s]=[this._events[s],n]:this._events[s].push(n):this._events[s]=n,this},n.prototype.once=function(t,e,r){var n=new i(e,r||this,!0),s=o?o+t:t;return this._events||(this._events=o?{}:Object.create(null)),this._events[s]?this._events[s].fn?this._events[s]=[this._events[s],n]:this._events[s].push(n):this._events[s]=n,this},n.prototype.removeListener=function(t,e,r,i){var n=o?o+t:t;if(!this._events||!this._events[n])return this;var s=this._events[n],a=[];if(e)if(s.fn)(s.fn!==e||i&&!s.once||r&&s.context!==r)&&a.push(s);else for(var h=0,u=s.length;u>h;h++)(s[h].fn!==e||i&&!s[h].once||r&&s[h].context!==r)&&a.push(s[h]);return a.length?this._events[n]=1===a.length?a[0]:a:delete this._events[n],this},n.prototype.removeAllListeners=function(t){return this._events?(t?delete this._events[o?o+t:t]:this._events=o?{}:Object.create(null),this):this},n.prototype.off=n.prototype.removeListener,n.prototype.addListener=n.prototype.on,n.prototype.setMaxListeners=function(){return this},n.prefixed=o,"undefined"!=typeof e&&(e.exports=n)},{}],26:[function(t,e,r){"use strict";function i(t){if(null===t||void 0===t)throw new TypeError("Object.assign cannot be called with null or undefined");return Object(t)}var n=Object.prototype.hasOwnProperty,o=Object.prototype.propertyIsEnumerable;e.exports=Object.assign||function(t,e){for(var r,s,a=i(t),h=1;h=t.length&&r())}if(r=r||function(){},!t.length)return r();var o=0;u(t,function(t){e(t,i(n))})},s.forEach=s.each,s.eachSeries=function(t,e,r){if(r=r||function(){},!t.length)return r();var i=0,n=function(){e(t[i],function(e){e?(r(e),r=function(){}):(i+=1,i>=t.length?r():n())})};n()},s.forEachSeries=s.eachSeries,s.eachLimit=function(t,e,r,i){var n=d(e);n.apply(null,[t,r,i])},s.forEachLimit=s.eachLimit;var d=function(t){return function(e,r,i){if(i=i||function(){},!e.length||0>=t)return i();var n=0,o=0,s=0;!function a(){if(n>=e.length)return i();for(;t>s&&o=e.length?i():a())})}()}},f=function(t){return function(){var e=Array.prototype.slice.call(arguments);return t.apply(null,[s.each].concat(e))}},v=function(t,e){return function(){var r=Array.prototype.slice.call(arguments);return e.apply(null,[d(t)].concat(r))}},g=function(t){return function(){var e=Array.prototype.slice.call(arguments);return t.apply(null,[s.eachSeries].concat(e))}},m=function(t,e,r,i){if(e=l(e,function(t,e){return{index:e,value:t}}),i){var n=[];t(e,function(t,e){r(t.value,function(r,i){n[t.index]=i,e(r)})},function(t){i(t,n)})}else t(e,function(t,e){r(t.value,function(t){e(t)})})};s.map=f(m),s.mapSeries=g(m),s.mapLimit=function(t,e,r,i){return y(e)(t,r,i)};var y=function(t){return v(t,m)};s.reduce=function(t,e,r,i){s.eachSeries(t,function(t,i){r(e,t,function(t,r){e=r,i(t)})},function(t){i(t,e)})},s.inject=s.reduce,s.foldl=s.reduce,s.reduceRight=function(t,e,r,i){var n=l(t,function(t){return t}).reverse();s.reduce(n,e,r,i)},s.foldr=s.reduceRight;var x=function(t,e,r,i){var n=[];e=l(e,function(t,e){return{index:e,value:t}}),t(e,function(t,e){r(t.value,function(r){r&&n.push(t),e()})},function(t){i(l(n.sort(function(t,e){return t.index-e.index}),function(t){return t.value}))})};s.filter=f(x),s.filterSeries=g(x),s.select=s.filter,s.selectSeries=s.filterSeries;var b=function(t,e,r,i){var n=[];e=l(e,function(t,e){return{index:e,value:t}}),t(e,function(t,e){r(t.value,function(r){r||n.push(t),e()})},function(t){i(l(n.sort(function(t,e){return t.index-e.index}),function(t){return t.value}))})};s.reject=f(b),s.rejectSeries=g(b);var _=function(t,e,r,i){t(e,function(t,e){r(t,function(r){r?(i(t),i=function(){}):e()})},function(t){i()})};s.detect=f(_),s.detectSeries=g(_),s.some=function(t,e,r){s.each(t,function(t,i){e(t,function(t){t&&(r(!0),r=function(){}),i()})},function(t){r(!1)})},s.any=s.some,s.every=function(t,e,r){s.each(t,function(t,i){e(t,function(t){t||(r(!1),r=function(){}),i()})},function(t){r(!0)})},s.all=s.every,s.sortBy=function(t,e,r){s.map(t,function(t,r){e(t,function(e,i){e?r(e):r(null,{value:t,criteria:i})})},function(t,e){if(t)return r(t);var i=function(t,e){var r=t.criteria,i=e.criteria;return i>r?-1:r>i?1:0};r(null,l(e.sort(i),function(t){return t.value}))})},s.auto=function(t,e){e=e||function(){};var r=p(t),i=r.length;if(!i)return e();var n={},o=[],a=function(t){o.unshift(t)},l=function(t){for(var e=0;ei;){var o=i+(n-i+1>>>1);r(e,t[o])>=0?i=o:n=o-1}return i}function n(t,e,n,o){return t.started||(t.started=!0),h(e)||(e=[e]),0==e.length?s.setImmediate(function(){t.drain&&t.drain()}):void u(e,function(e){var a={data:e,priority:n,callback:"function"==typeof o?o:null};t.tasks.splice(i(t.tasks,a,r)+1,0,a),t.saturated&&t.tasks.length===t.concurrency&&t.saturated(),s.setImmediate(t.process)})}var o=s.queue(t,e);return o.push=function(t,e,r){n(o,t,e,r)},delete o.unshift,o},s.cargo=function(t,e){var r=!1,i=[],n={tasks:i,payload:e,saturated:null,empty:null,drain:null,drained:!0,push:function(t,r){h(t)||(t=[t]),u(t,function(t){i.push({data:t,callback:"function"==typeof r?r:null}),n.drained=!1,n.saturated&&i.length===e&&n.saturated()}),s.setImmediate(n.process)},process:function o(){if(!r){if(0===i.length)return n.drain&&!n.drained&&n.drain(),void(n.drained=!0);var s="number"==typeof e?i.splice(0,e):i.splice(0,i.length),a=l(s,function(t){return t.data});n.empty&&n.empty(),r=!0,t(a,function(){r=!1;var t=arguments;u(s,function(e){e.callback&&e.callback.apply(null,t)}),o()})}},length:function(){return i.length},running:function(){return r}};return n};var S=function(t){return function(e){var r=Array.prototype.slice.call(arguments,1);e.apply(null,r.concat([function(e){var r=Array.prototype.slice.call(arguments,1);"undefined"!=typeof console&&(e?console.error&&console.error(e):console[t]&&u(r,function(e){console[t](e)}))}]))}};s.log=S("log"),s.dir=S("dir"),s.memoize=function(t,e){var r={},i={};e=e||function(t){return t};var n=function(){var n=Array.prototype.slice.call(arguments),o=n.pop(),a=e.apply(null,n);a in r?s.nextTick(function(){o.apply(null,r[a])}):a in i?i[a].push(o):(i[a]=[o],t.apply(null,n.concat([function(){r[a]=arguments;var t=i[a];delete i[a];for(var e=0,n=t.length;n>e;e++)t[e].apply(null,arguments)}])))};return n.memo=r,n.unmemoized=t,n},s.unmemoize=function(t){return function(){return(t.unmemoized||t).apply(null,arguments)}},s.times=function(t,e,r){for(var i=[],n=0;t>n;n++)i.push(n);return s.map(i,e,r)},s.timesSeries=function(t,e,r){for(var i=[],n=0;t>n;n++)i.push(n);return s.mapSeries(i,e,r)},s.seq=function(){var t=arguments;return function(){var e=this,r=Array.prototype.slice.call(arguments),i=r.pop();s.reduce(t,r,function(t,r,i){r.apply(e,t.concat([function(){var t=arguments[0],e=Array.prototype.slice.call(arguments,1);i(t,e)}]))},function(t,r){i.apply(e,[t].concat(r))})}},s.compose=function(){return s.seq.apply(null,Array.prototype.reverse.call(arguments))};var w=function(t,e){var r=function(){var r=this,i=Array.prototype.slice.call(arguments),n=i.pop();return t(e,function(t,e){t.apply(r,i.concat([e]))},n)};if(arguments.length>2){var i=Array.prototype.slice.call(arguments,2);return r.apply(this,i)}return r};s.applyEach=f(w),s.applyEachSeries=g(w),s.forever=function(t,e){function r(i){if(i){if(e)return e(i);throw i}t(r)}r()},"undefined"!=typeof r&&r.exports?r.exports=s:"undefined"!=typeof t&&t.amd?t([],function(){return s}):n.async=s}()}).call(this,e("_process"))},{_process:18}],28:[function(t,e,r){function i(t,e){a.call(this),e=e||10,this.baseUrl=t||"",this.progress=0,this.loading=!1,this._progressChunk=0,this._beforeMiddleware=[],this._afterMiddleware=[],this._boundLoadResource=this._loadResource.bind(this),this._boundOnLoad=this._onLoad.bind(this),this._buffer=[],this._numToLoad=0,this._queue=n.queue(this._boundLoadResource,e),this.resources={}}var n=t("async"),o=t("url"),s=t("./Resource"),a=t("eventemitter3");i.prototype=Object.create(a.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.add=i.prototype.enqueue=function(t,e,r,i){if(Array.isArray(t)){for(var n=0;n0)if(this.xhrType===i.XHR_RESPONSE_TYPE.TEXT)this.data=t.responseText;else if(this.xhrType===i.XHR_RESPONSE_TYPE.JSON)try{this.data=JSON.parse(t.responseText),this.isJson=!0}catch(r){this.error=new Error("Error trying to parse loaded json:",r)}else if(this.xhrType===i.XHR_RESPONSE_TYPE.DOCUMENT)try{if(window.DOMParser){var n=new DOMParser;this.data=n.parseFromString(t.responseText,"text/xml")}else{var o=document.createElement("div");o.innerHTML=t.responseText,this.data=o}this.isXml=!0}catch(r){this.error=new Error("Error trying to parse loaded xml:",r)}else this.data=t.response||t.responseText;else this.error=new Error("["+t.status+"]"+t.statusText+":"+t.responseURL);this.complete()},i.prototype._determineCrossOrigin=function(t,e){if(0===t.indexOf("data:"))return"";e=e||window.location,u||(u=document.createElement("a")),u.href=t,t=a.parse(u.href);var r=!t.port&&""===e.port||t.port===e.port;return t.hostname===e.hostname&&r&&t.protocol===e.protocol?"":"anonymous"},i.prototype._determineXhrType=function(){return i._xhrTypeMap[this._getExtension()]||i.XHR_RESPONSE_TYPE.TEXT},i.prototype._determineLoadType=function(){return i._loadTypeMap[this._getExtension()]||i.LOAD_TYPE.XHR},i.prototype._getExtension=function(){var t,e=this.url;if(this.isDataUrl){var r=e.indexOf("/");t=e.substring(r+1,e.indexOf(";",r))}else{var i=e.indexOf("?");-1!==i&&(e=e.substring(0,i)),t=e.substring(e.lastIndexOf(".")+1)}return t},i.prototype._getMimeFromXhrType=function(t){switch(t){case i.XHR_RESPONSE_TYPE.BUFFER:return"application/octet-binary";case i.XHR_RESPONSE_TYPE.BLOB:return"application/blob";case i.XHR_RESPONSE_TYPE.DOCUMENT:return"application/xml";case i.XHR_RESPONSE_TYPE.JSON:return"application/json";case i.XHR_RESPONSE_TYPE.DEFAULT:case i.XHR_RESPONSE_TYPE.TEXT:default:return"text/plain"}},i.LOAD_TYPE={XHR:1,IMAGE:2,AUDIO:3,VIDEO:4},i.XHR_READY_STATE={UNSENT:0,OPENED:1,HEADERS_RECEIVED:2,LOADING:3,DONE:4},i.XHR_RESPONSE_TYPE={DEFAULT:"text",BUFFER:"arraybuffer",BLOB:"blob",DOCUMENT:"document",JSON:"json",TEXT:"text"},i._loadTypeMap={gif:i.LOAD_TYPE.IMAGE,png:i.LOAD_TYPE.IMAGE,bmp:i.LOAD_TYPE.IMAGE,jpg:i.LOAD_TYPE.IMAGE,jpeg:i.LOAD_TYPE.IMAGE,tif:i.LOAD_TYPE.IMAGE,tiff:i.LOAD_TYPE.IMAGE,webp:i.LOAD_TYPE.IMAGE,tga:i.LOAD_TYPE.IMAGE},i._xhrTypeMap={xhtml:i.XHR_RESPONSE_TYPE.DOCUMENT,html:i.XHR_RESPONSE_TYPE.DOCUMENT,htm:i.XHR_RESPONSE_TYPE.DOCUMENT,xml:i.XHR_RESPONSE_TYPE.DOCUMENT,tmx:i.XHR_RESPONSE_TYPE.DOCUMENT,tsx:i.XHR_RESPONSE_TYPE.DOCUMENT,svg:i.XHR_RESPONSE_TYPE.DOCUMENT,gif:i.XHR_RESPONSE_TYPE.BLOB,png:i.XHR_RESPONSE_TYPE.BLOB,bmp:i.XHR_RESPONSE_TYPE.BLOB,jpg:i.XHR_RESPONSE_TYPE.BLOB,jpeg:i.XHR_RESPONSE_TYPE.BLOB,tif:i.XHR_RESPONSE_TYPE.BLOB,tiff:i.XHR_RESPONSE_TYPE.BLOB,webp:i.XHR_RESPONSE_TYPE.BLOB,tga:i.XHR_RESPONSE_TYPE.BLOB,json:i.XHR_RESPONSE_TYPE.JSON,text:i.XHR_RESPONSE_TYPE.TEXT,txt:i.XHR_RESPONSE_TYPE.TEXT},i.setExtensionLoadType=function(t,e){o(i._loadTypeMap,t,e)},i.setExtensionXhrType=function(t,e){o(i._xhrTypeMap,t,e)}},{eventemitter3:25,url:23}],30:[function(t,e,r){e.exports={_keyStr:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",encodeBinary:function(t){for(var e,r="",i=new Array(4),n=0,o=0,s=0;n>2,i[1]=(3&e[0])<<4|e[1]>>4,i[2]=(15&e[1])<<2|e[2]>>6,i[3]=63&e[2],s=n-(t.length-1)){case 2:i[3]=64,i[2]=64;break;case 1:i[3]=64}for(o=0;o","Richard Davey "],main:"./src/index.js",homepage:"http://goodboydigital.com/",bugs:"https://github.com/pixijs/pixi.js/issues",license:"MIT",repository:{type:"git",url:"https://github.com/pixijs/pixi.js.git"},scripts:{start:"gulp && gulp watch",test:"gulp && testem ci",build:"gulp",docs:"jsdoc -c ./gulp/util/jsdoc.conf.json -R README.md"},files:["bin/","src/","CONTRIBUTING.md","LICENSE","package.json","README.md"],dependencies:{async:"^1.5.0",brfs:"^1.4.1",earcut:"^2.0.7",eventemitter3:"^1.1.1","object-assign":"^4.0.1","pixi-gl-core":"git+https://github.com/GoodBoyDigital/pixi-gl-core.git","resource-loader":"^1.6.4"},devDependencies:{browserify:"^11.1.0",chai:"^3.2.0",del:"^2.0.2",gulp:"^3.9.0","gulp-cached":"^1.1.0","gulp-concat":"^2.6.0","gulp-debug":"^2.1.0","gulp-header":"^1.7.1","gulp-jshint":"^1.11.2","gulp-mirror":"^0.4.0","gulp-plumber":"^1.0.1","gulp-rename":"^1.2.2","gulp-sourcemaps":"^1.5.2","gulp-uglify":"^1.4.1","gulp-util":"^3.0.6","jaguarjs-jsdoc":"git+https://github.com/davidshimjs/jaguarjs-jsdoc.git",jsdoc:"^3.3.2","jshint-summary":"^0.4.0",minimist:"^1.2.0",mocha:"^2.3.2","require-dir":"^0.3.0","run-sequence":"^1.1.2",testem:"^0.9.4","vinyl-buffer":"^1.0.0","vinyl-source-stream":"^1.1.0",watchify:"^3.4.0"},browserify:{transform:["brfs"]}}},{}],35:[function(t,e,r){function i(t){var e=document.createElement("div");e.style.width="100px",e.style.height="100px",e.style.position="absolute",e.style.top=0,e.style.left=0,e.style.zIndex=2,this.div=e,this.pool=[],this.renderId=0,this.debug=!1,this.renderer=t,this.children=[],this._onKeyDown=this._onKeyDown.bind(this),this._onMouseMove=this._onMouseMove.bind(this),this.isActive=!1,window.addEventListener("keydown",this._onKeyDown,!1)}var n=t("../core");Object.assign(n.DisplayObject.prototype,t("./accessibleTarget")),i.prototype.constructor=i,e.exports=i,i.prototype.activate=function(){this.isActive||(this.isActive=!0,window.document.addEventListener("mousemove",this._onMouseMove,!0),window.removeEventListener("keydown",this._onKeyDown,!1),this.renderer.on("postrender",this.update,this),this.renderer.view.parentNode.appendChild(this.div))},i.prototype.deactivate=function(){this.isActive&&(this.isActive=!1,window.document.removeEventListener("mousemove",this._onMouseMove),window.addEventListener("keydown",this._onKeyDown,!1),this.renderer.off("postrender",this.update),this.div.parentNode.removeChild(this.div))},i.prototype.updateAccessibleObjects=function(t){if(t.visible){t.accessible&&t.interactive&&(t._accessibleActive||this.addChild(t),t.renderId=this.renderId);for(var e=t.children,r=e.length-1;r>=0;r--)this.updateAccessibleObjects(e[r])}},i.prototype.update=function(){this.updateAccessibleObjects(this.renderer._lastObjectRendered);var t=this.renderer.view.getBoundingClientRect(),e=t.width/this.renderer.width,r=t.height/this.renderer.height,i=this.div;i.style.left=t.left+"px",i.style.top=t.top+"px",i.style.width=this.renderer.width+"px",i.style.height=this.renderer.height+"px";for(var o=0;othis.renderer.width&&(t.width=this.renderer.width-t.x),t.y+t.height>this.renderer.height&&(t.height=this.renderer.height-t.y)},i.prototype.addChild=function(t){var e=this.pool.pop();e||(e=document.createElement("button"),e.style.width="100px",e.style.height="100px",e.style.backgroundColor=this.debug?"rgba(255,0,0,0.5)":"transparent",e.style.position="absolute",e.style.zIndex=2,e.style.borderStyle="none",e.addEventListener("click",this._onClick.bind(this)),e.addEventListener("focus",this._onFocus.bind(this)),e.addEventListener("focusout",this._onFocusOut.bind(this))),e.title=t.accessibleTitle||"displayObject "+this.tabIndex,t._accessibleActive=!0,t._accessibleDiv=e,e.displayObject=t,this.children.push(t),this.div.appendChild(t._accessibleDiv),t._accessibleDiv.tabIndex=t.tabIndex},i.prototype._onClick=function(t){var e=this.renderer.plugins.interaction;e.dispatchEvent(t.target.displayObject,"click",e.eventData)},i.prototype._onFocus=function(t){var e=this.renderer.plugins.interaction;e.dispatchEvent(t.target.displayObject,"mouseover",e.eventData)},i.prototype._onFocusOut=function(t){var e=this.renderer.plugins.interaction;e.dispatchEvent(t.target.displayObject,"mouseout",e.eventData)},i.prototype._onKeyDown=function(t){9===t.keyCode&&this.activate()},i.prototype._onMouseMove=function(){this.deactivate()},i.prototype.destroy=function(){this.div=null;for(var t=0;t1)for(var r=0;e>r;r++)this.addChild(arguments[r]);else t.parent&&t.parent.removeChild(t),t.parent=this,this.children.push(t),this.onChildrenChange(this.children.length-1),t.emit("added",this);return t},i.prototype.addChildAt=function(t,e){if(e>=0&&e<=this.children.length)return t.parent&&t.parent.removeChild(t),t.parent=this,this.children.splice(e,0,t),this.onChildrenChange(e),t.emit("added",this),t;throw new Error(t+"addChildAt: The index "+e+" supplied is out of bounds "+this.children.length)},i.prototype.swapChildren=function(t,e){if(t!==e){var r=this.getChildIndex(t),i=this.getChildIndex(e);if(0>r||0>i)throw new Error("swapChildren: Both the supplied DisplayObjects must be children of the caller.");this.children[r]=e,this.children[i]=t,this.onChildrenChange(i>r?r:i)}},i.prototype.getChildIndex=function(t){var e=this.children.indexOf(t);if(-1===e)throw new Error("The supplied DisplayObject must be a child of the caller");return e},i.prototype.setChildIndex=function(t,e){if(0>e||e>=this.children.length)throw new Error("The supplied index is out of bounds");var r=this.getChildIndex(t);o.removeItems(this.children,r,1),this.children.splice(e,0,t),this.onChildrenChange(e)},i.prototype.getChildAt=function(t){if(0>t||t>=this.children.length)throw new Error("getChildAt: Supplied index "+t+" does not exist in the child list, or the supplied DisplayObject is not a child of the caller");return this.children[t]},i.prototype.removeChild=function(t){var e=arguments.length;if(e>1)for(var r=0;e>r;r++)this.removeChild(arguments[r]);else{var i=this.children.indexOf(t);if(-1===i)return;t.parent=null,o.removeItems(this.children,i,1),this.onChildrenChange(i),t.emit("removed",this)}return t},i.prototype.removeChildAt=function(t){var e=this.getChildAt(t);return e.parent=null,o.removeItems(this.children,t,1),this.onChildrenChange(t),e.emit("removed",this),e},i.prototype.removeChildren=function(t,e){var r,i,n=t||0,o="number"==typeof e?e:this.children.length,s=o-n;if(s>0&&o>=s){for(r=this.children.splice(n,s),i=0;it;++t)this.children[t].updateTransform();this.dirtyTransform=!1}},i.prototype.containerUpdateTransform=i.prototype.updateTransform,i.prototype.getBounds=function(){if(!this._currentBounds){if(0===this.children.length)return n.Rectangle.EMPTY;for(var t,e,r,i=1/0,o=1/0,s=-(1/0),a=-(1/0),h=!1,u=0,l=this.children.length;l>u;++u){var c=this.children[u];c.visible&&(h=!0,t=this.children[u].getBounds(),i=ie?s:e,a=a>r?a:r)}if(!h)return n.Rectangle.EMPTY;var p=this._bounds;p.x=i,p.y=o,p.width=s-i,p.height=a-o,this._currentBounds=p}return this._currentBounds},i.prototype.containerGetBounds=i.prototype.getBounds,i.prototype.getLocalBounds=function(){var t=this.worldTransform;this.worldTransform=n.Matrix.IDENTITY;for(var e=0,r=this.children.length;r>e;++e)this.children[e].updateTransform();return this.worldTransform=t,this._currentBounds=null,this.getBounds(n.Matrix.IDENTITY)},i.prototype.renderWebGL=function(t){if(this.visible&&!(this.worldAlpha<=0)&&this.renderable){var e,r;if(this._mask||this._filters){for(t.currentRenderer.flush(),this._filters&&this._filters.length&&t.filterManager.pushFilter(this,this._filters),this._mask&&t.maskManager.pushMask(this,this._mask),t.currentRenderer.start(),this._renderWebGL(t),e=0,r=this.children.length;r>e;e++)this.children[e].renderWebGL(t);t.currentRenderer.flush(),this._mask&&t.maskManager.popMask(this,this._mask),this._filters&&t.filterManager.popFilter(),t.currentRenderer.start()}else for(this._renderWebGL(t),e=0,r=this.children.length;r>e;++e)this.children[e].renderWebGL(t)}},i.prototype._renderWebGL=function(t){},i.prototype._renderCanvas=function(t){},i.prototype.renderCanvas=function(t){if(this.visible&&!(this.alpha<=0)&&this.renderable){this._mask&&t.maskManager.pushMask(this._mask,t),this._renderCanvas(t);for(var e=0,r=this.children.length;r>e;++e)this.children[e].renderCanvas(t);this._mask&&t.maskManager.popMask(t)}},i.prototype.destroy=function(t){if(s.prototype.destroy.call(this),t)for(var e=0,r=this.children.length;r>e;++e)this.children[e].destroy(t);this.removeChildren(),this.children=null}},{"../math":55,"../textures/RenderTexture":98,"../utils":105,"./DisplayObject":40}],40:[function(t,e,r){function i(){s.call(this),this.position=new n.Point,this._position=new u(this),this.scale=new n.Point(1,1),this.pivot=new n.Point(0,0),this.skew=new n.Point(0,0),this._rotation=0,this.alpha=1,this.visible=!0,this.renderable=!0,this.parent=null,this.worldAlpha=1,this.worldTransform=new n.Matrix,this.localTransform=new n.Matrix,this.filterArea=null,this._sr=0,this._cr=1,this._bounds=new n.Rectangle(0,0,1,1),this._currentBounds=null,this._mask=null,this.dirtyTransform=!0}var n=t("../math"),o=t("../textures/RenderTexture"),s=t("eventemitter3"),a=(t("../const"),new n.Matrix),h={worldTransform:new n.Matrix,worldAlpha:1,children:[]};i.prototype=Object.create(s.prototype),i.prototype.constructor=i,e.exports=i;var u=function(t){this.doc=t,this.x=0,this.y=0};Object.defineProperties(u.prototype,{x:{get:function(){return this.doc.position.x},set:function(t){this.doc.position.x=t,this.doc.dirtyTransform=!0}},y:{get:function(){return this.doc.posiiton.y},set:function(t){this.doc.position.y=t,this.doc.dirtyTransform=!0}}}),Object.defineProperties(i.prototype,{x:{get:function(){return this.position.x},set:function(t){this.position.x=t,this.dirtyTransform=!0}},y:{get:function(){return this.position.y},set:function(t){this.position.y=t,this.dirtyTransform=!0}},scaleX:{get:function(){return this.scale.x},set:function(t){this.scale.x=t,this.dirtyTransform=!0}},scaleY:{get:function(){return this.scale.y},set:function(t){this.scale.y=t,this.dirtyTransform=!0}},rotation:{get:function(){return this._rotation},set:function(t){this._rotation=t,this.dirtyTransform=!0,this._sr=Math.sin(t),this._cr=Math.cos(t)}},scaleY:{get:function(){return this.scale.y},set:function(t){this.scale.y=t,this.dirtyTransform=!0}},worldVisible:{get:function(){var t=this;do{if(!t.visible)return!1;t=t.parent}while(t);return!0}},mask:{get:function(){return this._mask},set:function(t){this._mask&&(this._mask.renderable=!0),this._mask=t,this._mask&&(this._mask.renderable=!1)}},filters:{get:function(){return this._filters&&this._filters.slice()},set:function(t){this._filters=t&&t.slice()}}}),i.prototype.updateTransform=function(){var t=this.parent.worldTransform,e=this.worldTransform,r=this.localTransform;this.dirtyTransform&&(r.a=this._cr*this.scale.x,r.b=this._sr*this.scale.x,r.c=-this._sr*this.scale.y,r.d=this._cr*this.scale.y,r.tx=this.position.x-(this.pivot.x*r.a+this.pivot.y*r.c),r.ty=this.position.y-(this.pivot.x*r.b+this.pivot.y*r.d)),(this.dirtyTransform||this.parent.dirtyTransform)&&(e.a=r.a*t.a+r.b*t.c,e.b=r.a*t.b+r.b*t.d,e.c=r.c*t.a+r.d*t.c,e.d=r.c*t.b+r.d*t.d,e.tx=r.tx*t.a+r.ty*t.c+t.tx,e.ty=r.tx*t.b+r.ty*t.d+t.ty,this._currentBounds=null),this.worldAlpha=this.alpha*this.parent.worldAlpha},i.prototype.displayObjectUpdateTransform=i.prototype.updateTransform,i.prototype.getBounds=function(t){return n.Rectangle.EMPTY},i.prototype.getLocalBounds=function(){return this.getBounds(n.Matrix.IDENTITY)},i.prototype.toGlobal=function(t){return this.parent?this.displayObjectUpdateTransform():(this.parent=h,this.displayObjectUpdateTransform(),this.parent=null),this.worldTransform.apply(t)},i.prototype.toLocal=function(t,e,r){return e&&(t=e.toGlobal(t)),this.parent?this.displayObjectUpdateTransform():(this.parent=h,this.displayObjectUpdateTransform(),this.parent=null),this.worldTransform.applyInverse(t,r)},i.prototype.renderWebGL=function(t){},i.prototype.renderCanvas=function(t){},i.prototype.generateTexture=function(t,e,r){var i=this.getLocalBounds(),n=new o(t,0|i.width,0|i.height,e,r);return a.tx=-i.x,a.ty=-i.y,n.render(this,a),n},i.prototype.setParent=function(t){if(!t||!t.addChild)throw new Error("setParent: Argument must be a Container");return t.addChild(this),t},i.prototype.setTransform=function(t,e,r,i,n,o,s,a,h){return this.position.x=t||0,this.position.y=e||0,this.scale.x=r?r:1,this.scale.y=i?i:1,this.rotation=n||0,this.skew.x=o||0,this.skew.y=s||0,this.pivot.x=a||0,this.pivot.y=h||0,this.dirtyTransform=!0,this},i.prototype.destroy=function(){this.position=null,this.scale=null,this.pivot=null,this.skew=null,this.parent=null,this._bounds=null,this._currentBounds=null,this._mask=null,this.worldTransform=null,this.filterArea=null}},{"../const":38,"../math":55,"../textures/RenderTexture":98,eventemitter3:25}],41:[function(t,e,r){function i(){n.call(this),this.fillAlpha=1,this.lineWidth=0,this.lineColor=0,this.graphicsData=[],this.tint=16777215,this._prevTint=16777215,this.blendMode=l.BLEND_MODES.NORMAL,this.currentPath=null,this._webGL={},this.isMask=!1,this.boundsPadding=0,this._localBounds=new u.Rectangle(0,0,1,1),this.dirty=!0,this.glDirty=!1,this.boundsDirty=!0,this.cachedSpriteDirty=!1}var n=t("../display/Container"),o=t("../textures/Texture"),s=t("../renderers/canvas/utils/CanvasBuffer"),a=t("../renderers/canvas/utils/CanvasGraphics"),h=t("./GraphicsData"),u=t("../math"),l=t("../const"),c=new u.Point;i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.clone=function(){var t=new i;t.renderable=this.renderable,t.fillAlpha=this.fillAlpha,t.lineWidth=this.lineWidth,t.lineColor=this.lineColor,t.tint=this.tint,t.blendMode=this.blendMode,t.isMask=this.isMask,t.boundsPadding=this.boundsPadding,t.dirty=!0,t.glDirty=!0,t.cachedSpriteDirty=this.cachedSpriteDirty;for(var e=0;e=c;++c)l=c/s,n=h+(t-h)*l,o=u+(e-u)*l,a.push(n+(t+(r-t)*l-n)*l,o+(e+(i-e)*l-o)*l);return this.dirty=this.boundsDirty=!0,this},i.prototype.bezierCurveTo=function(t,e,r,i,n,o){this.currentPath?0===this.currentPath.shape.points.length&&(this.currentPath.shape.points=[0,0]):this.moveTo(0,0);for(var s,a,h,u,l,c=20,p=this.currentPath.shape.points,d=p[p.length-2],f=p[p.length-1],v=0,g=1;c>=g;++g)v=g/c,s=1-v,a=s*s,h=a*s,u=v*v,l=u*v,p.push(h*d+3*a*v*t+3*s*u*r+l*n,h*f+3*a*v*e+3*s*u*i+l*o);return this.dirty=this.boundsDirty=!0,this},i.prototype.arcTo=function(t,e,r,i,n){this.currentPath?0===this.currentPath.shape.points.length&&this.currentPath.shape.points.push(t,e):this.moveTo(t,e);var o=this.currentPath.shape.points,s=o[o.length-2],a=o[o.length-1],h=a-e,u=s-t,l=i-e,c=r-t,p=Math.abs(h*c-u*l);if(1e-8>p||0===n)(o[o.length-2]!==t||o[o.length-1]!==e)&&o.push(t,e);else{var d=h*h+u*u,f=l*l+c*c,v=h*l+u*c,g=n*Math.sqrt(d)/p,m=n*Math.sqrt(f)/p,y=g*v/d,x=m*v/f,b=g*c+m*u,_=g*l+m*h,T=u*(m+y),E=h*(m+y),S=c*(g+x),w=l*(g+x),C=Math.atan2(E-_,T-b),A=Math.atan2(w-_,S-b);this.arc(b+t,_+e,n,C,A,u*l>c*h)}return this.dirty=this.boundsDirty=!0,this},i.prototype.arc=function(t,e,r,i,n,o){if(o=o||!1,i===n)return this;!o&&i>=n?n+=2*Math.PI:o&&n>=i&&(i+=2*Math.PI);var s=o?-1*(i-n):n-i,a=40*Math.ceil(Math.abs(s)/(2*Math.PI));if(0===s)return this;var h=t+Math.cos(i)*r,u=e+Math.sin(i)*r;this.currentPath?this.currentPath.shape.points.push(h,u):this.moveTo(h,u);for(var l=this.currentPath.shape.points,c=s/(2*a),p=2*c,d=Math.cos(c),f=Math.sin(c),v=a-1,g=v%1/v,m=0;v>=m;m++){var y=m+g*m,x=c+i+p*y,b=Math.cos(x),_=-Math.sin(x);l.push((d*b+f*_)*r+t,(d*-_+f*b)*r+e)}return this.dirty=this.boundsDirty=!0,this},i.prototype.beginFill=function(t,e){return this.filling=!0,this.fillColor=t||0,this.fillAlpha=void 0===e?1:e,this.currentPath&&this.currentPath.shape.points.length<=2&&(this.currentPath.fill=this.filling,this.currentPath.fillColor=this.fillColor,this.currentPath.fillAlpha=this.fillAlpha),this},i.prototype.endFill=function(){return this.filling=!1,this.fillColor=null,this.fillAlpha=1,this},i.prototype.drawRect=function(t,e,r,i){return this.drawShape(new u.Rectangle(t,e,r,i)),this},i.prototype.drawRoundedRect=function(t,e,r,i,n){return this.drawShape(new u.RoundedRectangle(t,e,r,i,n)),this},i.prototype.drawCircle=function(t,e,r){return this.drawShape(new u.Circle(t,e,r)),this},i.prototype.drawEllipse=function(t,e,r,i){return this.drawShape(new u.Ellipse(t,e,r,i)),this},i.prototype.drawPolygon=function(t){var e=t,r=!0;if(e instanceof u.Polygon&&(r=e.closed,e=e.points),!Array.isArray(e)){e=new Array(arguments.length);for(var i=0;ig?g:S,S=S>y?y:S,S=S>b?b:S,w=w>m?m:w,w=w>x?x:w,w=w>_?_:w,T=g>T?g:T,T=y>T?y:T,T=b>T?b:T,E=m>E?m:E,E=x>E?x:E,E=_>E?_:E,this._bounds.x=S,this._bounds.width=T-S,this._bounds.y=w,this._bounds.height=E-w,this._currentBounds=this._bounds}return this._currentBounds},i.prototype.containsPoint=function(t){this.worldTransform.applyInverse(t,c); +for(var e=this.graphicsData,r=0;rs?s:t,e=s+h>e?s+h:e,r=r>a?a:r,i=a+u>i?a+u:i;else if(d===l.SHAPES.CIRC)s=n.x,a=n.y,h=n.radius+f/2,u=n.radius+f/2,t=t>s-h?s-h:t,e=s+h>e?s+h:e,r=r>a-u?a-u:r,i=a+u>i?a+u:i;else if(d===l.SHAPES.ELIP)s=n.x,a=n.y,h=n.width+f/2,u=n.height+f/2,t=t>s-h?s-h:t,e=s+h>e?s+h:e,r=r>a-u?a-u:r,i=a+u>i?a+u:i;else{o=n.points;for(var v=0;vs-f?s-f:t,e=s+f>e?s+f:e,r=r>a-f?a-f:r,i=a+f>i?a+f:i}}else t=0,e=0,r=0,i=0;var g=this.boundsPadding;this._localBounds.x=t-g,this._localBounds.width=e-t+2*g,this._localBounds.y=r-g,this._localBounds.height=i-r+2*g},i.prototype.drawShape=function(t){this.currentPath&&this.currentPath.shape.points.length<=2&&this.graphicsData.pop(),this.currentPath=null;var e=new h(this.lineWidth,this.lineColor,this.lineAlpha,this.fillColor,this.fillAlpha,this.filling,t);return this.graphicsData.push(e),e.type===l.SHAPES.POLY&&(e.shape.closed=e.shape.closed||this.filling,this.currentPath=e),this.dirty=this.boundsDirty=!0,e},i.prototype.destroy=function(){n.prototype.destroy.apply(this,arguments);for(var t=0;ts;s++)e=o.data[s],1===o.data[s].mode||(shader=this.primitiveShader,r.bindShader(shader),shader.uniforms.translationMatrix=t.worldTransform.toArray(!0),shader.uniforms.tint=n.hex2rgb(t.tint),shader.uniforms.alpha=t.worldAlpha,i.bindBuffer(i.ARRAY_BUFFER,e.buffer),shader=this.primitiveShader,shader.attributes.aVertexPosition.pointer(i.FLOAT,!1,24,0),shader.attributes.aColor.pointer(i.FLOAT,!1,24,8),i.enableVertexAttribArray(shader.attributes.aVertexPosition.location),i.enableVertexAttribArray(shader.attributes.aColor.location),i.bindBuffer(i.ELEMENT_ARRAY_BUFFER,e.indexBuffer),i.drawElements(i.TRIANGLE_STRIP,e.indices.length,i.UNSIGNED_SHORT,0)),r.drawCount++},i.prototype.updateGraphics=function(t){var e=this.renderer.gl,r=t._webGL[e.id];r||(r=t._webGL[e.id]={lastIndex:0,data:[],gl:e}),t.dirty=!1;var i;if(t.clearDirty){for(t.clearDirty=!1,i=0;i=6)if(a.points.length<2*this.maximumSimplePolySize){s=this.switchMode(r,0);var h=buildPoly(a,s);h||(s=this.switchMode(r,1),buildComplexPoly(a,s))}else s=this.switchMode(r,1),buildComplexPoly(a,s);a.lineWidth>0&&(s=this.switchMode(r,0),l(a,s))}else s=this.switchMode(r,0),a.type===o.SHAPES.RECT?buildRectangle(a,s):a.type===o.SHAPES.CIRC||a.type===o.SHAPES.ELIP?buildCircle(a,s):a.type===o.SHAPES.RREC&&buildRoundedRectangle(a,s);r.lastIndex++}for(i=0;i32e4||r.mode!==e||1===e)&&(r=this.graphicsDataPool.pop()||new h(t.gl),r.mode=e,t.data.push(r))):(r=this.graphicsDataPool.pop()||new h(t.gl),r.mode=e,t.data.push(r)),r.dirty=!0,r}},{"../../const":38,"../../math":55,"../../renderers/webgl/WebGLRenderer":72,"../../renderers/webgl/utils/ObjectRenderer":87,"../../utils":105,"./WebGLGraphicsData":44,"./shaders/PrimitiveShader":45,"./utils/buildCircle":46,"./utils/buildComplexPoly":47,"./utils/buildLine":48,"./utils/buildPoly":49,"./utils/buildRectangle":50,"./utils/buildRoundedRectangle":51,earcut:24}],44:[function(t,e,r){function i(t){this.gl=t,this.color=[0,0,0],this.points=[],this.indices=[],this.buffer=t.createBuffer(),this.indexBuffer=t.createBuffer(),this.mode=1,this.alpha=1,this.dirty=!0,this.glPoints=null,this.glIndices=null}i.prototype.constructor=i,e.exports=i,i.prototype.reset=function(){this.points.length=0,this.indices.length=0},i.prototype.upload=function(){var t=this.gl;this.glPoints=new Float32Array(this.points),t.bindBuffer(t.ARRAY_BUFFER,this.buffer),t.bufferData(t.ARRAY_BUFFER,this.glPoints,t.STATIC_DRAW),this.glIndices=new Uint16Array(this.indices),t.bindBuffer(t.ELEMENT_ARRAY_BUFFER,this.indexBuffer),t.bufferData(t.ELEMENT_ARRAY_BUFFER,this.glIndices,t.STATIC_DRAW),this.dirty=!1},i.prototype.destroy=function(){this.color=null,this.points=null,this.indices=null,this.gl.deleteBuffer(this.buffer),this.gl.deleteBuffer(this.indexBuffer),this.gl=null,this.buffer=null,this.indexBuffer=null,this.glPoints=null,this.glIndices=null}},{}],45:[function(t,e,r){function i(t){n.call(this,t,["attribute vec2 aVertexPosition;","attribute vec4 aColor;","uniform mat3 translationMatrix;","uniform mat3 projectionMatrix;","uniform float alpha;","uniform float flipY;","uniform vec3 tint;","varying vec4 vColor;","void main(void){"," gl_Position = vec4((projectionMatrix * translationMatrix * vec3(aVertexPosition, 1.0)).xy, 0.0, 1.0);"," vColor = aColor * vec4(tint * alpha, alpha);","}"].join("\n"),["precision mediump float;","varying vec4 vColor;","void main(void){"," gl_FragColor = vColor;","}"].join("\n"))}var n=t("pixi-gl-core").GLShader;i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i},{"pixi-gl-core":1}],46:[function(t,e,r){var i=t("./buildLine"),n=t("../../../utils"),o=function(t,e){var r,o,s=t.shape,a=s.x,h=s.y;t.type===CONST.SHAPES.CIRC?(r=s.radius,o=s.radius):(r=s.width,o=s.height);var u=Math.floor(30*Math.sqrt(s.radius))||Math.floor(15*Math.sqrt(s.width+s.height)),l=2*Math.PI/u,c=0;if(t.fill){var p=n.hex2rgb(t.fillColor),d=t.fillAlpha,f=p[0]*d,v=p[1]*d,g=p[2]*d,m=e.points,y=e.indices,x=m.length/6;for(y.push(x),c=0;u+1>c;c++)m.push(a,h,f,v,g,d),m.push(a+Math.sin(l*c)*r,h+Math.cos(l*c)*o,f,v,g,d),y.push(x++,x++);y.push(x-1)}if(t.lineWidth){var b=t.points;for(t.points=[],c=0;u+1>c;c++)t.points.push(a+Math.sin(l*c)*r,h+Math.cos(l*c)*o);i(t,e),t.points=b}};e.exports=o},{"../../../utils":105,"./buildLine":48}],47:[function(t,e,r){var i=(t("./buildLine"),t("../../../utils")),n=function(t,e){var r=t.points.slice();if(!(r.length<6)){var n=e.indices;e.points=r,e.alpha=t.fillAlpha,e.color=i.hex2rgb(t.fillColor);for(var o,s,a=1/0,h=-(1/0),u=1/0,l=-(1/0),c=0;co?o:a,h=o>h?o:h,u=u>s?s:u,l=s>l?s:l;r.push(a,u,h,u,h,l,a,l);var p=r.length/2;for(c=0;p>c;c++)n.push(c)}};e.exports=n},{"../../../utils":105,"./buildLine":48}],48:[function(t,e,r){var i=t("../../../math"),n=t("../../../utils"),o=function(t,e){var r=0,o=t.points;if(0!==o.length){var s=new i.Point(o[0],o[1]),a=new i.Point(o[o.length-2],o[o.length-1]);if(s.x===a.x&&s.y===a.y){o=o.slice(),o.pop(),o.pop(),a=new i.Point(o[o.length-2],o[o.length-1]);var h=a.x+.5*(s.x-a.x),u=a.y+.5*(s.y-a.y);o.unshift(h,u),o.push(h,u)}var l,c,p,d,f,v,g,m,y,x,b,_,T,E,S,w,C,A,M,R,O,P,D,F=e.points,L=e.indices,B=o.length/2,I=o.length,N=F.length/6,U=t.lineWidth/2,k=n.hex2rgb(t.lineColor),j=t.lineAlpha,G=k[0]*j,X=k[1]*j,Y=k[2]*j;for(p=o[0],d=o[1],f=o[2],v=o[3],y=-(d-v),x=p-f,D=Math.sqrt(y*y+x*x),y/=D,x/=D,y*=U,x*=U,F.push(p-y,d-x,G,X,Y,j),F.push(p+y,d+x,G,X,Y,j),r=1;B-1>r;r++)p=o[2*(r-1)],d=o[2*(r-1)+1],f=o[2*r],v=o[2*r+1],g=o[2*(r+1)],m=o[2*(r+1)+1],y=-(d-v),x=p-f,D=Math.sqrt(y*y+x*x),y/=D,x/=D,y*=U,x*=U,b=-(v-m),_=f-g,D=Math.sqrt(b*b+_*_),b/=D,_/=D,b*=U,_*=U,S=-x+d-(-x+v),w=-y+f-(-y+p),C=(-y+p)*(-x+v)-(-y+f)*(-x+d),A=-_+m-(-_+v),M=-b+f-(-b+g),R=(-b+g)*(-_+v)-(-b+f)*(-_+m),O=S*M-A*w,Math.abs(O)<.1?(O+=10.1,F.push(f-y,v-x,G,X,Y,j),F.push(f+y,v+x,G,X,Y,j)):(l=(w*R-M*C)/O,c=(A*C-S*R)/O,P=(l-f)*(l-f)+(c-v)*(c-v),P>19600?(T=y-b,E=x-_,D=Math.sqrt(T*T+E*E),T/=D,E/=D,T*=U,E*=U,F.push(f-T,v-E),F.push(G,X,Y,j),F.push(f+T,v+E),F.push(G,X,Y,j),F.push(f-T,v-E),F.push(G,X,Y,j),I++):(F.push(l,c),F.push(G,X,Y,j),F.push(f-(l-f),v-(c-v)),F.push(G,X,Y,j)));for(p=o[2*(B-2)],d=o[2*(B-2)+1],f=o[2*(B-1)],v=o[2*(B-1)+1],y=-(d-v),x=p-f,D=Math.sqrt(y*y+x*x),y/=D,x/=D,y*=U,x*=U,F.push(f-y,v-x),F.push(G,X,Y,j),F.push(f+y,v+x),F.push(G,X,Y,j),L.push(N),r=0;I>r;r++)L.push(N++);L.push(N-1)}};e.exports=o},{"../../../math":55,"../../../utils":105}],49:[function(t,e,r){var i=t("../../../utils"),n=function(t,e){var r=t.points;if(!(r.length<6)){var n=e.points,o=e.indices,s=r.length/2,a=i.hex2rgb(t.fillColor),h=t.fillAlpha,u=a[0]*h,l=a[1]*h,c=a[2]*h,p=earcut(r,null,2);if(!p)return!1;var d=n.length/6,f=0;for(f=0;ff;f++)n.push(r[2*f],r[2*f+1],u,l,c,h);return!0}};e.exports=n},{"../../../utils":105}],50:[function(t,e,r){var i=t("./buildLine"),n=t("../../../utils"),o=function(t,e){var r=t.shape,o=r.x,s=r.y,a=r.width,h=r.height;if(t.fill){var u=n.hex2rgb(t.fillColor),l=t.fillAlpha,c=u[0]*l,p=u[1]*l,d=u[2]*l,f=e.points,v=e.indices,g=f.length/6;f.push(o,s),f.push(c,p,d,l),f.push(o+a,s),f.push(c,p,d,l),f.push(o,s+h),f.push(c,p,d,l),f.push(o+a,s+h),f.push(c,p,d,l),v.push(g,g,g+1,g+2,g+3,g+3)}if(t.lineWidth){var m=t.points;t.points=[o,s,o+a,s,o+a,s+h,o,s+h,o,s],i(t,e),t.points=m}};e.exports=o},{"../../../utils":105,"./buildLine":48}],51:[function(t,e,r){var i=(t("./buildLine"),t("../../../utils"));buildRoundedRectangle=function(t,e){var r=t.shape,n=r.x,o=r.y,s=r.width,a=r.height,h=r.radius,u=[];if(u.push(n,o+h),this.quadraticBezierCurve(n,o+a-h,n,o+a,n+h,o+a,u),this.quadraticBezierCurve(n+s-h,o+a,n+s,o+a,n+s,o+a-h,u),this.quadraticBezierCurve(n+s,o+h,n+s,o,n+s-h,o,u),this.quadraticBezierCurve(n+h,o,n,o,n,o+h+1e-10,u),t.fill){var l=i.hex2rgb(t.fillColor),c=t.fillAlpha,p=l[0]*c,d=l[1]*c,f=l[2]*c,v=e.points,g=e.indices,m=v.length/6,y=earcut(u,null,2),x=0;for(x=0;x=m;m++)g=m/f,h=a(t,r,g),u=a(e,i,g),l=a(r,n,g),c=a(i,o,g),p=a(h,l,g),d=a(u,c,g),v.push(p,d);return v},e.exports=buildRoundedRectangle},{"../../../utils":105,"./buildLine":48}],52:[function(t,e,r){var i=e.exports=Object.assign(t("./const"),t("./math"),{utils:t("./utils"),ticker:t("./ticker"),DisplayObject:t("./display/DisplayObject"),Container:t("./display/Container"),Sprite:t("./sprites/Sprite"),ParticleContainer:t("./particles/ParticleContainer"),SpriteRenderer:t("./sprites/webgl/SpriteRenderer"),ParticleRenderer:t("./particles/webgl/ParticleRenderer"),Text:t("./text/Text"),Graphics:t("./graphics/Graphics"),GraphicsData:t("./graphics/GraphicsData"),GraphicsRenderer:t("./graphics/webgl/GraphicsRenderer"),Texture:t("./textures/Texture"),BaseTexture:t("./textures/BaseTexture"),RenderTexture:t("./textures/RenderTexture"),VideoBaseTexture:t("./textures/VideoBaseTexture"),TextureUvs:t("./textures/TextureUvs"),CanvasRenderer:t("./renderers/canvas/CanvasRenderer"),CanvasGraphics:t("./renderers/canvas/utils/CanvasGraphics"),CanvasBuffer:t("./renderers/canvas/utils/CanvasBuffer"),WebGLRenderer:t("./renderers/webgl/WebGLRenderer"),WebGLManager:t("./renderers/webgl/managers/WebGLManager"),ShaderManager:t("./renderers/webgl/managers/ShaderManager"),Shader:t("./renderers/webgl/shaders/Shader"),ObjectRenderer:t("./renderers/webgl/utils/ObjectRenderer"),RenderTarget:t("./renderers/webgl/utils/RenderTarget"),AbstractFilter:t("./renderers/webgl/filters/AbstractFilter"),FXAAFilter:t("./renderers/webgl/filters/FXAAFilter"),SpriteMaskFilter:t("./renderers/webgl/filters/SpriteMaskFilter"),glCore:t("pixi-gl-core"),autoDetectRenderer:function(t,e,r,n){return t=t||800,e=e||600,!n&&i.utils.isWebGLSupported()?new i.WebGLRenderer(t,e,r):new i.CanvasRenderer(t,e,r)}})},{"./const":38,"./display/Container":39,"./display/DisplayObject":40,"./graphics/Graphics":41,"./graphics/GraphicsData":42,"./graphics/webgl/GraphicsRenderer":43,"./math":55,"./particles/ParticleContainer":61,"./particles/webgl/ParticleRenderer":63,"./renderers/canvas/CanvasRenderer":66,"./renderers/canvas/utils/CanvasBuffer":67,"./renderers/canvas/utils/CanvasGraphics":68,"./renderers/webgl/WebGLRenderer":72,"./renderers/webgl/filters/AbstractFilter":73,"./renderers/webgl/filters/FXAAFilter":74,"./renderers/webgl/filters/SpriteMaskFilter":75,"./renderers/webgl/managers/ShaderManager":79,"./renderers/webgl/managers/WebGLManager":81,"./renderers/webgl/shaders/Shader":84,"./renderers/webgl/utils/ObjectRenderer":87,"./renderers/webgl/utils/RenderTarget":89,"./sprites/Sprite":93,"./sprites/webgl/SpriteRenderer":94,"./text/Text":96,"./textures/BaseTexture":97,"./textures/RenderTexture":98,"./textures/Texture":99,"./textures/TextureUvs":100,"./textures/VideoBaseTexture":101,"./ticker":103,"./utils":105,"pixi-gl-core":1}],53:[function(t,e,r){function i(){this.a=1,this.b=0,this.c=0,this.d=1,this.tx=0,this.ty=0}var n=t("./Point");i.prototype.constructor=i,e.exports=i,i.prototype.fromArray=function(t){this.a=t[0],this.b=t[1],this.c=t[3],this.d=t[4],this.tx=t[2],this.ty=t[5]},i.prototype.set=function(t,e,r,i,n,o){return this.a=t,this.b=e,this.c=r,this.d=i,this.tx=n,this.ty=o,this},i.prototype.toArray=function(t,e){this.array||(this.array=new Float32Array(9));var r=e||this.array;return t?(r[0]=this.a,r[1]=this.b,r[2]=0,r[3]=this.c,r[4]=this.d,r[5]=0,r[6]=this.tx,r[7]=this.ty,r[8]=1):(r[0]=this.a,r[1]=this.c,r[2]=this.tx,r[3]=this.b,r[4]=this.d,r[5]=this.ty,r[6]=0,r[7]=0,r[8]=1),r},i.prototype.apply=function(t,e){e=e||new n;var r=t.x,i=t.y;return e.x=this.a*r+this.c*i+this.tx,e.y=this.b*r+this.d*i+this.ty,e},i.prototype.applyInverse=function(t,e){e=e||new n;var r=1/(this.a*this.d+this.c*-this.b),i=t.x,o=t.y;return e.x=this.d*r*i+-this.c*r*o+(this.ty*this.c-this.tx*this.d)*r,e.y=this.a*r*o+-this.b*r*i+(-this.ty*this.a+this.tx*this.b)*r,e},i.prototype.translate=function(t,e){return this.tx+=t,this.ty+=e,this},i.prototype.scale=function(t,e){return this.a*=t,this.d*=e,this.c*=t,this.b*=e,this.tx*=t,this.ty*=e,this},i.prototype.rotate=function(t){var e=Math.cos(t),r=Math.sin(t),i=this.a,n=this.c,o=this.tx;return this.a=i*e-this.b*r,this.b=i*r+this.b*e,this.c=n*e-this.d*r,this.d=n*r+this.d*e,this.tx=o*e-this.ty*r,this.ty=o*r+this.ty*e,this},i.prototype.append=function(t){var e=this.a,r=this.b,i=this.c,n=this.d;return this.a=t.a*e+t.b*i,this.b=t.a*r+t.b*n,this.c=t.c*e+t.d*i,this.d=t.c*r+t.d*n,this.tx=t.tx*e+t.ty*i+this.tx,this.ty=t.tx*r+t.ty*n+this.ty,this},i.prototype.setTransform=function(t,e,r,i,n,o,s,a,h){var u,l,c,p,d,f,v,g,m,y;return d=Math.sin(s),f=Math.cos(s),v=Math.cos(h),g=Math.sin(h),m=-Math.sin(a),y=Math.cos(a),u=f*n,l=d*n,c=-d*o,p=f*o,this.a=v*u+g*c,this.b=v*l+g*p,this.c=m*u+y*c,this.d=m*l+y*p,this.tx=t+(r*u+i*c),this.ty=e+(r*l+i*p),this},i.prototype.prepend=function(t){var e=this.tx;if(1!==t.a||0!==t.b||0!==t.c||1!==t.d){var r=this.a,i=this.c;this.a=r*t.a+this.b*t.c,this.b=r*t.b+this.b*t.d,this.c=i*t.a+this.d*t.c,this.d=i*t.b+this.d*t.d}return this.tx=e*t.a+this.ty*t.c+t.tx,this.ty=e*t.b+this.ty*t.d+t.ty,this},i.prototype.invert=function(){var t=this.a,e=this.b,r=this.c,i=this.d,n=this.tx,o=t*i-e*r;return this.a=i/o,this.b=-e/o,this.c=-r/o,this.d=t/o,this.tx=(r*this.ty-i*n)/o,this.ty=-(t*this.ty-e*n)/o,this},i.prototype.identity=function(){return this.a=1,this.b=0,this.c=0,this.d=1,this.tx=0,this.ty=0,this},i.prototype.clone=function(){var t=new i;return t.a=this.a,t.b=this.b,t.c=this.c,t.d=this.d,t.tx=this.tx,t.ty=this.ty,t},i.prototype.copy=function(t){return t.a=this.a,t.b=this.b,t.c=this.c,t.d=this.d,t.tx=this.tx,t.ty=this.ty,t},i.IDENTITY=new i,i.TEMP_MATRIX=new i},{"./Point":54}],54:[function(t,e,r){function i(t,e){this.x=t||0,this.y=e||0}i.prototype.constructor=i,e.exports=i,i.prototype.clone=function(){return new i(this.x,this.y)},i.prototype.copy=function(t){this.set(t.x,t.y)},i.prototype.equals=function(t){return t.x===this.x&&t.y===this.y},i.prototype.set=function(t,e){this.x=t||0,this.y=e||(0!==e?this.x:0)}},{}],55:[function(t,e,r){e.exports={Point:t("./Point"),Matrix:t("./Matrix"),Circle:t("./shapes/Circle"),Ellipse:t("./shapes/Ellipse"),Polygon:t("./shapes/Polygon"),Rectangle:t("./shapes/Rectangle"),RoundedRectangle:t("./shapes/RoundedRectangle")}},{"./Matrix":53,"./Point":54,"./shapes/Circle":56,"./shapes/Ellipse":57,"./shapes/Polygon":58,"./shapes/Rectangle":59,"./shapes/RoundedRectangle":60}],56:[function(t,e,r){function i(t,e,r){this.x=t||0,this.y=e||0,this.radius=r||0,this.type=o.SHAPES.CIRC}var n=t("./Rectangle"),o=t("../../const");i.prototype.constructor=i,e.exports=i,i.prototype.clone=function(){return new i(this.x,this.y,this.radius)},i.prototype.contains=function(t,e){if(this.radius<=0)return!1;var r=this.x-t,i=this.y-e,n=this.radius*this.radius;return r*=r,i*=i,n>=r+i},i.prototype.getBounds=function(){return new n(this.x-this.radius,this.y-this.radius,2*this.radius,2*this.radius)}},{"../../const":38,"./Rectangle":59}],57:[function(t,e,r){function i(t,e,r,i){this.x=t||0,this.y=e||0,this.width=r||0,this.height=i||0,this.type=o.SHAPES.ELIP}var n=t("./Rectangle"),o=t("../../const");i.prototype.constructor=i,e.exports=i,i.prototype.clone=function(){return new i(this.x,this.y,this.width,this.height)},i.prototype.contains=function(t,e){if(this.width<=0||this.height<=0)return!1;var r=(t-this.x)/this.width,i=(e-this.y)/this.height;return r*=r,i*=i,1>=r+i},i.prototype.getBounds=function(){return new n(this.x-this.width,this.y-this.height,this.width,this.height)}},{"../../const":38,"./Rectangle":59}],58:[function(t,e,r){function i(t){var e=t;if(!Array.isArray(e)){e=new Array(arguments.length);for(var r=0;rs;s++)i.push(e[s].x,e[s].y);e=i}this.closed=!0,this.points=e,this.type=o.SHAPES.POLY}var n=t("../Point"),o=t("../../const");i.prototype.constructor=i,e.exports=i,i.prototype.clone=function(){return new i(this.points.slice())},i.prototype.contains=function(t,e){for(var r=!1,i=this.points.length/2,n=0,o=i-1;i>n;o=n++){var s=this.points[2*n],a=this.points[2*n+1],h=this.points[2*o],u=this.points[2*o+1],l=a>e!=u>e&&(h-s)*(e-a)/(u-a)+s>t;l&&(r=!r)}return r}},{"../../const":38,"../Point":54}],59:[function(t,e,r){function i(t,e,r,i){this.x=t||0,this.y=e||0,this.width=r||0,this.height=i||0,this.type=n.SHAPES.RECT}var n=t("../../const");i.prototype.constructor=i,e.exports=i,i.EMPTY=new i(0,0,0,0),i.prototype.clone=function(){return new i(this.x,this.y,this.width,this.height)},i.prototype.contains=function(t,e){return this.width<=0||this.height<=0?!1:t>=this.x&&t=this.y&&e=this.x&&t<=this.x+this.width&&e>=this.y&&e<=this.y+this.height?!0:!1}},{"../../const":38}],61:[function(t,e,r){function i(t,e,r){n.call(this),r=r||15e3,t=t||15e3;var i=16384;r>i&&(r=i),r>t&&(r=t),this._properties=[!1,!0,!1,!1,!1],this._maxSize=t,this._batchSize=r,this._buffers=null,this._bufferToUpdate=0,this.interactiveChildren=!1,this.blendMode=o.BLEND_MODES.NORMAL,this.roundPixels=!0,this.setProperties(e)}var n=t("../display/Container"),o=t("../const");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.setProperties=function(t){t&&(this._properties[0]="scale"in t?!!t.scale:this._properties[0],this._properties[1]="position"in t?!!t.position:this._properties[1],this._properties[2]="rotation"in t?!!t.rotation:this._properties[2],this._properties[3]="uvs"in t?!!t.uvs:this._properties[3],this._properties[4]="alpha"in t?!!t.alpha:this._properties[4])},i.prototype.updateTransform=function(){this.displayObjectUpdateTransform()},i.prototype.renderWebGL=function(t){this.visible&&!(this.worldAlpha<=0)&&this.children.length&&this.renderable&&(t.setObjectRenderer(t.plugins.particle),t.plugins.particle.render(this))},i.prototype.onChildrenChange=function(t){var e=Math.floor(t/this._batchSize);er;r+=6,i+=4)this.indices[r+0]=i+0,this.indices[r+1]=i+1,this.indices[r+2]=i+2,this.indices[r+3]=i+0,this.indices[r+4]=i+2,this.indices[r+5]=i+3;this.shader=null,this.indexBuffer=null,this.properties=null,this.tempMatrix=new h.Matrix}var n=t("../../renderers/webgl/utils/ObjectRenderer"),o=t("../../renderers/webgl/WebGLRenderer"),s=t("./ParticleShader"),a=t("./ParticleBuffer"),h=t("../../math");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,o.registerPlugin("particle",i),i.prototype.onContextChange=function(){var t=this.renderer.gl;this.shader=new s(this.renderer.shaderManager),this.indexBuffer=t.createBuffer(),t.bindBuffer(t.ELEMENT_ARRAY_BUFFER,this.indexBuffer),t.bufferData(t.ELEMENT_ARRAY_BUFFER,this.indices,t.STATIC_DRAW),this.properties=[{attribute:this.shader.attributes.aVertexPosition,size:2,uploadFunction:this.uploadVertices,offset:0},{attribute:this.shader.attributes.aPositionCoord,size:2,uploadFunction:this.uploadPosition,offset:0},{attribute:this.shader.attributes.aRotation,size:1,uploadFunction:this.uploadRotation,offset:0},{attribute:this.shader.attributes.aTextureCoord,size:2,uploadFunction:this.uploadUvs,offset:0},{attribute:this.shader.attributes.aColor,size:1,uploadFunction:this.uploadAlpha,offset:0}]},i.prototype.start=function(){var t=this.renderer.gl;t.activeTexture(t.TEXTURE0),t.bindBuffer(t.ELEMENT_ARRAY_BUFFER,this.indexBuffer);var e=this.shader;this.renderer.shaderManager.setShader(e)},i.prototype.render=function(t){var e=t.children,r=e.length,i=t._maxSize,n=t._batchSize;if(0!==r){r>i&&(r=i),t._buffers||(t._buffers=this.generateBuffers(t)),this.renderer.blendModeManager.setBlendMode(t.blendMode);var o=this.renderer.gl,s=t.worldTransform.copy(this.tempMatrix);s.prepend(this.renderer.currentRenderTarget.projectionMatrix),o.uniformMatrix3fv(this.shader.uniforms.projectionMatrix._location,!1,s.toArray(!0)),o.uniform1f(this.shader.uniforms.uAlpha._location,t.worldAlpha);var a=e[0]._texture.baseTexture;if(a._glTextures[o.id])o.bindTexture(o.TEXTURE_2D,a._glTextures[o.id]);else{if(!this.renderer.updateTexture(a))return;t._properties[0]&&t._properties[3]||(t._bufferToUpdate=0)}for(var h=0,u=0;r>h;h+=n,u+=1){var l=r-h;l>n&&(l=n);var c=t._buffers[u];c.uploadDynamic(e,h,l),t._bufferToUpdate===u&&(c.uploadStatic(e,h,l),t._bufferToUpdate=u+1),c.bind(this.shader),o.drawElements(o.TRIANGLES,6*l,o.UNSIGNED_SHORT,0),this.renderer.drawCount++}}},i.prototype.generateBuffers=function(t){var e,r=this.renderer.gl,i=[],n=t._maxSize,o=t._batchSize,s=t._properties;for(e=0;n>e;e+=o)i.push(new a(r,this.properties,s,o));return i},i.prototype.uploadVertices=function(t,e,r,i,n,o){for(var s,a,h,u,l,c,p,d,f,v=0;r>v;v++)s=t[e+v],a=s._texture,u=s.scale.x,l=s.scale.y,a.trim?(h=a.trim,p=h.x-s.anchor.x*h.width,c=p+a.crop.width,f=h.y-s.anchor.y*h.height,d=f+a.crop.height):(c=a._frame.width*(1-s.anchor.x),p=a._frame.width*-s.anchor.x,d=a._frame.height*(1-s.anchor.y),f=a._frame.height*-s.anchor.y),i[o]=p*u,i[o+1]=f*l,i[o+n]=c*u,i[o+n+1]=f*l,i[o+2*n]=c*u,i[o+2*n+1]=d*l,i[o+3*n]=p*u,i[o+3*n+1]=d*l,o+=4*n},i.prototype.uploadPosition=function(t,e,r,i,n,o){for(var s=0;r>s;s++){var a=t[e+s].position;i[o]=a.x,i[o+1]=a.y,i[o+n]=a.x,i[o+n+1]=a.y,i[o+2*n]=a.x,i[o+2*n+1]=a.y,i[o+3*n]=a.x,i[o+3*n+1]=a.y,o+=4*n}},i.prototype.uploadRotation=function(t,e,r,i,n,o){for(var s=0;r>s;s++){var a=t[e+s].rotation;i[o]=a,i[o+n]=a,i[o+2*n]=a,i[o+3*n]=a,o+=4*n}},i.prototype.uploadUvs=function(t,e,r,i,n,o){for(var s=0;r>s;s++){var a=t[e+s]._texture._uvs;a?(i[o]=a.x0,i[o+1]=a.y0,i[o+n]=a.x1,i[o+n+1]=a.y1,i[o+2*n]=a.x2,i[o+2*n+1]=a.y2,i[o+3*n]=a.x3,i[o+3*n+1]=a.y3,o+=4*n):(i[o]=0,i[o+1]=0,i[o+n]=0,i[o+n+1]=0,i[o+2*n]=0,i[o+2*n+1]=0,i[o+3*n]=0,i[o+3*n+1]=0,o+=4*n)}},i.prototype.uploadAlpha=function(t,e,r,i,n,o){for(var s=0;r>s;s++){var a=t[e+s].alpha;i[o]=a,i[o+n]=a,i[o+2*n]=a,i[o+3*n]=a,o+=4*n}},i.prototype.destroy=function(){this.renderer.gl&&this.renderer.gl.deleteBuffer(this.indexBuffer),n.prototype.destroy.apply(this,arguments),this.shader.destroy(),this.indices=null,this.tempMatrix=null}},{"../../math":55,"../../renderers/webgl/WebGLRenderer":72,"../../renderers/webgl/utils/ObjectRenderer":87,"./ParticleBuffer":62,"./ParticleShader":64}],64:[function(t,e,r){function i(t){n.call(this,t,["attribute vec2 aVertexPosition;","attribute vec2 aTextureCoord;","attribute float aColor;","attribute vec2 aPositionCoord;","attribute vec2 aScale;","attribute float aRotation;","uniform mat3 projectionMatrix;","varying vec2 vTextureCoord;","varying float vColor;","void main(void){"," vec2 v = aVertexPosition;"," v.x = (aVertexPosition.x) * cos(aRotation) - (aVertexPosition.y) * sin(aRotation);"," v.y = (aVertexPosition.x) * sin(aRotation) + (aVertexPosition.y) * cos(aRotation);"," v = v + aPositionCoord;"," gl_Position = vec4((projectionMatrix * vec3(v, 1.0)).xy, 0.0, 1.0);"," vTextureCoord = aTextureCoord;"," vColor = aColor;","}"].join("\n"),["precision lowp float;","varying vec2 vTextureCoord;","varying float vColor;","uniform sampler2D uSampler;","uniform float uAlpha;","void main(void){"," vec4 color = texture2D(uSampler, vTextureCoord) * vColor * uAlpha;"," if (color.a == 0.0) discard;"," gl_FragColor = color;","}"].join("\n"),{uAlpha:{type:"1f",value:1}},{aPositionCoord:0,aRotation:0})}var n=t("../../renderers/webgl/shaders/TextureShader");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i},{"../../renderers/webgl/shaders/TextureShader":85}],65:[function(t,e,r){ +function i(t,e,r,i){if(a.call(this),n.sayHello(t),i)for(var h in s.DEFAULT_RENDER_OPTIONS)"undefined"==typeof i[h]&&(i[h]=s.DEFAULT_RENDER_OPTIONS[h]);else i=s.DEFAULT_RENDER_OPTIONS;this.type=s.RENDERER_TYPE.UNKNOWN,this.width=e||800,this.height=r||600,this.view=i.view||document.createElement("canvas"),this.resolution=i.resolution,this.transparent=i.transparent,this.autoResize=i.autoResize||!1,this.blendModes=null,this.preserveDrawingBuffer=i.preserveDrawingBuffer,this.clearBeforeRender=i.clearBeforeRender,this.roundPixels=i.roundPixels,this._backgroundColor=0,this._backgroundColorRgba=[0,0,0,0],this._backgroundColorString="#000000",this.backgroundColor=i.backgroundColor||this._backgroundColor,this._tempDisplayObjectParent={worldTransform:new o.Matrix,worldAlpha:1,children:[]},this._lastObjectRendered=this._tempDisplayObjectParent}var n=t("../utils"),o=t("../math"),s=t("../const"),a=t("eventemitter3");i.prototype=Object.create(a.prototype),i.prototype.constructor=i,e.exports=i,Object.defineProperties(i.prototype,{backgroundColor:{get:function(){return this._backgroundColor},set:function(t){this._backgroundColor=t,this._backgroundColorString=n.hex2string(t),n.hex2rgb(t,this._backgroundColorRgba)}}}),i.prototype.resize=function(t,e){this.width=t*this.resolution,this.height=e*this.resolution,this.view.width=this.width,this.view.height=this.height,this.autoResize&&(this.view.style.width=this.width/this.resolution+"px",this.view.style.height=this.height/this.resolution+"px")},i.prototype.destroy=function(t){t&&this.view.parentNode&&this.view.parentNode.removeChild(this.view),this.type=s.RENDERER_TYPE.UNKNOWN,this.width=0,this.height=0,this.view=null,this.resolution=0,this.transparent=!1,this.autoResize=!1,this.blendModes=null,this.preserveDrawingBuffer=!1,this.clearBeforeRender=!1,this.roundPixels=!1,this._backgroundColor=0,this._backgroundColorRgba=null,this._backgroundColorString=null}},{"../const":38,"../math":55,"../utils":105,eventemitter3:25}],66:[function(t,e,r){function i(t,e,r){r=r||{},n.call(this,"Canvas",t,e,r),this.type=h.RENDERER_TYPE.CANVAS,this.context=this.view.getContext("2d",{alpha:this.transparent}),this.refresh=!0,this.maskManager=new o,this.smoothProperty="imageSmoothingEnabled",this.context.imageSmoothingEnabled||(this.context.webkitImageSmoothingEnabled?this.smoothProperty="webkitImageSmoothingEnabled":this.context.mozImageSmoothingEnabled?this.smoothProperty="mozImageSmoothingEnabled":this.context.oImageSmoothingEnabled?this.smoothProperty="oImageSmoothingEnabled":this.context.msImageSmoothingEnabled&&(this.smoothProperty="msImageSmoothingEnabled")),this.initPlugins(),this._mapBlendModes(),this._tempDisplayObjectParent={worldTransform:new a.Matrix,worldAlpha:1},this.resize(t,e)}var n=t("../SystemRenderer"),o=t("./utils/CanvasMaskManager"),s=t("../../utils"),a=t("../../math"),h=t("../../const");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,s.pluginTarget.mixin(i),i.prototype.render=function(t){this.emit("prerender");var e=t.parent;this._lastObjectRendered=t,t.parent=this._tempDisplayObjectParent,t.updateTransform(),t.parent=e,this.context.setTransform(1,0,0,1,0,0),this.context.globalAlpha=1,this.context.globalCompositeOperation=this.blendModes[h.BLEND_MODES.NORMAL],navigator.isCocoonJS&&this.view.screencanvas&&(this.context.fillStyle="black",this.context.clear()),this.clearBeforeRender&&(this.transparent?this.context.clearRect(0,0,this.width,this.height):(this.context.fillStyle=this._backgroundColorString,this.context.fillRect(0,0,this.width,this.height))),this.renderDisplayObject(t,this.context),this.emit("postrender")},i.prototype.destroy=function(t){this.destroyPlugins(),n.prototype.destroy.call(this,t),this.context=null,this.refresh=!0,this.maskManager.destroy(),this.maskManager=null,this.smoothProperty=null},i.prototype.renderDisplayObject=function(t,e){var r=this.context;this.context=e,t.renderCanvas(this),this.context=r},i.prototype.resize=function(t,e){n.prototype.resize.call(this,t,e),this.smoothProperty&&(this.context[this.smoothProperty]=h.SCALE_MODES.DEFAULT===h.SCALE_MODES.LINEAR)},i.prototype._mapBlendModes=function(){this.blendModes||(this.blendModes={},s.canUseNewCanvasBlendModes()?(this.blendModes[h.BLEND_MODES.NORMAL]="source-over",this.blendModes[h.BLEND_MODES.ADD]="lighter",this.blendModes[h.BLEND_MODES.MULTIPLY]="multiply",this.blendModes[h.BLEND_MODES.SCREEN]="screen",this.blendModes[h.BLEND_MODES.OVERLAY]="overlay",this.blendModes[h.BLEND_MODES.DARKEN]="darken",this.blendModes[h.BLEND_MODES.LIGHTEN]="lighten",this.blendModes[h.BLEND_MODES.COLOR_DODGE]="color-dodge",this.blendModes[h.BLEND_MODES.COLOR_BURN]="color-burn",this.blendModes[h.BLEND_MODES.HARD_LIGHT]="hard-light",this.blendModes[h.BLEND_MODES.SOFT_LIGHT]="soft-light",this.blendModes[h.BLEND_MODES.DIFFERENCE]="difference",this.blendModes[h.BLEND_MODES.EXCLUSION]="exclusion",this.blendModes[h.BLEND_MODES.HUE]="hue",this.blendModes[h.BLEND_MODES.SATURATION]="saturate",this.blendModes[h.BLEND_MODES.COLOR]="color",this.blendModes[h.BLEND_MODES.LUMINOSITY]="luminosity"):(this.blendModes[h.BLEND_MODES.NORMAL]="source-over",this.blendModes[h.BLEND_MODES.ADD]="lighter",this.blendModes[h.BLEND_MODES.MULTIPLY]="source-over",this.blendModes[h.BLEND_MODES.SCREEN]="source-over",this.blendModes[h.BLEND_MODES.OVERLAY]="source-over",this.blendModes[h.BLEND_MODES.DARKEN]="source-over",this.blendModes[h.BLEND_MODES.LIGHTEN]="source-over",this.blendModes[h.BLEND_MODES.COLOR_DODGE]="source-over",this.blendModes[h.BLEND_MODES.COLOR_BURN]="source-over",this.blendModes[h.BLEND_MODES.HARD_LIGHT]="source-over",this.blendModes[h.BLEND_MODES.SOFT_LIGHT]="source-over",this.blendModes[h.BLEND_MODES.DIFFERENCE]="source-over",this.blendModes[h.BLEND_MODES.EXCLUSION]="source-over",this.blendModes[h.BLEND_MODES.HUE]="source-over",this.blendModes[h.BLEND_MODES.SATURATION]="source-over",this.blendModes[h.BLEND_MODES.COLOR]="source-over",this.blendModes[h.BLEND_MODES.LUMINOSITY]="source-over"))}},{"../../const":38,"../../math":55,"../../utils":105,"../SystemRenderer":65,"./utils/CanvasMaskManager":69}],67:[function(t,e,r){function i(t,e){this.canvas=document.createElement("canvas"),this.context=this.canvas.getContext("2d"),this.canvas.width=t,this.canvas.height=e}i.prototype.constructor=i,e.exports=i,Object.defineProperties(i.prototype,{width:{get:function(){return this.canvas.width},set:function(t){this.canvas.width=t}},height:{get:function(){return this.canvas.height},set:function(t){this.canvas.height=t}}}),i.prototype.clear=function(){this.context.setTransform(1,0,0,1,0,0),this.context.clearRect(0,0,this.canvas.width,this.canvas.height)},i.prototype.resize=function(t,e){this.canvas.width=t,this.canvas.height=e},i.prototype.destroy=function(){this.context=null,this.canvas=null}},{}],68:[function(t,e,r){var i=t("../../../const"),n={};e.exports=n,n.renderGraphics=function(t,e){var r=t.worldAlpha;t.dirty&&(this.updateGraphicsTint(t),t.dirty=!1);for(var n=0;nA?A:C,e.beginPath(),e.moveTo(T,E+C),e.lineTo(T,E+w-C),e.quadraticCurveTo(T,E+w,T+C,E+w),e.lineTo(T+S-C,E+w),e.quadraticCurveTo(T+S,E+w,T+S,E+w-C),e.lineTo(T+S,E+C),e.quadraticCurveTo(T+S,E,T+S-C,E),e.lineTo(T+C,E),e.quadraticCurveTo(T,E,T,E+C),e.closePath(),(o.fillColor||0===o.fillColor)&&(e.globalAlpha=o.fillAlpha*r,e.fillStyle="#"+("00000"+(0|a).toString(16)).substr(-6),e.fill()),o.lineWidth&&(e.globalAlpha=o.lineAlpha*r,e.strokeStyle="#"+("00000"+(0|h).toString(16)).substr(-6),e.stroke())}}},n.renderGraphicsMask=function(t,e){var r=t.graphicsData.length;if(0!==r){e.beginPath();for(var n=0;r>n;n++){var o=t.graphicsData[n],s=o.shape;if(o.type===i.SHAPES.POLY){var a=s.points;e.moveTo(a[0],a[1]);for(var h=1;hw?w:S,e.moveTo(b,_+S),e.lineTo(b,_+E-S),e.quadraticCurveTo(b,_+E,b+S,_+E),e.lineTo(b+T-S,_+E),e.quadraticCurveTo(b+T,_+E,b+T,_+E-S),e.lineTo(b+T,_+S),e.quadraticCurveTo(b+T,_,b+T-S,_),e.lineTo(b+S,_),e.quadraticCurveTo(b,_,b,_+S),e.closePath()}}}},n.updateGraphicsTint=function(t){if(16777215!==t.tint||t._prevTint!==t.tint){t._prevTint=t.tint;for(var e=(t.tint>>16&255)/255,r=(t.tint>>8&255)/255,i=(255&t.tint)/255,n=0;n>16&255)/255*e*255<<16)+((s>>8&255)/255*r*255<<8)+(255&s)/255*i*255,o._lineTint=((a>>16&255)/255*e*255<<16)+((a>>8&255)/255*r*255<<8)+(255&a)/255*i*255}}}},{"../../../const":38}],69:[function(t,e,r){function i(){}var n=t("./CanvasGraphics");i.prototype.constructor=i,e.exports=i,i.prototype.pushMask=function(t,e){e.context.save();var r=t.alpha,i=t.worldTransform,o=e.resolution;e.context.setTransform(i.a*o,i.b*o,i.c*o,i.d*o,i.tx*o,i.ty*o),t.texture||(n.renderGraphicsMask(t,e.context),e.context.clip()),t.worldAlpha=r},i.prototype.popMask=function(t){t.context.restore()},i.prototype.destroy=function(){}},{"./CanvasGraphics":68}],70:[function(t,e,r){var i=t("../../../utils"),n={};e.exports=n,n.getTintedTexture=function(t,e){var r=t.texture;e=n.roundColor(e);var i="#"+("00000"+(0|e).toString(16)).substr(-6);if(r.tintCache=r.tintCache||{},r.tintCache[i])return r.tintCache[i];var o=n.canvas||document.createElement("canvas");if(n.tintMethod(r,e,o),n.convertTintToImage){var s=new Image;s.src=o.toDataURL(),r.tintCache[i]=s}else r.tintCache[i]=o,n.canvas=null;return o},n.tintWithMultiply=function(t,e,r){var i=r.getContext("2d"),n=t.baseTexture.resolution,o=t.crop.clone();o.x*=n,o.y*=n,o.width*=n,o.height*=n,r.width=o.width,r.height=o.height,i.fillStyle="#"+("00000"+(0|e).toString(16)).substr(-6),i.fillRect(0,0,o.width,o.height),i.globalCompositeOperation="multiply",i.drawImage(t.baseTexture.source,o.x,o.y,o.width,o.height,0,0,o.width,o.height),i.globalCompositeOperation="destination-atop",i.drawImage(t.baseTexture.source,o.x,o.y,o.width,o.height,0,0,o.width,o.height)},n.tintWithOverlay=function(t,e,r){var i=r.getContext("2d"),n=t.baseTexture.resolution,o=t.crop.clone();o.x*=n,o.y*=n,o.width*=n,o.height*=n,r.width=o.width,r.height=o.height,i.globalCompositeOperation="copy",i.fillStyle="#"+("00000"+(0|e).toString(16)).substr(-6),i.fillRect(0,0,o.width,o.height),i.globalCompositeOperation="destination-atop",i.drawImage(t.baseTexture.source,o.x,o.y,o.width,o.height,0,0,o.width,o.height)},n.tintWithPerPixel=function(t,e,r){var n=r.getContext("2d"),o=t.baseTexture.resolution,s=t.crop.clone();s.x*=o,s.y*=o,s.width*=o,s.height*=o,r.width=s.width,r.height=s.height,n.globalCompositeOperation="copy",n.drawImage(t.baseTexture.source,s.x,s.y,s.width,s.height,0,0,s.width,s.height);for(var a=i.hex2rgb(e),h=a[0],u=a[1],l=a[2],c=n.getImageData(0,0,s.width,s.height),p=c.data,d=0;de;++e)this.shaders[e].syncUniform(t)}},{"../shaders/TextureShader":85}],74:[function(t,e,r){function i(){n.call(this,"\nprecision mediump float;\n\nattribute vec2 aVertexPosition;\nattribute vec2 aTextureCoord;\nattribute vec4 aColor;\n\nuniform mat3 projectionMatrix;\nuniform vec2 resolution;\n\nvarying vec2 vTextureCoord;\nvarying vec4 vColor;\n\nvarying vec2 vResolution;\n\n//texcoords computed in vertex step\n//to avoid dependent texture reads\nvarying vec2 v_rgbNW;\nvarying vec2 v_rgbNE;\nvarying vec2 v_rgbSW;\nvarying vec2 v_rgbSE;\nvarying vec2 v_rgbM;\n\n\nvoid texcoords(vec2 fragCoord, vec2 resolution,\n out vec2 v_rgbNW, out vec2 v_rgbNE,\n out vec2 v_rgbSW, out vec2 v_rgbSE,\n out vec2 v_rgbM) {\n vec2 inverseVP = 1.0 / resolution.xy;\n v_rgbNW = (fragCoord + vec2(-1.0, -1.0)) * inverseVP;\n v_rgbNE = (fragCoord + vec2(1.0, -1.0)) * inverseVP;\n v_rgbSW = (fragCoord + vec2(-1.0, 1.0)) * inverseVP;\n v_rgbSE = (fragCoord + vec2(1.0, 1.0)) * inverseVP;\n v_rgbM = vec2(fragCoord * inverseVP);\n}\n\nvoid main(void){\n gl_Position = vec4((projectionMatrix * vec3(aVertexPosition, 1.0)).xy, 0.0, 1.0);\n vTextureCoord = aTextureCoord;\n vColor = vec4(aColor.rgb * aColor.a, aColor.a);\n vResolution = resolution;\n\n //compute the texture coords and send them to varyings\n texcoords(aTextureCoord * resolution, resolution, v_rgbNW, v_rgbNE, v_rgbSW, v_rgbSE, v_rgbM);\n}\n",'precision lowp float;\n\n\n/**\nBasic FXAA implementation based on the code on geeks3d.com with the\nmodification that the texture2DLod stuff was removed since it\'s\nunsupported by WebGL.\n\n--\n\nFrom:\nhttps://github.com/mitsuhiko/webgl-meincraft\n\nCopyright (c) 2011 by Armin Ronacher.\n\nSome rights reserved.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are\nmet:\n\n * Redistributions of source code must retain the above copyright\n notice, this list of conditions and the following disclaimer.\n\n * Redistributions in binary form must reproduce the above\n copyright notice, this list of conditions and the following\n disclaimer in the documentation and/or other materials provided\n with the distribution.\n\n * The names of the contributors may not be used to endorse or\n promote products derived from this software without specific\n prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\nLIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\nA PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\nOWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\nSPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\nLIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\nDATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\nTHEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\nOF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n*/\n\n#ifndef FXAA_REDUCE_MIN\n #define FXAA_REDUCE_MIN (1.0/ 128.0)\n#endif\n#ifndef FXAA_REDUCE_MUL\n #define FXAA_REDUCE_MUL (1.0 / 8.0)\n#endif\n#ifndef FXAA_SPAN_MAX\n #define FXAA_SPAN_MAX 8.0\n#endif\n\n//optimized version for mobile, where dependent\n//texture reads can be a bottleneck\nvec4 fxaa(sampler2D tex, vec2 fragCoord, vec2 resolution,\n vec2 v_rgbNW, vec2 v_rgbNE,\n vec2 v_rgbSW, vec2 v_rgbSE,\n vec2 v_rgbM) {\n vec4 color;\n mediump vec2 inverseVP = vec2(1.0 / resolution.x, 1.0 / resolution.y);\n vec3 rgbNW = texture2D(tex, v_rgbNW).xyz;\n vec3 rgbNE = texture2D(tex, v_rgbNE).xyz;\n vec3 rgbSW = texture2D(tex, v_rgbSW).xyz;\n vec3 rgbSE = texture2D(tex, v_rgbSE).xyz;\n vec4 texColor = texture2D(tex, v_rgbM);\n vec3 rgbM = texColor.xyz;\n vec3 luma = vec3(0.299, 0.587, 0.114);\n float lumaNW = dot(rgbNW, luma);\n float lumaNE = dot(rgbNE, luma);\n float lumaSW = dot(rgbSW, luma);\n float lumaSE = dot(rgbSE, luma);\n float lumaM = dot(rgbM, luma);\n float lumaMin = min(lumaM, min(min(lumaNW, lumaNE), min(lumaSW, lumaSE)));\n float lumaMax = max(lumaM, max(max(lumaNW, lumaNE), max(lumaSW, lumaSE)));\n\n mediump vec2 dir;\n dir.x = -((lumaNW + lumaNE) - (lumaSW + lumaSE));\n dir.y = ((lumaNW + lumaSW) - (lumaNE + lumaSE));\n\n float dirReduce = max((lumaNW + lumaNE + lumaSW + lumaSE) *\n (0.25 * FXAA_REDUCE_MUL), FXAA_REDUCE_MIN);\n\n float rcpDirMin = 1.0 / (min(abs(dir.x), abs(dir.y)) + dirReduce);\n dir = min(vec2(FXAA_SPAN_MAX, FXAA_SPAN_MAX),\n max(vec2(-FXAA_SPAN_MAX, -FXAA_SPAN_MAX),\n dir * rcpDirMin)) * inverseVP;\n\n vec3 rgbA = 0.5 * (\n texture2D(tex, fragCoord * inverseVP + dir * (1.0 / 3.0 - 0.5)).xyz +\n texture2D(tex, fragCoord * inverseVP + dir * (2.0 / 3.0 - 0.5)).xyz);\n vec3 rgbB = rgbA * 0.5 + 0.25 * (\n texture2D(tex, fragCoord * inverseVP + dir * -0.5).xyz +\n texture2D(tex, fragCoord * inverseVP + dir * 0.5).xyz);\n\n float lumaB = dot(rgbB, luma);\n if ((lumaB < lumaMin) || (lumaB > lumaMax))\n color = vec4(rgbA, texColor.a);\n else\n color = vec4(rgbB, texColor.a);\n return color;\n}\n\n\nvarying vec2 vTextureCoord;\nvarying vec4 vColor;\nvarying vec2 vResolution;\n\n//texcoords computed in vertex step\n//to avoid dependent texture reads\nvarying vec2 v_rgbNW;\nvarying vec2 v_rgbNE;\nvarying vec2 v_rgbSW;\nvarying vec2 v_rgbSE;\nvarying vec2 v_rgbM;\n\nuniform sampler2D uSampler;\n\n\nvoid main(void){\n\n gl_FragColor = fxaa(uSampler, vTextureCoord * vResolution, vResolution, v_rgbNW, v_rgbNE, v_rgbSW, v_rgbSE, v_rgbM);\n\n}\n',{resolution:{type:"v2",value:{x:1,y:1}}})}var n=t("./AbstractFilter");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.applyFilter=function(t,e,r){var i=t.filterManager,n=this.getShader(t);i.applyFilter(n,e,r)}},{"./AbstractFilter":73}],75:[function(t,e,r){function i(t){var e=new o.Matrix;n.call(this,"attribute vec2 aVertexPosition;\nattribute vec2 aTextureCoord;\nattribute vec4 aColor;\n\nuniform mat3 projectionMatrix;\nuniform mat3 otherMatrix;\n\nvarying vec2 vMaskCoord;\nvarying vec2 vTextureCoord;\nvarying vec4 vColor;\n\nvoid main(void)\n{\n gl_Position = vec4((projectionMatrix * vec3(aVertexPosition, 1.0)).xy, 0.0, 1.0);\n vTextureCoord = aTextureCoord;\n vMaskCoord = ( otherMatrix * vec3( aTextureCoord, 1.0) ).xy;\n vColor = vec4(aColor.rgb * aColor.a, aColor.a);\n}\n","precision lowp float;\n\nvarying vec2 vMaskCoord;\nvarying vec2 vTextureCoord;\nvarying vec4 vColor;\n\nuniform sampler2D uSampler;\nuniform float alpha;\nuniform sampler2D mask;\n\nvoid main(void)\n{\n // check clip! this will stop the mask bleeding out from the edges\n vec2 text = abs( vMaskCoord - 0.5 );\n text = step(0.5, text);\n float clip = 1.0 - max(text.y, text.x);\n vec4 original = texture2D(uSampler, vTextureCoord);\n vec4 masky = texture2D(mask, vMaskCoord);\n original *= (masky.r * masky.a * alpha * clip);\n gl_FragColor = original;\n}\n",{mask:{type:"sampler2D",value:t._texture},alpha:{type:"f",value:1},otherMatrix:{type:"mat3",value:e.toArray(!0)}}),this.maskSprite=t,this.maskMatrix=e}var n=t("./AbstractFilter"),o=t("../../../math");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.applyFilter=function(t,e,r){var i=t.filterManager;this.uniforms.mask.value=this.maskSprite._texture,i.calculateMappedMatrix(e.frame,this.maskSprite,this.maskMatrix),this.uniforms.otherMatrix.value=this.maskMatrix.toArray(!0),this.uniforms.alpha.value=this.maskSprite.worldAlpha;var n=this.getShader(t);i.applyFilter(n,e,r)},Object.defineProperties(i.prototype,{map:{get:function(){return this.uniforms.mask.value},set:function(t){this.uniforms.mask.value=t}},offset:{get:function(){return this.uniforms.offset.value},set:function(t){this.uniforms.offset.value=t}}})},{"../../../math":55,"./AbstractFilter":73}],76:[function(t,e,r){function i(t){n.call(this,t),this.currentBlendMode=99999}var n=t("./WebGLManager");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.setBlendMode=function(t){if(this.currentBlendMode===t)return!1;this.currentBlendMode=t;var e=this.renderer.blendModes[this.currentBlendMode];return this.renderer.gl.blendFunc(e[0],e[1]),!0}},{"./WebGLManager":81}],77:[function(t,e,r){function i(t){n.call(this,t),this.filterStack=[],this.filterStack.push({renderTarget:t.currentRenderTarget,filter:[],bounds:null}),this.texturePool=[],this.textureSize=new h.Rectangle(0,0,t.width,t.height),this.currentFrame=null}var n=t("./WebGLManager"),o=t("../utils/RenderTarget"),s=t("../../../const"),a=t("../utils/Quad"),h=t("../../../math");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.onContextChange=function(){this.texturePool.length=0;var t=this.renderer.gl;this.quad=new a(t)},i.prototype.setFilterStack=function(t){this.filterStack=t},i.prototype.pushFilter=function(t,e){var r=t.filterArea?t.filterArea.clone():t.getBounds();r.x=0|r.x,r.y=0|r.y,r.width=0|r.width,r.height=0|r.height;var i=0|e[0].padding;if(r.x-=i,r.y-=i,r.width+=2*i,r.height+=2*i,this.renderer.currentRenderTarget.transform){var n=this.renderer.currentRenderTarget.transform;r.x+=n.tx,r.y+=n.ty,this.capFilterArea(r),r.x-=n.tx,r.y-=n.ty}else this.capFilterArea(r);if(r.width>0&&r.height>0){this.currentFrame=r;var o=this.getRenderTarget();this.renderer.setRenderTarget(o),o.clear(),this.filterStack.push({renderTarget:o,filter:e})}else this.filterStack.push({renderTarget:null,filter:e})},i.prototype.popFilter=function(){var t=this.filterStack.pop(),e=this.filterStack[this.filterStack.length-1],r=t.renderTarget;if(t.renderTarget){var i=e.renderTarget,n=this.renderer.gl;this.currentFrame=r.frame,this.quad.map(this.textureSize,r.frame),n.bindBuffer(n.ARRAY_BUFFER,this.quad.vertexBuffer),n.bindBuffer(n.ELEMENT_ARRAY_BUFFER,this.quad.indexBuffer);var o=t.filter;if(n.vertexAttribPointer(this.renderer.shaderManager.defaultShader.attributes.aVertexPosition,2,n.FLOAT,!1,0,0),n.vertexAttribPointer(this.renderer.shaderManager.defaultShader.attributes.aTextureCoord,2,n.FLOAT,!1,0,32),n.vertexAttribPointer(this.renderer.shaderManager.defaultShader.attributes.aColor,4,n.FLOAT,!1,0,64),this.renderer.blendModeManager.setBlendMode(s.BLEND_MODES.NORMAL),1===o.length)o[0].uniforms.dimensions&&(o[0].uniforms.dimensions.value[0]=this.renderer.width,o[0].uniforms.dimensions.value[1]=this.renderer.height,o[0].uniforms.dimensions.value[2]=this.quad.vertices[0],o[0].uniforms.dimensions.value[3]=this.quad.vertices[5]),o[0].applyFilter(this.renderer,r,i),this.returnRenderTarget(r);else{for(var a=r,h=this.getRenderTarget(!0),u=0;uthis.textureSize.width&&(t.width=this.textureSize.width-t.x),t.y+t.height>this.textureSize.height&&(t.height=this.textureSize.height-t.y)},i.prototype.resize=function(t,e){this.textureSize.width=t,this.textureSize.height=e;for(var r=0;re;++e)t._array[2*e]=o[e].x,t._array[2*e+1]=o[e].y;s.uniform2fv(i,t._array);break;case"v3v":for(t._array||(t._array=new Float32Array(3*o.length)),e=0,r=o.length;r>e;++e)t._array[3*e]=o[e].x,t._array[3*e+1]=o[e].y,t._array[3*e+2]=o[e].z;s.uniform3fv(i,t._array);break;case"v4v":for(t._array||(t._array=new Float32Array(4*o.length)),e=0,r=o.length;r>e;++e)t._array[4*e]=o[e].x,t._array[4*e+1]=o[e].y,t._array[4*e+2]=o[e].z,t._array[4*e+3]=o[e].w;s.uniform4fv(i,t._array);break;case"t":case"sampler2D":if(!t.value||!t.value.baseTexture.hasLoaded)break;s.activeTexture(s["TEXTURE"+this.textureCount]);var a=t.value.baseTexture._glTextures[s.id];a||(this.initSampler2D(t),a=t.value.baseTexture._glTextures[s.id]),s.bindTexture(s.TEXTURE_2D,a),s.uniform1i(t._location,this.textureCount),this.textureCount++;break;default:console.warn("Pixi.js Shader Warning: Unknown uniform type: "+t.type)}},i.prototype.syncUniforms=function(){this.textureCount=1;for(var t in this.uniforms)this.syncUniform(this.uniforms[t])},i.prototype.initSampler2D=function(t){var e=this.gl,r=t.value.baseTexture;if(r.hasLoaded)if(t.textureData){var i=t.textureData;r._glTextures[e.id]=e.createTexture(),e.bindTexture(e.TEXTURE_2D,r._glTextures[e.id]),e.pixelStorei(e.UNPACK_PREMULTIPLY_ALPHA_WEBGL,r.premultipliedAlpha),e.texImage2D(e.TEXTURE_2D,0,i.luminance?e.LUMINANCE:e.RGBA,e.RGBA,e.UNSIGNED_BYTE,r.source),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MAG_FILTER,i.magFilter?i.magFilter:e.LINEAR),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MIN_FILTER,i.wrapS?i.wrapS:e.CLAMP_TO_EDGE),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,i.wrapS?i.wrapS:e.CLAMP_TO_EDGE),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,i.wrapT?i.wrapT:e.CLAMP_TO_EDGE)}else this.shaderManager.renderer.updateTexture(r)},i.prototype.destroy=function(){this.gl.deleteProgram(this.program),this.gl=null,this.uniforms=null,this.attributes=null,this.vertexSrc=null,this.fragmentSrc=null},i.prototype._glCompile=function(t,e){var r=this.gl.createShader(t);return this.gl.shaderSource(r,e),this.gl.compileShader(r),this.gl.getShaderParameter(r,this.gl.COMPILE_STATUS)?r:(console.log(this.gl.getShaderInfoLog(r)),null)}},{"../../../utils":105}],85:[function(t,e,r){function i(t,e,r,o,s){var a={uSampler:{type:"sampler2D",value:0},projectionMatrix:{type:"mat3",value:new Float32Array([1,0,0,0,1,0,0,0,1])}};if(o)for(var h in o)a[h]=o[h];var u={aVertexPosition:0,aTextureCoord:0,aColor:0};if(s)for(var l in s)u[l]=s[l];e=e||i.defaultVertexSrc,r=r||i.defaultFragmentSrc,n.call(this,t,e,r,a,u)}var n=t("./Shader");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.defaultVertexSrc=["precision lowp float;","attribute vec2 aVertexPosition;","attribute vec2 aTextureCoord;","attribute vec4 aColor;","uniform mat3 projectionMatrix;","varying vec2 vTextureCoord;","varying vec4 vColor;","void main(void){"," gl_Position = vec4((projectionMatrix * vec3(aVertexPosition, 1.0)).xy, 0.0, 1.0);"," vTextureCoord = aTextureCoord;"," vColor = vec4(aColor.rgb * aColor.a, aColor.a);","}"].join("\n"),i.defaultFragmentSrc=["precision lowp float;","varying vec2 vTextureCoord;","varying vec4 vColor;","uniform sampler2D uSampler;","void main(void){"," gl_FragColor = texture2D(uSampler, vTextureCoord) * vColor ;","}"].join("\n")},{"./Shader":84}],86:[function(t,e,r){function i(t){vertexSrc=i.defaultVertexSrc,fragmentSrc=i.defaultFragmentSrc,n.call(this,t,vertexSrc,fragmentSrc)}var n=t("pixi-gl-core").GLShader;i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.defaultVertexSrc=["precision lowp float;","attribute vec2 aVertexPosition;","attribute vec2 aTextureCoord;","attribute vec4 aColor;","uniform mat3 projectionMatrix;","varying vec2 vTextureCoord;","varying vec4 vColor;","void main(void){"," gl_Position = vec4((projectionMatrix * vec3(aVertexPosition, 1.0)).xy, 0.0, 1.0);"," vTextureCoord = aTextureCoord;"," vColor = vec4(aColor.rgb * aColor.a, aColor.a);","}"].join("\n"),i.defaultFragmentSrc=["precision lowp float;","varying vec2 vTextureCoord;","varying vec4 vColor;","uniform sampler2D uSampler;","void main(void){"," gl_FragColor = texture2D(uSampler, vTextureCoord) * vColor ;","}"].join("\n")},{"pixi-gl-core":1}],87:[function(t,e,r){function i(t){n.call(this,t)}var n=t("../managers/WebGLManager");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.start=function(){},i.prototype.stop=function(){this.flush()},i.prototype.flush=function(){},i.prototype.render=function(t){}},{"../managers/WebGLManager":81}],88:[function(t,e,r){function i(t){this.gl=t,this.vertices=new Float32Array([0,0,200,0,200,200,0,200]),this.uvs=new Float32Array([0,0,1,0,1,1,0,1]),this.colors=new Float32Array([1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]),this.indices=new Uint16Array([0,1,2,0,3,2]),this.vertexBuffer=t.createBuffer(),this.indexBuffer=t.createBuffer(),t.bindBuffer(t.ARRAY_BUFFER,this.vertexBuffer),t.bufferData(t.ARRAY_BUFFER,128,t.DYNAMIC_DRAW),t.bindBuffer(t.ELEMENT_ARRAY_BUFFER,this.indexBuffer),t.bufferData(t.ELEMENT_ARRAY_BUFFER,this.indices,t.STATIC_DRAW),this.upload()}i.prototype.constructor=i,i.prototype.map=function(t,e){var r=0,i=0;this.uvs[0]=r,this.uvs[1]=i,this.uvs[2]=r+e.width/t.width,this.uvs[3]=i,this.uvs[4]=r+e.width/t.width,this.uvs[5]=i+e.height/t.height,this.uvs[6]=r,this.uvs[7]=i+e.height/t.height,r=e.x,i=e.y,this.vertices[0]=r,this.vertices[1]=i,this.vertices[2]=r+e.width,this.vertices[3]=i,this.vertices[4]=r+e.width,this.vertices[5]=i+e.height,this.vertices[6]=r,this.vertices[7]=i+e.height,this.upload()},i.prototype.upload=function(){var t=this.gl;t.bindBuffer(t.ARRAY_BUFFER,this.vertexBuffer),t.bufferSubData(t.ARRAY_BUFFER,0,this.vertices),t.bufferSubData(t.ARRAY_BUFFER,32,this.uvs),t.bufferSubData(t.ARRAY_BUFFER,64,this.colors)},i.prototype.destroy=function(){var t=this.gl;t.deleteBuffer(this.vertexBuffer),t.deleteBuffer(this.indexBuffer)},e.exports=i},{}],89:[function(t,e,r){var i=t("../../../math"),n=(t("../../../utils"),t("../../../const")),o=t("pixi-gl-core").GLTexture,s=t("pixi-gl-core").GLFramebuffer,a=t("./StencilMaskStack"),h=function(t,e,r,h,u,l){if(this.gl=t,this.frameBuffer=null,this.texture=null,this.clearColor=[0,0,0,0],this.size=new i.Rectangle(0,0,1,1),this.resolution=u||n.RESOLUTION,this.projectionMatrix=new i.Matrix,this.transform=null,this.frame=null,this.stencilBuffer=null,this.stencilMaskStack=new a,this.filterStack=[{renderTarget:this,filter:[],bounds:this.size}],this.scaleMode=h||n.SCALE_MODES.DEFAULT,this.root=l,this.frameBuffer=s.createRGBA(t,100,100),this.frameBuffer&&this.frameBuffer.unbind(),this.root)this.frameBuffer.framebuffer=null;else{var c=new o(t);c.enableLinearScaling(),c.enableWrapClamp(),this.frameBuffer.enableTexture(c),this.texture=c.texture}this.resize(e,r)};h.prototype.constructor=h,e.exports=h,h.prototype.clear=function(t){var e=t||this.clearColor;this.frameBuffer.clear(e[0],e[1],e[2],e[3])},h.prototype.attachStencilBuffer=function(){this.root||this.frameBuffer.enableStencil()},h.prototype.activate=function(){var t=this.gl;this.frameBuffer.bind();var e=this.frame||this.size;this.calculateProjection(e),this.transform&&this.projectionMatrix.append(this.transform),t.viewport(0,0,e.width*this.resolution,e.height*this.resolution)},h.prototype.calculateProjection=function(t){var e=this.projectionMatrix;e.identity(),this.root?(e.a=1/t.width*2,e.d=-1/t.height*2,e.tx=-1-t.x*e.a,e.ty=1-t.y*e.d):(e.a=1/t.width*2,e.d=1/t.height*2,e.tx=-1-t.x*e.a,e.ty=-1-t.y*e.d)},h.prototype.resize=function(t,e){if(t=0|t,e=0|e,this.size.width!==t||this.size.height!==e){this.size.width=t,this.size.height=e,this.frameBuffer.resize(t*this.resolution,e*this.resolution);var r=this.frame||this.size;this.calculateProjection(r)}},h.prototype.destroy=function(){this.gl;this.frameBuffer.destroy(),this.frameBuffer=null,this.texture=null}},{"../../../const":38,"../../../math":55,"../../../utils":105,"./StencilMaskStack":90,"pixi-gl-core":1}],90:[function(t,e,r){function i(){this.stencilStack=[],this.reverse=!0,this.count=0}i.prototype.constructor=i,e.exports=i},{}],91:[function(t,e,r){function i(t,e){return e=e||{},e[CONST.BLEND_MODES.NORMAL]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.ADD]=[t.SRC_ALPHA,t.DST_ALPHA],e[CONST.BLEND_MODES.MULTIPLY]=[t.DST_COLOR,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.SCREEN]=[t.SRC_ALPHA,t.ONE],e[CONST.BLEND_MODES.OVERLAY]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.DARKEN]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.LIGHTEN]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.COLOR_DODGE]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.COLOR_BURN]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.HARD_LIGHT]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.SOFT_LIGHT]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.DIFFERENCE]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.EXCLUSION]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.HUE]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.SATURATION]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.COLOR]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.LUMINOSITY]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e}CONST=t("../../../const"),e.exports=i},{"../../../const":38}],92:[function(t,e,r){function i(t,e){e=e||{},e[CONST.DRAW_MODES.POINTS]=t.POINTS,e[CONST.DRAW_MODES.LINES]=t.LINES,e[CONST.DRAW_MODES.LINE_LOOP]=t.LINE_LOOP,e[CONST.DRAW_MODES.LINE_STRIP]=t.LINE_STRIP,e[CONST.DRAW_MODES.TRIANGLES]=t.TRIANGLES,e[CONST.DRAW_MODES.TRIANGLE_STRIP]=t.TRIANGLE_STRIP,e[CONST.DRAW_MODES.TRIANGLE_FAN]=t.TRIANGLE_FAN}CONST=t("../../../const"),e.exports=i},{"../../../const":38}],93:[function(t,e,r){function i(t){s.call(this),this.anchor=new n.Point,this._texture=null,this._width=0,this._height=0,this.tint=16777215,this.blendMode=u.BLEND_MODES.NORMAL,this.shader=null,this.cachedTint=16777215,this.texture=t||o.EMPTY,this.textureDirty=!0,this.vertexDirty=!0,this.vertexData=new Float32Array(8)}var n=t("../math"),o=t("../textures/Texture"),s=t("../display/Container"),a=t("../renderers/canvas/utils/CanvasTinter"),h=t("../utils"),u=t("../const"),l=new n.Point;i.prototype=Object.create(s.prototype),i.prototype.constructor=i,e.exports=i,Object.defineProperties(i.prototype,{width:{get:function(){return Math.abs(this.scale.x)*this.texture._frame.width},set:function(t){var e=h.sign(this.scale.x)||1;this.scale.x=e*t/this.texture._frame.width,this._width=t}},height:{get:function(){return Math.abs(this.scale.y)*this.texture._frame.height},set:function(t){var e=h.sign(this.scale.y)||1;this.scale.y=e*t/this.texture._frame.height,this._height=t}},texture:{get:function(){return this._texture},set:function(t){this._texture!==t&&(this._texture=t,this.cachedTint=16777215,this.textureDirty=!0,t&&(t.baseTexture.hasLoaded?this._onTextureUpdate():t.once("update",this._onTextureUpdate,this)))}}}),i.prototype._onTextureUpdate=function(){this.textureDirty=!0,this._width&&(this.scale.x=h.sign(this.scale.x)*this._width/this.texture.frame.width),this._height&&(this.scale.y=h.sign(this.scale.y)*this._height/this.texture.frame.height)},i.prototype.caclulateVertices=function(){var t,e,r,i,n=this._texture,o=this.worldTransform,s=o.a,a=o.b,h=o.c,u=o.d,l=o.tx,c=o.ty,p=this.vertexData,d=n.trim;d?(e=d.x-this.anchor.x*d.width,t=e+n.crop.width,i=d.y-this.anchor.y*d.height,r=i+n.crop.height):(t=n._frame.width*(1-this.anchor.x),e=n._frame.width*-this.anchor.x,r=n._frame.height*(1-this.anchor.y),i=n._frame.height*-this.anchor.y),p[0]=s*e+h*i+l,p[1]=u*i+a*e+c,p[2]=s*t+h*i+l,p[3]=u*i+a*t+c,p[4]=s*t+h*r+l,p[5]=u*r+a*t+c,p[6]=s*e+h*r+l,p[7]=u*r+a*e+c},i.prototype._renderWebGL=function(t){this.textureDirty&&(this.textureDirty=!1,this._onTextureUpdate(),this.vertexDirty=!0),this.vertexDirty&&(this.vertexDirty=!1,this.caclulateVertices()),t.setObjectRenderer(t.plugins.sprite),t.plugins.sprite.render(this)},i.prototype.getBounds=function(t){if(!this._currentBounds){this.vertexDirty&&(this.vertexDirty=!1,this.caclulateVertices());var e,r,i,n,o=this.vertexData,s=o[0],a=o[1],h=o[2],u=o[3],l=o[4],c=o[5],p=o[6],d=o[7];if(e=s,e=e>h?h:e,e=e>l?l:e,e=e>p?p:e,i=a,i=i>u?u:i,i=i>c?c:i,i=i>d?d:i,r=s,r=h>r?h:r,r=l>r?l:r,r=p>r?p:r,n=a,n=u>n?u:n,n=c>n?c:n,n=d>n?d:n,this.children.length){var f=this.containerGetBounds();w0=f.x,w1=f.x+f.width,h0=f.y,h1=f.y+f.height,e=ew1?r:w1,n=n>h1?n:h1}var v=this._bounds;v.x=e,v.width=r-e,v.y=i,v.height=n-i,this._currentBounds=v}return this._currentBounds},i.prototype.getLocalBounds=function(){return this._bounds.x=-this._texture._frame.width*this.anchor.x,this._bounds.y=-this._texture._frame.height*this.anchor.y,this._bounds.width=this._texture._frame.width,this._bounds.height=this._texture._frame.height,this._bounds},i.prototype.containsPoint=function(t){this.worldTransform.applyInverse(t,l);var e,r=this._texture._frame.width,i=this._texture._frame.height,n=-r*this.anchor.x;return l.x>n&&l.xe&&l.y=this.size&&this.flush(),t.texture._uvs){var e,r=t.texture.baseTexture,i=this.currentGroup;if(this.currentTexture!==r){if(this.currentTexture=r,!r._enabled){if(r._enabled=!0,r._id=this.textureCount,this.textureCount===this.MAX_TEXTUES){for(e=0;e>16)+(65280&t.tint)+((255&t.tint)<<16)+(255*t.worldAlpha<<24),u=t.texture._uvs.uvs_uint32;s[n++]=a[0],s[n++]=a[1],this.uvs[n++]=u[0],o[n++]=h,s[n++]=r._id,s[n++]=a[2],s[n++]=a[3],this.uvs[n++]=u[1],o[n++]=h,s[n++]=r._id,s[n++]=a[4],s[n++]=a[5],this.uvs[n++]=u[2],o[n++]=h,s[n++]=r._id,s[n++]=a[6],s[n++]=a[7],this.uvs[n++]=u[3],o[n++]=h,s[n++]=r._id}},i.prototype.flush=function(){if(0!==this.currentIndex){var t=this.renderer.gl;this.currentGroup.size=this.currentIndex-this.currentGroup.start;for(var e=0;e.5*this.size)this.vertexBuffer.upload(this.vertices,0,!0);else{var r=this.positions.subarray(0,this.currentIndex*this.vertByteSize);this.vertexBuffer.upload(r,0,!0)}for(this.renderer.bindShader(this._shader),this.renderer.blendModeManager.setBlendMode(0),e=0;eu;u++)h[u]=u;return a.bind(),a.uniforms.uSamplers=h,a}function n(t){var e="vec4 getSampleFromArray(sampler2D textures[%%], int ndx, vec2 uv) {\n\nvec4 color;";e+="\n",e+="\n";for(var r=0;t>r;r++)r>0&&(e+="\nelse "),t-1>r&&(e+="if(ndx == "+r+")"),e+="\n{",e+="\n color = texture2D(textures["+r+"], uv);",e+="\n}";return e+="\n",e+="\n",e+="return color;",e+="\n}"}var o=t("pixi-gl-core").GLShader,s=["varying vec2 vTextureCoord;","varying vec4 vColor;","varying float vTextureId;","uniform sampler2D uSamplers[%%];","void main(void){","gl_FragColor = getSampleFromArray(uSamplers, int(vTextureId), vTextureCoord) * vColor;","}"].join("\n");e.exports=i},{"pixi-gl-core":1}],96:[function(t,e,r){function i(t,e,r){this.canvas=document.createElement("canvas"),this.context=this.canvas.getContext("2d"),this.resolution=r||h.RESOLUTION,this._text=null,this._style=null;var i=o.fromCanvas(this.canvas);i.trim=new s.Rectangle,n.call(this,i),this.text=t,this.style=e}var n=t("../sprites/Sprite"),o=t("../textures/Texture"),s=t("../math"),a=t("../utils"),h=t("../const");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.fontPropertiesCache={},i.fontPropertiesCanvas=document.createElement("canvas"),i.fontPropertiesContext=i.fontPropertiesCanvas.getContext("2d"),Object.defineProperties(i.prototype,{width:{get:function(){return this.dirty&&this.updateText(),this.scale.x*this._texture._frame.width},set:function(t){this.scale.x=t/this._texture._frame.width,this._width=t}},height:{get:function(){return this.dirty&&this.updateText(),this.scale.y*this._texture._frame.height},set:function(t){this.scale.y=t/this._texture._frame.height,this._height=t}},style:{get:function(){return this._style},set:function(t){t=t||{},"number"==typeof t.fill&&(t.fill=a.hex2string(t.fill)),"number"==typeof t.stroke&&(t.stroke=a.hex2string(t.stroke)),"number"==typeof t.dropShadowColor&&(t.dropShadowColor=a.hex2string(t.dropShadowColor)),t.font=t.font||"bold 20pt Arial",t.fill=t.fill||"black",t.align=t.align||"left",t.stroke=t.stroke||"black",t.strokeThickness=t.strokeThickness||0,t.wordWrap=t.wordWrap||!1,t.wordWrapWidth=t.wordWrapWidth||100,t.dropShadow=t.dropShadow||!1,t.dropShadowColor=t.dropShadowColor||"#000000",t.dropShadowAngle=void 0!==t.dropShadowAngle?t.dropShadowAngle:Math.PI/6,t.dropShadowDistance=void 0!==t.dropShadowDistance?t.dropShadowDistance:5,t.dropShadowBlur=void 0!==t.dropShadowBlur?t.dropShadowBlur:0,t.padding=t.padding||0,t.textBaseline=t.textBaseline||"alphabetic",t.lineJoin=t.lineJoin||"miter",t.miterLimit=t.miterLimit||10,this._style=t,this.dirty=!0}},text:{get:function(){return this._text},set:function(t){t=t.toString()||" ",this._text!==t&&(this._text=t,this.dirty=!0)}}}),i.prototype.updateText=function(){var t=this._style;this.context.font=t.font;for(var e=t.wordWrap?this.wordWrap(this._text):this._text,r=e.split(/(?:\r\n|\r|\n)/),i=new Array(r.length),n=0,o=this.determineFontProperties(t.font),s=0;s0?(this.context.shadowColor=t.dropShadowColor,this.context.shadowBlur=t.dropShadowBlur):this.context.fillStyle=t.dropShadowColor;var d=Math.cos(t.dropShadowAngle)*t.dropShadowDistance,f=Math.sin(t.dropShadowAngle)*t.dropShadowDistance;for(s=0;sh;h++){for(u=0;p>u;u+=4)if(255!==l[d+u]){f=!0;break}if(f)break;d+=p}for(e.ascent=s-h,d=c-p,f=!1,h=a;h>s;h--){for(u=0;p>u;u+=4)if(255!==l[d+u]){f=!0;break}if(f)break;d-=p}e.descent=h-s,e.fontSize=e.ascent+e.descent,i.fontPropertiesCache[t]=e}return e},i.prototype.wordWrap=function(t){for(var e="",r=t.split("\n"),i=this._style.wordWrapWidth,n=0;no?(a>0&&(e+="\n"),e+=s[a],o=i-h):(o-=u,e+=" "+s[a])}n0&&e>0,this.width=this._frame.width=this.crop.width=t,this.height=this._frame.height=this.crop.height=e,r&&(this.baseTexture.width=this.width,this.baseTexture.height=this.height),this.valid&&(this.textureBuffer.resize(this.width,this.height),this.filterManager&&this.filterManager.resize(this.width,this.height)))},i.prototype.clear=function(){this.valid&&(this.renderer.type===l.RENDERER_TYPE.WEBGL&&this.renderer.gl.bindFramebuffer(this.renderer.gl.FRAMEBUFFER,this.textureBuffer.frameBuffer),this.textureBuffer.clear())},i.prototype.renderWebGL=function(t,e,r,i){if(this.valid){if(i=void 0!==i?i:!0,this.textureBuffer.transform=e,this.textureBuffer.activate(),t.worldAlpha=1,i){t.worldTransform.identity(),t.currentBounds=null;var n,o,s=t.children;for(n=0,o=s.length;o>n;++n)s[n].updateTransform()}var a=this.renderer.filterManager;this.renderer.filterManager=this.filterManager,this.renderer.renderDisplayObject(t,this.textureBuffer,r),this.renderer.filterManager=a}},i.prototype.renderCanvas=function(t,e,r,i){if(this.valid){i=!!i;var n=c;n.identity(),e&&n.append(e);var o=t.worldTransform;t.worldTransform=n,t.worldAlpha=1;var s,a,h=t.children;for(s=0,a=h.length;a>s;++s)h[s].updateTransform();r&&this.textureBuffer.clear();var u=this.textureBuffer.context,l=this.renderer.resolution;this.renderer.resolution=this.resolution,this.renderer.renderDisplayObject(t,u),this.renderer.resolution=l,t.worldTransform===n&&(t.worldTransform=o)}},i.prototype.destroy=function(){o.prototype.destroy.call(this,!0),this.textureBuffer.destroy(),this.filterManager&&this.filterManager.destroy(),this.renderer=null},i.prototype.getImage=function(){var t=new Image;return t.src=this.getBase64(),t},i.prototype.getBase64=function(){return this.getCanvas().toDataURL()},i.prototype.getCanvas=function(){if(this.renderer.type===l.RENDERER_TYPE.WEBGL){var t=this.renderer.gl,e=this.textureBuffer.size.width,r=this.textureBuffer.size.height,i=new Uint8Array(4*e*r);t.bindFramebuffer(t.FRAMEBUFFER,this.textureBuffer.frameBuffer),t.readPixels(0,0,e,r,t.RGBA,t.UNSIGNED_BYTE,i),t.bindFramebuffer(t.FRAMEBUFFER,null);var n=new h(e,r),o=n.context.getImageData(0,0,e,r);return o.data.set(i),n.context.putImageData(o,0,0),n.canvas}return this.textureBuffer.canvas},i.prototype.getPixels=function(){var t,e;if(this.renderer.type===l.RENDERER_TYPE.WEBGL){var r=this.renderer.gl;t=this.textureBuffer.size.width,e=this.textureBuffer.size.height;var i=new Uint8Array(4*t*e);return r.bindFramebuffer(r.FRAMEBUFFER,this.textureBuffer.frameBuffer),r.readPixels(0,0,t,e,r.RGBA,r.UNSIGNED_BYTE,i),r.bindFramebuffer(r.FRAMEBUFFER,null),i}return t=this.textureBuffer.canvas.width,e=this.textureBuffer.canvas.height,this.textureBuffer.canvas.getContext("2d").getImageData(0,0,t,e).data},i.prototype.getPixel=function(t,e){if(this.renderer.type===l.RENDERER_TYPE.WEBGL){var r=this.renderer.gl,i=new Uint8Array(4);return r.bindFramebuffer(r.FRAMEBUFFER,this.textureBuffer.frameBuffer),r.readPixels(t,e,1,1,r.RGBA,r.UNSIGNED_BYTE,i),r.bindFramebuffer(r.FRAMEBUFFER,null),i}return this.textureBuffer.canvas.getContext("2d").getImageData(t,e,1,1).data}},{"../const":38,"../math":55,"../renderers/canvas/utils/CanvasBuffer":67,"../renderers/webgl/managers/FilterManager":77,"../renderers/webgl/utils/RenderTarget":89,"./BaseTexture":97,"./Texture":99}],99:[function(t,e,r){function i(t,e,r,n,o){a.call(this),this.noFrame=!1,e||(this.noFrame=!0,e=new h.Rectangle(0,0,1,1)),t instanceof i&&(t=t.baseTexture),this.baseTexture=t,this._frame=e,this.trim=n,this.valid=!1,this.requiresUpdate=!1,this._uvs=null,this.width=0,this.height=0,this.crop=r||e,this.rotate=!!o,t.hasLoaded?(this.noFrame&&(e=new h.Rectangle(0,0,t.width,t.height),t.on("update",this.onBaseTextureUpdated,this)),this.frame=e):t.once("loaded",this.onBaseTextureLoaded,this)}var n=t("./BaseTexture"),o=t("./VideoBaseTexture"),s=t("./TextureUvs"),a=t("eventemitter3"),h=t("../math"),u=t("../utils");i.prototype=Object.create(a.prototype),i.prototype.constructor=i,e.exports=i,Object.defineProperties(i.prototype,{frame:{get:function(){return this._frame},set:function(t){if(this._frame=t,this.noFrame=!1,this.width=t.width,this.height=t.height,!this.trim&&!this.rotate&&(t.x+t.width>this.baseTexture.width||t.y+t.height>this.baseTexture.height))throw new Error("Texture Error: frame does not fit inside the base Texture dimensions "+this);this.valid=t&&t.width&&t.height&&this.baseTexture.hasLoaded,this.trim?(this.width=this.trim.width,this.height=this.trim.height,this._frame.width=this.trim.width,this._frame.height=this.trim.height):this.crop=t,this.valid&&this._updateUvs()}}}),i.prototype.update=function(){this.baseTexture.update()},i.prototype.onBaseTextureLoaded=function(t){this.noFrame?this.frame=new h.Rectangle(0,0,t.width,t.height):this.frame=this._frame,this.emit("update",this)},i.prototype.onBaseTextureUpdated=function(t){this._frame.width=t.width,this._frame.height=t.height,this.emit("update",this)},i.prototype.destroy=function(t){this.baseTexture&&(t&&this.baseTexture.destroy(),this.baseTexture.off("update",this.onBaseTextureUpdated,this),this.baseTexture.off("loaded",this.onBaseTextureLoaded,this),this.baseTexture=null),this._frame=null,this._uvs=null,this.trim=null,this.crop=null,this.valid=!1,this.off("dispose",this.dispose,this),this.off("update",this.update,this)},i.prototype.clone=function(){return new i(this.baseTexture,this.frame,this.crop,this.trim,this.rotate)},i.prototype._updateUvs=function(){this._uvs||(this._uvs=new s),this._uvs.set(this.crop,this.baseTexture,this.rotate)},i.fromImage=function(t,e,r){var o=u.TextureCache[t];return o||(o=new i(n.fromImage(t,e,r)),u.TextureCache[t]=o),o},i.fromFrame=function(t){var e=u.TextureCache[t];if(!e)throw new Error('The frameId "'+t+'" does not exist in the texture cache');return e},i.fromCanvas=function(t,e){return new i(n.fromCanvas(t,e))},i.fromVideo=function(t,e){return"string"==typeof t?i.fromVideoUrl(t,e):new i(o.fromVideo(t,e))},i.fromVideoUrl=function(t,e){return new i(o.fromUrl(t,e))},i.addTextureToCache=function(t,e){u.TextureCache[e]=t},i.removeTextureFromCache=function(t){var e=u.TextureCache[t];return delete u.TextureCache[t],delete u.BaseTextureCache[t],e},i.EMPTY=new i(new n)},{"../math":55,"../utils":105,"./BaseTexture":97,"./TextureUvs":100,"./VideoBaseTexture":101,eventemitter3:25}],100:[function(t,e,r){function i(){this.x0=0,this.y0=0,this.x1=1,this.y1=0,this.x2=1,this.y2=1,this.x3=0,this.y3=1,this.xy0_uint32=0,this.xy1_uint32=0,this.xy2_uint32=0,this.xy3_uint32=0,this.uvs_uint32=new Uint32Array(4)}e.exports=i,i.prototype.set=function(t,e,r){var i=e.width,n=e.height;r?(this.x0=(t.x+t.height)/i,this.y0=t.y/n,this.x1=(t.x+t.height)/i,this.y1=(t.y+t.width)/n,this.x2=t.x/i,this.y2=(t.y+t.width)/n,this.x3=t.x/i,this.y3=t.y/n):(this.x0=t.x/i,this.y0=t.y/n,this.x1=(t.x+t.width)/i,this.y1=t.y/n,this.x2=(t.x+t.width)/i,this.y2=(t.y+t.height)/n,this.x3=t.x/i,this.y3=(t.y+t.height)/n),this.uvs_uint32[0]=(65535*this.y0&65535)<<16|65535*this.x0&65535,this.uvs_uint32[1]=(65535*this.y1&65535)<<16|65535*this.x1&65535,this.uvs_uint32[2]=(65535*this.y2&65535)<<16|65535*this.x2&65535,this.uvs_uint32[3]=(65535*this.y3&65535)<<16|65535*this.x3&65535}},{}],101:[function(t,e,r){function i(t,e){if(!t)throw new Error("No video source element specified.");(t.readyState===t.HAVE_ENOUGH_DATA||t.readyState===t.HAVE_FUTURE_DATA)&&t.width&&t.height&&(t.complete=!0),o.call(this,t,e),this.autoUpdate=!1,this._onUpdate=this._onUpdate.bind(this),this._onCanPlay=this._onCanPlay.bind(this),t.complete||(t.addEventListener("canplay",this._onCanPlay),t.addEventListener("canplaythrough",this._onCanPlay),t.addEventListener("play",this._onPlayStart.bind(this)),t.addEventListener("pause",this._onPlayStop.bind(this))),this.__loaded=!1}function n(t,e){e||(e="video/"+t.substr(t.lastIndexOf(".")+1));var r=document.createElement("source");return r.src=t,r.type=e,r}var o=t("./BaseTexture"),s=t("../utils");i.prototype=Object.create(o.prototype),i.prototype.constructor=i,e.exports=i,i.prototype._onUpdate=function(){this.autoUpdate&&(window.requestAnimationFrame(this._onUpdate),this.update())},i.prototype._onPlayStart=function(){this.autoUpdate||(window.requestAnimationFrame(this._onUpdate),this.autoUpdate=!0)},i.prototype._onPlayStop=function(){this.autoUpdate=!1},i.prototype._onCanPlay=function(){this.hasLoaded=!0,this.source&&(this.source.removeEventListener("canplay",this._onCanPlay),this.source.removeEventListener("canplaythrough",this._onCanPlay),this.width=this.source.videoWidth,this.height=this.source.videoHeight,this.source.play(),this.__loaded||(this.__loaded=!0,this.emit("loaded",this)))},i.prototype.destroy=function(){this.source&&this.source._pixiId&&(delete s.BaseTextureCache[this.source._pixiId],delete this.source._pixiId),o.prototype.destroy.call(this)},i.fromVideo=function(t,e){t._pixiId||(t._pixiId="video_"+s.uid());var r=s.BaseTextureCache[t._pixiId];return r||(r=new i(t,e),s.BaseTextureCache[t._pixiId]=r),r},i.fromUrl=function(t,e){var r=document.createElement("video");if(Array.isArray(t))for(var o=0;othis._maxElapsedMS&&(e=this._maxElapsedMS),this.deltaTime=e*n.TARGET_FPMS*this.speed,this._emitter.emit(s,this.deltaTime),this.lastTime=t},e.exports=i},{"../const":38,eventemitter3:25}],103:[function(t,e,r){var i=t("./Ticker"),n=new i;n.autoStart=!0,e.exports={shared:n,Ticker:i}},{"./Ticker":102}],104:[function(t,e,r){var i=function(t){for(var e=6*t,r=new Uint16Array(e),i=0,n=0;e>i;i+=6,n+=4)r[i+0]=n+0,r[i+1]=n+1,r[i+2]=n+2,r[i+3]=n+0,r[i+4]=n+2,r[i+5]=n+3;return r};e.exports=i},{}],105:[function(t,e,r){var i=t("../const"),n=e.exports={_uid:0,_saidHello:!1,EventEmitter:t("eventemitter3"),pluginTarget:t("./pluginTarget"),async:t("async"),uid:function(){return++n._uid},hex2rgb:function(t,e){return e=e||[],e[0]=(t>>16&255)/255,e[1]=(t>>8&255)/255,e[2]=(255&t)/255,e},hex2string:function(t){return t=t.toString(16),t="000000".substr(0,6-t.length)+t,"#"+t},rgb2hex:function(t){return(255*t[0]<<16)+(255*t[1]<<8)+255*t[2]},canUseNewCanvasBlendModes:function(){if("undefined"==typeof document)return!1;var t="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAQAAAABAQMAAADD8p2OAAAAA1BMVEX/",e="AAAACklEQVQI12NgAAAAAgAB4iG8MwAAAABJRU5ErkJggg==",r=new Image;r.src=t+"AP804Oa6"+e;var i=new Image;i.src=t+"/wCKxvRF"+e;var n=document.createElement("canvas");n.width=6,n.height=1;var o=n.getContext("2d");o.globalCompositeOperation="multiply",o.drawImage(r,0,0),o.drawImage(i,2,0);var s=o.getImageData(2,0,1,1).data;return 255===s[0]&&0===s[1]&&0===s[2]},getNextPowerOfTwo:function(t){if(t>0&&0===(t&t-1))return t;for(var e=1;t>e;)e<<=1;return e},isPowerOfTwo:function(t,e){return t>0&&0===(t&t-1)&&e>0&&0===(e&e-1)},getResolutionOfUrl:function(t){var e=i.RETINA_PREFIX.exec(t);return e?parseFloat(e[1]):1},sayHello:function(t){if(!n._saidHello){if(navigator.userAgent.toLowerCase().indexOf("chrome")>-1){var e=["\n %c %c %c Pixi.js "+i.VERSION+" - ✰ "+t+" ✰ %c %c http://www.pixijs.com/ %c %c ♥%c♥%c♥ \n\n","background: #ff66a5; padding:5px 0;","background: #ff66a5; padding:5px 0;","color: #ff66a5; background: #030307; padding:5px 0;","background: #ff66a5; padding:5px 0;","background: #ffc3dc; padding:5px 0;","background: #ff66a5; padding:5px 0;","color: #ff2424; background: #fff; padding:5px 0;","color: #ff2424; background: #fff; padding:5px 0;","color: #ff2424; background: #fff; padding:5px 0;"];window.console.log.apply(console,e)}else window.console&&window.console.log("Pixi.js "+i.VERSION+" - "+t+" - http://www.pixijs.com/");n._saidHello=!0}},isWebGLSupported:function(){var t={stencil:!0};try{if(!window.WebGLRenderingContext)return!1;var e=document.createElement("canvas"),r=e.getContext("webgl",t)||e.getContext("experimental-webgl",t);return!(!r||!r.getContextAttributes().stencil)}catch(i){return!1}},sign:function(t){return t?0>t?-1:1:0},removeItems:function(t,e,r){var i=t.length;if(!(e>=i||0===r)){r=e+r>i?i-e:r;for(var n=e,o=i-r;o>n;++n)t[n]=t[n+r];t.length=o}},TextureCache:{},BaseTextureCache:{}}},{"../const":38,"./pluginTarget":106,async:16,eventemitter3:25}],106:[function(t,e,r){function i(t){t.__plugins={},t.registerPlugin=function(e,r){t.__plugins[e]=r},t.prototype.initPlugins=function(){this.plugins=this.plugins||{};for(var e in t.__plugins)this.plugins[e]=new t.__plugins[e](this)},t.prototype.destroyPlugins=function(){for(var t in this.plugins)this.plugins[t].destroy(),this.plugins[t]=null;this.plugins=null}}e.exports={mixin:function(t){i(t)}}},{}],107:[function(t,e,r){var i=t("./core"),n=t("./mesh"),o=t("./extras"),s=t("./filters");i.SpriteBatch=function(){throw new ReferenceError("SpriteBatch does not exist any more, please use the new ParticleContainer instead.")},i.AssetLoader=function(){throw new ReferenceError("The loader system was overhauled in pixi v3, please see the new PIXI.loaders.Loader class.")},Object.defineProperties(i,{Stage:{get:function(){return console.warn("You do not need to use a PIXI Stage any more, you can simply render any container."),i.Container}},DisplayObjectContainer:{get:function(){return console.warn("DisplayObjectContainer has been shortened to Container, please use Container from now on."),i.Container}},Strip:{get:function(){return console.warn("The Strip class has been renamed to Mesh and moved to mesh.Mesh, please use mesh.Mesh from now on."),n.Mesh}},Rope:{get:function(){return console.warn("The Rope class has been moved to mesh.Rope, please use mesh.Rope from now on."),n.Rope}},MovieClip:{get:function(){return console.warn("The MovieClip class has been moved to extras.MovieClip, please use extras.MovieClip from now on."),o.MovieClip}},TilingSprite:{get:function(){return console.warn("The TilingSprite class has been moved to extras.TilingSprite, please use extras.TilingSprite from now on."),o.TilingSprite}},BitmapText:{get:function(){return console.warn("The BitmapText class has been moved to extras.BitmapText, please use extras.BitmapText from now on."),o.BitmapText}},blendModes:{get:function(){return console.warn("The blendModes has been moved to BLEND_MODES, please use BLEND_MODES from now on."),i.BLEND_MODES}},scaleModes:{get:function(){return console.warn("The scaleModes has been moved to SCALE_MODES, please use SCALE_MODES from now on."),i.SCALE_MODES}},BaseTextureCache:{get:function(){return console.warn("The BaseTextureCache class has been moved to utils.BaseTextureCache, please use utils.BaseTextureCache from now on."),i.utils.BaseTextureCache}},TextureCache:{get:function(){return console.warn("The TextureCache class has been moved to utils.TextureCache, please use utils.TextureCache from now on."),i.utils.TextureCache}},math:{get:function(){return console.warn("The math namespace is deprecated, please access members already accessible on PIXI."),i}}}),i.Sprite.prototype.setTexture=function(t){this.texture=t,console.warn("setTexture is now deprecated, please use the texture property, e.g : sprite.texture = texture;")},o.BitmapText.prototype.setText=function(t){this.text=t,console.warn("setText is now deprecated, please use the text property, e.g : myBitmapText.text = 'my text';")},i.Text.prototype.setText=function(t){this.text=t,console.warn("setText is now deprecated, please use the text property, e.g : myText.text = 'my text';")},i.Text.prototype.setStyle=function(t){this.style=t,console.warn("setStyle is now deprecated, please use the style property, e.g : myText.style = style;")},i.Texture.prototype.setFrame=function(t){this.frame=t,console.warn("setFrame is now deprecated, please use the frame property, e.g : myTexture.frame = frame;")},Object.defineProperties(s,{AbstractFilter:{get:function(){return console.warn("filters.AbstractFilter is an undocumented alias, please use AbstractFilter from now on."),i.AbstractFilter}},FXAAFilter:{get:function(){return console.warn("filters.FXAAFilter is an undocumented alias, please use FXAAFilter from now on."),i.FXAAFilter}},SpriteMaskFilter:{get:function(){return console.warn("filters.SpriteMaskFilter is an undocumented alias, please use SpriteMaskFilter from now on."),i.SpriteMaskFilter}}}),i.utils.uuid=function(){return console.warn("utils.uuid() is deprecated, please use utils.uid() from now on."),i.utils.uid()}},{"./core":52,"./extras":114,"./filters":131,"./mesh":156}],108:[function(t,e,r){function i(t,e){n.Container.call(this),e=e||{},this.textWidth=0,this.textHeight=0,this._glyphs=[],this._font={tint:void 0!==e.tint?e.tint:16777215,align:e.align||"left",name:null,size:0},this.font=e.font,this._text=t,this.maxWidth=0,this.maxLineHeight=0,this.dirty=!1,this.updateText()}var n=t("../core");i.prototype=Object.create(n.Container.prototype),i.prototype.constructor=i,e.exports=i,Object.defineProperties(i.prototype,{tint:{get:function(){return this._font.tint},set:function(t){this._font.tint="number"==typeof t&&t>=0?t:16777215,this.dirty=!0}},align:{get:function(){return this._font.align},set:function(t){this._font.align=t||"left",this.dirty=!0}},font:{get:function(){return this._font},set:function(t){t&&("string"==typeof t?(t=t.split(" "),this._font.name=1===t.length?t[0]:t.slice(1).join(" "),this._font.size=t.length>=2?parseInt(t[0],10):i.fonts[this._font.name].size):(this._font.name=t.name,this._font.size="number"==typeof t.size?t.size:parseInt(t.size,10)),this.dirty=!0)}},text:{get:function(){return this._text},set:function(t){t=t.toString()||" ",this._text!==t&&(this._text=t,this.dirty=!0)}}}),i.prototype.updateText=function(){for(var t=i.fonts[this._font.name],e=new n.Point,r=null,o=[],s=0,a=0,h=[],u=0,l=this._font.size/t.size,c=-1,p=0,d=0;d0&&e.x*l>this.maxWidth)n.utils.removeItems(o,c,d-c),d=c,c=-1,h.push(s),a=Math.max(a,s),u++,e.x=0,e.y+=t.lineHeight,r=null;else{var v=t.chars[f];v&&(r&&v.kerning[r]&&(e.x+=v.kerning[r]),o.push({texture:v.texture,line:u,charCode:f,position:new n.Point(e.x+v.xOffset,e.y+v.yOffset)}),s=e.x+(v.texture.width+v.xOffset),e.x+=v.xAdvance,p=Math.max(p,v.yOffset+v.texture.height),r=f)}}h.push(s),a=Math.max(a,s);var g=[];for(d=0;u>=d;d++){var m=0;"right"===this._font.align?m=a-h[d]:"center"===this._font.align&&(m=(a-h[d])/2),g.push(m)}var y=o.length,x=this.tint;for(d=0;y>d;d++){var b=this._glyphs[d];b?b.texture=o[d].texture:(b=new n.Sprite(o[d].texture),this._glyphs.push(b)),b.position.x=(o[d].position.x+g[o[d].line])*l,b.position.y=o[d].position.y*l, +b.scale.x=b.scale.y=l,b.tint=x,b.parent||this.addChild(b)}for(d=y;dt&&(t+=this._textures.length),t}}}),i.prototype.stop=function(){this.playing&&(this.playing=!1,n.ticker.shared.remove(this.update,this))},i.prototype.play=function(){this.playing||(this.playing=!0,n.ticker.shared.add(this.update,this))},i.prototype.gotoAndStop=function(t){this.stop(),this._currentTime=t,this._texture=this._textures[this.currentFrame]},i.prototype.gotoAndPlay=function(t){this._currentTime=t,this.play()},i.prototype.update=function(t){var e=this.animationSpeed*t;if(null!==this._durations){var r=this._currentTime%1*this._durations[this.currentFrame];for(r+=e/60*1e3;0>r;)this._currentTime--,r+=this._durations[this.currentFrame];var i=Math.sign(this.animationSpeed*t);for(this._currentTime=Math.floor(this._currentTime);r>=this._durations[this.currentFrame];)r-=this._durations[this.currentFrame]*i,this._currentTime+=i;this._currentTime+=r/this._durations[this.currentFrame]}else this._currentTime+=e;this._currentTime<0&&!this.loop?(this.gotoAndStop(0),this.onComplete&&this.onComplete()):this._currentTime>=this._textures.length&&!this.loop?(this.gotoAndStop(this._textures.length-1),this.onComplete&&this.onComplete()):this._texture=this._textures[this.currentFrame]},i.prototype.destroy=function(){this.stop(),n.Sprite.prototype.destroy.call(this)},i.fromFrames=function(t){for(var e=[],r=0;rx?x:t,t=t>_?_:t,t=t>E?E:t,r=y,r=r>b?b:r,r=r>T?T:r,r=r>S?S:r,e=m,e=x>e?x:e,e=_>e?_:e,e=E>e?E:e,i=y,i=b>i?b:i,i=T>i?T:i,i=S>i?S:i;var w=this._bounds;return w.x=t,w.width=e-t,w.y=r,w.height=i-r,this._currentBounds=w,w},i.prototype.containsPoint=function(t){this.worldTransform.applyInverse(t,o);var e,r=this._width,i=this._height,n=-r*this.anchor.x;return o.x>n&&o.xe&&o.y 0.2) n = 65600.0; // :\n if (gray > 0.3) n = 332772.0; // *\n if (gray > 0.4) n = 15255086.0; // o\n if (gray > 0.5) n = 23385164.0; // &\n if (gray > 0.6) n = 15252014.0; // 8\n if (gray > 0.7) n = 13199452.0; // @\n if (gray > 0.8) n = 11512810.0; // #\n\n vec2 p = mod( uv / ( pixelSize * 0.5 ), 2.0) - vec2(1.0);\n col = col * character(n, p);\n\n gl_FragColor = vec4(col, 1.0);\n}\n",{dimensions:{type:"4fv",value:new Float32Array([0,0,0,0])},pixelSize:{type:"1f",value:8}})}var n=t("../../core");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i,Object.defineProperties(i.prototype,{size:{get:function(){return this.uniforms.pixelSize.value},set:function(t){this.uniforms.pixelSize.value=t}}})},{"../../core":52}],116:[function(t,e,r){function i(){n.AbstractFilter.call(this),this.blurXFilter=new o,this.blurYFilter=new s,this.defaultFilter=new n.AbstractFilter}var n=t("../../core"),o=t("../blur/BlurXFilter"),s=t("../blur/BlurYFilter");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.applyFilter=function(t,e,r){var i=t.filterManager.getRenderTarget(!0);this.defaultFilter.applyFilter(t,e,r),this.blurXFilter.applyFilter(t,e,i),t.blendModeManager.setBlendMode(n.BLEND_MODES.SCREEN),this.blurYFilter.applyFilter(t,i,r),t.blendModeManager.setBlendMode(n.BLEND_MODES.NORMAL),t.filterManager.returnRenderTarget(i)},Object.defineProperties(i.prototype,{blur:{get:function(){return this.blurXFilter.blur},set:function(t){this.blurXFilter.blur=this.blurYFilter.blur=t}},blurX:{get:function(){return this.blurXFilter.blur},set:function(t){this.blurXFilter.blur=t}},blurY:{get:function(){return this.blurYFilter.blur},set:function(t){this.blurYFilter.blur=t}}})},{"../../core":52,"../blur/BlurXFilter":119,"../blur/BlurYFilter":120}],117:[function(t,e,r){function i(t,e){n.AbstractFilter.call(this,"attribute vec2 aVertexPosition;\nattribute vec2 aTextureCoord;\nattribute vec4 aColor;\n\nuniform float strength;\nuniform float dirX;\nuniform float dirY;\nuniform mat3 projectionMatrix;\n\nvarying vec2 vTextureCoord;\nvarying vec4 vColor;\nvarying vec2 vBlurTexCoords[3];\n\nvoid main(void)\n{\n gl_Position = vec4((projectionMatrix * vec3((aVertexPosition), 1.0)).xy, 0.0, 1.0);\n vTextureCoord = aTextureCoord;\n\n vBlurTexCoords[0] = aTextureCoord + vec2( (0.004 * strength) * dirX, (0.004 * strength) * dirY );\n vBlurTexCoords[1] = aTextureCoord + vec2( (0.008 * strength) * dirX, (0.008 * strength) * dirY );\n vBlurTexCoords[2] = aTextureCoord + vec2( (0.012 * strength) * dirX, (0.012 * strength) * dirY );\n\n vColor = vec4(aColor.rgb * aColor.a, aColor.a);\n}\n","precision lowp float;\n\nvarying vec2 vTextureCoord;\nvarying vec2 vBlurTexCoords[3];\nvarying vec4 vColor;\n\nuniform sampler2D uSampler;\n\nvoid main(void)\n{\n gl_FragColor = vec4(0.0);\n\n gl_FragColor += texture2D(uSampler, vTextureCoord ) * 0.3989422804014327;\n gl_FragColor += texture2D(uSampler, vBlurTexCoords[ 0]) * 0.2419707245191454;\n gl_FragColor += texture2D(uSampler, vBlurTexCoords[ 1]) * 0.05399096651318985;\n gl_FragColor += texture2D(uSampler, vBlurTexCoords[ 2]) * 0.004431848411938341;\n}\n",{strength:{type:"1f",value:1},dirX:{type:"1f",value:t||0},dirY:{type:"1f",value:e||0}}),this.defaultFilter=new n.AbstractFilter,this.passes=1,this.dirX=t||0,this.dirY=e||0,this.strength=4}var n=t("../../core");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.applyFilter=function(t,e,r,i){var n=this.getShader(t);if(this.uniforms.strength.value=this.strength/4/this.passes*(e.frame.width/e.size.width),1===this.passes)t.filterManager.applyFilter(n,e,r,i);else{var o=t.filterManager.getRenderTarget(!0);t.filterManager.applyFilter(n,e,o,i);for(var s=0;s>16&255)/255,s=(r>>8&255)/255,a=(255&r)/255,h=(i>>16&255)/255,u=(i>>8&255)/255,l=(255&i)/255,c=[.3,.59,.11,0,0,o,s,a,t,0,h,u,l,e,0,o-h,s-u,a-l,0,0];this._loadMatrix(c,n)},i.prototype.night=function(t,e){t=t||.1;var r=[-2*t,-t,0,0,0,-t,0,t,0,0,0,t,2*t,0,0,0,0,0,1,0];this._loadMatrix(r,e)},i.prototype.predator=function(t,e){var r=[11.224130630493164*t,-4.794486999511719*t,-2.8746118545532227*t,0*t,.40342438220977783*t,-3.6330697536468506*t,9.193157196044922*t,-2.951810836791992*t,0*t,-1.316135048866272*t,-3.2184197902679443*t,-4.2375030517578125*t,7.476448059082031*t,0*t,.8044459223747253*t,0,0,0,1,0];this._loadMatrix(r,e)},i.prototype.lsd=function(t){var e=[2,-.4,.5,0,0,-.5,2,-.4,0,0,-.4,-.5,3,0,0,0,0,0,1,0];this._loadMatrix(e,t)},i.prototype.reset=function(){var t=[1,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,1,0];this._loadMatrix(t,!1)},Object.defineProperties(i.prototype,{matrix:{get:function(){return this.uniforms.m.value},set:function(t){this.uniforms.m.value=t}}})},{"../../core":52}],123:[function(t,e,r){function i(){n.AbstractFilter.call(this,null,"precision mediump float;\n\nvarying vec2 vTextureCoord;\n\nuniform sampler2D uSampler;\nuniform float step;\n\nvoid main(void)\n{\n vec4 color = texture2D(uSampler, vTextureCoord);\n\n color = floor(color * step) / step;\n\n gl_FragColor = color;\n}\n",{step:{type:"1f",value:5}})}var n=t("../../core");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i,Object.defineProperties(i.prototype,{step:{get:function(){return this.uniforms.step.value},set:function(t){this.uniforms.step.value=t}}})},{"../../core":52}],124:[function(t,e,r){function i(t,e,r){n.AbstractFilter.call(this,null,"precision mediump float;\n\nvarying mediump vec2 vTextureCoord;\n\nuniform sampler2D uSampler;\nuniform vec2 texelSize;\nuniform float matrix[9];\n\nvoid main(void)\n{\n vec4 c11 = texture2D(uSampler, vTextureCoord - texelSize); // top left\n vec4 c12 = texture2D(uSampler, vec2(vTextureCoord.x, vTextureCoord.y - texelSize.y)); // top center\n vec4 c13 = texture2D(uSampler, vec2(vTextureCoord.x + texelSize.x, vTextureCoord.y - texelSize.y)); // top right\n\n vec4 c21 = texture2D(uSampler, vec2(vTextureCoord.x - texelSize.x, vTextureCoord.y)); // mid left\n vec4 c22 = texture2D(uSampler, vTextureCoord); // mid center\n vec4 c23 = texture2D(uSampler, vec2(vTextureCoord.x + texelSize.x, vTextureCoord.y)); // mid right\n\n vec4 c31 = texture2D(uSampler, vec2(vTextureCoord.x - texelSize.x, vTextureCoord.y + texelSize.y)); // bottom left\n vec4 c32 = texture2D(uSampler, vec2(vTextureCoord.x, vTextureCoord.y + texelSize.y)); // bottom center\n vec4 c33 = texture2D(uSampler, vTextureCoord + texelSize); // bottom right\n\n gl_FragColor =\n c11 * matrix[0] + c12 * matrix[1] + c13 * matrix[2] +\n c21 * matrix[3] + c22 * matrix[4] + c23 * matrix[5] +\n c31 * matrix[6] + c32 * matrix[7] + c33 * matrix[8];\n\n gl_FragColor.a = c22.a;\n}\n",{ +matrix:{type:"1fv",value:new Float32Array(t)},texelSize:{type:"v2",value:{x:1/e,y:1/r}}})}var n=t("../../core");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i,Object.defineProperties(i.prototype,{matrix:{get:function(){return this.uniforms.matrix.value},set:function(t){this.uniforms.matrix.value=new Float32Array(t)}},width:{get:function(){return 1/this.uniforms.texelSize.value.x},set:function(t){this.uniforms.texelSize.value.x=1/t}},height:{get:function(){return 1/this.uniforms.texelSize.value.y},set:function(t){this.uniforms.texelSize.value.y=1/t}}})},{"../../core":52}],125:[function(t,e,r){function i(){n.AbstractFilter.call(this,null,"precision mediump float;\n\nvarying vec2 vTextureCoord;\n\nuniform sampler2D uSampler;\n\nvoid main(void)\n{\n float lum = length(texture2D(uSampler, vTextureCoord.xy).rgb);\n\n gl_FragColor = vec4(1.0, 1.0, 1.0, 1.0);\n\n if (lum < 1.00)\n {\n if (mod(gl_FragCoord.x + gl_FragCoord.y, 10.0) == 0.0)\n {\n gl_FragColor = vec4(0.0, 0.0, 0.0, 1.0);\n }\n }\n\n if (lum < 0.75)\n {\n if (mod(gl_FragCoord.x - gl_FragCoord.y, 10.0) == 0.0)\n {\n gl_FragColor = vec4(0.0, 0.0, 0.0, 1.0);\n }\n }\n\n if (lum < 0.50)\n {\n if (mod(gl_FragCoord.x + gl_FragCoord.y - 5.0, 10.0) == 0.0)\n {\n gl_FragColor = vec4(0.0, 0.0, 0.0, 1.0);\n }\n }\n\n if (lum < 0.3)\n {\n if (mod(gl_FragCoord.x - gl_FragCoord.y - 5.0, 10.0) == 0.0)\n {\n gl_FragColor = vec4(0.0, 0.0, 0.0, 1.0);\n }\n }\n}\n")}var n=t("../../core");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i},{"../../core":52}],126:[function(t,e,r){function i(t,e){var r=new n.Matrix;t.renderable=!1,n.AbstractFilter.call(this,"attribute vec2 aVertexPosition;\nattribute vec2 aTextureCoord;\nattribute vec4 aColor;\n\nuniform mat3 projectionMatrix;\nuniform mat3 otherMatrix;\n\nvarying vec2 vMapCoord;\nvarying vec2 vTextureCoord;\nvarying vec4 vColor;\n\nvoid main(void)\n{\n gl_Position = vec4((projectionMatrix * vec3(aVertexPosition, 1.0)).xy, 0.0, 1.0);\n vTextureCoord = aTextureCoord;\n vMapCoord = ( otherMatrix * vec3( aTextureCoord, 1.0) ).xy;\n vColor = vec4(aColor.rgb * aColor.a, aColor.a);\n}\n","precision mediump float;\n\nvarying vec2 vMapCoord;\nvarying vec2 vTextureCoord;\nvarying vec4 vColor;\n\nuniform vec2 scale;\n\nuniform sampler2D uSampler;\nuniform sampler2D mapSampler;\n\nvoid main(void)\n{\n vec4 map = texture2D(mapSampler, vMapCoord);\n\n map -= 0.5;\n map.xy *= scale;\n\n gl_FragColor = texture2D(uSampler, vec2(vTextureCoord.x + map.x, vTextureCoord.y + map.y));\n}\n",{mapSampler:{type:"sampler2D",value:t.texture},otherMatrix:{type:"mat3",value:r.toArray(!0)},scale:{type:"v2",value:{x:1,y:1}}}),this.maskSprite=t,this.maskMatrix=r,(null===e||void 0===e)&&(e=20),this.scale=new n.Point(e,e)}var n=t("../../core");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.applyFilter=function(t,e,r){var i=t.filterManager;i.calculateMappedMatrix(e.frame,this.maskSprite,this.maskMatrix),this.uniforms.otherMatrix.value=this.maskMatrix.toArray(!0),this.uniforms.scale.value.x=this.scale.x*(1/e.frame.width),this.uniforms.scale.value.y=this.scale.y*(1/e.frame.height);var n=this.getShader(t);i.applyFilter(n,e,r)},Object.defineProperties(i.prototype,{map:{get:function(){return this.uniforms.mapSampler.value},set:function(t){this.uniforms.mapSampler.value=t}}})},{"../../core":52}],127:[function(t,e,r){function i(){n.AbstractFilter.call(this,null,"precision mediump float;\n\nvarying vec2 vTextureCoord;\nvarying vec4 vColor;\n\nuniform vec4 dimensions;\nuniform sampler2D uSampler;\n\nuniform float angle;\nuniform float scale;\n\nfloat pattern()\n{\n float s = sin(angle), c = cos(angle);\n vec2 tex = vTextureCoord * dimensions.xy;\n vec2 point = vec2(\n c * tex.x - s * tex.y,\n s * tex.x + c * tex.y\n ) * scale;\n return (sin(point.x) * sin(point.y)) * 4.0;\n}\n\nvoid main()\n{\n vec4 color = texture2D(uSampler, vTextureCoord);\n float average = (color.r + color.g + color.b) / 3.0;\n gl_FragColor = vec4(vec3(average * 10.0 - 5.0 + pattern()), color.a);\n}\n",{scale:{type:"1f",value:1},angle:{type:"1f",value:5},dimensions:{type:"4fv",value:[0,0,0,0]}})}var n=t("../../core");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i,Object.defineProperties(i.prototype,{scale:{get:function(){return this.uniforms.scale.value},set:function(t){this.uniforms.scale.value=t}},angle:{get:function(){return this.uniforms.angle.value},set:function(t){this.uniforms.angle.value=t}}})},{"../../core":52}],128:[function(t,e,r){function i(){n.AbstractFilter.call(this,"attribute vec2 aVertexPosition;\nattribute vec2 aTextureCoord;\nattribute vec4 aColor;\n\nuniform float strength;\nuniform vec2 offset;\n\nuniform mat3 projectionMatrix;\n\nvarying vec2 vTextureCoord;\nvarying vec4 vColor;\nvarying vec2 vBlurTexCoords[6];\n\nvoid main(void)\n{\n gl_Position = vec4((projectionMatrix * vec3((aVertexPosition+offset), 1.0)).xy, 0.0, 1.0);\n vTextureCoord = aTextureCoord;\n\n vBlurTexCoords[ 0] = aTextureCoord + vec2(0.0, -0.012 * strength);\n vBlurTexCoords[ 1] = aTextureCoord + vec2(0.0, -0.008 * strength);\n vBlurTexCoords[ 2] = aTextureCoord + vec2(0.0, -0.004 * strength);\n vBlurTexCoords[ 3] = aTextureCoord + vec2(0.0, 0.004 * strength);\n vBlurTexCoords[ 4] = aTextureCoord + vec2(0.0, 0.008 * strength);\n vBlurTexCoords[ 5] = aTextureCoord + vec2(0.0, 0.012 * strength);\n\n vColor = vec4(aColor.rgb * aColor.a, aColor.a);\n}\n","precision lowp float;\n\nvarying vec2 vTextureCoord;\nvarying vec2 vBlurTexCoords[6];\nvarying vec4 vColor;\n\nuniform vec3 color;\nuniform float alpha;\n\nuniform sampler2D uSampler;\n\nvoid main(void)\n{\n vec4 sum = vec4(0.0);\n\n sum += texture2D(uSampler, vBlurTexCoords[ 0])*0.004431848411938341;\n sum += texture2D(uSampler, vBlurTexCoords[ 1])*0.05399096651318985;\n sum += texture2D(uSampler, vBlurTexCoords[ 2])*0.2419707245191454;\n sum += texture2D(uSampler, vTextureCoord )*0.3989422804014327;\n sum += texture2D(uSampler, vBlurTexCoords[ 3])*0.2419707245191454;\n sum += texture2D(uSampler, vBlurTexCoords[ 4])*0.05399096651318985;\n sum += texture2D(uSampler, vBlurTexCoords[ 5])*0.004431848411938341;\n\n gl_FragColor = vec4( color.rgb * sum.a * alpha, sum.a * alpha );\n}\n",{blur:{type:"1f",value:1/512},color:{type:"c",value:[0,0,0]},alpha:{type:"1f",value:.7},offset:{type:"2f",value:[5,5]},strength:{type:"1f",value:1}}),this.passes=1,this.strength=4}var n=t("../../core");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.applyFilter=function(t,e,r,i){var n=this.getShader(t);if(this.uniforms.strength.value=this.strength/4/this.passes*(e.frame.height/e.size.height),1===this.passes)t.filterManager.applyFilter(n,e,r,i);else{for(var o=t.filterManager.getRenderTarget(!0),s=e,a=o,h=0;h= (time - params.z)) )\n {\n float diff = (dist - time);\n float powDiff = 1.0 - pow(abs(diff*params.x), params.y);\n\n float diffTime = diff * powDiff;\n vec2 diffUV = normalize(uv - center);\n texCoord = uv + (diffUV * diffTime);\n }\n\n gl_FragColor = texture2D(uSampler, texCoord);\n}\n",{center:{type:"v2",value:{x:.5,y:.5}},params:{type:"v3",value:{x:10,y:.8,z:.1}},time:{type:"1f",value:0}})}var n=t("../../core");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i,Object.defineProperties(i.prototype,{center:{get:function(){return this.uniforms.center.value},set:function(t){this.uniforms.center.value=t}},params:{get:function(){return this.uniforms.params.value},set:function(t){this.uniforms.params.value=t}},time:{get:function(){return this.uniforms.time.value},set:function(t){this.uniforms.time.value=t}}})},{"../../core":52}],138:[function(t,e,r){function i(){n.AbstractFilter.call(this,null,"precision mediump float;\n\nvarying vec2 vTextureCoord;\n\nuniform sampler2D uSampler;\nuniform float blur;\nuniform float gradientBlur;\nuniform vec2 start;\nuniform vec2 end;\nuniform vec2 delta;\nuniform vec2 texSize;\n\nfloat random(vec3 scale, float seed)\n{\n return fract(sin(dot(gl_FragCoord.xyz + seed, scale)) * 43758.5453 + seed);\n}\n\nvoid main(void)\n{\n vec4 color = vec4(0.0);\n float total = 0.0;\n\n float offset = random(vec3(12.9898, 78.233, 151.7182), 0.0);\n vec2 normal = normalize(vec2(start.y - end.y, end.x - start.x));\n float radius = smoothstep(0.0, 1.0, abs(dot(vTextureCoord * texSize - start, normal)) / gradientBlur) * blur;\n\n for (float t = -30.0; t <= 30.0; t++)\n {\n float percent = (t + offset - 0.5) / 30.0;\n float weight = 1.0 - abs(percent);\n vec4 sample = texture2D(uSampler, vTextureCoord + delta / texSize * percent * radius);\n sample.rgb *= sample.a;\n color += sample * weight;\n total += weight;\n }\n\n gl_FragColor = color / total;\n gl_FragColor.rgb /= gl_FragColor.a + 0.00001;\n}\n",{blur:{type:"1f",value:100},gradientBlur:{type:"1f",value:600},start:{type:"v2",value:{x:0,y:window.innerHeight/2}},end:{type:"v2",value:{x:600,y:window.innerHeight/2}},delta:{type:"v2",value:{x:30,y:30}},texSize:{type:"v2",value:{x:window.innerWidth,y:window.innerHeight}}}),this.updateDelta()}var n=t("../../core");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.updateDelta=function(){this.uniforms.delta.value.x=0,this.uniforms.delta.value.y=0},Object.defineProperties(i.prototype,{blur:{get:function(){return this.uniforms.blur.value},set:function(t){this.uniforms.blur.value=t}},gradientBlur:{get:function(){return this.uniforms.gradientBlur.value},set:function(t){this.uniforms.gradientBlur.value=t}},start:{get:function(){return this.uniforms.start.value},set:function(t){this.uniforms.start.value=t,this.updateDelta()}},end:{get:function(){return this.uniforms.end.value},set:function(t){this.uniforms.end.value=t,this.updateDelta()}}})},{"../../core":52}],139:[function(t,e,r){function i(){n.AbstractFilter.call(this),this.tiltShiftXFilter=new o,this.tiltShiftYFilter=new s}var n=t("../../core"),o=t("./TiltShiftXFilter"),s=t("./TiltShiftYFilter");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.applyFilter=function(t,e,r){var i=t.filterManager.getRenderTarget(!0);this.tiltShiftXFilter.applyFilter(t,e,i),this.tiltShiftYFilter.applyFilter(t,i,r),t.filterManager.returnRenderTarget(i)},Object.defineProperties(i.prototype,{blur:{get:function(){return this.tiltShiftXFilter.blur},set:function(t){this.tiltShiftXFilter.blur=this.tiltShiftYFilter.blur=t}},gradientBlur:{get:function(){return this.tiltShiftXFilter.gradientBlur},set:function(t){this.tiltShiftXFilter.gradientBlur=this.tiltShiftYFilter.gradientBlur=t}},start:{get:function(){return this.tiltShiftXFilter.start},set:function(t){this.tiltShiftXFilter.start=this.tiltShiftYFilter.start=t}},end:{get:function(){return this.tiltShiftXFilter.end},set:function(t){this.tiltShiftXFilter.end=this.tiltShiftYFilter.end=t}}})},{"../../core":52,"./TiltShiftXFilter":140,"./TiltShiftYFilter":141}],140:[function(t,e,r){function i(){n.call(this)}var n=t("./TiltShiftAxisFilter");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.updateDelta=function(){var t=this.uniforms.end.value.x-this.uniforms.start.value.x,e=this.uniforms.end.value.y-this.uniforms.start.value.y,r=Math.sqrt(t*t+e*e);this.uniforms.delta.value.x=t/r,this.uniforms.delta.value.y=e/r}},{"./TiltShiftAxisFilter":138}],141:[function(t,e,r){function i(){n.call(this)}var n=t("./TiltShiftAxisFilter");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.updateDelta=function(){var t=this.uniforms.end.value.x-this.uniforms.start.value.x,e=this.uniforms.end.value.y-this.uniforms.start.value.y,r=Math.sqrt(t*t+e*e);this.uniforms.delta.value.x=-e/r,this.uniforms.delta.value.y=t/r}},{"./TiltShiftAxisFilter":138}],142:[function(t,e,r){function i(){n.AbstractFilter.call(this,null,"precision mediump float;\n\nvarying vec2 vTextureCoord;\n\nuniform sampler2D uSampler;\nuniform float radius;\nuniform float angle;\nuniform vec2 offset;\n\nvoid main(void)\n{\n vec2 coord = vTextureCoord - offset;\n float dist = length(coord);\n\n if (dist < radius)\n {\n float ratio = (radius - dist) / radius;\n float angleMod = ratio * ratio * angle;\n float s = sin(angleMod);\n float c = cos(angleMod);\n coord = vec2(coord.x * c - coord.y * s, coord.x * s + coord.y * c);\n }\n\n gl_FragColor = texture2D(uSampler, coord+offset);\n}\n",{radius:{type:"1f",value:.5},angle:{type:"1f",value:5},offset:{type:"v2",value:{x:.5,y:.5}}})}var n=t("../../core");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i,Object.defineProperties(i.prototype,{offset:{get:function(){return this.uniforms.offset.value},set:function(t){this.uniforms.offset.value=t}},radius:{get:function(){return this.uniforms.radius.value},set:function(t){this.uniforms.radius.value=t}},angle:{get:function(){return this.uniforms.angle.value},set:function(t){this.uniforms.angle.value=t}}})},{"../../core":52}],143:[function(t,e,r){(function(r){t("./polyfill");var i=e.exports=t("./core");i.extras=t("./extras"),i.filters=t("./filters"),i.interaction=t("./interaction"),i.loaders=t("./loaders"),i.mesh=t("./mesh"),i.accessibility=t("./accessibility"),i.loader=new i.loaders.Loader,Object.assign(i,t("./deprecation")),r.PIXI=i}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{"./accessibility":37,"./core":52,"./deprecation":107,"./extras":114,"./filters":131,"./interaction":146,"./loaders":149,"./mesh":156,"./polyfill":161}],144:[function(t,e,r){function i(){this.global=new n.Point,this.target=null,this.originalEvent=null}var n=t("../core");i.prototype.constructor=i,e.exports=i,i.prototype.getLocalPosition=function(t,e,r){return t.worldTransform.applyInverse(r||this.global,e)}},{"../core":52}],145:[function(t,e,r){function i(t,e){e=e||{},this.renderer=t,this.autoPreventDefault=void 0!==e.autoPreventDefault?e.autoPreventDefault:!0,this.interactionFrequency=e.interactionFrequency||10,this.mouse=new o,this.eventData={stopped:!1,target:null,type:null,data:this.mouse,stopPropagation:function(){this.stopped=!0}},this.interactiveDataPool=[],this.interactionDOMElement=null,this.eventsAdded=!1,this.onMouseUp=this.onMouseUp.bind(this),this.processMouseUp=this.processMouseUp.bind(this),this.onMouseDown=this.onMouseDown.bind(this),this.processMouseDown=this.processMouseDown.bind(this),this.onMouseMove=this.onMouseMove.bind(this),this.processMouseMove=this.processMouseMove.bind(this),this.onMouseOut=this.onMouseOut.bind(this),this.processMouseOverOut=this.processMouseOverOut.bind(this),this.onTouchStart=this.onTouchStart.bind(this),this.processTouchStart=this.processTouchStart.bind(this),this.onTouchEnd=this.onTouchEnd.bind(this),this.processTouchEnd=this.processTouchEnd.bind(this),this.onTouchMove=this.onTouchMove.bind(this),this.processTouchMove=this.processTouchMove.bind(this),this.last=0,this.currentCursorStyle="inherit",this._tempPoint=new n.Point,this.resolution=1,this.setTargetElement(this.renderer.view,this.renderer.resolution)}var n=t("../core"),o=t("./InteractionData");Object.assign(n.DisplayObject.prototype,t("./interactiveTarget")),i.prototype.constructor=i,e.exports=i,i.prototype.setTargetElement=function(t,e){this.removeEvents(),this.interactionDOMElement=t,this.resolution=e||1,this.addEvents()},i.prototype.addEvents=function(){this.interactionDOMElement&&(n.ticker.shared.add(this.update,this),window.navigator.msPointerEnabled&&(this.interactionDOMElement.style["-ms-content-zooming"]="none",this.interactionDOMElement.style["-ms-touch-action"]="none"),window.document.addEventListener("mousemove",this.onMouseMove,!0),this.interactionDOMElement.addEventListener("mousedown",this.onMouseDown,!0),this.interactionDOMElement.addEventListener("mouseout",this.onMouseOut,!0),this.interactionDOMElement.addEventListener("touchstart",this.onTouchStart,!0),this.interactionDOMElement.addEventListener("touchend",this.onTouchEnd,!0),this.interactionDOMElement.addEventListener("touchmove",this.onTouchMove,!0),window.addEventListener("mouseup",this.onMouseUp,!0),this.eventsAdded=!0)},i.prototype.removeEvents=function(){this.interactionDOMElement&&(n.ticker.shared.remove(this.update),window.navigator.msPointerEnabled&&(this.interactionDOMElement.style["-ms-content-zooming"]="",this.interactionDOMElement.style["-ms-touch-action"]=""),window.document.removeEventListener("mousemove",this.onMouseMove,!0),this.interactionDOMElement.removeEventListener("mousedown",this.onMouseDown,!0),this.interactionDOMElement.removeEventListener("mouseout",this.onMouseOut,!0),this.interactionDOMElement.removeEventListener("touchstart",this.onTouchStart,!0),this.interactionDOMElement.removeEventListener("touchend",this.onTouchEnd,!0),this.interactionDOMElement.removeEventListener("touchmove",this.onTouchMove,!0),this.interactionDOMElement=null,window.removeEventListener("mouseup",this.onMouseUp,!0),this.eventsAdded=!1)},i.prototype.update=function(t){if(this._deltaTime+=t,!(this._deltaTime=0;h--)this.processInteractive(t,a[h],r,i,s)&&(o=!0,s=!1,a[h].interactive&&(i=!1));return n&&(i&&!o&&(e.hitArea?(e.worldTransform.applyInverse(t,this._tempPoint),o=e.hitArea.contains(this._tempPoint.x,this._tempPoint.y)):e.containsPoint&&(o=e.containsPoint(t))),e.interactive&&r(e,o)),o},i.prototype.onMouseDown=function(t){this.mouse.originalEvent=t,this.eventData.data=this.mouse,this.eventData.stopped=!1,this.mapPositionToPoint(this.mouse.global,t.clientX,t.clientY),this.autoPreventDefault&&this.mouse.originalEvent.preventDefault(),this.processInteractive(this.mouse.global,this.renderer._lastObjectRendered,this.processMouseDown,!0)},i.prototype.processMouseDown=function(t,e){var r=this.mouse.originalEvent,i=2===r.button||3===r.which;e&&(t[i?"_isRightDown":"_isLeftDown"]=!0,this.dispatchEvent(t,i?"rightdown":"mousedown",this.eventData))},i.prototype.onMouseUp=function(t){this.mouse.originalEvent=t,this.eventData.data=this.mouse,this.eventData.stopped=!1,this.mapPositionToPoint(this.mouse.global,t.clientX,t.clientY),this.processInteractive(this.mouse.global,this.renderer._lastObjectRendered,this.processMouseUp,!0)},i.prototype.processMouseUp=function(t,e){var r=this.mouse.originalEvent,i=2===r.button||3===r.which,n=i?"_isRightDown":"_isLeftDown";e?(this.dispatchEvent(t,i?"rightup":"mouseup",this.eventData),t[n]&&(t[n]=!1,this.dispatchEvent(t,i?"rightclick":"click",this.eventData))):t[n]&&(t[n]=!1,this.dispatchEvent(t,i?"rightupoutside":"mouseupoutside",this.eventData))},i.prototype.onMouseMove=function(t){this.mouse.originalEvent=t,this.eventData.data=this.mouse,this.eventData.stopped=!1,this.mapPositionToPoint(this.mouse.global,t.clientX,t.clientY),this.didMove=!0,this.cursor="inherit",this.processInteractive(this.mouse.global,this.renderer._lastObjectRendered,this.processMouseMove,!0),this.currentCursorStyle!==this.cursor&&(this.currentCursorStyle=this.cursor,this.interactionDOMElement.style.cursor=this.cursor)},i.prototype.processMouseMove=function(t,e){this.dispatchEvent(t,"mousemove",this.eventData),this.processMouseOverOut(t,e)},i.prototype.onMouseOut=function(t){this.mouse.originalEvent=t,this.eventData.stopped=!1,this.mapPositionToPoint(this.mouse.global,t.clientX,t.clientY),this.interactionDOMElement.style.cursor="inherit",this.mapPositionToPoint(this.mouse.global,t.clientX,t.clientY),this.processInteractive(this.mouse.global,this.renderer._lastObjectRendered,this.processMouseOverOut,!1)},i.prototype.processMouseOverOut=function(t,e){e?(t._over||(t._over=!0,this.dispatchEvent(t,"mouseover",this.eventData)),t.buttonMode&&(this.cursor=t.defaultCursor)):t._over&&(t._over=!1,this.dispatchEvent(t,"mouseout",this.eventData))},i.prototype.onTouchStart=function(t){this.autoPreventDefault&&t.preventDefault();for(var e=t.changedTouches,r=e.length,i=0;r>i;i++){var n=e[i],o=this.getTouchData(n);o.originalEvent=t,this.eventData.data=o,this.eventData.stopped=!1,this.processInteractive(o.global,this.renderer._lastObjectRendered,this.processTouchStart,!0),this.returnTouchData(o)}},i.prototype.processTouchStart=function(t,e){e&&(t._touchDown=!0,this.dispatchEvent(t,"touchstart",this.eventData))},i.prototype.onTouchEnd=function(t){this.autoPreventDefault&&t.preventDefault();for(var e=t.changedTouches,r=e.length,i=0;r>i;i++){var n=e[i],o=this.getTouchData(n);o.originalEvent=t,this.eventData.data=o,this.eventData.stopped=!1,this.processInteractive(o.global,this.renderer._lastObjectRendered,this.processTouchEnd,!0),this.returnTouchData(o)}},i.prototype.processTouchEnd=function(t,e){e?(this.dispatchEvent(t,"touchend",this.eventData),t._touchDown&&(t._touchDown=!1,this.dispatchEvent(t,"tap",this.eventData))):t._touchDown&&(t._touchDown=!1,this.dispatchEvent(t,"touchendoutside",this.eventData))},i.prototype.onTouchMove=function(t){this.autoPreventDefault&&t.preventDefault();for(var e=t.changedTouches,r=e.length,i=0;r>i;i++){var n=e[i],o=this.getTouchData(n);o.originalEvent=t, +this.eventData.data=o,this.eventData.stopped=!1,this.processInteractive(o.global,this.renderer._lastObjectRendered,this.processTouchMove,!0),this.returnTouchData(o)}},i.prototype.processTouchMove=function(t,e){e=e,this.dispatchEvent(t,"touchmove",this.eventData)},i.prototype.getTouchData=function(t){var e=this.interactiveDataPool.pop();return e||(e=new o),e.identifier=t.identifier,this.mapPositionToPoint(e.global,t.clientX,t.clientY),navigator.isCocoonJS&&(e.global.x=e.global.x/this.resolution,e.global.y=e.global.y/this.resolution),t.globalX=e.global.x,t.globalY=e.global.y,e},i.prototype.returnTouchData=function(t){this.interactiveDataPool.push(t)},i.prototype.destroy=function(){this.removeEvents(),this.renderer=null,this.mouse=null,this.eventData=null,this.interactiveDataPool=null,this.interactionDOMElement=null,this.onMouseUp=null,this.processMouseUp=null,this.onMouseDown=null,this.processMouseDown=null,this.onMouseMove=null,this.processMouseMove=null,this.onMouseOut=null,this.processMouseOverOut=null,this.onTouchStart=null,this.processTouchStart=null,this.onTouchEnd=null,this.processTouchEnd=null,this.onTouchMove=null,this.processTouchMove=null,this._tempPoint=null},n.WebGLRenderer.registerPlugin("interaction",i),n.CanvasRenderer.registerPlugin("interaction",i)},{"../core":52,"./InteractionData":144,"./interactiveTarget":147}],146:[function(t,e,r){e.exports={InteractionData:t("./InteractionData"),InteractionManager:t("./InteractionManager"),interactiveTarget:t("./interactiveTarget")}},{"./InteractionData":144,"./InteractionManager":145,"./interactiveTarget":147}],147:[function(t,e,r){var i={interactive:!1,buttonMode:!1,interactiveChildren:!0,defaultCursor:"pointer",_over:!1,_touchDown:!1};e.exports=i},{}],148:[function(t,e,r){function i(t,e){var r={},i=t.data.getElementsByTagName("info")[0],n=t.data.getElementsByTagName("common")[0];r.font=i.getAttribute("face"),r.size=parseInt(i.getAttribute("size"),10),r.lineHeight=parseInt(n.getAttribute("lineHeight"),10),r.chars={};for(var a=t.data.getElementsByTagName("char"),h=0;hn;n++){var o=2*n;this._renderCanvasDrawTriangle(t,e,r,o,o+2,o+4)}},i.prototype._renderCanvasTriangles=function(t){for(var e=this.vertices,r=this.uvs,i=this.indices,n=i.length,o=0;n>o;o+=3){var s=2*i[o],a=2*i[o+1],h=2*i[o+2];this._renderCanvasDrawTriangle(t,e,r,s,a,h)}},i.prototype._renderCanvasDrawTriangle=function(t,e,r,i,n,o){var s=this._texture.baseTexture.source,a=this._texture.baseTexture.width,h=this._texture.baseTexture.height,u=e[i],l=e[n],c=e[o],p=e[i+1],d=e[n+1],f=e[o+1],v=r[i]*a,g=r[n]*a,m=r[o]*a,y=r[i+1]*h,x=r[n+1]*h,b=r[o+1]*h;if(this.canvasPadding>0){var _=this.canvasPadding/this.worldTransform.a,T=this.canvasPadding/this.worldTransform.d,E=(u+l+c)/3,S=(p+d+f)/3,w=u-E,C=p-S,A=Math.sqrt(w*w+C*C);u=E+w/A*(A+_),p=S+C/A*(A+T),w=l-E,C=d-S,A=Math.sqrt(w*w+C*C),l=E+w/A*(A+_),d=S+C/A*(A+T),w=c-E,C=f-S,A=Math.sqrt(w*w+C*C),c=E+w/A*(A+_),f=S+C/A*(A+T)}t.save(),t.beginPath(),t.moveTo(u,p),t.lineTo(l,d),t.lineTo(c,f),t.closePath(),t.clip();var M=v*x+y*m+g*b-x*m-y*g-v*b,R=u*x+y*c+l*b-x*c-y*l-u*b,O=v*l+u*m+g*c-l*m-u*g-v*c,P=v*x*c+y*l*m+u*g*b-u*x*m-y*g*c-v*l*b,D=p*x+y*f+d*b-x*f-y*d-p*b,F=v*d+p*m+g*f-d*m-p*g-v*f,L=v*x*f+y*d*m+p*g*b-p*x*m-y*g*f-v*d*b;t.transform(R/M,D/M,O/M,F/M,P/M,L/M),t.drawImage(s,0,0),t.restore()},i.prototype.renderMeshFlat=function(t){var e=this.context,r=t.vertices,i=r.length/2;e.beginPath();for(var n=1;i-2>n;n++){var o=2*n,s=r[o],a=r[o+2],h=r[o+4],u=r[o+1],l=r[o+3],c=r[o+5];e.moveTo(s,u),e.lineTo(a,l),e.lineTo(h,c)}e.fillStyle="#FF0000",e.fill(),e.closePath()},i.prototype._onTextureUpdate=function(){this.updateFrame=!0},i.prototype.getBounds=function(t){if(!this._currentBounds){for(var e=t||this.worldTransform,r=e.a,i=e.b,o=e.c,s=e.d,a=e.tx,h=e.ty,u=-(1/0),l=-(1/0),c=1/0,p=1/0,d=this.vertices,f=0,v=d.length;v>f;f+=2){var g=d[f],m=d[f+1],y=r*g+o*m+a,x=s*m+i*g+h;c=c>y?y:c,p=p>x?x:p,u=y>u?y:u,l=x>l?x:l}if(c===-(1/0)||l===1/0)return n.Rectangle.EMPTY;var b=this._bounds;b.x=c,b.width=u-c,b.y=p,b.height=l-p,this._currentBounds=b}return this._currentBounds},i.prototype.containsPoint=function(t){if(!this.getBounds().contains(t.x,t.y))return!1;this.worldTransform.applyInverse(t,o);var e,r,n=this.vertices,a=s.points;if(this.drawMode===i.DRAW_MODES.TRIANGLES){var h=this.indices;for(r=this.indices.length,e=0;r>e;e+=3){var u=2*h[e],l=2*h[e+1],c=2*h[e+2];if(a[0]=n[u],a[1]=n[u+1],a[2]=n[l],a[3]=n[l+1],a[4]=n[c],a[5]=n[c+1],s.contains(o.x,o.y))return!0}}else for(r=n.length,e=0;r>e;e+=6)if(a[0]=n[e],a[1]=n[e+1],a[2]=n[e+2],a[3]=n[e+3],a[4]=n[e+4],a[5]=n[e+5],s.contains(o.x,o.y))return!0;return!1},i.DRAW_MODES={TRIANGLE_MESH:0,TRIANGLES:1}},{"../core":52}],154:[function(t,e,r){function i(t,e,r){n.call(this,t),this._ready=!0,this.segmentsX=e||10,this.segmentsY=r||10,this.drawMode=n.DRAW_MODES.TRIANGLES,this.refresh()}var n=t("./Mesh");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.refresh=function(){var t=this.segmentsX*this.segmentsY,e=[],r=[],i=[],n=[],o=this.texture,s=this.segmentsX-1,a=this.segmentsY-1,h=0,u=o.width/s,l=o.height/a;for(h=0;t>h;h++){var c=h%this.segmentsX,p=h/this.segmentsX|0;e.push(c*u,p*l),i.push(o._uvs.x0+(o._uvs.x1-o._uvs.x0)*(c/(this.segmentsX-1)),o._uvs.y0+(o._uvs.y3-o._uvs.y0)*(p/(this.segmentsY-1)))}var d=s*a;for(h=0;d>h;h++){var f=h%s,v=h/s|0,g=v*this.segmentsX+f,m=v*this.segmentsX+f+1,y=(v+1)*this.segmentsX+f,x=(v+1)*this.segmentsX+f+1;n.push(g,m,y),n.push(m,x,y)}this.vertices=new Float32Array(e),this.uvs=new Float32Array(i),this.colors=new Float32Array(r),this.indices=new Uint16Array(n)},i.prototype._onTextureUpdate=function(){n.prototype._onTextureUpdate.call(this),this._ready&&this.refresh()}},{"./Mesh":153}],155:[function(t,e,r){function i(t,e){n.call(this,t),this.points=e,this.vertices=new Float32Array(4*e.length),this.uvs=new Float32Array(4*e.length),this.colors=new Float32Array(2*e.length),this.indices=new Uint16Array(2*e.length),this._ready=!0,this.refresh()}var n=t("./Mesh"),o=t("../core");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.refresh=function(){var t=this.points;if(!(t.length<1)&&this._texture._uvs){var e=this.uvs,r=this.indices,i=this.colors,n=this._texture._uvs,s=new o.Point(n.x0,n.y0),a=new o.Point(n.x2-n.x0,n.y2-n.y0);e[0]=0+s.x,e[1]=0+s.y,e[2]=0+s.x,e[3]=1*a.y+s.y,i[0]=1,i[1]=1,r[0]=0,r[1]=1;for(var h,u,l,c=t.length,p=1;c>p;p++)h=t[p],u=4*p,l=p/(c-1),e[u]=l*a.x+s.x,e[u+1]=0+s.y,e[u+2]=l*a.x+s.x,e[u+3]=1*a.y+s.y,u=2*p,i[u]=1,i[u+1]=1,u=2*p,r[u]=u,r[u+1]=u+1;this.dirty=!0}},i.prototype._onTextureUpdate=function(){n.prototype._onTextureUpdate.call(this),this._ready&&this.refresh()},i.prototype.updateTransform=function(){var t=this.points;if(!(t.length<1)){for(var e,r,i,n,o,s,a=t[0],h=0,u=0,l=this.vertices,c=t.length,p=0;c>p;p++)r=t[p],i=4*p,e=p1&&(n=1),o=Math.sqrt(h*h+u*u),s=this._texture.height/2,h/=o,u/=o,h*=s,u*=s,l[i]=r.x+h,l[i+1]=r.y+u,l[i+2]=r.x-h,l[i+3]=r.y-u,a=r;this.containerUpdateTransform()}}},{"../core":52,"./Mesh":153}],156:[function(t,e,r){e.exports={Mesh:t("./Mesh"),Plane:t("./Plane"),Rope:t("./Rope"),MeshRenderer:t("./webgl/MeshRenderer"),MeshShader:t("./webgl/MeshShader")}},{"./Mesh":153,"./Plane":154,"./Rope":155,"./webgl/MeshRenderer":157,"./webgl/MeshShader":158}],157:[function(t,e,r){function i(t){n.ObjectRenderer.call(this,t),this.indices=new Uint16Array(15e3);for(var e=0,r=0;15e3>e;e+=6,r+=4)this.indices[e+0]=r+0,this.indices[e+1]=r+1,this.indices[e+2]=r+2,this.indices[e+3]=r+0,this.indices[e+4]=r+2,this.indices[e+5]=r+3;this.currentShader=null}var n=t("../../core"),o=t("../Mesh");i.prototype=Object.create(n.ObjectRenderer.prototype),i.prototype.constructor=i,e.exports=i,n.WebGLRenderer.registerPlugin("mesh",i),i.prototype.onContextChange=function(){},i.prototype.render=function(t){t._vertexBuffer||this._initWebGL(t);var e=this.renderer,r=e.gl,i=t._texture.baseTexture,n=t.shader,s=t.drawMode===o.DRAW_MODES.TRIANGLE_MESH?r.TRIANGLE_STRIP:r.TRIANGLES;e.blendModeManager.setBlendMode(t.blendMode),n=n?n.shaders[r.id]||n.getShader(e):e.shaderManager.plugins.meshShader,this.renderer.shaderManager.setShader(n),n.uniforms.translationMatrix.value=t.worldTransform.toArray(!0),n.uniforms.projectionMatrix.value=e.currentRenderTarget.projectionMatrix.toArray(!0),n.uniforms.alpha.value=t.worldAlpha,n.syncUniforms(),t.dirty?(t.dirty=!1,r.bindBuffer(r.ARRAY_BUFFER,t._vertexBuffer),r.bufferData(r.ARRAY_BUFFER,t.vertices,r.STATIC_DRAW),r.vertexAttribPointer(n.attributes.aVertexPosition,2,r.FLOAT,!1,0,0),r.bindBuffer(r.ARRAY_BUFFER,t._uvBuffer),r.bufferData(r.ARRAY_BUFFER,t.uvs,r.STATIC_DRAW),r.vertexAttribPointer(n.attributes.aTextureCoord,2,r.FLOAT,!1,0,0),r.activeTexture(r.TEXTURE0),i._glTextures[r.id]?r.bindTexture(r.TEXTURE_2D,i._glTextures[r.id]):this.renderer.updateTexture(i),r.bindBuffer(r.ELEMENT_ARRAY_BUFFER,t._indexBuffer),r.bufferData(r.ELEMENT_ARRAY_BUFFER,t.indices,r.STATIC_DRAW)):(r.bindBuffer(r.ARRAY_BUFFER,t._vertexBuffer),r.bufferSubData(r.ARRAY_BUFFER,0,t.vertices),r.vertexAttribPointer(n.attributes.aVertexPosition,2,r.FLOAT,!1,0,0),r.bindBuffer(r.ARRAY_BUFFER,t._uvBuffer),r.vertexAttribPointer(n.attributes.aTextureCoord,2,r.FLOAT,!1,0,0),r.activeTexture(r.TEXTURE0),i._glTextures[r.id]?r.bindTexture(r.TEXTURE_2D,i._glTextures[r.id]):this.renderer.updateTexture(i),r.bindBuffer(r.ELEMENT_ARRAY_BUFFER,t._indexBuffer),r.bufferSubData(r.ELEMENT_ARRAY_BUFFER,0,t.indices)),r.drawElements(s,t.indices.length,r.UNSIGNED_SHORT,0)},i.prototype._initWebGL=function(t){var e=this.renderer.gl;t._vertexBuffer=e.createBuffer(),t._indexBuffer=e.createBuffer(),t._uvBuffer=e.createBuffer(),e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferData(e.ARRAY_BUFFER,t.vertices,e.DYNAMIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferData(e.ARRAY_BUFFER,t.uvs,e.STATIC_DRAW),t.colors&&(t._colorBuffer=e.createBuffer(),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.bufferData(e.ARRAY_BUFFER,t.colors,e.STATIC_DRAW)),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer),e.bufferData(e.ELEMENT_ARRAY_BUFFER,t.indices,e.STATIC_DRAW)},i.prototype.flush=function(){},i.prototype.start=function(){this.currentShader=null},i.prototype.destroy=function(){n.ObjectRenderer.prototype.destroy.call(this)}},{"../../core":52,"../Mesh":153}],158:[function(t,e,r){function i(t){n.Shader.call(this,t,["precision lowp float;","attribute vec2 aVertexPosition;","attribute vec2 aTextureCoord;","uniform mat3 translationMatrix;","uniform mat3 projectionMatrix;","varying vec2 vTextureCoord;","void main(void){"," gl_Position = vec4((projectionMatrix * translationMatrix * vec3(aVertexPosition, 1.0)).xy, 0.0, 1.0);"," vTextureCoord = aTextureCoord;","}"].join("\n"),["precision lowp float;","varying vec2 vTextureCoord;","uniform float alpha;","uniform sampler2D uSampler;","void main(void){"," gl_FragColor = texture2D(uSampler, vTextureCoord) * alpha ;","}"].join("\n"),{alpha:{type:"1f",value:0},translationMatrix:{type:"mat3",value:new Float32Array(9)},projectionMatrix:{type:"mat3",value:new Float32Array(9)}},{aVertexPosition:0,aTextureCoord:0})}var n=t("../../core");i.prototype=Object.create(n.Shader.prototype),i.prototype.constructor=i,e.exports=i,n.ShaderManager.registerPlugin("meshShader",i)},{"../../core":52}],159:[function(t,e,r){Math.sign||(Math.sign=function(t){return t=+t,0===t||isNaN(t)?t:t>0?1:-1})},{}],160:[function(t,e,r){Object.assign||(Object.assign=t("object-assign"))},{"object-assign":26}],161:[function(t,e,r){t("./Object.assign"),t("./requestAnimationFrame"),t("./Math.sign")},{"./Math.sign":159,"./Object.assign":160,"./requestAnimationFrame":162}],162:[function(t,e,r){(function(t){if(Date.now&&Date.prototype.getTime||(Date.now=function(){return(new Date).getTime()}),!t.performance||!t.performance.now){var e=Date.now();t.performance||(t.performance={}),t.performance.now=function(){return Date.now()-e}}for(var r=Date.now(),i=["ms","moz","webkit","o"],n=0;ni&&(i=0),r=e,setTimeout(function(){r=Date.now(),t(performance.now())},i)}),t.cancelAnimationFrame||(t.cancelAnimationFrame=function(t){clearTimeout(t)})}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{}]},{},[143])(143)}); //# sourceMappingURL=pixi.min.js.map diff --git a/bin/pixi.min.js.map b/bin/pixi.min.js.map index 857d92a..419daff 100644 --- a/bin/pixi.min.js.map +++ b/bin/pixi.min.js.map @@ -1 +1 @@ -{"version":3,"sources":["pixi.js"],"names":["f","exports","module","define","amd","g","window","global","self","this","PIXI","e","t","n","r","s","o","u","a","require","i","Error","code","l","call","length",1,"createContext","setVertexAttribArrays","GLBuffer","GLFramebuffer","GLShader","GLTexture","VertexArrayObject","./lib/GLBuffer","./lib/GLFramebuffer","./lib/GLShader","./lib/GLTexture","./lib/VertexArrayObject","./lib/createContext","./lib/setVertexAttribArrays",2,"EMPTY_ARRAY_BUFFER","ArrayBuffer","Buffer","gl","type","data","drawType","buffer","createBuffer","ARRAY_BUFFER","STATIC_DRAW","upload","prototype","offset","dontBind","bind","byteLength","bufferSubData","bufferData","bindBuffer","createVertexBuffer","createIndexBuffer","ELEMENT_ARRAY_BUFFER","create",3,"Texture","Framebuffer","width","height","framebuffer","createFramebuffer","stencil","texture","enableTexture","framebufferTexture2D","FRAMEBUFFER","COLOR_ATTACHMENT0","TEXTURE_2D","enableStencil","createRenderbuffer","bindRenderbuffer","RENDERBUFFER","framebufferRenderbuffer","DEPTH_STENCIL_ATTACHMENT","renderbufferStorage","DEPTH_STENCIL","clear","b","clearColor","COLOR_BUFFER_BIT","bindFramebuffer","unbind","resize","texImage2D","format","destroy","deleteFramebuffer","createRGBA","enableNearestScaling","enableWrapClamp","RGBA","UNSIGNED_BYTE","fbo","createFloat32","fromData","./GLTexture",4,"compileProgram","extractAttributes","extractUniforms","generateUniformAccessObject","Shader","vertexSrc","fragmentSrc","program","attributes","uniformData","uniforms","useProgram","./shader/compileProgram","./shader/extractAttributes","./shader/extractUniforms","./shader/generateUniformAccessObject",5,"createTexture","mipmap","premultiplyAlpha","source","pixelStorei","UNPACK_PREMULTIPLY_ALPHA_WEBGL","FLOATING_POINT_AVAILABLE","uploadData","Float32Array","ext","getExtension","FLOAT","location","undefined","activeTexture","TEXTURE0","bindTexture","minFilter","linear","texParameteri","TEXTURE_MIN_FILTER","LINEAR_MIPMAP_LINEAR","NEAREST_MIPMAP_NEAREST","LINEAR","NEAREST","magFilter","TEXTURE_MAG_FILTER","enableMipmap","generateMipmap","enableLinearScaling","TEXTURE_WRAP_S","CLAMP_TO_EDGE","TEXTURE_WRAP_T","enableWrapRepeat","REPEAT","deleteTexture","fromSource",6,"nativeVaoExtension","nativeVao","createVertexArrayOES","indexBuffer","dirty","constructor","bindVertexArrayOES","activate","attrib","attribute","pointer","normalized","stride","start","enableVertexAttribArray","addAttribute","push","addIndex","options",7,"CONTEXT_UID","canvas","getContext","id",8,"GL_MAP","attribs","maxAttribs","getParameter","MAX_VERTEX_ATTRIBS","tempAttribState","Array","attribState","disableVertexAttribArray",9,"glVertShader","compileShader","VERTEX_SHADER","glFragShader","FRAGMENT_SHADER","createProgram","attachShader","linkProgram","getProgramParameter","LINK_STATUS","console","error","VALIDATE_STATUS","getError","getProgramInfoLog","warn","deleteProgram","deleteShader","src","shader","createShader","shaderSource","getShaderParameter","COMPILE_STATUS","log","getShaderInfoLog",10,"defaultValue","size","Int32Array","booleanArray","array",11,"mapType","mapSize","totalAttributes","ACTIVE_ATTRIBUTES","attribData","getActiveAttrib","name","getAttribLocation","vertexAttribPointer","./mapSize","./mapType",12,"totalUniforms","ACTIVE_UNIFORMS","getActiveUniform","replace","getUniformLocation","value","./defaultValue",13,"uniformKeys","Object","keys","fullName","nameTokens","split","uniformGroup","getUniformGroup","uniform","defineProperty","get","generateGetter","set","generateSetter","template","getterTemplate","Function","setTemplate","setterTemplate","GLSL_TO_SINGLE_SETTERS","GLSL_TO_ARRAY_SETTERS","cur","join","float","vec2","vec3","vec4","int","ivec2","ivec3","ivec4","bool","bvec2","bvec3","bvec4","mat2","mat3","mat4","sampler2D",14,"GLSL_TO_SIZE",15,"GL_TABLE","typeNames","GL_TO_GLSL_TYPES","tn","FLOAT_VEC2","FLOAT_VEC3","FLOAT_VEC4","INT","INT_VEC2","INT_VEC3","INT_VEC4","BOOL","BOOL_VEC2","BOOL_VEC3","BOOL_VEC4","FLOAT_MAT2","FLOAT_MAT3","FLOAT_MAT4","SAMPLER_2D",16,"process","noop","identity","v","toBool","notId","only_once","fn","apply","arguments","_once","_isArrayLike","arr","_isArray","_arrayEach","iterator","index","_map","result","_range","count","_reduce","memo","x","_forEachOf","object","_keys","key","_indexOf","item","_keyIterator","coll","len","_restParam","func","startIndex","Math","max","rest","_withoutIndex","callback","_eachOfLimit","limit","obj","nextKey","done","running","errored","replenish","err","doParallel","async","eachOf","doParallelLimit","doSeries","eachOfSeries","_asyncMap","eachfn","results","_filter","sort","_reject","cb","_createTester","check","getResult","iteratee","_","_findGetResult","_parallel","tasks","task","args","_concat","y","concat","_queue","worker","concurrency","payload","_insert","q","pos","started","idle","setImmediate","drain","unshift","saturated","_next","workers","removed","workersList","splice","empty","paused","kill","pause","resume","resumeCount","min","w","_console_fn","_times","mapper","_applyEach","fns","go","that","pop","ensureAsync","innerArgs","sync","previous_async","root","noConflict","_toString","toString","isArray","_isObject","k","hasOwnProperty","_setImmediate","_delay","setTimeout","nextTick","forEach","each","forEachSeries","eachSeries","forEachLimit","eachLimit","forEachOf","completed","iter","forEachOfSeries","iterate","forEachOfLimit","eachOfLimit","map","mapSeries","mapLimit","inject","foldl","reduce","foldr","reduceRight","reversed","reverse","transform","select","filter","selectLimit","filterLimit","selectSeries","filterSeries","reject","rejectLimit","rejectSeries","any","some","someLimit","all","every","everyLimit","detect","detectSeries","detectLimit","sortBy","comparator","left","right","criteria","auto","addListener","listeners","removeListener","idx","taskComplete","remainingTasks","slice","runningTasks","ready","requires","listener","taskCallback","dep","safeResults","val","rkey","retry","times","parseTimes","acc","parseInt","DEFAULT_TIMES","interval","DEFAULT_INTERVAL","wrappedTask","wrappedCallback","wrappedResults","retryAttempt","finalAttempt","seriesCallback","retryInterval","opts","attempts","series","waterfall","wrapIterator","next","parallel","parallelLimit","makeCallback","callArgs","concatSeries","whilst","test","doWhilst","calls","until","doUntil","during","truth","doDuring","queue","items","priorityQueue","_compareTasks","priority","_binarySearch","sequence","compare","beg","end","mid","cargo","dir","memoize","hasher","queues","memoized","unmemoized","unmemoize","timesSeries","timesLimit","seq","newargs","nextargs","compose","applyEach","applyEachSeries","forever","constant","values","wrapSync","asyncify","then","message","_process",17,"normalizeArray","parts","allowAboveRoot","up","last","xs","res","splitPathRe","splitPath","filename","exec","resolve","resolvedPath","resolvedAbsolute","path","cwd","TypeError","charAt","p","normalize","isAbsolute","trailingSlash","substr","paths","relative","from","to","trim","fromParts","toParts","samePartsLength","outputParts","sep","delimiter","dirname","basename","extname","str",18,"cleanUpNextTick","draining","currentQueue","queueIndex","drainQueue","timeout","run","clearTimeout","Item","fun","title","browser","env","argv","version","versions","on","once","off","removeAllListeners","emit","binding","chdir","umask",19,"RangeError","errors","mapDomain","string","regexSeparators","labels","encoded","ucs2decode","extra","output","counter","charCodeAt","ucs2encode","stringFromCharCode","basicToDigit","codePoint","base","digitToBasic","digit","flag","adapt","delta","numPoints","firstTime","floor","damp","baseMinusTMin","tMax","skew","decode","input","out","basic","j","oldi","baseMinusT","inputLength","initialN","bias","initialBias","lastIndexOf","maxInt","tMin","encode","handledCPCount","basicLength","m","currentValue","handledCPCountPlusOne","qMinusT","toUnicode","regexPunycode","toLowerCase","toASCII","regexNonASCII","freeExports","nodeType","freeModule","freeGlobal","punycode","overflow","not-basic","invalid-input","String","fromCharCode","ucs2",20,"prop","qs","eq","regexp","maxKeys","kstr","vstr","indexOf","decodeURIComponent",21,"stringifyPrimitive","isFinite","objectKeys","ks","encodeURIComponent",22,"parse","stringify","./decode","./encode",23,"Url","protocol","slashes","auth","host","port","hostname","hash","search","query","pathname","href","urlParse","url","parseQueryString","slashesDenoteHost","isObject","urlFormat","isString","urlResolve","urlResolveObject","resolveObject","arg","isNull","isNullOrUndefined","protocolPattern","portPattern","delims","unwise","autoEscape","nonHostChars","hostEndingChars","hostnameMaxLen","hostnamePartPattern","hostnamePartStart","unsafeProtocol","javascript","javascript:","hostlessProtocol","slashedProtocol","http","https","ftp","gopher","file","http:","https:","ftp:","gopher:","file:","querystring","proto","lowerProto","match","hostEnd","hec","atSign","parseHost","ipv6Hostname","hostparts","part","newpart","validParts","notHost","bit","domainArray","newOut","h","ae","esc","escape","qm","rel","relPath","shift","isSourceAbs","isRelAbs","mustEndAbs","removeAllDots","srcPath","psychotic","authInHost","hasTrailingSlash",24,"earcut","holeIndices","dim","hasHoles","outerLen","outerNode","linkedList","triangles","minX","minY","maxX","maxY","eliminateHoles","earcutLinked","clockwise","sum","insertNode","filterPoints","again","steiner","equals","area","prev","removeNode","ear","pass","indexCurve","stop","isEarHashed","isEar","cureLocalIntersections","splitEarcut","c","pointInTriangle","minTX","minTY","maxTX","maxTY","minZ","zOrder","maxZ","nextZ","z","prevZ","intersects","locallyInside","isValidDiagonal","splitPolygon","list","getLeftmost","compareX","eliminateHole","hole","findHoleBridge","hx","hy","qx","Infinity","tan","tanMin","abs","sortLinked","tail","numMerges","pSize","qSize","inSize","leftmost","ax","ay","bx","by","cx","cy","px","py","intersectsPolygon","middleInside","p1","p2","q1","q2","inside","a2","Node","b2","an","bp",25,"EE","context","EventEmitter","prefix","_events","event","exists","evt","available","ee","a1","a3","a4","a5","events","setMaxListeners","prefixed",26,"toObject","propIsEnumerable","propertyIsEnumerable","assign","target","symbols","getOwnPropertySymbols",27,"called","_each","_eachLimit","_mapLimit","_detect","main_callback","theCallback","working","drained","ts","ds",28,"Loader","baseUrl","progress","loading","_progressChunk","_beforeMiddleware","_afterMiddleware","_boundLoadResource","_loadResource","_boundOnLoad","_onLoad","_buffer","_numToLoad","resources","urlParser","Resource","add","enqueue","onComplete","_handleBaseUrl","parsedUrl","before","pre","after","use","reset","load","resource","dequeue","_dequeue","_runMiddleware","_onComplete","LOAD_TYPE","XHR_READY_STATE","XHR_RESPONSE_TYPE","./Resource","eventemitter3",29,"isDataUrl","crossOrigin","loadType","_determineLoadType","xhrType","metadata","xhr","isJson","isXml","isImage","isAudio","isVideo","_boundComplete","complete","_boundOnError","_onError","_boundOnProgress","_onProgress","_boundXhrOnError","_xhrOnError","_boundXhrOnAbort","_xhrOnAbort","_boundXhrOnLoad","_xhrOnLoad","_boundXdrOnTimeout","_xdrOnTimeout","reqType","setExtMap","substring","_url","useXdr","XDomainRequest","XMLHttpRequest","tempAnchor","removeEventListener","onerror","ontimeout","onprogress","onload","_determineCrossOrigin","IMAGE","_loadImage","AUDIO","_loadElement","VIDEO","XHR","_loadXdr","_loadXhr","Image","addEventListener","Audio","document","createElement","navigator","isCocoonJS","appendChild","_createSource","toUpperCase","_determineXhrType","open","JSON","DOCUMENT","responseType","TEXT","send","xdr","mime","nodeName","lengthComputable","loaded","total","status","statusText","responseText","DOMParser","domparser","parseFromString","div","innerHTML","response","responseURL","loc","samePort","_xhrTypeMap","_getExtension","_loadTypeMap","slashIndex","queryStart","_getMimeFromXhrType","BUFFER","BLOB","DEFAULT","UNSENT","OPENED","HEADERS_RECEIVED","LOADING","DONE","gif","png","bmp","jpg","jpeg","tif","tiff","webp","tga","xhtml","html","htm","xml","tmx","tsx","svg","json","text","txt","setExtensionLoadType","setExtensionXhrType",30,"_keyStr","encodeBinary","bytebuffer","encodedCharIndexes","inx","jnx","paddingBytes",31,"middleware","caching","memory","parsing","blob","./Loader","./middlewares/caching/memory","./middlewares/parsing/blob",32,"cache",33,"b64","URL","webkitURL","Blob","createObjectURL","revokeObjectURL","getResponseHeader","../../Resource","../../b64",34,"description","author","contributors","main","homepage","bugs","license","repository","scripts","build","docs","files","dependencies","brfs","object-assign","pixi-gl-core","resource-loader","devDependencies","browserify","chai","del","gulp","gulp-cached","gulp-concat","gulp-debug","gulp-header","gulp-jshint","gulp-mirror","gulp-plumber","gulp-rename","gulp-sourcemaps","gulp-uglify","gulp-util","jaguarjs-jsdoc","jsdoc","jshint-summary","minimist","mocha","require-dir","run-sequence","testem","vinyl-buffer","vinyl-source-stream","watchify",35,"AccessibilityManager","renderer","style","position","top","zIndex","pool","renderId","debug","children","_onKeyDown","_onMouseMove","isActive","core","DisplayObject","update","view","parentNode","deactivate","removeChild","updateAccessibleObjects","displayObject","visible","accessible","interactive","_accessibleActive","addChild","_lastObjectRendered","rect","getBoundingClientRect","sx","sy","child","utils","removeItems","_accessibleDiv","hitArea","wt","worldTransform","tx","ty","d","getBounds","capHitArea","backgroundColor","borderStyle","_onClick","_onFocus","_onFocusOut","accessibleTitle","tabIndex","interactionManager","plugins","interaction","dispatchEvent","eventData","keyCode","WebGLRenderer","registerPlugin","CanvasRenderer","../core","./accessibleTarget",36,"accessibleTarget",37,"./AccessibilityManager",38,"CONST","VERSION","PI_2","PI","RAD_TO_DEG","DEG_TO_RAD","TARGET_FPMS","RENDERER_TYPE","UNKNOWN","WEBGL","CANVAS","BLEND_MODES","NORMAL","ADD","MULTIPLY","SCREEN","OVERLAY","DARKEN","LIGHTEN","COLOR_DODGE","COLOR_BURN","HARD_LIGHT","SOFT_LIGHT","DIFFERENCE","EXCLUSION","HUE","SATURATION","COLOR","LUMINOSITY","DRAW_MODES","POINTS","LINES","LINE_LOOP","LINE_STRIP","TRIANGLES","TRIANGLE_STRIP","TRIANGLE_FAN","SCALE_MODES","RETINA_PREFIX","RESOLUTION","FILTER_RESOLUTION","DEFAULT_RENDER_OPTIONS","resolution","antialias","forceFXAA","autoResize","transparent","clearBeforeRender","preserveDrawingBuffer","roundPixels","SHAPES","POLY","RECT","CIRC","ELIP","RREC","SPRITE_BATCH_SIZE","../../package.json",39,"Container","math","RenderTexture","_tempMatrix","Matrix","defineProperties","scale","getLocalBounds","_width","_height","onChildrenChange","argumentsLength","parent","addChildAt","swapChildren","child2","index1","getChildIndex","index2","setChildIndex","currentIndex","getChildAt","removeChildAt","removeChildren","beginIndex","endIndex","begin","range","generateTexture","scaleMode","bounds","renderTexture","render","updateTransform","displayObjectUpdateTransform","containerUpdateTransform","_currentBounds","Rectangle","EMPTY","childBounds","childMaxX","childMaxY","childVisible","_bounds","containerGetBounds","matrixCache","IDENTITY","renderWebGL","worldAlpha","renderable","_mask","_filters","currentRenderer","flush","filterManager","pushFilter","maskManager","pushMask","_renderWebGL","popMask","popFilter","_renderCanvas","renderCanvas","alpha","destroyChildren","../math","../textures/RenderTexture","../utils","./DisplayObject",40,"Point","pivot","_rotation","localTransform","filterArea","_sr","_cr","_tempDisplayObjectParent","scaleX","scaleY","rotation","sin","cos","worldVisible","mask","filters","pt","lt","matrix","toGlobal","toLocal","point","applyInverse","setParent","container","setTransform","skewX","skewY","pivotX","pivotY","../const",41,"Graphics","fillAlpha","lineWidth","lineColor","graphicsData","tint","_prevTint","blendMode","currentPath","_webGL","isMask","boundsPadding","_localBounds","glDirty","boundsDirty","cachedSpriteDirty","CanvasBuffer","CanvasGraphics","GraphicsData","tempPoint","clone","updateLocalBounds","lineStyle","color","lineAlpha","shape","points","Polygon","closed","drawShape","moveTo","lineTo","quadraticCurveTo","cpX","cpY","toX","toY","xa","ya","fromX","fromY","bezierCurveTo","cpX2","cpY2","dt","dt2","dt3","t2","t3","arcTo","x1","y1","x2","y2","radius","b1","mm","dd","cc","tt","k1","sqrt","k2","j1","j2","qy","startAngle","atan2","endAngle","arc","anticlockwise","sweep","segs","ceil","startX","startY","theta","theta2","cTheta","sTheta","segMinus","remainder","real","angle","beginFill","filling","fillColor","fill","endFill","drawRect","drawRoundedRect","RoundedRectangle","drawCircle","Circle","drawEllipse","Ellipse","drawPolygon","clearDirty","canvasBuffer","fromCanvas","baseTexture","translate","renderGraphics","setObjectRenderer","graphics","compositeOperation","blendModes","globalCompositeOperation","w0","w1","h0","h1","x3","y3","x4","y4","containsPoint","contains","padding","_webgl","../display/Container","../renderers/canvas/utils/CanvasBuffer","../renderers/canvas/utils/CanvasGraphics","../textures/Texture","./GraphicsData",42,"_lineTint","_fillTint",43,"GraphicsRenderer","ObjectRenderer","graphicsDataPool","primitiveShader","complexPrimitiveShader","maximumSimplePolySize","WebGLGraphicsData","onContextChange","webGLData","shaderManager","updateGraphics","webGL","blendModeManager","setBlendMode","mode","stencilManager","pushStencil","uniform1f","_location","drawElements","UNSIGNED_SHORT","indices","popStencil","setShader","uniformMatrix3fv","translationMatrix","toArray","projectionMatrix","currentRenderTarget","uniform3fv","hex2rgb","aVertexPosition","aColor","drawCount","lastIndex","switchMode","canDrawUsingSimple","buildPoly","buildComplexPoly","buildLine","buildRectangle","buildCircle","buildRoundedRectangle","rectData","verts","vertPos","tempPoints","rrectData","recPoints","quadraticBezierCurve","vecPos","getPt","n1","n2","perc","diff","xb","yb","circleData","totalSegs","seg","firstPoint","lastPoint","midPointX","midPointY","p1x","p1y","p2x","p2y","p3x","p3y","perpx","perpy","perp2x","perp2y","perp3x","perp3y","c1","c2","denom","pdist","dist","indexCount","indexStart","../../const","../../math","../../renderers/webgl/WebGLRenderer","../../renderers/webgl/utils/ObjectRenderer","../../utils","./WebGLGraphicsData",44,"glPoints","glIndices","Uint16Array","deleteBuffer",45,"ticker","Sprite","ParticleContainer","SpriteRenderer","ParticleRenderer","Text","BaseTexture","VideoBaseTexture","TextureUvs","WebGLManager","ShaderManager","RenderTarget","AbstractFilter","FXAAFilter","SpriteMaskFilter","glCore","autoDetectRenderer","noWebGL","isWebGLSupported","./const","./display/Container","./display/DisplayObject","./graphics/Graphics","./graphics/GraphicsData","./graphics/webgl/GraphicsRenderer","./math","./particles/ParticleContainer","./particles/webgl/ParticleRenderer","./renderers/canvas/CanvasRenderer","./renderers/canvas/utils/CanvasBuffer","./renderers/canvas/utils/CanvasGraphics","./renderers/webgl/WebGLRenderer","./renderers/webgl/filters/AbstractFilter","./renderers/webgl/filters/FXAAFilter","./renderers/webgl/filters/SpriteMaskFilter","./renderers/webgl/managers/ShaderManager","./renderers/webgl/managers/WebGLManager","./renderers/webgl/shaders/Shader","./renderers/webgl/utils/ObjectRenderer","./renderers/webgl/utils/RenderTarget","./sprites/Sprite","./sprites/webgl/SpriteRenderer","./text/Text","./textures/BaseTexture","./textures/RenderTexture","./textures/Texture","./textures/TextureUvs","./textures/VideoBaseTexture","./ticker","./utils",46,"fromArray","transpose","newPos","rotate","tx1","append","d1","sr","cr","nsx","prepend","invert","copy","TEMP_MATRIX","./Point",47,48,"./Matrix","./shapes/Circle","./shapes/Ellipse","./shapes/Polygon","./shapes/Rectangle","./shapes/RoundedRectangle",49,"dx","dy","r2","./Rectangle",50,"normx","normy",51,"points_","il","xi","yi","xj","yj","intersect","../Point",52,53,54,"maxSize","properties","batchSize","maxBatchSize","_properties","_maxSize","_batchSize","_buffers","_bufferToUpdate","interactiveChildren","setProperties","uvs","particle","smallestChildIndex","bufferIndex","isRotated","positionX","positionY","finalWidth","finalHeight","globalAlpha","frame","anchor","childTransform","drawImage",55,"ParticleBuffer","dynamicPropertyFlags","vertSize","vertByteSize","dynamicProperties","staticProperties","property","staticStride","staticBuffer","staticData","dynamicStride","dynamicBuffer","dynamicData","initBuffers","dynamicOffset","DYNAMIC_DRAW","staticOffset","uploadDynamic","amount","uploadFunction","uploadStatic",56,"numIndices","tempMatrix","ParticleShader","uploadVertices","aPositionCoord","uploadPosition","aRotation","uploadRotation","aTextureCoord","uploadUvs","uploadAlpha","totalChildren","generateBuffers","uAlpha","_texture","_glTextures","updateTexture","buffers","sprite","crop","_frame","spritePosition","spriteRotation","textureUvs","_uvs","x0","y0","spriteAlpha","./ParticleBuffer","./ParticleShader",57,"TextureShader","../../renderers/webgl/shaders/TextureShader",58,"SystemRenderer","system","sayHello","_backgroundColor","_backgroundColorRgba","_backgroundColorString","hex2string","removeView",59,"refresh","CanvasMaskManager","smoothProperty","imageSmoothingEnabled","webkitImageSmoothingEnabled","mozImageSmoothingEnabled","oImageSmoothingEnabled","msImageSmoothingEnabled","initPlugins","_mapBlendModes","pluginTarget","mixin","cacheParent","screencanvas","fillStyle","clearRect","fillRect","renderDisplayObject","destroyPlugins","tempContext","canUseNewCanvasBlendModes","../SystemRenderer","./utils/CanvasMaskManager",60,61,"updateGraphicsTint","beginPath","closePath","strokeStyle","stroke","strokeRect","kappa","ox","oy","xe","ye","xm","ym","rx","ry","maxRadius","renderGraphicsMask","tintR","tintG","tintB","../../../const",62,"maskData","save","cacheAlpha","clip","restore","./CanvasGraphics",63,"CanvasTinter","getTintedTexture","roundColor","stringColor","tintCache","tintMethod","convertTintToImage","tintImage","toDataURL","tintWithMultiply","tintWithOverlay","tintWithPerPixel","rgbValues","pixelData","getImageData","pixels","putImageData","step","cacheStepsPerColorChannel","rgb2hex","canUseMultiply","../../../utils",64,"TextureManager","_managedTextures","glTextures","getTexture","hasLoaded","glTexture","uid","destroyTexture","_skipRemove","removeAll",65,"handleContextLost","handleContextRestored","_contextOptions","premultipliedAlpha","MaskManager","StencilManager","FilterManager","BlendModeManager","_initContext","mapWebGLBlendModesToPixi","drawModes","mapWebGLDrawModesToPixi","_activeShader","_activeRenderTarget","_activeTextureLocation","_activeTexture","textureManager","disable","DEPTH_TEST","CULL_FACE","enable","BLEND","rootRenderTarget","bindRenderTarget","isContextLost","renderTarget","setFilterStack","filterStack","objectRenderer","setMaskStack","stencilMaskStack","bindShader","preventDefault","destroyAll","./TextureManager","./filters/FXAAFilter","./managers/BlendModeManager","./managers/FilterManager","./managers/MaskManager","./managers/ShaderManager","./managers/StencilManager","./utils/ObjectRenderer","./utils/RenderTarget","./utils/mapWebGLBlendModesToPixi","./utils/mapWebGLDrawModesToPixi",66,"shaders","DefaultShader","defaultVertexSrc","defaultFragmentSrc","getShader","applyFilter","syncUniform","../shaders/TextureShader",67,"./AbstractFilter",68,"maskMatrix","otherMatrix","maskSprite","calculateMappedMatrix","../../../math",69,"currentBlendMode","blendFunc","./WebGLManager",70,"texturePool","textureSize","currentFrame","Quad","quad","capFilterArea","getRenderTarget","setRenderTarget","filterData","previousFilterData","vertexBuffer","defaultShader","dimensions","vertices","returnRenderTarget","flipTexture","flopTexture","temp","inputTarget","outputTarget","syncUniforms","outputMatrix","mappedMatrix","ratio","translateScaleX","translateScaleY","offsetY","../utils/Quad","../utils/RenderTarget",71,"stencilStack","alphaMaskPool","AlphaMaskFilter","pushSpriteMask","pushStencilMask","popSpriteMask","popStencilMask","alphaMaskFilter","../filters/SpriteMaskFilter",72,"maxAttibs","stack","_currentId","currentShader","ComplexPrimitiveShader","PrimitiveShader","setAttribs","../shaders/ComplexPrimitiveShader","../shaders/PrimitiveShader",73,"WebGLMaskManager","STENCIL_TEST","attachStencilBuffer","sms","bindGraphics","STENCIL_BUFFER_BIT","level","colorMask","stencilFunc","ALWAYS","stencilOp","KEEP","INVERT","EQUAL","DECR","INCR",74,75,"./Shader",76,77,"textureCount","init","compile","cacheUniformLocations","cacheAttributeLocations","_glCompile","uniform1i","uniform2f","uniform3f","uniform4f","uniform1iv","uniform2iv","uniform3iv","uniform4iv","uniform1fv","uniform2fv","uniform4fv","uniformMatrix2fv","uniformMatrix4fv","_array","initSampler2D","textureData","luminance","LUMINANCE","wrapS","wrapT",78,"customUniforms","customAttributes","uSampler",79,80,"../managers/WebGLManager",81,"colors","rect2",82,"StencilMaskStack","frameBuffer","stencilBuffer","projectionFrame","calculateProjection","viewport","pm","./StencilMaskStack",83,84,"ONE","ONE_MINUS_SRC_ALPHA","SRC_ALPHA","DST_ALPHA","DST_COLOR",85,86,"cachedTint","textureDirty","vertexDirty","vertexData","sign","_onTextureUpdate","caclulateVertices","valid","smoothingEnabled","tintedTexture","destroyBaseTexture","fromFrame","frameId","TextureCache","fromImage","imageId","crossorigin","../renderers/canvas/utils/CanvasTinter",87,"numVerts","positions","Uint32Array","createIndicesForQuads","currentBatchSize","sprites","groupCount","groups","textures","ids","blend","currentGroup","currentTexture","generateMultiTextureShader","MAX_TEXTUES","_shader","vao","aTextureId","nextTexture","_enabled","_id","uvs_uint32","renderSprites","subarray","group","../../renderers/webgl/shaders/_TextureShader","../../utils/createIndicesForQuads","./generateMultiTextureShader",88,"maxTextures","generateSampleSrc","fragTemplate","sampleValues","uSamplers",89,"_text","_style","fontPropertiesCache","fontPropertiesCanvas","fontPropertiesContext","updateText","dropShadowColor","font","align","strokeThickness","wordWrap","wordWrapWidth","dropShadow","dropShadowAngle","dropShadowDistance","dropShadowBlur","textBaseline","lineJoin","miterLimit","outputText","lines","lineWidths","maxLineWidth","fontProperties","determineFontProperties","measureText","lineHeight","fontSize","linePositionX","linePositionY","shadowColor","shadowBlur","xShadowOffset","yShadowOffset","ascent","fillText","strokeText","fontStyle","baseline","imagedata","line","descent","spaceLeft","words","wordWidth","wordWidthWithSpace","../sprites/Sprite",90,"realWidth","realHeight","isLoading","imageUrl","isPowerOfTwo","_active","loadSource","naturalWidth","naturalHeight","wasLoading","_sourceLoaded","scope","BaseTextureCache","_pixiId","dispose","updateSourceImage","newSrc","image","getResolutionOfUrl",91,"textureBuffer","_updateUvs","updateBase","currentBounds","cachedWt","realResolution","getImage","getBase64","getCanvas","webGLPixels","Uint8Array","readPixels","tempCanvas","canvasData","getPixels","getPixel","../renderers/webgl/managers/FilterManager","../renderers/webgl/utils/RenderTarget","./BaseTexture","./Texture",92,"noFrame","requiresUpdate","onBaseTextureUpdated","onBaseTextureLoaded","destroyBase","fromVideo","video","fromVideoUrl","videoUrl","fromUrl","addTextureToCache","removeTextureFromCache","./TextureUvs","./VideoBaseTexture",93,"xy0_uint32","xy1_uint32","xy2_uint32","xy3_uint32","baseFrame","tw","th",94,"readyState","HAVE_ENOUGH_DATA","HAVE_FUTURE_DATA","autoUpdate","_onUpdate","_onCanPlay","_onPlayStart","_onPlayStop","__loaded","createSource","requestAnimationFrame","videoWidth","videoHeight","play","videoSrc","fromUrls",95,"Ticker","_this","_tick","time","_requestId","_emitter","TICK","_maxElapsedMS","autoStart","deltaTime","elapsedMS","lastTime","speed","FPS","minFPS","fps","minFPMS","_requestIfNeeded","performance","now","_cancelIfNeeded","cancelAnimationFrame","_startIfPossible","addOnce","remove","currentTime",96,"shared","./Ticker",97,"totalIndices",98,"_uid","_saidHello","hex","rgb","pngHead","pngEnd","magenta","yellow","getNextPowerOfTwo","number","parseFloat","userAgent","contextOptions","WebGLRenderingContext","getContextAttributes","startIdx","removeCount","./pluginTarget",99,"__plugins","pluginName","ctor",100,"mesh","extras","SpriteBatch","ReferenceError","AssetLoader","Stage","DisplayObjectContainer","Strip","Mesh","Rope","MovieClip","TilingSprite","BitmapText","scaleModes","setTexture","setText","setStyle","setFrame","uuid","./core","./extras","./filters","./mesh",101,"textWidth","textHeight","_glyphs","_font","maxWidth","maxLineHeight","fonts","prevCharCode","chars","lastLineWidth","lastSpace","charCode","charData","kerning","xOffset","yOffset","xAdvance","lineAlignOffsets","alignOffset","lenChars","validate",102,"_textures","_durations","animationSpeed","loop","_currentTime","playing","totalFrames","gotoAndStop","frameNumber","gotoAndPlay","elapsed","lag","fromFrames","frames","fromImages","images",103,"tileScale","tilePosition","_canvasPattern","uFrame","uTransform","uPixelSize","tempUvs","tempWidth","tempHeight","modX","modY","createPattern","_tileScaleOffset","../core/renderers/canvas/utils/CanvasTinter",104,"_cacheAsBitmap","_originalRenderWebGL","_originalRenderCanvas","_originalUpdateTransform","_originalHitTest","_originalDestroy","_cachedSprite","cacheAsBitmap","_originalGetBounds","_originalContainsPoint","_renderCachedWebGL","_renderCachedCanvas","_cacheAsBitmapDestroy","_destroyCachedDisplayObject","_initCachedDisplayObject","cachedRenderTarget","_getCachedBounds","_initCachedDisplayObjectCanvas",105,"getChildByName",106,"getGlobalPosition",107,"./BitmapText","./MovieClip","./TilingSprite","./cacheAsBitmap","./getChildByName","./getGlobalPosition",108,"AsciiFilter","pixelSize","../../core",109,"BloomFilter","blurXFilter","BlurXFilter","blurYFilter","BlurYFilter","defaultFilter","blur","blurX","blurY","../blur/BlurXFilter","../blur/BlurYFilter",110,"BlurDirFilter","dirX","dirY","strength","passes",111,"BlurFilter","./BlurXFilter","./BlurYFilter",112,"flip","flop",113,114,"SmartBlurFilter",115,"ColorMatrixFilter","_loadMatrix","multiply","newMatrix","_multiply","_colorMatrix","brightness","greyscale","grayscale","blackAndWhite","hue","lumR","lumG","lumB","contrast","saturate","desaturate","negative","sepia","technicolor","polaroid","toBGR","kodachrome","browni","vintage","colorTone","desaturation","toned","lightColor","darkColor","lR","lG","lB","dR","dG","dB","night","intensity","predator","lsd",116,"ColorStepFilter",117,"ConvolutionFilter","texelSize",118,"CrossHatchFilter",119,"DisplacementFilter","mapSampler",120,"DotScreenFilter",121,"BlurYTintFilter",122,"DropShadowFilter","blurYTintFilter","_dirtyPosition","_angle","_distance","hideObject","distance","./BlurYTintFilter",123,"GrayFilter","gray",124,"InvertFilter","NoiseFilter","PixelateFilter","RGBSplitFilter","ShockwaveFilter","SepiaFilter","TiltShiftFilter","TiltShiftXFilter","TiltShiftYFilter","TwistFilter","./ascii/AsciiFilter","./bloom/BloomFilter","./blur/BlurDirFilter","./blur/BlurFilter","./blur/BlurXFilter","./blur/BlurYFilter","./blur/SmartBlurFilter","./color/ColorMatrixFilter","./color/ColorStepFilter","./convolution/ConvolutionFilter","./crosshatch/CrossHatchFilter","./displacement/DisplacementFilter","./dot/DotScreenFilter","./dropshadow/DropShadowFilter","./gray/GrayFilter","./invert/InvertFilter","./noise/NoiseFilter","./pixelate/PixelateFilter","./rgb/RGBSplitFilter","./sepia/SepiaFilter","./shockwave/ShockwaveFilter","./tiltshift/TiltShiftFilter","./tiltshift/TiltShiftXFilter","./tiltshift/TiltShiftYFilter","./twist/TwistFilter",125,126,"noise",127,128,"red","green","blue",129,130,"center","params",131,"TiltShiftAxisFilter","gradientBlur","innerHeight","texSize","innerWidth","updateDelta",132,"tiltShiftXFilter","tiltShiftYFilter","./TiltShiftXFilter","./TiltShiftYFilter",133,"./TiltShiftAxisFilter",134,135,136,"loaders","accessibility","loader","./accessibility","./deprecation","./interaction","./loaders","./polyfill",137,"InteractionData","originalEvent","getLocalPosition","globalPos",138,"InteractionManager","autoPreventDefault","interactionFrequency","mouse","stopped","stopPropagation","interactiveDataPool","interactionDOMElement","eventsAdded","onMouseUp","processMouseUp","onMouseDown","processMouseDown","onMouseMove","processMouseMove","onMouseOut","processMouseOverOut","onTouchStart","processTouchStart","onTouchEnd","processTouchEnd","onTouchMove","processTouchMove","currentCursorStyle","_tempPoint","setTargetElement","element","removeEvents","addEvents","msPointerEnabled","_deltaTime","didMove","cursor","processInteractive","eventString","mapPositionToPoint","hitTest","hit","interactiveParent","clientX","clientY","isRightButton","button","which","isDown","_over","buttonMode","defaultCursor","changedTouches","cLength","touchEvent","touchData","getTouchData","returnTouchData","_touchDown","identifier","globalX","globalY","./InteractionData","./interactiveTarget",139,"interactiveTarget","./InteractionManager",140,141,"info","getElementsByTagName","common","getAttribute","letters","textureRect","kernings","first","second","bitmapFont","xmlUrl","textureUrl","loadOptions","imageMetadata","../extras",142,"bitmapFontParser","spritesheetParser","textureParser","./bitmapFontParser","./loader","./spritesheetParser","./textureParser",143,"ResourceLoader","_pixiMiddleware","addPixiMiddleware",144,"route","meta","rotated","trimmed","spriteSourceSize","sourceSize",145,146,"drawMode","canvasPadding","TRIANGLE_MESH","tempPolygon","_renderCanvasTriangleMesh","_renderCanvasTriangles","_renderCanvasDrawTriangle","index0","textureSource","textureWidth","textureHeight","u0","u1","u2","v0","v1","v2","paddingX","paddingY","centerX","centerY","normX","normY","deltaA","deltaB","deltaC","deltaD","deltaE","deltaF","renderMeshFlat","updateFrame","rawX","rawY","ind0","ind1","ind2",147,"Plane","segmentsX","segmentsY","_ready","segmentsXSub","segmentsYSub","sizeX","sizeY","totalSub","xpos","ypos","value2","value3","value4","./Mesh",148,"factor","nextPoint","perpLength","num","perpX","perpY",149,"MeshRenderer","MeshShader","./Plane","./Rope","./webgl/MeshRenderer","./webgl/MeshShader",150,"_vertexBuffer","_initWebGL","meshShader","_uvBuffer","_indexBuffer","_colorBuffer","../Mesh",151,152,"isNaN",153,154,"./Math.sign","./Object.assign","./requestAnimationFrame",155,"Date","getTime","startTime","vendors","delay"],"mappings":"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EAAA,GAAAuE,EAAA,GAAAvE,EAAA,GAAAuE,EAAA,GAAAvE,EAAA,GAAAuE,EAAA,IAAAvE,EAAA,GAAAuE,EAAA,IACAqkB,EAAA,GAAA5oB,EAAA,GAAAuE,EAAA,GAAAvE,EAAA,GAAAuE,EAAA,GAAAvE,EAAA,GAAAuE,EAAA,IAAAvE,EAAA,GAAAuE,EAAA,IAGAqkB,EAAA,IAAA5oB,EAAA,IAAAuE,EAAA,GAAAvE,EAAA,IAAAuE,EAAA,GAAAvE,EAAA,IAAAuE,EAAA,IAAAvE,EAAA,IAAAuE,EAAA,IACAqkB,EAAA,IAAA5oB,EAAA,IAAAuE,EAAA,GAAAvE,EAAA,IAAAuE,EAAA,GAAAvE,EAAA,IAAAuE,EAAA,IAAAvE,EAAA,IAAAuE,EAAA,IACAqkB,EAAA,IAAA5oB,EAAA,IAAAuE,EAAA,GAAAvE,EAAA,IAAAuE,EAAA,GAAAvE,EAAA,IAAAuE,EAAA,IAAAvE,EAAA,IAAAuE,EAAA,IACAqkB,EAAA,IAAA5oB,EAAA,IAAAuE,EAAA,GAAAvE,EAAA,IAAAuE,EAAA,GAAAvE,EAAA,IAAAuE,EAAA,IAAAvE,EAAA,IAAAuE,EAAA,IACAqkB,EAAA,IAAA5oB,EAAA,IAAAuE,EAAA,GAAAvE,EAAA,IAAAuE,EAAA,GAAAvE,EAAA,IAAAuE,EAAA,IAAAvE,EAAA,IAAAuE,EAAA,IAGAqkB,EAAA,IAAA5oB,EAAA,IAAAuE,EAAA,GAAAvE,EAAA,IAAAuE,EAAA,GAAAvE,EAAA,IAAAuE,EAAA,IAAAvE,EAAA,IAAAuE,EAAA,IACAqkB,EAAA,IAAA5oB,EAAA,IAAAuE,EAAA,GAAAvE,EAAA,IAAAuE,EAAA,GAAAvE,EAAA,IAAAuE,EAAA,IAAAvE,EAAA,IAAAuE,EAAA,IACAqkB,EAAA,IAAA5oB,EAAA,IAAAuE,EAAA,GAAAvE,EAAA,IAAAuE,EAAA,GAAAvE,EAAA,IAAAuE,EAAA,IAAAvE,EAAA,IAAAuE,EAAA,IACAqkB,EAAA,IAAA5oB,EAAA,IAAAuE,EAAA,GAAAvE,EAAA,IAAAuE,EAAA,GAAAvE,EAAA,IAAAuE,EAAA,IAAAvE,EAAA,IAAAuE,EAAA,IACAqkB,EAA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","file":"pixi.min.js","sourcesContent":[null],"sourceRoot":"./"} \ No newline at end of file +{"version":3,"sources":["pixi.js"],"names":["f","exports","module","define","amd","g","window","global","self","this","PIXI","e","t","n","r","s","o","u","a","require","i","Error","code","l","call","length",1,"createContext","setVertexAttribArrays","GLBuffer","GLFramebuffer","GLShader","GLTexture","VertexArrayObject","./lib/GLBuffer","./lib/GLFramebuffer","./lib/GLShader","./lib/GLTexture","./lib/VertexArrayObject","./lib/createContext","./lib/setVertexAttribArrays",2,"EMPTY_ARRAY_BUFFER","ArrayBuffer","Buffer","gl","type","data","drawType","buffer","createBuffer","ARRAY_BUFFER","STATIC_DRAW","upload","prototype","offset","dontBind","bind","byteLength","bufferSubData","bufferData","bindBuffer","createVertexBuffer","createIndexBuffer","ELEMENT_ARRAY_BUFFER","create",3,"Texture","Framebuffer","width","height","framebuffer","createFramebuffer","stencil","texture","enableTexture","framebufferTexture2D","FRAMEBUFFER","COLOR_ATTACHMENT0","TEXTURE_2D","enableStencil","createRenderbuffer","bindRenderbuffer","RENDERBUFFER","framebufferRenderbuffer","DEPTH_STENCIL_ATTACHMENT","renderbufferStorage","DEPTH_STENCIL","clear","b","clearColor","COLOR_BUFFER_BIT","bindFramebuffer","unbind","resize","uploadData","destroy","deleteFramebuffer","createRGBA","fromData","enableNearestScaling","enableWrapClamp","fbo","createFloat32","./GLTexture",4,"compileProgram","extractAttributes","extractUniforms","generateUniformAccessObject","Shader","vertexSrc","fragmentSrc","program","attributes","uniformData","uniforms","useProgram","./shader/compileProgram","./shader/extractAttributes","./shader/extractUniforms","./shader/generateUniformAccessObject",5,"format","createTexture","mipmap","premultiplyAlpha","RGBA","UNSIGNED_BYTE","source","pixelStorei","UNPACK_PREMULTIPLY_ALPHA_WEBGL","texImage2D","FLOATING_POINT_AVAILABLE","Float32Array","ext","getExtension","FLOAT","location","undefined","activeTexture","TEXTURE0","bindTexture","minFilter","linear","texParameteri","TEXTURE_MIN_FILTER","LINEAR_MIPMAP_LINEAR","NEAREST_MIPMAP_NEAREST","LINEAR","NEAREST","magFilter","TEXTURE_MAG_FILTER","enableMipmap","generateMipmap","enableLinearScaling","TEXTURE_WRAP_S","CLAMP_TO_EDGE","TEXTURE_WRAP_T","enableWrapRepeat","REPEAT","deleteTexture","fromSource",6,"nativeVaoExtension","nativeVao","createVertexArrayOES","indexBuffer","dirty","constructor","bindVertexArrayOES","activate","attrib","attribute","pointer","normalized","stride","start","enableVertexAttribArray","addAttribute","push","addIndex","options","draw","size","drawElements","UNSIGNED_SHORT",7,"CONTEXT_UID","canvas","getContext","id",8,"GL_MAP","attribs","maxAttribs","getParameter","MAX_VERTEX_ATTRIBS","tempAttribState","Array","attribState","disableVertexAttribArray",9,"glVertShader","compileShader","VERTEX_SHADER","glFragShader","FRAGMENT_SHADER","createProgram","attachShader","linkProgram","getProgramParameter","LINK_STATUS","console","error","VALIDATE_STATUS","getError","getProgramInfoLog","warn","deleteProgram","deleteShader","src","shader","createShader","shaderSource","getShaderParameter","COMPILE_STATUS","log","getShaderInfoLog",10,"defaultValue","Int32Array","booleanArray","array",11,"mapType","mapSize","totalAttributes","ACTIVE_ATTRIBUTES","attribData","getActiveAttrib","name","getAttribLocation","vertexAttribPointer","./mapSize","./mapType",12,"totalUniforms","ACTIVE_UNIFORMS","getActiveUniform","replace","getUniformLocation","value","./defaultValue",13,"uniformKeys","Object","keys","fullName","nameTokens","split","uniformGroup","getUniformGroup","uniform","defineProperty","get","generateGetter","set","generateSetter","template","getterTemplate","Function","setTemplate","setterTemplate","GLSL_TO_SINGLE_SETTERS","GLSL_TO_ARRAY_SETTERS","cur","join","float","vec2","vec3","vec4","int","ivec2","ivec3","ivec4","bool","bvec2","bvec3","bvec4","mat2","mat3","mat4","sampler2D",14,"GLSL_TO_SIZE",15,"GL_TABLE","typeNames","GL_TO_GLSL_TYPES","tn","FLOAT_VEC2","FLOAT_VEC3","FLOAT_VEC4","INT","INT_VEC2","INT_VEC3","INT_VEC4","BOOL","BOOL_VEC2","BOOL_VEC3","BOOL_VEC4","FLOAT_MAT2","FLOAT_MAT3","FLOAT_MAT4","SAMPLER_2D",16,"process","noop","identity","v","toBool","notId","only_once","fn","apply","arguments","_once","_isArrayLike","arr","_isArray","_arrayEach","iterator","index","_map","result","_range","count","_reduce","memo","x","_forEachOf","object","_keys","key","_indexOf","item","_keyIterator","coll","len","_restParam","func","startIndex","Math","max","rest","_withoutIndex","callback","_eachOfLimit","limit","obj","nextKey","done","running","errored","replenish","err","doParallel","async","eachOf","doParallelLimit","doSeries","eachOfSeries","_asyncMap","eachfn","results","_filter","sort","_reject","cb","_createTester","check","getResult","iteratee","_","_findGetResult","_parallel","tasks","task","args","_concat","y","concat","_queue","worker","concurrency","payload","_insert","q","pos","started","idle","setImmediate","drain","unshift","saturated","_next","workers","removed","workersList","splice","empty","paused","kill","pause","resume","resumeCount","min","w","_console_fn","_times","mapper","_applyEach","fns","go","that","pop","ensureAsync","innerArgs","sync","previous_async","root","noConflict","_toString","toString","isArray","_isObject","k","hasOwnProperty","_setImmediate","_delay","setTimeout","nextTick","forEach","each","forEachSeries","eachSeries","forEachLimit","eachLimit","forEachOf","completed","iter","forEachOfSeries","iterate","forEachOfLimit","eachOfLimit","map","mapSeries","mapLimit","inject","foldl","reduce","foldr","reduceRight","reversed","reverse","transform","select","filter","selectLimit","filterLimit","selectSeries","filterSeries","reject","rejectLimit","rejectSeries","any","some","someLimit","all","every","everyLimit","detect","detectSeries","detectLimit","sortBy","comparator","left","right","criteria","auto","addListener","listeners","removeListener","idx","taskComplete","remainingTasks","slice","runningTasks","ready","requires","listener","taskCallback","dep","safeResults","val","rkey","retry","times","parseTimes","acc","parseInt","DEFAULT_TIMES","interval","DEFAULT_INTERVAL","wrappedTask","wrappedCallback","wrappedResults","retryAttempt","finalAttempt","seriesCallback","retryInterval","opts","attempts","series","waterfall","wrapIterator","next","parallel","parallelLimit","makeCallback","callArgs","concatSeries","whilst","test","doWhilst","calls","until","doUntil","during","truth","doDuring","queue","items","priorityQueue","_compareTasks","priority","_binarySearch","sequence","compare","beg","end","mid","cargo","dir","memoize","hasher","queues","memoized","unmemoized","unmemoize","timesSeries","timesLimit","seq","newargs","nextargs","compose","applyEach","applyEachSeries","forever","constant","values","wrapSync","asyncify","then","message","_process",17,"normalizeArray","parts","allowAboveRoot","up","last","xs","res","splitPathRe","splitPath","filename","exec","resolve","resolvedPath","resolvedAbsolute","path","cwd","TypeError","charAt","p","normalize","isAbsolute","trailingSlash","substr","paths","relative","from","to","trim","fromParts","toParts","samePartsLength","outputParts","sep","delimiter","dirname","basename","extname","str",18,"cleanUpNextTick","draining","currentQueue","queueIndex","drainQueue","timeout","run","clearTimeout","Item","fun","title","browser","env","argv","version","versions","on","once","off","removeAllListeners","emit","binding","chdir","umask",19,"RangeError","errors","mapDomain","string","regexSeparators","labels","encoded","ucs2decode","extra","output","counter","charCodeAt","ucs2encode","stringFromCharCode","basicToDigit","codePoint","base","digitToBasic","digit","flag","adapt","delta","numPoints","firstTime","floor","damp","baseMinusTMin","tMax","skew","decode","input","out","basic","j","oldi","baseMinusT","inputLength","initialN","bias","initialBias","lastIndexOf","maxInt","tMin","encode","handledCPCount","basicLength","m","currentValue","handledCPCountPlusOne","qMinusT","toUnicode","regexPunycode","toLowerCase","toASCII","regexNonASCII","freeExports","nodeType","freeModule","freeGlobal","punycode","overflow","not-basic","invalid-input","String","fromCharCode","ucs2",20,"prop","qs","eq","regexp","maxKeys","kstr","vstr","indexOf","decodeURIComponent",21,"stringifyPrimitive","isFinite","objectKeys","ks","encodeURIComponent",22,"parse","stringify","./decode","./encode",23,"Url","protocol","slashes","auth","host","port","hostname","hash","search","query","pathname","href","urlParse","url","parseQueryString","slashesDenoteHost","isObject","urlFormat","isString","urlResolve","urlResolveObject","resolveObject","arg","isNull","isNullOrUndefined","protocolPattern","portPattern","delims","unwise","autoEscape","nonHostChars","hostEndingChars","hostnameMaxLen","hostnamePartPattern","hostnamePartStart","unsafeProtocol","javascript","javascript:","hostlessProtocol","slashedProtocol","http","https","ftp","gopher","file","http:","https:","ftp:","gopher:","file:","querystring","proto","lowerProto","match","hostEnd","hec","atSign","parseHost","ipv6Hostname","hostparts","part","newpart","validParts","notHost","bit","domainArray","newOut","h","ae","esc","escape","qm","rel","relPath","shift","isSourceAbs","isRelAbs","mustEndAbs","removeAllDots","srcPath","psychotic","authInHost","hasTrailingSlash",24,"earcut","holeIndices","dim","hasHoles","outerLen","outerNode","linkedList","triangles","minX","minY","maxX","maxY","eliminateHoles","earcutLinked","clockwise","sum","insertNode","filterPoints","again","steiner","equals","area","prev","removeNode","ear","pass","indexCurve","stop","isEarHashed","isEar","cureLocalIntersections","splitEarcut","c","pointInTriangle","minTX","minTY","maxTX","maxTY","minZ","zOrder","maxZ","nextZ","z","prevZ","intersects","locallyInside","isValidDiagonal","splitPolygon","list","getLeftmost","compareX","eliminateHole","hole","findHoleBridge","hx","hy","qx","Infinity","tan","tanMin","abs","sortLinked","tail","numMerges","pSize","qSize","inSize","leftmost","ax","ay","bx","by","cx","cy","px","py","intersectsPolygon","middleInside","p1","p2","q1","q2","inside","a2","Node","b2","an","bp",25,"EE","context","EventEmitter","prefix","_events","event","exists","evt","available","ee","a1","a3","a4","a5","events","setMaxListeners","prefixed",26,"toObject","propIsEnumerable","propertyIsEnumerable","assign","target","symbols","getOwnPropertySymbols",27,"called","_each","_eachLimit","_mapLimit","_detect","main_callback","theCallback","working","drained","ts","ds",28,"Loader","baseUrl","progress","loading","_progressChunk","_beforeMiddleware","_afterMiddleware","_boundLoadResource","_loadResource","_boundOnLoad","_onLoad","_buffer","_numToLoad","resources","urlParser","Resource","add","enqueue","onComplete","_handleBaseUrl","parsedUrl","before","pre","after","use","reset","load","resource","dequeue","_dequeue","_runMiddleware","_onComplete","LOAD_TYPE","XHR_READY_STATE","XHR_RESPONSE_TYPE","./Resource","eventemitter3",29,"isDataUrl","crossOrigin","loadType","_determineLoadType","xhrType","metadata","xhr","isJson","isXml","isImage","isAudio","isVideo","_boundComplete","complete","_boundOnError","_onError","_boundOnProgress","_onProgress","_boundXhrOnError","_xhrOnError","_boundXhrOnAbort","_xhrOnAbort","_boundXhrOnLoad","_xhrOnLoad","_boundXdrOnTimeout","_xdrOnTimeout","reqType","setExtMap","substring","_url","useXdr","XDomainRequest","XMLHttpRequest","tempAnchor","removeEventListener","onerror","ontimeout","onprogress","onload","_determineCrossOrigin","IMAGE","_loadImage","AUDIO","_loadElement","VIDEO","XHR","_loadXdr","_loadXhr","Image","addEventListener","Audio","document","createElement","navigator","isCocoonJS","appendChild","_createSource","toUpperCase","_determineXhrType","open","JSON","DOCUMENT","responseType","TEXT","send","xdr","mime","nodeName","lengthComputable","loaded","total","status","statusText","responseText","DOMParser","domparser","parseFromString","div","innerHTML","response","responseURL","loc","samePort","_xhrTypeMap","_getExtension","_loadTypeMap","slashIndex","queryStart","_getMimeFromXhrType","BUFFER","BLOB","DEFAULT","UNSENT","OPENED","HEADERS_RECEIVED","LOADING","DONE","gif","png","bmp","jpg","jpeg","tif","tiff","webp","tga","xhtml","html","htm","xml","tmx","tsx","svg","json","text","txt","setExtensionLoadType","setExtensionXhrType",30,"_keyStr","encodeBinary","bytebuffer","encodedCharIndexes","inx","jnx","paddingBytes",31,"middleware","caching","memory","parsing","blob","./Loader","./middlewares/caching/memory","./middlewares/parsing/blob",32,"cache",33,"b64","URL","webkitURL","Blob","createObjectURL","revokeObjectURL","getResponseHeader","../../Resource","../../b64",34,"description","author","contributors","main","homepage","bugs","license","repository","scripts","build","docs","files","dependencies","brfs","object-assign","pixi-gl-core","resource-loader","devDependencies","browserify","chai","del","gulp","gulp-cached","gulp-concat","gulp-debug","gulp-header","gulp-jshint","gulp-mirror","gulp-plumber","gulp-rename","gulp-sourcemaps","gulp-uglify","gulp-util","jaguarjs-jsdoc","jsdoc","jshint-summary","minimist","mocha","require-dir","run-sequence","testem","vinyl-buffer","vinyl-source-stream","watchify",35,"AccessibilityManager","renderer","style","position","top","zIndex","pool","renderId","debug","children","_onKeyDown","_onMouseMove","isActive","core","DisplayObject","update","view","parentNode","deactivate","removeChild","updateAccessibleObjects","displayObject","visible","accessible","interactive","_accessibleActive","addChild","_lastObjectRendered","rect","getBoundingClientRect","sx","sy","child","utils","removeItems","_accessibleDiv","hitArea","wt","worldTransform","tx","ty","d","getBounds","capHitArea","backgroundColor","borderStyle","_onClick","_onFocus","_onFocusOut","accessibleTitle","tabIndex","interactionManager","plugins","interaction","dispatchEvent","eventData","keyCode","WebGLRenderer","registerPlugin","CanvasRenderer","../core","./accessibleTarget",36,"accessibleTarget",37,"./AccessibilityManager",38,"CONST","VERSION","PI_2","PI","RAD_TO_DEG","DEG_TO_RAD","TARGET_FPMS","RENDERER_TYPE","UNKNOWN","WEBGL","CANVAS","BLEND_MODES","NORMAL","ADD","MULTIPLY","SCREEN","OVERLAY","DARKEN","LIGHTEN","COLOR_DODGE","COLOR_BURN","HARD_LIGHT","SOFT_LIGHT","DIFFERENCE","EXCLUSION","HUE","SATURATION","COLOR","LUMINOSITY","DRAW_MODES","POINTS","LINES","LINE_LOOP","LINE_STRIP","TRIANGLES","TRIANGLE_STRIP","TRIANGLE_FAN","SCALE_MODES","RETINA_PREFIX","RESOLUTION","FILTER_RESOLUTION","DEFAULT_RENDER_OPTIONS","resolution","antialias","forceFXAA","autoResize","transparent","clearBeforeRender","preserveDrawingBuffer","roundPixels","SHAPES","POLY","RECT","CIRC","ELIP","RREC","SPRITE_BATCH_SIZE","../../package.json",39,"Container","math","RenderTexture","_tempMatrix","Matrix","defineProperties","scale","getLocalBounds","_width","_height","onChildrenChange","argumentsLength","parent","addChildAt","swapChildren","child2","index1","getChildIndex","index2","setChildIndex","currentIndex","getChildAt","removeChildAt","removeChildren","beginIndex","endIndex","begin","range","generateTexture","scaleMode","bounds","renderTexture","render","updateTransform","displayObjectUpdateTransform","dirtyTransform","containerUpdateTransform","_currentBounds","Rectangle","EMPTY","childBounds","childMaxX","childMaxY","childVisible","_bounds","containerGetBounds","matrixCache","IDENTITY","renderWebGL","worldAlpha","renderable","_mask","_filters","currentRenderer","flush","filterManager","pushFilter","maskManager","pushMask","_renderWebGL","popMask","popFilter","_renderCanvas","renderCanvas","alpha","destroyChildren","../math","../textures/RenderTexture","../utils","./DisplayObject",40,"Point","_position","CachePoint","pivot","_rotation","localTransform","filterArea","_sr","_cr","_tempDisplayObjectParent","doc","posiiton","scaleX","scaleY","rotation","sin","cos","worldVisible","mask","filters","pt","lt","matrix","toGlobal","toLocal","point","applyInverse","setParent","container","setTransform","skewX","skewY","pivotX","pivotY","../const",41,"Graphics","fillAlpha","lineWidth","lineColor","graphicsData","tint","_prevTint","blendMode","currentPath","_webGL","isMask","boundsPadding","_localBounds","glDirty","boundsDirty","cachedSpriteDirty","CanvasBuffer","CanvasGraphics","GraphicsData","tempPoint","clone","updateLocalBounds","lineStyle","color","lineAlpha","shape","points","Polygon","closed","drawShape","moveTo","lineTo","quadraticCurveTo","cpX","cpY","toX","toY","xa","ya","fromX","fromY","bezierCurveTo","cpX2","cpY2","dt","dt2","dt3","t2","t3","arcTo","x1","y1","x2","y2","radius","b1","mm","dd","cc","tt","k1","sqrt","k2","j1","j2","qy","startAngle","atan2","endAngle","arc","anticlockwise","sweep","segs","ceil","startX","startY","theta","theta2","cTheta","sTheta","segMinus","remainder","real","angle","beginFill","filling","fillColor","fill","endFill","drawRect","drawRoundedRect","RoundedRectangle","drawCircle","Circle","drawEllipse","Ellipse","drawPolygon","clearDirty","canvasBuffer","fromCanvas","baseTexture","translate","renderGraphics","setObjectRenderer","graphics","compositeOperation","blendModes","globalCompositeOperation","w0","w1","h0","h1","x3","y3","x4","y4","containsPoint","contains","padding","_webgl","../display/Container","../renderers/canvas/utils/CanvasBuffer","../renderers/canvas/utils/CanvasGraphics","../textures/Texture","./GraphicsData",42,"_lineTint","_fillTint",43,"GraphicsRenderer","ObjectRenderer","graphicsDataPool","primitiveShader","complexPrimitiveShader","maximumSimplePolySize","WebGLGraphicsData","PrimitiveShader","buildLine","buildPoly","buildComplexPoly","buildRectangle","buildRoundedRectangle","buildCircle","onContextChange","webGLData","updateGraphics","webGL","blendModeManager","setBlendMode","mode","bindShader","translationMatrix","toArray","hex2rgb","aVertexPosition","aColor","indices","drawCount","lastIndex","switchMode","canDrawUsingSimple","../../const","../../math","../../renderers/webgl/WebGLRenderer","../../renderers/webgl/utils/ObjectRenderer","../../utils","./WebGLGraphicsData","./shaders/PrimitiveShader","./utils/buildCircle","./utils/buildComplexPoly","./utils/buildLine","./utils/buildPoly","./utils/buildRectangle","./utils/buildRoundedRectangle",44,"glPoints","glIndices","Uint16Array","deleteBuffer",45,46,"circleData","totalSegs","seg","verts","vecPos","tempPoints","../../../utils","./buildLine",47,48,"firstPoint","lastPoint","midPointX","midPointY","p1x","p1y","p2x","p2y","p3x","p3y","perpx","perpy","perp2x","perp2y","perp3x","perp3y","c1","c2","denom","pdist","dist","indexCount","indexStart","../../../math",49,"vertPos",50,"rectData",51,"rrectData","recPoints","quadraticBezierCurve","getPt","n1","n2","perc","diff","xb","yb",52,"ticker","Sprite","ParticleContainer","SpriteRenderer","ParticleRenderer","Text","BaseTexture","VideoBaseTexture","TextureUvs","WebGLManager","ShaderManager","RenderTarget","AbstractFilter","FXAAFilter","SpriteMaskFilter","glCore","autoDetectRenderer","noWebGL","isWebGLSupported","./const","./display/Container","./display/DisplayObject","./graphics/Graphics","./graphics/GraphicsData","./graphics/webgl/GraphicsRenderer","./math","./particles/ParticleContainer","./particles/webgl/ParticleRenderer","./renderers/canvas/CanvasRenderer","./renderers/canvas/utils/CanvasBuffer","./renderers/canvas/utils/CanvasGraphics","./renderers/webgl/WebGLRenderer","./renderers/webgl/filters/AbstractFilter","./renderers/webgl/filters/FXAAFilter","./renderers/webgl/filters/SpriteMaskFilter","./renderers/webgl/managers/ShaderManager","./renderers/webgl/managers/WebGLManager","./renderers/webgl/shaders/Shader","./renderers/webgl/utils/ObjectRenderer","./renderers/webgl/utils/RenderTarget","./sprites/Sprite","./sprites/webgl/SpriteRenderer","./text/Text","./textures/BaseTexture","./textures/RenderTexture","./textures/Texture","./textures/TextureUvs","./textures/VideoBaseTexture","./ticker","./utils",53,"fromArray","transpose","newPos","rotate","tx1","append","d1","sr","cr","nsx","prepend","invert","copy","TEMP_MATRIX","./Point",54,55,"./Matrix","./shapes/Circle","./shapes/Ellipse","./shapes/Polygon","./shapes/Rectangle","./shapes/RoundedRectangle",56,"dx","dy","r2","./Rectangle",57,"normx","normy",58,"points_","il","xi","yi","xj","yj","intersect","../Point",59,60,61,"maxSize","properties","batchSize","maxBatchSize","_properties","_maxSize","_batchSize","_buffers","_bufferToUpdate","interactiveChildren","setProperties","uvs","particle","smallestChildIndex","bufferIndex","isRotated","positionX","positionY","finalWidth","finalHeight","globalAlpha","frame","anchor","childTransform","drawImage",62,"ParticleBuffer","dynamicPropertyFlags","vertSize","vertByteSize","dynamicProperties","staticProperties","property","staticStride","staticBuffer","staticData","dynamicStride","dynamicBuffer","dynamicData","initBuffers","dynamicOffset","DYNAMIC_DRAW","staticOffset","uploadDynamic","amount","uploadFunction","uploadStatic",63,"numIndices","tempMatrix","ParticleShader","shaderManager","uploadVertices","aPositionCoord","uploadPosition","aRotation","uploadRotation","aTextureCoord","uploadUvs","uploadAlpha","setShader","totalChildren","generateBuffers","currentRenderTarget","projectionMatrix","uniformMatrix3fv","_location","uniform1f","uAlpha","_texture","_glTextures","updateTexture","buffers","sprite","crop","_frame","spritePosition","spriteRotation","textureUvs","_uvs","x0","y0","spriteAlpha","./ParticleBuffer","./ParticleShader",64,"TextureShader","../../renderers/webgl/shaders/TextureShader",65,"SystemRenderer","system","sayHello","_backgroundColor","_backgroundColorRgba","_backgroundColorString","hex2string","removeView",66,"refresh","CanvasMaskManager","smoothProperty","imageSmoothingEnabled","webkitImageSmoothingEnabled","mozImageSmoothingEnabled","oImageSmoothingEnabled","msImageSmoothingEnabled","initPlugins","_mapBlendModes","pluginTarget","mixin","cacheParent","screencanvas","fillStyle","clearRect","fillRect","renderDisplayObject","destroyPlugins","tempContext","canUseNewCanvasBlendModes","../SystemRenderer","./utils/CanvasMaskManager",67,68,"updateGraphicsTint","beginPath","closePath","strokeStyle","stroke","strokeRect","kappa","ox","oy","xe","ye","xm","ym","rx","ry","maxRadius","renderGraphicsMask","tintR","tintG","tintB","../../../const",69,"maskData","save","cacheAlpha","clip","restore","./CanvasGraphics",70,"CanvasTinter","getTintedTexture","roundColor","stringColor","tintCache","tintMethod","convertTintToImage","tintImage","toDataURL","tintWithMultiply","tintWithOverlay","tintWithPerPixel","rgbValues","pixelData","getImageData","pixels","putImageData","step","cacheStepsPerColorChannel","rgb2hex","canUseMultiply",71,"TextureManager","_managedTextures","glTextures","getTexture","hasLoaded","glTexture","uid","destroyTexture","_skipRemove","removeAll",72,"handleContextLost","handleContextRestored","_contextOptions","premultipliedAlpha","MaskManager","stencilManager","StencilManager","FilterManager","BlendModeManager","_initContext","mapWebGLBlendModesToPixi","drawModes","mapWebGLDrawModesToPixi","_activeShader","_activeRenderTarget","_activeTextureLocation","_activeTexture","textureManager","disable","DEPTH_TEST","CULL_FACE","enable","BLEND","rootRenderTarget","bindRenderTarget","isContextLost","renderTarget","setFilterStack","filterStack","objectRenderer","setMaskStack","stencilMaskStack","preventDefault","destroyAll","./TextureManager","./filters/FXAAFilter","./managers/BlendModeManager","./managers/FilterManager","./managers/MaskManager","./managers/ShaderManager","./managers/StencilManager","./utils/ObjectRenderer","./utils/RenderTarget","./utils/mapWebGLBlendModesToPixi","./utils/mapWebGLDrawModesToPixi",73,"shaders","DefaultShader","defaultVertexSrc","defaultFragmentSrc","getShader","applyFilter","syncUniform","../shaders/TextureShader",74,"./AbstractFilter",75,"maskMatrix","otherMatrix","maskSprite","calculateMappedMatrix",76,"currentBlendMode","blendFunc","./WebGLManager",77,"texturePool","textureSize","currentFrame","Quad","quad","capFilterArea","getRenderTarget","setRenderTarget","filterData","previousFilterData","vertexBuffer","defaultShader","dimensions","vertices","returnRenderTarget","flipTexture","flopTexture","temp","inputTarget","outputTarget","syncUniforms","outputMatrix","mappedMatrix","ratio","translateScaleX","translateScaleY","offsetY","../utils/Quad","../utils/RenderTarget",78,"stencilStack","alphaMaskPool","AlphaMaskFilter","pushSpriteMask","pushStencilMask","popSpriteMask","popStencilMask","alphaMaskFilter","../filters/SpriteMaskFilter",79,"maxAttibs","stack","_currentId","currentShader","ComplexPrimitiveShader","setAttribs","../shaders/ComplexPrimitiveShader","../shaders/PrimitiveShader",80,"WebGLMaskManager","STENCIL_TEST","pushStencil","attachStencilBuffer","sms","bindGraphics","STENCIL_BUFFER_BIT","level","colorMask","stencilFunc","ALWAYS","stencilOp","KEEP","INVERT","EQUAL","DECR","INCR","popStencil",81,82,"./Shader",83,84,"textureCount","init","compile","cacheUniformLocations","cacheAttributeLocations","_glCompile","uniform1i","uniform2f","uniform3f","uniform4f","uniform1iv","uniform2iv","uniform3iv","uniform4iv","uniform1fv","uniform2fv","uniform3fv","uniform4fv","uniformMatrix2fv","uniformMatrix4fv","_array","initSampler2D","textureData","luminance","LUMINANCE","wrapS","wrapT",85,"customUniforms","customAttributes","uSampler",86,87,"../managers/WebGLManager",88,"colors","rect2",89,"StencilMaskStack","frameBuffer","stencilBuffer","projectionFrame","calculateProjection","viewport","pm","./StencilMaskStack",90,91,"ONE","ONE_MINUS_SRC_ALPHA","SRC_ALPHA","DST_ALPHA","DST_COLOR",92,93,"cachedTint","textureDirty","vertexDirty","vertexData","sign","_onTextureUpdate","caclulateVertices","valid","smoothingEnabled","tintedTexture","destroyBaseTexture","fromFrame","frameId","TextureCache","fromImage","imageId","crossorigin","../renderers/canvas/utils/CanvasTinter",94,"numVerts","positions","Uint32Array","createIndicesForQuads","groupCount","groups","textures","ids","blend","currentGroup","currentTexture","generateMultiTextureShader","MAX_TEXTUES","MAX_TEXTURE_IMAGE_UNITS","_shader","vao","aTextureId","nextTexture","_enabled","_id","uvs_uint32","currentBatchSize","subarray","group","sprites","../../renderers/webgl/shaders/_TextureShader","../../utils/createIndicesForQuads","./generateMultiTextureShader",95,"maxTextures","generateSampleSrc","fragTemplate","sampleValues","uSamplers",96,"_text","_style","fontPropertiesCache","fontPropertiesCanvas","fontPropertiesContext","updateText","dropShadowColor","font","align","strokeThickness","wordWrap","wordWrapWidth","dropShadow","dropShadowAngle","dropShadowDistance","dropShadowBlur","textBaseline","lineJoin","miterLimit","outputText","lines","lineWidths","maxLineWidth","fontProperties","determineFontProperties","measureText","lineHeight","fontSize","linePositionX","linePositionY","shadowColor","shadowBlur","xShadowOffset","yShadowOffset","ascent","fillText","strokeText","fontStyle","baseline","imagedata","line","descent","spaceLeft","words","wordWidth","wordWidthWithSpace","../sprites/Sprite",97,"realWidth","realHeight","isLoading","imageUrl","isPowerOfTwo","_active","loadSource","naturalWidth","naturalHeight","wasLoading","_sourceLoaded","scope","BaseTextureCache","_pixiId","dispose","updateSourceImage","newSrc","image","getResolutionOfUrl",98,"textureBuffer","_updateUvs","updateBase","currentBounds","cachedWt","realResolution","getImage","getBase64","getCanvas","webGLPixels","Uint8Array","readPixels","tempCanvas","canvasData","getPixels","getPixel","../renderers/webgl/managers/FilterManager","../renderers/webgl/utils/RenderTarget","./BaseTexture","./Texture",99,"noFrame","requiresUpdate","onBaseTextureUpdated","onBaseTextureLoaded","destroyBase","fromVideo","video","fromVideoUrl","videoUrl","fromUrl","addTextureToCache","removeTextureFromCache","./TextureUvs","./VideoBaseTexture",100,"xy0_uint32","xy1_uint32","xy2_uint32","xy3_uint32","baseFrame","tw","th",101,"readyState","HAVE_ENOUGH_DATA","HAVE_FUTURE_DATA","autoUpdate","_onUpdate","_onCanPlay","_onPlayStart","_onPlayStop","__loaded","createSource","requestAnimationFrame","videoWidth","videoHeight","play","videoSrc","fromUrls",102,"Ticker","_this","_tick","time","_requestId","_emitter","TICK","_maxElapsedMS","autoStart","deltaTime","elapsedMS","lastTime","speed","FPS","minFPS","fps","minFPMS","_requestIfNeeded","performance","now","_cancelIfNeeded","cancelAnimationFrame","_startIfPossible","addOnce","remove","currentTime",103,"shared","./Ticker",104,"totalIndices",105,"_uid","_saidHello","hex","rgb","pngHead","pngEnd","magenta","yellow","getNextPowerOfTwo","number","parseFloat","userAgent","contextOptions","WebGLRenderingContext","getContextAttributes","startIdx","removeCount","./pluginTarget",106,"__plugins","pluginName","ctor",107,"mesh","extras","SpriteBatch","ReferenceError","AssetLoader","Stage","DisplayObjectContainer","Strip","Mesh","Rope","MovieClip","TilingSprite","BitmapText","scaleModes","setTexture","setText","setStyle","setFrame","uuid","./core","./extras","./filters","./mesh",108,"textWidth","textHeight","_glyphs","_font","maxWidth","maxLineHeight","fonts","prevCharCode","chars","lastLineWidth","lastSpace","charCode","charData","kerning","xOffset","yOffset","xAdvance","lineAlignOffsets","alignOffset","lenChars","validate",109,"_textures","_durations","animationSpeed","loop","_currentTime","playing","totalFrames","gotoAndStop","frameNumber","gotoAndPlay","elapsed","lag","fromFrames","frames","fromImages","images",110,"tileScale","tilePosition","_canvasPattern","uFrame","uTransform","uPixelSize","tempUvs","tempWidth","tempHeight","modX","modY","createPattern","_tileScaleOffset","../core/renderers/canvas/utils/CanvasTinter",111,"_cacheAsBitmap","_originalRenderWebGL","_originalRenderCanvas","_originalUpdateTransform","_originalHitTest","_originalDestroy","_cachedSprite","cacheAsBitmap","_originalGetBounds","_originalContainsPoint","_renderCachedWebGL","_renderCachedCanvas","_cacheAsBitmapDestroy","_destroyCachedDisplayObject","_initCachedDisplayObject","cachedRenderTarget","_getCachedBounds","_initCachedDisplayObjectCanvas",112,"getChildByName",113,"getGlobalPosition",114,"./BitmapText","./MovieClip","./TilingSprite","./cacheAsBitmap","./getChildByName","./getGlobalPosition",115,"AsciiFilter","pixelSize","../../core",116,"BloomFilter","blurXFilter","BlurXFilter","blurYFilter","BlurYFilter","defaultFilter","blur","blurX","blurY","../blur/BlurXFilter","../blur/BlurYFilter",117,"BlurDirFilter","dirX","dirY","strength","passes",118,"BlurFilter","./BlurXFilter","./BlurYFilter",119,"flip","flop",120,121,"SmartBlurFilter",122,"ColorMatrixFilter","_loadMatrix","multiply","newMatrix","_multiply","_colorMatrix","brightness","greyscale","grayscale","blackAndWhite","hue","lumR","lumG","lumB","contrast","saturate","desaturate","negative","sepia","technicolor","polaroid","toBGR","kodachrome","browni","vintage","colorTone","desaturation","toned","lightColor","darkColor","lR","lG","lB","dR","dG","dB","night","intensity","predator","lsd",123,"ColorStepFilter",124,"ConvolutionFilter","texelSize",125,"CrossHatchFilter",126,"DisplacementFilter","mapSampler",127,"DotScreenFilter",128,"BlurYTintFilter",129,"DropShadowFilter","blurYTintFilter","_dirtyPosition","_angle","_distance","hideObject","distance","./BlurYTintFilter",130,"GrayFilter","gray",131,"InvertFilter","NoiseFilter","PixelateFilter","RGBSplitFilter","ShockwaveFilter","SepiaFilter","TiltShiftFilter","TiltShiftXFilter","TiltShiftYFilter","TwistFilter","./ascii/AsciiFilter","./bloom/BloomFilter","./blur/BlurDirFilter","./blur/BlurFilter","./blur/BlurXFilter","./blur/BlurYFilter","./blur/SmartBlurFilter","./color/ColorMatrixFilter","./color/ColorStepFilter","./convolution/ConvolutionFilter","./crosshatch/CrossHatchFilter","./displacement/DisplacementFilter","./dot/DotScreenFilter","./dropshadow/DropShadowFilter","./gray/GrayFilter","./invert/InvertFilter","./noise/NoiseFilter","./pixelate/PixelateFilter","./rgb/RGBSplitFilter","./sepia/SepiaFilter","./shockwave/ShockwaveFilter","./tiltshift/TiltShiftFilter","./tiltshift/TiltShiftXFilter","./tiltshift/TiltShiftYFilter","./twist/TwistFilter",132,133,"noise",134,135,"red","green","blue",136,137,"center","params",138,"TiltShiftAxisFilter","gradientBlur","innerHeight","texSize","innerWidth","updateDelta",139,"tiltShiftXFilter","tiltShiftYFilter","./TiltShiftXFilter","./TiltShiftYFilter",140,"./TiltShiftAxisFilter",141,142,143,"loaders","accessibility","loader","./accessibility","./deprecation","./interaction","./loaders","./polyfill",144,"InteractionData","originalEvent","getLocalPosition","globalPos",145,"InteractionManager","autoPreventDefault","interactionFrequency","mouse","stopped","stopPropagation","interactiveDataPool","interactionDOMElement","eventsAdded","onMouseUp","processMouseUp","onMouseDown","processMouseDown","onMouseMove","processMouseMove","onMouseOut","processMouseOverOut","onTouchStart","processTouchStart","onTouchEnd","processTouchEnd","onTouchMove","processTouchMove","currentCursorStyle","_tempPoint","setTargetElement","element","removeEvents","addEvents","msPointerEnabled","_deltaTime","didMove","cursor","processInteractive","eventString","mapPositionToPoint","hitTest","hit","interactiveParent","clientX","clientY","isRightButton","button","which","isDown","_over","buttonMode","defaultCursor","changedTouches","cLength","touchEvent","touchData","getTouchData","returnTouchData","_touchDown","identifier","globalX","globalY","./InteractionData","./interactiveTarget",146,"interactiveTarget","./InteractionManager",147,148,"info","getElementsByTagName","common","getAttribute","letters","textureRect","kernings","first","second","bitmapFont","xmlUrl","textureUrl","loadOptions","imageMetadata","../extras",149,"bitmapFontParser","spritesheetParser","textureParser","./bitmapFontParser","./loader","./spritesheetParser","./textureParser",150,"ResourceLoader","_pixiMiddleware","addPixiMiddleware",151,"route","meta","rotated","trimmed","spriteSourceSize","sourceSize",152,153,"drawMode","canvasPadding","TRIANGLE_MESH","tempPolygon","_renderCanvasTriangleMesh","_renderCanvasTriangles","_renderCanvasDrawTriangle","index0","textureSource","textureWidth","textureHeight","u0","u1","u2","v0","v1","v2","paddingX","paddingY","centerX","centerY","normX","normY","deltaA","deltaB","deltaC","deltaD","deltaE","deltaF","renderMeshFlat","updateFrame","rawX","rawY","ind0","ind1","ind2",154,"Plane","segmentsX","segmentsY","_ready","segmentsXSub","segmentsYSub","sizeX","sizeY","totalSub","xpos","ypos","value2","value3","value4","./Mesh",155,"factor","nextPoint","perpLength","num","perpX","perpY",156,"MeshRenderer","MeshShader","./Plane","./Rope","./webgl/MeshRenderer","./webgl/MeshShader",157,"_vertexBuffer","_initWebGL","meshShader","_uvBuffer","_indexBuffer","_colorBuffer","../Mesh",158,159,"isNaN",160,161,"./Math.sign","./Object.assign","./requestAnimationFrame",162,"Date","getTime","startTime","vendors","delay"],"mappings":"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E,EAAA,GAAAuE,EAAA,GAAAvE,EAAA,GAAAuE,EAAA,IAAAvE,EAAA,GAAAuE,EAAA,IACAwkB,EAAA,GAAA/oB,EAAA,GAAAuE,EAAA,GAAAvE,EAAA,GAAAuE,EAAA,GAAAvE,EAAA,GAAAuE,EAAA,IAAAvE,EAAA,GAAAuE,EAAA,IACAwkB,EAAA,GAAA/oB,EAAA,GAAAuE,EAAA,GAAAvE,EAAA,GAAAuE,EAAA,GAAAvE,EAAA,GAAAuE,EAAA,IAAAvE,EAAA,GAAAuE,EAAA,IAGAwkB,EAAA,GAAA/oB,EAAA,GAAAuE,EAAA,GAAAvE,EAAA,GAAAuE,EAAA,GAAAvE,EAAA,GAAAuE,EAAA,IAAAvE,EAAA,GAAAuE,EAAA,IACAwkB,EAAA,GAAA/oB,EAAA,GAAAuE,EAAA,GAAAvE,EAAA,GAAAuE,EAAA,GAAAvE,EAAA,GAAAuE,EAAA,IAAAvE,EAAA,GAAAuE,EAAA,IACAwkB,EAAA,GAAA/oB,EAAA,GAAAuE,EAAA,GAAAvE,EAAA,GAAAuE,EAAA,GAAAvE,EAAA,GAAAuE,EAAA,IAAAvE,EAAA,GAAAuE,EAAA,IACAwkB,EAAA,GAAA/oB,EAAA,GAAAuE,EAAA,GAAAvE,EAAA,GAAAuE,EAAA,GAAAvE,EAAA,GAAAuE,EAAA,IAAAvE,EAAA,GAAAuE,EAAA,IACAwkB,EAAA,GAAA/oB,EAAA,GAAAuE,EAAA,GAAAvE,EAAA,GAAAuE,EAAA,GAAAvE,EAAA,GAAAuE,EAAA,IAAAvE,EAAA,GAAAuE,EAAA,IAGAwkB,EAAA,IAAA/oB,EAAA,IAAAuE,EAAA,GAAAvE,EAAA,IAAAuE,EAAA,GAAAvE,EAAA,IAAAuE,EAAA,IAAAvE,EAAA,IAAAuE,EAAA,IACAwkB,EAAA,IAAA/oB,EAAA,IAAAuE,EAAA,GAAAvE,EAAA,IAAAuE,EAAA,GAAAvE,EAAA,IAAAuE,EAAA,IAAAvE,EAAA,IAAAuE,EAAA,IACAwkB,EAAA,IAAA/oB,EAAA,IAAAuE,EAAA,GAAAvE,EAAA,IAAAuE,EAAA,GAAAvE,EAAA,IAAAuE,EAAA,IAAAvE,EAAA,IAAAuE,EAAA,IACAwkB,EAAA,IAAA/oB,EAAA,IAAAuE,EAAA,GAAAvE,EAAA,IAAAuE,EAAA,GAAAvE,EAAA,IAAAuE,EAAA,IAAAvE,EAAA,IAAAuE,EAAA,IACAwkB,EAAA,IAAA/oB,EAAA,IAAAuE,EAAA,GAAAvE,EAAA,IAAAuE,EAAA,GAAAvE,EAAA,IAAAuE,EAAA,IAAAvE,EAAA,IAAAuE,EAAA,IAGAwkB,EAAA,IAAA/oB,EAAA,IAAAuE,EAAA,GAAAvE,EAAA,IAAAuE,EAAA,GAAAvE,EAAA,IAAAuE,EAAA,IAAAvE,EAAA,IAAAuE,EAAA,IACAwkB,EAAA,IAAA/oB,EAAA,IAAAuE,EAAA,GAAAvE,EAAA,IAAAuE,EAAA,GAAAvE,EAAA,IAAAuE,EAAA,IAAAvE,EAAA,IAAAuE,EAAA,IACAwkB,EAAA,IAAA/oB,EAAA,IAAAuE,EAAA,GAAAvE,EAAA,IAAAuE,EAAA,GAAAvE,EAAA,IAAAuE,EAAA,IAAAvE,EAAA,IAAAuE,EAAA,IACAwkB,EAAA,IAAA/oB,EAAA,IAAAuE,EAAA,GAAAvE,EAAA,IAAAuE,EAAA,GAAAvE,EAAA,IAAAuE,EAAA,IAAAvE,EAAA,IAAAuE,EAAA,IACAwkB,EAAA,IAAA/oB,EAAA,IAAAuE,EAAA,GAAAvE,EAAA,IAAAuE,EAAA,GAAAvE,EAAA,IAAAuE,EAAA,IAAAvE,EAAA,IAAAuE,EAAA,IAEAwkB,GASAqxD,EAAAh4E,UAAAq4E,aAAA,SAAA5kC,GAGA,GAAA/rB,GAAA,GAAA1iB,cAAAyuC,EAMA,OALA/rB,GAAA,IAAA,IACAA,EAAA,IAAA,IACAA,EAAA,KAAA,IACAA,EAAA,KAAA,IAEAA,GASAswD,EAAAh4E,UAAAs4E,WAAA,SAAAn2E,EAAA+1E,GAEA,GAAAzkC,IACAtxC,EAAA,EAAA,EAAA,EAAA,EACA,EAAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAGAhF,MAAA86E,YAAAxkC,EAAAykC,IASAF,EAAAh4E,UAAAu4E,UAAA,SAAArqC,EAAAgqC,GAEA,GAAAzkC,IACAvF,EAAAA,EAAAA,EAAA,EAAA,EACAA,EAAAA,EAAAA,EAAA,EAAA,EACAA,EAAAA,EAAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAGA/wC,MAAA86E,YAAAxkC,EAAAykC,IAGAF,EAAAh4E,UAAAw4E,UAAAR,EAAAh4E,UAAAu4E,UAQAP,EAAAh4E,UAAAy4E,cAAA,SAAAP,GAEA,GAAAzkC,IACA,GAAA,GAAA,GAAA,EAAA,EACA,GAAA,GAAA,GAAA,EAAA,EACA,GAAA,GAAA,GAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAGAt2C,MAAA86E,YAAAxkC,EAAAykC,IASAF,EAAAh4E,UAAA04E,IAAA,SAAAzlC,EAAAilC,GAEAjlC,GAAAA,GAAA,GAAA,IAAAtgC,KAAAy3B,EACA,IAAA+I,GAAAxgC,KAAAwgC,IAAAF,GACAC,EAAAvgC,KAAAugC,IAAAD,GAGA0lC,EAAA,KACAC,EAAA,KACAC,EAAA,KAEAplC,GACAklC,EAAAxlC,GAAA,EAAAwlC,GAAAzlC,GAAAylC,EAAAC,EAAAzlC,GAAAylC,EAAA1lC,GAAA0lC,EAAAC,EAAA1lC,GAAA0lC,EAAA3lC,GAAA,EAAA2lC,GAAA,EAAA,EACAF,EAAAxlC,GAAAwlC,EAAA,KAAAzlC,EAAA0lC,EAAAzlC,GAAA,EAAAylC,GAAA,IAAA1lC,EAAA2lC,EAAA1lC,GAAA0lC,EAAA3lC,GAAA,KAAA,EAAA,EACAylC,EAAAxlC,GAAAwlC,EAAAzlC,IAAA,EAAAylC,GAAAC,EAAAzlC,GAAAylC,EAAA1lC,EAAA,EAAA2lC,EAAA1lC,GAAA,EAAA0lC,GAAA3lC,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAGA/1C,MAAA86E,YAAAxkC,EAAAykC,IAYAF,EAAAh4E,UAAA84E,SAAA,SAAAttB,EAAA0sB,GAEA,GAAAxnE,IAAA86C,GAAA,GAAA,EACA9tD,EAAA,MAAAgT,EAAA,GAEA+iC,GACA/iC,EAAA,EAAA,EAAA,EAAAhT,EACA,EAAAgT,EAAA,EAAA,EAAAhT,EACA,EAAA,EAAAgT,EAAA,EAAAhT,EACA,EAAA,EAAA,EAAA,EAAA,EAGAP,MAAA86E,YAAAxkC,EAAAykC,IAUAF,EAAAh4E,UAAA+4E,SAAA,SAAAvtB,EAAA0sB,GAEA,GAAApmE,GAAA,GAAA05C,GAAA,GAAA,EAAA,EACAv2C,GAAAnD,EAAA,IAAA,GAEA2hC,GACA3hC,EAAAmD,EAAAA,EAAA,EAAA,EACAA,EAAAnD,EAAAmD,EAAA,EAAA,EACAA,EAAAA,EAAAnD,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAGA3U,MAAA86E,YAAAxkC,EAAAykC,IAUAF,EAAAh4E,UAAAg5E,WAAA,SAAAd,GAEA/6E,KAAA47E,SAAA,KAQAf,EAAAh4E,UAAAi5E,SAAA,SAAAf,GAEA,GAAAzkC,IACA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAGAt2C,MAAA86E,YAAAxkC,EAAAykC,IAQAF,EAAAh4E,UAAAk5E,MAAA,SAAAhB,GAEA,GAAAzkC,IACA,KAAA,SAAA,UAAA,EAAA,EACA,KAAA,SAAA,UAAA,EAAA,EACA,KAAA,SAAA,UAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAGAt2C,MAAA86E,YAAAxkC,EAAAykC,IAQAF,EAAAh4E,UAAAm5E,YAAA,SAAAjB,GAEA,GAAAzkC,IACA,oBAAA,mBAAA,mBAAA,EAAA,oBACA,kBAAA,oBAAA,mBAAA,EAAA,oBACA,kBAAA,kBAAA,kBAAA,EAAA,mBACA,EAAA,EAAA,EAAA,EAAA,EAGAt2C,MAAA86E,YAAAxkC,EAAAykC,IAQAF,EAAAh4E,UAAAo5E,SAAA,SAAAlB,GAEA,GAAAzkC,IACA,OAAA,MAAA,KAAA,EAAA,GACA,KAAA,OAAA,KAAA,EAAA,GACA,MAAA,KAAA,MAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAGAt2C,MAAA86E,YAAAxkC,EAAAykC,IAQAF,EAAAh4E,UAAAq5E,MAAA,SAAAnB,GAEA,GAAAzkC,IACA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAGAt2C,MAAA86E,YAAAxkC,EAAAykC,IAQAF,EAAAh4E,UAAAs5E,WAAA,SAAApB,GAEA,GAAAzkC,IACA,oBAAA,mBAAA,mBAAA,EAAA,mBACA,mBAAA,oBAAA,mBAAA,EAAA,oBACA,oBAAA,kBAAA,mBAAA,EAAA,kBACA,EAAA,EAAA,EAAA,EAAA,EAGAt2C,MAAA86E,YAAAxkC,EAAAykC,IAQAF,EAAAh4E,UAAAu5E,OAAA,SAAArB,GAEA,GAAAzkC,IACA,kBAAA,oBAAA,kBAAA,EAAA,mBACA,oBAAA,kBAAA,mBAAA,EAAA,mBACA,oBAAA,mBAAA,mBAAA,EAAA,mBACA,EAAA,EAAA,EAAA,EAAA,EAGAt2C,MAAA86E,YAAAxkC,EAAAykC,IAQAF,EAAAh4E,UAAAw5E,QAAA,SAAAtB,GAEA,GAAAzkC,IACA,kBAAA,mBAAA,mBAAA,EAAA,kBACA,mBAAA,kBAAA,mBAAA,EAAA,kBACA,mBAAA,kBAAA,kBAAA,EAAA,kBACA,EAAA,EAAA,EAAA,EAAA,EAGAt2C,MAAA86E,YAAAxkC,EAAAykC,IAaAF,EAAAh4E,UAAAy5E,UAAA,SAAAC,EAAAC,EAAAC,EAAAC,EAAA3B,GAEAwB,EAAAA,GAAA,GACAC,EAAAA,GAAA,IACAC,EAAAA,GAAA,SACAC,EAAAA,GAAA,OAEA,IAAAC,IAAAF,GAAA,GAAA,KAAA,IACAG,GAAAH,GAAA,EAAA,KAAA,IACAI,GAAA,IAAAJ,GAAA,IAEAK,GAAAJ,GAAA,GAAA,KAAA,IACAK,GAAAL,GAAA,EAAA,KAAA,IACAM,GAAA,IAAAN,GAAA,IAEApmC,GACA,GAAA,IAAA,IAAA,EAAA,EACAqmC,EAAAC,EAAAC,EAAAN,EAAA,EACAO,EAAAC,EAAAC,EAAAR,EAAA,EACAG,EAAAG,EAAAF,EAAAG,EAAAF,EAAAG,EAAA,EAAA,EAGAh9E,MAAA86E,YAAAxkC,EAAAykC,IASAF,EAAAh4E,UAAAo6E,MAAA,SAAAC,EAAAnC,GAEAmC,EAAAA,GAAA,EACA,IAAA5mC,IACA,GAAA4mC,GAAAA,EAAA,EAAA,EAAA,GACAA,EAAA,EAAAA,EAAA,EAAA,EACA,EAAAA,EAAA,EAAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAGAl9E,MAAA86E,YAAAxkC,EAAAykC,IAYAF,EAAAh4E,UAAAs6E,SAAA,SAAA9uB,EAAA0sB,GAEA,GAAAzkC,IACA,mBAAA+X,EAAA,mBAAAA,EAAA,oBAAAA,EAAA,EAAAA,EAAA,mBAAAA,EACA,oBAAAA,EAAA,kBAAAA,EAAA,mBAAAA,EAAA,EAAAA,EAAA,mBAAAA,EACA,oBAAAA,EAAA,oBAAAA,EAAA,kBAAAA,EAAA,EAAAA,EAAA,kBAAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAGAruD,MAAA86E,YAAAxkC,EAAAykC,IAWAF,EAAAh4E,UAAAu6E,IAAA,SAAArC,GAEA,GAAAzkC,IACA,GAAA,GAAA,GAAA,EAAA,GACA,GAAA,GAAA,GAAA,EAAA,GACA,IAAA,GAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAGAt2C,MAAA86E,YAAAxkC,EAAAykC,IAOAF,EAAAh4E,UAAAg5B,MAAA,WAEA,GAAAya,IACA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EAGAt2C,MAAA86E,YAAAxkC,GAAA,IAIA/mC,OAAAuhC,iBAAA+pC,EAAAh4E,WAQAyzC,QACAtmC,IAAA,WAEA,MAAAhQ,MAAA2G,SAAA4jB,EAAApb,OAEAe,IAAA,SAAAf,GAEAnP,KAAA2G,SAAA4jB,EAAApb,MAAAA,QAKA4pE,aAAA,KAAAsE,KAAA,SAAA38E,EAAAjB,EAAAD,GAYA,QAAA89E,KAEA9zC,EAAA+c,eAAAxlD,KAAAf,KAEA,KAEA,wQAGAk2D,MAAA7zD,KAAA,KAAA8M,MAAA,KApBA,GAAAq6B,GAAA9oC,EAAA,aAyBA48E,GAAAz6E,UAAA0M,OAAA/L,OAAAgmC,EAAA+c,eAAA1jD,WACAy6E,EAAAz6E,UAAAmH,YAAAszE,EACA79E,EAAAD,QAAA89E,EAEA/tE,OAAAuhC,iBAAAwsC,EAAAz6E,WAOAqzD,MACAlmD,IAAA,WAEA,MAAAhQ,MAAA2G,SAAAuvD,KAAA/mD,OAEAe,IAAA,SAAAf,GAEAnP,KAAA2G,SAAAuvD,KAAA/mD,MAAAA,QAKA4pE,aAAA,KAAAwE,KAAA,SAAA78E,EAAAjB,EAAAD,GAmBA,QAAAg+E,GAAAlnC,EAAA1yC,EAAAC,GAEA2lC,EAAA+c,eAAAxlD,KAAAf,KAEA,KAEA;AAGAs2C,QAAAj0C,KAAA,MAAA8M,MAAA,GAAAtH,cAAAyuC,IACAmnC,WAAAp7E,KAAA,KAAA8M,OAAAwF,EAAA,EAAA/Q,EAAAkU,EAAA,EAAAjU,MA5BA,GAAA2lC,GAAA9oC,EAAA,aAiCA88E,GAAA36E,UAAA0M,OAAA/L,OAAAgmC,EAAA+c,eAAA1jD,WACA26E,EAAA36E,UAAAmH,YAAAwzE,EACA/9E,EAAAD,QAAAg+E,EAEAjuE,OAAAuhC,iBAAA0sC,EAAA36E,WAOAyzC,QACAtmC,IAAA,WAEA,MAAAhQ,MAAA2G,SAAA2vC,OAAAnnC,OAEAe,IAAA,SAAAf,GAEAnP,KAAA2G,SAAA2vC,OAAAnnC,MAAA,GAAAtH,cAAAsH,KAUAvL,OACAoM,IAAA,WAEA,MAAA,GAAAhQ,KAAA2G,SAAA82E,UAAAtuE,MAAAwF,GAEAzE,IAAA,SAAAf,GAEAnP,KAAA2G,SAAA82E,UAAAtuE,MAAAwF,EAAA,EAAAxF,IAUAtL,QACAmM,IAAA,WAEA,MAAA,GAAAhQ,KAAA2G,SAAA82E,UAAAtuE,MAAA2I,GAEA5H,IAAA,SAAAf,GAEAnP,KAAA2G,SAAA82E,UAAAtuE,MAAA2I,EAAA,EAAA3I,QAKA4pE,aAAA,KAAA2E,KAAA,SAAAh9E,EAAAjB,EAAAD,GAYA,QAAAm+E,KAEAn0C,EAAA+c,eAAAxlD,KAAAf,KAEA,KAEA,w7BAjBA,GAAAwpC,GAAA9oC,EAAA,aAqBAi9E,GAAA96E,UAAA0M,OAAA/L,OAAAgmC,EAAA+c,eAAA1jD,WACA86E,EAAA96E,UAAAmH,YAAA2zE,EACAl+E,EAAAD,QAAAm+E,IAEA5E,aAAA,KAAA6E,KAAA,SAAAl9E,EAAAjB,EAAAD,GAeA,QAAAq+E,GAAA3tB,EAAAnf,GAEA,GAAA4pB,GAAA,GAAAnxB,GAAAqH,MACAqf,GAAAvc,YAAA,EAEAnK,EAAA+c,eAAAxlD,KAAAf,KAEA,6eAEA,qZAGA89E,YAAAz7E,KAAA,YAAA8M,MAAA+gD,EAAAjsD,SACA22D,aAAAv4D,KAAA,OAAA8M,MAAAwrD,EAAA/Z,SAAA,IACA7P,OAAA1uC,KAAA,KAAA8M,OAAAwF,EAAA,EAAAmD,EAAA,MAIA9X,KAAA66D,WAAA3K,EACAlwD,KAAA26D,WAAAA,GAEA,OAAA5pB,GAAA7oC,SAAA6oC,KAEAA,EAAA,IAGA/wC,KAAA+wC,MAAA,GAAAvH,GAAAwL,MAAAjE,EAAAA,GAxCA,GAAAvH,GAAA9oC,EAAA,aA2CAm9E,GAAAh7E,UAAA0M,OAAA/L,OAAAgmC,EAAA+c,eAAA1jD,WACAg7E,EAAAh7E,UAAAmH,YAAA6zE,EACAp+E,EAAAD,QAAAq+E,EAEAA,EAAAh7E,UAAAw3D,YAAA,SAAAzxB,EAAArf,EAAArB,GAEA,GAAA8rB,GAAApL,EAAAoL,aAEAA,GAAA8mB,sBAAAvxC,EAAAujC,MAAA9sD,KAAA66D,WAAA76D,KAAA26D,YAEA36D,KAAA2G,SAAAi0D,YAAAzrD,MAAAnP,KAAA26D,WAAA/Z,SAAA,GACA5gD,KAAA2G,SAAAoqC,MAAA5hC,MAAAwF,EAAA3U,KAAA+wC,MAAAp8B,GAAA,EAAA4U,EAAAujC,MAAAlpD,OACA5D,KAAA2G,SAAAoqC,MAAA5hC,MAAA2I,EAAA9X,KAAA+wC,MAAAj5B,GAAA,EAAAyR,EAAAujC,MAAAjpD,OAEA,IAAAwJ,GAAArN,KAAAo6D,UAAAxxB,EAEAoL,GAAAqmB,YAAAhtD,EAAAkc,EAAArB,IAIA3Y,OAAAuhC,iBAAA+sC,EAAAh7E,WAOAkZ,KACA/L,IAAA,WAEA,MAAAhQ,MAAA2G,SAAAm3E,WAAA3uE,OAEAe,IAAA,SAAAf,GAEAnP,KAAA2G,SAAAm3E,WAAA3uE,MAAAA,QAMA4pE,aAAA,KAAAgF,KAAA,SAAAr9E,EAAAjB,EAAAD,GAkBA,QAAAw+E,KAEAx0C,EAAA+c,eAAAxlD,KAAAf,KAEA,KAEA,2oBAGA+wC,OAAA1uC,KAAA,KAAA8M,MAAA,GACAotC,OAAAl6C,KAAA,KAAA8M,MAAA,GACA6sD,YAAA35D,KAAA,MAAA8M,OAAA,EAAA,EAAA,EAAA,MA5BA,GAAAq6B,GAAA9oC,EAAA,aAiCAs9E,GAAAn7E,UAAA0M,OAAA/L,OAAAgmC,EAAA+c,eAAA1jD,WACAm7E,EAAAn7E,UAAAmH,YAAAg0E,EACAv+E,EAAAD,QAAAw+E,EAEAzuE,OAAAuhC,iBAAAktC,EAAAn7E,WAMAkuC,OACA/gC,IAAA,WAEA,MAAAhQ,MAAA2G,SAAAoqC,MAAA5hC,OAEAe,IAAA,SAAAf,GAEAnP,KAAA2G,SAAAoqC,MAAA5hC,MAAAA,IASAotC,OACAvsC,IAAA,WAEA,MAAAhQ,MAAA2G,SAAA41C,MAAAptC,OAEAe,IAAA,SAAAf,GAEAnP,KAAA2G,SAAA41C,MAAAptC,MAAAA,QAKA4pE,aAAA,KAAAkF,KAAA,SAAAv9E,EAAAjB,EAAAD,GAaA,QAAA0+E,KAEA10C,EAAA+c,eAAAxlD,KAAAf,KAEA,y4BAEA,yzBAGAu5E,MAAAl3E,KAAA,KAAA8M,MAAA,EAAA,KACAwpC,OAAAt2C,KAAA,IAAA8M,OAAA,EAAA,EAAA,IACAslC,OAAApyC,KAAA,KAAA8M,MAAA,IACArM,QAAAT,KAAA,KAAA8M,OAAA,EAAA,IACA6qE,UAAA33E,KAAA,KAAA8M,MAAA,KAIAnP,KAAAi6E,OAAA,EACAj6E,KAAAg6E,SAAA,EA9BA,GAAAxwC,GAAA9oC,EAAA,aAiCAw9E,GAAAr7E,UAAA0M,OAAA/L,OAAAgmC,EAAA+c,eAAA1jD,WACAq7E,EAAAr7E,UAAAmH,YAAAk0E,EACAz+E,EAAAD,QAAA0+E,EAEAA,EAAAr7E,UAAAw3D,YAAA,SAAAzxB,EAAArf,EAAArB,EAAAnjB,GAEA,GAAAsI,GAAArN,KAAAo6D,UAAAxxB,EAIA,IAFA5oC,KAAA2G,SAAAqzE,SAAA7qE,MAAAnP,KAAAg6E,SAAA,EAAAh6E,KAAAi6E,QAAA1wD,EAAAujC,MAAAjpD,OAAA0lB,EAAAxe,KAAAlH,QAEA,IAAA7D,KAAAi6E,OAEArxC,EAAAoL,cAAAqmB,YAAAhtD,EAAAkc,EAAArB,EAAAnjB,OAGA,CAKA,IAAA,GAJA6zD,GAAAhwB,EAAAoL,cAAA0nB,iBAAA,GACA6e,EAAAhxD,EACAixD,EAAA5hB,EAEAj4D,EAAA,EAAAA,EAAAX,KAAAi6E,OAAA,EAAAt5E,IACA,CACAioC,EAAAoL,cAAAqmB,YAAAhtD,EAAAktE,EAAAC,EAAAz1E,EAEA,IAAAs3D,GAAAme,CACAA,GAAAD,EACAA,EAAAle,EAGAzzB,EAAAoL,cAAAqmB,YAAAhtD,EAAAktE,EAAAryD,EAAAnjB,GAEA6jC,EAAAoL,cAAAkoB,mBAAAtD,KAKArpD,OAAAuhC,iBAAAotC,EAAAr7E,WAQA02E,MACAvpE,IAAA,WAEA,MAAAhQ,MAAAg6E,UAEA9pE,IAAA,SAAAf,GAEAnP,KAAA0+C,QAAA,GAAAvvC,EACAnP,KAAAg6E,SAAA7qE,QAKA4pE,aAAA,KAAAoF,KAAA,SAAAz9E,EAAAjB,EAAAD,GAaA,QAAA4+E,KAEA50C,EAAA+c,eAAAxlD,KAAAf,MAEAA,KAAAk5E,YAAA,GAAAC,GACAn5E,KAAAq+E,gBAAA,GAAAH,GAEAl+E,KAAAs5E,cAAA,GAAA9vC,GAAA+c,eAEAvmD,KAAA0+C,QAAA,GAEA1+C,KAAAs+E,gBAAA,EACAt+E,KAAAu+E,OAAA,GAAA/oE,KAAAy3B,GAAA,IACAjtC,KAAAw+E,UAAA,GACAx+E,KAAAy0C,MAAA,IACAz0C,KAAAy+E,YAAA,EACAz+E,KAAA23C,UAAAnO,EAAAiE,YAAAG,SA5BA,GAAApE,GAAA9oC,EAAA,cACAy4E,EAAAz4E,EAAA,uBACAw9E,EAAAx9E,EAAA,oBA6BA09E,GAAAv7E,UAAA0M,OAAA/L,OAAAgmC,EAAA+c,eAAA1jD,WACAu7E,EAAAv7E,UAAAmH,YAAAo0E,EACA3+E,EAAAD,QAAA4+E,EAEAA,EAAAv7E,UAAAw3D,YAAA,SAAAzxB,EAAArf,EAAArB,GAEA,GAAA0wC,GAAAhwB,EAAAoL,cAAA0nB,iBAAA,EAGA17D,MAAAs+E,iBAEAt+E,KAAAs+E,gBAAA,EAEAt+E,KAAAq+E,gBAAA13E,SAAA7D,OAAAqM,MAAA,GAAAqG,KAAAugC,IAAA/1C,KAAAu+E,QAAAv+E,KAAAw+E,UACAx+E,KAAAq+E,gBAAA13E,SAAA7D,OAAAqM,MAAA,GAAAqG,KAAAwgC,IAAAh2C,KAAAu+E,QAAAv+E,KAAAw+E,WAGAx+E,KAAAk5E,YAAA7e,YAAAzxB,EAAArf,EAAAqvC,GAEAhwB,EAAA2X,iBAAAC,aAAAxgD,KAAA23C,WAEA33C,KAAAq+E,gBAAAhkB,YAAAzxB,EAAAgwB,EAAA1wC,GAEA0gB,EAAA2X,iBAAAC,aAAAhX,EAAAiE,YAAAC,QAEA1tC,KAAAy+E,YAGAz+E,KAAAs5E,cAAAjf,YAAAzxB,EAAArf,EAAArB,GAIA0gB,EAAAoL,cAAAkoB,mBAAAtD,IAGArpD,OAAAuhC,iBAAAstC,EAAAv7E,WAQA02E,MACAvpE,IAAA,WAEA,MAAAhQ,MAAAk5E,YAAAK,MAEArpE,IAAA,SAAAf,GAEAnP,KAAAk5E,YAAAK,KAAAv5E,KAAAq+E,gBAAA9E,KAAApqE,IAWAqqE,OACAxpE,IAAA,WAEA,MAAAhQ,MAAAk5E,YAAAK,MAEArpE,IAAA,SAAAf,GAEAnP,KAAAk5E,YAAAK,KAAApqE,IAWAsqE,OACAzpE,IAAA,WAEA,MAAAhQ,MAAAq+E,gBAAA9E,MAEArpE,IAAA,SAAAf,GAEAnP,KAAAq+E,gBAAA9E,KAAApqE,IAUAwpC,OACA3oC,IAAA,WAEA,MAAAw5B,GAAAoB,MAAAwrB,QAAAp2D,KAAAq+E,gBAAA13E,SAAAgyC,MAAAxpC,QAEAe,IAAA,SAAAf,GAEAnP,KAAAq+E,gBAAA13E,SAAAgyC,MAAAxpC,MAAAq6B,EAAAoB,MAAAiW,QAAA1xC,KAUAslC,OACAzkC,IAAA,WAEA,MAAAhQ,MAAAq+E,gBAAA13E,SAAA8tC,MAAAtlC,OAEAe,IAAA,SAAAf,GAEAnP,KAAAq+E,gBAAA13E,SAAA8tC,MAAAtlC,MAAAA,IAUAuvE,UACA1uE,IAAA,WAEA,MAAAhQ,MAAAw+E,WAEAtuE,IAAA,SAAAf,GAEAnP,KAAAs+E,gBAAA,EACAt+E,KAAAw+E,UAAArvE,IAUAotC,OACAvsC,IAAA,WAEA,MAAAhQ,MAAAu+E,QAEAruE,IAAA,SAAAf,GAEAnP,KAAAs+E,gBAAA,EACAt+E,KAAAu+E,OAAApvE,QAKA4pE,aAAA,GAAAW,sBAAA,IAAAiF,oBAAA,MAAAC,KAAA,SAAAl+E,EAAAjB,EAAAD,GAYA,QAAAq/E,KAEAr1C,EAAA+c,eAAAxlD,KAAAf,KAEA,KAEA,wVAGA8+E,MAAAz8E,KAAA,KAAA8M,MAAA,KApBA,GAAAq6B,GAAA9oC,EAAA,aAyBAm+E,GAAAh8E,UAAA0M,OAAA/L,OAAAgmC,EAAA+c,eAAA1jD,WACAg8E,EAAAh8E,UAAAmH,YAAA60E,EACAp/E,EAAAD,QAAAq/E,EAEAtvE,OAAAuhC,iBAAA+tC,EAAAh8E,WAOAi8E,MACA9uE,IAAA,WAEA,MAAAhQ,MAAA2G,SAAAm4E,KAAA3vE,OAEAe,IAAA,SAAAf,GAEAnP,KAAA2G,SAAAm4E,KAAA3vE,MAAAA,QAKA4pE,aAAA,KAAAgG,KAAA,SAAAr+E,EAAAjB,EAAAD,GAWAC,EAAAD,SACAq5E,YAAAn4E,EAAA,uBACAu4E,YAAAv4E,EAAA,uBACAy5E,WAAAz5E,EAAA,qBACAy4E,YAAAz4E,EAAA,sBACA24E,YAAA34E,EAAA,sBACAm5E,cAAAn5E,EAAA,wBACAm6E,kBAAAn6E,EAAA,6BACA48E,gBAAA58E,EAAA,2BACA88E,kBAAA98E,EAAA,mCACAi9E,iBAAAj9E,EAAA,iCACAm9E,mBAAAn9E,EAAA,qCACAs9E,gBAAAt9E,EAAA,yBACAm+E,WAAAn+E,EAAA,qBACA09E,iBAAA19E,EAAA,iCACAs+E,aAAAt+E,EAAA,yBACAu+E,YAAAv+E,EAAA,uBACAw+E,eAAAx+E,EAAA,6BACAy+E,eAAAz+E,EAAA,wBACA0+E,gBAAA1+E,EAAA,+BACA2+E,YAAA3+E,EAAA,uBACAi6E,gBAAAj6E,EAAA,0BACA4+E,gBAAA5+E,EAAA,+BACA6+E,iBAAA7+E,EAAA,gCACA8+E,iBAAA9+E,EAAA,gCACA++E,YAAA/+E,EAAA,0BAGAg/E,sBAAA,IAAAC,sBAAA,IAAAC,uBAAA,IAAAC,oBAAA,IAAAC,qBAAA,IAAAC,qBAAA,IAAAC,yBAAA,IAAAC,4BAAA,IAAAC,0BAAA,IAAAC,kCAAA,IAAAC,gCAAA,IAAAC,oCAAA,IAAAC,wBAAA,IAAAC,gCAAA,IAAAC,oBAAA,IAAAC,wBAAA,IAAAC,sBAAA,IAAAC,4BAAA,IAAAC,uBAAA,IAAAC,sBAAA,IAAAC,8BAAA,IAAAC,8BAAA,IAAAC,+BAAA,IAAAC,+BAAA,IAAAC,sBAAA,MAAAC,KAAA,SAAAzgF,EAAAjB,EAAAD,GAYA,QAAAw/E,KAEAx1C,EAAA+c,eAAAxlD,KAAAf,KAEA,KAEA,iTAGAypD,QAAApnD,KAAA,KAAA8M,MAAA,KApBA,GAAAq6B,GAAA9oC,EAAA,aAyBAs+E,GAAAn8E,UAAA0M,OAAA/L,OAAAgmC,EAAA+c,eAAA1jD,WACAm8E,EAAAn8E,UAAAmH,YAAAg1E,EACAv/E,EAAAD,QAAAw/E,EAEAzvE,OAAAuhC,iBAAAkuC,EAAAn8E,WAQA4mD,QACAz5C,IAAA,WAEA,MAAAhQ,MAAA2G,SAAA8iD,OAAAt6C,OAEAe,IAAA,SAAAf,GAEAnP,KAAA2G,SAAA8iD,OAAAt6C,MAAAA,QAKA4pE,aAAA,KAAAqI,KAAA,SAAA1gF,EAAAjB,EAAAD,GAiBA,QAAAy/E,KAEAz1C,EAAA+c,eAAAxlD,KAAAf,KAEA,KAEA,gdAGAqhF,OAAAh/E,KAAA,KAAA8M,MAAA,MAzBA,GAAAq6B,GAAA9oC,EAAA,aA8BAu+E,GAAAp8E,UAAA0M,OAAA/L,OAAAgmC,EAAA+c,eAAA1jD,WACAo8E,EAAAp8E,UAAAmH,YAAAi1E,EACAx/E,EAAAD,QAAAy/E,EAEA1vE,OAAAuhC,iBAAAmuC,EAAAp8E,WAQAw+E,OACArxE,IAAA,WAEA,MAAAhQ,MAAA2G,SAAA06E,MAAAlyE,OAEAe,IAAA,SAAAf,GAEAnP,KAAA2G,SAAA06E,MAAAlyE,MAAAA,QAKA4pE,aAAA,KAAAuI,KAAA,SAAA5gF,EAAAjB,EAAAD,GAYA,QAAA0/E,KAEA11C,EAAA+c,eAAAxlD,KAAAf,KAEA,KAEA,uYAGAg8D,YAAA35D,KAAA,MAAA8M,MAAA,GAAAtH,eAAA,EAAA,EAAA,EAAA,KACAixE,WAAAz2E,KAAA,KAAA8M,OAAAwF,EAAA,GAAAmD,EAAA,OArBA,GAAA0xB,GAAA9oC,EAAA,aA0BAw+E,GAAAr8E,UAAA0M,OAAA/L,OAAAgmC,EAAA+c,eAAA1jD,WACAq8E,EAAAr8E,UAAAmH,YAAAk1E,EACAz/E,EAAAD,QAAA0/E,EAEA3vE,OAAAuhC,iBAAAouC,EAAAr8E,WAQAkI,MACAiF,IAAA,WAEA,MAAAhQ,MAAA2G,SAAAmyE,UAAA3pE,OAEAe,IAAA,SAAAf,GAEAnP,KAAA2G,SAAAmyE,UAAA3pE,MAAAA,QAKA4pE,aAAA,KAAAwI,KAAA,SAAA7gF,EAAAjB,EAAAD,GAYA,QAAA2/E,KAEA31C,EAAA+c,eAAAxlD,KAAAf,KAEA,KAEA,sfAGAwhF,KAAAn/E,KAAA,KAAA8M,OAAAwF,EAAA,GAAAmD,EAAA,KACA2pE,OAAAp/E,KAAA,KAAA8M,OAAAwF,EAAA,IAAAmD,EAAA,KACA4pE,MAAAr/E,KAAA,KAAA8M,OAAAwF,EAAA,GAAAmD,EAAA,MACAkkD,YAAA35D,KAAA,MAAA8M,OAAA,EAAA,EAAA,EAAA,MAvBA,GAAAq6B,GAAA9oC,EAAA,aA4BAy+E,GAAAt8E,UAAA0M,OAAA/L,OAAAgmC,EAAA+c,eAAA1jD,WACAs8E,EAAAt8E,UAAAmH,YAAAm1E,EACA1/E,EAAAD,QAAA2/E,EAEA5vE,OAAAuhC,iBAAAquC,EAAAt8E,WAOA2+E,KACAxxE,IAAA,WAEA,MAAAhQ,MAAA2G,SAAA66E,IAAAryE,OAEAe,IAAA,SAAAf,GAEAnP,KAAA2G,SAAA66E,IAAAryE,MAAAA,IAUAsyE,OACAzxE,IAAA,WAEA,MAAAhQ,MAAA2G,SAAA86E,MAAAtyE,OAEAe,IAAA,SAAAf,GAEAnP,KAAA2G,SAAA86E,MAAAtyE,MAAAA,IAUAuyE,MACA1xE,IAAA,WAEA,MAAAhQ,MAAA2G,SAAA+6E,KAAAvyE,OAEAe,IAAA,SAAAf,GAEAnP,KAAA2G,SAAA+6E,KAAAvyE,MAAAA,QAKA4pE,aAAA,KAAA4I,KAAA,SAAAjhF,EAAAjB,EAAAD,GAYA,QAAA6/E,KAEA71C,EAAA+c,eAAAxlD,KAAAf,KAEA,KAEA,kYAGA+7E,OAAA15E,KAAA,KAAA8M,MAAA,KApBA,GAAAq6B,GAAA9oC,EAAA,aAyBA2+E,GAAAx8E,UAAA0M,OAAA/L,OAAAgmC,EAAA+c,eAAA1jD,WACAw8E,EAAAx8E,UAAAmH,YAAAq1E,EACA5/E,EAAAD,QAAA6/E,EAEA9vE,OAAAuhC,iBAAAuuC,EAAAx8E,WAQAk5E,OACA/rE,IAAA,WAEA,MAAAhQ,MAAA2G,SAAAo1E,MAAA5sE,OAEAe,IAAA,SAAAf,GAEAnP,KAAA2G,SAAAo1E,MAAA5sE,MAAAA,QAKA4pE,aAAA,KAAA6I,KAAA,SAAAlhF,EAAAjB,EAAAD,GAcA,QAAA4/E,KAEA51C,EAAA+c,eAAAxlD,KAAAf,KAEA,KAEA,iqBAGA6hF,QAAAx/E,KAAA,KAAA8M,OAAAwF,EAAA,GAAAmD,EAAA,KACAgqE,QAAAz/E,KAAA,KAAA8M,OAAAwF,EAAA,GAAAmD,EAAA,GAAAid,EAAA,KACA85C,MAAAxsE,KAAA,KAAA8M,MAAA,KAxBA,GAAAq6B,GAAA9oC,EAAA,aA6BA0+E,GAAAv8E,UAAA0M,OAAA/L,OAAAgmC,EAAA+c,eAAA1jD,WACAu8E,EAAAv8E,UAAAmH,YAAAo1E,EACA3/E,EAAAD,QAAA4/E,EAEA7vE,OAAAuhC,iBAAAsuC,EAAAv8E,WAQAg/E,QACA7xE,IAAA,WAEA,MAAAhQ,MAAA2G,SAAAk7E,OAAA1yE,OAEAe,IAAA,SAAAf,GAEAnP,KAAA2G,SAAAk7E,OAAA1yE,MAAAA,IAUA2yE,QACA9xE,IAAA,WAEA,MAAAhQ,MAAA2G,SAAAm7E,OAAA3yE,OAEAe,IAAA,SAAAf,GAEAnP,KAAA2G,SAAAm7E,OAAA3yE,MAAAA,IAUA0/D,MACA7+D,IAAA,WAEA,MAAAhQ,MAAA2G,SAAAkoE,KAAA1/D,OAEAe,IAAA,SAAAf,GAEAnP,KAAA2G,SAAAkoE,KAAA1/D,MAAAA,QAKA4pE,aAAA,KAAAgJ,KAAA,SAAArhF,EAAAjB,EAAAD,GAiBA,QAAAwiF,KAEAx4C,EAAA+c,eAAAxlD,KAAAf,KAEA,KAEA,6lCAGAu5E,MAAAl3E,KAAA,KAAA8M,MAAA,KACA8yE,cAAA5/E,KAAA,KAAA8M,MAAA,KACA3E,OAAAnI,KAAA,KAAA8M,OAAAwF,EAAA,EAAAmD,EAAAjY,OAAAqiF,YAAA,IACApgE,KAAAzf,KAAA,KAAA8M,OAAAwF,EAAA,IAAAmD,EAAAjY,OAAAqiF,YAAA,IACAp5D,OAAAzmB,KAAA,KAAA8M,OAAAwF,EAAA,GAAAmD,EAAA,KACAqqE,SAAA9/E,KAAA,KAAA8M,OAAAwF,EAAA9U,OAAAuiF,WAAAtqE,EAAAjY,OAAAqiF,gBAIAliF,KAAAqiF,cAlCA,GAAA74C,GAAA9oC,EAAA,aAqCAshF,GAAAn/E,UAAA0M,OAAA/L,OAAAgmC,EAAA+c,eAAA1jD,WACAm/E,EAAAn/E,UAAAmH,YAAAg4E,EACAviF,EAAAD,QAAAwiF,EAOAA,EAAAn/E,UAAAw/E,YAAA,WAEAriF,KAAA2G,SAAAmiB,MAAA3Z,MAAAwF,EAAA,EACA3U,KAAA2G,SAAAmiB,MAAA3Z,MAAA2I,EAAA,GAGAvI,OAAAuhC,iBAAAkxC,EAAAn/E,WAOA02E,MACAvpE,IAAA,WAEA,MAAAhQ,MAAA2G,SAAA4yE,KAAApqE,OAEAe,IAAA,SAAAf,GAEAnP,KAAA2G,SAAA4yE,KAAApqE,MAAAA,IAUA8yE,cACAjyE,IAAA,WAEA,MAAAhQ,MAAA2G,SAAAs7E,aAAA9yE,OAEAe,IAAA,SAAAf,GAEAnP,KAAA2G,SAAAs7E,aAAA9yE,MAAAA,IAUA3E,OACAwF,IAAA,WAEA,MAAAhQ,MAAA2G,SAAA6D,MAAA2E,OAEAe,IAAA,SAAAf,GAEAnP,KAAA2G,SAAA6D,MAAA2E,MAAAA,EACAnP,KAAAqiF,gBAUAvgE,KACA9R,IAAA,WAEA,MAAAhQ,MAAA2G,SAAAmb,IAAA3S,OAEAe,IAAA,SAAAf,GAEAnP,KAAA2G,SAAAmb,IAAA3S,MAAAA,EACAnP,KAAAqiF,oBAKAtJ,aAAA,KAAAuJ,KAAA,SAAA5hF,EAAAjB,EAAAD,GAiBA,QAAA8/E,KAEA91C,EAAA+c,eAAAxlD,KAAAf,MAEAA,KAAAuiF,iBAAA,GAAAhD,GACAv/E,KAAAwiF,iBAAA,GAAAhD,GArBA,GAAAh2C,GAAA9oC,EAAA,cACA6+E,EAAA7+E,EAAA,sBACA8+E,EAAA9+E,EAAA,qBAsBA4+E,GAAAz8E,UAAA0M,OAAA/L,OAAAgmC,EAAA+c,eAAA1jD,WACAy8E,EAAAz8E,UAAAmH,YAAAs1E,EACA7/E,EAAAD,QAAA8/E,EAEAA,EAAAz8E,UAAAw3D,YAAA,SAAAzxB,EAAArf,EAAArB,GAEA,GAAA0wC,GAAAhwB,EAAAoL,cAAA0nB,iBAAA,EAEA17D,MAAAuiF,iBAAAloB,YAAAzxB,EAAArf,EAAAqvC,GAEA54D,KAAAwiF,iBAAAnoB,YAAAzxB,EAAAgwB,EAAA1wC,GAEA0gB,EAAAoL,cAAAkoB,mBAAAtD,IAGArpD,OAAAuhC,iBAAAwuC,EAAAz8E,WAOA02E,MACAvpE,IAAA,WAEA,MAAAhQ,MAAAuiF,iBAAAhJ,MAEArpE,IAAA,SAAAf,GAEAnP,KAAAuiF,iBAAAhJ,KAAAv5E,KAAAwiF,iBAAAjJ,KAAApqE,IAUA8yE,cACAjyE,IAAA,WAEA,MAAAhQ,MAAAuiF,iBAAAN,cAEA/xE,IAAA,SAAAf,GAEAnP,KAAAuiF,iBAAAN,aAAAjiF,KAAAwiF,iBAAAP,aAAA9yE,IAUA3E,OACAwF,IAAA,WAEA,MAAAhQ,MAAAuiF,iBAAA/3E,OAEA0F,IAAA,SAAAf,GAEAnP,KAAAuiF,iBAAA/3E,MAAAxK,KAAAwiF,iBAAAh4E,MAAA2E,IAUA2S,KACA9R,IAAA,WAEA,MAAAhQ,MAAAuiF,iBAAAzgE,KAEA5R,IAAA,SAAAf,GAEAnP,KAAAuiF,iBAAAzgE,IAAA9hB,KAAAwiF,iBAAA1gE,IAAA3S,QAKA4pE,aAAA,GAAA0J,qBAAA,IAAAC,qBAAA,MAAAC,KAAA,SAAAjiF,EAAAjB,EAAAD,GAeA,QAAA+/E,KAEAyC,EAAAjhF,KAAAf,MAhBA,GAAAgiF,GAAAthF,EAAA,wBAmBA6+E,GAAA18E,UAAA0M,OAAA/L,OAAAw+E,EAAAn/E,WACA08E,EAAA18E,UAAAmH,YAAAu1E,EACA9/E,EAAAD,QAAA+/E,EAMAA,EAAA18E,UAAAw/E,YAAA,WAEA,GAAA/3B,GAAAtqD,KAAA2G,SAAAmb,IAAA3S,MAAAwF,EAAA3U,KAAA2G,SAAA6D,MAAA2E,MAAAwF,EACA41C,EAAAvqD,KAAA2G,SAAAmb,IAAA3S,MAAA2I,EAAA9X,KAAA2G,SAAA6D,MAAA2E,MAAA2I,EACAszB,EAAA51B,KAAAylC,KAAAqP,EAAAA,EAAAC,EAAAA,EAEAvqD,MAAA2G,SAAAmiB,MAAA3Z,MAAAwF,EAAA21C,EAAAlf,EACAprC,KAAA2G,SAAAmiB,MAAA3Z,MAAA2I,EAAAyyC,EAAAnf,KAGAw3C,wBAAA,MAAAC,KAAA,SAAAniF,EAAAjB,EAAAD,GAeA,QAAAggF,KAEAwC,EAAAjhF,KAAAf,MAhBA,GAAAgiF,GAAAthF,EAAA,wBAmBA8+E,GAAA38E,UAAA0M,OAAA/L,OAAAw+E,EAAAn/E,WACA28E,EAAA38E,UAAAmH,YAAAw1E,EACA//E,EAAAD,QAAAggF,EAMAA,EAAA38E,UAAAw/E,YAAA,WAEA,GAAA/3B,GAAAtqD,KAAA2G,SAAAmb,IAAA3S,MAAAwF,EAAA3U,KAAA2G,SAAA6D,MAAA2E,MAAAwF,EACA41C,EAAAvqD,KAAA2G,SAAAmb,IAAA3S,MAAA2I,EAAA9X,KAAA2G,SAAA6D,MAAA2E,MAAA2I,EACAszB,EAAA51B,KAAAylC,KAAAqP,EAAAA,EAAAC,EAAAA,EAEAvqD,MAAA2G,SAAAmiB,MAAA3Z,MAAAwF,GAAA41C,EAAAnf,EACAprC,KAAA2G,SAAAmiB,MAAA3Z,MAAA2I,EAAAwyC,EAAAlf,KAGAw3C,wBAAA,MAAAE,KAAA,SAAApiF,EAAAjB,EAAAD,GAYA,QAAAigF,KAEAj2C,EAAA+c,eAAAxlD,KAAAf,KAEA,KAEA,4kBAGA06C,QAAAr4C,KAAA,KAAA8M,MAAA,IACAotC,OAAAl6C,KAAA,KAAA8M,MAAA,GACArM,QAAAT,KAAA,KAAA8M,OAAAwF,EAAA,GAAAmD,EAAA,OAtBA,GAAA0xB,GAAA9oC,EAAA,aA2BA++E,GAAA58E,UAAA0M,OAAA/L,OAAAgmC,EAAA+c,eAAA1jD,WACA48E,EAAA58E,UAAAmH,YAAAy1E,EACAhgF,EAAAD,QAAAigF,EAEAlwE,OAAAuhC,iBAAA2uC,EAAA58E,WAOAC,QACAkN,IAAA,WAEA,MAAAhQ,MAAA2G,SAAA7D,OAAAqM,OAEAe,IAAA,SAAAf,GAEAnP,KAAA2G,SAAA7D,OAAAqM,MAAAA,IAUAurC,QACA1qC,IAAA,WAEA,MAAAhQ,MAAA2G,SAAA+zC,OAAAvrC,OAEAe,IAAA,SAAAf,GAEAnP,KAAA2G,SAAA+zC,OAAAvrC,MAAAA,IAUAotC,OACAvsC,IAAA,WAEA,MAAAhQ,MAAA2G,SAAA41C,MAAAptC,OAEAe,IAAA,SAAAf,GAEAnP,KAAA2G,SAAA41C,MAAAptC,MAAAA,QAKA4pE,aAAA,KAAAgK,KAAA,SAAAriF,EAAAjB,EAAAD,IACA,SAAAM,GAEAY,EAAA,aAEA,IAAA8oC,GAAA/pC,EAAAD,QAAAkB,EAAA,SAGA8oC,GAAA0oC,OAAAxxE,EAAA,YACA8oC,EAAA2M,QAAAz1C,EAAA,aACA8oC,EAAAwC,YAAAtrC,EAAA,iBACA8oC,EAAAw5C,QAAAtiF,EAAA,aACA8oC,EAAAyoC,KAAAvxE,EAAA,UACA8oC,EAAAy5C,cAAAviF,EAAA,mBAUA8oC,EAAA05C,OAAA,GAAA15C,GAAAw5C,QAAA5oD,OAGA7qB,OAAA4pB,OAAAqQ,EAAA9oC,EAAA,kBAGAZ,EAAAG,KAAAupC,IAEAzoC,KAAAf,KAAA,mBAAAF,QAAAA,OAAA,mBAAAC,MAAAA,KAAA,mBAAAF,QAAAA,aAEAsjF,kBAAA,GAAA/P,SAAA,GAAAgQ,gBAAA,IAAA/P,WAAA,IAAAC,YAAA,IAAA+P,gBAAA,IAAAC,YAAA,IAAA/P,SAAA,IAAAgQ,aAAA,MAAAC,KAAA,SAAA9iF,EAAAjB,EAAAD,GASA,QAAAikF,KAOAzjF,KAAAF,OAAA,GAAA0pC,GAAAwL,MAOAh1C,KAAAo5B,OAAA,KAOAp5B,KAAA0jF,cAAA,KA7BA,GAAAl6C,GAAA9oC,EAAA,UAgCA+iF,GAAA5gF,UAAAmH,YAAAy5E,EACAhkF,EAAAD,QAAAikF,EAUAA,EAAA5gF,UAAA8gF,iBAAA,SAAA35C,EAAAyM,EAAAmtC,GAEA,MAAA55C,GAAAiB,eAAAyL,aAAAktC,GAAA5jF,KAAAF,OAAA22C,MAGAlK,UAAA,KAAAs3C,KAAA,SAAAnjF,EAAAjB,EAAAD,GAsBA,QAAAskF,GAAAl7C,EAAA/9B,GAEAA,EAAAA,MAOA7K,KAAA4oC,SAAAA,EAQA5oC,KAAA+jF,mBAAA77E,SAAA2C,EAAAk5E,mBAAAl5E,EAAAk5E,oBAAA,EAQA/jF,KAAAgkF,qBAAAn5E,EAAAm5E,sBAAA,GAOAhkF,KAAAikF,MAAA,GAAAR,GAOAzjF,KAAAksC,WACAg4C,SAAA,EACA9qD,OAAA,KACA/2B,KAAA,KACAC,KAAAtC,KAAAikF,MACAE,gBAAA,WACAnkF,KAAAkkF,SAAA,IASAlkF,KAAAokF,uBAQApkF,KAAAqkF,sBAAA,KAQArkF,KAAAskF,aAAA,EAOAtkF,KAAAukF,UAAAvkF,KAAAukF,UAAAvhF,KAAAhD,MACAA,KAAAwkF,eAAAxkF,KAAAwkF,eAAAxhF,KAAAhD,MAMAA,KAAAykF,YAAAzkF,KAAAykF,YAAAzhF,KAAAhD,MACAA,KAAA0kF,iBAAA1kF,KAAA0kF,iBAAA1hF,KAAAhD,MAKAA,KAAA2kF,YAAA3kF,KAAA2kF,YAAA3hF,KAAAhD,MACAA,KAAA4kF,iBAAA5kF,KAAA4kF,iBAAA5hF,KAAAhD,MAKAA,KAAA6kF,WAAA7kF,KAAA6kF,WAAA7hF,KAAAhD,MACAA,KAAA8kF,oBAAA9kF,KAAA8kF,oBAAA9hF,KAAAhD,MAMAA,KAAA+kF,aAAA/kF,KAAA+kF,aAAA/hF,KAAAhD,MACAA,KAAAglF,kBAAAhlF,KAAAglF,kBAAAhiF,KAAAhD,MAKAA,KAAAilF,WAAAjlF,KAAAilF,WAAAjiF,KAAAhD,MACAA,KAAAklF,gBAAAllF,KAAAklF,gBAAAliF,KAAAhD,MAKAA,KAAAmlF,YAAAnlF,KAAAmlF,YAAAniF,KAAAhD,MACAA,KAAAolF,iBAAAplF,KAAAolF,iBAAApiF,KAAAhD,MAKAA,KAAA6jB,KAAA,EAMA7jB,KAAAqlF,mBAAA,UAOArlF,KAAAslF,WAAA,GAAA97C,GAAAwL,MAMAh1C,KAAAwvC,WAAA,EAEAxvC,KAAAulF,iBAAAvlF,KAAA4oC,SAAAe,KAAA3pC,KAAA4oC,SAAA4G,YAnKA,GAAAhG,GAAA9oC,EAAA,WACA+iF,EAAA/iF,EAAA,oBAGA6O,QAAA4pB,OACAqQ,EAAAC,cAAA5mC,UACAnC,EAAA,wBAgKAojF,EAAAjhF,UAAAmH,YAAA85E,EACArkF,EAAAD,QAAAskF,EAWAA,EAAAjhF,UAAA0iF,iBAAA,SAAAC,EAAAh2C,GAEAxvC,KAAAylF,eAEAzlF,KAAAqkF,sBAAAmB,EAEAxlF,KAAAwvC,WAAAA,GAAA,EAEAxvC,KAAA0lF,aAQA5B,EAAAjhF,UAAA6iF,UAAA,WAEA1lF,KAAAqkF,wBAKA76C,EAAAmc,OAAA0qB,OAAAj1C,IAAAp7B,KAAA0pC,OAAA1pC,MAEAH,OAAAkgC,UAAA4lD,mBAEA3lF,KAAAqkF,sBAAAx7C,MAAA,uBAAA,OACA7oC,KAAAqkF,sBAAAx7C,MAAA,oBAAA,QAGAhpC,OAAAggC,SAAAF,iBAAA,YAAA3/B,KAAA2kF,aAAA,GACA3kF,KAAAqkF,sBAAA1kD,iBAAA,YAAA3/B,KAAAykF,aAAA,GACAzkF,KAAAqkF,sBAAA1kD,iBAAA,WAAA3/B,KAAA6kF,YAAA,GAEA7kF,KAAAqkF,sBAAA1kD,iBAAA,aAAA3/B,KAAA+kF,cAAA,GACA/kF,KAAAqkF,sBAAA1kD,iBAAA,WAAA3/B,KAAAilF,YAAA,GACAjlF,KAAAqkF,sBAAA1kD,iBAAA,YAAA3/B,KAAAmlF,aAAA,GAEAtlF,OAAA8/B,iBAAA,UAAA3/B,KAAAukF,WAAA,GAEAvkF,KAAAskF,aAAA,IAQAR,EAAAjhF,UAAA4iF,aAAA,WAEAzlF,KAAAqkF,wBAKA76C,EAAAmc,OAAA0qB,OAAAH,OAAAlwE,KAAA0pC,QAEA7pC,OAAAkgC,UAAA4lD,mBAEA3lF,KAAAqkF,sBAAAx7C,MAAA,uBAAA,GACA7oC,KAAAqkF,sBAAAx7C,MAAA,oBAAA,IAGAhpC,OAAAggC,SAAAjB,oBAAA,YAAA5+B,KAAA2kF,aAAA,GACA3kF,KAAAqkF,sBAAAzlD,oBAAA,YAAA5+B,KAAAykF,aAAA,GACAzkF,KAAAqkF,sBAAAzlD,oBAAA,WAAA5+B,KAAA6kF,YAAA,GAEA7kF,KAAAqkF,sBAAAzlD,oBAAA,aAAA5+B,KAAA+kF,cAAA,GACA/kF,KAAAqkF,sBAAAzlD,oBAAA,WAAA5+B,KAAAilF,YAAA,GACAjlF,KAAAqkF,sBAAAzlD,oBAAA,YAAA5+B,KAAAmlF,aAAA,GAEAnlF,KAAAqkF,sBAAA,KAEAxkF,OAAA++B,oBAAA,UAAA5+B,KAAAukF,WAAA,GAEAvkF,KAAAskF,aAAA,IAUAR,EAAAjhF,UAAA6mC,OAAA,SAAAylC,GAIA,GAFAnvE,KAAA4lF,YAAAzW,IAEAnvE,KAAA4lF,WAAA5lF,KAAAgkF,wBAKAhkF,KAAA4lF,WAAA,EAEA5lF,KAAAqkF,uBAAA,CAMA,GAAArkF,KAAA6lF,QAGA,YADA7lF,KAAA6lF,SAAA,EAIA7lF,MAAA8lF,OAAA,UAEA9lF,KAAA+lF,mBAAA/lF,KAAAikF,MAAAnkF,OAAAE,KAAA4oC,SAAA0B,oBAAAtqC,KAAA8kF,qBAAA,GAEA9kF,KAAAqlF,qBAAArlF,KAAA8lF,SAEA9lF,KAAAqlF,mBAAArlF,KAAA8lF,OACA9lF,KAAAqkF,sBAAAx7C,MAAAi9C,OAAA9lF,KAAA8lF,UAcAhC,EAAAjhF,UAAAopC,cAAA,SAAAjC,EAAAg8C,EAAA95C,GAEAA,EAAAg4C,UAEAh4C,EAAA9S,OAAA4Q,EACAkC,EAAA7pC,KAAA2jF,EAEAh8C,EAAA5iB,KAAA4+D,EAAA95C,GAEAlC,EAAAg8C,IAEAh8C,EAAAg8C,GAAA95C,KAaA43C,EAAAjhF,UAAAojF,mBAAA,SAAAxvC,EAAA9hC,EAAAmD,GAEA,GAAAyyB,GAAAvqC,KAAAqkF,sBAAA75C,uBACAiM,GAAA9hC,GAAAA,EAAA41B,EAAAzsB,OAAA9d,KAAAqkF,sBAAAzgF,MAAA2mC,EAAA3mC,OAAA5D,KAAAwvC,WACAiH,EAAA3+B,GAAAA,EAAAyyB,EAAAxB,MAAA/oC,KAAAqkF,sBAAAxgF,OAAA0mC,EAAA1mC,QAAA7D,KAAAwvC,YAaAs0C,EAAAjhF,UAAAkjF,mBAAA,SAAAtvC,EAAAzM,EAAA10B,EAAA4wE,EAAA/7C,GAEA,IAAAH,IAAAA,EAAAC,QAEA,OAAA,CAcA,IAAAk8C,IAAA,EACAC,EAAAj8C,EAAAH,EAAAG,aAAAA,CAUA,IAPAH,EAAAe,UAEAq7C,GAAA,GAKAp8C,EAAAkiB,oBAIA,IAAA,GAFA9iB,GAAAY,EAAAZ,SAEAzoC,EAAAyoC,EAAApoC,OAAA,EAAAL,GAAA,EAAAA,IAGAX,KAAA+lF,mBAAAtvC,EAAArN,EAAAzoC,GAAA2U,EAAA4wE,EAAAE,KAEAD,GAAA,EAGAC,GAAA,EAIAh9C,EAAAzoC,GAAAwpC,cAEA+7C,GAAA,GA8BA,OAvBA/7C,KAIA+7C,IAAAC,IAEAn8C,EAAAe,SAEAf,EAAAiB,eAAAyL,aAAAD,EAAAz2C,KAAAslF,YACAa,EAAAn8C,EAAAe,QAAA0T,SAAAz+C,KAAAslF,WAAA3wE,EAAA3U,KAAAslF,WAAAxtE,IAEAkyB,EAAAwU,gBAEA2nC,EAAAn8C,EAAAwU,cAAA/H,KAIAzM,EAAAG,aAEA70B,EAAA00B,EAAAm8C,IAIAA,GAWArC,EAAAjhF,UAAA4hF,YAAA,SAAAtsD,GAEAn4B,KAAAikF,MAAAP,cAAAvrD,EACAn4B,KAAAksC,UAAA5pC,KAAAtC,KAAAikF,MACAjkF,KAAAksC,UAAAg4C,SAAA,EAGAlkF,KAAAimF,mBAAAjmF,KAAAikF,MAAAnkF,OAAAq4B,EAAAkuD,QAAAluD,EAAAmuD,SAEAtmF,KAAA+jF,oBAEA/jF,KAAAikF,MAAAP,cAAAxqB,iBAGAl5D,KAAA+lF,mBAAA/lF,KAAAikF,MAAAnkF,OAAAE,KAAA4oC,SAAA0B,oBAAAtqC,KAAA0kF,kBAAA,IAUAZ,EAAAjhF,UAAA6hF,iBAAA,SAAA16C,EAAAm8C,GAEA,GAAAjmF,GAAAF,KAAAikF,MAAAP,cAEA6C,EAAA,IAAArmF,EAAAsmF,QAAA,IAAAtmF,EAAAumF,KAEAN,KAEAn8C,EAAAu8C,EAAA,eAAA,gBAAA,EACAvmF,KAAAisC,cAAAjC,EAAAu8C,EAAA,YAAA,YAAAvmF,KAAAksC,aAYA43C,EAAAjhF,UAAA0hF,UAAA,SAAApsD,GAEAn4B,KAAAikF,MAAAP,cAAAvrD,EACAn4B,KAAAksC,UAAA5pC,KAAAtC,KAAAikF,MACAjkF,KAAAksC,UAAAg4C,SAAA,EAGAlkF,KAAAimF,mBAAAjmF,KAAAikF,MAAAnkF,OAAAq4B,EAAAkuD,QAAAluD,EAAAmuD,SAEAtmF,KAAA+lF,mBAAA/lF,KAAAikF,MAAAnkF,OAAAE,KAAA4oC,SAAA0B,oBAAAtqC,KAAAwkF,gBAAA,IAUAV,EAAAjhF,UAAA2hF,eAAA,SAAAx6C,EAAAm8C,GAEA,GAAAjmF,GAAAF,KAAAikF,MAAAP,cAEA6C,EAAA,IAAArmF,EAAAsmF,QAAA,IAAAtmF,EAAAumF,MACAC,EAAAH,EAAA,eAAA,aAEAJ,IAEAnmF,KAAAisC,cAAAjC,EAAAu8C,EAAA,UAAA,UAAAvmF,KAAAksC,WAEAlC,EAAA08C,KAEA18C,EAAA08C,IAAA,EACA1mF,KAAAisC,cAAAjC,EAAAu8C,EAAA,aAAA,QAAAvmF,KAAAksC,aAKAlC,EAAA08C,KAEA18C,EAAA08C,IAAA,EACA1mF,KAAAisC,cAAAjC,EAAAu8C,EAAA,iBAAA,iBAAAvmF,KAAAksC,aAYA43C,EAAAjhF,UAAA8hF,YAAA,SAAAxsD,GAEAn4B,KAAAikF,MAAAP,cAAAvrD,EACAn4B,KAAAksC,UAAA5pC,KAAAtC,KAAAikF,MACAjkF,KAAAksC,UAAAg4C,SAAA,EAEAlkF,KAAAimF,mBAAAjmF,KAAAikF,MAAAnkF,OAAAq4B,EAAAkuD,QAAAluD,EAAAmuD,SAEAtmF,KAAA6lF,SAAA,EAEA7lF,KAAA8lF,OAAA,UAEA9lF,KAAA+lF,mBAAA/lF,KAAAikF,MAAAnkF,OAAAE,KAAA4oC,SAAA0B,oBAAAtqC,KAAA4kF,kBAAA,GAEA5kF,KAAAqlF,qBAAArlF,KAAA8lF,SAEA9lF,KAAAqlF,mBAAArlF,KAAA8lF,OACA9lF,KAAAqkF,sBAAAx7C,MAAAi9C,OAAA9lF,KAAA8lF,SAaAhC,EAAAjhF,UAAA+hF,iBAAA,SAAA56C,EAAAm8C,GAEAnmF,KAAAisC,cAAAjC,EAAA,YAAAhqC,KAAAksC,WACAlsC,KAAA8kF,oBAAA96C,EAAAm8C,IAUArC,EAAAjhF,UAAAgiF,WAAA,SAAA1sD,GAEAn4B,KAAAikF,MAAAP,cAAAvrD,EACAn4B,KAAAksC,UAAAg4C,SAAA,EAGAlkF,KAAAimF,mBAAAjmF,KAAAikF,MAAAnkF,OAAAq4B,EAAAkuD,QAAAluD,EAAAmuD,SAEAtmF,KAAAqkF,sBAAAx7C,MAAAi9C,OAAA,UAGA9lF,KAAAimF,mBAAAjmF,KAAAikF,MAAAnkF,OAAAq4B,EAAAkuD,QAAAluD,EAAAmuD,SAEAtmF,KAAA+lF,mBAAA/lF,KAAAikF,MAAAnkF,OAAAE,KAAA4oC,SAAA0B,oBAAAtqC,KAAA8kF,qBAAA,IAUAhB,EAAAjhF,UAAAiiF,oBAAA,SAAA96C,EAAAm8C,GAEAA,GAEAn8C,EAAA28C,QAEA38C,EAAA28C,OAAA,EACA3mF,KAAAisC,cAAAjC,EAAA,YAAAhqC,KAAAksC,YAGAlC,EAAA48C,aAEA5mF,KAAA8lF,OAAA97C,EAAA68C,gBAKA78C,EAAA28C,QAEA38C,EAAA28C,OAAA,EACA3mF,KAAAisC,cAAAjC,EAAA,WAAAhqC,KAAAksC,aAYA43C,EAAAjhF,UAAAkiF,aAAA,SAAA5sD,GAEAn4B,KAAA+jF,oBAEA5rD,EAAA+gC,gBAMA,KAAA,GAHA4tB,GAAA3uD,EAAA2uD,eACAC,EAAAD,EAAA9lF,OAEAL,EAAA,EAAAomF,EAAApmF,EAAAA,IACA,CACA,GAAAqmF,GAAAF,EAAAnmF,GAEAsmF,EAAAjnF,KAAAknF,aAAAF,EAEAC,GAAAvD,cAAAvrD,EAEAn4B,KAAAksC,UAAA5pC,KAAA2kF,EACAjnF,KAAAksC,UAAAg4C,SAAA,EAEAlkF,KAAA+lF,mBAAAkB,EAAAnnF,OAAAE,KAAA4oC,SAAA0B,oBAAAtqC,KAAAglF,mBAAA,GAEAhlF,KAAAmnF,gBAAAF,KAWAnD,EAAAjhF,UAAAmiF,kBAAA,SAAAh7C,EAAAm8C,GAEAA,IAEAn8C,EAAAo9C,YAAA,EACApnF,KAAAisC,cAAAjC,EAAA,aAAAhqC,KAAAksC,aAUA43C,EAAAjhF,UAAAoiF,WAAA,SAAA9sD,GAEAn4B,KAAA+jF,oBAEA5rD,EAAA+gC,gBAMA,KAAA,GAHA4tB,GAAA3uD,EAAA2uD,eACAC,EAAAD,EAAA9lF,OAEAL,EAAA,EAAAomF,EAAApmF,EAAAA,IACA,CACA,GAAAqmF,GAAAF,EAAAnmF,GAEAsmF,EAAAjnF,KAAAknF,aAAAF,EAEAC,GAAAvD,cAAAvrD,EAGAn4B,KAAAksC,UAAA5pC,KAAA2kF,EACAjnF,KAAAksC,UAAAg4C,SAAA,EAGAlkF,KAAA+lF,mBAAAkB,EAAAnnF,OAAAE,KAAA4oC,SAAA0B,oBAAAtqC,KAAAklF,iBAAA,GAEAllF,KAAAmnF,gBAAAF,KAWAnD,EAAAjhF,UAAAqiF,gBAAA,SAAAl7C,EAAAm8C,GAEAA,GAEAnmF,KAAAisC,cAAAjC,EAAA,WAAAhqC,KAAAksC,WAEAlC,EAAAo9C,aAEAp9C,EAAAo9C,YAAA,EACApnF,KAAAisC,cAAAjC,EAAA,MAAAhqC,KAAAksC,aAKAlC,EAAAo9C,aAEAp9C,EAAAo9C,YAAA,EACApnF,KAAAisC,cAAAjC,EAAA,kBAAAhqC,KAAAksC,aAWA43C,EAAAjhF,UAAAsiF,YAAA,SAAAhtD,GAEAn4B,KAAA+jF,oBAEA5rD,EAAA+gC,gBAMA,KAAA,GAHA4tB,GAAA3uD,EAAA2uD,eACAC,EAAAD,EAAA9lF,OAEAL,EAAA,EAAAomF,EAAApmF,EAAAA,IACA,CACA,GAAAqmF,GAAAF,EAAAnmF,GAEAsmF,EAAAjnF,KAAAknF,aAAAF,EAEAC,GAAAvD,cAAAvrD;AAEAn4B,KAAAksC,UAAA5pC,KAAA2kF,EACAjnF,KAAAksC,UAAAg4C,SAAA,EAEAlkF,KAAA+lF,mBAAAkB,EAAAnnF,OAAAE,KAAA4oC,SAAA0B,oBAAAtqC,KAAAolF,kBAAA,GAEAplF,KAAAmnF,gBAAAF,KAWAnD,EAAAjhF,UAAAuiF,iBAAA,SAAAp7C,EAAAm8C,GAEAA,EAAAA,EACAnmF,KAAAisC,cAAAjC,EAAA,YAAAhqC,KAAAksC,YAUA43C,EAAAjhF,UAAAqkF,aAAA,SAAAF,GAEA,GAAAC,GAAAjnF,KAAAokF,oBAAAnqE,KAmBA,OAjBAgtE,KAEAA,EAAA,GAAAxD,IAGAwD,EAAAI,WAAAL,EAAAK,WACArnF,KAAAimF,mBAAAgB,EAAAnnF,OAAAknF,EAAAX,QAAAW,EAAAV,SAEAvmD,UAAAC,aAEAinD,EAAAnnF,OAAA6U,EAAAsyE,EAAAnnF,OAAA6U,EAAA3U,KAAAwvC,WACAy3C,EAAAnnF,OAAAgY,EAAAmvE,EAAAnnF,OAAAgY,EAAA9X,KAAAwvC,YAGAw3C,EAAAM,QAAAL,EAAAnnF,OAAA6U,EACAqyE,EAAAO,QAAAN,EAAAnnF,OAAAgY,EAEAmvE,GAUAnD,EAAAjhF,UAAAskF,gBAAA,SAAAF,GAEAjnF,KAAAokF,oBAAAz5E,KAAAs8E,IAOAnD,EAAAjhF,UAAA0C,QAAA,WACAvF,KAAAylF,eAEAzlF,KAAA4oC,SAAA,KAEA5oC,KAAAikF,MAAA,KAEAjkF,KAAAksC,UAAA,KAEAlsC,KAAAokF,oBAAA,KAEApkF,KAAAqkF,sBAAA,KAEArkF,KAAAukF,UAAA,KACAvkF,KAAAwkF,eAAA,KAGAxkF,KAAAykF,YAAA,KACAzkF,KAAA0kF,iBAAA,KAEA1kF,KAAA2kF,YAAA,KACA3kF,KAAA4kF,iBAAA,KAEA5kF,KAAA6kF,WAAA,KACA7kF,KAAA8kF,oBAAA,KAGA9kF,KAAA+kF,aAAA,KACA/kF,KAAAglF,kBAAA,KAEAhlF,KAAAilF,WAAA,KACAjlF,KAAAklF,gBAAA,KAEAllF,KAAAmlF,YAAA,KACAnlF,KAAAolF,iBAAA,KAEAplF,KAAAslF,WAAA,MAGA97C,EAAA4C,cAAAC,eAAA,cAAAy3C,GACAt6C,EAAA8C,eAAAD,eAAA,cAAAy3C,KAEAv3C,UAAA,GAAAi7C,oBAAA,IAAAC,sBAAA,MAAAC,KAAA,SAAAhnF,EAAAjB,EAAAD,GAWAC,EAAAD,SACAikF,gBAAA/iF,EAAA,qBACAojF,mBAAApjF,EAAA,wBACAinF,kBAAAjnF,EAAA,0BAGA8mF,oBAAA,IAAAI,uBAAA,IAAAH,sBAAA,MAAAI,KAAA,SAAAnnF,EAAAjB,EAAAD,GAeA,GAAAmoF,IAIAx9C,aAAA,EAIAy8C,YAAA,EAIA16B,qBAAA,EAIA26B,cAAA,UAQAF,OAAA,EAKAS,YAAA,EAGA3nF,GAAAD,QAAAmoF,OAEAG,KAAA,SAAApnF,EAAAjB,EAAAD,GAOA,QAAAotB,GAAAmP,EAAA93B,GACA,GAAA3B,MACAylF,EAAAhsD,EAAAz5B,KAAA0lF,qBAAA,QAAA,GACAC,EAAAlsD,EAAAz5B,KAAA0lF,qBAAA,UAAA,EAEA1lF,GAAA0kE,KAAA+gB,EAAAG,aAAA,QACA5lF,EAAAyI,KAAAuU,SAAAyoE,EAAAG,aAAA,QAAA,IACA5lF,EAAA6lE,WAAA7oD,SAAA2oE,EAAAC,aAAA,cAAA,IACA5lF,EAAA2xE,QAKA,KAAA,GAFAkU,GAAApsD,EAAAz5B,KAAA0lF,qBAAA,QAEArnF,EAAA,EAAAA,EAAAwnF,EAAAnnF,OAAAL,IACA,CACA,GAAAyzE,GAAA90D,SAAA6oE,EAAAxnF,GAAAunF,aAAA,MAAA,IAEAE,EAAA,GAAA5+C,GAAAuJ,UACAzzB,SAAA6oE,EAAAxnF,GAAAunF,aAAA,KAAA,IAAAjkF,EAAA6oD,MAAAn4C,EACA2K,SAAA6oE,EAAAxnF,GAAAunF,aAAA,KAAA,IAAAjkF,EAAA6oD,MAAAh1C,EACAwH,SAAA6oE,EAAAxnF,GAAAunF,aAAA,SAAA,IACA5oE,SAAA6oE,EAAAxnF,GAAAunF,aAAA,UAAA,IAGA5lF,GAAA2xE,MAAAG,IACAG,QAAAj1D,SAAA6oE,EAAAxnF,GAAAunF,aAAA,WAAA,IACA1T,QAAAl1D,SAAA6oE,EAAAxnF,GAAAunF,aAAA,WAAA,IACAzT,SAAAn1D,SAAA6oE,EAAAxnF,GAAAunF,aAAA,YAAA,IACA5T,WACArwE,QAAA,GAAAulC,GAAA9lC,QAAAO,EAAAu5C,YAAA4qC,IAMA,GAAAC,GAAAtsD,EAAAz5B,KAAA0lF,qBAAA,UACA,KAAArnF,EAAA,EAAAA,EAAA0nF,EAAArnF,OAAAL,IACA,CACA,GAAA2nF,GAAAhpE,SAAA+oE,EAAA1nF,GAAAunF,aAAA,SAAA,IACAK,EAAAjpE,SAAA+oE,EAAA1nF,GAAAunF,aAAA,UAAA,IACA75B,EAAA/uC,SAAA+oE,EAAA1nF,GAAAunF,aAAA,UAAA,GAEA5lF,GAAA2xE,MAAAsU,GAAAjU,QAAAgU,GAAAj6B,EAGAtyB,EAAAysD,WAAAlmF,EAIA4vE,EAAAW,WAAAkB,MAAAzxE,EAAA0kE,MAAA1kE,EAvDA,GAAA64B,GAAAz6B,EAAA,mBAAAy6B,SACAqO,EAAA9oC,EAAA,WACAwxE,EAAAxxE,EAAA,aACA6jB,EAAA7jB,EAAA,OAwDAjB,GAAAD,QAAA,WAEA,MAAA,UAAAu8B,EAAAzb,GAGA,IAAAyb,EAAAz5B,OAAAy5B,EAAAmB,MAEA,MAAA5c,IAIA,IACA,IAAAyb,EAAAz5B,KAAA0lF,qBAAA,QAAAhnF,QACA,IAAA+6B,EAAAz5B,KAAA0lF,qBAAA,QAAAhnF,QACA,OAAA+6B,EAAAz5B,KAAA0lF,qBAAA,QAAA,GAAAE,aAAA,QAGA,MAAA5nE,IAGA,IAAAmoE,GAAAlkE,EAAAoB,QAAAoW,EAAAjO,IAEA,OAAA26D,IACAA,EAAA,IAGAzoF,KAAAq6B,SAAAouD,IAEA,MAAAzoF,KAAAq6B,QAAA3V,OAAA1kB,KAAAq6B,QAAAr5B,OAAA,KACAynF,GAAA,KAIAA,EAAAA,EAAAx5E,QAAAjP,KAAAq6B,QAAA,KAIAouD,GAAA,MAAAA,EAAA/jE,OAAA+jE,EAAAznF,OAAA,KACAynF,GAAA,IAEA,IAAAC,GAAAD,EAAA1sD,EAAAz5B,KAAA0lF,qBAAA,QAAA,GAAAE,aAAA,OACA,IAAA1+C,EAAAoB,MAAAo5B,aAAA0kB,GAEA97D,EAAAmP,EAAAyN,EAAAoB,MAAAo5B,aAAA0kB,IACApoE,QAEA,CACA,GAAAqoE,IACAhsD,YAAAZ,EAAAY,YACAC,SAAAzB,EAAAiB,UAAA8C,MACAnC,SAAAhB,EAAAgB,SAAA6rD,cAGA5oF,MAAAo7B,IAAAW,EAAAvtB,KAAA,SAAAk6E,EAAAC,EAAA,SAAA5kE,GACA6I,EAAAmP,EAAAhY,EAAA9f,SACAqc,WAMAisB,UAAA,GAAAs8C,YAAA,IAAAtkE,KAAA,GAAAuiB,kBAAA,KAAAgiD,KAAA,SAAApoF,EAAAjB,EAAAD,GAWAC,EAAAD,SACA46B,OAAA15B,EAAA,YAGAqoF,iBAAAroF,EAAA,sBACAsoF,kBAAAtoF,EAAA,uBACAuoF,cAAAvoF,EAAA,mBACAy6B,SAAAz6B,EAAA,mBAAAy6B,YAGA+tD,qBAAA,IAAAC,WAAA,IAAAC,sBAAA,IAAAC,kBAAA,IAAAviD,kBAAA,KAAAwiD,KAAA,SAAA5oF,EAAAjB,EAAAD,GA4BA,QAAA46B,GAAAC,EAAAniB,GAEAqxE,EAAAxoF,KAAAf,KAAAq6B,EAAAniB,EAEA,KAAA,GAAAvX,GAAA,EAAAA,EAAAy5B,EAAAovD,gBAAAxoF,SAAAL,EACAX,KAAA47B,IAAAxB,EAAAovD,gBAAA7oF,MAhCA,GAAA4oF,GAAA7oF,EAAA,mBACAuoF,EAAAvoF,EAAA,mBACAsoF,EAAAtoF,EAAA,uBACAqoF,EAAAroF,EAAA,qBAiCA05B,GAAAv3B,UAAA0M,OAAA/L,OAAA+lF,EAAA1mF,WACAu3B,EAAAv3B,UAAAmH,YAAAowB,EAEA36B,EAAAD,QAAA46B,EAEAA,EAAAovD,iBAEAD,EAAA9kD,WAAAG,QAAAC,KAEAokD,EAEAD,EAEAD,GAGA3uD,EAAAqvD,kBAAA,SAAA91E,GACAymB,EAAAovD,gBAAA7+E,KAAAgJ,GAIA,IAAAwnB,GAAAouD,EAAApuD,QAEAA,GAAA4I,oBAAA,MAAA5I,EAAAmB,kBAAAiE,YAEA2oD,qBAAA,IAAAE,sBAAA,IAAAC,kBAAA,IAAAviD,kBAAA,KAAA4iD,KAAA,SAAAhpF,EAAAjB,EAAAD,GACA,GAAA27B,GAAAz6B,EAAA,mBAAAy6B,SACA5W,EAAA7jB,EAAA,QACA8oC,EAAA9oC,EAAA,UAEAjB,GAAAD,QAAA,WAEA,MAAA,UAAAu8B,EAAAzb,GAGA,IAAAyb,EAAAz5B,OAAAy5B,EAAAkB,SAAAlB,EAAAz5B,KAAAszE,OAEA,MAAAt1D,IAGA,IAAAqoE,IACAhsD,YAAAZ,EAAAY,YACAC,SAAAzB,EAAAiB,UAAA8C,MACAnC,SAAAhB,EAAAgB,SAAA6rD,eAGAe,EAAAplE,EAAAoB,QAAAoW,EAAAjO,IAAA7e,QAAAjP,KAAAq6B,QAAA,KAEAmV,EAAAhG,EAAAoB,MAAA+/B,mBAAA5uC,EAAAjO,IAGA9tB,MAAAo7B,IAAAW,EAAAvtB,KAAA,SAAAm7E,EAAA,IAAA5tD,EAAAz5B,KAAAsnF,KAAAlf,MAAAie,EAAA,SAAA5kE,GAEAgY,EAAA6oC,WAEA,IAAAgR,GAAA75C,EAAAz5B,KAAAszE,MAEA,KAAA,GAAAj1E,KAAAi1E,GACA,CACA,GAAArrC,GAAAqrC,EAAAj1E,GAAAmsD,KAEA,IAAAviB,EACA,CACA,GAAAx/B,GAAA,KACAqa,EAAA,IAqBA,IAlBAra,EADA6qE,EAAAj1E,GAAAkpF,QACA,GAAArgD,GAAAuJ,UAAAxI,EAAA51B,EAAA41B,EAAAzyB,EAAAyyB,EAAAnZ,EAAAmZ,EAAA9wB,GAGA,GAAA+vB,GAAAuJ,UAAAxI,EAAA51B,EAAA41B,EAAAzyB,EAAAyyB,EAAA9wB,EAAA8wB,EAAAnZ,GAIAwkD,EAAAj1E,GAAAmpF,UAEA1kE,EAAA,GAAAokB,GAAAuJ,UACA6iC,EAAAj1E,GAAAopF,iBAAAp1E,EAAA66B,EACAomC,EAAAj1E,GAAAopF,iBAAAjyE,EAAA03B,EACAomC,EAAAj1E,GAAAqpF,WAAAvwE,EAAA+1B,EACAomC,EAAAj1E,GAAAqpF,WAAA54D,EAAAoe,IAKAomC,EAAAj1E,GAAAkpF,QACA,CACA,GAAAxtB,GAAAtxD,EAAAnH,KACAmH,GAAAnH,MAAAmH,EAAAlH,OACAkH,EAAAlH,OAAAw4D,EAGAtxD,EAAA4J,GAAA66B,EACAzkC,EAAA+M,GAAA03B,EACAzkC,EAAAnH,OAAA4rC,EACAzkC,EAAAlH,QAAA2rC,EAEAzT,EAAA6oC,SAAAjkE,GAAA,GAAA6oC,GAAA9lC,QAAAqgB,EAAA9f,QAAAu5C,YAAAzyC,EAAAA,EAAAytC,QAAApzB,EAAAwwD,EAAAj1E,GAAAkpF,SAGArgD,EAAAoB,MAAAo5B,aAAArjE,GAAAo7B,EAAA6oC,SAAAjkE,IAIA2f,UAKAisB,UAAA,GAAAhoB,KAAA,GAAAuiB,kBAAA,KAAAmjD,KAAA,SAAAvpF,EAAAjB,EAAAD,GACA,GAAAgqC,GAAA9oC,EAAA,UAEAjB,GAAAD,QAAA,WAEA,MAAA,UAAAu8B,EAAAzb,GAGA,GAAAyb,EAAAz5B,MAAAy5B,EAAAoB,QACA,CACA,GAAAqgB,GAAA,GAAAhU,GAAAyc,YAAAlqB,EAAAz5B,KAAA,KAAAknC,EAAAoB,MAAA+/B,mBAAA5uC,EAAAjO,KACA0vB,GAAAosB,SAAA7tC,EAAAjO,IACAiO,EAAA93B,QAAA,GAAAulC,GAAA9lC,QAAA85C,GAEAhU,EAAAoB,MAAAy/B,iBAAAtuC,EAAAjO,KAAA0vB,EACAhU,EAAAoB,MAAAo5B,aAAAjoC,EAAAjO,KAAAiO,EAAA93B,QAGAqc,QAIAisB,UAAA,KAAA29C,KAAA,SAAAxpF,EAAAjB,EAAAD,GAgBA,QAAAizE,GAAAxuE,EAAAg4D,EAAA7P,EAAApL,EAAAmpC,GAEA3gD,EAAAiH,UAAA1vC,KAAAf,MAQAA,KAAA8vD,SAAA,KAOA9vD,KAAAosD,IAAAA,GAAA,GAAAvkD,eAAA,EAAA,EACA,EAAA,EACA,EAAA,EACA,EAAA,IAOA7H,KAAAi8D,SAAAA,GAAA,GAAAp0D,eAAA,EAAA,EACA,IAAA,EACA,IAAA,IACA,EAAA,MAMA7H,KAAAghD,QAAAA,GAAA,GAAAqB,cAAA,EAAA,EAAA,EAAA,IAOAriD,KAAA+J,OAAA,EASA/J,KAAA23C,UAAAnO,EAAAiE,YAAAC,OAOA1tC,KAAAoqF,cAAA,EAQApqF,KAAAmqF,SAAAA,GAAA1X,EAAA9jC,WAAA07C,cAGArqF,KAAAiE,QAAAA,EAOAjE,KAAAqN,OAAA,KA5FA,GAAAm8B,GAAA9oC,EAAA,WACA63C,EAAA,GAAA/O,GAAAwL,MACAs1C,EAAA,GAAA9gD,GAAAuP,OA8FA05B,GAAA5vE,UAAA0M,OAAA/L,OAAAgmC,EAAAiH,UAAA5tC,WACA4vE,EAAA5vE,UAAAmH,YAAAyoE,EACAhzE,EAAAD,QAAAizE,EAEAljE,OAAAuhC,iBAAA2hC,EAAA5vE,WAOAoB,SACA+L,IAAA,WAEA,MAAAhQ,MAAA8vD,UAEA5/C,IAAA,SAAAf,GAEAnP,KAAA8vD,WAAA3gD,IAKAnP,KAAA8vD,SAAA3gD,EAEAA,IAGAA,EAAAquC,YAAAmZ,UAEA32D,KAAAwjE,mBAIAr0D,EAAA8X,KAAA,SAAAjnB,KAAAwjE,iBAAAxjE,YAaAyyE,EAAA5vE,UAAAuxC,aAAA,SAAAxL,GAEAA,EAAA+U,kBAAA/U,EAAAmD,QAAAkmC,MACArpC,EAAAmD,QAAAkmC,KAAAx/B,OAAAzyC,OASAyyE,EAAA5vE,UAAA0xC,cAAA,SAAA3L,GAEA,GAAA7Q,GAAA6Q,EAAA7Q,QAEAtb,EAAAzc,KAAAirC,cAEArC,GAAAmH,YAEAhY,EAAA8e,aAAAp6B,EAAAhc,EAAAgc,EAAAzX,EAAAyX,EAAA4X,EAAA5X,EAAA2uB,EAAA,EAAA3uB,EAAAyuB,GAAA,EAAAzuB,EAAA0uB,IAIApT,EAAA8e,aAAAp6B,EAAAhc,EAAAgc,EAAAzX,EAAAyX,EAAA4X,EAAA5X,EAAA2uB,EAAA3uB,EAAAyuB,GAAAzuB,EAAA0uB,IAGAnrC,KAAAmqF,WAAA1X,EAAA9jC,WAAA07C,cAEArqF,KAAAuqF,0BAAAxyD,GAIA/3B,KAAAwqF,uBAAAzyD,IAUA06C,EAAA5vE,UAAA0nF,0BAAA,SAAAxyD,GASA,IAAA,GANAkkC,GAAAj8D,KAAAi8D,SACA7P,EAAApsD,KAAAosD,IAEAprD,EAAAi7D,EAAAj7D,OAAA,EAGAL,EAAA,EAAAK,EAAA,EAAAL,EAAAA,IACA,CAEA,GAAAyT,GAAA,EAAAzT,CACAX,MAAAyqF,0BAAA1yD,EAAAkkC,EAAA7P,EAAAh4C,EAAAA,EAAA,EAAAA,EAAA,KAUAq+D,EAAA5vE,UAAA2nF,uBAAA,SAAAzyD,GAUA,IAAA,GAPAkkC,GAAAj8D,KAAAi8D,SACA7P,EAAApsD,KAAAosD,IACApL,EAAAhhD,KAAAghD,QAEAhgD,EAAAggD,EAAAhgD,OAGAL,EAAA,EAAAK,EAAAL,EAAAA,GAAA,EACA,CAEA,GAAA+pF,GAAA,EAAA1pC,EAAArgD,GAAA8wC,EAAA,EAAAuP,EAAArgD,EAAA,GAAAgxC,EAAA,EAAAqP,EAAArgD,EAAA,EACAX,MAAAyqF,0BAAA1yD,EAAAkkC,EAAA7P,EAAAs+B,EAAAj5C,EAAAE,KAeA8gC,EAAA5vE,UAAA4nF,0BAAA,SAAA1yD,EAAAkkC,EAAA7P,EAAAs+B,EAAAj5C,EAAAE,GAEA,GAAAg5C,GAAA3qF,KAAA8vD,SAAAtS,YAAAh2C,OACAojF,EAAA5qF,KAAA8vD,SAAAtS,YAAA55C,MACAinF,EAAA7qF,KAAA8vD,SAAAtS,YAAA35C,OAEA4sD,EAAAwL,EAAAyuB,GAAApwC,EAAA2hB,EAAAxqB,GAAA+I,EAAAyhB,EAAAtqB,GACA+e,EAAAuL,EAAAyuB,EAAA,GAAAnwC,EAAA0hB,EAAAxqB,EAAA,GAAAgJ,EAAAwhB,EAAAtqB,EAAA,GAEAm5C,EAAA1+B,EAAAs+B,GAAAE,EAAAG,EAAA3+B,EAAA3a,GAAAm5C,EAAAI,EAAA5+B,EAAAza,GAAAi5C,EACAK,EAAA7+B,EAAAs+B,EAAA,GAAAG,EAAAK,EAAA9+B,EAAA3a,EAAA,GAAAo5C,EAAAM,EAAA/+B,EAAAza,EAAA,GAAAk5C,CAEA,IAAA7qF,KAAAoqF,cAAA,EACA,CACA,GAAAgB,GAAAprF,KAAAoqF,cAAApqF,KAAAirC,eAAAxqC,EACA4qF,EAAArrF,KAAAoqF,cAAApqF,KAAAirC,eAAAG,EACAkgD,GAAA76B,EAAAnW,EAAAE,GAAA,EACA+wC,GAAA76B,EAAAnW,EAAAE,GAAA,EAEA+wC,EAAA/6B,EAAA66B,EACAG,EAAA/6B,EAAA66B,EAEAhnC,EAAA/uC,KAAAylC,KAAAuwC,EAAAA,EAAAC,EAAAA,EACAh7B,GAAA66B,EAAAE,EAAAjnC,GAAAA,EAAA6mC,GACA16B,EAAA66B,EAAAE,EAAAlnC,GAAAA,EAAA8mC,GAIAG,EAAAlxC,EAAAgxC,EACAG,EAAAlxC,EAAAgxC,EAEAhnC,EAAA/uC,KAAAylC,KAAAuwC,EAAAA,EAAAC,EAAAA,GACAnxC,EAAAgxC,EAAAE,EAAAjnC,GAAAA,EAAA6mC,GACA7wC,EAAAgxC,EAAAE,EAAAlnC,GAAAA,EAAA8mC,GAEAG,EAAAhxC,EAAA8wC,EACAG,EAAAhxC,EAAA8wC,EAEAhnC,EAAA/uC,KAAAylC,KAAAuwC,EAAAA,EAAAC,EAAAA,GACAjxC,EAAA8wC,EAAAE,EAAAjnC,GAAAA,EAAA6mC,GACA3wC,EAAA8wC,EAAAE,EAAAlnC,GAAAA,EAAA8mC,GAGAtzD,EAAA48B,OACA58B,EAAAs7B,YAGAt7B,EAAAmhB,OAAAuX,EAAAC,GACA34B,EAAAohB,OAAAmB,EAAAC,GACAxiB,EAAAohB,OAAAqB,EAAAC,GAEA1iB,EAAAu7B,YAEAv7B,EAAA88B,MAGA,IAAA/rC,GAAAgiE,EAAAI,EAAAD,EAAAD,EAAAD,EAAAI,EAAAD,EAAAF,EAAAC,EAAAF,EAAAD,EAAAK,EACAO,EAAAj7B,EAAAy6B,EAAAD,EAAAzwC,EAAAF,EAAA6wC,EAAAD,EAAA1wC,EAAAywC,EAAA3wC,EAAAmW,EAAA06B,EACAQ,EAAAb,EAAAxwC,EAAAmW,EAAAu6B,EAAAD,EAAAvwC,EAAAF,EAAA0wC,EAAAv6B,EAAAs6B,EAAAD,EAAAtwC,EACAoxC,EAAAd,EAAAI,EAAA1wC,EAAAywC,EAAA3wC,EAAA0wC,EAAAv6B,EAAAs6B,EAAAI,EAAA16B,EAAAy6B,EAAAF,EAAAC,EAAAF,EAAAvwC,EAAAswC,EAAAxwC,EAAA6wC,EACAU,EAAAn7B,EAAAw6B,EAAAD,EAAAxwC,EAAAF,EAAA4wC,EAAAD,EAAAzwC,EAAAwwC,EAAA1wC,EAAAmW,EAAAy6B,EACAW,EAAAhB,EAAAvwC,EAAAmW,EAAAs6B,EAAAD,EAAAtwC,EAAAF,EAAAywC,EAAAt6B,EAAAq6B,EAAAD,EAAArwC,EACAsxC,EAAAjB,EAAAI,EAAAzwC,EAAAwwC,EAAA1wC,EAAAywC,EAAAt6B,EAAAq6B,EAAAI,EAAAz6B,EAAAw6B,EAAAF,EAAAC,EAAAF,EAAAtwC,EAAAqwC,EAAAvwC,EAAA4wC,CAEApzD,GAAAtb,UAAAivE,EAAA5iE,EAAA+iE,EAAA/iE,EACA6iE,EAAA7iE,EAAAgjE,EAAAhjE,EACA8iE,EAAA9iE,EAAAijE,EAAAjjE,GAEAiP,EAAAk1B,UAAA09B,EAAA,EAAA,GACA5yD,EAAA+8B,WAWA2d,EAAA5vE,UAAAmpF,eAAA,SAAAvZ,GAEA,GAAA16C,GAAA/3B,KAAA+3B,QACAkkC,EAAAwW,EAAAxW,SAEAj7D,EAAAi7D,EAAAj7D,OAAA,CAGA+2B,GAAAs7B,WACA,KAAA,GAAA1yD,GAAA,EAAAK,EAAA,EAAAL,EAAAA,IACA,CAEA,GAAAyT,GAAA,EAAAzT,EAEA8vD,EAAAwL,EAAA7nD,GAAAkmC,EAAA2hB,EAAA7nD,EAAA,GAAAomC,EAAAyhB,EAAA7nD,EAAA,GACAs8C,EAAAuL,EAAA7nD,EAAA,GAAAmmC,EAAA0hB,EAAA7nD,EAAA,GAAAqmC,EAAAwhB,EAAA7nD,EAAA,EAEA2jB,GAAAmhB,OAAAuX,EAAAC,GACA34B,EAAAohB,OAAAmB,EAAAC,GACAxiB,EAAAohB,OAAAqB,EAAAC,GAGA1iB,EAAA06B,UAAA,UACA16B,EAAA4kB,OACA5kB,EAAAu7B,aASAmf,EAAA5vE,UAAA2gE,iBAAA,WAEAxjE,KAAAisF,aAAA,GASAxZ,EAAA5vE,UAAAwoC,UAAA,SAAAiL,GAEA,IAAAt2C,KAAA8yC,eAAA,CAiBA,IAAA,GAhBA7H,GAAAqL,GAAAt2C,KAAAirC,eAEAxqC,EAAAwqC,EAAAxqC,EACAuE,EAAAimC,EAAAjmC,EACAqvB,EAAA4W,EAAA5W,EACA+W,EAAAH,EAAAG,EACAF,EAAAD,EAAAC,GACAC,EAAAF,EAAAE,GAEApY,IAAA+C,EAAAA,GACA9C,IAAA8C,EAAAA,GAEAjD,EAAAiD,EAAAA,EACAhD,EAAAgD,EAAAA,EAEAmmC,EAAAj8D,KAAAi8D,SACAt7D,EAAA,EAAAP,EAAA67D,EAAAj7D,OAAAZ,EAAAO,EAAAA,GAAA,EAAA,CACA,GAAAurF,GAAAjwB,EAAAt7D,GAAAwrF,EAAAlwB,EAAAt7D,EAAA,GACAgU,EAAAlU,EAAAyrF,EAAA73D,EAAA83D,EAAAjhD,EACApzB,EAAAszB,EAAA+gD,EAAAnnF,EAAAknF,EAAA/gD,CAEAtY,GAAAA,EAAAle,EAAAA,EAAAke,EACAC,EAAAA,EAAAhb,EAAAA,EAAAgb,EAEAC,EAAApe,EAAAoe,EAAApe,EAAAoe,EACAC,EAAAlb,EAAAkb,EAAAlb,EAAAkb,EAGA,GAAAH,MAAAiD,EAAAA,IAAA9C,IAAA8C,EAAAA,EACA,MAAA0T,GAAAuJ,UAAAC,KAGA,IAAAT,GAAAvyC,KAAAqzC,OAEAd,GAAA59B,EAAAke,EACA0f,EAAA3uC,MAAAmvB,EAAAF,EAEA0f,EAAAz6B,EAAAgb,EACAyf,EAAA1uC,OAAAmvB,EAAAF,EAGA9yB,KAAA8yC,eAAAP,EAGA,MAAAvyC,MAAA8yC,gBASA2/B,EAAA5vE,UAAA27C,cAAA,SAAA/H,GACA,IAAAz2C,KAAAqrC,YAAAoT,SAAAhI,EAAA9hC,EAAA8hC,EAAA3+B,GACA,OAAA,CAEA9X,MAAAirC,eAAAyL,aAAAD,EAAA8B,EAEA,IAEA53C,GAAAyU,EAFA6mD,EAAAj8D,KAAAi8D,SACAnjB,EAAAwxC,EAAAxxC,MAGA,IAAA94C,KAAAmqF,WAAA1X,EAAA9jC,WAAAK,UAAA,CACA,GAAAgS,GAAAhhD,KAAAghD,OAGA,KAFA5rC,EAAApV,KAAAghD,QAAAhgD,OAEAL,EAAA,EAAAyU,EAAAzU,EAAAA,GAAA,EAAA,CACA,GAAAyrF,GAAA,EAAAprC,EAAArgD,GAAA0rF,EAAA,EAAArrC,EAAArgD,EAAA,GAAA2rF,EAAA,EAAAtrC,EAAArgD,EAAA,EAOA,IANAm4C,EAAA,GAAAmjB,EAAAmwB,GACAtzC,EAAA,GAAAmjB,EAAAmwB,EAAA,GACAtzC,EAAA,GAAAmjB,EAAAowB,GACAvzC,EAAA,GAAAmjB,EAAAowB,EAAA,GACAvzC,EAAA,GAAAmjB,EAAAqwB,GACAxzC,EAAA,GAAAmjB,EAAAqwB,EAAA,GACAhC,EAAA7rC,SAAAlG,EAAA5jC,EAAA4jC,EAAAzgC,GACA,OAAA,OAKA,KADA1C,EAAA6mD,EAAAj7D,OACAL,EAAA,EAAAyU,EAAAzU,EAAAA,GAAA,EAOA,GANAm4C,EAAA,GAAAmjB,EAAAt7D,GACAm4C,EAAA,GAAAmjB,EAAAt7D,EAAA,GACAm4C,EAAA,GAAAmjB,EAAAt7D,EAAA,GACAm4C,EAAA,GAAAmjB,EAAAt7D,EAAA,GACAm4C,EAAA,GAAAmjB,EAAAt7D,EAAA,GACAm4C,EAAA,GAAAmjB,EAAAt7D,EAAA,GACA2pF,EAAA7rC,SAAAlG,EAAA5jC,EAAA4jC,EAAAzgC,GACA,OAAA,CAIA,QAAA,GAYA26D,EAAA9jC,YACA07C,cAAA,EACAr7C,UAAA,KAGAzC,UAAA,KAAAggD,KAAA,SAAA7rF,EAAAjB,EAAAD,GAqBA,QAAAgtF,GAAAvoF,EAAAwoF,EAAAC,GAEAja,EAAA1xE,KAAAf,KAAAiE,GASAjE,KAAA2sF,QAAA,EAEA3sF,KAAAysF,UAAAA,GAAA,GACAzsF,KAAA0sF,UAAAA,GAAA,GAEA1sF,KAAAmqF,SAAA1X,EAAA9jC,WAAAK,UACAhvC,KAAA2xD,UArCA,GAAA8gB,GAAA/xE,EAAA,SA2CA8rF,GAAA3pF,UAAA0M,OAAA/L,OAAAivE,EAAA5vE,WACA2pF,EAAA3pF,UAAAmH,YAAAwiF,EACA/sF,EAAAD,QAAAgtF,EAMAA,EAAA3pF,UAAA8uD,QAAA,WAEA,GAAA3wB,GAAAhhC,KAAAysF,UAAAzsF,KAAA0sF,UACA9pC,KACAmf,KACA3V,KACApL,KACA/8C,EAAAjE,KAAAiE,QAKA2oF,EAAA5sF,KAAAysF,UAAA,EACAI,EAAA7sF,KAAA0sF,UAAA,EACA/rF,EAAA,EAEAmsF,EAAA7oF,EAAAL,MAAAgpF,EACAG,EAAA9oF,EAAAJ,OAAAgpF,CAEA,KAAAlsF,EAAA,EAAAqgC,EAAArgC,EAAAA,IAAA,CAEA,GAAAgU,GAAAhU,EAAAX,KAAAysF,UACA30E,EAAAnX,EAAAX,KAAAysF,UAAA,CAGA7pC,GAAAj4C,KAAAgK,EAAAm4E,EACAh1E,EAAAi1E,GAGA3gC,EAAAzhD,KAAA1G,EAAAusD,KAAAC,IAAAxsD,EAAAusD,KAAAlW,GAAAr2C,EAAAusD,KAAAC,KAAA97C,GAAA3U,KAAAysF,UAAA,IAAAxoF,EAAAusD,KAAAE,IAAAzsD,EAAAusD,KAAAnS,GAAAp6C,EAAAusD,KAAAE,KAAA54C,GAAA9X,KAAA0sF,UAAA,KAKA,GAAAM,GAAAJ,EAAAC,CAEA,KAAAlsF,EAAA,EAAAqsF,EAAArsF,EAAAA,IAAA,CAEA,GAAAssF,GAAAtsF,EAAAisF,EACAM,EAAAvsF,EAAAisF,EAAA,EAGAz9E,EAAA+9E,EAAAltF,KAAAysF,UAAAQ,EACAE,EAAAD,EAAAltF,KAAAysF,UAAAQ,EAAA,EACAG,GAAAF,EAAA,GAAAltF,KAAAysF,UAAAQ,EACAI,GAAAH,EAAA,GAAAltF,KAAAysF,UAAAQ,EAAA,CAEAjsC,GAAAr2C,KAAAwE,EAAAg+E,EAAAC,GACApsC,EAAAr2C,KAAAwiF,EAAAE,EAAAD,GAKAptF,KAAAi8D,SAAA,GAAAp0D,cAAA+6C,GACA5iD,KAAAosD,IAAA,GAAAvkD,cAAAukD,GACApsD,KAAA+hE,OAAA,GAAAl6D,cAAAk6D,GACA/hE,KAAAghD,QAAA,GAAAqB,aAAArB,IAQAwrC,EAAA3pF,UAAA2gE,iBAAA,WAEAiP,EAAA5vE,UAAA2gE,iBAAAziE,KAAAf,MAGAA,KAAA2sF,QACA3sF,KAAA2xD,aAIA27B,SAAA,MAAAC,KAAA,SAAA7sF,EAAAjB,EAAAD,GAqBA,QAAAkzE,GAAAzuE,EAAA60C,GAEA25B,EAAA1xE,KAAAf,KAAAiE,GAKAjE,KAAA84C,OAAAA,EAKA94C,KAAAi8D,SAAA,GAAAp0D,cAAA,EAAAixC,EAAA93C,QAKAhB,KAAAosD,IAAA,GAAAvkD,cAAA,EAAAixC,EAAA93C,QAKAhB,KAAA+hE,OAAA,GAAAl6D,cAAA,EAAAixC,EAAA93C,QAKAhB,KAAAghD,QAAA,GAAAqB,aAAA,EAAAvJ,EAAA93C,QASAhB,KAAA2sF,QAAA,EAEA3sF,KAAA2xD,UA1DA,GAAA8gB,GAAA/xE,EAAA,UACA8oC,EAAA9oC,EAAA,UA8DAgyE,GAAA7vE,UAAA0M,OAAA/L,OAAAivE,EAAA5vE,WACA6vE,EAAA7vE,UAAAmH,YAAA0oE,EACAjzE,EAAAD,QAAAkzE,EAMAA,EAAA7vE,UAAA8uD,QAAA,WAEA,GAAA7Y,GAAA94C,KAAA84C,MAGA,MAAAA,EAAA93C,OAAA,IAAAhB,KAAA8vD,SAAAU,KAAA,CAKA,GAAApE,GAAApsD,KAAAosD,IAEApL,EAAAhhD,KAAAghD,QACA+gB,EAAA/hE,KAAA+hE,OAEAxR,EAAAvwD,KAAA8vD,SAAAU,KACA1tD,EAAA,GAAA0mC,GAAAwL,MAAAub,EAAAE,GAAAF,EAAAG,IACA88B,EAAA,GAAAhkD,GAAAwL,MAAAub,EAAA/V,GAAA+V,EAAAE,GAAAF,EAAA9V,GAAA8V,EAAAG,GAEAtE,GAAA,GAAA,EAAAtpD,EAAA6R,EACAy3C,EAAA,GAAA,EAAAtpD,EAAAgV,EACAs0C,EAAA,GAAA,EAAAtpD,EAAA6R,EACAy3C,EAAA,GAAA,EAAAohC,EAAA11E,EAAAhV,EAAAgV,EAEAiqD,EAAA,GAAA,EACAA,EAAA,GAAA,EAEA/gB,EAAA,GAAA,EACAA,EAAA,GAAA,CAKA,KAAA,GAFAvK,GAAAriC,EAAAi6C,EADArtB,EAAA8X,EAAA93C,OAGAL,EAAA,EAAAqgC,EAAArgC,EAAAA,IAEA81C,EAAAqC,EAAAn4C,GACAyT,EAAA,EAAAzT,EAEA0tD,EAAA1tD,GAAAqgC,EAAA,GAEAorB,EAAAh4C,GAAAi6C,EAAAm/B,EAAA74E,EAAA7R,EAAA6R,EACAy3C,EAAAh4C,EAAA,GAAA,EAAAtR,EAAAgV,EAEAs0C,EAAAh4C,EAAA,GAAAi6C,EAAAm/B,EAAA74E,EAAA7R,EAAA6R,EACAy3C,EAAAh4C,EAAA,GAAA,EAAAo5E,EAAA11E,EAAAhV,EAAAgV,EAEA1D,EAAA,EAAAzT,EACAohE,EAAA3tD,GAAA,EACA2tD,EAAA3tD,EAAA,GAAA,EAEAA,EAAA,EAAAzT,EACAqgD,EAAA5sC,GAAAA,EACA4sC,EAAA5sC,EAAA,GAAAA,EAAA,CAGApU,MAAA+J,OAAA,IAQA2oE,EAAA7vE,UAAA2gE,iBAAA,WAEAiP,EAAA5vE,UAAA2gE,iBAAAziE,KAAAf,MAGAA,KAAA2sF,QACA3sF,KAAA2xD,WASA+gB,EAAA7vE,UAAA6vC,gBAAA,WAEA,GAAAoG,GAAA94C,KAAA84C,MAEA,MAAAA,EAAA93C,OAAA,GAAA,CAgBA,IAAA,GAVAysF,GAQAh3C,EAAAriC,EAAAuoD,EAAA+wB,EAAAC,EATAvqC,EAAAtK,EAAA,GAEA80C,EAAA,EACAC,EAAA,EAIA5xB,EAAAj8D,KAAAi8D,SACAj7B,EAAA8X,EAAA93C,OAGAL,EAAA,EAAAqgC,EAAArgC,EAAAA,IAEA81C,EAAAqC,EAAAn4C,GACAyT,EAAA,EAAAzT,EAIA8sF,EAFA9sF,EAAAm4C,EAAA93C,OAAA,EAEA83C,EAAAn4C,EAAA,GAIA81C,EAGAo3C,IAAAJ,EAAA94E,EAAAyuC,EAAAzuC,GACAi5E,EAAAH,EAAA31E,EAAAsrC,EAAAtrC,EAEA6kD,EAAA,IAAA,EAAAh8D,GAAAqgC,EAAA,IAEA27B,EAAA,IAEAA,EAAA,GAGA+wB,EAAAl4E,KAAAylC,KAAA2yC,EAAAA,EAAAC,EAAAA,GACAF,EAAA3tF,KAAA8vD,SAAAjsD,OAAA,EACA+pF,GAAAF,EACAG,GAAAH,EAEAE,GAAAD,EACAE,GAAAF,EAEA1xB,EAAA7nD,GAAAqiC,EAAA9hC,EAAAi5E,EACA3xB,EAAA7nD,EAAA,GAAAqiC,EAAA3+B,EAAA+1E,EACA5xB,EAAA7nD,EAAA,GAAAqiC,EAAA9hC,EAAAi5E,EACA3xB,EAAA7nD,EAAA,GAAAqiC,EAAA3+B,EAAA+1E,EAEAzqC,EAAA3M,CAGAz2C,MAAA6yC,+BAGAtG,UAAA,GAAA+gD,SAAA,MAAAQ,KAAA,SAAAptF,EAAAjB,EAAAD,GAWAC,EAAAD,SACAizE,KAAA/xE,EAAA,UACA8rF,MAAA9rF,EAAA,WACAgyE,KAAAhyE,EAAA,UACAqtF,aAAArtF,EAAA,wBACAstF,WAAAttF,EAAA,yBAGA4sF,SAAA,IAAAW,UAAA,IAAAC,SAAA,IAAAC,uBAAA,IAAAC,qBAAA,MAAAC,KAAA,SAAA3tF,EAAAjB,EAAAD,GAuBA,QAAAuuF,GAAAnlD,GAEAY,EAAA8V,eAAAv+C,KAAAf,KAAA4oC,GASA5oC,KAAAghD,QAAA,GAAAqB,aAAA,KAGA,KAAA,GAAA1hD,GAAA,EAAA+oB,EAAA,EAAA,KAAA/oB,EAAAA,GAAA,EAAA+oB,GAAA,EAEA1pB,KAAAghD,QAAArgD,EAAA,GAAA+oB,EAAA,EACA1pB,KAAAghD,QAAArgD,EAAA,GAAA+oB,EAAA,EACA1pB,KAAAghD,QAAArgD,EAAA,GAAA+oB,EAAA,EACA1pB,KAAAghD,QAAArgD,EAAA,GAAA+oB,EAAA,EACA1pB,KAAAghD,QAAArgD,EAAA,GAAA+oB,EAAA,EACA1pB,KAAAghD,QAAArgD,EAAA,GAAA+oB,EAAA,CAGA1pB,MAAA+9D,cAAA,KA9CA,GAAAv0B,GAAA9oC,EAAA,cACA+xE,EAAA/xE,EAAA,UAgDAqtF,GAAAlrF,UAAA0M,OAAA/L,OAAAgmC,EAAA8V,eAAAz8C,WACAkrF,EAAAlrF,UAAAmH,YAAA+jF,EACAtuF,EAAAD,QAAAuuF,EAEAvkD,EAAA4C,cAAAC,eAAA,OAAA0hD,GAQAA,EAAAlrF,UAAAs9C,gBAAA,aAUA4tC,EAAAlrF,UAAA4vC,OAAA,SAAAw/B,GAEAA,EAAAqc,eAEAtuF,KAAAuuF,WAAAtc,EAGA,IAAArpC,GAAA5oC,KAAA4oC,SACAxmC,EAAAwmC,EAAAxmC,GACA6B,EAAAguE,EAAAniB,SAAAtS,YACAnwC,EAAA4kE,EAAA5kE,OAEA88E,EAAAlY,EAAAkY,WAAA1X,EAAA9jC,WAAA07C,cAAAjoF,EAAA6sC,eAAA7sC,EAAA4sC,SAEApG,GAAA2X,iBAAAC,aAAAyxB,EAAAt6B,WASAtqC,EANAA,EAMAA,EAAA2sD,QAAA53D,EAAAkJ,KAAA+B,EAAA+sD,UAAAxxB,GAJAA,EAAAgmB,cAAA7iB,QAAAyiD,WAOAxuF,KAAA4oC,SAAAgmB,cAAAS,UAAAhiD,GAEAA,EAAA1G,SAAAg6C,kBAAAxxC,MAAA8iE,EAAAhnC,eAAA2V,SAAA,GACAvzC,EAAA1G,SAAA8oD,iBAAAtgD,MAAAy5B,EAAA4mB,oBAAAC,iBAAA7O,SAAA,GACAvzC,EAAA1G,SAAA8tC,MAAAtlC,MAAA8iE,EAAAv+B,WAEArmC,EAAAmvD,eAEAyV,EAAAloE,OA8BAkoE,EAAAloE,OAAA,EACA3H,EAAAgB,WAAAhB,EAAAM,aAAAuvE,EAAAqc,eACAlsF,EAAAe,WAAAf,EAAAM,aAAAuvE,EAAAhW,SAAA75D,EAAAO,aACAP,EAAAsM,oBAAArB,EAAA5G,WAAAq6C,gBAAA,EAAA1+C,EAAA4F,OAAA,EAAA,EAAA,GAGA5F,EAAAgB,WAAAhB,EAAAM,aAAAuvE,EAAAwc,WACArsF,EAAAe,WAAAf,EAAAM,aAAAuvE,EAAA7lB,IAAAhqD,EAAAO,aACAP,EAAAsM,oBAAArB,EAAA5G,WAAAyoD,cAAA,EAAA9sD,EAAA4F,OAAA,EAAA,EAAA,GAEA5F,EAAA+F,cAAA/F,EAAAgG,UAEAnE,EAAA8rD,YAAA3tD,EAAAkJ,IAOAlJ,EAAAiG,YAAAjG,EAAAkC,WAAAL,EAAA8rD,YAAA3tD,EAAAkJ,KALAtL,KAAA4oC,SAAAonB,cAAA/rD,GASA7B,EAAAgB,WAAAhB,EAAAmB,qBAAA0uE,EAAAyc,cACAtsF,EAAAe,WAAAf,EAAAmB,qBAAA0uE,EAAAjxB,QAAA5+C,EAAAO,eAnDAP,EAAAgB,WAAAhB,EAAAM,aAAAuvE,EAAAqc,eACAlsF,EAAAc,cAAAd,EAAAM,aAAA,EAAAuvE,EAAAhW,UACA75D,EAAAsM,oBAAArB,EAAA5G,WAAAq6C,gBAAA,EAAA1+C,EAAA4F,OAAA,EAAA,EAAA,GAGA5F,EAAAgB,WAAAhB,EAAAM,aAAAuvE,EAAAwc,WACArsF,EAAAsM,oBAAArB,EAAA5G,WAAAyoD,cAAA,EAAA9sD,EAAA4F,OAAA,EAAA,EAAA,GAGA5F,EAAA+F,cAAA/F,EAAAgG,UAEAnE,EAAA8rD,YAAA3tD,EAAAkJ,IAOAlJ,EAAAiG,YAAAjG,EAAAkC,WAAAL,EAAA8rD,YAAA3tD,EAAAkJ,KALAtL,KAAA4oC,SAAAonB,cAAA/rD,GAQA7B,EAAAgB,WAAAhB,EAAAmB,qBAAA0uE,EAAAyc,cACAtsF,EAAAc,cAAAd,EAAAmB,qBAAA,EAAA0uE,EAAAjxB,UAiCA5+C,EAAA4I,aAAAm/E,EAAAlY,EAAAjxB,QAAAhgD,OAAAoB,EAAA6I,eAAA,IAQA8iF,EAAAlrF,UAAA0rF,WAAA,SAAAtc,GAGA,GAAA7vE,GAAApC,KAAA4oC,SAAAxmC,EAEA6vE,GAAAqc,cAAAlsF,EAAAK,eACAwvE,EAAAyc,aAAAtsF,EAAAK,eACAwvE,EAAAwc,UAAArsF,EAAAK,eAIAL,EAAAgB,WAAAhB,EAAAM,aAAAuvE,EAAAqc,eACAlsF,EAAAe,WAAAf,EAAAM,aAAAuvE,EAAAhW,SAAA75D,EAAA8rD,cAEA9rD,EAAAgB,WAAAhB,EAAAM,aAAAuvE,EAAAwc,WACArsF,EAAAe,WAAAf,EAAAM,aAAAuvE,EAAA7lB,IAAAhqD,EAAAO,aAEAsvE,EAAAlQ,SACAkQ,EAAA0c,aAAAvsF,EAAAK,eACAL,EAAAgB,WAAAhB,EAAAM,aAAAuvE,EAAA0c,cACAvsF,EAAAe,WAAAf,EAAAM,aAAAuvE,EAAAlQ,OAAA3/D,EAAAO,cAGAP,EAAAgB,WAAAhB,EAAAmB,qBAAA0uE,EAAAyc,cACAtsF,EAAAe,WAAAf,EAAAmB,qBAAA0uE,EAAAjxB,QAAA5+C,EAAAO,cAQAorF,EAAAlrF,UAAAkxC,MAAA,aASAg6C,EAAAlrF,UAAA2H,MAAA,WAIAxK,KAAA+9D,cAAA,MAOAgwB,EAAAlrF,UAAA0C,QAAA,WAEAikC,EAAA8V,eAAAz8C,UAAA0C,QAAAxE,KAAAf,SAGA+4E,aAAA,GAAA6V,UAAA,MAAAC,KAAA,SAAAnuF,EAAAjB,EAAAD,GASA,QAAAwuF,GAAAp/B,GAEAplB,EAAAnjC,OAAAtF,KAAAf,KACA4uD,GAGA,wBACA,kCACA,gCAEA,kCACA,iCAEA,8BAEA,mBACA,2GACA,oCACA,KACAh+C,KAAA,OAEA,wBAEA,8BACA,uBAEA,8BAEA,mBACA,iEACA,KACAA,KAAA,OAGA6jC,OAAApyC,KAAA,KAAA8M,MAAA,GACAwxC,mBAAAt+C,KAAA,OAAA8M,MAAA,GAAAtH,cAAA,IACA4nD,kBAAAptD,KAAA,OAAA8M,MAAA,GAAAtH,cAAA,MAIAi5C,gBAAA,EACAoO,cAAA,IAjDA,GAAA1lB,GAAA9oC,EAAA,aAsDAstF,GAAAnrF,UAAA0M,OAAA/L,OAAAgmC,EAAAnjC,OAAAxD,WACAmrF,EAAAnrF,UAAAmH,YAAAgkF,EACAvuF,EAAAD,QAAAwuF,EAEAxkD,EAAA6c,cAAAha,eAAA,aAAA2hD,KAEAjV,aAAA,KAAA+V,KAAA,SAAApuF,EAAAjB,EAAAD,GAIAgW,KAAA+tD,OAEA/tD,KAAA+tD,KAAA,SAAA5uD,GAEA,MADAA,IAAAA,EACA,IAAAA,GAAAo6E,MAAAp6E,GAEAA,EAEAA,EAAA,EAAA,EAAA,UAIAq6E,KAAA,SAAAtuF,EAAAjB,EAAAD,GAKA+P,OAAA4pB,SAEA5pB,OAAA4pB,OAAAz4B,EAAA,oBAGAkmC,gBAAA,KAAAqoD,KAAA,SAAAvuF,EAAAjB,EAAAD,GACAkB,EAAA,mBACAA,EAAA,2BACAA,EAAA,iBAEAwuF,cAAA,IAAAC,kBAAA,IAAAC,0BAAA,MAAAC,KAAA,SAAA3uF,EAAAjB,EAAAD,IACA,SAAAM,GAoBA,GAPAwvF,KAAAzf,KAAAyf,KAAAzsF,UAAA0sF,UACAD,KAAAzf,IAAA,WACA,OAAA,GAAAyf,OAAAC,aAKAzvF,EAAA8vE,cAAA9vE,EAAA8vE,YAAAC,IAAA,CACA,GAAA2f,GAAAF,KAAAzf,KACA/vE,GAAA8vE,cACA9vE,EAAA8vE,gBAEA9vE,EAAA8vE,YAAAC,IAAA,WACA,MAAAyf,MAAAzf,MAAA2f,GAQA,IAAA,GAHAngB,GAAAigB,KAAAzf,MACA4f,GAAA,KAAA,MAAA,SAAA,KAEA96E,EAAA,EAAAA,EAAA86E,EAAAzuF,SAAAlB,EAAAquE,wBAAAx5D,EACA7U,EAAAquE,sBAAAruE,EAAA2vF,EAAA96E,GAAA,yBACA7U,EAAAiwE,qBAAAjwE,EAAA2vF,EAAA96E,GAAA,yBACA7U,EAAA2vF,EAAA96E,GAAA,8BAGA7U,GAAAquE,wBACAruE,EAAAquE,sBAAA,SAAAv4D,GACA,GAAA,kBAAAA,GACA,KAAA,IAAA6O,WAAA7O,EAAA,oBAGA,IAAAu6D,GAAAmf,KAAAzf,MACA6f,EAAA,GAAArgB,EAAAc,CAQA,OANA,GAAAuf,IACAA,EAAA,GAGArgB,EAAAc,EAEAn1D,WAAA,WACAq0D,EAAAigB,KAAAzf,MACAj6D,EAAAg6D,YAAAC,QACA6f,KAIA5vF,EAAAiwE,uBACAjwE,EAAAiwE,qBAAA,SAAAzkE,GACAib,aAAAjb,OAIAvK,KAAAf,KAAA,mBAAAF,QAAAA,OAAA,mBAAAC,MAAAA,KAAA,mBAAAF,QAAAA,qBAEA,MAAA","file":"pixi.min.js","sourcesContent":[null],"sourceRoot":"./"} \ No newline at end of file diff --git a/bin/pixi.js b/bin/pixi.js index b57ad10..40862ec 100644 --- a/bin/pixi.js +++ b/bin/pixi.js @@ -1,7 +1,7 @@ /** * @license * pixi.js - v3.0.10-dev - * Compiled 2016-01-17T18:07:22.522Z + * Compiled 2016-01-17T18:16:46.120Z * * pixi.js is licensed under the MIT License. * http://www.opensource.org/licenses/mit-license.php @@ -10864,15 +10864,15 @@ ObjectRenderer = require('../../renderers/webgl/utils/ObjectRenderer'), WebGLRenderer = require('../../renderers/webgl/WebGLRenderer'), WebGLGraphicsData = require('./WebGLGraphicsData'), - PrimitiveShader = require('./PrimitiveShader'), + PrimitiveShader = require('./shaders/PrimitiveShader'), // some drawing functions.. - buildLine = require('./buildLine'); - buildPoly = require('./buildPoly'); - buildComplexPoly = require('./buildComplexPoly'); - buildRectangle = require('./buildRectangle'); - buildRoundedRectangle = require('./buildRoundedRectangle'); - buildCircle = require('./buildCircle'); + buildLine = require('./utils/buildLine'); + buildPoly = require('./utils/buildPoly'); + buildComplexPoly = require('./utils/buildComplexPoly'); + buildRectangle = require('./utils/buildRectangle'); + buildRoundedRectangle = require('./utils/buildRoundedRectangle'); + buildCircle = require('./utils/buildCircle'); earcut = require('earcut'); @@ -11177,59 +11177,7 @@ }; -},{"../../const":38,"../../math":55,"../../renderers/webgl/WebGLRenderer":72,"../../renderers/webgl/utils/ObjectRenderer":87,"../../utils":105,"./PrimitiveShader":44,"./WebGLGraphicsData":45,"./buildCircle":46,"./buildComplexPoly":47,"./buildLine":48,"./buildPoly":49,"./buildRectangle":50,"./buildRoundedRectangle":51,"earcut":24}],44:[function(require,module,exports){ -var Shader = require('pixi-gl-core').GLShader; - -/** - * This shader is used to draw simple primitive shapes for {@link PIXI.Graphics}. - * - * @class - * @memberof PIXI - * @extends PIXI.Shader - * @param shaderManager {ShaderManager} The webgl shader manager this shader works for. - */ -function PrimitiveShader(gl) -{ - Shader.call(this, - gl, - // vertex shader - [ - 'attribute vec2 aVertexPosition;', - 'attribute vec4 aColor;', - - 'uniform mat3 translationMatrix;', - 'uniform mat3 projectionMatrix;', - - 'uniform float alpha;', - 'uniform float flipY;', - 'uniform vec3 tint;', - - 'varying vec4 vColor;', - - 'void main(void){', - ' gl_Position = vec4((projectionMatrix * translationMatrix * vec3(aVertexPosition, 1.0)).xy, 0.0, 1.0);', - ' vColor = aColor * vec4(tint * alpha, alpha);', - '}' - ].join('\n'), - // fragment shader - [ - 'precision mediump float;', - - 'varying vec4 vColor;', - - 'void main(void){', - ' gl_FragColor = vColor;', - '}' - ].join('\n') - ); -} - -PrimitiveShader.prototype = Object.create(Shader.prototype); -PrimitiveShader.prototype.constructor = PrimitiveShader; - -module.exports = PrimitiveShader; - -},{"pixi-gl-core":1}],45:[function(require,module,exports){ +},{"../../const":38,"../../math":55,"../../renderers/webgl/WebGLRenderer":72,"../../renderers/webgl/utils/ObjectRenderer":87,"../../utils":105,"./WebGLGraphicsData":44,"./shaders/PrimitiveShader":45,"./utils/buildCircle":46,"./utils/buildComplexPoly":47,"./utils/buildLine":48,"./utils/buildPoly":49,"./utils/buildRectangle":50,"./utils/buildRoundedRectangle":51,"earcut":24}],44:[function(require,module,exports){ /** * An object containing WebGL specific properties to be used by the WebGL renderer * @@ -11347,9 +11295,61 @@ this.glIndices = null; }; -},{}],46:[function(require,module,exports){ +},{}],45:[function(require,module,exports){ +var Shader = require('pixi-gl-core').GLShader; + +/** + * This shader is used to draw simple primitive shapes for {@link PIXI.Graphics}. + * + * @class + * @memberof PIXI + * @extends PIXI.Shader + * @param shaderManager {ShaderManager} The webgl shader manager this shader works for. + */ +function PrimitiveShader(gl) +{ + Shader.call(this, + gl, + // vertex shader + [ + 'attribute vec2 aVertexPosition;', + 'attribute vec4 aColor;', + + 'uniform mat3 translationMatrix;', + 'uniform mat3 projectionMatrix;', + + 'uniform float alpha;', + 'uniform float flipY;', + 'uniform vec3 tint;', + + 'varying vec4 vColor;', + + 'void main(void){', + ' gl_Position = vec4((projectionMatrix * translationMatrix * vec3(aVertexPosition, 1.0)).xy, 0.0, 1.0);', + ' vColor = aColor * vec4(tint * alpha, alpha);', + '}' + ].join('\n'), + // fragment shader + [ + 'precision mediump float;', + + 'varying vec4 vColor;', + + 'void main(void){', + ' gl_FragColor = vColor;', + '}' + ].join('\n') + ); +} + +PrimitiveShader.prototype = Object.create(Shader.prototype); +PrimitiveShader.prototype.constructor = PrimitiveShader; + +module.exports = PrimitiveShader; + +},{"pixi-gl-core":1}],46:[function(require,module,exports){ var buildLine = require('./buildLine'), - utils = require('../../utils'); + utils = require('../../../utils'); /** * Builds a circle to draw @@ -11426,7 +11426,7 @@ y + Math.cos(seg * i) * height); } - this.buildLine(graphicsData, webGLData); + buildLine(graphicsData, webGLData); graphicsData.points = tempPoints; } @@ -11434,9 +11434,9 @@ module.exports = buildCircle; -},{"../../utils":105,"./buildLine":48}],47:[function(require,module,exports){ +},{"../../../utils":105,"./buildLine":48}],47:[function(require,module,exports){ var buildLine = require('./buildLine'), - utils = require('../../utils'); + utils = require('../../../utils'); @@ -11505,9 +11505,9 @@ module.exports = buildComplexPoly; -},{"../../utils":105,"./buildLine":48}],48:[function(require,module,exports){ -var math = require('../../math'), - utils = require('../../utils'); +},{"../../../utils":105,"./buildLine":48}],48:[function(require,module,exports){ +var math = require('../../../math'), + utils = require('../../../utils'); /** * Builds a line to draw @@ -11725,8 +11725,8 @@ }; module.exports = buildLine; -},{"../../math":55,"../../utils":105}],49:[function(require,module,exports){ -var utils = require('../../utils'); +},{"../../../math":55,"../../../utils":105}],49:[function(require,module,exports){ +var utils = require('../../../utils'); /** * Builds a polygon to draw @@ -11788,9 +11788,9 @@ module.exports = buildPoly; -},{"../../utils":105}],50:[function(require,module,exports){ +},{"../../../utils":105}],50:[function(require,module,exports){ var buildLine = require('./buildLine'), - utils = require('../../utils'); + utils = require('../../../utils'); /** * Builds a rectangle to draw @@ -11859,9 +11859,9 @@ }; module.exports = buildRectangle; -},{"../../utils":105,"./buildLine":48}],51:[function(require,module,exports){ +},{"../../../utils":105,"./buildLine":48}],51:[function(require,module,exports){ var buildLine = require('./buildLine'), - utils = require('../../utils'); + utils = require('../../../utils'); /** * Builds a rounded rectangle to draw @@ -11987,7 +11987,7 @@ module.exports = buildRoundedRectangle; -},{"../../utils":105,"./buildLine":48}],52:[function(require,module,exports){ +},{"../../../utils":105,"./buildLine":48}],52:[function(require,module,exports){ /** * @file Main export of the PIXI core library * @author Mat Groves @@ -30075,6 +30075,6 @@ },{}]},{},[143])(143) }); -//# sourceMappingURL=data:application/json;charset:utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIm5vZGVfbW9kdWxlcy9icm93c2VyaWZ5L25vZGVfbW9kdWxlcy9icm93c2VyLXBhY2svX3ByZWx1ZGUuanMiLCIuLi9waXhpLWdsLWNvcmUvaW5kZXguanMiLCIuLi9waXhpLWdsLWNvcmUvbGliL0dMQnVmZmVyLmpzIiwiLi4vcGl4aS1nbC1jb3JlL2xpYi9HTEZyYW1lYnVmZmVyLmpzIiwiLi4vcGl4aS1nbC1jb3JlL2xpYi9HTFNoYWRlci5qcyIsIi4uL3BpeGktZ2wtY29yZS9saWIvR0xUZXh0dXJlLmpzIiwiLi4vcGl4aS1nbC1jb3JlL2xpYi9WZXJ0ZXhBcnJheU9iamVjdC5qcyIsIi4uL3BpeGktZ2wtY29yZS9saWIvY3JlYXRlQ29udGV4dC5qcyIsIi4uL3BpeGktZ2wtY29yZS9saWIvc2V0VmVydGV4QXR0cmliQXJyYXlzLmpzIiwiLi4vcGl4aS1nbC1jb3JlL2xpYi9zaGFkZXIvY29tcGlsZVByb2dyYW0uanMiLCIuLi9waXhpLWdsLWNvcmUvbGliL3NoYWRlci9kZWZhdWx0VmFsdWUuanMiLCIuLi9waXhpLWdsLWNvcmUvbGliL3NoYWRlci9leHRyYWN0QXR0cmlidXRlcy5qcyIsIi4uL3BpeGktZ2wtY29yZS9saWIvc2hhZGVyL2V4dHJhY3RVbmlmb3Jtcy5qcyIsIi4uL3BpeGktZ2wtY29yZS9saWIvc2hhZGVyL2dlbmVyYXRlVW5pZm9ybUFjY2Vzc09iamVjdC5qcyIsIi4uL3BpeGktZ2wtY29yZS9saWIvc2hhZGVyL21hcFNpemUuanMiLCIuLi9waXhpLWdsLWNvcmUvbGliL3NoYWRlci9tYXBUeXBlLmpzIiwibm9kZV9tb2R1bGVzL2FzeW5jL2xpYi9hc3luYy5qcyIsIm5vZGVfbW9kdWxlcy9icm93c2VyaWZ5L25vZGVfbW9kdWxlcy9wYXRoLWJyb3dzZXJpZnkvaW5kZXguanMiLCJub2RlX21vZHVsZXMvYnJvd3NlcmlmeS9ub2RlX21vZHVsZXMvcHJvY2Vzcy9icm93c2VyLmpzIiwibm9kZV9tb2R1bGVzL2Jyb3dzZXJpZnkvbm9kZV9tb2R1bGVzL3B1bnljb2RlL3B1bnljb2RlLmpzIiwibm9kZV9tb2R1bGVzL2Jyb3dzZXJpZnkvbm9kZV9tb2R1bGVzL3F1ZXJ5c3RyaW5nLWVzMy9kZWNvZGUuanMiLCJub2RlX21vZHVsZXMvYnJvd3NlcmlmeS9ub2RlX21vZHVsZXMvcXVlcnlzdHJpbmctZXMzL2VuY29kZS5qcyIsIm5vZGVfbW9kdWxlcy9icm93c2VyaWZ5L25vZGVfbW9kdWxlcy9xdWVyeXN0cmluZy1lczMvaW5kZXguanMiLCJub2RlX21vZHVsZXMvYnJvd3NlcmlmeS9ub2RlX21vZHVsZXMvdXJsL3VybC5qcyIsIm5vZGVfbW9kdWxlcy9lYXJjdXQvc3JjL2VhcmN1dC5qcyIsIm5vZGVfbW9kdWxlcy9ldmVudGVtaXR0ZXIzL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL29iamVjdC1hc3NpZ24vaW5kZXguanMiLCJub2RlX21vZHVsZXMvcmVzb3VyY2UtbG9hZGVyL25vZGVfbW9kdWxlcy9hc3luYy9saWIvYXN5bmMuanMiLCJub2RlX21vZHVsZXMvcmVzb3VyY2UtbG9hZGVyL3NyYy9Mb2FkZXIuanMiLCJub2RlX21vZHVsZXMvcmVzb3VyY2UtbG9hZGVyL3NyYy9SZXNvdXJjZS5qcyIsIm5vZGVfbW9kdWxlcy9yZXNvdXJjZS1sb2FkZXIvc3JjL2I2NC5qcyIsIm5vZGVfbW9kdWxlcy9yZXNvdXJjZS1sb2FkZXIvc3JjL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL3Jlc291cmNlLWxvYWRlci9zcmMvbWlkZGxld2FyZXMvY2FjaGluZy9tZW1vcnkuanMiLCJub2RlX21vZHVsZXMvcmVzb3VyY2UtbG9hZGVyL3NyYy9taWRkbGV3YXJlcy9wYXJzaW5nL2Jsb2IuanMiLCJwYWNrYWdlLmpzb24iLCJzcmMvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5TWFuYWdlci5qcyIsInNyYy9hY2Nlc3NpYmlsaXR5L2FjY2Vzc2libGVUYXJnZXQuanMiLCJzcmMvYWNjZXNzaWJpbGl0eS9pbmRleC5qcyIsInNyYy9jb3JlL2NvbnN0LmpzIiwic3JjL2NvcmUvZGlzcGxheS9Db250YWluZXIuanMiLCJzcmMvY29yZS9kaXNwbGF5L0Rpc3BsYXlPYmplY3QuanMiLCJzcmMvY29yZS9ncmFwaGljcy9HcmFwaGljcy5qcyIsInNyYy9jb3JlL2dyYXBoaWNzL0dyYXBoaWNzRGF0YS5qcyIsInNyYy9jb3JlL2dyYXBoaWNzL3dlYmdsL0dyYXBoaWNzUmVuZGVyZXIuanMiLCJzcmMvY29yZS9ncmFwaGljcy93ZWJnbC9QcmltaXRpdmVTaGFkZXIuanMiLCJzcmMvY29yZS9ncmFwaGljcy93ZWJnbC9XZWJHTEdyYXBoaWNzRGF0YS5qcyIsInNyYy9jb3JlL2dyYXBoaWNzL3dlYmdsL2J1aWxkQ2lyY2xlLmpzIiwic3JjL2NvcmUvZ3JhcGhpY3Mvd2ViZ2wvYnVpbGRDb21wbGV4UG9seS5qcyIsInNyYy9jb3JlL2dyYXBoaWNzL3dlYmdsL2J1aWxkTGluZS5qcyIsInNyYy9jb3JlL2dyYXBoaWNzL3dlYmdsL2J1aWxkUG9seS5qcyIsInNyYy9jb3JlL2dyYXBoaWNzL3dlYmdsL2J1aWxkUmVjdGFuZ2xlLmpzIiwic3JjL2NvcmUvZ3JhcGhpY3Mvd2ViZ2wvYnVpbGRSb3VuZGVkUmVjdGFuZ2xlLmpzIiwic3JjL2NvcmUvaW5kZXguanMiLCJzcmMvY29yZS9tYXRoL01hdHJpeC5qcyIsInNyYy9jb3JlL21hdGgvUG9pbnQuanMiLCJzcmMvY29yZS9tYXRoL2luZGV4LmpzIiwic3JjL2NvcmUvbWF0aC9zaGFwZXMvQ2lyY2xlLmpzIiwic3JjL2NvcmUvbWF0aC9zaGFwZXMvRWxsaXBzZS5qcyIsInNyYy9jb3JlL21hdGgvc2hhcGVzL1BvbHlnb24uanMiLCJzcmMvY29yZS9tYXRoL3NoYXBlcy9SZWN0YW5nbGUuanMiLCJzcmMvY29yZS9tYXRoL3NoYXBlcy9Sb3VuZGVkUmVjdGFuZ2xlLmpzIiwic3JjL2NvcmUvcGFydGljbGVzL1BhcnRpY2xlQ29udGFpbmVyLmpzIiwic3JjL2NvcmUvcGFydGljbGVzL3dlYmdsL1BhcnRpY2xlQnVmZmVyLmpzIiwic3JjL2NvcmUvcGFydGljbGVzL3dlYmdsL1BhcnRpY2xlUmVuZGVyZXIuanMiLCJzcmMvY29yZS9wYXJ0aWNsZXMvd2ViZ2wvUGFydGljbGVTaGFkZXIuanMiLCJzcmMvY29yZS9yZW5kZXJlcnMvU3lzdGVtUmVuZGVyZXIuanMiLCJzcmMvY29yZS9yZW5kZXJlcnMvY2FudmFzL0NhbnZhc1JlbmRlcmVyLmpzIiwic3JjL2NvcmUvcmVuZGVyZXJzL2NhbnZhcy91dGlscy9DYW52YXNCdWZmZXIuanMiLCJzcmMvY29yZS9yZW5kZXJlcnMvY2FudmFzL3V0aWxzL0NhbnZhc0dyYXBoaWNzLmpzIiwic3JjL2NvcmUvcmVuZGVyZXJzL2NhbnZhcy91dGlscy9DYW52YXNNYXNrTWFuYWdlci5qcyIsInNyYy9jb3JlL3JlbmRlcmVycy9jYW52YXMvdXRpbHMvQ2FudmFzVGludGVyLmpzIiwic3JjL2NvcmUvcmVuZGVyZXJzL3dlYmdsL1RleHR1cmVNYW5hZ2VyLmpzIiwic3JjL2NvcmUvcmVuZGVyZXJzL3dlYmdsL1dlYkdMUmVuZGVyZXIuanMiLCJzcmMvY29yZS9yZW5kZXJlcnMvd2ViZ2wvZmlsdGVycy9BYnN0cmFjdEZpbHRlci5qcyIsInNyYy9jb3JlL3JlbmRlcmVycy93ZWJnbC9maWx0ZXJzL0ZYQUFGaWx0ZXIuanMiLCJzcmMvY29yZS9yZW5kZXJlcnMvd2ViZ2wvZmlsdGVycy9TcHJpdGVNYXNrRmlsdGVyLmpzIiwic3JjL2NvcmUvcmVuZGVyZXJzL3dlYmdsL21hbmFnZXJzL0JsZW5kTW9kZU1hbmFnZXIuanMiLCJzcmMvY29yZS9yZW5kZXJlcnMvd2ViZ2wvbWFuYWdlcnMvRmlsdGVyTWFuYWdlci5qcyIsInNyYy9jb3JlL3JlbmRlcmVycy93ZWJnbC9tYW5hZ2Vycy9NYXNrTWFuYWdlci5qcyIsInNyYy9jb3JlL3JlbmRlcmVycy93ZWJnbC9tYW5hZ2Vycy9TaGFkZXJNYW5hZ2VyLmpzIiwic3JjL2NvcmUvcmVuZGVyZXJzL3dlYmdsL21hbmFnZXJzL1N0ZW5jaWxNYW5hZ2VyLmpzIiwic3JjL2NvcmUvcmVuZGVyZXJzL3dlYmdsL21hbmFnZXJzL1dlYkdMTWFuYWdlci5qcyIsInNyYy9jb3JlL3JlbmRlcmVycy93ZWJnbC9zaGFkZXJzL0NvbXBsZXhQcmltaXRpdmVTaGFkZXIuanMiLCJzcmMvY29yZS9yZW5kZXJlcnMvd2ViZ2wvc2hhZGVycy9QcmltaXRpdmVTaGFkZXIuanMiLCJzcmMvY29yZS9yZW5kZXJlcnMvd2ViZ2wvc2hhZGVycy9TaGFkZXIuanMiLCJzcmMvY29yZS9yZW5kZXJlcnMvd2ViZ2wvc2hhZGVycy9UZXh0dXJlU2hhZGVyLmpzIiwic3JjL2NvcmUvcmVuZGVyZXJzL3dlYmdsL3NoYWRlcnMvX1RleHR1cmVTaGFkZXIuanMiLCJzcmMvY29yZS9yZW5kZXJlcnMvd2ViZ2wvdXRpbHMvT2JqZWN0UmVuZGVyZXIuanMiLCJzcmMvY29yZS9yZW5kZXJlcnMvd2ViZ2wvdXRpbHMvUXVhZC5qcyIsInNyYy9jb3JlL3JlbmRlcmVycy93ZWJnbC91dGlscy9SZW5kZXJUYXJnZXQuanMiLCJzcmMvY29yZS9yZW5kZXJlcnMvd2ViZ2wvdXRpbHMvU3RlbmNpbE1hc2tTdGFjay5qcyIsInNyYy9jb3JlL3JlbmRlcmVycy93ZWJnbC91dGlscy9tYXBXZWJHTEJsZW5kTW9kZXNUb1BpeGkuanMiLCJzcmMvY29yZS9yZW5kZXJlcnMvd2ViZ2wvdXRpbHMvbWFwV2ViR0xEcmF3TW9kZXNUb1BpeGkuanMiLCJzcmMvY29yZS9zcHJpdGVzL1Nwcml0ZS5qcyIsInNyYy9jb3JlL3Nwcml0ZXMvd2ViZ2wvU3ByaXRlUmVuZGVyZXIuanMiLCJzcmMvY29yZS9zcHJpdGVzL3dlYmdsL2dlbmVyYXRlTXVsdGlUZXh0dXJlU2hhZGVyLmpzIiwic3JjL2NvcmUvdGV4dC9UZXh0LmpzIiwic3JjL2NvcmUvdGV4dHVyZXMvQmFzZVRleHR1cmUuanMiLCJzcmMvY29yZS90ZXh0dXJlcy9SZW5kZXJUZXh0dXJlLmpzIiwic3JjL2NvcmUvdGV4dHVyZXMvVGV4dHVyZS5qcyIsInNyYy9jb3JlL3RleHR1cmVzL1RleHR1cmVVdnMuanMiLCJzcmMvY29yZS90ZXh0dXJlcy9WaWRlb0Jhc2VUZXh0dXJlLmpzIiwic3JjL2NvcmUvdGlja2VyL1RpY2tlci5qcyIsInNyYy9jb3JlL3RpY2tlci9pbmRleC5qcyIsInNyYy9jb3JlL3V0aWxzL2NyZWF0ZUluZGljZXNGb3JRdWFkcy5qcyIsInNyYy9jb3JlL3V0aWxzL2luZGV4LmpzIiwic3JjL2NvcmUvdXRpbHMvcGx1Z2luVGFyZ2V0LmpzIiwic3JjL2RlcHJlY2F0aW9uLmpzIiwic3JjL2V4dHJhcy9CaXRtYXBUZXh0LmpzIiwic3JjL2V4dHJhcy9Nb3ZpZUNsaXAuanMiLCJzcmMvZXh0cmFzL1RpbGluZ1Nwcml0ZS5qcyIsInNyYy9leHRyYXMvY2FjaGVBc0JpdG1hcC5qcyIsInNyYy9leHRyYXMvZ2V0Q2hpbGRCeU5hbWUuanMiLCJzcmMvZXh0cmFzL2dldEdsb2JhbFBvc2l0aW9uLmpzIiwic3JjL2V4dHJhcy9pbmRleC5qcyIsInNyYy9maWx0ZXJzL2FzY2lpL0FzY2lpRmlsdGVyLmpzIiwic3JjL2ZpbHRlcnMvYmxvb20vQmxvb21GaWx0ZXIuanMiLCJzcmMvZmlsdGVycy9ibHVyL0JsdXJEaXJGaWx0ZXIuanMiLCJzcmMvZmlsdGVycy9ibHVyL0JsdXJGaWx0ZXIuanMiLCJzcmMvZmlsdGVycy9ibHVyL0JsdXJYRmlsdGVyLmpzIiwic3JjL2ZpbHRlcnMvYmx1ci9CbHVyWUZpbHRlci5qcyIsInNyYy9maWx0ZXJzL2JsdXIvU21hcnRCbHVyRmlsdGVyLmpzIiwic3JjL2ZpbHRlcnMvY29sb3IvQ29sb3JNYXRyaXhGaWx0ZXIuanMiLCJzcmMvZmlsdGVycy9jb2xvci9Db2xvclN0ZXBGaWx0ZXIuanMiLCJzcmMvZmlsdGVycy9jb252b2x1dGlvbi9Db252b2x1dGlvbkZpbHRlci5qcyIsInNyYy9maWx0ZXJzL2Nyb3NzaGF0Y2gvQ3Jvc3NIYXRjaEZpbHRlci5qcyIsInNyYy9maWx0ZXJzL2Rpc3BsYWNlbWVudC9EaXNwbGFjZW1lbnRGaWx0ZXIuanMiLCJzcmMvZmlsdGVycy9kb3QvRG90U2NyZWVuRmlsdGVyLmpzIiwic3JjL2ZpbHRlcnMvZHJvcHNoYWRvdy9CbHVyWVRpbnRGaWx0ZXIuanMiLCJzcmMvZmlsdGVycy9kcm9wc2hhZG93L0Ryb3BTaGFkb3dGaWx0ZXIuanMiLCJzcmMvZmlsdGVycy9ncmF5L0dyYXlGaWx0ZXIuanMiLCJzcmMvZmlsdGVycy9pbmRleC5qcyIsInNyYy9maWx0ZXJzL2ludmVydC9JbnZlcnRGaWx0ZXIuanMiLCJzcmMvZmlsdGVycy9ub2lzZS9Ob2lzZUZpbHRlci5qcyIsInNyYy9maWx0ZXJzL3BpeGVsYXRlL1BpeGVsYXRlRmlsdGVyLmpzIiwic3JjL2ZpbHRlcnMvcmdiL1JHQlNwbGl0RmlsdGVyLmpzIiwic3JjL2ZpbHRlcnMvc2VwaWEvU2VwaWFGaWx0ZXIuanMiLCJzcmMvZmlsdGVycy9zaG9ja3dhdmUvU2hvY2t3YXZlRmlsdGVyLmpzIiwic3JjL2ZpbHRlcnMvdGlsdHNoaWZ0L1RpbHRTaGlmdEF4aXNGaWx0ZXIuanMiLCJzcmMvZmlsdGVycy90aWx0c2hpZnQvVGlsdFNoaWZ0RmlsdGVyLmpzIiwic3JjL2ZpbHRlcnMvdGlsdHNoaWZ0L1RpbHRTaGlmdFhGaWx0ZXIuanMiLCJzcmMvZmlsdGVycy90aWx0c2hpZnQvVGlsdFNoaWZ0WUZpbHRlci5qcyIsInNyYy9maWx0ZXJzL3R3aXN0L1R3aXN0RmlsdGVyLmpzIiwic3JjL3NyYy9pbmRleC5qcyIsInNyYy9pbnRlcmFjdGlvbi9JbnRlcmFjdGlvbkRhdGEuanMiLCJzcmMvaW50ZXJhY3Rpb24vSW50ZXJhY3Rpb25NYW5hZ2VyLmpzIiwic3JjL2ludGVyYWN0aW9uL2luZGV4LmpzIiwic3JjL2ludGVyYWN0aW9uL2ludGVyYWN0aXZlVGFyZ2V0LmpzIiwic3JjL2xvYWRlcnMvYml0bWFwRm9udFBhcnNlci5qcyIsInNyYy9sb2FkZXJzL2luZGV4LmpzIiwic3JjL2xvYWRlcnMvbG9hZGVyLmpzIiwic3JjL2xvYWRlcnMvc3ByaXRlc2hlZXRQYXJzZXIuanMiLCJzcmMvbG9hZGVycy90ZXh0dXJlUGFyc2VyLmpzIiwic3JjL21lc2gvTWVzaC5qcyIsInNyYy9tZXNoL1BsYW5lLmpzIiwic3JjL21lc2gvUm9wZS5qcyIsInNyYy9tZXNoL2luZGV4LmpzIiwic3JjL21lc2gvd2ViZ2wvTWVzaFJlbmRlcmVyLmpzIiwic3JjL21lc2gvd2ViZ2wvTWVzaFNoYWRlci5qcyIsInNyYy9wb2x5ZmlsbC9NYXRoLnNpZ24uanMiLCJzcmMvcG9seWZpbGwvT2JqZWN0LmFzc2lnbi5qcyIsInNyYy9wb2x5ZmlsbC9pbmRleC5qcyIsInNyYy9wb2x5ZmlsbC9yZXF1ZXN0QW5pbWF0aW9uRnJhbWUuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUNBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbklBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDeENBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdk1BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNqSEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDOUJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3REQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN6REE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2xDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDN0JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0SUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2hDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUM5Q0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7O0FDNXVDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7QUNoT0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FDM0ZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7OztBQ3JoQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDcEZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDckZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDSkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ25zQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdGtCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3RRQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FDdkNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7QUNubUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3hjQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDaHlCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2hFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNaQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDcEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDMURBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMxRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuWkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzVDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzdOQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNyb0JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3ZtQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdG9DQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzNGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM5VEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2xEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDcEhBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDckZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3JFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDMU5BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDN0RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3JFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM5SEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDN0ZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3RiQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDcEVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNwQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3RGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM3RkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3JHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNUZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzFGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDN1RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMxTkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDMWRBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDblFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMxUUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2xHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2hXQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM1REE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMxUEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDMUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMzWUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzlHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDckRBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMvRkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDMUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2xjQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDakhBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3hLQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDN1dBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3ZDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM1REE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM3REE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM5Z0JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDN0dBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDL0VBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN4REE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDekpBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDalNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDL0JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3ptQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3ZXQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzdEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzNtQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbmJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzdkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3hhQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQy9FQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzNPQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDaldBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3REQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQy9CQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDblJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNwRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM3VkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2xZQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM5VEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbGNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzlRQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzVCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzVCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ25CQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3ZEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzVJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM1R0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMzRkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDcEZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNUJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3RoQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQy9DQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDekZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3hCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2xGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3RFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDekZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMvTEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQy9DQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3JDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNoREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3JEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2pEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNwRkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDaERBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0RkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDM0hBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzVHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNwQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDcENBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FDbkZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7QUM1QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQy9DQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzEyQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQy9DQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdkhBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbkJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzVEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2xGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDcEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzFkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzVIQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ25OQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDakJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuT0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzNEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ1JBO0FBQ0E7QUFDQTtBQUNBOzs7QUNIQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsImZpbGUiOiJnZW5lcmF0ZWQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlc0NvbnRlbnQiOlsiKGZ1bmN0aW9uIGUodCxuLHIpe2Z1bmN0aW9uIHMobyx1KXtpZighbltvXSl7aWYoIXRbb10pe3ZhciBhPXR5cGVvZiByZXF1aXJlPT1cImZ1bmN0aW9uXCImJnJlcXVpcmU7aWYoIXUmJmEpcmV0dXJuIGEobywhMCk7aWYoaSlyZXR1cm4gaShvLCEwKTt2YXIgZj1uZXcgRXJyb3IoXCJDYW5ub3QgZmluZCBtb2R1bGUgJ1wiK28rXCInXCIpO3Rocm93IGYuY29kZT1cIk1PRFVMRV9OT1RfRk9VTkRcIixmfXZhciBsPW5bb109e2V4cG9ydHM6e319O3Rbb11bMF0uY2FsbChsLmV4cG9ydHMsZnVuY3Rpb24oZSl7dmFyIG49dFtvXVsxXVtlXTtyZXR1cm4gcyhuP246ZSl9LGwsbC5leHBvcnRzLGUsdCxuLHIpfXJldHVybiBuW29dLmV4cG9ydHN9dmFyIGk9dHlwZW9mIHJlcXVpcmU9PVwiZnVuY3Rpb25cIiYmcmVxdWlyZTtmb3IodmFyIG89MDtvPHIubGVuZ3RoO28rKylzKHJbb10pO3JldHVybiBzfSkiLCJcblxubW9kdWxlLmV4cG9ydHMgPSB7XG5cbiAgICBjcmVhdGVDb250ZXh0OiBcdFx0XHRyZXF1aXJlKCcuL2xpYi9jcmVhdGVDb250ZXh0JyksXG4gICAgc2V0VmVydGV4QXR0cmliQXJyYXlzOiBcdHJlcXVpcmUoJy4vbGliL3NldFZlcnRleEF0dHJpYkFycmF5cycpLFxuICAgIFxuICAgIEdMQnVmZmVyOiBcdFx0XHRcdHJlcXVpcmUoJy4vbGliL0dMQnVmZmVyJyksXG4gICAgR0xGcmFtZWJ1ZmZlcjogXHRcdFx0cmVxdWlyZSgnLi9saWIvR0xGcmFtZWJ1ZmZlcicpLFxuICAgIEdMU2hhZGVyOiBcdFx0XHRcdHJlcXVpcmUoJy4vbGliL0dMU2hhZGVyJyksXG4gICAgR0xUZXh0dXJlOiBcdFx0XHRcdHJlcXVpcmUoJy4vbGliL0dMVGV4dHVyZScpLFxuICAgIFxuICAgIFZlcnRleEFycmF5T2JqZWN0OiBcdFx0cmVxdWlyZSgnLi9saWIvVmVydGV4QXJyYXlPYmplY3QnKVxuXG59OyIsIlxuLyoqXG4gKiBIZWxwZXIgY2xhc3MgdG8gY3JlYXRlIGEgd2ViR0wgYnVmZmVyXG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIGdsIHtXZWJHTFJlbmRlcmluZ0NvbnRleHR9XG4gKi9cblxudmFyIEVNUFRZX0FSUkFZX0JVRkZFUiA9IG5ldyBBcnJheUJ1ZmZlcigwKTtcblxudmFyIEJ1ZmZlciA9IGZ1bmN0aW9uKGdsLCB0eXBlLCBkYXRhLCBkcmF3VHlwZSlcbntcblx0dGhpcy5nbCA9IGdsO1xuXG5cdHRoaXMuYnVmZmVyID0gZ2wuY3JlYXRlQnVmZmVyKCk7XG5cdHRoaXMudHlwZSA9IHR5cGUgfHwgZ2wuQVJSQVlfQlVGRkVSO1xuXHR0aGlzLmRyYXdUeXBlID0gZHJhd1R5cGUgfHwgZ2wuU1RBVElDX0RSQVc7XG5cdHRoaXMuZGF0YSA9IEVNUFRZX0FSUkFZX0JVRkZFUjtcblxuXHRpZihkYXRhKVxuXHR7XG5cdFx0dGhpcy51cGxvYWQoZGF0YSk7XG5cdH1cbn1cblxuQnVmZmVyLnByb3RvdHlwZS51cGxvYWQgPSBmdW5jdGlvbihkYXRhLCBvZmZzZXQsIGRvbnRCaW5kKVxue1xuXHQvLyB0b2RvIC0gbmVlZGVkP1xuXHQvL2lmKCFkb250QmluZClcblx0dGhpcy5iaW5kKCk7XG5cblx0dmFyIGdsID0gdGhpcy5nbDtcblx0XG5cdGRhdGEgPSBkYXRhIHx8IHRoaXMuZGF0YTtcblx0b2Zmc2V0ID0gb2Zmc2V0IHx8IDA7XG5cblx0aWYodGhpcy5kYXRhLmJ5dGVMZW5ndGggPj0gZGF0YS5ieXRlTGVuZ3RoKVxuXHR7XHRcblx0XHRnbC5idWZmZXJTdWJEYXRhKHRoaXMudHlwZSwgb2Zmc2V0LCBkYXRhKTtcblx0fVxuXHRlbHNlXG5cdHtcblx0XHRnbC5idWZmZXJEYXRhKHRoaXMudHlwZSwgZGF0YSwgdGhpcy5kcmF3VHlwZSk7XG5cdH1cblxuXHR0aGlzLmRhdGEgPSBkYXRhO1xufVxuXG5CdWZmZXIucHJvdG90eXBlLmJpbmQgPSBmdW5jdGlvbigpXG57XG5cdHZhciBnbCA9IHRoaXMuZ2w7XG5cdGdsLmJpbmRCdWZmZXIodGhpcy50eXBlLCB0aGlzLmJ1ZmZlcik7XG59XG5cbkJ1ZmZlci5jcmVhdGVWZXJ0ZXhCdWZmZXIgPSBmdW5jdGlvbihnbCwgZGF0YSwgZHJhd1R5cGUpXG57XG5cdHJldHVybiBuZXcgQnVmZmVyKGdsLCBnbC5BUlJBWV9CVUZGRVIsIGRhdGEsIGRyYXdUeXBlKTtcbn1cblxuQnVmZmVyLmNyZWF0ZUluZGV4QnVmZmVyID0gZnVuY3Rpb24oZ2wsIGRhdGEsIGRyYXdUeXBlKVxue1xuXHRyZXR1cm4gbmV3IEJ1ZmZlcihnbCwgZ2wuRUxFTUVOVF9BUlJBWV9CVUZGRVIsIGRhdGEsIGRyYXdUeXBlKTtcbn1cblxuQnVmZmVyLmNyZWF0ZSA9IGZ1bmN0aW9uKGdsLCB0eXBlLCBkYXRhLCBkcmF3VHlwZSlcbntcblx0cmV0dXJuIG5ldyBCdWZmZXIoZ2wsIHR5cGUsIGRyYXdUeXBlKTtcbn1cblxuLy9UT0RPIERlc3Ryb3kuLlxuXG5tb2R1bGUuZXhwb3J0cyA9IEJ1ZmZlcjtcblxuIiwiXG52YXIgVGV4dHVyZSA9IHJlcXVpcmUoJy4vR0xUZXh0dXJlJyk7XG5cbi8qKlxuICogSGVscGVyIGNsYXNzIHRvIGNyZWF0ZSBhIHdlYkdMIEZyYW1lYnVmZmVyXG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIGdsIHtXZWJHTFJlbmRlcmluZ0NvbnRleHR9XG4gKi9cblxudmFyIEZyYW1lYnVmZmVyID0gZnVuY3Rpb24oZ2wsIHdpZHRoLCBoZWlnaHQpXG57XG5cdHRoaXMuZ2wgPSBnbDtcblxuXHR0aGlzLmZyYW1lYnVmZmVyID0gZ2wuY3JlYXRlRnJhbWVidWZmZXIoKTtcblx0XG5cdHRoaXMuc3RlbmNpbCA9IG51bGw7XG5cdHRoaXMudGV4dHVyZSA9IG51bGw7XG5cblx0dGhpcy53aWR0aCA9IHdpZHRoIHx8IDEwMDtcblx0dGhpcy5oZWlnaHQgPSBoZWlnaHQgfHwgMTAwO1xufVxuXG5GcmFtZWJ1ZmZlci5wcm90b3R5cGUuZW5hYmxlVGV4dHVyZSA9IGZ1bmN0aW9uKHRleHR1cmUpXG57XG5cdHZhciBnbCA9IHRoaXMuZ2w7XG5cblx0dGhpcy50ZXh0dXJlID0gdGV4dHVyZSB8fCBuZXcgVGV4dHVyZShnbCk7XG5cblx0dGhpcy50ZXh0dXJlLmJpbmQoKTtcblxuXHQvL2dsLnRleEltYWdlMkQoZ2wuVEVYVFVSRV8yRCwgMCwgZ2wuUkdCQSwgIHRoaXMud2lkdGgsIHRoaXMuaGVpZ2h0LCAwLCBnbC5SR0JBLCBnbC5VTlNJR05FRF9CWVRFLCBudWxsKTtcblxuXHR0aGlzLmJpbmQoKTtcblxuXHRnbC5mcmFtZWJ1ZmZlclRleHR1cmUyRChnbC5GUkFNRUJVRkZFUiwgZ2wuQ09MT1JfQVRUQUNITUVOVDAsIGdsLlRFWFRVUkVfMkQsIHRoaXMudGV4dHVyZS50ZXh0dXJlLCAwKTtcbn1cblxuRnJhbWVidWZmZXIucHJvdG90eXBlLmVuYWJsZVN0ZW5jaWwgPSBmdW5jdGlvbigpXG57XG5cdGlmKHRoaXMuc3RlbmNpbClyZXR1cm47XG5cblx0dmFyIGdsID0gdGhpcy5nbDtcblxuXHR0aGlzLnN0ZW5jaWwgPSBnbC5jcmVhdGVSZW5kZXJidWZmZXIoKTtcbiAgICBcbiAgICBnbC5iaW5kUmVuZGVyYnVmZmVyKGdsLlJFTkRFUkJVRkZFUiwgdGhpcy5zdGVuY2lsKTtcbiAgICBcbiAgICAvLyBUT0RPLi4gdGhpcyBpcyBkZXB0aCBBTkQgc3RlbmNpbD9cbiAgICBnbC5mcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcihnbC5GUkFNRUJVRkZFUiwgZ2wuREVQVEhfU1RFTkNJTF9BVFRBQ0hNRU5ULCBnbC5SRU5ERVJCVUZGRVIsIHRoaXMuc3RlbmNpbCk7XG4gICAgZ2wucmVuZGVyYnVmZmVyU3RvcmFnZShnbC5SRU5ERVJCVUZGRVIsIGdsLkRFUFRIX1NURU5DSUwsICB0aGlzLndpZHRoICAsIHRoaXMuaGVpZ2h0ICk7XG59XG5cbkZyYW1lYnVmZmVyLnByb3RvdHlwZS5jbGVhciA9IGZ1bmN0aW9uKCByLCBnLCBiLCBhIClcbntcblx0dGhpcy5iaW5kKCk7XG5cblx0dmFyIGdsID0gdGhpcy5nbDtcbiAgICBcbiAgICBnbC5jbGVhckNvbG9yKHIsIGcsIGIsIGEpO1xuICAgIGdsLmNsZWFyKGdsLkNPTE9SX0JVRkZFUl9CSVQpO1xufVxuXG5GcmFtZWJ1ZmZlci5wcm90b3R5cGUuYmluZCA9IGZ1bmN0aW9uKClcbntcblx0dmFyIGdsID0gdGhpcy5nbDtcblx0Z2wuYmluZEZyYW1lYnVmZmVyKGdsLkZSQU1FQlVGRkVSLCB0aGlzLmZyYW1lYnVmZmVyICk7XHRcbn1cblxuRnJhbWVidWZmZXIucHJvdG90eXBlLnVuYmluZCA9IGZ1bmN0aW9uKClcbntcblx0Z2wuYmluZEZyYW1lYnVmZmVyKGdsLkZSQU1FQlVGRkVSLCBudWxsICk7XHRcbn1cblxuRnJhbWVidWZmZXIucHJvdG90eXBlLnJlc2l6ZSA9IGZ1bmN0aW9uKHdpZHRoLCBoZWlnaHQpXG57XG5cdHZhciBnbCA9IHRoaXMuZ2w7XG5cblx0dGhpcy53aWR0aCA9IHdpZHRoO1xuXHR0aGlzLmhlaWdodCA9IGhlaWdodDtcblxuXHRpZiAoIHRoaXMudGV4dHVyZSApXG4gICAge1xuICAgIFx0dGhpcy50ZXh0dXJlLnVwbG9hZERhdGEobnVsbCwgd2lkdGgsIGhlaWdodCk7XG5cdH1cblxuXHRpZiAoIHRoaXMuc3RlbmNpbCApXG4gICAge1xuICAgICAgICAvLyB1cGRhdGUgdGhlIHN0ZW5jaWwgYnVmZmVyIHdpZHRoIGFuZCBoZWlnaHRcbiAgICAgICAgZ2wuYmluZFJlbmRlcmJ1ZmZlcihnbC5SRU5ERVJCVUZGRVIsIHRoaXMuc3RlbmNpbCk7XG4gICAgICAgIGdsLnJlbmRlcmJ1ZmZlclN0b3JhZ2UoZ2wuUkVOREVSQlVGRkVSLCBnbC5ERVBUSF9TVEVOQ0lMLCB3aWR0aCwgaGVpZ2h0KTtcbiAgICB9XG59XG5cbkZyYW1lYnVmZmVyLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24oKVxue1xuXHR2YXIgZ2wgPSB0aGlzLmdsO1xuXHQvL1RPRE9cblx0Z2wuZGVsZXRlRnJhbWVidWZmZXIodGhpcy5mcmFtZWJ1ZmZlcik7XG59XG5cbkZyYW1lYnVmZmVyLmNyZWF0ZVJHQkEgPSBmdW5jdGlvbihnbCwgd2lkdGgsIGhlaWdodCwgZGF0YSlcbntcblx0dmFyIHRleHR1cmUgPSBUZXh0dXJlLmZyb21EYXRhKGdsLCBudWxsLCB3aWR0aCwgaGVpZ2h0KTtcblx0dGV4dHVyZS5lbmFibGVOZWFyZXN0U2NhbGluZygpO1xuICAgIHRleHR1cmUuZW5hYmxlV3JhcENsYW1wKCk7XG5cbiAgICAvL25vdyBjcmVhdGUgdGhlIGZyYW1lYnVmZmVyIG9iamVjdCBhbmQgYXR0YWNoIHRoZSB0ZXh0dXJlIHRvIGl0LlxuICAgIHZhciBmYm8gPSBuZXcgRnJhbWVidWZmZXIoZ2wsIHdpZHRoLCBoZWlnaHQpO1xuICAgIGZiby5lbmFibGVUZXh0dXJlKHRleHR1cmUpO1xuXG4gICAgcmV0dXJuIGZibztcbn1cblxuRnJhbWVidWZmZXIuY3JlYXRlRmxvYXQzMiA9IGZ1bmN0aW9uKGdsLCB3aWR0aCwgaGVpZ2h0LCBkYXRhKVxue1xuXHQvLyBjcmVhdGUgYSBuZXcgdGV4dHVyZS4uXG4gICAgdmFyIHRleHR1cmUgPSBuZXcgVGV4dHVyZS5mcm9tRGF0YShnbCwgZGF0YSwgd2lkdGgsIGhlaWdodCk7XG4gICAgdGV4dHVyZS5lbmFibGVOZWFyZXN0U2NhbGluZygpO1xuICAgIHRleHR1cmUuZW5hYmxlV3JhcENsYW1wKCk7XG5cbiAgICAvL25vdyBjcmVhdGUgdGhlIGZyYW1lYnVmZmVyIG9iamVjdCBhbmQgYXR0YWNoIHRoZSB0ZXh0dXJlIHRvIGl0LlxuICAgIHZhciBmYm8gPSBuZXcgRnJhbWVidWZmZXIoZ2wsIHdpZHRoLCBoZWlnaHQpO1xuICAgIGZiby5lbmFibGVUZXh0dXJlKHRleHR1cmUpXG5cbiAgICByZXR1cm4gZmJvO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IEZyYW1lYnVmZmVyO1xuXG4iLCJcbnZhciBjb21waWxlUHJvZ3JhbSA9IHJlcXVpcmUoJy4vc2hhZGVyL2NvbXBpbGVQcm9ncmFtJyksXG5cdGV4dHJhY3RBdHRyaWJ1dGVzID0gcmVxdWlyZSgnLi9zaGFkZXIvZXh0cmFjdEF0dHJpYnV0ZXMnKSxcblx0ZXh0cmFjdFVuaWZvcm1zID0gcmVxdWlyZSgnLi9zaGFkZXIvZXh0cmFjdFVuaWZvcm1zJyksXG5cdGdlbmVyYXRlVW5pZm9ybUFjY2Vzc09iamVjdCA9IHJlcXVpcmUoJy4vc2hhZGVyL2dlbmVyYXRlVW5pZm9ybUFjY2Vzc09iamVjdCcpO1xuXG4vKipcbiAqIEhlbHBlciBjbGFzcyB0byBjcmVhdGUgYSB3ZWJHTCBTaGFkZXJcbiAqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gZ2wge1dlYkdMUmVuZGVyaW5nQ29udGV4dH1cbiAqL1xudmFyIFNoYWRlciA9IGZ1bmN0aW9uKGdsLCB2ZXJ0ZXhTcmMsIGZyYWdtZW50U3JjKVxue1xuXHR0aGlzLmdsID0gZ2w7XG5cblx0Ly8gRmlyc3QgY29tcGlsZSB0aGUgcHJvZ3JhbS4uXG5cdHRoaXMucHJvZ3JhbSA9IGNvbXBpbGVQcm9ncmFtKGdsLCB2ZXJ0ZXhTcmMsIGZyYWdtZW50U3JjKTtcblxuXHQvLyBuZXh0IGV4dHJhY3QgdGhlIGF0dHJpYnV0ZXNcblx0dGhpcy5hdHRyaWJ1dGVzID0gZXh0cmFjdEF0dHJpYnV0ZXMoZ2wsIHRoaXMucHJvZ3JhbSk7IFxuXG4gICAgdmFyIHVuaWZvcm1EYXRhID0gZXh0cmFjdFVuaWZvcm1zKGdsLCB0aGlzLnByb2dyYW0pO1xuXG4gICAgdGhpcy51bmlmb3JtcyA9IGdlbmVyYXRlVW5pZm9ybUFjY2Vzc09iamVjdCggZ2wsIHVuaWZvcm1EYXRhICk7XG59XG5cblNoYWRlci5wcm90b3R5cGUuYmluZCA9IGZ1bmN0aW9uKClcbntcblx0dGhpcy5nbC51c2VQcm9ncmFtKHRoaXMucHJvZ3JhbSk7XG59XG5cblNoYWRlci5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uKClcbntcblx0dmFyIGdsID0gdGhpcy5nbDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBTaGFkZXI7XG5cbiIsIlxuLyoqXG4gKiBIZWxwZXIgY2xhc3MgdG8gY3JlYXRlIGEgd2ViR0wgVGV4dHVyZVxuICpcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqIEBwYXJhbSBnbCB7V2ViR0xSZW5kZXJpbmdDb250ZXh0fSBhIFdlYkdMIGNvbnRleHRcbiAqIEBwYXJhbSB3aWR0aCB7bnVtYmVyfSB0aGUgd2lkdGggb2YgdGhlIHRleHR1cmUgXG4gKiBAcGFyYW0gaGVpZ2h0IHtudW1iZXJ9IHRoZSBoZWlnaHQgb2YgdGhlIHRleHR1cmUgXG4gKiBAcGFyYW0gZm9ybWF0IHtudW1iZXJ9IHRoZSBwaXhlbCBmb3JtYXQgb2YgdGhlIHRleHR1cmUuIGRlZmF1bHRzIHRvIGdsLlJHQkFcbiAqIEBwYXJhbSB0eXBlIHtudW1iZXJ9IHRoZSBnbCB0eXBlIG9mIHRoZSB0ZXh0dXJlLiBkZWZhdWx0cyB0byBnbC5VTlNJR05FRF9CWVRFXG4gKi9cbnZhciBUZXh0dXJlID0gZnVuY3Rpb24oZ2wsIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgdHlwZSlcbntcblx0dGhpcy5nbCA9IGdsO1xuXG5cdHRoaXMudGV4dHVyZSA9IGdsLmNyZWF0ZVRleHR1cmUoKTtcblxuXHQvLyBzb21lIHNldHRpbmdzLi5cblx0dGhpcy5taXBtYXAgPSBmYWxzZTtcblxuXHR0aGlzLnByZW11bHRpcGx5QWxwaGEgPSBmYWxzZTtcblxuXHR0aGlzLndpZHRoID0gd2lkdGggfHwgMDtcblx0dGhpcy5oZWlnaHQgPSBoZWlnaHQgfHwgMDtcblxuXHR0aGlzLmZvcm1hdCA9IGZvcm1hdCB8fCBnbC5SR0JBO1xuXHR0aGlzLnR5cGUgPSB0eXBlIHx8IGdsLlVOU0lHTkVEX0JZVEU7XG5cblxufVxuXG4vKipcbiAqIEBwYXJhbSB7UElYSS5nbENvcmUuVGV4dHVyZX0gW3Zhcm5hbWVdIFtkZXNjcmlwdGlvbl1cbiAqL1xuVGV4dHVyZS5wcm90b3R5cGUudXBsb2FkID0gZnVuY3Rpb24oc291cmNlKVxue1xuXHR0aGlzLmJpbmQoKTtcblxuXHR2YXIgZ2wgPSB0aGlzLmdsO1xuXG5cdHRoaXMud2lkdGggPSBzb3VyY2Uud2lkdGg7XG5cdHRoaXMuaGVpZ2h0ID0gc291cmNlLmhlaWdodDtcblxuXHRnbC5waXhlbFN0b3JlaShnbC5VTlBBQ0tfUFJFTVVMVElQTFlfQUxQSEFfV0VCR0wsIHRoaXMucHJlbXVsdGlwbHlBbHBoYSk7XG4gICAgZ2wudGV4SW1hZ2UyRChnbC5URVhUVVJFXzJELCAwLCB0aGlzLmZvcm1hdCwgdGhpcy5mb3JtYXQsIHRoaXMudHlwZSwgc291cmNlKTtcbn1cblxudmFyIEZMT0FUSU5HX1BPSU5UX0FWQUlMQUJMRSA9IGZhbHNlO1xuXG5UZXh0dXJlLnByb3RvdHlwZS51cGxvYWREYXRhID0gZnVuY3Rpb24oZGF0YSwgd2lkdGgsIGhlaWdodClcbntcblx0dGhpcy5iaW5kKCk7XG5cdFxuXHR0aGlzLndpZHRoID0gd2lkdGggfHwgdGhpcy53aWR0aDtcblx0dGhpcy5oZWlnaHQgPSBoZWlnaHQgfHwgdGhpcy5oZWlnaHQ7XG5cblx0aWYoZGF0YSBpbnN0YW5jZW9mIEZsb2F0MzJBcnJheSlcblx0e1xuXHRcdGlmKCFGTE9BVElOR19QT0lOVF9BVkFJTEFCTEUpXG5cdFx0e1xuXHRcdFx0dmFyIGV4dCA9IGdsLmdldEV4dGVuc2lvbihcIk9FU190ZXh0dXJlX2Zsb2F0XCIpO1xuXHRcdFx0XG5cdFx0XHRpZihleHQpXG5cdFx0XHR7XG5cdFx0XHRcdEZMT0FUSU5HX1BPSU5UX0FWQUlMQUJMRSA9IHRydWU7XG5cdFx0XHR9XG5cdFx0XHRlbHNlXG5cdFx0XHR7XG5cdFx0XHRcdHRocm93IG5ldyBFcnJvcignZmxvYXRpbmcgcG9pbnQgdGV4dHVyZXMgbm90IGF2YWlsYWJsZScpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHRoaXMudHlwZSA9IGdsLkZMT0FUO1xuXHR9XG5cdGVsc2Vcblx0e1xuXHRcdC8vIFRPRE8gc3VwcG9ydCBmb3Igb3RoZXIgdHlwZXNcblx0XHR0aGlzLnR5cGUgPSBnbC5VTlNJR05FRF9CWVRFO1xuXHR9XG5cblx0Ly8gd2hhdCB0eXBlIG9mIGRhdGE/XG5cdGdsLnBpeGVsU3RvcmVpKGdsLlVOUEFDS19QUkVNVUxUSVBMWV9BTFBIQV9XRUJHTCwgdGhpcy5wcmVtdWx0aXBseUFscGhhKTtcblx0Z2wudGV4SW1hZ2UyRChnbC5URVhUVVJFXzJELCAwLCB0aGlzLmZvcm1hdCwgIHRoaXMud2lkdGgsIHRoaXMuaGVpZ2h0LCAwLCB0aGlzLmZvcm1hdCwgdGhpcy50eXBlLCBkYXRhIHx8IG51bGwpO1xuXG59XG5cblRleHR1cmUucHJvdG90eXBlLmJpbmQgPSBmdW5jdGlvbihsb2NhdGlvbilcbntcblx0dmFyIGdsID0gdGhpcy5nbDtcblxuXHRpZihsb2NhdGlvbiAhPT0gdW5kZWZpbmVkKVxuXHR7XG5cdFx0Z2wuYWN0aXZlVGV4dHVyZShnbC5URVhUVVJFMCArIGxvY2F0aW9uKTtcblx0fVxuXG5cdGdsLmJpbmRUZXh0dXJlKGdsLlRFWFRVUkVfMkQsIHRoaXMudGV4dHVyZSk7XG59XG5cblRleHR1cmUucHJvdG90eXBlLnVuYmluZCA9IGZ1bmN0aW9uKClcbntcblx0dmFyIGdsID0gdGhpcy5nbDtcblx0Z2wuYmluZFRleHR1cmUoZ2wuVEVYVFVSRV8yRCwgbnVsbCk7XG59XG5cblRleHR1cmUucHJvdG90eXBlLm1pbkZpbHRlciA9IGZ1bmN0aW9uKCBsaW5lYXIgKVxue1xuXHR2YXIgZ2wgPSB0aGlzLmdsO1xuXG5cdHRoaXMuYmluZCgpO1xuXG5cdGlmKHRoaXMubWlwbWFwKVxuXHR7XG5cdFx0Z2wudGV4UGFyYW1ldGVyaShnbC5URVhUVVJFXzJELCBnbC5URVhUVVJFX01JTl9GSUxURVIsIGxpbmVhciA/IGdsLkxJTkVBUl9NSVBNQVBfTElORUFSIDogZ2wuTkVBUkVTVF9NSVBNQVBfTkVBUkVTVCk7XG5cdH1cblx0ZWxzZVxuXHR7XG5cdFx0Z2wudGV4UGFyYW1ldGVyaShnbC5URVhUVVJFXzJELCBnbC5URVhUVVJFX01JTl9GSUxURVIsIGxpbmVhciA/IGdsLkxJTkVBUiA6IGdsLk5FQVJFU1QpO1xuXHR9XHRcbn1cblxuVGV4dHVyZS5wcm90b3R5cGUubWFnRmlsdGVyID0gZnVuY3Rpb24oIGxpbmVhciApXG57XG5cdHZhciBnbCA9IHRoaXMuZ2w7XG5cblx0dGhpcy5iaW5kKCk7XG5cblx0Z2wudGV4UGFyYW1ldGVyaShnbC5URVhUVVJFXzJELCBnbC5URVhUVVJFX01BR19GSUxURVIsIGxpbmVhciA/IGdsLkxJTkVBUiA6IGdsLk5FQVJFU1QpO1xufVxuXG5UZXh0dXJlLnByb3RvdHlwZS5lbmFibGVNaXBtYXAgPSBmdW5jdGlvbigpXG57XG5cdHRoaXMuYmluZCgpO1xuXG5cdHRoaXMubWlwbWFwID0gdHJ1ZTtcblx0Z2wuZ2VuZXJhdGVNaXBtYXAoZ2wuVEVYVFVSRV8yRCk7XG59XG5cblRleHR1cmUucHJvdG90eXBlLmVuYWJsZUxpbmVhclNjYWxpbmcgPSBmdW5jdGlvbigpXG57XG5cdHRoaXMubWluRmlsdGVyKHRydWUpO1xuXHR0aGlzLm1hZ0ZpbHRlcih0cnVlKTtcbn1cblxuVGV4dHVyZS5wcm90b3R5cGUuZW5hYmxlTmVhcmVzdFNjYWxpbmcgPSBmdW5jdGlvbigpXG57XG5cdHRoaXMubWluRmlsdGVyKGZhbHNlKTtcblx0dGhpcy5tYWdGaWx0ZXIoZmFsc2UpO1xufVxuXG5UZXh0dXJlLnByb3RvdHlwZS5lbmFibGVXcmFwQ2xhbXAgPSBmdW5jdGlvbigpXG57XG5cdHZhciBnbCA9IHRoaXMuZ2w7XG5cblx0dGhpcy5iaW5kKCk7XG5cblx0Z2wudGV4UGFyYW1ldGVyaShnbC5URVhUVVJFXzJELCBnbC5URVhUVVJFX1dSQVBfUywgZ2wuQ0xBTVBfVE9fRURHRSk7XG4gICAgZ2wudGV4UGFyYW1ldGVyaShnbC5URVhUVVJFXzJELCBnbC5URVhUVVJFX1dSQVBfVCwgZ2wuQ0xBTVBfVE9fRURHRSk7XG59XG5cblRleHR1cmUucHJvdG90eXBlLmVuYWJsZVdyYXBSZXBlYXQgPSBmdW5jdGlvbigpXG57XG5cdHZhciBnbCA9IHRoaXMuZ2w7XG5cblx0dGhpcy5iaW5kKCk7XG5cdFxuXHRnbC50ZXhQYXJhbWV0ZXJpKGdsLlRFWFRVUkVfMkQsIGdsLlRFWFRVUkVfV1JBUF9TLCBnbC5SRVBFQVQpO1xuICAgIGdsLnRleFBhcmFtZXRlcmkoZ2wuVEVYVFVSRV8yRCwgZ2wuVEVYVFVSRV9XUkFQX1QsIGdsLlJFUEVBVCk7XG59XG5cblRleHR1cmUucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbigpXG57XG5cdHZhciBnbCA9IHRoaXMuZ2w7XG5cdC8vVE9ET1xuXHRnbC5kZWxldGVUZXh0dXJlKHRoaXMudGV4dHVyZSk7XG59XG5cbi8vVGV4dHVyZS5cblRleHR1cmUuZnJvbVNvdXJjZSA9IGZ1bmN0aW9uKGdsLCBzb3VyY2UsIHByZW11bHRpcGx5QWxwaGEpXG57XG5cdHZhciB0ZXh0dXJlID0gbmV3IFRleHR1cmUoZ2wpO1xuXHR0ZXh0dXJlLnByZW11bHRpcGx5QWxwaGEgPSBwcmVtdWx0aXBseUFscGhhIHx8IGZhbHNlO1xuXHR0ZXh0dXJlLnVwbG9hZChzb3VyY2UpO1xuXG5cdHJldHVybiB0ZXh0dXJlO1xufVxuXG5UZXh0dXJlLmZyb21EYXRhID0gZnVuY3Rpb24oZ2wsIGRhdGEsIHdpZHRoLCBoZWlnaHQpXG57XG5cdC8vY29uc29sZS5sb2coZGF0YSwgd2lkdGgsIGhlaWdodCk7XG5cdHZhciB0ZXh0dXJlID0gbmV3IFRleHR1cmUoZ2wpO1xuXHR0ZXh0dXJlLnVwbG9hZERhdGEoZGF0YSwgd2lkdGgsIGhlaWdodCk7XG5cblx0cmV0dXJuIHRleHR1cmU7XG59XG5cblxubW9kdWxlLmV4cG9ydHMgPSBUZXh0dXJlO1xuXG4iLCJcbi8qKlxuICogR2VuZXJpYyBNYXNrIFN0YWNrIGRhdGEgc3RydWN0dXJlXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKi9cblxuLy8gc3RhdGUgb2JqZWN0Ly9cblxuXG5mdW5jdGlvbiBWZXJ0ZXhBcnJheU9iamVjdChnbClcbntcblx0XG5cdHRoaXMubmF0aXZlVmFvRXh0ZW5zaW9uID0gKFxuICAgICAgZ2wuZ2V0RXh0ZW5zaW9uKCdPRVNfdmVydGV4X2FycmF5X29iamVjdCcpIHx8XG4gICAgICBnbC5nZXRFeHRlbnNpb24oJ01PWl9PRVNfdmVydGV4X2FycmF5X29iamVjdCcpIHx8XG4gICAgICBnbC5nZXRFeHRlbnNpb24oJ1dFQktJVF9PRVNfdmVydGV4X2FycmF5X29iamVjdCcpXG4gICAgKTtcblxuLy9cdHRoaXMubmF0aXZlVmFvRXh0ZW5zaW9uID0gbnVsbDtcblxuXHRpZih0aGlzLm5hdGl2ZVZhb0V4dGVuc2lvbilcblx0e1xuXHRcdHRoaXMubmF0aXZlVmFvID0gdGhpcy5uYXRpdmVWYW9FeHRlbnNpb24uY3JlYXRlVmVydGV4QXJyYXlPRVMoKTsgIFxuXHR9XG5cblx0dGhpcy5nbCA9IGdsO1xuXG5cdHRoaXMuYXR0cmlidXRlcyA9IFtdO1xuXG5cdHRoaXMuaW5kZXhCdWZmZXIgPSBudWxsO1xuXG5cdHRoaXMuZGlydHkgPSBmYWxzZTtcblxuXHRcbn1cblxuVmVydGV4QXJyYXlPYmplY3QucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gVmVydGV4QXJyYXlPYmplY3Q7XG5tb2R1bGUuZXhwb3J0cyA9IFZlcnRleEFycmF5T2JqZWN0O1xuXG5WZXJ0ZXhBcnJheU9iamVjdC5wcm90b3R5cGUuYmluZCA9IGZ1bmN0aW9uKClcbntcblx0aWYodGhpcy5uYXRpdmVWYW8pXG5cdHtcblx0XHR0aGlzLm5hdGl2ZVZhb0V4dGVuc2lvbi5iaW5kVmVydGV4QXJyYXlPRVModGhpcy5uYXRpdmVWYW8pOyAgXG5cblx0XHRpZih0aGlzLmRpcnR5KVxuXHRcdHtcblx0XHRcdHRoaXMuZGlydHkgPSBmYWxzZTtcblx0XHRcdHRoaXMuYWN0aXZhdGUoKTtcblx0XHR9XG5cdH1cblx0ZWxzZVxuXHR7XG5cdFx0dGhpcy5hY3RpdmF0ZSgpO1xuXHR9XG59XG5cblZlcnRleEFycmF5T2JqZWN0LnByb3RvdHlwZS51bmJpbmQgPSBmdW5jdGlvbigpXG57XG5cdGlmKHRoaXMubmF0aXZlVmFvKVxuXHR7XG5cdFx0dGhpcy5uYXRpdmVWYW9FeHRlbnNpb24uYmluZFZlcnRleEFycmF5T0VTKG51bGwpO1xuXHR9XG59XG5cblZlcnRleEFycmF5T2JqZWN0LnByb3RvdHlwZS5hY3RpdmF0ZSA9IGZ1bmN0aW9uKClcbntcblx0dmFyIGdsID0gdGhpcy5nbDtcblxuXHRmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuYXR0cmlidXRlcy5sZW5ndGg7IGkrKykgXG5cdHtcblx0XHR2YXIgYXR0cmliID0gdGhpcy5hdHRyaWJ1dGVzW2ldO1xuXHRcdGF0dHJpYi5idWZmZXIuYmluZCgpO1x0XG5cblx0XHRhdHRyaWIuYXR0cmlidXRlLnBvaW50ZXIoYXR0cmliLnR5cGUsIGF0dHJpYi5ub3JtYWxpemVkLCBhdHRyaWIuc3RyaWRlLCBhdHRyaWIuc3RhcnQpOyBcblx0XHRcblx0XHRnbC5lbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShhdHRyaWIuYXR0cmlidXRlLmxvY2F0aW9uKTtcblx0fTtcblxuXHR0aGlzLmluZGV4QnVmZmVyLmJpbmQoKTtcbn1cblxuVmVydGV4QXJyYXlPYmplY3QucHJvdG90eXBlLmFkZEF0dHJpYnV0ZSA9IGZ1bmN0aW9uKGJ1ZmZlciwgYXR0cmlidXRlLCB0eXBlLCBub3JtYWxpemVkLCBzdHJpZGUsIHN0YXJ0KVxue1xuICAgIHRoaXMuYXR0cmlidXRlcy5wdXNoKHtcbiAgICBcdGJ1ZmZlcjogXHRidWZmZXIsXG4gICAgXHRhdHRyaWJ1dGU6IFx0YXR0cmlidXRlLFxuXG4gICAgXHRsb2NhdGlvbjogXHRhdHRyaWJ1dGUubG9jYXRpb24sXG5cdCBcdHR5cGU6IFx0XHR0eXBlIHx8IHRoaXMuZ2wuRkxPQVQsXG5cdCBcdG5vcm1hbGl6ZWQ6IG5vcm1hbGl6ZWQgfHwgZmFsc2UsXG5cdCBcdHN0cmlkZTogXHRzdHJpZGUgfHwgMCxcblx0IFx0c3RhcnQ6IFx0XHRzdGFydCB8fCAwXG5cdH0pXG5cblx0dGhpcy5kaXJ0eSA9IHRydWU7XG59XG5cblxuVmVydGV4QXJyYXlPYmplY3QucHJvdG90eXBlLmFkZEluZGV4ID0gZnVuY3Rpb24oYnVmZmVyLCBvcHRpb25zKVxue1xuICAgIHRoaXMuaW5kZXhCdWZmZXIgPSBidWZmZXI7XG5cbiAgICB0aGlzLmRpcnR5ID0gdHJ1ZTtcbn1cblxuVmVydGV4QXJyYXlPYmplY3QucHJvdG90eXBlLmRyYXcgPSBmdW5jdGlvbih0eXBlLCBzaXplLCBzdGFydClcbntcblx0dmFyIGdsID0gdGhpcy5nbDtcblx0Z2wuZHJhd0VsZW1lbnRzKHR5cGUsIHNpemUsIGdsLlVOU0lHTkVEX1NIT1JULCBzdGFydCk7XG59XG5cbiIsIlxuLyoqXG4gKiBIZWxwZXIgY2xhc3MgdG8gY3JlYXRlIGEgd2ViR0wgQ29udGV4dFxuICpcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqIEBwYXJhbSBnbCB7V2ViR0xSZW5kZXJpbmdDb250ZXh0fVxuICovXG5cbnZhciBDT05URVhUX1VJRCA9IDA7XG5cbnZhciBjcmVhdGVDb250ZXh0ID0gZnVuY3Rpb24oY2FudmFzLCBvcHRpb25zKVxue1xuICAgIGdsID0gY2FudmFzLmdldENvbnRleHQoJ3dlYmdsJywgb3B0aW9ucykgfHwgXG4gICAgXHQgY2FudmFzLmdldENvbnRleHQoJ2V4cGVyaW1lbnRhbC13ZWJnbCcsIG9wdGlvbnMpO1xuXG4gICAgaWYgKCFnbClcbiAgICB7XG4gICAgICAgIC8vIGZhaWwsIG5vdCBhYmxlIHRvIGdldCBhIGNvbnRleHRcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdUaGlzIGJyb3dzZXIgZG9lcyBub3Qgc3VwcG9ydCB3ZWJHTC4gVHJ5IHVzaW5nIHRoZSBjYW52YXMgcmVuZGVyZXInKTtcbiAgICB9XG5cbiAgICAvLyBtaWdodCB3YW50IHRvIHBoYXNlIHRoaXMgb3V0P1xuICAgIGdsLmlkID0gQ09OVEVYVF9VSUQrKztcblxuICAgIHJldHVybiBnbDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBjcmVhdGVDb250ZXh0O1xuXG4iLCIvKipcbiAqIEdlbmVyaWMgTWFzayBTdGFjayBkYXRhIHN0cnVjdHVyZVxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICovXG5cbnZhciBHTF9NQVAgPSB7fTtcblxuXG52YXIgc2V0VmVydGV4QXR0cmliQXJyYXlzID0gZnVuY3Rpb24gKGdsLCBhdHRyaWJzKVxue1x0XG4gICAvLyBjb25zb2xlLmxvZyhnbC5pZClcbiAgICB2YXIgZGF0YSA9IEdMX01BUFtnbC5pZF07XG5cbiAgICBpZighZGF0YSlcbiAgICB7XG5cdCAgIHZhciBtYXhBdHRyaWJzID0gZ2wuZ2V0UGFyYW1ldGVyKGdsLk1BWF9WRVJURVhfQVRUUklCUyk7XG5cdFx0ZGF0YSA9IEdMX01BUFtnbC5pZF0gPSB7dGVtcEF0dHJpYlN0YXRlOm5ldyBBcnJheShtYXhBdHRyaWJzKVxuXHRcdFx0XHQgXHQgXHRcdCAgICxhdHRyaWJTdGF0ZTpuZXcgQXJyYXkobWF4QXR0cmlicyl9O1xuXHR9XG5cdFxuICAgIHZhciBpLFxuICAgIFx0dGVtcEF0dHJpYlN0YXRlID0gZGF0YS50ZW1wQXR0cmliU3RhdGUsXG4gICAgXHRhdHRyaWJTdGF0ZSA9IGRhdGEuYXR0cmliU3RhdGU7XG5cbiAgICBmb3IgKGkgPSAwOyBpIDwgdGVtcEF0dHJpYlN0YXRlLmxlbmd0aDsgaSsrKVxuICAgIHtcbiAgICAgICAgdGVtcEF0dHJpYlN0YXRlW2ldID0gZmFsc2U7XG4gICAgfVxuXG4gICAgLy8gc2V0IHRoZSBuZXcgYXR0cmlic1xuICAgIGZvciAoaSBpbiBhdHRyaWJzKVxuICAgIHtcbiAgICAgICAgdGVtcEF0dHJpYlN0YXRlW2F0dHJpYnNbaV0ubG9jYXRpb25dID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBmb3IgKGkgPSAxOyBpIDwgYXR0cmliU3RhdGUubGVuZ3RoOyBpKyspXG4gICAge1xuICAgICAgICBpZiAoYXR0cmliU3RhdGVbaV0gIT09IHRlbXBBdHRyaWJTdGF0ZVtpXSlcbiAgICAgICAge1xuICAgICAgICAgICAgYXR0cmliU3RhdGVbaV0gPSB0ZW1wQXR0cmliU3RhdGVbaV07XG5cbiAgICAgICAgICAgIGlmIChkYXRhLmF0dHJpYlN0YXRlW2ldKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGdsLmVuYWJsZVZlcnRleEF0dHJpYkFycmF5KGkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGdsLmRpc2FibGVWZXJ0ZXhBdHRyaWJBcnJheShpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn07XG5cbm1vZHVsZS5leHBvcnRzID0gc2V0VmVydGV4QXR0cmliQXJyYXlzOyIsIlxuXG5cblxuY29tcGlsZVByb2dyYW0gPSBmdW5jdGlvbihnbCwgdmVydGV4U3JjLCBmcmFnbWVudFNyYylcbntcbiAgICB2YXIgZ2xWZXJ0U2hhZGVyID0gY29tcGlsZVNoYWRlcihnbCwgZ2wuVkVSVEVYX1NIQURFUiwgdmVydGV4U3JjKTtcbiAgICB2YXIgZ2xGcmFnU2hhZGVyID0gY29tcGlsZVNoYWRlcihnbCwgZ2wuRlJBR01FTlRfU0hBREVSLCBmcmFnbWVudFNyYyk7XG5cbiAgICB2YXIgcHJvZ3JhbSA9IGdsLmNyZWF0ZVByb2dyYW0oKTtcblxuICAgIGdsLmF0dGFjaFNoYWRlcihwcm9ncmFtLCBnbFZlcnRTaGFkZXIpO1xuICAgIGdsLmF0dGFjaFNoYWRlcihwcm9ncmFtLCBnbEZyYWdTaGFkZXIpO1xuICAgIGdsLmxpbmtQcm9ncmFtKHByb2dyYW0pO1xuXG4gICAgLy8gaWYgbGlua2luZyBmYWlscywgdGhlbiBsb2cgYW5kIGNsZWFudXBcbiAgICBpZiAoIWdsLmdldFByb2dyYW1QYXJhbWV0ZXIocHJvZ3JhbSwgZ2wuTElOS19TVEFUVVMpKVxuICAgIHtcbiAgICAgICAgY29uc29sZS5lcnJvcignUGl4aS5qcyBFcnJvcjogQ291bGQgbm90IGluaXRpYWxpemUgc2hhZGVyLicpO1xuICAgICAgICBjb25zb2xlLmVycm9yKCdnbC5WQUxJREFURV9TVEFUVVMnLCBnbC5nZXRQcm9ncmFtUGFyYW1ldGVyKHByb2dyYW0sIGdsLlZBTElEQVRFX1NUQVRVUykpO1xuICAgICAgICBjb25zb2xlLmVycm9yKCdnbC5nZXRFcnJvcigpJywgZ2wuZ2V0RXJyb3IoKSk7XG5cbiAgICAgICAgLy8gaWYgdGhlcmUgaXMgYSBwcm9ncmFtIGluZm8gbG9nLCBsb2cgaXRcbiAgICAgICAgaWYgKGdsLmdldFByb2dyYW1JbmZvTG9nKHByb2dyYW0pICE9PSAnJylcbiAgICAgICAge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKCdQaXhpLmpzIFdhcm5pbmc6IGdsLmdldFByb2dyYW1JbmZvTG9nKCknLCBnbC5nZXRQcm9ncmFtSW5mb0xvZyhwcm9ncmFtKSk7XG4gICAgICAgIH1cblxuICAgICAgICBnbC5kZWxldGVQcm9ncmFtKHByb2dyYW0pO1xuICAgICAgICBwcm9ncmFtID0gbnVsbDtcbiAgICB9XG5cbiAgICAvLyBjbGVhbiB1cCBzb21lIHNoYWRlcnNcbiAgICBnbC5kZWxldGVTaGFkZXIoZ2xWZXJ0U2hhZGVyKTtcbiAgICBnbC5kZWxldGVTaGFkZXIoZ2xGcmFnU2hhZGVyKTtcblxuICAgIHJldHVybiBwcm9ncmFtO1xufVxuXG52YXIgY29tcGlsZVNoYWRlciA9IGZ1bmN0aW9uIChnbCwgdHlwZSwgc3JjKVxue1xuICAgIHZhciBzaGFkZXIgPSBnbC5jcmVhdGVTaGFkZXIodHlwZSk7XG5cbiAgICBnbC5zaGFkZXJTb3VyY2Uoc2hhZGVyLCBzcmMpO1xuICAgIGdsLmNvbXBpbGVTaGFkZXIoc2hhZGVyKTtcblxuICAgIGlmICghZ2wuZ2V0U2hhZGVyUGFyYW1ldGVyKHNoYWRlciwgZ2wuQ09NUElMRV9TVEFUVVMpKVxuICAgIHtcbiAgICAgICAgY29uc29sZS5sb2coZ2wuZ2V0U2hhZGVySW5mb0xvZyhzaGFkZXIpKTtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgcmV0dXJuIHNoYWRlcjtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gY29tcGlsZVByb2dyYW07XG5cbiIsIlxuXG52YXIgZGVmYXVsdFZhbHVlID0gZnVuY3Rpb24odHlwZSwgc2l6ZSkgXG57XG4gICAgc3dpdGNoICh0eXBlKVxuICAgIHtcbiAgICAgICAgY2FzZSAnZmxvYXQnOlxuICAgICAgICAgICAgcmV0dXJuIDA7XG5cbiAgICAgICAgY2FzZSAndmVjMic6IFxuICAgICAgICAgICAgcmV0dXJuIG5ldyBGbG9hdDMyQXJyYXkoMiAqIHNpemUpO1xuXG4gICAgICAgIGNhc2UgJ3ZlYzMnOlxuICAgICAgICAgICAgcmV0dXJuIG5ldyBGbG9hdDMyQXJyYXkoMyAqIHNpemUpO1xuXG4gICAgICAgIGNhc2UgJ3ZlYzQnOiAgICAgXG4gICAgICAgICAgICByZXR1cm4gbmV3IEZsb2F0MzJBcnJheSg0ICogc2l6ZSk7XG4gICAgICAgICAgICBcbiAgICAgICAgY2FzZSAnaW50JzpcbiAgICAgICAgY2FzZSAnc2FtcGxlcjJEJzpcbiAgICAgICAgICAgIHJldHVybiAwO1xuXG4gICAgICAgIGNhc2UgJ2l2ZWMyJzogICBcbiAgICAgICAgICAgIHJldHVybiBuZXcgSW50MzJBcnJheSgyICogc2l6ZSk7XG5cbiAgICAgICAgY2FzZSAnaXZlYzMnOlxuICAgICAgICAgICAgcmV0dXJuIG5ldyBJbnQzMkFycmF5KDMgKiBzaXplKTtcblxuICAgICAgICBjYXNlICdpdmVjNCc6IFxuICAgICAgICAgICAgcmV0dXJuIG5ldyBJbnQzMkFycmF5KDQgKiBzaXplKTtcblxuICAgICAgICBjYXNlICdib29sJzogICAgIFxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuXG4gICAgICAgIGNhc2UgJ2J2ZWMyJzpcblxuICAgICAgICAgICAgcmV0dXJuIGJvb2xlYW5BcnJheSggMiAqIHNpemUpO1xuXG4gICAgICAgIGNhc2UgJ2J2ZWMzJzpcbiAgICAgICAgICAgIHJldHVybiBib29sZWFuQXJyYXkoMyAqIHNpemUpO1xuXG4gICAgICAgIGNhc2UgJ2J2ZWM0JzpcbiAgICAgICAgICAgIHJldHVybiBib29sZWFuQXJyYXkoNCAqIHNpemUpO1xuXG4gICAgICAgIGNhc2UgJ21hdDInOlxuICAgICAgICAgICAgcmV0dXJuIG5ldyBGbG9hdDMyQXJyYXkoWzEsIDBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwwLCAxXSk7XG5cbiAgICAgICAgY2FzZSAnbWF0Myc6IFxuICAgICAgICAgICAgcmV0dXJuIG5ldyBGbG9hdDMyQXJyYXkoWzEsIDAsIDBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwwLCAxLCAwXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsMCwgMCwgMV0pO1xuXG4gICAgICAgIGNhc2UgJ21hdDQnOlxuICAgICAgICAgICAgcmV0dXJuIG5ldyBGbG9hdDMyQXJyYXkoWzEsIDAsIDAsIDBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwwLCAxLCAwLCAwXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsMCwgMCwgMSwgMFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLDAsIDAsIDAsIDFdKTtcbiAgICB9XG59XG5cbnZhciBib29sZWFuQXJyYXkgPSBmdW5jdGlvbihzaXplKVxue1xuICAgIHZhciBhcnJheSA9IG5ldyBBcnJheShzaXplKTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXJyYXkubGVuZ3RoOyBpKyspIFxuICAgIHtcbiAgICAgICAgYXJyYXlbaV0gPSBmYWxzZTtcbiAgICB9O1xuXG4gICAgcmV0dXJuIGFycmF5O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGRlZmF1bHRWYWx1ZTtcbiIsIlxudmFyIG1hcFR5cGUgPSByZXF1aXJlKCcuL21hcFR5cGUnKTtcbnZhciBtYXBTaXplID0gcmVxdWlyZSgnLi9tYXBTaXplJyk7XG5cbnZhciBleHRyYWN0QXR0cmlidXRlcyA9IGZ1bmN0aW9uKGdsLCBwcm9ncmFtKVxue1xuICAgIHZhciBhdHRyaWJ1dGVzID0ge307XG5cbiAgICB2YXIgdG90YWxBdHRyaWJ1dGVzID0gZ2wuZ2V0UHJvZ3JhbVBhcmFtZXRlcihwcm9ncmFtLCBnbC5BQ1RJVkVfQVRUUklCVVRFUylcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdG90YWxBdHRyaWJ1dGVzOyBpKyspIFxuICAgIHtcbiAgICAgICAgdmFyIGF0dHJpYkRhdGEgPSBnbC5nZXRBY3RpdmVBdHRyaWIocHJvZ3JhbSwgaSk7XG4gICAgICAgIHZhciB0eXBlID0gbWFwVHlwZShnbCwgYXR0cmliRGF0YS50eXBlKTtcblxuICAgICAgICBhdHRyaWJ1dGVzW2F0dHJpYkRhdGEubmFtZV0gPSB7XG4gICAgICAgICAgICB0eXBlOnR5cGUsXG4gICAgICAgICAgICBzaXplOm1hcFNpemUodHlwZSksXG4gICAgICAgICAgICBsb2NhdGlvbjpnbC5nZXRBdHRyaWJMb2NhdGlvbihwcm9ncmFtLCBhdHRyaWJEYXRhLm5hbWUpLFxuICAgICAgICAgICAgLy9UT0RPIC0gbWFrZSBhbiBhdHRyaWJ1dGUgb2JqZWN0XG4gICAgICAgICAgICBwb2ludGVyOmZ1bmN0aW9uKHR5cGUsIG5vcm1hbGl6ZWQsIHN0cmlkZSwgc3RhcnQpe1xuXG4gICAgICAgICAgICAgLy8gICBjb25zb2xlLmxvZyh0aGlzLmxvY2F0aW9uKVxuICAgICAgICAgICAgICAgIGdsLnZlcnRleEF0dHJpYlBvaW50ZXIodGhpcy5sb2NhdGlvbix0aGlzLnNpemUsIHR5cGUgfHwgZ2wuRkxPQVQsIG5vcm1hbGl6ZWQgfHwgZmFsc2UsIHN0cmlkZSB8fCAwLCBzdGFydCB8fCAwKTsgXG5cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH07XG5cbiAgICByZXR1cm4gYXR0cmlidXRlczsgIFxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGV4dHJhY3RBdHRyaWJ1dGVzO1xuXG4iLCJ2YXIgbWFwVHlwZSA9IHJlcXVpcmUoJy4vbWFwVHlwZScpO1xudmFyIGRlZmF1bHRWYWx1ZSA9IHJlcXVpcmUoJy4vZGVmYXVsdFZhbHVlJyk7XG5cblxudmFyIGV4dHJhY3RVbmlmb3JtcyA9IGZ1bmN0aW9uKGdsLCBwcm9ncmFtKVxue1xuXHR2YXIgdW5pZm9ybXMgPSB7fTtcblx0XG4gICAgdmFyIHRvdGFsVW5pZm9ybXMgPSBnbC5nZXRQcm9ncmFtUGFyYW1ldGVyKHByb2dyYW0sIGdsLkFDVElWRV9VTklGT1JNUylcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdG90YWxVbmlmb3JtczsgaSsrKSBcbiAgICB7XG4gICAgXHR2YXIgdW5pZm9ybURhdGEgPSBnbC5nZXRBY3RpdmVVbmlmb3JtKHByb2dyYW0sIGkpO1xuICAgIFx0dmFyIG5hbWUgPSB1bmlmb3JtRGF0YS5uYW1lLnJlcGxhY2UoL1xcWy4qP1xcXS8sIFwiXCIpO1xuICAgICAgICB2YXIgdHlwZSA9IG1hcFR5cGUoZ2wsIHVuaWZvcm1EYXRhLnR5cGUgKTtcblxuICAgIFx0dW5pZm9ybXNbbmFtZV0gPSB7XG4gICAgXHRcdHR5cGU6dHlwZSxcbiAgICBcdFx0c2l6ZTp1bmlmb3JtRGF0YS5zaXplLFxuICAgIFx0XHRsb2NhdGlvbjpnbC5nZXRVbmlmb3JtTG9jYXRpb24ocHJvZ3JhbSwgbmFtZSksXG4gICAgXHRcdHZhbHVlOmRlZmF1bHRWYWx1ZSh0eXBlLCB1bmlmb3JtRGF0YS5zaXplKVxuICAgIFx0fVxuICAgIH07XG5cdFxuXHRyZXR1cm4gdW5pZm9ybXM7XHRcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBleHRyYWN0VW5pZm9ybXM7XG5cbiIsIlxudmFyIGdlbmVyYXRlVW5pZm9ybUFjY2Vzc09iamVjdCA9IGZ1bmN0aW9uKGdsLCB1bmlmb3JtRGF0YSlcbntcbiAgICAvLyB0aGlzIGlzIHRoZSBvYmplY3Qgd2Ugd2lsbCBiZSBzZW5kaW5nIGJhY2suXG4gICAgLy8gYW4gb2JqZWN0IGhpZXJhY2h5IHdpbGwgYmUgY3JlYXRlZCBmb3Igc3RydWN0c1xuICAgIHZhciB1bmlmb3JtcyA9IHtkYXRhOnt9fTtcblxuICAgIHVuaWZvcm1zLmdsID0gZ2w7XG4gICAgXG4gICAgdmFyIHVuaWZvcm1LZXlzPSBPYmplY3Qua2V5cyh1bmlmb3JtRGF0YSk7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHVuaWZvcm1LZXlzLmxlbmd0aDsgaSsrKSBcbiAgICB7XG4gICAgICAgIHZhciBmdWxsTmFtZSA9IHVuaWZvcm1LZXlzW2ldXG5cbiAgICAgICAgdmFyIG5hbWVUb2tlbnMgPSBmdWxsTmFtZS5zcGxpdCgnLicpO1xuICAgICAgICB2YXIgbmFtZSA9IG5hbWVUb2tlbnNbbmFtZVRva2Vucy5sZW5ndGggLSAxXTtcblxuICAgICAgICB2YXIgdW5pZm9ybUdyb3VwID0gZ2V0VW5pZm9ybUdyb3VwKG5hbWVUb2tlbnMsIHVuaWZvcm1zKTtcblxuICAgICAgICB2YXIgdW5pZm9ybSA9ICB1bmlmb3JtRGF0YVtmdWxsTmFtZV07XG4gICAgICAgIHVuaWZvcm1Hcm91cC5kYXRhW25hbWVdID0gdW5pZm9ybTtcblxuICAgICAgICB1bmlmb3JtR3JvdXAuZ2wgPSBnbDtcblxuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodW5pZm9ybUdyb3VwLCBuYW1lLCB7XG4gICAgICAgICAgICBnZXQ6IGdlbmVyYXRlR2V0dGVyKG5hbWUpLFxuICAgICAgICAgICAgc2V0OiBnZW5lcmF0ZVNldHRlcihuYW1lLCB1bmlmb3JtKVxuICAgICAgICB9KVxuICAgIH07XG5cbiAgICByZXR1cm4gdW5pZm9ybXM7XG59XG5cbnZhciBnZW5lcmF0ZUdldHRlciA9IGZ1bmN0aW9uKG5hbWUpXG57XG5cdHZhciB0ZW1wbGF0ZSA9IGdldHRlclRlbXBsYXRlLnJlcGxhY2UoJyUlJywgbmFtZSk7XG5cdHJldHVybiBuZXcgRnVuY3Rpb24odGVtcGxhdGUpO1xufVxuXG52YXIgZ2VuZXJhdGVTZXR0ZXIgPSBmdW5jdGlvbihuYW1lLCB1bmlmb3JtKVxue1xuICAgIHZhciB0ZW1wbGF0ZSA9IHNldHRlclRlbXBsYXRlLnJlcGxhY2UoLyUlL2csIG5hbWUpO1xuICAgIHZhciBzZXRUZW1wbGF0ZVxuICAgIFxuICAgIGlmKHVuaWZvcm0uc2l6ZSA9PT0gMSlcbiAgICB7XG4gICAgICAgIHNldFRlbXBsYXRlID0gR0xTTF9UT19TSU5HTEVfU0VUVEVSU1t1bmlmb3JtLnR5cGVdO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICBzZXRUZW1wbGF0ZSA9IEdMU0xfVE9fQVJSQVlfU0VUVEVSU1t1bmlmb3JtLnR5cGVdO1xuICAgIH1cblxuICAgIGlmKHNldFRlbXBsYXRlKVxuICAgIHtcbiAgICAgICAgdGVtcGxhdGUgKz0gXCJcXG50aGlzLmdsLlwiICsgc2V0VGVtcGxhdGUgKyBcIjtcIjtcbiAgICB9XG5cbiAgXHRyZXR1cm4gbmV3IEZ1bmN0aW9uKCd2YWx1ZScsIHRlbXBsYXRlKTtcbn1cblxudmFyIGdldFVuaWZvcm1Hcm91cCA9IGZ1bmN0aW9uKG5hbWVUb2tlbnMsIHVuaWZvcm0pXG57XG4gICAgdmFyIGN1ciA9IHVuaWZvcm07XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG5hbWVUb2tlbnMubGVuZ3RoIC0gMTsgaSsrKSBcbiAgICB7XG4gICAgICAgIHZhciBvID0gY3VyW25hbWVUb2tlbnNbaV1dIHx8IHtkYXRhOnt9fTtcbiAgICAgICAgY3VyW25hbWVUb2tlbnNbaV1dID0gbztcbiAgICAgICAgY3VyID0gbztcbiAgICB9O1xuXG4gICAgcmV0dXJuIGN1clxufVxuXG52YXIgZ2V0dGVyVGVtcGxhdGUgPSBbXG4gICAgJ3JldHVybiB0aGlzLmRhdGEuJSUudmFsdWU7Jyxcbl0uam9pbignXFxuJyk7XG5cbnZhciBzZXR0ZXJUZW1wbGF0ZSA9IFtcbiAgICAndGhpcy5kYXRhLiUlLnZhbHVlID0gdmFsdWU7JyxcbiAgICAndmFyIGxvY2F0aW9uID0gdGhpcy5kYXRhLiUlLmxvY2F0aW9uOydcbl0uam9pbignXFxuJyk7XG5cblxudmFyIEdMU0xfVE9fU0lOR0xFX1NFVFRFUlMgPSB7XG5cbiAgICAnZmxvYXQnOiAgICAndW5pZm9ybTFmKGxvY2F0aW9uLCB2YWx1ZSknLFxuXG4gICAgJ3ZlYzInOiAgICAgJ3VuaWZvcm0yZihsb2NhdGlvbiwgdmFsdWVbMF0sIHZhbHVlWzFdKScsXG4gICAgJ3ZlYzMnOiAgICAgJ3VuaWZvcm0zZihsb2NhdGlvbiwgdmFsdWVbMF0sIHZhbHVlWzFdLCB2YWx1ZVsyXSknLFxuICAgICd2ZWM0JzogICAgICd1bmlmb3JtNGYobG9jYXRpb24sIHZhbHVlWzBdLCB2YWx1ZVsxXSwgdmFsdWVbMl0sIHZhbHVlWzNdKScsXG4gICAgXHRcbiAgICAnaW50JzogICAgICAndW5pZm9ybTFpKGxvY2F0aW9uLCB2YWx1ZSknLFxuICAgICdpdmVjMic6ICAgICd1bmlmb3JtMmkobG9jYXRpb24sIHZhbHVlWzBdLCB2YWx1ZVsxXSknLFxuICAgICdpdmVjMyc6ICAgICd1bmlmb3JtM2kobG9jYXRpb24sIHZhbHVlWzBdLCB2YWx1ZVsxXSwgdmFsdWVbMl0pJyxcbiAgICAnaXZlYzQnOiAgICAndW5pZm9ybTRpKGxvY2F0aW9uLCB2YWx1ZVswXSwgdmFsdWVbMV0sIHZhbHVlWzJdLCB2YWx1ZVszXSknLFxuXG4gICAgJ2Jvb2wnOiAgICAgJ3VuaWZvcm0xaShsb2NhdGlvbiwgdmFsdWUpJyxcbiAgICAnYnZlYzInOiAgICAndW5pZm9ybTJpKGxvY2F0aW9uLCB2YWx1ZVswXSwgdmFsdWVbMV0pJyxcbiAgICAnYnZlYzMnOiAgICAndW5pZm9ybTNpKGxvY2F0aW9uLCB2YWx1ZVswXSwgdmFsdWVbMV0sIHZhbHVlWzJdKScsXG4gICAgJ2J2ZWM0JzogICAgJ3VuaWZvcm00aShsb2NhdGlvbiwgdmFsdWVbMF0sIHZhbHVlWzFdLCB2YWx1ZVsyXSwgdmFsdWVbM10pJyxcblxuICAgICdtYXQyJzogICAgICd1bmlmb3JtTWF0cml4MmZ2KGxvY2F0aW9uLCBmYWxzZSwgdmFsdWUpJyxcbiAgICAnbWF0Myc6ICAgICAndW5pZm9ybU1hdHJpeDNmdihsb2NhdGlvbiwgZmFsc2UsIHZhbHVlKScsXG4gICAgJ21hdDQnOiAgICAgJ3VuaWZvcm1NYXRyaXg0ZnYobG9jYXRpb24sIGZhbHNlLCB2YWx1ZSknLFxuXG4gICAgJ3NhbXBsZXIyRCc6J3VuaWZvcm0xaShsb2NhdGlvbiwgdmFsdWUpJ1xufVxuXG52YXIgR0xTTF9UT19BUlJBWV9TRVRURVJTID0ge1xuXG4gICAgJ2Zsb2F0JzogICAgJ3VuaWZvcm0xZnYobG9jYXRpb24sIHZhbHVlKScsXG5cbiAgICAndmVjMic6ICAgICAndW5pZm9ybTJmdihsb2NhdGlvbiwgdmFsdWUpJyxcbiAgICAndmVjMyc6ICAgICAndW5pZm9ybTNmdihsb2NhdGlvbiwgdmFsdWUpJyxcbiAgICAndmVjNCc6ICAgICAndW5pZm9ybTRmdihsb2NhdGlvbiwgdmFsdWUpJyxcbiAgICBcdFxuICAgICdpbnQnOiAgICAgICd1bmlmb3JtMWl2KGxvY2F0aW9uLCB2YWx1ZSknLFxuICAgICdpdmVjMic6ICAgICd1bmlmb3JtMml2KGxvY2F0aW9uLCB2YWx1ZSknLFxuICAgICdpdmVjMyc6ICAgICd1bmlmb3JtM2l2KGxvY2F0aW9uLCB2YWx1ZSknLFxuICAgICdpdmVjNCc6ICAgICd1bmlmb3JtNGl2KGxvY2F0aW9uLCB2YWx1ZSknLFxuXG4gICAgJ2Jvb2wnOiAgICAgJ3VuaWZvcm0xaXYobG9jYXRpb24sIHZhbHVlKScsXG4gICAgJ2J2ZWMyJzogICAgJ3VuaWZvcm0yaXYobG9jYXRpb24sIHZhbHVlKScsXG4gICAgJ2J2ZWMzJzogICAgJ3VuaWZvcm0zaXYobG9jYXRpb24sIHZhbHVlKScsXG4gICAgJ2J2ZWM0JzogICAgJ3VuaWZvcm00aXYobG9jYXRpb24sIHZhbHVlKScsXG4gICBcbiAgICAnc2FtcGxlcjJEJzondW5pZm9ybTFpdihsb2NhdGlvbiwgdmFsdWUpJ1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGdlbmVyYXRlVW5pZm9ybUFjY2Vzc09iamVjdDtcblxuIiwiXG5cbnZhciBtYXBTaXplID0gZnVuY3Rpb24odHlwZSkgXG57IFxuICAgIHJldHVybiBHTFNMX1RPX1NJWkVbdHlwZV07XG59XG5cblxudmFyIEdMU0xfVE9fU0laRSA9IHtcbiAgICAnZmxvYXQnOiAgICAxLFxuICAgICd2ZWMyJzogICAgIDIsXG4gICAgJ3ZlYzMnOiAgICAgMyxcbiAgICAndmVjNCc6ICAgICA0LFxuXG4gICAgJ2ludCc6ICAgICAgMSxcbiAgICAnaXZlYzInOiAgICAyLFxuICAgICdpdmVjMyc6ICAgIDMsXG4gICAgJ2l2ZWM0JzogICAgNCxcblxuICAgICdib29sJzogICAgIDEsXG4gICAgJ2J2ZWMyJzogICAgMixcbiAgICAnYnZlYzMnOiAgICAzLFxuICAgICdidmVjNCc6ICAgIDQsXG5cbiAgICAnbWF0Mic6ICAgICA0LFxuICAgICdtYXQzJzogICAgIDksXG4gICAgJ21hdDQnOiAgICAgMTYsXG5cbiAgICAnc2FtcGxlcjJEJzogIDFcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBtYXBTaXplO1xuIiwiXG5cbnZhciBtYXBTaXplID0gZnVuY3Rpb24oZ2wsIHR5cGUpIFxue1xuICAgIGlmKCFHTF9UQUJMRSkgXG4gICAge1xuICAgICAgICB2YXIgdHlwZU5hbWVzID0gT2JqZWN0LmtleXMoR0xfVE9fR0xTTF9UWVBFUyk7XG5cbiAgICAgICAgR0xfVEFCTEUgPSB7fTtcblxuICAgICAgICBmb3IodmFyIGkgPSAwOyBpIDwgdHlwZU5hbWVzLmxlbmd0aDsgKytpKSBcbiAgICAgICAge1xuICAgICAgICAgICAgdmFyIHRuID0gdHlwZU5hbWVzW2ldO1xuICAgICAgICAgICAgR0xfVEFCTEVbIGdsW3RuXSBdID0gR0xfVE9fR0xTTF9UWVBFU1t0bl07XG4gICAgICAgIH1cbiAgICB9XG5cbiAgcmV0dXJuIEdMX1RBQkxFW3R5cGVdO1xufVxuXG52YXIgR0xfVEFCTEUgPSBudWxsO1xuXG52YXIgR0xfVE9fR0xTTF9UWVBFUyA9IHtcbiAgJ0ZMT0FUJzogICAgICAgJ2Zsb2F0JyxcbiAgJ0ZMT0FUX1ZFQzInOiAgJ3ZlYzInLFxuICAnRkxPQVRfVkVDMyc6ICAndmVjMycsXG4gICdGTE9BVF9WRUM0JzogICd2ZWM0JyxcblxuICAnSU5UJzogICAgICAgICAnaW50JyxcbiAgJ0lOVF9WRUMyJzogICAgJ2l2ZWMyJyxcbiAgJ0lOVF9WRUMzJzogICAgJ2l2ZWMzJyxcbiAgJ0lOVF9WRUM0JzogICAgJ2l2ZWM0JyxcbiAgXG4gICdCT09MJzogICAgICAgICdib29sJyxcbiAgJ0JPT0xfVkVDMic6ICAgJ2J2ZWMyJyxcbiAgJ0JPT0xfVkVDMyc6ICAgJ2J2ZWMzJyxcbiAgJ0JPT0xfVkVDNCc6ICAgJ2J2ZWM0JyxcbiAgXG4gICdGTE9BVF9NQVQyJzogICdtYXQyJyxcbiAgJ0ZMT0FUX01BVDMnOiAgJ21hdDMnLFxuICAnRkxPQVRfTUFUNCc6ICAnbWF0NCcsXG4gIFxuICAnU0FNUExFUl8yRCc6ICAnc2FtcGxlcjJEJyAgXG59XG5cbm1vZHVsZS5leHBvcnRzID0gbWFwU2l6ZTtcbiIsIi8qIVxuICogYXN5bmNcbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS9jYW9sYW4vYXN5bmNcbiAqXG4gKiBDb3B5cmlnaHQgMjAxMC0yMDE0IENhb2xhbiBNY01haG9uXG4gKiBSZWxlYXNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2VcbiAqL1xuKGZ1bmN0aW9uICgpIHtcblxuICAgIHZhciBhc3luYyA9IHt9O1xuICAgIGZ1bmN0aW9uIG5vb3AoKSB7fVxuICAgIGZ1bmN0aW9uIGlkZW50aXR5KHYpIHtcbiAgICAgICAgcmV0dXJuIHY7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHRvQm9vbCh2KSB7XG4gICAgICAgIHJldHVybiAhIXY7XG4gICAgfVxuICAgIGZ1bmN0aW9uIG5vdElkKHYpIHtcbiAgICAgICAgcmV0dXJuICF2O1xuICAgIH1cblxuICAgIC8vIGdsb2JhbCBvbiB0aGUgc2VydmVyLCB3aW5kb3cgaW4gdGhlIGJyb3dzZXJcbiAgICB2YXIgcHJldmlvdXNfYXN5bmM7XG5cbiAgICAvLyBFc3RhYmxpc2ggdGhlIHJvb3Qgb2JqZWN0LCBgd2luZG93YCAoYHNlbGZgKSBpbiB0aGUgYnJvd3NlciwgYGdsb2JhbGBcbiAgICAvLyBvbiB0aGUgc2VydmVyLCBvciBgdGhpc2AgaW4gc29tZSB2aXJ0dWFsIG1hY2hpbmVzLiBXZSB1c2UgYHNlbGZgXG4gICAgLy8gaW5zdGVhZCBvZiBgd2luZG93YCBmb3IgYFdlYldvcmtlcmAgc3VwcG9ydC5cbiAgICB2YXIgcm9vdCA9IHR5cGVvZiBzZWxmID09PSAnb2JqZWN0JyAmJiBzZWxmLnNlbGYgPT09IHNlbGYgJiYgc2VsZiB8fFxuICAgICAgICAgICAgdHlwZW9mIGdsb2JhbCA9PT0gJ29iamVjdCcgJiYgZ2xvYmFsLmdsb2JhbCA9PT0gZ2xvYmFsICYmIGdsb2JhbCB8fFxuICAgICAgICAgICAgdGhpcztcblxuICAgIGlmIChyb290ICE9IG51bGwpIHtcbiAgICAgICAgcHJldmlvdXNfYXN5bmMgPSByb290LmFzeW5jO1xuICAgIH1cblxuICAgIGFzeW5jLm5vQ29uZmxpY3QgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJvb3QuYXN5bmMgPSBwcmV2aW91c19hc3luYztcbiAgICAgICAgcmV0dXJuIGFzeW5jO1xuICAgIH07XG5cbiAgICBmdW5jdGlvbiBvbmx5X29uY2UoZm4pIHtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgaWYgKGZuID09PSBudWxsKSB0aHJvdyBuZXcgRXJyb3IoXCJDYWxsYmFjayB3YXMgYWxyZWFkeSBjYWxsZWQuXCIpO1xuICAgICAgICAgICAgZm4uYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICAgICAgICAgIGZuID0gbnVsbDtcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBfb25jZShmbikge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICBpZiAoZm4gPT09IG51bGwpIHJldHVybjtcbiAgICAgICAgICAgIGZuLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgICAgICAgICBmbiA9IG51bGw7XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgLy8vLyBjcm9zcy1icm93c2VyIGNvbXBhdGlibGl0eSBmdW5jdGlvbnMgLy8vL1xuXG4gICAgdmFyIF90b1N0cmluZyA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7XG5cbiAgICB2YXIgX2lzQXJyYXkgPSBBcnJheS5pc0FycmF5IHx8IGZ1bmN0aW9uIChvYmopIHtcbiAgICAgICAgcmV0dXJuIF90b1N0cmluZy5jYWxsKG9iaikgPT09ICdbb2JqZWN0IEFycmF5XSc7XG4gICAgfTtcblxuICAgIC8vIFBvcnRlZCBmcm9tIHVuZGVyc2NvcmUuanMgaXNPYmplY3RcbiAgICB2YXIgX2lzT2JqZWN0ID0gZnVuY3Rpb24ob2JqKSB7XG4gICAgICAgIHZhciB0eXBlID0gdHlwZW9mIG9iajtcbiAgICAgICAgcmV0dXJuIHR5cGUgPT09ICdmdW5jdGlvbicgfHwgdHlwZSA9PT0gJ29iamVjdCcgJiYgISFvYmo7XG4gICAgfTtcblxuICAgIGZ1bmN0aW9uIF9pc0FycmF5TGlrZShhcnIpIHtcbiAgICAgICAgcmV0dXJuIF9pc0FycmF5KGFycikgfHwgKFxuICAgICAgICAgICAgLy8gaGFzIGEgcG9zaXRpdmUgaW50ZWdlciBsZW5ndGggcHJvcGVydHlcbiAgICAgICAgICAgIHR5cGVvZiBhcnIubGVuZ3RoID09PSBcIm51bWJlclwiICYmXG4gICAgICAgICAgICBhcnIubGVuZ3RoID49IDAgJiZcbiAgICAgICAgICAgIGFyci5sZW5ndGggJSAxID09PSAwXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gX2FycmF5RWFjaChhcnIsIGl0ZXJhdG9yKSB7XG4gICAgICAgIHZhciBpbmRleCA9IC0xLFxuICAgICAgICAgICAgbGVuZ3RoID0gYXJyLmxlbmd0aDtcblxuICAgICAgICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgICAgICAgICAgaXRlcmF0b3IoYXJyW2luZGV4XSwgaW5kZXgsIGFycik7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBfbWFwKGFyciwgaXRlcmF0b3IpIHtcbiAgICAgICAgdmFyIGluZGV4ID0gLTEsXG4gICAgICAgICAgICBsZW5ndGggPSBhcnIubGVuZ3RoLFxuICAgICAgICAgICAgcmVzdWx0ID0gQXJyYXkobGVuZ3RoKTtcblxuICAgICAgICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgICAgICAgICAgcmVzdWx0W2luZGV4XSA9IGl0ZXJhdG9yKGFycltpbmRleF0sIGluZGV4LCBhcnIpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gX3JhbmdlKGNvdW50KSB7XG4gICAgICAgIHJldHVybiBfbWFwKEFycmF5KGNvdW50KSwgZnVuY3Rpb24gKHYsIGkpIHsgcmV0dXJuIGk7IH0pO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIF9yZWR1Y2UoYXJyLCBpdGVyYXRvciwgbWVtbykge1xuICAgICAgICBfYXJyYXlFYWNoKGFyciwgZnVuY3Rpb24gKHgsIGksIGEpIHtcbiAgICAgICAgICAgIG1lbW8gPSBpdGVyYXRvcihtZW1vLCB4LCBpLCBhKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBtZW1vO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIF9mb3JFYWNoT2Yob2JqZWN0LCBpdGVyYXRvcikge1xuICAgICAgICBfYXJyYXlFYWNoKF9rZXlzKG9iamVjdCksIGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgICAgIGl0ZXJhdG9yKG9iamVjdFtrZXldLCBrZXkpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBfaW5kZXhPZihhcnIsIGl0ZW0pIHtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcnIubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGlmIChhcnJbaV0gPT09IGl0ZW0pIHJldHVybiBpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiAtMTtcbiAgICB9XG5cbiAgICB2YXIgX2tleXMgPSBPYmplY3Qua2V5cyB8fCBmdW5jdGlvbiAob2JqKSB7XG4gICAgICAgIHZhciBrZXlzID0gW107XG4gICAgICAgIGZvciAodmFyIGsgaW4gb2JqKSB7XG4gICAgICAgICAgICBpZiAob2JqLmhhc093blByb3BlcnR5KGspKSB7XG4gICAgICAgICAgICAgICAga2V5cy5wdXNoKGspO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBrZXlzO1xuICAgIH07XG5cbiAgICBmdW5jdGlvbiBfa2V5SXRlcmF0b3IoY29sbCkge1xuICAgICAgICB2YXIgaSA9IC0xO1xuICAgICAgICB2YXIgbGVuO1xuICAgICAgICB2YXIga2V5cztcbiAgICAgICAgaWYgKF9pc0FycmF5TGlrZShjb2xsKSkge1xuICAgICAgICAgICAgbGVuID0gY29sbC5sZW5ndGg7XG4gICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24gbmV4dCgpIHtcbiAgICAgICAgICAgICAgICBpKys7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGkgPCBsZW4gPyBpIDogbnVsbDtcbiAgICAgICAgICAgIH07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBrZXlzID0gX2tleXMoY29sbCk7XG4gICAgICAgICAgICBsZW4gPSBrZXlzLmxlbmd0aDtcbiAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbiBuZXh0KCkge1xuICAgICAgICAgICAgICAgIGkrKztcbiAgICAgICAgICAgICAgICByZXR1cm4gaSA8IGxlbiA/IGtleXNbaV0gOiBudWxsO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIFNpbWlsYXIgdG8gRVM2J3MgcmVzdCBwYXJhbSAoaHR0cDovL2FyaXlhLm9maWxhYnMuY29tLzIwMTMvMDMvZXM2LWFuZC1yZXN0LXBhcmFtZXRlci5odG1sKVxuICAgIC8vIFRoaXMgYWNjdW11bGF0ZXMgdGhlIGFyZ3VtZW50cyBwYXNzZWQgaW50byBhbiBhcnJheSwgYWZ0ZXIgYSBnaXZlbiBpbmRleC5cbiAgICAvLyBGcm9tIHVuZGVyc2NvcmUuanMgKGh0dHBzOi8vZ2l0aHViLmNvbS9qYXNoa2VuYXMvdW5kZXJzY29yZS9wdWxsLzIxNDApLlxuICAgIGZ1bmN0aW9uIF9yZXN0UGFyYW0oZnVuYywgc3RhcnRJbmRleCkge1xuICAgICAgICBzdGFydEluZGV4ID0gc3RhcnRJbmRleCA9PSBudWxsID8gZnVuYy5sZW5ndGggLSAxIDogK3N0YXJ0SW5kZXg7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIHZhciBsZW5ndGggPSBNYXRoLm1heChhcmd1bWVudHMubGVuZ3RoIC0gc3RhcnRJbmRleCwgMCk7XG4gICAgICAgICAgICB2YXIgcmVzdCA9IEFycmF5KGxlbmd0aCk7XG4gICAgICAgICAgICBmb3IgKHZhciBpbmRleCA9IDA7IGluZGV4IDwgbGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgICAgICAgICAgICAgcmVzdFtpbmRleF0gPSBhcmd1bWVudHNbaW5kZXggKyBzdGFydEluZGV4XTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHN3aXRjaCAoc3RhcnRJbmRleCkge1xuICAgICAgICAgICAgICAgIGNhc2UgMDogcmV0dXJuIGZ1bmMuY2FsbCh0aGlzLCByZXN0KTtcbiAgICAgICAgICAgICAgICBjYXNlIDE6IHJldHVybiBmdW5jLmNhbGwodGhpcywgYXJndW1lbnRzWzBdLCByZXN0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIEN1cnJlbnRseSB1bnVzZWQgYnV0IGhhbmRsZSBjYXNlcyBvdXRzaWRlIG9mIHRoZSBzd2l0Y2ggc3RhdGVtZW50OlxuICAgICAgICAgICAgLy8gdmFyIGFyZ3MgPSBBcnJheShzdGFydEluZGV4ICsgMSk7XG4gICAgICAgICAgICAvLyBmb3IgKGluZGV4ID0gMDsgaW5kZXggPCBzdGFydEluZGV4OyBpbmRleCsrKSB7XG4gICAgICAgICAgICAvLyAgICAgYXJnc1tpbmRleF0gPSBhcmd1bWVudHNbaW5kZXhdO1xuICAgICAgICAgICAgLy8gfVxuICAgICAgICAgICAgLy8gYXJnc1tzdGFydEluZGV4XSA9IHJlc3Q7XG4gICAgICAgICAgICAvLyByZXR1cm4gZnVuYy5hcHBseSh0aGlzLCBhcmdzKTtcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBfd2l0aG91dEluZGV4KGl0ZXJhdG9yKSB7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAodmFsdWUsIGluZGV4LCBjYWxsYmFjaykge1xuICAgICAgICAgICAgcmV0dXJuIGl0ZXJhdG9yKHZhbHVlLCBjYWxsYmFjayk7XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgLy8vLyBleHBvcnRlZCBhc3luYyBtb2R1bGUgZnVuY3Rpb25zIC8vLy9cblxuICAgIC8vLy8gbmV4dFRpY2sgaW1wbGVtZW50YXRpb24gd2l0aCBicm93c2VyLWNvbXBhdGlibGUgZmFsbGJhY2sgLy8vL1xuXG4gICAgLy8gY2FwdHVyZSB0aGUgZ2xvYmFsIHJlZmVyZW5jZSB0byBndWFyZCBhZ2FpbnN0IGZha2VUaW1lciBtb2Nrc1xuICAgIHZhciBfc2V0SW1tZWRpYXRlID0gdHlwZW9mIHNldEltbWVkaWF0ZSA9PT0gJ2Z1bmN0aW9uJyAmJiBzZXRJbW1lZGlhdGU7XG5cbiAgICB2YXIgX2RlbGF5ID0gX3NldEltbWVkaWF0ZSA/IGZ1bmN0aW9uKGZuKSB7XG4gICAgICAgIC8vIG5vdCBhIGRpcmVjdCBhbGlhcyBmb3IgSUUxMCBjb21wYXRpYmlsaXR5XG4gICAgICAgIF9zZXRJbW1lZGlhdGUoZm4pO1xuICAgIH0gOiBmdW5jdGlvbihmbikge1xuICAgICAgICBzZXRUaW1lb3V0KGZuLCAwKTtcbiAgICB9O1xuXG4gICAgaWYgKHR5cGVvZiBwcm9jZXNzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgcHJvY2Vzcy5uZXh0VGljayA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBhc3luYy5uZXh0VGljayA9IHByb2Nlc3MubmV4dFRpY2s7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgYXN5bmMubmV4dFRpY2sgPSBfZGVsYXk7XG4gICAgfVxuICAgIGFzeW5jLnNldEltbWVkaWF0ZSA9IF9zZXRJbW1lZGlhdGUgPyBfZGVsYXkgOiBhc3luYy5uZXh0VGljaztcblxuXG4gICAgYXN5bmMuZm9yRWFjaCA9XG4gICAgYXN5bmMuZWFjaCA9IGZ1bmN0aW9uIChhcnIsIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICByZXR1cm4gYXN5bmMuZWFjaE9mKGFyciwgX3dpdGhvdXRJbmRleChpdGVyYXRvciksIGNhbGxiYWNrKTtcbiAgICB9O1xuXG4gICAgYXN5bmMuZm9yRWFjaFNlcmllcyA9XG4gICAgYXN5bmMuZWFjaFNlcmllcyA9IGZ1bmN0aW9uIChhcnIsIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICByZXR1cm4gYXN5bmMuZWFjaE9mU2VyaWVzKGFyciwgX3dpdGhvdXRJbmRleChpdGVyYXRvciksIGNhbGxiYWNrKTtcbiAgICB9O1xuXG5cbiAgICBhc3luYy5mb3JFYWNoTGltaXQgPVxuICAgIGFzeW5jLmVhY2hMaW1pdCA9IGZ1bmN0aW9uIChhcnIsIGxpbWl0LCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgcmV0dXJuIF9lYWNoT2ZMaW1pdChsaW1pdCkoYXJyLCBfd2l0aG91dEluZGV4KGl0ZXJhdG9yKSwgY2FsbGJhY2spO1xuICAgIH07XG5cbiAgICBhc3luYy5mb3JFYWNoT2YgPVxuICAgIGFzeW5jLmVhY2hPZiA9IGZ1bmN0aW9uIChvYmplY3QsIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICBjYWxsYmFjayA9IF9vbmNlKGNhbGxiYWNrIHx8IG5vb3ApO1xuICAgICAgICBvYmplY3QgPSBvYmplY3QgfHwgW107XG5cbiAgICAgICAgdmFyIGl0ZXIgPSBfa2V5SXRlcmF0b3Iob2JqZWN0KTtcbiAgICAgICAgdmFyIGtleSwgY29tcGxldGVkID0gMDtcblxuICAgICAgICB3aGlsZSAoKGtleSA9IGl0ZXIoKSkgIT0gbnVsbCkge1xuICAgICAgICAgICAgY29tcGxldGVkICs9IDE7XG4gICAgICAgICAgICBpdGVyYXRvcihvYmplY3Rba2V5XSwga2V5LCBvbmx5X29uY2UoZG9uZSkpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGNvbXBsZXRlZCA9PT0gMCkgY2FsbGJhY2sobnVsbCk7XG5cbiAgICAgICAgZnVuY3Rpb24gZG9uZShlcnIpIHtcbiAgICAgICAgICAgIGNvbXBsZXRlZC0tO1xuICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBDaGVjayBrZXkgaXMgbnVsbCBpbiBjYXNlIGl0ZXJhdG9yIGlzbid0IGV4aGF1c3RlZFxuICAgICAgICAgICAgLy8gYW5kIGRvbmUgcmVzb2x2ZWQgc3luY2hyb25vdXNseS5cbiAgICAgICAgICAgIGVsc2UgaWYgKGtleSA9PT0gbnVsbCAmJiBjb21wbGV0ZWQgPD0gMCkge1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrKG51bGwpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfTtcblxuICAgIGFzeW5jLmZvckVhY2hPZlNlcmllcyA9XG4gICAgYXN5bmMuZWFjaE9mU2VyaWVzID0gZnVuY3Rpb24gKG9iaiwgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgIGNhbGxiYWNrID0gX29uY2UoY2FsbGJhY2sgfHwgbm9vcCk7XG4gICAgICAgIG9iaiA9IG9iaiB8fCBbXTtcbiAgICAgICAgdmFyIG5leHRLZXkgPSBfa2V5SXRlcmF0b3Iob2JqKTtcbiAgICAgICAgdmFyIGtleSA9IG5leHRLZXkoKTtcbiAgICAgICAgZnVuY3Rpb24gaXRlcmF0ZSgpIHtcbiAgICAgICAgICAgIHZhciBzeW5jID0gdHJ1ZTtcbiAgICAgICAgICAgIGlmIChrZXkgPT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gY2FsbGJhY2sobnVsbCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpdGVyYXRvcihvYmpba2V5XSwga2V5LCBvbmx5X29uY2UoZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGtleSA9IG5leHRLZXkoKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGtleSA9PT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKG51bGwpO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN5bmMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhc3luYy5zZXRJbW1lZGlhdGUoaXRlcmF0ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZXJhdGUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgIHN5bmMgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBpdGVyYXRlKCk7XG4gICAgfTtcblxuXG5cbiAgICBhc3luYy5mb3JFYWNoT2ZMaW1pdCA9XG4gICAgYXN5bmMuZWFjaE9mTGltaXQgPSBmdW5jdGlvbiAob2JqLCBsaW1pdCwgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgIF9lYWNoT2ZMaW1pdChsaW1pdCkob2JqLCBpdGVyYXRvciwgY2FsbGJhY2spO1xuICAgIH07XG5cbiAgICBmdW5jdGlvbiBfZWFjaE9mTGltaXQobGltaXQpIHtcblxuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKG9iaiwgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICBjYWxsYmFjayA9IF9vbmNlKGNhbGxiYWNrIHx8IG5vb3ApO1xuICAgICAgICAgICAgb2JqID0gb2JqIHx8IFtdO1xuICAgICAgICAgICAgdmFyIG5leHRLZXkgPSBfa2V5SXRlcmF0b3Iob2JqKTtcbiAgICAgICAgICAgIGlmIChsaW1pdCA8PSAwKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKG51bGwpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdmFyIGRvbmUgPSBmYWxzZTtcbiAgICAgICAgICAgIHZhciBydW5uaW5nID0gMDtcbiAgICAgICAgICAgIHZhciBlcnJvcmVkID0gZmFsc2U7XG5cbiAgICAgICAgICAgIChmdW5jdGlvbiByZXBsZW5pc2ggKCkge1xuICAgICAgICAgICAgICAgIGlmIChkb25lICYmIHJ1bm5pbmcgPD0gMCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gY2FsbGJhY2sobnVsbCk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgd2hpbGUgKHJ1bm5pbmcgPCBsaW1pdCAmJiAhZXJyb3JlZCkge1xuICAgICAgICAgICAgICAgICAgICB2YXIga2V5ID0gbmV4dEtleSgpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoa2V5ID09PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBkb25lID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChydW5uaW5nIDw9IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhudWxsKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBydW5uaW5nICs9IDE7XG4gICAgICAgICAgICAgICAgICAgIGl0ZXJhdG9yKG9ialtrZXldLCBrZXksIG9ubHlfb25jZShmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBydW5uaW5nIC09IDE7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvcmVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcGxlbmlzaCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSkoKTtcbiAgICAgICAgfTtcbiAgICB9XG5cblxuICAgIGZ1bmN0aW9uIGRvUGFyYWxsZWwoZm4pIHtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChvYmosIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICAgICAgcmV0dXJuIGZuKGFzeW5jLmVhY2hPZiwgb2JqLCBpdGVyYXRvciwgY2FsbGJhY2spO1xuICAgICAgICB9O1xuICAgIH1cbiAgICBmdW5jdGlvbiBkb1BhcmFsbGVsTGltaXQoZm4pIHtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChvYmosIGxpbWl0LCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIHJldHVybiBmbihfZWFjaE9mTGltaXQobGltaXQpLCBvYmosIGl0ZXJhdG9yLCBjYWxsYmFjayk7XG4gICAgICAgIH07XG4gICAgfVxuICAgIGZ1bmN0aW9uIGRvU2VyaWVzKGZuKSB7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAob2JqLCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIHJldHVybiBmbihhc3luYy5lYWNoT2ZTZXJpZXMsIG9iaiwgaXRlcmF0b3IsIGNhbGxiYWNrKTtcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBfYXN5bmNNYXAoZWFjaGZuLCBhcnIsIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICBjYWxsYmFjayA9IF9vbmNlKGNhbGxiYWNrIHx8IG5vb3ApO1xuICAgICAgICBhcnIgPSBhcnIgfHwgW107XG4gICAgICAgIHZhciByZXN1bHRzID0gX2lzQXJyYXlMaWtlKGFycikgPyBbXSA6IHt9O1xuICAgICAgICBlYWNoZm4oYXJyLCBmdW5jdGlvbiAodmFsdWUsIGluZGV4LCBjYWxsYmFjaykge1xuICAgICAgICAgICAgaXRlcmF0b3IodmFsdWUsIGZ1bmN0aW9uIChlcnIsIHYpIHtcbiAgICAgICAgICAgICAgICByZXN1bHRzW2luZGV4XSA9IHY7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICBjYWxsYmFjayhlcnIsIHJlc3VsdHMpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBhc3luYy5tYXAgPSBkb1BhcmFsbGVsKF9hc3luY01hcCk7XG4gICAgYXN5bmMubWFwU2VyaWVzID0gZG9TZXJpZXMoX2FzeW5jTWFwKTtcbiAgICBhc3luYy5tYXBMaW1pdCA9IGRvUGFyYWxsZWxMaW1pdChfYXN5bmNNYXApO1xuXG4gICAgLy8gcmVkdWNlIG9ubHkgaGFzIGEgc2VyaWVzIHZlcnNpb24sIGFzIGRvaW5nIHJlZHVjZSBpbiBwYXJhbGxlbCB3b24ndFxuICAgIC8vIHdvcmsgaW4gbWFueSBzaXR1YXRpb25zLlxuICAgIGFzeW5jLmluamVjdCA9XG4gICAgYXN5bmMuZm9sZGwgPVxuICAgIGFzeW5jLnJlZHVjZSA9IGZ1bmN0aW9uIChhcnIsIG1lbW8sIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICBhc3luYy5lYWNoT2ZTZXJpZXMoYXJyLCBmdW5jdGlvbiAoeCwgaSwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIGl0ZXJhdG9yKG1lbW8sIHgsIGZ1bmN0aW9uIChlcnIsIHYpIHtcbiAgICAgICAgICAgICAgICBtZW1vID0gdjtcbiAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgIGNhbGxiYWNrKGVyciwgbWVtbyk7XG4gICAgICAgIH0pO1xuICAgIH07XG5cbiAgICBhc3luYy5mb2xkciA9XG4gICAgYXN5bmMucmVkdWNlUmlnaHQgPSBmdW5jdGlvbiAoYXJyLCBtZW1vLCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgdmFyIHJldmVyc2VkID0gX21hcChhcnIsIGlkZW50aXR5KS5yZXZlcnNlKCk7XG4gICAgICAgIGFzeW5jLnJlZHVjZShyZXZlcnNlZCwgbWVtbywgaXRlcmF0b3IsIGNhbGxiYWNrKTtcbiAgICB9O1xuXG4gICAgYXN5bmMudHJhbnNmb3JtID0gZnVuY3Rpb24gKGFyciwgbWVtbywgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAzKSB7XG4gICAgICAgICAgICBjYWxsYmFjayA9IGl0ZXJhdG9yO1xuICAgICAgICAgICAgaXRlcmF0b3IgPSBtZW1vO1xuICAgICAgICAgICAgbWVtbyA9IF9pc0FycmF5KGFycikgPyBbXSA6IHt9O1xuICAgICAgICB9XG5cbiAgICAgICAgYXN5bmMuZWFjaE9mKGFyciwgZnVuY3Rpb24odiwgaywgY2IpIHtcbiAgICAgICAgICAgIGl0ZXJhdG9yKG1lbW8sIHYsIGssIGNiKTtcbiAgICAgICAgfSwgZnVuY3Rpb24oZXJyKSB7XG4gICAgICAgICAgICBjYWxsYmFjayhlcnIsIG1lbW8pO1xuICAgICAgICB9KTtcbiAgICB9O1xuXG4gICAgZnVuY3Rpb24gX2ZpbHRlcihlYWNoZm4sIGFyciwgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgIHZhciByZXN1bHRzID0gW107XG4gICAgICAgIGVhY2hmbihhcnIsIGZ1bmN0aW9uICh4LCBpbmRleCwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIGl0ZXJhdG9yKHgsIGZ1bmN0aW9uICh2KSB7XG4gICAgICAgICAgICAgICAgaWYgKHYpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0cy5wdXNoKHtpbmRleDogaW5kZXgsIHZhbHVlOiB4fSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhbGxiYWNrKCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgY2FsbGJhY2soX21hcChyZXN1bHRzLnNvcnQoZnVuY3Rpb24gKGEsIGIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gYS5pbmRleCAtIGIuaW5kZXg7XG4gICAgICAgICAgICB9KSwgZnVuY3Rpb24gKHgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4geC52YWx1ZTtcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgYXN5bmMuc2VsZWN0ID1cbiAgICBhc3luYy5maWx0ZXIgPSBkb1BhcmFsbGVsKF9maWx0ZXIpO1xuXG4gICAgYXN5bmMuc2VsZWN0TGltaXQgPVxuICAgIGFzeW5jLmZpbHRlckxpbWl0ID0gZG9QYXJhbGxlbExpbWl0KF9maWx0ZXIpO1xuXG4gICAgYXN5bmMuc2VsZWN0U2VyaWVzID1cbiAgICBhc3luYy5maWx0ZXJTZXJpZXMgPSBkb1NlcmllcyhfZmlsdGVyKTtcblxuICAgIGZ1bmN0aW9uIF9yZWplY3QoZWFjaGZuLCBhcnIsIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICBfZmlsdGVyKGVhY2hmbiwgYXJyLCBmdW5jdGlvbih2YWx1ZSwgY2IpIHtcbiAgICAgICAgICAgIGl0ZXJhdG9yKHZhbHVlLCBmdW5jdGlvbih2KSB7XG4gICAgICAgICAgICAgICAgY2IoIXYpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sIGNhbGxiYWNrKTtcbiAgICB9XG4gICAgYXN5bmMucmVqZWN0ID0gZG9QYXJhbGxlbChfcmVqZWN0KTtcbiAgICBhc3luYy5yZWplY3RMaW1pdCA9IGRvUGFyYWxsZWxMaW1pdChfcmVqZWN0KTtcbiAgICBhc3luYy5yZWplY3RTZXJpZXMgPSBkb1NlcmllcyhfcmVqZWN0KTtcblxuICAgIGZ1bmN0aW9uIF9jcmVhdGVUZXN0ZXIoZWFjaGZuLCBjaGVjaywgZ2V0UmVzdWx0KSB7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbihhcnIsIGxpbWl0LCBpdGVyYXRvciwgY2IpIHtcbiAgICAgICAgICAgIGZ1bmN0aW9uIGRvbmUoKSB7XG4gICAgICAgICAgICAgICAgaWYgKGNiKSBjYihnZXRSZXN1bHQoZmFsc2UsIHZvaWQgMCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZnVuY3Rpb24gaXRlcmF0ZWUoeCwgXywgY2FsbGJhY2spIHtcbiAgICAgICAgICAgICAgICBpZiAoIWNiKSByZXR1cm4gY2FsbGJhY2soKTtcbiAgICAgICAgICAgICAgICBpdGVyYXRvcih4LCBmdW5jdGlvbiAodikge1xuICAgICAgICAgICAgICAgICAgICBpZiAoY2IgJiYgY2hlY2sodikpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNiKGdldFJlc3VsdCh0cnVlLCB4KSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBjYiA9IGl0ZXJhdG9yID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID4gMykge1xuICAgICAgICAgICAgICAgIGVhY2hmbihhcnIsIGxpbWl0LCBpdGVyYXRlZSwgZG9uZSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGNiID0gaXRlcmF0b3I7XG4gICAgICAgICAgICAgICAgaXRlcmF0b3IgPSBsaW1pdDtcbiAgICAgICAgICAgICAgICBlYWNoZm4oYXJyLCBpdGVyYXRlZSwgZG9uZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgYXN5bmMuYW55ID1cbiAgICBhc3luYy5zb21lID0gX2NyZWF0ZVRlc3Rlcihhc3luYy5lYWNoT2YsIHRvQm9vbCwgaWRlbnRpdHkpO1xuXG4gICAgYXN5bmMuc29tZUxpbWl0ID0gX2NyZWF0ZVRlc3Rlcihhc3luYy5lYWNoT2ZMaW1pdCwgdG9Cb29sLCBpZGVudGl0eSk7XG5cbiAgICBhc3luYy5hbGwgPVxuICAgIGFzeW5jLmV2ZXJ5ID0gX2NyZWF0ZVRlc3Rlcihhc3luYy5lYWNoT2YsIG5vdElkLCBub3RJZCk7XG5cbiAgICBhc3luYy5ldmVyeUxpbWl0ID0gX2NyZWF0ZVRlc3Rlcihhc3luYy5lYWNoT2ZMaW1pdCwgbm90SWQsIG5vdElkKTtcblxuICAgIGZ1bmN0aW9uIF9maW5kR2V0UmVzdWx0KHYsIHgpIHtcbiAgICAgICAgcmV0dXJuIHg7XG4gICAgfVxuICAgIGFzeW5jLmRldGVjdCA9IF9jcmVhdGVUZXN0ZXIoYXN5bmMuZWFjaE9mLCBpZGVudGl0eSwgX2ZpbmRHZXRSZXN1bHQpO1xuICAgIGFzeW5jLmRldGVjdFNlcmllcyA9IF9jcmVhdGVUZXN0ZXIoYXN5bmMuZWFjaE9mU2VyaWVzLCBpZGVudGl0eSwgX2ZpbmRHZXRSZXN1bHQpO1xuICAgIGFzeW5jLmRldGVjdExpbWl0ID0gX2NyZWF0ZVRlc3Rlcihhc3luYy5lYWNoT2ZMaW1pdCwgaWRlbnRpdHksIF9maW5kR2V0UmVzdWx0KTtcblxuICAgIGFzeW5jLnNvcnRCeSA9IGZ1bmN0aW9uIChhcnIsIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICBhc3luYy5tYXAoYXJyLCBmdW5jdGlvbiAoeCwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIGl0ZXJhdG9yKHgsIGZ1bmN0aW9uIChlcnIsIGNyaXRlcmlhKSB7XG4gICAgICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2sobnVsbCwge3ZhbHVlOiB4LCBjcml0ZXJpYTogY3JpdGVyaWF9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSwgZnVuY3Rpb24gKGVyciwgcmVzdWx0cykge1xuICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAgIHJldHVybiBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2sobnVsbCwgX21hcChyZXN1bHRzLnNvcnQoY29tcGFyYXRvciksIGZ1bmN0aW9uICh4KSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB4LnZhbHVlO1xuICAgICAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICB9KTtcblxuICAgICAgICBmdW5jdGlvbiBjb21wYXJhdG9yKGxlZnQsIHJpZ2h0KSB7XG4gICAgICAgICAgICB2YXIgYSA9IGxlZnQuY3JpdGVyaWEsIGIgPSByaWdodC5jcml0ZXJpYTtcbiAgICAgICAgICAgIHJldHVybiBhIDwgYiA/IC0xIDogYSA+IGIgPyAxIDogMDtcbiAgICAgICAgfVxuICAgIH07XG5cbiAgICBhc3luYy5hdXRvID0gZnVuY3Rpb24gKHRhc2tzLCBjb25jdXJyZW5jeSwgY2FsbGJhY2spIHtcbiAgICAgICAgaWYgKCFjYWxsYmFjaykge1xuICAgICAgICAgICAgLy8gY29uY3VycmVuY3kgaXMgb3B0aW9uYWwsIHNoaWZ0IHRoZSBhcmdzLlxuICAgICAgICAgICAgY2FsbGJhY2sgPSBjb25jdXJyZW5jeTtcbiAgICAgICAgICAgIGNvbmN1cnJlbmN5ID0gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBjYWxsYmFjayA9IF9vbmNlKGNhbGxiYWNrIHx8IG5vb3ApO1xuICAgICAgICB2YXIga2V5cyA9IF9rZXlzKHRhc2tzKTtcbiAgICAgICAgdmFyIHJlbWFpbmluZ1Rhc2tzID0ga2V5cy5sZW5ndGg7XG4gICAgICAgIGlmICghcmVtYWluaW5nVGFza3MpIHtcbiAgICAgICAgICAgIHJldHVybiBjYWxsYmFjayhudWxsKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWNvbmN1cnJlbmN5KSB7XG4gICAgICAgICAgICBjb25jdXJyZW5jeSA9IHJlbWFpbmluZ1Rhc2tzO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIHJlc3VsdHMgPSB7fTtcbiAgICAgICAgdmFyIHJ1bm5pbmdUYXNrcyA9IDA7XG5cbiAgICAgICAgdmFyIGxpc3RlbmVycyA9IFtdO1xuICAgICAgICBmdW5jdGlvbiBhZGRMaXN0ZW5lcihmbikge1xuICAgICAgICAgICAgbGlzdGVuZXJzLnVuc2hpZnQoZm4pO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIHJlbW92ZUxpc3RlbmVyKGZuKSB7XG4gICAgICAgICAgICB2YXIgaWR4ID0gX2luZGV4T2YobGlzdGVuZXJzLCBmbik7XG4gICAgICAgICAgICBpZiAoaWR4ID49IDApIGxpc3RlbmVycy5zcGxpY2UoaWR4LCAxKTtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiB0YXNrQ29tcGxldGUoKSB7XG4gICAgICAgICAgICByZW1haW5pbmdUYXNrcy0tO1xuICAgICAgICAgICAgX2FycmF5RWFjaChsaXN0ZW5lcnMuc2xpY2UoMCksIGZ1bmN0aW9uIChmbikge1xuICAgICAgICAgICAgICAgIGZuKCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGFkZExpc3RlbmVyKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGlmICghcmVtYWluaW5nVGFza3MpIHtcbiAgICAgICAgICAgICAgICBjYWxsYmFjayhudWxsLCByZXN1bHRzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgX2FycmF5RWFjaChrZXlzLCBmdW5jdGlvbiAoaykge1xuICAgICAgICAgICAgdmFyIHRhc2sgPSBfaXNBcnJheSh0YXNrc1trXSkgPyB0YXNrc1trXTogW3Rhc2tzW2tdXTtcbiAgICAgICAgICAgIHZhciB0YXNrQ2FsbGJhY2sgPSBfcmVzdFBhcmFtKGZ1bmN0aW9uKGVyciwgYXJncykge1xuICAgICAgICAgICAgICAgIHJ1bm5pbmdUYXNrcy0tO1xuICAgICAgICAgICAgICAgIGlmIChhcmdzLmxlbmd0aCA8PSAxKSB7XG4gICAgICAgICAgICAgICAgICAgIGFyZ3MgPSBhcmdzWzBdO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBzYWZlUmVzdWx0cyA9IHt9O1xuICAgICAgICAgICAgICAgICAgICBfZm9yRWFjaE9mKHJlc3VsdHMsIGZ1bmN0aW9uKHZhbCwgcmtleSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgc2FmZVJlc3VsdHNbcmtleV0gPSB2YWw7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICBzYWZlUmVzdWx0c1trXSA9IGFyZ3M7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKGVyciwgc2FmZVJlc3VsdHMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0c1trXSA9IGFyZ3M7XG4gICAgICAgICAgICAgICAgICAgIGFzeW5jLnNldEltbWVkaWF0ZSh0YXNrQ29tcGxldGUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdmFyIHJlcXVpcmVzID0gdGFzay5zbGljZSgwLCB0YXNrLmxlbmd0aCAtIDEpO1xuICAgICAgICAgICAgLy8gcHJldmVudCBkZWFkLWxvY2tzXG4gICAgICAgICAgICB2YXIgbGVuID0gcmVxdWlyZXMubGVuZ3RoO1xuICAgICAgICAgICAgdmFyIGRlcDtcbiAgICAgICAgICAgIHdoaWxlIChsZW4tLSkge1xuICAgICAgICAgICAgICAgIGlmICghKGRlcCA9IHRhc2tzW3JlcXVpcmVzW2xlbl1dKSkge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0hhcyBpbmV4aXN0YW50IGRlcGVuZGVuY3knKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKF9pc0FycmF5KGRlcCkgJiYgX2luZGV4T2YoZGVwLCBrKSA+PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignSGFzIGN5Y2xpYyBkZXBlbmRlbmNpZXMnKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmdW5jdGlvbiByZWFkeSgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcnVubmluZ1Rhc2tzIDwgY29uY3VycmVuY3kgJiYgX3JlZHVjZShyZXF1aXJlcywgZnVuY3Rpb24gKGEsIHgpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChhICYmIHJlc3VsdHMuaGFzT3duUHJvcGVydHkoeCkpO1xuICAgICAgICAgICAgICAgIH0sIHRydWUpICYmICFyZXN1bHRzLmhhc093blByb3BlcnR5KGspO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHJlYWR5KCkpIHtcbiAgICAgICAgICAgICAgICBydW5uaW5nVGFza3MrKztcbiAgICAgICAgICAgICAgICB0YXNrW3Rhc2subGVuZ3RoIC0gMV0odGFza0NhbGxiYWNrLCByZXN1bHRzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGFkZExpc3RlbmVyKGxpc3RlbmVyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZ1bmN0aW9uIGxpc3RlbmVyKCkge1xuICAgICAgICAgICAgICAgIGlmIChyZWFkeSgpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJ1bm5pbmdUYXNrcysrO1xuICAgICAgICAgICAgICAgICAgICByZW1vdmVMaXN0ZW5lcihsaXN0ZW5lcik7XG4gICAgICAgICAgICAgICAgICAgIHRhc2tbdGFzay5sZW5ndGggLSAxXSh0YXNrQ2FsbGJhY2ssIHJlc3VsdHMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfTtcblxuXG5cbiAgICBhc3luYy5yZXRyeSA9IGZ1bmN0aW9uKHRpbWVzLCB0YXNrLCBjYWxsYmFjaykge1xuICAgICAgICB2YXIgREVGQVVMVF9USU1FUyA9IDU7XG4gICAgICAgIHZhciBERUZBVUxUX0lOVEVSVkFMID0gMDtcblxuICAgICAgICB2YXIgYXR0ZW1wdHMgPSBbXTtcblxuICAgICAgICB2YXIgb3B0cyA9IHtcbiAgICAgICAgICAgIHRpbWVzOiBERUZBVUxUX1RJTUVTLFxuICAgICAgICAgICAgaW50ZXJ2YWw6IERFRkFVTFRfSU5URVJWQUxcbiAgICAgICAgfTtcblxuICAgICAgICBmdW5jdGlvbiBwYXJzZVRpbWVzKGFjYywgdCl7XG4gICAgICAgICAgICBpZih0eXBlb2YgdCA9PT0gJ251bWJlcicpe1xuICAgICAgICAgICAgICAgIGFjYy50aW1lcyA9IHBhcnNlSW50KHQsIDEwKSB8fCBERUZBVUxUX1RJTUVTO1xuICAgICAgICAgICAgfSBlbHNlIGlmKHR5cGVvZiB0ID09PSAnb2JqZWN0Jyl7XG4gICAgICAgICAgICAgICAgYWNjLnRpbWVzID0gcGFyc2VJbnQodC50aW1lcywgMTApIHx8IERFRkFVTFRfVElNRVM7XG4gICAgICAgICAgICAgICAgYWNjLmludGVydmFsID0gcGFyc2VJbnQodC5pbnRlcnZhbCwgMTApIHx8IERFRkFVTFRfSU5URVJWQUw7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignVW5zdXBwb3J0ZWQgYXJndW1lbnQgdHlwZSBmb3IgXFwndGltZXNcXCc6ICcgKyB0eXBlb2YgdCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgbGVuZ3RoID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgICAgICAgaWYgKGxlbmd0aCA8IDEgfHwgbGVuZ3RoID4gMykge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIGFyZ3VtZW50cyAtIG11c3QgYmUgZWl0aGVyICh0YXNrKSwgKHRhc2ssIGNhbGxiYWNrKSwgKHRpbWVzLCB0YXNrKSBvciAodGltZXMsIHRhc2ssIGNhbGxiYWNrKScpO1xuICAgICAgICB9IGVsc2UgaWYgKGxlbmd0aCA8PSAyICYmIHR5cGVvZiB0aW1lcyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgY2FsbGJhY2sgPSB0YXNrO1xuICAgICAgICAgICAgdGFzayA9IHRpbWVzO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0eXBlb2YgdGltZXMgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIHBhcnNlVGltZXMob3B0cywgdGltZXMpO1xuICAgICAgICB9XG4gICAgICAgIG9wdHMuY2FsbGJhY2sgPSBjYWxsYmFjaztcbiAgICAgICAgb3B0cy50YXNrID0gdGFzaztcblxuICAgICAgICBmdW5jdGlvbiB3cmFwcGVkVGFzayh3cmFwcGVkQ2FsbGJhY2ssIHdyYXBwZWRSZXN1bHRzKSB7XG4gICAgICAgICAgICBmdW5jdGlvbiByZXRyeUF0dGVtcHQodGFzaywgZmluYWxBdHRlbXB0KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKHNlcmllc0NhbGxiYWNrKSB7XG4gICAgICAgICAgICAgICAgICAgIHRhc2soZnVuY3Rpb24oZXJyLCByZXN1bHQpe1xuICAgICAgICAgICAgICAgICAgICAgICAgc2VyaWVzQ2FsbGJhY2soIWVyciB8fCBmaW5hbEF0dGVtcHQsIHtlcnI6IGVyciwgcmVzdWx0OiByZXN1bHR9KTtcbiAgICAgICAgICAgICAgICAgICAgfSwgd3JhcHBlZFJlc3VsdHMpO1xuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGZ1bmN0aW9uIHJldHJ5SW50ZXJ2YWwoaW50ZXJ2YWwpe1xuICAgICAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbihzZXJpZXNDYWxsYmFjayl7XG4gICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKXtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlcmllc0NhbGxiYWNrKG51bGwpO1xuICAgICAgICAgICAgICAgICAgICB9LCBpbnRlcnZhbCk7XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgd2hpbGUgKG9wdHMudGltZXMpIHtcblxuICAgICAgICAgICAgICAgIHZhciBmaW5hbEF0dGVtcHQgPSAhKG9wdHMudGltZXMtPTEpO1xuICAgICAgICAgICAgICAgIGF0dGVtcHRzLnB1c2gocmV0cnlBdHRlbXB0KG9wdHMudGFzaywgZmluYWxBdHRlbXB0KSk7XG4gICAgICAgICAgICAgICAgaWYoIWZpbmFsQXR0ZW1wdCAmJiBvcHRzLmludGVydmFsID4gMCl7XG4gICAgICAgICAgICAgICAgICAgIGF0dGVtcHRzLnB1c2gocmV0cnlJbnRlcnZhbChvcHRzLmludGVydmFsKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBhc3luYy5zZXJpZXMoYXR0ZW1wdHMsIGZ1bmN0aW9uKGRvbmUsIGRhdGEpe1xuICAgICAgICAgICAgICAgIGRhdGEgPSBkYXRhW2RhdGEubGVuZ3RoIC0gMV07XG4gICAgICAgICAgICAgICAgKHdyYXBwZWRDYWxsYmFjayB8fCBvcHRzLmNhbGxiYWNrKShkYXRhLmVyciwgZGF0YS5yZXN1bHQpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBJZiBhIGNhbGxiYWNrIGlzIHBhc3NlZCwgcnVuIHRoaXMgYXMgYSBjb250cm9sbCBmbG93XG4gICAgICAgIHJldHVybiBvcHRzLmNhbGxiYWNrID8gd3JhcHBlZFRhc2soKSA6IHdyYXBwZWRUYXNrO1xuICAgIH07XG5cbiAgICBhc3luYy53YXRlcmZhbGwgPSBmdW5jdGlvbiAodGFza3MsIGNhbGxiYWNrKSB7XG4gICAgICAgIGNhbGxiYWNrID0gX29uY2UoY2FsbGJhY2sgfHwgbm9vcCk7XG4gICAgICAgIGlmICghX2lzQXJyYXkodGFza3MpKSB7XG4gICAgICAgICAgICB2YXIgZXJyID0gbmV3IEVycm9yKCdGaXJzdCBhcmd1bWVudCB0byB3YXRlcmZhbGwgbXVzdCBiZSBhbiBhcnJheSBvZiBmdW5jdGlvbnMnKTtcbiAgICAgICAgICAgIHJldHVybiBjYWxsYmFjayhlcnIpO1xuICAgICAgICB9XG4gICAgICAgIGlmICghdGFza3MubGVuZ3RoKSB7XG4gICAgICAgICAgICByZXR1cm4gY2FsbGJhY2soKTtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiB3cmFwSXRlcmF0b3IoaXRlcmF0b3IpIHtcbiAgICAgICAgICAgIHJldHVybiBfcmVzdFBhcmFtKGZ1bmN0aW9uIChlcnIsIGFyZ3MpIHtcbiAgICAgICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrLmFwcGx5KG51bGwsIFtlcnJdLmNvbmNhdChhcmdzKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB2YXIgbmV4dCA9IGl0ZXJhdG9yLm5leHQoKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKG5leHQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3MucHVzaCh3cmFwSXRlcmF0b3IobmV4dCkpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgYXJncy5wdXNoKGNhbGxiYWNrKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbnN1cmVBc3luYyhpdGVyYXRvcikuYXBwbHkobnVsbCwgYXJncyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgd3JhcEl0ZXJhdG9yKGFzeW5jLml0ZXJhdG9yKHRhc2tzKSkoKTtcbiAgICB9O1xuXG4gICAgZnVuY3Rpb24gX3BhcmFsbGVsKGVhY2hmbiwgdGFza3MsIGNhbGxiYWNrKSB7XG4gICAgICAgIGNhbGxiYWNrID0gY2FsbGJhY2sgfHwgbm9vcDtcbiAgICAgICAgdmFyIHJlc3VsdHMgPSBfaXNBcnJheUxpa2UodGFza3MpID8gW10gOiB7fTtcblxuICAgICAgICBlYWNoZm4odGFza3MsIGZ1bmN0aW9uICh0YXNrLCBrZXksIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICB0YXNrKF9yZXN0UGFyYW0oZnVuY3Rpb24gKGVyciwgYXJncykge1xuICAgICAgICAgICAgICAgIGlmIChhcmdzLmxlbmd0aCA8PSAxKSB7XG4gICAgICAgICAgICAgICAgICAgIGFyZ3MgPSBhcmdzWzBdO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXN1bHRzW2tleV0gPSBhcmdzO1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgICB9KSk7XG4gICAgICAgIH0sIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgIGNhbGxiYWNrKGVyciwgcmVzdWx0cyk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGFzeW5jLnBhcmFsbGVsID0gZnVuY3Rpb24gKHRhc2tzLCBjYWxsYmFjaykge1xuICAgICAgICBfcGFyYWxsZWwoYXN5bmMuZWFjaE9mLCB0YXNrcywgY2FsbGJhY2spO1xuICAgIH07XG5cbiAgICBhc3luYy5wYXJhbGxlbExpbWl0ID0gZnVuY3Rpb24odGFza3MsIGxpbWl0LCBjYWxsYmFjaykge1xuICAgICAgICBfcGFyYWxsZWwoX2VhY2hPZkxpbWl0KGxpbWl0KSwgdGFza3MsIGNhbGxiYWNrKTtcbiAgICB9O1xuXG4gICAgYXN5bmMuc2VyaWVzID0gZnVuY3Rpb24odGFza3MsIGNhbGxiYWNrKSB7XG4gICAgICAgIF9wYXJhbGxlbChhc3luYy5lYWNoT2ZTZXJpZXMsIHRhc2tzLCBjYWxsYmFjayk7XG4gICAgfTtcblxuICAgIGFzeW5jLml0ZXJhdG9yID0gZnVuY3Rpb24gKHRhc2tzKSB7XG4gICAgICAgIGZ1bmN0aW9uIG1ha2VDYWxsYmFjayhpbmRleCkge1xuICAgICAgICAgICAgZnVuY3Rpb24gZm4oKSB7XG4gICAgICAgICAgICAgICAgaWYgKHRhc2tzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICB0YXNrc1tpbmRleF0uYXBwbHkobnVsbCwgYXJndW1lbnRzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZuLm5leHQoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZuLm5leHQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIChpbmRleCA8IHRhc2tzLmxlbmd0aCAtIDEpID8gbWFrZUNhbGxiYWNrKGluZGV4ICsgMSk6IG51bGw7XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgcmV0dXJuIGZuO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBtYWtlQ2FsbGJhY2soMCk7XG4gICAgfTtcblxuICAgIGFzeW5jLmFwcGx5ID0gX3Jlc3RQYXJhbShmdW5jdGlvbiAoZm4sIGFyZ3MpIHtcbiAgICAgICAgcmV0dXJuIF9yZXN0UGFyYW0oZnVuY3Rpb24gKGNhbGxBcmdzKSB7XG4gICAgICAgICAgICByZXR1cm4gZm4uYXBwbHkoXG4gICAgICAgICAgICAgICAgbnVsbCwgYXJncy5jb25jYXQoY2FsbEFyZ3MpXG4gICAgICAgICAgICApO1xuICAgICAgICB9KTtcbiAgICB9KTtcblxuICAgIGZ1bmN0aW9uIF9jb25jYXQoZWFjaGZuLCBhcnIsIGZuLCBjYWxsYmFjaykge1xuICAgICAgICB2YXIgcmVzdWx0ID0gW107XG4gICAgICAgIGVhY2hmbihhcnIsIGZ1bmN0aW9uICh4LCBpbmRleCwgY2IpIHtcbiAgICAgICAgICAgIGZuKHgsIGZ1bmN0aW9uIChlcnIsIHkpIHtcbiAgICAgICAgICAgICAgICByZXN1bHQgPSByZXN1bHQuY29uY2F0KHkgfHwgW10pO1xuICAgICAgICAgICAgICAgIGNiKGVycik7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSwgZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgY2FsbGJhY2soZXJyLCByZXN1bHQpO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgYXN5bmMuY29uY2F0ID0gZG9QYXJhbGxlbChfY29uY2F0KTtcbiAgICBhc3luYy5jb25jYXRTZXJpZXMgPSBkb1NlcmllcyhfY29uY2F0KTtcblxuICAgIGFzeW5jLndoaWxzdCA9IGZ1bmN0aW9uICh0ZXN0LCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgY2FsbGJhY2sgPSBjYWxsYmFjayB8fCBub29wO1xuICAgICAgICBpZiAodGVzdCgpKSB7XG4gICAgICAgICAgICB2YXIgbmV4dCA9IF9yZXN0UGFyYW0oZnVuY3Rpb24oZXJyLCBhcmdzKSB7XG4gICAgICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodGVzdC5hcHBseSh0aGlzLCBhcmdzKSkge1xuICAgICAgICAgICAgICAgICAgICBpdGVyYXRvcihuZXh0KTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhudWxsKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGl0ZXJhdG9yKG5leHQpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY2FsbGJhY2sobnVsbCk7XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgYXN5bmMuZG9XaGlsc3QgPSBmdW5jdGlvbiAoaXRlcmF0b3IsIHRlc3QsIGNhbGxiYWNrKSB7XG4gICAgICAgIHZhciBjYWxscyA9IDA7XG4gICAgICAgIHJldHVybiBhc3luYy53aGlsc3QoZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICByZXR1cm4gKytjYWxscyA8PSAxIHx8IHRlc3QuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICAgICAgfSwgaXRlcmF0b3IsIGNhbGxiYWNrKTtcbiAgICB9O1xuXG4gICAgYXN5bmMudW50aWwgPSBmdW5jdGlvbiAodGVzdCwgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgIHJldHVybiBhc3luYy53aGlsc3QoZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICByZXR1cm4gIXRlc3QuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICAgICAgfSwgaXRlcmF0b3IsIGNhbGxiYWNrKTtcbiAgICB9O1xuXG4gICAgYXN5bmMuZG9VbnRpbCA9IGZ1bmN0aW9uIChpdGVyYXRvciwgdGVzdCwgY2FsbGJhY2spIHtcbiAgICAgICAgcmV0dXJuIGFzeW5jLmRvV2hpbHN0KGl0ZXJhdG9yLCBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIHJldHVybiAhdGVzdC5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgICAgICB9LCBjYWxsYmFjayk7XG4gICAgfTtcblxuICAgIGFzeW5jLmR1cmluZyA9IGZ1bmN0aW9uICh0ZXN0LCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgY2FsbGJhY2sgPSBjYWxsYmFjayB8fCBub29wO1xuXG4gICAgICAgIHZhciBuZXh0ID0gX3Jlc3RQYXJhbShmdW5jdGlvbihlcnIsIGFyZ3MpIHtcbiAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBhcmdzLnB1c2goY2hlY2spO1xuICAgICAgICAgICAgICAgIHRlc3QuYXBwbHkodGhpcywgYXJncyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHZhciBjaGVjayA9IGZ1bmN0aW9uKGVyciwgdHJ1dGgpIHtcbiAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh0cnV0aCkge1xuICAgICAgICAgICAgICAgIGl0ZXJhdG9yKG5leHQpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBjYWxsYmFjayhudWxsKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcblxuICAgICAgICB0ZXN0KGNoZWNrKTtcbiAgICB9O1xuXG4gICAgYXN5bmMuZG9EdXJpbmcgPSBmdW5jdGlvbiAoaXRlcmF0b3IsIHRlc3QsIGNhbGxiYWNrKSB7XG4gICAgICAgIHZhciBjYWxscyA9IDA7XG4gICAgICAgIGFzeW5jLmR1cmluZyhmdW5jdGlvbihuZXh0KSB7XG4gICAgICAgICAgICBpZiAoY2FsbHMrKyA8IDEpIHtcbiAgICAgICAgICAgICAgICBuZXh0KG51bGwsIHRydWUpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0ZXN0LmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sIGl0ZXJhdG9yLCBjYWxsYmFjayk7XG4gICAgfTtcblxuICAgIGZ1bmN0aW9uIF9xdWV1ZSh3b3JrZXIsIGNvbmN1cnJlbmN5LCBwYXlsb2FkKSB7XG4gICAgICAgIGlmIChjb25jdXJyZW5jeSA9PSBudWxsKSB7XG4gICAgICAgICAgICBjb25jdXJyZW5jeSA9IDE7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZihjb25jdXJyZW5jeSA9PT0gMCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdDb25jdXJyZW5jeSBtdXN0IG5vdCBiZSB6ZXJvJyk7XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gX2luc2VydChxLCBkYXRhLCBwb3MsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICBpZiAoY2FsbGJhY2sgIT0gbnVsbCAmJiB0eXBlb2YgY2FsbGJhY2sgIT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcInRhc2sgY2FsbGJhY2sgbXVzdCBiZSBhIGZ1bmN0aW9uXCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcS5zdGFydGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIGlmICghX2lzQXJyYXkoZGF0YSkpIHtcbiAgICAgICAgICAgICAgICBkYXRhID0gW2RhdGFdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYoZGF0YS5sZW5ndGggPT09IDAgJiYgcS5pZGxlKCkpIHtcbiAgICAgICAgICAgICAgICAvLyBjYWxsIGRyYWluIGltbWVkaWF0ZWx5IGlmIHRoZXJlIGFyZSBubyB0YXNrc1xuICAgICAgICAgICAgICAgIHJldHVybiBhc3luYy5zZXRJbW1lZGlhdGUoZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgICAgIHEuZHJhaW4oKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIF9hcnJheUVhY2goZGF0YSwgZnVuY3Rpb24odGFzaykge1xuICAgICAgICAgICAgICAgIHZhciBpdGVtID0ge1xuICAgICAgICAgICAgICAgICAgICBkYXRhOiB0YXNrLFxuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjazogY2FsbGJhY2sgfHwgbm9vcFxuICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICBpZiAocG9zKSB7XG4gICAgICAgICAgICAgICAgICAgIHEudGFza3MudW5zaGlmdChpdGVtKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBxLnRhc2tzLnB1c2goaXRlbSk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKHEudGFza3MubGVuZ3RoID09PSBxLmNvbmN1cnJlbmN5KSB7XG4gICAgICAgICAgICAgICAgICAgIHEuc2F0dXJhdGVkKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBhc3luYy5zZXRJbW1lZGlhdGUocS5wcm9jZXNzKTtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBfbmV4dChxLCB0YXNrcykge1xuICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKCl7XG4gICAgICAgICAgICAgICAgd29ya2VycyAtPSAxO1xuXG4gICAgICAgICAgICAgICAgdmFyIHJlbW92ZWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB2YXIgYXJncyA9IGFyZ3VtZW50cztcbiAgICAgICAgICAgICAgICBfYXJyYXlFYWNoKHRhc2tzLCBmdW5jdGlvbiAodGFzaykge1xuICAgICAgICAgICAgICAgICAgICBfYXJyYXlFYWNoKHdvcmtlcnNMaXN0LCBmdW5jdGlvbiAod29ya2VyLCBpbmRleCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHdvcmtlciA9PT0gdGFzayAmJiAhcmVtb3ZlZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdvcmtlcnNMaXN0LnNwbGljZShpbmRleCwgMSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVtb3ZlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgICAgIHRhc2suY2FsbGJhY2suYXBwbHkodGFzaywgYXJncyk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgaWYgKHEudGFza3MubGVuZ3RoICsgd29ya2VycyA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICBxLmRyYWluKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHEucHJvY2VzcygpO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciB3b3JrZXJzID0gMDtcbiAgICAgICAgdmFyIHdvcmtlcnNMaXN0ID0gW107XG4gICAgICAgIHZhciBxID0ge1xuICAgICAgICAgICAgdGFza3M6IFtdLFxuICAgICAgICAgICAgY29uY3VycmVuY3k6IGNvbmN1cnJlbmN5LFxuICAgICAgICAgICAgcGF5bG9hZDogcGF5bG9hZCxcbiAgICAgICAgICAgIHNhdHVyYXRlZDogbm9vcCxcbiAgICAgICAgICAgIGVtcHR5OiBub29wLFxuICAgICAgICAgICAgZHJhaW46IG5vb3AsXG4gICAgICAgICAgICBzdGFydGVkOiBmYWxzZSxcbiAgICAgICAgICAgIHBhdXNlZDogZmFsc2UsXG4gICAgICAgICAgICBwdXNoOiBmdW5jdGlvbiAoZGF0YSwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgICAgICBfaW5zZXJ0KHEsIGRhdGEsIGZhbHNlLCBjYWxsYmFjayk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAga2lsbDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHEuZHJhaW4gPSBub29wO1xuICAgICAgICAgICAgICAgIHEudGFza3MgPSBbXTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB1bnNoaWZ0OiBmdW5jdGlvbiAoZGF0YSwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgICAgICBfaW5zZXJ0KHEsIGRhdGEsIHRydWUsIGNhbGxiYWNrKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBwcm9jZXNzOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgaWYgKCFxLnBhdXNlZCAmJiB3b3JrZXJzIDwgcS5jb25jdXJyZW5jeSAmJiBxLnRhc2tzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICB3aGlsZSh3b3JrZXJzIDwgcS5jb25jdXJyZW5jeSAmJiBxLnRhc2tzLmxlbmd0aCl7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgdGFza3MgPSBxLnBheWxvYWQgP1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHEudGFza3Muc3BsaWNlKDAsIHEucGF5bG9hZCkgOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHEudGFza3Muc3BsaWNlKDAsIHEudGFza3MubGVuZ3RoKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGRhdGEgPSBfbWFwKHRhc2tzLCBmdW5jdGlvbiAodGFzaykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0YXNrLmRhdGE7XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHEudGFza3MubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcS5lbXB0eSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgd29ya2VycyArPSAxO1xuICAgICAgICAgICAgICAgICAgICAgICAgd29ya2Vyc0xpc3QucHVzaCh0YXNrc1swXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgY2IgPSBvbmx5X29uY2UoX25leHQocSwgdGFza3MpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHdvcmtlcihkYXRhLCBjYik7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbGVuZ3RoOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHEudGFza3MubGVuZ3RoO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHJ1bm5pbmc6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gd29ya2VycztcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB3b3JrZXJzTGlzdDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB3b3JrZXJzTGlzdDtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBpZGxlOiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcS50YXNrcy5sZW5ndGggKyB3b3JrZXJzID09PSAwO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHBhdXNlOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgcS5wYXVzZWQgPSB0cnVlO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHJlc3VtZTogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGlmIChxLnBhdXNlZCA9PT0gZmFsc2UpIHsgcmV0dXJuOyB9XG4gICAgICAgICAgICAgICAgcS5wYXVzZWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB2YXIgcmVzdW1lQ291bnQgPSBNYXRoLm1pbihxLmNvbmN1cnJlbmN5LCBxLnRhc2tzLmxlbmd0aCk7XG4gICAgICAgICAgICAgICAgLy8gTmVlZCB0byBjYWxsIHEucHJvY2VzcyBvbmNlIHBlciBjb25jdXJyZW50XG4gICAgICAgICAgICAgICAgLy8gd29ya2VyIHRvIHByZXNlcnZlIGZ1bGwgY29uY3VycmVuY3kgYWZ0ZXIgcGF1c2VcbiAgICAgICAgICAgICAgICBmb3IgKHZhciB3ID0gMTsgdyA8PSByZXN1bWVDb3VudDsgdysrKSB7XG4gICAgICAgICAgICAgICAgICAgIGFzeW5jLnNldEltbWVkaWF0ZShxLnByb2Nlc3MpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIHE7XG4gICAgfVxuXG4gICAgYXN5bmMucXVldWUgPSBmdW5jdGlvbiAod29ya2VyLCBjb25jdXJyZW5jeSkge1xuICAgICAgICB2YXIgcSA9IF9xdWV1ZShmdW5jdGlvbiAoaXRlbXMsIGNiKSB7XG4gICAgICAgICAgICB3b3JrZXIoaXRlbXNbMF0sIGNiKTtcbiAgICAgICAgfSwgY29uY3VycmVuY3ksIDEpO1xuXG4gICAgICAgIHJldHVybiBxO1xuICAgIH07XG5cbiAgICBhc3luYy5wcmlvcml0eVF1ZXVlID0gZnVuY3Rpb24gKHdvcmtlciwgY29uY3VycmVuY3kpIHtcblxuICAgICAgICBmdW5jdGlvbiBfY29tcGFyZVRhc2tzKGEsIGIpe1xuICAgICAgICAgICAgcmV0dXJuIGEucHJpb3JpdHkgLSBiLnByaW9yaXR5O1xuICAgICAgICB9XG5cbiAgICAgICAgZnVuY3Rpb24gX2JpbmFyeVNlYXJjaChzZXF1ZW5jZSwgaXRlbSwgY29tcGFyZSkge1xuICAgICAgICAgICAgdmFyIGJlZyA9IC0xLFxuICAgICAgICAgICAgICAgIGVuZCA9IHNlcXVlbmNlLmxlbmd0aCAtIDE7XG4gICAgICAgICAgICB3aGlsZSAoYmVnIDwgZW5kKSB7XG4gICAgICAgICAgICAgICAgdmFyIG1pZCA9IGJlZyArICgoZW5kIC0gYmVnICsgMSkgPj4+IDEpO1xuICAgICAgICAgICAgICAgIGlmIChjb21wYXJlKGl0ZW0sIHNlcXVlbmNlW21pZF0pID49IDApIHtcbiAgICAgICAgICAgICAgICAgICAgYmVnID0gbWlkO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGVuZCA9IG1pZCAtIDE7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGJlZztcbiAgICAgICAgfVxuXG4gICAgICAgIGZ1bmN0aW9uIF9pbnNlcnQocSwgZGF0YSwgcHJpb3JpdHksIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICBpZiAoY2FsbGJhY2sgIT0gbnVsbCAmJiB0eXBlb2YgY2FsbGJhY2sgIT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcInRhc2sgY2FsbGJhY2sgbXVzdCBiZSBhIGZ1bmN0aW9uXCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcS5zdGFydGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIGlmICghX2lzQXJyYXkoZGF0YSkpIHtcbiAgICAgICAgICAgICAgICBkYXRhID0gW2RhdGFdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYoZGF0YS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgICAvLyBjYWxsIGRyYWluIGltbWVkaWF0ZWx5IGlmIHRoZXJlIGFyZSBubyB0YXNrc1xuICAgICAgICAgICAgICAgIHJldHVybiBhc3luYy5zZXRJbW1lZGlhdGUoZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgICAgIHEuZHJhaW4oKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIF9hcnJheUVhY2goZGF0YSwgZnVuY3Rpb24odGFzaykge1xuICAgICAgICAgICAgICAgIHZhciBpdGVtID0ge1xuICAgICAgICAgICAgICAgICAgICBkYXRhOiB0YXNrLFxuICAgICAgICAgICAgICAgICAgICBwcmlvcml0eTogcHJpb3JpdHksXG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrOiB0eXBlb2YgY2FsbGJhY2sgPT09ICdmdW5jdGlvbicgPyBjYWxsYmFjayA6IG5vb3BcbiAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgcS50YXNrcy5zcGxpY2UoX2JpbmFyeVNlYXJjaChxLnRhc2tzLCBpdGVtLCBfY29tcGFyZVRhc2tzKSArIDEsIDAsIGl0ZW0pO1xuXG4gICAgICAgICAgICAgICAgaWYgKHEudGFza3MubGVuZ3RoID09PSBxLmNvbmN1cnJlbmN5KSB7XG4gICAgICAgICAgICAgICAgICAgIHEuc2F0dXJhdGVkKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGFzeW5jLnNldEltbWVkaWF0ZShxLnByb2Nlc3MpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBTdGFydCB3aXRoIGEgbm9ybWFsIHF1ZXVlXG4gICAgICAgIHZhciBxID0gYXN5bmMucXVldWUod29ya2VyLCBjb25jdXJyZW5jeSk7XG5cbiAgICAgICAgLy8gT3ZlcnJpZGUgcHVzaCB0byBhY2NlcHQgc2Vjb25kIHBhcmFtZXRlciByZXByZXNlbnRpbmcgcHJpb3JpdHlcbiAgICAgICAgcS5wdXNoID0gZnVuY3Rpb24gKGRhdGEsIHByaW9yaXR5LCBjYWxsYmFjaykge1xuICAgICAgICAgICAgX2luc2VydChxLCBkYXRhLCBwcmlvcml0eSwgY2FsbGJhY2spO1xuICAgICAgICB9O1xuXG4gICAgICAgIC8vIFJlbW92ZSB1bnNoaWZ0IGZ1bmN0aW9uXG4gICAgICAgIGRlbGV0ZSBxLnVuc2hpZnQ7XG5cbiAgICAgICAgcmV0dXJuIHE7XG4gICAgfTtcblxuICAgIGFzeW5jLmNhcmdvID0gZnVuY3Rpb24gKHdvcmtlciwgcGF5bG9hZCkge1xuICAgICAgICByZXR1cm4gX3F1ZXVlKHdvcmtlciwgMSwgcGF5bG9hZCk7XG4gICAgfTtcblxuICAgIGZ1bmN0aW9uIF9jb25zb2xlX2ZuKG5hbWUpIHtcbiAgICAgICAgcmV0dXJuIF9yZXN0UGFyYW0oZnVuY3Rpb24gKGZuLCBhcmdzKSB7XG4gICAgICAgICAgICBmbi5hcHBseShudWxsLCBhcmdzLmNvbmNhdChbX3Jlc3RQYXJhbShmdW5jdGlvbiAoZXJyLCBhcmdzKSB7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBjb25zb2xlID09PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoY29uc29sZS5lcnJvcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChjb25zb2xlW25hbWVdKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBfYXJyYXlFYWNoKGFyZ3MsIGZ1bmN0aW9uICh4KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZVtuYW1lXSh4KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSldKSk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBhc3luYy5sb2cgPSBfY29uc29sZV9mbignbG9nJyk7XG4gICAgYXN5bmMuZGlyID0gX2NvbnNvbGVfZm4oJ2RpcicpO1xuICAgIC8qYXN5bmMuaW5mbyA9IF9jb25zb2xlX2ZuKCdpbmZvJyk7XG4gICAgYXN5bmMud2FybiA9IF9jb25zb2xlX2ZuKCd3YXJuJyk7XG4gICAgYXN5bmMuZXJyb3IgPSBfY29uc29sZV9mbignZXJyb3InKTsqL1xuXG4gICAgYXN5bmMubWVtb2l6ZSA9IGZ1bmN0aW9uIChmbiwgaGFzaGVyKSB7XG4gICAgICAgIHZhciBtZW1vID0ge307XG4gICAgICAgIHZhciBxdWV1ZXMgPSB7fTtcbiAgICAgICAgaGFzaGVyID0gaGFzaGVyIHx8IGlkZW50aXR5O1xuICAgICAgICB2YXIgbWVtb2l6ZWQgPSBfcmVzdFBhcmFtKGZ1bmN0aW9uIG1lbW9pemVkKGFyZ3MpIHtcbiAgICAgICAgICAgIHZhciBjYWxsYmFjayA9IGFyZ3MucG9wKCk7XG4gICAgICAgICAgICB2YXIga2V5ID0gaGFzaGVyLmFwcGx5KG51bGwsIGFyZ3MpO1xuICAgICAgICAgICAgaWYgKGtleSBpbiBtZW1vKSB7XG4gICAgICAgICAgICAgICAgYXN5bmMuc2V0SW1tZWRpYXRlKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2suYXBwbHkobnVsbCwgbWVtb1trZXldKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGtleSBpbiBxdWV1ZXMpIHtcbiAgICAgICAgICAgICAgICBxdWV1ZXNba2V5XS5wdXNoKGNhbGxiYWNrKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHF1ZXVlc1trZXldID0gW2NhbGxiYWNrXTtcbiAgICAgICAgICAgICAgICBmbi5hcHBseShudWxsLCBhcmdzLmNvbmNhdChbX3Jlc3RQYXJhbShmdW5jdGlvbiAoYXJncykge1xuICAgICAgICAgICAgICAgICAgICBtZW1vW2tleV0gPSBhcmdzO1xuICAgICAgICAgICAgICAgICAgICB2YXIgcSA9IHF1ZXVlc1trZXldO1xuICAgICAgICAgICAgICAgICAgICBkZWxldGUgcXVldWVzW2tleV07XG4gICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwLCBsID0gcS5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHFbaV0uYXBwbHkobnVsbCwgYXJncyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KV0pKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIG1lbW9pemVkLm1lbW8gPSBtZW1vO1xuICAgICAgICBtZW1vaXplZC51bm1lbW9pemVkID0gZm47XG4gICAgICAgIHJldHVybiBtZW1vaXplZDtcbiAgICB9O1xuXG4gICAgYXN5bmMudW5tZW1vaXplID0gZnVuY3Rpb24gKGZuKSB7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gKGZuLnVubWVtb2l6ZWQgfHwgZm4pLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7XG4gICAgICAgIH07XG4gICAgfTtcblxuICAgIGZ1bmN0aW9uIF90aW1lcyhtYXBwZXIpIHtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChjb3VudCwgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICBtYXBwZXIoX3JhbmdlKGNvdW50KSwgaXRlcmF0b3IsIGNhbGxiYWNrKTtcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBhc3luYy50aW1lcyA9IF90aW1lcyhhc3luYy5tYXApO1xuICAgIGFzeW5jLnRpbWVzU2VyaWVzID0gX3RpbWVzKGFzeW5jLm1hcFNlcmllcyk7XG4gICAgYXN5bmMudGltZXNMaW1pdCA9IGZ1bmN0aW9uIChjb3VudCwgbGltaXQsIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICByZXR1cm4gYXN5bmMubWFwTGltaXQoX3JhbmdlKGNvdW50KSwgbGltaXQsIGl0ZXJhdG9yLCBjYWxsYmFjayk7XG4gICAgfTtcblxuICAgIGFzeW5jLnNlcSA9IGZ1bmN0aW9uICgvKiBmdW5jdGlvbnMuLi4gKi8pIHtcbiAgICAgICAgdmFyIGZucyA9IGFyZ3VtZW50cztcbiAgICAgICAgcmV0dXJuIF9yZXN0UGFyYW0oZnVuY3Rpb24gKGFyZ3MpIHtcbiAgICAgICAgICAgIHZhciB0aGF0ID0gdGhpcztcblxuICAgICAgICAgICAgdmFyIGNhbGxiYWNrID0gYXJnc1thcmdzLmxlbmd0aCAtIDFdO1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBjYWxsYmFjayA9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgYXJncy5wb3AoKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2sgPSBub29wO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBhc3luYy5yZWR1Y2UoZm5zLCBhcmdzLCBmdW5jdGlvbiAobmV3YXJncywgZm4sIGNiKSB7XG4gICAgICAgICAgICAgICAgZm4uYXBwbHkodGhhdCwgbmV3YXJncy5jb25jYXQoW19yZXN0UGFyYW0oZnVuY3Rpb24gKGVyciwgbmV4dGFyZ3MpIHtcbiAgICAgICAgICAgICAgICAgICAgY2IoZXJyLCBuZXh0YXJncyk7XG4gICAgICAgICAgICAgICAgfSldKSk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZnVuY3Rpb24gKGVyciwgcmVzdWx0cykge1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrLmFwcGx5KHRoYXQsIFtlcnJdLmNvbmNhdChyZXN1bHRzKSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfTtcblxuICAgIGFzeW5jLmNvbXBvc2UgPSBmdW5jdGlvbiAoLyogZnVuY3Rpb25zLi4uICovKSB7XG4gICAgICAgIHJldHVybiBhc3luYy5zZXEuYXBwbHkobnVsbCwgQXJyYXkucHJvdG90eXBlLnJldmVyc2UuY2FsbChhcmd1bWVudHMpKTtcbiAgICB9O1xuXG5cbiAgICBmdW5jdGlvbiBfYXBwbHlFYWNoKGVhY2hmbikge1xuICAgICAgICByZXR1cm4gX3Jlc3RQYXJhbShmdW5jdGlvbihmbnMsIGFyZ3MpIHtcbiAgICAgICAgICAgIHZhciBnbyA9IF9yZXN0UGFyYW0oZnVuY3Rpb24oYXJncykge1xuICAgICAgICAgICAgICAgIHZhciB0aGF0ID0gdGhpcztcbiAgICAgICAgICAgICAgICB2YXIgY2FsbGJhY2sgPSBhcmdzLnBvcCgpO1xuICAgICAgICAgICAgICAgIHJldHVybiBlYWNoZm4oZm5zLCBmdW5jdGlvbiAoZm4sIF8sIGNiKSB7XG4gICAgICAgICAgICAgICAgICAgIGZuLmFwcGx5KHRoYXQsIGFyZ3MuY29uY2F0KFtjYl0pKTtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIGNhbGxiYWNrKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgaWYgKGFyZ3MubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGdvLmFwcGx5KHRoaXMsIGFyZ3MpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGdvO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBhc3luYy5hcHBseUVhY2ggPSBfYXBwbHlFYWNoKGFzeW5jLmVhY2hPZik7XG4gICAgYXN5bmMuYXBwbHlFYWNoU2VyaWVzID0gX2FwcGx5RWFjaChhc3luYy5lYWNoT2ZTZXJpZXMpO1xuXG5cbiAgICBhc3luYy5mb3JldmVyID0gZnVuY3Rpb24gKGZuLCBjYWxsYmFjaykge1xuICAgICAgICB2YXIgZG9uZSA9IG9ubHlfb25jZShjYWxsYmFjayB8fCBub29wKTtcbiAgICAgICAgdmFyIHRhc2sgPSBlbnN1cmVBc3luYyhmbik7XG4gICAgICAgIGZ1bmN0aW9uIG5leHQoZXJyKSB7XG4gICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGRvbmUoZXJyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRhc2sobmV4dCk7XG4gICAgICAgIH1cbiAgICAgICAgbmV4dCgpO1xuICAgIH07XG5cbiAgICBmdW5jdGlvbiBlbnN1cmVBc3luYyhmbikge1xuICAgICAgICByZXR1cm4gX3Jlc3RQYXJhbShmdW5jdGlvbiAoYXJncykge1xuICAgICAgICAgICAgdmFyIGNhbGxiYWNrID0gYXJncy5wb3AoKTtcbiAgICAgICAgICAgIGFyZ3MucHVzaChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgdmFyIGlubmVyQXJncyA9IGFyZ3VtZW50cztcbiAgICAgICAgICAgICAgICBpZiAoc3luYykge1xuICAgICAgICAgICAgICAgICAgICBhc3luYy5zZXRJbW1lZGlhdGUoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2suYXBwbHkobnVsbCwgaW5uZXJBcmdzKTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2suYXBwbHkobnVsbCwgaW5uZXJBcmdzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHZhciBzeW5jID0gdHJ1ZTtcbiAgICAgICAgICAgIGZuLmFwcGx5KHRoaXMsIGFyZ3MpO1xuICAgICAgICAgICAgc3luYyA9IGZhbHNlO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBhc3luYy5lbnN1cmVBc3luYyA9IGVuc3VyZUFzeW5jO1xuXG4gICAgYXN5bmMuY29uc3RhbnQgPSBfcmVzdFBhcmFtKGZ1bmN0aW9uKHZhbHVlcykge1xuICAgICAgICB2YXIgYXJncyA9IFtudWxsXS5jb25jYXQodmFsdWVzKTtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChjYWxsYmFjaykge1xuICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrLmFwcGx5KHRoaXMsIGFyZ3MpO1xuICAgICAgICB9O1xuICAgIH0pO1xuXG4gICAgYXN5bmMud3JhcFN5bmMgPVxuICAgIGFzeW5jLmFzeW5jaWZ5ID0gZnVuY3Rpb24gYXN5bmNpZnkoZnVuYykge1xuICAgICAgICByZXR1cm4gX3Jlc3RQYXJhbShmdW5jdGlvbiAoYXJncykge1xuICAgICAgICAgICAgdmFyIGNhbGxiYWNrID0gYXJncy5wb3AoKTtcbiAgICAgICAgICAgIHZhciByZXN1bHQ7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIHJlc3VsdCA9IGZ1bmMuYXBwbHkodGhpcywgYXJncyk7XG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gaWYgcmVzdWx0IGlzIFByb21pc2Ugb2JqZWN0XG4gICAgICAgICAgICBpZiAoX2lzT2JqZWN0KHJlc3VsdCkgJiYgdHlwZW9mIHJlc3VsdC50aGVuID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgICAgICAgICByZXN1bHQudGhlbihmdW5jdGlvbih2YWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhudWxsLCB2YWx1ZSk7XG4gICAgICAgICAgICAgICAgfSlbXCJjYXRjaFwiXShmdW5jdGlvbihlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soZXJyLm1lc3NhZ2UgPyBlcnIgOiBuZXcgRXJyb3IoZXJyKSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrKG51bGwsIHJlc3VsdCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH07XG5cbiAgICAvLyBOb2RlLmpzXG4gICAgaWYgKHR5cGVvZiBtb2R1bGUgPT09ICdvYmplY3QnICYmIG1vZHVsZS5leHBvcnRzKSB7XG4gICAgICAgIG1vZHVsZS5leHBvcnRzID0gYXN5bmM7XG4gICAgfVxuICAgIC8vIEFNRCAvIFJlcXVpcmVKU1xuICAgIGVsc2UgaWYgKHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCkge1xuICAgICAgICBkZWZpbmUoW10sIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiBhc3luYztcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8vIGluY2x1ZGVkIGRpcmVjdGx5IHZpYSA8c2NyaXB0PiB0YWdcbiAgICBlbHNlIHtcbiAgICAgICAgcm9vdC5hc3luYyA9IGFzeW5jO1xuICAgIH1cblxufSgpKTtcbiIsIi8vIENvcHlyaWdodCBKb3llbnQsIEluYy4gYW5kIG90aGVyIE5vZGUgY29udHJpYnV0b3JzLlxuLy9cbi8vIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhXG4vLyBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlXG4vLyBcIlNvZnR3YXJlXCIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmdcbi8vIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCxcbi8vIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXRcbi8vIHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZVxuLy8gZm9sbG93aW5nIGNvbmRpdGlvbnM6XG4vL1xuLy8gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWRcbi8vIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuLy9cbi8vIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1Ncbi8vIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0Zcbi8vIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU5cbi8vIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLFxuLy8gREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SXG4vLyBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFXG4vLyBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLlxuXG4vLyByZXNvbHZlcyAuIGFuZCAuLiBlbGVtZW50cyBpbiBhIHBhdGggYXJyYXkgd2l0aCBkaXJlY3RvcnkgbmFtZXMgdGhlcmVcbi8vIG11c3QgYmUgbm8gc2xhc2hlcywgZW1wdHkgZWxlbWVudHMsIG9yIGRldmljZSBuYW1lcyAoYzpcXCkgaW4gdGhlIGFycmF5XG4vLyAoc28gYWxzbyBubyBsZWFkaW5nIGFuZCB0cmFpbGluZyBzbGFzaGVzIC0gaXQgZG9lcyBub3QgZGlzdGluZ3Vpc2hcbi8vIHJlbGF0aXZlIGFuZCBhYnNvbHV0ZSBwYXRocylcbmZ1bmN0aW9uIG5vcm1hbGl6ZUFycmF5KHBhcnRzLCBhbGxvd0Fib3ZlUm9vdCkge1xuICAvLyBpZiB0aGUgcGF0aCB0cmllcyB0byBnbyBhYm92ZSB0aGUgcm9vdCwgYHVwYCBlbmRzIHVwID4gMFxuICB2YXIgdXAgPSAwO1xuICBmb3IgKHZhciBpID0gcGFydHMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICB2YXIgbGFzdCA9IHBhcnRzW2ldO1xuICAgIGlmIChsYXN0ID09PSAnLicpIHtcbiAgICAgIHBhcnRzLnNwbGljZShpLCAxKTtcbiAgICB9IGVsc2UgaWYgKGxhc3QgPT09ICcuLicpIHtcbiAgICAgIHBhcnRzLnNwbGljZShpLCAxKTtcbiAgICAgIHVwKys7XG4gICAgfSBlbHNlIGlmICh1cCkge1xuICAgICAgcGFydHMuc3BsaWNlKGksIDEpO1xuICAgICAgdXAtLTtcbiAgICB9XG4gIH1cblxuICAvLyBpZiB0aGUgcGF0aCBpcyBhbGxvd2VkIHRvIGdvIGFib3ZlIHRoZSByb290LCByZXN0b3JlIGxlYWRpbmcgLi5zXG4gIGlmIChhbGxvd0Fib3ZlUm9vdCkge1xuICAgIGZvciAoOyB1cC0tOyB1cCkge1xuICAgICAgcGFydHMudW5zaGlmdCgnLi4nKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gcGFydHM7XG59XG5cbi8vIFNwbGl0IGEgZmlsZW5hbWUgaW50byBbcm9vdCwgZGlyLCBiYXNlbmFtZSwgZXh0XSwgdW5peCB2ZXJzaW9uXG4vLyAncm9vdCcgaXMganVzdCBhIHNsYXNoLCBvciBub3RoaW5nLlxudmFyIHNwbGl0UGF0aFJlID1cbiAgICAvXihcXC8/fCkoW1xcc1xcU10qPykoKD86XFwuezEsMn18W15cXC9dKz98KShcXC5bXi5cXC9dKnwpKSg/OltcXC9dKikkLztcbnZhciBzcGxpdFBhdGggPSBmdW5jdGlvbihmaWxlbmFtZSkge1xuICByZXR1cm4gc3BsaXRQYXRoUmUuZXhlYyhmaWxlbmFtZSkuc2xpY2UoMSk7XG59O1xuXG4vLyBwYXRoLnJlc29sdmUoW2Zyb20gLi4uXSwgdG8pXG4vLyBwb3NpeCB2ZXJzaW9uXG5leHBvcnRzLnJlc29sdmUgPSBmdW5jdGlvbigpIHtcbiAgdmFyIHJlc29sdmVkUGF0aCA9ICcnLFxuICAgICAgcmVzb2x2ZWRBYnNvbHV0ZSA9IGZhbHNlO1xuXG4gIGZvciAodmFyIGkgPSBhcmd1bWVudHMubGVuZ3RoIC0gMTsgaSA+PSAtMSAmJiAhcmVzb2x2ZWRBYnNvbHV0ZTsgaS0tKSB7XG4gICAgdmFyIHBhdGggPSAoaSA+PSAwKSA/IGFyZ3VtZW50c1tpXSA6IHByb2Nlc3MuY3dkKCk7XG5cbiAgICAvLyBTa2lwIGVtcHR5IGFuZCBpbnZhbGlkIGVudHJpZXNcbiAgICBpZiAodHlwZW9mIHBhdGggIT09ICdzdHJpbmcnKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdBcmd1bWVudHMgdG8gcGF0aC5yZXNvbHZlIG11c3QgYmUgc3RyaW5ncycpO1xuICAgIH0gZWxzZSBpZiAoIXBhdGgpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIHJlc29sdmVkUGF0aCA9IHBhdGggKyAnLycgKyByZXNvbHZlZFBhdGg7XG4gICAgcmVzb2x2ZWRBYnNvbHV0ZSA9IHBhdGguY2hhckF0KDApID09PSAnLyc7XG4gIH1cblxuICAvLyBBdCB0aGlzIHBvaW50IHRoZSBwYXRoIHNob3VsZCBiZSByZXNvbHZlZCB0byBhIGZ1bGwgYWJzb2x1dGUgcGF0aCwgYnV0XG4gIC8vIGhhbmRsZSByZWxhdGl2ZSBwYXRocyB0byBiZSBzYWZlIChtaWdodCBoYXBwZW4gd2hlbiBwcm9jZXNzLmN3ZCgpIGZhaWxzKVxuXG4gIC8vIE5vcm1hbGl6ZSB0aGUgcGF0aFxuICByZXNvbHZlZFBhdGggPSBub3JtYWxpemVBcnJheShmaWx0ZXIocmVzb2x2ZWRQYXRoLnNwbGl0KCcvJyksIGZ1bmN0aW9uKHApIHtcbiAgICByZXR1cm4gISFwO1xuICB9KSwgIXJlc29sdmVkQWJzb2x1dGUpLmpvaW4oJy8nKTtcblxuICByZXR1cm4gKChyZXNvbHZlZEFic29sdXRlID8gJy8nIDogJycpICsgcmVzb2x2ZWRQYXRoKSB8fCAnLic7XG59O1xuXG4vLyBwYXRoLm5vcm1hbGl6ZShwYXRoKVxuLy8gcG9zaXggdmVyc2lvblxuZXhwb3J0cy5ub3JtYWxpemUgPSBmdW5jdGlvbihwYXRoKSB7XG4gIHZhciBpc0Fic29sdXRlID0gZXhwb3J0cy5pc0Fic29sdXRlKHBhdGgpLFxuICAgICAgdHJhaWxpbmdTbGFzaCA9IHN1YnN0cihwYXRoLCAtMSkgPT09ICcvJztcblxuICAvLyBOb3JtYWxpemUgdGhlIHBhdGhcbiAgcGF0aCA9IG5vcm1hbGl6ZUFycmF5KGZpbHRlcihwYXRoLnNwbGl0KCcvJyksIGZ1bmN0aW9uKHApIHtcbiAgICByZXR1cm4gISFwO1xuICB9KSwgIWlzQWJzb2x1dGUpLmpvaW4oJy8nKTtcblxuICBpZiAoIXBhdGggJiYgIWlzQWJzb2x1dGUpIHtcbiAgICBwYXRoID0gJy4nO1xuICB9XG4gIGlmIChwYXRoICYmIHRyYWlsaW5nU2xhc2gpIHtcbiAgICBwYXRoICs9ICcvJztcbiAgfVxuXG4gIHJldHVybiAoaXNBYnNvbHV0ZSA/ICcvJyA6ICcnKSArIHBhdGg7XG59O1xuXG4vLyBwb3NpeCB2ZXJzaW9uXG5leHBvcnRzLmlzQWJzb2x1dGUgPSBmdW5jdGlvbihwYXRoKSB7XG4gIHJldHVybiBwYXRoLmNoYXJBdCgwKSA9PT0gJy8nO1xufTtcblxuLy8gcG9zaXggdmVyc2lvblxuZXhwb3J0cy5qb2luID0gZnVuY3Rpb24oKSB7XG4gIHZhciBwYXRocyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMCk7XG4gIHJldHVybiBleHBvcnRzLm5vcm1hbGl6ZShmaWx0ZXIocGF0aHMsIGZ1bmN0aW9uKHAsIGluZGV4KSB7XG4gICAgaWYgKHR5cGVvZiBwICE9PSAnc3RyaW5nJykge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignQXJndW1lbnRzIHRvIHBhdGguam9pbiBtdXN0IGJlIHN0cmluZ3MnKTtcbiAgICB9XG4gICAgcmV0dXJuIHA7XG4gIH0pLmpvaW4oJy8nKSk7XG59O1xuXG5cbi8vIHBhdGgucmVsYXRpdmUoZnJvbSwgdG8pXG4vLyBwb3NpeCB2ZXJzaW9uXG5leHBvcnRzLnJlbGF0aXZlID0gZnVuY3Rpb24oZnJvbSwgdG8pIHtcbiAgZnJvbSA9IGV4cG9ydHMucmVzb2x2ZShmcm9tKS5zdWJzdHIoMSk7XG4gIHRvID0gZXhwb3J0cy5yZXNvbHZlKHRvKS5zdWJzdHIoMSk7XG5cbiAgZnVuY3Rpb24gdHJpbShhcnIpIHtcbiAgICB2YXIgc3RhcnQgPSAwO1xuICAgIGZvciAoOyBzdGFydCA8IGFyci5sZW5ndGg7IHN0YXJ0KyspIHtcbiAgICAgIGlmIChhcnJbc3RhcnRdICE9PSAnJykgYnJlYWs7XG4gICAgfVxuXG4gICAgdmFyIGVuZCA9IGFyci5sZW5ndGggLSAxO1xuICAgIGZvciAoOyBlbmQgPj0gMDsgZW5kLS0pIHtcbiAgICAgIGlmIChhcnJbZW5kXSAhPT0gJycpIGJyZWFrO1xuICAgIH1cblxuICAgIGlmIChzdGFydCA+IGVuZCkgcmV0dXJuIFtdO1xuICAgIHJldHVybiBhcnIuc2xpY2Uoc3RhcnQsIGVuZCAtIHN0YXJ0ICsgMSk7XG4gIH1cblxuICB2YXIgZnJvbVBhcnRzID0gdHJpbShmcm9tLnNwbGl0KCcvJykpO1xuICB2YXIgdG9QYXJ0cyA9IHRyaW0odG8uc3BsaXQoJy8nKSk7XG5cbiAgdmFyIGxlbmd0aCA9IE1hdGgubWluKGZyb21QYXJ0cy5sZW5ndGgsIHRvUGFydHMubGVuZ3RoKTtcbiAgdmFyIHNhbWVQYXJ0c0xlbmd0aCA9IGxlbmd0aDtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgIGlmIChmcm9tUGFydHNbaV0gIT09IHRvUGFydHNbaV0pIHtcbiAgICAgIHNhbWVQYXJ0c0xlbmd0aCA9IGk7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICB2YXIgb3V0cHV0UGFydHMgPSBbXTtcbiAgZm9yICh2YXIgaSA9IHNhbWVQYXJ0c0xlbmd0aDsgaSA8IGZyb21QYXJ0cy5sZW5ndGg7IGkrKykge1xuICAgIG91dHB1dFBhcnRzLnB1c2goJy4uJyk7XG4gIH1cblxuICBvdXRwdXRQYXJ0cyA9IG91dHB1dFBhcnRzLmNvbmNhdCh0b1BhcnRzLnNsaWNlKHNhbWVQYXJ0c0xlbmd0aCkpO1xuXG4gIHJldHVybiBvdXRwdXRQYXJ0cy5qb2luKCcvJyk7XG59O1xuXG5leHBvcnRzLnNlcCA9ICcvJztcbmV4cG9ydHMuZGVsaW1pdGVyID0gJzonO1xuXG5leHBvcnRzLmRpcm5hbWUgPSBmdW5jdGlvbihwYXRoKSB7XG4gIHZhciByZXN1bHQgPSBzcGxpdFBhdGgocGF0aCksXG4gICAgICByb290ID0gcmVzdWx0WzBdLFxuICAgICAgZGlyID0gcmVzdWx0WzFdO1xuXG4gIGlmICghcm9vdCAmJiAhZGlyKSB7XG4gICAgLy8gTm8gZGlybmFtZSB3aGF0c29ldmVyXG4gICAgcmV0dXJuICcuJztcbiAgfVxuXG4gIGlmIChkaXIpIHtcbiAgICAvLyBJdCBoYXMgYSBkaXJuYW1lLCBzdHJpcCB0cmFpbGluZyBzbGFzaFxuICAgIGRpciA9IGRpci5zdWJzdHIoMCwgZGlyLmxlbmd0aCAtIDEpO1xuICB9XG5cbiAgcmV0dXJuIHJvb3QgKyBkaXI7XG59O1xuXG5cbmV4cG9ydHMuYmFzZW5hbWUgPSBmdW5jdGlvbihwYXRoLCBleHQpIHtcbiAgdmFyIGYgPSBzcGxpdFBhdGgocGF0aClbMl07XG4gIC8vIFRPRE86IG1ha2UgdGhpcyBjb21wYXJpc29uIGNhc2UtaW5zZW5zaXRpdmUgb24gd2luZG93cz9cbiAgaWYgKGV4dCAmJiBmLnN1YnN0cigtMSAqIGV4dC5sZW5ndGgpID09PSBleHQpIHtcbiAgICBmID0gZi5zdWJzdHIoMCwgZi5sZW5ndGggLSBleHQubGVuZ3RoKTtcbiAgfVxuICByZXR1cm4gZjtcbn07XG5cblxuZXhwb3J0cy5leHRuYW1lID0gZnVuY3Rpb24ocGF0aCkge1xuICByZXR1cm4gc3BsaXRQYXRoKHBhdGgpWzNdO1xufTtcblxuZnVuY3Rpb24gZmlsdGVyICh4cywgZikge1xuICAgIGlmICh4cy5maWx0ZXIpIHJldHVybiB4cy5maWx0ZXIoZik7XG4gICAgdmFyIHJlcyA9IFtdO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgeHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgaWYgKGYoeHNbaV0sIGksIHhzKSkgcmVzLnB1c2goeHNbaV0pO1xuICAgIH1cbiAgICByZXR1cm4gcmVzO1xufVxuXG4vLyBTdHJpbmcucHJvdG90eXBlLnN1YnN0ciAtIG5lZ2F0aXZlIGluZGV4IGRvbid0IHdvcmsgaW4gSUU4XG52YXIgc3Vic3RyID0gJ2FiJy5zdWJzdHIoLTEpID09PSAnYidcbiAgICA/IGZ1bmN0aW9uIChzdHIsIHN0YXJ0LCBsZW4pIHsgcmV0dXJuIHN0ci5zdWJzdHIoc3RhcnQsIGxlbikgfVxuICAgIDogZnVuY3Rpb24gKHN0ciwgc3RhcnQsIGxlbikge1xuICAgICAgICBpZiAoc3RhcnQgPCAwKSBzdGFydCA9IHN0ci5sZW5ndGggKyBzdGFydDtcbiAgICAgICAgcmV0dXJuIHN0ci5zdWJzdHIoc3RhcnQsIGxlbik7XG4gICAgfVxuO1xuIiwiLy8gc2hpbSBmb3IgdXNpbmcgcHJvY2VzcyBpbiBicm93c2VyXG5cbnZhciBwcm9jZXNzID0gbW9kdWxlLmV4cG9ydHMgPSB7fTtcbnZhciBxdWV1ZSA9IFtdO1xudmFyIGRyYWluaW5nID0gZmFsc2U7XG52YXIgY3VycmVudFF1ZXVlO1xudmFyIHF1ZXVlSW5kZXggPSAtMTtcblxuZnVuY3Rpb24gY2xlYW5VcE5leHRUaWNrKCkge1xuICAgIGRyYWluaW5nID0gZmFsc2U7XG4gICAgaWYgKGN1cnJlbnRRdWV1ZS5sZW5ndGgpIHtcbiAgICAgICAgcXVldWUgPSBjdXJyZW50UXVldWUuY29uY2F0KHF1ZXVlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICBxdWV1ZUluZGV4ID0gLTE7XG4gICAgfVxuICAgIGlmIChxdWV1ZS5sZW5ndGgpIHtcbiAgICAgICAgZHJhaW5RdWV1ZSgpO1xuICAgIH1cbn1cblxuZnVuY3Rpb24gZHJhaW5RdWV1ZSgpIHtcbiAgICBpZiAoZHJhaW5pbmcpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB2YXIgdGltZW91dCA9IHNldFRpbWVvdXQoY2xlYW5VcE5leHRUaWNrKTtcbiAgICBkcmFpbmluZyA9IHRydWU7XG5cbiAgICB2YXIgbGVuID0gcXVldWUubGVuZ3RoO1xuICAgIHdoaWxlKGxlbikge1xuICAgICAgICBjdXJyZW50UXVldWUgPSBxdWV1ZTtcbiAgICAgICAgcXVldWUgPSBbXTtcbiAgICAgICAgd2hpbGUgKCsrcXVldWVJbmRleCA8IGxlbikge1xuICAgICAgICAgICAgaWYgKGN1cnJlbnRRdWV1ZSkge1xuICAgICAgICAgICAgICAgIGN1cnJlbnRRdWV1ZVtxdWV1ZUluZGV4XS5ydW4oKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBxdWV1ZUluZGV4ID0gLTE7XG4gICAgICAgIGxlbiA9IHF1ZXVlLmxlbmd0aDtcbiAgICB9XG4gICAgY3VycmVudFF1ZXVlID0gbnVsbDtcbiAgICBkcmFpbmluZyA9IGZhbHNlO1xuICAgIGNsZWFyVGltZW91dCh0aW1lb3V0KTtcbn1cblxucHJvY2Vzcy5uZXh0VGljayA9IGZ1bmN0aW9uIChmdW4pIHtcbiAgICB2YXIgYXJncyA9IG5ldyBBcnJheShhcmd1bWVudHMubGVuZ3RoIC0gMSk7XG4gICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPiAxKSB7XG4gICAgICAgIGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBhcmdzW2kgLSAxXSA9IGFyZ3VtZW50c1tpXTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBxdWV1ZS5wdXNoKG5ldyBJdGVtKGZ1biwgYXJncykpO1xuICAgIGlmIChxdWV1ZS5sZW5ndGggPT09IDEgJiYgIWRyYWluaW5nKSB7XG4gICAgICAgIHNldFRpbWVvdXQoZHJhaW5RdWV1ZSwgMCk7XG4gICAgfVxufTtcblxuLy8gdjggbGlrZXMgcHJlZGljdGlibGUgb2JqZWN0c1xuZnVuY3Rpb24gSXRlbShmdW4sIGFycmF5KSB7XG4gICAgdGhpcy5mdW4gPSBmdW47XG4gICAgdGhpcy5hcnJheSA9IGFycmF5O1xufVxuSXRlbS5wcm90b3R5cGUucnVuID0gZnVuY3Rpb24gKCkge1xuICAgIHRoaXMuZnVuLmFwcGx5KG51bGwsIHRoaXMuYXJyYXkpO1xufTtcbnByb2Nlc3MudGl0bGUgPSAnYnJvd3Nlcic7XG5wcm9jZXNzLmJyb3dzZXIgPSB0cnVlO1xucHJvY2Vzcy5lbnYgPSB7fTtcbnByb2Nlc3MuYXJndiA9IFtdO1xucHJvY2Vzcy52ZXJzaW9uID0gJyc7IC8vIGVtcHR5IHN0cmluZyB0byBhdm9pZCByZWdleHAgaXNzdWVzXG5wcm9jZXNzLnZlcnNpb25zID0ge307XG5cbmZ1bmN0aW9uIG5vb3AoKSB7fVxuXG5wcm9jZXNzLm9uID0gbm9vcDtcbnByb2Nlc3MuYWRkTGlzdGVuZXIgPSBub29wO1xucHJvY2Vzcy5vbmNlID0gbm9vcDtcbnByb2Nlc3Mub2ZmID0gbm9vcDtcbnByb2Nlc3MucmVtb3ZlTGlzdGVuZXIgPSBub29wO1xucHJvY2Vzcy5yZW1vdmVBbGxMaXN0ZW5lcnMgPSBub29wO1xucHJvY2Vzcy5lbWl0ID0gbm9vcDtcblxucHJvY2Vzcy5iaW5kaW5nID0gZnVuY3Rpb24gKG5hbWUpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3Byb2Nlc3MuYmluZGluZyBpcyBub3Qgc3VwcG9ydGVkJyk7XG59O1xuXG5wcm9jZXNzLmN3ZCA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuICcvJyB9O1xucHJvY2Vzcy5jaGRpciA9IGZ1bmN0aW9uIChkaXIpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3Byb2Nlc3MuY2hkaXIgaXMgbm90IHN1cHBvcnRlZCcpO1xufTtcbnByb2Nlc3MudW1hc2sgPSBmdW5jdGlvbigpIHsgcmV0dXJuIDA7IH07XG4iLCIvKiEgaHR0cHM6Ly9tdGhzLmJlL3B1bnljb2RlIHYxLjQuMCBieSBAbWF0aGlhcyAqL1xuOyhmdW5jdGlvbihyb290KSB7XG5cblx0LyoqIERldGVjdCBmcmVlIHZhcmlhYmxlcyAqL1xuXHR2YXIgZnJlZUV4cG9ydHMgPSB0eXBlb2YgZXhwb3J0cyA9PSAnb2JqZWN0JyAmJiBleHBvcnRzICYmXG5cdFx0IWV4cG9ydHMubm9kZVR5cGUgJiYgZXhwb3J0cztcblx0dmFyIGZyZWVNb2R1bGUgPSB0eXBlb2YgbW9kdWxlID09ICdvYmplY3QnICYmIG1vZHVsZSAmJlxuXHRcdCFtb2R1bGUubm9kZVR5cGUgJiYgbW9kdWxlO1xuXHR2YXIgZnJlZUdsb2JhbCA9IHR5cGVvZiBnbG9iYWwgPT0gJ29iamVjdCcgJiYgZ2xvYmFsO1xuXHRpZiAoXG5cdFx0ZnJlZUdsb2JhbC5nbG9iYWwgPT09IGZyZWVHbG9iYWwgfHxcblx0XHRmcmVlR2xvYmFsLndpbmRvdyA9PT0gZnJlZUdsb2JhbCB8fFxuXHRcdGZyZWVHbG9iYWwuc2VsZiA9PT0gZnJlZUdsb2JhbFxuXHQpIHtcblx0XHRyb290ID0gZnJlZUdsb2JhbDtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGUgYHB1bnljb2RlYCBvYmplY3QuXG5cdCAqIEBuYW1lIHB1bnljb2RlXG5cdCAqIEB0eXBlIE9iamVjdFxuXHQgKi9cblx0dmFyIHB1bnljb2RlLFxuXG5cdC8qKiBIaWdoZXN0IHBvc2l0aXZlIHNpZ25lZCAzMi1iaXQgZmxvYXQgdmFsdWUgKi9cblx0bWF4SW50ID0gMjE0NzQ4MzY0NywgLy8gYWthLiAweDdGRkZGRkZGIG9yIDJeMzEtMVxuXG5cdC8qKiBCb290c3RyaW5nIHBhcmFtZXRlcnMgKi9cblx0YmFzZSA9IDM2LFxuXHR0TWluID0gMSxcblx0dE1heCA9IDI2LFxuXHRza2V3ID0gMzgsXG5cdGRhbXAgPSA3MDAsXG5cdGluaXRpYWxCaWFzID0gNzIsXG5cdGluaXRpYWxOID0gMTI4LCAvLyAweDgwXG5cdGRlbGltaXRlciA9ICctJywgLy8gJ1xceDJEJ1xuXG5cdC8qKiBSZWd1bGFyIGV4cHJlc3Npb25zICovXG5cdHJlZ2V4UHVueWNvZGUgPSAvXnhuLS0vLFxuXHRyZWdleE5vbkFTQ0lJID0gL1teXFx4MjAtXFx4N0VdLywgLy8gdW5wcmludGFibGUgQVNDSUkgY2hhcnMgKyBub24tQVNDSUkgY2hhcnNcblx0cmVnZXhTZXBhcmF0b3JzID0gL1tcXHgyRVxcdTMwMDJcXHVGRjBFXFx1RkY2MV0vZywgLy8gUkZDIDM0OTAgc2VwYXJhdG9yc1xuXG5cdC8qKiBFcnJvciBtZXNzYWdlcyAqL1xuXHRlcnJvcnMgPSB7XG5cdFx0J292ZXJmbG93JzogJ092ZXJmbG93OiBpbnB1dCBuZWVkcyB3aWRlciBpbnRlZ2VycyB0byBwcm9jZXNzJyxcblx0XHQnbm90LWJhc2ljJzogJ0lsbGVnYWwgaW5wdXQgPj0gMHg4MCAobm90IGEgYmFzaWMgY29kZSBwb2ludCknLFxuXHRcdCdpbnZhbGlkLWlucHV0JzogJ0ludmFsaWQgaW5wdXQnXG5cdH0sXG5cblx0LyoqIENvbnZlbmllbmNlIHNob3J0Y3V0cyAqL1xuXHRiYXNlTWludXNUTWluID0gYmFzZSAtIHRNaW4sXG5cdGZsb29yID0gTWF0aC5mbG9vcixcblx0c3RyaW5nRnJvbUNoYXJDb2RlID0gU3RyaW5nLmZyb21DaGFyQ29kZSxcblxuXHQvKiogVGVtcG9yYXJ5IHZhcmlhYmxlICovXG5cdGtleTtcblxuXHQvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cblxuXHQvKipcblx0ICogQSBnZW5lcmljIGVycm9yIHV0aWxpdHkgZnVuY3Rpb24uXG5cdCAqIEBwcml2YXRlXG5cdCAqIEBwYXJhbSB7U3RyaW5nfSB0eXBlIFRoZSBlcnJvciB0eXBlLlxuXHQgKiBAcmV0dXJucyB7RXJyb3J9IFRocm93cyBhIGBSYW5nZUVycm9yYCB3aXRoIHRoZSBhcHBsaWNhYmxlIGVycm9yIG1lc3NhZ2UuXG5cdCAqL1xuXHRmdW5jdGlvbiBlcnJvcih0eXBlKSB7XG5cdFx0dGhyb3cgbmV3IFJhbmdlRXJyb3IoZXJyb3JzW3R5cGVdKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBBIGdlbmVyaWMgYEFycmF5I21hcGAgdXRpbGl0eSBmdW5jdGlvbi5cblx0ICogQHByaXZhdGVcblx0ICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIGl0ZXJhdGUgb3Zlci5cblx0ICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2sgVGhlIGZ1bmN0aW9uIHRoYXQgZ2V0cyBjYWxsZWQgZm9yIGV2ZXJ5IGFycmF5XG5cdCAqIGl0ZW0uXG5cdCAqIEByZXR1cm5zIHtBcnJheX0gQSBuZXcgYXJyYXkgb2YgdmFsdWVzIHJldHVybmVkIGJ5IHRoZSBjYWxsYmFjayBmdW5jdGlvbi5cblx0ICovXG5cdGZ1bmN0aW9uIG1hcChhcnJheSwgZm4pIHtcblx0XHR2YXIgbGVuZ3RoID0gYXJyYXkubGVuZ3RoO1xuXHRcdHZhciByZXN1bHQgPSBbXTtcblx0XHR3aGlsZSAobGVuZ3RoLS0pIHtcblx0XHRcdHJlc3VsdFtsZW5ndGhdID0gZm4oYXJyYXlbbGVuZ3RoXSk7XG5cdFx0fVxuXHRcdHJldHVybiByZXN1bHQ7XG5cdH1cblxuXHQvKipcblx0ICogQSBzaW1wbGUgYEFycmF5I21hcGAtbGlrZSB3cmFwcGVyIHRvIHdvcmsgd2l0aCBkb21haW4gbmFtZSBzdHJpbmdzIG9yIGVtYWlsXG5cdCAqIGFkZHJlc3Nlcy5cblx0ICogQHByaXZhdGVcblx0ICogQHBhcmFtIHtTdHJpbmd9IGRvbWFpbiBUaGUgZG9tYWluIG5hbWUgb3IgZW1haWwgYWRkcmVzcy5cblx0ICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2sgVGhlIGZ1bmN0aW9uIHRoYXQgZ2V0cyBjYWxsZWQgZm9yIGV2ZXJ5XG5cdCAqIGNoYXJhY3Rlci5cblx0ICogQHJldHVybnMge0FycmF5fSBBIG5ldyBzdHJpbmcgb2YgY2hhcmFjdGVycyByZXR1cm5lZCBieSB0aGUgY2FsbGJhY2tcblx0ICogZnVuY3Rpb24uXG5cdCAqL1xuXHRmdW5jdGlvbiBtYXBEb21haW4oc3RyaW5nLCBmbikge1xuXHRcdHZhciBwYXJ0cyA9IHN0cmluZy5zcGxpdCgnQCcpO1xuXHRcdHZhciByZXN1bHQgPSAnJztcblx0XHRpZiAocGFydHMubGVuZ3RoID4gMSkge1xuXHRcdFx0Ly8gSW4gZW1haWwgYWRkcmVzc2VzLCBvbmx5IHRoZSBkb21haW4gbmFtZSBzaG91bGQgYmUgcHVueWNvZGVkLiBMZWF2ZVxuXHRcdFx0Ly8gdGhlIGxvY2FsIHBhcnQgKGkuZS4gZXZlcnl0aGluZyB1cCB0byBgQGApIGludGFjdC5cblx0XHRcdHJlc3VsdCA9IHBhcnRzWzBdICsgJ0AnO1xuXHRcdFx0c3RyaW5nID0gcGFydHNbMV07XG5cdFx0fVxuXHRcdC8vIEF2b2lkIGBzcGxpdChyZWdleClgIGZvciBJRTggY29tcGF0aWJpbGl0eS4gU2VlICMxNy5cblx0XHRzdHJpbmcgPSBzdHJpbmcucmVwbGFjZShyZWdleFNlcGFyYXRvcnMsICdcXHgyRScpO1xuXHRcdHZhciBsYWJlbHMgPSBzdHJpbmcuc3BsaXQoJy4nKTtcblx0XHR2YXIgZW5jb2RlZCA9IG1hcChsYWJlbHMsIGZuKS5qb2luKCcuJyk7XG5cdFx0cmV0dXJuIHJlc3VsdCArIGVuY29kZWQ7XG5cdH1cblxuXHQvKipcblx0ICogQ3JlYXRlcyBhbiBhcnJheSBjb250YWluaW5nIHRoZSBudW1lcmljIGNvZGUgcG9pbnRzIG9mIGVhY2ggVW5pY29kZVxuXHQgKiBjaGFyYWN0ZXIgaW4gdGhlIHN0cmluZy4gV2hpbGUgSmF2YVNjcmlwdCB1c2VzIFVDUy0yIGludGVybmFsbHksXG5cdCAqIHRoaXMgZnVuY3Rpb24gd2lsbCBjb252ZXJ0IGEgcGFpciBvZiBzdXJyb2dhdGUgaGFsdmVzIChlYWNoIG9mIHdoaWNoXG5cdCAqIFVDUy0yIGV4cG9zZXMgYXMgc2VwYXJhdGUgY2hhcmFjdGVycykgaW50byBhIHNpbmdsZSBjb2RlIHBvaW50LFxuXHQgKiBtYXRjaGluZyBVVEYtMTYuXG5cdCAqIEBzZWUgYHB1bnljb2RlLnVjczIuZW5jb2RlYFxuXHQgKiBAc2VlIDxodHRwczovL21hdGhpYXNieW5lbnMuYmUvbm90ZXMvamF2YXNjcmlwdC1lbmNvZGluZz5cblx0ICogQG1lbWJlck9mIHB1bnljb2RlLnVjczJcblx0ICogQG5hbWUgZGVjb2RlXG5cdCAqIEBwYXJhbSB7U3RyaW5nfSBzdHJpbmcgVGhlIFVuaWNvZGUgaW5wdXQgc3RyaW5nIChVQ1MtMikuXG5cdCAqIEByZXR1cm5zIHtBcnJheX0gVGhlIG5ldyBhcnJheSBvZiBjb2RlIHBvaW50cy5cblx0ICovXG5cdGZ1bmN0aW9uIHVjczJkZWNvZGUoc3RyaW5nKSB7XG5cdFx0dmFyIG91dHB1dCA9IFtdLFxuXHRcdCAgICBjb3VudGVyID0gMCxcblx0XHQgICAgbGVuZ3RoID0gc3RyaW5nLmxlbmd0aCxcblx0XHQgICAgdmFsdWUsXG5cdFx0ICAgIGV4dHJhO1xuXHRcdHdoaWxlIChjb3VudGVyIDwgbGVuZ3RoKSB7XG5cdFx0XHR2YWx1ZSA9IHN0cmluZy5jaGFyQ29kZUF0KGNvdW50ZXIrKyk7XG5cdFx0XHRpZiAodmFsdWUgPj0gMHhEODAwICYmIHZhbHVlIDw9IDB4REJGRiAmJiBjb3VudGVyIDwgbGVuZ3RoKSB7XG5cdFx0XHRcdC8vIGhpZ2ggc3Vycm9nYXRlLCBhbmQgdGhlcmUgaXMgYSBuZXh0IGNoYXJhY3RlclxuXHRcdFx0XHRleHRyYSA9IHN0cmluZy5jaGFyQ29kZUF0KGNvdW50ZXIrKyk7XG5cdFx0XHRcdGlmICgoZXh0cmEgJiAweEZDMDApID09IDB4REMwMCkgeyAvLyBsb3cgc3Vycm9nYXRlXG5cdFx0XHRcdFx0b3V0cHV0LnB1c2goKCh2YWx1ZSAmIDB4M0ZGKSA8PCAxMCkgKyAoZXh0cmEgJiAweDNGRikgKyAweDEwMDAwKTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHQvLyB1bm1hdGNoZWQgc3Vycm9nYXRlOyBvbmx5IGFwcGVuZCB0aGlzIGNvZGUgdW5pdCwgaW4gY2FzZSB0aGUgbmV4dFxuXHRcdFx0XHRcdC8vIGNvZGUgdW5pdCBpcyB0aGUgaGlnaCBzdXJyb2dhdGUgb2YgYSBzdXJyb2dhdGUgcGFpclxuXHRcdFx0XHRcdG91dHB1dC5wdXNoKHZhbHVlKTtcblx0XHRcdFx0XHRjb3VudGVyLS07XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdG91dHB1dC5wdXNoKHZhbHVlKTtcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIG91dHB1dDtcblx0fVxuXG5cdC8qKlxuXHQgKiBDcmVhdGVzIGEgc3RyaW5nIGJhc2VkIG9uIGFuIGFycmF5IG9mIG51bWVyaWMgY29kZSBwb2ludHMuXG5cdCAqIEBzZWUgYHB1bnljb2RlLnVjczIuZGVjb2RlYFxuXHQgKiBAbWVtYmVyT2YgcHVueWNvZGUudWNzMlxuXHQgKiBAbmFtZSBlbmNvZGVcblx0ICogQHBhcmFtIHtBcnJheX0gY29kZVBvaW50cyBUaGUgYXJyYXkgb2YgbnVtZXJpYyBjb2RlIHBvaW50cy5cblx0ICogQHJldHVybnMge1N0cmluZ30gVGhlIG5ldyBVbmljb2RlIHN0cmluZyAoVUNTLTIpLlxuXHQgKi9cblx0ZnVuY3Rpb24gdWNzMmVuY29kZShhcnJheSkge1xuXHRcdHJldHVybiBtYXAoYXJyYXksIGZ1bmN0aW9uKHZhbHVlKSB7XG5cdFx0XHR2YXIgb3V0cHV0ID0gJyc7XG5cdFx0XHRpZiAodmFsdWUgPiAweEZGRkYpIHtcblx0XHRcdFx0dmFsdWUgLT0gMHgxMDAwMDtcblx0XHRcdFx0b3V0cHV0ICs9IHN0cmluZ0Zyb21DaGFyQ29kZSh2YWx1ZSA+Pj4gMTAgJiAweDNGRiB8IDB4RDgwMCk7XG5cdFx0XHRcdHZhbHVlID0gMHhEQzAwIHwgdmFsdWUgJiAweDNGRjtcblx0XHRcdH1cblx0XHRcdG91dHB1dCArPSBzdHJpbmdGcm9tQ2hhckNvZGUodmFsdWUpO1xuXHRcdFx0cmV0dXJuIG91dHB1dDtcblx0XHR9KS5qb2luKCcnKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBDb252ZXJ0cyBhIGJhc2ljIGNvZGUgcG9pbnQgaW50byBhIGRpZ2l0L2ludGVnZXIuXG5cdCAqIEBzZWUgYGRpZ2l0VG9CYXNpYygpYFxuXHQgKiBAcHJpdmF0ZVxuXHQgKiBAcGFyYW0ge051bWJlcn0gY29kZVBvaW50IFRoZSBiYXNpYyBudW1lcmljIGNvZGUgcG9pbnQgdmFsdWUuXG5cdCAqIEByZXR1cm5zIHtOdW1iZXJ9IFRoZSBudW1lcmljIHZhbHVlIG9mIGEgYmFzaWMgY29kZSBwb2ludCAoZm9yIHVzZSBpblxuXHQgKiByZXByZXNlbnRpbmcgaW50ZWdlcnMpIGluIHRoZSByYW5nZSBgMGAgdG8gYGJhc2UgLSAxYCwgb3IgYGJhc2VgIGlmXG5cdCAqIHRoZSBjb2RlIHBvaW50IGRvZXMgbm90IHJlcHJlc2VudCBhIHZhbHVlLlxuXHQgKi9cblx0ZnVuY3Rpb24gYmFzaWNUb0RpZ2l0KGNvZGVQb2ludCkge1xuXHRcdGlmIChjb2RlUG9pbnQgLSA0OCA8IDEwKSB7XG5cdFx0XHRyZXR1cm4gY29kZVBvaW50IC0gMjI7XG5cdFx0fVxuXHRcdGlmIChjb2RlUG9pbnQgLSA2NSA8IDI2KSB7XG5cdFx0XHRyZXR1cm4gY29kZVBvaW50IC0gNjU7XG5cdFx0fVxuXHRcdGlmIChjb2RlUG9pbnQgLSA5NyA8IDI2KSB7XG5cdFx0XHRyZXR1cm4gY29kZVBvaW50IC0gOTc7XG5cdFx0fVxuXHRcdHJldHVybiBiYXNlO1xuXHR9XG5cblx0LyoqXG5cdCAqIENvbnZlcnRzIGEgZGlnaXQvaW50ZWdlciBpbnRvIGEgYmFzaWMgY29kZSBwb2ludC5cblx0ICogQHNlZSBgYmFzaWNUb0RpZ2l0KClgXG5cdCAqIEBwcml2YXRlXG5cdCAqIEBwYXJhbSB7TnVtYmVyfSBkaWdpdCBUaGUgbnVtZXJpYyB2YWx1ZSBvZiBhIGJhc2ljIGNvZGUgcG9pbnQuXG5cdCAqIEByZXR1cm5zIHtOdW1iZXJ9IFRoZSBiYXNpYyBjb2RlIHBvaW50IHdob3NlIHZhbHVlICh3aGVuIHVzZWQgZm9yXG5cdCAqIHJlcHJlc2VudGluZyBpbnRlZ2VycykgaXMgYGRpZ2l0YCwgd2hpY2ggbmVlZHMgdG8gYmUgaW4gdGhlIHJhbmdlXG5cdCAqIGAwYCB0byBgYmFzZSAtIDFgLiBJZiBgZmxhZ2AgaXMgbm9uLXplcm8sIHRoZSB1cHBlcmNhc2UgZm9ybSBpc1xuXHQgKiB1c2VkOyBlbHNlLCB0aGUgbG93ZXJjYXNlIGZvcm0gaXMgdXNlZC4gVGhlIGJlaGF2aW9yIGlzIHVuZGVmaW5lZFxuXHQgKiBpZiBgZmxhZ2AgaXMgbm9uLXplcm8gYW5kIGBkaWdpdGAgaGFzIG5vIHVwcGVyY2FzZSBmb3JtLlxuXHQgKi9cblx0ZnVuY3Rpb24gZGlnaXRUb0Jhc2ljKGRpZ2l0LCBmbGFnKSB7XG5cdFx0Ly8gIDAuLjI1IG1hcCB0byBBU0NJSSBhLi56IG9yIEEuLlpcblx0XHQvLyAyNi4uMzUgbWFwIHRvIEFTQ0lJIDAuLjlcblx0XHRyZXR1cm4gZGlnaXQgKyAyMiArIDc1ICogKGRpZ2l0IDwgMjYpIC0gKChmbGFnICE9IDApIDw8IDUpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEJpYXMgYWRhcHRhdGlvbiBmdW5jdGlvbiBhcyBwZXIgc2VjdGlvbiAzLjQgb2YgUkZDIDM0OTIuXG5cdCAqIGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmMzNDkyI3NlY3Rpb24tMy40XG5cdCAqIEBwcml2YXRlXG5cdCAqL1xuXHRmdW5jdGlvbiBhZGFwdChkZWx0YSwgbnVtUG9pbnRzLCBmaXJzdFRpbWUpIHtcblx0XHR2YXIgayA9IDA7XG5cdFx0ZGVsdGEgPSBmaXJzdFRpbWUgPyBmbG9vcihkZWx0YSAvIGRhbXApIDogZGVsdGEgPj4gMTtcblx0XHRkZWx0YSArPSBmbG9vcihkZWx0YSAvIG51bVBvaW50cyk7XG5cdFx0Zm9yICgvKiBubyBpbml0aWFsaXphdGlvbiAqLzsgZGVsdGEgPiBiYXNlTWludXNUTWluICogdE1heCA+PiAxOyBrICs9IGJhc2UpIHtcblx0XHRcdGRlbHRhID0gZmxvb3IoZGVsdGEgLyBiYXNlTWludXNUTWluKTtcblx0XHR9XG5cdFx0cmV0dXJuIGZsb29yKGsgKyAoYmFzZU1pbnVzVE1pbiArIDEpICogZGVsdGEgLyAoZGVsdGEgKyBza2V3KSk7XG5cdH1cblxuXHQvKipcblx0ICogQ29udmVydHMgYSBQdW55Y29kZSBzdHJpbmcgb2YgQVNDSUktb25seSBzeW1ib2xzIHRvIGEgc3RyaW5nIG9mIFVuaWNvZGVcblx0ICogc3ltYm9scy5cblx0ICogQG1lbWJlck9mIHB1bnljb2RlXG5cdCAqIEBwYXJhbSB7U3RyaW5nfSBpbnB1dCBUaGUgUHVueWNvZGUgc3RyaW5nIG9mIEFTQ0lJLW9ubHkgc3ltYm9scy5cblx0ICogQHJldHVybnMge1N0cmluZ30gVGhlIHJlc3VsdGluZyBzdHJpbmcgb2YgVW5pY29kZSBzeW1ib2xzLlxuXHQgKi9cblx0ZnVuY3Rpb24gZGVjb2RlKGlucHV0KSB7XG5cdFx0Ly8gRG9uJ3QgdXNlIFVDUy0yXG5cdFx0dmFyIG91dHB1dCA9IFtdLFxuXHRcdCAgICBpbnB1dExlbmd0aCA9IGlucHV0Lmxlbmd0aCxcblx0XHQgICAgb3V0LFxuXHRcdCAgICBpID0gMCxcblx0XHQgICAgbiA9IGluaXRpYWxOLFxuXHRcdCAgICBiaWFzID0gaW5pdGlhbEJpYXMsXG5cdFx0ICAgIGJhc2ljLFxuXHRcdCAgICBqLFxuXHRcdCAgICBpbmRleCxcblx0XHQgICAgb2xkaSxcblx0XHQgICAgdyxcblx0XHQgICAgayxcblx0XHQgICAgZGlnaXQsXG5cdFx0ICAgIHQsXG5cdFx0ICAgIC8qKiBDYWNoZWQgY2FsY3VsYXRpb24gcmVzdWx0cyAqL1xuXHRcdCAgICBiYXNlTWludXNUO1xuXG5cdFx0Ly8gSGFuZGxlIHRoZSBiYXNpYyBjb2RlIHBvaW50czogbGV0IGBiYXNpY2AgYmUgdGhlIG51bWJlciBvZiBpbnB1dCBjb2RlXG5cdFx0Ly8gcG9pbnRzIGJlZm9yZSB0aGUgbGFzdCBkZWxpbWl0ZXIsIG9yIGAwYCBpZiB0aGVyZSBpcyBub25lLCB0aGVuIGNvcHlcblx0XHQvLyB0aGUgZmlyc3QgYmFzaWMgY29kZSBwb2ludHMgdG8gdGhlIG91dHB1dC5cblxuXHRcdGJhc2ljID0gaW5wdXQubGFzdEluZGV4T2YoZGVsaW1pdGVyKTtcblx0XHRpZiAoYmFzaWMgPCAwKSB7XG5cdFx0XHRiYXNpYyA9IDA7XG5cdFx0fVxuXG5cdFx0Zm9yIChqID0gMDsgaiA8IGJhc2ljOyArK2opIHtcblx0XHRcdC8vIGlmIGl0J3Mgbm90IGEgYmFzaWMgY29kZSBwb2ludFxuXHRcdFx0aWYgKGlucHV0LmNoYXJDb2RlQXQoaikgPj0gMHg4MCkge1xuXHRcdFx0XHRlcnJvcignbm90LWJhc2ljJyk7XG5cdFx0XHR9XG5cdFx0XHRvdXRwdXQucHVzaChpbnB1dC5jaGFyQ29kZUF0KGopKTtcblx0XHR9XG5cblx0XHQvLyBNYWluIGRlY29kaW5nIGxvb3A6IHN0YXJ0IGp1c3QgYWZ0ZXIgdGhlIGxhc3QgZGVsaW1pdGVyIGlmIGFueSBiYXNpYyBjb2RlXG5cdFx0Ly8gcG9pbnRzIHdlcmUgY29waWVkOyBzdGFydCBhdCB0aGUgYmVnaW5uaW5nIG90aGVyd2lzZS5cblxuXHRcdGZvciAoaW5kZXggPSBiYXNpYyA+IDAgPyBiYXNpYyArIDEgOiAwOyBpbmRleCA8IGlucHV0TGVuZ3RoOyAvKiBubyBmaW5hbCBleHByZXNzaW9uICovKSB7XG5cblx0XHRcdC8vIGBpbmRleGAgaXMgdGhlIGluZGV4IG9mIHRoZSBuZXh0IGNoYXJhY3RlciB0byBiZSBjb25zdW1lZC5cblx0XHRcdC8vIERlY29kZSBhIGdlbmVyYWxpemVkIHZhcmlhYmxlLWxlbmd0aCBpbnRlZ2VyIGludG8gYGRlbHRhYCxcblx0XHRcdC8vIHdoaWNoIGdldHMgYWRkZWQgdG8gYGlgLiBUaGUgb3ZlcmZsb3cgY2hlY2tpbmcgaXMgZWFzaWVyXG5cdFx0XHQvLyBpZiB3ZSBpbmNyZWFzZSBgaWAgYXMgd2UgZ28sIHRoZW4gc3VidHJhY3Qgb2ZmIGl0cyBzdGFydGluZ1xuXHRcdFx0Ly8gdmFsdWUgYXQgdGhlIGVuZCB0byBvYnRhaW4gYGRlbHRhYC5cblx0XHRcdGZvciAob2xkaSA9IGksIHcgPSAxLCBrID0gYmFzZTsgLyogbm8gY29uZGl0aW9uICovOyBrICs9IGJhc2UpIHtcblxuXHRcdFx0XHRpZiAoaW5kZXggPj0gaW5wdXRMZW5ndGgpIHtcblx0XHRcdFx0XHRlcnJvcignaW52YWxpZC1pbnB1dCcpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0ZGlnaXQgPSBiYXNpY1RvRGlnaXQoaW5wdXQuY2hhckNvZGVBdChpbmRleCsrKSk7XG5cblx0XHRcdFx0aWYgKGRpZ2l0ID49IGJhc2UgfHwgZGlnaXQgPiBmbG9vcigobWF4SW50IC0gaSkgLyB3KSkge1xuXHRcdFx0XHRcdGVycm9yKCdvdmVyZmxvdycpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0aSArPSBkaWdpdCAqIHc7XG5cdFx0XHRcdHQgPSBrIDw9IGJpYXMgPyB0TWluIDogKGsgPj0gYmlhcyArIHRNYXggPyB0TWF4IDogayAtIGJpYXMpO1xuXG5cdFx0XHRcdGlmIChkaWdpdCA8IHQpIHtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGJhc2VNaW51c1QgPSBiYXNlIC0gdDtcblx0XHRcdFx0aWYgKHcgPiBmbG9vcihtYXhJbnQgLyBiYXNlTWludXNUKSkge1xuXHRcdFx0XHRcdGVycm9yKCdvdmVyZmxvdycpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0dyAqPSBiYXNlTWludXNUO1xuXG5cdFx0XHR9XG5cblx0XHRcdG91dCA9IG91dHB1dC5sZW5ndGggKyAxO1xuXHRcdFx0YmlhcyA9IGFkYXB0KGkgLSBvbGRpLCBvdXQsIG9sZGkgPT0gMCk7XG5cblx0XHRcdC8vIGBpYCB3YXMgc3VwcG9zZWQgdG8gd3JhcCBhcm91bmQgZnJvbSBgb3V0YCB0byBgMGAsXG5cdFx0XHQvLyBpbmNyZW1lbnRpbmcgYG5gIGVhY2ggdGltZSwgc28gd2UnbGwgZml4IHRoYXQgbm93OlxuXHRcdFx0aWYgKGZsb29yKGkgLyBvdXQpID4gbWF4SW50IC0gbikge1xuXHRcdFx0XHRlcnJvcignb3ZlcmZsb3cnKTtcblx0XHRcdH1cblxuXHRcdFx0biArPSBmbG9vcihpIC8gb3V0KTtcblx0XHRcdGkgJT0gb3V0O1xuXG5cdFx0XHQvLyBJbnNlcnQgYG5gIGF0IHBvc2l0aW9uIGBpYCBvZiB0aGUgb3V0cHV0XG5cdFx0XHRvdXRwdXQuc3BsaWNlKGkrKywgMCwgbik7XG5cblx0XHR9XG5cblx0XHRyZXR1cm4gdWNzMmVuY29kZShvdXRwdXQpO1xuXHR9XG5cblx0LyoqXG5cdCAqIENvbnZlcnRzIGEgc3RyaW5nIG9mIFVuaWNvZGUgc3ltYm9scyAoZS5nLiBhIGRvbWFpbiBuYW1lIGxhYmVsKSB0byBhXG5cdCAqIFB1bnljb2RlIHN0cmluZyBvZiBBU0NJSS1vbmx5IHN5bWJvbHMuXG5cdCAqIEBtZW1iZXJPZiBwdW55Y29kZVxuXHQgKiBAcGFyYW0ge1N0cmluZ30gaW5wdXQgVGhlIHN0cmluZyBvZiBVbmljb2RlIHN5bWJvbHMuXG5cdCAqIEByZXR1cm5zIHtTdHJpbmd9IFRoZSByZXN1bHRpbmcgUHVueWNvZGUgc3RyaW5nIG9mIEFTQ0lJLW9ubHkgc3ltYm9scy5cblx0ICovXG5cdGZ1bmN0aW9uIGVuY29kZShpbnB1dCkge1xuXHRcdHZhciBuLFxuXHRcdCAgICBkZWx0YSxcblx0XHQgICAgaGFuZGxlZENQQ291bnQsXG5cdFx0ICAgIGJhc2ljTGVuZ3RoLFxuXHRcdCAgICBiaWFzLFxuXHRcdCAgICBqLFxuXHRcdCAgICBtLFxuXHRcdCAgICBxLFxuXHRcdCAgICBrLFxuXHRcdCAgICB0LFxuXHRcdCAgICBjdXJyZW50VmFsdWUsXG5cdFx0ICAgIG91dHB1dCA9IFtdLFxuXHRcdCAgICAvKiogYGlucHV0TGVuZ3RoYCB3aWxsIGhvbGQgdGhlIG51bWJlciBvZiBjb2RlIHBvaW50cyBpbiBgaW5wdXRgLiAqL1xuXHRcdCAgICBpbnB1dExlbmd0aCxcblx0XHQgICAgLyoqIENhY2hlZCBjYWxjdWxhdGlvbiByZXN1bHRzICovXG5cdFx0ICAgIGhhbmRsZWRDUENvdW50UGx1c09uZSxcblx0XHQgICAgYmFzZU1pbnVzVCxcblx0XHQgICAgcU1pbnVzVDtcblxuXHRcdC8vIENvbnZlcnQgdGhlIGlucHV0IGluIFVDUy0yIHRvIFVuaWNvZGVcblx0XHRpbnB1dCA9IHVjczJkZWNvZGUoaW5wdXQpO1xuXG5cdFx0Ly8gQ2FjaGUgdGhlIGxlbmd0aFxuXHRcdGlucHV0TGVuZ3RoID0gaW5wdXQubGVuZ3RoO1xuXG5cdFx0Ly8gSW5pdGlhbGl6ZSB0aGUgc3RhdGVcblx0XHRuID0gaW5pdGlhbE47XG5cdFx0ZGVsdGEgPSAwO1xuXHRcdGJpYXMgPSBpbml0aWFsQmlhcztcblxuXHRcdC8vIEhhbmRsZSB0aGUgYmFzaWMgY29kZSBwb2ludHNcblx0XHRmb3IgKGogPSAwOyBqIDwgaW5wdXRMZW5ndGg7ICsraikge1xuXHRcdFx0Y3VycmVudFZhbHVlID0gaW5wdXRbal07XG5cdFx0XHRpZiAoY3VycmVudFZhbHVlIDwgMHg4MCkge1xuXHRcdFx0XHRvdXRwdXQucHVzaChzdHJpbmdGcm9tQ2hhckNvZGUoY3VycmVudFZhbHVlKSk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0aGFuZGxlZENQQ291bnQgPSBiYXNpY0xlbmd0aCA9IG91dHB1dC5sZW5ndGg7XG5cblx0XHQvLyBgaGFuZGxlZENQQ291bnRgIGlzIHRoZSBudW1iZXIgb2YgY29kZSBwb2ludHMgdGhhdCBoYXZlIGJlZW4gaGFuZGxlZDtcblx0XHQvLyBgYmFzaWNMZW5ndGhgIGlzIHRoZSBudW1iZXIgb2YgYmFzaWMgY29kZSBwb2ludHMuXG5cblx0XHQvLyBGaW5pc2ggdGhlIGJhc2ljIHN0cmluZyAtIGlmIGl0IGlzIG5vdCBlbXB0eSAtIHdpdGggYSBkZWxpbWl0ZXJcblx0XHRpZiAoYmFzaWNMZW5ndGgpIHtcblx0XHRcdG91dHB1dC5wdXNoKGRlbGltaXRlcik7XG5cdFx0fVxuXG5cdFx0Ly8gTWFpbiBlbmNvZGluZyBsb29wOlxuXHRcdHdoaWxlIChoYW5kbGVkQ1BDb3VudCA8IGlucHV0TGVuZ3RoKSB7XG5cblx0XHRcdC8vIEFsbCBub24tYmFzaWMgY29kZSBwb2ludHMgPCBuIGhhdmUgYmVlbiBoYW5kbGVkIGFscmVhZHkuIEZpbmQgdGhlIG5leHRcblx0XHRcdC8vIGxhcmdlciBvbmU6XG5cdFx0XHRmb3IgKG0gPSBtYXhJbnQsIGogPSAwOyBqIDwgaW5wdXRMZW5ndGg7ICsraikge1xuXHRcdFx0XHRjdXJyZW50VmFsdWUgPSBpbnB1dFtqXTtcblx0XHRcdFx0aWYgKGN1cnJlbnRWYWx1ZSA+PSBuICYmIGN1cnJlbnRWYWx1ZSA8IG0pIHtcblx0XHRcdFx0XHRtID0gY3VycmVudFZhbHVlO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdC8vIEluY3JlYXNlIGBkZWx0YWAgZW5vdWdoIHRvIGFkdmFuY2UgdGhlIGRlY29kZXIncyA8bixpPiBzdGF0ZSB0byA8bSwwPixcblx0XHRcdC8vIGJ1dCBndWFyZCBhZ2FpbnN0IG92ZXJmbG93XG5cdFx0XHRoYW5kbGVkQ1BDb3VudFBsdXNPbmUgPSBoYW5kbGVkQ1BDb3VudCArIDE7XG5cdFx0XHRpZiAobSAtIG4gPiBmbG9vcigobWF4SW50IC0gZGVsdGEpIC8gaGFuZGxlZENQQ291bnRQbHVzT25lKSkge1xuXHRcdFx0XHRlcnJvcignb3ZlcmZsb3cnKTtcblx0XHRcdH1cblxuXHRcdFx0ZGVsdGEgKz0gKG0gLSBuKSAqIGhhbmRsZWRDUENvdW50UGx1c09uZTtcblx0XHRcdG4gPSBtO1xuXG5cdFx0XHRmb3IgKGogPSAwOyBqIDwgaW5wdXRMZW5ndGg7ICsraikge1xuXHRcdFx0XHRjdXJyZW50VmFsdWUgPSBpbnB1dFtqXTtcblxuXHRcdFx0XHRpZiAoY3VycmVudFZhbHVlIDwgbiAmJiArK2RlbHRhID4gbWF4SW50KSB7XG5cdFx0XHRcdFx0ZXJyb3IoJ292ZXJmbG93Jyk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZiAoY3VycmVudFZhbHVlID09IG4pIHtcblx0XHRcdFx0XHQvLyBSZXByZXNlbnQgZGVsdGEgYXMgYSBnZW5lcmFsaXplZCB2YXJpYWJsZS1sZW5ndGggaW50ZWdlclxuXHRcdFx0XHRcdGZvciAocSA9IGRlbHRhLCBrID0gYmFzZTsgLyogbm8gY29uZGl0aW9uICovOyBrICs9IGJhc2UpIHtcblx0XHRcdFx0XHRcdHQgPSBrIDw9IGJpYXMgPyB0TWluIDogKGsgPj0gYmlhcyArIHRNYXggPyB0TWF4IDogayAtIGJpYXMpO1xuXHRcdFx0XHRcdFx0aWYgKHEgPCB0KSB7XG5cdFx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0cU1pbnVzVCA9IHEgLSB0O1xuXHRcdFx0XHRcdFx0YmFzZU1pbnVzVCA9IGJhc2UgLSB0O1xuXHRcdFx0XHRcdFx0b3V0cHV0LnB1c2goXG5cdFx0XHRcdFx0XHRcdHN0cmluZ0Zyb21DaGFyQ29kZShkaWdpdFRvQmFzaWModCArIHFNaW51c1QgJSBiYXNlTWludXNULCAwKSlcblx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0XHRxID0gZmxvb3IocU1pbnVzVCAvIGJhc2VNaW51c1QpO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdG91dHB1dC5wdXNoKHN0cmluZ0Zyb21DaGFyQ29kZShkaWdpdFRvQmFzaWMocSwgMCkpKTtcblx0XHRcdFx0XHRiaWFzID0gYWRhcHQoZGVsdGEsIGhhbmRsZWRDUENvdW50UGx1c09uZSwgaGFuZGxlZENQQ291bnQgPT0gYmFzaWNMZW5ndGgpO1xuXHRcdFx0XHRcdGRlbHRhID0gMDtcblx0XHRcdFx0XHQrK2hhbmRsZWRDUENvdW50O1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdCsrZGVsdGE7XG5cdFx0XHQrK247XG5cblx0XHR9XG5cdFx0cmV0dXJuIG91dHB1dC5qb2luKCcnKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBDb252ZXJ0cyBhIFB1bnljb2RlIHN0cmluZyByZXByZXNlbnRpbmcgYSBkb21haW4gbmFtZSBvciBhbiBlbWFpbCBhZGRyZXNzXG5cdCAqIHRvIFVuaWNvZGUuIE9ubHkgdGhlIFB1bnljb2RlZCBwYXJ0cyBvZiB0aGUgaW5wdXQgd2lsbCBiZSBjb252ZXJ0ZWQsIGkuZS5cblx0ICogaXQgZG9lc24ndCBtYXR0ZXIgaWYgeW91IGNhbGwgaXQgb24gYSBzdHJpbmcgdGhhdCBoYXMgYWxyZWFkeSBiZWVuXG5cdCAqIGNvbnZlcnRlZCB0byBVbmljb2RlLlxuXHQgKiBAbWVtYmVyT2YgcHVueWNvZGVcblx0ICogQHBhcmFtIHtTdHJpbmd9IGlucHV0IFRoZSBQdW55Y29kZWQgZG9tYWluIG5hbWUgb3IgZW1haWwgYWRkcmVzcyB0b1xuXHQgKiBjb252ZXJ0IHRvIFVuaWNvZGUuXG5cdCAqIEByZXR1cm5zIHtTdHJpbmd9IFRoZSBVbmljb2RlIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBnaXZlbiBQdW55Y29kZVxuXHQgKiBzdHJpbmcuXG5cdCAqL1xuXHRmdW5jdGlvbiB0b1VuaWNvZGUoaW5wdXQpIHtcblx0XHRyZXR1cm4gbWFwRG9tYWluKGlucHV0LCBmdW5jdGlvbihzdHJpbmcpIHtcblx0XHRcdHJldHVybiByZWdleFB1bnljb2RlLnRlc3Qoc3RyaW5nKVxuXHRcdFx0XHQ/IGRlY29kZShzdHJpbmcuc2xpY2UoNCkudG9Mb3dlckNhc2UoKSlcblx0XHRcdFx0OiBzdHJpbmc7XG5cdFx0fSk7XG5cdH1cblxuXHQvKipcblx0ICogQ29udmVydHMgYSBVbmljb2RlIHN0cmluZyByZXByZXNlbnRpbmcgYSBkb21haW4gbmFtZSBvciBhbiBlbWFpbCBhZGRyZXNzIHRvXG5cdCAqIFB1bnljb2RlLiBPbmx5IHRoZSBub24tQVNDSUkgcGFydHMgb2YgdGhlIGRvbWFpbiBuYW1lIHdpbGwgYmUgY29udmVydGVkLFxuXHQgKiBpLmUuIGl0IGRvZXNuJ3QgbWF0dGVyIGlmIHlvdSBjYWxsIGl0IHdpdGggYSBkb21haW4gdGhhdCdzIGFscmVhZHkgaW5cblx0ICogQVNDSUkuXG5cdCAqIEBtZW1iZXJPZiBwdW55Y29kZVxuXHQgKiBAcGFyYW0ge1N0cmluZ30gaW5wdXQgVGhlIGRvbWFpbiBuYW1lIG9yIGVtYWlsIGFkZHJlc3MgdG8gY29udmVydCwgYXMgYVxuXHQgKiBVbmljb2RlIHN0cmluZy5cblx0ICogQHJldHVybnMge1N0cmluZ30gVGhlIFB1bnljb2RlIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBnaXZlbiBkb21haW4gbmFtZSBvclxuXHQgKiBlbWFpbCBhZGRyZXNzLlxuXHQgKi9cblx0ZnVuY3Rpb24gdG9BU0NJSShpbnB1dCkge1xuXHRcdHJldHVybiBtYXBEb21haW4oaW5wdXQsIGZ1bmN0aW9uKHN0cmluZykge1xuXHRcdFx0cmV0dXJuIHJlZ2V4Tm9uQVNDSUkudGVzdChzdHJpbmcpXG5cdFx0XHRcdD8gJ3huLS0nICsgZW5jb2RlKHN0cmluZylcblx0XHRcdFx0OiBzdHJpbmc7XG5cdFx0fSk7XG5cdH1cblxuXHQvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cblxuXHQvKiogRGVmaW5lIHRoZSBwdWJsaWMgQVBJICovXG5cdHB1bnljb2RlID0ge1xuXHRcdC8qKlxuXHRcdCAqIEEgc3RyaW5nIHJlcHJlc2VudGluZyB0aGUgY3VycmVudCBQdW55Y29kZS5qcyB2ZXJzaW9uIG51bWJlci5cblx0XHQgKiBAbWVtYmVyT2YgcHVueWNvZGVcblx0XHQgKiBAdHlwZSBTdHJpbmdcblx0XHQgKi9cblx0XHQndmVyc2lvbic6ICcxLjMuMicsXG5cdFx0LyoqXG5cdFx0ICogQW4gb2JqZWN0IG9mIG1ldGhvZHMgdG8gY29udmVydCBmcm9tIEphdmFTY3JpcHQncyBpbnRlcm5hbCBjaGFyYWN0ZXJcblx0XHQgKiByZXByZXNlbnRhdGlvbiAoVUNTLTIpIHRvIFVuaWNvZGUgY29kZSBwb2ludHMsIGFuZCBiYWNrLlxuXHRcdCAqIEBzZWUgPGh0dHBzOi8vbWF0aGlhc2J5bmVucy5iZS9ub3Rlcy9qYXZhc2NyaXB0LWVuY29kaW5nPlxuXHRcdCAqIEBtZW1iZXJPZiBwdW55Y29kZVxuXHRcdCAqIEB0eXBlIE9iamVjdFxuXHRcdCAqL1xuXHRcdCd1Y3MyJzoge1xuXHRcdFx0J2RlY29kZSc6IHVjczJkZWNvZGUsXG5cdFx0XHQnZW5jb2RlJzogdWNzMmVuY29kZVxuXHRcdH0sXG5cdFx0J2RlY29kZSc6IGRlY29kZSxcblx0XHQnZW5jb2RlJzogZW5jb2RlLFxuXHRcdCd0b0FTQ0lJJzogdG9BU0NJSSxcblx0XHQndG9Vbmljb2RlJzogdG9Vbmljb2RlXG5cdH07XG5cblx0LyoqIEV4cG9zZSBgcHVueWNvZGVgICovXG5cdC8vIFNvbWUgQU1EIGJ1aWxkIG9wdGltaXplcnMsIGxpa2Ugci5qcywgY2hlY2sgZm9yIHNwZWNpZmljIGNvbmRpdGlvbiBwYXR0ZXJuc1xuXHQvLyBsaWtlIHRoZSBmb2xsb3dpbmc6XG5cdGlmIChcblx0XHR0eXBlb2YgZGVmaW5lID09ICdmdW5jdGlvbicgJiZcblx0XHR0eXBlb2YgZGVmaW5lLmFtZCA9PSAnb2JqZWN0JyAmJlxuXHRcdGRlZmluZS5hbWRcblx0KSB7XG5cdFx0ZGVmaW5lKCdwdW55Y29kZScsIGZ1bmN0aW9uKCkge1xuXHRcdFx0cmV0dXJuIHB1bnljb2RlO1xuXHRcdH0pO1xuXHR9IGVsc2UgaWYgKGZyZWVFeHBvcnRzICYmIGZyZWVNb2R1bGUpIHtcblx0XHRpZiAobW9kdWxlLmV4cG9ydHMgPT0gZnJlZUV4cG9ydHMpIHtcblx0XHRcdC8vIGluIE5vZGUuanMsIGlvLmpzLCBvciBSaW5nb0pTIHYwLjguMCtcblx0XHRcdGZyZWVNb2R1bGUuZXhwb3J0cyA9IHB1bnljb2RlO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHQvLyBpbiBOYXJ3aGFsIG9yIFJpbmdvSlMgdjAuNy4wLVxuXHRcdFx0Zm9yIChrZXkgaW4gcHVueWNvZGUpIHtcblx0XHRcdFx0cHVueWNvZGUuaGFzT3duUHJvcGVydHkoa2V5KSAmJiAoZnJlZUV4cG9ydHNba2V5XSA9IHB1bnljb2RlW2tleV0pO1xuXHRcdFx0fVxuXHRcdH1cblx0fSBlbHNlIHtcblx0XHQvLyBpbiBSaGlubyBvciBhIHdlYiBicm93c2VyXG5cdFx0cm9vdC5wdW55Y29kZSA9IHB1bnljb2RlO1xuXHR9XG5cbn0odGhpcykpO1xuIiwiLy8gQ29weXJpZ2h0IEpveWVudCwgSW5jLiBhbmQgb3RoZXIgTm9kZSBjb250cmlidXRvcnMuXG4vL1xuLy8gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGFcbi8vIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGVcbi8vIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZ1xuLy8gd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLFxuLy8gZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdFxuLy8gcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlXG4vLyBmb2xsb3dpbmcgY29uZGl0aW9uczpcbi8vXG4vLyBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZFxuLy8gaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4vL1xuLy8gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTU1xuLy8gT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRlxuLy8gTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTlxuLy8gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sXG4vLyBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1Jcbi8vIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEVcbi8vIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG5cbid1c2Ugc3RyaWN0JztcblxuLy8gSWYgb2JqLmhhc093blByb3BlcnR5IGhhcyBiZWVuIG92ZXJyaWRkZW4sIHRoZW4gY2FsbGluZ1xuLy8gb2JqLmhhc093blByb3BlcnR5KHByb3ApIHdpbGwgYnJlYWsuXG4vLyBTZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9qb3llbnQvbm9kZS9pc3N1ZXMvMTcwN1xuZnVuY3Rpb24gaGFzT3duUHJvcGVydHkob2JqLCBwcm9wKSB7XG4gIHJldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqLCBwcm9wKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihxcywgc2VwLCBlcSwgb3B0aW9ucykge1xuICBzZXAgPSBzZXAgfHwgJyYnO1xuICBlcSA9IGVxIHx8ICc9JztcbiAgdmFyIG9iaiA9IHt9O1xuXG4gIGlmICh0eXBlb2YgcXMgIT09ICdzdHJpbmcnIHx8IHFzLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiBvYmo7XG4gIH1cblxuICB2YXIgcmVnZXhwID0gL1xcKy9nO1xuICBxcyA9IHFzLnNwbGl0KHNlcCk7XG5cbiAgdmFyIG1heEtleXMgPSAxMDAwO1xuICBpZiAob3B0aW9ucyAmJiB0eXBlb2Ygb3B0aW9ucy5tYXhLZXlzID09PSAnbnVtYmVyJykge1xuICAgIG1heEtleXMgPSBvcHRpb25zLm1heEtleXM7XG4gIH1cblxuICB2YXIgbGVuID0gcXMubGVuZ3RoO1xuICAvLyBtYXhLZXlzIDw9IDAgbWVhbnMgdGhhdCB3ZSBzaG91bGQgbm90IGxpbWl0IGtleXMgY291bnRcbiAgaWYgKG1heEtleXMgPiAwICYmIGxlbiA+IG1heEtleXMpIHtcbiAgICBsZW4gPSBtYXhLZXlzO1xuICB9XG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47ICsraSkge1xuICAgIHZhciB4ID0gcXNbaV0ucmVwbGFjZShyZWdleHAsICclMjAnKSxcbiAgICAgICAgaWR4ID0geC5pbmRleE9mKGVxKSxcbiAgICAgICAga3N0ciwgdnN0ciwgaywgdjtcblxuICAgIGlmIChpZHggPj0gMCkge1xuICAgICAga3N0ciA9IHguc3Vic3RyKDAsIGlkeCk7XG4gICAgICB2c3RyID0geC5zdWJzdHIoaWR4ICsgMSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGtzdHIgPSB4O1xuICAgICAgdnN0ciA9ICcnO1xuICAgIH1cblxuICAgIGsgPSBkZWNvZGVVUklDb21wb25lbnQoa3N0cik7XG4gICAgdiA9IGRlY29kZVVSSUNvbXBvbmVudCh2c3RyKTtcblxuICAgIGlmICghaGFzT3duUHJvcGVydHkob2JqLCBrKSkge1xuICAgICAgb2JqW2tdID0gdjtcbiAgICB9IGVsc2UgaWYgKGlzQXJyYXkob2JqW2tdKSkge1xuICAgICAgb2JqW2tdLnB1c2godik7XG4gICAgfSBlbHNlIHtcbiAgICAgIG9ialtrXSA9IFtvYmpba10sIHZdO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBvYmo7XG59O1xuXG52YXIgaXNBcnJheSA9IEFycmF5LmlzQXJyYXkgfHwgZnVuY3Rpb24gKHhzKSB7XG4gIHJldHVybiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoeHMpID09PSAnW29iamVjdCBBcnJheV0nO1xufTtcbiIsIi8vIENvcHlyaWdodCBKb3llbnQsIEluYy4gYW5kIG90aGVyIE5vZGUgY29udHJpYnV0b3JzLlxuLy9cbi8vIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhXG4vLyBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlXG4vLyBcIlNvZnR3YXJlXCIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmdcbi8vIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCxcbi8vIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXRcbi8vIHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZVxuLy8gZm9sbG93aW5nIGNvbmRpdGlvbnM6XG4vL1xuLy8gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWRcbi8vIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuLy9cbi8vIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1Ncbi8vIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0Zcbi8vIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU5cbi8vIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLFxuLy8gREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SXG4vLyBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFXG4vLyBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLlxuXG4ndXNlIHN0cmljdCc7XG5cbnZhciBzdHJpbmdpZnlQcmltaXRpdmUgPSBmdW5jdGlvbih2KSB7XG4gIHN3aXRjaCAodHlwZW9mIHYpIHtcbiAgICBjYXNlICdzdHJpbmcnOlxuICAgICAgcmV0dXJuIHY7XG5cbiAgICBjYXNlICdib29sZWFuJzpcbiAgICAgIHJldHVybiB2ID8gJ3RydWUnIDogJ2ZhbHNlJztcblxuICAgIGNhc2UgJ251bWJlcic6XG4gICAgICByZXR1cm4gaXNGaW5pdGUodikgPyB2IDogJyc7XG5cbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuICcnO1xuICB9XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKG9iaiwgc2VwLCBlcSwgbmFtZSkge1xuICBzZXAgPSBzZXAgfHwgJyYnO1xuICBlcSA9IGVxIHx8ICc9JztcbiAgaWYgKG9iaiA9PT0gbnVsbCkge1xuICAgIG9iaiA9IHVuZGVmaW5lZDtcbiAgfVxuXG4gIGlmICh0eXBlb2Ygb2JqID09PSAnb2JqZWN0Jykge1xuICAgIHJldHVybiBtYXAob2JqZWN0S2V5cyhvYmopLCBmdW5jdGlvbihrKSB7XG4gICAgICB2YXIga3MgPSBlbmNvZGVVUklDb21wb25lbnQoc3RyaW5naWZ5UHJpbWl0aXZlKGspKSArIGVxO1xuICAgICAgaWYgKGlzQXJyYXkob2JqW2tdKSkge1xuICAgICAgICByZXR1cm4gbWFwKG9ialtrXSwgZnVuY3Rpb24odikge1xuICAgICAgICAgIHJldHVybiBrcyArIGVuY29kZVVSSUNvbXBvbmVudChzdHJpbmdpZnlQcmltaXRpdmUodikpO1xuICAgICAgICB9KS5qb2luKHNlcCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4ga3MgKyBlbmNvZGVVUklDb21wb25lbnQoc3RyaW5naWZ5UHJpbWl0aXZlKG9ialtrXSkpO1xuICAgICAgfVxuICAgIH0pLmpvaW4oc2VwKTtcblxuICB9XG5cbiAgaWYgKCFuYW1lKSByZXR1cm4gJyc7XG4gIHJldHVybiBlbmNvZGVVUklDb21wb25lbnQoc3RyaW5naWZ5UHJpbWl0aXZlKG5hbWUpKSArIGVxICtcbiAgICAgICAgIGVuY29kZVVSSUNvbXBvbmVudChzdHJpbmdpZnlQcmltaXRpdmUob2JqKSk7XG59O1xuXG52YXIgaXNBcnJheSA9IEFycmF5LmlzQXJyYXkgfHwgZnVuY3Rpb24gKHhzKSB7XG4gIHJldHVybiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoeHMpID09PSAnW29iamVjdCBBcnJheV0nO1xufTtcblxuZnVuY3Rpb24gbWFwICh4cywgZikge1xuICBpZiAoeHMubWFwKSByZXR1cm4geHMubWFwKGYpO1xuICB2YXIgcmVzID0gW107XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgeHMubGVuZ3RoOyBpKyspIHtcbiAgICByZXMucHVzaChmKHhzW2ldLCBpKSk7XG4gIH1cbiAgcmV0dXJuIHJlcztcbn1cblxudmFyIG9iamVjdEtleXMgPSBPYmplY3Qua2V5cyB8fCBmdW5jdGlvbiAob2JqKSB7XG4gIHZhciByZXMgPSBbXTtcbiAgZm9yICh2YXIga2V5IGluIG9iaikge1xuICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqLCBrZXkpKSByZXMucHVzaChrZXkpO1xuICB9XG4gIHJldHVybiByZXM7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG5leHBvcnRzLmRlY29kZSA9IGV4cG9ydHMucGFyc2UgPSByZXF1aXJlKCcuL2RlY29kZScpO1xuZXhwb3J0cy5lbmNvZGUgPSBleHBvcnRzLnN0cmluZ2lmeSA9IHJlcXVpcmUoJy4vZW5jb2RlJyk7XG4iLCIvLyBDb3B5cmlnaHQgSm95ZW50LCBJbmMuIGFuZCBvdGhlciBOb2RlIGNvbnRyaWJ1dG9ycy5cbi8vXG4vLyBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYVxuLy8gY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZVxuLy8gXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nXG4vLyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsXG4vLyBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0XG4vLyBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGVcbi8vIGZvbGxvd2luZyBjb25kaXRpb25zOlxuLy9cbi8vIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkXG4vLyBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbi8vXG4vLyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTXG4vLyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GXG4vLyBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOXG4vLyBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSxcbi8vIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUlxuLy8gT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRVxuLy8gVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cblxudmFyIHB1bnljb2RlID0gcmVxdWlyZSgncHVueWNvZGUnKTtcblxuZXhwb3J0cy5wYXJzZSA9IHVybFBhcnNlO1xuZXhwb3J0cy5yZXNvbHZlID0gdXJsUmVzb2x2ZTtcbmV4cG9ydHMucmVzb2x2ZU9iamVjdCA9IHVybFJlc29sdmVPYmplY3Q7XG5leHBvcnRzLmZvcm1hdCA9IHVybEZvcm1hdDtcblxuZXhwb3J0cy5VcmwgPSBVcmw7XG5cbmZ1bmN0aW9uIFVybCgpIHtcbiAgdGhpcy5wcm90b2NvbCA9IG51bGw7XG4gIHRoaXMuc2xhc2hlcyA9IG51bGw7XG4gIHRoaXMuYXV0aCA9IG51bGw7XG4gIHRoaXMuaG9zdCA9IG51bGw7XG4gIHRoaXMucG9ydCA9IG51bGw7XG4gIHRoaXMuaG9zdG5hbWUgPSBudWxsO1xuICB0aGlzLmhhc2ggPSBudWxsO1xuICB0aGlzLnNlYXJjaCA9IG51bGw7XG4gIHRoaXMucXVlcnkgPSBudWxsO1xuICB0aGlzLnBhdGhuYW1lID0gbnVsbDtcbiAgdGhpcy5wYXRoID0gbnVsbDtcbiAgdGhpcy5ocmVmID0gbnVsbDtcbn1cblxuLy8gUmVmZXJlbmNlOiBSRkMgMzk4NiwgUkZDIDE4MDgsIFJGQyAyMzk2XG5cbi8vIGRlZmluZSB0aGVzZSBoZXJlIHNvIGF0IGxlYXN0IHRoZXkgb25seSBoYXZlIHRvIGJlXG4vLyBjb21waWxlZCBvbmNlIG9uIHRoZSBmaXJzdCBtb2R1bGUgbG9hZC5cbnZhciBwcm90b2NvbFBhdHRlcm4gPSAvXihbYS16MC05ListXSs6KS9pLFxuICAgIHBvcnRQYXR0ZXJuID0gLzpbMC05XSokLyxcblxuICAgIC8vIFJGQyAyMzk2OiBjaGFyYWN0ZXJzIHJlc2VydmVkIGZvciBkZWxpbWl0aW5nIFVSTHMuXG4gICAgLy8gV2UgYWN0dWFsbHkganVzdCBhdXRvLWVzY2FwZSB0aGVzZS5cbiAgICBkZWxpbXMgPSBbJzwnLCAnPicsICdcIicsICdgJywgJyAnLCAnXFxyJywgJ1xcbicsICdcXHQnXSxcblxuICAgIC8vIFJGQyAyMzk2OiBjaGFyYWN0ZXJzIG5vdCBhbGxvd2VkIGZvciB2YXJpb3VzIHJlYXNvbnMuXG4gICAgdW53aXNlID0gWyd7JywgJ30nLCAnfCcsICdcXFxcJywgJ14nLCAnYCddLmNvbmNhdChkZWxpbXMpLFxuXG4gICAgLy8gQWxsb3dlZCBieSBSRkNzLCBidXQgY2F1c2Ugb2YgWFNTIGF0dGFja3MuICBBbHdheXMgZXNjYXBlIHRoZXNlLlxuICAgIGF1dG9Fc2NhcGUgPSBbJ1xcJyddLmNvbmNhdCh1bndpc2UpLFxuICAgIC8vIENoYXJhY3RlcnMgdGhhdCBhcmUgbmV2ZXIgZXZlciBhbGxvd2VkIGluIGEgaG9zdG5hbWUuXG4gICAgLy8gTm90ZSB0aGF0IGFueSBpbnZhbGlkIGNoYXJzIGFyZSBhbHNvIGhhbmRsZWQsIGJ1dCB0aGVzZVxuICAgIC8vIGFyZSB0aGUgb25lcyB0aGF0IGFyZSAqZXhwZWN0ZWQqIHRvIGJlIHNlZW4sIHNvIHdlIGZhc3QtcGF0aFxuICAgIC8vIHRoZW0uXG4gICAgbm9uSG9zdENoYXJzID0gWyclJywgJy8nLCAnPycsICc7JywgJyMnXS5jb25jYXQoYXV0b0VzY2FwZSksXG4gICAgaG9zdEVuZGluZ0NoYXJzID0gWycvJywgJz8nLCAnIyddLFxuICAgIGhvc3RuYW1lTWF4TGVuID0gMjU1LFxuICAgIGhvc3RuYW1lUGFydFBhdHRlcm4gPSAvXlthLXowLTlBLVpfLV17MCw2M30kLyxcbiAgICBob3N0bmFtZVBhcnRTdGFydCA9IC9eKFthLXowLTlBLVpfLV17MCw2M30pKC4qKSQvLFxuICAgIC8vIHByb3RvY29scyB0aGF0IGNhbiBhbGxvdyBcInVuc2FmZVwiIGFuZCBcInVud2lzZVwiIGNoYXJzLlxuICAgIHVuc2FmZVByb3RvY29sID0ge1xuICAgICAgJ2phdmFzY3JpcHQnOiB0cnVlLFxuICAgICAgJ2phdmFzY3JpcHQ6JzogdHJ1ZVxuICAgIH0sXG4gICAgLy8gcHJvdG9jb2xzIHRoYXQgbmV2ZXIgaGF2ZSBhIGhvc3RuYW1lLlxuICAgIGhvc3RsZXNzUHJvdG9jb2wgPSB7XG4gICAgICAnamF2YXNjcmlwdCc6IHRydWUsXG4gICAgICAnamF2YXNjcmlwdDonOiB0cnVlXG4gICAgfSxcbiAgICAvLyBwcm90b2NvbHMgdGhhdCBhbHdheXMgY29udGFpbiBhIC8vIGJpdC5cbiAgICBzbGFzaGVkUHJvdG9jb2wgPSB7XG4gICAgICAnaHR0cCc6IHRydWUsXG4gICAgICAnaHR0cHMnOiB0cnVlLFxuICAgICAgJ2Z0cCc6IHRydWUsXG4gICAgICAnZ29waGVyJzogdHJ1ZSxcbiAgICAgICdmaWxlJzogdHJ1ZSxcbiAgICAgICdodHRwOic6IHRydWUsXG4gICAgICAnaHR0cHM6JzogdHJ1ZSxcbiAgICAgICdmdHA6JzogdHJ1ZSxcbiAgICAgICdnb3BoZXI6JzogdHJ1ZSxcbiAgICAgICdmaWxlOic6IHRydWVcbiAgICB9LFxuICAgIHF1ZXJ5c3RyaW5nID0gcmVxdWlyZSgncXVlcnlzdHJpbmcnKTtcblxuZnVuY3Rpb24gdXJsUGFyc2UodXJsLCBwYXJzZVF1ZXJ5U3RyaW5nLCBzbGFzaGVzRGVub3RlSG9zdCkge1xuICBpZiAodXJsICYmIGlzT2JqZWN0KHVybCkgJiYgdXJsIGluc3RhbmNlb2YgVXJsKSByZXR1cm4gdXJsO1xuXG4gIHZhciB1ID0gbmV3IFVybDtcbiAgdS5wYXJzZSh1cmwsIHBhcnNlUXVlcnlTdHJpbmcsIHNsYXNoZXNEZW5vdGVIb3N0KTtcbiAgcmV0dXJuIHU7XG59XG5cblVybC5wcm90b3R5cGUucGFyc2UgPSBmdW5jdGlvbih1cmwsIHBhcnNlUXVlcnlTdHJpbmcsIHNsYXNoZXNEZW5vdGVIb3N0KSB7XG4gIGlmICghaXNTdHJpbmcodXJsKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJQYXJhbWV0ZXIgJ3VybCcgbXVzdCBiZSBhIHN0cmluZywgbm90IFwiICsgdHlwZW9mIHVybCk7XG4gIH1cblxuICB2YXIgcmVzdCA9IHVybDtcblxuICAvLyB0cmltIGJlZm9yZSBwcm9jZWVkaW5nLlxuICAvLyBUaGlzIGlzIHRvIHN1cHBvcnQgcGFyc2Ugc3R1ZmYgbGlrZSBcIiAgaHR0cDovL2Zvby5jb20gIFxcblwiXG4gIHJlc3QgPSByZXN0LnRyaW0oKTtcblxuICB2YXIgcHJvdG8gPSBwcm90b2NvbFBhdHRlcm4uZXhlYyhyZXN0KTtcbiAgaWYgKHByb3RvKSB7XG4gICAgcHJvdG8gPSBwcm90b1swXTtcbiAgICB2YXIgbG93ZXJQcm90byA9IHByb3RvLnRvTG93ZXJDYXNlKCk7XG4gICAgdGhpcy5wcm90b2NvbCA9IGxvd2VyUHJvdG87XG4gICAgcmVzdCA9IHJlc3Quc3Vic3RyKHByb3RvLmxlbmd0aCk7XG4gIH1cblxuICAvLyBmaWd1cmUgb3V0IGlmIGl0J3MgZ290IGEgaG9zdFxuICAvLyB1c2VyQHNlcnZlciBpcyAqYWx3YXlzKiBpbnRlcnByZXRlZCBhcyBhIGhvc3RuYW1lLCBhbmQgdXJsXG4gIC8vIHJlc29sdXRpb24gd2lsbCB0cmVhdCAvL2Zvby9iYXIgYXMgaG9zdD1mb28scGF0aD1iYXIgYmVjYXVzZSB0aGF0J3NcbiAgLy8gaG93IHRoZSBicm93c2VyIHJlc29sdmVzIHJlbGF0aXZlIFVSTHMuXG4gIGlmIChzbGFzaGVzRGVub3RlSG9zdCB8fCBwcm90byB8fCByZXN0Lm1hdGNoKC9eXFwvXFwvW15AXFwvXStAW15AXFwvXSsvKSkge1xuICAgIHZhciBzbGFzaGVzID0gcmVzdC5zdWJzdHIoMCwgMikgPT09ICcvLyc7XG4gICAgaWYgKHNsYXNoZXMgJiYgIShwcm90byAmJiBob3N0bGVzc1Byb3RvY29sW3Byb3RvXSkpIHtcbiAgICAgIHJlc3QgPSByZXN0LnN1YnN0cigyKTtcbiAgICAgIHRoaXMuc2xhc2hlcyA9IHRydWU7XG4gICAgfVxuICB9XG5cbiAgaWYgKCFob3N0bGVzc1Byb3RvY29sW3Byb3RvXSAmJlxuICAgICAgKHNsYXNoZXMgfHwgKHByb3RvICYmICFzbGFzaGVkUHJvdG9jb2xbcHJvdG9dKSkpIHtcblxuICAgIC8vIHRoZXJlJ3MgYSBob3N0bmFtZS5cbiAgICAvLyB0aGUgZmlyc3QgaW5zdGFuY2Ugb2YgLywgPywgOywgb3IgIyBlbmRzIHRoZSBob3N0LlxuICAgIC8vXG4gICAgLy8gSWYgdGhlcmUgaXMgYW4gQCBpbiB0aGUgaG9zdG5hbWUsIHRoZW4gbm9uLWhvc3QgY2hhcnMgKmFyZSogYWxsb3dlZFxuICAgIC8vIHRvIHRoZSBsZWZ0IG9mIHRoZSBsYXN0IEAgc2lnbiwgdW5sZXNzIHNvbWUgaG9zdC1lbmRpbmcgY2hhcmFjdGVyXG4gICAgLy8gY29tZXMgKmJlZm9yZSogdGhlIEAtc2lnbi5cbiAgICAvLyBVUkxzIGFyZSBvYm5veGlvdXMuXG4gICAgLy9cbiAgICAvLyBleDpcbiAgICAvLyBodHRwOi8vYUBiQGMvID0+IHVzZXI6YUBiIGhvc3Q6Y1xuICAgIC8vIGh0dHA6Ly9hQGI/QGMgPT4gdXNlcjphIGhvc3Q6YyBwYXRoOi8/QGNcblxuICAgIC8vIHYwLjEyIFRPRE8oaXNhYWNzKTogVGhpcyBpcyBub3QgcXVpdGUgaG93IENocm9tZSBkb2VzIHRoaW5ncy5cbiAgICAvLyBSZXZpZXcgb3VyIHRlc3QgY2FzZSBhZ2FpbnN0IGJyb3dzZXJzIG1vcmUgY29tcHJlaGVuc2l2ZWx5LlxuXG4gICAgLy8gZmluZCB0aGUgZmlyc3QgaW5zdGFuY2Ugb2YgYW55IGhvc3RFbmRpbmdDaGFyc1xuICAgIHZhciBob3N0RW5kID0gLTE7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBob3N0RW5kaW5nQ2hhcnMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBoZWMgPSByZXN0LmluZGV4T2YoaG9zdEVuZGluZ0NoYXJzW2ldKTtcbiAgICAgIGlmIChoZWMgIT09IC0xICYmIChob3N0RW5kID09PSAtMSB8fCBoZWMgPCBob3N0RW5kKSlcbiAgICAgICAgaG9zdEVuZCA9IGhlYztcbiAgICB9XG5cbiAgICAvLyBhdCB0aGlzIHBvaW50LCBlaXRoZXIgd2UgaGF2ZSBhbiBleHBsaWNpdCBwb2ludCB3aGVyZSB0aGVcbiAgICAvLyBhdXRoIHBvcnRpb24gY2Fubm90IGdvIHBhc3QsIG9yIHRoZSBsYXN0IEAgY2hhciBpcyB0aGUgZGVjaWRlci5cbiAgICB2YXIgYXV0aCwgYXRTaWduO1xuICAgIGlmIChob3N0RW5kID09PSAtMSkge1xuICAgICAgLy8gYXRTaWduIGNhbiBiZSBhbnl3aGVyZS5cbiAgICAgIGF0U2lnbiA9IHJlc3QubGFzdEluZGV4T2YoJ0AnKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gYXRTaWduIG11c3QgYmUgaW4gYXV0aCBwb3J0aW9uLlxuICAgICAgLy8gaHR0cDovL2FAYi9jQGQgPT4gaG9zdDpiIGF1dGg6YSBwYXRoOi9jQGRcbiAgICAgIGF0U2lnbiA9IHJlc3QubGFzdEluZGV4T2YoJ0AnLCBob3N0RW5kKTtcbiAgICB9XG5cbiAgICAvLyBOb3cgd2UgaGF2ZSBhIHBvcnRpb24gd2hpY2ggaXMgZGVmaW5pdGVseSB0aGUgYXV0aC5cbiAgICAvLyBQdWxsIHRoYXQgb2ZmLlxuICAgIGlmIChhdFNpZ24gIT09IC0xKSB7XG4gICAgICBhdXRoID0gcmVzdC5zbGljZSgwLCBhdFNpZ24pO1xuICAgICAgcmVzdCA9IHJlc3Quc2xpY2UoYXRTaWduICsgMSk7XG4gICAgICB0aGlzLmF1dGggPSBkZWNvZGVVUklDb21wb25lbnQoYXV0aCk7XG4gICAgfVxuXG4gICAgLy8gdGhlIGhvc3QgaXMgdGhlIHJlbWFpbmluZyB0byB0aGUgbGVmdCBvZiB0aGUgZmlyc3Qgbm9uLWhvc3QgY2hhclxuICAgIGhvc3RFbmQgPSAtMTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG5vbkhvc3RDaGFycy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGhlYyA9IHJlc3QuaW5kZXhPZihub25Ib3N0Q2hhcnNbaV0pO1xuICAgICAgaWYgKGhlYyAhPT0gLTEgJiYgKGhvc3RFbmQgPT09IC0xIHx8IGhlYyA8IGhvc3RFbmQpKVxuICAgICAgICBob3N0RW5kID0gaGVjO1xuICAgIH1cbiAgICAvLyBpZiB3ZSBzdGlsbCBoYXZlIG5vdCBoaXQgaXQsIHRoZW4gdGhlIGVudGlyZSB0aGluZyBpcyBhIGhvc3QuXG4gICAgaWYgKGhvc3RFbmQgPT09IC0xKVxuICAgICAgaG9zdEVuZCA9IHJlc3QubGVuZ3RoO1xuXG4gICAgdGhpcy5ob3N0ID0gcmVzdC5zbGljZSgwLCBob3N0RW5kKTtcbiAgICByZXN0ID0gcmVzdC5zbGljZShob3N0RW5kKTtcblxuICAgIC8vIHB1bGwgb3V0IHBvcnQuXG4gICAgdGhpcy5wYXJzZUhvc3QoKTtcblxuICAgIC8vIHdlJ3ZlIGluZGljYXRlZCB0aGF0IHRoZXJlIGlzIGEgaG9zdG5hbWUsXG4gICAgLy8gc28gZXZlbiBpZiBpdCdzIGVtcHR5LCBpdCBoYXMgdG8gYmUgcHJlc2VudC5cbiAgICB0aGlzLmhvc3RuYW1lID0gdGhpcy5ob3N0bmFtZSB8fCAnJztcblxuICAgIC8vIGlmIGhvc3RuYW1lIGJlZ2lucyB3aXRoIFsgYW5kIGVuZHMgd2l0aCBdXG4gICAgLy8gYXNzdW1lIHRoYXQgaXQncyBhbiBJUHY2IGFkZHJlc3MuXG4gICAgdmFyIGlwdjZIb3N0bmFtZSA9IHRoaXMuaG9zdG5hbWVbMF0gPT09ICdbJyAmJlxuICAgICAgICB0aGlzLmhvc3RuYW1lW3RoaXMuaG9zdG5hbWUubGVuZ3RoIC0gMV0gPT09ICddJztcblxuICAgIC8vIHZhbGlkYXRlIGEgbGl0dGxlLlxuICAgIGlmICghaXB2Nkhvc3RuYW1lKSB7XG4gICAgICB2YXIgaG9zdHBhcnRzID0gdGhpcy5ob3N0bmFtZS5zcGxpdCgvXFwuLyk7XG4gICAgICBmb3IgKHZhciBpID0gMCwgbCA9IGhvc3RwYXJ0cy5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICAgICAgdmFyIHBhcnQgPSBob3N0cGFydHNbaV07XG4gICAgICAgIGlmICghcGFydCkgY29udGludWU7XG4gICAgICAgIGlmICghcGFydC5tYXRjaChob3N0bmFtZVBhcnRQYXR0ZXJuKSkge1xuICAgICAgICAgIHZhciBuZXdwYXJ0ID0gJyc7XG4gICAgICAgICAgZm9yICh2YXIgaiA9IDAsIGsgPSBwYXJ0Lmxlbmd0aDsgaiA8IGs7IGorKykge1xuICAgICAgICAgICAgaWYgKHBhcnQuY2hhckNvZGVBdChqKSA+IDEyNykge1xuICAgICAgICAgICAgICAvLyB3ZSByZXBsYWNlIG5vbi1BU0NJSSBjaGFyIHdpdGggYSB0ZW1wb3JhcnkgcGxhY2Vob2xkZXJcbiAgICAgICAgICAgICAgLy8gd2UgbmVlZCB0aGlzIHRvIG1ha2Ugc3VyZSBzaXplIG9mIGhvc3RuYW1lIGlzIG5vdFxuICAgICAgICAgICAgICAvLyBicm9rZW4gYnkgcmVwbGFjaW5nIG5vbi1BU0NJSSBieSBub3RoaW5nXG4gICAgICAgICAgICAgIG5ld3BhcnQgKz0gJ3gnO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgbmV3cGFydCArPSBwYXJ0W2pdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICAvLyB3ZSB0ZXN0IGFnYWluIHdpdGggQVNDSUkgY2hhciBvbmx5XG4gICAgICAgICAgaWYgKCFuZXdwYXJ0Lm1hdGNoKGhvc3RuYW1lUGFydFBhdHRlcm4pKSB7XG4gICAgICAgICAgICB2YXIgdmFsaWRQYXJ0cyA9IGhvc3RwYXJ0cy5zbGljZSgwLCBpKTtcbiAgICAgICAgICAgIHZhciBub3RIb3N0ID0gaG9zdHBhcnRzLnNsaWNlKGkgKyAxKTtcbiAgICAgICAgICAgIHZhciBiaXQgPSBwYXJ0Lm1hdGNoKGhvc3RuYW1lUGFydFN0YXJ0KTtcbiAgICAgICAgICAgIGlmIChiaXQpIHtcbiAgICAgICAgICAgICAgdmFsaWRQYXJ0cy5wdXNoKGJpdFsxXSk7XG4gICAgICAgICAgICAgIG5vdEhvc3QudW5zaGlmdChiaXRbMl0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKG5vdEhvc3QubGVuZ3RoKSB7XG4gICAgICAgICAgICAgIHJlc3QgPSAnLycgKyBub3RIb3N0LmpvaW4oJy4nKSArIHJlc3Q7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmhvc3RuYW1lID0gdmFsaWRQYXJ0cy5qb2luKCcuJyk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodGhpcy5ob3N0bmFtZS5sZW5ndGggPiBob3N0bmFtZU1heExlbikge1xuICAgICAgdGhpcy5ob3N0bmFtZSA9ICcnO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBob3N0bmFtZXMgYXJlIGFsd2F5cyBsb3dlciBjYXNlLlxuICAgICAgdGhpcy5ob3N0bmFtZSA9IHRoaXMuaG9zdG5hbWUudG9Mb3dlckNhc2UoKTtcbiAgICB9XG5cbiAgICBpZiAoIWlwdjZIb3N0bmFtZSkge1xuICAgICAgLy8gSUROQSBTdXBwb3J0OiBSZXR1cm5zIGEgcHVueSBjb2RlZCByZXByZXNlbnRhdGlvbiBvZiBcImRvbWFpblwiLlxuICAgICAgLy8gSXQgb25seSBjb252ZXJ0cyB0aGUgcGFydCBvZiB0aGUgZG9tYWluIG5hbWUgdGhhdFxuICAgICAgLy8gaGFzIG5vbiBBU0NJSSBjaGFyYWN0ZXJzLiBJLmUuIGl0IGRvc2VudCBtYXR0ZXIgaWZcbiAgICAgIC8vIHlvdSBjYWxsIGl0IHdpdGggYSBkb21haW4gdGhhdCBhbHJlYWR5IGlzIGluIEFTQ0lJLlxuICAgICAgdmFyIGRvbWFpbkFycmF5ID0gdGhpcy5ob3N0bmFtZS5zcGxpdCgnLicpO1xuICAgICAgdmFyIG5ld091dCA9IFtdO1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBkb21haW5BcnJheS5sZW5ndGg7ICsraSkge1xuICAgICAgICB2YXIgcyA9IGRvbWFpbkFycmF5W2ldO1xuICAgICAgICBuZXdPdXQucHVzaChzLm1hdGNoKC9bXkEtWmEtejAtOV8tXS8pID9cbiAgICAgICAgICAgICd4bi0tJyArIHB1bnljb2RlLmVuY29kZShzKSA6IHMpO1xuICAgICAgfVxuICAgICAgdGhpcy5ob3N0bmFtZSA9IG5ld091dC5qb2luKCcuJyk7XG4gICAgfVxuXG4gICAgdmFyIHAgPSB0aGlzLnBvcnQgPyAnOicgKyB0aGlzLnBvcnQgOiAnJztcbiAgICB2YXIgaCA9IHRoaXMuaG9zdG5hbWUgfHwgJyc7XG4gICAgdGhpcy5ob3N0ID0gaCArIHA7XG4gICAgdGhpcy5ocmVmICs9IHRoaXMuaG9zdDtcblxuICAgIC8vIHN0cmlwIFsgYW5kIF0gZnJvbSB0aGUgaG9zdG5hbWVcbiAgICAvLyB0aGUgaG9zdCBmaWVsZCBzdGlsbCByZXRhaW5zIHRoZW0sIHRob3VnaFxuICAgIGlmIChpcHY2SG9zdG5hbWUpIHtcbiAgICAgIHRoaXMuaG9zdG5hbWUgPSB0aGlzLmhvc3RuYW1lLnN1YnN0cigxLCB0aGlzLmhvc3RuYW1lLmxlbmd0aCAtIDIpO1xuICAgICAgaWYgKHJlc3RbMF0gIT09ICcvJykge1xuICAgICAgICByZXN0ID0gJy8nICsgcmVzdDtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyBub3cgcmVzdCBpcyBzZXQgdG8gdGhlIHBvc3QtaG9zdCBzdHVmZi5cbiAgLy8gY2hvcCBvZmYgYW55IGRlbGltIGNoYXJzLlxuICBpZiAoIXVuc2FmZVByb3RvY29sW2xvd2VyUHJvdG9dKSB7XG5cbiAgICAvLyBGaXJzdCwgbWFrZSAxMDAlIHN1cmUgdGhhdCBhbnkgXCJhdXRvRXNjYXBlXCIgY2hhcnMgZ2V0XG4gICAgLy8gZXNjYXBlZCwgZXZlbiBpZiBlbmNvZGVVUklDb21wb25lbnQgZG9lc24ndCB0aGluayB0aGV5XG4gICAgLy8gbmVlZCB0byBiZS5cbiAgICBmb3IgKHZhciBpID0gMCwgbCA9IGF1dG9Fc2NhcGUubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgICB2YXIgYWUgPSBhdXRvRXNjYXBlW2ldO1xuICAgICAgdmFyIGVzYyA9IGVuY29kZVVSSUNvbXBvbmVudChhZSk7XG4gICAgICBpZiAoZXNjID09PSBhZSkge1xuICAgICAgICBlc2MgPSBlc2NhcGUoYWUpO1xuICAgICAgfVxuICAgICAgcmVzdCA9IHJlc3Quc3BsaXQoYWUpLmpvaW4oZXNjKTtcbiAgICB9XG4gIH1cblxuXG4gIC8vIGNob3Agb2ZmIGZyb20gdGhlIHRhaWwgZmlyc3QuXG4gIHZhciBoYXNoID0gcmVzdC5pbmRleE9mKCcjJyk7XG4gIGlmIChoYXNoICE9PSAtMSkge1xuICAgIC8vIGdvdCBhIGZyYWdtZW50IHN0cmluZy5cbiAgICB0aGlzLmhhc2ggPSByZXN0LnN1YnN0cihoYXNoKTtcbiAgICByZXN0ID0gcmVzdC5zbGljZSgwLCBoYXNoKTtcbiAgfVxuICB2YXIgcW0gPSByZXN0LmluZGV4T2YoJz8nKTtcbiAgaWYgKHFtICE9PSAtMSkge1xuICAgIHRoaXMuc2VhcmNoID0gcmVzdC5zdWJzdHIocW0pO1xuICAgIHRoaXMucXVlcnkgPSByZXN0LnN1YnN0cihxbSArIDEpO1xuICAgIGlmIChwYXJzZVF1ZXJ5U3RyaW5nKSB7XG4gICAgICB0aGlzLnF1ZXJ5ID0gcXVlcnlzdHJpbmcucGFyc2UodGhpcy5xdWVyeSk7XG4gICAgfVxuICAgIHJlc3QgPSByZXN0LnNsaWNlKDAsIHFtKTtcbiAgfSBlbHNlIGlmIChwYXJzZVF1ZXJ5U3RyaW5nKSB7XG4gICAgLy8gbm8gcXVlcnkgc3RyaW5nLCBidXQgcGFyc2VRdWVyeVN0cmluZyBzdGlsbCByZXF1ZXN0ZWRcbiAgICB0aGlzLnNlYXJjaCA9ICcnO1xuICAgIHRoaXMucXVlcnkgPSB7fTtcbiAgfVxuICBpZiAocmVzdCkgdGhpcy5wYXRobmFtZSA9IHJlc3Q7XG4gIGlmIChzbGFzaGVkUHJvdG9jb2xbbG93ZXJQcm90b10gJiZcbiAgICAgIHRoaXMuaG9zdG5hbWUgJiYgIXRoaXMucGF0aG5hbWUpIHtcbiAgICB0aGlzLnBhdGhuYW1lID0gJy8nO1xuICB9XG5cbiAgLy90byBzdXBwb3J0IGh0dHAucmVxdWVzdFxuICBpZiAodGhpcy5wYXRobmFtZSB8fCB0aGlzLnNlYXJjaCkge1xuICAgIHZhciBwID0gdGhpcy5wYXRobmFtZSB8fCAnJztcbiAgICB2YXIgcyA9IHRoaXMuc2VhcmNoIHx8ICcnO1xuICAgIHRoaXMucGF0aCA9IHAgKyBzO1xuICB9XG5cbiAgLy8gZmluYWxseSwgcmVjb25zdHJ1Y3QgdGhlIGhyZWYgYmFzZWQgb24gd2hhdCBoYXMgYmVlbiB2YWxpZGF0ZWQuXG4gIHRoaXMuaHJlZiA9IHRoaXMuZm9ybWF0KCk7XG4gIHJldHVybiB0aGlzO1xufTtcblxuLy8gZm9ybWF0IGEgcGFyc2VkIG9iamVjdCBpbnRvIGEgdXJsIHN0cmluZ1xuZnVuY3Rpb24gdXJsRm9ybWF0KG9iaikge1xuICAvLyBlbnN1cmUgaXQncyBhbiBvYmplY3QsIGFuZCBub3QgYSBzdHJpbmcgdXJsLlxuICAvLyBJZiBpdCdzIGFuIG9iaiwgdGhpcyBpcyBhIG5vLW9wLlxuICAvLyB0aGlzIHdheSwgeW91IGNhbiBjYWxsIHVybF9mb3JtYXQoKSBvbiBzdHJpbmdzXG4gIC8vIHRvIGNsZWFuIHVwIHBvdGVudGlhbGx5IHdvbmt5IHVybHMuXG4gIGlmIChpc1N0cmluZyhvYmopKSBvYmogPSB1cmxQYXJzZShvYmopO1xuICBpZiAoIShvYmogaW5zdGFuY2VvZiBVcmwpKSByZXR1cm4gVXJsLnByb3RvdHlwZS5mb3JtYXQuY2FsbChvYmopO1xuICByZXR1cm4gb2JqLmZvcm1hdCgpO1xufVxuXG5VcmwucHJvdG90eXBlLmZvcm1hdCA9IGZ1bmN0aW9uKCkge1xuICB2YXIgYXV0aCA9IHRoaXMuYXV0aCB8fCAnJztcbiAgaWYgKGF1dGgpIHtcbiAgICBhdXRoID0gZW5jb2RlVVJJQ29tcG9uZW50KGF1dGgpO1xuICAgIGF1dGggPSBhdXRoLnJlcGxhY2UoLyUzQS9pLCAnOicpO1xuICAgIGF1dGggKz0gJ0AnO1xuICB9XG5cbiAgdmFyIHByb3RvY29sID0gdGhpcy5wcm90b2NvbCB8fCAnJyxcbiAgICAgIHBhdGhuYW1lID0gdGhpcy5wYXRobmFtZSB8fCAnJyxcbiAgICAgIGhhc2ggPSB0aGlzLmhhc2ggfHwgJycsXG4gICAgICBob3N0ID0gZmFsc2UsXG4gICAgICBxdWVyeSA9ICcnO1xuXG4gIGlmICh0aGlzLmhvc3QpIHtcbiAgICBob3N0ID0gYXV0aCArIHRoaXMuaG9zdDtcbiAgfSBlbHNlIGlmICh0aGlzLmhvc3RuYW1lKSB7XG4gICAgaG9zdCA9IGF1dGggKyAodGhpcy5ob3N0bmFtZS5pbmRleE9mKCc6JykgPT09IC0xID9cbiAgICAgICAgdGhpcy5ob3N0bmFtZSA6XG4gICAgICAgICdbJyArIHRoaXMuaG9zdG5hbWUgKyAnXScpO1xuICAgIGlmICh0aGlzLnBvcnQpIHtcbiAgICAgIGhvc3QgKz0gJzonICsgdGhpcy5wb3J0O1xuICAgIH1cbiAgfVxuXG4gIGlmICh0aGlzLnF1ZXJ5ICYmXG4gICAgICBpc09iamVjdCh0aGlzLnF1ZXJ5KSAmJlxuICAgICAgT2JqZWN0LmtleXModGhpcy5xdWVyeSkubGVuZ3RoKSB7XG4gICAgcXVlcnkgPSBxdWVyeXN0cmluZy5zdHJpbmdpZnkodGhpcy5xdWVyeSk7XG4gIH1cblxuICB2YXIgc2VhcmNoID0gdGhpcy5zZWFyY2ggfHwgKHF1ZXJ5ICYmICgnPycgKyBxdWVyeSkpIHx8ICcnO1xuXG4gIGlmIChwcm90b2NvbCAmJiBwcm90b2NvbC5zdWJzdHIoLTEpICE9PSAnOicpIHByb3RvY29sICs9ICc6JztcblxuICAvLyBvbmx5IHRoZSBzbGFzaGVkUHJvdG9jb2xzIGdldCB0aGUgLy8uICBOb3QgbWFpbHRvOiwgeG1wcDosIGV0Yy5cbiAgLy8gdW5sZXNzIHRoZXkgaGFkIHRoZW0gdG8gYmVnaW4gd2l0aC5cbiAgaWYgKHRoaXMuc2xhc2hlcyB8fFxuICAgICAgKCFwcm90b2NvbCB8fCBzbGFzaGVkUHJvdG9jb2xbcHJvdG9jb2xdKSAmJiBob3N0ICE9PSBmYWxzZSkge1xuICAgIGhvc3QgPSAnLy8nICsgKGhvc3QgfHwgJycpO1xuICAgIGlmIChwYXRobmFtZSAmJiBwYXRobmFtZS5jaGFyQXQoMCkgIT09ICcvJykgcGF0aG5hbWUgPSAnLycgKyBwYXRobmFtZTtcbiAgfSBlbHNlIGlmICghaG9zdCkge1xuICAgIGhvc3QgPSAnJztcbiAgfVxuXG4gIGlmIChoYXNoICYmIGhhc2guY2hhckF0KDApICE9PSAnIycpIGhhc2ggPSAnIycgKyBoYXNoO1xuICBpZiAoc2VhcmNoICYmIHNlYXJjaC5jaGFyQXQoMCkgIT09ICc/Jykgc2VhcmNoID0gJz8nICsgc2VhcmNoO1xuXG4gIHBhdGhuYW1lID0gcGF0aG5hbWUucmVwbGFjZSgvWz8jXS9nLCBmdW5jdGlvbihtYXRjaCkge1xuICAgIHJldHVybiBlbmNvZGVVUklDb21wb25lbnQobWF0Y2gpO1xuICB9KTtcbiAgc2VhcmNoID0gc2VhcmNoLnJlcGxhY2UoJyMnLCAnJTIzJyk7XG5cbiAgcmV0dXJuIHByb3RvY29sICsgaG9zdCArIHBhdGhuYW1lICsgc2VhcmNoICsgaGFzaDtcbn07XG5cbmZ1bmN0aW9uIHVybFJlc29sdmUoc291cmNlLCByZWxhdGl2ZSkge1xuICByZXR1cm4gdXJsUGFyc2Uoc291cmNlLCBmYWxzZSwgdHJ1ZSkucmVzb2x2ZShyZWxhdGl2ZSk7XG59XG5cblVybC5wcm90b3R5cGUucmVzb2x2ZSA9IGZ1bmN0aW9uKHJlbGF0aXZlKSB7XG4gIHJldHVybiB0aGlzLnJlc29sdmVPYmplY3QodXJsUGFyc2UocmVsYXRpdmUsIGZhbHNlLCB0cnVlKSkuZm9ybWF0KCk7XG59O1xuXG5mdW5jdGlvbiB1cmxSZXNvbHZlT2JqZWN0KHNvdXJjZSwgcmVsYXRpdmUpIHtcbiAgaWYgKCFzb3VyY2UpIHJldHVybiByZWxhdGl2ZTtcbiAgcmV0dXJuIHVybFBhcnNlKHNvdXJjZSwgZmFsc2UsIHRydWUpLnJlc29sdmVPYmplY3QocmVsYXRpdmUpO1xufVxuXG5VcmwucHJvdG90eXBlLnJlc29sdmVPYmplY3QgPSBmdW5jdGlvbihyZWxhdGl2ZSkge1xuICBpZiAoaXNTdHJpbmcocmVsYXRpdmUpKSB7XG4gICAgdmFyIHJlbCA9IG5ldyBVcmwoKTtcbiAgICByZWwucGFyc2UocmVsYXRpdmUsIGZhbHNlLCB0cnVlKTtcbiAgICByZWxhdGl2ZSA9IHJlbDtcbiAgfVxuXG4gIHZhciByZXN1bHQgPSBuZXcgVXJsKCk7XG4gIE9iamVjdC5rZXlzKHRoaXMpLmZvckVhY2goZnVuY3Rpb24oaykge1xuICAgIHJlc3VsdFtrXSA9IHRoaXNba107XG4gIH0sIHRoaXMpO1xuXG4gIC8vIGhhc2ggaXMgYWx3YXlzIG92ZXJyaWRkZW4sIG5vIG1hdHRlciB3aGF0LlxuICAvLyBldmVuIGhyZWY9XCJcIiB3aWxsIHJlbW92ZSBpdC5cbiAgcmVzdWx0Lmhhc2ggPSByZWxhdGl2ZS5oYXNoO1xuXG4gIC8vIGlmIHRoZSByZWxhdGl2ZSB1cmwgaXMgZW1wdHksIHRoZW4gdGhlcmUncyBub3RoaW5nIGxlZnQgdG8gZG8gaGVyZS5cbiAgaWYgKHJlbGF0aXZlLmhyZWYgPT09ICcnKSB7XG4gICAgcmVzdWx0LmhyZWYgPSByZXN1bHQuZm9ybWF0KCk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIC8vIGhyZWZzIGxpa2UgLy9mb28vYmFyIGFsd2F5cyBjdXQgdG8gdGhlIHByb3RvY29sLlxuICBpZiAocmVsYXRpdmUuc2xhc2hlcyAmJiAhcmVsYXRpdmUucHJvdG9jb2wpIHtcbiAgICAvLyB0YWtlIGV2ZXJ5dGhpbmcgZXhjZXB0IHRoZSBwcm90b2NvbCBmcm9tIHJlbGF0aXZlXG4gICAgT2JqZWN0LmtleXMocmVsYXRpdmUpLmZvckVhY2goZnVuY3Rpb24oaykge1xuICAgICAgaWYgKGsgIT09ICdwcm90b2NvbCcpXG4gICAgICAgIHJlc3VsdFtrXSA9IHJlbGF0aXZlW2tdO1xuICAgIH0pO1xuXG4gICAgLy91cmxQYXJzZSBhcHBlbmRzIHRyYWlsaW5nIC8gdG8gdXJscyBsaWtlIGh0dHA6Ly93d3cuZXhhbXBsZS5jb21cbiAgICBpZiAoc2xhc2hlZFByb3RvY29sW3Jlc3VsdC5wcm90b2NvbF0gJiZcbiAgICAgICAgcmVzdWx0Lmhvc3RuYW1lICYmICFyZXN1bHQucGF0aG5hbWUpIHtcbiAgICAgIHJlc3VsdC5wYXRoID0gcmVzdWx0LnBhdGhuYW1lID0gJy8nO1xuICAgIH1cblxuICAgIHJlc3VsdC5ocmVmID0gcmVzdWx0LmZvcm1hdCgpO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICBpZiAocmVsYXRpdmUucHJvdG9jb2wgJiYgcmVsYXRpdmUucHJvdG9jb2wgIT09IHJlc3VsdC5wcm90b2NvbCkge1xuICAgIC8vIGlmIGl0J3MgYSBrbm93biB1cmwgcHJvdG9jb2wsIHRoZW4gY2hhbmdpbmdcbiAgICAvLyB0aGUgcHJvdG9jb2wgZG9lcyB3ZWlyZCB0aGluZ3NcbiAgICAvLyBmaXJzdCwgaWYgaXQncyBub3QgZmlsZTosIHRoZW4gd2UgTVVTVCBoYXZlIGEgaG9zdCxcbiAgICAvLyBhbmQgaWYgdGhlcmUgd2FzIGEgcGF0aFxuICAgIC8vIHRvIGJlZ2luIHdpdGgsIHRoZW4gd2UgTVVTVCBoYXZlIGEgcGF0aC5cbiAgICAvLyBpZiBpdCBpcyBmaWxlOiwgdGhlbiB0aGUgaG9zdCBpcyBkcm9wcGVkLFxuICAgIC8vIGJlY2F1c2UgdGhhdCdzIGtub3duIHRvIGJlIGhvc3RsZXNzLlxuICAgIC8vIGFueXRoaW5nIGVsc2UgaXMgYXNzdW1lZCB0byBiZSBhYnNvbHV0ZS5cbiAgICBpZiAoIXNsYXNoZWRQcm90b2NvbFtyZWxhdGl2ZS5wcm90b2NvbF0pIHtcbiAgICAgIE9iamVjdC5rZXlzKHJlbGF0aXZlKS5mb3JFYWNoKGZ1bmN0aW9uKGspIHtcbiAgICAgICAgcmVzdWx0W2tdID0gcmVsYXRpdmVba107XG4gICAgICB9KTtcbiAgICAgIHJlc3VsdC5ocmVmID0gcmVzdWx0LmZvcm1hdCgpO1xuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICByZXN1bHQucHJvdG9jb2wgPSByZWxhdGl2ZS5wcm90b2NvbDtcbiAgICBpZiAoIXJlbGF0aXZlLmhvc3QgJiYgIWhvc3RsZXNzUHJvdG9jb2xbcmVsYXRpdmUucHJvdG9jb2xdKSB7XG4gICAgICB2YXIgcmVsUGF0aCA9IChyZWxhdGl2ZS5wYXRobmFtZSB8fCAnJykuc3BsaXQoJy8nKTtcbiAgICAgIHdoaWxlIChyZWxQYXRoLmxlbmd0aCAmJiAhKHJlbGF0aXZlLmhvc3QgPSByZWxQYXRoLnNoaWZ0KCkpKTtcbiAgICAgIGlmICghcmVsYXRpdmUuaG9zdCkgcmVsYXRpdmUuaG9zdCA9ICcnO1xuICAgICAgaWYgKCFyZWxhdGl2ZS5ob3N0bmFtZSkgcmVsYXRpdmUuaG9zdG5hbWUgPSAnJztcbiAgICAgIGlmIChyZWxQYXRoWzBdICE9PSAnJykgcmVsUGF0aC51bnNoaWZ0KCcnKTtcbiAgICAgIGlmIChyZWxQYXRoLmxlbmd0aCA8IDIpIHJlbFBhdGgudW5zaGlmdCgnJyk7XG4gICAgICByZXN1bHQucGF0aG5hbWUgPSByZWxQYXRoLmpvaW4oJy8nKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmVzdWx0LnBhdGhuYW1lID0gcmVsYXRpdmUucGF0aG5hbWU7XG4gICAgfVxuICAgIHJlc3VsdC5zZWFyY2ggPSByZWxhdGl2ZS5zZWFyY2g7XG4gICAgcmVzdWx0LnF1ZXJ5ID0gcmVsYXRpdmUucXVlcnk7XG4gICAgcmVzdWx0Lmhvc3QgPSByZWxhdGl2ZS5ob3N0IHx8ICcnO1xuICAgIHJlc3VsdC5hdXRoID0gcmVsYXRpdmUuYXV0aDtcbiAgICByZXN1bHQuaG9zdG5hbWUgPSByZWxhdGl2ZS5ob3N0bmFtZSB8fCByZWxhdGl2ZS5ob3N0O1xuICAgIHJlc3VsdC5wb3J0ID0gcmVsYXRpdmUucG9ydDtcbiAgICAvLyB0byBzdXBwb3J0IGh0dHAucmVxdWVzdFxuICAgIGlmIChyZXN1bHQucGF0aG5hbWUgfHwgcmVzdWx0LnNlYXJjaCkge1xuICAgICAgdmFyIHAgPSByZXN1bHQucGF0aG5hbWUgfHwgJyc7XG4gICAgICB2YXIgcyA9IHJlc3VsdC5zZWFyY2ggfHwgJyc7XG4gICAgICByZXN1bHQucGF0aCA9IHAgKyBzO1xuICAgIH1cbiAgICByZXN1bHQuc2xhc2hlcyA9IHJlc3VsdC5zbGFzaGVzIHx8IHJlbGF0aXZlLnNsYXNoZXM7XG4gICAgcmVzdWx0LmhyZWYgPSByZXN1bHQuZm9ybWF0KCk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIHZhciBpc1NvdXJjZUFicyA9IChyZXN1bHQucGF0aG5hbWUgJiYgcmVzdWx0LnBhdGhuYW1lLmNoYXJBdCgwKSA9PT0gJy8nKSxcbiAgICAgIGlzUmVsQWJzID0gKFxuICAgICAgICAgIHJlbGF0aXZlLmhvc3QgfHxcbiAgICAgICAgICByZWxhdGl2ZS5wYXRobmFtZSAmJiByZWxhdGl2ZS5wYXRobmFtZS5jaGFyQXQoMCkgPT09ICcvJ1xuICAgICAgKSxcbiAgICAgIG11c3RFbmRBYnMgPSAoaXNSZWxBYnMgfHwgaXNTb3VyY2VBYnMgfHxcbiAgICAgICAgICAgICAgICAgICAgKHJlc3VsdC5ob3N0ICYmIHJlbGF0aXZlLnBhdGhuYW1lKSksXG4gICAgICByZW1vdmVBbGxEb3RzID0gbXVzdEVuZEFicyxcbiAgICAgIHNyY1BhdGggPSByZXN1bHQucGF0aG5hbWUgJiYgcmVzdWx0LnBhdGhuYW1lLnNwbGl0KCcvJykgfHwgW10sXG4gICAgICByZWxQYXRoID0gcmVsYXRpdmUucGF0aG5hbWUgJiYgcmVsYXRpdmUucGF0aG5hbWUuc3BsaXQoJy8nKSB8fCBbXSxcbiAgICAgIHBzeWNob3RpYyA9IHJlc3VsdC5wcm90b2NvbCAmJiAhc2xhc2hlZFByb3RvY29sW3Jlc3VsdC5wcm90b2NvbF07XG5cbiAgLy8gaWYgdGhlIHVybCBpcyBhIG5vbi1zbGFzaGVkIHVybCwgdGhlbiByZWxhdGl2ZVxuICAvLyBsaW5rcyBsaWtlIC4uLy4uIHNob3VsZCBiZSBhYmxlXG4gIC8vIHRvIGNyYXdsIHVwIHRvIHRoZSBob3N0bmFtZSwgYXMgd2VsbC4gIFRoaXMgaXMgc3RyYW5nZS5cbiAgLy8gcmVzdWx0LnByb3RvY29sIGhhcyBhbHJlYWR5IGJlZW4gc2V0IGJ5IG5vdy5cbiAgLy8gTGF0ZXIgb24sIHB1dCB0aGUgZmlyc3QgcGF0aCBwYXJ0IGludG8gdGhlIGhvc3QgZmllbGQuXG4gIGlmIChwc3ljaG90aWMpIHtcbiAgICByZXN1bHQuaG9zdG5hbWUgPSAnJztcbiAgICByZXN1bHQucG9ydCA9IG51bGw7XG4gICAgaWYgKHJlc3VsdC5ob3N0KSB7XG4gICAgICBpZiAoc3JjUGF0aFswXSA9PT0gJycpIHNyY1BhdGhbMF0gPSByZXN1bHQuaG9zdDtcbiAgICAgIGVsc2Ugc3JjUGF0aC51bnNoaWZ0KHJlc3VsdC5ob3N0KTtcbiAgICB9XG4gICAgcmVzdWx0Lmhvc3QgPSAnJztcbiAgICBpZiAocmVsYXRpdmUucHJvdG9jb2wpIHtcbiAgICAgIHJlbGF0aXZlLmhvc3RuYW1lID0gbnVsbDtcbiAgICAgIHJlbGF0aXZlLnBvcnQgPSBudWxsO1xuICAgICAgaWYgKHJlbGF0aXZlLmhvc3QpIHtcbiAgICAgICAgaWYgKHJlbFBhdGhbMF0gPT09ICcnKSByZWxQYXRoWzBdID0gcmVsYXRpdmUuaG9zdDtcbiAgICAgICAgZWxzZSByZWxQYXRoLnVuc2hpZnQocmVsYXRpdmUuaG9zdCk7XG4gICAgICB9XG4gICAgICByZWxhdGl2ZS5ob3N0ID0gbnVsbDtcbiAgICB9XG4gICAgbXVzdEVuZEFicyA9IG11c3RFbmRBYnMgJiYgKHJlbFBhdGhbMF0gPT09ICcnIHx8IHNyY1BhdGhbMF0gPT09ICcnKTtcbiAgfVxuXG4gIGlmIChpc1JlbEFicykge1xuICAgIC8vIGl0J3MgYWJzb2x1dGUuXG4gICAgcmVzdWx0Lmhvc3QgPSAocmVsYXRpdmUuaG9zdCB8fCByZWxhdGl2ZS5ob3N0ID09PSAnJykgP1xuICAgICAgICAgICAgICAgICAgcmVsYXRpdmUuaG9zdCA6IHJlc3VsdC5ob3N0O1xuICAgIHJlc3VsdC5ob3N0bmFtZSA9IChyZWxhdGl2ZS5ob3N0bmFtZSB8fCByZWxhdGl2ZS5ob3N0bmFtZSA9PT0gJycpID9cbiAgICAgICAgICAgICAgICAgICAgICByZWxhdGl2ZS5ob3N0bmFtZSA6IHJlc3VsdC5ob3N0bmFtZTtcbiAgICByZXN1bHQuc2VhcmNoID0gcmVsYXRpdmUuc2VhcmNoO1xuICAgIHJlc3VsdC5xdWVyeSA9IHJlbGF0aXZlLnF1ZXJ5O1xuICAgIHNyY1BhdGggPSByZWxQYXRoO1xuICAgIC8vIGZhbGwgdGhyb3VnaCB0byB0aGUgZG90LWhhbmRsaW5nIGJlbG93LlxuICB9IGVsc2UgaWYgKHJlbFBhdGgubGVuZ3RoKSB7XG4gICAgLy8gaXQncyByZWxhdGl2ZVxuICAgIC8vIHRocm93IGF3YXkgdGhlIGV4aXN0aW5nIGZpbGUsIGFuZCB0YWtlIHRoZSBuZXcgcGF0aCBpbnN0ZWFkLlxuICAgIGlmICghc3JjUGF0aCkgc3JjUGF0aCA9IFtdO1xuICAgIHNyY1BhdGgucG9wKCk7XG4gICAgc3JjUGF0aCA9IHNyY1BhdGguY29uY2F0KHJlbFBhdGgpO1xuICAgIHJlc3VsdC5zZWFyY2ggPSByZWxhdGl2ZS5zZWFyY2g7XG4gICAgcmVzdWx0LnF1ZXJ5ID0gcmVsYXRpdmUucXVlcnk7XG4gIH0gZWxzZSBpZiAoIWlzTnVsbE9yVW5kZWZpbmVkKHJlbGF0aXZlLnNlYXJjaCkpIHtcbiAgICAvLyBqdXN0IHB1bGwgb3V0IHRoZSBzZWFyY2guXG4gICAgLy8gbGlrZSBocmVmPSc/Zm9vJy5cbiAgICAvLyBQdXQgdGhpcyBhZnRlciB0aGUgb3RoZXIgdHdvIGNhc2VzIGJlY2F1c2UgaXQgc2ltcGxpZmllcyB0aGUgYm9vbGVhbnNcbiAgICBpZiAocHN5Y2hvdGljKSB7XG4gICAgICByZXN1bHQuaG9zdG5hbWUgPSByZXN1bHQuaG9zdCA9IHNyY1BhdGguc2hpZnQoKTtcbiAgICAgIC8vb2NjYXRpb25hbHkgdGhlIGF1dGggY2FuIGdldCBzdHVjayBvbmx5IGluIGhvc3RcbiAgICAgIC8vdGhpcyBlc3BlY2lhbHkgaGFwcGVucyBpbiBjYXNlcyBsaWtlXG4gICAgICAvL3VybC5yZXNvbHZlT2JqZWN0KCdtYWlsdG86bG9jYWwxQGRvbWFpbjEnLCAnbG9jYWwyQGRvbWFpbjInKVxuICAgICAgdmFyIGF1dGhJbkhvc3QgPSByZXN1bHQuaG9zdCAmJiByZXN1bHQuaG9zdC5pbmRleE9mKCdAJykgPiAwID9cbiAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0Lmhvc3Quc3BsaXQoJ0AnKSA6IGZhbHNlO1xuICAgICAgaWYgKGF1dGhJbkhvc3QpIHtcbiAgICAgICAgcmVzdWx0LmF1dGggPSBhdXRoSW5Ib3N0LnNoaWZ0KCk7XG4gICAgICAgIHJlc3VsdC5ob3N0ID0gcmVzdWx0Lmhvc3RuYW1lID0gYXV0aEluSG9zdC5zaGlmdCgpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXN1bHQuc2VhcmNoID0gcmVsYXRpdmUuc2VhcmNoO1xuICAgIHJlc3VsdC5xdWVyeSA9IHJlbGF0aXZlLnF1ZXJ5O1xuICAgIC8vdG8gc3VwcG9ydCBodHRwLnJlcXVlc3RcbiAgICBpZiAoIWlzTnVsbChyZXN1bHQucGF0aG5hbWUpIHx8ICFpc051bGwocmVzdWx0LnNlYXJjaCkpIHtcbiAgICAgIHJlc3VsdC5wYXRoID0gKHJlc3VsdC5wYXRobmFtZSA/IHJlc3VsdC5wYXRobmFtZSA6ICcnKSArXG4gICAgICAgICAgICAgICAgICAgIChyZXN1bHQuc2VhcmNoID8gcmVzdWx0LnNlYXJjaCA6ICcnKTtcbiAgICB9XG4gICAgcmVzdWx0LmhyZWYgPSByZXN1bHQuZm9ybWF0KCk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIGlmICghc3JjUGF0aC5sZW5ndGgpIHtcbiAgICAvLyBubyBwYXRoIGF0IGFsbC4gIGVhc3kuXG4gICAgLy8gd2UndmUgYWxyZWFkeSBoYW5kbGVkIHRoZSBvdGhlciBzdHVmZiBhYm92ZS5cbiAgICByZXN1bHQucGF0aG5hbWUgPSBudWxsO1xuICAgIC8vdG8gc3VwcG9ydCBodHRwLnJlcXVlc3RcbiAgICBpZiAocmVzdWx0LnNlYXJjaCkge1xuICAgICAgcmVzdWx0LnBhdGggPSAnLycgKyByZXN1bHQuc2VhcmNoO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXN1bHQucGF0aCA9IG51bGw7XG4gICAgfVxuICAgIHJlc3VsdC5ocmVmID0gcmVzdWx0LmZvcm1hdCgpO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICAvLyBpZiBhIHVybCBFTkRzIGluIC4gb3IgLi4sIHRoZW4gaXQgbXVzdCBnZXQgYSB0cmFpbGluZyBzbGFzaC5cbiAgLy8gaG93ZXZlciwgaWYgaXQgZW5kcyBpbiBhbnl0aGluZyBlbHNlIG5vbi1zbGFzaHksXG4gIC8vIHRoZW4gaXQgbXVzdCBOT1QgZ2V0IGEgdHJhaWxpbmcgc2xhc2guXG4gIHZhciBsYXN0ID0gc3JjUGF0aC5zbGljZSgtMSlbMF07XG4gIHZhciBoYXNUcmFpbGluZ1NsYXNoID0gKFxuICAgICAgKHJlc3VsdC5ob3N0IHx8IHJlbGF0aXZlLmhvc3QpICYmIChsYXN0ID09PSAnLicgfHwgbGFzdCA9PT0gJy4uJykgfHxcbiAgICAgIGxhc3QgPT09ICcnKTtcblxuICAvLyBzdHJpcCBzaW5nbGUgZG90cywgcmVzb2x2ZSBkb3VibGUgZG90cyB0byBwYXJlbnQgZGlyXG4gIC8vIGlmIHRoZSBwYXRoIHRyaWVzIHRvIGdvIGFib3ZlIHRoZSByb290LCBgdXBgIGVuZHMgdXAgPiAwXG4gIHZhciB1cCA9IDA7XG4gIGZvciAodmFyIGkgPSBzcmNQYXRoLmxlbmd0aDsgaSA+PSAwOyBpLS0pIHtcbiAgICBsYXN0ID0gc3JjUGF0aFtpXTtcbiAgICBpZiAobGFzdCA9PSAnLicpIHtcbiAgICAgIHNyY1BhdGguc3BsaWNlKGksIDEpO1xuICAgIH0gZWxzZSBpZiAobGFzdCA9PT0gJy4uJykge1xuICAgICAgc3JjUGF0aC5zcGxpY2UoaSwgMSk7XG4gICAgICB1cCsrO1xuICAgIH0gZWxzZSBpZiAodXApIHtcbiAgICAgIHNyY1BhdGguc3BsaWNlKGksIDEpO1xuICAgICAgdXAtLTtcbiAgICB9XG4gIH1cblxuICAvLyBpZiB0aGUgcGF0aCBpcyBhbGxvd2VkIHRvIGdvIGFib3ZlIHRoZSByb290LCByZXN0b3JlIGxlYWRpbmcgLi5zXG4gIGlmICghbXVzdEVuZEFicyAmJiAhcmVtb3ZlQWxsRG90cykge1xuICAgIGZvciAoOyB1cC0tOyB1cCkge1xuICAgICAgc3JjUGF0aC51bnNoaWZ0KCcuLicpO1xuICAgIH1cbiAgfVxuXG4gIGlmIChtdXN0RW5kQWJzICYmIHNyY1BhdGhbMF0gIT09ICcnICYmXG4gICAgICAoIXNyY1BhdGhbMF0gfHwgc3JjUGF0aFswXS5jaGFyQXQoMCkgIT09ICcvJykpIHtcbiAgICBzcmNQYXRoLnVuc2hpZnQoJycpO1xuICB9XG5cbiAgaWYgKGhhc1RyYWlsaW5nU2xhc2ggJiYgKHNyY1BhdGguam9pbignLycpLnN1YnN0cigtMSkgIT09ICcvJykpIHtcbiAgICBzcmNQYXRoLnB1c2goJycpO1xuICB9XG5cbiAgdmFyIGlzQWJzb2x1dGUgPSBzcmNQYXRoWzBdID09PSAnJyB8fFxuICAgICAgKHNyY1BhdGhbMF0gJiYgc3JjUGF0aFswXS5jaGFyQXQoMCkgPT09ICcvJyk7XG5cbiAgLy8gcHV0IHRoZSBob3N0IGJhY2tcbiAgaWYgKHBzeWNob3RpYykge1xuICAgIHJlc3VsdC5ob3N0bmFtZSA9IHJlc3VsdC5ob3N0ID0gaXNBYnNvbHV0ZSA/ICcnIDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyY1BhdGgubGVuZ3RoID8gc3JjUGF0aC5zaGlmdCgpIDogJyc7XG4gICAgLy9vY2NhdGlvbmFseSB0aGUgYXV0aCBjYW4gZ2V0IHN0dWNrIG9ubHkgaW4gaG9zdFxuICAgIC8vdGhpcyBlc3BlY2lhbHkgaGFwcGVucyBpbiBjYXNlcyBsaWtlXG4gICAgLy91cmwucmVzb2x2ZU9iamVjdCgnbWFpbHRvOmxvY2FsMUBkb21haW4xJywgJ2xvY2FsMkBkb21haW4yJylcbiAgICB2YXIgYXV0aEluSG9zdCA9IHJlc3VsdC5ob3N0ICYmIHJlc3VsdC5ob3N0LmluZGV4T2YoJ0AnKSA+IDAgP1xuICAgICAgICAgICAgICAgICAgICAgcmVzdWx0Lmhvc3Quc3BsaXQoJ0AnKSA6IGZhbHNlO1xuICAgIGlmIChhdXRoSW5Ib3N0KSB7XG4gICAgICByZXN1bHQuYXV0aCA9IGF1dGhJbkhvc3Quc2hpZnQoKTtcbiAgICAgIHJlc3VsdC5ob3N0ID0gcmVzdWx0Lmhvc3RuYW1lID0gYXV0aEluSG9zdC5zaGlmdCgpO1xuICAgIH1cbiAgfVxuXG4gIG11c3RFbmRBYnMgPSBtdXN0RW5kQWJzIHx8IChyZXN1bHQuaG9zdCAmJiBzcmNQYXRoLmxlbmd0aCk7XG5cbiAgaWYgKG11c3RFbmRBYnMgJiYgIWlzQWJzb2x1dGUpIHtcbiAgICBzcmNQYXRoLnVuc2hpZnQoJycpO1xuICB9XG5cbiAgaWYgKCFzcmNQYXRoLmxlbmd0aCkge1xuICAgIHJlc3VsdC5wYXRobmFtZSA9IG51bGw7XG4gICAgcmVzdWx0LnBhdGggPSBudWxsO1xuICB9IGVsc2Uge1xuICAgIHJlc3VsdC5wYXRobmFtZSA9IHNyY1BhdGguam9pbignLycpO1xuICB9XG5cbiAgLy90byBzdXBwb3J0IHJlcXVlc3QuaHR0cFxuICBpZiAoIWlzTnVsbChyZXN1bHQucGF0aG5hbWUpIHx8ICFpc051bGwocmVzdWx0LnNlYXJjaCkpIHtcbiAgICByZXN1bHQucGF0aCA9IChyZXN1bHQucGF0aG5hbWUgPyByZXN1bHQucGF0aG5hbWUgOiAnJykgK1xuICAgICAgICAgICAgICAgICAgKHJlc3VsdC5zZWFyY2ggPyByZXN1bHQuc2VhcmNoIDogJycpO1xuICB9XG4gIHJlc3VsdC5hdXRoID0gcmVsYXRpdmUuYXV0aCB8fCByZXN1bHQuYXV0aDtcbiAgcmVzdWx0LnNsYXNoZXMgPSByZXN1bHQuc2xhc2hlcyB8fCByZWxhdGl2ZS5zbGFzaGVzO1xuICByZXN1bHQuaHJlZiA9IHJlc3VsdC5mb3JtYXQoKTtcbiAgcmV0dXJuIHJlc3VsdDtcbn07XG5cblVybC5wcm90b3R5cGUucGFyc2VIb3N0ID0gZnVuY3Rpb24oKSB7XG4gIHZhciBob3N0ID0gdGhpcy5ob3N0O1xuICB2YXIgcG9ydCA9IHBvcnRQYXR0ZXJuLmV4ZWMoaG9zdCk7XG4gIGlmIChwb3J0KSB7XG4gICAgcG9ydCA9IHBvcnRbMF07XG4gICAgaWYgKHBvcnQgIT09ICc6Jykge1xuICAgICAgdGhpcy5wb3J0ID0gcG9ydC5zdWJzdHIoMSk7XG4gICAgfVxuICAgIGhvc3QgPSBob3N0LnN1YnN0cigwLCBob3N0Lmxlbmd0aCAtIHBvcnQubGVuZ3RoKTtcbiAgfVxuICBpZiAoaG9zdCkgdGhpcy5ob3N0bmFtZSA9IGhvc3Q7XG59O1xuXG5mdW5jdGlvbiBpc1N0cmluZyhhcmcpIHtcbiAgcmV0dXJuIHR5cGVvZiBhcmcgPT09IFwic3RyaW5nXCI7XG59XG5cbmZ1bmN0aW9uIGlzT2JqZWN0KGFyZykge1xuICByZXR1cm4gdHlwZW9mIGFyZyA9PT0gJ29iamVjdCcgJiYgYXJnICE9PSBudWxsO1xufVxuXG5mdW5jdGlvbiBpc051bGwoYXJnKSB7XG4gIHJldHVybiBhcmcgPT09IG51bGw7XG59XG5mdW5jdGlvbiBpc051bGxPclVuZGVmaW5lZChhcmcpIHtcbiAgcmV0dXJuICBhcmcgPT0gbnVsbDtcbn1cbiIsIid1c2Ugc3RyaWN0JztcblxubW9kdWxlLmV4cG9ydHMgPSBlYXJjdXQ7XG5cbmZ1bmN0aW9uIGVhcmN1dChkYXRhLCBob2xlSW5kaWNlcywgZGltKSB7XG5cbiAgICBkaW0gPSBkaW0gfHwgMjtcblxuICAgIHZhciBoYXNIb2xlcyA9IGhvbGVJbmRpY2VzICYmIGhvbGVJbmRpY2VzLmxlbmd0aCxcbiAgICAgICAgb3V0ZXJMZW4gPSBoYXNIb2xlcyA/IGhvbGVJbmRpY2VzWzBdICogZGltIDogZGF0YS5sZW5ndGgsXG4gICAgICAgIG91dGVyTm9kZSA9IGxpbmtlZExpc3QoZGF0YSwgMCwgb3V0ZXJMZW4sIGRpbSwgdHJ1ZSksXG4gICAgICAgIHRyaWFuZ2xlcyA9IFtdO1xuXG4gICAgaWYgKCFvdXRlck5vZGUpIHJldHVybiB0cmlhbmdsZXM7XG5cbiAgICB2YXIgbWluWCwgbWluWSwgbWF4WCwgbWF4WSwgeCwgeSwgc2l6ZTtcblxuICAgIGlmIChoYXNIb2xlcykgb3V0ZXJOb2RlID0gZWxpbWluYXRlSG9sZXMoZGF0YSwgaG9sZUluZGljZXMsIG91dGVyTm9kZSwgZGltKTtcblxuICAgIC8vIGlmIHRoZSBzaGFwZSBpcyBub3QgdG9vIHNpbXBsZSwgd2UnbGwgdXNlIHotb3JkZXIgY3VydmUgaGFzaCBsYXRlcjsgY2FsY3VsYXRlIHBvbHlnb24gYmJveFxuICAgIGlmIChkYXRhLmxlbmd0aCA+IDgwICogZGltKSB7XG4gICAgICAgIG1pblggPSBtYXhYID0gZGF0YVswXTtcbiAgICAgICAgbWluWSA9IG1heFkgPSBkYXRhWzFdO1xuXG4gICAgICAgIGZvciAodmFyIGkgPSBkaW07IGkgPCBvdXRlckxlbjsgaSArPSBkaW0pIHtcbiAgICAgICAgICAgIHggPSBkYXRhW2ldO1xuICAgICAgICAgICAgeSA9IGRhdGFbaSArIDFdO1xuICAgICAgICAgICAgaWYgKHggPCBtaW5YKSBtaW5YID0geDtcbiAgICAgICAgICAgIGlmICh5IDwgbWluWSkgbWluWSA9IHk7XG4gICAgICAgICAgICBpZiAoeCA+IG1heFgpIG1heFggPSB4O1xuICAgICAgICAgICAgaWYgKHkgPiBtYXhZKSBtYXhZID0geTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIG1pblgsIG1pblkgYW5kIHNpemUgYXJlIGxhdGVyIHVzZWQgdG8gdHJhbnNmb3JtIGNvb3JkcyBpbnRvIGludGVnZXJzIGZvciB6LW9yZGVyIGNhbGN1bGF0aW9uXG4gICAgICAgIHNpemUgPSBNYXRoLm1heChtYXhYIC0gbWluWCwgbWF4WSAtIG1pblkpO1xuICAgIH1cblxuICAgIGVhcmN1dExpbmtlZChvdXRlck5vZGUsIHRyaWFuZ2xlcywgZGltLCBtaW5YLCBtaW5ZLCBzaXplKTtcblxuICAgIHJldHVybiB0cmlhbmdsZXM7XG59XG5cbi8vIGNyZWF0ZSBhIGNpcmN1bGFyIGRvdWJseSBsaW5rZWQgbGlzdCBmcm9tIHBvbHlnb24gcG9pbnRzIGluIHRoZSBzcGVjaWZpZWQgd2luZGluZyBvcmRlclxuZnVuY3Rpb24gbGlua2VkTGlzdChkYXRhLCBzdGFydCwgZW5kLCBkaW0sIGNsb2Nrd2lzZSkge1xuICAgIHZhciBzdW0gPSAwLFxuICAgICAgICBpLCBqLCBsYXN0O1xuXG4gICAgLy8gY2FsY3VsYXRlIG9yaWdpbmFsIHdpbmRpbmcgb3JkZXIgb2YgYSBwb2x5Z29uIHJpbmdcbiAgICBmb3IgKGkgPSBzdGFydCwgaiA9IGVuZCAtIGRpbTsgaSA8IGVuZDsgaSArPSBkaW0pIHtcbiAgICAgICAgc3VtICs9IChkYXRhW2pdIC0gZGF0YVtpXSkgKiAoZGF0YVtpICsgMV0gKyBkYXRhW2ogKyAxXSk7XG4gICAgICAgIGogPSBpO1xuICAgIH1cblxuICAgIC8vIGxpbmsgcG9pbnRzIGludG8gY2lyY3VsYXIgZG91Ymx5LWxpbmtlZCBsaXN0IGluIHRoZSBzcGVjaWZpZWQgd2luZGluZyBvcmRlclxuICAgIGlmIChjbG9ja3dpc2UgPT09IChzdW0gPiAwKSkge1xuICAgICAgICBmb3IgKGkgPSBzdGFydDsgaSA8IGVuZDsgaSArPSBkaW0pIGxhc3QgPSBpbnNlcnROb2RlKGksIGRhdGFbaV0sIGRhdGFbaSArIDFdLCBsYXN0KTtcbiAgICB9IGVsc2Uge1xuICAgICAgICBmb3IgKGkgPSBlbmQgLSBkaW07IGkgPj0gc3RhcnQ7IGkgLT0gZGltKSBsYXN0ID0gaW5zZXJ0Tm9kZShpLCBkYXRhW2ldLCBkYXRhW2kgKyAxXSwgbGFzdCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGxhc3Q7XG59XG5cbi8vIGVsaW1pbmF0ZSBjb2xpbmVhciBvciBkdXBsaWNhdGUgcG9pbnRzXG5mdW5jdGlvbiBmaWx0ZXJQb2ludHMoc3RhcnQsIGVuZCkge1xuICAgIGlmICghc3RhcnQpIHJldHVybiBzdGFydDtcbiAgICBpZiAoIWVuZCkgZW5kID0gc3RhcnQ7XG5cbiAgICB2YXIgcCA9IHN0YXJ0LFxuICAgICAgICBhZ2FpbjtcbiAgICBkbyB7XG4gICAgICAgIGFnYWluID0gZmFsc2U7XG5cbiAgICAgICAgaWYgKCFwLnN0ZWluZXIgJiYgKGVxdWFscyhwLCBwLm5leHQpIHx8IGFyZWEocC5wcmV2LCBwLCBwLm5leHQpID09PSAwKSkge1xuICAgICAgICAgICAgcmVtb3ZlTm9kZShwKTtcbiAgICAgICAgICAgIHAgPSBlbmQgPSBwLnByZXY7XG4gICAgICAgICAgICBpZiAocCA9PT0gcC5uZXh0KSByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIGFnYWluID0gdHJ1ZTtcblxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcCA9IHAubmV4dDtcbiAgICAgICAgfVxuICAgIH0gd2hpbGUgKGFnYWluIHx8IHAgIT09IGVuZCk7XG5cbiAgICByZXR1cm4gZW5kO1xufVxuXG4vLyBtYWluIGVhciBzbGljaW5nIGxvb3Agd2hpY2ggdHJpYW5ndWxhdGVzIGEgcG9seWdvbiAoZ2l2ZW4gYXMgYSBsaW5rZWQgbGlzdClcbmZ1bmN0aW9uIGVhcmN1dExpbmtlZChlYXIsIHRyaWFuZ2xlcywgZGltLCBtaW5YLCBtaW5ZLCBzaXplLCBwYXNzKSB7XG4gICAgaWYgKCFlYXIpIHJldHVybjtcblxuICAgIC8vIGludGVybGluayBwb2x5Z29uIG5vZGVzIGluIHotb3JkZXJcbiAgICBpZiAoIXBhc3MgJiYgc2l6ZSkgaW5kZXhDdXJ2ZShlYXIsIG1pblgsIG1pblksIHNpemUpO1xuXG4gICAgdmFyIHN0b3AgPSBlYXIsXG4gICAgICAgIHByZXYsIG5leHQ7XG5cbiAgICAvLyBpdGVyYXRlIHRocm91Z2ggZWFycywgc2xpY2luZyB0aGVtIG9uZSBieSBvbmVcbiAgICB3aGlsZSAoZWFyLnByZXYgIT09IGVhci5uZXh0KSB7XG4gICAgICAgIHByZXYgPSBlYXIucHJldjtcbiAgICAgICAgbmV4dCA9IGVhci5uZXh0O1xuXG4gICAgICAgIGlmIChzaXplID8gaXNFYXJIYXNoZWQoZWFyLCBtaW5YLCBtaW5ZLCBzaXplKSA6IGlzRWFyKGVhcikpIHtcbiAgICAgICAgICAgIC8vIGN1dCBvZmYgdGhlIHRyaWFuZ2xlXG4gICAgICAgICAgICB0cmlhbmdsZXMucHVzaChwcmV2LmkgLyBkaW0pO1xuICAgICAgICAgICAgdHJpYW5nbGVzLnB1c2goZWFyLmkgLyBkaW0pO1xuICAgICAgICAgICAgdHJpYW5nbGVzLnB1c2gobmV4dC5pIC8gZGltKTtcblxuICAgICAgICAgICAgcmVtb3ZlTm9kZShlYXIpO1xuXG4gICAgICAgICAgICAvLyBza2lwcGluZyB0aGUgbmV4dCB2ZXJ0aWNlIGxlYWRzIHRvIGxlc3Mgc2xpdmVyIHRyaWFuZ2xlc1xuICAgICAgICAgICAgZWFyID0gbmV4dC5uZXh0O1xuICAgICAgICAgICAgc3RvcCA9IG5leHQubmV4dDtcblxuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICBlYXIgPSBuZXh0O1xuXG4gICAgICAgIC8vIGlmIHdlIGxvb3BlZCB0aHJvdWdoIHRoZSB3aG9sZSByZW1haW5pbmcgcG9seWdvbiBhbmQgY2FuJ3QgZmluZCBhbnkgbW9yZSBlYXJzXG4gICAgICAgIGlmIChlYXIgPT09IHN0b3ApIHtcbiAgICAgICAgICAgIC8vIHRyeSBmaWx0ZXJpbmcgcG9pbnRzIGFuZCBzbGljaW5nIGFnYWluXG4gICAgICAgICAgICBpZiAoIXBhc3MpIHtcbiAgICAgICAgICAgICAgICBlYXJjdXRMaW5rZWQoZmlsdGVyUG9pbnRzKGVhciksIHRyaWFuZ2xlcywgZGltLCBtaW5YLCBtaW5ZLCBzaXplLCAxKTtcblxuICAgICAgICAgICAgLy8gaWYgdGhpcyBkaWRuJ3Qgd29yaywgdHJ5IGN1cmluZyBhbGwgc21hbGwgc2VsZi1pbnRlcnNlY3Rpb25zIGxvY2FsbHlcbiAgICAgICAgICAgIH0gZWxzZSBpZiAocGFzcyA9PT0gMSkge1xuICAgICAgICAgICAgICAgIGVhciA9IGN1cmVMb2NhbEludGVyc2VjdGlvbnMoZWFyLCB0cmlhbmdsZXMsIGRpbSk7XG4gICAgICAgICAgICAgICAgZWFyY3V0TGlua2VkKGVhciwgdHJpYW5nbGVzLCBkaW0sIG1pblgsIG1pblksIHNpemUsIDIpO1xuXG4gICAgICAgICAgICAvLyBhcyBhIGxhc3QgcmVzb3J0LCB0cnkgc3BsaXR0aW5nIHRoZSByZW1haW5pbmcgcG9seWdvbiBpbnRvIHR3b1xuICAgICAgICAgICAgfSBlbHNlIGlmIChwYXNzID09PSAyKSB7XG4gICAgICAgICAgICAgICAgc3BsaXRFYXJjdXQoZWFyLCB0cmlhbmdsZXMsIGRpbSwgbWluWCwgbWluWSwgc2l6ZSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgfVxufVxuXG4vLyBjaGVjayB3aGV0aGVyIGEgcG9seWdvbiBub2RlIGZvcm1zIGEgdmFsaWQgZWFyIHdpdGggYWRqYWNlbnQgbm9kZXNcbmZ1bmN0aW9uIGlzRWFyKGVhcikge1xuICAgIHZhciBhID0gZWFyLnByZXYsXG4gICAgICAgIGIgPSBlYXIsXG4gICAgICAgIGMgPSBlYXIubmV4dDtcblxuICAgIGlmIChhcmVhKGEsIGIsIGMpID49IDApIHJldHVybiBmYWxzZTsgLy8gcmVmbGV4LCBjYW4ndCBiZSBhbiBlYXJcblxuICAgIC8vIG5vdyBtYWtlIHN1cmUgd2UgZG9uJ3QgaGF2ZSBvdGhlciBwb2ludHMgaW5zaWRlIHRoZSBwb3RlbnRpYWwgZWFyXG4gICAgdmFyIHAgPSBlYXIubmV4dC5uZXh0O1xuXG4gICAgd2hpbGUgKHAgIT09IGVhci5wcmV2KSB7XG4gICAgICAgIGlmIChwb2ludEluVHJpYW5nbGUoYS54LCBhLnksIGIueCwgYi55LCBjLngsIGMueSwgcC54LCBwLnkpICYmXG4gICAgICAgICAgICBhcmVhKHAucHJldiwgcCwgcC5uZXh0KSA+PSAwKSByZXR1cm4gZmFsc2U7XG4gICAgICAgIHAgPSBwLm5leHQ7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRydWU7XG59XG5cbmZ1bmN0aW9uIGlzRWFySGFzaGVkKGVhciwgbWluWCwgbWluWSwgc2l6ZSkge1xuICAgIHZhciBhID0gZWFyLnByZXYsXG4gICAgICAgIGIgPSBlYXIsXG4gICAgICAgIGMgPSBlYXIubmV4dDtcblxuICAgIGlmIChhcmVhKGEsIGIsIGMpID49IDApIHJldHVybiBmYWxzZTsgLy8gcmVmbGV4LCBjYW4ndCBiZSBhbiBlYXJcblxuICAgIC8vIHRyaWFuZ2xlIGJib3g7IG1pbiAmIG1heCBhcmUgY2FsY3VsYXRlZCBsaWtlIHRoaXMgZm9yIHNwZWVkXG4gICAgdmFyIG1pblRYID0gYS54IDwgYi54ID8gKGEueCA8IGMueCA/IGEueCA6IGMueCkgOiAoYi54IDwgYy54ID8gYi54IDogYy54KSxcbiAgICAgICAgbWluVFkgPSBhLnkgPCBiLnkgPyAoYS55IDwgYy55ID8gYS55IDogYy55KSA6IChiLnkgPCBjLnkgPyBiLnkgOiBjLnkpLFxuICAgICAgICBtYXhUWCA9IGEueCA+IGIueCA/IChhLnggPiBjLnggPyBhLnggOiBjLngpIDogKGIueCA+IGMueCA/IGIueCA6IGMueCksXG4gICAgICAgIG1heFRZID0gYS55ID4gYi55ID8gKGEueSA+IGMueSA/IGEueSA6IGMueSkgOiAoYi55ID4gYy55ID8gYi55IDogYy55KTtcblxuICAgIC8vIHotb3JkZXIgcmFuZ2UgZm9yIHRoZSBjdXJyZW50IHRyaWFuZ2xlIGJib3g7XG4gICAgdmFyIG1pblogPSB6T3JkZXIobWluVFgsIG1pblRZLCBtaW5YLCBtaW5ZLCBzaXplKSxcbiAgICAgICAgbWF4WiA9IHpPcmRlcihtYXhUWCwgbWF4VFksIG1pblgsIG1pblksIHNpemUpO1xuXG4gICAgLy8gZmlyc3QgbG9vayBmb3IgcG9pbnRzIGluc2lkZSB0aGUgdHJpYW5nbGUgaW4gaW5jcmVhc2luZyB6LW9yZGVyXG4gICAgdmFyIHAgPSBlYXIubmV4dFo7XG5cbiAgICB3aGlsZSAocCAmJiBwLnogPD0gbWF4Wikge1xuICAgICAgICBpZiAocCAhPT0gZWFyLnByZXYgJiYgcCAhPT0gZWFyLm5leHQgJiZcbiAgICAgICAgICAgIHBvaW50SW5UcmlhbmdsZShhLngsIGEueSwgYi54LCBiLnksIGMueCwgYy55LCBwLngsIHAueSkgJiZcbiAgICAgICAgICAgIGFyZWEocC5wcmV2LCBwLCBwLm5leHQpID49IDApIHJldHVybiBmYWxzZTtcbiAgICAgICAgcCA9IHAubmV4dFo7XG4gICAgfVxuXG4gICAgLy8gdGhlbiBsb29rIGZvciBwb2ludHMgaW4gZGVjcmVhc2luZyB6LW9yZGVyXG4gICAgcCA9IGVhci5wcmV2WjtcblxuICAgIHdoaWxlIChwICYmIHAueiA+PSBtaW5aKSB7XG4gICAgICAgIGlmIChwICE9PSBlYXIucHJldiAmJiBwICE9PSBlYXIubmV4dCAmJlxuICAgICAgICAgICAgcG9pbnRJblRyaWFuZ2xlKGEueCwgYS55LCBiLngsIGIueSwgYy54LCBjLnksIHAueCwgcC55KSAmJlxuICAgICAgICAgICAgYXJlYShwLnByZXYsIHAsIHAubmV4dCkgPj0gMCkgcmV0dXJuIGZhbHNlO1xuICAgICAgICBwID0gcC5wcmV2WjtcbiAgICB9XG5cbiAgICByZXR1cm4gdHJ1ZTtcbn1cblxuLy8gZ28gdGhyb3VnaCBhbGwgcG9seWdvbiBub2RlcyBhbmQgY3VyZSBzbWFsbCBsb2NhbCBzZWxmLWludGVyc2VjdGlvbnNcbmZ1bmN0aW9uIGN1cmVMb2NhbEludGVyc2VjdGlvbnMoc3RhcnQsIHRyaWFuZ2xlcywgZGltKSB7XG4gICAgdmFyIHAgPSBzdGFydDtcbiAgICBkbyB7XG4gICAgICAgIHZhciBhID0gcC5wcmV2LFxuICAgICAgICAgICAgYiA9IHAubmV4dC5uZXh0O1xuXG4gICAgICAgIC8vIGEgc2VsZi1pbnRlcnNlY3Rpb24gd2hlcmUgZWRnZSAodltpLTFdLHZbaV0pIGludGVyc2VjdHMgKHZbaSsxXSx2W2krMl0pXG4gICAgICAgIGlmIChpbnRlcnNlY3RzKGEsIHAsIHAubmV4dCwgYikgJiYgbG9jYWxseUluc2lkZShhLCBiKSAmJiBsb2NhbGx5SW5zaWRlKGIsIGEpKSB7XG5cbiAgICAgICAgICAgIHRyaWFuZ2xlcy5wdXNoKGEuaSAvIGRpbSk7XG4gICAgICAgICAgICB0cmlhbmdsZXMucHVzaChwLmkgLyBkaW0pO1xuICAgICAgICAgICAgdHJpYW5nbGVzLnB1c2goYi5pIC8gZGltKTtcblxuICAgICAgICAgICAgLy8gcmVtb3ZlIHR3byBub2RlcyBpbnZvbHZlZFxuICAgICAgICAgICAgcmVtb3ZlTm9kZShwKTtcbiAgICAgICAgICAgIHJlbW92ZU5vZGUocC5uZXh0KTtcblxuICAgICAgICAgICAgcCA9IHN0YXJ0ID0gYjtcbiAgICAgICAgfVxuICAgICAgICBwID0gcC5uZXh0O1xuICAgIH0gd2hpbGUgKHAgIT09IHN0YXJ0KTtcblxuICAgIHJldHVybiBwO1xufVxuXG4vLyB0cnkgc3BsaXR0aW5nIHBvbHlnb24gaW50byB0d28gYW5kIHRyaWFuZ3VsYXRlIHRoZW0gaW5kZXBlbmRlbnRseVxuZnVuY3Rpb24gc3BsaXRFYXJjdXQoc3RhcnQsIHRyaWFuZ2xlcywgZGltLCBtaW5YLCBtaW5ZLCBzaXplKSB7XG4gICAgLy8gbG9vayBmb3IgYSB2YWxpZCBkaWFnb25hbCB0aGF0IGRpdmlkZXMgdGhlIHBvbHlnb24gaW50byB0d29cbiAgICB2YXIgYSA9IHN0YXJ0O1xuICAgIGRvIHtcbiAgICAgICAgdmFyIGIgPSBhLm5leHQubmV4dDtcbiAgICAgICAgd2hpbGUgKGIgIT09IGEucHJldikge1xuICAgICAgICAgICAgaWYgKGEuaSAhPT0gYi5pICYmIGlzVmFsaWREaWFnb25hbChhLCBiKSkge1xuICAgICAgICAgICAgICAgIC8vIHNwbGl0IHRoZSBwb2x5Z29uIGluIHR3byBieSB0aGUgZGlhZ29uYWxcbiAgICAgICAgICAgICAgICB2YXIgYyA9IHNwbGl0UG9seWdvbihhLCBiKTtcblxuICAgICAgICAgICAgICAgIC8vIGZpbHRlciBjb2xpbmVhciBwb2ludHMgYXJvdW5kIHRoZSBjdXRzXG4gICAgICAgICAgICAgICAgYSA9IGZpbHRlclBvaW50cyhhLCBhLm5leHQpO1xuICAgICAgICAgICAgICAgIGMgPSBmaWx0ZXJQb2ludHMoYywgYy5uZXh0KTtcblxuICAgICAgICAgICAgICAgIC8vIHJ1biBlYXJjdXQgb24gZWFjaCBoYWxmXG4gICAgICAgICAgICAgICAgZWFyY3V0TGlua2VkKGEsIHRyaWFuZ2xlcywgZGltLCBtaW5YLCBtaW5ZLCBzaXplKTtcbiAgICAgICAgICAgICAgICBlYXJjdXRMaW5rZWQoYywgdHJpYW5nbGVzLCBkaW0sIG1pblgsIG1pblksIHNpemUpO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGIgPSBiLm5leHQ7XG4gICAgICAgIH1cbiAgICAgICAgYSA9IGEubmV4dDtcbiAgICB9IHdoaWxlIChhICE9PSBzdGFydCk7XG59XG5cbi8vIGxpbmsgZXZlcnkgaG9sZSBpbnRvIHRoZSBvdXRlciBsb29wLCBwcm9kdWNpbmcgYSBzaW5nbGUtcmluZyBwb2x5Z29uIHdpdGhvdXQgaG9sZXNcbmZ1bmN0aW9uIGVsaW1pbmF0ZUhvbGVzKGRhdGEsIGhvbGVJbmRpY2VzLCBvdXRlck5vZGUsIGRpbSkge1xuICAgIHZhciBxdWV1ZSA9IFtdLFxuICAgICAgICBpLCBsZW4sIHN0YXJ0LCBlbmQsIGxpc3Q7XG5cbiAgICBmb3IgKGkgPSAwLCBsZW4gPSBob2xlSW5kaWNlcy5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuICAgICAgICBzdGFydCA9IGhvbGVJbmRpY2VzW2ldICogZGltO1xuICAgICAgICBlbmQgPSBpIDwgbGVuIC0gMSA/IGhvbGVJbmRpY2VzW2kgKyAxXSAqIGRpbSA6IGRhdGEubGVuZ3RoO1xuICAgICAgICBsaXN0ID0gbGlua2VkTGlzdChkYXRhLCBzdGFydCwgZW5kLCBkaW0sIGZhbHNlKTtcbiAgICAgICAgaWYgKGxpc3QgPT09IGxpc3QubmV4dCkgbGlzdC5zdGVpbmVyID0gdHJ1ZTtcbiAgICAgICAgcXVldWUucHVzaChnZXRMZWZ0bW9zdChsaXN0KSk7XG4gICAgfVxuXG4gICAgcXVldWUuc29ydChjb21wYXJlWCk7XG5cbiAgICAvLyBwcm9jZXNzIGhvbGVzIGZyb20gbGVmdCB0byByaWdodFxuICAgIGZvciAoaSA9IDA7IGkgPCBxdWV1ZS5sZW5ndGg7IGkrKykge1xuICAgICAgICBlbGltaW5hdGVIb2xlKHF1ZXVlW2ldLCBvdXRlck5vZGUpO1xuICAgICAgICBvdXRlck5vZGUgPSBmaWx0ZXJQb2ludHMob3V0ZXJOb2RlLCBvdXRlck5vZGUubmV4dCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG91dGVyTm9kZTtcbn1cblxuZnVuY3Rpb24gY29tcGFyZVgoYSwgYikge1xuICAgIHJldHVybiBhLnggLSBiLng7XG59XG5cbi8vIGZpbmQgYSBicmlkZ2UgYmV0d2VlbiB2ZXJ0aWNlcyB0aGF0IGNvbm5lY3RzIGhvbGUgd2l0aCBhbiBvdXRlciByaW5nIGFuZCBhbmQgbGluayBpdFxuZnVuY3Rpb24gZWxpbWluYXRlSG9sZShob2xlLCBvdXRlck5vZGUpIHtcbiAgICBvdXRlck5vZGUgPSBmaW5kSG9sZUJyaWRnZShob2xlLCBvdXRlck5vZGUpO1xuICAgIGlmIChvdXRlck5vZGUpIHtcbiAgICAgICAgdmFyIGIgPSBzcGxpdFBvbHlnb24ob3V0ZXJOb2RlLCBob2xlKTtcbiAgICAgICAgZmlsdGVyUG9pbnRzKGIsIGIubmV4dCk7XG4gICAgfVxufVxuXG4vLyBEYXZpZCBFYmVybHkncyBhbGdvcml0aG0gZm9yIGZpbmRpbmcgYSBicmlkZ2UgYmV0d2VlbiBob2xlIGFuZCBvdXRlciBwb2x5Z29uXG5mdW5jdGlvbiBmaW5kSG9sZUJyaWRnZShob2xlLCBvdXRlck5vZGUpIHtcbiAgICB2YXIgcCA9IG91dGVyTm9kZSxcbiAgICAgICAgaHggPSBob2xlLngsXG4gICAgICAgIGh5ID0gaG9sZS55LFxuICAgICAgICBxeCA9IC1JbmZpbml0eSxcbiAgICAgICAgbTtcblxuICAgIC8vIGZpbmQgYSBzZWdtZW50IGludGVyc2VjdGVkIGJ5IGEgcmF5IGZyb20gdGhlIGhvbGUncyBsZWZ0bW9zdCBwb2ludCB0byB0aGUgbGVmdDtcbiAgICAvLyBzZWdtZW50J3MgZW5kcG9pbnQgd2l0aCBsZXNzZXIgeCB3aWxsIGJlIHBvdGVudGlhbCBjb25uZWN0aW9uIHBvaW50XG4gICAgZG8ge1xuICAgICAgICBpZiAoaHkgPD0gcC55ICYmIGh5ID49IHAubmV4dC55KSB7XG4gICAgICAgICAgICB2YXIgeCA9IHAueCArIChoeSAtIHAueSkgKiAocC5uZXh0LnggLSBwLngpIC8gKHAubmV4dC55IC0gcC55KTtcbiAgICAgICAgICAgIGlmICh4IDw9IGh4ICYmIHggPiBxeCkge1xuICAgICAgICAgICAgICAgIHF4ID0geDtcbiAgICAgICAgICAgICAgICBtID0gcC54IDwgcC5uZXh0LnggPyBwIDogcC5uZXh0O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHAgPSBwLm5leHQ7XG4gICAgfSB3aGlsZSAocCAhPT0gb3V0ZXJOb2RlKTtcblxuICAgIGlmICghbSkgcmV0dXJuIG51bGw7XG5cbiAgICAvLyBsb29rIGZvciBwb2ludHMgaW5zaWRlIHRoZSB0cmlhbmdsZSBvZiBob2xlIHBvaW50LCBzZWdtZW50IGludGVyc2VjdGlvbiBhbmQgZW5kcG9pbnQ7XG4gICAgLy8gaWYgdGhlcmUgYXJlIG5vIHBvaW50cyBmb3VuZCwgd2UgaGF2ZSBhIHZhbGlkIGNvbm5lY3Rpb247XG4gICAgLy8gb3RoZXJ3aXNlIGNob29zZSB0aGUgcG9pbnQgb2YgdGhlIG1pbmltdW0gYW5nbGUgd2l0aCB0aGUgcmF5IGFzIGNvbm5lY3Rpb24gcG9pbnRcblxuICAgIHZhciBzdG9wID0gbSxcbiAgICAgICAgdGFuTWluID0gSW5maW5pdHksXG4gICAgICAgIHRhbjtcblxuICAgIHAgPSBtLm5leHQ7XG5cbiAgICB3aGlsZSAocCAhPT0gc3RvcCkge1xuICAgICAgICBpZiAoaHggPj0gcC54ICYmIHAueCA+PSBtLnggJiZcbiAgICAgICAgICAgICAgICBwb2ludEluVHJpYW5nbGUoaHkgPCBtLnkgPyBoeCA6IHF4LCBoeSwgbS54LCBtLnksIGh5IDwgbS55ID8gcXggOiBoeCwgaHksIHAueCwgcC55KSkge1xuXG4gICAgICAgICAgICB0YW4gPSBNYXRoLmFicyhoeSAtIHAueSkgLyAoaHggLSBwLngpOyAvLyB0YW5nZW50aWFsXG5cbiAgICAgICAgICAgIGlmICgodGFuIDwgdGFuTWluIHx8ICh0YW4gPT09IHRhbk1pbiAmJiBwLnggPiBtLngpKSAmJiBsb2NhbGx5SW5zaWRlKHAsIGhvbGUpKSB7XG4gICAgICAgICAgICAgICAgbSA9IHA7XG4gICAgICAgICAgICAgICAgdGFuTWluID0gdGFuO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcCA9IHAubmV4dDtcbiAgICB9XG5cbiAgICByZXR1cm4gbTtcbn1cblxuLy8gaW50ZXJsaW5rIHBvbHlnb24gbm9kZXMgaW4gei1vcmRlclxuZnVuY3Rpb24gaW5kZXhDdXJ2ZShzdGFydCwgbWluWCwgbWluWSwgc2l6ZSkge1xuICAgIHZhciBwID0gc3RhcnQ7XG4gICAgZG8ge1xuICAgICAgICBpZiAocC56ID09PSBudWxsKSBwLnogPSB6T3JkZXIocC54LCBwLnksIG1pblgsIG1pblksIHNpemUpO1xuICAgICAgICBwLnByZXZaID0gcC5wcmV2O1xuICAgICAgICBwLm5leHRaID0gcC5uZXh0O1xuICAgICAgICBwID0gcC5uZXh0O1xuICAgIH0gd2hpbGUgKHAgIT09IHN0YXJ0KTtcblxuICAgIHAucHJldloubmV4dFogPSBudWxsO1xuICAgIHAucHJldlogPSBudWxsO1xuXG4gICAgc29ydExpbmtlZChwKTtcbn1cblxuLy8gU2ltb24gVGF0aGFtJ3MgbGlua2VkIGxpc3QgbWVyZ2Ugc29ydCBhbGdvcml0aG1cbi8vIGh0dHA6Ly93d3cuY2hpYXJrLmdyZWVuZW5kLm9yZy51ay9+c2d0YXRoYW0vYWxnb3JpdGhtcy9saXN0c29ydC5odG1sXG5mdW5jdGlvbiBzb3J0TGlua2VkKGxpc3QpIHtcbiAgICB2YXIgaSwgcCwgcSwgZSwgdGFpbCwgbnVtTWVyZ2VzLCBwU2l6ZSwgcVNpemUsXG4gICAgICAgIGluU2l6ZSA9IDE7XG5cbiAgICBkbyB7XG4gICAgICAgIHAgPSBsaXN0O1xuICAgICAgICBsaXN0ID0gbnVsbDtcbiAgICAgICAgdGFpbCA9IG51bGw7XG4gICAgICAgIG51bU1lcmdlcyA9IDA7XG5cbiAgICAgICAgd2hpbGUgKHApIHtcbiAgICAgICAgICAgIG51bU1lcmdlcysrO1xuICAgICAgICAgICAgcSA9IHA7XG4gICAgICAgICAgICBwU2l6ZSA9IDA7XG4gICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgaW5TaXplOyBpKyspIHtcbiAgICAgICAgICAgICAgICBwU2l6ZSsrO1xuICAgICAgICAgICAgICAgIHEgPSBxLm5leHRaO1xuICAgICAgICAgICAgICAgIGlmICghcSkgYnJlYWs7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHFTaXplID0gaW5TaXplO1xuXG4gICAgICAgICAgICB3aGlsZSAocFNpemUgPiAwIHx8IChxU2l6ZSA+IDAgJiYgcSkpIHtcblxuICAgICAgICAgICAgICAgIGlmIChwU2l6ZSA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICBlID0gcTtcbiAgICAgICAgICAgICAgICAgICAgcSA9IHEubmV4dFo7XG4gICAgICAgICAgICAgICAgICAgIHFTaXplLS07XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChxU2l6ZSA9PT0gMCB8fCAhcSkge1xuICAgICAgICAgICAgICAgICAgICBlID0gcDtcbiAgICAgICAgICAgICAgICAgICAgcCA9IHAubmV4dFo7XG4gICAgICAgICAgICAgICAgICAgIHBTaXplLS07XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChwLnogPD0gcS56KSB7XG4gICAgICAgICAgICAgICAgICAgIGUgPSBwO1xuICAgICAgICAgICAgICAgICAgICBwID0gcC5uZXh0WjtcbiAgICAgICAgICAgICAgICAgICAgcFNpemUtLTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBlID0gcTtcbiAgICAgICAgICAgICAgICAgICAgcSA9IHEubmV4dFo7XG4gICAgICAgICAgICAgICAgICAgIHFTaXplLS07XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKHRhaWwpIHRhaWwubmV4dFogPSBlO1xuICAgICAgICAgICAgICAgIGVsc2UgbGlzdCA9IGU7XG5cbiAgICAgICAgICAgICAgICBlLnByZXZaID0gdGFpbDtcbiAgICAgICAgICAgICAgICB0YWlsID0gZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcCA9IHE7XG4gICAgICAgIH1cblxuICAgICAgICB0YWlsLm5leHRaID0gbnVsbDtcbiAgICAgICAgaW5TaXplICo9IDI7XG5cbiAgICB9IHdoaWxlIChudW1NZXJnZXMgPiAxKTtcblxuICAgIHJldHVybiBsaXN0O1xufVxuXG4vLyB6LW9yZGVyIG9mIGEgcG9pbnQgZ2l2ZW4gY29vcmRzIGFuZCBzaXplIG9mIHRoZSBkYXRhIGJvdW5kaW5nIGJveFxuZnVuY3Rpb24gek9yZGVyKHgsIHksIG1pblgsIG1pblksIHNpemUpIHtcbiAgICAvLyBjb29yZHMgYXJlIHRyYW5zZm9ybWVkIGludG8gbm9uLW5lZ2F0aXZlIDE1LWJpdCBpbnRlZ2VyIHJhbmdlXG4gICAgeCA9IDMyNzY3ICogKHggLSBtaW5YKSAvIHNpemU7XG4gICAgeSA9IDMyNzY3ICogKHkgLSBtaW5ZKSAvIHNpemU7XG5cbiAgICB4ID0gKHggfCAoeCA8PCA4KSkgJiAweDAwRkYwMEZGO1xuICAgIHggPSAoeCB8ICh4IDw8IDQpKSAmIDB4MEYwRjBGMEY7XG4gICAgeCA9ICh4IHwgKHggPDwgMikpICYgMHgzMzMzMzMzMztcbiAgICB4ID0gKHggfCAoeCA8PCAxKSkgJiAweDU1NTU1NTU1O1xuXG4gICAgeSA9ICh5IHwgKHkgPDwgOCkpICYgMHgwMEZGMDBGRjtcbiAgICB5ID0gKHkgfCAoeSA8PCA0KSkgJiAweDBGMEYwRjBGO1xuICAgIHkgPSAoeSB8ICh5IDw8IDIpKSAmIDB4MzMzMzMzMzM7XG4gICAgeSA9ICh5IHwgKHkgPDwgMSkpICYgMHg1NTU1NTU1NTtcblxuICAgIHJldHVybiB4IHwgKHkgPDwgMSk7XG59XG5cbi8vIGZpbmQgdGhlIGxlZnRtb3N0IG5vZGUgb2YgYSBwb2x5Z29uIHJpbmdcbmZ1bmN0aW9uIGdldExlZnRtb3N0KHN0YXJ0KSB7XG4gICAgdmFyIHAgPSBzdGFydCxcbiAgICAgICAgbGVmdG1vc3QgPSBzdGFydDtcbiAgICBkbyB7XG4gICAgICAgIGlmIChwLnggPCBsZWZ0bW9zdC54KSBsZWZ0bW9zdCA9IHA7XG4gICAgICAgIHAgPSBwLm5leHQ7XG4gICAgfSB3aGlsZSAocCAhPT0gc3RhcnQpO1xuXG4gICAgcmV0dXJuIGxlZnRtb3N0O1xufVxuXG4vLyBjaGVjayBpZiBhIHBvaW50IGxpZXMgd2l0aGluIGEgY29udmV4IHRyaWFuZ2xlXG5mdW5jdGlvbiBwb2ludEluVHJpYW5nbGUoYXgsIGF5LCBieCwgYnksIGN4LCBjeSwgcHgsIHB5KSB7XG4gICAgcmV0dXJuIChjeCAtIHB4KSAqIChheSAtIHB5KSAtIChheCAtIHB4KSAqIChjeSAtIHB5KSA+PSAwICYmXG4gICAgICAgICAgIChheCAtIHB4KSAqIChieSAtIHB5KSAtIChieCAtIHB4KSAqIChheSAtIHB5KSA+PSAwICYmXG4gICAgICAgICAgIChieCAtIHB4KSAqIChjeSAtIHB5KSAtIChjeCAtIHB4KSAqIChieSAtIHB5KSA+PSAwO1xufVxuXG4vLyBjaGVjayBpZiBhIGRpYWdvbmFsIGJldHdlZW4gdHdvIHBvbHlnb24gbm9kZXMgaXMgdmFsaWQgKGxpZXMgaW4gcG9seWdvbiBpbnRlcmlvcilcbmZ1bmN0aW9uIGlzVmFsaWREaWFnb25hbChhLCBiKSB7XG4gICAgcmV0dXJuIGVxdWFscyhhLCBiKSB8fCBhLm5leHQuaSAhPT0gYi5pICYmIGEucHJldi5pICE9PSBiLmkgJiYgIWludGVyc2VjdHNQb2x5Z29uKGEsIGIpICYmXG4gICAgICAgICAgIGxvY2FsbHlJbnNpZGUoYSwgYikgJiYgbG9jYWxseUluc2lkZShiLCBhKSAmJiBtaWRkbGVJbnNpZGUoYSwgYik7XG59XG5cbi8vIHNpZ25lZCBhcmVhIG9mIGEgdHJpYW5nbGVcbmZ1bmN0aW9uIGFyZWEocCwgcSwgcikge1xuICAgIHJldHVybiAocS55IC0gcC55KSAqIChyLnggLSBxLngpIC0gKHEueCAtIHAueCkgKiAoci55IC0gcS55KTtcbn1cblxuLy8gY2hlY2sgaWYgdHdvIHBvaW50cyBhcmUgZXF1YWxcbmZ1bmN0aW9uIGVxdWFscyhwMSwgcDIpIHtcbiAgICByZXR1cm4gcDEueCA9PT0gcDIueCAmJiBwMS55ID09PSBwMi55O1xufVxuXG4vLyBjaGVjayBpZiB0d28gc2VnbWVudHMgaW50ZXJzZWN0XG5mdW5jdGlvbiBpbnRlcnNlY3RzKHAxLCBxMSwgcDIsIHEyKSB7XG4gICAgcmV0dXJuIGFyZWEocDEsIHExLCBwMikgPiAwICE9PSBhcmVhKHAxLCBxMSwgcTIpID4gMCAmJlxuICAgICAgICAgICBhcmVhKHAyLCBxMiwgcDEpID4gMCAhPT0gYXJlYShwMiwgcTIsIHExKSA+IDA7XG59XG5cbi8vIGNoZWNrIGlmIGEgcG9seWdvbiBkaWFnb25hbCBpbnRlcnNlY3RzIGFueSBwb2x5Z29uIHNlZ21lbnRzXG5mdW5jdGlvbiBpbnRlcnNlY3RzUG9seWdvbihhLCBiKSB7XG4gICAgdmFyIHAgPSBhO1xuICAgIGRvIHtcbiAgICAgICAgaWYgKHAuaSAhPT0gYS5pICYmIHAubmV4dC5pICE9PSBhLmkgJiYgcC5pICE9PSBiLmkgJiYgcC5uZXh0LmkgIT09IGIuaSAmJlxuICAgICAgICAgICAgICAgIGludGVyc2VjdHMocCwgcC5uZXh0LCBhLCBiKSkgcmV0dXJuIHRydWU7XG4gICAgICAgIHAgPSBwLm5leHQ7XG4gICAgfSB3aGlsZSAocCAhPT0gYSk7XG5cbiAgICByZXR1cm4gZmFsc2U7XG59XG5cbi8vIGNoZWNrIGlmIGEgcG9seWdvbiBkaWFnb25hbCBpcyBsb2NhbGx5IGluc2lkZSB0aGUgcG9seWdvblxuZnVuY3Rpb24gbG9jYWxseUluc2lkZShhLCBiKSB7XG4gICAgcmV0dXJuIGFyZWEoYS5wcmV2LCBhLCBhLm5leHQpIDwgMCA/XG4gICAgICAgIGFyZWEoYSwgYiwgYS5uZXh0KSA+PSAwICYmIGFyZWEoYSwgYS5wcmV2LCBiKSA+PSAwIDpcbiAgICAgICAgYXJlYShhLCBiLCBhLnByZXYpIDwgMCB8fCBhcmVhKGEsIGEubmV4dCwgYikgPCAwO1xufVxuXG4vLyBjaGVjayBpZiB0aGUgbWlkZGxlIHBvaW50IG9mIGEgcG9seWdvbiBkaWFnb25hbCBpcyBpbnNpZGUgdGhlIHBvbHlnb25cbmZ1bmN0aW9uIG1pZGRsZUluc2lkZShhLCBiKSB7XG4gICAgdmFyIHAgPSBhLFxuICAgICAgICBpbnNpZGUgPSBmYWxzZSxcbiAgICAgICAgcHggPSAoYS54ICsgYi54KSAvIDIsXG4gICAgICAgIHB5ID0gKGEueSArIGIueSkgLyAyO1xuICAgIGRvIHtcbiAgICAgICAgaWYgKCgocC55ID4gcHkpICE9PSAocC5uZXh0LnkgPiBweSkpICYmIChweCA8IChwLm5leHQueCAtIHAueCkgKiAocHkgLSBwLnkpIC8gKHAubmV4dC55IC0gcC55KSArIHAueCkpXG4gICAgICAgICAgICBpbnNpZGUgPSAhaW5zaWRlO1xuICAgICAgICBwID0gcC5uZXh0O1xuICAgIH0gd2hpbGUgKHAgIT09IGEpO1xuXG4gICAgcmV0dXJuIGluc2lkZTtcbn1cblxuLy8gbGluayB0d28gcG9seWdvbiB2ZXJ0aWNlcyB3aXRoIGEgYnJpZGdlOyBpZiB0aGUgdmVydGljZXMgYmVsb25nIHRvIHRoZSBzYW1lIHJpbmcsIGl0IHNwbGl0cyBwb2x5Z29uIGludG8gdHdvO1xuLy8gaWYgb25lIGJlbG9uZ3MgdG8gdGhlIG91dGVyIHJpbmcgYW5kIGFub3RoZXIgdG8gYSBob2xlLCBpdCBtZXJnZXMgaXQgaW50byBhIHNpbmdsZSByaW5nXG5mdW5jdGlvbiBzcGxpdFBvbHlnb24oYSwgYikge1xuICAgIHZhciBhMiA9IG5ldyBOb2RlKGEuaSwgYS54LCBhLnkpLFxuICAgICAgICBiMiA9IG5ldyBOb2RlKGIuaSwgYi54LCBiLnkpLFxuICAgICAgICBhbiA9IGEubmV4dCxcbiAgICAgICAgYnAgPSBiLnByZXY7XG5cbiAgICBhLm5leHQgPSBiO1xuICAgIGIucHJldiA9IGE7XG5cbiAgICBhMi5uZXh0ID0gYW47XG4gICAgYW4ucHJldiA9IGEyO1xuXG4gICAgYjIubmV4dCA9IGEyO1xuICAgIGEyLnByZXYgPSBiMjtcblxuICAgIGJwLm5leHQgPSBiMjtcbiAgICBiMi5wcmV2ID0gYnA7XG5cbiAgICByZXR1cm4gYjI7XG59XG5cbi8vIGNyZWF0ZSBhIG5vZGUgYW5kIG9wdGlvbmFsbHkgbGluayBpdCB3aXRoIHByZXZpb3VzIG9uZSAoaW4gYSBjaXJjdWxhciBkb3VibHkgbGlua2VkIGxpc3QpXG5mdW5jdGlvbiBpbnNlcnROb2RlKGksIHgsIHksIGxhc3QpIHtcbiAgICB2YXIgcCA9IG5ldyBOb2RlKGksIHgsIHkpO1xuXG4gICAgaWYgKCFsYXN0KSB7XG4gICAgICAgIHAucHJldiA9IHA7XG4gICAgICAgIHAubmV4dCA9IHA7XG5cbiAgICB9IGVsc2Uge1xuICAgICAgICBwLm5leHQgPSBsYXN0Lm5leHQ7XG4gICAgICAgIHAucHJldiA9IGxhc3Q7XG4gICAgICAgIGxhc3QubmV4dC5wcmV2ID0gcDtcbiAgICAgICAgbGFzdC5uZXh0ID0gcDtcbiAgICB9XG4gICAgcmV0dXJuIHA7XG59XG5cbmZ1bmN0aW9uIHJlbW92ZU5vZGUocCkge1xuICAgIHAubmV4dC5wcmV2ID0gcC5wcmV2O1xuICAgIHAucHJldi5uZXh0ID0gcC5uZXh0O1xuXG4gICAgaWYgKHAucHJldlopIHAucHJldloubmV4dFogPSBwLm5leHRaO1xuICAgIGlmIChwLm5leHRaKSBwLm5leHRaLnByZXZaID0gcC5wcmV2Wjtcbn1cblxuZnVuY3Rpb24gTm9kZShpLCB4LCB5KSB7XG4gICAgLy8gdmVydGljZSBpbmRleCBpbiBjb29yZGluYXRlcyBhcnJheVxuICAgIHRoaXMuaSA9IGk7XG5cbiAgICAvLyB2ZXJ0ZXggY29vcmRpbmF0ZXNcbiAgICB0aGlzLnggPSB4O1xuICAgIHRoaXMueSA9IHk7XG5cbiAgICAvLyBwcmV2aW91cyBhbmQgbmV4dCB2ZXJ0aWNlIG5vZGVzIGluIGEgcG9seWdvbiByaW5nXG4gICAgdGhpcy5wcmV2ID0gbnVsbDtcbiAgICB0aGlzLm5leHQgPSBudWxsO1xuXG4gICAgLy8gei1vcmRlciBjdXJ2ZSB2YWx1ZVxuICAgIHRoaXMueiA9IG51bGw7XG5cbiAgICAvLyBwcmV2aW91cyBhbmQgbmV4dCBub2RlcyBpbiB6LW9yZGVyXG4gICAgdGhpcy5wcmV2WiA9IG51bGw7XG4gICAgdGhpcy5uZXh0WiA9IG51bGw7XG5cbiAgICAvLyBpbmRpY2F0ZXMgd2hldGhlciB0aGlzIGlzIGEgc3RlaW5lciBwb2ludFxuICAgIHRoaXMuc3RlaW5lciA9IGZhbHNlO1xufVxuIiwiJ3VzZSBzdHJpY3QnO1xuXG4vL1xuLy8gV2Ugc3RvcmUgb3VyIEVFIG9iamVjdHMgaW4gYSBwbGFpbiBvYmplY3Qgd2hvc2UgcHJvcGVydGllcyBhcmUgZXZlbnQgbmFtZXMuXG4vLyBJZiBgT2JqZWN0LmNyZWF0ZShudWxsKWAgaXMgbm90IHN1cHBvcnRlZCB3ZSBwcmVmaXggdGhlIGV2ZW50IG5hbWVzIHdpdGggYVxuLy8gYH5gIHRvIG1ha2Ugc3VyZSB0aGF0IHRoZSBidWlsdC1pbiBvYmplY3QgcHJvcGVydGllcyBhcmUgbm90IG92ZXJyaWRkZW4gb3Jcbi8vIHVzZWQgYXMgYW4gYXR0YWNrIHZlY3Rvci5cbi8vIFdlIGFsc28gYXNzdW1lIHRoYXQgYE9iamVjdC5jcmVhdGUobnVsbClgIGlzIGF2YWlsYWJsZSB3aGVuIHRoZSBldmVudCBuYW1lXG4vLyBpcyBhbiBFUzYgU3ltYm9sLlxuLy9cbnZhciBwcmVmaXggPSB0eXBlb2YgT2JqZWN0LmNyZWF0ZSAhPT0gJ2Z1bmN0aW9uJyA/ICd+JyA6IGZhbHNlO1xuXG4vKipcbiAqIFJlcHJlc2VudGF0aW9uIG9mIGEgc2luZ2xlIEV2ZW50RW1pdHRlciBmdW5jdGlvbi5cbiAqXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmbiBFdmVudCBoYW5kbGVyIHRvIGJlIGNhbGxlZC5cbiAqIEBwYXJhbSB7TWl4ZWR9IGNvbnRleHQgQ29udGV4dCBmb3IgZnVuY3Rpb24gZXhlY3V0aW9uLlxuICogQHBhcmFtIHtCb29sZWFufSBvbmNlIE9ubHkgZW1pdCBvbmNlXG4gKiBAYXBpIHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gRUUoZm4sIGNvbnRleHQsIG9uY2UpIHtcbiAgdGhpcy5mbiA9IGZuO1xuICB0aGlzLmNvbnRleHQgPSBjb250ZXh0O1xuICB0aGlzLm9uY2UgPSBvbmNlIHx8IGZhbHNlO1xufVxuXG4vKipcbiAqIE1pbmltYWwgRXZlbnRFbWl0dGVyIGludGVyZmFjZSB0aGF0IGlzIG1vbGRlZCBhZ2FpbnN0IHRoZSBOb2RlLmpzXG4gKiBFdmVudEVtaXR0ZXIgaW50ZXJmYWNlLlxuICpcbiAqIEBjb25zdHJ1Y3RvclxuICogQGFwaSBwdWJsaWNcbiAqL1xuZnVuY3Rpb24gRXZlbnRFbWl0dGVyKCkgeyAvKiBOb3RoaW5nIHRvIHNldCAqLyB9XG5cbi8qKlxuICogSG9sZHMgdGhlIGFzc2lnbmVkIEV2ZW50RW1pdHRlcnMgYnkgbmFtZS5cbiAqXG4gKiBAdHlwZSB7T2JqZWN0fVxuICogQHByaXZhdGVcbiAqL1xuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5fZXZlbnRzID0gdW5kZWZpbmVkO1xuXG4vKipcbiAqIFJldHVybiBhIGxpc3Qgb2YgYXNzaWduZWQgZXZlbnQgbGlzdGVuZXJzLlxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBldmVudCBUaGUgZXZlbnRzIHRoYXQgc2hvdWxkIGJlIGxpc3RlZC5cbiAqIEBwYXJhbSB7Qm9vbGVhbn0gZXhpc3RzIFdlIG9ubHkgbmVlZCB0byBrbm93IGlmIHRoZXJlIGFyZSBsaXN0ZW5lcnMuXG4gKiBAcmV0dXJucyB7QXJyYXl8Qm9vbGVhbn1cbiAqIEBhcGkgcHVibGljXG4gKi9cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUubGlzdGVuZXJzID0gZnVuY3Rpb24gbGlzdGVuZXJzKGV2ZW50LCBleGlzdHMpIHtcbiAgdmFyIGV2dCA9IHByZWZpeCA/IHByZWZpeCArIGV2ZW50IDogZXZlbnRcbiAgICAsIGF2YWlsYWJsZSA9IHRoaXMuX2V2ZW50cyAmJiB0aGlzLl9ldmVudHNbZXZ0XTtcblxuICBpZiAoZXhpc3RzKSByZXR1cm4gISFhdmFpbGFibGU7XG4gIGlmICghYXZhaWxhYmxlKSByZXR1cm4gW107XG4gIGlmIChhdmFpbGFibGUuZm4pIHJldHVybiBbYXZhaWxhYmxlLmZuXTtcblxuICBmb3IgKHZhciBpID0gMCwgbCA9IGF2YWlsYWJsZS5sZW5ndGgsIGVlID0gbmV3IEFycmF5KGwpOyBpIDwgbDsgaSsrKSB7XG4gICAgZWVbaV0gPSBhdmFpbGFibGVbaV0uZm47XG4gIH1cblxuICByZXR1cm4gZWU7XG59O1xuXG4vKipcbiAqIEVtaXQgYW4gZXZlbnQgdG8gYWxsIHJlZ2lzdGVyZWQgZXZlbnQgbGlzdGVuZXJzLlxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBldmVudCBUaGUgbmFtZSBvZiB0aGUgZXZlbnQuXG4gKiBAcmV0dXJucyB7Qm9vbGVhbn0gSW5kaWNhdGlvbiBpZiB3ZSd2ZSBlbWl0dGVkIGFuIGV2ZW50LlxuICogQGFwaSBwdWJsaWNcbiAqL1xuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5lbWl0ID0gZnVuY3Rpb24gZW1pdChldmVudCwgYTEsIGEyLCBhMywgYTQsIGE1KSB7XG4gIHZhciBldnQgPSBwcmVmaXggPyBwcmVmaXggKyBldmVudCA6IGV2ZW50O1xuXG4gIGlmICghdGhpcy5fZXZlbnRzIHx8ICF0aGlzLl9ldmVudHNbZXZ0XSkgcmV0dXJuIGZhbHNlO1xuXG4gIHZhciBsaXN0ZW5lcnMgPSB0aGlzLl9ldmVudHNbZXZ0XVxuICAgICwgbGVuID0gYXJndW1lbnRzLmxlbmd0aFxuICAgICwgYXJnc1xuICAgICwgaTtcblxuICBpZiAoJ2Z1bmN0aW9uJyA9PT0gdHlwZW9mIGxpc3RlbmVycy5mbikge1xuICAgIGlmIChsaXN0ZW5lcnMub25jZSkgdGhpcy5yZW1vdmVMaXN0ZW5lcihldmVudCwgbGlzdGVuZXJzLmZuLCB1bmRlZmluZWQsIHRydWUpO1xuXG4gICAgc3dpdGNoIChsZW4pIHtcbiAgICAgIGNhc2UgMTogcmV0dXJuIGxpc3RlbmVycy5mbi5jYWxsKGxpc3RlbmVycy5jb250ZXh0KSwgdHJ1ZTtcbiAgICAgIGNhc2UgMjogcmV0dXJuIGxpc3RlbmVycy5mbi5jYWxsKGxpc3RlbmVycy5jb250ZXh0LCBhMSksIHRydWU7XG4gICAgICBjYXNlIDM6IHJldHVybiBsaXN0ZW5lcnMuZm4uY2FsbChsaXN0ZW5lcnMuY29udGV4dCwgYTEsIGEyKSwgdHJ1ZTtcbiAgICAgIGNhc2UgNDogcmV0dXJuIGxpc3RlbmVycy5mbi5jYWxsKGxpc3RlbmVycy5jb250ZXh0LCBhMSwgYTIsIGEzKSwgdHJ1ZTtcbiAgICAgIGNhc2UgNTogcmV0dXJuIGxpc3RlbmVycy5mbi5jYWxsKGxpc3RlbmVycy5jb250ZXh0LCBhMSwgYTIsIGEzLCBhNCksIHRydWU7XG4gICAgICBjYXNlIDY6IHJldHVybiBsaXN0ZW5lcnMuZm4uY2FsbChsaXN0ZW5lcnMuY29udGV4dCwgYTEsIGEyLCBhMywgYTQsIGE1KSwgdHJ1ZTtcbiAgICB9XG5cbiAgICBmb3IgKGkgPSAxLCBhcmdzID0gbmV3IEFycmF5KGxlbiAtMSk7IGkgPCBsZW47IGkrKykge1xuICAgICAgYXJnc1tpIC0gMV0gPSBhcmd1bWVudHNbaV07XG4gICAgfVxuXG4gICAgbGlzdGVuZXJzLmZuLmFwcGx5KGxpc3RlbmVycy5jb250ZXh0LCBhcmdzKTtcbiAgfSBlbHNlIHtcbiAgICB2YXIgbGVuZ3RoID0gbGlzdGVuZXJzLmxlbmd0aFxuICAgICAgLCBqO1xuXG4gICAgZm9yIChpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAobGlzdGVuZXJzW2ldLm9uY2UpIHRoaXMucmVtb3ZlTGlzdGVuZXIoZXZlbnQsIGxpc3RlbmVyc1tpXS5mbiwgdW5kZWZpbmVkLCB0cnVlKTtcblxuICAgICAgc3dpdGNoIChsZW4pIHtcbiAgICAgICAgY2FzZSAxOiBsaXN0ZW5lcnNbaV0uZm4uY2FsbChsaXN0ZW5lcnNbaV0uY29udGV4dCk7IGJyZWFrO1xuICAgICAgICBjYXNlIDI6IGxpc3RlbmVyc1tpXS5mbi5jYWxsKGxpc3RlbmVyc1tpXS5jb250ZXh0LCBhMSk7IGJyZWFrO1xuICAgICAgICBjYXNlIDM6IGxpc3RlbmVyc1tpXS5mbi5jYWxsKGxpc3RlbmVyc1tpXS5jb250ZXh0LCBhMSwgYTIpOyBicmVhaztcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICBpZiAoIWFyZ3MpIGZvciAoaiA9IDEsIGFyZ3MgPSBuZXcgQXJyYXkobGVuIC0xKTsgaiA8IGxlbjsgaisrKSB7XG4gICAgICAgICAgICBhcmdzW2ogLSAxXSA9IGFyZ3VtZW50c1tqXTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBsaXN0ZW5lcnNbaV0uZm4uYXBwbHkobGlzdGVuZXJzW2ldLmNvbnRleHQsIGFyZ3MpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiB0cnVlO1xufTtcblxuLyoqXG4gKiBSZWdpc3RlciBhIG5ldyBFdmVudExpc3RlbmVyIGZvciB0aGUgZ2l2ZW4gZXZlbnQuXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IGV2ZW50IE5hbWUgb2YgdGhlIGV2ZW50LlxuICogQHBhcmFtIHtGdW5jdG9ufSBmbiBDYWxsYmFjayBmdW5jdGlvbi5cbiAqIEBwYXJhbSB7TWl4ZWR9IGNvbnRleHQgVGhlIGNvbnRleHQgb2YgdGhlIGZ1bmN0aW9uLlxuICogQGFwaSBwdWJsaWNcbiAqL1xuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5vbiA9IGZ1bmN0aW9uIG9uKGV2ZW50LCBmbiwgY29udGV4dCkge1xuICB2YXIgbGlzdGVuZXIgPSBuZXcgRUUoZm4sIGNvbnRleHQgfHwgdGhpcylcbiAgICAsIGV2dCA9IHByZWZpeCA/IHByZWZpeCArIGV2ZW50IDogZXZlbnQ7XG5cbiAgaWYgKCF0aGlzLl9ldmVudHMpIHRoaXMuX2V2ZW50cyA9IHByZWZpeCA/IHt9IDogT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgaWYgKCF0aGlzLl9ldmVudHNbZXZ0XSkgdGhpcy5fZXZlbnRzW2V2dF0gPSBsaXN0ZW5lcjtcbiAgZWxzZSB7XG4gICAgaWYgKCF0aGlzLl9ldmVudHNbZXZ0XS5mbikgdGhpcy5fZXZlbnRzW2V2dF0ucHVzaChsaXN0ZW5lcik7XG4gICAgZWxzZSB0aGlzLl9ldmVudHNbZXZ0XSA9IFtcbiAgICAgIHRoaXMuX2V2ZW50c1tldnRdLCBsaXN0ZW5lclxuICAgIF07XG4gIH1cblxuICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogQWRkIGFuIEV2ZW50TGlzdGVuZXIgdGhhdCdzIG9ubHkgY2FsbGVkIG9uY2UuXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IGV2ZW50IE5hbWUgb2YgdGhlIGV2ZW50LlxuICogQHBhcmFtIHtGdW5jdGlvbn0gZm4gQ2FsbGJhY2sgZnVuY3Rpb24uXG4gKiBAcGFyYW0ge01peGVkfSBjb250ZXh0IFRoZSBjb250ZXh0IG9mIHRoZSBmdW5jdGlvbi5cbiAqIEBhcGkgcHVibGljXG4gKi9cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUub25jZSA9IGZ1bmN0aW9uIG9uY2UoZXZlbnQsIGZuLCBjb250ZXh0KSB7XG4gIHZhciBsaXN0ZW5lciA9IG5ldyBFRShmbiwgY29udGV4dCB8fCB0aGlzLCB0cnVlKVxuICAgICwgZXZ0ID0gcHJlZml4ID8gcHJlZml4ICsgZXZlbnQgOiBldmVudDtcblxuICBpZiAoIXRoaXMuX2V2ZW50cykgdGhpcy5fZXZlbnRzID0gcHJlZml4ID8ge30gOiBPYmplY3QuY3JlYXRlKG51bGwpO1xuICBpZiAoIXRoaXMuX2V2ZW50c1tldnRdKSB0aGlzLl9ldmVudHNbZXZ0XSA9IGxpc3RlbmVyO1xuICBlbHNlIHtcbiAgICBpZiAoIXRoaXMuX2V2ZW50c1tldnRdLmZuKSB0aGlzLl9ldmVudHNbZXZ0XS5wdXNoKGxpc3RlbmVyKTtcbiAgICBlbHNlIHRoaXMuX2V2ZW50c1tldnRdID0gW1xuICAgICAgdGhpcy5fZXZlbnRzW2V2dF0sIGxpc3RlbmVyXG4gICAgXTtcbiAgfVxuXG4gIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBSZW1vdmUgZXZlbnQgbGlzdGVuZXJzLlxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBldmVudCBUaGUgZXZlbnQgd2Ugd2FudCB0byByZW1vdmUuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmbiBUaGUgbGlzdGVuZXIgdGhhdCB3ZSBuZWVkIHRvIGZpbmQuXG4gKiBAcGFyYW0ge01peGVkfSBjb250ZXh0IE9ubHkgcmVtb3ZlIGxpc3RlbmVycyBtYXRjaGluZyB0aGlzIGNvbnRleHQuXG4gKiBAcGFyYW0ge0Jvb2xlYW59IG9uY2UgT25seSByZW1vdmUgb25jZSBsaXN0ZW5lcnMuXG4gKiBAYXBpIHB1YmxpY1xuICovXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLnJlbW92ZUxpc3RlbmVyID0gZnVuY3Rpb24gcmVtb3ZlTGlzdGVuZXIoZXZlbnQsIGZuLCBjb250ZXh0LCBvbmNlKSB7XG4gIHZhciBldnQgPSBwcmVmaXggPyBwcmVmaXggKyBldmVudCA6IGV2ZW50O1xuXG4gIGlmICghdGhpcy5fZXZlbnRzIHx8ICF0aGlzLl9ldmVudHNbZXZ0XSkgcmV0dXJuIHRoaXM7XG5cbiAgdmFyIGxpc3RlbmVycyA9IHRoaXMuX2V2ZW50c1tldnRdXG4gICAgLCBldmVudHMgPSBbXTtcblxuICBpZiAoZm4pIHtcbiAgICBpZiAobGlzdGVuZXJzLmZuKSB7XG4gICAgICBpZiAoXG4gICAgICAgICAgIGxpc3RlbmVycy5mbiAhPT0gZm5cbiAgICAgICAgfHwgKG9uY2UgJiYgIWxpc3RlbmVycy5vbmNlKVxuICAgICAgICB8fCAoY29udGV4dCAmJiBsaXN0ZW5lcnMuY29udGV4dCAhPT0gY29udGV4dClcbiAgICAgICkge1xuICAgICAgICBldmVudHMucHVzaChsaXN0ZW5lcnMpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBmb3IgKHZhciBpID0gMCwgbGVuZ3RoID0gbGlzdGVuZXJzLmxlbmd0aDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICAgICBsaXN0ZW5lcnNbaV0uZm4gIT09IGZuXG4gICAgICAgICAgfHwgKG9uY2UgJiYgIWxpc3RlbmVyc1tpXS5vbmNlKVxuICAgICAgICAgIHx8IChjb250ZXh0ICYmIGxpc3RlbmVyc1tpXS5jb250ZXh0ICE9PSBjb250ZXh0KVxuICAgICAgICApIHtcbiAgICAgICAgICBldmVudHMucHVzaChsaXN0ZW5lcnNbaV0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLy9cbiAgLy8gUmVzZXQgdGhlIGFycmF5LCBvciByZW1vdmUgaXQgY29tcGxldGVseSBpZiB3ZSBoYXZlIG5vIG1vcmUgbGlzdGVuZXJzLlxuICAvL1xuICBpZiAoZXZlbnRzLmxlbmd0aCkge1xuICAgIHRoaXMuX2V2ZW50c1tldnRdID0gZXZlbnRzLmxlbmd0aCA9PT0gMSA/IGV2ZW50c1swXSA6IGV2ZW50cztcbiAgfSBlbHNlIHtcbiAgICBkZWxldGUgdGhpcy5fZXZlbnRzW2V2dF07XG4gIH1cblxuICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogUmVtb3ZlIGFsbCBsaXN0ZW5lcnMgb3Igb25seSB0aGUgbGlzdGVuZXJzIGZvciB0aGUgc3BlY2lmaWVkIGV2ZW50LlxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBldmVudCBUaGUgZXZlbnQgd2FudCB0byByZW1vdmUgYWxsIGxpc3RlbmVycyBmb3IuXG4gKiBAYXBpIHB1YmxpY1xuICovXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLnJlbW92ZUFsbExpc3RlbmVycyA9IGZ1bmN0aW9uIHJlbW92ZUFsbExpc3RlbmVycyhldmVudCkge1xuICBpZiAoIXRoaXMuX2V2ZW50cykgcmV0dXJuIHRoaXM7XG5cbiAgaWYgKGV2ZW50KSBkZWxldGUgdGhpcy5fZXZlbnRzW3ByZWZpeCA/IHByZWZpeCArIGV2ZW50IDogZXZlbnRdO1xuICBlbHNlIHRoaXMuX2V2ZW50cyA9IHByZWZpeCA/IHt9IDogT2JqZWN0LmNyZWF0ZShudWxsKTtcblxuICByZXR1cm4gdGhpcztcbn07XG5cbi8vXG4vLyBBbGlhcyBtZXRob2RzIG5hbWVzIGJlY2F1c2UgcGVvcGxlIHJvbGwgbGlrZSB0aGF0LlxuLy9cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUub2ZmID0gRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5yZW1vdmVMaXN0ZW5lcjtcbkV2ZW50RW1pdHRlci5wcm90b3R5cGUuYWRkTGlzdGVuZXIgPSBFdmVudEVtaXR0ZXIucHJvdG90eXBlLm9uO1xuXG4vL1xuLy8gVGhpcyBmdW5jdGlvbiBkb2Vzbid0IGFwcGx5IGFueW1vcmUuXG4vL1xuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5zZXRNYXhMaXN0ZW5lcnMgPSBmdW5jdGlvbiBzZXRNYXhMaXN0ZW5lcnMoKSB7XG4gIHJldHVybiB0aGlzO1xufTtcblxuLy9cbi8vIEV4cG9zZSB0aGUgcHJlZml4LlxuLy9cbkV2ZW50RW1pdHRlci5wcmVmaXhlZCA9IHByZWZpeDtcblxuLy9cbi8vIEV4cG9zZSB0aGUgbW9kdWxlLlxuLy9cbmlmICgndW5kZWZpbmVkJyAhPT0gdHlwZW9mIG1vZHVsZSkge1xuICBtb2R1bGUuZXhwb3J0cyA9IEV2ZW50RW1pdHRlcjtcbn1cbiIsIi8qIGVzbGludC1kaXNhYmxlIG5vLXVudXNlZC12YXJzICovXG4ndXNlIHN0cmljdCc7XG52YXIgaGFzT3duUHJvcGVydHkgPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O1xudmFyIHByb3BJc0VudW1lcmFibGUgPSBPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlO1xuXG5mdW5jdGlvbiB0b09iamVjdCh2YWwpIHtcblx0aWYgKHZhbCA9PT0gbnVsbCB8fCB2YWwgPT09IHVuZGVmaW5lZCkge1xuXHRcdHRocm93IG5ldyBUeXBlRXJyb3IoJ09iamVjdC5hc3NpZ24gY2Fubm90IGJlIGNhbGxlZCB3aXRoIG51bGwgb3IgdW5kZWZpbmVkJyk7XG5cdH1cblxuXHRyZXR1cm4gT2JqZWN0KHZhbCk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0LCBzb3VyY2UpIHtcblx0dmFyIGZyb207XG5cdHZhciB0byA9IHRvT2JqZWN0KHRhcmdldCk7XG5cdHZhciBzeW1ib2xzO1xuXG5cdGZvciAodmFyIHMgPSAxOyBzIDwgYXJndW1lbnRzLmxlbmd0aDsgcysrKSB7XG5cdFx0ZnJvbSA9IE9iamVjdChhcmd1bWVudHNbc10pO1xuXG5cdFx0Zm9yICh2YXIga2V5IGluIGZyb20pIHtcblx0XHRcdGlmIChoYXNPd25Qcm9wZXJ0eS5jYWxsKGZyb20sIGtleSkpIHtcblx0XHRcdFx0dG9ba2V5XSA9IGZyb21ba2V5XTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykge1xuXHRcdFx0c3ltYm9scyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZnJvbSk7XG5cdFx0XHRmb3IgKHZhciBpID0gMDsgaSA8IHN5bWJvbHMubGVuZ3RoOyBpKyspIHtcblx0XHRcdFx0aWYgKHByb3BJc0VudW1lcmFibGUuY2FsbChmcm9tLCBzeW1ib2xzW2ldKSkge1xuXHRcdFx0XHRcdHRvW3N5bWJvbHNbaV1dID0gZnJvbVtzeW1ib2xzW2ldXTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdHJldHVybiB0bztcbn07XG4iLCIvKiFcbiAqIGFzeW5jXG4gKiBodHRwczovL2dpdGh1Yi5jb20vY2FvbGFuL2FzeW5jXG4gKlxuICogQ29weXJpZ2h0IDIwMTAtMjAxNCBDYW9sYW4gTWNNYWhvblxuICogUmVsZWFzZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlXG4gKi9cbi8qanNoaW50IG9uZXZhcjogZmFsc2UsIGluZGVudDo0ICovXG4vKmdsb2JhbCBzZXRJbW1lZGlhdGU6IGZhbHNlLCBzZXRUaW1lb3V0OiBmYWxzZSwgY29uc29sZTogZmFsc2UgKi9cbihmdW5jdGlvbiAoKSB7XG5cbiAgICB2YXIgYXN5bmMgPSB7fTtcblxuICAgIC8vIGdsb2JhbCBvbiB0aGUgc2VydmVyLCB3aW5kb3cgaW4gdGhlIGJyb3dzZXJcbiAgICB2YXIgcm9vdCwgcHJldmlvdXNfYXN5bmM7XG5cbiAgICByb290ID0gdGhpcztcbiAgICBpZiAocm9vdCAhPSBudWxsKSB7XG4gICAgICBwcmV2aW91c19hc3luYyA9IHJvb3QuYXN5bmM7XG4gICAgfVxuXG4gICAgYXN5bmMubm9Db25mbGljdCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcm9vdC5hc3luYyA9IHByZXZpb3VzX2FzeW5jO1xuICAgICAgICByZXR1cm4gYXN5bmM7XG4gICAgfTtcblxuICAgIGZ1bmN0aW9uIG9ubHlfb25jZShmbikge1xuICAgICAgICB2YXIgY2FsbGVkID0gZmFsc2U7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIGlmIChjYWxsZWQpIHRocm93IG5ldyBFcnJvcihcIkNhbGxiYWNrIHdhcyBhbHJlYWR5IGNhbGxlZC5cIik7XG4gICAgICAgICAgICBjYWxsZWQgPSB0cnVlO1xuICAgICAgICAgICAgZm4uYXBwbHkocm9vdCwgYXJndW1lbnRzKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vLy8gY3Jvc3MtYnJvd3NlciBjb21wYXRpYmxpdHkgZnVuY3Rpb25zIC8vLy9cblxuICAgIHZhciBfdG9TdHJpbmcgPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nO1xuXG4gICAgdmFyIF9pc0FycmF5ID0gQXJyYXkuaXNBcnJheSB8fCBmdW5jdGlvbiAob2JqKSB7XG4gICAgICAgIHJldHVybiBfdG9TdHJpbmcuY2FsbChvYmopID09PSAnW29iamVjdCBBcnJheV0nO1xuICAgIH07XG5cbiAgICB2YXIgX2VhY2ggPSBmdW5jdGlvbiAoYXJyLCBpdGVyYXRvcikge1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFyci5sZW5ndGg7IGkgKz0gMSkge1xuICAgICAgICAgICAgaXRlcmF0b3IoYXJyW2ldLCBpLCBhcnIpO1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIHZhciBfbWFwID0gZnVuY3Rpb24gKGFyciwgaXRlcmF0b3IpIHtcbiAgICAgICAgaWYgKGFyci5tYXApIHtcbiAgICAgICAgICAgIHJldHVybiBhcnIubWFwKGl0ZXJhdG9yKTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgcmVzdWx0cyA9IFtdO1xuICAgICAgICBfZWFjaChhcnIsIGZ1bmN0aW9uICh4LCBpLCBhKSB7XG4gICAgICAgICAgICByZXN1bHRzLnB1c2goaXRlcmF0b3IoeCwgaSwgYSkpO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdHM7XG4gICAgfTtcblxuICAgIHZhciBfcmVkdWNlID0gZnVuY3Rpb24gKGFyciwgaXRlcmF0b3IsIG1lbW8pIHtcbiAgICAgICAgaWYgKGFyci5yZWR1Y2UpIHtcbiAgICAgICAgICAgIHJldHVybiBhcnIucmVkdWNlKGl0ZXJhdG9yLCBtZW1vKTtcbiAgICAgICAgfVxuICAgICAgICBfZWFjaChhcnIsIGZ1bmN0aW9uICh4LCBpLCBhKSB7XG4gICAgICAgICAgICBtZW1vID0gaXRlcmF0b3IobWVtbywgeCwgaSwgYSk7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gbWVtbztcbiAgICB9O1xuXG4gICAgdmFyIF9rZXlzID0gZnVuY3Rpb24gKG9iaikge1xuICAgICAgICBpZiAoT2JqZWN0LmtleXMpIHtcbiAgICAgICAgICAgIHJldHVybiBPYmplY3Qua2V5cyhvYmopO1xuICAgICAgICB9XG4gICAgICAgIHZhciBrZXlzID0gW107XG4gICAgICAgIGZvciAodmFyIGsgaW4gb2JqKSB7XG4gICAgICAgICAgICBpZiAob2JqLmhhc093blByb3BlcnR5KGspKSB7XG4gICAgICAgICAgICAgICAga2V5cy5wdXNoKGspO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBrZXlzO1xuICAgIH07XG5cbiAgICAvLy8vIGV4cG9ydGVkIGFzeW5jIG1vZHVsZSBmdW5jdGlvbnMgLy8vL1xuXG4gICAgLy8vLyBuZXh0VGljayBpbXBsZW1lbnRhdGlvbiB3aXRoIGJyb3dzZXItY29tcGF0aWJsZSBmYWxsYmFjayAvLy8vXG4gICAgaWYgKHR5cGVvZiBwcm9jZXNzID09PSAndW5kZWZpbmVkJyB8fCAhKHByb2Nlc3MubmV4dFRpY2spKSB7XG4gICAgICAgIGlmICh0eXBlb2Ygc2V0SW1tZWRpYXRlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICBhc3luYy5uZXh0VGljayA9IGZ1bmN0aW9uIChmbikge1xuICAgICAgICAgICAgICAgIC8vIG5vdCBhIGRpcmVjdCBhbGlhcyBmb3IgSUUxMCBjb21wYXRpYmlsaXR5XG4gICAgICAgICAgICAgICAgc2V0SW1tZWRpYXRlKGZuKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBhc3luYy5zZXRJbW1lZGlhdGUgPSBhc3luYy5uZXh0VGljaztcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGFzeW5jLm5leHRUaWNrID0gZnVuY3Rpb24gKGZuKSB7XG4gICAgICAgICAgICAgICAgc2V0VGltZW91dChmbiwgMCk7XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgYXN5bmMuc2V0SW1tZWRpYXRlID0gYXN5bmMubmV4dFRpY2s7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIGFzeW5jLm5leHRUaWNrID0gcHJvY2Vzcy5uZXh0VGljaztcbiAgICAgICAgaWYgKHR5cGVvZiBzZXRJbW1lZGlhdGUgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICBhc3luYy5zZXRJbW1lZGlhdGUgPSBmdW5jdGlvbiAoZm4pIHtcbiAgICAgICAgICAgICAgLy8gbm90IGEgZGlyZWN0IGFsaWFzIGZvciBJRTEwIGNvbXBhdGliaWxpdHlcbiAgICAgICAgICAgICAgc2V0SW1tZWRpYXRlKGZuKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBhc3luYy5zZXRJbW1lZGlhdGUgPSBhc3luYy5uZXh0VGljaztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGFzeW5jLmVhY2ggPSBmdW5jdGlvbiAoYXJyLCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgY2FsbGJhY2sgPSBjYWxsYmFjayB8fCBmdW5jdGlvbiAoKSB7fTtcbiAgICAgICAgaWYgKCFhcnIubGVuZ3RoKSB7XG4gICAgICAgICAgICByZXR1cm4gY2FsbGJhY2soKTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgY29tcGxldGVkID0gMDtcbiAgICAgICAgX2VhY2goYXJyLCBmdW5jdGlvbiAoeCkge1xuICAgICAgICAgICAgaXRlcmF0b3IoeCwgb25seV9vbmNlKGRvbmUpICk7XG4gICAgICAgIH0pO1xuICAgICAgICBmdW5jdGlvbiBkb25lKGVycikge1xuICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgICAgY2FsbGJhY2sgPSBmdW5jdGlvbiAoKSB7fTtcbiAgICAgICAgICB9XG4gICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgIGNvbXBsZXRlZCArPSAxO1xuICAgICAgICAgICAgICBpZiAoY29tcGxldGVkID49IGFyci5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9O1xuICAgIGFzeW5jLmZvckVhY2ggPSBhc3luYy5lYWNoO1xuXG4gICAgYXN5bmMuZWFjaFNlcmllcyA9IGZ1bmN0aW9uIChhcnIsIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICBjYWxsYmFjayA9IGNhbGxiYWNrIHx8IGZ1bmN0aW9uICgpIHt9O1xuICAgICAgICBpZiAoIWFyci5sZW5ndGgpIHtcbiAgICAgICAgICAgIHJldHVybiBjYWxsYmFjaygpO1xuICAgICAgICB9XG4gICAgICAgIHZhciBjb21wbGV0ZWQgPSAwO1xuICAgICAgICB2YXIgaXRlcmF0ZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGl0ZXJhdG9yKGFycltjb21wbGV0ZWRdLCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayA9IGZ1bmN0aW9uICgpIHt9O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgY29tcGxldGVkICs9IDE7XG4gICAgICAgICAgICAgICAgICAgIGlmIChjb21wbGV0ZWQgPj0gYXJyLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGl0ZXJhdGUoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9O1xuICAgICAgICBpdGVyYXRlKCk7XG4gICAgfTtcbiAgICBhc3luYy5mb3JFYWNoU2VyaWVzID0gYXN5bmMuZWFjaFNlcmllcztcblxuICAgIGFzeW5jLmVhY2hMaW1pdCA9IGZ1bmN0aW9uIChhcnIsIGxpbWl0LCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgdmFyIGZuID0gX2VhY2hMaW1pdChsaW1pdCk7XG4gICAgICAgIGZuLmFwcGx5KG51bGwsIFthcnIsIGl0ZXJhdG9yLCBjYWxsYmFja10pO1xuICAgIH07XG4gICAgYXN5bmMuZm9yRWFjaExpbWl0ID0gYXN5bmMuZWFjaExpbWl0O1xuXG4gICAgdmFyIF9lYWNoTGltaXQgPSBmdW5jdGlvbiAobGltaXQpIHtcblxuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKGFyciwgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICBjYWxsYmFjayA9IGNhbGxiYWNrIHx8IGZ1bmN0aW9uICgpIHt9O1xuICAgICAgICAgICAgaWYgKCFhcnIubGVuZ3RoIHx8IGxpbWl0IDw9IDApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gY2FsbGJhY2soKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHZhciBjb21wbGV0ZWQgPSAwO1xuICAgICAgICAgICAgdmFyIHN0YXJ0ZWQgPSAwO1xuICAgICAgICAgICAgdmFyIHJ1bm5pbmcgPSAwO1xuXG4gICAgICAgICAgICAoZnVuY3Rpb24gcmVwbGVuaXNoICgpIHtcbiAgICAgICAgICAgICAgICBpZiAoY29tcGxldGVkID49IGFyci5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKCk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgd2hpbGUgKHJ1bm5pbmcgPCBsaW1pdCAmJiBzdGFydGVkIDwgYXJyLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICBzdGFydGVkICs9IDE7XG4gICAgICAgICAgICAgICAgICAgIHJ1bm5pbmcgKz0gMTtcbiAgICAgICAgICAgICAgICAgICAgaXRlcmF0b3IoYXJyW3N0YXJ0ZWQgLSAxXSwgZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2sgPSBmdW5jdGlvbiAoKSB7fTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBsZXRlZCArPSAxO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJ1bm5pbmcgLT0gMTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY29tcGxldGVkID49IGFyci5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcGxlbmlzaCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSkoKTtcbiAgICAgICAgfTtcbiAgICB9O1xuXG5cbiAgICB2YXIgZG9QYXJhbGxlbCA9IGZ1bmN0aW9uIChmbikge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIGFyZ3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMpO1xuICAgICAgICAgICAgcmV0dXJuIGZuLmFwcGx5KG51bGwsIFthc3luYy5lYWNoXS5jb25jYXQoYXJncykpO1xuICAgICAgICB9O1xuICAgIH07XG4gICAgdmFyIGRvUGFyYWxsZWxMaW1pdCA9IGZ1bmN0aW9uKGxpbWl0LCBmbikge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIGFyZ3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMpO1xuICAgICAgICAgICAgcmV0dXJuIGZuLmFwcGx5KG51bGwsIFtfZWFjaExpbWl0KGxpbWl0KV0uY29uY2F0KGFyZ3MpKTtcbiAgICAgICAgfTtcbiAgICB9O1xuICAgIHZhciBkb1NlcmllcyA9IGZ1bmN0aW9uIChmbikge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIGFyZ3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMpO1xuICAgICAgICAgICAgcmV0dXJuIGZuLmFwcGx5KG51bGwsIFthc3luYy5lYWNoU2VyaWVzXS5jb25jYXQoYXJncykpO1xuICAgICAgICB9O1xuICAgIH07XG5cblxuICAgIHZhciBfYXN5bmNNYXAgPSBmdW5jdGlvbiAoZWFjaGZuLCBhcnIsIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICBhcnIgPSBfbWFwKGFyciwgZnVuY3Rpb24gKHgsIGkpIHtcbiAgICAgICAgICAgIHJldHVybiB7aW5kZXg6IGksIHZhbHVlOiB4fTtcbiAgICAgICAgfSk7XG4gICAgICAgIGlmICghY2FsbGJhY2spIHtcbiAgICAgICAgICAgIGVhY2hmbihhcnIsIGZ1bmN0aW9uICh4LCBjYWxsYmFjaykge1xuICAgICAgICAgICAgICAgIGl0ZXJhdG9yKHgudmFsdWUsIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdmFyIHJlc3VsdHMgPSBbXTtcbiAgICAgICAgICAgIGVhY2hmbihhcnIsIGZ1bmN0aW9uICh4LCBjYWxsYmFjaykge1xuICAgICAgICAgICAgICAgIGl0ZXJhdG9yKHgudmFsdWUsIGZ1bmN0aW9uIChlcnIsIHYpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0c1t4LmluZGV4XSA9IHY7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9LCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2soZXJyLCByZXN1bHRzKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBhc3luYy5tYXAgPSBkb1BhcmFsbGVsKF9hc3luY01hcCk7XG4gICAgYXN5bmMubWFwU2VyaWVzID0gZG9TZXJpZXMoX2FzeW5jTWFwKTtcbiAgICBhc3luYy5tYXBMaW1pdCA9IGZ1bmN0aW9uIChhcnIsIGxpbWl0LCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgcmV0dXJuIF9tYXBMaW1pdChsaW1pdCkoYXJyLCBpdGVyYXRvciwgY2FsbGJhY2spO1xuICAgIH07XG5cbiAgICB2YXIgX21hcExpbWl0ID0gZnVuY3Rpb24obGltaXQpIHtcbiAgICAgICAgcmV0dXJuIGRvUGFyYWxsZWxMaW1pdChsaW1pdCwgX2FzeW5jTWFwKTtcbiAgICB9O1xuXG4gICAgLy8gcmVkdWNlIG9ubHkgaGFzIGEgc2VyaWVzIHZlcnNpb24sIGFzIGRvaW5nIHJlZHVjZSBpbiBwYXJhbGxlbCB3b24ndFxuICAgIC8vIHdvcmsgaW4gbWFueSBzaXR1YXRpb25zLlxuICAgIGFzeW5jLnJlZHVjZSA9IGZ1bmN0aW9uIChhcnIsIG1lbW8sIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICBhc3luYy5lYWNoU2VyaWVzKGFyciwgZnVuY3Rpb24gKHgsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICBpdGVyYXRvcihtZW1vLCB4LCBmdW5jdGlvbiAoZXJyLCB2KSB7XG4gICAgICAgICAgICAgICAgbWVtbyA9IHY7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICBjYWxsYmFjayhlcnIsIG1lbW8pO1xuICAgICAgICB9KTtcbiAgICB9O1xuICAgIC8vIGluamVjdCBhbGlhc1xuICAgIGFzeW5jLmluamVjdCA9IGFzeW5jLnJlZHVjZTtcbiAgICAvLyBmb2xkbCBhbGlhc1xuICAgIGFzeW5jLmZvbGRsID0gYXN5bmMucmVkdWNlO1xuXG4gICAgYXN5bmMucmVkdWNlUmlnaHQgPSBmdW5jdGlvbiAoYXJyLCBtZW1vLCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgdmFyIHJldmVyc2VkID0gX21hcChhcnIsIGZ1bmN0aW9uICh4KSB7XG4gICAgICAgICAgICByZXR1cm4geDtcbiAgICAgICAgfSkucmV2ZXJzZSgpO1xuICAgICAgICBhc3luYy5yZWR1Y2UocmV2ZXJzZWQsIG1lbW8sIGl0ZXJhdG9yLCBjYWxsYmFjayk7XG4gICAgfTtcbiAgICAvLyBmb2xkciBhbGlhc1xuICAgIGFzeW5jLmZvbGRyID0gYXN5bmMucmVkdWNlUmlnaHQ7XG5cbiAgICB2YXIgX2ZpbHRlciA9IGZ1bmN0aW9uIChlYWNoZm4sIGFyciwgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgIHZhciByZXN1bHRzID0gW107XG4gICAgICAgIGFyciA9IF9tYXAoYXJyLCBmdW5jdGlvbiAoeCwgaSkge1xuICAgICAgICAgICAgcmV0dXJuIHtpbmRleDogaSwgdmFsdWU6IHh9O1xuICAgICAgICB9KTtcbiAgICAgICAgZWFjaGZuKGFyciwgZnVuY3Rpb24gKHgsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICBpdGVyYXRvcih4LnZhbHVlLCBmdW5jdGlvbiAodikge1xuICAgICAgICAgICAgICAgIGlmICh2KSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdHMucHVzaCh4KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2FsbGJhY2soKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICBjYWxsYmFjayhfbWFwKHJlc3VsdHMuc29ydChmdW5jdGlvbiAoYSwgYikge1xuICAgICAgICAgICAgICAgIHJldHVybiBhLmluZGV4IC0gYi5pbmRleDtcbiAgICAgICAgICAgIH0pLCBmdW5jdGlvbiAoeCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB4LnZhbHVlO1xuICAgICAgICAgICAgfSkpO1xuICAgICAgICB9KTtcbiAgICB9O1xuICAgIGFzeW5jLmZpbHRlciA9IGRvUGFyYWxsZWwoX2ZpbHRlcik7XG4gICAgYXN5bmMuZmlsdGVyU2VyaWVzID0gZG9TZXJpZXMoX2ZpbHRlcik7XG4gICAgLy8gc2VsZWN0IGFsaWFzXG4gICAgYXN5bmMuc2VsZWN0ID0gYXN5bmMuZmlsdGVyO1xuICAgIGFzeW5jLnNlbGVjdFNlcmllcyA9IGFzeW5jLmZpbHRlclNlcmllcztcblxuICAgIHZhciBfcmVqZWN0ID0gZnVuY3Rpb24gKGVhY2hmbiwgYXJyLCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgdmFyIHJlc3VsdHMgPSBbXTtcbiAgICAgICAgYXJyID0gX21hcChhcnIsIGZ1bmN0aW9uICh4LCBpKSB7XG4gICAgICAgICAgICByZXR1cm4ge2luZGV4OiBpLCB2YWx1ZTogeH07XG4gICAgICAgIH0pO1xuICAgICAgICBlYWNoZm4oYXJyLCBmdW5jdGlvbiAoeCwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIGl0ZXJhdG9yKHgudmFsdWUsIGZ1bmN0aW9uICh2KSB7XG4gICAgICAgICAgICAgICAgaWYgKCF2KSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdHMucHVzaCh4KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2FsbGJhY2soKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICBjYWxsYmFjayhfbWFwKHJlc3VsdHMuc29ydChmdW5jdGlvbiAoYSwgYikge1xuICAgICAgICAgICAgICAgIHJldHVybiBhLmluZGV4IC0gYi5pbmRleDtcbiAgICAgICAgICAgIH0pLCBmdW5jdGlvbiAoeCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB4LnZhbHVlO1xuICAgICAgICAgICAgfSkpO1xuICAgICAgICB9KTtcbiAgICB9O1xuICAgIGFzeW5jLnJlamVjdCA9IGRvUGFyYWxsZWwoX3JlamVjdCk7XG4gICAgYXN5bmMucmVqZWN0U2VyaWVzID0gZG9TZXJpZXMoX3JlamVjdCk7XG5cbiAgICB2YXIgX2RldGVjdCA9IGZ1bmN0aW9uIChlYWNoZm4sIGFyciwgaXRlcmF0b3IsIG1haW5fY2FsbGJhY2spIHtcbiAgICAgICAgZWFjaGZuKGFyciwgZnVuY3Rpb24gKHgsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICBpdGVyYXRvcih4LCBmdW5jdGlvbiAocmVzdWx0KSB7XG4gICAgICAgICAgICAgICAgaWYgKHJlc3VsdCkge1xuICAgICAgICAgICAgICAgICAgICBtYWluX2NhbGxiYWNrKHgpO1xuICAgICAgICAgICAgICAgICAgICBtYWluX2NhbGxiYWNrID0gZnVuY3Rpb24gKCkge307XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICBtYWluX2NhbGxiYWNrKCk7XG4gICAgICAgIH0pO1xuICAgIH07XG4gICAgYXN5bmMuZGV0ZWN0ID0gZG9QYXJhbGxlbChfZGV0ZWN0KTtcbiAgICBhc3luYy5kZXRlY3RTZXJpZXMgPSBkb1NlcmllcyhfZGV0ZWN0KTtcblxuICAgIGFzeW5jLnNvbWUgPSBmdW5jdGlvbiAoYXJyLCBpdGVyYXRvciwgbWFpbl9jYWxsYmFjaykge1xuICAgICAgICBhc3luYy5lYWNoKGFyciwgZnVuY3Rpb24gKHgsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICBpdGVyYXRvcih4LCBmdW5jdGlvbiAodikge1xuICAgICAgICAgICAgICAgIGlmICh2KSB7XG4gICAgICAgICAgICAgICAgICAgIG1haW5fY2FsbGJhY2sodHJ1ZSk7XG4gICAgICAgICAgICAgICAgICAgIG1haW5fY2FsbGJhY2sgPSBmdW5jdGlvbiAoKSB7fTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2FsbGJhY2soKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICBtYWluX2NhbGxiYWNrKGZhbHNlKTtcbiAgICAgICAgfSk7XG4gICAgfTtcbiAgICAvLyBhbnkgYWxpYXNcbiAgICBhc3luYy5hbnkgPSBhc3luYy5zb21lO1xuXG4gICAgYXN5bmMuZXZlcnkgPSBmdW5jdGlvbiAoYXJyLCBpdGVyYXRvciwgbWFpbl9jYWxsYmFjaykge1xuICAgICAgICBhc3luYy5lYWNoKGFyciwgZnVuY3Rpb24gKHgsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICBpdGVyYXRvcih4LCBmdW5jdGlvbiAodikge1xuICAgICAgICAgICAgICAgIGlmICghdikge1xuICAgICAgICAgICAgICAgICAgICBtYWluX2NhbGxiYWNrKGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgICAgbWFpbl9jYWxsYmFjayA9IGZ1bmN0aW9uICgpIHt9O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgIG1haW5fY2FsbGJhY2sodHJ1ZSk7XG4gICAgICAgIH0pO1xuICAgIH07XG4gICAgLy8gYWxsIGFsaWFzXG4gICAgYXN5bmMuYWxsID0gYXN5bmMuZXZlcnk7XG5cbiAgICBhc3luYy5zb3J0QnkgPSBmdW5jdGlvbiAoYXJyLCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgYXN5bmMubWFwKGFyciwgZnVuY3Rpb24gKHgsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICBpdGVyYXRvcih4LCBmdW5jdGlvbiAoZXJyLCBjcml0ZXJpYSkge1xuICAgICAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKG51bGwsIHt2YWx1ZTogeCwgY3JpdGVyaWE6IGNyaXRlcmlhfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sIGZ1bmN0aW9uIChlcnIsIHJlc3VsdHMpIHtcbiAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHZhciBmbiA9IGZ1bmN0aW9uIChsZWZ0LCByaWdodCkge1xuICAgICAgICAgICAgICAgICAgICB2YXIgYSA9IGxlZnQuY3JpdGVyaWEsIGIgPSByaWdodC5jcml0ZXJpYTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGEgPCBiID8gLTEgOiBhID4gYiA/IDEgOiAwO1xuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgY2FsbGJhY2sobnVsbCwgX21hcChyZXN1bHRzLnNvcnQoZm4pLCBmdW5jdGlvbiAoeCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4geC52YWx1ZTtcbiAgICAgICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH07XG5cbiAgICBhc3luYy5hdXRvID0gZnVuY3Rpb24gKHRhc2tzLCBjYWxsYmFjaykge1xuICAgICAgICBjYWxsYmFjayA9IGNhbGxiYWNrIHx8IGZ1bmN0aW9uICgpIHt9O1xuICAgICAgICB2YXIga2V5cyA9IF9rZXlzKHRhc2tzKTtcbiAgICAgICAgdmFyIHJlbWFpbmluZ1Rhc2tzID0ga2V5cy5sZW5ndGhcbiAgICAgICAgaWYgKCFyZW1haW5pbmdUYXNrcykge1xuICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKCk7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgcmVzdWx0cyA9IHt9O1xuXG4gICAgICAgIHZhciBsaXN0ZW5lcnMgPSBbXTtcbiAgICAgICAgdmFyIGFkZExpc3RlbmVyID0gZnVuY3Rpb24gKGZuKSB7XG4gICAgICAgICAgICBsaXN0ZW5lcnMudW5zaGlmdChmbik7XG4gICAgICAgIH07XG4gICAgICAgIHZhciByZW1vdmVMaXN0ZW5lciA9IGZ1bmN0aW9uIChmbikge1xuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsaXN0ZW5lcnMubGVuZ3RoOyBpICs9IDEpIHtcbiAgICAgICAgICAgICAgICBpZiAobGlzdGVuZXJzW2ldID09PSBmbikge1xuICAgICAgICAgICAgICAgICAgICBsaXN0ZW5lcnMuc3BsaWNlKGksIDEpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICB2YXIgdGFza0NvbXBsZXRlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmVtYWluaW5nVGFza3MtLVxuICAgICAgICAgICAgX2VhY2gobGlzdGVuZXJzLnNsaWNlKDApLCBmdW5jdGlvbiAoZm4pIHtcbiAgICAgICAgICAgICAgICBmbigpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH07XG5cbiAgICAgICAgYWRkTGlzdGVuZXIoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgaWYgKCFyZW1haW5pbmdUYXNrcykge1xuICAgICAgICAgICAgICAgIHZhciB0aGVDYWxsYmFjayA9IGNhbGxiYWNrO1xuICAgICAgICAgICAgICAgIC8vIHByZXZlbnQgZmluYWwgY2FsbGJhY2sgZnJvbSBjYWxsaW5nIGl0c2VsZiBpZiBpdCBlcnJvcnNcbiAgICAgICAgICAgICAgICBjYWxsYmFjayA9IGZ1bmN0aW9uICgpIHt9O1xuXG4gICAgICAgICAgICAgICAgdGhlQ2FsbGJhY2sobnVsbCwgcmVzdWx0cyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIF9lYWNoKGtleXMsIGZ1bmN0aW9uIChrKSB7XG4gICAgICAgICAgICB2YXIgdGFzayA9IF9pc0FycmF5KHRhc2tzW2tdKSA/IHRhc2tzW2tdOiBbdGFza3Nba11dO1xuICAgICAgICAgICAgdmFyIHRhc2tDYWxsYmFjayA9IGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgICAgICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMSk7XG4gICAgICAgICAgICAgICAgaWYgKGFyZ3MubGVuZ3RoIDw9IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgYXJncyA9IGFyZ3NbMF07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHNhZmVSZXN1bHRzID0ge307XG4gICAgICAgICAgICAgICAgICAgIF9lYWNoKF9rZXlzKHJlc3VsdHMpLCBmdW5jdGlvbihya2V5KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzYWZlUmVzdWx0c1tya2V5XSA9IHJlc3VsdHNbcmtleV07XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICBzYWZlUmVzdWx0c1trXSA9IGFyZ3M7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKGVyciwgc2FmZVJlc3VsdHMpO1xuICAgICAgICAgICAgICAgICAgICAvLyBzdG9wIHN1YnNlcXVlbnQgZXJyb3JzIGhpdHRpbmcgY2FsbGJhY2sgbXVsdGlwbGUgdGltZXNcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2sgPSBmdW5jdGlvbiAoKSB7fTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdHNba10gPSBhcmdzO1xuICAgICAgICAgICAgICAgICAgICBhc3luYy5zZXRJbW1lZGlhdGUodGFza0NvbXBsZXRlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgdmFyIHJlcXVpcmVzID0gdGFzay5zbGljZSgwLCBNYXRoLmFicyh0YXNrLmxlbmd0aCAtIDEpKSB8fCBbXTtcbiAgICAgICAgICAgIHZhciByZWFkeSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gX3JlZHVjZShyZXF1aXJlcywgZnVuY3Rpb24gKGEsIHgpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChhICYmIHJlc3VsdHMuaGFzT3duUHJvcGVydHkoeCkpO1xuICAgICAgICAgICAgICAgIH0sIHRydWUpICYmICFyZXN1bHRzLmhhc093blByb3BlcnR5KGspO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGlmIChyZWFkeSgpKSB7XG4gICAgICAgICAgICAgICAgdGFza1t0YXNrLmxlbmd0aCAtIDFdKHRhc2tDYWxsYmFjaywgcmVzdWx0cyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICB2YXIgbGlzdGVuZXIgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChyZWFkeSgpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZW1vdmVMaXN0ZW5lcihsaXN0ZW5lcik7XG4gICAgICAgICAgICAgICAgICAgICAgICB0YXNrW3Rhc2subGVuZ3RoIC0gMV0odGFza0NhbGxiYWNrLCByZXN1bHRzKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgYWRkTGlzdGVuZXIobGlzdGVuZXIpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9O1xuXG4gICAgYXN5bmMucmV0cnkgPSBmdW5jdGlvbih0aW1lcywgdGFzaywgY2FsbGJhY2spIHtcbiAgICAgICAgdmFyIERFRkFVTFRfVElNRVMgPSA1O1xuICAgICAgICB2YXIgYXR0ZW1wdHMgPSBbXTtcbiAgICAgICAgLy8gVXNlIGRlZmF1bHRzIGlmIHRpbWVzIG5vdCBwYXNzZWRcbiAgICAgICAgaWYgKHR5cGVvZiB0aW1lcyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgY2FsbGJhY2sgPSB0YXNrO1xuICAgICAgICAgICAgdGFzayA9IHRpbWVzO1xuICAgICAgICAgICAgdGltZXMgPSBERUZBVUxUX1RJTUVTO1xuICAgICAgICB9XG4gICAgICAgIC8vIE1ha2Ugc3VyZSB0aW1lcyBpcyBhIG51bWJlclxuICAgICAgICB0aW1lcyA9IHBhcnNlSW50KHRpbWVzLCAxMCkgfHwgREVGQVVMVF9USU1FUztcbiAgICAgICAgdmFyIHdyYXBwZWRUYXNrID0gZnVuY3Rpb24od3JhcHBlZENhbGxiYWNrLCB3cmFwcGVkUmVzdWx0cykge1xuICAgICAgICAgICAgdmFyIHJldHJ5QXR0ZW1wdCA9IGZ1bmN0aW9uKHRhc2ssIGZpbmFsQXR0ZW1wdCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbihzZXJpZXNDYWxsYmFjaykge1xuICAgICAgICAgICAgICAgICAgICB0YXNrKGZ1bmN0aW9uKGVyciwgcmVzdWx0KXtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlcmllc0NhbGxiYWNrKCFlcnIgfHwgZmluYWxBdHRlbXB0LCB7ZXJyOiBlcnIsIHJlc3VsdDogcmVzdWx0fSk7XG4gICAgICAgICAgICAgICAgICAgIH0sIHdyYXBwZWRSZXN1bHRzKTtcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIHdoaWxlICh0aW1lcykge1xuICAgICAgICAgICAgICAgIGF0dGVtcHRzLnB1c2gocmV0cnlBdHRlbXB0KHRhc2ssICEodGltZXMtPTEpKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBhc3luYy5zZXJpZXMoYXR0ZW1wdHMsIGZ1bmN0aW9uKGRvbmUsIGRhdGEpe1xuICAgICAgICAgICAgICAgIGRhdGEgPSBkYXRhW2RhdGEubGVuZ3RoIC0gMV07XG4gICAgICAgICAgICAgICAgKHdyYXBwZWRDYWxsYmFjayB8fCBjYWxsYmFjaykoZGF0YS5lcnIsIGRhdGEucmVzdWx0KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIC8vIElmIGEgY2FsbGJhY2sgaXMgcGFzc2VkLCBydW4gdGhpcyBhcyBhIGNvbnRyb2xsIGZsb3dcbiAgICAgICAgcmV0dXJuIGNhbGxiYWNrID8gd3JhcHBlZFRhc2soKSA6IHdyYXBwZWRUYXNrXG4gICAgfTtcblxuICAgIGFzeW5jLndhdGVyZmFsbCA9IGZ1bmN0aW9uICh0YXNrcywgY2FsbGJhY2spIHtcbiAgICAgICAgY2FsbGJhY2sgPSBjYWxsYmFjayB8fCBmdW5jdGlvbiAoKSB7fTtcbiAgICAgICAgaWYgKCFfaXNBcnJheSh0YXNrcykpIHtcbiAgICAgICAgICB2YXIgZXJyID0gbmV3IEVycm9yKCdGaXJzdCBhcmd1bWVudCB0byB3YXRlcmZhbGwgbXVzdCBiZSBhbiBhcnJheSBvZiBmdW5jdGlvbnMnKTtcbiAgICAgICAgICByZXR1cm4gY2FsbGJhY2soZXJyKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIXRhc2tzLmxlbmd0aCkge1xuICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKCk7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIHdyYXBJdGVyYXRvciA9IGZ1bmN0aW9uIChpdGVyYXRvcikge1xuICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrID0gZnVuY3Rpb24gKCkge307XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMSk7XG4gICAgICAgICAgICAgICAgICAgIHZhciBuZXh0ID0gaXRlcmF0b3IubmV4dCgpO1xuICAgICAgICAgICAgICAgICAgICBpZiAobmV4dCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgYXJncy5wdXNoKHdyYXBJdGVyYXRvcihuZXh0KSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhcmdzLnB1c2goY2FsbGJhY2spO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGFzeW5jLnNldEltbWVkaWF0ZShmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpdGVyYXRvci5hcHBseShudWxsLCBhcmdzKTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfTtcbiAgICAgICAgfTtcbiAgICAgICAgd3JhcEl0ZXJhdG9yKGFzeW5jLml0ZXJhdG9yKHRhc2tzKSkoKTtcbiAgICB9O1xuXG4gICAgdmFyIF9wYXJhbGxlbCA9IGZ1bmN0aW9uKGVhY2hmbiwgdGFza3MsIGNhbGxiYWNrKSB7XG4gICAgICAgIGNhbGxiYWNrID0gY2FsbGJhY2sgfHwgZnVuY3Rpb24gKCkge307XG4gICAgICAgIGlmIChfaXNBcnJheSh0YXNrcykpIHtcbiAgICAgICAgICAgIGVhY2hmbi5tYXAodGFza3MsIGZ1bmN0aW9uIChmbiwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgICAgICBpZiAoZm4pIHtcbiAgICAgICAgICAgICAgICAgICAgZm4oZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGFyZ3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsIDEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFyZ3MubGVuZ3RoIDw9IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmdzID0gYXJnc1swXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrLmNhbGwobnVsbCwgZXJyLCBhcmdzKTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSwgY2FsbGJhY2spO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdmFyIHJlc3VsdHMgPSB7fTtcbiAgICAgICAgICAgIGVhY2hmbi5lYWNoKF9rZXlzKHRhc2tzKSwgZnVuY3Rpb24gKGssIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICAgICAgdGFza3Nba10oZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgICAgICAgICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMSk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChhcmdzLmxlbmd0aCA8PSAxKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhcmdzID0gYXJnc1swXTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICByZXN1bHRzW2tdID0gYXJncztcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0sIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnIsIHJlc3VsdHMpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgYXN5bmMucGFyYWxsZWwgPSBmdW5jdGlvbiAodGFza3MsIGNhbGxiYWNrKSB7XG4gICAgICAgIF9wYXJhbGxlbCh7IG1hcDogYXN5bmMubWFwLCBlYWNoOiBhc3luYy5lYWNoIH0sIHRhc2tzLCBjYWxsYmFjayk7XG4gICAgfTtcblxuICAgIGFzeW5jLnBhcmFsbGVsTGltaXQgPSBmdW5jdGlvbih0YXNrcywgbGltaXQsIGNhbGxiYWNrKSB7XG4gICAgICAgIF9wYXJhbGxlbCh7IG1hcDogX21hcExpbWl0KGxpbWl0KSwgZWFjaDogX2VhY2hMaW1pdChsaW1pdCkgfSwgdGFza3MsIGNhbGxiYWNrKTtcbiAgICB9O1xuXG4gICAgYXN5bmMuc2VyaWVzID0gZnVuY3Rpb24gKHRhc2tzLCBjYWxsYmFjaykge1xuICAgICAgICBjYWxsYmFjayA9IGNhbGxiYWNrIHx8IGZ1bmN0aW9uICgpIHt9O1xuICAgICAgICBpZiAoX2lzQXJyYXkodGFza3MpKSB7XG4gICAgICAgICAgICBhc3luYy5tYXBTZXJpZXModGFza3MsIGZ1bmN0aW9uIChmbiwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgICAgICBpZiAoZm4pIHtcbiAgICAgICAgICAgICAgICAgICAgZm4oZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGFyZ3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsIDEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFyZ3MubGVuZ3RoIDw9IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmdzID0gYXJnc1swXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrLmNhbGwobnVsbCwgZXJyLCBhcmdzKTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSwgY2FsbGJhY2spO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdmFyIHJlc3VsdHMgPSB7fTtcbiAgICAgICAgICAgIGFzeW5jLmVhY2hTZXJpZXMoX2tleXModGFza3MpLCBmdW5jdGlvbiAoaywgY2FsbGJhY2spIHtcbiAgICAgICAgICAgICAgICB0YXNrc1trXShmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBhcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGFyZ3MubGVuZ3RoIDw9IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3MgPSBhcmdzWzBdO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdHNba10gPSBhcmdzO1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSwgZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrKGVyciwgcmVzdWx0cyk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH07XG5cbiAgICBhc3luYy5pdGVyYXRvciA9IGZ1bmN0aW9uICh0YXNrcykge1xuICAgICAgICB2YXIgbWFrZUNhbGxiYWNrID0gZnVuY3Rpb24gKGluZGV4KSB7XG4gICAgICAgICAgICB2YXIgZm4gPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgaWYgKHRhc2tzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICB0YXNrc1tpbmRleF0uYXBwbHkobnVsbCwgYXJndW1lbnRzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZuLm5leHQoKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBmbi5uZXh0ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiAoaW5kZXggPCB0YXNrcy5sZW5ndGggLSAxKSA/IG1ha2VDYWxsYmFjayhpbmRleCArIDEpOiBudWxsO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIHJldHVybiBmbjtcbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIG1ha2VDYWxsYmFjaygwKTtcbiAgICB9O1xuXG4gICAgYXN5bmMuYXBwbHkgPSBmdW5jdGlvbiAoZm4pIHtcbiAgICAgICAgdmFyIGFyZ3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsIDEpO1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIGZuLmFwcGx5KFxuICAgICAgICAgICAgICAgIG51bGwsIGFyZ3MuY29uY2F0KEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cykpXG4gICAgICAgICAgICApO1xuICAgICAgICB9O1xuICAgIH07XG5cbiAgICB2YXIgX2NvbmNhdCA9IGZ1bmN0aW9uIChlYWNoZm4sIGFyciwgZm4sIGNhbGxiYWNrKSB7XG4gICAgICAgIHZhciByID0gW107XG4gICAgICAgIGVhY2hmbihhcnIsIGZ1bmN0aW9uICh4LCBjYikge1xuICAgICAgICAgICAgZm4oeCwgZnVuY3Rpb24gKGVyciwgeSkge1xuICAgICAgICAgICAgICAgIHIgPSByLmNvbmNhdCh5IHx8IFtdKTtcbiAgICAgICAgICAgICAgICBjYihlcnIpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgIGNhbGxiYWNrKGVyciwgcik7XG4gICAgICAgIH0pO1xuICAgIH07XG4gICAgYXN5bmMuY29uY2F0ID0gZG9QYXJhbGxlbChfY29uY2F0KTtcbiAgICBhc3luYy5jb25jYXRTZXJpZXMgPSBkb1NlcmllcyhfY29uY2F0KTtcblxuICAgIGFzeW5jLndoaWxzdCA9IGZ1bmN0aW9uICh0ZXN0LCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgaWYgKHRlc3QoKSkge1xuICAgICAgICAgICAgaXRlcmF0b3IoZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGFzeW5jLndoaWxzdCh0ZXN0LCBpdGVyYXRvciwgY2FsbGJhY2spO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIGFzeW5jLmRvV2hpbHN0ID0gZnVuY3Rpb24gKGl0ZXJhdG9yLCB0ZXN0LCBjYWxsYmFjaykge1xuICAgICAgICBpdGVyYXRvcihmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMSk7XG4gICAgICAgICAgICBpZiAodGVzdC5hcHBseShudWxsLCBhcmdzKSkge1xuICAgICAgICAgICAgICAgIGFzeW5jLmRvV2hpbHN0KGl0ZXJhdG9yLCB0ZXN0LCBjYWxsYmFjayk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9O1xuXG4gICAgYXN5bmMudW50aWwgPSBmdW5jdGlvbiAodGVzdCwgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgIGlmICghdGVzdCgpKSB7XG4gICAgICAgICAgICBpdGVyYXRvcihmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYXN5bmMudW50aWwodGVzdCwgaXRlcmF0b3IsIGNhbGxiYWNrKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgY2FsbGJhY2soKTtcbiAgICAgICAgfVxuICAgIH07XG5cbiAgICBhc3luYy5kb1VudGlsID0gZnVuY3Rpb24gKGl0ZXJhdG9yLCB0ZXN0LCBjYWxsYmFjaykge1xuICAgICAgICBpdGVyYXRvcihmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMSk7XG4gICAgICAgICAgICBpZiAoIXRlc3QuYXBwbHkobnVsbCwgYXJncykpIHtcbiAgICAgICAgICAgICAgICBhc3luYy5kb1VudGlsKGl0ZXJhdG9yLCB0ZXN0LCBjYWxsYmFjayk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9O1xuXG4gICAgYXN5bmMucXVldWUgPSBmdW5jdGlvbiAod29ya2VyLCBjb25jdXJyZW5jeSkge1xuICAgICAgICBpZiAoY29uY3VycmVuY3kgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgY29uY3VycmVuY3kgPSAxO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIF9pbnNlcnQocSwgZGF0YSwgcG9zLCBjYWxsYmFjaykge1xuICAgICAgICAgIGlmICghcS5zdGFydGVkKXtcbiAgICAgICAgICAgIHEuc3RhcnRlZCA9IHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICghX2lzQXJyYXkoZGF0YSkpIHtcbiAgICAgICAgICAgICAgZGF0YSA9IFtkYXRhXTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYoZGF0YS5sZW5ndGggPT0gMCkge1xuICAgICAgICAgICAgIC8vIGNhbGwgZHJhaW4gaW1tZWRpYXRlbHkgaWYgdGhlcmUgYXJlIG5vIHRhc2tzXG4gICAgICAgICAgICAgcmV0dXJuIGFzeW5jLnNldEltbWVkaWF0ZShmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgaWYgKHEuZHJhaW4pIHtcbiAgICAgICAgICAgICAgICAgICAgIHEuZHJhaW4oKTtcbiAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgICBfZWFjaChkYXRhLCBmdW5jdGlvbih0YXNrKSB7XG4gICAgICAgICAgICAgIHZhciBpdGVtID0ge1xuICAgICAgICAgICAgICAgICAgZGF0YTogdGFzayxcbiAgICAgICAgICAgICAgICAgIGNhbGxiYWNrOiB0eXBlb2YgY2FsbGJhY2sgPT09ICdmdW5jdGlvbicgPyBjYWxsYmFjayA6IG51bGxcbiAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICBpZiAocG9zKSB7XG4gICAgICAgICAgICAgICAgcS50YXNrcy51bnNoaWZ0KGl0ZW0pO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHEudGFza3MucHVzaChpdGVtKTtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGlmIChxLnNhdHVyYXRlZCAmJiBxLnRhc2tzLmxlbmd0aCA9PT0gcS5jb25jdXJyZW5jeSkge1xuICAgICAgICAgICAgICAgICAgcS5zYXR1cmF0ZWQoKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBhc3luYy5zZXRJbW1lZGlhdGUocS5wcm9jZXNzKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciB3b3JrZXJzID0gMDtcbiAgICAgICAgdmFyIHEgPSB7XG4gICAgICAgICAgICB0YXNrczogW10sXG4gICAgICAgICAgICBjb25jdXJyZW5jeTogY29uY3VycmVuY3ksXG4gICAgICAgICAgICBzYXR1cmF0ZWQ6IG51bGwsXG4gICAgICAgICAgICBlbXB0eTogbnVsbCxcbiAgICAgICAgICAgIGRyYWluOiBudWxsLFxuICAgICAgICAgICAgc3RhcnRlZDogZmFsc2UsXG4gICAgICAgICAgICBwYXVzZWQ6IGZhbHNlLFxuICAgICAgICAgICAgcHVzaDogZnVuY3Rpb24gKGRhdGEsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICAgIF9pbnNlcnQocSwgZGF0YSwgZmFsc2UsIGNhbGxiYWNrKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBraWxsOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgIHEuZHJhaW4gPSBudWxsO1xuICAgICAgICAgICAgICBxLnRhc2tzID0gW107XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdW5zaGlmdDogZnVuY3Rpb24gKGRhdGEsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICAgIF9pbnNlcnQocSwgZGF0YSwgdHJ1ZSwgY2FsbGJhY2spO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHByb2Nlc3M6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBpZiAoIXEucGF1c2VkICYmIHdvcmtlcnMgPCBxLmNvbmN1cnJlbmN5ICYmIHEudGFza3MubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciB0YXNrID0gcS50YXNrcy5zaGlmdCgpO1xuICAgICAgICAgICAgICAgICAgICBpZiAocS5lbXB0eSAmJiBxLnRhc2tzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcS5lbXB0eSgpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHdvcmtlcnMgKz0gMTtcbiAgICAgICAgICAgICAgICAgICAgdmFyIG5leHQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB3b3JrZXJzIC09IDE7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodGFzay5jYWxsYmFjaykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhc2suY2FsbGJhY2suYXBwbHkodGFzaywgYXJndW1lbnRzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChxLmRyYWluICYmIHEudGFza3MubGVuZ3RoICsgd29ya2VycyA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHEuZHJhaW4oKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHEucHJvY2VzcygpO1xuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICB2YXIgY2IgPSBvbmx5X29uY2UobmV4dCk7XG4gICAgICAgICAgICAgICAgICAgIHdvcmtlcih0YXNrLmRhdGEsIGNiKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbGVuZ3RoOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHEudGFza3MubGVuZ3RoO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHJ1bm5pbmc6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gd29ya2VycztcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBpZGxlOiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcS50YXNrcy5sZW5ndGggKyB3b3JrZXJzID09PSAwO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHBhdXNlOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgaWYgKHEucGF1c2VkID09PSB0cnVlKSB7IHJldHVybjsgfVxuICAgICAgICAgICAgICAgIHEucGF1c2VkID0gdHJ1ZTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICByZXN1bWU6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBpZiAocS5wYXVzZWQgPT09IGZhbHNlKSB7IHJldHVybjsgfVxuICAgICAgICAgICAgICAgIHEucGF1c2VkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgLy8gTmVlZCB0byBjYWxsIHEucHJvY2VzcyBvbmNlIHBlciBjb25jdXJyZW50XG4gICAgICAgICAgICAgICAgLy8gd29ya2VyIHRvIHByZXNlcnZlIGZ1bGwgY29uY3VycmVuY3kgYWZ0ZXIgcGF1c2VcbiAgICAgICAgICAgICAgICBmb3IgKHZhciB3ID0gMTsgdyA8PSBxLmNvbmN1cnJlbmN5OyB3KyspIHtcbiAgICAgICAgICAgICAgICAgICAgYXN5bmMuc2V0SW1tZWRpYXRlKHEucHJvY2Vzcyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gcTtcbiAgICB9O1xuXG4gICAgYXN5bmMucHJpb3JpdHlRdWV1ZSA9IGZ1bmN0aW9uICh3b3JrZXIsIGNvbmN1cnJlbmN5KSB7XG5cbiAgICAgICAgZnVuY3Rpb24gX2NvbXBhcmVUYXNrcyhhLCBiKXtcbiAgICAgICAgICByZXR1cm4gYS5wcmlvcml0eSAtIGIucHJpb3JpdHk7XG4gICAgICAgIH07XG5cbiAgICAgICAgZnVuY3Rpb24gX2JpbmFyeVNlYXJjaChzZXF1ZW5jZSwgaXRlbSwgY29tcGFyZSkge1xuICAgICAgICAgIHZhciBiZWcgPSAtMSxcbiAgICAgICAgICAgICAgZW5kID0gc2VxdWVuY2UubGVuZ3RoIC0gMTtcbiAgICAgICAgICB3aGlsZSAoYmVnIDwgZW5kKSB7XG4gICAgICAgICAgICB2YXIgbWlkID0gYmVnICsgKChlbmQgLSBiZWcgKyAxKSA+Pj4gMSk7XG4gICAgICAgICAgICBpZiAoY29tcGFyZShpdGVtLCBzZXF1ZW5jZVttaWRdKSA+PSAwKSB7XG4gICAgICAgICAgICAgIGJlZyA9IG1pZDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGVuZCA9IG1pZCAtIDE7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBiZWc7XG4gICAgICAgIH1cblxuICAgICAgICBmdW5jdGlvbiBfaW5zZXJ0KHEsIGRhdGEsIHByaW9yaXR5LCBjYWxsYmFjaykge1xuICAgICAgICAgIGlmICghcS5zdGFydGVkKXtcbiAgICAgICAgICAgIHEuc3RhcnRlZCA9IHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICghX2lzQXJyYXkoZGF0YSkpIHtcbiAgICAgICAgICAgICAgZGF0YSA9IFtkYXRhXTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYoZGF0YS5sZW5ndGggPT0gMCkge1xuICAgICAgICAgICAgIC8vIGNhbGwgZHJhaW4gaW1tZWRpYXRlbHkgaWYgdGhlcmUgYXJlIG5vIHRhc2tzXG4gICAgICAgICAgICAgcmV0dXJuIGFzeW5jLnNldEltbWVkaWF0ZShmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgaWYgKHEuZHJhaW4pIHtcbiAgICAgICAgICAgICAgICAgICAgIHEuZHJhaW4oKTtcbiAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgICBfZWFjaChkYXRhLCBmdW5jdGlvbih0YXNrKSB7XG4gICAgICAgICAgICAgIHZhciBpdGVtID0ge1xuICAgICAgICAgICAgICAgICAgZGF0YTogdGFzayxcbiAgICAgICAgICAgICAgICAgIHByaW9yaXR5OiBwcmlvcml0eSxcbiAgICAgICAgICAgICAgICAgIGNhbGxiYWNrOiB0eXBlb2YgY2FsbGJhY2sgPT09ICdmdW5jdGlvbicgPyBjYWxsYmFjayA6IG51bGxcbiAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICBxLnRhc2tzLnNwbGljZShfYmluYXJ5U2VhcmNoKHEudGFza3MsIGl0ZW0sIF9jb21wYXJlVGFza3MpICsgMSwgMCwgaXRlbSk7XG5cbiAgICAgICAgICAgICAgaWYgKHEuc2F0dXJhdGVkICYmIHEudGFza3MubGVuZ3RoID09PSBxLmNvbmN1cnJlbmN5KSB7XG4gICAgICAgICAgICAgICAgICBxLnNhdHVyYXRlZCgpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGFzeW5jLnNldEltbWVkaWF0ZShxLnByb2Nlc3MpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gU3RhcnQgd2l0aCBhIG5vcm1hbCBxdWV1ZVxuICAgICAgICB2YXIgcSA9IGFzeW5jLnF1ZXVlKHdvcmtlciwgY29uY3VycmVuY3kpO1xuXG4gICAgICAgIC8vIE92ZXJyaWRlIHB1c2ggdG8gYWNjZXB0IHNlY29uZCBwYXJhbWV0ZXIgcmVwcmVzZW50aW5nIHByaW9yaXR5XG4gICAgICAgIHEucHVzaCA9IGZ1bmN0aW9uIChkYXRhLCBwcmlvcml0eSwgY2FsbGJhY2spIHtcbiAgICAgICAgICBfaW5zZXJ0KHEsIGRhdGEsIHByaW9yaXR5LCBjYWxsYmFjayk7XG4gICAgICAgIH07XG5cbiAgICAgICAgLy8gUmVtb3ZlIHVuc2hpZnQgZnVuY3Rpb25cbiAgICAgICAgZGVsZXRlIHEudW5zaGlmdDtcblxuICAgICAgICByZXR1cm4gcTtcbiAgICB9O1xuXG4gICAgYXN5bmMuY2FyZ28gPSBmdW5jdGlvbiAod29ya2VyLCBwYXlsb2FkKSB7XG4gICAgICAgIHZhciB3b3JraW5nICAgICA9IGZhbHNlLFxuICAgICAgICAgICAgdGFza3MgICAgICAgPSBbXTtcblxuICAgICAgICB2YXIgY2FyZ28gPSB7XG4gICAgICAgICAgICB0YXNrczogdGFza3MsXG4gICAgICAgICAgICBwYXlsb2FkOiBwYXlsb2FkLFxuICAgICAgICAgICAgc2F0dXJhdGVkOiBudWxsLFxuICAgICAgICAgICAgZW1wdHk6IG51bGwsXG4gICAgICAgICAgICBkcmFpbjogbnVsbCxcbiAgICAgICAgICAgIGRyYWluZWQ6IHRydWUsXG4gICAgICAgICAgICBwdXNoOiBmdW5jdGlvbiAoZGF0YSwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgICAgICBpZiAoIV9pc0FycmF5KGRhdGEpKSB7XG4gICAgICAgICAgICAgICAgICAgIGRhdGEgPSBbZGF0YV07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIF9lYWNoKGRhdGEsIGZ1bmN0aW9uKHRhc2spIHtcbiAgICAgICAgICAgICAgICAgICAgdGFza3MucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgICAgICBkYXRhOiB0YXNrLFxuICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2s6IHR5cGVvZiBjYWxsYmFjayA9PT0gJ2Z1bmN0aW9uJyA/IGNhbGxiYWNrIDogbnVsbFxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgY2FyZ28uZHJhaW5lZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICBpZiAoY2FyZ28uc2F0dXJhdGVkICYmIHRhc2tzLmxlbmd0aCA9PT0gcGF5bG9hZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY2FyZ28uc2F0dXJhdGVkKCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBhc3luYy5zZXRJbW1lZGlhdGUoY2FyZ28ucHJvY2Vzcyk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcHJvY2VzczogZnVuY3Rpb24gcHJvY2VzcygpIHtcbiAgICAgICAgICAgICAgICBpZiAod29ya2luZykgcmV0dXJuO1xuICAgICAgICAgICAgICAgIGlmICh0YXNrcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgaWYoY2FyZ28uZHJhaW4gJiYgIWNhcmdvLmRyYWluZWQpIGNhcmdvLmRyYWluKCk7XG4gICAgICAgICAgICAgICAgICAgIGNhcmdvLmRyYWluZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgdmFyIHRzID0gdHlwZW9mIHBheWxvYWQgPT09ICdudW1iZXInXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPyB0YXNrcy5zcGxpY2UoMCwgcGF5bG9hZClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IHRhc2tzLnNwbGljZSgwLCB0YXNrcy5sZW5ndGgpO1xuXG4gICAgICAgICAgICAgICAgdmFyIGRzID0gX21hcCh0cywgZnVuY3Rpb24gKHRhc2spIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRhc2suZGF0YTtcbiAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgIGlmKGNhcmdvLmVtcHR5KSBjYXJnby5lbXB0eSgpO1xuICAgICAgICAgICAgICAgIHdvcmtpbmcgPSB0cnVlO1xuICAgICAgICAgICAgICAgIHdvcmtlcihkcywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICB3b3JraW5nID0gZmFsc2U7XG5cbiAgICAgICAgICAgICAgICAgICAgdmFyIGFyZ3MgPSBhcmd1bWVudHM7XG4gICAgICAgICAgICAgICAgICAgIF9lYWNoKHRzLCBmdW5jdGlvbiAoZGF0YSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRhdGEuY2FsbGJhY2spIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLmNhbGxiYWNrLmFwcGx5KG51bGwsIGFyZ3MpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgICAgICBwcm9jZXNzKCk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbGVuZ3RoOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRhc2tzLmxlbmd0aDtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBydW5uaW5nOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHdvcmtpbmc7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiBjYXJnbztcbiAgICB9O1xuXG4gICAgdmFyIF9jb25zb2xlX2ZuID0gZnVuY3Rpb24gKG5hbWUpIHtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChmbikge1xuICAgICAgICAgICAgdmFyIGFyZ3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsIDEpO1xuICAgICAgICAgICAgZm4uYXBwbHkobnVsbCwgYXJncy5jb25jYXQoW2Z1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgICAgICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMSk7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBjb25zb2xlICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoY29uc29sZS5lcnJvcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChjb25zb2xlW25hbWVdKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBfZWFjaChhcmdzLCBmdW5jdGlvbiAoeCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGVbbmFtZV0oeCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1dKSk7XG4gICAgICAgIH07XG4gICAgfTtcbiAgICBhc3luYy5sb2cgPSBfY29uc29sZV9mbignbG9nJyk7XG4gICAgYXN5bmMuZGlyID0gX2NvbnNvbGVfZm4oJ2RpcicpO1xuICAgIC8qYXN5bmMuaW5mbyA9IF9jb25zb2xlX2ZuKCdpbmZvJyk7XG4gICAgYXN5bmMud2FybiA9IF9jb25zb2xlX2ZuKCd3YXJuJyk7XG4gICAgYXN5bmMuZXJyb3IgPSBfY29uc29sZV9mbignZXJyb3InKTsqL1xuXG4gICAgYXN5bmMubWVtb2l6ZSA9IGZ1bmN0aW9uIChmbiwgaGFzaGVyKSB7XG4gICAgICAgIHZhciBtZW1vID0ge307XG4gICAgICAgIHZhciBxdWV1ZXMgPSB7fTtcbiAgICAgICAgaGFzaGVyID0gaGFzaGVyIHx8IGZ1bmN0aW9uICh4KSB7XG4gICAgICAgICAgICByZXR1cm4geDtcbiAgICAgICAgfTtcbiAgICAgICAgdmFyIG1lbW9pemVkID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIGFyZ3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMpO1xuICAgICAgICAgICAgdmFyIGNhbGxiYWNrID0gYXJncy5wb3AoKTtcbiAgICAgICAgICAgIHZhciBrZXkgPSBoYXNoZXIuYXBwbHkobnVsbCwgYXJncyk7XG4gICAgICAgICAgICBpZiAoa2V5IGluIG1lbW8pIHtcbiAgICAgICAgICAgICAgICBhc3luYy5uZXh0VGljayhmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrLmFwcGx5KG51bGwsIG1lbW9ba2V5XSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChrZXkgaW4gcXVldWVzKSB7XG4gICAgICAgICAgICAgICAgcXVldWVzW2tleV0ucHVzaChjYWxsYmFjayk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBxdWV1ZXNba2V5XSA9IFtjYWxsYmFja107XG4gICAgICAgICAgICAgICAgZm4uYXBwbHkobnVsbCwgYXJncy5jb25jYXQoW2Z1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgbWVtb1trZXldID0gYXJndW1lbnRzO1xuICAgICAgICAgICAgICAgICAgICB2YXIgcSA9IHF1ZXVlc1trZXldO1xuICAgICAgICAgICAgICAgICAgICBkZWxldGUgcXVldWVzW2tleV07XG4gICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwLCBsID0gcS5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICBxW2ldLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICBtZW1vaXplZC5tZW1vID0gbWVtbztcbiAgICAgICAgbWVtb2l6ZWQudW5tZW1vaXplZCA9IGZuO1xuICAgICAgICByZXR1cm4gbWVtb2l6ZWQ7XG4gICAgfTtcblxuICAgIGFzeW5jLnVubWVtb2l6ZSA9IGZ1bmN0aW9uIChmbikge1xuICAgICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIChmbi51bm1lbW9pemVkIHx8IGZuKS5hcHBseShudWxsLCBhcmd1bWVudHMpO1xuICAgICAgfTtcbiAgICB9O1xuXG4gICAgYXN5bmMudGltZXMgPSBmdW5jdGlvbiAoY291bnQsIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICB2YXIgY291bnRlciA9IFtdO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNvdW50OyBpKyspIHtcbiAgICAgICAgICAgIGNvdW50ZXIucHVzaChpKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYXN5bmMubWFwKGNvdW50ZXIsIGl0ZXJhdG9yLCBjYWxsYmFjayk7XG4gICAgfTtcblxuICAgIGFzeW5jLnRpbWVzU2VyaWVzID0gZnVuY3Rpb24gKGNvdW50LCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgdmFyIGNvdW50ZXIgPSBbXTtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7XG4gICAgICAgICAgICBjb3VudGVyLnB1c2goaSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGFzeW5jLm1hcFNlcmllcyhjb3VudGVyLCBpdGVyYXRvciwgY2FsbGJhY2spO1xuICAgIH07XG5cbiAgICBhc3luYy5zZXEgPSBmdW5jdGlvbiAoLyogZnVuY3Rpb25zLi4uICovKSB7XG4gICAgICAgIHZhciBmbnMgPSBhcmd1bWVudHM7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgdGhhdCA9IHRoaXM7XG4gICAgICAgICAgICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7XG4gICAgICAgICAgICB2YXIgY2FsbGJhY2sgPSBhcmdzLnBvcCgpO1xuICAgICAgICAgICAgYXN5bmMucmVkdWNlKGZucywgYXJncywgZnVuY3Rpb24gKG5ld2FyZ3MsIGZuLCBjYikge1xuICAgICAgICAgICAgICAgIGZuLmFwcGx5KHRoYXQsIG5ld2FyZ3MuY29uY2F0KFtmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBlcnIgPSBhcmd1bWVudHNbMF07XG4gICAgICAgICAgICAgICAgICAgIHZhciBuZXh0YXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMSk7XG4gICAgICAgICAgICAgICAgICAgIGNiKGVyciwgbmV4dGFyZ3MpO1xuICAgICAgICAgICAgICAgIH1dKSlcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBmdW5jdGlvbiAoZXJyLCByZXN1bHRzKSB7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2suYXBwbHkodGhhdCwgW2Vycl0uY29uY2F0KHJlc3VsdHMpKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9O1xuICAgIH07XG5cbiAgICBhc3luYy5jb21wb3NlID0gZnVuY3Rpb24gKC8qIGZ1bmN0aW9ucy4uLiAqLykge1xuICAgICAgcmV0dXJuIGFzeW5jLnNlcS5hcHBseShudWxsLCBBcnJheS5wcm90b3R5cGUucmV2ZXJzZS5jYWxsKGFyZ3VtZW50cykpO1xuICAgIH07XG5cbiAgICB2YXIgX2FwcGx5RWFjaCA9IGZ1bmN0aW9uIChlYWNoZm4sIGZucyAvKmFyZ3MuLi4qLykge1xuICAgICAgICB2YXIgZ28gPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgdGhhdCA9IHRoaXM7XG4gICAgICAgICAgICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7XG4gICAgICAgICAgICB2YXIgY2FsbGJhY2sgPSBhcmdzLnBvcCgpO1xuICAgICAgICAgICAgcmV0dXJuIGVhY2hmbihmbnMsIGZ1bmN0aW9uIChmbiwgY2IpIHtcbiAgICAgICAgICAgICAgICBmbi5hcHBseSh0aGF0LCBhcmdzLmNvbmNhdChbY2JdKSk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY2FsbGJhY2spO1xuICAgICAgICB9O1xuICAgICAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA+IDIpIHtcbiAgICAgICAgICAgIHZhciBhcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAyKTtcbiAgICAgICAgICAgIHJldHVybiBnby5hcHBseSh0aGlzLCBhcmdzKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBnbztcbiAgICAgICAgfVxuICAgIH07XG4gICAgYXN5bmMuYXBwbHlFYWNoID0gZG9QYXJhbGxlbChfYXBwbHlFYWNoKTtcbiAgICBhc3luYy5hcHBseUVhY2hTZXJpZXMgPSBkb1NlcmllcyhfYXBwbHlFYWNoKTtcblxuICAgIGFzeW5jLmZvcmV2ZXIgPSBmdW5jdGlvbiAoZm4sIGNhbGxiYWNrKSB7XG4gICAgICAgIGZ1bmN0aW9uIG5leHQoZXJyKSB7XG4gICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgaWYgKGNhbGxiYWNrKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aHJvdyBlcnI7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmbihuZXh0KTtcbiAgICAgICAgfVxuICAgICAgICBuZXh0KCk7XG4gICAgfTtcblxuICAgIC8vIE5vZGUuanNcbiAgICBpZiAodHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCcgJiYgbW9kdWxlLmV4cG9ydHMpIHtcbiAgICAgICAgbW9kdWxlLmV4cG9ydHMgPSBhc3luYztcbiAgICB9XG4gICAgLy8gQU1EIC8gUmVxdWlyZUpTXG4gICAgZWxzZSBpZiAodHlwZW9mIGRlZmluZSAhPT0gJ3VuZGVmaW5lZCcgJiYgZGVmaW5lLmFtZCkge1xuICAgICAgICBkZWZpbmUoW10sIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiBhc3luYztcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8vIGluY2x1ZGVkIGRpcmVjdGx5IHZpYSA8c2NyaXB0PiB0YWdcbiAgICBlbHNlIHtcbiAgICAgICAgcm9vdC5hc3luYyA9IGFzeW5jO1xuICAgIH1cblxufSgpKTtcbiIsInZhciBhc3luYyAgICAgICA9IHJlcXVpcmUoJ2FzeW5jJyksXG4gICAgdXJsUGFyc2VyICAgPSByZXF1aXJlKCd1cmwnKSxcbiAgICBSZXNvdXJjZSAgICA9IHJlcXVpcmUoJy4vUmVzb3VyY2UnKSxcbiAgICBFdmVudEVtaXR0ZXIgPSByZXF1aXJlKCdldmVudGVtaXR0ZXIzJyk7XG5cbi8qKlxuICogTWFuYWdlcyB0aGUgc3RhdGUgYW5kIGxvYWRpbmcgb2YgbXVsdGlwbGUgcmVzb3VyY2VzIHRvIGxvYWQuXG4gKlxuICogQGNsYXNzXG4gKiBAcGFyYW0gW2Jhc2VVcmw9JyddIHtzdHJpbmd9IFRoZSBiYXNlIHVybCBmb3IgYWxsIHJlc291cmNlcyBsb2FkZWQgYnkgdGhpcyBsb2FkZXIuXG4gKiBAcGFyYW0gW2NvbmN1cnJlbmN5PTEwXSB7bnVtYmVyfSBUaGUgbnVtYmVyIG9mIHJlc291cmNlcyB0byBsb2FkIGNvbmN1cnJlbnRseS5cbiAqL1xuZnVuY3Rpb24gTG9hZGVyKGJhc2VVcmwsIGNvbmN1cnJlbmN5KSB7XG4gICAgRXZlbnRFbWl0dGVyLmNhbGwodGhpcyk7XG5cbiAgICBjb25jdXJyZW5jeSA9IGNvbmN1cnJlbmN5IHx8IDEwO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGJhc2UgdXJsIGZvciBhbGwgcmVzb3VyY2VzIGxvYWRlZCBieSB0aGlzIGxvYWRlci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge3N0cmluZ31cbiAgICAgKi9cbiAgICB0aGlzLmJhc2VVcmwgPSBiYXNlVXJsIHx8ICcnO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHByb2dyZXNzIHBlcmNlbnQgb2YgdGhlIGxvYWRlciBnb2luZyB0aHJvdWdoIHRoZSBxdWV1ZS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLnByb2dyZXNzID0gMDtcblxuICAgIC8qKlxuICAgICAqIExvYWRpbmcgc3RhdGUgb2YgdGhlIGxvYWRlciwgdHJ1ZSBpZiBpdCBpcyBjdXJyZW50bHkgbG9hZGluZyByZXNvdXJjZXMuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqL1xuICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHBlcmNlbnRhZ2Ugb2YgdG90YWwgcHJvZ3Jlc3MgdGhhdCBhIHNpbmdsZSByZXNvdXJjZSByZXByZXNlbnRzLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMuX3Byb2dyZXNzQ2h1bmsgPSAwO1xuXG4gICAgLyoqXG4gICAgICogVGhlIG1pZGRsZXdhcmUgdG8gcnVuIGJlZm9yZSBsb2FkaW5nIGVhY2ggcmVzb3VyY2UuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtmdW5jdGlvbltdfVxuICAgICAqL1xuICAgIHRoaXMuX2JlZm9yZU1pZGRsZXdhcmUgPSBbXTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBtaWRkbGV3YXJlIHRvIHJ1biBhZnRlciBsb2FkaW5nIGVhY2ggcmVzb3VyY2UuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtmdW5jdGlvbltdfVxuICAgICAqL1xuICAgIHRoaXMuX2FmdGVyTWlkZGxld2FyZSA9IFtdO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGBfbG9hZFJlc291cmNlYCBmdW5jdGlvbiBib3VuZCB3aXRoIHRoaXMgb2JqZWN0IGNvbnRleHQuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBtZW1iZXIge2Z1bmN0aW9ufVxuICAgICAqL1xuICAgIHRoaXMuX2JvdW5kTG9hZFJlc291cmNlID0gdGhpcy5fbG9hZFJlc291cmNlLmJpbmQodGhpcyk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYF9vbkxvYWRgIGZ1bmN0aW9uIGJvdW5kIHdpdGggdGhpcyBvYmplY3QgY29udGV4dC5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQG1lbWJlciB7ZnVuY3Rpb259XG4gICAgICovXG4gICAgdGhpcy5fYm91bmRPbkxvYWQgPSB0aGlzLl9vbkxvYWQuYmluZCh0aGlzKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSByZXNvdXJjZSBidWZmZXIgdGhhdCBmaWxscyB1bnRpbCBgbG9hZGAgaXMgY2FsbGVkIHRvIHN0YXJ0IGxvYWRpbmcgcmVzb3VyY2VzLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAbWVtYmVyIHtSZXNvdXJjZVtdfVxuICAgICAqL1xuICAgIHRoaXMuX2J1ZmZlciA9IFtdO1xuXG4gICAgLyoqXG4gICAgICogVXNlZCB0byB0cmFjayBsb2FkIGNvbXBsZXRpb24uXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLl9udW1Ub0xvYWQgPSAwO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHJlc291cmNlcyB3YWl0aW5nIHRvIGJlIGxvYWRlZC5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQG1lbWJlciB7UmVzb3VyY2VbXX1cbiAgICAgKi9cbiAgICB0aGlzLl9xdWV1ZSA9IGFzeW5jLnF1ZXVlKHRoaXMuX2JvdW5kTG9hZFJlc291cmNlLCBjb25jdXJyZW5jeSk7XG5cbiAgICAvKipcbiAgICAgKiBBbGwgdGhlIHJlc291cmNlcyBmb3IgdGhpcyBsb2FkZXIga2V5ZWQgYnkgbmFtZS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge29iamVjdDxzdHJpbmcsIFJlc291cmNlPn1cbiAgICAgKi9cbiAgICB0aGlzLnJlc291cmNlcyA9IHt9O1xuXG4gICAgLyoqXG4gICAgICogRW1pdHRlZCBvbmNlIHBlciBsb2FkZWQgb3IgZXJyb3JlZCByZXNvdXJjZS5cbiAgICAgKlxuICAgICAqIEBldmVudCBwcm9ncmVzc1xuICAgICAqIEBtZW1iZXJvZiBMb2FkZXIjXG4gICAgICovXG5cbiAgICAvKipcbiAgICAgKiBFbWl0dGVkIG9uY2UgcGVyIGVycm9yZWQgcmVzb3VyY2UuXG4gICAgICpcbiAgICAgKiBAZXZlbnQgZXJyb3JcbiAgICAgKiBAbWVtYmVyb2YgTG9hZGVyI1xuICAgICAqL1xuXG4gICAgLyoqXG4gICAgICogRW1pdHRlZCBvbmNlIHBlciBsb2FkZWQgcmVzb3VyY2UuXG4gICAgICpcbiAgICAgKiBAZXZlbnQgbG9hZFxuICAgICAqIEBtZW1iZXJvZiBMb2FkZXIjXG4gICAgICovXG5cbiAgICAvKipcbiAgICAgKiBFbWl0dGVkIHdoZW4gdGhlIGxvYWRlciBiZWdpbnMgdG8gcHJvY2VzcyB0aGUgcXVldWUuXG4gICAgICpcbiAgICAgKiBAZXZlbnQgc3RhcnRcbiAgICAgKiBAbWVtYmVyb2YgTG9hZGVyI1xuICAgICAqL1xuXG4gICAgLyoqXG4gICAgICogRW1pdHRlZCB3aGVuIHRoZSBxdWV1ZWQgcmVzb3VyY2VzIGFsbCBsb2FkLlxuICAgICAqXG4gICAgICogQGV2ZW50IGNvbXBsZXRlXG4gICAgICogQG1lbWJlcm9mIExvYWRlciNcbiAgICAgKi9cbn1cblxuTG9hZGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoRXZlbnRFbWl0dGVyLnByb3RvdHlwZSk7XG5Mb2FkZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gTG9hZGVyO1xubW9kdWxlLmV4cG9ydHMgPSBMb2FkZXI7XG5cbi8qKlxuICogQWRkcyBhIHJlc291cmNlIChvciBtdWx0aXBsZSByZXNvdXJjZXMpIHRvIHRoZSBsb2FkZXIgcXVldWUuXG4gKlxuICogVGhpcyBmdW5jdGlvbiBjYW4gdGFrZSBhIHdpZGUgdmFyaWV0eSBvZiBkaWZmZXJlbnQgcGFyYW1ldGVycy4gVGhlIG9ubHkgdGhpbmcgdGhhdCBpcyBhbHdheXNcbiAqIHJlcXVpcmVkIHRoZSB1cmwgdG8gbG9hZC4gQWxsIHRoZSBmb2xsb3dpbmcgd2lsbCB3b3JrOlxuICpcbiAqIGBgYGpzXG4gKiBsb2FkZXJcbiAqICAgICAvLyBub3JtYWwgcGFyYW0gc3ludGF4XG4gKiAgICAgLmFkZCgna2V5JywgJ2h0dHA6Ly8uLi4nLCBmdW5jdGlvbiAoKSB7fSlcbiAqICAgICAuYWRkKCdodHRwOi8vLi4uJywgZnVuY3Rpb24gKCkge30pXG4gKiAgICAgLmFkZCgnaHR0cDovLy4uLicpXG4gKlxuICogICAgIC8vIG9iamVjdCBzeW50YXhcbiAqICAgICAuYWRkKHtcbiAqICAgICAgICAgbmFtZTogJ2tleTInLFxuICogICAgICAgICB1cmw6ICdodHRwOi8vLi4uJ1xuICogICAgIH0sIGZ1bmN0aW9uICgpIHt9KVxuICogICAgIC5hZGQoe1xuICogICAgICAgICB1cmw6ICdodHRwOi8vLi4uJ1xuICogICAgIH0sIGZ1bmN0aW9uICgpIHt9KVxuICogICAgIC5hZGQoe1xuICogICAgICAgICBuYW1lOiAna2V5MycsXG4gKiAgICAgICAgIHVybDogJ2h0dHA6Ly8uLi4nXG4gKiAgICAgICAgIG9uQ29tcGxldGU6IGZ1bmN0aW9uICgpIHt9XG4gKiAgICAgfSlcbiAqICAgICAuYWRkKHtcbiAqICAgICAgICAgdXJsOiAnaHR0cHM6Ly8uLi4nLFxuICogICAgICAgICBvbkNvbXBsZXRlOiBmdW5jdGlvbiAoKSB7fSxcbiAqICAgICAgICAgY3Jvc3NPcmlnaW46IHRydWVcbiAqICAgICB9KVxuICpcbiAqICAgICAvLyB5b3UgY2FuIGFsc28gcGFzcyBhbiBhcnJheSBvZiBvYmplY3RzIG9yIHVybHMgb3IgYm90aFxuICogICAgIC5hZGQoW1xuICogICAgICAgICB7IG5hbWU6ICdrZXk0JywgdXJsOiAnaHR0cDovLy4uLicsIG9uQ29tcGxldGU6IGZ1bmN0aW9uICgpIHt9IH0sXG4gKiAgICAgICAgIHsgdXJsOiAnaHR0cDovLy4uLicsIG9uQ29tcGxldGU6IGZ1bmN0aW9uICgpIHt9IH0sXG4gKiAgICAgICAgICdodHRwOi8vLi4uJ1xuICogICAgIF0pO1xuICogYGBgXG4gKlxuICogQGFsaWFzIGVucXVldWVcbiAqIEBwYXJhbSBbbmFtZV0ge3N0cmluZ30gVGhlIG5hbWUgb2YgdGhlIHJlc291cmNlIHRvIGxvYWQsIGlmIG5vdCBwYXNzZWQgdGhlIHVybCBpcyB1c2VkLlxuICogQHBhcmFtIHVybCB7c3RyaW5nfSBUaGUgdXJsIGZvciB0aGlzIHJlc291cmNlLCByZWxhdGl2ZSB0byB0aGUgYmFzZVVybCBvZiB0aGlzIGxvYWRlci5cbiAqIEBwYXJhbSBbb3B0aW9uc10ge29iamVjdH0gVGhlIG9wdGlvbnMgZm9yIHRoZSBsb2FkLlxuICogQHBhcmFtIFtvcHRpb25zLmNyb3NzT3JpZ2luXSB7Ym9vbGVhbn0gSXMgdGhpcyByZXF1ZXN0IGNyb3NzLW9yaWdpbj8gRGVmYXVsdCBpcyB0byBkZXRlcm1pbmUgYXV0b21hdGljYWxseS5cbiAqIEBwYXJhbSBbb3B0aW9ucy5sb2FkVHlwZT1SZXNvdXJjZS5MT0FEX1RZUEUuWEhSXSB7UmVzb3VyY2UuWEhSX0xPQURfVFlQRX0gSG93IHNob3VsZCB0aGlzIHJlc291cmNlIGJlIGxvYWRlZD9cbiAqIEBwYXJhbSBbb3B0aW9ucy54aHJUeXBlPVJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkRFRkFVTFRdIHtSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRX0gSG93IHNob3VsZCB0aGUgZGF0YSBiZWluZ1xuICogICAgICBsb2FkZWQgYmUgaW50ZXJwcmV0ZWQgd2hlbiB1c2luZyBYSFI/XG4gKiBAcGFyYW0gW2NhbGxiYWNrXSB7ZnVuY3Rpb259IEZ1bmN0aW9uIHRvIGNhbGwgd2hlbiB0aGlzIHNwZWNpZmljIHJlc291cmNlIGNvbXBsZXRlcyBsb2FkaW5nLlxuICogQHJldHVybiB7TG9hZGVyfVxuICovXG5Mb2FkZXIucHJvdG90eXBlLmFkZCA9IExvYWRlci5wcm90b3R5cGUuZW5xdWV1ZSA9IGZ1bmN0aW9uIChuYW1lLCB1cmwsIG9wdGlvbnMsIGNiKSB7XG4gICAgLy8gc3BlY2lhbCBjYXNlIG9mIGFuIGFycmF5IG9mIG9iamVjdHMgb3IgdXJsc1xuICAgIGlmIChBcnJheS5pc0FycmF5KG5hbWUpKSB7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbmFtZS5sZW5ndGg7ICsraSkge1xuICAgICAgICAgICAgdGhpcy5hZGQobmFtZVtpXSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICAvLyBpZiBhbiBvYmplY3QgaXMgcGFzc2VkIGluc3RlYWQgb2YgcGFyYW1zXG4gICAgaWYgKHR5cGVvZiBuYW1lID09PSAnb2JqZWN0Jykge1xuICAgICAgICBjYiA9IHVybCB8fCBuYW1lLmNhbGxiYWNrIHx8IG5hbWUub25Db21wbGV0ZTtcbiAgICAgICAgb3B0aW9ucyA9IG5hbWU7XG4gICAgICAgIHVybCA9IG5hbWUudXJsO1xuICAgICAgICBuYW1lID0gbmFtZS5uYW1lIHx8IG5hbWUua2V5IHx8IG5hbWUudXJsO1xuICAgIH1cblxuICAgIC8vIGNhc2Ugd2hlcmUgbm8gbmFtZSBpcyBwYXNzZWQgc2hpZnQgYWxsIGFyZ3Mgb3ZlciBieSBvbmUuXG4gICAgaWYgKHR5cGVvZiB1cmwgIT09ICdzdHJpbmcnKSB7XG4gICAgICAgIGNiID0gb3B0aW9ucztcbiAgICAgICAgb3B0aW9ucyA9IHVybDtcbiAgICAgICAgdXJsID0gbmFtZTtcbiAgICB9XG5cbiAgICAvLyBub3cgdGhhdCB3ZSBzaGlmdGVkIG1ha2Ugc3VyZSB3ZSBoYXZlIGEgcHJvcGVyIHVybC5cbiAgICBpZiAodHlwZW9mIHVybCAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdObyB1cmwgcGFzc2VkIHRvIGFkZCByZXNvdXJjZSB0byBsb2FkZXIuJyk7XG4gICAgfVxuXG4gICAgLy8gb3B0aW9ucyBhcmUgb3B0aW9uYWwgc28gcGVvcGxlIG1pZ2h0IHBhc3MgYSBmdW5jdGlvbiBhbmQgbm8gb3B0aW9uc1xuICAgIGlmICh0eXBlb2Ygb3B0aW9ucyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBjYiA9IG9wdGlvbnM7XG4gICAgICAgIG9wdGlvbnMgPSBudWxsO1xuICAgIH1cblxuICAgIC8vIGNoZWNrIGlmIHJlc291cmNlIGFscmVhZHkgZXhpc3RzLlxuICAgIGlmICh0aGlzLnJlc291cmNlc1tuYW1lXSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1Jlc291cmNlIHdpdGggbmFtZSBcIicgKyBuYW1lICsgJ1wiIGFscmVhZHkgZXhpc3RzLicpO1xuICAgIH1cblxuICAgIC8vIGFkZCBiYXNlIHVybCBpZiB0aGlzIGlzbid0IGFuIGFic29sdXRlIHVybFxuICAgIHVybCA9IHRoaXMuX2hhbmRsZUJhc2VVcmwodXJsKTtcblxuICAgIC8vIGNyZWF0ZSB0aGUgc3RvcmUgdGhlIHJlc291cmNlXG4gICAgdGhpcy5yZXNvdXJjZXNbbmFtZV0gPSBuZXcgUmVzb3VyY2UobmFtZSwgdXJsLCBvcHRpb25zKTtcblxuICAgIGlmICh0eXBlb2YgY2IgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgdGhpcy5yZXNvdXJjZXNbbmFtZV0ub25jZSgnYWZ0ZXJNaWRkbGV3YXJlJywgY2IpO1xuICAgIH1cblxuICAgIHRoaXMuX251bVRvTG9hZCsrO1xuXG4gICAgLy8gaWYgYWxyZWFkeSBsb2FkaW5nIGFkZCBpdCB0byB0aGUgd29ya2VyIHF1ZXVlXG4gICAgaWYgKHRoaXMuX3F1ZXVlLnN0YXJ0ZWQpIHtcbiAgICAgICAgdGhpcy5fcXVldWUucHVzaCh0aGlzLnJlc291cmNlc1tuYW1lXSk7XG4gICAgICAgIHRoaXMuX3Byb2dyZXNzQ2h1bmsgPSAoMTAwIC0gdGhpcy5wcm9ncmVzcykgLyAodGhpcy5fcXVldWUubGVuZ3RoKCkgKyB0aGlzLl9xdWV1ZS5ydW5uaW5nKCkpO1xuICAgIH1cbiAgICAvLyBvdGhlcndpc2UgYnVmZmVyIGl0IHRvIGJlIGFkZGVkIHRvIHRoZSBxdWV1ZSBsYXRlclxuICAgIGVsc2Uge1xuICAgICAgICB0aGlzLl9idWZmZXIucHVzaCh0aGlzLnJlc291cmNlc1tuYW1lXSk7XG4gICAgICAgIHRoaXMuX3Byb2dyZXNzQ2h1bmsgPSAxMDAgLyB0aGlzLl9idWZmZXIubGVuZ3RoO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzO1xufTtcblxuTG9hZGVyLnByb3RvdHlwZS5faGFuZGxlQmFzZVVybCA9IGZ1bmN0aW9uICh1cmwpIHtcbiAgICB2YXIgcGFyc2VkVXJsID0gdXJsUGFyc2VyLnBhcnNlKHVybCk7XG5cbiAgICAvLyBhYnNvbHV0ZSB1cmwsIGp1c3QgdXNlIGl0IGFzIGlzLlxuICAgIGlmIChwYXJzZWRVcmwucHJvdG9jb2wgfHwgcGFyc2VkVXJsLnBhdGhuYW1lLmluZGV4T2YoJy8vJykgPT09IDApIHtcbiAgICAgICAgcmV0dXJuIHVybDtcbiAgICB9XG5cbiAgICAvLyBpZiBiYXNlVXJsIGRvZXNuJ3QgZW5kIGluIHNsYXNoIGFuZCB1cmwgZG9lc24ndCBzdGFydCB3aXRoIHNsYXNoLCB0aGVuIGFkZCBhIHNsYXNoIGluYmV0d2VlblxuICAgIGlmIChcbiAgICAgICAgdGhpcy5iYXNlVXJsLmxlbmd0aCAmJlxuICAgICAgICB0aGlzLmJhc2VVcmwubGFzdEluZGV4T2YoJy8nKSAhPT0gdGhpcy5iYXNlVXJsLmxlbmd0aCAtIDEgJiZcbiAgICAgICAgdXJsLmNoYXJBdCgwKSAhPT0gJy8nXG4gICAgKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmJhc2VVcmwgKyAnLycgKyB1cmw7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICByZXR1cm4gdGhpcy5iYXNlVXJsICsgdXJsO1xuICAgIH1cbn07XG5cblxuLyoqXG4gKiBTZXRzIHVwIGEgbWlkZGxld2FyZSBmdW5jdGlvbiB0aGF0IHdpbGwgcnVuICpiZWZvcmUqIHRoZVxuICogcmVzb3VyY2UgaXMgbG9hZGVkLlxuICpcbiAqIEBhbGlhcyBwcmVcbiAqIEBwYXJhbSBtaWRkbGV3YXJlIHtmdW5jdGlvbn0gVGhlIG1pZGRsZXdhcmUgZnVuY3Rpb24gdG8gcmVnaXN0ZXIuXG4gKiBAcmV0dXJuIHtMb2FkZXJ9XG4gKi9cbkxvYWRlci5wcm90b3R5cGUuYmVmb3JlID0gTG9hZGVyLnByb3RvdHlwZS5wcmUgPSBmdW5jdGlvbiAoZm4pIHtcbiAgICB0aGlzLl9iZWZvcmVNaWRkbGV3YXJlLnB1c2goZm4pO1xuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIFNldHMgdXAgYSBtaWRkbGV3YXJlIGZ1bmN0aW9uIHRoYXQgd2lsbCBydW4gKmFmdGVyKiB0aGVcbiAqIHJlc291cmNlIGlzIGxvYWRlZC5cbiAqXG4gKiBAYWxpYXMgdXNlXG4gKiBAcGFyYW0gbWlkZGxld2FyZSB7ZnVuY3Rpb259IFRoZSBtaWRkbGV3YXJlIGZ1bmN0aW9uIHRvIHJlZ2lzdGVyLlxuICogQHJldHVybiB7TG9hZGVyfVxuICovXG5Mb2FkZXIucHJvdG90eXBlLmFmdGVyID0gTG9hZGVyLnByb3RvdHlwZS51c2UgPSBmdW5jdGlvbiAoZm4pIHtcbiAgICB0aGlzLl9hZnRlck1pZGRsZXdhcmUucHVzaChmbik7XG5cbiAgICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogUmVzZXRzIHRoZSBxdWV1ZSBvZiB0aGUgbG9hZGVyIHRvIHByZXBhcmUgZm9yIGEgbmV3IGxvYWQuXG4gKlxuICogQHJldHVybiB7TG9hZGVyfVxuICovXG5Mb2FkZXIucHJvdG90eXBlLnJlc2V0ID0gZnVuY3Rpb24gKCkge1xuICAgIC8vIHRoaXMuYmFzZVVybCA9IGJhc2VVcmwgfHwgJyc7XG5cbiAgICB0aGlzLnByb2dyZXNzID0gMDtcblxuICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xuXG4gICAgdGhpcy5fcHJvZ3Jlc3NDaHVuayA9IDA7XG5cbiAgICAvLyB0aGlzLl9iZWZvcmVNaWRkbGV3YXJlLmxlbmd0aCA9IDA7XG4gICAgLy8gdGhpcy5fYWZ0ZXJNaWRkbGV3YXJlLmxlbmd0aCA9IDA7XG5cbiAgICB0aGlzLl9idWZmZXIubGVuZ3RoID0gMDtcblxuICAgIHRoaXMuX251bVRvTG9hZCA9IDA7XG5cbiAgICB0aGlzLl9xdWV1ZS5raWxsKCk7XG4gICAgdGhpcy5fcXVldWUuc3RhcnRlZCA9IGZhbHNlO1xuXG4gICAgdGhpcy5yZXNvdXJjZXMgPSB7fTtcbn07XG5cbi8qKlxuICogU3RhcnRzIGxvYWRpbmcgdGhlIHF1ZXVlZCByZXNvdXJjZXMuXG4gKlxuICogQGZpcmVzIHN0YXJ0XG4gKiBAcGFyYW0gW2NhbGxiYWNrXSB7ZnVuY3Rpb259IE9wdGlvbmFsIGNhbGxiYWNrIHRoYXQgd2lsbCBiZSBib3VuZCB0byB0aGUgYGNvbXBsZXRlYCBldmVudC5cbiAqIEByZXR1cm4ge0xvYWRlcn1cbiAqL1xuTG9hZGVyLnByb3RvdHlwZS5sb2FkID0gZnVuY3Rpb24gKGNiKSB7XG4gICAgLy8gcmVnaXN0ZXIgY29tcGxldGUgY2FsbGJhY2sgaWYgdGhleSBwYXNzIG9uZVxuICAgIGlmICh0eXBlb2YgY2IgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgdGhpcy5vbmNlKCdjb21wbGV0ZScsIGNiKTtcbiAgICB9XG5cbiAgICAvLyBpZiB0aGUgcXVldWUgaGFzIGFscmVhZHkgc3RhcnRlZCB3ZSBhcmUgZG9uZSBoZXJlXG4gICAgaWYgKHRoaXMuX3F1ZXVlLnN0YXJ0ZWQpIHtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLy8gbm90aWZ5IG9mIHN0YXJ0XG4gICAgdGhpcy5lbWl0KCdzdGFydCcsIHRoaXMpO1xuXG4gICAgLy8gc3RhcnQgdGhlIGludGVybmFsIHF1ZXVlXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLl9idWZmZXIubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgdGhpcy5fcXVldWUucHVzaCh0aGlzLl9idWZmZXJbaV0pO1xuICAgIH1cblxuICAgIC8vIGVtcHR5IHRoZSBidWZmZXJcbiAgICB0aGlzLl9idWZmZXIubGVuZ3RoID0gMDtcblxuICAgIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBMb2FkcyBhIHNpbmdsZSByZXNvdXJjZS5cbiAqXG4gKiBAZmlyZXMgcHJvZ3Jlc3NcbiAqIEBwcml2YXRlXG4gKi9cbkxvYWRlci5wcm90b3R5cGUuX2xvYWRSZXNvdXJjZSA9IGZ1bmN0aW9uIChyZXNvdXJjZSwgZGVxdWV1ZSkge1xuICAgIHZhciBzZWxmID0gdGhpcztcblxuICAgIHJlc291cmNlLl9kZXF1ZXVlID0gZGVxdWV1ZTtcblxuICAgIHRoaXMuX3J1bk1pZGRsZXdhcmUocmVzb3VyY2UsIHRoaXMuX2JlZm9yZU1pZGRsZXdhcmUsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgLy8gcmVzb3VyY2Uub24oJ3Byb2dyZXNzJywgc2VsZi5lbWl0LmJpbmQoc2VsZiwgJ3Byb2dyZXNzJykpO1xuXG4gICAgICAgIHJlc291cmNlLmxvYWQoc2VsZi5fYm91bmRPbkxvYWQpO1xuICAgIH0pO1xufTtcblxuLyoqXG4gKiBDYWxsZWQgb25jZSBlYWNoIHJlc291cmNlIGhhcyBsb2FkZWQuXG4gKlxuICogQGZpcmVzIGNvbXBsZXRlXG4gKiBAcHJpdmF0ZVxuICovXG5Mb2FkZXIucHJvdG90eXBlLl9vbkNvbXBsZXRlID0gZnVuY3Rpb24gKCkge1xuICAgIHRoaXMuZW1pdCgnY29tcGxldGUnLCB0aGlzLCB0aGlzLnJlc291cmNlcyk7XG59O1xuXG4vKipcbiAqIENhbGxlZCBlYWNoIHRpbWUgYSByZXNvdXJjZXMgaXMgbG9hZGVkLlxuICpcbiAqIEBmaXJlcyBwcm9ncmVzc1xuICogQGZpcmVzIGVycm9yXG4gKiBAZmlyZXMgbG9hZFxuICogQHByaXZhdGVcbiAqL1xuTG9hZGVyLnByb3RvdHlwZS5fb25Mb2FkID0gZnVuY3Rpb24gKHJlc291cmNlKSB7XG4gICAgdGhpcy5wcm9ncmVzcyArPSB0aGlzLl9wcm9ncmVzc0NodW5rO1xuXG4gICAgdGhpcy5lbWl0KCdwcm9ncmVzcycsIHRoaXMsIHJlc291cmNlKTtcblxuICAgIC8vIHJ1biBtaWRkbGV3YXJlLCB0aGlzICptdXN0KiBoYXBwZW4gYmVmb3JlIGRlcXVldWUgc28gc3ViLWFzc2V0cyBnZXQgYWRkZWQgcHJvcGVybHlcbiAgICB0aGlzLl9ydW5NaWRkbGV3YXJlKHJlc291cmNlLCB0aGlzLl9hZnRlck1pZGRsZXdhcmUsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmVzb3VyY2UuZW1pdCgnYWZ0ZXJNaWRkbGV3YXJlJywgcmVzb3VyY2UpO1xuXG4gICAgICAgIHRoaXMuX251bVRvTG9hZC0tO1xuXG4gICAgICAgIC8vIGRvIGNvbXBsZXRpb24gY2hlY2tcbiAgICAgICAgaWYgKHRoaXMuX251bVRvTG9hZCA9PT0gMCkge1xuICAgICAgICAgICAgdGhpcy5wcm9ncmVzcyA9IDEwMDtcbiAgICAgICAgICAgIHRoaXMuX29uQ29tcGxldGUoKTtcbiAgICAgICAgfVxuICAgICAgICBcbiAgICAgICAgaWYgKHJlc291cmNlLmVycm9yKSB7XG4gICAgICAgICAgICB0aGlzLmVtaXQoJ2Vycm9yJywgcmVzb3VyY2UuZXJyb3IsIHRoaXMsIHJlc291cmNlKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuZW1pdCgnbG9hZCcsIHRoaXMsIHJlc291cmNlKTtcbiAgICAgICAgfVxuICAgIH0pO1xuICAgIFxuXG5cbiAgICAvLyByZW1vdmUgdGhpcyByZXNvdXJjZSBmcm9tIHRoZSBhc3luYyBxdWV1ZVxuICAgIHJlc291cmNlLl9kZXF1ZXVlKCk7XG59O1xuXG4vKipcbiAqIFJ1biBtaWRkbGV3YXJlIGZ1bmN0aW9ucyBvbiBhIHJlc291cmNlLlxuICpcbiAqIEBwcml2YXRlXG4gKi9cbkxvYWRlci5wcm90b3R5cGUuX3J1bk1pZGRsZXdhcmUgPSBmdW5jdGlvbiAocmVzb3VyY2UsIGZucywgY2IpIHtcbiAgICB2YXIgc2VsZiA9IHRoaXM7XG5cbiAgICBhc3luYy5lYWNoU2VyaWVzKGZucywgZnVuY3Rpb24gKGZuLCBuZXh0KSB7XG4gICAgICAgIGZuLmNhbGwoc2VsZiwgcmVzb3VyY2UsIG5leHQpO1xuICAgIH0sIGNiLmJpbmQodGhpcywgcmVzb3VyY2UpKTtcbn07XG5cbkxvYWRlci5MT0FEX1RZUEUgPSBSZXNvdXJjZS5MT0FEX1RZUEU7XG5Mb2FkZXIuWEhSX1JFQURZX1NUQVRFID0gUmVzb3VyY2UuWEhSX1JFQURZX1NUQVRFO1xuTG9hZGVyLlhIUl9SRVNQT05TRV9UWVBFID0gUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEU7XG4iLCJ2YXIgRXZlbnRFbWl0dGVyID0gcmVxdWlyZSgnZXZlbnRlbWl0dGVyMycpLFxuICAgIF91cmwgPSByZXF1aXJlKCd1cmwnKSxcbiAgICAvLyB0ZXN0cyBpcyBDT1JTIGlzIHN1cHBvcnRlZCBpbiBYSFIsIGlmIG5vdCB3ZSBuZWVkIHRvIHVzZSBYRFJcbiAgICB1c2VYZHIgPSAhISh3aW5kb3cuWERvbWFpblJlcXVlc3QgJiYgISgnd2l0aENyZWRlbnRpYWxzJyBpbiAobmV3IFhNTEh0dHBSZXF1ZXN0KCkpKSksXG4gICAgdGVtcEFuY2hvciA9IG51bGw7XG5cbi8qKlxuICogTWFuYWdlcyB0aGUgc3RhdGUgYW5kIGxvYWRpbmcgb2YgYSBzaW5nbGUgcmVzb3VyY2UgcmVwcmVzZW50ZWQgYnlcbiAqIGEgc2luZ2xlIFVSTC5cbiAqXG4gKiBAY2xhc3NcbiAqIEBwYXJhbSBuYW1lIHtzdHJpbmd9IFRoZSBuYW1lIG9mIHRoZSByZXNvdXJjZSB0byBsb2FkLlxuICogQHBhcmFtIHVybCB7c3RyaW5nfHN0cmluZ1tdfSBUaGUgdXJsIGZvciB0aGlzIHJlc291cmNlLCBmb3IgYXVkaW8vdmlkZW8gbG9hZHMgeW91IGNhbiBwYXNzIGFuIGFycmF5IG9mIHNvdXJjZXMuXG4gKiBAcGFyYW0gW29wdGlvbnNdIHtvYmplY3R9IFRoZSBvcHRpb25zIGZvciB0aGUgbG9hZC5cbiAqIEBwYXJhbSBbb3B0aW9ucy5jcm9zc09yaWdpbl0ge3N0cmluZ3xib29sZWFufSBJcyB0aGlzIHJlcXVlc3QgY3Jvc3Mtb3JpZ2luPyBEZWZhdWx0IGlzIHRvIGRldGVybWluZSBhdXRvbWF0aWNhbGx5LlxuICogQHBhcmFtIFtvcHRpb25zLmxvYWRUeXBlPVJlc291cmNlLkxPQURfVFlQRS5YSFJdIHtSZXNvdXJjZS5MT0FEX1RZUEV9IEhvdyBzaG91bGQgdGhpcyByZXNvdXJjZSBiZSBsb2FkZWQ/XG4gKiBAcGFyYW0gW29wdGlvbnMueGhyVHlwZT1SZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRS5ERUZBVUxUXSB7UmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEV9IEhvdyBzaG91bGQgdGhlIGRhdGEgYmVpbmdcbiAqICAgICAgbG9hZGVkIGJlIGludGVycHJldGVkIHdoZW4gdXNpbmcgWEhSP1xuICogQHBhcmFtIFtvcHRpb25zLm1ldGFkYXRhXSB7b2JqZWN0fSBFeHRyYSBpbmZvIGZvciBtaWRkbGV3YXJlLlxuICovXG5mdW5jdGlvbiBSZXNvdXJjZShuYW1lLCB1cmwsIG9wdGlvbnMpIHtcbiAgICBFdmVudEVtaXR0ZXIuY2FsbCh0aGlzKTtcblxuICAgIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuXG4gICAgaWYgKHR5cGVvZiBuYW1lICE9PSAnc3RyaW5nJyB8fCB0eXBlb2YgdXJsICE9PSAnc3RyaW5nJykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0JvdGggbmFtZSBhbmQgdXJsIGFyZSByZXF1aXJlZCBmb3IgY29uc3RydWN0aW5nIGEgcmVzb3VyY2UuJyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhlIG5hbWUgb2YgdGhpcyByZXNvdXJjZS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge3N0cmluZ31cbiAgICAgKiBAcmVhZG9ubHlcbiAgICAgKi9cbiAgICB0aGlzLm5hbWUgPSBuYW1lO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHVybCB1c2VkIHRvIGxvYWQgdGhpcyByZXNvdXJjZS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge3N0cmluZ31cbiAgICAgKiBAcmVhZG9ubHlcbiAgICAgKi9cbiAgICB0aGlzLnVybCA9IHVybDtcblxuICAgIC8qKlxuICAgICAqIFN0b3JlcyB3aGV0aGVyIG9yIG5vdCB0aGlzIHVybCBpcyBhIGRhdGEgdXJsLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKiBAcmVhZG9ubHlcbiAgICAgKi9cbiAgICB0aGlzLmlzRGF0YVVybCA9IHRoaXMudXJsLmluZGV4T2YoJ2RhdGE6JykgPT09IDA7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgZGF0YSB0aGF0IHdhcyBsb2FkZWQgYnkgdGhlIHJlc291cmNlLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7YW55fVxuICAgICAqL1xuICAgIHRoaXMuZGF0YSA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBJcyB0aGlzIHJlcXVlc3QgY3Jvc3Mtb3JpZ2luPyBJZiB1bnNldCwgZGV0ZXJtaW5lZCBhdXRvbWF0aWNhbGx5LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7c3RyaW5nfVxuICAgICAqL1xuICAgIHRoaXMuY3Jvc3NPcmlnaW4gPSBvcHRpb25zLmNyb3NzT3JpZ2luID09PSB0cnVlID8gJ2Fub255bW91cycgOiBvcHRpb25zLmNyb3NzT3JpZ2luO1xuXG4gICAgLyoqXG4gICAgICogVGhlIG1ldGhvZCBvZiBsb2FkaW5nIHRvIHVzZSBmb3IgdGhpcyByZXNvdXJjZS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1Jlc291cmNlLkxPQURfVFlQRX1cbiAgICAgKi9cbiAgICB0aGlzLmxvYWRUeXBlID0gb3B0aW9ucy5sb2FkVHlwZSB8fCB0aGlzLl9kZXRlcm1pbmVMb2FkVHlwZSgpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHR5cGUgdXNlZCB0byBsb2FkIHRoZSByZXNvdXJjZSB2aWEgWEhSLiBJZiB1bnNldCwgZGV0ZXJtaW5lZCBhdXRvbWF0aWNhbGx5LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7c3RyaW5nfVxuICAgICAqL1xuICAgIHRoaXMueGhyVHlwZSA9IG9wdGlvbnMueGhyVHlwZTtcblxuICAgIC8qKlxuICAgICAqIEV4dHJhIGluZm8gZm9yIG1pZGRsZXdhcmVcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge29iamVjdH1cbiAgICAgKi9cbiAgICB0aGlzLm1ldGFkYXRhID0gb3B0aW9ucy5tZXRhZGF0YSB8fCB7fTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBlcnJvciB0aGF0IG9jY3VycmVkIHdoaWxlIGxvYWRpbmcgKGlmIGFueSkuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtFcnJvcn1cbiAgICAgKiBAcmVhZG9ubHlcbiAgICAgKi9cbiAgICB0aGlzLmVycm9yID0gbnVsbDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBYSFIgb2JqZWN0IHRoYXQgd2FzIHVzZWQgdG8gbG9hZCB0aGlzIHJlc291cmNlLiBUaGlzIGlzIG9ubHkgc2V0XG4gICAgICogd2hlbiBgbG9hZFR5cGVgIGlzIGBSZXNvdXJjZS5MT0FEX1RZUEUuWEhSYC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1hNTEh0dHBSZXF1ZXN0fVxuICAgICAqL1xuICAgIHRoaXMueGhyID0gbnVsbDtcblxuICAgIC8qKlxuICAgICAqIERlc2NyaWJlcyBpZiB0aGlzIHJlc291cmNlIHdhcyBsb2FkZWQgYXMganNvbi4gT25seSB2YWxpZCBhZnRlciB0aGUgcmVzb3VyY2VcbiAgICAgKiBoYXMgY29tcGxldGVseSBsb2FkZWQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqL1xuICAgIHRoaXMuaXNKc29uID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBEZXNjcmliZXMgaWYgdGhpcyByZXNvdXJjZSB3YXMgbG9hZGVkIGFzIHhtbC4gT25seSB2YWxpZCBhZnRlciB0aGUgcmVzb3VyY2VcbiAgICAgKiBoYXMgY29tcGxldGVseSBsb2FkZWQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqL1xuICAgIHRoaXMuaXNYbWwgPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIERlc2NyaWJlcyBpZiB0aGlzIHJlc291cmNlIHdhcyBsb2FkZWQgYXMgYW4gaW1hZ2UgdGFnLiBPbmx5IHZhbGlkIGFmdGVyIHRoZSByZXNvdXJjZVxuICAgICAqIGhhcyBjb21wbGV0ZWx5IGxvYWRlZC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICovXG4gICAgdGhpcy5pc0ltYWdlID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBEZXNjcmliZXMgaWYgdGhpcyByZXNvdXJjZSB3YXMgbG9hZGVkIGFzIGFuIGF1ZGlvIHRhZy4gT25seSB2YWxpZCBhZnRlciB0aGUgcmVzb3VyY2VcbiAgICAgKiBoYXMgY29tcGxldGVseSBsb2FkZWQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqL1xuICAgIHRoaXMuaXNBdWRpbyA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogRGVzY3JpYmVzIGlmIHRoaXMgcmVzb3VyY2Ugd2FzIGxvYWRlZCBhcyBhIHZpZGVvIHRhZy4gT25seSB2YWxpZCBhZnRlciB0aGUgcmVzb3VyY2VcbiAgICAgKiBoYXMgY29tcGxldGVseSBsb2FkZWQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqL1xuICAgIHRoaXMuaXNWaWRlbyA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGBkZXF1ZXVlYCBtZXRob2QgdGhhdCB3aWxsIGJlIHVzZWQgYSBzdG9yYWdlIHBsYWNlIGZvciB0aGUgYXN5bmMgcXVldWUgZGVxdWV1ZSBtZXRob2RcbiAgICAgKiB1c2VkIHByaXZhdGVseSBieSB0aGUgbG9hZGVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7ZnVuY3Rpb259XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9kZXF1ZXVlID0gbnVsbDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBgY29tcGxldGVgIGZ1bmN0aW9uIGJvdW5kIHRvIHRoaXMgcmVzb3VyY2UncyBjb250ZXh0LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7ZnVuY3Rpb259XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9ib3VuZENvbXBsZXRlID0gdGhpcy5jb21wbGV0ZS5iaW5kKHRoaXMpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGBfb25FcnJvcmAgZnVuY3Rpb24gYm91bmQgdG8gdGhpcyByZXNvdXJjZSdzIGNvbnRleHQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtmdW5jdGlvbn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX2JvdW5kT25FcnJvciA9IHRoaXMuX29uRXJyb3IuYmluZCh0aGlzKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBgX29uUHJvZ3Jlc3NgIGZ1bmN0aW9uIGJvdW5kIHRvIHRoaXMgcmVzb3VyY2UncyBjb250ZXh0LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7ZnVuY3Rpb259XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9ib3VuZE9uUHJvZ3Jlc3MgPSB0aGlzLl9vblByb2dyZXNzLmJpbmQodGhpcyk7XG5cbiAgICAvLyB4aHIgY2FsbGJhY2tzXG4gICAgdGhpcy5fYm91bmRYaHJPbkVycm9yID0gdGhpcy5feGhyT25FcnJvci5iaW5kKHRoaXMpO1xuICAgIHRoaXMuX2JvdW5kWGhyT25BYm9ydCA9IHRoaXMuX3hock9uQWJvcnQuYmluZCh0aGlzKTtcbiAgICB0aGlzLl9ib3VuZFhock9uTG9hZCA9IHRoaXMuX3hock9uTG9hZC5iaW5kKHRoaXMpO1xuICAgIHRoaXMuX2JvdW5kWGRyT25UaW1lb3V0ID0gdGhpcy5feGRyT25UaW1lb3V0LmJpbmQodGhpcyk7XG5cbiAgICAvKipcbiAgICAgKiBFbWl0dGVkIHdoZW4gdGhlIHJlc291cmNlIGJlaW5ncyB0byBsb2FkLlxuICAgICAqXG4gICAgICogQGV2ZW50IHN0YXJ0XG4gICAgICogQG1lbWJlcm9mIFJlc291cmNlI1xuICAgICAqL1xuXG4gICAgLyoqXG4gICAgICogRW1pdHRlZCBlYWNoIHRpbWUgcHJvZ3Jlc3Mgb2YgdGhpcyByZXNvdXJjZSBsb2FkIHVwZGF0ZXMuXG4gICAgICogTm90IGFsbCByZXNvdXJjZXMgdHlwZXMgYW5kIGxvYWRlciBzeXN0ZW1zIGNhbiBzdXBwb3J0IHRoaXMgZXZlbnRcbiAgICAgKiBzbyBzb21ldGltZXMgaXQgbWF5IG5vdCBiZSBhdmFpbGFibGUuIElmIHRoZSByZXNvdXJjZVxuICAgICAqIGlzIGJlaW5nIGxvYWRlZCBvbiBhIG1vZGVybiBicm93c2VyLCB1c2luZyBYSFIsIGFuZCB0aGUgcmVtb3RlIHNlcnZlclxuICAgICAqIHByb3Blcmx5IHNldHMgQ29udGVudC1MZW5ndGggaGVhZGVycywgdGhlbiB0aGlzIHdpbGwgYmUgYXZhaWxhYmxlLlxuICAgICAqXG4gICAgICogQGV2ZW50IHByb2dyZXNzXG4gICAgICogQG1lbWJlcm9mIFJlc291cmNlI1xuICAgICAqL1xuXG4gICAgLyoqXG4gICAgICogRW1pdHRlZCBvbmNlIHRoaXMgcmVzb3VyY2UgaGFzIGxvYWRlZCwgaWYgdGhlcmUgd2FzIGFuIGVycm9yIGl0IHdpbGxcbiAgICAgKiBiZSBpbiB0aGUgYGVycm9yYCBwcm9wZXJ0eS5cbiAgICAgKlxuICAgICAqIEBldmVudCBjb21wbGV0ZVxuICAgICAqIEBtZW1iZXJvZiBSZXNvdXJjZSNcbiAgICAgKi9cbn1cblxuUmVzb3VyY2UucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShFdmVudEVtaXR0ZXIucHJvdG90eXBlKTtcblJlc291cmNlLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFJlc291cmNlO1xubW9kdWxlLmV4cG9ydHMgPSBSZXNvdXJjZTtcblxuLyoqXG4gKiBNYXJrcyB0aGUgcmVzb3VyY2UgYXMgY29tcGxldGUuXG4gKlxuICogQGZpcmVzIGNvbXBsZXRlXG4gKi9cblJlc291cmNlLnByb3RvdHlwZS5jb21wbGV0ZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAvLyBUT0RPOiBDbGVhbiB0aGlzIHVwIGluIGEgd3JhcHBlciBvciBzb21ldGhpbmcuLi5ncm9zcy4uLi5cbiAgICBpZiAodGhpcy5kYXRhICYmIHRoaXMuZGF0YS5yZW1vdmVFdmVudExpc3RlbmVyKSB7XG4gICAgICAgIHRoaXMuZGF0YS5yZW1vdmVFdmVudExpc3RlbmVyKCdlcnJvcicsIHRoaXMuX2JvdW5kT25FcnJvcik7XG4gICAgICAgIHRoaXMuZGF0YS5yZW1vdmVFdmVudExpc3RlbmVyKCdsb2FkJywgdGhpcy5fYm91bmRDb21wbGV0ZSk7XG4gICAgICAgIHRoaXMuZGF0YS5yZW1vdmVFdmVudExpc3RlbmVyKCdwcm9ncmVzcycsIHRoaXMuX2JvdW5kT25Qcm9ncmVzcyk7XG4gICAgICAgIHRoaXMuZGF0YS5yZW1vdmVFdmVudExpc3RlbmVyKCdjYW5wbGF5dGhyb3VnaCcsIHRoaXMuX2JvdW5kQ29tcGxldGUpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnhocikge1xuICAgICAgICBpZiAodGhpcy54aHIucmVtb3ZlRXZlbnRMaXN0ZW5lcikge1xuICAgICAgICAgICAgdGhpcy54aHIucmVtb3ZlRXZlbnRMaXN0ZW5lcignZXJyb3InLCB0aGlzLl9ib3VuZFhock9uRXJyb3IpO1xuICAgICAgICAgICAgdGhpcy54aHIucmVtb3ZlRXZlbnRMaXN0ZW5lcignYWJvcnQnLCB0aGlzLl9ib3VuZFhock9uQWJvcnQpO1xuICAgICAgICAgICAgdGhpcy54aHIucmVtb3ZlRXZlbnRMaXN0ZW5lcigncHJvZ3Jlc3MnLCB0aGlzLl9ib3VuZE9uUHJvZ3Jlc3MpO1xuICAgICAgICAgICAgdGhpcy54aHIucmVtb3ZlRXZlbnRMaXN0ZW5lcignbG9hZCcsIHRoaXMuX2JvdW5kWGhyT25Mb2FkKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMueGhyLm9uZXJyb3IgPSBudWxsO1xuICAgICAgICAgICAgdGhpcy54aHIub250aW1lb3V0ID0gbnVsbDtcbiAgICAgICAgICAgIHRoaXMueGhyLm9ucHJvZ3Jlc3MgPSBudWxsO1xuICAgICAgICAgICAgdGhpcy54aHIub25sb2FkID0gbnVsbDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMuZW1pdCgnY29tcGxldGUnLCB0aGlzKTtcbn07XG5cbi8qKlxuICogS2lja3Mgb2ZmIGxvYWRpbmcgb2YgdGhpcyByZXNvdXJjZS5cbiAqXG4gKiBAZmlyZXMgc3RhcnRcbiAqIEBwYXJhbSBbY2FsbGJhY2tdIHtmdW5jdGlvbn0gT3B0aW9uYWwgY2FsbGJhY2sgdG8gY2FsbCBvbmNlIHRoZSByZXNvdXJjZSBpcyBsb2FkZWQuXG4gKi9cblJlc291cmNlLnByb3RvdHlwZS5sb2FkID0gZnVuY3Rpb24gKGNiKSB7XG4gICAgdGhpcy5lbWl0KCdzdGFydCcsIHRoaXMpO1xuXG4gICAgLy8gaWYgYSBjYWxsYmFjayBpcyBzZXQsIGxpc3RlbiBmb3IgY29tcGxldGUgZXZlbnRcbiAgICBpZiAoY2IpIHtcbiAgICAgICAgdGhpcy5vbmNlKCdjb21wbGV0ZScsIGNiKTtcbiAgICB9XG5cbiAgICAvLyBpZiB1bnNldCwgZGV0ZXJtaW5lIHRoZSB2YWx1ZVxuICAgIGlmICh0aGlzLmNyb3NzT3JpZ2luID09PSBmYWxzZSB8fCB0eXBlb2YgdGhpcy5jcm9zc09yaWdpbiAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgdGhpcy5jcm9zc09yaWdpbiA9IHRoaXMuX2RldGVybWluZUNyb3NzT3JpZ2luKHRoaXMudXJsKTtcbiAgICB9XG5cbiAgICBzd2l0Y2godGhpcy5sb2FkVHlwZSkge1xuICAgICAgICBjYXNlIFJlc291cmNlLkxPQURfVFlQRS5JTUFHRTpcbiAgICAgICAgICAgIHRoaXMuX2xvYWRJbWFnZSgpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSBSZXNvdXJjZS5MT0FEX1RZUEUuQVVESU86XG4gICAgICAgICAgICB0aGlzLl9sb2FkRWxlbWVudCgnYXVkaW8nKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgUmVzb3VyY2UuTE9BRF9UWVBFLlZJREVPOlxuICAgICAgICAgICAgdGhpcy5fbG9hZEVsZW1lbnQoJ3ZpZGVvJyk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIFJlc291cmNlLkxPQURfVFlQRS5YSFI6XG4gICAgICAgICAgICAvKiBmYWxscyB0aHJvdWdoICovXG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICBpZiAodXNlWGRyICYmIHRoaXMuY3Jvc3NPcmlnaW4pIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9sb2FkWGRyKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9sb2FkWGhyKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBicmVhaztcbiAgICB9XG59O1xuXG4vKipcbiAqIExvYWRzIHRoaXMgcmVzb3VyY2VzIHVzaW5nIGFuIEltYWdlIG9iamVjdC5cbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5SZXNvdXJjZS5wcm90b3R5cGUuX2xvYWRJbWFnZSA9IGZ1bmN0aW9uICgpIHtcbiAgICB0aGlzLmRhdGEgPSBuZXcgSW1hZ2UoKTtcblxuICAgIGlmICh0aGlzLmNyb3NzT3JpZ2luKSB7XG4gICAgICAgIHRoaXMuZGF0YS5jcm9zc09yaWdpbiA9IHRoaXMuY3Jvc3NPcmlnaW47XG4gICAgfVxuXG4gICAgdGhpcy5kYXRhLnNyYyA9IHRoaXMudXJsO1xuXG4gICAgdGhpcy5pc0ltYWdlID0gdHJ1ZTtcblxuICAgIHRoaXMuZGF0YS5hZGRFdmVudExpc3RlbmVyKCdlcnJvcicsIHRoaXMuX2JvdW5kT25FcnJvciwgZmFsc2UpO1xuICAgIHRoaXMuZGF0YS5hZGRFdmVudExpc3RlbmVyKCdsb2FkJywgdGhpcy5fYm91bmRDb21wbGV0ZSwgZmFsc2UpO1xuICAgIHRoaXMuZGF0YS5hZGRFdmVudExpc3RlbmVyKCdwcm9ncmVzcycsIHRoaXMuX2JvdW5kT25Qcm9ncmVzcywgZmFsc2UpO1xufTtcblxuLyoqXG4gKiBMb2FkcyB0aGlzIHJlc291cmNlcyB1c2luZyBhbiBIVE1MQXVkaW9FbGVtZW50IG9yIEhUTUxWaWRlb0VsZW1lbnQuXG4gKlxuICogQHByaXZhdGVcbiAqL1xuUmVzb3VyY2UucHJvdG90eXBlLl9sb2FkRWxlbWVudCA9IGZ1bmN0aW9uICh0eXBlKSB7XG4gICAgaWYgKHR5cGUgPT09ICdhdWRpbycgJiYgdHlwZW9mIEF1ZGlvICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICB0aGlzLmRhdGEgPSBuZXcgQXVkaW8oKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHRoaXMuZGF0YSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQodHlwZSk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuZGF0YSA9PT0gbnVsbCkge1xuICAgICAgICB0aGlzLmVycm9yID0gbmV3IEVycm9yKCdVbnN1cHBvcnRlZCBlbGVtZW50ICcgKyB0eXBlKTtcbiAgICAgICAgdGhpcy5jb21wbGV0ZSgpO1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gc3VwcG9ydCBmb3IgQ29jb29uSlMgQ2FudmFzKyBydW50aW1lLCBsYWNrcyBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzb3VyY2UnKVxuICAgIGlmIChuYXZpZ2F0b3IuaXNDb2Nvb25KUykge1xuICAgICAgICB0aGlzLmRhdGEuc3JjID0gQXJyYXkuaXNBcnJheSh0aGlzLnVybCkgPyB0aGlzLnVybFswXSA6IHRoaXMudXJsO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkodGhpcy51cmwpKSB7XG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMudXJsLmxlbmd0aDsgKytpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5kYXRhLmFwcGVuZENoaWxkKHRoaXMuX2NyZWF0ZVNvdXJjZSh0eXBlLCB0aGlzLnVybFtpXSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5kYXRhLmFwcGVuZENoaWxkKHRoaXMuX2NyZWF0ZVNvdXJjZSh0eXBlLCB0aGlzLnVybCkpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgdGhpc1snaXMnICsgdHlwZVswXS50b1VwcGVyQ2FzZSgpICsgdHlwZS5zdWJzdHJpbmcoMSldID0gdHJ1ZTtcblxuICAgIHRoaXMuZGF0YS5hZGRFdmVudExpc3RlbmVyKCdlcnJvcicsIHRoaXMuX2JvdW5kT25FcnJvciwgZmFsc2UpO1xuICAgIHRoaXMuZGF0YS5hZGRFdmVudExpc3RlbmVyKCdsb2FkJywgdGhpcy5fYm91bmRDb21wbGV0ZSwgZmFsc2UpO1xuICAgIHRoaXMuZGF0YS5hZGRFdmVudExpc3RlbmVyKCdwcm9ncmVzcycsIHRoaXMuX2JvdW5kT25Qcm9ncmVzcywgZmFsc2UpO1xuICAgIHRoaXMuZGF0YS5hZGRFdmVudExpc3RlbmVyKCdjYW5wbGF5dGhyb3VnaCcsIHRoaXMuX2JvdW5kQ29tcGxldGUsIGZhbHNlKTtcblxuICAgIHRoaXMuZGF0YS5sb2FkKCk7XG59O1xuXG4vKipcbiAqIExvYWRzIHRoaXMgcmVzb3VyY2VzIHVzaW5nIGFuIFhNTEh0dHBSZXF1ZXN0LlxuICpcbiAqIEBwcml2YXRlXG4gKi9cblJlc291cmNlLnByb3RvdHlwZS5fbG9hZFhociA9IGZ1bmN0aW9uICgpIHtcbiAgICAvLyBpZiB1bnNldCwgZGV0ZXJtaW5lIHRoZSB2YWx1ZVxuICAgIGlmICh0eXBlb2YgdGhpcy54aHJUeXBlICE9PSAnc3RyaW5nJykge1xuICAgICAgICB0aGlzLnhoclR5cGUgPSB0aGlzLl9kZXRlcm1pbmVYaHJUeXBlKCk7XG4gICAgfVxuXG4gICAgdmFyIHhociA9IHRoaXMueGhyID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7XG5cbiAgICAvLyBzZXQgdGhlIHJlcXVlc3QgdHlwZSBhbmQgdXJsXG4gICAgeGhyLm9wZW4oJ0dFVCcsIHRoaXMudXJsLCB0cnVlKTtcblxuICAgIC8vIGxvYWQganNvbiBhcyB0ZXh0IGFuZCBwYXJzZSBpdCBvdXJzZWx2ZXMuIFdlIGRvIHRoaXMgYmVjYXVzZSBzb21lIGJyb3dzZXJzXG4gICAgLy8gKmNvdWdoKiBzYWZhcmkgKmNvdWdoKiBjYW4ndCBkZWFsIHdpdGggaXQuXG4gICAgaWYgKHRoaXMueGhyVHlwZSA9PT0gUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuSlNPTiB8fCB0aGlzLnhoclR5cGUgPT09IFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkRPQ1VNRU5UKSB7XG4gICAgICAgIHhoci5yZXNwb25zZVR5cGUgPSBSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRS5URVhUO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgeGhyLnJlc3BvbnNlVHlwZSA9IHRoaXMueGhyVHlwZTtcbiAgICB9XG5cbiAgICB4aHIuYWRkRXZlbnRMaXN0ZW5lcignZXJyb3InLCB0aGlzLl9ib3VuZFhock9uRXJyb3IsIGZhbHNlKTtcbiAgICB4aHIuYWRkRXZlbnRMaXN0ZW5lcignYWJvcnQnLCB0aGlzLl9ib3VuZFhock9uQWJvcnQsIGZhbHNlKTtcbiAgICB4aHIuYWRkRXZlbnRMaXN0ZW5lcigncHJvZ3Jlc3MnLCB0aGlzLl9ib3VuZE9uUHJvZ3Jlc3MsIGZhbHNlKTtcbiAgICB4aHIuYWRkRXZlbnRMaXN0ZW5lcignbG9hZCcsIHRoaXMuX2JvdW5kWGhyT25Mb2FkLCBmYWxzZSk7XG5cbiAgICB4aHIuc2VuZCgpO1xufTtcblxuLyoqXG4gKiBMb2FkcyB0aGlzIHJlc291cmNlcyB1c2luZyBhbiBYRG9tYWluUmVxdWVzdC4gVGhpcyBpcyBoZXJlIGJlY2F1c2Ugd2UgbmVlZCB0byBzdXBwb3J0IElFOSAoZ3Jvc3MpLlxuICpcbiAqIEBwcml2YXRlXG4gKi9cblJlc291cmNlLnByb3RvdHlwZS5fbG9hZFhkciA9IGZ1bmN0aW9uICgpIHtcbiAgICAvLyBpZiB1bnNldCwgZGV0ZXJtaW5lIHRoZSB2YWx1ZVxuICAgIGlmICh0eXBlb2YgdGhpcy54aHJUeXBlICE9PSAnc3RyaW5nJykge1xuICAgICAgICB0aGlzLnhoclR5cGUgPSB0aGlzLl9kZXRlcm1pbmVYaHJUeXBlKCk7XG4gICAgfVxuXG4gICAgdmFyIHhkciA9IHRoaXMueGhyID0gbmV3IFhEb21haW5SZXF1ZXN0KCk7XG5cbiAgICAvLyBYRG9tYWluUmVxdWVzdCBoYXMgYSBmZXcgcXVpcmtzLiBPY2Nhc2lvbmFsbHkgaXQgd2lsbCBhYm9ydCByZXF1ZXN0c1xuICAgIC8vIEEgd2F5IHRvIGF2b2lkIHRoaXMgaXMgdG8gbWFrZSBzdXJlIEFMTCBjYWxsYmFja3MgYXJlIHNldCBldmVuIGlmIG5vdCB1c2VkXG4gICAgLy8gTW9yZSBpbmZvIGhlcmU6IGh0dHA6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvMTU3ODY5NjYveGRvbWFpbnJlcXVlc3QtYWJvcnRzLXBvc3Qtb24taWUtOVxuICAgIHhkci50aW1lb3V0ID0gNTAwMDtcblxuICAgIHhkci5vbmVycm9yID0gdGhpcy5fYm91bmRYaHJPbkVycm9yO1xuICAgIHhkci5vbnRpbWVvdXQgPSB0aGlzLl9ib3VuZFhkck9uVGltZW91dDtcbiAgICB4ZHIub25wcm9ncmVzcyA9IHRoaXMuX2JvdW5kT25Qcm9ncmVzcztcbiAgICB4ZHIub25sb2FkID0gdGhpcy5fYm91bmRYaHJPbkxvYWQ7XG5cbiAgICB4ZHIub3BlbignR0VUJywgdGhpcy51cmwsIHRydWUpO1xuXG4gICAgLy8gIE5vdGU6IFRoZSB4ZHIuc2VuZCgpIGNhbGwgaXMgd3JhcHBlZCBpbiBhIHRpbWVvdXQgdG8gcHJldmVudCBhbiBpc3N1ZSB3aXRoIHRoZSBpbnRlcmZhY2Ugd2hlcmUgc29tZSByZXF1ZXN0cyBhcmUgbG9zdFxuICAgIC8vICBpZiBtdWx0aXBsZSBYRG9tYWluUmVxdWVzdHMgYXJlIGJlaW5nIHNlbnQgYXQgdGhlIHNhbWUgdGltZS5cbiAgICAvLyBTb21lIGluZm8gaGVyZTogaHR0cHM6Ly9naXRodWIuY29tL3Bob3RvbnN0b3JtL3BoYXNlci9pc3N1ZXMvMTI0OFxuICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgICB4ZHIuc2VuZCgpO1xuICAgIH0sIDApO1xufTtcblxuLyoqXG4gKiBDcmVhdGVzIGEgc291cmNlIHVzZWQgaW4gbG9hZGluZyB2aWEgYW4gZWxlbWVudC5cbiAqXG4gKiBAcGFyYW0gdHlwZSB7c3RyaW5nfSBUaGUgZWxlbWVudCB0eXBlICh2aWRlbyBvciBhdWRpbykuXG4gKiBAcGFyYW0gdXJsIHtzdHJpbmd9IFRoZSBzb3VyY2UgVVJMIHRvIGxvYWQgZnJvbS5cbiAqIEBwYXJhbSBbbWltZV0ge3N0cmluZ30gVGhlIG1pbWUgdHlwZSBvZiB0aGUgdmlkZW9cbiAqIEBwcml2YXRlXG4gKi9cblJlc291cmNlLnByb3RvdHlwZS5fY3JlYXRlU291cmNlID0gZnVuY3Rpb24gKHR5cGUsIHVybCwgbWltZSkge1xuICAgIGlmICghbWltZSkge1xuICAgICAgICBtaW1lID0gdHlwZSArICcvJyArIHVybC5zdWJzdHIodXJsLmxhc3RJbmRleE9mKCcuJykgKyAxKTtcbiAgICB9XG5cbiAgICB2YXIgc291cmNlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc291cmNlJyk7XG5cbiAgICBzb3VyY2Uuc3JjID0gdXJsO1xuICAgIHNvdXJjZS50eXBlID0gbWltZTtcblxuICAgIHJldHVybiBzb3VyY2U7XG59O1xuXG4vKipcbiAqIENhbGxlZCBpZiBhIGxvYWQgZXJyb3JzIG91dC5cbiAqXG4gKiBAcGFyYW0gZXZlbnQge0V2ZW50fSBUaGUgZXJyb3IgZXZlbnQgZnJvbSB0aGUgZWxlbWVudCB0aGF0IGVtaXRzIGl0LlxuICogQHByaXZhdGVcbiAqL1xuUmVzb3VyY2UucHJvdG90eXBlLl9vbkVycm9yID0gZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgdGhpcy5lcnJvciA9IG5ldyBFcnJvcignRmFpbGVkIHRvIGxvYWQgZWxlbWVudCB1c2luZyAnICsgZXZlbnQudGFyZ2V0Lm5vZGVOYW1lKTtcbiAgICB0aGlzLmNvbXBsZXRlKCk7XG59O1xuXG4vKipcbiAqIENhbGxlZCBpZiBhIGxvYWQgcHJvZ3Jlc3MgZXZlbnQgZmlyZXMgZm9yIHhoci94ZHIuXG4gKlxuICogQGZpcmVzIHByb2dyZXNzXG4gKiBAcGFyYW0gZXZlbnQge1hNTEh0dHBSZXF1ZXN0UHJvZ3Jlc3NFdmVudHxFdmVudH1cbiAqIEBwcml2YXRlXG4gKi9cblJlc291cmNlLnByb3RvdHlwZS5fb25Qcm9ncmVzcyA9ICBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICBpZiAoZXZlbnQgJiYgZXZlbnQubGVuZ3RoQ29tcHV0YWJsZSkge1xuICAgICAgICB0aGlzLmVtaXQoJ3Byb2dyZXNzJywgdGhpcywgZXZlbnQubG9hZGVkIC8gZXZlbnQudG90YWwpO1xuICAgIH1cbn07XG5cbi8qKlxuICogQ2FsbGVkIGlmIGFuIGVycm9yIGV2ZW50IGZpcmVzIGZvciB4aHIveGRyLlxuICpcbiAqIEBwYXJhbSBldmVudCB7WE1MSHR0cFJlcXVlc3RFcnJvckV2ZW50fEV2ZW50fVxuICogQHByaXZhdGVcbiAqL1xuUmVzb3VyY2UucHJvdG90eXBlLl94aHJPbkVycm9yID0gZnVuY3Rpb24gKCkge1xuICAgIHRoaXMuZXJyb3IgPSBuZXcgRXJyb3IoXG4gICAgICAgIHJlcVR5cGUodGhpcy54aHIpICsgJyBSZXF1ZXN0IGZhaWxlZC4gJyArXG4gICAgICAgICdTdGF0dXM6ICcgKyB0aGlzLnhoci5zdGF0dXMgKyAnLCB0ZXh0OiBcIicgKyB0aGlzLnhoci5zdGF0dXNUZXh0ICsgJ1wiJ1xuICAgICk7XG5cbiAgICB0aGlzLmNvbXBsZXRlKCk7XG59O1xuXG4vKipcbiAqIENhbGxlZCBpZiBhbiBhYm9ydCBldmVudCBmaXJlcyBmb3IgeGhyLlxuICpcbiAqIEBwYXJhbSBldmVudCB7WE1MSHR0cFJlcXVlc3RBYm9ydEV2ZW50fVxuICogQHByaXZhdGVcbiAqL1xuUmVzb3VyY2UucHJvdG90eXBlLl94aHJPbkFib3J0ID0gZnVuY3Rpb24gKCkge1xuICAgIHRoaXMuZXJyb3IgPSBuZXcgRXJyb3IocmVxVHlwZSh0aGlzLnhocikgKyAnIFJlcXVlc3Qgd2FzIGFib3J0ZWQgYnkgdGhlIHVzZXIuJyk7XG4gICAgdGhpcy5jb21wbGV0ZSgpO1xufTtcblxuLyoqXG4gKiBDYWxsZWQgaWYgYSB0aW1lb3V0IGV2ZW50IGZpcmVzIGZvciB4ZHIuXG4gKlxuICogQHBhcmFtIGV2ZW50IHtFdmVudH1cbiAqIEBwcml2YXRlXG4gKi9cblJlc291cmNlLnByb3RvdHlwZS5feGRyT25UaW1lb3V0ID0gZnVuY3Rpb24gKCkge1xuICAgIHRoaXMuZXJyb3IgPSBuZXcgRXJyb3IocmVxVHlwZSh0aGlzLnhocikgKyAnIFJlcXVlc3QgdGltZWQgb3V0LicpO1xuICAgIHRoaXMuY29tcGxldGUoKTtcbn07XG5cbi8qKlxuICogQ2FsbGVkIHdoZW4gZGF0YSBzdWNjZXNzZnVsbHkgbG9hZHMgZnJvbSBhbiB4aHIveGRyIHJlcXVlc3QuXG4gKlxuICogQHBhcmFtIGV2ZW50IHtYTUxIdHRwUmVxdWVzdExvYWRFdmVudHxFdmVudH1cbiAqIEBwcml2YXRlXG4gKi9cblJlc291cmNlLnByb3RvdHlwZS5feGhyT25Mb2FkID0gZnVuY3Rpb24gKCkge1xuICAgIHZhciB4aHIgPSB0aGlzLnhocixcbiAgICAgICAgc3RhdHVzID0geGhyLnN0YXR1cyAhPT0gdW5kZWZpbmVkID8geGhyLnN0YXR1cyA6IDIwMDsgLy9YRFIgaGFzIG5vIGAuc3RhdHVzYCwgYXNzdW1lIDIwMC5cblxuICAgIC8vIHN0YXR1cyBjYW4gYmUgMCB3aGVuIHVzaW5nIHRoZSBmaWxlOi8vIHByb3RvY29sLCBhbHNvIGNoZWNrIGlmIGEgcmVzcG9uc2Ugd2FzIGZvdW5kXG4gICAgaWYgKHN0YXR1cyA9PT0gMjAwIHx8IHN0YXR1cyA9PT0gMjA0IHx8IChzdGF0dXMgPT09IDAgJiYgeGhyLnJlc3BvbnNlVGV4dC5sZW5ndGggPiAwKSkge1xuICAgICAgICAvLyBpZiB0ZXh0LCBqdXN0IHJldHVybiBpdFxuICAgICAgICBpZiAodGhpcy54aHJUeXBlID09PSBSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRS5URVhUKSB7XG4gICAgICAgICAgICB0aGlzLmRhdGEgPSB4aHIucmVzcG9uc2VUZXh0O1xuICAgICAgICB9XG4gICAgICAgIC8vIGlmIGpzb24sIHBhcnNlIGludG8ganNvbiBvYmplY3RcbiAgICAgICAgZWxzZSBpZiAodGhpcy54aHJUeXBlID09PSBSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRS5KU09OKSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIHRoaXMuZGF0YSA9IEpTT04ucGFyc2UoeGhyLnJlc3BvbnNlVGV4dCk7XG4gICAgICAgICAgICAgICAgdGhpcy5pc0pzb24gPSB0cnVlO1xuICAgICAgICAgICAgfSBjYXRjaChlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5lcnJvciA9IG5ldyBFcnJvcignRXJyb3IgdHJ5aW5nIHRvIHBhcnNlIGxvYWRlZCBqc29uOicsIGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIGlmIHhtbCwgcGFyc2UgaW50byBhbiB4bWwgZG9jdW1lbnQgb3IgZGl2IGVsZW1lbnRcbiAgICAgICAgZWxzZSBpZiAodGhpcy54aHJUeXBlID09PSBSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRS5ET0NVTUVOVCkge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBpZiAod2luZG93LkRPTVBhcnNlcikge1xuICAgICAgICAgICAgICAgICAgICB2YXIgZG9tcGFyc2VyID0gbmV3IERPTVBhcnNlcigpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmRhdGEgPSBkb21wYXJzZXIucGFyc2VGcm9tU3RyaW5nKHhoci5yZXNwb25zZVRleHQsICd0ZXh0L3htbCcpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICAgICAgICAgICAgICBkaXYuaW5uZXJIVE1MID0geGhyLnJlc3BvbnNlVGV4dDtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kYXRhID0gZGl2O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzLmlzWG1sID0gdHJ1ZTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmVycm9yID0gbmV3IEVycm9yKCdFcnJvciB0cnlpbmcgdG8gcGFyc2UgbG9hZGVkIHhtbDonLCBlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvLyBvdGhlciB0eXBlcyBqdXN0IHJldHVybiB0aGUgcmVzcG9uc2VcbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmRhdGEgPSB4aHIucmVzcG9uc2UgfHwgeGhyLnJlc3BvbnNlVGV4dDtcbiAgICAgICAgfVxuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgdGhpcy5lcnJvciA9IG5ldyBFcnJvcignWycgKyB4aHIuc3RhdHVzICsgJ10nICsgeGhyLnN0YXR1c1RleHQgKyAnOicgKyB4aHIucmVzcG9uc2VVUkwpO1xuICAgIH1cblxuICAgIHRoaXMuY29tcGxldGUoKTtcbn07XG5cbmZ1bmN0aW9uIHJlcVR5cGUoeGhyKSB7XG4gICAgcmV0dXJuIHhoci50b1N0cmluZygpLnJlcGxhY2UoJ29iamVjdCAnLCAnJyk7XG59XG5cbi8qKlxuICogU2V0cyB0aGUgYGNyb3NzT3JpZ2luYCBwcm9wZXJ0eSBmb3IgdGhpcyByZXNvdXJjZSBiYXNlZCBvbiBpZiB0aGUgdXJsXG4gKiBmb3IgdGhpcyByZXNvdXJjZSBpcyBjcm9zcy1vcmlnaW4uIElmIGNyb3NzT3JpZ2luIHdhcyBtYW51YWxseSBzZXQsIHRoaXNcbiAqIGZ1bmN0aW9uIGRvZXMgbm90aGluZy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHVybCB7c3RyaW5nfSBUaGUgdXJsIHRvIHRlc3QuXG4gKiBAcGFyYW0gW2xvY2F0aW9uPXdpbmRvdy5sb2NhdGlvbl0ge29iamVjdH0gVGhlIGxvY2F0aW9uIG9iamVjdCB0byB0ZXN0IGFnYWluc3QuXG4gKiBAcmV0dXJuIHtzdHJpbmd9IFRoZSBjcm9zc09yaWdpbiB2YWx1ZSB0byB1c2UgKG9yIGVtcHR5IHN0cmluZyBmb3Igbm9uZSkuXG4gKi9cblJlc291cmNlLnByb3RvdHlwZS5fZGV0ZXJtaW5lQ3Jvc3NPcmlnaW4gPSBmdW5jdGlvbiAodXJsLCBsb2MpIHtcbiAgICAvLyBkYXRhOiBhbmQgamF2YXNjcmlwdDogdXJscyBhcmUgY29uc2lkZXJlZCBzYW1lLW9yaWdpblxuICAgIGlmICh1cmwuaW5kZXhPZignZGF0YTonKSA9PT0gMCkge1xuICAgICAgICByZXR1cm4gJyc7XG4gICAgfVxuXG4gICAgLy8gZGVmYXVsdCBpcyB3aW5kb3cubG9jYXRpb25cbiAgICBsb2MgPSBsb2MgfHwgd2luZG93LmxvY2F0aW9uO1xuXG4gICAgaWYgKCF0ZW1wQW5jaG9yKSB7XG4gICAgICAgIHRlbXBBbmNob3IgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdhJyk7XG4gICAgfVxuXG4gICAgLy8gbGV0IHRoZSBicm93c2VyIGRldGVybWluZSB0aGUgZnVsbCBocmVmIGZvciB0aGUgdXJsIG9mIHRoaXMgcmVzb3VyY2UgYW5kIHRoZW5cbiAgICAvLyBwYXJzZSB3aXRoIHRoZSBub2RlIHVybCBsaWIsIHdlIGNhbid0IHVzZSB0aGUgcHJvcGVydGllcyBvZiB0aGUgYW5jaG9yIGVsZW1lbnRcbiAgICAvLyBiZWNhdXNlIHRoZXkgZG9uJ3Qgd29yayBpbiBJRTkgOihcbiAgICB0ZW1wQW5jaG9yLmhyZWYgPSB1cmw7XG4gICAgdXJsID0gX3VybC5wYXJzZSh0ZW1wQW5jaG9yLmhyZWYpO1xuXG4gICAgdmFyIHNhbWVQb3J0ID0gKCF1cmwucG9ydCAmJiBsb2MucG9ydCA9PT0gJycpIHx8ICh1cmwucG9ydCA9PT0gbG9jLnBvcnQpO1xuXG4gICAgLy8gaWYgY3Jvc3Mgb3JpZ2luXG4gICAgaWYgKHVybC5ob3N0bmFtZSAhPT0gbG9jLmhvc3RuYW1lIHx8ICFzYW1lUG9ydCB8fCB1cmwucHJvdG9jb2wgIT09IGxvYy5wcm90b2NvbCkge1xuICAgICAgICByZXR1cm4gJ2Fub255bW91cyc7XG4gICAgfVxuXG4gICAgcmV0dXJuICcnO1xufTtcblxuLyoqXG4gKiBEZXRlcm1pbmVzIHRoZSByZXNwb25zZVR5cGUgb2YgYW4gWEhSIHJlcXVlc3QgYmFzZWQgb24gdGhlIGV4dGVuc2lvbiBvZiB0aGVcbiAqIHJlc291cmNlIGJlaW5nIGxvYWRlZC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHJldHVybiB7UmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEV9IFRoZSByZXNwb25zZVR5cGUgdG8gdXNlLlxuICovXG5SZXNvdXJjZS5wcm90b3R5cGUuX2RldGVybWluZVhoclR5cGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIFJlc291cmNlLl94aHJUeXBlTWFwW3RoaXMuX2dldEV4dGVuc2lvbigpXSB8fCBSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRS5URVhUO1xufTtcblxuUmVzb3VyY2UucHJvdG90eXBlLl9kZXRlcm1pbmVMb2FkVHlwZSA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gUmVzb3VyY2UuX2xvYWRUeXBlTWFwW3RoaXMuX2dldEV4dGVuc2lvbigpXSB8fCBSZXNvdXJjZS5MT0FEX1RZUEUuWEhSO1xufTtcblxuUmVzb3VyY2UucHJvdG90eXBlLl9nZXRFeHRlbnNpb24gPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHVybCA9IHRoaXMudXJsLFxuICAgICAgICBleHQ7XG5cbiAgICBpZiAodGhpcy5pc0RhdGFVcmwpIHtcbiAgICAgICAgdmFyIHNsYXNoSW5kZXggPSB1cmwuaW5kZXhPZignLycpO1xuICAgICAgICBleHQgPSB1cmwuc3Vic3RyaW5nKHNsYXNoSW5kZXggKyAxLCB1cmwuaW5kZXhPZignOycsIHNsYXNoSW5kZXgpKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHZhciBxdWVyeVN0YXJ0ID0gdXJsLmluZGV4T2YoJz8nKTtcbiAgICAgICAgaWYgKHF1ZXJ5U3RhcnQgIT09IC0xKSB7XG4gICAgICAgICAgICB1cmwgPSB1cmwuc3Vic3RyaW5nKDAsIHF1ZXJ5U3RhcnQpO1xuICAgICAgICB9XG5cbiAgICAgICAgZXh0ID0gdXJsLnN1YnN0cmluZyh1cmwubGFzdEluZGV4T2YoJy4nKSArIDEpO1xuICAgIH1cblxuICAgIHJldHVybiBleHQ7XG59O1xuXG4vKipcbiAqIERldGVybWluZXMgdGhlIG1pbWUgdHlwZSBvZiBhbiBYSFIgcmVxdWVzdCBiYXNlZCBvbiB0aGUgcmVzcG9uc2VUeXBlIG9mXG4gKiByZXNvdXJjZSBiZWluZyBsb2FkZWQuXG4gKlxuICogQHByaXZhdGVcbiAqIEByZXR1cm4ge3N0cmluZ30gVGhlIG1pbWUgdHlwZSB0byB1c2UuXG4gKi9cblJlc291cmNlLnByb3RvdHlwZS5fZ2V0TWltZUZyb21YaHJUeXBlID0gZnVuY3Rpb24gKHR5cGUpIHtcbiAgICBzd2l0Y2godHlwZSkge1xuICAgICAgICBjYXNlIFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkJVRkZFUjpcbiAgICAgICAgICAgIHJldHVybiAnYXBwbGljYXRpb24vb2N0ZXQtYmluYXJ5JztcblxuICAgICAgICBjYXNlIFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkJMT0I6XG4gICAgICAgICAgICByZXR1cm4gJ2FwcGxpY2F0aW9uL2Jsb2InO1xuXG4gICAgICAgIGNhc2UgUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuRE9DVU1FTlQ6XG4gICAgICAgICAgICByZXR1cm4gJ2FwcGxpY2F0aW9uL3htbCc7XG5cbiAgICAgICAgY2FzZSBSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRS5KU09OOlxuICAgICAgICAgICAgcmV0dXJuICdhcHBsaWNhdGlvbi9qc29uJztcblxuICAgICAgICBjYXNlIFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkRFRkFVTFQ6XG4gICAgICAgIGNhc2UgUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuVEVYVDpcbiAgICAgICAgICAgIC8qIGZhbGxzIHRocm91Z2ggKi9cbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIHJldHVybiAndGV4dC9wbGFpbic7XG5cbiAgICB9XG59O1xuXG4vKipcbiAqIFRoZSB0eXBlcyBvZiBsb2FkaW5nIGEgcmVzb3VyY2UgY2FuIHVzZS5cbiAqXG4gKiBAc3RhdGljXG4gKiBAY29uc3RhbnRcbiAqIEBwcm9wZXJ0eSB7b2JqZWN0fSBMT0FEX1RZUEVcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBMT0FEX1RZUEUuWEhSIC0gVXNlcyBYTUxIdHRwUmVxdWVzdCB0byBsb2FkIHRoZSByZXNvdXJjZS5cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBMT0FEX1RZUEUuSU1BR0UgLSBVc2VzIGFuIGBJbWFnZWAgb2JqZWN0IHRvIGxvYWQgdGhlIHJlc291cmNlLlxuICogQHByb3BlcnR5IHtudW1iZXJ9IExPQURfVFlQRS5BVURJTyAtIFVzZXMgYW4gYEF1ZGlvYCBvYmplY3QgdG8gbG9hZCB0aGUgcmVzb3VyY2UuXG4gKiBAcHJvcGVydHkge251bWJlcn0gTE9BRF9UWVBFLlZJREVPIC0gVXNlcyBhIGBWaWRlb2Agb2JqZWN0IHRvIGxvYWQgdGhlIHJlc291cmNlLlxuICovXG5SZXNvdXJjZS5MT0FEX1RZUEUgPSB7XG4gICAgWEhSOiAgICAxLFxuICAgIElNQUdFOiAgMixcbiAgICBBVURJTzogIDMsXG4gICAgVklERU86ICA0XG59O1xuXG4vKipcbiAqIFRoZSBYSFIgcmVhZHkgc3RhdGVzLCB1c2VkIGludGVybmFsbHkuXG4gKlxuICogQHN0YXRpY1xuICogQGNvbnN0YW50XG4gKiBAcHJvcGVydHkge29iamVjdH0gWEhSX1JFQURZX1NUQVRFXG4gKiBAcHJvcGVydHkge251bWJlcn0gWEhSX1JFQURZX1NUQVRFLlVOU0VOVCAtIG9wZW4oKWhhcyBub3QgYmVlbiBjYWxsZWQgeWV0LlxuICogQHByb3BlcnR5IHtudW1iZXJ9IFhIUl9SRUFEWV9TVEFURS5PUEVORUQgLSBzZW5kKCloYXMgbm90IGJlZW4gY2FsbGVkIHlldC5cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBYSFJfUkVBRFlfU1RBVEUuSEVBREVSU19SRUNFSVZFRCAtIHNlbmQoKSBoYXMgYmVlbiBjYWxsZWQsIGFuZCBoZWFkZXJzIGFuZCBzdGF0dXMgYXJlIGF2YWlsYWJsZS5cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBYSFJfUkVBRFlfU1RBVEUuTE9BRElORyAtIERvd25sb2FkaW5nOyByZXNwb25zZVRleHQgaG9sZHMgcGFydGlhbCBkYXRhLlxuICogQHByb3BlcnR5IHtudW1iZXJ9IFhIUl9SRUFEWV9TVEFURS5ET05FIC0gVGhlIG9wZXJhdGlvbiBpcyBjb21wbGV0ZS5cbiAqL1xuUmVzb3VyY2UuWEhSX1JFQURZX1NUQVRFID0ge1xuICAgIFVOU0VOVDogMCxcbiAgICBPUEVORUQ6IDEsXG4gICAgSEVBREVSU19SRUNFSVZFRDogMixcbiAgICBMT0FESU5HOiAzLFxuICAgIERPTkU6IDRcbn07XG5cbi8qKlxuICogVGhlIFhIUiByZWFkeSBzdGF0ZXMsIHVzZWQgaW50ZXJuYWxseS5cbiAqXG4gKiBAc3RhdGljXG4gKiBAY29uc3RhbnRcbiAqIEBwcm9wZXJ0eSB7b2JqZWN0fSBYSFJfUkVTUE9OU0VfVFlQRVxuICogQHByb3BlcnR5IHtzdHJpbmd9IFhIUl9SRVNQT05TRV9UWVBFLkRFRkFVTFQgLSBkZWZhdWx0cyB0byB0ZXh0XG4gKiBAcHJvcGVydHkge3N0cmluZ30gWEhSX1JFU1BPTlNFX1RZUEUuQlVGRkVSIC0gQXJyYXlCdWZmZXJcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBYSFJfUkVTUE9OU0VfVFlQRS5CTE9CIC0gQmxvYlxuICogQHByb3BlcnR5IHtzdHJpbmd9IFhIUl9SRVNQT05TRV9UWVBFLkRPQ1VNRU5UIC0gRG9jdW1lbnRcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBYSFJfUkVTUE9OU0VfVFlQRS5KU09OIC0gT2JqZWN0XG4gKiBAcHJvcGVydHkge3N0cmluZ30gWEhSX1JFU1BPTlNFX1RZUEUuVEVYVCAtIFN0cmluZ1xuICovXG5SZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRSA9IHtcbiAgICBERUZBVUxUOiAgICAndGV4dCcsXG4gICAgQlVGRkVSOiAgICAgJ2FycmF5YnVmZmVyJyxcbiAgICBCTE9COiAgICAgICAnYmxvYicsXG4gICAgRE9DVU1FTlQ6ICAgJ2RvY3VtZW50JyxcbiAgICBKU09OOiAgICAgICAnanNvbicsXG4gICAgVEVYVDogICAgICAgJ3RleHQnXG59O1xuXG5SZXNvdXJjZS5fbG9hZFR5cGVNYXAgPSB7XG4gICAgJ2dpZic6ICAgICAgUmVzb3VyY2UuTE9BRF9UWVBFLklNQUdFLFxuICAgICdwbmcnOiAgICAgIFJlc291cmNlLkxPQURfVFlQRS5JTUFHRSxcbiAgICAnYm1wJzogICAgICBSZXNvdXJjZS5MT0FEX1RZUEUuSU1BR0UsXG4gICAgJ2pwZyc6ICAgICAgUmVzb3VyY2UuTE9BRF9UWVBFLklNQUdFLFxuICAgICdqcGVnJzogICAgIFJlc291cmNlLkxPQURfVFlQRS5JTUFHRSxcbiAgICAndGlmJzogICAgICBSZXNvdXJjZS5MT0FEX1RZUEUuSU1BR0UsXG4gICAgJ3RpZmYnOiAgICAgUmVzb3VyY2UuTE9BRF9UWVBFLklNQUdFLFxuICAgICd3ZWJwJzogICAgIFJlc291cmNlLkxPQURfVFlQRS5JTUFHRSxcbiAgICAndGdhJzogICAgICBSZXNvdXJjZS5MT0FEX1RZUEUuSU1BR0Vcbn07XG5cblJlc291cmNlLl94aHJUeXBlTWFwID0ge1xuICAgIC8vIHhtbFxuICAgICd4aHRtbCc6ICAgIFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkRPQ1VNRU5ULFxuICAgICdodG1sJzogICAgIFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkRPQ1VNRU5ULFxuICAgICdodG0nOiAgICAgIFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkRPQ1VNRU5ULFxuICAgICd4bWwnOiAgICAgIFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkRPQ1VNRU5ULFxuICAgICd0bXgnOiAgICAgIFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkRPQ1VNRU5ULFxuICAgICd0c3gnOiAgICAgIFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkRPQ1VNRU5ULFxuICAgICdzdmcnOiAgICAgIFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkRPQ1VNRU5ULFxuXG4gICAgLy8gaW1hZ2VzXG4gICAgJ2dpZic6ICAgICAgUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuQkxPQixcbiAgICAncG5nJzogICAgICBSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRS5CTE9CLFxuICAgICdibXAnOiAgICAgIFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkJMT0IsXG4gICAgJ2pwZyc6ICAgICAgUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuQkxPQixcbiAgICAnanBlZyc6ICAgICBSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRS5CTE9CLFxuICAgICd0aWYnOiAgICAgIFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkJMT0IsXG4gICAgJ3RpZmYnOiAgICAgUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuQkxPQixcbiAgICAnd2VicCc6ICAgICBSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRS5CTE9CLFxuICAgICd0Z2EnOiAgICAgIFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkJMT0IsXG5cbiAgICAvLyBqc29uXG4gICAgJ2pzb24nOiAgICAgUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuSlNPTixcblxuICAgIC8vIHRleHRcbiAgICAndGV4dCc6ICAgICBSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRS5URVhULFxuICAgICd0eHQnOiAgICAgIFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLlRFWFRcbn07XG5cbi8qKlxuICogU2V0cyB0aGUgbG9hZCB0eXBlIHRvIGJlIHVzZWQgZm9yIGEgc3BlY2lmaWMgZXh0ZW5zaW9uLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBwYXJhbSBleHRuYW1lIHtzdHJpbmd9IFRoZSBleHRlbnNpb24gdG8gc2V0IHRoZSB0eXBlIGZvciwgZS5nLiBcInBuZ1wiIG9yIFwiZm50XCJcbiAqIEBwYXJhbSBsb2FkVHlwZSB7UmVzb3VyY2UuTE9BRF9UWVBFfSBUaGUgbG9hZCB0eXBlIHRvIHNldCBpdCB0by5cbiAqL1xuUmVzb3VyY2Uuc2V0RXh0ZW5zaW9uTG9hZFR5cGUgPSBmdW5jdGlvbiAoZXh0bmFtZSwgbG9hZFR5cGUpIHtcbiAgICBzZXRFeHRNYXAoUmVzb3VyY2UuX2xvYWRUeXBlTWFwLCBleHRuYW1lLCBsb2FkVHlwZSk7XG59O1xuXG4vKipcbiAqIFNldHMgdGhlIGxvYWQgdHlwZSB0byBiZSB1c2VkIGZvciBhIHNwZWNpZmljIGV4dGVuc2lvbi5cbiAqXG4gKiBAc3RhdGljXG4gKiBAcGFyYW0gZXh0bmFtZSB7c3RyaW5nfSBUaGUgZXh0ZW5zaW9uIHRvIHNldCB0aGUgdHlwZSBmb3IsIGUuZy4gXCJwbmdcIiBvciBcImZudFwiXG4gKiBAcGFyYW0geGhyVHlwZSB7UmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEV9IFRoZSB4aHIgdHlwZSB0byBzZXQgaXQgdG8uXG4gKi9cblJlc291cmNlLnNldEV4dGVuc2lvblhoclR5cGUgPSBmdW5jdGlvbiAoZXh0bmFtZSwgeGhyVHlwZSkge1xuICAgIHNldEV4dE1hcChSZXNvdXJjZS5feGhyVHlwZU1hcCwgZXh0bmFtZSwgeGhyVHlwZSk7XG59O1xuXG5mdW5jdGlvbiBzZXRFeHRNYXAobWFwLCBleHRuYW1lLCB2YWwpIHtcbiAgICBpZiAoZXh0bmFtZSAmJiBleHRuYW1lLmluZGV4T2YoJy4nKSA9PT0gMCkge1xuICAgICAgICBleHRuYW1lID0gZXh0bmFtZS5zdWJzdHJpbmcoMSk7XG4gICAgfVxuXG4gICAgaWYgKCFleHRuYW1lKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBtYXBbZXh0bmFtZV0gPSB2YWw7XG59XG4iLCJtb2R1bGUuZXhwb3J0cyA9IHtcblxuICAgIC8vIHByaXZhdGUgcHJvcGVydHlcbiAgICBfa2V5U3RyOiBcIkFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5Ky89XCIsXG5cbiAgICBlbmNvZGVCaW5hcnk6IGZ1bmN0aW9uIChpbnB1dCkge1xuICAgICAgICB2YXIgb3V0cHV0ID0gXCJcIjtcbiAgICAgICAgdmFyIGJ5dGVidWZmZXI7XG4gICAgICAgIHZhciBlbmNvZGVkQ2hhckluZGV4ZXMgPSBuZXcgQXJyYXkoNCk7XG4gICAgICAgIHZhciBpbnggPSAwO1xuICAgICAgICB2YXIgam54ID0gMDtcbiAgICAgICAgdmFyIHBhZGRpbmdCeXRlcyA9IDA7XG5cbiAgICAgICAgd2hpbGUgKGlueCA8IGlucHV0Lmxlbmd0aCkge1xuICAgICAgICAgICAgLy8gRmlsbCBieXRlIGJ1ZmZlciBhcnJheVxuICAgICAgICAgICAgYnl0ZWJ1ZmZlciA9IG5ldyBBcnJheSgzKTtcbiAgICAgICAgICAgIGZvciAoam54ID0gMDsgam54IDwgYnl0ZWJ1ZmZlci5sZW5ndGg7IGpueCsrKSB7XG4gICAgICAgICAgICAgICAgaWYgKGlueCA8IGlucHV0Lmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICAvLyB0aHJvdyBhd2F5IGhpZ2gtb3JkZXIgYnl0ZSwgYXMgZG9jdW1lbnRlZCBhdDpcbiAgICAgICAgICAgICAgICAgICAgLy8gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvRW4vVXNpbmdfWE1MSHR0cFJlcXVlc3QjSGFuZGxpbmdfYmluYXJ5X2RhdGFcbiAgICAgICAgICAgICAgICAgICAgYnl0ZWJ1ZmZlcltqbnhdID0gaW5wdXQuY2hhckNvZGVBdChpbngrKykgJiAweGZmO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgYnl0ZWJ1ZmZlcltqbnhdID0gMDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIEdldCBlYWNoIGVuY29kZWQgY2hhcmFjdGVyLCA2IGJpdHMgYXQgYSB0aW1lXG4gICAgICAgICAgICAvLyBpbmRleCAxOiBmaXJzdCA2IGJpdHNcbiAgICAgICAgICAgIGVuY29kZWRDaGFySW5kZXhlc1swXSA9IGJ5dGVidWZmZXJbMF0gPj4gMjtcbiAgICAgICAgICAgIC8vIGluZGV4IDI6IHNlY29uZCA2IGJpdHMgKDIgbGVhc3Qgc2lnbmlmaWNhbnQgYml0cyBmcm9tIGlucHV0IGJ5dGUgMSArIDQgbW9zdCBzaWduaWZpY2FudCBiaXRzIGZyb20gYnl0ZSAyKVxuICAgICAgICAgICAgZW5jb2RlZENoYXJJbmRleGVzWzFdID0gKChieXRlYnVmZmVyWzBdICYgMHgzKSA8PCA0KSB8IChieXRlYnVmZmVyWzFdID4+IDQpO1xuICAgICAgICAgICAgLy8gaW5kZXggMzogdGhpcmQgNiBiaXRzICg0IGxlYXN0IHNpZ25pZmljYW50IGJpdHMgZnJvbSBpbnB1dCBieXRlIDIgKyAyIG1vc3Qgc2lnbmlmaWNhbnQgYml0cyBmcm9tIGJ5dGUgMylcbiAgICAgICAgICAgIGVuY29kZWRDaGFySW5kZXhlc1syXSA9ICgoYnl0ZWJ1ZmZlclsxXSAmIDB4MGYpIDw8IDIpIHwgKGJ5dGVidWZmZXJbMl0gPj4gNik7XG4gICAgICAgICAgICAvLyBpbmRleCAzOiBmb3J0aCA2IGJpdHMgKDYgbGVhc3Qgc2lnbmlmaWNhbnQgYml0cyBmcm9tIGlucHV0IGJ5dGUgMylcbiAgICAgICAgICAgIGVuY29kZWRDaGFySW5kZXhlc1szXSA9IGJ5dGVidWZmZXJbMl0gJiAweDNmO1xuXG4gICAgICAgICAgICAvLyBEZXRlcm1pbmUgd2hldGhlciBwYWRkaW5nIGhhcHBlbmVkLCBhbmQgYWRqdXN0IGFjY29yZGluZ2x5XG4gICAgICAgICAgICBwYWRkaW5nQnl0ZXMgPSBpbnggLSAoaW5wdXQubGVuZ3RoIC0gMSk7XG4gICAgICAgICAgICBzd2l0Y2ggKHBhZGRpbmdCeXRlcykge1xuICAgICAgICAgICAgICAgIGNhc2UgMjpcbiAgICAgICAgICAgICAgICAgICAgLy8gU2V0IGxhc3QgMiBjaGFyYWN0ZXJzIHRvIHBhZGRpbmcgY2hhclxuICAgICAgICAgICAgICAgICAgICBlbmNvZGVkQ2hhckluZGV4ZXNbM10gPSA2NDtcbiAgICAgICAgICAgICAgICAgICAgZW5jb2RlZENoYXJJbmRleGVzWzJdID0gNjQ7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgY2FzZSAxOlxuICAgICAgICAgICAgICAgICAgICAvLyBTZXQgbGFzdCBjaGFyYWN0ZXIgdG8gcGFkZGluZyBjaGFyXG4gICAgICAgICAgICAgICAgICAgIGVuY29kZWRDaGFySW5kZXhlc1szXSA9IDY0O1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrOyAvLyBObyBwYWRkaW5nIC0gcHJvY2VlZFxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBOb3cgd2Ugd2lsbCBncmFiIGVhY2ggYXBwcm9wcmlhdGUgY2hhcmFjdGVyIG91dCBvZiBvdXIga2V5c3RyaW5nXG4gICAgICAgICAgICAvLyBiYXNlZCBvbiBvdXIgaW5kZXggYXJyYXkgYW5kIGFwcGVuZCBpdCB0byB0aGUgb3V0cHV0IHN0cmluZ1xuICAgICAgICAgICAgZm9yIChqbnggPSAwOyBqbnggPCBlbmNvZGVkQ2hhckluZGV4ZXMubGVuZ3RoOyBqbngrKykge1xuICAgICAgICAgICAgICAgIG91dHB1dCArPSB0aGlzLl9rZXlTdHIuY2hhckF0KGVuY29kZWRDaGFySW5kZXhlc1tqbnhdKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gb3V0cHV0O1xuICAgIH1cbn07XG4iLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vTG9hZGVyJyk7XG5cbm1vZHVsZS5leHBvcnRzLlJlc291cmNlID0gcmVxdWlyZSgnLi9SZXNvdXJjZScpO1xuXG5tb2R1bGUuZXhwb3J0cy5taWRkbGV3YXJlID0ge1xuICAgIGNhY2hpbmc6IHtcbiAgICAgICAgbWVtb3J5OiByZXF1aXJlKCcuL21pZGRsZXdhcmVzL2NhY2hpbmcvbWVtb3J5JylcbiAgICB9LFxuICAgIHBhcnNpbmc6IHtcbiAgICAgICAgYmxvYjogcmVxdWlyZSgnLi9taWRkbGV3YXJlcy9wYXJzaW5nL2Jsb2InKVxuICAgIH1cbn07XG4iLCIvLyBhIHNpbXBsZSBpbi1tZW1vcnkgY2FjaGUgZm9yIHJlc291cmNlc1xudmFyIGNhY2hlID0ge307XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBmdW5jdGlvbiAocmVzb3VyY2UsIG5leHQpIHtcbiAgICAgICAgLy8gaWYgY2FjaGVkLCB0aGVuIHNldCBkYXRhIGFuZCBjb21wbGV0ZSB0aGUgcmVzb3VyY2VcbiAgICAgICAgaWYgKGNhY2hlW3Jlc291cmNlLnVybF0pIHtcbiAgICAgICAgICAgIHJlc291cmNlLmRhdGEgPSBjYWNoZVtyZXNvdXJjZS51cmxdO1xuICAgICAgICAgICAgcmVzb3VyY2UuY29tcGxldGUoKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBpZiBub3QgY2FjaGVkLCB3YWl0IGZvciBjb21wbGV0ZSBhbmQgc3RvcmUgaXQgaW4gdGhlIGNhY2hlLlxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJlc291cmNlLm9uY2UoJ2NvbXBsZXRlJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgY2FjaGVbdGhpcy51cmxdID0gdGhpcy5kYXRhO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgXG4gICAgICAgIG5leHQoKTtcbiAgICB9O1xufTtcbiIsInZhciBSZXNvdXJjZSA9IHJlcXVpcmUoJy4uLy4uL1Jlc291cmNlJyksXG4gICAgYjY0ID0gcmVxdWlyZSgnLi4vLi4vYjY0Jyk7XG5cbndpbmRvdy5VUkwgPSB3aW5kb3cuVVJMIHx8IHdpbmRvdy53ZWJraXRVUkw7XG5cbi8vIGEgbWlkZGxld2FyZSBmb3IgdHJhbnNmb3JtaW5nIFhIUiBsb2FkZWQgQmxvYnMgaW50byBtb3JlIHVzZWZ1bCBvYmplY3RzXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBmdW5jdGlvbiAocmVzb3VyY2UsIG5leHQpIHtcbiAgICAgICAgaWYgKCFyZXNvdXJjZS5kYXRhKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV4dCgpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gaWYgdGhpcyB3YXMgYW4gWEhSIGxvYWQgb2YgYSBibG9iXG4gICAgICAgIGlmIChyZXNvdXJjZS54aHIgJiYgcmVzb3VyY2UueGhyVHlwZSA9PT0gUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuQkxPQikge1xuICAgICAgICAgICAgLy8gaWYgdGhlcmUgaXMgbm8gYmxvYiBzdXBwb3J0IHdlIHByb2JhYmx5IGdvdCBhIGJpbmFyeSBzdHJpbmcgYmFja1xuICAgICAgICAgICAgaWYgKCF3aW5kb3cuQmxvYiB8fCB0eXBlb2YgcmVzb3VyY2UuZGF0YSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgICAgICB2YXIgdHlwZSA9IHJlc291cmNlLnhoci5nZXRSZXNwb25zZUhlYWRlcignY29udGVudC10eXBlJyk7XG5cbiAgICAgICAgICAgICAgICAvLyB0aGlzIGlzIGFuIGltYWdlLCBjb252ZXJ0IHRoZSBiaW5hcnkgc3RyaW5nIGludG8gYSBkYXRhIHVybFxuICAgICAgICAgICAgICAgIGlmICh0eXBlICYmIHR5cGUuaW5kZXhPZignaW1hZ2UnKSA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICByZXNvdXJjZS5kYXRhID0gbmV3IEltYWdlKCk7XG4gICAgICAgICAgICAgICAgICAgIHJlc291cmNlLmRhdGEuc3JjID0gJ2RhdGE6JyArIHR5cGUgKyAnO2Jhc2U2NCwnICsgYjY0LmVuY29kZUJpbmFyeShyZXNvdXJjZS54aHIucmVzcG9uc2VUZXh0KTtcblxuICAgICAgICAgICAgICAgICAgICByZXNvdXJjZS5pc0ltYWdlID0gdHJ1ZTtcblxuICAgICAgICAgICAgICAgICAgICAvLyB3YWl0IHVudGlsIHRoZSBpbWFnZSBsb2FkcyBhbmQgdGhlbiBjYWxsYmFja1xuICAgICAgICAgICAgICAgICAgICByZXNvdXJjZS5kYXRhLm9ubG9hZCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc291cmNlLmRhdGEub25sb2FkID0gbnVsbDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgbmV4dCgpO1xuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIGlmIGNvbnRlbnQgdHlwZSBzYXlzIHRoaXMgaXMgYW4gaW1hZ2UsIHRoZW4gd2Ugc2hvdWxkIHRyYW5zZm9ybSB0aGUgYmxvYiBpbnRvIGFuIEltYWdlIG9iamVjdFxuICAgICAgICAgICAgZWxzZSBpZiAocmVzb3VyY2UuZGF0YS50eXBlLmluZGV4T2YoJ2ltYWdlJykgPT09IDApIHtcbiAgICAgICAgICAgICAgICB2YXIgc3JjID0gVVJMLmNyZWF0ZU9iamVjdFVSTChyZXNvdXJjZS5kYXRhKTtcblxuICAgICAgICAgICAgICAgIHJlc291cmNlLmJsb2IgPSByZXNvdXJjZS5kYXRhO1xuICAgICAgICAgICAgICAgIHJlc291cmNlLmRhdGEgPSBuZXcgSW1hZ2UoKTtcbiAgICAgICAgICAgICAgICByZXNvdXJjZS5kYXRhLnNyYyA9IHNyYztcblxuICAgICAgICAgICAgICAgIHJlc291cmNlLmlzSW1hZ2UgPSB0cnVlO1xuXG4gICAgICAgICAgICAgICAgLy8gY2xlYW51cCB0aGUgbm8gbG9uZ2VyIHVzZWQgYmxvYiBhZnRlciB0aGUgaW1hZ2UgbG9hZHNcbiAgICAgICAgICAgICAgICByZXNvdXJjZS5kYXRhLm9ubG9hZCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgVVJMLnJldm9rZU9iamVjdFVSTChzcmMpO1xuICAgICAgICAgICAgICAgICAgICByZXNvdXJjZS5kYXRhLm9ubG9hZCA9IG51bGw7XG5cbiAgICAgICAgICAgICAgICAgICAgbmV4dCgpO1xuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBuZXh0KCk7XG4gICAgICAgIH1cbiAgICB9O1xufTtcbiIsIm1vZHVsZS5leHBvcnRzPXtcbiAgXCJuYW1lXCI6IFwicGl4aS5qc1wiLFxuICBcInZlcnNpb25cIjogXCIzLjAuMTAtZGV2XCIsXG4gIFwiZGVzY3JpcHRpb25cIjogXCJQaXhpLmpzIGlzIGEgZmFzdCBsaWdodHdlaWdodCAyRCBsaWJyYXJ5IHRoYXQgd29ya3MgYWNyb3NzIGFsbCBkZXZpY2VzLlwiLFxuICBcImF1dGhvclwiOiBcIk1hdCBHcm92ZXNcIixcbiAgXCJjb250cmlidXRvcnNcIjogW1xuICAgIFwiQ2hhZCBFbmdsZXIgPGNoYWRAcGFudGhlcmRldi5jb20+XCIsXG4gICAgXCJSaWNoYXJkIERhdmV5IDxyZGF2ZXlAZ21haWwuY29tPlwiXG4gIF0sXG4gIFwibWFpblwiOiBcIi4vc3JjL2luZGV4LmpzXCIsXG4gIFwiaG9tZXBhZ2VcIjogXCJodHRwOi8vZ29vZGJveWRpZ2l0YWwuY29tL1wiLFxuICBcImJ1Z3NcIjogXCJodHRwczovL2dpdGh1Yi5jb20vcGl4aWpzL3BpeGkuanMvaXNzdWVzXCIsXG4gIFwibGljZW5zZVwiOiBcIk1JVFwiLFxuICBcInJlcG9zaXRvcnlcIjoge1xuICAgIFwidHlwZVwiOiBcImdpdFwiLFxuICAgIFwidXJsXCI6IFwiaHR0cHM6Ly9naXRodWIuY29tL3BpeGlqcy9waXhpLmpzLmdpdFwiXG4gIH0sXG4gIFwic2NyaXB0c1wiOiB7XG4gICAgXCJzdGFydFwiOiBcImd1bHAgJiYgZ3VscCB3YXRjaFwiLFxuICAgIFwidGVzdFwiOiBcImd1bHAgJiYgdGVzdGVtIGNpXCIsXG4gICAgXCJidWlsZFwiOiBcImd1bHBcIixcbiAgICBcImRvY3NcIjogXCJqc2RvYyAtYyAuL2d1bHAvdXRpbC9qc2RvYy5jb25mLmpzb24gLVIgUkVBRE1FLm1kXCJcbiAgfSxcbiAgXCJmaWxlc1wiOiBbXG4gICAgXCJiaW4vXCIsXG4gICAgXCJzcmMvXCIsXG4gICAgXCJDT05UUklCVVRJTkcubWRcIixcbiAgICBcIkxJQ0VOU0VcIixcbiAgICBcInBhY2thZ2UuanNvblwiLFxuICAgIFwiUkVBRE1FLm1kXCJcbiAgXSxcbiAgXCJkZXBlbmRlbmNpZXNcIjoge1xuICAgIFwiYXN5bmNcIjogXCJeMS41LjBcIixcbiAgICBcImJyZnNcIjogXCJeMS40LjFcIixcbiAgICBcImVhcmN1dFwiOiBcIl4yLjAuN1wiLFxuICAgIFwiZXZlbnRlbWl0dGVyM1wiOiBcIl4xLjEuMVwiLFxuICAgIFwib2JqZWN0LWFzc2lnblwiOiBcIl40LjAuMVwiLFxuICAgIFwicGl4aS1nbC1jb3JlXCI6IFwiZ2l0K2h0dHBzOi8vZ2l0aHViLmNvbS9Hb29kQm95RGlnaXRhbC9waXhpLWdsLWNvcmUuZ2l0XCIsXG4gICAgXCJyZXNvdXJjZS1sb2FkZXJcIjogXCJeMS42LjRcIlxuICB9LFxuICBcImRldkRlcGVuZGVuY2llc1wiOiB7XG4gICAgXCJicm93c2VyaWZ5XCI6IFwiXjExLjEuMFwiLFxuICAgIFwiY2hhaVwiOiBcIl4zLjIuMFwiLFxuICAgIFwiZGVsXCI6IFwiXjIuMC4yXCIsXG4gICAgXCJndWxwXCI6IFwiXjMuOS4wXCIsXG4gICAgXCJndWxwLWNhY2hlZFwiOiBcIl4xLjEuMFwiLFxuICAgIFwiZ3VscC1jb25jYXRcIjogXCJeMi42LjBcIixcbiAgICBcImd1bHAtZGVidWdcIjogXCJeMi4xLjBcIixcbiAgICBcImd1bHAtaGVhZGVyXCI6IFwiXjEuNy4xXCIsXG4gICAgXCJndWxwLWpzaGludFwiOiBcIl4xLjExLjJcIixcbiAgICBcImd1bHAtbWlycm9yXCI6IFwiXjAuNC4wXCIsXG4gICAgXCJndWxwLXBsdW1iZXJcIjogXCJeMS4wLjFcIixcbiAgICBcImd1bHAtcmVuYW1lXCI6IFwiXjEuMi4yXCIsXG4gICAgXCJndWxwLXNvdXJjZW1hcHNcIjogXCJeMS41LjJcIixcbiAgICBcImd1bHAtdWdsaWZ5XCI6IFwiXjEuNC4xXCIsXG4gICAgXCJndWxwLXV0aWxcIjogXCJeMy4wLjZcIixcbiAgICBcImphZ3VhcmpzLWpzZG9jXCI6IFwiZ2l0K2h0dHBzOi8vZ2l0aHViLmNvbS9kYXZpZHNoaW1qcy9qYWd1YXJqcy1qc2RvYy5naXRcIixcbiAgICBcImpzZG9jXCI6IFwiXjMuMy4yXCIsXG4gICAgXCJqc2hpbnQtc3VtbWFyeVwiOiBcIl4wLjQuMFwiLFxuICAgIFwibWluaW1pc3RcIjogXCJeMS4yLjBcIixcbiAgICBcIm1vY2hhXCI6IFwiXjIuMy4yXCIsXG4gICAgXCJyZXF1aXJlLWRpclwiOiBcIl4wLjMuMFwiLFxuICAgIFwicnVuLXNlcXVlbmNlXCI6IFwiXjEuMS4yXCIsXG4gICAgXCJ0ZXN0ZW1cIjogXCJeMC45LjRcIixcbiAgICBcInZpbnlsLWJ1ZmZlclwiOiBcIl4xLjAuMFwiLFxuICAgIFwidmlueWwtc291cmNlLXN0cmVhbVwiOiBcIl4xLjEuMFwiLFxuICAgIFwid2F0Y2hpZnlcIjogXCJeMy40LjBcIlxuICB9LFxuICBcImJyb3dzZXJpZnlcIjoge1xuICAgIFwidHJhbnNmb3JtXCI6IFtcbiAgICAgIFwiYnJmc1wiXG4gICAgXVxuICB9XG59XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uL2NvcmUnKTtcblxuLy8gYWRkIHNvbWUgZXh0cmEgdmFyaWFibGVzIHRvIHRoZSBjb250YWluZXIuLlxuT2JqZWN0LmFzc2lnbihcbiAgICBjb3JlLkRpc3BsYXlPYmplY3QucHJvdG90eXBlLFxuICAgIHJlcXVpcmUoJy4vYWNjZXNzaWJsZVRhcmdldCcpXG4pO1xuXG5cbi8qKlxuICogVGhlIEFjY2Vzc2liaWxpdHkgbWFuYWdlciByZWFjcmVhdGVzIHRoZSBhYmlsaXR5IHRvIHRhYiBhbmQgYW5kIGhhdmUgY29udGVudCByZWFkIGJ5IHNjcmVlbiByZWFkZXJzLiBUaGlzIGlzIHZlcnkgaW1wb3J0YW50IGFzIGl0IGNhbiBwb3NzaWJseSBoZWxwIHBlb3BsZSB3aXRoIGRpc2FiaWxpdGllcyBhY2Nlc3MgcGl4aSBjb250ZW50LlxuICogTXVjaCBsaWtlIGludGVyYWN0aW9uIGFueSBEaXNwbGF5T2JqZWN0IGNhbiBiZSBtYWRlIGFjY2Vzc2libGUuIFRoaXMgbWFuYWdlciB3aWxsIG1hcCB0aGUgZXZlbnRzIGFzIGlmIHRoZSBtb3VzZSB3YXMgYmVpbmcgdXNlZCwgbWluaW1pemluZyB0aGUgZWZmZXJvdCByZXF1aXJlZCB0byBpbXBsZW1lbnQuXG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLkNhbnZhc1JlbmRlcmVyfFBJWEkuV2ViR0xSZW5kZXJlcn0gQSByZWZlcmVuY2UgdG8gdGhlIGN1cnJlbnQgcmVuZGVyZXJcbiAqL1xuZnVuY3Rpb24gQWNjZXNzaWJpbGl0eU1hbmFnZXIocmVuZGVyZXIpXG57XG5cdC8vIGZpcnN0IHdlIGNyZWF0ZSBhIGRpdiB0aGF0IHdpbGwgc2l0IG92ZXIgdGhlIHBpeGkgZWxlbWVudC4gVGhpcyBpcyB3aGVyZSB0aGUgZGl2IG92ZXJsYXlzIHdpbGwgZ28uXG4gICAgdmFyIGRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgIFxuICAgIGRpdi5zdHlsZS53aWR0aCA9IDEwMCArICdweCc7XG4gICAgZGl2LnN0eWxlLmhlaWdodCA9IDEwMCArICdweCc7XG4gICAgZGl2LnN0eWxlLnBvc2l0aW9uID0gJ2Fic29sdXRlJztcbiAgICBkaXYuc3R5bGUudG9wID0gMDtcbiAgICBkaXYuc3R5bGUubGVmdCA9IDA7XG4gICAvL1xuICAgIGRpdi5zdHlsZS56SW5kZXggPSAyO1xuICAgXHRcbiAgIFx0LyoqXG4gICBcdCAqIFRoaXMgaXMgdGhlIGRvbSBlbGVtZW50IHRoYXQgd2lsbCBzaXQgb3ZlciB0aGUgcGl4aSBlbGVtZW50LiBUaGlzIGlzIHdoZXJlIHRoZSBkaXYgb3ZlcmxheXMgd2lsbCBnby5cbiAgIFx0ICogXG4gICBcdCAqIEB0eXBlIHtIVE1MRWxlbWVudH1cbiAgIFx0ICogQHByaXZhdGVcbiAgIFx0ICovXG4gICBcdHRoaXMuZGl2ID0gZGl2O1xuXG4gICBcdC8qKlxuICAgXHQgKiBBIHNpbXBsZSBwb29sIGZvciBzdG9yaW5nIGRpdnMuXG4gICBcdCAqIFxuICAgXHQgKiBAdHlwZSB7QXJyYXl9XG4gICBcdCAqIEBwcml2YXRlXG4gICBcdCAqL1xuIFx0dGhpcy5wb29sID0gW107XG5cbiBcdC8qKlxuIFx0ICogVGhpcyBpcyBhIHRpY2sgdXNlZCB0byBjaGVjayBpZiBhbiBvYmplY3QgaXMgbm8gbG9uZ2VyIGJlaW5nIHJlbmRlcmVkLlxuIFx0ICogXG4gXHQgKiBAdHlwZSB7TnVtYmVyfVxuIFx0ICogQHByaXZhdGVcbiBcdCAqL1xuICAgXHR0aGlzLnJlbmRlcklkID0gMDtcblxuICAgXHQvKipcbiAgIFx0ICogU2V0dGluZyB0aGlzIHRvIHRydWUgd2lsbCB2aXN1YWxseSBzaG93IHRoZSBkaXZzXG4gICBcdCAqIFxuICAgXHQgKiBAdHlwZSB7Qm9vbGVhbn1cbiAgIFx0ICovXG4gICBcdHRoaXMuZGVidWcgPSBmYWxzZTtcblxuICBcdC8qKlxuICAgICAqIFRoZSByZW5kZXJlciB0aGlzIGFjY2Vzc2liaWxpdHkgbWFuYWdlciB3b3JrcyBmb3IuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlN5c3RlbVJlbmRlcmVyfVxuICAgICAqL1xuICAgXHR0aGlzLnJlbmRlcmVyID0gcmVuZGVyZXI7XG5cbiAgIFx0LyoqXG4gICAgICogVGhlIGFycmF5IG9mIGN1cnJlbnRseSBhY3RpdmUgYWNjZXNzaWJsZSBpdGVtcy5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge0FycmF5fVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICBcdHRoaXMuY2hpbGRyZW4gPSBbXTtcbiAgIFx0XG4gICBcdC8qKlxuICAgICAqIHByZSBiaW5kIHRoZSBmdW5jdGlvbnMuLlxuICAgICAqL1xuICAgXHR0aGlzLl9vbktleURvd24gPSB0aGlzLl9vbktleURvd24uYmluZCh0aGlzKTtcbiAgIFx0dGhpcy5fb25Nb3VzZU1vdmUgPSB0aGlzLl9vbk1vdXNlTW92ZS5iaW5kKHRoaXMpO1xuICAgXHRcbiAgIFx0LyoqXG4gICAgICogc3RvcmVzIHRoZSBzdGF0ZSBvZiB0aGUgbWFuYWdlci4gSWYgdGhlcmUgYXJlIG5vIGFjY2Vzc2libGUgb2JqZWN0cyBvciB0aGUgbW91c2UgaXMgbW92aW5nIHRoZSB3aWxsIGJlIGZhbHNlLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7QXJyYXl9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgIFx0dGhpcy5pc0FjdGl2ZSA9IGZhbHNlO1xuXG5cbiAgIFx0Ly8gbGV0IGxpc3RlbiBmb3IgdGFiLi4gb25jZSBwcmVzc2VkIHdlIGNhbiBmaXJlIHVwIGFuZCBzaG93IHRoZSBhY2Nlc3NpYmlsaXR5IGxheWVyXG4gICBcdHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdrZXlkb3duJywgdGhpcy5fb25LZXlEb3duLCBmYWxzZSk7XG59XG5cblxuQWNjZXNzaWJpbGl0eU1hbmFnZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gQWNjZXNzaWJpbGl0eU1hbmFnZXI7XG5tb2R1bGUuZXhwb3J0cyA9IEFjY2Vzc2liaWxpdHlNYW5hZ2VyO1xuXG4vKipcbiAqIEFjdGl2YXRpbmcgd2lsbCBjYXVzZSB0aGUgQWNjZXNzaWJpbGl0eSBsYXllciB0byBiZSBzaG93bi4gVGhpcyBpcyBjYWxsZWQgd2hlbiBhIHVzZXIgcHJlc2VzIHRoZSB0YWIga2V5XG4gKiBAcHJpdmF0ZVxuICovXG5BY2Nlc3NpYmlsaXR5TWFuYWdlci5wcm90b3R5cGUuYWN0aXZhdGUgPSBmdW5jdGlvbigpXG57XG5cdGlmKHRoaXMuaXNBY3RpdmUpXG5cdHtcblx0XHRyZXR1cm47XG5cdH1cblxuXHR0aGlzLmlzQWN0aXZlID0gdHJ1ZTtcblxuXHR3aW5kb3cuZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignbW91c2Vtb3ZlJywgdGhpcy5fb25Nb3VzZU1vdmUsIHRydWUpO1xuXHR3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsIHRoaXMuX29uS2V5RG93biwgZmFsc2UpO1xuXG5cdHRoaXMucmVuZGVyZXIub24oJ3Bvc3RyZW5kZXInLCB0aGlzLnVwZGF0ZSwgdGhpcyk7XG5cblx0dGhpcy5yZW5kZXJlci52aWV3LnBhcmVudE5vZGUuYXBwZW5kQ2hpbGQodGhpcy5kaXYpO1x0XG59O1xuXG4vKipcbiAqIERlYWN0aXZhdGluZyB3aWxsIGNhdXNlIHRoZSBBY2Nlc3NpYmlsaXR5IGxheWVyIHRvIGJlIGhpZGRlbi4gVGhpcyBpcyBjYWxsZWQgd2hlbiBhIHVzZXIgbW92ZXMgdGhlIG1vdXNlXG4gKiBAcHJpdmF0ZVxuICovXG5BY2Nlc3NpYmlsaXR5TWFuYWdlci5wcm90b3R5cGUuZGVhY3RpdmF0ZSA9IGZ1bmN0aW9uKClcbntcblx0aWYoIXRoaXMuaXNBY3RpdmUpXG5cdHtcblx0XHRyZXR1cm47XG5cdH1cblxuXHR0aGlzLmlzQWN0aXZlID0gZmFsc2U7XG5cblx0d2luZG93LmRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21vdXNlbW92ZScsIHRoaXMuX29uTW91c2VNb3ZlKTtcblx0d2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLCB0aGlzLl9vbktleURvd24sIGZhbHNlKTtcblxuXHR0aGlzLnJlbmRlcmVyLm9mZigncG9zdHJlbmRlcicsIHRoaXMudXBkYXRlKTtcblxuXHR0aGlzLmRpdi5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHRoaXMuZGl2KTtcblxufTtcblxuLyoqXG4gKiBUaGlzIHJlY3Vyc2l2ZSBmdW5jdGlvbiB3aWxsIHJ1biB0aHJvdWdodCBoZSBzY2VuZSBncmFwaCBhbmQgYWRkIGFueSBuZXcgYWNjZXNzaWJsZSBvYmplY3RzIHRvIHRoZSBET00gbGF5ZXIuXG4gKiBAcGFyYW0gZWxlbWVudCB7UElYSS5Db250YWluZXJ8UElYSS5TcHJpdGV8UElYSS5leHRyYXMuVGlsaW5nU3ByaXRlfSB0aGUgRGlzcGxheU9iamVjdCB0byBjaGVjay5cbiAqIEBwcml2YXRlXG4gKi9cbkFjY2Vzc2liaWxpdHlNYW5hZ2VyLnByb3RvdHlwZS51cGRhdGVBY2Nlc3NpYmxlT2JqZWN0cyA9IGZ1bmN0aW9uKGRpc3BsYXlPYmplY3QpXG57XG5cdGlmKCFkaXNwbGF5T2JqZWN0LnZpc2libGUpXG5cdHtcblx0XHRyZXR1cm47XG5cdH1cblxuXHRpZihkaXNwbGF5T2JqZWN0LmFjY2Vzc2libGUgJiYgZGlzcGxheU9iamVjdC5pbnRlcmFjdGl2ZSlcblx0e1xuXHRcdGlmKCFkaXNwbGF5T2JqZWN0Ll9hY2Nlc3NpYmxlQWN0aXZlKVxuXHRcdHtcblx0XHRcdHRoaXMuYWRkQ2hpbGQoZGlzcGxheU9iamVjdCk7XG5cdFx0fVxuXHQgICBcdFxuXHQgICBcdGRpc3BsYXlPYmplY3QucmVuZGVySWQgPSB0aGlzLnJlbmRlcklkO1xuXHR9XG5cblx0dmFyIGNoaWxkcmVuID0gZGlzcGxheU9iamVjdC5jaGlsZHJlbjtcblxuXHRmb3IgKHZhciBpID0gY2hpbGRyZW4ubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcblx0XHRcblx0XHR0aGlzLnVwZGF0ZUFjY2Vzc2libGVPYmplY3RzKGNoaWxkcmVuW2ldKTtcblx0fVxufTtcblxuXG4vKipcbiAqIEJlZm9yZSBlYWNoIHJlbmRlciB0aGlzIGZ1bmN0aW9uIHdpbGwgZW5zdXJlIHRoYXQgYWxsIGRpdnMgYXJlIG1hcHBlZCBjb3JyZWN0bHkgdG8gdGhlaXIgRGlzcGxheU9iamVjdHNcbiAqIEBwcml2YXRlXG4gKi9cbkFjY2Vzc2liaWxpdHlNYW5hZ2VyLnByb3RvdHlwZS51cGRhdGUgPSBmdW5jdGlvbigpXG57XG5cblx0Ly8gdXBkYXRlIGNoaWxkcmVuLi4uXG5cdHRoaXMudXBkYXRlQWNjZXNzaWJsZU9iamVjdHModGhpcy5yZW5kZXJlci5fbGFzdE9iamVjdFJlbmRlcmVkKTtcblxuXHR2YXIgcmVjdCA9IHRoaXMucmVuZGVyZXIudmlldy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcblx0dmFyIHN4ID0gcmVjdC53aWR0aCAgLyB0aGlzLnJlbmRlcmVyLndpZHRoO1xuXHR2YXIgc3kgPSByZWN0LmhlaWdodCAvIHRoaXMucmVuZGVyZXIuaGVpZ2h0O1xuXG5cdHZhciBkaXYgPSB0aGlzLmRpdjtcblxuXHRkaXYuc3R5bGUubGVmdCA9IHJlY3QubGVmdCArICdweCc7XG5cdGRpdi5zdHlsZS50b3AgPSByZWN0LnRvcCArICdweCc7XG5cdGRpdi5zdHlsZS53aWR0aCA9IHRoaXMucmVuZGVyZXIud2lkdGggKyAncHgnO1xuXHRkaXYuc3R5bGUuaGVpZ2h0ID0gdGhpcy5yZW5kZXJlci5oZWlnaHQgKyAncHgnO1xuXG5cdGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5jaGlsZHJlbi5sZW5ndGg7IGkrKylcblx0e1xuXG5cdFx0dmFyIGNoaWxkID0gdGhpcy5jaGlsZHJlbltpXTtcblxuXHRcdGlmKGNoaWxkLnJlbmRlcklkICE9PSB0aGlzLnJlbmRlcklkKVxuXHRcdHtcblx0XHRcdGNoaWxkLl9hY2Nlc3NpYmxlQWN0aXZlID0gZmFsc2U7XG5cbiAgICAgICAgICAgIGNvcmUudXRpbHMucmVtb3ZlSXRlbXModGhpcy5jaGlsZHJlbiwgaSwgMSk7XG5cdFx0XHR0aGlzLmRpdi5yZW1vdmVDaGlsZCggY2hpbGQuX2FjY2Vzc2libGVEaXYgKTtcblx0XHRcdHRoaXMucG9vbC5wdXNoKGNoaWxkLl9hY2Nlc3NpYmxlRGl2KTtcblx0XHRcdGNoaWxkLl9hY2Nlc3NpYmxlRGl2ID0gbnVsbDtcblxuXHRcdFx0aS0tO1xuXG5cdFx0XHRpZih0aGlzLmNoaWxkcmVuLmxlbmd0aCA9PT0gMClcblx0XHRcdHtcblx0XHRcdFx0dGhpcy5kZWFjdGl2YXRlKCk7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdGVsc2Vcblx0XHR7XG5cdFx0XHQvLyBtYXAgZGl2IHRvIGRpc3BsYXkuLlxuXHRcdFx0ZGl2ID0gY2hpbGQuX2FjY2Vzc2libGVEaXY7XG5cdFx0XHR2YXIgaGl0QXJlYSA9IGNoaWxkLmhpdEFyZWE7XG5cdFx0XHR2YXIgd3QgPSBjaGlsZC53b3JsZFRyYW5zZm9ybTtcblxuXHRcdFx0aWYoY2hpbGQuaGl0QXJlYSlcblx0XHRcdHtcblx0XHRcdFx0ZGl2LnN0eWxlLmxlZnQgPSAoKHd0LnR4ICsgKGhpdEFyZWEueCAqIHd0LmEpKSAqIHN4KSArICdweCc7XG5cdFx0XHRcdGRpdi5zdHlsZS50b3AgPSAgKCh3dC50eSArIChoaXRBcmVhLnkgKiB3dC5kKSkgKiBzeSkgKyAgJ3B4JztcblxuXHRcdFx0XHRkaXYuc3R5bGUud2lkdGggPSAoaGl0QXJlYS53aWR0aCAqIHd0LmEgKiBzeCkgKyAncHgnO1xuXHRcdFx0XHRkaXYuc3R5bGUuaGVpZ2h0ID0gKGhpdEFyZWEuaGVpZ2h0ICogd3QuZCAqIHN5KSArICdweCc7XG5cdFx0XHRcblx0XHRcdH1cblx0XHRcdGVsc2Vcblx0XHRcdHtcblx0XHRcdFx0aGl0QXJlYSA9IGNoaWxkLmdldEJvdW5kcygpO1xuXG5cdFx0XHRcdHRoaXMuY2FwSGl0QXJlYShoaXRBcmVhKTtcblxuXHRcdFx0XHRkaXYuc3R5bGUubGVmdCA9IChoaXRBcmVhLnggKiBzeCkgKyAncHgnO1xuXHRcdFx0XHRkaXYuc3R5bGUudG9wID0gIChoaXRBcmVhLnkgKiBzeSkgKyAgJ3B4JztcblxuXHRcdFx0XHRkaXYuc3R5bGUud2lkdGggPSAoaGl0QXJlYS53aWR0aCAqIHN4KSArICdweCc7XG5cdFx0XHRcdGRpdi5zdHlsZS5oZWlnaHQgPSAoaGl0QXJlYS5oZWlnaHQgKiBzeSkgKyAncHgnO1xuXHRcdFx0fVx0XHRcblx0XHR9XG5cdH1cblxuXHQvLyBpbmNyZW1lbnQgdGhlIHJlbmRlciBpZC4uXG5cdHRoaXMucmVuZGVySWQrKztcbn07XG5cbkFjY2Vzc2liaWxpdHlNYW5hZ2VyLnByb3RvdHlwZS5jYXBIaXRBcmVhID0gZnVuY3Rpb24gKGhpdEFyZWEpXG57XG4gICAgaWYgKGhpdEFyZWEueCA8IDApXG4gICAge1xuICAgICAgICBoaXRBcmVhLndpZHRoICs9IGhpdEFyZWEueDtcbiAgICAgICAgaGl0QXJlYS54ID0gMDtcbiAgICB9XG5cbiAgICBpZiAoaGl0QXJlYS55IDwgMClcbiAgICB7XG4gICAgICAgIGhpdEFyZWEuaGVpZ2h0ICs9IGhpdEFyZWEueTtcbiAgICAgICAgaGl0QXJlYS55ID0gMDtcbiAgICB9XG5cbiAgICBpZiAoIGhpdEFyZWEueCArIGhpdEFyZWEud2lkdGggPiB0aGlzLnJlbmRlcmVyLndpZHRoIClcbiAgICB7XG4gICAgICAgIGhpdEFyZWEud2lkdGggPSB0aGlzLnJlbmRlcmVyLndpZHRoIC0gaGl0QXJlYS54O1xuICAgIH1cblxuICAgIGlmICggaGl0QXJlYS55ICsgaGl0QXJlYS5oZWlnaHQgPiB0aGlzLnJlbmRlcmVyLmhlaWdodCApXG4gICAge1xuICAgICAgICBoaXRBcmVhLmhlaWdodCA9IHRoaXMucmVuZGVyZXIuaGVpZ2h0IC0gaGl0QXJlYS55O1xuICAgIH1cbn07XG5cblxuLyoqXG4gKiBBZGRzIGEgRGlzcGxheU9iamVjdCB0byB0aGUgYWNjZXNzaWJpbGl0eSBtYW5hZ2VyXG4gKiBAcHJpdmF0ZVxuICovXG5BY2Nlc3NpYmlsaXR5TWFuYWdlci5wcm90b3R5cGUuYWRkQ2hpbGQgPSBmdW5jdGlvbihkaXNwbGF5T2JqZWN0KVxue1xuLy9cdHRoaXMuYWN0aXZhdGUoKTtcblx0XG5cdHZhciBkaXYgPSB0aGlzLnBvb2wucG9wKCk7XG5cblx0aWYoIWRpdilcblx0e1xuXHRcdGRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2J1dHRvbicpOyBcblxuXHQgICAgZGl2LnN0eWxlLndpZHRoID0gMTAwICsgJ3B4Jztcblx0ICAgIGRpdi5zdHlsZS5oZWlnaHQgPSAxMDAgKyAncHgnO1xuXHQgICAgZGl2LnN0eWxlLmJhY2tncm91bmRDb2xvciA9IHRoaXMuZGVidWcgPyAncmdiYSgyNTUsMCwwLDAuNSknIDogJ3RyYW5zcGFyZW50Jztcblx0ICAgIGRpdi5zdHlsZS5wb3NpdGlvbiA9ICdhYnNvbHV0ZSc7XG5cdCAgICBkaXYuc3R5bGUuekluZGV4ID0gMjtcblx0ICAgIGRpdi5zdHlsZS5ib3JkZXJTdHlsZSA9ICdub25lJztcblxuXHQgICAgXG5cdCAgICBkaXYuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCB0aGlzLl9vbkNsaWNrLmJpbmQodGhpcykpO1xuXHQgICAgZGl2LmFkZEV2ZW50TGlzdGVuZXIoJ2ZvY3VzJywgdGhpcy5fb25Gb2N1cy5iaW5kKHRoaXMpKTtcblx0ICAgIGRpdi5hZGRFdmVudExpc3RlbmVyKCdmb2N1c291dCcsIHRoaXMuX29uRm9jdXNPdXQuYmluZCh0aGlzKSk7XG5cdH1cblx0ICAgXHRcblxuXG5cblx0ZGl2LnRpdGxlID0gZGlzcGxheU9iamVjdC5hY2Nlc3NpYmxlVGl0bGUgfHwgJ2Rpc3BsYXlPYmplY3QgJyArIHRoaXMudGFiSW5kZXg7XG5cblx0Ly9cblx0XG5cdGRpc3BsYXlPYmplY3QuX2FjY2Vzc2libGVBY3RpdmUgPSB0cnVlO1xuXHRkaXNwbGF5T2JqZWN0Ll9hY2Nlc3NpYmxlRGl2ID0gZGl2O1xuXHRkaXYuZGlzcGxheU9iamVjdCA9IGRpc3BsYXlPYmplY3Q7XG5cblxuXHR0aGlzLmNoaWxkcmVuLnB1c2goZGlzcGxheU9iamVjdCk7XG5cdHRoaXMuZGl2LmFwcGVuZENoaWxkKCBkaXNwbGF5T2JqZWN0Ll9hY2Nlc3NpYmxlRGl2ICk7XG5cdGRpc3BsYXlPYmplY3QuX2FjY2Vzc2libGVEaXYudGFiSW5kZXggPSBkaXNwbGF5T2JqZWN0LnRhYkluZGV4O1xufTtcblxuXG4vKipcbiAqIE1hcHMgdGhlIGRpdiBidXR0b24gcHJlc3MgdG8gcGl4aSdzIEludGVyYWN0aW9uTWFuYWdlciAoY2xpY2spXG4gKiBAcHJpdmF0ZVxuICovXG5BY2Nlc3NpYmlsaXR5TWFuYWdlci5wcm90b3R5cGUuX29uQ2xpY2sgPSBmdW5jdGlvbihlKVxue1xuXHR2YXIgaW50ZXJhY3Rpb25NYW5hZ2VyID0gdGhpcy5yZW5kZXJlci5wbHVnaW5zLmludGVyYWN0aW9uO1xuXHRpbnRlcmFjdGlvbk1hbmFnZXIuZGlzcGF0Y2hFdmVudChlLnRhcmdldC5kaXNwbGF5T2JqZWN0LCAnY2xpY2snLCBpbnRlcmFjdGlvbk1hbmFnZXIuZXZlbnREYXRhKTtcbn07XG5cbi8qKlxuICogTWFwcyB0aGUgZGl2IGZvY3VzIGV2ZW50cyB0byBwaXhpcyBJbnRlcmFjdGlvbk1hbmFnZXIgKG1vdXNlb3ZlcilcbiAqIEBwcml2YXRlXG4gKi9cbkFjY2Vzc2liaWxpdHlNYW5hZ2VyLnByb3RvdHlwZS5fb25Gb2N1cyA9IGZ1bmN0aW9uKGUpXG57XG5cdHZhciBpbnRlcmFjdGlvbk1hbmFnZXIgPSB0aGlzLnJlbmRlcmVyLnBsdWdpbnMuaW50ZXJhY3Rpb247XG5cdGludGVyYWN0aW9uTWFuYWdlci5kaXNwYXRjaEV2ZW50KGUudGFyZ2V0LmRpc3BsYXlPYmplY3QsICdtb3VzZW92ZXInLCBpbnRlcmFjdGlvbk1hbmFnZXIuZXZlbnREYXRhKTtcbn07XG5cbi8qKlxuICogTWFwcyB0aGUgZGl2IGZvY3VzIGV2ZW50cyB0byBwaXhpcyBJbnRlcmFjdGlvbk1hbmFnZXIgKG1vdXNlb3V0KVxuICogQHByaXZhdGVcbiAqL1xuQWNjZXNzaWJpbGl0eU1hbmFnZXIucHJvdG90eXBlLl9vbkZvY3VzT3V0ID0gZnVuY3Rpb24oZSlcbntcblx0dmFyIGludGVyYWN0aW9uTWFuYWdlciA9IHRoaXMucmVuZGVyZXIucGx1Z2lucy5pbnRlcmFjdGlvbjtcblx0aW50ZXJhY3Rpb25NYW5hZ2VyLmRpc3BhdGNoRXZlbnQoZS50YXJnZXQuZGlzcGxheU9iamVjdCwgJ21vdXNlb3V0JywgaW50ZXJhY3Rpb25NYW5hZ2VyLmV2ZW50RGF0YSk7XG59O1xuXG4vKipcbiAqIElzIGNhbGxlZCB3aGVuIGEga2V5IGlzIHByZXNzZWRcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5BY2Nlc3NpYmlsaXR5TWFuYWdlci5wcm90b3R5cGUuX29uS2V5RG93biA9IGZ1bmN0aW9uKGUpXG57XG5cdGlmKGUua2V5Q29kZSAhPT0gOSlcblx0e1xuXHRcdHJldHVybjtcblx0fVxuXG5cdHRoaXMuYWN0aXZhdGUoKTtcbn07XG5cbi8qKlxuICogSXMgY2FsbGVkIHdoZW4gdGhlIG1vdXNlIG1vdmVzIGFjcm9zcyB0aGUgcmVuZGVyZXIgZWxlbWVudFxuICpcbiAqIEBwcml2YXRlXG4gKi9cbkFjY2Vzc2liaWxpdHlNYW5hZ2VyLnByb3RvdHlwZS5fb25Nb3VzZU1vdmUgPSBmdW5jdGlvbigpXG57XG5cdHRoaXMuZGVhY3RpdmF0ZSgpO1xufTtcblxuXG4vKipcbiAqIERlc3Ryb3lzIHRoZSBhY2Nlc3NpYmlsaXR5IG1hbmFnZXJcbiAqXG4gKi9cbkFjY2Vzc2liaWxpdHlNYW5hZ2VyLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKCkgXG57XG5cdHRoaXMuZGl2ID0gbnVsbDtcblxuXHRmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuY2hpbGRyZW4ubGVuZ3RoOyBpKyspXG5cdHtcblx0XHR0aGlzLmNoaWxkcmVuW2ldLmRpdiA9IG51bGw7XG5cdH1cblxuXHRcblx0d2luZG93LmRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21vdXNlbW92ZScsIHRoaXMuX29uTW91c2VNb3ZlKTtcblx0d2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLCB0aGlzLl9vbktleURvd24pO1xuXHRcdFxuXHR0aGlzLnBvb2wgPSBudWxsO1xuXHR0aGlzLmNoaWxkcmVuID0gbnVsbDtcblx0dGhpcy5yZW5kZXJlciA9IG51bGw7XG5cbn07XG5cbmNvcmUuV2ViR0xSZW5kZXJlci5yZWdpc3RlclBsdWdpbignYWNjZXNzaWJpbGl0eScsIEFjY2Vzc2liaWxpdHlNYW5hZ2VyKTtcbmNvcmUuQ2FudmFzUmVuZGVyZXIucmVnaXN0ZXJQbHVnaW4oJ2FjY2Vzc2liaWxpdHknLCBBY2Nlc3NpYmlsaXR5TWFuYWdlcik7XG5cbiIsIi8qKlxuICogRGVmYXVsdCBwcm9wZXJ0eSB2YWx1ZXMgb2YgYWNjZXNzaWJsZSBvYmplY3RzXG4gKiB1c2VkIGJ5IHtAbGluayBQSVhJLmFjY2Vzc2liaWxpdHkuQWNjZXNzaWJpbGl0eU1hbmFnZXJ9LlxuICpcbiAqIEBtaXhpblxuICogQG1lbWJlcm9mIFBJWElcbiAqIEBleGFtcGxlXG4gKiAgICAgIGZ1bmN0aW9uIE15T2JqZWN0KCkge31cbiAqXG4gKiAgICAgIE9iamVjdC5hc3NpZ24oXG4gKiAgICAgICAgICBNeU9iamVjdC5wcm90b3R5cGUsXG4gKiAgICAgICAgICBQSVhJLmFjY2Vzc2liaWxpdHkuYWNjZXNzaWJsZVRhcmdldFxuICogICAgICApO1xuICovXG52YXIgYWNjZXNzaWJsZVRhcmdldCA9IHtcbiAgICBcbiAgICAvKipcbiAgICAgKiBAdG9kbyBOZWVkcyBkb2NzLlxuICAgICAqL1xuICAgIGFjY2Vzc2libGU6ZmFsc2UsXG5cbiAgICAvKipcbiAgICAgKiBAdG9kbyBOZWVkcyBkb2NzLlxuICAgICAqL1xuICAgIGFjY2Vzc2libGVUaXRsZTpudWxsLFxuXG4gICAgLyoqXG4gICAgICogQHRvZG8gTmVlZHMgZG9jcy5cbiAgICAgKi9cbiAgICB0YWJJbmRleDowLFxuXG4gICAgLyoqXG4gICAgICogQHRvZG8gTmVlZHMgZG9jcy5cbiAgICAgKi9cbiAgICBfYWNjZXNzaWJsZUFjdGl2ZTpmYWxzZSxcblxuICAgIC8qKlxuICAgICAqIEB0b2RvIE5lZWRzIGRvY3MuXG4gICAgICovXG4gICAgX2FjY2Vzc2libGVEaXY6ZmFsc2VcblxufTtcblxubW9kdWxlLmV4cG9ydHMgPSBhY2Nlc3NpYmxlVGFyZ2V0O1xuIiwiLyoqXG4gKiBAZmlsZSAgICAgICAgTWFpbiBleHBvcnQgb2YgdGhlIFBJWEkgYWNjZXNzaWJpbGl0eSBsaWJyYXJ5XG4gKiBAYXV0aG9yICAgICAgTWF0IEdyb3ZlcyA8bWF0QGdvb2Rib3lkaWdpdGFsLmNvbT5cbiAqIEBjb3B5cmlnaHQgICAyMDEzLTIwMTUgR29vZEJveURpZ2l0YWxcbiAqIEBsaWNlbnNlICAgICB7QGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL3BpeGlqcy9waXhpLmpzL2Jsb2IvbWFzdGVyL0xJQ0VOU0V8TUlUIExpY2Vuc2V9XG4gKi9cblxuLyoqXG4gKiBAbmFtZXNwYWNlIFBJWEkuaW50ZXJhY3Rpb25cbiAqL1xubW9kdWxlLmV4cG9ydHMgPSB7XG4gICAgYWNjZXNzaWJsZVRhcmdldDogICAgIHJlcXVpcmUoJy4vYWNjZXNzaWJsZVRhcmdldCcpLFxuICAgIEFjY2Vzc2liaWxpdHlNYW5hZ2VyOiByZXF1aXJlKCcuL0FjY2Vzc2liaWxpdHlNYW5hZ2VyJylcbn07XG4iLCIvKipcbiAqIENvbnN0YW50IHZhbHVlcyB1c2VkIGluIHBpeGlcbiAqXG4gKiBAbGVuZHMgUElYSVxuICovXG52YXIgQ09OU1QgPSB7XG4gICAgLyoqXG4gICAgICogU3RyaW5nIG9mIHRoZSBjdXJyZW50IFBJWEkgdmVyc2lvblxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBjb25zdGFudFxuICAgICAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBWRVJTSU9OXG4gICAgICovXG4gICAgVkVSU0lPTjogcmVxdWlyZSgnLi4vLi4vcGFja2FnZS5qc29uJykudmVyc2lvbixcblxuICAgIC8qKlxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBQSV8yIC0gVHdvIFBpXG4gICAgICogQGNvbnN0YW50XG4gICAgICogQHN0YXRpY1xuICAgICAqL1xuICAgIFBJXzI6IE1hdGguUEkgKiAyLFxuXG4gICAgLyoqXG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IFJBRF9UT19ERUcgLSBDb25zdGFudCBjb252ZXJzaW9uIGZhY3RvciBmb3IgY29udmVydGluZyByYWRpYW5zIHRvIGRlZ3JlZXNcbiAgICAgKiBAY29uc3RhbnRcbiAgICAgKiBAc3RhdGljXG4gICAgICovXG4gICAgUkFEX1RPX0RFRzogMTgwIC8gTWF0aC5QSSxcblxuICAgIC8qKlxuICAgICAqIEBwcm9wZXJ0eSB7TnVtYmVyfSBERUdfVE9fUkFEIC0gQ29uc3RhbnQgY29udmVyc2lvbiBmYWN0b3IgZm9yIGNvbnZlcnRpbmcgZGVncmVlcyB0byByYWRpYW5zXG4gICAgICogQGNvbnN0YW50XG4gICAgICogQHN0YXRpY1xuICAgICAqL1xuICAgIERFR19UT19SQUQ6IE1hdGguUEkgLyAxODAsXG5cbiAgICAvKipcbiAgICAgKiBUYXJnZXQgZnJhbWVzIHBlciBtaWxsaXNlY29uZC5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAY29uc3RhbnRcbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gVEFSR0VUX0ZQTVM9MC4wNlxuICAgICAqL1xuICAgIFRBUkdFVF9GUE1TOiAwLjA2LFxuXG4gICAgLyoqXG4gICAgICogQ29uc3RhbnQgdG8gaWRlbnRpZnkgdGhlIFJlbmRlcmVyIFR5cGUuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQGNvbnN0YW50XG4gICAgICogQHByb3BlcnR5IHtvYmplY3R9IFJFTkRFUkVSX1RZUEVcbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gUkVOREVSRVJfVFlQRS5VTktOT1dOXG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IFJFTkRFUkVSX1RZUEUuV0VCR0xcbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gUkVOREVSRVJfVFlQRS5DQU5WQVNcbiAgICAgKi9cbiAgICBSRU5ERVJFUl9UWVBFOiB7XG4gICAgICAgIFVOS05PV046ICAgIDAsXG4gICAgICAgIFdFQkdMOiAgICAgIDEsXG4gICAgICAgIENBTlZBUzogICAgIDJcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVmFyaW91cyBibGVuZCBtb2RlcyBzdXBwb3J0ZWQgYnkgUElYSS4gSU1QT1JUQU5UIC0gVGhlIFdlYkdMIHJlbmRlcmVyIG9ubHkgc3VwcG9ydHNcbiAgICAgKiB0aGUgTk9STUFMLCBBREQsIE1VTFRJUExZIGFuZCBTQ1JFRU4gYmxlbmQgbW9kZXMuIEFueXRoaW5nIGVsc2Ugd2lsbCBzaWxlbnRseSBhY3QgbGlrZVxuICAgICAqIE5PUk1BTC5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAY29uc3RhbnRcbiAgICAgKiBAcHJvcGVydHkge29iamVjdH0gQkxFTkRfTU9ERVNcbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gQkxFTkRfTU9ERVMuTk9STUFMXG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IEJMRU5EX01PREVTLkFERFxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBCTEVORF9NT0RFUy5NVUxUSVBMWVxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBCTEVORF9NT0RFUy5TQ1JFRU5cbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gQkxFTkRfTU9ERVMuT1ZFUkxBWVxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBCTEVORF9NT0RFUy5EQVJLRU5cbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gQkxFTkRfTU9ERVMuTElHSFRFTlxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBCTEVORF9NT0RFUy5DT0xPUl9ET0RHRVxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBCTEVORF9NT0RFUy5DT0xPUl9CVVJOXG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IEJMRU5EX01PREVTLkhBUkRfTElHSFRcbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gQkxFTkRfTU9ERVMuU09GVF9MSUdIVFxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBCTEVORF9NT0RFUy5ESUZGRVJFTkNFXG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IEJMRU5EX01PREVTLkVYQ0xVU0lPTlxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBCTEVORF9NT0RFUy5IVUVcbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gQkxFTkRfTU9ERVMuU0FUVVJBVElPTlxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBCTEVORF9NT0RFUy5DT0xPUlxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBCTEVORF9NT0RFUy5MVU1JTk9TSVRZXG4gICAgICovXG4gICAgQkxFTkRfTU9ERVM6IHtcbiAgICAgICAgTk9STUFMOiAgICAgICAgIDAsXG4gICAgICAgIEFERDogICAgICAgICAgICAxLFxuICAgICAgICBNVUxUSVBMWTogICAgICAgMixcbiAgICAgICAgU0NSRUVOOiAgICAgICAgIDMsXG4gICAgICAgIE9WRVJMQVk6ICAgICAgICA0LFxuICAgICAgICBEQVJLRU46ICAgICAgICAgNSxcbiAgICAgICAgTElHSFRFTjogICAgICAgIDYsXG4gICAgICAgIENPTE9SX0RPREdFOiAgICA3LFxuICAgICAgICBDT0xPUl9CVVJOOiAgICAgOCxcbiAgICAgICAgSEFSRF9MSUdIVDogICAgIDksXG4gICAgICAgIFNPRlRfTElHSFQ6ICAgICAxMCxcbiAgICAgICAgRElGRkVSRU5DRTogICAgIDExLFxuICAgICAgICBFWENMVVNJT046ICAgICAgMTIsXG4gICAgICAgIEhVRTogICAgICAgICAgICAxMyxcbiAgICAgICAgU0FUVVJBVElPTjogICAgIDE0LFxuICAgICAgICBDT0xPUjogICAgICAgICAgMTUsXG4gICAgICAgIExVTUlOT1NJVFk6ICAgICAxNlxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBWYXJpb3VzIHdlYmdsIGRyYXcgbW9kZXMuIFRoZXNlIGNhbiBiZSB1c2VkIHRvIHNwZWNpZnkgd2hpY2ggR0wgZHJhd01vZGUgdG8gdXNlXG4gICAgICogdW5kZXIgY2VydGFpbiBzaXR1YXRpb25zIGFuZCByZW5kZXJlcnMuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQGNvbnN0YW50XG4gICAgICogQHByb3BlcnR5IHtvYmplY3R9IERSQVdfTU9ERVNcbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gRFJBV19NT0RFUy5QT0lOVFNcbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gRFJBV19NT0RFUy5MSU5FU1xuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBEUkFXX01PREVTLkxJTkVfTE9PUFxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBEUkFXX01PREVTLkxJTkVfU1RSSVBcbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gRFJBV19NT0RFUy5UUklBTkdMRVNcbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gRFJBV19NT0RFUy5UUklBTkdMRV9TVFJJUFxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBEUkFXX01PREVTLlRSSUFOR0xFX0ZBTlxuICAgICAqL1xuICAgIERSQVdfTU9ERVM6IHtcbiAgICAgICAgUE9JTlRTOiAgICAgICAgIDAsXG4gICAgICAgIExJTkVTOiAgICAgICAgICAxLFxuICAgICAgICBMSU5FX0xPT1A6ICAgICAgMixcbiAgICAgICAgTElORV9TVFJJUDogICAgIDMsXG4gICAgICAgIFRSSUFOR0xFUzogICAgICA0LFxuICAgICAgICBUUklBTkdMRV9TVFJJUDogNSxcbiAgICAgICAgVFJJQU5HTEVfRkFOOiAgIDZcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVGhlIHNjYWxlIG1vZGVzIHRoYXQgYXJlIHN1cHBvcnRlZCBieSBwaXhpLlxuICAgICAqXG4gICAgICogVGhlIERFRkFVTFQgc2NhbGUgbW9kZSBhZmZlY3RzIHRoZSBkZWZhdWx0IHNjYWxpbmcgbW9kZSBvZiBmdXR1cmUgb3BlcmF0aW9ucy5cbiAgICAgKiBJdCBjYW4gYmUgcmUtYXNzaWduZWQgdG8gZWl0aGVyIExJTkVBUiBvciBORUFSRVNULCBkZXBlbmRpbmcgdXBvbiBzdWl0YWJpbGl0eS5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAY29uc3RhbnRcbiAgICAgKiBAcHJvcGVydHkge29iamVjdH0gU0NBTEVfTU9ERVNcbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gU0NBTEVfTU9ERVMuREVGQVVMVD1MSU5FQVJcbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gU0NBTEVfTU9ERVMuTElORUFSIFNtb290aCBzY2FsaW5nXG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IFNDQUxFX01PREVTLk5FQVJFU1QgUGl4ZWxhdGluZyBzY2FsaW5nXG4gICAgICovXG4gICAgU0NBTEVfTU9ERVM6IHtcbiAgICAgICAgREVGQVVMVDogICAgMCxcbiAgICAgICAgTElORUFSOiAgICAgMCxcbiAgICAgICAgTkVBUkVTVDogICAgMVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBUaGUgcHJlZml4IHRoYXQgZGVub3RlcyBhIFVSTCBpcyBmb3IgYSByZXRpbmEgYXNzZXRcbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAY29uc3RhbnRcbiAgICAgKiBAcHJvcGVydHkge3N0cmluZ30gUkVUSU5BX1BSRUZJWFxuICAgICAqL1xuICAgIC8vZXhhbXBsZTogJ0AyeCcsXG4gICAgUkVUSU5BX1BSRUZJWDogL0AoLispeC8sXG5cbiAgICBSRVNPTFVUSU9OOjEsXG5cbiAgICBGSUxURVJfUkVTT0xVVElPTjoxLFxuXG4gICAgLyoqXG4gICAgICogVGhlIGRlZmF1bHQgcmVuZGVyIG9wdGlvbnMgaWYgbm9uZSBhcmUgc3VwcGxpZWQgdG8ge0BsaW5rIFBJWEkuV2ViR0xSZW5kZXJlcn1cbiAgICAgKiBvciB7QGxpbmsgUElYSS5DYW52YXNSZW5kZXJlcn0uXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQGNvbnN0YW50XG4gICAgICogQHByb3BlcnR5IHtvYmplY3R9IERFRkFVTFRfUkVOREVSX09QVElPTlNcbiAgICAgKiBAcHJvcGVydHkge0hUTUxDYW52YXNFbGVtZW50fSBERUZBVUxUX1JFTkRFUl9PUFRJT05TLnZpZXc9bnVsbFxuICAgICAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gREVGQVVMVF9SRU5ERVJfT1BUSU9OUy50cmFuc3BhcmVudD1mYWxzZVxuICAgICAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gREVGQVVMVF9SRU5ERVJfT1BUSU9OUy5hbnRpYWxpYXM9ZmFsc2VcbiAgICAgKiBAcHJvcGVydHkge2Jvb2xlYW59IERFRkFVTFRfUkVOREVSX09QVElPTlMuZm9yY2VGWEFBPWZhbHNlXG4gICAgICogQHByb3BlcnR5IHtib29sZWFufSBERUZBVUxUX1JFTkRFUl9PUFRJT05TLnByZXNlcnZlRHJhd2luZ0J1ZmZlcj1mYWxzZVxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBERUZBVUxUX1JFTkRFUl9PUFRJT05TLnJlc29sdXRpb249MVxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBERUZBVUxUX1JFTkRFUl9PUFRJT05TLmJhY2tncm91bmRDb2xvcj0weDAwMDAwMFxuICAgICAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gREVGQVVMVF9SRU5ERVJfT1BUSU9OUy5jbGVhckJlZm9yZVJlbmRlcj10cnVlXG4gICAgICogQHByb3BlcnR5IHtib29sZWFufSBERUZBVUxUX1JFTkRFUl9PUFRJT05TLmF1dG9SZXNpemU9ZmFsc2VcbiAgICAgKi9cbiAgICBERUZBVUxUX1JFTkRFUl9PUFRJT05TOiB7XG4gICAgICAgIHZpZXc6IG51bGwsXG4gICAgICAgIHJlc29sdXRpb246IDEsXG4gICAgICAgIGFudGlhbGlhczogZmFsc2UsXG4gICAgICAgIGZvcmNlRlhBQTogZmFsc2UsXG4gICAgICAgIGF1dG9SZXNpemU6IGZhbHNlLFxuICAgICAgICB0cmFuc3BhcmVudDogZmFsc2UsXG4gICAgICAgIGJhY2tncm91bmRDb2xvcjogMHgwMDAwMDAsXG4gICAgICAgIGNsZWFyQmVmb3JlUmVuZGVyOiB0cnVlLFxuICAgICAgICBwcmVzZXJ2ZURyYXdpbmdCdWZmZXI6IGZhbHNlLFxuICAgICAgICByb3VuZFBpeGVsczogZmFsc2VcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQ29uc3RhbnRzIHRoYXQgaWRlbnRpZnkgc2hhcGVzLCBtYWlubHkgdG8gcHJldmVudCBgaW5zdGFuY2VvZmAgY2FsbHMuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQGNvbnN0YW50XG4gICAgICogQHByb3BlcnR5IHtvYmplY3R9IFNIQVBFU1xuICAgICAqIEBwcm9wZXJ0eSB7b2JqZWN0fSBTSEFQRVMuUE9MWT0wXG4gICAgICogQHByb3BlcnR5IHtvYmplY3R9IFNIQVBFUy5SRUNUPTFcbiAgICAgKiBAcHJvcGVydHkge29iamVjdH0gU0hBUEVTLkNJUkM9MlxuICAgICAqIEBwcm9wZXJ0eSB7b2JqZWN0fSBTSEFQRVMuRUxJUD0zXG4gICAgICogQHByb3BlcnR5IHtvYmplY3R9IFNIQVBFUy5SUkVDPTRcbiAgICAgKi9cbiAgICBTSEFQRVM6IHtcbiAgICAgICAgUE9MWTogMCxcbiAgICAgICAgUkVDVDogMSxcbiAgICAgICAgQ0lSQzogMixcbiAgICAgICAgRUxJUDogMyxcbiAgICAgICAgUlJFQzogNFxuICAgIH0sXG5cbiAgICAvLyBUT0RPOiBtYXliZSBjaGFuZ2UgdG8gU1BSSVRFLkJBVENIX1NJWkU6IDIwMDBcbiAgICAvLyBUT0RPOiBtYXliZSBhZGQgUEFSVElDTEUuQkFUQ0hfU0laRTogMTUwMDBcbiAgICBTUFJJVEVfQkFUQ0hfU0laRTogMjAwMCAvL25pY2UgYmFsYW5jZSBiZXR3ZWVuIG1vYmlsZSBhbmQgZGVza3RvcCBtYWNoaW5lc1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBDT05TVDtcbiIsInZhciBtYXRoID0gcmVxdWlyZSgnLi4vbWF0aCcpLFxuICAgIHV0aWxzID0gcmVxdWlyZSgnLi4vdXRpbHMnKSxcbiAgICBEaXNwbGF5T2JqZWN0ID0gcmVxdWlyZSgnLi9EaXNwbGF5T2JqZWN0JyksXG4gICAgUmVuZGVyVGV4dHVyZSA9IHJlcXVpcmUoJy4uL3RleHR1cmVzL1JlbmRlclRleHR1cmUnKSxcbiAgICBfdGVtcE1hdHJpeCA9IG5ldyBtYXRoLk1hdHJpeCgpO1xuXG4vKipcbiAqIEEgQ29udGFpbmVyIHJlcHJlc2VudHMgYSBjb2xsZWN0aW9uIG9mIGRpc3BsYXkgb2JqZWN0cy5cbiAqIEl0IGlzIHRoZSBiYXNlIGNsYXNzIG9mIGFsbCBkaXNwbGF5IG9iamVjdHMgdGhhdCBhY3QgYXMgYSBjb250YWluZXIgZm9yIG90aGVyIG9iamVjdHMuXG4gKlxuICpgYGBqc1xuICogdmFyIGNvbnRhaW5lciA9IG5ldyBQSVhJLkNvbnRhaW5lcigpO1xuICogY29udGFpbmVyLmFkZENoaWxkKHNwcml0ZSk7XG4gKiBgYGBcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5EaXNwbGF5T2JqZWN0XG4gKiBAbWVtYmVyb2YgUElYSVxuICovXG5mdW5jdGlvbiBDb250YWluZXIoKVxue1xuICAgIERpc3BsYXlPYmplY3QuY2FsbCh0aGlzKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBhcnJheSBvZiBjaGlsZHJlbiBvZiB0aGlzIGNvbnRhaW5lci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuRGlzcGxheU9iamVjdFtdfVxuICAgICAqIEByZWFkb25seVxuICAgICAqL1xuICAgIHRoaXMuY2hpbGRyZW4gPSBbXTtcbn1cblxuLy8gY29uc3RydWN0b3JcbkNvbnRhaW5lci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKERpc3BsYXlPYmplY3QucHJvdG90eXBlKTtcbkNvbnRhaW5lci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBDb250YWluZXI7XG5tb2R1bGUuZXhwb3J0cyA9IENvbnRhaW5lcjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoQ29udGFpbmVyLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFRoZSB3aWR0aCBvZiB0aGUgQ29udGFpbmVyLCBzZXR0aW5nIHRoaXMgd2lsbCBhY3R1YWxseSBtb2RpZnkgdGhlIHNjYWxlIHRvIGFjaGlldmUgdGhlIHZhbHVlIHNldFxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLkNvbnRhaW5lciNcbiAgICAgKi9cbiAgICB3aWR0aDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnNjYWxlLnggKiB0aGlzLmdldExvY2FsQm91bmRzKCkud2lkdGg7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG5cbiAgICAgICAgICAgIHZhciB3aWR0aCA9IHRoaXMuZ2V0TG9jYWxCb3VuZHMoKS53aWR0aDtcblxuICAgICAgICAgICAgaWYgKHdpZHRoICE9PSAwKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHRoaXMuc2NhbGUueCA9IHZhbHVlIC8gd2lkdGg7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdGhpcy5zY2FsZS54ID0gMTtcbiAgICAgICAgICAgIH1cblxuXG4gICAgICAgICAgICB0aGlzLl93aWR0aCA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFRoZSBoZWlnaHQgb2YgdGhlIENvbnRhaW5lciwgc2V0dGluZyB0aGlzIHdpbGwgYWN0dWFsbHkgbW9kaWZ5IHRoZSBzY2FsZSB0byBhY2hpZXZlIHRoZSB2YWx1ZSBzZXRcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5Db250YWluZXIjXG4gICAgICovXG4gICAgaGVpZ2h0OiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuICB0aGlzLnNjYWxlLnkgKiB0aGlzLmdldExvY2FsQm91bmRzKCkuaGVpZ2h0O1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuXG4gICAgICAgICAgICB2YXIgaGVpZ2h0ID0gdGhpcy5nZXRMb2NhbEJvdW5kcygpLmhlaWdodDtcblxuICAgICAgICAgICAgaWYgKGhlaWdodCAhPT0gMClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNjYWxlLnkgPSB2YWx1ZSAvIGhlaWdodCA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdGhpcy5zY2FsZS55ID0gMTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5faGVpZ2h0ID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG59KTtcblxuLyoqXG4gKiBPdmVycmlkYWJsZSBtZXRob2QgdGhhdCBjYW4gYmUgdXNlZCBieSBDb250YWluZXIgc3ViY2xhc3NlcyB3aGVuZXZlciB0aGUgY2hpbGRyZW4gYXJyYXkgaXMgbW9kaWZpZWRcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5Db250YWluZXIucHJvdG90eXBlLm9uQ2hpbGRyZW5DaGFuZ2UgPSBmdW5jdGlvbiAoKSB7fTtcblxuLyoqXG4gKiBBZGRzIGEgY2hpbGQgdG8gdGhlIGNvbnRhaW5lci5cbiAqIFxuICogWW91IGNhbiBhbHNvIGFkZCBtdWx0cGxlIGl0ZW1zIGxpa2Ugc286IG15Q29udGFpbmVyLmFkZENoaWxkKHRoaW5rT25lLCB0aGluZ1R3bywgdGhpbmdUaHJlZSlcbiAqIEBwYXJhbSBjaGlsZCB7UElYSS5EaXNwbGF5T2JqZWN0fSBUaGUgRGlzcGxheU9iamVjdCB0byBhZGQgdG8gdGhlIGNvbnRhaW5lclxuICogQHJldHVybiB7UElYSS5EaXNwbGF5T2JqZWN0fSBUaGUgY2hpbGQgdGhhdCB3YXMgYWRkZWQuXG4gKi9cbkNvbnRhaW5lci5wcm90b3R5cGUuYWRkQ2hpbGQgPSBmdW5jdGlvbiAoY2hpbGQpXG57IFxuICAgIHZhciBhcmd1bWVudHNMZW5ndGggPSBhcmd1bWVudHMubGVuZ3RoO1xuXG4gICAgLy8gaWYgdGhlcmUgaXMgb25seSBvbmUgYXJndW1lbnQgd2UgY2FuIGJ5cGFzcyBsb29waW5nIHRocm91Z2ggdGhlIHRoZW1cbiAgICBpZihhcmd1bWVudHNMZW5ndGggPiAxKVxuICAgIHtcbiAgICAgICAgLy8gbG9vcCB0aHJvdWdoIHRoZSBhcmd1bWVudHMgcHJvcGVydHkgYW5kIGFkZCBhbGwgY2hpbGRyZW5cbiAgICAgICAgLy8gdXNlIGl0IHRoZSByaWdodCB3YXkgKC5sZW5ndGggYW5kIFtpXSkgc28gdGhhdCB0aGlzIGZ1bmN0aW9uIGNhbiBzdGlsbCBiZSBvcHRpbWlzZWQgYnkgSlMgcnVudGltZXNcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcmd1bWVudHNMZW5ndGg7IGkrKylcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5hZGRDaGlsZCggYXJndW1lbnRzW2ldICk7XG4gICAgICAgIH1cbiAgICB9ICAgICBcbiAgICBlbHNlXG4gICAge1xuICAgICAgICAvLyBpZiB0aGUgY2hpbGQgaGFzIGEgcGFyZW50IHRoZW4gbGV0cyByZW1vdmUgaXQgYXMgUGl4aSBvYmplY3RzIGNhbiBvbmx5IGV4aXN0IGluIG9uZSBwbGFjZVxuICAgICAgICBpZiAoY2hpbGQucGFyZW50KVxuICAgICAgICB7XG4gICAgICAgICAgICBjaGlsZC5wYXJlbnQucmVtb3ZlQ2hpbGQoY2hpbGQpO1xuICAgICAgICB9XG5cbiAgICAgICAgY2hpbGQucGFyZW50ID0gdGhpcztcbiAgICAgICAgXG4gICAgICAgIHRoaXMuY2hpbGRyZW4ucHVzaChjaGlsZCk7XG5cbiAgICAgICAgLy8gVE9ETyAtIGxldHMgZWl0aGVyIGRvIGFsbCBjYWxsYmFja3Mgb3IgYWxsIGV2ZW50cy4uIG5vdCBib3RoIVxuICAgICAgICB0aGlzLm9uQ2hpbGRyZW5DaGFuZ2UodGhpcy5jaGlsZHJlbi5sZW5ndGgtMSk7XG4gICAgICAgIGNoaWxkLmVtaXQoJ2FkZGVkJywgdGhpcyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGNoaWxkO1xufTtcblxuLyoqXG4gKiBBZGRzIGEgY2hpbGQgdG8gdGhlIGNvbnRhaW5lciBhdCBhIHNwZWNpZmllZCBpbmRleC4gSWYgdGhlIGluZGV4IGlzIG91dCBvZiBib3VuZHMgYW4gZXJyb3Igd2lsbCBiZSB0aHJvd25cbiAqXG4gKiBAcGFyYW0gY2hpbGQge1BJWEkuRGlzcGxheU9iamVjdH0gVGhlIGNoaWxkIHRvIGFkZFxuICogQHBhcmFtIGluZGV4IHtudW1iZXJ9IFRoZSBpbmRleCB0byBwbGFjZSB0aGUgY2hpbGQgaW5cbiAqIEByZXR1cm4ge1BJWEkuRGlzcGxheU9iamVjdH0gVGhlIGNoaWxkIHRoYXQgd2FzIGFkZGVkLlxuICovXG5Db250YWluZXIucHJvdG90eXBlLmFkZENoaWxkQXQgPSBmdW5jdGlvbiAoY2hpbGQsIGluZGV4KVxue1xuICAgIGlmIChpbmRleCA+PSAwICYmIGluZGV4IDw9IHRoaXMuY2hpbGRyZW4ubGVuZ3RoKVxuICAgIHtcbiAgICAgICAgaWYgKGNoaWxkLnBhcmVudClcbiAgICAgICAge1xuICAgICAgICAgICAgY2hpbGQucGFyZW50LnJlbW92ZUNoaWxkKGNoaWxkKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNoaWxkLnBhcmVudCA9IHRoaXM7XG5cbiAgICAgICAgdGhpcy5jaGlsZHJlbi5zcGxpY2UoaW5kZXgsIDAsIGNoaWxkKTtcblxuICAgICAgICAvLyBUT0RPIC0gbGV0cyBlaXRoZXIgZG8gYWxsIGNhbGxiYWNrcyBvciBhbGwgZXZlbnRzLi4gbm90IGJvdGghXG4gICAgICAgIHRoaXMub25DaGlsZHJlbkNoYW5nZShpbmRleCk7XG4gICAgICAgIGNoaWxkLmVtaXQoJ2FkZGVkJywgdGhpcyk7XG5cbiAgICAgICAgcmV0dXJuIGNoaWxkO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoY2hpbGQgKyAnYWRkQ2hpbGRBdDogVGhlIGluZGV4ICcrIGluZGV4ICsnIHN1cHBsaWVkIGlzIG91dCBvZiBib3VuZHMgJyArIHRoaXMuY2hpbGRyZW4ubGVuZ3RoKTtcbiAgICB9XG59O1xuXG4vKipcbiAqIFN3YXBzIHRoZSBwb3NpdGlvbiBvZiAyIERpc3BsYXkgT2JqZWN0cyB3aXRoaW4gdGhpcyBjb250YWluZXIuXG4gKlxuICogQHBhcmFtIGNoaWxkIHtQSVhJLkRpc3BsYXlPYmplY3R9XG4gKiBAcGFyYW0gY2hpbGQyIHtQSVhJLkRpc3BsYXlPYmplY3R9XG4gKi9cbkNvbnRhaW5lci5wcm90b3R5cGUuc3dhcENoaWxkcmVuID0gZnVuY3Rpb24gKGNoaWxkLCBjaGlsZDIpXG57XG4gICAgaWYgKGNoaWxkID09PSBjaGlsZDIpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFyIGluZGV4MSA9IHRoaXMuZ2V0Q2hpbGRJbmRleChjaGlsZCk7XG4gICAgdmFyIGluZGV4MiA9IHRoaXMuZ2V0Q2hpbGRJbmRleChjaGlsZDIpO1xuXG4gICAgaWYgKGluZGV4MSA8IDAgfHwgaW5kZXgyIDwgMClcbiAgICB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignc3dhcENoaWxkcmVuOiBCb3RoIHRoZSBzdXBwbGllZCBEaXNwbGF5T2JqZWN0cyBtdXN0IGJlIGNoaWxkcmVuIG9mIHRoZSBjYWxsZXIuJyk7XG4gICAgfVxuXG4gICAgdGhpcy5jaGlsZHJlbltpbmRleDFdID0gY2hpbGQyO1xuICAgIHRoaXMuY2hpbGRyZW5baW5kZXgyXSA9IGNoaWxkO1xuICAgIHRoaXMub25DaGlsZHJlbkNoYW5nZShpbmRleDEgPCBpbmRleDIgPyBpbmRleDEgOiBpbmRleDIpO1xufTtcblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBpbmRleCBwb3NpdGlvbiBvZiBhIGNoaWxkIERpc3BsYXlPYmplY3QgaW5zdGFuY2VcbiAqXG4gKiBAcGFyYW0gY2hpbGQge1BJWEkuRGlzcGxheU9iamVjdH0gVGhlIERpc3BsYXlPYmplY3QgaW5zdGFuY2UgdG8gaWRlbnRpZnlcbiAqIEByZXR1cm4ge251bWJlcn0gVGhlIGluZGV4IHBvc2l0aW9uIG9mIHRoZSBjaGlsZCBkaXNwbGF5IG9iamVjdCB0byBpZGVudGlmeVxuICovXG5Db250YWluZXIucHJvdG90eXBlLmdldENoaWxkSW5kZXggPSBmdW5jdGlvbiAoY2hpbGQpXG57XG4gICAgdmFyIGluZGV4ID0gdGhpcy5jaGlsZHJlbi5pbmRleE9mKGNoaWxkKTtcblxuICAgIGlmIChpbmRleCA9PT0gLTEpXG4gICAge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RoZSBzdXBwbGllZCBEaXNwbGF5T2JqZWN0IG11c3QgYmUgYSBjaGlsZCBvZiB0aGUgY2FsbGVyJyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGluZGV4O1xufTtcblxuLyoqXG4gKiBDaGFuZ2VzIHRoZSBwb3NpdGlvbiBvZiBhbiBleGlzdGluZyBjaGlsZCBpbiB0aGUgZGlzcGxheSBvYmplY3QgY29udGFpbmVyXG4gKlxuICogQHBhcmFtIGNoaWxkIHtQSVhJLkRpc3BsYXlPYmplY3R9IFRoZSBjaGlsZCBEaXNwbGF5T2JqZWN0IGluc3RhbmNlIGZvciB3aGljaCB5b3Ugd2FudCB0byBjaGFuZ2UgdGhlIGluZGV4IG51bWJlclxuICogQHBhcmFtIGluZGV4IHtudW1iZXJ9IFRoZSByZXN1bHRpbmcgaW5kZXggbnVtYmVyIGZvciB0aGUgY2hpbGQgZGlzcGxheSBvYmplY3RcbiAqL1xuQ29udGFpbmVyLnByb3RvdHlwZS5zZXRDaGlsZEluZGV4ID0gZnVuY3Rpb24gKGNoaWxkLCBpbmRleClcbntcbiAgICBpZiAoaW5kZXggPCAwIHx8IGluZGV4ID49IHRoaXMuY2hpbGRyZW4ubGVuZ3RoKVxuICAgIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdUaGUgc3VwcGxpZWQgaW5kZXggaXMgb3V0IG9mIGJvdW5kcycpO1xuICAgIH1cblxuICAgIHZhciBjdXJyZW50SW5kZXggPSB0aGlzLmdldENoaWxkSW5kZXgoY2hpbGQpO1xuXG4gICAgdXRpbHMucmVtb3ZlSXRlbXModGhpcy5jaGlsZHJlbiwgY3VycmVudEluZGV4LCAxKTsgLy8gcmVtb3ZlIGZyb20gb2xkIHBvc2l0aW9uXG4gICAgdGhpcy5jaGlsZHJlbi5zcGxpY2UoaW5kZXgsIDAsIGNoaWxkKTsgLy9hZGQgYXQgbmV3IHBvc2l0aW9uXG4gICAgdGhpcy5vbkNoaWxkcmVuQ2hhbmdlKGluZGV4KTtcbn07XG5cbi8qKlxuICogUmV0dXJucyB0aGUgY2hpbGQgYXQgdGhlIHNwZWNpZmllZCBpbmRleFxuICpcbiAqIEBwYXJhbSBpbmRleCB7bnVtYmVyfSBUaGUgaW5kZXggdG8gZ2V0IHRoZSBjaGlsZCBhdFxuICogQHJldHVybiB7UElYSS5EaXNwbGF5T2JqZWN0fSBUaGUgY2hpbGQgYXQgdGhlIGdpdmVuIGluZGV4LCBpZiBhbnkuXG4gKi9cbkNvbnRhaW5lci5wcm90b3R5cGUuZ2V0Q2hpbGRBdCA9IGZ1bmN0aW9uIChpbmRleClcbntcbiAgICBpZiAoaW5kZXggPCAwIHx8IGluZGV4ID49IHRoaXMuY2hpbGRyZW4ubGVuZ3RoKVxuICAgIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdnZXRDaGlsZEF0OiBTdXBwbGllZCBpbmRleCAnICsgaW5kZXggKyAnIGRvZXMgbm90IGV4aXN0IGluIHRoZSBjaGlsZCBsaXN0LCBvciB0aGUgc3VwcGxpZWQgRGlzcGxheU9iamVjdCBpcyBub3QgYSBjaGlsZCBvZiB0aGUgY2FsbGVyJyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuY2hpbGRyZW5baW5kZXhdO1xufTtcblxuLyoqXG4gKiBSZW1vdmVzIGEgY2hpbGQgZnJvbSB0aGUgY29udGFpbmVyLlxuICpcbiAqIEBwYXJhbSBjaGlsZCB7UElYSS5EaXNwbGF5T2JqZWN0fSBUaGUgRGlzcGxheU9iamVjdCB0byByZW1vdmVcbiAqIEByZXR1cm4ge1BJWEkuRGlzcGxheU9iamVjdH0gVGhlIGNoaWxkIHRoYXQgd2FzIHJlbW92ZWQuXG4gKi9cbkNvbnRhaW5lci5wcm90b3R5cGUucmVtb3ZlQ2hpbGQgPSBmdW5jdGlvbiAoY2hpbGQpXG57XG4gICAgdmFyIGFyZ3VtZW50c0xlbmd0aCA9IGFyZ3VtZW50cy5sZW5ndGg7XG5cbiAgICAvLyBpZiB0aGVyZSBpcyBvbmx5IG9uZSBhcmd1bWVudCB3ZSBjYW4gYnlwYXNzIGxvb3BpbmcgdGhyb3VnaCB0aGUgdGhlbVxuICAgIGlmKGFyZ3VtZW50c0xlbmd0aCA+IDEpXG4gICAge1xuICAgICAgICAvLyBsb29wIHRocm91Z2ggdGhlIGFyZ3VtZW50cyBwcm9wZXJ0eSBhbmQgYWRkIGFsbCBjaGlsZHJlblxuICAgICAgICAvLyB1c2UgaXQgdGhlIHJpZ2h0IHdheSAoLmxlbmd0aCBhbmQgW2ldKSBzbyB0aGF0IHRoaXMgZnVuY3Rpb24gY2FuIHN0aWxsIGJlIG9wdGltaXNlZCBieSBKUyBydW50aW1lc1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFyZ3VtZW50c0xlbmd0aDsgaSsrKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnJlbW92ZUNoaWxkKCBhcmd1bWVudHNbaV0gKTtcbiAgICAgICAgfVxuICAgIH0gICAgIFxuICAgIGVsc2VcbiAgICB7ICAgXG4gICAgICAgIHZhciBpbmRleCA9IHRoaXMuY2hpbGRyZW4uaW5kZXhPZihjaGlsZCk7XG5cbiAgICAgICAgaWYgKGluZGV4ID09PSAtMSlcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY2hpbGQucGFyZW50ID0gbnVsbDtcbiAgICAgICAgdXRpbHMucmVtb3ZlSXRlbXModGhpcy5jaGlsZHJlbiwgaW5kZXgsIDEpO1xuXG4gICAgICAgIC8vIFRPRE8gLSBsZXRzIGVpdGhlciBkbyBhbGwgY2FsbGJhY2tzIG9yIGFsbCBldmVudHMuLiBub3QgYm90aCFcbiAgICAgICAgdGhpcy5vbkNoaWxkcmVuQ2hhbmdlKGluZGV4KTtcbiAgICAgICAgY2hpbGQuZW1pdCgncmVtb3ZlZCcsIHRoaXMpO1xuICAgIH1cblxuICAgIHJldHVybiBjaGlsZDtcbn07XG5cbi8qKlxuICogUmVtb3ZlcyBhIGNoaWxkIGZyb20gdGhlIHNwZWNpZmllZCBpbmRleCBwb3NpdGlvbi5cbiAqXG4gKiBAcGFyYW0gaW5kZXgge251bWJlcn0gVGhlIGluZGV4IHRvIGdldCB0aGUgY2hpbGQgZnJvbVxuICogQHJldHVybiB7UElYSS5EaXNwbGF5T2JqZWN0fSBUaGUgY2hpbGQgdGhhdCB3YXMgcmVtb3ZlZC5cbiAqL1xuQ29udGFpbmVyLnByb3RvdHlwZS5yZW1vdmVDaGlsZEF0ID0gZnVuY3Rpb24gKGluZGV4KVxue1xuICAgIHZhciBjaGlsZCA9IHRoaXMuZ2V0Q2hpbGRBdChpbmRleCk7XG5cbiAgICBjaGlsZC5wYXJlbnQgPSBudWxsO1xuICAgIHV0aWxzLnJlbW92ZUl0ZW1zKHRoaXMuY2hpbGRyZW4sIGluZGV4LCAxKTtcblxuICAgIC8vIFRPRE8gLSBsZXRzIGVpdGhlciBkbyBhbGwgY2FsbGJhY2tzIG9yIGFsbCBldmVudHMuLiBub3QgYm90aCFcbiAgICB0aGlzLm9uQ2hpbGRyZW5DaGFuZ2UoaW5kZXgpO1xuICAgIGNoaWxkLmVtaXQoJ3JlbW92ZWQnLCB0aGlzKTtcblxuICAgIHJldHVybiBjaGlsZDtcbn07XG5cbi8qKlxuICogUmVtb3ZlcyBhbGwgY2hpbGRyZW4gZnJvbSB0aGlzIGNvbnRhaW5lciB0aGF0IGFyZSB3aXRoaW4gdGhlIGJlZ2luIGFuZCBlbmQgaW5kZXhlcy5cbiAqXG4gKiBAcGFyYW0gYmVnaW5JbmRleCB7bnVtYmVyfSBUaGUgYmVnaW5uaW5nIHBvc2l0aW9uLiBEZWZhdWx0IHZhbHVlIGlzIDAuXG4gKiBAcGFyYW0gZW5kSW5kZXgge251bWJlcn0gVGhlIGVuZGluZyBwb3NpdGlvbi4gRGVmYXVsdCB2YWx1ZSBpcyBzaXplIG9mIHRoZSBjb250YWluZXIuXG4gKi9cbkNvbnRhaW5lci5wcm90b3R5cGUucmVtb3ZlQ2hpbGRyZW4gPSBmdW5jdGlvbiAoYmVnaW5JbmRleCwgZW5kSW5kZXgpXG57XG4gICAgdmFyIGJlZ2luID0gYmVnaW5JbmRleCB8fCAwO1xuICAgIHZhciBlbmQgPSB0eXBlb2YgZW5kSW5kZXggPT09ICdudW1iZXInID8gZW5kSW5kZXggOiB0aGlzLmNoaWxkcmVuLmxlbmd0aDtcbiAgICB2YXIgcmFuZ2UgPSBlbmQgLSBiZWdpbjtcbiAgICB2YXIgcmVtb3ZlZCwgaTtcblxuICAgIGlmIChyYW5nZSA+IDAgJiYgcmFuZ2UgPD0gZW5kKVxuICAgIHtcbiAgICAgICAgcmVtb3ZlZCA9IHRoaXMuY2hpbGRyZW4uc3BsaWNlKGJlZ2luLCByYW5nZSk7XG5cbiAgICAgICAgZm9yIChpID0gMDsgaSA8IHJlbW92ZWQubGVuZ3RoOyArK2kpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJlbW92ZWRbaV0ucGFyZW50ID0gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMub25DaGlsZHJlbkNoYW5nZShiZWdpbkluZGV4KTtcblxuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgcmVtb3ZlZC5sZW5ndGg7ICsraSlcbiAgICAgICAge1xuICAgICAgICAgICAgcmVtb3ZlZFtpXS5lbWl0KCdyZW1vdmVkJywgdGhpcyk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gcmVtb3ZlZDtcbiAgICB9XG4gICAgZWxzZSBpZiAocmFuZ2UgPT09IDAgJiYgdGhpcy5jaGlsZHJlbi5sZW5ndGggPT09IDApXG4gICAge1xuICAgICAgICByZXR1cm4gW107XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdyZW1vdmVDaGlsZHJlbjogbnVtZXJpYyB2YWx1ZXMgYXJlIG91dHNpZGUgdGhlIGFjY2VwdGFibGUgcmFuZ2UuJyk7XG4gICAgfVxufTtcblxuLyoqXG4gKiBVc2VmdWwgZnVuY3Rpb24gdGhhdCByZXR1cm5zIGEgdGV4dHVyZSBvZiB0aGUgZGlzcGxheSBvYmplY3QgdGhhdCBjYW4gdGhlbiBiZSB1c2VkIHRvIGNyZWF0ZSBzcHJpdGVzXG4gKiBUaGlzIGNhbiBiZSBxdWl0ZSB1c2VmdWwgaWYgeW91ciBkaXNwbGF5T2JqZWN0IGlzIHN0YXRpYyAvIGNvbXBsaWNhdGVkIGFuZCBuZWVkcyB0byBiZSByZXVzZWQgbXVsdGlwbGUgdGltZXMuXG4gKlxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLkNhbnZhc1JlbmRlcmVyfFBJWEkuV2ViR0xSZW5kZXJlcn0gVGhlIHJlbmRlcmVyIHVzZWQgdG8gZ2VuZXJhdGUgdGhlIHRleHR1cmUuXG4gKiBAcGFyYW0gcmVzb2x1dGlvbiB7bnVtYmVyfSBUaGUgcmVzb2x1dGlvbiBvZiB0aGUgdGV4dHVyZSBiZWluZyBnZW5lcmF0ZWRcbiAqIEBwYXJhbSBzY2FsZU1vZGUge251bWJlcn0gU2VlIHtAbGluayBQSVhJLlNDQUxFX01PREVTfSBmb3IgcG9zc2libGUgdmFsdWVzXG4gKiBAcmV0dXJuIHtQSVhJLlRleHR1cmV9IGEgdGV4dHVyZSBvZiB0aGUgZGlzcGxheSBvYmplY3RcbiAqL1xuQ29udGFpbmVyLnByb3RvdHlwZS5nZW5lcmF0ZVRleHR1cmUgPSBmdW5jdGlvbiAocmVuZGVyZXIsIHJlc29sdXRpb24sIHNjYWxlTW9kZSlcbntcbiAgICB2YXIgYm91bmRzID0gdGhpcy5nZXRMb2NhbEJvdW5kcygpO1xuXG4gICAgdmFyIHJlbmRlclRleHR1cmUgPSBuZXcgUmVuZGVyVGV4dHVyZShyZW5kZXJlciwgYm91bmRzLndpZHRoIHwgMCwgYm91bmRzLmhlaWdodCB8IDAsIHNjYWxlTW9kZSwgcmVzb2x1dGlvbik7XG5cbiAgICBfdGVtcE1hdHJpeC50eCA9IC1ib3VuZHMueDtcbiAgICBfdGVtcE1hdHJpeC50eSA9IC1ib3VuZHMueTtcblxuICAgIHJlbmRlclRleHR1cmUucmVuZGVyKHRoaXMsIF90ZW1wTWF0cml4KTtcblxuICAgIHJldHVybiByZW5kZXJUZXh0dXJlO1xufTtcblxuLypcbiAqIFVwZGF0ZXMgdGhlIHRyYW5zZm9ybSBvbiBhbGwgY2hpbGRyZW4gb2YgdGhpcyBjb250YWluZXIgZm9yIHJlbmRlcmluZ1xuICpcbiAqIEBwcml2YXRlXG4gKi9cbkNvbnRhaW5lci5wcm90b3R5cGUudXBkYXRlVHJhbnNmb3JtID0gZnVuY3Rpb24gKClcbntcbiAgICBpZiAoIXRoaXMudmlzaWJsZSlcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLmRpc3BsYXlPYmplY3RVcGRhdGVUcmFuc2Zvcm0oKTtcblxuICAgIGZvciAodmFyIGkgPSAwLCBqID0gdGhpcy5jaGlsZHJlbi5sZW5ndGg7IGkgPCBqOyArK2kpXG4gICAge1xuICAgICAgICB0aGlzLmNoaWxkcmVuW2ldLnVwZGF0ZVRyYW5zZm9ybSgpO1xuICAgIH1cblxuICAgIHRoaXMuZGlydHlUcmFuc2Zvcm0gPSBmYWxzZTtcbn07XG5cbi8vIHBlcmZvcm1hbmNlIGluY3JlYXNlIHRvIGF2b2lkIHVzaW5nIGNhbGwuLiAoMTB4IGZhc3RlcilcbkNvbnRhaW5lci5wcm90b3R5cGUuY29udGFpbmVyVXBkYXRlVHJhbnNmb3JtID0gQ29udGFpbmVyLnByb3RvdHlwZS51cGRhdGVUcmFuc2Zvcm07XG5cbi8qKlxuICogUmV0cmlldmVzIHRoZSBib3VuZHMgb2YgdGhlIENvbnRhaW5lciBhcyBhIHJlY3RhbmdsZS4gVGhlIGJvdW5kcyBjYWxjdWxhdGlvbiB0YWtlcyBhbGwgdmlzaWJsZSBjaGlsZHJlbiBpbnRvIGNvbnNpZGVyYXRpb24uXG4gKlxuICogQHJldHVybiB7UElYSS5SZWN0YW5nbGV9IFRoZSByZWN0YW5ndWxhciBib3VuZGluZyBhcmVhXG4gKi9cbkNvbnRhaW5lci5wcm90b3R5cGUuZ2V0Qm91bmRzID0gZnVuY3Rpb24gKClcbntcbiAgICBpZighdGhpcy5fY3VycmVudEJvdW5kcylcbiAgICB7XG5cbiAgICAgICAgaWYgKHRoaXMuY2hpbGRyZW4ubGVuZ3RoID09PSAwKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gbWF0aC5SZWN0YW5nbGUuRU1QVFk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBUT0RPIHRoZSBib3VuZHMgaGF2ZSBhbHJlYWR5IGJlZW4gY2FsY3VsYXRlZCB0aGlzIHJlbmRlciBzZXNzaW9uIHNvIHJldHVybiB3aGF0IHdlIGhhdmVcblxuICAgICAgICB2YXIgbWluWCA9IEluZmluaXR5O1xuICAgICAgICB2YXIgbWluWSA9IEluZmluaXR5O1xuXG4gICAgICAgIHZhciBtYXhYID0gLUluZmluaXR5O1xuICAgICAgICB2YXIgbWF4WSA9IC1JbmZpbml0eTtcblxuICAgICAgICB2YXIgY2hpbGRCb3VuZHM7XG4gICAgICAgIHZhciBjaGlsZE1heFg7XG4gICAgICAgIHZhciBjaGlsZE1heFk7XG5cbiAgICAgICAgdmFyIGNoaWxkVmlzaWJsZSA9IGZhbHNlO1xuXG4gICAgICAgIGZvciAodmFyIGkgPSAwLCBqID0gdGhpcy5jaGlsZHJlbi5sZW5ndGg7IGkgPCBqOyArK2kpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHZhciBjaGlsZCA9IHRoaXMuY2hpbGRyZW5baV07XG5cbiAgICAgICAgICAgIGlmICghY2hpbGQudmlzaWJsZSlcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY2hpbGRWaXNpYmxlID0gdHJ1ZTtcblxuICAgICAgICAgICAgY2hpbGRCb3VuZHMgPSB0aGlzLmNoaWxkcmVuW2ldLmdldEJvdW5kcygpO1xuXG4gICAgICAgICAgICBtaW5YID0gbWluWCA8IGNoaWxkQm91bmRzLnggPyBtaW5YIDogY2hpbGRCb3VuZHMueDtcbiAgICAgICAgICAgIG1pblkgPSBtaW5ZIDwgY2hpbGRCb3VuZHMueSA/IG1pblkgOiBjaGlsZEJvdW5kcy55O1xuXG4gICAgICAgICAgICBjaGlsZE1heFggPSBjaGlsZEJvdW5kcy53aWR0aCArIGNoaWxkQm91bmRzLng7XG4gICAgICAgICAgICBjaGlsZE1heFkgPSBjaGlsZEJvdW5kcy5oZWlnaHQgKyBjaGlsZEJvdW5kcy55O1xuXG4gICAgICAgICAgICBtYXhYID0gbWF4WCA+IGNoaWxkTWF4WCA/IG1heFggOiBjaGlsZE1heFg7XG4gICAgICAgICAgICBtYXhZID0gbWF4WSA+IGNoaWxkTWF4WSA/IG1heFkgOiBjaGlsZE1heFk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIWNoaWxkVmlzaWJsZSlcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIG1hdGguUmVjdGFuZ2xlLkVNUFRZO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGJvdW5kcyA9IHRoaXMuX2JvdW5kcztcblxuICAgICAgICBib3VuZHMueCA9IG1pblg7XG4gICAgICAgIGJvdW5kcy55ID0gbWluWTtcbiAgICAgICAgYm91bmRzLndpZHRoID0gbWF4WCAtIG1pblg7XG4gICAgICAgIGJvdW5kcy5oZWlnaHQgPSBtYXhZIC0gbWluWTtcblxuICAgICAgICB0aGlzLl9jdXJyZW50Qm91bmRzID0gYm91bmRzO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLl9jdXJyZW50Qm91bmRzO1xufTtcblxuQ29udGFpbmVyLnByb3RvdHlwZS5jb250YWluZXJHZXRCb3VuZHMgPSBDb250YWluZXIucHJvdG90eXBlLmdldEJvdW5kcztcblxuLyoqXG4gKiBSZXRyaWV2ZXMgdGhlIG5vbi1nbG9iYWwgbG9jYWwgYm91bmRzIG9mIHRoZSBDb250YWluZXIgYXMgYSByZWN0YW5nbGUuXG4gKiBUaGUgY2FsY3VsYXRpb24gdGFrZXMgYWxsIHZpc2libGUgY2hpbGRyZW4gaW50byBjb25zaWRlcmF0aW9uLlxuICpcbiAqIEByZXR1cm4ge1BJWEkuUmVjdGFuZ2xlfSBUaGUgcmVjdGFuZ3VsYXIgYm91bmRpbmcgYXJlYVxuICovXG5Db250YWluZXIucHJvdG90eXBlLmdldExvY2FsQm91bmRzID0gZnVuY3Rpb24gKClcbntcbiAgICB2YXIgbWF0cml4Q2FjaGUgPSB0aGlzLndvcmxkVHJhbnNmb3JtO1xuXG4gICAgdGhpcy53b3JsZFRyYW5zZm9ybSA9IG1hdGguTWF0cml4LklERU5USVRZO1xuXG4gICAgZm9yICh2YXIgaSA9IDAsIGogPSB0aGlzLmNoaWxkcmVuLmxlbmd0aDsgaSA8IGo7ICsraSlcbiAgICB7XG4gICAgICAgIHRoaXMuY2hpbGRyZW5baV0udXBkYXRlVHJhbnNmb3JtKCk7XG4gICAgfVxuXG4gICAgdGhpcy53b3JsZFRyYW5zZm9ybSA9IG1hdHJpeENhY2hlO1xuXG4gICAgdGhpcy5fY3VycmVudEJvdW5kcyA9IG51bGw7XG5cbiAgICByZXR1cm4gdGhpcy5nZXRCb3VuZHMoIG1hdGguTWF0cml4LklERU5USVRZICk7XG59O1xuXG4vKipcbiAqIFJlbmRlcnMgdGhlIG9iamVjdCB1c2luZyB0aGUgV2ViR0wgcmVuZGVyZXJcbiAqXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcn0gVGhlIHJlbmRlcmVyXG4gKi9cbkNvbnRhaW5lci5wcm90b3R5cGUucmVuZGVyV2ViR0wgPSBmdW5jdGlvbiAocmVuZGVyZXIpXG57XG5cbiAgICAvLyBpZiB0aGUgb2JqZWN0IGlzIG5vdCB2aXNpYmxlIG9yIHRoZSBhbHBoYSBpcyAwIHRoZW4gbm8gbmVlZCB0byByZW5kZXIgdGhpcyBlbGVtZW50XG4gICAgaWYgKCF0aGlzLnZpc2libGUgfHwgdGhpcy53b3JsZEFscGhhIDw9IDAgfHwgIXRoaXMucmVuZGVyYWJsZSlcbiAgICB7XG4gICAgICBcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHZhciBpLCBqO1xuXG4gICAgLy8gZG8gYSBxdWljayBjaGVjayB0byBzZWUgaWYgdGhpcyBlbGVtZW50IGhhcyBhIG1hc2sgb3IgYSBmaWx0ZXIuXG4gICAgaWYgKHRoaXMuX21hc2sgfHwgdGhpcy5fZmlsdGVycylcbiAgICB7XG4gICAgICAgIHJlbmRlcmVyLmN1cnJlbnRSZW5kZXJlci5mbHVzaCgpO1xuXG4gICAgICAgIC8vIHB1c2ggZmlsdGVyIGZpcnN0IGFzIHdlIG5lZWQgdG8gZW5zdXJlIHRoZSBzdGVuY2lsIGJ1ZmZlciBpcyBjb3JyZWN0IGZvciBhbnkgbWFza2luZ1xuICAgICAgICBpZiAodGhpcy5fZmlsdGVycyAmJiB0aGlzLl9maWx0ZXJzLmxlbmd0aClcbiAgICAgICAge1xuICAgICAgICAgICAgcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5wdXNoRmlsdGVyKHRoaXMsIHRoaXMuX2ZpbHRlcnMpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuX21hc2spXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJlbmRlcmVyLm1hc2tNYW5hZ2VyLnB1c2hNYXNrKHRoaXMsIHRoaXMuX21hc2spO1xuICAgICAgICB9XG5cbiAgICAgICAgcmVuZGVyZXIuY3VycmVudFJlbmRlcmVyLnN0YXJ0KCk7XG5cbiAgICAgICAgLy8gYWRkIHRoaXMgb2JqZWN0IHRvIHRoZSBiYXRjaCwgb25seSByZW5kZXJlZCBpZiBpdCBoYXMgYSB0ZXh0dXJlLlxuICAgICAgICB0aGlzLl9yZW5kZXJXZWJHTChyZW5kZXJlcik7XG5cbiAgICAgICAgLy8gbm93IGxvb3AgdGhyb3VnaCB0aGUgY2hpbGRyZW4gYW5kIG1ha2Ugc3VyZSB0aGV5IGdldCByZW5kZXJlZFxuICAgICAgICBmb3IgKGkgPSAwLCBqID0gdGhpcy5jaGlsZHJlbi5sZW5ndGg7IGkgPCBqOyBpKyspXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuY2hpbGRyZW5baV0ucmVuZGVyV2ViR0wocmVuZGVyZXIpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmVuZGVyZXIuY3VycmVudFJlbmRlcmVyLmZsdXNoKCk7XG5cbiAgICAgICAgaWYgKHRoaXMuX21hc2spXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJlbmRlcmVyLm1hc2tNYW5hZ2VyLnBvcE1hc2sodGhpcywgdGhpcy5fbWFzayk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5fZmlsdGVycylcbiAgICAgICAge1xuICAgICAgICAgICAgcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5wb3BGaWx0ZXIoKTtcblxuICAgICAgICB9XG4gICAgICAgIHJlbmRlcmVyLmN1cnJlbnRSZW5kZXJlci5zdGFydCgpO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICB0aGlzLl9yZW5kZXJXZWJHTChyZW5kZXJlcik7XG5cbiAgICAgICAgLy8gc2ltcGxlIHJlbmRlciBjaGlsZHJlbiFcbiAgICAgICAgZm9yIChpID0gMCwgaiA9IHRoaXMuY2hpbGRyZW4ubGVuZ3RoOyBpIDwgajsgKytpKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmNoaWxkcmVuW2ldLnJlbmRlcldlYkdMKHJlbmRlcmVyKTtcbiAgICAgICAgfVxuICAgIH1cbn07XG5cbi8qKlxuICogVG8gYmUgb3ZlcnJpZGRlbiBieSB0aGUgc3ViY2xhc3NcbiAqXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcn0gVGhlIHJlbmRlcmVyXG4gKiBAcHJpdmF0ZVxuICovXG5Db250YWluZXIucHJvdG90eXBlLl9yZW5kZXJXZWJHTCA9IGZ1bmN0aW9uIChyZW5kZXJlcikgLy8ganNoaW50IHVudXNlZDpmYWxzZVxue1xuICAgIC8vIHRoaXMgaXMgd2hlcmUgY29udGVudCBpdHNlbGYgZ2V0cyByZW5kZXJlZC4uLlxufTtcblxuLyoqXG4gKiBUbyBiZSBvdmVycmlkZGVuIGJ5IHRoZSBzdWJjbGFzc1xuICpcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5DYW52YXNSZW5kZXJlcn0gVGhlIHJlbmRlcmVyXG4gKiBAcHJpdmF0ZVxuICovXG5Db250YWluZXIucHJvdG90eXBlLl9yZW5kZXJDYW52YXMgPSBmdW5jdGlvbiAocmVuZGVyZXIpIC8vIGpzaGludCB1bnVzZWQ6ZmFsc2VcbntcbiAgICAvLyB0aGlzIGlzIHdoZXJlIGNvbnRlbnQgaXRzZWxmIGdldHMgcmVuZGVyZWQuLi5cbn07XG5cblxuLyoqXG4gKiBSZW5kZXJzIHRoZSBvYmplY3QgdXNpbmcgdGhlIENhbnZhcyByZW5kZXJlclxuICpcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5DYW52YXNSZW5kZXJlcn0gVGhlIHJlbmRlcmVyXG4gKi9cbkNvbnRhaW5lci5wcm90b3R5cGUucmVuZGVyQ2FudmFzID0gZnVuY3Rpb24gKHJlbmRlcmVyKVxue1xuICAgIC8vIGlmIG5vdCB2aXNpYmxlIG9yIHRoZSBhbHBoYSBpcyAwIHRoZW4gbm8gbmVlZCB0byByZW5kZXIgdGhpc1xuICAgIGlmICghdGhpcy52aXNpYmxlIHx8IHRoaXMuYWxwaGEgPD0gMCB8fCAhdGhpcy5yZW5kZXJhYmxlKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICh0aGlzLl9tYXNrKVxuICAgIHtcbiAgICAgICAgcmVuZGVyZXIubWFza01hbmFnZXIucHVzaE1hc2sodGhpcy5fbWFzaywgcmVuZGVyZXIpO1xuICAgIH1cblxuICAgIHRoaXMuX3JlbmRlckNhbnZhcyhyZW5kZXJlcik7XG4gICAgZm9yICh2YXIgaSA9IDAsIGogPSB0aGlzLmNoaWxkcmVuLmxlbmd0aDsgaSA8IGo7ICsraSlcbiAgICB7XG4gICAgICAgIHRoaXMuY2hpbGRyZW5baV0ucmVuZGVyQ2FudmFzKHJlbmRlcmVyKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5fbWFzaylcbiAgICB7XG4gICAgICAgIHJlbmRlcmVyLm1hc2tNYW5hZ2VyLnBvcE1hc2socmVuZGVyZXIpO1xuICAgIH1cbn07XG5cbi8qKlxuICogRGVzdHJveXMgdGhlIGNvbnRhaW5lclxuICogQHBhcmFtIFtkZXN0cm95Q2hpbGRyZW49ZmFsc2VdIHtib29sZWFufSBpZiBzZXQgdG8gdHJ1ZSwgYWxsIHRoZSBjaGlsZHJlbiB3aWxsIGhhdmUgdGhlaXIgZGVzdHJveSBtZXRob2QgY2FsbGVkIGFzIHdlbGxcbiAqL1xuQ29udGFpbmVyLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKGRlc3Ryb3lDaGlsZHJlbilcbntcbiAgICBEaXNwbGF5T2JqZWN0LnByb3RvdHlwZS5kZXN0cm95LmNhbGwodGhpcyk7XG5cbiAgICBpZiAoZGVzdHJveUNoaWxkcmVuKVxuICAgIHtcbiAgICAgICAgZm9yICh2YXIgaSA9IDAsIGogPSB0aGlzLmNoaWxkcmVuLmxlbmd0aDsgaSA8IGo7ICsraSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5jaGlsZHJlbltpXS5kZXN0cm95KGRlc3Ryb3lDaGlsZHJlbik7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLnJlbW92ZUNoaWxkcmVuKCk7XG5cbiAgICB0aGlzLmNoaWxkcmVuID0gbnVsbDtcbn07XG4iLCJ2YXIgbWF0aCA9IHJlcXVpcmUoJy4uL21hdGgnKSxcbiAgICBSZW5kZXJUZXh0dXJlID0gcmVxdWlyZSgnLi4vdGV4dHVyZXMvUmVuZGVyVGV4dHVyZScpLFxuICAgIEV2ZW50RW1pdHRlciA9IHJlcXVpcmUoJ2V2ZW50ZW1pdHRlcjMnKSxcbiAgICBDT05TVCA9IHJlcXVpcmUoJy4uL2NvbnN0JyksXG4gICAgX3RlbXBNYXRyaXggPSBuZXcgbWF0aC5NYXRyaXgoKSxcbiAgICBfdGVtcERpc3BsYXlPYmplY3RQYXJlbnQgPSB7d29ybGRUcmFuc2Zvcm06bmV3IG1hdGguTWF0cml4KCksIHdvcmxkQWxwaGE6MSwgY2hpbGRyZW46W119O1xuXG5cbi8qKlxuICogVGhlIGJhc2UgY2xhc3MgZm9yIGFsbCBvYmplY3RzIHRoYXQgYXJlIHJlbmRlcmVkIG9uIHRoZSBzY3JlZW4uXG4gKiBUaGlzIGlzIGFuIGFic3RyYWN0IGNsYXNzIGFuZCBzaG91bGQgbm90IGJlIHVzZWQgb24gaXRzIG93biByYXRoZXIgaXQgc2hvdWxkIGJlIGV4dGVuZGVkLlxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgRXZlbnRFbWl0dGVyXG4gKiBAbWVtYmVyb2YgUElYSVxuICovXG5mdW5jdGlvbiBEaXNwbGF5T2JqZWN0KClcbntcbiAgICBFdmVudEVtaXR0ZXIuY2FsbCh0aGlzKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBjb29yZGluYXRlIG9mIHRoZSBvYmplY3QgcmVsYXRpdmUgdG8gdGhlIGxvY2FsIGNvb3JkaW5hdGVzIG9mIHRoZSBwYXJlbnQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlBvaW50fVxuICAgICAqL1xuICAgIHRoaXMucG9zaXRpb24gPSBuZXcgbWF0aC5Qb2ludCgpO1xuICAgIHRoaXMuX3Bvc2l0aW9uID0gbmV3IENhY2hlUG9pbnQodGhpcyk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgc2NhbGUgZmFjdG9yIG9mIHRoZSBvYmplY3QuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlBvaW50fVxuICAgICAqL1xuICAgIHRoaXMuc2NhbGUgPSBuZXcgbWF0aC5Qb2ludCgxLCAxKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBwaXZvdCBwb2ludCBvZiB0aGUgZGlzcGxheU9iamVjdCB0aGF0IGl0IHJvdGF0ZXMgYXJvdW5kXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlBvaW50fVxuICAgICAqL1xuICAgIHRoaXMucGl2b3QgPSBuZXcgbWF0aC5Qb2ludCgwLCAwKTtcblxuXG4gICAgLyoqXG4gICAgICogVGhlIHNrZXcgZmFjdG9yIGZvciB0aGUgb2JqZWN0IGluIHJhZGlhbnMuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlBvaW50fVxuICAgICAqL1xuICAgIHRoaXMuc2tldyA9IG5ldyBtYXRoLlBvaW50KDAsIDApO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHJvdGF0aW9uIG9mIHRoZSBvYmplY3QgaW4gcmFkaWFucy5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLl9yb3RhdGlvbiA9IDA7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgb3BhY2l0eSBvZiB0aGUgb2JqZWN0LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMuYWxwaGEgPSAxO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHZpc2liaWxpdHkgb2YgdGhlIG9iamVjdC4gSWYgZmFsc2UgdGhlIG9iamVjdCB3aWxsIG5vdCBiZSBkcmF3biwgYW5kXG4gICAgICogdGhlIHVwZGF0ZVRyYW5zZm9ybSBmdW5jdGlvbiB3aWxsIG5vdCBiZSBjYWxsZWQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqL1xuICAgIHRoaXMudmlzaWJsZSA9IHRydWU7XG5cbiAgICAvKipcbiAgICAgKiBDYW4gdGhpcyBvYmplY3QgYmUgcmVuZGVyZWQsIGlmIGZhbHNlIHRoZSBvYmplY3Qgd2lsbCBub3QgYmUgZHJhd24gYnV0IHRoZSB1cGRhdGVUcmFuc2Zvcm1cbiAgICAgKiBtZXRob2RzIHdpbGwgc3RpbGwgYmUgY2FsbGVkLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKi9cbiAgICB0aGlzLnJlbmRlcmFibGUgPSB0cnVlO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGRpc3BsYXkgb2JqZWN0IGNvbnRhaW5lciB0aGF0IGNvbnRhaW5zIHRoaXMgZGlzcGxheSBvYmplY3QuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLkNvbnRhaW5lcn1cbiAgICAgKiBAcmVhZE9ubHlcbiAgICAgKi9cbiAgICB0aGlzLnBhcmVudCA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgbXVsdGlwbGllZCBhbHBoYSBvZiB0aGUgZGlzcGxheU9iamVjdFxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEByZWFkT25seVxuICAgICAqL1xuICAgIHRoaXMud29ybGRBbHBoYSA9IDE7XG5cbiAgICAvKipcbiAgICAgKiBDdXJyZW50IHRyYW5zZm9ybSBvZiB0aGUgb2JqZWN0IGJhc2VkIG9uIHdvcmxkIChwYXJlbnQpIGZhY3RvcnNcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuTWF0cml4fVxuICAgICAqIEByZWFkT25seVxuICAgICAqL1xuICAgIHRoaXMud29ybGRUcmFuc2Zvcm0gPSBuZXcgbWF0aC5NYXRyaXgoKTtcbiAgICB0aGlzLmxvY2FsVHJhbnNmb3JtID0gbmV3IG1hdGguTWF0cml4KCk7XG5cblxuICAgIC8qKlxuICAgICAqIFRoZSBhcmVhIHRoZSBmaWx0ZXIgaXMgYXBwbGllZCB0by4gVGhpcyBpcyB1c2VkIGFzIG1vcmUgb2YgYW4gb3B0aW1pc2F0aW9uXG4gICAgICogcmF0aGVyIHRoYW4gZmlndXJpbmcgb3V0IHRoZSBkaW1lbnNpb25zIG9mIHRoZSBkaXNwbGF5T2JqZWN0IGVhY2ggZnJhbWUgeW91IGNhbiBzZXQgdGhpcyByZWN0YW5nbGVcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuUmVjdGFuZ2xlfVxuICAgICAqL1xuICAgIHRoaXMuZmlsdGVyQXJlYSA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBjYWNoZWQgc2luIHJvdGF0aW9uXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9zciA9IDA7XG5cbiAgICAvKipcbiAgICAgKiBjYWNoZWQgY29zIHJvdGF0aW9uXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9jciA9IDE7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgb3JpZ2luYWwsIGNhY2hlZCBib3VuZHMgb2YgdGhlIG9iamVjdFxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5SZWN0YW5nbGV9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9ib3VuZHMgPSBuZXcgbWF0aC5SZWN0YW5nbGUoMCwgMCwgMSwgMSk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgbW9zdCB1cC10by1kYXRlIGJvdW5kcyBvZiB0aGUgb2JqZWN0XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlJlY3RhbmdsZX1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX2N1cnJlbnRCb3VuZHMgPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogVGhlIG9yaWdpbmFsLCBjYWNoZWQgbWFzayBvZiB0aGUgb2JqZWN0XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlJlY3RhbmdsZX1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX21hc2sgPSBudWxsO1xuXG4gICAgdGhpcy5kaXJ0eVRyYW5zZm9ybSA9IHRydWU7XG59XG5cbi8vIGNvbnN0cnVjdG9yXG5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoRXZlbnRFbWl0dGVyLnByb3RvdHlwZSk7XG5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IERpc3BsYXlPYmplY3Q7XG5tb2R1bGUuZXhwb3J0cyA9IERpc3BsYXlPYmplY3Q7XG5cbnZhciBDYWNoZVBvaW50ID0gZnVuY3Rpb24oZG9jKXtcbiAgICBcbiAgICB0aGlzLmRvYyA9IGRvYztcblxuICAgIHRoaXMueCA9IDA7XG4gICAgdGhpcy55ID0gMDtcbn1cblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoQ2FjaGVQb2ludC5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBUaGUgcG9zaXRpb24gb2YgdGhlIGRpc3BsYXlPYmplY3Qgb24gdGhlIHggYXhpcyByZWxhdGl2ZSB0byB0aGUgbG9jYWwgY29vcmRpbmF0ZXMgb2YgdGhlIHBhcmVudC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5EaXNwbGF5T2JqZWN0I1xuICAgICAqL1xuICAgIHg6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5kb2MucG9zaXRpb24ueDtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuZG9jLnBvc2l0aW9uLnggPSB2YWx1ZTtcbiAgICAgICAgICAgIHRoaXMuZG9jLmRpcnR5VHJhbnNmb3JtID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICB5OiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZG9jLnBvc2lpdG9uLnk7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmRvYy5wb3NpdGlvbi55ID0gdmFsdWU7XG4gICAgICAgICAgICB0aGlzLmRvYy5kaXJ0eVRyYW5zZm9ybSA9IHRydWU7XG4gICAgICAgIH1cbiAgICB9XG59KTtcblxuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhEaXNwbGF5T2JqZWN0LnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFRoZSBwb3NpdGlvbiBvZiB0aGUgZGlzcGxheU9iamVjdCBvbiB0aGUgeCBheGlzIHJlbGF0aXZlIHRvIHRoZSBsb2NhbCBjb29yZGluYXRlcyBvZiB0aGUgcGFyZW50LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLkRpc3BsYXlPYmplY3QjXG4gICAgICovXG4gICAgeDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnBvc2l0aW9uLng7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnBvc2l0aW9uLnggPSB2YWx1ZTtcbiAgICAgICAgICAgIHRoaXMuZGlydHlUcmFuc2Zvcm0gPSB0cnVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFRoZSBwb3NpdGlvbiBvZiB0aGUgZGlzcGxheU9iamVjdCBvbiB0aGUgeSBheGlzIHJlbGF0aXZlIHRvIHRoZSBsb2NhbCBjb29yZGluYXRlcyBvZiB0aGUgcGFyZW50LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLkRpc3BsYXlPYmplY3QjXG4gICAgICovXG4gICAgeToge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnBvc2l0aW9uLnk7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnBvc2l0aW9uLnkgPSB2YWx1ZTtcbiAgICAgICAgICAgIHRoaXMuZGlydHlUcmFuc2Zvcm0gPSB0cnVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIHNjYWxlWDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnNjYWxlLng7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnNjYWxlLnggPSB2YWx1ZTtcbiAgICAgICAgICAgIHRoaXMuZGlydHlUcmFuc2Zvcm0gPSB0cnVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFRoZSBwb3NpdGlvbiBvZiB0aGUgZGlzcGxheU9iamVjdCBvbiB0aGUgeSBheGlzIHJlbGF0aXZlIHRvIHRoZSBsb2NhbCBjb29yZGluYXRlcyBvZiB0aGUgcGFyZW50LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLkRpc3BsYXlPYmplY3QjXG4gICAgICovXG4gICAgc2NhbGVZOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuc2NhbGUueTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuc2NhbGUueSA9IHZhbHVlO1xuICAgICAgICAgICAgdGhpcy5kaXJ0eVRyYW5zZm9ybSA9IHRydWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgcm90YXRpb246IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fcm90YXRpb247XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLl9yb3RhdGlvbiA9IHZhbHVlO1xuICAgICAgICAgICAgdGhpcy5kaXJ0eVRyYW5zZm9ybSA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLl9zciA9IE1hdGguc2luKHZhbHVlKTtcbiAgICAgICAgICAgIHRoaXMuX2NyID0gTWF0aC5jb3ModmFsdWUpO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFRoZSBwb3NpdGlvbiBvZiB0aGUgZGlzcGxheU9iamVjdCBvbiB0aGUgeSBheGlzIHJlbGF0aXZlIHRvIHRoZSBsb2NhbCBjb29yZGluYXRlcyBvZiB0aGUgcGFyZW50LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLkRpc3BsYXlPYmplY3QjXG4gICAgICovXG4gICAgc2NhbGVZOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuc2NhbGUueTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuc2NhbGUueSA9IHZhbHVlO1xuICAgICAgICAgICAgdGhpcy5kaXJ0eVRyYW5zZm9ybSA9IHRydWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogSW5kaWNhdGVzIGlmIHRoZSBzcHJpdGUgaXMgZ2xvYmFsbHkgdmlzaWJsZS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICogQG1lbWJlcm9mIFBJWEkuRGlzcGxheU9iamVjdCNcbiAgICAgKiBAcmVhZG9ubHlcbiAgICAgKi9cbiAgICB3b3JsZFZpc2libGU6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICB2YXIgaXRlbSA9IHRoaXM7XG5cbiAgICAgICAgICAgIGRvIHtcbiAgICAgICAgICAgICAgICBpZiAoIWl0ZW0udmlzaWJsZSlcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpdGVtID0gaXRlbS5wYXJlbnQ7XG4gICAgICAgICAgICB9IHdoaWxlIChpdGVtKTtcblxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogU2V0cyBhIG1hc2sgZm9yIHRoZSBkaXNwbGF5T2JqZWN0LiBBIG1hc2sgaXMgYW4gb2JqZWN0IHRoYXQgbGltaXRzIHRoZSB2aXNpYmlsaXR5IG9mIGFuIG9iamVjdCB0byB0aGUgc2hhcGUgb2YgdGhlIG1hc2sgYXBwbGllZCB0byBpdC5cbiAgICAgKiBJbiBQSVhJIGEgcmVndWxhciBtYXNrIG11c3QgYmUgYSBQSVhJLkdyYXBoaWNzIG9yIGEgUElYSS5TcHJpdGUgb2JqZWN0LiBUaGlzIGFsbG93cyBmb3IgbXVjaCBmYXN0ZXIgbWFza2luZyBpbiBjYW52YXMgYXMgaXQgdXRpbGlzZXMgc2hhcGUgY2xpcHBpbmcuXG4gICAgICogVG8gcmVtb3ZlIGEgbWFzaywgc2V0IHRoaXMgcHJvcGVydHkgdG8gbnVsbC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuR3JhcGhpY3N8UElYSS5TcHJpdGV9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuRGlzcGxheU9iamVjdCNcbiAgICAgKi9cbiAgICBtYXNrOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX21hc2s7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICBpZiAodGhpcy5fbWFzaylcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9tYXNrLnJlbmRlcmFibGUgPSB0cnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLl9tYXNrID0gdmFsdWU7XG5cbiAgICAgICAgICAgIGlmICh0aGlzLl9tYXNrKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHRoaXMuX21hc2sucmVuZGVyYWJsZSA9IGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIGZpbHRlcnMgZm9yIHRoZSBkaXNwbGF5T2JqZWN0LlxuICAgICAqICogSU1QT1JUQU5UOiBUaGlzIGlzIGEgd2ViR0wgb25seSBmZWF0dXJlIGFuZCB3aWxsIGJlIGlnbm9yZWQgYnkgdGhlIGNhbnZhcyByZW5kZXJlci5cbiAgICAgKiBUbyByZW1vdmUgZmlsdGVycyBzaW1wbHkgc2V0IHRoaXMgcHJvcGVydHkgdG8gJ251bGwnXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLkFic3RyYWN0RmlsdGVyW119XG4gICAgICogQG1lbWJlcm9mIFBJWEkuRGlzcGxheU9iamVjdCNcbiAgICAgKi9cbiAgICBmaWx0ZXJzOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2ZpbHRlcnMgJiYgdGhpcy5fZmlsdGVycy5zbGljZSgpO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5fZmlsdGVycyA9IHZhbHVlICYmIHZhbHVlLnNsaWNlKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbn0pO1xuXG4vKlxuICogVXBkYXRlcyB0aGUgb2JqZWN0IHRyYW5zZm9ybSBmb3IgcmVuZGVyaW5nXG4gKlxuICogVE9ETyAtIE9wdGltaXphdGlvbiBwYXNzIVxuICovXG5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS51cGRhdGVUcmFuc2Zvcm0gPSBmdW5jdGlvbiAoKVxue1xuICAgIHZhciBwdCA9IHRoaXMucGFyZW50LndvcmxkVHJhbnNmb3JtO1xuICAgIHZhciB3dCA9IHRoaXMud29ybGRUcmFuc2Zvcm07XG4gICAgdmFyIGx0ID0gdGhpcy5sb2NhbFRyYW5zZm9ybTtcblxuICAgIGlmKHRoaXMuZGlydHlUcmFuc2Zvcm0pXG4gICAge1xuICAgICAgICAvLyBnZXQgdGhlIG1hdHJpeCB2YWx1ZXMgb2YgdGhlIGRpc3BsYXlvYmplY3QgYmFzZWQgb24gaXRzIHRyYW5zZm9ybSBwcm9wZXJ0aWVzLi5cbiAgICAgICAgbHQuYSAgPSAgdGhpcy5fY3IgKiB0aGlzLnNjYWxlLng7XG4gICAgICAgIGx0LmIgID0gIHRoaXMuX3NyICogdGhpcy5zY2FsZS54O1xuICAgICAgICBsdC5jICA9IC10aGlzLl9zciAqIHRoaXMuc2NhbGUueTtcbiAgICAgICAgbHQuZCAgPSAgdGhpcy5fY3IgKiB0aGlzLnNjYWxlLnk7XG4gICAgICAgIGx0LnR4ID0gIHRoaXMucG9zaXRpb24ueCAtICh0aGlzLnBpdm90LnggKiBsdC5hICsgdGhpcy5waXZvdC55ICogbHQuYyk7XG4gICAgICAgIGx0LnR5ID0gIHRoaXMucG9zaXRpb24ueSAtICh0aGlzLnBpdm90LnggKiBsdC5iICsgdGhpcy5waXZvdC55ICogbHQuZCk7XG4gICAgfVxuXG4gICAgaWYodGhpcy5kaXJ0eVRyYW5zZm9ybSB8fCB0aGlzLnBhcmVudC5kaXJ0eVRyYW5zZm9ybSlcbiAgICB7ICAgICAgXG4gICAgICAgIC8vIGNvbmNhdCB0aGUgcGFyZW50IG1hdHJpeCB3aXRoIHRoZSBvYmplY3RzIHRyYW5zZm9ybS5cbiAgICAgICAgd3QuYSAgPSBsdC5hICAqIHB0LmEgKyBsdC5iICAqIHB0LmM7XG4gICAgICAgIHd0LmIgID0gbHQuYSAgKiBwdC5iICsgbHQuYiAgKiBwdC5kO1xuICAgICAgICB3dC5jICA9IGx0LmMgICogcHQuYSArIGx0LmQgICogcHQuYztcbiAgICAgICAgd3QuZCAgPSBsdC5jICAqIHB0LmIgKyBsdC5kICAqIHB0LmQ7XG4gICAgICAgIHd0LnR4ID0gbHQudHggKiBwdC5hICsgbHQudHkgKiBwdC5jICsgcHQudHg7XG4gICAgICAgIHd0LnR5ID0gbHQudHggKiBwdC5iICsgbHQudHkgKiBwdC5kICsgcHQudHk7ICAgICAgIFxuICAgIFxuICAgICAgICB0aGlzLl9jdXJyZW50Qm91bmRzID0gbnVsbDtcbiAgICB9XG5cbiAgICAvLyBtdWx0aXBseSB0aGUgYWxwaGFzLi5cbiAgICB0aGlzLndvcmxkQWxwaGEgPSB0aGlzLmFscGhhICogdGhpcy5wYXJlbnQud29ybGRBbHBoYTtcblxuICAgIC8vIHJlc2V0IHRoZSBib3VuZHMgZWFjaCB0aW1lIHRoaXMgaXMgY2FsbGVkIVxuICAgIFxufTtcblxuLy8gcGVyZm9ybWFuY2UgaW5jcmVhc2UgdG8gYXZvaWQgdXNpbmcgY2FsbC4uICgxMHggZmFzdGVyKVxuRGlzcGxheU9iamVjdC5wcm90b3R5cGUuZGlzcGxheU9iamVjdFVwZGF0ZVRyYW5zZm9ybSA9IERpc3BsYXlPYmplY3QucHJvdG90eXBlLnVwZGF0ZVRyYW5zZm9ybTtcblxuLyoqXG4gKlxuICpcbiAqIFJldHJpZXZlcyB0aGUgYm91bmRzIG9mIHRoZSBkaXNwbGF5T2JqZWN0IGFzIGEgcmVjdGFuZ2xlIG9iamVjdFxuICpcbiAqIEBwYXJhbSBtYXRyaXgge1BJWEkuTWF0cml4fVxuICogQHJldHVybiB7UElYSS5SZWN0YW5nbGV9IHRoZSByZWN0YW5ndWxhciBib3VuZGluZyBhcmVhXG4gKi9cbkRpc3BsYXlPYmplY3QucHJvdG90eXBlLmdldEJvdW5kcyA9IGZ1bmN0aW9uIChtYXRyaXgpIC8vIGpzaGludCB1bnVzZWQ6ZmFsc2VcbntcbiAgICByZXR1cm4gbWF0aC5SZWN0YW5nbGUuRU1QVFk7XG59O1xuXG4vKipcbiAqIFJldHJpZXZlcyB0aGUgbG9jYWwgYm91bmRzIG9mIHRoZSBkaXNwbGF5T2JqZWN0IGFzIGEgcmVjdGFuZ2xlIG9iamVjdFxuICpcbiAqIEByZXR1cm4ge1BJWEkuUmVjdGFuZ2xlfSB0aGUgcmVjdGFuZ3VsYXIgYm91bmRpbmcgYXJlYVxuICovXG5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS5nZXRMb2NhbEJvdW5kcyA9IGZ1bmN0aW9uICgpXG57XG4gICAgcmV0dXJuIHRoaXMuZ2V0Qm91bmRzKG1hdGguTWF0cml4LklERU5USVRZKTtcbn07XG5cbi8qKlxuICogQ2FsY3VsYXRlcyB0aGUgZ2xvYmFsIHBvc2l0aW9uIG9mIHRoZSBkaXNwbGF5IG9iamVjdFxuICpcbiAqIEBwYXJhbSBwb3NpdGlvbiB7UElYSS5Qb2ludH0gVGhlIHdvcmxkIG9yaWdpbiB0byBjYWxjdWxhdGUgZnJvbVxuICogQHJldHVybiB7UElYSS5Qb2ludH0gQSBwb2ludCBvYmplY3QgcmVwcmVzZW50aW5nIHRoZSBwb3NpdGlvbiBvZiB0aGlzIG9iamVjdFxuICovXG5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS50b0dsb2JhbCA9IGZ1bmN0aW9uIChwb3NpdGlvbilcbntcbiAgICAvLyB0aGlzIHBhcmVudCBjaGVjayBpcyBmb3IganVzdCBpbiBjYXNlIHRoZSBpdGVtIGlzIGEgcm9vdCBvYmplY3QuXG4gICAgLy8gSWYgaXQgaXMgd2UgbmVlZCB0byBnaXZlIGl0IGEgdGVtcG9yYXJ5IHBhcmVudCBzbyB0aGF0IGRpc3BsYXlPYmplY3RVcGRhdGVUcmFuc2Zvcm0gd29ya3MgY29ycmVjdGx5XG4gICAgLy8gdGhpcyBpcyBtYWlubHkgdG8gYXZvaWQgYSBwYXJlbnQgY2hlY2sgaW4gdGhlIG1haW4gbG9vcC4gRXZlcnkgbGl0dGxlIGhlbHBzIGZvciBwZXJmb3JtYW5jZSA6KVxuICAgIGlmKCF0aGlzLnBhcmVudClcbiAgICB7XG4gICAgICAgIHRoaXMucGFyZW50ID0gX3RlbXBEaXNwbGF5T2JqZWN0UGFyZW50O1xuICAgICAgICB0aGlzLmRpc3BsYXlPYmplY3RVcGRhdGVUcmFuc2Zvcm0oKTtcbiAgICAgICAgdGhpcy5wYXJlbnQgPSBudWxsO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICB0aGlzLmRpc3BsYXlPYmplY3RVcGRhdGVUcmFuc2Zvcm0oKTtcbiAgICB9XG5cbiAgICAvLyBkb24ndCBuZWVkIHRvIHVwZGF0ZSB0aGUgbG90XG4gICAgcmV0dXJuIHRoaXMud29ybGRUcmFuc2Zvcm0uYXBwbHkocG9zaXRpb24pO1xufTtcblxuLyoqXG4gKiBDYWxjdWxhdGVzIHRoZSBsb2NhbCBwb3NpdGlvbiBvZiB0aGUgZGlzcGxheSBvYmplY3QgcmVsYXRpdmUgdG8gYW5vdGhlciBwb2ludFxuICpcbiAqIEBwYXJhbSBwb3NpdGlvbiB7UElYSS5Qb2ludH0gVGhlIHdvcmxkIG9yaWdpbiB0byBjYWxjdWxhdGUgZnJvbVxuICogQHBhcmFtIFtmcm9tXSB7UElYSS5EaXNwbGF5T2JqZWN0fSBUaGUgRGlzcGxheU9iamVjdCB0byBjYWxjdWxhdGUgdGhlIGdsb2JhbCBwb3NpdGlvbiBmcm9tXG4gKiBAcGFyYW0gW3BvaW50XSB7UElYSS5Qb2ludH0gQSBQb2ludCBvYmplY3QgaW4gd2hpY2ggdG8gc3RvcmUgdGhlIHZhbHVlLCBvcHRpb25hbCAob3RoZXJ3aXNlIHdpbGwgY3JlYXRlIGEgbmV3IFBvaW50KVxuICogQHJldHVybiB7UElYSS5Qb2ludH0gQSBwb2ludCBvYmplY3QgcmVwcmVzZW50aW5nIHRoZSBwb3NpdGlvbiBvZiB0aGlzIG9iamVjdFxuICovXG5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS50b0xvY2FsID0gZnVuY3Rpb24gKHBvc2l0aW9uLCBmcm9tLCBwb2ludClcbntcbiAgICBpZiAoZnJvbSlcbiAgICB7XG4gICAgICAgIHBvc2l0aW9uID0gZnJvbS50b0dsb2JhbChwb3NpdGlvbik7XG4gICAgfVxuXG4gICAgLy8gdGhpcyBwYXJlbnQgY2hlY2sgaXMgZm9yIGp1c3QgaW4gY2FzZSB0aGUgaXRlbSBpcyBhIHJvb3Qgb2JqZWN0LlxuICAgIC8vIElmIGl0IGlzIHdlIG5lZWQgdG8gZ2l2ZSBpdCBhIHRlbXBvcmFyeSBwYXJlbnQgc28gdGhhdCBkaXNwbGF5T2JqZWN0VXBkYXRlVHJhbnNmb3JtIHdvcmtzIGNvcnJlY3RseVxuICAgIC8vIHRoaXMgaXMgbWFpbmx5IHRvIGF2b2lkIGEgcGFyZW50IGNoZWNrIGluIHRoZSBtYWluIGxvb3AuIEV2ZXJ5IGxpdHRsZSBoZWxwcyBmb3IgcGVyZm9ybWFuY2UgOilcbiAgICBpZighdGhpcy5wYXJlbnQpXG4gICAge1xuICAgICAgICB0aGlzLnBhcmVudCA9IF90ZW1wRGlzcGxheU9iamVjdFBhcmVudDtcbiAgICAgICAgdGhpcy5kaXNwbGF5T2JqZWN0VXBkYXRlVHJhbnNmb3JtKCk7XG4gICAgICAgIHRoaXMucGFyZW50ID0gbnVsbDtcbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgdGhpcy5kaXNwbGF5T2JqZWN0VXBkYXRlVHJhbnNmb3JtKCk7XG4gICAgfVxuXG4gICAgLy8gc2ltcGx5IGFwcGx5IHRoZSBtYXRyaXguLlxuICAgIHJldHVybiB0aGlzLndvcmxkVHJhbnNmb3JtLmFwcGx5SW52ZXJzZShwb3NpdGlvbiwgcG9pbnQpO1xufTtcblxuLyoqXG4gKiBSZW5kZXJzIHRoZSBvYmplY3QgdXNpbmcgdGhlIFdlYkdMIHJlbmRlcmVyXG4gKlxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLldlYkdMUmVuZGVyZXJ9IFRoZSByZW5kZXJlclxuICogQHByaXZhdGVcbiAqL1xuRGlzcGxheU9iamVjdC5wcm90b3R5cGUucmVuZGVyV2ViR0wgPSBmdW5jdGlvbiAocmVuZGVyZXIpIC8vIGpzaGludCB1bnVzZWQ6ZmFsc2VcbntcbiAgICAvLyBPVkVSV1JJVEU7XG59O1xuXG4vKipcbiAqIFJlbmRlcnMgdGhlIG9iamVjdCB1c2luZyB0aGUgQ2FudmFzIHJlbmRlcmVyXG4gKlxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLkNhbnZhc1JlbmRlcmVyfSBUaGUgcmVuZGVyZXJcbiAqIEBwcml2YXRlXG4gKi9cbkRpc3BsYXlPYmplY3QucHJvdG90eXBlLnJlbmRlckNhbnZhcyA9IGZ1bmN0aW9uIChyZW5kZXJlcikgLy8ganNoaW50IHVudXNlZDpmYWxzZVxue1xuICAgIC8vIE9WRVJXUklURTtcbn07XG4vKipcbiAqIFVzZWZ1bCBmdW5jdGlvbiB0aGF0IHJldHVybnMgYSB0ZXh0dXJlIG9mIHRoZSBkaXNwbGF5IG9iamVjdCB0aGF0IGNhbiB0aGVuIGJlIHVzZWQgdG8gY3JlYXRlIHNwcml0ZXNcbiAqIFRoaXMgY2FuIGJlIHF1aXRlIHVzZWZ1bCBpZiB5b3VyIGRpc3BsYXlPYmplY3QgaXMgc3RhdGljIC8gY29tcGxpY2F0ZWQgYW5kIG5lZWRzIHRvIGJlIHJldXNlZCBtdWx0aXBsZSB0aW1lcy5cbiAqXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuQ2FudmFzUmVuZGVyZXJ8UElYSS5XZWJHTFJlbmRlcmVyfSBUaGUgcmVuZGVyZXIgdXNlZCB0byBnZW5lcmF0ZSB0aGUgdGV4dHVyZS5cbiAqIEBwYXJhbSBzY2FsZU1vZGUge251bWJlcn0gU2VlIHtAbGluayBQSVhJLlNDQUxFX01PREVTfSBmb3IgcG9zc2libGUgdmFsdWVzXG4gKiBAcGFyYW0gcmVzb2x1dGlvbiB7bnVtYmVyfSBUaGUgcmVzb2x1dGlvbiBvZiB0aGUgdGV4dHVyZSBiZWluZyBnZW5lcmF0ZWRcbiAqIEByZXR1cm4ge1BJWEkuVGV4dHVyZX0gYSB0ZXh0dXJlIG9mIHRoZSBkaXNwbGF5IG9iamVjdFxuICovXG5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS5nZW5lcmF0ZVRleHR1cmUgPSBmdW5jdGlvbiAocmVuZGVyZXIsIHNjYWxlTW9kZSwgcmVzb2x1dGlvbilcbntcbiAgICB2YXIgYm91bmRzID0gdGhpcy5nZXRMb2NhbEJvdW5kcygpO1xuXG4gICAgdmFyIHJlbmRlclRleHR1cmUgPSBuZXcgUmVuZGVyVGV4dHVyZShyZW5kZXJlciwgYm91bmRzLndpZHRoIHwgMCwgYm91bmRzLmhlaWdodCB8IDAsIHNjYWxlTW9kZSwgcmVzb2x1dGlvbik7XG5cbiAgICBfdGVtcE1hdHJpeC50eCA9IC1ib3VuZHMueDtcbiAgICBfdGVtcE1hdHJpeC50eSA9IC1ib3VuZHMueTtcblxuICAgIHJlbmRlclRleHR1cmUucmVuZGVyKHRoaXMsIF90ZW1wTWF0cml4KTtcblxuICAgIHJldHVybiByZW5kZXJUZXh0dXJlO1xufTtcblxuLyoqXG4gKiBTZXQgdGhlIHBhcmVudCBDb250YWluZXIgb2YgdGhpcyBEaXNwbGF5T2JqZWN0XG4gKlxuICogQHBhcmFtIGNvbnRhaW5lciB7Q29udGFpbmVyfSBUaGUgQ29udGFpbmVyIHRvIGFkZCB0aGlzIERpc3BsYXlPYmplY3QgdG9cbiAqIEByZXR1cm4ge0NvbnRhaW5lcn0gVGhlIENvbnRhaW5lciB0aGF0IHRoaXMgRGlzcGxheU9iamVjdCB3YXMgYWRkZWQgdG9cbiAqL1xuRGlzcGxheU9iamVjdC5wcm90b3R5cGUuc2V0UGFyZW50ID0gZnVuY3Rpb24gKGNvbnRhaW5lcilcbntcbiAgICBpZiAoIWNvbnRhaW5lciB8fCAhY29udGFpbmVyLmFkZENoaWxkKVxuICAgIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdzZXRQYXJlbnQ6IEFyZ3VtZW50IG11c3QgYmUgYSBDb250YWluZXInKTtcbiAgICB9XG5cbiAgICBjb250YWluZXIuYWRkQ2hpbGQodGhpcyk7XG4gICAgcmV0dXJuIGNvbnRhaW5lcjtcbn07XG5cbi8qKlxuICogQ29udmVuaWVuY2UgZnVuY3Rpb24gdG8gc2V0IHRoZSBwb3N0aW9uLCBzY2FsZSwgc2tldyBhbmQgcGl2b3QgYXQgb25jZS5cbiAqXG4gKiBAcGFyYW0gW3g9MF0ge251bWJlcn0gVGhlIFggcG9zaXRpb25cbiAqIEBwYXJhbSBbeT0wXSB7bnVtYmVyfSBUaGUgWSBwb3NpdGlvblxuICogQHBhcmFtIFtzY2FsZVg9MV0ge251bWJlcn0gVGhlIFggc2NhbGUgdmFsdWVcbiAqIEBwYXJhbSBbc2NhbGVZPTFdIHtudW1iZXJ9IFRoZSBZIHNjYWxlIHZhbHVlXG4gKiBAcGFyYW0gW3JvdGF0aW9uPTBdIHtudW1iZXJ9IFRoZSByb3RhdGlvblxuICogQHBhcmFtIFtza2V3WD0wXSB7bnVtYmVyfSBUaGUgWCBza2V3IHZhbHVlXG4gKiBAcGFyYW0gW3NrZXdZPTBdIHtudW1iZXJ9IFRoZSBZIHNrZXcgdmFsdWVcbiAqIEBwYXJhbSBbcGl2b3RYPTBdIHtudW1iZXJ9IFRoZSBYIHBpdm90IHZhbHVlXG4gKiBAcGFyYW0gW3Bpdm90WT0wXSB7bnVtYmVyfSBUaGUgWSBwaXZvdCB2YWx1ZVxuICogQHJldHVybiB7UElYSS5EaXNwbGF5T2JqZWN0fVxuICovXG5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS5zZXRUcmFuc2Zvcm0gPSBmdW5jdGlvbih4LCB5LCBzY2FsZVgsIHNjYWxlWSwgcm90YXRpb24sIHNrZXdYLCBza2V3WSwgcGl2b3RYLCBwaXZvdFkpIC8vanNoaW50IGlnbm9yZTpsaW5lXG57XG4gICAgdGhpcy5wb3NpdGlvbi54ID0geCB8fCAwO1xuICAgIHRoaXMucG9zaXRpb24ueSA9IHkgfHwgMDtcbiAgICB0aGlzLnNjYWxlLnggPSAhc2NhbGVYID8gMSA6IHNjYWxlWDtcbiAgICB0aGlzLnNjYWxlLnkgPSAhc2NhbGVZID8gMSA6IHNjYWxlWTtcbiAgICB0aGlzLnJvdGF0aW9uID0gcm90YXRpb24gfHwgMDtcbiAgICB0aGlzLnNrZXcueCA9IHNrZXdYIHx8IDA7XG4gICAgdGhpcy5za2V3LnkgPSBza2V3WSB8fCAwO1xuICAgIHRoaXMucGl2b3QueCA9IHBpdm90WCB8fCAwO1xuICAgIHRoaXMucGl2b3QueSA9IHBpdm90WSB8fCAwO1xuICAgIHRoaXMuZGlydHlUcmFuc2Zvcm0gPSB0cnVlO1xuICAgIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBCYXNlIGRlc3Ryb3kgbWV0aG9kIGZvciBnZW5lcmljIGRpc3BsYXkgb2JqZWN0c1xuICpcbiAqL1xuRGlzcGxheU9iamVjdC5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uICgpXG57XG5cbiAgICB0aGlzLnBvc2l0aW9uID0gbnVsbDtcbiAgICB0aGlzLnNjYWxlID0gbnVsbDtcbiAgICB0aGlzLnBpdm90ID0gbnVsbDtcbiAgICB0aGlzLnNrZXcgPSBudWxsO1xuXG4gICAgdGhpcy5wYXJlbnQgPSBudWxsO1xuXG4gICAgdGhpcy5fYm91bmRzID0gbnVsbDtcbiAgICB0aGlzLl9jdXJyZW50Qm91bmRzID0gbnVsbDtcbiAgICB0aGlzLl9tYXNrID0gbnVsbDtcblxuICAgIHRoaXMud29ybGRUcmFuc2Zvcm0gPSBudWxsO1xuICAgIHRoaXMuZmlsdGVyQXJlYSA9IG51bGw7XG59O1xuIiwidmFyIENvbnRhaW5lciA9IHJlcXVpcmUoJy4uL2Rpc3BsYXkvQ29udGFpbmVyJyksXG4gICAgVGV4dHVyZSA9IHJlcXVpcmUoJy4uL3RleHR1cmVzL1RleHR1cmUnKSxcbiAgICBDYW52YXNCdWZmZXIgPSByZXF1aXJlKCcuLi9yZW5kZXJlcnMvY2FudmFzL3V0aWxzL0NhbnZhc0J1ZmZlcicpLFxuICAgIENhbnZhc0dyYXBoaWNzID0gcmVxdWlyZSgnLi4vcmVuZGVyZXJzL2NhbnZhcy91dGlscy9DYW52YXNHcmFwaGljcycpLFxuICAgIEdyYXBoaWNzRGF0YSA9IHJlcXVpcmUoJy4vR3JhcGhpY3NEYXRhJyksXG4gICAgbWF0aCA9IHJlcXVpcmUoJy4uL21hdGgnKSxcbiAgICBDT05TVCA9IHJlcXVpcmUoJy4uL2NvbnN0JyksXG4gICAgdGVtcFBvaW50ID0gbmV3IG1hdGguUG9pbnQoKTtcblxuLyoqXG4gKiBUaGUgR3JhcGhpY3MgY2xhc3MgY29udGFpbnMgbWV0aG9kcyB1c2VkIHRvIGRyYXcgcHJpbWl0aXZlIHNoYXBlcyBzdWNoIGFzIGxpbmVzLCBjaXJjbGVzIGFuZFxuICogcmVjdGFuZ2xlcyB0byB0aGUgZGlzcGxheSwgYW5kIHRvIGNvbG9yIGFuZCBmaWxsIHRoZW0uXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLkNvbnRhaW5lclxuICogQG1lbWJlcm9mIFBJWElcbiAqL1xuZnVuY3Rpb24gR3JhcGhpY3MoKVxue1xuICAgIENvbnRhaW5lci5jYWxsKHRoaXMpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGFscGhhIHZhbHVlIHVzZWQgd2hlbiBmaWxsaW5nIHRoZSBHcmFwaGljcyBvYmplY3QuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMVxuICAgICAqL1xuICAgIHRoaXMuZmlsbEFscGhhID0gMTtcblxuICAgIC8qKlxuICAgICAqIFRoZSB3aWR0aCAodGhpY2tuZXNzKSBvZiBhbnkgbGluZXMgZHJhd24uXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMFxuICAgICAqL1xuICAgIHRoaXMubGluZVdpZHRoID0gMDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBjb2xvciBvZiBhbnkgbGluZXMgZHJhd24uXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtzdHJpbmd9XG4gICAgICogQGRlZmF1bHQgMFxuICAgICAqL1xuICAgIHRoaXMubGluZUNvbG9yID0gMDtcblxuICAgIC8qKlxuICAgICAqIEdyYXBoaWNzIGRhdGFcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuR3JhcGhpY3NEYXRhW119XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLmdyYXBoaWNzRGF0YSA9IFtdO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHRpbnQgYXBwbGllZCB0byB0aGUgZ3JhcGhpYyBzaGFwZS4gVGhpcyBpcyBhIGhleCB2YWx1ZS4gQXBwbHkgYSB2YWx1ZSBvZiAweEZGRkZGRiB0byByZXNldCB0aGUgdGludC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAweEZGRkZGRlxuICAgICAqL1xuICAgIHRoaXMudGludCA9IDB4RkZGRkZGO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHByZXZpb3VzIHRpbnQgYXBwbGllZCB0byB0aGUgZ3JhcGhpYyBzaGFwZS4gVXNlZCB0byBjb21wYXJlIHRvIHRoZSBjdXJyZW50IHRpbnQgYW5kIGNoZWNrIGlmIHRoZXJlcyBjaGFuZ2UuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAZGVmYXVsdCAweEZGRkZGRlxuICAgICAqL1xuICAgIHRoaXMuX3ByZXZUaW50ID0gMHhGRkZGRkY7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYmxlbmQgbW9kZSB0byBiZSBhcHBsaWVkIHRvIHRoZSBncmFwaGljIHNoYXBlLiBBcHBseSBhIHZhbHVlIG9mIGBQSVhJLkJMRU5EX01PREVTLk5PUk1BTGAgdG8gcmVzZXQgdGhlIGJsZW5kIG1vZGUuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgUElYSS5CTEVORF9NT0RFUy5OT1JNQUw7XG4gICAgICogQHNlZSBQSVhJLkJMRU5EX01PREVTXG4gICAgICovXG4gICAgdGhpcy5ibGVuZE1vZGUgPSBDT05TVC5CTEVORF9NT0RFUy5OT1JNQUw7XG5cbiAgICAvKipcbiAgICAgKiBDdXJyZW50IHBhdGhcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuR3JhcGhpY3NEYXRhfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5jdXJyZW50UGF0aCA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBBcnJheSBjb250YWluaW5nIHNvbWUgV2ViR0wtcmVsYXRlZCBwcm9wZXJ0aWVzIHVzZWQgYnkgdGhlIFdlYkdMIHJlbmRlcmVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7b2JqZWN0PG51bWJlciwgb2JqZWN0Pn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIC8vIFRPRE8gLSBfd2ViZ2wgc2hvdWxkIHVzZSBhIHByb3RvdHlwZSBvYmplY3QsIG5vdCBhIHJhbmRvbSB1bmRvY3VtZW50ZWQgb2JqZWN0Li4uXG4gICAgdGhpcy5fd2ViR0wgPSB7fTtcblxuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgdGhpcyBzaGFwZSBpcyBiZWluZyB1c2VkIGFzIGEgbWFzay5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICovXG4gICAgdGhpcy5pc01hc2sgPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBib3VuZHMnIHBhZGRpbmcgdXNlZCBmb3IgYm91bmRzIGNhbGN1bGF0aW9uLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMuYm91bmRzUGFkZGluZyA9IDA7XG5cbiAgICAvKipcbiAgICAgKiBBIGNhY2hlIG9mIHRoZSBsb2NhbCBib3VuZHMgdG8gcHJldmVudCByZWNhbGN1bGF0aW9uLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5SZWN0YW5nbGV9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9sb2NhbEJvdW5kcyA9IG5ldyBtYXRoLlJlY3RhbmdsZSgwLDAsMSwxKTtcblxuICAgIC8qKlxuICAgICAqIFVzZWQgdG8gZGV0ZWN0IGlmIHRoZSBncmFwaGljcyBvYmplY3QgaGFzIGNoYW5nZWQuIElmIHRoaXMgaXMgc2V0IHRvIHRydWUgdGhlbiB0aGUgZ3JhcGhpY3NcbiAgICAgKiBvYmplY3Qgd2lsbCBiZSByZWNhbGN1bGF0ZWQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5kaXJ0eSA9IHRydWU7XG5cbiAgICAvKipcbiAgICAgKiBVc2VkIHRvIGRldGVjdCBpZiB0aGUgV2ViR0wgZ3JhcGhpY3Mgb2JqZWN0IGhhcyBjaGFuZ2VkLiBJZiB0aGlzIGlzIHNldCB0byB0cnVlIHRoZW4gdGhlXG4gICAgICogZ3JhcGhpY3Mgb2JqZWN0IHdpbGwgYmUgcmVjYWxjdWxhdGVkLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuZ2xEaXJ0eSA9IGZhbHNlO1xuXG4gICAgdGhpcy5ib3VuZHNEaXJ0eSA9IHRydWU7XG5cbiAgICAvKipcbiAgICAgKiBVc2VkIHRvIGRldGVjdCBpZiB0aGUgY2FjaGVkIHNwcml0ZSBvYmplY3QgbmVlZHMgdG8gYmUgdXBkYXRlZC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLmNhY2hlZFNwcml0ZURpcnR5ID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBXaGVuIGNhY2hlQXNCaXRtYXAgaXMgc2V0IHRvIHRydWUgdGhlIGdyYXBoaWNzIG9iamVjdCB3aWxsIGJlIHJlbmRlcmVkIGFzIGlmIGl0IHdhcyBhIHNwcml0ZS5cbiAgICAgKiBUaGlzIGlzIHVzZWZ1bCBpZiB5b3VyIGdyYXBoaWNzIGVsZW1lbnQgZG9lcyBub3QgY2hhbmdlIG9mdGVuLCBhcyBpdCB3aWxsIHNwZWVkIHVwIHRoZSByZW5kZXJpbmdcbiAgICAgKiBvZiB0aGUgb2JqZWN0IGluIGV4Y2hhbmdlIGZvciB0YWtpbmcgdXAgdGV4dHVyZSBtZW1vcnkuIEl0IGlzIGFsc28gdXNlZnVsIGlmIHlvdSBuZWVkIHRoZSBncmFwaGljc1xuICAgICAqIG9iamVjdCB0byBiZSBhbnRpLWFsaWFzZWQsIGJlY2F1c2UgaXQgd2lsbCBiZSByZW5kZXJlZCB1c2luZyBjYW52YXMuIFRoaXMgaXMgbm90IHJlY29tbWVuZGVkIGlmXG4gICAgICogeW91IGFyZSBjb25zdGFudGx5IHJlZHJhd2luZyB0aGUgZ3JhcGhpY3MgZWxlbWVudC5cbiAgICAgKlxuICAgICAqIEBuYW1lIGNhY2hlQXNCaXRtYXBcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLkdyYXBoaWNzI1xuICAgICAqIEBkZWZhdWx0IGZhbHNlXG4gICAgICovXG59XG5cbi8vIGNvbnN0cnVjdG9yXG5HcmFwaGljcy5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKENvbnRhaW5lci5wcm90b3R5cGUpO1xuR3JhcGhpY3MucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gR3JhcGhpY3M7XG5tb2R1bGUuZXhwb3J0cyA9IEdyYXBoaWNzO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBuZXcgR3JhcGhpY3Mgb2JqZWN0IHdpdGggdGhlIHNhbWUgdmFsdWVzIGFzIHRoaXMgb25lLlxuICogTm90ZSB0aGF0IHRoZSBvbmx5IHRoZSBwcm9wZXJ0aWVzIG9mIHRoZSBvYmplY3QgYXJlIGNsb25lZCwgbm90IGl0cyB0cmFuc2Zvcm0gKHBvc2l0aW9uLHNjYWxlLGV0YylcbiAqXG4gKiBAcmV0dXJuIHtQSVhJLkdyYXBoaWNzfVxuICovXG5HcmFwaGljcy5wcm90b3R5cGUuY2xvbmUgPSBmdW5jdGlvbiAoKVxue1xuICAgIHZhciBjbG9uZSA9IG5ldyBHcmFwaGljcygpO1xuXG4gICAgY2xvbmUucmVuZGVyYWJsZSAgICA9IHRoaXMucmVuZGVyYWJsZTtcbiAgICBjbG9uZS5maWxsQWxwaGEgICAgID0gdGhpcy5maWxsQWxwaGE7XG4gICAgY2xvbmUubGluZVdpZHRoICAgICA9IHRoaXMubGluZVdpZHRoO1xuICAgIGNsb25lLmxpbmVDb2xvciAgICAgPSB0aGlzLmxpbmVDb2xvcjtcbiAgICBjbG9uZS50aW50ICAgICAgICAgID0gdGhpcy50aW50O1xuICAgIGNsb25lLmJsZW5kTW9kZSAgICAgPSB0aGlzLmJsZW5kTW9kZTtcbiAgICBjbG9uZS5pc01hc2sgICAgICAgID0gdGhpcy5pc01hc2s7XG4gICAgY2xvbmUuYm91bmRzUGFkZGluZyA9IHRoaXMuYm91bmRzUGFkZGluZztcbiAgICBjbG9uZS5kaXJ0eSAgICAgICAgID0gdHJ1ZTtcbiAgICBjbG9uZS5nbERpcnR5ICAgICAgID0gdHJ1ZTtcbiAgICBjbG9uZS5jYWNoZWRTcHJpdGVEaXJ0eSA9IHRoaXMuY2FjaGVkU3ByaXRlRGlydHk7XG5cbiAgICAvLyBjb3B5IGdyYXBoaWNzIGRhdGFcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuZ3JhcGhpY3NEYXRhLmxlbmd0aDsgKytpKVxuICAgIHtcbiAgICAgICAgY2xvbmUuZ3JhcGhpY3NEYXRhLnB1c2godGhpcy5ncmFwaGljc0RhdGFbaV0uY2xvbmUoKSk7XG4gICAgfVxuXG4gICAgY2xvbmUuY3VycmVudFBhdGggPSBjbG9uZS5ncmFwaGljc0RhdGFbY2xvbmUuZ3JhcGhpY3NEYXRhLmxlbmd0aCAtIDFdO1xuXG4gICAgY2xvbmUudXBkYXRlTG9jYWxCb3VuZHMoKTtcblxuICAgIHJldHVybiBjbG9uZTtcbn07XG5cbi8qKlxuICogU3BlY2lmaWVzIHRoZSBsaW5lIHN0eWxlIHVzZWQgZm9yIHN1YnNlcXVlbnQgY2FsbHMgdG8gR3JhcGhpY3MgbWV0aG9kcyBzdWNoIGFzIHRoZSBsaW5lVG8oKSBtZXRob2Qgb3IgdGhlIGRyYXdDaXJjbGUoKSBtZXRob2QuXG4gKlxuICogQHBhcmFtIGxpbmVXaWR0aCB7bnVtYmVyfSB3aWR0aCBvZiB0aGUgbGluZSB0byBkcmF3LCB3aWxsIHVwZGF0ZSB0aGUgb2JqZWN0cyBzdG9yZWQgc3R5bGVcbiAqIEBwYXJhbSBjb2xvciB7bnVtYmVyfSBjb2xvciBvZiB0aGUgbGluZSB0byBkcmF3LCB3aWxsIHVwZGF0ZSB0aGUgb2JqZWN0cyBzdG9yZWQgc3R5bGVcbiAqIEBwYXJhbSBhbHBoYSB7bnVtYmVyfSBhbHBoYSBvZiB0aGUgbGluZSB0byBkcmF3LCB3aWxsIHVwZGF0ZSB0aGUgb2JqZWN0cyBzdG9yZWQgc3R5bGVcbiAqIEByZXR1cm4ge1BJWEkuR3JhcGhpY3N9XG4gKi9cbkdyYXBoaWNzLnByb3RvdHlwZS5saW5lU3R5bGUgPSBmdW5jdGlvbiAobGluZVdpZHRoLCBjb2xvciwgYWxwaGEpXG57XG4gICAgdGhpcy5saW5lV2lkdGggPSBsaW5lV2lkdGggfHwgMDtcbiAgICB0aGlzLmxpbmVDb2xvciA9IGNvbG9yIHx8IDA7XG4gICAgdGhpcy5saW5lQWxwaGEgPSAoYWxwaGEgPT09IHVuZGVmaW5lZCkgPyAxIDogYWxwaGE7XG5cbiAgICBpZiAodGhpcy5jdXJyZW50UGF0aClcbiAgICB7XG4gICAgICAgIGlmICh0aGlzLmN1cnJlbnRQYXRoLnNoYXBlLnBvaW50cy5sZW5ndGgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIC8vIGhhbGZ3YXkgdGhyb3VnaCBhIGxpbmU/IHN0YXJ0IGEgbmV3IG9uZSFcbiAgICAgICAgICAgIHZhciBzaGFwZSA9IG5ldyBtYXRoLlBvbHlnb24odGhpcy5jdXJyZW50UGF0aC5zaGFwZS5wb2ludHMuc2xpY2UoLTIpKTtcbiAgICAgICAgICAgIHNoYXBlLmNsb3NlZCA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5kcmF3U2hhcGUoc2hhcGUpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2VcbiAgICAgICAge1xuICAgICAgICAgICAgLy8gb3RoZXJ3aXNlIGl0cyBlbXB0eSBzbyBsZXRzIGp1c3Qgc2V0IHRoZSBsaW5lIHByb3BlcnRpZXNcbiAgICAgICAgICAgIHRoaXMuY3VycmVudFBhdGgubGluZVdpZHRoID0gdGhpcy5saW5lV2lkdGg7XG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRQYXRoLmxpbmVDb2xvciA9IHRoaXMubGluZUNvbG9yO1xuICAgICAgICAgICAgdGhpcy5jdXJyZW50UGF0aC5saW5lQWxwaGEgPSB0aGlzLmxpbmVBbHBoYTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBNb3ZlcyB0aGUgY3VycmVudCBkcmF3aW5nIHBvc2l0aW9uIHRvIHgsIHkuXG4gKlxuICogQHBhcmFtIHgge251bWJlcn0gdGhlIFggY29vcmRpbmF0ZSB0byBtb3ZlIHRvXG4gKiBAcGFyYW0geSB7bnVtYmVyfSB0aGUgWSBjb29yZGluYXRlIHRvIG1vdmUgdG9cbiAqIEByZXR1cm4ge1BJWEkuR3JhcGhpY3N9XG4gICovXG5HcmFwaGljcy5wcm90b3R5cGUubW92ZVRvID0gZnVuY3Rpb24gKHgsIHkpXG57XG4gICAgdmFyIHNoYXBlID0gbmV3IG1hdGguUG9seWdvbihbeCx5XSk7XG4gICAgc2hhcGUuY2xvc2VkID0gZmFsc2U7XG4gICAgdGhpcy5kcmF3U2hhcGUoc2hhcGUpO1xuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIERyYXdzIGEgbGluZSB1c2luZyB0aGUgY3VycmVudCBsaW5lIHN0eWxlIGZyb20gdGhlIGN1cnJlbnQgZHJhd2luZyBwb3NpdGlvbiB0byAoeCwgeSk7XG4gKiBUaGUgY3VycmVudCBkcmF3aW5nIHBvc2l0aW9uIGlzIHRoZW4gc2V0IHRvICh4LCB5KS5cbiAqXG4gKiBAcGFyYW0geCB7bnVtYmVyfSB0aGUgWCBjb29yZGluYXRlIHRvIGRyYXcgdG9cbiAqIEBwYXJhbSB5IHtudW1iZXJ9IHRoZSBZIGNvb3JkaW5hdGUgdG8gZHJhdyB0b1xuICogQHJldHVybiB7UElYSS5HcmFwaGljc31cbiAqL1xuR3JhcGhpY3MucHJvdG90eXBlLmxpbmVUbyA9IGZ1bmN0aW9uICh4LCB5KVxue1xuICAgIHRoaXMuY3VycmVudFBhdGguc2hhcGUucG9pbnRzLnB1c2goeCwgeSk7XG4gICAgdGhpcy5kaXJ0eSA9IHRydWU7XG5cbiAgICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogQ2FsY3VsYXRlIHRoZSBwb2ludHMgZm9yIGEgcXVhZHJhdGljIGJlemllciBjdXJ2ZSBhbmQgdGhlbiBkcmF3cyBpdC5cbiAqIEJhc2VkIG9uOiBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy83ODUwOTcvaG93LWRvLWktaW1wbGVtZW50LWEtYmV6aWVyLWN1cnZlLWluLWNcbiAqXG4gKiBAcGFyYW0gY3BYIHtudW1iZXJ9IENvbnRyb2wgcG9pbnQgeFxuICogQHBhcmFtIGNwWSB7bnVtYmVyfSBDb250cm9sIHBvaW50IHlcbiAqIEBwYXJhbSB0b1gge251bWJlcn0gRGVzdGluYXRpb24gcG9pbnQgeFxuICogQHBhcmFtIHRvWSB7bnVtYmVyfSBEZXN0aW5hdGlvbiBwb2ludCB5XG4gKiBAcmV0dXJuIHtQSVhJLkdyYXBoaWNzfVxuICovXG5HcmFwaGljcy5wcm90b3R5cGUucXVhZHJhdGljQ3VydmVUbyA9IGZ1bmN0aW9uIChjcFgsIGNwWSwgdG9YLCB0b1kpXG57XG4gICAgaWYgKHRoaXMuY3VycmVudFBhdGgpXG4gICAge1xuICAgICAgICBpZiAodGhpcy5jdXJyZW50UGF0aC5zaGFwZS5wb2ludHMubGVuZ3RoID09PSAwKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRQYXRoLnNoYXBlLnBvaW50cyA9IFswLCAwXTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICB0aGlzLm1vdmVUbygwLDApO1xuICAgIH1cblxuICAgIHZhciB4YSxcbiAgICAgICAgeWEsXG4gICAgICAgIG4gPSAyMCxcbiAgICAgICAgcG9pbnRzID0gdGhpcy5jdXJyZW50UGF0aC5zaGFwZS5wb2ludHM7XG5cbiAgICBpZiAocG9pbnRzLmxlbmd0aCA9PT0gMClcbiAgICB7XG4gICAgICAgIHRoaXMubW92ZVRvKDAsIDApO1xuICAgIH1cblxuICAgIHZhciBmcm9tWCA9IHBvaW50c1twb2ludHMubGVuZ3RoLTJdO1xuICAgIHZhciBmcm9tWSA9IHBvaW50c1twb2ludHMubGVuZ3RoLTFdO1xuXG4gICAgdmFyIGogPSAwO1xuICAgIGZvciAodmFyIGkgPSAxOyBpIDw9IG47ICsraSlcbiAgICB7XG4gICAgICAgIGogPSBpIC8gbjtcblxuICAgICAgICB4YSA9IGZyb21YICsgKCAoY3BYIC0gZnJvbVgpICogaiApO1xuICAgICAgICB5YSA9IGZyb21ZICsgKCAoY3BZIC0gZnJvbVkpICogaiApO1xuXG4gICAgICAgIHBvaW50cy5wdXNoKCB4YSArICggKChjcFggKyAoICh0b1ggLSBjcFgpICogaiApKSAtIHhhKSAqIGogKSxcbiAgICAgICAgICAgICAgICAgICAgIHlhICsgKCAoKGNwWSArICggKHRvWSAtIGNwWSkgKiBqICkpIC0geWEpICogaiApICk7XG4gICAgfVxuXG4gICAgdGhpcy5kaXJ0eSA9IHRoaXMuYm91bmRzRGlydHkgPSB0cnVlO1xuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIENhbGN1bGF0ZSB0aGUgcG9pbnRzIGZvciBhIGJlemllciBjdXJ2ZSBhbmQgdGhlbiBkcmF3cyBpdC5cbiAqXG4gKiBAcGFyYW0gY3BYIHtudW1iZXJ9IENvbnRyb2wgcG9pbnQgeFxuICogQHBhcmFtIGNwWSB7bnVtYmVyfSBDb250cm9sIHBvaW50IHlcbiAqIEBwYXJhbSBjcFgyIHtudW1iZXJ9IFNlY29uZCBDb250cm9sIHBvaW50IHhcbiAqIEBwYXJhbSBjcFkyIHtudW1iZXJ9IFNlY29uZCBDb250cm9sIHBvaW50IHlcbiAqIEBwYXJhbSB0b1gge251bWJlcn0gRGVzdGluYXRpb24gcG9pbnQgeFxuICogQHBhcmFtIHRvWSB7bnVtYmVyfSBEZXN0aW5hdGlvbiBwb2ludCB5XG4gKiBAcmV0dXJuIHtQSVhJLkdyYXBoaWNzfVxuICovXG5HcmFwaGljcy5wcm90b3R5cGUuYmV6aWVyQ3VydmVUbyA9IGZ1bmN0aW9uIChjcFgsIGNwWSwgY3BYMiwgY3BZMiwgdG9YLCB0b1kpXG57XG4gICAgaWYgKHRoaXMuY3VycmVudFBhdGgpXG4gICAge1xuICAgICAgICBpZiAodGhpcy5jdXJyZW50UGF0aC5zaGFwZS5wb2ludHMubGVuZ3RoID09PSAwKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRQYXRoLnNoYXBlLnBvaW50cyA9IFswLCAwXTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICB0aGlzLm1vdmVUbygwLDApO1xuICAgIH1cblxuICAgIHZhciBuID0gMjAsXG4gICAgICAgIGR0LFxuICAgICAgICBkdDIsXG4gICAgICAgIGR0MyxcbiAgICAgICAgdDIsXG4gICAgICAgIHQzLFxuICAgICAgICBwb2ludHMgPSB0aGlzLmN1cnJlbnRQYXRoLnNoYXBlLnBvaW50cztcblxuICAgIHZhciBmcm9tWCA9IHBvaW50c1twb2ludHMubGVuZ3RoLTJdO1xuICAgIHZhciBmcm9tWSA9IHBvaW50c1twb2ludHMubGVuZ3RoLTFdO1xuXG4gICAgdmFyIGogPSAwO1xuXG4gICAgZm9yICh2YXIgaSA9IDE7IGkgPD0gbjsgKytpKVxuICAgIHtcbiAgICAgICAgaiA9IGkgLyBuO1xuXG4gICAgICAgIGR0ID0gKDEgLSBqKTtcbiAgICAgICAgZHQyID0gZHQgKiBkdDtcbiAgICAgICAgZHQzID0gZHQyICogZHQ7XG5cbiAgICAgICAgdDIgPSBqICogajtcbiAgICAgICAgdDMgPSB0MiAqIGo7XG5cbiAgICAgICAgcG9pbnRzLnB1c2goIGR0MyAqIGZyb21YICsgMyAqIGR0MiAqIGogKiBjcFggKyAzICogZHQgKiB0MiAqIGNwWDIgKyB0MyAqIHRvWCxcbiAgICAgICAgICAgICAgICAgICAgIGR0MyAqIGZyb21ZICsgMyAqIGR0MiAqIGogKiBjcFkgKyAzICogZHQgKiB0MiAqIGNwWTIgKyB0MyAqIHRvWSk7XG4gICAgfVxuXG4gICAgdGhpcy5kaXJ0eSA9IHRoaXMuYm91bmRzRGlydHkgPSB0cnVlO1xuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIFRoZSBhcmNUbygpIG1ldGhvZCBjcmVhdGVzIGFuIGFyYy9jdXJ2ZSBiZXR3ZWVuIHR3byB0YW5nZW50cyBvbiB0aGUgY2FudmFzLlxuICpcbiAqIFwiYm9ycm93ZWRcIiBmcm9tIGh0dHBzOi8vY29kZS5nb29nbGUuY29tL3AvZnhjYW52YXMvIC0gdGhhbmtzIGdvb2dsZSFcbiAqXG4gKiBAcGFyYW0geDEge251bWJlcn0gVGhlIHgtY29vcmRpbmF0ZSBvZiB0aGUgYmVnaW5uaW5nIG9mIHRoZSBhcmNcbiAqIEBwYXJhbSB5MSB7bnVtYmVyfSBUaGUgeS1jb29yZGluYXRlIG9mIHRoZSBiZWdpbm5pbmcgb2YgdGhlIGFyY1xuICogQHBhcmFtIHgyIHtudW1iZXJ9IFRoZSB4LWNvb3JkaW5hdGUgb2YgdGhlIGVuZCBvZiB0aGUgYXJjXG4gKiBAcGFyYW0geTIge251bWJlcn0gVGhlIHktY29vcmRpbmF0ZSBvZiB0aGUgZW5kIG9mIHRoZSBhcmNcbiAqIEBwYXJhbSByYWRpdXMge251bWJlcn0gVGhlIHJhZGl1cyBvZiB0aGUgYXJjXG4gKiBAcmV0dXJuIHtQSVhJLkdyYXBoaWNzfVxuICovXG5HcmFwaGljcy5wcm90b3R5cGUuYXJjVG8gPSBmdW5jdGlvbiAoeDEsIHkxLCB4MiwgeTIsIHJhZGl1cylcbntcbiAgICBpZiAodGhpcy5jdXJyZW50UGF0aClcbiAgICB7XG4gICAgICAgIGlmICh0aGlzLmN1cnJlbnRQYXRoLnNoYXBlLnBvaW50cy5sZW5ndGggPT09IDApXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuY3VycmVudFBhdGguc2hhcGUucG9pbnRzLnB1c2goeDEsIHkxKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICB0aGlzLm1vdmVUbyh4MSwgeTEpO1xuICAgIH1cblxuICAgIHZhciBwb2ludHMgPSB0aGlzLmN1cnJlbnRQYXRoLnNoYXBlLnBvaW50cyxcbiAgICAgICAgZnJvbVggPSBwb2ludHNbcG9pbnRzLmxlbmd0aC0yXSxcbiAgICAgICAgZnJvbVkgPSBwb2ludHNbcG9pbnRzLmxlbmd0aC0xXSxcbiAgICAgICAgYTEgPSBmcm9tWSAtIHkxLFxuICAgICAgICBiMSA9IGZyb21YIC0geDEsXG4gICAgICAgIGEyID0geTIgICAtIHkxLFxuICAgICAgICBiMiA9IHgyICAgLSB4MSxcbiAgICAgICAgbW0gPSBNYXRoLmFicyhhMSAqIGIyIC0gYjEgKiBhMik7XG5cbiAgICBpZiAobW0gPCAxLjBlLTggfHwgcmFkaXVzID09PSAwKVxuICAgIHtcbiAgICAgICAgaWYgKHBvaW50c1twb2ludHMubGVuZ3RoLTJdICE9PSB4MSB8fCBwb2ludHNbcG9pbnRzLmxlbmd0aC0xXSAhPT0geTEpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHBvaW50cy5wdXNoKHgxLCB5MSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgdmFyIGRkID0gYTEgKiBhMSArIGIxICogYjEsXG4gICAgICAgICAgICBjYyA9IGEyICogYTIgKyBiMiAqIGIyLFxuICAgICAgICAgICAgdHQgPSBhMSAqIGEyICsgYjEgKiBiMixcbiAgICAgICAgICAgIGsxID0gcmFkaXVzICogTWF0aC5zcXJ0KGRkKSAvIG1tLFxuICAgICAgICAgICAgazIgPSByYWRpdXMgKiBNYXRoLnNxcnQoY2MpIC8gbW0sXG4gICAgICAgICAgICBqMSA9IGsxICogdHQgLyBkZCxcbiAgICAgICAgICAgIGoyID0gazIgKiB0dCAvIGNjLFxuICAgICAgICAgICAgY3ggPSBrMSAqIGIyICsgazIgKiBiMSxcbiAgICAgICAgICAgIGN5ID0gazEgKiBhMiArIGsyICogYTEsXG4gICAgICAgICAgICBweCA9IGIxICogKGsyICsgajEpLFxuICAgICAgICAgICAgcHkgPSBhMSAqIChrMiArIGoxKSxcbiAgICAgICAgICAgIHF4ID0gYjIgKiAoazEgKyBqMiksXG4gICAgICAgICAgICBxeSA9IGEyICogKGsxICsgajIpLFxuICAgICAgICAgICAgc3RhcnRBbmdsZSA9IE1hdGguYXRhbjIocHkgLSBjeSwgcHggLSBjeCksXG4gICAgICAgICAgICBlbmRBbmdsZSAgID0gTWF0aC5hdGFuMihxeSAtIGN5LCBxeCAtIGN4KTtcblxuICAgICAgICB0aGlzLmFyYyhjeCArIHgxLCBjeSArIHkxLCByYWRpdXMsIHN0YXJ0QW5nbGUsIGVuZEFuZ2xlLCBiMSAqIGEyID4gYjIgKiBhMSk7XG4gICAgfVxuXG4gICAgdGhpcy5kaXJ0eSA9IHRoaXMuYm91bmRzRGlydHkgPSB0cnVlO1xuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIFRoZSBhcmMgbWV0aG9kIGNyZWF0ZXMgYW4gYXJjL2N1cnZlICh1c2VkIHRvIGNyZWF0ZSBjaXJjbGVzLCBvciBwYXJ0cyBvZiBjaXJjbGVzKS5cbiAqXG4gKiBAcGFyYW0gY3gge251bWJlcn0gVGhlIHgtY29vcmRpbmF0ZSBvZiB0aGUgY2VudGVyIG9mIHRoZSBjaXJjbGVcbiAqIEBwYXJhbSBjeSB7bnVtYmVyfSBUaGUgeS1jb29yZGluYXRlIG9mIHRoZSBjZW50ZXIgb2YgdGhlIGNpcmNsZVxuICogQHBhcmFtIHJhZGl1cyB7bnVtYmVyfSBUaGUgcmFkaXVzIG9mIHRoZSBjaXJjbGVcbiAqIEBwYXJhbSBzdGFydEFuZ2xlIHtudW1iZXJ9IFRoZSBzdGFydGluZyBhbmdsZSwgaW4gcmFkaWFucyAoMCBpcyBhdCB0aGUgMyBvJ2Nsb2NrIHBvc2l0aW9uIG9mIHRoZSBhcmMncyBjaXJjbGUpXG4gKiBAcGFyYW0gZW5kQW5nbGUge251bWJlcn0gVGhlIGVuZGluZyBhbmdsZSwgaW4gcmFkaWFuc1xuICogQHBhcmFtIGFudGljbG9ja3dpc2Uge2Jvb2xlYW59IE9wdGlvbmFsLiBTcGVjaWZpZXMgd2hldGhlciB0aGUgZHJhd2luZyBzaG91bGQgYmUgY291bnRlcmNsb2Nrd2lzZSBvciBjbG9ja3dpc2UuIEZhbHNlIGlzIGRlZmF1bHQsIGFuZCBpbmRpY2F0ZXMgY2xvY2t3aXNlLCB3aGlsZSB0cnVlIGluZGljYXRlcyBjb3VudGVyLWNsb2Nrd2lzZS5cbiAqIEByZXR1cm4ge1BJWEkuR3JhcGhpY3N9XG4gKi9cbkdyYXBoaWNzLnByb3RvdHlwZS5hcmMgPSBmdW5jdGlvbihjeCwgY3ksIHJhZGl1cywgc3RhcnRBbmdsZSwgZW5kQW5nbGUsIGFudGljbG9ja3dpc2UpXG57XG4gICAgYW50aWNsb2Nrd2lzZSA9IGFudGljbG9ja3dpc2UgfHwgZmFsc2U7XG5cbiAgICBpZiAoc3RhcnRBbmdsZSA9PT0gZW5kQW5nbGUpXG4gICAge1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBpZiggIWFudGljbG9ja3dpc2UgJiYgZW5kQW5nbGUgPD0gc3RhcnRBbmdsZSApXG4gICAge1xuICAgICAgICBlbmRBbmdsZSArPSBNYXRoLlBJICogMjtcbiAgICB9XG4gICAgZWxzZSBpZiggYW50aWNsb2Nrd2lzZSAmJiBzdGFydEFuZ2xlIDw9IGVuZEFuZ2xlIClcbiAgICB7XG4gICAgICAgIHN0YXJ0QW5nbGUgKz0gTWF0aC5QSSAqIDI7XG4gICAgfVxuXG4gICAgdmFyIHN3ZWVwID0gYW50aWNsb2Nrd2lzZSA/IChzdGFydEFuZ2xlIC0gZW5kQW5nbGUpICogLTEgOiAoZW5kQW5nbGUgLSBzdGFydEFuZ2xlKTtcbiAgICB2YXIgc2VncyA9ICBNYXRoLmNlaWwoTWF0aC5hYnMoc3dlZXApIC8gKE1hdGguUEkgKiAyKSkgKiA0MDtcblxuICAgIGlmKHN3ZWVwID09PSAwKVxuICAgIHtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgdmFyIHN0YXJ0WCA9IGN4ICsgTWF0aC5jb3Moc3RhcnRBbmdsZSkgKiByYWRpdXM7XG4gICAgdmFyIHN0YXJ0WSA9IGN5ICsgTWF0aC5zaW4oc3RhcnRBbmdsZSkgKiByYWRpdXM7XG5cbiAgICBpZiAodGhpcy5jdXJyZW50UGF0aClcbiAgICB7XG4gICAgICAgIHRoaXMuY3VycmVudFBhdGguc2hhcGUucG9pbnRzLnB1c2goc3RhcnRYLCBzdGFydFkpO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICB0aGlzLm1vdmVUbyhzdGFydFgsIHN0YXJ0WSk7XG4gICAgfVxuXG4gICAgdmFyIHBvaW50cyA9IHRoaXMuY3VycmVudFBhdGguc2hhcGUucG9pbnRzO1xuXG4gICAgdmFyIHRoZXRhID0gc3dlZXAvKHNlZ3MqMik7XG4gICAgdmFyIHRoZXRhMiA9IHRoZXRhKjI7XG5cbiAgICB2YXIgY1RoZXRhID0gTWF0aC5jb3ModGhldGEpO1xuICAgIHZhciBzVGhldGEgPSBNYXRoLnNpbih0aGV0YSk7XG5cbiAgICB2YXIgc2VnTWludXMgPSBzZWdzIC0gMTtcblxuICAgIHZhciByZW1haW5kZXIgPSAoIHNlZ01pbnVzICUgMSApIC8gc2VnTWludXM7XG5cbiAgICBmb3IodmFyIGk9MDsgaTw9c2VnTWludXM7IGkrKylcbiAgICB7XG4gICAgICAgIHZhciByZWFsID0gIGkgKyByZW1haW5kZXIgKiBpO1xuXG5cbiAgICAgICAgdmFyIGFuZ2xlID0gKCh0aGV0YSkgKyBzdGFydEFuZ2xlICsgKHRoZXRhMiAqIHJlYWwpKTtcblxuICAgICAgICB2YXIgYyA9IE1hdGguY29zKGFuZ2xlKTtcbiAgICAgICAgdmFyIHMgPSAtTWF0aC5zaW4oYW5nbGUpO1xuXG4gICAgICAgIHBvaW50cy5wdXNoKCggKGNUaGV0YSAqICBjKSArIChzVGhldGEgKiBzKSApICogcmFkaXVzICsgY3gsXG4gICAgICAgICAgICAgICAgICAgICggKGNUaGV0YSAqIC1zKSArIChzVGhldGEgKiBjKSApICogcmFkaXVzICsgY3kpO1xuICAgIH1cblxuICAgIHRoaXMuZGlydHkgPSB0aGlzLmJvdW5kc0RpcnR5ID0gdHJ1ZTtcblxuICAgIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBTcGVjaWZpZXMgYSBzaW1wbGUgb25lLWNvbG9yIGZpbGwgdGhhdCBzdWJzZXF1ZW50IGNhbGxzIHRvIG90aGVyIEdyYXBoaWNzIG1ldGhvZHNcbiAqIChzdWNoIGFzIGxpbmVUbygpIG9yIGRyYXdDaXJjbGUoKSkgdXNlIHdoZW4gZHJhd2luZy5cbiAqXG4gKiBAcGFyYW0gY29sb3Ige251bWJlcn0gdGhlIGNvbG9yIG9mIHRoZSBmaWxsXG4gKiBAcGFyYW0gYWxwaGEge251bWJlcn0gdGhlIGFscGhhIG9mIHRoZSBmaWxsXG4gKiBAcmV0dXJuIHtQSVhJLkdyYXBoaWNzfVxuICovXG5HcmFwaGljcy5wcm90b3R5cGUuYmVnaW5GaWxsID0gZnVuY3Rpb24gKGNvbG9yLCBhbHBoYSlcbntcbiAgICB0aGlzLmZpbGxpbmcgPSB0cnVlO1xuICAgIHRoaXMuZmlsbENvbG9yID0gY29sb3IgfHwgMDtcbiAgICB0aGlzLmZpbGxBbHBoYSA9IChhbHBoYSA9PT0gdW5kZWZpbmVkKSA/IDEgOiBhbHBoYTtcblxuICAgIGlmICh0aGlzLmN1cnJlbnRQYXRoKVxuICAgIHtcbiAgICAgICAgaWYgKHRoaXMuY3VycmVudFBhdGguc2hhcGUucG9pbnRzLmxlbmd0aCA8PSAyKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRQYXRoLmZpbGwgPSB0aGlzLmZpbGxpbmc7XG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRQYXRoLmZpbGxDb2xvciA9IHRoaXMuZmlsbENvbG9yO1xuICAgICAgICAgICAgdGhpcy5jdXJyZW50UGF0aC5maWxsQWxwaGEgPSB0aGlzLmZpbGxBbHBoYTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogQXBwbGllcyBhIGZpbGwgdG8gdGhlIGxpbmVzIGFuZCBzaGFwZXMgdGhhdCB3ZXJlIGFkZGVkIHNpbmNlIHRoZSBsYXN0IGNhbGwgdG8gdGhlIGJlZ2luRmlsbCgpIG1ldGhvZC5cbiAqXG4gKiBAcmV0dXJuIHtHcmFwaGljc31cbiAqL1xuR3JhcGhpY3MucHJvdG90eXBlLmVuZEZpbGwgPSBmdW5jdGlvbiAoKVxue1xuICAgIHRoaXMuZmlsbGluZyA9IGZhbHNlO1xuICAgIHRoaXMuZmlsbENvbG9yID0gbnVsbDtcbiAgICB0aGlzLmZpbGxBbHBoYSA9IDE7XG5cbiAgICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICpcbiAqIEBwYXJhbSB4IHtudW1iZXJ9IFRoZSBYIGNvb3JkIG9mIHRoZSB0b3AtbGVmdCBvZiB0aGUgcmVjdGFuZ2xlXG4gKiBAcGFyYW0geSB7bnVtYmVyfSBUaGUgWSBjb29yZCBvZiB0aGUgdG9wLWxlZnQgb2YgdGhlIHJlY3RhbmdsZVxuICogQHBhcmFtIHdpZHRoIHtudW1iZXJ9IFRoZSB3aWR0aCBvZiB0aGUgcmVjdGFuZ2xlXG4gKiBAcGFyYW0gaGVpZ2h0IHtudW1iZXJ9IFRoZSBoZWlnaHQgb2YgdGhlIHJlY3RhbmdsZVxuICogQHJldHVybiB7UElYSS5HcmFwaGljc31cbiAqL1xuR3JhcGhpY3MucHJvdG90eXBlLmRyYXdSZWN0ID0gZnVuY3Rpb24gKCB4LCB5LCB3aWR0aCwgaGVpZ2h0IClcbntcbiAgICB0aGlzLmRyYXdTaGFwZShuZXcgbWF0aC5SZWN0YW5nbGUoeCx5LCB3aWR0aCwgaGVpZ2h0KSk7XG5cbiAgICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICpcbiAqIEBwYXJhbSB4IHtudW1iZXJ9IFRoZSBYIGNvb3JkIG9mIHRoZSB0b3AtbGVmdCBvZiB0aGUgcmVjdGFuZ2xlXG4gKiBAcGFyYW0geSB7bnVtYmVyfSBUaGUgWSBjb29yZCBvZiB0aGUgdG9wLWxlZnQgb2YgdGhlIHJlY3RhbmdsZVxuICogQHBhcmFtIHdpZHRoIHtudW1iZXJ9IFRoZSB3aWR0aCBvZiB0aGUgcmVjdGFuZ2xlXG4gKiBAcGFyYW0gaGVpZ2h0IHtudW1iZXJ9IFRoZSBoZWlnaHQgb2YgdGhlIHJlY3RhbmdsZVxuICogQHBhcmFtIHJhZGl1cyB7bnVtYmVyfSBSYWRpdXMgb2YgdGhlIHJlY3RhbmdsZSBjb3JuZXJzXG4gKiBAcmV0dXJuIHtQSVhJLkdyYXBoaWNzfVxuICovXG5HcmFwaGljcy5wcm90b3R5cGUuZHJhd1JvdW5kZWRSZWN0ID0gZnVuY3Rpb24gKCB4LCB5LCB3aWR0aCwgaGVpZ2h0LCByYWRpdXMgKVxue1xuICAgIHRoaXMuZHJhd1NoYXBlKG5ldyBtYXRoLlJvdW5kZWRSZWN0YW5nbGUoeCwgeSwgd2lkdGgsIGhlaWdodCwgcmFkaXVzKSk7XG5cbiAgICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogRHJhd3MgYSBjaXJjbGUuXG4gKlxuICogQHBhcmFtIHgge251bWJlcn0gVGhlIFggY29vcmRpbmF0ZSBvZiB0aGUgY2VudGVyIG9mIHRoZSBjaXJjbGVcbiAqIEBwYXJhbSB5IHtudW1iZXJ9IFRoZSBZIGNvb3JkaW5hdGUgb2YgdGhlIGNlbnRlciBvZiB0aGUgY2lyY2xlXG4gKiBAcGFyYW0gcmFkaXVzIHtudW1iZXJ9IFRoZSByYWRpdXMgb2YgdGhlIGNpcmNsZVxuICogQHJldHVybiB7UElYSS5HcmFwaGljc31cbiAqL1xuR3JhcGhpY3MucHJvdG90eXBlLmRyYXdDaXJjbGUgPSBmdW5jdGlvbiAoeCwgeSwgcmFkaXVzKVxue1xuICAgIHRoaXMuZHJhd1NoYXBlKG5ldyBtYXRoLkNpcmNsZSh4LHksIHJhZGl1cykpO1xuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIERyYXdzIGFuIGVsbGlwc2UuXG4gKlxuICogQHBhcmFtIHgge251bWJlcn0gVGhlIFggY29vcmRpbmF0ZSBvZiB0aGUgY2VudGVyIG9mIHRoZSBlbGxpcHNlXG4gKiBAcGFyYW0geSB7bnVtYmVyfSBUaGUgWSBjb29yZGluYXRlIG9mIHRoZSBjZW50ZXIgb2YgdGhlIGVsbGlwc2VcbiAqIEBwYXJhbSB3aWR0aCB7bnVtYmVyfSBUaGUgaGFsZiB3aWR0aCBvZiB0aGUgZWxsaXBzZVxuICogQHBhcmFtIGhlaWdodCB7bnVtYmVyfSBUaGUgaGFsZiBoZWlnaHQgb2YgdGhlIGVsbGlwc2VcbiAqIEByZXR1cm4ge1BJWEkuR3JhcGhpY3N9XG4gKi9cbkdyYXBoaWNzLnByb3RvdHlwZS5kcmF3RWxsaXBzZSA9IGZ1bmN0aW9uICh4LCB5LCB3aWR0aCwgaGVpZ2h0KVxue1xuICAgIHRoaXMuZHJhd1NoYXBlKG5ldyBtYXRoLkVsbGlwc2UoeCwgeSwgd2lkdGgsIGhlaWdodCkpO1xuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIERyYXdzIGEgcG9seWdvbiB1c2luZyB0aGUgZ2l2ZW4gcGF0aC5cbiAqXG4gKiBAcGFyYW0gcGF0aCB7bnVtYmVyW118UElYSS5Qb2ludFtdfSBUaGUgcGF0aCBkYXRhIHVzZWQgdG8gY29uc3RydWN0IHRoZSBwb2x5Z29uLlxuICogQHJldHVybiB7UElYSS5HcmFwaGljc31cbiAqL1xuR3JhcGhpY3MucHJvdG90eXBlLmRyYXdQb2x5Z29uID0gZnVuY3Rpb24gKHBhdGgpXG57XG4gICAgLy8gcHJldmVudHMgYW4gYXJndW1lbnQgYXNzaWdubWVudCBkZW9wdFxuICAgIC8vIHNlZSBzZWN0aW9uIDMuMTogaHR0cHM6Ly9naXRodWIuY29tL3BldGthYW50b25vdi9ibHVlYmlyZC93aWtpL09wdGltaXphdGlvbi1raWxsZXJzIzMtbWFuYWdpbmctYXJndW1lbnRzXG4gICAgdmFyIHBvaW50cyA9IHBhdGg7XG5cbiAgICB2YXIgY2xvc2VkID0gdHJ1ZTtcblxuICAgIGlmIChwb2ludHMgaW5zdGFuY2VvZiBtYXRoLlBvbHlnb24pXG4gICAge1xuICAgICAgICBjbG9zZWQgPSBwb2ludHMuY2xvc2VkO1xuICAgICAgICBwb2ludHMgPSBwb2ludHMucG9pbnRzO1xuICAgIH1cblxuICAgIGlmICghQXJyYXkuaXNBcnJheShwb2ludHMpKVxuICAgIHtcbiAgICAgICAgLy8gcHJldmVudHMgYW4gYXJndW1lbnQgbGVhayBkZW9wdFxuICAgICAgICAvLyBzZWUgc2VjdGlvbiAzLjI6IGh0dHBzOi8vZ2l0aHViLmNvbS9wZXRrYWFudG9ub3YvYmx1ZWJpcmQvd2lraS9PcHRpbWl6YXRpb24ta2lsbGVycyMzLW1hbmFnaW5nLWFyZ3VtZW50c1xuICAgICAgICBwb2ludHMgPSBuZXcgQXJyYXkoYXJndW1lbnRzLmxlbmd0aCk7XG5cbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwb2ludHMubGVuZ3RoOyArK2kpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHBvaW50c1tpXSA9IGFyZ3VtZW50c1tpXTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHZhciBzaGFwZSA9IG5ldyBtYXRoLlBvbHlnb24ocG9pbnRzKTtcbiAgICBzaGFwZS5jbG9zZWQgPSBjbG9zZWQ7XG5cbiAgICB0aGlzLmRyYXdTaGFwZShzaGFwZSk7XG5cbiAgICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogQ2xlYXJzIHRoZSBncmFwaGljcyB0aGF0IHdlcmUgZHJhd24gdG8gdGhpcyBHcmFwaGljcyBvYmplY3QsIGFuZCByZXNldHMgZmlsbCBhbmQgbGluZSBzdHlsZSBzZXR0aW5ncy5cbiAqXG4gKiBAcmV0dXJuIHtQSVhJLkdyYXBoaWNzfVxuICovXG5HcmFwaGljcy5wcm90b3R5cGUuY2xlYXIgPSBmdW5jdGlvbiAoKVxue1xuICAgIHRoaXMubGluZVdpZHRoID0gMDtcbiAgICB0aGlzLmZpbGxpbmcgPSBmYWxzZTtcblxuICAgIHRoaXMuZGlydHkgPSB0cnVlO1xuICAgIHRoaXMuY2xlYXJEaXJ0eSA9IHRydWU7XG4gICAgdGhpcy5ncmFwaGljc0RhdGEgPSBbXTtcblxuICAgIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBVc2VmdWwgZnVuY3Rpb24gdGhhdCByZXR1cm5zIGEgdGV4dHVyZSBvZiB0aGUgZ3JhcGhpY3Mgb2JqZWN0IHRoYXQgY2FuIHRoZW4gYmUgdXNlZCB0byBjcmVhdGUgc3ByaXRlc1xuICogVGhpcyBjYW4gYmUgcXVpdGUgdXNlZnVsIGlmIHlvdXIgZ2VvbWV0cnkgaXMgY29tcGxpY2F0ZWQgYW5kIG5lZWRzIHRvIGJlIHJldXNlZCBtdWx0aXBsZSB0aW1lcy5cbiAqXG4gKiBAcGFyYW0gcmVzb2x1dGlvbiB7bnVtYmVyfSBUaGUgcmVzb2x1dGlvbiBvZiB0aGUgdGV4dHVyZSBiZWluZyBnZW5lcmF0ZWRcbiAqIEBwYXJhbSBzY2FsZU1vZGUge251bWJlcn0gU2hvdWxkIGJlIG9uZSBvZiB0aGUgc2NhbGVNb2RlIGNvbnN0c1xuICogQHJldHVybiB7UElYSS5UZXh0dXJlfSBhIHRleHR1cmUgb2YgdGhlIGdyYXBoaWNzIG9iamVjdFxuICovXG5HcmFwaGljcy5wcm90b3R5cGUuZ2VuZXJhdGVUZXh0dXJlID0gZnVuY3Rpb24gKHJlbmRlcmVyLCByZXNvbHV0aW9uLCBzY2FsZU1vZGUpXG57XG5cbiAgICByZXNvbHV0aW9uID0gcmVzb2x1dGlvbiB8fCAxO1xuXG4gICAgdmFyIGJvdW5kcyA9IHRoaXMuZ2V0TG9jYWxCb3VuZHMoKTtcblxuICAgIHZhciBjYW52YXNCdWZmZXIgPSBuZXcgQ2FudmFzQnVmZmVyKGJvdW5kcy53aWR0aCAqIHJlc29sdXRpb24sIGJvdW5kcy5oZWlnaHQgKiByZXNvbHV0aW9uKTtcblxuICAgIHZhciB0ZXh0dXJlID0gVGV4dHVyZS5mcm9tQ2FudmFzKGNhbnZhc0J1ZmZlci5jYW52YXMsIHNjYWxlTW9kZSk7XG4gICAgdGV4dHVyZS5iYXNlVGV4dHVyZS5yZXNvbHV0aW9uID0gcmVzb2x1dGlvbjtcblxuICAgIGNhbnZhc0J1ZmZlci5jb250ZXh0LnNjYWxlKHJlc29sdXRpb24sIHJlc29sdXRpb24pO1xuXG4gICAgY2FudmFzQnVmZmVyLmNvbnRleHQudHJhbnNsYXRlKC1ib3VuZHMueCwtYm91bmRzLnkpO1xuXG4gICAgQ2FudmFzR3JhcGhpY3MucmVuZGVyR3JhcGhpY3ModGhpcywgY2FudmFzQnVmZmVyLmNvbnRleHQpO1xuXG4gICAgcmV0dXJuIHRleHR1cmU7XG59O1xuXG4vKipcbiAqIFJlbmRlcnMgdGhlIG9iamVjdCB1c2luZyB0aGUgV2ViR0wgcmVuZGVyZXJcbiAqXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcn1cbiAqIEBwcml2YXRlXG4gKi9cbkdyYXBoaWNzLnByb3RvdHlwZS5fcmVuZGVyV2ViR0wgPSBmdW5jdGlvbiAocmVuZGVyZXIpXG57XG4gICAgLy8gaWYgdGhlIHNwcml0ZSBpcyBub3QgdmlzaWJsZSBvciB0aGUgYWxwaGEgaXMgMCB0aGVuIG5vIG5lZWQgdG8gcmVuZGVyIHRoaXMgZWxlbWVudFxuXG4gICAgaWYgKHRoaXMuZ2xEaXJ0eSlcbiAgICB7XG4gICAgICAgIHRoaXMuZGlydHkgPSB0cnVlO1xuICAgICAgICB0aGlzLmdsRGlydHkgPSBmYWxzZTtcbiAgICB9XG5cbiAgICByZW5kZXJlci5zZXRPYmplY3RSZW5kZXJlcihyZW5kZXJlci5wbHVnaW5zLmdyYXBoaWNzKTtcbiAgICByZW5kZXJlci5wbHVnaW5zLmdyYXBoaWNzLnJlbmRlcih0aGlzKTtcblxufTtcblxuLyoqXG4gKiBSZW5kZXJzIHRoZSBvYmplY3QgdXNpbmcgdGhlIENhbnZhcyByZW5kZXJlclxuICpcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5DYW52YXNSZW5kZXJlcn1cbiAqIEBwcml2YXRlXG4gKi9cbkdyYXBoaWNzLnByb3RvdHlwZS5fcmVuZGVyQ2FudmFzID0gZnVuY3Rpb24gKHJlbmRlcmVyKVxue1xuICAgIGlmICh0aGlzLmlzTWFzayA9PT0gdHJ1ZSlcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBpZiB0aGUgdGludCBoYXMgY2hhbmdlZCwgc2V0IHRoZSBncmFwaGljcyBvYmplY3QgdG8gZGlydHkuXG4gICAgaWYgKHRoaXMuX3ByZXZUaW50ICE9PSB0aGlzLnRpbnQpIHtcbiAgICAgICAgdGhpcy5kaXJ0eSA9IHRydWU7XG4gICAgfVxuXG4gICAgLy8gdGhpcyBjb2RlIG1heSBzdGlsbCBiZSBuZWVkZWQgc28gbGVhdmluZyBmb3Igbm93Li5cbiAgICAvL1xuICAgIC8qXG4gICAgaWYgKHRoaXMuX2NhY2hlQXNCaXRtYXApXG4gICAge1xuICAgICAgICBpZiAodGhpcy5kaXJ0eSB8fCB0aGlzLmNhY2hlZFNwcml0ZURpcnR5KVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLl9nZW5lcmF0ZUNhY2hlZFNwcml0ZSgpO1xuXG4gICAgICAgICAgICAvLyB3ZSB3aWxsIGFsc28gbmVlZCB0byB1cGRhdGUgdGhlIHRleHR1cmVcbiAgICAgICAgICAgIHRoaXMudXBkYXRlQ2FjaGVkU3ByaXRlVGV4dHVyZSgpO1xuXG4gICAgICAgICAgICB0aGlzLmNhY2hlZFNwcml0ZURpcnR5ID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLmRpcnR5ID0gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9jYWNoZWRTcHJpdGUuYWxwaGEgPSB0aGlzLmFscGhhO1xuXG4gICAgICAgIFNwcml0ZS5wcm90b3R5cGUuX3JlbmRlckNhbnZhcy5jYWxsKHRoaXMuX2NhY2hlZFNwcml0ZSwgcmVuZGVyZXIpO1xuXG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgKi9cbiAgICB2YXIgY29udGV4dCA9IHJlbmRlcmVyLmNvbnRleHQ7XG4gICAgdmFyIHRyYW5zZm9ybSA9IHRoaXMud29ybGRUcmFuc2Zvcm07XG5cbiAgICB2YXIgY29tcG9zaXRlT3BlcmF0aW9uID0gcmVuZGVyZXIuYmxlbmRNb2Rlc1t0aGlzLmJsZW5kTW9kZV07XG4gICAgaWYgKGNvbXBvc2l0ZU9wZXJhdGlvbiAhPT0gY29udGV4dC5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb24pXG4gICAge1xuICAgICAgICBjb250ZXh0Lmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbiA9IGNvbXBvc2l0ZU9wZXJhdGlvbjtcbiAgICB9XG5cbiAgICB2YXIgcmVzb2x1dGlvbiA9IHJlbmRlcmVyLnJlc29sdXRpb247XG4gICAgY29udGV4dC5zZXRUcmFuc2Zvcm0oXG4gICAgICAgIHRyYW5zZm9ybS5hICogcmVzb2x1dGlvbixcbiAgICAgICAgdHJhbnNmb3JtLmIgKiByZXNvbHV0aW9uLFxuICAgICAgICB0cmFuc2Zvcm0uYyAqIHJlc29sdXRpb24sXG4gICAgICAgIHRyYW5zZm9ybS5kICogcmVzb2x1dGlvbixcbiAgICAgICAgdHJhbnNmb3JtLnR4ICogcmVzb2x1dGlvbixcbiAgICAgICAgdHJhbnNmb3JtLnR5ICogcmVzb2x1dGlvblxuICAgICk7XG5cbiAgICBDYW52YXNHcmFwaGljcy5yZW5kZXJHcmFwaGljcyh0aGlzLCBjb250ZXh0KTtcbn07XG5cbi8qKlxuICogUmV0cmlldmVzIHRoZSBib3VuZHMgb2YgdGhlIGdyYXBoaWMgc2hhcGUgYXMgYSByZWN0YW5nbGUgb2JqZWN0XG4gKlxuICogQHBhcmFtIFttYXRyaXhdIHtQSVhJLk1hdHJpeH0gVGhlIHdvcmxkIHRyYW5zZm9ybSBtYXRyaXggdG8gdXNlLCBkZWZhdWx0cyB0byB0aGlzXG4gKiAgb2JqZWN0J3Mgd29ybGRUcmFuc2Zvcm0uXG4gKiBAcmV0dXJuIHtQSVhJLlJlY3RhbmdsZX0gdGhlIHJlY3Rhbmd1bGFyIGJvdW5kaW5nIGFyZWFcbiAqL1xuR3JhcGhpY3MucHJvdG90eXBlLmdldEJvdW5kcyA9IGZ1bmN0aW9uIChtYXRyaXgpXG57XG4gICAgaWYoIXRoaXMuX2N1cnJlbnRCb3VuZHMpXG4gICAge1xuXG4gICAgICAgIC8vIHJldHVybiBhbiBlbXB0eSBvYmplY3QgaWYgdGhlIGl0ZW0gaXMgYSBtYXNrIVxuICAgICAgICBpZiAoIXRoaXMucmVuZGVyYWJsZSlcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIG1hdGguUmVjdGFuZ2xlLkVNUFRZO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuYm91bmRzRGlydHkpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlTG9jYWxCb3VuZHMoKTtcblxuICAgICAgICAgICAgdGhpcy5nbERpcnR5ID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMuY2FjaGVkU3ByaXRlRGlydHkgPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy5ib3VuZHNEaXJ0eSA9IGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGJvdW5kcyA9IHRoaXMuX2xvY2FsQm91bmRzO1xuXG4gICAgICAgIHZhciB3MCA9IGJvdW5kcy54O1xuICAgICAgICB2YXIgdzEgPSBib3VuZHMud2lkdGggKyBib3VuZHMueDtcblxuICAgICAgICB2YXIgaDAgPSBib3VuZHMueTtcbiAgICAgICAgdmFyIGgxID0gYm91bmRzLmhlaWdodCArIGJvdW5kcy55O1xuXG4gICAgICAgIHZhciB3b3JsZFRyYW5zZm9ybSA9IG1hdHJpeCB8fCB0aGlzLndvcmxkVHJhbnNmb3JtO1xuXG4gICAgICAgIHZhciBhID0gd29ybGRUcmFuc2Zvcm0uYTtcbiAgICAgICAgdmFyIGIgPSB3b3JsZFRyYW5zZm9ybS5iO1xuICAgICAgICB2YXIgYyA9IHdvcmxkVHJhbnNmb3JtLmM7XG4gICAgICAgIHZhciBkID0gd29ybGRUcmFuc2Zvcm0uZDtcbiAgICAgICAgdmFyIHR4ID0gd29ybGRUcmFuc2Zvcm0udHg7XG4gICAgICAgIHZhciB0eSA9IHdvcmxkVHJhbnNmb3JtLnR5O1xuXG4gICAgICAgIHZhciB4MSA9IGEgKiB3MSArIGMgKiBoMSArIHR4O1xuICAgICAgICB2YXIgeTEgPSBkICogaDEgKyBiICogdzEgKyB0eTtcblxuICAgICAgICB2YXIgeDIgPSBhICogdzAgKyBjICogaDEgKyB0eDtcbiAgICAgICAgdmFyIHkyID0gZCAqIGgxICsgYiAqIHcwICsgdHk7XG5cbiAgICAgICAgdmFyIHgzID0gYSAqIHcwICsgYyAqIGgwICsgdHg7XG4gICAgICAgIHZhciB5MyA9IGQgKiBoMCArIGIgKiB3MCArIHR5O1xuXG4gICAgICAgIHZhciB4NCA9ICBhICogdzEgKyBjICogaDAgKyB0eDtcbiAgICAgICAgdmFyIHk0ID0gIGQgKiBoMCArIGIgKiB3MSArIHR5O1xuXG4gICAgICAgIHZhciBtYXhYID0geDE7XG4gICAgICAgIHZhciBtYXhZID0geTE7XG5cbiAgICAgICAgdmFyIG1pblggPSB4MTtcbiAgICAgICAgdmFyIG1pblkgPSB5MTtcblxuICAgICAgICBtaW5YID0geDIgPCBtaW5YID8geDIgOiBtaW5YO1xuICAgICAgICBtaW5YID0geDMgPCBtaW5YID8geDMgOiBtaW5YO1xuICAgICAgICBtaW5YID0geDQgPCBtaW5YID8geDQgOiBtaW5YO1xuXG4gICAgICAgIG1pblkgPSB5MiA8IG1pblkgPyB5MiA6IG1pblk7XG4gICAgICAgIG1pblkgPSB5MyA8IG1pblkgPyB5MyA6IG1pblk7XG4gICAgICAgIG1pblkgPSB5NCA8IG1pblkgPyB5NCA6IG1pblk7XG5cbiAgICAgICAgbWF4WCA9IHgyID4gbWF4WCA/IHgyIDogbWF4WDtcbiAgICAgICAgbWF4WCA9IHgzID4gbWF4WCA/IHgzIDogbWF4WDtcbiAgICAgICAgbWF4WCA9IHg0ID4gbWF4WCA/IHg0IDogbWF4WDtcblxuICAgICAgICBtYXhZID0geTIgPiBtYXhZID8geTIgOiBtYXhZO1xuICAgICAgICBtYXhZID0geTMgPiBtYXhZID8geTMgOiBtYXhZO1xuICAgICAgICBtYXhZID0geTQgPiBtYXhZID8geTQgOiBtYXhZO1xuXG4gICAgICAgIHRoaXMuX2JvdW5kcy54ID0gbWluWDtcbiAgICAgICAgdGhpcy5fYm91bmRzLndpZHRoID0gbWF4WCAtIG1pblg7XG5cbiAgICAgICAgdGhpcy5fYm91bmRzLnkgPSBtaW5ZO1xuICAgICAgICB0aGlzLl9ib3VuZHMuaGVpZ2h0ID0gbWF4WSAtIG1pblk7XG5cbiAgICAgICAgdGhpcy5fY3VycmVudEJvdW5kcyA9IHRoaXMuX2JvdW5kcztcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5fY3VycmVudEJvdW5kcztcbn07XG5cbi8qKlxuKiBUZXN0cyBpZiBhIHBvaW50IGlzIGluc2lkZSB0aGlzIGdyYXBoaWNzIG9iamVjdFxuKlxuKiBAcGFyYW0gcG9pbnQge1BJWEkuUG9pbnR9IHRoZSBwb2ludCB0byB0ZXN0XG4qIEByZXR1cm4ge2Jvb2xlYW59IHRoZSByZXN1bHQgb2YgdGhlIHRlc3RcbiovXG5HcmFwaGljcy5wcm90b3R5cGUuY29udGFpbnNQb2ludCA9IGZ1bmN0aW9uKCBwb2ludCApXG57XG4gICAgdGhpcy53b3JsZFRyYW5zZm9ybS5hcHBseUludmVyc2UocG9pbnQsICB0ZW1wUG9pbnQpO1xuXG4gICAgdmFyIGdyYXBoaWNzRGF0YSA9IHRoaXMuZ3JhcGhpY3NEYXRhO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBncmFwaGljc0RhdGEubGVuZ3RoOyBpKyspXG4gICAge1xuICAgICAgICB2YXIgZGF0YSA9IGdyYXBoaWNzRGF0YVtpXTtcblxuICAgICAgICBpZiAoIWRhdGEuZmlsbClcbiAgICAgICAge1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBvbmx5IGRlYWwgd2l0aCBmaWxscy4uXG4gICAgICAgIGlmIChkYXRhLnNoYXBlKVxuICAgICAgICB7XG4gICAgICAgICAgICBpZiAoIGRhdGEuc2hhcGUuY29udGFpbnMoIHRlbXBQb2ludC54LCB0ZW1wUG9pbnQueSApIClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBmYWxzZTtcbn07XG5cbi8qKlxuICogVXBkYXRlIHRoZSBib3VuZHMgb2YgdGhlIG9iamVjdFxuICpcbiAqL1xuR3JhcGhpY3MucHJvdG90eXBlLnVwZGF0ZUxvY2FsQm91bmRzID0gZnVuY3Rpb24gKClcbntcbiAgICB2YXIgbWluWCA9IEluZmluaXR5O1xuICAgIHZhciBtYXhYID0gLUluZmluaXR5O1xuXG4gICAgdmFyIG1pblkgPSBJbmZpbml0eTtcbiAgICB2YXIgbWF4WSA9IC1JbmZpbml0eTtcblxuICAgIGlmICh0aGlzLmdyYXBoaWNzRGF0YS5sZW5ndGgpXG4gICAge1xuICAgICAgICB2YXIgc2hhcGUsIHBvaW50cywgeCwgeSwgdywgaDtcblxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuZ3JhcGhpY3NEYXRhLmxlbmd0aDsgaSsrKVxuICAgICAgICB7XG4gICAgICAgICAgICB2YXIgZGF0YSA9IHRoaXMuZ3JhcGhpY3NEYXRhW2ldO1xuICAgICAgICAgICAgdmFyIHR5cGUgPSBkYXRhLnR5cGU7XG4gICAgICAgICAgICB2YXIgbGluZVdpZHRoID0gZGF0YS5saW5lV2lkdGg7XG4gICAgICAgICAgICBzaGFwZSA9IGRhdGEuc2hhcGU7XG5cbiAgICAgICAgICAgIGlmICh0eXBlID09PSBDT05TVC5TSEFQRVMuUkVDVCB8fCB0eXBlID09PSBDT05TVC5TSEFQRVMuUlJFQylcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB4ID0gc2hhcGUueCAtIGxpbmVXaWR0aC8yO1xuICAgICAgICAgICAgICAgIHkgPSBzaGFwZS55IC0gbGluZVdpZHRoLzI7XG4gICAgICAgICAgICAgICAgdyA9IHNoYXBlLndpZHRoICsgbGluZVdpZHRoO1xuICAgICAgICAgICAgICAgIGggPSBzaGFwZS5oZWlnaHQgKyBsaW5lV2lkdGg7XG5cbiAgICAgICAgICAgICAgICBtaW5YID0geCA8IG1pblggPyB4IDogbWluWDtcbiAgICAgICAgICAgICAgICBtYXhYID0geCArIHcgPiBtYXhYID8geCArIHcgOiBtYXhYO1xuXG4gICAgICAgICAgICAgICAgbWluWSA9IHkgPCBtaW5ZID8geSA6IG1pblk7XG4gICAgICAgICAgICAgICAgbWF4WSA9IHkgKyBoID4gbWF4WSA/IHkgKyBoIDogbWF4WTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKHR5cGUgPT09IENPTlNULlNIQVBFUy5DSVJDKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHggPSBzaGFwZS54O1xuICAgICAgICAgICAgICAgIHkgPSBzaGFwZS55O1xuICAgICAgICAgICAgICAgIHcgPSBzaGFwZS5yYWRpdXMgKyBsaW5lV2lkdGgvMjtcbiAgICAgICAgICAgICAgICBoID0gc2hhcGUucmFkaXVzICsgbGluZVdpZHRoLzI7XG5cbiAgICAgICAgICAgICAgICBtaW5YID0geCAtIHcgPCBtaW5YID8geCAtIHcgOiBtaW5YO1xuICAgICAgICAgICAgICAgIG1heFggPSB4ICsgdyA+IG1heFggPyB4ICsgdyA6IG1heFg7XG5cbiAgICAgICAgICAgICAgICBtaW5ZID0geSAtIGggPCBtaW5ZID8geSAtIGggOiBtaW5ZO1xuICAgICAgICAgICAgICAgIG1heFkgPSB5ICsgaCA+IG1heFkgPyB5ICsgaCA6IG1heFk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmICh0eXBlID09PSBDT05TVC5TSEFQRVMuRUxJUClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB4ID0gc2hhcGUueDtcbiAgICAgICAgICAgICAgICB5ID0gc2hhcGUueTtcbiAgICAgICAgICAgICAgICB3ID0gc2hhcGUud2lkdGggKyBsaW5lV2lkdGgvMjtcbiAgICAgICAgICAgICAgICBoID0gc2hhcGUuaGVpZ2h0ICsgbGluZVdpZHRoLzI7XG5cbiAgICAgICAgICAgICAgICBtaW5YID0geCAtIHcgPCBtaW5YID8geCAtIHcgOiBtaW5YO1xuICAgICAgICAgICAgICAgIG1heFggPSB4ICsgdyA+IG1heFggPyB4ICsgdyA6IG1heFg7XG5cbiAgICAgICAgICAgICAgICBtaW5ZID0geSAtIGggPCBtaW5ZID8geSAtIGggOiBtaW5ZO1xuICAgICAgICAgICAgICAgIG1heFkgPSB5ICsgaCA+IG1heFkgPyB5ICsgaCA6IG1heFk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgLy8gUE9MWVxuICAgICAgICAgICAgICAgIHBvaW50cyA9IHNoYXBlLnBvaW50cztcblxuICAgICAgICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgcG9pbnRzLmxlbmd0aDsgaiArPSAyKVxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgeCA9IHBvaW50c1tqXTtcbiAgICAgICAgICAgICAgICAgICAgeSA9IHBvaW50c1tqKzFdO1xuXG4gICAgICAgICAgICAgICAgICAgIG1pblggPSB4LWxpbmVXaWR0aCA8IG1pblggPyB4LWxpbmVXaWR0aCA6IG1pblg7XG4gICAgICAgICAgICAgICAgICAgIG1heFggPSB4K2xpbmVXaWR0aCA+IG1heFggPyB4K2xpbmVXaWR0aCA6IG1heFg7XG5cbiAgICAgICAgICAgICAgICAgICAgbWluWSA9IHktbGluZVdpZHRoIDwgbWluWSA/IHktbGluZVdpZHRoIDogbWluWTtcbiAgICAgICAgICAgICAgICAgICAgbWF4WSA9IHkrbGluZVdpZHRoID4gbWF4WSA/IHkrbGluZVdpZHRoIDogbWF4WTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgbWluWCA9IDA7XG4gICAgICAgIG1heFggPSAwO1xuICAgICAgICBtaW5ZID0gMDtcbiAgICAgICAgbWF4WSA9IDA7XG4gICAgfVxuXG4gICAgdmFyIHBhZGRpbmcgPSB0aGlzLmJvdW5kc1BhZGRpbmc7XG5cbiAgICB0aGlzLl9sb2NhbEJvdW5kcy54ID0gbWluWCAtIHBhZGRpbmc7XG4gICAgdGhpcy5fbG9jYWxCb3VuZHMud2lkdGggPSAobWF4WCAtIG1pblgpICsgcGFkZGluZyAqIDI7XG5cbiAgICB0aGlzLl9sb2NhbEJvdW5kcy55ID0gbWluWSAtIHBhZGRpbmc7XG4gICAgdGhpcy5fbG9jYWxCb3VuZHMuaGVpZ2h0ID0gKG1heFkgLSBtaW5ZKSArIHBhZGRpbmcgKiAyO1xufTtcblxuLyoqXG4gKiBHZW5lcmF0ZXMgdGhlIGNhY2hlZCBzcHJpdGUgd2hlbiB0aGUgc3ByaXRlIGhhcyBjYWNoZUFzQml0bWFwID0gdHJ1ZVxuICpcbiAqIEBwcml2YXRlXG4gKi9cbi8qXG5HcmFwaGljcy5wcm90b3R5cGUuX2dlbmVyYXRlQ2FjaGVkU3ByaXRlID0gZnVuY3Rpb24gKClcbntcbiAgICB2YXIgYm91bmRzID0gdGhpcy5nZXRMb2NhbEJvdW5kcygpO1xuXG4gICAgaWYgKCF0aGlzLl9jYWNoZWRTcHJpdGUpXG4gICAge1xuICAgICAgICB2YXIgY2FudmFzQnVmZmVyID0gbmV3IENhbnZhc0J1ZmZlcihib3VuZHMud2lkdGgsIGJvdW5kcy5oZWlnaHQpO1xuICAgICAgICB2YXIgdGV4dHVyZSA9IFRleHR1cmUuZnJvbUNhbnZhcyhjYW52YXNCdWZmZXIuY2FudmFzKTtcblxuICAgICAgICB0aGlzLl9jYWNoZWRTcHJpdGUgPSBuZXcgU3ByaXRlKHRleHR1cmUpO1xuICAgICAgICB0aGlzLl9jYWNoZWRTcHJpdGUuYnVmZmVyID0gY2FudmFzQnVmZmVyO1xuXG4gICAgICAgIHRoaXMuX2NhY2hlZFNwcml0ZS53b3JsZFRyYW5zZm9ybSA9IHRoaXMud29ybGRUcmFuc2Zvcm07XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHRoaXMuX2NhY2hlZFNwcml0ZS5idWZmZXIucmVzaXplKGJvdW5kcy53aWR0aCwgYm91bmRzLmhlaWdodCk7XG4gICAgfVxuXG4gICAgLy8gbGV2ZXJhZ2UgdGhlIGFuY2hvciB0byBhY2NvdW50IGZvciB0aGUgb2Zmc2V0IG9mIHRoZSBlbGVtZW50XG4gICAgdGhpcy5fY2FjaGVkU3ByaXRlLmFuY2hvci54ID0gLSggYm91bmRzLnggLyBib3VuZHMud2lkdGggKTtcbiAgICB0aGlzLl9jYWNoZWRTcHJpdGUuYW5jaG9yLnkgPSAtKCBib3VuZHMueSAvIGJvdW5kcy5oZWlnaHQgKTtcblxuICAgIC8vIHRoaXMuX2NhY2hlZFNwcml0ZS5idWZmZXIuY29udGV4dC5zYXZlKCk7XG4gICAgdGhpcy5fY2FjaGVkU3ByaXRlLmJ1ZmZlci5jb250ZXh0LnRyYW5zbGF0ZSgtYm91bmRzLngsLWJvdW5kcy55KTtcblxuICAgIC8vIG1ha2Ugc3VyZSB3ZSBzZXQgdGhlIGFscGhhIG9mIHRoZSBncmFwaGljcyB0byAxIGZvciB0aGUgcmVuZGVyLi5cbiAgICB0aGlzLndvcmxkQWxwaGEgPSAxO1xuXG4gICAgLy8gbm93IHJlbmRlciB0aGUgZ3JhcGhpYy4uXG4gICAgQ2FudmFzR3JhcGhpY3MucmVuZGVyR3JhcGhpY3ModGhpcywgdGhpcy5fY2FjaGVkU3ByaXRlLmJ1ZmZlci5jb250ZXh0KTtcblxuICAgIHRoaXMuX2NhY2hlZFNwcml0ZS5hbHBoYSA9IHRoaXMuYWxwaGE7XG59O1xuKi9cbi8qKlxuICogVXBkYXRlcyB0ZXh0dXJlIHNpemUgYmFzZWQgb24gY2FudmFzIHNpemVcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG4vKlxuR3JhcGhpY3MucHJvdG90eXBlLnVwZGF0ZUNhY2hlZFNwcml0ZVRleHR1cmUgPSBmdW5jdGlvbiAoKVxue1xuICAgIHZhciBjYWNoZWRTcHJpdGUgPSB0aGlzLl9jYWNoZWRTcHJpdGU7XG4gICAgdmFyIHRleHR1cmUgPSBjYWNoZWRTcHJpdGUudGV4dHVyZTtcbiAgICB2YXIgY2FudmFzID0gY2FjaGVkU3ByaXRlLmJ1ZmZlci5jYW52YXM7XG5cbiAgICB0ZXh0dXJlLmJhc2VUZXh0dXJlLndpZHRoID0gY2FudmFzLndpZHRoO1xuICAgIHRleHR1cmUuYmFzZVRleHR1cmUuaGVpZ2h0ID0gY2FudmFzLmhlaWdodDtcbiAgICB0ZXh0dXJlLmNyb3Aud2lkdGggPSB0ZXh0dXJlLmZyYW1lLndpZHRoID0gY2FudmFzLndpZHRoO1xuICAgIHRleHR1cmUuY3JvcC5oZWlnaHQgPSB0ZXh0dXJlLmZyYW1lLmhlaWdodCA9IGNhbnZhcy5oZWlnaHQ7XG5cbiAgICBjYWNoZWRTcHJpdGUuX3dpZHRoID0gY2FudmFzLndpZHRoO1xuICAgIGNhY2hlZFNwcml0ZS5faGVpZ2h0ID0gY2FudmFzLmhlaWdodDtcblxuICAgIC8vIHVwZGF0ZSB0aGUgZGlydHkgYmFzZSB0ZXh0dXJlc1xuICAgIHRleHR1cmUuYmFzZVRleHR1cmUuZGlydHkoKTtcbn07Ki9cblxuLyoqXG4gKiBEZXN0cm95cyBhIHByZXZpb3VzIGNhY2hlZCBzcHJpdGUuXG4gKlxuICovXG4vKlxuR3JhcGhpY3MucHJvdG90eXBlLmRlc3Ryb3lDYWNoZWRTcHJpdGUgPSBmdW5jdGlvbiAoKVxue1xuICAgIHRoaXMuX2NhY2hlZFNwcml0ZS50ZXh0dXJlLmRlc3Ryb3kodHJ1ZSk7XG5cbiAgICAvLyBsZXQgdGhlIGdjIGNvbGxlY3QgdGhlIHVudXNlZCBzcHJpdGVcbiAgICAvLyBUT0RPIGNvdWxkIGJlIG9iamVjdCBwb29sZWQhXG4gICAgdGhpcy5fY2FjaGVkU3ByaXRlID0gbnVsbDtcbn07Ki9cblxuLyoqXG4gKiBEcmF3cyB0aGUgZ2l2ZW4gc2hhcGUgdG8gdGhpcyBHcmFwaGljcyBvYmplY3QuIENhbiBiZSBhbnkgb2YgQ2lyY2xlLCBSZWN0YW5nbGUsIEVsbGlwc2UsIExpbmUgb3IgUG9seWdvbi5cbiAqXG4gKiBAcGFyYW0gc2hhcGUge1BJWEkuQ2lyY2xlfFBJWEkuUmVjdGFuZ2xlfFBJWEkuRWxsaXBzZXxQSVhJLkxpbmV8UElYSS5Qb2x5Z29ufSBUaGUgc2hhcGUgb2JqZWN0IHRvIGRyYXcuXG4gKiBAcmV0dXJuIHtQSVhJLkdyYXBoaWNzRGF0YX0gVGhlIGdlbmVyYXRlZCBHcmFwaGljc0RhdGEgb2JqZWN0LlxuICovXG5HcmFwaGljcy5wcm90b3R5cGUuZHJhd1NoYXBlID0gZnVuY3Rpb24gKHNoYXBlKVxue1xuICAgIGlmICh0aGlzLmN1cnJlbnRQYXRoKVxuICAgIHtcbiAgICAgICAgLy8gY2hlY2sgY3VycmVudCBwYXRoIVxuICAgICAgICBpZiAodGhpcy5jdXJyZW50UGF0aC5zaGFwZS5wb2ludHMubGVuZ3RoIDw9IDIpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuZ3JhcGhpY3NEYXRhLnBvcCgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5jdXJyZW50UGF0aCA9IG51bGw7XG5cbiAgICB2YXIgZGF0YSA9IG5ldyBHcmFwaGljc0RhdGEodGhpcy5saW5lV2lkdGgsIHRoaXMubGluZUNvbG9yLCB0aGlzLmxpbmVBbHBoYSwgdGhpcy5maWxsQ29sb3IsIHRoaXMuZmlsbEFscGhhLCB0aGlzLmZpbGxpbmcsIHNoYXBlKTtcblxuICAgIHRoaXMuZ3JhcGhpY3NEYXRhLnB1c2goZGF0YSk7XG5cbiAgICBpZiAoZGF0YS50eXBlID09PSBDT05TVC5TSEFQRVMuUE9MWSlcbiAgICB7XG4gICAgICAgIGRhdGEuc2hhcGUuY2xvc2VkID0gZGF0YS5zaGFwZS5jbG9zZWQgfHwgdGhpcy5maWxsaW5nO1xuICAgICAgICB0aGlzLmN1cnJlbnRQYXRoID0gZGF0YTtcbiAgICB9XG5cbiAgICB0aGlzLmRpcnR5ID0gdGhpcy5ib3VuZHNEaXJ0eSA9IHRydWU7XG5cbiAgICByZXR1cm4gZGF0YTtcbn07XG5cbi8qKlxuICogRGVzdHJveXMgdGhlIEdyYXBoaWNzIG9iamVjdC5cbiAqL1xuR3JhcGhpY3MucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoKSB7XG4gICAgQ29udGFpbmVyLnByb3RvdHlwZS5kZXN0cm95LmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG5cbiAgICAvLyBkZXN0cm95IGVhY2ggb2YgdGhlIEdyYXBoaWNzRGF0YSBvYmplY3RzXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmdyYXBoaWNzRGF0YS5sZW5ndGg7ICsraSkge1xuICAgICAgICB0aGlzLmdyYXBoaWNzRGF0YVtpXS5kZXN0cm95KCk7XG4gICAgfVxuXG4gICAgLy8gZm9yIGVhY2ggd2ViZ2wgZGF0YSBlbnRyeSwgZGVzdHJveSB0aGUgV2ViR0xHcmFwaGljc0RhdGFcbiAgICBmb3IgKHZhciBpZCBpbiB0aGlzLl93ZWJnbCkge1xuICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IHRoaXMuX3dlYmdsW2lkXS5kYXRhLmxlbmd0aDsgKytqKSB7XG4gICAgICAgICAgICB0aGlzLl93ZWJnbFtpZF0uZGF0YVtqXS5kZXN0cm95KCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLmdyYXBoaWNzRGF0YSA9IG51bGw7XG5cbiAgICB0aGlzLmN1cnJlbnRQYXRoID0gbnVsbDtcbiAgICB0aGlzLl93ZWJnbCA9IG51bGw7XG4gICAgdGhpcy5fbG9jYWxCb3VuZHMgPSBudWxsO1xufTtcbiIsIi8qKlxuICogQSBHcmFwaGljc0RhdGEgb2JqZWN0LlxuICpcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqIEBwYXJhbSBsaW5lV2lkdGgge251bWJlcn0gdGhlIHdpZHRoIG9mIHRoZSBsaW5lIHRvIGRyYXdcbiAqIEBwYXJhbSBsaW5lQ29sb3Ige251bWJlcn0gdGhlIGNvbG9yIG9mIHRoZSBsaW5lIHRvIGRyYXdcbiAqIEBwYXJhbSBsaW5lQWxwaGEge251bWJlcn0gdGhlIGFscGhhIG9mIHRoZSBsaW5lIHRvIGRyYXdcbiAqIEBwYXJhbSBmaWxsQ29sb3Ige251bWJlcn0gdGhlIGNvbG9yIG9mIHRoZSBmaWxsXG4gKiBAcGFyYW0gZmlsbEFscGhhIHtudW1iZXJ9IHRoZSBhbHBoYSBvZiB0aGUgZmlsbFxuICogQHBhcmFtIGZpbGwgICAgICB7Ym9vbGVhbn0gd2hldGhlciBvciBub3QgdGhlIHNoYXBlIGlzIGZpbGxlZCB3aXRoIGEgY29sb3VyXG4gKiBAcGFyYW0gc2hhcGUgICAgIHtDaXJjbGV8UmVjdGFuZ2xlfEVsbGlwc2V8TGluZXxQb2x5Z29ufSBUaGUgc2hhcGUgb2JqZWN0IHRvIGRyYXcuXG4gKi9cbmZ1bmN0aW9uIEdyYXBoaWNzRGF0YShsaW5lV2lkdGgsIGxpbmVDb2xvciwgbGluZUFscGhhLCBmaWxsQ29sb3IsIGZpbGxBbHBoYSwgZmlsbCwgc2hhcGUpXG57XG4gICAgLypcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9IHRoZSB3aWR0aCBvZiB0aGUgbGluZSB0byBkcmF3XG4gICAgICovXG4gICAgdGhpcy5saW5lV2lkdGggPSBsaW5lV2lkdGg7XG5cbiAgICAvKlxuICAgICAqIEBtZW1iZXIge251bWJlcn0gdGhlIGNvbG9yIG9mIHRoZSBsaW5lIHRvIGRyYXdcbiAgICAgKi9cbiAgICB0aGlzLmxpbmVDb2xvciA9IGxpbmVDb2xvcjtcbiAgICAvKlxuICAgICAqIEBtZW1iZXIge251bWJlcn0gdGhlIGFscGhhIG9mIHRoZSBsaW5lIHRvIGRyYXdcbiAgICAgKi9cbiAgICB0aGlzLmxpbmVBbHBoYSA9IGxpbmVBbHBoYTtcbiAgICAvKlxuICAgICAqIEBtZW1iZXIge251bWJlcn0gY2FjaGVkIHRpbnQgb2YgdGhlIGxpbmUgdG8gZHJhd1xuICAgICAqL1xuICAgIHRoaXMuX2xpbmVUaW50ID0gbGluZUNvbG9yO1xuXG4gICAgLypcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9IHRoZSBjb2xvciBvZiB0aGUgZmlsbFxuICAgICAqL1xuICAgIHRoaXMuZmlsbENvbG9yID0gZmlsbENvbG9yO1xuXG4gICAgLypcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9IHRoZSBhbHBoYSBvZiB0aGUgZmlsbFxuICAgICAqL1xuICAgIHRoaXMuZmlsbEFscGhhID0gZmlsbEFscGhhO1xuXG4gICAgLypcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9IGNhY2hlZCB0aW50IG9mIHRoZSBmaWxsXG4gICAgICovXG4gICAgdGhpcy5fZmlsbFRpbnQgPSBmaWxsQ29sb3I7XG5cbiAgICAvKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59IHdoZXRoZXIgb3Igbm90IHRoZSBzaGFwZSBpcyBmaWxsZWQgd2l0aCBhIGNvbG91clxuICAgICAqL1xuICAgIHRoaXMuZmlsbCA9IGZpbGw7XG5cbiAgICAvKlxuICAgICAqIEBtZW1iZXIge1BJWEkuQ2lyY2xlfFBJWEkuUmVjdGFuZ2xlfFBJWEkuRWxsaXBzZXxQSVhJLkxpbmV8UElYSS5Qb2x5Z29ufSBUaGUgc2hhcGUgb2JqZWN0IHRvIGRyYXcuXG4gICAgICovXG4gICAgdGhpcy5zaGFwZSA9IHNoYXBlO1xuXG4gICAgLypcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9IFRoZSB0eXBlIG9mIHRoZSBzaGFwZSwgc2VlIHRoZSBDb25zdC5TaGFwZXMgZmlsZSBmb3IgYWxsIHRoZSBleGlzdGluZyB0eXBlcyxcbiAgICAgKi9cbiAgICB0aGlzLnR5cGUgPSBzaGFwZS50eXBlO1xufVxuXG5HcmFwaGljc0RhdGEucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gR3JhcGhpY3NEYXRhO1xubW9kdWxlLmV4cG9ydHMgPSBHcmFwaGljc0RhdGE7XG5cbi8qKlxuICogQ3JlYXRlcyBhIG5ldyBHcmFwaGljc0RhdGEgb2JqZWN0IHdpdGggdGhlIHNhbWUgdmFsdWVzIGFzIHRoaXMgb25lLlxuICpcbiAqIEByZXR1cm4ge1BJWEkuR3JhcGhpY3NEYXRhfVxuICovXG5HcmFwaGljc0RhdGEucHJvdG90eXBlLmNsb25lID0gZnVuY3Rpb24gKClcbntcbiAgICByZXR1cm4gbmV3IEdyYXBoaWNzRGF0YShcbiAgICAgICAgdGhpcy5saW5lV2lkdGgsXG4gICAgICAgIHRoaXMubGluZUNvbG9yLFxuICAgICAgICB0aGlzLmxpbmVBbHBoYSxcbiAgICAgICAgdGhpcy5maWxsQ29sb3IsXG4gICAgICAgIHRoaXMuZmlsbEFscGhhLFxuICAgICAgICB0aGlzLmZpbGwsXG4gICAgICAgIHRoaXMuc2hhcGVcbiAgICApO1xufTtcblxuLyoqXG4gKiBEZXN0cm95cyB0aGUgR3JhcGhpY3MgZGF0YS5cbiAqL1xuR3JhcGhpY3NEYXRhLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKCkge1xuICAgIHRoaXMuc2hhcGUgPSBudWxsO1xufTtcbiIsInZhciB1dGlscyA9IHJlcXVpcmUoJy4uLy4uL3V0aWxzJyksXG4gICAgbWF0aCA9IHJlcXVpcmUoJy4uLy4uL21hdGgnKSxcbiAgICBDT05TVCA9IHJlcXVpcmUoJy4uLy4uL2NvbnN0JyksXG4gICAgT2JqZWN0UmVuZGVyZXIgPSByZXF1aXJlKCcuLi8uLi9yZW5kZXJlcnMvd2ViZ2wvdXRpbHMvT2JqZWN0UmVuZGVyZXInKSxcbiAgICBXZWJHTFJlbmRlcmVyID0gcmVxdWlyZSgnLi4vLi4vcmVuZGVyZXJzL3dlYmdsL1dlYkdMUmVuZGVyZXInKSxcbiAgICBXZWJHTEdyYXBoaWNzRGF0YSA9IHJlcXVpcmUoJy4vV2ViR0xHcmFwaGljc0RhdGEnKSxcbiAgICBQcmltaXRpdmVTaGFkZXIgPSByZXF1aXJlKCcuL1ByaW1pdGl2ZVNoYWRlcicpLFxuXG4gICAgLy8gc29tZSBkcmF3aW5nIGZ1bmN0aW9ucy4uXG4gICAgYnVpbGRMaW5lID0gcmVxdWlyZSgnLi9idWlsZExpbmUnKTtcbiAgICBidWlsZFBvbHkgPSByZXF1aXJlKCcuL2J1aWxkUG9seScpO1xuICAgIGJ1aWxkQ29tcGxleFBvbHkgPSByZXF1aXJlKCcuL2J1aWxkQ29tcGxleFBvbHknKTtcbiAgICBidWlsZFJlY3RhbmdsZSA9IHJlcXVpcmUoJy4vYnVpbGRSZWN0YW5nbGUnKTtcbiAgICBidWlsZFJvdW5kZWRSZWN0YW5nbGUgPSByZXF1aXJlKCcuL2J1aWxkUm91bmRlZFJlY3RhbmdsZScpO1xuICAgIGJ1aWxkQ2lyY2xlID0gcmVxdWlyZSgnLi9idWlsZENpcmNsZScpO1xuXG4gICAgZWFyY3V0ID0gcmVxdWlyZSgnZWFyY3V0Jyk7XG5cbi8qKlxuICogUmVuZGVycyB0aGUgZ3JhcGhpY3Mgb2JqZWN0LlxuICpcbiAqIEBjbGFzc1xuICogQHByaXZhdGVcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAZXh0ZW5kcyBQSVhJLk9iamVjdFJlbmRlcmVyXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcn0gVGhlIHJlbmRlcmVyIHRoaXMgb2JqZWN0IHJlbmRlcmVyIHdvcmtzIGZvci5cbiAqL1xuZnVuY3Rpb24gR3JhcGhpY3NSZW5kZXJlcihyZW5kZXJlcilcbntcbiAgICBPYmplY3RSZW5kZXJlci5jYWxsKHRoaXMsIHJlbmRlcmVyKTtcblxuICAgIHRoaXMuZ3JhcGhpY3NEYXRhUG9vbCA9IFtdO1xuXG4gICAgdGhpcy5wcmltaXRpdmVTaGFkZXIgPSBudWxsO1xuICAgIHRoaXMuY29tcGxleFByaW1pdGl2ZVNoYWRlciA9IG51bGw7XG5cbiAgICB0aGlzLmdsID0gcmVuZGVyZXIuZ2w7XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIGlzIHRoZSBtYXhpbXVtIG51bWJlciBvZiBwb2ludHMgYSBwb2x5IGNhbiBjb250YWluIGJlZm9yZSBpdCBpcyByZW5kZXJlZCBhcyBhIGNvbXBsZXggcG9seWdvbiAodXNpbmcgdGhlIHN0ZW5jaWwgYnVmZmVyKVxuICAgICAqIEB0eXBlIHtOdW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy5tYXhpbXVtU2ltcGxlUG9seVNpemUgPSAyMDA7XG59XG5cbkdyYXBoaWNzUmVuZGVyZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShPYmplY3RSZW5kZXJlci5wcm90b3R5cGUpO1xuR3JhcGhpY3NSZW5kZXJlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBHcmFwaGljc1JlbmRlcmVyO1xubW9kdWxlLmV4cG9ydHMgPSBHcmFwaGljc1JlbmRlcmVyO1xuXG5XZWJHTFJlbmRlcmVyLnJlZ2lzdGVyUGx1Z2luKCdncmFwaGljcycsIEdyYXBoaWNzUmVuZGVyZXIpO1xuXG4vKipcbiAqIENhbGxlZCB3aGVuIHRoZXJlIGlzIGEgV2ViR0wgY29udGV4dCBjaGFuZ2VcbiAqXG4gKiBAcHJpdmF0ZVxuICpcbiAqL1xuR3JhcGhpY3NSZW5kZXJlci5wcm90b3R5cGUub25Db250ZXh0Q2hhbmdlID0gZnVuY3Rpb24oKVxue1xuICAgIHRoaXMuZ2wgPSB0aGlzLnJlbmRlcmVyLmdsO1xuICAgIHRoaXMucHJpbWl0aXZlU2hhZGVyID0gbmV3IFByaW1pdGl2ZVNoYWRlcih0aGlzLmdsKVxufTtcblxuLyoqXG4gKiBEZXN0cm95cyB0aGlzIHJlbmRlcmVyLlxuICpcbiAqL1xuR3JhcGhpY3NSZW5kZXJlci5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uICgpIHtcbiAgICBPYmplY3RSZW5kZXJlci5wcm90b3R5cGUuZGVzdHJveS5jYWxsKHRoaXMpO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmdyYXBoaWNzRGF0YVBvb2wubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgdGhpcy5ncmFwaGljc0RhdGFQb29sW2ldLmRlc3Ryb3koKTtcbiAgICB9XG5cbiAgICB0aGlzLmdyYXBoaWNzRGF0YVBvb2wgPSBudWxsO1xufTtcblxuLyoqXG4gKiBSZW5kZXJzIGEgZ3JhcGhpY3Mgb2JqZWN0LlxuICpcbiAqIEBwYXJhbSBncmFwaGljcyB7UElYSS5HcmFwaGljc30gVGhlIGdyYXBoaWNzIG9iamVjdCB0byByZW5kZXIuXG4gKi9cbkdyYXBoaWNzUmVuZGVyZXIucHJvdG90eXBlLnJlbmRlciA9IGZ1bmN0aW9uKGdyYXBoaWNzKVxue1xuICAgIHZhciByZW5kZXJlciA9IHRoaXMucmVuZGVyZXI7XG4gICAgdmFyIGdsID0gcmVuZGVyZXIuZ2w7XG5cbiAgICB2YXIgd2ViR0xEYXRhO1xuICAvLyAgY29uc29sZS5sb2coZ3JhcGhpY3MpXG4gICAgaWYgKGdyYXBoaWNzLmRpcnR5IHx8ICFncmFwaGljcy5fd2ViR0xbZ2wuaWRdKVxuICAgIHtcbiAgICAgICAgdGhpcy51cGRhdGVHcmFwaGljcyhncmFwaGljcyk7XG4gICAgfVxuXG4gICAgdmFyIHdlYkdMID0gZ3JhcGhpY3MuX3dlYkdMW2dsLmlkXTtcblxuICAgIC8vIFRoaXMgIGNvdWxkIGJlIHNwZWVkZWQgdXAgZm9yIHN1cmUhXG5cbiAgICByZW5kZXJlci5ibGVuZE1vZGVNYW5hZ2VyLnNldEJsZW5kTW9kZSggZ3JhcGhpY3MuYmxlbmRNb2RlICk7XG5cbi8vICAgIHZhciBtYXRyaXggPSAgZ3JhcGhpY3Mud29ybGRUcmFuc2Zvcm0uY2xvbmUoKTtcbi8vICAgIHZhciBtYXRyaXggPSAgcmVuZGVyZXIuY3VycmVudFJlbmRlclRhcmdldC5wcm9qZWN0aW9uTWF0cml4LmNsb25lKCk7XG4vLyAgICBtYXRyaXguYXBwZW5kKGdyYXBoaWNzLndvcmxkVHJhbnNmb3JtKTtcblxuICAgIGZvciAodmFyIGkgPSAwLCBuID0gd2ViR0wuZGF0YS5sZW5ndGg7IGkgPCBuOyBpKyspXG4gICAge1xuICAgICAgICB3ZWJHTERhdGEgPSB3ZWJHTC5kYXRhW2ldO1xuXG4gICAgICAgIGlmICh3ZWJHTC5kYXRhW2ldLm1vZGUgPT09IDEpXG4gICAgICAgIHtcbiAgICAgICAgICAgIC8vVE9ETyBmaXggdGhpcyBvbmUhXG4gICAgICAgICAgICBcbiAgICAgICAgICAgIC8qXG4gICAgICAgICAgICByZW5kZXJlci5zdGVuY2lsTWFuYWdlci5wdXNoU3RlbmNpbChncmFwaGljcywgd2ViR0xEYXRhKTtcblxuICAgICAgICAgICAgZ2wudW5pZm9ybTFmKHJlbmRlcmVyLnNoYWRlck1hbmFnZXIuY29tcGxleFByaW1pdGl2ZVNoYWRlci51bmlmb3Jtcy5hbHBoYS5fbG9jYXRpb24sIGdyYXBoaWNzLndvcmxkQWxwaGEgKiB3ZWJHTERhdGEuYWxwaGEpO1xuXG4gICAgICAgICAgICAvLyByZW5kZXIgcXVhZC4uXG4gICAgICAgICAgICBnbC5kcmF3RWxlbWVudHMoZ2wuVFJJQU5HTEVfRkFOLCA0LCBnbC5VTlNJR05FRF9TSE9SVCwgKCB3ZWJHTERhdGEuaW5kaWNlcy5sZW5ndGggLSA0ICkgKiAyICk7XG5cbiAgICAgICAgICAgIHJlbmRlcmVyLnN0ZW5jaWxNYW5hZ2VyLnBvcFN0ZW5jaWwoZ3JhcGhpY3MsIHdlYkdMRGF0YSk7XG4gICAgICAgICAgICAqL1xuICAgICAgICB9XG4gICAgICAgIGVsc2VcbiAgICAgICAge1xuXG4gICAgICAgICAgICBzaGFkZXIgPSB0aGlzLnByaW1pdGl2ZVNoYWRlcjtcblxuICAgICAgICAgICAgcmVuZGVyZXIuYmluZFNoYWRlcihzaGFkZXIpXG5cbiAgICAgICAgICAgIHNoYWRlci51bmlmb3Jtcy50cmFuc2xhdGlvbk1hdHJpeCA9IGdyYXBoaWNzLndvcmxkVHJhbnNmb3JtLnRvQXJyYXkodHJ1ZSk7XG4gICAgICAgICAgICBzaGFkZXIudW5pZm9ybXMudGludCA9IHV0aWxzLmhleDJyZ2IoZ3JhcGhpY3MudGludCk7XG4gICAgICAgICAgICBzaGFkZXIudW5pZm9ybXMuYWxwaGEgPSBncmFwaGljcy53b3JsZEFscGhhO1xuXG5cbiAgICAgICAgICAgIGdsLmJpbmRCdWZmZXIoZ2wuQVJSQVlfQlVGRkVSLCB3ZWJHTERhdGEuYnVmZmVyKTtcblxuICAgICAgICAgICAgc2hhZGVyID0gdGhpcy5wcmltaXRpdmVTaGFkZXI7XG5cbiAgICAgICAgICAgIHNoYWRlci5hdHRyaWJ1dGVzLmFWZXJ0ZXhQb3NpdGlvbi5wb2ludGVyKGdsLkZMT0FULCBmYWxzZSwgNCAqIDYsIDApO1xuICAgICAgICAgICAgc2hhZGVyLmF0dHJpYnV0ZXMuYUNvbG9yLnBvaW50ZXIoZ2wuRkxPQVQsIGZhbHNlLCA0ICogNiwgMiAqIDQpO1xuXG4gICAgICAgICAgICBnbC5lbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShzaGFkZXIuYXR0cmlidXRlcy5hVmVydGV4UG9zaXRpb24ubG9jYXRpb24pO1xuICAgICAgICAgICAgZ2wuZW5hYmxlVmVydGV4QXR0cmliQXJyYXkoc2hhZGVyLmF0dHJpYnV0ZXMuYUNvbG9yLmxvY2F0aW9uKTtcblxuICAgICAgICAgICAgLy8gc2V0IHRoZSBpbmRleCBidWZmZXIhXG4gICAgICAgICAgICBnbC5iaW5kQnVmZmVyKGdsLkVMRU1FTlRfQVJSQVlfQlVGRkVSLCB3ZWJHTERhdGEuaW5kZXhCdWZmZXIpO1xuICAgICAgICAgICAgZ2wuZHJhd0VsZW1lbnRzKGdsLlRSSUFOR0xFX1NUUklQLCAgd2ViR0xEYXRhLmluZGljZXMubGVuZ3RoLCBnbC5VTlNJR05FRF9TSE9SVCwgMCApO1xuICAgICAgICB9XG5cbiAgICAgICAgcmVuZGVyZXIuZHJhd0NvdW50Kys7XG4gICAgfVxufTtcblxuLyoqXG4gKiBVcGRhdGVzIHRoZSBncmFwaGljcyBvYmplY3RcbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIGdyYXBoaWNzIHtQSVhJLkdyYXBoaWNzfSBUaGUgZ3JhcGhpY3Mgb2JqZWN0IHRvIHVwZGF0ZVxuICovXG5HcmFwaGljc1JlbmRlcmVyLnByb3RvdHlwZS51cGRhdGVHcmFwaGljcyA9IGZ1bmN0aW9uKGdyYXBoaWNzKVxue1xuICAgIHZhciBnbCA9IHRoaXMucmVuZGVyZXIuZ2w7XG5cbiAgICAgLy8gZ2V0IHRoZSBjb250ZXh0cyBncmFwaGljcyBvYmplY3RcbiAgICB2YXIgd2ViR0wgPSBncmFwaGljcy5fd2ViR0xbZ2wuaWRdO1xuXG4gICAgLy8gaWYgdGhlIGdyYXBoaWNzIG9iamVjdCBkb2VzIG5vdCBleGlzdCBpbiB0aGUgd2ViR0wgY29udGV4dCB0aW1lIHRvIGNyZWF0ZSBpdCFcbiAgICBpZiAoIXdlYkdMKVxuICAgIHtcbiAgICAgICAgd2ViR0wgPSBncmFwaGljcy5fd2ViR0xbZ2wuaWRdID0ge2xhc3RJbmRleDowLCBkYXRhOltdLCBnbDpnbH07XG4gICAgfVxuXG4gICBcbiAgICAvLyBmbGFnIHRoZSBncmFwaGljcyBhcyBub3QgZGlydHkgYXMgd2UgYXJlIGFib3V0IHRvIHVwZGF0ZSBpdC4uLlxuICAgIGdyYXBoaWNzLmRpcnR5ID0gZmFsc2U7XG5cbiAgICB2YXIgaTtcblxuICAgIC8vIGlmIHRoZSB1c2VyIGNsZWFyZWQgdGhlIGdyYXBoaWNzIG9iamVjdCB3ZSB3aWxsIG5lZWQgdG8gY2xlYXIgZXZlcnkgb2JqZWN0XG4gICAgaWYgKGdyYXBoaWNzLmNsZWFyRGlydHkpXG4gICAge1xuICAgICAgICBncmFwaGljcy5jbGVhckRpcnR5ID0gZmFsc2U7XG5cbiAgICAgICAgLy8gbG9vcCB0aHJvdWdoIGFuZCByZXR1cm4gYWxsIHRoZSB3ZWJHTERhdGFzIHRvIHRoZSBvYmplY3QgcG9vbCBzbyB0aGFuIGNhbiBiZSByZXVzZWQgbGF0ZXIgb25cbiAgICAgICAgZm9yIChpID0gMDsgaSA8IHdlYkdMLmRhdGEubGVuZ3RoOyBpKyspXG4gICAgICAgIHtcbiAgICAgICAgICAgIHZhciBncmFwaGljc0RhdGEgPSB3ZWJHTC5kYXRhW2ldO1xuICAgICAgICAgICAgZ3JhcGhpY3NEYXRhLnJlc2V0KCk7XG4gICAgICAgICAgICB0aGlzLmdyYXBoaWNzRGF0YVBvb2wucHVzaCggZ3JhcGhpY3NEYXRhICk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBjbGVhciB0aGUgYXJyYXkgYW5kIHJlc2V0IHRoZSBpbmRleC4uXG4gICAgICAgIHdlYkdMLmRhdGEgPSBbXTtcbiAgICAgICAgd2ViR0wubGFzdEluZGV4ID0gMDtcbiAgICB9XG5cbiAgICB2YXIgd2ViR0xEYXRhO1xuXG4gICAgLy8gbG9vcCB0aHJvdWdoIHRoZSBncmFwaGljcyBkYXRhcyBhbmQgY29uc3RydWN0IGVhY2ggb25lLi5cbiAgICAvLyBpZiB0aGUgb2JqZWN0IGlzIGEgY29tcGxleCBmaWxsIHRoZW4gdGhlIG5ldyBzdGVuY2lsIGJ1ZmZlciB0ZWNobmlxdWUgd2lsbCBiZSB1c2VkXG4gICAgLy8gb3RoZXIgd2lzZSBncmFwaGljcyBvYmplY3RzIHdpbGwgYmUgcHVzaGVkIGludG8gYSBiYXRjaC4uXG4gICAgZm9yIChpID0gd2ViR0wubGFzdEluZGV4OyBpIDwgZ3JhcGhpY3MuZ3JhcGhpY3NEYXRhLmxlbmd0aDsgaSsrKVxuICAgIHtcbiAgICAgICAgdmFyIGRhdGEgPSBncmFwaGljcy5ncmFwaGljc0RhdGFbaV07XG5cbiAgICAgICAgaWYgKGRhdGEudHlwZSA9PT0gQ09OU1QuU0hBUEVTLlBPTFkpXG4gICAgICAgIHtcbiAgICAgICAgICAgIC8vIG5lZWQgdG8gYWRkIHRoZSBwb2ludHMgdGhlIHRoZSBncmFwaGljcyBvYmplY3QuLlxuICAgICAgICAgICAgZGF0YS5wb2ludHMgPSBkYXRhLnNoYXBlLnBvaW50cy5zbGljZSgpO1xuICAgICAgICAgICAgaWYgKGRhdGEuc2hhcGUuY2xvc2VkKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIC8vIGNsb3NlIHRoZSBwb2x5IGlmIHRoZSB2YWx1ZSBpcyB0cnVlIVxuICAgICAgICAgICAgICAgIGlmIChkYXRhLnBvaW50c1swXSAhPT0gZGF0YS5wb2ludHNbZGF0YS5wb2ludHMubGVuZ3RoLTJdIHx8IGRhdGEucG9pbnRzWzFdICE9PSBkYXRhLnBvaW50c1tkYXRhLnBvaW50cy5sZW5ndGgtMV0pXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBkYXRhLnBvaW50cy5wdXNoKGRhdGEucG9pbnRzWzBdLCBkYXRhLnBvaW50c1sxXSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBNQUtFIFNVUkUgV0UgSEFWRSBUSEUgQ09SUkVDVCBUWVBFLi5cbiAgICAgICAgICAgIGlmIChkYXRhLmZpbGwpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgaWYgKGRhdGEucG9pbnRzLmxlbmd0aCA+PSA2KVxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGRhdGEucG9pbnRzLmxlbmd0aCA8IHRoaXMubWF4aW11bVNpbXBsZVBvbHlTaXplICogMilcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgd2ViR0xEYXRhID0gdGhpcy5zd2l0Y2hNb2RlKHdlYkdMLCAwKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNhbkRyYXdVc2luZ1NpbXBsZSA9IGJ1aWxkUG9seShkYXRhLCB3ZWJHTERhdGEpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWNhbkRyYXdVc2luZ1NpbXBsZSlcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3ZWJHTERhdGEgPSB0aGlzLnN3aXRjaE1vZGUod2ViR0wsIDEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1aWxkQ29tcGxleFBvbHkoZGF0YSwgd2ViR0xEYXRhKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgd2ViR0xEYXRhID0gdGhpcy5zd2l0Y2hNb2RlKHdlYkdMLCAxKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJ1aWxkQ29tcGxleFBvbHkoZGF0YSwgd2ViR0xEYXRhKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGRhdGEubGluZVdpZHRoID4gMClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB3ZWJHTERhdGEgPSB0aGlzLnN3aXRjaE1vZGUod2ViR0wsIDApO1xuICAgICAgICAgICAgICAgIGJ1aWxkTGluZShkYXRhLCB3ZWJHTERhdGEpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2VcbiAgICAgICAge1xuICAgICAgICAgICAgd2ViR0xEYXRhID0gdGhpcy5zd2l0Y2hNb2RlKHdlYkdMLCAwKTtcblxuICAgICAgICAgICAgaWYgKGRhdGEudHlwZSA9PT0gQ09OU1QuU0hBUEVTLlJFQ1QpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgYnVpbGRSZWN0YW5nbGUoZGF0YSwgd2ViR0xEYXRhKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGRhdGEudHlwZSA9PT0gQ09OU1QuU0hBUEVTLkNJUkMgfHwgZGF0YS50eXBlID09PSBDT05TVC5TSEFQRVMuRUxJUClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBidWlsZENpcmNsZShkYXRhLCB3ZWJHTERhdGEpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoZGF0YS50eXBlID09PSBDT05TVC5TSEFQRVMuUlJFQylcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBidWlsZFJvdW5kZWRSZWN0YW5nbGUoZGF0YSwgd2ViR0xEYXRhKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHdlYkdMLmxhc3RJbmRleCsrO1xuICAgIH1cblxuICAgIC8vIHVwbG9hZCBhbGwgdGhlIGRpcnR5IGRhdGEuLi5cbiAgICBmb3IgKGkgPSAwOyBpIDwgd2ViR0wuZGF0YS5sZW5ndGg7IGkrKylcbiAgICB7XG4gICAgICAgIHdlYkdMRGF0YSA9IHdlYkdMLmRhdGFbaV07XG5cbiAgICAgICAgaWYgKHdlYkdMRGF0YS5kaXJ0eSlcbiAgICAgICAge1xuICAgICAgICAgICAgd2ViR0xEYXRhLnVwbG9hZCgpO1xuICAgICAgICB9XG4gICAgfVxufTtcblxuLyoqXG4gKlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0gd2ViR0wge1dlYkdMUmVuZGVyaW5nQ29udGV4dH0gdGhlIGN1cnJlbnQgV2ViR0wgZHJhd2luZyBjb250ZXh0XG4gKiBAcGFyYW0gdHlwZSB7bnVtYmVyfSBUT0RPIEBBbHZpblxuICovXG5HcmFwaGljc1JlbmRlcmVyLnByb3RvdHlwZS5zd2l0Y2hNb2RlID0gZnVuY3Rpb24gKHdlYkdMLCB0eXBlKVxue1xuICAgIHZhciB3ZWJHTERhdGE7XG5cbiAgICBpZiAoIXdlYkdMLmRhdGEubGVuZ3RoKVxuICAgIHtcbiAgICAgICAgd2ViR0xEYXRhID0gdGhpcy5ncmFwaGljc0RhdGFQb29sLnBvcCgpIHx8IG5ldyBXZWJHTEdyYXBoaWNzRGF0YSh3ZWJHTC5nbCk7XG4gICAgICAgIHdlYkdMRGF0YS5tb2RlID0gdHlwZTtcbiAgICAgICAgd2ViR0wuZGF0YS5wdXNoKHdlYkdMRGF0YSk7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHdlYkdMRGF0YSA9IHdlYkdMLmRhdGFbd2ViR0wuZGF0YS5sZW5ndGgtMV07XG5cbiAgICAgICAgaWYgKCh3ZWJHTERhdGEucG9pbnRzLmxlbmd0aCA+IDMyMDAwMCkgfHwgd2ViR0xEYXRhLm1vZGUgIT09IHR5cGUgfHwgdHlwZSA9PT0gMSlcbiAgICAgICAge1xuICAgICAgICAgICAgd2ViR0xEYXRhID0gdGhpcy5ncmFwaGljc0RhdGFQb29sLnBvcCgpIHx8IG5ldyBXZWJHTEdyYXBoaWNzRGF0YSh3ZWJHTC5nbCk7XG4gICAgICAgICAgICB3ZWJHTERhdGEubW9kZSA9IHR5cGU7XG4gICAgICAgICAgICB3ZWJHTC5kYXRhLnB1c2god2ViR0xEYXRhKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHdlYkdMRGF0YS5kaXJ0eSA9IHRydWU7XG5cbiAgICByZXR1cm4gd2ViR0xEYXRhO1xufTtcblxuIiwidmFyIFNoYWRlciA9IHJlcXVpcmUoJ3BpeGktZ2wtY29yZScpLkdMU2hhZGVyO1xuXG4vKipcbiAqIFRoaXMgc2hhZGVyIGlzIHVzZWQgdG8gZHJhdyBzaW1wbGUgcHJpbWl0aXZlIHNoYXBlcyBmb3Ige0BsaW5rIFBJWEkuR3JhcGhpY3N9LlxuICpcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqIEBleHRlbmRzIFBJWEkuU2hhZGVyXG4gKiBAcGFyYW0gc2hhZGVyTWFuYWdlciB7U2hhZGVyTWFuYWdlcn0gVGhlIHdlYmdsIHNoYWRlciBtYW5hZ2VyIHRoaXMgc2hhZGVyIHdvcmtzIGZvci5cbiAqL1xuZnVuY3Rpb24gUHJpbWl0aXZlU2hhZGVyKGdsKVxue1xuICAgIFNoYWRlci5jYWxsKHRoaXMsXG4gICAgICAgIGdsLFxuICAgICAgICAvLyB2ZXJ0ZXggc2hhZGVyXG4gICAgICAgIFtcbiAgICAgICAgICAgICdhdHRyaWJ1dGUgdmVjMiBhVmVydGV4UG9zaXRpb247JyxcbiAgICAgICAgICAgICdhdHRyaWJ1dGUgdmVjNCBhQ29sb3I7JyxcblxuICAgICAgICAgICAgJ3VuaWZvcm0gbWF0MyB0cmFuc2xhdGlvbk1hdHJpeDsnLFxuICAgICAgICAgICAgJ3VuaWZvcm0gbWF0MyBwcm9qZWN0aW9uTWF0cml4OycsXG5cbiAgICAgICAgICAgICd1bmlmb3JtIGZsb2F0IGFscGhhOycsXG4gICAgICAgICAgICAndW5pZm9ybSBmbG9hdCBmbGlwWTsnLFxuICAgICAgICAgICAgJ3VuaWZvcm0gdmVjMyB0aW50OycsXG5cbiAgICAgICAgICAgICd2YXJ5aW5nIHZlYzQgdkNvbG9yOycsXG5cbiAgICAgICAgICAgICd2b2lkIG1haW4odm9pZCl7JyxcbiAgICAgICAgICAgICcgICBnbF9Qb3NpdGlvbiA9IHZlYzQoKHByb2plY3Rpb25NYXRyaXggKiB0cmFuc2xhdGlvbk1hdHJpeCAqIHZlYzMoYVZlcnRleFBvc2l0aW9uLCAxLjApKS54eSwgMC4wLCAxLjApOycsXG4gICAgICAgICAgICAnICAgdkNvbG9yID0gYUNvbG9yICogdmVjNCh0aW50ICogYWxwaGEsIGFscGhhKTsnLFxuICAgICAgICAgICAgJ30nXG4gICAgICAgIF0uam9pbignXFxuJyksXG4gICAgICAgIC8vIGZyYWdtZW50IHNoYWRlclxuICAgICAgICBbXG4gICAgICAgICAgICAncHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7JyxcblxuICAgICAgICAgICAgJ3ZhcnlpbmcgdmVjNCB2Q29sb3I7JyxcblxuICAgICAgICAgICAgJ3ZvaWQgbWFpbih2b2lkKXsnLFxuICAgICAgICAgICAgJyAgIGdsX0ZyYWdDb2xvciA9IHZDb2xvcjsnLFxuICAgICAgICAgICAgJ30nXG4gICAgICAgIF0uam9pbignXFxuJylcbiAgICApO1xufVxuXG5QcmltaXRpdmVTaGFkZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShTaGFkZXIucHJvdG90eXBlKTtcblByaW1pdGl2ZVNoYWRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBQcmltaXRpdmVTaGFkZXI7XG5cbm1vZHVsZS5leHBvcnRzID0gUHJpbWl0aXZlU2hhZGVyO1xuIiwiLyoqXG4gKiBBbiBvYmplY3QgY29udGFpbmluZyBXZWJHTCBzcGVjaWZpYyBwcm9wZXJ0aWVzIHRvIGJlIHVzZWQgYnkgdGhlIFdlYkdMIHJlbmRlcmVyXG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIGdsIHtXZWJHTFJlbmRlcmluZ0NvbnRleHR9IHRoZSBjdXJyZW50IFdlYkdMIGRyYXdpbmcgY29udGV4dFxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gV2ViR0xHcmFwaGljc0RhdGEoZ2wpIHtcblxuICAgIC8qKlxuICAgICAqIFRoZSBjdXJyZW50IFdlYkdMIGRyYXdpbmcgY29udGV4dFxuICAgICAqXG4gICAgICogQG1lbWJlciB7V2ViR0xSZW5kZXJpbmdDb250ZXh0fVxuICAgICAqL1xuICAgIHRoaXMuZ2wgPSBnbDtcblxuICAgIC8vVE9ETyBkb2VzIHRoaXMgbmVlZCB0byBiZSBzcGxpdCBiZWZvcmUgdXBsb2Rpbmc/P1xuICAgIC8qKlxuICAgICAqIEFuIGFycmF5IG9mIGNvbG9yIGNvbXBvbmVudHMgKHIsZyxiKVxuICAgICAqIEBtZW1iZXIge251bWJlcltdfVxuICAgICAqL1xuICAgIHRoaXMuY29sb3IgPSBbMCwwLDBdOyAvLyBjb2xvciBzcGxpdCFcblxuICAgIC8qKlxuICAgICAqIEFuIGFycmF5IG9mIHBvaW50cyB0byBkcmF3XG4gICAgICogQG1lbWJlciB7UElYSS5Qb2ludFtdfVxuICAgICAqL1xuICAgIHRoaXMucG9pbnRzID0gW107XG5cbiAgICAvKipcbiAgICAgKiBUaGUgaW5kaWNlcyBvZiB0aGUgdmVydGljZXNcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJbXX1cbiAgICAgKi9cbiAgICB0aGlzLmluZGljZXMgPSBbXTtcbiAgICAvKipcbiAgICAgKiBUaGUgbWFpbiBidWZmZXJcbiAgICAgKiBAbWVtYmVyIHtXZWJHTEJ1ZmZlcn1cbiAgICAgKi9cbiAgICB0aGlzLmJ1ZmZlciA9IGdsLmNyZWF0ZUJ1ZmZlcigpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGluZGV4IGJ1ZmZlclxuICAgICAqIEBtZW1iZXIge1dlYkdMQnVmZmVyfVxuICAgICAqL1xuICAgIHRoaXMuaW5kZXhCdWZmZXIgPSBnbC5jcmVhdGVCdWZmZXIoKTtcblxuICAgIC8qKlxuICAgICAqIHRvZG8gQGFsdmluXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMubW9kZSA9IDE7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYWxwaGEgb2YgdGhlIGdyYXBoaWNzXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMuYWxwaGEgPSAxO1xuXG4gICAgLyoqXG4gICAgICogV2hldGhlciB0aGlzIGdyYXBoaWNzIGlzIGRpcnR5IG9yIG5vdFxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICovXG4gICAgdGhpcy5kaXJ0eSA9IHRydWU7XG5cbiAgICB0aGlzLmdsUG9pbnRzID0gbnVsbDtcbiAgICB0aGlzLmdsSW5kaWNlcyA9IG51bGw7XG59XG5cbldlYkdMR3JhcGhpY3NEYXRhLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFdlYkdMR3JhcGhpY3NEYXRhO1xubW9kdWxlLmV4cG9ydHMgPSBXZWJHTEdyYXBoaWNzRGF0YTtcblxuLyoqXG4gKiBSZXNldHMgdGhlIHZlcnRpY2VzIGFuZCB0aGUgaW5kaWNlc1xuICovXG5XZWJHTEdyYXBoaWNzRGF0YS5wcm90b3R5cGUucmVzZXQgPSBmdW5jdGlvbiAoKSB7XG4gICAgdGhpcy5wb2ludHMubGVuZ3RoID0gMDtcbiAgICB0aGlzLmluZGljZXMubGVuZ3RoID0gMDtcbn07XG5cbi8qKlxuICogQmluZHMgdGhlIGJ1ZmZlcnMgYW5kIHVwbG9hZHMgdGhlIGRhdGFcbiAqL1xuV2ViR0xHcmFwaGljc0RhdGEucHJvdG90eXBlLnVwbG9hZCA9IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgZ2wgPSB0aGlzLmdsO1xuXG4vLyAgICB0aGlzLmxhc3RJbmRleCA9IGdyYXBoaWNzLmdyYXBoaWNzRGF0YS5sZW5ndGg7XG4gICAgdGhpcy5nbFBvaW50cyA9IG5ldyBGbG9hdDMyQXJyYXkodGhpcy5wb2ludHMpO1xuXG4gICAgZ2wuYmluZEJ1ZmZlcihnbC5BUlJBWV9CVUZGRVIsIHRoaXMuYnVmZmVyKTtcbiAgICBnbC5idWZmZXJEYXRhKGdsLkFSUkFZX0JVRkZFUiwgdGhpcy5nbFBvaW50cywgZ2wuU1RBVElDX0RSQVcpO1xuXG4gICAgdGhpcy5nbEluZGljZXMgPSBuZXcgVWludDE2QXJyYXkodGhpcy5pbmRpY2VzKTtcblxuICAgIGdsLmJpbmRCdWZmZXIoZ2wuRUxFTUVOVF9BUlJBWV9CVUZGRVIsIHRoaXMuaW5kZXhCdWZmZXIpO1xuICAgIGdsLmJ1ZmZlckRhdGEoZ2wuRUxFTUVOVF9BUlJBWV9CVUZGRVIsIHRoaXMuZ2xJbmRpY2VzLCBnbC5TVEFUSUNfRFJBVyk7XG5cbiAgICB0aGlzLmRpcnR5ID0gZmFsc2U7XG59O1xuXG5XZWJHTEdyYXBoaWNzRGF0YS5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uICgpIHtcbiAgICB0aGlzLmNvbG9yID0gbnVsbDtcbiAgICB0aGlzLnBvaW50cyA9IG51bGw7XG4gICAgdGhpcy5pbmRpY2VzID0gbnVsbDtcblxuICAgIHRoaXMuZ2wuZGVsZXRlQnVmZmVyKHRoaXMuYnVmZmVyKTtcbiAgICB0aGlzLmdsLmRlbGV0ZUJ1ZmZlcih0aGlzLmluZGV4QnVmZmVyKTtcbiAgICBcbiAgICB0aGlzLmdsID0gbnVsbDtcblxuICAgIHRoaXMuYnVmZmVyID0gbnVsbDtcbiAgICB0aGlzLmluZGV4QnVmZmVyID0gbnVsbDtcblxuICAgIHRoaXMuZ2xQb2ludHMgPSBudWxsO1xuICAgIHRoaXMuZ2xJbmRpY2VzID0gbnVsbDtcbn07XG4iLCJ2YXIgYnVpbGRMaW5lID0gcmVxdWlyZSgnLi9idWlsZExpbmUnKSxcbiAgICB1dGlscyA9IHJlcXVpcmUoJy4uLy4uL3V0aWxzJyk7XG5cbi8qKlxuICogQnVpbGRzIGEgY2lyY2xlIHRvIGRyYXdcbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIGdyYXBoaWNzRGF0YSB7UElYSS5HcmFwaGljc30gVGhlIGdyYXBoaWNzIG9iamVjdCB0byBkcmF3XG4gKiBAcGFyYW0gd2ViR0xEYXRhIHtvYmplY3R9IGFuIG9iamVjdCBjb250YWluaW5nIGFsbCB0aGUgd2ViR0wtc3BlY2lmaWMgaW5mb3JtYXRpb24gdG8gY3JlYXRlIHRoaXMgc2hhcGVcbiAqL1xudmFyIGJ1aWxkQ2lyY2xlID0gZnVuY3Rpb24gKGdyYXBoaWNzRGF0YSwgd2ViR0xEYXRhKVxue1xuICAgIC8vIG5lZWQgdG8gY29udmVydCBwb2ludHMgdG8gYSBuaWNlIHJlZ3VsYXIgZGF0YVxuICAgIHZhciBjaXJjbGVEYXRhID0gZ3JhcGhpY3NEYXRhLnNoYXBlO1xuICAgIHZhciB4ID0gY2lyY2xlRGF0YS54O1xuICAgIHZhciB5ID0gY2lyY2xlRGF0YS55O1xuICAgIHZhciB3aWR0aDtcbiAgICB2YXIgaGVpZ2h0O1xuXG4gICAgLy8gVE9ETyAtIGJpdCBoYWNreT8/XG4gICAgaWYgKGdyYXBoaWNzRGF0YS50eXBlID09PSBDT05TVC5TSEFQRVMuQ0lSQylcbiAgICB7XG4gICAgICAgIHdpZHRoID0gY2lyY2xlRGF0YS5yYWRpdXM7XG4gICAgICAgIGhlaWdodCA9IGNpcmNsZURhdGEucmFkaXVzO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICB3aWR0aCA9IGNpcmNsZURhdGEud2lkdGg7XG4gICAgICAgIGhlaWdodCA9IGNpcmNsZURhdGEuaGVpZ2h0O1xuICAgIH1cblxuICAgIHZhciB0b3RhbFNlZ3MgPSBNYXRoLmZsb29yKDMwICogTWF0aC5zcXJ0KGNpcmNsZURhdGEucmFkaXVzKSkgfHwgTWF0aC5mbG9vcigxNSAqIE1hdGguc3FydChjaXJjbGVEYXRhLndpZHRoICsgY2lyY2xlRGF0YS5oZWlnaHQpKTtcbiAgICB2YXIgc2VnID0gKE1hdGguUEkgKiAyKSAvIHRvdGFsU2VncyA7XG5cbiAgICB2YXIgaSA9IDA7XG5cbiAgICBpZiAoZ3JhcGhpY3NEYXRhLmZpbGwpXG4gICAge1xuICAgICAgICB2YXIgY29sb3IgPSB1dGlscy5oZXgycmdiKGdyYXBoaWNzRGF0YS5maWxsQ29sb3IpO1xuICAgICAgICB2YXIgYWxwaGEgPSBncmFwaGljc0RhdGEuZmlsbEFscGhhO1xuXG4gICAgICAgIHZhciByID0gY29sb3JbMF0gKiBhbHBoYTtcbiAgICAgICAgdmFyIGcgPSBjb2xvclsxXSAqIGFscGhhO1xuICAgICAgICB2YXIgYiA9IGNvbG9yWzJdICogYWxwaGE7XG5cbiAgICAgICAgdmFyIHZlcnRzID0gd2ViR0xEYXRhLnBvaW50cztcbiAgICAgICAgdmFyIGluZGljZXMgPSB3ZWJHTERhdGEuaW5kaWNlcztcblxuICAgICAgICB2YXIgdmVjUG9zID0gdmVydHMubGVuZ3RoLzY7XG5cbiAgICAgICAgaW5kaWNlcy5wdXNoKHZlY1Bvcyk7XG5cbiAgICAgICAgZm9yIChpID0gMDsgaSA8IHRvdGFsU2VncyArIDEgOyBpKyspXG4gICAgICAgIHtcbiAgICAgICAgICAgIHZlcnRzLnB1c2goeCx5LCByLCBnLCBiLCBhbHBoYSk7XG5cbiAgICAgICAgICAgIHZlcnRzLnB1c2goeCArIE1hdGguc2luKHNlZyAqIGkpICogd2lkdGgsXG4gICAgICAgICAgICAgICAgICAgICAgIHkgKyBNYXRoLmNvcyhzZWcgKiBpKSAqIGhlaWdodCxcbiAgICAgICAgICAgICAgICAgICAgICAgciwgZywgYiwgYWxwaGEpO1xuXG4gICAgICAgICAgICBpbmRpY2VzLnB1c2godmVjUG9zKyssIHZlY1BvcysrKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGluZGljZXMucHVzaCh2ZWNQb3MtMSk7XG4gICAgfVxuXG4gICAgaWYgKGdyYXBoaWNzRGF0YS5saW5lV2lkdGgpXG4gICAge1xuICAgICAgICB2YXIgdGVtcFBvaW50cyA9IGdyYXBoaWNzRGF0YS5wb2ludHM7XG5cbiAgICAgICAgZ3JhcGhpY3NEYXRhLnBvaW50cyA9IFtdO1xuXG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCB0b3RhbFNlZ3MgKyAxOyBpKyspXG4gICAgICAgIHtcbiAgICAgICAgICAgIGdyYXBoaWNzRGF0YS5wb2ludHMucHVzaCh4ICsgTWF0aC5zaW4oc2VnICogaSkgKiB3aWR0aCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB5ICsgTWF0aC5jb3Moc2VnICogaSkgKiBoZWlnaHQpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5idWlsZExpbmUoZ3JhcGhpY3NEYXRhLCB3ZWJHTERhdGEpO1xuXG4gICAgICAgIGdyYXBoaWNzRGF0YS5wb2ludHMgPSB0ZW1wUG9pbnRzO1xuICAgIH1cbn07XG5cblxubW9kdWxlLmV4cG9ydHMgPSBidWlsZENpcmNsZTsiLCJ2YXIgYnVpbGRMaW5lID0gcmVxdWlyZSgnLi9idWlsZExpbmUnKSxcbiAgICB1dGlscyA9IHJlcXVpcmUoJy4uLy4uL3V0aWxzJyk7XG4gICAgXG5cblxuLyoqXG4gKiBCdWlsZHMgYSBjb21wbGV4IHBvbHlnb24gdG8gZHJhd1xuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0gZ3JhcGhpY3NEYXRhIHtQSVhJLkdyYXBoaWNzfSBUaGUgZ3JhcGhpY3Mgb2JqZWN0IGNvbnRhaW5pbmcgYWxsIHRoZSBuZWNlc3NhcnkgcHJvcGVydGllc1xuICogQHBhcmFtIHdlYkdMRGF0YSB7b2JqZWN0fSBhbiBvYmplY3QgY29udGFpbmluZyBhbGwgdGhlIHdlYkdMLXNwZWNpZmljIGluZm9ybWF0aW9uIHRvIGNyZWF0ZSB0aGlzIHNoYXBlXG4gKi9cbnZhciBidWlsZENvbXBsZXhQb2x5ID0gZnVuY3Rpb24gKGdyYXBoaWNzRGF0YSwgd2ViR0xEYXRhKVxue1xuICAgIC8vVE9ETyAtIG5vIG5lZWQgdG8gY29weSB0aGlzIGFzIGl0IGdldHMgdHVybmVkIGludG8gYSBGTG9hdDMyQXJyYXkgYW55d2F5cy4uXG4gICAgdmFyIHBvaW50cyA9IGdyYXBoaWNzRGF0YS5wb2ludHMuc2xpY2UoKTtcblxuICAgIGlmIChwb2ludHMubGVuZ3RoIDwgNilcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBnZXQgZmlyc3QgYW5kIGxhc3QgcG9pbnQuLiBmaWd1cmUgb3V0IHRoZSBtaWRkbGUhXG4gICAgdmFyIGluZGljZXMgPSB3ZWJHTERhdGEuaW5kaWNlcztcbiAgICB3ZWJHTERhdGEucG9pbnRzID0gcG9pbnRzO1xuICAgIHdlYkdMRGF0YS5hbHBoYSA9IGdyYXBoaWNzRGF0YS5maWxsQWxwaGE7XG4gICAgd2ViR0xEYXRhLmNvbG9yID0gdXRpbHMuaGV4MnJnYihncmFwaGljc0RhdGEuZmlsbENvbG9yKTtcblxuICAgIC8vIGNhbGNsYXRlIHRoZSBib3VuZHMuLlxuICAgIHZhciBtaW5YID0gSW5maW5pdHk7XG4gICAgdmFyIG1heFggPSAtSW5maW5pdHk7XG5cbiAgICB2YXIgbWluWSA9IEluZmluaXR5O1xuICAgIHZhciBtYXhZID0gLUluZmluaXR5O1xuXG4gICAgdmFyIHgseTtcblxuICAgIC8vIGdldCBzaXplLi5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHBvaW50cy5sZW5ndGg7IGkrPTIpXG4gICAge1xuICAgICAgICB4ID0gcG9pbnRzW2ldO1xuICAgICAgICB5ID0gcG9pbnRzW2krMV07XG5cbiAgICAgICAgbWluWCA9IHggPCBtaW5YID8geCA6IG1pblg7XG4gICAgICAgIG1heFggPSB4ID4gbWF4WCA/IHggOiBtYXhYO1xuXG4gICAgICAgIG1pblkgPSB5IDwgbWluWSA/IHkgOiBtaW5ZO1xuICAgICAgICBtYXhZID0geSA+IG1heFkgPyB5IDogbWF4WTtcbiAgICB9XG5cbiAgICAvLyBhZGQgYSBxdWFkIHRvIHRoZSBlbmQgY29zIHRoZXJlIGlzIG5vIHBvaW50IG1ha2luZyBhbm90aGVyIGJ1ZmZlciFcbiAgICBwb2ludHMucHVzaChtaW5YLCBtaW5ZLFxuICAgICAgICAgICAgICAgIG1heFgsIG1pblksXG4gICAgICAgICAgICAgICAgbWF4WCwgbWF4WSxcbiAgICAgICAgICAgICAgICBtaW5YLCBtYXhZKTtcblxuICAgIC8vIHB1c2ggYSBxdWFkIG9udG8gdGhlIGVuZC4uXG5cbiAgICAvL1RPRE8gLSB0aGlzIGFpbnQgbmVlZGVkIVxuICAgIHZhciBsZW5ndGggPSBwb2ludHMubGVuZ3RoIC8gMjtcbiAgICBmb3IgKGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspXG4gICAge1xuICAgICAgICBpbmRpY2VzLnB1c2goIGkgKTtcbiAgICB9XG5cbn07XG5cblxuXG5tb2R1bGUuZXhwb3J0cyA9IGJ1aWxkQ29tcGxleFBvbHk7IiwidmFyIG1hdGggPSByZXF1aXJlKCcuLi8uLi9tYXRoJyksXG4gICAgdXRpbHMgPSByZXF1aXJlKCcuLi8uLi91dGlscycpO1xuXG4vKipcbiAqIEJ1aWxkcyBhIGxpbmUgdG8gZHJhd1xuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0gZ3JhcGhpY3NEYXRhIHtQSVhJLkdyYXBoaWNzfSBUaGUgZ3JhcGhpY3Mgb2JqZWN0IGNvbnRhaW5pbmcgYWxsIHRoZSBuZWNlc3NhcnkgcHJvcGVydGllc1xuICogQHBhcmFtIHdlYkdMRGF0YSB7b2JqZWN0fSBhbiBvYmplY3QgY29udGFpbmluZyBhbGwgdGhlIHdlYkdMLXNwZWNpZmljIGluZm9ybWF0aW9uIHRvIGNyZWF0ZSB0aGlzIHNoYXBlXG4gKi9cbnZhciBidWlsZExpbmUgPSBmdW5jdGlvbiAoZ3JhcGhpY3NEYXRhLCB3ZWJHTERhdGEpXG57XG4gICAgLy8gVE9ETyBPUFRJTUlTRSFcbiAgICB2YXIgaSA9IDA7XG4gICAgdmFyIHBvaW50cyA9IGdyYXBoaWNzRGF0YS5wb2ludHM7XG5cbiAgICBpZiAocG9pbnRzLmxlbmd0aCA9PT0gMClcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgLy8gaWYgdGhlIGxpbmUgd2lkdGggaXMgYW4gb2RkIG51bWJlciBhZGQgMC41IHRvIGFsaWduIHRvIGEgd2hvbGUgcGl4ZWxcbiAgICAvLyBjb21tZW50aW5nIHRoaXMgb3V0IGZpeGVzICM3MTEgYW5kICMxNjIwXG4gICAgLy8gaWYgKGdyYXBoaWNzRGF0YS5saW5lV2lkdGglMilcbiAgICAvLyB7XG4gICAgLy8gICAgIGZvciAoaSA9IDA7IGkgPCBwb2ludHMubGVuZ3RoOyBpKyspXG4gICAgLy8gICAgIHtcbiAgICAvLyAgICAgICAgIHBvaW50c1tpXSArPSAwLjU7XG4gICAgLy8gICAgIH1cbiAgICAvLyB9XG5cbiAgICAvLyBnZXQgZmlyc3QgYW5kIGxhc3QgcG9pbnQuLiBmaWd1cmUgb3V0IHRoZSBtaWRkbGUhXG4gICAgdmFyIGZpcnN0UG9pbnQgPSBuZXcgbWF0aC5Qb2ludChwb2ludHNbMF0sIHBvaW50c1sxXSk7XG4gICAgdmFyIGxhc3RQb2ludCA9IG5ldyBtYXRoLlBvaW50KHBvaW50c1twb2ludHMubGVuZ3RoIC0gMl0sIHBvaW50c1twb2ludHMubGVuZ3RoIC0gMV0pO1xuXG4gICAgLy8gaWYgdGhlIGZpcnN0IHBvaW50IGlzIHRoZSBsYXN0IHBvaW50IC0gZ29ubmEgaGF2ZSBpc3N1ZXMgOilcbiAgICBpZiAoZmlyc3RQb2ludC54ID09PSBsYXN0UG9pbnQueCAmJiBmaXJzdFBvaW50LnkgPT09IGxhc3RQb2ludC55KVxuICAgIHtcbiAgICAgICAgLy8gbmVlZCB0byBjbG9uZSBhcyB3ZSBhcmUgZ29pbmcgdG8gc2xpZ2h0bHkgbW9kaWZ5IHRoZSBzaGFwZS4uXG4gICAgICAgIHBvaW50cyA9IHBvaW50cy5zbGljZSgpO1xuXG4gICAgICAgIHBvaW50cy5wb3AoKTtcbiAgICAgICAgcG9pbnRzLnBvcCgpO1xuXG4gICAgICAgIGxhc3RQb2ludCA9IG5ldyBtYXRoLlBvaW50KHBvaW50c1twb2ludHMubGVuZ3RoIC0gMl0sIHBvaW50c1twb2ludHMubGVuZ3RoIC0gMV0pO1xuXG4gICAgICAgIHZhciBtaWRQb2ludFggPSBsYXN0UG9pbnQueCArIChmaXJzdFBvaW50LnggLSBsYXN0UG9pbnQueCkgKjAuNTtcbiAgICAgICAgdmFyIG1pZFBvaW50WSA9IGxhc3RQb2ludC55ICsgKGZpcnN0UG9pbnQueSAtIGxhc3RQb2ludC55KSAqMC41O1xuXG4gICAgICAgIHBvaW50cy51bnNoaWZ0KG1pZFBvaW50WCwgbWlkUG9pbnRZKTtcbiAgICAgICAgcG9pbnRzLnB1c2gobWlkUG9pbnRYLCBtaWRQb2ludFkpO1xuICAgIH1cblxuICAgIHZhciB2ZXJ0cyA9IHdlYkdMRGF0YS5wb2ludHM7XG4gICAgdmFyIGluZGljZXMgPSB3ZWJHTERhdGEuaW5kaWNlcztcbiAgICB2YXIgbGVuZ3RoID0gcG9pbnRzLmxlbmd0aCAvIDI7XG4gICAgdmFyIGluZGV4Q291bnQgPSBwb2ludHMubGVuZ3RoO1xuICAgIHZhciBpbmRleFN0YXJ0ID0gdmVydHMubGVuZ3RoLzY7XG5cbiAgICAvLyBEUkFXIHRoZSBMaW5lXG4gICAgdmFyIHdpZHRoID0gZ3JhcGhpY3NEYXRhLmxpbmVXaWR0aCAvIDI7XG5cbiAgICAvLyBzb3J0IGNvbG9yXG4gICAgdmFyIGNvbG9yID0gdXRpbHMuaGV4MnJnYihncmFwaGljc0RhdGEubGluZUNvbG9yKTtcbiAgICB2YXIgYWxwaGEgPSBncmFwaGljc0RhdGEubGluZUFscGhhO1xuICAgIHZhciByID0gY29sb3JbMF0gKiBhbHBoYTtcbiAgICB2YXIgZyA9IGNvbG9yWzFdICogYWxwaGE7XG4gICAgdmFyIGIgPSBjb2xvclsyXSAqIGFscGhhO1xuXG4gICAgdmFyIHB4LCBweSwgcDF4LCBwMXksIHAyeCwgcDJ5LCBwM3gsIHAzeTtcbiAgICB2YXIgcGVycHgsIHBlcnB5LCBwZXJwMngsIHBlcnAyeSwgcGVycDN4LCBwZXJwM3k7XG4gICAgdmFyIGExLCBiMSwgYzEsIGEyLCBiMiwgYzI7XG4gICAgdmFyIGRlbm9tLCBwZGlzdCwgZGlzdDtcblxuICAgIHAxeCA9IHBvaW50c1swXTtcbiAgICBwMXkgPSBwb2ludHNbMV07XG5cbiAgICBwMnggPSBwb2ludHNbMl07XG4gICAgcDJ5ID0gcG9pbnRzWzNdO1xuXG4gICAgcGVycHggPSAtKHAxeSAtIHAyeSk7XG4gICAgcGVycHkgPSAgcDF4IC0gcDJ4O1xuXG4gICAgZGlzdCA9IE1hdGguc3FydChwZXJweCpwZXJweCArIHBlcnB5KnBlcnB5KTtcblxuICAgIHBlcnB4IC89IGRpc3Q7XG4gICAgcGVycHkgLz0gZGlzdDtcbiAgICBwZXJweCAqPSB3aWR0aDtcbiAgICBwZXJweSAqPSB3aWR0aDtcblxuICAgIC8vIHN0YXJ0XG4gICAgdmVydHMucHVzaChwMXggLSBwZXJweCAsIHAxeSAtIHBlcnB5LFxuICAgICAgICAgICAgICAgIHIsIGcsIGIsIGFscGhhKTtcblxuICAgIHZlcnRzLnB1c2gocDF4ICsgcGVycHggLCBwMXkgKyBwZXJweSxcbiAgICAgICAgICAgICAgICByLCBnLCBiLCBhbHBoYSk7XG5cbiAgICBmb3IgKGkgPSAxOyBpIDwgbGVuZ3RoLTE7IGkrKylcbiAgICB7XG4gICAgICAgIHAxeCA9IHBvaW50c1soaS0xKSoyXTtcbiAgICAgICAgcDF5ID0gcG9pbnRzWyhpLTEpKjIgKyAxXTtcblxuICAgICAgICBwMnggPSBwb2ludHNbKGkpKjJdO1xuICAgICAgICBwMnkgPSBwb2ludHNbKGkpKjIgKyAxXTtcblxuICAgICAgICBwM3ggPSBwb2ludHNbKGkrMSkqMl07XG4gICAgICAgIHAzeSA9IHBvaW50c1soaSsxKSoyICsgMV07XG5cbiAgICAgICAgcGVycHggPSAtKHAxeSAtIHAyeSk7XG4gICAgICAgIHBlcnB5ID0gcDF4IC0gcDJ4O1xuXG4gICAgICAgIGRpc3QgPSBNYXRoLnNxcnQocGVycHgqcGVycHggKyBwZXJweSpwZXJweSk7XG4gICAgICAgIHBlcnB4IC89IGRpc3Q7XG4gICAgICAgIHBlcnB5IC89IGRpc3Q7XG4gICAgICAgIHBlcnB4ICo9IHdpZHRoO1xuICAgICAgICBwZXJweSAqPSB3aWR0aDtcblxuICAgICAgICBwZXJwMnggPSAtKHAyeSAtIHAzeSk7XG4gICAgICAgIHBlcnAyeSA9IHAyeCAtIHAzeDtcblxuICAgICAgICBkaXN0ID0gTWF0aC5zcXJ0KHBlcnAyeCpwZXJwMnggKyBwZXJwMnkqcGVycDJ5KTtcbiAgICAgICAgcGVycDJ4IC89IGRpc3Q7XG4gICAgICAgIHBlcnAyeSAvPSBkaXN0O1xuICAgICAgICBwZXJwMnggKj0gd2lkdGg7XG4gICAgICAgIHBlcnAyeSAqPSB3aWR0aDtcblxuICAgICAgICBhMSA9ICgtcGVycHkgKyBwMXkpIC0gKC1wZXJweSArIHAyeSk7XG4gICAgICAgIGIxID0gKC1wZXJweCArIHAyeCkgLSAoLXBlcnB4ICsgcDF4KTtcbiAgICAgICAgYzEgPSAoLXBlcnB4ICsgcDF4KSAqICgtcGVycHkgKyBwMnkpIC0gKC1wZXJweCArIHAyeCkgKiAoLXBlcnB5ICsgcDF5KTtcbiAgICAgICAgYTIgPSAoLXBlcnAyeSArIHAzeSkgLSAoLXBlcnAyeSArIHAyeSk7XG4gICAgICAgIGIyID0gKC1wZXJwMnggKyBwMngpIC0gKC1wZXJwMnggKyBwM3gpO1xuICAgICAgICBjMiA9ICgtcGVycDJ4ICsgcDN4KSAqICgtcGVycDJ5ICsgcDJ5KSAtICgtcGVycDJ4ICsgcDJ4KSAqICgtcGVycDJ5ICsgcDN5KTtcblxuICAgICAgICBkZW5vbSA9IGExKmIyIC0gYTIqYjE7XG5cbiAgICAgICAgaWYgKE1hdGguYWJzKGRlbm9tKSA8IDAuMSApXG4gICAgICAgIHtcblxuICAgICAgICAgICAgZGVub20rPTEwLjE7XG4gICAgICAgICAgICB2ZXJ0cy5wdXNoKHAyeCAtIHBlcnB4ICwgcDJ5IC0gcGVycHksXG4gICAgICAgICAgICAgICAgciwgZywgYiwgYWxwaGEpO1xuXG4gICAgICAgICAgICB2ZXJ0cy5wdXNoKHAyeCArIHBlcnB4ICwgcDJ5ICsgcGVycHksXG4gICAgICAgICAgICAgICAgciwgZywgYiwgYWxwaGEpO1xuXG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHB4ID0gKGIxKmMyIC0gYjIqYzEpL2Rlbm9tO1xuICAgICAgICBweSA9IChhMipjMSAtIGExKmMyKS9kZW5vbTtcblxuXG4gICAgICAgIHBkaXN0ID0gKHB4IC1wMngpICogKHB4IC1wMngpICsgKHB5IC1wMnkpICogKHB5IC1wMnkpO1xuXG5cbiAgICAgICAgaWYgKHBkaXN0ID4gMTQwICogMTQwKVxuICAgICAgICB7XG4gICAgICAgICAgICBwZXJwM3ggPSBwZXJweCAtIHBlcnAyeDtcbiAgICAgICAgICAgIHBlcnAzeSA9IHBlcnB5IC0gcGVycDJ5O1xuXG4gICAgICAgICAgICBkaXN0ID0gTWF0aC5zcXJ0KHBlcnAzeCpwZXJwM3ggKyBwZXJwM3kqcGVycDN5KTtcbiAgICAgICAgICAgIHBlcnAzeCAvPSBkaXN0O1xuICAgICAgICAgICAgcGVycDN5IC89IGRpc3Q7XG4gICAgICAgICAgICBwZXJwM3ggKj0gd2lkdGg7XG4gICAgICAgICAgICBwZXJwM3kgKj0gd2lkdGg7XG5cbiAgICAgICAgICAgIHZlcnRzLnB1c2gocDJ4IC0gcGVycDN4LCBwMnkgLXBlcnAzeSk7XG4gICAgICAgICAgICB2ZXJ0cy5wdXNoKHIsIGcsIGIsIGFscGhhKTtcblxuICAgICAgICAgICAgdmVydHMucHVzaChwMnggKyBwZXJwM3gsIHAyeSArcGVycDN5KTtcbiAgICAgICAgICAgIHZlcnRzLnB1c2gociwgZywgYiwgYWxwaGEpO1xuXG4gICAgICAgICAgICB2ZXJ0cy5wdXNoKHAyeCAtIHBlcnAzeCwgcDJ5IC1wZXJwM3kpO1xuICAgICAgICAgICAgdmVydHMucHVzaChyLCBnLCBiLCBhbHBoYSk7XG5cbiAgICAgICAgICAgIGluZGV4Q291bnQrKztcbiAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgIHtcblxuICAgICAgICAgICAgdmVydHMucHVzaChweCAsIHB5KTtcbiAgICAgICAgICAgIHZlcnRzLnB1c2gociwgZywgYiwgYWxwaGEpO1xuXG4gICAgICAgICAgICB2ZXJ0cy5wdXNoKHAyeCAtIChweC1wMngpLCBwMnkgLSAocHkgLSBwMnkpKTtcbiAgICAgICAgICAgIHZlcnRzLnB1c2gociwgZywgYiwgYWxwaGEpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcDF4ID0gcG9pbnRzWyhsZW5ndGgtMikqMl07XG4gICAgcDF5ID0gcG9pbnRzWyhsZW5ndGgtMikqMiArIDFdO1xuXG4gICAgcDJ4ID0gcG9pbnRzWyhsZW5ndGgtMSkqMl07XG4gICAgcDJ5ID0gcG9pbnRzWyhsZW5ndGgtMSkqMiArIDFdO1xuXG4gICAgcGVycHggPSAtKHAxeSAtIHAyeSk7XG4gICAgcGVycHkgPSBwMXggLSBwMng7XG5cbiAgICBkaXN0ID0gTWF0aC5zcXJ0KHBlcnB4KnBlcnB4ICsgcGVycHkqcGVycHkpO1xuICAgIHBlcnB4IC89IGRpc3Q7XG4gICAgcGVycHkgLz0gZGlzdDtcbiAgICBwZXJweCAqPSB3aWR0aDtcbiAgICBwZXJweSAqPSB3aWR0aDtcblxuICAgIHZlcnRzLnB1c2gocDJ4IC0gcGVycHggLCBwMnkgLSBwZXJweSk7XG4gICAgdmVydHMucHVzaChyLCBnLCBiLCBhbHBoYSk7XG5cbiAgICB2ZXJ0cy5wdXNoKHAyeCArIHBlcnB4ICwgcDJ5ICsgcGVycHkpO1xuICAgIHZlcnRzLnB1c2gociwgZywgYiwgYWxwaGEpO1xuXG4gICAgaW5kaWNlcy5wdXNoKGluZGV4U3RhcnQpO1xuXG4gICAgZm9yIChpID0gMDsgaSA8IGluZGV4Q291bnQ7IGkrKylcbiAgICB7XG4gICAgICAgIGluZGljZXMucHVzaChpbmRleFN0YXJ0KyspO1xuICAgIH1cblxuICAgIGluZGljZXMucHVzaChpbmRleFN0YXJ0LTEpO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBidWlsZExpbmU7IiwidmFyIHV0aWxzID0gcmVxdWlyZSgnLi4vLi4vdXRpbHMnKTtcblxuLyoqXG4gKiBCdWlsZHMgYSBwb2x5Z29uIHRvIGRyYXdcbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIGdyYXBoaWNzRGF0YSB7UElYSS5XZWJHTEdyYXBoaWNzRGF0YX0gVGhlIGdyYXBoaWNzIG9iamVjdCBjb250YWluaW5nIGFsbCB0aGUgbmVjZXNzYXJ5IHByb3BlcnRpZXNcbiAqIEBwYXJhbSB3ZWJHTERhdGEge29iamVjdH0gYW4gb2JqZWN0IGNvbnRhaW5pbmcgYWxsIHRoZSB3ZWJHTC1zcGVjaWZpYyBpbmZvcm1hdGlvbiB0byBjcmVhdGUgdGhpcyBzaGFwZVxuICovXG52YXIgYnVpbGRQb2x5ID0gZnVuY3Rpb24gKGdyYXBoaWNzRGF0YSwgd2ViR0xEYXRhKVxue1xuICAgIHZhciBwb2ludHMgPSBncmFwaGljc0RhdGEucG9pbnRzO1xuXG4gICAgaWYgKHBvaW50cy5sZW5ndGggPCA2KVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIGdldCBmaXJzdCBhbmQgbGFzdCBwb2ludC4uIGZpZ3VyZSBvdXQgdGhlIG1pZGRsZSFcbiAgICB2YXIgdmVydHMgPSB3ZWJHTERhdGEucG9pbnRzO1xuICAgIHZhciBpbmRpY2VzID0gd2ViR0xEYXRhLmluZGljZXM7XG5cbiAgICB2YXIgbGVuZ3RoID0gcG9pbnRzLmxlbmd0aCAvIDI7XG5cbiAgICAvLyBzb3J0IGNvbG9yXG4gICAgdmFyIGNvbG9yID0gdXRpbHMuaGV4MnJnYihncmFwaGljc0RhdGEuZmlsbENvbG9yKTtcbiAgICB2YXIgYWxwaGEgPSBncmFwaGljc0RhdGEuZmlsbEFscGhhO1xuICAgIHZhciByID0gY29sb3JbMF0gKiBhbHBoYTtcbiAgICB2YXIgZyA9IGNvbG9yWzFdICogYWxwaGE7XG4gICAgdmFyIGIgPSBjb2xvclsyXSAqIGFscGhhO1xuXG4gICAgdmFyIHRyaWFuZ2xlcyA9IGVhcmN1dChwb2ludHMsIG51bGwsIDIpO1xuXG4gICAgaWYgKCF0cmlhbmdsZXMpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHZhciB2ZXJ0UG9zID0gdmVydHMubGVuZ3RoIC8gNjtcblxuICAgIHZhciBpID0gMDtcblxuICAgIGZvciAoaSA9IDA7IGkgPCB0cmlhbmdsZXMubGVuZ3RoOyBpKz0zKVxuICAgIHtcbiAgICAgICAgaW5kaWNlcy5wdXNoKHRyaWFuZ2xlc1tpXSArIHZlcnRQb3MpO1xuICAgICAgICBpbmRpY2VzLnB1c2godHJpYW5nbGVzW2ldICsgdmVydFBvcyk7XG4gICAgICAgIGluZGljZXMucHVzaCh0cmlhbmdsZXNbaSsxXSArIHZlcnRQb3MpO1xuICAgICAgICBpbmRpY2VzLnB1c2godHJpYW5nbGVzW2krMl0gK3ZlcnRQb3MpO1xuICAgICAgICBpbmRpY2VzLnB1c2godHJpYW5nbGVzW2krMl0gKyB2ZXJ0UG9zKTtcbiAgICB9XG5cbiAgICBmb3IgKGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspXG4gICAge1xuICAgICAgICB2ZXJ0cy5wdXNoKHBvaW50c1tpICogMl0sIHBvaW50c1tpICogMiArIDFdLFxuICAgICAgICAgICAgICAgICAgIHIsIGcsIGIsIGFscGhhKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdHJ1ZTtcbn07XG5cblxubW9kdWxlLmV4cG9ydHMgPSBidWlsZFBvbHk7XG4iLCJ2YXIgYnVpbGRMaW5lID0gcmVxdWlyZSgnLi9idWlsZExpbmUnKSxcbiAgICB1dGlscyA9IHJlcXVpcmUoJy4uLy4uL3V0aWxzJyk7XG5cbi8qKlxuICogQnVpbGRzIGEgcmVjdGFuZ2xlIHRvIGRyYXdcbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIGdyYXBoaWNzRGF0YSB7UElYSS5HcmFwaGljc30gVGhlIGdyYXBoaWNzIG9iamVjdCBjb250YWluaW5nIGFsbCB0aGUgbmVjZXNzYXJ5IHByb3BlcnRpZXNcbiAqIEBwYXJhbSB3ZWJHTERhdGEge29iamVjdH0gYW4gb2JqZWN0IGNvbnRhaW5pbmcgYWxsIHRoZSB3ZWJHTC1zcGVjaWZpYyBpbmZvcm1hdGlvbiB0byBjcmVhdGUgdGhpcyBzaGFwZVxuICovXG52YXIgYnVpbGRSZWN0YW5nbGUgPSBmdW5jdGlvbiAoZ3JhcGhpY3NEYXRhLCB3ZWJHTERhdGEpXG57XG4gICAgLy8gLS0tIC8vXG4gICAgLy8gbmVlZCB0byBjb252ZXJ0IHBvaW50cyB0byBhIG5pY2UgcmVndWxhciBkYXRhXG4gICAgLy9cbiAgICB2YXIgcmVjdERhdGEgPSBncmFwaGljc0RhdGEuc2hhcGU7XG4gICAgdmFyIHggPSByZWN0RGF0YS54O1xuICAgIHZhciB5ID0gcmVjdERhdGEueTtcbiAgICB2YXIgd2lkdGggPSByZWN0RGF0YS53aWR0aDtcbiAgICB2YXIgaGVpZ2h0ID0gcmVjdERhdGEuaGVpZ2h0O1xuXG4gICAgaWYgKGdyYXBoaWNzRGF0YS5maWxsKVxuICAgIHtcbiAgICAgICAgdmFyIGNvbG9yID0gdXRpbHMuaGV4MnJnYihncmFwaGljc0RhdGEuZmlsbENvbG9yKTtcbiAgICAgICAgdmFyIGFscGhhID0gZ3JhcGhpY3NEYXRhLmZpbGxBbHBoYTtcblxuICAgICAgICB2YXIgciA9IGNvbG9yWzBdICogYWxwaGE7XG4gICAgICAgIHZhciBnID0gY29sb3JbMV0gKiBhbHBoYTtcbiAgICAgICAgdmFyIGIgPSBjb2xvclsyXSAqIGFscGhhO1xuXG4gICAgICAgIHZhciB2ZXJ0cyA9IHdlYkdMRGF0YS5wb2ludHM7XG4gICAgICAgIHZhciBpbmRpY2VzID0gd2ViR0xEYXRhLmluZGljZXM7XG5cbiAgICAgICAgdmFyIHZlcnRQb3MgPSB2ZXJ0cy5sZW5ndGgvNjtcblxuICAgICAgICAvLyBzdGFydFxuICAgICAgICB2ZXJ0cy5wdXNoKHgsIHkpO1xuICAgICAgICB2ZXJ0cy5wdXNoKHIsIGcsIGIsIGFscGhhKTtcblxuICAgICAgICB2ZXJ0cy5wdXNoKHggKyB3aWR0aCwgeSk7XG4gICAgICAgIHZlcnRzLnB1c2gociwgZywgYiwgYWxwaGEpO1xuXG4gICAgICAgIHZlcnRzLnB1c2goeCAsIHkgKyBoZWlnaHQpO1xuICAgICAgICB2ZXJ0cy5wdXNoKHIsIGcsIGIsIGFscGhhKTtcblxuICAgICAgICB2ZXJ0cy5wdXNoKHggKyB3aWR0aCwgeSArIGhlaWdodCk7XG4gICAgICAgIHZlcnRzLnB1c2gociwgZywgYiwgYWxwaGEpO1xuXG4gICAgICAgIC8vIGluc2VydCAyIGRlYWQgdHJpYW5nbGVzLi5cbiAgICAgICAgaW5kaWNlcy5wdXNoKHZlcnRQb3MsIHZlcnRQb3MsIHZlcnRQb3MrMSwgdmVydFBvcysyLCB2ZXJ0UG9zKzMsIHZlcnRQb3MrMyk7XG4gICAgfVxuXG4gICAgaWYgKGdyYXBoaWNzRGF0YS5saW5lV2lkdGgpXG4gICAge1xuICAgICAgICB2YXIgdGVtcFBvaW50cyA9IGdyYXBoaWNzRGF0YS5wb2ludHM7XG5cbiAgICAgICAgZ3JhcGhpY3NEYXRhLnBvaW50cyA9IFt4LCB5LFxuICAgICAgICAgICAgICAgICAgeCArIHdpZHRoLCB5LFxuICAgICAgICAgICAgICAgICAgeCArIHdpZHRoLCB5ICsgaGVpZ2h0LFxuICAgICAgICAgICAgICAgICAgeCwgeSArIGhlaWdodCxcbiAgICAgICAgICAgICAgICAgIHgsIHldO1xuXG5cbiAgICAgICAgYnVpbGRMaW5lKGdyYXBoaWNzRGF0YSwgd2ViR0xEYXRhKTtcblxuICAgICAgICBncmFwaGljc0RhdGEucG9pbnRzID0gdGVtcFBvaW50cztcbiAgICB9XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGJ1aWxkUmVjdGFuZ2xlOyIsInZhciBidWlsZExpbmUgPSByZXF1aXJlKCcuL2J1aWxkTGluZScpLFxuICAgIHV0aWxzID0gcmVxdWlyZSgnLi4vLi4vdXRpbHMnKTtcbiAgICBcbi8qKlxuICogQnVpbGRzIGEgcm91bmRlZCByZWN0YW5nbGUgdG8gZHJhd1xuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0gZ3JhcGhpY3NEYXRhIHtQSVhJLkdyYXBoaWNzfSBUaGUgZ3JhcGhpY3Mgb2JqZWN0IGNvbnRhaW5pbmcgYWxsIHRoZSBuZWNlc3NhcnkgcHJvcGVydGllc1xuICogQHBhcmFtIHdlYkdMRGF0YSB7b2JqZWN0fSBhbiBvYmplY3QgY29udGFpbmluZyBhbGwgdGhlIHdlYkdMLXNwZWNpZmljIGluZm9ybWF0aW9uIHRvIGNyZWF0ZSB0aGlzIHNoYXBlXG4gKi9cbmJ1aWxkUm91bmRlZFJlY3RhbmdsZSA9IGZ1bmN0aW9uIChncmFwaGljc0RhdGEsIHdlYkdMRGF0YSlcbntcbiAgICB2YXIgcnJlY3REYXRhID0gZ3JhcGhpY3NEYXRhLnNoYXBlO1xuICAgIHZhciB4ID0gcnJlY3REYXRhLng7XG4gICAgdmFyIHkgPSBycmVjdERhdGEueTtcbiAgICB2YXIgd2lkdGggPSBycmVjdERhdGEud2lkdGg7XG4gICAgdmFyIGhlaWdodCA9IHJyZWN0RGF0YS5oZWlnaHQ7XG5cbiAgICB2YXIgcmFkaXVzID0gcnJlY3REYXRhLnJhZGl1cztcblxuICAgIHZhciByZWNQb2ludHMgPSBbXTtcbiAgICByZWNQb2ludHMucHVzaCh4LCB5ICsgcmFkaXVzKTtcbiAgICB0aGlzLnF1YWRyYXRpY0JlemllckN1cnZlKHgsIHkgKyBoZWlnaHQgLSByYWRpdXMsIHgsIHkgKyBoZWlnaHQsIHggKyByYWRpdXMsIHkgKyBoZWlnaHQsIHJlY1BvaW50cyk7XG4gICAgdGhpcy5xdWFkcmF0aWNCZXppZXJDdXJ2ZSh4ICsgd2lkdGggLSByYWRpdXMsIHkgKyBoZWlnaHQsIHggKyB3aWR0aCwgeSArIGhlaWdodCwgeCArIHdpZHRoLCB5ICsgaGVpZ2h0IC0gcmFkaXVzLCByZWNQb2ludHMpO1xuICAgIHRoaXMucXVhZHJhdGljQmV6aWVyQ3VydmUoeCArIHdpZHRoLCB5ICsgcmFkaXVzLCB4ICsgd2lkdGgsIHksIHggKyB3aWR0aCAtIHJhZGl1cywgeSwgcmVjUG9pbnRzKTtcbiAgICB0aGlzLnF1YWRyYXRpY0JlemllckN1cnZlKHggKyByYWRpdXMsIHksIHgsIHksIHgsIHkgKyByYWRpdXMgKyAwLjAwMDAwMDAwMDEsIHJlY1BvaW50cyk7XG5cbiAgICAvLyB0aGlzIHRpbnkgbnVtYmVyIGRlYWxzIHdpdGggdGhlIGlzc3VlIHRoYXQgb2NjdXJzIHdoZW4gcG9pbnRzIG92ZXJsYXAgYW5kIGVhcmN1dCBmYWlscyB0byB0cmlhbmd1bGF0ZSB0aGUgaXRlbS5cbiAgICAvLyBUT0RPIC0gZml4IHRoaXMgcHJvcGVybHksIHRoaXMgaXMgbm90IHZlcnkgZWxlZ2FudC4uIGJ1dCBpdCB3b3JrcyBmb3Igbm93LlxuXG4gICAgaWYgKGdyYXBoaWNzRGF0YS5maWxsKVxuICAgIHtcbiAgICAgICAgdmFyIGNvbG9yID0gdXRpbHMuaGV4MnJnYihncmFwaGljc0RhdGEuZmlsbENvbG9yKTtcbiAgICAgICAgdmFyIGFscGhhID0gZ3JhcGhpY3NEYXRhLmZpbGxBbHBoYTtcblxuICAgICAgICB2YXIgciA9IGNvbG9yWzBdICogYWxwaGE7XG4gICAgICAgIHZhciBnID0gY29sb3JbMV0gKiBhbHBoYTtcbiAgICAgICAgdmFyIGIgPSBjb2xvclsyXSAqIGFscGhhO1xuXG4gICAgICAgIHZhciB2ZXJ0cyA9IHdlYkdMRGF0YS5wb2ludHM7XG4gICAgICAgIHZhciBpbmRpY2VzID0gd2ViR0xEYXRhLmluZGljZXM7XG5cbiAgICAgICAgdmFyIHZlY1BvcyA9IHZlcnRzLmxlbmd0aC82O1xuXG4gICAgICAgIHZhciB0cmlhbmdsZXMgPSBlYXJjdXQocmVjUG9pbnRzLCBudWxsLCAyKTtcblxuICAgICAgICB2YXIgaSA9IDA7XG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCB0cmlhbmdsZXMubGVuZ3RoOyBpKz0zKVxuICAgICAgICB7XG4gICAgICAgICAgICBpbmRpY2VzLnB1c2godHJpYW5nbGVzW2ldICsgdmVjUG9zKTtcbiAgICAgICAgICAgIGluZGljZXMucHVzaCh0cmlhbmdsZXNbaV0gKyB2ZWNQb3MpO1xuICAgICAgICAgICAgaW5kaWNlcy5wdXNoKHRyaWFuZ2xlc1tpKzFdICsgdmVjUG9zKTtcbiAgICAgICAgICAgIGluZGljZXMucHVzaCh0cmlhbmdsZXNbaSsyXSArIHZlY1Bvcyk7XG4gICAgICAgICAgICBpbmRpY2VzLnB1c2godHJpYW5nbGVzW2krMl0gKyB2ZWNQb3MpO1xuICAgICAgICB9XG5cbiAgICAgICAgZm9yIChpID0gMDsgaSA8IHJlY1BvaW50cy5sZW5ndGg7IGkrKylcbiAgICAgICAge1xuICAgICAgICAgICAgdmVydHMucHVzaChyZWNQb2ludHNbaV0sIHJlY1BvaW50c1srK2ldLCByLCBnLCBiLCBhbHBoYSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoZ3JhcGhpY3NEYXRhLmxpbmVXaWR0aClcbiAgICB7XG4gICAgICAgIHZhciB0ZW1wUG9pbnRzID0gZ3JhcGhpY3NEYXRhLnBvaW50cztcblxuICAgICAgICBncmFwaGljc0RhdGEucG9pbnRzID0gcmVjUG9pbnRzO1xuXG4gICAgICAgIHRoaXMuYnVpbGRMaW5lKGdyYXBoaWNzRGF0YSwgd2ViR0xEYXRhKTtcblxuICAgICAgICBncmFwaGljc0RhdGEucG9pbnRzID0gdGVtcFBvaW50cztcbiAgICB9XG59O1xuXG4vKipcbiAqIENhbGN1bGF0ZSB0aGUgcG9pbnRzIGZvciBhIHF1YWRyYXRpYyBiZXppZXIgY3VydmUuIChoZWxwZXIgZnVuY3Rpb24uLilcbiAqIEJhc2VkIG9uOiBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy83ODUwOTcvaG93LWRvLWktaW1wbGVtZW50LWEtYmV6aWVyLWN1cnZlLWluLWNcbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIGZyb21YIHtudW1iZXJ9IE9yaWdpbiBwb2ludCB4XG4gKiBAcGFyYW0gZnJvbVkge251bWJlcn0gT3JpZ2luIHBvaW50IHhcbiAqIEBwYXJhbSBjcFgge251bWJlcn0gQ29udHJvbCBwb2ludCB4XG4gKiBAcGFyYW0gY3BZIHtudW1iZXJ9IENvbnRyb2wgcG9pbnQgeVxuICogQHBhcmFtIHRvWCB7bnVtYmVyfSBEZXN0aW5hdGlvbiBwb2ludCB4XG4gKiBAcGFyYW0gdG9ZIHtudW1iZXJ9IERlc3RpbmF0aW9uIHBvaW50IHlcbiAqIEBwYXJhbSBbb3V0XSB7bnVtYmVyW119IFRoZSBvdXRwdXQgYXJyYXkgdG8gYWRkIHBvaW50cyBpbnRvLiBJZiBub3QgcGFzc2VkLCBhIG5ldyBhcnJheSBpcyBjcmVhdGVkLlxuICogQHJldHVybiB7bnVtYmVyW119IGFuIGFycmF5IG9mIHBvaW50c1xuICovXG5xdWFkcmF0aWNCZXppZXJDdXJ2ZSA9IGZ1bmN0aW9uIChmcm9tWCwgZnJvbVksIGNwWCwgY3BZLCB0b1gsIHRvWSwgb3V0KVxue1xuICAgIHZhciB4YSxcbiAgICAgICAgeWEsXG4gICAgICAgIHhiLFxuICAgICAgICB5YixcbiAgICAgICAgeCxcbiAgICAgICAgeSxcbiAgICAgICAgbiA9IDIwLFxuICAgICAgICBwb2ludHMgPSBvdXQgfHwgW107XG5cbiAgICBmdW5jdGlvbiBnZXRQdChuMSAsIG4yLCBwZXJjKSB7XG4gICAgICAgIHZhciBkaWZmID0gbjIgLSBuMTtcblxuICAgICAgICByZXR1cm4gbjEgKyAoIGRpZmYgKiBwZXJjICk7XG4gICAgfVxuXG4gICAgdmFyIGogPSAwO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDw9IG47IGkrKyApIHtcbiAgICAgICAgaiA9IGkgLyBuO1xuXG4gICAgICAgIC8vIFRoZSBHcmVlbiBMaW5lXG4gICAgICAgIHhhID0gZ2V0UHQoIGZyb21YICwgY3BYICwgaiApO1xuICAgICAgICB5YSA9IGdldFB0KCBmcm9tWSAsIGNwWSAsIGogKTtcbiAgICAgICAgeGIgPSBnZXRQdCggY3BYICwgdG9YICwgaiApO1xuICAgICAgICB5YiA9IGdldFB0KCBjcFkgLCB0b1kgLCBqICk7XG5cbiAgICAgICAgLy8gVGhlIEJsYWNrIERvdFxuICAgICAgICB4ID0gZ2V0UHQoIHhhICwgeGIgLCBqICk7XG4gICAgICAgIHkgPSBnZXRQdCggeWEgLCB5YiAsIGogKTtcblxuICAgICAgICBwb2ludHMucHVzaCh4LCB5KTtcbiAgICB9XG5cbiAgICByZXR1cm4gcG9pbnRzO1xufTtcblxuXG5tb2R1bGUuZXhwb3J0cyA9IGJ1aWxkUm91bmRlZFJlY3RhbmdsZTsiLCIvKipcbiAqIEBmaWxlICAgICAgICBNYWluIGV4cG9ydCBvZiB0aGUgUElYSSBjb3JlIGxpYnJhcnlcbiAqIEBhdXRob3IgICAgICBNYXQgR3JvdmVzIDxtYXRAZ29vZGJveWRpZ2l0YWwuY29tPlxuICogQGNvcHlyaWdodCAgIDIwMTMtMjAxNSBHb29kQm95RGlnaXRhbFxuICogQGxpY2Vuc2UgICAgIHtAbGluayBodHRwczovL2dpdGh1Yi5jb20vcGl4aWpzL3BpeGkuanMvYmxvYi9tYXN0ZXIvTElDRU5TRXxNSVQgTGljZW5zZX1cbiAqL1xuXG4vKipcbiAqIEBuYW1lc3BhY2UgUElYSVxuICovXG4vLyBleHBvcnQgY29yZSBhbmQgY29uc3QuIFdlIGFzc2lnbiBjb3JlIHRvIGNvbnN0IHNvIHRoYXQgdGhlIG5vbi1yZWZlcmVuY2UgdHlwZXMgaW4gY29uc3QgcmVtYWluIGluLXRhY3RcbnZhciBjb3JlID0gbW9kdWxlLmV4cG9ydHMgPSBPYmplY3QuYXNzaWduKHJlcXVpcmUoJy4vY29uc3QnKSwgcmVxdWlyZSgnLi9tYXRoJyksIHtcbiAgICAvLyB1dGlsc1xuICAgIHV0aWxzOiByZXF1aXJlKCcuL3V0aWxzJyksXG4gICAgdGlja2VyOiByZXF1aXJlKCcuL3RpY2tlcicpLFxuXG4gICAgLy8gZGlzcGxheVxuICAgIERpc3BsYXlPYmplY3Q6ICAgICAgICAgIHJlcXVpcmUoJy4vZGlzcGxheS9EaXNwbGF5T2JqZWN0JyksXG4gICAgQ29udGFpbmVyOiAgICAgICAgICAgICAgcmVxdWlyZSgnLi9kaXNwbGF5L0NvbnRhaW5lcicpLFxuXG4gICAgLy8gc3ByaXRlc1xuICAgIFNwcml0ZTogICAgICAgICAgICAgICAgIHJlcXVpcmUoJy4vc3ByaXRlcy9TcHJpdGUnKSxcbiAgICBQYXJ0aWNsZUNvbnRhaW5lcjogICAgICByZXF1aXJlKCcuL3BhcnRpY2xlcy9QYXJ0aWNsZUNvbnRhaW5lcicpLFxuICAgIFNwcml0ZVJlbmRlcmVyOiAgICAgICAgIHJlcXVpcmUoJy4vc3ByaXRlcy93ZWJnbC9TcHJpdGVSZW5kZXJlcicpLFxuICAgIFBhcnRpY2xlUmVuZGVyZXI6ICAgICAgIHJlcXVpcmUoJy4vcGFydGljbGVzL3dlYmdsL1BhcnRpY2xlUmVuZGVyZXInKSxcblxuICAgIC8vIHRleHRcbiAgICBUZXh0OiAgICAgICAgICAgICAgICAgICByZXF1aXJlKCcuL3RleHQvVGV4dCcpLFxuXG4gICAgLy8gcHJpbWl0aXZlc1xuICAgIEdyYXBoaWNzOiAgICAgICAgICAgICAgIHJlcXVpcmUoJy4vZ3JhcGhpY3MvR3JhcGhpY3MnKSxcbiAgICBHcmFwaGljc0RhdGE6ICAgICAgICAgICByZXF1aXJlKCcuL2dyYXBoaWNzL0dyYXBoaWNzRGF0YScpLFxuICAgIEdyYXBoaWNzUmVuZGVyZXI6ICAgICAgIHJlcXVpcmUoJy4vZ3JhcGhpY3Mvd2ViZ2wvR3JhcGhpY3NSZW5kZXJlcicpLFxuXG4gICAgLy8gdGV4dHVyZXNcbiAgICBUZXh0dXJlOiAgICAgICAgICAgICAgICByZXF1aXJlKCcuL3RleHR1cmVzL1RleHR1cmUnKSxcbiAgICBCYXNlVGV4dHVyZTogICAgICAgICAgICByZXF1aXJlKCcuL3RleHR1cmVzL0Jhc2VUZXh0dXJlJyksXG4gICAgUmVuZGVyVGV4dHVyZTogICAgICAgICAgcmVxdWlyZSgnLi90ZXh0dXJlcy9SZW5kZXJUZXh0dXJlJyksXG4gICAgVmlkZW9CYXNlVGV4dHVyZTogICAgICAgcmVxdWlyZSgnLi90ZXh0dXJlcy9WaWRlb0Jhc2VUZXh0dXJlJyksXG4gICAgVGV4dHVyZVV2czogICAgICAgICAgICAgcmVxdWlyZSgnLi90ZXh0dXJlcy9UZXh0dXJlVXZzJyksXG5cbiAgICAvLyByZW5kZXJlcnMgLSBjYW52YXNcbiAgICBDYW52YXNSZW5kZXJlcjogICAgICAgICByZXF1aXJlKCcuL3JlbmRlcmVycy9jYW52YXMvQ2FudmFzUmVuZGVyZXInKSxcbiAgICBDYW52YXNHcmFwaGljczogICAgICAgICByZXF1aXJlKCcuL3JlbmRlcmVycy9jYW52YXMvdXRpbHMvQ2FudmFzR3JhcGhpY3MnKSxcbiAgICBDYW52YXNCdWZmZXI6ICAgICAgICAgICByZXF1aXJlKCcuL3JlbmRlcmVycy9jYW52YXMvdXRpbHMvQ2FudmFzQnVmZmVyJyksXG5cbiAgICAvLyByZW5kZXJlcnMgLSB3ZWJnbFxuICAgIFdlYkdMUmVuZGVyZXI6ICAgICAgICAgIHJlcXVpcmUoJy4vcmVuZGVyZXJzL3dlYmdsL1dlYkdMUmVuZGVyZXInKSxcbiAgICBXZWJHTE1hbmFnZXI6ICAgICAgICAgIHJlcXVpcmUoJy4vcmVuZGVyZXJzL3dlYmdsL21hbmFnZXJzL1dlYkdMTWFuYWdlcicpLFxuICAgIFNoYWRlck1hbmFnZXI6ICAgICAgICAgIHJlcXVpcmUoJy4vcmVuZGVyZXJzL3dlYmdsL21hbmFnZXJzL1NoYWRlck1hbmFnZXInKSxcbiAgICBTaGFkZXI6ICAgICAgICAgICAgICAgICByZXF1aXJlKCcuL3JlbmRlcmVycy93ZWJnbC9zaGFkZXJzL1NoYWRlcicpLFxuICAgIE9iamVjdFJlbmRlcmVyOiAgICAgICAgIHJlcXVpcmUoJy4vcmVuZGVyZXJzL3dlYmdsL3V0aWxzL09iamVjdFJlbmRlcmVyJyksXG4gICAgUmVuZGVyVGFyZ2V0OiAgICAgICAgICAgcmVxdWlyZSgnLi9yZW5kZXJlcnMvd2ViZ2wvdXRpbHMvUmVuZGVyVGFyZ2V0JyksXG5cbiAgICAvLyBmaWx0ZXJzIC0gd2ViZ2xcbiAgICBBYnN0cmFjdEZpbHRlcjogICAgICAgICByZXF1aXJlKCcuL3JlbmRlcmVycy93ZWJnbC9maWx0ZXJzL0Fic3RyYWN0RmlsdGVyJyksXG4gICAgRlhBQUZpbHRlcjogICAgICAgICAgICAgcmVxdWlyZSgnLi9yZW5kZXJlcnMvd2ViZ2wvZmlsdGVycy9GWEFBRmlsdGVyJyksXG4gICAgU3ByaXRlTWFza0ZpbHRlcjogICAgICAgcmVxdWlyZSgnLi9yZW5kZXJlcnMvd2ViZ2wvZmlsdGVycy9TcHJpdGVNYXNrRmlsdGVyJyksXG5cbiAgICBnbENvcmU6ICAgICAgICAgICAgICAgICAgIHJlcXVpcmUoJ3BpeGktZ2wtY29yZScpLFxuXG4gICAgLyoqXG4gICAgICogVGhpcyBoZWxwZXIgZnVuY3Rpb24gd2lsbCBhdXRvbWF0aWNhbGx5IGRldGVjdCB3aGljaCByZW5kZXJlciB5b3Ugc2hvdWxkIGJlIHVzaW5nLlxuICAgICAqIFdlYkdMIGlzIHRoZSBwcmVmZXJyZWQgcmVuZGVyZXIgYXMgaXQgaXMgYSBsb3QgZmFzdGVyLiBJZiB3ZWJHTCBpcyBub3Qgc3VwcG9ydGVkIGJ5XG4gICAgICogdGhlIGJyb3dzZXIgdGhlbiB0aGlzIGZ1bmN0aW9uIHdpbGwgcmV0dXJuIGEgY2FudmFzIHJlbmRlcmVyXG4gICAgICpcbiAgICAgKiBAbWVtYmVyb2YgUElYSVxuICAgICAqIEBwYXJhbSB3aWR0aD04MDAge251bWJlcn0gdGhlIHdpZHRoIG9mIHRoZSByZW5kZXJlcnMgdmlld1xuICAgICAqIEBwYXJhbSBoZWlnaHQ9NjAwIHtudW1iZXJ9IHRoZSBoZWlnaHQgb2YgdGhlIHJlbmRlcmVycyB2aWV3XG4gICAgICogQHBhcmFtIFtvcHRpb25zXSB7b2JqZWN0fSBUaGUgb3B0aW9uYWwgcmVuZGVyZXIgcGFyYW1ldGVyc1xuICAgICAqIEBwYXJhbSBbb3B0aW9ucy52aWV3XSB7SFRNTENhbnZhc0VsZW1lbnR9IHRoZSBjYW52YXMgdG8gdXNlIGFzIGEgdmlldywgb3B0aW9uYWxcbiAgICAgKiBAcGFyYW0gW29wdGlvbnMudHJhbnNwYXJlbnQ9ZmFsc2VdIHtib29sZWFufSBJZiB0aGUgcmVuZGVyIHZpZXcgaXMgdHJhbnNwYXJlbnQsIGRlZmF1bHQgZmFsc2VcbiAgICAgKiBAcGFyYW0gW29wdGlvbnMuYW50aWFsaWFzPWZhbHNlXSB7Ym9vbGVhbn0gc2V0cyBhbnRpYWxpYXMgKG9ubHkgYXBwbGljYWJsZSBpbiBjaHJvbWUgYXQgdGhlIG1vbWVudClcbiAgICAgKiBAcGFyYW0gW29wdGlvbnMucHJlc2VydmVEcmF3aW5nQnVmZmVyPWZhbHNlXSB7Ym9vbGVhbn0gZW5hYmxlcyBkcmF3aW5nIGJ1ZmZlciBwcmVzZXJ2YXRpb24sIGVuYWJsZSB0aGlzIGlmIHlvdVxuICAgICAqICAgICAgbmVlZCB0byBjYWxsIHRvRGF0YVVybCBvbiB0aGUgd2ViZ2wgY29udGV4dFxuICAgICAqIEBwYXJhbSBbb3B0aW9ucy5yZXNvbHV0aW9uPTFdIHtudW1iZXJ9IHRoZSByZXNvbHV0aW9uIG9mIHRoZSByZW5kZXJlciwgcmV0aW5hIHdvdWxkIGJlIDJcbiAgICAgKiBAcGFyYW0gW25vV2ViR0w9ZmFsc2VdIHtib29sZWFufSBwcmV2ZW50cyBzZWxlY3Rpb24gb2YgV2ViR0wgcmVuZGVyZXIsIGV2ZW4gaWYgc3VjaCBpcyBwcmVzZW50XG4gICAgICpcbiAgICAgKiBAcmV0dXJuIHtXZWJHTFJlbmRlcmVyfENhbnZhc1JlbmRlcmVyfSBSZXR1cm5zIFdlYkdMIHJlbmRlcmVyIGlmIGF2YWlsYWJsZSwgb3RoZXJ3aXNlIENhbnZhc1JlbmRlcmVyXG4gICAgICovXG4gICAgYXV0b0RldGVjdFJlbmRlcmVyOiBmdW5jdGlvbiAod2lkdGgsIGhlaWdodCwgb3B0aW9ucywgbm9XZWJHTClcbiAgICB7XG4gICAgICAgIHdpZHRoID0gd2lkdGggfHwgODAwO1xuICAgICAgICBoZWlnaHQgPSBoZWlnaHQgfHwgNjAwO1xuXG4gICAgICAgIGlmICghbm9XZWJHTCAmJiBjb3JlLnV0aWxzLmlzV2ViR0xTdXBwb3J0ZWQoKSlcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBjb3JlLldlYkdMUmVuZGVyZXIod2lkdGgsIGhlaWdodCwgb3B0aW9ucyk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbmV3IGNvcmUuQ2FudmFzUmVuZGVyZXIod2lkdGgsIGhlaWdodCwgb3B0aW9ucyk7XG4gICAgfVxufSk7XG4iLCIvLyBAdG9kbyAtIGlnbm9yZSB0aGUgdG9vIG1hbnkgcGFyYW1ldGVycyB3YXJuaW5nIGZvciBub3dcbi8vIHNob3VsZCBlaXRoZXIgZml4IGl0IG9yIGNoYW5nZSB0aGUganNoaW50IGNvbmZpZ1xuLy8ganNoaW50IC1XMDcyXG5cbnZhciBQb2ludCA9IHJlcXVpcmUoJy4vUG9pbnQnKTtcblxuLyoqXG4gKiBUaGUgcGl4aSBNYXRyaXggY2xhc3MgYXMgYW4gb2JqZWN0LCB3aGljaCBtYWtlcyBpdCBhIGxvdCBmYXN0ZXIsXG4gKiBoZXJlIGlzIGEgcmVwcmVzZW50YXRpb24gb2YgaXQgOlxuICogfCBhIHwgYiB8IHR4fFxuICogfCBjIHwgZCB8IHR5fFxuICogfCAwIHwgMCB8IDEgfFxuICpcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqL1xuZnVuY3Rpb24gTWF0cml4KClcbntcbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMVxuICAgICAqL1xuICAgIHRoaXMuYSA9IDE7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMFxuICAgICAqL1xuICAgIHRoaXMuYiA9IDA7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMFxuICAgICAqL1xuICAgIHRoaXMuYyA9IDA7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMVxuICAgICAqL1xuICAgIHRoaXMuZCA9IDE7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMFxuICAgICAqL1xuICAgIHRoaXMudHggPSAwO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDBcbiAgICAgKi9cbiAgICB0aGlzLnR5ID0gMDtcbn1cblxuTWF0cml4LnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IE1hdHJpeDtcbm1vZHVsZS5leHBvcnRzID0gTWF0cml4O1xuXG4vKipcbiAqIENyZWF0ZXMgYSBNYXRyaXggb2JqZWN0IGJhc2VkIG9uIHRoZSBnaXZlbiBhcnJheS4gVGhlIEVsZW1lbnQgdG8gTWF0cml4IG1hcHBpbmcgb3JkZXIgaXMgYXMgZm9sbG93czpcbiAqXG4gKiBhID0gYXJyYXlbMF1cbiAqIGIgPSBhcnJheVsxXVxuICogYyA9IGFycmF5WzNdXG4gKiBkID0gYXJyYXlbNF1cbiAqIHR4ID0gYXJyYXlbMl1cbiAqIHR5ID0gYXJyYXlbNV1cbiAqXG4gKiBAcGFyYW0gYXJyYXkge251bWJlcltdfSBUaGUgYXJyYXkgdGhhdCB0aGUgbWF0cml4IHdpbGwgYmUgcG9wdWxhdGVkIGZyb20uXG4gKi9cbk1hdHJpeC5wcm90b3R5cGUuZnJvbUFycmF5ID0gZnVuY3Rpb24gKGFycmF5KVxue1xuICAgIHRoaXMuYSA9IGFycmF5WzBdO1xuICAgIHRoaXMuYiA9IGFycmF5WzFdO1xuICAgIHRoaXMuYyA9IGFycmF5WzNdO1xuICAgIHRoaXMuZCA9IGFycmF5WzRdO1xuICAgIHRoaXMudHggPSBhcnJheVsyXTtcbiAgICB0aGlzLnR5ID0gYXJyYXlbNV07XG59O1xuXG5cbi8qKlxuICogc2V0cyB0aGUgbWF0cml4IHByb3BlcnRpZXNcbiAqXG4gKiBAcGFyYW0ge251bWJlcn0gYVxuICogQHBhcmFtIHtudW1iZXJ9IGJcbiAqIEBwYXJhbSB7bnVtYmVyfSBjXG4gKiBAcGFyYW0ge251bWJlcn0gZFxuICogQHBhcmFtIHtudW1iZXJ9IHR4XG4gKiBAcGFyYW0ge251bWJlcn0gdHlcbiAqXG4gKiBAcmV0dXJuIHtQSVhJLk1hdHJpeH0gVGhpcyBtYXRyaXguIEdvb2QgZm9yIGNoYWluaW5nIG1ldGhvZCBjYWxscy5cbiAqL1xuTWF0cml4LnByb3RvdHlwZS5zZXQgPSBmdW5jdGlvbiAoYSwgYiwgYywgZCwgdHgsIHR5KVxue1xuICAgIHRoaXMuYSA9IGE7XG4gICAgdGhpcy5iID0gYjtcbiAgICB0aGlzLmMgPSBjO1xuICAgIHRoaXMuZCA9IGQ7XG4gICAgdGhpcy50eCA9IHR4O1xuICAgIHRoaXMudHkgPSB0eTtcblxuICAgIHJldHVybiB0aGlzO1xufTtcblxuXG4vKipcbiAqIENyZWF0ZXMgYW4gYXJyYXkgZnJvbSB0aGUgY3VycmVudCBNYXRyaXggb2JqZWN0LlxuICpcbiAqIEBwYXJhbSB0cmFuc3Bvc2Uge2Jvb2xlYW59IFdoZXRoZXIgd2UgbmVlZCB0byB0cmFuc3Bvc2UgdGhlIG1hdHJpeCBvciBub3RcbiAqIEBwYXJhbSBbb3V0XSB7QXJyYXl9IElmIHByb3ZpZGVkIHRoZSBhcnJheSB3aWxsIGJlIGFzc2lnbmVkIHRvIG91dFxuICogQHJldHVybiB7bnVtYmVyW119IHRoZSBuZXdseSBjcmVhdGVkIGFycmF5IHdoaWNoIGNvbnRhaW5zIHRoZSBtYXRyaXhcbiAqL1xuTWF0cml4LnByb3RvdHlwZS50b0FycmF5ID0gZnVuY3Rpb24gKHRyYW5zcG9zZSwgb3V0KVxue1xuICAgIGlmICghdGhpcy5hcnJheSlcbiAgICB7XG4gICAgICAgIHRoaXMuYXJyYXkgPSBuZXcgRmxvYXQzMkFycmF5KDkpO1xuICAgIH1cblxuICAgIHZhciBhcnJheSA9IG91dCB8fCB0aGlzLmFycmF5O1xuXG4gICAgaWYgKHRyYW5zcG9zZSlcbiAgICB7XG4gICAgICAgIGFycmF5WzBdID0gdGhpcy5hO1xuICAgICAgICBhcnJheVsxXSA9IHRoaXMuYjtcbiAgICAgICAgYXJyYXlbMl0gPSAwO1xuICAgICAgICBhcnJheVszXSA9IHRoaXMuYztcbiAgICAgICAgYXJyYXlbNF0gPSB0aGlzLmQ7XG4gICAgICAgIGFycmF5WzVdID0gMDtcbiAgICAgICAgYXJyYXlbNl0gPSB0aGlzLnR4O1xuICAgICAgICBhcnJheVs3XSA9IHRoaXMudHk7XG4gICAgICAgIGFycmF5WzhdID0gMTtcbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgYXJyYXlbMF0gPSB0aGlzLmE7XG4gICAgICAgIGFycmF5WzFdID0gdGhpcy5jO1xuICAgICAgICBhcnJheVsyXSA9IHRoaXMudHg7XG4gICAgICAgIGFycmF5WzNdID0gdGhpcy5iO1xuICAgICAgICBhcnJheVs0XSA9IHRoaXMuZDtcbiAgICAgICAgYXJyYXlbNV0gPSB0aGlzLnR5O1xuICAgICAgICBhcnJheVs2XSA9IDA7XG4gICAgICAgIGFycmF5WzddID0gMDtcbiAgICAgICAgYXJyYXlbOF0gPSAxO1xuICAgIH1cblxuICAgIHJldHVybiBhcnJheTtcbn07XG5cbi8qKlxuICogR2V0IGEgbmV3IHBvc2l0aW9uIHdpdGggdGhlIGN1cnJlbnQgdHJhbnNmb3JtYXRpb24gYXBwbGllZC5cbiAqIENhbiBiZSB1c2VkIHRvIGdvIGZyb20gYSBjaGlsZCdzIGNvb3JkaW5hdGUgc3BhY2UgdG8gdGhlIHdvcmxkIGNvb3JkaW5hdGUgc3BhY2UuIChlLmcuIHJlbmRlcmluZylcbiAqXG4gKiBAcGFyYW0gcG9zIHtQSVhJLlBvaW50fSBUaGUgb3JpZ2luXG4gKiBAcGFyYW0gW25ld1Bvc10ge1BJWEkuUG9pbnR9IFRoZSBwb2ludCB0aGF0IHRoZSBuZXcgcG9zaXRpb24gaXMgYXNzaWduZWQgdG8gKGFsbG93ZWQgdG8gYmUgc2FtZSBhcyBpbnB1dClcbiAqIEByZXR1cm4ge1BJWEkuUG9pbnR9IFRoZSBuZXcgcG9pbnQsIHRyYW5zZm9ybWVkIHRocm91Z2ggdGhpcyBtYXRyaXhcbiAqL1xuTWF0cml4LnByb3RvdHlwZS5hcHBseSA9IGZ1bmN0aW9uIChwb3MsIG5ld1BvcylcbntcbiAgICBuZXdQb3MgPSBuZXdQb3MgfHwgbmV3IFBvaW50KCk7XG5cbiAgICB2YXIgeCA9IHBvcy54O1xuICAgIHZhciB5ID0gcG9zLnk7XG5cbiAgICBuZXdQb3MueCA9IHRoaXMuYSAqIHggKyB0aGlzLmMgKiB5ICsgdGhpcy50eDtcbiAgICBuZXdQb3MueSA9IHRoaXMuYiAqIHggKyB0aGlzLmQgKiB5ICsgdGhpcy50eTtcblxuICAgIHJldHVybiBuZXdQb3M7XG59O1xuXG4vKipcbiAqIEdldCBhIG5ldyBwb3NpdGlvbiB3aXRoIHRoZSBpbnZlcnNlIG9mIHRoZSBjdXJyZW50IHRyYW5zZm9ybWF0aW9uIGFwcGxpZWQuXG4gKiBDYW4gYmUgdXNlZCB0byBnbyBmcm9tIHRoZSB3b3JsZCBjb29yZGluYXRlIHNwYWNlIHRvIGEgY2hpbGQncyBjb29yZGluYXRlIHNwYWNlLiAoZS5nLiBpbnB1dClcbiAqXG4gKiBAcGFyYW0gcG9zIHtQSVhJLlBvaW50fSBUaGUgb3JpZ2luXG4gKiBAcGFyYW0gW25ld1Bvc10ge1BJWEkuUG9pbnR9IFRoZSBwb2ludCB0aGF0IHRoZSBuZXcgcG9zaXRpb24gaXMgYXNzaWduZWQgdG8gKGFsbG93ZWQgdG8gYmUgc2FtZSBhcyBpbnB1dClcbiAqIEByZXR1cm4ge1BJWEkuUG9pbnR9IFRoZSBuZXcgcG9pbnQsIGludmVyc2UtdHJhbnNmb3JtZWQgdGhyb3VnaCB0aGlzIG1hdHJpeFxuICovXG5NYXRyaXgucHJvdG90eXBlLmFwcGx5SW52ZXJzZSA9IGZ1bmN0aW9uIChwb3MsIG5ld1BvcylcbntcbiAgICBuZXdQb3MgPSBuZXdQb3MgfHwgbmV3IFBvaW50KCk7XG5cbiAgICB2YXIgaWQgPSAxIC8gKHRoaXMuYSAqIHRoaXMuZCArIHRoaXMuYyAqIC10aGlzLmIpO1xuXG4gICAgdmFyIHggPSBwb3MueDtcbiAgICB2YXIgeSA9IHBvcy55O1xuXG4gICAgbmV3UG9zLnggPSB0aGlzLmQgKiBpZCAqIHggKyAtdGhpcy5jICogaWQgKiB5ICsgKHRoaXMudHkgKiB0aGlzLmMgLSB0aGlzLnR4ICogdGhpcy5kKSAqIGlkO1xuICAgIG5ld1Bvcy55ID0gdGhpcy5hICogaWQgKiB5ICsgLXRoaXMuYiAqIGlkICogeCArICgtdGhpcy50eSAqIHRoaXMuYSArIHRoaXMudHggKiB0aGlzLmIpICogaWQ7XG5cbiAgICByZXR1cm4gbmV3UG9zO1xufTtcblxuLyoqXG4gKiBUcmFuc2xhdGVzIHRoZSBtYXRyaXggb24gdGhlIHggYW5kIHkuXG4gKlxuICogQHBhcmFtIHtudW1iZXJ9IHhcbiAqIEBwYXJhbSB7bnVtYmVyfSB5XG4gKiBAcmV0dXJuIHtQSVhJLk1hdHJpeH0gVGhpcyBtYXRyaXguIEdvb2QgZm9yIGNoYWluaW5nIG1ldGhvZCBjYWxscy5cbiAqL1xuTWF0cml4LnByb3RvdHlwZS50cmFuc2xhdGUgPSBmdW5jdGlvbiAoeCwgeSlcbntcbiAgICB0aGlzLnR4ICs9IHg7XG4gICAgdGhpcy50eSArPSB5O1xuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIEFwcGxpZXMgYSBzY2FsZSB0cmFuc2Zvcm1hdGlvbiB0byB0aGUgbWF0cml4LlxuICpcbiAqIEBwYXJhbSB7bnVtYmVyfSB4IFRoZSBhbW91bnQgdG8gc2NhbGUgaG9yaXpvbnRhbGx5XG4gKiBAcGFyYW0ge251bWJlcn0geSBUaGUgYW1vdW50IHRvIHNjYWxlIHZlcnRpY2FsbHlcbiAqIEByZXR1cm4ge1BJWEkuTWF0cml4fSBUaGlzIG1hdHJpeC4gR29vZCBmb3IgY2hhaW5pbmcgbWV0aG9kIGNhbGxzLlxuICovXG5NYXRyaXgucHJvdG90eXBlLnNjYWxlID0gZnVuY3Rpb24gKHgsIHkpXG57XG4gICAgdGhpcy5hICo9IHg7XG4gICAgdGhpcy5kICo9IHk7XG4gICAgdGhpcy5jICo9IHg7XG4gICAgdGhpcy5iICo9IHk7XG4gICAgdGhpcy50eCAqPSB4O1xuICAgIHRoaXMudHkgKj0geTtcblxuICAgIHJldHVybiB0aGlzO1xufTtcblxuXG4vKipcbiAqIEFwcGxpZXMgYSByb3RhdGlvbiB0cmFuc2Zvcm1hdGlvbiB0byB0aGUgbWF0cml4LlxuICpcbiAqIEBwYXJhbSB7bnVtYmVyfSBhbmdsZSAtIFRoZSBhbmdsZSBpbiByYWRpYW5zLlxuICogQHJldHVybiB7UElYSS5NYXRyaXh9IFRoaXMgbWF0cml4LiBHb29kIGZvciBjaGFpbmluZyBtZXRob2QgY2FsbHMuXG4gKi9cbk1hdHJpeC5wcm90b3R5cGUucm90YXRlID0gZnVuY3Rpb24gKGFuZ2xlKVxue1xuICAgIHZhciBjb3MgPSBNYXRoLmNvcyggYW5nbGUgKTtcbiAgICB2YXIgc2luID0gTWF0aC5zaW4oIGFuZ2xlICk7XG5cbiAgICB2YXIgYTEgPSB0aGlzLmE7XG4gICAgdmFyIGMxID0gdGhpcy5jO1xuICAgIHZhciB0eDEgPSB0aGlzLnR4O1xuXG4gICAgdGhpcy5hID0gYTEgKiBjb3MtdGhpcy5iICogc2luO1xuICAgIHRoaXMuYiA9IGExICogc2luK3RoaXMuYiAqIGNvcztcbiAgICB0aGlzLmMgPSBjMSAqIGNvcy10aGlzLmQgKiBzaW47XG4gICAgdGhpcy5kID0gYzEgKiBzaW4rdGhpcy5kICogY29zO1xuICAgIHRoaXMudHggPSB0eDEgKiBjb3MgLSB0aGlzLnR5ICogc2luO1xuICAgIHRoaXMudHkgPSB0eDEgKiBzaW4gKyB0aGlzLnR5ICogY29zO1xuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIEFwcGVuZHMgdGhlIGdpdmVuIE1hdHJpeCB0byB0aGlzIE1hdHJpeC5cbiAqXG4gKiBAcGFyYW0ge1BJWEkuTWF0cml4fSBtYXRyaXhcbiAqIEByZXR1cm4ge1BJWEkuTWF0cml4fSBUaGlzIG1hdHJpeC4gR29vZCBmb3IgY2hhaW5pbmcgbWV0aG9kIGNhbGxzLlxuICovXG5NYXRyaXgucHJvdG90eXBlLmFwcGVuZCA9IGZ1bmN0aW9uIChtYXRyaXgpXG57XG4gICAgdmFyIGExID0gdGhpcy5hO1xuICAgIHZhciBiMSA9IHRoaXMuYjtcbiAgICB2YXIgYzEgPSB0aGlzLmM7XG4gICAgdmFyIGQxID0gdGhpcy5kO1xuXG4gICAgdGhpcy5hICA9IG1hdHJpeC5hICogYTEgKyBtYXRyaXguYiAqIGMxO1xuICAgIHRoaXMuYiAgPSBtYXRyaXguYSAqIGIxICsgbWF0cml4LmIgKiBkMTtcbiAgICB0aGlzLmMgID0gbWF0cml4LmMgKiBhMSArIG1hdHJpeC5kICogYzE7XG4gICAgdGhpcy5kICA9IG1hdHJpeC5jICogYjEgKyBtYXRyaXguZCAqIGQxO1xuXG4gICAgdGhpcy50eCA9IG1hdHJpeC50eCAqIGExICsgbWF0cml4LnR5ICogYzEgKyB0aGlzLnR4O1xuICAgIHRoaXMudHkgPSBtYXRyaXgudHggKiBiMSArIG1hdHJpeC50eSAqIGQxICsgdGhpcy50eTtcblxuICAgIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBTZXRzIHRoZSBtYXRyaXggYmFzZWQgb24gYWxsIHRoZSBhdmFpbGFibGUgcHJvcGVydGllc1xuICpcbiAqIEBwYXJhbSB7bnVtYmVyfSB4XG4gKiBAcGFyYW0ge251bWJlcn0geVxuICogQHBhcmFtIHtudW1iZXJ9IHBpdm90WFxuICogQHBhcmFtIHtudW1iZXJ9IHBpdm90WVxuICogQHBhcmFtIHtudW1iZXJ9IHNjYWxlWFxuICogQHBhcmFtIHtudW1iZXJ9IHNjYWxlWVxuICogQHBhcmFtIHtudW1iZXJ9IHJvdGF0aW9uXG4gKiBAcGFyYW0ge251bWJlcn0gc2tld1hcbiAqIEBwYXJhbSB7bnVtYmVyfSBza2V3WVxuICpcbiAqIEByZXR1cm4ge1BJWEkuTWF0cml4fSBUaGlzIG1hdHJpeC4gR29vZCBmb3IgY2hhaW5pbmcgbWV0aG9kIGNhbGxzLlxuICovXG5NYXRyaXgucHJvdG90eXBlLnNldFRyYW5zZm9ybSA9IGZ1bmN0aW9uICh4LCB5LCBwaXZvdFgsIHBpdm90WSwgc2NhbGVYLCBzY2FsZVksIHJvdGF0aW9uLCBza2V3WCwgc2tld1kpXG57XG4gICAgdmFyIGEsIGIsIGMsIGQsIHNyLCBjciwgY3ksIHN5LCBuc3gsIGN4O1xuXG4gICAgc3IgID0gTWF0aC5zaW4ocm90YXRpb24pO1xuICAgIGNyICA9IE1hdGguY29zKHJvdGF0aW9uKTtcbiAgICBjeSAgPSBNYXRoLmNvcyhza2V3WSk7XG4gICAgc3kgID0gTWF0aC5zaW4oc2tld1kpO1xuICAgIG5zeCA9IC1NYXRoLnNpbihza2V3WCk7XG4gICAgY3ggID0gIE1hdGguY29zKHNrZXdYKTtcblxuICAgIGEgID0gIGNyICogc2NhbGVYO1xuICAgIGIgID0gIHNyICogc2NhbGVYO1xuICAgIGMgID0gLXNyICogc2NhbGVZO1xuICAgIGQgID0gIGNyICogc2NhbGVZO1xuXG4gICAgdGhpcy5hICA9IGN5ICogYSArIHN5ICogYztcbiAgICB0aGlzLmIgID0gY3kgKiBiICsgc3kgKiBkO1xuICAgIHRoaXMuYyAgPSBuc3ggKiBhICsgY3ggKiBjO1xuICAgIHRoaXMuZCAgPSBuc3ggKiBiICsgY3ggKiBkO1xuXG4gICAgdGhpcy50eCA9IHggKyAoIHBpdm90WCAqIGEgKyBwaXZvdFkgKiBjICk7XG4gICAgdGhpcy50eSA9IHkgKyAoIHBpdm90WCAqIGIgKyBwaXZvdFkgKiBkICk7XG5cbiAgICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogUHJlcGVuZHMgdGhlIGdpdmVuIE1hdHJpeCB0byB0aGlzIE1hdHJpeC5cbiAqXG4gKiBAcGFyYW0ge1BJWEkuTWF0cml4fSBtYXRyaXhcbiAqIEByZXR1cm4ge1BJWEkuTWF0cml4fSBUaGlzIG1hdHJpeC4gR29vZCBmb3IgY2hhaW5pbmcgbWV0aG9kIGNhbGxzLlxuICovXG5NYXRyaXgucHJvdG90eXBlLnByZXBlbmQgPSBmdW5jdGlvbihtYXRyaXgpXG57XG4gICAgdmFyIHR4MSA9IHRoaXMudHg7XG5cbiAgICBpZiAobWF0cml4LmEgIT09IDEgfHwgbWF0cml4LmIgIT09IDAgfHwgbWF0cml4LmMgIT09IDAgfHwgbWF0cml4LmQgIT09IDEpXG4gICAge1xuICAgICAgICB2YXIgYTEgPSB0aGlzLmE7XG4gICAgICAgIHZhciBjMSA9IHRoaXMuYztcbiAgICAgICAgdGhpcy5hICA9IGExKm1hdHJpeC5hK3RoaXMuYiptYXRyaXguYztcbiAgICAgICAgdGhpcy5iICA9IGExKm1hdHJpeC5iK3RoaXMuYiptYXRyaXguZDtcbiAgICAgICAgdGhpcy5jICA9IGMxKm1hdHJpeC5hK3RoaXMuZCptYXRyaXguYztcbiAgICAgICAgdGhpcy5kICA9IGMxKm1hdHJpeC5iK3RoaXMuZCptYXRyaXguZDtcbiAgICB9XG5cbiAgICB0aGlzLnR4ID0gdHgxKm1hdHJpeC5hK3RoaXMudHkqbWF0cml4LmMrbWF0cml4LnR4O1xuICAgIHRoaXMudHkgPSB0eDEqbWF0cml4LmIrdGhpcy50eSptYXRyaXguZCttYXRyaXgudHk7XG5cbiAgICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogSW52ZXJ0cyB0aGlzIG1hdHJpeFxuICpcbiAqIEByZXR1cm4ge1BJWEkuTWF0cml4fSBUaGlzIG1hdHJpeC4gR29vZCBmb3IgY2hhaW5pbmcgbWV0aG9kIGNhbGxzLlxuICovXG5NYXRyaXgucHJvdG90eXBlLmludmVydCA9IGZ1bmN0aW9uKClcbntcbiAgICB2YXIgYTEgPSB0aGlzLmE7XG4gICAgdmFyIGIxID0gdGhpcy5iO1xuICAgIHZhciBjMSA9IHRoaXMuYztcbiAgICB2YXIgZDEgPSB0aGlzLmQ7XG4gICAgdmFyIHR4MSA9IHRoaXMudHg7XG4gICAgdmFyIG4gPSBhMSpkMS1iMSpjMTtcblxuICAgIHRoaXMuYSA9IGQxL247XG4gICAgdGhpcy5iID0gLWIxL247XG4gICAgdGhpcy5jID0gLWMxL247XG4gICAgdGhpcy5kID0gYTEvbjtcbiAgICB0aGlzLnR4ID0gKGMxKnRoaXMudHktZDEqdHgxKS9uO1xuICAgIHRoaXMudHkgPSAtKGExKnRoaXMudHktYjEqdHgxKS9uO1xuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG5cbi8qKlxuICogUmVzZXRzIHRoaXMgTWF0aXggdG8gYW4gaWRlbnRpdHkgKGRlZmF1bHQpIG1hdHJpeC5cbiAqXG4gKiBAcmV0dXJuIHtQSVhJLk1hdHJpeH0gVGhpcyBtYXRyaXguIEdvb2QgZm9yIGNoYWluaW5nIG1ldGhvZCBjYWxscy5cbiAqL1xuTWF0cml4LnByb3RvdHlwZS5pZGVudGl0eSA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy5hID0gMTtcbiAgICB0aGlzLmIgPSAwO1xuICAgIHRoaXMuYyA9IDA7XG4gICAgdGhpcy5kID0gMTtcbiAgICB0aGlzLnR4ID0gMDtcbiAgICB0aGlzLnR5ID0gMDtcblxuICAgIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBDcmVhdGVzIGEgbmV3IE1hdHJpeCBvYmplY3Qgd2l0aCB0aGUgc2FtZSB2YWx1ZXMgYXMgdGhpcyBvbmUuXG4gKlxuICogQHJldHVybiB7UElYSS5NYXRyaXh9IEEgY29weSBvZiB0aGlzIG1hdHJpeC4gR29vZCBmb3IgY2hhaW5pbmcgbWV0aG9kIGNhbGxzLlxuICovXG5NYXRyaXgucHJvdG90eXBlLmNsb25lID0gZnVuY3Rpb24gKClcbntcbiAgICB2YXIgbWF0cml4ID0gbmV3IE1hdHJpeCgpO1xuICAgIG1hdHJpeC5hID0gdGhpcy5hO1xuICAgIG1hdHJpeC5iID0gdGhpcy5iO1xuICAgIG1hdHJpeC5jID0gdGhpcy5jO1xuICAgIG1hdHJpeC5kID0gdGhpcy5kO1xuICAgIG1hdHJpeC50eCA9IHRoaXMudHg7XG4gICAgbWF0cml4LnR5ID0gdGhpcy50eTtcblxuICAgIHJldHVybiBtYXRyaXg7XG59O1xuXG4vKipcbiAqIENoYW5nZXMgdGhlIHZhbHVlcyBvZiB0aGUgZ2l2ZW4gbWF0cml4IHRvIGJlIHRoZSBzYW1lIGFzIHRoZSBvbmVzIGluIHRoaXMgbWF0cml4XG4gKlxuICogQHJldHVybiB7UElYSS5NYXRyaXh9IFRoZSBtYXRyaXggZ2l2ZW4gaW4gcGFyYW1ldGVyIHdpdGggaXRzIHZhbHVlcyB1cGRhdGVkLlxuICovXG5NYXRyaXgucHJvdG90eXBlLmNvcHkgPSBmdW5jdGlvbiAobWF0cml4KVxue1xuICAgIG1hdHJpeC5hID0gdGhpcy5hO1xuICAgIG1hdHJpeC5iID0gdGhpcy5iO1xuICAgIG1hdHJpeC5jID0gdGhpcy5jO1xuICAgIG1hdHJpeC5kID0gdGhpcy5kO1xuICAgIG1hdHJpeC50eCA9IHRoaXMudHg7XG4gICAgbWF0cml4LnR5ID0gdGhpcy50eTtcblxuICAgIHJldHVybiBtYXRyaXg7XG59O1xuXG4vKipcbiAqIEEgZGVmYXVsdCAoaWRlbnRpdHkpIG1hdHJpeFxuICpcbiAqIEBzdGF0aWNcbiAqIEBjb25zdFxuICovXG5NYXRyaXguSURFTlRJVFkgPSBuZXcgTWF0cml4KCk7XG5cbi8qKlxuICogQSB0ZW1wIG1hdHJpeFxuICpcbiAqIEBzdGF0aWNcbiAqIEBjb25zdFxuICovXG5NYXRyaXguVEVNUF9NQVRSSVggPSBuZXcgTWF0cml4KCk7XG4iLCIvKipcbiAqIFRoZSBQb2ludCBvYmplY3QgcmVwcmVzZW50cyBhIGxvY2F0aW9uIGluIGEgdHdvLWRpbWVuc2lvbmFsIGNvb3JkaW5hdGUgc3lzdGVtLCB3aGVyZSB4IHJlcHJlc2VudHNcbiAqIHRoZSBob3Jpem9udGFsIGF4aXMgYW5kIHkgcmVwcmVzZW50cyB0aGUgdmVydGljYWwgYXhpcy5cbiAqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gW3g9MF0ge251bWJlcn0gcG9zaXRpb24gb2YgdGhlIHBvaW50IG9uIHRoZSB4IGF4aXNcbiAqIEBwYXJhbSBbeT0wXSB7bnVtYmVyfSBwb3NpdGlvbiBvZiB0aGUgcG9pbnQgb24gdGhlIHkgYXhpc1xuICovXG5mdW5jdGlvbiBQb2ludCh4LCB5KVxue1xuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAwXG4gICAgICovXG4gICAgdGhpcy54ID0geCB8fCAwO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDBcbiAgICAgKi9cbiAgICB0aGlzLnkgPSB5IHx8IDA7XG59XG5cblBvaW50LnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFBvaW50O1xubW9kdWxlLmV4cG9ydHMgPSBQb2ludDtcblxuLyoqXG4gKiBDcmVhdGVzIGEgY2xvbmUgb2YgdGhpcyBwb2ludFxuICpcbiAqIEByZXR1cm4ge1BJWEkuUG9pbnR9IGEgY29weSBvZiB0aGUgcG9pbnRcbiAqL1xuUG9pbnQucHJvdG90eXBlLmNsb25lID0gZnVuY3Rpb24gKClcbntcbiAgICByZXR1cm4gbmV3IFBvaW50KHRoaXMueCwgdGhpcy55KTtcbn07XG5cbi8qKlxuICogQ29waWVzIHggYW5kIHkgZnJvbSB0aGUgZ2l2ZW4gcG9pbnRcbiAqXG4gKiBAcGFyYW0gcCB7UElYSS5Qb2ludH1cbiAqL1xuUG9pbnQucHJvdG90eXBlLmNvcHkgPSBmdW5jdGlvbiAocCkge1xuICAgIHRoaXMuc2V0KHAueCwgcC55KTtcbn07XG5cbi8qKlxuICogUmV0dXJucyB0cnVlIGlmIHRoZSBnaXZlbiBwb2ludCBpcyBlcXVhbCB0byB0aGlzIHBvaW50XG4gKlxuICogQHBhcmFtIHAge1BJWEkuUG9pbnR9XG4gKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAqL1xuUG9pbnQucHJvdG90eXBlLmVxdWFscyA9IGZ1bmN0aW9uIChwKSB7XG4gICAgcmV0dXJuIChwLnggPT09IHRoaXMueCkgJiYgKHAueSA9PT0gdGhpcy55KTtcbn07XG5cbi8qKlxuICogU2V0cyB0aGUgcG9pbnQgdG8gYSBuZXcgeCBhbmQgeSBwb3NpdGlvbi5cbiAqIElmIHkgaXMgb21pdHRlZCwgYm90aCB4IGFuZCB5IHdpbGwgYmUgc2V0IHRvIHguXG4gKlxuICogQHBhcmFtIFt4PTBdIHtudW1iZXJ9IHBvc2l0aW9uIG9mIHRoZSBwb2ludCBvbiB0aGUgeCBheGlzXG4gKiBAcGFyYW0gW3k9MF0ge251bWJlcn0gcG9zaXRpb24gb2YgdGhlIHBvaW50IG9uIHRoZSB5IGF4aXNcbiAqL1xuUG9pbnQucHJvdG90eXBlLnNldCA9IGZ1bmN0aW9uICh4LCB5KVxue1xuICAgIHRoaXMueCA9IHggfHwgMDtcbiAgICB0aGlzLnkgPSB5IHx8ICggKHkgIT09IDApID8gdGhpcy54IDogMCApIDtcbn07XG4iLCIvKipcbiAqIE1hdGggY2xhc3NlcyBhbmQgdXRpbGl0aWVzIG1peGVkIGludG8gUElYSSBuYW1lc3BhY2UuXG4gKlxuICogQGxlbmRzIFBJWElcbiAqL1xubW9kdWxlLmV4cG9ydHMgPSB7XG4gICAgLy8gVGhlc2Ugd2lsbCBiZSBtaXhlZCB0byBiZSBtYWRlIHB1YmxpY2x5IGF2YWlsYWJsZSxcbiAgICAvLyB3aGlsZSB0aGlzIG1vZHVsZSBpcyB1c2VkIGludGVybmFsbHkgaW4gY29yZVxuICAgIC8vIHRvIGF2b2lkIGNpcmN1bGFyIGRlcGVuZGVuY2llcyBhbmQgY3V0IGRvd24gb25cbiAgICAvLyBpbnRlcm5hbCBtb2R1bGUgcmVxdWlyZXMuXG5cbiAgICBQb2ludDogICAgICByZXF1aXJlKCcuL1BvaW50JyksXG4gICAgTWF0cml4OiAgICAgcmVxdWlyZSgnLi9NYXRyaXgnKSxcblxuICAgIENpcmNsZTogICAgIHJlcXVpcmUoJy4vc2hhcGVzL0NpcmNsZScpLFxuICAgIEVsbGlwc2U6ICAgIHJlcXVpcmUoJy4vc2hhcGVzL0VsbGlwc2UnKSxcbiAgICBQb2x5Z29uOiAgICByZXF1aXJlKCcuL3NoYXBlcy9Qb2x5Z29uJyksXG4gICAgUmVjdGFuZ2xlOiAgcmVxdWlyZSgnLi9zaGFwZXMvUmVjdGFuZ2xlJyksXG4gICAgUm91bmRlZFJlY3RhbmdsZTogcmVxdWlyZSgnLi9zaGFwZXMvUm91bmRlZFJlY3RhbmdsZScpXG59O1xuIiwidmFyIFJlY3RhbmdsZSA9IHJlcXVpcmUoJy4vUmVjdGFuZ2xlJyksXG4gICAgQ09OU1QgPSByZXF1aXJlKCcuLi8uLi9jb25zdCcpO1xuXG4vKipcbiAqIFRoZSBDaXJjbGUgb2JqZWN0IGNhbiBiZSB1c2VkIHRvIHNwZWNpZnkgYSBoaXQgYXJlYSBmb3IgZGlzcGxheU9iamVjdHNcbiAqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0geCB7bnVtYmVyfSBUaGUgWCBjb29yZGluYXRlIG9mIHRoZSBjZW50ZXIgb2YgdGhpcyBjaXJjbGVcbiAqIEBwYXJhbSB5IHtudW1iZXJ9IFRoZSBZIGNvb3JkaW5hdGUgb2YgdGhlIGNlbnRlciBvZiB0aGlzIGNpcmNsZVxuICogQHBhcmFtIHJhZGl1cyB7bnVtYmVyfSBUaGUgcmFkaXVzIG9mIHRoZSBjaXJjbGVcbiAqL1xuZnVuY3Rpb24gQ2lyY2xlKHgsIHksIHJhZGl1cylcbntcbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMFxuICAgICAqL1xuICAgIHRoaXMueCA9IHggfHwgMDtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAwXG4gICAgICovXG4gICAgdGhpcy55ID0geSB8fCAwO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDBcbiAgICAgKi9cbiAgICB0aGlzLnJhZGl1cyA9IHJhZGl1cyB8fCAwO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHR5cGUgb2YgdGhlIG9iamVjdCwgbWFpbmx5IHVzZWQgdG8gYXZvaWQgYGluc3RhbmNlb2ZgIGNoZWNrc1xuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMudHlwZSA9IENPTlNULlNIQVBFUy5DSVJDO1xufVxuXG5DaXJjbGUucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gQ2lyY2xlO1xubW9kdWxlLmV4cG9ydHMgPSBDaXJjbGU7XG5cbi8qKlxuICogQ3JlYXRlcyBhIGNsb25lIG9mIHRoaXMgQ2lyY2xlIGluc3RhbmNlXG4gKlxuICogQHJldHVybiB7UElYSS5DaXJjbGV9IGEgY29weSBvZiB0aGUgQ2lyY2xlXG4gKi9cbkNpcmNsZS5wcm90b3R5cGUuY2xvbmUgPSBmdW5jdGlvbiAoKVxue1xuICAgIHJldHVybiBuZXcgQ2lyY2xlKHRoaXMueCwgdGhpcy55LCB0aGlzLnJhZGl1cyk7XG59O1xuXG4vKipcbiAqIENoZWNrcyB3aGV0aGVyIHRoZSB4IGFuZCB5IGNvb3JkaW5hdGVzIGdpdmVuIGFyZSBjb250YWluZWQgd2l0aGluIHRoaXMgY2lyY2xlXG4gKlxuICogQHBhcmFtIHgge251bWJlcn0gVGhlIFggY29vcmRpbmF0ZSBvZiB0aGUgcG9pbnQgdG8gdGVzdFxuICogQHBhcmFtIHkge251bWJlcn0gVGhlIFkgY29vcmRpbmF0ZSBvZiB0aGUgcG9pbnQgdG8gdGVzdFxuICogQHJldHVybiB7Ym9vbGVhbn0gV2hldGhlciB0aGUgeC95IGNvb3JkaW5hdGVzIGFyZSB3aXRoaW4gdGhpcyBDaXJjbGVcbiAqL1xuQ2lyY2xlLnByb3RvdHlwZS5jb250YWlucyA9IGZ1bmN0aW9uICh4LCB5KVxue1xuICAgIGlmICh0aGlzLnJhZGl1cyA8PSAwKVxuICAgIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHZhciBkeCA9ICh0aGlzLnggLSB4KSxcbiAgICAgICAgZHkgPSAodGhpcy55IC0geSksXG4gICAgICAgIHIyID0gdGhpcy5yYWRpdXMgKiB0aGlzLnJhZGl1cztcblxuICAgIGR4ICo9IGR4O1xuICAgIGR5ICo9IGR5O1xuXG4gICAgcmV0dXJuIChkeCArIGR5IDw9IHIyKTtcbn07XG5cbi8qKlxuKiBSZXR1cm5zIHRoZSBmcmFtaW5nIHJlY3RhbmdsZSBvZiB0aGUgY2lyY2xlIGFzIGEgUmVjdGFuZ2xlIG9iamVjdFxuKlxuKiBAcmV0dXJuIHtQSVhJLlJlY3RhbmdsZX0gdGhlIGZyYW1pbmcgcmVjdGFuZ2xlXG4qL1xuQ2lyY2xlLnByb3RvdHlwZS5nZXRCb3VuZHMgPSBmdW5jdGlvbiAoKVxue1xuICAgIHJldHVybiBuZXcgUmVjdGFuZ2xlKHRoaXMueCAtIHRoaXMucmFkaXVzLCB0aGlzLnkgLSB0aGlzLnJhZGl1cywgdGhpcy5yYWRpdXMgKiAyLCB0aGlzLnJhZGl1cyAqIDIpO1xufTtcbiIsInZhciBSZWN0YW5nbGUgPSByZXF1aXJlKCcuL1JlY3RhbmdsZScpLFxuICAgIENPTlNUID0gcmVxdWlyZSgnLi4vLi4vY29uc3QnKTtcblxuLyoqXG4gKiBUaGUgRWxsaXBzZSBvYmplY3QgY2FuIGJlIHVzZWQgdG8gc3BlY2lmeSBhIGhpdCBhcmVhIGZvciBkaXNwbGF5T2JqZWN0c1xuICpcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqIEBwYXJhbSB4IHtudW1iZXJ9IFRoZSBYIGNvb3JkaW5hdGUgb2YgdGhlIGNlbnRlciBvZiB0aGUgZWxsaXBzZVxuICogQHBhcmFtIHkge251bWJlcn0gVGhlIFkgY29vcmRpbmF0ZSBvZiB0aGUgY2VudGVyIG9mIHRoZSBlbGxpcHNlXG4gKiBAcGFyYW0gd2lkdGgge251bWJlcn0gVGhlIGhhbGYgd2lkdGggb2YgdGhpcyBlbGxpcHNlXG4gKiBAcGFyYW0gaGVpZ2h0IHtudW1iZXJ9IFRoZSBoYWxmIGhlaWdodCBvZiB0aGlzIGVsbGlwc2VcbiAqL1xuZnVuY3Rpb24gRWxsaXBzZSh4LCB5LCB3aWR0aCwgaGVpZ2h0KVxue1xuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAwXG4gICAgICovXG4gICAgdGhpcy54ID0geCB8fCAwO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDBcbiAgICAgKi9cbiAgICB0aGlzLnkgPSB5IHx8IDA7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMFxuICAgICAqL1xuICAgIHRoaXMud2lkdGggPSB3aWR0aCB8fCAwO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDBcbiAgICAgKi9cbiAgICB0aGlzLmhlaWdodCA9IGhlaWdodCB8fCAwO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHR5cGUgb2YgdGhlIG9iamVjdCwgbWFpbmx5IHVzZWQgdG8gYXZvaWQgYGluc3RhbmNlb2ZgIGNoZWNrc1xuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMudHlwZSA9IENPTlNULlNIQVBFUy5FTElQO1xufVxuXG5FbGxpcHNlLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IEVsbGlwc2U7XG5tb2R1bGUuZXhwb3J0cyA9IEVsbGlwc2U7XG5cbi8qKlxuICogQ3JlYXRlcyBhIGNsb25lIG9mIHRoaXMgRWxsaXBzZSBpbnN0YW5jZVxuICpcbiAqIEByZXR1cm4ge1BJWEkuRWxsaXBzZX0gYSBjb3B5IG9mIHRoZSBlbGxpcHNlXG4gKi9cbkVsbGlwc2UucHJvdG90eXBlLmNsb25lID0gZnVuY3Rpb24gKClcbntcbiAgICByZXR1cm4gbmV3IEVsbGlwc2UodGhpcy54LCB0aGlzLnksIHRoaXMud2lkdGgsIHRoaXMuaGVpZ2h0KTtcbn07XG5cbi8qKlxuICogQ2hlY2tzIHdoZXRoZXIgdGhlIHggYW5kIHkgY29vcmRpbmF0ZXMgZ2l2ZW4gYXJlIGNvbnRhaW5lZCB3aXRoaW4gdGhpcyBlbGxpcHNlXG4gKlxuICogQHBhcmFtIHgge251bWJlcn0gVGhlIFggY29vcmRpbmF0ZSBvZiB0aGUgcG9pbnQgdG8gdGVzdFxuICogQHBhcmFtIHkge251bWJlcn0gVGhlIFkgY29vcmRpbmF0ZSBvZiB0aGUgcG9pbnQgdG8gdGVzdFxuICogQHJldHVybiB7Ym9vbGVhbn0gV2hldGhlciB0aGUgeC95IGNvb3JkcyBhcmUgd2l0aGluIHRoaXMgZWxsaXBzZVxuICovXG5FbGxpcHNlLnByb3RvdHlwZS5jb250YWlucyA9IGZ1bmN0aW9uICh4LCB5KVxue1xuICAgIGlmICh0aGlzLndpZHRoIDw9IDAgfHwgdGhpcy5oZWlnaHQgPD0gMClcbiAgICB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICAvL25vcm1hbGl6ZSB0aGUgY29vcmRzIHRvIGFuIGVsbGlwc2Ugd2l0aCBjZW50ZXIgMCwwXG4gICAgdmFyIG5vcm14ID0gKCh4IC0gdGhpcy54KSAvIHRoaXMud2lkdGgpLFxuICAgICAgICBub3JteSA9ICgoeSAtIHRoaXMueSkgLyB0aGlzLmhlaWdodCk7XG5cbiAgICBub3JteCAqPSBub3JteDtcbiAgICBub3JteSAqPSBub3JteTtcblxuICAgIHJldHVybiAobm9ybXggKyBub3JteSA8PSAxKTtcbn07XG5cbi8qKlxuICogUmV0dXJucyB0aGUgZnJhbWluZyByZWN0YW5nbGUgb2YgdGhlIGVsbGlwc2UgYXMgYSBSZWN0YW5nbGUgb2JqZWN0XG4gKlxuICogQHJldHVybiB7UElYSS5SZWN0YW5nbGV9IHRoZSBmcmFtaW5nIHJlY3RhbmdsZVxuICovXG5FbGxpcHNlLnByb3RvdHlwZS5nZXRCb3VuZHMgPSBmdW5jdGlvbiAoKVxue1xuICAgIHJldHVybiBuZXcgUmVjdGFuZ2xlKHRoaXMueCAtIHRoaXMud2lkdGgsIHRoaXMueSAtIHRoaXMuaGVpZ2h0LCB0aGlzLndpZHRoLCB0aGlzLmhlaWdodCk7XG59O1xuIiwidmFyIFBvaW50ID0gcmVxdWlyZSgnLi4vUG9pbnQnKSxcbiAgICBDT05TVCA9IHJlcXVpcmUoJy4uLy4uL2NvbnN0Jyk7XG5cbi8qKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIHBvaW50cyB7UElYSS5Qb2ludFtdfG51bWJlcltdfC4uLlBJWEkuUG9pbnR8Li4ubnVtYmVyfSBUaGlzIGNhbiBiZSBhbiBhcnJheSBvZiBQb2ludHMgdGhhdCBmb3JtIHRoZSBwb2x5Z29uLFxuICogICAgICBhIGZsYXQgYXJyYXkgb2YgbnVtYmVycyB0aGF0IHdpbGwgYmUgaW50ZXJwcmV0ZWQgYXMgW3gseSwgeCx5LCAuLi5dLCBvciB0aGUgYXJndW1lbnRzIHBhc3NlZCBjYW4gYmVcbiAqICAgICAgYWxsIHRoZSBwb2ludHMgb2YgdGhlIHBvbHlnb24gZS5nLiBgbmV3IFBJWEkuUG9seWdvbihuZXcgUElYSS5Qb2ludCgpLCBuZXcgUElYSS5Qb2ludCgpLCAuLi4pYCwgb3IgdGhlXG4gKiAgICAgIGFyZ3VtZW50cyBwYXNzZWQgY2FuIGJlIGZsYXQgeCx5IHZhbHVlcyBlLmcuIGBuZXcgUG9seWdvbih4LHksIHgseSwgeCx5LCAuLi4pYCB3aGVyZSBgeGAgYW5kIGB5YCBhcmVcbiAqICAgICAgTnVtYmVycy5cbiAqL1xuZnVuY3Rpb24gUG9seWdvbihwb2ludHNfKVxue1xuICAgIC8vIHByZXZlbnRzIGFuIGFyZ3VtZW50IGFzc2lnbm1lbnQgZGVvcHRcbiAgICAvLyBzZWUgc2VjdGlvbiAzLjE6IGh0dHBzOi8vZ2l0aHViLmNvbS9wZXRrYWFudG9ub3YvYmx1ZWJpcmQvd2lraS9PcHRpbWl6YXRpb24ta2lsbGVycyMzLW1hbmFnaW5nLWFyZ3VtZW50c1xuICAgIHZhciBwb2ludHMgPSBwb2ludHNfO1xuXG4gICAgLy9pZiBwb2ludHMgaXNuJ3QgYW4gYXJyYXksIHVzZSBhcmd1bWVudHMgYXMgdGhlIGFycmF5XG4gICAgaWYgKCFBcnJheS5pc0FycmF5KHBvaW50cykpXG4gICAge1xuICAgICAgICAvLyBwcmV2ZW50cyBhbiBhcmd1bWVudCBsZWFrIGRlb3B0XG4gICAgICAgIC8vIHNlZSBzZWN0aW9uIDMuMjogaHR0cHM6Ly9naXRodWIuY29tL3BldGthYW50b25vdi9ibHVlYmlyZC93aWtpL09wdGltaXphdGlvbi1raWxsZXJzIzMtbWFuYWdpbmctYXJndW1lbnRzXG4gICAgICAgIHBvaW50cyA9IG5ldyBBcnJheShhcmd1bWVudHMubGVuZ3RoKTtcblxuICAgICAgICBmb3IgKHZhciBhID0gMDsgYSA8IHBvaW50cy5sZW5ndGg7ICsrYSkge1xuICAgICAgICAgICAgcG9pbnRzW2FdID0gYXJndW1lbnRzW2FdO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gaWYgdGhpcyBpcyBhbiBhcnJheSBvZiBwb2ludHMsIGNvbnZlcnQgaXQgdG8gYSBmbGF0IGFycmF5IG9mIG51bWJlcnNcbiAgICBpZiAocG9pbnRzWzBdIGluc3RhbmNlb2YgUG9pbnQpXG4gICAge1xuICAgICAgICB2YXIgcCA9IFtdO1xuICAgICAgICBmb3IgKHZhciBpID0gMCwgaWwgPSBwb2ludHMubGVuZ3RoOyBpIDwgaWw7IGkrKylcbiAgICAgICAge1xuICAgICAgICAgICAgcC5wdXNoKHBvaW50c1tpXS54LCBwb2ludHNbaV0ueSk7XG4gICAgICAgIH1cblxuICAgICAgICBwb2ludHMgPSBwO1xuICAgIH1cblxuICAgIHRoaXMuY2xvc2VkID0gdHJ1ZTtcblxuICAgIC8qKlxuICAgICAqIEFuIGFycmF5IG9mIHRoZSBwb2ludHMgb2YgdGhpcyBwb2x5Z29uXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJbXX1cbiAgICAgKi9cbiAgICB0aGlzLnBvaW50cyA9IHBvaW50cztcblxuICAgIC8qKlxuICAgICAqIFRoZSB0eXBlIG9mIHRoZSBvYmplY3QsIG1haW5seSB1c2VkIHRvIGF2b2lkIGBpbnN0YW5jZW9mYCBjaGVja3NcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLnR5cGUgPSBDT05TVC5TSEFQRVMuUE9MWTtcbn1cblxuUG9seWdvbi5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBQb2x5Z29uO1xubW9kdWxlLmV4cG9ydHMgPSBQb2x5Z29uO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBjbG9uZSBvZiB0aGlzIHBvbHlnb25cbiAqXG4gKiBAcmV0dXJuIHtQSVhJLlBvbHlnb259IGEgY29weSBvZiB0aGUgcG9seWdvblxuICovXG5Qb2x5Z29uLnByb3RvdHlwZS5jbG9uZSA9IGZ1bmN0aW9uICgpXG57XG4gICAgcmV0dXJuIG5ldyBQb2x5Z29uKHRoaXMucG9pbnRzLnNsaWNlKCkpO1xufTtcblxuLyoqXG4gKiBDaGVja3Mgd2hldGhlciB0aGUgeCBhbmQgeSBjb29yZGluYXRlcyBwYXNzZWQgdG8gdGhpcyBmdW5jdGlvbiBhcmUgY29udGFpbmVkIHdpdGhpbiB0aGlzIHBvbHlnb25cbiAqXG4gKiBAcGFyYW0geCB7bnVtYmVyfSBUaGUgWCBjb29yZGluYXRlIG9mIHRoZSBwb2ludCB0byB0ZXN0XG4gKiBAcGFyYW0geSB7bnVtYmVyfSBUaGUgWSBjb29yZGluYXRlIG9mIHRoZSBwb2ludCB0byB0ZXN0XG4gKiBAcmV0dXJuIHtib29sZWFufSBXaGV0aGVyIHRoZSB4L3kgY29vcmRpbmF0ZXMgYXJlIHdpdGhpbiB0aGlzIHBvbHlnb25cbiAqL1xuUG9seWdvbi5wcm90b3R5cGUuY29udGFpbnMgPSBmdW5jdGlvbiAoeCwgeSlcbntcbiAgICB2YXIgaW5zaWRlID0gZmFsc2U7XG5cbiAgICAvLyB1c2Ugc29tZSByYXljYXN0aW5nIHRvIHRlc3QgaGl0c1xuICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9zdWJzdGFjay9wb2ludC1pbi1wb2x5Z29uL2Jsb2IvbWFzdGVyL2luZGV4LmpzXG4gICAgdmFyIGxlbmd0aCA9IHRoaXMucG9pbnRzLmxlbmd0aCAvIDI7XG5cbiAgICBmb3IgKHZhciBpID0gMCwgaiA9IGxlbmd0aCAtIDE7IGkgPCBsZW5ndGg7IGogPSBpKyspXG4gICAge1xuICAgICAgICB2YXIgeGkgPSB0aGlzLnBvaW50c1tpICogMl0sIHlpID0gdGhpcy5wb2ludHNbaSAqIDIgKyAxXSxcbiAgICAgICAgICAgIHhqID0gdGhpcy5wb2ludHNbaiAqIDJdLCB5aiA9IHRoaXMucG9pbnRzW2ogKiAyICsgMV0sXG4gICAgICAgICAgICBpbnRlcnNlY3QgPSAoKHlpID4geSkgIT09ICh5aiA+IHkpKSAmJiAoeCA8ICh4aiAtIHhpKSAqICh5IC0geWkpIC8gKHlqIC0geWkpICsgeGkpO1xuXG4gICAgICAgIGlmIChpbnRlcnNlY3QpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGluc2lkZSA9ICFpbnNpZGU7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gaW5zaWRlO1xufTtcbiIsInZhciBDT05TVCA9IHJlcXVpcmUoJy4uLy4uL2NvbnN0Jyk7XG5cbi8qKlxuICogdGhlIFJlY3RhbmdsZSBvYmplY3QgaXMgYW4gYXJlYSBkZWZpbmVkIGJ5IGl0cyBwb3NpdGlvbiwgYXMgaW5kaWNhdGVkIGJ5IGl0cyB0b3AtbGVmdCBjb3JuZXIgcG9pbnQgKHgsIHkpIGFuZCBieSBpdHMgd2lkdGggYW5kIGl0cyBoZWlnaHQuXG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIHgge251bWJlcn0gVGhlIFggY29vcmRpbmF0ZSBvZiB0aGUgdXBwZXItbGVmdCBjb3JuZXIgb2YgdGhlIHJlY3RhbmdsZVxuICogQHBhcmFtIHkge251bWJlcn0gVGhlIFkgY29vcmRpbmF0ZSBvZiB0aGUgdXBwZXItbGVmdCBjb3JuZXIgb2YgdGhlIHJlY3RhbmdsZVxuICogQHBhcmFtIHdpZHRoIHtudW1iZXJ9IFRoZSBvdmVyYWxsIHdpZHRoIG9mIHRoaXMgcmVjdGFuZ2xlXG4gKiBAcGFyYW0gaGVpZ2h0IHtudW1iZXJ9IFRoZSBvdmVyYWxsIGhlaWdodCBvZiB0aGlzIHJlY3RhbmdsZVxuICovXG5mdW5jdGlvbiBSZWN0YW5nbGUoeCwgeSwgd2lkdGgsIGhlaWdodClcbntcbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMFxuICAgICAqL1xuICAgIHRoaXMueCA9IHggfHwgMDtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAwXG4gICAgICovXG4gICAgdGhpcy55ID0geSB8fCAwO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDBcbiAgICAgKi9cbiAgICB0aGlzLndpZHRoID0gd2lkdGggfHwgMDtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAwXG4gICAgICovXG4gICAgdGhpcy5oZWlnaHQgPSBoZWlnaHQgfHwgMDtcblxuICAgIC8qKlxuICAgICAqIFRoZSB0eXBlIG9mIHRoZSBvYmplY3QsIG1haW5seSB1c2VkIHRvIGF2b2lkIGBpbnN0YW5jZW9mYCBjaGVja3NcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLnR5cGUgPSBDT05TVC5TSEFQRVMuUkVDVDtcbn1cblxuUmVjdGFuZ2xlLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFJlY3RhbmdsZTtcbm1vZHVsZS5leHBvcnRzID0gUmVjdGFuZ2xlO1xuXG4vKipcbiAqIEEgY29uc3RhbnQgZW1wdHkgcmVjdGFuZ2xlLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBjb25zdGFudFxuICovXG5SZWN0YW5nbGUuRU1QVFkgPSBuZXcgUmVjdGFuZ2xlKDAsIDAsIDAsIDApO1xuXG5cbi8qKlxuICogQ3JlYXRlcyBhIGNsb25lIG9mIHRoaXMgUmVjdGFuZ2xlXG4gKlxuICogQHJldHVybiB7UElYSS5SZWN0YW5nbGV9IGEgY29weSBvZiB0aGUgcmVjdGFuZ2xlXG4gKi9cblJlY3RhbmdsZS5wcm90b3R5cGUuY2xvbmUgPSBmdW5jdGlvbiAoKVxue1xuICAgIHJldHVybiBuZXcgUmVjdGFuZ2xlKHRoaXMueCwgdGhpcy55LCB0aGlzLndpZHRoLCB0aGlzLmhlaWdodCk7XG59O1xuXG4vKipcbiAqIENoZWNrcyB3aGV0aGVyIHRoZSB4IGFuZCB5IGNvb3JkaW5hdGVzIGdpdmVuIGFyZSBjb250YWluZWQgd2l0aGluIHRoaXMgUmVjdGFuZ2xlXG4gKlxuICogQHBhcmFtIHgge251bWJlcn0gVGhlIFggY29vcmRpbmF0ZSBvZiB0aGUgcG9pbnQgdG8gdGVzdFxuICogQHBhcmFtIHkge251bWJlcn0gVGhlIFkgY29vcmRpbmF0ZSBvZiB0aGUgcG9pbnQgdG8gdGVzdFxuICogQHJldHVybiB7Ym9vbGVhbn0gV2hldGhlciB0aGUgeC95IGNvb3JkaW5hdGVzIGFyZSB3aXRoaW4gdGhpcyBSZWN0YW5nbGVcbiAqL1xuUmVjdGFuZ2xlLnByb3RvdHlwZS5jb250YWlucyA9IGZ1bmN0aW9uICh4LCB5KVxue1xuICAgIGlmICh0aGlzLndpZHRoIDw9IDAgfHwgdGhpcy5oZWlnaHQgPD0gMClcbiAgICB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBpZiAoeCA+PSB0aGlzLnggJiYgeCA8IHRoaXMueCArIHRoaXMud2lkdGgpXG4gICAge1xuICAgICAgICBpZiAoeSA+PSB0aGlzLnkgJiYgeSA8IHRoaXMueSArIHRoaXMuaGVpZ2h0KVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBmYWxzZTtcbn07XG4iLCJ2YXIgQ09OU1QgPSByZXF1aXJlKCcuLi8uLi9jb25zdCcpO1xuXG4vKipcbiAqIFRoZSBSb3VuZGVkIFJlY3RhbmdsZSBvYmplY3QgaXMgYW4gYXJlYSB0aGF0IGhhcyBuaWNlIHJvdW5kZWQgY29ybmVycywgYXMgaW5kaWNhdGVkIGJ5IGl0cyB0b3AtbGVmdCBjb3JuZXIgcG9pbnQgKHgsIHkpIGFuZCBieSBpdHMgd2lkdGggYW5kIGl0cyBoZWlnaHQgYW5kIGl0cyByYWRpdXMuXG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIHgge251bWJlcn0gVGhlIFggY29vcmRpbmF0ZSBvZiB0aGUgdXBwZXItbGVmdCBjb3JuZXIgb2YgdGhlIHJvdW5kZWQgcmVjdGFuZ2xlXG4gKiBAcGFyYW0geSB7bnVtYmVyfSBUaGUgWSBjb29yZGluYXRlIG9mIHRoZSB1cHBlci1sZWZ0IGNvcm5lciBvZiB0aGUgcm91bmRlZCByZWN0YW5nbGVcbiAqIEBwYXJhbSB3aWR0aCB7bnVtYmVyfSBUaGUgb3ZlcmFsbCB3aWR0aCBvZiB0aGlzIHJvdW5kZWQgcmVjdGFuZ2xlXG4gKiBAcGFyYW0gaGVpZ2h0IHtudW1iZXJ9IFRoZSBvdmVyYWxsIGhlaWdodCBvZiB0aGlzIHJvdW5kZWQgcmVjdGFuZ2xlXG4gKiBAcGFyYW0gcmFkaXVzIHtudW1iZXJ9IENvbnRyb2xzIHRoZSByYWRpdXMgb2YgdGhlIHJvdW5kZWQgY29ybmVyc1xuICovXG5mdW5jdGlvbiBSb3VuZGVkUmVjdGFuZ2xlKHgsIHksIHdpZHRoLCBoZWlnaHQsIHJhZGl1cylcbntcbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMFxuICAgICAqL1xuICAgIHRoaXMueCA9IHggfHwgMDtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAwXG4gICAgICovXG4gICAgdGhpcy55ID0geSB8fCAwO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDBcbiAgICAgKi9cbiAgICB0aGlzLndpZHRoID0gd2lkdGggfHwgMDtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAwXG4gICAgICovXG4gICAgdGhpcy5oZWlnaHQgPSBoZWlnaHQgfHwgMDtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAyMFxuICAgICAqL1xuICAgIHRoaXMucmFkaXVzID0gcmFkaXVzIHx8IDIwO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHR5cGUgb2YgdGhlIG9iamVjdCwgbWFpbmx5IHVzZWQgdG8gYXZvaWQgYGluc3RhbmNlb2ZgIGNoZWNrc1xuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMudHlwZSA9IENPTlNULlNIQVBFUy5SUkVDO1xufVxuXG5Sb3VuZGVkUmVjdGFuZ2xlLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFJvdW5kZWRSZWN0YW5nbGU7XG5tb2R1bGUuZXhwb3J0cyA9IFJvdW5kZWRSZWN0YW5nbGU7XG5cbi8qKlxuICogQ3JlYXRlcyBhIGNsb25lIG9mIHRoaXMgUm91bmRlZCBSZWN0YW5nbGVcbiAqXG4gKiBAcmV0dXJuIHtQSVhJLlJvdW5kZWRSZWN0YW5nbGV9IGEgY29weSBvZiB0aGUgcm91bmRlZCByZWN0YW5nbGVcbiAqL1xuUm91bmRlZFJlY3RhbmdsZS5wcm90b3R5cGUuY2xvbmUgPSBmdW5jdGlvbiAoKVxue1xuICAgIHJldHVybiBuZXcgUm91bmRlZFJlY3RhbmdsZSh0aGlzLngsIHRoaXMueSwgdGhpcy53aWR0aCwgdGhpcy5oZWlnaHQsIHRoaXMucmFkaXVzKTtcbn07XG5cbi8qKlxuICogQ2hlY2tzIHdoZXRoZXIgdGhlIHggYW5kIHkgY29vcmRpbmF0ZXMgZ2l2ZW4gYXJlIGNvbnRhaW5lZCB3aXRoaW4gdGhpcyBSb3VuZGVkIFJlY3RhbmdsZVxuICpcbiAqIEBwYXJhbSB4IHtudW1iZXJ9IFRoZSBYIGNvb3JkaW5hdGUgb2YgdGhlIHBvaW50IHRvIHRlc3RcbiAqIEBwYXJhbSB5IHtudW1iZXJ9IFRoZSBZIGNvb3JkaW5hdGUgb2YgdGhlIHBvaW50IHRvIHRlc3RcbiAqIEByZXR1cm4ge2Jvb2xlYW59IFdoZXRoZXIgdGhlIHgveSBjb29yZGluYXRlcyBhcmUgd2l0aGluIHRoaXMgUm91bmRlZCBSZWN0YW5nbGVcbiAqL1xuUm91bmRlZFJlY3RhbmdsZS5wcm90b3R5cGUuY29udGFpbnMgPSBmdW5jdGlvbiAoeCwgeSlcbntcbiAgICBpZiAodGhpcy53aWR0aCA8PSAwIHx8IHRoaXMuaGVpZ2h0IDw9IDApXG4gICAge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgaWYgKHggPj0gdGhpcy54ICYmIHggPD0gdGhpcy54ICsgdGhpcy53aWR0aClcbiAgICB7XG4gICAgICAgIGlmICh5ID49IHRoaXMueSAmJiB5IDw9IHRoaXMueSArIHRoaXMuaGVpZ2h0KVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBmYWxzZTtcbn07XG4iLCJ2YXIgQ29udGFpbmVyID0gcmVxdWlyZSgnLi4vZGlzcGxheS9Db250YWluZXInKSxcbiAgICBDT05TVCA9IHJlcXVpcmUoJy4uL2NvbnN0Jyk7XG5cbi8qKlxuICogVGhlIFBhcnRpY2xlQ29udGFpbmVyIGNsYXNzIGlzIGEgcmVhbGx5IGZhc3QgdmVyc2lvbiBvZiB0aGUgQ29udGFpbmVyIGJ1aWx0IHNvbGVseSBmb3Igc3BlZWQsXG4gKiBzbyB1c2Ugd2hlbiB5b3UgbmVlZCBhIGxvdCBvZiBzcHJpdGVzIG9yIHBhcnRpY2xlcy4gVGhlIHRyYWRlb2ZmIG9mIHRoZSBQYXJ0aWNsZUNvbnRhaW5lciBpcyB0aGF0IGFkdmFuY2VkXG4gKiBmdW5jdGlvbmFsaXR5IHdpbGwgbm90IHdvcmsuIFBhcnRpY2xlQ29udGFpbmVyIGltcGxlbWVudHMgb25seSB0aGUgYmFzaWMgb2JqZWN0IHRyYW5zZm9ybSAocG9zaXRpb24sIHNjYWxlLCByb3RhdGlvbikuXG4gKiBBbnkgb3RoZXIgZnVuY3Rpb25hbGl0eSBsaWtlIHRpbnRpbmcsIG1hc2tpbmcsIGV0YyB3aWxsIG5vdCB3b3JrIG9uIHNwcml0ZXMgaW4gdGhpcyBiYXRjaC5cbiAqXG4gKiBJdCdzIGV4dHJlbWVseSBlYXN5IHRvIHVzZSA6XG4gKlxuICogYGBganNcbiAqIHZhciBjb250YWluZXIgPSBuZXcgUGFydGljbGVDb250YWluZXIoKTtcbiAqXG4gKiBmb3IgKHZhciBpID0gMDsgaSA8IDEwMDsgKytpKVxuICoge1xuICogICAgIHZhciBzcHJpdGUgPSBuZXcgUElYSS5TcHJpdGUuZnJvbUltYWdlKFwibXlJbWFnZS5wbmdcIik7XG4gKiAgICAgY29udGFpbmVyLmFkZENoaWxkKHNwcml0ZSk7XG4gKiB9XG4gKiBgYGBcbiAqXG4gKiBBbmQgaGVyZSB5b3UgaGF2ZSBhIGh1bmRyZWQgc3ByaXRlcyB0aGF0IHdpbGwgYmUgcmVuZGVyZXIgYXQgdGhlIHNwZWVkIG9mIGxpZ2h0LlxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5Db250YWluZXJcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gW21heFNpemU9MTUwMDBdIHtudW1iZXJ9IFRoZSBtYXhpbXVtIG51bWJlciBvZiBwYXJ0aWNsZXMgdGhhdCBjYW4gYmUgcmVuZGVyZXIgYnkgdGhlIGNvbnRhaW5lci5cbiAqIEBwYXJhbSBbcHJvcGVydGllc10ge29iamVjdH0gVGhlIHByb3BlcnRpZXMgb2YgY2hpbGRyZW4gdGhhdCBzaG91bGQgYmUgdXBsb2FkZWQgdG8gdGhlIGdwdSBhbmQgYXBwbGllZC5cbiAqIEBwYXJhbSBbcHJvcGVydGllcy5zY2FsZT1mYWxzZV0ge2Jvb2xlYW59IFdoZW4gdHJ1ZSwgc2NhbGUgYmUgdXBsb2FkZWQgYW5kIGFwcGxpZWQuXG4gKiBAcGFyYW0gW3Byb3BlcnRpZXMucG9zaXRpb249dHJ1ZV0ge2Jvb2xlYW59IFdoZW4gdHJ1ZSwgcG9zaXRpb24gYmUgdXBsb2FkZWQgYW5kIGFwcGxpZWQuXG4gKiBAcGFyYW0gW3Byb3BlcnRpZXMucm90YXRpb249ZmFsc2VdIHtib29sZWFufSBXaGVuIHRydWUsIHJvdGF0aW9uIGJlIHVwbG9hZGVkIGFuZCBhcHBsaWVkLlxuICogQHBhcmFtIFtwcm9wZXJ0aWVzLnV2cz1mYWxzZV0ge2Jvb2xlYW59IFdoZW4gdHJ1ZSwgdXZzIGJlIHVwbG9hZGVkIGFuZCBhcHBsaWVkLlxuICogQHBhcmFtIFtwcm9wZXJ0aWVzLmFscGhhPWZhbHNlXSB7Ym9vbGVhbn0gV2hlbiB0cnVlLCBhbHBoYSBiZSB1cGxvYWRlZCBhbmQgYXBwbGllZC5cbiAqIEBwYXJhbSBbYmF0Y2hTaXplPTE1MDAwXSB7bnVtYmVyfSBOdW1iZXIgb2YgcGFydGljbGVzIHBlciBiYXRjaC5cbiAqL1xuZnVuY3Rpb24gUGFydGljbGVDb250YWluZXIobWF4U2l6ZSwgcHJvcGVydGllcywgYmF0Y2hTaXplKVxue1xuICAgIENvbnRhaW5lci5jYWxsKHRoaXMpO1xuXG4gICAgYmF0Y2hTaXplID0gYmF0Y2hTaXplIHx8IDE1MDAwOyAvL0NPTlNULlNQUklURV9CQVRDSF9TSVpFOyAvLyAyMDAwIGlzIGEgbmljZSBiYWxhbmNlIGJldHdlZW4gbW9iaWxlIC8gZGVza3RvcFxuICAgIG1heFNpemUgPSBtYXhTaXplIHx8IDE1MDAwO1xuXG4gICAgLy8gTWFraW5nIHN1cmUgdGhlIGJhdGNoIHNpemUgaXMgdmFsaWRcbiAgICAvLyA2NTUzNSBpcyBtYXggdmVydGV4IGluZGV4IGluIHRoZSBpbmRleCBidWZmZXIgKHNlZSBQYXJ0aWNsZVJlbmRlcmVyKVxuICAgIC8vIHNvIG1heCBudW1iZXIgb2YgcGFydGljbGVzIGlzIDY1NTM2IC8gNCA9IDE2Mzg0XG4gICAgdmFyIG1heEJhdGNoU2l6ZSA9IDE2Mzg0O1xuICAgIGlmIChiYXRjaFNpemUgPiBtYXhCYXRjaFNpemUpIHtcbiAgICAgICAgYmF0Y2hTaXplID0gbWF4QmF0Y2hTaXplO1xuICAgIH1cblxuICAgIGlmIChiYXRjaFNpemUgPiBtYXhTaXplKSB7XG4gICAgICAgIGJhdGNoU2l6ZSA9IG1heFNpemU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2V0IHByb3BlcnRpZXMgdG8gYmUgZHluYW1pYyAodHJ1ZSkgLyBzdGF0aWMgKGZhbHNlKVxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbltdfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fcHJvcGVydGllcyA9IFtmYWxzZSwgdHJ1ZSwgZmFsc2UsIGZhbHNlLCBmYWxzZV07XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9tYXhTaXplID0gbWF4U2l6ZTtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX2JhdGNoU2l6ZSA9IGJhdGNoU2l6ZTtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge1dlYkdMQnVmZmVyfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fYnVmZmVycyA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9idWZmZXJUb1VwZGF0ZSA9IDA7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqXG4gICAgICovXG4gICAgdGhpcy5pbnRlcmFjdGl2ZUNoaWxkcmVuID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYmxlbmQgbW9kZSB0byBiZSBhcHBsaWVkIHRvIHRoZSBzcHJpdGUuIEFwcGx5IGEgdmFsdWUgb2YgYFBJWEkuQkxFTkRfTU9ERVMuTk9STUFMYCB0byByZXNldCB0aGUgYmxlbmQgbW9kZS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCBQSVhJLkJMRU5EX01PREVTLk5PUk1BTFxuICAgICAqIEBzZWUgUElYSS5CTEVORF9NT0RFU1xuICAgICAqL1xuICAgIHRoaXMuYmxlbmRNb2RlID0gQ09OU1QuQkxFTkRfTU9ERVMuTk9STUFMO1xuXG4gICAgLyoqXG4gICAgICogVXNlZCBmb3IgY2FudmFzIHJlbmRlcmVyaW5nLiBJZiB0cnVlIHRoZW4gdGhlIGVsZW1lbnRzIHdpbGwgYmUgcG9zaXRpb25lZCBhdCB0aGUgbmVhcmVzdCBwaXhlbC4gVGhpcyBwcm92aWRlcyBhIG5pY2Ugc3BlZWQgYm9vc3QuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqIEBkZWZhdWx0IHRydWU7XG4gICAgICovXG4gICAgdGhpcy5yb3VuZFBpeGVscyA9IHRydWU7XG5cbiAgICB0aGlzLnNldFByb3BlcnRpZXMocHJvcGVydGllcyk7XG59XG5cblBhcnRpY2xlQ29udGFpbmVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoQ29udGFpbmVyLnByb3RvdHlwZSk7XG5QYXJ0aWNsZUNvbnRhaW5lci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBQYXJ0aWNsZUNvbnRhaW5lcjtcbm1vZHVsZS5leHBvcnRzID0gUGFydGljbGVDb250YWluZXI7XG5cbi8qKlxuICogU2V0cyB0aGUgcHJpdmF0ZSBwcm9wZXJ0aWVzIGFycmF5IHRvIGR5bmFtaWMgLyBzdGF0aWMgYmFzZWQgb24gdGhlIHBhc3NlZCBwcm9wZXJ0aWVzIG9iamVjdFxuICpcbiAqIEBwYXJhbSBwcm9wZXJ0aWVzIHtvYmplY3R9IFRoZSBwcm9wZXJ0aWVzIHRvIGJlIHVwbG9hZGVkXG4gKi9cblBhcnRpY2xlQ29udGFpbmVyLnByb3RvdHlwZS5zZXRQcm9wZXJ0aWVzID0gZnVuY3Rpb24ocHJvcGVydGllcylcbntcbiAgICBpZiAoIHByb3BlcnRpZXMgKSB7XG4gICAgICAgIHRoaXMuX3Byb3BlcnRpZXNbMF0gPSAnc2NhbGUnIGluIHByb3BlcnRpZXMgPyAhIXByb3BlcnRpZXMuc2NhbGUgOiB0aGlzLl9wcm9wZXJ0aWVzWzBdO1xuICAgICAgICB0aGlzLl9wcm9wZXJ0aWVzWzFdID0gJ3Bvc2l0aW9uJyBpbiBwcm9wZXJ0aWVzID8gISFwcm9wZXJ0aWVzLnBvc2l0aW9uIDogdGhpcy5fcHJvcGVydGllc1sxXTtcbiAgICAgICAgdGhpcy5fcHJvcGVydGllc1syXSA9ICdyb3RhdGlvbicgaW4gcHJvcGVydGllcyA/ICEhcHJvcGVydGllcy5yb3RhdGlvbiA6IHRoaXMuX3Byb3BlcnRpZXNbMl07XG4gICAgICAgIHRoaXMuX3Byb3BlcnRpZXNbM10gPSAndXZzJyBpbiBwcm9wZXJ0aWVzID8gISFwcm9wZXJ0aWVzLnV2cyA6IHRoaXMuX3Byb3BlcnRpZXNbM107XG4gICAgICAgIHRoaXMuX3Byb3BlcnRpZXNbNF0gPSAnYWxwaGEnIGluIHByb3BlcnRpZXMgPyAhIXByb3BlcnRpZXMuYWxwaGEgOiB0aGlzLl9wcm9wZXJ0aWVzWzRdO1xuICAgIH1cbn07XG5cbi8qKlxuICogVXBkYXRlcyB0aGUgb2JqZWN0IHRyYW5zZm9ybSBmb3IgcmVuZGVyaW5nXG4gKlxuICogQHByaXZhdGVcbiAqL1xuUGFydGljbGVDb250YWluZXIucHJvdG90eXBlLnVwZGF0ZVRyYW5zZm9ybSA9IGZ1bmN0aW9uICgpXG57XG5cbiAgICAvLyBUT0RPIGRvbid0IG5lZWQgdG8hXG4gICAgdGhpcy5kaXNwbGF5T2JqZWN0VXBkYXRlVHJhbnNmb3JtKCk7XG4gICAgLy8gIFBJWEkuQ29udGFpbmVyLnByb3RvdHlwZS51cGRhdGVUcmFuc2Zvcm0uY2FsbCggdGhpcyApO1xufTtcblxuLyoqXG4gKiBSZW5kZXJzIHRoZSBjb250YWluZXIgdXNpbmcgdGhlIFdlYkdMIHJlbmRlcmVyXG4gKlxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLldlYkdMUmVuZGVyZXJ9IFRoZSB3ZWJnbCByZW5kZXJlclxuICogQHByaXZhdGVcbiAqL1xuUGFydGljbGVDb250YWluZXIucHJvdG90eXBlLnJlbmRlcldlYkdMID0gZnVuY3Rpb24gKHJlbmRlcmVyKVxue1xuICAgIGlmICghdGhpcy52aXNpYmxlIHx8IHRoaXMud29ybGRBbHBoYSA8PSAwIHx8ICF0aGlzLmNoaWxkcmVuLmxlbmd0aCB8fCAhdGhpcy5yZW5kZXJhYmxlKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHJlbmRlcmVyLnNldE9iamVjdFJlbmRlcmVyKCByZW5kZXJlci5wbHVnaW5zLnBhcnRpY2xlICk7XG4gICAgcmVuZGVyZXIucGx1Z2lucy5wYXJ0aWNsZS5yZW5kZXIoIHRoaXMgKTtcbn07XG5cbi8qKlxuICogU2V0IHRoZSBmbGFnIHRoYXQgc3RhdGljIGRhdGEgc2hvdWxkIGJlIHVwZGF0ZWQgdG8gdHJ1ZVxuICpcbiAqIEBwcml2YXRlXG4gKi9cblBhcnRpY2xlQ29udGFpbmVyLnByb3RvdHlwZS5vbkNoaWxkcmVuQ2hhbmdlID0gZnVuY3Rpb24gKHNtYWxsZXN0Q2hpbGRJbmRleClcbntcbiAgICB2YXIgYnVmZmVySW5kZXggPSBNYXRoLmZsb29yKHNtYWxsZXN0Q2hpbGRJbmRleCAvIHRoaXMuX2JhdGNoU2l6ZSk7XG4gICAgaWYgKGJ1ZmZlckluZGV4IDwgdGhpcy5fYnVmZmVyVG9VcGRhdGUpIHtcbiAgICAgICAgdGhpcy5fYnVmZmVyVG9VcGRhdGUgPSBidWZmZXJJbmRleDtcbiAgICB9XG59O1xuXG4vKipcbiAqIFJlbmRlcnMgdGhlIG9iamVjdCB1c2luZyB0aGUgQ2FudmFzIHJlbmRlcmVyXG4gKlxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLkNhbnZhc1JlbmRlcmVyfSBUaGUgY2FudmFzIHJlbmRlcmVyXG4gKiBAcHJpdmF0ZVxuICovXG5QYXJ0aWNsZUNvbnRhaW5lci5wcm90b3R5cGUucmVuZGVyQ2FudmFzID0gZnVuY3Rpb24gKHJlbmRlcmVyKVxue1xuICAgIGlmICghdGhpcy52aXNpYmxlIHx8IHRoaXMud29ybGRBbHBoYSA8PSAwIHx8ICF0aGlzLmNoaWxkcmVuLmxlbmd0aCB8fCAhdGhpcy5yZW5kZXJhYmxlKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHZhciBjb250ZXh0ID0gcmVuZGVyZXIuY29udGV4dDtcbiAgICB2YXIgdHJhbnNmb3JtID0gdGhpcy53b3JsZFRyYW5zZm9ybTtcbiAgICB2YXIgaXNSb3RhdGVkID0gdHJ1ZTtcblxuICAgIHZhciBwb3NpdGlvblggPSAwO1xuICAgIHZhciBwb3NpdGlvblkgPSAwO1xuXG4gICAgdmFyIGZpbmFsV2lkdGggPSAwO1xuICAgIHZhciBmaW5hbEhlaWdodCA9IDA7XG5cbiAgICB2YXIgY29tcG9zaXRlT3BlcmF0aW9uID0gcmVuZGVyZXIuYmxlbmRNb2Rlc1t0aGlzLmJsZW5kTW9kZV07XG4gICAgaWYgKGNvbXBvc2l0ZU9wZXJhdGlvbiAhPT0gY29udGV4dC5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb24pXG4gICAge1xuICAgICAgICBjb250ZXh0Lmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbiA9IGNvbXBvc2l0ZU9wZXJhdGlvbjtcbiAgICB9XG5cbiAgICBjb250ZXh0Lmdsb2JhbEFscGhhID0gdGhpcy53b3JsZEFscGhhO1xuXG4gICAgdGhpcy5kaXNwbGF5T2JqZWN0VXBkYXRlVHJhbnNmb3JtKCk7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuY2hpbGRyZW4ubGVuZ3RoOyArK2kpXG4gICAge1xuICAgICAgICB2YXIgY2hpbGQgPSB0aGlzLmNoaWxkcmVuW2ldO1xuXG4gICAgICAgIGlmICghY2hpbGQudmlzaWJsZSlcbiAgICAgICAge1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgZnJhbWUgPSBjaGlsZC50ZXh0dXJlLmZyYW1lO1xuXG4gICAgICAgIGNvbnRleHQuZ2xvYmFsQWxwaGEgPSB0aGlzLndvcmxkQWxwaGEgKiBjaGlsZC5hbHBoYTtcblxuICAgICAgICBpZiAoY2hpbGQucm90YXRpb24gJSAoTWF0aC5QSSAqIDIpID09PSAwKVxuICAgICAgICB7XG4gICAgICAgICAgICAvLyB0aGlzIGlzIHRoZSBmYXN0ZXN0ICB3YXkgdG8gb3B0aW1pc2UhIC0gaWYgcm90YXRpb24gaXMgMCB0aGVuIHdlIGNhbiBhdm9pZCBhbnkga2luZCBvZiBzZXRUcmFuc2Zvcm0gY2FsbFxuICAgICAgICAgICAgaWYgKGlzUm90YXRlZClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb250ZXh0LnNldFRyYW5zZm9ybShcbiAgICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtLmEsXG4gICAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybS5iLFxuICAgICAgICAgICAgICAgICAgICB0cmFuc2Zvcm0uYyxcbiAgICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtLmQsXG4gICAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybS50eCxcbiAgICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtLnR5XG4gICAgICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgICAgIGlzUm90YXRlZCA9IGZhbHNlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBwb3NpdGlvblggPSAoKGNoaWxkLmFuY2hvci54KSAqICgtZnJhbWUud2lkdGggKiBjaGlsZC5zY2FsZS54KSArIGNoaWxkLnBvc2l0aW9uLnggICsgMC41KTtcbiAgICAgICAgICAgIHBvc2l0aW9uWSA9ICgoY2hpbGQuYW5jaG9yLnkpICogKC1mcmFtZS5oZWlnaHQgKiBjaGlsZC5zY2FsZS55KSArIGNoaWxkLnBvc2l0aW9uLnkgICsgMC41KTtcblxuICAgICAgICAgICAgZmluYWxXaWR0aCA9IGZyYW1lLndpZHRoICogY2hpbGQuc2NhbGUueDtcbiAgICAgICAgICAgIGZpbmFsSGVpZ2h0ID0gZnJhbWUuaGVpZ2h0ICogY2hpbGQuc2NhbGUueTtcblxuICAgICAgICB9XG4gICAgICAgIGVsc2VcbiAgICAgICAge1xuICAgICAgICAgICAgaWYgKCFpc1JvdGF0ZWQpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgaXNSb3RhdGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY2hpbGQuZGlzcGxheU9iamVjdFVwZGF0ZVRyYW5zZm9ybSgpO1xuXG4gICAgICAgICAgICB2YXIgY2hpbGRUcmFuc2Zvcm0gPSBjaGlsZC53b3JsZFRyYW5zZm9ybTtcblxuICAgICAgICAgICAgaWYgKHJlbmRlcmVyLnJvdW5kUGl4ZWxzKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGNvbnRleHQuc2V0VHJhbnNmb3JtKFxuICAgICAgICAgICAgICAgICAgICBjaGlsZFRyYW5zZm9ybS5hLFxuICAgICAgICAgICAgICAgICAgICBjaGlsZFRyYW5zZm9ybS5iLFxuICAgICAgICAgICAgICAgICAgICBjaGlsZFRyYW5zZm9ybS5jLFxuICAgICAgICAgICAgICAgICAgICBjaGlsZFRyYW5zZm9ybS5kLFxuICAgICAgICAgICAgICAgICAgICBjaGlsZFRyYW5zZm9ybS50eCB8IDAsXG4gICAgICAgICAgICAgICAgICAgIGNoaWxkVHJhbnNmb3JtLnR5IHwgMFxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29udGV4dC5zZXRUcmFuc2Zvcm0oXG4gICAgICAgICAgICAgICAgICAgIGNoaWxkVHJhbnNmb3JtLmEsXG4gICAgICAgICAgICAgICAgICAgIGNoaWxkVHJhbnNmb3JtLmIsXG4gICAgICAgICAgICAgICAgICAgIGNoaWxkVHJhbnNmb3JtLmMsXG4gICAgICAgICAgICAgICAgICAgIGNoaWxkVHJhbnNmb3JtLmQsXG4gICAgICAgICAgICAgICAgICAgIGNoaWxkVHJhbnNmb3JtLnR4LFxuICAgICAgICAgICAgICAgICAgICBjaGlsZFRyYW5zZm9ybS50eVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHBvc2l0aW9uWCA9ICgoY2hpbGQuYW5jaG9yLngpICogKC1mcmFtZS53aWR0aCkgKyAwLjUpO1xuICAgICAgICAgICAgcG9zaXRpb25ZID0gKChjaGlsZC5hbmNob3IueSkgKiAoLWZyYW1lLmhlaWdodCkgKyAwLjUpO1xuXG4gICAgICAgICAgICBmaW5hbFdpZHRoID0gZnJhbWUud2lkdGg7XG4gICAgICAgICAgICBmaW5hbEhlaWdodCA9IGZyYW1lLmhlaWdodDtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnRleHQuZHJhd0ltYWdlKFxuICAgICAgICAgICAgY2hpbGQudGV4dHVyZS5iYXNlVGV4dHVyZS5zb3VyY2UsXG4gICAgICAgICAgICBmcmFtZS54LFxuICAgICAgICAgICAgZnJhbWUueSxcbiAgICAgICAgICAgIGZyYW1lLndpZHRoLFxuICAgICAgICAgICAgZnJhbWUuaGVpZ2h0LFxuICAgICAgICAgICAgcG9zaXRpb25YLFxuICAgICAgICAgICAgcG9zaXRpb25ZLFxuICAgICAgICAgICAgZmluYWxXaWR0aCxcbiAgICAgICAgICAgIGZpbmFsSGVpZ2h0XG4gICAgICAgICk7XG4gICAgfVxufTtcblxuLyoqXG4gKiBEZXN0cm95cyB0aGUgY29udGFpbmVyXG4gKlxuICogQHBhcmFtIFtkZXN0cm95Q2hpbGRyZW49ZmFsc2VdIHtib29sZWFufSBpZiBzZXQgdG8gdHJ1ZSwgYWxsIHRoZSBjaGlsZHJlbiB3aWxsIGhhdmUgdGhlaXIgZGVzdHJveSBtZXRob2QgY2FsbGVkIGFzIHdlbGxcbiAqL1xuUGFydGljbGVDb250YWluZXIucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoKSB7XG4gICAgQ29udGFpbmVyLnByb3RvdHlwZS5kZXN0cm95LmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG5cbiAgICBpZiAodGhpcy5fYnVmZmVycykge1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuX2J1ZmZlcnMubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgICAgIHRoaXMuX2J1ZmZlcnNbaV0uZGVzdHJveSgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5fcHJvcGVydGllcyA9IG51bGw7XG4gICAgdGhpcy5fYnVmZmVycyA9IG51bGw7XG59O1xuIiwiXG4vKipcbiAqIEBhdXRob3IgTWF0IEdyb3Zlc1xuICpcbiAqIEJpZyB0aGFua3MgdG8gdGhlIHZlcnkgY2xldmVyIE1hdHQgRGVzTGF1cmllcnMgPG1hdHRkZXNsPiBodHRwczovL2dpdGh1Yi5jb20vbWF0dGRlc2wvXG4gKiBmb3IgY3JlYXRpbmcgdGhlIG9yaWdpbmFsIHBpeGkgdmVyc2lvbiFcbiAqIEFsc28gYSB0aGFua3MgdG8gaHR0cHM6Ly9naXRodWIuY29tL2JjaGV2YWxpZXIgZm9yIHR3ZWFraW5nIHRoZSB0aW50IGFuZCBhbHBoYSBzbyB0aGF0IHRoZXkgbm93IHNoYXJlIDQgYnl0ZXMgb24gdGhlIHZlcnRleCBidWZmZXJcbiAqXG4gKiBIZWF2aWx5IGluc3BpcmVkIGJ5IExpYkdEWCdzIFBhcnRpY2xlQnVmZmVyOlxuICogaHR0cHM6Ly9naXRodWIuY29tL2xpYmdkeC9saWJnZHgvYmxvYi9tYXN0ZXIvZ2R4L3NyYy9jb20vYmFkbG9naWMvZ2R4L2dyYXBoaWNzL2cyZC9QYXJ0aWNsZUJ1ZmZlci5qYXZhXG4gKi9cblxuLyoqXG4gKiBUaGUgcGFydGljbGUgYnVmZmVyIG1hbmFnZXMgdGhlIHN0YXRpYyBhbmQgZHluYW1pYyBidWZmZXJzIGZvciBhIHBhcnRpY2xlIGNvbnRhaW5lci5cbiAqXG4gKiBAY2xhc3NcbiAqIEBwcml2YXRlXG4gKiBAbWVtYmVyb2YgUElYSVxuICovXG5mdW5jdGlvbiBQYXJ0aWNsZUJ1ZmZlcihnbCwgcHJvcGVydGllcywgZHluYW1pY1Byb3BlcnR5RmxhZ3MsIHNpemUpXG57XG4gICAgLyoqXG4gICAgICogVGhlIGN1cnJlbnQgV2ViR0wgZHJhd2luZyBjb250ZXh0LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7V2ViR0xSZW5kZXJpbmdDb250ZXh0fVxuICAgICAqL1xuICAgIHRoaXMuZ2wgPSBnbDtcblxuICAgIC8qKlxuICAgICAqIFNpemUgb2YgYSBzaW5nbGUgdmVydGV4LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMudmVydFNpemUgPSAyO1xuXG4gICAgLyoqXG4gICAgICogU2l6ZSBvZiBhIHNpbmdsZSB2ZXJ0ZXggaW4gYnl0ZXMuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy52ZXJ0Qnl0ZVNpemUgPSB0aGlzLnZlcnRTaXplICogNDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBudW1iZXIgb2YgcGFydGljbGVzIHRoZSBidWZmZXIgY2FuIGhvbGRcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLnNpemUgPSBzaXplO1xuXG4gICAgLyoqXG4gICAgICogQSBsaXN0IG9mIHRoZSBwcm9wZXJ0aWVzIHRoYXQgYXJlIGR5bmFtaWMuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtvYmplY3RbXX1cbiAgICAgKi9cbiAgICB0aGlzLmR5bmFtaWNQcm9wZXJ0aWVzID0gW107XG5cbiAgICAvKipcbiAgICAgKiBBIGxpc3Qgb2YgdGhlIHByb3BlcnRpZXMgdGhhdCBhcmUgc3RhdGljLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7b2JqZWN0W119XG4gICAgICovXG4gICAgdGhpcy5zdGF0aWNQcm9wZXJ0aWVzID0gW107XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BlcnRpZXMubGVuZ3RoOyBpKyspXG4gICAge1xuICAgICAgICB2YXIgcHJvcGVydHkgPSBwcm9wZXJ0aWVzW2ldO1xuXG4gICAgICAgIGlmKGR5bmFtaWNQcm9wZXJ0eUZsYWdzW2ldKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmR5bmFtaWNQcm9wZXJ0aWVzLnB1c2gocHJvcGVydHkpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2VcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5zdGF0aWNQcm9wZXJ0aWVzLnB1c2gocHJvcGVydHkpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5zdGF0aWNTdHJpZGUgPSAwO1xuICAgIHRoaXMuc3RhdGljQnVmZmVyID0gbnVsbDtcbiAgICB0aGlzLnN0YXRpY0RhdGEgPSBudWxsO1xuXG4gICAgdGhpcy5keW5hbWljU3RyaWRlID0gMDtcbiAgICB0aGlzLmR5bmFtaWNCdWZmZXIgPSBudWxsO1xuICAgIHRoaXMuZHluYW1pY0RhdGEgPSBudWxsO1xuXG4gICAgdGhpcy5pbml0QnVmZmVycygpO1xuXG59XG5cblBhcnRpY2xlQnVmZmVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFBhcnRpY2xlQnVmZmVyO1xubW9kdWxlLmV4cG9ydHMgPSBQYXJ0aWNsZUJ1ZmZlcjtcblxuLyoqXG4gKiBTZXRzIHVwIHRoZSByZW5kZXJlciBjb250ZXh0IGFuZCBuZWNlc3NhcnkgYnVmZmVycy5cbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5QYXJ0aWNsZUJ1ZmZlci5wcm90b3R5cGUuaW5pdEJ1ZmZlcnMgPSBmdW5jdGlvbiAoKVxue1xuICAgIHZhciBnbCA9IHRoaXMuZ2w7XG4gICAgdmFyIGk7XG4gICAgdmFyIHByb3BlcnR5O1xuXG4gICAgdmFyIGR5bmFtaWNPZmZzZXQgPSAwO1xuICAgIHRoaXMuZHluYW1pY1N0cmlkZSA9IDA7XG5cbiAgICBmb3IgKGkgPSAwOyBpIDwgdGhpcy5keW5hbWljUHJvcGVydGllcy5sZW5ndGg7IGkrKylcbiAgICB7XG4gICAgICAgIHByb3BlcnR5ID0gdGhpcy5keW5hbWljUHJvcGVydGllc1tpXTtcblxuICAgICAgICBwcm9wZXJ0eS5vZmZzZXQgPSBkeW5hbWljT2Zmc2V0O1xuICAgICAgICBkeW5hbWljT2Zmc2V0ICs9IHByb3BlcnR5LnNpemU7XG4gICAgICAgIHRoaXMuZHluYW1pY1N0cmlkZSArPSBwcm9wZXJ0eS5zaXplO1xuICAgIH1cblxuICAgIHRoaXMuZHluYW1pY0RhdGEgPSBuZXcgRmxvYXQzMkFycmF5KCB0aGlzLnNpemUgKiB0aGlzLmR5bmFtaWNTdHJpZGUgKiA0KTtcbiAgICB0aGlzLmR5bmFtaWNCdWZmZXIgPSBnbC5jcmVhdGVCdWZmZXIoKTtcblxuICAgIGdsLmJpbmRCdWZmZXIoZ2wuQVJSQVlfQlVGRkVSLCB0aGlzLmR5bmFtaWNCdWZmZXIpO1xuICAgIGdsLmJ1ZmZlckRhdGEoZ2wuQVJSQVlfQlVGRkVSLCB0aGlzLmR5bmFtaWNEYXRhLCBnbC5EWU5BTUlDX0RSQVcpO1xuXG5cbiAgICAvLyBzdGF0aWMgLy9cbiAgICB2YXIgc3RhdGljT2Zmc2V0ID0gMDtcbiAgICB0aGlzLnN0YXRpY1N0cmlkZSA9IDA7XG5cbiAgICBmb3IgKGkgPSAwOyBpIDwgdGhpcy5zdGF0aWNQcm9wZXJ0aWVzLmxlbmd0aDsgaSsrKVxuICAgIHtcbiAgICAgICAgcHJvcGVydHkgPSB0aGlzLnN0YXRpY1Byb3BlcnRpZXNbaV07XG5cbiAgICAgICAgcHJvcGVydHkub2Zmc2V0ID0gc3RhdGljT2Zmc2V0O1xuICAgICAgICBzdGF0aWNPZmZzZXQgKz0gcHJvcGVydHkuc2l6ZTtcbiAgICAgICAgdGhpcy5zdGF0aWNTdHJpZGUgKz0gcHJvcGVydHkuc2l6ZTtcbiAgICB9XG5cbiAgICB0aGlzLnN0YXRpY0RhdGEgPSBuZXcgRmxvYXQzMkFycmF5KCB0aGlzLnNpemUgKiB0aGlzLnN0YXRpY1N0cmlkZSAqIDQpO1xuICAgIHRoaXMuc3RhdGljQnVmZmVyID0gZ2wuY3JlYXRlQnVmZmVyKCk7XG5cbiAgICBnbC5iaW5kQnVmZmVyKGdsLkFSUkFZX0JVRkZFUiwgdGhpcy5zdGF0aWNCdWZmZXIpO1xuICAgIGdsLmJ1ZmZlckRhdGEoZ2wuQVJSQVlfQlVGRkVSLCB0aGlzLnN0YXRpY0RhdGEsIGdsLkRZTkFNSUNfRFJBVyk7XG59O1xuXG4vKipcbiAqIFVwbG9hZHMgdGhlIGR5bmFtaWMgcHJvcGVydGllcy5cbiAqXG4gKi9cblBhcnRpY2xlQnVmZmVyLnByb3RvdHlwZS51cGxvYWREeW5hbWljID0gZnVuY3Rpb24oY2hpbGRyZW4sIHN0YXJ0SW5kZXgsIGFtb3VudClcbntcbiAgICB2YXIgZ2wgPSB0aGlzLmdsO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmR5bmFtaWNQcm9wZXJ0aWVzLmxlbmd0aDsgaSsrKVxuICAgIHtcbiAgICAgICAgdmFyIHByb3BlcnR5ID0gdGhpcy5keW5hbWljUHJvcGVydGllc1tpXTtcbiAgICAgICAgcHJvcGVydHkudXBsb2FkRnVuY3Rpb24oY2hpbGRyZW4sIHN0YXJ0SW5kZXgsIGFtb3VudCwgdGhpcy5keW5hbWljRGF0YSwgdGhpcy5keW5hbWljU3RyaWRlLCBwcm9wZXJ0eS5vZmZzZXQpO1xuICAgIH1cblxuICAgIGdsLmJpbmRCdWZmZXIoZ2wuQVJSQVlfQlVGRkVSLCB0aGlzLmR5bmFtaWNCdWZmZXIpO1xuICAgIGdsLmJ1ZmZlclN1YkRhdGEoZ2wuQVJSQVlfQlVGRkVSLCAwLCB0aGlzLmR5bmFtaWNEYXRhKTtcbn07XG5cbi8qKlxuICogVXBsb2FkcyB0aGUgc3RhdGljIHByb3BlcnRpZXMuXG4gKlxuICovXG5QYXJ0aWNsZUJ1ZmZlci5wcm90b3R5cGUudXBsb2FkU3RhdGljID0gZnVuY3Rpb24oY2hpbGRyZW4sIHN0YXJ0SW5kZXgsIGFtb3VudClcbntcbiAgICB2YXIgZ2wgPSB0aGlzLmdsO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLnN0YXRpY1Byb3BlcnRpZXMubGVuZ3RoOyBpKyspXG4gICAge1xuICAgICAgICB2YXIgcHJvcGVydHkgPSB0aGlzLnN0YXRpY1Byb3BlcnRpZXNbaV07XG4gICAgICAgIHByb3BlcnR5LnVwbG9hZEZ1bmN0aW9uKGNoaWxkcmVuLCBzdGFydEluZGV4LCBhbW91bnQsIHRoaXMuc3RhdGljRGF0YSwgdGhpcy5zdGF0aWNTdHJpZGUsIHByb3BlcnR5Lm9mZnNldCk7XG4gICAgfVxuXG4gICAgZ2wuYmluZEJ1ZmZlcihnbC5BUlJBWV9CVUZGRVIsIHRoaXMuc3RhdGljQnVmZmVyKTtcbiAgICBnbC5idWZmZXJTdWJEYXRhKGdsLkFSUkFZX0JVRkZFUiwgMCwgdGhpcy5zdGF0aWNEYXRhKTtcbn07XG5cbi8qKlxuICogQmluZHMgdGhlIGJ1ZmZlcnMgdG8gdGhlIEdQVVxuICpcbiAqL1xuUGFydGljbGVCdWZmZXIucHJvdG90eXBlLmJpbmQgPSBmdW5jdGlvbiAoKVxue1xuICAgIHZhciBnbCA9IHRoaXMuZ2w7XG4gICAgdmFyIGksIHByb3BlcnR5O1xuXG4gICAgZ2wuYmluZEJ1ZmZlcihnbC5BUlJBWV9CVUZGRVIsIHRoaXMuZHluYW1pY0J1ZmZlcik7XG5cbiAgICBmb3IgKGkgPSAwOyBpIDwgdGhpcy5keW5hbWljUHJvcGVydGllcy5sZW5ndGg7IGkrKylcbiAgICB7XG4gICAgICAgIHByb3BlcnR5ID0gdGhpcy5keW5hbWljUHJvcGVydGllc1tpXTtcbiAgICAgICAgZ2wudmVydGV4QXR0cmliUG9pbnRlcihwcm9wZXJ0eS5hdHRyaWJ1dGUsIHByb3BlcnR5LnNpemUsIGdsLkZMT0FULCBmYWxzZSwgdGhpcy5keW5hbWljU3RyaWRlICogNCwgcHJvcGVydHkub2Zmc2V0ICogNCk7XG4gICAgfVxuXG4gICAgZ2wuYmluZEJ1ZmZlcihnbC5BUlJBWV9CVUZGRVIsIHRoaXMuc3RhdGljQnVmZmVyKTtcblxuICAgIGZvciAoaSA9IDA7IGkgPCB0aGlzLnN0YXRpY1Byb3BlcnRpZXMubGVuZ3RoOyBpKyspXG4gICAge1xuICAgICAgICBwcm9wZXJ0eSA9IHRoaXMuc3RhdGljUHJvcGVydGllc1tpXTtcbiAgICAgICAgZ2wudmVydGV4QXR0cmliUG9pbnRlcihwcm9wZXJ0eS5hdHRyaWJ1dGUsIHByb3BlcnR5LnNpemUsIGdsLkZMT0FULCBmYWxzZSwgdGhpcy5zdGF0aWNTdHJpZGUgKiA0LCBwcm9wZXJ0eS5vZmZzZXQgKiA0KTtcbiAgICB9XG59O1xuXG4vKipcbiAqIERlc3Ryb3lzIHRoZSBQYXJ0aWNsZUJ1ZmZlci5cbiAqXG4gKi9cblBhcnRpY2xlQnVmZmVyLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLmR5bmFtaWNQcm9wZXJ0aWVzID0gbnVsbDtcbiAgICB0aGlzLmR5bmFtaWNEYXRhID0gbnVsbDtcbiAgICB0aGlzLmdsLmRlbGV0ZUJ1ZmZlcih0aGlzLmR5bmFtaWNCdWZmZXIpO1xuXG4gICAgdGhpcy5zdGF0aWNQcm9wZXJ0aWVzID0gbnVsbDtcbiAgICB0aGlzLnN0YXRpY0RhdGEgPSBudWxsO1xuICAgIHRoaXMuZ2wuZGVsZXRlQnVmZmVyKHRoaXMuc3RhdGljQnVmZmVyKTtcbn07XG4iLCJ2YXIgT2JqZWN0UmVuZGVyZXIgPSByZXF1aXJlKCcuLi8uLi9yZW5kZXJlcnMvd2ViZ2wvdXRpbHMvT2JqZWN0UmVuZGVyZXInKSxcbiAgICBXZWJHTFJlbmRlcmVyID0gcmVxdWlyZSgnLi4vLi4vcmVuZGVyZXJzL3dlYmdsL1dlYkdMUmVuZGVyZXInKSxcbiAgICBQYXJ0aWNsZVNoYWRlciA9IHJlcXVpcmUoJy4vUGFydGljbGVTaGFkZXInKSxcbiAgICBQYXJ0aWNsZUJ1ZmZlciA9IHJlcXVpcmUoJy4vUGFydGljbGVCdWZmZXInKSxcbiAgICBtYXRoICAgICAgICAgICAgPSByZXF1aXJlKCcuLi8uLi9tYXRoJyk7XG5cbi8qKlxuICogQGF1dGhvciBNYXQgR3JvdmVzXG4gKlxuICogQmlnIHRoYW5rcyB0byB0aGUgdmVyeSBjbGV2ZXIgTWF0dCBEZXNMYXVyaWVycyA8bWF0dGRlc2w+IGh0dHBzOi8vZ2l0aHViLmNvbS9tYXR0ZGVzbC9cbiAqIGZvciBjcmVhdGluZyB0aGUgb3JpZ2luYWwgcGl4aSB2ZXJzaW9uIVxuICogQWxzbyBhIHRoYW5rcyB0byBodHRwczovL2dpdGh1Yi5jb20vYmNoZXZhbGllciBmb3IgdHdlYWtpbmcgdGhlIHRpbnQgYW5kIGFscGhhIHNvIHRoYXQgdGhleSBub3cgc2hhcmUgNCBieXRlcyBvbiB0aGUgdmVydGV4IGJ1ZmZlclxuICpcbiAqIEhlYXZpbHkgaW5zcGlyZWQgYnkgTGliR0RYJ3MgUGFydGljbGVSZW5kZXJlcjpcbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS9saWJnZHgvbGliZ2R4L2Jsb2IvbWFzdGVyL2dkeC9zcmMvY29tL2JhZGxvZ2ljL2dkeC9ncmFwaGljcy9nMmQvUGFydGljbGVSZW5kZXJlci5qYXZhXG4gKi9cblxuLyoqXG4gKlxuICogQGNsYXNzXG4gKiBAcHJpdmF0ZVxuICogQG1lbWJlcm9mIFBJWElcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5XZWJHTFJlbmRlcmVyfSBUaGUgcmVuZGVyZXIgdGhpcyBzcHJpdGUgYmF0Y2ggd29ya3MgZm9yLlxuICovXG5mdW5jdGlvbiBQYXJ0aWNsZVJlbmRlcmVyKHJlbmRlcmVyKVxue1xuICAgIE9iamVjdFJlbmRlcmVyLmNhbGwodGhpcywgcmVuZGVyZXIpO1xuXG4gICAgLy8gNjU1MzUgaXMgbWF4IHZlcnRleCBpbmRleCBpbiB0aGUgaW5kZXggYnVmZmVyIChzZWUgUGFydGljbGVSZW5kZXJlcilcbiAgICAvLyBzbyBtYXggbnVtYmVyIG9mIHBhcnRpY2xlcyBpcyA2NTUzNiAvIDQgPSAxNjM4NFxuICAgIC8vIGFuZCBtYXggbnVtYmVyIG9mIGVsZW1lbnQgaW4gdGhlIGluZGV4IGJ1ZmZlciBpcyAxNjM4NCAqIDYgPSA5ODMwNFxuICAgIC8vIENyZWF0aW5nIGEgZnVsbCBpbmRleCBidWZmZXIsIG92ZXJoZWFkIGlzIDk4MzA0ICogMiA9IDE5NktvXG4gICAgdmFyIG51bUluZGljZXMgPSA5ODMwNDtcblxuICAgIC8qKlxuICAgICAqIEhvbGRzIHRoZSBpbmRpY2VzXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtVaW50MTZBcnJheX1cbiAgICAgKi9cbiAgICB0aGlzLmluZGljZXMgPSBuZXcgVWludDE2QXJyYXkobnVtSW5kaWNlcyk7XG5cbiAgICBmb3IgKHZhciBpPTAsIGo9MDsgaSA8IG51bUluZGljZXM7IGkgKz0gNiwgaiArPSA0KVxuICAgIHtcbiAgICAgICAgdGhpcy5pbmRpY2VzW2kgKyAwXSA9IGogKyAwO1xuICAgICAgICB0aGlzLmluZGljZXNbaSArIDFdID0gaiArIDE7XG4gICAgICAgIHRoaXMuaW5kaWNlc1tpICsgMl0gPSBqICsgMjtcbiAgICAgICAgdGhpcy5pbmRpY2VzW2kgKyAzXSA9IGogKyAwO1xuICAgICAgICB0aGlzLmluZGljZXNbaSArIDRdID0gaiArIDI7XG4gICAgICAgIHRoaXMuaW5kaWNlc1tpICsgNV0gPSBqICsgMztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGUgZGVmYXVsdCBzaGFkZXIgdGhhdCBpcyB1c2VkIGlmIGEgc3ByaXRlIGRvZXNuJ3QgaGF2ZSBhIG1vcmUgc3BlY2lmaWMgb25lLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5TaGFkZXJ9XG4gICAgICovXG4gICAgdGhpcy5zaGFkZXIgPSBudWxsO1xuXG4gICAgdGhpcy5pbmRleEJ1ZmZlciA9IG51bGw7XG5cbiAgICB0aGlzLnByb3BlcnRpZXMgPSBudWxsO1xuXG4gICAgdGhpcy50ZW1wTWF0cml4ID0gbmV3IG1hdGguTWF0cml4KCk7XG59XG5cblBhcnRpY2xlUmVuZGVyZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShPYmplY3RSZW5kZXJlci5wcm90b3R5cGUpO1xuUGFydGljbGVSZW5kZXJlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBQYXJ0aWNsZVJlbmRlcmVyO1xubW9kdWxlLmV4cG9ydHMgPSBQYXJ0aWNsZVJlbmRlcmVyO1xuXG5XZWJHTFJlbmRlcmVyLnJlZ2lzdGVyUGx1Z2luKCdwYXJ0aWNsZScsIFBhcnRpY2xlUmVuZGVyZXIpO1xuXG4vKipcbiAqIFdoZW4gdGhlcmUgaXMgYSBXZWJHTCBjb250ZXh0IGNoYW5nZVxuICpcbiAqIEBwcml2YXRlXG4gKi9cblBhcnRpY2xlUmVuZGVyZXIucHJvdG90eXBlLm9uQ29udGV4dENoYW5nZSA9IGZ1bmN0aW9uICgpXG57XG4gICAgdmFyIGdsID0gdGhpcy5yZW5kZXJlci5nbDtcblxuICAgIC8vIHNldHVwIGRlZmF1bHQgc2hhZGVyXG4gICAgdGhpcy5zaGFkZXIgPSBuZXcgUGFydGljbGVTaGFkZXIodGhpcy5yZW5kZXJlci5zaGFkZXJNYW5hZ2VyKTtcblxuICAgIHRoaXMuaW5kZXhCdWZmZXIgPSBnbC5jcmVhdGVCdWZmZXIoKTtcblxuICAgIC8vIDY1NTM1IGlzIG1heCBpbmRleCwgc28gNjU1MzUgLyA2ID0gMTA5MjIuXG5cbiAgICAvL3VwbG9hZCB0aGUgaW5kZXggZGF0YVxuICAgIGdsLmJpbmRCdWZmZXIoZ2wuRUxFTUVOVF9BUlJBWV9CVUZGRVIsIHRoaXMuaW5kZXhCdWZmZXIpO1xuICAgIGdsLmJ1ZmZlckRhdGEoZ2wuRUxFTUVOVF9BUlJBWV9CVUZGRVIsIHRoaXMuaW5kaWNlcywgZ2wuU1RBVElDX0RSQVcpO1xuXG4gICAgdGhpcy5wcm9wZXJ0aWVzID0gW1xuICAgICAgICAvLyB2ZXJ0aWNlc0RhdGFcbiAgICAgICAge1xuICAgICAgICAgICAgYXR0cmlidXRlOnRoaXMuc2hhZGVyLmF0dHJpYnV0ZXMuYVZlcnRleFBvc2l0aW9uLFxuICAgICAgICAgICAgc2l6ZToyLFxuICAgICAgICAgICAgdXBsb2FkRnVuY3Rpb246dGhpcy51cGxvYWRWZXJ0aWNlcyxcbiAgICAgICAgICAgIG9mZnNldDowXG4gICAgICAgIH0sXG4gICAgICAgIC8vIHBvc2l0aW9uRGF0YVxuICAgICAgICB7XG4gICAgICAgICAgICBhdHRyaWJ1dGU6dGhpcy5zaGFkZXIuYXR0cmlidXRlcy5hUG9zaXRpb25Db29yZCxcbiAgICAgICAgICAgIHNpemU6MixcbiAgICAgICAgICAgIHVwbG9hZEZ1bmN0aW9uOnRoaXMudXBsb2FkUG9zaXRpb24sXG4gICAgICAgICAgICBvZmZzZXQ6MFxuICAgICAgICB9LFxuICAgICAgICAvLyByb3RhdGlvbkRhdGFcbiAgICAgICAge1xuICAgICAgICAgICAgYXR0cmlidXRlOnRoaXMuc2hhZGVyLmF0dHJpYnV0ZXMuYVJvdGF0aW9uLFxuICAgICAgICAgICAgc2l6ZToxLFxuICAgICAgICAgICAgdXBsb2FkRnVuY3Rpb246dGhpcy51cGxvYWRSb3RhdGlvbixcbiAgICAgICAgICAgIG9mZnNldDowXG4gICAgICAgIH0sXG4gICAgICAgIC8vIHV2c0RhdGFcbiAgICAgICAge1xuICAgICAgICAgICAgYXR0cmlidXRlOnRoaXMuc2hhZGVyLmF0dHJpYnV0ZXMuYVRleHR1cmVDb29yZCxcbiAgICAgICAgICAgIHNpemU6MixcbiAgICAgICAgICAgIHVwbG9hZEZ1bmN0aW9uOnRoaXMudXBsb2FkVXZzLFxuICAgICAgICAgICAgb2Zmc2V0OjBcbiAgICAgICAgfSxcbiAgICAgICAgLy8gYWxwaGFEYXRhXG4gICAgICAgIHtcbiAgICAgICAgICAgIGF0dHJpYnV0ZTp0aGlzLnNoYWRlci5hdHRyaWJ1dGVzLmFDb2xvcixcbiAgICAgICAgICAgIHNpemU6MSxcbiAgICAgICAgICAgIHVwbG9hZEZ1bmN0aW9uOnRoaXMudXBsb2FkQWxwaGEsXG4gICAgICAgICAgICBvZmZzZXQ6MFxuICAgICAgICB9XG4gICAgXTtcbn07XG5cbi8qKlxuICogU3RhcnRzIGEgbmV3IHBhcnRpY2xlIGJhdGNoLlxuICpcbiAqL1xuUGFydGljbGVSZW5kZXJlci5wcm90b3R5cGUuc3RhcnQgPSBmdW5jdGlvbiAoKVxue1xuICAgIHZhciBnbCA9IHRoaXMucmVuZGVyZXIuZ2w7XG5cbiAgICAvLyBiaW5kIHRoZSBtYWluIHRleHR1cmVcbiAgICBnbC5hY3RpdmVUZXh0dXJlKGdsLlRFWFRVUkUwKTtcblxuICAgIC8vIGJpbmQgdGhlIGJ1ZmZlcnNcblxuICAgIGdsLmJpbmRCdWZmZXIoZ2wuRUxFTUVOVF9BUlJBWV9CVUZGRVIsIHRoaXMuaW5kZXhCdWZmZXIpO1xuXG4gICAgdmFyIHNoYWRlciA9IHRoaXMuc2hhZGVyO1xuXG4gICAgdGhpcy5yZW5kZXJlci5zaGFkZXJNYW5hZ2VyLnNldFNoYWRlcihzaGFkZXIpO1xufTtcblxuXG4vKipcbiAqIFJlbmRlcnMgdGhlIHBhcnRpY2xlIGNvbnRhaW5lciBvYmplY3QuXG4gKlxuICogQHBhcmFtIGNvbnRhaW5lciB7UElYSS5QYXJ0aWNsZUNvbnRhaW5lcn0gVGhlIGNvbnRhaW5lciB0byByZW5kZXIgdXNpbmcgdGhpcyBQYXJ0aWNsZVJlbmRlcmVyXG4gKi9cblBhcnRpY2xlUmVuZGVyZXIucHJvdG90eXBlLnJlbmRlciA9IGZ1bmN0aW9uIChjb250YWluZXIpXG57XG4gICAgdmFyIGNoaWxkcmVuID0gY29udGFpbmVyLmNoaWxkcmVuLFxuICAgICAgICB0b3RhbENoaWxkcmVuID0gY2hpbGRyZW4ubGVuZ3RoLFxuICAgICAgICBtYXhTaXplID0gY29udGFpbmVyLl9tYXhTaXplLFxuICAgICAgICBiYXRjaFNpemUgPSBjb250YWluZXIuX2JhdGNoU2l6ZTtcblxuICAgIGlmKHRvdGFsQ2hpbGRyZW4gPT09IDApXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIGVsc2UgaWYodG90YWxDaGlsZHJlbiA+IG1heFNpemUpXG4gICAge1xuICAgICAgICB0b3RhbENoaWxkcmVuID0gbWF4U2l6ZTtcbiAgICB9XG5cbiAgICBpZighY29udGFpbmVyLl9idWZmZXJzKVxuICAgIHtcbiAgICAgICAgY29udGFpbmVyLl9idWZmZXJzID0gdGhpcy5nZW5lcmF0ZUJ1ZmZlcnMoIGNvbnRhaW5lciApO1xuICAgIH1cblxuICAgIC8vIGlmIHRoZSB1dnMgaGF2ZSBub3QgdXBkYXRlZCB0aGVuIG5vIHBvaW50IHJlbmRlcmluZyBqdXN0IHlldCFcbiAgICB0aGlzLnJlbmRlcmVyLmJsZW5kTW9kZU1hbmFnZXIuc2V0QmxlbmRNb2RlKGNvbnRhaW5lci5ibGVuZE1vZGUpO1xuXG4gICAgdmFyIGdsID0gdGhpcy5yZW5kZXJlci5nbDtcblxuICAgIHZhciBtID0gIGNvbnRhaW5lci53b3JsZFRyYW5zZm9ybS5jb3B5KCB0aGlzLnRlbXBNYXRyaXggKTtcbiAgICBtLnByZXBlbmQoIHRoaXMucmVuZGVyZXIuY3VycmVudFJlbmRlclRhcmdldC5wcm9qZWN0aW9uTWF0cml4ICk7XG4gICAgZ2wudW5pZm9ybU1hdHJpeDNmdih0aGlzLnNoYWRlci51bmlmb3Jtcy5wcm9qZWN0aW9uTWF0cml4Ll9sb2NhdGlvbiwgZmFsc2UsIG0udG9BcnJheSh0cnVlKSk7XG4gICAgZ2wudW5pZm9ybTFmKHRoaXMuc2hhZGVyLnVuaWZvcm1zLnVBbHBoYS5fbG9jYXRpb24sIGNvbnRhaW5lci53b3JsZEFscGhhKTtcblxuXG4gICAgLy8gbWFrZSBzdXJlIHRoZSB0ZXh0dXJlIGlzIGJvdW5kLi5cbiAgICB2YXIgYmFzZVRleHR1cmUgPSBjaGlsZHJlblswXS5fdGV4dHVyZS5iYXNlVGV4dHVyZTtcblxuICAgIGlmICghYmFzZVRleHR1cmUuX2dsVGV4dHVyZXNbZ2wuaWRdKVxuICAgIHtcbiAgICAgICAgLy8gaWYgdGhlIHRleHR1cmUgaGFzIG5vdCB1cGRhdGVkIHRoZW4gbGV0cyBub3QgdXBsb2FkIGFueSBzdGF0aWMgcHJvcGVydGllc1xuICAgICAgICBpZighdGhpcy5yZW5kZXJlci51cGRhdGVUZXh0dXJlKGJhc2VUZXh0dXJlKSlcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYoIWNvbnRhaW5lci5fcHJvcGVydGllc1swXSB8fCAhY29udGFpbmVyLl9wcm9wZXJ0aWVzWzNdKVxuICAgICAgICB7XG4gICAgICAgICAgICBjb250YWluZXIuX2J1ZmZlclRvVXBkYXRlID0gMDtcbiAgICAgICAgfVxuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICBnbC5iaW5kVGV4dHVyZShnbC5URVhUVVJFXzJELCBiYXNlVGV4dHVyZS5fZ2xUZXh0dXJlc1tnbC5pZF0pO1xuICAgIH1cblxuICAgIC8vIG5vdyBsZXRzIHVwbG9hZCBhbmQgcmVuZGVyIHRoZSBidWZmZXJzLi5cbiAgICBmb3IgKHZhciBpID0gMCwgaiA9IDA7IGkgPCB0b3RhbENoaWxkcmVuOyBpICs9IGJhdGNoU2l6ZSwgaiArPSAxKVxuICAgIHtcbiAgICAgICAgdmFyIGFtb3VudCA9ICggdG90YWxDaGlsZHJlbiAtIGkpO1xuICAgICAgICBpZihhbW91bnQgPiBiYXRjaFNpemUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGFtb3VudCA9IGJhdGNoU2l6ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBidWZmZXIgPSBjb250YWluZXIuX2J1ZmZlcnNbal07XG5cbiAgICAgICAgLy8gd2UgYWx3YXlzIHVwbG9hZCB0aGUgZHluYW1pY1xuICAgICAgICBidWZmZXIudXBsb2FkRHluYW1pYyhjaGlsZHJlbiwgaSwgYW1vdW50KTtcblxuICAgICAgICAvLyB3ZSBvbmx5IHVwbG9hZCB0aGUgc3RhdGljIGNvbnRlbnQgd2hlbiB3ZSBoYXZlIHRvIVxuICAgICAgICBpZihjb250YWluZXIuX2J1ZmZlclRvVXBkYXRlID09PSBqKVxuICAgICAgICB7XG4gICAgICAgICAgICBidWZmZXIudXBsb2FkU3RhdGljKGNoaWxkcmVuLCBpLCBhbW91bnQpO1xuICAgICAgICAgICAgY29udGFpbmVyLl9idWZmZXJUb1VwZGF0ZSA9IGogKyAxO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gYmluZCB0aGUgYnVmZmVyXG4gICAgICAgIGJ1ZmZlci5iaW5kKCB0aGlzLnNoYWRlciApO1xuXG4gICAgICAgICAvLyBub3cgZHJhdyB0aG9zZSBzdWNrYXMhXG4gICAgICAgIGdsLmRyYXdFbGVtZW50cyhnbC5UUklBTkdMRVMsIGFtb3VudCAqIDYsIGdsLlVOU0lHTkVEX1NIT1JULCAwKTtcbiAgICAgICAgdGhpcy5yZW5kZXJlci5kcmF3Q291bnQrKztcbiAgICB9XG59O1xuXG4vKipcbiAqIENyZWF0ZXMgb25lIHBhcnRpY2xlIGJ1ZmZlciBmb3IgZWFjaCBjaGlsZCBpbiB0aGUgY29udGFpbmVyIHdlIHdhbnQgdG8gcmVuZGVyIGFuZCB1cGRhdGVzIGludGVybmFsIHByb3BlcnRpZXNcbiAqXG4gKiBAcGFyYW0gY29udGFpbmVyIHtQSVhJLlBhcnRpY2xlQ29udGFpbmVyfSBUaGUgY29udGFpbmVyIHRvIHJlbmRlciB1c2luZyB0aGlzIFBhcnRpY2xlUmVuZGVyZXJcbiAqL1xuUGFydGljbGVSZW5kZXJlci5wcm90b3R5cGUuZ2VuZXJhdGVCdWZmZXJzID0gZnVuY3Rpb24gKGNvbnRhaW5lcilcbntcbiAgICB2YXIgZ2wgPSB0aGlzLnJlbmRlcmVyLmdsLFxuICAgICAgICBidWZmZXJzID0gW10sXG4gICAgICAgIHNpemUgPSBjb250YWluZXIuX21heFNpemUsXG4gICAgICAgIGJhdGNoU2l6ZSA9IGNvbnRhaW5lci5fYmF0Y2hTaXplLFxuICAgICAgICBkeW5hbWljUHJvcGVydHlGbGFncyA9IGNvbnRhaW5lci5fcHJvcGVydGllcyxcbiAgICAgICAgaTtcblxuICAgIGZvciAoaSA9IDA7IGkgPCBzaXplOyBpICs9IGJhdGNoU2l6ZSlcbiAgICB7XG4gICAgICAgIGJ1ZmZlcnMucHVzaChuZXcgUGFydGljbGVCdWZmZXIoZ2wsIHRoaXMucHJvcGVydGllcywgZHluYW1pY1Byb3BlcnR5RmxhZ3MsIGJhdGNoU2l6ZSkpO1xuICAgIH1cblxuICAgIHJldHVybiBidWZmZXJzO1xufTtcblxuLyoqXG4gKiBVcGxvYWRzIHRoZSB2ZXJ0aWNpZXMuXG4gKlxuICogQHBhcmFtIGNoaWxkcmVuIHtQSVhJLkRpc3BsYXlPYmplY3RbXX0gdGhlIGFycmF5IG9mIGRpc3BsYXkgb2JqZWN0cyB0byByZW5kZXJcbiAqIEBwYXJhbSBzdGFydEluZGV4IHtudW1iZXJ9IHRoZSBpbmRleCB0byBzdGFydCBmcm9tIGluIHRoZSBjaGlsZHJlbiBhcnJheVxuICogQHBhcmFtIGFtb3VudCB7bnVtYmVyfSB0aGUgYW1vdW50IG9mIGNoaWxkcmVuIHRoYXQgd2lsbCBoYXZlIHRoZWlyIHZlcnRpY2VzIHVwbG9hZGVkXG4gKiBAcGFyYW0gYXJyYXkge251bWJlcltdfVxuICogQHBhcmFtIHN0cmlkZSB7bnVtYmVyfVxuICogQHBhcmFtIG9mZnNldCB7bnVtYmVyfVxuICovXG5QYXJ0aWNsZVJlbmRlcmVyLnByb3RvdHlwZS51cGxvYWRWZXJ0aWNlcyA9IGZ1bmN0aW9uIChjaGlsZHJlbiwgc3RhcnRJbmRleCwgYW1vdW50LCBhcnJheSwgc3RyaWRlLCBvZmZzZXQpXG57XG4gICAgdmFyIHNwcml0ZSxcbiAgICAgICAgdGV4dHVyZSxcbiAgICAgICAgdHJpbSxcbiAgICAgICAgc3gsXG4gICAgICAgIHN5LFxuICAgICAgICB3MCwgdzEsIGgwLCBoMTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYW1vdW50OyBpKyspIHtcblxuICAgICAgICBzcHJpdGUgPSBjaGlsZHJlbltzdGFydEluZGV4ICsgaV07XG4gICAgICAgIHRleHR1cmUgPSBzcHJpdGUuX3RleHR1cmU7XG4gICAgICAgIHN4ID0gc3ByaXRlLnNjYWxlLng7XG4gICAgICAgIHN5ID0gc3ByaXRlLnNjYWxlLnk7XG5cbiAgICAgICAgaWYgKHRleHR1cmUudHJpbSlcbiAgICAgICAge1xuICAgICAgICAgICAgLy8gaWYgdGhlIHNwcml0ZSBpcyB0cmltbWVkIHRoZW4gd2UgbmVlZCB0byBhZGQgdGhlIGV4dHJhIHNwYWNlIGJlZm9yZSB0cmFuc2Zvcm1pbmcgdGhlIHNwcml0ZSBjb29yZHMuLlxuICAgICAgICAgICAgdHJpbSA9IHRleHR1cmUudHJpbTtcblxuICAgICAgICAgICAgdzEgPSB0cmltLnggLSBzcHJpdGUuYW5jaG9yLnggKiB0cmltLndpZHRoO1xuICAgICAgICAgICAgdzAgPSB3MSArIHRleHR1cmUuY3JvcC53aWR0aDtcblxuICAgICAgICAgICAgaDEgPSB0cmltLnkgLSBzcHJpdGUuYW5jaG9yLnkgKiB0cmltLmhlaWdodDtcbiAgICAgICAgICAgIGgwID0gaDEgKyB0ZXh0dXJlLmNyb3AuaGVpZ2h0O1xuICAgICAgICB9XG4gICAgICAgIGVsc2VcbiAgICAgICAge1xuICAgICAgICAgICAgdzAgPSAodGV4dHVyZS5fZnJhbWUud2lkdGggKSAqICgxLXNwcml0ZS5hbmNob3IueCk7XG4gICAgICAgICAgICB3MSA9ICh0ZXh0dXJlLl9mcmFtZS53aWR0aCApICogLXNwcml0ZS5hbmNob3IueDtcblxuICAgICAgICAgICAgaDAgPSB0ZXh0dXJlLl9mcmFtZS5oZWlnaHQgKiAoMS1zcHJpdGUuYW5jaG9yLnkpO1xuICAgICAgICAgICAgaDEgPSB0ZXh0dXJlLl9mcmFtZS5oZWlnaHQgKiAtc3ByaXRlLmFuY2hvci55O1xuICAgICAgICB9XG5cbiAgICAgICAgYXJyYXlbb2Zmc2V0XSA9IHcxICogc3g7XG4gICAgICAgIGFycmF5W29mZnNldCArIDFdID0gaDEgKiBzeTtcblxuICAgICAgICBhcnJheVtvZmZzZXQgKyBzdHJpZGVdID0gdzAgKiBzeDtcbiAgICAgICAgYXJyYXlbb2Zmc2V0ICsgc3RyaWRlICsgMV0gPSBoMSAqIHN5O1xuXG4gICAgICAgIGFycmF5W29mZnNldCArIHN0cmlkZSAqIDJdID0gdzAgKiBzeDtcbiAgICAgICAgYXJyYXlbb2Zmc2V0ICsgc3RyaWRlICogMiArIDFdID0gaDAgKiBzeTtcblxuICAgICAgICBhcnJheVtvZmZzZXQgKyBzdHJpZGUgKiAzXSA9IHcxICogc3g7XG4gICAgICAgIGFycmF5W29mZnNldCArIHN0cmlkZSAqIDMgKyAxXSA9IGgwICogc3k7XG5cbiAgICAgICAgb2Zmc2V0ICs9IHN0cmlkZSAqIDQ7XG4gICAgfVxuXG59O1xuXG4vKipcbiAqXG4gKiBAcGFyYW0gY2hpbGRyZW4ge1BJWEkuRGlzcGxheU9iamVjdFtdfSB0aGUgYXJyYXkgb2YgZGlzcGxheSBvYmplY3RzIHRvIHJlbmRlclxuICogQHBhcmFtIHN0YXJ0SW5kZXgge251bWJlcn0gdGhlIGluZGV4IHRvIHN0YXJ0IGZyb20gaW4gdGhlIGNoaWxkcmVuIGFycmF5XG4gKiBAcGFyYW0gYW1vdW50IHtudW1iZXJ9IHRoZSBhbW91bnQgb2YgY2hpbGRyZW4gdGhhdCB3aWxsIGhhdmUgdGhlaXIgcG9zaXRpb25zIHVwbG9hZGVkXG4gKiBAcGFyYW0gYXJyYXkge251bWJlcltdfVxuICogQHBhcmFtIHN0cmlkZSB7bnVtYmVyfVxuICogQHBhcmFtIG9mZnNldCB7bnVtYmVyfVxuICovXG5QYXJ0aWNsZVJlbmRlcmVyLnByb3RvdHlwZS51cGxvYWRQb3NpdGlvbiA9IGZ1bmN0aW9uIChjaGlsZHJlbixzdGFydEluZGV4LCBhbW91bnQsIGFycmF5LCBzdHJpZGUsIG9mZnNldClcbntcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFtb3VudDsgaSsrKVxuICAgIHtcbiAgICAgICAgdmFyIHNwcml0ZVBvc2l0aW9uID0gY2hpbGRyZW5bc3RhcnRJbmRleCArIGldLnBvc2l0aW9uO1xuXG4gICAgICAgIGFycmF5W29mZnNldF0gPSBzcHJpdGVQb3NpdGlvbi54O1xuICAgICAgICBhcnJheVtvZmZzZXQgKyAxXSA9IHNwcml0ZVBvc2l0aW9uLnk7XG5cbiAgICAgICAgYXJyYXlbb2Zmc2V0ICsgc3RyaWRlXSA9IHNwcml0ZVBvc2l0aW9uLng7XG4gICAgICAgIGFycmF5W29mZnNldCArIHN0cmlkZSArIDFdID0gc3ByaXRlUG9zaXRpb24ueTtcblxuICAgICAgICBhcnJheVtvZmZzZXQgKyBzdHJpZGUgKiAyXSA9IHNwcml0ZVBvc2l0aW9uLng7XG4gICAgICAgIGFycmF5W29mZnNldCArIHN0cmlkZSAqIDIgKyAxXSA9IHNwcml0ZVBvc2l0aW9uLnk7XG5cbiAgICAgICAgYXJyYXlbb2Zmc2V0ICsgc3RyaWRlICogM10gPSBzcHJpdGVQb3NpdGlvbi54O1xuICAgICAgICBhcnJheVtvZmZzZXQgKyBzdHJpZGUgKiAzICsgMV0gPSBzcHJpdGVQb3NpdGlvbi55O1xuXG4gICAgICAgIG9mZnNldCArPSBzdHJpZGUgKiA0O1xuICAgIH1cblxufTtcblxuLyoqXG4gKlxuICogQHBhcmFtIGNoaWxkcmVuIHtQSVhJLkRpc3BsYXlPYmplY3RbXX0gdGhlIGFycmF5IG9mIGRpc3BsYXkgb2JqZWN0cyB0byByZW5kZXJcbiAqIEBwYXJhbSBzdGFydEluZGV4IHtudW1iZXJ9IHRoZSBpbmRleCB0byBzdGFydCBmcm9tIGluIHRoZSBjaGlsZHJlbiBhcnJheVxuICogQHBhcmFtIGFtb3VudCB7bnVtYmVyfSB0aGUgYW1vdW50IG9mIGNoaWxkcmVuIHRoYXQgd2lsbCBoYXZlIHRoZWlyIHJvdGF0aW9uIHVwbG9hZGVkXG4gKiBAcGFyYW0gYXJyYXkge251bWJlcltdfVxuICogQHBhcmFtIHN0cmlkZSB7bnVtYmVyfVxuICogQHBhcmFtIG9mZnNldCB7bnVtYmVyfVxuICovXG5QYXJ0aWNsZVJlbmRlcmVyLnByb3RvdHlwZS51cGxvYWRSb3RhdGlvbiA9IGZ1bmN0aW9uIChjaGlsZHJlbixzdGFydEluZGV4LCBhbW91bnQsIGFycmF5LCBzdHJpZGUsIG9mZnNldClcbntcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFtb3VudDsgaSsrKVxuICAgIHtcbiAgICAgICAgdmFyIHNwcml0ZVJvdGF0aW9uID0gY2hpbGRyZW5bc3RhcnRJbmRleCArIGldLnJvdGF0aW9uO1xuXG5cbiAgICAgICAgYXJyYXlbb2Zmc2V0XSA9IHNwcml0ZVJvdGF0aW9uO1xuICAgICAgICBhcnJheVtvZmZzZXQgKyBzdHJpZGVdID0gc3ByaXRlUm90YXRpb247XG4gICAgICAgIGFycmF5W29mZnNldCArIHN0cmlkZSAqIDJdID0gc3ByaXRlUm90YXRpb247XG4gICAgICAgIGFycmF5W29mZnNldCArIHN0cmlkZSAqIDNdID0gc3ByaXRlUm90YXRpb247XG5cbiAgICAgICAgb2Zmc2V0ICs9IHN0cmlkZSAqIDQ7XG4gICAgfVxufTtcblxuLyoqXG4gKlxuICogQHBhcmFtIGNoaWxkcmVuIHtQSVhJLkRpc3BsYXlPYmplY3RbXX0gdGhlIGFycmF5IG9mIGRpc3BsYXkgb2JqZWN0cyB0byByZW5kZXJcbiAqIEBwYXJhbSBzdGFydEluZGV4IHtudW1iZXJ9IHRoZSBpbmRleCB0byBzdGFydCBmcm9tIGluIHRoZSBjaGlsZHJlbiBhcnJheVxuICogQHBhcmFtIGFtb3VudCB7bnVtYmVyfSB0aGUgYW1vdW50IG9mIGNoaWxkcmVuIHRoYXQgd2lsbCBoYXZlIHRoZWlyIFV2cyB1cGxvYWRlZFxuICogQHBhcmFtIGFycmF5IHtudW1iZXJbXX1cbiAqIEBwYXJhbSBzdHJpZGUge251bWJlcn1cbiAqIEBwYXJhbSBvZmZzZXQge251bWJlcn1cbiAqL1xuUGFydGljbGVSZW5kZXJlci5wcm90b3R5cGUudXBsb2FkVXZzID0gZnVuY3Rpb24gKGNoaWxkcmVuLHN0YXJ0SW5kZXgsIGFtb3VudCwgYXJyYXksIHN0cmlkZSwgb2Zmc2V0KVxue1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYW1vdW50OyBpKyspXG4gICAge1xuICAgICAgICB2YXIgdGV4dHVyZVV2cyA9IGNoaWxkcmVuW3N0YXJ0SW5kZXggKyBpXS5fdGV4dHVyZS5fdXZzO1xuXG4gICAgICAgIGlmICh0ZXh0dXJlVXZzKVxuICAgICAgICB7XG4gICAgICAgICAgICBhcnJheVtvZmZzZXRdID0gdGV4dHVyZVV2cy54MDtcbiAgICAgICAgICAgIGFycmF5W29mZnNldCArIDFdID0gdGV4dHVyZVV2cy55MDtcblxuICAgICAgICAgICAgYXJyYXlbb2Zmc2V0ICsgc3RyaWRlXSA9IHRleHR1cmVVdnMueDE7XG4gICAgICAgICAgICBhcnJheVtvZmZzZXQgKyBzdHJpZGUgKyAxXSA9IHRleHR1cmVVdnMueTE7XG5cbiAgICAgICAgICAgIGFycmF5W29mZnNldCArIHN0cmlkZSAqIDJdID0gdGV4dHVyZVV2cy54MjtcbiAgICAgICAgICAgIGFycmF5W29mZnNldCArIHN0cmlkZSAqIDIgKyAxXSA9IHRleHR1cmVVdnMueTI7XG5cbiAgICAgICAgICAgIGFycmF5W29mZnNldCArIHN0cmlkZSAqIDNdID0gdGV4dHVyZVV2cy54MztcbiAgICAgICAgICAgIGFycmF5W29mZnNldCArIHN0cmlkZSAqIDMgKyAxXSA9IHRleHR1cmVVdnMueTM7XG5cbiAgICAgICAgICAgIG9mZnNldCArPSBzdHJpZGUgKiA0O1xuICAgICAgICB9XG4gICAgICAgIGVsc2VcbiAgICAgICAge1xuICAgICAgICAgICAgLy9UT0RPIHlvdSBrbm93IHRoaXMgY2FuIGJlIGVhc2llciFcbiAgICAgICAgICAgIGFycmF5W29mZnNldF0gPSAwO1xuICAgICAgICAgICAgYXJyYXlbb2Zmc2V0ICsgMV0gPSAwO1xuXG4gICAgICAgICAgICBhcnJheVtvZmZzZXQgKyBzdHJpZGVdID0gMDtcbiAgICAgICAgICAgIGFycmF5W29mZnNldCArIHN0cmlkZSArIDFdID0gMDtcblxuICAgICAgICAgICAgYXJyYXlbb2Zmc2V0ICsgc3RyaWRlICogMl0gPSAwO1xuICAgICAgICAgICAgYXJyYXlbb2Zmc2V0ICsgc3RyaWRlICogMiArIDFdID0gMDtcblxuICAgICAgICAgICAgYXJyYXlbb2Zmc2V0ICsgc3RyaWRlICogM10gPSAwO1xuICAgICAgICAgICAgYXJyYXlbb2Zmc2V0ICsgc3RyaWRlICogMyArIDFdID0gMDtcblxuICAgICAgICAgICAgb2Zmc2V0ICs9IHN0cmlkZSAqIDQ7XG4gICAgICAgIH1cbiAgICB9XG59O1xuXG4vKipcbiAqXG4gKiBAcGFyYW0gY2hpbGRyZW4ge1BJWEkuRGlzcGxheU9iamVjdFtdfSB0aGUgYXJyYXkgb2YgZGlzcGxheSBvYmplY3RzIHRvIHJlbmRlclxuICogQHBhcmFtIHN0YXJ0SW5kZXgge251bWJlcn0gdGhlIGluZGV4IHRvIHN0YXJ0IGZyb20gaW4gdGhlIGNoaWxkcmVuIGFycmF5XG4gKiBAcGFyYW0gYW1vdW50IHtudW1iZXJ9IHRoZSBhbW91bnQgb2YgY2hpbGRyZW4gdGhhdCB3aWxsIGhhdmUgdGhlaXIgYWxwaGEgdXBsb2FkZWRcbiAqIEBwYXJhbSBhcnJheSB7bnVtYmVyW119XG4gKiBAcGFyYW0gc3RyaWRlIHtudW1iZXJ9XG4gKiBAcGFyYW0gb2Zmc2V0IHtudW1iZXJ9XG4gKi9cblBhcnRpY2xlUmVuZGVyZXIucHJvdG90eXBlLnVwbG9hZEFscGhhID0gZnVuY3Rpb24gKGNoaWxkcmVuLHN0YXJ0SW5kZXgsIGFtb3VudCwgYXJyYXksIHN0cmlkZSwgb2Zmc2V0KVxue1xuICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFtb3VudDsgaSsrKVxuICAgICB7XG4gICAgICAgIHZhciBzcHJpdGVBbHBoYSA9IGNoaWxkcmVuW3N0YXJ0SW5kZXggKyBpXS5hbHBoYTtcblxuICAgICAgICBhcnJheVtvZmZzZXRdID0gc3ByaXRlQWxwaGE7XG4gICAgICAgIGFycmF5W29mZnNldCArIHN0cmlkZV0gPSBzcHJpdGVBbHBoYTtcbiAgICAgICAgYXJyYXlbb2Zmc2V0ICsgc3RyaWRlICogMl0gPSBzcHJpdGVBbHBoYTtcbiAgICAgICAgYXJyYXlbb2Zmc2V0ICsgc3RyaWRlICogM10gPSBzcHJpdGVBbHBoYTtcblxuICAgICAgICBvZmZzZXQgKz0gc3RyaWRlICogNDtcbiAgICB9XG59O1xuXG5cbi8qKlxuICogRGVzdHJveXMgdGhlIFBhcnRpY2xlUmVuZGVyZXIuXG4gKlxuICovXG5QYXJ0aWNsZVJlbmRlcmVyLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKClcbntcbiAgICBpZiAodGhpcy5yZW5kZXJlci5nbCkge1xuICAgICAgICB0aGlzLnJlbmRlcmVyLmdsLmRlbGV0ZUJ1ZmZlcih0aGlzLmluZGV4QnVmZmVyKTtcbiAgICB9XG5cbiAgICBPYmplY3RSZW5kZXJlci5wcm90b3R5cGUuZGVzdHJveS5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuXG4gICAgdGhpcy5zaGFkZXIuZGVzdHJveSgpO1xuXG4gICAgdGhpcy5pbmRpY2VzID0gbnVsbDtcbiAgICB0aGlzLnRlbXBNYXRyaXggPSBudWxsO1xufTtcbiIsInZhciBUZXh0dXJlU2hhZGVyID0gcmVxdWlyZSgnLi4vLi4vcmVuZGVyZXJzL3dlYmdsL3NoYWRlcnMvVGV4dHVyZVNoYWRlcicpO1xuXG4vKipcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5UZXh0dXJlU2hhZGVyXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIHNoYWRlck1hbmFnZXIge1NoYWRlck1hbmFnZXJ9IFRoZSB3ZWJnbCBzaGFkZXIgbWFuYWdlciB0aGlzIHNoYWRlciB3b3JrcyBmb3IuXG4gKi9cbmZ1bmN0aW9uIFBhcnRpY2xlU2hhZGVyKHNoYWRlck1hbmFnZXIpXG57XG4gICAgVGV4dHVyZVNoYWRlci5jYWxsKHRoaXMsXG4gICAgICAgIHNoYWRlck1hbmFnZXIsXG4gICAgICAgIC8vIHZlcnRleCBzaGFkZXJcbiAgICAgICAgW1xuICAgICAgICAgICAgJ2F0dHJpYnV0ZSB2ZWMyIGFWZXJ0ZXhQb3NpdGlvbjsnLFxuICAgICAgICAgICAgJ2F0dHJpYnV0ZSB2ZWMyIGFUZXh0dXJlQ29vcmQ7JyxcbiAgICAgICAgICAgICdhdHRyaWJ1dGUgZmxvYXQgYUNvbG9yOycsXG5cbiAgICAgICAgICAgICdhdHRyaWJ1dGUgdmVjMiBhUG9zaXRpb25Db29yZDsnLFxuICAgICAgICAgICAgJ2F0dHJpYnV0ZSB2ZWMyIGFTY2FsZTsnLFxuICAgICAgICAgICAgJ2F0dHJpYnV0ZSBmbG9hdCBhUm90YXRpb247JyxcblxuICAgICAgICAgICAgJ3VuaWZvcm0gbWF0MyBwcm9qZWN0aW9uTWF0cml4OycsXG5cbiAgICAgICAgICAgICd2YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDsnLFxuICAgICAgICAgICAgJ3ZhcnlpbmcgZmxvYXQgdkNvbG9yOycsXG5cbiAgICAgICAgICAgICd2b2lkIG1haW4odm9pZCl7JyxcbiAgICAgICAgICAgICcgICB2ZWMyIHYgPSBhVmVydGV4UG9zaXRpb247JyxcblxuICAgICAgICAgICAgJyAgIHYueCA9IChhVmVydGV4UG9zaXRpb24ueCkgKiBjb3MoYVJvdGF0aW9uKSAtIChhVmVydGV4UG9zaXRpb24ueSkgKiBzaW4oYVJvdGF0aW9uKTsnLFxuICAgICAgICAgICAgJyAgIHYueSA9IChhVmVydGV4UG9zaXRpb24ueCkgKiBzaW4oYVJvdGF0aW9uKSArIChhVmVydGV4UG9zaXRpb24ueSkgKiBjb3MoYVJvdGF0aW9uKTsnLFxuICAgICAgICAgICAgJyAgIHYgPSB2ICsgYVBvc2l0aW9uQ29vcmQ7JyxcblxuICAgICAgICAgICAgJyAgIGdsX1Bvc2l0aW9uID0gdmVjNCgocHJvamVjdGlvbk1hdHJpeCAqIHZlYzModiwgMS4wKSkueHksIDAuMCwgMS4wKTsnLFxuXG4gICAgICAgICAgICAnICAgdlRleHR1cmVDb29yZCA9IGFUZXh0dXJlQ29vcmQ7JyxcbiAgICAgICAgICAgICcgICB2Q29sb3IgPSBhQ29sb3I7JyxcbiAgICAgICAgICAgICd9J1xuICAgICAgICBdLmpvaW4oJ1xcbicpLFxuICAgICAgICAvLyBoZWxsb1xuICAgICAgICAgW1xuICAgICAgICAgICAgJ3ByZWNpc2lvbiBsb3dwIGZsb2F0OycsXG5cbiAgICAgICAgICAgICd2YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDsnLFxuICAgICAgICAgICAgJ3ZhcnlpbmcgZmxvYXQgdkNvbG9yOycsXG5cbiAgICAgICAgICAgICd1bmlmb3JtIHNhbXBsZXIyRCB1U2FtcGxlcjsnLFxuICAgICAgICAgICAgJ3VuaWZvcm0gZmxvYXQgdUFscGhhOycsXG5cbiAgICAgICAgICAgICd2b2lkIG1haW4odm9pZCl7JyxcbiAgICAgICAgICAgICcgIHZlYzQgY29sb3IgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZUZXh0dXJlQ29vcmQpICogdkNvbG9yICogdUFscGhhOycsXG4gICAgICAgICAgICAnICBpZiAoY29sb3IuYSA9PSAwLjApIGRpc2NhcmQ7JyxcbiAgICAgICAgICAgICcgIGdsX0ZyYWdDb2xvciA9IGNvbG9yOycsXG4gICAgICAgICAgICAnfSdcbiAgICAgICAgXS5qb2luKCdcXG4nKSxcbiAgICAgICAgLy8gY3VzdG9tIHVuaWZvcm1zXG4gICAgICAgIHtcbiAgICAgICAgICAgIHVBbHBoYTogIHsgdHlwZTogJzFmJywgdmFsdWU6IDEgfVxuICAgICAgICB9LFxuICAgICAgICAvLyBjdXN0b20gYXR0cmlidXRlc1xuICAgICAgICB7XG4gICAgICAgICAgICBhUG9zaXRpb25Db29yZDogMCxcbiAgICAgICAgICAgLy8gYVNjYWxlOiAgICAgICAgIDAsXG4gICAgICAgICAgICBhUm90YXRpb246ICAgICAgMFxuICAgICAgICB9XG4gICAgKTtcblxuICAgIC8vIFRFTVAgSEFDS1xuXG59XG5cblBhcnRpY2xlU2hhZGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoVGV4dHVyZVNoYWRlci5wcm90b3R5cGUpO1xuUGFydGljbGVTaGFkZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gUGFydGljbGVTaGFkZXI7XG5cbm1vZHVsZS5leHBvcnRzID0gUGFydGljbGVTaGFkZXI7XG4iLCJ2YXIgdXRpbHMgPSByZXF1aXJlKCcuLi91dGlscycpLFxuICAgIG1hdGggPSByZXF1aXJlKCcuLi9tYXRoJyksXG4gICAgQ09OU1QgPSByZXF1aXJlKCcuLi9jb25zdCcpLFxuICAgIEV2ZW50RW1pdHRlciA9IHJlcXVpcmUoJ2V2ZW50ZW1pdHRlcjMnKTtcblxuLyoqXG4gKiBUaGUgQ2FudmFzUmVuZGVyZXIgZHJhd3MgdGhlIHNjZW5lIGFuZCBhbGwgaXRzIGNvbnRlbnQgb250byBhIDJkIGNhbnZhcy4gVGhpcyByZW5kZXJlciBzaG91bGQgYmUgdXNlZCBmb3IgYnJvd3NlcnMgdGhhdCBkbyBub3Qgc3VwcG9ydCB3ZWJHTC5cbiAqIERvbid0IGZvcmdldCB0byBhZGQgdGhlIENhbnZhc1JlbmRlcmVyLnZpZXcgdG8geW91ciBET00gb3IgeW91IHdpbGwgbm90IHNlZSBhbnl0aGluZyA6KVxuICpcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqIEBwYXJhbSBzeXN0ZW0ge3N0cmluZ30gVGhlIG5hbWUgb2YgdGhlIHN5c3RlbSB0aGlzIHJlbmRlcmVyIGlzIGZvci5cbiAqIEBwYXJhbSBbd2lkdGg9ODAwXSB7bnVtYmVyfSB0aGUgd2lkdGggb2YgdGhlIGNhbnZhcyB2aWV3XG4gKiBAcGFyYW0gW2hlaWdodD02MDBdIHtudW1iZXJ9IHRoZSBoZWlnaHQgb2YgdGhlIGNhbnZhcyB2aWV3XG4gKiBAcGFyYW0gW29wdGlvbnNdIHtvYmplY3R9IFRoZSBvcHRpb25hbCByZW5kZXJlciBwYXJhbWV0ZXJzXG4gKiBAcGFyYW0gW29wdGlvbnMudmlld10ge0hUTUxDYW52YXNFbGVtZW50fSB0aGUgY2FudmFzIHRvIHVzZSBhcyBhIHZpZXcsIG9wdGlvbmFsXG4gKiBAcGFyYW0gW29wdGlvbnMudHJhbnNwYXJlbnQ9ZmFsc2VdIHtib29sZWFufSBJZiB0aGUgcmVuZGVyIHZpZXcgaXMgdHJhbnNwYXJlbnQsIGRlZmF1bHQgZmFsc2VcbiAqIEBwYXJhbSBbb3B0aW9ucy5hdXRvUmVzaXplPWZhbHNlXSB7Ym9vbGVhbn0gSWYgdGhlIHJlbmRlciB2aWV3IGlzIGF1dG9tYXRpY2FsbHkgcmVzaXplZCwgZGVmYXVsdCBmYWxzZVxuICogQHBhcmFtIFtvcHRpb25zLmFudGlhbGlhcz1mYWxzZV0ge2Jvb2xlYW59IHNldHMgYW50aWFsaWFzIChvbmx5IGFwcGxpY2FibGUgaW4gY2hyb21lIGF0IHRoZSBtb21lbnQpXG4gKiBAcGFyYW0gW29wdGlvbnMucmVzb2x1dGlvbj0xXSB7bnVtYmVyfSB0aGUgcmVzb2x1dGlvbiBvZiB0aGUgcmVuZGVyZXIgcmV0aW5hIHdvdWxkIGJlIDJcbiAqIEBwYXJhbSBbb3B0aW9ucy5jbGVhckJlZm9yZVJlbmRlcj10cnVlXSB7Ym9vbGVhbn0gVGhpcyBzZXRzIGlmIHRoZSBDYW52YXNSZW5kZXJlciB3aWxsIGNsZWFyIHRoZSBjYW52YXMgb3JcbiAqICAgICAgbm90IGJlZm9yZSB0aGUgbmV3IHJlbmRlciBwYXNzLlxuICogQHBhcmFtIFtvcHRpb25zLmJhY2tncm91bmRDb2xvcj0weDAwMDAwMF0ge251bWJlcn0gVGhlIGJhY2tncm91bmQgY29sb3Igb2YgdGhlIHJlbmRlcmVkIGFyZWEgKHNob3duIGlmIG5vdCB0cmFuc3BhcmVudCkuXG4gKiBAcGFyYW0gW29wdGlvbnMucm91bmRQaXhlbHM9ZmFsc2VdIHtib29sZWFufSBJZiB0cnVlIFBpeGkgd2lsbCBNYXRoLmZsb29yKCkgeC95IHZhbHVlcyB3aGVuIHJlbmRlcmluZywgc3RvcHBpbmcgcGl4ZWwgaW50ZXJwb2xhdGlvbi5cbiAqL1xuZnVuY3Rpb24gU3lzdGVtUmVuZGVyZXIoc3lzdGVtLCB3aWR0aCwgaGVpZ2h0LCBvcHRpb25zKVxue1xuICAgIEV2ZW50RW1pdHRlci5jYWxsKHRoaXMpO1xuXG4gICAgdXRpbHMuc2F5SGVsbG8oc3lzdGVtKTtcblxuICAgIC8vIHByZXBhcmUgb3B0aW9uc1xuICAgIGlmIChvcHRpb25zKVxuICAgIHtcbiAgICAgICAgZm9yICh2YXIgaSBpbiBDT05TVC5ERUZBVUxUX1JFTkRFUl9PUFRJT05TKVxuICAgICAgICB7XG4gICAgICAgICAgICBpZiAodHlwZW9mIG9wdGlvbnNbaV0gPT09ICd1bmRlZmluZWQnKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIG9wdGlvbnNbaV0gPSBDT05TVC5ERUZBVUxUX1JFTkRFUl9PUFRJT05TW2ldO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIG9wdGlvbnMgPSBDT05TVC5ERUZBVUxUX1JFTkRFUl9PUFRJT05TO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoZSB0eXBlIG9mIHRoZSByZW5kZXJlci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCBQSVhJLlJFTkRFUkVSX1RZUEUuVU5LTk9XTlxuICAgICAqIEBzZWUgUElYSS5SRU5ERVJFUl9UWVBFXG4gICAgICovXG4gICAgdGhpcy50eXBlID0gQ09OU1QuUkVOREVSRVJfVFlQRS5VTktOT1dOO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHdpZHRoIG9mIHRoZSBjYW52YXMgdmlld1xuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDgwMFxuICAgICAqL1xuICAgIHRoaXMud2lkdGggPSB3aWR0aCB8fCA4MDA7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgaGVpZ2h0IG9mIHRoZSBjYW52YXMgdmlld1xuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDYwMFxuICAgICAqL1xuICAgIHRoaXMuaGVpZ2h0ID0gaGVpZ2h0IHx8IDYwMDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBjYW52YXMgZWxlbWVudCB0aGF0IGV2ZXJ5dGhpbmcgaXMgZHJhd24gdG9cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge0hUTUxDYW52YXNFbGVtZW50fVxuICAgICAqL1xuICAgIHRoaXMudmlldyA9IG9wdGlvbnMudmlldyB8fCBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdjYW52YXMnKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSByZXNvbHV0aW9uIG9mIHRoZSByZW5kZXJlclxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDFcbiAgICAgKi9cbiAgICB0aGlzLnJlc29sdXRpb24gPSBvcHRpb25zLnJlc29sdXRpb247XG5cbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIHRoZSByZW5kZXIgdmlldyBpcyB0cmFuc3BhcmVudFxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKi9cbiAgICB0aGlzLnRyYW5zcGFyZW50ID0gb3B0aW9ucy50cmFuc3BhcmVudDtcblxuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgdGhlIHJlbmRlciB2aWV3IHNob3VsZCBiZSByZXNpemVkIGF1dG9tYXRpY2FsbHlcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICovXG4gICAgdGhpcy5hdXRvUmVzaXplID0gb3B0aW9ucy5hdXRvUmVzaXplIHx8IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogVHJhY2tzIHRoZSBibGVuZCBtb2RlcyB1c2VmdWwgZm9yIHRoaXMgcmVuZGVyZXIuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtvYmplY3Q8c3RyaW5nLCBtaXhlZD59XG4gICAgICovXG4gICAgdGhpcy5ibGVuZE1vZGVzID0gbnVsbDtcblxuICAgIC8qKlxuICAgICAqIFRoZSB2YWx1ZSBvZiB0aGUgcHJlc2VydmVEcmF3aW5nQnVmZmVyIGZsYWcgYWZmZWN0cyB3aGV0aGVyIG9yIG5vdCB0aGUgY29udGVudHMgb2YgdGhlIHN0ZW5jaWwgYnVmZmVyIGlzIHJldGFpbmVkIGFmdGVyIHJlbmRlcmluZy5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICovXG4gICAgdGhpcy5wcmVzZXJ2ZURyYXdpbmdCdWZmZXIgPSBvcHRpb25zLnByZXNlcnZlRHJhd2luZ0J1ZmZlcjtcblxuICAgIC8qKlxuICAgICAqIFRoaXMgc2V0cyBpZiB0aGUgQ2FudmFzUmVuZGVyZXIgd2lsbCBjbGVhciB0aGUgY2FudmFzIG9yIG5vdCBiZWZvcmUgdGhlIG5ldyByZW5kZXIgcGFzcy5cbiAgICAgKiBJZiB0aGUgc2NlbmUgaXMgTk9UIHRyYW5zcGFyZW50IFBpeGkgd2lsbCB1c2UgYSBjYW52YXMgc2l6ZWQgZmlsbFJlY3Qgb3BlcmF0aW9uIGV2ZXJ5IGZyYW1lIHRvIHNldCB0aGUgY2FudmFzIGJhY2tncm91bmQgY29sb3IuXG4gICAgICogSWYgdGhlIHNjZW5lIGlzIHRyYW5zcGFyZW50IFBpeGkgd2lsbCB1c2UgY2xlYXJSZWN0IHRvIGNsZWFyIHRoZSBjYW52YXMgZXZlcnkgZnJhbWUuXG4gICAgICogRGlzYWJsZSB0aGlzIGJ5IHNldHRpbmcgdGhpcyB0byBmYWxzZS4gRm9yIGV4YW1wbGUgaWYgeW91ciBnYW1lIGhhcyBhIGNhbnZhcyBmaWxsaW5nIGJhY2tncm91bmQgaW1hZ2UgeW91IG9mdGVuIGRvbid0IG5lZWQgdGhpcyBzZXQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqIEBkZWZhdWx0XG4gICAgICovXG4gICAgdGhpcy5jbGVhckJlZm9yZVJlbmRlciA9IG9wdGlvbnMuY2xlYXJCZWZvcmVSZW5kZXI7XG5cbiAgICAvKipcbiAgICAgKiBJZiB0cnVlIFBpeGkgd2lsbCBNYXRoLmZsb29yKCkgeC95IHZhbHVlcyB3aGVuIHJlbmRlcmluZywgc3RvcHBpbmcgcGl4ZWwgaW50ZXJwb2xhdGlvbi5cbiAgICAgKiBIYW5keSBmb3IgY3Jpc3AgcGl4ZWwgYXJ0IGFuZCBzcGVlZCBvbiBsZWdhY3kgZGV2aWNlcy5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICovXG4gICAgdGhpcy5yb3VuZFBpeGVscyA9IG9wdGlvbnMucm91bmRQaXhlbHM7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYmFja2dyb3VuZCBjb2xvciBhcyBhIG51bWJlci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX2JhY2tncm91bmRDb2xvciA9IDB4MDAwMDAwO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGJhY2tncm91bmQgY29sb3IgYXMgYW4gW1IsIEcsIEJdIGFycmF5LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyW119XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9iYWNrZ3JvdW5kQ29sb3JSZ2JhID0gWzAsIDAsIDAsIDBdO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGJhY2tncm91bmQgY29sb3IgYXMgYSBzdHJpbmcuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtzdHJpbmd9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9iYWNrZ3JvdW5kQ29sb3JTdHJpbmcgPSAnIzAwMDAwMCc7XG5cbiAgICB0aGlzLmJhY2tncm91bmRDb2xvciA9IG9wdGlvbnMuYmFja2dyb3VuZENvbG9yIHx8IHRoaXMuX2JhY2tncm91bmRDb2xvcjsgLy8gcnVuIGJnIGNvbG9yIHNldHRlclxuXG4gICAgLyoqXG4gICAgICogVGhpcyB0ZW1wb3JhcnkgZGlzcGxheSBvYmplY3QgdXNlZCBhcyB0aGUgcGFyZW50IG9mIHRoZSBjdXJyZW50bHkgYmVpbmcgcmVuZGVyZWQgaXRlbVxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5EaXNwbGF5T2JqZWN0fVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fdGVtcERpc3BsYXlPYmplY3RQYXJlbnQgPSB7d29ybGRUcmFuc2Zvcm06bmV3IG1hdGguTWF0cml4KCksIHdvcmxkQWxwaGE6MSwgY2hpbGRyZW46W119O1xuXG4gICAgLyoqXG4gICAgICogVGhlIGxhc3Qgcm9vdCBvYmplY3QgdGhhdCB0aGUgcmVuZGVyZXIgdHJpZWQgdG8gcmVuZGVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5EaXNwbGF5T2JqZWN0fVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fbGFzdE9iamVjdFJlbmRlcmVkID0gdGhpcy5fdGVtcERpc3BsYXlPYmplY3RQYXJlbnQ7XG59XG5cbi8vIGNvbnN0cnVjdG9yXG5TeXN0ZW1SZW5kZXJlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKEV2ZW50RW1pdHRlci5wcm90b3R5cGUpO1xuU3lzdGVtUmVuZGVyZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gU3lzdGVtUmVuZGVyZXI7XG5tb2R1bGUuZXhwb3J0cyA9IFN5c3RlbVJlbmRlcmVyO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhTeXN0ZW1SZW5kZXJlci5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBUaGUgYmFja2dyb3VuZCBjb2xvciB0byBmaWxsIGlmIG5vdCB0cmFuc3BhcmVudFxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLlN5c3RlbVJlbmRlcmVyI1xuICAgICAqL1xuICAgIGJhY2tncm91bmRDb2xvcjpcbiAgICB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2JhY2tncm91bmRDb2xvcjtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLl9iYWNrZ3JvdW5kQ29sb3IgPSB2YWw7XG4gICAgICAgICAgICB0aGlzLl9iYWNrZ3JvdW5kQ29sb3JTdHJpbmcgPSB1dGlscy5oZXgyc3RyaW5nKHZhbCk7XG4gICAgICAgICAgICB1dGlscy5oZXgycmdiKHZhbCwgdGhpcy5fYmFja2dyb3VuZENvbG9yUmdiYSk7XG4gICAgICAgIH1cbiAgICB9XG59KTtcblxuLyoqXG4gKiBSZXNpemVzIHRoZSBjYW52YXMgdmlldyB0byB0aGUgc3BlY2lmaWVkIHdpZHRoIGFuZCBoZWlnaHRcbiAqXG4gKiBAcGFyYW0gd2lkdGgge251bWJlcn0gdGhlIG5ldyB3aWR0aCBvZiB0aGUgY2FudmFzIHZpZXdcbiAqIEBwYXJhbSBoZWlnaHQge251bWJlcn0gdGhlIG5ldyBoZWlnaHQgb2YgdGhlIGNhbnZhcyB2aWV3XG4gKi9cblN5c3RlbVJlbmRlcmVyLnByb3RvdHlwZS5yZXNpemUgPSBmdW5jdGlvbiAod2lkdGgsIGhlaWdodCkge1xuICAgIHRoaXMud2lkdGggPSB3aWR0aCAqIHRoaXMucmVzb2x1dGlvbjtcbiAgICB0aGlzLmhlaWdodCA9IGhlaWdodCAqIHRoaXMucmVzb2x1dGlvbjtcblxuICAgIHRoaXMudmlldy53aWR0aCA9IHRoaXMud2lkdGg7XG4gICAgdGhpcy52aWV3LmhlaWdodCA9IHRoaXMuaGVpZ2h0O1xuXG4gICAgaWYgKHRoaXMuYXV0b1Jlc2l6ZSlcbiAgICB7XG4gICAgICAgIHRoaXMudmlldy5zdHlsZS53aWR0aCA9IHRoaXMud2lkdGggLyB0aGlzLnJlc29sdXRpb24gKyAncHgnO1xuICAgICAgICB0aGlzLnZpZXcuc3R5bGUuaGVpZ2h0ID0gdGhpcy5oZWlnaHQgLyB0aGlzLnJlc29sdXRpb24gKyAncHgnO1xuICAgIH1cbn07XG5cbi8qKlxuICogUmVtb3ZlcyBldmVyeXRoaW5nIGZyb20gdGhlIHJlbmRlcmVyIGFuZCBvcHRpb25hbGx5IHJlbW92ZXMgdGhlIENhbnZhcyBET00gZWxlbWVudC5cbiAqXG4gKiBAcGFyYW0gW3JlbW92ZVZpZXc9ZmFsc2VdIHtib29sZWFufSBSZW1vdmVzIHRoZSBDYW52YXMgZWxlbWVudCBmcm9tIHRoZSBET00uXG4gKi9cblN5c3RlbVJlbmRlcmVyLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKHJlbW92ZVZpZXcpIHtcbiAgICBpZiAocmVtb3ZlVmlldyAmJiB0aGlzLnZpZXcucGFyZW50Tm9kZSlcbiAgICB7XG4gICAgICAgIHRoaXMudmlldy5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHRoaXMudmlldyk7XG4gICAgfVxuXG4gICAgdGhpcy50eXBlID0gQ09OU1QuUkVOREVSRVJfVFlQRS5VTktOT1dOO1xuXG4gICAgdGhpcy53aWR0aCA9IDA7XG4gICAgdGhpcy5oZWlnaHQgPSAwO1xuXG4gICAgdGhpcy52aWV3ID0gbnVsbDtcblxuICAgIHRoaXMucmVzb2x1dGlvbiA9IDA7XG5cbiAgICB0aGlzLnRyYW5zcGFyZW50ID0gZmFsc2U7XG5cbiAgICB0aGlzLmF1dG9SZXNpemUgPSBmYWxzZTtcblxuICAgIHRoaXMuYmxlbmRNb2RlcyA9IG51bGw7XG5cbiAgICB0aGlzLnByZXNlcnZlRHJhd2luZ0J1ZmZlciA9IGZhbHNlO1xuICAgIHRoaXMuY2xlYXJCZWZvcmVSZW5kZXIgPSBmYWxzZTtcblxuICAgIHRoaXMucm91bmRQaXhlbHMgPSBmYWxzZTtcblxuICAgIHRoaXMuX2JhY2tncm91bmRDb2xvciA9IDA7XG4gICAgdGhpcy5fYmFja2dyb3VuZENvbG9yUmdiYSA9IG51bGw7XG4gICAgdGhpcy5fYmFja2dyb3VuZENvbG9yU3RyaW5nID0gbnVsbDtcbn07XG4iLCJ2YXIgU3lzdGVtUmVuZGVyZXIgPSByZXF1aXJlKCcuLi9TeXN0ZW1SZW5kZXJlcicpLFxuICAgIENhbnZhc01hc2tNYW5hZ2VyID0gcmVxdWlyZSgnLi91dGlscy9DYW52YXNNYXNrTWFuYWdlcicpLFxuICAgIHV0aWxzID0gcmVxdWlyZSgnLi4vLi4vdXRpbHMnKSxcbiAgICBtYXRoID0gcmVxdWlyZSgnLi4vLi4vbWF0aCcpLFxuICAgIENPTlNUID0gcmVxdWlyZSgnLi4vLi4vY29uc3QnKTtcblxuLyoqXG4gKiBUaGUgQ2FudmFzUmVuZGVyZXIgZHJhd3MgdGhlIHNjZW5lIGFuZCBhbGwgaXRzIGNvbnRlbnQgb250byBhIDJkIGNhbnZhcy4gVGhpcyByZW5kZXJlciBzaG91bGQgYmUgdXNlZCBmb3IgYnJvd3NlcnMgdGhhdCBkbyBub3Qgc3VwcG9ydCB3ZWJHTC5cbiAqIERvbid0IGZvcmdldCB0byBhZGQgdGhlIENhbnZhc1JlbmRlcmVyLnZpZXcgdG8geW91ciBET00gb3IgeW91IHdpbGwgbm90IHNlZSBhbnl0aGluZyA6KVxuICpcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqIEBleHRlbmRzIFBJWEkuU3lzdGVtUmVuZGVyZXJcbiAqIEBwYXJhbSBbd2lkdGg9ODAwXSB7bnVtYmVyfSB0aGUgd2lkdGggb2YgdGhlIGNhbnZhcyB2aWV3XG4gKiBAcGFyYW0gW2hlaWdodD02MDBdIHtudW1iZXJ9IHRoZSBoZWlnaHQgb2YgdGhlIGNhbnZhcyB2aWV3XG4gKiBAcGFyYW0gW29wdGlvbnNdIHtvYmplY3R9IFRoZSBvcHRpb25hbCByZW5kZXJlciBwYXJhbWV0ZXJzXG4gKiBAcGFyYW0gW29wdGlvbnMudmlld10ge0hUTUxDYW52YXNFbGVtZW50fSB0aGUgY2FudmFzIHRvIHVzZSBhcyBhIHZpZXcsIG9wdGlvbmFsXG4gKiBAcGFyYW0gW29wdGlvbnMudHJhbnNwYXJlbnQ9ZmFsc2VdIHtib29sZWFufSBJZiB0aGUgcmVuZGVyIHZpZXcgaXMgdHJhbnNwYXJlbnQsIGRlZmF1bHQgZmFsc2VcbiAqIEBwYXJhbSBbb3B0aW9ucy5hdXRvUmVzaXplPWZhbHNlXSB7Ym9vbGVhbn0gSWYgdGhlIHJlbmRlciB2aWV3IGlzIGF1dG9tYXRpY2FsbHkgcmVzaXplZCwgZGVmYXVsdCBmYWxzZVxuICogQHBhcmFtIFtvcHRpb25zLmFudGlhbGlhcz1mYWxzZV0ge2Jvb2xlYW59IHNldHMgYW50aWFsaWFzIChvbmx5IGFwcGxpY2FibGUgaW4gY2hyb21lIGF0IHRoZSBtb21lbnQpXG4gKiBAcGFyYW0gW29wdGlvbnMucmVzb2x1dGlvbj0xXSB7bnVtYmVyfSB0aGUgcmVzb2x1dGlvbiBvZiB0aGUgcmVuZGVyZXIgcmV0aW5hIHdvdWxkIGJlIDJcbiAqIEBwYXJhbSBbb3B0aW9ucy5jbGVhckJlZm9yZVJlbmRlcj10cnVlXSB7Ym9vbGVhbn0gVGhpcyBzZXRzIGlmIHRoZSBDYW52YXNSZW5kZXJlciB3aWxsIGNsZWFyIHRoZSBjYW52YXMgb3JcbiAqICAgICAgbm90IGJlZm9yZSB0aGUgbmV3IHJlbmRlciBwYXNzLlxuICogQHBhcmFtIFtvcHRpb25zLnJvdW5kUGl4ZWxzPWZhbHNlXSB7Ym9vbGVhbn0gSWYgdHJ1ZSBQaXhpIHdpbGwgTWF0aC5mbG9vcigpIHgveSB2YWx1ZXMgd2hlbiByZW5kZXJpbmcsIHN0b3BwaW5nIHBpeGVsIGludGVycG9sYXRpb24uXG4gKi9cbmZ1bmN0aW9uIENhbnZhc1JlbmRlcmVyKHdpZHRoLCBoZWlnaHQsIG9wdGlvbnMpXG57XG4gICAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG5cbiAgICBTeXN0ZW1SZW5kZXJlci5jYWxsKHRoaXMsICdDYW52YXMnLCB3aWR0aCwgaGVpZ2h0LCBvcHRpb25zKTtcblxuICAgIHRoaXMudHlwZSA9IENPTlNULlJFTkRFUkVSX1RZUEUuQ0FOVkFTO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGNhbnZhcyAyZCBjb250ZXh0IHRoYXQgZXZlcnl0aGluZyBpcyBkcmF3biB3aXRoLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEfVxuICAgICAqL1xuICAgIHRoaXMuY29udGV4dCA9IHRoaXMudmlldy5nZXRDb250ZXh0KCcyZCcsIHsgYWxwaGE6IHRoaXMudHJhbnNwYXJlbnQgfSk7XG5cbiAgICAvKipcbiAgICAgKiBCb29sZWFuIGZsYWcgY29udHJvbGxpbmcgY2FudmFzIHJlZnJlc2guXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqL1xuICAgIHRoaXMucmVmcmVzaCA9IHRydWU7XG5cbiAgICAvKipcbiAgICAgKiBJbnN0YW5jZSBvZiBhIENhbnZhc01hc2tNYW5hZ2VyLCBoYW5kbGVzIG1hc2tpbmcgd2hlbiB1c2luZyB0aGUgY2FudmFzIHJlbmRlcmVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5DYW52YXNNYXNrTWFuYWdlcn1cbiAgICAgKi9cbiAgICB0aGlzLm1hc2tNYW5hZ2VyID0gbmV3IENhbnZhc01hc2tNYW5hZ2VyKCk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgY2FudmFzIHByb3BlcnR5IHVzZWQgdG8gc2V0IHRoZSBjYW52YXMgc21vb3RoaW5nIHByb3BlcnR5LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7c3RyaW5nfVxuICAgICAqL1xuICAgIHRoaXMuc21vb3RoUHJvcGVydHkgPSAnaW1hZ2VTbW9vdGhpbmdFbmFibGVkJztcblxuICAgIGlmICghdGhpcy5jb250ZXh0LmltYWdlU21vb3RoaW5nRW5hYmxlZClcbiAgICB7XG4gICAgICAgIGlmICh0aGlzLmNvbnRleHQud2Via2l0SW1hZ2VTbW9vdGhpbmdFbmFibGVkKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnNtb290aFByb3BlcnR5ID0gJ3dlYmtpdEltYWdlU21vb3RoaW5nRW5hYmxlZCc7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodGhpcy5jb250ZXh0Lm1vekltYWdlU21vb3RoaW5nRW5hYmxlZClcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5zbW9vdGhQcm9wZXJ0eSA9ICdtb3pJbWFnZVNtb290aGluZ0VuYWJsZWQnO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHRoaXMuY29udGV4dC5vSW1hZ2VTbW9vdGhpbmdFbmFibGVkKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnNtb290aFByb3BlcnR5ID0gJ29JbWFnZVNtb290aGluZ0VuYWJsZWQnO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHRoaXMuY29udGV4dC5tc0ltYWdlU21vb3RoaW5nRW5hYmxlZClcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5zbW9vdGhQcm9wZXJ0eSA9ICdtc0ltYWdlU21vb3RoaW5nRW5hYmxlZCc7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLmluaXRQbHVnaW5zKCk7XG5cbiAgICB0aGlzLl9tYXBCbGVuZE1vZGVzKCk7XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIHRlbXBvcmFyeSBkaXNwbGF5IG9iamVjdCB1c2VkIGFzIHRoZSBwYXJlbnQgb2YgdGhlIGN1cnJlbnRseSBiZWluZyByZW5kZXJlZCBpdGVtXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLkRpc3BsYXlPYmplY3R9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl90ZW1wRGlzcGxheU9iamVjdFBhcmVudCA9IHtcbiAgICAgICAgd29ybGRUcmFuc2Zvcm06IG5ldyBtYXRoLk1hdHJpeCgpLFxuICAgICAgICB3b3JsZEFscGhhOiAxXG4gICAgfTtcblxuXG4gICAgdGhpcy5yZXNpemUod2lkdGgsIGhlaWdodCk7XG59XG5cbi8vIGNvbnN0cnVjdG9yXG5DYW52YXNSZW5kZXJlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFN5c3RlbVJlbmRlcmVyLnByb3RvdHlwZSk7XG5DYW52YXNSZW5kZXJlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBDYW52YXNSZW5kZXJlcjtcbm1vZHVsZS5leHBvcnRzID0gQ2FudmFzUmVuZGVyZXI7XG51dGlscy5wbHVnaW5UYXJnZXQubWl4aW4oQ2FudmFzUmVuZGVyZXIpO1xuXG4vKipcbiAqIFJlbmRlcnMgdGhlIG9iamVjdCB0byB0aGlzIGNhbnZhcyB2aWV3XG4gKlxuICogQHBhcmFtIG9iamVjdCB7UElYSS5EaXNwbGF5T2JqZWN0fSB0aGUgb2JqZWN0IHRvIGJlIHJlbmRlcmVkXG4gKi9cbkNhbnZhc1JlbmRlcmVyLnByb3RvdHlwZS5yZW5kZXIgPSBmdW5jdGlvbiAob2JqZWN0KVxue1xuICAgIHRoaXMuZW1pdCgncHJlcmVuZGVyJyk7XG5cbiAgICB2YXIgY2FjaGVQYXJlbnQgPSBvYmplY3QucGFyZW50O1xuXG4gICAgdGhpcy5fbGFzdE9iamVjdFJlbmRlcmVkID0gb2JqZWN0O1xuXG4gICAgb2JqZWN0LnBhcmVudCA9IHRoaXMuX3RlbXBEaXNwbGF5T2JqZWN0UGFyZW50O1xuXG4gICAgLy8gdXBkYXRlIHRoZSBzY2VuZSBncmFwaFxuICAgIG9iamVjdC51cGRhdGVUcmFuc2Zvcm0oKTtcblxuICAgIG9iamVjdC5wYXJlbnQgPSBjYWNoZVBhcmVudDtcblxuICAgIHRoaXMuY29udGV4dC5zZXRUcmFuc2Zvcm0oMSwgMCwgMCwgMSwgMCwgMCk7XG5cbiAgICB0aGlzLmNvbnRleHQuZ2xvYmFsQWxwaGEgPSAxO1xuXG4gICAgdGhpcy5jb250ZXh0Lmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbiA9IHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5OT1JNQUxdO1xuXG4gICAgaWYgKG5hdmlnYXRvci5pc0NvY29vbkpTICYmIHRoaXMudmlldy5zY3JlZW5jYW52YXMpXG4gICAge1xuICAgICAgICB0aGlzLmNvbnRleHQuZmlsbFN0eWxlID0gJ2JsYWNrJztcbiAgICAgICAgdGhpcy5jb250ZXh0LmNsZWFyKCk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuY2xlYXJCZWZvcmVSZW5kZXIpXG4gICAge1xuICAgICAgICBpZiAodGhpcy50cmFuc3BhcmVudClcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5jb250ZXh0LmNsZWFyUmVjdCgwLCAwLCB0aGlzLndpZHRoLCB0aGlzLmhlaWdodCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmNvbnRleHQuZmlsbFN0eWxlID0gdGhpcy5fYmFja2dyb3VuZENvbG9yU3RyaW5nO1xuICAgICAgICAgICAgdGhpcy5jb250ZXh0LmZpbGxSZWN0KDAsIDAsIHRoaXMud2lkdGggLCB0aGlzLmhlaWdodCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLnJlbmRlckRpc3BsYXlPYmplY3Qob2JqZWN0LCB0aGlzLmNvbnRleHQpO1xuXG4gICAgdGhpcy5lbWl0KCdwb3N0cmVuZGVyJyk7XG59O1xuXG4vKipcbiAqIFJlbW92ZXMgZXZlcnl0aGluZyBmcm9tIHRoZSByZW5kZXJlciBhbmQgb3B0aW9uYWxseSByZW1vdmVzIHRoZSBDYW52YXMgRE9NIGVsZW1lbnQuXG4gKlxuICogQHBhcmFtIFtyZW1vdmVWaWV3PWZhbHNlXSB7Ym9vbGVhbn0gUmVtb3ZlcyB0aGUgQ2FudmFzIGVsZW1lbnQgZnJvbSB0aGUgRE9NLlxuICovXG5DYW52YXNSZW5kZXJlci5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uIChyZW1vdmVWaWV3KVxue1xuICAgIHRoaXMuZGVzdHJveVBsdWdpbnMoKTtcblxuICAgIC8vIGNhbGwgdGhlIGJhc2UgZGVzdHJveVxuICAgIFN5c3RlbVJlbmRlcmVyLnByb3RvdHlwZS5kZXN0cm95LmNhbGwodGhpcywgcmVtb3ZlVmlldyk7XG5cbiAgICB0aGlzLmNvbnRleHQgPSBudWxsO1xuXG4gICAgdGhpcy5yZWZyZXNoID0gdHJ1ZTtcblxuICAgIHRoaXMubWFza01hbmFnZXIuZGVzdHJveSgpO1xuICAgIHRoaXMubWFza01hbmFnZXIgPSBudWxsO1xuXG4gICAgdGhpcy5zbW9vdGhQcm9wZXJ0eSA9IG51bGw7XG59O1xuXG4vKipcbiAqIFJlbmRlcnMgYSBkaXNwbGF5IG9iamVjdFxuICpcbiAqIEBwYXJhbSBkaXNwbGF5T2JqZWN0IHtQSVhJLkRpc3BsYXlPYmplY3R9IFRoZSBkaXNwbGF5T2JqZWN0IHRvIHJlbmRlclxuICogQHByaXZhdGVcbiAqL1xuQ2FudmFzUmVuZGVyZXIucHJvdG90eXBlLnJlbmRlckRpc3BsYXlPYmplY3QgPSBmdW5jdGlvbiAoZGlzcGxheU9iamVjdCwgY29udGV4dClcbntcbiAgICB2YXIgdGVtcENvbnRleHQgPSB0aGlzLmNvbnRleHQ7XG5cbiAgICB0aGlzLmNvbnRleHQgPSBjb250ZXh0O1xuICAgIGRpc3BsYXlPYmplY3QucmVuZGVyQ2FudmFzKHRoaXMpO1xuICAgIHRoaXMuY29udGV4dCA9IHRlbXBDb250ZXh0O1xufTtcblxuLyoqXG4gKiBAZXh0ZW5kcyBQSVhJLlN5c3RlbVJlbmRlcmVyI3Jlc2l6ZVxuICpcbiAqIEBwYXJhbSB7bnVtYmVyfSB3XG4gKiBAcGFyYW0ge251bWJlcn0gaFxuICovXG5DYW52YXNSZW5kZXJlci5wcm90b3R5cGUucmVzaXplID0gZnVuY3Rpb24gKHcsIGgpXG57XG4gICAgU3lzdGVtUmVuZGVyZXIucHJvdG90eXBlLnJlc2l6ZS5jYWxsKHRoaXMsIHcsIGgpO1xuXG4gICAgLy9yZXNldCB0aGUgc2NhbGUgbW9kZS4uIG9kZGx5IHRoaXMgc2VlbXMgdG8gYmUgcmVzZXQgd2hlbiB0aGUgY2FudmFzIGlzIHJlc2l6ZWQuXG4gICAgLy9zdXJlbHkgYSBicm93c2VyIGJ1Zz8/IExldCBwaXhpIGZpeCB0aGF0IGZvciB5b3UuLlxuICAgIGlmKHRoaXMuc21vb3RoUHJvcGVydHkpXG4gICAge1xuICAgICAgICB0aGlzLmNvbnRleHRbdGhpcy5zbW9vdGhQcm9wZXJ0eV0gPSAoQ09OU1QuU0NBTEVfTU9ERVMuREVGQVVMVCA9PT0gQ09OU1QuU0NBTEVfTU9ERVMuTElORUFSKTtcbiAgICB9XG5cbn07XG5cbi8qKlxuICogTWFwcyBQaXhpIGJsZW5kIG1vZGVzIHRvIGNhbnZhcyBibGVuZCBtb2Rlcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5DYW52YXNSZW5kZXJlci5wcm90b3R5cGUuX21hcEJsZW5kTW9kZXMgPSBmdW5jdGlvbiAoKVxue1xuICAgIGlmICghdGhpcy5ibGVuZE1vZGVzKVxuICAgIHtcbiAgICAgICAgdGhpcy5ibGVuZE1vZGVzID0ge307XG5cbiAgICAgICAgaWYgKHV0aWxzLmNhblVzZU5ld0NhbnZhc0JsZW5kTW9kZXMoKSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5ibGVuZE1vZGVzW0NPTlNULkJMRU5EX01PREVTLk5PUk1BTF0gICAgICAgID0gJ3NvdXJjZS1vdmVyJztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5BRERdICAgICAgICAgICA9ICdsaWdodGVyJzsgLy9JUyBUSElTIE9LPz8/XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuTVVMVElQTFldICAgICAgPSAnbXVsdGlwbHknO1xuICAgICAgICAgICAgdGhpcy5ibGVuZE1vZGVzW0NPTlNULkJMRU5EX01PREVTLlNDUkVFTl0gICAgICAgID0gJ3NjcmVlbic7XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuT1ZFUkxBWV0gICAgICAgPSAnb3ZlcmxheSc7XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuREFSS0VOXSAgICAgICAgPSAnZGFya2VuJztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5MSUdIVEVOXSAgICAgICA9ICdsaWdodGVuJztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5DT0xPUl9ET0RHRV0gICA9ICdjb2xvci1kb2RnZSc7XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuQ09MT1JfQlVSTl0gICAgPSAnY29sb3ItYnVybic7XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuSEFSRF9MSUdIVF0gICAgPSAnaGFyZC1saWdodCc7XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuU09GVF9MSUdIVF0gICAgPSAnc29mdC1saWdodCc7XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuRElGRkVSRU5DRV0gICAgPSAnZGlmZmVyZW5jZSc7XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuRVhDTFVTSU9OXSAgICAgPSAnZXhjbHVzaW9uJztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5IVUVdICAgICAgICAgICA9ICdodWUnO1xuICAgICAgICAgICAgdGhpcy5ibGVuZE1vZGVzW0NPTlNULkJMRU5EX01PREVTLlNBVFVSQVRJT05dICAgID0gJ3NhdHVyYXRlJztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5DT0xPUl0gICAgICAgICA9ICdjb2xvcic7XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuTFVNSU5PU0lUWV0gICAgPSAnbHVtaW5vc2l0eSc7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgICAvLyB0aGlzIG1lYW5zIHRoYXQgdGhlIGJyb3dzZXIgZG9lcyBub3Qgc3VwcG9ydCB0aGUgY29vbCBuZXcgYmxlbmQgbW9kZXMgaW4gY2FudmFzICdjb3VnaCcgaWUgJ2NvdWdoJ1xuICAgICAgICAgICAgdGhpcy5ibGVuZE1vZGVzW0NPTlNULkJMRU5EX01PREVTLk5PUk1BTF0gICAgICAgID0gJ3NvdXJjZS1vdmVyJztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5BRERdICAgICAgICAgICA9ICdsaWdodGVyJzsgLy9JUyBUSElTIE9LPz8/XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuTVVMVElQTFldICAgICAgPSAnc291cmNlLW92ZXInO1xuICAgICAgICAgICAgdGhpcy5ibGVuZE1vZGVzW0NPTlNULkJMRU5EX01PREVTLlNDUkVFTl0gICAgICAgID0gJ3NvdXJjZS1vdmVyJztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5PVkVSTEFZXSAgICAgICA9ICdzb3VyY2Utb3Zlcic7XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuREFSS0VOXSAgICAgICAgPSAnc291cmNlLW92ZXInO1xuICAgICAgICAgICAgdGhpcy5ibGVuZE1vZGVzW0NPTlNULkJMRU5EX01PREVTLkxJR0hURU5dICAgICAgID0gJ3NvdXJjZS1vdmVyJztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5DT0xPUl9ET0RHRV0gICA9ICdzb3VyY2Utb3Zlcic7XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuQ09MT1JfQlVSTl0gICAgPSAnc291cmNlLW92ZXInO1xuICAgICAgICAgICAgdGhpcy5ibGVuZE1vZGVzW0NPTlNULkJMRU5EX01PREVTLkhBUkRfTElHSFRdICAgID0gJ3NvdXJjZS1vdmVyJztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5TT0ZUX0xJR0hUXSAgICA9ICdzb3VyY2Utb3Zlcic7XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuRElGRkVSRU5DRV0gICAgPSAnc291cmNlLW92ZXInO1xuICAgICAgICAgICAgdGhpcy5ibGVuZE1vZGVzW0NPTlNULkJMRU5EX01PREVTLkVYQ0xVU0lPTl0gICAgID0gJ3NvdXJjZS1vdmVyJztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5IVUVdICAgICAgICAgICA9ICdzb3VyY2Utb3Zlcic7XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuU0FUVVJBVElPTl0gICAgPSAnc291cmNlLW92ZXInO1xuICAgICAgICAgICAgdGhpcy5ibGVuZE1vZGVzW0NPTlNULkJMRU5EX01PREVTLkNPTE9SXSAgICAgICAgID0gJ3NvdXJjZS1vdmVyJztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5MVU1JTk9TSVRZXSAgICA9ICdzb3VyY2Utb3Zlcic7XG4gICAgICAgIH1cbiAgICB9XG59O1xuIiwiLyoqXG4gKiBDcmVhdGVzIGEgQ2FudmFzIGVsZW1lbnQgb2YgdGhlIGdpdmVuIHNpemUuXG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIHdpZHRoIHtudW1iZXJ9IHRoZSB3aWR0aCBmb3IgdGhlIG5ld2x5IGNyZWF0ZWQgY2FudmFzXG4gKiBAcGFyYW0gaGVpZ2h0IHtudW1iZXJ9IHRoZSBoZWlnaHQgZm9yIHRoZSBuZXdseSBjcmVhdGVkIGNhbnZhc1xuICovXG5mdW5jdGlvbiBDYW52YXNCdWZmZXIod2lkdGgsIGhlaWdodClcbntcbiAgICAvKipcbiAgICAgKiBUaGUgQ2FudmFzIG9iamVjdCB0aGF0IGJlbG9uZ3MgdG8gdGhpcyBDYW52YXNCdWZmZXIuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtIVE1MQ2FudmFzRWxlbWVudH1cbiAgICAgKi9cbiAgICB0aGlzLmNhbnZhcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NhbnZhcycpO1xuXG4gICAgLyoqXG4gICAgICogQSBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQgb2JqZWN0IHJlcHJlc2VudGluZyBhIHR3by1kaW1lbnNpb25hbCByZW5kZXJpbmcgY29udGV4dC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRH1cbiAgICAgKi9cbiAgICB0aGlzLmNvbnRleHQgPSB0aGlzLmNhbnZhcy5nZXRDb250ZXh0KCcyZCcpO1xuXG4gICAgdGhpcy5jYW52YXMud2lkdGggPSB3aWR0aDtcbiAgICB0aGlzLmNhbnZhcy5oZWlnaHQgPSBoZWlnaHQ7XG59XG5cbkNhbnZhc0J1ZmZlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBDYW52YXNCdWZmZXI7XG5tb2R1bGUuZXhwb3J0cyA9IENhbnZhc0J1ZmZlcjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoQ2FudmFzQnVmZmVyLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFRoZSB3aWR0aCBvZiB0aGUgY2FudmFzIGJ1ZmZlciBpbiBwaXhlbHMuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuQ2FudmFzQnVmZmVyI1xuICAgICAqL1xuICAgIHdpZHRoOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY2FudmFzLndpZHRoO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWwpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuY2FudmFzLndpZHRoID0gdmFsO1xuICAgICAgICB9XG4gICAgfSxcbiAgICAvKipcbiAgICAgKiBUaGUgaGVpZ2h0IG9mIHRoZSBjYW52YXMgYnVmZmVyIGluIHBpeGVscy5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5DYW52YXNCdWZmZXIjXG4gICAgICovXG4gICAgaGVpZ2h0OiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY2FudmFzLmhlaWdodDtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmNhbnZhcy5oZWlnaHQgPSB2YWw7XG4gICAgICAgIH1cbiAgICB9XG59KTtcblxuLyoqXG4gKiBDbGVhcnMgdGhlIGNhbnZhcyB0aGF0IHdhcyBjcmVhdGVkIGJ5IHRoZSBDYW52YXNCdWZmZXIgY2xhc3MuXG4gKlxuICogQHByaXZhdGVcbiAqL1xuQ2FudmFzQnVmZmVyLnByb3RvdHlwZS5jbGVhciA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy5jb250ZXh0LnNldFRyYW5zZm9ybSgxLCAwLCAwLCAxLCAwLCAwKTtcbiAgICB0aGlzLmNvbnRleHQuY2xlYXJSZWN0KDAsMCwgdGhpcy5jYW52YXMud2lkdGgsIHRoaXMuY2FudmFzLmhlaWdodCk7XG59O1xuXG4vKipcbiAqIFJlc2l6ZXMgdGhlIGNhbnZhcyB0byB0aGUgc3BlY2lmaWVkIHdpZHRoIGFuZCBoZWlnaHQuXG4gKlxuICogQHBhcmFtIHdpZHRoIHtudW1iZXJ9IHRoZSBuZXcgd2lkdGggb2YgdGhlIGNhbnZhc1xuICogQHBhcmFtIGhlaWdodCB7bnVtYmVyfSB0aGUgbmV3IGhlaWdodCBvZiB0aGUgY2FudmFzXG4gKi9cbkNhbnZhc0J1ZmZlci5wcm90b3R5cGUucmVzaXplID0gZnVuY3Rpb24gKHdpZHRoLCBoZWlnaHQpXG57XG4gICAgdGhpcy5jYW52YXMud2lkdGggPSB3aWR0aDtcbiAgICB0aGlzLmNhbnZhcy5oZWlnaHQgPSBoZWlnaHQ7XG59O1xuXG4vKipcbiAqIERlc3Ryb3lzIHRoaXMgY2FudmFzLlxuICpcbiAqL1xuQ2FudmFzQnVmZmVyLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLmNvbnRleHQgPSBudWxsO1xuICAgIHRoaXMuY2FudmFzID0gbnVsbDtcbn07XG4iLCJ2YXIgQ09OU1QgPSByZXF1aXJlKCcuLi8uLi8uLi9jb25zdCcpO1xuXG4vKipcbiAqIEEgc2V0IG9mIGZ1bmN0aW9ucyB1c2VkIGJ5IHRoZSBjYW52YXMgcmVuZGVyZXIgdG8gZHJhdyB0aGUgcHJpbWl0aXZlIGdyYXBoaWNzIGRhdGEuXG4gKiBAc3RhdGljXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKi9cbnZhciBDYW52YXNHcmFwaGljcyA9IHt9O1xubW9kdWxlLmV4cG9ydHMgPSBDYW52YXNHcmFwaGljcztcblxuLypcbiAqIFJlbmRlcnMgYSBHcmFwaGljcyBvYmplY3QgdG8gYSBjYW52YXMuXG4gKlxuICogQHBhcmFtIGdyYXBoaWNzIHtQSVhJLkdyYXBoaWNzfSB0aGUgYWN0dWFsIGdyYXBoaWNzIG9iamVjdCB0byByZW5kZXJcbiAqIEBwYXJhbSBjb250ZXh0IHtDYW52YXNSZW5kZXJpbmdDb250ZXh0MkR9IHRoZSAyZCBkcmF3aW5nIG1ldGhvZCBvZiB0aGUgY2FudmFzXG4gKi9cbkNhbnZhc0dyYXBoaWNzLnJlbmRlckdyYXBoaWNzID0gZnVuY3Rpb24gKGdyYXBoaWNzLCBjb250ZXh0KVxue1xuICAgIHZhciB3b3JsZEFscGhhID0gZ3JhcGhpY3Mud29ybGRBbHBoYTtcblxuICAgIGlmIChncmFwaGljcy5kaXJ0eSlcbiAgICB7XG4gICAgICAgIHRoaXMudXBkYXRlR3JhcGhpY3NUaW50KGdyYXBoaWNzKTtcbiAgICAgICAgZ3JhcGhpY3MuZGlydHkgPSBmYWxzZTtcbiAgICB9XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGdyYXBoaWNzLmdyYXBoaWNzRGF0YS5sZW5ndGg7IGkrKylcbiAgICB7XG4gICAgICAgIHZhciBkYXRhID0gZ3JhcGhpY3MuZ3JhcGhpY3NEYXRhW2ldO1xuICAgICAgICB2YXIgc2hhcGUgPSBkYXRhLnNoYXBlO1xuXG4gICAgICAgIHZhciBmaWxsQ29sb3IgPSBkYXRhLl9maWxsVGludDtcbiAgICAgICAgdmFyIGxpbmVDb2xvciA9IGRhdGEuX2xpbmVUaW50O1xuXG4gICAgICAgIGNvbnRleHQubGluZVdpZHRoID0gZGF0YS5saW5lV2lkdGg7XG5cbiAgICAgICAgaWYgKGRhdGEudHlwZSA9PT0gQ09OU1QuU0hBUEVTLlBPTFkpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNvbnRleHQuYmVnaW5QYXRoKCk7XG5cbiAgICAgICAgICAgIHZhciBwb2ludHMgPSBzaGFwZS5wb2ludHM7XG5cbiAgICAgICAgICAgIGNvbnRleHQubW92ZVRvKHBvaW50c1swXSwgcG9pbnRzWzFdKTtcblxuICAgICAgICAgICAgZm9yICh2YXIgaj0xOyBqIDwgcG9pbnRzLmxlbmd0aC8yOyBqKyspXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29udGV4dC5saW5lVG8ocG9pbnRzW2ogKiAyXSwgcG9pbnRzW2ogKiAyICsgMV0pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoc2hhcGUuY2xvc2VkKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGNvbnRleHQubGluZVRvKHBvaW50c1swXSwgcG9pbnRzWzFdKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gaWYgdGhlIGZpcnN0IGFuZCBsYXN0IHBvaW50IGFyZSB0aGUgc2FtZSBjbG9zZSB0aGUgcGF0aCAtIG11Y2ggbmVhdGVyIDopXG4gICAgICAgICAgICBpZiAocG9pbnRzWzBdID09PSBwb2ludHNbcG9pbnRzLmxlbmd0aC0yXSAmJiBwb2ludHNbMV0gPT09IHBvaW50c1twb2ludHMubGVuZ3RoLTFdKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGNvbnRleHQuY2xvc2VQYXRoKCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChkYXRhLmZpbGwpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29udGV4dC5nbG9iYWxBbHBoYSA9IGRhdGEuZmlsbEFscGhhICogd29ybGRBbHBoYTtcbiAgICAgICAgICAgICAgICBjb250ZXh0LmZpbGxTdHlsZSA9ICcjJyArICgnMDAwMDAnICsgKCBmaWxsQ29sb3IgfCAwKS50b1N0cmluZygxNikpLnN1YnN0cigtNik7XG4gICAgICAgICAgICAgICAgY29udGV4dC5maWxsKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZGF0YS5saW5lV2lkdGgpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29udGV4dC5nbG9iYWxBbHBoYSA9IGRhdGEubGluZUFscGhhICogd29ybGRBbHBoYTtcbiAgICAgICAgICAgICAgICBjb250ZXh0LnN0cm9rZVN0eWxlID0gJyMnICsgKCcwMDAwMCcgKyAoIGxpbmVDb2xvciB8IDApLnRvU3RyaW5nKDE2KSkuc3Vic3RyKC02KTtcbiAgICAgICAgICAgICAgICBjb250ZXh0LnN0cm9rZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGRhdGEudHlwZSA9PT0gQ09OU1QuU0hBUEVTLlJFQ1QpXG4gICAgICAgIHtcblxuICAgICAgICAgICAgaWYgKGRhdGEuZmlsbENvbG9yIHx8IGRhdGEuZmlsbENvbG9yID09PSAwKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGNvbnRleHQuZ2xvYmFsQWxwaGEgPSBkYXRhLmZpbGxBbHBoYSAqIHdvcmxkQWxwaGE7XG4gICAgICAgICAgICAgICAgY29udGV4dC5maWxsU3R5bGUgPSAnIycgKyAoJzAwMDAwJyArICggZmlsbENvbG9yIHwgMCkudG9TdHJpbmcoMTYpKS5zdWJzdHIoLTYpO1xuICAgICAgICAgICAgICAgIGNvbnRleHQuZmlsbFJlY3Qoc2hhcGUueCwgc2hhcGUueSwgc2hhcGUud2lkdGgsIHNoYXBlLmhlaWdodCk7XG5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChkYXRhLmxpbmVXaWR0aClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb250ZXh0Lmdsb2JhbEFscGhhID0gZGF0YS5saW5lQWxwaGEgKiB3b3JsZEFscGhhO1xuICAgICAgICAgICAgICAgIGNvbnRleHQuc3Ryb2tlU3R5bGUgPSAnIycgKyAoJzAwMDAwJyArICggbGluZUNvbG9yIHwgMCkudG9TdHJpbmcoMTYpKS5zdWJzdHIoLTYpO1xuICAgICAgICAgICAgICAgIGNvbnRleHQuc3Ryb2tlUmVjdChzaGFwZS54LCBzaGFwZS55LCBzaGFwZS53aWR0aCwgc2hhcGUuaGVpZ2h0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChkYXRhLnR5cGUgPT09IENPTlNULlNIQVBFUy5DSVJDKVxuICAgICAgICB7XG4gICAgICAgICAgICAvLyBUT0RPIC0gbmVlZCB0byBiZSBVbmRlZmluZWQhXG4gICAgICAgICAgICBjb250ZXh0LmJlZ2luUGF0aCgpO1xuICAgICAgICAgICAgY29udGV4dC5hcmMoc2hhcGUueCwgc2hhcGUueSwgc2hhcGUucmFkaXVzLDAsMipNYXRoLlBJKTtcbiAgICAgICAgICAgIGNvbnRleHQuY2xvc2VQYXRoKCk7XG5cbiAgICAgICAgICAgIGlmIChkYXRhLmZpbGwpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29udGV4dC5nbG9iYWxBbHBoYSA9IGRhdGEuZmlsbEFscGhhICogd29ybGRBbHBoYTtcbiAgICAgICAgICAgICAgICBjb250ZXh0LmZpbGxTdHlsZSA9ICcjJyArICgnMDAwMDAnICsgKCBmaWxsQ29sb3IgfCAwKS50b1N0cmluZygxNikpLnN1YnN0cigtNik7XG4gICAgICAgICAgICAgICAgY29udGV4dC5maWxsKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZGF0YS5saW5lV2lkdGgpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29udGV4dC5nbG9iYWxBbHBoYSA9IGRhdGEubGluZUFscGhhICogd29ybGRBbHBoYTtcbiAgICAgICAgICAgICAgICBjb250ZXh0LnN0cm9rZVN0eWxlID0gJyMnICsgKCcwMDAwMCcgKyAoIGxpbmVDb2xvciB8IDApLnRvU3RyaW5nKDE2KSkuc3Vic3RyKC02KTtcbiAgICAgICAgICAgICAgICBjb250ZXh0LnN0cm9rZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGRhdGEudHlwZSA9PT0gQ09OU1QuU0hBUEVTLkVMSVApXG4gICAgICAgIHtcbiAgICAgICAgICAgIC8vIGVsbGlwc2UgY29kZSB0YWtlbiBmcm9tOiBodHRwOi8vc3RhY2tvdmVyZmxvdy5jb20vcXVlc3Rpb25zLzIxNzI3OTgvaG93LXRvLWRyYXctYW4tb3ZhbC1pbi1odG1sNS1jYW52YXNcblxuICAgICAgICAgICAgdmFyIHcgPSBzaGFwZS53aWR0aCAqIDI7XG4gICAgICAgICAgICB2YXIgaCA9IHNoYXBlLmhlaWdodCAqIDI7XG5cbiAgICAgICAgICAgIHZhciB4ID0gc2hhcGUueCAtIHcvMjtcbiAgICAgICAgICAgIHZhciB5ID0gc2hhcGUueSAtIGgvMjtcblxuICAgICAgICAgICAgY29udGV4dC5iZWdpblBhdGgoKTtcblxuICAgICAgICAgICAgdmFyIGthcHBhID0gMC41NTIyODQ4LFxuICAgICAgICAgICAgICAgIG94ID0gKHcgLyAyKSAqIGthcHBhLCAvLyBjb250cm9sIHBvaW50IG9mZnNldCBob3Jpem9udGFsXG4gICAgICAgICAgICAgICAgb3kgPSAoaCAvIDIpICoga2FwcGEsIC8vIGNvbnRyb2wgcG9pbnQgb2Zmc2V0IHZlcnRpY2FsXG4gICAgICAgICAgICAgICAgeGUgPSB4ICsgdywgICAgICAgICAgIC8vIHgtZW5kXG4gICAgICAgICAgICAgICAgeWUgPSB5ICsgaCwgICAgICAgICAgIC8vIHktZW5kXG4gICAgICAgICAgICAgICAgeG0gPSB4ICsgdyAvIDIsICAgICAgIC8vIHgtbWlkZGxlXG4gICAgICAgICAgICAgICAgeW0gPSB5ICsgaCAvIDI7ICAgICAgIC8vIHktbWlkZGxlXG5cbiAgICAgICAgICAgIGNvbnRleHQubW92ZVRvKHgsIHltKTtcbiAgICAgICAgICAgIGNvbnRleHQuYmV6aWVyQ3VydmVUbyh4LCB5bSAtIG95LCB4bSAtIG94LCB5LCB4bSwgeSk7XG4gICAgICAgICAgICBjb250ZXh0LmJlemllckN1cnZlVG8oeG0gKyBveCwgeSwgeGUsIHltIC0gb3ksIHhlLCB5bSk7XG4gICAgICAgICAgICBjb250ZXh0LmJlemllckN1cnZlVG8oeGUsIHltICsgb3ksIHhtICsgb3gsIHllLCB4bSwgeWUpO1xuICAgICAgICAgICAgY29udGV4dC5iZXppZXJDdXJ2ZVRvKHhtIC0gb3gsIHllLCB4LCB5bSArIG95LCB4LCB5bSk7XG5cbiAgICAgICAgICAgIGNvbnRleHQuY2xvc2VQYXRoKCk7XG5cbiAgICAgICAgICAgIGlmIChkYXRhLmZpbGwpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29udGV4dC5nbG9iYWxBbHBoYSA9IGRhdGEuZmlsbEFscGhhICogd29ybGRBbHBoYTtcbiAgICAgICAgICAgICAgICBjb250ZXh0LmZpbGxTdHlsZSA9ICcjJyArICgnMDAwMDAnICsgKCBmaWxsQ29sb3IgfCAwKS50b1N0cmluZygxNikpLnN1YnN0cigtNik7XG4gICAgICAgICAgICAgICAgY29udGV4dC5maWxsKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZGF0YS5saW5lV2lkdGgpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29udGV4dC5nbG9iYWxBbHBoYSA9IGRhdGEubGluZUFscGhhICogd29ybGRBbHBoYTtcbiAgICAgICAgICAgICAgICBjb250ZXh0LnN0cm9rZVN0eWxlID0gJyMnICsgKCcwMDAwMCcgKyAoIGxpbmVDb2xvciB8IDApLnRvU3RyaW5nKDE2KSkuc3Vic3RyKC02KTtcbiAgICAgICAgICAgICAgICBjb250ZXh0LnN0cm9rZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGRhdGEudHlwZSA9PT0gQ09OU1QuU0hBUEVTLlJSRUMpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHZhciByeCA9IHNoYXBlLng7XG4gICAgICAgICAgICB2YXIgcnkgPSBzaGFwZS55O1xuICAgICAgICAgICAgdmFyIHdpZHRoID0gc2hhcGUud2lkdGg7XG4gICAgICAgICAgICB2YXIgaGVpZ2h0ID0gc2hhcGUuaGVpZ2h0O1xuICAgICAgICAgICAgdmFyIHJhZGl1cyA9IHNoYXBlLnJhZGl1cztcblxuICAgICAgICAgICAgdmFyIG1heFJhZGl1cyA9IE1hdGgubWluKHdpZHRoLCBoZWlnaHQpIC8gMiB8IDA7XG4gICAgICAgICAgICByYWRpdXMgPSByYWRpdXMgPiBtYXhSYWRpdXMgPyBtYXhSYWRpdXMgOiByYWRpdXM7XG5cbiAgICAgICAgICAgIGNvbnRleHQuYmVnaW5QYXRoKCk7XG4gICAgICAgICAgICBjb250ZXh0Lm1vdmVUbyhyeCwgcnkgKyByYWRpdXMpO1xuICAgICAgICAgICAgY29udGV4dC5saW5lVG8ocngsIHJ5ICsgaGVpZ2h0IC0gcmFkaXVzKTtcbiAgICAgICAgICAgIGNvbnRleHQucXVhZHJhdGljQ3VydmVUbyhyeCwgcnkgKyBoZWlnaHQsIHJ4ICsgcmFkaXVzLCByeSArIGhlaWdodCk7XG4gICAgICAgICAgICBjb250ZXh0LmxpbmVUbyhyeCArIHdpZHRoIC0gcmFkaXVzLCByeSArIGhlaWdodCk7XG4gICAgICAgICAgICBjb250ZXh0LnF1YWRyYXRpY0N1cnZlVG8ocnggKyB3aWR0aCwgcnkgKyBoZWlnaHQsIHJ4ICsgd2lkdGgsIHJ5ICsgaGVpZ2h0IC0gcmFkaXVzKTtcbiAgICAgICAgICAgIGNvbnRleHQubGluZVRvKHJ4ICsgd2lkdGgsIHJ5ICsgcmFkaXVzKTtcbiAgICAgICAgICAgIGNvbnRleHQucXVhZHJhdGljQ3VydmVUbyhyeCArIHdpZHRoLCByeSwgcnggKyB3aWR0aCAtIHJhZGl1cywgcnkpO1xuICAgICAgICAgICAgY29udGV4dC5saW5lVG8ocnggKyByYWRpdXMsIHJ5KTtcbiAgICAgICAgICAgIGNvbnRleHQucXVhZHJhdGljQ3VydmVUbyhyeCwgcnksIHJ4LCByeSArIHJhZGl1cyk7XG4gICAgICAgICAgICBjb250ZXh0LmNsb3NlUGF0aCgpO1xuXG4gICAgICAgICAgICBpZiAoZGF0YS5maWxsQ29sb3IgfHwgZGF0YS5maWxsQ29sb3IgPT09IDApXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29udGV4dC5nbG9iYWxBbHBoYSA9IGRhdGEuZmlsbEFscGhhICogd29ybGRBbHBoYTtcbiAgICAgICAgICAgICAgICBjb250ZXh0LmZpbGxTdHlsZSA9ICcjJyArICgnMDAwMDAnICsgKCBmaWxsQ29sb3IgfCAwKS50b1N0cmluZygxNikpLnN1YnN0cigtNik7XG4gICAgICAgICAgICAgICAgY29udGV4dC5maWxsKCk7XG5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChkYXRhLmxpbmVXaWR0aClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb250ZXh0Lmdsb2JhbEFscGhhID0gZGF0YS5saW5lQWxwaGEgKiB3b3JsZEFscGhhO1xuICAgICAgICAgICAgICAgIGNvbnRleHQuc3Ryb2tlU3R5bGUgPSAnIycgKyAoJzAwMDAwJyArICggbGluZUNvbG9yIHwgMCkudG9TdHJpbmcoMTYpKS5zdWJzdHIoLTYpO1xuICAgICAgICAgICAgICAgIGNvbnRleHQuc3Ryb2tlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG59O1xuXG4vKlxuICogUmVuZGVycyBhIGdyYXBoaWNzIG1hc2tcbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIGdyYXBoaWNzIHtQSVhJLkdyYXBoaWNzfSB0aGUgZ3JhcGhpY3Mgd2hpY2ggd2lsbCBiZSB1c2VkIGFzIGEgbWFza1xuICogQHBhcmFtIGNvbnRleHQge0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRH0gdGhlIGNvbnRleHQgMmQgbWV0aG9kIG9mIHRoZSBjYW52YXNcbiAqL1xuQ2FudmFzR3JhcGhpY3MucmVuZGVyR3JhcGhpY3NNYXNrID0gZnVuY3Rpb24gKGdyYXBoaWNzLCBjb250ZXh0KVxue1xuICAgIHZhciBsZW4gPSBncmFwaGljcy5ncmFwaGljc0RhdGEubGVuZ3RoO1xuXG4gICAgaWYgKGxlbiA9PT0gMClcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb250ZXh0LmJlZ2luUGF0aCgpO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47IGkrKylcbiAgICB7XG4gICAgICAgIHZhciBkYXRhID0gZ3JhcGhpY3MuZ3JhcGhpY3NEYXRhW2ldO1xuICAgICAgICB2YXIgc2hhcGUgPSBkYXRhLnNoYXBlO1xuXG4gICAgICAgIGlmIChkYXRhLnR5cGUgPT09IENPTlNULlNIQVBFUy5QT0xZKVxuICAgICAgICB7XG5cbiAgICAgICAgICAgIHZhciBwb2ludHMgPSBzaGFwZS5wb2ludHM7XG5cbiAgICAgICAgICAgIGNvbnRleHQubW92ZVRvKHBvaW50c1swXSwgcG9pbnRzWzFdKTtcblxuICAgICAgICAgICAgZm9yICh2YXIgaj0xOyBqIDwgcG9pbnRzLmxlbmd0aC8yOyBqKyspXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29udGV4dC5saW5lVG8ocG9pbnRzW2ogKiAyXSwgcG9pbnRzW2ogKiAyICsgMV0pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBpZiB0aGUgZmlyc3QgYW5kIGxhc3QgcG9pbnQgYXJlIHRoZSBzYW1lIGNsb3NlIHRoZSBwYXRoIC0gbXVjaCBuZWF0ZXIgOilcbiAgICAgICAgICAgIGlmIChwb2ludHNbMF0gPT09IHBvaW50c1twb2ludHMubGVuZ3RoLTJdICYmIHBvaW50c1sxXSA9PT0gcG9pbnRzW3BvaW50cy5sZW5ndGgtMV0pXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29udGV4dC5jbG9zZVBhdGgoKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGRhdGEudHlwZSA9PT0gQ09OU1QuU0hBUEVTLlJFQ1QpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNvbnRleHQucmVjdChzaGFwZS54LCBzaGFwZS55LCBzaGFwZS53aWR0aCwgc2hhcGUuaGVpZ2h0KTtcbiAgICAgICAgICAgIGNvbnRleHQuY2xvc2VQYXRoKCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoZGF0YS50eXBlID09PSBDT05TVC5TSEFQRVMuQ0lSQylcbiAgICAgICAge1xuICAgICAgICAgICAgLy8gVE9ETyAtIG5lZWQgdG8gYmUgVW5kZWZpbmVkIVxuICAgICAgICAgICAgY29udGV4dC5hcmMoc2hhcGUueCwgc2hhcGUueSwgc2hhcGUucmFkaXVzLCAwLCAyICogTWF0aC5QSSk7XG4gICAgICAgICAgICBjb250ZXh0LmNsb3NlUGF0aCgpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGRhdGEudHlwZSA9PT0gQ09OU1QuU0hBUEVTLkVMSVApXG4gICAgICAgIHtcblxuICAgICAgICAgICAgLy8gZWxsaXBzZSBjb2RlIHRha2VuIGZyb206IGh0dHA6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvMjE3Mjc5OC9ob3ctdG8tZHJhdy1hbi1vdmFsLWluLWh0bWw1LWNhbnZhc1xuXG4gICAgICAgICAgICB2YXIgdyA9IHNoYXBlLndpZHRoICogMjtcbiAgICAgICAgICAgIHZhciBoID0gc2hhcGUuaGVpZ2h0ICogMjtcblxuICAgICAgICAgICAgdmFyIHggPSBzaGFwZS54IC0gdy8yO1xuICAgICAgICAgICAgdmFyIHkgPSBzaGFwZS55IC0gaC8yO1xuXG4gICAgICAgICAgICB2YXIga2FwcGEgPSAwLjU1MjI4NDgsXG4gICAgICAgICAgICAgICAgb3ggPSAodyAvIDIpICoga2FwcGEsIC8vIGNvbnRyb2wgcG9pbnQgb2Zmc2V0IGhvcml6b250YWxcbiAgICAgICAgICAgICAgICBveSA9IChoIC8gMikgKiBrYXBwYSwgLy8gY29udHJvbCBwb2ludCBvZmZzZXQgdmVydGljYWxcbiAgICAgICAgICAgICAgICB4ZSA9IHggKyB3LCAgICAgICAgICAgLy8geC1lbmRcbiAgICAgICAgICAgICAgICB5ZSA9IHkgKyBoLCAgICAgICAgICAgLy8geS1lbmRcbiAgICAgICAgICAgICAgICB4bSA9IHggKyB3IC8gMiwgICAgICAgLy8geC1taWRkbGVcbiAgICAgICAgICAgICAgICB5bSA9IHkgKyBoIC8gMjsgICAgICAgLy8geS1taWRkbGVcblxuICAgICAgICAgICAgY29udGV4dC5tb3ZlVG8oeCwgeW0pO1xuICAgICAgICAgICAgY29udGV4dC5iZXppZXJDdXJ2ZVRvKHgsIHltIC0gb3ksIHhtIC0gb3gsIHksIHhtLCB5KTtcbiAgICAgICAgICAgIGNvbnRleHQuYmV6aWVyQ3VydmVUbyh4bSArIG94LCB5LCB4ZSwgeW0gLSBveSwgeGUsIHltKTtcbiAgICAgICAgICAgIGNvbnRleHQuYmV6aWVyQ3VydmVUbyh4ZSwgeW0gKyBveSwgeG0gKyBveCwgeWUsIHhtLCB5ZSk7XG4gICAgICAgICAgICBjb250ZXh0LmJlemllckN1cnZlVG8oeG0gLSBveCwgeWUsIHgsIHltICsgb3ksIHgsIHltKTtcbiAgICAgICAgICAgIGNvbnRleHQuY2xvc2VQYXRoKCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoZGF0YS50eXBlID09PSBDT05TVC5TSEFQRVMuUlJFQylcbiAgICAgICAge1xuXG4gICAgICAgICAgICB2YXIgcnggPSBzaGFwZS54O1xuICAgICAgICAgICAgdmFyIHJ5ID0gc2hhcGUueTtcbiAgICAgICAgICAgIHZhciB3aWR0aCA9IHNoYXBlLndpZHRoO1xuICAgICAgICAgICAgdmFyIGhlaWdodCA9IHNoYXBlLmhlaWdodDtcbiAgICAgICAgICAgIHZhciByYWRpdXMgPSBzaGFwZS5yYWRpdXM7XG5cbiAgICAgICAgICAgIHZhciBtYXhSYWRpdXMgPSBNYXRoLm1pbih3aWR0aCwgaGVpZ2h0KSAvIDIgfCAwO1xuICAgICAgICAgICAgcmFkaXVzID0gcmFkaXVzID4gbWF4UmFkaXVzID8gbWF4UmFkaXVzIDogcmFkaXVzO1xuXG4gICAgICAgICAgICBjb250ZXh0Lm1vdmVUbyhyeCwgcnkgKyByYWRpdXMpO1xuICAgICAgICAgICAgY29udGV4dC5saW5lVG8ocngsIHJ5ICsgaGVpZ2h0IC0gcmFkaXVzKTtcbiAgICAgICAgICAgIGNvbnRleHQucXVhZHJhdGljQ3VydmVUbyhyeCwgcnkgKyBoZWlnaHQsIHJ4ICsgcmFkaXVzLCByeSArIGhlaWdodCk7XG4gICAgICAgICAgICBjb250ZXh0LmxpbmVUbyhyeCArIHdpZHRoIC0gcmFkaXVzLCByeSArIGhlaWdodCk7XG4gICAgICAgICAgICBjb250ZXh0LnF1YWRyYXRpY0N1cnZlVG8ocnggKyB3aWR0aCwgcnkgKyBoZWlnaHQsIHJ4ICsgd2lkdGgsIHJ5ICsgaGVpZ2h0IC0gcmFkaXVzKTtcbiAgICAgICAgICAgIGNvbnRleHQubGluZVRvKHJ4ICsgd2lkdGgsIHJ5ICsgcmFkaXVzKTtcbiAgICAgICAgICAgIGNvbnRleHQucXVhZHJhdGljQ3VydmVUbyhyeCArIHdpZHRoLCByeSwgcnggKyB3aWR0aCAtIHJhZGl1cywgcnkpO1xuICAgICAgICAgICAgY29udGV4dC5saW5lVG8ocnggKyByYWRpdXMsIHJ5KTtcbiAgICAgICAgICAgIGNvbnRleHQucXVhZHJhdGljQ3VydmVUbyhyeCwgcnksIHJ4LCByeSArIHJhZGl1cyk7XG4gICAgICAgICAgICBjb250ZXh0LmNsb3NlUGF0aCgpO1xuICAgICAgICB9XG4gICAgfVxufTtcblxuLypcbiAqIFVwZGF0ZXMgdGhlIHRpbnQgb2YgYSBncmFwaGljcyBvYmplY3RcbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIGdyYXBoaWNzIHtQSVhJLkdyYXBoaWNzfSB0aGUgZ3JhcGhpY3MgdGhhdCB3aWxsIGhhdmUgaXRzIHRpbnQgdXBkYXRlZFxuICpcbiAqL1xuQ2FudmFzR3JhcGhpY3MudXBkYXRlR3JhcGhpY3NUaW50ID0gZnVuY3Rpb24gKGdyYXBoaWNzKVxue1xuICAgIGlmIChncmFwaGljcy50aW50ID09PSAweEZGRkZGRiAmJiBncmFwaGljcy5fcHJldlRpbnQgPT09IGdyYXBoaWNzLnRpbnQpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIGdyYXBoaWNzLl9wcmV2VGludCA9IGdyYXBoaWNzLnRpbnQ7XG5cbiAgICB2YXIgdGludFIgPSAoZ3JhcGhpY3MudGludCA+PiAxNiAmIDB4RkYpIC8gMjU1O1xuICAgIHZhciB0aW50RyA9IChncmFwaGljcy50aW50ID4+IDggJiAweEZGKSAvIDI1NTtcbiAgICB2YXIgdGludEIgPSAoZ3JhcGhpY3MudGludCAmIDB4RkYpLyAyNTU7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGdyYXBoaWNzLmdyYXBoaWNzRGF0YS5sZW5ndGg7IGkrKylcbiAgICB7XG4gICAgICAgIHZhciBkYXRhID0gZ3JhcGhpY3MuZ3JhcGhpY3NEYXRhW2ldO1xuXG4gICAgICAgIHZhciBmaWxsQ29sb3IgPSBkYXRhLmZpbGxDb2xvciB8IDA7XG4gICAgICAgIHZhciBsaW5lQ29sb3IgPSBkYXRhLmxpbmVDb2xvciB8IDA7XG5cbiAgICAgICAgLypcbiAgICAgICAgdmFyIGNvbG9yUiA9IChmaWxsQ29sb3IgPj4gMTYgJiAweEZGKSAvIDI1NTtcbiAgICAgICAgdmFyIGNvbG9yRyA9IChmaWxsQ29sb3IgPj4gOCAmIDB4RkYpIC8gMjU1O1xuICAgICAgICB2YXIgY29sb3JCID0gKGZpbGxDb2xvciAmIDB4RkYpIC8gMjU1O1xuXG4gICAgICAgIGNvbG9yUiAqPSB0aW50UjtcbiAgICAgICAgY29sb3JHICo9IHRpbnRHO1xuICAgICAgICBjb2xvckIgKj0gdGludEI7XG5cbiAgICAgICAgZmlsbENvbG9yID0gKChjb2xvclIqMjU1IDw8IDE2KSArIChjb2xvckcqMjU1IDw8IDgpICsgY29sb3JCKjI1NSk7XG5cbiAgICAgICAgY29sb3JSID0gKGxpbmVDb2xvciA+PiAxNiAmIDB4RkYpIC8gMjU1O1xuICAgICAgICBjb2xvckcgPSAobGluZUNvbG9yID4+IDggJiAweEZGKSAvIDI1NTtcbiAgICAgICAgY29sb3JCID0gKGxpbmVDb2xvciAmIDB4RkYpIC8gMjU1O1xuXG4gICAgICAgIGNvbG9yUiAqPSB0aW50UjtcbiAgICAgICAgY29sb3JHICo9IHRpbnRHO1xuICAgICAgICBjb2xvckIgKj0gdGludEI7XG5cbiAgICAgICAgbGluZUNvbG9yID0gKChjb2xvclIqMjU1IDw8IDE2KSArIChjb2xvckcqMjU1IDw8IDgpICsgY29sb3JCKjI1NSk7XG4gICAgICAgICovXG5cbiAgICAgICAgLy8gc3VwZXIgaW5saW5lIGNvcyBpbSBhbiBvcHRpbWl6YXRpb24gTkFaSSA6KVxuICAgICAgICBkYXRhLl9maWxsVGludCA9ICgoKGZpbGxDb2xvciA+PiAxNiAmIDB4RkYpIC8gMjU1ICogdGludFIqMjU1IDw8IDE2KSArICgoZmlsbENvbG9yID4+IDggJiAweEZGKSAvIDI1NSAqIHRpbnRHKjI1NSA8PCA4KSArICAoZmlsbENvbG9yICYgMHhGRikgLyAyNTUgKiB0aW50QioyNTUpO1xuICAgICAgICBkYXRhLl9saW5lVGludCA9ICgoKGxpbmVDb2xvciA+PiAxNiAmIDB4RkYpIC8gMjU1ICogdGludFIqMjU1IDw8IDE2KSArICgobGluZUNvbG9yID4+IDggJiAweEZGKSAvIDI1NSAqIHRpbnRHKjI1NSA8PCA4KSArICAobGluZUNvbG9yICYgMHhGRikgLyAyNTUgKiB0aW50QioyNTUpO1xuXG4gICAgfVxufTtcblxuIiwidmFyIENhbnZhc0dyYXBoaWNzID0gcmVxdWlyZSgnLi9DYW52YXNHcmFwaGljcycpO1xuXG4vKipcbiAqIEEgc2V0IG9mIGZ1bmN0aW9ucyB1c2VkIHRvIGhhbmRsZSBtYXNraW5nLlxuICpcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqL1xuZnVuY3Rpb24gQ2FudmFzTWFza01hbmFnZXIoKVxue31cblxuQ2FudmFzTWFza01hbmFnZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gQ2FudmFzTWFza01hbmFnZXI7XG5tb2R1bGUuZXhwb3J0cyA9IENhbnZhc01hc2tNYW5hZ2VyO1xuXG4vKipcbiAqIFRoaXMgbWV0aG9kIGFkZHMgaXQgdG8gdGhlIGN1cnJlbnQgc3RhY2sgb2YgbWFza3MuXG4gKlxuICogQHBhcmFtIG1hc2tEYXRhIHtvYmplY3R9IHRoZSBtYXNrRGF0YSB0aGF0IHdpbGwgYmUgcHVzaGVkXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcnxQSVhJLkNhbnZhc1JlbmRlcmVyfSBUaGUgcmVuZGVyZXIgY29udGV4dCB0byB1c2UuXG4gKi9cbkNhbnZhc01hc2tNYW5hZ2VyLnByb3RvdHlwZS5wdXNoTWFzayA9IGZ1bmN0aW9uIChtYXNrRGF0YSwgcmVuZGVyZXIpXG57XG5cbiAgICByZW5kZXJlci5jb250ZXh0LnNhdmUoKTtcblxuICAgIHZhciBjYWNoZUFscGhhID0gbWFza0RhdGEuYWxwaGE7XG4gICAgdmFyIHRyYW5zZm9ybSA9IG1hc2tEYXRhLndvcmxkVHJhbnNmb3JtO1xuICAgIHZhciByZXNvbHV0aW9uID0gcmVuZGVyZXIucmVzb2x1dGlvbjtcblxuICAgIHJlbmRlcmVyLmNvbnRleHQuc2V0VHJhbnNmb3JtKFxuICAgICAgICB0cmFuc2Zvcm0uYSAqIHJlc29sdXRpb24sXG4gICAgICAgIHRyYW5zZm9ybS5iICogcmVzb2x1dGlvbixcbiAgICAgICAgdHJhbnNmb3JtLmMgKiByZXNvbHV0aW9uLFxuICAgICAgICB0cmFuc2Zvcm0uZCAqIHJlc29sdXRpb24sXG4gICAgICAgIHRyYW5zZm9ybS50eCAqIHJlc29sdXRpb24sXG4gICAgICAgIHRyYW5zZm9ybS50eSAqIHJlc29sdXRpb25cbiAgICApO1xuXG4gICAgLy9UT0RPIHN1cG9ydCBzcHJpdGUgYWxwaGEgbWFza3M/P1xuICAgIC8vbG90cyBvZiBlZmZvcnQgcmVxdWlyZWQuIElmIGRlbWFuZCBpcyBncmVhdCBlbm91Z2guLlxuICAgIGlmKCFtYXNrRGF0YS50ZXh0dXJlKVxuICAgIHtcbiAgICAgICAgQ2FudmFzR3JhcGhpY3MucmVuZGVyR3JhcGhpY3NNYXNrKG1hc2tEYXRhLCByZW5kZXJlci5jb250ZXh0KTtcbiAgICAgICAgcmVuZGVyZXIuY29udGV4dC5jbGlwKCk7XG4gICAgfVxuXG4gICAgbWFza0RhdGEud29ybGRBbHBoYSA9IGNhY2hlQWxwaGE7XG59O1xuXG4vKipcbiAqIFJlc3RvcmVzIHRoZSBjdXJyZW50IGRyYXdpbmcgY29udGV4dCB0byB0aGUgc3RhdGUgaXQgd2FzIGJlZm9yZSB0aGUgbWFzayB3YXMgYXBwbGllZC5cbiAqXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcnxQSVhJLkNhbnZhc1JlbmRlcmVyfSBUaGUgcmVuZGVyZXIgY29udGV4dCB0byB1c2UuXG4gKi9cbkNhbnZhc01hc2tNYW5hZ2VyLnByb3RvdHlwZS5wb3BNYXNrID0gZnVuY3Rpb24gKHJlbmRlcmVyKVxue1xuICAgIHJlbmRlcmVyLmNvbnRleHQucmVzdG9yZSgpO1xufTtcblxuQ2FudmFzTWFza01hbmFnZXIucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoKSB7fTtcbiIsInZhciB1dGlscyA9IHJlcXVpcmUoJy4uLy4uLy4uL3V0aWxzJyk7XG5cbi8qKlxuICogVXRpbGl0eSBtZXRob2RzIGZvciBTcHJpdGUvVGV4dHVyZSB0aW50aW5nLlxuICogQHN0YXRpY1xuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICovXG52YXIgQ2FudmFzVGludGVyID0ge307XG5tb2R1bGUuZXhwb3J0cyA9IENhbnZhc1RpbnRlcjtcblxuLyoqXG4gKiBCYXNpY2FsbHkgdGhpcyBtZXRob2QganVzdCBuZWVkcyBhIHNwcml0ZSBhbmQgYSBjb2xvciBhbmQgdGludHMgdGhlIHNwcml0ZSB3aXRoIHRoZSBnaXZlbiBjb2xvci5cbiAqXG4gKiBAcGFyYW0gc3ByaXRlIHtQSVhJLlNwcml0ZX0gdGhlIHNwcml0ZSB0byB0aW50XG4gKiBAcGFyYW0gY29sb3Ige251bWJlcn0gdGhlIGNvbG9yIHRvIHVzZSB0byB0aW50IHRoZSBzcHJpdGUgd2l0aFxuICogQHJldHVybiB7SFRNTENhbnZhc0VsZW1lbnR9IFRoZSB0aW50ZWQgY2FudmFzXG4gKi9cbkNhbnZhc1RpbnRlci5nZXRUaW50ZWRUZXh0dXJlID0gZnVuY3Rpb24gKHNwcml0ZSwgY29sb3IpXG57XG4gICAgdmFyIHRleHR1cmUgPSBzcHJpdGUudGV4dHVyZTtcblxuICAgIGNvbG9yID0gQ2FudmFzVGludGVyLnJvdW5kQ29sb3IoY29sb3IpO1xuXG4gICAgdmFyIHN0cmluZ0NvbG9yID0gJyMnICsgKCcwMDAwMCcgKyAoIGNvbG9yIHwgMCkudG9TdHJpbmcoMTYpKS5zdWJzdHIoLTYpO1xuXG4gICAgdGV4dHVyZS50aW50Q2FjaGUgPSB0ZXh0dXJlLnRpbnRDYWNoZSB8fCB7fTtcblxuICAgIGlmICh0ZXh0dXJlLnRpbnRDYWNoZVtzdHJpbmdDb2xvcl0pXG4gICAge1xuICAgICAgICByZXR1cm4gdGV4dHVyZS50aW50Q2FjaGVbc3RyaW5nQ29sb3JdO1xuICAgIH1cblxuICAgICAvLyBjbG9uZSB0ZXh0dXJlLi5cbiAgICB2YXIgY2FudmFzID0gQ2FudmFzVGludGVyLmNhbnZhcyB8fCBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdjYW52YXMnKTtcblxuICAgIC8vQ2FudmFzVGludGVyLnRpbnRXaXRoUGVyUGl4ZWwodGV4dHVyZSwgc3RyaW5nQ29sb3IsIGNhbnZhcyk7XG4gICAgQ2FudmFzVGludGVyLnRpbnRNZXRob2QodGV4dHVyZSwgY29sb3IsIGNhbnZhcyk7XG5cbiAgICBpZiAoQ2FudmFzVGludGVyLmNvbnZlcnRUaW50VG9JbWFnZSlcbiAgICB7XG4gICAgICAgIC8vIGlzIHRoaXMgYmV0dGVyP1xuICAgICAgICB2YXIgdGludEltYWdlID0gbmV3IEltYWdlKCk7XG4gICAgICAgIHRpbnRJbWFnZS5zcmMgPSBjYW52YXMudG9EYXRhVVJMKCk7XG5cbiAgICAgICAgdGV4dHVyZS50aW50Q2FjaGVbc3RyaW5nQ29sb3JdID0gdGludEltYWdlO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICB0ZXh0dXJlLnRpbnRDYWNoZVtzdHJpbmdDb2xvcl0gPSBjYW52YXM7XG4gICAgICAgIC8vIGlmIHdlIGFyZSBub3QgY29udmVydGluZyB0aGUgdGV4dHVyZSB0byBhbiBpbWFnZSB0aGVuIHdlIG5lZWQgdG8gbG9zZSB0aGUgcmVmZXJlbmNlIHRvIHRoZSBjYW52YXNcbiAgICAgICAgQ2FudmFzVGludGVyLmNhbnZhcyA9IG51bGw7XG4gICAgfVxuXG4gICAgcmV0dXJuIGNhbnZhcztcbn07XG5cbi8qKlxuICogVGludCBhIHRleHR1cmUgdXNpbmcgdGhlICdtdWx0aXBseScgb3BlcmF0aW9uLlxuICpcbiAqIEBwYXJhbSB0ZXh0dXJlIHtQSVhJLlRleHR1cmV9IHRoZSB0ZXh0dXJlIHRvIHRpbnRcbiAqIEBwYXJhbSBjb2xvciB7bnVtYmVyfSB0aGUgY29sb3IgdG8gdXNlIHRvIHRpbnQgdGhlIHNwcml0ZSB3aXRoXG4gKiBAcGFyYW0gY2FudmFzIHtIVE1MQ2FudmFzRWxlbWVudH0gdGhlIGN1cnJlbnQgY2FudmFzXG4gKi9cbkNhbnZhc1RpbnRlci50aW50V2l0aE11bHRpcGx5ID0gZnVuY3Rpb24gKHRleHR1cmUsIGNvbG9yLCBjYW52YXMpXG57XG4gICAgdmFyIGNvbnRleHQgPSBjYW52YXMuZ2V0Q29udGV4dCggJzJkJyApO1xuXG4gICAgdmFyIHJlc29sdXRpb24gPSB0ZXh0dXJlLmJhc2VUZXh0dXJlLnJlc29sdXRpb247XG5cbiAgICB2YXIgY3JvcCA9IHRleHR1cmUuY3JvcC5jbG9uZSgpO1xuICAgIGNyb3AueCAqPSByZXNvbHV0aW9uO1xuICAgIGNyb3AueSAqPSByZXNvbHV0aW9uO1xuICAgIGNyb3Aud2lkdGggKj0gcmVzb2x1dGlvbjtcbiAgICBjcm9wLmhlaWdodCAqPSByZXNvbHV0aW9uO1xuXG4gICAgY2FudmFzLndpZHRoID0gY3JvcC53aWR0aDtcbiAgICBjYW52YXMuaGVpZ2h0ID0gY3JvcC5oZWlnaHQ7XG5cbiAgICBjb250ZXh0LmZpbGxTdHlsZSA9ICcjJyArICgnMDAwMDAnICsgKCBjb2xvciB8IDApLnRvU3RyaW5nKDE2KSkuc3Vic3RyKC02KTtcblxuICAgIGNvbnRleHQuZmlsbFJlY3QoMCwgMCwgY3JvcC53aWR0aCwgY3JvcC5oZWlnaHQpO1xuXG4gICAgY29udGV4dC5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb24gPSAnbXVsdGlwbHknO1xuXG4gICAgY29udGV4dC5kcmF3SW1hZ2UoXG4gICAgICAgIHRleHR1cmUuYmFzZVRleHR1cmUuc291cmNlLFxuICAgICAgICBjcm9wLngsXG4gICAgICAgIGNyb3AueSxcbiAgICAgICAgY3JvcC53aWR0aCxcbiAgICAgICAgY3JvcC5oZWlnaHQsXG4gICAgICAgIDAsXG4gICAgICAgIDAsXG4gICAgICAgIGNyb3Aud2lkdGgsXG4gICAgICAgIGNyb3AuaGVpZ2h0XG4gICAgKTtcblxuICAgIGNvbnRleHQuZ2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uID0gJ2Rlc3RpbmF0aW9uLWF0b3AnO1xuXG4gICAgY29udGV4dC5kcmF3SW1hZ2UoXG4gICAgICAgIHRleHR1cmUuYmFzZVRleHR1cmUuc291cmNlLFxuICAgICAgICBjcm9wLngsXG4gICAgICAgIGNyb3AueSxcbiAgICAgICAgY3JvcC53aWR0aCxcbiAgICAgICAgY3JvcC5oZWlnaHQsXG4gICAgICAgIDAsXG4gICAgICAgIDAsXG4gICAgICAgIGNyb3Aud2lkdGgsXG4gICAgICAgIGNyb3AuaGVpZ2h0XG4gICAgKTtcbn07XG5cbi8qKlxuICogVGludCBhIHRleHR1cmUgdXNpbmcgdGhlICdvdmVybGF5JyBvcGVyYXRpb24uXG4gKlxuICogQHBhcmFtIHRleHR1cmUge1BJWEkuVGV4dHVyZX0gdGhlIHRleHR1cmUgdG8gdGludFxuICogQHBhcmFtIGNvbG9yIHtudW1iZXJ9IHRoZSBjb2xvciB0byB1c2UgdG8gdGludCB0aGUgc3ByaXRlIHdpdGhcbiAqIEBwYXJhbSBjYW52YXMge0hUTUxDYW52YXNFbGVtZW50fSB0aGUgY3VycmVudCBjYW52YXNcbiAqL1xuQ2FudmFzVGludGVyLnRpbnRXaXRoT3ZlcmxheSA9IGZ1bmN0aW9uICh0ZXh0dXJlLCBjb2xvciwgY2FudmFzKVxue1xuICAgIHZhciBjb250ZXh0ID0gY2FudmFzLmdldENvbnRleHQoICcyZCcgKTtcblxuICAgIHZhciByZXNvbHV0aW9uID0gdGV4dHVyZS5iYXNlVGV4dHVyZS5yZXNvbHV0aW9uO1xuXG4gICAgdmFyIGNyb3AgPSB0ZXh0dXJlLmNyb3AuY2xvbmUoKTtcbiAgICBjcm9wLnggKj0gcmVzb2x1dGlvbjtcbiAgICBjcm9wLnkgKj0gcmVzb2x1dGlvbjtcbiAgICBjcm9wLndpZHRoICo9IHJlc29sdXRpb247XG4gICAgY3JvcC5oZWlnaHQgKj0gcmVzb2x1dGlvbjtcblxuICAgIGNhbnZhcy53aWR0aCA9IGNyb3Aud2lkdGg7XG4gICAgY2FudmFzLmhlaWdodCA9IGNyb3AuaGVpZ2h0O1xuXG4gICAgY29udGV4dC5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb24gPSAnY29weSc7XG4gICAgY29udGV4dC5maWxsU3R5bGUgPSAnIycgKyAoJzAwMDAwJyArICggY29sb3IgfCAwKS50b1N0cmluZygxNikpLnN1YnN0cigtNik7XG4gICAgY29udGV4dC5maWxsUmVjdCgwLCAwLCBjcm9wLndpZHRoLCBjcm9wLmhlaWdodCk7XG5cbiAgICBjb250ZXh0Lmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbiA9ICdkZXN0aW5hdGlvbi1hdG9wJztcbiAgICBjb250ZXh0LmRyYXdJbWFnZShcbiAgICAgICAgdGV4dHVyZS5iYXNlVGV4dHVyZS5zb3VyY2UsXG4gICAgICAgIGNyb3AueCxcbiAgICAgICAgY3JvcC55LFxuICAgICAgICBjcm9wLndpZHRoLFxuICAgICAgICBjcm9wLmhlaWdodCxcbiAgICAgICAgMCxcbiAgICAgICAgMCxcbiAgICAgICAgY3JvcC53aWR0aCxcbiAgICAgICAgY3JvcC5oZWlnaHRcbiAgICApO1xuXG4gICAgLy8gY29udGV4dC5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb24gPSAnY29weSc7XG59O1xuXG4vKipcbiAqIFRpbnQgYSB0ZXh0dXJlIHBpeGVsIHBlciBwaXhlbC5cbiAqXG4gKiBAcGFyYW0gdGV4dHVyZSB7UElYSS5UZXh0dXJlfSB0aGUgdGV4dHVyZSB0byB0aW50XG4gKiBAcGFyYW0gY29sb3Ige251bWJlcn0gdGhlIGNvbG9yIHRvIHVzZSB0byB0aW50IHRoZSBzcHJpdGUgd2l0aFxuICogQHBhcmFtIGNhbnZhcyB7SFRNTENhbnZhc0VsZW1lbnR9IHRoZSBjdXJyZW50IGNhbnZhc1xuICovXG5DYW52YXNUaW50ZXIudGludFdpdGhQZXJQaXhlbCA9IGZ1bmN0aW9uICh0ZXh0dXJlLCBjb2xvciwgY2FudmFzKVxue1xuICAgIHZhciBjb250ZXh0ID0gY2FudmFzLmdldENvbnRleHQoICcyZCcgKTtcblxuICAgIHZhciByZXNvbHV0aW9uID0gdGV4dHVyZS5iYXNlVGV4dHVyZS5yZXNvbHV0aW9uO1xuXG4gICAgdmFyIGNyb3AgPSB0ZXh0dXJlLmNyb3AuY2xvbmUoKTtcbiAgICBjcm9wLnggKj0gcmVzb2x1dGlvbjtcbiAgICBjcm9wLnkgKj0gcmVzb2x1dGlvbjtcbiAgICBjcm9wLndpZHRoICo9IHJlc29sdXRpb247XG4gICAgY3JvcC5oZWlnaHQgKj0gcmVzb2x1dGlvbjtcblxuICAgIGNhbnZhcy53aWR0aCA9IGNyb3Aud2lkdGg7XG4gICAgY2FudmFzLmhlaWdodCA9IGNyb3AuaGVpZ2h0O1xuXG4gICAgY29udGV4dC5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb24gPSAnY29weSc7XG4gICAgY29udGV4dC5kcmF3SW1hZ2UoXG4gICAgICAgIHRleHR1cmUuYmFzZVRleHR1cmUuc291cmNlLFxuICAgICAgICBjcm9wLngsXG4gICAgICAgIGNyb3AueSxcbiAgICAgICAgY3JvcC53aWR0aCxcbiAgICAgICAgY3JvcC5oZWlnaHQsXG4gICAgICAgIDAsXG4gICAgICAgIDAsXG4gICAgICAgIGNyb3Aud2lkdGgsXG4gICAgICAgIGNyb3AuaGVpZ2h0XG4gICAgKTtcblxuICAgIHZhciByZ2JWYWx1ZXMgPSB1dGlscy5oZXgycmdiKGNvbG9yKTtcbiAgICB2YXIgciA9IHJnYlZhbHVlc1swXSwgZyA9IHJnYlZhbHVlc1sxXSwgYiA9IHJnYlZhbHVlc1syXTtcblxuICAgIHZhciBwaXhlbERhdGEgPSBjb250ZXh0LmdldEltYWdlRGF0YSgwLCAwLCBjcm9wLndpZHRoLCBjcm9wLmhlaWdodCk7XG5cbiAgICB2YXIgcGl4ZWxzID0gcGl4ZWxEYXRhLmRhdGE7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHBpeGVscy5sZW5ndGg7IGkgKz0gNClcbiAgICB7XG4gICAgICAgIHBpeGVsc1tpKzBdICo9IHI7XG4gICAgICAgIHBpeGVsc1tpKzFdICo9IGc7XG4gICAgICAgIHBpeGVsc1tpKzJdICo9IGI7XG4gICAgfVxuXG4gICAgY29udGV4dC5wdXRJbWFnZURhdGEocGl4ZWxEYXRhLCAwLCAwKTtcbn07XG5cbi8qKlxuICogUm91bmRzIHRoZSBzcGVjaWZpZWQgY29sb3IgYWNjb3JkaW5nIHRvIHRoZSBDYW52YXNUaW50ZXIuY2FjaGVTdGVwc1BlckNvbG9yQ2hhbm5lbC5cbiAqXG4gKiBAcGFyYW0gY29sb3Ige251bWJlcn0gdGhlIGNvbG9yIHRvIHJvdW5kLCBzaG91bGQgYmUgYSBoZXggY29sb3JcbiAqL1xuQ2FudmFzVGludGVyLnJvdW5kQ29sb3IgPSBmdW5jdGlvbiAoY29sb3IpXG57XG4gICAgdmFyIHN0ZXAgPSBDYW52YXNUaW50ZXIuY2FjaGVTdGVwc1BlckNvbG9yQ2hhbm5lbDtcblxuICAgIHZhciByZ2JWYWx1ZXMgPSB1dGlscy5oZXgycmdiKGNvbG9yKTtcblxuICAgIHJnYlZhbHVlc1swXSA9IE1hdGgubWluKDI1NSwgKHJnYlZhbHVlc1swXSAvIHN0ZXApICogc3RlcCk7XG4gICAgcmdiVmFsdWVzWzFdID0gTWF0aC5taW4oMjU1LCAocmdiVmFsdWVzWzFdIC8gc3RlcCkgKiBzdGVwKTtcbiAgICByZ2JWYWx1ZXNbMl0gPSBNYXRoLm1pbigyNTUsIChyZ2JWYWx1ZXNbMl0gLyBzdGVwKSAqIHN0ZXApO1xuXG4gICAgcmV0dXJuIHV0aWxzLnJnYjJoZXgocmdiVmFsdWVzKTtcbn07XG5cbi8qKlxuICogTnVtYmVyIG9mIHN0ZXBzIHdoaWNoIHdpbGwgYmUgdXNlZCBhcyBhIGNhcCB3aGVuIHJvdW5kaW5nIGNvbG9ycy5cbiAqXG4gKiBAbWVtYmVyXG4gKi9cbkNhbnZhc1RpbnRlci5jYWNoZVN0ZXBzUGVyQ29sb3JDaGFubmVsID0gODtcblxuLyoqXG4gKiBUaW50IGNhY2hlIGJvb2xlYW4gZmxhZy5cbiAqXG4gKiBAbWVtYmVyXG4gKi9cbkNhbnZhc1RpbnRlci5jb252ZXJ0VGludFRvSW1hZ2UgPSBmYWxzZTtcblxuLyoqXG4gKiBXaGV0aGVyIG9yIG5vdCB0aGUgQ2FudmFzIEJsZW5kTW9kZXMgYXJlIHN1cHBvcnRlZCwgY29uc2VxdWVudGx5IHRoZSBhYmlsaXR5IHRvIHRpbnQgdXNpbmcgdGhlIG11bHRpcGx5IG1ldGhvZC5cbiAqXG4gKiBAbWVtYmVyXG4gKi9cbkNhbnZhc1RpbnRlci5jYW5Vc2VNdWx0aXBseSA9IHV0aWxzLmNhblVzZU5ld0NhbnZhc0JsZW5kTW9kZXMoKTtcblxuLyoqXG4gKiBUaGUgdGludGluZyBtZXRob2QgdGhhdCB3aWxsIGJlIHVzZWQuXG4gKlxuICovXG5DYW52YXNUaW50ZXIudGludE1ldGhvZCA9IENhbnZhc1RpbnRlci5jYW5Vc2VNdWx0aXBseSA/IENhbnZhc1RpbnRlci50aW50V2l0aE11bHRpcGx5IDogIENhbnZhc1RpbnRlci50aW50V2l0aFBlclBpeGVsO1xuIiwidmFyIEdMVGV4dHVyZSA9IHJlcXVpcmUoJ3BpeGktZ2wtY29yZScpLkdMVGV4dHVyZSxcblx0dXRpbHMgPSByZXF1aXJlKCcuLi8uLi91dGlscycpO1xuXG4vKipcbiAqIEhlbHBlciBjbGFzcyB0byBjcmVhdGUgYSB3ZWJHTCBUZXh0dXJlXG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIGdsIHtXZWJHTFJlbmRlcmluZ0NvbnRleHR9XG4gKi9cblxudmFyIFRleHR1cmVNYW5hZ2VyID0gZnVuY3Rpb24oZ2wpXG57XG5cdHRoaXMuZ2wgPSBnbDtcblxuXHQvLyB0cmFjayB0ZXh0dXJlcyBpbiB0aGUgcmVuZGVyZXIgc28gd2UgY2FuIG5vIGxvbmdlciBsaXN0ZW4gdG8gdGhlbSBvbiBkZXN0cnVjdGlvbi5cblx0dGhpcy5fbWFuYWdlZFRleHR1cmVzID0gW107XG4gICAgdGhpcy5nbFRleHR1cmVzID0ge307XG5cbn1cblxuVGV4dHVyZU1hbmFnZXIucHJvdG90eXBlLmJpbmRUZXh0dXJlID0gZnVuY3Rpb24odGV4dHVyZSlcbntcblxufVxuXG5cblRleHR1cmVNYW5hZ2VyLnByb3RvdHlwZS5nZXRUZXh0dXJlID0gZnVuY3Rpb24odGV4dHVyZSlcbntcblxufVxuXG4vKipcbiAqIFVwZGF0ZXMgYW5kL29yIENyZWF0ZXMgYSBXZWJHTCB0ZXh0dXJlIGZvciB0aGUgcmVuZGVyZXIncyBjb250ZXh0LlxuICpcbiAqIEBwYXJhbSB0ZXh0dXJlIHtQSVhJLkJhc2VUZXh0dXJlfFBJWEkuVGV4dHVyZX0gdGhlIHRleHR1cmUgdG8gdXBkYXRlXG4gKi9cblRleHR1cmVNYW5hZ2VyLnByb3RvdHlwZS51cGRhdGVUZXh0dXJlID0gZnVuY3Rpb24odGV4dHVyZSlcbntcblx0dGV4dHVyZSA9IHRleHR1cmUuYmFzZVRleHR1cmUgfHwgdGV4dHVyZTtcblxuXHRpZiAoIXRleHR1cmUuaGFzTG9hZGVkKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIFxuICAgIHZhciBnbCA9IHRoaXMuZ2w7XG4gICAgdmFyIGdsVGV4dHVyZSA9IHRoaXMuZ2xUZXh0dXJlc1t0ZXh0dXJlLnVpZF0vL3RleHR1cmUuX2dsVGV4dHVyZXNbZ2wuaWRdO1xuXG4gICAgaWYgKCFnbFRleHR1cmUpXG4gICAge1xuICAgICAgICBnbFRleHR1cmUgPSBuZXcgR0xUZXh0dXJlKGdsKTtcbiAgICAgICAgZ2xUZXh0dXJlLnByZW11bHRpcGx5QWxwaGEgPSB0cnVlXG4gICAgICAgIHRleHR1cmUuX2dsVGV4dHVyZXNbZ2wuaWRdID0gZ2xUZXh0dXJlO1xuXG4gICAgICAgLy8gdGhpcy5nbFRleHR1cmVzW3RleHR1cmUudWlkXSA9IGdsVGV4dHVyZTtcblxuICAgICAgICB0ZXh0dXJlLm9uKCd1cGRhdGUnLCB0aGlzLnVwZGF0ZVRleHR1cmUsIHRoaXMpO1xuICAgICAgICB0ZXh0dXJlLm9uKCdkaXNwb3NlJywgdGhpcy5kZXN0cm95VGV4dHVyZSwgdGhpcyk7XG4gICAgICAgIFxuICAgICAgICB0aGlzLl9tYW5hZ2VkVGV4dHVyZXMucHVzaCh0ZXh0dXJlKTtcbiAgICB9XG5cbiAgICBnbFRleHR1cmUudXBsb2FkKHRleHR1cmUuc291cmNlKTtcbiAgICBcbiAgICAvL1RPRE8gY2hlY2sgaXMgcG93ZXIgb2YgdHdvLi5cbiAgICBnbFRleHR1cmUuZW5hYmxlV3JhcENsYW1wKCk7XG5cblxuICAgIC8vIFRPRE8gY2hlY2sgZm9yIHNjYWxpbmcgdHlwZVxuICAgIGdsVGV4dHVyZS5lbmFibGVMaW5lYXJTY2FsaW5nKCk7XG5cbiAgICByZXR1cm4gIHRleHR1cmUuX2dsVGV4dHVyZXNbZ2wuaWRdO1xufVxuXG4vKipcbiAqIERlbGV0ZXMgdGhlIHRleHR1cmUgZnJvbSBXZWJHTFxuICpcbiAqIEBwYXJhbSB0ZXh0dXJlIHtQSVhJLkJhc2VUZXh0dXJlfFBJWEkuVGV4dHVyZX0gdGhlIHRleHR1cmUgdG8gZGVzdHJveVxuICovXG5UZXh0dXJlTWFuYWdlci5wcm90b3R5cGUuZGVzdHJveVRleHR1cmUgPSBmdW5jdGlvbih0ZXh0dXJlLCBfc2tpcFJlbW92ZSlcbntcblx0dGV4dHVyZSA9IHRleHR1cmUuYmFzZVRleHR1cmUgfHwgdGV4dHVyZTtcblxuICAgIGlmICghdGV4dHVyZS5oYXNMb2FkZWQpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHRleHR1cmUuX2dsVGV4dHVyZXNbdGhpcy5nbC5pZF0pXG4gICAge1xuICAgICAgICB0ZXh0dXJlLl9nbFRleHR1cmVzW3RoaXMuZ2wuaWRdLmRlc3Ryb3koKTtcbiAgICAgICAgdGV4dHVyZS5vZmYoJ3VwZGF0ZScsIHRoaXMudXBkYXRlVGV4dHVyZSwgdGhpcyk7XG4gICAgICAgIHRleHR1cmUub2ZmKCdkaXNwb3NlJywgdGhpcy5kZXN0cm95VGV4dHVyZSwgdGhpcyk7XG5cblxuICAgICAgICBkZWxldGUgdGV4dHVyZS5fZ2xUZXh0dXJlc1t0aGlzLmdsLmlkXTtcblxuICAgICAgICBpZiAoIV9za2lwUmVtb3ZlKVxuICAgICAgICB7XG4gICAgICAgICAgICB2YXIgaSA9IHRoaXMuX21hbmFnZWRUZXh0dXJlcy5pbmRleE9mKHRleHR1cmUpO1xuICAgICAgICAgICAgaWYgKGkgIT09IC0xKSB7XG4gICAgICAgICAgICAgICAgdXRpbHMucmVtb3ZlSXRlbXModGhpcy5fbWFuYWdlZFRleHR1cmVzLCBpLCAxKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn1cblxuVGV4dHVyZU1hbmFnZXIucHJvdG90eXBlLnJlbW92ZUFsbCA9IGZ1bmN0aW9uKClcbntcblx0Ly8gZW1wdHkgYWxsIHRoZSBvbGQgZ2wgdGV4dHVyZXMgYXMgdGhleSBhcmUgdXNlbGVzcyBub3dcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuX21hbmFnZWRUZXh0dXJlcy5sZW5ndGg7ICsraSlcbiAgICB7XG4gICAgICAgIHZhciB0ZXh0dXJlID0gdGhpcy5fbWFuYWdlZFRleHR1cmVzW2ldO1xuICAgICAgICBpZiAodGV4dHVyZS5fZ2xUZXh0dXJlc1t0aGlzLmdsLmlkXSlcbiAgICAgICAge1xuICAgICAgICAgICAgZGVsZXRlIHRleHR1cmUuX2dsVGV4dHVyZXNbdGhpcy5nbC5pZF07XG4gICAgICAgIH1cbiAgICB9XG59XG5cblRleHR1cmVNYW5hZ2VyLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24oKVxue1xuICAgIC8vIGRlc3Ryb3kgbWFuYWdlZCB0ZXh0dXJlc1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5fbWFuYWdlZFRleHR1cmVzLmxlbmd0aDsgKytpKVxuICAgIHtcbiAgICAgICAgdmFyIHRleHR1cmUgPSB0aGlzLl9tYW5hZ2VkVGV4dHVyZXNbaV07XG4gICAgICAgIHRoaXMuZGVzdHJveVRleHR1cmUodGV4dHVyZSwgdHJ1ZSk7XG4gICAgICAgIHRleHR1cmUub2ZmKCd1cGRhdGUnLCB0aGlzLnVwZGF0ZVRleHR1cmUsIHRoaXMpO1xuICAgICAgICB0ZXh0dXJlLm9mZignZGlzcG9zZScsIHRoaXMuZGVzdHJveVRleHR1cmUsIHRoaXMpO1xuICAgIH1cblxuICAgIHRoaXMuX21hbmFnZWRUZXh0dXJlcyA9IG51bGw7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gVGV4dHVyZU1hbmFnZXI7XG5cbiIsInZhciBTeXN0ZW1SZW5kZXJlciA9IHJlcXVpcmUoJy4uL1N5c3RlbVJlbmRlcmVyJyksXG4gICAgU2hhZGVyTWFuYWdlciA9IHJlcXVpcmUoJy4vbWFuYWdlcnMvU2hhZGVyTWFuYWdlcicpLFxuICAgIE1hc2tNYW5hZ2VyID0gcmVxdWlyZSgnLi9tYW5hZ2Vycy9NYXNrTWFuYWdlcicpLFxuICAgIFN0ZW5jaWxNYW5hZ2VyID0gcmVxdWlyZSgnLi9tYW5hZ2Vycy9TdGVuY2lsTWFuYWdlcicpLFxuICAgIEZpbHRlck1hbmFnZXIgPSByZXF1aXJlKCcuL21hbmFnZXJzL0ZpbHRlck1hbmFnZXInKSxcbiAgICBCbGVuZE1vZGVNYW5hZ2VyID0gcmVxdWlyZSgnLi9tYW5hZ2Vycy9CbGVuZE1vZGVNYW5hZ2VyJyksXG4gICAgUmVuZGVyVGFyZ2V0ID0gcmVxdWlyZSgnLi91dGlscy9SZW5kZXJUYXJnZXQnKSxcbiAgICBPYmplY3RSZW5kZXJlciA9IHJlcXVpcmUoJy4vdXRpbHMvT2JqZWN0UmVuZGVyZXInKSxcbiAgICBGWEFBRmlsdGVyID0gcmVxdWlyZSgnLi9maWx0ZXJzL0ZYQUFGaWx0ZXInKSxcbiAgICBUZXh0dXJlTWFuYWdlciA9IHJlcXVpcmUoJy4vVGV4dHVyZU1hbmFnZXInKSxcbiAgICBjcmVhdGVDb250ZXh0ID0gcmVxdWlyZSgncGl4aS1nbC1jb3JlJykuY3JlYXRlQ29udGV4dCxcbiAgICBtYXBXZWJHTEJsZW5kTW9kZXNUb1BpeGkgPSByZXF1aXJlKCcuL3V0aWxzL21hcFdlYkdMQmxlbmRNb2Rlc1RvUGl4aScpLFxuICAgIG1hcFdlYkdMRHJhd01vZGVzVG9QaXhpID0gcmVxdWlyZSgnLi91dGlscy9tYXBXZWJHTERyYXdNb2Rlc1RvUGl4aScpLFxuICAgIHV0aWxzID0gcmVxdWlyZSgnLi4vLi4vdXRpbHMnKSxcbiAgICBDT05TVCA9IHJlcXVpcmUoJy4uLy4uL2NvbnN0Jyk7XG5cbi8qKlxuICogVGhlIFdlYkdMUmVuZGVyZXIgZHJhd3MgdGhlIHNjZW5lIGFuZCBhbGwgaXRzIGNvbnRlbnQgb250byBhIHdlYkdMIGVuYWJsZWQgY2FudmFzLiBUaGlzIHJlbmRlcmVyXG4gKiBzaG91bGQgYmUgdXNlZCBmb3IgYnJvd3NlcnMgdGhhdCBzdXBwb3J0IHdlYkdMLiBUaGlzIFJlbmRlciB3b3JrcyBieSBhdXRvbWF0aWNhbGx5IG1hbmFnaW5nIHdlYkdMQmF0Y2hzLlxuICogU28gbm8gbmVlZCBmb3IgU3ByaXRlIEJhdGNoZXMgb3IgU3ByaXRlIENsb3Vkcy5cbiAqIERvbid0IGZvcmdldCB0byBhZGQgdGhlIHZpZXcgdG8geW91ciBET00gb3IgeW91IHdpbGwgbm90IHNlZSBhbnl0aGluZyA6KVxuICpcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqIEBleHRlbmRzIFBJWEkuU3lzdGVtUmVuZGVyZXJcbiAqIEBwYXJhbSBbd2lkdGg9MF0ge251bWJlcn0gdGhlIHdpZHRoIG9mIHRoZSBjYW52YXMgdmlld1xuICogQHBhcmFtIFtoZWlnaHQ9MF0ge251bWJlcn0gdGhlIGhlaWdodCBvZiB0aGUgY2FudmFzIHZpZXdcbiAqIEBwYXJhbSBbb3B0aW9uc10ge29iamVjdH0gVGhlIG9wdGlvbmFsIHJlbmRlcmVyIHBhcmFtZXRlcnNcbiAqIEBwYXJhbSBbb3B0aW9ucy52aWV3XSB7SFRNTENhbnZhc0VsZW1lbnR9IHRoZSBjYW52YXMgdG8gdXNlIGFzIGEgdmlldywgb3B0aW9uYWxcbiAqIEBwYXJhbSBbb3B0aW9ucy50cmFuc3BhcmVudD1mYWxzZV0ge2Jvb2xlYW59IElmIHRoZSByZW5kZXIgdmlldyBpcyB0cmFuc3BhcmVudCwgZGVmYXVsdCBmYWxzZVxuICogQHBhcmFtIFtvcHRpb25zLmF1dG9SZXNpemU9ZmFsc2VdIHtib29sZWFufSBJZiB0aGUgcmVuZGVyIHZpZXcgaXMgYXV0b21hdGljYWxseSByZXNpemVkLCBkZWZhdWx0IGZhbHNlXG4gKiBAcGFyYW0gW29wdGlvbnMuYW50aWFsaWFzPWZhbHNlXSB7Ym9vbGVhbn0gc2V0cyBhbnRpYWxpYXMuIElmIG5vdCBhdmFpbGFibGUgbmF0aXZlbHkgdGhlbiBGWEFBIGFudGlhbGlhc2luZyBpcyB1c2VkXG4gKiBAcGFyYW0gW29wdGlvbnMuZm9yY2VGWEFBPWZhbHNlXSB7Ym9vbGVhbn0gZm9yY2VzIEZYQUEgYW50aWFsaWFzaW5nIHRvIGJlIHVzZWQgb3ZlciBuYXRpdmUuIEZYQUEgaXMgZmFzdGVyLCBidXQgbWF5IG5vdCBhbHdheXMgbG9vayBhcyBncmVhdFxuICogQHBhcmFtIFtvcHRpb25zLnJlc29sdXRpb249MV0ge251bWJlcn0gdGhlIHJlc29sdXRpb24gb2YgdGhlIHJlbmRlcmVyIHJldGluYSB3b3VsZCBiZSAyXG4gKiBAcGFyYW0gW29wdGlvbnMuY2xlYXJCZWZvcmVSZW5kZXI9dHJ1ZV0ge2Jvb2xlYW59IFRoaXMgc2V0cyBpZiB0aGUgQ2FudmFzUmVuZGVyZXIgd2lsbCBjbGVhciB0aGUgY2FudmFzIG9yXG4gKiAgICAgIG5vdCBiZWZvcmUgdGhlIG5ldyByZW5kZXIgcGFzcy4gSWYgeW91IHdpc2ggdG8gc2V0IHRoaXMgdG8gZmFsc2UsIHlvdSAqbXVzdCogc2V0IHByZXNlcnZlRHJhd2luZ0J1ZmZlciB0byBgdHJ1ZWAuXG4gKiBAcGFyYW0gW29wdGlvbnMucHJlc2VydmVEcmF3aW5nQnVmZmVyPWZhbHNlXSB7Ym9vbGVhbn0gZW5hYmxlcyBkcmF3aW5nIGJ1ZmZlciBwcmVzZXJ2YXRpb24sIGVuYWJsZSB0aGlzIGlmXG4gKiAgICAgIHlvdSBuZWVkIHRvIGNhbGwgdG9EYXRhVXJsIG9uIHRoZSB3ZWJnbCBjb250ZXh0LlxuICogQHBhcmFtIFtvcHRpb25zLnJvdW5kUGl4ZWxzPWZhbHNlXSB7Ym9vbGVhbn0gSWYgdHJ1ZSBQaXhpIHdpbGwgTWF0aC5mbG9vcigpIHgveSB2YWx1ZXMgd2hlbiByZW5kZXJpbmcsIHN0b3BwaW5nIHBpeGVsIGludGVycG9sYXRpb24uXG4gKi9cbmZ1bmN0aW9uIFdlYkdMUmVuZGVyZXIod2lkdGgsIGhlaWdodCwgb3B0aW9ucylcbntcbiAgICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcblxuICAgIFN5c3RlbVJlbmRlcmVyLmNhbGwodGhpcywgJ1dlYkdMJywgd2lkdGgsIGhlaWdodCwgb3B0aW9ucyk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgdHlwZSBvZiB0aGlzIHJlbmRlcmVyIGFzIGEgc3RhbmRhcmRpc2VkIGNvbnN0XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9Ly9cbiAgICAgKlxuICAgICAqL1xuICAgIHRoaXMudHlwZSA9IENPTlNULlJFTkRFUkVSX1RZUEUuV0VCR0w7XG5cbiAgICB0aGlzLmhhbmRsZUNvbnRleHRMb3N0ID0gdGhpcy5oYW5kbGVDb250ZXh0TG9zdC5iaW5kKHRoaXMpO1xuICAgIHRoaXMuaGFuZGxlQ29udGV4dFJlc3RvcmVkID0gdGhpcy5oYW5kbGVDb250ZXh0UmVzdG9yZWQuYmluZCh0aGlzKTtcblxuICAgIHRoaXMudmlldy5hZGRFdmVudExpc3RlbmVyKCd3ZWJnbGNvbnRleHRsb3N0JywgdGhpcy5oYW5kbGVDb250ZXh0TG9zdCwgZmFsc2UpO1xuICAgIHRoaXMudmlldy5hZGRFdmVudExpc3RlbmVyKCd3ZWJnbGNvbnRleHRyZXN0b3JlZCcsIHRoaXMuaGFuZGxlQ29udGV4dFJlc3RvcmVkLCBmYWxzZSk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgb3B0aW9ucyBwYXNzZWQgaW4gdG8gY3JlYXRlIGEgbmV3IHdlYmdsIGNvbnRleHQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtvYmplY3R9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9jb250ZXh0T3B0aW9ucyA9IHtcbiAgICAgICAgYWxwaGE6IHRoaXMudHJhbnNwYXJlbnQsXG4gICAgICAgIGFudGlhbGlhczogb3B0aW9ucy5hbnRpYWxpYXMsXG4gICAgICAgIHByZW11bHRpcGxpZWRBbHBoYTogdGhpcy50cmFuc3BhcmVudCAmJiB0aGlzLnRyYW5zcGFyZW50ICE9PSAnbm90TXVsdGlwbGllZCcsXG4gICAgICAgIHN0ZW5jaWw6IHRydWUsXG4gICAgICAgIHByZXNlcnZlRHJhd2luZ0J1ZmZlcjogb3B0aW9ucy5wcmVzZXJ2ZURyYXdpbmdCdWZmZXJcbiAgICB9O1xuXG4gICAgdGhpcy5fYmFja2dyb3VuZENvbG9yUmdiYVszXSA9IHRoaXMudHJhbnNwYXJlbnQgPyAwIDogMTtcblxuICAgIC8qKlxuICAgICAqIERlYWxzIHdpdGggbWFuYWdpbmcgdGhlIHNoYWRlciBwcm9ncmFtcyBhbmQgdGhlaXIgYXR0cmlicy5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuU2hhZGVyTWFuYWdlcn1cbiAgICAgKi9cbiAgICB0aGlzLnNoYWRlck1hbmFnZXIgPSBuZXcgU2hhZGVyTWFuYWdlcih0aGlzKTtcblxuICAgIC8qKlxuICAgICAqIE1hbmFnZXMgdGhlIG1hc2tzIHVzaW5nIHRoZSBzdGVuY2lsIGJ1ZmZlci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuTWFza01hbmFnZXJ9XG4gICAgICovXG4gICAgdGhpcy5tYXNrTWFuYWdlciA9IG5ldyBNYXNrTWFuYWdlcih0aGlzKTtcblxuICAgIC8qKlxuICAgICAqIE1hbmFnZXMgdGhlIHN0ZW5jaWwgYnVmZmVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5TdGVuY2lsTWFuYWdlcn1cbiAgICAgKi9cbiAgICB0aGlzLnN0ZW5jaWxNYW5hZ2VyID0gbmV3IFN0ZW5jaWxNYW5hZ2VyKHRoaXMpO1xuXG4gICAgLyoqXG4gICAgICogTWFuYWdlcyB0aGUgZmlsdGVycy5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuRmlsdGVyTWFuYWdlcn1cbiAgICAgKi9cbiAgICB0aGlzLmZpbHRlck1hbmFnZXIgPSBuZXcgRmlsdGVyTWFuYWdlcih0aGlzKTtcblxuICAgIC8qKlxuICAgICAqIE1hbmFnZXMgdGhlIGJsZW5kTW9kZXNcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuQmxlbmRNb2RlTWFuYWdlcn1cbiAgICAgKi9cbiAgICB0aGlzLmJsZW5kTW9kZU1hbmFnZXIgPSBuZXcgQmxlbmRNb2RlTWFuYWdlcih0aGlzKTtcblxuICAgIFxuICAgIC8qKlxuICAgICAqIFRoZSBjdXJyZW50bHkgYWN0aXZlIE9iamVjdFJlbmRlcmVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5PYmplY3RSZW5kZXJlcn1cbiAgICAgKi9cbiAgICB0aGlzLmN1cnJlbnRSZW5kZXJlciA9IG5ldyBPYmplY3RSZW5kZXJlcih0aGlzKTtcblxuICAgIHRoaXMuaW5pdFBsdWdpbnMoKTtcblxuICAgIC8vIGluaXRpYWxpemUgdGhlIGNvbnRleHQgc28gaXQgaXMgcmVhZHkgZm9yIHRoZSBtYW5hZ2Vycy5cbiAgICB0aGlzLmdsID0gY3JlYXRlQ29udGV4dCh0aGlzLnZpZXcsIHRoaXMuX2NvbnRleHRPcHRpb25zKTtcblxuICAgIHRoaXMuX2luaXRDb250ZXh0KCk7XG5cbiAgICAvLyBtYXAgc29tZSB3ZWJHTCBibGVuZCBhbmQgZHJhd21vZGVzLi5cbiAgICB0aGlzLmJsZW5kTW9kZXMgPSBtYXBXZWJHTEJsZW5kTW9kZXNUb1BpeGkoZ2wpO1xuICAgIHRoaXMuZHJhd01vZGVzID0gbWFwV2ViR0xEcmF3TW9kZXNUb1BpeGkoZ2wpXG5cbiAgICB0aGlzLl9hY3RpdmVTaGFkZXIgPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogSG9sZHMgdGhlIGN1cnJlbnQgcmVuZGVyIHRhcmdldFxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5SZW5kZXJUYXJnZXR9XG4gICAgICovXG4gICAgdGhpcy5fYWN0aXZlUmVuZGVyVGFyZ2V0ID0gbnVsbDtcbiAgICB0aGlzLl9hY3RpdmVUZXh0dXJlTG9jYXRpb24gPSBudWxsO1xuICAgIHRoaXMuX2FjdGl2ZVRleHR1cmUgPSBudWxsO1xufVxuXG4vLyBjb25zdHJ1Y3RvclxuV2ViR0xSZW5kZXJlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFN5c3RlbVJlbmRlcmVyLnByb3RvdHlwZSk7XG5XZWJHTFJlbmRlcmVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFdlYkdMUmVuZGVyZXI7XG5tb2R1bGUuZXhwb3J0cyA9IFdlYkdMUmVuZGVyZXI7XG51dGlscy5wbHVnaW5UYXJnZXQubWl4aW4oV2ViR0xSZW5kZXJlcik7XG5cbi8qKlxuICogQ3JlYXRlcyB0aGUgV2ViR0wgY29udGV4dFxuICpcbiAqIEBwcml2YXRlXG4gKi9cbldlYkdMUmVuZGVyZXIucHJvdG90eXBlLl9pbml0Q29udGV4dCA9IGZ1bmN0aW9uICgpXG57XG4gICAgdmFyIGdsID0gdGhpcy5nbDtcblxuICAgIC8vIGNyZWF0ZSBhIHRleHR1cmUgbWFuYWdlci4uLlxuICAgIHRoaXMudGV4dHVyZU1hbmFnZXIgPSBuZXcgVGV4dHVyZU1hbmFnZXIoZ2wpO1xuXG4gICAgLy8gc2V0IHVwIHRoZSBkZWZhdWx0IHBpeGkgc2V0dGluZ3MuLlxuICAgIGdsLmRpc2FibGUoZ2wuREVQVEhfVEVTVCk7XG4gICAgZ2wuZGlzYWJsZShnbC5DVUxMX0ZBQ0UpO1xuICAgIGdsLmVuYWJsZShnbC5CTEVORCk7XG5cblxuICAgIHRoaXMucm9vdFJlbmRlclRhcmdldCA9IG5ldyBSZW5kZXJUYXJnZXQoZ2wsIHRoaXMud2lkdGgsIHRoaXMuaGVpZ2h0LCBudWxsLCB0aGlzLnJlc29sdXRpb24sIHRydWUpO1xuICAgIHRoaXMucm9vdFJlbmRlclRhcmdldC5jbGVhckNvbG9yID0gdGhpcy5fYmFja2dyb3VuZENvbG9yUmdiYTtcbiAgICBcbiAgICB0aGlzLmJpbmRSZW5kZXJUYXJnZXQodGhpcy5yb290UmVuZGVyVGFyZ2V0KTtcblxuICAgIHRoaXMuZW1pdCgnY29udGV4dCcsIGdsKTtcblxuICAgIC8vIHNldHVwIHRoZSB3aWR0aC9oZWlnaHQgcHJvcGVydGllcyBhbmQgZ2wgdmlld3BvcnRcbiAgICB0aGlzLnJlc2l6ZSh0aGlzLndpZHRoLCB0aGlzLmhlaWdodCk7ICAgIFxufTtcblxuLyoqXG4gKiBSZW5kZXJzIHRoZSBvYmplY3QgdG8gaXRzIHdlYkdMIHZpZXdcbiAqXG4gKiBAcGFyYW0gb2JqZWN0IHtQSVhJLkRpc3BsYXlPYmplY3R9IHRoZSBvYmplY3QgdG8gYmUgcmVuZGVyZWRcbiAqL1xuV2ViR0xSZW5kZXJlci5wcm90b3R5cGUucmVuZGVyID0gZnVuY3Rpb24gKGRpc3BsYXlPYmplY3QpXG57XG4gICAgdGhpcy5lbWl0KCdwcmVyZW5kZXInKTtcblxuICAgIC8vIG5vIHBvaW50IHJlbmRlcmluZyBpZiBvdXIgY29udGV4dCBoYXMgYmVlbiBibG93biB1cCFcbiAgICBpZiAodGhpcy5nbC5pc0NvbnRleHRMb3N0KCkpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5fbGFzdE9iamVjdFJlbmRlcmVkID0gZGlzcGxheU9iamVjdDtcblxuICAgIHZhciBjYWNoZVBhcmVudCA9IGRpc3BsYXlPYmplY3QucGFyZW50O1xuICAgIGRpc3BsYXlPYmplY3QucGFyZW50ID0gdGhpcy5fdGVtcERpc3BsYXlPYmplY3RQYXJlbnQ7XG4gICAgLy8gdXBkYXRlIHRoZSBzY2VuZSBncmFwaFxuICAgIGRpc3BsYXlPYmplY3QudXBkYXRlVHJhbnNmb3JtKCk7XG4gICAgZGlzcGxheU9iamVjdC5wYXJlbnQgPSBjYWNoZVBhcmVudDtcblxuICAgIHRoaXMucmVuZGVyRGlzcGxheU9iamVjdChkaXNwbGF5T2JqZWN0LCB0aGlzLnJvb3RSZW5kZXJUYXJnZXQsIHRoaXMuY2xlYXJCZWZvcmVSZW5kZXIpOy8vdGhpcy5wcm9qZWN0aW9uKTtcblxuICAgIHRoaXMuZW1pdCgncG9zdHJlbmRlcicpO1xufTtcblxuLyoqXG4gKiBSZW5kZXJzIGEgRGlzcGxheSBPYmplY3QuXG4gKlxuICogQHBhcmFtIGRpc3BsYXlPYmplY3Qge1BJWEkuRGlzcGxheU9iamVjdH0gVGhlIERpc3BsYXlPYmplY3QgdG8gcmVuZGVyXG4gKiBAcGFyYW0gcmVuZGVyVGFyZ2V0IHtQSVhJLlJlbmRlclRhcmdldH0gVGhlIHJlbmRlciB0YXJnZXQgdG8gdXNlIHRvIHJlbmRlciB0aGlzIGRpc3BsYXkgb2JqZWN0XG4gKlxuICovXG5XZWJHTFJlbmRlcmVyLnByb3RvdHlwZS5yZW5kZXJEaXNwbGF5T2JqZWN0ID0gZnVuY3Rpb24gKGRpc3BsYXlPYmplY3QsIHJlbmRlclRhcmdldCwgY2xlYXIpLy9wcm9qZWN0aW9uLCBidWZmZXIpXG57XG4gICAgdGhpcy5iaW5kUmVuZGVyVGFyZ2V0KHJlbmRlclRhcmdldCk7XG5cbiAgICBpZihjbGVhcilcbiAgICB7XG4gICAgICAgIHJlbmRlclRhcmdldC5jbGVhcigpO1xuICAgIH1cblxuICAgIC8vIHN0YXJ0IHRoZSBmaWx0ZXIgbWFuYWdlclxuICAgIHRoaXMuZmlsdGVyTWFuYWdlci5zZXRGaWx0ZXJTdGFjayggcmVuZGVyVGFyZ2V0LmZpbHRlclN0YWNrICk7XG5cbiAgICAvLyByZW5kZXIgdGhlIHNjZW5lIVxuICAgIGRpc3BsYXlPYmplY3QucmVuZGVyV2ViR0wodGhpcyk7XG5cbiAgICAvLyBmaW5pc2ggdGhlIGN1cnJlbnQgcmVuZGVyZXIuLlxuICAgIHRoaXMuY3VycmVudFJlbmRlcmVyLmZsdXNoKCk7XG59O1xuXG4vKipcbiAqIENoYW5nZXMgdGhlIGN1cnJlbnQgcmVuZGVyZXIgdG8gdGhlIG9uZSBnaXZlbiBpbiBwYXJhbWV0ZXJcbiAqXG4gKiBAcGFyYW0gb2JqZWN0UmVuZGVyZXIge1BJWEkuT2JqZWN0UmVuZGVyZXJ9IFRoZSBvYmplY3QgcmVuZGVyZXIgdG8gdXNlLlxuICovXG5XZWJHTFJlbmRlcmVyLnByb3RvdHlwZS5zZXRPYmplY3RSZW5kZXJlciA9IGZ1bmN0aW9uIChvYmplY3RSZW5kZXJlcilcbntcbiAgICBpZiAodGhpcy5jdXJyZW50UmVuZGVyZXIgPT09IG9iamVjdFJlbmRlcmVyKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuY3VycmVudFJlbmRlcmVyLnN0b3AoKTtcbiAgICB0aGlzLmN1cnJlbnRSZW5kZXJlciA9IG9iamVjdFJlbmRlcmVyO1xuICAgIHRoaXMuY3VycmVudFJlbmRlcmVyLnN0YXJ0KCk7XG59O1xuXG4vKipcbiAqIFJlc2l6ZXMgdGhlIHdlYkdMIHZpZXcgdG8gdGhlIHNwZWNpZmllZCB3aWR0aCBhbmQgaGVpZ2h0LlxuICpcbiAqIEBwYXJhbSB3aWR0aCB7bnVtYmVyfSB0aGUgbmV3IHdpZHRoIG9mIHRoZSB3ZWJHTCB2aWV3XG4gKiBAcGFyYW0gaGVpZ2h0IHtudW1iZXJ9IHRoZSBuZXcgaGVpZ2h0IG9mIHRoZSB3ZWJHTCB2aWV3XG4gKi9cbldlYkdMUmVuZGVyZXIucHJvdG90eXBlLnJlc2l6ZSA9IGZ1bmN0aW9uICh3aWR0aCwgaGVpZ2h0KVxue1xuICAgIFN5c3RlbVJlbmRlcmVyLnByb3RvdHlwZS5yZXNpemUuY2FsbCh0aGlzLCB3aWR0aCwgaGVpZ2h0KTtcblxuICAgIHRoaXMuZmlsdGVyTWFuYWdlci5yZXNpemUod2lkdGgsIGhlaWdodCk7XG4gICAgdGhpcy5yb290UmVuZGVyVGFyZ2V0LnJlc2l6ZSh3aWR0aCwgaGVpZ2h0KTtcblxuICAgIGlmKHRoaXMuY3VycmVudFJlbmRlclRhcmdldCA9PT0gdGhpcy5yZW5kZXJUYXJnZXQpXG4gICAge1xuICAgICAgICB0aGlzLnJvb3RSZW5kZXJUYXJnZXQuYWN0aXZhdGUoKTtcbiAgICB9XG59O1xuXG4vKipcbiAqIENoYW5nZXMgdGhlIGN1cnJlbnQgcmVuZGVyIHRhcmdldCB0byB0aGUgb25lIGdpdmVuIGluIHBhcmFtZXRlclxuICpcbiAqIEBwYXJhbSByZW5kZXJUYXJnZXQge1BJWEkuUmVuZGVyVGFyZ2V0fSB0aGUgbmV3IHJlbmRlciB0YXJnZXRcbiAqL1xuV2ViR0xSZW5kZXJlci5wcm90b3R5cGUuYmluZFJlbmRlclRhcmdldCA9IGZ1bmN0aW9uIChyZW5kZXJUYXJnZXQpLy9wcm9qZWN0aW9uLCBidWZmZXIpXG57XG4gICAgaWYocmVuZGVyVGFyZ2V0ICE9PSB0aGlzLl9hY3RpdmVSZW5kZXJUYXJnZXQpXG4gICAge1xuICAgICAgICB0aGlzLl9hY3RpdmVSZW5kZXJUYXJnZXQgPSByZW5kZXJUYXJnZXQ7XG5cbiAgICAgICAgaWYodGhpcy5fYWN0aXZlU2hhZGVyKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLl9hY3RpdmVTaGFkZXIudW5pZm9ybXMucHJvamVjdGlvbk1hdHJpeCA9IHJlbmRlclRhcmdldC5wcm9qZWN0aW9uTWF0cml4LnRvQXJyYXkodHJ1ZSk7XG4gICAgICAgIH1cblxuICAgICAgICByZW5kZXJUYXJnZXQuYWN0aXZhdGUoKTtcblxuICAgICAgICB0aGlzLnN0ZW5jaWxNYW5hZ2VyLnNldE1hc2tTdGFjayggcmVuZGVyVGFyZ2V0LnN0ZW5jaWxNYXNrU3RhY2sgKTtcbiAgICB9XG59XG5cbldlYkdMUmVuZGVyZXIucHJvdG90eXBlLmJpbmRTaGFkZXIgPSBmdW5jdGlvbiAoc2hhZGVyKS8vcHJvamVjdGlvbiwgYnVmZmVyKVxue1xuICAgIC8vVE9ETyBjYWNoZVxuICAgIGlmKHRoaXMuX2FjdGl2ZVNoYWRlciAhPT0gc2hhZGVyKVxuICAgIHtcbiAgICAgICAgdGhpcy5fYWN0aXZlU2hhZGVyID0gc2hhZGVyO1xuICAgICAgICBzaGFkZXIuYmluZCgpO1xuXG4gICAgICAgIC8vIGF1dG9tYXRpY2FsbHkgc2V0IHRoZSBwcm9qZWN0aW9uIG1hdHJpeFxuICAgICAgICBzaGFkZXIudW5pZm9ybXMucHJvamVjdGlvbk1hdHJpeCA9IHRoaXMuX2FjdGl2ZVJlbmRlclRhcmdldC5wcm9qZWN0aW9uTWF0cml4LnRvQXJyYXkodHJ1ZSk7XG4gICAgfVxufVxuXG5cbldlYkdMUmVuZGVyZXIucHJvdG90eXBlLmJpbmRUZXh0dXJlID0gZnVuY3Rpb24gKHRleHR1cmUsIGxvY2F0aW9uKVxue1xuICAgIHZhciBnbCA9IHRoaXMuZ2w7XG5cbiAgICAvL1RPRE8gdGVzdCBwZXJmIG9mIGNhY2hlP1xuICAgIGxvY2F0aW9uID0gbG9jYXRpb24gfHwgMDtcblxuICAgIGlmKHRoaXMuX2FjdGl2ZVRleHR1cmVMb2NhdGlvbiAhPT0gbG9jYXRpb24pLy9cbiAgICB7XG4gICAgICAgIHRoaXMuX2FjdGl2ZVRleHR1cmVMb2NhdGlvbiA9IGxvY2F0aW9uXG4gICAgICAgIGdsLmFjdGl2ZVRleHR1cmUoZ2wuVEVYVFVSRTAgKyBsb2NhdGlvbiApO1xuICAgIH1cblxuICAgIC8vVE9ETyAtIGNhbiB3ZSBjYWNoZSB0aGlzIHRleHR1cmUgdG9vP1xuICAgIHRoaXMuX2FjdGl2ZVRleHR1cmUgPSB0ZXh0dXJlOyAgICAgIFxuICAgIFxuICAgIGlmICghdGV4dHVyZS5fZ2xUZXh0dXJlc1tnbC5pZF0pXG4gICAge1xuICAgICAgICAvLyB0aGlzIHdpbGwgYWxzbyBiaW5kIHRoZSB0ZXh0dXJlLi5cbiAgICAgICAgdGhpcy50ZXh0dXJlTWFuYWdlci51cGRhdGVUZXh0dXJlKHRleHR1cmUpO1xuICAgIH1cbiAgICBlbHNlXG4gICAgeyAgIFxuICAgICAgICAvLyBiaW5kIHRoZSBjdXJyZW50IHRleHR1cmVcbiAgICAgICAgdGV4dHVyZS5fZ2xUZXh0dXJlc1tnbC5pZF0uYmluZCgpO1xuICAgIH1cbn1cblxuXG4vKipcbiAqIEhhbmRsZXMgYSBsb3N0IHdlYmdsIGNvbnRleHRcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5XZWJHTFJlbmRlcmVyLnByb3RvdHlwZS5oYW5kbGVDb250ZXh0TG9zdCA9IGZ1bmN0aW9uIChldmVudClcbntcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xufTtcblxuLyoqXG4gKiBIYW5kbGVzIGEgcmVzdG9yZWQgd2ViZ2wgY29udGV4dFxuICpcbiAqIEBwcml2YXRlXG4gKi9cbldlYkdMUmVuZGVyZXIucHJvdG90eXBlLmhhbmRsZUNvbnRleHRSZXN0b3JlZCA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy5faW5pdENvbnRleHQoKTtcbiAgICB0aGlzLnRleHR1cmVNYW5hZ2VyLnJlbW92ZUFsbCgpO1xufTtcblxuLyoqXG4gKiBSZW1vdmVzIGV2ZXJ5dGhpbmcgZnJvbSB0aGUgcmVuZGVyZXIgKGV2ZW50IGxpc3RlbmVycywgc3ByaXRlYmF0Y2gsIGV0Yy4uLilcbiAqXG4gKiBAcGFyYW0gW3JlbW92ZVZpZXc9ZmFsc2VdIHtib29sZWFufSBSZW1vdmVzIHRoZSBDYW52YXMgZWxlbWVudCBmcm9tIHRoZSBET00uXG4gKi9cbldlYkdMUmVuZGVyZXIucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAocmVtb3ZlVmlldylcbntcbiAgICB0aGlzLmRlc3Ryb3lQbHVnaW5zKCk7XG5cbiAgICAvLyByZW1vdmUgbGlzdGVuZXJzXG4gICAgdGhpcy52aWV3LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3dlYmdsY29udGV4dGxvc3QnLCB0aGlzLmhhbmRsZUNvbnRleHRMb3N0KTtcbiAgICB0aGlzLnZpZXcucmVtb3ZlRXZlbnRMaXN0ZW5lcignd2ViZ2xjb250ZXh0cmVzdG9yZWQnLCB0aGlzLmhhbmRsZUNvbnRleHRSZXN0b3JlZCk7XG5cbiAgICB0aGlzLnRleHR1cmVNYW5hZ2VyLmRlc3Ryb3lBbGwoKTtcblxuICAgIC8vIGNhbGwgYmFzZSBkZXN0cm95XG4gICAgU3lzdGVtUmVuZGVyZXIucHJvdG90eXBlLmRlc3Ryb3kuY2FsbCh0aGlzLCByZW1vdmVWaWV3KTtcblxuICAgIHRoaXMudWlkID0gMDtcblxuICAgIC8vIGRlc3Ryb3kgdGhlIG1hbmFnZXJzXG4gICAgdGhpcy5zaGFkZXJNYW5hZ2VyLmRlc3Ryb3koKTtcbiAgICB0aGlzLm1hc2tNYW5hZ2VyLmRlc3Ryb3koKTtcbiAgICB0aGlzLnN0ZW5jaWxNYW5hZ2VyLmRlc3Ryb3koKTtcbiAgICB0aGlzLmZpbHRlck1hbmFnZXIuZGVzdHJveSgpO1xuICAgIHRoaXMuYmxlbmRNb2RlTWFuYWdlci5kZXN0cm95KCk7XG5cbiAgICB0aGlzLnNoYWRlck1hbmFnZXIgPSBudWxsO1xuICAgIHRoaXMubWFza01hbmFnZXIgPSBudWxsO1xuICAgIHRoaXMuZmlsdGVyTWFuYWdlciA9IG51bGw7XG4gICAgdGhpcy5ibGVuZE1vZGVNYW5hZ2VyID0gbnVsbDtcbiAgICB0aGlzLmN1cnJlbnRSZW5kZXJlciA9IG51bGw7XG5cbiAgICB0aGlzLmhhbmRsZUNvbnRleHRMb3N0ID0gbnVsbDtcbiAgICB0aGlzLmhhbmRsZUNvbnRleHRSZXN0b3JlZCA9IG51bGw7XG5cbiAgICB0aGlzLl9jb250ZXh0T3B0aW9ucyA9IG51bGw7XG5cbiAgICB0aGlzLmdsLnVzZVByb2dyYW0obnVsbCk7XG4gICAgdGhpcy5nbCA9IG51bGw7XG59O1xuXG4iLCJ2YXIgRGVmYXVsdFNoYWRlciA9IHJlcXVpcmUoJy4uL3NoYWRlcnMvVGV4dHVyZVNoYWRlcicpO1xuXG4vKipcbiAqIFRoaXMgaXMgdGhlIGJhc2UgY2xhc3MgZm9yIGNyZWF0aW5nIGEgUElYSSBmaWx0ZXIuIEN1cnJlbnRseSBvbmx5IFdlYkdMIHN1cHBvcnRzIGZpbHRlcnMuXG4gKiBJZiB5b3Ugd2FudCB0byBtYWtlIGEgY3VzdG9tIGZpbHRlciB0aGlzIHNob3VsZCBiZSB5b3VyIGJhc2UgY2xhc3MuXG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIHZlcnRleFNyYyB7c3RyaW5nfHN0cmluZ1tdfSBUaGUgdmVydGV4IHNoYWRlciBzb3VyY2UgYXMgYW4gYXJyYXkgb2Ygc3RyaW5ncy5cbiAqIEBwYXJhbSBmcmFnbWVudFNyYyB7c3RyaW5nfHN0cmluZ1tdfSBUaGUgZnJhZ21lbnQgc2hhZGVyIHNvdXJjZSBhcyBhbiBhcnJheSBvZiBzdHJpbmdzLlxuICogQHBhcmFtIHVuaWZvcm1zIHtvYmplY3R9IEFuIG9iamVjdCBjb250YWluaW5nIHRoZSB1bmlmb3JtcyBmb3IgdGhpcyBmaWx0ZXIuXG4gKi9cbmZ1bmN0aW9uIEFic3RyYWN0RmlsdGVyKHZlcnRleFNyYywgZnJhZ21lbnRTcmMsIHVuaWZvcm1zKVxue1xuXG4gICAgLyoqXG4gICAgICogQW4gYXJyYXkgb2Ygc2hhZGVyc1xuICAgICAqIEBtZW1iZXIge1BJWEkuU2hhZGVyW119XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLnNoYWRlcnMgPSBbXTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBleHRyYSBwYWRkaW5nIHRoYXQgdGhlIGZpbHRlciBtaWdodCBuZWVkXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMucGFkZGluZyA9IDA7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgdW5pZm9ybXMgYXMgYW4gb2JqZWN0XG4gICAgICogQG1lbWJlciB7b2JqZWN0fVxuICAgICAqL1xuICAgIHRoaXMudW5pZm9ybXMgPSB1bmlmb3JtcyB8fCB7fTtcblxuXG4gICAgLyoqXG4gICAgICogVGhlIGNvZGUgb2YgdGhlIHZlcnRleCBzaGFkZXJcbiAgICAgKiBAbWVtYmVyIHtzdHJpbmdbXX1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMudmVydGV4U3JjID0gdmVydGV4U3JjIHx8IERlZmF1bHRTaGFkZXIuZGVmYXVsdFZlcnRleFNyYztcblxuICAgIC8qKlxuICAgICAqIFRoZSBjb2RlIG9mIHRoZSBmcmFtZW50IHNoYWRlclxuICAgICAqIEBtZW1iZXIge3N0cmluZ1tdfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5mcmFnbWVudFNyYyA9IGZyYWdtZW50U3JjIHx8IERlZmF1bHRTaGFkZXIuZGVmYXVsdEZyYWdtZW50U3JjO1xuXG4gICAgLy9UT0RPIGEgcmVtaW5kZXIgLSB3b3VsZCBiZSBjb29sIHRvIGhhdmUgbG93ZXIgcmVzIGZpbHRlcnMgYXMgdGhpcyB3b3VsZCBnaXZlIGJldHRlciBwZXJmb3JtYW5jZS5cblxuICAgIC8vdHlwZW9mIGZyYWdtZW50U3JjID09PSAnc3RyaW5nJyA/IGZyYWdtZW50U3JjLnNwbGl0KCcnKSA6IChmcmFnbWVudFNyYyB8fCBbXSk7XG5cbn1cblxuQWJzdHJhY3RGaWx0ZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gQWJzdHJhY3RGaWx0ZXI7XG5tb2R1bGUuZXhwb3J0cyA9IEFic3RyYWN0RmlsdGVyO1xuXG4vKipcbiAqIEdyYWJzIGEgc2hhZGVyIGZyb20gdGhlIGN1cnJlbnQgcmVuZGVyZXJcbiAqXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcn0gVGhlIHJlbmRlcmVyIHRvIHJldHJpZXZlIHRoZSBzaGFkZXIgZnJvbVxuICovXG5BYnN0cmFjdEZpbHRlci5wcm90b3R5cGUuZ2V0U2hhZGVyID0gZnVuY3Rpb24gKHJlbmRlcmVyKVxue1xuICAgIHZhciBnbCA9IHJlbmRlcmVyLmdsO1xuXG4gICAgdmFyIHNoYWRlciA9IHRoaXMuc2hhZGVyc1tnbC5pZF07XG5cbiAgICBpZiAoIXNoYWRlcilcbiAgICB7XG4gICAgICAgIHNoYWRlciA9IG5ldyBEZWZhdWx0U2hhZGVyKHJlbmRlcmVyLnNoYWRlck1hbmFnZXIsXG4gICAgICAgICAgICB0aGlzLnZlcnRleFNyYyxcbiAgICAgICAgICAgIHRoaXMuZnJhZ21lbnRTcmMsXG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLFxuICAgICAgICAgICAgdGhpcy5hdHRyaWJ1dGVzXG4gICAgICAgICk7XG5cbiAgICAgICAgdGhpcy5zaGFkZXJzW2dsLmlkXSA9IHNoYWRlcjtcbiAgICB9XG5cbiAgICByZXR1cm4gc2hhZGVyO1xufTtcblxuLyoqXG4gKiBBcHBsaWVzIHRoZSBmaWx0ZXJcbiAqXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcn0gVGhlIHJlbmRlcmVyIHRvIHJldHJpZXZlIHRoZSBmaWx0ZXIgZnJvbVxuICogQHBhcmFtIGlucHV0IHtQSVhJLlJlbmRlclRhcmdldH1cbiAqIEBwYXJhbSBvdXRwdXQge1BJWEkuUmVuZGVyVGFyZ2V0fVxuICogQHBhcmFtIGNsZWFyIHtib29sZWFufSBXaGV0aGVyIG9yIG5vdCB3ZSB3YW50IHRvIGNsZWFyIHRoZSBvdXRwdXRUYXJnZXRcbiAqL1xuQWJzdHJhY3RGaWx0ZXIucHJvdG90eXBlLmFwcGx5RmlsdGVyID0gZnVuY3Rpb24gKHJlbmRlcmVyLCBpbnB1dCwgb3V0cHV0LCBjbGVhcilcbntcbiAgICB2YXIgc2hhZGVyID0gdGhpcy5nZXRTaGFkZXIocmVuZGVyZXIpO1xuXG4gICAgcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5hcHBseUZpbHRlcihzaGFkZXIsIGlucHV0LCBvdXRwdXQsIGNsZWFyKTtcbn07XG5cbi8qKlxuICogU3luY3MgYSB1bmlmb3JtIGJldHdlZW4gdGhlIGNsYXNzIG9iamVjdCBhbmQgdGhlIHNoYWRlcnMuXG4gKlxuICovXG5BYnN0cmFjdEZpbHRlci5wcm90b3R5cGUuc3luY1VuaWZvcm0gPSBmdW5jdGlvbiAodW5pZm9ybSlcbntcbiAgICBmb3IgKHZhciBpID0gMCwgaiA9IHRoaXMuc2hhZGVycy5sZW5ndGg7IGkgPCBqOyArK2kpXG4gICAge1xuICAgICAgICB0aGlzLnNoYWRlcnNbaV0uc3luY1VuaWZvcm0odW5pZm9ybSk7XG4gICAgfVxufTtcbiIsInZhciBBYnN0cmFjdEZpbHRlciA9IHJlcXVpcmUoJy4vQWJzdHJhY3RGaWx0ZXInKTtcbi8vIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL3N1YnN0YWNrL2JyZnMvaXNzdWVzLzI1XG5cblxuLyoqXG4gKlxuICogQmFzaWMgRlhBQSBpbXBsZW1lbnRhdGlvbiBiYXNlZCBvbiB0aGUgY29kZSBvbiBnZWVrczNkLmNvbSB3aXRoIHRoZVxuICogbW9kaWZpY2F0aW9uIHRoYXQgdGhlIHRleHR1cmUyRExvZCBzdHVmZiB3YXMgcmVtb3ZlZCBzaW5jZSBpdCdzXG4gKiB1bnN1cHBvcnRlZCBieSBXZWJHTC5cbiAqXG4gKiAtLVxuICogRnJvbTpcbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS9taXRzdWhpa28vd2ViZ2wtbWVpbmNyYWZ0XG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLkFic3RyYWN0RmlsdGVyXG4gKiBAbWVtYmVyb2YgUElYSVxuICpcbiAqL1xuZnVuY3Rpb24gRlhBQUZpbHRlcigpXG57XG4gICAgQWJzdHJhY3RGaWx0ZXIuY2FsbCh0aGlzLFxuICAgICAgICAvLyB2ZXJ0ZXggc2hhZGVyXG4gICAgICAgIFwiXFxucHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XFxuXFxuYXR0cmlidXRlIHZlYzIgYVZlcnRleFBvc2l0aW9uO1xcbmF0dHJpYnV0ZSB2ZWMyIGFUZXh0dXJlQ29vcmQ7XFxuYXR0cmlidXRlIHZlYzQgYUNvbG9yO1xcblxcbnVuaWZvcm0gbWF0MyBwcm9qZWN0aW9uTWF0cml4O1xcbnVuaWZvcm0gdmVjMiByZXNvbHV0aW9uO1xcblxcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xcbnZhcnlpbmcgdmVjNCB2Q29sb3I7XFxuXFxudmFyeWluZyB2ZWMyIHZSZXNvbHV0aW9uO1xcblxcbi8vdGV4Y29vcmRzIGNvbXB1dGVkIGluIHZlcnRleCBzdGVwXFxuLy90byBhdm9pZCBkZXBlbmRlbnQgdGV4dHVyZSByZWFkc1xcbnZhcnlpbmcgdmVjMiB2X3JnYk5XO1xcbnZhcnlpbmcgdmVjMiB2X3JnYk5FO1xcbnZhcnlpbmcgdmVjMiB2X3JnYlNXO1xcbnZhcnlpbmcgdmVjMiB2X3JnYlNFO1xcbnZhcnlpbmcgdmVjMiB2X3JnYk07XFxuXFxuXFxudm9pZCB0ZXhjb29yZHModmVjMiBmcmFnQ29vcmQsIHZlYzIgcmVzb2x1dGlvbixcXG4gICAgICAgICAgICBvdXQgdmVjMiB2X3JnYk5XLCBvdXQgdmVjMiB2X3JnYk5FLFxcbiAgICAgICAgICAgIG91dCB2ZWMyIHZfcmdiU1csIG91dCB2ZWMyIHZfcmdiU0UsXFxuICAgICAgICAgICAgb3V0IHZlYzIgdl9yZ2JNKSB7XFxuICAgIHZlYzIgaW52ZXJzZVZQID0gMS4wIC8gcmVzb2x1dGlvbi54eTtcXG4gICAgdl9yZ2JOVyA9IChmcmFnQ29vcmQgKyB2ZWMyKC0xLjAsIC0xLjApKSAqIGludmVyc2VWUDtcXG4gICAgdl9yZ2JORSA9IChmcmFnQ29vcmQgKyB2ZWMyKDEuMCwgLTEuMCkpICogaW52ZXJzZVZQO1xcbiAgICB2X3JnYlNXID0gKGZyYWdDb29yZCArIHZlYzIoLTEuMCwgMS4wKSkgKiBpbnZlcnNlVlA7XFxuICAgIHZfcmdiU0UgPSAoZnJhZ0Nvb3JkICsgdmVjMigxLjAsIDEuMCkpICogaW52ZXJzZVZQO1xcbiAgICB2X3JnYk0gPSB2ZWMyKGZyYWdDb29yZCAqIGludmVyc2VWUCk7XFxufVxcblxcbnZvaWQgbWFpbih2b2lkKXtcXG4gICBnbF9Qb3NpdGlvbiA9IHZlYzQoKHByb2plY3Rpb25NYXRyaXggKiB2ZWMzKGFWZXJ0ZXhQb3NpdGlvbiwgMS4wKSkueHksIDAuMCwgMS4wKTtcXG4gICB2VGV4dHVyZUNvb3JkID0gYVRleHR1cmVDb29yZDtcXG4gICB2Q29sb3IgPSB2ZWM0KGFDb2xvci5yZ2IgKiBhQ29sb3IuYSwgYUNvbG9yLmEpO1xcbiAgIHZSZXNvbHV0aW9uID0gcmVzb2x1dGlvbjtcXG5cXG4gICAvL2NvbXB1dGUgdGhlIHRleHR1cmUgY29vcmRzIGFuZCBzZW5kIHRoZW0gdG8gdmFyeWluZ3NcXG4gICB0ZXhjb29yZHMoYVRleHR1cmVDb29yZCAqIHJlc29sdXRpb24sIHJlc29sdXRpb24sIHZfcmdiTlcsIHZfcmdiTkUsIHZfcmdiU1csIHZfcmdiU0UsIHZfcmdiTSk7XFxufVxcblwiLFxuICAgICAgICAvLyBmcmFnbWVudCBzaGFkZXJcbiAgICAgICAgXCJwcmVjaXNpb24gbG93cCBmbG9hdDtcXG5cXG5cXG4vKipcXG5CYXNpYyBGWEFBIGltcGxlbWVudGF0aW9uIGJhc2VkIG9uIHRoZSBjb2RlIG9uIGdlZWtzM2QuY29tIHdpdGggdGhlXFxubW9kaWZpY2F0aW9uIHRoYXQgdGhlIHRleHR1cmUyRExvZCBzdHVmZiB3YXMgcmVtb3ZlZCBzaW5jZSBpdCdzXFxudW5zdXBwb3J0ZWQgYnkgV2ViR0wuXFxuXFxuLS1cXG5cXG5Gcm9tOlxcbmh0dHBzOi8vZ2l0aHViLmNvbS9taXRzdWhpa28vd2ViZ2wtbWVpbmNyYWZ0XFxuXFxuQ29weXJpZ2h0IChjKSAyMDExIGJ5IEFybWluIFJvbmFjaGVyLlxcblxcblNvbWUgcmlnaHRzIHJlc2VydmVkLlxcblxcblJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dFxcbm1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmVcXG5tZXQ6XFxuXFxuICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHRcXG4gICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuXFxuXFxuICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZVxcbiAgICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nXFxuICAgICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkXFxuICAgICAgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLlxcblxcbiAgICAqIFRoZSBuYW1lcyBvZiB0aGUgY29udHJpYnV0b3JzIG1heSBub3QgYmUgdXNlZCB0byBlbmRvcnNlIG9yXFxuICAgICAgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljXFxuICAgICAgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLlxcblxcblRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlNcXG5cXFwiQVMgSVNcXFwiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVFxcbkxJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUlxcbkEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUXFxuT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsXFxuU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVFxcbkxJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLFxcbkRBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWVxcblRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlRcXG4oSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0VcXG5PRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLlxcbiovXFxuXFxuI2lmbmRlZiBGWEFBX1JFRFVDRV9NSU5cXG4gICAgI2RlZmluZSBGWEFBX1JFRFVDRV9NSU4gICAoMS4wLyAxMjguMClcXG4jZW5kaWZcXG4jaWZuZGVmIEZYQUFfUkVEVUNFX01VTFxcbiAgICAjZGVmaW5lIEZYQUFfUkVEVUNFX01VTCAgICgxLjAgLyA4LjApXFxuI2VuZGlmXFxuI2lmbmRlZiBGWEFBX1NQQU5fTUFYXFxuICAgICNkZWZpbmUgRlhBQV9TUEFOX01BWCAgICAgOC4wXFxuI2VuZGlmXFxuXFxuLy9vcHRpbWl6ZWQgdmVyc2lvbiBmb3IgbW9iaWxlLCB3aGVyZSBkZXBlbmRlbnRcXG4vL3RleHR1cmUgcmVhZHMgY2FuIGJlIGEgYm90dGxlbmVja1xcbnZlYzQgZnhhYShzYW1wbGVyMkQgdGV4LCB2ZWMyIGZyYWdDb29yZCwgdmVjMiByZXNvbHV0aW9uLFxcbiAgICAgICAgICAgIHZlYzIgdl9yZ2JOVywgdmVjMiB2X3JnYk5FLFxcbiAgICAgICAgICAgIHZlYzIgdl9yZ2JTVywgdmVjMiB2X3JnYlNFLFxcbiAgICAgICAgICAgIHZlYzIgdl9yZ2JNKSB7XFxuICAgIHZlYzQgY29sb3I7XFxuICAgIG1lZGl1bXAgdmVjMiBpbnZlcnNlVlAgPSB2ZWMyKDEuMCAvIHJlc29sdXRpb24ueCwgMS4wIC8gcmVzb2x1dGlvbi55KTtcXG4gICAgdmVjMyByZ2JOVyA9IHRleHR1cmUyRCh0ZXgsIHZfcmdiTlcpLnh5ejtcXG4gICAgdmVjMyByZ2JORSA9IHRleHR1cmUyRCh0ZXgsIHZfcmdiTkUpLnh5ejtcXG4gICAgdmVjMyByZ2JTVyA9IHRleHR1cmUyRCh0ZXgsIHZfcmdiU1cpLnh5ejtcXG4gICAgdmVjMyByZ2JTRSA9IHRleHR1cmUyRCh0ZXgsIHZfcmdiU0UpLnh5ejtcXG4gICAgdmVjNCB0ZXhDb2xvciA9IHRleHR1cmUyRCh0ZXgsIHZfcmdiTSk7XFxuICAgIHZlYzMgcmdiTSAgPSB0ZXhDb2xvci54eXo7XFxuICAgIHZlYzMgbHVtYSA9IHZlYzMoMC4yOTksIDAuNTg3LCAwLjExNCk7XFxuICAgIGZsb2F0IGx1bWFOVyA9IGRvdChyZ2JOVywgbHVtYSk7XFxuICAgIGZsb2F0IGx1bWFORSA9IGRvdChyZ2JORSwgbHVtYSk7XFxuICAgIGZsb2F0IGx1bWFTVyA9IGRvdChyZ2JTVywgbHVtYSk7XFxuICAgIGZsb2F0IGx1bWFTRSA9IGRvdChyZ2JTRSwgbHVtYSk7XFxuICAgIGZsb2F0IGx1bWFNICA9IGRvdChyZ2JNLCAgbHVtYSk7XFxuICAgIGZsb2F0IGx1bWFNaW4gPSBtaW4obHVtYU0sIG1pbihtaW4obHVtYU5XLCBsdW1hTkUpLCBtaW4obHVtYVNXLCBsdW1hU0UpKSk7XFxuICAgIGZsb2F0IGx1bWFNYXggPSBtYXgobHVtYU0sIG1heChtYXgobHVtYU5XLCBsdW1hTkUpLCBtYXgobHVtYVNXLCBsdW1hU0UpKSk7XFxuXFxuICAgIG1lZGl1bXAgdmVjMiBkaXI7XFxuICAgIGRpci54ID0gLSgobHVtYU5XICsgbHVtYU5FKSAtIChsdW1hU1cgKyBsdW1hU0UpKTtcXG4gICAgZGlyLnkgPSAgKChsdW1hTlcgKyBsdW1hU1cpIC0gKGx1bWFORSArIGx1bWFTRSkpO1xcblxcbiAgICBmbG9hdCBkaXJSZWR1Y2UgPSBtYXgoKGx1bWFOVyArIGx1bWFORSArIGx1bWFTVyArIGx1bWFTRSkgKlxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKDAuMjUgKiBGWEFBX1JFRFVDRV9NVUwpLCBGWEFBX1JFRFVDRV9NSU4pO1xcblxcbiAgICBmbG9hdCByY3BEaXJNaW4gPSAxLjAgLyAobWluKGFicyhkaXIueCksIGFicyhkaXIueSkpICsgZGlyUmVkdWNlKTtcXG4gICAgZGlyID0gbWluKHZlYzIoRlhBQV9TUEFOX01BWCwgRlhBQV9TUEFOX01BWCksXFxuICAgICAgICAgICAgICBtYXgodmVjMigtRlhBQV9TUEFOX01BWCwgLUZYQUFfU1BBTl9NQVgpLFxcbiAgICAgICAgICAgICAgZGlyICogcmNwRGlyTWluKSkgKiBpbnZlcnNlVlA7XFxuXFxuICAgIHZlYzMgcmdiQSA9IDAuNSAqIChcXG4gICAgICAgIHRleHR1cmUyRCh0ZXgsIGZyYWdDb29yZCAqIGludmVyc2VWUCArIGRpciAqICgxLjAgLyAzLjAgLSAwLjUpKS54eXogK1xcbiAgICAgICAgdGV4dHVyZTJEKHRleCwgZnJhZ0Nvb3JkICogaW52ZXJzZVZQICsgZGlyICogKDIuMCAvIDMuMCAtIDAuNSkpLnh5eik7XFxuICAgIHZlYzMgcmdiQiA9IHJnYkEgKiAwLjUgKyAwLjI1ICogKFxcbiAgICAgICAgdGV4dHVyZTJEKHRleCwgZnJhZ0Nvb3JkICogaW52ZXJzZVZQICsgZGlyICogLTAuNSkueHl6ICtcXG4gICAgICAgIHRleHR1cmUyRCh0ZXgsIGZyYWdDb29yZCAqIGludmVyc2VWUCArIGRpciAqIDAuNSkueHl6KTtcXG5cXG4gICAgZmxvYXQgbHVtYUIgPSBkb3QocmdiQiwgbHVtYSk7XFxuICAgIGlmICgobHVtYUIgPCBsdW1hTWluKSB8fCAobHVtYUIgPiBsdW1hTWF4KSlcXG4gICAgICAgIGNvbG9yID0gdmVjNChyZ2JBLCB0ZXhDb2xvci5hKTtcXG4gICAgZWxzZVxcbiAgICAgICAgY29sb3IgPSB2ZWM0KHJnYkIsIHRleENvbG9yLmEpO1xcbiAgICByZXR1cm4gY29sb3I7XFxufVxcblxcblxcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xcbnZhcnlpbmcgdmVjNCB2Q29sb3I7XFxudmFyeWluZyB2ZWMyIHZSZXNvbHV0aW9uO1xcblxcbi8vdGV4Y29vcmRzIGNvbXB1dGVkIGluIHZlcnRleCBzdGVwXFxuLy90byBhdm9pZCBkZXBlbmRlbnQgdGV4dHVyZSByZWFkc1xcbnZhcnlpbmcgdmVjMiB2X3JnYk5XO1xcbnZhcnlpbmcgdmVjMiB2X3JnYk5FO1xcbnZhcnlpbmcgdmVjMiB2X3JnYlNXO1xcbnZhcnlpbmcgdmVjMiB2X3JnYlNFO1xcbnZhcnlpbmcgdmVjMiB2X3JnYk07XFxuXFxudW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXI7XFxuXFxuXFxudm9pZCBtYWluKHZvaWQpe1xcblxcbiAgICBnbF9GcmFnQ29sb3IgPSBmeGFhKHVTYW1wbGVyLCB2VGV4dHVyZUNvb3JkICogdlJlc29sdXRpb24sIHZSZXNvbHV0aW9uLCB2X3JnYk5XLCB2X3JnYk5FLCB2X3JnYlNXLCB2X3JnYlNFLCB2X3JnYk0pO1xcblxcbn1cXG5cIixcbiAgICAgICAgLy8gdW5pZm9ybXNcbiAgICAgICAge1xuICAgICAgICAgICAgcmVzb2x1dGlvbjogeyB0eXBlOiAndjInLCB2YWx1ZTogeyB4OiAxLCB5OiAxIH0gfVxuICAgICAgICB9XG4gICAgKTtcblxufVxuXG5GWEFBRmlsdGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoQWJzdHJhY3RGaWx0ZXIucHJvdG90eXBlKTtcbkZYQUFGaWx0ZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gRlhBQUZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gRlhBQUZpbHRlcjtcblxuLyoqXG4gKiBBcHBsaWVzIHRoZSBmaWx0ZXJcbiAqXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcn0gVGhlIHJlbmRlcmVyIHRvIHJldHJpZXZlIHRoZSBmaWx0ZXIgZnJvbVxuICogQHBhcmFtIGlucHV0IHtQSVhJLlJlbmRlclRhcmdldH1cbiAqIEBwYXJhbSBvdXRwdXQge1BJWEkuUmVuZGVyVGFyZ2V0fVxuICovXG5GWEFBRmlsdGVyLnByb3RvdHlwZS5hcHBseUZpbHRlciA9IGZ1bmN0aW9uIChyZW5kZXJlciwgaW5wdXQsIG91dHB1dClcbntcbiAgICB2YXIgZmlsdGVyTWFuYWdlciA9IHJlbmRlcmVyLmZpbHRlck1hbmFnZXI7XG5cbiAgICB2YXIgc2hhZGVyID0gdGhpcy5nZXRTaGFkZXIoIHJlbmRlcmVyICk7XG4gICAgIC8vIGRyYXcgdGhlIGZpbHRlci4uLlxuICAgIGZpbHRlck1hbmFnZXIuYXBwbHlGaWx0ZXIoc2hhZGVyLCBpbnB1dCwgb3V0cHV0KTtcbn07XG4iLCJ2YXIgQWJzdHJhY3RGaWx0ZXIgPSByZXF1aXJlKCcuL0Fic3RyYWN0RmlsdGVyJyksXG4gICAgbWF0aCA9ICByZXF1aXJlKCcuLi8uLi8uLi9tYXRoJyk7XG5cbi8vIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL3N1YnN0YWNrL2JyZnMvaXNzdWVzLzI1XG5cblxuLyoqXG4gKiBUaGUgU3ByaXRlTWFza0ZpbHRlciBjbGFzc1xuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5BYnN0cmFjdEZpbHRlclxuICogQG1lbWJlcm9mIFBJWElcbiAqIEBwYXJhbSBzcHJpdGUge1BJWEkuU3ByaXRlfSB0aGUgdGFyZ2V0IHNwcml0ZVxuICovXG5mdW5jdGlvbiBTcHJpdGVNYXNrRmlsdGVyKHNwcml0ZSlcbntcbiAgICB2YXIgbWFza01hdHJpeCA9IG5ldyBtYXRoLk1hdHJpeCgpO1xuXG4gICAgQWJzdHJhY3RGaWx0ZXIuY2FsbCh0aGlzLFxuICAgICAgICBcImF0dHJpYnV0ZSB2ZWMyIGFWZXJ0ZXhQb3NpdGlvbjtcXG5hdHRyaWJ1dGUgdmVjMiBhVGV4dHVyZUNvb3JkO1xcbmF0dHJpYnV0ZSB2ZWM0IGFDb2xvcjtcXG5cXG51bmlmb3JtIG1hdDMgcHJvamVjdGlvbk1hdHJpeDtcXG51bmlmb3JtIG1hdDMgb3RoZXJNYXRyaXg7XFxuXFxudmFyeWluZyB2ZWMyIHZNYXNrQ29vcmQ7XFxudmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7XFxudmFyeWluZyB2ZWM0IHZDb2xvcjtcXG5cXG52b2lkIG1haW4odm9pZClcXG57XFxuICAgIGdsX1Bvc2l0aW9uID0gdmVjNCgocHJvamVjdGlvbk1hdHJpeCAqIHZlYzMoYVZlcnRleFBvc2l0aW9uLCAxLjApKS54eSwgMC4wLCAxLjApO1xcbiAgICB2VGV4dHVyZUNvb3JkID0gYVRleHR1cmVDb29yZDtcXG4gICAgdk1hc2tDb29yZCA9ICggb3RoZXJNYXRyaXggKiB2ZWMzKCBhVGV4dHVyZUNvb3JkLCAxLjApICApLnh5O1xcbiAgICB2Q29sb3IgPSB2ZWM0KGFDb2xvci5yZ2IgKiBhQ29sb3IuYSwgYUNvbG9yLmEpO1xcbn1cXG5cIixcbiAgICAgICAgXCJwcmVjaXNpb24gbG93cCBmbG9hdDtcXG5cXG52YXJ5aW5nIHZlYzIgdk1hc2tDb29yZDtcXG52YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDtcXG52YXJ5aW5nIHZlYzQgdkNvbG9yO1xcblxcbnVuaWZvcm0gc2FtcGxlcjJEIHVTYW1wbGVyO1xcbnVuaWZvcm0gZmxvYXQgYWxwaGE7XFxudW5pZm9ybSBzYW1wbGVyMkQgbWFzaztcXG5cXG52b2lkIG1haW4odm9pZClcXG57XFxuICAgIC8vIGNoZWNrIGNsaXAhIHRoaXMgd2lsbCBzdG9wIHRoZSBtYXNrIGJsZWVkaW5nIG91dCBmcm9tIHRoZSBlZGdlc1xcbiAgICB2ZWMyIHRleHQgPSBhYnMoIHZNYXNrQ29vcmQgLSAwLjUgKTtcXG4gICAgdGV4dCA9IHN0ZXAoMC41LCB0ZXh0KTtcXG4gICAgZmxvYXQgY2xpcCA9IDEuMCAtIG1heCh0ZXh0LnksIHRleHQueCk7XFxuICAgIHZlYzQgb3JpZ2luYWwgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZUZXh0dXJlQ29vcmQpO1xcbiAgICB2ZWM0IG1hc2t5ID0gdGV4dHVyZTJEKG1hc2ssIHZNYXNrQ29vcmQpO1xcbiAgICBvcmlnaW5hbCAqPSAobWFza3kuciAqIG1hc2t5LmEgKiBhbHBoYSAqIGNsaXApO1xcbiAgICBnbF9GcmFnQ29sb3IgPSBvcmlnaW5hbDtcXG59XFxuXCIsXG4gICAgICAgIHtcbiAgICAgICAgICAgIG1hc2s6ICAgICAgICAgICB7IHR5cGU6ICdzYW1wbGVyMkQnLCB2YWx1ZTogc3ByaXRlLl90ZXh0dXJlIH0sXG4gICAgICAgICAgICBhbHBoYTogICAgICAgICAgeyB0eXBlOiAnZicsIHZhbHVlOiAxfSxcbiAgICAgICAgICAgIG90aGVyTWF0cml4OiAgICB7IHR5cGU6ICdtYXQzJywgdmFsdWU6IG1hc2tNYXRyaXgudG9BcnJheSh0cnVlKSB9XG4gICAgICAgIH1cbiAgICApO1xuXG4gICAgdGhpcy5tYXNrU3ByaXRlID0gc3ByaXRlO1xuICAgIHRoaXMubWFza01hdHJpeCA9IG1hc2tNYXRyaXg7XG59XG5cblNwcml0ZU1hc2tGaWx0ZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShBYnN0cmFjdEZpbHRlci5wcm90b3R5cGUpO1xuU3ByaXRlTWFza0ZpbHRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBTcHJpdGVNYXNrRmlsdGVyO1xubW9kdWxlLmV4cG9ydHMgPSBTcHJpdGVNYXNrRmlsdGVyO1xuXG4vKipcbiAqIEFwcGxpZXMgdGhlIGZpbHRlclxuICpcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5XZWJHTFJlbmRlcmVyfSBUaGUgcmVuZGVyZXIgdG8gcmV0cmlldmUgdGhlIGZpbHRlciBmcm9tXG4gKiBAcGFyYW0gaW5wdXQge1BJWEkuUmVuZGVyVGFyZ2V0fVxuICogQHBhcmFtIG91dHB1dCB7UElYSS5SZW5kZXJUYXJnZXR9XG4gKi9cblNwcml0ZU1hc2tGaWx0ZXIucHJvdG90eXBlLmFwcGx5RmlsdGVyID0gZnVuY3Rpb24gKHJlbmRlcmVyLCBpbnB1dCwgb3V0cHV0KVxue1xuICAgIHZhciBmaWx0ZXJNYW5hZ2VyID0gcmVuZGVyZXIuZmlsdGVyTWFuYWdlcjtcblxuICAgIHRoaXMudW5pZm9ybXMubWFzay52YWx1ZSA9IHRoaXMubWFza1Nwcml0ZS5fdGV4dHVyZTtcblxuICAgIGZpbHRlck1hbmFnZXIuY2FsY3VsYXRlTWFwcGVkTWF0cml4KGlucHV0LmZyYW1lLCB0aGlzLm1hc2tTcHJpdGUsIHRoaXMubWFza01hdHJpeCk7XG5cbiAgICB0aGlzLnVuaWZvcm1zLm90aGVyTWF0cml4LnZhbHVlID0gdGhpcy5tYXNrTWF0cml4LnRvQXJyYXkodHJ1ZSk7XG4gICAgdGhpcy51bmlmb3Jtcy5hbHBoYS52YWx1ZSA9IHRoaXMubWFza1Nwcml0ZS53b3JsZEFscGhhO1xuXG4gICAgdmFyIHNoYWRlciA9IHRoaXMuZ2V0U2hhZGVyKHJlbmRlcmVyKTtcbiAgICAgLy8gZHJhdyB0aGUgZmlsdGVyLi4uXG4gICAgZmlsdGVyTWFuYWdlci5hcHBseUZpbHRlcihzaGFkZXIsIGlucHV0LCBvdXRwdXQpO1xufTtcblxuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhTcHJpdGVNYXNrRmlsdGVyLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFRoZSB0ZXh0dXJlIHVzZWQgZm9yIHRoZSBkaXNwbGFjZW1lbnQgbWFwLiBNdXN0IGJlIHBvd2VyIG9mIDIgc2l6ZWQgdGV4dHVyZS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuVGV4dHVyZX1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5TcHJpdGVNYXNrRmlsdGVyI1xuICAgICAqL1xuICAgIG1hcDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVuaWZvcm1zLm1hc2sudmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLm1hc2sudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBUaGUgb2Zmc2V0IHVzZWQgdG8gbW92ZSB0aGUgZGlzcGxhY2VtZW50IG1hcC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuUG9pbnR9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuU3ByaXRlTWFza0ZpbHRlciNcbiAgICAgKi9cbiAgICBvZmZzZXQ6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbigpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVuaWZvcm1zLm9mZnNldC52YWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbih2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy5vZmZzZXQudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuIiwidmFyIFdlYkdMTWFuYWdlciA9IHJlcXVpcmUoJy4vV2ViR0xNYW5hZ2VyJyk7XG5cbi8qKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQGV4dGVuZHMgUElYSS5XZWJHbE1hbmFnZXJcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5XZWJHTFJlbmRlcmVyfSBUaGUgcmVuZGVyZXIgdGhpcyBtYW5hZ2VyIHdvcmtzIGZvci5cbiAqL1xuZnVuY3Rpb24gQmxlbmRNb2RlTWFuYWdlcihyZW5kZXJlcilcbntcbiAgICBXZWJHTE1hbmFnZXIuY2FsbCh0aGlzLCByZW5kZXJlcik7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy5jdXJyZW50QmxlbmRNb2RlID0gOTk5OTk7XG59XG5cbkJsZW5kTW9kZU1hbmFnZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShXZWJHTE1hbmFnZXIucHJvdG90eXBlKTtcbkJsZW5kTW9kZU1hbmFnZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gQmxlbmRNb2RlTWFuYWdlcjtcbm1vZHVsZS5leHBvcnRzID0gQmxlbmRNb2RlTWFuYWdlcjtcblxuLyoqXG4gKiBTZXRzLXVwIHRoZSBnaXZlbiBibGVuZE1vZGUgZnJvbSBXZWJHTCdzIHBvaW50IG9mIHZpZXcuXG4gKlxuICogQHBhcmFtIGJsZW5kTW9kZSB7bnVtYmVyfSB0aGUgYmxlbmRNb2RlLCBzaG91bGQgYmUgYSBQaXhpIGNvbnN0LCBzdWNoIGFzIGBQSVhJLkJMRU5EX01PREVTLkFERGAuIFNlZVxuICogIHtAbGluayBQSVhJLkJMRU5EX01PREVTfSBmb3IgcG9zc2libGUgdmFsdWVzLlxuICovXG5CbGVuZE1vZGVNYW5hZ2VyLnByb3RvdHlwZS5zZXRCbGVuZE1vZGUgPSBmdW5jdGlvbiAoYmxlbmRNb2RlKVxue1xuICAgIGlmICh0aGlzLmN1cnJlbnRCbGVuZE1vZGUgPT09IGJsZW5kTW9kZSlcbiAgICB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICB0aGlzLmN1cnJlbnRCbGVuZE1vZGUgPSBibGVuZE1vZGU7XG5cbiAgICB2YXIgbW9kZSA9IHRoaXMucmVuZGVyZXIuYmxlbmRNb2Rlc1t0aGlzLmN1cnJlbnRCbGVuZE1vZGVdO1xuICAgIHRoaXMucmVuZGVyZXIuZ2wuYmxlbmRGdW5jKG1vZGVbMF0sIG1vZGVbMV0pO1xuXG4gICAgcmV0dXJuIHRydWU7XG59O1xuIiwidmFyIFdlYkdMTWFuYWdlciA9IHJlcXVpcmUoJy4vV2ViR0xNYW5hZ2VyJyksXG4gICAgUmVuZGVyVGFyZ2V0ID0gcmVxdWlyZSgnLi4vdXRpbHMvUmVuZGVyVGFyZ2V0JyksXG4gICAgQ09OU1QgPSByZXF1aXJlKCcuLi8uLi8uLi9jb25zdCcpLFxuICAgIFF1YWQgPSByZXF1aXJlKCcuLi91dGlscy9RdWFkJyksXG4gICAgbWF0aCA9ICByZXF1aXJlKCcuLi8uLi8uLi9tYXRoJyk7XG5cbi8qKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQGV4dGVuZHMgUElYSS5XZWJHTE1hbmFnZXJcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5XZWJHTFJlbmRlcmVyfSBUaGUgcmVuZGVyZXIgdGhpcyBtYW5hZ2VyIHdvcmtzIGZvci5cbiAqL1xuZnVuY3Rpb24gRmlsdGVyTWFuYWdlcihyZW5kZXJlcilcbntcbiAgICBXZWJHTE1hbmFnZXIuY2FsbCh0aGlzLCByZW5kZXJlcik7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtvYmplY3RbXX1cbiAgICAgKi9cbiAgICB0aGlzLmZpbHRlclN0YWNrID0gW107XG5cbiAgICB0aGlzLmZpbHRlclN0YWNrLnB1c2goe1xuICAgICAgICByZW5kZXJUYXJnZXQ6cmVuZGVyZXIuY3VycmVudFJlbmRlclRhcmdldCxcbiAgICAgICAgZmlsdGVyOltdLFxuICAgICAgICBib3VuZHM6bnVsbFxuICAgIH0pO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7UElYSS5SZW5kZXJUYXJnZXRbXX1cbiAgICAgKi9cbiAgICB0aGlzLnRleHR1cmVQb29sID0gW107XG5cbiAgICAvKipcbiAgICAgKiBUaGUgc2l6ZSBvZiB0aGUgdGV4dHVyZVxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5SZWN0YW5nbGV9XG4gICAgICovXG4gICAgLy8gbGlzdGVuIGZvciBjb250ZXh0IGFuZCB1cGRhdGUgbmVjZXNzYXJ5IGJ1ZmZlcnNcbiAgICAvL1RPRE8gbWFrZSB0aGlzIGR5bmFtaWMhXG4gICAgLy9UT0RPIHRlc3QgdGhpcyBvdXQgYnkgZm9yY2VzIHBvd2VyIG9mIHR3bz9cbiAgICB0aGlzLnRleHR1cmVTaXplID0gbmV3IG1hdGguUmVjdGFuZ2xlKDAsIDAsIHJlbmRlcmVyLndpZHRoLCByZW5kZXJlci5oZWlnaHQpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGN1cnJlbnQgZnJhbWVcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuUmVjdGFuZ2xlfVxuICAgICAqL1xuICAgIHRoaXMuY3VycmVudEZyYW1lID0gbnVsbDtcbn1cblxuRmlsdGVyTWFuYWdlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFdlYkdMTWFuYWdlci5wcm90b3R5cGUpO1xuRmlsdGVyTWFuYWdlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBGaWx0ZXJNYW5hZ2VyO1xubW9kdWxlLmV4cG9ydHMgPSBGaWx0ZXJNYW5hZ2VyO1xuXG5cbi8qKlxuICogQ2FsbGVkIHdoZW4gdGhlcmUgaXMgYSBXZWJHTCBjb250ZXh0IGNoYW5nZS5cbiAqXG4gKi9cbkZpbHRlck1hbmFnZXIucHJvdG90eXBlLm9uQ29udGV4dENoYW5nZSA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy50ZXh0dXJlUG9vbC5sZW5ndGggPSAwO1xuXG4gICAgdmFyIGdsID0gdGhpcy5yZW5kZXJlci5nbDtcbiAgICB0aGlzLnF1YWQgPSBuZXcgUXVhZChnbCk7XG59O1xuXG4vKipcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5XZWJHTFJlbmRlcmVyfVxuICogQHBhcmFtIGJ1ZmZlciB7QXJyYXlCdWZmZXJ9XG4gKi9cbkZpbHRlck1hbmFnZXIucHJvdG90eXBlLnNldEZpbHRlclN0YWNrID0gZnVuY3Rpb24gKCBmaWx0ZXJTdGFjayApXG57XG4gICAgdGhpcy5maWx0ZXJTdGFjayA9IGZpbHRlclN0YWNrO1xufTtcblxuLyoqXG4gKiBBcHBsaWVzIHRoZSBmaWx0ZXIgYW5kIGFkZHMgaXQgdG8gdGhlIGN1cnJlbnQgZmlsdGVyIHN0YWNrLlxuICpcbiAqIEBwYXJhbSB0YXJnZXQge1BJWEkuRGlzcGxheU9iamVjdH1cbiAqIEBwYXJhbSBmaWx0ZXJzIHtQSVhJLkFic3RyYWN0RmlsZXJbXX0gdGhlIGZpbHRlcnMgdGhhdCB3aWxsIGJlIHB1c2hlZCB0byB0aGUgY3VycmVudCBmaWx0ZXIgc3RhY2tcbiAqL1xuRmlsdGVyTWFuYWdlci5wcm90b3R5cGUucHVzaEZpbHRlciA9IGZ1bmN0aW9uICh0YXJnZXQsIGZpbHRlcnMpXG57XG4gICAgLy8gZ2V0IHRoZSBib3VuZHMgb2YgdGhlIG9iamVjdC4uXG4gICAgLy8gVE9ETyByZXBsYWNlIGNsb25lIHdpdGggYSBjb3B5IHRvIHNhdmUgb2JqZWN0IGNyZWF0aW9uXG4gICAgdmFyIGJvdW5kcyA9IHRhcmdldC5maWx0ZXJBcmVhID8gdGFyZ2V0LmZpbHRlckFyZWEuY2xvbmUoKSA6IHRhcmdldC5nZXRCb3VuZHMoKTtcblxuICAgIC8vYm91bmRzID0gYm91bmRzLmNsb25lKCk7XG5cbiAgICAvLyByb3VuZCBvZmYgdGhlIHJlY3RhbmdsZSB0byBnZXQgYSBuaWNlIHNtb29vb29vb3RoIGZpbHRlciA6KVxuICAgIGJvdW5kcy54ID0gYm91bmRzLnggfCAwO1xuICAgIGJvdW5kcy55ID0gYm91bmRzLnkgfCAwO1xuICAgIGJvdW5kcy53aWR0aCA9IGJvdW5kcy53aWR0aCB8IDA7XG4gICAgYm91bmRzLmhlaWdodCA9IGJvdW5kcy5oZWlnaHQgfCAwO1xuXG5cbiAgICAvLyBwYWRkaW5nIVxuICAgIHZhciBwYWRkaW5nID0gZmlsdGVyc1swXS5wYWRkaW5nIHwgMDtcbiAgICBib3VuZHMueCAtPSBwYWRkaW5nO1xuICAgIGJvdW5kcy55IC09IHBhZGRpbmc7XG4gICAgYm91bmRzLndpZHRoICs9IHBhZGRpbmcgKiAyO1xuICAgIGJvdW5kcy5oZWlnaHQgKz0gcGFkZGluZyAqIDI7XG5cblxuICAgIGlmKHRoaXMucmVuZGVyZXIuY3VycmVudFJlbmRlclRhcmdldC50cmFuc2Zvcm0pXG4gICAge1xuICAgICAgICAvL1RPRE8gdGhpcyB3aWxsIGJyZWFrIGlmIHRoZSByZW5kZXJUZXh0dXJlIHRyYW5zZm9ybSBpcyBhbnl0aGluZyBvdGhlciB0aGFuIGEgdHJhbnNsYXRpb24uXG4gICAgICAgIC8vV2lsbCBuZWVkIHRvIHRha2UgdGhlIGZ1bGwgbWF0cml4IHRyYW5zZm9ybSBpbnRvIGFjb3VudC4uXG4gICAgICAgIHZhciB0cmFuc2Zvcm0gPSB0aGlzLnJlbmRlcmVyLmN1cnJlbnRSZW5kZXJUYXJnZXQudHJhbnNmb3JtO1xuXG4gICAgICAgIGJvdW5kcy54ICs9IHRyYW5zZm9ybS50eDtcbiAgICAgICAgYm91bmRzLnkgKz0gdHJhbnNmb3JtLnR5O1xuXG4gICAgICAgIHRoaXMuY2FwRmlsdGVyQXJlYSggYm91bmRzICk7XG5cbiAgICAgICAgYm91bmRzLnggLT0gdHJhbnNmb3JtLnR4O1xuICAgICAgICBib3VuZHMueSAtPSB0cmFuc2Zvcm0udHk7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgICB0aGlzLmNhcEZpbHRlckFyZWEoIGJvdW5kcyApO1xuICAgIH1cblxuICAgIGlmKGJvdW5kcy53aWR0aCA+IDAgJiYgYm91bmRzLmhlaWdodCA+IDApXG4gICAge1xuICAgICAgICB0aGlzLmN1cnJlbnRGcmFtZSA9IGJvdW5kcztcblxuICAgICAgICB2YXIgdGV4dHVyZSA9IHRoaXMuZ2V0UmVuZGVyVGFyZ2V0KCk7XG5cbiAgICAgICAgdGhpcy5yZW5kZXJlci5zZXRSZW5kZXJUYXJnZXQodGV4dHVyZSk7XG5cbiAgICAgICAgLy8gY2xlYXIgdGhlIHRleHR1cmUuLlxuICAgICAgICB0ZXh0dXJlLmNsZWFyKCk7XG5cbiAgICAgICAgLy8gVE9ETyBnZXQgcmlkIG9mIG9iamVjdCBjcmVhdGlvbiFcbiAgICAgICAgdGhpcy5maWx0ZXJTdGFjay5wdXNoKHtcbiAgICAgICAgICAgIHJlbmRlclRhcmdldDogdGV4dHVyZSxcbiAgICAgICAgICAgIGZpbHRlcjogZmlsdGVyc1xuICAgICAgICB9KTtcblxuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICAvLyBwdXNoIHNvbXRoaW5nIG9uIHRvIHRoZSBzdGFjayB0aGF0IGlzIGVtcHR5XG4gICAgICAgIHRoaXMuZmlsdGVyU3RhY2sucHVzaCh7XG4gICAgICAgICAgICByZW5kZXJUYXJnZXQ6IG51bGwsXG4gICAgICAgICAgICBmaWx0ZXI6IGZpbHRlcnNcbiAgICAgICAgfSk7XG4gICAgfVxufTtcblxuXG4vKipcbiAqIFJlbW92ZXMgdGhlIGxhc3QgZmlsdGVyIGZyb20gdGhlIGZpbHRlciBzdGFjayBhbmQgcmV0dXJucyBpdC5cbiAqXG4gKi9cbkZpbHRlck1hbmFnZXIucHJvdG90eXBlLnBvcEZpbHRlciA9IGZ1bmN0aW9uICgpXG57XG4gICAgdmFyIGZpbHRlckRhdGEgPSB0aGlzLmZpbHRlclN0YWNrLnBvcCgpO1xuICAgIHZhciBwcmV2aW91c0ZpbHRlckRhdGEgPSB0aGlzLmZpbHRlclN0YWNrW3RoaXMuZmlsdGVyU3RhY2subGVuZ3RoLTFdO1xuXG4gICAgdmFyIGlucHV0ID0gZmlsdGVyRGF0YS5yZW5kZXJUYXJnZXQ7XG5cbiAgICAvLyBpZiB0aGUgcmVuZGVyVGFyZ2V0IGlzIG51bGwgdGhlbiB3ZSBkb24ndCBhcHBseSB0aGUgZmlsdGVyIGFzIGl0cyBvZmZzY3JlZW5cbiAgICBpZighZmlsdGVyRGF0YS5yZW5kZXJUYXJnZXQpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFyIG91dHB1dCA9IHByZXZpb3VzRmlsdGVyRGF0YS5yZW5kZXJUYXJnZXQ7XG5cbiAgICAvLyB1c2UgcHJvZ3JhbVxuICAgIHZhciBnbCA9IHRoaXMucmVuZGVyZXIuZ2w7XG5cblxuICAgIHRoaXMuY3VycmVudEZyYW1lID0gaW5wdXQuZnJhbWU7XG5cbiAgICB0aGlzLnF1YWQubWFwKHRoaXMudGV4dHVyZVNpemUsIGlucHV0LmZyYW1lKTtcblxuXG4gICAgLy8gVE9ETy4uIHRoaXMgcHJvYmFibHkgb25seSBuZWVkcyB0byBiZSBkb25lIG9uY2UhXG4gICAgZ2wuYmluZEJ1ZmZlcihnbC5BUlJBWV9CVUZGRVIsIHRoaXMucXVhZC52ZXJ0ZXhCdWZmZXIpO1xuICAgIGdsLmJpbmRCdWZmZXIoZ2wuRUxFTUVOVF9BUlJBWV9CVUZGRVIsIHRoaXMucXVhZC5pbmRleEJ1ZmZlcik7XG5cbiAgICB2YXIgZmlsdGVycyA9IGZpbHRlckRhdGEuZmlsdGVyO1xuXG4gICAgLy8gYXNzdW1pbmcgYWxsIGZpbHRlcnMgZm9sbG93IHRoZSBjb3JyZWN0IGZvcm1hdD8/XG4gICAgZ2wudmVydGV4QXR0cmliUG9pbnRlcih0aGlzLnJlbmRlcmVyLnNoYWRlck1hbmFnZXIuZGVmYXVsdFNoYWRlci5hdHRyaWJ1dGVzLmFWZXJ0ZXhQb3NpdGlvbiwgMiwgZ2wuRkxPQVQsIGZhbHNlLCAwLCAwKTtcbiAgICBnbC52ZXJ0ZXhBdHRyaWJQb2ludGVyKHRoaXMucmVuZGVyZXIuc2hhZGVyTWFuYWdlci5kZWZhdWx0U2hhZGVyLmF0dHJpYnV0ZXMuYVRleHR1cmVDb29yZCwgMiwgZ2wuRkxPQVQsIGZhbHNlLCAwLCAyICogNCAqIDQpO1xuICAgIGdsLnZlcnRleEF0dHJpYlBvaW50ZXIodGhpcy5yZW5kZXJlci5zaGFkZXJNYW5hZ2VyLmRlZmF1bHRTaGFkZXIuYXR0cmlidXRlcy5hQ29sb3IsIDQsIGdsLkZMT0FULCBmYWxzZSwgMCwgNCAqIDQgKiA0KTtcblxuICAgIC8vIHJlc3RvcmUgdGhlIG5vcm1hbCBibGVuZG1vZGUhXG4gICAgdGhpcy5yZW5kZXJlci5ibGVuZE1vZGVNYW5hZ2VyLnNldEJsZW5kTW9kZShDT05TVC5CTEVORF9NT0RFUy5OT1JNQUwpO1xuXG4gICAgaWYgKGZpbHRlcnMubGVuZ3RoID09PSAxKVxuICAgIHtcbiAgICAgICAgLy8gVE9ETyAoY2VuZ2xlcikgLSBUaGVyZSBoYXMgdG8gYmUgYSBiZXR0ZXIgd2F5IHRoZW4gc2V0dGluZyB0aGlzIGVhY2ggdGltZT9cbiAgICAgICAgaWYgKGZpbHRlcnNbMF0udW5pZm9ybXMuZGltZW5zaW9ucylcbiAgICAgICAge1xuICAgICAgICAgICAgZmlsdGVyc1swXS51bmlmb3Jtcy5kaW1lbnNpb25zLnZhbHVlWzBdID0gdGhpcy5yZW5kZXJlci53aWR0aDtcbiAgICAgICAgICAgIGZpbHRlcnNbMF0udW5pZm9ybXMuZGltZW5zaW9ucy52YWx1ZVsxXSA9IHRoaXMucmVuZGVyZXIuaGVpZ2h0O1xuICAgICAgICAgICAgZmlsdGVyc1swXS51bmlmb3Jtcy5kaW1lbnNpb25zLnZhbHVlWzJdID0gdGhpcy5xdWFkLnZlcnRpY2VzWzBdO1xuICAgICAgICAgICAgZmlsdGVyc1swXS51bmlmb3Jtcy5kaW1lbnNpb25zLnZhbHVlWzNdID0gdGhpcy5xdWFkLnZlcnRpY2VzWzVdO1xuICAgICAgICB9XG5cbiAgICAgICAgZmlsdGVyc1swXS5hcHBseUZpbHRlciggdGhpcy5yZW5kZXJlciwgaW5wdXQsIG91dHB1dCApO1xuICAgICAgICB0aGlzLnJldHVyblJlbmRlclRhcmdldCggaW5wdXQgKTtcblxuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICB2YXIgZmxpcFRleHR1cmUgPSBpbnB1dDtcbiAgICAgICAgdmFyIGZsb3BUZXh0dXJlID0gdGhpcy5nZXRSZW5kZXJUYXJnZXQodHJ1ZSk7XG5cbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBmaWx0ZXJzLmxlbmd0aC0xOyBpKyspXG4gICAgICAgIHtcbiAgICAgICAgICAgIHZhciBmaWx0ZXIgPSBmaWx0ZXJzW2ldO1xuXG4gICAgICAgICAgICAvLyBUT0RPIChjZW5nbGVyKSAtIFRoZXJlIGhhcyB0byBiZSBhIGJldHRlciB3YXkgdGhlbiBzZXR0aW5nIHRoaXMgZWFjaCB0aW1lP1xuICAgICAgICAgICAgaWYgKGZpbHRlci51bmlmb3Jtcy5kaW1lbnNpb25zKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGZpbHRlci51bmlmb3Jtcy5kaW1lbnNpb25zLnZhbHVlWzBdID0gdGhpcy5yZW5kZXJlci53aWR0aDtcbiAgICAgICAgICAgICAgICBmaWx0ZXIudW5pZm9ybXMuZGltZW5zaW9ucy52YWx1ZVsxXSA9IHRoaXMucmVuZGVyZXIuaGVpZ2h0O1xuICAgICAgICAgICAgICAgIGZpbHRlci51bmlmb3Jtcy5kaW1lbnNpb25zLnZhbHVlWzJdID0gdGhpcy5xdWFkLnZlcnRpY2VzWzBdO1xuICAgICAgICAgICAgICAgIGZpbHRlci51bmlmb3Jtcy5kaW1lbnNpb25zLnZhbHVlWzNdID0gdGhpcy5xdWFkLnZlcnRpY2VzWzVdO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBmaWx0ZXIuYXBwbHlGaWx0ZXIoIHRoaXMucmVuZGVyZXIsIGZsaXBUZXh0dXJlLCBmbG9wVGV4dHVyZSApO1xuXG4gICAgICAgICAgICB2YXIgdGVtcCA9IGZsaXBUZXh0dXJlO1xuICAgICAgICAgICAgZmxpcFRleHR1cmUgPSBmbG9wVGV4dHVyZTtcbiAgICAgICAgICAgIGZsb3BUZXh0dXJlID0gdGVtcDtcbiAgICAgICAgfVxuXG4gICAgICAgIGZpbHRlcnNbZmlsdGVycy5sZW5ndGgtMV0uYXBwbHlGaWx0ZXIoIHRoaXMucmVuZGVyZXIsIGZsaXBUZXh0dXJlLCBvdXRwdXQgKTtcblxuICAgICAgICB0aGlzLnJldHVyblJlbmRlclRhcmdldCggZmxpcFRleHR1cmUgKTtcbiAgICAgICAgdGhpcy5yZXR1cm5SZW5kZXJUYXJnZXQoIGZsb3BUZXh0dXJlICk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZpbHRlckRhdGEuZmlsdGVyO1xufTtcblxuLyoqXG4gKiBHcmFicyBhbiByZW5kZXIgdGFyZ2V0IGZyb20gdGhlIGludGVybmFsIHBvb2xcbiAqXG4gKiBAcGFyYW0gY2xlYXIge2Jvb2xlYW59IFdoZXRoZXIgb3Igbm90IHdlIG5lZWQgdG8gY2xlYXIgdGhlIFJlbmRlclRhcmdldFxuICogQHJldHVybiB7UmVuZGVyVGFyZ2V0fVxuICovXG5GaWx0ZXJNYW5hZ2VyLnByb3RvdHlwZS5nZXRSZW5kZXJUYXJnZXQgPSBmdW5jdGlvbiAoIGNsZWFyIClcbntcbiAgICB2YXIgcmVuZGVyVGFyZ2V0ID0gdGhpcy50ZXh0dXJlUG9vbC5wb3AoKSB8fCBuZXcgUmVuZGVyVGFyZ2V0KHRoaXMucmVuZGVyZXIuZ2wsIHRoaXMudGV4dHVyZVNpemUud2lkdGgsIHRoaXMudGV4dHVyZVNpemUuaGVpZ2h0LCBDT05TVC5TQ0FMRV9NT0RFUy5MSU5FQVIsIHRoaXMucmVuZGVyZXIucmVzb2x1dGlvbiAqIENPTlNULkZJTFRFUl9SRVNPTFVUSU9OKTtcbiAgICByZW5kZXJUYXJnZXQuZnJhbWUgPSB0aGlzLmN1cnJlbnRGcmFtZTtcblxuICAgIGlmIChjbGVhcilcbiAgICB7XG4gICAgICAgIHJlbmRlclRhcmdldC5jbGVhcih0cnVlKTtcbiAgICB9XG5cbiAgICByZXR1cm4gcmVuZGVyVGFyZ2V0O1xufTtcblxuLypcbiAqIFJldHVybnMgYSBSZW5kZXJUYXJnZXQgdG8gdGhlIGludGVybmFsIHBvb2xcbiAqIEBwYXJhbSByZW5kZXJUYXJnZXQge1JlbmRlclRhcmdldH0gVGhlIFJlbmRlclRhcmdldCB3ZSB3YW50IHRvIHJldHVybiB0byB0aGUgcG9vbFxuICovXG5GaWx0ZXJNYW5hZ2VyLnByb3RvdHlwZS5yZXR1cm5SZW5kZXJUYXJnZXQgPSBmdW5jdGlvbiAocmVuZGVyVGFyZ2V0KVxue1xuICAgIHRoaXMudGV4dHVyZVBvb2wucHVzaCggcmVuZGVyVGFyZ2V0ICk7XG59O1xuXG4vKlxuICogQXBwbGllcyB0aGUgZmlsdGVyXG4gKiBAcGFyYW0gc2hhZGVyIHtTaGFkZXJ9IFRoZSBzaGFkZXIgdG8gdXBsb2FkXG4gKiBAcGFyYW0gaW5wdXRUYXJnZXQge1JlbmRlclRhcmdldH1cbiAqIEBwYXJhbSBvdXRwdXRUYXJnZXQge1JlbmRlclRhcmdldH1cbiAqIEBwYXJhbSBjbGVhciB7Ym9vbGVhbn0gV2hldGhlciBvciBub3Qgd2Ugd2FudCB0byBjbGVhciB0aGUgb3V0cHV0VGFyZ2V0XG4gKi9cbkZpbHRlck1hbmFnZXIucHJvdG90eXBlLmFwcGx5RmlsdGVyID0gZnVuY3Rpb24gKHNoYWRlciwgaW5wdXRUYXJnZXQsIG91dHB1dFRhcmdldCwgY2xlYXIpXG57XG4gICAgdmFyIGdsID0gdGhpcy5yZW5kZXJlci5nbDtcblxuICAgIHRoaXMucmVuZGVyZXIuc2V0UmVuZGVyVGFyZ2V0KG91dHB1dFRhcmdldCk7XG5cbiAgICBpZiAoY2xlYXIpXG4gICAge1xuICAgICAgICBvdXRwdXRUYXJnZXQuY2xlYXIoKTtcbiAgICB9XG5cbiAgICAvLyBzZXQgdGhlIHNoYWRlclxuICAgIHRoaXMucmVuZGVyZXIuc2hhZGVyTWFuYWdlci5zZXRTaGFkZXIoc2hhZGVyKTtcblxuICAgIC8vIFRPRE8gKGNlbmdsZXIpIC0gQ2FuIHRoaXMgYmUgY2FjaGVkIGFuZCBub3QgYHRvQXJyYXlgZWQgZWFjaCBmcmFtZT9cbiAgICBzaGFkZXIudW5pZm9ybXMucHJvamVjdGlvbk1hdHJpeC52YWx1ZSA9IHRoaXMucmVuZGVyZXIuY3VycmVudFJlbmRlclRhcmdldC5wcm9qZWN0aW9uTWF0cml4LnRvQXJyYXkodHJ1ZSk7XG5cbiAgICAvL1RPRE8gY2FuIHRoaXMgYmUgb3B0aW1pc2VkP1xuICAgIHNoYWRlci5zeW5jVW5pZm9ybXMoKTtcbi8qXG4gICAgZ2wudmVydGV4QXR0cmliUG9pbnRlcihzaGFkZXIuYXR0cmlidXRlcy5hVmVydGV4UG9zaXRpb24sIDIsIGdsLkZMT0FULCBmYWxzZSwgMCwgMCk7XG4gICAgZ2wudmVydGV4QXR0cmliUG9pbnRlcihzaGFkZXIuYXR0cmlidXRlcy5hVGV4dHVyZUNvb3JkLCAyLCBnbC5GTE9BVCwgZmFsc2UsIDAsIDIgKiA0ICogNCk7XG4gICAgZ2wudmVydGV4QXR0cmliUG9pbnRlcihzaGFkZXIuYXR0cmlidXRlcy5hQ29sb3IsIDQsIGdsLkZMT0FULCBmYWxzZSwgMCwgNCAqIDQgKiA0KTtcbiovXG5cbiAgICBnbC5hY3RpdmVUZXh0dXJlKGdsLlRFWFRVUkUwKTtcbiAgICBnbC5iaW5kVGV4dHVyZShnbC5URVhUVVJFXzJELCBpbnB1dFRhcmdldC50ZXh0dXJlKTtcblxuICAgIGdsLmRyYXdFbGVtZW50cyhnbC5UUklBTkdMRVMsIDYsIGdsLlVOU0lHTkVEX1NIT1JULCAwICk7XG4gICAgdGhpcy5yZW5kZXJlci5kcmF3Q291bnQrKztcbn07XG5cbi8qXG4gKiBDYWxjdWxhdGVzIHRoZSBtYXBwZWQgbWF0cml4XG4gKiBAcGFyYW0gZmlsdGVyQXJlYSB7UmVjdGFuZ2xlfSBUaGUgZmlsdGVyIGFyZWFcbiAqIEBwYXJhbSBzcHJpdGUge1Nwcml0ZX0gdGhlIHRhcmdldCBzcHJpdGVcbiAqIEBwYXJhbSBvdXRwdXRNYXRyaXgge01hdHJpeH0gQGFsdmluXG4gKi9cbi8vIFRPRE8gcGxheWluZyBhcm91bmQgaGVyZS4uIHRoaXMgaXMgdGVtcG9yYXJ5IC0gKHdpbGwgZW5kIHVwIGluIHRoZSBzaGFkZXIpXG5GaWx0ZXJNYW5hZ2VyLnByb3RvdHlwZS5jYWxjdWxhdGVNYXBwZWRNYXRyaXggPSBmdW5jdGlvbiAoZmlsdGVyQXJlYSwgc3ByaXRlLCBvdXRwdXRNYXRyaXgpXG57XG4gICAgdmFyIHdvcmxkVHJhbnNmb3JtID0gc3ByaXRlLndvcmxkVHJhbnNmb3JtLmNvcHkobWF0aC5NYXRyaXguVEVNUF9NQVRSSVgpLFxuICAgIHRleHR1cmUgPSBzcHJpdGUuX3RleHR1cmUuYmFzZVRleHR1cmU7XG5cbiAgICB2YXIgbWFwcGVkTWF0cml4ID0gb3V0cHV0TWF0cml4LmlkZW50aXR5KCk7XG5cbiAgICAvLyBzY2FsZS4uXG4gICAgdmFyIHJhdGlvID0gdGhpcy50ZXh0dXJlU2l6ZS5oZWlnaHQgLyB0aGlzLnRleHR1cmVTaXplLndpZHRoO1xuXG4gICAgbWFwcGVkTWF0cml4LnRyYW5zbGF0ZShmaWx0ZXJBcmVhLnggLyB0aGlzLnRleHR1cmVTaXplLndpZHRoLCBmaWx0ZXJBcmVhLnkgLyB0aGlzLnRleHR1cmVTaXplLmhlaWdodCApO1xuXG4gICAgbWFwcGVkTWF0cml4LnNjYWxlKDEgLCByYXRpbyk7XG5cbiAgICB2YXIgdHJhbnNsYXRlU2NhbGVYID0gKHRoaXMudGV4dHVyZVNpemUud2lkdGggLyB0ZXh0dXJlLndpZHRoKTtcbiAgICB2YXIgdHJhbnNsYXRlU2NhbGVZID0gKHRoaXMudGV4dHVyZVNpemUuaGVpZ2h0IC8gdGV4dHVyZS5oZWlnaHQpO1xuXG4gICAgd29ybGRUcmFuc2Zvcm0udHggLz0gdGV4dHVyZS53aWR0aCAqIHRyYW5zbGF0ZVNjYWxlWDtcbiAgICB3b3JsZFRyYW5zZm9ybS50eSAvPSB0ZXh0dXJlLndpZHRoICogdHJhbnNsYXRlU2NhbGVYO1xuXG4gICAgd29ybGRUcmFuc2Zvcm0uaW52ZXJ0KCk7XG5cbiAgICBtYXBwZWRNYXRyaXgucHJlcGVuZCh3b3JsZFRyYW5zZm9ybSk7XG5cbiAgICAvLyBhcHBseSBpbnZlcnNlIHNjYWxlLi5cbiAgICBtYXBwZWRNYXRyaXguc2NhbGUoMSAsIDEvcmF0aW8pO1xuXG4gICAgbWFwcGVkTWF0cml4LnNjYWxlKCB0cmFuc2xhdGVTY2FsZVggLCB0cmFuc2xhdGVTY2FsZVkgKTtcblxuICAgIG1hcHBlZE1hdHJpeC50cmFuc2xhdGUoc3ByaXRlLmFuY2hvci54LCBzcHJpdGUuYW5jaG9yLnkpO1xuXG4gICAgcmV0dXJuIG1hcHBlZE1hdHJpeDtcblxuICAgIC8vIEtlZXBpbmcgdGhlIG9yZ2luYWwgYXMgYSByZW1pbmRlciB0byBtZSBvbiBob3cgdGhpcyB3b3JrcyFcbiAgICAvL1xuICAgIC8vIHZhciBtID0gbmV3IG1hdGguTWF0cml4KCk7XG5cbiAgICAvLyAvLyBzY2FsZS4uXG4gICAgLy8gdmFyIHJhdGlvID0gdGhpcy50ZXh0dXJlU2l6ZS5oZWlnaHQgLyB0aGlzLnRleHR1cmVTaXplLndpZHRoO1xuXG4gICAgLy8gbS50cmFuc2xhdGUoZmlsdGVyQXJlYS54IC8gdGhpcy50ZXh0dXJlU2l6ZS53aWR0aCwgZmlsdGVyQXJlYS55IC8gdGhpcy50ZXh0dXJlU2l6ZS5oZWlnaHQpO1xuXG5cbiAgICAvLyBtLnNjYWxlKDEgLCByYXRpbyk7XG5cblxuICAgIC8vIHZhciB0cmFuc2Zvcm0gPSB3dC5jbG9uZSgpO1xuXG4gICAgLy8gdmFyIHRyYW5zbGF0ZVNjYWxlWCA9ICh0aGlzLnRleHR1cmVTaXplLndpZHRoIC8gNjIwKTtcbiAgICAvLyB2YXIgdHJhbnNsYXRlU2NhbGVZID0gKHRoaXMudGV4dHVyZVNpemUuaGVpZ2h0IC8gMzgwKTtcblxuICAgIC8vIHRyYW5zZm9ybS50eCAvPSA2MjAgKiB0cmFuc2xhdGVTY2FsZVg7XG4gICAgLy8gdHJhbnNmb3JtLnR5IC89IDYyMCAqIHRyYW5zbGF0ZVNjYWxlWDtcblxuICAgIC8vIHRyYW5zZm9ybS5pbnZlcnQoKTtcblxuICAgIC8vIHRyYW5zZm9ybS5hcHBlbmQobSk7XG5cbiAgICAvLyAvLyBhcHBseSBpbnZlcnNlIHNjYWxlLi5cbiAgICAvLyB0cmFuc2Zvcm0uc2NhbGUoMSAsIDEvcmF0aW8pO1xuXG4gICAgLy8gdHJhbnNmb3JtLnNjYWxlKCB0cmFuc2xhdGVTY2FsZVggLCB0cmFuc2xhdGVTY2FsZVkgKTtcblxuICAgIC8vIHJldHVybiB0cmFuc2Zvcm07XG59O1xuXG4vKlxuICogQ29uc3RyYWlucyB0aGUgZmlsdGVyIGFyZWEgdG8gdGhlIHRleHR1cmUgc2l6ZVxuICogQHBhcmFtIGZpbHRlckFyZWEge1JlY3RhbmdsZX0gVGhlIGZpbHRlciBhcmVhIHdlIHdhbnQgdG8gY2FwXG4gKi9cbkZpbHRlck1hbmFnZXIucHJvdG90eXBlLmNhcEZpbHRlckFyZWEgPSBmdW5jdGlvbiAoZmlsdGVyQXJlYSlcbntcbiAgICBpZiAoZmlsdGVyQXJlYS54IDwgMClcbiAgICB7XG4gICAgICAgIGZpbHRlckFyZWEud2lkdGggKz0gZmlsdGVyQXJlYS54O1xuICAgICAgICBmaWx0ZXJBcmVhLnggPSAwO1xuICAgIH1cblxuICAgIGlmIChmaWx0ZXJBcmVhLnkgPCAwKVxuICAgIHtcbiAgICAgICAgZmlsdGVyQXJlYS5oZWlnaHQgKz0gZmlsdGVyQXJlYS55O1xuICAgICAgICBmaWx0ZXJBcmVhLnkgPSAwO1xuICAgIH1cblxuICAgIGlmICggZmlsdGVyQXJlYS54ICsgZmlsdGVyQXJlYS53aWR0aCA+IHRoaXMudGV4dHVyZVNpemUud2lkdGggKVxuICAgIHtcbiAgICAgICAgZmlsdGVyQXJlYS53aWR0aCA9IHRoaXMudGV4dHVyZVNpemUud2lkdGggLSBmaWx0ZXJBcmVhLng7XG4gICAgfVxuXG4gICAgaWYgKCBmaWx0ZXJBcmVhLnkgKyBmaWx0ZXJBcmVhLmhlaWdodCA+IHRoaXMudGV4dHVyZVNpemUuaGVpZ2h0IClcbiAgICB7XG4gICAgICAgIGZpbHRlckFyZWEuaGVpZ2h0ID0gdGhpcy50ZXh0dXJlU2l6ZS5oZWlnaHQgLSBmaWx0ZXJBcmVhLnk7XG4gICAgfVxufTtcblxuLypcbiAqIFJlc2l6ZXMgYWxsIHRoZSByZW5kZXIgdGFyZ2V0cyBpbiB0aGUgcG9vbFxuICogQHBhcmFtIHdpZHRoIHtudW1iZXJ9IHRoZSBuZXcgd2lkdGhcbiAqIEBwYXJhbSBoZWlnaHQge251bWJlcn0gdGhlIG5ldyBoZWlnaHRcbiAqL1xuRmlsdGVyTWFuYWdlci5wcm90b3R5cGUucmVzaXplID0gZnVuY3Rpb24gKCB3aWR0aCwgaGVpZ2h0IClcbntcbiAgICB0aGlzLnRleHR1cmVTaXplLndpZHRoID0gd2lkdGg7XG4gICAgdGhpcy50ZXh0dXJlU2l6ZS5oZWlnaHQgPSBoZWlnaHQ7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMudGV4dHVyZVBvb2wubGVuZ3RoOyBpKyspXG4gICAge1xuICAgICAgICB0aGlzLnRleHR1cmVQb29sW2ldLnJlc2l6ZSggd2lkdGgsIGhlaWdodCApO1xuICAgIH1cbn07XG5cbi8qKlxuICogRGVzdHJveXMgdGhlIGZpbHRlciBhbmQgcmVtb3ZlcyBpdCBmcm9tIHRoZSBmaWx0ZXIgc3RhY2suXG4gKlxuICovXG5GaWx0ZXJNYW5hZ2VyLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLnF1YWQuZGVzdHJveSgpO1xuICAgIFxuICAgIFdlYkdMTWFuYWdlci5wcm90b3R5cGUuZGVzdHJveS5jYWxsKHRoaXMpO1xuICAgIFxuICAgIHRoaXMuZmlsdGVyU3RhY2sgPSBudWxsO1xuICAgIHRoaXMub2Zmc2V0WSA9IDA7XG5cbiAgICAvLyBkZXN0cm95IHRleHR1cmVzXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLnRleHR1cmVQb29sLmxlbmd0aDsgaSsrKVxuICAgIHtcbiAgICAgICAgdGhpcy50ZXh0dXJlUG9vbFtpXS5kZXN0cm95KCk7XG4gICAgfVxuXG4gICAgdGhpcy50ZXh0dXJlUG9vbCA9IG51bGw7XG59O1xuIiwidmFyIFdlYkdMTWFuYWdlciA9IHJlcXVpcmUoJy4vV2ViR0xNYW5hZ2VyJyksXG4gICAgQWxwaGFNYXNrRmlsdGVyID0gcmVxdWlyZSgnLi4vZmlsdGVycy9TcHJpdGVNYXNrRmlsdGVyJyk7XG5cbi8qKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLldlYkdMUmVuZGVyZXJ9IFRoZSByZW5kZXJlciB0aGlzIG1hbmFnZXIgd29ya3MgZm9yLlxuICovXG5mdW5jdGlvbiBNYXNrTWFuYWdlcihyZW5kZXJlcilcbntcbiAgICBXZWJHTE1hbmFnZXIuY2FsbCh0aGlzLCByZW5kZXJlcik7XG5cbiAgICB0aGlzLnN0ZW5jaWxTdGFjayA9IFtdO1xuICAgIHRoaXMucmV2ZXJzZSA9IHRydWU7XG4gICAgdGhpcy5jb3VudCA9IDA7XG5cbiAgICB0aGlzLmFscGhhTWFza1Bvb2wgPSBbXTtcbn1cblxuTWFza01hbmFnZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShXZWJHTE1hbmFnZXIucHJvdG90eXBlKTtcbk1hc2tNYW5hZ2VyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IE1hc2tNYW5hZ2VyO1xubW9kdWxlLmV4cG9ydHMgPSBNYXNrTWFuYWdlcjtcblxuLyoqXG4gKiBBcHBsaWVzIHRoZSBNYXNrIGFuZCBhZGRzIGl0IHRvIHRoZSBjdXJyZW50IGZpbHRlciBzdGFjay5cbiAqXG4gKiBAcGFyYW0gZ3JhcGhpY3Mge1BJWEkuR3JhcGhpY3N9XG4gKiBAcGFyYW0gd2ViR0xEYXRhIHthbnlbXX1cbiAqL1xuTWFza01hbmFnZXIucHJvdG90eXBlLnB1c2hNYXNrID0gZnVuY3Rpb24gKHRhcmdldCwgbWFza0RhdGEpXG57XG4gICAgaWYgKG1hc2tEYXRhLnRleHR1cmUpXG4gICAge1xuICAgICAgICB0aGlzLnB1c2hTcHJpdGVNYXNrKHRhcmdldCwgbWFza0RhdGEpO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICB0aGlzLnB1c2hTdGVuY2lsTWFzayh0YXJnZXQsIG1hc2tEYXRhKTtcbiAgICB9XG5cbn07XG5cbi8qKlxuICogUmVtb3ZlcyB0aGUgbGFzdCBtYXNrIGZyb20gdGhlIG1hc2sgc3RhY2sgYW5kIGRvZXNuJ3QgcmV0dXJuIGl0LlxuICpcbiAqIEBwYXJhbSB0YXJnZXQge1BJWEkuUmVuZGVyVGFyZ2V0fVxuICogQHBhcmFtIG1hc2tEYXRhIHthbnlbXX1cbiAqL1xuTWFza01hbmFnZXIucHJvdG90eXBlLnBvcE1hc2sgPSBmdW5jdGlvbiAodGFyZ2V0LCBtYXNrRGF0YSlcbntcbiAgICBpZiAobWFza0RhdGEudGV4dHVyZSlcbiAgICB7XG4gICAgICAgIHRoaXMucG9wU3ByaXRlTWFzayh0YXJnZXQsIG1hc2tEYXRhKTtcbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgdGhpcy5wb3BTdGVuY2lsTWFzayh0YXJnZXQsIG1hc2tEYXRhKTtcbiAgICB9XG59O1xuXG4vKipcbiAqIEFwcGxpZXMgdGhlIE1hc2sgYW5kIGFkZHMgaXQgdG8gdGhlIGN1cnJlbnQgZmlsdGVyIHN0YWNrLlxuICpcbiAqIEBwYXJhbSB0YXJnZXQge1BJWEkuUmVuZGVyVGFyZ2V0fVxuICogQHBhcmFtIG1hc2tEYXRhIHthbnlbXX1cbiAqL1xuTWFza01hbmFnZXIucHJvdG90eXBlLnB1c2hTcHJpdGVNYXNrID0gZnVuY3Rpb24gKHRhcmdldCwgbWFza0RhdGEpXG57XG4gICAgdmFyIGFscGhhTWFza0ZpbHRlciA9IHRoaXMuYWxwaGFNYXNrUG9vbC5wb3AoKTtcblxuICAgIGlmICghYWxwaGFNYXNrRmlsdGVyKVxuICAgIHtcbiAgICAgICAgYWxwaGFNYXNrRmlsdGVyID0gW25ldyBBbHBoYU1hc2tGaWx0ZXIobWFza0RhdGEpXTtcbiAgICB9XG5cbiAgICBhbHBoYU1hc2tGaWx0ZXJbMF0ubWFza1Nwcml0ZSA9IG1hc2tEYXRhO1xuICAgIHRoaXMucmVuZGVyZXIuZmlsdGVyTWFuYWdlci5wdXNoRmlsdGVyKHRhcmdldCwgYWxwaGFNYXNrRmlsdGVyKTtcbn07XG5cbi8qKlxuICogUmVtb3ZlcyB0aGUgbGFzdCBmaWx0ZXIgZnJvbSB0aGUgZmlsdGVyIHN0YWNrIGFuZCBkb2Vzbid0IHJldHVybiBpdC5cbiAqXG4gKi9cbk1hc2tNYW5hZ2VyLnByb3RvdHlwZS5wb3BTcHJpdGVNYXNrID0gZnVuY3Rpb24gKClcbntcbiAgICB2YXIgZmlsdGVycyA9IHRoaXMucmVuZGVyZXIuZmlsdGVyTWFuYWdlci5wb3BGaWx0ZXIoKTtcblxuICAgIHRoaXMuYWxwaGFNYXNrUG9vbC5wdXNoKGZpbHRlcnMpO1xufTtcblxuXG4vKipcbiAqIEFwcGxpZXMgdGhlIE1hc2sgYW5kIGFkZHMgaXQgdG8gdGhlIGN1cnJlbnQgZmlsdGVyIHN0YWNrLlxuICpcbiAqIEBwYXJhbSB0YXJnZXQge1BJWEkuUmVuZGVyVGFyZ2V0fVxuICogQHBhcmFtIG1hc2tEYXRhIHthbnlbXX1cbiAqL1xuTWFza01hbmFnZXIucHJvdG90eXBlLnB1c2hTdGVuY2lsTWFzayA9IGZ1bmN0aW9uICh0YXJnZXQsIG1hc2tEYXRhKVxue1xuICAgIHRoaXMucmVuZGVyZXIuc3RlbmNpbE1hbmFnZXIucHVzaE1hc2sobWFza0RhdGEpO1xufTtcblxuLyoqXG4gKiBSZW1vdmVzIHRoZSBsYXN0IGZpbHRlciBmcm9tIHRoZSBmaWx0ZXIgc3RhY2sgYW5kIGRvZXNuJ3QgcmV0dXJuIGl0LlxuICpcbiAqIEBwYXJhbSB0YXJnZXQge1BJWEkuUmVuZGVyVGFyZ2V0fVxuICogQHBhcmFtIG1hc2tEYXRhIHthbnlbXX1cbiAqL1xuTWFza01hbmFnZXIucHJvdG90eXBlLnBvcFN0ZW5jaWxNYXNrID0gZnVuY3Rpb24gKHRhcmdldCwgbWFza0RhdGEpXG57XG4gICAgdGhpcy5yZW5kZXJlci5zdGVuY2lsTWFuYWdlci5wb3BNYXNrKG1hc2tEYXRhKTtcbn07XG5cbiIsInZhciBXZWJHTE1hbmFnZXIgPSByZXF1aXJlKCcuL1dlYkdMTWFuYWdlcicpLFxuICAgIFRleHR1cmVTaGFkZXIgPSByZXF1aXJlKCcuLi9zaGFkZXJzL1RleHR1cmVTaGFkZXInKSxcbiAgICBDb21wbGV4UHJpbWl0aXZlU2hhZGVyID0gcmVxdWlyZSgnLi4vc2hhZGVycy9Db21wbGV4UHJpbWl0aXZlU2hhZGVyJyksXG4gICAgUHJpbWl0aXZlU2hhZGVyID0gcmVxdWlyZSgnLi4vc2hhZGVycy9QcmltaXRpdmVTaGFkZXInKSxcbiAgICB1dGlscyA9IHJlcXVpcmUoJy4uLy4uLy4uL3V0aWxzJyk7XG5cbi8qKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQGV4dGVuZHMgUElYSS5XZWJHTE1hbmFnZXJcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5XZWJHTFJlbmRlcmVyfSBUaGUgcmVuZGVyZXIgdGhpcyBtYW5hZ2VyIHdvcmtzIGZvci5cbiAqL1xuZnVuY3Rpb24gU2hhZGVyTWFuYWdlcihyZW5kZXJlcilcbntcbiAgICBXZWJHTE1hbmFnZXIuY2FsbCh0aGlzLCByZW5kZXJlcik7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy5tYXhBdHRpYnMgPSAxMDtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge2FueVtdfVxuICAgICAqL1xuICAgIHRoaXMuYXR0cmliU3RhdGUgPSBbXTtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge2FueVtdfVxuICAgICAqL1xuICAgIHRoaXMudGVtcEF0dHJpYlN0YXRlID0gW107XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMubWF4QXR0aWJzOyBpKyspXG4gICAge1xuICAgICAgICB0aGlzLmF0dHJpYlN0YXRlW2ldID0gZmFsc2U7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7YW55W119XG4gICAgICovXG4gICAgdGhpcy5zdGFjayA9IFtdO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fY3VycmVudElkID0gLTE7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlNoYWRlcn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuY3VycmVudFNoYWRlciA9IG51bGw7XG5cbi8vICAgIHRoaXMuaW5pdFBsdWdpbnMoKTtcbn1cblxuU2hhZGVyTWFuYWdlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFdlYkdMTWFuYWdlci5wcm90b3R5cGUpO1xuU2hhZGVyTWFuYWdlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBTaGFkZXJNYW5hZ2VyO1xudXRpbHMucGx1Z2luVGFyZ2V0Lm1peGluKFNoYWRlck1hbmFnZXIpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IFNoYWRlck1hbmFnZXI7XG5cbi8qKlxuICogQ2FsbGVkIHdoZW4gdGhlcmUgaXMgYSBXZWJHTCBjb250ZXh0IGNoYW5nZS5cbiAqXG4gKi9cblNoYWRlck1hbmFnZXIucHJvdG90eXBlLm9uQ29udGV4dENoYW5nZSA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy5pbml0UGx1Z2lucygpO1xuXG4gICAgdmFyIGdsID0gdGhpcy5yZW5kZXJlci5nbDtcblxuICAgIC8vIGdldCB0aGUgbWF4aW11bSBudW1iZXIgb2YgYXR0cmlidXRlIGNvcnJlY3RseSBhcyB0aGlzIHRlbmRzIHRvIHZhcnlcbiAgICB0aGlzLm1heEF0dGlicyA9IGdsLmdldFBhcmFtZXRlcihnbC5NQVhfVkVSVEVYX0FUVFJJQlMpO1xuXG4gICAgdGhpcy5hdHRyaWJTdGF0ZSA9IFtdO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLm1heEF0dGliczsgaSsrKVxuICAgIHtcbiAgICAgICAgdGhpcy5hdHRyaWJTdGF0ZVtpXSA9IGZhbHNlO1xuICAgIH1cblxuICAgIC8vIFRPRE8gLSBXaHkgYXJlIHRoZXNlIG5vdCBwbHVnaW5zPyBXZSBjYW4ndCBkZWNvdXBsZSBwcmltaXRpdmVzIHVubGVzcyB0aGV5IGFyZS4uLi5cbiAgICB0aGlzLmRlZmF1bHRTaGFkZXIgPSBuZXcgVGV4dHVyZVNoYWRlcih0aGlzKTtcbiAgICB0aGlzLnByaW1pdGl2ZVNoYWRlciA9IG5ldyBQcmltaXRpdmVTaGFkZXIodGhpcyk7XG4gICAgdGhpcy5jb21wbGV4UHJpbWl0aXZlU2hhZGVyID0gbmV3IENvbXBsZXhQcmltaXRpdmVTaGFkZXIodGhpcyk7XG59O1xuXG4vKipcbiAqIFRha2VzIHRoZSBhdHRyaWJ1dGVzIGdpdmVuIGluIHBhcmFtZXRlcnMgYW5kIHVwbG9hZHMgdGhlbS5cbiAqXG4gKiBAcGFyYW0gYXR0cmlicyB7YW55W119IGF0dHJpYnNcbiAqL1xuU2hhZGVyTWFuYWdlci5wcm90b3R5cGUuc2V0QXR0cmlicyA9IGZ1bmN0aW9uIChhdHRyaWJzKVxue1xuICAgIC8vIHJlc2V0IHRlbXAgc3RhdGVcbiAgICB2YXIgaTtcblxuICAgIGZvciAoaSA9IDA7IGkgPCB0aGlzLnRlbXBBdHRyaWJTdGF0ZS5sZW5ndGg7IGkrKylcbiAgICB7XG4gICAgICAgIHRoaXMudGVtcEF0dHJpYlN0YXRlW2ldID0gZmFsc2U7XG4gICAgfVxuXG4gICAgLy8gc2V0IHRoZSBuZXcgYXR0cmlic1xuICAgIGZvciAodmFyIGEgaW4gYXR0cmlicylcbiAgICB7XG4gICAgICAgIHRoaXMudGVtcEF0dHJpYlN0YXRlW2F0dHJpYnNbYV1dID0gdHJ1ZTtcbiAgICB9XG5cbiAgICB2YXIgZ2wgPSB0aGlzLnJlbmRlcmVyLmdsO1xuXG4gICAgZm9yIChpID0gMDsgaSA8IHRoaXMuYXR0cmliU3RhdGUubGVuZ3RoOyBpKyspXG4gICAge1xuICAgICAgICBpZiAodGhpcy5hdHRyaWJTdGF0ZVtpXSAhPT0gdGhpcy50ZW1wQXR0cmliU3RhdGVbaV0pXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuYXR0cmliU3RhdGVbaV0gPSB0aGlzLnRlbXBBdHRyaWJTdGF0ZVtpXTtcblxuICAgICAgICAgICAgaWYgKHRoaXMuYXR0cmliU3RhdGVbaV0pXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgZ2wuZW5hYmxlVmVydGV4QXR0cmliQXJyYXkoaSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgZ2wuZGlzYWJsZVZlcnRleEF0dHJpYkFycmF5KGkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxufTtcblxuLyoqXG4gKiBTZXRzIHRoZSBjdXJyZW50IHNoYWRlci5cbiAqXG4gKiBAcGFyYW0gc2hhZGVyIHtQSVhJLlNoYWRlcn0gdGhlIHNoYWRlciB0byB1cGxvYWRcbiAqL1xuU2hhZGVyTWFuYWdlci5wcm90b3R5cGUuc2V0U2hhZGVyID0gZnVuY3Rpb24gKHNoYWRlcilcbntcbiAgICByZXR1cm47XG4gICAgaWYgKHRoaXMuX2N1cnJlbnRJZCA9PT0gc2hhZGVyLnVpZClcbiAgICB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICB0aGlzLl9jdXJyZW50SWQgPSBzaGFkZXIudWlkO1xuXG4gICAgdGhpcy5jdXJyZW50U2hhZGVyID0gc2hhZGVyO1xuXG4gICAgdGhpcy5yZW5kZXJlci5nbC51c2VQcm9ncmFtKHNoYWRlci5wcm9ncmFtKTtcbiAgICB0aGlzLnNldEF0dHJpYnMoc2hhZGVyLmF0dHJpYnV0ZXMpO1xuXG4gICAgcmV0dXJuIHRydWU7XG59O1xuXG4vKipcbiAqIERlc3Ryb3lzIHRoaXMgb2JqZWN0LlxuICpcbiAqL1xuU2hhZGVyTWFuYWdlci5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy5wcmltaXRpdmVTaGFkZXIuZGVzdHJveSgpO1xuICAgIHRoaXMuY29tcGxleFByaW1pdGl2ZVNoYWRlci5kZXN0cm95KCk7XG4gICAgV2ViR0xNYW5hZ2VyLnByb3RvdHlwZS5kZXN0cm95LmNhbGwodGhpcyk7XG5cbiAgICB0aGlzLmRlc3Ryb3lQbHVnaW5zKCk7XG5cbiAgICB0aGlzLmF0dHJpYlN0YXRlID0gbnVsbDtcblxuICAgIHRoaXMudGVtcEF0dHJpYlN0YXRlID0gbnVsbDtcbn07XG4iLCJ2YXIgV2ViR0xNYW5hZ2VyID0gcmVxdWlyZSgnLi9XZWJHTE1hbmFnZXInKSxcbiAgICB1dGlscyA9IHJlcXVpcmUoJy4uLy4uLy4uL3V0aWxzJyk7XG5cbi8qKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLldlYkdMUmVuZGVyZXJ9IFRoZSByZW5kZXJlciB0aGlzIG1hbmFnZXIgd29ya3MgZm9yLlxuICovXG5mdW5jdGlvbiBXZWJHTE1hc2tNYW5hZ2VyKHJlbmRlcmVyKVxue1xuICAgIFdlYkdMTWFuYWdlci5jYWxsKHRoaXMsIHJlbmRlcmVyKTtcbiAgICB0aGlzLnN0ZW5jaWxNYXNrU3RhY2sgPSBudWxsO1xufVxuXG5XZWJHTE1hc2tNYW5hZ2VyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoV2ViR0xNYW5hZ2VyLnByb3RvdHlwZSk7XG5XZWJHTE1hc2tNYW5hZ2VyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFdlYkdMTWFza01hbmFnZXI7XG5tb2R1bGUuZXhwb3J0cyA9IFdlYkdMTWFza01hbmFnZXI7XG5cbi8qKlxuICogQ2hhbmdlcyB0aGUgbWFzayBzdGFjayB0aGF0IGlzIHVzZWQgYnkgdGhpcyBtYW5hZ2VyLlxuICpcbiAqIEBwYXJhbSBzdGVuY2lsTWFza1N0YWNrIHtQSVhJLlN0ZW5jaWxNYXNrU3RhY2t9IFRoZSBtYXNrIHN0YWNrXG4gKi9cbldlYkdMTWFza01hbmFnZXIucHJvdG90eXBlLnNldE1hc2tTdGFjayA9IGZ1bmN0aW9uICggc3RlbmNpbE1hc2tTdGFjayApXG57XG4gICAgdGhpcy5zdGVuY2lsTWFza1N0YWNrID0gc3RlbmNpbE1hc2tTdGFjaztcblxuICAgIHZhciBnbCA9IHRoaXMucmVuZGVyZXIuZ2w7XG5cbiAgICBpZiAoc3RlbmNpbE1hc2tTdGFjay5zdGVuY2lsU3RhY2subGVuZ3RoID09PSAwKVxuICAgIHtcbiAgICAgICAgZ2wuZGlzYWJsZShnbC5TVEVOQ0lMX1RFU1QpO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICBnbC5lbmFibGUoZ2wuU1RFTkNJTF9URVNUKTtcbiAgICB9XG59O1xuXG4vKipcbiAqIEFwcGxpZXMgdGhlIE1hc2sgYW5kIGFkZHMgaXQgdG8gdGhlIGN1cnJlbnQgZmlsdGVyIHN0YWNrLiBAYWx2aW5cbiAqXG4gKiBAcGFyYW0gZ3JhcGhpY3Mge1BJWEkuR3JhcGhpY3N9XG4gKiBAcGFyYW0gd2ViR0xEYXRhIHthbnlbXX1cbiAqL1xuV2ViR0xNYXNrTWFuYWdlci5wcm90b3R5cGUucHVzaFN0ZW5jaWwgPSBmdW5jdGlvbiAoZ3JhcGhpY3MsIHdlYkdMRGF0YSlcbntcbiAgICB0aGlzLnJlbmRlcmVyLl9hY3RpdmVSZW5kZXJUYXJnZXQuYXR0YWNoU3RlbmNpbEJ1ZmZlcigpO1xuXG4gICAgdmFyIGdsID0gdGhpcy5yZW5kZXJlci5nbCxcbiAgICAgICAgc21zID0gdGhpcy5zdGVuY2lsTWFza1N0YWNrO1xuXG4gICAgdGhpcy5iaW5kR3JhcGhpY3MoZ3JhcGhpY3MsIHdlYkdMRGF0YSk7XG5cbiAgICBpZiAoc21zLnN0ZW5jaWxTdGFjay5sZW5ndGggPT09IDApXG4gICAge1xuICAgICAgICBnbC5lbmFibGUoZ2wuU1RFTkNJTF9URVNUKTtcbiAgICAgICAgZ2wuY2xlYXIoZ2wuU1RFTkNJTF9CVUZGRVJfQklUKTtcbiAgICAgICAgc21zLnJldmVyc2UgPSB0cnVlO1xuICAgICAgICBzbXMuY291bnQgPSAwO1xuICAgIH1cblxuICAgIHNtcy5zdGVuY2lsU3RhY2sucHVzaCh3ZWJHTERhdGEpO1xuXG4gICAgdmFyIGxldmVsID0gc21zLmNvdW50O1xuXG4gICAgZ2wuY29sb3JNYXNrKGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlKTtcblxuICAgIGdsLnN0ZW5jaWxGdW5jKGdsLkFMV0FZUywwLDB4RkYpO1xuICAgIGdsLnN0ZW5jaWxPcChnbC5LRUVQLGdsLktFRVAsZ2wuSU5WRVJUKTtcblxuICAgIC8vIGRyYXcgdGhlIHRyaWFuZ2xlIHN0cmlwIVxuXG4gICAgaWYgKHdlYkdMRGF0YS5tb2RlID09PSAxKVxuICAgIHtcbiAgICAgICAgZ2wuZHJhd0VsZW1lbnRzKGdsLlRSSUFOR0xFX0ZBTiwgIHdlYkdMRGF0YS5pbmRpY2VzLmxlbmd0aCAtIDQsIGdsLlVOU0lHTkVEX1NIT1JULCAwICk7XG5cbiAgICAgICAgaWYgKHNtcy5yZXZlcnNlKVxuICAgICAgICB7XG4gICAgICAgICAgICBnbC5zdGVuY2lsRnVuYyhnbC5FUVVBTCwgMHhGRiAtIGxldmVsLCAweEZGKTtcbiAgICAgICAgICAgIGdsLnN0ZW5jaWxPcChnbC5LRUVQLGdsLktFRVAsZ2wuREVDUik7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgICBnbC5zdGVuY2lsRnVuYyhnbC5FUVVBTCxsZXZlbCwgMHhGRik7XG4gICAgICAgICAgICBnbC5zdGVuY2lsT3AoZ2wuS0VFUCxnbC5LRUVQLGdsLklOQ1IpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gZHJhdyBhIHF1YWQgdG8gaW5jcmVtZW50Li5cbiAgICAgICAgZ2wuZHJhd0VsZW1lbnRzKGdsLlRSSUFOR0xFX0ZBTiwgNCwgZ2wuVU5TSUdORURfU0hPUlQsICggd2ViR0xEYXRhLmluZGljZXMubGVuZ3RoIC0gNCApICogMiApO1xuXG4gICAgICAgIGlmIChzbXMucmV2ZXJzZSlcbiAgICAgICAge1xuICAgICAgICAgICAgZ2wuc3RlbmNpbEZ1bmMoZ2wuRVFVQUwsMHhGRi0obGV2ZWwrMSksIDB4RkYpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2VcbiAgICAgICAge1xuICAgICAgICAgICAgZ2wuc3RlbmNpbEZ1bmMoZ2wuRVFVQUwsbGV2ZWwrMSwgMHhGRik7XG4gICAgICAgIH1cblxuICAgICAgICBzbXMucmV2ZXJzZSA9ICFzbXMucmV2ZXJzZTtcbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgaWYgKCFzbXMucmV2ZXJzZSlcbiAgICAgICAge1xuICAgICAgICAgICAgZ2wuc3RlbmNpbEZ1bmMoZ2wuRVFVQUwsIDB4RkYgLSBsZXZlbCwgMHhGRik7XG4gICAgICAgICAgICBnbC5zdGVuY2lsT3AoZ2wuS0VFUCxnbC5LRUVQLGdsLkRFQ1IpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2VcbiAgICAgICAge1xuICAgICAgICAgICAgZ2wuc3RlbmNpbEZ1bmMoZ2wuRVFVQUwsbGV2ZWwsIDB4RkYpO1xuICAgICAgICAgICAgZ2wuc3RlbmNpbE9wKGdsLktFRVAsZ2wuS0VFUCxnbC5JTkNSKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGdsLmRyYXdFbGVtZW50cyhnbC5UUklBTkdMRV9TVFJJUCwgIHdlYkdMRGF0YS5pbmRpY2VzLmxlbmd0aCwgZ2wuVU5TSUdORURfU0hPUlQsIDAgKTtcblxuICAgICAgICBpZiAoIXNtcy5yZXZlcnNlKVxuICAgICAgICB7XG4gICAgICAgICAgICBnbC5zdGVuY2lsRnVuYyhnbC5FUVVBTCwweEZGLShsZXZlbCsxKSwgMHhGRik7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgICBnbC5zdGVuY2lsRnVuYyhnbC5FUVVBTCxsZXZlbCsxLCAweEZGKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGdsLmNvbG9yTWFzayh0cnVlLCB0cnVlLCB0cnVlLCB0cnVlKTtcbiAgICBnbC5zdGVuY2lsT3AoZ2wuS0VFUCxnbC5LRUVQLGdsLktFRVApO1xuXG4gICAgc21zLmNvdW50Kys7XG59O1xuXG4vKipcbiAqIFRPRE8gdGhpcyBkb2VzIG5vdCBiZWxvbmcgaGVyZSFcbiAqXG4gKiBAcGFyYW0gZ3JhcGhpY3Mge1BJWEkuR3JhcGhpY3N9XG4gKiBAcGFyYW0gd2ViR0xEYXRhIHthbnlbXX1cbiAqL1xuV2ViR0xNYXNrTWFuYWdlci5wcm90b3R5cGUuYmluZEdyYXBoaWNzID0gZnVuY3Rpb24gKGdyYXBoaWNzLCB3ZWJHTERhdGEpXG57XG4gICAgLy9pZiAodGhpcy5fY3VycmVudEdyYXBoaWNzID09PSBncmFwaGljcylyZXR1cm47XG4gICAgdmFyIGdsID0gdGhpcy5yZW5kZXJlci5nbDtcblxuICAgICAvLyBiaW5kIHRoZSBncmFwaGljcyBvYmplY3QuLlxuICAgIHZhciBzaGFkZXIgPSB0aGlzLnJlbmRlcmVyLnBsdWdpbnMuZ3JhcGhpY3MucHJpbWl0aXZlU2hhZGVyO1xuXG4gICAgaWYgKHdlYkdMRGF0YS5tb2RlID09PSAxKVxuICAgIHtcbiAgICAgICAgLypcbiAgICAgICAgc2hhZGVyID0gdGhpcy5yZW5kZXJlci5zaGFkZXJNYW5hZ2VyLmNvbXBsZXhQcmltaXRpdmVTaGFkZXI7XG5cbiAgICAgICAgdGhpcy5yZW5kZXJlci5zaGFkZXJNYW5hZ2VyLnNldFNoYWRlcihzaGFkZXIpO1xuXG4gICAgICAgIGdsLnVuaWZvcm1NYXRyaXgzZnYoc2hhZGVyLnVuaWZvcm1zLnRyYW5zbGF0aW9uTWF0cml4Ll9sb2NhdGlvbiwgZmFsc2UsIGdyYXBoaWNzLndvcmxkVHJhbnNmb3JtLnRvQXJyYXkodHJ1ZSkpO1xuXG4gICAgICAgIGdsLnVuaWZvcm1NYXRyaXgzZnYoc2hhZGVyLnVuaWZvcm1zLnByb2plY3Rpb25NYXRyaXguX2xvY2F0aW9uLCBmYWxzZSwgdGhpcy5yZW5kZXJlci5jdXJyZW50UmVuZGVyVGFyZ2V0LnByb2plY3Rpb25NYXRyaXgudG9BcnJheSh0cnVlKSk7XG5cbiAgICAgICAgZ2wudW5pZm9ybTNmdihzaGFkZXIudW5pZm9ybXMudGludC5fbG9jYXRpb24sIHV0aWxzLmhleDJyZ2IoZ3JhcGhpY3MudGludCkpO1xuXG4gICAgICAgIGdsLnVuaWZvcm0zZnYoc2hhZGVyLnVuaWZvcm1zLmNvbG9yLl9sb2NhdGlvbiwgd2ViR0xEYXRhLmNvbG9yKTtcblxuICAgICAgICBnbC51bmlmb3JtMWYoc2hhZGVyLnVuaWZvcm1zLmFscGhhLl9sb2NhdGlvbiwgZ3JhcGhpY3Mud29ybGRBbHBoYSk7XG5cbiAgICAgICAgZ2wuYmluZEJ1ZmZlcihnbC5BUlJBWV9CVUZGRVIsIHdlYkdMRGF0YS5idWZmZXIpO1xuXG4gICAgICAgIGdsLnZlcnRleEF0dHJpYlBvaW50ZXIoc2hhZGVyLmF0dHJpYnV0ZXMuYVZlcnRleFBvc2l0aW9uLCAyLCBnbC5GTE9BVCwgZmFsc2UsIDQgKiAyLCAwKTtcblxuICAgICAgICAvLyBub3cgZG8gdGhlIHJlc3QuLlxuICAgICAgICAvLyBzZXQgdGhlIGluZGV4IGJ1ZmZlciFcbiAgICAgICAgZ2wuYmluZEJ1ZmZlcihnbC5FTEVNRU5UX0FSUkFZX0JVRkZFUiwgd2ViR0xEYXRhLmluZGV4QnVmZmVyKTtcbiAgICAqL1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICAvL3RoaXMucmVuZGVyZXIuc2hhZGVyTWFuYWdlci5hY3RpdmF0ZVByaW1pdGl2ZVNoYWRlcigpO1xuLy8gICAgICAgIHNoYWRlciA9IHRoaXMucmVuZGVyZXIuc2hhZGVyTWFuYWdlci5wcmltaXRpdmVTaGFkZXI7XG4gICAgICAgXG4gICAgICAgIHRoaXMucmVuZGVyZXIuYmluZFNoYWRlcihzaGFkZXIpXG5cbiAgICAgICAgc2hhZGVyLnVuaWZvcm1zLnRyYW5zbGF0aW9uTWF0cml4ID0gZ3JhcGhpY3Mud29ybGRUcmFuc2Zvcm0udG9BcnJheSh0cnVlKTtcbiAgICAgICAgc2hhZGVyLnVuaWZvcm1zLnRpbnQgPSB1dGlscy5oZXgycmdiKGdyYXBoaWNzLnRpbnQpO1xuICAgICAgICBzaGFkZXIudW5pZm9ybXMuYWxwaGEgPSBncmFwaGljcy53b3JsZEFscGhhO1xuXG5cbiAgICAgICAgZ2wuYmluZEJ1ZmZlcihnbC5BUlJBWV9CVUZGRVIsIHdlYkdMRGF0YS5idWZmZXIpO1xuXG5cbiAgICAgICAgc2hhZGVyLmF0dHJpYnV0ZXMuYVZlcnRleFBvc2l0aW9uLnBvaW50ZXIoZ2wuRkxPQVQsIGZhbHNlLCA0ICogNiwgMCk7XG4gICAgICAgIHNoYWRlci5hdHRyaWJ1dGVzLmFDb2xvci5wb2ludGVyKGdsLkZMT0FULCBmYWxzZSwgNCAqIDYsIDIgKiA0KTtcblxuICAgICAgICBnbC5lbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShzaGFkZXIuYXR0cmlidXRlcy5hVmVydGV4UG9zaXRpb24ubG9jYXRpb24pO1xuICAgICAgICBnbC5lbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShzaGFkZXIuYXR0cmlidXRlcy5hQ29sb3IubG9jYXRpb24pO1xuXG4gICAgICAgIC8vIHNldCB0aGUgaW5kZXggYnVmZmVyIVxuICAgICAgICBnbC5iaW5kQnVmZmVyKGdsLkVMRU1FTlRfQVJSQVlfQlVGRkVSLCB3ZWJHTERhdGEuaW5kZXhCdWZmZXIpO1xuLy8gICAgICAgIGdsLmRyYXdFbGVtZW50cyhnbC5UUklBTkdMRV9TVFJJUCwgIHdlYkdMRGF0YS5pbmRpY2VzLmxlbmd0aCwgZ2wuVU5TSUdORURfU0hPUlQsIDAgKTtcblxuXG4gICAgICAvKiAgdGhpcy5yZW5kZXJlci5zaGFkZXJNYW5hZ2VyLnNldFNoYWRlcihzaGFkZXIpO1xuXG4gICAgICAgIGdsLnVuaWZvcm1NYXRyaXgzZnYoc2hhZGVyLnVuaWZvcm1zLnRyYW5zbGF0aW9uTWF0cml4Ll9sb2NhdGlvbiwgZmFsc2UsIGdyYXBoaWNzLndvcmxkVHJhbnNmb3JtLnRvQXJyYXkodHJ1ZSkpO1xuXG4gICAgICAgIGdsLnVuaWZvcm1NYXRyaXgzZnYoc2hhZGVyLnVuaWZvcm1zLnByb2plY3Rpb25NYXRyaXguX2xvY2F0aW9uLCBmYWxzZSwgdGhpcy5yZW5kZXJlci5jdXJyZW50UmVuZGVyVGFyZ2V0LnByb2plY3Rpb25NYXRyaXgudG9BcnJheSh0cnVlKSk7XG5cbiAgICAgICAgZ2wudW5pZm9ybTNmdihzaGFkZXIudW5pZm9ybXMudGludC5fbG9jYXRpb24sIHV0aWxzLmhleDJyZ2IoZ3JhcGhpY3MudGludCkpO1xuXG4gICAgICAgIGdsLnVuaWZvcm0xZihzaGFkZXIudW5pZm9ybXMuYWxwaGEuX2xvY2F0aW9uLCBncmFwaGljcy53b3JsZEFscGhhKTtcblxuICAgICAgICBnbC5iaW5kQnVmZmVyKGdsLkFSUkFZX0JVRkZFUiwgd2ViR0xEYXRhLmJ1ZmZlcik7XG5cbiAgICAgICAgZ2wudmVydGV4QXR0cmliUG9pbnRlcihzaGFkZXIuYXR0cmlidXRlcy5hVmVydGV4UG9zaXRpb24sIDIsIGdsLkZMT0FULCBmYWxzZSwgNCAqIDYsIDApO1xuICAgICAgICBnbC52ZXJ0ZXhBdHRyaWJQb2ludGVyKHNoYWRlci5hdHRyaWJ1dGVzLmFDb2xvciwgNCwgZ2wuRkxPQVQsIGZhbHNlLDQgKiA2LCAyICogNCk7XG5cbiAgICAgICAgLy8gc2V0IHRoZSBpbmRleCBidWZmZXIhXG4gICAgICAgIGdsLmJpbmRCdWZmZXIoZ2wuRUxFTUVOVF9BUlJBWV9CVUZGRVIsIHdlYkdMRGF0YS5pbmRleEJ1ZmZlcik7Ki9cbiAgICB9XG59O1xuXG4vKipcbiAqIFRPRE8gQGFsdmluXG4gKiBAcGFyYW0gZ3JhcGhpY3Mge1BJWEkuR3JhcGhpY3N9XG4gKiBAcGFyYW0gd2ViR0xEYXRhIHthbnlbXX1cbiAqL1xuV2ViR0xNYXNrTWFuYWdlci5wcm90b3R5cGUucG9wU3RlbmNpbCA9IGZ1bmN0aW9uIChncmFwaGljcywgd2ViR0xEYXRhKVxue1xuICAgIHZhciBnbCA9IHRoaXMucmVuZGVyZXIuZ2wsXG4gICAgICAgIHNtcyA9IHRoaXMuc3RlbmNpbE1hc2tTdGFjaztcblxuICAgIHNtcy5zdGVuY2lsU3RhY2sucG9wKCk7XG5cbiAgICBzbXMuY291bnQtLTtcblxuICAgIGlmIChzbXMuc3RlbmNpbFN0YWNrLmxlbmd0aCA9PT0gMClcbiAgICB7XG4gICAgICAgIC8vIHRoZSBzdGFjayBpcyBlbXB0eSFcbiAgICAgICAgZ2wuZGlzYWJsZShnbC5TVEVOQ0lMX1RFU1QpO1xuXG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG5cbiAgICAgICAgdmFyIGxldmVsID0gc21zLmNvdW50O1xuXG4gICAgICAgIHRoaXMuYmluZEdyYXBoaWNzKGdyYXBoaWNzLCB3ZWJHTERhdGEpO1xuXG4gICAgICAgIGdsLmNvbG9yTWFzayhmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSk7XG5cbiAgICAgICAgaWYgKHdlYkdMRGF0YS5tb2RlID09PSAxKVxuICAgICAgICB7XG4gICAgICAgICAgICBzbXMucmV2ZXJzZSA9ICFzbXMucmV2ZXJzZTtcblxuICAgICAgICAgICAgaWYgKHNtcy5yZXZlcnNlKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGdsLnN0ZW5jaWxGdW5jKGdsLkVRVUFMLCAweEZGIC0gKGxldmVsKzEpLCAweEZGKTtcbiAgICAgICAgICAgICAgICBnbC5zdGVuY2lsT3AoZ2wuS0VFUCxnbC5LRUVQLGdsLklOQ1IpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGdsLnN0ZW5jaWxGdW5jKGdsLkVRVUFMLGxldmVsKzEsIDB4RkYpO1xuICAgICAgICAgICAgICAgIGdsLnN0ZW5jaWxPcChnbC5LRUVQLGdsLktFRVAsZ2wuREVDUik7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIGRyYXcgYSBxdWFkIHRvIGluY3JlbWVudC4uXG4gICAgICAgICAgICBnbC5kcmF3RWxlbWVudHMoZ2wuVFJJQU5HTEVfRkFOLCA0LCBnbC5VTlNJR05FRF9TSE9SVCwgKCB3ZWJHTERhdGEuaW5kaWNlcy5sZW5ndGggLSA0ICkgKiAyICk7XG5cbiAgICAgICAgICAgIGdsLnN0ZW5jaWxGdW5jKGdsLkFMV0FZUywwLDB4RkYpO1xuICAgICAgICAgICAgZ2wuc3RlbmNpbE9wKGdsLktFRVAsZ2wuS0VFUCxnbC5JTlZFUlQpO1xuXG4gICAgICAgICAgICAvLyBkcmF3IHRoZSB0cmlhbmdsZSBzdHJpcCFcbiAgICAgICAgICAgIGdsLmRyYXdFbGVtZW50cyhnbC5UUklBTkdMRV9GQU4sICB3ZWJHTERhdGEuaW5kaWNlcy5sZW5ndGggLSA0LCBnbC5VTlNJR05FRF9TSE9SVCwgMCApO1xuXG4gICAgICAgICAgICB0aGlzLnJlbmRlcmVyLmRyYXdDb3VudCArPSAyO1xuXG4gICAgICAgICAgICBpZiAoIXNtcy5yZXZlcnNlKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGdsLnN0ZW5jaWxGdW5jKGdsLkVRVUFMLDB4RkYtKGxldmVsKSwgMHhGRik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgZ2wuc3RlbmNpbEZ1bmMoZ2wuRVFVQUwsbGV2ZWwsIDB4RkYpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgLy8gIGNvbnNvbGUubG9nKFwiPDw+PlwiKVxuICAgICAgICAgICAgaWYgKCFzbXMucmV2ZXJzZSlcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBnbC5zdGVuY2lsRnVuYyhnbC5FUVVBTCwgMHhGRiAtIChsZXZlbCsxKSwgMHhGRik7XG4gICAgICAgICAgICAgICAgZ2wuc3RlbmNpbE9wKGdsLktFRVAsZ2wuS0VFUCxnbC5JTkNSKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBnbC5zdGVuY2lsRnVuYyhnbC5FUVVBTCxsZXZlbCsxLCAweEZGKTtcbiAgICAgICAgICAgICAgICBnbC5zdGVuY2lsT3AoZ2wuS0VFUCxnbC5LRUVQLGdsLkRFQ1IpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBnbC5kcmF3RWxlbWVudHMoZ2wuVFJJQU5HTEVfU1RSSVAsICB3ZWJHTERhdGEuaW5kaWNlcy5sZW5ndGgsIGdsLlVOU0lHTkVEX1NIT1JULCAwICk7XG5cbiAgICAgICAgICAgIHRoaXMucmVuZGVyZXIuZHJhd0NvdW50Kys7XG5cbiAgICAgICAgICAgIGlmICghc21zLnJldmVyc2UpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgZ2wuc3RlbmNpbEZ1bmMoZ2wuRVFVQUwsMHhGRi0obGV2ZWwpLCAweEZGKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBnbC5zdGVuY2lsRnVuYyhnbC5FUVVBTCxsZXZlbCwgMHhGRik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBnbC5jb2xvck1hc2sodHJ1ZSwgdHJ1ZSwgdHJ1ZSwgdHJ1ZSk7XG4gICAgICAgIGdsLnN0ZW5jaWxPcChnbC5LRUVQLGdsLktFRVAsZ2wuS0VFUCk7XG5cblxuICAgIH1cbn07XG5cbi8qKlxuICogRGVzdHJveXMgdGhlIG1hc2sgc3RhY2suXG4gKlxuICovXG5XZWJHTE1hc2tNYW5hZ2VyLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKClcbntcbiAgICBXZWJHTE1hbmFnZXIucHJvdG90eXBlLmRlc3Ryb3kuY2FsbCh0aGlzKTtcblxuICAgIHRoaXMuc3RlbmNpbE1hc2tTdGFjay5zdGVuY2lsU3RhY2sgPSBudWxsO1xufTtcblxuLyoqXG4gKiBBcHBsaWVzIHRoZSBNYXNrIGFuZCBhZGRzIGl0IHRvIHRoZSBjdXJyZW50IGZpbHRlciBzdGFjay5cbiAqXG4gKiBAcGFyYW0gbWFza0RhdGEge2FueVtdfSBUaGUgbWFzayBkYXRhIHN0cnVjdHVyZSB0byB1c2VcbiAqL1xuV2ViR0xNYXNrTWFuYWdlci5wcm90b3R5cGUucHVzaE1hc2sgPSBmdW5jdGlvbiAobWFza0RhdGEpXG57XG4gICAgdGhpcy5yZW5kZXJlci5zZXRPYmplY3RSZW5kZXJlcih0aGlzLnJlbmRlcmVyLnBsdWdpbnMuZ3JhcGhpY3MpO1xuICAgIFxuICAgIC8vVE9ETyBGSVhcbiAgICBpZiAobWFza0RhdGEuZGlydHkpXG4gICAge1xuICAgICAgICB0aGlzLnJlbmRlcmVyLnBsdWdpbnMuZ3JhcGhpY3MudXBkYXRlR3JhcGhpY3MobWFza0RhdGEsIHRoaXMucmVuZGVyZXIuZ2wpO1xuICAgIH1cblxuICAgIGlmICghbWFza0RhdGEuX3dlYkdMW3RoaXMucmVuZGVyZXIuZ2wuaWRdLmRhdGEubGVuZ3RoKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMucHVzaFN0ZW5jaWwobWFza0RhdGEsIG1hc2tEYXRhLl93ZWJHTFt0aGlzLnJlbmRlcmVyLmdsLmlkXS5kYXRhWzBdKTtcbn07XG5cbi8qKlxuICogUmVtb3ZlcyB0aGUgbGFzdCBmaWx0ZXIgZnJvbSB0aGUgZmlsdGVyIHN0YWNrIGFuZCBkb2Vzbid0IHJldHVybiBpdC5cbiAqXG4gKiBAcGFyYW0gbWFza0RhdGEge2FueVtdfVxuICovXG5XZWJHTE1hc2tNYW5hZ2VyLnByb3RvdHlwZS5wb3BNYXNrID0gZnVuY3Rpb24gKG1hc2tEYXRhKVxue1xuICAgIHRoaXMucmVuZGVyZXIuc2V0T2JqZWN0UmVuZGVyZXIodGhpcy5yZW5kZXJlci5wbHVnaW5zLmdyYXBoaWNzKTtcblxuICAgIHRoaXMucG9wU3RlbmNpbChtYXNrRGF0YSwgbWFza0RhdGEuX3dlYkdMW3RoaXMucmVuZGVyZXIuZ2wuaWRdLmRhdGFbMF0pO1xufTtcblxuIiwiLyoqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcn0gVGhlIHJlbmRlcmVyIHRoaXMgbWFuYWdlciB3b3JrcyBmb3IuXG4gKi9cbmZ1bmN0aW9uIFdlYkdMTWFuYWdlcihyZW5kZXJlcilcbntcbiAgICAvKipcbiAgICAgKiBUaGUgcmVuZGVyZXIgdGhpcyBtYW5hZ2VyIHdvcmtzIGZvci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuV2ViR0xSZW5kZXJlcn1cbiAgICAgKi9cbiAgICB0aGlzLnJlbmRlcmVyID0gcmVuZGVyZXI7XG5cbiAgICB0aGlzLnJlbmRlcmVyLm9uKCdjb250ZXh0JywgdGhpcy5vbkNvbnRleHRDaGFuZ2UsIHRoaXMpO1xufVxuXG5XZWJHTE1hbmFnZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gV2ViR0xNYW5hZ2VyO1xubW9kdWxlLmV4cG9ydHMgPSBXZWJHTE1hbmFnZXI7XG5cbi8qKlxuICogR2VuZXJpYyBtZXRob2QgY2FsbGVkIHdoZW4gdGhlcmUgaXMgYSBXZWJHTCBjb250ZXh0IGNoYW5nZS5cbiAqXG4gKi9cbldlYkdMTWFuYWdlci5wcm90b3R5cGUub25Db250ZXh0Q2hhbmdlID0gZnVuY3Rpb24gKClcbntcblx0Ly8gZG8gc29tZSBjb2RlcyBpbml0IVxufTtcblxuLyoqXG4gKiBHZW5lcmljIGRlc3Ryb3kgbWV0aG9kcyB0byBiZSBvdmVycmlkZGVuIGJ5IHRoZSBzdWJjbGFzc1xuICpcbiAqL1xuV2ViR0xNYW5hZ2VyLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLnJlbmRlcmVyLm9mZignY29udGV4dCcsIHRoaXMub25Db250ZXh0Q2hhbmdlLCB0aGlzKTtcblxuICAgIHRoaXMucmVuZGVyZXIgPSBudWxsO1xufTtcbiIsInZhciBTaGFkZXIgPSByZXF1aXJlKCcuL1NoYWRlcicpO1xuXG4vKipcbiAqIFRoaXMgc2hhZGVyIGlzIHVzZWQgdG8gZHJhdyBjb21wbGV4IHByaW1pdGl2ZSBzaGFwZXMgZm9yIHtAbGluayBQSVhJLkdyYXBoaWNzfS5cbiAqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAZXh0ZW5kcyBQSVhJLlNoYWRlclxuICogQHBhcmFtIHNoYWRlck1hbmFnZXIge1BJWEkuU2hhZGVyTWFuYWdlcn0gVGhlIHdlYmdsIHNoYWRlciBtYW5hZ2VyIHRoaXMgc2hhZGVyIHdvcmtzIGZvci5cbiAqL1xuZnVuY3Rpb24gQ29tcGxleFByaW1pdGl2ZVNoYWRlcihzaGFkZXJNYW5hZ2VyKVxue1xuICAgIFNoYWRlci5jYWxsKHRoaXMsXG4gICAgICAgIHNoYWRlck1hbmFnZXIsXG4gICAgICAgIC8vIHZlcnRleCBzaGFkZXJcbiAgICAgICAgW1xuICAgICAgICAgICAgJ2F0dHJpYnV0ZSB2ZWMyIGFWZXJ0ZXhQb3NpdGlvbjsnLFxuXG4gICAgICAgICAgICAndW5pZm9ybSBtYXQzIHRyYW5zbGF0aW9uTWF0cml4OycsXG4gICAgICAgICAgICAndW5pZm9ybSBtYXQzIHByb2plY3Rpb25NYXRyaXg7JyxcblxuICAgICAgICAgICAgJ3VuaWZvcm0gdmVjMyB0aW50OycsXG4gICAgICAgICAgICAndW5pZm9ybSBmbG9hdCBhbHBoYTsnLFxuICAgICAgICAgICAgJ3VuaWZvcm0gdmVjMyBjb2xvcjsnLFxuXG4gICAgICAgICAgICAndmFyeWluZyB2ZWM0IHZDb2xvcjsnLFxuXG4gICAgICAgICAgICAndm9pZCBtYWluKHZvaWQpeycsXG4gICAgICAgICAgICAnICAgZ2xfUG9zaXRpb24gPSB2ZWM0KChwcm9qZWN0aW9uTWF0cml4ICogdHJhbnNsYXRpb25NYXRyaXggKiB2ZWMzKGFWZXJ0ZXhQb3NpdGlvbiwgMS4wKSkueHksIDAuMCwgMS4wKTsnLFxuICAgICAgICAgICAgJyAgIHZDb2xvciA9IHZlYzQoY29sb3IgKiBhbHBoYSAqIHRpbnQsIGFscGhhKTsnLC8vXCIgKiB2ZWM0KHRpbnQgKiBhbHBoYSwgYWxwaGEpOycsXG4gICAgICAgICAgICAnfSdcbiAgICAgICAgXS5qb2luKCdcXG4nKSxcbiAgICAgICAgLy8gZnJhZ21lbnQgc2hhZGVyXG4gICAgICAgIFtcbiAgICAgICAgICAgICdwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDsnLFxuXG4gICAgICAgICAgICAndmFyeWluZyB2ZWM0IHZDb2xvcjsnLFxuXG4gICAgICAgICAgICAndm9pZCBtYWluKHZvaWQpeycsXG4gICAgICAgICAgICAnICAgZ2xfRnJhZ0NvbG9yID0gdkNvbG9yOycsXG4gICAgICAgICAgICAnfSdcbiAgICAgICAgXS5qb2luKCdcXG4nKSxcbiAgICAgICAgLy8gY3VzdG9tIHVuaWZvcm1zXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRpbnQ6ICAgeyB0eXBlOiAnM2YnLCB2YWx1ZTogWzAsIDAsIDBdIH0sXG4gICAgICAgICAgICBhbHBoYTogIHsgdHlwZTogJzFmJywgdmFsdWU6IDAgfSxcbiAgICAgICAgICAgIGNvbG9yOiAgeyB0eXBlOiAnM2YnLCB2YWx1ZTogWzAsMCwwXSB9LFxuICAgICAgICAgICAgdHJhbnNsYXRpb25NYXRyaXg6IHsgdHlwZTogJ21hdDMnLCB2YWx1ZTogbmV3IEZsb2F0MzJBcnJheSg5KSB9LFxuICAgICAgICAgICAgcHJvamVjdGlvbk1hdHJpeDogeyB0eXBlOiAnbWF0MycsIHZhbHVlOiBuZXcgRmxvYXQzMkFycmF5KDkpIH1cbiAgICAgICAgfSxcbiAgICAgICAgLy8gYXR0cmlidXRlc1xuICAgICAgICB7XG4gICAgICAgICAgICBhVmVydGV4UG9zaXRpb246MFxuICAgICAgICB9XG4gICAgKTtcbn1cblxuQ29tcGxleFByaW1pdGl2ZVNoYWRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFNoYWRlci5wcm90b3R5cGUpO1xuQ29tcGxleFByaW1pdGl2ZVNoYWRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBDb21wbGV4UHJpbWl0aXZlU2hhZGVyO1xubW9kdWxlLmV4cG9ydHMgPSBDb21wbGV4UHJpbWl0aXZlU2hhZGVyO1xuIiwidmFyIFNoYWRlciA9IHJlcXVpcmUoJy4vU2hhZGVyJyk7XG5cbi8qKlxuICogVGhpcyBzaGFkZXIgaXMgdXNlZCB0byBkcmF3IHNpbXBsZSBwcmltaXRpdmUgc2hhcGVzIGZvciB7QGxpbmsgUElYSS5HcmFwaGljc30uXG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQGV4dGVuZHMgUElYSS5TaGFkZXJcbiAqIEBwYXJhbSBzaGFkZXJNYW5hZ2VyIHtTaGFkZXJNYW5hZ2VyfSBUaGUgd2ViZ2wgc2hhZGVyIG1hbmFnZXIgdGhpcyBzaGFkZXIgd29ya3MgZm9yLlxuICovXG5mdW5jdGlvbiBQcmltaXRpdmVTaGFkZXIoc2hhZGVyTWFuYWdlcilcbntcbiAgICBTaGFkZXIuY2FsbCh0aGlzLFxuICAgICAgICBzaGFkZXJNYW5hZ2VyLFxuICAgICAgICAvLyB2ZXJ0ZXggc2hhZGVyXG4gICAgICAgIFtcbiAgICAgICAgICAgICdhdHRyaWJ1dGUgdmVjMiBhVmVydGV4UG9zaXRpb247JyxcbiAgICAgICAgICAgICdhdHRyaWJ1dGUgdmVjNCBhQ29sb3I7JyxcblxuICAgICAgICAgICAgJ3VuaWZvcm0gbWF0MyB0cmFuc2xhdGlvbk1hdHJpeDsnLFxuICAgICAgICAgICAgJ3VuaWZvcm0gbWF0MyBwcm9qZWN0aW9uTWF0cml4OycsXG5cbiAgICAgICAgICAgICd1bmlmb3JtIGZsb2F0IGFscGhhOycsXG4gICAgICAgICAgICAndW5pZm9ybSBmbG9hdCBmbGlwWTsnLFxuICAgICAgICAgICAgJ3VuaWZvcm0gdmVjMyB0aW50OycsXG5cbiAgICAgICAgICAgICd2YXJ5aW5nIHZlYzQgdkNvbG9yOycsXG5cbiAgICAgICAgICAgICd2b2lkIG1haW4odm9pZCl7JyxcbiAgICAgICAgICAgICcgICBnbF9Qb3NpdGlvbiA9IHZlYzQoKHByb2plY3Rpb25NYXRyaXggKiB0cmFuc2xhdGlvbk1hdHJpeCAqIHZlYzMoYVZlcnRleFBvc2l0aW9uLCAxLjApKS54eSwgMC4wLCAxLjApOycsXG4gICAgICAgICAgICAnICAgdkNvbG9yID0gYUNvbG9yICogdmVjNCh0aW50ICogYWxwaGEsIGFscGhhKTsnLFxuICAgICAgICAgICAgJ30nXG4gICAgICAgIF0uam9pbignXFxuJyksXG4gICAgICAgIC8vIGZyYWdtZW50IHNoYWRlclxuICAgICAgICBbXG4gICAgICAgICAgICAncHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7JyxcblxuICAgICAgICAgICAgJ3ZhcnlpbmcgdmVjNCB2Q29sb3I7JyxcblxuICAgICAgICAgICAgJ3ZvaWQgbWFpbih2b2lkKXsnLFxuICAgICAgICAgICAgJyAgIGdsX0ZyYWdDb2xvciA9IHZDb2xvcjsnLFxuICAgICAgICAgICAgJ30nXG4gICAgICAgIF0uam9pbignXFxuJyksXG4gICAgICAgIC8vIGN1c3RvbSB1bmlmb3Jtc1xuICAgICAgICB7XG4gICAgICAgICAgICB0aW50OiAgIHsgdHlwZTogJzNmJywgdmFsdWU6IFswLCAwLCAwXSB9LFxuICAgICAgICAgICAgYWxwaGE6ICB7IHR5cGU6ICcxZicsIHZhbHVlOiAwIH0sXG4gICAgICAgICAgICB0cmFuc2xhdGlvbk1hdHJpeDogeyB0eXBlOiAnbWF0MycsIHZhbHVlOiBuZXcgRmxvYXQzMkFycmF5KDkpIH0sXG4gICAgICAgICAgICBwcm9qZWN0aW9uTWF0cml4OiB7IHR5cGU6ICdtYXQzJywgdmFsdWU6IG5ldyBGbG9hdDMyQXJyYXkoOSkgfVxuICAgICAgICB9LFxuICAgICAgICAvLyBjdXN0b20gYXR0cmlidXRlc1xuICAgICAgICB7XG4gICAgICAgICAgICBhVmVydGV4UG9zaXRpb246MCxcbiAgICAgICAgICAgIGFDb2xvcjowXG4gICAgICAgIH1cbiAgICApO1xufVxuXG5QcmltaXRpdmVTaGFkZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShTaGFkZXIucHJvdG90eXBlKTtcblByaW1pdGl2ZVNoYWRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBQcmltaXRpdmVTaGFkZXI7XG5tb2R1bGUuZXhwb3J0cyA9IFByaW1pdGl2ZVNoYWRlcjtcbiIsIi8qZ2xvYmFsIGNvbnNvbGUgKi9cbnZhciB1dGlscyA9IHJlcXVpcmUoJy4uLy4uLy4uL3V0aWxzJyk7XG5cbi8qKlxuICogQmFzZSBzaGFkZXIgY2xhc3MgZm9yIFBJWEkgbWFuYWdlZCBzaGFkZXJzLlxuICpcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqIEBwYXJhbSBzaGFkZXJNYW5hZ2VyIHtQSVhJLlNoYWRlck1hbmFnZXJ9IFRoZSB3ZWJnbCBzaGFkZXIgbWFuYWdlciB0aGlzIHNoYWRlciB3b3JrcyBmb3IuXG4gKiBAcGFyYW0gW3ZlcnRleFNyY10ge3N0cmluZ30gVGhlIHNvdXJjZSBvZiB0aGUgdmVydGV4IHNoYWRlci5cbiAqIEBwYXJhbSBbZnJhZ21lbnRTcmNdIHtzdHJpbmd9IFRoZSBzb3VyY2Ugb2YgdGhlIGZyYWdtZW50IHNoYWRlci5cbiAqIEBwYXJhbSBbdW5pZm9ybXNdIHtvYmplY3R9IFVuaWZvcm1zIGZvciB0aGlzIHNoYWRlci5cbiAqIEBwYXJhbSBbYXR0cmlidXRlc10ge29iamVjdH0gQXR0cmlidXRlcyBmb3IgdGhpcyBzaGFkZXIuXG4gKi9cbmZ1bmN0aW9uIFNoYWRlcihzaGFkZXJNYW5hZ2VyLCB2ZXJ0ZXhTcmMsIGZyYWdtZW50U3JjLCB1bmlmb3JtcywgYXR0cmlidXRlcylcbntcbiAgICBpZiAoIXZlcnRleFNyYyB8fCAhZnJhZ21lbnRTcmMpXG4gICAge1xuICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdQaXhpLmpzIEVycm9yLiBTaGFkZXIgcmVxdWlyZXMgdmVydGV4U3JjIGFuZCBmcmFnbWVudFNyYycpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEEgdW5pcXVlIGlkXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEByZWFkb25seVxuICAgICAqL1xuICAgIHRoaXMudWlkID0gdXRpbHMudWlkKCk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgY3VycmVudCBXZWJHTCBkcmF3aW5nIGNvbnRleHRcbiAgICAgKiBAbWVtYmVyIHtXZWJHTFJlbmRlcmluZ0NvbnRleHR9XG4gICAgICogQHJlYWRvbmx5XG4gICAgICovXG4gICAgdGhpcy5nbCA9IHNoYWRlck1hbmFnZXIucmVuZGVyZXIuZ2w7XG5cbiAgICAvL1RPRE8gbWF5YmUgd2Ugc2hvdWxkIHBhc3MgcmVuZGVyZXIgcmF0aGVyIHRoYW4gc2hhZGVyIG1hbmdlcj8/IGZvb2QgZm9yIHRob3VnaHQuLlxuICAgIHRoaXMuc2hhZGVyTWFuYWdlciA9IHNoYWRlck1hbmFnZXI7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgV2ViR0wgcHJvZ3JhbS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1dlYkdMUHJvZ3JhbX1cbiAgICAgKiBAcmVhZG9ubHlcbiAgICAgKi9cbiAgICB0aGlzLnByb2dyYW0gPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHVuaWZvcm1zIGFzIGFuIG9iamVjdFxuICAgICAqIEBtZW1iZXIge29iamVjdH1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMudW5pZm9ybXMgPSB1bmlmb3JtcyB8fCB7fTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBhdHRyaWJ1dGVzIGFzIGFuIG9iamVjdFxuICAgICAqIEBtZW1iZXIge29iamVjdH1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuYXR0cmlidXRlcyA9IGF0dHJpYnV0ZXMgfHwge307XG5cbiAgICAvKipcbiAgICAgKiBJbnRlcm5hbCB0ZXh0dXJlIGNvdW50ZXJcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLnRleHR1cmVDb3VudCA9IDE7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgdmVydGV4IHNoYWRlciBhcyBhbiBhcnJheSBvZiBzdHJpbmdzXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtzdHJpbmd9XG4gICAgICovXG4gICAgdGhpcy52ZXJ0ZXhTcmMgPSB2ZXJ0ZXhTcmM7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgZnJhZ21lbnQgc2hhZGVyIGFzIGFuIGFycmF5IG9mIHN0cmluZ3NcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge3N0cmluZ31cbiAgICAgKi9cbiAgICB0aGlzLmZyYWdtZW50U3JjID0gZnJhZ21lbnRTcmM7XG5cbiAgICB0aGlzLmluaXQoKTtcbn1cblxuU2hhZGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFNoYWRlcjtcbm1vZHVsZS5leHBvcnRzID0gU2hhZGVyO1xuXG4vKipcbiAqIENyZWF0ZXMgdGhlIHNoYWRlciBhbmQgdXNlcyBpdFxuICpcbiAqL1xuU2hhZGVyLnByb3RvdHlwZS5pbml0ID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLmNvbXBpbGUoKTtcblxuICAgIHRoaXMuZ2wudXNlUHJvZ3JhbSh0aGlzLnByb2dyYW0pO1xuXG4gICAgdGhpcy5jYWNoZVVuaWZvcm1Mb2NhdGlvbnMoT2JqZWN0LmtleXModGhpcy51bmlmb3JtcykpO1xuICAgIHRoaXMuY2FjaGVBdHRyaWJ1dGVMb2NhdGlvbnMoT2JqZWN0LmtleXModGhpcy5hdHRyaWJ1dGVzKSk7XG59O1xuXG4vKipcbiAqIENhY2hlcyB0aGUgbG9jYXRpb25zIG9mIHRoZSB1bmlmb3JtIGZvciByZXVzZS5cbiAqXG4gKiBAcGFyYW0ga2V5cyB7c3RyaW5nfSB0aGUgdW5pZm9ybXMgdG8gY2FjaGVcbiAqL1xuU2hhZGVyLnByb3RvdHlwZS5jYWNoZVVuaWZvcm1Mb2NhdGlvbnMgPSBmdW5jdGlvbiAoa2V5cylcbntcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyArK2kpXG4gICAge1xuICAgICAgICB0aGlzLnVuaWZvcm1zW2tleXNbaV1dLl9sb2NhdGlvbiA9IHRoaXMuZ2wuZ2V0VW5pZm9ybUxvY2F0aW9uKHRoaXMucHJvZ3JhbSwga2V5c1tpXSk7XG4gICAgfVxufTtcblxuLyoqXG4gKiBDYWNoZXMgdGhlIGxvY2F0aW9ucyBvZiB0aGUgYXR0cmlidXRlIGZvciByZXVzZS5cbiAqXG4gKiBAcGFyYW0ga2V5cyB7c3RyaW5nfSB0aGUgYXR0cmlidXRlcyB0byBjYWNoZVxuICovXG5TaGFkZXIucHJvdG90eXBlLmNhY2hlQXR0cmlidXRlTG9jYXRpb25zID0gZnVuY3Rpb24gKGtleXMpXG57XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgKytpKVxuICAgIHtcbiAgICAgICAgdGhpcy5hdHRyaWJ1dGVzW2tleXNbaV1dID0gdGhpcy5nbC5nZXRBdHRyaWJMb2NhdGlvbih0aGlzLnByb2dyYW0sIGtleXNbaV0pO1xuICAgIH1cblxuICAgIC8vIFRPRE86IENoZWNrIGlmIHRoaXMgaXMgbmVlZGVkIGFueW1vcmUuLi5cblxuICAgIC8vIEJlZ2luIHdvcnN0IGhhY2sgZXZhIC8vXG5cbiAgICAvLyBXSFk/Pz8gT05MWSBvbiBteSBjaHJvbWUgcGl4ZWwgdGhlIGxpbmUgYWJvdmUgcmV0dXJucyAtMSB3aGVuIHVzaW5nIGZpbHRlcnM/XG4gICAgLy8gbWF5YmUgaXRzIHNvbWV0aGluZyB0byBkbyB3aXRoIHRoZSBjdXJyZW50IHN0YXRlIG9mIHRoZSBnbCBjb250ZXh0LlxuICAgIC8vIEknbSBjb252aW5jZWQgdGhpcyBpcyBhIGJ1ZyBpbiB0aGUgY2hyb21lIGJyb3dzZXIgYXMgdGhlcmUgaXMgTk8gcmVhc29uIHdoeSB0aGlzIHNob3VsZCBiZSByZXR1cm5pbmcgLTEgZXNwZWNpYWxseSBhcyBpdCBvbmx5IG1hbmlmZXN0cyBvbiBteSBjaHJvbWUgcGl4ZWxcbiAgICAvLyBJZiB0aGVyZXMgYW55IHdlYkdMIHBlb3BsZSB0aGF0IGtub3cgd2h5IGNvdWxkIGhhcHBlbiBwbGVhc2UgaGVscCA6KVxuICAgIC8vIGlmICh0aGlzLmF0dHJpYnV0ZXMuYUNvbG9yID09PSAtMSl7XG4gICAgLy8gICAgIHRoaXMuYXR0cmlidXRlcy5hQ29sb3IgPSAyO1xuICAgIC8vIH1cblxuICAgIC8vIEVuZCB3b3JzdCBoYWNrIGV2YSAvL1xufTtcblxuLyoqXG4gKiBBdHRhY2hlcyB0aGUgc2hhZGVycyBhbmQgY3JlYXRlcyB0aGUgcHJvZ3JhbS5cbiAqXG4gKiBAcmV0dXJuIHtXZWJHTFByb2dyYW19XG4gKi9cblNoYWRlci5wcm90b3R5cGUuY29tcGlsZSA9IGZ1bmN0aW9uICgpXG57XG4gICAgdmFyIGdsID0gdGhpcy5nbDtcblxuICAgIHZhciBnbFZlcnRTaGFkZXIgPSB0aGlzLl9nbENvbXBpbGUoZ2wuVkVSVEVYX1NIQURFUiwgdGhpcy52ZXJ0ZXhTcmMpO1xuICAgIHZhciBnbEZyYWdTaGFkZXIgPSB0aGlzLl9nbENvbXBpbGUoZ2wuRlJBR01FTlRfU0hBREVSLCB0aGlzLmZyYWdtZW50U3JjKTtcblxuICAgIHZhciBwcm9ncmFtID0gZ2wuY3JlYXRlUHJvZ3JhbSgpO1xuXG4gICAgZ2wuYXR0YWNoU2hhZGVyKHByb2dyYW0sIGdsVmVydFNoYWRlcik7XG4gICAgZ2wuYXR0YWNoU2hhZGVyKHByb2dyYW0sIGdsRnJhZ1NoYWRlcik7XG4gICAgZ2wubGlua1Byb2dyYW0ocHJvZ3JhbSk7XG5cbiAgICAvLyBpZiBsaW5raW5nIGZhaWxzLCB0aGVuIGxvZyBhbmQgY2xlYW51cFxuICAgIGlmICghZ2wuZ2V0UHJvZ3JhbVBhcmFtZXRlcihwcm9ncmFtLCBnbC5MSU5LX1NUQVRVUykpXG4gICAge1xuICAgICAgICBjb25zb2xlLmVycm9yKCdQaXhpLmpzIEVycm9yOiBDb3VsZCBub3QgaW5pdGlhbGl6ZSBzaGFkZXIuJyk7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ2dsLlZBTElEQVRFX1NUQVRVUycsIGdsLmdldFByb2dyYW1QYXJhbWV0ZXIocHJvZ3JhbSwgZ2wuVkFMSURBVEVfU1RBVFVTKSk7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ2dsLmdldEVycm9yKCknLCBnbC5nZXRFcnJvcigpKTtcblxuICAgICAgICAvLyBpZiB0aGVyZSBpcyBhIHByb2dyYW0gaW5mbyBsb2csIGxvZyBpdFxuICAgICAgICBpZiAoZ2wuZ2V0UHJvZ3JhbUluZm9Mb2cocHJvZ3JhbSkgIT09ICcnKVxuICAgICAgICB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ1BpeGkuanMgV2FybmluZzogZ2wuZ2V0UHJvZ3JhbUluZm9Mb2coKScsIGdsLmdldFByb2dyYW1JbmZvTG9nKHByb2dyYW0pKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGdsLmRlbGV0ZVByb2dyYW0ocHJvZ3JhbSk7XG4gICAgICAgIHByb2dyYW0gPSBudWxsO1xuICAgIH1cblxuICAgIC8vIGNsZWFuIHVwIHNvbWUgc2hhZGVyc1xuICAgIGdsLmRlbGV0ZVNoYWRlcihnbFZlcnRTaGFkZXIpO1xuICAgIGdsLmRlbGV0ZVNoYWRlcihnbEZyYWdTaGFkZXIpO1xuXG4gICAgcmV0dXJuICh0aGlzLnByb2dyYW0gPSBwcm9ncmFtKTtcbn07XG5cbi8qKlxuKiBBZGRzIGEgbmV3IHVuaWZvcm1cbipcbiogQHBhcmFtIHVuaWZvcm0ge29iamVjdH0gdGhlIG5ldyB1bmlmb3JtIHRvIGF0dGFjaFxuKi9cblNoYWRlci5wcm90b3R5cGUuc3luY1VuaWZvcm0gPSBmdW5jdGlvbiAodW5pZm9ybSlcbntcbiAgICB2YXIgbG9jYXRpb24gPSB1bmlmb3JtLl9sb2NhdGlvbixcbiAgICAgICAgdmFsdWUgPSB1bmlmb3JtLnZhbHVlLFxuICAgICAgICBnbCA9IHRoaXMuZ2wsXG4gICAgICAgIGksIGlsO1xuXG4gICAgc3dpdGNoICh1bmlmb3JtLnR5cGUpXG4gICAge1xuICAgICAgICBjYXNlICdiJzpcbiAgICAgICAgY2FzZSAnYm9vbCc6XG4gICAgICAgIGNhc2UgJ2Jvb2xlYW4nOlxuICAgICAgICAgICAgZ2wudW5pZm9ybTFpKGxvY2F0aW9uLCB2YWx1ZSA/IDEgOiAwKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIC8vIHNpbmdsZSBpbnQgdmFsdWVcbiAgICAgICAgY2FzZSAnaSc6XG4gICAgICAgIGNhc2UgJzFpJzpcbiAgICAgICAgICAgIGdsLnVuaWZvcm0xaShsb2NhdGlvbiwgdmFsdWUpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLy8gc2luZ2xlIGZsb2F0IHZhbHVlXG4gICAgICAgIGNhc2UgJ2YnOlxuICAgICAgICBjYXNlICcxZic6XG4gICAgICAgICAgICBnbC51bmlmb3JtMWYobG9jYXRpb24sIHZhbHVlKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIC8vIEZsb2F0MzJBcnJheSgyKSBvciBKUyBBcnJyYXlcbiAgICAgICAgY2FzZSAnMmYnOlxuICAgICAgICAgICAgZ2wudW5pZm9ybTJmKGxvY2F0aW9uLCB2YWx1ZVswXSwgdmFsdWVbMV0pO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLy8gRmxvYXQzMkFycmF5KDMpIG9yIEpTIEFycnJheVxuICAgICAgICBjYXNlICczZic6XG4gICAgICAgICAgICBnbC51bmlmb3JtM2YobG9jYXRpb24sIHZhbHVlWzBdLCB2YWx1ZVsxXSwgdmFsdWVbMl0pO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLy8gRmxvYXQzMkFycmF5KDQpIG9yIEpTIEFycnJheVxuICAgICAgICBjYXNlICc0Zic6XG4gICAgICAgICAgICBnbC51bmlmb3JtNGYobG9jYXRpb24sIHZhbHVlWzBdLCB2YWx1ZVsxXSwgdmFsdWVbMl0sIHZhbHVlWzNdKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIC8vIGEgMkQgUG9pbnQgb2JqZWN0XG4gICAgICAgIGNhc2UgJ3YyJzpcbiAgICAgICAgICAgIGdsLnVuaWZvcm0yZihsb2NhdGlvbiwgdmFsdWUueCwgdmFsdWUueSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAvLyBhIDNEIFBvaW50IG9iamVjdFxuICAgICAgICBjYXNlICd2Myc6XG4gICAgICAgICAgICBnbC51bmlmb3JtM2YobG9jYXRpb24sIHZhbHVlLngsIHZhbHVlLnksIHZhbHVlLnopO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLy8gYSA0RCBQb2ludCBvYmplY3RcbiAgICAgICAgY2FzZSAndjQnOlxuICAgICAgICAgICAgZ2wudW5pZm9ybTRmKGxvY2F0aW9uLCB2YWx1ZS54LCB2YWx1ZS55LCB2YWx1ZS56LCB2YWx1ZS53KTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIC8vIEludDMyQXJyYXkgb3IgSlMgQXJyYXlcbiAgICAgICAgY2FzZSAnMWl2JzpcbiAgICAgICAgICAgIGdsLnVuaWZvcm0xaXYobG9jYXRpb24sIHZhbHVlKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIC8vIEludDMyQXJyYXkgb3IgSlMgQXJyYXlcbiAgICAgICAgY2FzZSAnMml2JzpcbiAgICAgICAgICAgIGdsLnVuaWZvcm0yaXYobG9jYXRpb24sIHZhbHVlKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIC8vIEludDMyQXJyYXkgb3IgSlMgQXJyYXlcbiAgICAgICAgY2FzZSAnM2l2JzpcbiAgICAgICAgICAgIGdsLnVuaWZvcm0zaXYobG9jYXRpb24sIHZhbHVlKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIC8vIEludDMyQXJyYXkgb3IgSlMgQXJyYXlcbiAgICAgICAgY2FzZSAnNGl2JzpcbiAgICAgICAgICAgIGdsLnVuaWZvcm00aXYobG9jYXRpb24sIHZhbHVlKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIC8vIEZsb2F0MzJBcnJheSBvciBKUyBBcnJheVxuICAgICAgICBjYXNlICcxZnYnOlxuICAgICAgICAgICAgZ2wudW5pZm9ybTFmdihsb2NhdGlvbiwgdmFsdWUpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLy8gRmxvYXQzMkFycmF5IG9yIEpTIEFycmF5XG4gICAgICAgIGNhc2UgJzJmdic6XG4gICAgICAgICAgICBnbC51bmlmb3JtMmZ2KGxvY2F0aW9uLCB2YWx1ZSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAvLyBGbG9hdDMyQXJyYXkgb3IgSlMgQXJyYXlcbiAgICAgICAgY2FzZSAnM2Z2JzpcbiAgICAgICAgICAgIGdsLnVuaWZvcm0zZnYobG9jYXRpb24sIHZhbHVlKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIC8vIEZsb2F0MzJBcnJheSBvciBKUyBBcnJheVxuICAgICAgICBjYXNlICc0ZnYnOlxuICAgICAgICAgICAgZ2wudW5pZm9ybTRmdihsb2NhdGlvbiwgdmFsdWUpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLy8gRmxvYXQzMkFycmF5IG9yIEpTIEFycmF5XG4gICAgICAgIGNhc2UgJ20yJzpcbiAgICAgICAgY2FzZSAnbWF0Mic6XG4gICAgICAgIGNhc2UgJ01hdHJpeDJmdic6XG4gICAgICAgICAgICBnbC51bmlmb3JtTWF0cml4MmZ2KGxvY2F0aW9uLCB1bmlmb3JtLnRyYW5zcG9zZSwgdmFsdWUpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLy8gRmxvYXQzMkFycmF5IG9yIEpTIEFycmF5XG4gICAgICAgIGNhc2UgJ20zJzpcbiAgICAgICAgY2FzZSAnbWF0Myc6XG4gICAgICAgIGNhc2UgJ01hdHJpeDNmdic6XG5cbiAgICAgICAgICAgIGdsLnVuaWZvcm1NYXRyaXgzZnYobG9jYXRpb24sIHVuaWZvcm0udHJhbnNwb3NlLCB2YWx1ZSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAvLyBGbG9hdDMyQXJyYXkgb3IgSlMgQXJyYXlcbiAgICAgICAgY2FzZSAnbTQnOlxuICAgICAgICBjYXNlICdtYXQ0JzpcbiAgICAgICAgY2FzZSAnTWF0cml4NGZ2JzpcbiAgICAgICAgICAgIGdsLnVuaWZvcm1NYXRyaXg0ZnYobG9jYXRpb24sIHVuaWZvcm0udHJhbnNwb3NlLCB2YWx1ZSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAvLyBhIENvbG9yIFZhbHVlXG4gICAgICAgIGNhc2UgJ2MnOlxuICAgICAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdmFsdWUgPSB1dGlscy5oZXgycmdiKHZhbHVlKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZ2wudW5pZm9ybTNmKGxvY2F0aW9uLCB2YWx1ZVswXSwgdmFsdWVbMV0sIHZhbHVlWzJdKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIC8vIGZsYXQgYXJyYXkgb2YgaW50ZWdlcnMgKEpTIG9yIHR5cGVkIGFycmF5KVxuICAgICAgICBjYXNlICdpdjEnOlxuICAgICAgICAgICAgZ2wudW5pZm9ybTFpdihsb2NhdGlvbiwgdmFsdWUpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLy8gZmxhdCBhcnJheSBvZiBpbnRlZ2VycyB3aXRoIDMgeCBOIHNpemUgKEpTIG9yIHR5cGVkIGFycmF5KVxuICAgICAgICBjYXNlICdpdic6XG4gICAgICAgICAgICBnbC51bmlmb3JtM2l2KGxvY2F0aW9uLCB2YWx1ZSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAvLyBmbGF0IGFycmF5IG9mIGZsb2F0cyAoSlMgb3IgdHlwZWQgYXJyYXkpXG4gICAgICAgIGNhc2UgJ2Z2MSc6XG4gICAgICAgICAgICBnbC51bmlmb3JtMWZ2KGxvY2F0aW9uLCB2YWx1ZSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAvLyBmbGF0IGFycmF5IG9mIGZsb2F0cyB3aXRoIDMgeCBOIHNpemUgKEpTIG9yIHR5cGVkIGFycmF5KVxuICAgICAgICBjYXNlICdmdic6XG4gICAgICAgICAgICBnbC51bmlmb3JtM2Z2KGxvY2F0aW9uLCB2YWx1ZSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAvLyBhcnJheSBvZiAyRCBQb2ludCBvYmplY3RzXG4gICAgICAgIGNhc2UgJ3Yydic6XG4gICAgICAgICAgICBpZiAoIXVuaWZvcm0uX2FycmF5KVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHVuaWZvcm0uX2FycmF5ID0gbmV3IEZsb2F0MzJBcnJheSgyICogdmFsdWUubGVuZ3RoKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZm9yIChpID0gMCwgaWwgPSB2YWx1ZS5sZW5ndGg7IGkgPCBpbDsgKytpKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHVuaWZvcm0uX2FycmF5W2kgKiAyXSAgICAgICA9IHZhbHVlW2ldLng7XG4gICAgICAgICAgICAgICAgdW5pZm9ybS5fYXJyYXlbaSAqIDIgKyAxXSAgID0gdmFsdWVbaV0ueTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZ2wudW5pZm9ybTJmdihsb2NhdGlvbiwgdW5pZm9ybS5fYXJyYXkpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLy8gYXJyYXkgb2YgM0QgUG9pbnQgb2JqZWN0c1xuICAgICAgICBjYXNlICd2M3YnOlxuICAgICAgICAgICAgaWYgKCF1bmlmb3JtLl9hcnJheSlcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB1bmlmb3JtLl9hcnJheSA9IG5ldyBGbG9hdDMyQXJyYXkoMyAqIHZhbHVlLmxlbmd0aCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGZvciAoaSA9IDAsIGlsID0gdmFsdWUubGVuZ3RoOyBpIDwgaWw7ICsraSlcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB1bmlmb3JtLl9hcnJheVtpICogM10gICAgICAgPSB2YWx1ZVtpXS54O1xuICAgICAgICAgICAgICAgIHVuaWZvcm0uX2FycmF5W2kgKiAzICsgMV0gICA9IHZhbHVlW2ldLnk7XG4gICAgICAgICAgICAgICAgdW5pZm9ybS5fYXJyYXlbaSAqIDMgKyAyXSAgID0gdmFsdWVbaV0uejtcblxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBnbC51bmlmb3JtM2Z2KGxvY2F0aW9uLCB1bmlmb3JtLl9hcnJheSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAvLyBhcnJheSBvZiA0RCBQb2ludCBvYmplY3RzXG4gICAgICAgIGNhc2UgJ3Y0dic6XG4gICAgICAgICAgICBpZiAoIXVuaWZvcm0uX2FycmF5KVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHVuaWZvcm0uX2FycmF5ID0gbmV3IEZsb2F0MzJBcnJheSg0ICogdmFsdWUubGVuZ3RoKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZm9yIChpID0gMCwgaWwgPSB2YWx1ZS5sZW5ndGg7IGkgPCBpbDsgKytpKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHVuaWZvcm0uX2FycmF5W2kgKiA0XSAgICAgICA9IHZhbHVlW2ldLng7XG4gICAgICAgICAgICAgICAgdW5pZm9ybS5fYXJyYXlbaSAqIDQgKyAxXSAgID0gdmFsdWVbaV0ueTtcbiAgICAgICAgICAgICAgICB1bmlmb3JtLl9hcnJheVtpICogNCArIDJdICAgPSB2YWx1ZVtpXS56O1xuICAgICAgICAgICAgICAgIHVuaWZvcm0uX2FycmF5W2kgKiA0ICsgM10gICA9IHZhbHVlW2ldLnc7XG5cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZ2wudW5pZm9ybTRmdihsb2NhdGlvbiwgdW5pZm9ybS5fYXJyYXkpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLy8gUElYSS5UZXh0dXJlXG4gICAgICAgIGNhc2UgJ3QnOlxuICAgICAgICBjYXNlICdzYW1wbGVyMkQnOlxuXG4gICAgICAgICAgICBpZiAoIXVuaWZvcm0udmFsdWUgfHwgIXVuaWZvcm0udmFsdWUuYmFzZVRleHR1cmUuaGFzTG9hZGVkKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBhY3RpdmF0ZSB0aGlzIHRleHR1cmVcbiAgICAgICAgICAgIGdsLmFjdGl2ZVRleHR1cmUoZ2xbJ1RFWFRVUkUnICsgdGhpcy50ZXh0dXJlQ291bnRdKTtcblxuICAgICAgICAgICAgdmFyIHRleHR1cmUgPSB1bmlmb3JtLnZhbHVlLmJhc2VUZXh0dXJlLl9nbFRleHR1cmVzW2dsLmlkXTtcblxuICAgICAgICAgICAgaWYgKCF0ZXh0dXJlKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHRoaXMuaW5pdFNhbXBsZXIyRCh1bmlmb3JtKTtcblxuICAgICAgICAgICAgICAgIC8vIHNldCB0aGUgdGV4dHVyIHRvIHRoZSBuZXdseSBjcmVhdGVkIG9uZS4uXG4gICAgICAgICAgICAgICAgdGV4dHVyZSA9IHVuaWZvcm0udmFsdWUuYmFzZVRleHR1cmUuX2dsVGV4dHVyZXNbZ2wuaWRdO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBiaW5kIHRoZSB0ZXh0dXJlXG4gICAgICAgICAgICBnbC5iaW5kVGV4dHVyZShnbC5URVhUVVJFXzJELCB0ZXh0dXJlKTtcblxuICAgICAgICAgICAgLy8gc2V0IHVuaWZvcm0gdG8gdGV4dHVyZSBpbmRleFxuICAgICAgICAgICAgZ2wudW5pZm9ybTFpKHVuaWZvcm0uX2xvY2F0aW9uLCB0aGlzLnRleHR1cmVDb3VudCk7XG5cbiAgICAgICAgICAgIC8vIGluY3JlbWVudCBuZXh0IHRleHR1cmUgaWRcbiAgICAgICAgICAgIHRoaXMudGV4dHVyZUNvdW50Kys7XG5cbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ1BpeGkuanMgU2hhZGVyIFdhcm5pbmc6IFVua25vd24gdW5pZm9ybSB0eXBlOiAnICsgdW5pZm9ybS50eXBlKTtcbiAgICB9XG59O1xuXG4vKipcbiAqIFVwZGF0ZXMgdGhlIHNoYWRlciB1bmlmb3JtIHZhbHVlcy5cbiAqXG4gKi9cblNoYWRlci5wcm90b3R5cGUuc3luY1VuaWZvcm1zID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLnRleHR1cmVDb3VudCA9IDE7XG5cbiAgICBmb3IgKHZhciBrZXkgaW4gdGhpcy51bmlmb3JtcylcbiAgICB7XG4gICAgICAgIHRoaXMuc3luY1VuaWZvcm0odGhpcy51bmlmb3Jtc1trZXldKTtcbiAgICB9XG59O1xuXG5cbi8qKlxuICogSW5pdGlhbGlzZXMgYSBTYW1wbGVyMkQgdW5pZm9ybSAod2hpY2ggbWF5IG9ubHkgYmUgYXZhaWxhYmxlIGxhdGVyIG9uIGFmdGVyIGluaXRVbmlmb3JtcyBvbmNlIHRoZSB0ZXh0dXJlIGhhcyBsb2FkZWQpXG4gKlxuICovXG5TaGFkZXIucHJvdG90eXBlLmluaXRTYW1wbGVyMkQgPSBmdW5jdGlvbiAodW5pZm9ybSlcbntcbiAgICB2YXIgZ2wgPSB0aGlzLmdsO1xuXG4gICAgdmFyIHRleHR1cmUgPSB1bmlmb3JtLnZhbHVlLmJhc2VUZXh0dXJlO1xuXG4gICAgaWYoIXRleHR1cmUuaGFzTG9hZGVkKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuXG5cbiAgICBpZiAodW5pZm9ybS50ZXh0dXJlRGF0YSlcbiAgICB7XG5cbiAgICAgICAgLy9UT0RPIG1vdmUgdGhpcy4uLlxuICAgICAgICB2YXIgZGF0YSA9IHVuaWZvcm0udGV4dHVyZURhdGE7XG5cbiAgICAgICAgdGV4dHVyZS5fZ2xUZXh0dXJlc1tnbC5pZF0gPSBnbC5jcmVhdGVUZXh0dXJlKCk7XG5cbiAgICAgICAgZ2wuYmluZFRleHR1cmUoZ2wuVEVYVFVSRV8yRCwgdGV4dHVyZS5fZ2xUZXh0dXJlc1tnbC5pZF0pO1xuXG4gICAgICAgIGdsLnBpeGVsU3RvcmVpKGdsLlVOUEFDS19QUkVNVUxUSVBMWV9BTFBIQV9XRUJHTCwgdGV4dHVyZS5wcmVtdWx0aXBsaWVkQWxwaGEpO1xuICAgICAgICAvLyBHTFRleHR1cmUgPSBtYWcgbGluZWFyLCBtaW4gbGluZWFyX21pcG1hcF9saW5lYXIsIHdyYXAgcmVwZWF0ICsgZ2wuZ2VuZXJhdGVNaXBtYXAoZ2wuVEVYVFVSRV8yRCk7XG4gICAgICAgIC8vIEdMVGV4dHVyZUxpbmVhciA9IG1hZy9taW4gbGluZWFyLCB3cmFwIGNsYW1wXG4gICAgICAgIC8vIEdMVGV4dHVyZU5lYXJlc3RSZXBlYXQgPSBtYWcvbWluIE5FQVJFU1QsIHdyYXAgcmVwZWF0XG4gICAgICAgIC8vIEdMVGV4dHVyZU5lYXJlc3QgPSBtYWcvbWluIG5lYXJlc3QsIHdyYXAgY2xhbXBcbiAgICAgICAgLy8gQXVkaW9UZXh0dXJlID0gd2hhdGV2ZXIgKyBsdW1pbmFuY2UgKyB3aWR0aCA1MTIsIGhlaWdodCAyLCBib3JkZXIgMFxuICAgICAgICAvLyBLZXlUZXh0dXJlID0gd2hhdGV2ZXIgKyBsdW1pbmFuY2UgKyB3aWR0aCAyNTYsIGhlaWdodCAyLCBib3JkZXIgMFxuXG4gICAgICAgIC8vICBtYWdGaWx0ZXIgY2FuIGJlOiBnbC5MSU5FQVIsIGdsLkxJTkVBUl9NSVBNQVBfTElORUFSIG9yIGdsLk5FQVJFU1RcbiAgICAgICAgLy8gIHdyYXBTL1QgY2FuIGJlOiBnbC5DTEFNUF9UT19FREdFIG9yIGdsLlJFUEVBVFxuXG4gICAgICAgIGdsLnRleEltYWdlMkQoZ2wuVEVYVFVSRV8yRCwgMCwgZGF0YS5sdW1pbmFuY2UgPyBnbC5MVU1JTkFOQ0UgOiBnbC5SR0JBLCBnbC5SR0JBLCBnbC5VTlNJR05FRF9CWVRFLCB0ZXh0dXJlLnNvdXJjZSk7XG5cbiAgICAgICAgZ2wudGV4UGFyYW1ldGVyaShnbC5URVhUVVJFXzJELCBnbC5URVhUVVJFX01BR19GSUxURVIsIGRhdGEubWFnRmlsdGVyID8gZGF0YS5tYWdGaWx0ZXIgOiBnbC5MSU5FQVIgKTtcbiAgICAgICAgZ2wudGV4UGFyYW1ldGVyaShnbC5URVhUVVJFXzJELCBnbC5URVhUVVJFX01JTl9GSUxURVIsIGRhdGEud3JhcFMgPyBkYXRhLndyYXBTIDogZ2wuQ0xBTVBfVE9fRURHRSApO1xuXG4gICAgICAgIGdsLnRleFBhcmFtZXRlcmkoZ2wuVEVYVFVSRV8yRCwgZ2wuVEVYVFVSRV9XUkFQX1QsIGRhdGEud3JhcFMgPyBkYXRhLndyYXBTIDogZ2wuQ0xBTVBfVE9fRURHRSk7XG4gICAgICAgIGdsLnRleFBhcmFtZXRlcmkoZ2wuVEVYVFVSRV8yRCwgZ2wuVEVYVFVSRV9XUkFQX1MsIGRhdGEud3JhcFQgPyBkYXRhLndyYXBUIDogZ2wuQ0xBTVBfVE9fRURHRSk7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHRoaXMuc2hhZGVyTWFuYWdlci5yZW5kZXJlci51cGRhdGVUZXh0dXJlKHRleHR1cmUpO1xuICAgIH1cbn07XG5cbi8qKlxuICogRGVzdHJveXMgdGhlIHNoYWRlci5cbiAqXG4gKi9cblNoYWRlci5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy5nbC5kZWxldGVQcm9ncmFtKHRoaXMucHJvZ3JhbSk7XG5cbiAgICB0aGlzLmdsID0gbnVsbDtcbiAgICB0aGlzLnVuaWZvcm1zID0gbnVsbDtcbiAgICB0aGlzLmF0dHJpYnV0ZXMgPSBudWxsO1xuXG4gICAgdGhpcy52ZXJ0ZXhTcmMgPSBudWxsO1xuICAgIHRoaXMuZnJhZ21lbnRTcmMgPSBudWxsO1xufTtcblxuU2hhZGVyLnByb3RvdHlwZS5fZ2xDb21waWxlID0gZnVuY3Rpb24gKHR5cGUsIHNyYylcbntcbiAgICB2YXIgc2hhZGVyID0gdGhpcy5nbC5jcmVhdGVTaGFkZXIodHlwZSk7XG5cbiAgICB0aGlzLmdsLnNoYWRlclNvdXJjZShzaGFkZXIsIHNyYyk7XG4gICAgdGhpcy5nbC5jb21waWxlU2hhZGVyKHNoYWRlcik7XG5cbiAgICBpZiAoIXRoaXMuZ2wuZ2V0U2hhZGVyUGFyYW1ldGVyKHNoYWRlciwgdGhpcy5nbC5DT01QSUxFX1NUQVRVUykpXG4gICAge1xuICAgICAgICBjb25zb2xlLmxvZyh0aGlzLmdsLmdldFNoYWRlckluZm9Mb2coc2hhZGVyKSk7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHJldHVybiBzaGFkZXI7XG59O1xuIiwidmFyIFNoYWRlciA9IHJlcXVpcmUoJy4vU2hhZGVyJyk7XG5cbi8qKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQGV4dGVuZHMgUElYSS5TaGFkZXJcbiAqIEBwYXJhbSBzaGFkZXJNYW5hZ2VyIHtQSVhJLlNoYWRlck1hbmFnZXJ9IFRoZSB3ZWJnbCBzaGFkZXIgbWFuYWdlciB0aGlzIHNoYWRlciB3b3JrcyBmb3IuXG4gKiBAcGFyYW0gW3ZlcnRleFNyY10ge3N0cmluZ30gVGhlIHNvdXJjZSBvZiB0aGUgdmVydGV4IHNoYWRlci5cbiAqIEBwYXJhbSBbZnJhZ21lbnRTcmNdIHtzdHJpbmd9IFRoZSBzb3VyY2Ugb2YgdGhlIGZyYWdtZW50IHNoYWRlci5cbiAqIEBwYXJhbSBbY3VzdG9tVW5pZm9ybXNdIHtvYmplY3R9IEN1c3RvbSB1bmlmb3JtcyB0byB1c2UgdG8gYXVnbWVudCB0aGUgYnVpbHQtaW4gb25lcy5cbiAqIEBwYXJhbSBbZnJhZ21lbnRTcmNdIHtzdHJpbmd9IFRoZSBzb3VyY2Ugb2YgdGhlIGZyYWdtZW50IHNoYWRlci5cbiAqL1xuZnVuY3Rpb24gVGV4dHVyZVNoYWRlcihzaGFkZXJNYW5hZ2VyLCB2ZXJ0ZXhTcmMsIGZyYWdtZW50U3JjLCBjdXN0b21Vbmlmb3JtcywgY3VzdG9tQXR0cmlidXRlcylcbntcbiAgICB2YXIgdW5pZm9ybXMgPSB7XG5cbiAgICAgICAgdVNhbXBsZXI6ICAgICAgICAgICB7IHR5cGU6ICdzYW1wbGVyMkQnLCB2YWx1ZTogMCB9LFxuICAgICAgICBwcm9qZWN0aW9uTWF0cml4OiAgIHsgdHlwZTogJ21hdDMnLCB2YWx1ZTogbmV3IEZsb2F0MzJBcnJheShbMSwgMCwgMCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsIDEsIDAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLCAwLCAxXSkgfVxuICAgIH07XG5cbiAgICBpZiAoY3VzdG9tVW5pZm9ybXMpXG4gICAge1xuICAgICAgICBmb3IgKHZhciB1IGluIGN1c3RvbVVuaWZvcm1zKVxuICAgICAgICB7XG4gICAgICAgICAgICB1bmlmb3Jtc1t1XSA9IGN1c3RvbVVuaWZvcm1zW3VdO1xuICAgICAgICB9XG4gICAgfVxuXG5cbiAgICB2YXIgYXR0cmlidXRlcyA9IHtcbiAgICAgICAgYVZlcnRleFBvc2l0aW9uOiAgICAwLFxuICAgICAgICBhVGV4dHVyZUNvb3JkOiAgICAgIDAsXG4gICAgICAgIGFDb2xvcjogICAgICAgICAgICAgMFxuICAgIH07XG5cbiAgICBpZiAoY3VzdG9tQXR0cmlidXRlcylcbiAgICB7XG4gICAgICAgIGZvciAodmFyIGEgaW4gY3VzdG9tQXR0cmlidXRlcylcbiAgICAgICAge1xuICAgICAgICAgICAgYXR0cmlidXRlc1thXSA9IGN1c3RvbUF0dHJpYnV0ZXNbYV07XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGUgdmVydGV4IHNoYWRlci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge3N0cmluZ31cbiAgICAgKi9cbiAgICB2ZXJ0ZXhTcmMgPSB2ZXJ0ZXhTcmMgfHwgVGV4dHVyZVNoYWRlci5kZWZhdWx0VmVydGV4U3JjO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGZyYWdtZW50IHNoYWRlci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge3N0cmluZ31cbiAgICAgKi9cbiAgICBmcmFnbWVudFNyYyA9IGZyYWdtZW50U3JjIHx8IFRleHR1cmVTaGFkZXIuZGVmYXVsdEZyYWdtZW50U3JjO1xuXG4gICAgU2hhZGVyLmNhbGwodGhpcywgc2hhZGVyTWFuYWdlciwgdmVydGV4U3JjLCBmcmFnbWVudFNyYywgdW5pZm9ybXMsIGF0dHJpYnV0ZXMpO1xufVxuXG4vLyBjb25zdHJ1Y3RvclxuVGV4dHVyZVNoYWRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFNoYWRlci5wcm90b3R5cGUpO1xuVGV4dHVyZVNoYWRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBUZXh0dXJlU2hhZGVyO1xubW9kdWxlLmV4cG9ydHMgPSBUZXh0dXJlU2hhZGVyO1xuXG4vKipcbiAqIFRoZSBkZWZhdWx0IHZlcnRleCBzaGFkZXIgc291cmNlXG4gKlxuICogQHN0YXRpY1xuICogQGNvbnN0YW50XG4gKi9cblRleHR1cmVTaGFkZXIuZGVmYXVsdFZlcnRleFNyYyA9IFtcbiAgICAncHJlY2lzaW9uIGxvd3AgZmxvYXQ7JyxcbiAgICAnYXR0cmlidXRlIHZlYzIgYVZlcnRleFBvc2l0aW9uOycsXG4gICAgJ2F0dHJpYnV0ZSB2ZWMyIGFUZXh0dXJlQ29vcmQ7JyxcbiAgICAnYXR0cmlidXRlIHZlYzQgYUNvbG9yOycsXG5cbiAgICAndW5pZm9ybSBtYXQzIHByb2plY3Rpb25NYXRyaXg7JyxcblxuICAgICd2YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDsnLFxuICAgICd2YXJ5aW5nIHZlYzQgdkNvbG9yOycsXG5cbiAgICAndm9pZCBtYWluKHZvaWQpeycsXG4gICAgJyAgIGdsX1Bvc2l0aW9uID0gdmVjNCgocHJvamVjdGlvbk1hdHJpeCAqIHZlYzMoYVZlcnRleFBvc2l0aW9uLCAxLjApKS54eSwgMC4wLCAxLjApOycsXG4gICAgJyAgIHZUZXh0dXJlQ29vcmQgPSBhVGV4dHVyZUNvb3JkOycsXG4gICAgJyAgIHZDb2xvciA9IHZlYzQoYUNvbG9yLnJnYiAqIGFDb2xvci5hLCBhQ29sb3IuYSk7JyxcbiAgICAnfSdcbl0uam9pbignXFxuJyk7XG5cbi8qKlxuICogVGhlIGRlZmF1bHQgZnJhZ21lbnQgc2hhZGVyIHNvdXJjZVxuICpcbiAqIEBzdGF0aWNcbiAqIEBjb25zdGFudFxuICovXG5UZXh0dXJlU2hhZGVyLmRlZmF1bHRGcmFnbWVudFNyYyA9IFtcbiAgICAncHJlY2lzaW9uIGxvd3AgZmxvYXQ7JyxcblxuICAgICd2YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDsnLFxuICAgICd2YXJ5aW5nIHZlYzQgdkNvbG9yOycsXG5cbiAgICAndW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXI7JyxcblxuICAgICd2b2lkIG1haW4odm9pZCl7JyxcbiAgICAnICAgZ2xfRnJhZ0NvbG9yID0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2VGV4dHVyZUNvb3JkKSAqIHZDb2xvciA7JyxcbiAgICAnfSdcbl0uam9pbignXFxuJyk7XG4iLCJ2YXIgU2hhZGVyID0gcmVxdWlyZSgncGl4aS1nbC1jb3JlJykuR0xTaGFkZXI7XG5cbi8qKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQGV4dGVuZHMgUElYSS5TaGFkZXJcbiAqIEBwYXJhbSBzaGFkZXJNYW5hZ2VyIHtQSVhJLlNoYWRlck1hbmFnZXJ9IFRoZSB3ZWJnbCBzaGFkZXIgbWFuYWdlciB0aGlzIHNoYWRlciB3b3JrcyBmb3IuXG4gKiBAcGFyYW0gW3ZlcnRleFNyY10ge3N0cmluZ30gVGhlIHNvdXJjZSBvZiB0aGUgdmVydGV4IHNoYWRlci5cbiAqIEBwYXJhbSBbZnJhZ21lbnRTcmNdIHtzdHJpbmd9IFRoZSBzb3VyY2Ugb2YgdGhlIGZyYWdtZW50IHNoYWRlci5cbiAqIEBwYXJhbSBbY3VzdG9tVW5pZm9ybXNdIHtvYmplY3R9IEN1c3RvbSB1bmlmb3JtcyB0byB1c2UgdG8gYXVnbWVudCB0aGUgYnVpbHQtaW4gb25lcy5cbiAqIEBwYXJhbSBbZnJhZ21lbnRTcmNdIHtzdHJpbmd9IFRoZSBzb3VyY2Ugb2YgdGhlIGZyYWdtZW50IHNoYWRlci5cbiAqL1xuZnVuY3Rpb24gVGV4dHVyZVNoYWRlcihnbClcbntcbiAgICAvKipcbiAgICAgKiBUaGUgdmVydGV4IHNoYWRlci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge3N0cmluZ31cbiAgICAgKi9cbiAgICB2ZXJ0ZXhTcmMgPSBUZXh0dXJlU2hhZGVyLmRlZmF1bHRWZXJ0ZXhTcmM7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgZnJhZ21lbnQgc2hhZGVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7c3RyaW5nfVxuICAgICAqL1xuICAgIGZyYWdtZW50U3JjID0gVGV4dHVyZVNoYWRlci5kZWZhdWx0RnJhZ21lbnRTcmM7XG5cbiAgICBTaGFkZXIuY2FsbCh0aGlzLCBnbCwgdmVydGV4U3JjLCBmcmFnbWVudFNyYyk7Ly8sIHVuaWZvcm1zLCBhdHRyaWJ1dGVzKTtcblxufVxuXG4vLyBjb25zdHJ1Y3RvclxuVGV4dHVyZVNoYWRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFNoYWRlci5wcm90b3R5cGUpO1xuVGV4dHVyZVNoYWRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBUZXh0dXJlU2hhZGVyO1xubW9kdWxlLmV4cG9ydHMgPSBUZXh0dXJlU2hhZGVyO1xuXG4vKipcbiAqIFRoZSBkZWZhdWx0IHZlcnRleCBzaGFkZXIgc291cmNlXG4gKlxuICogQHN0YXRpY1xuICogQGNvbnN0YW50XG4gKi9cblRleHR1cmVTaGFkZXIuZGVmYXVsdFZlcnRleFNyYyA9IFtcbiAgICAncHJlY2lzaW9uIGxvd3AgZmxvYXQ7JyxcbiAgICAnYXR0cmlidXRlIHZlYzIgYVZlcnRleFBvc2l0aW9uOycsXG4gICAgJ2F0dHJpYnV0ZSB2ZWMyIGFUZXh0dXJlQ29vcmQ7JyxcbiAgICAnYXR0cmlidXRlIHZlYzQgYUNvbG9yOycsXG5cbiAgICAndW5pZm9ybSBtYXQzIHByb2plY3Rpb25NYXRyaXg7JyxcblxuICAgICd2YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDsnLFxuICAgICd2YXJ5aW5nIHZlYzQgdkNvbG9yOycsXG5cbiAgICAndm9pZCBtYWluKHZvaWQpeycsXG4gICAgJyAgIGdsX1Bvc2l0aW9uID0gdmVjNCgocHJvamVjdGlvbk1hdHJpeCAqIHZlYzMoYVZlcnRleFBvc2l0aW9uLCAxLjApKS54eSwgMC4wLCAxLjApOycsXG4gICAgJyAgIHZUZXh0dXJlQ29vcmQgPSBhVGV4dHVyZUNvb3JkOycsXG4gICAgJyAgIHZDb2xvciA9IHZlYzQoYUNvbG9yLnJnYiAqIGFDb2xvci5hLCBhQ29sb3IuYSk7JyxcbiAgICAnfSdcbl0uam9pbignXFxuJyk7XG5cbi8qKlxuICogVGhlIGRlZmF1bHQgZnJhZ21lbnQgc2hhZGVyIHNvdXJjZVxuICpcbiAqIEBzdGF0aWNcbiAqIEBjb25zdGFudFxuICovXG5UZXh0dXJlU2hhZGVyLmRlZmF1bHRGcmFnbWVudFNyYyA9IFtcbiAgICAncHJlY2lzaW9uIGxvd3AgZmxvYXQ7JyxcblxuICAgICd2YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDsnLFxuICAgICd2YXJ5aW5nIHZlYzQgdkNvbG9yOycsXG5cbiAgICAndW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXI7JyxcblxuICAgICd2b2lkIG1haW4odm9pZCl7JyxcbiAgICAnICAgZ2xfRnJhZ0NvbG9yID0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2VGV4dHVyZUNvb3JkKSAqIHZDb2xvciA7JyxcbiAgICAnfSdcbl0uam9pbignXFxuJyk7XG4iLCJ2YXIgV2ViR0xNYW5hZ2VyID0gcmVxdWlyZSgnLi4vbWFuYWdlcnMvV2ViR0xNYW5hZ2VyJyk7XG5cbi8qKlxuICogQmFzZSBmb3IgYSBjb21tb24gb2JqZWN0IHJlbmRlcmVyIHRoYXQgY2FuIGJlIHVzZWQgYXMgYSBzeXN0ZW0gcmVuZGVyZXIgcGx1Z2luLlxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5XZWJHTE1hbmFnZXJcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcn0gVGhlIHJlbmRlcmVyIHRoaXMgb2JqZWN0IHJlbmRlcmVyIHdvcmtzIGZvci5cbiAqL1xuZnVuY3Rpb24gT2JqZWN0UmVuZGVyZXIocmVuZGVyZXIpXG57XG4gICAgV2ViR0xNYW5hZ2VyLmNhbGwodGhpcywgcmVuZGVyZXIpO1xufVxuXG5cbk9iamVjdFJlbmRlcmVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoV2ViR0xNYW5hZ2VyLnByb3RvdHlwZSk7XG5PYmplY3RSZW5kZXJlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBPYmplY3RSZW5kZXJlcjtcbm1vZHVsZS5leHBvcnRzID0gT2JqZWN0UmVuZGVyZXI7XG5cbi8qKlxuICogU3RhcnRzIHRoZSByZW5kZXJlciBhbmQgc2V0cyB0aGUgc2hhZGVyXG4gKlxuICovXG5PYmplY3RSZW5kZXJlci5wcm90b3R5cGUuc3RhcnQgPSBmdW5jdGlvbiAoKVxue1xuICAgIC8vIHNldCB0aGUgc2hhZGVyLi5cbn07XG5cbi8qKlxuICogU3RvcHMgdGhlIHJlbmRlcmVyXG4gKlxuICovXG5PYmplY3RSZW5kZXJlci5wcm90b3R5cGUuc3RvcCA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy5mbHVzaCgpO1xufTtcblxuLyoqXG4gKiBmbHVzaGVzXG4gKlxuICovXG5PYmplY3RSZW5kZXJlci5wcm90b3R5cGUuZmx1c2ggPSBmdW5jdGlvbiAoKVxue1xuICAgIC8vIGZsdXNoIVxufTtcblxuLyoqXG4gKiBSZW5kZXJzIGFuIG9iamVjdFxuICpcbiAqIEBwYXJhbSBvYmplY3Qge1BJWEkuRGlzcGxheU9iamVjdH0gVGhlIG9iamVjdCB0byByZW5kZXIuXG4gKi9cbk9iamVjdFJlbmRlcmVyLnByb3RvdHlwZS5yZW5kZXIgPSBmdW5jdGlvbiAob2JqZWN0KSAvLyBqc2hpbnQgdW51c2VkOmZhbHNlXG57XG4gICAgLy8gcmVuZGVyIHRoZSBvYmplY3Rcbn07XG4iLCIvKipcbiAqIEhlbHBlciBjbGFzcyB0byBjcmVhdGUgYSBxdWFkXG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIGdsIHtXZWJHTFJlbmRlcmluZ0NvbnRleHR9IFRoZSBnbCBjb250ZXh0IGZvciB0aGlzIHF1YWQgdG8gdXNlLlxuICovXG5mdW5jdGlvbiBRdWFkKGdsKVxue1xuICAgIC8qXG4gICAgICogdGhlIGN1cnJlbnQgV2ViR0wgZHJhd2luZyBjb250ZXh0XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtXZWJHTFJlbmRlcmluZ0NvbnRleHR9XG4gICAgICovXG4gICAgdGhpcy5nbCA9IGdsO1xuXG4vLyAgICB0aGlzLnRleHR1cmVzID0gbmV3IFRleHR1cmVVdnMoKTtcblxuICAgIC8qKlxuICAgICAqIEFuIGFycmF5IG9mIHZlcnRpY2VzXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtGbG9hdDMyQXJyYXl9XG4gICAgICovXG4gICAgdGhpcy52ZXJ0aWNlcyA9IG5ldyBGbG9hdDMyQXJyYXkoW1xuICAgICAgICAwLDAsXG4gICAgICAgIDIwMCwwLFxuICAgICAgICAyMDAsMjAwLFxuICAgICAgICAwLDIwMFxuICAgIF0pO1xuXG4gICAgLyoqXG4gICAgICogVGhlIFV2cyBvZiB0aGUgcXVhZFxuICAgICAqXG4gICAgICogQG1lbWJlciB7RmxvYXQzMkFycmF5fVxuICAgICAqL1xuICAgIHRoaXMudXZzID0gbmV3IEZsb2F0MzJBcnJheShbXG4gICAgICAgIDAsMCxcbiAgICAgICAgMSwwLFxuICAgICAgICAxLDEsXG4gICAgICAgIDAsMVxuICAgIF0pO1xuXG4vLyAgICB2YXIgd2hpdGUgPSAoMHhGRkZGRkYgPj4gMTYpICsgKDB4RkZGRkZGICYgMHhmZjAwKSArICgoMHhGRkZGRkYgJiAweGZmKSA8PCAxNikgKyAoMSAqIDI1NSA8PCAyNCk7XG4gICAgLy9UT0RPIGNvbnZlcnQgdGhpcyB0byBhIDMyIHVuc2lnbmVkIGludCBhcnJheVxuICAgIC8qKlxuICAgICAqIFRoZSBjb2xvciBjb21wb25lbnRzIG9mIHRoZSB0cmlhbmdsZXNcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge0Zsb2F0MzJBcnJheX1cbiAgICAgKi9cbiAgICB0aGlzLmNvbG9ycyA9IG5ldyBGbG9hdDMyQXJyYXkoW1xuICAgICAgICAxLDEsMSwxLFxuICAgICAgICAxLDEsMSwxLFxuICAgICAgICAxLDEsMSwxLFxuICAgICAgICAxLDEsMSwxXG4gICAgXSk7XG5cbiAgICAvKlxuICAgICAqIEBtZW1iZXIge1VpbnQxNkFycmF5fSBBbiBhcnJheSBjb250YWluaW5nIHRoZSBpbmRpY2VzIG9mIHRoZSB2ZXJ0aWNlc1xuICAgICAqL1xuICAgIHRoaXMuaW5kaWNlcyA9IG5ldyBVaW50MTZBcnJheShbXG4gICAgICAgIDAsIDEsIDIsIDAsIDMsIDJcbiAgICBdKTtcblxuICAgIC8qXG4gICAgICogQG1lbWJlciB7V2ViR0xCdWZmZXJ9IFRoZSB2ZXJ0ZXggYnVmZmVyXG4gICAgICovXG4gICAgdGhpcy52ZXJ0ZXhCdWZmZXIgPSBnbC5jcmVhdGVCdWZmZXIoKTtcblxuICAgIC8qXG4gICAgICogQG1lbWJlciB7V2ViR0xCdWZmZXJ9IFRoZSBpbmRleCBidWZmZXJcbiAgICAgKi9cbiAgICB0aGlzLmluZGV4QnVmZmVyID0gZ2wuY3JlYXRlQnVmZmVyKCk7XG5cbiAgICBnbC5iaW5kQnVmZmVyKGdsLkFSUkFZX0JVRkZFUiwgdGhpcy52ZXJ0ZXhCdWZmZXIpO1xuICAgIGdsLmJ1ZmZlckRhdGEoZ2wuQVJSQVlfQlVGRkVSLCAoOCArIDggKyAxNikgKiA0LCBnbC5EWU5BTUlDX0RSQVcpO1xuXG4gICAgZ2wuYmluZEJ1ZmZlcihnbC5FTEVNRU5UX0FSUkFZX0JVRkZFUiwgdGhpcy5pbmRleEJ1ZmZlcik7XG4gICAgZ2wuYnVmZmVyRGF0YShnbC5FTEVNRU5UX0FSUkFZX0JVRkZFUiwgdGhpcy5pbmRpY2VzLCBnbC5TVEFUSUNfRFJBVyk7XG5cbiAgICB0aGlzLnVwbG9hZCgpO1xufVxuXG5RdWFkLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFF1YWQ7XG5cbi8qKlxuICogTWFwcyB0d28gUmVjdGFuZ2xlIHRvIHRoZSBxdWFkXG4gKiBAcGFyYW0gcmVjdCB7UElYSS5SZWN0YW5nbGV9IHRoZSBmaXJzdCByZWN0YW5nbGVcbiAqIEBwYXJhbSByZWN0MiB7UElYSS5SZWN0YW5nbGV9IHRoZSBzZWNvbmQgcmVjdGFuZ2xlXG4gKi9cblF1YWQucHJvdG90eXBlLm1hcCA9IGZ1bmN0aW9uKHJlY3QsIHJlY3QyKVxue1xuICAgIHZhciB4ID0gMDsgLy9yZWN0Mi54IC8gcmVjdC53aWR0aDtcbiAgICB2YXIgeSA9IDA7IC8vcmVjdDIueSAvIHJlY3QuaGVpZ2h0O1xuXG4gICAgdGhpcy51dnNbMF0gPSB4O1xuICAgIHRoaXMudXZzWzFdID0geTtcblxuICAgIHRoaXMudXZzWzJdID0geCArIHJlY3QyLndpZHRoIC8gcmVjdC53aWR0aDtcbiAgICB0aGlzLnV2c1szXSA9IHk7XG5cbiAgICB0aGlzLnV2c1s0XSA9IHggKyByZWN0Mi53aWR0aCAvIHJlY3Qud2lkdGg7XG4gICAgdGhpcy51dnNbNV0gPSB5ICsgcmVjdDIuaGVpZ2h0IC8gcmVjdC5oZWlnaHQ7XG5cbiAgICB0aGlzLnV2c1s2XSA9IHg7XG4gICAgdGhpcy51dnNbN10gPSB5ICsgcmVjdDIuaGVpZ2h0IC8gcmVjdC5oZWlnaHQ7XG5cbiAgICAvLy8gLS0tLS1cbiAgICB4ID0gcmVjdDIueDtcbiAgICB5ID0gcmVjdDIueTtcblxuICAgIHRoaXMudmVydGljZXNbMF0gPSB4O1xuICAgIHRoaXMudmVydGljZXNbMV0gPSB5O1xuXG4gICAgdGhpcy52ZXJ0aWNlc1syXSA9IHggKyByZWN0Mi53aWR0aDtcbiAgICB0aGlzLnZlcnRpY2VzWzNdID0geTtcblxuICAgIHRoaXMudmVydGljZXNbNF0gPSB4ICsgcmVjdDIud2lkdGg7XG4gICAgdGhpcy52ZXJ0aWNlc1s1XSA9IHkgKyByZWN0Mi5oZWlnaHQ7XG5cbiAgICB0aGlzLnZlcnRpY2VzWzZdID0geDtcbiAgICB0aGlzLnZlcnRpY2VzWzddID0geSArIHJlY3QyLmhlaWdodDtcblxuICAgIHRoaXMudXBsb2FkKCk7XG59O1xuXG4vKipcbiAqIEJpbmRzIHRoZSBidWZmZXIgYW5kIHVwbG9hZHMgdGhlIGRhdGFcbiAqL1xuUXVhZC5wcm90b3R5cGUudXBsb2FkID0gZnVuY3Rpb24oKVxue1xuICAgIHZhciBnbCA9IHRoaXMuZ2w7XG5cbiAgICAvLyBUT0RPIGNvdWxkIHByb2JhYmx5IGJlIHB1c2hlZCBpbnRvIG9uZSB1cGxvYWQhXG4gICAgZ2wuYmluZEJ1ZmZlciggZ2wuQVJSQVlfQlVGRkVSLCB0aGlzLnZlcnRleEJ1ZmZlciApO1xuXG4gICAgZ2wuYnVmZmVyU3ViRGF0YShnbC5BUlJBWV9CVUZGRVIsIDAsIHRoaXMudmVydGljZXMpO1xuXG4gICAgZ2wuYnVmZmVyU3ViRGF0YShnbC5BUlJBWV9CVUZGRVIsIDggKiA0LCB0aGlzLnV2cyk7XG5cbiAgICBnbC5idWZmZXJTdWJEYXRhKGdsLkFSUkFZX0JVRkZFUiwgKDggKyA4KSAqIDQsIHRoaXMuY29sb3JzKTtcbn07XG5cblF1YWQucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbigpXG57XG4gICAgdmFyIGdsID0gdGhpcy5nbDtcbiAgICBcbiAgICAgZ2wuZGVsZXRlQnVmZmVyKHRoaXMudmVydGV4QnVmZmVyKTtcbiAgICAgZ2wuZGVsZXRlQnVmZmVyKHRoaXMuaW5kZXhCdWZmZXIpO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBRdWFkO1xuXG5cbiIsInZhciBtYXRoID0gcmVxdWlyZSgnLi4vLi4vLi4vbWF0aCcpLFxuICAgIHV0aWxzID0gcmVxdWlyZSgnLi4vLi4vLi4vdXRpbHMnKSxcbiAgICBDT05TVCA9IHJlcXVpcmUoJy4uLy4uLy4uL2NvbnN0JyksXG4gICAgICAgIFxuICAgIEdMVGV4dHVyZSA9IHJlcXVpcmUoJ3BpeGktZ2wtY29yZScpLkdMVGV4dHVyZSxcbiAgICBHTEZyYW1lYnVmZmVyID0gcmVxdWlyZSgncGl4aS1nbC1jb3JlJykuR0xGcmFtZWJ1ZmZlcixcbiAgICBcbiAgICBTdGVuY2lsTWFza1N0YWNrID0gcmVxdWlyZSgnLi9TdGVuY2lsTWFza1N0YWNrJyk7XG5cbi8qKlxuICogQGF1dGhvciBNYXQgR3JvdmVzIGh0dHA6Ly9tYXRncm92ZXMuY29tLyBARG9vcm1hdDIzXG4gKi9cblxuLyoqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gZ2wge1dlYkdMUmVuZGVyaW5nQ29udGV4dH0gdGhlIGN1cnJlbnQgV2ViR0wgZHJhd2luZyBjb250ZXh0XG4gKiBAcGFyYW0gd2lkdGgge251bWJlcn0gdGhlIGhvcml6b250YWwgcmFuZ2Ugb2YgdGhlIGZpbHRlclxuICogQHBhcmFtIGhlaWdodCB7bnVtYmVyfSB0aGUgdmVydGljYWwgcmFuZ2Ugb2YgdGhlIGZpbHRlclxuICogQHBhcmFtIHNjYWxlTW9kZSB7bnVtYmVyfSBTZWUge0BsaW5rIFBJWEkuU0NBTEVfTU9ERVN9IGZvciBwb3NzaWJsZSB2YWx1ZXNcbiAqIEBwYXJhbSByZXNvbHV0aW9uIHtudW1iZXJ9IHRoZSBjdXJyZW50IHJlc29sdXRpb25cbiAqIEBwYXJhbSByb290IHtib29sZWFufSBXaGV0aGVyIHRoaXMgb2JqZWN0IGlzIHRoZSByb290IGVsZW1lbnQgb3Igbm90XG4gKi9cbnZhciBSZW5kZXJUYXJnZXQgPSBmdW5jdGlvbihnbCwgd2lkdGgsIGhlaWdodCwgc2NhbGVNb2RlLCByZXNvbHV0aW9uLCByb290KVxue1xuICAgIC8vVE9ETyBSZXNvbHV0aW9uIGNvdWxkIGdvIGhlcmUgKCBlZyBsb3cgcmVzIGJsdXJzIClcblxuICAgIC8qKlxuICAgICAqIFRoZSBjdXJyZW50IFdlYkdMIGRyYXdpbmcgY29udGV4dC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1dlYkdMUmVuZGVyaW5nQ29udGV4dH1cbiAgICAgKi9cbiAgICB0aGlzLmdsID0gZ2w7XG5cbiAgICAvLyBuZXh0IHRpbWUgdG8gY3JlYXRlIGEgZnJhbWUgYnVmZmVyIGFuZCB0ZXh0dXJlXG5cbiAgICAvKipcbiAgICAgKiBBIGZyYW1lIGJ1ZmZlclxuICAgICAqXG4gICAgICogQG1lbWJlciB7V2ViR0xGcmFtZUJ1ZmZlcn1cbiAgICAgKi9cbiAgICB0aGlzLmZyYW1lQnVmZmVyID0gbnVsbDtcblxuICAgIC8qKlxuICAgICAqIFRoZSB0ZXh0dXJlXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlRleHR1cmV9XG4gICAgICovXG4gICAgdGhpcy50ZXh0dXJlID0gbnVsbDtcblxuICAgIHRoaXMuY2xlYXJDb2xvciA9IFswLCAwLCAwLCAwXTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBzaXplIG9mIHRoZSBvYmplY3QgYXMgYSByZWN0YW5nbGVcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuUmVjdGFuZ2xlfVxuICAgICAqL1xuICAgIHRoaXMuc2l6ZSA9IG5ldyBtYXRoLlJlY3RhbmdsZSgwLCAwLCAxLCAxKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBjdXJyZW50IHJlc29sdXRpb25cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLnJlc29sdXRpb24gPSByZXNvbHV0aW9uIHx8IENPTlNULlJFU09MVVRJT047XG5cbiAgICAvKipcbiAgICAgKiBUaGUgcHJvamVjdGlvbiBtYXRyaXhcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuTWF0cml4fVxuICAgICAqL1xuICAgIHRoaXMucHJvamVjdGlvbk1hdHJpeCA9IG5ldyBtYXRoLk1hdHJpeCgpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIG9iamVjdCdzIHRyYW5zZm9ybVxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5NYXRyaXh9XG4gICAgICovXG4gICAgdGhpcy50cmFuc2Zvcm0gPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGZyYW1lLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5SZWN0YW5nbGV9XG4gICAgICovXG4gICAgdGhpcy5mcmFtZSA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgc3RlbmNpbCBidWZmZXIgc3RvcmVzIG1hc2tpbmcgZGF0YSBmb3IgdGhlIHJlbmRlciB0YXJnZXRcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1dlYkdMUmVuZGVyQnVmZmVyfVxuICAgICAqL1xuICAgIHRoaXMuc3RlbmNpbEJ1ZmZlciA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgZGF0YSBzdHJ1Y3R1cmUgZm9yIHRoZSBzdGVuY2lsIG1hc2tzXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlN0ZW5jaWxNYXNrU3RhY2t9XG4gICAgICovXG4gICAgdGhpcy5zdGVuY2lsTWFza1N0YWNrID0gbmV3IFN0ZW5jaWxNYXNrU3RhY2soKTtcblxuICAgIC8qKlxuICAgICAqIFN0b3JlcyBmaWx0ZXIgZGF0YSBmb3IgdGhlIHJlbmRlciB0YXJnZXRcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge29iamVjdFtdfVxuICAgICAqL1xuICAgIHRoaXMuZmlsdGVyU3RhY2sgPSBbXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJlbmRlclRhcmdldDp0aGlzLFxuICAgICAgICAgICAgZmlsdGVyOltdLFxuICAgICAgICAgICAgYm91bmRzOnRoaXMuc2l6ZVxuICAgICAgICB9XG4gICAgXTtcblxuXG4gICAgLyoqXG4gICAgICogVGhlIHNjYWxlIG1vZGUuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgUElYSS5TQ0FMRV9NT0RFUy5ERUZBVUxUXG4gICAgICogQHNlZSBQSVhJLlNDQUxFX01PREVTXG4gICAgICovXG4gICAgdGhpcy5zY2FsZU1vZGUgPSBzY2FsZU1vZGUgfHwgQ09OU1QuU0NBTEVfTU9ERVMuREVGQVVMVDtcblxuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgdGhpcyBvYmplY3QgaXMgdGhlIHJvb3QgZWxlbWVudCBvciBub3RcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICovXG4gICAgdGhpcy5yb290ID0gcm9vdDtcblxuICAgIHRoaXMuZnJhbWVCdWZmZXIgPSBHTEZyYW1lYnVmZmVyLmNyZWF0ZVJHQkEoZ2wsIDEwMCwgMTAwKTtcbiAgICBpZih0aGlzLmZyYW1lQnVmZmVyKXRoaXMuZnJhbWVCdWZmZXIudW5iaW5kKCk7XG5cbiAgIC8vIHRoaXMuZnJhbWVCdWZmZXIgPSB7ZnJhbWVidWZmZXI6bnVsbCwgYmluZDpmdW5jdGlvbigpe30sIGNsZWFyOmZ1bmN0aW9uKCl7fSwgcmVzaXplOmZ1bmN0aW9uKCl7fX0vL25ldyBHTEZyYW1lYnVmZmVyLmNyZWF0ZVJHQkEoZ2wsIDEwMCwgMTAwKTtcblxuXG5cbiAgICBpZiAoIXRoaXMucm9vdClcbiAgICB7XG4gICAgICAgIC8qXG4gICAgICAgICAgICBBIGZyYW1lIGJ1ZmZlciBuZWVkcyBhIHRhcmdldCB0byByZW5kZXIgdG8uLlxuICAgICAgICAgICAgY3JlYXRlIGEgdGV4dHVyZSBhbmQgYmluZCBpdCBhdHRhY2ggaXQgdG8gdGhlIGZyYW1lYnVmZmVyLi5cbiAgICAgICAgICovXG4gICAgICAgIFxuICAgICAgICAvLyBjcmVhdGUgYSB0ZXh0dXJlIHRvIGJpbmQgYXR0YWNoIHRvIHRoZSBmcmFtZUJ1ZmZlci4uXG4gICAgICAgIHZhciB0ZXh0dXJlID0gbmV3IEdMVGV4dHVyZShnbCk7XG5cbiAgICAgICAgdGV4dHVyZS5lbmFibGVMaW5lYXJTY2FsaW5nKClcbiAgICAgICAgdGV4dHVyZS5lbmFibGVXcmFwQ2xhbXAoKVxuXG4gICAgICAgIHRoaXMuZnJhbWVCdWZmZXIuZW5hYmxlVGV4dHVyZSh0ZXh0dXJlKTtcblxuICAgICAgICAvLyBUT0RPIGNoYW5nZSFcbiAgICAgICAgLy8gdGhpcyBpcyB1c2VkIGJ5IHRoZSBiYXNlIHRleHR1cmVcbiAgICAgICAgdGhpcy50ZXh0dXJlID0gdGV4dHVyZS50ZXh0dXJlO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICAvLyBtYWtlIGl0IGEgbnVsbCBmcmFtZWJ1ZmZlci4uXG4gICAgICAgIHRoaXMuZnJhbWVCdWZmZXIuZnJhbWVidWZmZXIgPSBudWxsO1xuICAgIH1cblxuICAgIHRoaXMucmVzaXplKHdpZHRoLCBoZWlnaHQpO1xufTtcblxuUmVuZGVyVGFyZ2V0LnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFJlbmRlclRhcmdldDtcbm1vZHVsZS5leHBvcnRzID0gUmVuZGVyVGFyZ2V0O1xuXG4vKipcbiAqIENsZWFycyB0aGUgZmlsdGVyIHRleHR1cmUuXG4gKlxuICogQHBhcmFtIFtiaW5kPWZhbHNlXSB7Ym9vbGVhbn0gU2hvdWxkIHdlIGJpbmQgb3VyIGZyYW1lYnVmZmVyIGJlZm9yZSBjbGVhcmluZz9cbiAqL1xuUmVuZGVyVGFyZ2V0LnByb3RvdHlwZS5jbGVhciA9IGZ1bmN0aW9uKGNsZWFyQ29sb3IpXG57XG4gICAgdmFyIGNjID0gY2xlYXJDb2xvciB8fCB0aGlzLmNsZWFyQ29sb3JcbiAgICB0aGlzLmZyYW1lQnVmZmVyLmNsZWFyKGNjWzBdLGNjWzFdLGNjWzJdLGNjWzNdKS8vcixnLGIsYSk7XG59O1xuXG4vKipcbiAqIEJpbmRzIHRoZSBzdGVuY2lsIGJ1ZmZlci5cbiAqXG4gKi9cblJlbmRlclRhcmdldC5wcm90b3R5cGUuYXR0YWNoU3RlbmNpbEJ1ZmZlciA9IGZ1bmN0aW9uKClcbntcbiAgICAvL1RPRE8gY2hlY2sgaWYgc3RlbmNpbCBpcyBkb25lP1xuICAgIC8qKlxuICAgICAqIFRoZSBzdGVuY2lsIGJ1ZmZlciBpcyB1c2VkIGZvciBtYXNraW5nIGluIHBpeGlcbiAgICAgKiBsZXRzIGNyZWF0ZSBvbmUgYW5kIHRoZW4gYWRkIGF0dGFjaCBpdCB0byB0aGUgZnJhbWVidWZmZXIuLlxuICAgICAqL1xuICAgIGlmICghdGhpcy5yb290KVxuICAgIHtcbiAgICAgICAgdGhpcy5mcmFtZUJ1ZmZlci5lbmFibGVTdGVuY2lsKCk7XG4gICAgfVxufTtcblxuLyoqXG4gKiBCaW5kcyB0aGUgYnVmZmVycyBhbmQgaW5pdGlhbGlzZXMgdGhlIHZpZXdwb3J0LlxuICpcbiAqL1xuUmVuZGVyVGFyZ2V0LnByb3RvdHlwZS5hY3RpdmF0ZSA9IGZ1bmN0aW9uKClcbntcbiAgICAvL1RPT0QgcmVmYWN0b3IgdXNhZ2Ugb2YgZnJhbWUuLlxuICAgIHZhciBnbCA9IHRoaXMuZ2w7XG5cbiAgICB0aGlzLmZyYW1lQnVmZmVyLmJpbmQoKTtcblxuXG4gICAgdmFyIHByb2plY3Rpb25GcmFtZSA9IHRoaXMuZnJhbWUgfHwgdGhpcy5zaXplO1xuXG4gICAgLy8gVE9ETyBhZGQgYSBkaXJ0eSBmbGFnIHRvIHRoaXMgb2YgYSBzZXR0ZXIgZm9yIHRoZSBmcmFtZT9cbiAgICB0aGlzLmNhbGN1bGF0ZVByb2plY3Rpb24oIHByb2plY3Rpb25GcmFtZSApO1xuXG4gICAgaWYodGhpcy50cmFuc2Zvcm0pXG4gICAge1xuICAgICAgICB0aGlzLnByb2plY3Rpb25NYXRyaXguYXBwZW5kKHRoaXMudHJhbnNmb3JtKTtcbiAgICB9XG5cbiAgICBnbC52aWV3cG9ydCgwLDAsIHByb2plY3Rpb25GcmFtZS53aWR0aCAqIHRoaXMucmVzb2x1dGlvbiwgcHJvamVjdGlvbkZyYW1lLmhlaWdodCAqIHRoaXMucmVzb2x1dGlvbik7XG59O1xuXG4vKipcbiAqIFVwZGF0ZXMgdGhlIHByb2plY3Rpb24gbWF0cml4IGJhc2VkIG9uIGEgcHJvamVjdGlvbiBmcmFtZSAod2hpY2ggaXMgYSByZWN0YW5nbGUpXG4gKlxuICovXG5SZW5kZXJUYXJnZXQucHJvdG90eXBlLmNhbGN1bGF0ZVByb2plY3Rpb24gPSBmdW5jdGlvbiAocHJvamVjdGlvbkZyYW1lKVxue1xuICAgIHZhciBwbSA9IHRoaXMucHJvamVjdGlvbk1hdHJpeDtcblxuICAgIHBtLmlkZW50aXR5KCk7XG5cbiAgICBpZiAoIXRoaXMucm9vdClcbiAgICB7XG4gICAgICAgIHBtLmEgPSAxIC8gcHJvamVjdGlvbkZyYW1lLndpZHRoKjI7XG4gICAgICAgIHBtLmQgPSAxIC8gcHJvamVjdGlvbkZyYW1lLmhlaWdodCoyO1xuXG4gICAgICAgIHBtLnR4ID0gLTEgLSBwcm9qZWN0aW9uRnJhbWUueCAqIHBtLmE7XG4gICAgICAgIHBtLnR5ID0gLTEgLSBwcm9qZWN0aW9uRnJhbWUueSAqIHBtLmQ7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHBtLmEgPSAxIC8gcHJvamVjdGlvbkZyYW1lLndpZHRoKjI7XG4gICAgICAgIHBtLmQgPSAtMSAvIHByb2plY3Rpb25GcmFtZS5oZWlnaHQqMjtcblxuICAgICAgICBwbS50eCA9IC0xIC0gcHJvamVjdGlvbkZyYW1lLnggKiBwbS5hO1xuICAgICAgICBwbS50eSA9IDEgLSBwcm9qZWN0aW9uRnJhbWUueSAqIHBtLmQ7XG4gICAgfVxufTtcblxuLyoqXG4gKiBSZXNpemVzIHRoZSB0ZXh0dXJlIHRvIHRoZSBzcGVjaWZpZWQgd2lkdGggYW5kIGhlaWdodFxuICpcbiAqIEBwYXJhbSB3aWR0aCB7TnVtYmVyfSB0aGUgbmV3IHdpZHRoIG9mIHRoZSB0ZXh0dXJlXG4gKiBAcGFyYW0gaGVpZ2h0IHtOdW1iZXJ9IHRoZSBuZXcgaGVpZ2h0IG9mIHRoZSB0ZXh0dXJlXG4gKi9cblJlbmRlclRhcmdldC5wcm90b3R5cGUucmVzaXplID0gZnVuY3Rpb24gKHdpZHRoLCBoZWlnaHQpXG57XG4gICAgd2lkdGggPSB3aWR0aCB8IDA7XG4gICAgaGVpZ2h0ID0gaGVpZ2h0IHwgMDtcblxuICAgIGlmICh0aGlzLnNpemUud2lkdGggPT09IHdpZHRoICYmIHRoaXMuc2l6ZS5oZWlnaHQgPT09IGhlaWdodCkgXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5zaXplLndpZHRoID0gd2lkdGg7XG4gICAgdGhpcy5zaXplLmhlaWdodCA9IGhlaWdodDtcblxuICAgIHRoaXMuZnJhbWVCdWZmZXIucmVzaXplKHdpZHRoICogdGhpcy5yZXNvbHV0aW9uLCBoZWlnaHQgKiB0aGlzLnJlc29sdXRpb24pO1xuICAgIFxuICAgIHZhciBwcm9qZWN0aW9uRnJhbWUgPSB0aGlzLmZyYW1lIHx8IHRoaXMuc2l6ZTtcblxuICAgIHRoaXMuY2FsY3VsYXRlUHJvamVjdGlvbiggcHJvamVjdGlvbkZyYW1lICk7XG59O1xuXG4vKipcbiAqIERlc3Ryb3lzIHRoZSByZW5kZXIgdGFyZ2V0LlxuICpcbiAqL1xuUmVuZGVyVGFyZ2V0LnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKClcbntcbiAgICB2YXIgZ2wgPSB0aGlzLmdsO1xuICAgIFxuICAgIHRoaXMuZnJhbWVCdWZmZXIuZGVzdHJveSgpO1xuXG4gICAgdGhpcy5mcmFtZUJ1ZmZlciA9IG51bGw7XG4gICAgdGhpcy50ZXh0dXJlID0gbnVsbDtcbn07XG4iLCIvKipcbiAqIEdlbmVyaWMgTWFzayBTdGFjayBkYXRhIHN0cnVjdHVyZVxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICovXG5mdW5jdGlvbiBTdGVuY2lsTWFza1N0YWNrKClcbntcblx0LyoqXG4gICAgICogVGhlIGFjdHVhbCBzdGFja1xuICAgICAqXG4gICAgICogQG1lbWJlciB7YW55W119XG4gICAgICovXG4gICAgdGhpcy5zdGVuY2lsU3RhY2sgPSBbXTtcblxuICAgIC8qKlxuICAgICAqIFRPRE8gQGFsdmluXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqL1xuICAgIHRoaXMucmV2ZXJzZSA9IHRydWU7XG5cbiAgICAvKipcbiAgICAgKiBJbnRlcm5hbCBjb3VudFxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMuY291bnQgPSAwO1xufVxuXG5TdGVuY2lsTWFza1N0YWNrLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFN0ZW5jaWxNYXNrU3RhY2s7XG5tb2R1bGUuZXhwb3J0cyA9IFN0ZW5jaWxNYXNrU3RhY2s7XG4iLCJDT05TVCA9IHJlcXVpcmUoJy4uLy4uLy4uL2NvbnN0Jyk7XG5cbi8qKlxuICogTWFwcyBnbCBibGVuZCBjb21iaW5hdGlvbnMgdG8gV2ViR0xcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqL1xuZnVuY3Rpb24gbWFwV2ViR0xCbGVuZE1vZGVzVG9QaXhpKGdsLCBvYmplY3QpXG57XG4gICAgb2JqZWN0ID0gb2JqZWN0IHx8IHt9O1xuXG4gICAgLy9UT0RPIC0gcHJlbXVsdGlwbHkgYWxwaGEgd291bGQgYmUgZGlmZmVyZW50LlxuICAgIC8vYWRkIGEgYm9vbGVhbiBmb3IgdGhhdCFcbiAgICBvYmplY3RbQ09OU1QuQkxFTkRfTU9ERVMuTk9STUFMXSAgICAgICAgPSBbZ2wuT05FLCAgICAgICBnbC5PTkVfTUlOVVNfU1JDX0FMUEhBXTtcbiAgICBvYmplY3RbQ09OU1QuQkxFTkRfTU9ERVMuQUREXSAgICAgICAgICAgPSBbZ2wuU1JDX0FMUEhBLCBnbC5EU1RfQUxQSEFdO1xuICAgIG9iamVjdFtDT05TVC5CTEVORF9NT0RFUy5NVUxUSVBMWV0gICAgICA9IFtnbC5EU1RfQ09MT1IsIGdsLk9ORV9NSU5VU19TUkNfQUxQSEFdO1xuICAgIG9iamVjdFtDT05TVC5CTEVORF9NT0RFUy5TQ1JFRU5dICAgICAgICA9IFtnbC5TUkNfQUxQSEEsIGdsLk9ORV07XG4gICAgb2JqZWN0W0NPTlNULkJMRU5EX01PREVTLk9WRVJMQVldICAgICAgID0gW2dsLk9ORSwgICAgICAgZ2wuT05FX01JTlVTX1NSQ19BTFBIQV07XG4gICAgb2JqZWN0W0NPTlNULkJMRU5EX01PREVTLkRBUktFTl0gICAgICAgID0gW2dsLk9ORSwgICAgICAgZ2wuT05FX01JTlVTX1NSQ19BTFBIQV07XG4gICAgb2JqZWN0W0NPTlNULkJMRU5EX01PREVTLkxJR0hURU5dICAgICAgID0gW2dsLk9ORSwgICAgICAgZ2wuT05FX01JTlVTX1NSQ19BTFBIQV07XG4gICAgb2JqZWN0W0NPTlNULkJMRU5EX01PREVTLkNPTE9SX0RPREdFXSAgID0gW2dsLk9ORSwgICAgICAgZ2wuT05FX01JTlVTX1NSQ19BTFBIQV07XG4gICAgb2JqZWN0W0NPTlNULkJMRU5EX01PREVTLkNPTE9SX0JVUk5dICAgID0gW2dsLk9ORSwgICAgICAgZ2wuT05FX01JTlVTX1NSQ19BTFBIQV07XG4gICAgb2JqZWN0W0NPTlNULkJMRU5EX01PREVTLkhBUkRfTElHSFRdICAgID0gW2dsLk9ORSwgICAgICAgZ2wuT05FX01JTlVTX1NSQ19BTFBIQV07XG4gICAgb2JqZWN0W0NPTlNULkJMRU5EX01PREVTLlNPRlRfTElHSFRdICAgID0gW2dsLk9ORSwgICAgICAgZ2wuT05FX01JTlVTX1NSQ19BTFBIQV07XG4gICAgb2JqZWN0W0NPTlNULkJMRU5EX01PREVTLkRJRkZFUkVOQ0VdICAgID0gW2dsLk9ORSwgICAgICAgZ2wuT05FX01JTlVTX1NSQ19BTFBIQV07XG4gICAgb2JqZWN0W0NPTlNULkJMRU5EX01PREVTLkVYQ0xVU0lPTl0gICAgID0gW2dsLk9ORSwgICAgICAgZ2wuT05FX01JTlVTX1NSQ19BTFBIQV07XG4gICAgb2JqZWN0W0NPTlNULkJMRU5EX01PREVTLkhVRV0gICAgICAgICAgID0gW2dsLk9ORSwgICAgICAgZ2wuT05FX01JTlVTX1NSQ19BTFBIQV07XG4gICAgb2JqZWN0W0NPTlNULkJMRU5EX01PREVTLlNBVFVSQVRJT05dICAgID0gW2dsLk9ORSwgICAgICAgZ2wuT05FX01JTlVTX1NSQ19BTFBIQV07XG4gICAgb2JqZWN0W0NPTlNULkJMRU5EX01PREVTLkNPTE9SXSAgICAgICAgID0gW2dsLk9ORSwgICAgICAgZ2wuT05FX01JTlVTX1NSQ19BTFBIQV07XG4gICAgb2JqZWN0W0NPTlNULkJMRU5EX01PREVTLkxVTUlOT1NJVFldICAgID0gW2dsLk9ORSwgICAgICAgZ2wuT05FX01JTlVTX1NSQ19BTFBIQV07XG5cbiAgICByZXR1cm4gb2JqZWN0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IG1hcFdlYkdMQmxlbmRNb2Rlc1RvUGl4aTtcbiIsIkNPTlNUID0gcmVxdWlyZSgnLi4vLi4vLi4vY29uc3QnKTtcblxuLyoqXG4gKiBHZW5lcmljIE1hc2sgU3RhY2sgZGF0YSBzdHJ1Y3R1cmVcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqL1xuZnVuY3Rpb24gbWFwV2ViR0xEcmF3TW9kZXNUb1BpeGkoZ2wsIG9iamVjdClcbntcblx0b2JqZWN0PSBvYmplY3QgfHwge307XG5cbiAgICBvYmplY3RbQ09OU1QuRFJBV19NT0RFUy5QT0lOVFNdICAgICAgICAgPSBnbC5QT0lOVFM7XG4gICAgb2JqZWN0W0NPTlNULkRSQVdfTU9ERVMuTElORVNdICAgICAgICAgID0gZ2wuTElORVM7XG4gICAgb2JqZWN0W0NPTlNULkRSQVdfTU9ERVMuTElORV9MT09QXSAgICAgID0gZ2wuTElORV9MT09QO1xuICAgIG9iamVjdFtDT05TVC5EUkFXX01PREVTLkxJTkVfU1RSSVBdICAgICA9IGdsLkxJTkVfU1RSSVA7XG4gICAgb2JqZWN0W0NPTlNULkRSQVdfTU9ERVMuVFJJQU5HTEVTXSAgICAgID0gZ2wuVFJJQU5HTEVTO1xuICAgIG9iamVjdFtDT05TVC5EUkFXX01PREVTLlRSSUFOR0xFX1NUUklQXSA9IGdsLlRSSUFOR0xFX1NUUklQO1xuICAgIG9iamVjdFtDT05TVC5EUkFXX01PREVTLlRSSUFOR0xFX0ZBTl0gICA9IGdsLlRSSUFOR0xFX0ZBTjtcblxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IG1hcFdlYkdMRHJhd01vZGVzVG9QaXhpO1xuIiwidmFyIG1hdGggPSByZXF1aXJlKCcuLi9tYXRoJyksXG4gICAgVGV4dHVyZSA9IHJlcXVpcmUoJy4uL3RleHR1cmVzL1RleHR1cmUnKSxcbiAgICBDb250YWluZXIgPSByZXF1aXJlKCcuLi9kaXNwbGF5L0NvbnRhaW5lcicpLFxuICAgIENhbnZhc1RpbnRlciA9IHJlcXVpcmUoJy4uL3JlbmRlcmVycy9jYW52YXMvdXRpbHMvQ2FudmFzVGludGVyJyksXG4gICAgdXRpbHMgPSByZXF1aXJlKCcuLi91dGlscycpLFxuICAgIENPTlNUID0gcmVxdWlyZSgnLi4vY29uc3QnKSxcbiAgICB0ZW1wUG9pbnQgPSBuZXcgbWF0aC5Qb2ludCgpO1xuXG4vKipcbiAqIFRoZSBTcHJpdGUgb2JqZWN0IGlzIHRoZSBiYXNlIGZvciBhbGwgdGV4dHVyZWQgb2JqZWN0cyB0aGF0IGFyZSByZW5kZXJlZCB0byB0aGUgc2NyZWVuXG4gKlxuICogQSBzcHJpdGUgY2FuIGJlIGNyZWF0ZWQgZGlyZWN0bHkgZnJvbSBhbiBpbWFnZSBsaWtlIHRoaXM6XG4gKlxuICogYGBganNcbiAqIHZhciBzcHJpdGUgPSBuZXcgUElYSS5TcHJpdGUuZnJvbUltYWdlKCdhc3NldHMvaW1hZ2UucG5nJyk7XG4gKiBgYGBcbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQ29udGFpbmVyXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIHRleHR1cmUge1BJWEkuVGV4dHVyZX0gVGhlIHRleHR1cmUgZm9yIHRoaXMgc3ByaXRlXG4gKi9cbmZ1bmN0aW9uIFNwcml0ZSh0ZXh0dXJlKVxue1xuICAgIENvbnRhaW5lci5jYWxsKHRoaXMpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGFuY2hvciBzZXRzIHRoZSBvcmlnaW4gcG9pbnQgb2YgdGhlIHRleHR1cmUuXG4gICAgICogVGhlIGRlZmF1bHQgaXMgMCwwIHRoaXMgbWVhbnMgdGhlIHRleHR1cmUncyBvcmlnaW4gaXMgdGhlIHRvcCBsZWZ0XG4gICAgICogU2V0dGluZyB0aGUgYW5jaG9yIHRvIDAuNSwwLjUgbWVhbnMgdGhlIHRleHR1cmUncyBvcmlnaW4gaXMgY2VudGVyZWRcbiAgICAgKiBTZXR0aW5nIHRoZSBhbmNob3IgdG8gMSwxIHdvdWxkIG1lYW4gdGhlIHRleHR1cmUncyBvcmlnaW4gcG9pbnQgd2lsbCBiZSB0aGUgYm90dG9tIHJpZ2h0IGNvcm5lclxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5Qb2ludH1cbiAgICAgKi9cbiAgICB0aGlzLmFuY2hvciA9IG5ldyBtYXRoLlBvaW50KCk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgdGV4dHVyZSB0aGF0IHRoZSBzcHJpdGUgaXMgdXNpbmdcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuVGV4dHVyZX1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX3RleHR1cmUgPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHdpZHRoIG9mIHRoZSBzcHJpdGUgKHRoaXMgaXMgaW5pdGlhbGx5IHNldCBieSB0aGUgdGV4dHVyZSlcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX3dpZHRoID0gMDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBoZWlnaHQgb2YgdGhlIHNwcml0ZSAodGhpcyBpcyBpbml0aWFsbHkgc2V0IGJ5IHRoZSB0ZXh0dXJlKVxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5faGVpZ2h0ID0gMDtcblxuICAgIC8qKlxuICAgICAqIFRoZSB0aW50IGFwcGxpZWQgdG8gdGhlIHNwcml0ZS4gVGhpcyBpcyBhIGhleCB2YWx1ZS4gQSB2YWx1ZSBvZiAweEZGRkZGRiB3aWxsIHJlbW92ZSBhbnkgdGludCBlZmZlY3QuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMHhGRkZGRkZcbiAgICAgKi9cbiAgICB0aGlzLnRpbnQgPSAweEZGRkZGRjtcblxuICAgIC8qKlxuICAgICAqIFRoZSBibGVuZCBtb2RlIHRvIGJlIGFwcGxpZWQgdG8gdGhlIHNwcml0ZS4gQXBwbHkgYSB2YWx1ZSBvZiBgUElYSS5CTEVORF9NT0RFUy5OT1JNQUxgIHRvIHJlc2V0IHRoZSBibGVuZCBtb2RlLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IFBJWEkuQkxFTkRfTU9ERVMuTk9STUFMXG4gICAgICogQHNlZSBQSVhJLkJMRU5EX01PREVTXG4gICAgICovXG4gICAgdGhpcy5ibGVuZE1vZGUgPSBDT05TVC5CTEVORF9NT0RFUy5OT1JNQUw7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgc2hhZGVyIHRoYXQgd2lsbCBiZSB1c2VkIHRvIHJlbmRlciB0aGUgc3ByaXRlLiBTZXQgdG8gbnVsbCB0byByZW1vdmUgYSBjdXJyZW50IHNoYWRlci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuQWJzdHJhY3RGaWx0ZXJ8UElYSS5TaGFkZXJ9XG4gICAgICovXG4gICAgdGhpcy5zaGFkZXIgPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogQW4gaW50ZXJuYWwgY2FjaGVkIHZhbHVlIG9mIHRoZSB0aW50LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDB4RkZGRkZGXG4gICAgICovXG4gICAgdGhpcy5jYWNoZWRUaW50ID0gMHhGRkZGRkY7XG5cbiAgICAvLyBjYWxsIHRleHR1cmUgc2V0dGVyXG4gICAgdGhpcy50ZXh0dXJlID0gdGV4dHVyZSB8fCBUZXh0dXJlLkVNUFRZO1xuICAgIHRoaXMudGV4dHVyZURpcnR5ID0gdHJ1ZVxuICAgIHRoaXMudmVydGV4RGlydHkgPSB0cnVlO1xuICAgIHRoaXMudmVydGV4RGF0YSA9IG5ldyBGbG9hdDMyQXJyYXkoOCk7XG59XG5cbi8vIGNvbnN0cnVjdG9yXG5TcHJpdGUucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShDb250YWluZXIucHJvdG90eXBlKTtcblNwcml0ZS5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBTcHJpdGU7XG5tb2R1bGUuZXhwb3J0cyA9IFNwcml0ZTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoU3ByaXRlLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFRoZSB3aWR0aCBvZiB0aGUgc3ByaXRlLCBzZXR0aW5nIHRoaXMgd2lsbCBhY3R1YWxseSBtb2RpZnkgdGhlIHNjYWxlIHRvIGFjaGlldmUgdGhlIHZhbHVlIHNldFxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLlNwcml0ZSNcbiAgICAgKi9cbiAgICB3aWR0aDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiBNYXRoLmFicyh0aGlzLnNjYWxlLngpICogdGhpcy50ZXh0dXJlLl9mcmFtZS53aWR0aDtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHZhciBzaWduID0gdXRpbHMuc2lnbih0aGlzLnNjYWxlLngpIHx8IDE7XG4gICAgICAgICAgICB0aGlzLnNjYWxlLnggPSBzaWduICogdmFsdWUgLyB0aGlzLnRleHR1cmUuX2ZyYW1lLndpZHRoO1xuICAgICAgICAgICAgdGhpcy5fd2lkdGggPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBUaGUgaGVpZ2h0IG9mIHRoZSBzcHJpdGUsIHNldHRpbmcgdGhpcyB3aWxsIGFjdHVhbGx5IG1vZGlmeSB0aGUgc2NhbGUgdG8gYWNoaWV2ZSB0aGUgdmFsdWUgc2V0XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuU3ByaXRlI1xuICAgICAqL1xuICAgIGhlaWdodDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiAgTWF0aC5hYnModGhpcy5zY2FsZS55KSAqIHRoaXMudGV4dHVyZS5fZnJhbWUuaGVpZ2h0O1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdmFyIHNpZ24gPSB1dGlscy5zaWduKHRoaXMuc2NhbGUueSkgfHwgMTtcbiAgICAgICAgICAgIHRoaXMuc2NhbGUueSA9IHNpZ24gKiB2YWx1ZSAvIHRoaXMudGV4dHVyZS5fZnJhbWUuaGVpZ2h0O1xuICAgICAgICAgICAgdGhpcy5faGVpZ2h0ID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVGhlIHRleHR1cmUgdGhhdCB0aGUgc3ByaXRlIGlzIHVzaW5nXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlRleHR1cmV9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuU3ByaXRlI1xuICAgICAqL1xuICAgIHRleHR1cmU6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gIHRoaXMuX3RleHR1cmU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICBpZiAodGhpcy5fdGV4dHVyZSA9PT0gdmFsdWUpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLl90ZXh0dXJlID0gdmFsdWU7XG4gICAgICAgICAgICB0aGlzLmNhY2hlZFRpbnQgPSAweEZGRkZGRjtcblxuICAgICAgICAgICAgdGhpcy50ZXh0dXJlRGlydHkgPSB0cnVlO1xuXG4gICAgICAgICAgICBpZiAodmFsdWUpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgLy8gd2FpdCBmb3IgdGhlIHRleHR1cmUgdG8gbG9hZFxuICAgICAgICAgICAgICAgIGlmICh2YWx1ZS5iYXNlVGV4dHVyZS5oYXNMb2FkZWQpXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9vblRleHR1cmVVcGRhdGUoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgdmFsdWUub25jZSgndXBkYXRlJywgdGhpcy5fb25UZXh0dXJlVXBkYXRlLCB0aGlzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG59KTtcblxuLyoqXG4gKiBXaGVuIHRoZSB0ZXh0dXJlIGlzIHVwZGF0ZWQsIHRoaXMgZXZlbnQgd2lsbCBmaXJlIHRvIHVwZGF0ZSB0aGUgc2NhbGUgYW5kIGZyYW1lXG4gKlxuICogQHByaXZhdGVcbiAqL1xuU3ByaXRlLnByb3RvdHlwZS5fb25UZXh0dXJlVXBkYXRlID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLnRleHR1cmVEaXJ0eSA9IHRydWU7XG5cbiAgICAvLyBzbyBpZiBfd2lkdGggaXMgMCB0aGVuIHdpZHRoIHdhcyBub3Qgc2V0Li5cbiAgICBpZiAodGhpcy5fd2lkdGgpXG4gICAge1xuICAgICAgICB0aGlzLnNjYWxlLnggPSB1dGlscy5zaWduKHRoaXMuc2NhbGUueCkgKiB0aGlzLl93aWR0aCAvIHRoaXMudGV4dHVyZS5mcmFtZS53aWR0aDtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5faGVpZ2h0KVxuICAgIHtcbiAgICAgICAgdGhpcy5zY2FsZS55ID0gdXRpbHMuc2lnbih0aGlzLnNjYWxlLnkpICogdGhpcy5faGVpZ2h0IC8gdGhpcy50ZXh0dXJlLmZyYW1lLmhlaWdodDtcbiAgICB9XG59O1xuXG5TcHJpdGUucHJvdG90eXBlLmNhY2x1bGF0ZVZlcnRpY2VzID0gZnVuY3Rpb24gKClcbntcblxuICAgIHZhciB0ZXh0dXJlID0gdGhpcy5fdGV4dHVyZSxcbiAgICAgICAgd3QgPSB0aGlzLndvcmxkVHJhbnNmb3JtLFxuICAgICAgICBhID0gd3QuYSwgYiA9IHd0LmIsIGMgPSB3dC5jLCBkID0gd3QuZCwgdHggPSB3dC50eCwgdHkgPSB3dC50eSxcbiAgICAgICAgdmVydGV4RGF0YSA9IHRoaXMudmVydGV4RGF0YSxcbiAgICAgICAgdzAsIHcxLCBoMCwgaDEsXG4gICAgICAgIHRyaW0gPSB0ZXh0dXJlLnRyaW07XG4gICAgXG4gICAgaWYgKHRyaW0pXG4gICAge1xuICAgICAgICAvLyBpZiB0aGUgc3ByaXRlIGlzIHRyaW1tZWQgYW5kIGlzIG5vdCBhIHRpbGluZ3Nwcml0ZSB0aGVuIHdlIG5lZWQgdG8gYWRkIHRoZSBleHRyYSBzcGFjZSBiZWZvcmUgdHJhbnNmb3JtaW5nIHRoZSBzcHJpdGUgY29vcmRzLi5cbiAgICAgICAgdzEgPSB0cmltLnggLSB0aGlzLmFuY2hvci54ICogdHJpbS53aWR0aDtcbiAgICAgICAgdzAgPSB3MSArIHRleHR1cmUuY3JvcC53aWR0aDtcblxuICAgICAgICBoMSA9IHRyaW0ueSAtIHRoaXMuYW5jaG9yLnkgKiB0cmltLmhlaWdodDtcbiAgICAgICAgaDAgPSBoMSArIHRleHR1cmUuY3JvcC5oZWlnaHQ7XG5cbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgdzAgPSAodGV4dHVyZS5fZnJhbWUud2lkdGggKSAqICgxLXRoaXMuYW5jaG9yLngpO1xuICAgICAgICB3MSA9ICh0ZXh0dXJlLl9mcmFtZS53aWR0aCApICogLXRoaXMuYW5jaG9yLng7XG5cbiAgICAgICAgaDAgPSB0ZXh0dXJlLl9mcmFtZS5oZWlnaHQgKiAoMS10aGlzLmFuY2hvci55KTtcbiAgICAgICAgaDEgPSB0ZXh0dXJlLl9mcmFtZS5oZWlnaHQgKiAtdGhpcy5hbmNob3IueTtcbiAgICB9XG5cbiAgICAvLyB4eVxuICAgIHZlcnRleERhdGFbMF0gPSBhICogdzEgKyBjICogaDEgKyB0eDtcbiAgICB2ZXJ0ZXhEYXRhWzFdID0gZCAqIGgxICsgYiAqIHcxICsgdHk7XG5cbiAgICAvLyB4eVxuICAgIHZlcnRleERhdGFbMl0gPSBhICogdzAgKyBjICogaDEgKyB0eDtcbiAgICB2ZXJ0ZXhEYXRhWzNdID0gZCAqIGgxICsgYiAqIHcwICsgdHk7XG5cbiAgICAgLy8geHlcbiAgICB2ZXJ0ZXhEYXRhWzRdID0gYSAqIHcwICsgYyAqIGgwICsgdHg7XG4gICAgdmVydGV4RGF0YVs1XSA9IGQgKiBoMCArIGIgKiB3MCArIHR5O1xuXG4gICAgLy8geHlcbiAgICB2ZXJ0ZXhEYXRhWzZdID0gYSAqIHcxICsgYyAqIGgwICsgdHg7XG4gICAgdmVydGV4RGF0YVs3XSA9IGQgKiBoMCArIGIgKiB3MSArIHR5O1xuXG5cbn1cblxuLyoqXG4qXG4qIFJlbmRlcnMgdGhlIG9iamVjdCB1c2luZyB0aGUgV2ViR0wgcmVuZGVyZXJcbipcbiogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLldlYkdMUmVuZGVyZXJ9XG4qIEBwcml2YXRlXG4qL1xuU3ByaXRlLnByb3RvdHlwZS5fcmVuZGVyV2ViR0wgPSBmdW5jdGlvbiAocmVuZGVyZXIpXG57XG4gICAgaWYodGhpcy50ZXh0dXJlRGlydHkpXG4gICAge1xuICAgICAgICB0aGlzLnRleHR1cmVEaXJ0eSA9IGZhbHNlO1xuXG4gICAgICAgIHRoaXMuX29uVGV4dHVyZVVwZGF0ZSgpO1xuICAgICAgICBcbiAgICAgICAgdGhpcy52ZXJ0ZXhEaXJ0eSA9IHRydWU7XG4gICAgfVxuXG4gICAgaWYodGhpcy52ZXJ0ZXhEaXJ0eSlcbiAgICB7XG4gICAgICAgIHRoaXMudmVydGV4RGlydHkgPSBmYWxzZTtcblxuICAgICAgICAvLyBzZXQgdGhlIHZlcnRleCBkYXRhXG4gICAgICAgIHRoaXMuY2FjbHVsYXRlVmVydGljZXMoKTtcblxuICAgIH1cbiAgICBcbiAgICByZW5kZXJlci5zZXRPYmplY3RSZW5kZXJlcihyZW5kZXJlci5wbHVnaW5zLnNwcml0ZSk7XG4gICAgcmVuZGVyZXIucGx1Z2lucy5zcHJpdGUucmVuZGVyKHRoaXMpO1xufTtcblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBib3VuZHMgb2YgdGhlIFNwcml0ZSBhcyBhIHJlY3RhbmdsZS4gVGhlIGJvdW5kcyBjYWxjdWxhdGlvbiB0YWtlcyB0aGUgd29ybGRUcmFuc2Zvcm0gaW50byBhY2NvdW50LlxuICpcbiAqIEBwYXJhbSBtYXRyaXgge1BJWEkuTWF0cml4fSB0aGUgdHJhbnNmb3JtYXRpb24gbWF0cml4IG9mIHRoZSBzcHJpdGVcbiAqIEByZXR1cm4ge1BJWEkuUmVjdGFuZ2xlfSB0aGUgZnJhbWluZyByZWN0YW5nbGVcbiAqL1xuU3ByaXRlLnByb3RvdHlwZS5nZXRCb3VuZHMgPSBmdW5jdGlvbiAobWF0cml4KVxue1xuICAgIGlmKCF0aGlzLl9jdXJyZW50Qm91bmRzKVxuICAgIHtcbiAgICAgICAgaWYodGhpcy52ZXJ0ZXhEaXJ0eSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy52ZXJ0ZXhEaXJ0eSA9IGZhbHNlO1xuXG4gICAgICAgICAgICAvLyBzZXQgdGhlIHZlcnRleCBkYXRhXG4gICAgICAgICAgICB0aGlzLmNhY2x1bGF0ZVZlcnRpY2VzKCk7XG5cbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBtaW5YLFxuICAgICAgICAgICAgbWF4WCxcbiAgICAgICAgICAgIG1pblksXG4gICAgICAgICAgICBtYXhZLFxuICAgICAgICAgICAgdmVydGV4RGF0YSA9IHRoaXMudmVydGV4RGF0YTtcblxuICAgICAgICB2YXIgeDEgPSB2ZXJ0ZXhEYXRhWzBdXG4gICAgICAgIHZhciB5MSA9IHZlcnRleERhdGFbMV1cblxuICAgICAgICB2YXIgeDIgPSB2ZXJ0ZXhEYXRhWzJdXG4gICAgICAgIHZhciB5MiA9IHZlcnRleERhdGFbM11cblxuICAgICAgICB2YXIgeDMgPSB2ZXJ0ZXhEYXRhWzRdXG4gICAgICAgIHZhciB5MyA9IHZlcnRleERhdGFbNV1cblxuICAgICAgICB2YXIgeDQgPSB2ZXJ0ZXhEYXRhWzZdXG4gICAgICAgIHZhciB5NCA9IHZlcnRleERhdGFbN11cblxuICAgICAgICBtaW5YID0geDE7XG4gICAgICAgIG1pblggPSB4MiA8IG1pblggPyB4MiA6IG1pblg7XG4gICAgICAgIG1pblggPSB4MyA8IG1pblggPyB4MyA6IG1pblg7XG4gICAgICAgIG1pblggPSB4NCA8IG1pblggPyB4NCA6IG1pblg7XG5cbiAgICAgICAgbWluWSA9IHkxO1xuICAgICAgICBtaW5ZID0geTIgPCBtaW5ZID8geTIgOiBtaW5ZO1xuICAgICAgICBtaW5ZID0geTMgPCBtaW5ZID8geTMgOiBtaW5ZO1xuICAgICAgICBtaW5ZID0geTQgPCBtaW5ZID8geTQgOiBtaW5ZO1xuXG4gICAgICAgIG1heFggPSB4MTtcbiAgICAgICAgbWF4WCA9IHgyID4gbWF4WCA/IHgyIDogbWF4WDtcbiAgICAgICAgbWF4WCA9IHgzID4gbWF4WCA/IHgzIDogbWF4WDtcbiAgICAgICAgbWF4WCA9IHg0ID4gbWF4WCA/IHg0IDogbWF4WDtcblxuICAgICAgICBtYXhZID0geTE7XG4gICAgICAgIG1heFkgPSB5MiA+IG1heFkgPyB5MiA6IG1heFk7XG4gICAgICAgIG1heFkgPSB5MyA+IG1heFkgPyB5MyA6IG1heFk7XG4gICAgICAgIG1heFkgPSB5NCA+IG1heFkgPyB5NCA6IG1heFk7XG5cbiAgICAgICAgLy8gY2hlY2sgZm9yIGNoaWxkcmVuXG4gICAgICAgIGlmKHRoaXMuY2hpbGRyZW4ubGVuZ3RoKVxuICAgICAgICB7XG4gICAgICAgICAgICB2YXIgY2hpbGRCb3VuZHMgPSB0aGlzLmNvbnRhaW5lckdldEJvdW5kcygpO1xuXG4gICAgICAgICAgICB3MCA9IGNoaWxkQm91bmRzLng7XG4gICAgICAgICAgICB3MSA9IGNoaWxkQm91bmRzLnggKyBjaGlsZEJvdW5kcy53aWR0aDtcbiAgICAgICAgICAgIGgwID0gY2hpbGRCb3VuZHMueTtcbiAgICAgICAgICAgIGgxID0gY2hpbGRCb3VuZHMueSArIGNoaWxkQm91bmRzLmhlaWdodDtcblxuICAgICAgICAgICAgbWluWCA9IChtaW5YIDwgdzApID8gbWluWCA6IHcwO1xuICAgICAgICAgICAgbWluWSA9IChtaW5ZIDwgaDApID8gbWluWSA6IGgwO1xuXG4gICAgICAgICAgICBtYXhYID0gKG1heFggPiB3MSkgPyBtYXhYIDogdzE7XG4gICAgICAgICAgICBtYXhZID0gKG1heFkgPiBoMSkgPyBtYXhZIDogaDE7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgYm91bmRzID0gdGhpcy5fYm91bmRzO1xuXG4gICAgICAgIGJvdW5kcy54ID0gbWluWDtcbiAgICAgICAgYm91bmRzLndpZHRoID0gbWF4WCAtIG1pblg7XG5cbiAgICAgICAgYm91bmRzLnkgPSBtaW5ZO1xuICAgICAgICBib3VuZHMuaGVpZ2h0ID0gbWF4WSAtIG1pblk7XG5cbiAgICAgICAgLy8gc3RvcmUgYSByZWZlcmVuY2Ugc28gdGhhdCBpZiB0aGlzIGZ1bmN0aW9uIGdldHMgY2FsbGVkIGFnYWluIGluIHRoZSByZW5kZXIgY3ljbGUgd2UgZG8gbm90IGhhdmUgdG8gcmVjYWxjdWxhdGVcbiAgICAgICAgdGhpcy5fY3VycmVudEJvdW5kcyA9IGJvdW5kcztcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5fY3VycmVudEJvdW5kcztcbn07XG5cbi8qKlxuICogR2V0cyB0aGUgbG9jYWwgYm91bmRzIG9mIHRoZSBzcHJpdGUgb2JqZWN0LlxuICpcbiAqL1xuU3ByaXRlLnByb3RvdHlwZS5nZXRMb2NhbEJvdW5kcyA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy5fYm91bmRzLnggPSAtdGhpcy5fdGV4dHVyZS5fZnJhbWUud2lkdGggKiB0aGlzLmFuY2hvci54O1xuICAgIHRoaXMuX2JvdW5kcy55ID0gLXRoaXMuX3RleHR1cmUuX2ZyYW1lLmhlaWdodCAqIHRoaXMuYW5jaG9yLnk7XG4gICAgdGhpcy5fYm91bmRzLndpZHRoID0gdGhpcy5fdGV4dHVyZS5fZnJhbWUud2lkdGg7XG4gICAgdGhpcy5fYm91bmRzLmhlaWdodCA9IHRoaXMuX3RleHR1cmUuX2ZyYW1lLmhlaWdodDtcbiAgICByZXR1cm4gdGhpcy5fYm91bmRzO1xufTtcblxuLyoqXG4qIFRlc3RzIGlmIGEgcG9pbnQgaXMgaW5zaWRlIHRoaXMgc3ByaXRlXG4qXG4qIEBwYXJhbSBwb2ludCB7UElYSS5Qb2ludH0gdGhlIHBvaW50IHRvIHRlc3RcbiogQHJldHVybiB7Ym9vbGVhbn0gdGhlIHJlc3VsdCBvZiB0aGUgdGVzdFxuKi9cblNwcml0ZS5wcm90b3R5cGUuY29udGFpbnNQb2ludCA9IGZ1bmN0aW9uKCBwb2ludCApXG57XG4gICAgdGhpcy53b3JsZFRyYW5zZm9ybS5hcHBseUludmVyc2UocG9pbnQsICB0ZW1wUG9pbnQpO1xuXG4gICAgdmFyIHdpZHRoID0gdGhpcy5fdGV4dHVyZS5fZnJhbWUud2lkdGg7XG4gICAgdmFyIGhlaWdodCA9IHRoaXMuX3RleHR1cmUuX2ZyYW1lLmhlaWdodDtcbiAgICB2YXIgeDEgPSAtd2lkdGggKiB0aGlzLmFuY2hvci54O1xuICAgIHZhciB5MTtcblxuICAgIGlmICggdGVtcFBvaW50LnggPiB4MSAmJiB0ZW1wUG9pbnQueCA8IHgxICsgd2lkdGggKVxuICAgIHtcbiAgICAgICAgeTEgPSAtaGVpZ2h0ICogdGhpcy5hbmNob3IueTtcblxuICAgICAgICBpZiAoIHRlbXBQb2ludC55ID4geTEgJiYgdGVtcFBvaW50LnkgPCB5MSArIGhlaWdodCApXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xufTtcblxuLyoqXG4qIFJlbmRlcnMgdGhlIG9iamVjdCB1c2luZyB0aGUgQ2FudmFzIHJlbmRlcmVyXG4qXG4qIEBwYXJhbSByZW5kZXJlciB7UElYSS5DYW52YXNSZW5kZXJlcn0gVGhlIHJlbmRlcmVyXG4qIEBwcml2YXRlXG4qL1xuU3ByaXRlLnByb3RvdHlwZS5fcmVuZGVyQ2FudmFzID0gZnVuY3Rpb24gKHJlbmRlcmVyKVxue1xuICAgIGlmICh0aGlzLnRleHR1cmUuY3JvcC53aWR0aCA8PSAwIHx8IHRoaXMudGV4dHVyZS5jcm9wLmhlaWdodCA8PSAwKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHZhciBjb21wb3NpdGVPcGVyYXRpb24gPSByZW5kZXJlci5ibGVuZE1vZGVzW3RoaXMuYmxlbmRNb2RlXTtcbiAgICBpZiAoY29tcG9zaXRlT3BlcmF0aW9uICE9PSByZW5kZXJlci5jb250ZXh0Lmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbilcbiAgICB7XG4gICAgICAgIHJlbmRlcmVyLmNvbnRleHQuZ2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uID0gY29tcG9zaXRlT3BlcmF0aW9uO1xuICAgIH1cblxuICAgIC8vICBJZ25vcmUgbnVsbCBzb3VyY2VzXG4gICAgaWYgKHRoaXMudGV4dHVyZS52YWxpZClcbiAgICB7XG4gICAgICAgIHZhciB0ZXh0dXJlID0gdGhpcy5fdGV4dHVyZSxcbiAgICAgICAgICAgIHd0ID0gdGhpcy53b3JsZFRyYW5zZm9ybSxcbiAgICAgICAgICAgIGR4LFxuICAgICAgICAgICAgZHksXG4gICAgICAgICAgICB3aWR0aCxcbiAgICAgICAgICAgIGhlaWdodDtcblxuICAgICAgICByZW5kZXJlci5jb250ZXh0Lmdsb2JhbEFscGhhID0gdGhpcy53b3JsZEFscGhhO1xuXG4gICAgICAgIC8vIElmIHNtb290aGluZ0VuYWJsZWQgaXMgc3VwcG9ydGVkIGFuZCB3ZSBuZWVkIHRvIGNoYW5nZSB0aGUgc21vb3RoaW5nIHByb3BlcnR5IGZvciB0aGlzIHRleHR1cmVcbiAgICAgICAgdmFyIHNtb290aGluZ0VuYWJsZWQgPSB0ZXh0dXJlLmJhc2VUZXh0dXJlLnNjYWxlTW9kZSA9PT0gQ09OU1QuU0NBTEVfTU9ERVMuTElORUFSO1xuICAgICAgICBpZiAocmVuZGVyZXIuc21vb3RoUHJvcGVydHkgJiYgcmVuZGVyZXIuY29udGV4dFtyZW5kZXJlci5zbW9vdGhQcm9wZXJ0eV0gIT09IHNtb290aGluZ0VuYWJsZWQpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJlbmRlcmVyLmNvbnRleHRbcmVuZGVyZXIuc21vb3RoUHJvcGVydHldID0gc21vb3RoaW5nRW5hYmxlZDtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIElmIHRoZSB0ZXh0dXJlIGlzIHRyaW1tZWQgd2Ugb2Zmc2V0IGJ5IHRoZSB0cmltIHgveSwgb3RoZXJ3aXNlIHdlIHVzZSB0aGUgZnJhbWUgZGltZW5zaW9uc1xuXG4gICAgICAgIGlmKHRleHR1cmUucm90YXRlKVxuICAgICAgICB7XG4gICAgICAgICAgICB3aWR0aCA9IHRleHR1cmUuY3JvcC5oZWlnaHQ7XG4gICAgICAgICAgICBoZWlnaHQgPSB0ZXh0dXJlLmNyb3Aud2lkdGg7XG5cbiAgICAgICAgICAgIGR4ID0gKHRleHR1cmUudHJpbSkgPyB0ZXh0dXJlLnRyaW0ueSAtIHRoaXMuYW5jaG9yLnkgKiB0ZXh0dXJlLnRyaW0uaGVpZ2h0IDogdGhpcy5hbmNob3IueSAqIC10ZXh0dXJlLl9mcmFtZS5oZWlnaHQ7XG4gICAgICAgICAgICBkeSA9ICh0ZXh0dXJlLnRyaW0pID8gdGV4dHVyZS50cmltLnggLSB0aGlzLmFuY2hvci54ICogdGV4dHVyZS50cmltLndpZHRoIDogdGhpcy5hbmNob3IueCAqIC10ZXh0dXJlLl9mcmFtZS53aWR0aDtcbiAgICAgICBcbiAgICAgICAgICAgIGR4ICs9IHdpZHRoO1xuXG4gICAgICAgICAgICB3dC50eCA9IGR5ICogd3QuYSArIGR4ICogd3QuYyArIHd0LnR4O1xuICAgICAgICAgICAgd3QudHkgPSBkeSAqIHd0LmIgKyBkeCAqIHd0LmQgKyB3dC50eTtcblxuICAgICAgICAgICAgdmFyIHRlbXAgPSB3dC5hO1xuICAgICAgICAgICAgd3QuYSAgPSAtd3QuYztcbiAgICAgICAgICAgIHd0LmMgID0gIHRlbXA7XG5cbiAgICAgICAgICAgIHRlbXAgPSB3dC5iO1xuICAgICAgICAgICAgd3QuYiAgPSAtd3QuZDtcbiAgICAgICAgICAgIHd0LmQgID0gIHRlbXA7XG5cbiAgICAgICAgICAgIC8vIHRoZSBhbmNob3IgaGFzIGFscmVhZHkgYmVlbiBhcHBsaWVkIGFib3ZlLCBzbyBsZXRzIHNldCBpdCB0byB6ZXJvXG4gICAgICAgICAgICBkeCA9IDA7XG4gICAgICAgICAgICBkeSA9IDA7XG5cbiAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgIHtcbiAgICAgICAgICAgIHdpZHRoID0gdGV4dHVyZS5jcm9wLndpZHRoO1xuICAgICAgICAgICAgaGVpZ2h0ID0gdGV4dHVyZS5jcm9wLmhlaWdodDtcblxuICAgICAgICAgICAgZHggPSAodGV4dHVyZS50cmltKSA/IHRleHR1cmUudHJpbS54IC0gdGhpcy5hbmNob3IueCAqIHRleHR1cmUudHJpbS53aWR0aCA6IHRoaXMuYW5jaG9yLnggKiAtdGV4dHVyZS5fZnJhbWUud2lkdGg7XG4gICAgICAgICAgICBkeSA9ICh0ZXh0dXJlLnRyaW0pID8gdGV4dHVyZS50cmltLnkgLSB0aGlzLmFuY2hvci55ICogdGV4dHVyZS50cmltLmhlaWdodCA6IHRoaXMuYW5jaG9yLnkgKiAtdGV4dHVyZS5fZnJhbWUuaGVpZ2h0O1xuICAgICAgICB9XG5cblxuXG4gICAgICAgIC8vIEFsbG93IGZvciBwaXhlbCByb3VuZGluZ1xuICAgICAgICBpZiAocmVuZGVyZXIucm91bmRQaXhlbHMpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJlbmRlcmVyLmNvbnRleHQuc2V0VHJhbnNmb3JtKFxuICAgICAgICAgICAgICAgIHd0LmEsXG4gICAgICAgICAgICAgICAgd3QuYixcbiAgICAgICAgICAgICAgICB3dC5jLFxuICAgICAgICAgICAgICAgIHd0LmQsXG4gICAgICAgICAgICAgICAgKHd0LnR4ICogcmVuZGVyZXIucmVzb2x1dGlvbikgfCAwLFxuICAgICAgICAgICAgICAgICh3dC50eSAqIHJlbmRlcmVyLnJlc29sdXRpb24pIHwgMFxuICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgZHggPSBkeCB8IDA7XG4gICAgICAgICAgICBkeSA9IGR5IHwgMDtcbiAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgIHtcblxuICAgICAgICAgICAgcmVuZGVyZXIuY29udGV4dC5zZXRUcmFuc2Zvcm0oXG4gICAgICAgICAgICAgICAgd3QuYSxcbiAgICAgICAgICAgICAgICB3dC5iLFxuICAgICAgICAgICAgICAgIHd0LmMsXG4gICAgICAgICAgICAgICAgd3QuZCxcbiAgICAgICAgICAgICAgICB3dC50eCAqIHJlbmRlcmVyLnJlc29sdXRpb24sXG4gICAgICAgICAgICAgICAgd3QudHkgKiByZW5kZXJlci5yZXNvbHV0aW9uXG4gICAgICAgICAgICApO1xuXG5cbiAgICAgICAgfVxuXG4gICAgICAgIHZhciByZXNvbHV0aW9uID0gdGV4dHVyZS5iYXNlVGV4dHVyZS5yZXNvbHV0aW9uO1xuXG4gICAgICAgIGlmICh0aGlzLnRpbnQgIT09IDB4RkZGRkZGKVxuICAgICAgICB7XG4gICAgICAgICAgICBpZiAodGhpcy5jYWNoZWRUaW50ICE9PSB0aGlzLnRpbnQpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdGhpcy5jYWNoZWRUaW50ID0gdGhpcy50aW50O1xuXG4gICAgICAgICAgICAgICAgLy8gVE9ETyBjbGVhbiB1cCBjYWNoaW5nIC0gaG93IHRvIGNsZWFuIHVwIHRoZSBjYWNoZXM/XG4gICAgICAgICAgICAgICAgdGhpcy50aW50ZWRUZXh0dXJlID0gQ2FudmFzVGludGVyLmdldFRpbnRlZFRleHR1cmUodGhpcywgdGhpcy50aW50KTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmVuZGVyZXIuY29udGV4dC5kcmF3SW1hZ2UoXG4gICAgICAgICAgICAgICAgdGhpcy50aW50ZWRUZXh0dXJlLFxuICAgICAgICAgICAgICAgIDAsXG4gICAgICAgICAgICAgICAgMCxcbiAgICAgICAgICAgICAgICB3aWR0aCAqIHJlc29sdXRpb24sXG4gICAgICAgICAgICAgICAgaGVpZ2h0ICogcmVzb2x1dGlvbixcbiAgICAgICAgICAgICAgICBkeCAqIHJlbmRlcmVyLnJlc29sdXRpb24sXG4gICAgICAgICAgICAgICAgZHkgKiByZW5kZXJlci5yZXNvbHV0aW9uLFxuICAgICAgICAgICAgICAgIHdpZHRoICogcmVuZGVyZXIucmVzb2x1dGlvbixcbiAgICAgICAgICAgICAgICBoZWlnaHQgKiByZW5kZXJlci5yZXNvbHV0aW9uXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIGVsc2VcbiAgICAgICAge1xuICAgICAgICAgICAgcmVuZGVyZXIuY29udGV4dC5kcmF3SW1hZ2UoXG4gICAgICAgICAgICAgICAgdGV4dHVyZS5iYXNlVGV4dHVyZS5zb3VyY2UsXG4gICAgICAgICAgICAgICAgdGV4dHVyZS5jcm9wLnggKiByZXNvbHV0aW9uLFxuICAgICAgICAgICAgICAgIHRleHR1cmUuY3JvcC55ICogcmVzb2x1dGlvbixcbiAgICAgICAgICAgICAgICB3aWR0aCAqIHJlc29sdXRpb24sXG4gICAgICAgICAgICAgICAgaGVpZ2h0ICogcmVzb2x1dGlvbixcbiAgICAgICAgICAgICAgICBkeCAgKiByZW5kZXJlci5yZXNvbHV0aW9uLFxuICAgICAgICAgICAgICAgIGR5ICAqIHJlbmRlcmVyLnJlc29sdXRpb24sXG4gICAgICAgICAgICAgICAgd2lkdGggKiByZW5kZXJlci5yZXNvbHV0aW9uLFxuICAgICAgICAgICAgICAgIGhlaWdodCAqIHJlbmRlcmVyLnJlc29sdXRpb25cbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICB9XG59O1xuXG4vKipcbiAqIERlc3Ryb3lzIHRoaXMgc3ByaXRlIGFuZCBvcHRpb25hbGx5IGl0cyB0ZXh0dXJlXG4gKlxuICogQHBhcmFtIFtkZXN0cm95VGV4dHVyZT1mYWxzZV0ge2Jvb2xlYW59IFNob3VsZCBpdCBkZXN0cm95IHRoZSBjdXJyZW50IHRleHR1cmUgb2YgdGhlIHNwcml0ZSBhcyB3ZWxsXG4gKiBAcGFyYW0gW2Rlc3Ryb3lCYXNlVGV4dHVyZT1mYWxzZV0ge2Jvb2xlYW59IFNob3VsZCBpdCBkZXN0cm95IHRoZSBiYXNlIHRleHR1cmUgb2YgdGhlIHNwcml0ZSBhcyB3ZWxsXG4gKi9cblNwcml0ZS5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uIChkZXN0cm95VGV4dHVyZSwgZGVzdHJveUJhc2VUZXh0dXJlKVxue1xuICAgIENvbnRhaW5lci5wcm90b3R5cGUuZGVzdHJveS5jYWxsKHRoaXMpO1xuXG4gICAgdGhpcy5hbmNob3IgPSBudWxsO1xuXG4gICAgaWYgKGRlc3Ryb3lUZXh0dXJlKVxuICAgIHtcbiAgICAgICAgdGhpcy5fdGV4dHVyZS5kZXN0cm95KGRlc3Ryb3lCYXNlVGV4dHVyZSk7XG4gICAgfVxuXG4gICAgdGhpcy5fdGV4dHVyZSA9IG51bGw7XG4gICAgdGhpcy5zaGFkZXIgPSBudWxsO1xufTtcblxuLy8gc29tZSBoZWxwZXIgZnVuY3Rpb25zLi5cblxuLyoqXG4gKiBIZWxwZXIgZnVuY3Rpb24gdGhhdCBjcmVhdGVzIGEgc3ByaXRlIHRoYXQgd2lsbCBjb250YWluIGEgdGV4dHVyZSBmcm9tIHRoZSBUZXh0dXJlQ2FjaGUgYmFzZWQgb24gdGhlIGZyYW1lSWRcbiAqIFRoZSBmcmFtZSBpZHMgYXJlIGNyZWF0ZWQgd2hlbiBhIFRleHR1cmUgcGFja2VyIGZpbGUgaGFzIGJlZW4gbG9hZGVkXG4gKlxuICogQHN0YXRpY1xuICogQHBhcmFtIGZyYW1lSWQge3N0cmluZ30gVGhlIGZyYW1lIElkIG9mIHRoZSB0ZXh0dXJlIGluIHRoZSBjYWNoZVxuICogQHBhcmFtIFtjcm9zc29yaWdpbj0oYXV0byldIHtib29sZWFufSBpZiB5b3Ugd2FudCB0byBzcGVjaWZ5IHRoZSBjcm9zcy1vcmlnaW4gcGFyYW1ldGVyXG4gKiBAcGFyYW0gW3NjYWxlTW9kZT1QSVhJLlNDQUxFX01PREVTLkRFRkFVTFRdIHtudW1iZXJ9IGlmIHlvdSB3YW50IHRvIHNwZWNpZnkgdGhlIHNjYWxlIG1vZGUsIHNlZSB7QGxpbmsgUElYSS5TQ0FMRV9NT0RFU30gZm9yIHBvc3NpYmxlIHZhbHVlc1xuICogQHJldHVybiB7UElYSS5TcHJpdGV9IEEgbmV3IFNwcml0ZSB1c2luZyBhIHRleHR1cmUgZnJvbSB0aGUgdGV4dHVyZSBjYWNoZSBtYXRjaGluZyB0aGUgZnJhbWVJZFxuICovXG5TcHJpdGUuZnJvbUZyYW1lID0gZnVuY3Rpb24gKGZyYW1lSWQpXG57XG4gICAgdmFyIHRleHR1cmUgPSB1dGlscy5UZXh0dXJlQ2FjaGVbZnJhbWVJZF07XG5cbiAgICBpZiAoIXRleHR1cmUpXG4gICAge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RoZSBmcmFtZUlkIFwiJyArIGZyYW1lSWQgKyAnXCIgZG9lcyBub3QgZXhpc3QgaW4gdGhlIHRleHR1cmUgY2FjaGUnKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IFNwcml0ZSh0ZXh0dXJlKTtcbn07XG5cbi8qKlxuICogSGVscGVyIGZ1bmN0aW9uIHRoYXQgY3JlYXRlcyBhIHNwcml0ZSB0aGF0IHdpbGwgY29udGFpbiBhIHRleHR1cmUgYmFzZWQgb24gYW4gaW1hZ2UgdXJsXG4gKiBJZiB0aGUgaW1hZ2UgaXMgbm90IGluIHRoZSB0ZXh0dXJlIGNhY2hlIGl0IHdpbGwgYmUgbG9hZGVkXG4gKlxuICogQHN0YXRpY1xuICogQHBhcmFtIGltYWdlSWQge3N0cmluZ30gVGhlIGltYWdlIHVybCBvZiB0aGUgdGV4dHVyZVxuICogQHJldHVybiB7UElYSS5TcHJpdGV9IEEgbmV3IFNwcml0ZSB1c2luZyBhIHRleHR1cmUgZnJvbSB0aGUgdGV4dHVyZSBjYWNoZSBtYXRjaGluZyB0aGUgaW1hZ2UgaWRcbiAqL1xuU3ByaXRlLmZyb21JbWFnZSA9IGZ1bmN0aW9uIChpbWFnZUlkLCBjcm9zc29yaWdpbiwgc2NhbGVNb2RlKVxue1xuICAgIHJldHVybiBuZXcgU3ByaXRlKFRleHR1cmUuZnJvbUltYWdlKGltYWdlSWQsIGNyb3Nzb3JpZ2luLCBzY2FsZU1vZGUpKTtcbn07XG4iLCJ2YXIgT2JqZWN0UmVuZGVyZXIgPSByZXF1aXJlKCcuLi8uLi9yZW5kZXJlcnMvd2ViZ2wvdXRpbHMvT2JqZWN0UmVuZGVyZXInKSxcbiAgICBXZWJHTFJlbmRlcmVyID0gcmVxdWlyZSgnLi4vLi4vcmVuZGVyZXJzL3dlYmdsL1dlYkdMUmVuZGVyZXInKSxcbiAgICBUZXh0dXJlU2hhZGVyID0gcmVxdWlyZSgnLi4vLi4vcmVuZGVyZXJzL3dlYmdsL3NoYWRlcnMvX1RleHR1cmVTaGFkZXInKSxcbiAgICBjcmVhdGVJbmRpY2VzRm9yUXVhZHMgPSByZXF1aXJlKCcuLi8uLi91dGlscy9jcmVhdGVJbmRpY2VzRm9yUXVhZHMnKSxcbiAgICBnZW5lcmF0ZU11bHRpVGV4dHVyZVNoYWRlciA9IHJlcXVpcmUoJy4vZ2VuZXJhdGVNdWx0aVRleHR1cmVTaGFkZXInKSxcbiAgICBDT05TVCA9IHJlcXVpcmUoJy4uLy4uL2NvbnN0JyksXG4gICAgZ2xDb3JlID0gcmVxdWlyZSgncGl4aS1nbC1jb3JlJyk7XG5cbi8qKlxuICogQGF1dGhvciBNYXQgR3JvdmVzXG4gKlxuICogQmlnIHRoYW5rcyB0byB0aGUgdmVyeSBjbGV2ZXIgTWF0dCBEZXNMYXVyaWVycyA8bWF0dGRlc2w+IGh0dHBzOi8vZ2l0aHViLmNvbS9tYXR0ZGVzbC9cbiAqIGZvciBjcmVhdGluZyB0aGUgb3JpZ2luYWwgcGl4aSB2ZXJzaW9uIVxuICogQWxzbyBhIHRoYW5rcyB0byBodHRwczovL2dpdGh1Yi5jb20vYmNoZXZhbGllciBmb3IgdHdlYWtpbmcgdGhlIHRpbnQgYW5kIGFscGhhIHNvIHRoYXQgdGhleSBub3cgc2hhcmUgNCBieXRlcyBvbiB0aGUgdmVydGV4IGJ1ZmZlclxuICpcbiAqIEhlYXZpbHkgaW5zcGlyZWQgYnkgTGliR0RYJ3MgU3ByaXRlUmVuZGVyZXI6XG4gKiBodHRwczovL2dpdGh1Yi5jb20vbGliZ2R4L2xpYmdkeC9ibG9iL21hc3Rlci9nZHgvc3JjL2NvbS9iYWRsb2dpYy9nZHgvZ3JhcGhpY3MvZzJkL1Nwcml0ZVJlbmRlcmVyLmphdmFcbiAqL1xuXG4vKipcbiAqIFJlbmRlcmVyIGRlZGljYXRlZCB0byBkcmF3aW5nIGFuZCBiYXRjaGluZyBzcHJpdGVzLlxuICpcbiAqIEBjbGFzc1xuICogQHByaXZhdGVcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAZXh0ZW5kcyBQSVhJLk9iamVjdFJlbmRlcmVyXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcn0gVGhlIHJlbmRlcmVyIHRoaXMgc3ByaXRlIGJhdGNoIHdvcmtzIGZvci5cbiAqL1xuZnVuY3Rpb24gU3ByaXRlUmVuZGVyZXIocmVuZGVyZXIpXG57XG4gICAgT2JqZWN0UmVuZGVyZXIuY2FsbCh0aGlzLCByZW5kZXJlcik7XG5cbiAgICAvKipcbiAgICAgKiBOdW1iZXIgb2YgdmFsdWVzIHNlbnQgaW4gdGhlIHZlcnRleCBidWZmZXIuXG4gICAgICogcG9zaXRpb25YLCBwb3NpdGlvblksIGNvbG9yUiwgY29sb3JHLCBjb2xvckIgPSA1XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy52ZXJ0U2l6ZSA9IDU7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgc2l6ZSBvZiB0aGUgdmVydGV4IGluZm9ybWF0aW9uIGluIGJ5dGVzLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMudmVydEJ5dGVTaXplID0gdGhpcy52ZXJ0U2l6ZSAqIDQ7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgbnVtYmVyIG9mIGltYWdlcyBpbiB0aGUgU3ByaXRlQmF0Y2ggYmVmb3JlIGl0IGZsdXNoZXMuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy5zaXplID0gQ09OU1QuU1BSSVRFX0JBVENIX1NJWkU7IC8vIDIwMDAgaXMgYSBuaWNlIGJhbGFuY2UgYmV0d2VlbiBtb2JpbGUgLyBkZXNrdG9wXG5cbiAgICAvLyB0aGUgdG90YWwgbnVtYmVyIG9mIGJ5dGVzIGluIG91ciBiYXRjaFxuICAgIHZhciBudW1WZXJ0cyA9ICh0aGlzLnNpemUgKiA0KSAqIHRoaXMudmVydEJ5dGVTaXplO1xuXG4gICAgLy8gdGhlIHRvdGFsIG51bWJlciBvZiBpbmRpY2VzIGluIG91ciBiYXRjaCwgdGhlcmUgYXJlIDYgcG9pbnRzIHBlciBxdWFkLlxuICAgIHZhciBudW1JbmRpY2VzID0gdGhpcy5zaXplICogNjtcblxuICAgIC8qKlxuICAgICAqIEhvbGRzIHRoZSB2ZXJ0ZXggZGF0YSB0aGF0IHdpbGwgYmUgc2VudCB0byB0aGUgdmVydGV4IHNoYWRlci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge0FycmF5QnVmZmVyfVxuICAgICAqL1xuICAgIHRoaXMudmVydGljZXMgPSBuZXcgQXJyYXlCdWZmZXIobnVtVmVydHMpO1xuXG4gICAgLyoqXG4gICAgICogVmlldyBvbiB0aGUgdmVydGljZXMgYXMgYSBGbG9hdDMyQXJyYXkgZm9yIHBvc2l0aW9uc1xuICAgICAqXG4gICAgICogQG1lbWJlciB7RmxvYXQzMkFycmF5fVxuICAgICAqL1xuICAgIHRoaXMucG9zaXRpb25zID0gbmV3IEZsb2F0MzJBcnJheSh0aGlzLnZlcnRpY2VzKTtcbiAgICBcbiAgICAvKipcbiAgICAgKiBWaWV3IG9uIHRoZSB2ZXJ0aWNlcyBhcyBhIFVpbnQzMkFycmF5IGZvciB1dnNcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge0Zsb2F0MzJBcnJheX1cbiAgICAgKi9cbiAgICB0aGlzLnV2cyA9IG5ldyBVaW50MzJBcnJheSh0aGlzLnZlcnRpY2VzKTtcblxuICAgIC8qKlxuICAgICAqIFZpZXcgb24gdGhlIHZlcnRpY2VzIGFzIGEgVWludDMyQXJyYXkgZm9yIGNvbG9yc1xuICAgICAqXG4gICAgICogQG1lbWJlciB7VWludDMyQXJyYXl9XG4gICAgICovXG4gICAgdGhpcy5jb2xvcnMgPSBuZXcgVWludDMyQXJyYXkodGhpcy52ZXJ0aWNlcyk7XG5cbiAgICAvKipcbiAgICAgKiBIb2xkcyB0aGUgaW5kaWNlcyBvZiB0aGUgZ2VvbWV0cnkgKHF1YWRzKSB0byBkcmF3XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtVaW50MTZBcnJheX1cbiAgICAgKi9cbiAgICB0aGlzLmluZGljZXMgPSBjcmVhdGVJbmRpY2VzRm9yUXVhZHModGhpcy5zaXplKVxuXG4gICAgLyoqXG4gICAgICogVGhlIGRlZmF1bHQgc2hhZGVyIHRoYXQgaXMgdXNlZCBpZiBhIHNwcml0ZSBkb2Vzbid0IGhhdmUgYSBtb3JlIHNwZWNpZmljIG9uZS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuU2hhZGVyfVxuICAgICAqL1xuICAgIHRoaXMuc2hhZGVyID0gbnVsbDtcblxuICAgIHRoaXMudGV4dHVyZUNvdW50ID0gMDtcbiAgICB0aGlzLmN1cnJlbnRJbmRleCA9IDA7XG4gIFxuICAgIHRoaXMuZ3JvdXBDb3VudCA9IDA7XG4gICAgdGhpcy5ncm91cHMgPSBbXTtcbiAgICBcbiAgICAvL1RPRE8gLSAzMDAgaXMgYSBiaXQgbWFnaWMsIGZpZ3VyZSBvdXQgYSBuaWNlciBhbW91bnQhXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLnNpemU7IGkrKykgXG4gICAge1xuICAgICAgICB0aGlzLmdyb3Vwc1tpXSA9IHt0ZXh0dXJlczpbXSwgdGV4dHVyZUNvdW50OjAsIGlkczpbXSwgc2l6ZTowLCBzdGFydDowLCBibGVuZDowfTsgXG4gICAgfTtcbiAgICBcbiAgICB0aGlzLmN1cnJlbnRHcm91cCA9IHRoaXMuZ3JvdXBzW3RoaXMuZ3JvdXBDb3VudCsrXTtcblxuICAgIHRoaXMuY3VycmVudFRleHR1cmUgPSBudWxsOyAgICBcbn1cblxuXG5TcHJpdGVSZW5kZXJlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKE9iamVjdFJlbmRlcmVyLnByb3RvdHlwZSk7XG5TcHJpdGVSZW5kZXJlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBTcHJpdGVSZW5kZXJlcjtcbm1vZHVsZS5leHBvcnRzID0gU3ByaXRlUmVuZGVyZXI7XG5cbldlYkdMUmVuZGVyZXIucmVnaXN0ZXJQbHVnaW4oJ3Nwcml0ZScsIFNwcml0ZVJlbmRlcmVyKTtcblxuLyoqXG4gKiBTZXRzIHVwIHRoZSByZW5kZXJlciBjb250ZXh0IGFuZCBuZWNlc3NhcnkgYnVmZmVycy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIGdsIHtXZWJHTFJlbmRlcmluZ0NvbnRleHR9IHRoZSBjdXJyZW50IFdlYkdMIGRyYXdpbmcgY29udGV4dFxuICovXG5TcHJpdGVSZW5kZXJlci5wcm90b3R5cGUub25Db250ZXh0Q2hhbmdlID0gZnVuY3Rpb24gKClcbntcbiAgICB2YXIgZ2wgPSB0aGlzLnJlbmRlcmVyLmdsO1xuXG4gICAgdGhpcy5NQVhfVEVYVFVFUyA9IGdsLmdldFBhcmFtZXRlcihnbC5NQVhfVEVYVFVSRV9JTUFHRV9VTklUUyk7XG5cbiAgICB0aGlzLl9zaGFkZXIgPSBnZW5lcmF0ZU11bHRpVGV4dHVyZVNoYWRlcihnbCwgdGhpcy5NQVhfVEVYVFVFUykvL25ldyBUZXh0dXJlU2hhZGVyKGdsKTtcblxuICAgIC8vIHNldHVwIGRlZmF1bHQgc2hhZGVyXG4gICAgdGhpcy5zaGFkZXIgPSB0aGlzLnJlbmRlcmVyLnNoYWRlck1hbmFnZXIuZGVmYXVsdFNoYWRlcjtcblxuICAgIC8vIGNyZWF0ZSBhIGNvdXBsZSBvZiBidWZmZXJzXG4gICAgdGhpcy52ZXJ0ZXhCdWZmZXIgPSBnbENvcmUuR0xCdWZmZXIuY3JlYXRlVmVydGV4QnVmZmVyKGdsLCBudWxsLCBnbC5EWU5BTUlDX0RSQVcpO1xuICAgIHRoaXMuaW5kZXhCdWZmZXIgPSBnbENvcmUuR0xCdWZmZXIuY3JlYXRlSW5kZXhCdWZmZXIoZ2wsIHRoaXMuaW5kaWNlcywgZ2wuU1RBVElDX0RSQVcpO1xuXG4gICAgLy8gYnVpbGQgdGhlIHZhbyBvYmplY3QgdGhhdCB3aWxsIHJlbmRlci4uXG4gICAgdGhpcy52YW8gPSBuZXcgZ2xDb3JlLlZlcnRleEFycmF5T2JqZWN0KGdsKTtcblxuICAgIHRoaXMudmFvLmFkZEluZGV4KHRoaXMuaW5kZXhCdWZmZXIpO1xuICAgIHRoaXMudmFvLmFkZEF0dHJpYnV0ZSh0aGlzLnZlcnRleEJ1ZmZlciwgdGhpcy5fc2hhZGVyLmF0dHJpYnV0ZXMuYVZlcnRleFBvc2l0aW9uLCBnbC5GTE9BVCwgZmFsc2UsIHRoaXMudmVydEJ5dGVTaXplLCAwKTtcbiAgICB0aGlzLnZhby5hZGRBdHRyaWJ1dGUodGhpcy52ZXJ0ZXhCdWZmZXIsIHRoaXMuX3NoYWRlci5hdHRyaWJ1dGVzLmFUZXh0dXJlQ29vcmQsIGdsLlVOU0lHTkVEX1NIT1JULCB0cnVlLCB0aGlzLnZlcnRCeXRlU2l6ZSwgMiAqIDQpO1xuICAgIHRoaXMudmFvLmFkZEF0dHJpYnV0ZSh0aGlzLnZlcnRleEJ1ZmZlciwgdGhpcy5fc2hhZGVyLmF0dHJpYnV0ZXMuYUNvbG9yLCBnbC5VTlNJR05FRF9CWVRFLCB0cnVlLCB0aGlzLnZlcnRCeXRlU2l6ZSwgMyAqIDQpO1xuICAgIHRoaXMudmFvLmFkZEF0dHJpYnV0ZSh0aGlzLnZlcnRleEJ1ZmZlciwgdGhpcy5fc2hhZGVyLmF0dHJpYnV0ZXMuYVRleHR1cmVJZCwgZ2wuRkxPQVQsIGZhbHNlLCB0aGlzLnZlcnRCeXRlU2l6ZSwgNCAqIDQpO1xuXG4gICAgdGhpcy5jdXJyZW50QmxlbmRNb2RlID0gOTk5OTk7XG59O1xuXG4vKipcbiAqIFJlbmRlcnMgdGhlIHNwcml0ZSBvYmplY3QuXG4gKlxuICogQHBhcmFtIHNwcml0ZSB7UElYSS5TcHJpdGV9IHRoZSBzcHJpdGUgdG8gcmVuZGVyIHdoZW4gdXNpbmcgdGhpcyBzcHJpdGViYXRjaFxuICovXG5TcHJpdGVSZW5kZXJlci5wcm90b3R5cGUucmVuZGVyID0gZnVuY3Rpb24gKHNwcml0ZSlcbntcbiAgICAvL1RPRE8gc2V0IGJsZW5kIG1vZGVzLi5cbiAgICAvLyBjaGVjayB0ZXh0dXJlLi5cbiAgICBpZiAodGhpcy5jdXJyZW50SW5kZXggPj0gdGhpcy5zaXplKVxuICAgIHtcbiAgICAgICAgdGhpcy5mbHVzaCgpO1xuICAgIH1cblxuICBcbiAgICAvLyBnZXQgdGhlIHV2cyBmb3IgdGhlIHRleHR1cmVcbiAgIFxuXG4gICAgLy8gaWYgdGhlIHV2cyBoYXZlIG5vdCB1cGRhdGVkIHRoZW4gbm8gcG9pbnQgcmVuZGVyaW5nIGp1c3QgeWV0IVxuICAgIGlmICghc3ByaXRlLnRleHR1cmUuX3V2cylcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAgLy8gcHVzaCBhIHRleHR1cmUuXG4gICAgLy8gaW5jcmVtZW50IHRoZSBiYXRjaHNpemVcbiAgICB2YXIgbmV4dFRleHR1cmUgPSAgc3ByaXRlLnRleHR1cmUuYmFzZVRleHR1cmU7XG4gICAgdmFyIGN1cnJlbnRHcm91cCA9IHRoaXMuY3VycmVudEdyb3VwO1xuICAgIHZhciBpO1xuXG4gICAgaWYodGhpcy5jdXJyZW50VGV4dHVyZSAhPT0gbmV4dFRleHR1cmUpXG4gICAge1xuICAgICAgICB0aGlzLmN1cnJlbnRUZXh0dXJlID0gbmV4dFRleHR1cmU7XG4gICAgICAgIFxuICAgICAgICBpZighbmV4dFRleHR1cmUuX2VuYWJsZWQpXG4gICAgICAgIHtcbiAgICAgICAgICAgIG5leHRUZXh0dXJlLl9lbmFibGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIG5leHRUZXh0dXJlLl9pZCA9IHRoaXMudGV4dHVyZUNvdW50O1xuICAgICAgICAgICAgXG4gICAgICAgICAgICBpZih0aGlzLnRleHR1cmVDb3VudCA9PT0gdGhpcy5NQVhfVEVYVFVFUylcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBmb3IgKCBpID0gMDsgaSA8IGN1cnJlbnRHcm91cC50ZXh0dXJlQ291bnQ7IGkrKykgXG4gICAgICAgICAgICAgICAgeyAgICAgXG4gICAgICAgICAgICAgICAgICAgIGN1cnJlbnRHcm91cC50ZXh0dXJlc1tpXS5fZW5hYmxlZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICB0aGlzLnRleHR1cmVDb3VudCA9IDA7XG5cbiAgICAgICAgICAgICAgICBjdXJyZW50R3JvdXAuc2l6ZSA9IHRoaXMuY3VycmVudEluZGV4IC0gY3VycmVudEdyb3VwLnN0YXJ0O1xuICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgY3VycmVudEdyb3VwID0gdGhpcy5jdXJyZW50R3JvdXAgPSB0aGlzLmdyb3Vwc1t0aGlzLmdyb3VwQ291bnQrK107XG4gICAgICAgICAgICAgICAgY3VycmVudEdyb3VwLnRleHR1cmVDb3VudCA9IDA7XG4gICAgICAgICAgICAgICAgY3VycmVudEdyb3VwLnN0YXJ0ID0gdGhpcy5jdXJyZW50SW5kZXg7XG4gICAgICAgICAgICAgICAgXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGN1cnJlbnRHcm91cC50ZXh0dXJlc1tjdXJyZW50R3JvdXAudGV4dHVyZUNvdW50KytdID0gbmV4dFRleHR1cmU7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnRleHR1cmVDb3VudCsrO1xuICAgIH1cblxuICAgIC8vIFRPRE8gdHJpbT8/XG4gICAgdmFyIGluZGV4ID0gdGhpcy5jdXJyZW50SW5kZXggKiB0aGlzLnZlcnRCeXRlU2l6ZTtcblxuICAgIHRoaXMuY3VycmVudEluZGV4Kys7XG5cbiAgICAvLyB1cGxvYWQgdGhlIHNwcml0ZSBlbGVtZXRucy4uLlxuICAgIC8vIHRoZXkgaGF2ZSBhbGwgcmVhZHkgYmVlbiBjYWxjdWxhdGVkIHNvIHdlIGp1c3QgbmVlZCB0byBwdXNoIHRoZW0gaW50byB0aGUgYnVmZmVyLlxuICAgIHZhciBjb2xvcnMgPSB0aGlzLmNvbG9ycztcbiAgICB2YXIgcG9zaXRpb25zID0gdGhpcy5wb3NpdGlvbnM7XG4gICAgdmFyIHZlcnRleERhdGEgPSBzcHJpdGUudmVydGV4RGF0YVxuICAgIHZhciB0aW50ID0gKHNwcml0ZS50aW50ID4+IDE2KSArIChzcHJpdGUudGludCAmIDB4ZmYwMCkgKyAoKHNwcml0ZS50aW50ICYgMHhmZikgPDwgMTYpICsgKHNwcml0ZS53b3JsZEFscGhhICogMjU1IDw8IDI0KTtcbiAgICB2YXIgdXZzID0gc3ByaXRlLnRleHR1cmUuX3V2cy51dnNfdWludDMyO1xuICAgIC8veHlcbiAgICBwb3NpdGlvbnNbaW5kZXgrK10gPSB2ZXJ0ZXhEYXRhWzBdO1xuICAgIHBvc2l0aW9uc1tpbmRleCsrXSA9IHZlcnRleERhdGFbMV07XG4gICAgdGhpcy51dnNbaW5kZXgrK10gPSB1dnNbMF07XG4gICAgY29sb3JzW2luZGV4KytdID0gdGludDtcbiAgICBwb3NpdGlvbnNbaW5kZXgrK10gPSBuZXh0VGV4dHVyZS5faWQ7IFxuICAgIFxuICAgIC8vIHh5XG4gICAgcG9zaXRpb25zW2luZGV4KytdID0gdmVydGV4RGF0YVsyXTtcbiAgICBwb3NpdGlvbnNbaW5kZXgrK10gPSB2ZXJ0ZXhEYXRhWzNdO1xuICAgIHRoaXMudXZzW2luZGV4KytdID0gdXZzWzFdO1xuICAgIGNvbG9yc1tpbmRleCsrXSA9IHRpbnQ7XG4gICAgcG9zaXRpb25zW2luZGV4KytdID0gbmV4dFRleHR1cmUuX2lkO1xuXG4gICAgIC8vIHh5XG4gICAgcG9zaXRpb25zW2luZGV4KytdID0gdmVydGV4RGF0YVs0XTtcbiAgICBwb3NpdGlvbnNbaW5kZXgrK10gPSB2ZXJ0ZXhEYXRhWzVdO1xuICAgIHRoaXMudXZzW2luZGV4KytdID0gdXZzWzJdO1xuICAgIGNvbG9yc1tpbmRleCsrXSA9IHRpbnQ7XG4gICAgcG9zaXRpb25zW2luZGV4KytdID0gbmV4dFRleHR1cmUuX2lkO1xuXG4gICAgLy8geHlcbiAgICBwb3NpdGlvbnNbaW5kZXgrK10gPSB2ZXJ0ZXhEYXRhWzZdO1xuICAgIHBvc2l0aW9uc1tpbmRleCsrXSA9IHZlcnRleERhdGFbN107XG4gICAgdGhpcy51dnNbaW5kZXgrK10gPSB1dnNbM107XG4gICAgY29sb3JzW2luZGV4KytdID0gdGludDtcbiAgICBwb3NpdGlvbnNbaW5kZXgrK10gPSBuZXh0VGV4dHVyZS5faWQ7XG59O1xuXG4vKipcbiAqIFJlbmRlcnMgdGhlIGNvbnRlbnQgYW5kIGVtcHRpZXMgdGhlIGN1cnJlbnQgYmF0Y2guXG4gKlxuICovXG5TcHJpdGVSZW5kZXJlci5wcm90b3R5cGUuZmx1c2ggPSBmdW5jdGlvbiAoKVxue1xuICAgIGlmICh0aGlzLmN1cnJlbnRJbmRleCA9PT0gMClyZXR1cm47XG5cbiAgICB2YXIgZ2wgPSB0aGlzLnJlbmRlcmVyLmdsO1xuXG5cbiAgICB0aGlzLmN1cnJlbnRHcm91cC5zaXplID0gdGhpcy5jdXJyZW50SW5kZXggLSB0aGlzLmN1cnJlbnRHcm91cC5zdGFydDtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuY3VycmVudEdyb3VwLnRleHR1cmVDb3VudDsgaSsrKSBcbiAgICB7ICAgICBcbiAgICAgICAgdGhpcy5jdXJyZW50R3JvdXAudGV4dHVyZXNbaV0uX2VuYWJsZWQgPSBmYWxzZTtcbiAgICB9O1xuICAgXG4gICAgLy8gZG8gc29tZSBzbWFydCBhcnJheSBzdHVmZi4uXG4gICAgLy8gZG91YmxlIHNpemUgc28gd2UgZG9udCBhbHdheSBzdWJhcnJheSB0aGUgZWxlbWVudHMuLlxuICAgIC8vIHVwbG9hZCB0aGUgdmVydHMgdG8gdGhlIGJ1ZmZlclxuICAgIGlmICh0aGlzLmN1cnJlbnRCYXRjaFNpemUgPiAoIHRoaXMuc2l6ZSAqIDAuNSApIClcbiAgICB7XG4gICAgICAgIHRoaXMudmVydGV4QnVmZmVyLnVwbG9hZCh0aGlzLnZlcnRpY2VzLCAwLCB0cnVlKTtcbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgLy8gbyBrIC4uIHN1YiBhcnJheSBpcyBTTE9XPj9cbiAgICAgICAgdmFyIHZpZXcgPSB0aGlzLnBvc2l0aW9ucy5zdWJhcnJheSgwLCB0aGlzLmN1cnJlbnRJbmRleCAqIHRoaXMudmVydEJ5dGVTaXplKTtcbiAgICAgICAgdGhpcy52ZXJ0ZXhCdWZmZXIudXBsb2FkKHZpZXcsIDAsIHRydWUpO1xuICAgIH1cblxuICAgIC8vIGJpbmQgc2hhZGVyLi5cbiAgICB0aGlzLnJlbmRlcmVyLmJpbmRTaGFkZXIodGhpcy5fc2hhZGVyKTtcbiAgICB0aGlzLnJlbmRlcmVyLmJsZW5kTW9kZU1hbmFnZXIuc2V0QmxlbmRNb2RlKCAwICk7XG5cbiAgICAvLy8gcmVuZGVyIHRoZSBncm91cHMuLlxuICAgIGZvciAoaSA9IDA7IGkgPCB0aGlzLmdyb3VwQ291bnQ7IGkrKykge1xuICAgICAgICBcbiAgICAgICAgdmFyIGdyb3VwID0gdGhpcy5ncm91cHNbaV07XG5cbiAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBncm91cC50ZXh0dXJlQ291bnQ7IGorKykge1xuICAgICAgICAgICAgdGhpcy5yZW5kZXJlci5iaW5kVGV4dHVyZShncm91cC50ZXh0dXJlc1tqXSwgaik7XG4gICAgICAgIH07XG5cbiAgICAgICAgZ2wuZHJhd0VsZW1lbnRzKGdsLlRSSUFOR0xFUywgZ3JvdXAuc2l6ZSAqIDYsIGdsLlVOU0lHTkVEX1NIT1JULCBncm91cC5zdGFydCAqIDYgKiAyKTtcbiAgICB9O1xuXG4gICAgLy8gcmVzZXQgZWxlbWVudHMgZm9yIHRoZSBuZXh0IGZsdXNoXG4gICAgdGhpcy5jdXJyZW50VGV4dHVyZSA9IG51bGw7XG4gICAgdGhpcy5jdXJyZW50SW5kZXggPSAwO1xuICAgIHRoaXMudGV4dHVyZUNvdW50ID0gMDtcbiAgICB0aGlzLmdyb3VwQ291bnQgPSAwO1xuICAgIFxuICAgIHRoaXMuY3VycmVudEdyb3VwID0gdGhpcy5ncm91cHNbdGhpcy5ncm91cENvdW50KytdO1xuICAgIHRoaXMuY3VycmVudEdyb3VwLnRleHR1cmVDb3VudCA9IDA7XG59O1xuXG4vKipcbiAqIFN0YXJ0cyBhIG5ldyBzcHJpdGUgYmF0Y2guXG4gKlxuICovXG5TcHJpdGVSZW5kZXJlci5wcm90b3R5cGUuc3RhcnQgPSBmdW5jdGlvbiAoKVxue1xuICAgIHRoaXMudmFvLmJpbmQoKTtcbn07XG5cblNwcml0ZVJlbmRlcmVyLnByb3RvdHlwZS5zdG9wID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLmZsdXNoKCk7XG4gICAgdGhpcy52YW8udW5iaW5kKCk7XG59O1xuLyoqXG4gKiBEZXN0cm95cyB0aGUgU3ByaXRlQmF0Y2guXG4gKlxuICovXG5TcHJpdGVSZW5kZXJlci5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy52ZXJ0ZXhCdWZmZXIuZGVzdHJveSgpO1xuICAgIHRoaXMuaW5kZXhCdWZmZXIuZGVzdHJveSgpO1xuXG4gICAgT2JqZWN0UmVuZGVyZXIucHJvdG90eXBlLmRlc3Ryb3kuY2FsbCh0aGlzKTtcblxuICAgIHRoaXMuc2hhZGVyLmRlc3Ryb3koKTtcblxuICAgIHRoaXMucmVuZGVyZXIgPSBudWxsO1xuXG4gICAgdGhpcy52ZXJ0aWNlcyA9IG51bGw7XG4gICAgdGhpcy5wb3NpdGlvbnMgPSBudWxsO1xuICAgIHRoaXMuY29sb3JzID0gbnVsbDtcbiAgICB0aGlzLmluZGljZXMgPSBudWxsO1xuXG4gICAgdGhpcy52ZXJ0ZXhCdWZmZXIgPSBudWxsO1xuICAgIHRoaXMuaW5kZXhCdWZmZXIgPSBudWxsO1xuXG4gICAgdGhpcy5zcHJpdGVzID0gbnVsbDtcbiAgICB0aGlzLnNoYWRlciA9IG51bGw7XG59O1xuIiwidmFyIFNoYWRlciA9IHJlcXVpcmUoJ3BpeGktZ2wtY29yZScpLkdMU2hhZGVyO1xuXG5cbmZ1bmN0aW9uIGdlbmVyYXRlTXVsdGlUZXh0dXJlU2hhZGVyKGdsLCBtYXhUZXh0dXJlcylcbntcbiAgICB2YXIgdmVydGV4U3JjID0gXCJwcmVjaXNpb24gbG93cCBmbG9hdDtcXG5hdHRyaWJ1dGUgdmVjMiBhVmVydGV4UG9zaXRpb247XFxuYXR0cmlidXRlIHZlYzIgYVRleHR1cmVDb29yZDtcXG5hdHRyaWJ1dGUgdmVjNCBhQ29sb3I7XFxuYXR0cmlidXRlIGZsb2F0IGFUZXh0dXJlSWQ7XFxuXFxudW5pZm9ybSBtYXQzIHByb2plY3Rpb25NYXRyaXg7XFxuXFxudmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7XFxudmFyeWluZyB2ZWM0IHZDb2xvcjtcXG52YXJ5aW5nIGZsb2F0IHZUZXh0dXJlSWQ7XFxuXFxudm9pZCBtYWluKHZvaWQpe1xcbiAgIGdsX1Bvc2l0aW9uID0gdmVjNCgocHJvamVjdGlvbk1hdHJpeCAqIHZlYzMoYVZlcnRleFBvc2l0aW9uLCAxLjApKS54eSwgMC4wLCAxLjApO1xcbiAgIHZUZXh0dXJlQ29vcmQgPSBhVGV4dHVyZUNvb3JkO1xcbiAgIHZUZXh0dXJlSWQgPSBhVGV4dHVyZUlkO1xcbiAgIHZDb2xvciA9IHZlYzQoYUNvbG9yLnJnYiAqIGFDb2xvci5hLCBhQ29sb3IuYSk7XFxufVwiO1xuICAgIHZhciBmcmFnbWVudFNyYyA9ICdwcmVjaXNpb24gbG93cCBmbG9hdDtcXG5cXG4nICsgZ2VuZXJhdGVTYW1wbGVTcmMobWF4VGV4dHVyZXMpICsgXCJcXG5cXG5cIiArIGZyYWdUZW1wbGF0ZVxuXG4gICAgZnJhZ21lbnRTcmMgPSBmcmFnbWVudFNyYy5yZXBsYWNlKC9cXCVcXCUvZ2ksICcxNicpO1xuXG4gICAgdmFyIHNoYWRlciA9IG5ldyBTaGFkZXIoZ2wsIHZlcnRleFNyYywgZnJhZ21lbnRTcmMpO1xuXG5cbiAgICB2YXIgc2FtcGxlVmFsdWVzID0gW107XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBtYXhUZXh0dXJlczsgaSsrKSB7XG4gICAgICAgIHNhbXBsZVZhbHVlc1tpXSA9IGk7XG4gICAgfTtcblxuICAgIHNoYWRlci5iaW5kKCk7XG4gICAgc2hhZGVyLnVuaWZvcm1zLnVTYW1wbGVycyA9IHNhbXBsZVZhbHVlcztcblxuICAgIHJldHVybiBzaGFkZXI7XG59XG5cbmZ1bmN0aW9uIGdlbmVyYXRlU2FtcGxlU3JjKG1heFRleHR1cmVzKVxue1xuICAgIHZhciBzcmMgPSAndmVjNCBnZXRTYW1wbGVGcm9tQXJyYXkoc2FtcGxlcjJEIHRleHR1cmVzWyUlXSwgaW50IG5keCwgdmVjMiB1dikge1xcblxcbnZlYzQgY29sb3I7J1xuXG4gICAgc3JjICs9ICdcXG4nO1xuICAgIHNyYyArPSAnXFxuJztcbiAgICBcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG1heFRleHR1cmVzOyBpKyspIFxuICAgIHtcbiAgICAgICAgaWYoaSA+IDApc3JjICs9ICdcXG5lbHNlICc7XG4gICAgICAgIGlmKGkgPCBtYXhUZXh0dXJlcy0xKXNyYyArPSAnaWYobmR4ID09ICcgKyBpICsgJyknO1xuICAgICAgICBzcmMgKz0gJ1xcbnsnO1xuICAgICAgICBzcmMgKz0gJ1xcblxcdGNvbG9yID0gdGV4dHVyZTJEKHRleHR1cmVzWycraSsnXSwgdXYpOyc7XG4gICAgICAgIHNyYyArPSAnXFxufSc7XG4gICAgfTtcblxuICAgIHNyYyArPSAnXFxuJztcbiAgICBzcmMgKz0gJ1xcbic7XG4gICAgc3JjICs9ICdyZXR1cm4gY29sb3I7JztcbiAgICBzcmMgKz0gJ1xcbn0nO1xuXG4gICAgcmV0dXJuIHNyYztcbn1cblxudmFyIGZyYWdUZW1wbGF0ZSA9IFtcblxuICAgICd2YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDsnLFxuICAgICd2YXJ5aW5nIHZlYzQgdkNvbG9yOycsXG4gICAgJ3ZhcnlpbmcgZmxvYXQgdlRleHR1cmVJZDsnLFxuICAgICd1bmlmb3JtIHNhbXBsZXIyRCB1U2FtcGxlcnNbJSVdOycsXG5cbiAgICAndm9pZCBtYWluKHZvaWQpeycsXG4gICAgICAgICdnbF9GcmFnQ29sb3IgPSBnZXRTYW1wbGVGcm9tQXJyYXkodVNhbXBsZXJzLCBpbnQodlRleHR1cmVJZCksIHZUZXh0dXJlQ29vcmQpICogdkNvbG9yOycsXG4gICAgJ30nXG5dLmpvaW4oJ1xcbicpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGdlbmVyYXRlTXVsdGlUZXh0dXJlU2hhZGVyO1xuIiwidmFyIFNwcml0ZSA9IHJlcXVpcmUoJy4uL3Nwcml0ZXMvU3ByaXRlJyksXG4gICAgVGV4dHVyZSA9IHJlcXVpcmUoJy4uL3RleHR1cmVzL1RleHR1cmUnKSxcbiAgICBtYXRoID0gcmVxdWlyZSgnLi4vbWF0aCcpLFxuICAgIHV0aWxzID0gcmVxdWlyZSgnLi4vdXRpbHMnKSxcbiAgICBDT05TVCA9IHJlcXVpcmUoJy4uL2NvbnN0Jyk7XG5cbi8qKlxuICogQSBUZXh0IE9iamVjdCB3aWxsIGNyZWF0ZSBhIGxpbmUgb3IgbXVsdGlwbGUgbGluZXMgb2YgdGV4dC4gVG8gc3BsaXQgYSBsaW5lIHlvdSBjYW4gdXNlICdcXG4nIGluIHlvdXIgdGV4dCBzdHJpbmcsXG4gKiBvciBhZGQgYSB3b3JkV3JhcCBwcm9wZXJ0eSBzZXQgdG8gdHJ1ZSBhbmQgYW5kIHdvcmRXcmFwV2lkdGggcHJvcGVydHkgd2l0aCBhIHZhbHVlIGluIHRoZSBzdHlsZSBvYmplY3QuXG4gKlxuICogQSBUZXh0IGNhbiBiZSBjcmVhdGVkIGRpcmVjdGx5IGZyb20gYSBzdHJpbmcgYW5kIGEgc3R5bGUgb2JqZWN0XG4gKlxuICogYGBganNcbiAqIHZhciB0ZXh0ID0gbmV3IFBJWEkuVGV4dCgnVGhpcyBpcyBhIHBpeGkgdGV4dCcse2ZvbnQgOiAnMjRweCBBcmlhbCcsIGZpbGwgOiAweGZmMTAxMCwgYWxpZ24gOiAnY2VudGVyJ30pO1xuICogYGBgXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLlNwcml0ZVxuICogQG1lbWJlcm9mIFBJWElcbiAqIEBwYXJhbSB0ZXh0IHtzdHJpbmd9IFRoZSBjb3B5IHRoYXQgeW91IHdvdWxkIGxpa2UgdGhlIHRleHQgdG8gZGlzcGxheVxuICogQHBhcmFtIFtzdHlsZV0ge29iamVjdH0gVGhlIHN0eWxlIHBhcmFtZXRlcnNcbiAqIEBwYXJhbSBbc3R5bGUuZm9udF0ge3N0cmluZ30gZGVmYXVsdCAnYm9sZCAyMHB4IEFyaWFsJyBUaGUgc3R5bGUgYW5kIHNpemUgb2YgdGhlIGZvbnRcbiAqIEBwYXJhbSBbc3R5bGUuZmlsbD0nYmxhY2snXSB7U3RyaW5nfE51bWJlcn0gQSBjYW52YXMgZmlsbHN0eWxlIHRoYXQgd2lsbCBiZSB1c2VkIG9uIHRoZSB0ZXh0IGUuZyAncmVkJywgJyMwMEZGMDAnXG4gKiBAcGFyYW0gW3N0eWxlLmFsaWduPSdsZWZ0J10ge3N0cmluZ30gQWxpZ25tZW50IGZvciBtdWx0aWxpbmUgdGV4dCAoJ2xlZnQnLCAnY2VudGVyJyBvciAncmlnaHQnKSwgZG9lcyBub3QgYWZmZWN0IHNpbmdsZSBsaW5lIHRleHRcbiAqIEBwYXJhbSBbc3R5bGUuc3Ryb2tlXSB7U3RyaW5nfE51bWJlcn0gQSBjYW52YXMgZmlsbHN0eWxlIHRoYXQgd2lsbCBiZSB1c2VkIG9uIHRoZSB0ZXh0IHN0cm9rZSBlLmcgJ2JsdWUnLCAnI0ZDRkYwMCdcbiAqIEBwYXJhbSBbc3R5bGUuc3Ryb2tlVGhpY2tuZXNzPTBdIHtudW1iZXJ9IEEgbnVtYmVyIHRoYXQgcmVwcmVzZW50cyB0aGUgdGhpY2tuZXNzIG9mIHRoZSBzdHJva2UuIERlZmF1bHQgaXMgMCAobm8gc3Ryb2tlKVxuICogQHBhcmFtIFtzdHlsZS53b3JkV3JhcD1mYWxzZV0ge2Jvb2xlYW59IEluZGljYXRlcyBpZiB3b3JkIHdyYXAgc2hvdWxkIGJlIHVzZWRcbiAqIEBwYXJhbSBbc3R5bGUud29yZFdyYXBXaWR0aD0xMDBdIHtudW1iZXJ9IFRoZSB3aWR0aCBhdCB3aGljaCB0ZXh0IHdpbGwgd3JhcCwgaXQgbmVlZHMgd29yZFdyYXAgdG8gYmUgc2V0IHRvIHRydWVcbiAqIEBwYXJhbSBbc3R5bGUubGluZUhlaWdodF0ge251bWJlcn0gVGhlIGxpbmUgaGVpZ2h0LCBhIG51bWJlciB0aGF0IHJlcHJlc2VudHMgdGhlIHZlcnRpY2FsIHNwYWNlIHRoYXQgYSBsZXR0ZXIgdXNlc1xuICogQHBhcmFtIFtzdHlsZS5kcm9wU2hhZG93PWZhbHNlXSB7Ym9vbGVhbn0gU2V0IGEgZHJvcCBzaGFkb3cgZm9yIHRoZSB0ZXh0XG4gKiBAcGFyYW0gW3N0eWxlLmRyb3BTaGFkb3dDb2xvcj0nIzAwMDAwMCddIHtzdHJpbmd9IEEgZmlsbCBzdHlsZSB0byBiZSB1c2VkIG9uIHRoZSBkcm9wc2hhZG93IGUuZyAncmVkJywgJyMwMEZGMDAnXG4gKiBAcGFyYW0gW3N0eWxlLmRyb3BTaGFkb3dBbmdsZT1NYXRoLlBJLzRdIHtudW1iZXJ9IFNldCBhIGFuZ2xlIG9mIHRoZSBkcm9wIHNoYWRvd1xuICogQHBhcmFtIFtzdHlsZS5kcm9wU2hhZG93RGlzdGFuY2U9NV0ge251bWJlcn0gU2V0IGEgZGlzdGFuY2Ugb2YgdGhlIGRyb3Agc2hhZG93XG4gKiBAcGFyYW0gW3N0eWxlLmRyb3BTaGFkb3dCbHVyPTBdIHtudW1iZXJ9IFNldCBhIHNoYWRvdyBibHVyIHJhZGl1c1xuICogQHBhcmFtIFtzdHlsZS5wYWRkaW5nPTBdIHtudW1iZXJ9IE9jY2FzaW9uYWxseSBzb21lIGZvbnRzIGFyZSBjcm9wcGVkIG9uIHRvcCBvciBib3R0b20uIEFkZGluZyBzb21lIHBhZGRpbmcgd2lsbFxuICogICAgICBwcmV2ZW50IHRoaXMgZnJvbSBoYXBwZW5pbmcgYnkgYWRkaW5nIHBhZGRpbmcgdG8gdGhlIHRvcCBhbmQgYm90dG9tIG9mIHRleHQgaGVpZ2h0LlxuICogQHBhcmFtIFtzdHlsZS50ZXh0QmFzZWxpbmU9J2FscGhhYmV0aWMnXSB7c3RyaW5nfSBUaGUgYmFzZWxpbmUgb2YgdGhlIHRleHQgdGhhdCBpcyByZW5kZXJlZC5cbiAqIEBwYXJhbSBbc3R5bGUubGluZUpvaW49J21pdGVyJ10ge3N0cmluZ30gVGhlIGxpbmVKb2luIHByb3BlcnR5IHNldHMgdGhlIHR5cGUgb2YgY29ybmVyIGNyZWF0ZWQsIGl0IGNhbiByZXNvbHZlXG4gKiAgICAgIHNwaWtlZCB0ZXh0IGlzc3Vlcy4gRGVmYXVsdCBpcyAnbWl0ZXInIChjcmVhdGVzIGEgc2hhcnAgY29ybmVyKS5cbiAqIEBwYXJhbSBbc3R5bGUubWl0ZXJMaW1pdD0xMF0ge251bWJlcn0gVGhlIG1pdGVyIGxpbWl0IHRvIHVzZSB3aGVuIHVzaW5nIHRoZSAnbWl0ZXInIGxpbmVKb2luIG1vZGUuIFRoaXMgY2FuIHJlZHVjZVxuICogICAgICBvciBpbmNyZWFzZSB0aGUgc3Bpa2luZXNzIG9mIHJlbmRlcmVkIHRleHQuXG4gKi9cbmZ1bmN0aW9uIFRleHQodGV4dCwgc3R5bGUsIHJlc29sdXRpb24pXG57XG4gICAgLyoqXG4gICAgICogVGhlIGNhbnZhcyBlbGVtZW50IHRoYXQgZXZlcnl0aGluZyBpcyBkcmF3biB0b1xuICAgICAqXG4gICAgICogQG1lbWJlciB7SFRNTENhbnZhc0VsZW1lbnR9XG4gICAgICovXG4gICAgdGhpcy5jYW52YXMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdjYW52YXMnKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBjYW52YXMgMmQgY29udGV4dCB0aGF0IGV2ZXJ5dGhpbmcgaXMgZHJhd24gd2l0aFxuICAgICAqIEBtZW1iZXIge0hUTUxDYW52YXNFbGVtZW50fVxuICAgICAqL1xuICAgIHRoaXMuY29udGV4dCA9IHRoaXMuY2FudmFzLmdldENvbnRleHQoJzJkJyk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgcmVzb2x1dGlvbiBvZiB0aGUgY2FudmFzLlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLnJlc29sdXRpb24gPSByZXNvbHV0aW9uIHx8IENPTlNULlJFU09MVVRJT047XG5cbiAgICAvKipcbiAgICAgKiBQcml2YXRlIHRyYWNrZXIgZm9yIHRoZSBjdXJyZW50IHRleHQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtzdHJpbmd9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl90ZXh0ID0gbnVsbDtcblxuICAgIC8qKlxuICAgICAqIFByaXZhdGUgdHJhY2tlciBmb3IgdGhlIGN1cnJlbnQgc3R5bGUuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtvYmplY3R9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9zdHlsZSA9IG51bGw7XG5cbiAgICB2YXIgdGV4dHVyZSA9IFRleHR1cmUuZnJvbUNhbnZhcyh0aGlzLmNhbnZhcyk7XG4gICAgdGV4dHVyZS50cmltID0gbmV3IG1hdGguUmVjdGFuZ2xlKCk7XG4gICAgU3ByaXRlLmNhbGwodGhpcywgdGV4dHVyZSk7XG5cbiAgICB0aGlzLnRleHQgPSB0ZXh0O1xuICAgIHRoaXMuc3R5bGUgPSBzdHlsZTtcbn1cblxuLy8gY29uc3RydWN0b3JcblRleHQucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShTcHJpdGUucHJvdG90eXBlKTtcblRleHQucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gVGV4dDtcbm1vZHVsZS5leHBvcnRzID0gVGV4dDtcblxuVGV4dC5mb250UHJvcGVydGllc0NhY2hlID0ge307XG5UZXh0LmZvbnRQcm9wZXJ0aWVzQ2FudmFzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnY2FudmFzJyk7XG5UZXh0LmZvbnRQcm9wZXJ0aWVzQ29udGV4dCA9IFRleHQuZm9udFByb3BlcnRpZXNDYW52YXMuZ2V0Q29udGV4dCgnMmQnKTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoVGV4dC5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBUaGUgd2lkdGggb2YgdGhlIFRleHQsIHNldHRpbmcgdGhpcyB3aWxsIGFjdHVhbGx5IG1vZGlmeSB0aGUgc2NhbGUgdG8gYWNoaWV2ZSB0aGUgdmFsdWUgc2V0XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuVGV4dCNcbiAgICAgKi9cbiAgICB3aWR0aDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmRpcnR5KVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlVGV4dCgpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5zY2FsZS54ICogdGhpcy5fdGV4dHVyZS5fZnJhbWUud2lkdGg7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnNjYWxlLnggPSB2YWx1ZSAvIHRoaXMuX3RleHR1cmUuX2ZyYW1lLndpZHRoO1xuICAgICAgICAgICAgdGhpcy5fd2lkdGggPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBUaGUgaGVpZ2h0IG9mIHRoZSBUZXh0LCBzZXR0aW5nIHRoaXMgd2lsbCBhY3R1YWxseSBtb2RpZnkgdGhlIHNjYWxlIHRvIGFjaGlldmUgdGhlIHZhbHVlIHNldFxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLlRleHQjXG4gICAgICovXG4gICAgaGVpZ2h0OiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgaWYgKHRoaXMuZGlydHkpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdGhpcy51cGRhdGVUZXh0KCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiAgdGhpcy5zY2FsZS55ICogdGhpcy5fdGV4dHVyZS5fZnJhbWUuaGVpZ2h0O1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5zY2FsZS55ID0gdmFsdWUgLyB0aGlzLl90ZXh0dXJlLl9mcmFtZS5oZWlnaHQ7XG4gICAgICAgICAgICB0aGlzLl9oZWlnaHQgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBTZXQgdGhlIHN0eWxlIG9mIHRoZSB0ZXh0XG4gICAgICpcbiAgICAgKiBAcGFyYW0gW3N0eWxlXSB7b2JqZWN0fSBUaGUgc3R5bGUgcGFyYW1ldGVyc1xuICAgICAqIEBwYXJhbSBbc3R5bGUuZm9udD0nYm9sZCAyMHB0IEFyaWFsJ10ge3N0cmluZ30gVGhlIHN0eWxlIGFuZCBzaXplIG9mIHRoZSBmb250XG4gICAgICogQHBhcmFtIFtzdHlsZS5maWxsPSdibGFjayddIHtzdHJpbmd8bnVtYmVyfSBBIGNhbnZhcyBmaWxsc3R5bGUgdGhhdCB3aWxsIGJlIHVzZWQgb24gdGhlIHRleHQgZWcgJ3JlZCcsICcjMDBGRjAwJ1xuICAgICAqIEBwYXJhbSBbc3R5bGUuYWxpZ249J2xlZnQnXSB7c3RyaW5nfSBBbGlnbm1lbnQgZm9yIG11bHRpbGluZSB0ZXh0ICgnbGVmdCcsICdjZW50ZXInIG9yICdyaWdodCcpLCBkb2VzIG5vdCBhZmZlY3Qgc2luZ2xlIGxpbmUgdGV4dFxuICAgICAqIEBwYXJhbSBbc3R5bGUuc3Ryb2tlPSdibGFjayddIHtzdHJpbmd8bnVtYmVyfSBBIGNhbnZhcyBmaWxsc3R5bGUgdGhhdCB3aWxsIGJlIHVzZWQgb24gdGhlIHRleHQgc3Ryb2tlIGVnICdibHVlJywgJyNGQ0ZGMDAnXG4gICAgICogQHBhcmFtIFtzdHlsZS5zdHJva2VUaGlja25lc3M9MF0ge251bWJlcn0gQSBudW1iZXIgdGhhdCByZXByZXNlbnRzIHRoZSB0aGlja25lc3Mgb2YgdGhlIHN0cm9rZS4gRGVmYXVsdCBpcyAwIChubyBzdHJva2UpXG4gICAgICogQHBhcmFtIFtzdHlsZS53b3JkV3JhcD1mYWxzZV0ge2Jvb2xlYW59IEluZGljYXRlcyBpZiB3b3JkIHdyYXAgc2hvdWxkIGJlIHVzZWRcbiAgICAgKiBAcGFyYW0gW3N0eWxlLndvcmRXcmFwV2lkdGg9MTAwXSB7bnVtYmVyfSBUaGUgd2lkdGggYXQgd2hpY2ggdGV4dCB3aWxsIHdyYXBcbiAgICAgKiBAcGFyYW0gW3N0eWxlLmxpbmVIZWlnaHRdIHtudW1iZXJ9IFRoZSBsaW5lIGhlaWdodCwgYSBudW1iZXIgdGhhdCByZXByZXNlbnRzIHRoZSB2ZXJ0aWNhbCBzcGFjZSB0aGF0IGEgbGV0dGVyIHVzZXNcbiAgICAgKiBAcGFyYW0gW3N0eWxlLmRyb3BTaGFkb3c9ZmFsc2VdIHtib29sZWFufSBTZXQgYSBkcm9wIHNoYWRvdyBmb3IgdGhlIHRleHRcbiAgICAgKiBAcGFyYW0gW3N0eWxlLmRyb3BTaGFkb3dDb2xvcj0nIzAwMDAwMCddIHtzdHJpbmd8bnVtYmVyfSBBIGZpbGwgc3R5bGUgdG8gYmUgdXNlZCBvbiB0aGUgZHJvcHNoYWRvdyBlLmcgJ3JlZCcsICcjMDBGRjAwJ1xuICAgICAqIEBwYXJhbSBbc3R5bGUuZHJvcFNoYWRvd0FuZ2xlPU1hdGguUEkvNl0ge251bWJlcn0gU2V0IGEgYW5nbGUgb2YgdGhlIGRyb3Agc2hhZG93XG4gICAgICogQHBhcmFtIFtzdHlsZS5kcm9wU2hhZG93RGlzdGFuY2U9NV0ge251bWJlcn0gU2V0IGEgZGlzdGFuY2Ugb2YgdGhlIGRyb3Agc2hhZG93XG4gICAgICogQHBhcmFtIFtzdHlsZS5kcm9wU2hhZG93Qmx1cj0wXSB7bnVtYmVyfSBTZXQgYSBzaGFkb3cgYmx1ciByYWRpdXNcbiAgICAgKiBAcGFyYW0gW3N0eWxlLnBhZGRpbmc9MF0ge251bWJlcn0gT2NjYXNpb25hbGx5IHNvbWUgZm9udHMgYXJlIGNyb3BwZWQgb24gdG9wIG9yIGJvdHRvbS4gQWRkaW5nIHNvbWUgcGFkZGluZyB3aWxsXG4gICAgICogICAgICBwcmV2ZW50IHRoaXMgZnJvbSBoYXBwZW5pbmcgYnkgYWRkaW5nIHBhZGRpbmcgdG8gdGhlIHRvcCBhbmQgYm90dG9tIG9mIHRleHQgaGVpZ2h0LlxuICAgICAqIEBwYXJhbSBbc3R5bGUudGV4dEJhc2VsaW5lPSdhbHBoYWJldGljJ10ge3N0cmluZ30gVGhlIGJhc2VsaW5lIG9mIHRoZSB0ZXh0IHRoYXQgaXMgcmVuZGVyZWQuXG4gICAgICogQHBhcmFtIFtzdHlsZS5saW5lSm9pbj0nbWl0ZXInXSB7c3RyaW5nfSBUaGUgbGluZUpvaW4gcHJvcGVydHkgc2V0cyB0aGUgdHlwZSBvZiBjb3JuZXIgY3JlYXRlZCwgaXQgY2FuIHJlc29sdmVcbiAgICAgKiAgICAgIHNwaWtlZCB0ZXh0IGlzc3Vlcy4gRGVmYXVsdCBpcyAnbWl0ZXInIChjcmVhdGVzIGEgc2hhcnAgY29ybmVyKS5cbiAgICAgKiBAcGFyYW0gW3N0eWxlLm1pdGVyTGltaXQ9MTBdIHtudW1iZXJ9IFRoZSBtaXRlciBsaW1pdCB0byB1c2Ugd2hlbiB1c2luZyB0aGUgJ21pdGVyJyBsaW5lSm9pbiBtb2RlLiBUaGlzIGNhbiByZWR1Y2VcbiAgICAgKiAgICAgIG9yIGluY3JlYXNlIHRoZSBzcGlraW5lc3Mgb2YgcmVuZGVyZWQgdGV4dC5cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5UZXh0I1xuICAgICAqL1xuICAgIHN0eWxlOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3N0eWxlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uIChzdHlsZSlcbiAgICAgICAge1xuICAgICAgICAgICAgc3R5bGUgPSBzdHlsZSB8fCB7fTtcblxuICAgICAgICAgICAgaWYgKHR5cGVvZiBzdHlsZS5maWxsID09PSAnbnVtYmVyJykge1xuICAgICAgICAgICAgICAgIHN0eWxlLmZpbGwgPSB1dGlscy5oZXgyc3RyaW5nKHN0eWxlLmZpbGwpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAodHlwZW9mIHN0eWxlLnN0cm9rZSA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgICAgICAgICBzdHlsZS5zdHJva2UgPSB1dGlscy5oZXgyc3RyaW5nKHN0eWxlLnN0cm9rZSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICh0eXBlb2Ygc3R5bGUuZHJvcFNoYWRvd0NvbG9yID09PSAnbnVtYmVyJykge1xuICAgICAgICAgICAgICAgIHN0eWxlLmRyb3BTaGFkb3dDb2xvciA9IHV0aWxzLmhleDJzdHJpbmcoc3R5bGUuZHJvcFNoYWRvd0NvbG9yKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgc3R5bGUuZm9udCA9IHN0eWxlLmZvbnQgfHwgJ2JvbGQgMjBwdCBBcmlhbCc7XG4gICAgICAgICAgICBzdHlsZS5maWxsID0gc3R5bGUuZmlsbCB8fCAnYmxhY2snO1xuICAgICAgICAgICAgc3R5bGUuYWxpZ24gPSBzdHlsZS5hbGlnbiB8fCAnbGVmdCc7XG4gICAgICAgICAgICBzdHlsZS5zdHJva2UgPSBzdHlsZS5zdHJva2UgfHwgJ2JsYWNrJzsgLy9wcm92aWRlIGEgZGVmYXVsdCwgc2VlOiBodHRwczovL2dpdGh1Yi5jb20vcGl4aWpzL3BpeGkuanMvaXNzdWVzLzEzNlxuICAgICAgICAgICAgc3R5bGUuc3Ryb2tlVGhpY2tuZXNzID0gc3R5bGUuc3Ryb2tlVGhpY2tuZXNzIHx8IDA7XG4gICAgICAgICAgICBzdHlsZS53b3JkV3JhcCA9IHN0eWxlLndvcmRXcmFwIHx8IGZhbHNlO1xuICAgICAgICAgICAgc3R5bGUud29yZFdyYXBXaWR0aCA9IHN0eWxlLndvcmRXcmFwV2lkdGggfHwgMTAwO1xuXG4gICAgICAgICAgICBzdHlsZS5kcm9wU2hhZG93ID0gc3R5bGUuZHJvcFNoYWRvdyB8fCBmYWxzZTtcbiAgICAgICAgICAgIHN0eWxlLmRyb3BTaGFkb3dDb2xvciA9IHN0eWxlLmRyb3BTaGFkb3dDb2xvciB8fCAnIzAwMDAwMCc7XG4gICAgICAgICAgICBzdHlsZS5kcm9wU2hhZG93QW5nbGUgPSBzdHlsZS5kcm9wU2hhZG93QW5nbGUgIT09IHVuZGVmaW5lZCA/IHN0eWxlLmRyb3BTaGFkb3dBbmdsZSA6IE1hdGguUEkgLyA2O1xuICAgICAgICAgICAgc3R5bGUuZHJvcFNoYWRvd0Rpc3RhbmNlID0gc3R5bGUuZHJvcFNoYWRvd0Rpc3RhbmNlICE9PSB1bmRlZmluZWQgPyBzdHlsZS5kcm9wU2hhZG93RGlzdGFuY2UgOiA1O1xuICAgICAgICAgICAgc3R5bGUuZHJvcFNoYWRvd0JsdXIgPSBzdHlsZS5kcm9wU2hhZG93Qmx1ciAhPT0gdW5kZWZpbmVkID8gc3R5bGUuZHJvcFNoYWRvd0JsdXIgOiAwOyAvL3NoYWRvd0JsdXIgaXMgJzAnIGJ5IGRlZmF1bHQgYWNjb3JkaW5nIHRvIEhUTUxcblxuICAgICAgICAgICAgc3R5bGUucGFkZGluZyA9IHN0eWxlLnBhZGRpbmcgfHwgMDtcblxuICAgICAgICAgICAgc3R5bGUudGV4dEJhc2VsaW5lID0gc3R5bGUudGV4dEJhc2VsaW5lIHx8ICdhbHBoYWJldGljJztcblxuICAgICAgICAgICAgc3R5bGUubGluZUpvaW4gPSBzdHlsZS5saW5lSm9pbiB8fCAnbWl0ZXInO1xuICAgICAgICAgICAgc3R5bGUubWl0ZXJMaW1pdCA9IHN0eWxlLm1pdGVyTGltaXQgfHwgMTA7XG5cbiAgICAgICAgICAgIHRoaXMuX3N0eWxlID0gc3R5bGU7XG4gICAgICAgICAgICB0aGlzLmRpcnR5ID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBTZXQgdGhlIGNvcHkgZm9yIHRoZSB0ZXh0IG9iamVjdC4gVG8gc3BsaXQgYSBsaW5lIHlvdSBjYW4gdXNlICdcXG4nLlxuICAgICAqXG4gICAgICogQHBhcmFtIHRleHQge3N0cmluZ30gVGhlIGNvcHkgdGhhdCB5b3Ugd291bGQgbGlrZSB0aGUgdGV4dCB0byBkaXNwbGF5XG4gICAgICogQG1lbWJlcm9mIFBJWEkuVGV4dCNcbiAgICAgKi9cbiAgICB0ZXh0OiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24oKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fdGV4dDtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodGV4dCl7XG4gICAgICAgICAgICB0ZXh0ID0gdGV4dC50b1N0cmluZygpIHx8ICcgJztcbiAgICAgICAgICAgIGlmICh0aGlzLl90ZXh0ID09PSB0ZXh0KVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuX3RleHQgPSB0ZXh0O1xuICAgICAgICAgICAgdGhpcy5kaXJ0eSA9IHRydWU7XG4gICAgICAgIH1cbiAgICB9XG59KTtcblxuLyoqXG4gKiBSZW5kZXJzIHRleHQgYW5kIHVwZGF0ZXMgaXQgd2hlbiBuZWVkZWRcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5UZXh0LnByb3RvdHlwZS51cGRhdGVUZXh0ID0gZnVuY3Rpb24gKClcbntcbiAgICB2YXIgc3R5bGUgPSB0aGlzLl9zdHlsZTtcbiAgICB0aGlzLmNvbnRleHQuZm9udCA9IHN0eWxlLmZvbnQ7XG5cbiAgICAvLyB3b3JkIHdyYXBcbiAgICAvLyBwcmVzZXJ2ZSBvcmlnaW5hbCB0ZXh0XG4gICAgdmFyIG91dHB1dFRleHQgPSBzdHlsZS53b3JkV3JhcCA/IHRoaXMud29yZFdyYXAodGhpcy5fdGV4dCkgOiB0aGlzLl90ZXh0O1xuXG4gICAgLy8gc3BsaXQgdGV4dCBpbnRvIGxpbmVzXG4gICAgdmFyIGxpbmVzID0gb3V0cHV0VGV4dC5zcGxpdCgvKD86XFxyXFxufFxccnxcXG4pLyk7XG5cbiAgICAvLyBjYWxjdWxhdGUgdGV4dCB3aWR0aFxuICAgIHZhciBsaW5lV2lkdGhzID0gbmV3IEFycmF5KGxpbmVzLmxlbmd0aCk7XG4gICAgdmFyIG1heExpbmVXaWR0aCA9IDA7XG4gICAgdmFyIGZvbnRQcm9wZXJ0aWVzID0gdGhpcy5kZXRlcm1pbmVGb250UHJvcGVydGllcyhzdHlsZS5mb250KTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxpbmVzLmxlbmd0aDsgaSsrKVxuICAgIHtcbiAgICAgICAgdmFyIGxpbmVXaWR0aCA9IHRoaXMuY29udGV4dC5tZWFzdXJlVGV4dChsaW5lc1tpXSkud2lkdGg7XG4gICAgICAgIGxpbmVXaWR0aHNbaV0gPSBsaW5lV2lkdGg7XG4gICAgICAgIG1heExpbmVXaWR0aCA9IE1hdGgubWF4KG1heExpbmVXaWR0aCwgbGluZVdpZHRoKTtcbiAgICB9XG5cbiAgICB2YXIgd2lkdGggPSBtYXhMaW5lV2lkdGggKyBzdHlsZS5zdHJva2VUaGlja25lc3M7XG4gICAgaWYgKHN0eWxlLmRyb3BTaGFkb3cpXG4gICAge1xuICAgICAgICB3aWR0aCArPSBzdHlsZS5kcm9wU2hhZG93RGlzdGFuY2U7XG4gICAgfVxuXG4gICAgdGhpcy5jYW52YXMud2lkdGggPSAoIHdpZHRoICsgdGhpcy5jb250ZXh0LmxpbmVXaWR0aCApICogdGhpcy5yZXNvbHV0aW9uO1xuXG4gICAgLy8gY2FsY3VsYXRlIHRleHQgaGVpZ2h0XG4gICAgdmFyIGxpbmVIZWlnaHQgPSB0aGlzLnN0eWxlLmxpbmVIZWlnaHQgfHwgZm9udFByb3BlcnRpZXMuZm9udFNpemUgKyBzdHlsZS5zdHJva2VUaGlja25lc3M7XG5cbiAgICB2YXIgaGVpZ2h0ID0gbGluZUhlaWdodCAqIGxpbmVzLmxlbmd0aDtcbiAgICBpZiAoc3R5bGUuZHJvcFNoYWRvdylcbiAgICB7XG4gICAgICAgIGhlaWdodCArPSBzdHlsZS5kcm9wU2hhZG93RGlzdGFuY2U7XG4gICAgfVxuXG4gICAgdGhpcy5jYW52YXMuaGVpZ2h0ID0gKCBoZWlnaHQgKyB0aGlzLl9zdHlsZS5wYWRkaW5nICogMiApICogdGhpcy5yZXNvbHV0aW9uO1xuXG4gICAgdGhpcy5jb250ZXh0LnNjYWxlKCB0aGlzLnJlc29sdXRpb24sIHRoaXMucmVzb2x1dGlvbik7XG5cbiAgICBpZiAobmF2aWdhdG9yLmlzQ29jb29uSlMpXG4gICAge1xuICAgICAgICB0aGlzLmNvbnRleHQuY2xlYXJSZWN0KDAsIDAsIHRoaXMuY2FudmFzLndpZHRoLCB0aGlzLmNhbnZhcy5oZWlnaHQpO1xuXG4gICAgfVxuXG4gICAgLy90aGlzLmNvbnRleHQuZmlsbFN0eWxlPVwiI0ZGMDAwMFwiO1xuICAgIC8vdGhpcy5jb250ZXh0LmZpbGxSZWN0KDAsIDAsIHRoaXMuY2FudmFzLndpZHRoLCB0aGlzLmNhbnZhcy5oZWlnaHQpO1xuXG4gICAgdGhpcy5jb250ZXh0LmZvbnQgPSBzdHlsZS5mb250O1xuICAgIHRoaXMuY29udGV4dC5zdHJva2VTdHlsZSA9IHN0eWxlLnN0cm9rZTtcbiAgICB0aGlzLmNvbnRleHQubGluZVdpZHRoID0gc3R5bGUuc3Ryb2tlVGhpY2tuZXNzO1xuICAgIHRoaXMuY29udGV4dC50ZXh0QmFzZWxpbmUgPSBzdHlsZS50ZXh0QmFzZWxpbmU7XG4gICAgdGhpcy5jb250ZXh0LmxpbmVKb2luID0gc3R5bGUubGluZUpvaW47XG4gICAgdGhpcy5jb250ZXh0Lm1pdGVyTGltaXQgPSBzdHlsZS5taXRlckxpbWl0O1xuXG4gICAgdmFyIGxpbmVQb3NpdGlvblg7XG4gICAgdmFyIGxpbmVQb3NpdGlvblk7XG5cbiAgICBpZiAoc3R5bGUuZHJvcFNoYWRvdylcbiAgICB7XG4gICAgICAgIGlmIChzdHlsZS5kcm9wU2hhZG93Qmx1ciA+IDApIHtcbiAgICAgICAgICAgIHRoaXMuY29udGV4dC5zaGFkb3dDb2xvciA9IHN0eWxlLmRyb3BTaGFkb3dDb2xvcjtcbiAgICAgICAgICAgIHRoaXMuY29udGV4dC5zaGFkb3dCbHVyID0gc3R5bGUuZHJvcFNoYWRvd0JsdXI7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmNvbnRleHQuZmlsbFN0eWxlID0gc3R5bGUuZHJvcFNoYWRvd0NvbG9yO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIHhTaGFkb3dPZmZzZXQgPSBNYXRoLmNvcyhzdHlsZS5kcm9wU2hhZG93QW5nbGUpICogc3R5bGUuZHJvcFNoYWRvd0Rpc3RhbmNlO1xuICAgICAgICB2YXIgeVNoYWRvd09mZnNldCA9IE1hdGguc2luKHN0eWxlLmRyb3BTaGFkb3dBbmdsZSkgKiBzdHlsZS5kcm9wU2hhZG93RGlzdGFuY2U7XG5cbiAgICAgICAgZm9yIChpID0gMDsgaSA8IGxpbmVzLmxlbmd0aDsgaSsrKVxuICAgICAgICB7XG4gICAgICAgICAgICBsaW5lUG9zaXRpb25YID0gc3R5bGUuc3Ryb2tlVGhpY2tuZXNzIC8gMjtcbiAgICAgICAgICAgIGxpbmVQb3NpdGlvblkgPSAoc3R5bGUuc3Ryb2tlVGhpY2tuZXNzIC8gMiArIGkgKiBsaW5lSGVpZ2h0KSArIGZvbnRQcm9wZXJ0aWVzLmFzY2VudDtcblxuICAgICAgICAgICAgaWYgKHN0eWxlLmFsaWduID09PSAncmlnaHQnKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGxpbmVQb3NpdGlvblggKz0gbWF4TGluZVdpZHRoIC0gbGluZVdpZHRoc1tpXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKHN0eWxlLmFsaWduID09PSAnY2VudGVyJylcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBsaW5lUG9zaXRpb25YICs9IChtYXhMaW5lV2lkdGggLSBsaW5lV2lkdGhzW2ldKSAvIDI7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChzdHlsZS5maWxsKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHRoaXMuY29udGV4dC5maWxsVGV4dChsaW5lc1tpXSwgbGluZVBvc2l0aW9uWCArIHhTaGFkb3dPZmZzZXQsIGxpbmVQb3NpdGlvblkgKyB5U2hhZG93T2Zmc2V0ICsgdGhpcy5fc3R5bGUucGFkZGluZyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvL3NldCBjYW52YXMgdGV4dCBzdHlsZXNcbiAgICB0aGlzLmNvbnRleHQuZmlsbFN0eWxlID0gc3R5bGUuZmlsbDtcblxuICAgIC8vZHJhdyBsaW5lcyBsaW5lIGJ5IGxpbmVcbiAgICBmb3IgKGkgPSAwOyBpIDwgbGluZXMubGVuZ3RoOyBpKyspXG4gICAge1xuICAgICAgICBsaW5lUG9zaXRpb25YID0gc3R5bGUuc3Ryb2tlVGhpY2tuZXNzIC8gMjtcbiAgICAgICAgbGluZVBvc2l0aW9uWSA9IChzdHlsZS5zdHJva2VUaGlja25lc3MgLyAyICsgaSAqIGxpbmVIZWlnaHQpICsgZm9udFByb3BlcnRpZXMuYXNjZW50O1xuXG4gICAgICAgIGlmIChzdHlsZS5hbGlnbiA9PT0gJ3JpZ2h0JylcbiAgICAgICAge1xuICAgICAgICAgICAgbGluZVBvc2l0aW9uWCArPSBtYXhMaW5lV2lkdGggLSBsaW5lV2lkdGhzW2ldO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHN0eWxlLmFsaWduID09PSAnY2VudGVyJylcbiAgICAgICAge1xuICAgICAgICAgICAgbGluZVBvc2l0aW9uWCArPSAobWF4TGluZVdpZHRoIC0gbGluZVdpZHRoc1tpXSkgLyAyO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHN0eWxlLnN0cm9rZSAmJiBzdHlsZS5zdHJva2VUaGlja25lc3MpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuY29udGV4dC5zdHJva2VUZXh0KGxpbmVzW2ldLCBsaW5lUG9zaXRpb25YLCBsaW5lUG9zaXRpb25ZICsgdGhpcy5fc3R5bGUucGFkZGluZyk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoc3R5bGUuZmlsbClcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5jb250ZXh0LmZpbGxUZXh0KGxpbmVzW2ldLCBsaW5lUG9zaXRpb25YLCBsaW5lUG9zaXRpb25ZICsgdGhpcy5fc3R5bGUucGFkZGluZyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLnVwZGF0ZVRleHR1cmUoKTtcbn07XG5cbi8qKlxuICogVXBkYXRlcyB0ZXh0dXJlIHNpemUgYmFzZWQgb24gY2FudmFzIHNpemVcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5UZXh0LnByb3RvdHlwZS51cGRhdGVUZXh0dXJlID0gZnVuY3Rpb24gKClcbntcbiAgICB2YXIgdGV4dHVyZSA9IHRoaXMuX3RleHR1cmU7XG5cbiAgICB0ZXh0dXJlLmJhc2VUZXh0dXJlLmhhc0xvYWRlZCA9IHRydWU7XG4gICAgdGV4dHVyZS5iYXNlVGV4dHVyZS5yZXNvbHV0aW9uID0gdGhpcy5yZXNvbHV0aW9uO1xuXG4gICAgdGV4dHVyZS5iYXNlVGV4dHVyZS53aWR0aCA9IHRoaXMuY2FudmFzLndpZHRoIC8gdGhpcy5yZXNvbHV0aW9uO1xuICAgIHRleHR1cmUuYmFzZVRleHR1cmUuaGVpZ2h0ID0gdGhpcy5jYW52YXMuaGVpZ2h0IC8gdGhpcy5yZXNvbHV0aW9uO1xuICAgIHRleHR1cmUuY3JvcC53aWR0aCA9IHRleHR1cmUuX2ZyYW1lLndpZHRoID0gdGhpcy5jYW52YXMud2lkdGggLyB0aGlzLnJlc29sdXRpb247XG4gICAgdGV4dHVyZS5jcm9wLmhlaWdodCA9IHRleHR1cmUuX2ZyYW1lLmhlaWdodCA9IHRoaXMuY2FudmFzLmhlaWdodCAvIHRoaXMucmVzb2x1dGlvbjtcblxuICAgIHRleHR1cmUudHJpbS54ID0gMDtcbiAgICB0ZXh0dXJlLnRyaW0ueSA9IC10aGlzLl9zdHlsZS5wYWRkaW5nO1xuXG4gICAgdGV4dHVyZS50cmltLndpZHRoID0gdGV4dHVyZS5fZnJhbWUud2lkdGg7XG4gICAgdGV4dHVyZS50cmltLmhlaWdodCA9IHRleHR1cmUuX2ZyYW1lLmhlaWdodCAtIHRoaXMuX3N0eWxlLnBhZGRpbmcqMjtcblxuICAgIHRoaXMuX3dpZHRoID0gdGhpcy5jYW52YXMud2lkdGggLyB0aGlzLnJlc29sdXRpb247XG4gICAgdGhpcy5faGVpZ2h0ID0gdGhpcy5jYW52YXMuaGVpZ2h0IC8gdGhpcy5yZXNvbHV0aW9uO1xuXG4gICAgdGV4dHVyZS5iYXNlVGV4dHVyZS5lbWl0KCd1cGRhdGUnLCAgdGV4dHVyZS5iYXNlVGV4dHVyZSk7XG5cbiAgICB0aGlzLmRpcnR5ID0gZmFsc2U7XG59O1xuXG4vKipcbiAqIFJlbmRlcnMgdGhlIG9iamVjdCB1c2luZyB0aGUgV2ViR0wgcmVuZGVyZXJcbiAqXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcn1cbiAqL1xuVGV4dC5wcm90b3R5cGUucmVuZGVyV2ViR0wgPSBmdW5jdGlvbiAocmVuZGVyZXIpXG57XG4gICAgaWYgKHRoaXMuZGlydHkpXG4gICAge1xuICAgICAgICAvL3RoaXMucmVzb2x1dGlvbiA9IDEvL3JlbmRlcmVyLnJlc29sdXRpb247XG5cbiAgICAgICAgdGhpcy51cGRhdGVUZXh0KCk7XG4gICAgfVxuXG4gICAgU3ByaXRlLnByb3RvdHlwZS5yZW5kZXJXZWJHTC5jYWxsKHRoaXMsIHJlbmRlcmVyKTtcbn07XG5cbi8qKlxuICogUmVuZGVycyB0aGUgb2JqZWN0IHVzaW5nIHRoZSBDYW52YXMgcmVuZGVyZXJcbiAqXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuQ2FudmFzUmVuZGVyZXJ9XG4gKiBAcHJpdmF0ZVxuICovXG5UZXh0LnByb3RvdHlwZS5fcmVuZGVyQ2FudmFzID0gZnVuY3Rpb24gKHJlbmRlcmVyKVxue1xuICAgIGlmICh0aGlzLmRpcnR5KVxuICAgIHtcbiAgICAgLy8gICB0aGlzLnJlc29sdXRpb24gPSAxLy9yZW5kZXJlci5yZXNvbHV0aW9uO1xuXG4gICAgICAgIHRoaXMudXBkYXRlVGV4dCgpO1xuICAgIH1cblxuICAgIFNwcml0ZS5wcm90b3R5cGUuX3JlbmRlckNhbnZhcy5jYWxsKHRoaXMsIHJlbmRlcmVyKTtcbn07XG5cbi8qKlxuICogQ2FsY3VsYXRlcyB0aGUgYXNjZW50LCBkZXNjZW50IGFuZCBmb250U2l6ZSBvZiBhIGdpdmVuIGZvbnRTdHlsZVxuICpcbiAqIEBwYXJhbSBmb250U3R5bGUge29iamVjdH1cbiAqIEBwcml2YXRlXG4gKi9cblRleHQucHJvdG90eXBlLmRldGVybWluZUZvbnRQcm9wZXJ0aWVzID0gZnVuY3Rpb24gKGZvbnRTdHlsZSlcbntcbiAgICB2YXIgcHJvcGVydGllcyA9IFRleHQuZm9udFByb3BlcnRpZXNDYWNoZVtmb250U3R5bGVdO1xuXG4gICAgaWYgKCFwcm9wZXJ0aWVzKVxuICAgIHtcbiAgICAgICAgcHJvcGVydGllcyA9IHt9O1xuXG4gICAgICAgIHZhciBjYW52YXMgPSBUZXh0LmZvbnRQcm9wZXJ0aWVzQ2FudmFzO1xuICAgICAgICB2YXIgY29udGV4dCA9IFRleHQuZm9udFByb3BlcnRpZXNDb250ZXh0O1xuXG4gICAgICAgIGNvbnRleHQuZm9udCA9IGZvbnRTdHlsZTtcblxuICAgICAgICB2YXIgd2lkdGggPSBNYXRoLmNlaWwoY29udGV4dC5tZWFzdXJlVGV4dCgnfE3DiXEnKS53aWR0aCk7XG4gICAgICAgIHZhciBiYXNlbGluZSA9IE1hdGguY2VpbChjb250ZXh0Lm1lYXN1cmVUZXh0KCdNJykud2lkdGgpO1xuICAgICAgICB2YXIgaGVpZ2h0ID0gMiAqIGJhc2VsaW5lO1xuXG4gICAgICAgIGJhc2VsaW5lID0gYmFzZWxpbmUgKiAxLjQgfCAwO1xuXG4gICAgICAgIGNhbnZhcy53aWR0aCA9IHdpZHRoO1xuICAgICAgICBjYW52YXMuaGVpZ2h0ID0gaGVpZ2h0O1xuXG4gICAgICAgIGNvbnRleHQuZmlsbFN0eWxlID0gJyNmMDAnO1xuICAgICAgICBjb250ZXh0LmZpbGxSZWN0KDAsIDAsIHdpZHRoLCBoZWlnaHQpO1xuXG4gICAgICAgIGNvbnRleHQuZm9udCA9IGZvbnRTdHlsZTtcblxuICAgICAgICBjb250ZXh0LnRleHRCYXNlbGluZSA9ICdhbHBoYWJldGljJztcbiAgICAgICAgY29udGV4dC5maWxsU3R5bGUgPSAnIzAwMCc7XG4gICAgICAgIGNvbnRleHQuZmlsbFRleHQoJ3xNw4lxJywgMCwgYmFzZWxpbmUpO1xuXG4gICAgICAgIHZhciBpbWFnZWRhdGEgPSBjb250ZXh0LmdldEltYWdlRGF0YSgwLCAwLCB3aWR0aCwgaGVpZ2h0KS5kYXRhO1xuICAgICAgICB2YXIgcGl4ZWxzID0gaW1hZ2VkYXRhLmxlbmd0aDtcbiAgICAgICAgdmFyIGxpbmUgPSB3aWR0aCAqIDQ7XG5cbiAgICAgICAgdmFyIGksIGo7XG5cbiAgICAgICAgdmFyIGlkeCA9IDA7XG4gICAgICAgIHZhciBzdG9wID0gZmFsc2U7XG5cbiAgICAgICAgLy8gYXNjZW50LiBzY2FuIGZyb20gdG9wIHRvIGJvdHRvbSB1bnRpbCB3ZSBmaW5kIGEgbm9uIHJlZCBwaXhlbFxuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgYmFzZWxpbmU7IGkrKylcbiAgICAgICAge1xuICAgICAgICAgICAgZm9yIChqID0gMDsgaiA8IGxpbmU7IGogKz0gNClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBpZiAoaW1hZ2VkYXRhW2lkeCArIGpdICE9PSAyNTUpXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBzdG9wID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCFzdG9wKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGlkeCArPSBsaW5lO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcHJvcGVydGllcy5hc2NlbnQgPSBiYXNlbGluZSAtIGk7XG5cbiAgICAgICAgaWR4ID0gcGl4ZWxzIC0gbGluZTtcbiAgICAgICAgc3RvcCA9IGZhbHNlO1xuXG4gICAgICAgIC8vIGRlc2NlbnQuIHNjYW4gZnJvbSBib3R0b20gdG8gdG9wIHVudGlsIHdlIGZpbmQgYSBub24gcmVkIHBpeGVsXG4gICAgICAgIGZvciAoaSA9IGhlaWdodDsgaSA+IGJhc2VsaW5lOyBpLS0pXG4gICAgICAgIHtcbiAgICAgICAgICAgIGZvciAoaiA9IDA7IGogPCBsaW5lOyBqICs9IDQpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgaWYgKGltYWdlZGF0YVtpZHggKyBqXSAhPT0gMjU1KVxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgc3RvcCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghc3RvcClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBpZHggLT0gbGluZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHByb3BlcnRpZXMuZGVzY2VudCA9IGkgLSBiYXNlbGluZTtcbiAgICAgICAgcHJvcGVydGllcy5mb250U2l6ZSA9IHByb3BlcnRpZXMuYXNjZW50ICsgcHJvcGVydGllcy5kZXNjZW50O1xuXG4gICAgICAgIFRleHQuZm9udFByb3BlcnRpZXNDYWNoZVtmb250U3R5bGVdID0gcHJvcGVydGllcztcbiAgICB9XG5cbiAgICByZXR1cm4gcHJvcGVydGllcztcbn07XG5cbi8qKlxuICogQXBwbGllcyBuZXdsaW5lcyB0byBhIHN0cmluZyB0byBoYXZlIGl0IG9wdGltYWxseSBmaXQgaW50byB0aGUgaG9yaXpvbnRhbFxuICogYm91bmRzIHNldCBieSB0aGUgVGV4dCBvYmplY3QncyB3b3JkV3JhcFdpZHRoIHByb3BlcnR5LlxuICpcbiAqIEBwYXJhbSB0ZXh0IHtzdHJpbmd9XG4gKiBAcHJpdmF0ZVxuICovXG5UZXh0LnByb3RvdHlwZS53b3JkV3JhcCA9IGZ1bmN0aW9uICh0ZXh0KVxue1xuICAgIC8vIEdyZWVkeSB3cmFwcGluZyBhbGdvcml0aG0gdGhhdCB3aWxsIHdyYXAgd29yZHMgYXMgdGhlIGxpbmUgZ3Jvd3MgbG9uZ2VyXG4gICAgLy8gdGhhbiBpdHMgaG9yaXpvbnRhbCBib3VuZHMuXG4gICAgdmFyIHJlc3VsdCA9ICcnO1xuICAgIHZhciBsaW5lcyA9IHRleHQuc3BsaXQoJ1xcbicpO1xuICAgIHZhciB3b3JkV3JhcFdpZHRoID0gdGhpcy5fc3R5bGUud29yZFdyYXBXaWR0aDtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxpbmVzLmxlbmd0aDsgaSsrKVxuICAgIHtcbiAgICAgICAgdmFyIHNwYWNlTGVmdCA9IHdvcmRXcmFwV2lkdGg7XG4gICAgICAgIHZhciB3b3JkcyA9IGxpbmVzW2ldLnNwbGl0KCcgJyk7XG4gICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgd29yZHMubGVuZ3RoOyBqKyspXG4gICAgICAgIHtcbiAgICAgICAgICAgIHZhciB3b3JkV2lkdGggPSB0aGlzLmNvbnRleHQubWVhc3VyZVRleHQod29yZHNbal0pLndpZHRoO1xuICAgICAgICAgICAgdmFyIHdvcmRXaWR0aFdpdGhTcGFjZSA9IHdvcmRXaWR0aCArIHRoaXMuY29udGV4dC5tZWFzdXJlVGV4dCgnICcpLndpZHRoO1xuICAgICAgICAgICAgaWYgKGogPT09IDAgfHwgd29yZFdpZHRoV2l0aFNwYWNlID4gc3BhY2VMZWZ0KVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIC8vIFNraXAgcHJpbnRpbmcgdGhlIG5ld2xpbmUgaWYgaXQncyB0aGUgZmlyc3Qgd29yZCBvZiB0aGUgbGluZSB0aGF0IGlzXG4gICAgICAgICAgICAgICAgLy8gZ3JlYXRlciB0aGFuIHRoZSB3b3JkIHdyYXAgd2lkdGguXG4gICAgICAgICAgICAgICAgaWYgKGogPiAwKVxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0ICs9ICdcXG4nO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXN1bHQgKz0gd29yZHNbal07XG4gICAgICAgICAgICAgICAgc3BhY2VMZWZ0ID0gd29yZFdyYXBXaWR0aCAtIHdvcmRXaWR0aDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBzcGFjZUxlZnQgLT0gd29yZFdpZHRoV2l0aFNwYWNlO1xuICAgICAgICAgICAgICAgIHJlc3VsdCArPSAnICcgKyB3b3Jkc1tqXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChpIDwgbGluZXMubGVuZ3RoLTEpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJlc3VsdCArPSAnXFxuJztcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xufTtcblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBib3VuZHMgb2YgdGhlIFRleHQgYXMgYSByZWN0YW5nbGUuIFRoZSBib3VuZHMgY2FsY3VsYXRpb24gdGFrZXMgdGhlIHdvcmxkVHJhbnNmb3JtIGludG8gYWNjb3VudC5cbiAqXG4gKiBAcGFyYW0gbWF0cml4IHtQSVhJLk1hdHJpeH0gdGhlIHRyYW5zZm9ybWF0aW9uIG1hdHJpeCBvZiB0aGUgVGV4dFxuICogQHJldHVybiB7UElYSS5SZWN0YW5nbGV9IHRoZSBmcmFtaW5nIHJlY3RhbmdsZVxuICovXG5UZXh0LnByb3RvdHlwZS5nZXRCb3VuZHMgPSBmdW5jdGlvbiAobWF0cml4KVxue1xuICAgIGlmICh0aGlzLmRpcnR5KVxuICAgIHtcbiAgICAgICAgdGhpcy51cGRhdGVUZXh0KCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIFNwcml0ZS5wcm90b3R5cGUuZ2V0Qm91bmRzLmNhbGwodGhpcywgbWF0cml4KTtcbn07XG5cbi8qKlxuICogRGVzdHJveXMgdGhpcyB0ZXh0IG9iamVjdC5cbiAqXG4gKiBAcGFyYW0gW2Rlc3Ryb3lCYXNlVGV4dHVyZT10cnVlXSB7Ym9vbGVhbn0gd2hldGhlciB0byBkZXN0cm95IHRoZSBiYXNlIHRleHR1cmUgYXMgd2VsbFxuICovXG5UZXh0LnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKGRlc3Ryb3lCYXNlVGV4dHVyZSlcbntcbiAgICAvLyBtYWtlIHN1cmUgdG8gcmVzZXQgdGhlIHRoZSBjb250ZXh0IGFuZCBjYW52YXMuLiBkb250IHdhbnQgdGhpcyBoYW5naW5nIGFyb3VuZCBpbiBtZW1vcnkhXG4gICAgdGhpcy5jb250ZXh0ID0gbnVsbDtcbiAgICB0aGlzLmNhbnZhcyA9IG51bGw7XG5cbiAgICB0aGlzLl9zdHlsZSA9IG51bGw7XG5cbiAgICB0aGlzLl90ZXh0dXJlLmRlc3Ryb3koZGVzdHJveUJhc2VUZXh0dXJlID09PSB1bmRlZmluZWQgPyB0cnVlIDogZGVzdHJveUJhc2VUZXh0dXJlKTtcbn07XG4iLCJ2YXIgdXRpbHMgPSByZXF1aXJlKCcuLi91dGlscycpLFxuICAgIENPTlNUID0gcmVxdWlyZSgnLi4vY29uc3QnKSxcbiAgICBFdmVudEVtaXR0ZXIgPSByZXF1aXJlKCdldmVudGVtaXR0ZXIzJyk7XG5cbi8qKlxuICogQSB0ZXh0dXJlIHN0b3JlcyB0aGUgaW5mb3JtYXRpb24gdGhhdCByZXByZXNlbnRzIGFuIGltYWdlLiBBbGwgdGV4dHVyZXMgaGF2ZSBhIGJhc2UgdGV4dHVyZS5cbiAqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gc291cmNlIHtJbWFnZXxDYW52YXN9IHRoZSBzb3VyY2Ugb2JqZWN0IG9mIHRoZSB0ZXh0dXJlLlxuICogQHBhcmFtIFtzY2FsZU1vZGU9UElYSS5TQ0FMRV9NT0RFUy5ERUZBVUxUXSB7bnVtYmVyfSBTZWUge0BsaW5rIFBJWEkuU0NBTEVfTU9ERVN9IGZvciBwb3NzaWJsZSB2YWx1ZXNcbiAqIEBwYXJhbSByZXNvbHV0aW9uIHtudW1iZXJ9IHRoZSByZXNvbHV0aW9uIG9mIHRoZSB0ZXh0dXJlIGZvciBkZXZpY2VzIHdpdGggZGlmZmVyZW50IHBpeGVsIHJhdGlvc1xuICovXG5mdW5jdGlvbiBCYXNlVGV4dHVyZShzb3VyY2UsIHNjYWxlTW9kZSwgcmVzb2x1dGlvbilcbntcbiAgICBFdmVudEVtaXR0ZXIuY2FsbCh0aGlzKTtcblxuICAgIHRoaXMudWlkID0gdXRpbHMudWlkKCk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgUmVzb2x1dGlvbiBvZiB0aGUgdGV4dHVyZS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLnJlc29sdXRpb24gPSByZXNvbHV0aW9uIHx8IDE7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgd2lkdGggb2YgdGhlIGJhc2UgdGV4dHVyZSBzZXQgd2hlbiB0aGUgaW1hZ2UgaGFzIGxvYWRlZFxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEByZWFkT25seVxuICAgICAqL1xuICAgIHRoaXMud2lkdGggPSAxMDA7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgaGVpZ2h0IG9mIHRoZSBiYXNlIHRleHR1cmUgc2V0IHdoZW4gdGhlIGltYWdlIGhhcyBsb2FkZWRcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAcmVhZE9ubHlcbiAgICAgKi9cbiAgICB0aGlzLmhlaWdodCA9IDEwMDtcblxuICAgIC8vIFRPRE8gZG9jc1xuICAgIC8vIHVzZWQgdG8gc3RvcmUgdGhlIGFjdHVhbCBkaW1lbnNpb25zIG9mIHRoZSBzb3VyY2VcbiAgICAvKipcbiAgICAgKiBVc2VkIHRvIHN0b3JlIHRoZSBhY3R1YWwgd2lkdGggb2YgdGhlIHNvdXJjZSBvZiB0aGlzIHRleHR1cmVcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAcmVhZE9ubHlcbiAgICAgKi9cbiAgICB0aGlzLnJlYWxXaWR0aCA9IDEwMDtcbiAgICAvKipcbiAgICAgKiBVc2VkIHRvIHN0b3JlIHRoZSBhY3R1YWwgaGVpZ2h0IG9mIHRoZSBzb3VyY2Ugb2YgdGhpcyB0ZXh0dXJlXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQHJlYWRPbmx5XG4gICAgICovXG4gICAgdGhpcy5yZWFsSGVpZ2h0ID0gMTAwO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHNjYWxlIG1vZGUgdG8gYXBwbHkgd2hlbiBzY2FsaW5nIHRoaXMgdGV4dHVyZVxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IFBJWEkuU0NBTEVfTU9ERVMuTElORUFSXG4gICAgICogQHNlZSBQSVhJLlNDQUxFX01PREVTXG4gICAgICovXG4gICAgdGhpcy5zY2FsZU1vZGUgPSBzY2FsZU1vZGUgfHwgQ09OU1QuU0NBTEVfTU9ERVMuREVGQVVMVDtcblxuICAgIC8qKlxuICAgICAqIFNldCB0byB0cnVlIG9uY2UgdGhlIGJhc2UgdGV4dHVyZSBoYXMgc3VjY2Vzc2Z1bGx5IGxvYWRlZC5cbiAgICAgKlxuICAgICAqIFRoaXMgaXMgbmV2ZXIgdHJ1ZSBpZiB0aGUgdW5kZXJseWluZyBzb3VyY2UgZmFpbHMgdG8gbG9hZCBvciBoYXMgbm8gdGV4dHVyZSBkYXRhLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKiBAcmVhZE9ubHlcbiAgICAgKi9cbiAgICB0aGlzLmhhc0xvYWRlZCA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogU2V0IHRvIHRydWUgaWYgdGhlIHNvdXJjZSBpcyBjdXJyZW50bHkgbG9hZGluZy5cbiAgICAgKlxuICAgICAqIElmIGFuIEltYWdlIHNvdXJjZSBpcyBsb2FkaW5nIHRoZSAnbG9hZGVkJyBvciAnZXJyb3InIGV2ZW50IHdpbGwgYmVcbiAgICAgKiBkaXNwYXRjaGVkIHdoZW4gdGhlIG9wZXJhdGlvbiBlbmRzLiBBbiB1bmRlcnlsaW5nIHNvdXJjZSB0aGF0IGlzXG4gICAgICogaW1tZWRpYXRlbHktYXZhaWxhYmxlIGJ5cGFzc2VzIGxvYWRpbmcgZW50aXJlbHkuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqIEByZWFkb25seVxuICAgICAqL1xuICAgIHRoaXMuaXNMb2FkaW5nID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgaW1hZ2Ugc291cmNlIHRoYXQgaXMgdXNlZCB0byBjcmVhdGUgdGhlIHRleHR1cmUuXG4gICAgICpcbiAgICAgKiBUT0RPOiBNYWtlIHRoaXMgYSBzZXR0ZXIgdGhhdCBjYWxscyBsb2FkU291cmNlKCk7XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtJbWFnZXxDYW52YXN9XG4gICAgICogQHJlYWRvbmx5XG4gICAgICovXG4gICAgdGhpcy5zb3VyY2UgPSBudWxsOyAvLyBzZXQgaW4gbG9hZFNvdXJjZSwgaWYgYXQgYWxsXG5cbiAgICAvKipcbiAgICAgKiBDb250cm9scyBpZiBSR0IgY2hhbm5lbHMgc2hvdWxkIGJlIHByZS1tdWx0aXBsaWVkIGJ5IEFscGhhICAoV2ViR0wgb25seSlcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICogQGRlZmF1bHQgdHJ1ZVxuICAgICAqL1xuICAgIHRoaXMucHJlbXVsdGlwbGllZEFscGhhID0gdHJ1ZTtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge3N0cmluZ31cbiAgICAgKi9cbiAgICB0aGlzLmltYWdlVXJsID0gbnVsbDtcblxuICAgIC8qKlxuICAgICAqIFdldGhlciBvciBub3QgdGhlIHRleHR1cmUgaXMgYSBwb3dlciBvZiB0d28sIHRyeSB0byB1c2UgcG93ZXIgb2YgdHdvIHRleHR1cmVzIGFzIG11Y2ggYXMgeW91IGNhblxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLmlzUG93ZXJPZlR3byA9IGZhbHNlO1xuXG4gICAgLy8gdXNlZCBmb3Igd2ViR0xcblxuICAgIC8qKlxuICAgICAqXG4gICAgICogU2V0IHRoaXMgdG8gdHJ1ZSBpZiBhIG1pcG1hcCBvZiB0aGlzIHRleHR1cmUgbmVlZHMgdG8gYmUgZ2VuZXJhdGVkLiBUaGlzIHZhbHVlIG5lZWRzIHRvIGJlIHNldCBiZWZvcmUgdGhlIHRleHR1cmUgaXMgdXNlZFxuICAgICAqIEFsc28gdGhlIHRleHR1cmUgbXVzdCBiZSBhIHBvd2VyIG9mIHR3byBzaXplIHRvIHdvcmtcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICovXG4gICAgdGhpcy5taXBtYXAgPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIEEgbWFwIG9mIHJlbmRlcmVyIElEcyB0byB3ZWJnbCB0ZXh0dXJlc1xuICAgICAqXG4gICAgICogQG1lbWJlciB7b2JqZWN0PG51bWJlciwgV2ViR0xUZXh0dXJlPn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX2dsVGV4dHVyZXMgPSB7fTtcbiAgICB0aGlzLl9hY3RpdmUgPSBmYWxzZTtcbiAgICB0aGlzLl9pZCA9IDA7XG4gICAgXG4gICAgLy8gaWYgbm8gc291cmNlIHBhc3NlZCBkb24ndCB0cnkgdG8gbG9hZFxuICAgIGlmIChzb3VyY2UpXG4gICAge1xuICAgICAgICB0aGlzLmxvYWRTb3VyY2Uoc291cmNlKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBGaXJlZCB3aGVuIGEgbm90LWltbWVkaWF0ZWx5LWF2YWlsYWJsZSBzb3VyY2UgZmluaXNoZXMgbG9hZGluZy5cbiAgICAgKlxuICAgICAqIEBldmVudCBsb2FkZWRcbiAgICAgKiBAbWVtYmVyb2YgUElYSS5CYXNlVGV4dHVyZSNcbiAgICAgKiBAcHJvdGVjdGVkXG4gICAgICovXG5cbiAgICAvKipcbiAgICAgKiBGaXJlZCB3aGVuIGEgbm90LWltbWVkaWF0ZWx5LWF2YWlsYWJsZSBzb3VyY2UgZmFpbHMgdG8gbG9hZC5cbiAgICAgKlxuICAgICAqIEBldmVudCBlcnJvclxuICAgICAqIEBtZW1iZXJvZiBQSVhJLkJhc2VUZXh0dXJlI1xuICAgICAqIEBwcm90ZWN0ZWRcbiAgICAgKi9cbn1cblxuQmFzZVRleHR1cmUucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShFdmVudEVtaXR0ZXIucHJvdG90eXBlKTtcbkJhc2VUZXh0dXJlLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IEJhc2VUZXh0dXJlO1xubW9kdWxlLmV4cG9ydHMgPSBCYXNlVGV4dHVyZTtcblxuLyoqXG4gKiBVcGRhdGVzIHRoZSB0ZXh0dXJlIG9uIGFsbCB0aGUgd2ViZ2wgcmVuZGVyZXJzLCB0aGlzIGFsc28gYXNzdW1lcyB0aGUgc3JjIGhhcyBjaGFuZ2VkLlxuICpcbiAqIEBmaXJlcyB1cGRhdGVcbiAqL1xuQmFzZVRleHR1cmUucHJvdG90eXBlLnVwZGF0ZSA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy5yZWFsV2lkdGggPSB0aGlzLnNvdXJjZS5uYXR1cmFsV2lkdGggfHwgdGhpcy5zb3VyY2Uud2lkdGg7XG4gICAgdGhpcy5yZWFsSGVpZ2h0ID0gdGhpcy5zb3VyY2UubmF0dXJhbEhlaWdodCB8fCB0aGlzLnNvdXJjZS5oZWlnaHQ7XG5cbiAgICB0aGlzLndpZHRoID0gdGhpcy5yZWFsV2lkdGggLyB0aGlzLnJlc29sdXRpb247XG4gICAgdGhpcy5oZWlnaHQgPSB0aGlzLnJlYWxIZWlnaHQgLyB0aGlzLnJlc29sdXRpb247XG5cbiAgICB0aGlzLmlzUG93ZXJPZlR3byA9IHV0aWxzLmlzUG93ZXJPZlR3byh0aGlzLnJlYWxXaWR0aCwgdGhpcy5yZWFsSGVpZ2h0KTtcblxuICAgIHRoaXMuZW1pdCgndXBkYXRlJywgdGhpcyk7XG59O1xuXG4vKipcbiAqIExvYWQgYSBzb3VyY2UuXG4gKlxuICogSWYgdGhlIHNvdXJjZSBpcyBub3QtaW1tZWRpYXRlbHktYXZhaWxhYmxlLCBzdWNoIGFzIGFuIGltYWdlIHRoYXQgbmVlZHMgdG8gYmVcbiAqIGRvd25sb2FkZWQsIHRoZW4gdGhlICdsb2FkZWQnIG9yICdlcnJvcicgZXZlbnQgd2lsbCBiZSBkaXNwYXRjaGVkIGluIHRoZSBmdXR1cmVcbiAqIGFuZCBgaGFzTG9hZGVkYCB3aWxsIHJlbWFpbiBmYWxzZSBhZnRlciB0aGlzIGNhbGwuXG4gKlxuICogVGhlIGxvZ2ljIHN0YXRlIGFmdGVyIGNhbGxpbmcgYGxvYWRTb3VyY2VgIGRpcmVjdGx5IG9yIGluZGlyZWN0bHkgKGVnLiBgZnJvbUltYWdlYCwgYG5ldyBCYXNlVGV4dHVyZWApIGlzOlxuICpcbiAqICAgICBpZiAodGV4dHVyZS5oYXNMb2FkZWQpXG4ge1xuICogICAgICAgIC8vIHRleHR1cmUgcmVhZHkgZm9yIHVzZVxuICogICAgIH0gZWxzZSBpZiAodGV4dHVyZS5pc0xvYWRpbmcpXG4ge1xuICogICAgICAgIC8vIGxpc3RlbiB0byAnbG9hZGVkJyBhbmQvb3IgJ2Vycm9yJyBldmVudHMgb24gdGV4dHVyZVxuICogICAgIH0gZWxzZSB7XG4gKiAgICAgICAgLy8gbm90IGxvYWRpbmcsIG5vdCBnb2luZyB0byBsb2FkIFVOTEVTUyB0aGUgc291cmNlIGlzIHJlbG9hZGVkXG4gKiAgICAgICAgLy8gKGl0IG1heSBzdGlsbCBtYWtlIHNlbnNlIHRvIGxpc3RlbiB0byB0aGUgZXZlbnRzKVxuICogICAgIH1cbiAqXG4gKiBAcHJvdGVjdGVkXG4gKiBAcGFyYW0gc291cmNlIHtJbWFnZXxDYW52YXN9IHRoZSBzb3VyY2Ugb2JqZWN0IG9mIHRoZSB0ZXh0dXJlLlxuICovXG5CYXNlVGV4dHVyZS5wcm90b3R5cGUubG9hZFNvdXJjZSA9IGZ1bmN0aW9uIChzb3VyY2UpXG57XG4gICAgdmFyIHdhc0xvYWRpbmcgPSB0aGlzLmlzTG9hZGluZztcbiAgICB0aGlzLmhhc0xvYWRlZCA9IGZhbHNlO1xuICAgIHRoaXMuaXNMb2FkaW5nID0gZmFsc2U7XG5cbiAgICBpZiAod2FzTG9hZGluZyAmJiB0aGlzLnNvdXJjZSlcbiAgICB7XG4gICAgICAgIHRoaXMuc291cmNlLm9ubG9hZCA9IG51bGw7XG4gICAgICAgIHRoaXMuc291cmNlLm9uZXJyb3IgPSBudWxsO1xuICAgIH1cblxuICAgIHRoaXMuc291cmNlID0gc291cmNlO1xuXG4gICAgLy8gQXBwbHkgc291cmNlIGlmIGxvYWRlZC4gT3RoZXJ3aXNlIHNldHVwIGFwcHJvcHJpYXRlIGxvYWRpbmcgbW9uaXRvcnMuXG4gICAgaWYgKCh0aGlzLnNvdXJjZS5jb21wbGV0ZSB8fCB0aGlzLnNvdXJjZS5nZXRDb250ZXh0KSAmJiB0aGlzLnNvdXJjZS53aWR0aCAmJiB0aGlzLnNvdXJjZS5oZWlnaHQpXG4gICAge1xuICAgICAgICB0aGlzLl9zb3VyY2VMb2FkZWQoKTtcbiAgICB9XG4gICAgZWxzZSBpZiAoIXNvdXJjZS5nZXRDb250ZXh0KVxuICAgIHtcblxuICAgICAgICAvLyBJbWFnZSBmYWlsIC8gbm90IHJlYWR5XG4gICAgICAgIHRoaXMuaXNMb2FkaW5nID0gdHJ1ZTtcblxuICAgICAgICB2YXIgc2NvcGUgPSB0aGlzO1xuXG4gICAgICAgIHNvdXJjZS5vbmxvYWQgPSBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICBzb3VyY2Uub25sb2FkID0gbnVsbDtcbiAgICAgICAgICAgIHNvdXJjZS5vbmVycm9yID0gbnVsbDtcblxuICAgICAgICAgICAgaWYgKCFzY29wZS5pc0xvYWRpbmcpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBzY29wZS5pc0xvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgICAgIHNjb3BlLl9zb3VyY2VMb2FkZWQoKTtcblxuICAgICAgICAgICAgc2NvcGUuZW1pdCgnbG9hZGVkJywgc2NvcGUpO1xuICAgICAgICB9O1xuXG4gICAgICAgIHNvdXJjZS5vbmVycm9yID0gZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgc291cmNlLm9ubG9hZCA9IG51bGw7XG4gICAgICAgICAgICBzb3VyY2Uub25lcnJvciA9IG51bGw7XG5cbiAgICAgICAgICAgIGlmICghc2NvcGUuaXNMb2FkaW5nKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgc2NvcGUuaXNMb2FkaW5nID0gZmFsc2U7XG4gICAgICAgICAgICBzY29wZS5lbWl0KCdlcnJvcicsIHNjb3BlKTtcbiAgICAgICAgfTtcblxuICAgICAgICAvLyBQZXIgaHR0cDovL3d3dy53My5vcmcvVFIvaHRtbDUvZW1iZWRkZWQtY29udGVudC0wLmh0bWwjdGhlLWltZy1lbGVtZW50XG4gICAgICAgIC8vICAgXCJUaGUgdmFsdWUgb2YgYGNvbXBsZXRlYCBjYW4gdGh1cyBjaGFuZ2Ugd2hpbGUgYSBzY3JpcHQgaXMgZXhlY3V0aW5nLlwiXG4gICAgICAgIC8vIFNvIGNvbXBsZXRlIG5lZWRzIHRvIGJlIHJlLWNoZWNrZWQgYWZ0ZXIgdGhlIGNhbGxiYWNrcyBoYXZlIGJlZW4gYWRkZWQuLlxuICAgICAgICAvLyBOT1RFOiBjb21wbGV0ZSB3aWxsIGJlIHRydWUgaWYgdGhlIGltYWdlIGhhcyBubyBzcmMgc28gYmVzdCB0byBjaGVjayBpZiB0aGUgc3JjIGlzIHNldC5cbiAgICAgICAgaWYgKHNvdXJjZS5jb21wbGV0ZSAmJiBzb3VyY2Uuc3JjKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmlzTG9hZGluZyA9IGZhbHNlO1xuXG4gICAgICAgICAgICAvLyAuLmFuZCBpZiB3ZSdyZSBjb21wbGV0ZSBub3csIG5vIG5lZWQgZm9yIGNhbGxiYWNrc1xuICAgICAgICAgICAgc291cmNlLm9ubG9hZCA9IG51bGw7XG4gICAgICAgICAgICBzb3VyY2Uub25lcnJvciA9IG51bGw7XG5cbiAgICAgICAgICAgIGlmIChzb3VyY2Uud2lkdGggJiYgc291cmNlLmhlaWdodClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9zb3VyY2VMb2FkZWQoKTtcblxuICAgICAgICAgICAgICAgIC8vIElmIGFueSBwcmV2aW91cyBzdWJzY3JpYmVycyBwb3NzaWJsZVxuICAgICAgICAgICAgICAgIGlmICh3YXNMb2FkaW5nKVxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5lbWl0KCdsb2FkZWQnLCB0aGlzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgLy8gSWYgYW55IHByZXZpb3VzIHN1YnNjcmliZXJzIHBvc3NpYmxlXG4gICAgICAgICAgICAgICAgaWYgKHdhc0xvYWRpbmcpXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmVtaXQoJ2Vycm9yJywgdGhpcyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxufTtcblxuLyoqXG4gKiBVc2VkIGludGVybmFsbHkgdG8gdXBkYXRlIHRoZSB3aWR0aCwgaGVpZ2h0LCBhbmQgc29tZSBvdGhlciB0cmFja2luZyB2YXJzIG9uY2VcbiAqIGEgc291cmNlIGhhcyBzdWNjZXNzZnVsbHkgbG9hZGVkLlxuICpcbiAqIEBwcml2YXRlXG4gKi9cbkJhc2VUZXh0dXJlLnByb3RvdHlwZS5fc291cmNlTG9hZGVkID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLmhhc0xvYWRlZCA9IHRydWU7XG4gICAgdGhpcy51cGRhdGUoKTtcbn07XG5cbi8qKlxuICogRGVzdHJveXMgdGhpcyBiYXNlIHRleHR1cmVcbiAqXG4gKi9cbkJhc2VUZXh0dXJlLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKClcbntcbiAgICBpZiAodGhpcy5pbWFnZVVybClcbiAgICB7XG4gICAgICAgIGRlbGV0ZSB1dGlscy5CYXNlVGV4dHVyZUNhY2hlW3RoaXMuaW1hZ2VVcmxdO1xuICAgICAgICBkZWxldGUgdXRpbHMuVGV4dHVyZUNhY2hlW3RoaXMuaW1hZ2VVcmxdO1xuXG4gICAgICAgIHRoaXMuaW1hZ2VVcmwgPSBudWxsO1xuXG4gICAgICAgIGlmICghbmF2aWdhdG9yLmlzQ29jb29uSlMpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuc291cmNlLnNyYyA9ICcnO1xuICAgICAgICB9XG4gICAgfVxuICAgIGVsc2UgaWYgKHRoaXMuc291cmNlICYmIHRoaXMuc291cmNlLl9waXhpSWQpXG4gICAge1xuICAgICAgICBkZWxldGUgdXRpbHMuQmFzZVRleHR1cmVDYWNoZVt0aGlzLnNvdXJjZS5fcGl4aUlkXTtcbiAgICB9XG5cbiAgICB0aGlzLnNvdXJjZSA9IG51bGw7XG5cbiAgICB0aGlzLmRpc3Bvc2UoKTtcbn07XG5cbi8qKlxuICogRnJlZXMgdGhlIHRleHR1cmUgZnJvbSBXZWJHTCBtZW1vcnkgd2l0aG91dCBkZXN0cm95aW5nIHRoaXMgdGV4dHVyZSBvYmplY3QuXG4gKiBUaGlzIG1lYW5zIHlvdSBjYW4gc3RpbGwgdXNlIHRoZSB0ZXh0dXJlIGxhdGVyIHdoaWNoIHdpbGwgdXBsb2FkIGl0IHRvIEdQVVxuICogbWVtb3J5IGFnYWluLlxuICpcbiAqL1xuQmFzZVRleHR1cmUucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKVxue1xuICAgIHRoaXMuZW1pdCgnZGlzcG9zZScsIHRoaXMpO1xuXG4gICAgLy8gdGhpcyBzaG91bGQgbm8gbG9uZ2VyIGJlIG5lZWRlZCwgdGhlIHJlbmRlcmVycyBzaG91bGQgY2xlYW51cCBhbGwgdGhlIGdsIHRleHR1cmVzLlxuICAgIC8vIHRoaXMuX2dsVGV4dHVyZXMgPSB7fTtcbn07XG5cbi8qKlxuICogQ2hhbmdlcyB0aGUgc291cmNlIGltYWdlIG9mIHRoZSB0ZXh0dXJlLlxuICogVGhlIG9yaWdpbmFsIHNvdXJjZSBtdXN0IGJlIGFuIEltYWdlIGVsZW1lbnQuXG4gKlxuICogQHBhcmFtIG5ld1NyYyB7c3RyaW5nfSB0aGUgcGF0aCBvZiB0aGUgaW1hZ2VcbiAqL1xuQmFzZVRleHR1cmUucHJvdG90eXBlLnVwZGF0ZVNvdXJjZUltYWdlID0gZnVuY3Rpb24gKG5ld1NyYylcbntcbiAgICB0aGlzLnNvdXJjZS5zcmMgPSBuZXdTcmM7XG5cbiAgICB0aGlzLmxvYWRTb3VyY2UodGhpcy5zb3VyY2UpO1xufTtcblxuLyoqXG4gKiBIZWxwZXIgZnVuY3Rpb24gdGhhdCBjcmVhdGVzIGEgYmFzZSB0ZXh0dXJlIGZyb20gdGhlIGdpdmVuIGltYWdlIHVybC5cbiAqIElmIHRoZSBpbWFnZSBpcyBub3QgaW4gdGhlIGJhc2UgdGV4dHVyZSBjYWNoZSBpdCB3aWxsIGJlIGNyZWF0ZWQgYW5kIGxvYWRlZC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAcGFyYW0gaW1hZ2VVcmwge3N0cmluZ30gVGhlIGltYWdlIHVybCBvZiB0aGUgdGV4dHVyZVxuICogQHBhcmFtIFtjcm9zc29yaWdpbj0oYXV0byldIHtib29sZWFufSBTaG91bGQgdXNlIGFub255bW91cyBDT1JTPyBEZWZhdWx0cyB0byB0cnVlIGlmIHRoZSBVUkwgaXMgbm90IGEgZGF0YS1VUkkuXG4gKiBAcGFyYW0gW3NjYWxlTW9kZT1QSVhJLlNDQUxFX01PREVTLkRFRkFVTFRdIHtudW1iZXJ9IFNlZSB7QGxpbmsgUElYSS5TQ0FMRV9NT0RFU30gZm9yIHBvc3NpYmxlIHZhbHVlc1xuICogQHJldHVybiBQSVhJLkJhc2VUZXh0dXJlXG4gKi9cbkJhc2VUZXh0dXJlLmZyb21JbWFnZSA9IGZ1bmN0aW9uIChpbWFnZVVybCwgY3Jvc3NvcmlnaW4sIHNjYWxlTW9kZSlcbntcbiAgICB2YXIgYmFzZVRleHR1cmUgPSB1dGlscy5CYXNlVGV4dHVyZUNhY2hlW2ltYWdlVXJsXTtcblxuICAgIGlmIChjcm9zc29yaWdpbiA9PT0gdW5kZWZpbmVkICYmIGltYWdlVXJsLmluZGV4T2YoJ2RhdGE6JykgIT09IDApXG4gICAge1xuICAgICAgICBjcm9zc29yaWdpbiA9IHRydWU7XG4gICAgfVxuXG4gICAgaWYgKCFiYXNlVGV4dHVyZSlcbiAgICB7XG4gICAgICAgIC8vIG5ldyBJbWFnZSgpIGJyZWFrcyB0ZXggbG9hZGluZyBpbiBzb21lIHZlcnNpb25zIG9mIENocm9tZS5cbiAgICAgICAgLy8gU2VlIGh0dHBzOi8vY29kZS5nb29nbGUuY29tL3AvY2hyb21pdW0vaXNzdWVzL2RldGFpbD9pZD0yMzgwNzFcbiAgICAgICAgdmFyIGltYWdlID0gbmV3IEltYWdlKCk7Ly9kb2N1bWVudC5jcmVhdGVFbGVtZW50KCdpbWcnKTtcbiAgICAgICAgaWYgKGNyb3Nzb3JpZ2luKVxuICAgICAgICB7XG4gICAgICAgICAgICBpbWFnZS5jcm9zc09yaWdpbiA9ICcnO1xuICAgICAgICB9XG5cbiAgICAgICAgYmFzZVRleHR1cmUgPSBuZXcgQmFzZVRleHR1cmUoaW1hZ2UsIHNjYWxlTW9kZSk7XG4gICAgICAgIGJhc2VUZXh0dXJlLmltYWdlVXJsID0gaW1hZ2VVcmw7XG5cbiAgICAgICAgaW1hZ2Uuc3JjID0gaW1hZ2VVcmw7XG5cbiAgICAgICAgdXRpbHMuQmFzZVRleHR1cmVDYWNoZVtpbWFnZVVybF0gPSBiYXNlVGV4dHVyZTtcblxuICAgICAgICAvLyBpZiB0aGVyZSBpcyBhbiBAMnggYXQgdGhlIGVuZCBvZiB0aGUgdXJsIHdlIGFyZSBnb2luZyB0byBhc3N1bWUgaXRzIGEgaGlnaHJlcyBpbWFnZVxuICAgICAgICBiYXNlVGV4dHVyZS5yZXNvbHV0aW9uID0gdXRpbHMuZ2V0UmVzb2x1dGlvbk9mVXJsKGltYWdlVXJsKTtcbiAgICB9XG5cbiAgICByZXR1cm4gYmFzZVRleHR1cmU7XG59O1xuXG4vKipcbiAqIEhlbHBlciBmdW5jdGlvbiB0aGF0IGNyZWF0ZXMgYSBiYXNlIHRleHR1cmUgZnJvbSB0aGUgZ2l2ZW4gY2FudmFzIGVsZW1lbnQuXG4gKlxuICogQHN0YXRpY1xuICogQHBhcmFtIGNhbnZhcyB7Q2FudmFzfSBUaGUgY2FudmFzIGVsZW1lbnQgc291cmNlIG9mIHRoZSB0ZXh0dXJlXG4gKiBAcGFyYW0gc2NhbGVNb2RlIHtudW1iZXJ9IFNlZSB7QGxpbmsgUElYSS5TQ0FMRV9NT0RFU30gZm9yIHBvc3NpYmxlIHZhbHVlc1xuICogQHJldHVybiBQSVhJLkJhc2VUZXh0dXJlXG4gKi9cbkJhc2VUZXh0dXJlLmZyb21DYW52YXMgPSBmdW5jdGlvbiAoY2FudmFzLCBzY2FsZU1vZGUpXG57XG4gICAgaWYgKCFjYW52YXMuX3BpeGlJZClcbiAgICB7XG4gICAgICAgIGNhbnZhcy5fcGl4aUlkID0gJ2NhbnZhc18nICsgdXRpbHMudWlkKCk7XG4gICAgfVxuXG4gICAgdmFyIGJhc2VUZXh0dXJlID0gdXRpbHMuQmFzZVRleHR1cmVDYWNoZVtjYW52YXMuX3BpeGlJZF07XG5cbiAgICBpZiAoIWJhc2VUZXh0dXJlKVxuICAgIHtcbiAgICAgICAgYmFzZVRleHR1cmUgPSBuZXcgQmFzZVRleHR1cmUoY2FudmFzLCBzY2FsZU1vZGUpO1xuICAgICAgICB1dGlscy5CYXNlVGV4dHVyZUNhY2hlW2NhbnZhcy5fcGl4aUlkXSA9IGJhc2VUZXh0dXJlO1xuICAgIH1cblxuICAgIHJldHVybiBiYXNlVGV4dHVyZTtcbn07XG4iLCJ2YXIgQmFzZVRleHR1cmUgPSByZXF1aXJlKCcuL0Jhc2VUZXh0dXJlJyksXG4gICAgVGV4dHVyZSA9IHJlcXVpcmUoJy4vVGV4dHVyZScpLFxuICAgIFJlbmRlclRhcmdldCA9IHJlcXVpcmUoJy4uL3JlbmRlcmVycy93ZWJnbC91dGlscy9SZW5kZXJUYXJnZXQnKSxcbiAgICBGaWx0ZXJNYW5hZ2VyID0gcmVxdWlyZSgnLi4vcmVuZGVyZXJzL3dlYmdsL21hbmFnZXJzL0ZpbHRlck1hbmFnZXInKSxcbiAgICBDYW52YXNCdWZmZXIgPSByZXF1aXJlKCcuLi9yZW5kZXJlcnMvY2FudmFzL3V0aWxzL0NhbnZhc0J1ZmZlcicpLFxuICAgIG1hdGggPSByZXF1aXJlKCcuLi9tYXRoJyksXG4gICAgQ09OU1QgPSByZXF1aXJlKCcuLi9jb25zdCcpLFxuICAgIHRlbXBNYXRyaXggPSBuZXcgbWF0aC5NYXRyaXgoKTtcblxuLyoqXG4gKiBBIFJlbmRlclRleHR1cmUgaXMgYSBzcGVjaWFsIHRleHR1cmUgdGhhdCBhbGxvd3MgYW55IFBpeGkgZGlzcGxheSBvYmplY3QgdG8gYmUgcmVuZGVyZWQgdG8gaXQuXG4gKlxuICogX19IaW50X186IEFsbCBEaXNwbGF5T2JqZWN0cyAoaS5lLiBTcHJpdGVzKSB0aGF0IHJlbmRlciB0byBhIFJlbmRlclRleHR1cmUgc2hvdWxkIGJlIHByZWxvYWRlZFxuICogb3RoZXJ3aXNlIGJsYWNrIHJlY3RhbmdsZXMgd2lsbCBiZSBkcmF3biBpbnN0ZWFkLlxuICpcbiAqIEEgUmVuZGVyVGV4dHVyZSB0YWtlcyBhIHNuYXBzaG90IG9mIGFueSBEaXNwbGF5IE9iamVjdCBnaXZlbiB0byBpdHMgcmVuZGVyIG1ldGhvZC4gVGhlIHBvc2l0aW9uXG4gKiBhbmQgcm90YXRpb24gb2YgdGhlIGdpdmVuIERpc3BsYXkgT2JqZWN0cyBpcyBpZ25vcmVkLiBGb3IgZXhhbXBsZTpcbiAqXG4gKiBgYGBqc1xuICogdmFyIHJlbmRlcmVyID0gUElYSS5hdXRvRGV0ZWN0UmVuZGVyZXIoMTAyNCwgMTAyNCwgeyB2aWV3OiBjYW52YXMsIHJhdGlvOiAxIH0pO1xuICogdmFyIHJlbmRlclRleHR1cmUgPSBuZXcgUElYSS5SZW5kZXJUZXh0dXJlKHJlbmRlcmVyLCA4MDAsIDYwMCk7XG4gKiB2YXIgc3ByaXRlID0gUElYSS5TcHJpdGUuZnJvbUltYWdlKFwic3Bpbk9ial8wMS5wbmdcIik7XG4gKlxuICogc3ByaXRlLnBvc2l0aW9uLnggPSA4MDAvMjtcbiAqIHNwcml0ZS5wb3NpdGlvbi55ID0gNjAwLzI7XG4gKiBzcHJpdGUuYW5jaG9yLnggPSAwLjU7XG4gKiBzcHJpdGUuYW5jaG9yLnkgPSAwLjU7XG4gKlxuICogcmVuZGVyVGV4dHVyZS5yZW5kZXIoc3ByaXRlKTtcbiAqIGBgYFxuICpcbiAqIFRoZSBTcHJpdGUgaW4gdGhpcyBjYXNlIHdpbGwgYmUgcmVuZGVyZWQgdG8gYSBwb3NpdGlvbiBvZiAwLDAuIFRvIHJlbmRlciB0aGlzIHNwcml0ZSBhdCBpdHMgYWN0dWFsXG4gKiBwb3NpdGlvbiBhIENvbnRhaW5lciBzaG91bGQgYmUgdXNlZDpcbiAqXG4gKiBgYGBqc1xuICogdmFyIGRvYyA9IG5ldyBQSVhJLkNvbnRhaW5lcigpO1xuICpcbiAqIGRvYy5hZGRDaGlsZChzcHJpdGUpO1xuICpcbiAqIHJlbmRlclRleHR1cmUucmVuZGVyKGRvYyk7ICAvLyBSZW5kZXJzIHRvIGNlbnRlciBvZiByZW5kZXJUZXh0dXJlXG4gKiBgYGBcbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuVGV4dHVyZVxuICogQG1lbWJlcm9mIFBJWElcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5DYW52YXNSZW5kZXJlcnxQSVhJLldlYkdMUmVuZGVyZXJ9IFRoZSByZW5kZXJlciB1c2VkIGZvciB0aGlzIFJlbmRlclRleHR1cmVcbiAqIEBwYXJhbSBbd2lkdGg9MTAwXSB7bnVtYmVyfSBUaGUgd2lkdGggb2YgdGhlIHJlbmRlciB0ZXh0dXJlXG4gKiBAcGFyYW0gW2hlaWdodD0xMDBdIHtudW1iZXJ9IFRoZSBoZWlnaHQgb2YgdGhlIHJlbmRlciB0ZXh0dXJlXG4gKiBAcGFyYW0gW3NjYWxlTW9kZV0ge251bWJlcn0gU2VlIHtAbGluayBQSVhJLlNDQUxFX01PREVTfSBmb3IgcG9zc2libGUgdmFsdWVzXG4gKiBAcGFyYW0gW3Jlc29sdXRpb249MV0ge251bWJlcn0gVGhlIHJlc29sdXRpb24gb2YgdGhlIHRleHR1cmUgYmVpbmcgZ2VuZXJhdGVkXG4gKi9cbmZ1bmN0aW9uIFJlbmRlclRleHR1cmUocmVuZGVyZXIsIHdpZHRoLCBoZWlnaHQsIHNjYWxlTW9kZSwgcmVzb2x1dGlvbilcbntcbiAgICBpZiAoIXJlbmRlcmVyKVxuICAgIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdVbmFibGUgdG8gY3JlYXRlIFJlbmRlclRleHR1cmUsIHlvdSBtdXN0IHBhc3MgYSByZW5kZXJlciBpbnRvIHRoZSBjb25zdHJ1Y3Rvci4nKTtcbiAgICB9XG5cbiAgICB3aWR0aCA9IHdpZHRoIHx8IDEwMDtcbiAgICBoZWlnaHQgPSBoZWlnaHQgfHwgMTAwO1xuICAgIHJlc29sdXRpb24gPSByZXNvbHV0aW9uIHx8IENPTlNULlJFU09MVVRJT047XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYmFzZSB0ZXh0dXJlIG9iamVjdCB0aGF0IHRoaXMgdGV4dHVyZSB1c2VzXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtCYXNlVGV4dHVyZX1cbiAgICAgKi9cbiAgICB2YXIgYmFzZVRleHR1cmUgPSBuZXcgQmFzZVRleHR1cmUoKTtcbiAgICBiYXNlVGV4dHVyZS53aWR0aCA9IHdpZHRoO1xuICAgIGJhc2VUZXh0dXJlLmhlaWdodCA9IGhlaWdodDtcbiAgICBiYXNlVGV4dHVyZS5yZXNvbHV0aW9uID0gcmVzb2x1dGlvbjtcbiAgICBiYXNlVGV4dHVyZS5zY2FsZU1vZGUgPSBzY2FsZU1vZGUgfHwgQ09OU1QuU0NBTEVfTU9ERVMuREVGQVVMVDtcbiAgICBiYXNlVGV4dHVyZS5oYXNMb2FkZWQgPSB0cnVlO1xuXG5cbiAgICBUZXh0dXJlLmNhbGwodGhpcyxcbiAgICAgICAgYmFzZVRleHR1cmUsXG4gICAgICAgIG5ldyBtYXRoLlJlY3RhbmdsZSgwLCAwLCB3aWR0aCwgaGVpZ2h0KVxuICAgICk7XG5cblxuICAgIC8qKlxuICAgICAqIFRoZSB3aXRoIG9mIHRoZSByZW5kZXIgdGV4dHVyZVxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMud2lkdGggPSB3aWR0aDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBoZWlnaHQgb2YgdGhlIHJlbmRlciB0ZXh0dXJlXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy5oZWlnaHQgPSBoZWlnaHQ7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgUmVzb2x1dGlvbiBvZiB0aGUgdGV4dHVyZS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLnJlc29sdXRpb24gPSByZXNvbHV0aW9uO1xuXG4gICAgLyoqXG4gICAgICogRHJhdy9yZW5kZXIgdGhlIGdpdmVuIERpc3BsYXlPYmplY3Qgb250byB0aGUgdGV4dHVyZS5cbiAgICAgKlxuICAgICAqIFRoZSBkaXNwbGF5T2JqZWN0IGFuZCBkZXNjZW5kZW50cyBhcmUgdHJhbnNmb3JtZWQgZHVyaW5nIHRoaXMgb3BlcmF0aW9uLlxuICAgICAqIElmIGB1cGRhdGVUcmFuc2Zvcm1gIGlzIHRydWUgdGhlbiB0aGUgdHJhbnNmb3JtYXRpb25zIHdpbGwgYmUgcmVzdG9yZWQgYmVmb3JlIHRoZVxuICAgICAqIG1ldGhvZCByZXR1cm5zLiBPdGhlcndpc2UgaXQgaXMgdXAgdG8gdGhlIGNhbGxpbmcgY29kZSB0byBjb3JyZWN0bHkgdXNlIG9yIHJlc2V0XG4gICAgICogdGhlIHRyYW5zZm9ybWVkIGRpc3BsYXkgb2JqZWN0cy5cbiAgICAgKlxuICAgICAqIFRoZSBkaXNwbGF5IG9iamVjdCBpcyBhbHdheXMgcmVuZGVyZWQgd2l0aCBhIHdvcmxkQWxwaGEgdmFsdWUgb2YgMS5cbiAgICAgKlxuICAgICAqIEBtZXRob2RcbiAgICAgKiBAcGFyYW0gZGlzcGxheU9iamVjdCB7UElYSS5EaXNwbGF5T2JqZWN0fSBUaGUgZGlzcGxheSBvYmplY3QgdG8gcmVuZGVyIHRoaXMgdGV4dHVyZSBvblxuICAgICAqIEBwYXJhbSBbbWF0cml4XSB7UElYSS5NYXRyaXh9IE9wdGlvbmFsIG1hdHJpeCB0byBhcHBseSB0byB0aGUgZGlzcGxheSBvYmplY3QgYmVmb3JlIHJlbmRlcmluZy5cbiAgICAgKiBAcGFyYW0gW2NsZWFyPWZhbHNlXSB7Ym9vbGVhbn0gSWYgdHJ1ZSB0aGUgdGV4dHVyZSB3aWxsIGJlIGNsZWFyZWQgYmVmb3JlIHRoZSBkaXNwbGF5T2JqZWN0IGlzIGRyYXduXG4gICAgICogQHBhcmFtIFt1cGRhdGVUcmFuc2Zvcm09dHJ1ZV0ge2Jvb2xlYW59IElmIHRydWUgdGhlIGRpc3BsYXlPYmplY3QncyB3b3JsZFRyYW5zZm9ybS93b3JsZEFscGhhIGFuZCBhbGwgY2hpbGRyZW5cbiAgICAgKiAgdHJhbnNmb3JtYXRpb25zIHdpbGwgYmUgcmVzdG9yZWQuIE5vdCByZXN0b3JpbmcgdGhpcyBpbmZvcm1hdGlvbiB3aWxsIGJlIGEgbGl0dGxlIGZhc3Rlci5cbiAgICAgKi9cbiAgICB0aGlzLnJlbmRlciA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgcmVuZGVyZXIgdGhpcyBSZW5kZXJUZXh0dXJlIHVzZXMuIEEgUmVuZGVyVGV4dHVyZSBjYW4gb25seSBiZWxvbmcgdG8gb25lIHJlbmRlcmVyIGF0IHRoZSBtb21lbnQgaWYgaXRzIHdlYkdMLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5DYW52YXNSZW5kZXJlcnxQSVhJLldlYkdMUmVuZGVyZXJ9XG4gICAgICovXG4gICAgdGhpcy5yZW5kZXJlciA9IHJlbmRlcmVyO1xuXG4gICAgaWYgKHRoaXMucmVuZGVyZXIudHlwZSA9PT0gQ09OU1QuUkVOREVSRVJfVFlQRS5XRUJHTClcbiAgICB7XG4gICAgICAgIHZhciBnbCA9IHRoaXMucmVuZGVyZXIuZ2w7XG5cbiAgICAgICAgdGhpcy50ZXh0dXJlQnVmZmVyID0gbmV3IFJlbmRlclRhcmdldChnbCwgdGhpcy53aWR0aCwgdGhpcy5oZWlnaHQsIGJhc2VUZXh0dXJlLnNjYWxlTW9kZSwgdGhpcy5yZXNvbHV0aW9uKTsvLywgdGhpcy5iYXNlVGV4dHVyZS5zY2FsZU1vZGUpO1xuICAgICAgICB0aGlzLmJhc2VUZXh0dXJlLl9nbFRleHR1cmVzW2dsLmlkXSA9IHRoaXMudGV4dHVyZUJ1ZmZlci50ZXh0dXJlO1xuXG4gICAgICAgIC8vVE9ETyByZWZhY3RvciBmaWx0ZXIgbWFuYWdlci4uIGFzIHJlYWxseSBpdHMgbm8gbG9uZ2VyIGEgbWFuYWdlciBpZiB3ZSB1c2UgaXQgaGVyZS4uXG4gICAgICAgIHRoaXMuZmlsdGVyTWFuYWdlciA9IG5ldyBGaWx0ZXJNYW5hZ2VyKHRoaXMucmVuZGVyZXIpO1xuICAgICAgICB0aGlzLmZpbHRlck1hbmFnZXIub25Db250ZXh0Q2hhbmdlKCk7XG4gICAgICAgIHRoaXMuZmlsdGVyTWFuYWdlci5yZXNpemUod2lkdGgsIGhlaWdodCk7XG4gICAgICAgIHRoaXMucmVuZGVyID0gdGhpcy5yZW5kZXJXZWJHTDtcblxuICAgICAgICAvLyB0aGUgY3JlYXRpb24gb2YgYSBmaWx0ZXIgbWFuYWdlciB1bmJpbmRzIHRoZSBidWZmZXJzLi5cbiAgICAgICAgdGhpcy5yZW5kZXJlci5jdXJyZW50UmVuZGVyZXIuc3RhcnQoKTtcbiAgICAgICAgdGhpcy5yZW5kZXJlci5jdXJyZW50UmVuZGVyVGFyZ2V0LmFjdGl2YXRlKCk7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG5cbiAgICAgICAgdGhpcy5yZW5kZXIgPSB0aGlzLnJlbmRlckNhbnZhcztcbiAgICAgICAgdGhpcy50ZXh0dXJlQnVmZmVyID0gbmV3IENhbnZhc0J1ZmZlcih0aGlzLndpZHRoKiB0aGlzLnJlc29sdXRpb24sIHRoaXMuaGVpZ2h0KiB0aGlzLnJlc29sdXRpb24pO1xuICAgICAgICB0aGlzLmJhc2VUZXh0dXJlLnNvdXJjZSA9IHRoaXMudGV4dHVyZUJ1ZmZlci5jYW52YXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKi9cbiAgICB0aGlzLnZhbGlkID0gdHJ1ZTtcblxuICAgIHRoaXMuX3VwZGF0ZVV2cygpO1xufVxuXG5SZW5kZXJUZXh0dXJlLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoVGV4dHVyZS5wcm90b3R5cGUpO1xuUmVuZGVyVGV4dHVyZS5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBSZW5kZXJUZXh0dXJlO1xubW9kdWxlLmV4cG9ydHMgPSBSZW5kZXJUZXh0dXJlO1xuXG4vKipcbiAqIFJlc2l6ZXMgdGhlIFJlbmRlclRleHR1cmUuXG4gKlxuICogQHBhcmFtIHdpZHRoIHtudW1iZXJ9IFRoZSB3aWR0aCB0byByZXNpemUgdG8uXG4gKiBAcGFyYW0gaGVpZ2h0IHtudW1iZXJ9IFRoZSBoZWlnaHQgdG8gcmVzaXplIHRvLlxuICogQHBhcmFtIHVwZGF0ZUJhc2Uge2Jvb2xlYW59IFNob3VsZCB0aGUgYmFzZVRleHR1cmUud2lkdGggYW5kIGhlaWdodCB2YWx1ZXMgYmUgcmVzaXplZCBhcyB3ZWxsP1xuICovXG5SZW5kZXJUZXh0dXJlLnByb3RvdHlwZS5yZXNpemUgPSBmdW5jdGlvbiAod2lkdGgsIGhlaWdodCwgdXBkYXRlQmFzZSlcbntcbiAgICBpZiAod2lkdGggPT09IHRoaXMud2lkdGggJiYgaGVpZ2h0ID09PSB0aGlzLmhlaWdodClcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLnZhbGlkID0gKHdpZHRoID4gMCAmJiBoZWlnaHQgPiAwKTtcblxuICAgIHRoaXMud2lkdGggPSB0aGlzLl9mcmFtZS53aWR0aCA9IHRoaXMuY3JvcC53aWR0aCA9IHdpZHRoO1xuICAgIHRoaXMuaGVpZ2h0ID0gIHRoaXMuX2ZyYW1lLmhlaWdodCA9IHRoaXMuY3JvcC5oZWlnaHQgPSBoZWlnaHQ7XG5cbiAgICBpZiAodXBkYXRlQmFzZSlcbiAgICB7XG4gICAgICAgIHRoaXMuYmFzZVRleHR1cmUud2lkdGggPSB0aGlzLndpZHRoO1xuICAgICAgICB0aGlzLmJhc2VUZXh0dXJlLmhlaWdodCA9IHRoaXMuaGVpZ2h0O1xuICAgIH1cblxuICAgIGlmICghdGhpcy52YWxpZClcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLnRleHR1cmVCdWZmZXIucmVzaXplKHRoaXMud2lkdGgsIHRoaXMuaGVpZ2h0KTtcblxuICAgIGlmKHRoaXMuZmlsdGVyTWFuYWdlcilcbiAgICB7XG4gICAgICAgIHRoaXMuZmlsdGVyTWFuYWdlci5yZXNpemUodGhpcy53aWR0aCwgdGhpcy5oZWlnaHQpO1xuICAgIH1cbn07XG5cbi8qKlxuICogQ2xlYXJzIHRoZSBSZW5kZXJUZXh0dXJlLlxuICpcbiAqL1xuUmVuZGVyVGV4dHVyZS5wcm90b3R5cGUuY2xlYXIgPSBmdW5jdGlvbiAoKVxue1xuICAgIGlmICghdGhpcy52YWxpZClcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5yZW5kZXJlci50eXBlID09PSBDT05TVC5SRU5ERVJFUl9UWVBFLldFQkdMKVxuICAgIHtcbiAgICAgICAgdGhpcy5yZW5kZXJlci5nbC5iaW5kRnJhbWVidWZmZXIodGhpcy5yZW5kZXJlci5nbC5GUkFNRUJVRkZFUiwgdGhpcy50ZXh0dXJlQnVmZmVyLmZyYW1lQnVmZmVyKTtcbiAgICB9XG5cbiAgICB0aGlzLnRleHR1cmVCdWZmZXIuY2xlYXIoKTtcbn07XG5cbi8qKlxuICogSW50ZXJuYWwgbWV0aG9kIGFzc2lnbmVkIHRvIHRoZSBgcmVuZGVyYCBwcm9wZXJ0eSBpZiB1c2luZyBhIENhbnZhc1JlbmRlcmVyLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0gZGlzcGxheU9iamVjdCB7UElYSS5EaXNwbGF5T2JqZWN0fSBUaGUgZGlzcGxheSBvYmplY3QgdG8gcmVuZGVyIHRoaXMgdGV4dHVyZSBvblxuICogQHBhcmFtIFttYXRyaXhdIHtQSVhJLk1hdHJpeH0gT3B0aW9uYWwgbWF0cml4IHRvIGFwcGx5IHRvIHRoZSBkaXNwbGF5IG9iamVjdCBiZWZvcmUgcmVuZGVyaW5nLlxuICogQHBhcmFtIFtjbGVhcj1mYWxzZV0ge2Jvb2xlYW59IElmIHRydWUgdGhlIHRleHR1cmUgd2lsbCBiZSBjbGVhcmVkIGJlZm9yZSB0aGUgZGlzcGxheU9iamVjdCBpcyBkcmF3blxuICogQHBhcmFtIFt1cGRhdGVUcmFuc2Zvcm09dHJ1ZV0ge2Jvb2xlYW59IElmIHRydWUgdGhlIGRpc3BsYXlPYmplY3QncyB3b3JsZFRyYW5zZm9ybS93b3JsZEFscGhhIGFuZCBhbGwgY2hpbGRyZW5cbiAqICB0cmFuc2Zvcm1hdGlvbnMgd2lsbCBiZSByZXN0b3JlZC4gTm90IHJlc3RvcmluZyB0aGlzIGluZm9ybWF0aW9uIHdpbGwgYmUgYSBsaXR0bGUgZmFzdGVyLlxuICovXG5SZW5kZXJUZXh0dXJlLnByb3RvdHlwZS5yZW5kZXJXZWJHTCA9IGZ1bmN0aW9uIChkaXNwbGF5T2JqZWN0LCBtYXRyaXgsIGNsZWFyLCB1cGRhdGVUcmFuc2Zvcm0pXG57XG4gICAgaWYgKCF0aGlzLnZhbGlkKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuXG4gICAgdXBkYXRlVHJhbnNmb3JtID0gKHVwZGF0ZVRyYW5zZm9ybSAhPT0gdW5kZWZpbmVkKSA/IHVwZGF0ZVRyYW5zZm9ybSA6IHRydWU7Ly8hdXBkYXRlVHJhbnNmb3JtO1xuXG4gICAgdGhpcy50ZXh0dXJlQnVmZmVyLnRyYW5zZm9ybSA9IG1hdHJpeDtcblxuICAgIC8vVE9ETyBub3QgYSBmYW4gdGhhdCB0aGlzIGlzIGhlcmUuLi4gaXQgd2lsbCBtb3ZlIVxuICAgIHRoaXMudGV4dHVyZUJ1ZmZlci5hY3RpdmF0ZSgpO1xuXG4gICAgLy8gc2V0V29ybGQgQWxwaGEgdG8gZW5zdXJlIHRoYXQgdGhlIG9iamVjdCBpcyByZW5kZXJlciBhdCBmdWxsIG9wYWNpdHlcbiAgICBkaXNwbGF5T2JqZWN0LndvcmxkQWxwaGEgPSAxO1xuXG4gICAgaWYgKHVwZGF0ZVRyYW5zZm9ybSlcbiAgICB7XG5cbiAgICAgICAgLy8gcmVzZXQgdGhlIG1hdHJpeCBvZiB0aGUgZGlzcGxhdHlPYmplY3QuLlxuICAgICAgICBkaXNwbGF5T2JqZWN0LndvcmxkVHJhbnNmb3JtLmlkZW50aXR5KCk7XG5cbiAgICAgICAgZGlzcGxheU9iamVjdC5jdXJyZW50Qm91bmRzID0gbnVsbDtcblxuICAgICAgICAvLyBUaW1lIHRvIHVwZGF0ZSBhbGwgdGhlIGNoaWxkcmVuIG9mIHRoZSBkaXNwbGF5T2JqZWN0IHdpdGggdGhlIG5ldyBtYXRyaXguLlxuICAgICAgICB2YXIgY2hpbGRyZW4gPSBkaXNwbGF5T2JqZWN0LmNoaWxkcmVuO1xuICAgICAgICB2YXIgaSwgajtcblxuICAgICAgICBmb3IgKGkgPSAwLCBqID0gY2hpbGRyZW4ubGVuZ3RoOyBpIDwgajsgKytpKVxuICAgICAgICB7XG4gICAgICAgICAgICBjaGlsZHJlbltpXS51cGRhdGVUcmFuc2Zvcm0oKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vVE9ETyByZW5hbWUgdGV4dHVyZUJ1ZmZlciB0byByZW5kZXJUYXJnZXQuLlxuICAgIHZhciB0ZW1wID0gIHRoaXMucmVuZGVyZXIuZmlsdGVyTWFuYWdlcjtcblxuICAgIHRoaXMucmVuZGVyZXIuZmlsdGVyTWFuYWdlciA9IHRoaXMuZmlsdGVyTWFuYWdlcjtcbiAgICB0aGlzLnJlbmRlcmVyLnJlbmRlckRpc3BsYXlPYmplY3QoZGlzcGxheU9iamVjdCwgdGhpcy50ZXh0dXJlQnVmZmVyLCBjbGVhcik7XG5cbiAgICB0aGlzLnJlbmRlcmVyLmZpbHRlck1hbmFnZXIgPSB0ZW1wO1xufTtcblxuXG4vKipcbiAqIEludGVybmFsIG1ldGhvZCBhc3NpZ25lZCB0byB0aGUgYHJlbmRlcmAgcHJvcGVydHkgaWYgdXNpbmcgYSBDYW52YXNSZW5kZXJlci5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIGRpc3BsYXlPYmplY3Qge1BJWEkuRGlzcGxheU9iamVjdH0gVGhlIGRpc3BsYXkgb2JqZWN0IHRvIHJlbmRlciB0aGlzIHRleHR1cmUgb25cbiAqIEBwYXJhbSBbbWF0cml4XSB7UElYSS5NYXRyaXh9IE9wdGlvbmFsIG1hdHJpeCB0byBhcHBseSB0byB0aGUgZGlzcGxheSBvYmplY3QgYmVmb3JlIHJlbmRlcmluZy5cbiAqIEBwYXJhbSBbY2xlYXJdIHtib29sZWFufSBJZiB0cnVlIHRoZSB0ZXh0dXJlIHdpbGwgYmUgY2xlYXJlZCBiZWZvcmUgdGhlIGRpc3BsYXlPYmplY3QgaXMgZHJhd25cbiAqL1xuUmVuZGVyVGV4dHVyZS5wcm90b3R5cGUucmVuZGVyQ2FudmFzID0gZnVuY3Rpb24gKGRpc3BsYXlPYmplY3QsIG1hdHJpeCwgY2xlYXIsIHVwZGF0ZVRyYW5zZm9ybSlcbntcbiAgICBpZiAoIXRoaXMudmFsaWQpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdXBkYXRlVHJhbnNmb3JtID0gISF1cGRhdGVUcmFuc2Zvcm07XG5cbiAgICB2YXIgd3QgPSB0ZW1wTWF0cml4O1xuXG4gICAgd3QuaWRlbnRpdHkoKTtcblxuICAgIGlmIChtYXRyaXgpXG4gICAge1xuICAgICAgICB3dC5hcHBlbmQobWF0cml4KTtcbiAgICB9XG5cbiAgICB2YXIgY2FjaGVkV3QgPSBkaXNwbGF5T2JqZWN0LndvcmxkVHJhbnNmb3JtO1xuICAgIGRpc3BsYXlPYmplY3Qud29ybGRUcmFuc2Zvcm0gPSB3dDtcblxuICAgIC8vIHNldFdvcmxkIEFscGhhIHRvIGVuc3VyZSB0aGF0IHRoZSBvYmplY3QgaXMgcmVuZGVyZXIgYXQgZnVsbCBvcGFjaXR5XG4gICAgZGlzcGxheU9iamVjdC53b3JsZEFscGhhID0gMTtcblxuICAgIC8vIFRpbWUgdG8gdXBkYXRlIGFsbCB0aGUgY2hpbGRyZW4gb2YgdGhlIGRpc3BsYXlPYmplY3Qgd2l0aCB0aGUgbmV3IG1hdHJpeC4uXG4gICAgdmFyIGNoaWxkcmVuID0gZGlzcGxheU9iamVjdC5jaGlsZHJlbjtcbiAgICB2YXIgaSwgajtcblxuICAgIGZvciAoaSA9IDAsIGogPSBjaGlsZHJlbi5sZW5ndGg7IGkgPCBqOyArK2kpXG4gICAge1xuICAgICAgICBjaGlsZHJlbltpXS51cGRhdGVUcmFuc2Zvcm0oKTtcbiAgICB9XG5cbiAgICBpZiAoY2xlYXIpXG4gICAge1xuICAgICAgICB0aGlzLnRleHR1cmVCdWZmZXIuY2xlYXIoKTtcbiAgICB9XG5cblxuLy8gICAgdGhpcy50ZXh0dXJlQnVmZmVyLlxuICAgIHZhciBjb250ZXh0ID0gdGhpcy50ZXh0dXJlQnVmZmVyLmNvbnRleHQ7XG5cbiAgICB2YXIgcmVhbFJlc29sdXRpb24gPSB0aGlzLnJlbmRlcmVyLnJlc29sdXRpb247XG5cbiAgICB0aGlzLnJlbmRlcmVyLnJlc29sdXRpb24gPSB0aGlzLnJlc29sdXRpb247XG5cbiAgICB0aGlzLnJlbmRlcmVyLnJlbmRlckRpc3BsYXlPYmplY3QoZGlzcGxheU9iamVjdCwgY29udGV4dCk7XG5cbiAgICB0aGlzLnJlbmRlcmVyLnJlc29sdXRpb24gPSByZWFsUmVzb2x1dGlvbjtcblxuICAgIGlmKGRpc3BsYXlPYmplY3Qud29ybGRUcmFuc2Zvcm0gPT09IHd0KVxuICAgIHtcbiAgICAgICAgLy8gZml4ZXMgY2FjaGVBc0JpdG1hcCBIYXBwZW5pbmcgZHVyaW5nIHRoZSBhYm92ZS4uXG4gICAgICAgIGRpc3BsYXlPYmplY3Qud29ybGRUcmFuc2Zvcm0gPSBjYWNoZWRXdDtcbiAgICB9XG5cbn07XG5cbi8qKlxuICogRGVzdHJveXMgdGhpcyB0ZXh0dXJlXG4gKlxuICogQHBhcmFtIGRlc3Ryb3lCYXNlIHtib29sZWFufSBXaGV0aGVyIHRvIGRlc3Ryb3kgdGhlIGJhc2UgdGV4dHVyZSBhcyB3ZWxsXG4gKi9cblJlbmRlclRleHR1cmUucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoKVxue1xuICAgIFRleHR1cmUucHJvdG90eXBlLmRlc3Ryb3kuY2FsbCh0aGlzLCB0cnVlKTtcblxuICAgIHRoaXMudGV4dHVyZUJ1ZmZlci5kZXN0cm95KCk7XG5cbiAgICAvLyBkZXN0cm95IHRoZSBmaWx0ZXJtYW5hZ2VyLi5cbiAgICBpZih0aGlzLmZpbHRlck1hbmFnZXIpXG4gICAge1xuICAgICAgICB0aGlzLmZpbHRlck1hbmFnZXIuZGVzdHJveSgpO1xuICAgIH1cblxuICAgIHRoaXMucmVuZGVyZXIgPSBudWxsO1xufTtcblxuLyoqXG4gKiBXaWxsIHJldHVybiBhIEhUTUwgSW1hZ2Ugb2YgdGhlIHRleHR1cmVcbiAqXG4gKiBAcmV0dXJuIHtJbWFnZX1cbiAqL1xuUmVuZGVyVGV4dHVyZS5wcm90b3R5cGUuZ2V0SW1hZ2UgPSBmdW5jdGlvbiAoKVxue1xuICAgIHZhciBpbWFnZSA9IG5ldyBJbWFnZSgpO1xuICAgIGltYWdlLnNyYyA9IHRoaXMuZ2V0QmFzZTY0KCk7XG4gICAgcmV0dXJuIGltYWdlO1xufTtcblxuLyoqXG4gKiBXaWxsIHJldHVybiBhIGEgYmFzZTY0IGVuY29kZWQgc3RyaW5nIG9mIHRoaXMgdGV4dHVyZS4gSXQgd29ya3MgYnkgY2FsbGluZyBSZW5kZXJUZXh0dXJlLmdldENhbnZhcyBhbmQgdGhlbiBydW5uaW5nIHRvRGF0YVVSTCBvbiB0aGF0LlxuICpcbiAqIEByZXR1cm4ge3N0cmluZ30gQSBiYXNlNjQgZW5jb2RlZCBzdHJpbmcgb2YgdGhlIHRleHR1cmUuXG4gKi9cblJlbmRlclRleHR1cmUucHJvdG90eXBlLmdldEJhc2U2NCA9IGZ1bmN0aW9uICgpXG57XG4gICAgcmV0dXJuIHRoaXMuZ2V0Q2FudmFzKCkudG9EYXRhVVJMKCk7XG59O1xuXG4vKipcbiAqIENyZWF0ZXMgYSBDYW52YXMgZWxlbWVudCwgcmVuZGVycyB0aGlzIFJlbmRlclRleHR1cmUgdG8gaXQgYW5kIHRoZW4gcmV0dXJucyBpdC5cbiAqXG4gKiBAcmV0dXJuIHtIVE1MQ2FudmFzRWxlbWVudH0gQSBDYW52YXMgZWxlbWVudCB3aXRoIHRoZSB0ZXh0dXJlIHJlbmRlcmVkIG9uLlxuICovXG5SZW5kZXJUZXh0dXJlLnByb3RvdHlwZS5nZXRDYW52YXMgPSBmdW5jdGlvbiAoKVxue1xuICAgIGlmICh0aGlzLnJlbmRlcmVyLnR5cGUgPT09IENPTlNULlJFTkRFUkVSX1RZUEUuV0VCR0wpXG4gICAge1xuICAgICAgICB2YXIgZ2wgPSB0aGlzLnJlbmRlcmVyLmdsO1xuICAgICAgICB2YXIgd2lkdGggPSB0aGlzLnRleHR1cmVCdWZmZXIuc2l6ZS53aWR0aDtcbiAgICAgICAgdmFyIGhlaWdodCA9IHRoaXMudGV4dHVyZUJ1ZmZlci5zaXplLmhlaWdodDtcblxuICAgICAgICB2YXIgd2ViR0xQaXhlbHMgPSBuZXcgVWludDhBcnJheSg0ICogd2lkdGggKiBoZWlnaHQpO1xuXG4gICAgICAgIGdsLmJpbmRGcmFtZWJ1ZmZlcihnbC5GUkFNRUJVRkZFUiwgdGhpcy50ZXh0dXJlQnVmZmVyLmZyYW1lQnVmZmVyKTtcbiAgICAgICAgZ2wucmVhZFBpeGVscygwLCAwLCB3aWR0aCwgaGVpZ2h0LCBnbC5SR0JBLCBnbC5VTlNJR05FRF9CWVRFLCB3ZWJHTFBpeGVscyk7XG4gICAgICAgIGdsLmJpbmRGcmFtZWJ1ZmZlcihnbC5GUkFNRUJVRkZFUiwgbnVsbCk7XG5cbiAgICAgICAgdmFyIHRlbXBDYW52YXMgPSBuZXcgQ2FudmFzQnVmZmVyKHdpZHRoLCBoZWlnaHQpO1xuICAgICAgICB2YXIgY2FudmFzRGF0YSA9IHRlbXBDYW52YXMuY29udGV4dC5nZXRJbWFnZURhdGEoMCwgMCwgd2lkdGgsIGhlaWdodCk7XG4gICAgICAgIGNhbnZhc0RhdGEuZGF0YS5zZXQod2ViR0xQaXhlbHMpO1xuXG4gICAgICAgIHRlbXBDYW52YXMuY29udGV4dC5wdXRJbWFnZURhdGEoY2FudmFzRGF0YSwgMCwgMCk7XG5cbiAgICAgICAgcmV0dXJuIHRlbXBDYW52YXMuY2FudmFzO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICByZXR1cm4gdGhpcy50ZXh0dXJlQnVmZmVyLmNhbnZhcztcbiAgICB9XG59O1xuXG4vKipcbiAqIFdpbGwgcmV0dXJuIGEgb25lLWRpbWVuc2lvbmFsIGFycmF5IGNvbnRhaW5pbmcgdGhlIHBpeGVsIGRhdGEgb2YgdGhlIGVudGlyZSB0ZXh0dXJlIGluIFJHQkEgb3JkZXIsIHdpdGggaW50ZWdlciB2YWx1ZXMgYmV0d2VlbiAwIGFuZCAyNTUgKGluY2x1ZGVkKS5cbiAqXG4gKiBAcmV0dXJuIHtVaW50OENsYW1wZWRBcnJheX1cbiAqL1xuUmVuZGVyVGV4dHVyZS5wcm90b3R5cGUuZ2V0UGl4ZWxzID0gZnVuY3Rpb24gKClcbntcbiAgICB2YXIgd2lkdGgsIGhlaWdodDtcblxuICAgIGlmICh0aGlzLnJlbmRlcmVyLnR5cGUgPT09IENPTlNULlJFTkRFUkVSX1RZUEUuV0VCR0wpXG4gICAge1xuICAgICAgICB2YXIgZ2wgPSB0aGlzLnJlbmRlcmVyLmdsO1xuICAgICAgICB3aWR0aCA9IHRoaXMudGV4dHVyZUJ1ZmZlci5zaXplLndpZHRoO1xuICAgICAgICBoZWlnaHQgPSB0aGlzLnRleHR1cmVCdWZmZXIuc2l6ZS5oZWlnaHQ7XG5cbiAgICAgICAgdmFyIHdlYkdMUGl4ZWxzID0gbmV3IFVpbnQ4QXJyYXkoNCAqIHdpZHRoICogaGVpZ2h0KTtcblxuICAgICAgICBnbC5iaW5kRnJhbWVidWZmZXIoZ2wuRlJBTUVCVUZGRVIsIHRoaXMudGV4dHVyZUJ1ZmZlci5mcmFtZUJ1ZmZlcik7XG4gICAgICAgIGdsLnJlYWRQaXhlbHMoMCwgMCwgd2lkdGgsIGhlaWdodCwgZ2wuUkdCQSwgZ2wuVU5TSUdORURfQllURSwgd2ViR0xQaXhlbHMpO1xuICAgICAgICBnbC5iaW5kRnJhbWVidWZmZXIoZ2wuRlJBTUVCVUZGRVIsIG51bGwpO1xuXG4gICAgICAgIHJldHVybiB3ZWJHTFBpeGVscztcbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgd2lkdGggPSB0aGlzLnRleHR1cmVCdWZmZXIuY2FudmFzLndpZHRoO1xuICAgICAgICBoZWlnaHQgPSB0aGlzLnRleHR1cmVCdWZmZXIuY2FudmFzLmhlaWdodDtcblxuICAgICAgICByZXR1cm4gdGhpcy50ZXh0dXJlQnVmZmVyLmNhbnZhcy5nZXRDb250ZXh0KCcyZCcpLmdldEltYWdlRGF0YSgwLCAwLCB3aWR0aCwgaGVpZ2h0KS5kYXRhO1xuICAgIH1cbn07XG5cbi8qKlxuICogV2lsbCByZXR1cm4gYSBvbmUtZGltZW5zaW9uYWwgYXJyYXkgY29udGFpbmluZyB0aGUgcGl4ZWwgZGF0YSBvZiBhIHBpeGVsIHdpdGhpbiB0aGUgdGV4dHVyZSBpbiBSR0JBIG9yZGVyLCB3aXRoIGludGVnZXIgdmFsdWVzIGJldHdlZW4gMCBhbmQgMjU1IChpbmNsdWRlZCkuXG4gKlxuICogQHBhcmFtIHgge251bWJlcn0gVGhlIHggY29vcmRpbmF0ZSBvZiB0aGUgcGl4ZWwgdG8gcmV0cmlldmUuXG4gKiBAcGFyYW0geSB7bnVtYmVyfSBUaGUgeSBjb29yZGluYXRlIG9mIHRoZSBwaXhlbCB0byByZXRyaWV2ZS5cbiAqIEByZXR1cm4ge1VpbnQ4Q2xhbXBlZEFycmF5fVxuICovXG5SZW5kZXJUZXh0dXJlLnByb3RvdHlwZS5nZXRQaXhlbCA9IGZ1bmN0aW9uICh4LCB5KVxue1xuICAgIGlmICh0aGlzLnJlbmRlcmVyLnR5cGUgPT09IENPTlNULlJFTkRFUkVSX1RZUEUuV0VCR0wpXG4gICAge1xuICAgICAgICB2YXIgZ2wgPSB0aGlzLnJlbmRlcmVyLmdsO1xuXG4gICAgICAgIHZhciB3ZWJHTFBpeGVscyA9IG5ldyBVaW50OEFycmF5KDQpO1xuXG4gICAgICAgIGdsLmJpbmRGcmFtZWJ1ZmZlcihnbC5GUkFNRUJVRkZFUiwgdGhpcy50ZXh0dXJlQnVmZmVyLmZyYW1lQnVmZmVyKTtcbiAgICAgICAgZ2wucmVhZFBpeGVscyh4LCB5LCAxLCAxLCBnbC5SR0JBLCBnbC5VTlNJR05FRF9CWVRFLCB3ZWJHTFBpeGVscyk7XG4gICAgICAgIGdsLmJpbmRGcmFtZWJ1ZmZlcihnbC5GUkFNRUJVRkZFUiwgbnVsbCk7XG5cbiAgICAgICAgcmV0dXJuIHdlYkdMUGl4ZWxzO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICByZXR1cm4gdGhpcy50ZXh0dXJlQnVmZmVyLmNhbnZhcy5nZXRDb250ZXh0KCcyZCcpLmdldEltYWdlRGF0YSh4LCB5LCAxLCAxKS5kYXRhO1xuICAgIH1cbn07XG4iLCJ2YXIgQmFzZVRleHR1cmUgPSByZXF1aXJlKCcuL0Jhc2VUZXh0dXJlJyksXG4gICAgVmlkZW9CYXNlVGV4dHVyZSA9IHJlcXVpcmUoJy4vVmlkZW9CYXNlVGV4dHVyZScpLFxuICAgIFRleHR1cmVVdnMgPSByZXF1aXJlKCcuL1RleHR1cmVVdnMnKSxcbiAgICBFdmVudEVtaXR0ZXIgPSByZXF1aXJlKCdldmVudGVtaXR0ZXIzJyksXG4gICAgbWF0aCA9IHJlcXVpcmUoJy4uL21hdGgnKSxcbiAgICB1dGlscyA9IHJlcXVpcmUoJy4uL3V0aWxzJyk7XG5cbi8qKlxuICogQSB0ZXh0dXJlIHN0b3JlcyB0aGUgaW5mb3JtYXRpb24gdGhhdCByZXByZXNlbnRzIGFuIGltYWdlIG9yIHBhcnQgb2YgYW4gaW1hZ2UuIEl0IGNhbm5vdCBiZSBhZGRlZFxuICogdG8gdGhlIGRpc3BsYXkgbGlzdCBkaXJlY3RseS4gSW5zdGVhZCB1c2UgaXQgYXMgdGhlIHRleHR1cmUgZm9yIGEgU3ByaXRlLiBJZiBubyBmcmFtZSBpcyBwcm92aWRlZCB0aGVuIHRoZSB3aG9sZSBpbWFnZSBpcyB1c2VkLlxuICpcbiAqIFlvdSBjYW4gZGlyZWN0bHkgY3JlYXRlIGEgdGV4dHVyZSBmcm9tIGFuIGltYWdlIGFuZCB0aGVuIHJldXNlIGl0IG11bHRpcGxlIHRpbWVzIGxpa2UgdGhpcyA6XG4gKlxuICogYGBganNcbiAqIHZhciB0ZXh0dXJlID0gUElYSS5UZXh0dXJlLmZyb21JbWFnZSgnYXNzZXRzL2ltYWdlLnBuZycpO1xuICogdmFyIHNwcml0ZTEgPSBuZXcgUElYSS5TcHJpdGUodGV4dHVyZSk7XG4gKiB2YXIgc3ByaXRlMiA9IG5ldyBQSVhJLlNwcml0ZSh0ZXh0dXJlKTtcbiAqIGBgYFxuICpcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqIEBwYXJhbSBiYXNlVGV4dHVyZSB7UElYSS5CYXNlVGV4dHVyZX0gVGhlIGJhc2UgdGV4dHVyZSBzb3VyY2UgdG8gY3JlYXRlIHRoZSB0ZXh0dXJlIGZyb21cbiAqIEBwYXJhbSBbZnJhbWVdIHtQSVhJLlJlY3RhbmdsZX0gVGhlIHJlY3RhbmdsZSBmcmFtZSBvZiB0aGUgdGV4dHVyZSB0byBzaG93XG4gKiBAcGFyYW0gW2Nyb3BdIHtQSVhJLlJlY3RhbmdsZX0gVGhlIGFyZWEgb2Ygb3JpZ2luYWwgdGV4dHVyZVxuICogQHBhcmFtIFt0cmltXSB7UElYSS5SZWN0YW5nbGV9IFRyaW1tZWQgdGV4dHVyZSByZWN0YW5nbGVcbiAqIEBwYXJhbSBbcm90YXRlXSB7Ym9vbGVhbn0gaW5kaWNhdGVzIHdoZXRoZXIgdGhlIHRleHR1cmUgc2hvdWxkIGJlIHJvdGF0ZWQgYnkgOTAgZGVncmVlcyAoIHVzZWQgYnkgdGV4dHVyZSBwYWNrZXIgKVxuICovXG5mdW5jdGlvbiBUZXh0dXJlKGJhc2VUZXh0dXJlLCBmcmFtZSwgY3JvcCwgdHJpbSwgcm90YXRlKVxue1xuICAgIEV2ZW50RW1pdHRlci5jYWxsKHRoaXMpO1xuXG4gICAgLyoqXG4gICAgICogRG9lcyB0aGlzIFRleHR1cmUgaGF2ZSBhbnkgZnJhbWUgZGF0YSBhc3NpZ25lZCB0byBpdD9cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICovXG4gICAgdGhpcy5ub0ZyYW1lID0gZmFsc2U7XG5cbiAgICBpZiAoIWZyYW1lKVxuICAgIHtcbiAgICAgICAgdGhpcy5ub0ZyYW1lID0gdHJ1ZTtcbiAgICAgICAgZnJhbWUgPSBuZXcgbWF0aC5SZWN0YW5nbGUoMCwgMCwgMSwgMSk7XG4gICAgfVxuXG4gICAgaWYgKGJhc2VUZXh0dXJlIGluc3RhbmNlb2YgVGV4dHVyZSlcbiAgICB7XG4gICAgICAgIGJhc2VUZXh0dXJlID0gYmFzZVRleHR1cmUuYmFzZVRleHR1cmU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhlIGJhc2UgdGV4dHVyZSB0aGF0IHRoaXMgdGV4dHVyZSB1c2VzLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5CYXNlVGV4dHVyZX1cbiAgICAgKi9cbiAgICB0aGlzLmJhc2VUZXh0dXJlID0gYmFzZVRleHR1cmU7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgZnJhbWUgc3BlY2lmaWVzIHRoZSByZWdpb24gb2YgdGhlIGJhc2UgdGV4dHVyZSB0aGF0IHRoaXMgdGV4dHVyZSB1c2VzXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlJlY3RhbmdsZX1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX2ZyYW1lID0gZnJhbWU7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgdGV4dHVyZSB0cmltIGRhdGEuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlJlY3RhbmdsZX1cbiAgICAgKi9cbiAgICB0aGlzLnRyaW0gPSB0cmltO1xuXG4gICAgLyoqXG4gICAgICogVGhpcyB3aWxsIGxldCB0aGUgcmVuZGVyZXIga25vdyBpZiB0aGUgdGV4dHVyZSBpcyB2YWxpZC4gSWYgaXQncyBub3QgdGhlbiBpdCBjYW5ub3QgYmUgcmVuZGVyZWQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqL1xuICAgIHRoaXMudmFsaWQgPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIFRoaXMgd2lsbCBsZXQgYSByZW5kZXJlciBrbm93IHRoYXQgYSB0ZXh0dXJlIGhhcyBiZWVuIHVwZGF0ZWQgKHVzZWQgbWFpbmx5IGZvciB3ZWJHTCB1diB1cGRhdGVzKVxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKi9cbiAgICB0aGlzLnJlcXVpcmVzVXBkYXRlID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgV2ViR0wgVVYgZGF0YSBjYWNoZS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuVGV4dHVyZVV2c31cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX3V2cyA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgd2lkdGggb2YgdGhlIFRleHR1cmUgaW4gcGl4ZWxzLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMud2lkdGggPSAwO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGhlaWdodCBvZiB0aGUgVGV4dHVyZSBpbiBwaXhlbHMuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy5oZWlnaHQgPSAwO1xuXG4gICAgLyoqXG4gICAgICogVGhpcyBpcyB0aGUgYXJlYSBvZiB0aGUgQmFzZVRleHR1cmUgaW1hZ2UgdG8gYWN0dWFsbHkgY29weSB0byB0aGUgQ2FudmFzIC8gV2ViR0wgd2hlbiByZW5kZXJpbmcsXG4gICAgICogaXJyZXNwZWN0aXZlIG9mIHRoZSBhY3R1YWwgZnJhbWUgc2l6ZSBvciBwbGFjZW1lbnQgKHdoaWNoIGNhbiBiZSBpbmZsdWVuY2VkIGJ5IHRyaW1tZWQgdGV4dHVyZSBhdGxhc2VzKVxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5SZWN0YW5nbGV9XG4gICAgICovXG4gICAgdGhpcy5jcm9wID0gY3JvcCB8fCBmcmFtZTsvL25ldyBtYXRoLlJlY3RhbmdsZSgwLCAwLCAxLCAxKTtcblxuICAgIC8qKlxuICAgICAqIEluZGljYXRlcyB3aGV0aGVyIHRoZSB0ZXh0dXJlIHNob3VsZCBiZSByb3RhdGVkIGJ5IDkwIGRlZ3JlZXNcbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKi9cbiAgICB0aGlzLnJvdGF0ZSA9ICEhcm90YXRlO1xuXG4gICAgaWYgKGJhc2VUZXh0dXJlLmhhc0xvYWRlZClcbiAgICB7XG4gICAgICAgIGlmICh0aGlzLm5vRnJhbWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGZyYW1lID0gbmV3IG1hdGguUmVjdGFuZ2xlKDAsIDAsIGJhc2VUZXh0dXJlLndpZHRoLCBiYXNlVGV4dHVyZS5oZWlnaHQpO1xuXG4gICAgICAgICAgICAvLyBpZiB0aGVyZSBpcyBubyBmcmFtZSB3ZSBzaG91bGQgbW9uaXRvciBmb3IgYW55IGJhc2UgdGV4dHVyZSBjaGFuZ2VzLi5cbiAgICAgICAgICAgIGJhc2VUZXh0dXJlLm9uKCd1cGRhdGUnLCB0aGlzLm9uQmFzZVRleHR1cmVVcGRhdGVkLCB0aGlzKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmZyYW1lID0gZnJhbWU7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIGJhc2VUZXh0dXJlLm9uY2UoJ2xvYWRlZCcsIHRoaXMub25CYXNlVGV4dHVyZUxvYWRlZCwgdGhpcyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRmlyZWQgd2hlbiB0aGUgdGV4dHVyZSBpcyB1cGRhdGVkLiBUaGlzIGhhcHBlbnMgaWYgdGhlIGZyYW1lIG9yIHRoZSBiYXNlVGV4dHVyZSBpcyB1cGRhdGVkLlxuICAgICAqXG4gICAgICogQGV2ZW50IHVwZGF0ZVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLlRleHR1cmUjXG4gICAgICogQHByb3RlY3RlZFxuICAgICAqL1xufVxuXG5UZXh0dXJlLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoRXZlbnRFbWl0dGVyLnByb3RvdHlwZSk7XG5UZXh0dXJlLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFRleHR1cmU7XG5tb2R1bGUuZXhwb3J0cyA9IFRleHR1cmU7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKFRleHR1cmUucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogVGhlIGZyYW1lIHNwZWNpZmllcyB0aGUgcmVnaW9uIG9mIHRoZSBiYXNlIHRleHR1cmUgdGhhdCB0aGlzIHRleHR1cmUgdXNlcy5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuUmVjdGFuZ2xlfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLlRleHR1cmUjXG4gICAgICovXG4gICAgZnJhbWU6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fZnJhbWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKGZyYW1lKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLl9mcmFtZSA9IGZyYW1lO1xuXG4gICAgICAgICAgICB0aGlzLm5vRnJhbWUgPSBmYWxzZTtcblxuICAgICAgICAgICAgdGhpcy53aWR0aCA9IGZyYW1lLndpZHRoO1xuICAgICAgICAgICAgdGhpcy5oZWlnaHQgPSBmcmFtZS5oZWlnaHQ7XG5cbiAgICAgICAgICAgIGlmICghdGhpcy50cmltICYmICF0aGlzLnJvdGF0ZSAmJiAoZnJhbWUueCArIGZyYW1lLndpZHRoID4gdGhpcy5iYXNlVGV4dHVyZS53aWR0aCB8fCBmcmFtZS55ICsgZnJhbWUuaGVpZ2h0ID4gdGhpcy5iYXNlVGV4dHVyZS5oZWlnaHQpKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignVGV4dHVyZSBFcnJvcjogZnJhbWUgZG9lcyBub3QgZml0IGluc2lkZSB0aGUgYmFzZSBUZXh0dXJlIGRpbWVuc2lvbnMgJyArIHRoaXMpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvL3RoaXMudmFsaWQgPSBmcmFtZSAmJiBmcmFtZS53aWR0aCAmJiBmcmFtZS5oZWlnaHQgJiYgdGhpcy5iYXNlVGV4dHVyZS5zb3VyY2UgJiYgdGhpcy5iYXNlVGV4dHVyZS5oYXNMb2FkZWQ7XG4gICAgICAgICAgICB0aGlzLnZhbGlkID0gZnJhbWUgJiYgZnJhbWUud2lkdGggJiYgZnJhbWUuaGVpZ2h0ICYmIHRoaXMuYmFzZVRleHR1cmUuaGFzTG9hZGVkO1xuXG4gICAgICAgICAgICBpZiAodGhpcy50cmltKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHRoaXMud2lkdGggPSB0aGlzLnRyaW0ud2lkdGg7XG4gICAgICAgICAgICAgICAgdGhpcy5oZWlnaHQgPSB0aGlzLnRyaW0uaGVpZ2h0O1xuICAgICAgICAgICAgICAgIHRoaXMuX2ZyYW1lLndpZHRoID0gdGhpcy50cmltLndpZHRoO1xuICAgICAgICAgICAgICAgIHRoaXMuX2ZyYW1lLmhlaWdodCA9IHRoaXMudHJpbS5oZWlnaHQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdGhpcy5jcm9wID0gZnJhbWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICh0aGlzLnZhbGlkKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHRoaXMuX3VwZGF0ZVV2cygpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxufSk7XG5cbi8qKlxuICogVXBkYXRlcyB0aGlzIHRleHR1cmUgb24gdGhlIGdwdS5cbiAqXG4gKi9cblRleHR1cmUucHJvdG90eXBlLnVwZGF0ZSA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy5iYXNlVGV4dHVyZS51cGRhdGUoKTtcbn07XG5cbi8qKlxuICogQ2FsbGVkIHdoZW4gdGhlIGJhc2UgdGV4dHVyZSBpcyBsb2FkZWRcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5UZXh0dXJlLnByb3RvdHlwZS5vbkJhc2VUZXh0dXJlTG9hZGVkID0gZnVuY3Rpb24gKGJhc2VUZXh0dXJlKVxue1xuICAgIC8vIFRPRE8gdGhpcyBjb2RlIGxvb2tzIGNvbmZ1c2luZy4uIGJvbyB0byBhYnVzaW5nIGdldHRlcnMgYW5kIHNldHRlcnNzIVxuICAgIGlmICh0aGlzLm5vRnJhbWUpXG4gICAge1xuICAgICAgICB0aGlzLmZyYW1lID0gbmV3IG1hdGguUmVjdGFuZ2xlKDAsIDAsIGJhc2VUZXh0dXJlLndpZHRoLCBiYXNlVGV4dHVyZS5oZWlnaHQpO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICB0aGlzLmZyYW1lID0gdGhpcy5fZnJhbWU7XG4gICAgfVxuXG4gICAgdGhpcy5lbWl0KCd1cGRhdGUnLCB0aGlzKTtcbn07XG5cbi8qKlxuICogQ2FsbGVkIHdoZW4gdGhlIGJhc2UgdGV4dHVyZSBpcyB1cGRhdGVkXG4gKlxuICogQHByaXZhdGVcbiAqL1xuVGV4dHVyZS5wcm90b3R5cGUub25CYXNlVGV4dHVyZVVwZGF0ZWQgPSBmdW5jdGlvbiAoYmFzZVRleHR1cmUpXG57XG4gICAgdGhpcy5fZnJhbWUud2lkdGggPSBiYXNlVGV4dHVyZS53aWR0aDtcbiAgICB0aGlzLl9mcmFtZS5oZWlnaHQgPSBiYXNlVGV4dHVyZS5oZWlnaHQ7XG5cbiAgICB0aGlzLmVtaXQoJ3VwZGF0ZScsIHRoaXMpO1xufTtcblxuLyoqXG4gKiBEZXN0cm95cyB0aGlzIHRleHR1cmVcbiAqXG4gKiBAcGFyYW0gW2Rlc3Ryb3lCYXNlPWZhbHNlXSB7Ym9vbGVhbn0gV2hldGhlciB0byBkZXN0cm95IHRoZSBiYXNlIHRleHR1cmUgYXMgd2VsbFxuICovXG5UZXh0dXJlLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKGRlc3Ryb3lCYXNlKVxue1xuICAgIGlmICh0aGlzLmJhc2VUZXh0dXJlKVxuICAgIHtcbiAgICAgICAgaWYgKGRlc3Ryb3lCYXNlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmJhc2VUZXh0dXJlLmRlc3Ryb3koKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuYmFzZVRleHR1cmUub2ZmKCd1cGRhdGUnLCB0aGlzLm9uQmFzZVRleHR1cmVVcGRhdGVkLCB0aGlzKTtcbiAgICAgICAgdGhpcy5iYXNlVGV4dHVyZS5vZmYoJ2xvYWRlZCcsIHRoaXMub25CYXNlVGV4dHVyZUxvYWRlZCwgdGhpcyk7XG5cbiAgICAgICAgdGhpcy5iYXNlVGV4dHVyZSA9IG51bGw7XG4gICAgfVxuXG4gICAgdGhpcy5fZnJhbWUgPSBudWxsO1xuICAgIHRoaXMuX3V2cyA9IG51bGw7XG4gICAgdGhpcy50cmltID0gbnVsbDtcbiAgICB0aGlzLmNyb3AgPSBudWxsO1xuXG4gICAgdGhpcy52YWxpZCA9IGZhbHNlO1xuXG4gICAgdGhpcy5vZmYoJ2Rpc3Bvc2UnLCB0aGlzLmRpc3Bvc2UsIHRoaXMpO1xuICAgIHRoaXMub2ZmKCd1cGRhdGUnLCB0aGlzLnVwZGF0ZSwgdGhpcyk7XG59O1xuXG4vKipcbiAqIENyZWF0ZXMgYSBuZXcgdGV4dHVyZSBvYmplY3QgdGhhdCBhY3RzIHRoZSBzYW1lIGFzIHRoaXMgb25lLlxuICpcbiAqIEByZXR1cm4ge1BJWEkuVGV4dHVyZX1cbiAqL1xuVGV4dHVyZS5wcm90b3R5cGUuY2xvbmUgPSBmdW5jdGlvbiAoKVxue1xuICAgIHJldHVybiBuZXcgVGV4dHVyZSh0aGlzLmJhc2VUZXh0dXJlLCB0aGlzLmZyYW1lLCB0aGlzLmNyb3AsIHRoaXMudHJpbSwgdGhpcy5yb3RhdGUpO1xufTtcblxuLyoqXG4gKiBVcGRhdGVzIHRoZSBpbnRlcm5hbCBXZWJHTCBVViBjYWNoZS5cbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5UZXh0dXJlLnByb3RvdHlwZS5fdXBkYXRlVXZzID0gZnVuY3Rpb24gKClcbntcbiAgICBpZiAoIXRoaXMuX3V2cylcbiAgICB7XG4gICAgICAgIHRoaXMuX3V2cyA9IG5ldyBUZXh0dXJlVXZzKCk7XG4gICAgfVxuXG4gICAgdGhpcy5fdXZzLnNldCh0aGlzLmNyb3AsIHRoaXMuYmFzZVRleHR1cmUsIHRoaXMucm90YXRlKTtcbn07XG5cbi8qKlxuICogSGVscGVyIGZ1bmN0aW9uIHRoYXQgY3JlYXRlcyBhIFRleHR1cmUgb2JqZWN0IGZyb20gdGhlIGdpdmVuIGltYWdlIHVybC5cbiAqIElmIHRoZSBpbWFnZSBpcyBub3QgaW4gdGhlIHRleHR1cmUgY2FjaGUgaXQgd2lsbCBiZSAgY3JlYXRlZCBhbmQgbG9hZGVkLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBwYXJhbSBpbWFnZVVybCB7c3RyaW5nfSBUaGUgaW1hZ2UgdXJsIG9mIHRoZSB0ZXh0dXJlXG4gKiBAcGFyYW0gY3Jvc3NvcmlnaW4ge2Jvb2xlYW59IFdoZXRoZXIgcmVxdWVzdHMgc2hvdWxkIGJlIHRyZWF0ZWQgYXMgY3Jvc3NvcmlnaW5cbiAqIEBwYXJhbSBzY2FsZU1vZGUge251bWJlcn0gU2VlIHtAbGluayBQSVhJLlNDQUxFX01PREVTfSBmb3IgcG9zc2libGUgdmFsdWVzXG4gKiBAcmV0dXJuIHtQSVhJLlRleHR1cmV9IFRoZSBuZXdseSBjcmVhdGVkIHRleHR1cmVcbiAqL1xuVGV4dHVyZS5mcm9tSW1hZ2UgPSBmdW5jdGlvbiAoaW1hZ2VVcmwsIGNyb3Nzb3JpZ2luLCBzY2FsZU1vZGUpXG57XG4gICAgdmFyIHRleHR1cmUgPSB1dGlscy5UZXh0dXJlQ2FjaGVbaW1hZ2VVcmxdO1xuXG4gICAgaWYgKCF0ZXh0dXJlKVxuICAgIHtcbiAgICAgICAgdGV4dHVyZSA9IG5ldyBUZXh0dXJlKEJhc2VUZXh0dXJlLmZyb21JbWFnZShpbWFnZVVybCwgY3Jvc3NvcmlnaW4sIHNjYWxlTW9kZSkpO1xuICAgICAgICB1dGlscy5UZXh0dXJlQ2FjaGVbaW1hZ2VVcmxdID0gdGV4dHVyZTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGV4dHVyZTtcbn07XG5cbi8qKlxuICogSGVscGVyIGZ1bmN0aW9uIHRoYXQgY3JlYXRlcyBhIHNwcml0ZSB0aGF0IHdpbGwgY29udGFpbiBhIHRleHR1cmUgZnJvbSB0aGUgVGV4dHVyZUNhY2hlIGJhc2VkIG9uIHRoZSBmcmFtZUlkXG4gKiBUaGUgZnJhbWUgaWRzIGFyZSBjcmVhdGVkIHdoZW4gYSBUZXh0dXJlIHBhY2tlciBmaWxlIGhhcyBiZWVuIGxvYWRlZFxuICpcbiAqIEBzdGF0aWNcbiAqIEBwYXJhbSBmcmFtZUlkIHtzdHJpbmd9IFRoZSBmcmFtZSBJZCBvZiB0aGUgdGV4dHVyZSBpbiB0aGUgY2FjaGVcbiAqIEByZXR1cm4ge1BJWEkuVGV4dHVyZX0gVGhlIG5ld2x5IGNyZWF0ZWQgdGV4dHVyZVxuICovXG5UZXh0dXJlLmZyb21GcmFtZSA9IGZ1bmN0aW9uIChmcmFtZUlkKVxue1xuICAgIHZhciB0ZXh0dXJlID0gdXRpbHMuVGV4dHVyZUNhY2hlW2ZyYW1lSWRdO1xuXG4gICAgaWYgKCF0ZXh0dXJlKVxuICAgIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdUaGUgZnJhbWVJZCBcIicgKyBmcmFtZUlkICsgJ1wiIGRvZXMgbm90IGV4aXN0IGluIHRoZSB0ZXh0dXJlIGNhY2hlJyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRleHR1cmU7XG59O1xuXG4vKipcbiAqIEhlbHBlciBmdW5jdGlvbiB0aGF0IGNyZWF0ZXMgYSBuZXcgVGV4dHVyZSBiYXNlZCBvbiB0aGUgZ2l2ZW4gY2FudmFzIGVsZW1lbnQuXG4gKlxuICogQHN0YXRpY1xuICogQHBhcmFtIGNhbnZhcyB7Q2FudmFzfSBUaGUgY2FudmFzIGVsZW1lbnQgc291cmNlIG9mIHRoZSB0ZXh0dXJlXG4gKiBAcGFyYW0gc2NhbGVNb2RlIHtudW1iZXJ9IFNlZSB7QGxpbmsgUElYSS5TQ0FMRV9NT0RFU30gZm9yIHBvc3NpYmxlIHZhbHVlc1xuICogQHJldHVybiB7UElYSS5UZXh0dXJlfVxuICovXG5UZXh0dXJlLmZyb21DYW52YXMgPSBmdW5jdGlvbiAoY2FudmFzLCBzY2FsZU1vZGUpXG57XG4gICAgcmV0dXJuIG5ldyBUZXh0dXJlKEJhc2VUZXh0dXJlLmZyb21DYW52YXMoY2FudmFzLCBzY2FsZU1vZGUpKTtcbn07XG5cbi8qKlxuICogSGVscGVyIGZ1bmN0aW9uIHRoYXQgY3JlYXRlcyBhIG5ldyBUZXh0dXJlIGJhc2VkIG9uIHRoZSBnaXZlbiB2aWRlbyBlbGVtZW50LlxuICpcbiAqIEBzdGF0aWNcbiAqIEBwYXJhbSB2aWRlbyB7SFRNTFZpZGVvRWxlbWVudH1cbiAqIEBwYXJhbSBzY2FsZU1vZGUge251bWJlcn0gU2VlIHtAbGluayBQSVhJLlNDQUxFX01PREVTfSBmb3IgcG9zc2libGUgdmFsdWVzXG4gKiBAcmV0dXJuIHtQSVhJLlRleHR1cmV9IEEgVGV4dHVyZVxuICovXG5UZXh0dXJlLmZyb21WaWRlbyA9IGZ1bmN0aW9uICh2aWRlbywgc2NhbGVNb2RlKVxue1xuICAgIGlmICh0eXBlb2YgdmlkZW8gPT09ICdzdHJpbmcnKVxuICAgIHtcbiAgICAgICAgcmV0dXJuIFRleHR1cmUuZnJvbVZpZGVvVXJsKHZpZGVvLCBzY2FsZU1vZGUpO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICByZXR1cm4gbmV3IFRleHR1cmUoVmlkZW9CYXNlVGV4dHVyZS5mcm9tVmlkZW8odmlkZW8sIHNjYWxlTW9kZSkpO1xuICAgIH1cbn07XG5cbi8qKlxuICogSGVscGVyIGZ1bmN0aW9uIHRoYXQgY3JlYXRlcyBhIG5ldyBUZXh0dXJlIGJhc2VkIG9uIHRoZSB2aWRlbyB1cmwuXG4gKlxuICogQHN0YXRpY1xuICogQHBhcmFtIHZpZGVvVXJsIHtzdHJpbmd9XG4gKiBAcGFyYW0gc2NhbGVNb2RlIHtudW1iZXJ9IFNlZSB7QGxpbmsgUElYSS5TQ0FMRV9NT0RFU30gZm9yIHBvc3NpYmxlIHZhbHVlc1xuICogQHJldHVybiB7UElYSS5UZXh0dXJlfSBBIFRleHR1cmVcbiAqL1xuVGV4dHVyZS5mcm9tVmlkZW9VcmwgPSBmdW5jdGlvbiAodmlkZW9VcmwsIHNjYWxlTW9kZSlcbntcbiAgICByZXR1cm4gbmV3IFRleHR1cmUoVmlkZW9CYXNlVGV4dHVyZS5mcm9tVXJsKHZpZGVvVXJsLCBzY2FsZU1vZGUpKTtcbn07XG5cbi8qKlxuICogQWRkcyBhIHRleHR1cmUgdG8gdGhlIGdsb2JhbCB1dGlscy5UZXh0dXJlQ2FjaGUuIFRoaXMgY2FjaGUgaXMgc2hhcmVkIGFjcm9zcyB0aGUgd2hvbGUgUElYSSBvYmplY3QuXG4gKlxuICogQHN0YXRpY1xuICogQHBhcmFtIHRleHR1cmUge1BJWEkuVGV4dHVyZX0gVGhlIFRleHR1cmUgdG8gYWRkIHRvIHRoZSBjYWNoZS5cbiAqIEBwYXJhbSBpZCB7c3RyaW5nfSBUaGUgaWQgdGhhdCB0aGUgdGV4dHVyZSB3aWxsIGJlIHN0b3JlZCBhZ2FpbnN0LlxuICovXG5UZXh0dXJlLmFkZFRleHR1cmVUb0NhY2hlID0gZnVuY3Rpb24gKHRleHR1cmUsIGlkKVxue1xuICAgIHV0aWxzLlRleHR1cmVDYWNoZVtpZF0gPSB0ZXh0dXJlO1xufTtcblxuLyoqXG4gKiBSZW1vdmUgYSB0ZXh0dXJlIGZyb20gdGhlIGdsb2JhbCB1dGlscy5UZXh0dXJlQ2FjaGUuXG4gKlxuICogQHN0YXRpY1xuICogQHBhcmFtIGlkIHtzdHJpbmd9IFRoZSBpZCBvZiB0aGUgdGV4dHVyZSB0byBiZSByZW1vdmVkXG4gKiBAcmV0dXJuIHtQSVhJLlRleHR1cmV9IFRoZSB0ZXh0dXJlIHRoYXQgd2FzIHJlbW92ZWRcbiAqL1xuVGV4dHVyZS5yZW1vdmVUZXh0dXJlRnJvbUNhY2hlID0gZnVuY3Rpb24gKGlkKVxue1xuICAgIHZhciB0ZXh0dXJlID0gdXRpbHMuVGV4dHVyZUNhY2hlW2lkXTtcblxuICAgIGRlbGV0ZSB1dGlscy5UZXh0dXJlQ2FjaGVbaWRdO1xuICAgIGRlbGV0ZSB1dGlscy5CYXNlVGV4dHVyZUNhY2hlW2lkXTtcblxuICAgIHJldHVybiB0ZXh0dXJlO1xufTtcblxuLyoqXG4gKiBBbiBlbXB0eSB0ZXh0dXJlLCB1c2VkIG9mdGVuIHRvIG5vdCBoYXZlIHRvIGNyZWF0ZSBtdWx0aXBsZSBlbXB0eSB0ZXh0dXJlcy5cbiAqXG4gKiBAc3RhdGljXG4gKiBAY29uc3RhbnRcbiAqL1xuVGV4dHVyZS5FTVBUWSA9IG5ldyBUZXh0dXJlKG5ldyBCYXNlVGV4dHVyZSgpKTtcbiIsIlxuLyoqXG4gKiBBIHN0YW5kYXJkIG9iamVjdCB0byBzdG9yZSB0aGUgVXZzIG9mIGEgdGV4dHVyZVxuICpcbiAqIEBjbGFzc1xuICogQHByaXZhdGVcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKi9cbmZ1bmN0aW9uIFRleHR1cmVVdnMoKVxue1xuICAgIHRoaXMueDAgPSAwO1xuICAgIHRoaXMueTAgPSAwO1xuXG4gICAgdGhpcy54MSA9IDE7XG4gICAgdGhpcy55MSA9IDA7XG5cbiAgICB0aGlzLngyID0gMTtcbiAgICB0aGlzLnkyID0gMTtcblxuICAgIHRoaXMueDMgPSAwO1xuICAgIHRoaXMueTMgPSAxO1xuXG4gICAgdGhpcy54eTBfdWludDMyID0gMDtcbiAgICB0aGlzLnh5MV91aW50MzIgPSAwO1xuICAgIHRoaXMueHkyX3VpbnQzMiA9IDA7XG4gICAgdGhpcy54eTNfdWludDMyID0gMDtcblxuICAgIHRoaXMudXZzX3VpbnQzMiA9IG5ldyBVaW50MzJBcnJheSg0KVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IFRleHR1cmVVdnM7XG5cbi8qKlxuICogU2V0cyB0aGUgdGV4dHVyZSBVdnMgYmFzZWQgb24gdGhlIGdpdmVuIGZyYW1lIGluZm9ybWF0aW9uXG4gKiBAcGFyYW0gZnJhbWUge1BJWEkuUmVjdGFuZ2xlfVxuICogQHBhcmFtIGJhc2VGcmFtZSB7UElYSS5SZWN0YW5nbGV9XG4gKiBAcGFyYW0gcm90YXRlIHtib29sZWFufSBXaGV0aGVyIG9yIG5vdCB0aGUgZnJhbWUgaXMgcm90YXRlZFxuICogQHByaXZhdGVcbiAqL1xuVGV4dHVyZVV2cy5wcm90b3R5cGUuc2V0ID0gZnVuY3Rpb24gKGZyYW1lLCBiYXNlRnJhbWUsIHJvdGF0ZSlcbntcbiAgICB2YXIgdHcgPSBiYXNlRnJhbWUud2lkdGg7XG4gICAgdmFyIHRoID0gYmFzZUZyYW1lLmhlaWdodDtcblxuICAgIGlmKHJvdGF0ZSlcbiAgICB7XG4gICAgICAgIHRoaXMueDAgPSAoZnJhbWUueCArIGZyYW1lLmhlaWdodCkgLyB0dztcbiAgICAgICAgdGhpcy55MCA9IGZyYW1lLnkgLyB0aDtcblxuICAgICAgICB0aGlzLngxID0gKGZyYW1lLnggKyBmcmFtZS5oZWlnaHQpIC8gdHc7XG4gICAgICAgIHRoaXMueTEgPSAoZnJhbWUueSArIGZyYW1lLndpZHRoKSAvIHRoO1xuXG4gICAgICAgIHRoaXMueDIgPSBmcmFtZS54IC8gdHc7XG4gICAgICAgIHRoaXMueTIgPSAoZnJhbWUueSArIGZyYW1lLndpZHRoKSAvIHRoO1xuXG4gICAgICAgIHRoaXMueDMgPSBmcmFtZS54IC8gdHc7XG4gICAgICAgIHRoaXMueTMgPSBmcmFtZS55IC8gdGg7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG5cbiAgICAgICAgdGhpcy54MCA9IGZyYW1lLnggLyB0dztcbiAgICAgICAgdGhpcy55MCA9IGZyYW1lLnkgLyB0aDtcblxuICAgICAgICB0aGlzLngxID0gKGZyYW1lLnggKyBmcmFtZS53aWR0aCkgLyB0dztcbiAgICAgICAgdGhpcy55MSA9IGZyYW1lLnkgLyB0aDtcblxuICAgICAgICB0aGlzLngyID0gKGZyYW1lLnggKyBmcmFtZS53aWR0aCkgLyB0dztcbiAgICAgICAgdGhpcy55MiA9IChmcmFtZS55ICsgZnJhbWUuaGVpZ2h0KSAvIHRoO1xuXG4gICAgICAgIHRoaXMueDMgPSBmcmFtZS54IC8gdHc7XG4gICAgICAgIHRoaXMueTMgPSAoZnJhbWUueSArIGZyYW1lLmhlaWdodCkgLyB0aDtcbiAgICB9XG5cbiAgICB0aGlzLnV2c191aW50MzJbMF0gPSAoKCh0aGlzLnkwICogNjU1MzUpICYgMHhGRkZGKSA8PCAxNikgfCAoKHRoaXMueDAgKiA2NTUzNSkgJiAweEZGRkYpO1xuICAgIHRoaXMudXZzX3VpbnQzMlsxXSA9ICgoKHRoaXMueTEgKiA2NTUzNSkgJiAweEZGRkYpIDw8IDE2KSB8ICgodGhpcy54MSAqIDY1NTM1KSAmIDB4RkZGRik7XG4gICAgdGhpcy51dnNfdWludDMyWzJdID0gKCgodGhpcy55MiAqIDY1NTM1KSAmIDB4RkZGRikgPDwgMTYpIHwgKCh0aGlzLngyICogNjU1MzUpICYgMHhGRkZGKTtcbiAgICB0aGlzLnV2c191aW50MzJbM10gPSAoKCh0aGlzLnkzICogNjU1MzUpICYgMHhGRkZGKSA8PCAxNikgfCAoKHRoaXMueDMgKiA2NTUzNSkgJiAweEZGRkYpO1xufTtcbiIsInZhciBCYXNlVGV4dHVyZSA9IHJlcXVpcmUoJy4vQmFzZVRleHR1cmUnKSxcbiAgICB1dGlscyA9IHJlcXVpcmUoJy4uL3V0aWxzJyk7XG5cbi8qKlxuICogQSB0ZXh0dXJlIG9mIGEgW3BsYXlpbmddIFZpZGVvLlxuICpcbiAqIFZpZGVvIGJhc2UgdGV4dHVyZXMgbWltaWMgUGl4aSBCYXNlVGV4dHVyZS5mcm9tLi4uLiBtZXRob2QgaW4gdGhlaXIgY3JlYXRpb24gcHJvY2Vzcy5cbiAqXG4gKiBUaGlzIGNhbiBiZSB1c2VkIGluIHNldmVyYWwgd2F5cywgc3VjaCBhczpcbiAqXG4gKiBgYGBqc1xuICogdmFyIHRleHR1cmUgPSBQSVhJLlZpZGVvQmFzZVRleHR1cmUuZnJvbVVybCgnaHR0cDovL215ZG9tYWluLmNvbS92aWRlby5tcDQnKTtcbiAqXG4gKiB2YXIgdGV4dHVyZSA9IFBJWEkuVmlkZW9CYXNlVGV4dHVyZS5mcm9tVXJsKHsgc3JjOiAnaHR0cDovL215ZG9tYWluLmNvbS92aWRlby5tcDQnLCBtaW1lOiAndmlkZW8vbXA0JyB9KTtcbiAqXG4gKiB2YXIgdGV4dHVyZSA9IFBJWEkuVmlkZW9CYXNlVGV4dHVyZS5mcm9tVXJscyhbJy92aWRlby53ZWJtJywgJy92aWRlby5tcDQnXSk7XG4gKlxuICogdmFyIHRleHR1cmUgPSBQSVhJLlZpZGVvQmFzZVRleHR1cmUuZnJvbVVybHMoW1xuICogICAgIHsgc3JjOiAnL3ZpZGVvLndlYm0nLCBtaW1lOiAndmlkZW8vd2VibScgfSxcbiAqICAgICB7IHNyYzogJy92aWRlby5tcDQnLCBtaW1lOiAndmlkZW8vbXA0JyB9XG4gKiBdKTtcbiAqIGBgYFxuICpcbiAqIFNlZSB0aGUgW1wiZGV1c1wiIGRlbW9dKGh0dHA6Ly93d3cuZ29vZGJveWRpZ2l0YWwuY29tL3BpeGlqcy9leGFtcGxlcy9kZXVzLykuXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLkJhc2VUZXh0dXJlXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIHNvdXJjZSB7SFRNTFZpZGVvRWxlbWVudH1cbiAqIEBwYXJhbSBbc2NhbGVNb2RlXSB7bnVtYmVyfSBTZWUge0BsaW5rIFBJWEkuU0NBTEVfTU9ERVN9IGZvciBwb3NzaWJsZSB2YWx1ZXNcbiAqL1xuZnVuY3Rpb24gVmlkZW9CYXNlVGV4dHVyZShzb3VyY2UsIHNjYWxlTW9kZSlcbntcbiAgICBpZiAoIXNvdXJjZSlcbiAgICB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignTm8gdmlkZW8gc291cmNlIGVsZW1lbnQgc3BlY2lmaWVkLicpO1xuICAgIH1cblxuICAgIC8vIGhvb2sgaW4gaGVyZSB0byBjaGVjayBpZiB2aWRlbyBpcyBhbHJlYWR5IGF2YWlsYWJsZS5cbiAgICAvLyBCYXNlVGV4dHVyZSBsb29rcyBmb3IgYSBzb3VyY2UuY29tcGxldGUgYm9vbGVhbiwgcGx1cyB3aWR0aCAmIGhlaWdodC5cblxuICAgIGlmICgoc291cmNlLnJlYWR5U3RhdGUgPT09IHNvdXJjZS5IQVZFX0VOT1VHSF9EQVRBIHx8IHNvdXJjZS5yZWFkeVN0YXRlID09PSBzb3VyY2UuSEFWRV9GVVRVUkVfREFUQSkgJiYgc291cmNlLndpZHRoICYmIHNvdXJjZS5oZWlnaHQpXG4gICAge1xuICAgICAgICBzb3VyY2UuY29tcGxldGUgPSB0cnVlO1xuICAgIH1cblxuICAgIEJhc2VUZXh0dXJlLmNhbGwodGhpcywgc291cmNlLCBzY2FsZU1vZGUpO1xuXG4gICAgLyoqXG4gICAgICogU2hvdWxkIHRoZSBiYXNlIHRleHR1cmUgYXV0b21hdGljYWxseSB1cGRhdGUgaXRzZWxmLCBzZXQgdG8gdHJ1ZSBieSBkZWZhdWx0XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqIEBkZWZhdWx0IHRydWVcbiAgICAgKi9cbiAgICB0aGlzLmF1dG9VcGRhdGUgPSBmYWxzZTtcblxuICAgIHRoaXMuX29uVXBkYXRlID0gdGhpcy5fb25VcGRhdGUuYmluZCh0aGlzKTtcbiAgICB0aGlzLl9vbkNhblBsYXkgPSB0aGlzLl9vbkNhblBsYXkuYmluZCh0aGlzKTtcblxuICAgIGlmICghc291cmNlLmNvbXBsZXRlKVxuICAgIHtcbiAgICAgICAgc291cmNlLmFkZEV2ZW50TGlzdGVuZXIoJ2NhbnBsYXknLCB0aGlzLl9vbkNhblBsYXkpO1xuICAgICAgICBzb3VyY2UuYWRkRXZlbnRMaXN0ZW5lcignY2FucGxheXRocm91Z2gnLCB0aGlzLl9vbkNhblBsYXkpO1xuXG4gICAgICAgIC8vIHN0YXJ0ZWQgcGxheWluZy4uXG4gICAgICAgIHNvdXJjZS5hZGRFdmVudExpc3RlbmVyKCdwbGF5JywgdGhpcy5fb25QbGF5U3RhcnQuYmluZCh0aGlzKSk7XG4gICAgICAgIHNvdXJjZS5hZGRFdmVudExpc3RlbmVyKCdwYXVzZScsIHRoaXMuX29uUGxheVN0b3AuYmluZCh0aGlzKSk7XG4gICAgfVxuXG4gICAgdGhpcy5fX2xvYWRlZCA9IGZhbHNlO1xufVxuXG5WaWRlb0Jhc2VUZXh0dXJlLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoQmFzZVRleHR1cmUucHJvdG90eXBlKTtcblZpZGVvQmFzZVRleHR1cmUucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gVmlkZW9CYXNlVGV4dHVyZTtcbm1vZHVsZS5leHBvcnRzID0gVmlkZW9CYXNlVGV4dHVyZTtcblxuLyoqXG4gKiBUaGUgaW50ZXJuYWwgdXBkYXRlIGxvb3Agb2YgdGhlIHZpZGVvIGJhc2UgdGV4dHVyZSwgb25seSBydW5zIHdoZW4gYXV0b1VwZGF0ZSBpcyBzZXQgdG8gdHJ1ZVxuICpcbiAqIEBwcml2YXRlXG4gKi9cblZpZGVvQmFzZVRleHR1cmUucHJvdG90eXBlLl9vblVwZGF0ZSA9IGZ1bmN0aW9uICgpXG57XG4gICAgaWYgKHRoaXMuYXV0b1VwZGF0ZSlcbiAgICB7XG4gICAgICAgIHdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUodGhpcy5fb25VcGRhdGUpO1xuICAgICAgICB0aGlzLnVwZGF0ZSgpO1xuICAgIH1cbn07XG5cbi8qKlxuICogUnVucyB0aGUgdXBkYXRlIGxvb3Agd2hlbiB0aGUgdmlkZW8gaXMgcmVhZHkgdG8gcGxheVxuICpcbiAqIEBwcml2YXRlXG4gKi9cblZpZGVvQmFzZVRleHR1cmUucHJvdG90eXBlLl9vblBsYXlTdGFydCA9IGZ1bmN0aW9uICgpXG57XG4gICAgaWYgKCF0aGlzLmF1dG9VcGRhdGUpXG4gICAge1xuICAgICAgICB3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lKHRoaXMuX29uVXBkYXRlKTtcbiAgICAgICAgdGhpcy5hdXRvVXBkYXRlID0gdHJ1ZTtcbiAgICB9XG59O1xuXG4vKipcbiAqIEZpcmVkIHdoZW4gYSBwYXVzZSBldmVudCBpcyB0cmlnZ2VyZWQsIHN0b3BzIHRoZSB1cGRhdGUgbG9vcFxuICpcbiAqIEBwcml2YXRlXG4gKi9cblZpZGVvQmFzZVRleHR1cmUucHJvdG90eXBlLl9vblBsYXlTdG9wID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLmF1dG9VcGRhdGUgPSBmYWxzZTtcbn07XG5cbi8qKlxuICogRmlyZWQgd2hlbiB0aGUgdmlkZW8gaXMgbG9hZGVkIGFuZCByZWFkeSB0byBwbGF5XG4gKlxuICogQHByaXZhdGVcbiAqL1xuVmlkZW9CYXNlVGV4dHVyZS5wcm90b3R5cGUuX29uQ2FuUGxheSA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy5oYXNMb2FkZWQgPSB0cnVlO1xuXG4gICAgaWYgKHRoaXMuc291cmNlKVxuICAgIHtcbiAgICAgICAgdGhpcy5zb3VyY2UucmVtb3ZlRXZlbnRMaXN0ZW5lcignY2FucGxheScsIHRoaXMuX29uQ2FuUGxheSk7XG4gICAgICAgIHRoaXMuc291cmNlLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2NhbnBsYXl0aHJvdWdoJywgdGhpcy5fb25DYW5QbGF5KTtcblxuICAgICAgICB0aGlzLndpZHRoID0gdGhpcy5zb3VyY2UudmlkZW9XaWR0aDtcbiAgICAgICAgdGhpcy5oZWlnaHQgPSB0aGlzLnNvdXJjZS52aWRlb0hlaWdodDtcblxuICAgICAgICB0aGlzLnNvdXJjZS5wbGF5KCk7XG5cbiAgICAgICAgLy8gcHJldmVudCBtdWx0aXBsZSBsb2FkZWQgZGlzcGF0Y2hlcy4uXG4gICAgICAgIGlmICghdGhpcy5fX2xvYWRlZClcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5fX2xvYWRlZCA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLmVtaXQoJ2xvYWRlZCcsIHRoaXMpO1xuICAgICAgICB9XG4gICAgfVxufTtcblxuLyoqXG4gKiBEZXN0cm95cyB0aGlzIHRleHR1cmVcbiAqXG4gKi9cblZpZGVvQmFzZVRleHR1cmUucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoKVxue1xuICAgIGlmICh0aGlzLnNvdXJjZSAmJiB0aGlzLnNvdXJjZS5fcGl4aUlkKVxuICAgIHtcbiAgICAgICAgZGVsZXRlIHV0aWxzLkJhc2VUZXh0dXJlQ2FjaGVbIHRoaXMuc291cmNlLl9waXhpSWQgXTtcbiAgICAgICAgZGVsZXRlIHRoaXMuc291cmNlLl9waXhpSWQ7XG4gICAgfVxuXG4gICAgQmFzZVRleHR1cmUucHJvdG90eXBlLmRlc3Ryb3kuY2FsbCh0aGlzKTtcbn07XG5cbi8qKlxuICogTWltaWMgUGl4aSBCYXNlVGV4dHVyZS5mcm9tLi4uLiBtZXRob2QuXG4gKlxuICogQHN0YXRpY1xuICogQHBhcmFtIHZpZGVvIHtIVE1MVmlkZW9FbGVtZW50fVxuICogQHBhcmFtIHNjYWxlTW9kZSB7bnVtYmVyfSBTZWUge0BsaW5rIFBJWEkuU0NBTEVfTU9ERVN9IGZvciBwb3NzaWJsZSB2YWx1ZXNcbiAqIEByZXR1cm4ge1BJWEkuVmlkZW9CYXNlVGV4dHVyZX1cbiAqL1xuVmlkZW9CYXNlVGV4dHVyZS5mcm9tVmlkZW8gPSBmdW5jdGlvbiAodmlkZW8sIHNjYWxlTW9kZSlcbntcbiAgICBpZiAoIXZpZGVvLl9waXhpSWQpXG4gICAge1xuICAgICAgICB2aWRlby5fcGl4aUlkID0gJ3ZpZGVvXycgKyB1dGlscy51aWQoKTtcbiAgICB9XG5cbiAgICB2YXIgYmFzZVRleHR1cmUgPSB1dGlscy5CYXNlVGV4dHVyZUNhY2hlW3ZpZGVvLl9waXhpSWRdO1xuXG4gICAgaWYgKCFiYXNlVGV4dHVyZSlcbiAgICB7XG4gICAgICAgIGJhc2VUZXh0dXJlID0gbmV3IFZpZGVvQmFzZVRleHR1cmUodmlkZW8sIHNjYWxlTW9kZSk7XG4gICAgICAgIHV0aWxzLkJhc2VUZXh0dXJlQ2FjaGVbIHZpZGVvLl9waXhpSWQgXSA9IGJhc2VUZXh0dXJlO1xuICAgIH1cblxuICAgIHJldHVybiBiYXNlVGV4dHVyZTtcbn07XG5cbi8qKlxuICogSGVscGVyIGZ1bmN0aW9uIHRoYXQgY3JlYXRlcyBhIG5ldyBCYXNlVGV4dHVyZSBiYXNlZCBvbiB0aGUgZ2l2ZW4gdmlkZW8gZWxlbWVudC5cbiAqIFRoaXMgQmFzZVRleHR1cmUgY2FuIHRoZW4gYmUgdXNlZCB0byBjcmVhdGUgYSB0ZXh0dXJlXG4gKlxuICogQHN0YXRpY1xuICogQHBhcmFtIHZpZGVvU3JjIHtzdHJpbmd8b2JqZWN0fHN0cmluZ1tdfG9iamVjdFtdfSBUaGUgVVJMKHMpIGZvciB0aGUgdmlkZW8uXG4gKiBAcGFyYW0gW3ZpZGVvU3JjLnNyY10ge3N0cmluZ30gT25lIG9mIHRoZSBzb3VyY2UgdXJscyBmb3IgdGhlIHZpZGVvXG4gKiBAcGFyYW0gW3ZpZGVvU3JjLm1pbWVdIHtzdHJpbmd9IFRoZSBtaW1ldHlwZSBvZiB0aGUgdmlkZW8gKGUuZy4gJ3ZpZGVvL21wNCcpLiBJZiBub3Qgc3BlY2lmaWVkXG4gKiAgdGhlIHVybCdzIGV4dGVuc2lvbiB3aWxsIGJlIHVzZWQgYXMgdGhlIHNlY29uZCBwYXJ0IG9mIHRoZSBtaW1lIHR5cGUuXG4gKiBAcGFyYW0gc2NhbGVNb2RlIHtudW1iZXJ9IFNlZSB7QGxpbmsgUElYSS5TQ0FMRV9NT0RFU30gZm9yIHBvc3NpYmxlIHZhbHVlc1xuICogQHJldHVybiB7UElYSS5WaWRlb0Jhc2VUZXh0dXJlfVxuICovXG5WaWRlb0Jhc2VUZXh0dXJlLmZyb21VcmwgPSBmdW5jdGlvbiAodmlkZW9TcmMsIHNjYWxlTW9kZSlcbntcbiAgICB2YXIgdmlkZW8gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd2aWRlbycpO1xuXG4gICAgLy8gYXJyYXkgb2Ygb2JqZWN0cyBvciBzdHJpbmdzXG4gICAgaWYgKEFycmF5LmlzQXJyYXkodmlkZW9TcmMpKVxuICAgIHtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB2aWRlb1NyYy5sZW5ndGg7ICsraSlcbiAgICAgICAge1xuICAgICAgICAgICAgdmlkZW8uYXBwZW5kQ2hpbGQoY3JlYXRlU291cmNlKHZpZGVvU3JjW2ldLnNyYyB8fCB2aWRlb1NyY1tpXSwgdmlkZW9TcmNbaV0ubWltZSkpO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8vIHNpbmdsZSBvYmplY3Qgb3Igc3RyaW5nXG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgdmlkZW8uYXBwZW5kQ2hpbGQoY3JlYXRlU291cmNlKHZpZGVvU3JjLnNyYyB8fCB2aWRlb1NyYywgdmlkZW9TcmMubWltZSkpO1xuICAgIH1cblxuICAgIHZpZGVvLmxvYWQoKTtcbiAgICB2aWRlby5wbGF5KCk7XG5cbiAgICByZXR1cm4gVmlkZW9CYXNlVGV4dHVyZS5mcm9tVmlkZW8odmlkZW8sIHNjYWxlTW9kZSk7XG59O1xuXG5WaWRlb0Jhc2VUZXh0dXJlLmZyb21VcmxzID0gVmlkZW9CYXNlVGV4dHVyZS5mcm9tVXJsO1xuXG5mdW5jdGlvbiBjcmVhdGVTb3VyY2UocGF0aCwgdHlwZSlcbntcbiAgICBpZiAoIXR5cGUpXG4gICAge1xuICAgICAgICB0eXBlID0gJ3ZpZGVvLycgKyBwYXRoLnN1YnN0cihwYXRoLmxhc3RJbmRleE9mKCcuJykgKyAxKTtcbiAgICB9XG5cbiAgICB2YXIgc291cmNlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc291cmNlJyk7XG5cbiAgICBzb3VyY2Uuc3JjID0gcGF0aDtcbiAgICBzb3VyY2UudHlwZSA9IHR5cGU7XG5cbiAgICByZXR1cm4gc291cmNlO1xufVxuIiwidmFyIENPTlNUID0gcmVxdWlyZSgnLi4vY29uc3QnKSxcbiAgICBFdmVudEVtaXR0ZXIgPSByZXF1aXJlKCdldmVudGVtaXR0ZXIzJyksXG4gICAgLy8gSW50ZXJuYWwgZXZlbnQgdXNlZCBieSBjb21wb3NlZCBlbWl0dGVyXG4gICAgVElDSyA9ICd0aWNrJztcblxuLyoqXG4gKiBBIFRpY2tlciBjbGFzcyB0aGF0IHJ1bnMgYW4gdXBkYXRlIGxvb3AgdGhhdCBvdGhlciBvYmplY3RzIGxpc3RlbiB0by5cbiAqIFRoaXMgY2xhc3MgaXMgY29tcG9zZWQgYXJvdW5kIGFuIEV2ZW50RW1pdHRlciBvYmplY3QgdG8gYWRkIGxpc3RlbmVyc1xuICogbWVhbnQgZm9yIGV4ZWN1dGlvbiBvbiB0aGUgbmV4dCByZXF1ZXN0ZWQgYW5pbWF0aW9uIGZyYW1lLlxuICogQW5pbWF0aW9uIGZyYW1lcyBhcmUgcmVxdWVzdGVkIG9ubHkgd2hlbiBuZWNlc3NhcnksXG4gKiBlLmcuIFdoZW4gdGhlIHRpY2tlciBpcyBzdGFydGVkIGFuZCB0aGUgZW1pdHRlciBoYXMgbGlzdGVuZXJzLlxuICpcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWEkudGlja2VyXG4gKi9cbmZ1bmN0aW9uIFRpY2tlcigpXG57XG4gICAgdmFyIF90aGlzID0gdGhpcztcblxuICAgIC8qKlxuICAgICAqIEludGVybmFsIHRpY2sgbWV0aG9kIGJvdW5kIHRvIHRpY2tlciBpbnN0YW5jZS5cbiAgICAgKiBUaGlzIGlzIGJlY2F1c2UgaW4gZWFybHkgMjAxNSwgRnVuY3Rpb24uYmluZFxuICAgICAqIGlzIHN0aWxsIDYwJSBzbG93ZXIgaW4gaGlnaCBwZXJmb3JtYW5jZSBzY2VuYXJpb3MuXG4gICAgICogQWxzbyBzZXBhcmF0aW5nIGZyYW1lIHJlcXVlc3RzIGZyb20gdXBkYXRlIG1ldGhvZFxuICAgICAqIHNvIGxpc3RlbmVycyBtYXkgYmUgY2FsbGVkIGF0IGFueSB0aW1lIGFuZCB3aXRoXG4gICAgICogYW55IGFuaW1hdGlvbiBBUEksIGp1c3QgaW52b2tlIHRpY2tlci51cGRhdGUodGltZSkuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX3RpY2sgPSBmdW5jdGlvbiBfdGljayh0aW1lKSB7XG5cbiAgICAgICAgX3RoaXMuX3JlcXVlc3RJZCA9IG51bGw7XG5cbiAgICAgICAgaWYgKF90aGlzLnN0YXJ0ZWQpXG4gICAgICAgIHtcbiAgICAgICAgICAgIC8vIEludm9rZSBsaXN0ZW5lcnMgbm93XG4gICAgICAgICAgICBfdGhpcy51cGRhdGUodGltZSk7XG4gICAgICAgICAgICAvLyBMaXN0ZW5lciBzaWRlIGVmZmVjdHMgbWF5IGhhdmUgbW9kaWZpZWQgdGlja2VyIHN0YXRlLlxuICAgICAgICAgICAgaWYgKF90aGlzLnN0YXJ0ZWQgJiYgX3RoaXMuX3JlcXVlc3RJZCA9PT0gbnVsbCAmJiBfdGhpcy5fZW1pdHRlci5saXN0ZW5lcnMoVElDSywgdHJ1ZSkpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgX3RoaXMuX3JlcXVlc3RJZCA9IHJlcXVlc3RBbmltYXRpb25GcmFtZShfdGhpcy5fdGljayk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgLyoqXG4gICAgICogSW50ZXJuYWwgZW1pdHRlciB1c2VkIHRvIGZpcmUgJ3RpY2snIGV2ZW50XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9lbWl0dGVyID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gICAgLyoqXG4gICAgICogSW50ZXJuYWwgY3VycmVudCBmcmFtZSByZXF1ZXN0IElEXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9yZXF1ZXN0SWQgPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogSW50ZXJuYWwgdmFsdWUgbWFuYWdlZCBieSBtaW5GUFMgcHJvcGVydHkgc2V0dGVyIGFuZCBnZXR0ZXIuXG4gICAgICogVGhpcyBpcyB0aGUgbWF4aW11bSBhbGxvd2VkIG1pbGxpc2Vjb25kcyBiZXR3ZWVuIHVwZGF0ZXMuXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9tYXhFbGFwc2VkTVMgPSAxMDA7XG5cbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIG9yIG5vdCB0aGlzIHRpY2tlciBzaG91bGQgaW52b2tlIHRoZSBtZXRob2RcbiAgICAgKiB7QGxpbmsgUElYSS50aWNrZXIuVGlja2VyI3N0YXJ0fSBhdXRvbWF0aWNhbGx5XG4gICAgICogd2hlbiBhIGxpc3RlbmVyIGlzIGFkZGVkLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgICAqL1xuICAgIHRoaXMuYXV0b1N0YXJ0ID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBTY2FsYXIgdGltZSB2YWx1ZSBmcm9tIGxhc3QgZnJhbWUgdG8gdGhpcyBmcmFtZS5cbiAgICAgKiBUaGlzIHZhbHVlIGlzIGNhcHBlZCBieSBzZXR0aW5nIHtAbGluayBQSVhJLnRpY2tlci5UaWNrZXIjbWluRlBTfVxuICAgICAqIGFuZCBpcyBzY2FsZWQgd2l0aCB7QGxpbmsgUElYSS50aWNrZXIuVGlja2VyI3NwZWVkfS5cbiAgICAgKiAqKk5vdGU6KiogVGhlIGNhcCBtYXkgYmUgZXhjZWVkZWQgYnkgc2NhbGluZy5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAxXG4gICAgICovXG4gICAgdGhpcy5kZWx0YVRpbWUgPSAxO1xuXG4gICAgLyoqXG4gICAgICogVGltZSBlbGFwc2VkIGluIG1pbGxpc2Vjb25kcyBmcm9tIGxhc3QgZnJhbWUgdG8gdGhpcyBmcmFtZS5cbiAgICAgKiBPcHBvc2VkIHRvIHdoYXQgdGhlIHNjYWxhciB7QGxpbmsgUElYSS50aWNrZXIuVGlja2VyI2RlbHRhVGltZX1cbiAgICAgKiBpcyBiYXNlZCwgdGhpcyB2YWx1ZSBpcyBuZWl0aGVyIGNhcHBlZCBub3Igc2NhbGVkLlxuICAgICAqIElmIHRoZSBwbGF0Zm9ybSBzdXBwb3J0cyBET01IaWdoUmVzVGltZVN0YW1wLFxuICAgICAqIHRoaXMgdmFsdWUgd2lsbCBoYXZlIGEgcHJlY2lzaW9uIG9mIDEgwrVzLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7RE9NSGlnaFJlc1RpbWVTdGFtcHxudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMSAvIFRBUkdFVF9GUE1TXG4gICAgICovXG4gICAgdGhpcy5lbGFwc2VkTVMgPSAxIC8gQ09OU1QuVEFSR0VUX0ZQTVM7IC8vIGRlZmF1bHQgdG8gdGFyZ2V0IGZyYW1lIHRpbWVcblxuICAgIC8qKlxuICAgICAqIFRoZSBsYXN0IHRpbWUge0BsaW5rIFBJWEkudGlja2VyLlRpY2tlciN1cGRhdGV9IHdhcyBpbnZva2VkLlxuICAgICAqIFRoaXMgdmFsdWUgaXMgYWxzbyByZXNldCBpbnRlcm5hbGx5IG91dHNpZGUgb2YgaW52b2tpbmdcbiAgICAgKiB1cGRhdGUsIGJ1dCBvbmx5IHdoZW4gYSBuZXcgYW5pbWF0aW9uIGZyYW1lIGlzIHJlcXVlc3RlZC5cbiAgICAgKiBJZiB0aGUgcGxhdGZvcm0gc3VwcG9ydHMgRE9NSGlnaFJlc1RpbWVTdGFtcCxcbiAgICAgKiB0aGlzIHZhbHVlIHdpbGwgaGF2ZSBhIHByZWNpc2lvbiBvZiAxIMK1cy5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge0RPTUhpZ2hSZXNUaW1lU3RhbXB8bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDBcbiAgICAgKi9cbiAgICB0aGlzLmxhc3RUaW1lID0gMDtcblxuICAgIC8qKlxuICAgICAqIEZhY3RvciBvZiBjdXJyZW50IHtAbGluayBQSVhJLnRpY2tlci5UaWNrZXIjZGVsdGFUaW1lfS5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIC8vIFNjYWxlcyB0aWNrZXIuZGVsdGFUaW1lIHRvIHdoYXQgd291bGQgYmVcbiAgICAgKiAvLyB0aGUgZXF1aXZhbGVudCBvZiBhcHByb3hpbWF0ZWx5IDEyMCBGUFNcbiAgICAgKiB0aWNrZXIuc3BlZWQgPSAyO1xuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDFcbiAgICAgKi9cbiAgICB0aGlzLnNwZWVkID0gMTtcblxuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgb3Igbm90IHRoaXMgdGlja2VyIGhhcyBiZWVuIHN0YXJ0ZWQuXG4gICAgICogYHRydWVgIGlmIHtAbGluayBQSVhJLnRpY2tlci5UaWNrZXIjc3RhcnR9IGhhcyBiZWVuIGNhbGxlZC5cbiAgICAgKiBgZmFsc2VgIGlmIHtAbGluayBQSVhJLnRpY2tlci5UaWNrZXIjc3RvcH0gaGFzIGJlZW4gY2FsbGVkLlxuICAgICAqIFdoaWxlIGBmYWxzZWAsIHRoaXMgdmFsdWUgbWF5IGNoYW5nZSB0byBgdHJ1ZWAgaW4gdGhlXG4gICAgICogZXZlbnQgb2Yge0BsaW5rIFBJWEkudGlja2VyLlRpY2tlciNhdXRvU3RhcnR9IGJlaW5nIGB0cnVlYFxuICAgICAqIGFuZCBhIGxpc3RlbmVyIGlzIGFkZGVkLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgICAqL1xuICAgIHRoaXMuc3RhcnRlZCA9IGZhbHNlO1xufVxuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhUaWNrZXIucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogVGhlIGZyYW1lcyBwZXIgc2Vjb25kIGF0IHdoaWNoIHRoaXMgdGlja2VyIGlzIHJ1bm5pbmcuXG4gICAgICogVGhlIGRlZmF1bHQgaXMgYXBwcm94aW1hdGVseSA2MCBpbiBtb3N0IG1vZGVybiBicm93c2Vycy5cbiAgICAgKiAqKk5vdGU6KiogVGhpcyBkb2VzIG5vdCBmYWN0b3IgaW4gdGhlIHZhbHVlIG9mXG4gICAgICoge0BsaW5rIFBJWEkudGlja2VyLlRpY2tlciNzcGVlZH0sIHdoaWNoIGlzIHNwZWNpZmljXG4gICAgICogdG8gc2NhbGluZyB7QGxpbmsgUElYSS50aWNrZXIuVGlja2VyI2RlbHRhVGltZX0uXG4gICAgICpcbiAgICAgKiBAbWVtYmVyXG4gICAgICogQG1lbWJlcm9mIFBJWEkudGlja2VyLlRpY2tlciNcbiAgICAgKiBAcmVhZG9ubHlcbiAgICAgKi9cbiAgICBGUFM6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbigpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiAxMDAwIC8gdGhpcy5lbGFwc2VkTVM7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogTWFuYWdlcyB0aGUgbWF4aW11bSBhbW91bnQgb2YgbWlsbGlzZWNvbmRzIGFsbG93ZWQgdG9cbiAgICAgKiBlbGFwc2UgYmV0d2VlbiBpbnZva2luZyB7QGxpbmsgUElYSS50aWNrZXIuVGlja2VyI3VwZGF0ZX0uXG4gICAgICogVGhpcyB2YWx1ZSBpcyB1c2VkIHRvIGNhcCB7QGxpbmsgUElYSS50aWNrZXIuVGlja2VyI2RlbHRhVGltZX0sXG4gICAgICogYnV0IGRvZXMgbm90IGVmZmVjdCB0aGUgbWVhc3VyZWQgdmFsdWUgb2Yge0BsaW5rIFBJWEkudGlja2VyLlRpY2tlciNGUFN9LlxuICAgICAqIFdoZW4gc2V0dGluZyB0aGlzIHByb3BlcnR5IGl0IGlzIGNsYW1wZWQgdG8gYSB2YWx1ZSBiZXR3ZWVuXG4gICAgICogYDBgIGFuZCBgUElYSS5UQVJHRVRfRlBNUyAqIDEwMDBgLlxuICAgICAqXG4gICAgICogQG1lbWJlclxuICAgICAqIEBtZW1iZXJvZiBQSVhJLnRpY2tlci5UaWNrZXIjXG4gICAgICogQGRlZmF1bHQgMTBcbiAgICAgKi9cbiAgICBtaW5GUFM6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbigpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiAxMDAwIC8gdGhpcy5fbWF4RWxhcHNlZE1TO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uKGZwcylcbiAgICAgICAge1xuICAgICAgICAgICAgLy8gQ2xhbXA6IDAgdG8gVEFSR0VUX0ZQTVNcbiAgICAgICAgICAgIHZhciBtaW5GUE1TID0gTWF0aC5taW4oTWF0aC5tYXgoMCwgZnBzKSAvIDEwMDAsIENPTlNULlRBUkdFVF9GUE1TKTtcbiAgICAgICAgICAgIHRoaXMuX21heEVsYXBzZWRNUyA9IDEgLyBtaW5GUE1TO1xuICAgICAgICB9XG4gICAgfVxufSk7XG5cbi8qKlxuICogQ29uZGl0aW9uYWxseSByZXF1ZXN0cyBhIG5ldyBhbmltYXRpb24gZnJhbWUuXG4gKiBJZiBhIGZyYW1lIGhhcyBub3QgYWxyZWFkeSBiZWVuIHJlcXVlc3RlZCwgYW5kIGlmIHRoZSBpbnRlcm5hbFxuICogZW1pdHRlciBoYXMgbGlzdGVuZXJzLCBhIG5ldyBmcmFtZSBpcyByZXF1ZXN0ZWQuXG4gKlxuICogQHByaXZhdGVcbiAqL1xuVGlja2VyLnByb3RvdHlwZS5fcmVxdWVzdElmTmVlZGVkID0gZnVuY3Rpb24gX3JlcXVlc3RJZk5lZWRlZCgpXG57XG4gICAgaWYgKHRoaXMuX3JlcXVlc3RJZCA9PT0gbnVsbCAmJiB0aGlzLl9lbWl0dGVyLmxpc3RlbmVycyhUSUNLLCB0cnVlKSlcbiAgICB7XG4gICAgICAgIC8vIGVuc3VyZSBjYWxsYmFja3MgZ2V0IGNvcnJlY3QgZGVsdGFcbiAgICAgICAgdGhpcy5sYXN0VGltZSA9IHBlcmZvcm1hbmNlLm5vdygpO1xuICAgICAgICB0aGlzLl9yZXF1ZXN0SWQgPSByZXF1ZXN0QW5pbWF0aW9uRnJhbWUodGhpcy5fdGljayk7XG4gICAgfVxufTtcblxuLyoqXG4gKiBDb25kaXRpb25hbGx5IGNhbmNlbHMgYSBwZW5kaW5nIGFuaW1hdGlvbiBmcmFtZS5cbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5UaWNrZXIucHJvdG90eXBlLl9jYW5jZWxJZk5lZWRlZCA9IGZ1bmN0aW9uIF9jYW5jZWxJZk5lZWRlZCgpXG57XG4gICAgaWYgKHRoaXMuX3JlcXVlc3RJZCAhPT0gbnVsbClcbiAgICB7XG4gICAgICAgIGNhbmNlbEFuaW1hdGlvbkZyYW1lKHRoaXMuX3JlcXVlc3RJZCk7XG4gICAgICAgIHRoaXMuX3JlcXVlc3RJZCA9IG51bGw7XG4gICAgfVxufTtcblxuLyoqXG4gKiBDb25kaXRpb25hbGx5IHJlcXVlc3RzIGEgbmV3IGFuaW1hdGlvbiBmcmFtZS5cbiAqIElmIHRoZSB0aWNrZXIgaGFzIGJlZW4gc3RhcnRlZCBpdCBjaGVja3MgaWYgYSBmcmFtZSBoYXMgbm90IGFscmVhZHlcbiAqIGJlZW4gcmVxdWVzdGVkLCBhbmQgaWYgdGhlIGludGVybmFsIGVtaXR0ZXIgaGFzIGxpc3RlbmVycy4gSWYgdGhlc2VcbiAqIGNvbmRpdGlvbnMgYXJlIG1ldCwgYSBuZXcgZnJhbWUgaXMgcmVxdWVzdGVkLiBJZiB0aGUgdGlja2VyIGhhcyBub3RcbiAqIGJlZW4gc3RhcnRlZCwgYnV0IGF1dG9TdGFydCBpcyBgdHJ1ZWAsIHRoZW4gdGhlIHRpY2tlciBzdGFydHMgbm93LFxuICogYW5kIGNvbnRpbnVlcyB3aXRoIHRoZSBwcmV2aW91cyBjb25kaXRpb25zIHRvIHJlcXVlc3QgYSBuZXcgZnJhbWUuXG4gKlxuICogQHByaXZhdGVcbiAqL1xuVGlja2VyLnByb3RvdHlwZS5fc3RhcnRJZlBvc3NpYmxlID0gZnVuY3Rpb24gX3N0YXJ0SWZQb3NzaWJsZSgpXG57XG4gICAgaWYgKHRoaXMuc3RhcnRlZClcbiAgICB7XG4gICAgICAgIHRoaXMuX3JlcXVlc3RJZk5lZWRlZCgpO1xuICAgIH1cbiAgICBlbHNlIGlmICh0aGlzLmF1dG9TdGFydClcbiAgICB7XG4gICAgICAgIHRoaXMuc3RhcnQoKTtcbiAgICB9XG59O1xuXG4vKipcbiAqIENhbGxzIHtAbGluayBtb2R1bGU6ZXZlbnRlbWl0dGVyMy5FdmVudEVtaXR0ZXIjb259IGludGVybmFsbHkgZm9yIHRoZVxuICogaW50ZXJuYWwgJ3RpY2snIGV2ZW50LiBJdCBjaGVja3MgaWYgdGhlIGVtaXR0ZXIgaGFzIGxpc3RlbmVycyxcbiAqIGFuZCBpZiBzbyBpdCByZXF1ZXN0cyBhIG5ldyBhbmltYXRpb24gZnJhbWUgYXQgdGhpcyBwb2ludC5cbiAqXG4gKiBAcGFyYW0gZm4ge0Z1bmN0aW9ufSBUaGUgbGlzdGVuZXIgZnVuY3Rpb24gdG8gYmUgYWRkZWQgZm9yIHVwZGF0ZXNcbiAqIEBwYXJhbSBbY29udGV4dF0ge0Z1bmN0aW9ufSBUaGUgbGlzdGVuZXIgY29udGV4dFxuICogQHJldHVybnMge1BJWEkudGlja2VyLlRpY2tlcn0gdGhpc1xuICovXG5UaWNrZXIucHJvdG90eXBlLmFkZCA9IGZ1bmN0aW9uIGFkZChmbiwgY29udGV4dClcbntcbiAgICB0aGlzLl9lbWl0dGVyLm9uKFRJQ0ssIGZuLCBjb250ZXh0KTtcblxuICAgIHRoaXMuX3N0YXJ0SWZQb3NzaWJsZSgpO1xuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIENhbGxzIHtAbGluayBtb2R1bGU6ZXZlbnRlbWl0dGVyMy5FdmVudEVtaXR0ZXIjb25jZX0gaW50ZXJuYWxseSBmb3IgdGhlXG4gKiBpbnRlcm5hbCAndGljaycgZXZlbnQuIEl0IGNoZWNrcyBpZiB0aGUgZW1pdHRlciBoYXMgbGlzdGVuZXJzLFxuICogYW5kIGlmIHNvIGl0IHJlcXVlc3RzIGEgbmV3IGFuaW1hdGlvbiBmcmFtZSBhdCB0aGlzIHBvaW50LlxuICpcbiAqIEBwYXJhbSBmbiB7RnVuY3Rpb259IFRoZSBsaXN0ZW5lciBmdW5jdGlvbiB0byBiZSBhZGRlZCBmb3Igb25lIHVwZGF0ZVxuICogQHBhcmFtIFtjb250ZXh0XSB7RnVuY3Rpb259IFRoZSBsaXN0ZW5lciBjb250ZXh0XG4gKiBAcmV0dXJucyB7UElYSS50aWNrZXIuVGlja2VyfSB0aGlzXG4gKi9cblRpY2tlci5wcm90b3R5cGUuYWRkT25jZSA9IGZ1bmN0aW9uIGFkZE9uY2UoZm4sIGNvbnRleHQpXG57XG4gICAgdGhpcy5fZW1pdHRlci5vbmNlKFRJQ0ssIGZuLCBjb250ZXh0KTtcblxuICAgIHRoaXMuX3N0YXJ0SWZQb3NzaWJsZSgpO1xuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIENhbGxzIHtAbGluayBtb2R1bGU6ZXZlbnRlbWl0dGVyMy5FdmVudEVtaXR0ZXIjb2ZmfSBpbnRlcm5hbGx5IGZvciAndGljaycgZXZlbnQuXG4gKiBJdCBjaGVja3MgaWYgdGhlIGVtaXR0ZXIgaGFzIGxpc3RlbmVycyBmb3IgJ3RpY2snIGV2ZW50LlxuICogSWYgaXQgZG9lcywgdGhlbiBpdCBjYW5jZWxzIHRoZSBhbmltYXRpb24gZnJhbWUuXG4gKlxuICogQHBhcmFtIFtmbl0ge0Z1bmN0aW9ufSBUaGUgbGlzdGVuZXIgZnVuY3Rpb24gdG8gYmUgcmVtb3ZlZFxuICogQHBhcmFtIFtjb250ZXh0XSB7RnVuY3Rpb259IFRoZSBsaXN0ZW5lciBjb250ZXh0IHRvIGJlIHJlbW92ZWRcbiAqIEByZXR1cm5zIHtQSVhJLnRpY2tlci5UaWNrZXJ9IHRoaXNcbiAqL1xuVGlja2VyLnByb3RvdHlwZS5yZW1vdmUgPSBmdW5jdGlvbiByZW1vdmUoZm4sIGNvbnRleHQpXG57XG4gICAgdGhpcy5fZW1pdHRlci5vZmYoVElDSywgZm4sIGNvbnRleHQpO1xuXG4gICAgaWYgKCF0aGlzLl9lbWl0dGVyLmxpc3RlbmVycyhUSUNLLCB0cnVlKSlcbiAgICB7XG4gICAgICAgIHRoaXMuX2NhbmNlbElmTmVlZGVkKCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIFN0YXJ0cyB0aGUgdGlja2VyLiBJZiB0aGUgdGlja2VyIGhhcyBsaXN0ZW5lcnNcbiAqIGEgbmV3IGFuaW1hdGlvbiBmcmFtZSBpcyByZXF1ZXN0ZWQgYXQgdGhpcyBwb2ludC5cbiAqL1xuVGlja2VyLnByb3RvdHlwZS5zdGFydCA9IGZ1bmN0aW9uIHN0YXJ0KClcbntcbiAgICBpZiAoIXRoaXMuc3RhcnRlZClcbiAgICB7XG4gICAgICAgIHRoaXMuc3RhcnRlZCA9IHRydWU7XG4gICAgICAgIHRoaXMuX3JlcXVlc3RJZk5lZWRlZCgpO1xuICAgIH1cbn07XG5cbi8qKlxuICogU3RvcHMgdGhlIHRpY2tlci4gSWYgdGhlIHRpY2tlciBoYXMgcmVxdWVzdGVkXG4gKiBhbiBhbmltYXRpb24gZnJhbWUgaXQgaXMgY2FuY2VsZWQgYXQgdGhpcyBwb2ludC5cbiAqL1xuVGlja2VyLnByb3RvdHlwZS5zdG9wID0gZnVuY3Rpb24gc3RvcCgpXG57XG4gICAgaWYgKHRoaXMuc3RhcnRlZClcbiAgICB7XG4gICAgICAgIHRoaXMuc3RhcnRlZCA9IGZhbHNlO1xuICAgICAgICB0aGlzLl9jYW5jZWxJZk5lZWRlZCgpO1xuICAgIH1cbn07XG5cbi8qKlxuICogVHJpZ2dlcnMgYW4gdXBkYXRlLiBBbiB1cGRhdGUgZW50YWlscyBzZXR0aW5nIHRoZVxuICogY3VycmVudCB7QGxpbmsgUElYSS50aWNrZXIuVGlja2VyI2VsYXBzZWRNU30sXG4gKiB0aGUgY3VycmVudCB7QGxpbmsgUElYSS50aWNrZXIuVGlja2VyI2RlbHRhVGltZX0sXG4gKiBpbnZva2luZyBhbGwgbGlzdGVuZXJzIHdpdGggY3VycmVudCBkZWx0YVRpbWUsXG4gKiBhbmQgdGhlbiBmaW5hbGx5IHNldHRpbmcge0BsaW5rIFBJWEkudGlja2VyLlRpY2tlciNsYXN0VGltZX1cbiAqIHdpdGggdGhlIHZhbHVlIG9mIGN1cnJlbnRUaW1lIHRoYXQgd2FzIHByb3ZpZGVkLlxuICogVGhpcyBtZXRob2Qgd2lsbCBiZSBjYWxsZWQgYXV0b21hdGljYWxseSBieSBhbmltYXRpb25cbiAqIGZyYW1lIGNhbGxiYWNrcyBpZiB0aGUgdGlja2VyIGluc3RhbmNlIGhhcyBiZWVuIHN0YXJ0ZWRcbiAqIGFuZCBsaXN0ZW5lcnMgYXJlIGFkZGVkLlxuICpcbiAqIEBwYXJhbSBbY3VycmVudFRpbWU9cGVyZm9ybWFuY2Uubm93KCldIHtET01IaWdoUmVzVGltZVN0YW1wfG51bWJlcn0gdGhlIGN1cnJlbnQgdGltZSBvZiBleGVjdXRpb25cbiAqL1xuVGlja2VyLnByb3RvdHlwZS51cGRhdGUgPSBmdW5jdGlvbiB1cGRhdGUoY3VycmVudFRpbWUpXG57XG4gICAgdmFyIGVsYXBzZWRNUztcblxuICAgIC8vIEFsbG93IGNhbGxpbmcgdXBkYXRlIGRpcmVjdGx5IHdpdGggZGVmYXVsdCBjdXJyZW50VGltZS5cbiAgICBjdXJyZW50VGltZSA9IGN1cnJlbnRUaW1lIHx8IHBlcmZvcm1hbmNlLm5vdygpO1xuICAgIC8vIFNhdmUgdW5jYXBwZWQgZWxhcHNlZE1TIGZvciBtZWFzdXJlbWVudFxuICAgIGVsYXBzZWRNUyA9IHRoaXMuZWxhcHNlZE1TID0gY3VycmVudFRpbWUgLSB0aGlzLmxhc3RUaW1lO1xuXG4gICAgLy8gY2FwIHRoZSBtaWxsaXNlY29uZHMgZWxhcHNlZCB1c2VkIGZvciBkZWx0YVRpbWVcbiAgICBpZiAoZWxhcHNlZE1TID4gdGhpcy5fbWF4RWxhcHNlZE1TKVxuICAgIHtcbiAgICAgICAgZWxhcHNlZE1TID0gdGhpcy5fbWF4RWxhcHNlZE1TO1xuICAgIH1cblxuICAgIHRoaXMuZGVsdGFUaW1lID0gZWxhcHNlZE1TICogQ09OU1QuVEFSR0VUX0ZQTVMgKiB0aGlzLnNwZWVkO1xuXG4gICAgLy8gSW52b2tlIGxpc3RlbmVycyBhZGRlZCB0byBpbnRlcm5hbCBlbWl0dGVyXG4gICAgdGhpcy5fZW1pdHRlci5lbWl0KFRJQ0ssIHRoaXMuZGVsdGFUaW1lKTtcblxuICAgIHRoaXMubGFzdFRpbWUgPSBjdXJyZW50VGltZTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gVGlja2VyO1xuIiwidmFyIFRpY2tlciA9IHJlcXVpcmUoJy4vVGlja2VyJyk7XG5cbi8qKlxuICogVGhlIHNoYXJlZCB0aWNrZXIgaW5zdGFuY2UgdXNlZCBieSB7QGxpbmsgUElYSS5leHRyYXMuTW92aWVDbGlwfS5cbiAqIGFuZCBieSB7QGxpbmsgUElYSS5pbnRlcmFjdGlvbi5JbnRlcmFjdGlvbk1hbmFnZXJ9LlxuICogVGhlIHByb3BlcnR5IHtAbGluayBQSVhJLnRpY2tlci5UaWNrZXIjYXV0b1N0YXJ0fSBpcyBzZXQgdG8gYHRydWVgXG4gKiBmb3IgdGhpcyBpbnN0YW5jZS4gUGxlYXNlIGZvbGxvdyB0aGUgZXhhbXBsZXMgZm9yIHVzYWdlLCBpbmNsdWRpbmdcbiAqIGhvdyB0byBvcHQtb3V0IG9mIGF1dG8tc3RhcnRpbmcgdGhlIHNoYXJlZCB0aWNrZXIuXG4gKlxuICogQGV4YW1wbGVcbiAqIHZhciB0aWNrZXIgPSBQSVhJLnRpY2tlci5zaGFyZWQ7XG4gKiAvLyBTZXQgdGhpcyB0byBwcmV2ZW50IHN0YXJ0aW5nIHRoaXMgdGlja2VyIHdoZW4gbGlzdGVuZXJzIGFyZSBhZGRlZC5cbiAqIC8vIEJ5IGRlZmF1bHQgdGhpcyBpcyB0cnVlIG9ubHkgZm9yIHRoZSBQSVhJLnRpY2tlci5zaGFyZWQgaW5zdGFuY2UuXG4gKiB0aWNrZXIuYXV0b1N0YXJ0ID0gZmFsc2U7XG4gKiAvLyBGWUksIGNhbGwgdGhpcyB0byBlbnN1cmUgdGhlIHRpY2tlciBpcyBzdG9wcGVkLiBJdCBzaG91bGQgYmUgc3RvcHBlZFxuICogLy8gaWYgeW91IGhhdmUgbm90IGF0dGVtcHRlZCB0byByZW5kZXIgYW55dGhpbmcgeWV0LlxuICogdGlja2VyLnN0b3AoKTtcbiAqIC8vIENhbGwgdGhpcyB3aGVuIHlvdSBhcmUgcmVhZHkgZm9yIGEgcnVubmluZyBzaGFyZWQgdGlja2VyLlxuICogdGlja2VyLnN0YXJ0KCk7XG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIFlvdSBtYXkgdXNlIHRoZSBzaGFyZWQgdGlja2VyIHRvIHJlbmRlci4uLlxuICogdmFyIHJlbmRlcmVyID0gUElYSS5hdXRvRGV0ZWN0UmVuZGVyZXIoODAwLCA2MDApO1xuICogdmFyIHN0YWdlID0gbmV3IFBJWEkuQ29udGFpbmVyKCk7XG4gKiB2YXIgaW50ZXJhY3Rpb25NYW5hZ2VyID0gUElYSS5pbnRlcmFjdGlvbi5JbnRlcmFjdGlvbk1hbmFnZXIocmVuZGVyZXIpO1xuICogZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChyZW5kZXJlci52aWV3KTtcbiAqIHRpY2tlci5hZGQoZnVuY3Rpb24gKHRpbWUpIHtcbiAqICAgICByZW5kZXJlci5yZW5kZXIoc3RhZ2UpO1xuICogfSk7XG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIE9yIHlvdSBjYW4ganVzdCB1cGRhdGUgaXQgbWFudWFsbHkuXG4gKiB0aWNrZXIuYXV0b1N0YXJ0ID0gZmFsc2U7XG4gKiB0aWNrZXIuc3RvcCgpO1xuICogZnVuY3Rpb24gYW5pbWF0ZSh0aW1lKSB7XG4gKiAgICAgdGlja2VyLnVwZGF0ZSh0aW1lKTtcbiAqICAgICByZW5kZXJlci5yZW5kZXIoc3RhZ2UpO1xuICogICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZShhbmltYXRlKTtcbiAqIH1cbiAqIGFuaW1hdGUocGVyZm9ybWFuY2Uubm93KCkpO1xuICpcbiAqIEB0eXBlIHtQSVhJLnRpY2tlci5UaWNrZXJ9XG4gKiBAbWVtYmVyb2YgUElYSS50aWNrZXJcbiAqL1xudmFyIHNoYXJlZCA9IG5ldyBUaWNrZXIoKTtcbnNoYXJlZC5hdXRvU3RhcnQgPSB0cnVlO1xuXG4vKipcbiAqIEBuYW1lc3BhY2UgUElYSS50aWNrZXJcbiAqL1xubW9kdWxlLmV4cG9ydHMgPSB7XG4gICAgc2hhcmVkOiBzaGFyZWQsXG4gICAgVGlja2VyOiBUaWNrZXJcbn07XG4iLCIvKipcbiAqIEdlbmVyaWMgTWFzayBTdGFjayBkYXRhIHN0cnVjdHVyZVxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICovXG5cbnZhciBHTF9NQVAgPSB7fTtcblxuXG52YXIgY3JlYXRlSW5kaWNlc0ZvclF1YWRzID0gZnVuY3Rpb24gKHNpemUpXG57XG4gICAgLy8gdGhlIHRvdGFsIG51bWJlciBvZiBpbmRpY2VzIGluIG91ciBhcnJheSwgdGhlcmUgYXJlIDYgcG9pbnRzIHBlciBxdWFkLlxuICAgXG4gICAgdmFyIHRvdGFsSW5kaWNlcyA9IHNpemUgKiA2O1xuXG4gICAgdmFyIGluZGljZXMgPSBuZXcgVWludDE2QXJyYXkodG90YWxJbmRpY2VzKTtcblxuXHQvLyBmaWxsIHRoZSBpbmRpY2VzIHdpdGggdGhlIHF1YWRzIHRvIGRyYXdcbiAgICBmb3IgKHZhciBpPTAsIGo9MDsgaSA8IHRvdGFsSW5kaWNlczsgaSArPSA2LCBqICs9IDQpXG4gICAge1xuICAgICAgICBpbmRpY2VzW2kgKyAwXSA9IGogKyAwO1xuICAgICAgICBpbmRpY2VzW2kgKyAxXSA9IGogKyAxO1xuICAgICAgICBpbmRpY2VzW2kgKyAyXSA9IGogKyAyO1xuICAgICAgICBpbmRpY2VzW2kgKyAzXSA9IGogKyAwO1xuICAgICAgICBpbmRpY2VzW2kgKyA0XSA9IGogKyAyO1xuICAgICAgICBpbmRpY2VzW2kgKyA1XSA9IGogKyAzO1xuICAgIH1cblxuICAgIHJldHVybiBpbmRpY2VzO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBjcmVhdGVJbmRpY2VzRm9yUXVhZHM7IiwidmFyIENPTlNUID0gcmVxdWlyZSgnLi4vY29uc3QnKTtcblxuLyoqXG4gKiBAbmFtZXNwYWNlIFBJWEkudXRpbHNcbiAqL1xudmFyIHV0aWxzID0gbW9kdWxlLmV4cG9ydHMgPSB7XG4gICAgX3VpZDogMCxcbiAgICBfc2FpZEhlbGxvOiBmYWxzZSxcblxuICAgIEV2ZW50RW1pdHRlcjogICByZXF1aXJlKCdldmVudGVtaXR0ZXIzJyksXG4gICAgcGx1Z2luVGFyZ2V0OiAgIHJlcXVpcmUoJy4vcGx1Z2luVGFyZ2V0JyksXG4gICAgYXN5bmM6ICAgICAgICAgIHJlcXVpcmUoJ2FzeW5jJyksXG5cbiAgICAvKipcbiAgICAgKiBHZXRzIHRoZSBuZXh0IHVuaXF1ZSBpZGVudGlmaWVyXG4gICAgICpcbiAgICAgKiBAcmV0dXJuIHtudW1iZXJ9IFRoZSBuZXh0IHVuaXF1ZSBpZGVudGlmaWVyIHRvIHVzZS5cbiAgICAgKi9cbiAgICB1aWQ6IGZ1bmN0aW9uICgpXG4gICAge1xuICAgICAgICByZXR1cm4gKyt1dGlscy5fdWlkO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBDb252ZXJ0cyBhIGhleCBjb2xvciBudW1iZXIgdG8gYW4gW1IsIEcsIEJdIGFycmF5XG4gICAgICpcbiAgICAgKiBAcGFyYW0gaGV4IHtudW1iZXJ9XG4gICAgICogQHBhcmFtICB7bnVtYmVyW119IFtvdXQ9W11dXG4gICAgICogQHJldHVybiB7bnVtYmVyW119IEFuIGFycmF5IHJlcHJlc2VudGluZyB0aGUgW1IsIEcsIEJdIG9mIHRoZSBjb2xvci5cbiAgICAgKi9cbiAgICBoZXgycmdiOiBmdW5jdGlvbiAoaGV4LCBvdXQpXG4gICAge1xuICAgICAgICBvdXQgPSBvdXQgfHwgW107XG5cbiAgICAgICAgb3V0WzBdID0gKGhleCA+PiAxNiAmIDB4RkYpIC8gMjU1O1xuICAgICAgICBvdXRbMV0gPSAoaGV4ID4+IDggJiAweEZGKSAvIDI1NTtcbiAgICAgICAgb3V0WzJdID0gKGhleCAmIDB4RkYpIC8gMjU1O1xuXG4gICAgICAgIHJldHVybiBvdXQ7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIENvbnZlcnRzIGEgaGV4IGNvbG9yIG51bWJlciB0byBhIHN0cmluZy5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBoZXgge251bWJlcn1cbiAgICAgKiBAcmV0dXJuIHtzdHJpbmd9IFRoZSBzdHJpbmcgY29sb3IuXG4gICAgICovXG4gICAgaGV4MnN0cmluZzogZnVuY3Rpb24gKGhleClcbiAgICB7XG4gICAgICAgIGhleCA9IGhleC50b1N0cmluZygxNik7XG4gICAgICAgIGhleCA9ICcwMDAwMDAnLnN1YnN0cigwLCA2IC0gaGV4Lmxlbmd0aCkgKyBoZXg7XG5cbiAgICAgICAgcmV0dXJuICcjJyArIGhleDtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQ29udmVydHMgYSBjb2xvciBhcyBhbiBbUiwgRywgQl0gYXJyYXkgdG8gYSBoZXggbnVtYmVyXG4gICAgICpcbiAgICAgKiBAcGFyYW0gcmdiIHtudW1iZXJbXX1cbiAgICAgKiBAcmV0dXJuIHtudW1iZXJ9IFRoZSBjb2xvciBudW1iZXJcbiAgICAgKi9cbiAgICByZ2IyaGV4OiBmdW5jdGlvbiAocmdiKVxuICAgIHtcbiAgICAgICAgcmV0dXJuICgocmdiWzBdKjI1NSA8PCAxNikgKyAocmdiWzFdKjI1NSA8PCA4KSArIHJnYlsyXSoyNTUpO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBDaGVja3Mgd2hldGhlciB0aGUgQ2FudmFzIEJsZW5kTW9kZXMgYXJlIHN1cHBvcnRlZCBieSB0aGUgY3VycmVudCBicm93c2VyXG4gICAgICpcbiAgICAgKiBAcmV0dXJuIHtib29sZWFufSB3aGV0aGVyIHRoZXkgYXJlIHN1cHBvcnRlZFxuICAgICAqL1xuICAgIGNhblVzZU5ld0NhbnZhc0JsZW5kTW9kZXM6IGZ1bmN0aW9uICgpXG4gICAge1xuICAgICAgICBpZiAodHlwZW9mIGRvY3VtZW50ID09PSAndW5kZWZpbmVkJylcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIHBuZ0hlYWQgPSAnZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFBUUFBQUFCQVFNQUFBREQ4cDJPQUFBQUExQk1WRVgvJztcbiAgICAgICAgdmFyIHBuZ0VuZCA9ICdBQUFBQ2tsRVFWUUkxMk5nQUFBQUFnQUI0aUc4TXdBQUFBQkpSVTVFcmtKZ2dnPT0nO1xuXG4gICAgICAgIHZhciBtYWdlbnRhID0gbmV3IEltYWdlKCk7XG4gICAgICAgIG1hZ2VudGEuc3JjID0gcG5nSGVhZCArICdBUDgwNE9hNicgKyBwbmdFbmQ7XG5cbiAgICAgICAgdmFyIHllbGxvdyA9IG5ldyBJbWFnZSgpO1xuICAgICAgICB5ZWxsb3cuc3JjID0gcG5nSGVhZCArICcvd0NLeHZSRicgKyBwbmdFbmQ7XG5cbiAgICAgICAgdmFyIGNhbnZhcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NhbnZhcycpO1xuICAgICAgICBjYW52YXMud2lkdGggPSA2O1xuICAgICAgICBjYW52YXMuaGVpZ2h0ID0gMTtcblxuICAgICAgICB2YXIgY29udGV4dCA9IGNhbnZhcy5nZXRDb250ZXh0KCcyZCcpO1xuICAgICAgICBjb250ZXh0Lmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbiA9ICdtdWx0aXBseSc7XG4gICAgICAgIGNvbnRleHQuZHJhd0ltYWdlKG1hZ2VudGEsIDAsIDApO1xuICAgICAgICBjb250ZXh0LmRyYXdJbWFnZSh5ZWxsb3csIDIsIDApO1xuXG4gICAgICAgIHZhciBkYXRhID0gY29udGV4dC5nZXRJbWFnZURhdGEoMiwwLDEsMSkuZGF0YTtcblxuICAgICAgICByZXR1cm4gKGRhdGFbMF0gPT09IDI1NSAmJiBkYXRhWzFdID09PSAwICYmIGRhdGFbMl0gPT09IDApO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBHaXZlbiBhIG51bWJlciwgdGhpcyBmdW5jdGlvbiByZXR1cm5zIHRoZSBjbG9zZXN0IG51bWJlciB0aGF0IGlzIGEgcG93ZXIgb2YgdHdvXG4gICAgICogdGhpcyBmdW5jdGlvbiBpcyB0YWtlbiBmcm9tIFN0YXJsaW5nIEZyYW1ld29yayBhcyBpdHMgcHJldHR5IG5lYXQgOylcbiAgICAgKlxuICAgICAqIEBwYXJhbSBudW1iZXIge251bWJlcn1cbiAgICAgKiBAcmV0dXJuIHtudW1iZXJ9IHRoZSBjbG9zZXN0IG51bWJlciB0aGF0IGlzIGEgcG93ZXIgb2YgdHdvXG4gICAgICovXG4gICAgZ2V0TmV4dFBvd2VyT2ZUd286IGZ1bmN0aW9uIChudW1iZXIpXG4gICAge1xuICAgICAgICAvLyBzZWU6IGh0dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvUG93ZXJfb2ZfdHdvI0Zhc3RfYWxnb3JpdGhtX3RvX2NoZWNrX2lmX2FfcG9zaXRpdmVfbnVtYmVyX2lzX2FfcG93ZXJfb2ZfdHdvXG4gICAgICAgIGlmIChudW1iZXIgPiAwICYmIChudW1iZXIgJiAobnVtYmVyIC0gMSkpID09PSAwKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gbnVtYmVyO1xuICAgICAgICB9XG4gICAgICAgIGVsc2VcbiAgICAgICAge1xuICAgICAgICAgICAgdmFyIHJlc3VsdCA9IDE7XG5cbiAgICAgICAgICAgIHdoaWxlIChyZXN1bHQgPCBudW1iZXIpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgcmVzdWx0IDw8PSAxO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIGNoZWNrcyBpZiB0aGUgZ2l2ZW4gd2lkdGggYW5kIGhlaWdodCBtYWtlIGEgcG93ZXIgb2YgdHdvIHJlY3RhbmdsZVxuICAgICAqXG4gICAgICogQHBhcmFtIHdpZHRoIHtudW1iZXJ9XG4gICAgICogQHBhcmFtIGhlaWdodCB7bnVtYmVyfVxuICAgICAqIEByZXR1cm4ge2Jvb2xlYW59XG4gICAgICovXG4gICAgaXNQb3dlck9mVHdvOiBmdW5jdGlvbiAod2lkdGgsIGhlaWdodClcbiAgICB7XG4gICAgICAgIHJldHVybiAod2lkdGggPiAwICYmICh3aWR0aCAmICh3aWR0aCAtIDEpKSA9PT0gMCAmJiBoZWlnaHQgPiAwICYmIChoZWlnaHQgJiAoaGVpZ2h0IC0gMSkpID09PSAwKTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogZ2V0IHRoZSByZXNvbHV0aW9uIG9mIGFuIGFzc2V0IGJ5IGxvb2tpbmcgZm9yIHRoZSBwcmVmaXhcbiAgICAgKiB1c2VkIGJ5IHNwcml0ZXNoZWV0cyBhbmQgaW1hZ2UgdXJsc1xuICAgICAqXG4gICAgICogQHBhcmFtIHVybCB7c3RyaW5nfSB0aGUgaW1hZ2UgcGF0aFxuICAgICAqIEByZXR1cm4ge251bWJlcn1cbiAgICAgKi9cbiAgICBnZXRSZXNvbHV0aW9uT2ZVcmw6IGZ1bmN0aW9uICh1cmwpXG4gICAge1xuICAgICAgICB2YXIgcmVzb2x1dGlvbiA9IENPTlNULlJFVElOQV9QUkVGSVguZXhlYyh1cmwpO1xuXG4gICAgICAgIGlmIChyZXNvbHV0aW9uKVxuICAgICAgICB7XG4gICAgICAgICAgIHJldHVybiBwYXJzZUZsb2F0KHJlc29sdXRpb25bMV0pO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIDE7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIExvZ3Mgb3V0IHRoZSB2ZXJzaW9uIGFuZCByZW5kZXJlciBpbmZvcm1hdGlvbiBmb3IgdGhpcyBydW5uaW5nIGluc3RhbmNlIG9mIFBJWEkuXG4gICAgICogSWYgeW91IGRvbid0IHdhbnQgdG8gc2VlIHRoaXMgbWVzc2FnZSB5b3UgY2FuIHNldCBgUElYSS51dGlscy5fc2FpZEhlbGxvID0gdHJ1ZTtgXG4gICAgICogc28gdGhlIGxpYnJhcnkgdGhpbmtzIGl0IGFscmVhZHkgc2FpZCBpdC4gS2VlcCBpbiBtaW5kIHRoYXQgZG9pbmcgdGhhdCB3aWxsIGZvcmV2ZXJcbiAgICAgKiBtYWtlcyB5b3UgYSBqZXJrIGZhY2UuXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gdHlwZSAtIFRoZSBzdHJpbmcgcmVuZGVyZXIgdHlwZSB0byBsb2cuXG4gICAgICogQGNvbnN0YW50XG4gICAgICogQHN0YXRpY1xuICAgICAqL1xuICAgIHNheUhlbGxvOiBmdW5jdGlvbiAodHlwZSlcbiAgICB7XG4gICAgICAgIGlmICh1dGlscy5fc2FpZEhlbGxvKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAobmF2aWdhdG9yLnVzZXJBZ2VudC50b0xvd2VyQ2FzZSgpLmluZGV4T2YoJ2Nocm9tZScpID4gLTEpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHZhciBhcmdzID0gW1xuICAgICAgICAgICAgICAgICdcXG4gJWMgJWMgJWMgUGl4aS5qcyAnICsgQ09OU1QuVkVSU0lPTiArICcgLSDinLAgJyArIHR5cGUgKyAnIOKcsCAgJWMgJyArICcgJWMgJyArICcgaHR0cDovL3d3dy5waXhpanMuY29tLyAgJWMgJWMg4pmlJWPimaUlY+KZpSBcXG5cXG4nLFxuICAgICAgICAgICAgICAgICdiYWNrZ3JvdW5kOiAjZmY2NmE1OyBwYWRkaW5nOjVweCAwOycsXG4gICAgICAgICAgICAgICAgJ2JhY2tncm91bmQ6ICNmZjY2YTU7IHBhZGRpbmc6NXB4IDA7JyxcbiAgICAgICAgICAgICAgICAnY29sb3I6ICNmZjY2YTU7IGJhY2tncm91bmQ6ICMwMzAzMDc7IHBhZGRpbmc6NXB4IDA7JyxcbiAgICAgICAgICAgICAgICAnYmFja2dyb3VuZDogI2ZmNjZhNTsgcGFkZGluZzo1cHggMDsnLFxuICAgICAgICAgICAgICAgICdiYWNrZ3JvdW5kOiAjZmZjM2RjOyBwYWRkaW5nOjVweCAwOycsXG4gICAgICAgICAgICAgICAgJ2JhY2tncm91bmQ6ICNmZjY2YTU7IHBhZGRpbmc6NXB4IDA7JyxcbiAgICAgICAgICAgICAgICAnY29sb3I6ICNmZjI0MjQ7IGJhY2tncm91bmQ6ICNmZmY7IHBhZGRpbmc6NXB4IDA7JyxcbiAgICAgICAgICAgICAgICAnY29sb3I6ICNmZjI0MjQ7IGJhY2tncm91bmQ6ICNmZmY7IHBhZGRpbmc6NXB4IDA7JyxcbiAgICAgICAgICAgICAgICAnY29sb3I6ICNmZjI0MjQ7IGJhY2tncm91bmQ6ICNmZmY7IHBhZGRpbmc6NXB4IDA7J1xuICAgICAgICAgICAgXTtcblxuICAgICAgICAgICAgd2luZG93LmNvbnNvbGUubG9nLmFwcGx5KGNvbnNvbGUsIGFyZ3MpOyAvL2pzaGludCBpZ25vcmU6bGluZVxuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHdpbmRvdy5jb25zb2xlKVxuICAgICAgICB7XG4gICAgICAgICAgICB3aW5kb3cuY29uc29sZS5sb2coJ1BpeGkuanMgJyArIENPTlNULlZFUlNJT04gKyAnIC0gJyArIHR5cGUgKyAnIC0gaHR0cDovL3d3dy5waXhpanMuY29tLycpOyAvL2pzaGludCBpZ25vcmU6bGluZVxuICAgICAgICB9XG5cbiAgICAgICAgdXRpbHMuX3NhaWRIZWxsbyA9IHRydWU7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIEhlbHBlciBmb3IgY2hlY2tpbmcgZm9yIHdlYmdsIHN1cHBvcnRcbiAgICAgKlxuICAgICAqIEByZXR1cm4ge2Jvb2xlYW59XG4gICAgICovXG4gICAgaXNXZWJHTFN1cHBvcnRlZDogZnVuY3Rpb24gKClcbiAgICB7XG4gICAgICAgIHZhciBjb250ZXh0T3B0aW9ucyA9IHsgc3RlbmNpbDogdHJ1ZSB9O1xuICAgICAgICB0cnlcbiAgICAgICAge1xuICAgICAgICAgICAgaWYgKCF3aW5kb3cuV2ViR0xSZW5kZXJpbmdDb250ZXh0KVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdmFyIGNhbnZhcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NhbnZhcycpLFxuICAgICAgICAgICAgICAgIGdsID0gY2FudmFzLmdldENvbnRleHQoJ3dlYmdsJywgY29udGV4dE9wdGlvbnMpIHx8IGNhbnZhcy5nZXRDb250ZXh0KCdleHBlcmltZW50YWwtd2ViZ2wnLCBjb250ZXh0T3B0aW9ucyk7XG5cbiAgICAgICAgICAgIHJldHVybiAhIShnbCAmJiBnbC5nZXRDb250ZXh0QXR0cmlidXRlcygpLnN0ZW5jaWwpO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyBzaWduIG9mIG51bWJlclxuICAgICAqXG4gICAgICogQHBhcmFtIG4ge251bWJlcn1cbiAgICAgKiBAcmV0dXJucyB7bnVtYmVyfSAwIGlmIG4gaXMgMCwgLTEgaWYgbiBpcyBuZWdhdGl2ZSwgMSBpZiBuIGkgcG9zaXRpdmVcbiAgICAgKi9cbiAgICBzaWduOiBmdW5jdGlvbiAobilcbiAgICB7XG4gICAgICAgIHJldHVybiBuID8gKG4gPCAwID8gLTEgOiAxKSA6IDA7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIHJlbW92ZUl0ZW1zXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge2FycmF5fSBhcnIgVGhlIHRhcmdldCBhcnJheVxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBzdGFydElkeCBUaGUgaW5kZXggdG8gYmVnaW4gcmVtb3ZpbmcgZnJvbSAoaW5jbHVzaXZlKVxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSByZW1vdmVDb3VudCBIb3cgbWFueSBpdGVtcyB0byByZW1vdmVcbiAgICAgKi9cbiAgICByZW1vdmVJdGVtczogZnVuY3Rpb24gKGFyciwgc3RhcnRJZHgsIHJlbW92ZUNvdW50KVxuICAgIHtcbiAgICAgICAgdmFyIGxlbmd0aCA9IGFyci5sZW5ndGg7XG5cbiAgICAgICAgaWYgKHN0YXJ0SWR4ID49IGxlbmd0aCB8fCByZW1vdmVDb3VudCA9PT0gMClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgcmVtb3ZlQ291bnQgPSAoc3RhcnRJZHgrcmVtb3ZlQ291bnQgPiBsZW5ndGggPyBsZW5ndGgtc3RhcnRJZHggOiByZW1vdmVDb3VudCk7XG4gICAgICAgIGZvciAodmFyIGkgPSBzdGFydElkeCwgbGVuID0gbGVuZ3RoLXJlbW92ZUNvdW50OyBpIDwgbGVuOyArK2kpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGFycltpXSA9IGFycltpICsgcmVtb3ZlQ291bnRdO1xuICAgICAgICB9XG5cbiAgICAgICAgYXJyLmxlbmd0aCA9IGxlbjtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQHRvZG8gRGVzY3JpYmUgcHJvcGVydHkgdXNhZ2VcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIFRleHR1cmVDYWNoZToge30sXG5cbiAgICAvKipcbiAgICAgKiBAdG9kbyBEZXNjcmliZSBwcm9wZXJ0eSB1c2FnZVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgQmFzZVRleHR1cmVDYWNoZToge31cbn07XG4iLCIvKipcbiAqIE1peGlucyBmdW5jdGlvbmFsaXR5IHRvIG1ha2UgYW4gb2JqZWN0IGhhdmUgXCJwbHVnaW5zXCIuXG4gKlxuICogQG1peGluXG4gKiBAbWVtYmVyb2YgUElYSS51dGlsc1xuICogQHBhcmFtIG9iaiB7b2JqZWN0fSBUaGUgb2JqZWN0IHRvIG1peCBpbnRvLlxuICogQGV4YW1wbGVcbiAqICAgICAgZnVuY3Rpb24gTXlPYmplY3QoKSB7fVxuICpcbiAqICAgICAgcGx1Z2luVGFyZ2V0Lm1peGluKE15T2JqZWN0KTtcbiAqL1xuZnVuY3Rpb24gcGx1Z2luVGFyZ2V0KG9iailcbntcbiAgICBvYmouX19wbHVnaW5zID0ge307XG5cbiAgICAvKipcbiAgICAgKiBBZGRzIGEgcGx1Z2luIHRvIGFuIG9iamVjdFxuICAgICAqXG4gICAgICogQHBhcmFtIHBsdWdpbk5hbWUge3N0cmluZ30gVGhlIGV2ZW50cyB0aGF0IHNob3VsZCBiZSBsaXN0ZWQuXG4gICAgICogQHBhcmFtIGN0b3Ige0Z1bmN0aW9ufSBUaGUgY29uc3RydWN0b3IgZnVuY3Rpb24gZm9yIHRoZSBwbHVnaW4uXG4gICAgICovXG4gICAgb2JqLnJlZ2lzdGVyUGx1Z2luID0gZnVuY3Rpb24gKHBsdWdpbk5hbWUsIGN0b3IpXG4gICAge1xuICAgICAgICBvYmouX19wbHVnaW5zW3BsdWdpbk5hbWVdID0gY3RvcjtcbiAgICB9O1xuXG4gICAgLyoqXG4gICAgICogSW5zdGFudGlhdGVzIGFsbCB0aGUgcGx1Z2lucyBvZiB0aGlzIG9iamVjdFxuICAgICAqXG4gICAgICovXG4gICAgb2JqLnByb3RvdHlwZS5pbml0UGx1Z2lucyA9IGZ1bmN0aW9uICgpXG4gICAge1xuICAgICAgICB0aGlzLnBsdWdpbnMgPSB0aGlzLnBsdWdpbnMgfHwge307XG5cbiAgICAgICAgZm9yICh2YXIgbyBpbiBvYmouX19wbHVnaW5zKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnBsdWdpbnNbb10gPSBuZXcgKG9iai5fX3BsdWdpbnNbb10pKHRoaXMpO1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIC8qKlxuICAgICAqIFJlbW92ZXMgYWxsIHRoZSBwbHVnaW5zIG9mIHRoaXMgb2JqZWN0XG4gICAgICpcbiAgICAgKi9cbiAgICBvYmoucHJvdG90eXBlLmRlc3Ryb3lQbHVnaW5zID0gZnVuY3Rpb24gKClcbiAgICB7XG4gICAgICAgIGZvciAodmFyIG8gaW4gdGhpcy5wbHVnaW5zKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnBsdWdpbnNbb10uZGVzdHJveSgpO1xuICAgICAgICAgICAgdGhpcy5wbHVnaW5zW29dID0gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMucGx1Z2lucyA9IG51bGw7XG4gICAgfTtcbn1cblxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgICAvKipcbiAgICAgKiBNaXhlcyBpbiB0aGUgcHJvcGVydGllcyBvZiB0aGUgcGx1Z2luVGFyZ2V0IGludG8gYW5vdGhlciBvYmplY3RcbiAgICAgKlxuICAgICAqIEBwYXJhbSBvYmplY3Qge29iamVjdH0gVGhlIG9iaiB0byBtaXggaW50b1xuICAgICAqL1xuICAgIG1peGluOiBmdW5jdGlvbiBtaXhpbihvYmopXG4gICAge1xuICAgICAgICBwbHVnaW5UYXJnZXQob2JqKTtcbiAgICB9XG59O1xuIiwiLypnbG9iYWwgY29uc29sZSAqL1xudmFyIGNvcmUgPSByZXF1aXJlKCcuL2NvcmUnKSxcbiAgICBtZXNoID0gcmVxdWlyZSgnLi9tZXNoJyksXG4gICAgZXh0cmFzID0gcmVxdWlyZSgnLi9leHRyYXMnKSxcbiAgICBmaWx0ZXJzID0gcmVxdWlyZSgnLi9maWx0ZXJzJyk7XG5cbi8qKlxuICogQGNsYXNzXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgU3ByaXRlQmF0Y2hcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAc2VlIFBJWEkuUGFydGljbGVDb250YWluZXJcbiAqIEB0aHJvd3Mge1JlZmVyZW5jZUVycm9yfSBTcHJpdGVCYXRjaCBkb2VzIG5vdCBleGlzdCBhbnkgbW9yZSwgcGxlYXNlIHVzZSB0aGUgbmV3IFBhcnRpY2xlQ29udGFpbmVyIGluc3RlYWQuXG4gKiBAZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDMuMC4wXG4gKi9cbmNvcmUuU3ByaXRlQmF0Y2ggPSBmdW5jdGlvbigpXG57XG4gICAgdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKCdTcHJpdGVCYXRjaCBkb2VzIG5vdCBleGlzdCBhbnkgbW9yZSwgcGxlYXNlIHVzZSB0aGUgbmV3IFBhcnRpY2xlQ29udGFpbmVyIGluc3RlYWQuJyk7XG59O1xuXG4vKipcbiAqIEBjbGFzc1xuICogQHByaXZhdGVcbiAqIEBuYW1lIEFzc2V0TG9hZGVyXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHNlZSBQSVhJLmxvYWRlcnMuTG9hZGVyXG4gKiBAdGhyb3dzIHtSZWZlcmVuY2VFcnJvcn0gVGhlIGxvYWRlciBzeXN0ZW0gd2FzIG92ZXJoYXVsZWQgaW4gcGl4aSB2MywgcGxlYXNlIHNlZSB0aGUgbmV3IFBJWEkubG9hZGVycy5Mb2FkZXIgY2xhc3MuXG4gKiBAZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDMuMC4wXG4gKi9cbmNvcmUuQXNzZXRMb2FkZXIgPSBmdW5jdGlvbigpXG57XG4gICAgdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKCdUaGUgbG9hZGVyIHN5c3RlbSB3YXMgb3ZlcmhhdWxlZCBpbiBwaXhpIHYzLCBwbGVhc2Ugc2VlIHRoZSBuZXcgUElYSS5sb2FkZXJzLkxvYWRlciBjbGFzcy4nKTtcbn07XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGNvcmUsIHtcblxuICAgIC8qKlxuICAgICAqIEBjbGFzc1xuICAgICAqIEBwcml2YXRlXG4gICAgICogQG5hbWUgU3RhZ2VcbiAgICAgKiBAbWVtYmVyb2YgUElYSVxuICAgICAqIEBzZWUgUElYSS5Db250YWluZXJcbiAgICAgKiBAZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDMuMC4wXG4gICAgICovXG4gICAgU3RhZ2U6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbigpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignWW91IGRvIG5vdCBuZWVkIHRvIHVzZSBhIFBJWEkgU3RhZ2UgYW55IG1vcmUsIHlvdSBjYW4gc2ltcGx5IHJlbmRlciBhbnkgY29udGFpbmVyLicpO1xuICAgICAgICAgICAgcmV0dXJuIGNvcmUuQ29udGFpbmVyO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIEBjbGFzc1xuICAgICAqIEBwcml2YXRlXG4gICAgICogQG5hbWUgRGlzcGxheU9iamVjdENvbnRhaW5lclxuICAgICAqIEBtZW1iZXJvZiBQSVhJXG4gICAgICogQHNlZSBQSVhJLkNvbnRhaW5lclxuICAgICAqIEBkZXByZWNhdGVkIHNpbmNlIHZlcnNpb24gMy4wLjBcbiAgICAgKi9cbiAgICBEaXNwbGF5T2JqZWN0Q29udGFpbmVyOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24oKVxuICAgICAgICB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ0Rpc3BsYXlPYmplY3RDb250YWluZXIgaGFzIGJlZW4gc2hvcnRlbmVkIHRvIENvbnRhaW5lciwgcGxlYXNlIHVzZSBDb250YWluZXIgZnJvbSBub3cgb24uJyk7XG4gICAgICAgICAgICByZXR1cm4gY29yZS5Db250YWluZXI7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQGNsYXNzXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAbmFtZSBTdHJpcFxuICAgICAqIEBtZW1iZXJvZiBQSVhJXG4gICAgICogQHNlZSBQSVhJLm1lc2guTWVzaFxuICAgICAqIEBkZXByZWNhdGVkIHNpbmNlIHZlcnNpb24gMy4wLjBcbiAgICAgKi9cbiAgICBTdHJpcDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uKClcbiAgICAgICAge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKCdUaGUgU3RyaXAgY2xhc3MgaGFzIGJlZW4gcmVuYW1lZCB0byBNZXNoIGFuZCBtb3ZlZCB0byBtZXNoLk1lc2gsIHBsZWFzZSB1c2UgbWVzaC5NZXNoIGZyb20gbm93IG9uLicpO1xuICAgICAgICAgICAgcmV0dXJuIG1lc2guTWVzaDtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBAY2xhc3NcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBuYW1lIFJvcGVcbiAgICAgKiBAbWVtYmVyb2YgUElYSVxuICAgICAqIEBzZWUgUElYSS5tZXNoLlJvcGVcbiAgICAgKiBAZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDMuMC4wXG4gICAgICovXG4gICAgUm9wZToge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uKClcbiAgICAgICAge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKCdUaGUgUm9wZSBjbGFzcyBoYXMgYmVlbiBtb3ZlZCB0byBtZXNoLlJvcGUsIHBsZWFzZSB1c2UgbWVzaC5Sb3BlIGZyb20gbm93IG9uLicpO1xuICAgICAgICAgICAgcmV0dXJuIG1lc2guUm9wZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBAY2xhc3NcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBuYW1lIE1vdmllQ2xpcFxuICAgICAqIEBtZW1iZXJvZiBQSVhJXG4gICAgICogQHNlZSBQSVhJLmV4dHJhcy5Nb3ZpZUNsaXBcbiAgICAgKiBAZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDMuMC4wXG4gICAgICovXG4gICAgTW92aWVDbGlwOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24oKVxuICAgICAgICB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ1RoZSBNb3ZpZUNsaXAgY2xhc3MgaGFzIGJlZW4gbW92ZWQgdG8gZXh0cmFzLk1vdmllQ2xpcCwgcGxlYXNlIHVzZSBleHRyYXMuTW92aWVDbGlwIGZyb20gbm93IG9uLicpO1xuICAgICAgICAgICAgcmV0dXJuIGV4dHJhcy5Nb3ZpZUNsaXA7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQGNsYXNzXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAbmFtZSBUaWxpbmdTcHJpdGVcbiAgICAgKiBAbWVtYmVyb2YgUElYSVxuICAgICAqIEBzZWUgUElYSS5leHRyYXMuVGlsaW5nU3ByaXRlXG4gICAgICogQGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiAzLjAuMFxuICAgICAqL1xuICAgIFRpbGluZ1Nwcml0ZToge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uKClcbiAgICAgICAge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKCdUaGUgVGlsaW5nU3ByaXRlIGNsYXNzIGhhcyBiZWVuIG1vdmVkIHRvIGV4dHJhcy5UaWxpbmdTcHJpdGUsIHBsZWFzZSB1c2UgZXh0cmFzLlRpbGluZ1Nwcml0ZSBmcm9tIG5vdyBvbi4nKTtcbiAgICAgICAgICAgIHJldHVybiBleHRyYXMuVGlsaW5nU3ByaXRlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIEBjbGFzc1xuICAgICAqIEBwcml2YXRlXG4gICAgICogQG5hbWUgQml0bWFwVGV4dFxuICAgICAqIEBtZW1iZXJvZiBQSVhJXG4gICAgICogQHNlZSBQSVhJLmV4dHJhcy5CaXRtYXBUZXh0XG4gICAgICogQGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiAzLjAuMFxuICAgICAqL1xuICAgIEJpdG1hcFRleHQ6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbigpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignVGhlIEJpdG1hcFRleHQgY2xhc3MgaGFzIGJlZW4gbW92ZWQgdG8gZXh0cmFzLkJpdG1hcFRleHQsIHBsZWFzZSB1c2UgZXh0cmFzLkJpdG1hcFRleHQgZnJvbSBub3cgb24uJyk7XG4gICAgICAgICAgICByZXR1cm4gZXh0cmFzLkJpdG1hcFRleHQ7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQGNsYXNzXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAbmFtZSBibGVuZE1vZGVzXG4gICAgICogQG1lbWJlcm9mIFBJWElcbiAgICAgKiBAc2VlIFBJWEkuQkxFTkRfTU9ERVNcbiAgICAgKiBAZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDMuMC4wXG4gICAgICovXG4gICAgYmxlbmRNb2Rlczoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uKClcbiAgICAgICAge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKCdUaGUgYmxlbmRNb2RlcyBoYXMgYmVlbiBtb3ZlZCB0byBCTEVORF9NT0RFUywgcGxlYXNlIHVzZSBCTEVORF9NT0RFUyBmcm9tIG5vdyBvbi4nKTtcbiAgICAgICAgICAgIHJldHVybiBjb3JlLkJMRU5EX01PREVTO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIEBjbGFzc1xuICAgICAqIEBwcml2YXRlXG4gICAgICogQG5hbWUgc2NhbGVNb2Rlc1xuICAgICAqIEBtZW1iZXJvZiBQSVhJXG4gICAgICogQHNlZSBQSVhJLlNDQUxFX01PREVTXG4gICAgICogQGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiAzLjAuMFxuICAgICAqL1xuICAgIHNjYWxlTW9kZXM6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbigpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignVGhlIHNjYWxlTW9kZXMgaGFzIGJlZW4gbW92ZWQgdG8gU0NBTEVfTU9ERVMsIHBsZWFzZSB1c2UgU0NBTEVfTU9ERVMgZnJvbSBub3cgb24uJyk7XG4gICAgICAgICAgICByZXR1cm4gY29yZS5TQ0FMRV9NT0RFUztcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBAY2xhc3NcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBuYW1lIEJhc2VUZXh0dXJlQ2FjaGVcbiAgICAgKiBAbWVtYmVyb2YgUElYSVxuICAgICAqIEBzZWUgUElYSS51dGlscy5CYXNlVGV4dHVyZUNhY2hlXG4gICAgICogQGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiAzLjAuMFxuICAgICAqL1xuICAgIEJhc2VUZXh0dXJlQ2FjaGU6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ1RoZSBCYXNlVGV4dHVyZUNhY2hlIGNsYXNzIGhhcyBiZWVuIG1vdmVkIHRvIHV0aWxzLkJhc2VUZXh0dXJlQ2FjaGUsIHBsZWFzZSB1c2UgdXRpbHMuQmFzZVRleHR1cmVDYWNoZSBmcm9tIG5vdyBvbi4nKTtcbiAgICAgICAgICAgIHJldHVybiBjb3JlLnV0aWxzLkJhc2VUZXh0dXJlQ2FjaGU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQGNsYXNzXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAbmFtZSBUZXh0dXJlQ2FjaGVcbiAgICAgKiBAbWVtYmVyb2YgUElYSVxuICAgICAqIEBzZWUgUElYSS51dGlscy5UZXh0dXJlQ2FjaGVcbiAgICAgKiBAZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDMuMC4wXG4gICAgICovXG4gICAgVGV4dHVyZUNhY2hlOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKCdUaGUgVGV4dHVyZUNhY2hlIGNsYXNzIGhhcyBiZWVuIG1vdmVkIHRvIHV0aWxzLlRleHR1cmVDYWNoZSwgcGxlYXNlIHVzZSB1dGlscy5UZXh0dXJlQ2FjaGUgZnJvbSBub3cgb24uJyk7XG4gICAgICAgICAgICByZXR1cm4gY29yZS51dGlscy5UZXh0dXJlQ2FjaGU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQG5hbWVzcGFjZVxuICAgICAqIEBwcml2YXRlXG4gICAgICogQG5hbWUgbWF0aFxuICAgICAqIEBtZW1iZXJvZiBQSVhJXG4gICAgICogQHNlZSBQSVhJXG4gICAgICogQGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiAzLjAuNlxuICAgICAqL1xuICAgIG1hdGg6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ1RoZSBtYXRoIG5hbWVzcGFjZSBpcyBkZXByZWNhdGVkLCBwbGVhc2UgYWNjZXNzIG1lbWJlcnMgYWxyZWFkeSBhY2Nlc3NpYmxlIG9uIFBJWEkuJyk7XG4gICAgICAgICAgICByZXR1cm4gY29yZTtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuXG4vKipcbiAqIEBtZXRob2RcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBQSVhJLlNwcml0ZSNzZXRUZXh0dXJlXG4gKiBAc2VlIFBJWEkuU3ByaXRlI3RleHR1cmVcbiAqIEBkZXByZWNhdGVkIHNpbmNlIHZlcnNpb24gMy4wLjBcbiAqL1xuY29yZS5TcHJpdGUucHJvdG90eXBlLnNldFRleHR1cmUgPSBmdW5jdGlvbih0ZXh0dXJlKVxue1xuICAgIHRoaXMudGV4dHVyZSA9IHRleHR1cmU7XG4gICAgY29uc29sZS53YXJuKCdzZXRUZXh0dXJlIGlzIG5vdyBkZXByZWNhdGVkLCBwbGVhc2UgdXNlIHRoZSB0ZXh0dXJlIHByb3BlcnR5LCBlLmcgOiBzcHJpdGUudGV4dHVyZSA9IHRleHR1cmU7Jyk7XG59O1xuXG4vKipcbiAqIEBtZXRob2RcbiAqIEBuYW1lIFBJWEkuZXh0cmFzLkJpdG1hcFRleHQjc2V0VGV4dFxuICogQHNlZSBQSVhJLmV4dHJhcy5CaXRtYXBUZXh0I3RleHRcbiAqIEBkZXByZWNhdGVkIHNpbmNlIHZlcnNpb24gMy4wLjBcbiAqL1xuZXh0cmFzLkJpdG1hcFRleHQucHJvdG90eXBlLnNldFRleHQgPSBmdW5jdGlvbih0ZXh0KVxue1xuICAgIHRoaXMudGV4dCA9IHRleHQ7XG4gICAgY29uc29sZS53YXJuKCdzZXRUZXh0IGlzIG5vdyBkZXByZWNhdGVkLCBwbGVhc2UgdXNlIHRoZSB0ZXh0IHByb3BlcnR5LCBlLmcgOiBteUJpdG1hcFRleHQudGV4dCA9IFxcJ215IHRleHRcXCc7Jyk7XG59O1xuXG4vKipcbiAqIEBtZXRob2RcbiAqIEBuYW1lIFBJWEkuVGV4dCNzZXRUZXh0XG4gKiBAc2VlIFBJWEkuVGV4dCN0ZXh0XG4gKiBAZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDMuMC4wXG4gKi9cbmNvcmUuVGV4dC5wcm90b3R5cGUuc2V0VGV4dCA9IGZ1bmN0aW9uKHRleHQpXG57XG4gICAgdGhpcy50ZXh0ID0gdGV4dDtcbiAgICBjb25zb2xlLndhcm4oJ3NldFRleHQgaXMgbm93IGRlcHJlY2F0ZWQsIHBsZWFzZSB1c2UgdGhlIHRleHQgcHJvcGVydHksIGUuZyA6IG15VGV4dC50ZXh0ID0gXFwnbXkgdGV4dFxcJzsnKTtcbn07XG5cbi8qKlxuICogQG1ldGhvZFxuICogQG5hbWUgUElYSS5UZXh0I3NldFN0eWxlXG4gKiBAc2VlIFBJWEkuVGV4dCNzdHlsZVxuICogQGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiAzLjAuMFxuICovXG5jb3JlLlRleHQucHJvdG90eXBlLnNldFN0eWxlID0gZnVuY3Rpb24oc3R5bGUpXG57XG4gICAgdGhpcy5zdHlsZSA9IHN0eWxlO1xuICAgIGNvbnNvbGUud2Fybignc2V0U3R5bGUgaXMgbm93IGRlcHJlY2F0ZWQsIHBsZWFzZSB1c2UgdGhlIHN0eWxlIHByb3BlcnR5LCBlLmcgOiBteVRleHQuc3R5bGUgPSBzdHlsZTsnKTtcbn07XG5cbi8qKlxuICogQG1ldGhvZFxuICogQG5hbWUgUElYSS5UZXh0dXJlI3NldEZyYW1lXG4gKiBAc2VlIFBJWEkuVGV4dHVyZSNzZXRGcmFtZVxuICogQGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiAzLjAuMFxuICovXG5jb3JlLlRleHR1cmUucHJvdG90eXBlLnNldEZyYW1lID0gZnVuY3Rpb24oZnJhbWUpXG57XG4gICAgdGhpcy5mcmFtZSA9IGZyYW1lO1xuICAgIGNvbnNvbGUud2Fybignc2V0RnJhbWUgaXMgbm93IGRlcHJlY2F0ZWQsIHBsZWFzZSB1c2UgdGhlIGZyYW1lIHByb3BlcnR5LCBlLmcgOiBteVRleHR1cmUuZnJhbWUgPSBmcmFtZTsnKTtcbn07XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGZpbHRlcnMsIHtcblxuICAgIC8qKlxuICAgICAqIEBjbGFzc1xuICAgICAqIEBwcml2YXRlXG4gICAgICogQG5hbWUgUElYSS5maWx0ZXJzLkFic3RyYWN0RmlsdGVyXG4gICAgICogQHNlZSBQSVhJLkFic3RyYWN0RmlsdGVyXG4gICAgICogQGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiAzLjAuNlxuICAgICAqL1xuICAgIEFic3RyYWN0RmlsdGVyOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24oKVxuICAgICAgICB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ2ZpbHRlcnMuQWJzdHJhY3RGaWx0ZXIgaXMgYW4gdW5kb2N1bWVudGVkIGFsaWFzLCBwbGVhc2UgdXNlIEFic3RyYWN0RmlsdGVyIGZyb20gbm93IG9uLicpO1xuICAgICAgICAgICAgcmV0dXJuIGNvcmUuQWJzdHJhY3RGaWx0ZXI7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQGNsYXNzXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAbmFtZSBQSVhJLmZpbHRlcnMuRlhBQUZpbHRlclxuICAgICAqIEBzZWUgUElYSS5GWEFBRmlsdGVyXG4gICAgICogQGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiAzLjAuNlxuICAgICAqL1xuICAgIEZYQUFGaWx0ZXI6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbigpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignZmlsdGVycy5GWEFBRmlsdGVyIGlzIGFuIHVuZG9jdW1lbnRlZCBhbGlhcywgcGxlYXNlIHVzZSBGWEFBRmlsdGVyIGZyb20gbm93IG9uLicpO1xuICAgICAgICAgICAgcmV0dXJuIGNvcmUuRlhBQUZpbHRlcjtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBAY2xhc3NcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBuYW1lIFBJWEkuZmlsdGVycy5TcHJpdGVNYXNrRmlsdGVyXG4gICAgICogQHNlZSBQSVhJLlNwcml0ZU1hc2tGaWx0ZXJcbiAgICAgKiBAZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDMuMC42XG4gICAgICovXG4gICAgU3ByaXRlTWFza0ZpbHRlcjoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uKClcbiAgICAgICAge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKCdmaWx0ZXJzLlNwcml0ZU1hc2tGaWx0ZXIgaXMgYW4gdW5kb2N1bWVudGVkIGFsaWFzLCBwbGVhc2UgdXNlIFNwcml0ZU1hc2tGaWx0ZXIgZnJvbSBub3cgb24uJyk7XG4gICAgICAgICAgICByZXR1cm4gY29yZS5TcHJpdGVNYXNrRmlsdGVyO1xuICAgICAgICB9XG4gICAgfVxufSk7XG5cbi8qKlxuICogQG1ldGhvZFxuICogQG5hbWUgUElYSS51dGlscy51dWlkXG4gKiBAc2VlIFBJWEkudXRpbHMudWlkXG4gKiBAZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDMuMC42XG4gKi9cbmNvcmUudXRpbHMudXVpZCA9IGZ1bmN0aW9uICgpXG57XG4gICAgY29uc29sZS53YXJuKCd1dGlscy51dWlkKCkgaXMgZGVwcmVjYXRlZCwgcGxlYXNlIHVzZSB1dGlscy51aWQoKSBmcm9tIG5vdyBvbi4nKTtcbiAgICByZXR1cm4gY29yZS51dGlscy51aWQoKTtcbn07XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uL2NvcmUnKTtcblxuLyoqXG4gKiBBIEJpdG1hcFRleHQgb2JqZWN0IHdpbGwgY3JlYXRlIGEgbGluZSBvciBtdWx0aXBsZSBsaW5lcyBvZiB0ZXh0IHVzaW5nIGJpdG1hcCBmb250LiBUb1xuICogc3BsaXQgYSBsaW5lIHlvdSBjYW4gdXNlICdcXG4nLCAnXFxyJyBvciAnXFxyXFxuJyBpbiB5b3VyIHN0cmluZy4gWW91IGNhbiBnZW5lcmF0ZSB0aGUgZm50IGZpbGVzIHVzaW5nOlxuICpcbiAqIEEgQml0bWFwVGV4dCBjYW4gb25seSBiZSBjcmVhdGVkIHdoZW4gdGhlIGZvbnQgaXMgbG9hZGVkXG4gKlxuICogYGBganNcbiAqIC8vIGluIHRoaXMgY2FzZSB0aGUgZm9udCBpcyBpbiBhIGZpbGUgY2FsbGVkICdkZXN5cmVsLmZudCdcbiAqIHZhciBiaXRtYXBUZXh0ID0gbmV3IFBJWEkuZXh0cmFzLkJpdG1hcFRleHQoXCJ0ZXh0IHVzaW5nIGEgZmFuY3kgZm9udCFcIiwge2ZvbnQ6IFwiMzVweCBEZXN5cmVsXCIsIGFsaWduOiBcInJpZ2h0XCJ9KTtcbiAqIGBgYFxuICpcbiAqXG4gKiBodHRwOi8vd3d3LmFuZ2VsY29kZS5jb20vcHJvZHVjdHMvYm1mb250LyBmb3Igd2luZG93cyBvclxuICogaHR0cDovL3d3dy5ibWdseXBoLmNvbS8gZm9yIG1hYy5cbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQ29udGFpbmVyXG4gKiBAbWVtYmVyb2YgUElYSS5leHRyYXNcbiAqIEBwYXJhbSB0ZXh0IHtzdHJpbmd9IFRoZSBjb3B5IHRoYXQgeW91IHdvdWxkIGxpa2UgdGhlIHRleHQgdG8gZGlzcGxheVxuICogQHBhcmFtIHN0eWxlIHtvYmplY3R9IFRoZSBzdHlsZSBwYXJhbWV0ZXJzXG4gKiBAcGFyYW0gc3R5bGUuZm9udCB7c3RyaW5nfG9iamVjdH0gVGhlIGZvbnQgZGVzY3JpcHRvciBmb3IgdGhlIG9iamVjdCwgY2FuIGJlIHBhc3NlZCBhcyBhIHN0cmluZyBvZiBmb3JtXG4gKiAgICAgIFwiMjRweCBGb250TmFtZVwiIG9yIFwiRm9udE5hbWVcIiBvciBhcyBhbiBvYmplY3Qgd2l0aCBleHBsaWNpdCBuYW1lL3NpemUgcHJvcGVydGllcy5cbiAqIEBwYXJhbSBbc3R5bGUuZm9udC5uYW1lXSB7c3RyaW5nfSBUaGUgYml0bWFwIGZvbnQgaWRcbiAqIEBwYXJhbSBbc3R5bGUuZm9udC5zaXplXSB7bnVtYmVyfSBUaGUgc2l6ZSBvZiB0aGUgZm9udCBpbiBwaXhlbHMsIGUuZy4gMjRcbiAqIEBwYXJhbSBbc3R5bGUuYWxpZ249J2xlZnQnXSB7c3RyaW5nfSBBbGlnbm1lbnQgZm9yIG11bHRpbGluZSB0ZXh0ICgnbGVmdCcsICdjZW50ZXInIG9yICdyaWdodCcpLCBkb2VzIG5vdCBhZmZlY3RcbiAqICAgICAgc2luZ2xlIGxpbmUgdGV4dFxuICogQHBhcmFtIFtzdHlsZS50aW50PTB4RkZGRkZGXSB7bnVtYmVyfSBUaGUgdGludCBjb2xvclxuICovXG5mdW5jdGlvbiBCaXRtYXBUZXh0KHRleHQsIHN0eWxlKVxue1xuICAgIGNvcmUuQ29udGFpbmVyLmNhbGwodGhpcyk7XG5cbiAgICBzdHlsZSA9IHN0eWxlIHx8IHt9O1xuXG4gICAgLyoqXG4gICAgICogVGhlIHdpZHRoIG9mIHRoZSBvdmVyYWxsIHRleHQsIGRpZmZlcmVudCBmcm9tIGZvbnRTaXplLFxuICAgICAqIHdoaWNoIGlzIGRlZmluZWQgaW4gdGhlIHN0eWxlIG9iamVjdFxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEByZWFkT25seVxuICAgICAqL1xuICAgIHRoaXMudGV4dFdpZHRoID0gMDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBoZWlnaHQgb2YgdGhlIG92ZXJhbGwgdGV4dCwgZGlmZmVyZW50IGZyb20gZm9udFNpemUsXG4gICAgICogd2hpY2ggaXMgZGVmaW5lZCBpbiB0aGUgc3R5bGUgb2JqZWN0XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQHJlYWRPbmx5XG4gICAgICovXG4gICAgdGhpcy50ZXh0SGVpZ2h0ID0gMDtcblxuICAgIC8qKlxuICAgICAqIFByaXZhdGUgdHJhY2tlciBmb3IgdGhlIGxldHRlciBzcHJpdGUgcG9vbC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuU3ByaXRlW119XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9nbHlwaHMgPSBbXTtcblxuICAgIC8qKlxuICAgICAqIFByaXZhdGUgdHJhY2tlciBmb3IgdGhlIGN1cnJlbnQgc3R5bGUuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtvYmplY3R9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9mb250ID0ge1xuICAgICAgICB0aW50OiBzdHlsZS50aW50ICE9PSB1bmRlZmluZWQgPyBzdHlsZS50aW50IDogMHhGRkZGRkYsXG4gICAgICAgIGFsaWduOiBzdHlsZS5hbGlnbiB8fCAnbGVmdCcsXG4gICAgICAgIG5hbWU6IG51bGwsXG4gICAgICAgIHNpemU6IDBcbiAgICB9O1xuXG4gICAgLyoqXG4gICAgICogUHJpdmF0ZSB0cmFja2VyIGZvciB0aGUgY3VycmVudCBmb250LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7b2JqZWN0fVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5mb250ID0gc3R5bGUuZm9udDsgLy8gcnVuIGZvbnQgc2V0dGVyXG5cbiAgICAvKipcbiAgICAgKiBQcml2YXRlIHRyYWNrZXIgZm9yIHRoZSBjdXJyZW50IHRleHQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtzdHJpbmd9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl90ZXh0ID0gdGV4dDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBtYXggd2lkdGggb2YgdGhpcyBiaXRtYXAgdGV4dCBpbiBwaXhlbHMuIElmIHRoZSB0ZXh0IHByb3ZpZGVkIGlzIGxvbmdlciB0aGFuIHRoZSB2YWx1ZSBwcm92aWRlZCwgbGluZSBicmVha3Mgd2lsbCBiZSBhdXRvbWF0aWNhbGx5IGluc2VydGVkIGluIHRoZSBsYXN0IHdoaXRlc3BhY2UuXG4gICAgICogRGlzYWJsZSBieSBzZXR0aW5nIHZhbHVlIHRvIDBcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLm1heFdpZHRoID0gMDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBtYXggbGluZSBoZWlnaHQuIFRoaXMgaXMgdXNlZnVsIHdoZW4gdHJ5aW5nIHRvIHVzZSB0aGUgdG90YWwgaGVpZ2h0IG9mIHRoZSBUZXh0LCBpZTogd2hlbiB0cnlpbmcgdG8gdmVydGljYWxseSBhbGlnbi5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLm1heExpbmVIZWlnaHQgPSAwO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGRpcnR5IHN0YXRlIG9mIHRoaXMgb2JqZWN0LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKi9cbiAgICB0aGlzLmRpcnR5ID0gZmFsc2U7XG5cbiAgICB0aGlzLnVwZGF0ZVRleHQoKTtcbn1cblxuLy8gY29uc3RydWN0b3JcbkJpdG1hcFRleHQucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShjb3JlLkNvbnRhaW5lci5wcm90b3R5cGUpO1xuQml0bWFwVGV4dC5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBCaXRtYXBUZXh0O1xubW9kdWxlLmV4cG9ydHMgPSBCaXRtYXBUZXh0O1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhCaXRtYXBUZXh0LnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFRoZSB0aW50IG9mIHRoZSBCaXRtYXBUZXh0IG9iamVjdFxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmV4dHJhcy5CaXRtYXBUZXh0I1xuICAgICAqL1xuICAgIHRpbnQ6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fZm9udC50aW50O1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5fZm9udC50aW50ID0gKHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicgJiYgdmFsdWUgPj0gMCkgPyB2YWx1ZSA6IDB4RkZGRkZGO1xuXG4gICAgICAgICAgICB0aGlzLmRpcnR5ID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBUaGUgYWxpZ25tZW50IG9mIHRoZSBCaXRtYXBUZXh0IG9iamVjdFxuICAgICAqXG4gICAgICogQG1lbWJlciB7c3RyaW5nfVxuICAgICAqIEBkZWZhdWx0ICdsZWZ0J1xuICAgICAqIEBtZW1iZXJvZiBQSVhJLmV4dHJhcy5CaXRtYXBUZXh0I1xuICAgICAqL1xuICAgIGFsaWduOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2ZvbnQuYWxpZ247XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLl9mb250LmFsaWduID0gdmFsdWUgfHwgJ2xlZnQnO1xuXG4gICAgICAgICAgICB0aGlzLmRpcnR5ID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBUaGUgZm9udCBkZXNjcmlwdG9yIG9mIHRoZSBCaXRtYXBUZXh0IG9iamVjdFxuICAgICAqXG4gICAgICogQG1lbWJlciB7Rm9udH1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5leHRyYXMuQml0bWFwVGV4dCNcbiAgICAgKi9cbiAgICBmb250OiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2ZvbnQ7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICBpZiAoIXZhbHVlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgICAgIHZhbHVlID0gdmFsdWUuc3BsaXQoJyAnKTtcblxuICAgICAgICAgICAgICAgIHRoaXMuX2ZvbnQubmFtZSA9IHZhbHVlLmxlbmd0aCA9PT0gMSA/IHZhbHVlWzBdIDogdmFsdWUuc2xpY2UoMSkuam9pbignICcpO1xuICAgICAgICAgICAgICAgIHRoaXMuX2ZvbnQuc2l6ZSA9IHZhbHVlLmxlbmd0aCA+PSAyID8gcGFyc2VJbnQodmFsdWVbMF0sIDEwKSA6IEJpdG1hcFRleHQuZm9udHNbdGhpcy5fZm9udC5uYW1lXS5zaXplO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fZm9udC5uYW1lID0gdmFsdWUubmFtZTtcbiAgICAgICAgICAgICAgICB0aGlzLl9mb250LnNpemUgPSB0eXBlb2YgdmFsdWUuc2l6ZSA9PT0gJ251bWJlcicgPyB2YWx1ZS5zaXplIDogcGFyc2VJbnQodmFsdWUuc2l6ZSwgMTApO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLmRpcnR5ID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBUaGUgdGV4dCBvZiB0aGUgQml0bWFwVGV4dCBvYmplY3RcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge3N0cmluZ31cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5leHRyYXMuQml0bWFwVGV4dCNcbiAgICAgKi9cbiAgICB0ZXh0OiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3RleHQ7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB2YWx1ZSA9IHZhbHVlLnRvU3RyaW5nKCkgfHwgJyAnO1xuICAgICAgICAgICAgaWYgKHRoaXMuX3RleHQgPT09IHZhbHVlKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuX3RleHQgPSB2YWx1ZTtcbiAgICAgICAgICAgIHRoaXMuZGlydHkgPSB0cnVlO1xuICAgICAgICB9XG4gICAgfVxufSk7XG5cbi8qKlxuICogUmVuZGVycyB0ZXh0IGFuZCB1cGRhdGVzIGl0IHdoZW4gbmVlZGVkXG4gKlxuICogQHByaXZhdGVcbiAqL1xuQml0bWFwVGV4dC5wcm90b3R5cGUudXBkYXRlVGV4dCA9IGZ1bmN0aW9uICgpXG57XG4gICAgdmFyIGRhdGEgPSBCaXRtYXBUZXh0LmZvbnRzW3RoaXMuX2ZvbnQubmFtZV07XG4gICAgdmFyIHBvcyA9IG5ldyBjb3JlLlBvaW50KCk7XG4gICAgdmFyIHByZXZDaGFyQ29kZSA9IG51bGw7XG4gICAgdmFyIGNoYXJzID0gW107XG4gICAgdmFyIGxhc3RMaW5lV2lkdGggPSAwO1xuICAgIHZhciBtYXhMaW5lV2lkdGggPSAwO1xuICAgIHZhciBsaW5lV2lkdGhzID0gW107XG4gICAgdmFyIGxpbmUgPSAwO1xuICAgIHZhciBzY2FsZSA9IHRoaXMuX2ZvbnQuc2l6ZSAvIGRhdGEuc2l6ZTtcbiAgICB2YXIgbGFzdFNwYWNlID0gLTE7XG4gICAgdmFyIG1heExpbmVIZWlnaHQgPSAwO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLnRleHQubGVuZ3RoOyBpKyspXG4gICAge1xuICAgICAgICB2YXIgY2hhckNvZGUgPSB0aGlzLnRleHQuY2hhckNvZGVBdChpKTtcbiAgICAgICAgbGFzdFNwYWNlID0gLyhcXHMpLy50ZXN0KHRoaXMudGV4dC5jaGFyQXQoaSkpID8gaSA6IGxhc3RTcGFjZTtcblxuICAgICAgICBpZiAoLyg/OlxcclxcbnxcXHJ8XFxuKS8udGVzdCh0aGlzLnRleHQuY2hhckF0KGkpKSlcbiAgICAgICAge1xuICAgICAgICAgICAgbGluZVdpZHRocy5wdXNoKGxhc3RMaW5lV2lkdGgpO1xuICAgICAgICAgICAgbWF4TGluZVdpZHRoID0gTWF0aC5tYXgobWF4TGluZVdpZHRoLCBsYXN0TGluZVdpZHRoKTtcbiAgICAgICAgICAgIGxpbmUrKztcblxuICAgICAgICAgICAgcG9zLnggPSAwO1xuICAgICAgICAgICAgcG9zLnkgKz0gZGF0YS5saW5lSGVpZ2h0O1xuICAgICAgICAgICAgcHJldkNoYXJDb2RlID0gbnVsbDtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGxhc3RTcGFjZSAhPT0gLTEgJiYgdGhpcy5tYXhXaWR0aCA+IDAgJiYgcG9zLnggKiBzY2FsZSA+IHRoaXMubWF4V2lkdGgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNvcmUudXRpbHMucmVtb3ZlSXRlbXMoY2hhcnMsIGxhc3RTcGFjZSwgaSAtIGxhc3RTcGFjZSk7XG4gICAgICAgICAgICBpID0gbGFzdFNwYWNlO1xuICAgICAgICAgICAgbGFzdFNwYWNlID0gLTE7XG5cbiAgICAgICAgICAgIGxpbmVXaWR0aHMucHVzaChsYXN0TGluZVdpZHRoKTtcbiAgICAgICAgICAgIG1heExpbmVXaWR0aCA9IE1hdGgubWF4KG1heExpbmVXaWR0aCwgbGFzdExpbmVXaWR0aCk7XG4gICAgICAgICAgICBsaW5lKys7XG5cbiAgICAgICAgICAgIHBvcy54ID0gMDtcbiAgICAgICAgICAgIHBvcy55ICs9IGRhdGEubGluZUhlaWdodDtcbiAgICAgICAgICAgIHByZXZDaGFyQ29kZSA9IG51bGw7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBjaGFyRGF0YSA9IGRhdGEuY2hhcnNbY2hhckNvZGVdO1xuXG4gICAgICAgIGlmICghY2hhckRhdGEpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHByZXZDaGFyQ29kZSAmJiBjaGFyRGF0YS5rZXJuaW5nW3ByZXZDaGFyQ29kZV0pXG4gICAgICAgIHtcbiAgICAgICAgICAgIHBvcy54ICs9IGNoYXJEYXRhLmtlcm5pbmdbcHJldkNoYXJDb2RlXTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNoYXJzLnB1c2goe3RleHR1cmU6Y2hhckRhdGEudGV4dHVyZSwgbGluZTogbGluZSwgY2hhckNvZGU6IGNoYXJDb2RlLCBwb3NpdGlvbjogbmV3IGNvcmUuUG9pbnQocG9zLnggKyBjaGFyRGF0YS54T2Zmc2V0LCBwb3MueSArIGNoYXJEYXRhLnlPZmZzZXQpfSk7XG4gICAgICAgIGxhc3RMaW5lV2lkdGggPSBwb3MueCArIChjaGFyRGF0YS50ZXh0dXJlLndpZHRoICsgY2hhckRhdGEueE9mZnNldCk7XG4gICAgICAgIHBvcy54ICs9IGNoYXJEYXRhLnhBZHZhbmNlO1xuICAgICAgICBtYXhMaW5lSGVpZ2h0ID0gTWF0aC5tYXgobWF4TGluZUhlaWdodCwgKGNoYXJEYXRhLnlPZmZzZXQgKyBjaGFyRGF0YS50ZXh0dXJlLmhlaWdodCkpO1xuICAgICAgICBwcmV2Q2hhckNvZGUgPSBjaGFyQ29kZTtcbiAgICB9XG5cbiAgICBsaW5lV2lkdGhzLnB1c2gobGFzdExpbmVXaWR0aCk7XG4gICAgbWF4TGluZVdpZHRoID0gTWF0aC5tYXgobWF4TGluZVdpZHRoLCBsYXN0TGluZVdpZHRoKTtcblxuICAgIHZhciBsaW5lQWxpZ25PZmZzZXRzID0gW107XG5cbiAgICBmb3IgKGkgPSAwOyBpIDw9IGxpbmU7IGkrKylcbiAgICB7XG4gICAgICAgIHZhciBhbGlnbk9mZnNldCA9IDA7XG5cbiAgICAgICAgaWYgKHRoaXMuX2ZvbnQuYWxpZ24gPT09ICdyaWdodCcpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGFsaWduT2Zmc2V0ID0gbWF4TGluZVdpZHRoIC0gbGluZVdpZHRoc1tpXTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh0aGlzLl9mb250LmFsaWduID09PSAnY2VudGVyJylcbiAgICAgICAge1xuICAgICAgICAgICAgYWxpZ25PZmZzZXQgPSAobWF4TGluZVdpZHRoIC0gbGluZVdpZHRoc1tpXSkgLyAyO1xuICAgICAgICB9XG5cbiAgICAgICAgbGluZUFsaWduT2Zmc2V0cy5wdXNoKGFsaWduT2Zmc2V0KTtcbiAgICB9XG5cbiAgICB2YXIgbGVuQ2hhcnMgPSBjaGFycy5sZW5ndGg7XG4gICAgdmFyIHRpbnQgPSB0aGlzLnRpbnQ7XG5cbiAgICBmb3IgKGkgPSAwOyBpIDwgbGVuQ2hhcnM7IGkrKylcbiAgICB7XG4gICAgICAgIHZhciBjID0gdGhpcy5fZ2x5cGhzW2ldOyAvLyBnZXQgdGhlIG5leHQgZ2x5cGggc3ByaXRlXG5cbiAgICAgICAgaWYgKGMpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGMudGV4dHVyZSA9IGNoYXJzW2ldLnRleHR1cmU7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgICBjID0gbmV3IGNvcmUuU3ByaXRlKGNoYXJzW2ldLnRleHR1cmUpO1xuICAgICAgICAgICAgdGhpcy5fZ2x5cGhzLnB1c2goYyk7XG4gICAgICAgIH1cblxuICAgICAgICBjLnBvc2l0aW9uLnggPSAoY2hhcnNbaV0ucG9zaXRpb24ueCArIGxpbmVBbGlnbk9mZnNldHNbY2hhcnNbaV0ubGluZV0pICogc2NhbGU7XG4gICAgICAgIGMucG9zaXRpb24ueSA9IGNoYXJzW2ldLnBvc2l0aW9uLnkgKiBzY2FsZTtcbiAgICAgICAgYy5zY2FsZS54ID0gYy5zY2FsZS55ID0gc2NhbGU7XG4gICAgICAgIGMudGludCA9IHRpbnQ7XG5cbiAgICAgICAgaWYgKCFjLnBhcmVudClcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5hZGRDaGlsZChjKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIHJlbW92ZSB1bm5lY2Vzc2FyeSBjaGlsZHJlbi5cbiAgICBmb3IgKGkgPSBsZW5DaGFyczsgaSA8IHRoaXMuX2dseXBocy5sZW5ndGg7ICsraSlcbiAgICB7XG4gICAgICAgIHRoaXMucmVtb3ZlQ2hpbGQodGhpcy5fZ2x5cGhzW2ldKTtcbiAgICB9XG5cbiAgICB0aGlzLnRleHRXaWR0aCA9IG1heExpbmVXaWR0aCAqIHNjYWxlO1xuICAgIHRoaXMudGV4dEhlaWdodCA9IChwb3MueSArIGRhdGEubGluZUhlaWdodCkgKiBzY2FsZTtcbiAgICB0aGlzLm1heExpbmVIZWlnaHQgPSBtYXhMaW5lSGVpZ2h0ICogc2NhbGU7XG59O1xuXG4vKipcbiAqIFVwZGF0ZXMgdGhlIHRyYW5zZm9ybSBvZiB0aGlzIG9iamVjdFxuICpcbiAqIEBwcml2YXRlXG4gKi9cbkJpdG1hcFRleHQucHJvdG90eXBlLnVwZGF0ZVRyYW5zZm9ybSA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy52YWxpZGF0ZSgpO1xuICAgIHRoaXMuY29udGFpbmVyVXBkYXRlVHJhbnNmb3JtKCk7XG59O1xuXG4vKipcbiAqIFZhbGlkYXRlcyB0ZXh0IGJlZm9yZSBjYWxsaW5nIHBhcmVudCdzIGdldExvY2FsQm91bmRzXG4gKlxuICogQHJldHVybiB7UElYSS5SZWN0YW5nbGV9IFRoZSByZWN0YW5ndWxhciBib3VuZGluZyBhcmVhXG4gKi9cblxuQml0bWFwVGV4dC5wcm90b3R5cGUuZ2V0TG9jYWxCb3VuZHMgPSBmdW5jdGlvbigpXG57XG4gICAgdGhpcy52YWxpZGF0ZSgpO1xuICAgIHJldHVybiBjb3JlLkNvbnRhaW5lci5wcm90b3R5cGUuZ2V0TG9jYWxCb3VuZHMuY2FsbCh0aGlzKTtcbn07XG5cbi8qKlxuICogVXBkYXRlcyB0ZXh0IHdoZW4gbmVlZGVkXG4gKlxuICogQHByaXZhdGVcbiAqL1xuQml0bWFwVGV4dC5wcm90b3R5cGUudmFsaWRhdGUgPSBmdW5jdGlvbigpXG57XG4gICAgaWYgKHRoaXMuZGlydHkpXG4gICAge1xuICAgICAgICB0aGlzLnVwZGF0ZVRleHQoKTtcbiAgICAgICAgdGhpcy5kaXJ0eSA9IGZhbHNlO1xuICAgIH1cbn07XG5cbkJpdG1hcFRleHQuZm9udHMgPSB7fTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vY29yZScpO1xuXG4vKipcbiAqIEEgTW92aWVDbGlwIGlzIGEgc2ltcGxlIHdheSB0byBkaXNwbGF5IGFuIGFuaW1hdGlvbiBkZXBpY3RlZCBieSBhIGxpc3Qgb2YgdGV4dHVyZXMuXG4gKlxuICogYGBganNcbiAqIHZhciBhbGllbkltYWdlcyA9IFtcImltYWdlX3NlcXVlbmNlXzAxLnBuZ1wiLFwiaW1hZ2Vfc2VxdWVuY2VfMDIucG5nXCIsXCJpbWFnZV9zZXF1ZW5jZV8wMy5wbmdcIixcImltYWdlX3NlcXVlbmNlXzA0LnBuZ1wiXTtcbiAqIHZhciB0ZXh0dXJlQXJyYXkgPSBbXTtcbiAqXG4gKiBmb3IgKHZhciBpPTA7IGkgPCA0OyBpKyspXG4gKiB7XG4gKiAgICAgIHZhciB0ZXh0dXJlID0gUElYSS5UZXh0dXJlLmZyb21JbWFnZShhbGllbkltYWdlc1tpXSk7XG4gKiAgICAgIHRleHR1cmVBcnJheS5wdXNoKHRleHR1cmUpO1xuICogfTtcbiAqXG4gKiB2YXIgbWMgPSBuZXcgUElYSS5Nb3ZpZUNsaXAodGV4dHVyZUFycmF5KTtcbiAqIGBgYFxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5TcHJpdGVcbiAqIEBtZW1iZXJvZiBQSVhJLmV4dHJhc1xuICogQHBhcmFtIHRleHR1cmVzIHtQSVhJLlRleHR1cmVbXXxPYmplY3RbXX0gYW4gYXJyYXkgb2Yge0BsaW5rIFBJWEkuVGV4dHVyZX0gb3IgZnJhbWUgb2JqZWN0cyB0aGF0IG1ha2UgdXAgdGhlIGFuaW1hdGlvblxuICogQHBhcmFtIHRleHR1cmVzW10udGV4dHVyZSB7UElYSS5UZXh0dXJlfSB0aGUge0BsaW5rIFBJWEkuVGV4dHVyZX0gb2YgdGhlIGZyYW1lXG4gKiBAcGFyYW0gdGV4dHVyZXNbXS50aW1lIHtudW1iZXJ9IHRoZSBkdXJhdGlvbiBvZiB0aGUgZnJhbWUgaW4gbXNcbiAqL1xuZnVuY3Rpb24gTW92aWVDbGlwKHRleHR1cmVzKVxue1xuICAgIGNvcmUuU3ByaXRlLmNhbGwodGhpcywgdGV4dHVyZXNbMF0gaW5zdGFuY2VvZiBjb3JlLlRleHR1cmUgPyB0ZXh0dXJlc1swXSA6IHRleHR1cmVzWzBdLnRleHR1cmUpO1xuXG4gICAgLyoqXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl90ZXh0dXJlcyA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX2R1cmF0aW9ucyA9IG51bGw7XG5cbiAgICB0aGlzLnRleHR1cmVzID0gdGV4dHVyZXM7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgc3BlZWQgdGhhdCB0aGUgTW92aWVDbGlwIHdpbGwgcGxheSBhdC4gSGlnaGVyIGlzIGZhc3RlciwgbG93ZXIgaXMgc2xvd2VyXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMVxuICAgICAqL1xuICAgIHRoaXMuYW5pbWF0aW9uU3BlZWQgPSAxO1xuXG4gICAgLyoqXG4gICAgICogV2hldGhlciBvciBub3QgdGhlIG1vdmllIGNsaXAgcmVwZWF0cyBhZnRlciBwbGF5aW5nLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKiBAZGVmYXVsdCB0cnVlXG4gICAgICovXG4gICAgdGhpcy5sb29wID0gdHJ1ZTtcblxuICAgIC8qKlxuICAgICAqIEZ1bmN0aW9uIHRvIGNhbGwgd2hlbiBhIE1vdmllQ2xpcCBmaW5pc2hlcyBwbGF5aW5nXG4gICAgICpcbiAgICAgKiBAbWV0aG9kXG4gICAgICogQG1lbWJlcm9mIFBJWEkuZXh0cmFzLk1vdmllQ2xpcCNcbiAgICAgKi9cbiAgICB0aGlzLm9uQ29tcGxldGUgPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogRWxhcHNlZCB0aW1lIHNpbmNlIGFuaW1hdGlvbiBoYXMgYmVlbiBzdGFydGVkLCB1c2VkIGludGVybmFsbHkgdG8gZGlzcGxheSBjdXJyZW50IHRleHR1cmVcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX2N1cnJlbnRUaW1lID0gMDtcblxuICAgIC8qKlxuICAgICAqIEluZGljYXRlcyBpZiB0aGUgTW92aWVDbGlwIGlzIGN1cnJlbnRseSBwbGF5aW5nXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqIEByZWFkb25seVxuICAgICAqL1xuICAgIHRoaXMucGxheWluZyA9IGZhbHNlO1xufVxuXG4vLyBjb25zdHJ1Y3RvclxuTW92aWVDbGlwLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoY29yZS5TcHJpdGUucHJvdG90eXBlKTtcbk1vdmllQ2xpcC5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBNb3ZpZUNsaXA7XG5tb2R1bGUuZXhwb3J0cyA9IE1vdmllQ2xpcDtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoTW92aWVDbGlwLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIHRvdGFsRnJhbWVzIGlzIHRoZSB0b3RhbCBudW1iZXIgb2YgZnJhbWVzIGluIHRoZSBNb3ZpZUNsaXAuIFRoaXMgaXMgdGhlIHNhbWUgYXMgbnVtYmVyIG9mIHRleHR1cmVzXG4gICAgICogYXNzaWduZWQgdG8gdGhlIE1vdmllQ2xpcC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5leHRyYXMuTW92aWVDbGlwI1xuICAgICAqIEBkZWZhdWx0IDBcbiAgICAgKiBAcmVhZG9ubHlcbiAgICAgKi9cbiAgICB0b3RhbEZyYW1lczoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3RleHR1cmVzLmxlbmd0aDtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBUaGUgYXJyYXkgb2YgdGV4dHVyZXMgdXNlZCBmb3IgdGhpcyBNb3ZpZUNsaXBcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuVGV4dHVyZVtdfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmV4dHJhcy5Nb3ZpZUNsaXAjXG4gICAgICpcbiAgICAgKi9cbiAgICB0ZXh0dXJlczoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl90ZXh0dXJlcztcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGlmKHZhbHVlWzBdIGluc3RhbmNlb2YgY29yZS5UZXh0dXJlKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHRoaXMuX3RleHR1cmVzID0gdmFsdWU7XG4gICAgICAgICAgICAgICAgdGhpcy5fZHVyYXRpb25zID0gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB0aGlzLl90ZXh0dXJlcyA9IFtdO1xuICAgICAgICAgICAgICAgIHRoaXMuX2R1cmF0aW9ucyA9IFtdO1xuICAgICAgICAgICAgICAgIGZvcih2YXIgaSA9IDA7IGkgPCB2YWx1ZS5sZW5ndGg7IGkrKylcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3RleHR1cmVzLnB1c2godmFsdWVbaV0udGV4dHVyZSk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2R1cmF0aW9ucy5wdXNoKHZhbHVlW2ldLnRpbWUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAqIFRoZSBNb3ZpZUNsaXBzIGN1cnJlbnQgZnJhbWUgaW5kZXhcbiAgICAqXG4gICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgKiBAbWVtYmVyb2YgUElYSS5leHRyYXMuTW92aWVDbGlwI1xuICAgICogQHJlYWRvbmx5XG4gICAgKi9cbiAgICBjdXJyZW50RnJhbWU6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICB2YXIgY3VycmVudEZyYW1lID0gTWF0aC5mbG9vcih0aGlzLl9jdXJyZW50VGltZSkgJSB0aGlzLl90ZXh0dXJlcy5sZW5ndGg7XG4gICAgICAgICAgICBpZiAoY3VycmVudEZyYW1lIDwgMClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjdXJyZW50RnJhbWUgKz0gdGhpcy5fdGV4dHVyZXMubGVuZ3RoO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGN1cnJlbnRGcmFtZTtcbiAgICAgICAgfVxuICAgIH1cblxufSk7XG5cbi8qKlxuICogU3RvcHMgdGhlIE1vdmllQ2xpcFxuICpcbiAqL1xuTW92aWVDbGlwLnByb3RvdHlwZS5zdG9wID0gZnVuY3Rpb24gKClcbntcbiAgICBpZighdGhpcy5wbGF5aW5nKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMucGxheWluZyA9IGZhbHNlO1xuICAgIGNvcmUudGlja2VyLnNoYXJlZC5yZW1vdmUodGhpcy51cGRhdGUsIHRoaXMpO1xufTtcblxuLyoqXG4gKiBQbGF5cyB0aGUgTW92aWVDbGlwXG4gKlxuICovXG5Nb3ZpZUNsaXAucHJvdG90eXBlLnBsYXkgPSBmdW5jdGlvbiAoKVxue1xuICAgIGlmKHRoaXMucGxheWluZylcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLnBsYXlpbmcgPSB0cnVlO1xuICAgIGNvcmUudGlja2VyLnNoYXJlZC5hZGQodGhpcy51cGRhdGUsIHRoaXMpO1xufTtcblxuLyoqXG4gKiBTdG9wcyB0aGUgTW92aWVDbGlwIGFuZCBnb2VzIHRvIGEgc3BlY2lmaWMgZnJhbWVcbiAqXG4gKiBAcGFyYW0gZnJhbWVOdW1iZXIge251bWJlcn0gZnJhbWUgaW5kZXggdG8gc3RvcCBhdFxuICovXG5Nb3ZpZUNsaXAucHJvdG90eXBlLmdvdG9BbmRTdG9wID0gZnVuY3Rpb24gKGZyYW1lTnVtYmVyKVxue1xuICAgIHRoaXMuc3RvcCgpO1xuXG4gICAgdGhpcy5fY3VycmVudFRpbWUgPSBmcmFtZU51bWJlcjtcblxuICAgIHRoaXMuX3RleHR1cmUgPSB0aGlzLl90ZXh0dXJlc1t0aGlzLmN1cnJlbnRGcmFtZV07XG59O1xuXG4vKipcbiAqIEdvZXMgdG8gYSBzcGVjaWZpYyBmcmFtZSBhbmQgYmVnaW5zIHBsYXlpbmcgdGhlIE1vdmllQ2xpcFxuICpcbiAqIEBwYXJhbSBmcmFtZU51bWJlciB7bnVtYmVyfSBmcmFtZSBpbmRleCB0byBzdGFydCBhdFxuICovXG5Nb3ZpZUNsaXAucHJvdG90eXBlLmdvdG9BbmRQbGF5ID0gZnVuY3Rpb24gKGZyYW1lTnVtYmVyKVxue1xuICAgIHRoaXMuX2N1cnJlbnRUaW1lID0gZnJhbWVOdW1iZXI7XG5cbiAgICB0aGlzLnBsYXkoKTtcbn07XG5cbi8qXG4gKiBVcGRhdGVzIHRoZSBvYmplY3QgdHJhbnNmb3JtIGZvciByZW5kZXJpbmdcbiAqIEBwcml2YXRlXG4gKi9cbk1vdmllQ2xpcC5wcm90b3R5cGUudXBkYXRlID0gZnVuY3Rpb24gKGRlbHRhVGltZSlcbntcbiAgICB2YXIgZWxhcHNlZCA9IHRoaXMuYW5pbWF0aW9uU3BlZWQgKiBkZWx0YVRpbWU7XG5cbiAgICBpZiAodGhpcy5fZHVyYXRpb25zICE9PSBudWxsKVxuICAgIHtcbiAgICAgICAgdmFyIGxhZyA9IHRoaXMuX2N1cnJlbnRUaW1lICUgMSAqIHRoaXMuX2R1cmF0aW9uc1t0aGlzLmN1cnJlbnRGcmFtZV07XG5cbiAgICAgICAgbGFnICs9IGVsYXBzZWQgLyA2MCAqIDEwMDA7XG5cbiAgICAgICAgd2hpbGUgKGxhZyA8IDApXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuX2N1cnJlbnRUaW1lLS07XG4gICAgICAgICAgICBsYWcgKz0gdGhpcy5fZHVyYXRpb25zW3RoaXMuY3VycmVudEZyYW1lXTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBzaWduID0gTWF0aC5zaWduKHRoaXMuYW5pbWF0aW9uU3BlZWQgKiBkZWx0YVRpbWUpO1xuICAgICAgICB0aGlzLl9jdXJyZW50VGltZSA9IE1hdGguZmxvb3IodGhpcy5fY3VycmVudFRpbWUpO1xuXG4gICAgICAgIHdoaWxlIChsYWcgPj0gdGhpcy5fZHVyYXRpb25zW3RoaXMuY3VycmVudEZyYW1lXSlcbiAgICAgICAge1xuICAgICAgICAgICAgbGFnIC09IHRoaXMuX2R1cmF0aW9uc1t0aGlzLmN1cnJlbnRGcmFtZV0gKiBzaWduO1xuICAgICAgICAgICAgdGhpcy5fY3VycmVudFRpbWUgKz0gc2lnbjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX2N1cnJlbnRUaW1lICs9IGxhZyAvIHRoaXMuX2R1cmF0aW9uc1t0aGlzLmN1cnJlbnRGcmFtZV07XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHRoaXMuX2N1cnJlbnRUaW1lICs9IGVsYXBzZWQ7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX2N1cnJlbnRUaW1lIDwgMCAmJiAhdGhpcy5sb29wKVxuICAgIHtcbiAgICAgICAgdGhpcy5nb3RvQW5kU3RvcCgwKTtcblxuICAgICAgICBpZiAodGhpcy5vbkNvbXBsZXRlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLm9uQ29tcGxldGUoKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBlbHNlIGlmICh0aGlzLl9jdXJyZW50VGltZSA+PSB0aGlzLl90ZXh0dXJlcy5sZW5ndGggJiYgIXRoaXMubG9vcClcbiAgICB7XG4gICAgICAgIHRoaXMuZ290b0FuZFN0b3AodGhpcy5fdGV4dHVyZXMubGVuZ3RoIC0gMSk7XG5cbiAgICAgICAgaWYgKHRoaXMub25Db21wbGV0ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5vbkNvbXBsZXRlKCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgdGhpcy5fdGV4dHVyZSA9IHRoaXMuX3RleHR1cmVzW3RoaXMuY3VycmVudEZyYW1lXTtcbiAgICB9XG5cbn07XG5cbi8qXG4gKiBTdG9wcyB0aGUgTW92aWVDbGlwIGFuZCBkZXN0cm95cyBpdFxuICpcbiAqL1xuTW92aWVDbGlwLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKCApXG57XG4gICAgdGhpcy5zdG9wKCk7XG4gICAgY29yZS5TcHJpdGUucHJvdG90eXBlLmRlc3Ryb3kuY2FsbCh0aGlzKTtcbn07XG5cbi8qKlxuICogQSBzaG9ydCBoYW5kIHdheSBvZiBjcmVhdGluZyBhIG1vdmllY2xpcCBmcm9tIGFuIGFycmF5IG9mIGZyYW1lIGlkc1xuICpcbiAqIEBzdGF0aWNcbiAqIEBwYXJhbSBmcmFtZXMge3N0cmluZ1tdfSB0aGUgYXJyYXkgb2YgZnJhbWVzIGlkcyB0aGUgbW92aWVjbGlwIHdpbGwgdXNlIGFzIGl0cyB0ZXh0dXJlIGZyYW1lc1xuICovXG5Nb3ZpZUNsaXAuZnJvbUZyYW1lcyA9IGZ1bmN0aW9uIChmcmFtZXMpXG57XG4gICAgdmFyIHRleHR1cmVzID0gW107XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGZyYW1lcy5sZW5ndGg7ICsraSlcbiAgICB7XG4gICAgICAgIHRleHR1cmVzLnB1c2gobmV3IGNvcmUuVGV4dHVyZS5mcm9tRnJhbWUoZnJhbWVzW2ldKSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBNb3ZpZUNsaXAodGV4dHVyZXMpO1xufTtcblxuLyoqXG4gKiBBIHNob3J0IGhhbmQgd2F5IG9mIGNyZWF0aW5nIGEgbW92aWVjbGlwIGZyb20gYW4gYXJyYXkgb2YgaW1hZ2UgaWRzXG4gKlxuICogQHN0YXRpY1xuICogQHBhcmFtIGltYWdlcyB7c3RyaW5nW119IHRoZSBhcnJheSBvZiBpbWFnZSB1cmxzIHRoZSBtb3ZpZWNsaXAgd2lsbCB1c2UgYXMgaXRzIHRleHR1cmUgZnJhbWVzXG4gKi9cbk1vdmllQ2xpcC5mcm9tSW1hZ2VzID0gZnVuY3Rpb24gKGltYWdlcylcbntcbiAgICB2YXIgdGV4dHVyZXMgPSBbXTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgaW1hZ2VzLmxlbmd0aDsgKytpKVxuICAgIHtcbiAgICAgICAgdGV4dHVyZXMucHVzaChuZXcgY29yZS5UZXh0dXJlLmZyb21JbWFnZShpbWFnZXNbaV0pKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IE1vdmllQ2xpcCh0ZXh0dXJlcyk7XG59OyIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vY29yZScpLFxuICAgIC8vIGEgc3ByaXRlIHVzZSBkZm9yIHJlbmRlcmluZyB0ZXh0dXJlcy4uXG4gICAgdGVtcFBvaW50ID0gbmV3IGNvcmUuUG9pbnQoKSxcbiAgICBDYW52YXNUaW50ZXIgPSByZXF1aXJlKCcuLi9jb3JlL3JlbmRlcmVycy9jYW52YXMvdXRpbHMvQ2FudmFzVGludGVyJyk7XG5cbi8qKlxuICogQSB0aWxpbmcgc3ByaXRlIGlzIGEgZmFzdCB3YXkgb2YgcmVuZGVyaW5nIGEgdGlsaW5nIGltYWdlXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLlNwcml0ZVxuICogQG1lbWJlcm9mIFBJWEkuZXh0cmFzXG4gKiBAcGFyYW0gdGV4dHVyZSB7VGV4dHVyZX0gdGhlIHRleHR1cmUgb2YgdGhlIHRpbGluZyBzcHJpdGVcbiAqIEBwYXJhbSB3aWR0aCB7bnVtYmVyfSAgdGhlIHdpZHRoIG9mIHRoZSB0aWxpbmcgc3ByaXRlXG4gKiBAcGFyYW0gaGVpZ2h0IHtudW1iZXJ9IHRoZSBoZWlnaHQgb2YgdGhlIHRpbGluZyBzcHJpdGVcbiAqL1xuZnVuY3Rpb24gVGlsaW5nU3ByaXRlKHRleHR1cmUsIHdpZHRoLCBoZWlnaHQpXG57XG4gICAgY29yZS5TcHJpdGUuY2FsbCh0aGlzLCB0ZXh0dXJlKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBzY2FsaW5nIG9mIHRoZSBpbWFnZSB0aGF0IGlzIGJlaW5nIHRpbGVkXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlBvaW50fVxuICAgICAqL1xuICAgIHRoaXMudGlsZVNjYWxlID0gbmV3IGNvcmUuUG9pbnQoMSwxKTtcblxuXG4gICAgLyoqXG4gICAgICogVGhlIG9mZnNldCBwb3NpdGlvbiBvZiB0aGUgaW1hZ2UgdGhhdCBpcyBiZWluZyB0aWxlZFxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5Qb2ludH1cbiAgICAgKi9cbiAgICB0aGlzLnRpbGVQb3NpdGlvbiA9IG5ldyBjb3JlLlBvaW50KDAsMCk7XG5cbiAgICAvLy8vLyBwcml2YXRlXG5cbiAgICAvKipcbiAgICAgKiBUaGUgd2l0aCBvZiB0aGUgdGlsaW5nIHNwcml0ZVxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fd2lkdGggPSB3aWR0aCB8fCAxMDA7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgaGVpZ2h0IG9mIHRoZSB0aWxpbmcgc3ByaXRlXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9oZWlnaHQgPSBoZWlnaHQgfHwgMTAwO1xuXG4gICAgLyoqXG4gICAgICogQW4gaW50ZXJuYWwgV2ViR0wgVVYgY2FjaGUuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlRleHR1cmVVdnN9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl91dnMgPSBuZXcgY29yZS5UZXh0dXJlVXZzKCk7XG5cbiAgICB0aGlzLl9jYW52YXNQYXR0ZXJuID0gbnVsbDtcblxuICAgIC8vVE9ETyBtb3ZlLi5cbiAgICB0aGlzLnNoYWRlciA9IG5ldyBjb3JlLkFic3RyYWN0RmlsdGVyKFxuXG4gICAgICBbXG4gICAgICAgICdwcmVjaXNpb24gbG93cCBmbG9hdDsnLFxuICAgICAgICAnYXR0cmlidXRlIHZlYzIgYVZlcnRleFBvc2l0aW9uOycsXG4gICAgICAgICdhdHRyaWJ1dGUgdmVjMiBhVGV4dHVyZUNvb3JkOycsXG4gICAgICAgICdhdHRyaWJ1dGUgdmVjNCBhQ29sb3I7JyxcblxuICAgICAgICAndW5pZm9ybSBtYXQzIHByb2plY3Rpb25NYXRyaXg7JyxcblxuICAgICAgICAndW5pZm9ybSB2ZWM0IHVGcmFtZTsnLFxuICAgICAgICAndW5pZm9ybSB2ZWM0IHVUcmFuc2Zvcm07JyxcblxuICAgICAgICAndmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7JyxcbiAgICAgICAgJ3ZhcnlpbmcgdmVjNCB2Q29sb3I7JyxcblxuICAgICAgICAndm9pZCBtYWluKHZvaWQpeycsXG4gICAgICAgICcgICBnbF9Qb3NpdGlvbiA9IHZlYzQoKHByb2plY3Rpb25NYXRyaXggKiB2ZWMzKGFWZXJ0ZXhQb3NpdGlvbiwgMS4wKSkueHksIDAuMCwgMS4wKTsnLFxuXG4gICAgICAgICcgICB2ZWMyIGNvb3JkID0gYVRleHR1cmVDb29yZDsnLFxuICAgICAgICAnICAgY29vcmQgLT0gdVRyYW5zZm9ybS54eTsnLFxuICAgICAgICAnICAgY29vcmQgLz0gdVRyYW5zZm9ybS56dzsnLFxuICAgICAgICAnICAgdlRleHR1cmVDb29yZCA9IGNvb3JkOycsXG5cbiAgICAgICAgJyAgIHZDb2xvciA9IHZlYzQoYUNvbG9yLnJnYiAqIGFDb2xvci5hLCBhQ29sb3IuYSk7JyxcbiAgICAgICAgJ30nXG4gICAgICBdLmpvaW4oJ1xcbicpLFxuICAgICAgW1xuICAgICAgICAncHJlY2lzaW9uIGxvd3AgZmxvYXQ7JyxcblxuICAgICAgICAndmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7JyxcbiAgICAgICAgJ3ZhcnlpbmcgdmVjNCB2Q29sb3I7JyxcblxuICAgICAgICAndW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXI7JyxcbiAgICAgICAgJ3VuaWZvcm0gdmVjNCB1RnJhbWU7JyxcbiAgICAgICAgJ3VuaWZvcm0gdmVjMiB1UGl4ZWxTaXplOycsXG5cbiAgICAgICAgJ3ZvaWQgbWFpbih2b2lkKXsnLFxuXG4gICAgICAgICcgICB2ZWMyIGNvb3JkID0gbW9kKHZUZXh0dXJlQ29vcmQsIHVGcmFtZS56dyk7JyxcbiAgICAgICAgJyAgIGNvb3JkID0gY2xhbXAoY29vcmQsIHVQaXhlbFNpemUsIHVGcmFtZS56dyAtIHVQaXhlbFNpemUpOycsXG4gICAgICAgICcgICBjb29yZCArPSB1RnJhbWUueHk7JyxcblxuICAgICAgICAnICAgZ2xfRnJhZ0NvbG9yID0gIHRleHR1cmUyRCh1U2FtcGxlciwgY29vcmQpICogdkNvbG9yIDsnLFxuICAgICAgICAnfSdcbiAgICAgIF0uam9pbignXFxuJyksXG5cbiAgICAgICAgICAgIC8vIHNldCB0aGUgdW5pZm9ybXNcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB1RnJhbWU6IHsgdHlwZTogJzRmdicsIHZhbHVlOiBbMCwwLDEsMV0gfSxcbiAgICAgICAgICAgICAgICB1VHJhbnNmb3JtOiB7IHR5cGU6ICc0ZnYnLCB2YWx1ZTogWzAsMCwxLDFdIH0sXG4gICAgICAgICAgICAgICAgdVBpeGVsU2l6ZSA6IHsgdHlwZSA6ICcyZnYnLCB2YWx1ZTogWzEsIDFdfVxuICAgICAgICAgICAgfVxuICAgICAgKTtcbn1cblxuVGlsaW5nU3ByaXRlLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoY29yZS5TcHJpdGUucHJvdG90eXBlKTtcblRpbGluZ1Nwcml0ZS5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBUaWxpbmdTcHJpdGU7XG5tb2R1bGUuZXhwb3J0cyA9IFRpbGluZ1Nwcml0ZTtcblxuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhUaWxpbmdTcHJpdGUucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogVGhlIHdpZHRoIG9mIHRoZSBzcHJpdGUsIHNldHRpbmcgdGhpcyB3aWxsIGFjdHVhbGx5IG1vZGlmeSB0aGUgc2NhbGUgdG8gYWNoaWV2ZSB0aGUgdmFsdWUgc2V0XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZXh0cmFzLlRpbGluZ1Nwcml0ZSNcbiAgICAgKi9cbiAgICB3aWR0aDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl93aWR0aDtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuX3dpZHRoID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVGhlIGhlaWdodCBvZiB0aGUgVGlsaW5nU3ByaXRlLCBzZXR0aW5nIHRoaXMgd2lsbCBhY3R1YWxseSBtb2RpZnkgdGhlIHNjYWxlIHRvIGFjaGlldmUgdGhlIHZhbHVlIHNldFxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmV4dHJhcy5UaWxpbmdTcHJpdGUjXG4gICAgICovXG4gICAgaGVpZ2h0OiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2hlaWdodDtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuX2hlaWdodCA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfVxufSk7XG5cblRpbGluZ1Nwcml0ZS5wcm90b3R5cGUuX29uVGV4dHVyZVVwZGF0ZSA9IGZ1bmN0aW9uICgpXG57XG4gICAgcmV0dXJuO1xufTtcblxuXG4vKipcbiAqIFJlbmRlcnMgdGhlIG9iamVjdCB1c2luZyB0aGUgV2ViR0wgcmVuZGVyZXJcbiAqXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcn1cbiAqIEBwcml2YXRlXG4gKi9cblRpbGluZ1Nwcml0ZS5wcm90b3R5cGUuX3JlbmRlcldlYkdMID0gZnVuY3Rpb24gKHJlbmRlcmVyKVxue1xuICAgIC8vIHR3ZWFrIG91ciB0ZXh0dXJlIHRlbXBvcmFyaWx5Li5cbiAgICB2YXIgdGV4dHVyZSA9IHRoaXMuX3RleHR1cmU7XG5cbiAgICBpZighdGV4dHVyZSB8fCAhdGV4dHVyZS5fdXZzKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHZhciB0ZW1wVXZzID0gdGV4dHVyZS5fdXZzLFxuICAgICAgICB0ZW1wV2lkdGggPSB0ZXh0dXJlLl9mcmFtZS53aWR0aCxcbiAgICAgICAgdGVtcEhlaWdodCA9IHRleHR1cmUuX2ZyYW1lLmhlaWdodCxcbiAgICAgICAgdHcgPSB0ZXh0dXJlLmJhc2VUZXh0dXJlLndpZHRoLFxuICAgICAgICB0aCA9IHRleHR1cmUuYmFzZVRleHR1cmUuaGVpZ2h0O1xuXG4gICAgdGV4dHVyZS5fdXZzID0gdGhpcy5fdXZzO1xuICAgIHRleHR1cmUuX2ZyYW1lLndpZHRoID0gdGhpcy53aWR0aDtcbiAgICB0ZXh0dXJlLl9mcmFtZS5oZWlnaHQgPSB0aGlzLmhlaWdodDtcblxuICAgIHRoaXMuc2hhZGVyLnVuaWZvcm1zLnVQaXhlbFNpemUudmFsdWVbMF0gPSAxLjAvdHc7XG4gICAgdGhpcy5zaGFkZXIudW5pZm9ybXMudVBpeGVsU2l6ZS52YWx1ZVsxXSA9IDEuMC90aDtcblxuICAgIHRoaXMuc2hhZGVyLnVuaWZvcm1zLnVGcmFtZS52YWx1ZVswXSA9IHRlbXBVdnMueDA7XG4gICAgdGhpcy5zaGFkZXIudW5pZm9ybXMudUZyYW1lLnZhbHVlWzFdID0gdGVtcFV2cy55MDtcbiAgICB0aGlzLnNoYWRlci51bmlmb3Jtcy51RnJhbWUudmFsdWVbMl0gPSB0ZW1wVXZzLngxIC0gdGVtcFV2cy54MDtcbiAgICB0aGlzLnNoYWRlci51bmlmb3Jtcy51RnJhbWUudmFsdWVbM10gPSB0ZW1wVXZzLnkyIC0gdGVtcFV2cy55MDtcblxuICAgIHRoaXMuc2hhZGVyLnVuaWZvcm1zLnVUcmFuc2Zvcm0udmFsdWVbMF0gPSAodGhpcy50aWxlUG9zaXRpb24ueCAlICh0ZW1wV2lkdGggKiB0aGlzLnRpbGVTY2FsZS54KSkgLyB0aGlzLl93aWR0aDtcbiAgICB0aGlzLnNoYWRlci51bmlmb3Jtcy51VHJhbnNmb3JtLnZhbHVlWzFdID0gKHRoaXMudGlsZVBvc2l0aW9uLnkgJSAodGVtcEhlaWdodCAqIHRoaXMudGlsZVNjYWxlLnkpKSAvIHRoaXMuX2hlaWdodDtcbiAgICB0aGlzLnNoYWRlci51bmlmb3Jtcy51VHJhbnNmb3JtLnZhbHVlWzJdID0gKCB0dyAvIHRoaXMuX3dpZHRoICkgKiB0aGlzLnRpbGVTY2FsZS54O1xuICAgIHRoaXMuc2hhZGVyLnVuaWZvcm1zLnVUcmFuc2Zvcm0udmFsdWVbM10gPSAoIHRoIC8gdGhpcy5faGVpZ2h0ICkgKiB0aGlzLnRpbGVTY2FsZS55O1xuXG4gICAgcmVuZGVyZXIuc2V0T2JqZWN0UmVuZGVyZXIocmVuZGVyZXIucGx1Z2lucy5zcHJpdGUpO1xuICAgIHJlbmRlcmVyLnBsdWdpbnMuc3ByaXRlLnJlbmRlcih0aGlzKTtcblxuICAgIHRleHR1cmUuX3V2cyA9IHRlbXBVdnM7XG4gICAgdGV4dHVyZS5fZnJhbWUud2lkdGggPSB0ZW1wV2lkdGg7XG4gICAgdGV4dHVyZS5fZnJhbWUuaGVpZ2h0ID0gdGVtcEhlaWdodDtcbn07XG5cbi8qKlxuICogUmVuZGVycyB0aGUgb2JqZWN0IHVzaW5nIHRoZSBDYW52YXMgcmVuZGVyZXJcbiAqXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuQ2FudmFzUmVuZGVyZXJ9IGEgcmVmZXJlbmNlIHRvIHRoZSBjYW52YXMgcmVuZGVyZXJcbiAqIEBwcml2YXRlXG4gKi9cblRpbGluZ1Nwcml0ZS5wcm90b3R5cGUuX3JlbmRlckNhbnZhcyA9IGZ1bmN0aW9uIChyZW5kZXJlcilcbntcbiAgICB2YXIgdGV4dHVyZSA9IHRoaXMuX3RleHR1cmU7XG5cbiAgICBpZiAoIXRleHR1cmUuYmFzZVRleHR1cmUuaGFzTG9hZGVkKVxuICAgIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB2YXIgY29udGV4dCA9IHJlbmRlcmVyLmNvbnRleHQsXG4gICAgICAgIHRyYW5zZm9ybSA9IHRoaXMud29ybGRUcmFuc2Zvcm0sXG4gICAgICAgIHJlc29sdXRpb24gPSByZW5kZXJlci5yZXNvbHV0aW9uLFxuICAgICAgICBiYXNlVGV4dHVyZSA9IHRleHR1cmUuYmFzZVRleHR1cmUsXG4gICAgICAgIG1vZFggPSAodGhpcy50aWxlUG9zaXRpb24ueCAvIHRoaXMudGlsZVNjYWxlLngpICUgdGV4dHVyZS5fZnJhbWUud2lkdGgsXG4gICAgICAgIG1vZFkgPSAodGhpcy50aWxlUG9zaXRpb24ueSAvIHRoaXMudGlsZVNjYWxlLnkpICUgdGV4dHVyZS5fZnJhbWUuaGVpZ2h0O1xuXG4gICAgLy8gY3JlYXRlIGEgbmljZSBzaGlueSBwYXR0ZXJuIVxuICAgIC8vIFRPRE8gdGhpcyBuZWVkcyB0byBiZSByZWZyZXNoZWQgaWYgdGV4dHVyZSBjaGFuZ2VzLi5cbiAgICBpZighdGhpcy5fY2FudmFzUGF0dGVybilcbiAgICB7XG4gICAgICAgIC8vIGN1dCBhbiBvYmplY3QgZnJvbSBhIHNwcml0ZXNoZWV0Li5cbiAgICAgICAgdmFyIHRlbXBDYW52YXMgPSBuZXcgY29yZS5DYW52YXNCdWZmZXIodGV4dHVyZS5fZnJhbWUud2lkdGgsIHRleHR1cmUuX2ZyYW1lLmhlaWdodCk7XG5cbiAgICAgICAgLy8gVGludCB0aGUgdGlsaW5nIHNwcml0ZVxuICAgICAgICBpZiAodGhpcy50aW50ICE9PSAweEZGRkZGRilcbiAgICAgICAge1xuICAgICAgICAgICAgaWYgKHRoaXMuY2FjaGVkVGludCAhPT0gdGhpcy50aW50KVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHRoaXMuY2FjaGVkVGludCA9IHRoaXMudGludDtcblxuICAgICAgICAgICAgICAgIHRoaXMudGludGVkVGV4dHVyZSA9IENhbnZhc1RpbnRlci5nZXRUaW50ZWRUZXh0dXJlKHRoaXMsIHRoaXMudGludCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0ZW1wQ2FudmFzLmNvbnRleHQuZHJhd0ltYWdlKHRoaXMudGludGVkVGV4dHVyZSwgMCwgMCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgICB0ZW1wQ2FudmFzLmNvbnRleHQuZHJhd0ltYWdlKGJhc2VUZXh0dXJlLnNvdXJjZSwgLXRleHR1cmUuX2ZyYW1lLngsIC10ZXh0dXJlLl9mcmFtZS55KTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9jYW52YXNQYXR0ZXJuID0gdGVtcENhbnZhcy5jb250ZXh0LmNyZWF0ZVBhdHRlcm4oIHRlbXBDYW52YXMuY2FudmFzLCAncmVwZWF0JyApO1xuICAgIH1cblxuICAgIC8vIHNldCBjb250ZXh0IHN0YXRlLi5cbiAgICBjb250ZXh0Lmdsb2JhbEFscGhhID0gdGhpcy53b3JsZEFscGhhO1xuICAgIGNvbnRleHQuc2V0VHJhbnNmb3JtKHRyYW5zZm9ybS5hICogcmVzb2x1dGlvbixcbiAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtLmIgKiByZXNvbHV0aW9uLFxuICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2Zvcm0uYyAqIHJlc29sdXRpb24sXG4gICAgICAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybS5kICogcmVzb2x1dGlvbixcbiAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtLnR4ICogcmVzb2x1dGlvbixcbiAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtLnR5ICogcmVzb2x1dGlvbik7XG5cbiAgICAvLyBUT0RPIC0gdGhpcyBzaG91bGQgYmUgcm9sbGVkIGludG8gdGhlIHNldFRyYW5zZm9ybSBhYm92ZS4uXG4gICAgY29udGV4dC5zY2FsZSh0aGlzLnRpbGVTY2FsZS54LHRoaXMudGlsZVNjYWxlLnkpO1xuXG4gICAgY29udGV4dC50cmFuc2xhdGUobW9kWCArICh0aGlzLmFuY2hvci54ICogLXRoaXMuX3dpZHRoICksXG4gICAgICAgICAgICAgICAgICAgICAgbW9kWSArICh0aGlzLmFuY2hvci55ICogLXRoaXMuX2hlaWdodCkpO1xuXG4gICAgLy8gY2hlY2sgYmxlbmQgbW9kZVxuICAgIHZhciBjb21wb3NpdGVPcGVyYXRpb24gPSByZW5kZXJlci5ibGVuZE1vZGVzW3RoaXMuYmxlbmRNb2RlXTtcbiAgICBpZiAoY29tcG9zaXRlT3BlcmF0aW9uICE9PSByZW5kZXJlci5jb250ZXh0Lmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbilcbiAgICB7XG4gICAgICAgIGNvbnRleHQuZ2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uID0gY29tcG9zaXRlT3BlcmF0aW9uO1xuICAgIH1cblxuICAgIC8vIGZpbGwgdGhlIHBhdHRlcm4hXG4gICAgY29udGV4dC5maWxsU3R5bGUgPSB0aGlzLl9jYW52YXNQYXR0ZXJuO1xuICAgIGNvbnRleHQuZmlsbFJlY3QoLW1vZFgsXG4gICAgICAgICAgICAgICAgICAgICAtbW9kWSxcbiAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3dpZHRoIC8gdGhpcy50aWxlU2NhbGUueCxcbiAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2hlaWdodCAvIHRoaXMudGlsZVNjYWxlLnkpO1xuXG5cbiAgICAvL1RPRE8gLSBwcmV0dHkgc3VyZSB0aGlzIGNhbiBiZSBkZWxldGVkLi4uXG4gICAgLy9jb250ZXh0LnRyYW5zbGF0ZSgtdGhpcy50aWxlUG9zaXRpb24ueCArICh0aGlzLmFuY2hvci54ICogdGhpcy5fd2lkdGgpLCAtdGhpcy50aWxlUG9zaXRpb24ueSArICh0aGlzLmFuY2hvci55ICogdGhpcy5faGVpZ2h0KSk7XG4gICAgLy9jb250ZXh0LnNjYWxlKDEgLyB0aGlzLnRpbGVTY2FsZS54LCAxIC8gdGhpcy50aWxlU2NhbGUueSk7XG59O1xuXG5cbi8qKlxuICogUmV0dXJucyB0aGUgZnJhbWluZyByZWN0YW5nbGUgb2YgdGhlIHNwcml0ZSBhcyBhIFJlY3RhbmdsZSBvYmplY3RcbipcbiAqIEByZXR1cm4ge1BJWEkuUmVjdGFuZ2xlfSB0aGUgZnJhbWluZyByZWN0YW5nbGVcbiAqL1xuVGlsaW5nU3ByaXRlLnByb3RvdHlwZS5nZXRCb3VuZHMgPSBmdW5jdGlvbiAoKVxue1xuICAgIHZhciB3aWR0aCA9IHRoaXMuX3dpZHRoO1xuICAgIHZhciBoZWlnaHQgPSB0aGlzLl9oZWlnaHQ7XG5cbiAgICB2YXIgdzAgPSB3aWR0aCAqICgxLXRoaXMuYW5jaG9yLngpO1xuICAgIHZhciB3MSA9IHdpZHRoICogLXRoaXMuYW5jaG9yLng7XG5cbiAgICB2YXIgaDAgPSBoZWlnaHQgKiAoMS10aGlzLmFuY2hvci55KTtcbiAgICB2YXIgaDEgPSBoZWlnaHQgKiAtdGhpcy5hbmNob3IueTtcblxuICAgIHZhciB3b3JsZFRyYW5zZm9ybSA9IHRoaXMud29ybGRUcmFuc2Zvcm07XG5cbiAgICB2YXIgYSA9IHdvcmxkVHJhbnNmb3JtLmE7XG4gICAgdmFyIGIgPSB3b3JsZFRyYW5zZm9ybS5iO1xuICAgIHZhciBjID0gd29ybGRUcmFuc2Zvcm0uYztcbiAgICB2YXIgZCA9IHdvcmxkVHJhbnNmb3JtLmQ7XG4gICAgdmFyIHR4ID0gd29ybGRUcmFuc2Zvcm0udHg7XG4gICAgdmFyIHR5ID0gd29ybGRUcmFuc2Zvcm0udHk7XG5cbiAgICB2YXIgeDEgPSBhICogdzEgKyBjICogaDEgKyB0eDtcbiAgICB2YXIgeTEgPSBkICogaDEgKyBiICogdzEgKyB0eTtcblxuICAgIHZhciB4MiA9IGEgKiB3MCArIGMgKiBoMSArIHR4O1xuICAgIHZhciB5MiA9IGQgKiBoMSArIGIgKiB3MCArIHR5O1xuXG4gICAgdmFyIHgzID0gYSAqIHcwICsgYyAqIGgwICsgdHg7XG4gICAgdmFyIHkzID0gZCAqIGgwICsgYiAqIHcwICsgdHk7XG5cbiAgICB2YXIgeDQgPSAgYSAqIHcxICsgYyAqIGgwICsgdHg7XG4gICAgdmFyIHk0ID0gIGQgKiBoMCArIGIgKiB3MSArIHR5O1xuXG4gICAgdmFyIG1pblgsXG4gICAgICAgIG1heFgsXG4gICAgICAgIG1pblksXG4gICAgICAgIG1heFk7XG5cbiAgICBtaW5YID0geDE7XG4gICAgbWluWCA9IHgyIDwgbWluWCA/IHgyIDogbWluWDtcbiAgICBtaW5YID0geDMgPCBtaW5YID8geDMgOiBtaW5YO1xuICAgIG1pblggPSB4NCA8IG1pblggPyB4NCA6IG1pblg7XG5cbiAgICBtaW5ZID0geTE7XG4gICAgbWluWSA9IHkyIDwgbWluWSA/IHkyIDogbWluWTtcbiAgICBtaW5ZID0geTMgPCBtaW5ZID8geTMgOiBtaW5ZO1xuICAgIG1pblkgPSB5NCA8IG1pblkgPyB5NCA6IG1pblk7XG5cbiAgICBtYXhYID0geDE7XG4gICAgbWF4WCA9IHgyID4gbWF4WCA/IHgyIDogbWF4WDtcbiAgICBtYXhYID0geDMgPiBtYXhYID8geDMgOiBtYXhYO1xuICAgIG1heFggPSB4NCA+IG1heFggPyB4NCA6IG1heFg7XG5cbiAgICBtYXhZID0geTE7XG4gICAgbWF4WSA9IHkyID4gbWF4WSA/IHkyIDogbWF4WTtcbiAgICBtYXhZID0geTMgPiBtYXhZID8geTMgOiBtYXhZO1xuICAgIG1heFkgPSB5NCA+IG1heFkgPyB5NCA6IG1heFk7XG5cbiAgICB2YXIgYm91bmRzID0gdGhpcy5fYm91bmRzO1xuXG4gICAgYm91bmRzLnggPSBtaW5YO1xuICAgIGJvdW5kcy53aWR0aCA9IG1heFggLSBtaW5YO1xuXG4gICAgYm91bmRzLnkgPSBtaW5ZO1xuICAgIGJvdW5kcy5oZWlnaHQgPSBtYXhZIC0gbWluWTtcblxuICAgIC8vIHN0b3JlIGEgcmVmZXJlbmNlIHNvIHRoYXQgaWYgdGhpcyBmdW5jdGlvbiBnZXRzIGNhbGxlZCBhZ2FpbiBpbiB0aGUgcmVuZGVyIGN5Y2xlIHdlIGRvIG5vdCBoYXZlIHRvIHJlY2FsY3VsYXRlXG4gICAgdGhpcy5fY3VycmVudEJvdW5kcyA9IGJvdW5kcztcblxuICAgIHJldHVybiBib3VuZHM7XG59O1xuXG4vKipcbiAqIENoZWNrcyBpZiBhIHBvaW50IGlzIGluc2lkZSB0aGlzIHRpbGluZyBzcHJpdGVcbiAqIEBwYXJhbSBwb2ludCB7UElYSS5Qb2ludH0gdGhlIHBvaW50IHRvIGNoZWNrXG4gKi9cblRpbGluZ1Nwcml0ZS5wcm90b3R5cGUuY29udGFpbnNQb2ludCA9IGZ1bmN0aW9uKCBwb2ludCApXG57XG4gICAgdGhpcy53b3JsZFRyYW5zZm9ybS5hcHBseUludmVyc2UocG9pbnQsICB0ZW1wUG9pbnQpO1xuXG4gICAgdmFyIHdpZHRoID0gdGhpcy5fd2lkdGg7XG4gICAgdmFyIGhlaWdodCA9IHRoaXMuX2hlaWdodDtcbiAgICB2YXIgeDEgPSAtd2lkdGggKiB0aGlzLmFuY2hvci54O1xuICAgIHZhciB5MTtcblxuICAgIGlmICggdGVtcFBvaW50LnggPiB4MSAmJiB0ZW1wUG9pbnQueCA8IHgxICsgd2lkdGggKVxuICAgIHtcbiAgICAgICAgeTEgPSAtaGVpZ2h0ICogdGhpcy5hbmNob3IueTtcblxuICAgICAgICBpZiAoIHRlbXBQb2ludC55ID4geTEgJiYgdGVtcFBvaW50LnkgPCB5MSArIGhlaWdodCApXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xufTtcblxuLyoqXG4gKiBEZXN0cm95cyB0aGlzIHRpbGluZyBzcHJpdGVcbiAqXG4gKi9cblRpbGluZ1Nwcml0ZS5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uICgpIHtcbiAgICBjb3JlLlNwcml0ZS5wcm90b3R5cGUuZGVzdHJveS5jYWxsKHRoaXMpO1xuXG4gICAgdGhpcy50aWxlU2NhbGUgPSBudWxsO1xuICAgIHRoaXMuX3RpbGVTY2FsZU9mZnNldCA9IG51bGw7XG4gICAgdGhpcy50aWxlUG9zaXRpb24gPSBudWxsO1xuXG4gICAgdGhpcy5fdXZzID0gbnVsbDtcbn07XG5cbi8qKlxuICogSGVscGVyIGZ1bmN0aW9uIHRoYXQgY3JlYXRlcyBhIHRpbGluZyBzcHJpdGUgdGhhdCB3aWxsIHVzZSBhIHRleHR1cmUgZnJvbSB0aGUgVGV4dHVyZUNhY2hlIGJhc2VkIG9uIHRoZSBmcmFtZUlkXG4gKiBUaGUgZnJhbWUgaWRzIGFyZSBjcmVhdGVkIHdoZW4gYSBUZXh0dXJlIHBhY2tlciBmaWxlIGhhcyBiZWVuIGxvYWRlZFxuICpcbiAqIEBzdGF0aWNcbiAqIEBwYXJhbSBmcmFtZUlkIHtzdHJpbmd9IFRoZSBmcmFtZSBJZCBvZiB0aGUgdGV4dHVyZSBpbiB0aGUgY2FjaGVcbiAqIEByZXR1cm4ge1BJWEkuZXh0cmFzLlRpbGluZ1Nwcml0ZX0gQSBuZXcgVGlsaW5nU3ByaXRlIHVzaW5nIGEgdGV4dHVyZSBmcm9tIHRoZSB0ZXh0dXJlIGNhY2hlIG1hdGNoaW5nIHRoZSBmcmFtZUlkXG4gKiBAcGFyYW0gd2lkdGgge251bWJlcn0gIHRoZSB3aWR0aCBvZiB0aGUgdGlsaW5nIHNwcml0ZVxuICogQHBhcmFtIGhlaWdodCB7bnVtYmVyfSB0aGUgaGVpZ2h0IG9mIHRoZSB0aWxpbmcgc3ByaXRlXG4gKi9cblRpbGluZ1Nwcml0ZS5mcm9tRnJhbWUgPSBmdW5jdGlvbiAoZnJhbWVJZCx3aWR0aCxoZWlnaHQpXG57XG4gICAgdmFyIHRleHR1cmUgPSBjb3JlLnV0aWxzLlRleHR1cmVDYWNoZVtmcmFtZUlkXTtcblxuICAgIGlmICghdGV4dHVyZSlcbiAgICB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignVGhlIGZyYW1lSWQgXCInICsgZnJhbWVJZCArICdcIiBkb2VzIG5vdCBleGlzdCBpbiB0aGUgdGV4dHVyZSBjYWNoZSAnICsgdGhpcyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBUaWxpbmdTcHJpdGUodGV4dHVyZSx3aWR0aCxoZWlnaHQpO1xufTtcblxuLyoqXG4gKiBIZWxwZXIgZnVuY3Rpb24gdGhhdCBjcmVhdGVzIGEgc3ByaXRlIHRoYXQgd2lsbCBjb250YWluIGEgdGV4dHVyZSBiYXNlZCBvbiBhbiBpbWFnZSB1cmxcbiAqIElmIHRoZSBpbWFnZSBpcyBub3QgaW4gdGhlIHRleHR1cmUgY2FjaGUgaXQgd2lsbCBiZSBsb2FkZWRcbiAqXG4gKiBAc3RhdGljXG4gKiBAcGFyYW0gaW1hZ2VJZCB7c3RyaW5nfSBUaGUgaW1hZ2UgdXJsIG9mIHRoZSB0ZXh0dXJlXG4gKiBAcGFyYW0gd2lkdGgge251bWJlcn0gIHRoZSB3aWR0aCBvZiB0aGUgdGlsaW5nIHNwcml0ZVxuICogQHBhcmFtIGhlaWdodCB7bnVtYmVyfSB0aGUgaGVpZ2h0IG9mIHRoZSB0aWxpbmcgc3ByaXRlXG4gKiBAcGFyYW0gW2Nyb3Nzb3JpZ2luPShhdXRvKV0ge2Jvb2xlYW59IGlmIHlvdSB3YW50IHRvIHNwZWNpZnkgdGhlIGNyb3NzLW9yaWdpbiBwYXJhbWV0ZXJcbiAqIEBwYXJhbSBbc2NhbGVNb2RlPVBJWEkuU0NBTEVfTU9ERVMuREVGQVVMVF0ge251bWJlcn0gaWYgeW91IHdhbnQgdG8gc3BlY2lmeSB0aGUgc2NhbGUgbW9kZSwgc2VlIHtAbGluayBQSVhJLlNDQUxFX01PREVTfSBmb3IgcG9zc2libGUgdmFsdWVzXG4gKiBAcmV0dXJuIHtQSVhJLmV4dHJhcy5UaWxpbmdTcHJpdGV9IEEgbmV3IFRpbGluZ1Nwcml0ZSB1c2luZyBhIHRleHR1cmUgZnJvbSB0aGUgdGV4dHVyZSBjYWNoZSBtYXRjaGluZyB0aGUgaW1hZ2UgaWRcbiAqL1xuVGlsaW5nU3ByaXRlLmZyb21JbWFnZSA9IGZ1bmN0aW9uIChpbWFnZUlkLCB3aWR0aCwgaGVpZ2h0LCBjcm9zc29yaWdpbiwgc2NhbGVNb2RlKVxue1xuICAgIHJldHVybiBuZXcgVGlsaW5nU3ByaXRlKGNvcmUuVGV4dHVyZS5mcm9tSW1hZ2UoaW1hZ2VJZCwgY3Jvc3NvcmlnaW4sIHNjYWxlTW9kZSksd2lkdGgsaGVpZ2h0KTtcbn07XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uL2NvcmUnKSxcbiAgICBEaXNwbGF5T2JqZWN0ID0gY29yZS5EaXNwbGF5T2JqZWN0LFxuICAgIF90ZW1wTWF0cml4ID0gbmV3IGNvcmUuTWF0cml4KCk7XG5cbkRpc3BsYXlPYmplY3QucHJvdG90eXBlLl9jYWNoZUFzQml0bWFwID0gZmFsc2U7XG5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS5fb3JpZ2luYWxSZW5kZXJXZWJHTCA9IG51bGw7XG5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS5fb3JpZ2luYWxSZW5kZXJDYW52YXMgPSBudWxsO1xuXG5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS5fb3JpZ2luYWxVcGRhdGVUcmFuc2Zvcm0gPSBudWxsO1xuRGlzcGxheU9iamVjdC5wcm90b3R5cGUuX29yaWdpbmFsSGl0VGVzdCA9IG51bGw7XG5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS5fb3JpZ2luYWxEZXN0cm95ID0gbnVsbDtcbkRpc3BsYXlPYmplY3QucHJvdG90eXBlLl9jYWNoZWRTcHJpdGUgPSBudWxsO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhEaXNwbGF5T2JqZWN0LnByb3RvdHlwZSwge1xuXG4gICAgLyoqXG4gICAgICogU2V0IHRoaXMgdG8gdHJ1ZSBpZiB5b3Ugd2FudCB0aGlzIGRpc3BsYXkgb2JqZWN0IHRvIGJlIGNhY2hlZCBhcyBhIGJpdG1hcC5cbiAgICAgKiBUaGlzIGJhc2ljYWxseSB0YWtlcyBhIHNuYXAgc2hvdCBvZiB0aGUgZGlzcGxheSBvYmplY3QgYXMgaXQgaXMgYXQgdGhhdCBtb21lbnQuIEl0IGNhbiBwcm92aWRlIGEgcGVyZm9ybWFuY2UgYmVuZWZpdCBmb3IgY29tcGxleCBzdGF0aWMgZGlzcGxheU9iamVjdHMuXG4gICAgICogVG8gcmVtb3ZlIHNpbXBseSBzZXQgdGhpcyBwcm9wZXJ0eSB0byAnZmFsc2UnXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLkRpc3BsYXlPYmplY3QjXG4gICAgICovXG4gICAgY2FjaGVBc0JpdG1hcDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9jYWNoZUFzQml0bWFwO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgaWYgKHRoaXMuX2NhY2hlQXNCaXRtYXAgPT09IHZhbHVlKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5fY2FjaGVBc0JpdG1hcCA9IHZhbHVlO1xuXG4gICAgICAgICAgICBpZiAodmFsdWUpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdGhpcy5fb3JpZ2luYWxSZW5kZXJXZWJHTCA9IHRoaXMucmVuZGVyV2ViR0w7XG4gICAgICAgICAgICAgICAgdGhpcy5fb3JpZ2luYWxSZW5kZXJDYW52YXMgPSB0aGlzLnJlbmRlckNhbnZhcztcblxuICAgICAgICAgICAgICAgIHRoaXMuX29yaWdpbmFsVXBkYXRlVHJhbnNmb3JtID0gdGhpcy51cGRhdGVUcmFuc2Zvcm07XG4gICAgICAgICAgICAgICAgdGhpcy5fb3JpZ2luYWxHZXRCb3VuZHMgPSB0aGlzLmdldEJvdW5kcztcblxuICAgICAgICAgICAgICAgIHRoaXMuX29yaWdpbmFsRGVzdHJveSA9IHRoaXMuZGVzdHJveTtcblxuICAgICAgICAgICAgICAgIHRoaXMuX29yaWdpbmFsQ29udGFpbnNQb2ludCA9IHRoaXMuY29udGFpbnNQb2ludDtcblxuICAgICAgICAgICAgICAgIHRoaXMucmVuZGVyV2ViR0wgPSB0aGlzLl9yZW5kZXJDYWNoZWRXZWJHTDtcbiAgICAgICAgICAgICAgICB0aGlzLnJlbmRlckNhbnZhcyA9IHRoaXMuX3JlbmRlckNhY2hlZENhbnZhcztcblxuICAgICAgICAgICAgICAgIHRoaXMuZGVzdHJveSA9IHRoaXMuX2NhY2hlQXNCaXRtYXBEZXN0cm95O1xuXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuX2NhY2hlZFNwcml0ZSlcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2Rlc3Ryb3lDYWNoZWREaXNwbGF5T2JqZWN0KCk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgdGhpcy5yZW5kZXJXZWJHTCA9IHRoaXMuX29yaWdpbmFsUmVuZGVyV2ViR0w7XG4gICAgICAgICAgICAgICAgdGhpcy5yZW5kZXJDYW52YXMgPSB0aGlzLl9vcmlnaW5hbFJlbmRlckNhbnZhcztcbiAgICAgICAgICAgICAgICB0aGlzLmdldEJvdW5kcyA9IHRoaXMuX29yaWdpbmFsR2V0Qm91bmRzO1xuXG4gICAgICAgICAgICAgICAgdGhpcy5kZXN0cm95ID0gdGhpcy5fb3JpZ2luYWxEZXN0cm95O1xuXG4gICAgICAgICAgICAgICAgdGhpcy51cGRhdGVUcmFuc2Zvcm0gPSB0aGlzLl9vcmlnaW5hbFVwZGF0ZVRyYW5zZm9ybTtcbiAgICAgICAgICAgICAgICB0aGlzLmNvbnRhaW5zUG9pbnQgPSB0aGlzLl9vcmlnaW5hbENvbnRhaW5zUG9pbnQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG59KTtcbi8qKlxuKiBSZW5kZXJzIGEgY2FjaGVkIHZlcnNpb24gb2YgdGhlIHNwcml0ZSB3aXRoIFdlYkdMXG4qXG4qIEBwYXJhbSByZW5kZXJlciB7UElYSS5XZWJHTFJlbmRlcmVyfSB0aGUgV2ViR0wgcmVuZGVyZXJcbiogQHByaXZhdGVcbiovXG5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS5fcmVuZGVyQ2FjaGVkV2ViR0wgPSBmdW5jdGlvbiAocmVuZGVyZXIpXG57XG4gICAgaWYgKCF0aGlzLnZpc2libGUgfHwgdGhpcy53b3JsZEFscGhhIDw9IDAgfHwgIXRoaXMucmVuZGVyYWJsZSlcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLl9pbml0Q2FjaGVkRGlzcGxheU9iamVjdCggcmVuZGVyZXIgKTtcblxuICAgIHRoaXMuX2NhY2hlZFNwcml0ZS53b3JsZEFscGhhID0gdGhpcy53b3JsZEFscGhhO1xuXG4gICAgcmVuZGVyZXIuc2V0T2JqZWN0UmVuZGVyZXIocmVuZGVyZXIucGx1Z2lucy5zcHJpdGUpO1xuICAgIHJlbmRlcmVyLnBsdWdpbnMuc3ByaXRlLnJlbmRlciggdGhpcy5fY2FjaGVkU3ByaXRlICk7XG59O1xuXG4vKipcbiogUHJlcGFyZXMgdGhlIFdlYkdMIHJlbmRlcmVyIHRvIGNhY2hlIHRoZSBzcHJpdGVcbipcbiogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLldlYkdMUmVuZGVyZXJ9IHRoZSBXZWJHTCByZW5kZXJlclxuKiBAcHJpdmF0ZVxuKi9cbkRpc3BsYXlPYmplY3QucHJvdG90eXBlLl9pbml0Q2FjaGVkRGlzcGxheU9iamVjdCA9IGZ1bmN0aW9uIChyZW5kZXJlcilcbntcbiAgICBpZih0aGlzLl9jYWNoZWRTcHJpdGUpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gZmlyc3Qgd2UgZmx1c2ggYW55dGhpbmcgbGVmdCBpbiB0aGUgcmVuZGVyZXIgKG90aGVyd2lzZSBpdCB3b3VsZCBnZXQgcmVuZGVyZWQgdG8gdGhlIGNhY2hlZCB0ZXh0dXJlKVxuICAgIHJlbmRlcmVyLmN1cnJlbnRSZW5kZXJlci5mbHVzaCgpO1xuICAgIC8vdGhpcy5maWx0ZXJzPSBbXTtcbiAgICAvLyBuZXh0IHdlIGZpbmQgdGhlIGRpbWVuc2lvbnMgb2YgdGhlIHVudHJhbnNmb3JtZWQgb2JqZWN0XG4gICAgLy8gdGhpcyBmdW5jdGlvbiBhbHNvIGNhbGxzIHVwZGF0ZXRyYW5zZm9ybSBvbiBhbGwgaXRzIGNoaWxkcmVuIGFzIHBhcnQgb2YgdGhlIG1lYXN1cmluZy4gVGhpcyBtZWFucyB3ZSBkb24ndCBuZWVkIHRvIHVwZGF0ZSB0aGUgdHJhbnNmb3JtIGFnYWluIGluIHRoaXMgZnVuY3Rpb25cbiAgICAvLyBUT0RPIHBhc3MgYW4gb2JqZWN0IHRvIGNsb25lIHRvbz8gc2F2ZXMgaGF2aW5nIHRvIGNyZWF0ZSBhIG5ldyBvbmUgZWFjaCB0aW1lIVxuICAgIHZhciBib3VuZHMgPSB0aGlzLmdldExvY2FsQm91bmRzKCkuY2xvbmUoKTtcblxuICAgIC8vIGFkZCBzb21lIHBhZGRpbmchXG4gICAgaWYodGhpcy5fZmlsdGVycylcbiAgICB7XG4gICAgICAgIHZhciBwYWRkaW5nID0gdGhpcy5fZmlsdGVyc1swXS5wYWRkaW5nO1xuICAgICAgICBib3VuZHMueCAtPSBwYWRkaW5nO1xuICAgICAgICBib3VuZHMueSAtPSBwYWRkaW5nO1xuXG4gICAgICAgIGJvdW5kcy53aWR0aCArPSBwYWRkaW5nICogMjtcbiAgICAgICAgYm91bmRzLmhlaWdodCArPSBwYWRkaW5nICogMjtcbiAgICB9XG5cbiAgICAvLyBmb3Igbm93IHdlIGNhY2hlIHRoZSBjdXJyZW50IHJlbmRlclRhcmdldCB0aGF0IHRoZSB3ZWJHTCByZW5kZXJlciBpcyBjdXJyZW50bHkgdXNpbmcuXG4gICAgLy8gdGhpcyBjb3VsZCBiZSBtb3JlIGVsZWdlbnQuLlxuICAgIHZhciBjYWNoZWRSZW5kZXJUYXJnZXQgPSByZW5kZXJlci5jdXJyZW50UmVuZGVyVGFyZ2V0O1xuICAgIC8vIFdlIGFsc28gc3RvcmUgdGhlIGZpbHRlciBzdGFjayAtIEkgd2lsbCBkZWZpbml0ZWx5IGxvb2sgdG8gY2hhbmdlIGhvdyB0aGlzIHdvcmtzIGEgbGl0dGxlIGxhdGVyIGRvd24gdGhlIGxpbmUuXG4gICAgdmFyIHN0YWNrID0gcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5maWx0ZXJTdGFjaztcblxuICAgIC8vIHRoaXMgcmVuZGVyVGV4dHVyZSB3aWxsIGJlIHVzZWQgdG8gc3RvcmUgdGhlIGNhY2hlZCBEaXNwbGF5T2JqZWN0XG4gICAgdmFyIHJlbmRlclRleHR1cmUgPSBuZXcgY29yZS5SZW5kZXJUZXh0dXJlKHJlbmRlcmVyLCBib3VuZHMud2lkdGggfCAwLCBib3VuZHMuaGVpZ2h0IHwgMCk7XG5cbiAgICAvLyBuZWVkIHRvIHNldCAvL1xuICAgIHZhciBtID0gX3RlbXBNYXRyaXg7XG5cbiAgICBtLnR4ID0gLWJvdW5kcy54O1xuICAgIG0udHkgPSAtYm91bmRzLnk7XG5cblxuXG4gICAgLy8gc2V0IGFsbCBwcm9wZXJ0aWVzIHRvIHRoZXJlIG9yaWdpbmFsIHNvIHdlIGNhbiByZW5kZXIgdG8gYSB0ZXh0dXJlXG4gICAgdGhpcy5yZW5kZXJXZWJHTCA9IHRoaXMuX29yaWdpbmFsUmVuZGVyV2ViR0w7XG5cbiAgICByZW5kZXJUZXh0dXJlLnJlbmRlcih0aGlzLCBtLCB0cnVlLCB0cnVlKTtcblxuICAgIC8vIG5vdyByZXN0b3JlIHRoZSBzdGF0ZSBiZSBzZXR0aW5nIHRoZSBuZXcgcHJvcGVydGllc1xuICAgIHJlbmRlcmVyLnNldFJlbmRlclRhcmdldChjYWNoZWRSZW5kZXJUYXJnZXQpO1xuICAgIHJlbmRlcmVyLmZpbHRlck1hbmFnZXIuZmlsdGVyU3RhY2sgPSBzdGFjaztcblxuICAgIHRoaXMucmVuZGVyV2ViR0wgICAgID0gdGhpcy5fcmVuZGVyQ2FjaGVkV2ViR0w7XG4gICAgdGhpcy51cGRhdGVUcmFuc2Zvcm0gPSB0aGlzLmRpc3BsYXlPYmplY3RVcGRhdGVUcmFuc2Zvcm07XG4gICAgdGhpcy5nZXRCb3VuZHMgICAgICAgPSB0aGlzLl9nZXRDYWNoZWRCb3VuZHM7XG5cblxuICAgIC8vIGNyZWF0ZSBvdXIgY2FjaGVkIHNwcml0ZVxuICAgIHRoaXMuX2NhY2hlZFNwcml0ZSA9IG5ldyBjb3JlLlNwcml0ZShyZW5kZXJUZXh0dXJlKTtcbiAgICB0aGlzLl9jYWNoZWRTcHJpdGUud29ybGRUcmFuc2Zvcm0gPSB0aGlzLndvcmxkVHJhbnNmb3JtO1xuICAgIHRoaXMuX2NhY2hlZFNwcml0ZS5hbmNob3IueCA9IC0oIGJvdW5kcy54IC8gYm91bmRzLndpZHRoICk7XG4gICAgdGhpcy5fY2FjaGVkU3ByaXRlLmFuY2hvci55ID0gLSggYm91bmRzLnkgLyBib3VuZHMuaGVpZ2h0ICk7XG5cbiAgICAvLyByZXN0b3JlIHRoZSB0cmFuc2Zvcm0gb2YgdGhlIGNhY2hlZCBzcHJpdGUgdG8gYXZvaWQgdGhlIG5hc3R5IGZsaWNrZXIuLlxuICAgIHRoaXMudXBkYXRlVHJhbnNmb3JtKCk7XG5cbiAgICAvLyBtYXAgdGhlIGhpdCB0ZXN0Li5cbiAgICB0aGlzLmNvbnRhaW5zUG9pbnQgPSB0aGlzLl9jYWNoZWRTcHJpdGUuY29udGFpbnNQb2ludC5iaW5kKHRoaXMuX2NhY2hlZFNwcml0ZSk7XG59O1xuXG4vKipcbiogUmVuZGVycyBhIGNhY2hlZCB2ZXJzaW9uIG9mIHRoZSBzcHJpdGUgd2l0aCBjYW52YXNcbipcbiogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLkNhbnZhc1JlbmRlcmVyfSB0aGUgQ2FudmFzIHJlbmRlcmVyXG4qIEBwcml2YXRlXG4qL1xuRGlzcGxheU9iamVjdC5wcm90b3R5cGUuX3JlbmRlckNhY2hlZENhbnZhcyA9IGZ1bmN0aW9uIChyZW5kZXJlcilcbntcbiAgICBpZiAoIXRoaXMudmlzaWJsZSB8fCB0aGlzLndvcmxkQWxwaGEgPD0gMCB8fCAhdGhpcy5yZW5kZXJhYmxlKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuX2luaXRDYWNoZWREaXNwbGF5T2JqZWN0Q2FudmFzKCByZW5kZXJlciApO1xuXG4gICAgdGhpcy5fY2FjaGVkU3ByaXRlLndvcmxkQWxwaGEgPSB0aGlzLndvcmxkQWxwaGE7XG5cbiAgICB0aGlzLl9jYWNoZWRTcHJpdGUucmVuZGVyQ2FudmFzKHJlbmRlcmVyKTtcbn07XG5cbi8vVE9ETyB0aGlzIGNhbiBiZSB0aGUgc2FtZSBhcyB0aGUgd2ViR0wgdmVyaXNvbi4uIHdpbGwgbmVlZCB0byBkbyBhIGxpdHRsZSB0d2Vha2luZyBmaXJzdCB0aG91Z2guLlxuLyoqXG4qIFByZXBhcmVzIHRoZSBDYW52YXMgcmVuZGVyZXIgdG8gY2FjaGUgdGhlIHNwcml0ZVxuKlxuKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuQ2FudmFzUmVuZGVyZXJ9IHRoZSBDYW52YXMgcmVuZGVyZXJcbiogQHByaXZhdGVcbiovXG5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS5faW5pdENhY2hlZERpc3BsYXlPYmplY3RDYW52YXMgPSBmdW5jdGlvbiAocmVuZGVyZXIpXG57XG4gICAgaWYodGhpcy5fY2FjaGVkU3ByaXRlKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vZ2V0IGJvdW5kcyBhY3R1YWxseSB0cmFuc2Zvcm1zIHRoZSBvYmplY3QgZm9yIHVzIGFscmVhZHkhXG4gICAgdmFyIGJvdW5kcyA9IHRoaXMuZ2V0TG9jYWxCb3VuZHMoKTtcblxuICAgIHZhciBjYWNoZWRSZW5kZXJUYXJnZXQgPSByZW5kZXJlci5jb250ZXh0O1xuXG4gICAgdmFyIHJlbmRlclRleHR1cmUgPSBuZXcgY29yZS5SZW5kZXJUZXh0dXJlKHJlbmRlcmVyLCBib3VuZHMud2lkdGggfCAwLCBib3VuZHMuaGVpZ2h0IHwgMCk7XG5cbiAgICAvLyBuZWVkIHRvIHNldCAvL1xuICAgIHZhciBtID0gX3RlbXBNYXRyaXg7XG5cbiAgICBtLnR4ID0gLWJvdW5kcy54O1xuICAgIG0udHkgPSAtYm91bmRzLnk7XG5cbiAgICAvLyBzZXQgYWxsIHByb3BlcnRpZXMgdG8gdGhlcmUgb3JpZ2luYWwgc28gd2UgY2FuIHJlbmRlciB0byBhIHRleHR1cmVcbiAgICB0aGlzLnJlbmRlckNhbnZhcyA9IHRoaXMuX29yaWdpbmFsUmVuZGVyQ2FudmFzO1xuXG4gICAgcmVuZGVyVGV4dHVyZS5yZW5kZXIodGhpcywgbSwgdHJ1ZSk7XG5cbiAgICAvLyBub3cgcmVzdG9yZSB0aGUgc3RhdGUgYmUgc2V0dGluZyB0aGUgbmV3IHByb3BlcnRpZXNcbiAgICByZW5kZXJlci5jb250ZXh0ID0gY2FjaGVkUmVuZGVyVGFyZ2V0O1xuXG4gICAgdGhpcy5yZW5kZXJDYW52YXMgPSB0aGlzLl9yZW5kZXJDYWNoZWRDYW52YXM7XG4gICAgdGhpcy51cGRhdGVUcmFuc2Zvcm0gPSB0aGlzLmRpc3BsYXlPYmplY3RVcGRhdGVUcmFuc2Zvcm07XG4gICAgdGhpcy5nZXRCb3VuZHMgID0gdGhpcy5fZ2V0Q2FjaGVkQm91bmRzO1xuXG5cbiAgICAvLyBjcmVhdGUgb3VyIGNhY2hlZCBzcHJpdGVcbiAgICB0aGlzLl9jYWNoZWRTcHJpdGUgPSBuZXcgY29yZS5TcHJpdGUocmVuZGVyVGV4dHVyZSk7XG4gICAgdGhpcy5fY2FjaGVkU3ByaXRlLndvcmxkVHJhbnNmb3JtID0gdGhpcy53b3JsZFRyYW5zZm9ybTtcbiAgICB0aGlzLl9jYWNoZWRTcHJpdGUuYW5jaG9yLnggPSAtKCBib3VuZHMueCAvIGJvdW5kcy53aWR0aCApO1xuICAgIHRoaXMuX2NhY2hlZFNwcml0ZS5hbmNob3IueSA9IC0oIGJvdW5kcy55IC8gYm91bmRzLmhlaWdodCApO1xuXG4gICAgdGhpcy51cGRhdGVUcmFuc2Zvcm0oKTtcblxuICAgIHRoaXMuY29udGFpbnNQb2ludCA9IHRoaXMuX2NhY2hlZFNwcml0ZS5jb250YWluc1BvaW50LmJpbmQodGhpcy5fY2FjaGVkU3ByaXRlKTtcbn07XG5cbi8qKlxuKiBDYWxjdWxhdGVzIHRoZSBib3VuZHMgb2YgdGhlIGNhY2hlZCBzcHJpdGVcbipcbiogQHByaXZhdGVcbiovXG5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS5fZ2V0Q2FjaGVkQm91bmRzID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLl9jYWNoZWRTcHJpdGUuX2N1cnJlbnRCb3VuZHMgPSBudWxsO1xuXG4gICAgcmV0dXJuIHRoaXMuX2NhY2hlZFNwcml0ZS5nZXRCb3VuZHMoKTtcbn07XG5cbi8qKlxuKiBEZXN0cm95cyB0aGUgY2FjaGVkIHNwcml0ZS5cbipcbiogQHByaXZhdGVcbiovXG5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS5fZGVzdHJveUNhY2hlZERpc3BsYXlPYmplY3QgPSBmdW5jdGlvbiAoKVxue1xuICAgIHRoaXMuX2NhY2hlZFNwcml0ZS5fdGV4dHVyZS5kZXN0cm95KCk7XG4gICAgdGhpcy5fY2FjaGVkU3ByaXRlID0gbnVsbDtcbn07XG5cbkRpc3BsYXlPYmplY3QucHJvdG90eXBlLl9jYWNoZUFzQml0bWFwRGVzdHJveSA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy5jYWNoZUFzQml0bWFwID0gZmFsc2U7XG4gICAgdGhpcy5fb3JpZ2luYWxEZXN0cm95KCk7XG59O1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi9jb3JlJyk7XG5cbi8qKlxuICogVGhlIGluc3RhbmNlIG5hbWUgb2YgdGhlIG9iamVjdC5cbiAqXG4gKiBAbWVtYmVyb2YgUElYSS5EaXNwbGF5T2JqZWN0I1xuICogQG1lbWJlciB7c3RyaW5nfVxuICovXG5jb3JlLkRpc3BsYXlPYmplY3QucHJvdG90eXBlLm5hbWUgPSBudWxsO1xuXG4vKipcbiogUmV0dXJucyB0aGUgZGlzcGxheSBvYmplY3QgaW4gdGhlIGNvbnRhaW5lclxuKlxuKiBAbWVtYmVyb2YgUElYSS5Db250YWluZXIjXG4qIEBwYXJhbSBuYW1lIHtzdHJpbmd9IGluc3RhbmNlIG5hbWVcbiogQHJldHVybiB7UElYSS5EaXNwbGF5T2JqZWN0fVxuKi9cbmNvcmUuQ29udGFpbmVyLnByb3RvdHlwZS5nZXRDaGlsZEJ5TmFtZSA9IGZ1bmN0aW9uIChuYW1lKVxue1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5jaGlsZHJlbi5sZW5ndGg7IGkrKylcbiAgICB7XG4gICAgICAgIGlmICh0aGlzLmNoaWxkcmVuW2ldLm5hbWUgPT09IG5hbWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmNoaWxkcmVuW2ldO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xufTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vY29yZScpO1xuXG4vKipcbiogUmV0dXJucyB0aGUgZ2xvYmFsIHBvc2l0aW9uIG9mIHRoZSBkaXNwbGF5T2JqZWN0XG4qXG4qIEBtZW1iZXJvZiBQSVhJLkRpc3BsYXlPYmplY3QjXG4qIEBwYXJhbSBwb2ludCB7UG9pbnR9IHRoZSBwb2ludCB0byB3cml0ZSB0aGUgZ2xvYmFsIHZhbHVlIHRvLiBJZiBudWxsIGEgbmV3IHBvaW50IHdpbGwgYmUgcmV0dXJuZWRcbiogQHJldHVybiB7UG9pbnR9XG4qL1xuY29yZS5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS5nZXRHbG9iYWxQb3NpdGlvbiA9IGZ1bmN0aW9uIChwb2ludClcbntcbiAgICBwb2ludCA9IHBvaW50IHx8IG5ldyBjb3JlLlBvaW50KCk7XG5cbiAgICBpZih0aGlzLnBhcmVudClcbiAgICB7XG4gICAgICAgIHRoaXMuZGlzcGxheU9iamVjdFVwZGF0ZVRyYW5zZm9ybSgpO1xuXG4gICAgICAgIHBvaW50LnggPSB0aGlzLndvcmxkVHJhbnNmb3JtLnR4O1xuICAgICAgICBwb2ludC55ID0gdGhpcy53b3JsZFRyYW5zZm9ybS50eTtcbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgcG9pbnQueCA9IHRoaXMucG9zaXRpb24ueDtcbiAgICAgICAgcG9pbnQueSA9IHRoaXMucG9zaXRpb24ueTtcbiAgICB9XG5cbiAgICByZXR1cm4gcG9pbnQ7XG59O1xuIiwiLyoqXG4gKiBAZmlsZSAgICAgICAgTWFpbiBleHBvcnQgb2YgdGhlIFBJWEkgZXh0cmFzIGxpYnJhcnlcbiAqIEBhdXRob3IgICAgICBNYXQgR3JvdmVzIDxtYXRAZ29vZGJveWRpZ2l0YWwuY29tPlxuICogQGNvcHlyaWdodCAgIDIwMTMtMjAxNSBHb29kQm95RGlnaXRhbFxuICogQGxpY2Vuc2UgICAgIHtAbGluayBodHRwczovL2dpdGh1Yi5jb20vcGl4aWpzL3BpeGkuanMvYmxvYi9tYXN0ZXIvTElDRU5TRXxNSVQgTGljZW5zZX1cbiAqL1xuXG5yZXF1aXJlKCcuL2NhY2hlQXNCaXRtYXAnKTtcbnJlcXVpcmUoJy4vZ2V0Q2hpbGRCeU5hbWUnKTtcbnJlcXVpcmUoJy4vZ2V0R2xvYmFsUG9zaXRpb24nKTtcblxuLyoqXG4gKiBAbmFtZXNwYWNlIFBJWEkuZXh0cmFzXG4gKi9cbm1vZHVsZS5leHBvcnRzID0ge1xuICAgIE1vdmllQ2xpcDogICAgICByZXF1aXJlKCcuL01vdmllQ2xpcCcpLFxuICAgIFRpbGluZ1Nwcml0ZTogICByZXF1aXJlKCcuL1RpbGluZ1Nwcml0ZScpLFxuICAgIEJpdG1hcFRleHQ6ICAgICByZXF1aXJlKCcuL0JpdG1hcFRleHQnKVxufTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vLi4vY29yZScpO1xuLy8gQHNlZSBodHRwczovL2dpdGh1Yi5jb20vc3Vic3RhY2svYnJmcy9pc3N1ZXMvMjVcblxuXG4vLyBUT0RPIChjZW5nbGVyKSAtIFRoZSBZIGlzIGZsaXBwZWQgaW4gdGhpcyBzaGFkZXIgZm9yIHNvbWUgcmVhc29uLlxuXG4vKipcbiAqIEBhdXRob3IgVmljbyBAdmljb2NvdGVhXG4gKiBvcmlnaW5hbCBzaGFkZXIgOiBodHRwczovL3d3dy5zaGFkZXJ0b3kuY29tL3ZpZXcvbHNzR0RqIGJ5IEBtb3ZBWDEzaFxuICovXG5cbi8qKlxuICogQW4gQVNDSUkgZmlsdGVyLlxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5BYnN0cmFjdEZpbHRlclxuICogQG1lbWJlcm9mIFBJWEkuZmlsdGVyc1xuICovXG5mdW5jdGlvbiBBc2NpaUZpbHRlcigpXG57XG4gICAgY29yZS5BYnN0cmFjdEZpbHRlci5jYWxsKHRoaXMsXG4gICAgICAgIC8vIHZlcnRleCBzaGFkZXJcbiAgICAgICAgbnVsbCxcbiAgICAgICAgLy8gZnJhZ21lbnQgc2hhZGVyXG4gICAgICAgIFwicHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XFxuXFxudW5pZm9ybSB2ZWM0IGRpbWVuc2lvbnM7XFxudW5pZm9ybSBmbG9hdCBwaXhlbFNpemU7XFxudW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXI7XFxuXFxuZmxvYXQgY2hhcmFjdGVyKGZsb2F0IG4sIHZlYzIgcClcXG57XFxuICAgIHAgPSBmbG9vcihwKnZlYzIoNC4wLCAtNC4wKSArIDIuNSk7XFxuICAgIGlmIChjbGFtcChwLngsIDAuMCwgNC4wKSA9PSBwLnggJiYgY2xhbXAocC55LCAwLjAsIDQuMCkgPT0gcC55KVxcbiAgICB7XFxuICAgICAgICBpZiAoaW50KG1vZChuL2V4cDIocC54ICsgNS4wKnAueSksIDIuMCkpID09IDEpIHJldHVybiAxLjA7XFxuICAgIH1cXG4gICAgcmV0dXJuIDAuMDtcXG59XFxuXFxudm9pZCBtYWluKClcXG57XFxuICAgIHZlYzIgdXYgPSBnbF9GcmFnQ29vcmQueHk7XFxuXFxuICAgIHZlYzMgY29sID0gdGV4dHVyZTJEKHVTYW1wbGVyLCBmbG9vciggdXYgLyBwaXhlbFNpemUgKSAqIHBpeGVsU2l6ZSAvIGRpbWVuc2lvbnMueHkpLnJnYjtcXG5cXG4gICAgZmxvYXQgZ3JheSA9IChjb2wuciArIGNvbC5nICsgY29sLmIpIC8gMy4wO1xcblxcbiAgICBmbG9hdCBuID0gIDY1NTM2LjA7ICAgICAgICAgICAgIC8vIC5cXG4gICAgaWYgKGdyYXkgPiAwLjIpIG4gPSA2NTYwMC4wOyAgICAvLyA6XFxuICAgIGlmIChncmF5ID4gMC4zKSBuID0gMzMyNzcyLjA7ICAgLy8gKlxcbiAgICBpZiAoZ3JheSA+IDAuNCkgbiA9IDE1MjU1MDg2LjA7IC8vIG9cXG4gICAgaWYgKGdyYXkgPiAwLjUpIG4gPSAyMzM4NTE2NC4wOyAvLyAmXFxuICAgIGlmIChncmF5ID4gMC42KSBuID0gMTUyNTIwMTQuMDsgLy8gOFxcbiAgICBpZiAoZ3JheSA+IDAuNykgbiA9IDEzMTk5NDUyLjA7IC8vIEBcXG4gICAgaWYgKGdyYXkgPiAwLjgpIG4gPSAxMTUxMjgxMC4wOyAvLyAjXFxuXFxuICAgIHZlYzIgcCA9IG1vZCggdXYgLyAoIHBpeGVsU2l6ZSAqIDAuNSApLCAyLjApIC0gdmVjMigxLjApO1xcbiAgICBjb2wgPSBjb2wgKiBjaGFyYWN0ZXIobiwgcCk7XFxuXFxuICAgIGdsX0ZyYWdDb2xvciA9IHZlYzQoY29sLCAxLjApO1xcbn1cXG5cIixcbiAgICAgICAgLy8gY3VzdG9tIHVuaWZvcm1zXG4gICAgICAgIHtcbiAgICAgICAgICAgIGRpbWVuc2lvbnM6IHsgdHlwZTogJzRmdicsIHZhbHVlOiBuZXcgRmxvYXQzMkFycmF5KFswLCAwLCAwLCAwXSkgfSxcbiAgICAgICAgICAgIHBpeGVsU2l6ZTogIHsgdHlwZTogJzFmJywgdmFsdWU6IDggfVxuICAgICAgICB9XG4gICAgKTtcbn1cblxuQXNjaWlGaWx0ZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShjb3JlLkFic3RyYWN0RmlsdGVyLnByb3RvdHlwZSk7XG5Bc2NpaUZpbHRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBBc2NpaUZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gQXNjaWlGaWx0ZXI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKEFzY2lpRmlsdGVyLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFRoZSBwaXhlbCBzaXplIHVzZWQgYnkgdGhlIGZpbHRlci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLkFzY2lpRmlsdGVyI1xuICAgICAqL1xuICAgIHNpemU6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy51bmlmb3Jtcy5waXhlbFNpemUudmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLnBpeGVsU2l6ZS52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfVxufSk7XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uLy4uL2NvcmUnKSxcbiAgICBCbHVyWEZpbHRlciA9IHJlcXVpcmUoJy4uL2JsdXIvQmx1clhGaWx0ZXInKSxcbiAgICBCbHVyWUZpbHRlciA9IHJlcXVpcmUoJy4uL2JsdXIvQmx1cllGaWx0ZXInKTtcblxuLyoqXG4gKiBUaGUgQmxvb21GaWx0ZXIgYXBwbGllcyBhIEdhdXNzaWFuIGJsdXIgdG8gYW4gb2JqZWN0LlxuICogVGhlIHN0cmVuZ3RoIG9mIHRoZSBibHVyIGNhbiBiZSBzZXQgZm9yIHgtIGFuZCB5LWF4aXMgc2VwYXJhdGVseS5cbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQWJzdHJhY3RGaWx0ZXJcbiAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnNcbiAqL1xuZnVuY3Rpb24gQmxvb21GaWx0ZXIoKVxue1xuICAgIGNvcmUuQWJzdHJhY3RGaWx0ZXIuY2FsbCh0aGlzKTtcblxuICAgIHRoaXMuYmx1clhGaWx0ZXIgPSBuZXcgQmx1clhGaWx0ZXIoKTtcbiAgICB0aGlzLmJsdXJZRmlsdGVyID0gbmV3IEJsdXJZRmlsdGVyKCk7XG5cbiAgICB0aGlzLmRlZmF1bHRGaWx0ZXIgPSBuZXcgY29yZS5BYnN0cmFjdEZpbHRlcigpO1xufVxuXG5CbG9vbUZpbHRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuQWJzdHJhY3RGaWx0ZXIucHJvdG90eXBlKTtcbkJsb29tRmlsdGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IEJsb29tRmlsdGVyO1xubW9kdWxlLmV4cG9ydHMgPSBCbG9vbUZpbHRlcjtcblxuQmxvb21GaWx0ZXIucHJvdG90eXBlLmFwcGx5RmlsdGVyID0gZnVuY3Rpb24gKHJlbmRlcmVyLCBpbnB1dCwgb3V0cHV0KVxue1xuICAgIHZhciByZW5kZXJUYXJnZXQgPSByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLmdldFJlbmRlclRhcmdldCh0cnVlKTtcblxuICAgIC8vVE9ETyAtIGNvcHlUZXhTdWJJbWFnZTJEIGNvdWxkIGJlIHVzZWQgaGVyZT9cbiAgICB0aGlzLmRlZmF1bHRGaWx0ZXIuYXBwbHlGaWx0ZXIocmVuZGVyZXIsIGlucHV0LCBvdXRwdXQpO1xuXG4gICAgdGhpcy5ibHVyWEZpbHRlci5hcHBseUZpbHRlcihyZW5kZXJlciwgaW5wdXQsIHJlbmRlclRhcmdldCk7XG5cbiAgICByZW5kZXJlci5ibGVuZE1vZGVNYW5hZ2VyLnNldEJsZW5kTW9kZShjb3JlLkJMRU5EX01PREVTLlNDUkVFTik7XG5cbiAgICB0aGlzLmJsdXJZRmlsdGVyLmFwcGx5RmlsdGVyKHJlbmRlcmVyLCByZW5kZXJUYXJnZXQsIG91dHB1dCk7XG5cbiAgICByZW5kZXJlci5ibGVuZE1vZGVNYW5hZ2VyLnNldEJsZW5kTW9kZShjb3JlLkJMRU5EX01PREVTLk5PUk1BTCk7XG5cbiAgICByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLnJldHVyblJlbmRlclRhcmdldChyZW5kZXJUYXJnZXQpO1xufTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoQmxvb21GaWx0ZXIucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgc3RyZW5ndGggb2YgYm90aCB0aGUgYmx1clggYW5kIGJsdXJZIHByb3BlcnRpZXMgc2ltdWx0YW5lb3VzbHlcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyT2YgUElYSS5maWx0ZXJzLkJsb29tRmlsdGVyI1xuICAgICAqIEBkZWZhdWx0IDJcbiAgICAgKi9cbiAgICBibHVyOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuYmx1clhGaWx0ZXIuYmx1cjtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuYmx1clhGaWx0ZXIuYmx1ciA9IHRoaXMuYmx1cllGaWx0ZXIuYmx1ciA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIHN0cmVuZ3RoIG9mIHRoZSBibHVyWCBwcm9wZXJ0eVxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJPZiBQSVhJLmZpbHRlcnMuQmxvb21GaWx0ZXIjXG4gICAgICogQGRlZmF1bHQgMlxuICAgICAqL1xuICAgIGJsdXJYOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuYmx1clhGaWx0ZXIuYmx1cjtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuYmx1clhGaWx0ZXIuYmx1ciA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIHN0cmVuZ3RoIG9mIHRoZSBibHVyWSBwcm9wZXJ0eVxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJPZiBQSVhJLmZpbHRlcnMuQmxvb21GaWx0ZXIjXG4gICAgICogQGRlZmF1bHQgMlxuICAgICAqL1xuICAgIGJsdXJZOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuYmx1cllGaWx0ZXIuYmx1cjtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuYmx1cllGaWx0ZXIuYmx1ciA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfVxufSk7XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uLy4uL2NvcmUnKTtcblxuXG4vKipcbiAqIFRoZSBCbHVyRGlyRmlsdGVyIGFwcGxpZXMgYSBHYXVzc2lhbiBibHVyIHRvd2FyZCBhIGRpcmVjdGlvbiB0byBhbiBvYmplY3QuXG4gKlxuICogQGNsYXNzXG4gKiBAcGFyYW0ge251bWJlcn0gZGlyWFxuICogQHBhcmFtIHtudW1iZXJ9IGRpcllcbiAqIEBleHRlbmRzIFBJWEkuQWJzdHJhY3RGaWx0ZXJcbiAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnNcbiAqL1xuZnVuY3Rpb24gQmx1ckRpckZpbHRlcihkaXJYLCBkaXJZKVxue1xuICAgIGNvcmUuQWJzdHJhY3RGaWx0ZXIuY2FsbCh0aGlzLFxuICAgICAgICAvLyB2ZXJ0ZXggc2hhZGVyXG4gICAgICAgIFwiYXR0cmlidXRlIHZlYzIgYVZlcnRleFBvc2l0aW9uO1xcbmF0dHJpYnV0ZSB2ZWMyIGFUZXh0dXJlQ29vcmQ7XFxuYXR0cmlidXRlIHZlYzQgYUNvbG9yO1xcblxcbnVuaWZvcm0gZmxvYXQgc3RyZW5ndGg7XFxudW5pZm9ybSBmbG9hdCBkaXJYO1xcbnVuaWZvcm0gZmxvYXQgZGlyWTtcXG51bmlmb3JtIG1hdDMgcHJvamVjdGlvbk1hdHJpeDtcXG5cXG52YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDtcXG52YXJ5aW5nIHZlYzQgdkNvbG9yO1xcbnZhcnlpbmcgdmVjMiB2Qmx1clRleENvb3Jkc1szXTtcXG5cXG52b2lkIG1haW4odm9pZClcXG57XFxuICAgIGdsX1Bvc2l0aW9uID0gdmVjNCgocHJvamVjdGlvbk1hdHJpeCAqIHZlYzMoKGFWZXJ0ZXhQb3NpdGlvbiksIDEuMCkpLnh5LCAwLjAsIDEuMCk7XFxuICAgIHZUZXh0dXJlQ29vcmQgPSBhVGV4dHVyZUNvb3JkO1xcblxcbiAgICB2Qmx1clRleENvb3Jkc1swXSA9IGFUZXh0dXJlQ29vcmQgKyB2ZWMyKCAoMC4wMDQgKiBzdHJlbmd0aCkgKiBkaXJYLCAoMC4wMDQgKiBzdHJlbmd0aCkgKiBkaXJZICk7XFxuICAgIHZCbHVyVGV4Q29vcmRzWzFdID0gYVRleHR1cmVDb29yZCArIHZlYzIoICgwLjAwOCAqIHN0cmVuZ3RoKSAqIGRpclgsICgwLjAwOCAqIHN0cmVuZ3RoKSAqIGRpclkgKTtcXG4gICAgdkJsdXJUZXhDb29yZHNbMl0gPSBhVGV4dHVyZUNvb3JkICsgdmVjMiggKDAuMDEyICogc3RyZW5ndGgpICogZGlyWCwgKDAuMDEyICogc3RyZW5ndGgpICogZGlyWSApO1xcblxcbiAgICB2Q29sb3IgPSB2ZWM0KGFDb2xvci5yZ2IgKiBhQ29sb3IuYSwgYUNvbG9yLmEpO1xcbn1cXG5cIixcbiAgICAgICAgLy8gZnJhZ21lbnQgc2hhZGVyXG4gICAgICAgIFwicHJlY2lzaW9uIGxvd3AgZmxvYXQ7XFxuXFxudmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7XFxudmFyeWluZyB2ZWMyIHZCbHVyVGV4Q29vcmRzWzNdO1xcbnZhcnlpbmcgdmVjNCB2Q29sb3I7XFxuXFxudW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXI7XFxuXFxudm9pZCBtYWluKHZvaWQpXFxue1xcbiAgICBnbF9GcmFnQ29sb3IgPSB2ZWM0KDAuMCk7XFxuXFxuICAgIGdsX0ZyYWdDb2xvciArPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZUZXh0dXJlQ29vcmQgICAgICkgKiAwLjM5ODk0MjI4MDQwMTQzMjc7XFxuICAgIGdsX0ZyYWdDb2xvciArPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZCbHVyVGV4Q29vcmRzWyAwXSkgKiAwLjI0MTk3MDcyNDUxOTE0NTQ7XFxuICAgIGdsX0ZyYWdDb2xvciArPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZCbHVyVGV4Q29vcmRzWyAxXSkgKiAwLjA1Mzk5MDk2NjUxMzE4OTg1O1xcbiAgICBnbF9GcmFnQ29sb3IgKz0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2Qmx1clRleENvb3Jkc1sgMl0pICogMC4wMDQ0MzE4NDg0MTE5MzgzNDE7XFxufVxcblwiLFxuICAgICAgICAvLyBzZXQgdGhlIHVuaWZvcm1zXG4gICAgICAgIHtcbiAgICAgICAgICAgIHN0cmVuZ3RoOiB7IHR5cGU6ICcxZicsIHZhbHVlOiAxIH0sXG4gICAgICAgICAgICBkaXJYOiB7IHR5cGU6ICcxZicsIHZhbHVlOiBkaXJYIHx8IDAgfSxcbiAgICAgICAgICAgIGRpclk6IHsgdHlwZTogJzFmJywgdmFsdWU6IGRpclkgfHwgMCB9XG4gICAgICAgIH1cbiAgICApO1xuXG4gICAgdGhpcy5kZWZhdWx0RmlsdGVyID0gbmV3IGNvcmUuQWJzdHJhY3RGaWx0ZXIoKTtcblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIG51bWJlciBvZiBwYXNzZXMgZm9yIGJsdXIuIE1vcmUgcGFzc2VzIG1lYW5zIGhpZ2hlciBxdWFpbGl0eSBibHVyaW5nLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDFcbiAgICAgKi9cbiAgICB0aGlzLnBhc3NlcyA9IDE7XG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBYIGRpcmVjdGlvbiBvZiB0aGUgYmx1clxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDBcbiAgICAgKi9cbiAgICB0aGlzLmRpclggPSBkaXJYIHx8IDA7XG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBZIGRpcmVjdGlvbiBvZiB0aGUgYmx1clxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDBcbiAgICAgKi9cbiAgICB0aGlzLmRpclkgPSBkaXJZIHx8IDA7XG5cbiAgICB0aGlzLnN0cmVuZ3RoID0gNDtcbn1cblxuQmx1ckRpckZpbHRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuQWJzdHJhY3RGaWx0ZXIucHJvdG90eXBlKTtcbkJsdXJEaXJGaWx0ZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gQmx1ckRpckZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gQmx1ckRpckZpbHRlcjtcblxuQmx1ckRpckZpbHRlci5wcm90b3R5cGUuYXBwbHlGaWx0ZXIgPSBmdW5jdGlvbiAocmVuZGVyZXIsIGlucHV0LCBvdXRwdXQsIGNsZWFyKSB7XG5cbiAgICB2YXIgc2hhZGVyID0gdGhpcy5nZXRTaGFkZXIocmVuZGVyZXIpO1xuXG4gICAgdGhpcy51bmlmb3Jtcy5zdHJlbmd0aC52YWx1ZSA9IHRoaXMuc3RyZW5ndGggLyA0IC8gdGhpcy5wYXNzZXMgKiAoaW5wdXQuZnJhbWUud2lkdGggLyBpbnB1dC5zaXplLndpZHRoKTtcblxuICAgIGlmICh0aGlzLnBhc3NlcyA9PT0gMSkge1xuICAgICAgICByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLmFwcGx5RmlsdGVyKHNoYWRlciwgaW5wdXQsIG91dHB1dCwgY2xlYXIpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHZhciByZW5kZXJUYXJnZXQgPSByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLmdldFJlbmRlclRhcmdldCh0cnVlKTtcblxuICAgICAgICByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLmFwcGx5RmlsdGVyKHNoYWRlciwgaW5wdXQsIHJlbmRlclRhcmdldCwgY2xlYXIpO1xuXG4gICAgICAgIGZvcih2YXIgaSA9IDA7IGkgPCB0aGlzLnBhc3Nlcy0yOyBpKyspXG4gICAgICAgIHtcbiAgICAgICAgICAgIC8vdGhpcy51bmlmb3Jtcy5zdHJlbmd0aC52YWx1ZSA9IHRoaXMuc3RyZW5ndGggLyA0IC8gKHRoaXMucGFzc2VzKyhpKjIpKSAqIChpbnB1dC5mcmFtZS53aWR0aCAvIGlucHV0LnNpemUud2lkdGgpO1xuICAgICAgICAgICAgcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5hcHBseUZpbHRlcihzaGFkZXIsIHJlbmRlclRhcmdldCwgcmVuZGVyVGFyZ2V0LCBjbGVhcik7XG4gICAgICAgIH1cblxuICAgICAgICByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLmFwcGx5RmlsdGVyKHNoYWRlciwgcmVuZGVyVGFyZ2V0LCBvdXRwdXQsIGNsZWFyKTtcblxuICAgICAgICByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLnJldHVyblJlbmRlclRhcmdldChyZW5kZXJUYXJnZXQpO1xuICAgIH1cbn07XG5cblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoQmx1ckRpckZpbHRlci5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBzdHJlbmd0aCBvZiBib3RoIHRoZSBibHVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuQmx1ckRpckZpbHRlciNcbiAgICAgKiBAZGVmYXVsdCAyXG4gICAgICovXG4gICAgYmx1cjoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnN0cmVuZ3RoO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5wYWRkaW5nID0gdmFsdWUgKiAwLjU7XG4gICAgICAgICAgICB0aGlzLnN0cmVuZ3RoID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9LFxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIFggZGlyZWN0aW9uIG9mIHRoZSBibHVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuQmx1cllGaWx0ZXIjXG4gICAgICogQGRlZmF1bHQgMFxuICAgICAqL1xuICAgIGRpclg6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5kaXJYO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy5kaXJYLnZhbHVlID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9LFxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIFkgZGlyZWN0aW9uIG9mIHRoZSBibHVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuQmx1ckRpckZpbHRlciNcbiAgICAgKiBAZGVmYXVsdCAwXG4gICAgICovXG4gICAgZGlyWToge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmRpclk7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLmRpclkudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi8uLi9jb3JlJyksXG4gICAgQmx1clhGaWx0ZXIgPSByZXF1aXJlKCcuL0JsdXJYRmlsdGVyJyksXG4gICAgQmx1cllGaWx0ZXIgPSByZXF1aXJlKCcuL0JsdXJZRmlsdGVyJyk7XG5cbi8qKlxuICogVGhlIEJsdXJGaWx0ZXIgYXBwbGllcyBhIEdhdXNzaWFuIGJsdXIgdG8gYW4gb2JqZWN0LlxuICogVGhlIHN0cmVuZ3RoIG9mIHRoZSBibHVyIGNhbiBiZSBzZXQgZm9yIHgtIGFuZCB5LWF4aXMgc2VwYXJhdGVseS5cbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQWJzdHJhY3RGaWx0ZXJcbiAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnNcbiAqL1xuZnVuY3Rpb24gQmx1ckZpbHRlcigpXG57XG4gICAgY29yZS5BYnN0cmFjdEZpbHRlci5jYWxsKHRoaXMpO1xuXG4gICAgdGhpcy5ibHVyWEZpbHRlciA9IG5ldyBCbHVyWEZpbHRlcigpO1xuICAgIHRoaXMuYmx1cllGaWx0ZXIgPSBuZXcgQmx1cllGaWx0ZXIoKTtcbn1cblxuQmx1ckZpbHRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuQWJzdHJhY3RGaWx0ZXIucHJvdG90eXBlKTtcbkJsdXJGaWx0ZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gQmx1ckZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gQmx1ckZpbHRlcjtcblxuQmx1ckZpbHRlci5wcm90b3R5cGUuYXBwbHlGaWx0ZXIgPSBmdW5jdGlvbiAocmVuZGVyZXIsIGlucHV0LCBvdXRwdXQpXG57XG4gICAgdmFyIHJlbmRlclRhcmdldCA9IHJlbmRlcmVyLmZpbHRlck1hbmFnZXIuZ2V0UmVuZGVyVGFyZ2V0KHRydWUpO1xuXG4gICAgdGhpcy5ibHVyWEZpbHRlci5hcHBseUZpbHRlcihyZW5kZXJlciwgaW5wdXQsIHJlbmRlclRhcmdldCk7XG4gICAgdGhpcy5ibHVyWUZpbHRlci5hcHBseUZpbHRlcihyZW5kZXJlciwgcmVuZGVyVGFyZ2V0LCBvdXRwdXQpO1xuXG4gICAgcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5yZXR1cm5SZW5kZXJUYXJnZXQocmVuZGVyVGFyZ2V0KTtcbn07XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKEJsdXJGaWx0ZXIucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgc3RyZW5ndGggb2YgYm90aCB0aGUgYmx1clggYW5kIGJsdXJZIHByb3BlcnRpZXMgc2ltdWx0YW5lb3VzbHlcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyT2YgUElYSS5maWx0ZXJzLkJsdXJGaWx0ZXIjXG4gICAgICogQGRlZmF1bHQgMlxuICAgICAqL1xuICAgIGJsdXI6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5ibHVyWEZpbHRlci5ibHVyO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5wYWRkaW5nID0gTWF0aC5hYnModmFsdWUpICogMC41O1xuICAgICAgICAgICAgdGhpcy5ibHVyWEZpbHRlci5ibHVyID0gdGhpcy5ibHVyWUZpbHRlci5ibHVyID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgbnVtYmVyIG9mIHBhc3NlcyBmb3IgYmx1ci4gTW9yZSBwYXNzZXMgbWVhbnMgaGlnaGVyIHF1YWlsaXR5IGJsdXJpbmcuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5CbHVyWUZpbHRlciNcbiAgICAgKiBAZGVmYXVsdCAxXG4gICAgICovXG4gICAgcGFzc2VzOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuICB0aGlzLmJsdXJYRmlsdGVyLnBhc3NlcztcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuYmx1clhGaWx0ZXIucGFzc2VzID0gdGhpcy5ibHVyWUZpbHRlci5wYXNzZXMgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBzdHJlbmd0aCBvZiB0aGUgYmx1clggcHJvcGVydHlcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyT2YgUElYSS5maWx0ZXJzLkJsdXJGaWx0ZXIjXG4gICAgICogQGRlZmF1bHQgMlxuICAgICAqL1xuICAgIGJsdXJYOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuYmx1clhGaWx0ZXIuYmx1cjtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuYmx1clhGaWx0ZXIuYmx1ciA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIHN0cmVuZ3RoIG9mIHRoZSBibHVyWSBwcm9wZXJ0eVxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJPZiBQSVhJLmZpbHRlcnMuQmx1ckZpbHRlciNcbiAgICAgKiBAZGVmYXVsdCAyXG4gICAgICovXG4gICAgYmx1clk6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5ibHVyWUZpbHRlci5ibHVyO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5ibHVyWUZpbHRlci5ibHVyID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG59KTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vLi4vY29yZScpO1xuLy8gQHNlZSBodHRwczovL2dpdGh1Yi5jb20vc3Vic3RhY2svYnJmcy9pc3N1ZXMvMjVcblxuXG4vKipcbiAqIFRoZSBCbHVyWEZpbHRlciBhcHBsaWVzIGEgaG9yaXpvbnRhbCBHYXVzc2lhbiBibHVyIHRvIGFuIG9iamVjdC5cbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQWJzdHJhY3RGaWx0ZXJcbiAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnNcbiAqL1xuZnVuY3Rpb24gQmx1clhGaWx0ZXIoKVxue1xuICAgIGNvcmUuQWJzdHJhY3RGaWx0ZXIuY2FsbCh0aGlzLFxuICAgICAgICAvLyB2ZXJ0ZXggc2hhZGVyXG4gICAgICAgIFwiYXR0cmlidXRlIHZlYzIgYVZlcnRleFBvc2l0aW9uO1xcbmF0dHJpYnV0ZSB2ZWMyIGFUZXh0dXJlQ29vcmQ7XFxuYXR0cmlidXRlIHZlYzQgYUNvbG9yO1xcblxcbnVuaWZvcm0gZmxvYXQgc3RyZW5ndGg7XFxudW5pZm9ybSBtYXQzIHByb2plY3Rpb25NYXRyaXg7XFxuXFxudmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7XFxudmFyeWluZyB2ZWM0IHZDb2xvcjtcXG52YXJ5aW5nIHZlYzIgdkJsdXJUZXhDb29yZHNbNl07XFxuXFxudm9pZCBtYWluKHZvaWQpXFxue1xcbiAgICBnbF9Qb3NpdGlvbiA9IHZlYzQoKHByb2plY3Rpb25NYXRyaXggKiB2ZWMzKChhVmVydGV4UG9zaXRpb24pLCAxLjApKS54eSwgMC4wLCAxLjApO1xcbiAgICB2VGV4dHVyZUNvb3JkID0gYVRleHR1cmVDb29yZDtcXG5cXG4gICAgdkJsdXJUZXhDb29yZHNbIDBdID0gYVRleHR1cmVDb29yZCArIHZlYzIoLTAuMDEyICogc3RyZW5ndGgsIDAuMCk7XFxuICAgIHZCbHVyVGV4Q29vcmRzWyAxXSA9IGFUZXh0dXJlQ29vcmQgKyB2ZWMyKC0wLjAwOCAqIHN0cmVuZ3RoLCAwLjApO1xcbiAgICB2Qmx1clRleENvb3Jkc1sgMl0gPSBhVGV4dHVyZUNvb3JkICsgdmVjMigtMC4wMDQgKiBzdHJlbmd0aCwgMC4wKTtcXG4gICAgdkJsdXJUZXhDb29yZHNbIDNdID0gYVRleHR1cmVDb29yZCArIHZlYzIoIDAuMDA0ICogc3RyZW5ndGgsIDAuMCk7XFxuICAgIHZCbHVyVGV4Q29vcmRzWyA0XSA9IGFUZXh0dXJlQ29vcmQgKyB2ZWMyKCAwLjAwOCAqIHN0cmVuZ3RoLCAwLjApO1xcbiAgICB2Qmx1clRleENvb3Jkc1sgNV0gPSBhVGV4dHVyZUNvb3JkICsgdmVjMiggMC4wMTIgKiBzdHJlbmd0aCwgMC4wKTtcXG5cXG4gICAgdkNvbG9yID0gdmVjNChhQ29sb3IucmdiICogYUNvbG9yLmEsIGFDb2xvci5hKTtcXG59XFxuXCIsXG4gICAgICAgIC8vIGZyYWdtZW50IHNoYWRlclxuICAgICAgICBcInByZWNpc2lvbiBsb3dwIGZsb2F0O1xcblxcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xcbnZhcnlpbmcgdmVjMiB2Qmx1clRleENvb3Jkc1s2XTtcXG52YXJ5aW5nIHZlYzQgdkNvbG9yO1xcblxcbnVuaWZvcm0gc2FtcGxlcjJEIHVTYW1wbGVyO1xcblxcbnZvaWQgbWFpbih2b2lkKVxcbntcXG4gICAgZ2xfRnJhZ0NvbG9yID0gdmVjNCgwLjApO1xcblxcbiAgICBnbF9GcmFnQ29sb3IgKz0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2Qmx1clRleENvb3Jkc1sgMF0pKjAuMDA0NDMxODQ4NDExOTM4MzQxO1xcbiAgICBnbF9GcmFnQ29sb3IgKz0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2Qmx1clRleENvb3Jkc1sgMV0pKjAuMDUzOTkwOTY2NTEzMTg5ODU7XFxuICAgIGdsX0ZyYWdDb2xvciArPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZCbHVyVGV4Q29vcmRzWyAyXSkqMC4yNDE5NzA3MjQ1MTkxNDU0O1xcbiAgICBnbF9GcmFnQ29sb3IgKz0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2VGV4dHVyZUNvb3JkICAgICApKjAuMzk4OTQyMjgwNDAxNDMyNztcXG4gICAgZ2xfRnJhZ0NvbG9yICs9IHRleHR1cmUyRCh1U2FtcGxlciwgdkJsdXJUZXhDb29yZHNbIDNdKSowLjI0MTk3MDcyNDUxOTE0NTQ7XFxuICAgIGdsX0ZyYWdDb2xvciArPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZCbHVyVGV4Q29vcmRzWyA0XSkqMC4wNTM5OTA5NjY1MTMxODk4NTtcXG4gICAgZ2xfRnJhZ0NvbG9yICs9IHRleHR1cmUyRCh1U2FtcGxlciwgdkJsdXJUZXhDb29yZHNbIDVdKSowLjAwNDQzMTg0ODQxMTkzODM0MTtcXG59XFxuXCIsXG4gICAgICAgIC8vIHNldCB0aGUgdW5pZm9ybXNcbiAgICAgICAge1xuICAgICAgICAgICAgc3RyZW5ndGg6IHsgdHlwZTogJzFmJywgdmFsdWU6IDEgfVxuICAgICAgICB9XG4gICAgKTtcblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIG51bWJlciBvZiBwYXNzZXMgZm9yIGJsdXIuIE1vcmUgcGFzc2VzIG1lYW5zIGhpZ2hlciBxdWFpbGl0eSBibHVyaW5nLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDFcbiAgICAgKi9cbiAgICB0aGlzLnBhc3NlcyA9IDE7XG5cbiAgICB0aGlzLnN0cmVuZ3RoID0gNDtcbn1cblxuQmx1clhGaWx0ZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShjb3JlLkFic3RyYWN0RmlsdGVyLnByb3RvdHlwZSk7XG5CbHVyWEZpbHRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBCbHVyWEZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gQmx1clhGaWx0ZXI7XG5cbkJsdXJYRmlsdGVyLnByb3RvdHlwZS5hcHBseUZpbHRlciA9IGZ1bmN0aW9uIChyZW5kZXJlciwgaW5wdXQsIG91dHB1dCwgY2xlYXIpXG57XG4gICAgdmFyIHNoYWRlciA9IHRoaXMuZ2V0U2hhZGVyKHJlbmRlcmVyKTtcblxuICAgIHRoaXMudW5pZm9ybXMuc3RyZW5ndGgudmFsdWUgPSB0aGlzLnN0cmVuZ3RoIC8gNCAvIHRoaXMucGFzc2VzICogKGlucHV0LmZyYW1lLndpZHRoIC8gaW5wdXQuc2l6ZS53aWR0aCk7XG5cbiAgICBpZih0aGlzLnBhc3NlcyA9PT0gMSlcbiAgICB7XG4gICAgICAgIHJlbmRlcmVyLmZpbHRlck1hbmFnZXIuYXBwbHlGaWx0ZXIoc2hhZGVyLCBpbnB1dCwgb3V0cHV0LCBjbGVhcik7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHZhciByZW5kZXJUYXJnZXQgPSByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLmdldFJlbmRlclRhcmdldCh0cnVlKTtcbiAgICAgICAgdmFyIGZsaXAgPSBpbnB1dDtcbiAgICAgICAgdmFyIGZsb3AgPSByZW5kZXJUYXJnZXQ7XG5cbiAgICAgICAgZm9yKHZhciBpID0gMDsgaSA8IHRoaXMucGFzc2VzLTE7IGkrKylcbiAgICAgICAge1xuICAgICAgICAgICAgcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5hcHBseUZpbHRlcihzaGFkZXIsIGZsaXAsIGZsb3AsIHRydWUpO1xuXG4gICAgICAgICAgIHZhciB0ZW1wID0gZmxvcDtcbiAgICAgICAgICAgZmxvcCA9IGZsaXA7XG4gICAgICAgICAgIGZsaXAgPSB0ZW1wO1xuICAgICAgICB9XG5cbiAgICAgICAgcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5hcHBseUZpbHRlcihzaGFkZXIsIGZsaXAsIG91dHB1dCwgY2xlYXIpO1xuXG4gICAgICAgIHJlbmRlcmVyLmZpbHRlck1hbmFnZXIucmV0dXJuUmVuZGVyVGFyZ2V0KHJlbmRlclRhcmdldCk7XG4gICAgfVxufTtcblxuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhCbHVyWEZpbHRlci5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBzdHJlbmd0aCBvZiBib3RoIHRoZSBibHVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuQmx1clhGaWx0ZXIjXG4gICAgICogQGRlZmF1bHQgMlxuICAgICAqL1xuICAgIGJsdXI6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gIHRoaXMuc3RyZW5ndGg7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnBhZGRpbmcgPSAgTWF0aC5hYnModmFsdWUpICogMC41O1xuICAgICAgICAgICAgdGhpcy5zdHJlbmd0aCA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfVxufSk7XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uLy4uL2NvcmUnKTtcbi8vIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL3N1YnN0YWNrL2JyZnMvaXNzdWVzLzI1XG5cblxuLyoqXG4gKiBUaGUgQmx1cllGaWx0ZXIgYXBwbGllcyBhIGhvcml6b250YWwgR2F1c3NpYW4gYmx1ciB0byBhbiBvYmplY3QuXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLkFic3RyYWN0RmlsdGVyXG4gKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzXG4gKi9cbmZ1bmN0aW9uIEJsdXJZRmlsdGVyKClcbntcbiAgICBjb3JlLkFic3RyYWN0RmlsdGVyLmNhbGwodGhpcyxcbiAgICAgICAgLy8gdmVydGV4IHNoYWRlclxuICAgICAgICBcImF0dHJpYnV0ZSB2ZWMyIGFWZXJ0ZXhQb3NpdGlvbjtcXG5hdHRyaWJ1dGUgdmVjMiBhVGV4dHVyZUNvb3JkO1xcbmF0dHJpYnV0ZSB2ZWM0IGFDb2xvcjtcXG5cXG51bmlmb3JtIGZsb2F0IHN0cmVuZ3RoO1xcbnVuaWZvcm0gbWF0MyBwcm9qZWN0aW9uTWF0cml4O1xcblxcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xcbnZhcnlpbmcgdmVjNCB2Q29sb3I7XFxudmFyeWluZyB2ZWMyIHZCbHVyVGV4Q29vcmRzWzZdO1xcblxcbnZvaWQgbWFpbih2b2lkKVxcbntcXG4gICAgZ2xfUG9zaXRpb24gPSB2ZWM0KChwcm9qZWN0aW9uTWF0cml4ICogdmVjMygoYVZlcnRleFBvc2l0aW9uKSwgMS4wKSkueHksIDAuMCwgMS4wKTtcXG4gICAgdlRleHR1cmVDb29yZCA9IGFUZXh0dXJlQ29vcmQ7XFxuXFxuICAgIHZCbHVyVGV4Q29vcmRzWyAwXSA9IGFUZXh0dXJlQ29vcmQgKyB2ZWMyKDAuMCwgLTAuMDEyICogc3RyZW5ndGgpO1xcbiAgICB2Qmx1clRleENvb3Jkc1sgMV0gPSBhVGV4dHVyZUNvb3JkICsgdmVjMigwLjAsIC0wLjAwOCAqIHN0cmVuZ3RoKTtcXG4gICAgdkJsdXJUZXhDb29yZHNbIDJdID0gYVRleHR1cmVDb29yZCArIHZlYzIoMC4wLCAtMC4wMDQgKiBzdHJlbmd0aCk7XFxuICAgIHZCbHVyVGV4Q29vcmRzWyAzXSA9IGFUZXh0dXJlQ29vcmQgKyB2ZWMyKDAuMCwgIDAuMDA0ICogc3RyZW5ndGgpO1xcbiAgICB2Qmx1clRleENvb3Jkc1sgNF0gPSBhVGV4dHVyZUNvb3JkICsgdmVjMigwLjAsICAwLjAwOCAqIHN0cmVuZ3RoKTtcXG4gICAgdkJsdXJUZXhDb29yZHNbIDVdID0gYVRleHR1cmVDb29yZCArIHZlYzIoMC4wLCAgMC4wMTIgKiBzdHJlbmd0aCk7XFxuXFxuICAgdkNvbG9yID0gdmVjNChhQ29sb3IucmdiICogYUNvbG9yLmEsIGFDb2xvci5hKTtcXG59XFxuXCIsXG4gICAgICAgIC8vIGZyYWdtZW50IHNoYWRlclxuICAgICAgICBcInByZWNpc2lvbiBsb3dwIGZsb2F0O1xcblxcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xcbnZhcnlpbmcgdmVjMiB2Qmx1clRleENvb3Jkc1s2XTtcXG52YXJ5aW5nIHZlYzQgdkNvbG9yO1xcblxcbnVuaWZvcm0gc2FtcGxlcjJEIHVTYW1wbGVyO1xcblxcbnZvaWQgbWFpbih2b2lkKVxcbntcXG4gICAgZ2xfRnJhZ0NvbG9yID0gdmVjNCgwLjApO1xcblxcbiAgICBnbF9GcmFnQ29sb3IgKz0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2Qmx1clRleENvb3Jkc1sgMF0pKjAuMDA0NDMxODQ4NDExOTM4MzQxO1xcbiAgICBnbF9GcmFnQ29sb3IgKz0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2Qmx1clRleENvb3Jkc1sgMV0pKjAuMDUzOTkwOTY2NTEzMTg5ODU7XFxuICAgIGdsX0ZyYWdDb2xvciArPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZCbHVyVGV4Q29vcmRzWyAyXSkqMC4yNDE5NzA3MjQ1MTkxNDU0O1xcbiAgICBnbF9GcmFnQ29sb3IgKz0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2VGV4dHVyZUNvb3JkICAgICApKjAuMzk4OTQyMjgwNDAxNDMyNztcXG4gICAgZ2xfRnJhZ0NvbG9yICs9IHRleHR1cmUyRCh1U2FtcGxlciwgdkJsdXJUZXhDb29yZHNbIDNdKSowLjI0MTk3MDcyNDUxOTE0NTQ7XFxuICAgIGdsX0ZyYWdDb2xvciArPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZCbHVyVGV4Q29vcmRzWyA0XSkqMC4wNTM5OTA5NjY1MTMxODk4NTtcXG4gICAgZ2xfRnJhZ0NvbG9yICs9IHRleHR1cmUyRCh1U2FtcGxlciwgdkJsdXJUZXhDb29yZHNbIDVdKSowLjAwNDQzMTg0ODQxMTkzODM0MTtcXG59XFxuXCIsXG4gICAgICAgIC8vIHNldCB0aGUgdW5pZm9ybXNcbiAgICAgICAge1xuICAgICAgICAgICAgc3RyZW5ndGg6IHsgdHlwZTogJzFmJywgdmFsdWU6IDEgfVxuICAgICAgICB9XG4gICAgKTtcblxuICAgIHRoaXMucGFzc2VzID0gMTtcbiAgICB0aGlzLnN0cmVuZ3RoID0gNDtcbn1cblxuQmx1cllGaWx0ZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShjb3JlLkFic3RyYWN0RmlsdGVyLnByb3RvdHlwZSk7XG5CbHVyWUZpbHRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBCbHVyWUZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gQmx1cllGaWx0ZXI7XG5cbkJsdXJZRmlsdGVyLnByb3RvdHlwZS5hcHBseUZpbHRlciA9IGZ1bmN0aW9uIChyZW5kZXJlciwgaW5wdXQsIG91dHB1dCwgY2xlYXIpXG57XG4gICAgdmFyIHNoYWRlciA9IHRoaXMuZ2V0U2hhZGVyKHJlbmRlcmVyKTtcblxuICAgIHRoaXMudW5pZm9ybXMuc3RyZW5ndGgudmFsdWUgPSBNYXRoLmFicyh0aGlzLnN0cmVuZ3RoKSAvIDQgLyB0aGlzLnBhc3NlcyAqIChpbnB1dC5mcmFtZS5oZWlnaHQgLyBpbnB1dC5zaXplLmhlaWdodCk7XG5cbiAgICBpZih0aGlzLnBhc3NlcyA9PT0gMSlcbiAgICB7XG4gICAgICAgIHJlbmRlcmVyLmZpbHRlck1hbmFnZXIuYXBwbHlGaWx0ZXIoc2hhZGVyLCBpbnB1dCwgb3V0cHV0LCBjbGVhcik7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHZhciByZW5kZXJUYXJnZXQgPSByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLmdldFJlbmRlclRhcmdldCh0cnVlKTtcbiAgICAgICAgdmFyIGZsaXAgPSBpbnB1dDtcbiAgICAgICAgdmFyIGZsb3AgPSByZW5kZXJUYXJnZXQ7XG5cbiAgICAgICAgZm9yKHZhciBpID0gMDsgaSA8IHRoaXMucGFzc2VzLTE7IGkrKylcbiAgICAgICAge1xuICAgICAgICAgICAgcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5hcHBseUZpbHRlcihzaGFkZXIsIGZsaXAsIGZsb3AsIHRydWUpO1xuXG4gICAgICAgICAgIHZhciB0ZW1wID0gZmxvcDtcbiAgICAgICAgICAgZmxvcCA9IGZsaXA7XG4gICAgICAgICAgIGZsaXAgPSB0ZW1wO1xuICAgICAgICB9XG5cbiAgICAgICAgcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5hcHBseUZpbHRlcihzaGFkZXIsIGZsaXAsIG91dHB1dCwgY2xlYXIpO1xuXG4gICAgICAgIHJlbmRlcmVyLmZpbHRlck1hbmFnZXIucmV0dXJuUmVuZGVyVGFyZ2V0KHJlbmRlclRhcmdldCk7XG4gICAgfVxufTtcblxuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhCbHVyWUZpbHRlci5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBzdHJlbmd0aCBvZiBib3RoIHRoZSBibHVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuQmx1cllGaWx0ZXIjXG4gICAgICogQGRlZmF1bHQgMlxuICAgICAqL1xuICAgIGJsdXI6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gIHRoaXMuc3RyZW5ndGg7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnBhZGRpbmcgPSBNYXRoLmFicyh2YWx1ZSkgKiAwLjU7XG4gICAgICAgICAgICB0aGlzLnN0cmVuZ3RoID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG59KTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vLi4vY29yZScpO1xuLy8gQHNlZSBodHRwczovL2dpdGh1Yi5jb20vc3Vic3RhY2svYnJmcy9pc3N1ZXMvMjVcblxuXG4vKipcbiAqIEEgU21hcnQgQmx1ciBGaWx0ZXIuXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLkFic3RyYWN0RmlsdGVyXG4gKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzXG4gKi9cbmZ1bmN0aW9uIFNtYXJ0Qmx1ckZpbHRlcigpXG57XG4gICAgY29yZS5BYnN0cmFjdEZpbHRlci5jYWxsKHRoaXMsXG4gICAgICAgIC8vIHZlcnRleCBzaGFkZXJcbiAgICAgICAgbnVsbCxcbiAgICAgICAgLy8gZnJhZ21lbnQgc2hhZGVyXG4gICAgICAgIFwicHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XFxuXFxudmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7XFxuXFxudW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXI7XFxudW5pZm9ybSB2ZWMyIGRlbHRhO1xcblxcbmZsb2F0IHJhbmRvbSh2ZWMzIHNjYWxlLCBmbG9hdCBzZWVkKVxcbntcXG4gICAgcmV0dXJuIGZyYWN0KHNpbihkb3QoZ2xfRnJhZ0Nvb3JkLnh5eiArIHNlZWQsIHNjYWxlKSkgKiA0Mzc1OC41NDUzICsgc2VlZCk7XFxufVxcblxcbnZvaWQgbWFpbih2b2lkKVxcbntcXG4gICAgdmVjNCBjb2xvciA9IHZlYzQoMC4wKTtcXG4gICAgZmxvYXQgdG90YWwgPSAwLjA7XFxuXFxuICAgIGZsb2F0IG9mZnNldCA9IHJhbmRvbSh2ZWMzKDEyLjk4OTgsIDc4LjIzMywgMTUxLjcxODIpLCAwLjApO1xcblxcbiAgICBmb3IgKGZsb2F0IHQgPSAtMzAuMDsgdCA8PSAzMC4wOyB0KyspXFxuICAgIHtcXG4gICAgICAgIGZsb2F0IHBlcmNlbnQgPSAodCArIG9mZnNldCAtIDAuNSkgLyAzMC4wO1xcbiAgICAgICAgZmxvYXQgd2VpZ2h0ID0gMS4wIC0gYWJzKHBlcmNlbnQpO1xcbiAgICAgICAgdmVjNCBzYW1wbGUgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZUZXh0dXJlQ29vcmQgKyBkZWx0YSAqIHBlcmNlbnQpO1xcbiAgICAgICAgc2FtcGxlLnJnYiAqPSBzYW1wbGUuYTtcXG4gICAgICAgIGNvbG9yICs9IHNhbXBsZSAqIHdlaWdodDtcXG4gICAgICAgIHRvdGFsICs9IHdlaWdodDtcXG4gICAgfVxcblxcbiAgICBnbF9GcmFnQ29sb3IgPSBjb2xvciAvIHRvdGFsO1xcbiAgICBnbF9GcmFnQ29sb3IucmdiIC89IGdsX0ZyYWdDb2xvci5hICsgMC4wMDAwMTtcXG59XFxuXCIsXG4gICAgICAgIC8vIHVuaWZvcm1zXG4gICAgICAgIHtcbiAgICAgICAgICBkZWx0YTogeyB0eXBlOiAndjInLCB2YWx1ZTogeyB4OiAwLjEsIHk6IDAuMCB9IH1cbiAgICAgICAgfVxuICAgICk7XG59XG5cblNtYXJ0Qmx1ckZpbHRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuQWJzdHJhY3RGaWx0ZXIucHJvdG90eXBlKTtcblNtYXJ0Qmx1ckZpbHRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBTbWFydEJsdXJGaWx0ZXI7XG5tb2R1bGUuZXhwb3J0cyA9IFNtYXJ0Qmx1ckZpbHRlcjtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vLi4vY29yZScpO1xuLy8gQHNlZSBodHRwczovL2dpdGh1Yi5jb20vc3Vic3RhY2svYnJmcy9pc3N1ZXMvMjVcblxuXG4vKipcbiAqIFRoZSBDb2xvck1hdHJpeEZpbHRlciBjbGFzcyBsZXRzIHlvdSBhcHBseSBhIDV4NCBtYXRyaXggdHJhbnNmb3JtYXRpb24gb24gdGhlIFJHQkFcbiAqIGNvbG9yIGFuZCBhbHBoYSB2YWx1ZXMgb2YgZXZlcnkgcGl4ZWwgb24geW91ciBkaXNwbGF5T2JqZWN0IHRvIHByb2R1Y2UgYSByZXN1bHRcbiAqIHdpdGggYSBuZXcgc2V0IG9mIFJHQkEgY29sb3IgYW5kIGFscGhhIHZhbHVlcy4gSXQncyBwcmV0dHkgcG93ZXJmdWwhXG4gKlxuICogYGBganNcbiAqICB2YXIgY29sb3JNYXRyaXggPSBuZXcgUElYSS5Db2xvck1hdHJpeEZpbHRlcigpO1xuICogIGNvbnRhaW5lci5maWx0ZXJzID0gW2NvbG9yTWF0cml4XTtcbiAqICBjb2xvck1hdHJpeC5jb250cmFzdCgyKTtcbiAqIGBgYFxuICogQGF1dGhvciBDbMOpbWVudCBDaGVuZWJhdWx0IDxjbGVtZW50QGdvb2Rib3lkaWdpdGFsLmNvbT5cbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5BYnN0cmFjdEZpbHRlclxuICogQG1lbWJlcm9mIFBJWEkuZmlsdGVyc1xuICovXG5mdW5jdGlvbiBDb2xvck1hdHJpeEZpbHRlcigpXG57XG4gICAgY29yZS5BYnN0cmFjdEZpbHRlci5jYWxsKHRoaXMsXG4gICAgICAgIC8vIHZlcnRleCBzaGFkZXJcbiAgICAgICAgbnVsbCxcbiAgICAgICAgLy8gZnJhZ21lbnQgc2hhZGVyXG4gICAgICAgIFwicHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XFxuXFxudmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7XFxudW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXI7XFxudW5pZm9ybSBmbG9hdCBtWzI1XTtcXG5cXG52b2lkIG1haW4odm9pZClcXG57XFxuXFxuICAgIHZlYzQgYyA9IHRleHR1cmUyRCh1U2FtcGxlciwgdlRleHR1cmVDb29yZCk7XFxuXFxuICAgIGdsX0ZyYWdDb2xvci5yID0gKG1bMF0gKiBjLnIpO1xcbiAgICAgICAgZ2xfRnJhZ0NvbG9yLnIgKz0gKG1bMV0gKiBjLmcpO1xcbiAgICAgICAgZ2xfRnJhZ0NvbG9yLnIgKz0gKG1bMl0gKiBjLmIpO1xcbiAgICAgICAgZ2xfRnJhZ0NvbG9yLnIgKz0gKG1bM10gKiBjLmEpO1xcbiAgICAgICAgZ2xfRnJhZ0NvbG9yLnIgKz0gbVs0XTtcXG5cXG4gICAgZ2xfRnJhZ0NvbG9yLmcgPSAobVs1XSAqIGMucik7XFxuICAgICAgICBnbF9GcmFnQ29sb3IuZyArPSAobVs2XSAqIGMuZyk7XFxuICAgICAgICBnbF9GcmFnQ29sb3IuZyArPSAobVs3XSAqIGMuYik7XFxuICAgICAgICBnbF9GcmFnQ29sb3IuZyArPSAobVs4XSAqIGMuYSk7XFxuICAgICAgICBnbF9GcmFnQ29sb3IuZyArPSBtWzldO1xcblxcbiAgICAgZ2xfRnJhZ0NvbG9yLmIgPSAobVsxMF0gKiBjLnIpO1xcbiAgICAgICAgZ2xfRnJhZ0NvbG9yLmIgKz0gKG1bMTFdICogYy5nKTtcXG4gICAgICAgIGdsX0ZyYWdDb2xvci5iICs9IChtWzEyXSAqIGMuYik7XFxuICAgICAgICBnbF9GcmFnQ29sb3IuYiArPSAobVsxM10gKiBjLmEpO1xcbiAgICAgICAgZ2xfRnJhZ0NvbG9yLmIgKz0gbVsxNF07XFxuXFxuICAgICBnbF9GcmFnQ29sb3IuYSA9IChtWzE1XSAqIGMucik7XFxuICAgICAgICBnbF9GcmFnQ29sb3IuYSArPSAobVsxNl0gKiBjLmcpO1xcbiAgICAgICAgZ2xfRnJhZ0NvbG9yLmEgKz0gKG1bMTddICogYy5iKTtcXG4gICAgICAgIGdsX0ZyYWdDb2xvci5hICs9IChtWzE4XSAqIGMuYSk7XFxuICAgICAgICBnbF9GcmFnQ29sb3IuYSArPSBtWzE5XTtcXG5cXG59XFxuXCIsXG4gICAgICAgIC8vIGN1c3RvbSB1bmlmb3Jtc1xuICAgICAgICB7XG4gICAgICAgICAgICBtOiB7XG4gICAgICAgICAgICAgICAgdHlwZTogJzFmdicsIHZhbHVlOiBbXG4gICAgICAgICAgICAgICAgICAgIDEsIDAsIDAsIDAsIDAsXG4gICAgICAgICAgICAgICAgICAgIDAsIDEsIDAsIDAsIDAsXG4gICAgICAgICAgICAgICAgICAgIDAsIDAsIDEsIDAsIDAsXG4gICAgICAgICAgICAgICAgICAgIDAsIDAsIDAsIDEsIDBcbiAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICApO1xufVxuXG5Db2xvck1hdHJpeEZpbHRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuQWJzdHJhY3RGaWx0ZXIucHJvdG90eXBlKTtcbkNvbG9yTWF0cml4RmlsdGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IENvbG9yTWF0cml4RmlsdGVyO1xubW9kdWxlLmV4cG9ydHMgPSBDb2xvck1hdHJpeEZpbHRlcjtcblxuXG4vKipcbiAqIFRyYW5zZm9ybXMgY3VycmVudCBtYXRyaXggYW5kIHNldCB0aGUgbmV3IG9uZVxuICpcbiAqIEBwYXJhbSBtYXRyaXgge251bWJlcltdfSAobWF0IDV4NClcbiAqIEBwYXJhbSBtdWx0aXBseSB7Ym9vbGVhbn0gaWYgdHJ1ZSwgY3VycmVudCBtYXRyaXggYW5kIG1hdHJpeCBhcmUgbXVsdGlwbGllZC4gSWYgZmFsc2UsIGp1c3Qgc2V0IHRoZSBjdXJyZW50IG1hdHJpeCB3aXRoIEBwYXJhbSBtYXRyaXhcbiAqL1xuQ29sb3JNYXRyaXhGaWx0ZXIucHJvdG90eXBlLl9sb2FkTWF0cml4ID0gZnVuY3Rpb24gKG1hdHJpeCwgbXVsdGlwbHkpXG57XG4gICAgbXVsdGlwbHkgPSAhIW11bHRpcGx5O1xuXG4gICAgdmFyIG5ld01hdHJpeCA9IG1hdHJpeDtcblxuICAgIGlmIChtdWx0aXBseSkge1xuICAgICAgICB0aGlzLl9tdWx0aXBseShuZXdNYXRyaXgsIHRoaXMudW5pZm9ybXMubS52YWx1ZSwgbWF0cml4KTtcbiAgICAgICAgbmV3TWF0cml4ID0gdGhpcy5fY29sb3JNYXRyaXgobmV3TWF0cml4KTtcbiAgICB9XG5cbiAgICAvLyBzZXQgdGhlIG5ldyBtYXRyaXhcbiAgICB0aGlzLnVuaWZvcm1zLm0udmFsdWUgPSBuZXdNYXRyaXg7XG59O1xuXG4vKipcbiAqIE11bHRpcGxpZXMgdHdvIG1hdDUnc1xuICpcbiAqIEBwYXJhbSBvdXQge251bWJlcltdfSAobWF0IDV4NCkgdGhlIHJlY2VpdmluZyBtYXRyaXhcbiAqIEBwYXJhbSBhIHtudW1iZXJbXX0gKG1hdCA1eDQpIHRoZSBmaXJzdCBvcGVyYW5kXG4gKiBAcGFyYW0gYiB7bnVtYmVyW119IChtYXQgNXg0KSB0aGUgc2Vjb25kIG9wZXJhbmRcbiAqIEByZXR1cm5zIG91dCB7bnVtYmVyW119IChtYXQgNXg0KVxuICovXG5Db2xvck1hdHJpeEZpbHRlci5wcm90b3R5cGUuX211bHRpcGx5ID0gZnVuY3Rpb24gKG91dCwgYSwgYilcbntcblxuICAgIC8vIFJlZCBDaGFubmVsXG4gICAgb3V0WzBdID0gKGFbMF0gKiBiWzBdKSArIChhWzFdICogYls1XSkgKyAoYVsyXSAqIGJbMTBdKSArIChhWzNdICogYlsxNV0pO1xuICAgIG91dFsxXSA9IChhWzBdICogYlsxXSkgKyAoYVsxXSAqIGJbNl0pICsgKGFbMl0gKiBiWzExXSkgKyAoYVszXSAqIGJbMTZdKTtcbiAgICBvdXRbMl0gPSAoYVswXSAqIGJbMl0pICsgKGFbMV0gKiBiWzddKSArIChhWzJdICogYlsxMl0pICsgKGFbM10gKiBiWzE3XSk7XG4gICAgb3V0WzNdID0gKGFbMF0gKiBiWzNdKSArIChhWzFdICogYls4XSkgKyAoYVsyXSAqIGJbMTNdKSArIChhWzNdICogYlsxOF0pO1xuICAgIG91dFs0XSA9IChhWzBdICogYls0XSkgKyAoYVsxXSAqIGJbOV0pICsgKGFbMl0gKiBiWzE0XSkgKyAoYVszXSAqIGJbMTldKTtcblxuICAgIC8vIEdyZWVuIENoYW5uZWxcbiAgICBvdXRbNV0gPSAoYVs1XSAqIGJbMF0pICsgKGFbNl0gKiBiWzVdKSArIChhWzddICogYlsxMF0pICsgKGFbOF0gKiBiWzE1XSk7XG4gICAgb3V0WzZdID0gKGFbNV0gKiBiWzFdKSArIChhWzZdICogYls2XSkgKyAoYVs3XSAqIGJbMTFdKSArIChhWzhdICogYlsxNl0pO1xuICAgIG91dFs3XSA9IChhWzVdICogYlsyXSkgKyAoYVs2XSAqIGJbN10pICsgKGFbN10gKiBiWzEyXSkgKyAoYVs4XSAqIGJbMTddKTtcbiAgICBvdXRbOF0gPSAoYVs1XSAqIGJbM10pICsgKGFbNl0gKiBiWzhdKSArIChhWzddICogYlsxM10pICsgKGFbOF0gKiBiWzE4XSk7XG4gICAgb3V0WzldID0gKGFbNV0gKiBiWzRdKSArIChhWzZdICogYls5XSkgKyAoYVs3XSAqIGJbMTRdKSArIChhWzhdICogYlsxOV0pO1xuXG4gICAgLy8gQmx1ZSBDaGFubmVsXG4gICAgb3V0WzEwXSA9IChhWzEwXSAqIGJbMF0pICsgKGFbMTFdICogYls1XSkgKyAoYVsxMl0gKiBiWzEwXSkgKyAoYVsxM10gKiBiWzE1XSk7XG4gICAgb3V0WzExXSA9IChhWzEwXSAqIGJbMV0pICsgKGFbMTFdICogYls2XSkgKyAoYVsxMl0gKiBiWzExXSkgKyAoYVsxM10gKiBiWzE2XSk7XG4gICAgb3V0WzEyXSA9IChhWzEwXSAqIGJbMl0pICsgKGFbMTFdICogYls3XSkgKyAoYVsxMl0gKiBiWzEyXSkgKyAoYVsxM10gKiBiWzE3XSk7XG4gICAgb3V0WzEzXSA9IChhWzEwXSAqIGJbM10pICsgKGFbMTFdICogYls4XSkgKyAoYVsxMl0gKiBiWzEzXSkgKyAoYVsxM10gKiBiWzE4XSk7XG4gICAgb3V0WzE0XSA9IChhWzEwXSAqIGJbNF0pICsgKGFbMTFdICogYls5XSkgKyAoYVsxMl0gKiBiWzE0XSkgKyAoYVsxM10gKiBiWzE5XSk7XG5cbiAgICAvLyBBbHBoYSBDaGFubmVsXG4gICAgb3V0WzE1XSA9IChhWzE1XSAqIGJbMF0pICsgKGFbMTZdICogYls1XSkgKyAoYVsxN10gKiBiWzEwXSkgKyAoYVsxOF0gKiBiWzE1XSk7XG4gICAgb3V0WzE2XSA9IChhWzE1XSAqIGJbMV0pICsgKGFbMTZdICogYls2XSkgKyAoYVsxN10gKiBiWzExXSkgKyAoYVsxOF0gKiBiWzE2XSk7XG4gICAgb3V0WzE3XSA9IChhWzE1XSAqIGJbMl0pICsgKGFbMTZdICogYls3XSkgKyAoYVsxN10gKiBiWzEyXSkgKyAoYVsxOF0gKiBiWzE3XSk7XG4gICAgb3V0WzE4XSA9IChhWzE1XSAqIGJbM10pICsgKGFbMTZdICogYls4XSkgKyAoYVsxN10gKiBiWzEzXSkgKyAoYVsxOF0gKiBiWzE4XSk7XG4gICAgb3V0WzE5XSA9IChhWzE1XSAqIGJbNF0pICsgKGFbMTZdICogYls5XSkgKyAoYVsxN10gKiBiWzE0XSkgKyAoYVsxOF0gKiBiWzE5XSk7XG5cbiAgICByZXR1cm4gb3V0O1xufTtcblxuLyoqXG4gKiBDcmVhdGUgYSBGbG9hdDMyIEFycmF5IGFuZCBub3JtYWxpemUgdGhlIG9mZnNldCBjb21wb25lbnQgdG8gMC0xXG4gKlxuICogQHBhcmFtIG1hdHJpeCB7bnVtYmVyW119IChtYXQgNXg0KVxuICogQHJldHVybiBtIHtudW1iZXJbXX0gKG1hdCA1eDQpIHdpdGggYWxsIHZhbHVlcyBiZXR3ZWVuIDAtMVxuICovXG5Db2xvck1hdHJpeEZpbHRlci5wcm90b3R5cGUuX2NvbG9yTWF0cml4ID0gZnVuY3Rpb24gKG1hdHJpeClcbntcbiAgICAvLyBDcmVhdGUgYSBGbG9hdDMyIEFycmF5IGFuZCBub3JtYWxpemUgdGhlIG9mZnNldCBjb21wb25lbnQgdG8gMC0xXG4gICAgdmFyIG0gPSBuZXcgRmxvYXQzMkFycmF5KG1hdHJpeCk7XG4gICAgbVs0XSAvPSAyNTU7XG4gICAgbVs5XSAvPSAyNTU7XG4gICAgbVsxNF0gLz0gMjU1O1xuICAgIG1bMTldIC89IDI1NTtcblxuICAgIHJldHVybiBtO1xufTtcblxuLyoqXG4gKiBBZGp1c3RzIGJyaWdodG5lc3NcbiAqXG4gKiBAcGFyYW0gYiB7bnVtYmVyfSB2YWx1ZSBvZiB0aGUgYnJpZ3RobmVzcyAoMCBpcyBibGFjaylcbiAqIEBwYXJhbSBtdWx0aXBseSB7Ym9vbGVhbn0gcmVmZXIgdG8gLl9sb2FkTWF0cml4KCkgbWV0aG9kXG4gKi9cbkNvbG9yTWF0cml4RmlsdGVyLnByb3RvdHlwZS5icmlnaHRuZXNzID0gZnVuY3Rpb24gKGIsIG11bHRpcGx5KVxue1xuICAgIHZhciBtYXRyaXggPSBbXG4gICAgICAgIGIsIDAsIDAsIDAsIDAsXG4gICAgICAgIDAsIGIsIDAsIDAsIDAsXG4gICAgICAgIDAsIDAsIGIsIDAsIDAsXG4gICAgICAgIDAsIDAsIDAsIDEsIDBcbiAgICBdO1xuXG4gICAgdGhpcy5fbG9hZE1hdHJpeChtYXRyaXgsIG11bHRpcGx5KTtcbn07XG5cbi8qKlxuICogU2V0IHRoZSBtYXRyaWNlcyBpbiBncmV5IHNjYWxlc1xuICpcbiAqIEBwYXJhbSBzY2FsZSB7bnVtYmVyfSB2YWx1ZSBvZiB0aGUgZ3JleSAoMCBpcyBibGFjaylcbiAqIEBwYXJhbSBtdWx0aXBseSB7Ym9vbGVhbn0gcmVmZXIgdG8gLl9sb2FkTWF0cml4KCkgbWV0aG9kXG4gKi9cbkNvbG9yTWF0cml4RmlsdGVyLnByb3RvdHlwZS5ncmV5c2NhbGUgPSBmdW5jdGlvbiAoc2NhbGUsIG11bHRpcGx5KVxue1xuICAgIHZhciBtYXRyaXggPSBbXG4gICAgICAgIHNjYWxlLCBzY2FsZSwgc2NhbGUsIDAsIDAsXG4gICAgICAgIHNjYWxlLCBzY2FsZSwgc2NhbGUsIDAsIDAsXG4gICAgICAgIHNjYWxlLCBzY2FsZSwgc2NhbGUsIDAsIDAsXG4gICAgICAgIDAsIDAsIDAsIDEsIDBcbiAgICBdO1xuXG4gICAgdGhpcy5fbG9hZE1hdHJpeChtYXRyaXgsIG11bHRpcGx5KTtcbn07XG4vL0FtZXJpY2FuaXplZCBhbGlhc1xuQ29sb3JNYXRyaXhGaWx0ZXIucHJvdG90eXBlLmdyYXlzY2FsZSA9IENvbG9yTWF0cml4RmlsdGVyLnByb3RvdHlwZS5ncmV5c2NhbGU7XG5cbi8qKlxuICogU2V0IHRoZSBibGFjayBhbmQgd2hpdGUgbWF0cmljZVxuICogTXVsdGlwbHkgdGhlIGN1cnJlbnQgbWF0cml4XG4gKlxuICogQHBhcmFtIG11bHRpcGx5IHtib29sZWFufSByZWZlciB0byAuX2xvYWRNYXRyaXgoKSBtZXRob2RcbiAqL1xuQ29sb3JNYXRyaXhGaWx0ZXIucHJvdG90eXBlLmJsYWNrQW5kV2hpdGUgPSBmdW5jdGlvbiAobXVsdGlwbHkpXG57XG4gICAgdmFyIG1hdHJpeCA9IFtcbiAgICAgICAgMC4zLCAwLjYsIDAuMSwgMCwgMCxcbiAgICAgICAgMC4zLCAwLjYsIDAuMSwgMCwgMCxcbiAgICAgICAgMC4zLCAwLjYsIDAuMSwgMCwgMCxcbiAgICAgICAgMCwgMCwgMCwgMSwgMFxuICAgIF07XG5cbiAgICB0aGlzLl9sb2FkTWF0cml4KG1hdHJpeCwgbXVsdGlwbHkpO1xufTtcblxuLyoqXG4gKiBTZXQgdGhlIGh1ZSBwcm9wZXJ0eSBvZiB0aGUgY29sb3JcbiAqXG4gKiBAcGFyYW0gcm90YXRpb24ge251bWJlcn0gaW4gZGVncmVlc1xuICogQHBhcmFtIG11bHRpcGx5IHtib29sZWFufSByZWZlciB0byAuX2xvYWRNYXRyaXgoKSBtZXRob2RcbiAqL1xuQ29sb3JNYXRyaXhGaWx0ZXIucHJvdG90eXBlLmh1ZSA9IGZ1bmN0aW9uIChyb3RhdGlvbiwgbXVsdGlwbHkpXG57XG4gICAgcm90YXRpb24gPSAocm90YXRpb24gfHwgMCkgLyAxODAgKiBNYXRoLlBJO1xuICAgIHZhciBjb3MgPSBNYXRoLmNvcyhyb3RhdGlvbiksXG4gICAgICAgIHNpbiA9IE1hdGguc2luKHJvdGF0aW9uKTtcblxuICAgIC8vIGx1bWluYW5jZVJlZCwgbHVtaW5hbmNlR3JlZW4sIGx1bWluYW5jZUJsdWVcbiAgICB2YXIgbHVtUiA9IDAuMjEzLCAvLyBvciAwLjMwODZcbiAgICAgICAgbHVtRyA9IDAuNzE1LCAvLyBvciAwLjYwOTRcbiAgICAgICAgbHVtQiA9IDAuMDcyOyAvLyBvciAwLjA4MjBcblxuICAgIHZhciBtYXRyaXggPSBbXG4gICAgICAgIGx1bVIgKyBjb3MgKiAoMSAtIGx1bVIpICsgc2luICogKC1sdW1SKSwgbHVtRyArIGNvcyAqICgtbHVtRykgKyBzaW4gKiAoLWx1bUcpLCBsdW1CICsgY29zICogKC1sdW1CKSArIHNpbiAqICgxIC0gbHVtQiksIDAsIDAsXG4gICAgICAgIGx1bVIgKyBjb3MgKiAoLWx1bVIpICsgc2luICogKDAuMTQzKSwgbHVtRyArIGNvcyAqICgxIC0gbHVtRykgKyBzaW4gKiAoMC4xNDApLCBsdW1CICsgY29zICogKC1sdW1CKSArIHNpbiAqICgtMC4yODMpLCAwLCAwLFxuICAgICAgICBsdW1SICsgY29zICogKC1sdW1SKSArIHNpbiAqICgtKDEgLSBsdW1SKSksIGx1bUcgKyBjb3MgKiAoLWx1bUcpICsgc2luICogKGx1bUcpLCBsdW1CICsgY29zICogKDEgLSBsdW1CKSArIHNpbiAqIChsdW1CKSwgMCwgMCxcbiAgICAgICAgMCwgMCwgMCwgMSwgMFxuICAgIF07XG5cbiAgICB0aGlzLl9sb2FkTWF0cml4KG1hdHJpeCwgbXVsdGlwbHkpO1xufTtcblxuXG4vKipcbiAqIFNldCB0aGUgY29udHJhc3QgbWF0cml4LCBpbmNyZWFzZSB0aGUgc2VwYXJhdGlvbiBiZXR3ZWVuIGRhcmsgYW5kIGJyaWdodFxuICogSW5jcmVhc2UgY29udHJhc3QgOiBzaGFkb3dzIGRhcmtlciBhbmQgaGlnaGxpZ2h0cyBicmlnaHRlclxuICogRGVjcmVhc2UgY29udHJhc3QgOiBicmluZyB0aGUgc2hhZG93cyB1cCBhbmQgdGhlIGhpZ2hsaWdodHMgZG93blxuICpcbiAqIEBwYXJhbSBhbW91bnQge251bWJlcn0gdmFsdWUgb2YgdGhlIGNvbnRyYXN0XG4gKiBAcGFyYW0gbXVsdGlwbHkge2Jvb2xlYW59IHJlZmVyIHRvIC5fbG9hZE1hdHJpeCgpIG1ldGhvZFxuICovXG5Db2xvck1hdHJpeEZpbHRlci5wcm90b3R5cGUuY29udHJhc3QgPSBmdW5jdGlvbiAoYW1vdW50LCBtdWx0aXBseSlcbntcbiAgICB2YXIgdiA9IChhbW91bnQgfHwgMCkgKyAxO1xuICAgIHZhciBvID0gLTEyOCAqICh2IC0gMSk7XG5cbiAgICB2YXIgbWF0cml4ID0gW1xuICAgICAgICB2LCAwLCAwLCAwLCBvLFxuICAgICAgICAwLCB2LCAwLCAwLCBvLFxuICAgICAgICAwLCAwLCB2LCAwLCBvLFxuICAgICAgICAwLCAwLCAwLCAxLCAwXG4gICAgXTtcblxuICAgIHRoaXMuX2xvYWRNYXRyaXgobWF0cml4LCBtdWx0aXBseSk7XG59O1xuXG4vKipcbiAqIFNldCB0aGUgc2F0dXJhdGlvbiBtYXRyaXgsIGluY3JlYXNlIHRoZSBzZXBhcmF0aW9uIGJldHdlZW4gY29sb3JzXG4gKiBJbmNyZWFzZSBzYXR1cmF0aW9uIDogaW5jcmVhc2UgY29udHJhc3QsIGJyaWdodG5lc3MsIGFuZCBzaGFycG5lc3NcbiAqXG4gKiBAcGFyYW0gYW1vdW50IHtudW1iZXJ9XG4gKiBAcGFyYW0gbXVsdGlwbHkge2Jvb2xlYW59IHJlZmVyIHRvIC5fbG9hZE1hdHJpeCgpIG1ldGhvZFxuICovXG5Db2xvck1hdHJpeEZpbHRlci5wcm90b3R5cGUuc2F0dXJhdGUgPSBmdW5jdGlvbiAoYW1vdW50LCBtdWx0aXBseSlcbntcbiAgICB2YXIgeCA9IChhbW91bnQgfHwgMCkgKiAyIC8gMyArIDE7XG4gICAgdmFyIHkgPSAoKHggLSAxKSAqIC0wLjUpO1xuXG4gICAgdmFyIG1hdHJpeCA9IFtcbiAgICAgICAgeCwgeSwgeSwgMCwgMCxcbiAgICAgICAgeSwgeCwgeSwgMCwgMCxcbiAgICAgICAgeSwgeSwgeCwgMCwgMCxcbiAgICAgICAgMCwgMCwgMCwgMSwgMFxuICAgIF07XG5cbiAgICB0aGlzLl9sb2FkTWF0cml4KG1hdHJpeCwgbXVsdGlwbHkpO1xufTtcblxuLyoqXG4gKiBEZXNhdHVyYXRlIGltYWdlIChyZW1vdmUgY29sb3IpXG4gKlxuICogQ2FsbCB0aGUgc2F0dXJhdGUgZnVuY3Rpb25cbiAqXG4gKiBAcGFyYW0gbXVsdGlwbHkge2Jvb2xlYW59IHJlZmVyIHRvIC5fbG9hZE1hdHJpeCgpIG1ldGhvZFxuICovXG5Db2xvck1hdHJpeEZpbHRlci5wcm90b3R5cGUuZGVzYXR1cmF0ZSA9IGZ1bmN0aW9uIChtdWx0aXBseSkgLy8ganNoaW50IHVudXNlZDpmYWxzZVxue1xuICAgIHRoaXMuc2F0dXJhdGUoLTEpO1xufTtcblxuLyoqXG4gKiBOZWdhdGl2ZSBpbWFnZSAoaW52ZXJzZSBvZiBjbGFzc2ljIHJnYiBtYXRyaXgpXG4gKlxuICogQHBhcmFtIG11bHRpcGx5IHtib29sZWFufSByZWZlciB0byAuX2xvYWRNYXRyaXgoKSBtZXRob2RcbiAqL1xuQ29sb3JNYXRyaXhGaWx0ZXIucHJvdG90eXBlLm5lZ2F0aXZlID0gZnVuY3Rpb24gKG11bHRpcGx5KVxue1xuICAgIHZhciBtYXRyaXggPSBbXG4gICAgICAgIDAsIDEsIDEsIDAsIDAsXG4gICAgICAgIDEsIDAsIDEsIDAsIDAsXG4gICAgICAgIDEsIDEsIDAsIDAsIDAsXG4gICAgICAgIDAsIDAsIDAsIDEsIDBcbiAgICBdO1xuXG4gICAgdGhpcy5fbG9hZE1hdHJpeChtYXRyaXgsIG11bHRpcGx5KTtcbn07XG5cbi8qKlxuICogU2VwaWEgaW1hZ2VcbiAqXG4gKiBAcGFyYW0gbXVsdGlwbHkge2Jvb2xlYW59IHJlZmVyIHRvIC5fbG9hZE1hdHJpeCgpIG1ldGhvZFxuICovXG5Db2xvck1hdHJpeEZpbHRlci5wcm90b3R5cGUuc2VwaWEgPSBmdW5jdGlvbiAobXVsdGlwbHkpXG57XG4gICAgdmFyIG1hdHJpeCA9IFtcbiAgICAgICAgMC4zOTMsIDAuNzY4OTk5OSwgMC4xODg5OTk5OSwgMCwgMCxcbiAgICAgICAgMC4zNDksIDAuNjg1OTk5OSwgMC4xNjc5OTk5OSwgMCwgMCxcbiAgICAgICAgMC4yNzIsIDAuNTMzOTk5OSwgMC4xMzA5OTk5OSwgMCwgMCxcbiAgICAgICAgMCwgMCwgMCwgMSwgMFxuICAgIF07XG5cbiAgICB0aGlzLl9sb2FkTWF0cml4KG1hdHJpeCwgbXVsdGlwbHkpO1xufTtcblxuLyoqXG4gKiBDb2xvciBtb3Rpb24gcGljdHVyZSBwcm9jZXNzIGludmVudGVkIGluIDE5MTYgKHRoYW5rcyBEb21pbmljIFN6YWJsZXdza2kpXG4gKlxuICogQHBhcmFtIG11bHRpcGx5IHtib29sZWFufSByZWZlciB0byAuX2xvYWRNYXRyaXgoKSBtZXRob2RcbiAqL1xuQ29sb3JNYXRyaXhGaWx0ZXIucHJvdG90eXBlLnRlY2huaWNvbG9yID0gZnVuY3Rpb24gKG11bHRpcGx5KVxue1xuICAgIHZhciBtYXRyaXggPSBbXG4gICAgICAgIDEuOTEyNTI3Nzg5MTQ1NjA4MywgLTAuODU0NTM0NDk3Njk1MTY0NSwgLTAuMDkxNTU1MDg0ODI3NTU1ODUsIDAsIDExLjc5MzYwMzQzNDM3NzMzNyxcbiAgICAgICAgLTAuMzA4NzgzMzM4NTkyODA5NywgMS43NjU4OTA4NTU1NDU4NDI4LCAtMC4xMDYwMTc0MzA3NDcyMjI0NSwgMCwgLTcwLjM1MjA1MTYxNDYxMzk4LFxuICAgICAgICAtMC4yMzExMDMzNzc1NDg2MTYsIC0wLjc1MDE4OTkxOTc0NDAyMTIsIDEuODQ3NTk3ODE2MTA4MTg5LCAwLCAzMC45NTA5NDA4Njk0OTExMzgsXG4gICAgICAgIDAsIDAsIDAsIDEsIDBcbiAgICBdO1xuXG4gICAgdGhpcy5fbG9hZE1hdHJpeChtYXRyaXgsIG11bHRpcGx5KTtcbn07XG5cbi8qKlxuICogUG9sYXJvaWQgZmlsdGVyXG4gKlxuICogQHBhcmFtIG11bHRpcGx5IHtib29sZWFufSByZWZlciB0byAuX2xvYWRNYXRyaXgoKSBtZXRob2RcbiAqL1xuQ29sb3JNYXRyaXhGaWx0ZXIucHJvdG90eXBlLnBvbGFyb2lkID0gZnVuY3Rpb24gKG11bHRpcGx5KVxue1xuICAgIHZhciBtYXRyaXggPSBbXG4gICAgICAgIDEuNDM4LCAtMC4wNjIsIC0wLjA2MiwgMCwgMCxcbiAgICAgICAgLTAuMTIyLCAxLjM3OCwgLTAuMTIyLCAwLCAwLFxuICAgICAgICAtMC4wMTYsIC0wLjAxNiwgMS40ODMsIDAsIDAsXG4gICAgICAgIDAsIDAsIDAsIDEsIDBcbiAgICBdO1xuXG4gICAgdGhpcy5fbG9hZE1hdHJpeChtYXRyaXgsIG11bHRpcGx5KTtcbn07XG5cbi8qKlxuICogRmlsdGVyIHdobyB0cmFuc2Zvcm1zIDogUmVkIC0+IEJsdWUgYW5kIEJsdWUgLT4gUmVkXG4gKlxuICogQHBhcmFtIG11bHRpcGx5IHtib29sZWFufSByZWZlciB0byAuX2xvYWRNYXRyaXgoKSBtZXRob2RcbiAqL1xuQ29sb3JNYXRyaXhGaWx0ZXIucHJvdG90eXBlLnRvQkdSID0gZnVuY3Rpb24gKG11bHRpcGx5KVxue1xuICAgIHZhciBtYXRyaXggPSBbXG4gICAgICAgIDAsIDAsIDEsIDAsIDAsXG4gICAgICAgIDAsIDEsIDAsIDAsIDAsXG4gICAgICAgIDEsIDAsIDAsIDAsIDAsXG4gICAgICAgIDAsIDAsIDAsIDEsIDBcbiAgICBdO1xuXG4gICAgdGhpcy5fbG9hZE1hdHJpeChtYXRyaXgsIG11bHRpcGx5KTtcbn07XG5cbi8qKlxuICogQ29sb3IgcmV2ZXJzYWwgZmlsbSBpbnRyb2R1Y2VkIGJ5IEVhc3RtYW4gS29kYWsgaW4gMTkzNS4gKHRoYW5rcyBEb21pbmljIFN6YWJsZXdza2kpXG4gKlxuICogQHBhcmFtIG11bHRpcGx5IHtib29sZWFufSByZWZlciB0byAuX2xvYWRNYXRyaXgoKSBtZXRob2RcbiAqL1xuQ29sb3JNYXRyaXhGaWx0ZXIucHJvdG90eXBlLmtvZGFjaHJvbWUgPSBmdW5jdGlvbiAobXVsdGlwbHkpXG57XG4gICAgdmFyIG1hdHJpeCA9IFtcbiAgICAgICAgMS4xMjg1NTgyMzk2NTkzNTI1LCAtMC4zOTY3MzgyMjgzNjAxMzQ4LCAtMC4wMzk5MjU1OTE3MjkyMTc5MywgMCwgNjMuNzI5NTg3NjIxOTY1MDIsXG4gICAgICAgIC0wLjE2NDA0MzM5OTYyMjQ0NjE2LCAxLjA4MzUyNTE1NjYyOTEzMDQsIC0wLjA1NDk4ODA1MTE1NjMzMTMyLCAwLCAyNC43MzI0MDc4OTY3MDYyMDMsXG4gICAgICAgIC0wLjE2Nzg2MDEwNzA2MTU1NzYzLCAtMC41NjAzNDE2Mjc3Njk1MjQ4LCAxLjYwMTQ4NTA3NjE5NjQ5NDMsIDAsIDM1LjYyOTgyODA3NDYwOTQ2LFxuICAgICAgICAwLCAwLCAwLCAxLCAwXG4gICAgXTtcblxuICAgIHRoaXMuX2xvYWRNYXRyaXgobWF0cml4LCBtdWx0aXBseSk7XG59O1xuXG4vKipcbiAqIEJyb3duIGRlbGljaW91cyBicm93bmkgZmlsdGVyICh0aGFua3MgRG9taW5pYyBTemFibGV3c2tpKVxuICpcbiAqIEBwYXJhbSBtdWx0aXBseSB7Ym9vbGVhbn0gcmVmZXIgdG8gLl9sb2FkTWF0cml4KCkgbWV0aG9kXG4gKi9cbkNvbG9yTWF0cml4RmlsdGVyLnByb3RvdHlwZS5icm93bmkgPSBmdW5jdGlvbiAobXVsdGlwbHkpXG57XG4gICAgdmFyIG1hdHJpeCA9IFtcbiAgICAgICAgMC41OTk3MDIzNDk4MTU5NzE1LCAwLjM0NTUzMjQzMDQ4MzkxMjYzLCAtMC4yNzA4Mjk4Njc0NTM4MDQyLCAwLCA0Ny40MzE5Mjg1NTYwMDg3MyxcbiAgICAgICAgLTAuMDM3NzAzMjQ5ODM3NzgzMTU3LCAwLjg2MDk1Nzc1ODc5OTI2NDEsIDAuMTUwNTk1NTIzODg0NTk5MTMsIDAsIC0zNi45Njg0MTQ5ODMxOTEyNyxcbiAgICAgICAgMC4yNDExMzYzNTEyODE1MzMzNSwgLTAuMDc0NDEwMzc5MDg0MjI0OTIsIDAuNDQ5NzIxODIwNjQ4NzcxNTMsIDAsIC03LjU2MjA3NTI3NzU5MTI4MyxcbiAgICAgICAgMCwgMCwgMCwgMSwgMFxuICAgIF07XG5cbiAgICB0aGlzLl9sb2FkTWF0cml4KG1hdHJpeCwgbXVsdGlwbHkpO1xufTtcblxuLypcbiAqIFZpbnRhZ2UgZmlsdGVyICh0aGFua3MgRG9taW5pYyBTemFibGV3c2tpKVxuICpcbiAqIEBwYXJhbSBtdWx0aXBseSB7Ym9vbGVhbn0gcmVmZXIgdG8gLl9sb2FkTWF0cml4KCkgbWV0aG9kXG4gKi9cbkNvbG9yTWF0cml4RmlsdGVyLnByb3RvdHlwZS52aW50YWdlID0gZnVuY3Rpb24gKG11bHRpcGx5KVxue1xuICAgIHZhciBtYXRyaXggPSBbXG4gICAgICAgIDAuNjI3OTM0NTYzNTYwNTk5NCwgMC4zMjAyMTgzNDIwODE5MzY3LCAtMC4wMzk2NTQwODIxMTMxMjQ1MywgMCwgOS42NTEyODU4MzUyOTQxMjMsXG4gICAgICAgIDAuMDI1NzgzOTc3MDQ4MDg4NjgsIDAuNjQ0MTE4ODY0NDM3NDc3MSwgMC4wMzI1OTEyNzYxNjE0OTI5NCwgMCwgNy40NjI4MjkxNzY0NzA1OTEsXG4gICAgICAgIDAuMDQ2NjA1NTU1Njc4MjcxOSwgLTAuMDg1MTIzMjk4NzI0Nzg5MSwgMC41MjQxNjQ4MDE4NzAwNDY1LCAwLCA1LjE1OTE5MDU4ODIzNTI5NixcbiAgICAgICAgMCwgMCwgMCwgMSwgMFxuICAgIF07XG5cbiAgICB0aGlzLl9sb2FkTWF0cml4KG1hdHJpeCwgbXVsdGlwbHkpO1xufTtcblxuLypcbiAqIFdlIGRvbid0IGtub3cgZXhhY3RseSB3aGF0IGl0IGRvZXMsIGtpbmQgb2YgZ3JhZGllbnQgbWFwLCBidXQgZnVubnkgdG8gcGxheSB3aXRoIVxuICpcbiAqIEBwYXJhbSBkZXNhdHVyYXRpb24ge251bWJlcn1cbiAqIEBwYXJhbSB0b25lZCB7bnVtYmVyfVxuICogQHBhcmFtIGxpZ2h0Q29sb3Ige3N0cmluZ30gKGV4YW1wbGUgOiBcIjB4RkZFNTgwXCIpXG4gKiBAcGFyYW0gZGFya0NvbG9yIHtzdHJpbmd9ICAoZXhhbXBsZSA6IFwiMHhGRkU1ODBcIilcbiAqXG4gKiBAcGFyYW0gbXVsdGlwbHkge2Jvb2xlYW59IHJlZmVyIHRvIC5fbG9hZE1hdHJpeCgpIG1ldGhvZFxuICovXG5Db2xvck1hdHJpeEZpbHRlci5wcm90b3R5cGUuY29sb3JUb25lID0gZnVuY3Rpb24gKGRlc2F0dXJhdGlvbiwgdG9uZWQsIGxpZ2h0Q29sb3IsIGRhcmtDb2xvciwgbXVsdGlwbHkpXG57XG4gICAgZGVzYXR1cmF0aW9uID0gZGVzYXR1cmF0aW9uIHx8IDAuMjtcbiAgICB0b25lZCA9IHRvbmVkIHx8IDAuMTU7XG4gICAgbGlnaHRDb2xvciA9IGxpZ2h0Q29sb3IgfHwgMHhGRkU1ODA7XG4gICAgZGFya0NvbG9yID0gZGFya0NvbG9yIHx8IDB4MzM4MDAwO1xuXG4gICAgdmFyIGxSID0gKChsaWdodENvbG9yID4+IDE2KSAmIDB4RkYpIC8gMjU1O1xuICAgIHZhciBsRyA9ICgobGlnaHRDb2xvciA+PiA4KSAmIDB4RkYpIC8gMjU1O1xuICAgIHZhciBsQiA9IChsaWdodENvbG9yICYgMHhGRikgLyAyNTU7XG5cbiAgICB2YXIgZFIgPSAoKGRhcmtDb2xvciA+PiAxNikgJiAweEZGKSAvIDI1NTtcbiAgICB2YXIgZEcgPSAoKGRhcmtDb2xvciA+PiA4KSAmIDB4RkYpIC8gMjU1O1xuICAgIHZhciBkQiA9IChkYXJrQ29sb3IgJiAweEZGKSAvIDI1NTtcblxuICAgIHZhciBtYXRyaXggPSBbXG4gICAgICAgIDAuMywgMC41OSwgMC4xMSwgMCwgMCxcbiAgICAgICAgbFIsIGxHLCBsQiwgZGVzYXR1cmF0aW9uLCAwLFxuICAgICAgICBkUiwgZEcsIGRCLCB0b25lZCwgMCxcbiAgICAgICAgbFIgLSBkUiwgbEcgLSBkRywgbEIgLSBkQiwgMCwgMFxuICAgIF07XG5cbiAgICB0aGlzLl9sb2FkTWF0cml4KG1hdHJpeCwgbXVsdGlwbHkpO1xufTtcblxuLypcbiAqIE5pZ2h0IGVmZmVjdFxuICpcbiAqIEBwYXJhbSBpbnRlbnNpdHkge251bWJlcn1cbiAqIEBwYXJhbSBtdWx0aXBseSB7Ym9vbGVhbn0gcmVmZXIgdG8gLl9sb2FkTWF0cml4KCkgbWV0aG9kXG4gKi9cbkNvbG9yTWF0cml4RmlsdGVyLnByb3RvdHlwZS5uaWdodCA9IGZ1bmN0aW9uIChpbnRlbnNpdHksIG11bHRpcGx5KVxue1xuICAgIGludGVuc2l0eSA9IGludGVuc2l0eSB8fCAwLjE7XG4gICAgdmFyIG1hdHJpeCA9IFtcbiAgICAgICAgaW50ZW5zaXR5ICogKCAtMi4wKSwgLWludGVuc2l0eSwgMCwgMCwgMCxcbiAgICAgICAgLWludGVuc2l0eSwgMCwgaW50ZW5zaXR5LCAwLCAwLFxuICAgICAgICAwLCBpbnRlbnNpdHksIGludGVuc2l0eSAqIDIuMCwgMCwgMCxcbiAgICAgICAgMCwgMCwgMCwgMSwgMFxuICAgIF07XG5cbiAgICB0aGlzLl9sb2FkTWF0cml4KG1hdHJpeCwgbXVsdGlwbHkpO1xufTtcblxuXG4vKlxuICogUHJlZGF0b3IgZWZmZWN0XG4gKlxuICogRXJhc2UgdGhlIGN1cnJlbnQgbWF0cml4IGJ5IHNldHRpbmcgYSBuZXcgaW5kZXBlbnQgb25lXG4gKlxuICogQHBhcmFtIGFtb3VudCB7bnVtYmVyfSBob3cgbXVjaCB0aGUgcHJlZGF0b3IgZmVlbHMgaGlzIGZ1dHVyZSB2aWN0aW1cbiAqIEBwYXJhbSBtdWx0aXBseSB7Ym9vbGVhbn0gcmVmZXIgdG8gLl9sb2FkTWF0cml4KCkgbWV0aG9kXG4gKi9cbkNvbG9yTWF0cml4RmlsdGVyLnByb3RvdHlwZS5wcmVkYXRvciA9IGZ1bmN0aW9uIChhbW91bnQsIG11bHRpcGx5KVxue1xuICAgIHZhciBtYXRyaXggPSBbXG4gICAgICAgIDExLjIyNDEzMDYzMDQ5MzE2NCAqIGFtb3VudCwgLTQuNzk0NDg2OTk5NTExNzE5ICogYW1vdW50LCAtMi44NzQ2MTE4NTQ1NTMyMjI3ICogYW1vdW50LCAwICogYW1vdW50LCAwLjQwMzQyNDM4MjIwOTc3NzgzICogYW1vdW50LFxuICAgICAgICAtMy42MzMwNjk3NTM2NDY4NTA2ICogYW1vdW50LCA5LjE5MzE1NzE5NjA0NDkyMiAqIGFtb3VudCwgLTIuOTUxODEwODM2NzkxOTkyICogYW1vdW50LCAwICogYW1vdW50LCAtMS4zMTYxMzUwNDg4NjYyNzIgKiBhbW91bnQsXG4gICAgICAgIC0zLjIxODQxOTc5MDI2Nzk0NDMgKiBhbW91bnQsIC00LjIzNzUwMzA1MTc1NzgxMjUgKiBhbW91bnQsIDcuNDc2NDQ4MDU5MDgyMDMxICogYW1vdW50LCAwICogYW1vdW50LCAwLjgwNDQ0NTkyMjM3NDcyNTMgKiBhbW91bnQsXG4gICAgICAgIDAsIDAsIDAsIDEsIDBcbiAgICBdO1xuXG4gICAgdGhpcy5fbG9hZE1hdHJpeChtYXRyaXgsIG11bHRpcGx5KTtcbn07XG5cbi8qXG4gKiBMU0QgZWZmZWN0XG4gKlxuICogTXVsdGlwbHkgdGhlIGN1cnJlbnQgbWF0cml4XG4gKlxuICogQHBhcmFtIGFtb3VudCB7bnVtYmVyfSBIb3cgY3JhenkgaXMgeW91ciBlZmZlY3RcbiAqIEBwYXJhbSBtdWx0aXBseSB7Ym9vbGVhbn0gcmVmZXIgdG8gLl9sb2FkTWF0cml4KCkgbWV0aG9kXG4gKi9cbkNvbG9yTWF0cml4RmlsdGVyLnByb3RvdHlwZS5sc2QgPSBmdW5jdGlvbiAobXVsdGlwbHkpXG57XG4gICAgdmFyIG1hdHJpeCA9IFtcbiAgICAgICAgMiwgLTAuNCwgMC41LCAwLCAwLFxuICAgICAgICAtMC41LCAyLCAtMC40LCAwLCAwLFxuICAgICAgICAtMC40LCAtMC41LCAzLCAwLCAwLFxuICAgICAgICAwLCAwLCAwLCAxLCAwXG4gICAgXTtcblxuICAgIHRoaXMuX2xvYWRNYXRyaXgobWF0cml4LCBtdWx0aXBseSk7XG59O1xuXG4vKlxuICogRXJhc2UgdGhlIGN1cnJlbnQgbWF0cml4IGJ5IHNldHRpbmcgdGhlIGRlZmF1bHQgb25lXG4gKlxuICovXG5Db2xvck1hdHJpeEZpbHRlci5wcm90b3R5cGUucmVzZXQgPSBmdW5jdGlvbiAoKVxue1xuICAgIHZhciBtYXRyaXggPSBbXG4gICAgICAgIDEsIDAsIDAsIDAsIDAsXG4gICAgICAgIDAsIDEsIDAsIDAsIDAsXG4gICAgICAgIDAsIDAsIDEsIDAsIDAsXG4gICAgICAgIDAsIDAsIDAsIDEsIDBcbiAgICBdO1xuXG4gICAgdGhpcy5fbG9hZE1hdHJpeChtYXRyaXgsIGZhbHNlKTtcbn07XG5cblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoQ29sb3JNYXRyaXhGaWx0ZXIucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgbWF0cml4IG9mIHRoZSBjb2xvciBtYXRyaXggZmlsdGVyXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJbXX1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLkNvbG9yTWF0cml4RmlsdGVyI1xuICAgICAqIEBkZWZhdWx0IFsxLCAwLCAwLCAwLCAwLCAwLCAxLCAwLCAwLCAwLCAwLCAwLCAxLCAwLCAwLCAwLCAwLCAwLCAxLCAwXVxuICAgICAqL1xuICAgIG1hdHJpeDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVuaWZvcm1zLm0udmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLm0udmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi8uLi9jb3JlJyk7XG4vLyBAc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9zdWJzdGFjay9icmZzL2lzc3Vlcy8yNVxuXG5cbi8qKlxuICogVGhpcyBsb3dlcnMgdGhlIGNvbG9yIGRlcHRoIG9mIHlvdXIgaW1hZ2UgYnkgdGhlIGdpdmVuIGFtb3VudCwgcHJvZHVjaW5nIGFuIGltYWdlIHdpdGggYSBzbWFsbGVyIHBhbGV0dGUuXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLkFic3RyYWN0RmlsdGVyXG4gKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzXG4gKi9cbmZ1bmN0aW9uIENvbG9yU3RlcEZpbHRlcigpXG57XG4gICAgY29yZS5BYnN0cmFjdEZpbHRlci5jYWxsKHRoaXMsXG4gICAgICAgIC8vIHZlcnRleCBzaGFkZXJcbiAgICAgICAgbnVsbCxcbiAgICAgICAgLy8gZnJhZ21lbnQgc2hhZGVyXG4gICAgICAgIFwicHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XFxuXFxudmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7XFxuXFxudW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXI7XFxudW5pZm9ybSBmbG9hdCBzdGVwO1xcblxcbnZvaWQgbWFpbih2b2lkKVxcbntcXG4gICAgdmVjNCBjb2xvciA9IHRleHR1cmUyRCh1U2FtcGxlciwgdlRleHR1cmVDb29yZCk7XFxuXFxuICAgIGNvbG9yID0gZmxvb3IoY29sb3IgKiBzdGVwKSAvIHN0ZXA7XFxuXFxuICAgIGdsX0ZyYWdDb2xvciA9IGNvbG9yO1xcbn1cXG5cIixcbiAgICAgICAgLy8gY3VzdG9tIHVuaWZvcm1zXG4gICAgICAgIHtcbiAgICAgICAgICAgIHN0ZXA6IHsgdHlwZTogJzFmJywgdmFsdWU6IDUgfVxuICAgICAgICB9XG4gICAgKTtcbn1cblxuQ29sb3JTdGVwRmlsdGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoY29yZS5BYnN0cmFjdEZpbHRlci5wcm90b3R5cGUpO1xuQ29sb3JTdGVwRmlsdGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IENvbG9yU3RlcEZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gQ29sb3JTdGVwRmlsdGVyO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhDb2xvclN0ZXBGaWx0ZXIucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogVGhlIG51bWJlciBvZiBzdGVwcyB0byByZWR1Y2UgdGhlIHBhbGV0dGUgYnkuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5Db2xvclN0ZXBGaWx0ZXIjXG4gICAgICovXG4gICAgc3RlcDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVuaWZvcm1zLnN0ZXAudmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLnN0ZXAudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi8uLi9jb3JlJyk7XG4vLyBAc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9zdWJzdGFjay9icmZzL2lzc3Vlcy8yNVxuXG5cbi8qKlxuICogVGhlIENvbnZvbHV0aW9uRmlsdGVyIGNsYXNzIGFwcGxpZXMgYSBtYXRyaXggY29udm9sdXRpb24gZmlsdGVyIGVmZmVjdC5cbiAqIEEgY29udm9sdXRpb24gY29tYmluZXMgcGl4ZWxzIGluIHRoZSBpbnB1dCBpbWFnZSB3aXRoIG5laWdoYm9yaW5nIHBpeGVscyB0byBwcm9kdWNlIGEgbmV3IGltYWdlLlxuICogQSB3aWRlIHZhcmlldHkgb2YgaW1hZ2UgZWZmZWN0cyBjYW4gYmUgYWNoaWV2ZWQgdGhyb3VnaCBjb252b2x1dGlvbnMsIGluY2x1ZGluZyBibHVycmluZywgZWRnZVxuICogZGV0ZWN0aW9uLCBzaGFycGVuaW5nLCBlbWJvc3NpbmcsIGFuZCBiZXZlbGluZy4gVGhlIG1hdHJpeCBzaG91bGQgYmUgc3BlY2lmaWVkIGFzIGEgOSBwb2ludCBBcnJheS5cbiAqIFNlZSBodHRwOi8vZG9jcy5naW1wLm9yZy9lbi9wbHVnLWluLWNvbnZtYXRyaXguaHRtbCBmb3IgbW9yZSBpbmZvLlxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5BYnN0cmFjdEZpbHRlclxuICogQG1lbWJlcm9mIFBJWEkuZmlsdGVyc1xuICogQHBhcmFtIG1hdHJpeCB7bnVtYmVyW119IEFuIGFycmF5IG9mIHZhbHVlcyB1c2VkIGZvciBtYXRyaXggdHJhbnNmb3JtYXRpb24uIFNwZWNpZmllZCBhcyBhIDkgcG9pbnQgQXJyYXkuXG4gKiBAcGFyYW0gd2lkdGgge251bWJlcn0gV2lkdGggb2YgdGhlIG9iamVjdCB5b3UgYXJlIHRyYW5zZm9ybWluZ1xuICogQHBhcmFtIGhlaWdodCB7bnVtYmVyfSBIZWlnaHQgb2YgdGhlIG9iamVjdCB5b3UgYXJlIHRyYW5zZm9ybWluZ1xuICovXG5mdW5jdGlvbiBDb252b2x1dGlvbkZpbHRlcihtYXRyaXgsIHdpZHRoLCBoZWlnaHQpXG57XG4gICAgY29yZS5BYnN0cmFjdEZpbHRlci5jYWxsKHRoaXMsXG4gICAgICAgIC8vIHZlcnRleCBzaGFkZXJcbiAgICAgICAgbnVsbCxcbiAgICAgICAgLy8gZnJhZ21lbnQgc2hhZGVyXG4gICAgICAgIFwicHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XFxuXFxudmFyeWluZyBtZWRpdW1wIHZlYzIgdlRleHR1cmVDb29yZDtcXG5cXG51bmlmb3JtIHNhbXBsZXIyRCB1U2FtcGxlcjtcXG51bmlmb3JtIHZlYzIgdGV4ZWxTaXplO1xcbnVuaWZvcm0gZmxvYXQgbWF0cml4WzldO1xcblxcbnZvaWQgbWFpbih2b2lkKVxcbntcXG4gICB2ZWM0IGMxMSA9IHRleHR1cmUyRCh1U2FtcGxlciwgdlRleHR1cmVDb29yZCAtIHRleGVsU2l6ZSk7IC8vIHRvcCBsZWZ0XFxuICAgdmVjNCBjMTIgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZlYzIodlRleHR1cmVDb29yZC54LCB2VGV4dHVyZUNvb3JkLnkgLSB0ZXhlbFNpemUueSkpOyAvLyB0b3AgY2VudGVyXFxuICAgdmVjNCBjMTMgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZlYzIodlRleHR1cmVDb29yZC54ICsgdGV4ZWxTaXplLngsIHZUZXh0dXJlQ29vcmQueSAtIHRleGVsU2l6ZS55KSk7IC8vIHRvcCByaWdodFxcblxcbiAgIHZlYzQgYzIxID0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2ZWMyKHZUZXh0dXJlQ29vcmQueCAtIHRleGVsU2l6ZS54LCB2VGV4dHVyZUNvb3JkLnkpKTsgLy8gbWlkIGxlZnRcXG4gICB2ZWM0IGMyMiA9IHRleHR1cmUyRCh1U2FtcGxlciwgdlRleHR1cmVDb29yZCk7IC8vIG1pZCBjZW50ZXJcXG4gICB2ZWM0IGMyMyA9IHRleHR1cmUyRCh1U2FtcGxlciwgdmVjMih2VGV4dHVyZUNvb3JkLnggKyB0ZXhlbFNpemUueCwgdlRleHR1cmVDb29yZC55KSk7IC8vIG1pZCByaWdodFxcblxcbiAgIHZlYzQgYzMxID0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2ZWMyKHZUZXh0dXJlQ29vcmQueCAtIHRleGVsU2l6ZS54LCB2VGV4dHVyZUNvb3JkLnkgKyB0ZXhlbFNpemUueSkpOyAvLyBib3R0b20gbGVmdFxcbiAgIHZlYzQgYzMyID0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2ZWMyKHZUZXh0dXJlQ29vcmQueCwgdlRleHR1cmVDb29yZC55ICsgdGV4ZWxTaXplLnkpKTsgLy8gYm90dG9tIGNlbnRlclxcbiAgIHZlYzQgYzMzID0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2VGV4dHVyZUNvb3JkICsgdGV4ZWxTaXplKTsgLy8gYm90dG9tIHJpZ2h0XFxuXFxuICAgZ2xfRnJhZ0NvbG9yID1cXG4gICAgICAgYzExICogbWF0cml4WzBdICsgYzEyICogbWF0cml4WzFdICsgYzEzICogbWF0cml4WzJdICtcXG4gICAgICAgYzIxICogbWF0cml4WzNdICsgYzIyICogbWF0cml4WzRdICsgYzIzICogbWF0cml4WzVdICtcXG4gICAgICAgYzMxICogbWF0cml4WzZdICsgYzMyICogbWF0cml4WzddICsgYzMzICogbWF0cml4WzhdO1xcblxcbiAgIGdsX0ZyYWdDb2xvci5hID0gYzIyLmE7XFxufVxcblwiLFxuICAgICAgICAvLyBjdXN0b20gdW5pZm9ybXNcbiAgICAgICAge1xuICAgICAgICAgICAgbWF0cml4OiAgICAgeyB0eXBlOiAnMWZ2JywgdmFsdWU6IG5ldyBGbG9hdDMyQXJyYXkobWF0cml4KSB9LFxuICAgICAgICAgICAgdGV4ZWxTaXplOiAgeyB0eXBlOiAndjInLCB2YWx1ZTogeyB4OiAxIC8gd2lkdGgsIHk6IDEgLyBoZWlnaHQgfSB9XG4gICAgICAgIH1cbiAgICApO1xufVxuXG5Db252b2x1dGlvbkZpbHRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuQWJzdHJhY3RGaWx0ZXIucHJvdG90eXBlKTtcbkNvbnZvbHV0aW9uRmlsdGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IENvbnZvbHV0aW9uRmlsdGVyO1xubW9kdWxlLmV4cG9ydHMgPSBDb252b2x1dGlvbkZpbHRlcjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoQ29udm9sdXRpb25GaWx0ZXIucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogQW4gYXJyYXkgb2YgdmFsdWVzIHVzZWQgZm9yIG1hdHJpeCB0cmFuc2Zvcm1hdGlvbi4gU3BlY2lmaWVkIGFzIGEgOSBwb2ludCBBcnJheS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcltdfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuQ29udm9sdXRpb25GaWx0ZXIjXG4gICAgICovXG4gICAgbWF0cml4OiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudW5pZm9ybXMubWF0cml4LnZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy5tYXRyaXgudmFsdWUgPSBuZXcgRmxvYXQzMkFycmF5KHZhbHVlKTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBXaWR0aCBvZiB0aGUgb2JqZWN0IHlvdSBhcmUgdHJhbnNmb3JtaW5nXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5Db252b2x1dGlvbkZpbHRlciNcbiAgICAgKi9cbiAgICB3aWR0aDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiAxL3RoaXMudW5pZm9ybXMudGV4ZWxTaXplLnZhbHVlLng7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLnRleGVsU2l6ZS52YWx1ZS54ID0gMS92YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBIZWlnaHQgb2YgdGhlIG9iamVjdCB5b3UgYXJlIHRyYW5zZm9ybWluZ1xuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuQ29udm9sdXRpb25GaWx0ZXIjXG4gICAgICovXG4gICAgaGVpZ2h0OiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIDEvdGhpcy51bmlmb3Jtcy50ZXhlbFNpemUudmFsdWUueTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudW5pZm9ybXMudGV4ZWxTaXplLnZhbHVlLnkgPSAxL3ZhbHVlO1xuICAgICAgICB9XG4gICAgfVxufSk7XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uLy4uL2NvcmUnKTtcbi8vIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL3N1YnN0YWNrL2JyZnMvaXNzdWVzLzI1XG5cblxuLyoqXG4gKiBBIENyb3NzIEhhdGNoIGVmZmVjdCBmaWx0ZXIuXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLkFic3RyYWN0RmlsdGVyXG4gKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzXG4gKi9cbmZ1bmN0aW9uIENyb3NzSGF0Y2hGaWx0ZXIoKVxue1xuICAgIGNvcmUuQWJzdHJhY3RGaWx0ZXIuY2FsbCh0aGlzLFxuICAgICAgICAvLyB2ZXJ0ZXggc2hhZGVyXG4gICAgICAgIG51bGwsXG4gICAgICAgIC8vIGZyYWdtZW50IHNoYWRlclxuICAgICAgICBcInByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xcblxcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xcblxcbnVuaWZvcm0gc2FtcGxlcjJEIHVTYW1wbGVyO1xcblxcbnZvaWQgbWFpbih2b2lkKVxcbntcXG4gICAgZmxvYXQgbHVtID0gbGVuZ3RoKHRleHR1cmUyRCh1U2FtcGxlciwgdlRleHR1cmVDb29yZC54eSkucmdiKTtcXG5cXG4gICAgZ2xfRnJhZ0NvbG9yID0gdmVjNCgxLjAsIDEuMCwgMS4wLCAxLjApO1xcblxcbiAgICBpZiAobHVtIDwgMS4wMClcXG4gICAge1xcbiAgICAgICAgaWYgKG1vZChnbF9GcmFnQ29vcmQueCArIGdsX0ZyYWdDb29yZC55LCAxMC4wKSA9PSAwLjApXFxuICAgICAgICB7XFxuICAgICAgICAgICAgZ2xfRnJhZ0NvbG9yID0gdmVjNCgwLjAsIDAuMCwgMC4wLCAxLjApO1xcbiAgICAgICAgfVxcbiAgICB9XFxuXFxuICAgIGlmIChsdW0gPCAwLjc1KVxcbiAgICB7XFxuICAgICAgICBpZiAobW9kKGdsX0ZyYWdDb29yZC54IC0gZ2xfRnJhZ0Nvb3JkLnksIDEwLjApID09IDAuMClcXG4gICAgICAgIHtcXG4gICAgICAgICAgICBnbF9GcmFnQ29sb3IgPSB2ZWM0KDAuMCwgMC4wLCAwLjAsIDEuMCk7XFxuICAgICAgICB9XFxuICAgIH1cXG5cXG4gICAgaWYgKGx1bSA8IDAuNTApXFxuICAgIHtcXG4gICAgICAgIGlmIChtb2QoZ2xfRnJhZ0Nvb3JkLnggKyBnbF9GcmFnQ29vcmQueSAtIDUuMCwgMTAuMCkgPT0gMC4wKVxcbiAgICAgICAge1xcbiAgICAgICAgICAgIGdsX0ZyYWdDb2xvciA9IHZlYzQoMC4wLCAwLjAsIDAuMCwgMS4wKTtcXG4gICAgICAgIH1cXG4gICAgfVxcblxcbiAgICBpZiAobHVtIDwgMC4zKVxcbiAgICB7XFxuICAgICAgICBpZiAobW9kKGdsX0ZyYWdDb29yZC54IC0gZ2xfRnJhZ0Nvb3JkLnkgLSA1LjAsIDEwLjApID09IDAuMClcXG4gICAgICAgIHtcXG4gICAgICAgICAgICBnbF9GcmFnQ29sb3IgPSB2ZWM0KDAuMCwgMC4wLCAwLjAsIDEuMCk7XFxuICAgICAgICB9XFxuICAgIH1cXG59XFxuXCJcbiAgICApO1xufVxuXG5Dcm9zc0hhdGNoRmlsdGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoY29yZS5BYnN0cmFjdEZpbHRlci5wcm90b3R5cGUpO1xuQ3Jvc3NIYXRjaEZpbHRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBDcm9zc0hhdGNoRmlsdGVyO1xubW9kdWxlLmV4cG9ydHMgPSBDcm9zc0hhdGNoRmlsdGVyO1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi8uLi9jb3JlJyk7XG4vLyBAc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9zdWJzdGFjay9icmZzL2lzc3Vlcy8yNVxuXG5cbi8qKlxuICogVGhlIERpc3BsYWNlbWVudEZpbHRlciBjbGFzcyB1c2VzIHRoZSBwaXhlbCB2YWx1ZXMgZnJvbSB0aGUgc3BlY2lmaWVkIHRleHR1cmUgKGNhbGxlZCB0aGUgZGlzcGxhY2VtZW50IG1hcCkgdG8gcGVyZm9ybSBhIGRpc3BsYWNlbWVudCBvZiBhbiBvYmplY3QuXG4gKiBZb3UgY2FuIHVzZSB0aGlzIGZpbHRlciB0byBhcHBseSBhbGwgbWFub3Igb2YgY3Jhenkgd2FycGluZyBlZmZlY3RzXG4gKiBDdXJyZW50bHkgdGhlIHIgcHJvcGVydHkgb2YgdGhlIHRleHR1cmUgaXMgdXNlZCB0byBvZmZzZXQgdGhlIHggYW5kIHRoZSBnIHByb3BlcnR5IG9mIHRoZSB0ZXh0dXJlIGlzIHVzZWQgdG8gb2Zmc2V0IHRoZSB5LlxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5BYnN0cmFjdEZpbHRlclxuICogQG1lbWJlcm9mIFBJWEkuZmlsdGVyc1xuICogQHBhcmFtIHNwcml0ZSB7UElYSS5TcHJpdGV9IHRoZSBzcHJpdGUgdXNlZCBmb3IgdGhlIGRpc3BsYWNlbWVudCBtYXAuIChtYWtlIHN1cmUgaXRzIGFkZGVkIHRvIHRoZSBzY2VuZSEpXG4gKi9cbmZ1bmN0aW9uIERpc3BsYWNlbWVudEZpbHRlcihzcHJpdGUsIHNjYWxlKVxue1xuICAgIHZhciBtYXNrTWF0cml4ID0gbmV3IGNvcmUuTWF0cml4KCk7XG4gICAgc3ByaXRlLnJlbmRlcmFibGUgPSBmYWxzZTtcblxuICAgIGNvcmUuQWJzdHJhY3RGaWx0ZXIuY2FsbCh0aGlzLFxuICAgICAgICAvLyB2ZXJ0ZXggc2hhZGVyXG4gICAgICAgIFwiYXR0cmlidXRlIHZlYzIgYVZlcnRleFBvc2l0aW9uO1xcbmF0dHJpYnV0ZSB2ZWMyIGFUZXh0dXJlQ29vcmQ7XFxuYXR0cmlidXRlIHZlYzQgYUNvbG9yO1xcblxcbnVuaWZvcm0gbWF0MyBwcm9qZWN0aW9uTWF0cml4O1xcbnVuaWZvcm0gbWF0MyBvdGhlck1hdHJpeDtcXG5cXG52YXJ5aW5nIHZlYzIgdk1hcENvb3JkO1xcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xcbnZhcnlpbmcgdmVjNCB2Q29sb3I7XFxuXFxudm9pZCBtYWluKHZvaWQpXFxue1xcbiAgIGdsX1Bvc2l0aW9uID0gdmVjNCgocHJvamVjdGlvbk1hdHJpeCAqIHZlYzMoYVZlcnRleFBvc2l0aW9uLCAxLjApKS54eSwgMC4wLCAxLjApO1xcbiAgIHZUZXh0dXJlQ29vcmQgPSBhVGV4dHVyZUNvb3JkO1xcbiAgIHZNYXBDb29yZCA9ICggb3RoZXJNYXRyaXggKiB2ZWMzKCBhVGV4dHVyZUNvb3JkLCAxLjApICApLnh5O1xcbiAgIHZDb2xvciA9IHZlYzQoYUNvbG9yLnJnYiAqIGFDb2xvci5hLCBhQ29sb3IuYSk7XFxufVxcblwiLFxuICAgICAgICAvLyBmcmFnbWVudCBzaGFkZXJcbiAgICAgICAgXCJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcXG5cXG52YXJ5aW5nIHZlYzIgdk1hcENvb3JkO1xcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xcbnZhcnlpbmcgdmVjNCB2Q29sb3I7XFxuXFxudW5pZm9ybSB2ZWMyIHNjYWxlO1xcblxcbnVuaWZvcm0gc2FtcGxlcjJEIHVTYW1wbGVyO1xcbnVuaWZvcm0gc2FtcGxlcjJEIG1hcFNhbXBsZXI7XFxuXFxudm9pZCBtYWluKHZvaWQpXFxue1xcbiAgIHZlYzQgbWFwID0gIHRleHR1cmUyRChtYXBTYW1wbGVyLCB2TWFwQ29vcmQpO1xcblxcbiAgIG1hcCAtPSAwLjU7XFxuICAgbWFwLnh5ICo9IHNjYWxlO1xcblxcbiAgIGdsX0ZyYWdDb2xvciA9IHRleHR1cmUyRCh1U2FtcGxlciwgdmVjMih2VGV4dHVyZUNvb3JkLnggKyBtYXAueCwgdlRleHR1cmVDb29yZC55ICsgbWFwLnkpKTtcXG59XFxuXCIsXG4gICAgICAgIC8vIHVuaWZvcm1zXG4gICAgICAgIHtcbiAgICAgICAgICAgIG1hcFNhbXBsZXI6ICAgICB7IHR5cGU6ICdzYW1wbGVyMkQnLCB2YWx1ZTogc3ByaXRlLnRleHR1cmUgfSxcbiAgICAgICAgICAgIG90aGVyTWF0cml4OiAgICB7IHR5cGU6ICdtYXQzJywgdmFsdWU6IG1hc2tNYXRyaXgudG9BcnJheSh0cnVlKSB9LFxuICAgICAgICAgICAgc2NhbGU6ICAgICAgICAgIHsgdHlwZTogJ3YyJywgdmFsdWU6IHsgeDogMSwgeTogMSB9IH1cbiAgICAgICAgfVxuICAgICk7XG5cbiAgICB0aGlzLm1hc2tTcHJpdGUgPSBzcHJpdGU7XG4gICAgdGhpcy5tYXNrTWF0cml4ID0gbWFza01hdHJpeDtcblxuICAgIGlmIChzY2FsZSA9PT0gbnVsbCB8fCBzY2FsZSA9PT0gdW5kZWZpbmVkKVxuICAgIHtcbiAgICAgICAgc2NhbGUgPSAyMDtcbiAgICB9XG5cbiAgICB0aGlzLnNjYWxlID0gbmV3IGNvcmUuUG9pbnQoc2NhbGUsIHNjYWxlKTtcbn1cblxuRGlzcGxhY2VtZW50RmlsdGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoY29yZS5BYnN0cmFjdEZpbHRlci5wcm90b3R5cGUpO1xuRGlzcGxhY2VtZW50RmlsdGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IERpc3BsYWNlbWVudEZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gRGlzcGxhY2VtZW50RmlsdGVyO1xuXG5EaXNwbGFjZW1lbnRGaWx0ZXIucHJvdG90eXBlLmFwcGx5RmlsdGVyID0gZnVuY3Rpb24gKHJlbmRlcmVyLCBpbnB1dCwgb3V0cHV0KVxue1xuICAgIHZhciBmaWx0ZXJNYW5hZ2VyID0gcmVuZGVyZXIuZmlsdGVyTWFuYWdlcjtcblxuICAgIGZpbHRlck1hbmFnZXIuY2FsY3VsYXRlTWFwcGVkTWF0cml4KGlucHV0LmZyYW1lLCB0aGlzLm1hc2tTcHJpdGUsIHRoaXMubWFza01hdHJpeCk7XG5cbiAgICB0aGlzLnVuaWZvcm1zLm90aGVyTWF0cml4LnZhbHVlID0gdGhpcy5tYXNrTWF0cml4LnRvQXJyYXkodHJ1ZSk7XG4gICAgdGhpcy51bmlmb3Jtcy5zY2FsZS52YWx1ZS54ID0gdGhpcy5zY2FsZS54ICogKDEvaW5wdXQuZnJhbWUud2lkdGgpO1xuICAgIHRoaXMudW5pZm9ybXMuc2NhbGUudmFsdWUueSA9IHRoaXMuc2NhbGUueSAqICgxL2lucHV0LmZyYW1lLmhlaWdodCk7XG5cbiAgICB2YXIgc2hhZGVyID0gdGhpcy5nZXRTaGFkZXIocmVuZGVyZXIpO1xuICAgICAvLyBkcmF3IHRoZSBmaWx0ZXIuLi5cbiAgICBmaWx0ZXJNYW5hZ2VyLmFwcGx5RmlsdGVyKHNoYWRlciwgaW5wdXQsIG91dHB1dCk7XG59O1xuXG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKERpc3BsYWNlbWVudEZpbHRlci5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBUaGUgdGV4dHVyZSB1c2VkIGZvciB0aGUgZGlzcGxhY2VtZW50IG1hcC4gTXVzdCBiZSBwb3dlciBvZiAyIHNpemVkIHRleHR1cmUuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlRleHR1cmV9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5EaXNwbGFjZW1lbnRGaWx0ZXIjXG4gICAgICovXG4gICAgbWFwOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudW5pZm9ybXMubWFwU2FtcGxlci52YWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudW5pZm9ybXMubWFwU2FtcGxlci52YWx1ZSA9IHZhbHVlO1xuXG4gICAgICAgIH1cbiAgICB9XG59KTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vLi4vY29yZScpO1xuLy8gQHNlZSBodHRwczovL2dpdGh1Yi5jb20vc3Vic3RhY2svYnJmcy9pc3N1ZXMvMjVcblxuXG4vKipcbiAqIEBhdXRob3IgTWF0IEdyb3ZlcyBodHRwOi8vbWF0Z3JvdmVzLmNvbS8gQERvb3JtYXQyM1xuICogb3JpZ2luYWwgZmlsdGVyOiBodHRwczovL2dpdGh1Yi5jb20vZXZhbncvZ2xmeC5qcy9ibG9iL21hc3Rlci9zcmMvZmlsdGVycy9mdW4vZG90c2NyZWVuLmpzXG4gKi9cblxuLyoqXG4gKiBUaGlzIGZpbHRlciBhcHBsaWVzIGEgZG90c2NyZWVuIGVmZmVjdCBtYWtpbmcgZGlzcGxheSBvYmplY3RzIGFwcGVhciB0byBiZSBtYWRlIG91dCBvZlxuICogYmxhY2sgYW5kIHdoaXRlIGhhbGZ0b25lIGRvdHMgbGlrZSBhbiBvbGQgcHJpbnRlci5cbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQWJzdHJhY3RGaWx0ZXJcbiAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnNcbiAqL1xuZnVuY3Rpb24gRG90U2NyZWVuRmlsdGVyKClcbntcbiAgICBjb3JlLkFic3RyYWN0RmlsdGVyLmNhbGwodGhpcyxcbiAgICAgICAgLy8gdmVydGV4IHNoYWRlclxuICAgICAgICBudWxsLFxuICAgICAgICAvLyBmcmFnbWVudCBzaGFkZXJcbiAgICAgICAgXCJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcXG5cXG52YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDtcXG52YXJ5aW5nIHZlYzQgdkNvbG9yO1xcblxcbnVuaWZvcm0gdmVjNCBkaW1lbnNpb25zO1xcbnVuaWZvcm0gc2FtcGxlcjJEIHVTYW1wbGVyO1xcblxcbnVuaWZvcm0gZmxvYXQgYW5nbGU7XFxudW5pZm9ybSBmbG9hdCBzY2FsZTtcXG5cXG5mbG9hdCBwYXR0ZXJuKClcXG57XFxuICAgZmxvYXQgcyA9IHNpbihhbmdsZSksIGMgPSBjb3MoYW5nbGUpO1xcbiAgIHZlYzIgdGV4ID0gdlRleHR1cmVDb29yZCAqIGRpbWVuc2lvbnMueHk7XFxuICAgdmVjMiBwb2ludCA9IHZlYzIoXFxuICAgICAgIGMgKiB0ZXgueCAtIHMgKiB0ZXgueSxcXG4gICAgICAgcyAqIHRleC54ICsgYyAqIHRleC55XFxuICAgKSAqIHNjYWxlO1xcbiAgIHJldHVybiAoc2luKHBvaW50LngpICogc2luKHBvaW50LnkpKSAqIDQuMDtcXG59XFxuXFxudm9pZCBtYWluKClcXG57XFxuICAgdmVjNCBjb2xvciA9IHRleHR1cmUyRCh1U2FtcGxlciwgdlRleHR1cmVDb29yZCk7XFxuICAgZmxvYXQgYXZlcmFnZSA9IChjb2xvci5yICsgY29sb3IuZyArIGNvbG9yLmIpIC8gMy4wO1xcbiAgIGdsX0ZyYWdDb2xvciA9IHZlYzQodmVjMyhhdmVyYWdlICogMTAuMCAtIDUuMCArIHBhdHRlcm4oKSksIGNvbG9yLmEpO1xcbn1cXG5cIixcbiAgICAgICAgLy8gY3VzdG9tIHVuaWZvcm1zXG4gICAgICAgIHtcbiAgICAgICAgICAgIHNjYWxlOiAgICAgIHsgdHlwZTogJzFmJywgdmFsdWU6IDEgfSxcbiAgICAgICAgICAgIGFuZ2xlOiAgICAgIHsgdHlwZTogJzFmJywgdmFsdWU6IDUgfSxcbiAgICAgICAgICAgIGRpbWVuc2lvbnM6IHsgdHlwZTogJzRmdicsIHZhbHVlOiBbMCwgMCwgMCwgMF0gfVxuICAgICAgICB9XG4gICAgKTtcbn1cblxuRG90U2NyZWVuRmlsdGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoY29yZS5BYnN0cmFjdEZpbHRlci5wcm90b3R5cGUpO1xuRG90U2NyZWVuRmlsdGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IERvdFNjcmVlbkZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gRG90U2NyZWVuRmlsdGVyO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhEb3RTY3JlZW5GaWx0ZXIucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogVGhlIHNjYWxlIG9mIHRoZSBlZmZlY3QuXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuRG90U2NyZWVuRmlsdGVyI1xuICAgICAqL1xuICAgIHNjYWxlOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudW5pZm9ybXMuc2NhbGUudmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLnNjYWxlLnZhbHVlID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVGhlIHJhZGl1cyBvZiB0aGUgZWZmZWN0LlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLkRvdFNjcmVlbkZpbHRlciNcbiAgICAgKi9cbiAgICBhbmdsZToge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVuaWZvcm1zLmFuZ2xlLnZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy5hbmdsZS52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfVxufSk7XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uLy4uL2NvcmUnKTtcblxuLy8gQHNlZSBodHRwczovL2dpdGh1Yi5jb20vc3Vic3RhY2svYnJmcy9pc3N1ZXMvMjVcblxuXG4vKipcbiAqIFRoZSBCbHVyWVRpbnRGaWx0ZXIgYXBwbGllcyBhIHZlcnRpY2FsIEdhdXNzaWFuIGJsdXIgdG8gYW4gb2JqZWN0LlxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5BYnN0cmFjdEZpbHRlclxuICogQG1lbWJlcm9mIFBJWEkuZmlsdGVyc1xuICovXG5mdW5jdGlvbiBCbHVyWVRpbnRGaWx0ZXIoKVxue1xuICAgIGNvcmUuQWJzdHJhY3RGaWx0ZXIuY2FsbCh0aGlzLFxuICAgICAgICAvLyB2ZXJ0ZXggc2hhZGVyXG4gICAgICAgIFwiYXR0cmlidXRlIHZlYzIgYVZlcnRleFBvc2l0aW9uO1xcbmF0dHJpYnV0ZSB2ZWMyIGFUZXh0dXJlQ29vcmQ7XFxuYXR0cmlidXRlIHZlYzQgYUNvbG9yO1xcblxcbnVuaWZvcm0gZmxvYXQgc3RyZW5ndGg7XFxudW5pZm9ybSB2ZWMyIG9mZnNldDtcXG5cXG51bmlmb3JtIG1hdDMgcHJvamVjdGlvbk1hdHJpeDtcXG5cXG52YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDtcXG52YXJ5aW5nIHZlYzQgdkNvbG9yO1xcbnZhcnlpbmcgdmVjMiB2Qmx1clRleENvb3Jkc1s2XTtcXG5cXG52b2lkIG1haW4odm9pZClcXG57XFxuICAgIGdsX1Bvc2l0aW9uID0gdmVjNCgocHJvamVjdGlvbk1hdHJpeCAqIHZlYzMoKGFWZXJ0ZXhQb3NpdGlvbitvZmZzZXQpLCAxLjApKS54eSwgMC4wLCAxLjApO1xcbiAgICB2VGV4dHVyZUNvb3JkID0gYVRleHR1cmVDb29yZDtcXG5cXG4gICAgdkJsdXJUZXhDb29yZHNbIDBdID0gYVRleHR1cmVDb29yZCArIHZlYzIoMC4wLCAtMC4wMTIgKiBzdHJlbmd0aCk7XFxuICAgIHZCbHVyVGV4Q29vcmRzWyAxXSA9IGFUZXh0dXJlQ29vcmQgKyB2ZWMyKDAuMCwgLTAuMDA4ICogc3RyZW5ndGgpO1xcbiAgICB2Qmx1clRleENvb3Jkc1sgMl0gPSBhVGV4dHVyZUNvb3JkICsgdmVjMigwLjAsIC0wLjAwNCAqIHN0cmVuZ3RoKTtcXG4gICAgdkJsdXJUZXhDb29yZHNbIDNdID0gYVRleHR1cmVDb29yZCArIHZlYzIoMC4wLCAgMC4wMDQgKiBzdHJlbmd0aCk7XFxuICAgIHZCbHVyVGV4Q29vcmRzWyA0XSA9IGFUZXh0dXJlQ29vcmQgKyB2ZWMyKDAuMCwgIDAuMDA4ICogc3RyZW5ndGgpO1xcbiAgICB2Qmx1clRleENvb3Jkc1sgNV0gPSBhVGV4dHVyZUNvb3JkICsgdmVjMigwLjAsICAwLjAxMiAqIHN0cmVuZ3RoKTtcXG5cXG4gICB2Q29sb3IgPSB2ZWM0KGFDb2xvci5yZ2IgKiBhQ29sb3IuYSwgYUNvbG9yLmEpO1xcbn1cXG5cIixcbiAgICAgICAgLy8gZnJhZ21lbnQgc2hhZGVyXG4gICAgICAgIFwicHJlY2lzaW9uIGxvd3AgZmxvYXQ7XFxuXFxudmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7XFxudmFyeWluZyB2ZWMyIHZCbHVyVGV4Q29vcmRzWzZdO1xcbnZhcnlpbmcgdmVjNCB2Q29sb3I7XFxuXFxudW5pZm9ybSB2ZWMzIGNvbG9yO1xcbnVuaWZvcm0gZmxvYXQgYWxwaGE7XFxuXFxudW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXI7XFxuXFxudm9pZCBtYWluKHZvaWQpXFxue1xcbiAgICB2ZWM0IHN1bSA9IHZlYzQoMC4wKTtcXG5cXG4gICAgc3VtICs9IHRleHR1cmUyRCh1U2FtcGxlciwgdkJsdXJUZXhDb29yZHNbIDBdKSowLjAwNDQzMTg0ODQxMTkzODM0MTtcXG4gICAgc3VtICs9IHRleHR1cmUyRCh1U2FtcGxlciwgdkJsdXJUZXhDb29yZHNbIDFdKSowLjA1Mzk5MDk2NjUxMzE4OTg1O1xcbiAgICBzdW0gKz0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2Qmx1clRleENvb3Jkc1sgMl0pKjAuMjQxOTcwNzI0NTE5MTQ1NDtcXG4gICAgc3VtICs9IHRleHR1cmUyRCh1U2FtcGxlciwgdlRleHR1cmVDb29yZCAgICAgKSowLjM5ODk0MjI4MDQwMTQzMjc7XFxuICAgIHN1bSArPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZCbHVyVGV4Q29vcmRzWyAzXSkqMC4yNDE5NzA3MjQ1MTkxNDU0O1xcbiAgICBzdW0gKz0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2Qmx1clRleENvb3Jkc1sgNF0pKjAuMDUzOTkwOTY2NTEzMTg5ODU7XFxuICAgIHN1bSArPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZCbHVyVGV4Q29vcmRzWyA1XSkqMC4wMDQ0MzE4NDg0MTE5MzgzNDE7XFxuXFxuICAgIGdsX0ZyYWdDb2xvciA9IHZlYzQoIGNvbG9yLnJnYiAqIHN1bS5hICogYWxwaGEsIHN1bS5hICogYWxwaGEgKTtcXG59XFxuXCIsXG4gICAgICAgIC8vIHNldCB0aGUgdW5pZm9ybXNcbiAgICAgICAge1xuICAgICAgICAgICAgYmx1cjogeyB0eXBlOiAnMWYnLCB2YWx1ZTogMSAvIDUxMiB9LFxuICAgICAgICAgICAgY29sb3I6IHsgdHlwZTogJ2MnLCB2YWx1ZTogWzAsMCwwXX0sXG4gICAgICAgICAgICBhbHBoYTogeyB0eXBlOiAnMWYnLCB2YWx1ZTogMC43IH0sXG4gICAgICAgICAgICBvZmZzZXQ6IHsgdHlwZTogJzJmJywgdmFsdWU6WzUsIDVdfSxcbiAgICAgICAgICAgIHN0cmVuZ3RoOiB7IHR5cGU6ICcxZicsIHZhbHVlOjF9XG4gICAgICAgIH1cbiAgICApO1xuXG4gICAgdGhpcy5wYXNzZXMgPSAxO1xuICAgIHRoaXMuc3RyZW5ndGggPSA0O1xufVxuXG5CbHVyWVRpbnRGaWx0ZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShjb3JlLkFic3RyYWN0RmlsdGVyLnByb3RvdHlwZSk7XG5CbHVyWVRpbnRGaWx0ZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gQmx1cllUaW50RmlsdGVyO1xubW9kdWxlLmV4cG9ydHMgPSBCbHVyWVRpbnRGaWx0ZXI7XG5cbkJsdXJZVGludEZpbHRlci5wcm90b3R5cGUuYXBwbHlGaWx0ZXIgPSBmdW5jdGlvbiAocmVuZGVyZXIsIGlucHV0LCBvdXRwdXQsIGNsZWFyKVxue1xuICAgIHZhciBzaGFkZXIgPSB0aGlzLmdldFNoYWRlcihyZW5kZXJlcik7XG5cbiAgICB0aGlzLnVuaWZvcm1zLnN0cmVuZ3RoLnZhbHVlID0gdGhpcy5zdHJlbmd0aCAvIDQgLyB0aGlzLnBhc3NlcyAqIChpbnB1dC5mcmFtZS5oZWlnaHQgLyBpbnB1dC5zaXplLmhlaWdodCk7XG5cbiAgICBpZih0aGlzLnBhc3NlcyA9PT0gMSlcbiAgICB7XG4gICAgICAgIHJlbmRlcmVyLmZpbHRlck1hbmFnZXIuYXBwbHlGaWx0ZXIoc2hhZGVyLCBpbnB1dCwgb3V0cHV0LCBjbGVhcik7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHZhciByZW5kZXJUYXJnZXQgPSByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLmdldFJlbmRlclRhcmdldCh0cnVlKTtcbiAgICAgICAgdmFyIGZsaXAgPSBpbnB1dDtcbiAgICAgICAgdmFyIGZsb3AgPSByZW5kZXJUYXJnZXQ7XG5cbiAgICAgICAgZm9yKHZhciBpID0gMDsgaSA8IHRoaXMucGFzc2VzLTE7IGkrKylcbiAgICAgICAge1xuICAgICAgICAgICAgcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5hcHBseUZpbHRlcihzaGFkZXIsIGZsaXAsIGZsb3AsIGNsZWFyKTtcblxuICAgICAgICAgICB2YXIgdGVtcCA9IGZsb3A7XG4gICAgICAgICAgIGZsb3AgPSBmbGlwO1xuICAgICAgICAgICBmbGlwID0gdGVtcDtcbiAgICAgICAgfVxuXG4gICAgICAgIHJlbmRlcmVyLmZpbHRlck1hbmFnZXIuYXBwbHlGaWx0ZXIoc2hhZGVyLCBmbGlwLCBvdXRwdXQsIGNsZWFyKTtcblxuICAgICAgICByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLnJldHVyblJlbmRlclRhcmdldChyZW5kZXJUYXJnZXQpO1xuICAgIH1cbn07XG5cblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoQmx1cllUaW50RmlsdGVyLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIHN0cmVuZ3RoIG9mIGJvdGggdGhlIGJsdXIuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5CbHVyWVRpbnRGaWx0ZXIjXG4gICAgICogQGRlZmF1bHQgMlxuICAgICAqL1xuICAgIGJsdXI6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gIHRoaXMuc3RyZW5ndGg7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnBhZGRpbmcgPSB2YWx1ZSAqIDAuNTtcbiAgICAgICAgICAgIHRoaXMuc3RyZW5ndGggPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi8uLi9jb3JlJyksXG4gICAgQmx1clhGaWx0ZXIgPSByZXF1aXJlKCcuLi9ibHVyL0JsdXJYRmlsdGVyJyksXG4gICAgQmx1cllUaW50RmlsdGVyID0gcmVxdWlyZSgnLi9CbHVyWVRpbnRGaWx0ZXInKTtcblxuLyoqXG4gKiBUaGUgRHJvcFNoYWRvd0ZpbHRlciBhcHBsaWVzIGEgR2F1c3NpYW4gYmx1ciB0byBhbiBvYmplY3QuXG4gKiBUaGUgc3RyZW5ndGggb2YgdGhlIGJsdXIgY2FuIGJlIHNldCBmb3IgeC0gYW5kIHktYXhpcyBzZXBhcmF0ZWx5LlxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5BYnN0cmFjdEZpbHRlclxuICogQG1lbWJlcm9mIFBJWEkuZmlsdGVyc1xuICovXG5mdW5jdGlvbiBEcm9wU2hhZG93RmlsdGVyKClcbntcbiAgICBjb3JlLkFic3RyYWN0RmlsdGVyLmNhbGwodGhpcyk7XG5cbiAgICB0aGlzLmJsdXJYRmlsdGVyID0gbmV3IEJsdXJYRmlsdGVyKCk7XG4gICAgdGhpcy5ibHVyWVRpbnRGaWx0ZXIgPSBuZXcgQmx1cllUaW50RmlsdGVyKCk7XG5cbiAgICB0aGlzLmRlZmF1bHRGaWx0ZXIgPSBuZXcgY29yZS5BYnN0cmFjdEZpbHRlcigpO1xuXG4gICAgdGhpcy5wYWRkaW5nID0gMzA7XG5cbiAgICB0aGlzLl9kaXJ0eVBvc2l0aW9uID0gdHJ1ZTtcbiAgICB0aGlzLl9hbmdsZSA9IDQ1ICogTWF0aC5QSSAvIDE4MDtcbiAgICB0aGlzLl9kaXN0YW5jZSA9IDEwO1xuICAgIHRoaXMuYWxwaGEgPSAwLjc1O1xuICAgIHRoaXMuaGlkZU9iamVjdCA9IGZhbHNlO1xuICAgIHRoaXMuYmxlbmRNb2RlID0gY29yZS5CTEVORF9NT0RFUy5NVUxUSVBMWTtcbn1cblxuRHJvcFNoYWRvd0ZpbHRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuQWJzdHJhY3RGaWx0ZXIucHJvdG90eXBlKTtcbkRyb3BTaGFkb3dGaWx0ZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gRHJvcFNoYWRvd0ZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gRHJvcFNoYWRvd0ZpbHRlcjtcblxuRHJvcFNoYWRvd0ZpbHRlci5wcm90b3R5cGUuYXBwbHlGaWx0ZXIgPSBmdW5jdGlvbiAocmVuZGVyZXIsIGlucHV0LCBvdXRwdXQpXG57XG4gICAgdmFyIHJlbmRlclRhcmdldCA9IHJlbmRlcmVyLmZpbHRlck1hbmFnZXIuZ2V0UmVuZGVyVGFyZ2V0KHRydWUpO1xuXG4gICAgLy9UT0RPIC0gY29weVRleFN1YkltYWdlMkQgY291bGQgYmUgdXNlZCBoZXJlP1xuICAgIGlmKHRoaXMuX2RpcnR5UG9zaXRpb24pXG4gICAge1xuICAgICAgICB0aGlzLl9kaXJ0eVBvc2l0aW9uID0gZmFsc2U7XG5cbiAgICAgICAgdGhpcy5ibHVyWVRpbnRGaWx0ZXIudW5pZm9ybXMub2Zmc2V0LnZhbHVlWzBdID0gTWF0aC5zaW4odGhpcy5fYW5nbGUpICogdGhpcy5fZGlzdGFuY2U7XG4gICAgICAgIHRoaXMuYmx1cllUaW50RmlsdGVyLnVuaWZvcm1zLm9mZnNldC52YWx1ZVsxXSA9IE1hdGguY29zKHRoaXMuX2FuZ2xlKSAqIHRoaXMuX2Rpc3RhbmNlO1xuICAgIH1cblxuICAgIHRoaXMuYmx1clhGaWx0ZXIuYXBwbHlGaWx0ZXIocmVuZGVyZXIsIGlucHV0LCByZW5kZXJUYXJnZXQpO1xuXG4gICAgcmVuZGVyZXIuYmxlbmRNb2RlTWFuYWdlci5zZXRCbGVuZE1vZGUodGhpcy5ibGVuZE1vZGUpO1xuXG4gICAgdGhpcy5ibHVyWVRpbnRGaWx0ZXIuYXBwbHlGaWx0ZXIocmVuZGVyZXIsIHJlbmRlclRhcmdldCwgb3V0cHV0KTtcblxuICAgIHJlbmRlcmVyLmJsZW5kTW9kZU1hbmFnZXIuc2V0QmxlbmRNb2RlKGNvcmUuQkxFTkRfTU9ERVMuTk9STUFMKTtcblxuICAgIGlmKCF0aGlzLmhpZGVPYmplY3QpXG4gICAge1xuXG4gICAgICAgIHRoaXMuZGVmYXVsdEZpbHRlci5hcHBseUZpbHRlcihyZW5kZXJlciwgaW5wdXQsIG91dHB1dCk7XG4gICAgfVxuXG5cbiAgICByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLnJldHVyblJlbmRlclRhcmdldChyZW5kZXJUYXJnZXQpO1xufTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoRHJvcFNoYWRvd0ZpbHRlci5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBzdHJlbmd0aCBvZiBib3RoIHRoZSBibHVyWCBhbmQgYmx1clkgcHJvcGVydGllcyBzaW11bHRhbmVvdXNseVxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJPZiBQSVhJLmZpbHRlcnMuRHJvcFNoYWRvd0ZpbHRlciNcbiAgICAgKiBAZGVmYXVsdCAyXG4gICAgICovXG4gICAgYmx1cjoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmJsdXJYRmlsdGVyLmJsdXI7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmJsdXJYRmlsdGVyLmJsdXIgPSB0aGlzLmJsdXJZVGludEZpbHRlci5ibHVyID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgc3RyZW5ndGggb2YgdGhlIGJsdXJYIHByb3BlcnR5XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlck9mIFBJWEkuZmlsdGVycy5Ecm9wU2hhZG93RmlsdGVyI1xuICAgICAqIEBkZWZhdWx0IDJcbiAgICAgKi9cbiAgICBibHVyWDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmJsdXJYRmlsdGVyLmJsdXI7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmJsdXJYRmlsdGVyLmJsdXIgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBzdHJlbmd0aCBvZiB0aGUgYmx1clkgcHJvcGVydHlcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyT2YgUElYSS5maWx0ZXJzLkRyb3BTaGFkb3dGaWx0ZXIjXG4gICAgICogQGRlZmF1bHQgMlxuICAgICAqL1xuICAgIGJsdXJZOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuYmx1cllUaW50RmlsdGVyLmJsdXI7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmJsdXJZVGludEZpbHRlci5ibHVyID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgY29sb3Igb2YgdGhlIHNoYWRvd1xuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJPZiBQSVhJLmZpbHRlcnMuRHJvcFNoYWRvd0ZpbHRlciNcbiAgICAgKi9cbiAgICBjb2xvcjoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiAgY29yZS51dGlscy5yZ2IyaGV4KCB0aGlzLmJsdXJZVGludEZpbHRlci51bmlmb3Jtcy5jb2xvci52YWx1ZSApO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5ibHVyWVRpbnRGaWx0ZXIudW5pZm9ybXMuY29sb3IudmFsdWUgPSBjb3JlLnV0aWxzLmhleDJyZ2IodmFsdWUpO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIGFscGhhIG9mIHRoZSBzaGFkb3dcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyT2YgUElYSS5maWx0ZXJzLkRyb3BTaGFkb3dGaWx0ZXIjXG4gICAgICovXG4gICAgYWxwaGE6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gIHRoaXMuYmx1cllUaW50RmlsdGVyLnVuaWZvcm1zLmFscGhhLnZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5ibHVyWVRpbnRGaWx0ZXIudW5pZm9ybXMuYWxwaGEudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBkaXN0YW5jZSBvZiB0aGUgc2hhZG93XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlck9mIFBJWEkuZmlsdGVycy5Ecm9wU2hhZG93RmlsdGVyI1xuICAgICAqL1xuICAgIGRpc3RhbmNlOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuICB0aGlzLl9kaXN0YW5jZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuX2RpcnR5UG9zaXRpb24gPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy5fZGlzdGFuY2UgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBhbmdsZSBvZiB0aGUgc2hhZG93XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlck9mIFBJWEkuZmlsdGVycy5Ecm9wU2hhZG93RmlsdGVyI1xuICAgICAqL1xuICAgIGFuZ2xlOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuICB0aGlzLl9hbmdsZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuX2RpcnR5UG9zaXRpb24gPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy5fYW5nbGUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi8uLi9jb3JlJyk7XG4vLyBAc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9zdWJzdGFjay9icmZzL2lzc3Vlcy8yNVxuXG5cbi8qKlxuICogVGhpcyBncmV5c2NhbGVzIHRoZSBwYWxldHRlIG9mIHlvdXIgRGlzcGxheSBPYmplY3RzLlxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5BYnN0cmFjdEZpbHRlclxuICogQG1lbWJlcm9mIFBJWEkuZmlsdGVyc1xuICovXG5mdW5jdGlvbiBHcmF5RmlsdGVyKClcbntcbiAgICBjb3JlLkFic3RyYWN0RmlsdGVyLmNhbGwodGhpcyxcbiAgICAgICAgLy8gdmVydGV4IHNoYWRlclxuICAgICAgICBudWxsLFxuICAgICAgICAvLyBmcmFnbWVudCBzaGFkZXJcbiAgICAgICAgXCJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcXG5cXG52YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDtcXG52YXJ5aW5nIHZlYzQgdkNvbG9yO1xcblxcbnVuaWZvcm0gc2FtcGxlcjJEIHVTYW1wbGVyO1xcbnVuaWZvcm0gZmxvYXQgZ3JheTtcXG5cXG52b2lkIG1haW4odm9pZClcXG57XFxuICAgZ2xfRnJhZ0NvbG9yID0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2VGV4dHVyZUNvb3JkKTtcXG4gICBnbF9GcmFnQ29sb3IucmdiID0gbWl4KGdsX0ZyYWdDb2xvci5yZ2IsIHZlYzMoMC4yMTI2KmdsX0ZyYWdDb2xvci5yICsgMC43MTUyKmdsX0ZyYWdDb2xvci5nICsgMC4wNzIyKmdsX0ZyYWdDb2xvci5iKSwgZ3JheSk7XFxufVxcblwiLFxuICAgICAgICAvLyBzZXQgdGhlIHVuaWZvcm1zXG4gICAgICAgIHtcbiAgICAgICAgICAgIGdyYXk6IHsgdHlwZTogJzFmJywgdmFsdWU6IDEgfVxuICAgICAgICB9XG4gICAgKTtcbn1cblxuR3JheUZpbHRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuQWJzdHJhY3RGaWx0ZXIucHJvdG90eXBlKTtcbkdyYXlGaWx0ZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gR3JheUZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gR3JheUZpbHRlcjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoR3JheUZpbHRlci5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBUaGUgc3RyZW5ndGggb2YgdGhlIGdyYXkuIDEgd2lsbCBtYWtlIHRoZSBvYmplY3QgYmxhY2sgYW5kIHdoaXRlLCAwIHdpbGwgbWFrZSB0aGUgb2JqZWN0IGl0cyBub3JtYWwgY29sb3IuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5HcmF5RmlsdGVyI1xuICAgICAqL1xuICAgIGdyYXk6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy51bmlmb3Jtcy5ncmF5LnZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy5ncmF5LnZhbHVlID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG59KTtcbiIsIi8qKlxuICogQGZpbGUgICAgICAgIE1haW4gZXhwb3J0IG9mIHRoZSBQSVhJIGZpbHRlcnMgbGlicmFyeVxuICogQGF1dGhvciAgICAgIE1hdCBHcm92ZXMgPG1hdEBnb29kYm95ZGlnaXRhbC5jb20+XG4gKiBAY29weXJpZ2h0ICAgMjAxMy0yMDE1IEdvb2RCb3lEaWdpdGFsXG4gKiBAbGljZW5zZSAgICAge0BsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9waXhpanMvcGl4aS5qcy9ibG9iL21hc3Rlci9MSUNFTlNFfE1JVCBMaWNlbnNlfVxuICovXG5cbi8qKlxuICogQG5hbWVzcGFjZSBQSVhJLmZpbHRlcnNcbiAqL1xubW9kdWxlLmV4cG9ydHMgPSB7XG4gICAgQXNjaWlGaWx0ZXI6ICAgICAgICByZXF1aXJlKCcuL2FzY2lpL0FzY2lpRmlsdGVyJyksXG4gICAgQmxvb21GaWx0ZXI6ICAgICAgICByZXF1aXJlKCcuL2Jsb29tL0Jsb29tRmlsdGVyJyksXG4gICAgQmx1ckZpbHRlcjogICAgICAgICByZXF1aXJlKCcuL2JsdXIvQmx1ckZpbHRlcicpLFxuICAgIEJsdXJYRmlsdGVyOiAgICAgICAgcmVxdWlyZSgnLi9ibHVyL0JsdXJYRmlsdGVyJyksXG4gICAgQmx1cllGaWx0ZXI6ICAgICAgICByZXF1aXJlKCcuL2JsdXIvQmx1cllGaWx0ZXInKSxcbiAgICBCbHVyRGlyRmlsdGVyOiAgICAgIHJlcXVpcmUoJy4vYmx1ci9CbHVyRGlyRmlsdGVyJyksXG4gICAgQ29sb3JNYXRyaXhGaWx0ZXI6ICByZXF1aXJlKCcuL2NvbG9yL0NvbG9yTWF0cml4RmlsdGVyJyksXG4gICAgQ29sb3JTdGVwRmlsdGVyOiAgICByZXF1aXJlKCcuL2NvbG9yL0NvbG9yU3RlcEZpbHRlcicpLFxuICAgIENvbnZvbHV0aW9uRmlsdGVyOiAgcmVxdWlyZSgnLi9jb252b2x1dGlvbi9Db252b2x1dGlvbkZpbHRlcicpLFxuICAgIENyb3NzSGF0Y2hGaWx0ZXI6ICAgcmVxdWlyZSgnLi9jcm9zc2hhdGNoL0Nyb3NzSGF0Y2hGaWx0ZXInKSxcbiAgICBEaXNwbGFjZW1lbnRGaWx0ZXI6IHJlcXVpcmUoJy4vZGlzcGxhY2VtZW50L0Rpc3BsYWNlbWVudEZpbHRlcicpLFxuICAgIERvdFNjcmVlbkZpbHRlcjogICAgcmVxdWlyZSgnLi9kb3QvRG90U2NyZWVuRmlsdGVyJyksXG4gICAgR3JheUZpbHRlcjogICAgICAgICByZXF1aXJlKCcuL2dyYXkvR3JheUZpbHRlcicpLFxuICAgIERyb3BTaGFkb3dGaWx0ZXI6ICAgcmVxdWlyZSgnLi9kcm9wc2hhZG93L0Ryb3BTaGFkb3dGaWx0ZXInKSxcbiAgICBJbnZlcnRGaWx0ZXI6ICAgICAgIHJlcXVpcmUoJy4vaW52ZXJ0L0ludmVydEZpbHRlcicpLFxuICAgIE5vaXNlRmlsdGVyOiAgICAgICAgcmVxdWlyZSgnLi9ub2lzZS9Ob2lzZUZpbHRlcicpLFxuICAgIFBpeGVsYXRlRmlsdGVyOiAgICAgcmVxdWlyZSgnLi9waXhlbGF0ZS9QaXhlbGF0ZUZpbHRlcicpLFxuICAgIFJHQlNwbGl0RmlsdGVyOiAgICAgcmVxdWlyZSgnLi9yZ2IvUkdCU3BsaXRGaWx0ZXInKSxcbiAgICBTaG9ja3dhdmVGaWx0ZXI6ICAgIHJlcXVpcmUoJy4vc2hvY2t3YXZlL1Nob2Nrd2F2ZUZpbHRlcicpLFxuICAgIFNlcGlhRmlsdGVyOiAgICAgICAgcmVxdWlyZSgnLi9zZXBpYS9TZXBpYUZpbHRlcicpLFxuICAgIFNtYXJ0Qmx1ckZpbHRlcjogICAgcmVxdWlyZSgnLi9ibHVyL1NtYXJ0Qmx1ckZpbHRlcicpLFxuICAgIFRpbHRTaGlmdEZpbHRlcjogICAgcmVxdWlyZSgnLi90aWx0c2hpZnQvVGlsdFNoaWZ0RmlsdGVyJyksXG4gICAgVGlsdFNoaWZ0WEZpbHRlcjogICByZXF1aXJlKCcuL3RpbHRzaGlmdC9UaWx0U2hpZnRYRmlsdGVyJyksXG4gICAgVGlsdFNoaWZ0WUZpbHRlcjogICByZXF1aXJlKCcuL3RpbHRzaGlmdC9UaWx0U2hpZnRZRmlsdGVyJyksXG4gICAgVHdpc3RGaWx0ZXI6ICAgICAgICByZXF1aXJlKCcuL3R3aXN0L1R3aXN0RmlsdGVyJylcbn07XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uLy4uL2NvcmUnKTtcbi8vIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL3N1YnN0YWNrL2JyZnMvaXNzdWVzLzI1XG5cblxuLyoqXG4gKiBUaGlzIGludmVydHMgeW91ciBEaXNwbGF5IE9iamVjdHMgY29sb3JzLlxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5BYnN0cmFjdEZpbHRlclxuICogQG1lbWJlcm9mIFBJWEkuZmlsdGVyc1xuICovXG5mdW5jdGlvbiBJbnZlcnRGaWx0ZXIoKVxue1xuICAgIGNvcmUuQWJzdHJhY3RGaWx0ZXIuY2FsbCh0aGlzLFxuICAgICAgICAvLyB2ZXJ0ZXggc2hhZGVyXG4gICAgICAgIG51bGwsXG4gICAgICAgIC8vIGZyYWdtZW50IHNoYWRlclxuICAgICAgICBcInByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xcblxcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xcblxcbnVuaWZvcm0gZmxvYXQgaW52ZXJ0O1xcbnVuaWZvcm0gc2FtcGxlcjJEIHVTYW1wbGVyO1xcblxcbnZvaWQgbWFpbih2b2lkKVxcbntcXG4gICAgZ2xfRnJhZ0NvbG9yID0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2VGV4dHVyZUNvb3JkKTtcXG5cXG4gICAgZ2xfRnJhZ0NvbG9yLnJnYiA9IG1peCggKHZlYzMoMSktZ2xfRnJhZ0NvbG9yLnJnYikgKiBnbF9GcmFnQ29sb3IuYSwgZ2xfRnJhZ0NvbG9yLnJnYiwgMS4wIC0gaW52ZXJ0KTtcXG59XFxuXCIsXG4gICAgICAgIC8vIGN1c3RvbSB1bmlmb3Jtc1xuICAgICAgICB7XG4gICAgICAgICAgICBpbnZlcnQ6IHsgdHlwZTogJzFmJywgdmFsdWU6IDEgfVxuICAgICAgICB9XG4gICAgKTtcbn1cblxuSW52ZXJ0RmlsdGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoY29yZS5BYnN0cmFjdEZpbHRlci5wcm90b3R5cGUpO1xuSW52ZXJ0RmlsdGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IEludmVydEZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gSW52ZXJ0RmlsdGVyO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhJbnZlcnRGaWx0ZXIucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogVGhlIHN0cmVuZ3RoIG9mIHRoZSBpbnZlcnQuIGAxYCB3aWxsIGZ1bGx5IGludmVydCB0aGUgY29sb3JzLCBhbmRcbiAgICAgKiBgMGAgd2lsbCBtYWtlIHRoZSBvYmplY3QgaXRzIG5vcm1hbCBjb2xvci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLkludmVydEZpbHRlciNcbiAgICAgKi9cbiAgICBpbnZlcnQ6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy51bmlmb3Jtcy5pbnZlcnQudmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLmludmVydC52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfVxufSk7XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uLy4uL2NvcmUnKTtcbi8vIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL3N1YnN0YWNrL2JyZnMvaXNzdWVzLzI1XG5cblxuLyoqXG4gKiBAYXV0aG9yIFZpY28gQHZpY29jb3RlYVxuICogb3JpZ2luYWwgZmlsdGVyOiBodHRwczovL2dpdGh1Yi5jb20vZXZhbncvZ2xmeC5qcy9ibG9iL21hc3Rlci9zcmMvZmlsdGVycy9hZGp1c3Qvbm9pc2UuanNcbiAqL1xuXG4vKipcbiAqIEEgTm9pc2UgZWZmZWN0IGZpbHRlci5cbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQWJzdHJhY3RGaWx0ZXJcbiAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnNcbiAqL1xuZnVuY3Rpb24gTm9pc2VGaWx0ZXIoKVxue1xuICAgIGNvcmUuQWJzdHJhY3RGaWx0ZXIuY2FsbCh0aGlzLFxuICAgICAgICAvLyB2ZXJ0ZXggc2hhZGVyXG4gICAgICAgIG51bGwsXG4gICAgICAgIC8vIGZyYWdtZW50IHNoYWRlclxuICAgICAgICBcInByZWNpc2lvbiBoaWdocCBmbG9hdDtcXG5cXG52YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDtcXG52YXJ5aW5nIHZlYzQgdkNvbG9yO1xcblxcbnVuaWZvcm0gZmxvYXQgbm9pc2U7XFxudW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXI7XFxuXFxuZmxvYXQgcmFuZCh2ZWMyIGNvKVxcbntcXG4gICAgcmV0dXJuIGZyYWN0KHNpbihkb3QoY28ueHksIHZlYzIoMTIuOTg5OCwgNzguMjMzKSkpICogNDM3NTguNTQ1Myk7XFxufVxcblxcbnZvaWQgbWFpbigpXFxue1xcbiAgICB2ZWM0IGNvbG9yID0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2VGV4dHVyZUNvb3JkKTtcXG5cXG4gICAgZmxvYXQgZGlmZiA9IChyYW5kKHZUZXh0dXJlQ29vcmQpIC0gMC41KSAqIG5vaXNlO1xcblxcbiAgICBjb2xvci5yICs9IGRpZmY7XFxuICAgIGNvbG9yLmcgKz0gZGlmZjtcXG4gICAgY29sb3IuYiArPSBkaWZmO1xcblxcbiAgICBnbF9GcmFnQ29sb3IgPSBjb2xvcjtcXG59XFxuXCIsXG4gICAgICAgIC8vIGN1c3RvbSB1bmlmb3Jtc1xuICAgICAgICB7XG4gICAgICAgICAgICBub2lzZTogeyB0eXBlOiAnMWYnLCB2YWx1ZTogMC41IH1cbiAgICAgICAgfVxuICAgICk7XG59XG5cbk5vaXNlRmlsdGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoY29yZS5BYnN0cmFjdEZpbHRlci5wcm90b3R5cGUpO1xuTm9pc2VGaWx0ZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gTm9pc2VGaWx0ZXI7XG5tb2R1bGUuZXhwb3J0cyA9IE5vaXNlRmlsdGVyO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhOb2lzZUZpbHRlci5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBUaGUgYW1vdW50IG9mIG5vaXNlIHRvIGFwcGx5LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuTm9pc2VGaWx0ZXIjXG4gICAgICogQGRlZmF1bHQgMC41XG4gICAgICovXG4gICAgbm9pc2U6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy51bmlmb3Jtcy5ub2lzZS52YWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudW5pZm9ybXMubm9pc2UudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi8uLi9jb3JlJyk7XG4vLyBAc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9zdWJzdGFjay9icmZzL2lzc3Vlcy8yNVxuXG5cbi8qKlxuICogVGhpcyBmaWx0ZXIgYXBwbGllcyBhIHBpeGVsYXRlIGVmZmVjdCBtYWtpbmcgZGlzcGxheSBvYmplY3RzIGFwcGVhciAnYmxvY2t5Jy5cbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQWJzdHJhY3RGaWx0ZXJcbiAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnNcbiAqL1xuZnVuY3Rpb24gUGl4ZWxhdGVGaWx0ZXIoKVxue1xuICAgIGNvcmUuQWJzdHJhY3RGaWx0ZXIuY2FsbCh0aGlzLFxuICAgICAgICAvLyB2ZXJ0ZXggc2hhZGVyXG4gICAgICAgIG51bGwsXG4gICAgICAgIC8vIGZyYWdtZW50IHNoYWRlclxuICAgICAgICBcInByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xcblxcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xcblxcbnVuaWZvcm0gdmVjNCBkaW1lbnNpb25zO1xcbnVuaWZvcm0gdmVjMiBwaXhlbFNpemU7XFxudW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXI7XFxuXFxudm9pZCBtYWluKHZvaWQpXFxue1xcbiAgICB2ZWMyIGNvb3JkID0gdlRleHR1cmVDb29yZDtcXG5cXG4gICAgdmVjMiBzaXplID0gZGltZW5zaW9ucy54eSAvIHBpeGVsU2l6ZTtcXG5cXG4gICAgdmVjMiBjb2xvciA9IGZsb29yKCAoIHZUZXh0dXJlQ29vcmQgKiBzaXplICkgKSAvIHNpemUgKyBwaXhlbFNpemUvZGltZW5zaW9ucy54eSAqIDAuNTtcXG5cXG4gICAgZ2xfRnJhZ0NvbG9yID0gdGV4dHVyZTJEKHVTYW1wbGVyLCBjb2xvcik7XFxufVxcblwiLFxuICAgICAgICAvLyBjdXN0b20gdW5pZm9ybXNcbiAgICAgICAge1xuICAgICAgICAgICAgZGltZW5zaW9uczogeyB0eXBlOiAnNGZ2JywgIHZhbHVlOiBuZXcgRmxvYXQzMkFycmF5KFswLCAwLCAwLCAwXSkgfSxcbiAgICAgICAgICAgIHBpeGVsU2l6ZTogIHsgdHlwZTogJ3YyJywgICB2YWx1ZTogeyB4OiAxMCwgeTogMTAgfSB9XG4gICAgICAgIH1cbiAgICApO1xufVxuXG5QaXhlbGF0ZUZpbHRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuQWJzdHJhY3RGaWx0ZXIucHJvdG90eXBlKTtcblBpeGVsYXRlRmlsdGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFBpeGVsYXRlRmlsdGVyO1xubW9kdWxlLmV4cG9ydHMgPSBQaXhlbGF0ZUZpbHRlcjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoUGl4ZWxhdGVGaWx0ZXIucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogVGhpcyBhIHBvaW50IHRoYXQgZGVzY3JpYmVzIHRoZSBzaXplIG9mIHRoZSBibG9ja3MuXG4gICAgICogeCBpcyB0aGUgd2lkdGggb2YgdGhlIGJsb2NrIGFuZCB5IGlzIHRoZSBoZWlnaHQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlBvaW50fVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuUGl4ZWxhdGVGaWx0ZXIjXG4gICAgICovXG4gICAgc2l6ZToge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVuaWZvcm1zLnBpeGVsU2l6ZS52YWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudW5pZm9ybXMucGl4ZWxTaXplLnZhbHVlID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG59KTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vLi4vY29yZScpO1xuLy8gQHNlZSBodHRwczovL2dpdGh1Yi5jb20vc3Vic3RhY2svYnJmcy9pc3N1ZXMvMjVcblxuXG4vKipcbiAqIEFuIFJHQiBTcGxpdCBGaWx0ZXIuXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLkFic3RyYWN0RmlsdGVyXG4gKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzXG4gKi9cbmZ1bmN0aW9uIFJHQlNwbGl0RmlsdGVyKClcbntcbiAgICBjb3JlLkFic3RyYWN0RmlsdGVyLmNhbGwodGhpcyxcbiAgICAgICAgLy8gdmVydGV4IHNoYWRlclxuICAgICAgICBudWxsLFxuICAgICAgICAvLyBmcmFnbWVudCBzaGFkZXJcbiAgICAgICAgXCJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcXG5cXG52YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDtcXG5cXG51bmlmb3JtIHNhbXBsZXIyRCB1U2FtcGxlcjtcXG51bmlmb3JtIHZlYzQgZGltZW5zaW9ucztcXG51bmlmb3JtIHZlYzIgcmVkO1xcbnVuaWZvcm0gdmVjMiBncmVlbjtcXG51bmlmb3JtIHZlYzIgYmx1ZTtcXG5cXG52b2lkIG1haW4odm9pZClcXG57XFxuICAgZ2xfRnJhZ0NvbG9yLnIgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZUZXh0dXJlQ29vcmQgKyByZWQvZGltZW5zaW9ucy54eSkucjtcXG4gICBnbF9GcmFnQ29sb3IuZyA9IHRleHR1cmUyRCh1U2FtcGxlciwgdlRleHR1cmVDb29yZCArIGdyZWVuL2RpbWVuc2lvbnMueHkpLmc7XFxuICAgZ2xfRnJhZ0NvbG9yLmIgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZUZXh0dXJlQ29vcmQgKyBibHVlL2RpbWVuc2lvbnMueHkpLmI7XFxuICAgZ2xfRnJhZ0NvbG9yLmEgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZUZXh0dXJlQ29vcmQpLmE7XFxufVxcblwiLFxuICAgICAgICAvLyBjdXN0b20gdW5pZm9ybXNcbiAgICAgICAge1xuICAgICAgICAgICAgcmVkOiAgICAgICAgeyB0eXBlOiAndjInLCB2YWx1ZTogeyB4OiAyMCwgeTogMjAgfSB9LFxuICAgICAgICAgICAgZ3JlZW46ICAgICAgeyB0eXBlOiAndjInLCB2YWx1ZTogeyB4OiAtMjAsIHk6IDIwIH0gfSxcbiAgICAgICAgICAgIGJsdWU6ICAgICAgIHsgdHlwZTogJ3YyJywgdmFsdWU6IHsgeDogMjAsIHk6IC0yMCB9IH0sXG4gICAgICAgICAgICBkaW1lbnNpb25zOiB7IHR5cGU6ICc0ZnYnLCB2YWx1ZTogWzAsIDAsIDAsIDBdIH1cbiAgICAgICAgfVxuICAgICk7XG59XG5cblJHQlNwbGl0RmlsdGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoY29yZS5BYnN0cmFjdEZpbHRlci5wcm90b3R5cGUpO1xuUkdCU3BsaXRGaWx0ZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gUkdCU3BsaXRGaWx0ZXI7XG5tb2R1bGUuZXhwb3J0cyA9IFJHQlNwbGl0RmlsdGVyO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhSR0JTcGxpdEZpbHRlci5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBSZWQgY2hhbm5lbCBvZmZzZXQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlBvaW50fVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuUkdCU3BsaXRGaWx0ZXIjXG4gICAgICovXG4gICAgcmVkOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudW5pZm9ybXMucmVkLnZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy5yZWQudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBHcmVlbiBjaGFubmVsIG9mZnNldC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuUG9pbnR9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5SR0JTcGxpdEZpbHRlciNcbiAgICAgKi9cbiAgICBncmVlbjoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVuaWZvcm1zLmdyZWVuLnZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy5ncmVlbi52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIEJsdWUgb2Zmc2V0LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5Qb2ludH1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLlJHQlNwbGl0RmlsdGVyI1xuICAgICAqL1xuICAgIGJsdWU6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy51bmlmb3Jtcy5ibHVlLnZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy5ibHVlLnZhbHVlID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG59KTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vLi4vY29yZScpO1xuLy8gQHNlZSBodHRwczovL2dpdGh1Yi5jb20vc3Vic3RhY2svYnJmcy9pc3N1ZXMvMjVcblxuXG4vKipcbiAqIFRoaXMgYXBwbGllcyBhIHNlcGlhIGVmZmVjdCB0byB5b3VyIERpc3BsYXkgT2JqZWN0cy5cbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQWJzdHJhY3RGaWx0ZXJcbiAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnNcbiAqL1xuZnVuY3Rpb24gU2VwaWFGaWx0ZXIoKVxue1xuICAgIGNvcmUuQWJzdHJhY3RGaWx0ZXIuY2FsbCh0aGlzLFxuICAgICAgICAvLyB2ZXJ0ZXggc2hhZGVyXG4gICAgICAgIG51bGwsXG4gICAgICAgIC8vIGZyYWdtZW50IHNoYWRlclxuICAgICAgICBcInByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xcblxcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xcblxcbnVuaWZvcm0gc2FtcGxlcjJEIHVTYW1wbGVyO1xcbnVuaWZvcm0gZmxvYXQgc2VwaWE7XFxuXFxuY29uc3QgbWF0MyBzZXBpYU1hdHJpeCA9IG1hdDMoMC4zNTg4LCAwLjcwNDQsIDAuMTM2OCwgMC4yOTkwLCAwLjU4NzAsIDAuMTE0MCwgMC4yMzkyLCAwLjQ2OTYsIDAuMDkxMik7XFxuXFxudm9pZCBtYWluKHZvaWQpXFxue1xcbiAgIGdsX0ZyYWdDb2xvciA9IHRleHR1cmUyRCh1U2FtcGxlciwgdlRleHR1cmVDb29yZCk7XFxuICAgZ2xfRnJhZ0NvbG9yLnJnYiA9IG1peCggZ2xfRnJhZ0NvbG9yLnJnYiwgZ2xfRnJhZ0NvbG9yLnJnYiAqIHNlcGlhTWF0cml4LCBzZXBpYSk7XFxufVxcblwiLFxuICAgICAgICAvLyBjdXN0b20gdW5pZm9ybXNcbiAgICAgICAge1xuICAgICAgICAgICAgc2VwaWE6IHsgdHlwZTogJzFmJywgdmFsdWU6IDEgfVxuICAgICAgICB9XG4gICAgKTtcbn1cblxuU2VwaWFGaWx0ZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShjb3JlLkFic3RyYWN0RmlsdGVyLnByb3RvdHlwZSk7XG5TZXBpYUZpbHRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBTZXBpYUZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gU2VwaWFGaWx0ZXI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKFNlcGlhRmlsdGVyLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFRoZSBzdHJlbmd0aCBvZiB0aGUgc2VwaWEuIGAxYCB3aWxsIGFwcGx5IHRoZSBmdWxsIHNlcGlhIGVmZmVjdCwgYW5kXG4gICAgICogYDBgIHdpbGwgbWFrZSB0aGUgb2JqZWN0IGl0cyBub3JtYWwgY29sb3IuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5TZXBpYUZpbHRlciNcbiAgICAgKi9cbiAgICBzZXBpYToge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVuaWZvcm1zLnNlcGlhLnZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy5zZXBpYS52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfVxufSk7XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uLy4uL2NvcmUnKTtcbi8vIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL3N1YnN0YWNrL2JyZnMvaXNzdWVzLzI1XG5cblxuLyoqXG4gKiBUaGUgQ29sb3JNYXRyaXhGaWx0ZXIgY2xhc3MgbGV0cyB5b3UgYXBwbHkgYSA0eDQgbWF0cml4IHRyYW5zZm9ybWF0aW9uIG9uIHRoZSBSR0JBXG4gKiBjb2xvciBhbmQgYWxwaGEgdmFsdWVzIG9mIGV2ZXJ5IHBpeGVsIG9uIHlvdXIgZGlzcGxheU9iamVjdCB0byBwcm9kdWNlIGEgcmVzdWx0XG4gKiB3aXRoIGEgbmV3IHNldCBvZiBSR0JBIGNvbG9yIGFuZCBhbHBoYSB2YWx1ZXMuIEl0J3MgcHJldHR5IHBvd2VyZnVsIVxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5BYnN0cmFjdEZpbHRlclxuICogQG1lbWJlcm9mIFBJWEkuZmlsdGVyc1xuICovXG5mdW5jdGlvbiBTaG9ja3dhdmVGaWx0ZXIoKVxue1xuICAgIGNvcmUuQWJzdHJhY3RGaWx0ZXIuY2FsbCh0aGlzLFxuICAgICAgICAvLyB2ZXJ0ZXggc2hhZGVyXG4gICAgICAgIG51bGwsXG4gICAgICAgIC8vIGZyYWdtZW50IHNoYWRlclxuICAgICAgICBcInByZWNpc2lvbiBsb3dwIGZsb2F0O1xcblxcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xcblxcbnVuaWZvcm0gc2FtcGxlcjJEIHVTYW1wbGVyO1xcblxcbnVuaWZvcm0gdmVjMiBjZW50ZXI7XFxudW5pZm9ybSB2ZWMzIHBhcmFtczsgLy8gMTAuMCwgMC44LCAwLjFcXG51bmlmb3JtIGZsb2F0IHRpbWU7XFxuXFxudm9pZCBtYWluKClcXG57XFxuICAgIHZlYzIgdXYgPSB2VGV4dHVyZUNvb3JkO1xcbiAgICB2ZWMyIHRleENvb3JkID0gdXY7XFxuXFxuICAgIGZsb2F0IGRpc3QgPSBkaXN0YW5jZSh1diwgY2VudGVyKTtcXG5cXG4gICAgaWYgKCAoZGlzdCA8PSAodGltZSArIHBhcmFtcy56KSkgJiYgKGRpc3QgPj0gKHRpbWUgLSBwYXJhbXMueikpIClcXG4gICAge1xcbiAgICAgICAgZmxvYXQgZGlmZiA9IChkaXN0IC0gdGltZSk7XFxuICAgICAgICBmbG9hdCBwb3dEaWZmID0gMS4wIC0gcG93KGFicyhkaWZmKnBhcmFtcy54KSwgcGFyYW1zLnkpO1xcblxcbiAgICAgICAgZmxvYXQgZGlmZlRpbWUgPSBkaWZmICAqIHBvd0RpZmY7XFxuICAgICAgICB2ZWMyIGRpZmZVViA9IG5vcm1hbGl6ZSh1diAtIGNlbnRlcik7XFxuICAgICAgICB0ZXhDb29yZCA9IHV2ICsgKGRpZmZVViAqIGRpZmZUaW1lKTtcXG4gICAgfVxcblxcbiAgICBnbF9GcmFnQ29sb3IgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHRleENvb3JkKTtcXG59XFxuXCIsXG4gICAgICAgIC8vIGN1c3RvbSB1bmlmb3Jtc1xuICAgICAgICB7XG4gICAgICAgICAgICBjZW50ZXI6IHsgdHlwZTogJ3YyJywgdmFsdWU6IHsgeDogMC41LCB5OiAwLjUgfSB9LFxuICAgICAgICAgICAgcGFyYW1zOiB7IHR5cGU6ICd2MycsIHZhbHVlOiB7IHg6IDEwLCB5OiAwLjgsIHo6IDAuMSB9IH0sXG4gICAgICAgICAgICB0aW1lOiB7IHR5cGU6ICcxZicsIHZhbHVlOiAwIH1cbiAgICAgICAgfVxuICAgICk7XG59XG5cblNob2Nrd2F2ZUZpbHRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuQWJzdHJhY3RGaWx0ZXIucHJvdG90eXBlKTtcblNob2Nrd2F2ZUZpbHRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBTaG9ja3dhdmVGaWx0ZXI7XG5tb2R1bGUuZXhwb3J0cyA9IFNob2Nrd2F2ZUZpbHRlcjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoU2hvY2t3YXZlRmlsdGVyLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIGNlbnRlciBvZiB0aGUgc2hvY2t3YXZlIGluIG5vcm1hbGl6ZWQgc2NyZWVuIGNvb3Jkcy4gVGhhdCBpc1xuICAgICAqICgwLDApIGlzIHRoZSB0b3AtbGVmdCBhbmQgKDEsMSkgaXMgdGhlIGJvdHRvbSByaWdodC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge29iamVjdDxzdHJpbmcsIG51bWJlcj59XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5TaG9ja3dhdmVGaWx0ZXIjXG4gICAgICovXG4gICAgY2VudGVyOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudW5pZm9ybXMuY2VudGVyLnZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy5jZW50ZXIudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgcGFyYW1zIG9mIHRoZSBzaG9ja3dhdmUuIFRoZXNlIG1vZGlmeSB0aGUgbG9vayBhbmQgYmVoYXZpb3Igb2ZcbiAgICAgKiB0aGUgc2hvY2t3YXZlIGFzIGl0IHJpcHBsZXMgb3V0LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7b2JqZWN0PHN0cmluZywgbnVtYmVyPn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLlNob2Nrd2F2ZUZpbHRlciNcbiAgICAgKi9cbiAgICBwYXJhbXM6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy51bmlmb3Jtcy5wYXJhbXMudmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLnBhcmFtcy52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfSxcbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBlbGFwc2VkIHRpbWUgb2YgdGhlIHNob2Nrd2F2ZS4gVGhpcyBjb250cm9scyB0aGUgc3BlZWQgYXQgd2hpY2hcbiAgICAgKiB0aGUgc2hvY2t3YXZlIHJpcHBsZXMgb3V0LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuU2hvY2t3YXZlRmlsdGVyI1xuICAgICAqL1xuICAgIHRpbWU6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy51bmlmb3Jtcy50aW1lLnZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy50aW1lLnZhbHVlID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG59KTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vLi4vY29yZScpO1xuLy8gQHNlZSBodHRwczovL2dpdGh1Yi5jb20vc3Vic3RhY2svYnJmcy9pc3N1ZXMvMjVcblxuXG4vKipcbiAqIEBhdXRob3IgVmljbyBAdmljb2NvdGVhXG4gKiBvcmlnaW5hbCBmaWx0ZXIgaHR0cHM6Ly9naXRodWIuY29tL2V2YW53L2dsZnguanMvYmxvYi9tYXN0ZXIvc3JjL2ZpbHRlcnMvYmx1ci90aWx0c2hpZnQuanMgYnkgRXZhbiBXYWxsYWNlIDogaHR0cDovL21hZGVieWV2YW4uY29tL1xuICovXG5cbi8qKlxuICogQSBUaWx0U2hpZnRBeGlzRmlsdGVyLlxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5BYnN0cmFjdEZpbHRlclxuICogQG1lbWJlcm9mIFBJWEkuZmlsdGVyc1xuICovXG5mdW5jdGlvbiBUaWx0U2hpZnRBeGlzRmlsdGVyKClcbntcbiAgICBjb3JlLkFic3RyYWN0RmlsdGVyLmNhbGwodGhpcyxcbiAgICAgICAgLy8gdmVydGV4IHNoYWRlclxuICAgICAgICBudWxsLFxuICAgICAgICAvLyBmcmFnbWVudCBzaGFkZXJcbiAgICAgICAgXCJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcXG5cXG52YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDtcXG5cXG51bmlmb3JtIHNhbXBsZXIyRCB1U2FtcGxlcjtcXG51bmlmb3JtIGZsb2F0IGJsdXI7XFxudW5pZm9ybSBmbG9hdCBncmFkaWVudEJsdXI7XFxudW5pZm9ybSB2ZWMyIHN0YXJ0O1xcbnVuaWZvcm0gdmVjMiBlbmQ7XFxudW5pZm9ybSB2ZWMyIGRlbHRhO1xcbnVuaWZvcm0gdmVjMiB0ZXhTaXplO1xcblxcbmZsb2F0IHJhbmRvbSh2ZWMzIHNjYWxlLCBmbG9hdCBzZWVkKVxcbntcXG4gICAgcmV0dXJuIGZyYWN0KHNpbihkb3QoZ2xfRnJhZ0Nvb3JkLnh5eiArIHNlZWQsIHNjYWxlKSkgKiA0Mzc1OC41NDUzICsgc2VlZCk7XFxufVxcblxcbnZvaWQgbWFpbih2b2lkKVxcbntcXG4gICAgdmVjNCBjb2xvciA9IHZlYzQoMC4wKTtcXG4gICAgZmxvYXQgdG90YWwgPSAwLjA7XFxuXFxuICAgIGZsb2F0IG9mZnNldCA9IHJhbmRvbSh2ZWMzKDEyLjk4OTgsIDc4LjIzMywgMTUxLjcxODIpLCAwLjApO1xcbiAgICB2ZWMyIG5vcm1hbCA9IG5vcm1hbGl6ZSh2ZWMyKHN0YXJ0LnkgLSBlbmQueSwgZW5kLnggLSBzdGFydC54KSk7XFxuICAgIGZsb2F0IHJhZGl1cyA9IHNtb290aHN0ZXAoMC4wLCAxLjAsIGFicyhkb3QodlRleHR1cmVDb29yZCAqIHRleFNpemUgLSBzdGFydCwgbm9ybWFsKSkgLyBncmFkaWVudEJsdXIpICogYmx1cjtcXG5cXG4gICAgZm9yIChmbG9hdCB0ID0gLTMwLjA7IHQgPD0gMzAuMDsgdCsrKVxcbiAgICB7XFxuICAgICAgICBmbG9hdCBwZXJjZW50ID0gKHQgKyBvZmZzZXQgLSAwLjUpIC8gMzAuMDtcXG4gICAgICAgIGZsb2F0IHdlaWdodCA9IDEuMCAtIGFicyhwZXJjZW50KTtcXG4gICAgICAgIHZlYzQgc2FtcGxlID0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2VGV4dHVyZUNvb3JkICsgZGVsdGEgLyB0ZXhTaXplICogcGVyY2VudCAqIHJhZGl1cyk7XFxuICAgICAgICBzYW1wbGUucmdiICo9IHNhbXBsZS5hO1xcbiAgICAgICAgY29sb3IgKz0gc2FtcGxlICogd2VpZ2h0O1xcbiAgICAgICAgdG90YWwgKz0gd2VpZ2h0O1xcbiAgICB9XFxuXFxuICAgIGdsX0ZyYWdDb2xvciA9IGNvbG9yIC8gdG90YWw7XFxuICAgIGdsX0ZyYWdDb2xvci5yZ2IgLz0gZ2xfRnJhZ0NvbG9yLmEgKyAwLjAwMDAxO1xcbn1cXG5cIixcbiAgICAgICAgLy8gY3VzdG9tIHVuaWZvcm1zXG4gICAgICAgIHtcbiAgICAgICAgICAgIGJsdXI6ICAgICAgICAgICB7IHR5cGU6ICcxZicsIHZhbHVlOiAxMDAgfSxcbiAgICAgICAgICAgIGdyYWRpZW50Qmx1cjogICB7IHR5cGU6ICcxZicsIHZhbHVlOiA2MDAgfSxcbiAgICAgICAgICAgIHN0YXJ0OiAgICAgICAgICB7IHR5cGU6ICd2MicsIHZhbHVlOiB7IHg6IDAsICAgIHk6IHdpbmRvdy5pbm5lckhlaWdodCAvIDIgfSB9LFxuICAgICAgICAgICAgZW5kOiAgICAgICAgICAgIHsgdHlwZTogJ3YyJywgdmFsdWU6IHsgeDogNjAwLCAgeTogd2luZG93LmlubmVySGVpZ2h0IC8gMiB9IH0sXG4gICAgICAgICAgICBkZWx0YTogICAgICAgICAgeyB0eXBlOiAndjInLCB2YWx1ZTogeyB4OiAzMCwgICB5OiAzMCB9IH0sXG4gICAgICAgICAgICB0ZXhTaXplOiAgICAgICAgeyB0eXBlOiAndjInLCB2YWx1ZTogeyB4OiB3aW5kb3cuaW5uZXJXaWR0aCwgeTogd2luZG93LmlubmVySGVpZ2h0IH0gfVxuICAgICAgICB9XG4gICAgKTtcblxuICAgIHRoaXMudXBkYXRlRGVsdGEoKTtcbn1cblxuVGlsdFNoaWZ0QXhpc0ZpbHRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuQWJzdHJhY3RGaWx0ZXIucHJvdG90eXBlKTtcblRpbHRTaGlmdEF4aXNGaWx0ZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gVGlsdFNoaWZ0QXhpc0ZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gVGlsdFNoaWZ0QXhpc0ZpbHRlcjtcblxuLyoqXG4gKiBVcGRhdGVzIHRoZSBmaWx0ZXIgZGVsdGEgdmFsdWVzLlxuICogVGhpcyBpcyBvdmVycmlkZGVuIGluIHRoZSBYIGFuZCBZIGZpbHRlcnMsIGRvZXMgbm90aGluZyBmb3IgdGhpcyBjbGFzcy5cbiAqXG4gKi9cblRpbHRTaGlmdEF4aXNGaWx0ZXIucHJvdG90eXBlLnVwZGF0ZURlbHRhID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLnVuaWZvcm1zLmRlbHRhLnZhbHVlLnggPSAwO1xuICAgIHRoaXMudW5pZm9ybXMuZGVsdGEudmFsdWUueSA9IDA7XG59O1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhUaWx0U2hpZnRBeGlzRmlsdGVyLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFRoZSBzdHJlbmd0aCBvZiB0aGUgYmx1ci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLlRpbHRTaGlmdEF4aXNGaWx0ZXIjXG4gICAgICovXG4gICAgYmx1cjoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVuaWZvcm1zLmJsdXIudmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLmJsdXIudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBUaGUgc3RyZW5ndGggb2YgdGhlIGdyYWRpZW50IGJsdXIuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5UaWx0U2hpZnRBeGlzRmlsdGVyI1xuICAgICAqL1xuICAgIGdyYWRpZW50Qmx1cjoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVuaWZvcm1zLmdyYWRpZW50Qmx1ci52YWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudW5pZm9ybXMuZ3JhZGllbnRCbHVyLnZhbHVlID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVGhlIFggdmFsdWUgdG8gc3RhcnQgdGhlIGVmZmVjdCBhdC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuUG9pbnR9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5UaWx0U2hpZnRBeGlzRmlsdGVyI1xuICAgICAqL1xuICAgIHN0YXJ0OiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudW5pZm9ybXMuc3RhcnQudmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLnN0YXJ0LnZhbHVlID0gdmFsdWU7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZURlbHRhKCk7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVGhlIFggdmFsdWUgdG8gZW5kIHRoZSBlZmZlY3QgYXQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlBvaW50fVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuVGlsdFNoaWZ0QXhpc0ZpbHRlciNcbiAgICAgKi9cbiAgICBlbmQ6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy51bmlmb3Jtcy5lbmQudmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLmVuZC52YWx1ZSA9IHZhbHVlO1xuICAgICAgICAgICAgdGhpcy51cGRhdGVEZWx0YSgpO1xuICAgICAgICB9XG4gICAgfVxufSk7XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uLy4uL2NvcmUnKSxcbiAgICBUaWx0U2hpZnRYRmlsdGVyID0gcmVxdWlyZSgnLi9UaWx0U2hpZnRYRmlsdGVyJyksXG4gICAgVGlsdFNoaWZ0WUZpbHRlciA9IHJlcXVpcmUoJy4vVGlsdFNoaWZ0WUZpbHRlcicpO1xuXG4vKipcbiAqIEBhdXRob3IgVmljbyBAdmljb2NvdGVhXG4gKiBvcmlnaW5hbCBmaWx0ZXIgaHR0cHM6Ly9naXRodWIuY29tL2V2YW53L2dsZnguanMvYmxvYi9tYXN0ZXIvc3JjL2ZpbHRlcnMvYmx1ci90aWx0c2hpZnQuanMgYnkgRXZhbiBXYWxsYWNlIDogaHR0cDovL21hZGVieWV2YW4uY29tL1xuICovXG5cbi8qKlxuICogQSBUaWx0U2hpZnQgRmlsdGVyLiBNYW5hZ2VzIHRoZSBwYXNzIG9mIGJvdGggYSBUaWx0U2hpZnRYRmlsdGVyIGFuZCBUaWx0U2hpZnRZRmlsdGVyLlxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5BYnN0cmFjdEZpbHRlclxuICogQG1lbWJlcm9mIFBJWEkuZmlsdGVyc1xuICovXG5mdW5jdGlvbiBUaWx0U2hpZnRGaWx0ZXIoKVxue1xuICAgIGNvcmUuQWJzdHJhY3RGaWx0ZXIuY2FsbCh0aGlzKTtcblxuICAgIHRoaXMudGlsdFNoaWZ0WEZpbHRlciA9IG5ldyBUaWx0U2hpZnRYRmlsdGVyKCk7XG4gICAgdGhpcy50aWx0U2hpZnRZRmlsdGVyID0gbmV3IFRpbHRTaGlmdFlGaWx0ZXIoKTtcbn1cblxuVGlsdFNoaWZ0RmlsdGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoY29yZS5BYnN0cmFjdEZpbHRlci5wcm90b3R5cGUpO1xuVGlsdFNoaWZ0RmlsdGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFRpbHRTaGlmdEZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gVGlsdFNoaWZ0RmlsdGVyO1xuXG5UaWx0U2hpZnRGaWx0ZXIucHJvdG90eXBlLmFwcGx5RmlsdGVyID0gZnVuY3Rpb24gKHJlbmRlcmVyLCBpbnB1dCwgb3V0cHV0KVxue1xuICAgIHZhciByZW5kZXJUYXJnZXQgPSByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLmdldFJlbmRlclRhcmdldCh0cnVlKTtcblxuICAgIHRoaXMudGlsdFNoaWZ0WEZpbHRlci5hcHBseUZpbHRlcihyZW5kZXJlciwgaW5wdXQsIHJlbmRlclRhcmdldCk7XG5cbiAgICB0aGlzLnRpbHRTaGlmdFlGaWx0ZXIuYXBwbHlGaWx0ZXIocmVuZGVyZXIsIHJlbmRlclRhcmdldCwgb3V0cHV0KTtcblxuICAgIHJlbmRlcmVyLmZpbHRlck1hbmFnZXIucmV0dXJuUmVuZGVyVGFyZ2V0KHJlbmRlclRhcmdldCk7XG59O1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhUaWx0U2hpZnRGaWx0ZXIucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogVGhlIHN0cmVuZ3RoIG9mIHRoZSBibHVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuVGlsdFNoaWZ0RmlsdGVyI1xuICAgICAqL1xuICAgIGJsdXI6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy50aWx0U2hpZnRYRmlsdGVyLmJsdXI7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnRpbHRTaGlmdFhGaWx0ZXIuYmx1ciA9IHRoaXMudGlsdFNoaWZ0WUZpbHRlci5ibHVyID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVGhlIHN0cmVuZ3RoIG9mIHRoZSBncmFkaWVudCBibHVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuVGlsdFNoaWZ0RmlsdGVyI1xuICAgICAqL1xuICAgIGdyYWRpZW50Qmx1cjoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnRpbHRTaGlmdFhGaWx0ZXIuZ3JhZGllbnRCbHVyO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy50aWx0U2hpZnRYRmlsdGVyLmdyYWRpZW50Qmx1ciA9IHRoaXMudGlsdFNoaWZ0WUZpbHRlci5ncmFkaWVudEJsdXIgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBUaGUgWSB2YWx1ZSB0byBzdGFydCB0aGUgZWZmZWN0IGF0LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuVGlsdFNoaWZ0RmlsdGVyI1xuICAgICAqL1xuICAgIHN0YXJ0OiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudGlsdFNoaWZ0WEZpbHRlci5zdGFydDtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudGlsdFNoaWZ0WEZpbHRlci5zdGFydCA9IHRoaXMudGlsdFNoaWZ0WUZpbHRlci5zdGFydCA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFRoZSBZIHZhbHVlIHRvIGVuZCB0aGUgZWZmZWN0IGF0LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuVGlsdFNoaWZ0RmlsdGVyI1xuICAgICAqL1xuICAgIGVuZDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnRpbHRTaGlmdFhGaWx0ZXIuZW5kO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy50aWx0U2hpZnRYRmlsdGVyLmVuZCA9IHRoaXMudGlsdFNoaWZ0WUZpbHRlci5lbmQgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuIiwidmFyIFRpbHRTaGlmdEF4aXNGaWx0ZXIgPSByZXF1aXJlKCcuL1RpbHRTaGlmdEF4aXNGaWx0ZXInKTtcblxuLyoqXG4gKiBAYXV0aG9yIFZpY28gQHZpY29jb3RlYVxuICogb3JpZ2luYWwgZmlsdGVyIGh0dHBzOi8vZ2l0aHViLmNvbS9ldmFudy9nbGZ4LmpzL2Jsb2IvbWFzdGVyL3NyYy9maWx0ZXJzL2JsdXIvdGlsdHNoaWZ0LmpzIGJ5IEV2YW4gV2FsbGFjZSA6IGh0dHA6Ly9tYWRlYnlldmFuLmNvbS9cbiAqL1xuXG4vKipcbiAqIEEgVGlsdFNoaWZ0WEZpbHRlci5cbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuVGlsdFNoaWZ0QXhpc0ZpbHRlclxuICogQG1lbWJlcm9mIFBJWEkuZmlsdGVyc1xuICovXG5mdW5jdGlvbiBUaWx0U2hpZnRYRmlsdGVyKClcbntcbiAgICBUaWx0U2hpZnRBeGlzRmlsdGVyLmNhbGwodGhpcyk7XG59XG5cblRpbHRTaGlmdFhGaWx0ZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShUaWx0U2hpZnRBeGlzRmlsdGVyLnByb3RvdHlwZSk7XG5UaWx0U2hpZnRYRmlsdGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFRpbHRTaGlmdFhGaWx0ZXI7XG5tb2R1bGUuZXhwb3J0cyA9IFRpbHRTaGlmdFhGaWx0ZXI7XG5cbi8qKlxuICogVXBkYXRlcyB0aGUgZmlsdGVyIGRlbHRhIHZhbHVlcy5cbiAqXG4gKi9cblRpbHRTaGlmdFhGaWx0ZXIucHJvdG90eXBlLnVwZGF0ZURlbHRhID0gZnVuY3Rpb24gKClcbntcbiAgICB2YXIgZHggPSB0aGlzLnVuaWZvcm1zLmVuZC52YWx1ZS54IC0gdGhpcy51bmlmb3Jtcy5zdGFydC52YWx1ZS54O1xuICAgIHZhciBkeSA9IHRoaXMudW5pZm9ybXMuZW5kLnZhbHVlLnkgLSB0aGlzLnVuaWZvcm1zLnN0YXJ0LnZhbHVlLnk7XG4gICAgdmFyIGQgPSBNYXRoLnNxcnQoZHggKiBkeCArIGR5ICogZHkpO1xuXG4gICAgdGhpcy51bmlmb3Jtcy5kZWx0YS52YWx1ZS54ID0gZHggLyBkO1xuICAgIHRoaXMudW5pZm9ybXMuZGVsdGEudmFsdWUueSA9IGR5IC8gZDtcbn07XG4iLCJ2YXIgVGlsdFNoaWZ0QXhpc0ZpbHRlciA9IHJlcXVpcmUoJy4vVGlsdFNoaWZ0QXhpc0ZpbHRlcicpO1xuXG4vKipcbiAqIEBhdXRob3IgVmljbyBAdmljb2NvdGVhXG4gKiBvcmlnaW5hbCBmaWx0ZXIgaHR0cHM6Ly9naXRodWIuY29tL2V2YW53L2dsZnguanMvYmxvYi9tYXN0ZXIvc3JjL2ZpbHRlcnMvYmx1ci90aWx0c2hpZnQuanMgYnkgRXZhbiBXYWxsYWNlIDogaHR0cDovL21hZGVieWV2YW4uY29tL1xuICovXG5cbi8qKlxuICogQSBUaWx0U2hpZnRZRmlsdGVyLlxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5UaWx0U2hpZnRBeGlzRmlsdGVyXG4gKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzXG4gKi9cbmZ1bmN0aW9uIFRpbHRTaGlmdFlGaWx0ZXIoKVxue1xuICAgIFRpbHRTaGlmdEF4aXNGaWx0ZXIuY2FsbCh0aGlzKTtcbn1cblxuVGlsdFNoaWZ0WUZpbHRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFRpbHRTaGlmdEF4aXNGaWx0ZXIucHJvdG90eXBlKTtcblRpbHRTaGlmdFlGaWx0ZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gVGlsdFNoaWZ0WUZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gVGlsdFNoaWZ0WUZpbHRlcjtcblxuLyoqXG4gKiBVcGRhdGVzIHRoZSBmaWx0ZXIgZGVsdGEgdmFsdWVzLlxuICpcbiAqL1xuVGlsdFNoaWZ0WUZpbHRlci5wcm90b3R5cGUudXBkYXRlRGVsdGEgPSBmdW5jdGlvbiAoKVxue1xuICAgIHZhciBkeCA9IHRoaXMudW5pZm9ybXMuZW5kLnZhbHVlLnggLSB0aGlzLnVuaWZvcm1zLnN0YXJ0LnZhbHVlLng7XG4gICAgdmFyIGR5ID0gdGhpcy51bmlmb3Jtcy5lbmQudmFsdWUueSAtIHRoaXMudW5pZm9ybXMuc3RhcnQudmFsdWUueTtcbiAgICB2YXIgZCA9IE1hdGguc3FydChkeCAqIGR4ICsgZHkgKiBkeSk7XG5cbiAgICB0aGlzLnVuaWZvcm1zLmRlbHRhLnZhbHVlLnggPSAtZHkgLyBkO1xuICAgIHRoaXMudW5pZm9ybXMuZGVsdGEudmFsdWUueSA9IGR4IC8gZDtcbn07XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uLy4uL2NvcmUnKTtcbi8vIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL3N1YnN0YWNrL2JyZnMvaXNzdWVzLzI1XG5cblxuLyoqXG4gKiBUaGlzIGZpbHRlciBhcHBsaWVzIGEgdHdpc3QgZWZmZWN0IG1ha2luZyBkaXNwbGF5IG9iamVjdHMgYXBwZWFyIHR3aXN0ZWQgaW4gdGhlIGdpdmVuIGRpcmVjdGlvbi5cbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQWJzdHJhY3RGaWx0ZXJcbiAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnNcbiAqL1xuZnVuY3Rpb24gVHdpc3RGaWx0ZXIoKVxue1xuICAgIGNvcmUuQWJzdHJhY3RGaWx0ZXIuY2FsbCh0aGlzLFxuICAgICAgICAvLyB2ZXJ0ZXggc2hhZGVyXG4gICAgICAgIG51bGwsXG4gICAgICAgIC8vIGZyYWdtZW50IHNoYWRlclxuICAgICAgICBcInByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xcblxcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xcblxcbnVuaWZvcm0gc2FtcGxlcjJEIHVTYW1wbGVyO1xcbnVuaWZvcm0gZmxvYXQgcmFkaXVzO1xcbnVuaWZvcm0gZmxvYXQgYW5nbGU7XFxudW5pZm9ybSB2ZWMyIG9mZnNldDtcXG5cXG52b2lkIG1haW4odm9pZClcXG57XFxuICAgdmVjMiBjb29yZCA9IHZUZXh0dXJlQ29vcmQgLSBvZmZzZXQ7XFxuICAgZmxvYXQgZGlzdCA9IGxlbmd0aChjb29yZCk7XFxuXFxuICAgaWYgKGRpc3QgPCByYWRpdXMpXFxuICAge1xcbiAgICAgICBmbG9hdCByYXRpbyA9IChyYWRpdXMgLSBkaXN0KSAvIHJhZGl1cztcXG4gICAgICAgZmxvYXQgYW5nbGVNb2QgPSByYXRpbyAqIHJhdGlvICogYW5nbGU7XFxuICAgICAgIGZsb2F0IHMgPSBzaW4oYW5nbGVNb2QpO1xcbiAgICAgICBmbG9hdCBjID0gY29zKGFuZ2xlTW9kKTtcXG4gICAgICAgY29vcmQgPSB2ZWMyKGNvb3JkLnggKiBjIC0gY29vcmQueSAqIHMsIGNvb3JkLnggKiBzICsgY29vcmQueSAqIGMpO1xcbiAgIH1cXG5cXG4gICBnbF9GcmFnQ29sb3IgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIGNvb3JkK29mZnNldCk7XFxufVxcblwiLFxuICAgICAgICAvLyBjdXN0b20gdW5pZm9ybXNcbiAgICAgICAge1xuICAgICAgICAgICAgcmFkaXVzOiAgICAgeyB0eXBlOiAnMWYnLCB2YWx1ZTogMC41IH0sXG4gICAgICAgICAgICBhbmdsZTogICAgICB7IHR5cGU6ICcxZicsIHZhbHVlOiA1IH0sXG4gICAgICAgICAgICBvZmZzZXQ6ICAgICB7IHR5cGU6ICd2MicsIHZhbHVlOiB7IHg6IDAuNSwgeTogMC41IH0gfVxuICAgICAgICB9XG4gICAgKTtcbn1cblxuVHdpc3RGaWx0ZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShjb3JlLkFic3RyYWN0RmlsdGVyLnByb3RvdHlwZSk7XG5Ud2lzdEZpbHRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBUd2lzdEZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gVHdpc3RGaWx0ZXI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKFR3aXN0RmlsdGVyLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFRoaXMgcG9pbnQgZGVzY3JpYmVzIHRoZSB0aGUgb2Zmc2V0IG9mIHRoZSB0d2lzdC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuUG9pbnR9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5Ud2lzdEZpbHRlciNcbiAgICAgKi9cbiAgICBvZmZzZXQ6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy51bmlmb3Jtcy5vZmZzZXQudmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLm9mZnNldC52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFRoaXMgcmFkaXVzIG9mIHRoZSB0d2lzdC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLlR3aXN0RmlsdGVyI1xuICAgICAqL1xuICAgIHJhZGl1czoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVuaWZvcm1zLnJhZGl1cy52YWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudW5pZm9ybXMucmFkaXVzLnZhbHVlID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVGhpcyBhbmdsZSBvZiB0aGUgdHdpc3QuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5Ud2lzdEZpbHRlciNcbiAgICAgKi9cbiAgICBhbmdsZToge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVuaWZvcm1zLmFuZ2xlLnZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy5hbmdsZS52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfVxufSk7XG4iLCIvLyBydW4gdGhlIHBvbHlmaWxsc1xucmVxdWlyZSgnLi9wb2x5ZmlsbCcpO1xuXG52YXIgY29yZSA9IG1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9jb3JlJyk7XG5cbi8vIGFkZCBjb3JlIHBsdWdpbnMuXG5jb3JlLmV4dHJhcyAgICAgICAgID0gcmVxdWlyZSgnLi9leHRyYXMnKTtcbmNvcmUuZmlsdGVycyAgICAgICAgPSByZXF1aXJlKCcuL2ZpbHRlcnMnKTtcbmNvcmUuaW50ZXJhY3Rpb24gICAgPSByZXF1aXJlKCcuL2ludGVyYWN0aW9uJyk7XG5jb3JlLmxvYWRlcnMgICAgICAgID0gcmVxdWlyZSgnLi9sb2FkZXJzJyk7XG5jb3JlLm1lc2ggICAgICAgICAgID0gcmVxdWlyZSgnLi9tZXNoJyk7XG5jb3JlLmFjY2Vzc2liaWxpdHkgID0gcmVxdWlyZSgnLi9hY2Nlc3NpYmlsaXR5Jyk7XG5cbi8vIGV4cG9ydCBhIHByZW1hZGUgbG9hZGVyIGluc3RhbmNlXG4vKipcbiAqIEEgcHJlbWFkZSBpbnN0YW5jZSBvZiB0aGUgbG9hZGVyIHRoYXQgY2FuIGJlIHVzZWQgdG8gbG9hZGVyIHJlc291cmNlcy5cbiAqXG4gKiBAbmFtZSBsb2FkZXJcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcHJvcGVydHkge1BJWEkubG9hZGVycy5Mb2FkZXJ9XG4gKi9cbmNvcmUubG9hZGVyID0gbmV3IGNvcmUubG9hZGVycy5Mb2FkZXIoKTtcblxuLy8gbWl4aW4gdGhlIGRlcHJlY2F0aW9uIGZlYXR1cmVzLlxuT2JqZWN0LmFzc2lnbihjb3JlLCByZXF1aXJlKCcuL2RlcHJlY2F0aW9uJykpO1xuXG4vLyBBbHdheXMgZXhwb3J0IHBpeGkgZ2xvYmFsbHkuXG5nbG9iYWwuUElYSSA9IGNvcmU7XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uL2NvcmUnKTtcblxuLyoqXG4gKiBIb2xkcyBhbGwgaW5mb3JtYXRpb24gcmVsYXRlZCB0byBhbiBJbnRlcmFjdGlvbiBldmVudFxuICpcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWEkuaW50ZXJhY3Rpb25cbiAqL1xuZnVuY3Rpb24gSW50ZXJhY3Rpb25EYXRhKClcbntcbiAgICAvKipcbiAgICAgKiBUaGlzIHBvaW50IHN0b3JlcyB0aGUgZ2xvYmFsIGNvb3JkcyBvZiB3aGVyZSB0aGUgdG91Y2gvbW91c2UgZXZlbnQgaGFwcGVuZWRcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuUG9pbnR9XG4gICAgICovXG4gICAgdGhpcy5nbG9iYWwgPSBuZXcgY29yZS5Qb2ludCgpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHRhcmdldCBTcHJpdGUgdGhhdCB3YXMgaW50ZXJhY3RlZCB3aXRoXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlNwcml0ZX1cbiAgICAgKi9cbiAgICB0aGlzLnRhcmdldCA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBXaGVuIHBhc3NlZCB0byBhbiBldmVudCBoYW5kbGVyLCB0aGlzIHdpbGwgYmUgdGhlIG9yaWdpbmFsIERPTSBFdmVudCB0aGF0IHdhcyBjYXB0dXJlZFxuICAgICAqXG4gICAgICogQG1lbWJlciB7RXZlbnR9XG4gICAgICovXG4gICAgdGhpcy5vcmlnaW5hbEV2ZW50ID0gbnVsbDtcbn1cblxuSW50ZXJhY3Rpb25EYXRhLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IEludGVyYWN0aW9uRGF0YTtcbm1vZHVsZS5leHBvcnRzID0gSW50ZXJhY3Rpb25EYXRhO1xuXG4vKipcbiAqIFRoaXMgd2lsbCByZXR1cm4gdGhlIGxvY2FsIGNvb3JkaW5hdGVzIG9mIHRoZSBzcGVjaWZpZWQgZGlzcGxheU9iamVjdCBmb3IgdGhpcyBJbnRlcmFjdGlvbkRhdGFcbiAqXG4gKiBAcGFyYW0gZGlzcGxheU9iamVjdCB7UElYSS5EaXNwbGF5T2JqZWN0fSBUaGUgRGlzcGxheU9iamVjdCB0aGF0IHlvdSB3b3VsZCBsaWtlIHRoZSBsb2NhbCBjb29yZHMgb2ZmXG4gKiBAcGFyYW0gW3BvaW50XSB7UElYSS5Qb2ludH0gQSBQb2ludCBvYmplY3QgaW4gd2hpY2ggdG8gc3RvcmUgdGhlIHZhbHVlLCBvcHRpb25hbCAob3RoZXJ3aXNlIHdpbGwgY3JlYXRlIGEgbmV3IHBvaW50KVxuICogQHBhcmFtIFtnbG9iYWxQb3NdIHtQSVhJLlBvaW50fSBBIFBvaW50IG9iamVjdCBjb250YWluaW5nIHlvdXIgY3VzdG9tIGdsb2JhbCBjb29yZHMsIG9wdGlvbmFsIChvdGhlcndpc2Ugd2lsbCB1c2UgdGhlIGN1cnJlbnQgZ2xvYmFsIGNvb3JkcylcbiAqIEByZXR1cm4ge1BJWEkuUG9pbnR9IEEgcG9pbnQgY29udGFpbmluZyB0aGUgY29vcmRpbmF0ZXMgb2YgdGhlIEludGVyYWN0aW9uRGF0YSBwb3NpdGlvbiByZWxhdGl2ZSB0byB0aGUgRGlzcGxheU9iamVjdFxuICovXG5JbnRlcmFjdGlvbkRhdGEucHJvdG90eXBlLmdldExvY2FsUG9zaXRpb24gPSBmdW5jdGlvbiAoZGlzcGxheU9iamVjdCwgcG9pbnQsIGdsb2JhbFBvcylcbntcbiAgICByZXR1cm4gZGlzcGxheU9iamVjdC53b3JsZFRyYW5zZm9ybS5hcHBseUludmVyc2UoZ2xvYmFsUG9zIHx8IHRoaXMuZ2xvYmFsLCBwb2ludCk7XG59O1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi9jb3JlJyksXG4gICAgSW50ZXJhY3Rpb25EYXRhID0gcmVxdWlyZSgnLi9JbnRlcmFjdGlvbkRhdGEnKTtcblxuLy8gTWl4IGludGVyYWN0aXZlVGFyZ2V0IGludG8gY29yZS5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZVxuT2JqZWN0LmFzc2lnbihcbiAgICBjb3JlLkRpc3BsYXlPYmplY3QucHJvdG90eXBlLFxuICAgIHJlcXVpcmUoJy4vaW50ZXJhY3RpdmVUYXJnZXQnKVxuKTtcblxuLyoqXG4gKiBUaGUgaW50ZXJhY3Rpb24gbWFuYWdlciBkZWFscyB3aXRoIG1vdXNlIGFuZCB0b3VjaCBldmVudHMuIEFueSBEaXNwbGF5T2JqZWN0IGNhbiBiZSBpbnRlcmFjdGl2ZVxuICogaWYgaXRzIGludGVyYWN0aXZlIHBhcmFtZXRlciBpcyBzZXQgdG8gdHJ1ZVxuICogVGhpcyBtYW5hZ2VyIGFsc28gc3VwcG9ydHMgbXVsdGl0b3VjaC5cbiAqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJLmludGVyYWN0aW9uXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuQ2FudmFzUmVuZGVyZXJ8UElYSS5XZWJHTFJlbmRlcmVyfSBBIHJlZmVyZW5jZSB0byB0aGUgY3VycmVudCByZW5kZXJlclxuICogQHBhcmFtIFtvcHRpb25zXSB7b2JqZWN0fVxuICogQHBhcmFtIFtvcHRpb25zLmF1dG9QcmV2ZW50RGVmYXVsdD10cnVlXSB7Ym9vbGVhbn0gU2hvdWxkIHRoZSBtYW5hZ2VyIGF1dG9tYXRpY2FsbHkgcHJldmVudCBkZWZhdWx0IGJyb3dzZXIgYWN0aW9ucy5cbiAqIEBwYXJhbSBbb3B0aW9ucy5pbnRlcmFjdGlvbkZyZXF1ZW5jeT0xMF0ge251bWJlcn0gRnJlcXVlbmN5IGluY3JlYXNlcyB0aGUgaW50ZXJhY3Rpb24gZXZlbnRzIHdpbGwgYmUgY2hlY2tlZC5cbiAqL1xuZnVuY3Rpb24gSW50ZXJhY3Rpb25NYW5hZ2VyKHJlbmRlcmVyLCBvcHRpb25zKVxue1xuICAgIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuXG4gICAgLyoqXG4gICAgICogVGhlIHJlbmRlcmVyIHRoaXMgaW50ZXJhY3Rpb24gbWFuYWdlciB3b3JrcyBmb3IuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlN5c3RlbVJlbmRlcmVyfVxuICAgICAqL1xuICAgIHRoaXMucmVuZGVyZXIgPSByZW5kZXJlcjtcblxuICAgIC8qKlxuICAgICAqIFNob3VsZCBkZWZhdWx0IGJyb3dzZXIgYWN0aW9ucyBhdXRvbWF0aWNhbGx5IGJlIHByZXZlbnRlZC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICogQGRlZmF1bHQgdHJ1ZVxuICAgICAqL1xuICAgIHRoaXMuYXV0b1ByZXZlbnREZWZhdWx0ID0gb3B0aW9ucy5hdXRvUHJldmVudERlZmF1bHQgIT09IHVuZGVmaW5lZCA/IG9wdGlvbnMuYXV0b1ByZXZlbnREZWZhdWx0IDogdHJ1ZTtcblxuICAgIC8qKlxuICAgICAqIEFzIHRoaXMgZnJlcXVlbmN5IGluY3JlYXNlcyB0aGUgaW50ZXJhY3Rpb24gZXZlbnRzIHdpbGwgYmUgY2hlY2tlZCBtb3JlIG9mdGVuLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDEwXG4gICAgICovXG4gICAgdGhpcy5pbnRlcmFjdGlvbkZyZXF1ZW5jeSA9IG9wdGlvbnMuaW50ZXJhY3Rpb25GcmVxdWVuY3kgfHwgMTA7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgbW91c2UgZGF0YVxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5pbnRlcmFjdGlvbi5JbnRlcmFjdGlvbkRhdGF9XG4gICAgICovXG4gICAgdGhpcy5tb3VzZSA9IG5ldyBJbnRlcmFjdGlvbkRhdGEoKTtcblxuICAgIC8qKlxuICAgICAqIEFuIGV2ZW50IGRhdGEgb2JqZWN0IHRvIGhhbmRsZSBhbGwgdGhlIGV2ZW50IHRyYWNraW5nL2Rpc3BhdGNoaW5nXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtvYmplY3R9XG4gICAgICovXG4gICAgdGhpcy5ldmVudERhdGEgPSB7XG4gICAgICAgIHN0b3BwZWQ6IGZhbHNlLFxuICAgICAgICB0YXJnZXQ6IG51bGwsXG4gICAgICAgIHR5cGU6IG51bGwsXG4gICAgICAgIGRhdGE6IHRoaXMubW91c2UsXG4gICAgICAgIHN0b3BQcm9wYWdhdGlvbjpmdW5jdGlvbigpe1xuICAgICAgICAgICAgdGhpcy5zdG9wcGVkID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH07XG5cbiAgICAvKipcbiAgICAgKiBUaW55IGxpdHRsZSBpbnRlcmFjdGl2ZURhdGEgcG9vbCAhXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLmludGVyYWN0aW9uLkludGVyYWN0aW9uRGF0YVtdfVxuICAgICAqL1xuICAgIHRoaXMuaW50ZXJhY3RpdmVEYXRhUG9vbCA9IFtdO1xuXG4gICAgLyoqXG4gICAgICogVGhlIERPTSBlbGVtZW50IHRvIGJpbmQgdG8uXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtIVE1MRWxlbWVudH1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuaW50ZXJhY3Rpb25ET01FbGVtZW50ID0gbnVsbDtcblxuICAgIC8qKlxuICAgICAqIEhhdmUgZXZlbnRzIGJlZW4gYXR0YWNoZWQgdG8gdGhlIGRvbSBlbGVtZW50P1xuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuZXZlbnRzQWRkZWQgPSBmYWxzZTtcblxuICAgIC8vdGhpcyB3aWxsIG1ha2UgaXQgc28gdGhhdCB5b3UgZG9uJ3QgaGF2ZSB0byBjYWxsIGJpbmQgYWxsIHRoZSB0aW1lXG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtGdW5jdGlvbn1cbiAgICAgKi9cbiAgICB0aGlzLm9uTW91c2VVcCA9IHRoaXMub25Nb3VzZVVwLmJpbmQodGhpcyk7XG4gICAgdGhpcy5wcm9jZXNzTW91c2VVcCA9IHRoaXMucHJvY2Vzc01vdXNlVXAuYmluZCggdGhpcyApO1xuXG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtGdW5jdGlvbn1cbiAgICAgKi9cbiAgICB0aGlzLm9uTW91c2VEb3duID0gdGhpcy5vbk1vdXNlRG93bi5iaW5kKHRoaXMpO1xuICAgIHRoaXMucHJvY2Vzc01vdXNlRG93biA9IHRoaXMucHJvY2Vzc01vdXNlRG93bi5iaW5kKCB0aGlzICk7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtGdW5jdGlvbn1cbiAgICAgKi9cbiAgICB0aGlzLm9uTW91c2VNb3ZlID0gdGhpcy5vbk1vdXNlTW92ZS5iaW5kKCB0aGlzICk7XG4gICAgdGhpcy5wcm9jZXNzTW91c2VNb3ZlID0gdGhpcy5wcm9jZXNzTW91c2VNb3ZlLmJpbmQoIHRoaXMgKTtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge0Z1bmN0aW9ufVxuICAgICAqL1xuICAgIHRoaXMub25Nb3VzZU91dCA9IHRoaXMub25Nb3VzZU91dC5iaW5kKHRoaXMpO1xuICAgIHRoaXMucHJvY2Vzc01vdXNlT3Zlck91dCA9IHRoaXMucHJvY2Vzc01vdXNlT3Zlck91dC5iaW5kKCB0aGlzICk7XG5cblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge0Z1bmN0aW9ufVxuICAgICAqL1xuICAgIHRoaXMub25Ub3VjaFN0YXJ0ID0gdGhpcy5vblRvdWNoU3RhcnQuYmluZCh0aGlzKTtcbiAgICB0aGlzLnByb2Nlc3NUb3VjaFN0YXJ0ID0gdGhpcy5wcm9jZXNzVG91Y2hTdGFydC5iaW5kKHRoaXMpO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7RnVuY3Rpb259XG4gICAgICovXG4gICAgdGhpcy5vblRvdWNoRW5kID0gdGhpcy5vblRvdWNoRW5kLmJpbmQodGhpcyk7XG4gICAgdGhpcy5wcm9jZXNzVG91Y2hFbmQgPSB0aGlzLnByb2Nlc3NUb3VjaEVuZC5iaW5kKHRoaXMpO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7RnVuY3Rpb259XG4gICAgICovXG4gICAgdGhpcy5vblRvdWNoTW92ZSA9IHRoaXMub25Ub3VjaE1vdmUuYmluZCh0aGlzKTtcbiAgICB0aGlzLnByb2Nlc3NUb3VjaE1vdmUgPSB0aGlzLnByb2Nlc3NUb3VjaE1vdmUuYmluZCh0aGlzKTtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLmxhc3QgPSAwO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGNzcyBzdHlsZSBvZiB0aGUgY3Vyc29yIHRoYXQgaXMgYmVpbmcgdXNlZFxuICAgICAqIEBtZW1iZXIge3N0cmluZ31cbiAgICAgKi9cbiAgICB0aGlzLmN1cnJlbnRDdXJzb3JTdHlsZSA9ICdpbmhlcml0JztcblxuICAgIC8qKlxuICAgICAqIEludGVybmFsIGNhY2hlZCB2YXJcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlBvaW50fVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fdGVtcFBvaW50ID0gbmV3IGNvcmUuUG9pbnQoKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBjdXJyZW50IHJlc29sdXRpb25cbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy5yZXNvbHV0aW9uID0gMTtcblxuICAgIHRoaXMuc2V0VGFyZ2V0RWxlbWVudCh0aGlzLnJlbmRlcmVyLnZpZXcsIHRoaXMucmVuZGVyZXIucmVzb2x1dGlvbik7XG59XG5cbkludGVyYWN0aW9uTWFuYWdlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBJbnRlcmFjdGlvbk1hbmFnZXI7XG5tb2R1bGUuZXhwb3J0cyA9IEludGVyYWN0aW9uTWFuYWdlcjtcblxuLyoqXG4gKiBTZXRzIHRoZSBET00gZWxlbWVudCB3aGljaCB3aWxsIHJlY2VpdmUgbW91c2UvdG91Y2ggZXZlbnRzLiBUaGlzIGlzIHVzZWZ1bCBmb3Igd2hlbiB5b3UgaGF2ZVxuICogb3RoZXIgRE9NIGVsZW1lbnRzIG9uIHRvcCBvZiB0aGUgcmVuZGVyZXJzIENhbnZhcyBlbGVtZW50LiBXaXRoIHRoaXMgeW91J2xsIGJlIGJhbGUgdG8gZGVsZXRlZ2F0ZVxuICogYW5vdGhlciBET00gZWxlbWVudCB0byByZWNlaXZlIHRob3NlIGV2ZW50cy5cbiAqXG4gKiBAcGFyYW0gZWxlbWVudCB7SFRNTEVsZW1lbnR9IHRoZSBET00gZWxlbWVudCB3aGljaCB3aWxsIHJlY2VpdmUgbW91c2UgYW5kIHRvdWNoIGV2ZW50cy5cbiAqIEBwYXJhbSBbcmVzb2x1dGlvbj0xXSB7bnVtYmVyfSBUSGUgcmVzb2x1dGlvbiBvZiB0aGUgbmV3IGVsZW1lbnQgKHJlbGF0aXZlIHRvIHRoZSBjYW52YXMpLlxuICogQHByaXZhdGVcbiAqL1xuSW50ZXJhY3Rpb25NYW5hZ2VyLnByb3RvdHlwZS5zZXRUYXJnZXRFbGVtZW50ID0gZnVuY3Rpb24gKGVsZW1lbnQsIHJlc29sdXRpb24pXG57XG4gICAgdGhpcy5yZW1vdmVFdmVudHMoKTtcblxuICAgIHRoaXMuaW50ZXJhY3Rpb25ET01FbGVtZW50ID0gZWxlbWVudDtcblxuICAgIHRoaXMucmVzb2x1dGlvbiA9IHJlc29sdXRpb24gfHwgMTtcblxuICAgIHRoaXMuYWRkRXZlbnRzKCk7XG59O1xuXG4vKipcbiAqIFJlZ2lzdGVycyBhbGwgdGhlIERPTSBldmVudHNcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5JbnRlcmFjdGlvbk1hbmFnZXIucHJvdG90eXBlLmFkZEV2ZW50cyA9IGZ1bmN0aW9uICgpXG57XG4gICAgaWYgKCF0aGlzLmludGVyYWN0aW9uRE9NRWxlbWVudClcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb3JlLnRpY2tlci5zaGFyZWQuYWRkKHRoaXMudXBkYXRlLCB0aGlzKTtcblxuICAgIGlmICh3aW5kb3cubmF2aWdhdG9yLm1zUG9pbnRlckVuYWJsZWQpXG4gICAge1xuICAgICAgICB0aGlzLmludGVyYWN0aW9uRE9NRWxlbWVudC5zdHlsZVsnLW1zLWNvbnRlbnQtem9vbWluZyddID0gJ25vbmUnO1xuICAgICAgICB0aGlzLmludGVyYWN0aW9uRE9NRWxlbWVudC5zdHlsZVsnLW1zLXRvdWNoLWFjdGlvbiddID0gJ25vbmUnO1xuICAgIH1cblxuICAgIHdpbmRvdy5kb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdtb3VzZW1vdmUnLCAgICB0aGlzLm9uTW91c2VNb3ZlLCB0cnVlKTtcbiAgICB0aGlzLmludGVyYWN0aW9uRE9NRWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCdtb3VzZWRvd24nLCAgICB0aGlzLm9uTW91c2VEb3duLCB0cnVlKTtcbiAgICB0aGlzLmludGVyYWN0aW9uRE9NRWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCdtb3VzZW91dCcsICAgICB0aGlzLm9uTW91c2VPdXQsIHRydWUpO1xuXG4gICAgdGhpcy5pbnRlcmFjdGlvbkRPTUVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigndG91Y2hzdGFydCcsICAgdGhpcy5vblRvdWNoU3RhcnQsIHRydWUpO1xuICAgIHRoaXMuaW50ZXJhY3Rpb25ET01FbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ3RvdWNoZW5kJywgICAgIHRoaXMub25Ub3VjaEVuZCwgdHJ1ZSk7XG4gICAgdGhpcy5pbnRlcmFjdGlvbkRPTUVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigndG91Y2htb3ZlJywgICAgdGhpcy5vblRvdWNoTW92ZSwgdHJ1ZSk7XG5cbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignbW91c2V1cCcsICB0aGlzLm9uTW91c2VVcCwgdHJ1ZSk7XG5cbiAgICB0aGlzLmV2ZW50c0FkZGVkID0gdHJ1ZTtcbn07XG5cbi8qKlxuICogUmVtb3ZlcyBhbGwgdGhlIERPTSBldmVudHMgdGhhdCB3ZXJlIHByZXZpb3VzbHkgcmVnaXN0ZXJlZFxuICpcbiAqIEBwcml2YXRlXG4gKi9cbkludGVyYWN0aW9uTWFuYWdlci5wcm90b3R5cGUucmVtb3ZlRXZlbnRzID0gZnVuY3Rpb24gKClcbntcbiAgICBpZiAoIXRoaXMuaW50ZXJhY3Rpb25ET01FbGVtZW50KVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvcmUudGlja2VyLnNoYXJlZC5yZW1vdmUodGhpcy51cGRhdGUpO1xuXG4gICAgaWYgKHdpbmRvdy5uYXZpZ2F0b3IubXNQb2ludGVyRW5hYmxlZClcbiAgICB7XG4gICAgICAgIHRoaXMuaW50ZXJhY3Rpb25ET01FbGVtZW50LnN0eWxlWyctbXMtY29udGVudC16b29taW5nJ10gPSAnJztcbiAgICAgICAgdGhpcy5pbnRlcmFjdGlvbkRPTUVsZW1lbnQuc3R5bGVbJy1tcy10b3VjaC1hY3Rpb24nXSA9ICcnO1xuICAgIH1cblxuICAgIHdpbmRvdy5kb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdtb3VzZW1vdmUnLCB0aGlzLm9uTW91c2VNb3ZlLCB0cnVlKTtcbiAgICB0aGlzLmludGVyYWN0aW9uRE9NRWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdtb3VzZWRvd24nLCB0aGlzLm9uTW91c2VEb3duLCB0cnVlKTtcbiAgICB0aGlzLmludGVyYWN0aW9uRE9NRWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdtb3VzZW91dCcsICB0aGlzLm9uTW91c2VPdXQsIHRydWUpO1xuXG4gICAgdGhpcy5pbnRlcmFjdGlvbkRPTUVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigndG91Y2hzdGFydCcsIHRoaXMub25Ub3VjaFN0YXJ0LCB0cnVlKTtcbiAgICB0aGlzLmludGVyYWN0aW9uRE9NRWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCd0b3VjaGVuZCcsICB0aGlzLm9uVG91Y2hFbmQsIHRydWUpO1xuICAgIHRoaXMuaW50ZXJhY3Rpb25ET01FbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3RvdWNobW92ZScsIHRoaXMub25Ub3VjaE1vdmUsIHRydWUpO1xuXG4gICAgdGhpcy5pbnRlcmFjdGlvbkRPTUVsZW1lbnQgPSBudWxsO1xuXG4gICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21vdXNldXAnLCAgdGhpcy5vbk1vdXNlVXAsIHRydWUpO1xuXG4gICAgdGhpcy5ldmVudHNBZGRlZCA9IGZhbHNlO1xufTtcblxuLyoqXG4gKiBVcGRhdGVzIHRoZSBzdGF0ZSBvZiBpbnRlcmFjdGl2ZSBvYmplY3RzLlxuICogSW52b2tlZCBieSBhIHRocm90dGxlZCB0aWNrZXIgdXBkYXRlIGZyb21cbiAqIHtAbGluayBQSVhJLnRpY2tlci5zaGFyZWR9LlxuICpcbiAqIEBwYXJhbSBkZWx0YVRpbWUge251bWJlcn1cbiAqL1xuSW50ZXJhY3Rpb25NYW5hZ2VyLnByb3RvdHlwZS51cGRhdGUgPSBmdW5jdGlvbiAoZGVsdGFUaW1lKVxue1xuICAgIHRoaXMuX2RlbHRhVGltZSArPSBkZWx0YVRpbWU7XG5cbiAgICBpZiAodGhpcy5fZGVsdGFUaW1lIDwgdGhpcy5pbnRlcmFjdGlvbkZyZXF1ZW5jeSlcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLl9kZWx0YVRpbWUgPSAwO1xuXG4gICAgaWYgKCF0aGlzLmludGVyYWN0aW9uRE9NRWxlbWVudClcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBpZiB0aGUgdXNlciBtb3ZlIHRoZSBtb3VzZSB0aGlzIGNoZWNrIGhhcyBhbHJlYWR5IGJlZW4gZGZvbmUgdXNpbmcgdGhlIG1vdXNlIG1vdmUhXG4gICAgaWYodGhpcy5kaWRNb3ZlKVxuICAgIHtcbiAgICAgICAgdGhpcy5kaWRNb3ZlID0gZmFsc2U7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLmN1cnNvciA9ICdpbmhlcml0JztcblxuICAgIHRoaXMucHJvY2Vzc0ludGVyYWN0aXZlKHRoaXMubW91c2UuZ2xvYmFsLCB0aGlzLnJlbmRlcmVyLl9sYXN0T2JqZWN0UmVuZGVyZWQsIHRoaXMucHJvY2Vzc01vdXNlT3Zlck91dCwgdHJ1ZSApO1xuXG4gICAgaWYgKHRoaXMuY3VycmVudEN1cnNvclN0eWxlICE9PSB0aGlzLmN1cnNvcilcbiAgICB7XG4gICAgICAgIHRoaXMuY3VycmVudEN1cnNvclN0eWxlID0gdGhpcy5jdXJzb3I7XG4gICAgICAgIHRoaXMuaW50ZXJhY3Rpb25ET01FbGVtZW50LnN0eWxlLmN1cnNvciA9IHRoaXMuY3Vyc29yO1xuICAgIH1cblxuICAgIC8vVE9ET1xufTtcblxuLyoqXG4gKiBEaXNwYXRjaGVzIGFuIGV2ZW50IG9uIHRoZSBkaXNwbGF5IG9iamVjdCB0aGF0IHdhcyBpbnRlcmFjdGVkIHdpdGhcbiAqXG4gKiBAcGFyYW0gZGlzcGxheU9iamVjdCB7UElYSS5Db250YWluZXJ8UElYSS5TcHJpdGV8UElYSS5leHRyYXMuVGlsaW5nU3ByaXRlfSB0aGUgZGlzcGxheSBvYmplY3QgaW4gcXVlc3Rpb25cbiAqIEBwYXJhbSBldmVudFN0cmluZyB7c3RyaW5nfSB0aGUgbmFtZSBvZiB0aGUgZXZlbnQgKGUuZywgbW91c2Vkb3duKVxuICogQHBhcmFtIGV2ZW50RGF0YSB7b2JqZWN0fSB0aGUgZXZlbnQgZGF0YSBvYmplY3RcbiAqIEBwcml2YXRlXG4gKi9cbkludGVyYWN0aW9uTWFuYWdlci5wcm90b3R5cGUuZGlzcGF0Y2hFdmVudCA9IGZ1bmN0aW9uICggZGlzcGxheU9iamVjdCwgZXZlbnRTdHJpbmcsIGV2ZW50RGF0YSApXG57XG4gICAgaWYoIWV2ZW50RGF0YS5zdG9wcGVkKVxuICAgIHtcbiAgICAgICAgZXZlbnREYXRhLnRhcmdldCA9IGRpc3BsYXlPYmplY3Q7XG4gICAgICAgIGV2ZW50RGF0YS50eXBlID0gZXZlbnRTdHJpbmc7XG5cbiAgICAgICAgZGlzcGxheU9iamVjdC5lbWl0KCBldmVudFN0cmluZywgZXZlbnREYXRhICk7XG5cbiAgICAgICAgaWYoIGRpc3BsYXlPYmplY3RbZXZlbnRTdHJpbmddIClcbiAgICAgICAge1xuICAgICAgICAgICAgZGlzcGxheU9iamVjdFtldmVudFN0cmluZ10oIGV2ZW50RGF0YSApO1xuICAgICAgICB9XG4gICAgfVxufTtcblxuLyoqXG4gKiBNYXBzIHggYW5kIHkgY29vcmRzIGZyb20gYSBET00gb2JqZWN0IGFuZCBtYXBzIHRoZW0gY29ycmVjdGx5IHRvIHRoZSBwaXhpIHZpZXcuIFRoZSByZXN1bHRpbmcgdmFsdWUgaXMgc3RvcmVkIGluIHRoZSBwb2ludC5cbiAqIFRoaXMgdGFrZXMgaW50byBhY2NvdW50IHRoZSBmYWN0IHRoYXQgdGhlIERPTSBlbGVtZW50IGNvdWxkIGJlIHNjYWxlZCBhbmQgcG9zaXRpb25lZCBhbnl3aGVyZSBvbiB0aGUgc2NyZWVuLlxuICpcbiAqIEBwYXJhbSAge1BJWEkuUG9pbnR9IHBvaW50IHRoZSBwb2ludCB0aGF0IHRoZSByZXN1bHQgd2lsbCBiZSBzdG9yZWQgaW5cbiAqIEBwYXJhbSAge251bWJlcn0geCAgICAgdGhlIHggY29vcmQgb2YgdGhlIHBvc2l0aW9uIHRvIG1hcFxuICogQHBhcmFtICB7bnVtYmVyfSB5ICAgICB0aGUgeSBjb29yZCBvZiB0aGUgcG9zaXRpb24gdG8gbWFwXG4gKi9cbkludGVyYWN0aW9uTWFuYWdlci5wcm90b3R5cGUubWFwUG9zaXRpb25Ub1BvaW50ID0gZnVuY3Rpb24gKCBwb2ludCwgeCwgeSApXG57XG4gICAgdmFyIHJlY3QgPSB0aGlzLmludGVyYWN0aW9uRE9NRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICBwb2ludC54ID0gKCAoIHggLSByZWN0LmxlZnQgKSAqICh0aGlzLmludGVyYWN0aW9uRE9NRWxlbWVudC53aWR0aCAgLyByZWN0LndpZHRoICApICkgLyB0aGlzLnJlc29sdXRpb247XG4gICAgcG9pbnQueSA9ICggKCB5IC0gcmVjdC50b3AgICkgKiAodGhpcy5pbnRlcmFjdGlvbkRPTUVsZW1lbnQuaGVpZ2h0IC8gcmVjdC5oZWlnaHQgKSApIC8gdGhpcy5yZXNvbHV0aW9uO1xufTtcblxuLyoqXG4gKiBUaGlzIGZ1bmN0aW9uIGlzIHByb3ZpZGVzIGEgbmVhdCB3YXkgb2YgY3Jhd2xpbmcgdGhyb3VnaCB0aGUgc2NlbmUgZ3JhcGggYW5kIHJ1bm5pbmcgYSBzcGVjaWZpZWQgZnVuY3Rpb24gb24gYWxsIGludGVyYWN0aXZlIG9iamVjdHMgaXQgZmluZHMuXG4gKiBJdCB3aWxsIGFsc28gdGFrZSBjYXJlIG9mIGhpdCB0ZXN0aW5nIHRoZSBpbnRlcmFjdGl2ZSBvYmplY3RzIGFuZCBwYXNzZXMgdGhlIGhpdCBhY3Jvc3MgaW4gdGhlIGZ1bmN0aW9uLlxuICpcbiAqIEBwYXJhbSAge1BJWEkuUG9pbnR9IHBvaW50IHRoZSBwb2ludCB0aGF0IGlzIHRlc3RlZCBmb3IgY29sbGlzaW9uXG4gKiBAcGFyYW0gIHtQSVhJLkNvbnRhaW5lcnxQSVhJLlNwcml0ZXxQSVhJLmV4dHJhcy5UaWxpbmdTcHJpdGV9IGRpc3BsYXlPYmplY3QgdGhlIGRpc3BsYXlPYmplY3QgdGhhdCB3aWxsIGJlIGhpdCB0ZXN0IChyZWN1cmNzaXZseSBjcmF3bHMgaXRzIGNoaWxkcmVuKVxuICogQHBhcmFtICB7RnVuY3Rpb259IGZ1bmMgdGhlIGZ1bmN0aW9uIHRoYXQgd2lsbCBiZSBjYWxsZWQgb24gZWFjaCBpbnRlcmFjdGl2ZSBvYmplY3QuIFRoZSBkaXNwbGF5T2JqZWN0IGFuZCBoaXQgd2lsbCBiZSBwYXNzZWQgdG8gdGhlIGZ1bmN0aW9uXG4gKiBAcGFyYW0gIHtib29sZWFufSBoaXRUZXN0IHRoaXMgaW5kaWNhdGVzIGlmIHRoZSBvYmplY3RzIGluc2lkZSBzaG91bGQgYmUgaGl0IHRlc3QgYWdhaW5zdCB0aGUgcG9pbnRcbiAqIEByZXR1cm4ge2Jvb2xlYW59IHJldHVybnMgdHJ1ZSBpZiB0aGUgZGlzcGxheU9iamVjdCBoaXQgdGhlIHBvaW50XG4gKi9cbkludGVyYWN0aW9uTWFuYWdlci5wcm90b3R5cGUucHJvY2Vzc0ludGVyYWN0aXZlID0gZnVuY3Rpb24gKHBvaW50LCBkaXNwbGF5T2JqZWN0LCBmdW5jLCBoaXRUZXN0LCBpbnRlcmFjdGl2ZSlcbntcbiAgICBpZighZGlzcGxheU9iamVjdCB8fCAhZGlzcGxheU9iamVjdC52aXNpYmxlKVxuICAgIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIC8vIFRvb2sgYSBsaXR0bGUgd2hpbGUgdG8gcmV3b3JrIHRoaXMgZnVuY3Rpb24gY29ycmVjdGx5ISBCdXQgbm93IGl0IGlzIGRvbmUgYW5kIG5pY2UgYW5kIG9wdGltaXNlZC4gXl9eXG4gICAgLy8gXG4gICAgLy8gVGhpcyBmdW5jdGlvbiB3aWxsIG5vdyBsb29wIHRocm91Z2ggYWxsIG9iamVjdHMgYW5kIHRoZW4gb25seSBoaXQgdGVzdCB0aGUgb2JqZWN0cyBpdCBIQVMgdG8sIG5vdCBhbGwgb2YgdGhlbS4gTVVDSCBmYXN0ZXIuLlxuICAgIC8vIEFuIG9iamVjdCB3aWxsIGJlIGhpdCB0ZXN0IGlmIHRoZSBmb2xsb3dpbmcgaXMgdHJ1ZTpcbiAgICAvLyBcbiAgICAvLyAxOiBJdCBpcyBpbnRlcmFjdGl2ZS5cbiAgICAvLyAyOiBJdCBiZWxvbmdzIHRvIGEgcGFyZW50IHRoYXQgaXMgaW50ZXJhY3RpdmUgQU5EIG9uZSBvZiB0aGUgcGFyZW50cyBjaGlsZHJlbiBoYXZlIG5vdCBhbHJlYWR5IGJlZW4gaGl0LlxuICAgIC8vIFxuICAgIC8vIEFzIGFub3RoZXIgbGl0dGxlIG9wdGltaXNhdGlvbiBvbmNlIGFuIGludGVyYWN0aXZlIG9iamVjdCBoYXMgYmVlbiBoaXQgd2UgY2FuIGNhcnJ5IG9uIHRocm91Z2ggdGhlIHNjZW5lZ3JhcGgsIGJ1dCB3ZSBrbm93IHRoYXQgdGhlcmUgd2lsbCBiZSBubyBtb3JlIGhpdHMhIFNvIHdlIGNhbiBhdm9pZCBleHRyYSBoaXQgdGVzdHNcbiAgICAvLyBBIGZpbmFsIG9wdGltaXNhdGlvbiBpcyB0aGF0IGFuIG9iamVjdCBpcyBub3QgaGl0IHRlc3QgZGlyZWN0bHkgaWYgYSBjaGlsZCBoYXMgYWxyZWFkeSBiZWVuIGhpdC5cbiAgICBcbiAgICB2YXIgaGl0ID0gZmFsc2UsXG4gICAgICAgIGludGVyYWN0aXZlUGFyZW50ID0gaW50ZXJhY3RpdmUgPSBkaXNwbGF5T2JqZWN0LmludGVyYWN0aXZlIHx8IGludGVyYWN0aXZlO1xuXG4gICAgLy8gaWYgdGhlIGRpc3BsYXlvYmplY3QgaGFzIGEgaGl0QXJlYSwgdGhlbiBpdCBkb2VzIG5vdCBuZWVkIHRvIGhpdFRlc3QgY2hpbGRyZW4uXG4gICAgaWYoZGlzcGxheU9iamVjdC5oaXRBcmVhKVxuICAgIHtcbiAgICAgICAgaW50ZXJhY3RpdmVQYXJlbnQgPSBmYWxzZTtcbiAgICB9XG5cbiAgICAvLyAqKiBGUkVFIFRJUCAqKiEgSWYgYW4gb2JqZWN0IGlzIG5vdCBpbnRlcmFjdHRpdmUgb3IgaGFzIG5vIGJ1dHRvbnMgaW4gaXQgKHN1Y2ggYXMgYSBnYW1lIHNjZW5lISkgc2V0IGludGVyYWN0aXZlQ2hpbGRyZW4gdG8gZmFsc2UgZm9yIHRoYXQgZGlzcGxheU9iamVjdC5cbiAgICAvLyBUaGlzIHdpbGwgYWxsb3cgcGl4aSB0byBjb21wbGV0bHkgaWdub3JlIGFuZCBieXBhc3MgY2hlY2tpbmcgdGhlIGRpc3BsYXlPYmplY3RzIGNoaWxkcmVuLlxuICAgIGlmKGRpc3BsYXlPYmplY3QuaW50ZXJhY3RpdmVDaGlsZHJlbilcbiAgICB7ICAgICAgIFxuICAgICAgICB2YXIgY2hpbGRyZW4gPSBkaXNwbGF5T2JqZWN0LmNoaWxkcmVuO1xuICAgICAgICBcbiAgICAgICAgZm9yICh2YXIgaSA9IGNoaWxkcmVuLmxlbmd0aC0xOyBpID49IDA7IGktLSlcbiAgICAgICAge1xuICAgICAgICAgICAgLy8gdGltZSB0byBnZXQgcmVjdXJzaXZlLi4gaWYgdGhpcyBmdW5jdGlvbiB3aWxsIHJldHVybiBpZiBzb210aGluZyBpcyBoaXQuLlxuICAgICAgICAgICAgaWYoIHRoaXMucHJvY2Vzc0ludGVyYWN0aXZlKHBvaW50LCBjaGlsZHJlbltpXSwgZnVuYywgaGl0VGVzdCwgaW50ZXJhY3RpdmVQYXJlbnQpIClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBoaXQgPSB0cnVlO1xuXG4gICAgICAgICAgICAgICAgLy8gd2Ugbm8gbG9uZ2VyIG5lZWQgdG8gaGl0IHRlc3QgYW55IG1vcmUgb2JqZWN0cyBpbiB0aGlzIGNvbnRhaW5lciBhcyB3ZSB3ZSBub3cga25vdyB0aGUgcGFyZW50IGhhcyBiZWVuIGhpdFxuICAgICAgICAgICAgICAgIGludGVyYWN0aXZlUGFyZW50ID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgLy8gSWYgdGhlIGNoaWxkIGlzIGludGVyYWN0aXZlICwgdGhhdCBtZWFucyB0aGF0IHRoZSBvYmplY3QgaGl0IHdhcyBhY3R1YWxseSBpbnRlcmFjdGl2ZSBhbmQgbm90IGp1c3QgdGhlIGNoaWxkIG9mIGFuIGludGVyYWN0aXZlIG9iamVjdC4gXG4gICAgICAgICAgICAgICAgLy8gVGhpcyBtZWFucyB3ZSBubyBsb25nZXIgbmVlZCB0byBoaXQgdGVzdCBhbnl0aGluZyBlbHNlLiBXZSBzdGlsbCBuZWVkIHRvIHJ1biB0aHJvdWdoIGFsbCBvYmplY3RzLCBidXQgd2UgZG9uJ3QgbmVlZCB0byBwZXJmb3JtIGFueSBoaXQgdGVzdHMuXG4gICAgICAgICAgICAgICAgaWYoY2hpbGRyZW5baV0uaW50ZXJhY3RpdmUpXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBoaXRUZXN0ID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gbm8gcG9pbnQgcnVubmluZyB0aGlzIGlmIHRoZSBpdGVtIGlzIG5vdCBpbnRlcmFjdGl2ZSBvciBkb2VzIG5vdCBoYXZlIGFuIGludGVyYWN0aXZlIHBhcmVudC5cbiAgICBpZihpbnRlcmFjdGl2ZSlcbiAgICB7XG4gICAgICAgIC8vIGlmIHdlIGFyZSBoaXQgdGVzdGluZyAoYXMgaW4gd2UgaGF2ZSBubyBoaXQgYW55IG9iamVjdHMgeWV0KVxuICAgICAgICAvLyBXZSBhbHNvIGRvbid0IG5lZWQgdG8gd29ycnkgYWJvdXQgaGl0IHRlc3RpbmcgaWYgb25jZSBvZiB0aGUgZGlzcGxheU9iamVjdHMgY2hpbGRyZW4gaGFzIGFscmVhZHkgYmVlbiBoaXQhXG4gICAgICAgIGlmKGhpdFRlc3QgJiYgIWhpdClcbiAgICAgICAgeyAgXG4gICAgICAgICAgICBpZihkaXNwbGF5T2JqZWN0LmhpdEFyZWEpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgZGlzcGxheU9iamVjdC53b3JsZFRyYW5zZm9ybS5hcHBseUludmVyc2UocG9pbnQsICB0aGlzLl90ZW1wUG9pbnQpO1xuICAgICAgICAgICAgICAgIGhpdCA9IGRpc3BsYXlPYmplY3QuaGl0QXJlYS5jb250YWlucyggdGhpcy5fdGVtcFBvaW50LngsIHRoaXMuX3RlbXBQb2ludC55ICk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmKGRpc3BsYXlPYmplY3QuY29udGFpbnNQb2ludClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBoaXQgPSBkaXNwbGF5T2JqZWN0LmNvbnRhaW5zUG9pbnQocG9pbnQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYoZGlzcGxheU9iamVjdC5pbnRlcmFjdGl2ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgZnVuYyhkaXNwbGF5T2JqZWN0LCBoaXQpOyBcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBoaXQ7XG4gIFxufTtcblxuXG4vKipcbiAqIElzIGNhbGxlZCB3aGVuIHRoZSBtb3VzZSBidXR0b24gaXMgcHJlc3NlZCBkb3duIG9uIHRoZSByZW5kZXJlciBlbGVtZW50XG4gKlxuICogQHBhcmFtIGV2ZW50IHtFdmVudH0gVGhlIERPTSBldmVudCBvZiBhIG1vdXNlIGJ1dHRvbiBiZWluZyBwcmVzc2VkIGRvd25cbiAqIEBwcml2YXRlXG4gKi9cbkludGVyYWN0aW9uTWFuYWdlci5wcm90b3R5cGUub25Nb3VzZURvd24gPSBmdW5jdGlvbiAoZXZlbnQpXG57XG4gICAgdGhpcy5tb3VzZS5vcmlnaW5hbEV2ZW50ID0gZXZlbnQ7XG4gICAgdGhpcy5ldmVudERhdGEuZGF0YSA9IHRoaXMubW91c2U7XG4gICAgdGhpcy5ldmVudERhdGEuc3RvcHBlZCA9IGZhbHNlO1xuXG4gICAgLy8gVXBkYXRlIGludGVybmFsIG1vdXNlIHJlZmVyZW5jZVxuICAgIHRoaXMubWFwUG9zaXRpb25Ub1BvaW50KCB0aGlzLm1vdXNlLmdsb2JhbCwgZXZlbnQuY2xpZW50WCwgZXZlbnQuY2xpZW50WSk7XG5cbiAgICBpZiAodGhpcy5hdXRvUHJldmVudERlZmF1bHQpXG4gICAge1xuICAgICAgICB0aGlzLm1vdXNlLm9yaWdpbmFsRXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICB9XG5cbiAgICB0aGlzLnByb2Nlc3NJbnRlcmFjdGl2ZSh0aGlzLm1vdXNlLmdsb2JhbCwgdGhpcy5yZW5kZXJlci5fbGFzdE9iamVjdFJlbmRlcmVkLCB0aGlzLnByb2Nlc3NNb3VzZURvd24sIHRydWUgKTtcbn07XG5cbi8qKlxuICogUHJvY2Vzc2VzIHRoZSByZXN1bHQgb2YgdGhlIG1vdXNlIGRvd24gY2hlY2sgYW5kIGRpc3BhdGNoZXMgdGhlIGV2ZW50IGlmIG5lZWQgYmVcbiAqXG4gKiBAcGFyYW0gZGlzcGxheU9iamVjdCB7UElYSS5Db250YWluZXJ8UElYSS5TcHJpdGV8UElYSS5leHRyYXMuVGlsaW5nU3ByaXRlfSBUaGUgZGlzcGxheSBvYmplY3QgdGhhdCB3YXMgdGVzdGVkXG4gKiBAcGFyYW0gaGl0IHtib29sZWFufSB0aGUgcmVzdWx0IG9mIHRoZSBoaXQgdGVzdCBvbiB0aGUgZGlzcGF5IG9iamVjdFxuICogQHByaXZhdGVcbiAqL1xuSW50ZXJhY3Rpb25NYW5hZ2VyLnByb3RvdHlwZS5wcm9jZXNzTW91c2VEb3duID0gZnVuY3Rpb24gKCBkaXNwbGF5T2JqZWN0LCBoaXQgKVxue1xuICAgIHZhciBlID0gdGhpcy5tb3VzZS5vcmlnaW5hbEV2ZW50O1xuICAgIFxuICAgIHZhciBpc1JpZ2h0QnV0dG9uID0gZS5idXR0b24gPT09IDIgfHwgZS53aGljaCA9PT0gMztcblxuICAgIGlmKGhpdClcbiAgICB7XG4gICAgICAgIGRpc3BsYXlPYmplY3RbIGlzUmlnaHRCdXR0b24gPyAnX2lzUmlnaHREb3duJyA6ICdfaXNMZWZ0RG93bicgXSA9IHRydWU7XG4gICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudCggZGlzcGxheU9iamVjdCwgaXNSaWdodEJ1dHRvbiA/ICdyaWdodGRvd24nIDogJ21vdXNlZG93bicsIHRoaXMuZXZlbnREYXRhICk7XG4gICAgfVxufTtcblxuXG5cbi8qKlxuICogSXMgY2FsbGVkIHdoZW4gdGhlIG1vdXNlIGJ1dHRvbiBpcyByZWxlYXNlZCBvbiB0aGUgcmVuZGVyZXIgZWxlbWVudFxuICpcbiAqIEBwYXJhbSBldmVudCB7RXZlbnR9IFRoZSBET00gZXZlbnQgb2YgYSBtb3VzZSBidXR0b24gYmVpbmcgcmVsZWFzZWRcbiAqIEBwcml2YXRlXG4gKi9cbkludGVyYWN0aW9uTWFuYWdlci5wcm90b3R5cGUub25Nb3VzZVVwID0gZnVuY3Rpb24gKGV2ZW50KVxue1xuICAgIHRoaXMubW91c2Uub3JpZ2luYWxFdmVudCA9IGV2ZW50O1xuICAgIHRoaXMuZXZlbnREYXRhLmRhdGEgPSB0aGlzLm1vdXNlO1xuICAgIHRoaXMuZXZlbnREYXRhLnN0b3BwZWQgPSBmYWxzZTtcblxuICAgIC8vIFVwZGF0ZSBpbnRlcm5hbCBtb3VzZSByZWZlcmVuY2VcbiAgICB0aGlzLm1hcFBvc2l0aW9uVG9Qb2ludCggdGhpcy5tb3VzZS5nbG9iYWwsIGV2ZW50LmNsaWVudFgsIGV2ZW50LmNsaWVudFkpO1xuXG4gICAgdGhpcy5wcm9jZXNzSW50ZXJhY3RpdmUodGhpcy5tb3VzZS5nbG9iYWwsIHRoaXMucmVuZGVyZXIuX2xhc3RPYmplY3RSZW5kZXJlZCwgdGhpcy5wcm9jZXNzTW91c2VVcCwgdHJ1ZSApO1xufTtcblxuLyoqXG4gKiBQcm9jZXNzZXMgdGhlIHJlc3VsdCBvZiB0aGUgbW91c2UgdXAgY2hlY2sgYW5kIGRpc3BhdGNoZXMgdGhlIGV2ZW50IGlmIG5lZWQgYmVcbiAqXG4gKiBAcGFyYW0gZGlzcGxheU9iamVjdCB7UElYSS5Db250YWluZXJ8UElYSS5TcHJpdGV8UElYSS5leHRyYXMuVGlsaW5nU3ByaXRlfSBUaGUgZGlzcGxheSBvYmplY3QgdGhhdCB3YXMgdGVzdGVkXG4gKiBAcGFyYW0gaGl0IHtib29sZWFufSB0aGUgcmVzdWx0IG9mIHRoZSBoaXQgdGVzdCBvbiB0aGUgZGlzcGxheSBvYmplY3RcbiAqIEBwcml2YXRlXG4gKi9cbkludGVyYWN0aW9uTWFuYWdlci5wcm90b3R5cGUucHJvY2Vzc01vdXNlVXAgPSBmdW5jdGlvbiAoIGRpc3BsYXlPYmplY3QsIGhpdCApXG57XG4gICAgdmFyIGUgPSB0aGlzLm1vdXNlLm9yaWdpbmFsRXZlbnQ7XG5cbiAgICB2YXIgaXNSaWdodEJ1dHRvbiA9IGUuYnV0dG9uID09PSAyIHx8IGUud2hpY2ggPT09IDM7XG4gICAgdmFyIGlzRG93biA9ICBpc1JpZ2h0QnV0dG9uID8gJ19pc1JpZ2h0RG93bicgOiAnX2lzTGVmdERvd24nO1xuXG4gICAgaWYoaGl0KVxuICAgIHtcbiAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50KCBkaXNwbGF5T2JqZWN0LCBpc1JpZ2h0QnV0dG9uID8gJ3JpZ2h0dXAnIDogJ21vdXNldXAnLCB0aGlzLmV2ZW50RGF0YSApO1xuXG4gICAgICAgIGlmKCBkaXNwbGF5T2JqZWN0WyBpc0Rvd24gXSApXG4gICAgICAgIHtcbiAgICAgICAgICAgIGRpc3BsYXlPYmplY3RbIGlzRG93biBdID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLmRpc3BhdGNoRXZlbnQoIGRpc3BsYXlPYmplY3QsIGlzUmlnaHRCdXR0b24gPyAncmlnaHRjbGljaycgOiAnY2xpY2snLCB0aGlzLmV2ZW50RGF0YSApO1xuICAgICAgICB9XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIGlmKCBkaXNwbGF5T2JqZWN0WyBpc0Rvd24gXSApXG4gICAgICAgIHtcbiAgICAgICAgICAgIGRpc3BsYXlPYmplY3RbIGlzRG93biBdID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLmRpc3BhdGNoRXZlbnQoIGRpc3BsYXlPYmplY3QsIGlzUmlnaHRCdXR0b24gPyAncmlnaHR1cG91dHNpZGUnIDogJ21vdXNldXBvdXRzaWRlJywgdGhpcy5ldmVudERhdGEgKTtcbiAgICAgICAgfVxuICAgIH1cbn07XG5cblxuLyoqXG4gKiBJcyBjYWxsZWQgd2hlbiB0aGUgbW91c2UgbW92ZXMgYWNyb3NzIHRoZSByZW5kZXJlciBlbGVtZW50XG4gKlxuICogQHBhcmFtIGV2ZW50IHtFdmVudH0gVGhlIERPTSBldmVudCBvZiB0aGUgbW91c2UgbW92aW5nXG4gKiBAcHJpdmF0ZVxuICovXG5JbnRlcmFjdGlvbk1hbmFnZXIucHJvdG90eXBlLm9uTW91c2VNb3ZlID0gZnVuY3Rpb24gKGV2ZW50KVxue1xuICAgIHRoaXMubW91c2Uub3JpZ2luYWxFdmVudCA9IGV2ZW50O1xuICAgIHRoaXMuZXZlbnREYXRhLmRhdGEgPSB0aGlzLm1vdXNlO1xuICAgIHRoaXMuZXZlbnREYXRhLnN0b3BwZWQgPSBmYWxzZTtcblxuICAgIHRoaXMubWFwUG9zaXRpb25Ub1BvaW50KCB0aGlzLm1vdXNlLmdsb2JhbCwgZXZlbnQuY2xpZW50WCwgZXZlbnQuY2xpZW50WSk7XG5cbiAgICB0aGlzLmRpZE1vdmUgPSB0cnVlO1xuXG4gICAgdGhpcy5jdXJzb3IgPSAnaW5oZXJpdCc7XG5cbiAgICB0aGlzLnByb2Nlc3NJbnRlcmFjdGl2ZSh0aGlzLm1vdXNlLmdsb2JhbCwgdGhpcy5yZW5kZXJlci5fbGFzdE9iamVjdFJlbmRlcmVkLCB0aGlzLnByb2Nlc3NNb3VzZU1vdmUsIHRydWUgKTtcblxuICAgIGlmICh0aGlzLmN1cnJlbnRDdXJzb3JTdHlsZSAhPT0gdGhpcy5jdXJzb3IpXG4gICAge1xuICAgICAgICB0aGlzLmN1cnJlbnRDdXJzb3JTdHlsZSA9IHRoaXMuY3Vyc29yO1xuICAgICAgICB0aGlzLmludGVyYWN0aW9uRE9NRWxlbWVudC5zdHlsZS5jdXJzb3IgPSB0aGlzLmN1cnNvcjtcbiAgICB9XG5cbiAgICAvL1RPRE8gQlVHIGZvciBwYXJlbnRzIGluZXJhY3RpdmUgb2JqZWN0IChib3JkZXIgb3JkZXIgaXNzdWUpXG59O1xuXG4vKipcbiAqIFByb2Nlc3NlcyB0aGUgcmVzdWx0IG9mIHRoZSBtb3VzZSBtb3ZlIGNoZWNrIGFuZCBkaXNwYXRjaGVzIHRoZSBldmVudCBpZiBuZWVkIGJlXG4gKlxuICogQHBhcmFtIGRpc3BsYXlPYmplY3Qge1BJWEkuQ29udGFpbmVyfFBJWEkuU3ByaXRlfFBJWEkuZXh0cmFzLlRpbGluZ1Nwcml0ZX0gVGhlIGRpc3BsYXkgb2JqZWN0IHRoYXQgd2FzIHRlc3RlZFxuICogQHBhcmFtIGhpdCB7Ym9vbGVhbn0gdGhlIHJlc3VsdCBvZiB0aGUgaGl0IHRlc3Qgb24gdGhlIGRpc3BsYXkgb2JqZWN0XG4gKiBAcHJpdmF0ZVxuICovXG5JbnRlcmFjdGlvbk1hbmFnZXIucHJvdG90eXBlLnByb2Nlc3NNb3VzZU1vdmUgPSBmdW5jdGlvbiAoIGRpc3BsYXlPYmplY3QsIGhpdCApXG57XG4gICAgdGhpcy5kaXNwYXRjaEV2ZW50KCBkaXNwbGF5T2JqZWN0LCAnbW91c2Vtb3ZlJywgdGhpcy5ldmVudERhdGEpO1xuICAgIHRoaXMucHJvY2Vzc01vdXNlT3Zlck91dChkaXNwbGF5T2JqZWN0LCBoaXQpO1xufTtcblxuXG4vKipcbiAqIElzIGNhbGxlZCB3aGVuIHRoZSBtb3VzZSBpcyBtb3ZlZCBvdXQgb2YgdGhlIHJlbmRlcmVyIGVsZW1lbnRcbiAqXG4gKiBAcGFyYW0gZXZlbnQge0V2ZW50fSBUaGUgRE9NIGV2ZW50IG9mIGEgbW91c2UgYmVpbmcgbW92ZWQgb3V0XG4gKiBAcHJpdmF0ZVxuICovXG5JbnRlcmFjdGlvbk1hbmFnZXIucHJvdG90eXBlLm9uTW91c2VPdXQgPSBmdW5jdGlvbiAoZXZlbnQpXG57XG4gICAgdGhpcy5tb3VzZS5vcmlnaW5hbEV2ZW50ID0gZXZlbnQ7XG4gICAgdGhpcy5ldmVudERhdGEuc3RvcHBlZCA9IGZhbHNlO1xuXG4gICAgLy8gVXBkYXRlIGludGVybmFsIG1vdXNlIHJlZmVyZW5jZVxuICAgIHRoaXMubWFwUG9zaXRpb25Ub1BvaW50KCB0aGlzLm1vdXNlLmdsb2JhbCwgZXZlbnQuY2xpZW50WCwgZXZlbnQuY2xpZW50WSk7XG5cbiAgICB0aGlzLmludGVyYWN0aW9uRE9NRWxlbWVudC5zdHlsZS5jdXJzb3IgPSAnaW5oZXJpdCc7XG5cbiAgICAvLyBUT0RPIG9wdGltaXplIGJ5IG5vdCBjaGVjayBFVkVSWSBUSU1FISBtYXliZSBoYWxmIGFzIG9mdGVuPyAvL1xuICAgIHRoaXMubWFwUG9zaXRpb25Ub1BvaW50KCB0aGlzLm1vdXNlLmdsb2JhbCwgZXZlbnQuY2xpZW50WCwgZXZlbnQuY2xpZW50WSApO1xuXG4gICAgdGhpcy5wcm9jZXNzSW50ZXJhY3RpdmUoIHRoaXMubW91c2UuZ2xvYmFsLCB0aGlzLnJlbmRlcmVyLl9sYXN0T2JqZWN0UmVuZGVyZWQsIHRoaXMucHJvY2Vzc01vdXNlT3Zlck91dCwgZmFsc2UgKTtcbn07XG5cbi8qKlxuICogUHJvY2Vzc2VzIHRoZSByZXN1bHQgb2YgdGhlIG1vdXNlIG92ZXIvb3V0IGNoZWNrIGFuZCBkaXNwYXRjaGVzIHRoZSBldmVudCBpZiBuZWVkIGJlXG4gKlxuICogQHBhcmFtIGRpc3BsYXlPYmplY3Qge1BJWEkuQ29udGFpbmVyfFBJWEkuU3ByaXRlfFBJWEkuZXh0cmFzLlRpbGluZ1Nwcml0ZX0gVGhlIGRpc3BsYXkgb2JqZWN0IHRoYXQgd2FzIHRlc3RlZFxuICogQHBhcmFtIGhpdCB7Ym9vbGVhbn0gdGhlIHJlc3VsdCBvZiB0aGUgaGl0IHRlc3Qgb24gdGhlIGRpc3BsYXkgb2JqZWN0XG4gKiBAcHJpdmF0ZVxuICovXG5JbnRlcmFjdGlvbk1hbmFnZXIucHJvdG90eXBlLnByb2Nlc3NNb3VzZU92ZXJPdXQgPSBmdW5jdGlvbiAoIGRpc3BsYXlPYmplY3QsIGhpdCApXG57XG4gICAgaWYoaGl0KVxuICAgIHtcbiAgICAgICAgaWYoIWRpc3BsYXlPYmplY3QuX292ZXIpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGRpc3BsYXlPYmplY3QuX292ZXIgPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50KCBkaXNwbGF5T2JqZWN0LCAnbW91c2VvdmVyJywgdGhpcy5ldmVudERhdGEgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChkaXNwbGF5T2JqZWN0LmJ1dHRvbk1vZGUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuY3Vyc29yID0gZGlzcGxheU9iamVjdC5kZWZhdWx0Q3Vyc29yO1xuICAgICAgICB9XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIGlmKGRpc3BsYXlPYmplY3QuX292ZXIpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGRpc3BsYXlPYmplY3QuX292ZXIgPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudCggZGlzcGxheU9iamVjdCwgJ21vdXNlb3V0JywgdGhpcy5ldmVudERhdGEpO1xuICAgICAgICB9XG4gICAgfVxufTtcblxuXG4vKipcbiAqIElzIGNhbGxlZCB3aGVuIGEgdG91Y2ggaXMgc3RhcnRlZCBvbiB0aGUgcmVuZGVyZXIgZWxlbWVudFxuICpcbiAqIEBwYXJhbSBldmVudCB7RXZlbnR9IFRoZSBET00gZXZlbnQgb2YgYSB0b3VjaCBzdGFydGluZyBvbiB0aGUgcmVuZGVyZXIgdmlld1xuICogQHByaXZhdGVcbiAqL1xuSW50ZXJhY3Rpb25NYW5hZ2VyLnByb3RvdHlwZS5vblRvdWNoU3RhcnQgPSBmdW5jdGlvbiAoZXZlbnQpXG57XG4gICAgaWYgKHRoaXMuYXV0b1ByZXZlbnREZWZhdWx0KVxuICAgIHtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICB9XG5cbiAgICB2YXIgY2hhbmdlZFRvdWNoZXMgPSBldmVudC5jaGFuZ2VkVG91Y2hlcztcbiAgICB2YXIgY0xlbmd0aCA9IGNoYW5nZWRUb3VjaGVzLmxlbmd0aDtcblxuICAgIGZvciAodmFyIGk9MDsgaSA8IGNMZW5ndGg7IGkrKylcbiAgICB7XG4gICAgICAgIHZhciB0b3VjaEV2ZW50ID0gY2hhbmdlZFRvdWNoZXNbaV07XG4gICAgICAgIC8vVE9ETyBQT09MXG4gICAgICAgIHZhciB0b3VjaERhdGEgPSB0aGlzLmdldFRvdWNoRGF0YSggdG91Y2hFdmVudCApO1xuXG4gICAgICAgIHRvdWNoRGF0YS5vcmlnaW5hbEV2ZW50ID0gZXZlbnQ7XG5cbiAgICAgICAgdGhpcy5ldmVudERhdGEuZGF0YSA9IHRvdWNoRGF0YTtcbiAgICAgICAgdGhpcy5ldmVudERhdGEuc3RvcHBlZCA9IGZhbHNlO1xuXG4gICAgICAgIHRoaXMucHJvY2Vzc0ludGVyYWN0aXZlKCB0b3VjaERhdGEuZ2xvYmFsLCB0aGlzLnJlbmRlcmVyLl9sYXN0T2JqZWN0UmVuZGVyZWQsIHRoaXMucHJvY2Vzc1RvdWNoU3RhcnQsIHRydWUgKTtcblxuICAgICAgICB0aGlzLnJldHVyblRvdWNoRGF0YSggdG91Y2hEYXRhICk7XG4gICAgfVxufTtcblxuLyoqXG4gKiBQcm9jZXNzZXMgdGhlIHJlc3VsdCBvZiBhIHRvdWNoIGNoZWNrIGFuZCBkaXNwYXRjaGVzIHRoZSBldmVudCBpZiBuZWVkIGJlXG4gKlxuICogQHBhcmFtIGRpc3BsYXlPYmplY3Qge1BJWEkuQ29udGFpbmVyfFBJWEkuU3ByaXRlfFBJWEkuZXh0cmFzLlRpbGluZ1Nwcml0ZX0gVGhlIGRpc3BsYXkgb2JqZWN0IHRoYXQgd2FzIHRlc3RlZFxuICogQHBhcmFtIGhpdCB7Ym9vbGVhbn0gdGhlIHJlc3VsdCBvZiB0aGUgaGl0IHRlc3Qgb24gdGhlIGRpc3BsYXkgb2JqZWN0XG4gKiBAcHJpdmF0ZVxuICovXG5JbnRlcmFjdGlvbk1hbmFnZXIucHJvdG90eXBlLnByb2Nlc3NUb3VjaFN0YXJ0ID0gZnVuY3Rpb24gKCBkaXNwbGF5T2JqZWN0LCBoaXQgKVxue1xuICAgIGlmKGhpdClcbiAgICB7XG4gICAgICAgIGRpc3BsYXlPYmplY3QuX3RvdWNoRG93biA9IHRydWU7XG4gICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudCggZGlzcGxheU9iamVjdCwgJ3RvdWNoc3RhcnQnLCB0aGlzLmV2ZW50RGF0YSApO1xuICAgIH1cbn07XG5cblxuLyoqXG4gKiBJcyBjYWxsZWQgd2hlbiBhIHRvdWNoIGVuZHMgb24gdGhlIHJlbmRlcmVyIGVsZW1lbnRcbiAqXG4gKiBAcGFyYW0gZXZlbnQge0V2ZW50fSBUaGUgRE9NIGV2ZW50IG9mIGEgdG91Y2ggZW5kaW5nIG9uIHRoZSByZW5kZXJlciB2aWV3XG4gKi9cbkludGVyYWN0aW9uTWFuYWdlci5wcm90b3R5cGUub25Ub3VjaEVuZCA9IGZ1bmN0aW9uIChldmVudClcbntcbiAgICBpZiAodGhpcy5hdXRvUHJldmVudERlZmF1bHQpXG4gICAge1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIH1cblxuICAgIHZhciBjaGFuZ2VkVG91Y2hlcyA9IGV2ZW50LmNoYW5nZWRUb3VjaGVzO1xuICAgIHZhciBjTGVuZ3RoID0gY2hhbmdlZFRvdWNoZXMubGVuZ3RoO1xuXG4gICAgZm9yICh2YXIgaT0wOyBpIDwgY0xlbmd0aDsgaSsrKVxuICAgIHtcbiAgICAgICAgdmFyIHRvdWNoRXZlbnQgPSBjaGFuZ2VkVG91Y2hlc1tpXTtcblxuICAgICAgICB2YXIgdG91Y2hEYXRhID0gdGhpcy5nZXRUb3VjaERhdGEoIHRvdWNoRXZlbnQgKTtcblxuICAgICAgICB0b3VjaERhdGEub3JpZ2luYWxFdmVudCA9IGV2ZW50O1xuXG4gICAgICAgIC8vVE9ETyB0aGlzIHNob3VsZCBiZSBwYXNzZWQgYWxvbmcuLiBubyBzZXRcbiAgICAgICAgdGhpcy5ldmVudERhdGEuZGF0YSA9IHRvdWNoRGF0YTtcbiAgICAgICAgdGhpcy5ldmVudERhdGEuc3RvcHBlZCA9IGZhbHNlO1xuXG5cbiAgICAgICAgdGhpcy5wcm9jZXNzSW50ZXJhY3RpdmUoIHRvdWNoRGF0YS5nbG9iYWwsIHRoaXMucmVuZGVyZXIuX2xhc3RPYmplY3RSZW5kZXJlZCwgdGhpcy5wcm9jZXNzVG91Y2hFbmQsIHRydWUgKTtcblxuICAgICAgICB0aGlzLnJldHVyblRvdWNoRGF0YSggdG91Y2hEYXRhICk7XG4gICAgfVxufTtcblxuLyoqXG4gKiBQcm9jZXNzZXMgdGhlIHJlc3VsdCBvZiB0aGUgZW5kIG9mIGEgdG91Y2ggYW5kIGRpc3BhdGNoZXMgdGhlIGV2ZW50IGlmIG5lZWQgYmVcbiAqXG4gKiBAcGFyYW0gZGlzcGxheU9iamVjdCB7UElYSS5Db250YWluZXJ8UElYSS5TcHJpdGV8UElYSS5leHRyYXMuVGlsaW5nU3ByaXRlfSBUaGUgZGlzcGxheSBvYmplY3QgdGhhdCB3YXMgdGVzdGVkXG4gKiBAcGFyYW0gaGl0IHtib29sZWFufSB0aGUgcmVzdWx0IG9mIHRoZSBoaXQgdGVzdCBvbiB0aGUgZGlzcGxheSBvYmplY3RcbiAqIEBwcml2YXRlXG4gKi9cbkludGVyYWN0aW9uTWFuYWdlci5wcm90b3R5cGUucHJvY2Vzc1RvdWNoRW5kID0gZnVuY3Rpb24gKCBkaXNwbGF5T2JqZWN0LCBoaXQgKVxue1xuICAgIGlmKGhpdClcbiAgICB7XG4gICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudCggZGlzcGxheU9iamVjdCwgJ3RvdWNoZW5kJywgdGhpcy5ldmVudERhdGEgKTtcblxuICAgICAgICBpZiggZGlzcGxheU9iamVjdC5fdG91Y2hEb3duIClcbiAgICAgICAge1xuICAgICAgICAgICAgZGlzcGxheU9iamVjdC5fdG91Y2hEb3duID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLmRpc3BhdGNoRXZlbnQoIGRpc3BsYXlPYmplY3QsICd0YXAnLCB0aGlzLmV2ZW50RGF0YSApO1xuICAgICAgICB9XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIGlmKCBkaXNwbGF5T2JqZWN0Ll90b3VjaERvd24gKVxuICAgICAgICB7XG4gICAgICAgICAgICBkaXNwbGF5T2JqZWN0Ll90b3VjaERvd24gPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudCggZGlzcGxheU9iamVjdCwgJ3RvdWNoZW5kb3V0c2lkZScsIHRoaXMuZXZlbnREYXRhICk7XG4gICAgICAgIH1cbiAgICB9XG59O1xuXG4vKipcbiAqIElzIGNhbGxlZCB3aGVuIGEgdG91Y2ggaXMgbW92ZWQgYWNyb3NzIHRoZSByZW5kZXJlciBlbGVtZW50XG4gKlxuICogQHBhcmFtIGV2ZW50IHtFdmVudH0gVGhlIERPTSBldmVudCBvZiBhIHRvdWNoIG1vdmluZyBhY3Jvc3MgdGhlIHJlbmRlcmVyIHZpZXdcbiAqIEBwcml2YXRlXG4gKi9cbkludGVyYWN0aW9uTWFuYWdlci5wcm90b3R5cGUub25Ub3VjaE1vdmUgPSBmdW5jdGlvbiAoZXZlbnQpXG57XG4gICAgaWYgKHRoaXMuYXV0b1ByZXZlbnREZWZhdWx0KVxuICAgIHtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICB9XG5cbiAgICB2YXIgY2hhbmdlZFRvdWNoZXMgPSBldmVudC5jaGFuZ2VkVG91Y2hlcztcbiAgICB2YXIgY0xlbmd0aCA9IGNoYW5nZWRUb3VjaGVzLmxlbmd0aDtcblxuICAgIGZvciAodmFyIGk9MDsgaSA8IGNMZW5ndGg7IGkrKylcbiAgICB7XG4gICAgICAgIHZhciB0b3VjaEV2ZW50ID0gY2hhbmdlZFRvdWNoZXNbaV07XG5cbiAgICAgICAgdmFyIHRvdWNoRGF0YSA9IHRoaXMuZ2V0VG91Y2hEYXRhKCB0b3VjaEV2ZW50ICk7XG5cbiAgICAgICAgdG91Y2hEYXRhLm9yaWdpbmFsRXZlbnQgPSBldmVudDtcblxuICAgICAgICB0aGlzLmV2ZW50RGF0YS5kYXRhID0gdG91Y2hEYXRhO1xuICAgICAgICB0aGlzLmV2ZW50RGF0YS5zdG9wcGVkID0gZmFsc2U7XG5cbiAgICAgICAgdGhpcy5wcm9jZXNzSW50ZXJhY3RpdmUoIHRvdWNoRGF0YS5nbG9iYWwsIHRoaXMucmVuZGVyZXIuX2xhc3RPYmplY3RSZW5kZXJlZCwgdGhpcy5wcm9jZXNzVG91Y2hNb3ZlLCB0cnVlICk7XG5cbiAgICAgICAgdGhpcy5yZXR1cm5Ub3VjaERhdGEoIHRvdWNoRGF0YSApO1xuICAgIH1cbn07XG5cbi8qKlxuICogUHJvY2Vzc2VzIHRoZSByZXN1bHQgb2YgYSB0b3VjaCBtb3ZlIGNoZWNrIGFuZCBkaXNwYXRjaGVzIHRoZSBldmVudCBpZiBuZWVkIGJlXG4gKlxuICogQHBhcmFtIGRpc3BsYXlPYmplY3Qge1BJWEkuQ29udGFpbmVyfFBJWEkuU3ByaXRlfFBJWEkuZXh0cmFzLlRpbGluZ1Nwcml0ZX0gVGhlIGRpc3BsYXkgb2JqZWN0IHRoYXQgd2FzIHRlc3RlZFxuICogQHBhcmFtIGhpdCB7Ym9vbGVhbn0gdGhlIHJlc3VsdCBvZiB0aGUgaGl0IHRlc3Qgb24gdGhlIGRpc3BsYXkgb2JqZWN0XG4gKiBAcHJpdmF0ZVxuICovXG5JbnRlcmFjdGlvbk1hbmFnZXIucHJvdG90eXBlLnByb2Nlc3NUb3VjaE1vdmUgPSBmdW5jdGlvbiAoIGRpc3BsYXlPYmplY3QsIGhpdCApXG57XG4gICAgaGl0ID0gaGl0O1xuICAgIHRoaXMuZGlzcGF0Y2hFdmVudCggZGlzcGxheU9iamVjdCwgJ3RvdWNobW92ZScsIHRoaXMuZXZlbnREYXRhKTtcbn07XG5cbi8qKlxuICogR3JhYnMgYW4gaW50ZXJhY3Rpb24gZGF0YSBvYmplY3QgZnJvbSB0aGUgaW50ZXJuYWwgcG9vbFxuICpcbiAqIEBwYXJhbSB0b3VjaEV2ZW50IHtFdmVudERhdGF9IFRoZSB0b3VjaCBldmVudCB3ZSBuZWVkIHRvIHBhaXIgd2l0aCBhbiBpbnRlcmFjdGlvbkRhdGEgb2JqZWN0XG4gKlxuICogQHByaXZhdGVcbiAqL1xuSW50ZXJhY3Rpb25NYW5hZ2VyLnByb3RvdHlwZS5nZXRUb3VjaERhdGEgPSBmdW5jdGlvbiAodG91Y2hFdmVudClcbntcbiAgICB2YXIgdG91Y2hEYXRhID0gdGhpcy5pbnRlcmFjdGl2ZURhdGFQb29sLnBvcCgpO1xuXG4gICAgaWYoIXRvdWNoRGF0YSlcbiAgICB7XG4gICAgICAgIHRvdWNoRGF0YSA9IG5ldyBJbnRlcmFjdGlvbkRhdGEoKTtcbiAgICB9XG5cbiAgICB0b3VjaERhdGEuaWRlbnRpZmllciA9IHRvdWNoRXZlbnQuaWRlbnRpZmllcjtcbiAgICB0aGlzLm1hcFBvc2l0aW9uVG9Qb2ludCggdG91Y2hEYXRhLmdsb2JhbCwgdG91Y2hFdmVudC5jbGllbnRYLCB0b3VjaEV2ZW50LmNsaWVudFkgKTtcblxuICAgIGlmKG5hdmlnYXRvci5pc0NvY29vbkpTKVxuICAgIHtcbiAgICAgICAgdG91Y2hEYXRhLmdsb2JhbC54ID0gdG91Y2hEYXRhLmdsb2JhbC54IC8gdGhpcy5yZXNvbHV0aW9uO1xuICAgICAgICB0b3VjaERhdGEuZ2xvYmFsLnkgPSB0b3VjaERhdGEuZ2xvYmFsLnkgLyB0aGlzLnJlc29sdXRpb247XG4gICAgfVxuXG4gICAgdG91Y2hFdmVudC5nbG9iYWxYID0gdG91Y2hEYXRhLmdsb2JhbC54O1xuICAgIHRvdWNoRXZlbnQuZ2xvYmFsWSA9IHRvdWNoRGF0YS5nbG9iYWwueTtcblxuICAgIHJldHVybiB0b3VjaERhdGE7XG59O1xuXG4vKipcbiAqIFJldHVybnMgYW4gaW50ZXJhY3Rpb24gZGF0YSBvYmplY3QgdG8gdGhlIGludGVybmFsIHBvb2xcbiAqXG4gKiBAcGFyYW0gdG91Y2hEYXRhIHtQSVhJLmludGVyYWN0aW9uLkludGVyYWN0aW9uRGF0YX0gVGhlIHRvdWNoIGRhdGEgb2JqZWN0IHdlIHdhbnQgdG8gcmV0dXJuIHRvIHRoZSBwb29sXG4gKlxuICogQHByaXZhdGVcbiAqL1xuSW50ZXJhY3Rpb25NYW5hZ2VyLnByb3RvdHlwZS5yZXR1cm5Ub3VjaERhdGEgPSBmdW5jdGlvbiAoIHRvdWNoRGF0YSApXG57XG4gICAgdGhpcy5pbnRlcmFjdGl2ZURhdGFQb29sLnB1c2goIHRvdWNoRGF0YSApO1xufTtcblxuLyoqXG4gKiBEZXN0cm95cyB0aGUgaW50ZXJhY3Rpb24gbWFuYWdlclxuICpcbiAqL1xuSW50ZXJhY3Rpb25NYW5hZ2VyLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKCkge1xuICAgIHRoaXMucmVtb3ZlRXZlbnRzKCk7XG5cbiAgICB0aGlzLnJlbmRlcmVyID0gbnVsbDtcblxuICAgIHRoaXMubW91c2UgPSBudWxsO1xuXG4gICAgdGhpcy5ldmVudERhdGEgPSBudWxsO1xuXG4gICAgdGhpcy5pbnRlcmFjdGl2ZURhdGFQb29sID0gbnVsbDtcblxuICAgIHRoaXMuaW50ZXJhY3Rpb25ET01FbGVtZW50ID0gbnVsbDtcblxuICAgIHRoaXMub25Nb3VzZVVwID0gbnVsbDtcbiAgICB0aGlzLnByb2Nlc3NNb3VzZVVwID0gbnVsbDtcblxuXG4gICAgdGhpcy5vbk1vdXNlRG93biA9IG51bGw7XG4gICAgdGhpcy5wcm9jZXNzTW91c2VEb3duID0gbnVsbDtcblxuICAgIHRoaXMub25Nb3VzZU1vdmUgPSBudWxsO1xuICAgIHRoaXMucHJvY2Vzc01vdXNlTW92ZSA9IG51bGw7XG5cbiAgICB0aGlzLm9uTW91c2VPdXQgPSBudWxsO1xuICAgIHRoaXMucHJvY2Vzc01vdXNlT3Zlck91dCA9IG51bGw7XG5cblxuICAgIHRoaXMub25Ub3VjaFN0YXJ0ID0gbnVsbDtcbiAgICB0aGlzLnByb2Nlc3NUb3VjaFN0YXJ0ID0gbnVsbDtcblxuICAgIHRoaXMub25Ub3VjaEVuZCA9IG51bGw7XG4gICAgdGhpcy5wcm9jZXNzVG91Y2hFbmQgPSBudWxsO1xuXG4gICAgdGhpcy5vblRvdWNoTW92ZSA9IG51bGw7XG4gICAgdGhpcy5wcm9jZXNzVG91Y2hNb3ZlID0gbnVsbDtcblxuICAgIHRoaXMuX3RlbXBQb2ludCA9IG51bGw7XG59O1xuXG5jb3JlLldlYkdMUmVuZGVyZXIucmVnaXN0ZXJQbHVnaW4oJ2ludGVyYWN0aW9uJywgSW50ZXJhY3Rpb25NYW5hZ2VyKTtcbmNvcmUuQ2FudmFzUmVuZGVyZXIucmVnaXN0ZXJQbHVnaW4oJ2ludGVyYWN0aW9uJywgSW50ZXJhY3Rpb25NYW5hZ2VyKTtcbiIsIi8qKlxuICogQGZpbGUgICAgICAgIE1haW4gZXhwb3J0IG9mIHRoZSBQSVhJIGludGVyYWN0aW9ucyBsaWJyYXJ5XG4gKiBAYXV0aG9yICAgICAgTWF0IEdyb3ZlcyA8bWF0QGdvb2Rib3lkaWdpdGFsLmNvbT5cbiAqIEBjb3B5cmlnaHQgICAyMDEzLTIwMTUgR29vZEJveURpZ2l0YWxcbiAqIEBsaWNlbnNlICAgICB7QGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL3BpeGlqcy9waXhpLmpzL2Jsb2IvbWFzdGVyL0xJQ0VOU0V8TUlUIExpY2Vuc2V9XG4gKi9cblxuLyoqXG4gKiBAbmFtZXNwYWNlIFBJWEkuaW50ZXJhY3Rpb25cbiAqL1xubW9kdWxlLmV4cG9ydHMgPSB7XG4gICAgSW50ZXJhY3Rpb25EYXRhOiAgICByZXF1aXJlKCcuL0ludGVyYWN0aW9uRGF0YScpLFxuICAgIEludGVyYWN0aW9uTWFuYWdlcjogcmVxdWlyZSgnLi9JbnRlcmFjdGlvbk1hbmFnZXInKSxcbiAgICBpbnRlcmFjdGl2ZVRhcmdldDogIHJlcXVpcmUoJy4vaW50ZXJhY3RpdmVUYXJnZXQnKVxufTtcbiIsIi8qKlxuICogRGVmYXVsdCBwcm9wZXJ0eSB2YWx1ZXMgb2YgaW50ZXJhY3RpdmUgb2JqZWN0c1xuICogdXNlZCBieSB7QGxpbmsgUElYSS5pbnRlcmFjdGlvbi5JbnRlcmFjdGlvbk1hbmFnZXJ9LlxuICpcbiAqIEBtaXhpblxuICogQG1lbWJlcm9mIFBJWEkuaW50ZXJhY3Rpb25cbiAqIEBleGFtcGxlXG4gKiAgICAgIGZ1bmN0aW9uIE15T2JqZWN0KCkge31cbiAqXG4gKiAgICAgIE9iamVjdC5hc3NpZ24oXG4gKiAgICAgICAgICBNeU9iamVjdC5wcm90b3R5cGUsXG4gKiAgICAgICAgICBQSVhJLmludGVyYWN0aW9uLmludGVyYWN0aXZlVGFyZ2V0XG4gKiAgICAgICk7XG4gKi9cbnZhciBpbnRlcmFjdGl2ZVRhcmdldCA9IHtcbiAgICAvKipcbiAgICAgKiBAdG9kbyBOZWVkcyBkb2NzLlxuICAgICAqL1xuICAgIGludGVyYWN0aXZlOiBmYWxzZSxcbiAgICAvKipcbiAgICAgKiBAdG9kbyBOZWVkcyBkb2NzLlxuICAgICAqL1xuICAgIGJ1dHRvbk1vZGU6IGZhbHNlLFxuICAgIC8qKlxuICAgICAqIEB0b2RvIE5lZWRzIGRvY3MuXG4gICAgICovXG4gICAgaW50ZXJhY3RpdmVDaGlsZHJlbjogdHJ1ZSxcbiAgICAvKipcbiAgICAgKiBAdG9kbyBOZWVkcyBkb2NzLlxuICAgICAqL1xuICAgIGRlZmF1bHRDdXJzb3I6ICdwb2ludGVyJyxcblxuICAgIC8vIHNvbWUgaW50ZXJuYWwgY2hlY2tzLi5cblxuICAgIC8qKlxuICAgICAqIEB0b2RvIE5lZWRzIGRvY3MuXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICBfb3ZlcjogZmFsc2UsXG4gICAgLyoqXG4gICAgICogQHRvZG8gTmVlZHMgZG9jcy5cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIF90b3VjaERvd246IGZhbHNlXG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGludGVyYWN0aXZlVGFyZ2V0O1xuIiwidmFyIFJlc291cmNlID0gcmVxdWlyZSgncmVzb3VyY2UtbG9hZGVyJykuUmVzb3VyY2UsXG4gICAgY29yZSA9IHJlcXVpcmUoJy4uL2NvcmUnKSxcbiAgICBleHRyYXMgPSByZXF1aXJlKCcuLi9leHRyYXMnKSxcbiAgICBwYXRoID0gcmVxdWlyZSgncGF0aCcpO1xuXG5cbmZ1bmN0aW9uIHBhcnNlKHJlc291cmNlLCB0ZXh0dXJlKSB7XG4gICAgdmFyIGRhdGEgPSB7fTtcbiAgICB2YXIgaW5mbyA9IHJlc291cmNlLmRhdGEuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2luZm8nKVswXTtcbiAgICB2YXIgY29tbW9uID0gcmVzb3VyY2UuZGF0YS5nZXRFbGVtZW50c0J5VGFnTmFtZSgnY29tbW9uJylbMF07XG5cbiAgICBkYXRhLmZvbnQgPSBpbmZvLmdldEF0dHJpYnV0ZSgnZmFjZScpO1xuICAgIGRhdGEuc2l6ZSA9IHBhcnNlSW50KGluZm8uZ2V0QXR0cmlidXRlKCdzaXplJyksIDEwKTtcbiAgICBkYXRhLmxpbmVIZWlnaHQgPSBwYXJzZUludChjb21tb24uZ2V0QXR0cmlidXRlKCdsaW5lSGVpZ2h0JyksIDEwKTtcbiAgICBkYXRhLmNoYXJzID0ge307XG5cbiAgICAvL3BhcnNlIGxldHRlcnNcbiAgICB2YXIgbGV0dGVycyA9IHJlc291cmNlLmRhdGEuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2NoYXInKTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGV0dGVycy5sZW5ndGg7IGkrKylcbiAgICB7XG4gICAgICAgIHZhciBjaGFyQ29kZSA9IHBhcnNlSW50KGxldHRlcnNbaV0uZ2V0QXR0cmlidXRlKCdpZCcpLCAxMCk7XG5cbiAgICAgICAgdmFyIHRleHR1cmVSZWN0ID0gbmV3IGNvcmUuUmVjdGFuZ2xlKFxuICAgICAgICAgICAgcGFyc2VJbnQobGV0dGVyc1tpXS5nZXRBdHRyaWJ1dGUoJ3gnKSwgMTApICsgdGV4dHVyZS5mcmFtZS54LFxuICAgICAgICAgICAgcGFyc2VJbnQobGV0dGVyc1tpXS5nZXRBdHRyaWJ1dGUoJ3knKSwgMTApICsgdGV4dHVyZS5mcmFtZS55LFxuICAgICAgICAgICAgcGFyc2VJbnQobGV0dGVyc1tpXS5nZXRBdHRyaWJ1dGUoJ3dpZHRoJyksIDEwKSxcbiAgICAgICAgICAgIHBhcnNlSW50KGxldHRlcnNbaV0uZ2V0QXR0cmlidXRlKCdoZWlnaHQnKSwgMTApXG4gICAgICAgICk7XG5cbiAgICAgICAgZGF0YS5jaGFyc1tjaGFyQ29kZV0gPSB7XG4gICAgICAgICAgICB4T2Zmc2V0OiBwYXJzZUludChsZXR0ZXJzW2ldLmdldEF0dHJpYnV0ZSgneG9mZnNldCcpLCAxMCksXG4gICAgICAgICAgICB5T2Zmc2V0OiBwYXJzZUludChsZXR0ZXJzW2ldLmdldEF0dHJpYnV0ZSgneW9mZnNldCcpLCAxMCksXG4gICAgICAgICAgICB4QWR2YW5jZTogcGFyc2VJbnQobGV0dGVyc1tpXS5nZXRBdHRyaWJ1dGUoJ3hhZHZhbmNlJyksIDEwKSxcbiAgICAgICAgICAgIGtlcm5pbmc6IHt9LFxuICAgICAgICAgICAgdGV4dHVyZTogbmV3IGNvcmUuVGV4dHVyZSh0ZXh0dXJlLmJhc2VUZXh0dXJlLCB0ZXh0dXJlUmVjdClcblxuICAgICAgICB9O1xuICAgIH1cblxuICAgIC8vcGFyc2Uga2VybmluZ3NcbiAgICB2YXIga2VybmluZ3MgPSByZXNvdXJjZS5kYXRhLmdldEVsZW1lbnRzQnlUYWdOYW1lKCdrZXJuaW5nJyk7XG4gICAgZm9yIChpID0gMDsgaSA8IGtlcm5pbmdzLmxlbmd0aDsgaSsrKVxuICAgIHtcbiAgICAgICAgdmFyIGZpcnN0ID0gcGFyc2VJbnQoa2VybmluZ3NbaV0uZ2V0QXR0cmlidXRlKCdmaXJzdCcpLCAxMCk7XG4gICAgICAgIHZhciBzZWNvbmQgPSBwYXJzZUludChrZXJuaW5nc1tpXS5nZXRBdHRyaWJ1dGUoJ3NlY29uZCcpLCAxMCk7XG4gICAgICAgIHZhciBhbW91bnQgPSBwYXJzZUludChrZXJuaW5nc1tpXS5nZXRBdHRyaWJ1dGUoJ2Ftb3VudCcpLCAxMCk7XG5cbiAgICAgICAgZGF0YS5jaGFyc1tzZWNvbmRdLmtlcm5pbmdbZmlyc3RdID0gYW1vdW50O1xuICAgIH1cblxuICAgIHJlc291cmNlLmJpdG1hcEZvbnQgPSBkYXRhO1xuXG4gICAgLy8gSSdtIGxlYXZpbmcgdGhpcyBhcyBhIHRlbXBvcmFyeSBmaXggc28gd2UgY2FuIHRlc3QgdGhlIGJpdG1hcCBmb250cyBpbiB2M1xuICAgIC8vIGJ1dCBpdCdzIHZlcnkgbGlrZWx5IHRvIGNoYW5nZVxuICAgIGV4dHJhcy5CaXRtYXBUZXh0LmZvbnRzW2RhdGEuZm9udF0gPSBkYXRhO1xufVxuXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKClcbntcbiAgICByZXR1cm4gZnVuY3Rpb24gKHJlc291cmNlLCBuZXh0KVxuICAgIHtcbiAgICAgICAgLy8gc2tpcCBpZiBubyBkYXRhIG9yIG5vdCB4bWwgZGF0YVxuICAgICAgICBpZiAoIXJlc291cmNlLmRhdGEgfHwgIXJlc291cmNlLmlzWG1sKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gbmV4dCgpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gc2tpcCBpZiBub3QgYml0bWFwIGZvbnQgZGF0YSwgdXNpbmcgc29tZSBzaWxseSBkdWNrLXR5cGluZ1xuICAgICAgICBpZiAoXG4gICAgICAgICAgICByZXNvdXJjZS5kYXRhLmdldEVsZW1lbnRzQnlUYWdOYW1lKCdwYWdlJykubGVuZ3RoID09PSAwIHx8XG4gICAgICAgICAgICByZXNvdXJjZS5kYXRhLmdldEVsZW1lbnRzQnlUYWdOYW1lKCdpbmZvJykubGVuZ3RoID09PSAwIHx8XG4gICAgICAgICAgICByZXNvdXJjZS5kYXRhLmdldEVsZW1lbnRzQnlUYWdOYW1lKCdpbmZvJylbMF0uZ2V0QXR0cmlidXRlKCdmYWNlJykgPT09IG51bGxcbiAgICAgICAgICAgIClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIG5leHQoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciB4bWxVcmwgPSBwYXRoLmRpcm5hbWUocmVzb3VyY2UudXJsKTtcblxuICAgICAgICBpZiAoeG1sVXJsID09PSAnLicpIHtcbiAgICAgICAgICAgIHhtbFVybCA9ICcnO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuYmFzZVVybCAmJiB4bWxVcmwpIHtcbiAgICAgICAgICAgIC8vIGlmIGJhc2V1cmwgaGFzIGEgdHJhaWxpbmcgc2xhc2ggdGhlbiBhZGQgb25lIHRvIHhtbFVybCBzbyB0aGUgcmVwbGFjZSB3b3JrcyBiZWxvd1xuICAgICAgICAgICAgaWYgKHRoaXMuYmFzZVVybC5jaGFyQXQodGhpcy5iYXNlVXJsLmxlbmd0aCAtIDEpID09PSAnLycpIHtcbiAgICAgICAgICAgICAgICB4bWxVcmwgKz0gJy8nO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyByZW1vdmUgYmFzZVVybCBmcm9tIHhtbFVybFxuICAgICAgICAgICAgeG1sVXJsID0geG1sVXJsLnJlcGxhY2UodGhpcy5iYXNlVXJsLCAnJyk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBpZiB0aGVyZSBpcyBhbiB4bWxVcmwgbm93LCBpdCBuZWVkcyBhIHRyYWlsaW5nIHNsYXNoLiBFbnN1cmUgdGhhdCBpdCBkb2VzIGlmIHRoZSBzdHJpbmcgaXNuJ3QgZW1wdHkuXG4gICAgICAgIGlmICh4bWxVcmwgJiYgeG1sVXJsLmNoYXJBdCh4bWxVcmwubGVuZ3RoIC0gMSkgIT09ICcvJykge1xuICAgICAgICAgICAgeG1sVXJsICs9ICcvJztcbiAgICAgICAgfVxuICAgICAgICB2YXIgdGV4dHVyZVVybCA9IHhtbFVybCArIHJlc291cmNlLmRhdGEuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ3BhZ2UnKVswXS5nZXRBdHRyaWJ1dGUoJ2ZpbGUnKTtcbiAgICAgICAgaWYgKGNvcmUudXRpbHMuVGV4dHVyZUNhY2hlW3RleHR1cmVVcmxdKSB7XG4gICAgICAgICAgICAvL3JldXNlIGV4aXN0aW5nIHRleHR1cmVcbiAgICAgICAgICAgIHBhcnNlKHJlc291cmNlLCBjb3JlLnV0aWxzLlRleHR1cmVDYWNoZVt0ZXh0dXJlVXJsXSk7XG4gICAgICAgICAgICBuZXh0KCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB2YXIgbG9hZE9wdGlvbnMgPSB7XG4gICAgICAgICAgICAgICAgY3Jvc3NPcmlnaW46IHJlc291cmNlLmNyb3NzT3JpZ2luLFxuICAgICAgICAgICAgICAgIGxvYWRUeXBlOiBSZXNvdXJjZS5MT0FEX1RZUEUuSU1BR0UsXG4gICAgICAgICAgICAgICAgbWV0YWRhdGE6IHJlc291cmNlLm1ldGFkYXRhLmltYWdlTWV0YWRhdGFcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICAvLyBsb2FkIHRoZSB0ZXh0dXJlIGZvciB0aGUgZm9udFxuICAgICAgICAgICAgdGhpcy5hZGQocmVzb3VyY2UubmFtZSArICdfaW1hZ2UnLCB0ZXh0dXJlVXJsLCBsb2FkT3B0aW9ucywgZnVuY3Rpb24gKHJlcykge1xuICAgICAgICAgICAgICAgIHBhcnNlKHJlc291cmNlLCByZXMudGV4dHVyZSk7XG4gICAgICAgICAgICAgICAgbmV4dCgpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9O1xufTtcbiIsIi8qKlxuICogQGZpbGUgICAgICAgIE1haW4gZXhwb3J0IG9mIHRoZSBQSVhJIGxvYWRlcnMgbGlicmFyeVxuICogQGF1dGhvciAgICAgIE1hdCBHcm92ZXMgPG1hdEBnb29kYm95ZGlnaXRhbC5jb20+XG4gKiBAY29weXJpZ2h0ICAgMjAxMy0yMDE1IEdvb2RCb3lEaWdpdGFsXG4gKiBAbGljZW5zZSAgICAge0BsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9waXhpanMvcGl4aS5qcy9ibG9iL21hc3Rlci9MSUNFTlNFfE1JVCBMaWNlbnNlfVxuICovXG5cbi8qKlxuICogQG5hbWVzcGFjZSBQSVhJLmxvYWRlcnNcbiAqL1xubW9kdWxlLmV4cG9ydHMgPSB7XG4gICAgTG9hZGVyOiAgICAgICAgICAgICByZXF1aXJlKCcuL2xvYWRlcicpLFxuXG4gICAgLy8gcGFyc2Vyc1xuICAgIGJpdG1hcEZvbnRQYXJzZXI6ICAgcmVxdWlyZSgnLi9iaXRtYXBGb250UGFyc2VyJyksXG4gICAgc3ByaXRlc2hlZXRQYXJzZXI6ICByZXF1aXJlKCcuL3Nwcml0ZXNoZWV0UGFyc2VyJyksXG4gICAgdGV4dHVyZVBhcnNlcjogICAgICByZXF1aXJlKCcuL3RleHR1cmVQYXJzZXInKSxcbiAgICBSZXNvdXJjZTogICAgICAgICAgIHJlcXVpcmUoJ3Jlc291cmNlLWxvYWRlcicpLlJlc291cmNlXG59O1xuIiwidmFyIFJlc291cmNlTG9hZGVyID0gcmVxdWlyZSgncmVzb3VyY2UtbG9hZGVyJyksXG4gICAgdGV4dHVyZVBhcnNlciA9IHJlcXVpcmUoJy4vdGV4dHVyZVBhcnNlcicpLFxuICAgIHNwcml0ZXNoZWV0UGFyc2VyID0gcmVxdWlyZSgnLi9zcHJpdGVzaGVldFBhcnNlcicpLFxuICAgIGJpdG1hcEZvbnRQYXJzZXIgPSByZXF1aXJlKCcuL2JpdG1hcEZvbnRQYXJzZXInKTtcblxuLyoqXG4gKlxuICogVGhlIG5ldyBsb2FkZXIsIGV4dGVuZHMgUmVzb3VyY2UgTG9hZGVyIGJ5IENoYWQgRW5nbGVyIDogaHR0cHM6Ly9naXRodWIuY29tL2VuZ2xlcmNqL3Jlc291cmNlLWxvYWRlclxuICpcbiAqIGBgYGpzXG4gKiB2YXIgbG9hZGVyID0gUElYSS5sb2FkZXI7IC8vIHBpeGkgZXhwb3NlcyBhIHByZW1hZGUgaW5zdGFuY2UgZm9yIHlvdSB0byB1c2UuXG4gKiAvL29yXG4gKiB2YXIgbG9hZGVyID0gbmV3IFBJWEkubG9hZGVycy5Mb2FkZXIoKTsgLy8geW91IGNhbiBhbHNvIGNyZWF0ZSB5b3VyIG93biBpZiB5b3Ugd2FudFxuICpcbiAqIGxvYWRlci5hZGQoJ2J1bm55JyxcImRhdGEvYnVubnkucG5nXCIpO1xuICpcbiAqIGxvYWRlci5vbmNlKCdjb21wbGV0ZScsb25Bc3NldHNMb2FkZWQpO1xuICpcbiAqIGxvYWRlci5sb2FkKCk7XG4gKiBgYGBcbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuUmVzb3VyY2VMb2FkZXJcbiAqIEBtZW1iZXJvZiBQSVhJLmxvYWRlcnNcbiAqIEBwYXJhbSBbYmFzZVVybD0nJ10ge3N0cmluZ30gVGhlIGJhc2UgdXJsIGZvciBhbGwgcmVzb3VyY2VzIGxvYWRlZCBieSB0aGlzIGxvYWRlci5cbiAqIEBwYXJhbSBbY29uY3VycmVuY3k9MTBdIHtudW1iZXJ9IFRoZSBudW1iZXIgb2YgcmVzb3VyY2VzIHRvIGxvYWQgY29uY3VycmVudGx5LlxuICovXG5mdW5jdGlvbiBMb2FkZXIoYmFzZVVybCwgY29uY3VycmVuY3kpXG57XG4gICAgUmVzb3VyY2VMb2FkZXIuY2FsbCh0aGlzLCBiYXNlVXJsLCBjb25jdXJyZW5jeSk7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IExvYWRlci5fcGl4aU1pZGRsZXdhcmUubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgdGhpcy51c2UoTG9hZGVyLl9waXhpTWlkZGxld2FyZVtpXSgpKTtcbiAgICB9XG59XG5cbkxvYWRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFJlc291cmNlTG9hZGVyLnByb3RvdHlwZSk7XG5Mb2FkZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gTG9hZGVyO1xuXG5tb2R1bGUuZXhwb3J0cyA9IExvYWRlcjtcblxuTG9hZGVyLl9waXhpTWlkZGxld2FyZSA9IFtcbiAgICAvLyBwYXJzZSBhbnkgYmxvYiBpbnRvIG1vcmUgdXNhYmxlIG9iamVjdHMgKGUuZy4gSW1hZ2UpXG4gICAgUmVzb3VyY2VMb2FkZXIubWlkZGxld2FyZS5wYXJzaW5nLmJsb2IsXG4gICAgLy8gcGFyc2UgYW55IEltYWdlIG9iamVjdHMgaW50byB0ZXh0dXJlc1xuICAgIHRleHR1cmVQYXJzZXIsXG4gICAgLy8gcGFyc2UgYW55IHNwcml0ZXNoZWV0IGRhdGEgaW50byBtdWx0aXBsZSB0ZXh0dXJlc1xuICAgIHNwcml0ZXNoZWV0UGFyc2VyLFxuICAgIC8vIHBhcnNlIGFueSBzcHJpdGVzaGVldCBkYXRhIGludG8gbXVsdGlwbGUgdGV4dHVyZXNcbiAgICBiaXRtYXBGb250UGFyc2VyXG5dO1xuXG5Mb2FkZXIuYWRkUGl4aU1pZGRsZXdhcmUgPSBmdW5jdGlvbiAoZm4pIHtcbiAgICBMb2FkZXIuX3BpeGlNaWRkbGV3YXJlLnB1c2goZm4pO1xufTtcblxuLy8gQWRkIGN1c3RvbSBleHRlbnRpb25zXG52YXIgUmVzb3VyY2UgPSBSZXNvdXJjZUxvYWRlci5SZXNvdXJjZTtcblxuUmVzb3VyY2Uuc2V0RXh0ZW5zaW9uWGhyVHlwZSgnZm50JywgUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuRE9DVU1FTlQpO1xuIiwidmFyIFJlc291cmNlID0gcmVxdWlyZSgncmVzb3VyY2UtbG9hZGVyJykuUmVzb3VyY2UsXG4gICAgcGF0aCA9IHJlcXVpcmUoJ3BhdGgnKSxcbiAgICBjb3JlID0gcmVxdWlyZSgnLi4vY29yZScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICgpXG57XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChyZXNvdXJjZSwgbmV4dClcbiAgICB7XG4gICAgICAgIC8vIHNraXAgaWYgbm8gZGF0YSwgaXRzIG5vdCBqc29uLCBvciBpdCBpc24ndCBzcHJpdGVzaGVldCBkYXRhXG4gICAgICAgIGlmICghcmVzb3VyY2UuZGF0YSB8fCAhcmVzb3VyY2UuaXNKc29uIHx8ICFyZXNvdXJjZS5kYXRhLmZyYW1lcylcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIG5leHQoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBsb2FkT3B0aW9ucyA9IHtcbiAgICAgICAgICAgIGNyb3NzT3JpZ2luOiByZXNvdXJjZS5jcm9zc09yaWdpbixcbiAgICAgICAgICAgIGxvYWRUeXBlOiBSZXNvdXJjZS5MT0FEX1RZUEUuSU1BR0UsXG4gICAgICAgICAgICBtZXRhZGF0YTogcmVzb3VyY2UubWV0YWRhdGEuaW1hZ2VNZXRhZGF0YVxuICAgICAgICB9O1xuXG4gICAgICAgIHZhciByb3V0ZSA9IHBhdGguZGlybmFtZShyZXNvdXJjZS51cmwucmVwbGFjZSh0aGlzLmJhc2VVcmwsICcnKSk7XG5cbiAgICAgICAgdmFyIHJlc29sdXRpb24gPSBjb3JlLnV0aWxzLmdldFJlc29sdXRpb25PZlVybCggcmVzb3VyY2UudXJsICk7XG5cbiAgICAgICAgLy8gbG9hZCB0aGUgaW1hZ2UgZm9yIHRoaXMgc2hlZXRcbiAgICAgICAgdGhpcy5hZGQocmVzb3VyY2UubmFtZSArICdfaW1hZ2UnLCByb3V0ZSArICcvJyArIHJlc291cmNlLmRhdGEubWV0YS5pbWFnZSwgbG9hZE9wdGlvbnMsIGZ1bmN0aW9uIChyZXMpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJlc291cmNlLnRleHR1cmVzID0ge307XG5cbiAgICAgICAgICAgIHZhciBmcmFtZXMgPSByZXNvdXJjZS5kYXRhLmZyYW1lcztcblxuICAgICAgICAgICAgZm9yICh2YXIgaSBpbiBmcmFtZXMpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdmFyIHJlY3QgPSBmcmFtZXNbaV0uZnJhbWU7XG5cbiAgICAgICAgICAgICAgICBpZiAocmVjdClcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBzaXplID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHRyaW0gPSBudWxsO1xuXG4gICAgICAgICAgICAgICAgICAgIGlmIChmcmFtZXNbaV0ucm90YXRlZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZSA9IG5ldyBjb3JlLlJlY3RhbmdsZShyZWN0LngsIHJlY3QueSwgcmVjdC5oLCByZWN0LncpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZSA9IG5ldyBjb3JlLlJlY3RhbmdsZShyZWN0LngsIHJlY3QueSwgcmVjdC53LCByZWN0LmgpO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgLy8gIENoZWNrIHRvIHNlZSBpZiB0aGUgc3ByaXRlIGlzIHRyaW1tZWRcbiAgICAgICAgICAgICAgICAgICAgaWYgKGZyYW1lc1tpXS50cmltbWVkKVxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0cmltID0gbmV3IGNvcmUuUmVjdGFuZ2xlKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyYW1lc1tpXS5zcHJpdGVTb3VyY2VTaXplLnggLyByZXNvbHV0aW9uLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyYW1lc1tpXS5zcHJpdGVTb3VyY2VTaXplLnkgLyByZXNvbHV0aW9uLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyYW1lc1tpXS5zb3VyY2VTaXplLncgLyByZXNvbHV0aW9uLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyYW1lc1tpXS5zb3VyY2VTaXplLmggLyByZXNvbHV0aW9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIC8vIGZsaXAgdGhlIHdpZHRoIGFuZCBoZWlnaHQhXG4gICAgICAgICAgICAgICAgICAgIGlmIChmcmFtZXNbaV0ucm90YXRlZClcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHRlbXAgPSBzaXplLndpZHRoO1xuICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZS53aWR0aCA9IHNpemUuaGVpZ2h0O1xuICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZS5oZWlnaHQgPSB0ZW1wO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgc2l6ZS54IC89IHJlc29sdXRpb247XG4gICAgICAgICAgICAgICAgICAgIHNpemUueSAvPSByZXNvbHV0aW9uO1xuICAgICAgICAgICAgICAgICAgICBzaXplLndpZHRoIC89IHJlc29sdXRpb247XG4gICAgICAgICAgICAgICAgICAgIHNpemUuaGVpZ2h0IC89IHJlc29sdXRpb247XG5cbiAgICAgICAgICAgICAgICAgICAgcmVzb3VyY2UudGV4dHVyZXNbaV0gPSBuZXcgY29yZS5UZXh0dXJlKHJlcy50ZXh0dXJlLmJhc2VUZXh0dXJlLCBzaXplLCBzaXplLmNsb25lKCksIHRyaW0sIGZyYW1lc1tpXS5yb3RhdGVkKTtcblxuICAgICAgICAgICAgICAgICAgICAvLyBsZXRzIGFsc28gYWRkIHRoZSBmcmFtZSB0byBwaXhpJ3MgZ2xvYmFsIGNhY2hlIGZvciBmcm9tRnJhbWUgYW5kIGZyb21JbWFnZSBmdW5jdGlvbnNcbiAgICAgICAgICAgICAgICAgICAgY29yZS51dGlscy5UZXh0dXJlQ2FjaGVbaV0gPSByZXNvdXJjZS50ZXh0dXJlc1tpXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIG5leHQoKTtcbiAgICAgICAgfSk7XG4gICAgfTtcbn07XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uL2NvcmUnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoKVxue1xuICAgIHJldHVybiBmdW5jdGlvbiAocmVzb3VyY2UsIG5leHQpXG4gICAge1xuICAgICAgICAvLyBjcmVhdGUgYSBuZXcgdGV4dHVyZSBpZiB0aGUgZGF0YSBpcyBhbiBJbWFnZSBvYmplY3RcbiAgICAgICAgaWYgKHJlc291cmNlLmRhdGEgJiYgcmVzb3VyY2UuaXNJbWFnZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdmFyIGJhc2VUZXh0dXJlID0gbmV3IGNvcmUuQmFzZVRleHR1cmUocmVzb3VyY2UuZGF0YSwgbnVsbCwgY29yZS51dGlscy5nZXRSZXNvbHV0aW9uT2ZVcmwocmVzb3VyY2UudXJsKSk7XG4gICAgICAgICAgICBiYXNlVGV4dHVyZS5pbWFnZVVybCA9IHJlc291cmNlLnVybDtcbiAgICAgICAgICAgIHJlc291cmNlLnRleHR1cmUgPSBuZXcgY29yZS5UZXh0dXJlKGJhc2VUZXh0dXJlKTtcbiAgICAgICAgICAgIC8vIGxldHMgYWxzbyBhZGQgdGhlIGZyYW1lIHRvIHBpeGkncyBnbG9iYWwgY2FjaGUgZm9yIGZyb21GcmFtZSBhbmQgZnJvbUltYWdlIGZ1Y250aW9uc1xuICAgICAgICAgICAgY29yZS51dGlscy5CYXNlVGV4dHVyZUNhY2hlW3Jlc291cmNlLnVybF0gPSBiYXNlVGV4dHVyZTtcbiAgICAgICAgICAgIGNvcmUudXRpbHMuVGV4dHVyZUNhY2hlW3Jlc291cmNlLnVybF0gPSByZXNvdXJjZS50ZXh0dXJlO1xuICAgICAgICB9XG5cbiAgICAgICAgbmV4dCgpO1xuICAgIH07XG59O1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi9jb3JlJyksXG4gICAgdGVtcFBvaW50ID0gbmV3IGNvcmUuUG9pbnQoKSxcbiAgICB0ZW1wUG9seWdvbiA9IG5ldyBjb3JlLlBvbHlnb24oKTtcblxuLyoqXG4gKiBCYXNlIG1lc2ggY2xhc3NcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5Db250YWluZXJcbiAqIEBtZW1iZXJvZiBQSVhJLm1lc2hcbiAqIEBwYXJhbSB0ZXh0dXJlIHtQSVhJLlRleHR1cmV9IFRoZSB0ZXh0dXJlIHRvIHVzZVxuICogQHBhcmFtIFt2ZXJ0aWNlc10ge0Zsb2F0MzJBcnJheX0gaWYgeW91IHdhbnQgdG8gc3BlY2lmeSB0aGUgdmVydGljZXNcbiAqIEBwYXJhbSBbdXZzXSB7RmxvYXQzMkFycmF5fSBpZiB5b3Ugd2FudCB0byBzcGVjaWZ5IHRoZSB1dnNcbiAqIEBwYXJhbSBbaW5kaWNlc10ge1VpbnQxNkFycmF5fSBpZiB5b3Ugd2FudCB0byBzcGVjaWZ5IHRoZSBpbmRpY2VzXG4gKiBAcGFyYW0gW2RyYXdNb2RlXSB7bnVtYmVyfSB0aGUgZHJhd01vZGUsIGNhbiBiZSBhbnkgb2YgdGhlIE1lc2guRFJBV19NT0RFUyBjb25zdHNcbiAqL1xuZnVuY3Rpb24gTWVzaCh0ZXh0dXJlLCB2ZXJ0aWNlcywgdXZzLCBpbmRpY2VzLCBkcmF3TW9kZSlcbntcbiAgICBjb3JlLkNvbnRhaW5lci5jYWxsKHRoaXMpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHRleHR1cmUgb2YgdGhlIE1lc2hcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuVGV4dHVyZX1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX3RleHR1cmUgPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogVGhlIFV2cyBvZiB0aGUgTWVzaFxuICAgICAqXG4gICAgICogQG1lbWJlciB7RmxvYXQzMkFycmF5fVxuICAgICAqL1xuICAgIHRoaXMudXZzID0gdXZzIHx8IG5ldyBGbG9hdDMyQXJyYXkoWzAsIDAsXG4gICAgICAgIDEsIDAsXG4gICAgICAgIDEsIDEsXG4gICAgICAgIDAsIDFdKTtcblxuICAgIC8qKlxuICAgICAqIEFuIGFycmF5IG9mIHZlcnRpY2VzXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtGbG9hdDMyQXJyYXl9XG4gICAgICovXG4gICAgdGhpcy52ZXJ0aWNlcyA9IHZlcnRpY2VzIHx8IG5ldyBGbG9hdDMyQXJyYXkoWzAsIDAsXG4gICAgICAgIDEwMCwgMCxcbiAgICAgICAgMTAwLCAxMDAsXG4gICAgICAgIDAsIDEwMF0pO1xuXG4gICAgLypcbiAgICAgKiBAbWVtYmVyIHtVaW50MTZBcnJheX0gQW4gYXJyYXkgY29udGFpbmluZyB0aGUgaW5kaWNlcyBvZiB0aGUgdmVydGljZXNcbiAgICAgKi9cbiAgICAvLyAgVE9ETyBhdXRvIGdlbmVyYXRlIHRoaXMgYmFzZWQgb24gZHJhdyBtb2RlIVxuICAgIHRoaXMuaW5kaWNlcyA9IGluZGljZXMgfHwgbmV3IFVpbnQxNkFycmF5KFswLCAxLCAzLCAyXSk7XG5cbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIHRoZSBNZXNoIGlzIGRpcnR5IG9yIG5vdFxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKi9cbiAgICB0aGlzLmRpcnR5ID0gdHJ1ZTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBibGVuZCBtb2RlIHRvIGJlIGFwcGxpZWQgdG8gdGhlIHNwcml0ZS4gU2V0IHRvIGBQSVhJLkJMRU5EX01PREVTLk5PUk1BTGAgdG8gcmVtb3ZlIGFueSBibGVuZCBtb2RlLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IFBJWEkuQkxFTkRfTU9ERVMuTk9STUFMXG4gICAgICogQHNlZSBQSVhJLkJMRU5EX01PREVTXG4gICAgICovXG4gICAgdGhpcy5ibGVuZE1vZGUgPSBjb3JlLkJMRU5EX01PREVTLk5PUk1BTDtcblxuICAgIC8qKlxuICAgICAqIFRyaWFuZ2xlcyBpbiBjYW52YXMgbW9kZSBhcmUgYXV0b21hdGljYWxseSBhbnRpYWxpYXNlZCwgdXNlIHRoaXMgdmFsdWUgdG8gZm9yY2UgdHJpYW5nbGVzIHRvIG92ZXJsYXAgYSBiaXQgd2l0aCBlYWNoIG90aGVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMuY2FudmFzUGFkZGluZyA9IDA7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgd2F5IHRoZSBNZXNoIHNob3VsZCBiZSBkcmF3biwgY2FuIGJlIGFueSBvZiB0aGUge0BsaW5rIFBJWEkubWVzaC5NZXNoLkRSQVdfTU9ERVN9IGNvbnN0c1xuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBzZWUgUElYSS5tZXNoLk1lc2guRFJBV19NT0RFU1xuICAgICAqL1xuICAgIHRoaXMuZHJhd01vZGUgPSBkcmF3TW9kZSB8fCBNZXNoLkRSQVdfTU9ERVMuVFJJQU5HTEVfTUVTSDtcblxuICAgIC8vIHJ1biB0ZXh0dXJlIHNldHRlcjtcbiAgICB0aGlzLnRleHR1cmUgPSB0ZXh0dXJlO1xuXG4gICAgIC8qKlxuICAgICAqIFRoZSBkZWZhdWx0IHNoYWRlciB0aGF0IGlzIHVzZWQgaWYgYSBtZXNoIGRvZXNuJ3QgaGF2ZSBhIG1vcmUgc3BlY2lmaWMgb25lLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5TaGFkZXJ9XG4gICAgICovXG4gICAgdGhpcy5zaGFkZXIgPSBudWxsO1xufVxuXG4vLyBjb25zdHJ1Y3RvclxuTWVzaC5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuQ29udGFpbmVyLnByb3RvdHlwZSk7XG5NZXNoLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IE1lc2g7XG5tb2R1bGUuZXhwb3J0cyA9IE1lc2g7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKE1lc2gucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogVGhlIHRleHR1cmUgdGhhdCB0aGUgc3ByaXRlIGlzIHVzaW5nXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlRleHR1cmV9XG4gICAgICogQG1lbWJlcm9mIFBJWEkubWVzaC5NZXNoI1xuICAgICAqL1xuICAgIHRleHR1cmU6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gIHRoaXMuX3RleHR1cmU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICBpZiAodGhpcy5fdGV4dHVyZSA9PT0gdmFsdWUpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLl90ZXh0dXJlID0gdmFsdWU7XG5cbiAgICAgICAgICAgIGlmICh2YWx1ZSlcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAvLyB3YWl0IGZvciB0aGUgdGV4dHVyZSB0byBsb2FkXG4gICAgICAgICAgICAgICAgaWYgKHZhbHVlLmJhc2VUZXh0dXJlLmhhc0xvYWRlZClcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX29uVGV4dHVyZVVwZGF0ZSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICB2YWx1ZS5vbmNlKCd1cGRhdGUnLCB0aGlzLl9vblRleHR1cmVVcGRhdGUsIHRoaXMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn0pO1xuXG4vKipcbiAqIFJlbmRlcnMgdGhlIG9iamVjdCB1c2luZyB0aGUgV2ViR0wgcmVuZGVyZXJcbiAqXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcn0gYSByZWZlcmVuY2UgdG8gdGhlIFdlYkdMIHJlbmRlcmVyXG4gKiBAcHJpdmF0ZVxuICovXG5NZXNoLnByb3RvdHlwZS5fcmVuZGVyV2ViR0wgPSBmdW5jdGlvbiAocmVuZGVyZXIpXG57XG4gICAgcmVuZGVyZXIuc2V0T2JqZWN0UmVuZGVyZXIocmVuZGVyZXIucGx1Z2lucy5tZXNoKTtcbiAgICByZW5kZXJlci5wbHVnaW5zLm1lc2gucmVuZGVyKHRoaXMpO1xufTtcblxuLyoqXG4gKiBSZW5kZXJzIHRoZSBvYmplY3QgdXNpbmcgdGhlIENhbnZhcyByZW5kZXJlclxuICpcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5DYW52YXNSZW5kZXJlcn1cbiAqIEBwcml2YXRlXG4gKi9cbk1lc2gucHJvdG90eXBlLl9yZW5kZXJDYW52YXMgPSBmdW5jdGlvbiAocmVuZGVyZXIpXG57XG4gICAgdmFyIGNvbnRleHQgPSByZW5kZXJlci5jb250ZXh0O1xuXG4gICAgdmFyIHRyYW5zZm9ybSA9IHRoaXMud29ybGRUcmFuc2Zvcm07XG5cbiAgICBpZiAocmVuZGVyZXIucm91bmRQaXhlbHMpXG4gICAge1xuICAgICAgICBjb250ZXh0LnNldFRyYW5zZm9ybSh0cmFuc2Zvcm0uYSwgdHJhbnNmb3JtLmIsIHRyYW5zZm9ybS5jLCB0cmFuc2Zvcm0uZCwgdHJhbnNmb3JtLnR4IHwgMCwgdHJhbnNmb3JtLnR5IHwgMCk7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIGNvbnRleHQuc2V0VHJhbnNmb3JtKHRyYW5zZm9ybS5hLCB0cmFuc2Zvcm0uYiwgdHJhbnNmb3JtLmMsIHRyYW5zZm9ybS5kLCB0cmFuc2Zvcm0udHgsIHRyYW5zZm9ybS50eSk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuZHJhd01vZGUgPT09IE1lc2guRFJBV19NT0RFUy5UUklBTkdMRV9NRVNIKVxuICAgIHtcbiAgICAgICAgdGhpcy5fcmVuZGVyQ2FudmFzVHJpYW5nbGVNZXNoKGNvbnRleHQpO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICB0aGlzLl9yZW5kZXJDYW52YXNUcmlhbmdsZXMoY29udGV4dCk7XG4gICAgfVxufTtcblxuLyoqXG4gKiBEcmF3cyB0aGUgb2JqZWN0IGluIFRyaWFuZ2xlIE1lc2ggbW9kZSB1c2luZyBjYW52YXNcbiAqXG4gKiBAcGFyYW0gY29udGV4dCB7Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEfSB0aGUgY3VycmVudCBkcmF3aW5nIGNvbnRleHRcbiAqIEBwcml2YXRlXG4gKi9cbk1lc2gucHJvdG90eXBlLl9yZW5kZXJDYW52YXNUcmlhbmdsZU1lc2ggPSBmdW5jdGlvbiAoY29udGV4dClcbntcbiAgICAvLyBkcmF3IHRyaWFuZ2xlcyEhXG4gICAgdmFyIHZlcnRpY2VzID0gdGhpcy52ZXJ0aWNlcztcbiAgICB2YXIgdXZzID0gdGhpcy51dnM7XG5cbiAgICB2YXIgbGVuZ3RoID0gdmVydGljZXMubGVuZ3RoIC8gMjtcbiAgICAvLyB0aGlzLmNvdW50Kys7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aCAtIDI7IGkrKylcbiAgICB7XG4gICAgICAgIC8vIGRyYXcgc29tZSB0cmlhbmdsZXMhXG4gICAgICAgIHZhciBpbmRleCA9IGkgKiAyO1xuICAgICAgICB0aGlzLl9yZW5kZXJDYW52YXNEcmF3VHJpYW5nbGUoY29udGV4dCwgdmVydGljZXMsIHV2cywgaW5kZXgsIChpbmRleCArIDIpLCAoaW5kZXggKyA0KSk7XG4gICAgfVxufTtcblxuLyoqXG4gKiBEcmF3cyB0aGUgb2JqZWN0IGluIHRyaWFuZ2xlIG1vZGUgdXNpbmcgY2FudmFzXG4gKlxuICogQHBhcmFtIGNvbnRleHQge0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRH0gdGhlIGN1cnJlbnQgZHJhd2luZyBjb250ZXh0XG4gKiBAcHJpdmF0ZVxuICovXG5NZXNoLnByb3RvdHlwZS5fcmVuZGVyQ2FudmFzVHJpYW5nbGVzID0gZnVuY3Rpb24gKGNvbnRleHQpXG57XG4gICAgLy8gZHJhdyB0cmlhbmdsZXMhIVxuICAgIHZhciB2ZXJ0aWNlcyA9IHRoaXMudmVydGljZXM7XG4gICAgdmFyIHV2cyA9IHRoaXMudXZzO1xuICAgIHZhciBpbmRpY2VzID0gdGhpcy5pbmRpY2VzO1xuXG4gICAgdmFyIGxlbmd0aCA9IGluZGljZXMubGVuZ3RoO1xuICAgIC8vIHRoaXMuY291bnQrKztcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyBpICs9IDMpXG4gICAge1xuICAgICAgICAvLyBkcmF3IHNvbWUgdHJpYW5nbGVzIVxuICAgICAgICB2YXIgaW5kZXgwID0gaW5kaWNlc1tpXSAqIDIsIGluZGV4MSA9IGluZGljZXNbaSArIDFdICogMiwgaW5kZXgyID0gaW5kaWNlc1tpICsgMl0gKiAyO1xuICAgICAgICB0aGlzLl9yZW5kZXJDYW52YXNEcmF3VHJpYW5nbGUoY29udGV4dCwgdmVydGljZXMsIHV2cywgaW5kZXgwLCBpbmRleDEsIGluZGV4Mik7XG4gICAgfVxufTtcblxuLyoqXG4gKiBEcmF3cyBvbmUgb2YgdGhlIHRyaWFuZ2xlcyB0aGF0IGZvcm0gdGhpcyBNZXNoXG4gKlxuICogQHBhcmFtIGNvbnRleHQge0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRH0gdGhlIGN1cnJlbnQgZHJhd2luZyBjb250ZXh0XG4gKiBAcGFyYW0gdmVydGljZXMge0Zsb2F0MzJBcnJheX0gYSByZWZlcmVuY2UgdG8gdGhlIHZlcnRpY2VzIG9mIHRoZSBNZXNoXG4gKiBAcGFyYW0gdXZzIHtGbG9hdDMyQXJyYXl9IGEgcmVmZXJlbmNlIHRvIHRoZSB1dnMgb2YgdGhlIE1lc2hcbiAqIEBwYXJhbSBpbmRleDAge251bWJlcn0gdGhlIGluZGV4IG9mIHRoZSBmaXJzdCB2ZXJ0ZXhcbiAqIEBwYXJhbSBpbmRleDEge251bWJlcn0gdGhlIGluZGV4IG9mIHRoZSBzZWNvbmQgdmVydGV4XG4gKiBAcGFyYW0gaW5kZXgyIHtudW1iZXJ9IHRoZSBpbmRleCBvZiB0aGUgdGhpcmQgdmVydGV4XG4gKiBAcHJpdmF0ZVxuICovXG5NZXNoLnByb3RvdHlwZS5fcmVuZGVyQ2FudmFzRHJhd1RyaWFuZ2xlID0gZnVuY3Rpb24gKGNvbnRleHQsIHZlcnRpY2VzLCB1dnMsIGluZGV4MCwgaW5kZXgxLCBpbmRleDIpXG57XG4gICAgdmFyIHRleHR1cmVTb3VyY2UgPSB0aGlzLl90ZXh0dXJlLmJhc2VUZXh0dXJlLnNvdXJjZTtcbiAgICB2YXIgdGV4dHVyZVdpZHRoID0gdGhpcy5fdGV4dHVyZS5iYXNlVGV4dHVyZS53aWR0aDtcbiAgICB2YXIgdGV4dHVyZUhlaWdodCA9IHRoaXMuX3RleHR1cmUuYmFzZVRleHR1cmUuaGVpZ2h0O1xuXG4gICAgdmFyIHgwID0gdmVydGljZXNbaW5kZXgwXSwgeDEgPSB2ZXJ0aWNlc1tpbmRleDFdLCB4MiA9IHZlcnRpY2VzW2luZGV4Ml07XG4gICAgdmFyIHkwID0gdmVydGljZXNbaW5kZXgwICsgMV0sIHkxID0gdmVydGljZXNbaW5kZXgxICsgMV0sIHkyID0gdmVydGljZXNbaW5kZXgyICsgMV07XG5cbiAgICB2YXIgdTAgPSB1dnNbaW5kZXgwXSAqIHRleHR1cmVXaWR0aCwgdTEgPSB1dnNbaW5kZXgxXSAqIHRleHR1cmVXaWR0aCwgdTIgPSB1dnNbaW5kZXgyXSAqIHRleHR1cmVXaWR0aDtcbiAgICB2YXIgdjAgPSB1dnNbaW5kZXgwICsgMV0gKiB0ZXh0dXJlSGVpZ2h0LCB2MSA9IHV2c1tpbmRleDEgKyAxXSAqIHRleHR1cmVIZWlnaHQsIHYyID0gdXZzW2luZGV4MiArIDFdICogdGV4dHVyZUhlaWdodDtcblxuICAgIGlmICh0aGlzLmNhbnZhc1BhZGRpbmcgPiAwKVxuICAgIHtcbiAgICAgICAgdmFyIHBhZGRpbmdYID0gdGhpcy5jYW52YXNQYWRkaW5nIC8gdGhpcy53b3JsZFRyYW5zZm9ybS5hO1xuICAgICAgICB2YXIgcGFkZGluZ1kgPSB0aGlzLmNhbnZhc1BhZGRpbmcgLyB0aGlzLndvcmxkVHJhbnNmb3JtLmQ7XG4gICAgICAgIHZhciBjZW50ZXJYID0gKHgwICsgeDEgKyB4MikgLyAzO1xuICAgICAgICB2YXIgY2VudGVyWSA9ICh5MCArIHkxICsgeTIpIC8gMztcblxuICAgICAgICB2YXIgbm9ybVggPSB4MCAtIGNlbnRlclg7XG4gICAgICAgIHZhciBub3JtWSA9IHkwIC0gY2VudGVyWTtcblxuICAgICAgICB2YXIgZGlzdCA9IE1hdGguc3FydChub3JtWCAqIG5vcm1YICsgbm9ybVkgKiBub3JtWSk7XG4gICAgICAgIHgwID0gY2VudGVyWCArIChub3JtWCAvIGRpc3QpICogKGRpc3QgKyBwYWRkaW5nWCk7XG4gICAgICAgIHkwID0gY2VudGVyWSArIChub3JtWSAvIGRpc3QpICogKGRpc3QgKyBwYWRkaW5nWSk7XG5cbiAgICAgICAgLy9cblxuICAgICAgICBub3JtWCA9IHgxIC0gY2VudGVyWDtcbiAgICAgICAgbm9ybVkgPSB5MSAtIGNlbnRlclk7XG5cbiAgICAgICAgZGlzdCA9IE1hdGguc3FydChub3JtWCAqIG5vcm1YICsgbm9ybVkgKiBub3JtWSk7XG4gICAgICAgIHgxID0gY2VudGVyWCArIChub3JtWCAvIGRpc3QpICogKGRpc3QgKyBwYWRkaW5nWCk7XG4gICAgICAgIHkxID0gY2VudGVyWSArIChub3JtWSAvIGRpc3QpICogKGRpc3QgKyBwYWRkaW5nWSk7XG5cbiAgICAgICAgbm9ybVggPSB4MiAtIGNlbnRlclg7XG4gICAgICAgIG5vcm1ZID0geTIgLSBjZW50ZXJZO1xuXG4gICAgICAgIGRpc3QgPSBNYXRoLnNxcnQobm9ybVggKiBub3JtWCArIG5vcm1ZICogbm9ybVkpO1xuICAgICAgICB4MiA9IGNlbnRlclggKyAobm9ybVggLyBkaXN0KSAqIChkaXN0ICsgcGFkZGluZ1gpO1xuICAgICAgICB5MiA9IGNlbnRlclkgKyAobm9ybVkgLyBkaXN0KSAqIChkaXN0ICsgcGFkZGluZ1kpO1xuICAgIH1cblxuICAgIGNvbnRleHQuc2F2ZSgpO1xuICAgIGNvbnRleHQuYmVnaW5QYXRoKCk7XG5cblxuICAgIGNvbnRleHQubW92ZVRvKHgwLCB5MCk7XG4gICAgY29udGV4dC5saW5lVG8oeDEsIHkxKTtcbiAgICBjb250ZXh0LmxpbmVUbyh4MiwgeTIpO1xuXG4gICAgY29udGV4dC5jbG9zZVBhdGgoKTtcblxuICAgIGNvbnRleHQuY2xpcCgpO1xuXG4gICAgLy8gQ29tcHV0ZSBtYXRyaXggdHJhbnNmb3JtXG4gICAgdmFyIGRlbHRhID0gICh1MCAqIHYxKSAgICAgICsgKHYwICogdTIpICAgICAgKyAodTEgKiB2MikgICAgICAtICh2MSAqIHUyKSAgICAgIC0gKHYwICogdTEpICAgICAgLSAodTAgKiB2Mik7XG4gICAgdmFyIGRlbHRhQSA9ICh4MCAqIHYxKSAgICAgICsgKHYwICogeDIpICAgICAgKyAoeDEgKiB2MikgICAgICAtICh2MSAqIHgyKSAgICAgIC0gKHYwICogeDEpICAgICAgLSAoeDAgKiB2Mik7XG4gICAgdmFyIGRlbHRhQiA9ICh1MCAqIHgxKSAgICAgICsgKHgwICogdTIpICAgICAgKyAodTEgKiB4MikgICAgICAtICh4MSAqIHUyKSAgICAgIC0gKHgwICogdTEpICAgICAgLSAodTAgKiB4Mik7XG4gICAgdmFyIGRlbHRhQyA9ICh1MCAqIHYxICogeDIpICsgKHYwICogeDEgKiB1MikgKyAoeDAgKiB1MSAqIHYyKSAtICh4MCAqIHYxICogdTIpIC0gKHYwICogdTEgKiB4MikgLSAodTAgKiB4MSAqIHYyKTtcbiAgICB2YXIgZGVsdGFEID0gKHkwICogdjEpICAgICAgKyAodjAgKiB5MikgICAgICArICh5MSAqIHYyKSAgICAgIC0gKHYxICogeTIpICAgICAgLSAodjAgKiB5MSkgICAgICAtICh5MCAqIHYyKTtcbiAgICB2YXIgZGVsdGFFID0gKHUwICogeTEpICAgICAgKyAoeTAgKiB1MikgICAgICArICh1MSAqIHkyKSAgICAgIC0gKHkxICogdTIpICAgICAgLSAoeTAgKiB1MSkgICAgICAtICh1MCAqIHkyKTtcbiAgICB2YXIgZGVsdGFGID0gKHUwICogdjEgKiB5MikgKyAodjAgKiB5MSAqIHUyKSArICh5MCAqIHUxICogdjIpIC0gKHkwICogdjEgKiB1MikgLSAodjAgKiB1MSAqIHkyKSAtICh1MCAqIHkxICogdjIpO1xuXG4gICAgY29udGV4dC50cmFuc2Zvcm0oZGVsdGFBIC8gZGVsdGEsIGRlbHRhRCAvIGRlbHRhLFxuICAgICAgICBkZWx0YUIgLyBkZWx0YSwgZGVsdGFFIC8gZGVsdGEsXG4gICAgICAgIGRlbHRhQyAvIGRlbHRhLCBkZWx0YUYgLyBkZWx0YSk7XG5cbiAgICBjb250ZXh0LmRyYXdJbWFnZSh0ZXh0dXJlU291cmNlLCAwLCAwKTtcbiAgICBjb250ZXh0LnJlc3RvcmUoKTtcbn07XG5cblxuXG4vKipcbiAqIFJlbmRlcnMgYSBmbGF0IE1lc2hcbiAqXG4gKiBAcGFyYW0gTWVzaCB7UElYSS5tZXNoLk1lc2h9IFRoZSBNZXNoIHRvIHJlbmRlclxuICogQHByaXZhdGVcbiAqL1xuTWVzaC5wcm90b3R5cGUucmVuZGVyTWVzaEZsYXQgPSBmdW5jdGlvbiAoTWVzaClcbntcbiAgICB2YXIgY29udGV4dCA9IHRoaXMuY29udGV4dDtcbiAgICB2YXIgdmVydGljZXMgPSBNZXNoLnZlcnRpY2VzO1xuXG4gICAgdmFyIGxlbmd0aCA9IHZlcnRpY2VzLmxlbmd0aC8yO1xuICAgIC8vIHRoaXMuY291bnQrKztcblxuICAgIGNvbnRleHQuYmVnaW5QYXRoKCk7XG4gICAgZm9yICh2YXIgaT0xOyBpIDwgbGVuZ3RoLTI7IGkrKylcbiAgICB7XG4gICAgICAgIC8vIGRyYXcgc29tZSB0cmlhbmdsZXMhXG4gICAgICAgIHZhciBpbmRleCA9IGkqMjtcblxuICAgICAgICB2YXIgeDAgPSB2ZXJ0aWNlc1tpbmRleF0sICAgeDEgPSB2ZXJ0aWNlc1tpbmRleCsyXSwgeDIgPSB2ZXJ0aWNlc1tpbmRleCs0XTtcbiAgICAgICAgdmFyIHkwID0gdmVydGljZXNbaW5kZXgrMV0sIHkxID0gdmVydGljZXNbaW5kZXgrM10sIHkyID0gdmVydGljZXNbaW5kZXgrNV07XG5cbiAgICAgICAgY29udGV4dC5tb3ZlVG8oeDAsIHkwKTtcbiAgICAgICAgY29udGV4dC5saW5lVG8oeDEsIHkxKTtcbiAgICAgICAgY29udGV4dC5saW5lVG8oeDIsIHkyKTtcbiAgICB9XG5cbiAgICBjb250ZXh0LmZpbGxTdHlsZSA9ICcjRkYwMDAwJztcbiAgICBjb250ZXh0LmZpbGwoKTtcbiAgICBjb250ZXh0LmNsb3NlUGF0aCgpO1xufTtcblxuLyoqXG4gKiBXaGVuIHRoZSB0ZXh0dXJlIGlzIHVwZGF0ZWQsIHRoaXMgZXZlbnQgd2lsbCBmaXJlIHRvIHVwZGF0ZSB0aGUgc2NhbGUgYW5kIGZyYW1lXG4gKlxuICogQHBhcmFtIGV2ZW50XG4gKiBAcHJpdmF0ZVxuICovXG5NZXNoLnByb3RvdHlwZS5fb25UZXh0dXJlVXBkYXRlID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLnVwZGF0ZUZyYW1lID0gdHJ1ZTtcbn07XG5cbi8qKlxuICogUmV0dXJucyB0aGUgYm91bmRzIG9mIHRoZSBtZXNoIGFzIGEgcmVjdGFuZ2xlLiBUaGUgYm91bmRzIGNhbGN1bGF0aW9uIHRha2VzIHRoZSB3b3JsZFRyYW5zZm9ybSBpbnRvIGFjY291bnQuXG4gKlxuICogQHBhcmFtIG1hdHJpeCB7UElYSS5NYXRyaXh9IHRoZSB0cmFuc2Zvcm1hdGlvbiBtYXRyaXggb2YgdGhlIHNwcml0ZVxuICogQHJldHVybiB7UElYSS5SZWN0YW5nbGV9IHRoZSBmcmFtaW5nIHJlY3RhbmdsZVxuICovXG5NZXNoLnByb3RvdHlwZS5nZXRCb3VuZHMgPSBmdW5jdGlvbiAobWF0cml4KVxue1xuICAgIGlmICghdGhpcy5fY3VycmVudEJvdW5kcykge1xuICAgICAgICB2YXIgd29ybGRUcmFuc2Zvcm0gPSBtYXRyaXggfHwgdGhpcy53b3JsZFRyYW5zZm9ybTtcblxuICAgICAgICB2YXIgYSA9IHdvcmxkVHJhbnNmb3JtLmE7XG4gICAgICAgIHZhciBiID0gd29ybGRUcmFuc2Zvcm0uYjtcbiAgICAgICAgdmFyIGMgPSB3b3JsZFRyYW5zZm9ybS5jO1xuICAgICAgICB2YXIgZCA9IHdvcmxkVHJhbnNmb3JtLmQ7XG4gICAgICAgIHZhciB0eCA9IHdvcmxkVHJhbnNmb3JtLnR4O1xuICAgICAgICB2YXIgdHkgPSB3b3JsZFRyYW5zZm9ybS50eTtcblxuICAgICAgICB2YXIgbWF4WCA9IC1JbmZpbml0eTtcbiAgICAgICAgdmFyIG1heFkgPSAtSW5maW5pdHk7XG5cbiAgICAgICAgdmFyIG1pblggPSBJbmZpbml0eTtcbiAgICAgICAgdmFyIG1pblkgPSBJbmZpbml0eTtcblxuICAgICAgICB2YXIgdmVydGljZXMgPSB0aGlzLnZlcnRpY2VzO1xuICAgICAgICBmb3IgKHZhciBpID0gMCwgbiA9IHZlcnRpY2VzLmxlbmd0aDsgaSA8IG47IGkgKz0gMikge1xuICAgICAgICAgICAgdmFyIHJhd1ggPSB2ZXJ0aWNlc1tpXSwgcmF3WSA9IHZlcnRpY2VzW2kgKyAxXTtcbiAgICAgICAgICAgIHZhciB4ID0gKGEgKiByYXdYKSArIChjICogcmF3WSkgKyB0eDtcbiAgICAgICAgICAgIHZhciB5ID0gKGQgKiByYXdZKSArIChiICogcmF3WCkgKyB0eTtcblxuICAgICAgICAgICAgbWluWCA9IHggPCBtaW5YID8geCA6IG1pblg7XG4gICAgICAgICAgICBtaW5ZID0geSA8IG1pblkgPyB5IDogbWluWTtcblxuICAgICAgICAgICAgbWF4WCA9IHggPiBtYXhYID8geCA6IG1heFg7XG4gICAgICAgICAgICBtYXhZID0geSA+IG1heFkgPyB5IDogbWF4WTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChtaW5YID09PSAtSW5maW5pdHkgfHwgbWF4WSA9PT0gSW5maW5pdHkpIHtcbiAgICAgICAgICAgIHJldHVybiBjb3JlLlJlY3RhbmdsZS5FTVBUWTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBib3VuZHMgPSB0aGlzLl9ib3VuZHM7XG5cbiAgICAgICAgYm91bmRzLnggPSBtaW5YO1xuICAgICAgICBib3VuZHMud2lkdGggPSBtYXhYIC0gbWluWDtcblxuICAgICAgICBib3VuZHMueSA9IG1pblk7XG4gICAgICAgIGJvdW5kcy5oZWlnaHQgPSBtYXhZIC0gbWluWTtcblxuICAgICAgICAvLyBzdG9yZSBhIHJlZmVyZW5jZSBzbyB0aGF0IGlmIHRoaXMgZnVuY3Rpb24gZ2V0cyBjYWxsZWQgYWdhaW4gaW4gdGhlIHJlbmRlciBjeWNsZSB3ZSBkbyBub3QgaGF2ZSB0byByZWNhbGN1bGF0ZVxuICAgICAgICB0aGlzLl9jdXJyZW50Qm91bmRzID0gYm91bmRzO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLl9jdXJyZW50Qm91bmRzO1xufTtcblxuLyoqXG4gKiBUZXN0cyBpZiBhIHBvaW50IGlzIGluc2lkZSB0aGlzIG1lc2guIFdvcmtzIG9ubHkgZm9yIFRSSUFOR0xFX01FU0hcbiAqXG4gKiBAcGFyYW0gcG9pbnQge1BJWEkuUG9pbnR9IHRoZSBwb2ludCB0byB0ZXN0XG4gKiBAcmV0dXJuIHtib29sZWFufSB0aGUgcmVzdWx0IG9mIHRoZSB0ZXN0XG4gKi9cbk1lc2gucHJvdG90eXBlLmNvbnRhaW5zUG9pbnQgPSBmdW5jdGlvbiggcG9pbnQgKSB7XG4gICAgaWYgKCF0aGlzLmdldEJvdW5kcygpLmNvbnRhaW5zKHBvaW50LngsIHBvaW50LnkpKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgdGhpcy53b3JsZFRyYW5zZm9ybS5hcHBseUludmVyc2UocG9pbnQsICB0ZW1wUG9pbnQpO1xuXG4gICAgdmFyIHZlcnRpY2VzID0gdGhpcy52ZXJ0aWNlcztcbiAgICB2YXIgcG9pbnRzID0gdGVtcFBvbHlnb24ucG9pbnRzO1xuICAgIHZhciBpLCBsZW47XG5cbiAgICBpZiAodGhpcy5kcmF3TW9kZSA9PT0gTWVzaC5EUkFXX01PREVTLlRSSUFOR0xFUykge1xuICAgICAgICB2YXIgaW5kaWNlcyA9IHRoaXMuaW5kaWNlcztcbiAgICAgICAgbGVuID0gdGhpcy5pbmRpY2VzLmxlbmd0aDtcbiAgICAgICAgLy9UT0RPOiBpbmxpbmUgdGhpcy5cbiAgICAgICAgZm9yIChpPTA7aTxsZW47aSs9Mykge1xuICAgICAgICAgICAgdmFyIGluZDAgPSBpbmRpY2VzW2ldKjIsIGluZDEgPSBpbmRpY2VzW2krMV0qMiwgaW5kMiA9IGluZGljZXNbaSsyXSoyO1xuICAgICAgICAgICAgcG9pbnRzWzBdID0gdmVydGljZXNbaW5kMF07XG4gICAgICAgICAgICBwb2ludHNbMV0gPSB2ZXJ0aWNlc1tpbmQwKzFdO1xuICAgICAgICAgICAgcG9pbnRzWzJdID0gdmVydGljZXNbaW5kMV07XG4gICAgICAgICAgICBwb2ludHNbM10gPSB2ZXJ0aWNlc1tpbmQxKzFdO1xuICAgICAgICAgICAgcG9pbnRzWzRdID0gdmVydGljZXNbaW5kMl07XG4gICAgICAgICAgICBwb2ludHNbNV0gPSB2ZXJ0aWNlc1tpbmQyKzFdO1xuICAgICAgICAgICAgaWYgKHRlbXBQb2x5Z29uLmNvbnRhaW5zKHRlbXBQb2ludC54LCB0ZW1wUG9pbnQueSkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAgIGxlbiA9IHZlcnRpY2VzLmxlbmd0aDtcbiAgICAgICAgZm9yIChpPTA7aTxsZW47aSs9Nikge1xuICAgICAgICAgICAgcG9pbnRzWzBdID0gdmVydGljZXNbaV07XG4gICAgICAgICAgICBwb2ludHNbMV0gPSB2ZXJ0aWNlc1tpKzFdO1xuICAgICAgICAgICAgcG9pbnRzWzJdID0gdmVydGljZXNbaSsyXTtcbiAgICAgICAgICAgIHBvaW50c1szXSA9IHZlcnRpY2VzW2krM107XG4gICAgICAgICAgICBwb2ludHNbNF0gPSB2ZXJ0aWNlc1tpKzRdO1xuICAgICAgICAgICAgcG9pbnRzWzVdID0gdmVydGljZXNbaSs1XTtcbiAgICAgICAgICAgIGlmICh0ZW1wUG9seWdvbi5jb250YWlucyh0ZW1wUG9pbnQueCwgdGVtcFBvaW50LnkpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xufTtcblxuLyoqXG4gKiBEaWZmZXJlbnQgZHJhd2luZyBidWZmZXIgbW9kZXMgc3VwcG9ydGVkXG4gKlxuICogQHN0YXRpY1xuICogQGNvbnN0YW50XG4gKiBAcHJvcGVydHkge29iamVjdH0gRFJBV19NT0RFU1xuICogQHByb3BlcnR5IHtudW1iZXJ9IERSQVdfTU9ERVMuVFJJQU5HTEVfTUVTSFxuICogQHByb3BlcnR5IHtudW1iZXJ9IERSQVdfTU9ERVMuVFJJQU5HTEVTXG4gKi9cbk1lc2guRFJBV19NT0RFUyA9IHtcbiAgICBUUklBTkdMRV9NRVNIOiAwLFxuICAgIFRSSUFOR0xFUzogMVxufTtcbiIsInZhciBNZXNoID0gcmVxdWlyZSgnLi9NZXNoJyk7XG5cbi8qKlxuICogVGhlIFBsYW5lIGFsbG93cyB5b3UgdG8gZHJhdyBhIHRleHR1cmUgYWNyb3NzIHNldmVyYWwgcG9pbnRzIGFuZCB0aGVtIG1hbmlwdWxhdGUgdGhlc2UgcG9pbnRzXG4gKlxuICpgYGBqc1xuICogZm9yICh2YXIgaSA9IDA7IGkgPCAyMDsgaSsrKSB7XG4gKiAgICAgcG9pbnRzLnB1c2gobmV3IFBJWEkuUG9pbnQoaSAqIDUwLCAwKSk7XG4gKiB9O1xuICogdmFyIFBsYW5lID0gbmV3IFBJWEkuUGxhbmUoUElYSS5UZXh0dXJlLmZyb21JbWFnZShcInNuYWtlLnBuZ1wiKSwgcG9pbnRzKTtcbiAqICBgYGBcbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkubWVzaC5NZXNoXG4gKiBAbWVtYmVyb2YgUElYSS5tZXNoXG4gKiBAcGFyYW0ge1BJWEkuVGV4dHVyZX0gdGV4dHVyZSAtIFRoZSB0ZXh0dXJlIHRvIHVzZSBvbiB0aGUgUGxhbmUuXG4gKiBAcGFyYW0ge2ludH0gc2VnbWVudHNYIC0gVGhlIG51bWJlciBveCB4IHNlZ21lbnRzXG4gKiBAcGFyYW0ge2ludH0gc2VnbWVudHNZIC0gVGhlIG51bWJlciBvZiB5IHNlZ21lbnRzXG4gKlxuICovXG5mdW5jdGlvbiBQbGFuZSh0ZXh0dXJlLCBzZWdtZW50c1gsIHNlZ21lbnRzWSlcbntcbiAgICBNZXNoLmNhbGwodGhpcywgdGV4dHVyZSk7XG5cbiAgICAvKipcbiAgICAgKiBUcmFja2VyIGZvciBpZiB0aGUgUGxhbmUgaXMgcmVhZHkgdG8gYmUgZHJhd24uIE5lZWRlZCBiZWNhdXNlIE1lc2ggY3RvciBjYW5cbiAgICAgKiBjYWxsIF9vblRleHR1cmVVcGRhdGVkIHdoaWNoIGNvdWxkIGNhbGwgcmVmcmVzaCB0b28gZWFybHkuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fcmVhZHkgPSB0cnVlO1xuXG4gICAgdGhpcy5zZWdtZW50c1ggPSAgc2VnbWVudHNYIHx8IDEwO1xuICAgIHRoaXMuc2VnbWVudHNZID0gc2VnbWVudHNZIHx8IDEwO1xuXG4gICAgdGhpcy5kcmF3TW9kZSA9IE1lc2guRFJBV19NT0RFUy5UUklBTkdMRVM7XG4gICAgdGhpcy5yZWZyZXNoKCk7XG5cbn1cblxuXG4vLyBjb25zdHJ1Y3RvclxuUGxhbmUucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZSggTWVzaC5wcm90b3R5cGUgKTtcblBsYW5lLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFBsYW5lO1xubW9kdWxlLmV4cG9ydHMgPSBQbGFuZTtcblxuLyoqXG4gKiBSZWZyZXNoZXNcbiAqXG4gKi9cblBsYW5lLnByb3RvdHlwZS5yZWZyZXNoID0gZnVuY3Rpb24oKVxue1xuICAgIHZhciB0b3RhbCA9IHRoaXMuc2VnbWVudHNYICogdGhpcy5zZWdtZW50c1k7XG4gICAgdmFyIHZlcnRzID0gW107XG4gICAgdmFyIGNvbG9ycyA9IFtdO1xuICAgIHZhciB1dnMgPSBbXTtcbiAgICB2YXIgaW5kaWNlcyA9IFtdO1xuICAgIHZhciB0ZXh0dXJlID0gdGhpcy50ZXh0dXJlO1xuXG4gIC8vICB0ZXh0dXJlLndpZHRoID0gODAwIHRleHR1cmUud2lkdGggfHwgODAwO1xuIC8vICAgdGV4dHVyZS5oZWlnaHQgPSA4MDAvL3RleHR1cmUuaGVpZ2h0IHx8IDgwMDtcblxuICAgIHZhciBzZWdtZW50c1hTdWIgPSB0aGlzLnNlZ21lbnRzWCAtIDE7XG4gICAgdmFyIHNlZ21lbnRzWVN1YiA9IHRoaXMuc2VnbWVudHNZIC0gMTtcbiAgICB2YXIgaSA9IDA7XG5cbiAgICB2YXIgc2l6ZVggPSB0ZXh0dXJlLndpZHRoIC8gc2VnbWVudHNYU3ViO1xuICAgIHZhciBzaXplWSA9IHRleHR1cmUuaGVpZ2h0IC8gc2VnbWVudHNZU3ViO1xuXG4gICAgZm9yIChpID0gMDsgaSA8IHRvdGFsOyBpKyspIHtcblxuICAgICAgICB2YXIgeCA9IChpICUgdGhpcy5zZWdtZW50c1gpO1xuICAgICAgICB2YXIgeSA9ICggKGkgLyB0aGlzLnNlZ21lbnRzWCApIHwgMCApO1xuXG5cbiAgICAgICAgdmVydHMucHVzaCgoeCAqIHNpemVYKSxcbiAgICAgICAgICAgICAgICAgICAoeSAqIHNpemVZKSk7XG5cbiAgICAgICAgLy8gdGhpcyB3b3JrcyBmb3IgcmVjdGFuZ3VsYXIgdGV4dHVyZXMuIFxuICAgICAgICB1dnMucHVzaCh0ZXh0dXJlLl91dnMueDAgKyAodGV4dHVyZS5fdXZzLngxIC0gdGV4dHVyZS5fdXZzLngwKSAqICh4IC8gKHRoaXMuc2VnbWVudHNYLTEpKSwgdGV4dHVyZS5fdXZzLnkwICsgKHRleHR1cmUuX3V2cy55My10ZXh0dXJlLl91dnMueTApICogKHkvICh0aGlzLnNlZ21lbnRzWS0xKSkpO1xuICAgICAgfVxuXG4gICAgLy8gIGNvbnNcblxuICAgIHZhciB0b3RhbFN1YiA9IHNlZ21lbnRzWFN1YiAqIHNlZ21lbnRzWVN1YjtcblxuICAgIGZvciAoaSA9IDA7IGkgPCB0b3RhbFN1YjsgaSsrKSB7XG5cbiAgICAgICAgdmFyIHhwb3MgPSBpICUgc2VnbWVudHNYU3ViO1xuICAgICAgICB2YXIgeXBvcyA9IChpIC8gc2VnbWVudHNYU3ViICkgfCAwO1xuXG5cbiAgICAgICAgdmFyICB2YWx1ZSA9ICh5cG9zICogdGhpcy5zZWdtZW50c1gpICsgeHBvcztcbiAgICAgICAgdmFyICB2YWx1ZTIgPSAoeXBvcyAqIHRoaXMuc2VnbWVudHNYKSArIHhwb3MgKyAxO1xuICAgICAgICB2YXIgIHZhbHVlMyA9ICgoeXBvcysxKSAqIHRoaXMuc2VnbWVudHNYKSArIHhwb3M7XG4gICAgICAgIHZhciAgdmFsdWU0ID0gKCh5cG9zKzEpICogdGhpcy5zZWdtZW50c1gpICsgeHBvcyArIDE7XG5cbiAgICAgICAgaW5kaWNlcy5wdXNoKHZhbHVlLCB2YWx1ZTIsIHZhbHVlMyk7XG4gICAgICAgIGluZGljZXMucHVzaCh2YWx1ZTIsIHZhbHVlNCwgdmFsdWUzKTtcbiAgICB9XG5cblxuICAgIC8vY29uc29sZS5sb2coaW5kaWNlcylcbiAgICB0aGlzLnZlcnRpY2VzID0gbmV3IEZsb2F0MzJBcnJheSh2ZXJ0cyk7XG4gICAgdGhpcy51dnMgPSBuZXcgRmxvYXQzMkFycmF5KHV2cyk7XG4gICAgdGhpcy5jb2xvcnMgPSBuZXcgRmxvYXQzMkFycmF5KGNvbG9ycyk7XG4gICAgdGhpcy5pbmRpY2VzID0gbmV3IFVpbnQxNkFycmF5KGluZGljZXMpO1xufTtcblxuLyoqXG4gKiBDbGVhciB0ZXh0dXJlIFVWcyB3aGVuIG5ldyB0ZXh0dXJlIGlzIHNldFxuICpcbiAqIEBwcml2YXRlXG4gKi9cblBsYW5lLnByb3RvdHlwZS5fb25UZXh0dXJlVXBkYXRlID0gZnVuY3Rpb24gKClcbntcbiAgICBNZXNoLnByb3RvdHlwZS5fb25UZXh0dXJlVXBkYXRlLmNhbGwodGhpcyk7XG5cbiAgICAvLyB3YWl0IGZvciB0aGUgUGxhbmUgY3RvciB0byBmaW5pc2ggYmVmb3JlIGNhbGxpbmcgcmVmcmVzaFxuICAgIGlmICh0aGlzLl9yZWFkeSkge1xuICAgICAgICB0aGlzLnJlZnJlc2goKTtcbiAgICB9XG59O1xuIiwidmFyIE1lc2ggPSByZXF1aXJlKCcuL01lc2gnKTtcbnZhciBjb3JlID0gcmVxdWlyZSgnLi4vY29yZScpO1xuXG4vKipcbiAqIFRoZSByb3BlIGFsbG93cyB5b3UgdG8gZHJhdyBhIHRleHR1cmUgYWNyb3NzIHNldmVyYWwgcG9pbnRzIGFuZCB0aGVtIG1hbmlwdWxhdGUgdGhlc2UgcG9pbnRzXG4gKlxuICpgYGBqc1xuICogZm9yICh2YXIgaSA9IDA7IGkgPCAyMDsgaSsrKSB7XG4gKiAgICAgcG9pbnRzLnB1c2gobmV3IFBJWEkuUG9pbnQoaSAqIDUwLCAwKSk7XG4gKiB9O1xuICogdmFyIHJvcGUgPSBuZXcgUElYSS5Sb3BlKFBJWEkuVGV4dHVyZS5mcm9tSW1hZ2UoXCJzbmFrZS5wbmdcIiksIHBvaW50cyk7XG4gKiAgYGBgXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLm1lc2guTWVzaFxuICogQG1lbWJlcm9mIFBJWEkubWVzaFxuICogQHBhcmFtIHtQSVhJLlRleHR1cmV9IHRleHR1cmUgLSBUaGUgdGV4dHVyZSB0byB1c2Ugb24gdGhlIHJvcGUuXG4gKiBAcGFyYW0ge1BJWEkuUG9pbnRbXX0gcG9pbnRzIC0gQW4gYXJyYXkgb2Yge0BsaW5rIFBJWEkuUG9pbnR9IG9iamVjdHMgdG8gY29uc3RydWN0IHRoaXMgcm9wZS5cbiAqXG4gKi9cbmZ1bmN0aW9uIFJvcGUodGV4dHVyZSwgcG9pbnRzKVxue1xuICAgIE1lc2guY2FsbCh0aGlzLCB0ZXh0dXJlKTtcblxuICAgIC8qXG4gICAgICogQG1lbWJlciB7UElYSS5Qb2ludFtdfSBBbiBhcnJheSBvZiBwb2ludHMgdGhhdCBkZXRlcm1pbmUgdGhlIHJvcGVcbiAgICAgKi9cbiAgICB0aGlzLnBvaW50cyA9IHBvaW50cztcblxuICAgIC8qXG4gICAgICogQG1lbWJlciB7RmxvYXQzMkFycmF5fSBBbiBhcnJheSBvZiB2ZXJ0aWNlcyB1c2VkIHRvIGNvbnN0cnVjdCB0aGlzIHJvcGUuXG4gICAgICovXG4gICAgdGhpcy52ZXJ0aWNlcyA9IG5ldyBGbG9hdDMyQXJyYXkocG9pbnRzLmxlbmd0aCAqIDQpO1xuXG4gICAgLypcbiAgICAgKiBAbWVtYmVyIHtGbG9hdDMyQXJyYXl9IFRoZSBXZWJHTCBVdnMgb2YgdGhlIHJvcGUuXG4gICAgICovXG4gICAgdGhpcy51dnMgPSBuZXcgRmxvYXQzMkFycmF5KHBvaW50cy5sZW5ndGggKiA0KTtcblxuICAgIC8qXG4gICAgICogQG1lbWJlciB7RmxvYXQzMkFycmF5fSBBbiBhcnJheSBjb250YWluaW5nIHRoZSBjb2xvciBjb21wb25lbnRzXG4gICAgICovXG4gICAgdGhpcy5jb2xvcnMgPSBuZXcgRmxvYXQzMkFycmF5KHBvaW50cy5sZW5ndGggKiAyKTtcblxuICAgIC8qXG4gICAgICogQG1lbWJlciB7VWludDE2QXJyYXl9IEFuIGFycmF5IGNvbnRhaW5pbmcgdGhlIGluZGljZXMgb2YgdGhlIHZlcnRpY2VzXG4gICAgICovXG4gICAgdGhpcy5pbmRpY2VzID0gbmV3IFVpbnQxNkFycmF5KHBvaW50cy5sZW5ndGggKiAyKTtcblxuICAgIC8qKlxuICAgICAqIFRyYWNrZXIgZm9yIGlmIHRoZSByb3BlIGlzIHJlYWR5IHRvIGJlIGRyYXduLiBOZWVkZWQgYmVjYXVzZSBNZXNoIGN0b3IgY2FuXG4gICAgICogY2FsbCBfb25UZXh0dXJlVXBkYXRlZCB3aGljaCBjb3VsZCBjYWxsIHJlZnJlc2ggdG9vIGVhcmx5LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgICB0aGlzLl9yZWFkeSA9IHRydWU7XG5cbiAgICAgdGhpcy5yZWZyZXNoKCk7XG59XG5cblxuLy8gY29uc3RydWN0b3JcblJvcGUucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShNZXNoLnByb3RvdHlwZSk7XG5Sb3BlLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFJvcGU7XG5tb2R1bGUuZXhwb3J0cyA9IFJvcGU7XG5cbi8qKlxuICogUmVmcmVzaGVzXG4gKlxuICovXG5Sb3BlLnByb3RvdHlwZS5yZWZyZXNoID0gZnVuY3Rpb24gKClcbntcbiAgICB2YXIgcG9pbnRzID0gdGhpcy5wb2ludHM7XG5cbiAgICAvLyBpZiB0b28gbGl0dGxlIHBvaW50cywgb3IgdGV4dHVyZSBoYXNuJ3QgZ290IFVWcyBzZXQgeWV0IGp1c3QgbW92ZSBvbi5cbiAgICBpZiAocG9pbnRzLmxlbmd0aCA8IDEgfHwgIXRoaXMuX3RleHR1cmUuX3V2cylcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB2YXIgdXZzID0gdGhpcy51dnM7XG5cbiAgICB2YXIgaW5kaWNlcyA9IHRoaXMuaW5kaWNlcztcbiAgICB2YXIgY29sb3JzID0gdGhpcy5jb2xvcnM7XG5cbiAgICB2YXIgdGV4dHVyZVV2cyA9IHRoaXMuX3RleHR1cmUuX3V2cztcbiAgICB2YXIgb2Zmc2V0ID0gbmV3IGNvcmUuUG9pbnQodGV4dHVyZVV2cy54MCwgdGV4dHVyZVV2cy55MCk7XG4gICAgdmFyIGZhY3RvciA9IG5ldyBjb3JlLlBvaW50KHRleHR1cmVVdnMueDIgLSB0ZXh0dXJlVXZzLngwLCB0ZXh0dXJlVXZzLnkyIC0gdGV4dHVyZVV2cy55MCk7XG5cbiAgICB1dnNbMF0gPSAwICsgb2Zmc2V0Lng7XG4gICAgdXZzWzFdID0gMCArIG9mZnNldC55O1xuICAgIHV2c1syXSA9IDAgKyBvZmZzZXQueDtcbiAgICB1dnNbM10gPSAxICogZmFjdG9yLnkgKyBvZmZzZXQueTtcblxuICAgIGNvbG9yc1swXSA9IDE7XG4gICAgY29sb3JzWzFdID0gMTtcblxuICAgIGluZGljZXNbMF0gPSAwO1xuICAgIGluZGljZXNbMV0gPSAxO1xuXG4gICAgdmFyIHRvdGFsID0gcG9pbnRzLmxlbmd0aCxcbiAgICAgICAgcG9pbnQsIGluZGV4LCBhbW91bnQ7XG5cbiAgICBmb3IgKHZhciBpID0gMTsgaSA8IHRvdGFsOyBpKyspXG4gICAge1xuICAgICAgICBwb2ludCA9IHBvaW50c1tpXTtcbiAgICAgICAgaW5kZXggPSBpICogNDtcbiAgICAgICAgLy8gdGltZSB0byBkbyBzb21lIHNtYXJ0IGRyYXdpbmchXG4gICAgICAgIGFtb3VudCA9IGkgLyAodG90YWwtMSk7XG5cbiAgICAgICAgdXZzW2luZGV4XSA9IGFtb3VudCAqIGZhY3Rvci54ICsgb2Zmc2V0Lng7XG4gICAgICAgIHV2c1tpbmRleCsxXSA9IDAgKyBvZmZzZXQueTtcblxuICAgICAgICB1dnNbaW5kZXgrMl0gPSBhbW91bnQgKiBmYWN0b3IueCArIG9mZnNldC54O1xuICAgICAgICB1dnNbaW5kZXgrM10gPSAxICogZmFjdG9yLnkgKyBvZmZzZXQueTtcblxuICAgICAgICBpbmRleCA9IGkgKiAyO1xuICAgICAgICBjb2xvcnNbaW5kZXhdID0gMTtcbiAgICAgICAgY29sb3JzW2luZGV4KzFdID0gMTtcblxuICAgICAgICBpbmRleCA9IGkgKiAyO1xuICAgICAgICBpbmRpY2VzW2luZGV4XSA9IGluZGV4O1xuICAgICAgICBpbmRpY2VzW2luZGV4ICsgMV0gPSBpbmRleCArIDE7XG4gICAgfVxuXG4gICAgdGhpcy5kaXJ0eSA9IHRydWU7XG59O1xuXG4vKipcbiAqIENsZWFyIHRleHR1cmUgVVZzIHdoZW4gbmV3IHRleHR1cmUgaXMgc2V0XG4gKlxuICogQHByaXZhdGVcbiAqL1xuUm9wZS5wcm90b3R5cGUuX29uVGV4dHVyZVVwZGF0ZSA9IGZ1bmN0aW9uICgpXG57XG4gICAgTWVzaC5wcm90b3R5cGUuX29uVGV4dHVyZVVwZGF0ZS5jYWxsKHRoaXMpO1xuXG4gICAgLy8gd2FpdCBmb3IgdGhlIFJvcGUgY3RvciB0byBmaW5pc2ggYmVmb3JlIGNhbGxpbmcgcmVmcmVzaFxuICAgIGlmICh0aGlzLl9yZWFkeSkge1xuICAgICAgICB0aGlzLnJlZnJlc2goKTtcbiAgICB9XG59O1xuXG4vKipcbiAqIFVwZGF0ZXMgdGhlIG9iamVjdCB0cmFuc2Zvcm0gZm9yIHJlbmRlcmluZ1xuICpcbiAqIEBwcml2YXRlXG4gKi9cblJvcGUucHJvdG90eXBlLnVwZGF0ZVRyYW5zZm9ybSA9IGZ1bmN0aW9uICgpXG57XG4gICAgdmFyIHBvaW50cyA9IHRoaXMucG9pbnRzO1xuXG4gICAgaWYgKHBvaW50cy5sZW5ndGggPCAxKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHZhciBsYXN0UG9pbnQgPSBwb2ludHNbMF07XG4gICAgdmFyIG5leHRQb2ludDtcbiAgICB2YXIgcGVycFggPSAwO1xuICAgIHZhciBwZXJwWSA9IDA7XG5cbiAgICAvLyB0aGlzLmNvdW50IC09IDAuMjtcblxuICAgIHZhciB2ZXJ0aWNlcyA9IHRoaXMudmVydGljZXM7XG4gICAgdmFyIHRvdGFsID0gcG9pbnRzLmxlbmd0aCxcbiAgICAgICAgcG9pbnQsIGluZGV4LCByYXRpbywgcGVycExlbmd0aCwgbnVtO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0b3RhbDsgaSsrKVxuICAgIHtcbiAgICAgICAgcG9pbnQgPSBwb2ludHNbaV07XG4gICAgICAgIGluZGV4ID0gaSAqIDQ7XG5cbiAgICAgICAgaWYgKGkgPCBwb2ludHMubGVuZ3RoLTEpXG4gICAgICAgIHtcbiAgICAgICAgICAgIG5leHRQb2ludCA9IHBvaW50c1tpKzFdO1xuICAgICAgICB9XG4gICAgICAgIGVsc2VcbiAgICAgICAge1xuICAgICAgICAgICAgbmV4dFBvaW50ID0gcG9pbnQ7XG4gICAgICAgIH1cblxuICAgICAgICBwZXJwWSA9IC0obmV4dFBvaW50LnggLSBsYXN0UG9pbnQueCk7XG4gICAgICAgIHBlcnBYID0gbmV4dFBvaW50LnkgLSBsYXN0UG9pbnQueTtcblxuICAgICAgICByYXRpbyA9ICgxIC0gKGkgLyAodG90YWwtMSkpKSAqIDEwO1xuXG4gICAgICAgIGlmIChyYXRpbyA+IDEpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJhdGlvID0gMTtcbiAgICAgICAgfVxuXG4gICAgICAgIHBlcnBMZW5ndGggPSBNYXRoLnNxcnQocGVycFggKiBwZXJwWCArIHBlcnBZICogcGVycFkpO1xuICAgICAgICBudW0gPSB0aGlzLl90ZXh0dXJlLmhlaWdodCAvIDI7IC8vKDIwICsgTWF0aC5hYnMoTWF0aC5zaW4oKGkgKyB0aGlzLmNvdW50KSAqIDAuMykgKiA1MCkgKSogcmF0aW87XG4gICAgICAgIHBlcnBYIC89IHBlcnBMZW5ndGg7XG4gICAgICAgIHBlcnBZIC89IHBlcnBMZW5ndGg7XG5cbiAgICAgICAgcGVycFggKj0gbnVtO1xuICAgICAgICBwZXJwWSAqPSBudW07XG5cbiAgICAgICAgdmVydGljZXNbaW5kZXhdID0gcG9pbnQueCArIHBlcnBYO1xuICAgICAgICB2ZXJ0aWNlc1tpbmRleCsxXSA9IHBvaW50LnkgKyBwZXJwWTtcbiAgICAgICAgdmVydGljZXNbaW5kZXgrMl0gPSBwb2ludC54IC0gcGVycFg7XG4gICAgICAgIHZlcnRpY2VzW2luZGV4KzNdID0gcG9pbnQueSAtIHBlcnBZO1xuXG4gICAgICAgIGxhc3RQb2ludCA9IHBvaW50O1xuICAgIH1cblxuICAgIHRoaXMuY29udGFpbmVyVXBkYXRlVHJhbnNmb3JtKCk7XG59O1xuIiwiLyoqXG4gKiBAZmlsZSAgICAgICAgTWFpbiBleHBvcnQgb2YgdGhlIFBJWEkgZXh0cmFzIGxpYnJhcnlcbiAqIEBhdXRob3IgICAgICBNYXQgR3JvdmVzIDxtYXRAZ29vZGJveWRpZ2l0YWwuY29tPlxuICogQGNvcHlyaWdodCAgIDIwMTMtMjAxNSBHb29kQm95RGlnaXRhbFxuICogQGxpY2Vuc2UgICAgIHtAbGluayBodHRwczovL2dpdGh1Yi5jb20vcGl4aWpzL3BpeGkuanMvYmxvYi9tYXN0ZXIvTElDRU5TRXxNSVQgTGljZW5zZX1cbiAqL1xuXG4vKipcbiAqIEBuYW1lc3BhY2UgUElYSS5tZXNoXG4gKi9cbm1vZHVsZS5leHBvcnRzID0ge1xuICAgIE1lc2g6ICAgICAgICAgICByZXF1aXJlKCcuL01lc2gnKSxcbiAgICBQbGFuZTogICAgICAgICAgIHJlcXVpcmUoJy4vUGxhbmUnKSxcbiAgICBSb3BlOiAgICAgICAgICAgcmVxdWlyZSgnLi9Sb3BlJyksXG4gICAgTWVzaFJlbmRlcmVyOiAgIHJlcXVpcmUoJy4vd2ViZ2wvTWVzaFJlbmRlcmVyJyksXG4gICAgTWVzaFNoYWRlcjogICAgIHJlcXVpcmUoJy4vd2ViZ2wvTWVzaFNoYWRlcicpXG59O1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi8uLi9jb3JlJyksXG4gICAgTWVzaCA9IHJlcXVpcmUoJy4uL01lc2gnKTtcblxuLyoqXG4gKiBAYXV0aG9yIE1hdCBHcm92ZXNcbiAqXG4gKiBCaWcgdGhhbmtzIHRvIHRoZSB2ZXJ5IGNsZXZlciBNYXR0IERlc0xhdXJpZXJzIDxtYXR0ZGVzbD4gaHR0cHM6Ly9naXRodWIuY29tL21hdHRkZXNsL1xuICogZm9yIGNyZWF0aW5nIHRoZSBvcmlnaW5hbCBwaXhpIHZlcnNpb24hXG4gKiBBbHNvIGEgdGhhbmtzIHRvIGh0dHBzOi8vZ2l0aHViLmNvbS9iY2hldmFsaWVyIGZvciB0d2Vha2luZyB0aGUgdGludCBhbmQgYWxwaGEgc28gdGhhdCB0aGV5IG5vdyBzaGFyZSA0IGJ5dGVzIG9uIHRoZSB2ZXJ0ZXggYnVmZmVyXG4gKlxuICogSGVhdmlseSBpbnNwaXJlZCBieSBMaWJHRFgncyBNZXNoUmVuZGVyZXI6XG4gKiBodHRwczovL2dpdGh1Yi5jb20vbGliZ2R4L2xpYmdkeC9ibG9iL21hc3Rlci9nZHgvc3JjL2NvbS9iYWRsb2dpYy9nZHgvZ3JhcGhpY3MvZzJkL01lc2hSZW5kZXJlci5qYXZhXG4gKi9cblxuLyoqXG4gKlxuICogQGNsYXNzXG4gKiBAcHJpdmF0ZVxuICogQG1lbWJlcm9mIFBJWEkubWVzaFxuICogQGV4dGVuZHMgUElYSS5PYmplY3RSZW5kZXJlclxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLldlYkdMUmVuZGVyZXJ9IFRoZSByZW5kZXJlciB0aGlzIHNwcml0ZSBiYXRjaCB3b3JrcyBmb3IuXG4gKi9cbmZ1bmN0aW9uIE1lc2hSZW5kZXJlcihyZW5kZXJlcilcbntcbiAgICBjb3JlLk9iamVjdFJlbmRlcmVyLmNhbGwodGhpcywgcmVuZGVyZXIpO1xuXG5cbiAgICAvKipcbiAgICAgKiBIb2xkcyB0aGUgaW5kaWNlc1xuICAgICAqXG4gICAgICogQG1lbWJlciB7VWludDE2QXJyYXl9XG4gICAgICovXG4gICAgXG4gICAgdGhpcy5pbmRpY2VzID0gbmV3IFVpbnQxNkFycmF5KDE1MDAwKTtcblxuICAgIC8vVE9ETyB0aGlzIGNvdWxkIGJlIGEgc2luZ2xlIGJ1ZmZlciBzaGFyZWQgYW1vbmdzdCBhbGwgcmVuZGVyZXJzIGFzIHdlIHJldXNlIHRoaXMgc2V0IHVwIGluIG1vc3QgcmVuZGVyZXJzXG4gICAgZm9yICh2YXIgaT0wLCBqPTA7IGkgPCAxNTAwMDsgaSArPSA2LCBqICs9IDQpXG4gICAge1xuICAgICAgICB0aGlzLmluZGljZXNbaSArIDBdID0gaiArIDA7XG4gICAgICAgIHRoaXMuaW5kaWNlc1tpICsgMV0gPSBqICsgMTtcbiAgICAgICAgdGhpcy5pbmRpY2VzW2kgKyAyXSA9IGogKyAyO1xuICAgICAgICB0aGlzLmluZGljZXNbaSArIDNdID0gaiArIDA7XG4gICAgICAgIHRoaXMuaW5kaWNlc1tpICsgNF0gPSBqICsgMjtcbiAgICAgICAgdGhpcy5pbmRpY2VzW2kgKyA1XSA9IGogKyAzO1xuICAgIH1cblxuICAgIHRoaXMuY3VycmVudFNoYWRlciA9IG51bGw7XG59XG5cbk1lc2hSZW5kZXJlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuT2JqZWN0UmVuZGVyZXIucHJvdG90eXBlKTtcbk1lc2hSZW5kZXJlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBNZXNoUmVuZGVyZXI7XG5tb2R1bGUuZXhwb3J0cyA9IE1lc2hSZW5kZXJlcjtcblxuY29yZS5XZWJHTFJlbmRlcmVyLnJlZ2lzdGVyUGx1Z2luKCdtZXNoJywgTWVzaFJlbmRlcmVyKTtcblxuLyoqXG4gKiBTZXRzIHVwIHRoZSByZW5kZXJlciBjb250ZXh0IGFuZCBuZWNlc3NhcnkgYnVmZmVycy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIGdsIHtXZWJHTFJlbmRlcmluZ0NvbnRleHR9IHRoZSBjdXJyZW50IFdlYkdMIGRyYXdpbmcgY29udGV4dFxuICovXG5NZXNoUmVuZGVyZXIucHJvdG90eXBlLm9uQ29udGV4dENoYW5nZSA9IGZ1bmN0aW9uICgpXG57XG5cbn07XG5cbi8qKlxuICogUmVuZGVycyB0aGUgc3ByaXRlIG9iamVjdC5cbiAqXG4gKiBAcGFyYW0gbWVzaCB7UElYSS5tZXNoLk1lc2h9IHRoZSBtZXNoIHRvIHJlbmRlclxuICovXG5NZXNoUmVuZGVyZXIucHJvdG90eXBlLnJlbmRlciA9IGZ1bmN0aW9uIChtZXNoKVxue1xuICAgIGlmKCFtZXNoLl92ZXJ0ZXhCdWZmZXIpXG4gICAge1xuICAgICAgICB0aGlzLl9pbml0V2ViR0wobWVzaCk7XG4gICAgfVxuXG4gICAgdmFyIHJlbmRlcmVyID0gdGhpcy5yZW5kZXJlcixcbiAgICAgICAgZ2wgPSByZW5kZXJlci5nbCxcbiAgICAgICAgdGV4dHVyZSA9IG1lc2guX3RleHR1cmUuYmFzZVRleHR1cmUsXG4gICAgICAgIHNoYWRlciA9IG1lc2guc2hhZGVyOy8vIHx8IHJlbmRlcmVyLnNoYWRlck1hbmFnZXIucGx1Z2lucy5tZXNoU2hhZGVyO1xuXG4gICAgdmFyIGRyYXdNb2RlID0gbWVzaC5kcmF3TW9kZSA9PT0gTWVzaC5EUkFXX01PREVTLlRSSUFOR0xFX01FU0ggPyBnbC5UUklBTkdMRV9TVFJJUCA6IGdsLlRSSUFOR0xFUztcblxuICAgIHJlbmRlcmVyLmJsZW5kTW9kZU1hbmFnZXIuc2V0QmxlbmRNb2RlKG1lc2guYmxlbmRNb2RlKTtcblxuICAgIC8vVE9ETyBjYWNoZSBjdXN0b20gc3RhdGUuLlxuICAgIGlmICghc2hhZGVyKVxuICAgIHtcbiAgICAgICAgc2hhZGVyID0gcmVuZGVyZXIuc2hhZGVyTWFuYWdlci5wbHVnaW5zLm1lc2hTaGFkZXI7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHNoYWRlciA9IHNoYWRlci5zaGFkZXJzW2dsLmlkXSB8fCBzaGFkZXIuZ2V0U2hhZGVyKHJlbmRlcmVyKTsvLyA6IHNoYWRlcjtcbiAgICB9XG5cbiAgICB0aGlzLnJlbmRlcmVyLnNoYWRlck1hbmFnZXIuc2V0U2hhZGVyKHNoYWRlcik7XG5cbiAgICBzaGFkZXIudW5pZm9ybXMudHJhbnNsYXRpb25NYXRyaXgudmFsdWUgPSBtZXNoLndvcmxkVHJhbnNmb3JtLnRvQXJyYXkodHJ1ZSk7XG4gICAgc2hhZGVyLnVuaWZvcm1zLnByb2plY3Rpb25NYXRyaXgudmFsdWUgPSByZW5kZXJlci5jdXJyZW50UmVuZGVyVGFyZ2V0LnByb2plY3Rpb25NYXRyaXgudG9BcnJheSh0cnVlKTtcbiAgICBzaGFkZXIudW5pZm9ybXMuYWxwaGEudmFsdWUgPSBtZXNoLndvcmxkQWxwaGE7XG5cbiAgICBzaGFkZXIuc3luY1VuaWZvcm1zKCk7XG5cbiAgICBpZiAoIW1lc2guZGlydHkpXG4gICAge1xuXG4gICAgICAgIGdsLmJpbmRCdWZmZXIoZ2wuQVJSQVlfQlVGRkVSLCBtZXNoLl92ZXJ0ZXhCdWZmZXIpO1xuICAgICAgICBnbC5idWZmZXJTdWJEYXRhKGdsLkFSUkFZX0JVRkZFUiwgMCwgbWVzaC52ZXJ0aWNlcyk7XG4gICAgICAgIGdsLnZlcnRleEF0dHJpYlBvaW50ZXIoc2hhZGVyLmF0dHJpYnV0ZXMuYVZlcnRleFBvc2l0aW9uLCAyLCBnbC5GTE9BVCwgZmFsc2UsIDAsIDApO1xuXG4gICAgICAgIC8vIHVwZGF0ZSB0aGUgdXZzXG4gICAgICAgIGdsLmJpbmRCdWZmZXIoZ2wuQVJSQVlfQlVGRkVSLCBtZXNoLl91dkJ1ZmZlcik7XG4gICAgICAgIGdsLnZlcnRleEF0dHJpYlBvaW50ZXIoc2hhZGVyLmF0dHJpYnV0ZXMuYVRleHR1cmVDb29yZCwgMiwgZ2wuRkxPQVQsIGZhbHNlLCAwLCAwKTtcblxuXG4gICAgICAgIGdsLmFjdGl2ZVRleHR1cmUoZ2wuVEVYVFVSRTApO1xuXG4gICAgICAgaWYgKCF0ZXh0dXJlLl9nbFRleHR1cmVzW2dsLmlkXSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5yZW5kZXJlci51cGRhdGVUZXh0dXJlKHRleHR1cmUpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2VcbiAgICAgICAge1xuICAgICAgICAgICAgLy8gYmluZCB0aGUgY3VycmVudCB0ZXh0dXJlXG4gICAgICAgICAgICBnbC5iaW5kVGV4dHVyZShnbC5URVhUVVJFXzJELCB0ZXh0dXJlLl9nbFRleHR1cmVzW2dsLmlkXSk7XG4gICAgICAgIH1cblxuICAgICAgICBnbC5iaW5kQnVmZmVyKGdsLkVMRU1FTlRfQVJSQVlfQlVGRkVSLCBtZXNoLl9pbmRleEJ1ZmZlcik7XG4gICAgICAgIGdsLmJ1ZmZlclN1YkRhdGEoZ2wuRUxFTUVOVF9BUlJBWV9CVUZGRVIsIDAsIG1lc2guaW5kaWNlcyk7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG5cbiAgICAgICAgbWVzaC5kaXJ0eSA9IGZhbHNlO1xuICAgICAgICBnbC5iaW5kQnVmZmVyKGdsLkFSUkFZX0JVRkZFUiwgbWVzaC5fdmVydGV4QnVmZmVyKTtcbiAgICAgICAgZ2wuYnVmZmVyRGF0YShnbC5BUlJBWV9CVUZGRVIsIG1lc2gudmVydGljZXMsIGdsLlNUQVRJQ19EUkFXKTtcbiAgICAgICAgZ2wudmVydGV4QXR0cmliUG9pbnRlcihzaGFkZXIuYXR0cmlidXRlcy5hVmVydGV4UG9zaXRpb24sIDIsIGdsLkZMT0FULCBmYWxzZSwgMCwgMCk7XG5cbiAgICAgICAgLy8gdXBkYXRlIHRoZSB1dnNcbiAgICAgICAgZ2wuYmluZEJ1ZmZlcihnbC5BUlJBWV9CVUZGRVIsIG1lc2guX3V2QnVmZmVyKTtcbiAgICAgICAgZ2wuYnVmZmVyRGF0YShnbC5BUlJBWV9CVUZGRVIsIG1lc2gudXZzLCBnbC5TVEFUSUNfRFJBVyk7XG4gICAgICAgIGdsLnZlcnRleEF0dHJpYlBvaW50ZXIoc2hhZGVyLmF0dHJpYnV0ZXMuYVRleHR1cmVDb29yZCwgMiwgZ2wuRkxPQVQsIGZhbHNlLCAwLCAwKTtcblxuICAgICAgICAgZ2wuYWN0aXZlVGV4dHVyZShnbC5URVhUVVJFMCk7XG5cbiAgICAgICAgaWYgKCF0ZXh0dXJlLl9nbFRleHR1cmVzW2dsLmlkXSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5yZW5kZXJlci51cGRhdGVUZXh0dXJlKHRleHR1cmUpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2VcbiAgICAgICAge1xuICAgICAgICAgICAgLy8gYmluZCB0aGUgY3VycmVudCB0ZXh0dXJlXG4gICAgICAgICAgICBnbC5iaW5kVGV4dHVyZShnbC5URVhUVVJFXzJELCB0ZXh0dXJlLl9nbFRleHR1cmVzW2dsLmlkXSk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBkb250IG5lZWQgdG8gdXBsb2FkIVxuICAgICAgICBnbC5iaW5kQnVmZmVyKGdsLkVMRU1FTlRfQVJSQVlfQlVGRkVSLCBtZXNoLl9pbmRleEJ1ZmZlcik7XG4gICAgICAgIGdsLmJ1ZmZlckRhdGEoZ2wuRUxFTUVOVF9BUlJBWV9CVUZGRVIsIG1lc2guaW5kaWNlcywgZ2wuU1RBVElDX0RSQVcpO1xuXG4gICAgfVxuXG4gICAgZ2wuZHJhd0VsZW1lbnRzKGRyYXdNb2RlLCBtZXNoLmluZGljZXMubGVuZ3RoLCBnbC5VTlNJR05FRF9TSE9SVCwgMCk7XG5cbn07XG5cbi8qKlxuICogUHJlcGFyZXMgYWxsIHRoZSBidWZmZXJzIHRvIHJlbmRlciB0aGlzIG1lc2hcbiAqIEBwYXJhbSBtZXNoIHtQSVhJLm1lc2guTWVzaH0gdGhlIG1lc2ggdG8gcmVuZGVyXG4gKi9cbk1lc2hSZW5kZXJlci5wcm90b3R5cGUuX2luaXRXZWJHTCA9IGZ1bmN0aW9uIChtZXNoKVxue1xuICAgIC8vIGJ1aWxkIHRoZSBzdHJpcCFcbiAgICB2YXIgZ2wgPSB0aGlzLnJlbmRlcmVyLmdsO1xuXG4gICAgbWVzaC5fdmVydGV4QnVmZmVyID0gZ2wuY3JlYXRlQnVmZmVyKCk7XG4gICAgbWVzaC5faW5kZXhCdWZmZXIgPSBnbC5jcmVhdGVCdWZmZXIoKTtcbiAgICBtZXNoLl91dkJ1ZmZlciA9IGdsLmNyZWF0ZUJ1ZmZlcigpO1xuXG5cblxuICAgIGdsLmJpbmRCdWZmZXIoZ2wuQVJSQVlfQlVGRkVSLCBtZXNoLl92ZXJ0ZXhCdWZmZXIpO1xuICAgIGdsLmJ1ZmZlckRhdGEoZ2wuQVJSQVlfQlVGRkVSLCBtZXNoLnZlcnRpY2VzLCBnbC5EWU5BTUlDX0RSQVcpO1xuXG4gICAgZ2wuYmluZEJ1ZmZlcihnbC5BUlJBWV9CVUZGRVIsIG1lc2guX3V2QnVmZmVyKTtcbiAgICBnbC5idWZmZXJEYXRhKGdsLkFSUkFZX0JVRkZFUiwgIG1lc2gudXZzLCBnbC5TVEFUSUNfRFJBVyk7XG5cbiAgICBpZihtZXNoLmNvbG9ycyl7XG4gICAgICAgIG1lc2guX2NvbG9yQnVmZmVyID0gZ2wuY3JlYXRlQnVmZmVyKCk7XG4gICAgICAgIGdsLmJpbmRCdWZmZXIoZ2wuQVJSQVlfQlVGRkVSLCBtZXNoLl9jb2xvckJ1ZmZlcik7XG4gICAgICAgIGdsLmJ1ZmZlckRhdGEoZ2wuQVJSQVlfQlVGRkVSLCBtZXNoLmNvbG9ycywgZ2wuU1RBVElDX0RSQVcpO1xuICAgIH1cblxuICAgIGdsLmJpbmRCdWZmZXIoZ2wuRUxFTUVOVF9BUlJBWV9CVUZGRVIsIG1lc2guX2luZGV4QnVmZmVyKTtcbiAgICBnbC5idWZmZXJEYXRhKGdsLkVMRU1FTlRfQVJSQVlfQlVGRkVSLCBtZXNoLmluZGljZXMsIGdsLlNUQVRJQ19EUkFXKTtcbn07XG5cblxuLyoqXG4gKiBFbXB0aWVzIHRoZSBjdXJyZW50IGJhdGNoLlxuICpcbiAqL1xuTWVzaFJlbmRlcmVyLnByb3RvdHlwZS5mbHVzaCA9IGZ1bmN0aW9uICgpXG57XG5cbn07XG5cbi8qKlxuICogU3RhcnRzIGEgbmV3IG1lc2ggcmVuZGVyZXIuXG4gKlxuICovXG5NZXNoUmVuZGVyZXIucHJvdG90eXBlLnN0YXJ0ID0gZnVuY3Rpb24gKClcbntcbiAgICBcblxuICAgIHRoaXMuY3VycmVudFNoYWRlciA9IG51bGw7XG59O1xuXG4vKipcbiAqIERlc3Ryb3lzIHRoZSBNZXNoIHJlbmRlcmVyXG4gKlxuICovXG5NZXNoUmVuZGVyZXIucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoKVxue1xuICAgIGNvcmUuT2JqZWN0UmVuZGVyZXIucHJvdG90eXBlLmRlc3Ryb3kuY2FsbCh0aGlzKTtcbn07XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uLy4uL2NvcmUnKTtcblxuLyoqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuU2hhZGVyXG4gKiBAbWVtYmVyb2YgUElYSS5tZXNoXG4gKiBAcGFyYW0gc2hhZGVyTWFuYWdlciB7UElYSS5TaGFkZXJNYW5hZ2VyfSBUaGUgV2ViR0wgc2hhZGVyIG1hbmFnZXIgdGhpcyBzaGFkZXIgd29ya3MgZm9yLlxuICovXG5mdW5jdGlvbiBNZXNoU2hhZGVyKHNoYWRlck1hbmFnZXIpXG57XG4gICAgY29yZS5TaGFkZXIuY2FsbCh0aGlzLFxuICAgICAgICBzaGFkZXJNYW5hZ2VyLFxuICAgICAgICAvLyB2ZXJ0ZXggc2hhZGVyXG4gICAgICAgIFtcbiAgICAgICAgICAgICdwcmVjaXNpb24gbG93cCBmbG9hdDsnLFxuICAgICAgICAgICAgJ2F0dHJpYnV0ZSB2ZWMyIGFWZXJ0ZXhQb3NpdGlvbjsnLFxuICAgICAgICAgICAgJ2F0dHJpYnV0ZSB2ZWMyIGFUZXh0dXJlQ29vcmQ7JyxcblxuICAgICAgICAgICAgJ3VuaWZvcm0gbWF0MyB0cmFuc2xhdGlvbk1hdHJpeDsnLFxuICAgICAgICAgICAgJ3VuaWZvcm0gbWF0MyBwcm9qZWN0aW9uTWF0cml4OycsXG5cbiAgICAgICAgICAgICd2YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDsnLFxuXG4gICAgICAgICAgICAndm9pZCBtYWluKHZvaWQpeycsXG4gICAgICAgICAgICAnICAgZ2xfUG9zaXRpb24gPSB2ZWM0KChwcm9qZWN0aW9uTWF0cml4ICogdHJhbnNsYXRpb25NYXRyaXggKiB2ZWMzKGFWZXJ0ZXhQb3NpdGlvbiwgMS4wKSkueHksIDAuMCwgMS4wKTsnLFxuICAgICAgICAgICAgJyAgIHZUZXh0dXJlQ29vcmQgPSBhVGV4dHVyZUNvb3JkOycsXG4gICAgICAgICAgICAnfSdcbiAgICAgICAgXS5qb2luKCdcXG4nKSxcbiAgICAgICAgW1xuICAgICAgICAgICAgJ3ByZWNpc2lvbiBsb3dwIGZsb2F0OycsXG5cbiAgICAgICAgICAgICd2YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDsnLFxuICAgICAgICAgICAgJ3VuaWZvcm0gZmxvYXQgYWxwaGE7JyxcblxuICAgICAgICAgICAgJ3VuaWZvcm0gc2FtcGxlcjJEIHVTYW1wbGVyOycsXG5cbiAgICAgICAgICAgICd2b2lkIG1haW4odm9pZCl7JyxcbiAgICAgICAgICAgICcgICBnbF9GcmFnQ29sb3IgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZUZXh0dXJlQ29vcmQpICogYWxwaGEgOycsXG4gICAgICAgICAgICAnfSdcbiAgICAgICAgXS5qb2luKCdcXG4nKSxcbiAgICAgICAgLy8gY3VzdG9tIHVuaWZvcm1zXG4gICAgICAgIHtcbiAgICAgICAgICAgIGFscGhhOiAgeyB0eXBlOiAnMWYnLCB2YWx1ZTogMCB9LFxuICAgICAgICAgICAgdHJhbnNsYXRpb25NYXRyaXg6IHsgdHlwZTogJ21hdDMnLCB2YWx1ZTogbmV3IEZsb2F0MzJBcnJheSg5KSB9LFxuICAgICAgICAgICAgcHJvamVjdGlvbk1hdHJpeDogeyB0eXBlOiAnbWF0MycsIHZhbHVlOiBuZXcgRmxvYXQzMkFycmF5KDkpIH1cbiAgICAgICAgfSxcbiAgICAgICAgLy8gY3VzdG9tIGF0dHJpYnV0ZXNcbiAgICAgICAge1xuICAgICAgICAgICAgYVZlcnRleFBvc2l0aW9uOjAsXG4gICAgICAgICAgICBhVGV4dHVyZUNvb3JkOjBcbiAgICAgICAgfVxuICAgICk7XG59XG5cbk1lc2hTaGFkZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShjb3JlLlNoYWRlci5wcm90b3R5cGUpO1xuTWVzaFNoYWRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBNZXNoU2hhZGVyO1xubW9kdWxlLmV4cG9ydHMgPSBNZXNoU2hhZGVyO1xuXG5jb3JlLlNoYWRlck1hbmFnZXIucmVnaXN0ZXJQbHVnaW4oJ21lc2hTaGFkZXInLCBNZXNoU2hhZGVyKTtcbiIsIi8vIFJlZmVyZW5jZXM6XG4vLyBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9KYXZhU2NyaXB0L1JlZmVyZW5jZS9HbG9iYWxfT2JqZWN0cy9NYXRoL3NpZ25cblxuaWYgKCFNYXRoLnNpZ24pXG57XG4gICAgTWF0aC5zaWduID0gZnVuY3Rpb24gKHgpIHtcbiAgICAgICAgeCA9ICt4O1xuICAgICAgICBpZiAoeCA9PT0gMCB8fCBpc05hTih4KSlcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHg7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHggPiAwID8gMSA6IC0xO1xuICAgIH07XG59XG4iLCIvLyBSZWZlcmVuY2VzOlxuLy8gaHR0cHM6Ly9naXRodWIuY29tL3NpbmRyZXNvcmh1cy9vYmplY3QtYXNzaWduXG4vLyBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9KYXZhU2NyaXB0L1JlZmVyZW5jZS9HbG9iYWxfT2JqZWN0cy9PYmplY3QvYXNzaWduXG5cbmlmICghT2JqZWN0LmFzc2lnbilcbntcbiAgICBPYmplY3QuYXNzaWduID0gcmVxdWlyZSgnb2JqZWN0LWFzc2lnbicpO1xufVxuIiwicmVxdWlyZSgnLi9PYmplY3QuYXNzaWduJyk7XG5yZXF1aXJlKCcuL3JlcXVlc3RBbmltYXRpb25GcmFtZScpO1xucmVxdWlyZSgnLi9NYXRoLnNpZ24nKTtcbiIsIi8vIFJlZmVyZW5jZXM6XG4vLyBodHRwOi8vcGF1bGlyaXNoLmNvbS8yMDExL3JlcXVlc3RhbmltYXRpb25mcmFtZS1mb3Itc21hcnQtYW5pbWF0aW5nL1xuLy8gaHR0cHM6Ly9naXN0LmdpdGh1Yi5jb20vMTU3OTY3MVxuLy8gaHR0cDovL3VwZGF0ZXMuaHRtbDVyb2Nrcy5jb20vMjAxMi8wNS9yZXF1ZXN0QW5pbWF0aW9uRnJhbWUtQVBJLW5vdy13aXRoLXN1Yi1taWxsaXNlY29uZC1wcmVjaXNpb25cbi8vIGh0dHBzOi8vZ2lzdC5naXRodWIuY29tL3RpbWhhbGwvNDA3ODYxNFxuLy8gaHR0cHM6Ly9naXRodWIuY29tL0ZpbmFuY2lhbC1UaW1lcy9wb2x5ZmlsbC1zZXJ2aWNlL3RyZWUvbWFzdGVyL3BvbHlmaWxscy9yZXF1ZXN0QW5pbWF0aW9uRnJhbWVcblxuLy8gRXhwZWN0ZWQgdG8gYmUgdXNlZCB3aXRoIEJyb3dzZXJmaXlcbi8vIEJyb3dzZXJpZnkgYXV0b21hdGljYWxseSBkZXRlY3RzIHRoZSB1c2Ugb2YgYGdsb2JhbGAgYW5kIHBhc3NlcyB0aGVcbi8vIGNvcnJlY3QgcmVmZXJlbmNlIG9mIGBnbG9iYWxgLCBgc2VsZmAsIGFuZCBmaW5hbGx5IGB3aW5kb3dgXG5cbi8vIERhdGUubm93XG5pZiAoIShEYXRlLm5vdyAmJiBEYXRlLnByb3RvdHlwZS5nZXRUaW1lKSkge1xuICAgIERhdGUubm93ID0gZnVuY3Rpb24gbm93KCkge1xuICAgICAgICByZXR1cm4gbmV3IERhdGUoKS5nZXRUaW1lKCk7XG4gICAgfTtcbn1cblxuLy8gcGVyZm9ybWFuY2Uubm93XG5pZiAoIShnbG9iYWwucGVyZm9ybWFuY2UgJiYgZ2xvYmFsLnBlcmZvcm1hbmNlLm5vdykpIHtcbiAgICB2YXIgc3RhcnRUaW1lID0gRGF0ZS5ub3coKTtcbiAgICBpZiAoIWdsb2JhbC5wZXJmb3JtYW5jZSkge1xuICAgICAgICBnbG9iYWwucGVyZm9ybWFuY2UgPSB7fTtcbiAgICB9XG4gICAgZ2xvYmFsLnBlcmZvcm1hbmNlLm5vdyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIERhdGUubm93KCkgLSBzdGFydFRpbWU7XG4gICAgfTtcbn1cblxuLy8gcmVxdWVzdEFuaW1hdGlvbkZyYW1lXG52YXIgbGFzdFRpbWUgPSBEYXRlLm5vdygpO1xudmFyIHZlbmRvcnMgPSBbJ21zJywgJ21veicsICd3ZWJraXQnLCAnbyddO1xuXG5mb3IodmFyIHggPSAwOyB4IDwgdmVuZG9ycy5sZW5ndGggJiYgIWdsb2JhbC5yZXF1ZXN0QW5pbWF0aW9uRnJhbWU7ICsreCkge1xuICAgIGdsb2JhbC5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUgPSBnbG9iYWxbdmVuZG9yc1t4XSArICdSZXF1ZXN0QW5pbWF0aW9uRnJhbWUnXTtcbiAgICBnbG9iYWwuY2FuY2VsQW5pbWF0aW9uRnJhbWUgPSBnbG9iYWxbdmVuZG9yc1t4XSArICdDYW5jZWxBbmltYXRpb25GcmFtZSddIHx8XG4gICAgICAgIGdsb2JhbFt2ZW5kb3JzW3hdICsgJ0NhbmNlbFJlcXVlc3RBbmltYXRpb25GcmFtZSddO1xufVxuXG5pZiAoIWdsb2JhbC5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUpIHtcbiAgICBnbG9iYWwucmVxdWVzdEFuaW1hdGlvbkZyYW1lID0gZnVuY3Rpb24gKGNhbGxiYWNrKSB7XG4gICAgICAgIGlmICh0eXBlb2YgY2FsbGJhY2sgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoY2FsbGJhY2sgKyAnaXMgbm90IGEgZnVuY3Rpb24nKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBjdXJyZW50VGltZSA9IERhdGUubm93KCksXG4gICAgICAgICAgICBkZWxheSA9IDE2ICsgbGFzdFRpbWUgLSBjdXJyZW50VGltZTtcblxuICAgICAgICBpZiAoZGVsYXkgPCAwKSB7XG4gICAgICAgICAgICBkZWxheSA9IDA7XG4gICAgICAgIH1cblxuICAgICAgICBsYXN0VGltZSA9IGN1cnJlbnRUaW1lO1xuXG4gICAgICAgIHJldHVybiBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGxhc3RUaW1lID0gRGF0ZS5ub3coKTtcbiAgICAgICAgICAgIGNhbGxiYWNrKHBlcmZvcm1hbmNlLm5vdygpKTtcbiAgICAgICAgfSwgZGVsYXkpO1xuICAgIH07XG59XG5cbmlmICghZ2xvYmFsLmNhbmNlbEFuaW1hdGlvbkZyYW1lKSB7XG4gICAgZ2xvYmFsLmNhbmNlbEFuaW1hdGlvbkZyYW1lID0gZnVuY3Rpb24oaWQpIHtcbiAgICAgICAgY2xlYXJUaW1lb3V0KGlkKTtcbiAgICB9O1xufVxuIl19 +//# sourceMappingURL=data:application/json;charset:utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIm5vZGVfbW9kdWxlcy9icm93c2VyaWZ5L25vZGVfbW9kdWxlcy9icm93c2VyLXBhY2svX3ByZWx1ZGUuanMiLCIuLi9waXhpLWdsLWNvcmUvaW5kZXguanMiLCIuLi9waXhpLWdsLWNvcmUvbGliL0dMQnVmZmVyLmpzIiwiLi4vcGl4aS1nbC1jb3JlL2xpYi9HTEZyYW1lYnVmZmVyLmpzIiwiLi4vcGl4aS1nbC1jb3JlL2xpYi9HTFNoYWRlci5qcyIsIi4uL3BpeGktZ2wtY29yZS9saWIvR0xUZXh0dXJlLmpzIiwiLi4vcGl4aS1nbC1jb3JlL2xpYi9WZXJ0ZXhBcnJheU9iamVjdC5qcyIsIi4uL3BpeGktZ2wtY29yZS9saWIvY3JlYXRlQ29udGV4dC5qcyIsIi4uL3BpeGktZ2wtY29yZS9saWIvc2V0VmVydGV4QXR0cmliQXJyYXlzLmpzIiwiLi4vcGl4aS1nbC1jb3JlL2xpYi9zaGFkZXIvY29tcGlsZVByb2dyYW0uanMiLCIuLi9waXhpLWdsLWNvcmUvbGliL3NoYWRlci9kZWZhdWx0VmFsdWUuanMiLCIuLi9waXhpLWdsLWNvcmUvbGliL3NoYWRlci9leHRyYWN0QXR0cmlidXRlcy5qcyIsIi4uL3BpeGktZ2wtY29yZS9saWIvc2hhZGVyL2V4dHJhY3RVbmlmb3Jtcy5qcyIsIi4uL3BpeGktZ2wtY29yZS9saWIvc2hhZGVyL2dlbmVyYXRlVW5pZm9ybUFjY2Vzc09iamVjdC5qcyIsIi4uL3BpeGktZ2wtY29yZS9saWIvc2hhZGVyL21hcFNpemUuanMiLCIuLi9waXhpLWdsLWNvcmUvbGliL3NoYWRlci9tYXBUeXBlLmpzIiwibm9kZV9tb2R1bGVzL2FzeW5jL2xpYi9hc3luYy5qcyIsIm5vZGVfbW9kdWxlcy9icm93c2VyaWZ5L25vZGVfbW9kdWxlcy9wYXRoLWJyb3dzZXJpZnkvaW5kZXguanMiLCJub2RlX21vZHVsZXMvYnJvd3NlcmlmeS9ub2RlX21vZHVsZXMvcHJvY2Vzcy9icm93c2VyLmpzIiwibm9kZV9tb2R1bGVzL2Jyb3dzZXJpZnkvbm9kZV9tb2R1bGVzL3B1bnljb2RlL3B1bnljb2RlLmpzIiwibm9kZV9tb2R1bGVzL2Jyb3dzZXJpZnkvbm9kZV9tb2R1bGVzL3F1ZXJ5c3RyaW5nLWVzMy9kZWNvZGUuanMiLCJub2RlX21vZHVsZXMvYnJvd3NlcmlmeS9ub2RlX21vZHVsZXMvcXVlcnlzdHJpbmctZXMzL2VuY29kZS5qcyIsIm5vZGVfbW9kdWxlcy9icm93c2VyaWZ5L25vZGVfbW9kdWxlcy9xdWVyeXN0cmluZy1lczMvaW5kZXguanMiLCJub2RlX21vZHVsZXMvYnJvd3NlcmlmeS9ub2RlX21vZHVsZXMvdXJsL3VybC5qcyIsIm5vZGVfbW9kdWxlcy9lYXJjdXQvc3JjL2VhcmN1dC5qcyIsIm5vZGVfbW9kdWxlcy9ldmVudGVtaXR0ZXIzL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL29iamVjdC1hc3NpZ24vaW5kZXguanMiLCJub2RlX21vZHVsZXMvcmVzb3VyY2UtbG9hZGVyL25vZGVfbW9kdWxlcy9hc3luYy9saWIvYXN5bmMuanMiLCJub2RlX21vZHVsZXMvcmVzb3VyY2UtbG9hZGVyL3NyYy9Mb2FkZXIuanMiLCJub2RlX21vZHVsZXMvcmVzb3VyY2UtbG9hZGVyL3NyYy9SZXNvdXJjZS5qcyIsIm5vZGVfbW9kdWxlcy9yZXNvdXJjZS1sb2FkZXIvc3JjL2I2NC5qcyIsIm5vZGVfbW9kdWxlcy9yZXNvdXJjZS1sb2FkZXIvc3JjL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL3Jlc291cmNlLWxvYWRlci9zcmMvbWlkZGxld2FyZXMvY2FjaGluZy9tZW1vcnkuanMiLCJub2RlX21vZHVsZXMvcmVzb3VyY2UtbG9hZGVyL3NyYy9taWRkbGV3YXJlcy9wYXJzaW5nL2Jsb2IuanMiLCJwYWNrYWdlLmpzb24iLCJzcmMvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5TWFuYWdlci5qcyIsInNyYy9hY2Nlc3NpYmlsaXR5L2FjY2Vzc2libGVUYXJnZXQuanMiLCJzcmMvYWNjZXNzaWJpbGl0eS9pbmRleC5qcyIsInNyYy9jb3JlL2NvbnN0LmpzIiwic3JjL2NvcmUvZGlzcGxheS9Db250YWluZXIuanMiLCJzcmMvY29yZS9kaXNwbGF5L0Rpc3BsYXlPYmplY3QuanMiLCJzcmMvY29yZS9ncmFwaGljcy9HcmFwaGljcy5qcyIsInNyYy9jb3JlL2dyYXBoaWNzL0dyYXBoaWNzRGF0YS5qcyIsInNyYy9jb3JlL2dyYXBoaWNzL3dlYmdsL0dyYXBoaWNzUmVuZGVyZXIuanMiLCJzcmMvY29yZS9ncmFwaGljcy93ZWJnbC9XZWJHTEdyYXBoaWNzRGF0YS5qcyIsInNyYy9jb3JlL2dyYXBoaWNzL3dlYmdsL3NoYWRlcnMvUHJpbWl0aXZlU2hhZGVyLmpzIiwic3JjL2NvcmUvZ3JhcGhpY3Mvd2ViZ2wvdXRpbHMvYnVpbGRDaXJjbGUuanMiLCJzcmMvY29yZS9ncmFwaGljcy93ZWJnbC91dGlscy9idWlsZENvbXBsZXhQb2x5LmpzIiwic3JjL2NvcmUvZ3JhcGhpY3Mvd2ViZ2wvdXRpbHMvYnVpbGRMaW5lLmpzIiwic3JjL2NvcmUvZ3JhcGhpY3Mvd2ViZ2wvdXRpbHMvYnVpbGRQb2x5LmpzIiwic3JjL2NvcmUvZ3JhcGhpY3Mvd2ViZ2wvdXRpbHMvYnVpbGRSZWN0YW5nbGUuanMiLCJzcmMvY29yZS9ncmFwaGljcy93ZWJnbC91dGlscy9idWlsZFJvdW5kZWRSZWN0YW5nbGUuanMiLCJzcmMvY29yZS9pbmRleC5qcyIsInNyYy9jb3JlL21hdGgvTWF0cml4LmpzIiwic3JjL2NvcmUvbWF0aC9Qb2ludC5qcyIsInNyYy9jb3JlL21hdGgvaW5kZXguanMiLCJzcmMvY29yZS9tYXRoL3NoYXBlcy9DaXJjbGUuanMiLCJzcmMvY29yZS9tYXRoL3NoYXBlcy9FbGxpcHNlLmpzIiwic3JjL2NvcmUvbWF0aC9zaGFwZXMvUG9seWdvbi5qcyIsInNyYy9jb3JlL21hdGgvc2hhcGVzL1JlY3RhbmdsZS5qcyIsInNyYy9jb3JlL21hdGgvc2hhcGVzL1JvdW5kZWRSZWN0YW5nbGUuanMiLCJzcmMvY29yZS9wYXJ0aWNsZXMvUGFydGljbGVDb250YWluZXIuanMiLCJzcmMvY29yZS9wYXJ0aWNsZXMvd2ViZ2wvUGFydGljbGVCdWZmZXIuanMiLCJzcmMvY29yZS9wYXJ0aWNsZXMvd2ViZ2wvUGFydGljbGVSZW5kZXJlci5qcyIsInNyYy9jb3JlL3BhcnRpY2xlcy93ZWJnbC9QYXJ0aWNsZVNoYWRlci5qcyIsInNyYy9jb3JlL3JlbmRlcmVycy9TeXN0ZW1SZW5kZXJlci5qcyIsInNyYy9jb3JlL3JlbmRlcmVycy9jYW52YXMvQ2FudmFzUmVuZGVyZXIuanMiLCJzcmMvY29yZS9yZW5kZXJlcnMvY2FudmFzL3V0aWxzL0NhbnZhc0J1ZmZlci5qcyIsInNyYy9jb3JlL3JlbmRlcmVycy9jYW52YXMvdXRpbHMvQ2FudmFzR3JhcGhpY3MuanMiLCJzcmMvY29yZS9yZW5kZXJlcnMvY2FudmFzL3V0aWxzL0NhbnZhc01hc2tNYW5hZ2VyLmpzIiwic3JjL2NvcmUvcmVuZGVyZXJzL2NhbnZhcy91dGlscy9DYW52YXNUaW50ZXIuanMiLCJzcmMvY29yZS9yZW5kZXJlcnMvd2ViZ2wvVGV4dHVyZU1hbmFnZXIuanMiLCJzcmMvY29yZS9yZW5kZXJlcnMvd2ViZ2wvV2ViR0xSZW5kZXJlci5qcyIsInNyYy9jb3JlL3JlbmRlcmVycy93ZWJnbC9maWx0ZXJzL0Fic3RyYWN0RmlsdGVyLmpzIiwic3JjL2NvcmUvcmVuZGVyZXJzL3dlYmdsL2ZpbHRlcnMvRlhBQUZpbHRlci5qcyIsInNyYy9jb3JlL3JlbmRlcmVycy93ZWJnbC9maWx0ZXJzL1Nwcml0ZU1hc2tGaWx0ZXIuanMiLCJzcmMvY29yZS9yZW5kZXJlcnMvd2ViZ2wvbWFuYWdlcnMvQmxlbmRNb2RlTWFuYWdlci5qcyIsInNyYy9jb3JlL3JlbmRlcmVycy93ZWJnbC9tYW5hZ2Vycy9GaWx0ZXJNYW5hZ2VyLmpzIiwic3JjL2NvcmUvcmVuZGVyZXJzL3dlYmdsL21hbmFnZXJzL01hc2tNYW5hZ2VyLmpzIiwic3JjL2NvcmUvcmVuZGVyZXJzL3dlYmdsL21hbmFnZXJzL1NoYWRlck1hbmFnZXIuanMiLCJzcmMvY29yZS9yZW5kZXJlcnMvd2ViZ2wvbWFuYWdlcnMvU3RlbmNpbE1hbmFnZXIuanMiLCJzcmMvY29yZS9yZW5kZXJlcnMvd2ViZ2wvbWFuYWdlcnMvV2ViR0xNYW5hZ2VyLmpzIiwic3JjL2NvcmUvcmVuZGVyZXJzL3dlYmdsL3NoYWRlcnMvQ29tcGxleFByaW1pdGl2ZVNoYWRlci5qcyIsInNyYy9jb3JlL3JlbmRlcmVycy93ZWJnbC9zaGFkZXJzL1ByaW1pdGl2ZVNoYWRlci5qcyIsInNyYy9jb3JlL3JlbmRlcmVycy93ZWJnbC9zaGFkZXJzL1NoYWRlci5qcyIsInNyYy9jb3JlL3JlbmRlcmVycy93ZWJnbC9zaGFkZXJzL1RleHR1cmVTaGFkZXIuanMiLCJzcmMvY29yZS9yZW5kZXJlcnMvd2ViZ2wvc2hhZGVycy9fVGV4dHVyZVNoYWRlci5qcyIsInNyYy9jb3JlL3JlbmRlcmVycy93ZWJnbC91dGlscy9PYmplY3RSZW5kZXJlci5qcyIsInNyYy9jb3JlL3JlbmRlcmVycy93ZWJnbC91dGlscy9RdWFkLmpzIiwic3JjL2NvcmUvcmVuZGVyZXJzL3dlYmdsL3V0aWxzL1JlbmRlclRhcmdldC5qcyIsInNyYy9jb3JlL3JlbmRlcmVycy93ZWJnbC91dGlscy9TdGVuY2lsTWFza1N0YWNrLmpzIiwic3JjL2NvcmUvcmVuZGVyZXJzL3dlYmdsL3V0aWxzL21hcFdlYkdMQmxlbmRNb2Rlc1RvUGl4aS5qcyIsInNyYy9jb3JlL3JlbmRlcmVycy93ZWJnbC91dGlscy9tYXBXZWJHTERyYXdNb2Rlc1RvUGl4aS5qcyIsInNyYy9jb3JlL3Nwcml0ZXMvU3ByaXRlLmpzIiwic3JjL2NvcmUvc3ByaXRlcy93ZWJnbC9TcHJpdGVSZW5kZXJlci5qcyIsInNyYy9jb3JlL3Nwcml0ZXMvd2ViZ2wvZ2VuZXJhdGVNdWx0aVRleHR1cmVTaGFkZXIuanMiLCJzcmMvY29yZS90ZXh0L1RleHQuanMiLCJzcmMvY29yZS90ZXh0dXJlcy9CYXNlVGV4dHVyZS5qcyIsInNyYy9jb3JlL3RleHR1cmVzL1JlbmRlclRleHR1cmUuanMiLCJzcmMvY29yZS90ZXh0dXJlcy9UZXh0dXJlLmpzIiwic3JjL2NvcmUvdGV4dHVyZXMvVGV4dHVyZVV2cy5qcyIsInNyYy9jb3JlL3RleHR1cmVzL1ZpZGVvQmFzZVRleHR1cmUuanMiLCJzcmMvY29yZS90aWNrZXIvVGlja2VyLmpzIiwic3JjL2NvcmUvdGlja2VyL2luZGV4LmpzIiwic3JjL2NvcmUvdXRpbHMvY3JlYXRlSW5kaWNlc0ZvclF1YWRzLmpzIiwic3JjL2NvcmUvdXRpbHMvaW5kZXguanMiLCJzcmMvY29yZS91dGlscy9wbHVnaW5UYXJnZXQuanMiLCJzcmMvZGVwcmVjYXRpb24uanMiLCJzcmMvZXh0cmFzL0JpdG1hcFRleHQuanMiLCJzcmMvZXh0cmFzL01vdmllQ2xpcC5qcyIsInNyYy9leHRyYXMvVGlsaW5nU3ByaXRlLmpzIiwic3JjL2V4dHJhcy9jYWNoZUFzQml0bWFwLmpzIiwic3JjL2V4dHJhcy9nZXRDaGlsZEJ5TmFtZS5qcyIsInNyYy9leHRyYXMvZ2V0R2xvYmFsUG9zaXRpb24uanMiLCJzcmMvZXh0cmFzL2luZGV4LmpzIiwic3JjL2ZpbHRlcnMvYXNjaWkvQXNjaWlGaWx0ZXIuanMiLCJzcmMvZmlsdGVycy9ibG9vbS9CbG9vbUZpbHRlci5qcyIsInNyYy9maWx0ZXJzL2JsdXIvQmx1ckRpckZpbHRlci5qcyIsInNyYy9maWx0ZXJzL2JsdXIvQmx1ckZpbHRlci5qcyIsInNyYy9maWx0ZXJzL2JsdXIvQmx1clhGaWx0ZXIuanMiLCJzcmMvZmlsdGVycy9ibHVyL0JsdXJZRmlsdGVyLmpzIiwic3JjL2ZpbHRlcnMvYmx1ci9TbWFydEJsdXJGaWx0ZXIuanMiLCJzcmMvZmlsdGVycy9jb2xvci9Db2xvck1hdHJpeEZpbHRlci5qcyIsInNyYy9maWx0ZXJzL2NvbG9yL0NvbG9yU3RlcEZpbHRlci5qcyIsInNyYy9maWx0ZXJzL2NvbnZvbHV0aW9uL0NvbnZvbHV0aW9uRmlsdGVyLmpzIiwic3JjL2ZpbHRlcnMvY3Jvc3NoYXRjaC9Dcm9zc0hhdGNoRmlsdGVyLmpzIiwic3JjL2ZpbHRlcnMvZGlzcGxhY2VtZW50L0Rpc3BsYWNlbWVudEZpbHRlci5qcyIsInNyYy9maWx0ZXJzL2RvdC9Eb3RTY3JlZW5GaWx0ZXIuanMiLCJzcmMvZmlsdGVycy9kcm9wc2hhZG93L0JsdXJZVGludEZpbHRlci5qcyIsInNyYy9maWx0ZXJzL2Ryb3BzaGFkb3cvRHJvcFNoYWRvd0ZpbHRlci5qcyIsInNyYy9maWx0ZXJzL2dyYXkvR3JheUZpbHRlci5qcyIsInNyYy9maWx0ZXJzL2luZGV4LmpzIiwic3JjL2ZpbHRlcnMvaW52ZXJ0L0ludmVydEZpbHRlci5qcyIsInNyYy9maWx0ZXJzL25vaXNlL05vaXNlRmlsdGVyLmpzIiwic3JjL2ZpbHRlcnMvcGl4ZWxhdGUvUGl4ZWxhdGVGaWx0ZXIuanMiLCJzcmMvZmlsdGVycy9yZ2IvUkdCU3BsaXRGaWx0ZXIuanMiLCJzcmMvZmlsdGVycy9zZXBpYS9TZXBpYUZpbHRlci5qcyIsInNyYy9maWx0ZXJzL3Nob2Nrd2F2ZS9TaG9ja3dhdmVGaWx0ZXIuanMiLCJzcmMvZmlsdGVycy90aWx0c2hpZnQvVGlsdFNoaWZ0QXhpc0ZpbHRlci5qcyIsInNyYy9maWx0ZXJzL3RpbHRzaGlmdC9UaWx0U2hpZnRGaWx0ZXIuanMiLCJzcmMvZmlsdGVycy90aWx0c2hpZnQvVGlsdFNoaWZ0WEZpbHRlci5qcyIsInNyYy9maWx0ZXJzL3RpbHRzaGlmdC9UaWx0U2hpZnRZRmlsdGVyLmpzIiwic3JjL2ZpbHRlcnMvdHdpc3QvVHdpc3RGaWx0ZXIuanMiLCJzcmMvc3JjL2luZGV4LmpzIiwic3JjL2ludGVyYWN0aW9uL0ludGVyYWN0aW9uRGF0YS5qcyIsInNyYy9pbnRlcmFjdGlvbi9JbnRlcmFjdGlvbk1hbmFnZXIuanMiLCJzcmMvaW50ZXJhY3Rpb24vaW5kZXguanMiLCJzcmMvaW50ZXJhY3Rpb24vaW50ZXJhY3RpdmVUYXJnZXQuanMiLCJzcmMvbG9hZGVycy9iaXRtYXBGb250UGFyc2VyLmpzIiwic3JjL2xvYWRlcnMvaW5kZXguanMiLCJzcmMvbG9hZGVycy9sb2FkZXIuanMiLCJzcmMvbG9hZGVycy9zcHJpdGVzaGVldFBhcnNlci5qcyIsInNyYy9sb2FkZXJzL3RleHR1cmVQYXJzZXIuanMiLCJzcmMvbWVzaC9NZXNoLmpzIiwic3JjL21lc2gvUGxhbmUuanMiLCJzcmMvbWVzaC9Sb3BlLmpzIiwic3JjL21lc2gvaW5kZXguanMiLCJzcmMvbWVzaC93ZWJnbC9NZXNoUmVuZGVyZXIuanMiLCJzcmMvbWVzaC93ZWJnbC9NZXNoU2hhZGVyLmpzIiwic3JjL3BvbHlmaWxsL01hdGguc2lnbi5qcyIsInNyYy9wb2x5ZmlsbC9PYmplY3QuYXNzaWduLmpzIiwic3JjL3BvbHlmaWxsL2luZGV4LmpzIiwic3JjL3BvbHlmaWxsL3JlcXVlc3RBbmltYXRpb25GcmFtZS5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQ0FBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDMUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN4Q0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN2TUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2pIQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM5QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdERBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3pEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDMUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbENBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM3QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3RJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDaENBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQzlDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7QUM1dUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7OztBQ2hPQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUMzRkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7O0FDcmhCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNwRkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNyRkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNKQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbnNCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0a0JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdFFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUN2Q0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7OztBQ25tQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDeGNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNoeUJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDaEVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ1pBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNwQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMxREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ25aQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDN05BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3JvQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdm1CQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0b0NBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDM0ZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzlUQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDcEhBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNsREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNyRkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDckVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMxTkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM3REE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDckVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzlIQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM3RkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdGJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNwRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3BCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdEZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzdGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDckdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM1RkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDMUZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM3VEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzFOQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMxZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM1RUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuUUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzFRQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbEdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDaFdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzVEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzFQQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMxSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzNZQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDOUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNyREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQy9GQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMxQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbGNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNqSEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDeEtBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM3V0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdkNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzVEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzdEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzlnQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM3R0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMvRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3hEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN6SkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNqU0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMvQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ25DQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3RCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDem1CQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdldBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDN0RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDM21CQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuYkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDN2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDeGFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDL0VBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDM09BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNqV0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdERBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDL0JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuUkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3BFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzdWQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbFlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzlUQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNsY0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDOVFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNUJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNUJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbkJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdkRBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ25HQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzVHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzNGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNwRkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM1QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdGhCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDL0NBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN6RkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDeEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbEZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdEVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN6RkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQy9MQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDL0NBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDckNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2hEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDckRBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDakRBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3BGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNoREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3RGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMzSEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3BDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNwQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUNuRkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7OztBQzVCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDL0NBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDMTJCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNmQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDL0NBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN2SEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNURBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbEZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNwQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDMWRBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNUhBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbk5BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNqQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ25PQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDM0RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDUkE7QUFDQTtBQUNBO0FBQ0E7OztBQ0hBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6ImdlbmVyYXRlZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzQ29udGVudCI6WyIoZnVuY3Rpb24gZSh0LG4scil7ZnVuY3Rpb24gcyhvLHUpe2lmKCFuW29dKXtpZighdFtvXSl7dmFyIGE9dHlwZW9mIHJlcXVpcmU9PVwiZnVuY3Rpb25cIiYmcmVxdWlyZTtpZighdSYmYSlyZXR1cm4gYShvLCEwKTtpZihpKXJldHVybiBpKG8sITApO3ZhciBmPW5ldyBFcnJvcihcIkNhbm5vdCBmaW5kIG1vZHVsZSAnXCIrbytcIidcIik7dGhyb3cgZi5jb2RlPVwiTU9EVUxFX05PVF9GT1VORFwiLGZ9dmFyIGw9bltvXT17ZXhwb3J0czp7fX07dFtvXVswXS5jYWxsKGwuZXhwb3J0cyxmdW5jdGlvbihlKXt2YXIgbj10W29dWzFdW2VdO3JldHVybiBzKG4/bjplKX0sbCxsLmV4cG9ydHMsZSx0LG4scil9cmV0dXJuIG5bb10uZXhwb3J0c312YXIgaT10eXBlb2YgcmVxdWlyZT09XCJmdW5jdGlvblwiJiZyZXF1aXJlO2Zvcih2YXIgbz0wO288ci5sZW5ndGg7bysrKXMocltvXSk7cmV0dXJuIHN9KSIsIlxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcblxuICAgIGNyZWF0ZUNvbnRleHQ6IFx0XHRcdHJlcXVpcmUoJy4vbGliL2NyZWF0ZUNvbnRleHQnKSxcbiAgICBzZXRWZXJ0ZXhBdHRyaWJBcnJheXM6IFx0cmVxdWlyZSgnLi9saWIvc2V0VmVydGV4QXR0cmliQXJyYXlzJyksXG4gICAgXG4gICAgR0xCdWZmZXI6IFx0XHRcdFx0cmVxdWlyZSgnLi9saWIvR0xCdWZmZXInKSxcbiAgICBHTEZyYW1lYnVmZmVyOiBcdFx0XHRyZXF1aXJlKCcuL2xpYi9HTEZyYW1lYnVmZmVyJyksXG4gICAgR0xTaGFkZXI6IFx0XHRcdFx0cmVxdWlyZSgnLi9saWIvR0xTaGFkZXInKSxcbiAgICBHTFRleHR1cmU6IFx0XHRcdFx0cmVxdWlyZSgnLi9saWIvR0xUZXh0dXJlJyksXG4gICAgXG4gICAgVmVydGV4QXJyYXlPYmplY3Q6IFx0XHRyZXF1aXJlKCcuL2xpYi9WZXJ0ZXhBcnJheU9iamVjdCcpXG5cbn07IiwiXG4vKipcbiAqIEhlbHBlciBjbGFzcyB0byBjcmVhdGUgYSB3ZWJHTCBidWZmZXJcbiAqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gZ2wge1dlYkdMUmVuZGVyaW5nQ29udGV4dH1cbiAqL1xuXG52YXIgRU1QVFlfQVJSQVlfQlVGRkVSID0gbmV3IEFycmF5QnVmZmVyKDApO1xuXG52YXIgQnVmZmVyID0gZnVuY3Rpb24oZ2wsIHR5cGUsIGRhdGEsIGRyYXdUeXBlKVxue1xuXHR0aGlzLmdsID0gZ2w7XG5cblx0dGhpcy5idWZmZXIgPSBnbC5jcmVhdGVCdWZmZXIoKTtcblx0dGhpcy50eXBlID0gdHlwZSB8fCBnbC5BUlJBWV9CVUZGRVI7XG5cdHRoaXMuZHJhd1R5cGUgPSBkcmF3VHlwZSB8fCBnbC5TVEFUSUNfRFJBVztcblx0dGhpcy5kYXRhID0gRU1QVFlfQVJSQVlfQlVGRkVSO1xuXG5cdGlmKGRhdGEpXG5cdHtcblx0XHR0aGlzLnVwbG9hZChkYXRhKTtcblx0fVxufVxuXG5CdWZmZXIucHJvdG90eXBlLnVwbG9hZCA9IGZ1bmN0aW9uKGRhdGEsIG9mZnNldCwgZG9udEJpbmQpXG57XG5cdC8vIHRvZG8gLSBuZWVkZWQ/XG5cdC8vaWYoIWRvbnRCaW5kKVxuXHR0aGlzLmJpbmQoKTtcblxuXHR2YXIgZ2wgPSB0aGlzLmdsO1xuXHRcblx0ZGF0YSA9IGRhdGEgfHwgdGhpcy5kYXRhO1xuXHRvZmZzZXQgPSBvZmZzZXQgfHwgMDtcblxuXHRpZih0aGlzLmRhdGEuYnl0ZUxlbmd0aCA+PSBkYXRhLmJ5dGVMZW5ndGgpXG5cdHtcdFxuXHRcdGdsLmJ1ZmZlclN1YkRhdGEodGhpcy50eXBlLCBvZmZzZXQsIGRhdGEpO1xuXHR9XG5cdGVsc2Vcblx0e1xuXHRcdGdsLmJ1ZmZlckRhdGEodGhpcy50eXBlLCBkYXRhLCB0aGlzLmRyYXdUeXBlKTtcblx0fVxuXG5cdHRoaXMuZGF0YSA9IGRhdGE7XG59XG5cbkJ1ZmZlci5wcm90b3R5cGUuYmluZCA9IGZ1bmN0aW9uKClcbntcblx0dmFyIGdsID0gdGhpcy5nbDtcblx0Z2wuYmluZEJ1ZmZlcih0aGlzLnR5cGUsIHRoaXMuYnVmZmVyKTtcbn1cblxuQnVmZmVyLmNyZWF0ZVZlcnRleEJ1ZmZlciA9IGZ1bmN0aW9uKGdsLCBkYXRhLCBkcmF3VHlwZSlcbntcblx0cmV0dXJuIG5ldyBCdWZmZXIoZ2wsIGdsLkFSUkFZX0JVRkZFUiwgZGF0YSwgZHJhd1R5cGUpO1xufVxuXG5CdWZmZXIuY3JlYXRlSW5kZXhCdWZmZXIgPSBmdW5jdGlvbihnbCwgZGF0YSwgZHJhd1R5cGUpXG57XG5cdHJldHVybiBuZXcgQnVmZmVyKGdsLCBnbC5FTEVNRU5UX0FSUkFZX0JVRkZFUiwgZGF0YSwgZHJhd1R5cGUpO1xufVxuXG5CdWZmZXIuY3JlYXRlID0gZnVuY3Rpb24oZ2wsIHR5cGUsIGRhdGEsIGRyYXdUeXBlKVxue1xuXHRyZXR1cm4gbmV3IEJ1ZmZlcihnbCwgdHlwZSwgZHJhd1R5cGUpO1xufVxuXG4vL1RPRE8gRGVzdHJveS4uXG5cbm1vZHVsZS5leHBvcnRzID0gQnVmZmVyO1xuXG4iLCJcbnZhciBUZXh0dXJlID0gcmVxdWlyZSgnLi9HTFRleHR1cmUnKTtcblxuLyoqXG4gKiBIZWxwZXIgY2xhc3MgdG8gY3JlYXRlIGEgd2ViR0wgRnJhbWVidWZmZXJcbiAqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gZ2wge1dlYkdMUmVuZGVyaW5nQ29udGV4dH1cbiAqL1xuXG52YXIgRnJhbWVidWZmZXIgPSBmdW5jdGlvbihnbCwgd2lkdGgsIGhlaWdodClcbntcblx0dGhpcy5nbCA9IGdsO1xuXG5cdHRoaXMuZnJhbWVidWZmZXIgPSBnbC5jcmVhdGVGcmFtZWJ1ZmZlcigpO1xuXHRcblx0dGhpcy5zdGVuY2lsID0gbnVsbDtcblx0dGhpcy50ZXh0dXJlID0gbnVsbDtcblxuXHR0aGlzLndpZHRoID0gd2lkdGggfHwgMTAwO1xuXHR0aGlzLmhlaWdodCA9IGhlaWdodCB8fCAxMDA7XG59XG5cbkZyYW1lYnVmZmVyLnByb3RvdHlwZS5lbmFibGVUZXh0dXJlID0gZnVuY3Rpb24odGV4dHVyZSlcbntcblx0dmFyIGdsID0gdGhpcy5nbDtcblxuXHR0aGlzLnRleHR1cmUgPSB0ZXh0dXJlIHx8IG5ldyBUZXh0dXJlKGdsKTtcblxuXHR0aGlzLnRleHR1cmUuYmluZCgpO1xuXG5cdC8vZ2wudGV4SW1hZ2UyRChnbC5URVhUVVJFXzJELCAwLCBnbC5SR0JBLCAgdGhpcy53aWR0aCwgdGhpcy5oZWlnaHQsIDAsIGdsLlJHQkEsIGdsLlVOU0lHTkVEX0JZVEUsIG51bGwpO1xuXG5cdHRoaXMuYmluZCgpO1xuXG5cdGdsLmZyYW1lYnVmZmVyVGV4dHVyZTJEKGdsLkZSQU1FQlVGRkVSLCBnbC5DT0xPUl9BVFRBQ0hNRU5UMCwgZ2wuVEVYVFVSRV8yRCwgdGhpcy50ZXh0dXJlLnRleHR1cmUsIDApO1xufVxuXG5GcmFtZWJ1ZmZlci5wcm90b3R5cGUuZW5hYmxlU3RlbmNpbCA9IGZ1bmN0aW9uKClcbntcblx0aWYodGhpcy5zdGVuY2lsKXJldHVybjtcblxuXHR2YXIgZ2wgPSB0aGlzLmdsO1xuXG5cdHRoaXMuc3RlbmNpbCA9IGdsLmNyZWF0ZVJlbmRlcmJ1ZmZlcigpO1xuICAgIFxuICAgIGdsLmJpbmRSZW5kZXJidWZmZXIoZ2wuUkVOREVSQlVGRkVSLCB0aGlzLnN0ZW5jaWwpO1xuICAgIFxuICAgIC8vIFRPRE8uLiB0aGlzIGlzIGRlcHRoIEFORCBzdGVuY2lsP1xuICAgIGdsLmZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyKGdsLkZSQU1FQlVGRkVSLCBnbC5ERVBUSF9TVEVOQ0lMX0FUVEFDSE1FTlQsIGdsLlJFTkRFUkJVRkZFUiwgdGhpcy5zdGVuY2lsKTtcbiAgICBnbC5yZW5kZXJidWZmZXJTdG9yYWdlKGdsLlJFTkRFUkJVRkZFUiwgZ2wuREVQVEhfU1RFTkNJTCwgIHRoaXMud2lkdGggICwgdGhpcy5oZWlnaHQgKTtcbn1cblxuRnJhbWVidWZmZXIucHJvdG90eXBlLmNsZWFyID0gZnVuY3Rpb24oIHIsIGcsIGIsIGEgKVxue1xuXHR0aGlzLmJpbmQoKTtcblxuXHR2YXIgZ2wgPSB0aGlzLmdsO1xuICAgIFxuICAgIGdsLmNsZWFyQ29sb3IociwgZywgYiwgYSk7XG4gICAgZ2wuY2xlYXIoZ2wuQ09MT1JfQlVGRkVSX0JJVCk7XG59XG5cbkZyYW1lYnVmZmVyLnByb3RvdHlwZS5iaW5kID0gZnVuY3Rpb24oKVxue1xuXHR2YXIgZ2wgPSB0aGlzLmdsO1xuXHRnbC5iaW5kRnJhbWVidWZmZXIoZ2wuRlJBTUVCVUZGRVIsIHRoaXMuZnJhbWVidWZmZXIgKTtcdFxufVxuXG5GcmFtZWJ1ZmZlci5wcm90b3R5cGUudW5iaW5kID0gZnVuY3Rpb24oKVxue1xuXHRnbC5iaW5kRnJhbWVidWZmZXIoZ2wuRlJBTUVCVUZGRVIsIG51bGwgKTtcdFxufVxuXG5GcmFtZWJ1ZmZlci5wcm90b3R5cGUucmVzaXplID0gZnVuY3Rpb24od2lkdGgsIGhlaWdodClcbntcblx0dmFyIGdsID0gdGhpcy5nbDtcblxuXHR0aGlzLndpZHRoID0gd2lkdGg7XG5cdHRoaXMuaGVpZ2h0ID0gaGVpZ2h0O1xuXG5cdGlmICggdGhpcy50ZXh0dXJlIClcbiAgICB7XG4gICAgXHR0aGlzLnRleHR1cmUudXBsb2FkRGF0YShudWxsLCB3aWR0aCwgaGVpZ2h0KTtcblx0fVxuXG5cdGlmICggdGhpcy5zdGVuY2lsIClcbiAgICB7XG4gICAgICAgIC8vIHVwZGF0ZSB0aGUgc3RlbmNpbCBidWZmZXIgd2lkdGggYW5kIGhlaWdodFxuICAgICAgICBnbC5iaW5kUmVuZGVyYnVmZmVyKGdsLlJFTkRFUkJVRkZFUiwgdGhpcy5zdGVuY2lsKTtcbiAgICAgICAgZ2wucmVuZGVyYnVmZmVyU3RvcmFnZShnbC5SRU5ERVJCVUZGRVIsIGdsLkRFUFRIX1NURU5DSUwsIHdpZHRoLCBoZWlnaHQpO1xuICAgIH1cbn1cblxuRnJhbWVidWZmZXIucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbigpXG57XG5cdHZhciBnbCA9IHRoaXMuZ2w7XG5cdC8vVE9ET1xuXHRnbC5kZWxldGVGcmFtZWJ1ZmZlcih0aGlzLmZyYW1lYnVmZmVyKTtcbn1cblxuRnJhbWVidWZmZXIuY3JlYXRlUkdCQSA9IGZ1bmN0aW9uKGdsLCB3aWR0aCwgaGVpZ2h0LCBkYXRhKVxue1xuXHR2YXIgdGV4dHVyZSA9IFRleHR1cmUuZnJvbURhdGEoZ2wsIG51bGwsIHdpZHRoLCBoZWlnaHQpO1xuXHR0ZXh0dXJlLmVuYWJsZU5lYXJlc3RTY2FsaW5nKCk7XG4gICAgdGV4dHVyZS5lbmFibGVXcmFwQ2xhbXAoKTtcblxuICAgIC8vbm93IGNyZWF0ZSB0aGUgZnJhbWVidWZmZXIgb2JqZWN0IGFuZCBhdHRhY2ggdGhlIHRleHR1cmUgdG8gaXQuXG4gICAgdmFyIGZibyA9IG5ldyBGcmFtZWJ1ZmZlcihnbCwgd2lkdGgsIGhlaWdodCk7XG4gICAgZmJvLmVuYWJsZVRleHR1cmUodGV4dHVyZSk7XG5cbiAgICByZXR1cm4gZmJvO1xufVxuXG5GcmFtZWJ1ZmZlci5jcmVhdGVGbG9hdDMyID0gZnVuY3Rpb24oZ2wsIHdpZHRoLCBoZWlnaHQsIGRhdGEpXG57XG5cdC8vIGNyZWF0ZSBhIG5ldyB0ZXh0dXJlLi5cbiAgICB2YXIgdGV4dHVyZSA9IG5ldyBUZXh0dXJlLmZyb21EYXRhKGdsLCBkYXRhLCB3aWR0aCwgaGVpZ2h0KTtcbiAgICB0ZXh0dXJlLmVuYWJsZU5lYXJlc3RTY2FsaW5nKCk7XG4gICAgdGV4dHVyZS5lbmFibGVXcmFwQ2xhbXAoKTtcblxuICAgIC8vbm93IGNyZWF0ZSB0aGUgZnJhbWVidWZmZXIgb2JqZWN0IGFuZCBhdHRhY2ggdGhlIHRleHR1cmUgdG8gaXQuXG4gICAgdmFyIGZibyA9IG5ldyBGcmFtZWJ1ZmZlcihnbCwgd2lkdGgsIGhlaWdodCk7XG4gICAgZmJvLmVuYWJsZVRleHR1cmUodGV4dHVyZSlcblxuICAgIHJldHVybiBmYm87XG59XG5cbm1vZHVsZS5leHBvcnRzID0gRnJhbWVidWZmZXI7XG5cbiIsIlxudmFyIGNvbXBpbGVQcm9ncmFtID0gcmVxdWlyZSgnLi9zaGFkZXIvY29tcGlsZVByb2dyYW0nKSxcblx0ZXh0cmFjdEF0dHJpYnV0ZXMgPSByZXF1aXJlKCcuL3NoYWRlci9leHRyYWN0QXR0cmlidXRlcycpLFxuXHRleHRyYWN0VW5pZm9ybXMgPSByZXF1aXJlKCcuL3NoYWRlci9leHRyYWN0VW5pZm9ybXMnKSxcblx0Z2VuZXJhdGVVbmlmb3JtQWNjZXNzT2JqZWN0ID0gcmVxdWlyZSgnLi9zaGFkZXIvZ2VuZXJhdGVVbmlmb3JtQWNjZXNzT2JqZWN0Jyk7XG5cbi8qKlxuICogSGVscGVyIGNsYXNzIHRvIGNyZWF0ZSBhIHdlYkdMIFNoYWRlclxuICpcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqIEBwYXJhbSBnbCB7V2ViR0xSZW5kZXJpbmdDb250ZXh0fVxuICovXG52YXIgU2hhZGVyID0gZnVuY3Rpb24oZ2wsIHZlcnRleFNyYywgZnJhZ21lbnRTcmMpXG57XG5cdHRoaXMuZ2wgPSBnbDtcblxuXHQvLyBGaXJzdCBjb21waWxlIHRoZSBwcm9ncmFtLi5cblx0dGhpcy5wcm9ncmFtID0gY29tcGlsZVByb2dyYW0oZ2wsIHZlcnRleFNyYywgZnJhZ21lbnRTcmMpO1xuXG5cdC8vIG5leHQgZXh0cmFjdCB0aGUgYXR0cmlidXRlc1xuXHR0aGlzLmF0dHJpYnV0ZXMgPSBleHRyYWN0QXR0cmlidXRlcyhnbCwgdGhpcy5wcm9ncmFtKTsgXG5cbiAgICB2YXIgdW5pZm9ybURhdGEgPSBleHRyYWN0VW5pZm9ybXMoZ2wsIHRoaXMucHJvZ3JhbSk7XG5cbiAgICB0aGlzLnVuaWZvcm1zID0gZ2VuZXJhdGVVbmlmb3JtQWNjZXNzT2JqZWN0KCBnbCwgdW5pZm9ybURhdGEgKTtcbn1cblxuU2hhZGVyLnByb3RvdHlwZS5iaW5kID0gZnVuY3Rpb24oKVxue1xuXHR0aGlzLmdsLnVzZVByb2dyYW0odGhpcy5wcm9ncmFtKTtcbn1cblxuU2hhZGVyLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24oKVxue1xuXHR2YXIgZ2wgPSB0aGlzLmdsO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IFNoYWRlcjtcblxuIiwiXG4vKipcbiAqIEhlbHBlciBjbGFzcyB0byBjcmVhdGUgYSB3ZWJHTCBUZXh0dXJlXG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIGdsIHtXZWJHTFJlbmRlcmluZ0NvbnRleHR9IGEgV2ViR0wgY29udGV4dFxuICogQHBhcmFtIHdpZHRoIHtudW1iZXJ9IHRoZSB3aWR0aCBvZiB0aGUgdGV4dHVyZSBcbiAqIEBwYXJhbSBoZWlnaHQge251bWJlcn0gdGhlIGhlaWdodCBvZiB0aGUgdGV4dHVyZSBcbiAqIEBwYXJhbSBmb3JtYXQge251bWJlcn0gdGhlIHBpeGVsIGZvcm1hdCBvZiB0aGUgdGV4dHVyZS4gZGVmYXVsdHMgdG8gZ2wuUkdCQVxuICogQHBhcmFtIHR5cGUge251bWJlcn0gdGhlIGdsIHR5cGUgb2YgdGhlIHRleHR1cmUuIGRlZmF1bHRzIHRvIGdsLlVOU0lHTkVEX0JZVEVcbiAqL1xudmFyIFRleHR1cmUgPSBmdW5jdGlvbihnbCwgd2lkdGgsIGhlaWdodCwgZm9ybWF0LCB0eXBlKVxue1xuXHR0aGlzLmdsID0gZ2w7XG5cblx0dGhpcy50ZXh0dXJlID0gZ2wuY3JlYXRlVGV4dHVyZSgpO1xuXG5cdC8vIHNvbWUgc2V0dGluZ3MuLlxuXHR0aGlzLm1pcG1hcCA9IGZhbHNlO1xuXG5cdHRoaXMucHJlbXVsdGlwbHlBbHBoYSA9IGZhbHNlO1xuXG5cdHRoaXMud2lkdGggPSB3aWR0aCB8fCAwO1xuXHR0aGlzLmhlaWdodCA9IGhlaWdodCB8fCAwO1xuXG5cdHRoaXMuZm9ybWF0ID0gZm9ybWF0IHx8IGdsLlJHQkE7XG5cdHRoaXMudHlwZSA9IHR5cGUgfHwgZ2wuVU5TSUdORURfQllURTtcblxuXG59XG5cbi8qKlxuICogQHBhcmFtIHtQSVhJLmdsQ29yZS5UZXh0dXJlfSBbdmFybmFtZV0gW2Rlc2NyaXB0aW9uXVxuICovXG5UZXh0dXJlLnByb3RvdHlwZS51cGxvYWQgPSBmdW5jdGlvbihzb3VyY2UpXG57XG5cdHRoaXMuYmluZCgpO1xuXG5cdHZhciBnbCA9IHRoaXMuZ2w7XG5cblx0dGhpcy53aWR0aCA9IHNvdXJjZS53aWR0aDtcblx0dGhpcy5oZWlnaHQgPSBzb3VyY2UuaGVpZ2h0O1xuXG5cdGdsLnBpeGVsU3RvcmVpKGdsLlVOUEFDS19QUkVNVUxUSVBMWV9BTFBIQV9XRUJHTCwgdGhpcy5wcmVtdWx0aXBseUFscGhhKTtcbiAgICBnbC50ZXhJbWFnZTJEKGdsLlRFWFRVUkVfMkQsIDAsIHRoaXMuZm9ybWF0LCB0aGlzLmZvcm1hdCwgdGhpcy50eXBlLCBzb3VyY2UpO1xufVxuXG52YXIgRkxPQVRJTkdfUE9JTlRfQVZBSUxBQkxFID0gZmFsc2U7XG5cblRleHR1cmUucHJvdG90eXBlLnVwbG9hZERhdGEgPSBmdW5jdGlvbihkYXRhLCB3aWR0aCwgaGVpZ2h0KVxue1xuXHR0aGlzLmJpbmQoKTtcblx0XG5cdHRoaXMud2lkdGggPSB3aWR0aCB8fCB0aGlzLndpZHRoO1xuXHR0aGlzLmhlaWdodCA9IGhlaWdodCB8fCB0aGlzLmhlaWdodDtcblxuXHRpZihkYXRhIGluc3RhbmNlb2YgRmxvYXQzMkFycmF5KVxuXHR7XG5cdFx0aWYoIUZMT0FUSU5HX1BPSU5UX0FWQUlMQUJMRSlcblx0XHR7XG5cdFx0XHR2YXIgZXh0ID0gZ2wuZ2V0RXh0ZW5zaW9uKFwiT0VTX3RleHR1cmVfZmxvYXRcIik7XG5cdFx0XHRcblx0XHRcdGlmKGV4dClcblx0XHRcdHtcblx0XHRcdFx0RkxPQVRJTkdfUE9JTlRfQVZBSUxBQkxFID0gdHJ1ZTtcblx0XHRcdH1cblx0XHRcdGVsc2Vcblx0XHRcdHtcblx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKCdmbG9hdGluZyBwb2ludCB0ZXh0dXJlcyBub3QgYXZhaWxhYmxlJyk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0dGhpcy50eXBlID0gZ2wuRkxPQVQ7XG5cdH1cblx0ZWxzZVxuXHR7XG5cdFx0Ly8gVE9ETyBzdXBwb3J0IGZvciBvdGhlciB0eXBlc1xuXHRcdHRoaXMudHlwZSA9IGdsLlVOU0lHTkVEX0JZVEU7XG5cdH1cblxuXHQvLyB3aGF0IHR5cGUgb2YgZGF0YT9cblx0Z2wucGl4ZWxTdG9yZWkoZ2wuVU5QQUNLX1BSRU1VTFRJUExZX0FMUEhBX1dFQkdMLCB0aGlzLnByZW11bHRpcGx5QWxwaGEpO1xuXHRnbC50ZXhJbWFnZTJEKGdsLlRFWFRVUkVfMkQsIDAsIHRoaXMuZm9ybWF0LCAgdGhpcy53aWR0aCwgdGhpcy5oZWlnaHQsIDAsIHRoaXMuZm9ybWF0LCB0aGlzLnR5cGUsIGRhdGEgfHwgbnVsbCk7XG5cbn1cblxuVGV4dHVyZS5wcm90b3R5cGUuYmluZCA9IGZ1bmN0aW9uKGxvY2F0aW9uKVxue1xuXHR2YXIgZ2wgPSB0aGlzLmdsO1xuXG5cdGlmKGxvY2F0aW9uICE9PSB1bmRlZmluZWQpXG5cdHtcblx0XHRnbC5hY3RpdmVUZXh0dXJlKGdsLlRFWFRVUkUwICsgbG9jYXRpb24pO1xuXHR9XG5cblx0Z2wuYmluZFRleHR1cmUoZ2wuVEVYVFVSRV8yRCwgdGhpcy50ZXh0dXJlKTtcbn1cblxuVGV4dHVyZS5wcm90b3R5cGUudW5iaW5kID0gZnVuY3Rpb24oKVxue1xuXHR2YXIgZ2wgPSB0aGlzLmdsO1xuXHRnbC5iaW5kVGV4dHVyZShnbC5URVhUVVJFXzJELCBudWxsKTtcbn1cblxuVGV4dHVyZS5wcm90b3R5cGUubWluRmlsdGVyID0gZnVuY3Rpb24oIGxpbmVhciApXG57XG5cdHZhciBnbCA9IHRoaXMuZ2w7XG5cblx0dGhpcy5iaW5kKCk7XG5cblx0aWYodGhpcy5taXBtYXApXG5cdHtcblx0XHRnbC50ZXhQYXJhbWV0ZXJpKGdsLlRFWFRVUkVfMkQsIGdsLlRFWFRVUkVfTUlOX0ZJTFRFUiwgbGluZWFyID8gZ2wuTElORUFSX01JUE1BUF9MSU5FQVIgOiBnbC5ORUFSRVNUX01JUE1BUF9ORUFSRVNUKTtcblx0fVxuXHRlbHNlXG5cdHtcblx0XHRnbC50ZXhQYXJhbWV0ZXJpKGdsLlRFWFRVUkVfMkQsIGdsLlRFWFRVUkVfTUlOX0ZJTFRFUiwgbGluZWFyID8gZ2wuTElORUFSIDogZ2wuTkVBUkVTVCk7XG5cdH1cdFxufVxuXG5UZXh0dXJlLnByb3RvdHlwZS5tYWdGaWx0ZXIgPSBmdW5jdGlvbiggbGluZWFyIClcbntcblx0dmFyIGdsID0gdGhpcy5nbDtcblxuXHR0aGlzLmJpbmQoKTtcblxuXHRnbC50ZXhQYXJhbWV0ZXJpKGdsLlRFWFRVUkVfMkQsIGdsLlRFWFRVUkVfTUFHX0ZJTFRFUiwgbGluZWFyID8gZ2wuTElORUFSIDogZ2wuTkVBUkVTVCk7XG59XG5cblRleHR1cmUucHJvdG90eXBlLmVuYWJsZU1pcG1hcCA9IGZ1bmN0aW9uKClcbntcblx0dGhpcy5iaW5kKCk7XG5cblx0dGhpcy5taXBtYXAgPSB0cnVlO1xuXHRnbC5nZW5lcmF0ZU1pcG1hcChnbC5URVhUVVJFXzJEKTtcbn1cblxuVGV4dHVyZS5wcm90b3R5cGUuZW5hYmxlTGluZWFyU2NhbGluZyA9IGZ1bmN0aW9uKClcbntcblx0dGhpcy5taW5GaWx0ZXIodHJ1ZSk7XG5cdHRoaXMubWFnRmlsdGVyKHRydWUpO1xufVxuXG5UZXh0dXJlLnByb3RvdHlwZS5lbmFibGVOZWFyZXN0U2NhbGluZyA9IGZ1bmN0aW9uKClcbntcblx0dGhpcy5taW5GaWx0ZXIoZmFsc2UpO1xuXHR0aGlzLm1hZ0ZpbHRlcihmYWxzZSk7XG59XG5cblRleHR1cmUucHJvdG90eXBlLmVuYWJsZVdyYXBDbGFtcCA9IGZ1bmN0aW9uKClcbntcblx0dmFyIGdsID0gdGhpcy5nbDtcblxuXHR0aGlzLmJpbmQoKTtcblxuXHRnbC50ZXhQYXJhbWV0ZXJpKGdsLlRFWFRVUkVfMkQsIGdsLlRFWFRVUkVfV1JBUF9TLCBnbC5DTEFNUF9UT19FREdFKTtcbiAgICBnbC50ZXhQYXJhbWV0ZXJpKGdsLlRFWFRVUkVfMkQsIGdsLlRFWFRVUkVfV1JBUF9ULCBnbC5DTEFNUF9UT19FREdFKTtcbn1cblxuVGV4dHVyZS5wcm90b3R5cGUuZW5hYmxlV3JhcFJlcGVhdCA9IGZ1bmN0aW9uKClcbntcblx0dmFyIGdsID0gdGhpcy5nbDtcblxuXHR0aGlzLmJpbmQoKTtcblx0XG5cdGdsLnRleFBhcmFtZXRlcmkoZ2wuVEVYVFVSRV8yRCwgZ2wuVEVYVFVSRV9XUkFQX1MsIGdsLlJFUEVBVCk7XG4gICAgZ2wudGV4UGFyYW1ldGVyaShnbC5URVhUVVJFXzJELCBnbC5URVhUVVJFX1dSQVBfVCwgZ2wuUkVQRUFUKTtcbn1cblxuVGV4dHVyZS5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uKClcbntcblx0dmFyIGdsID0gdGhpcy5nbDtcblx0Ly9UT0RPXG5cdGdsLmRlbGV0ZVRleHR1cmUodGhpcy50ZXh0dXJlKTtcbn1cblxuLy9UZXh0dXJlLlxuVGV4dHVyZS5mcm9tU291cmNlID0gZnVuY3Rpb24oZ2wsIHNvdXJjZSwgcHJlbXVsdGlwbHlBbHBoYSlcbntcblx0dmFyIHRleHR1cmUgPSBuZXcgVGV4dHVyZShnbCk7XG5cdHRleHR1cmUucHJlbXVsdGlwbHlBbHBoYSA9IHByZW11bHRpcGx5QWxwaGEgfHwgZmFsc2U7XG5cdHRleHR1cmUudXBsb2FkKHNvdXJjZSk7XG5cblx0cmV0dXJuIHRleHR1cmU7XG59XG5cblRleHR1cmUuZnJvbURhdGEgPSBmdW5jdGlvbihnbCwgZGF0YSwgd2lkdGgsIGhlaWdodClcbntcblx0Ly9jb25zb2xlLmxvZyhkYXRhLCB3aWR0aCwgaGVpZ2h0KTtcblx0dmFyIHRleHR1cmUgPSBuZXcgVGV4dHVyZShnbCk7XG5cdHRleHR1cmUudXBsb2FkRGF0YShkYXRhLCB3aWR0aCwgaGVpZ2h0KTtcblxuXHRyZXR1cm4gdGV4dHVyZTtcbn1cblxuXG5tb2R1bGUuZXhwb3J0cyA9IFRleHR1cmU7XG5cbiIsIlxuLyoqXG4gKiBHZW5lcmljIE1hc2sgU3RhY2sgZGF0YSBzdHJ1Y3R1cmVcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqL1xuXG4vLyBzdGF0ZSBvYmplY3QvL1xuXG5cbmZ1bmN0aW9uIFZlcnRleEFycmF5T2JqZWN0KGdsKVxue1xuXHRcblx0dGhpcy5uYXRpdmVWYW9FeHRlbnNpb24gPSAoXG4gICAgICBnbC5nZXRFeHRlbnNpb24oJ09FU192ZXJ0ZXhfYXJyYXlfb2JqZWN0JykgfHxcbiAgICAgIGdsLmdldEV4dGVuc2lvbignTU9aX09FU192ZXJ0ZXhfYXJyYXlfb2JqZWN0JykgfHxcbiAgICAgIGdsLmdldEV4dGVuc2lvbignV0VCS0lUX09FU192ZXJ0ZXhfYXJyYXlfb2JqZWN0JylcbiAgICApO1xuXG4vL1x0dGhpcy5uYXRpdmVWYW9FeHRlbnNpb24gPSBudWxsO1xuXG5cdGlmKHRoaXMubmF0aXZlVmFvRXh0ZW5zaW9uKVxuXHR7XG5cdFx0dGhpcy5uYXRpdmVWYW8gPSB0aGlzLm5hdGl2ZVZhb0V4dGVuc2lvbi5jcmVhdGVWZXJ0ZXhBcnJheU9FUygpOyAgXG5cdH1cblxuXHR0aGlzLmdsID0gZ2w7XG5cblx0dGhpcy5hdHRyaWJ1dGVzID0gW107XG5cblx0dGhpcy5pbmRleEJ1ZmZlciA9IG51bGw7XG5cblx0dGhpcy5kaXJ0eSA9IGZhbHNlO1xuXG5cdFxufVxuXG5WZXJ0ZXhBcnJheU9iamVjdC5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBWZXJ0ZXhBcnJheU9iamVjdDtcbm1vZHVsZS5leHBvcnRzID0gVmVydGV4QXJyYXlPYmplY3Q7XG5cblZlcnRleEFycmF5T2JqZWN0LnByb3RvdHlwZS5iaW5kID0gZnVuY3Rpb24oKVxue1xuXHRpZih0aGlzLm5hdGl2ZVZhbylcblx0e1xuXHRcdHRoaXMubmF0aXZlVmFvRXh0ZW5zaW9uLmJpbmRWZXJ0ZXhBcnJheU9FUyh0aGlzLm5hdGl2ZVZhbyk7ICBcblxuXHRcdGlmKHRoaXMuZGlydHkpXG5cdFx0e1xuXHRcdFx0dGhpcy5kaXJ0eSA9IGZhbHNlO1xuXHRcdFx0dGhpcy5hY3RpdmF0ZSgpO1xuXHRcdH1cblx0fVxuXHRlbHNlXG5cdHtcblx0XHR0aGlzLmFjdGl2YXRlKCk7XG5cdH1cbn1cblxuVmVydGV4QXJyYXlPYmplY3QucHJvdG90eXBlLnVuYmluZCA9IGZ1bmN0aW9uKClcbntcblx0aWYodGhpcy5uYXRpdmVWYW8pXG5cdHtcblx0XHR0aGlzLm5hdGl2ZVZhb0V4dGVuc2lvbi5iaW5kVmVydGV4QXJyYXlPRVMobnVsbCk7XG5cdH1cbn1cblxuVmVydGV4QXJyYXlPYmplY3QucHJvdG90eXBlLmFjdGl2YXRlID0gZnVuY3Rpb24oKVxue1xuXHR2YXIgZ2wgPSB0aGlzLmdsO1xuXG5cdGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5hdHRyaWJ1dGVzLmxlbmd0aDsgaSsrKSBcblx0e1xuXHRcdHZhciBhdHRyaWIgPSB0aGlzLmF0dHJpYnV0ZXNbaV07XG5cdFx0YXR0cmliLmJ1ZmZlci5iaW5kKCk7XHRcblxuXHRcdGF0dHJpYi5hdHRyaWJ1dGUucG9pbnRlcihhdHRyaWIudHlwZSwgYXR0cmliLm5vcm1hbGl6ZWQsIGF0dHJpYi5zdHJpZGUsIGF0dHJpYi5zdGFydCk7IFxuXHRcdFxuXHRcdGdsLmVuYWJsZVZlcnRleEF0dHJpYkFycmF5KGF0dHJpYi5hdHRyaWJ1dGUubG9jYXRpb24pO1xuXHR9O1xuXG5cdHRoaXMuaW5kZXhCdWZmZXIuYmluZCgpO1xufVxuXG5WZXJ0ZXhBcnJheU9iamVjdC5wcm90b3R5cGUuYWRkQXR0cmlidXRlID0gZnVuY3Rpb24oYnVmZmVyLCBhdHRyaWJ1dGUsIHR5cGUsIG5vcm1hbGl6ZWQsIHN0cmlkZSwgc3RhcnQpXG57XG4gICAgdGhpcy5hdHRyaWJ1dGVzLnB1c2goe1xuICAgIFx0YnVmZmVyOiBcdGJ1ZmZlcixcbiAgICBcdGF0dHJpYnV0ZTogXHRhdHRyaWJ1dGUsXG5cbiAgICBcdGxvY2F0aW9uOiBcdGF0dHJpYnV0ZS5sb2NhdGlvbixcblx0IFx0dHlwZTogXHRcdHR5cGUgfHwgdGhpcy5nbC5GTE9BVCxcblx0IFx0bm9ybWFsaXplZDogbm9ybWFsaXplZCB8fCBmYWxzZSxcblx0IFx0c3RyaWRlOiBcdHN0cmlkZSB8fCAwLFxuXHQgXHRzdGFydDogXHRcdHN0YXJ0IHx8IDBcblx0fSlcblxuXHR0aGlzLmRpcnR5ID0gdHJ1ZTtcbn1cblxuXG5WZXJ0ZXhBcnJheU9iamVjdC5wcm90b3R5cGUuYWRkSW5kZXggPSBmdW5jdGlvbihidWZmZXIsIG9wdGlvbnMpXG57XG4gICAgdGhpcy5pbmRleEJ1ZmZlciA9IGJ1ZmZlcjtcblxuICAgIHRoaXMuZGlydHkgPSB0cnVlO1xufVxuXG5WZXJ0ZXhBcnJheU9iamVjdC5wcm90b3R5cGUuZHJhdyA9IGZ1bmN0aW9uKHR5cGUsIHNpemUsIHN0YXJ0KVxue1xuXHR2YXIgZ2wgPSB0aGlzLmdsO1xuXHRnbC5kcmF3RWxlbWVudHModHlwZSwgc2l6ZSwgZ2wuVU5TSUdORURfU0hPUlQsIHN0YXJ0KTtcbn1cblxuIiwiXG4vKipcbiAqIEhlbHBlciBjbGFzcyB0byBjcmVhdGUgYSB3ZWJHTCBDb250ZXh0XG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIGdsIHtXZWJHTFJlbmRlcmluZ0NvbnRleHR9XG4gKi9cblxudmFyIENPTlRFWFRfVUlEID0gMDtcblxudmFyIGNyZWF0ZUNvbnRleHQgPSBmdW5jdGlvbihjYW52YXMsIG9wdGlvbnMpXG57XG4gICAgZ2wgPSBjYW52YXMuZ2V0Q29udGV4dCgnd2ViZ2wnLCBvcHRpb25zKSB8fCBcbiAgICBcdCBjYW52YXMuZ2V0Q29udGV4dCgnZXhwZXJpbWVudGFsLXdlYmdsJywgb3B0aW9ucyk7XG5cbiAgICBpZiAoIWdsKVxuICAgIHtcbiAgICAgICAgLy8gZmFpbCwgbm90IGFibGUgdG8gZ2V0IGEgY29udGV4dFxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RoaXMgYnJvd3NlciBkb2VzIG5vdCBzdXBwb3J0IHdlYkdMLiBUcnkgdXNpbmcgdGhlIGNhbnZhcyByZW5kZXJlcicpO1xuICAgIH1cblxuICAgIC8vIG1pZ2h0IHdhbnQgdG8gcGhhc2UgdGhpcyBvdXQ/XG4gICAgZ2wuaWQgPSBDT05URVhUX1VJRCsrO1xuXG4gICAgcmV0dXJuIGdsO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGNyZWF0ZUNvbnRleHQ7XG5cbiIsIi8qKlxuICogR2VuZXJpYyBNYXNrIFN0YWNrIGRhdGEgc3RydWN0dXJlXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKi9cblxudmFyIEdMX01BUCA9IHt9O1xuXG5cbnZhciBzZXRWZXJ0ZXhBdHRyaWJBcnJheXMgPSBmdW5jdGlvbiAoZ2wsIGF0dHJpYnMpXG57XHRcbiAgIC8vIGNvbnNvbGUubG9nKGdsLmlkKVxuICAgIHZhciBkYXRhID0gR0xfTUFQW2dsLmlkXTtcblxuICAgIGlmKCFkYXRhKVxuICAgIHtcblx0ICAgdmFyIG1heEF0dHJpYnMgPSBnbC5nZXRQYXJhbWV0ZXIoZ2wuTUFYX1ZFUlRFWF9BVFRSSUJTKTtcblx0XHRkYXRhID0gR0xfTUFQW2dsLmlkXSA9IHt0ZW1wQXR0cmliU3RhdGU6bmV3IEFycmF5KG1heEF0dHJpYnMpXG5cdFx0XHRcdCBcdCBcdFx0ICAgLGF0dHJpYlN0YXRlOm5ldyBBcnJheShtYXhBdHRyaWJzKX07XG5cdH1cblx0XG4gICAgdmFyIGksXG4gICAgXHR0ZW1wQXR0cmliU3RhdGUgPSBkYXRhLnRlbXBBdHRyaWJTdGF0ZSxcbiAgICBcdGF0dHJpYlN0YXRlID0gZGF0YS5hdHRyaWJTdGF0ZTtcblxuICAgIGZvciAoaSA9IDA7IGkgPCB0ZW1wQXR0cmliU3RhdGUubGVuZ3RoOyBpKyspXG4gICAge1xuICAgICAgICB0ZW1wQXR0cmliU3RhdGVbaV0gPSBmYWxzZTtcbiAgICB9XG5cbiAgICAvLyBzZXQgdGhlIG5ldyBhdHRyaWJzXG4gICAgZm9yIChpIGluIGF0dHJpYnMpXG4gICAge1xuICAgICAgICB0ZW1wQXR0cmliU3RhdGVbYXR0cmlic1tpXS5sb2NhdGlvbl0gPSB0cnVlO1xuICAgIH1cblxuICAgIGZvciAoaSA9IDE7IGkgPCBhdHRyaWJTdGF0ZS5sZW5ndGg7IGkrKylcbiAgICB7XG4gICAgICAgIGlmIChhdHRyaWJTdGF0ZVtpXSAhPT0gdGVtcEF0dHJpYlN0YXRlW2ldKVxuICAgICAgICB7XG4gICAgICAgICAgICBhdHRyaWJTdGF0ZVtpXSA9IHRlbXBBdHRyaWJTdGF0ZVtpXTtcblxuICAgICAgICAgICAgaWYgKGRhdGEuYXR0cmliU3RhdGVbaV0pXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgZ2wuZW5hYmxlVmVydGV4QXR0cmliQXJyYXkoaSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgZ2wuZGlzYWJsZVZlcnRleEF0dHJpYkFycmF5KGkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxufTtcblxubW9kdWxlLmV4cG9ydHMgPSBzZXRWZXJ0ZXhBdHRyaWJBcnJheXM7IiwiXG5cblxuXG5jb21waWxlUHJvZ3JhbSA9IGZ1bmN0aW9uKGdsLCB2ZXJ0ZXhTcmMsIGZyYWdtZW50U3JjKVxue1xuICAgIHZhciBnbFZlcnRTaGFkZXIgPSBjb21waWxlU2hhZGVyKGdsLCBnbC5WRVJURVhfU0hBREVSLCB2ZXJ0ZXhTcmMpO1xuICAgIHZhciBnbEZyYWdTaGFkZXIgPSBjb21waWxlU2hhZGVyKGdsLCBnbC5GUkFHTUVOVF9TSEFERVIsIGZyYWdtZW50U3JjKTtcblxuICAgIHZhciBwcm9ncmFtID0gZ2wuY3JlYXRlUHJvZ3JhbSgpO1xuXG4gICAgZ2wuYXR0YWNoU2hhZGVyKHByb2dyYW0sIGdsVmVydFNoYWRlcik7XG4gICAgZ2wuYXR0YWNoU2hhZGVyKHByb2dyYW0sIGdsRnJhZ1NoYWRlcik7XG4gICAgZ2wubGlua1Byb2dyYW0ocHJvZ3JhbSk7XG5cbiAgICAvLyBpZiBsaW5raW5nIGZhaWxzLCB0aGVuIGxvZyBhbmQgY2xlYW51cFxuICAgIGlmICghZ2wuZ2V0UHJvZ3JhbVBhcmFtZXRlcihwcm9ncmFtLCBnbC5MSU5LX1NUQVRVUykpXG4gICAge1xuICAgICAgICBjb25zb2xlLmVycm9yKCdQaXhpLmpzIEVycm9yOiBDb3VsZCBub3QgaW5pdGlhbGl6ZSBzaGFkZXIuJyk7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ2dsLlZBTElEQVRFX1NUQVRVUycsIGdsLmdldFByb2dyYW1QYXJhbWV0ZXIocHJvZ3JhbSwgZ2wuVkFMSURBVEVfU1RBVFVTKSk7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ2dsLmdldEVycm9yKCknLCBnbC5nZXRFcnJvcigpKTtcblxuICAgICAgICAvLyBpZiB0aGVyZSBpcyBhIHByb2dyYW0gaW5mbyBsb2csIGxvZyBpdFxuICAgICAgICBpZiAoZ2wuZ2V0UHJvZ3JhbUluZm9Mb2cocHJvZ3JhbSkgIT09ICcnKVxuICAgICAgICB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ1BpeGkuanMgV2FybmluZzogZ2wuZ2V0UHJvZ3JhbUluZm9Mb2coKScsIGdsLmdldFByb2dyYW1JbmZvTG9nKHByb2dyYW0pKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGdsLmRlbGV0ZVByb2dyYW0ocHJvZ3JhbSk7XG4gICAgICAgIHByb2dyYW0gPSBudWxsO1xuICAgIH1cblxuICAgIC8vIGNsZWFuIHVwIHNvbWUgc2hhZGVyc1xuICAgIGdsLmRlbGV0ZVNoYWRlcihnbFZlcnRTaGFkZXIpO1xuICAgIGdsLmRlbGV0ZVNoYWRlcihnbEZyYWdTaGFkZXIpO1xuXG4gICAgcmV0dXJuIHByb2dyYW07XG59XG5cbnZhciBjb21waWxlU2hhZGVyID0gZnVuY3Rpb24gKGdsLCB0eXBlLCBzcmMpXG57XG4gICAgdmFyIHNoYWRlciA9IGdsLmNyZWF0ZVNoYWRlcih0eXBlKTtcblxuICAgIGdsLnNoYWRlclNvdXJjZShzaGFkZXIsIHNyYyk7XG4gICAgZ2wuY29tcGlsZVNoYWRlcihzaGFkZXIpO1xuXG4gICAgaWYgKCFnbC5nZXRTaGFkZXJQYXJhbWV0ZXIoc2hhZGVyLCBnbC5DT01QSUxFX1NUQVRVUykpXG4gICAge1xuICAgICAgICBjb25zb2xlLmxvZyhnbC5nZXRTaGFkZXJJbmZvTG9nKHNoYWRlcikpO1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICByZXR1cm4gc2hhZGVyO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBjb21waWxlUHJvZ3JhbTtcblxuIiwiXG5cbnZhciBkZWZhdWx0VmFsdWUgPSBmdW5jdGlvbih0eXBlLCBzaXplKSBcbntcbiAgICBzd2l0Y2ggKHR5cGUpXG4gICAge1xuICAgICAgICBjYXNlICdmbG9hdCc6XG4gICAgICAgICAgICByZXR1cm4gMDtcblxuICAgICAgICBjYXNlICd2ZWMyJzogXG4gICAgICAgICAgICByZXR1cm4gbmV3IEZsb2F0MzJBcnJheSgyICogc2l6ZSk7XG5cbiAgICAgICAgY2FzZSAndmVjMyc6XG4gICAgICAgICAgICByZXR1cm4gbmV3IEZsb2F0MzJBcnJheSgzICogc2l6ZSk7XG5cbiAgICAgICAgY2FzZSAndmVjNCc6ICAgICBcbiAgICAgICAgICAgIHJldHVybiBuZXcgRmxvYXQzMkFycmF5KDQgKiBzaXplKTtcbiAgICAgICAgICAgIFxuICAgICAgICBjYXNlICdpbnQnOlxuICAgICAgICBjYXNlICdzYW1wbGVyMkQnOlxuICAgICAgICAgICAgcmV0dXJuIDA7XG5cbiAgICAgICAgY2FzZSAnaXZlYzInOiAgIFxuICAgICAgICAgICAgcmV0dXJuIG5ldyBJbnQzMkFycmF5KDIgKiBzaXplKTtcblxuICAgICAgICBjYXNlICdpdmVjMyc6XG4gICAgICAgICAgICByZXR1cm4gbmV3IEludDMyQXJyYXkoMyAqIHNpemUpO1xuXG4gICAgICAgIGNhc2UgJ2l2ZWM0JzogXG4gICAgICAgICAgICByZXR1cm4gbmV3IEludDMyQXJyYXkoNCAqIHNpemUpO1xuXG4gICAgICAgIGNhc2UgJ2Jvb2wnOiAgICAgXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG5cbiAgICAgICAgY2FzZSAnYnZlYzInOlxuXG4gICAgICAgICAgICByZXR1cm4gYm9vbGVhbkFycmF5KCAyICogc2l6ZSk7XG5cbiAgICAgICAgY2FzZSAnYnZlYzMnOlxuICAgICAgICAgICAgcmV0dXJuIGJvb2xlYW5BcnJheSgzICogc2l6ZSk7XG5cbiAgICAgICAgY2FzZSAnYnZlYzQnOlxuICAgICAgICAgICAgcmV0dXJuIGJvb2xlYW5BcnJheSg0ICogc2l6ZSk7XG5cbiAgICAgICAgY2FzZSAnbWF0Mic6XG4gICAgICAgICAgICByZXR1cm4gbmV3IEZsb2F0MzJBcnJheShbMSwgMFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLDAsIDFdKTtcblxuICAgICAgICBjYXNlICdtYXQzJzogXG4gICAgICAgICAgICByZXR1cm4gbmV3IEZsb2F0MzJBcnJheShbMSwgMCwgMFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLDAsIDEsIDBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwwLCAwLCAxXSk7XG5cbiAgICAgICAgY2FzZSAnbWF0NCc6XG4gICAgICAgICAgICByZXR1cm4gbmV3IEZsb2F0MzJBcnJheShbMSwgMCwgMCwgMFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLDAsIDEsIDAsIDBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwwLCAwLCAxLCAwXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsMCwgMCwgMCwgMV0pO1xuICAgIH1cbn1cblxudmFyIGJvb2xlYW5BcnJheSA9IGZ1bmN0aW9uKHNpemUpXG57XG4gICAgdmFyIGFycmF5ID0gbmV3IEFycmF5KHNpemUpO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcnJheS5sZW5ndGg7IGkrKykgXG4gICAge1xuICAgICAgICBhcnJheVtpXSA9IGZhbHNlO1xuICAgIH07XG5cbiAgICByZXR1cm4gYXJyYXk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZGVmYXVsdFZhbHVlO1xuIiwiXG52YXIgbWFwVHlwZSA9IHJlcXVpcmUoJy4vbWFwVHlwZScpO1xudmFyIG1hcFNpemUgPSByZXF1aXJlKCcuL21hcFNpemUnKTtcblxudmFyIGV4dHJhY3RBdHRyaWJ1dGVzID0gZnVuY3Rpb24oZ2wsIHByb2dyYW0pXG57XG4gICAgdmFyIGF0dHJpYnV0ZXMgPSB7fTtcblxuICAgIHZhciB0b3RhbEF0dHJpYnV0ZXMgPSBnbC5nZXRQcm9ncmFtUGFyYW1ldGVyKHByb2dyYW0sIGdsLkFDVElWRV9BVFRSSUJVVEVTKVxuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0b3RhbEF0dHJpYnV0ZXM7IGkrKykgXG4gICAge1xuICAgICAgICB2YXIgYXR0cmliRGF0YSA9IGdsLmdldEFjdGl2ZUF0dHJpYihwcm9ncmFtLCBpKTtcbiAgICAgICAgdmFyIHR5cGUgPSBtYXBUeXBlKGdsLCBhdHRyaWJEYXRhLnR5cGUpO1xuXG4gICAgICAgIGF0dHJpYnV0ZXNbYXR0cmliRGF0YS5uYW1lXSA9IHtcbiAgICAgICAgICAgIHR5cGU6dHlwZSxcbiAgICAgICAgICAgIHNpemU6bWFwU2l6ZSh0eXBlKSxcbiAgICAgICAgICAgIGxvY2F0aW9uOmdsLmdldEF0dHJpYkxvY2F0aW9uKHByb2dyYW0sIGF0dHJpYkRhdGEubmFtZSksXG4gICAgICAgICAgICAvL1RPRE8gLSBtYWtlIGFuIGF0dHJpYnV0ZSBvYmplY3RcbiAgICAgICAgICAgIHBvaW50ZXI6ZnVuY3Rpb24odHlwZSwgbm9ybWFsaXplZCwgc3RyaWRlLCBzdGFydCl7XG5cbiAgICAgICAgICAgICAvLyAgIGNvbnNvbGUubG9nKHRoaXMubG9jYXRpb24pXG4gICAgICAgICAgICAgICAgZ2wudmVydGV4QXR0cmliUG9pbnRlcih0aGlzLmxvY2F0aW9uLHRoaXMuc2l6ZSwgdHlwZSB8fCBnbC5GTE9BVCwgbm9ybWFsaXplZCB8fCBmYWxzZSwgc3RyaWRlIHx8IDAsIHN0YXJ0IHx8IDApOyBcblxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfTtcblxuICAgIHJldHVybiBhdHRyaWJ1dGVzOyAgXG59XG5cbm1vZHVsZS5leHBvcnRzID0gZXh0cmFjdEF0dHJpYnV0ZXM7XG5cbiIsInZhciBtYXBUeXBlID0gcmVxdWlyZSgnLi9tYXBUeXBlJyk7XG52YXIgZGVmYXVsdFZhbHVlID0gcmVxdWlyZSgnLi9kZWZhdWx0VmFsdWUnKTtcblxuXG52YXIgZXh0cmFjdFVuaWZvcm1zID0gZnVuY3Rpb24oZ2wsIHByb2dyYW0pXG57XG5cdHZhciB1bmlmb3JtcyA9IHt9O1xuXHRcbiAgICB2YXIgdG90YWxVbmlmb3JtcyA9IGdsLmdldFByb2dyYW1QYXJhbWV0ZXIocHJvZ3JhbSwgZ2wuQUNUSVZFX1VOSUZPUk1TKVxuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0b3RhbFVuaWZvcm1zOyBpKyspIFxuICAgIHtcbiAgICBcdHZhciB1bmlmb3JtRGF0YSA9IGdsLmdldEFjdGl2ZVVuaWZvcm0ocHJvZ3JhbSwgaSk7XG4gICAgXHR2YXIgbmFtZSA9IHVuaWZvcm1EYXRhLm5hbWUucmVwbGFjZSgvXFxbLio/XFxdLywgXCJcIik7XG4gICAgICAgIHZhciB0eXBlID0gbWFwVHlwZShnbCwgdW5pZm9ybURhdGEudHlwZSApO1xuXG4gICAgXHR1bmlmb3Jtc1tuYW1lXSA9IHtcbiAgICBcdFx0dHlwZTp0eXBlLFxuICAgIFx0XHRzaXplOnVuaWZvcm1EYXRhLnNpemUsXG4gICAgXHRcdGxvY2F0aW9uOmdsLmdldFVuaWZvcm1Mb2NhdGlvbihwcm9ncmFtLCBuYW1lKSxcbiAgICBcdFx0dmFsdWU6ZGVmYXVsdFZhbHVlKHR5cGUsIHVuaWZvcm1EYXRhLnNpemUpXG4gICAgXHR9XG4gICAgfTtcblx0XG5cdHJldHVybiB1bmlmb3JtcztcdFxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGV4dHJhY3RVbmlmb3JtcztcblxuIiwiXG52YXIgZ2VuZXJhdGVVbmlmb3JtQWNjZXNzT2JqZWN0ID0gZnVuY3Rpb24oZ2wsIHVuaWZvcm1EYXRhKVxue1xuICAgIC8vIHRoaXMgaXMgdGhlIG9iamVjdCB3ZSB3aWxsIGJlIHNlbmRpbmcgYmFjay5cbiAgICAvLyBhbiBvYmplY3QgaGllcmFjaHkgd2lsbCBiZSBjcmVhdGVkIGZvciBzdHJ1Y3RzXG4gICAgdmFyIHVuaWZvcm1zID0ge2RhdGE6e319O1xuXG4gICAgdW5pZm9ybXMuZ2wgPSBnbDtcbiAgICBcbiAgICB2YXIgdW5pZm9ybUtleXM9IE9iamVjdC5rZXlzKHVuaWZvcm1EYXRhKTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdW5pZm9ybUtleXMubGVuZ3RoOyBpKyspIFxuICAgIHtcbiAgICAgICAgdmFyIGZ1bGxOYW1lID0gdW5pZm9ybUtleXNbaV1cblxuICAgICAgICB2YXIgbmFtZVRva2VucyA9IGZ1bGxOYW1lLnNwbGl0KCcuJyk7XG4gICAgICAgIHZhciBuYW1lID0gbmFtZVRva2Vuc1tuYW1lVG9rZW5zLmxlbmd0aCAtIDFdO1xuXG4gICAgICAgIHZhciB1bmlmb3JtR3JvdXAgPSBnZXRVbmlmb3JtR3JvdXAobmFtZVRva2VucywgdW5pZm9ybXMpO1xuXG4gICAgICAgIHZhciB1bmlmb3JtID0gIHVuaWZvcm1EYXRhW2Z1bGxOYW1lXTtcbiAgICAgICAgdW5pZm9ybUdyb3VwLmRhdGFbbmFtZV0gPSB1bmlmb3JtO1xuXG4gICAgICAgIHVuaWZvcm1Hcm91cC5nbCA9IGdsO1xuXG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh1bmlmb3JtR3JvdXAsIG5hbWUsIHtcbiAgICAgICAgICAgIGdldDogZ2VuZXJhdGVHZXR0ZXIobmFtZSksXG4gICAgICAgICAgICBzZXQ6IGdlbmVyYXRlU2V0dGVyKG5hbWUsIHVuaWZvcm0pXG4gICAgICAgIH0pXG4gICAgfTtcblxuICAgIHJldHVybiB1bmlmb3Jtcztcbn1cblxudmFyIGdlbmVyYXRlR2V0dGVyID0gZnVuY3Rpb24obmFtZSlcbntcblx0dmFyIHRlbXBsYXRlID0gZ2V0dGVyVGVtcGxhdGUucmVwbGFjZSgnJSUnLCBuYW1lKTtcblx0cmV0dXJuIG5ldyBGdW5jdGlvbih0ZW1wbGF0ZSk7XG59XG5cbnZhciBnZW5lcmF0ZVNldHRlciA9IGZ1bmN0aW9uKG5hbWUsIHVuaWZvcm0pXG57XG4gICAgdmFyIHRlbXBsYXRlID0gc2V0dGVyVGVtcGxhdGUucmVwbGFjZSgvJSUvZywgbmFtZSk7XG4gICAgdmFyIHNldFRlbXBsYXRlXG4gICAgXG4gICAgaWYodW5pZm9ybS5zaXplID09PSAxKVxuICAgIHtcbiAgICAgICAgc2V0VGVtcGxhdGUgPSBHTFNMX1RPX1NJTkdMRV9TRVRURVJTW3VuaWZvcm0udHlwZV07XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHNldFRlbXBsYXRlID0gR0xTTF9UT19BUlJBWV9TRVRURVJTW3VuaWZvcm0udHlwZV07XG4gICAgfVxuXG4gICAgaWYoc2V0VGVtcGxhdGUpXG4gICAge1xuICAgICAgICB0ZW1wbGF0ZSArPSBcIlxcbnRoaXMuZ2wuXCIgKyBzZXRUZW1wbGF0ZSArIFwiO1wiO1xuICAgIH1cblxuICBcdHJldHVybiBuZXcgRnVuY3Rpb24oJ3ZhbHVlJywgdGVtcGxhdGUpO1xufVxuXG52YXIgZ2V0VW5pZm9ybUdyb3VwID0gZnVuY3Rpb24obmFtZVRva2VucywgdW5pZm9ybSlcbntcbiAgICB2YXIgY3VyID0gdW5pZm9ybTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbmFtZVRva2Vucy5sZW5ndGggLSAxOyBpKyspIFxuICAgIHtcbiAgICAgICAgdmFyIG8gPSBjdXJbbmFtZVRva2Vuc1tpXV0gfHwge2RhdGE6e319O1xuICAgICAgICBjdXJbbmFtZVRva2Vuc1tpXV0gPSBvO1xuICAgICAgICBjdXIgPSBvO1xuICAgIH07XG5cbiAgICByZXR1cm4gY3VyXG59XG5cbnZhciBnZXR0ZXJUZW1wbGF0ZSA9IFtcbiAgICAncmV0dXJuIHRoaXMuZGF0YS4lJS52YWx1ZTsnLFxuXS5qb2luKCdcXG4nKTtcblxudmFyIHNldHRlclRlbXBsYXRlID0gW1xuICAgICd0aGlzLmRhdGEuJSUudmFsdWUgPSB2YWx1ZTsnLFxuICAgICd2YXIgbG9jYXRpb24gPSB0aGlzLmRhdGEuJSUubG9jYXRpb247J1xuXS5qb2luKCdcXG4nKTtcblxuXG52YXIgR0xTTF9UT19TSU5HTEVfU0VUVEVSUyA9IHtcblxuICAgICdmbG9hdCc6ICAgICd1bmlmb3JtMWYobG9jYXRpb24sIHZhbHVlKScsXG5cbiAgICAndmVjMic6ICAgICAndW5pZm9ybTJmKGxvY2F0aW9uLCB2YWx1ZVswXSwgdmFsdWVbMV0pJyxcbiAgICAndmVjMyc6ICAgICAndW5pZm9ybTNmKGxvY2F0aW9uLCB2YWx1ZVswXSwgdmFsdWVbMV0sIHZhbHVlWzJdKScsXG4gICAgJ3ZlYzQnOiAgICAgJ3VuaWZvcm00Zihsb2NhdGlvbiwgdmFsdWVbMF0sIHZhbHVlWzFdLCB2YWx1ZVsyXSwgdmFsdWVbM10pJyxcbiAgICBcdFxuICAgICdpbnQnOiAgICAgICd1bmlmb3JtMWkobG9jYXRpb24sIHZhbHVlKScsXG4gICAgJ2l2ZWMyJzogICAgJ3VuaWZvcm0yaShsb2NhdGlvbiwgdmFsdWVbMF0sIHZhbHVlWzFdKScsXG4gICAgJ2l2ZWMzJzogICAgJ3VuaWZvcm0zaShsb2NhdGlvbiwgdmFsdWVbMF0sIHZhbHVlWzFdLCB2YWx1ZVsyXSknLFxuICAgICdpdmVjNCc6ICAgICd1bmlmb3JtNGkobG9jYXRpb24sIHZhbHVlWzBdLCB2YWx1ZVsxXSwgdmFsdWVbMl0sIHZhbHVlWzNdKScsXG5cbiAgICAnYm9vbCc6ICAgICAndW5pZm9ybTFpKGxvY2F0aW9uLCB2YWx1ZSknLFxuICAgICdidmVjMic6ICAgICd1bmlmb3JtMmkobG9jYXRpb24sIHZhbHVlWzBdLCB2YWx1ZVsxXSknLFxuICAgICdidmVjMyc6ICAgICd1bmlmb3JtM2kobG9jYXRpb24sIHZhbHVlWzBdLCB2YWx1ZVsxXSwgdmFsdWVbMl0pJyxcbiAgICAnYnZlYzQnOiAgICAndW5pZm9ybTRpKGxvY2F0aW9uLCB2YWx1ZVswXSwgdmFsdWVbMV0sIHZhbHVlWzJdLCB2YWx1ZVszXSknLFxuXG4gICAgJ21hdDInOiAgICAgJ3VuaWZvcm1NYXRyaXgyZnYobG9jYXRpb24sIGZhbHNlLCB2YWx1ZSknLFxuICAgICdtYXQzJzogICAgICd1bmlmb3JtTWF0cml4M2Z2KGxvY2F0aW9uLCBmYWxzZSwgdmFsdWUpJyxcbiAgICAnbWF0NCc6ICAgICAndW5pZm9ybU1hdHJpeDRmdihsb2NhdGlvbiwgZmFsc2UsIHZhbHVlKScsXG5cbiAgICAnc2FtcGxlcjJEJzondW5pZm9ybTFpKGxvY2F0aW9uLCB2YWx1ZSknXG59XG5cbnZhciBHTFNMX1RPX0FSUkFZX1NFVFRFUlMgPSB7XG5cbiAgICAnZmxvYXQnOiAgICAndW5pZm9ybTFmdihsb2NhdGlvbiwgdmFsdWUpJyxcblxuICAgICd2ZWMyJzogICAgICd1bmlmb3JtMmZ2KGxvY2F0aW9uLCB2YWx1ZSknLFxuICAgICd2ZWMzJzogICAgICd1bmlmb3JtM2Z2KGxvY2F0aW9uLCB2YWx1ZSknLFxuICAgICd2ZWM0JzogICAgICd1bmlmb3JtNGZ2KGxvY2F0aW9uLCB2YWx1ZSknLFxuICAgIFx0XG4gICAgJ2ludCc6ICAgICAgJ3VuaWZvcm0xaXYobG9jYXRpb24sIHZhbHVlKScsXG4gICAgJ2l2ZWMyJzogICAgJ3VuaWZvcm0yaXYobG9jYXRpb24sIHZhbHVlKScsXG4gICAgJ2l2ZWMzJzogICAgJ3VuaWZvcm0zaXYobG9jYXRpb24sIHZhbHVlKScsXG4gICAgJ2l2ZWM0JzogICAgJ3VuaWZvcm00aXYobG9jYXRpb24sIHZhbHVlKScsXG5cbiAgICAnYm9vbCc6ICAgICAndW5pZm9ybTFpdihsb2NhdGlvbiwgdmFsdWUpJyxcbiAgICAnYnZlYzInOiAgICAndW5pZm9ybTJpdihsb2NhdGlvbiwgdmFsdWUpJyxcbiAgICAnYnZlYzMnOiAgICAndW5pZm9ybTNpdihsb2NhdGlvbiwgdmFsdWUpJyxcbiAgICAnYnZlYzQnOiAgICAndW5pZm9ybTRpdihsb2NhdGlvbiwgdmFsdWUpJyxcbiAgIFxuICAgICdzYW1wbGVyMkQnOid1bmlmb3JtMWl2KGxvY2F0aW9uLCB2YWx1ZSknXG59XG5cbm1vZHVsZS5leHBvcnRzID0gZ2VuZXJhdGVVbmlmb3JtQWNjZXNzT2JqZWN0O1xuXG4iLCJcblxudmFyIG1hcFNpemUgPSBmdW5jdGlvbih0eXBlKSBcbnsgXG4gICAgcmV0dXJuIEdMU0xfVE9fU0laRVt0eXBlXTtcbn1cblxuXG52YXIgR0xTTF9UT19TSVpFID0ge1xuICAgICdmbG9hdCc6ICAgIDEsXG4gICAgJ3ZlYzInOiAgICAgMixcbiAgICAndmVjMyc6ICAgICAzLFxuICAgICd2ZWM0JzogICAgIDQsXG5cbiAgICAnaW50JzogICAgICAxLFxuICAgICdpdmVjMic6ICAgIDIsXG4gICAgJ2l2ZWMzJzogICAgMyxcbiAgICAnaXZlYzQnOiAgICA0LFxuXG4gICAgJ2Jvb2wnOiAgICAgMSxcbiAgICAnYnZlYzInOiAgICAyLFxuICAgICdidmVjMyc6ICAgIDMsXG4gICAgJ2J2ZWM0JzogICAgNCxcblxuICAgICdtYXQyJzogICAgIDQsXG4gICAgJ21hdDMnOiAgICAgOSxcbiAgICAnbWF0NCc6ICAgICAxNixcblxuICAgICdzYW1wbGVyMkQnOiAgMVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IG1hcFNpemU7XG4iLCJcblxudmFyIG1hcFNpemUgPSBmdW5jdGlvbihnbCwgdHlwZSkgXG57XG4gICAgaWYoIUdMX1RBQkxFKSBcbiAgICB7XG4gICAgICAgIHZhciB0eXBlTmFtZXMgPSBPYmplY3Qua2V5cyhHTF9UT19HTFNMX1RZUEVTKTtcblxuICAgICAgICBHTF9UQUJMRSA9IHt9O1xuXG4gICAgICAgIGZvcih2YXIgaSA9IDA7IGkgPCB0eXBlTmFtZXMubGVuZ3RoOyArK2kpIFxuICAgICAgICB7XG4gICAgICAgICAgICB2YXIgdG4gPSB0eXBlTmFtZXNbaV07XG4gICAgICAgICAgICBHTF9UQUJMRVsgZ2xbdG5dIF0gPSBHTF9UT19HTFNMX1RZUEVTW3RuXTtcbiAgICAgICAgfVxuICAgIH1cblxuICByZXR1cm4gR0xfVEFCTEVbdHlwZV07XG59XG5cbnZhciBHTF9UQUJMRSA9IG51bGw7XG5cbnZhciBHTF9UT19HTFNMX1RZUEVTID0ge1xuICAnRkxPQVQnOiAgICAgICAnZmxvYXQnLFxuICAnRkxPQVRfVkVDMic6ICAndmVjMicsXG4gICdGTE9BVF9WRUMzJzogICd2ZWMzJyxcbiAgJ0ZMT0FUX1ZFQzQnOiAgJ3ZlYzQnLFxuXG4gICdJTlQnOiAgICAgICAgICdpbnQnLFxuICAnSU5UX1ZFQzInOiAgICAnaXZlYzInLFxuICAnSU5UX1ZFQzMnOiAgICAnaXZlYzMnLFxuICAnSU5UX1ZFQzQnOiAgICAnaXZlYzQnLFxuICBcbiAgJ0JPT0wnOiAgICAgICAgJ2Jvb2wnLFxuICAnQk9PTF9WRUMyJzogICAnYnZlYzInLFxuICAnQk9PTF9WRUMzJzogICAnYnZlYzMnLFxuICAnQk9PTF9WRUM0JzogICAnYnZlYzQnLFxuICBcbiAgJ0ZMT0FUX01BVDInOiAgJ21hdDInLFxuICAnRkxPQVRfTUFUMyc6ICAnbWF0MycsXG4gICdGTE9BVF9NQVQ0JzogICdtYXQ0JyxcbiAgXG4gICdTQU1QTEVSXzJEJzogICdzYW1wbGVyMkQnICBcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBtYXBTaXplO1xuIiwiLyohXG4gKiBhc3luY1xuICogaHR0cHM6Ly9naXRodWIuY29tL2Nhb2xhbi9hc3luY1xuICpcbiAqIENvcHlyaWdodCAyMDEwLTIwMTQgQ2FvbGFuIE1jTWFob25cbiAqIFJlbGVhc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZVxuICovXG4oZnVuY3Rpb24gKCkge1xuXG4gICAgdmFyIGFzeW5jID0ge307XG4gICAgZnVuY3Rpb24gbm9vcCgpIHt9XG4gICAgZnVuY3Rpb24gaWRlbnRpdHkodikge1xuICAgICAgICByZXR1cm4gdjtcbiAgICB9XG4gICAgZnVuY3Rpb24gdG9Cb29sKHYpIHtcbiAgICAgICAgcmV0dXJuICEhdjtcbiAgICB9XG4gICAgZnVuY3Rpb24gbm90SWQodikge1xuICAgICAgICByZXR1cm4gIXY7XG4gICAgfVxuXG4gICAgLy8gZ2xvYmFsIG9uIHRoZSBzZXJ2ZXIsIHdpbmRvdyBpbiB0aGUgYnJvd3NlclxuICAgIHZhciBwcmV2aW91c19hc3luYztcblxuICAgIC8vIEVzdGFibGlzaCB0aGUgcm9vdCBvYmplY3QsIGB3aW5kb3dgIChgc2VsZmApIGluIHRoZSBicm93c2VyLCBgZ2xvYmFsYFxuICAgIC8vIG9uIHRoZSBzZXJ2ZXIsIG9yIGB0aGlzYCBpbiBzb21lIHZpcnR1YWwgbWFjaGluZXMuIFdlIHVzZSBgc2VsZmBcbiAgICAvLyBpbnN0ZWFkIG9mIGB3aW5kb3dgIGZvciBgV2ViV29ya2VyYCBzdXBwb3J0LlxuICAgIHZhciByb290ID0gdHlwZW9mIHNlbGYgPT09ICdvYmplY3QnICYmIHNlbGYuc2VsZiA9PT0gc2VsZiAmJiBzZWxmIHx8XG4gICAgICAgICAgICB0eXBlb2YgZ2xvYmFsID09PSAnb2JqZWN0JyAmJiBnbG9iYWwuZ2xvYmFsID09PSBnbG9iYWwgJiYgZ2xvYmFsIHx8XG4gICAgICAgICAgICB0aGlzO1xuXG4gICAgaWYgKHJvb3QgIT0gbnVsbCkge1xuICAgICAgICBwcmV2aW91c19hc3luYyA9IHJvb3QuYXN5bmM7XG4gICAgfVxuXG4gICAgYXN5bmMubm9Db25mbGljdCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcm9vdC5hc3luYyA9IHByZXZpb3VzX2FzeW5jO1xuICAgICAgICByZXR1cm4gYXN5bmM7XG4gICAgfTtcblxuICAgIGZ1bmN0aW9uIG9ubHlfb25jZShmbikge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICBpZiAoZm4gPT09IG51bGwpIHRocm93IG5ldyBFcnJvcihcIkNhbGxiYWNrIHdhcyBhbHJlYWR5IGNhbGxlZC5cIik7XG4gICAgICAgICAgICBmbi5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgICAgICAgICAgZm4gPSBudWxsO1xuICAgICAgICB9O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIF9vbmNlKGZuKSB7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIGlmIChmbiA9PT0gbnVsbCkgcmV0dXJuO1xuICAgICAgICAgICAgZm4uYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICAgICAgICAgIGZuID0gbnVsbDtcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICAvLy8vIGNyb3NzLWJyb3dzZXIgY29tcGF0aWJsaXR5IGZ1bmN0aW9ucyAvLy8vXG5cbiAgICB2YXIgX3RvU3RyaW5nID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZztcblxuICAgIHZhciBfaXNBcnJheSA9IEFycmF5LmlzQXJyYXkgfHwgZnVuY3Rpb24gKG9iaikge1xuICAgICAgICByZXR1cm4gX3RvU3RyaW5nLmNhbGwob2JqKSA9PT0gJ1tvYmplY3QgQXJyYXldJztcbiAgICB9O1xuXG4gICAgLy8gUG9ydGVkIGZyb20gdW5kZXJzY29yZS5qcyBpc09iamVjdFxuICAgIHZhciBfaXNPYmplY3QgPSBmdW5jdGlvbihvYmopIHtcbiAgICAgICAgdmFyIHR5cGUgPSB0eXBlb2Ygb2JqO1xuICAgICAgICByZXR1cm4gdHlwZSA9PT0gJ2Z1bmN0aW9uJyB8fCB0eXBlID09PSAnb2JqZWN0JyAmJiAhIW9iajtcbiAgICB9O1xuXG4gICAgZnVuY3Rpb24gX2lzQXJyYXlMaWtlKGFycikge1xuICAgICAgICByZXR1cm4gX2lzQXJyYXkoYXJyKSB8fCAoXG4gICAgICAgICAgICAvLyBoYXMgYSBwb3NpdGl2ZSBpbnRlZ2VyIGxlbmd0aCBwcm9wZXJ0eVxuICAgICAgICAgICAgdHlwZW9mIGFyci5sZW5ndGggPT09IFwibnVtYmVyXCIgJiZcbiAgICAgICAgICAgIGFyci5sZW5ndGggPj0gMCAmJlxuICAgICAgICAgICAgYXJyLmxlbmd0aCAlIDEgPT09IDBcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBfYXJyYXlFYWNoKGFyciwgaXRlcmF0b3IpIHtcbiAgICAgICAgdmFyIGluZGV4ID0gLTEsXG4gICAgICAgICAgICBsZW5ndGggPSBhcnIubGVuZ3RoO1xuXG4gICAgICAgIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgICAgICAgICBpdGVyYXRvcihhcnJbaW5kZXhdLCBpbmRleCwgYXJyKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIF9tYXAoYXJyLCBpdGVyYXRvcikge1xuICAgICAgICB2YXIgaW5kZXggPSAtMSxcbiAgICAgICAgICAgIGxlbmd0aCA9IGFyci5sZW5ndGgsXG4gICAgICAgICAgICByZXN1bHQgPSBBcnJheShsZW5ndGgpO1xuXG4gICAgICAgIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgICAgICAgICByZXN1bHRbaW5kZXhdID0gaXRlcmF0b3IoYXJyW2luZGV4XSwgaW5kZXgsIGFycik7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBfcmFuZ2UoY291bnQpIHtcbiAgICAgICAgcmV0dXJuIF9tYXAoQXJyYXkoY291bnQpLCBmdW5jdGlvbiAodiwgaSkgeyByZXR1cm4gaTsgfSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gX3JlZHVjZShhcnIsIGl0ZXJhdG9yLCBtZW1vKSB7XG4gICAgICAgIF9hcnJheUVhY2goYXJyLCBmdW5jdGlvbiAoeCwgaSwgYSkge1xuICAgICAgICAgICAgbWVtbyA9IGl0ZXJhdG9yKG1lbW8sIHgsIGksIGEpO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIG1lbW87XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gX2ZvckVhY2hPZihvYmplY3QsIGl0ZXJhdG9yKSB7XG4gICAgICAgIF9hcnJheUVhY2goX2tleXMob2JqZWN0KSwgZnVuY3Rpb24gKGtleSkge1xuICAgICAgICAgICAgaXRlcmF0b3Iob2JqZWN0W2tleV0sIGtleSk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIF9pbmRleE9mKGFyciwgaXRlbSkge1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFyci5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgaWYgKGFycltpXSA9PT0gaXRlbSkgcmV0dXJuIGk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIC0xO1xuICAgIH1cblxuICAgIHZhciBfa2V5cyA9IE9iamVjdC5rZXlzIHx8IGZ1bmN0aW9uIChvYmopIHtcbiAgICAgICAgdmFyIGtleXMgPSBbXTtcbiAgICAgICAgZm9yICh2YXIgayBpbiBvYmopIHtcbiAgICAgICAgICAgIGlmIChvYmouaGFzT3duUHJvcGVydHkoaykpIHtcbiAgICAgICAgICAgICAgICBrZXlzLnB1c2goayk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGtleXM7XG4gICAgfTtcblxuICAgIGZ1bmN0aW9uIF9rZXlJdGVyYXRvcihjb2xsKSB7XG4gICAgICAgIHZhciBpID0gLTE7XG4gICAgICAgIHZhciBsZW47XG4gICAgICAgIHZhciBrZXlzO1xuICAgICAgICBpZiAoX2lzQXJyYXlMaWtlKGNvbGwpKSB7XG4gICAgICAgICAgICBsZW4gPSBjb2xsLmxlbmd0aDtcbiAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbiBuZXh0KCkge1xuICAgICAgICAgICAgICAgIGkrKztcbiAgICAgICAgICAgICAgICByZXR1cm4gaSA8IGxlbiA/IGkgOiBudWxsO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGtleXMgPSBfa2V5cyhjb2xsKTtcbiAgICAgICAgICAgIGxlbiA9IGtleXMubGVuZ3RoO1xuICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIG5leHQoKSB7XG4gICAgICAgICAgICAgICAgaSsrO1xuICAgICAgICAgICAgICAgIHJldHVybiBpIDwgbGVuID8ga2V5c1tpXSA6IG51bGw7XG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gU2ltaWxhciB0byBFUzYncyByZXN0IHBhcmFtIChodHRwOi8vYXJpeWEub2ZpbGFicy5jb20vMjAxMy8wMy9lczYtYW5kLXJlc3QtcGFyYW1ldGVyLmh0bWwpXG4gICAgLy8gVGhpcyBhY2N1bXVsYXRlcyB0aGUgYXJndW1lbnRzIHBhc3NlZCBpbnRvIGFuIGFycmF5LCBhZnRlciBhIGdpdmVuIGluZGV4LlxuICAgIC8vIEZyb20gdW5kZXJzY29yZS5qcyAoaHR0cHM6Ly9naXRodWIuY29tL2phc2hrZW5hcy91bmRlcnNjb3JlL3B1bGwvMjE0MCkuXG4gICAgZnVuY3Rpb24gX3Jlc3RQYXJhbShmdW5jLCBzdGFydEluZGV4KSB7XG4gICAgICAgIHN0YXJ0SW5kZXggPSBzdGFydEluZGV4ID09IG51bGwgPyBmdW5jLmxlbmd0aCAtIDEgOiArc3RhcnRJbmRleDtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgdmFyIGxlbmd0aCA9IE1hdGgubWF4KGFyZ3VtZW50cy5sZW5ndGggLSBzdGFydEluZGV4LCAwKTtcbiAgICAgICAgICAgIHZhciByZXN0ID0gQXJyYXkobGVuZ3RoKTtcbiAgICAgICAgICAgIGZvciAodmFyIGluZGV4ID0gMDsgaW5kZXggPCBsZW5ndGg7IGluZGV4KyspIHtcbiAgICAgICAgICAgICAgICByZXN0W2luZGV4XSA9IGFyZ3VtZW50c1tpbmRleCArIHN0YXJ0SW5kZXhdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgc3dpdGNoIChzdGFydEluZGV4KSB7XG4gICAgICAgICAgICAgICAgY2FzZSAwOiByZXR1cm4gZnVuYy5jYWxsKHRoaXMsIHJlc3QpO1xuICAgICAgICAgICAgICAgIGNhc2UgMTogcmV0dXJuIGZ1bmMuY2FsbCh0aGlzLCBhcmd1bWVudHNbMF0sIHJlc3QpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gQ3VycmVudGx5IHVudXNlZCBidXQgaGFuZGxlIGNhc2VzIG91dHNpZGUgb2YgdGhlIHN3aXRjaCBzdGF0ZW1lbnQ6XG4gICAgICAgICAgICAvLyB2YXIgYXJncyA9IEFycmF5KHN0YXJ0SW5kZXggKyAxKTtcbiAgICAgICAgICAgIC8vIGZvciAoaW5kZXggPSAwOyBpbmRleCA8IHN0YXJ0SW5kZXg7IGluZGV4KyspIHtcbiAgICAgICAgICAgIC8vICAgICBhcmdzW2luZGV4XSA9IGFyZ3VtZW50c1tpbmRleF07XG4gICAgICAgICAgICAvLyB9XG4gICAgICAgICAgICAvLyBhcmdzW3N0YXJ0SW5kZXhdID0gcmVzdDtcbiAgICAgICAgICAgIC8vIHJldHVybiBmdW5jLmFwcGx5KHRoaXMsIGFyZ3MpO1xuICAgICAgICB9O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIF93aXRob3V0SW5kZXgoaXRlcmF0b3IpIHtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICh2YWx1ZSwgaW5kZXgsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICByZXR1cm4gaXRlcmF0b3IodmFsdWUsIGNhbGxiYWNrKTtcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICAvLy8vIGV4cG9ydGVkIGFzeW5jIG1vZHVsZSBmdW5jdGlvbnMgLy8vL1xuXG4gICAgLy8vLyBuZXh0VGljayBpbXBsZW1lbnRhdGlvbiB3aXRoIGJyb3dzZXItY29tcGF0aWJsZSBmYWxsYmFjayAvLy8vXG5cbiAgICAvLyBjYXB0dXJlIHRoZSBnbG9iYWwgcmVmZXJlbmNlIHRvIGd1YXJkIGFnYWluc3QgZmFrZVRpbWVyIG1vY2tzXG4gICAgdmFyIF9zZXRJbW1lZGlhdGUgPSB0eXBlb2Ygc2V0SW1tZWRpYXRlID09PSAnZnVuY3Rpb24nICYmIHNldEltbWVkaWF0ZTtcblxuICAgIHZhciBfZGVsYXkgPSBfc2V0SW1tZWRpYXRlID8gZnVuY3Rpb24oZm4pIHtcbiAgICAgICAgLy8gbm90IGEgZGlyZWN0IGFsaWFzIGZvciBJRTEwIGNvbXBhdGliaWxpdHlcbiAgICAgICAgX3NldEltbWVkaWF0ZShmbik7XG4gICAgfSA6IGZ1bmN0aW9uKGZuKSB7XG4gICAgICAgIHNldFRpbWVvdXQoZm4sIDApO1xuICAgIH07XG5cbiAgICBpZiAodHlwZW9mIHByb2Nlc3MgPT09ICdvYmplY3QnICYmIHR5cGVvZiBwcm9jZXNzLm5leHRUaWNrID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIGFzeW5jLm5leHRUaWNrID0gcHJvY2Vzcy5uZXh0VGljaztcbiAgICB9IGVsc2Uge1xuICAgICAgICBhc3luYy5uZXh0VGljayA9IF9kZWxheTtcbiAgICB9XG4gICAgYXN5bmMuc2V0SW1tZWRpYXRlID0gX3NldEltbWVkaWF0ZSA/IF9kZWxheSA6IGFzeW5jLm5leHRUaWNrO1xuXG5cbiAgICBhc3luYy5mb3JFYWNoID1cbiAgICBhc3luYy5lYWNoID0gZnVuY3Rpb24gKGFyciwgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgIHJldHVybiBhc3luYy5lYWNoT2YoYXJyLCBfd2l0aG91dEluZGV4KGl0ZXJhdG9yKSwgY2FsbGJhY2spO1xuICAgIH07XG5cbiAgICBhc3luYy5mb3JFYWNoU2VyaWVzID1cbiAgICBhc3luYy5lYWNoU2VyaWVzID0gZnVuY3Rpb24gKGFyciwgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgIHJldHVybiBhc3luYy5lYWNoT2ZTZXJpZXMoYXJyLCBfd2l0aG91dEluZGV4KGl0ZXJhdG9yKSwgY2FsbGJhY2spO1xuICAgIH07XG5cblxuICAgIGFzeW5jLmZvckVhY2hMaW1pdCA9XG4gICAgYXN5bmMuZWFjaExpbWl0ID0gZnVuY3Rpb24gKGFyciwgbGltaXQsIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICByZXR1cm4gX2VhY2hPZkxpbWl0KGxpbWl0KShhcnIsIF93aXRob3V0SW5kZXgoaXRlcmF0b3IpLCBjYWxsYmFjayk7XG4gICAgfTtcblxuICAgIGFzeW5jLmZvckVhY2hPZiA9XG4gICAgYXN5bmMuZWFjaE9mID0gZnVuY3Rpb24gKG9iamVjdCwgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgIGNhbGxiYWNrID0gX29uY2UoY2FsbGJhY2sgfHwgbm9vcCk7XG4gICAgICAgIG9iamVjdCA9IG9iamVjdCB8fCBbXTtcblxuICAgICAgICB2YXIgaXRlciA9IF9rZXlJdGVyYXRvcihvYmplY3QpO1xuICAgICAgICB2YXIga2V5LCBjb21wbGV0ZWQgPSAwO1xuXG4gICAgICAgIHdoaWxlICgoa2V5ID0gaXRlcigpKSAhPSBudWxsKSB7XG4gICAgICAgICAgICBjb21wbGV0ZWQgKz0gMTtcbiAgICAgICAgICAgIGl0ZXJhdG9yKG9iamVjdFtrZXldLCBrZXksIG9ubHlfb25jZShkb25lKSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoY29tcGxldGVkID09PSAwKSBjYWxsYmFjayhudWxsKTtcblxuICAgICAgICBmdW5jdGlvbiBkb25lKGVycikge1xuICAgICAgICAgICAgY29tcGxldGVkLS07XG4gICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIENoZWNrIGtleSBpcyBudWxsIGluIGNhc2UgaXRlcmF0b3IgaXNuJ3QgZXhoYXVzdGVkXG4gICAgICAgICAgICAvLyBhbmQgZG9uZSByZXNvbHZlZCBzeW5jaHJvbm91c2x5LlxuICAgICAgICAgICAgZWxzZSBpZiAoa2V5ID09PSBudWxsICYmIGNvbXBsZXRlZCA8PSAwKSB7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2sobnVsbCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgYXN5bmMuZm9yRWFjaE9mU2VyaWVzID1cbiAgICBhc3luYy5lYWNoT2ZTZXJpZXMgPSBmdW5jdGlvbiAob2JqLCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgY2FsbGJhY2sgPSBfb25jZShjYWxsYmFjayB8fCBub29wKTtcbiAgICAgICAgb2JqID0gb2JqIHx8IFtdO1xuICAgICAgICB2YXIgbmV4dEtleSA9IF9rZXlJdGVyYXRvcihvYmopO1xuICAgICAgICB2YXIga2V5ID0gbmV4dEtleSgpO1xuICAgICAgICBmdW5jdGlvbiBpdGVyYXRlKCkge1xuICAgICAgICAgICAgdmFyIHN5bmMgPSB0cnVlO1xuICAgICAgICAgICAgaWYgKGtleSA9PT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBjYWxsYmFjayhudWxsKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGl0ZXJhdG9yKG9ialtrZXldLCBrZXksIG9ubHlfb25jZShmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAga2V5ID0gbmV4dEtleSgpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoa2V5ID09PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gY2FsbGJhY2sobnVsbCk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3luYykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFzeW5jLnNldEltbWVkaWF0ZShpdGVyYXRlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlcmF0ZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSkpO1xuICAgICAgICAgICAgc3luYyA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGl0ZXJhdGUoKTtcbiAgICB9O1xuXG5cblxuICAgIGFzeW5jLmZvckVhY2hPZkxpbWl0ID1cbiAgICBhc3luYy5lYWNoT2ZMaW1pdCA9IGZ1bmN0aW9uIChvYmosIGxpbWl0LCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgX2VhY2hPZkxpbWl0KGxpbWl0KShvYmosIGl0ZXJhdG9yLCBjYWxsYmFjayk7XG4gICAgfTtcblxuICAgIGZ1bmN0aW9uIF9lYWNoT2ZMaW1pdChsaW1pdCkge1xuXG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAob2JqLCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIGNhbGxiYWNrID0gX29uY2UoY2FsbGJhY2sgfHwgbm9vcCk7XG4gICAgICAgICAgICBvYmogPSBvYmogfHwgW107XG4gICAgICAgICAgICB2YXIgbmV4dEtleSA9IF9rZXlJdGVyYXRvcihvYmopO1xuICAgICAgICAgICAgaWYgKGxpbWl0IDw9IDApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gY2FsbGJhY2sobnVsbCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB2YXIgZG9uZSA9IGZhbHNlO1xuICAgICAgICAgICAgdmFyIHJ1bm5pbmcgPSAwO1xuICAgICAgICAgICAgdmFyIGVycm9yZWQgPSBmYWxzZTtcblxuICAgICAgICAgICAgKGZ1bmN0aW9uIHJlcGxlbmlzaCAoKSB7XG4gICAgICAgICAgICAgICAgaWYgKGRvbmUgJiYgcnVubmluZyA8PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBjYWxsYmFjayhudWxsKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB3aGlsZSAocnVubmluZyA8IGxpbWl0ICYmICFlcnJvcmVkKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBrZXkgPSBuZXh0S2V5KCk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChrZXkgPT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRvbmUgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJ1bm5pbmcgPD0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKG51bGwpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJ1bm5pbmcgKz0gMTtcbiAgICAgICAgICAgICAgICAgICAgaXRlcmF0b3Iob2JqW2tleV0sIGtleSwgb25seV9vbmNlKGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJ1bm5pbmcgLT0gMTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVwbGVuaXNoKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KSgpO1xuICAgICAgICB9O1xuICAgIH1cblxuXG4gICAgZnVuY3Rpb24gZG9QYXJhbGxlbChmbikge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKG9iaiwgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICByZXR1cm4gZm4oYXN5bmMuZWFjaE9mLCBvYmosIGl0ZXJhdG9yLCBjYWxsYmFjayk7XG4gICAgICAgIH07XG4gICAgfVxuICAgIGZ1bmN0aW9uIGRvUGFyYWxsZWxMaW1pdChmbikge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKG9iaiwgbGltaXQsIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICAgICAgcmV0dXJuIGZuKF9lYWNoT2ZMaW1pdChsaW1pdCksIG9iaiwgaXRlcmF0b3IsIGNhbGxiYWNrKTtcbiAgICAgICAgfTtcbiAgICB9XG4gICAgZnVuY3Rpb24gZG9TZXJpZXMoZm4pIHtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChvYmosIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICAgICAgcmV0dXJuIGZuKGFzeW5jLmVhY2hPZlNlcmllcywgb2JqLCBpdGVyYXRvciwgY2FsbGJhY2spO1xuICAgICAgICB9O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIF9hc3luY01hcChlYWNoZm4sIGFyciwgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgIGNhbGxiYWNrID0gX29uY2UoY2FsbGJhY2sgfHwgbm9vcCk7XG4gICAgICAgIGFyciA9IGFyciB8fCBbXTtcbiAgICAgICAgdmFyIHJlc3VsdHMgPSBfaXNBcnJheUxpa2UoYXJyKSA/IFtdIDoge307XG4gICAgICAgIGVhY2hmbihhcnIsIGZ1bmN0aW9uICh2YWx1ZSwgaW5kZXgsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICBpdGVyYXRvcih2YWx1ZSwgZnVuY3Rpb24gKGVyciwgdikge1xuICAgICAgICAgICAgICAgIHJlc3VsdHNbaW5kZXhdID0gdjtcbiAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgIGNhbGxiYWNrKGVyciwgcmVzdWx0cyk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGFzeW5jLm1hcCA9IGRvUGFyYWxsZWwoX2FzeW5jTWFwKTtcbiAgICBhc3luYy5tYXBTZXJpZXMgPSBkb1NlcmllcyhfYXN5bmNNYXApO1xuICAgIGFzeW5jLm1hcExpbWl0ID0gZG9QYXJhbGxlbExpbWl0KF9hc3luY01hcCk7XG5cbiAgICAvLyByZWR1Y2Ugb25seSBoYXMgYSBzZXJpZXMgdmVyc2lvbiwgYXMgZG9pbmcgcmVkdWNlIGluIHBhcmFsbGVsIHdvbid0XG4gICAgLy8gd29yayBpbiBtYW55IHNpdHVhdGlvbnMuXG4gICAgYXN5bmMuaW5qZWN0ID1cbiAgICBhc3luYy5mb2xkbCA9XG4gICAgYXN5bmMucmVkdWNlID0gZnVuY3Rpb24gKGFyciwgbWVtbywgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgIGFzeW5jLmVhY2hPZlNlcmllcyhhcnIsIGZ1bmN0aW9uICh4LCBpLCBjYWxsYmFjaykge1xuICAgICAgICAgICAgaXRlcmF0b3IobWVtbywgeCwgZnVuY3Rpb24gKGVyciwgdikge1xuICAgICAgICAgICAgICAgIG1lbW8gPSB2O1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSwgZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgY2FsbGJhY2soZXJyLCBtZW1vKTtcbiAgICAgICAgfSk7XG4gICAgfTtcblxuICAgIGFzeW5jLmZvbGRyID1cbiAgICBhc3luYy5yZWR1Y2VSaWdodCA9IGZ1bmN0aW9uIChhcnIsIG1lbW8sIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICB2YXIgcmV2ZXJzZWQgPSBfbWFwKGFyciwgaWRlbnRpdHkpLnJldmVyc2UoKTtcbiAgICAgICAgYXN5bmMucmVkdWNlKHJldmVyc2VkLCBtZW1vLCBpdGVyYXRvciwgY2FsbGJhY2spO1xuICAgIH07XG5cbiAgICBhc3luYy50cmFuc2Zvcm0gPSBmdW5jdGlvbiAoYXJyLCBtZW1vLCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDMpIHtcbiAgICAgICAgICAgIGNhbGxiYWNrID0gaXRlcmF0b3I7XG4gICAgICAgICAgICBpdGVyYXRvciA9IG1lbW87XG4gICAgICAgICAgICBtZW1vID0gX2lzQXJyYXkoYXJyKSA/IFtdIDoge307XG4gICAgICAgIH1cblxuICAgICAgICBhc3luYy5lYWNoT2YoYXJyLCBmdW5jdGlvbih2LCBrLCBjYikge1xuICAgICAgICAgICAgaXRlcmF0b3IobWVtbywgdiwgaywgY2IpO1xuICAgICAgICB9LCBmdW5jdGlvbihlcnIpIHtcbiAgICAgICAgICAgIGNhbGxiYWNrKGVyciwgbWVtbyk7XG4gICAgICAgIH0pO1xuICAgIH07XG5cbiAgICBmdW5jdGlvbiBfZmlsdGVyKGVhY2hmbiwgYXJyLCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgdmFyIHJlc3VsdHMgPSBbXTtcbiAgICAgICAgZWFjaGZuKGFyciwgZnVuY3Rpb24gKHgsIGluZGV4LCBjYWxsYmFjaykge1xuICAgICAgICAgICAgaXRlcmF0b3IoeCwgZnVuY3Rpb24gKHYpIHtcbiAgICAgICAgICAgICAgICBpZiAodikge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHRzLnB1c2goe2luZGV4OiBpbmRleCwgdmFsdWU6IHh9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2FsbGJhY2soKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBjYWxsYmFjayhfbWFwKHJlc3VsdHMuc29ydChmdW5jdGlvbiAoYSwgYikge1xuICAgICAgICAgICAgICAgIHJldHVybiBhLmluZGV4IC0gYi5pbmRleDtcbiAgICAgICAgICAgIH0pLCBmdW5jdGlvbiAoeCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB4LnZhbHVlO1xuICAgICAgICAgICAgfSkpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBhc3luYy5zZWxlY3QgPVxuICAgIGFzeW5jLmZpbHRlciA9IGRvUGFyYWxsZWwoX2ZpbHRlcik7XG5cbiAgICBhc3luYy5zZWxlY3RMaW1pdCA9XG4gICAgYXN5bmMuZmlsdGVyTGltaXQgPSBkb1BhcmFsbGVsTGltaXQoX2ZpbHRlcik7XG5cbiAgICBhc3luYy5zZWxlY3RTZXJpZXMgPVxuICAgIGFzeW5jLmZpbHRlclNlcmllcyA9IGRvU2VyaWVzKF9maWx0ZXIpO1xuXG4gICAgZnVuY3Rpb24gX3JlamVjdChlYWNoZm4sIGFyciwgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgIF9maWx0ZXIoZWFjaGZuLCBhcnIsIGZ1bmN0aW9uKHZhbHVlLCBjYikge1xuICAgICAgICAgICAgaXRlcmF0b3IodmFsdWUsIGZ1bmN0aW9uKHYpIHtcbiAgICAgICAgICAgICAgICBjYighdik7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSwgY2FsbGJhY2spO1xuICAgIH1cbiAgICBhc3luYy5yZWplY3QgPSBkb1BhcmFsbGVsKF9yZWplY3QpO1xuICAgIGFzeW5jLnJlamVjdExpbWl0ID0gZG9QYXJhbGxlbExpbWl0KF9yZWplY3QpO1xuICAgIGFzeW5jLnJlamVjdFNlcmllcyA9IGRvU2VyaWVzKF9yZWplY3QpO1xuXG4gICAgZnVuY3Rpb24gX2NyZWF0ZVRlc3RlcihlYWNoZm4sIGNoZWNrLCBnZXRSZXN1bHQpIHtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKGFyciwgbGltaXQsIGl0ZXJhdG9yLCBjYikge1xuICAgICAgICAgICAgZnVuY3Rpb24gZG9uZSgpIHtcbiAgICAgICAgICAgICAgICBpZiAoY2IpIGNiKGdldFJlc3VsdChmYWxzZSwgdm9pZCAwKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmdW5jdGlvbiBpdGVyYXRlZSh4LCBfLCBjYWxsYmFjaykge1xuICAgICAgICAgICAgICAgIGlmICghY2IpIHJldHVybiBjYWxsYmFjaygpO1xuICAgICAgICAgICAgICAgIGl0ZXJhdG9yKHgsIGZ1bmN0aW9uICh2KSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChjYiAmJiBjaGVjayh2KSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY2IoZ2V0UmVzdWx0KHRydWUsIHgpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNiID0gaXRlcmF0b3IgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPiAzKSB7XG4gICAgICAgICAgICAgICAgZWFjaGZuKGFyciwgbGltaXQsIGl0ZXJhdGVlLCBkb25lKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgY2IgPSBpdGVyYXRvcjtcbiAgICAgICAgICAgICAgICBpdGVyYXRvciA9IGxpbWl0O1xuICAgICAgICAgICAgICAgIGVhY2hmbihhcnIsIGl0ZXJhdGVlLCBkb25lKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBhc3luYy5hbnkgPVxuICAgIGFzeW5jLnNvbWUgPSBfY3JlYXRlVGVzdGVyKGFzeW5jLmVhY2hPZiwgdG9Cb29sLCBpZGVudGl0eSk7XG5cbiAgICBhc3luYy5zb21lTGltaXQgPSBfY3JlYXRlVGVzdGVyKGFzeW5jLmVhY2hPZkxpbWl0LCB0b0Jvb2wsIGlkZW50aXR5KTtcblxuICAgIGFzeW5jLmFsbCA9XG4gICAgYXN5bmMuZXZlcnkgPSBfY3JlYXRlVGVzdGVyKGFzeW5jLmVhY2hPZiwgbm90SWQsIG5vdElkKTtcblxuICAgIGFzeW5jLmV2ZXJ5TGltaXQgPSBfY3JlYXRlVGVzdGVyKGFzeW5jLmVhY2hPZkxpbWl0LCBub3RJZCwgbm90SWQpO1xuXG4gICAgZnVuY3Rpb24gX2ZpbmRHZXRSZXN1bHQodiwgeCkge1xuICAgICAgICByZXR1cm4geDtcbiAgICB9XG4gICAgYXN5bmMuZGV0ZWN0ID0gX2NyZWF0ZVRlc3Rlcihhc3luYy5lYWNoT2YsIGlkZW50aXR5LCBfZmluZEdldFJlc3VsdCk7XG4gICAgYXN5bmMuZGV0ZWN0U2VyaWVzID0gX2NyZWF0ZVRlc3Rlcihhc3luYy5lYWNoT2ZTZXJpZXMsIGlkZW50aXR5LCBfZmluZEdldFJlc3VsdCk7XG4gICAgYXN5bmMuZGV0ZWN0TGltaXQgPSBfY3JlYXRlVGVzdGVyKGFzeW5jLmVhY2hPZkxpbWl0LCBpZGVudGl0eSwgX2ZpbmRHZXRSZXN1bHQpO1xuXG4gICAgYXN5bmMuc29ydEJ5ID0gZnVuY3Rpb24gKGFyciwgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgIGFzeW5jLm1hcChhcnIsIGZ1bmN0aW9uICh4LCBjYWxsYmFjaykge1xuICAgICAgICAgICAgaXRlcmF0b3IoeCwgZnVuY3Rpb24gKGVyciwgY3JpdGVyaWEpIHtcbiAgICAgICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhudWxsLCB7dmFsdWU6IHgsIGNyaXRlcmlhOiBjcml0ZXJpYX0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LCBmdW5jdGlvbiAoZXJyLCByZXN1bHRzKSB7XG4gICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBjYWxsYmFjayhudWxsLCBfbWFwKHJlc3VsdHMuc29ydChjb21wYXJhdG9yKSwgZnVuY3Rpb24gKHgpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHgudmFsdWU7XG4gICAgICAgICAgICAgICAgfSkpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGZ1bmN0aW9uIGNvbXBhcmF0b3IobGVmdCwgcmlnaHQpIHtcbiAgICAgICAgICAgIHZhciBhID0gbGVmdC5jcml0ZXJpYSwgYiA9IHJpZ2h0LmNyaXRlcmlhO1xuICAgICAgICAgICAgcmV0dXJuIGEgPCBiID8gLTEgOiBhID4gYiA/IDEgOiAwO1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIGFzeW5jLmF1dG8gPSBmdW5jdGlvbiAodGFza3MsIGNvbmN1cnJlbmN5LCBjYWxsYmFjaykge1xuICAgICAgICBpZiAoIWNhbGxiYWNrKSB7XG4gICAgICAgICAgICAvLyBjb25jdXJyZW5jeSBpcyBvcHRpb25hbCwgc2hpZnQgdGhlIGFyZ3MuXG4gICAgICAgICAgICBjYWxsYmFjayA9IGNvbmN1cnJlbmN5O1xuICAgICAgICAgICAgY29uY3VycmVuY3kgPSBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGNhbGxiYWNrID0gX29uY2UoY2FsbGJhY2sgfHwgbm9vcCk7XG4gICAgICAgIHZhciBrZXlzID0gX2tleXModGFza3MpO1xuICAgICAgICB2YXIgcmVtYWluaW5nVGFza3MgPSBrZXlzLmxlbmd0aDtcbiAgICAgICAgaWYgKCFyZW1haW5pbmdUYXNrcykge1xuICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKG51bGwpO1xuICAgICAgICB9XG4gICAgICAgIGlmICghY29uY3VycmVuY3kpIHtcbiAgICAgICAgICAgIGNvbmN1cnJlbmN5ID0gcmVtYWluaW5nVGFza3M7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgcmVzdWx0cyA9IHt9O1xuICAgICAgICB2YXIgcnVubmluZ1Rhc2tzID0gMDtcblxuICAgICAgICB2YXIgbGlzdGVuZXJzID0gW107XG4gICAgICAgIGZ1bmN0aW9uIGFkZExpc3RlbmVyKGZuKSB7XG4gICAgICAgICAgICBsaXN0ZW5lcnMudW5zaGlmdChmbik7XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gcmVtb3ZlTGlzdGVuZXIoZm4pIHtcbiAgICAgICAgICAgIHZhciBpZHggPSBfaW5kZXhPZihsaXN0ZW5lcnMsIGZuKTtcbiAgICAgICAgICAgIGlmIChpZHggPj0gMCkgbGlzdGVuZXJzLnNwbGljZShpZHgsIDEpO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIHRhc2tDb21wbGV0ZSgpIHtcbiAgICAgICAgICAgIHJlbWFpbmluZ1Rhc2tzLS07XG4gICAgICAgICAgICBfYXJyYXlFYWNoKGxpc3RlbmVycy5zbGljZSgwKSwgZnVuY3Rpb24gKGZuKSB7XG4gICAgICAgICAgICAgICAgZm4oKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgYWRkTGlzdGVuZXIoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgaWYgKCFyZW1haW5pbmdUYXNrcykge1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrKG51bGwsIHJlc3VsdHMpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICBfYXJyYXlFYWNoKGtleXMsIGZ1bmN0aW9uIChrKSB7XG4gICAgICAgICAgICB2YXIgdGFzayA9IF9pc0FycmF5KHRhc2tzW2tdKSA/IHRhc2tzW2tdOiBbdGFza3Nba11dO1xuICAgICAgICAgICAgdmFyIHRhc2tDYWxsYmFjayA9IF9yZXN0UGFyYW0oZnVuY3Rpb24oZXJyLCBhcmdzKSB7XG4gICAgICAgICAgICAgICAgcnVubmluZ1Rhc2tzLS07XG4gICAgICAgICAgICAgICAgaWYgKGFyZ3MubGVuZ3RoIDw9IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgYXJncyA9IGFyZ3NbMF07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHNhZmVSZXN1bHRzID0ge307XG4gICAgICAgICAgICAgICAgICAgIF9mb3JFYWNoT2YocmVzdWx0cywgZnVuY3Rpb24odmFsLCBya2V5KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzYWZlUmVzdWx0c1tya2V5XSA9IHZhbDtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIHNhZmVSZXN1bHRzW2tdID0gYXJncztcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soZXJyLCBzYWZlUmVzdWx0cyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHRzW2tdID0gYXJncztcbiAgICAgICAgICAgICAgICAgICAgYXN5bmMuc2V0SW1tZWRpYXRlKHRhc2tDb21wbGV0ZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB2YXIgcmVxdWlyZXMgPSB0YXNrLnNsaWNlKDAsIHRhc2subGVuZ3RoIC0gMSk7XG4gICAgICAgICAgICAvLyBwcmV2ZW50IGRlYWQtbG9ja3NcbiAgICAgICAgICAgIHZhciBsZW4gPSByZXF1aXJlcy5sZW5ndGg7XG4gICAgICAgICAgICB2YXIgZGVwO1xuICAgICAgICAgICAgd2hpbGUgKGxlbi0tKSB7XG4gICAgICAgICAgICAgICAgaWYgKCEoZGVwID0gdGFza3NbcmVxdWlyZXNbbGVuXV0pKSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignSGFzIGluZXhpc3RhbnQgZGVwZW5kZW5jeScpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoX2lzQXJyYXkoZGVwKSAmJiBfaW5kZXhPZihkZXAsIGspID49IDApIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdIYXMgY3ljbGljIGRlcGVuZGVuY2llcycpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZ1bmN0aW9uIHJlYWR5KCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBydW5uaW5nVGFza3MgPCBjb25jdXJyZW5jeSAmJiBfcmVkdWNlKHJlcXVpcmVzLCBmdW5jdGlvbiAoYSwgeCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gKGEgJiYgcmVzdWx0cy5oYXNPd25Qcm9wZXJ0eSh4KSk7XG4gICAgICAgICAgICAgICAgfSwgdHJ1ZSkgJiYgIXJlc3VsdHMuaGFzT3duUHJvcGVydHkoayk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAocmVhZHkoKSkge1xuICAgICAgICAgICAgICAgIHJ1bm5pbmdUYXNrcysrO1xuICAgICAgICAgICAgICAgIHRhc2tbdGFzay5sZW5ndGggLSAxXSh0YXNrQ2FsbGJhY2ssIHJlc3VsdHMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgYWRkTGlzdGVuZXIobGlzdGVuZXIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZnVuY3Rpb24gbGlzdGVuZXIoKSB7XG4gICAgICAgICAgICAgICAgaWYgKHJlYWR5KCkpIHtcbiAgICAgICAgICAgICAgICAgICAgcnVubmluZ1Rhc2tzKys7XG4gICAgICAgICAgICAgICAgICAgIHJlbW92ZUxpc3RlbmVyKGxpc3RlbmVyKTtcbiAgICAgICAgICAgICAgICAgICAgdGFza1t0YXNrLmxlbmd0aCAtIDFdKHRhc2tDYWxsYmFjaywgcmVzdWx0cyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9O1xuXG5cblxuICAgIGFzeW5jLnJldHJ5ID0gZnVuY3Rpb24odGltZXMsIHRhc2ssIGNhbGxiYWNrKSB7XG4gICAgICAgIHZhciBERUZBVUxUX1RJTUVTID0gNTtcbiAgICAgICAgdmFyIERFRkFVTFRfSU5URVJWQUwgPSAwO1xuXG4gICAgICAgIHZhciBhdHRlbXB0cyA9IFtdO1xuXG4gICAgICAgIHZhciBvcHRzID0ge1xuICAgICAgICAgICAgdGltZXM6IERFRkFVTFRfVElNRVMsXG4gICAgICAgICAgICBpbnRlcnZhbDogREVGQVVMVF9JTlRFUlZBTFxuICAgICAgICB9O1xuXG4gICAgICAgIGZ1bmN0aW9uIHBhcnNlVGltZXMoYWNjLCB0KXtcbiAgICAgICAgICAgIGlmKHR5cGVvZiB0ID09PSAnbnVtYmVyJyl7XG4gICAgICAgICAgICAgICAgYWNjLnRpbWVzID0gcGFyc2VJbnQodCwgMTApIHx8IERFRkFVTFRfVElNRVM7XG4gICAgICAgICAgICB9IGVsc2UgaWYodHlwZW9mIHQgPT09ICdvYmplY3QnKXtcbiAgICAgICAgICAgICAgICBhY2MudGltZXMgPSBwYXJzZUludCh0LnRpbWVzLCAxMCkgfHwgREVGQVVMVF9USU1FUztcbiAgICAgICAgICAgICAgICBhY2MuaW50ZXJ2YWwgPSBwYXJzZUludCh0LmludGVydmFsLCAxMCkgfHwgREVGQVVMVF9JTlRFUlZBTDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdVbnN1cHBvcnRlZCBhcmd1bWVudCB0eXBlIGZvciBcXCd0aW1lc1xcJzogJyArIHR5cGVvZiB0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBsZW5ndGggPSBhcmd1bWVudHMubGVuZ3RoO1xuICAgICAgICBpZiAobGVuZ3RoIDwgMSB8fCBsZW5ndGggPiAzKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgYXJndW1lbnRzIC0gbXVzdCBiZSBlaXRoZXIgKHRhc2spLCAodGFzaywgY2FsbGJhY2spLCAodGltZXMsIHRhc2spIG9yICh0aW1lcywgdGFzaywgY2FsbGJhY2spJyk7XG4gICAgICAgIH0gZWxzZSBpZiAobGVuZ3RoIDw9IDIgJiYgdHlwZW9mIHRpbWVzID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICBjYWxsYmFjayA9IHRhc2s7XG4gICAgICAgICAgICB0YXNrID0gdGltZXM7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHR5cGVvZiB0aW1lcyAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgcGFyc2VUaW1lcyhvcHRzLCB0aW1lcyk7XG4gICAgICAgIH1cbiAgICAgICAgb3B0cy5jYWxsYmFjayA9IGNhbGxiYWNrO1xuICAgICAgICBvcHRzLnRhc2sgPSB0YXNrO1xuXG4gICAgICAgIGZ1bmN0aW9uIHdyYXBwZWRUYXNrKHdyYXBwZWRDYWxsYmFjaywgd3JhcHBlZFJlc3VsdHMpIHtcbiAgICAgICAgICAgIGZ1bmN0aW9uIHJldHJ5QXR0ZW1wdCh0YXNrLCBmaW5hbEF0dGVtcHQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24oc2VyaWVzQ2FsbGJhY2spIHtcbiAgICAgICAgICAgICAgICAgICAgdGFzayhmdW5jdGlvbihlcnIsIHJlc3VsdCl7XG4gICAgICAgICAgICAgICAgICAgICAgICBzZXJpZXNDYWxsYmFjayghZXJyIHx8IGZpbmFsQXR0ZW1wdCwge2VycjogZXJyLCByZXN1bHQ6IHJlc3VsdH0pO1xuICAgICAgICAgICAgICAgICAgICB9LCB3cmFwcGVkUmVzdWx0cyk7XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZnVuY3Rpb24gcmV0cnlJbnRlcnZhbChpbnRlcnZhbCl7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKHNlcmllc0NhbGxiYWNrKXtcbiAgICAgICAgICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpe1xuICAgICAgICAgICAgICAgICAgICAgICAgc2VyaWVzQ2FsbGJhY2sobnVsbCk7XG4gICAgICAgICAgICAgICAgICAgIH0sIGludGVydmFsKTtcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB3aGlsZSAob3B0cy50aW1lcykge1xuXG4gICAgICAgICAgICAgICAgdmFyIGZpbmFsQXR0ZW1wdCA9ICEob3B0cy50aW1lcy09MSk7XG4gICAgICAgICAgICAgICAgYXR0ZW1wdHMucHVzaChyZXRyeUF0dGVtcHQob3B0cy50YXNrLCBmaW5hbEF0dGVtcHQpKTtcbiAgICAgICAgICAgICAgICBpZighZmluYWxBdHRlbXB0ICYmIG9wdHMuaW50ZXJ2YWwgPiAwKXtcbiAgICAgICAgICAgICAgICAgICAgYXR0ZW1wdHMucHVzaChyZXRyeUludGVydmFsKG9wdHMuaW50ZXJ2YWwpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGFzeW5jLnNlcmllcyhhdHRlbXB0cywgZnVuY3Rpb24oZG9uZSwgZGF0YSl7XG4gICAgICAgICAgICAgICAgZGF0YSA9IGRhdGFbZGF0YS5sZW5ndGggLSAxXTtcbiAgICAgICAgICAgICAgICAod3JhcHBlZENhbGxiYWNrIHx8IG9wdHMuY2FsbGJhY2spKGRhdGEuZXJyLCBkYXRhLnJlc3VsdCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIElmIGEgY2FsbGJhY2sgaXMgcGFzc2VkLCBydW4gdGhpcyBhcyBhIGNvbnRyb2xsIGZsb3dcbiAgICAgICAgcmV0dXJuIG9wdHMuY2FsbGJhY2sgPyB3cmFwcGVkVGFzaygpIDogd3JhcHBlZFRhc2s7XG4gICAgfTtcblxuICAgIGFzeW5jLndhdGVyZmFsbCA9IGZ1bmN0aW9uICh0YXNrcywgY2FsbGJhY2spIHtcbiAgICAgICAgY2FsbGJhY2sgPSBfb25jZShjYWxsYmFjayB8fCBub29wKTtcbiAgICAgICAgaWYgKCFfaXNBcnJheSh0YXNrcykpIHtcbiAgICAgICAgICAgIHZhciBlcnIgPSBuZXcgRXJyb3IoJ0ZpcnN0IGFyZ3VtZW50IHRvIHdhdGVyZmFsbCBtdXN0IGJlIGFuIGFycmF5IG9mIGZ1bmN0aW9ucycpO1xuICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKGVycik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCF0YXNrcy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHJldHVybiBjYWxsYmFjaygpO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIHdyYXBJdGVyYXRvcihpdGVyYXRvcikge1xuICAgICAgICAgICAgcmV0dXJuIF9yZXN0UGFyYW0oZnVuY3Rpb24gKGVyciwgYXJncykge1xuICAgICAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2suYXBwbHkobnVsbCwgW2Vycl0uY29uY2F0KGFyZ3MpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBuZXh0ID0gaXRlcmF0b3IubmV4dCgpO1xuICAgICAgICAgICAgICAgICAgICBpZiAobmV4dCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgYXJncy5wdXNoKHdyYXBJdGVyYXRvcihuZXh0KSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhcmdzLnB1c2goY2FsbGJhY2spO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVuc3VyZUFzeW5jKGl0ZXJhdG9yKS5hcHBseShudWxsLCBhcmdzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICB3cmFwSXRlcmF0b3IoYXN5bmMuaXRlcmF0b3IodGFza3MpKSgpO1xuICAgIH07XG5cbiAgICBmdW5jdGlvbiBfcGFyYWxsZWwoZWFjaGZuLCB0YXNrcywgY2FsbGJhY2spIHtcbiAgICAgICAgY2FsbGJhY2sgPSBjYWxsYmFjayB8fCBub29wO1xuICAgICAgICB2YXIgcmVzdWx0cyA9IF9pc0FycmF5TGlrZSh0YXNrcykgPyBbXSA6IHt9O1xuXG4gICAgICAgIGVhY2hmbih0YXNrcywgZnVuY3Rpb24gKHRhc2ssIGtleSwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIHRhc2soX3Jlc3RQYXJhbShmdW5jdGlvbiAoZXJyLCBhcmdzKSB7XG4gICAgICAgICAgICAgICAgaWYgKGFyZ3MubGVuZ3RoIDw9IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgYXJncyA9IGFyZ3NbMF07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJlc3VsdHNba2V5XSA9IGFyZ3M7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgfSwgZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgY2FsbGJhY2soZXJyLCByZXN1bHRzKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgYXN5bmMucGFyYWxsZWwgPSBmdW5jdGlvbiAodGFza3MsIGNhbGxiYWNrKSB7XG4gICAgICAgIF9wYXJhbGxlbChhc3luYy5lYWNoT2YsIHRhc2tzLCBjYWxsYmFjayk7XG4gICAgfTtcblxuICAgIGFzeW5jLnBhcmFsbGVsTGltaXQgPSBmdW5jdGlvbih0YXNrcywgbGltaXQsIGNhbGxiYWNrKSB7XG4gICAgICAgIF9wYXJhbGxlbChfZWFjaE9mTGltaXQobGltaXQpLCB0YXNrcywgY2FsbGJhY2spO1xuICAgIH07XG5cbiAgICBhc3luYy5zZXJpZXMgPSBmdW5jdGlvbih0YXNrcywgY2FsbGJhY2spIHtcbiAgICAgICAgX3BhcmFsbGVsKGFzeW5jLmVhY2hPZlNlcmllcywgdGFza3MsIGNhbGxiYWNrKTtcbiAgICB9O1xuXG4gICAgYXN5bmMuaXRlcmF0b3IgPSBmdW5jdGlvbiAodGFza3MpIHtcbiAgICAgICAgZnVuY3Rpb24gbWFrZUNhbGxiYWNrKGluZGV4KSB7XG4gICAgICAgICAgICBmdW5jdGlvbiBmbigpIHtcbiAgICAgICAgICAgICAgICBpZiAodGFza3MubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgIHRhc2tzW2luZGV4XS5hcHBseShudWxsLCBhcmd1bWVudHMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gZm4ubmV4dCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZm4ubmV4dCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gKGluZGV4IDwgdGFza3MubGVuZ3RoIC0gMSkgPyBtYWtlQ2FsbGJhY2soaW5kZXggKyAxKTogbnVsbDtcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICByZXR1cm4gZm47XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG1ha2VDYWxsYmFjaygwKTtcbiAgICB9O1xuXG4gICAgYXN5bmMuYXBwbHkgPSBfcmVzdFBhcmFtKGZ1bmN0aW9uIChmbiwgYXJncykge1xuICAgICAgICByZXR1cm4gX3Jlc3RQYXJhbShmdW5jdGlvbiAoY2FsbEFyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybiBmbi5hcHBseShcbiAgICAgICAgICAgICAgICBudWxsLCBhcmdzLmNvbmNhdChjYWxsQXJncylcbiAgICAgICAgICAgICk7XG4gICAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgZnVuY3Rpb24gX2NvbmNhdChlYWNoZm4sIGFyciwgZm4sIGNhbGxiYWNrKSB7XG4gICAgICAgIHZhciByZXN1bHQgPSBbXTtcbiAgICAgICAgZWFjaGZuKGFyciwgZnVuY3Rpb24gKHgsIGluZGV4LCBjYikge1xuICAgICAgICAgICAgZm4oeCwgZnVuY3Rpb24gKGVyciwgeSkge1xuICAgICAgICAgICAgICAgIHJlc3VsdCA9IHJlc3VsdC5jb25jYXQoeSB8fCBbXSk7XG4gICAgICAgICAgICAgICAgY2IoZXJyKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICBjYWxsYmFjayhlcnIsIHJlc3VsdCk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBhc3luYy5jb25jYXQgPSBkb1BhcmFsbGVsKF9jb25jYXQpO1xuICAgIGFzeW5jLmNvbmNhdFNlcmllcyA9IGRvU2VyaWVzKF9jb25jYXQpO1xuXG4gICAgYXN5bmMud2hpbHN0ID0gZnVuY3Rpb24gKHRlc3QsIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICBjYWxsYmFjayA9IGNhbGxiYWNrIHx8IG5vb3A7XG4gICAgICAgIGlmICh0ZXN0KCkpIHtcbiAgICAgICAgICAgIHZhciBuZXh0ID0gX3Jlc3RQYXJhbShmdW5jdGlvbihlcnIsIGFyZ3MpIHtcbiAgICAgICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0ZXN0LmFwcGx5KHRoaXMsIGFyZ3MpKSB7XG4gICAgICAgICAgICAgICAgICAgIGl0ZXJhdG9yKG5leHQpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKG51bGwpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgaXRlcmF0b3IobmV4dCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjYWxsYmFjayhudWxsKTtcbiAgICAgICAgfVxuICAgIH07XG5cbiAgICBhc3luYy5kb1doaWxzdCA9IGZ1bmN0aW9uIChpdGVyYXRvciwgdGVzdCwgY2FsbGJhY2spIHtcbiAgICAgICAgdmFyIGNhbGxzID0gMDtcbiAgICAgICAgcmV0dXJuIGFzeW5jLndoaWxzdChmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIHJldHVybiArK2NhbGxzIDw9IDEgfHwgdGVzdC5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgICAgICB9LCBpdGVyYXRvciwgY2FsbGJhY2spO1xuICAgIH07XG5cbiAgICBhc3luYy51bnRpbCA9IGZ1bmN0aW9uICh0ZXN0LCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgcmV0dXJuIGFzeW5jLndoaWxzdChmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIHJldHVybiAhdGVzdC5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgICAgICB9LCBpdGVyYXRvciwgY2FsbGJhY2spO1xuICAgIH07XG5cbiAgICBhc3luYy5kb1VudGlsID0gZnVuY3Rpb24gKGl0ZXJhdG9yLCB0ZXN0LCBjYWxsYmFjaykge1xuICAgICAgICByZXR1cm4gYXN5bmMuZG9XaGlsc3QoaXRlcmF0b3IsIGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgcmV0dXJuICF0ZXN0LmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgICAgIH0sIGNhbGxiYWNrKTtcbiAgICB9O1xuXG4gICAgYXN5bmMuZHVyaW5nID0gZnVuY3Rpb24gKHRlc3QsIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICBjYWxsYmFjayA9IGNhbGxiYWNrIHx8IG5vb3A7XG5cbiAgICAgICAgdmFyIG5leHQgPSBfcmVzdFBhcmFtKGZ1bmN0aW9uKGVyciwgYXJncykge1xuICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGFyZ3MucHVzaChjaGVjayk7XG4gICAgICAgICAgICAgICAgdGVzdC5hcHBseSh0aGlzLCBhcmdzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgdmFyIGNoZWNrID0gZnVuY3Rpb24oZXJyLCB0cnV0aCkge1xuICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHRydXRoKSB7XG4gICAgICAgICAgICAgICAgaXRlcmF0b3IobmV4dCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrKG51bGwpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuXG4gICAgICAgIHRlc3QoY2hlY2spO1xuICAgIH07XG5cbiAgICBhc3luYy5kb0R1cmluZyA9IGZ1bmN0aW9uIChpdGVyYXRvciwgdGVzdCwgY2FsbGJhY2spIHtcbiAgICAgICAgdmFyIGNhbGxzID0gMDtcbiAgICAgICAgYXN5bmMuZHVyaW5nKGZ1bmN0aW9uKG5leHQpIHtcbiAgICAgICAgICAgIGlmIChjYWxscysrIDwgMSkge1xuICAgICAgICAgICAgICAgIG5leHQobnVsbCwgdHJ1ZSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRlc3QuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSwgaXRlcmF0b3IsIGNhbGxiYWNrKTtcbiAgICB9O1xuXG4gICAgZnVuY3Rpb24gX3F1ZXVlKHdvcmtlciwgY29uY3VycmVuY3ksIHBheWxvYWQpIHtcbiAgICAgICAgaWYgKGNvbmN1cnJlbmN5ID09IG51bGwpIHtcbiAgICAgICAgICAgIGNvbmN1cnJlbmN5ID0gMTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmKGNvbmN1cnJlbmN5ID09PSAwKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0NvbmN1cnJlbmN5IG11c3Qgbm90IGJlIHplcm8nKTtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBfaW5zZXJ0KHEsIGRhdGEsIHBvcywgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIGlmIChjYWxsYmFjayAhPSBudWxsICYmIHR5cGVvZiBjYWxsYmFjayAhPT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwidGFzayBjYWxsYmFjayBtdXN0IGJlIGEgZnVuY3Rpb25cIik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBxLnN0YXJ0ZWQgPSB0cnVlO1xuICAgICAgICAgICAgaWYgKCFfaXNBcnJheShkYXRhKSkge1xuICAgICAgICAgICAgICAgIGRhdGEgPSBbZGF0YV07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZihkYXRhLmxlbmd0aCA9PT0gMCAmJiBxLmlkbGUoKSkge1xuICAgICAgICAgICAgICAgIC8vIGNhbGwgZHJhaW4gaW1tZWRpYXRlbHkgaWYgdGhlcmUgYXJlIG5vIHRhc2tzXG4gICAgICAgICAgICAgICAgcmV0dXJuIGFzeW5jLnNldEltbWVkaWF0ZShmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgICAgcS5kcmFpbigpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgX2FycmF5RWFjaChkYXRhLCBmdW5jdGlvbih0YXNrKSB7XG4gICAgICAgICAgICAgICAgdmFyIGl0ZW0gPSB7XG4gICAgICAgICAgICAgICAgICAgIGRhdGE6IHRhc2ssXG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrOiBjYWxsYmFjayB8fCBub29wXG4gICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgIGlmIChwb3MpIHtcbiAgICAgICAgICAgICAgICAgICAgcS50YXNrcy51bnNoaWZ0KGl0ZW0pO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHEudGFza3MucHVzaChpdGVtKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAocS50YXNrcy5sZW5ndGggPT09IHEuY29uY3VycmVuY3kpIHtcbiAgICAgICAgICAgICAgICAgICAgcS5zYXR1cmF0ZWQoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGFzeW5jLnNldEltbWVkaWF0ZShxLnByb2Nlc3MpO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIF9uZXh0KHEsIHRhc2tzKSB7XG4gICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24oKXtcbiAgICAgICAgICAgICAgICB3b3JrZXJzIC09IDE7XG5cbiAgICAgICAgICAgICAgICB2YXIgcmVtb3ZlZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHZhciBhcmdzID0gYXJndW1lbnRzO1xuICAgICAgICAgICAgICAgIF9hcnJheUVhY2godGFza3MsIGZ1bmN0aW9uICh0YXNrKSB7XG4gICAgICAgICAgICAgICAgICAgIF9hcnJheUVhY2god29ya2Vyc0xpc3QsIGZ1bmN0aW9uICh3b3JrZXIsIGluZGV4KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAod29ya2VyID09PSB0YXNrICYmICFyZW1vdmVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd29ya2Vyc0xpc3Quc3BsaWNlKGluZGV4LCAxKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZW1vdmVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICAgICAgdGFzay5jYWxsYmFjay5hcHBseSh0YXNrLCBhcmdzKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBpZiAocS50YXNrcy5sZW5ndGggKyB3b3JrZXJzID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIHEuZHJhaW4oKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcS5wcm9jZXNzKCk7XG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIHdvcmtlcnMgPSAwO1xuICAgICAgICB2YXIgd29ya2Vyc0xpc3QgPSBbXTtcbiAgICAgICAgdmFyIHEgPSB7XG4gICAgICAgICAgICB0YXNrczogW10sXG4gICAgICAgICAgICBjb25jdXJyZW5jeTogY29uY3VycmVuY3ksXG4gICAgICAgICAgICBwYXlsb2FkOiBwYXlsb2FkLFxuICAgICAgICAgICAgc2F0dXJhdGVkOiBub29wLFxuICAgICAgICAgICAgZW1wdHk6IG5vb3AsXG4gICAgICAgICAgICBkcmFpbjogbm9vcCxcbiAgICAgICAgICAgIHN0YXJ0ZWQ6IGZhbHNlLFxuICAgICAgICAgICAgcGF1c2VkOiBmYWxzZSxcbiAgICAgICAgICAgIHB1c2g6IGZ1bmN0aW9uIChkYXRhLCBjYWxsYmFjaykge1xuICAgICAgICAgICAgICAgIF9pbnNlcnQocSwgZGF0YSwgZmFsc2UsIGNhbGxiYWNrKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBraWxsOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgcS5kcmFpbiA9IG5vb3A7XG4gICAgICAgICAgICAgICAgcS50YXNrcyA9IFtdO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHVuc2hpZnQ6IGZ1bmN0aW9uIChkYXRhLCBjYWxsYmFjaykge1xuICAgICAgICAgICAgICAgIF9pbnNlcnQocSwgZGF0YSwgdHJ1ZSwgY2FsbGJhY2spO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHByb2Nlc3M6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBpZiAoIXEucGF1c2VkICYmIHdvcmtlcnMgPCBxLmNvbmN1cnJlbmN5ICYmIHEudGFza3MubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgIHdoaWxlKHdvcmtlcnMgPCBxLmNvbmN1cnJlbmN5ICYmIHEudGFza3MubGVuZ3RoKXtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0YXNrcyA9IHEucGF5bG9hZCA/XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcS50YXNrcy5zcGxpY2UoMCwgcS5wYXlsb2FkKSA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcS50YXNrcy5zcGxpY2UoMCwgcS50YXNrcy5sZW5ndGgpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgZGF0YSA9IF9tYXAodGFza3MsIGZ1bmN0aW9uICh0YXNrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRhc2suZGF0YTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocS50YXNrcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBxLmVtcHR5KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB3b3JrZXJzICs9IDE7XG4gICAgICAgICAgICAgICAgICAgICAgICB3b3JrZXJzTGlzdC5wdXNoKHRhc2tzWzBdKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjYiA9IG9ubHlfb25jZShfbmV4dChxLCB0YXNrcykpO1xuICAgICAgICAgICAgICAgICAgICAgICAgd29ya2VyKGRhdGEsIGNiKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBsZW5ndGg6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcS50YXNrcy5sZW5ndGg7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcnVubmluZzogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB3b3JrZXJzO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHdvcmtlcnNMaXN0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHdvcmtlcnNMaXN0O1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGlkbGU6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBxLnRhc2tzLmxlbmd0aCArIHdvcmtlcnMgPT09IDA7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcGF1c2U6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBxLnBhdXNlZCA9IHRydWU7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcmVzdW1lOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgaWYgKHEucGF1c2VkID09PSBmYWxzZSkgeyByZXR1cm47IH1cbiAgICAgICAgICAgICAgICBxLnBhdXNlZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHZhciByZXN1bWVDb3VudCA9IE1hdGgubWluKHEuY29uY3VycmVuY3ksIHEudGFza3MubGVuZ3RoKTtcbiAgICAgICAgICAgICAgICAvLyBOZWVkIHRvIGNhbGwgcS5wcm9jZXNzIG9uY2UgcGVyIGNvbmN1cnJlbnRcbiAgICAgICAgICAgICAgICAvLyB3b3JrZXIgdG8gcHJlc2VydmUgZnVsbCBjb25jdXJyZW5jeSBhZnRlciBwYXVzZVxuICAgICAgICAgICAgICAgIGZvciAodmFyIHcgPSAxOyB3IDw9IHJlc3VtZUNvdW50OyB3KyspIHtcbiAgICAgICAgICAgICAgICAgICAgYXN5bmMuc2V0SW1tZWRpYXRlKHEucHJvY2Vzcyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gcTtcbiAgICB9XG5cbiAgICBhc3luYy5xdWV1ZSA9IGZ1bmN0aW9uICh3b3JrZXIsIGNvbmN1cnJlbmN5KSB7XG4gICAgICAgIHZhciBxID0gX3F1ZXVlKGZ1bmN0aW9uIChpdGVtcywgY2IpIHtcbiAgICAgICAgICAgIHdvcmtlcihpdGVtc1swXSwgY2IpO1xuICAgICAgICB9LCBjb25jdXJyZW5jeSwgMSk7XG5cbiAgICAgICAgcmV0dXJuIHE7XG4gICAgfTtcblxuICAgIGFzeW5jLnByaW9yaXR5UXVldWUgPSBmdW5jdGlvbiAod29ya2VyLCBjb25jdXJyZW5jeSkge1xuXG4gICAgICAgIGZ1bmN0aW9uIF9jb21wYXJlVGFza3MoYSwgYil7XG4gICAgICAgICAgICByZXR1cm4gYS5wcmlvcml0eSAtIGIucHJpb3JpdHk7XG4gICAgICAgIH1cblxuICAgICAgICBmdW5jdGlvbiBfYmluYXJ5U2VhcmNoKHNlcXVlbmNlLCBpdGVtLCBjb21wYXJlKSB7XG4gICAgICAgICAgICB2YXIgYmVnID0gLTEsXG4gICAgICAgICAgICAgICAgZW5kID0gc2VxdWVuY2UubGVuZ3RoIC0gMTtcbiAgICAgICAgICAgIHdoaWxlIChiZWcgPCBlbmQpIHtcbiAgICAgICAgICAgICAgICB2YXIgbWlkID0gYmVnICsgKChlbmQgLSBiZWcgKyAxKSA+Pj4gMSk7XG4gICAgICAgICAgICAgICAgaWYgKGNvbXBhcmUoaXRlbSwgc2VxdWVuY2VbbWlkXSkgPj0gMCkge1xuICAgICAgICAgICAgICAgICAgICBiZWcgPSBtaWQ7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgZW5kID0gbWlkIC0gMTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gYmVnO1xuICAgICAgICB9XG5cbiAgICAgICAgZnVuY3Rpb24gX2luc2VydChxLCBkYXRhLCBwcmlvcml0eSwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIGlmIChjYWxsYmFjayAhPSBudWxsICYmIHR5cGVvZiBjYWxsYmFjayAhPT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwidGFzayBjYWxsYmFjayBtdXN0IGJlIGEgZnVuY3Rpb25cIik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBxLnN0YXJ0ZWQgPSB0cnVlO1xuICAgICAgICAgICAgaWYgKCFfaXNBcnJheShkYXRhKSkge1xuICAgICAgICAgICAgICAgIGRhdGEgPSBbZGF0YV07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZihkYXRhLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICAgIC8vIGNhbGwgZHJhaW4gaW1tZWRpYXRlbHkgaWYgdGhlcmUgYXJlIG5vIHRhc2tzXG4gICAgICAgICAgICAgICAgcmV0dXJuIGFzeW5jLnNldEltbWVkaWF0ZShmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgICAgcS5kcmFpbigpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgX2FycmF5RWFjaChkYXRhLCBmdW5jdGlvbih0YXNrKSB7XG4gICAgICAgICAgICAgICAgdmFyIGl0ZW0gPSB7XG4gICAgICAgICAgICAgICAgICAgIGRhdGE6IHRhc2ssXG4gICAgICAgICAgICAgICAgICAgIHByaW9yaXR5OiBwcmlvcml0eSxcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2s6IHR5cGVvZiBjYWxsYmFjayA9PT0gJ2Z1bmN0aW9uJyA/IGNhbGxiYWNrIDogbm9vcFxuICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICBxLnRhc2tzLnNwbGljZShfYmluYXJ5U2VhcmNoKHEudGFza3MsIGl0ZW0sIF9jb21wYXJlVGFza3MpICsgMSwgMCwgaXRlbSk7XG5cbiAgICAgICAgICAgICAgICBpZiAocS50YXNrcy5sZW5ndGggPT09IHEuY29uY3VycmVuY3kpIHtcbiAgICAgICAgICAgICAgICAgICAgcS5zYXR1cmF0ZWQoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYXN5bmMuc2V0SW1tZWRpYXRlKHEucHJvY2Vzcyk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFN0YXJ0IHdpdGggYSBub3JtYWwgcXVldWVcbiAgICAgICAgdmFyIHEgPSBhc3luYy5xdWV1ZSh3b3JrZXIsIGNvbmN1cnJlbmN5KTtcblxuICAgICAgICAvLyBPdmVycmlkZSBwdXNoIHRvIGFjY2VwdCBzZWNvbmQgcGFyYW1ldGVyIHJlcHJlc2VudGluZyBwcmlvcml0eVxuICAgICAgICBxLnB1c2ggPSBmdW5jdGlvbiAoZGF0YSwgcHJpb3JpdHksIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICBfaW5zZXJ0KHEsIGRhdGEsIHByaW9yaXR5LCBjYWxsYmFjayk7XG4gICAgICAgIH07XG5cbiAgICAgICAgLy8gUmVtb3ZlIHVuc2hpZnQgZnVuY3Rpb25cbiAgICAgICAgZGVsZXRlIHEudW5zaGlmdDtcblxuICAgICAgICByZXR1cm4gcTtcbiAgICB9O1xuXG4gICAgYXN5bmMuY2FyZ28gPSBmdW5jdGlvbiAod29ya2VyLCBwYXlsb2FkKSB7XG4gICAgICAgIHJldHVybiBfcXVldWUod29ya2VyLCAxLCBwYXlsb2FkKTtcbiAgICB9O1xuXG4gICAgZnVuY3Rpb24gX2NvbnNvbGVfZm4obmFtZSkge1xuICAgICAgICByZXR1cm4gX3Jlc3RQYXJhbShmdW5jdGlvbiAoZm4sIGFyZ3MpIHtcbiAgICAgICAgICAgIGZuLmFwcGx5KG51bGwsIGFyZ3MuY29uY2F0KFtfcmVzdFBhcmFtKGZ1bmN0aW9uIChlcnIsIGFyZ3MpIHtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGNvbnNvbGUgPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb25zb2xlLmVycm9yKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihlcnIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKGNvbnNvbGVbbmFtZV0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIF9hcnJheUVhY2goYXJncywgZnVuY3Rpb24gKHgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlW25hbWVdKHgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KV0pKTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGFzeW5jLmxvZyA9IF9jb25zb2xlX2ZuKCdsb2cnKTtcbiAgICBhc3luYy5kaXIgPSBfY29uc29sZV9mbignZGlyJyk7XG4gICAgLyphc3luYy5pbmZvID0gX2NvbnNvbGVfZm4oJ2luZm8nKTtcbiAgICBhc3luYy53YXJuID0gX2NvbnNvbGVfZm4oJ3dhcm4nKTtcbiAgICBhc3luYy5lcnJvciA9IF9jb25zb2xlX2ZuKCdlcnJvcicpOyovXG5cbiAgICBhc3luYy5tZW1vaXplID0gZnVuY3Rpb24gKGZuLCBoYXNoZXIpIHtcbiAgICAgICAgdmFyIG1lbW8gPSB7fTtcbiAgICAgICAgdmFyIHF1ZXVlcyA9IHt9O1xuICAgICAgICBoYXNoZXIgPSBoYXNoZXIgfHwgaWRlbnRpdHk7XG4gICAgICAgIHZhciBtZW1vaXplZCA9IF9yZXN0UGFyYW0oZnVuY3Rpb24gbWVtb2l6ZWQoYXJncykge1xuICAgICAgICAgICAgdmFyIGNhbGxiYWNrID0gYXJncy5wb3AoKTtcbiAgICAgICAgICAgIHZhciBrZXkgPSBoYXNoZXIuYXBwbHkobnVsbCwgYXJncyk7XG4gICAgICAgICAgICBpZiAoa2V5IGluIG1lbW8pIHtcbiAgICAgICAgICAgICAgICBhc3luYy5zZXRJbW1lZGlhdGUoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjay5hcHBseShudWxsLCBtZW1vW2tleV0pO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoa2V5IGluIHF1ZXVlcykge1xuICAgICAgICAgICAgICAgIHF1ZXVlc1trZXldLnB1c2goY2FsbGJhY2spO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgcXVldWVzW2tleV0gPSBbY2FsbGJhY2tdO1xuICAgICAgICAgICAgICAgIGZuLmFwcGx5KG51bGwsIGFyZ3MuY29uY2F0KFtfcmVzdFBhcmFtKGZ1bmN0aW9uIChhcmdzKSB7XG4gICAgICAgICAgICAgICAgICAgIG1lbW9ba2V5XSA9IGFyZ3M7XG4gICAgICAgICAgICAgICAgICAgIHZhciBxID0gcXVldWVzW2tleV07XG4gICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBxdWV1ZXNba2V5XTtcbiAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDAsIGwgPSBxLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgcVtpXS5hcHBseShudWxsLCBhcmdzKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pXSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgbWVtb2l6ZWQubWVtbyA9IG1lbW87XG4gICAgICAgIG1lbW9pemVkLnVubWVtb2l6ZWQgPSBmbjtcbiAgICAgICAgcmV0dXJuIG1lbW9pemVkO1xuICAgIH07XG5cbiAgICBhc3luYy51bm1lbW9pemUgPSBmdW5jdGlvbiAoZm4pIHtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiAoZm4udW5tZW1vaXplZCB8fCBmbikuYXBwbHkobnVsbCwgYXJndW1lbnRzKTtcbiAgICAgICAgfTtcbiAgICB9O1xuXG4gICAgZnVuY3Rpb24gX3RpbWVzKG1hcHBlcikge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKGNvdW50LCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIG1hcHBlcihfcmFuZ2UoY291bnQpLCBpdGVyYXRvciwgY2FsbGJhY2spO1xuICAgICAgICB9O1xuICAgIH1cblxuICAgIGFzeW5jLnRpbWVzID0gX3RpbWVzKGFzeW5jLm1hcCk7XG4gICAgYXN5bmMudGltZXNTZXJpZXMgPSBfdGltZXMoYXN5bmMubWFwU2VyaWVzKTtcbiAgICBhc3luYy50aW1lc0xpbWl0ID0gZnVuY3Rpb24gKGNvdW50LCBsaW1pdCwgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgIHJldHVybiBhc3luYy5tYXBMaW1pdChfcmFuZ2UoY291bnQpLCBsaW1pdCwgaXRlcmF0b3IsIGNhbGxiYWNrKTtcbiAgICB9O1xuXG4gICAgYXN5bmMuc2VxID0gZnVuY3Rpb24gKC8qIGZ1bmN0aW9ucy4uLiAqLykge1xuICAgICAgICB2YXIgZm5zID0gYXJndW1lbnRzO1xuICAgICAgICByZXR1cm4gX3Jlc3RQYXJhbShmdW5jdGlvbiAoYXJncykge1xuICAgICAgICAgICAgdmFyIHRoYXQgPSB0aGlzO1xuXG4gICAgICAgICAgICB2YXIgY2FsbGJhY2sgPSBhcmdzW2FyZ3MubGVuZ3RoIC0gMV07XG4gICAgICAgICAgICBpZiAodHlwZW9mIGNhbGxiYWNrID09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICBhcmdzLnBvcCgpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBjYWxsYmFjayA9IG5vb3A7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGFzeW5jLnJlZHVjZShmbnMsIGFyZ3MsIGZ1bmN0aW9uIChuZXdhcmdzLCBmbiwgY2IpIHtcbiAgICAgICAgICAgICAgICBmbi5hcHBseSh0aGF0LCBuZXdhcmdzLmNvbmNhdChbX3Jlc3RQYXJhbShmdW5jdGlvbiAoZXJyLCBuZXh0YXJncykge1xuICAgICAgICAgICAgICAgICAgICBjYihlcnIsIG5leHRhcmdzKTtcbiAgICAgICAgICAgICAgICB9KV0pKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBmdW5jdGlvbiAoZXJyLCByZXN1bHRzKSB7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2suYXBwbHkodGhhdCwgW2Vycl0uY29uY2F0KHJlc3VsdHMpKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9O1xuXG4gICAgYXN5bmMuY29tcG9zZSA9IGZ1bmN0aW9uICgvKiBmdW5jdGlvbnMuLi4gKi8pIHtcbiAgICAgICAgcmV0dXJuIGFzeW5jLnNlcS5hcHBseShudWxsLCBBcnJheS5wcm90b3R5cGUucmV2ZXJzZS5jYWxsKGFyZ3VtZW50cykpO1xuICAgIH07XG5cblxuICAgIGZ1bmN0aW9uIF9hcHBseUVhY2goZWFjaGZuKSB7XG4gICAgICAgIHJldHVybiBfcmVzdFBhcmFtKGZ1bmN0aW9uKGZucywgYXJncykge1xuICAgICAgICAgICAgdmFyIGdvID0gX3Jlc3RQYXJhbShmdW5jdGlvbihhcmdzKSB7XG4gICAgICAgICAgICAgICAgdmFyIHRoYXQgPSB0aGlzO1xuICAgICAgICAgICAgICAgIHZhciBjYWxsYmFjayA9IGFyZ3MucG9wKCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGVhY2hmbihmbnMsIGZ1bmN0aW9uIChmbiwgXywgY2IpIHtcbiAgICAgICAgICAgICAgICAgICAgZm4uYXBwbHkodGhhdCwgYXJncy5jb25jYXQoW2NiXSkpO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgY2FsbGJhY2spO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBpZiAoYXJncy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZ28uYXBwbHkodGhpcywgYXJncyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZ287XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGFzeW5jLmFwcGx5RWFjaCA9IF9hcHBseUVhY2goYXN5bmMuZWFjaE9mKTtcbiAgICBhc3luYy5hcHBseUVhY2hTZXJpZXMgPSBfYXBwbHlFYWNoKGFzeW5jLmVhY2hPZlNlcmllcyk7XG5cblxuICAgIGFzeW5jLmZvcmV2ZXIgPSBmdW5jdGlvbiAoZm4sIGNhbGxiYWNrKSB7XG4gICAgICAgIHZhciBkb25lID0gb25seV9vbmNlKGNhbGxiYWNrIHx8IG5vb3ApO1xuICAgICAgICB2YXIgdGFzayA9IGVuc3VyZUFzeW5jKGZuKTtcbiAgICAgICAgZnVuY3Rpb24gbmV4dChlcnIpIHtcbiAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZG9uZShlcnIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGFzayhuZXh0KTtcbiAgICAgICAgfVxuICAgICAgICBuZXh0KCk7XG4gICAgfTtcblxuICAgIGZ1bmN0aW9uIGVuc3VyZUFzeW5jKGZuKSB7XG4gICAgICAgIHJldHVybiBfcmVzdFBhcmFtKGZ1bmN0aW9uIChhcmdzKSB7XG4gICAgICAgICAgICB2YXIgY2FsbGJhY2sgPSBhcmdzLnBvcCgpO1xuICAgICAgICAgICAgYXJncy5wdXNoKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICB2YXIgaW5uZXJBcmdzID0gYXJndW1lbnRzO1xuICAgICAgICAgICAgICAgIGlmIChzeW5jKSB7XG4gICAgICAgICAgICAgICAgICAgIGFzeW5jLnNldEltbWVkaWF0ZShmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjYWxsYmFjay5hcHBseShudWxsLCBpbm5lckFyZ3MpO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjay5hcHBseShudWxsLCBpbm5lckFyZ3MpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdmFyIHN5bmMgPSB0cnVlO1xuICAgICAgICAgICAgZm4uYXBwbHkodGhpcywgYXJncyk7XG4gICAgICAgICAgICBzeW5jID0gZmFsc2U7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGFzeW5jLmVuc3VyZUFzeW5jID0gZW5zdXJlQXN5bmM7XG5cbiAgICBhc3luYy5jb25zdGFudCA9IF9yZXN0UGFyYW0oZnVuY3Rpb24odmFsdWVzKSB7XG4gICAgICAgIHZhciBhcmdzID0gW251bGxdLmNvbmNhdCh2YWx1ZXMpO1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKGNhbGxiYWNrKSB7XG4gICAgICAgICAgICByZXR1cm4gY2FsbGJhY2suYXBwbHkodGhpcywgYXJncyk7XG4gICAgICAgIH07XG4gICAgfSk7XG5cbiAgICBhc3luYy53cmFwU3luYyA9XG4gICAgYXN5bmMuYXN5bmNpZnkgPSBmdW5jdGlvbiBhc3luY2lmeShmdW5jKSB7XG4gICAgICAgIHJldHVybiBfcmVzdFBhcmFtKGZ1bmN0aW9uIChhcmdzKSB7XG4gICAgICAgICAgICB2YXIgY2FsbGJhY2sgPSBhcmdzLnBvcCgpO1xuICAgICAgICAgICAgdmFyIHJlc3VsdDtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0ID0gZnVuYy5hcHBseSh0aGlzLCBhcmdzKTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gY2FsbGJhY2soZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBpZiByZXN1bHQgaXMgUHJvbWlzZSBvYmplY3RcbiAgICAgICAgICAgIGlmIChfaXNPYmplY3QocmVzdWx0KSAmJiB0eXBlb2YgcmVzdWx0LnRoZW4gPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICAgICAgICAgIHJlc3VsdC50aGVuKGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKG51bGwsIHZhbHVlKTtcbiAgICAgICAgICAgICAgICB9KVtcImNhdGNoXCJdKGZ1bmN0aW9uKGVycikge1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnIubWVzc2FnZSA/IGVyciA6IG5ldyBFcnJvcihlcnIpKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2sobnVsbCwgcmVzdWx0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfTtcblxuICAgIC8vIE5vZGUuanNcbiAgICBpZiAodHlwZW9mIG1vZHVsZSA9PT0gJ29iamVjdCcgJiYgbW9kdWxlLmV4cG9ydHMpIHtcbiAgICAgICAgbW9kdWxlLmV4cG9ydHMgPSBhc3luYztcbiAgICB9XG4gICAgLy8gQU1EIC8gUmVxdWlyZUpTXG4gICAgZWxzZSBpZiAodHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kKSB7XG4gICAgICAgIGRlZmluZShbXSwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIGFzeW5jO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgLy8gaW5jbHVkZWQgZGlyZWN0bHkgdmlhIDxzY3JpcHQ+IHRhZ1xuICAgIGVsc2Uge1xuICAgICAgICByb290LmFzeW5jID0gYXN5bmM7XG4gICAgfVxuXG59KCkpO1xuIiwiLy8gQ29weXJpZ2h0IEpveWVudCwgSW5jLiBhbmQgb3RoZXIgTm9kZSBjb250cmlidXRvcnMuXG4vL1xuLy8gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGFcbi8vIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGVcbi8vIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZ1xuLy8gd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLFxuLy8gZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdFxuLy8gcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlXG4vLyBmb2xsb3dpbmcgY29uZGl0aW9uczpcbi8vXG4vLyBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZFxuLy8gaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4vL1xuLy8gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTU1xuLy8gT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRlxuLy8gTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTlxuLy8gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sXG4vLyBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1Jcbi8vIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEVcbi8vIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG5cbi8vIHJlc29sdmVzIC4gYW5kIC4uIGVsZW1lbnRzIGluIGEgcGF0aCBhcnJheSB3aXRoIGRpcmVjdG9yeSBuYW1lcyB0aGVyZVxuLy8gbXVzdCBiZSBubyBzbGFzaGVzLCBlbXB0eSBlbGVtZW50cywgb3IgZGV2aWNlIG5hbWVzIChjOlxcKSBpbiB0aGUgYXJyYXlcbi8vIChzbyBhbHNvIG5vIGxlYWRpbmcgYW5kIHRyYWlsaW5nIHNsYXNoZXMgLSBpdCBkb2VzIG5vdCBkaXN0aW5ndWlzaFxuLy8gcmVsYXRpdmUgYW5kIGFic29sdXRlIHBhdGhzKVxuZnVuY3Rpb24gbm9ybWFsaXplQXJyYXkocGFydHMsIGFsbG93QWJvdmVSb290KSB7XG4gIC8vIGlmIHRoZSBwYXRoIHRyaWVzIHRvIGdvIGFib3ZlIHRoZSByb290LCBgdXBgIGVuZHMgdXAgPiAwXG4gIHZhciB1cCA9IDA7XG4gIGZvciAodmFyIGkgPSBwYXJ0cy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgIHZhciBsYXN0ID0gcGFydHNbaV07XG4gICAgaWYgKGxhc3QgPT09ICcuJykge1xuICAgICAgcGFydHMuc3BsaWNlKGksIDEpO1xuICAgIH0gZWxzZSBpZiAobGFzdCA9PT0gJy4uJykge1xuICAgICAgcGFydHMuc3BsaWNlKGksIDEpO1xuICAgICAgdXArKztcbiAgICB9IGVsc2UgaWYgKHVwKSB7XG4gICAgICBwYXJ0cy5zcGxpY2UoaSwgMSk7XG4gICAgICB1cC0tO1xuICAgIH1cbiAgfVxuXG4gIC8vIGlmIHRoZSBwYXRoIGlzIGFsbG93ZWQgdG8gZ28gYWJvdmUgdGhlIHJvb3QsIHJlc3RvcmUgbGVhZGluZyAuLnNcbiAgaWYgKGFsbG93QWJvdmVSb290KSB7XG4gICAgZm9yICg7IHVwLS07IHVwKSB7XG4gICAgICBwYXJ0cy51bnNoaWZ0KCcuLicpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBwYXJ0cztcbn1cblxuLy8gU3BsaXQgYSBmaWxlbmFtZSBpbnRvIFtyb290LCBkaXIsIGJhc2VuYW1lLCBleHRdLCB1bml4IHZlcnNpb25cbi8vICdyb290JyBpcyBqdXN0IGEgc2xhc2gsIG9yIG5vdGhpbmcuXG52YXIgc3BsaXRQYXRoUmUgPVxuICAgIC9eKFxcLz98KShbXFxzXFxTXSo/KSgoPzpcXC57MSwyfXxbXlxcL10rP3wpKFxcLlteLlxcL10qfCkpKD86W1xcL10qKSQvO1xudmFyIHNwbGl0UGF0aCA9IGZ1bmN0aW9uKGZpbGVuYW1lKSB7XG4gIHJldHVybiBzcGxpdFBhdGhSZS5leGVjKGZpbGVuYW1lKS5zbGljZSgxKTtcbn07XG5cbi8vIHBhdGgucmVzb2x2ZShbZnJvbSAuLi5dLCB0bylcbi8vIHBvc2l4IHZlcnNpb25cbmV4cG9ydHMucmVzb2x2ZSA9IGZ1bmN0aW9uKCkge1xuICB2YXIgcmVzb2x2ZWRQYXRoID0gJycsXG4gICAgICByZXNvbHZlZEFic29sdXRlID0gZmFsc2U7XG5cbiAgZm9yICh2YXIgaSA9IGFyZ3VtZW50cy5sZW5ndGggLSAxOyBpID49IC0xICYmICFyZXNvbHZlZEFic29sdXRlOyBpLS0pIHtcbiAgICB2YXIgcGF0aCA9IChpID49IDApID8gYXJndW1lbnRzW2ldIDogcHJvY2Vzcy5jd2QoKTtcblxuICAgIC8vIFNraXAgZW1wdHkgYW5kIGludmFsaWQgZW50cmllc1xuICAgIGlmICh0eXBlb2YgcGF0aCAhPT0gJ3N0cmluZycpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0FyZ3VtZW50cyB0byBwYXRoLnJlc29sdmUgbXVzdCBiZSBzdHJpbmdzJyk7XG4gICAgfSBlbHNlIGlmICghcGF0aCkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgcmVzb2x2ZWRQYXRoID0gcGF0aCArICcvJyArIHJlc29sdmVkUGF0aDtcbiAgICByZXNvbHZlZEFic29sdXRlID0gcGF0aC5jaGFyQXQoMCkgPT09ICcvJztcbiAgfVxuXG4gIC8vIEF0IHRoaXMgcG9pbnQgdGhlIHBhdGggc2hvdWxkIGJlIHJlc29sdmVkIHRvIGEgZnVsbCBhYnNvbHV0ZSBwYXRoLCBidXRcbiAgLy8gaGFuZGxlIHJlbGF0aXZlIHBhdGhzIHRvIGJlIHNhZmUgKG1pZ2h0IGhhcHBlbiB3aGVuIHByb2Nlc3MuY3dkKCkgZmFpbHMpXG5cbiAgLy8gTm9ybWFsaXplIHRoZSBwYXRoXG4gIHJlc29sdmVkUGF0aCA9IG5vcm1hbGl6ZUFycmF5KGZpbHRlcihyZXNvbHZlZFBhdGguc3BsaXQoJy8nKSwgZnVuY3Rpb24ocCkge1xuICAgIHJldHVybiAhIXA7XG4gIH0pLCAhcmVzb2x2ZWRBYnNvbHV0ZSkuam9pbignLycpO1xuXG4gIHJldHVybiAoKHJlc29sdmVkQWJzb2x1dGUgPyAnLycgOiAnJykgKyByZXNvbHZlZFBhdGgpIHx8ICcuJztcbn07XG5cbi8vIHBhdGgubm9ybWFsaXplKHBhdGgpXG4vLyBwb3NpeCB2ZXJzaW9uXG5leHBvcnRzLm5vcm1hbGl6ZSA9IGZ1bmN0aW9uKHBhdGgpIHtcbiAgdmFyIGlzQWJzb2x1dGUgPSBleHBvcnRzLmlzQWJzb2x1dGUocGF0aCksXG4gICAgICB0cmFpbGluZ1NsYXNoID0gc3Vic3RyKHBhdGgsIC0xKSA9PT0gJy8nO1xuXG4gIC8vIE5vcm1hbGl6ZSB0aGUgcGF0aFxuICBwYXRoID0gbm9ybWFsaXplQXJyYXkoZmlsdGVyKHBhdGguc3BsaXQoJy8nKSwgZnVuY3Rpb24ocCkge1xuICAgIHJldHVybiAhIXA7XG4gIH0pLCAhaXNBYnNvbHV0ZSkuam9pbignLycpO1xuXG4gIGlmICghcGF0aCAmJiAhaXNBYnNvbHV0ZSkge1xuICAgIHBhdGggPSAnLic7XG4gIH1cbiAgaWYgKHBhdGggJiYgdHJhaWxpbmdTbGFzaCkge1xuICAgIHBhdGggKz0gJy8nO1xuICB9XG5cbiAgcmV0dXJuIChpc0Fic29sdXRlID8gJy8nIDogJycpICsgcGF0aDtcbn07XG5cbi8vIHBvc2l4IHZlcnNpb25cbmV4cG9ydHMuaXNBYnNvbHV0ZSA9IGZ1bmN0aW9uKHBhdGgpIHtcbiAgcmV0dXJuIHBhdGguY2hhckF0KDApID09PSAnLyc7XG59O1xuXG4vLyBwb3NpeCB2ZXJzaW9uXG5leHBvcnRzLmpvaW4gPSBmdW5jdGlvbigpIHtcbiAgdmFyIHBhdGhzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAwKTtcbiAgcmV0dXJuIGV4cG9ydHMubm9ybWFsaXplKGZpbHRlcihwYXRocywgZnVuY3Rpb24ocCwgaW5kZXgpIHtcbiAgICBpZiAodHlwZW9mIHAgIT09ICdzdHJpbmcnKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdBcmd1bWVudHMgdG8gcGF0aC5qb2luIG11c3QgYmUgc3RyaW5ncycpO1xuICAgIH1cbiAgICByZXR1cm4gcDtcbiAgfSkuam9pbignLycpKTtcbn07XG5cblxuLy8gcGF0aC5yZWxhdGl2ZShmcm9tLCB0bylcbi8vIHBvc2l4IHZlcnNpb25cbmV4cG9ydHMucmVsYXRpdmUgPSBmdW5jdGlvbihmcm9tLCB0bykge1xuICBmcm9tID0gZXhwb3J0cy5yZXNvbHZlKGZyb20pLnN1YnN0cigxKTtcbiAgdG8gPSBleHBvcnRzLnJlc29sdmUodG8pLnN1YnN0cigxKTtcblxuICBmdW5jdGlvbiB0cmltKGFycikge1xuICAgIHZhciBzdGFydCA9IDA7XG4gICAgZm9yICg7IHN0YXJ0IDwgYXJyLmxlbmd0aDsgc3RhcnQrKykge1xuICAgICAgaWYgKGFycltzdGFydF0gIT09ICcnKSBicmVhaztcbiAgICB9XG5cbiAgICB2YXIgZW5kID0gYXJyLmxlbmd0aCAtIDE7XG4gICAgZm9yICg7IGVuZCA+PSAwOyBlbmQtLSkge1xuICAgICAgaWYgKGFycltlbmRdICE9PSAnJykgYnJlYWs7XG4gICAgfVxuXG4gICAgaWYgKHN0YXJ0ID4gZW5kKSByZXR1cm4gW107XG4gICAgcmV0dXJuIGFyci5zbGljZShzdGFydCwgZW5kIC0gc3RhcnQgKyAxKTtcbiAgfVxuXG4gIHZhciBmcm9tUGFydHMgPSB0cmltKGZyb20uc3BsaXQoJy8nKSk7XG4gIHZhciB0b1BhcnRzID0gdHJpbSh0by5zcGxpdCgnLycpKTtcblxuICB2YXIgbGVuZ3RoID0gTWF0aC5taW4oZnJvbVBhcnRzLmxlbmd0aCwgdG9QYXJ0cy5sZW5ndGgpO1xuICB2YXIgc2FtZVBhcnRzTGVuZ3RoID0gbGVuZ3RoO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgaWYgKGZyb21QYXJ0c1tpXSAhPT0gdG9QYXJ0c1tpXSkge1xuICAgICAgc2FtZVBhcnRzTGVuZ3RoID0gaTtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuXG4gIHZhciBvdXRwdXRQYXJ0cyA9IFtdO1xuICBmb3IgKHZhciBpID0gc2FtZVBhcnRzTGVuZ3RoOyBpIDwgZnJvbVBhcnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgb3V0cHV0UGFydHMucHVzaCgnLi4nKTtcbiAgfVxuXG4gIG91dHB1dFBhcnRzID0gb3V0cHV0UGFydHMuY29uY2F0KHRvUGFydHMuc2xpY2Uoc2FtZVBhcnRzTGVuZ3RoKSk7XG5cbiAgcmV0dXJuIG91dHB1dFBhcnRzLmpvaW4oJy8nKTtcbn07XG5cbmV4cG9ydHMuc2VwID0gJy8nO1xuZXhwb3J0cy5kZWxpbWl0ZXIgPSAnOic7XG5cbmV4cG9ydHMuZGlybmFtZSA9IGZ1bmN0aW9uKHBhdGgpIHtcbiAgdmFyIHJlc3VsdCA9IHNwbGl0UGF0aChwYXRoKSxcbiAgICAgIHJvb3QgPSByZXN1bHRbMF0sXG4gICAgICBkaXIgPSByZXN1bHRbMV07XG5cbiAgaWYgKCFyb290ICYmICFkaXIpIHtcbiAgICAvLyBObyBkaXJuYW1lIHdoYXRzb2V2ZXJcbiAgICByZXR1cm4gJy4nO1xuICB9XG5cbiAgaWYgKGRpcikge1xuICAgIC8vIEl0IGhhcyBhIGRpcm5hbWUsIHN0cmlwIHRyYWlsaW5nIHNsYXNoXG4gICAgZGlyID0gZGlyLnN1YnN0cigwLCBkaXIubGVuZ3RoIC0gMSk7XG4gIH1cblxuICByZXR1cm4gcm9vdCArIGRpcjtcbn07XG5cblxuZXhwb3J0cy5iYXNlbmFtZSA9IGZ1bmN0aW9uKHBhdGgsIGV4dCkge1xuICB2YXIgZiA9IHNwbGl0UGF0aChwYXRoKVsyXTtcbiAgLy8gVE9ETzogbWFrZSB0aGlzIGNvbXBhcmlzb24gY2FzZS1pbnNlbnNpdGl2ZSBvbiB3aW5kb3dzP1xuICBpZiAoZXh0ICYmIGYuc3Vic3RyKC0xICogZXh0Lmxlbmd0aCkgPT09IGV4dCkge1xuICAgIGYgPSBmLnN1YnN0cigwLCBmLmxlbmd0aCAtIGV4dC5sZW5ndGgpO1xuICB9XG4gIHJldHVybiBmO1xufTtcblxuXG5leHBvcnRzLmV4dG5hbWUgPSBmdW5jdGlvbihwYXRoKSB7XG4gIHJldHVybiBzcGxpdFBhdGgocGF0aClbM107XG59O1xuXG5mdW5jdGlvbiBmaWx0ZXIgKHhzLCBmKSB7XG4gICAgaWYgKHhzLmZpbHRlcikgcmV0dXJuIHhzLmZpbHRlcihmKTtcbiAgICB2YXIgcmVzID0gW107XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB4cy5sZW5ndGg7IGkrKykge1xuICAgICAgICBpZiAoZih4c1tpXSwgaSwgeHMpKSByZXMucHVzaCh4c1tpXSk7XG4gICAgfVxuICAgIHJldHVybiByZXM7XG59XG5cbi8vIFN0cmluZy5wcm90b3R5cGUuc3Vic3RyIC0gbmVnYXRpdmUgaW5kZXggZG9uJ3Qgd29yayBpbiBJRThcbnZhciBzdWJzdHIgPSAnYWInLnN1YnN0cigtMSkgPT09ICdiJ1xuICAgID8gZnVuY3Rpb24gKHN0ciwgc3RhcnQsIGxlbikgeyByZXR1cm4gc3RyLnN1YnN0cihzdGFydCwgbGVuKSB9XG4gICAgOiBmdW5jdGlvbiAoc3RyLCBzdGFydCwgbGVuKSB7XG4gICAgICAgIGlmIChzdGFydCA8IDApIHN0YXJ0ID0gc3RyLmxlbmd0aCArIHN0YXJ0O1xuICAgICAgICByZXR1cm4gc3RyLnN1YnN0cihzdGFydCwgbGVuKTtcbiAgICB9XG47XG4iLCIvLyBzaGltIGZvciB1c2luZyBwcm9jZXNzIGluIGJyb3dzZXJcblxudmFyIHByb2Nlc3MgPSBtb2R1bGUuZXhwb3J0cyA9IHt9O1xudmFyIHF1ZXVlID0gW107XG52YXIgZHJhaW5pbmcgPSBmYWxzZTtcbnZhciBjdXJyZW50UXVldWU7XG52YXIgcXVldWVJbmRleCA9IC0xO1xuXG5mdW5jdGlvbiBjbGVhblVwTmV4dFRpY2soKSB7XG4gICAgZHJhaW5pbmcgPSBmYWxzZTtcbiAgICBpZiAoY3VycmVudFF1ZXVlLmxlbmd0aCkge1xuICAgICAgICBxdWV1ZSA9IGN1cnJlbnRRdWV1ZS5jb25jYXQocXVldWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHF1ZXVlSW5kZXggPSAtMTtcbiAgICB9XG4gICAgaWYgKHF1ZXVlLmxlbmd0aCkge1xuICAgICAgICBkcmFpblF1ZXVlKCk7XG4gICAgfVxufVxuXG5mdW5jdGlvbiBkcmFpblF1ZXVlKCkge1xuICAgIGlmIChkcmFpbmluZykge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIHZhciB0aW1lb3V0ID0gc2V0VGltZW91dChjbGVhblVwTmV4dFRpY2spO1xuICAgIGRyYWluaW5nID0gdHJ1ZTtcblxuICAgIHZhciBsZW4gPSBxdWV1ZS5sZW5ndGg7XG4gICAgd2hpbGUobGVuKSB7XG4gICAgICAgIGN1cnJlbnRRdWV1ZSA9IHF1ZXVlO1xuICAgICAgICBxdWV1ZSA9IFtdO1xuICAgICAgICB3aGlsZSAoKytxdWV1ZUluZGV4IDwgbGVuKSB7XG4gICAgICAgICAgICBpZiAoY3VycmVudFF1ZXVlKSB7XG4gICAgICAgICAgICAgICAgY3VycmVudFF1ZXVlW3F1ZXVlSW5kZXhdLnJ1bigpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHF1ZXVlSW5kZXggPSAtMTtcbiAgICAgICAgbGVuID0gcXVldWUubGVuZ3RoO1xuICAgIH1cbiAgICBjdXJyZW50UXVldWUgPSBudWxsO1xuICAgIGRyYWluaW5nID0gZmFsc2U7XG4gICAgY2xlYXJUaW1lb3V0KHRpbWVvdXQpO1xufVxuXG5wcm9jZXNzLm5leHRUaWNrID0gZnVuY3Rpb24gKGZ1bikge1xuICAgIHZhciBhcmdzID0gbmV3IEFycmF5KGFyZ3VtZW50cy5sZW5ndGggLSAxKTtcbiAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGFyZ3NbaSAtIDFdID0gYXJndW1lbnRzW2ldO1xuICAgICAgICB9XG4gICAgfVxuICAgIHF1ZXVlLnB1c2gobmV3IEl0ZW0oZnVuLCBhcmdzKSk7XG4gICAgaWYgKHF1ZXVlLmxlbmd0aCA9PT0gMSAmJiAhZHJhaW5pbmcpIHtcbiAgICAgICAgc2V0VGltZW91dChkcmFpblF1ZXVlLCAwKTtcbiAgICB9XG59O1xuXG4vLyB2OCBsaWtlcyBwcmVkaWN0aWJsZSBvYmplY3RzXG5mdW5jdGlvbiBJdGVtKGZ1biwgYXJyYXkpIHtcbiAgICB0aGlzLmZ1biA9IGZ1bjtcbiAgICB0aGlzLmFycmF5ID0gYXJyYXk7XG59XG5JdGVtLnByb3RvdHlwZS5ydW4gPSBmdW5jdGlvbiAoKSB7XG4gICAgdGhpcy5mdW4uYXBwbHkobnVsbCwgdGhpcy5hcnJheSk7XG59O1xucHJvY2Vzcy50aXRsZSA9ICdicm93c2VyJztcbnByb2Nlc3MuYnJvd3NlciA9IHRydWU7XG5wcm9jZXNzLmVudiA9IHt9O1xucHJvY2Vzcy5hcmd2ID0gW107XG5wcm9jZXNzLnZlcnNpb24gPSAnJzsgLy8gZW1wdHkgc3RyaW5nIHRvIGF2b2lkIHJlZ2V4cCBpc3N1ZXNcbnByb2Nlc3MudmVyc2lvbnMgPSB7fTtcblxuZnVuY3Rpb24gbm9vcCgpIHt9XG5cbnByb2Nlc3Mub24gPSBub29wO1xucHJvY2Vzcy5hZGRMaXN0ZW5lciA9IG5vb3A7XG5wcm9jZXNzLm9uY2UgPSBub29wO1xucHJvY2Vzcy5vZmYgPSBub29wO1xucHJvY2Vzcy5yZW1vdmVMaXN0ZW5lciA9IG5vb3A7XG5wcm9jZXNzLnJlbW92ZUFsbExpc3RlbmVycyA9IG5vb3A7XG5wcm9jZXNzLmVtaXQgPSBub29wO1xuXG5wcm9jZXNzLmJpbmRpbmcgPSBmdW5jdGlvbiAobmFtZSkge1xuICAgIHRocm93IG5ldyBFcnJvcigncHJvY2Vzcy5iaW5kaW5nIGlzIG5vdCBzdXBwb3J0ZWQnKTtcbn07XG5cbnByb2Nlc3MuY3dkID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gJy8nIH07XG5wcm9jZXNzLmNoZGlyID0gZnVuY3Rpb24gKGRpcikge1xuICAgIHRocm93IG5ldyBFcnJvcigncHJvY2Vzcy5jaGRpciBpcyBub3Qgc3VwcG9ydGVkJyk7XG59O1xucHJvY2Vzcy51bWFzayA9IGZ1bmN0aW9uKCkgeyByZXR1cm4gMDsgfTtcbiIsIi8qISBodHRwczovL210aHMuYmUvcHVueWNvZGUgdjEuNC4wIGJ5IEBtYXRoaWFzICovXG47KGZ1bmN0aW9uKHJvb3QpIHtcblxuXHQvKiogRGV0ZWN0IGZyZWUgdmFyaWFibGVzICovXG5cdHZhciBmcmVlRXhwb3J0cyA9IHR5cGVvZiBleHBvcnRzID09ICdvYmplY3QnICYmIGV4cG9ydHMgJiZcblx0XHQhZXhwb3J0cy5ub2RlVHlwZSAmJiBleHBvcnRzO1xuXHR2YXIgZnJlZU1vZHVsZSA9IHR5cGVvZiBtb2R1bGUgPT0gJ29iamVjdCcgJiYgbW9kdWxlICYmXG5cdFx0IW1vZHVsZS5ub2RlVHlwZSAmJiBtb2R1bGU7XG5cdHZhciBmcmVlR2xvYmFsID0gdHlwZW9mIGdsb2JhbCA9PSAnb2JqZWN0JyAmJiBnbG9iYWw7XG5cdGlmIChcblx0XHRmcmVlR2xvYmFsLmdsb2JhbCA9PT0gZnJlZUdsb2JhbCB8fFxuXHRcdGZyZWVHbG9iYWwud2luZG93ID09PSBmcmVlR2xvYmFsIHx8XG5cdFx0ZnJlZUdsb2JhbC5zZWxmID09PSBmcmVlR2xvYmFsXG5cdCkge1xuXHRcdHJvb3QgPSBmcmVlR2xvYmFsO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoZSBgcHVueWNvZGVgIG9iamVjdC5cblx0ICogQG5hbWUgcHVueWNvZGVcblx0ICogQHR5cGUgT2JqZWN0XG5cdCAqL1xuXHR2YXIgcHVueWNvZGUsXG5cblx0LyoqIEhpZ2hlc3QgcG9zaXRpdmUgc2lnbmVkIDMyLWJpdCBmbG9hdCB2YWx1ZSAqL1xuXHRtYXhJbnQgPSAyMTQ3NDgzNjQ3LCAvLyBha2EuIDB4N0ZGRkZGRkYgb3IgMl4zMS0xXG5cblx0LyoqIEJvb3RzdHJpbmcgcGFyYW1ldGVycyAqL1xuXHRiYXNlID0gMzYsXG5cdHRNaW4gPSAxLFxuXHR0TWF4ID0gMjYsXG5cdHNrZXcgPSAzOCxcblx0ZGFtcCA9IDcwMCxcblx0aW5pdGlhbEJpYXMgPSA3Mixcblx0aW5pdGlhbE4gPSAxMjgsIC8vIDB4ODBcblx0ZGVsaW1pdGVyID0gJy0nLCAvLyAnXFx4MkQnXG5cblx0LyoqIFJlZ3VsYXIgZXhwcmVzc2lvbnMgKi9cblx0cmVnZXhQdW55Y29kZSA9IC9eeG4tLS8sXG5cdHJlZ2V4Tm9uQVNDSUkgPSAvW15cXHgyMC1cXHg3RV0vLCAvLyB1bnByaW50YWJsZSBBU0NJSSBjaGFycyArIG5vbi1BU0NJSSBjaGFyc1xuXHRyZWdleFNlcGFyYXRvcnMgPSAvW1xceDJFXFx1MzAwMlxcdUZGMEVcXHVGRjYxXS9nLCAvLyBSRkMgMzQ5MCBzZXBhcmF0b3JzXG5cblx0LyoqIEVycm9yIG1lc3NhZ2VzICovXG5cdGVycm9ycyA9IHtcblx0XHQnb3ZlcmZsb3cnOiAnT3ZlcmZsb3c6IGlucHV0IG5lZWRzIHdpZGVyIGludGVnZXJzIHRvIHByb2Nlc3MnLFxuXHRcdCdub3QtYmFzaWMnOiAnSWxsZWdhbCBpbnB1dCA+PSAweDgwIChub3QgYSBiYXNpYyBjb2RlIHBvaW50KScsXG5cdFx0J2ludmFsaWQtaW5wdXQnOiAnSW52YWxpZCBpbnB1dCdcblx0fSxcblxuXHQvKiogQ29udmVuaWVuY2Ugc2hvcnRjdXRzICovXG5cdGJhc2VNaW51c1RNaW4gPSBiYXNlIC0gdE1pbixcblx0Zmxvb3IgPSBNYXRoLmZsb29yLFxuXHRzdHJpbmdGcm9tQ2hhckNvZGUgPSBTdHJpbmcuZnJvbUNoYXJDb2RlLFxuXG5cdC8qKiBUZW1wb3JhcnkgdmFyaWFibGUgKi9cblx0a2V5O1xuXG5cdC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuXG5cdC8qKlxuXHQgKiBBIGdlbmVyaWMgZXJyb3IgdXRpbGl0eSBmdW5jdGlvbi5cblx0ICogQHByaXZhdGVcblx0ICogQHBhcmFtIHtTdHJpbmd9IHR5cGUgVGhlIGVycm9yIHR5cGUuXG5cdCAqIEByZXR1cm5zIHtFcnJvcn0gVGhyb3dzIGEgYFJhbmdlRXJyb3JgIHdpdGggdGhlIGFwcGxpY2FibGUgZXJyb3IgbWVzc2FnZS5cblx0ICovXG5cdGZ1bmN0aW9uIGVycm9yKHR5cGUpIHtcblx0XHR0aHJvdyBuZXcgUmFuZ2VFcnJvcihlcnJvcnNbdHlwZV0pO1xuXHR9XG5cblx0LyoqXG5cdCAqIEEgZ2VuZXJpYyBgQXJyYXkjbWFwYCB1dGlsaXR5IGZ1bmN0aW9uLlxuXHQgKiBAcHJpdmF0ZVxuXHQgKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gaXRlcmF0ZSBvdmVyLlxuXHQgKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFjayBUaGUgZnVuY3Rpb24gdGhhdCBnZXRzIGNhbGxlZCBmb3IgZXZlcnkgYXJyYXlcblx0ICogaXRlbS5cblx0ICogQHJldHVybnMge0FycmF5fSBBIG5ldyBhcnJheSBvZiB2YWx1ZXMgcmV0dXJuZWQgYnkgdGhlIGNhbGxiYWNrIGZ1bmN0aW9uLlxuXHQgKi9cblx0ZnVuY3Rpb24gbWFwKGFycmF5LCBmbikge1xuXHRcdHZhciBsZW5ndGggPSBhcnJheS5sZW5ndGg7XG5cdFx0dmFyIHJlc3VsdCA9IFtdO1xuXHRcdHdoaWxlIChsZW5ndGgtLSkge1xuXHRcdFx0cmVzdWx0W2xlbmd0aF0gPSBmbihhcnJheVtsZW5ndGhdKTtcblx0XHR9XG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fVxuXG5cdC8qKlxuXHQgKiBBIHNpbXBsZSBgQXJyYXkjbWFwYC1saWtlIHdyYXBwZXIgdG8gd29yayB3aXRoIGRvbWFpbiBuYW1lIHN0cmluZ3Mgb3IgZW1haWxcblx0ICogYWRkcmVzc2VzLlxuXHQgKiBAcHJpdmF0ZVxuXHQgKiBAcGFyYW0ge1N0cmluZ30gZG9tYWluIFRoZSBkb21haW4gbmFtZSBvciBlbWFpbCBhZGRyZXNzLlxuXHQgKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFjayBUaGUgZnVuY3Rpb24gdGhhdCBnZXRzIGNhbGxlZCBmb3IgZXZlcnlcblx0ICogY2hhcmFjdGVyLlxuXHQgKiBAcmV0dXJucyB7QXJyYXl9IEEgbmV3IHN0cmluZyBvZiBjaGFyYWN0ZXJzIHJldHVybmVkIGJ5IHRoZSBjYWxsYmFja1xuXHQgKiBmdW5jdGlvbi5cblx0ICovXG5cdGZ1bmN0aW9uIG1hcERvbWFpbihzdHJpbmcsIGZuKSB7XG5cdFx0dmFyIHBhcnRzID0gc3RyaW5nLnNwbGl0KCdAJyk7XG5cdFx0dmFyIHJlc3VsdCA9ICcnO1xuXHRcdGlmIChwYXJ0cy5sZW5ndGggPiAxKSB7XG5cdFx0XHQvLyBJbiBlbWFpbCBhZGRyZXNzZXMsIG9ubHkgdGhlIGRvbWFpbiBuYW1lIHNob3VsZCBiZSBwdW55Y29kZWQuIExlYXZlXG5cdFx0XHQvLyB0aGUgbG9jYWwgcGFydCAoaS5lLiBldmVyeXRoaW5nIHVwIHRvIGBAYCkgaW50YWN0LlxuXHRcdFx0cmVzdWx0ID0gcGFydHNbMF0gKyAnQCc7XG5cdFx0XHRzdHJpbmcgPSBwYXJ0c1sxXTtcblx0XHR9XG5cdFx0Ly8gQXZvaWQgYHNwbGl0KHJlZ2V4KWAgZm9yIElFOCBjb21wYXRpYmlsaXR5LiBTZWUgIzE3LlxuXHRcdHN0cmluZyA9IHN0cmluZy5yZXBsYWNlKHJlZ2V4U2VwYXJhdG9ycywgJ1xceDJFJyk7XG5cdFx0dmFyIGxhYmVscyA9IHN0cmluZy5zcGxpdCgnLicpO1xuXHRcdHZhciBlbmNvZGVkID0gbWFwKGxhYmVscywgZm4pLmpvaW4oJy4nKTtcblx0XHRyZXR1cm4gcmVzdWx0ICsgZW5jb2RlZDtcblx0fVxuXG5cdC8qKlxuXHQgKiBDcmVhdGVzIGFuIGFycmF5IGNvbnRhaW5pbmcgdGhlIG51bWVyaWMgY29kZSBwb2ludHMgb2YgZWFjaCBVbmljb2RlXG5cdCAqIGNoYXJhY3RlciBpbiB0aGUgc3RyaW5nLiBXaGlsZSBKYXZhU2NyaXB0IHVzZXMgVUNTLTIgaW50ZXJuYWxseSxcblx0ICogdGhpcyBmdW5jdGlvbiB3aWxsIGNvbnZlcnQgYSBwYWlyIG9mIHN1cnJvZ2F0ZSBoYWx2ZXMgKGVhY2ggb2Ygd2hpY2hcblx0ICogVUNTLTIgZXhwb3NlcyBhcyBzZXBhcmF0ZSBjaGFyYWN0ZXJzKSBpbnRvIGEgc2luZ2xlIGNvZGUgcG9pbnQsXG5cdCAqIG1hdGNoaW5nIFVURi0xNi5cblx0ICogQHNlZSBgcHVueWNvZGUudWNzMi5lbmNvZGVgXG5cdCAqIEBzZWUgPGh0dHBzOi8vbWF0aGlhc2J5bmVucy5iZS9ub3Rlcy9qYXZhc2NyaXB0LWVuY29kaW5nPlxuXHQgKiBAbWVtYmVyT2YgcHVueWNvZGUudWNzMlxuXHQgKiBAbmFtZSBkZWNvZGVcblx0ICogQHBhcmFtIHtTdHJpbmd9IHN0cmluZyBUaGUgVW5pY29kZSBpbnB1dCBzdHJpbmcgKFVDUy0yKS5cblx0ICogQHJldHVybnMge0FycmF5fSBUaGUgbmV3IGFycmF5IG9mIGNvZGUgcG9pbnRzLlxuXHQgKi9cblx0ZnVuY3Rpb24gdWNzMmRlY29kZShzdHJpbmcpIHtcblx0XHR2YXIgb3V0cHV0ID0gW10sXG5cdFx0ICAgIGNvdW50ZXIgPSAwLFxuXHRcdCAgICBsZW5ndGggPSBzdHJpbmcubGVuZ3RoLFxuXHRcdCAgICB2YWx1ZSxcblx0XHQgICAgZXh0cmE7XG5cdFx0d2hpbGUgKGNvdW50ZXIgPCBsZW5ndGgpIHtcblx0XHRcdHZhbHVlID0gc3RyaW5nLmNoYXJDb2RlQXQoY291bnRlcisrKTtcblx0XHRcdGlmICh2YWx1ZSA+PSAweEQ4MDAgJiYgdmFsdWUgPD0gMHhEQkZGICYmIGNvdW50ZXIgPCBsZW5ndGgpIHtcblx0XHRcdFx0Ly8gaGlnaCBzdXJyb2dhdGUsIGFuZCB0aGVyZSBpcyBhIG5leHQgY2hhcmFjdGVyXG5cdFx0XHRcdGV4dHJhID0gc3RyaW5nLmNoYXJDb2RlQXQoY291bnRlcisrKTtcblx0XHRcdFx0aWYgKChleHRyYSAmIDB4RkMwMCkgPT0gMHhEQzAwKSB7IC8vIGxvdyBzdXJyb2dhdGVcblx0XHRcdFx0XHRvdXRwdXQucHVzaCgoKHZhbHVlICYgMHgzRkYpIDw8IDEwKSArIChleHRyYSAmIDB4M0ZGKSArIDB4MTAwMDApO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdC8vIHVubWF0Y2hlZCBzdXJyb2dhdGU7IG9ubHkgYXBwZW5kIHRoaXMgY29kZSB1bml0LCBpbiBjYXNlIHRoZSBuZXh0XG5cdFx0XHRcdFx0Ly8gY29kZSB1bml0IGlzIHRoZSBoaWdoIHN1cnJvZ2F0ZSBvZiBhIHN1cnJvZ2F0ZSBwYWlyXG5cdFx0XHRcdFx0b3V0cHV0LnB1c2godmFsdWUpO1xuXHRcdFx0XHRcdGNvdW50ZXItLTtcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0b3V0cHV0LnB1c2godmFsdWUpO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gb3V0cHV0O1xuXHR9XG5cblx0LyoqXG5cdCAqIENyZWF0ZXMgYSBzdHJpbmcgYmFzZWQgb24gYW4gYXJyYXkgb2YgbnVtZXJpYyBjb2RlIHBvaW50cy5cblx0ICogQHNlZSBgcHVueWNvZGUudWNzMi5kZWNvZGVgXG5cdCAqIEBtZW1iZXJPZiBwdW55Y29kZS51Y3MyXG5cdCAqIEBuYW1lIGVuY29kZVxuXHQgKiBAcGFyYW0ge0FycmF5fSBjb2RlUG9pbnRzIFRoZSBhcnJheSBvZiBudW1lcmljIGNvZGUgcG9pbnRzLlxuXHQgKiBAcmV0dXJucyB7U3RyaW5nfSBUaGUgbmV3IFVuaWNvZGUgc3RyaW5nIChVQ1MtMikuXG5cdCAqL1xuXHRmdW5jdGlvbiB1Y3MyZW5jb2RlKGFycmF5KSB7XG5cdFx0cmV0dXJuIG1hcChhcnJheSwgZnVuY3Rpb24odmFsdWUpIHtcblx0XHRcdHZhciBvdXRwdXQgPSAnJztcblx0XHRcdGlmICh2YWx1ZSA+IDB4RkZGRikge1xuXHRcdFx0XHR2YWx1ZSAtPSAweDEwMDAwO1xuXHRcdFx0XHRvdXRwdXQgKz0gc3RyaW5nRnJvbUNoYXJDb2RlKHZhbHVlID4+PiAxMCAmIDB4M0ZGIHwgMHhEODAwKTtcblx0XHRcdFx0dmFsdWUgPSAweERDMDAgfCB2YWx1ZSAmIDB4M0ZGO1xuXHRcdFx0fVxuXHRcdFx0b3V0cHV0ICs9IHN0cmluZ0Zyb21DaGFyQ29kZSh2YWx1ZSk7XG5cdFx0XHRyZXR1cm4gb3V0cHV0O1xuXHRcdH0pLmpvaW4oJycpO1xuXHR9XG5cblx0LyoqXG5cdCAqIENvbnZlcnRzIGEgYmFzaWMgY29kZSBwb2ludCBpbnRvIGEgZGlnaXQvaW50ZWdlci5cblx0ICogQHNlZSBgZGlnaXRUb0Jhc2ljKClgXG5cdCAqIEBwcml2YXRlXG5cdCAqIEBwYXJhbSB7TnVtYmVyfSBjb2RlUG9pbnQgVGhlIGJhc2ljIG51bWVyaWMgY29kZSBwb2ludCB2YWx1ZS5cblx0ICogQHJldHVybnMge051bWJlcn0gVGhlIG51bWVyaWMgdmFsdWUgb2YgYSBiYXNpYyBjb2RlIHBvaW50IChmb3IgdXNlIGluXG5cdCAqIHJlcHJlc2VudGluZyBpbnRlZ2VycykgaW4gdGhlIHJhbmdlIGAwYCB0byBgYmFzZSAtIDFgLCBvciBgYmFzZWAgaWZcblx0ICogdGhlIGNvZGUgcG9pbnQgZG9lcyBub3QgcmVwcmVzZW50IGEgdmFsdWUuXG5cdCAqL1xuXHRmdW5jdGlvbiBiYXNpY1RvRGlnaXQoY29kZVBvaW50KSB7XG5cdFx0aWYgKGNvZGVQb2ludCAtIDQ4IDwgMTApIHtcblx0XHRcdHJldHVybiBjb2RlUG9pbnQgLSAyMjtcblx0XHR9XG5cdFx0aWYgKGNvZGVQb2ludCAtIDY1IDwgMjYpIHtcblx0XHRcdHJldHVybiBjb2RlUG9pbnQgLSA2NTtcblx0XHR9XG5cdFx0aWYgKGNvZGVQb2ludCAtIDk3IDwgMjYpIHtcblx0XHRcdHJldHVybiBjb2RlUG9pbnQgLSA5Nztcblx0XHR9XG5cdFx0cmV0dXJuIGJhc2U7XG5cdH1cblxuXHQvKipcblx0ICogQ29udmVydHMgYSBkaWdpdC9pbnRlZ2VyIGludG8gYSBiYXNpYyBjb2RlIHBvaW50LlxuXHQgKiBAc2VlIGBiYXNpY1RvRGlnaXQoKWBcblx0ICogQHByaXZhdGVcblx0ICogQHBhcmFtIHtOdW1iZXJ9IGRpZ2l0IFRoZSBudW1lcmljIHZhbHVlIG9mIGEgYmFzaWMgY29kZSBwb2ludC5cblx0ICogQHJldHVybnMge051bWJlcn0gVGhlIGJhc2ljIGNvZGUgcG9pbnQgd2hvc2UgdmFsdWUgKHdoZW4gdXNlZCBmb3Jcblx0ICogcmVwcmVzZW50aW5nIGludGVnZXJzKSBpcyBgZGlnaXRgLCB3aGljaCBuZWVkcyB0byBiZSBpbiB0aGUgcmFuZ2Vcblx0ICogYDBgIHRvIGBiYXNlIC0gMWAuIElmIGBmbGFnYCBpcyBub24temVybywgdGhlIHVwcGVyY2FzZSBmb3JtIGlzXG5cdCAqIHVzZWQ7IGVsc2UsIHRoZSBsb3dlcmNhc2UgZm9ybSBpcyB1c2VkLiBUaGUgYmVoYXZpb3IgaXMgdW5kZWZpbmVkXG5cdCAqIGlmIGBmbGFnYCBpcyBub24temVybyBhbmQgYGRpZ2l0YCBoYXMgbm8gdXBwZXJjYXNlIGZvcm0uXG5cdCAqL1xuXHRmdW5jdGlvbiBkaWdpdFRvQmFzaWMoZGlnaXQsIGZsYWcpIHtcblx0XHQvLyAgMC4uMjUgbWFwIHRvIEFTQ0lJIGEuLnogb3IgQS4uWlxuXHRcdC8vIDI2Li4zNSBtYXAgdG8gQVNDSUkgMC4uOVxuXHRcdHJldHVybiBkaWdpdCArIDIyICsgNzUgKiAoZGlnaXQgPCAyNikgLSAoKGZsYWcgIT0gMCkgPDwgNSk7XG5cdH1cblxuXHQvKipcblx0ICogQmlhcyBhZGFwdGF0aW9uIGZ1bmN0aW9uIGFzIHBlciBzZWN0aW9uIDMuNCBvZiBSRkMgMzQ5Mi5cblx0ICogaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzM0OTIjc2VjdGlvbi0zLjRcblx0ICogQHByaXZhdGVcblx0ICovXG5cdGZ1bmN0aW9uIGFkYXB0KGRlbHRhLCBudW1Qb2ludHMsIGZpcnN0VGltZSkge1xuXHRcdHZhciBrID0gMDtcblx0XHRkZWx0YSA9IGZpcnN0VGltZSA/IGZsb29yKGRlbHRhIC8gZGFtcCkgOiBkZWx0YSA+PiAxO1xuXHRcdGRlbHRhICs9IGZsb29yKGRlbHRhIC8gbnVtUG9pbnRzKTtcblx0XHRmb3IgKC8qIG5vIGluaXRpYWxpemF0aW9uICovOyBkZWx0YSA+IGJhc2VNaW51c1RNaW4gKiB0TWF4ID4+IDE7IGsgKz0gYmFzZSkge1xuXHRcdFx0ZGVsdGEgPSBmbG9vcihkZWx0YSAvIGJhc2VNaW51c1RNaW4pO1xuXHRcdH1cblx0XHRyZXR1cm4gZmxvb3IoayArIChiYXNlTWludXNUTWluICsgMSkgKiBkZWx0YSAvIChkZWx0YSArIHNrZXcpKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBDb252ZXJ0cyBhIFB1bnljb2RlIHN0cmluZyBvZiBBU0NJSS1vbmx5IHN5bWJvbHMgdG8gYSBzdHJpbmcgb2YgVW5pY29kZVxuXHQgKiBzeW1ib2xzLlxuXHQgKiBAbWVtYmVyT2YgcHVueWNvZGVcblx0ICogQHBhcmFtIHtTdHJpbmd9IGlucHV0IFRoZSBQdW55Y29kZSBzdHJpbmcgb2YgQVNDSUktb25seSBzeW1ib2xzLlxuXHQgKiBAcmV0dXJucyB7U3RyaW5nfSBUaGUgcmVzdWx0aW5nIHN0cmluZyBvZiBVbmljb2RlIHN5bWJvbHMuXG5cdCAqL1xuXHRmdW5jdGlvbiBkZWNvZGUoaW5wdXQpIHtcblx0XHQvLyBEb24ndCB1c2UgVUNTLTJcblx0XHR2YXIgb3V0cHV0ID0gW10sXG5cdFx0ICAgIGlucHV0TGVuZ3RoID0gaW5wdXQubGVuZ3RoLFxuXHRcdCAgICBvdXQsXG5cdFx0ICAgIGkgPSAwLFxuXHRcdCAgICBuID0gaW5pdGlhbE4sXG5cdFx0ICAgIGJpYXMgPSBpbml0aWFsQmlhcyxcblx0XHQgICAgYmFzaWMsXG5cdFx0ICAgIGosXG5cdFx0ICAgIGluZGV4LFxuXHRcdCAgICBvbGRpLFxuXHRcdCAgICB3LFxuXHRcdCAgICBrLFxuXHRcdCAgICBkaWdpdCxcblx0XHQgICAgdCxcblx0XHQgICAgLyoqIENhY2hlZCBjYWxjdWxhdGlvbiByZXN1bHRzICovXG5cdFx0ICAgIGJhc2VNaW51c1Q7XG5cblx0XHQvLyBIYW5kbGUgdGhlIGJhc2ljIGNvZGUgcG9pbnRzOiBsZXQgYGJhc2ljYCBiZSB0aGUgbnVtYmVyIG9mIGlucHV0IGNvZGVcblx0XHQvLyBwb2ludHMgYmVmb3JlIHRoZSBsYXN0IGRlbGltaXRlciwgb3IgYDBgIGlmIHRoZXJlIGlzIG5vbmUsIHRoZW4gY29weVxuXHRcdC8vIHRoZSBmaXJzdCBiYXNpYyBjb2RlIHBvaW50cyB0byB0aGUgb3V0cHV0LlxuXG5cdFx0YmFzaWMgPSBpbnB1dC5sYXN0SW5kZXhPZihkZWxpbWl0ZXIpO1xuXHRcdGlmIChiYXNpYyA8IDApIHtcblx0XHRcdGJhc2ljID0gMDtcblx0XHR9XG5cblx0XHRmb3IgKGogPSAwOyBqIDwgYmFzaWM7ICsraikge1xuXHRcdFx0Ly8gaWYgaXQncyBub3QgYSBiYXNpYyBjb2RlIHBvaW50XG5cdFx0XHRpZiAoaW5wdXQuY2hhckNvZGVBdChqKSA+PSAweDgwKSB7XG5cdFx0XHRcdGVycm9yKCdub3QtYmFzaWMnKTtcblx0XHRcdH1cblx0XHRcdG91dHB1dC5wdXNoKGlucHV0LmNoYXJDb2RlQXQoaikpO1xuXHRcdH1cblxuXHRcdC8vIE1haW4gZGVjb2RpbmcgbG9vcDogc3RhcnQganVzdCBhZnRlciB0aGUgbGFzdCBkZWxpbWl0ZXIgaWYgYW55IGJhc2ljIGNvZGVcblx0XHQvLyBwb2ludHMgd2VyZSBjb3BpZWQ7IHN0YXJ0IGF0IHRoZSBiZWdpbm5pbmcgb3RoZXJ3aXNlLlxuXG5cdFx0Zm9yIChpbmRleCA9IGJhc2ljID4gMCA/IGJhc2ljICsgMSA6IDA7IGluZGV4IDwgaW5wdXRMZW5ndGg7IC8qIG5vIGZpbmFsIGV4cHJlc3Npb24gKi8pIHtcblxuXHRcdFx0Ly8gYGluZGV4YCBpcyB0aGUgaW5kZXggb2YgdGhlIG5leHQgY2hhcmFjdGVyIHRvIGJlIGNvbnN1bWVkLlxuXHRcdFx0Ly8gRGVjb2RlIGEgZ2VuZXJhbGl6ZWQgdmFyaWFibGUtbGVuZ3RoIGludGVnZXIgaW50byBgZGVsdGFgLFxuXHRcdFx0Ly8gd2hpY2ggZ2V0cyBhZGRlZCB0byBgaWAuIFRoZSBvdmVyZmxvdyBjaGVja2luZyBpcyBlYXNpZXJcblx0XHRcdC8vIGlmIHdlIGluY3JlYXNlIGBpYCBhcyB3ZSBnbywgdGhlbiBzdWJ0cmFjdCBvZmYgaXRzIHN0YXJ0aW5nXG5cdFx0XHQvLyB2YWx1ZSBhdCB0aGUgZW5kIHRvIG9idGFpbiBgZGVsdGFgLlxuXHRcdFx0Zm9yIChvbGRpID0gaSwgdyA9IDEsIGsgPSBiYXNlOyAvKiBubyBjb25kaXRpb24gKi87IGsgKz0gYmFzZSkge1xuXG5cdFx0XHRcdGlmIChpbmRleCA+PSBpbnB1dExlbmd0aCkge1xuXHRcdFx0XHRcdGVycm9yKCdpbnZhbGlkLWlucHV0Jyk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRkaWdpdCA9IGJhc2ljVG9EaWdpdChpbnB1dC5jaGFyQ29kZUF0KGluZGV4KyspKTtcblxuXHRcdFx0XHRpZiAoZGlnaXQgPj0gYmFzZSB8fCBkaWdpdCA+IGZsb29yKChtYXhJbnQgLSBpKSAvIHcpKSB7XG5cdFx0XHRcdFx0ZXJyb3IoJ292ZXJmbG93Jyk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpICs9IGRpZ2l0ICogdztcblx0XHRcdFx0dCA9IGsgPD0gYmlhcyA/IHRNaW4gOiAoayA+PSBiaWFzICsgdE1heCA/IHRNYXggOiBrIC0gYmlhcyk7XG5cblx0XHRcdFx0aWYgKGRpZ2l0IDwgdCkge1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0YmFzZU1pbnVzVCA9IGJhc2UgLSB0O1xuXHRcdFx0XHRpZiAodyA+IGZsb29yKG1heEludCAvIGJhc2VNaW51c1QpKSB7XG5cdFx0XHRcdFx0ZXJyb3IoJ292ZXJmbG93Jyk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHR3ICo9IGJhc2VNaW51c1Q7XG5cblx0XHRcdH1cblxuXHRcdFx0b3V0ID0gb3V0cHV0Lmxlbmd0aCArIDE7XG5cdFx0XHRiaWFzID0gYWRhcHQoaSAtIG9sZGksIG91dCwgb2xkaSA9PSAwKTtcblxuXHRcdFx0Ly8gYGlgIHdhcyBzdXBwb3NlZCB0byB3cmFwIGFyb3VuZCBmcm9tIGBvdXRgIHRvIGAwYCxcblx0XHRcdC8vIGluY3JlbWVudGluZyBgbmAgZWFjaCB0aW1lLCBzbyB3ZSdsbCBmaXggdGhhdCBub3c6XG5cdFx0XHRpZiAoZmxvb3IoaSAvIG91dCkgPiBtYXhJbnQgLSBuKSB7XG5cdFx0XHRcdGVycm9yKCdvdmVyZmxvdycpO1xuXHRcdFx0fVxuXG5cdFx0XHRuICs9IGZsb29yKGkgLyBvdXQpO1xuXHRcdFx0aSAlPSBvdXQ7XG5cblx0XHRcdC8vIEluc2VydCBgbmAgYXQgcG9zaXRpb24gYGlgIG9mIHRoZSBvdXRwdXRcblx0XHRcdG91dHB1dC5zcGxpY2UoaSsrLCAwLCBuKTtcblxuXHRcdH1cblxuXHRcdHJldHVybiB1Y3MyZW5jb2RlKG91dHB1dCk7XG5cdH1cblxuXHQvKipcblx0ICogQ29udmVydHMgYSBzdHJpbmcgb2YgVW5pY29kZSBzeW1ib2xzIChlLmcuIGEgZG9tYWluIG5hbWUgbGFiZWwpIHRvIGFcblx0ICogUHVueWNvZGUgc3RyaW5nIG9mIEFTQ0lJLW9ubHkgc3ltYm9scy5cblx0ICogQG1lbWJlck9mIHB1bnljb2RlXG5cdCAqIEBwYXJhbSB7U3RyaW5nfSBpbnB1dCBUaGUgc3RyaW5nIG9mIFVuaWNvZGUgc3ltYm9scy5cblx0ICogQHJldHVybnMge1N0cmluZ30gVGhlIHJlc3VsdGluZyBQdW55Y29kZSBzdHJpbmcgb2YgQVNDSUktb25seSBzeW1ib2xzLlxuXHQgKi9cblx0ZnVuY3Rpb24gZW5jb2RlKGlucHV0KSB7XG5cdFx0dmFyIG4sXG5cdFx0ICAgIGRlbHRhLFxuXHRcdCAgICBoYW5kbGVkQ1BDb3VudCxcblx0XHQgICAgYmFzaWNMZW5ndGgsXG5cdFx0ICAgIGJpYXMsXG5cdFx0ICAgIGosXG5cdFx0ICAgIG0sXG5cdFx0ICAgIHEsXG5cdFx0ICAgIGssXG5cdFx0ICAgIHQsXG5cdFx0ICAgIGN1cnJlbnRWYWx1ZSxcblx0XHQgICAgb3V0cHV0ID0gW10sXG5cdFx0ICAgIC8qKiBgaW5wdXRMZW5ndGhgIHdpbGwgaG9sZCB0aGUgbnVtYmVyIG9mIGNvZGUgcG9pbnRzIGluIGBpbnB1dGAuICovXG5cdFx0ICAgIGlucHV0TGVuZ3RoLFxuXHRcdCAgICAvKiogQ2FjaGVkIGNhbGN1bGF0aW9uIHJlc3VsdHMgKi9cblx0XHQgICAgaGFuZGxlZENQQ291bnRQbHVzT25lLFxuXHRcdCAgICBiYXNlTWludXNULFxuXHRcdCAgICBxTWludXNUO1xuXG5cdFx0Ly8gQ29udmVydCB0aGUgaW5wdXQgaW4gVUNTLTIgdG8gVW5pY29kZVxuXHRcdGlucHV0ID0gdWNzMmRlY29kZShpbnB1dCk7XG5cblx0XHQvLyBDYWNoZSB0aGUgbGVuZ3RoXG5cdFx0aW5wdXRMZW5ndGggPSBpbnB1dC5sZW5ndGg7XG5cblx0XHQvLyBJbml0aWFsaXplIHRoZSBzdGF0ZVxuXHRcdG4gPSBpbml0aWFsTjtcblx0XHRkZWx0YSA9IDA7XG5cdFx0YmlhcyA9IGluaXRpYWxCaWFzO1xuXG5cdFx0Ly8gSGFuZGxlIHRoZSBiYXNpYyBjb2RlIHBvaW50c1xuXHRcdGZvciAoaiA9IDA7IGogPCBpbnB1dExlbmd0aDsgKytqKSB7XG5cdFx0XHRjdXJyZW50VmFsdWUgPSBpbnB1dFtqXTtcblx0XHRcdGlmIChjdXJyZW50VmFsdWUgPCAweDgwKSB7XG5cdFx0XHRcdG91dHB1dC5wdXNoKHN0cmluZ0Zyb21DaGFyQ29kZShjdXJyZW50VmFsdWUpKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRoYW5kbGVkQ1BDb3VudCA9IGJhc2ljTGVuZ3RoID0gb3V0cHV0Lmxlbmd0aDtcblxuXHRcdC8vIGBoYW5kbGVkQ1BDb3VudGAgaXMgdGhlIG51bWJlciBvZiBjb2RlIHBvaW50cyB0aGF0IGhhdmUgYmVlbiBoYW5kbGVkO1xuXHRcdC8vIGBiYXNpY0xlbmd0aGAgaXMgdGhlIG51bWJlciBvZiBiYXNpYyBjb2RlIHBvaW50cy5cblxuXHRcdC8vIEZpbmlzaCB0aGUgYmFzaWMgc3RyaW5nIC0gaWYgaXQgaXMgbm90IGVtcHR5IC0gd2l0aCBhIGRlbGltaXRlclxuXHRcdGlmIChiYXNpY0xlbmd0aCkge1xuXHRcdFx0b3V0cHV0LnB1c2goZGVsaW1pdGVyKTtcblx0XHR9XG5cblx0XHQvLyBNYWluIGVuY29kaW5nIGxvb3A6XG5cdFx0d2hpbGUgKGhhbmRsZWRDUENvdW50IDwgaW5wdXRMZW5ndGgpIHtcblxuXHRcdFx0Ly8gQWxsIG5vbi1iYXNpYyBjb2RlIHBvaW50cyA8IG4gaGF2ZSBiZWVuIGhhbmRsZWQgYWxyZWFkeS4gRmluZCB0aGUgbmV4dFxuXHRcdFx0Ly8gbGFyZ2VyIG9uZTpcblx0XHRcdGZvciAobSA9IG1heEludCwgaiA9IDA7IGogPCBpbnB1dExlbmd0aDsgKytqKSB7XG5cdFx0XHRcdGN1cnJlbnRWYWx1ZSA9IGlucHV0W2pdO1xuXHRcdFx0XHRpZiAoY3VycmVudFZhbHVlID49IG4gJiYgY3VycmVudFZhbHVlIDwgbSkge1xuXHRcdFx0XHRcdG0gPSBjdXJyZW50VmFsdWU7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0Ly8gSW5jcmVhc2UgYGRlbHRhYCBlbm91Z2ggdG8gYWR2YW5jZSB0aGUgZGVjb2RlcidzIDxuLGk+IHN0YXRlIHRvIDxtLDA+LFxuXHRcdFx0Ly8gYnV0IGd1YXJkIGFnYWluc3Qgb3ZlcmZsb3dcblx0XHRcdGhhbmRsZWRDUENvdW50UGx1c09uZSA9IGhhbmRsZWRDUENvdW50ICsgMTtcblx0XHRcdGlmIChtIC0gbiA+IGZsb29yKChtYXhJbnQgLSBkZWx0YSkgLyBoYW5kbGVkQ1BDb3VudFBsdXNPbmUpKSB7XG5cdFx0XHRcdGVycm9yKCdvdmVyZmxvdycpO1xuXHRcdFx0fVxuXG5cdFx0XHRkZWx0YSArPSAobSAtIG4pICogaGFuZGxlZENQQ291bnRQbHVzT25lO1xuXHRcdFx0biA9IG07XG5cblx0XHRcdGZvciAoaiA9IDA7IGogPCBpbnB1dExlbmd0aDsgKytqKSB7XG5cdFx0XHRcdGN1cnJlbnRWYWx1ZSA9IGlucHV0W2pdO1xuXG5cdFx0XHRcdGlmIChjdXJyZW50VmFsdWUgPCBuICYmICsrZGVsdGEgPiBtYXhJbnQpIHtcblx0XHRcdFx0XHRlcnJvcignb3ZlcmZsb3cnKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGlmIChjdXJyZW50VmFsdWUgPT0gbikge1xuXHRcdFx0XHRcdC8vIFJlcHJlc2VudCBkZWx0YSBhcyBhIGdlbmVyYWxpemVkIHZhcmlhYmxlLWxlbmd0aCBpbnRlZ2VyXG5cdFx0XHRcdFx0Zm9yIChxID0gZGVsdGEsIGsgPSBiYXNlOyAvKiBubyBjb25kaXRpb24gKi87IGsgKz0gYmFzZSkge1xuXHRcdFx0XHRcdFx0dCA9IGsgPD0gYmlhcyA/IHRNaW4gOiAoayA+PSBiaWFzICsgdE1heCA/IHRNYXggOiBrIC0gYmlhcyk7XG5cdFx0XHRcdFx0XHRpZiAocSA8IHQpIHtcblx0XHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRxTWludXNUID0gcSAtIHQ7XG5cdFx0XHRcdFx0XHRiYXNlTWludXNUID0gYmFzZSAtIHQ7XG5cdFx0XHRcdFx0XHRvdXRwdXQucHVzaChcblx0XHRcdFx0XHRcdFx0c3RyaW5nRnJvbUNoYXJDb2RlKGRpZ2l0VG9CYXNpYyh0ICsgcU1pbnVzVCAlIGJhc2VNaW51c1QsIDApKVxuXHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdHEgPSBmbG9vcihxTWludXNUIC8gYmFzZU1pbnVzVCk7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0b3V0cHV0LnB1c2goc3RyaW5nRnJvbUNoYXJDb2RlKGRpZ2l0VG9CYXNpYyhxLCAwKSkpO1xuXHRcdFx0XHRcdGJpYXMgPSBhZGFwdChkZWx0YSwgaGFuZGxlZENQQ291bnRQbHVzT25lLCBoYW5kbGVkQ1BDb3VudCA9PSBiYXNpY0xlbmd0aCk7XG5cdFx0XHRcdFx0ZGVsdGEgPSAwO1xuXHRcdFx0XHRcdCsraGFuZGxlZENQQ291bnQ7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0KytkZWx0YTtcblx0XHRcdCsrbjtcblxuXHRcdH1cblx0XHRyZXR1cm4gb3V0cHV0LmpvaW4oJycpO1xuXHR9XG5cblx0LyoqXG5cdCAqIENvbnZlcnRzIGEgUHVueWNvZGUgc3RyaW5nIHJlcHJlc2VudGluZyBhIGRvbWFpbiBuYW1lIG9yIGFuIGVtYWlsIGFkZHJlc3Ncblx0ICogdG8gVW5pY29kZS4gT25seSB0aGUgUHVueWNvZGVkIHBhcnRzIG9mIHRoZSBpbnB1dCB3aWxsIGJlIGNvbnZlcnRlZCwgaS5lLlxuXHQgKiBpdCBkb2Vzbid0IG1hdHRlciBpZiB5b3UgY2FsbCBpdCBvbiBhIHN0cmluZyB0aGF0IGhhcyBhbHJlYWR5IGJlZW5cblx0ICogY29udmVydGVkIHRvIFVuaWNvZGUuXG5cdCAqIEBtZW1iZXJPZiBwdW55Y29kZVxuXHQgKiBAcGFyYW0ge1N0cmluZ30gaW5wdXQgVGhlIFB1bnljb2RlZCBkb21haW4gbmFtZSBvciBlbWFpbCBhZGRyZXNzIHRvXG5cdCAqIGNvbnZlcnQgdG8gVW5pY29kZS5cblx0ICogQHJldHVybnMge1N0cmluZ30gVGhlIFVuaWNvZGUgcmVwcmVzZW50YXRpb24gb2YgdGhlIGdpdmVuIFB1bnljb2RlXG5cdCAqIHN0cmluZy5cblx0ICovXG5cdGZ1bmN0aW9uIHRvVW5pY29kZShpbnB1dCkge1xuXHRcdHJldHVybiBtYXBEb21haW4oaW5wdXQsIGZ1bmN0aW9uKHN0cmluZykge1xuXHRcdFx0cmV0dXJuIHJlZ2V4UHVueWNvZGUudGVzdChzdHJpbmcpXG5cdFx0XHRcdD8gZGVjb2RlKHN0cmluZy5zbGljZSg0KS50b0xvd2VyQ2FzZSgpKVxuXHRcdFx0XHQ6IHN0cmluZztcblx0XHR9KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBDb252ZXJ0cyBhIFVuaWNvZGUgc3RyaW5nIHJlcHJlc2VudGluZyBhIGRvbWFpbiBuYW1lIG9yIGFuIGVtYWlsIGFkZHJlc3MgdG9cblx0ICogUHVueWNvZGUuIE9ubHkgdGhlIG5vbi1BU0NJSSBwYXJ0cyBvZiB0aGUgZG9tYWluIG5hbWUgd2lsbCBiZSBjb252ZXJ0ZWQsXG5cdCAqIGkuZS4gaXQgZG9lc24ndCBtYXR0ZXIgaWYgeW91IGNhbGwgaXQgd2l0aCBhIGRvbWFpbiB0aGF0J3MgYWxyZWFkeSBpblxuXHQgKiBBU0NJSS5cblx0ICogQG1lbWJlck9mIHB1bnljb2RlXG5cdCAqIEBwYXJhbSB7U3RyaW5nfSBpbnB1dCBUaGUgZG9tYWluIG5hbWUgb3IgZW1haWwgYWRkcmVzcyB0byBjb252ZXJ0LCBhcyBhXG5cdCAqIFVuaWNvZGUgc3RyaW5nLlxuXHQgKiBAcmV0dXJucyB7U3RyaW5nfSBUaGUgUHVueWNvZGUgcmVwcmVzZW50YXRpb24gb2YgdGhlIGdpdmVuIGRvbWFpbiBuYW1lIG9yXG5cdCAqIGVtYWlsIGFkZHJlc3MuXG5cdCAqL1xuXHRmdW5jdGlvbiB0b0FTQ0lJKGlucHV0KSB7XG5cdFx0cmV0dXJuIG1hcERvbWFpbihpbnB1dCwgZnVuY3Rpb24oc3RyaW5nKSB7XG5cdFx0XHRyZXR1cm4gcmVnZXhOb25BU0NJSS50ZXN0KHN0cmluZylcblx0XHRcdFx0PyAneG4tLScgKyBlbmNvZGUoc3RyaW5nKVxuXHRcdFx0XHQ6IHN0cmluZztcblx0XHR9KTtcblx0fVxuXG5cdC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuXG5cdC8qKiBEZWZpbmUgdGhlIHB1YmxpYyBBUEkgKi9cblx0cHVueWNvZGUgPSB7XG5cdFx0LyoqXG5cdFx0ICogQSBzdHJpbmcgcmVwcmVzZW50aW5nIHRoZSBjdXJyZW50IFB1bnljb2RlLmpzIHZlcnNpb24gbnVtYmVyLlxuXHRcdCAqIEBtZW1iZXJPZiBwdW55Y29kZVxuXHRcdCAqIEB0eXBlIFN0cmluZ1xuXHRcdCAqL1xuXHRcdCd2ZXJzaW9uJzogJzEuMy4yJyxcblx0XHQvKipcblx0XHQgKiBBbiBvYmplY3Qgb2YgbWV0aG9kcyB0byBjb252ZXJ0IGZyb20gSmF2YVNjcmlwdCdzIGludGVybmFsIGNoYXJhY3RlclxuXHRcdCAqIHJlcHJlc2VudGF0aW9uIChVQ1MtMikgdG8gVW5pY29kZSBjb2RlIHBvaW50cywgYW5kIGJhY2suXG5cdFx0ICogQHNlZSA8aHR0cHM6Ly9tYXRoaWFzYnluZW5zLmJlL25vdGVzL2phdmFzY3JpcHQtZW5jb2Rpbmc+XG5cdFx0ICogQG1lbWJlck9mIHB1bnljb2RlXG5cdFx0ICogQHR5cGUgT2JqZWN0XG5cdFx0ICovXG5cdFx0J3VjczInOiB7XG5cdFx0XHQnZGVjb2RlJzogdWNzMmRlY29kZSxcblx0XHRcdCdlbmNvZGUnOiB1Y3MyZW5jb2RlXG5cdFx0fSxcblx0XHQnZGVjb2RlJzogZGVjb2RlLFxuXHRcdCdlbmNvZGUnOiBlbmNvZGUsXG5cdFx0J3RvQVNDSUknOiB0b0FTQ0lJLFxuXHRcdCd0b1VuaWNvZGUnOiB0b1VuaWNvZGVcblx0fTtcblxuXHQvKiogRXhwb3NlIGBwdW55Y29kZWAgKi9cblx0Ly8gU29tZSBBTUQgYnVpbGQgb3B0aW1pemVycywgbGlrZSByLmpzLCBjaGVjayBmb3Igc3BlY2lmaWMgY29uZGl0aW9uIHBhdHRlcm5zXG5cdC8vIGxpa2UgdGhlIGZvbGxvd2luZzpcblx0aWYgKFxuXHRcdHR5cGVvZiBkZWZpbmUgPT0gJ2Z1bmN0aW9uJyAmJlxuXHRcdHR5cGVvZiBkZWZpbmUuYW1kID09ICdvYmplY3QnICYmXG5cdFx0ZGVmaW5lLmFtZFxuXHQpIHtcblx0XHRkZWZpbmUoJ3B1bnljb2RlJywgZnVuY3Rpb24oKSB7XG5cdFx0XHRyZXR1cm4gcHVueWNvZGU7XG5cdFx0fSk7XG5cdH0gZWxzZSBpZiAoZnJlZUV4cG9ydHMgJiYgZnJlZU1vZHVsZSkge1xuXHRcdGlmIChtb2R1bGUuZXhwb3J0cyA9PSBmcmVlRXhwb3J0cykge1xuXHRcdFx0Ly8gaW4gTm9kZS5qcywgaW8uanMsIG9yIFJpbmdvSlMgdjAuOC4wK1xuXHRcdFx0ZnJlZU1vZHVsZS5leHBvcnRzID0gcHVueWNvZGU7XG5cdFx0fSBlbHNlIHtcblx0XHRcdC8vIGluIE5hcndoYWwgb3IgUmluZ29KUyB2MC43LjAtXG5cdFx0XHRmb3IgKGtleSBpbiBwdW55Y29kZSkge1xuXHRcdFx0XHRwdW55Y29kZS5oYXNPd25Qcm9wZXJ0eShrZXkpICYmIChmcmVlRXhwb3J0c1trZXldID0gcHVueWNvZGVba2V5XSk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9IGVsc2Uge1xuXHRcdC8vIGluIFJoaW5vIG9yIGEgd2ViIGJyb3dzZXJcblx0XHRyb290LnB1bnljb2RlID0gcHVueWNvZGU7XG5cdH1cblxufSh0aGlzKSk7XG4iLCIvLyBDb3B5cmlnaHQgSm95ZW50LCBJbmMuIGFuZCBvdGhlciBOb2RlIGNvbnRyaWJ1dG9ycy5cbi8vXG4vLyBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYVxuLy8gY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZVxuLy8gXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nXG4vLyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsXG4vLyBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0XG4vLyBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGVcbi8vIGZvbGxvd2luZyBjb25kaXRpb25zOlxuLy9cbi8vIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkXG4vLyBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbi8vXG4vLyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTXG4vLyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GXG4vLyBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOXG4vLyBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSxcbi8vIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUlxuLy8gT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRVxuLy8gVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cblxuJ3VzZSBzdHJpY3QnO1xuXG4vLyBJZiBvYmouaGFzT3duUHJvcGVydHkgaGFzIGJlZW4gb3ZlcnJpZGRlbiwgdGhlbiBjYWxsaW5nXG4vLyBvYmouaGFzT3duUHJvcGVydHkocHJvcCkgd2lsbCBicmVhay5cbi8vIFNlZTogaHR0cHM6Ly9naXRodWIuY29tL2pveWVudC9ub2RlL2lzc3Vlcy8xNzA3XG5mdW5jdGlvbiBoYXNPd25Qcm9wZXJ0eShvYmosIHByb3ApIHtcbiAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmosIHByb3ApO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKHFzLCBzZXAsIGVxLCBvcHRpb25zKSB7XG4gIHNlcCA9IHNlcCB8fCAnJic7XG4gIGVxID0gZXEgfHwgJz0nO1xuICB2YXIgb2JqID0ge307XG5cbiAgaWYgKHR5cGVvZiBxcyAhPT0gJ3N0cmluZycgfHwgcXMubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIG9iajtcbiAgfVxuXG4gIHZhciByZWdleHAgPSAvXFwrL2c7XG4gIHFzID0gcXMuc3BsaXQoc2VwKTtcblxuICB2YXIgbWF4S2V5cyA9IDEwMDA7XG4gIGlmIChvcHRpb25zICYmIHR5cGVvZiBvcHRpb25zLm1heEtleXMgPT09ICdudW1iZXInKSB7XG4gICAgbWF4S2V5cyA9IG9wdGlvbnMubWF4S2V5cztcbiAgfVxuXG4gIHZhciBsZW4gPSBxcy5sZW5ndGg7XG4gIC8vIG1heEtleXMgPD0gMCBtZWFucyB0aGF0IHdlIHNob3VsZCBub3QgbGltaXQga2V5cyBjb3VudFxuICBpZiAobWF4S2V5cyA+IDAgJiYgbGVuID4gbWF4S2V5cykge1xuICAgIGxlbiA9IG1heEtleXM7XG4gIH1cblxuICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgKytpKSB7XG4gICAgdmFyIHggPSBxc1tpXS5yZXBsYWNlKHJlZ2V4cCwgJyUyMCcpLFxuICAgICAgICBpZHggPSB4LmluZGV4T2YoZXEpLFxuICAgICAgICBrc3RyLCB2c3RyLCBrLCB2O1xuXG4gICAgaWYgKGlkeCA+PSAwKSB7XG4gICAgICBrc3RyID0geC5zdWJzdHIoMCwgaWR4KTtcbiAgICAgIHZzdHIgPSB4LnN1YnN0cihpZHggKyAxKTtcbiAgICB9IGVsc2Uge1xuICAgICAga3N0ciA9IHg7XG4gICAgICB2c3RyID0gJyc7XG4gICAgfVxuXG4gICAgayA9IGRlY29kZVVSSUNvbXBvbmVudChrc3RyKTtcbiAgICB2ID0gZGVjb2RlVVJJQ29tcG9uZW50KHZzdHIpO1xuXG4gICAgaWYgKCFoYXNPd25Qcm9wZXJ0eShvYmosIGspKSB7XG4gICAgICBvYmpba10gPSB2O1xuICAgIH0gZWxzZSBpZiAoaXNBcnJheShvYmpba10pKSB7XG4gICAgICBvYmpba10ucHVzaCh2KTtcbiAgICB9IGVsc2Uge1xuICAgICAgb2JqW2tdID0gW29ialtrXSwgdl07XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG9iajtcbn07XG5cbnZhciBpc0FycmF5ID0gQXJyYXkuaXNBcnJheSB8fCBmdW5jdGlvbiAoeHMpIHtcbiAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh4cykgPT09ICdbb2JqZWN0IEFycmF5XSc7XG59O1xuIiwiLy8gQ29weXJpZ2h0IEpveWVudCwgSW5jLiBhbmQgb3RoZXIgTm9kZSBjb250cmlidXRvcnMuXG4vL1xuLy8gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGFcbi8vIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGVcbi8vIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZ1xuLy8gd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLFxuLy8gZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdFxuLy8gcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlXG4vLyBmb2xsb3dpbmcgY29uZGl0aW9uczpcbi8vXG4vLyBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZFxuLy8gaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4vL1xuLy8gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTU1xuLy8gT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRlxuLy8gTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTlxuLy8gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sXG4vLyBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1Jcbi8vIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEVcbi8vIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG5cbid1c2Ugc3RyaWN0JztcblxudmFyIHN0cmluZ2lmeVByaW1pdGl2ZSA9IGZ1bmN0aW9uKHYpIHtcbiAgc3dpdGNoICh0eXBlb2Ygdikge1xuICAgIGNhc2UgJ3N0cmluZyc6XG4gICAgICByZXR1cm4gdjtcblxuICAgIGNhc2UgJ2Jvb2xlYW4nOlxuICAgICAgcmV0dXJuIHYgPyAndHJ1ZScgOiAnZmFsc2UnO1xuXG4gICAgY2FzZSAnbnVtYmVyJzpcbiAgICAgIHJldHVybiBpc0Zpbml0ZSh2KSA/IHYgOiAnJztcblxuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gJyc7XG4gIH1cbn07XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24ob2JqLCBzZXAsIGVxLCBuYW1lKSB7XG4gIHNlcCA9IHNlcCB8fCAnJic7XG4gIGVxID0gZXEgfHwgJz0nO1xuICBpZiAob2JqID09PSBudWxsKSB7XG4gICAgb2JqID0gdW5kZWZpbmVkO1xuICB9XG5cbiAgaWYgKHR5cGVvZiBvYmogPT09ICdvYmplY3QnKSB7XG4gICAgcmV0dXJuIG1hcChvYmplY3RLZXlzKG9iaiksIGZ1bmN0aW9uKGspIHtcbiAgICAgIHZhciBrcyA9IGVuY29kZVVSSUNvbXBvbmVudChzdHJpbmdpZnlQcmltaXRpdmUoaykpICsgZXE7XG4gICAgICBpZiAoaXNBcnJheShvYmpba10pKSB7XG4gICAgICAgIHJldHVybiBtYXAob2JqW2tdLCBmdW5jdGlvbih2KSB7XG4gICAgICAgICAgcmV0dXJuIGtzICsgZW5jb2RlVVJJQ29tcG9uZW50KHN0cmluZ2lmeVByaW1pdGl2ZSh2KSk7XG4gICAgICAgIH0pLmpvaW4oc2VwKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBrcyArIGVuY29kZVVSSUNvbXBvbmVudChzdHJpbmdpZnlQcmltaXRpdmUob2JqW2tdKSk7XG4gICAgICB9XG4gICAgfSkuam9pbihzZXApO1xuXG4gIH1cblxuICBpZiAoIW5hbWUpIHJldHVybiAnJztcbiAgcmV0dXJuIGVuY29kZVVSSUNvbXBvbmVudChzdHJpbmdpZnlQcmltaXRpdmUobmFtZSkpICsgZXEgK1xuICAgICAgICAgZW5jb2RlVVJJQ29tcG9uZW50KHN0cmluZ2lmeVByaW1pdGl2ZShvYmopKTtcbn07XG5cbnZhciBpc0FycmF5ID0gQXJyYXkuaXNBcnJheSB8fCBmdW5jdGlvbiAoeHMpIHtcbiAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh4cykgPT09ICdbb2JqZWN0IEFycmF5XSc7XG59O1xuXG5mdW5jdGlvbiBtYXAgKHhzLCBmKSB7XG4gIGlmICh4cy5tYXApIHJldHVybiB4cy5tYXAoZik7XG4gIHZhciByZXMgPSBbXTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCB4cy5sZW5ndGg7IGkrKykge1xuICAgIHJlcy5wdXNoKGYoeHNbaV0sIGkpKTtcbiAgfVxuICByZXR1cm4gcmVzO1xufVxuXG52YXIgb2JqZWN0S2V5cyA9IE9iamVjdC5rZXlzIHx8IGZ1bmN0aW9uIChvYmopIHtcbiAgdmFyIHJlcyA9IFtdO1xuICBmb3IgKHZhciBrZXkgaW4gb2JqKSB7XG4gICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmosIGtleSkpIHJlcy5wdXNoKGtleSk7XG4gIH1cbiAgcmV0dXJuIHJlcztcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbmV4cG9ydHMuZGVjb2RlID0gZXhwb3J0cy5wYXJzZSA9IHJlcXVpcmUoJy4vZGVjb2RlJyk7XG5leHBvcnRzLmVuY29kZSA9IGV4cG9ydHMuc3RyaW5naWZ5ID0gcmVxdWlyZSgnLi9lbmNvZGUnKTtcbiIsIi8vIENvcHlyaWdodCBKb3llbnQsIEluYy4gYW5kIG90aGVyIE5vZGUgY29udHJpYnV0b3JzLlxuLy9cbi8vIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhXG4vLyBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlXG4vLyBcIlNvZnR3YXJlXCIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmdcbi8vIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCxcbi8vIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXRcbi8vIHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZVxuLy8gZm9sbG93aW5nIGNvbmRpdGlvbnM6XG4vL1xuLy8gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWRcbi8vIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuLy9cbi8vIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1Ncbi8vIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0Zcbi8vIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU5cbi8vIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLFxuLy8gREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SXG4vLyBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFXG4vLyBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLlxuXG52YXIgcHVueWNvZGUgPSByZXF1aXJlKCdwdW55Y29kZScpO1xuXG5leHBvcnRzLnBhcnNlID0gdXJsUGFyc2U7XG5leHBvcnRzLnJlc29sdmUgPSB1cmxSZXNvbHZlO1xuZXhwb3J0cy5yZXNvbHZlT2JqZWN0ID0gdXJsUmVzb2x2ZU9iamVjdDtcbmV4cG9ydHMuZm9ybWF0ID0gdXJsRm9ybWF0O1xuXG5leHBvcnRzLlVybCA9IFVybDtcblxuZnVuY3Rpb24gVXJsKCkge1xuICB0aGlzLnByb3RvY29sID0gbnVsbDtcbiAgdGhpcy5zbGFzaGVzID0gbnVsbDtcbiAgdGhpcy5hdXRoID0gbnVsbDtcbiAgdGhpcy5ob3N0ID0gbnVsbDtcbiAgdGhpcy5wb3J0ID0gbnVsbDtcbiAgdGhpcy5ob3N0bmFtZSA9IG51bGw7XG4gIHRoaXMuaGFzaCA9IG51bGw7XG4gIHRoaXMuc2VhcmNoID0gbnVsbDtcbiAgdGhpcy5xdWVyeSA9IG51bGw7XG4gIHRoaXMucGF0aG5hbWUgPSBudWxsO1xuICB0aGlzLnBhdGggPSBudWxsO1xuICB0aGlzLmhyZWYgPSBudWxsO1xufVxuXG4vLyBSZWZlcmVuY2U6IFJGQyAzOTg2LCBSRkMgMTgwOCwgUkZDIDIzOTZcblxuLy8gZGVmaW5lIHRoZXNlIGhlcmUgc28gYXQgbGVhc3QgdGhleSBvbmx5IGhhdmUgdG8gYmVcbi8vIGNvbXBpbGVkIG9uY2Ugb24gdGhlIGZpcnN0IG1vZHVsZSBsb2FkLlxudmFyIHByb3RvY29sUGF0dGVybiA9IC9eKFthLXowLTkuKy1dKzopL2ksXG4gICAgcG9ydFBhdHRlcm4gPSAvOlswLTldKiQvLFxuXG4gICAgLy8gUkZDIDIzOTY6IGNoYXJhY3RlcnMgcmVzZXJ2ZWQgZm9yIGRlbGltaXRpbmcgVVJMcy5cbiAgICAvLyBXZSBhY3R1YWxseSBqdXN0IGF1dG8tZXNjYXBlIHRoZXNlLlxuICAgIGRlbGltcyA9IFsnPCcsICc+JywgJ1wiJywgJ2AnLCAnICcsICdcXHInLCAnXFxuJywgJ1xcdCddLFxuXG4gICAgLy8gUkZDIDIzOTY6IGNoYXJhY3RlcnMgbm90IGFsbG93ZWQgZm9yIHZhcmlvdXMgcmVhc29ucy5cbiAgICB1bndpc2UgPSBbJ3snLCAnfScsICd8JywgJ1xcXFwnLCAnXicsICdgJ10uY29uY2F0KGRlbGltcyksXG5cbiAgICAvLyBBbGxvd2VkIGJ5IFJGQ3MsIGJ1dCBjYXVzZSBvZiBYU1MgYXR0YWNrcy4gIEFsd2F5cyBlc2NhcGUgdGhlc2UuXG4gICAgYXV0b0VzY2FwZSA9IFsnXFwnJ10uY29uY2F0KHVud2lzZSksXG4gICAgLy8gQ2hhcmFjdGVycyB0aGF0IGFyZSBuZXZlciBldmVyIGFsbG93ZWQgaW4gYSBob3N0bmFtZS5cbiAgICAvLyBOb3RlIHRoYXQgYW55IGludmFsaWQgY2hhcnMgYXJlIGFsc28gaGFuZGxlZCwgYnV0IHRoZXNlXG4gICAgLy8gYXJlIHRoZSBvbmVzIHRoYXQgYXJlICpleHBlY3RlZCogdG8gYmUgc2Vlbiwgc28gd2UgZmFzdC1wYXRoXG4gICAgLy8gdGhlbS5cbiAgICBub25Ib3N0Q2hhcnMgPSBbJyUnLCAnLycsICc/JywgJzsnLCAnIyddLmNvbmNhdChhdXRvRXNjYXBlKSxcbiAgICBob3N0RW5kaW5nQ2hhcnMgPSBbJy8nLCAnPycsICcjJ10sXG4gICAgaG9zdG5hbWVNYXhMZW4gPSAyNTUsXG4gICAgaG9zdG5hbWVQYXJ0UGF0dGVybiA9IC9eW2EtejAtOUEtWl8tXXswLDYzfSQvLFxuICAgIGhvc3RuYW1lUGFydFN0YXJ0ID0gL14oW2EtejAtOUEtWl8tXXswLDYzfSkoLiopJC8sXG4gICAgLy8gcHJvdG9jb2xzIHRoYXQgY2FuIGFsbG93IFwidW5zYWZlXCIgYW5kIFwidW53aXNlXCIgY2hhcnMuXG4gICAgdW5zYWZlUHJvdG9jb2wgPSB7XG4gICAgICAnamF2YXNjcmlwdCc6IHRydWUsXG4gICAgICAnamF2YXNjcmlwdDonOiB0cnVlXG4gICAgfSxcbiAgICAvLyBwcm90b2NvbHMgdGhhdCBuZXZlciBoYXZlIGEgaG9zdG5hbWUuXG4gICAgaG9zdGxlc3NQcm90b2NvbCA9IHtcbiAgICAgICdqYXZhc2NyaXB0JzogdHJ1ZSxcbiAgICAgICdqYXZhc2NyaXB0Oic6IHRydWVcbiAgICB9LFxuICAgIC8vIHByb3RvY29scyB0aGF0IGFsd2F5cyBjb250YWluIGEgLy8gYml0LlxuICAgIHNsYXNoZWRQcm90b2NvbCA9IHtcbiAgICAgICdodHRwJzogdHJ1ZSxcbiAgICAgICdodHRwcyc6IHRydWUsXG4gICAgICAnZnRwJzogdHJ1ZSxcbiAgICAgICdnb3BoZXInOiB0cnVlLFxuICAgICAgJ2ZpbGUnOiB0cnVlLFxuICAgICAgJ2h0dHA6JzogdHJ1ZSxcbiAgICAgICdodHRwczonOiB0cnVlLFxuICAgICAgJ2Z0cDonOiB0cnVlLFxuICAgICAgJ2dvcGhlcjonOiB0cnVlLFxuICAgICAgJ2ZpbGU6JzogdHJ1ZVxuICAgIH0sXG4gICAgcXVlcnlzdHJpbmcgPSByZXF1aXJlKCdxdWVyeXN0cmluZycpO1xuXG5mdW5jdGlvbiB1cmxQYXJzZSh1cmwsIHBhcnNlUXVlcnlTdHJpbmcsIHNsYXNoZXNEZW5vdGVIb3N0KSB7XG4gIGlmICh1cmwgJiYgaXNPYmplY3QodXJsKSAmJiB1cmwgaW5zdGFuY2VvZiBVcmwpIHJldHVybiB1cmw7XG5cbiAgdmFyIHUgPSBuZXcgVXJsO1xuICB1LnBhcnNlKHVybCwgcGFyc2VRdWVyeVN0cmluZywgc2xhc2hlc0Rlbm90ZUhvc3QpO1xuICByZXR1cm4gdTtcbn1cblxuVXJsLnByb3RvdHlwZS5wYXJzZSA9IGZ1bmN0aW9uKHVybCwgcGFyc2VRdWVyeVN0cmluZywgc2xhc2hlc0Rlbm90ZUhvc3QpIHtcbiAgaWYgKCFpc1N0cmluZyh1cmwpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlBhcmFtZXRlciAndXJsJyBtdXN0IGJlIGEgc3RyaW5nLCBub3QgXCIgKyB0eXBlb2YgdXJsKTtcbiAgfVxuXG4gIHZhciByZXN0ID0gdXJsO1xuXG4gIC8vIHRyaW0gYmVmb3JlIHByb2NlZWRpbmcuXG4gIC8vIFRoaXMgaXMgdG8gc3VwcG9ydCBwYXJzZSBzdHVmZiBsaWtlIFwiICBodHRwOi8vZm9vLmNvbSAgXFxuXCJcbiAgcmVzdCA9IHJlc3QudHJpbSgpO1xuXG4gIHZhciBwcm90byA9IHByb3RvY29sUGF0dGVybi5leGVjKHJlc3QpO1xuICBpZiAocHJvdG8pIHtcbiAgICBwcm90byA9IHByb3RvWzBdO1xuICAgIHZhciBsb3dlclByb3RvID0gcHJvdG8udG9Mb3dlckNhc2UoKTtcbiAgICB0aGlzLnByb3RvY29sID0gbG93ZXJQcm90bztcbiAgICByZXN0ID0gcmVzdC5zdWJzdHIocHJvdG8ubGVuZ3RoKTtcbiAgfVxuXG4gIC8vIGZpZ3VyZSBvdXQgaWYgaXQncyBnb3QgYSBob3N0XG4gIC8vIHVzZXJAc2VydmVyIGlzICphbHdheXMqIGludGVycHJldGVkIGFzIGEgaG9zdG5hbWUsIGFuZCB1cmxcbiAgLy8gcmVzb2x1dGlvbiB3aWxsIHRyZWF0IC8vZm9vL2JhciBhcyBob3N0PWZvbyxwYXRoPWJhciBiZWNhdXNlIHRoYXQnc1xuICAvLyBob3cgdGhlIGJyb3dzZXIgcmVzb2x2ZXMgcmVsYXRpdmUgVVJMcy5cbiAgaWYgKHNsYXNoZXNEZW5vdGVIb3N0IHx8IHByb3RvIHx8IHJlc3QubWF0Y2goL15cXC9cXC9bXkBcXC9dK0BbXkBcXC9dKy8pKSB7XG4gICAgdmFyIHNsYXNoZXMgPSByZXN0LnN1YnN0cigwLCAyKSA9PT0gJy8vJztcbiAgICBpZiAoc2xhc2hlcyAmJiAhKHByb3RvICYmIGhvc3RsZXNzUHJvdG9jb2xbcHJvdG9dKSkge1xuICAgICAgcmVzdCA9IHJlc3Quc3Vic3RyKDIpO1xuICAgICAgdGhpcy5zbGFzaGVzID0gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICBpZiAoIWhvc3RsZXNzUHJvdG9jb2xbcHJvdG9dICYmXG4gICAgICAoc2xhc2hlcyB8fCAocHJvdG8gJiYgIXNsYXNoZWRQcm90b2NvbFtwcm90b10pKSkge1xuXG4gICAgLy8gdGhlcmUncyBhIGhvc3RuYW1lLlxuICAgIC8vIHRoZSBmaXJzdCBpbnN0YW5jZSBvZiAvLCA/LCA7LCBvciAjIGVuZHMgdGhlIGhvc3QuXG4gICAgLy9cbiAgICAvLyBJZiB0aGVyZSBpcyBhbiBAIGluIHRoZSBob3N0bmFtZSwgdGhlbiBub24taG9zdCBjaGFycyAqYXJlKiBhbGxvd2VkXG4gICAgLy8gdG8gdGhlIGxlZnQgb2YgdGhlIGxhc3QgQCBzaWduLCB1bmxlc3Mgc29tZSBob3N0LWVuZGluZyBjaGFyYWN0ZXJcbiAgICAvLyBjb21lcyAqYmVmb3JlKiB0aGUgQC1zaWduLlxuICAgIC8vIFVSTHMgYXJlIG9ibm94aW91cy5cbiAgICAvL1xuICAgIC8vIGV4OlxuICAgIC8vIGh0dHA6Ly9hQGJAYy8gPT4gdXNlcjphQGIgaG9zdDpjXG4gICAgLy8gaHR0cDovL2FAYj9AYyA9PiB1c2VyOmEgaG9zdDpjIHBhdGg6Lz9AY1xuXG4gICAgLy8gdjAuMTIgVE9ETyhpc2FhY3MpOiBUaGlzIGlzIG5vdCBxdWl0ZSBob3cgQ2hyb21lIGRvZXMgdGhpbmdzLlxuICAgIC8vIFJldmlldyBvdXIgdGVzdCBjYXNlIGFnYWluc3QgYnJvd3NlcnMgbW9yZSBjb21wcmVoZW5zaXZlbHkuXG5cbiAgICAvLyBmaW5kIHRoZSBmaXJzdCBpbnN0YW5jZSBvZiBhbnkgaG9zdEVuZGluZ0NoYXJzXG4gICAgdmFyIGhvc3RFbmQgPSAtMTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGhvc3RFbmRpbmdDaGFycy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGhlYyA9IHJlc3QuaW5kZXhPZihob3N0RW5kaW5nQ2hhcnNbaV0pO1xuICAgICAgaWYgKGhlYyAhPT0gLTEgJiYgKGhvc3RFbmQgPT09IC0xIHx8IGhlYyA8IGhvc3RFbmQpKVxuICAgICAgICBob3N0RW5kID0gaGVjO1xuICAgIH1cblxuICAgIC8vIGF0IHRoaXMgcG9pbnQsIGVpdGhlciB3ZSBoYXZlIGFuIGV4cGxpY2l0IHBvaW50IHdoZXJlIHRoZVxuICAgIC8vIGF1dGggcG9ydGlvbiBjYW5ub3QgZ28gcGFzdCwgb3IgdGhlIGxhc3QgQCBjaGFyIGlzIHRoZSBkZWNpZGVyLlxuICAgIHZhciBhdXRoLCBhdFNpZ247XG4gICAgaWYgKGhvc3RFbmQgPT09IC0xKSB7XG4gICAgICAvLyBhdFNpZ24gY2FuIGJlIGFueXdoZXJlLlxuICAgICAgYXRTaWduID0gcmVzdC5sYXN0SW5kZXhPZignQCcpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBhdFNpZ24gbXVzdCBiZSBpbiBhdXRoIHBvcnRpb24uXG4gICAgICAvLyBodHRwOi8vYUBiL2NAZCA9PiBob3N0OmIgYXV0aDphIHBhdGg6L2NAZFxuICAgICAgYXRTaWduID0gcmVzdC5sYXN0SW5kZXhPZignQCcsIGhvc3RFbmQpO1xuICAgIH1cblxuICAgIC8vIE5vdyB3ZSBoYXZlIGEgcG9ydGlvbiB3aGljaCBpcyBkZWZpbml0ZWx5IHRoZSBhdXRoLlxuICAgIC8vIFB1bGwgdGhhdCBvZmYuXG4gICAgaWYgKGF0U2lnbiAhPT0gLTEpIHtcbiAgICAgIGF1dGggPSByZXN0LnNsaWNlKDAsIGF0U2lnbik7XG4gICAgICByZXN0ID0gcmVzdC5zbGljZShhdFNpZ24gKyAxKTtcbiAgICAgIHRoaXMuYXV0aCA9IGRlY29kZVVSSUNvbXBvbmVudChhdXRoKTtcbiAgICB9XG5cbiAgICAvLyB0aGUgaG9zdCBpcyB0aGUgcmVtYWluaW5nIHRvIHRoZSBsZWZ0IG9mIHRoZSBmaXJzdCBub24taG9zdCBjaGFyXG4gICAgaG9zdEVuZCA9IC0xO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbm9uSG9zdENoYXJzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgaGVjID0gcmVzdC5pbmRleE9mKG5vbkhvc3RDaGFyc1tpXSk7XG4gICAgICBpZiAoaGVjICE9PSAtMSAmJiAoaG9zdEVuZCA9PT0gLTEgfHwgaGVjIDwgaG9zdEVuZCkpXG4gICAgICAgIGhvc3RFbmQgPSBoZWM7XG4gICAgfVxuICAgIC8vIGlmIHdlIHN0aWxsIGhhdmUgbm90IGhpdCBpdCwgdGhlbiB0aGUgZW50aXJlIHRoaW5nIGlzIGEgaG9zdC5cbiAgICBpZiAoaG9zdEVuZCA9PT0gLTEpXG4gICAgICBob3N0RW5kID0gcmVzdC5sZW5ndGg7XG5cbiAgICB0aGlzLmhvc3QgPSByZXN0LnNsaWNlKDAsIGhvc3RFbmQpO1xuICAgIHJlc3QgPSByZXN0LnNsaWNlKGhvc3RFbmQpO1xuXG4gICAgLy8gcHVsbCBvdXQgcG9ydC5cbiAgICB0aGlzLnBhcnNlSG9zdCgpO1xuXG4gICAgLy8gd2UndmUgaW5kaWNhdGVkIHRoYXQgdGhlcmUgaXMgYSBob3N0bmFtZSxcbiAgICAvLyBzbyBldmVuIGlmIGl0J3MgZW1wdHksIGl0IGhhcyB0byBiZSBwcmVzZW50LlxuICAgIHRoaXMuaG9zdG5hbWUgPSB0aGlzLmhvc3RuYW1lIHx8ICcnO1xuXG4gICAgLy8gaWYgaG9zdG5hbWUgYmVnaW5zIHdpdGggWyBhbmQgZW5kcyB3aXRoIF1cbiAgICAvLyBhc3N1bWUgdGhhdCBpdCdzIGFuIElQdjYgYWRkcmVzcy5cbiAgICB2YXIgaXB2Nkhvc3RuYW1lID0gdGhpcy5ob3N0bmFtZVswXSA9PT0gJ1snICYmXG4gICAgICAgIHRoaXMuaG9zdG5hbWVbdGhpcy5ob3N0bmFtZS5sZW5ndGggLSAxXSA9PT0gJ10nO1xuXG4gICAgLy8gdmFsaWRhdGUgYSBsaXR0bGUuXG4gICAgaWYgKCFpcHY2SG9zdG5hbWUpIHtcbiAgICAgIHZhciBob3N0cGFydHMgPSB0aGlzLmhvc3RuYW1lLnNwbGl0KC9cXC4vKTtcbiAgICAgIGZvciAodmFyIGkgPSAwLCBsID0gaG9zdHBhcnRzLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgICAgICB2YXIgcGFydCA9IGhvc3RwYXJ0c1tpXTtcbiAgICAgICAgaWYgKCFwYXJ0KSBjb250aW51ZTtcbiAgICAgICAgaWYgKCFwYXJ0Lm1hdGNoKGhvc3RuYW1lUGFydFBhdHRlcm4pKSB7XG4gICAgICAgICAgdmFyIG5ld3BhcnQgPSAnJztcbiAgICAgICAgICBmb3IgKHZhciBqID0gMCwgayA9IHBhcnQubGVuZ3RoOyBqIDwgazsgaisrKSB7XG4gICAgICAgICAgICBpZiAocGFydC5jaGFyQ29kZUF0KGopID4gMTI3KSB7XG4gICAgICAgICAgICAgIC8vIHdlIHJlcGxhY2Ugbm9uLUFTQ0lJIGNoYXIgd2l0aCBhIHRlbXBvcmFyeSBwbGFjZWhvbGRlclxuICAgICAgICAgICAgICAvLyB3ZSBuZWVkIHRoaXMgdG8gbWFrZSBzdXJlIHNpemUgb2YgaG9zdG5hbWUgaXMgbm90XG4gICAgICAgICAgICAgIC8vIGJyb2tlbiBieSByZXBsYWNpbmcgbm9uLUFTQ0lJIGJ5IG5vdGhpbmdcbiAgICAgICAgICAgICAgbmV3cGFydCArPSAneCc7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBuZXdwYXJ0ICs9IHBhcnRbal07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIC8vIHdlIHRlc3QgYWdhaW4gd2l0aCBBU0NJSSBjaGFyIG9ubHlcbiAgICAgICAgICBpZiAoIW5ld3BhcnQubWF0Y2goaG9zdG5hbWVQYXJ0UGF0dGVybikpIHtcbiAgICAgICAgICAgIHZhciB2YWxpZFBhcnRzID0gaG9zdHBhcnRzLnNsaWNlKDAsIGkpO1xuICAgICAgICAgICAgdmFyIG5vdEhvc3QgPSBob3N0cGFydHMuc2xpY2UoaSArIDEpO1xuICAgICAgICAgICAgdmFyIGJpdCA9IHBhcnQubWF0Y2goaG9zdG5hbWVQYXJ0U3RhcnQpO1xuICAgICAgICAgICAgaWYgKGJpdCkge1xuICAgICAgICAgICAgICB2YWxpZFBhcnRzLnB1c2goYml0WzFdKTtcbiAgICAgICAgICAgICAgbm90SG9zdC51bnNoaWZ0KGJpdFsyXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAobm90SG9zdC5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgcmVzdCA9ICcvJyArIG5vdEhvc3Quam9pbignLicpICsgcmVzdDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuaG9zdG5hbWUgPSB2YWxpZFBhcnRzLmpvaW4oJy4nKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0aGlzLmhvc3RuYW1lLmxlbmd0aCA+IGhvc3RuYW1lTWF4TGVuKSB7XG4gICAgICB0aGlzLmhvc3RuYW1lID0gJyc7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIGhvc3RuYW1lcyBhcmUgYWx3YXlzIGxvd2VyIGNhc2UuXG4gICAgICB0aGlzLmhvc3RuYW1lID0gdGhpcy5ob3N0bmFtZS50b0xvd2VyQ2FzZSgpO1xuICAgIH1cblxuICAgIGlmICghaXB2Nkhvc3RuYW1lKSB7XG4gICAgICAvLyBJRE5BIFN1cHBvcnQ6IFJldHVybnMgYSBwdW55IGNvZGVkIHJlcHJlc2VudGF0aW9uIG9mIFwiZG9tYWluXCIuXG4gICAgICAvLyBJdCBvbmx5IGNvbnZlcnRzIHRoZSBwYXJ0IG9mIHRoZSBkb21haW4gbmFtZSB0aGF0XG4gICAgICAvLyBoYXMgbm9uIEFTQ0lJIGNoYXJhY3RlcnMuIEkuZS4gaXQgZG9zZW50IG1hdHRlciBpZlxuICAgICAgLy8geW91IGNhbGwgaXQgd2l0aCBhIGRvbWFpbiB0aGF0IGFscmVhZHkgaXMgaW4gQVNDSUkuXG4gICAgICB2YXIgZG9tYWluQXJyYXkgPSB0aGlzLmhvc3RuYW1lLnNwbGl0KCcuJyk7XG4gICAgICB2YXIgbmV3T3V0ID0gW107XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGRvbWFpbkFycmF5Lmxlbmd0aDsgKytpKSB7XG4gICAgICAgIHZhciBzID0gZG9tYWluQXJyYXlbaV07XG4gICAgICAgIG5ld091dC5wdXNoKHMubWF0Y2goL1teQS1aYS16MC05Xy1dLykgP1xuICAgICAgICAgICAgJ3huLS0nICsgcHVueWNvZGUuZW5jb2RlKHMpIDogcyk7XG4gICAgICB9XG4gICAgICB0aGlzLmhvc3RuYW1lID0gbmV3T3V0LmpvaW4oJy4nKTtcbiAgICB9XG5cbiAgICB2YXIgcCA9IHRoaXMucG9ydCA/ICc6JyArIHRoaXMucG9ydCA6ICcnO1xuICAgIHZhciBoID0gdGhpcy5ob3N0bmFtZSB8fCAnJztcbiAgICB0aGlzLmhvc3QgPSBoICsgcDtcbiAgICB0aGlzLmhyZWYgKz0gdGhpcy5ob3N0O1xuXG4gICAgLy8gc3RyaXAgWyBhbmQgXSBmcm9tIHRoZSBob3N0bmFtZVxuICAgIC8vIHRoZSBob3N0IGZpZWxkIHN0aWxsIHJldGFpbnMgdGhlbSwgdGhvdWdoXG4gICAgaWYgKGlwdjZIb3N0bmFtZSkge1xuICAgICAgdGhpcy5ob3N0bmFtZSA9IHRoaXMuaG9zdG5hbWUuc3Vic3RyKDEsIHRoaXMuaG9zdG5hbWUubGVuZ3RoIC0gMik7XG4gICAgICBpZiAocmVzdFswXSAhPT0gJy8nKSB7XG4gICAgICAgIHJlc3QgPSAnLycgKyByZXN0O1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIG5vdyByZXN0IGlzIHNldCB0byB0aGUgcG9zdC1ob3N0IHN0dWZmLlxuICAvLyBjaG9wIG9mZiBhbnkgZGVsaW0gY2hhcnMuXG4gIGlmICghdW5zYWZlUHJvdG9jb2xbbG93ZXJQcm90b10pIHtcblxuICAgIC8vIEZpcnN0LCBtYWtlIDEwMCUgc3VyZSB0aGF0IGFueSBcImF1dG9Fc2NhcGVcIiBjaGFycyBnZXRcbiAgICAvLyBlc2NhcGVkLCBldmVuIGlmIGVuY29kZVVSSUNvbXBvbmVudCBkb2Vzbid0IHRoaW5rIHRoZXlcbiAgICAvLyBuZWVkIHRvIGJlLlxuICAgIGZvciAodmFyIGkgPSAwLCBsID0gYXV0b0VzY2FwZS5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICAgIHZhciBhZSA9IGF1dG9Fc2NhcGVbaV07XG4gICAgICB2YXIgZXNjID0gZW5jb2RlVVJJQ29tcG9uZW50KGFlKTtcbiAgICAgIGlmIChlc2MgPT09IGFlKSB7XG4gICAgICAgIGVzYyA9IGVzY2FwZShhZSk7XG4gICAgICB9XG4gICAgICByZXN0ID0gcmVzdC5zcGxpdChhZSkuam9pbihlc2MpO1xuICAgIH1cbiAgfVxuXG5cbiAgLy8gY2hvcCBvZmYgZnJvbSB0aGUgdGFpbCBmaXJzdC5cbiAgdmFyIGhhc2ggPSByZXN0LmluZGV4T2YoJyMnKTtcbiAgaWYgKGhhc2ggIT09IC0xKSB7XG4gICAgLy8gZ290IGEgZnJhZ21lbnQgc3RyaW5nLlxuICAgIHRoaXMuaGFzaCA9IHJlc3Quc3Vic3RyKGhhc2gpO1xuICAgIHJlc3QgPSByZXN0LnNsaWNlKDAsIGhhc2gpO1xuICB9XG4gIHZhciBxbSA9IHJlc3QuaW5kZXhPZignPycpO1xuICBpZiAocW0gIT09IC0xKSB7XG4gICAgdGhpcy5zZWFyY2ggPSByZXN0LnN1YnN0cihxbSk7XG4gICAgdGhpcy5xdWVyeSA9IHJlc3Quc3Vic3RyKHFtICsgMSk7XG4gICAgaWYgKHBhcnNlUXVlcnlTdHJpbmcpIHtcbiAgICAgIHRoaXMucXVlcnkgPSBxdWVyeXN0cmluZy5wYXJzZSh0aGlzLnF1ZXJ5KTtcbiAgICB9XG4gICAgcmVzdCA9IHJlc3Quc2xpY2UoMCwgcW0pO1xuICB9IGVsc2UgaWYgKHBhcnNlUXVlcnlTdHJpbmcpIHtcbiAgICAvLyBubyBxdWVyeSBzdHJpbmcsIGJ1dCBwYXJzZVF1ZXJ5U3RyaW5nIHN0aWxsIHJlcXVlc3RlZFxuICAgIHRoaXMuc2VhcmNoID0gJyc7XG4gICAgdGhpcy5xdWVyeSA9IHt9O1xuICB9XG4gIGlmIChyZXN0KSB0aGlzLnBhdGhuYW1lID0gcmVzdDtcbiAgaWYgKHNsYXNoZWRQcm90b2NvbFtsb3dlclByb3RvXSAmJlxuICAgICAgdGhpcy5ob3N0bmFtZSAmJiAhdGhpcy5wYXRobmFtZSkge1xuICAgIHRoaXMucGF0aG5hbWUgPSAnLyc7XG4gIH1cblxuICAvL3RvIHN1cHBvcnQgaHR0cC5yZXF1ZXN0XG4gIGlmICh0aGlzLnBhdGhuYW1lIHx8IHRoaXMuc2VhcmNoKSB7XG4gICAgdmFyIHAgPSB0aGlzLnBhdGhuYW1lIHx8ICcnO1xuICAgIHZhciBzID0gdGhpcy5zZWFyY2ggfHwgJyc7XG4gICAgdGhpcy5wYXRoID0gcCArIHM7XG4gIH1cblxuICAvLyBmaW5hbGx5LCByZWNvbnN0cnVjdCB0aGUgaHJlZiBiYXNlZCBvbiB3aGF0IGhhcyBiZWVuIHZhbGlkYXRlZC5cbiAgdGhpcy5ocmVmID0gdGhpcy5mb3JtYXQoKTtcbiAgcmV0dXJuIHRoaXM7XG59O1xuXG4vLyBmb3JtYXQgYSBwYXJzZWQgb2JqZWN0IGludG8gYSB1cmwgc3RyaW5nXG5mdW5jdGlvbiB1cmxGb3JtYXQob2JqKSB7XG4gIC8vIGVuc3VyZSBpdCdzIGFuIG9iamVjdCwgYW5kIG5vdCBhIHN0cmluZyB1cmwuXG4gIC8vIElmIGl0J3MgYW4gb2JqLCB0aGlzIGlzIGEgbm8tb3AuXG4gIC8vIHRoaXMgd2F5LCB5b3UgY2FuIGNhbGwgdXJsX2Zvcm1hdCgpIG9uIHN0cmluZ3NcbiAgLy8gdG8gY2xlYW4gdXAgcG90ZW50aWFsbHkgd29ua3kgdXJscy5cbiAgaWYgKGlzU3RyaW5nKG9iaikpIG9iaiA9IHVybFBhcnNlKG9iaik7XG4gIGlmICghKG9iaiBpbnN0YW5jZW9mIFVybCkpIHJldHVybiBVcmwucHJvdG90eXBlLmZvcm1hdC5jYWxsKG9iaik7XG4gIHJldHVybiBvYmouZm9ybWF0KCk7XG59XG5cblVybC5wcm90b3R5cGUuZm9ybWF0ID0gZnVuY3Rpb24oKSB7XG4gIHZhciBhdXRoID0gdGhpcy5hdXRoIHx8ICcnO1xuICBpZiAoYXV0aCkge1xuICAgIGF1dGggPSBlbmNvZGVVUklDb21wb25lbnQoYXV0aCk7XG4gICAgYXV0aCA9IGF1dGgucmVwbGFjZSgvJTNBL2ksICc6Jyk7XG4gICAgYXV0aCArPSAnQCc7XG4gIH1cblxuICB2YXIgcHJvdG9jb2wgPSB0aGlzLnByb3RvY29sIHx8ICcnLFxuICAgICAgcGF0aG5hbWUgPSB0aGlzLnBhdGhuYW1lIHx8ICcnLFxuICAgICAgaGFzaCA9IHRoaXMuaGFzaCB8fCAnJyxcbiAgICAgIGhvc3QgPSBmYWxzZSxcbiAgICAgIHF1ZXJ5ID0gJyc7XG5cbiAgaWYgKHRoaXMuaG9zdCkge1xuICAgIGhvc3QgPSBhdXRoICsgdGhpcy5ob3N0O1xuICB9IGVsc2UgaWYgKHRoaXMuaG9zdG5hbWUpIHtcbiAgICBob3N0ID0gYXV0aCArICh0aGlzLmhvc3RuYW1lLmluZGV4T2YoJzonKSA9PT0gLTEgP1xuICAgICAgICB0aGlzLmhvc3RuYW1lIDpcbiAgICAgICAgJ1snICsgdGhpcy5ob3N0bmFtZSArICddJyk7XG4gICAgaWYgKHRoaXMucG9ydCkge1xuICAgICAgaG9zdCArPSAnOicgKyB0aGlzLnBvcnQ7XG4gICAgfVxuICB9XG5cbiAgaWYgKHRoaXMucXVlcnkgJiZcbiAgICAgIGlzT2JqZWN0KHRoaXMucXVlcnkpICYmXG4gICAgICBPYmplY3Qua2V5cyh0aGlzLnF1ZXJ5KS5sZW5ndGgpIHtcbiAgICBxdWVyeSA9IHF1ZXJ5c3RyaW5nLnN0cmluZ2lmeSh0aGlzLnF1ZXJ5KTtcbiAgfVxuXG4gIHZhciBzZWFyY2ggPSB0aGlzLnNlYXJjaCB8fCAocXVlcnkgJiYgKCc/JyArIHF1ZXJ5KSkgfHwgJyc7XG5cbiAgaWYgKHByb3RvY29sICYmIHByb3RvY29sLnN1YnN0cigtMSkgIT09ICc6JykgcHJvdG9jb2wgKz0gJzonO1xuXG4gIC8vIG9ubHkgdGhlIHNsYXNoZWRQcm90b2NvbHMgZ2V0IHRoZSAvLy4gIE5vdCBtYWlsdG86LCB4bXBwOiwgZXRjLlxuICAvLyB1bmxlc3MgdGhleSBoYWQgdGhlbSB0byBiZWdpbiB3aXRoLlxuICBpZiAodGhpcy5zbGFzaGVzIHx8XG4gICAgICAoIXByb3RvY29sIHx8IHNsYXNoZWRQcm90b2NvbFtwcm90b2NvbF0pICYmIGhvc3QgIT09IGZhbHNlKSB7XG4gICAgaG9zdCA9ICcvLycgKyAoaG9zdCB8fCAnJyk7XG4gICAgaWYgKHBhdGhuYW1lICYmIHBhdGhuYW1lLmNoYXJBdCgwKSAhPT0gJy8nKSBwYXRobmFtZSA9ICcvJyArIHBhdGhuYW1lO1xuICB9IGVsc2UgaWYgKCFob3N0KSB7XG4gICAgaG9zdCA9ICcnO1xuICB9XG5cbiAgaWYgKGhhc2ggJiYgaGFzaC5jaGFyQXQoMCkgIT09ICcjJykgaGFzaCA9ICcjJyArIGhhc2g7XG4gIGlmIChzZWFyY2ggJiYgc2VhcmNoLmNoYXJBdCgwKSAhPT0gJz8nKSBzZWFyY2ggPSAnPycgKyBzZWFyY2g7XG5cbiAgcGF0aG5hbWUgPSBwYXRobmFtZS5yZXBsYWNlKC9bPyNdL2csIGZ1bmN0aW9uKG1hdGNoKSB7XG4gICAgcmV0dXJuIGVuY29kZVVSSUNvbXBvbmVudChtYXRjaCk7XG4gIH0pO1xuICBzZWFyY2ggPSBzZWFyY2gucmVwbGFjZSgnIycsICclMjMnKTtcblxuICByZXR1cm4gcHJvdG9jb2wgKyBob3N0ICsgcGF0aG5hbWUgKyBzZWFyY2ggKyBoYXNoO1xufTtcblxuZnVuY3Rpb24gdXJsUmVzb2x2ZShzb3VyY2UsIHJlbGF0aXZlKSB7XG4gIHJldHVybiB1cmxQYXJzZShzb3VyY2UsIGZhbHNlLCB0cnVlKS5yZXNvbHZlKHJlbGF0aXZlKTtcbn1cblxuVXJsLnByb3RvdHlwZS5yZXNvbHZlID0gZnVuY3Rpb24ocmVsYXRpdmUpIHtcbiAgcmV0dXJuIHRoaXMucmVzb2x2ZU9iamVjdCh1cmxQYXJzZShyZWxhdGl2ZSwgZmFsc2UsIHRydWUpKS5mb3JtYXQoKTtcbn07XG5cbmZ1bmN0aW9uIHVybFJlc29sdmVPYmplY3Qoc291cmNlLCByZWxhdGl2ZSkge1xuICBpZiAoIXNvdXJjZSkgcmV0dXJuIHJlbGF0aXZlO1xuICByZXR1cm4gdXJsUGFyc2Uoc291cmNlLCBmYWxzZSwgdHJ1ZSkucmVzb2x2ZU9iamVjdChyZWxhdGl2ZSk7XG59XG5cblVybC5wcm90b3R5cGUucmVzb2x2ZU9iamVjdCA9IGZ1bmN0aW9uKHJlbGF0aXZlKSB7XG4gIGlmIChpc1N0cmluZyhyZWxhdGl2ZSkpIHtcbiAgICB2YXIgcmVsID0gbmV3IFVybCgpO1xuICAgIHJlbC5wYXJzZShyZWxhdGl2ZSwgZmFsc2UsIHRydWUpO1xuICAgIHJlbGF0aXZlID0gcmVsO1xuICB9XG5cbiAgdmFyIHJlc3VsdCA9IG5ldyBVcmwoKTtcbiAgT2JqZWN0LmtleXModGhpcykuZm9yRWFjaChmdW5jdGlvbihrKSB7XG4gICAgcmVzdWx0W2tdID0gdGhpc1trXTtcbiAgfSwgdGhpcyk7XG5cbiAgLy8gaGFzaCBpcyBhbHdheXMgb3ZlcnJpZGRlbiwgbm8gbWF0dGVyIHdoYXQuXG4gIC8vIGV2ZW4gaHJlZj1cIlwiIHdpbGwgcmVtb3ZlIGl0LlxuICByZXN1bHQuaGFzaCA9IHJlbGF0aXZlLmhhc2g7XG5cbiAgLy8gaWYgdGhlIHJlbGF0aXZlIHVybCBpcyBlbXB0eSwgdGhlbiB0aGVyZSdzIG5vdGhpbmcgbGVmdCB0byBkbyBoZXJlLlxuICBpZiAocmVsYXRpdmUuaHJlZiA9PT0gJycpIHtcbiAgICByZXN1bHQuaHJlZiA9IHJlc3VsdC5mb3JtYXQoKTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgLy8gaHJlZnMgbGlrZSAvL2Zvby9iYXIgYWx3YXlzIGN1dCB0byB0aGUgcHJvdG9jb2wuXG4gIGlmIChyZWxhdGl2ZS5zbGFzaGVzICYmICFyZWxhdGl2ZS5wcm90b2NvbCkge1xuICAgIC8vIHRha2UgZXZlcnl0aGluZyBleGNlcHQgdGhlIHByb3RvY29sIGZyb20gcmVsYXRpdmVcbiAgICBPYmplY3Qua2V5cyhyZWxhdGl2ZSkuZm9yRWFjaChmdW5jdGlvbihrKSB7XG4gICAgICBpZiAoayAhPT0gJ3Byb3RvY29sJylcbiAgICAgICAgcmVzdWx0W2tdID0gcmVsYXRpdmVba107XG4gICAgfSk7XG5cbiAgICAvL3VybFBhcnNlIGFwcGVuZHMgdHJhaWxpbmcgLyB0byB1cmxzIGxpa2UgaHR0cDovL3d3dy5leGFtcGxlLmNvbVxuICAgIGlmIChzbGFzaGVkUHJvdG9jb2xbcmVzdWx0LnByb3RvY29sXSAmJlxuICAgICAgICByZXN1bHQuaG9zdG5hbWUgJiYgIXJlc3VsdC5wYXRobmFtZSkge1xuICAgICAgcmVzdWx0LnBhdGggPSByZXN1bHQucGF0aG5hbWUgPSAnLyc7XG4gICAgfVxuXG4gICAgcmVzdWx0LmhyZWYgPSByZXN1bHQuZm9ybWF0KCk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIGlmIChyZWxhdGl2ZS5wcm90b2NvbCAmJiByZWxhdGl2ZS5wcm90b2NvbCAhPT0gcmVzdWx0LnByb3RvY29sKSB7XG4gICAgLy8gaWYgaXQncyBhIGtub3duIHVybCBwcm90b2NvbCwgdGhlbiBjaGFuZ2luZ1xuICAgIC8vIHRoZSBwcm90b2NvbCBkb2VzIHdlaXJkIHRoaW5nc1xuICAgIC8vIGZpcnN0LCBpZiBpdCdzIG5vdCBmaWxlOiwgdGhlbiB3ZSBNVVNUIGhhdmUgYSBob3N0LFxuICAgIC8vIGFuZCBpZiB0aGVyZSB3YXMgYSBwYXRoXG4gICAgLy8gdG8gYmVnaW4gd2l0aCwgdGhlbiB3ZSBNVVNUIGhhdmUgYSBwYXRoLlxuICAgIC8vIGlmIGl0IGlzIGZpbGU6LCB0aGVuIHRoZSBob3N0IGlzIGRyb3BwZWQsXG4gICAgLy8gYmVjYXVzZSB0aGF0J3Mga25vd24gdG8gYmUgaG9zdGxlc3MuXG4gICAgLy8gYW55dGhpbmcgZWxzZSBpcyBhc3N1bWVkIHRvIGJlIGFic29sdXRlLlxuICAgIGlmICghc2xhc2hlZFByb3RvY29sW3JlbGF0aXZlLnByb3RvY29sXSkge1xuICAgICAgT2JqZWN0LmtleXMocmVsYXRpdmUpLmZvckVhY2goZnVuY3Rpb24oaykge1xuICAgICAgICByZXN1bHRba10gPSByZWxhdGl2ZVtrXTtcbiAgICAgIH0pO1xuICAgICAgcmVzdWx0LmhyZWYgPSByZXN1bHQuZm9ybWF0KCk7XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIHJlc3VsdC5wcm90b2NvbCA9IHJlbGF0aXZlLnByb3RvY29sO1xuICAgIGlmICghcmVsYXRpdmUuaG9zdCAmJiAhaG9zdGxlc3NQcm90b2NvbFtyZWxhdGl2ZS5wcm90b2NvbF0pIHtcbiAgICAgIHZhciByZWxQYXRoID0gKHJlbGF0aXZlLnBhdGhuYW1lIHx8ICcnKS5zcGxpdCgnLycpO1xuICAgICAgd2hpbGUgKHJlbFBhdGgubGVuZ3RoICYmICEocmVsYXRpdmUuaG9zdCA9IHJlbFBhdGguc2hpZnQoKSkpO1xuICAgICAgaWYgKCFyZWxhdGl2ZS5ob3N0KSByZWxhdGl2ZS5ob3N0ID0gJyc7XG4gICAgICBpZiAoIXJlbGF0aXZlLmhvc3RuYW1lKSByZWxhdGl2ZS5ob3N0bmFtZSA9ICcnO1xuICAgICAgaWYgKHJlbFBhdGhbMF0gIT09ICcnKSByZWxQYXRoLnVuc2hpZnQoJycpO1xuICAgICAgaWYgKHJlbFBhdGgubGVuZ3RoIDwgMikgcmVsUGF0aC51bnNoaWZ0KCcnKTtcbiAgICAgIHJlc3VsdC5wYXRobmFtZSA9IHJlbFBhdGguam9pbignLycpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXN1bHQucGF0aG5hbWUgPSByZWxhdGl2ZS5wYXRobmFtZTtcbiAgICB9XG4gICAgcmVzdWx0LnNlYXJjaCA9IHJlbGF0aXZlLnNlYXJjaDtcbiAgICByZXN1bHQucXVlcnkgPSByZWxhdGl2ZS5xdWVyeTtcbiAgICByZXN1bHQuaG9zdCA9IHJlbGF0aXZlLmhvc3QgfHwgJyc7XG4gICAgcmVzdWx0LmF1dGggPSByZWxhdGl2ZS5hdXRoO1xuICAgIHJlc3VsdC5ob3N0bmFtZSA9IHJlbGF0aXZlLmhvc3RuYW1lIHx8IHJlbGF0aXZlLmhvc3Q7XG4gICAgcmVzdWx0LnBvcnQgPSByZWxhdGl2ZS5wb3J0O1xuICAgIC8vIHRvIHN1cHBvcnQgaHR0cC5yZXF1ZXN0XG4gICAgaWYgKHJlc3VsdC5wYXRobmFtZSB8fCByZXN1bHQuc2VhcmNoKSB7XG4gICAgICB2YXIgcCA9IHJlc3VsdC5wYXRobmFtZSB8fCAnJztcbiAgICAgIHZhciBzID0gcmVzdWx0LnNlYXJjaCB8fCAnJztcbiAgICAgIHJlc3VsdC5wYXRoID0gcCArIHM7XG4gICAgfVxuICAgIHJlc3VsdC5zbGFzaGVzID0gcmVzdWx0LnNsYXNoZXMgfHwgcmVsYXRpdmUuc2xhc2hlcztcbiAgICByZXN1bHQuaHJlZiA9IHJlc3VsdC5mb3JtYXQoKTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgdmFyIGlzU291cmNlQWJzID0gKHJlc3VsdC5wYXRobmFtZSAmJiByZXN1bHQucGF0aG5hbWUuY2hhckF0KDApID09PSAnLycpLFxuICAgICAgaXNSZWxBYnMgPSAoXG4gICAgICAgICAgcmVsYXRpdmUuaG9zdCB8fFxuICAgICAgICAgIHJlbGF0aXZlLnBhdGhuYW1lICYmIHJlbGF0aXZlLnBhdGhuYW1lLmNoYXJBdCgwKSA9PT0gJy8nXG4gICAgICApLFxuICAgICAgbXVzdEVuZEFicyA9IChpc1JlbEFicyB8fCBpc1NvdXJjZUFicyB8fFxuICAgICAgICAgICAgICAgICAgICAocmVzdWx0Lmhvc3QgJiYgcmVsYXRpdmUucGF0aG5hbWUpKSxcbiAgICAgIHJlbW92ZUFsbERvdHMgPSBtdXN0RW5kQWJzLFxuICAgICAgc3JjUGF0aCA9IHJlc3VsdC5wYXRobmFtZSAmJiByZXN1bHQucGF0aG5hbWUuc3BsaXQoJy8nKSB8fCBbXSxcbiAgICAgIHJlbFBhdGggPSByZWxhdGl2ZS5wYXRobmFtZSAmJiByZWxhdGl2ZS5wYXRobmFtZS5zcGxpdCgnLycpIHx8IFtdLFxuICAgICAgcHN5Y2hvdGljID0gcmVzdWx0LnByb3RvY29sICYmICFzbGFzaGVkUHJvdG9jb2xbcmVzdWx0LnByb3RvY29sXTtcblxuICAvLyBpZiB0aGUgdXJsIGlzIGEgbm9uLXNsYXNoZWQgdXJsLCB0aGVuIHJlbGF0aXZlXG4gIC8vIGxpbmtzIGxpa2UgLi4vLi4gc2hvdWxkIGJlIGFibGVcbiAgLy8gdG8gY3Jhd2wgdXAgdG8gdGhlIGhvc3RuYW1lLCBhcyB3ZWxsLiAgVGhpcyBpcyBzdHJhbmdlLlxuICAvLyByZXN1bHQucHJvdG9jb2wgaGFzIGFscmVhZHkgYmVlbiBzZXQgYnkgbm93LlxuICAvLyBMYXRlciBvbiwgcHV0IHRoZSBmaXJzdCBwYXRoIHBhcnQgaW50byB0aGUgaG9zdCBmaWVsZC5cbiAgaWYgKHBzeWNob3RpYykge1xuICAgIHJlc3VsdC5ob3N0bmFtZSA9ICcnO1xuICAgIHJlc3VsdC5wb3J0ID0gbnVsbDtcbiAgICBpZiAocmVzdWx0Lmhvc3QpIHtcbiAgICAgIGlmIChzcmNQYXRoWzBdID09PSAnJykgc3JjUGF0aFswXSA9IHJlc3VsdC5ob3N0O1xuICAgICAgZWxzZSBzcmNQYXRoLnVuc2hpZnQocmVzdWx0Lmhvc3QpO1xuICAgIH1cbiAgICByZXN1bHQuaG9zdCA9ICcnO1xuICAgIGlmIChyZWxhdGl2ZS5wcm90b2NvbCkge1xuICAgICAgcmVsYXRpdmUuaG9zdG5hbWUgPSBudWxsO1xuICAgICAgcmVsYXRpdmUucG9ydCA9IG51bGw7XG4gICAgICBpZiAocmVsYXRpdmUuaG9zdCkge1xuICAgICAgICBpZiAocmVsUGF0aFswXSA9PT0gJycpIHJlbFBhdGhbMF0gPSByZWxhdGl2ZS5ob3N0O1xuICAgICAgICBlbHNlIHJlbFBhdGgudW5zaGlmdChyZWxhdGl2ZS5ob3N0KTtcbiAgICAgIH1cbiAgICAgIHJlbGF0aXZlLmhvc3QgPSBudWxsO1xuICAgIH1cbiAgICBtdXN0RW5kQWJzID0gbXVzdEVuZEFicyAmJiAocmVsUGF0aFswXSA9PT0gJycgfHwgc3JjUGF0aFswXSA9PT0gJycpO1xuICB9XG5cbiAgaWYgKGlzUmVsQWJzKSB7XG4gICAgLy8gaXQncyBhYnNvbHV0ZS5cbiAgICByZXN1bHQuaG9zdCA9IChyZWxhdGl2ZS5ob3N0IHx8IHJlbGF0aXZlLmhvc3QgPT09ICcnKSA/XG4gICAgICAgICAgICAgICAgICByZWxhdGl2ZS5ob3N0IDogcmVzdWx0Lmhvc3Q7XG4gICAgcmVzdWx0Lmhvc3RuYW1lID0gKHJlbGF0aXZlLmhvc3RuYW1lIHx8IHJlbGF0aXZlLmhvc3RuYW1lID09PSAnJykgP1xuICAgICAgICAgICAgICAgICAgICAgIHJlbGF0aXZlLmhvc3RuYW1lIDogcmVzdWx0Lmhvc3RuYW1lO1xuICAgIHJlc3VsdC5zZWFyY2ggPSByZWxhdGl2ZS5zZWFyY2g7XG4gICAgcmVzdWx0LnF1ZXJ5ID0gcmVsYXRpdmUucXVlcnk7XG4gICAgc3JjUGF0aCA9IHJlbFBhdGg7XG4gICAgLy8gZmFsbCB0aHJvdWdoIHRvIHRoZSBkb3QtaGFuZGxpbmcgYmVsb3cuXG4gIH0gZWxzZSBpZiAocmVsUGF0aC5sZW5ndGgpIHtcbiAgICAvLyBpdCdzIHJlbGF0aXZlXG4gICAgLy8gdGhyb3cgYXdheSB0aGUgZXhpc3RpbmcgZmlsZSwgYW5kIHRha2UgdGhlIG5ldyBwYXRoIGluc3RlYWQuXG4gICAgaWYgKCFzcmNQYXRoKSBzcmNQYXRoID0gW107XG4gICAgc3JjUGF0aC5wb3AoKTtcbiAgICBzcmNQYXRoID0gc3JjUGF0aC5jb25jYXQocmVsUGF0aCk7XG4gICAgcmVzdWx0LnNlYXJjaCA9IHJlbGF0aXZlLnNlYXJjaDtcbiAgICByZXN1bHQucXVlcnkgPSByZWxhdGl2ZS5xdWVyeTtcbiAgfSBlbHNlIGlmICghaXNOdWxsT3JVbmRlZmluZWQocmVsYXRpdmUuc2VhcmNoKSkge1xuICAgIC8vIGp1c3QgcHVsbCBvdXQgdGhlIHNlYXJjaC5cbiAgICAvLyBsaWtlIGhyZWY9Jz9mb28nLlxuICAgIC8vIFB1dCB0aGlzIGFmdGVyIHRoZSBvdGhlciB0d28gY2FzZXMgYmVjYXVzZSBpdCBzaW1wbGlmaWVzIHRoZSBib29sZWFuc1xuICAgIGlmIChwc3ljaG90aWMpIHtcbiAgICAgIHJlc3VsdC5ob3N0bmFtZSA9IHJlc3VsdC5ob3N0ID0gc3JjUGF0aC5zaGlmdCgpO1xuICAgICAgLy9vY2NhdGlvbmFseSB0aGUgYXV0aCBjYW4gZ2V0IHN0dWNrIG9ubHkgaW4gaG9zdFxuICAgICAgLy90aGlzIGVzcGVjaWFseSBoYXBwZW5zIGluIGNhc2VzIGxpa2VcbiAgICAgIC8vdXJsLnJlc29sdmVPYmplY3QoJ21haWx0bzpsb2NhbDFAZG9tYWluMScsICdsb2NhbDJAZG9tYWluMicpXG4gICAgICB2YXIgYXV0aEluSG9zdCA9IHJlc3VsdC5ob3N0ICYmIHJlc3VsdC5ob3N0LmluZGV4T2YoJ0AnKSA+IDAgP1xuICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQuaG9zdC5zcGxpdCgnQCcpIDogZmFsc2U7XG4gICAgICBpZiAoYXV0aEluSG9zdCkge1xuICAgICAgICByZXN1bHQuYXV0aCA9IGF1dGhJbkhvc3Quc2hpZnQoKTtcbiAgICAgICAgcmVzdWx0Lmhvc3QgPSByZXN1bHQuaG9zdG5hbWUgPSBhdXRoSW5Ib3N0LnNoaWZ0KCk7XG4gICAgICB9XG4gICAgfVxuICAgIHJlc3VsdC5zZWFyY2ggPSByZWxhdGl2ZS5zZWFyY2g7XG4gICAgcmVzdWx0LnF1ZXJ5ID0gcmVsYXRpdmUucXVlcnk7XG4gICAgLy90byBzdXBwb3J0IGh0dHAucmVxdWVzdFxuICAgIGlmICghaXNOdWxsKHJlc3VsdC5wYXRobmFtZSkgfHwgIWlzTnVsbChyZXN1bHQuc2VhcmNoKSkge1xuICAgICAgcmVzdWx0LnBhdGggPSAocmVzdWx0LnBhdGhuYW1lID8gcmVzdWx0LnBhdGhuYW1lIDogJycpICtcbiAgICAgICAgICAgICAgICAgICAgKHJlc3VsdC5zZWFyY2ggPyByZXN1bHQuc2VhcmNoIDogJycpO1xuICAgIH1cbiAgICByZXN1bHQuaHJlZiA9IHJlc3VsdC5mb3JtYXQoKTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgaWYgKCFzcmNQYXRoLmxlbmd0aCkge1xuICAgIC8vIG5vIHBhdGggYXQgYWxsLiAgZWFzeS5cbiAgICAvLyB3ZSd2ZSBhbHJlYWR5IGhhbmRsZWQgdGhlIG90aGVyIHN0dWZmIGFib3ZlLlxuICAgIHJlc3VsdC5wYXRobmFtZSA9IG51bGw7XG4gICAgLy90byBzdXBwb3J0IGh0dHAucmVxdWVzdFxuICAgIGlmIChyZXN1bHQuc2VhcmNoKSB7XG4gICAgICByZXN1bHQucGF0aCA9ICcvJyArIHJlc3VsdC5zZWFyY2g7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJlc3VsdC5wYXRoID0gbnVsbDtcbiAgICB9XG4gICAgcmVzdWx0LmhyZWYgPSByZXN1bHQuZm9ybWF0KCk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIC8vIGlmIGEgdXJsIEVORHMgaW4gLiBvciAuLiwgdGhlbiBpdCBtdXN0IGdldCBhIHRyYWlsaW5nIHNsYXNoLlxuICAvLyBob3dldmVyLCBpZiBpdCBlbmRzIGluIGFueXRoaW5nIGVsc2Ugbm9uLXNsYXNoeSxcbiAgLy8gdGhlbiBpdCBtdXN0IE5PVCBnZXQgYSB0cmFpbGluZyBzbGFzaC5cbiAgdmFyIGxhc3QgPSBzcmNQYXRoLnNsaWNlKC0xKVswXTtcbiAgdmFyIGhhc1RyYWlsaW5nU2xhc2ggPSAoXG4gICAgICAocmVzdWx0Lmhvc3QgfHwgcmVsYXRpdmUuaG9zdCkgJiYgKGxhc3QgPT09ICcuJyB8fCBsYXN0ID09PSAnLi4nKSB8fFxuICAgICAgbGFzdCA9PT0gJycpO1xuXG4gIC8vIHN0cmlwIHNpbmdsZSBkb3RzLCByZXNvbHZlIGRvdWJsZSBkb3RzIHRvIHBhcmVudCBkaXJcbiAgLy8gaWYgdGhlIHBhdGggdHJpZXMgdG8gZ28gYWJvdmUgdGhlIHJvb3QsIGB1cGAgZW5kcyB1cCA+IDBcbiAgdmFyIHVwID0gMDtcbiAgZm9yICh2YXIgaSA9IHNyY1BhdGgubGVuZ3RoOyBpID49IDA7IGktLSkge1xuICAgIGxhc3QgPSBzcmNQYXRoW2ldO1xuICAgIGlmIChsYXN0ID09ICcuJykge1xuICAgICAgc3JjUGF0aC5zcGxpY2UoaSwgMSk7XG4gICAgfSBlbHNlIGlmIChsYXN0ID09PSAnLi4nKSB7XG4gICAgICBzcmNQYXRoLnNwbGljZShpLCAxKTtcbiAgICAgIHVwKys7XG4gICAgfSBlbHNlIGlmICh1cCkge1xuICAgICAgc3JjUGF0aC5zcGxpY2UoaSwgMSk7XG4gICAgICB1cC0tO1xuICAgIH1cbiAgfVxuXG4gIC8vIGlmIHRoZSBwYXRoIGlzIGFsbG93ZWQgdG8gZ28gYWJvdmUgdGhlIHJvb3QsIHJlc3RvcmUgbGVhZGluZyAuLnNcbiAgaWYgKCFtdXN0RW5kQWJzICYmICFyZW1vdmVBbGxEb3RzKSB7XG4gICAgZm9yICg7IHVwLS07IHVwKSB7XG4gICAgICBzcmNQYXRoLnVuc2hpZnQoJy4uJyk7XG4gICAgfVxuICB9XG5cbiAgaWYgKG11c3RFbmRBYnMgJiYgc3JjUGF0aFswXSAhPT0gJycgJiZcbiAgICAgICghc3JjUGF0aFswXSB8fCBzcmNQYXRoWzBdLmNoYXJBdCgwKSAhPT0gJy8nKSkge1xuICAgIHNyY1BhdGgudW5zaGlmdCgnJyk7XG4gIH1cblxuICBpZiAoaGFzVHJhaWxpbmdTbGFzaCAmJiAoc3JjUGF0aC5qb2luKCcvJykuc3Vic3RyKC0xKSAhPT0gJy8nKSkge1xuICAgIHNyY1BhdGgucHVzaCgnJyk7XG4gIH1cblxuICB2YXIgaXNBYnNvbHV0ZSA9IHNyY1BhdGhbMF0gPT09ICcnIHx8XG4gICAgICAoc3JjUGF0aFswXSAmJiBzcmNQYXRoWzBdLmNoYXJBdCgwKSA9PT0gJy8nKTtcblxuICAvLyBwdXQgdGhlIGhvc3QgYmFja1xuICBpZiAocHN5Y2hvdGljKSB7XG4gICAgcmVzdWx0Lmhvc3RuYW1lID0gcmVzdWx0Lmhvc3QgPSBpc0Fic29sdXRlID8gJycgOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjUGF0aC5sZW5ndGggPyBzcmNQYXRoLnNoaWZ0KCkgOiAnJztcbiAgICAvL29jY2F0aW9uYWx5IHRoZSBhdXRoIGNhbiBnZXQgc3R1Y2sgb25seSBpbiBob3N0XG4gICAgLy90aGlzIGVzcGVjaWFseSBoYXBwZW5zIGluIGNhc2VzIGxpa2VcbiAgICAvL3VybC5yZXNvbHZlT2JqZWN0KCdtYWlsdG86bG9jYWwxQGRvbWFpbjEnLCAnbG9jYWwyQGRvbWFpbjInKVxuICAgIHZhciBhdXRoSW5Ib3N0ID0gcmVzdWx0Lmhvc3QgJiYgcmVzdWx0Lmhvc3QuaW5kZXhPZignQCcpID4gMCA/XG4gICAgICAgICAgICAgICAgICAgICByZXN1bHQuaG9zdC5zcGxpdCgnQCcpIDogZmFsc2U7XG4gICAgaWYgKGF1dGhJbkhvc3QpIHtcbiAgICAgIHJlc3VsdC5hdXRoID0gYXV0aEluSG9zdC5zaGlmdCgpO1xuICAgICAgcmVzdWx0Lmhvc3QgPSByZXN1bHQuaG9zdG5hbWUgPSBhdXRoSW5Ib3N0LnNoaWZ0KCk7XG4gICAgfVxuICB9XG5cbiAgbXVzdEVuZEFicyA9IG11c3RFbmRBYnMgfHwgKHJlc3VsdC5ob3N0ICYmIHNyY1BhdGgubGVuZ3RoKTtcblxuICBpZiAobXVzdEVuZEFicyAmJiAhaXNBYnNvbHV0ZSkge1xuICAgIHNyY1BhdGgudW5zaGlmdCgnJyk7XG4gIH1cblxuICBpZiAoIXNyY1BhdGgubGVuZ3RoKSB7XG4gICAgcmVzdWx0LnBhdGhuYW1lID0gbnVsbDtcbiAgICByZXN1bHQucGF0aCA9IG51bGw7XG4gIH0gZWxzZSB7XG4gICAgcmVzdWx0LnBhdGhuYW1lID0gc3JjUGF0aC5qb2luKCcvJyk7XG4gIH1cblxuICAvL3RvIHN1cHBvcnQgcmVxdWVzdC5odHRwXG4gIGlmICghaXNOdWxsKHJlc3VsdC5wYXRobmFtZSkgfHwgIWlzTnVsbChyZXN1bHQuc2VhcmNoKSkge1xuICAgIHJlc3VsdC5wYXRoID0gKHJlc3VsdC5wYXRobmFtZSA/IHJlc3VsdC5wYXRobmFtZSA6ICcnKSArXG4gICAgICAgICAgICAgICAgICAocmVzdWx0LnNlYXJjaCA/IHJlc3VsdC5zZWFyY2ggOiAnJyk7XG4gIH1cbiAgcmVzdWx0LmF1dGggPSByZWxhdGl2ZS5hdXRoIHx8IHJlc3VsdC5hdXRoO1xuICByZXN1bHQuc2xhc2hlcyA9IHJlc3VsdC5zbGFzaGVzIHx8IHJlbGF0aXZlLnNsYXNoZXM7XG4gIHJlc3VsdC5ocmVmID0gcmVzdWx0LmZvcm1hdCgpO1xuICByZXR1cm4gcmVzdWx0O1xufTtcblxuVXJsLnByb3RvdHlwZS5wYXJzZUhvc3QgPSBmdW5jdGlvbigpIHtcbiAgdmFyIGhvc3QgPSB0aGlzLmhvc3Q7XG4gIHZhciBwb3J0ID0gcG9ydFBhdHRlcm4uZXhlYyhob3N0KTtcbiAgaWYgKHBvcnQpIHtcbiAgICBwb3J0ID0gcG9ydFswXTtcbiAgICBpZiAocG9ydCAhPT0gJzonKSB7XG4gICAgICB0aGlzLnBvcnQgPSBwb3J0LnN1YnN0cigxKTtcbiAgICB9XG4gICAgaG9zdCA9IGhvc3Quc3Vic3RyKDAsIGhvc3QubGVuZ3RoIC0gcG9ydC5sZW5ndGgpO1xuICB9XG4gIGlmIChob3N0KSB0aGlzLmhvc3RuYW1lID0gaG9zdDtcbn07XG5cbmZ1bmN0aW9uIGlzU3RyaW5nKGFyZykge1xuICByZXR1cm4gdHlwZW9mIGFyZyA9PT0gXCJzdHJpbmdcIjtcbn1cblxuZnVuY3Rpb24gaXNPYmplY3QoYXJnKSB7XG4gIHJldHVybiB0eXBlb2YgYXJnID09PSAnb2JqZWN0JyAmJiBhcmcgIT09IG51bGw7XG59XG5cbmZ1bmN0aW9uIGlzTnVsbChhcmcpIHtcbiAgcmV0dXJuIGFyZyA9PT0gbnVsbDtcbn1cbmZ1bmN0aW9uIGlzTnVsbE9yVW5kZWZpbmVkKGFyZykge1xuICByZXR1cm4gIGFyZyA9PSBudWxsO1xufVxuIiwiJ3VzZSBzdHJpY3QnO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGVhcmN1dDtcblxuZnVuY3Rpb24gZWFyY3V0KGRhdGEsIGhvbGVJbmRpY2VzLCBkaW0pIHtcblxuICAgIGRpbSA9IGRpbSB8fCAyO1xuXG4gICAgdmFyIGhhc0hvbGVzID0gaG9sZUluZGljZXMgJiYgaG9sZUluZGljZXMubGVuZ3RoLFxuICAgICAgICBvdXRlckxlbiA9IGhhc0hvbGVzID8gaG9sZUluZGljZXNbMF0gKiBkaW0gOiBkYXRhLmxlbmd0aCxcbiAgICAgICAgb3V0ZXJOb2RlID0gbGlua2VkTGlzdChkYXRhLCAwLCBvdXRlckxlbiwgZGltLCB0cnVlKSxcbiAgICAgICAgdHJpYW5nbGVzID0gW107XG5cbiAgICBpZiAoIW91dGVyTm9kZSkgcmV0dXJuIHRyaWFuZ2xlcztcblxuICAgIHZhciBtaW5YLCBtaW5ZLCBtYXhYLCBtYXhZLCB4LCB5LCBzaXplO1xuXG4gICAgaWYgKGhhc0hvbGVzKSBvdXRlck5vZGUgPSBlbGltaW5hdGVIb2xlcyhkYXRhLCBob2xlSW5kaWNlcywgb3V0ZXJOb2RlLCBkaW0pO1xuXG4gICAgLy8gaWYgdGhlIHNoYXBlIGlzIG5vdCB0b28gc2ltcGxlLCB3ZSdsbCB1c2Ugei1vcmRlciBjdXJ2ZSBoYXNoIGxhdGVyOyBjYWxjdWxhdGUgcG9seWdvbiBiYm94XG4gICAgaWYgKGRhdGEubGVuZ3RoID4gODAgKiBkaW0pIHtcbiAgICAgICAgbWluWCA9IG1heFggPSBkYXRhWzBdO1xuICAgICAgICBtaW5ZID0gbWF4WSA9IGRhdGFbMV07XG5cbiAgICAgICAgZm9yICh2YXIgaSA9IGRpbTsgaSA8IG91dGVyTGVuOyBpICs9IGRpbSkge1xuICAgICAgICAgICAgeCA9IGRhdGFbaV07XG4gICAgICAgICAgICB5ID0gZGF0YVtpICsgMV07XG4gICAgICAgICAgICBpZiAoeCA8IG1pblgpIG1pblggPSB4O1xuICAgICAgICAgICAgaWYgKHkgPCBtaW5ZKSBtaW5ZID0geTtcbiAgICAgICAgICAgIGlmICh4ID4gbWF4WCkgbWF4WCA9IHg7XG4gICAgICAgICAgICBpZiAoeSA+IG1heFkpIG1heFkgPSB5O1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gbWluWCwgbWluWSBhbmQgc2l6ZSBhcmUgbGF0ZXIgdXNlZCB0byB0cmFuc2Zvcm0gY29vcmRzIGludG8gaW50ZWdlcnMgZm9yIHotb3JkZXIgY2FsY3VsYXRpb25cbiAgICAgICAgc2l6ZSA9IE1hdGgubWF4KG1heFggLSBtaW5YLCBtYXhZIC0gbWluWSk7XG4gICAgfVxuXG4gICAgZWFyY3V0TGlua2VkKG91dGVyTm9kZSwgdHJpYW5nbGVzLCBkaW0sIG1pblgsIG1pblksIHNpemUpO1xuXG4gICAgcmV0dXJuIHRyaWFuZ2xlcztcbn1cblxuLy8gY3JlYXRlIGEgY2lyY3VsYXIgZG91Ymx5IGxpbmtlZCBsaXN0IGZyb20gcG9seWdvbiBwb2ludHMgaW4gdGhlIHNwZWNpZmllZCB3aW5kaW5nIG9yZGVyXG5mdW5jdGlvbiBsaW5rZWRMaXN0KGRhdGEsIHN0YXJ0LCBlbmQsIGRpbSwgY2xvY2t3aXNlKSB7XG4gICAgdmFyIHN1bSA9IDAsXG4gICAgICAgIGksIGosIGxhc3Q7XG5cbiAgICAvLyBjYWxjdWxhdGUgb3JpZ2luYWwgd2luZGluZyBvcmRlciBvZiBhIHBvbHlnb24gcmluZ1xuICAgIGZvciAoaSA9IHN0YXJ0LCBqID0gZW5kIC0gZGltOyBpIDwgZW5kOyBpICs9IGRpbSkge1xuICAgICAgICBzdW0gKz0gKGRhdGFbal0gLSBkYXRhW2ldKSAqIChkYXRhW2kgKyAxXSArIGRhdGFbaiArIDFdKTtcbiAgICAgICAgaiA9IGk7XG4gICAgfVxuXG4gICAgLy8gbGluayBwb2ludHMgaW50byBjaXJjdWxhciBkb3VibHktbGlua2VkIGxpc3QgaW4gdGhlIHNwZWNpZmllZCB3aW5kaW5nIG9yZGVyXG4gICAgaWYgKGNsb2Nrd2lzZSA9PT0gKHN1bSA+IDApKSB7XG4gICAgICAgIGZvciAoaSA9IHN0YXJ0OyBpIDwgZW5kOyBpICs9IGRpbSkgbGFzdCA9IGluc2VydE5vZGUoaSwgZGF0YVtpXSwgZGF0YVtpICsgMV0sIGxhc3QpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIGZvciAoaSA9IGVuZCAtIGRpbTsgaSA+PSBzdGFydDsgaSAtPSBkaW0pIGxhc3QgPSBpbnNlcnROb2RlKGksIGRhdGFbaV0sIGRhdGFbaSArIDFdLCBsYXN0KTtcbiAgICB9XG5cbiAgICByZXR1cm4gbGFzdDtcbn1cblxuLy8gZWxpbWluYXRlIGNvbGluZWFyIG9yIGR1cGxpY2F0ZSBwb2ludHNcbmZ1bmN0aW9uIGZpbHRlclBvaW50cyhzdGFydCwgZW5kKSB7XG4gICAgaWYgKCFzdGFydCkgcmV0dXJuIHN0YXJ0O1xuICAgIGlmICghZW5kKSBlbmQgPSBzdGFydDtcblxuICAgIHZhciBwID0gc3RhcnQsXG4gICAgICAgIGFnYWluO1xuICAgIGRvIHtcbiAgICAgICAgYWdhaW4gPSBmYWxzZTtcblxuICAgICAgICBpZiAoIXAuc3RlaW5lciAmJiAoZXF1YWxzKHAsIHAubmV4dCkgfHwgYXJlYShwLnByZXYsIHAsIHAubmV4dCkgPT09IDApKSB7XG4gICAgICAgICAgICByZW1vdmVOb2RlKHApO1xuICAgICAgICAgICAgcCA9IGVuZCA9IHAucHJldjtcbiAgICAgICAgICAgIGlmIChwID09PSBwLm5leHQpIHJldHVybiBudWxsO1xuICAgICAgICAgICAgYWdhaW4gPSB0cnVlO1xuXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBwID0gcC5uZXh0O1xuICAgICAgICB9XG4gICAgfSB3aGlsZSAoYWdhaW4gfHwgcCAhPT0gZW5kKTtcblxuICAgIHJldHVybiBlbmQ7XG59XG5cbi8vIG1haW4gZWFyIHNsaWNpbmcgbG9vcCB3aGljaCB0cmlhbmd1bGF0ZXMgYSBwb2x5Z29uIChnaXZlbiBhcyBhIGxpbmtlZCBsaXN0KVxuZnVuY3Rpb24gZWFyY3V0TGlua2VkKGVhciwgdHJpYW5nbGVzLCBkaW0sIG1pblgsIG1pblksIHNpemUsIHBhc3MpIHtcbiAgICBpZiAoIWVhcikgcmV0dXJuO1xuXG4gICAgLy8gaW50ZXJsaW5rIHBvbHlnb24gbm9kZXMgaW4gei1vcmRlclxuICAgIGlmICghcGFzcyAmJiBzaXplKSBpbmRleEN1cnZlKGVhciwgbWluWCwgbWluWSwgc2l6ZSk7XG5cbiAgICB2YXIgc3RvcCA9IGVhcixcbiAgICAgICAgcHJldiwgbmV4dDtcblxuICAgIC8vIGl0ZXJhdGUgdGhyb3VnaCBlYXJzLCBzbGljaW5nIHRoZW0gb25lIGJ5IG9uZVxuICAgIHdoaWxlIChlYXIucHJldiAhPT0gZWFyLm5leHQpIHtcbiAgICAgICAgcHJldiA9IGVhci5wcmV2O1xuICAgICAgICBuZXh0ID0gZWFyLm5leHQ7XG5cbiAgICAgICAgaWYgKHNpemUgPyBpc0Vhckhhc2hlZChlYXIsIG1pblgsIG1pblksIHNpemUpIDogaXNFYXIoZWFyKSkge1xuICAgICAgICAgICAgLy8gY3V0IG9mZiB0aGUgdHJpYW5nbGVcbiAgICAgICAgICAgIHRyaWFuZ2xlcy5wdXNoKHByZXYuaSAvIGRpbSk7XG4gICAgICAgICAgICB0cmlhbmdsZXMucHVzaChlYXIuaSAvIGRpbSk7XG4gICAgICAgICAgICB0cmlhbmdsZXMucHVzaChuZXh0LmkgLyBkaW0pO1xuXG4gICAgICAgICAgICByZW1vdmVOb2RlKGVhcik7XG5cbiAgICAgICAgICAgIC8vIHNraXBwaW5nIHRoZSBuZXh0IHZlcnRpY2UgbGVhZHMgdG8gbGVzcyBzbGl2ZXIgdHJpYW5nbGVzXG4gICAgICAgICAgICBlYXIgPSBuZXh0Lm5leHQ7XG4gICAgICAgICAgICBzdG9wID0gbmV4dC5uZXh0O1xuXG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGVhciA9IG5leHQ7XG5cbiAgICAgICAgLy8gaWYgd2UgbG9vcGVkIHRocm91Z2ggdGhlIHdob2xlIHJlbWFpbmluZyBwb2x5Z29uIGFuZCBjYW4ndCBmaW5kIGFueSBtb3JlIGVhcnNcbiAgICAgICAgaWYgKGVhciA9PT0gc3RvcCkge1xuICAgICAgICAgICAgLy8gdHJ5IGZpbHRlcmluZyBwb2ludHMgYW5kIHNsaWNpbmcgYWdhaW5cbiAgICAgICAgICAgIGlmICghcGFzcykge1xuICAgICAgICAgICAgICAgIGVhcmN1dExpbmtlZChmaWx0ZXJQb2ludHMoZWFyKSwgdHJpYW5nbGVzLCBkaW0sIG1pblgsIG1pblksIHNpemUsIDEpO1xuXG4gICAgICAgICAgICAvLyBpZiB0aGlzIGRpZG4ndCB3b3JrLCB0cnkgY3VyaW5nIGFsbCBzbWFsbCBzZWxmLWludGVyc2VjdGlvbnMgbG9jYWxseVxuICAgICAgICAgICAgfSBlbHNlIGlmIChwYXNzID09PSAxKSB7XG4gICAgICAgICAgICAgICAgZWFyID0gY3VyZUxvY2FsSW50ZXJzZWN0aW9ucyhlYXIsIHRyaWFuZ2xlcywgZGltKTtcbiAgICAgICAgICAgICAgICBlYXJjdXRMaW5rZWQoZWFyLCB0cmlhbmdsZXMsIGRpbSwgbWluWCwgbWluWSwgc2l6ZSwgMik7XG5cbiAgICAgICAgICAgIC8vIGFzIGEgbGFzdCByZXNvcnQsIHRyeSBzcGxpdHRpbmcgdGhlIHJlbWFpbmluZyBwb2x5Z29uIGludG8gdHdvXG4gICAgICAgICAgICB9IGVsc2UgaWYgKHBhc3MgPT09IDIpIHtcbiAgICAgICAgICAgICAgICBzcGxpdEVhcmN1dChlYXIsIHRyaWFuZ2xlcywgZGltLCBtaW5YLCBtaW5ZLCBzaXplKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbi8vIGNoZWNrIHdoZXRoZXIgYSBwb2x5Z29uIG5vZGUgZm9ybXMgYSB2YWxpZCBlYXIgd2l0aCBhZGphY2VudCBub2Rlc1xuZnVuY3Rpb24gaXNFYXIoZWFyKSB7XG4gICAgdmFyIGEgPSBlYXIucHJldixcbiAgICAgICAgYiA9IGVhcixcbiAgICAgICAgYyA9IGVhci5uZXh0O1xuXG4gICAgaWYgKGFyZWEoYSwgYiwgYykgPj0gMCkgcmV0dXJuIGZhbHNlOyAvLyByZWZsZXgsIGNhbid0IGJlIGFuIGVhclxuXG4gICAgLy8gbm93IG1ha2Ugc3VyZSB3ZSBkb24ndCBoYXZlIG90aGVyIHBvaW50cyBpbnNpZGUgdGhlIHBvdGVudGlhbCBlYXJcbiAgICB2YXIgcCA9IGVhci5uZXh0Lm5leHQ7XG5cbiAgICB3aGlsZSAocCAhPT0gZWFyLnByZXYpIHtcbiAgICAgICAgaWYgKHBvaW50SW5UcmlhbmdsZShhLngsIGEueSwgYi54LCBiLnksIGMueCwgYy55LCBwLngsIHAueSkgJiZcbiAgICAgICAgICAgIGFyZWEocC5wcmV2LCBwLCBwLm5leHQpID49IDApIHJldHVybiBmYWxzZTtcbiAgICAgICAgcCA9IHAubmV4dDtcbiAgICB9XG5cbiAgICByZXR1cm4gdHJ1ZTtcbn1cblxuZnVuY3Rpb24gaXNFYXJIYXNoZWQoZWFyLCBtaW5YLCBtaW5ZLCBzaXplKSB7XG4gICAgdmFyIGEgPSBlYXIucHJldixcbiAgICAgICAgYiA9IGVhcixcbiAgICAgICAgYyA9IGVhci5uZXh0O1xuXG4gICAgaWYgKGFyZWEoYSwgYiwgYykgPj0gMCkgcmV0dXJuIGZhbHNlOyAvLyByZWZsZXgsIGNhbid0IGJlIGFuIGVhclxuXG4gICAgLy8gdHJpYW5nbGUgYmJveDsgbWluICYgbWF4IGFyZSBjYWxjdWxhdGVkIGxpa2UgdGhpcyBmb3Igc3BlZWRcbiAgICB2YXIgbWluVFggPSBhLnggPCBiLnggPyAoYS54IDwgYy54ID8gYS54IDogYy54KSA6IChiLnggPCBjLnggPyBiLnggOiBjLngpLFxuICAgICAgICBtaW5UWSA9IGEueSA8IGIueSA/IChhLnkgPCBjLnkgPyBhLnkgOiBjLnkpIDogKGIueSA8IGMueSA/IGIueSA6IGMueSksXG4gICAgICAgIG1heFRYID0gYS54ID4gYi54ID8gKGEueCA+IGMueCA/IGEueCA6IGMueCkgOiAoYi54ID4gYy54ID8gYi54IDogYy54KSxcbiAgICAgICAgbWF4VFkgPSBhLnkgPiBiLnkgPyAoYS55ID4gYy55ID8gYS55IDogYy55KSA6IChiLnkgPiBjLnkgPyBiLnkgOiBjLnkpO1xuXG4gICAgLy8gei1vcmRlciByYW5nZSBmb3IgdGhlIGN1cnJlbnQgdHJpYW5nbGUgYmJveDtcbiAgICB2YXIgbWluWiA9IHpPcmRlcihtaW5UWCwgbWluVFksIG1pblgsIG1pblksIHNpemUpLFxuICAgICAgICBtYXhaID0gek9yZGVyKG1heFRYLCBtYXhUWSwgbWluWCwgbWluWSwgc2l6ZSk7XG5cbiAgICAvLyBmaXJzdCBsb29rIGZvciBwb2ludHMgaW5zaWRlIHRoZSB0cmlhbmdsZSBpbiBpbmNyZWFzaW5nIHotb3JkZXJcbiAgICB2YXIgcCA9IGVhci5uZXh0WjtcblxuICAgIHdoaWxlIChwICYmIHAueiA8PSBtYXhaKSB7XG4gICAgICAgIGlmIChwICE9PSBlYXIucHJldiAmJiBwICE9PSBlYXIubmV4dCAmJlxuICAgICAgICAgICAgcG9pbnRJblRyaWFuZ2xlKGEueCwgYS55LCBiLngsIGIueSwgYy54LCBjLnksIHAueCwgcC55KSAmJlxuICAgICAgICAgICAgYXJlYShwLnByZXYsIHAsIHAubmV4dCkgPj0gMCkgcmV0dXJuIGZhbHNlO1xuICAgICAgICBwID0gcC5uZXh0WjtcbiAgICB9XG5cbiAgICAvLyB0aGVuIGxvb2sgZm9yIHBvaW50cyBpbiBkZWNyZWFzaW5nIHotb3JkZXJcbiAgICBwID0gZWFyLnByZXZaO1xuXG4gICAgd2hpbGUgKHAgJiYgcC56ID49IG1pblopIHtcbiAgICAgICAgaWYgKHAgIT09IGVhci5wcmV2ICYmIHAgIT09IGVhci5uZXh0ICYmXG4gICAgICAgICAgICBwb2ludEluVHJpYW5nbGUoYS54LCBhLnksIGIueCwgYi55LCBjLngsIGMueSwgcC54LCBwLnkpICYmXG4gICAgICAgICAgICBhcmVhKHAucHJldiwgcCwgcC5uZXh0KSA+PSAwKSByZXR1cm4gZmFsc2U7XG4gICAgICAgIHAgPSBwLnByZXZaO1xuICAgIH1cblxuICAgIHJldHVybiB0cnVlO1xufVxuXG4vLyBnbyB0aHJvdWdoIGFsbCBwb2x5Z29uIG5vZGVzIGFuZCBjdXJlIHNtYWxsIGxvY2FsIHNlbGYtaW50ZXJzZWN0aW9uc1xuZnVuY3Rpb24gY3VyZUxvY2FsSW50ZXJzZWN0aW9ucyhzdGFydCwgdHJpYW5nbGVzLCBkaW0pIHtcbiAgICB2YXIgcCA9IHN0YXJ0O1xuICAgIGRvIHtcbiAgICAgICAgdmFyIGEgPSBwLnByZXYsXG4gICAgICAgICAgICBiID0gcC5uZXh0Lm5leHQ7XG5cbiAgICAgICAgLy8gYSBzZWxmLWludGVyc2VjdGlvbiB3aGVyZSBlZGdlICh2W2ktMV0sdltpXSkgaW50ZXJzZWN0cyAodltpKzFdLHZbaSsyXSlcbiAgICAgICAgaWYgKGludGVyc2VjdHMoYSwgcCwgcC5uZXh0LCBiKSAmJiBsb2NhbGx5SW5zaWRlKGEsIGIpICYmIGxvY2FsbHlJbnNpZGUoYiwgYSkpIHtcblxuICAgICAgICAgICAgdHJpYW5nbGVzLnB1c2goYS5pIC8gZGltKTtcbiAgICAgICAgICAgIHRyaWFuZ2xlcy5wdXNoKHAuaSAvIGRpbSk7XG4gICAgICAgICAgICB0cmlhbmdsZXMucHVzaChiLmkgLyBkaW0pO1xuXG4gICAgICAgICAgICAvLyByZW1vdmUgdHdvIG5vZGVzIGludm9sdmVkXG4gICAgICAgICAgICByZW1vdmVOb2RlKHApO1xuICAgICAgICAgICAgcmVtb3ZlTm9kZShwLm5leHQpO1xuXG4gICAgICAgICAgICBwID0gc3RhcnQgPSBiO1xuICAgICAgICB9XG4gICAgICAgIHAgPSBwLm5leHQ7XG4gICAgfSB3aGlsZSAocCAhPT0gc3RhcnQpO1xuXG4gICAgcmV0dXJuIHA7XG59XG5cbi8vIHRyeSBzcGxpdHRpbmcgcG9seWdvbiBpbnRvIHR3byBhbmQgdHJpYW5ndWxhdGUgdGhlbSBpbmRlcGVuZGVudGx5XG5mdW5jdGlvbiBzcGxpdEVhcmN1dChzdGFydCwgdHJpYW5nbGVzLCBkaW0sIG1pblgsIG1pblksIHNpemUpIHtcbiAgICAvLyBsb29rIGZvciBhIHZhbGlkIGRpYWdvbmFsIHRoYXQgZGl2aWRlcyB0aGUgcG9seWdvbiBpbnRvIHR3b1xuICAgIHZhciBhID0gc3RhcnQ7XG4gICAgZG8ge1xuICAgICAgICB2YXIgYiA9IGEubmV4dC5uZXh0O1xuICAgICAgICB3aGlsZSAoYiAhPT0gYS5wcmV2KSB7XG4gICAgICAgICAgICBpZiAoYS5pICE9PSBiLmkgJiYgaXNWYWxpZERpYWdvbmFsKGEsIGIpKSB7XG4gICAgICAgICAgICAgICAgLy8gc3BsaXQgdGhlIHBvbHlnb24gaW4gdHdvIGJ5IHRoZSBkaWFnb25hbFxuICAgICAgICAgICAgICAgIHZhciBjID0gc3BsaXRQb2x5Z29uKGEsIGIpO1xuXG4gICAgICAgICAgICAgICAgLy8gZmlsdGVyIGNvbGluZWFyIHBvaW50cyBhcm91bmQgdGhlIGN1dHNcbiAgICAgICAgICAgICAgICBhID0gZmlsdGVyUG9pbnRzKGEsIGEubmV4dCk7XG4gICAgICAgICAgICAgICAgYyA9IGZpbHRlclBvaW50cyhjLCBjLm5leHQpO1xuXG4gICAgICAgICAgICAgICAgLy8gcnVuIGVhcmN1dCBvbiBlYWNoIGhhbGZcbiAgICAgICAgICAgICAgICBlYXJjdXRMaW5rZWQoYSwgdHJpYW5nbGVzLCBkaW0sIG1pblgsIG1pblksIHNpemUpO1xuICAgICAgICAgICAgICAgIGVhcmN1dExpbmtlZChjLCB0cmlhbmdsZXMsIGRpbSwgbWluWCwgbWluWSwgc2l6ZSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYiA9IGIubmV4dDtcbiAgICAgICAgfVxuICAgICAgICBhID0gYS5uZXh0O1xuICAgIH0gd2hpbGUgKGEgIT09IHN0YXJ0KTtcbn1cblxuLy8gbGluayBldmVyeSBob2xlIGludG8gdGhlIG91dGVyIGxvb3AsIHByb2R1Y2luZyBhIHNpbmdsZS1yaW5nIHBvbHlnb24gd2l0aG91dCBob2xlc1xuZnVuY3Rpb24gZWxpbWluYXRlSG9sZXMoZGF0YSwgaG9sZUluZGljZXMsIG91dGVyTm9kZSwgZGltKSB7XG4gICAgdmFyIHF1ZXVlID0gW10sXG4gICAgICAgIGksIGxlbiwgc3RhcnQsIGVuZCwgbGlzdDtcblxuICAgIGZvciAoaSA9IDAsIGxlbiA9IGhvbGVJbmRpY2VzLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICAgIHN0YXJ0ID0gaG9sZUluZGljZXNbaV0gKiBkaW07XG4gICAgICAgIGVuZCA9IGkgPCBsZW4gLSAxID8gaG9sZUluZGljZXNbaSArIDFdICogZGltIDogZGF0YS5sZW5ndGg7XG4gICAgICAgIGxpc3QgPSBsaW5rZWRMaXN0KGRhdGEsIHN0YXJ0LCBlbmQsIGRpbSwgZmFsc2UpO1xuICAgICAgICBpZiAobGlzdCA9PT0gbGlzdC5uZXh0KSBsaXN0LnN0ZWluZXIgPSB0cnVlO1xuICAgICAgICBxdWV1ZS5wdXNoKGdldExlZnRtb3N0KGxpc3QpKTtcbiAgICB9XG5cbiAgICBxdWV1ZS5zb3J0KGNvbXBhcmVYKTtcblxuICAgIC8vIHByb2Nlc3MgaG9sZXMgZnJvbSBsZWZ0IHRvIHJpZ2h0XG4gICAgZm9yIChpID0gMDsgaSA8IHF1ZXVlLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGVsaW1pbmF0ZUhvbGUocXVldWVbaV0sIG91dGVyTm9kZSk7XG4gICAgICAgIG91dGVyTm9kZSA9IGZpbHRlclBvaW50cyhvdXRlck5vZGUsIG91dGVyTm9kZS5uZXh0KTtcbiAgICB9XG5cbiAgICByZXR1cm4gb3V0ZXJOb2RlO1xufVxuXG5mdW5jdGlvbiBjb21wYXJlWChhLCBiKSB7XG4gICAgcmV0dXJuIGEueCAtIGIueDtcbn1cblxuLy8gZmluZCBhIGJyaWRnZSBiZXR3ZWVuIHZlcnRpY2VzIHRoYXQgY29ubmVjdHMgaG9sZSB3aXRoIGFuIG91dGVyIHJpbmcgYW5kIGFuZCBsaW5rIGl0XG5mdW5jdGlvbiBlbGltaW5hdGVIb2xlKGhvbGUsIG91dGVyTm9kZSkge1xuICAgIG91dGVyTm9kZSA9IGZpbmRIb2xlQnJpZGdlKGhvbGUsIG91dGVyTm9kZSk7XG4gICAgaWYgKG91dGVyTm9kZSkge1xuICAgICAgICB2YXIgYiA9IHNwbGl0UG9seWdvbihvdXRlck5vZGUsIGhvbGUpO1xuICAgICAgICBmaWx0ZXJQb2ludHMoYiwgYi5uZXh0KTtcbiAgICB9XG59XG5cbi8vIERhdmlkIEViZXJseSdzIGFsZ29yaXRobSBmb3IgZmluZGluZyBhIGJyaWRnZSBiZXR3ZWVuIGhvbGUgYW5kIG91dGVyIHBvbHlnb25cbmZ1bmN0aW9uIGZpbmRIb2xlQnJpZGdlKGhvbGUsIG91dGVyTm9kZSkge1xuICAgIHZhciBwID0gb3V0ZXJOb2RlLFxuICAgICAgICBoeCA9IGhvbGUueCxcbiAgICAgICAgaHkgPSBob2xlLnksXG4gICAgICAgIHF4ID0gLUluZmluaXR5LFxuICAgICAgICBtO1xuXG4gICAgLy8gZmluZCBhIHNlZ21lbnQgaW50ZXJzZWN0ZWQgYnkgYSByYXkgZnJvbSB0aGUgaG9sZSdzIGxlZnRtb3N0IHBvaW50IHRvIHRoZSBsZWZ0O1xuICAgIC8vIHNlZ21lbnQncyBlbmRwb2ludCB3aXRoIGxlc3NlciB4IHdpbGwgYmUgcG90ZW50aWFsIGNvbm5lY3Rpb24gcG9pbnRcbiAgICBkbyB7XG4gICAgICAgIGlmIChoeSA8PSBwLnkgJiYgaHkgPj0gcC5uZXh0LnkpIHtcbiAgICAgICAgICAgIHZhciB4ID0gcC54ICsgKGh5IC0gcC55KSAqIChwLm5leHQueCAtIHAueCkgLyAocC5uZXh0LnkgLSBwLnkpO1xuICAgICAgICAgICAgaWYgKHggPD0gaHggJiYgeCA+IHF4KSB7XG4gICAgICAgICAgICAgICAgcXggPSB4O1xuICAgICAgICAgICAgICAgIG0gPSBwLnggPCBwLm5leHQueCA/IHAgOiBwLm5leHQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcCA9IHAubmV4dDtcbiAgICB9IHdoaWxlIChwICE9PSBvdXRlck5vZGUpO1xuXG4gICAgaWYgKCFtKSByZXR1cm4gbnVsbDtcblxuICAgIC8vIGxvb2sgZm9yIHBvaW50cyBpbnNpZGUgdGhlIHRyaWFuZ2xlIG9mIGhvbGUgcG9pbnQsIHNlZ21lbnQgaW50ZXJzZWN0aW9uIGFuZCBlbmRwb2ludDtcbiAgICAvLyBpZiB0aGVyZSBhcmUgbm8gcG9pbnRzIGZvdW5kLCB3ZSBoYXZlIGEgdmFsaWQgY29ubmVjdGlvbjtcbiAgICAvLyBvdGhlcndpc2UgY2hvb3NlIHRoZSBwb2ludCBvZiB0aGUgbWluaW11bSBhbmdsZSB3aXRoIHRoZSByYXkgYXMgY29ubmVjdGlvbiBwb2ludFxuXG4gICAgdmFyIHN0b3AgPSBtLFxuICAgICAgICB0YW5NaW4gPSBJbmZpbml0eSxcbiAgICAgICAgdGFuO1xuXG4gICAgcCA9IG0ubmV4dDtcblxuICAgIHdoaWxlIChwICE9PSBzdG9wKSB7XG4gICAgICAgIGlmIChoeCA+PSBwLnggJiYgcC54ID49IG0ueCAmJlxuICAgICAgICAgICAgICAgIHBvaW50SW5UcmlhbmdsZShoeSA8IG0ueSA/IGh4IDogcXgsIGh5LCBtLngsIG0ueSwgaHkgPCBtLnkgPyBxeCA6IGh4LCBoeSwgcC54LCBwLnkpKSB7XG5cbiAgICAgICAgICAgIHRhbiA9IE1hdGguYWJzKGh5IC0gcC55KSAvIChoeCAtIHAueCk7IC8vIHRhbmdlbnRpYWxcblxuICAgICAgICAgICAgaWYgKCh0YW4gPCB0YW5NaW4gfHwgKHRhbiA9PT0gdGFuTWluICYmIHAueCA+IG0ueCkpICYmIGxvY2FsbHlJbnNpZGUocCwgaG9sZSkpIHtcbiAgICAgICAgICAgICAgICBtID0gcDtcbiAgICAgICAgICAgICAgICB0YW5NaW4gPSB0YW47XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBwID0gcC5uZXh0O1xuICAgIH1cblxuICAgIHJldHVybiBtO1xufVxuXG4vLyBpbnRlcmxpbmsgcG9seWdvbiBub2RlcyBpbiB6LW9yZGVyXG5mdW5jdGlvbiBpbmRleEN1cnZlKHN0YXJ0LCBtaW5YLCBtaW5ZLCBzaXplKSB7XG4gICAgdmFyIHAgPSBzdGFydDtcbiAgICBkbyB7XG4gICAgICAgIGlmIChwLnogPT09IG51bGwpIHAueiA9IHpPcmRlcihwLngsIHAueSwgbWluWCwgbWluWSwgc2l6ZSk7XG4gICAgICAgIHAucHJldlogPSBwLnByZXY7XG4gICAgICAgIHAubmV4dFogPSBwLm5leHQ7XG4gICAgICAgIHAgPSBwLm5leHQ7XG4gICAgfSB3aGlsZSAocCAhPT0gc3RhcnQpO1xuXG4gICAgcC5wcmV2Wi5uZXh0WiA9IG51bGw7XG4gICAgcC5wcmV2WiA9IG51bGw7XG5cbiAgICBzb3J0TGlua2VkKHApO1xufVxuXG4vLyBTaW1vbiBUYXRoYW0ncyBsaW5rZWQgbGlzdCBtZXJnZSBzb3J0IGFsZ29yaXRobVxuLy8gaHR0cDovL3d3dy5jaGlhcmsuZ3JlZW5lbmQub3JnLnVrL35zZ3RhdGhhbS9hbGdvcml0aG1zL2xpc3Rzb3J0Lmh0bWxcbmZ1bmN0aW9uIHNvcnRMaW5rZWQobGlzdCkge1xuICAgIHZhciBpLCBwLCBxLCBlLCB0YWlsLCBudW1NZXJnZXMsIHBTaXplLCBxU2l6ZSxcbiAgICAgICAgaW5TaXplID0gMTtcblxuICAgIGRvIHtcbiAgICAgICAgcCA9IGxpc3Q7XG4gICAgICAgIGxpc3QgPSBudWxsO1xuICAgICAgICB0YWlsID0gbnVsbDtcbiAgICAgICAgbnVtTWVyZ2VzID0gMDtcblxuICAgICAgICB3aGlsZSAocCkge1xuICAgICAgICAgICAgbnVtTWVyZ2VzKys7XG4gICAgICAgICAgICBxID0gcDtcbiAgICAgICAgICAgIHBTaXplID0gMDtcbiAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBpblNpemU7IGkrKykge1xuICAgICAgICAgICAgICAgIHBTaXplKys7XG4gICAgICAgICAgICAgICAgcSA9IHEubmV4dFo7XG4gICAgICAgICAgICAgICAgaWYgKCFxKSBicmVhaztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcVNpemUgPSBpblNpemU7XG5cbiAgICAgICAgICAgIHdoaWxlIChwU2l6ZSA+IDAgfHwgKHFTaXplID4gMCAmJiBxKSkge1xuXG4gICAgICAgICAgICAgICAgaWYgKHBTaXplID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIGUgPSBxO1xuICAgICAgICAgICAgICAgICAgICBxID0gcS5uZXh0WjtcbiAgICAgICAgICAgICAgICAgICAgcVNpemUtLTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHFTaXplID09PSAwIHx8ICFxKSB7XG4gICAgICAgICAgICAgICAgICAgIGUgPSBwO1xuICAgICAgICAgICAgICAgICAgICBwID0gcC5uZXh0WjtcbiAgICAgICAgICAgICAgICAgICAgcFNpemUtLTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHAueiA8PSBxLnopIHtcbiAgICAgICAgICAgICAgICAgICAgZSA9IHA7XG4gICAgICAgICAgICAgICAgICAgIHAgPSBwLm5leHRaO1xuICAgICAgICAgICAgICAgICAgICBwU2l6ZS0tO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGUgPSBxO1xuICAgICAgICAgICAgICAgICAgICBxID0gcS5uZXh0WjtcbiAgICAgICAgICAgICAgICAgICAgcVNpemUtLTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAodGFpbCkgdGFpbC5uZXh0WiA9IGU7XG4gICAgICAgICAgICAgICAgZWxzZSBsaXN0ID0gZTtcblxuICAgICAgICAgICAgICAgIGUucHJldlogPSB0YWlsO1xuICAgICAgICAgICAgICAgIHRhaWwgPSBlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBwID0gcTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRhaWwubmV4dFogPSBudWxsO1xuICAgICAgICBpblNpemUgKj0gMjtcblxuICAgIH0gd2hpbGUgKG51bU1lcmdlcyA+IDEpO1xuXG4gICAgcmV0dXJuIGxpc3Q7XG59XG5cbi8vIHotb3JkZXIgb2YgYSBwb2ludCBnaXZlbiBjb29yZHMgYW5kIHNpemUgb2YgdGhlIGRhdGEgYm91bmRpbmcgYm94XG5mdW5jdGlvbiB6T3JkZXIoeCwgeSwgbWluWCwgbWluWSwgc2l6ZSkge1xuICAgIC8vIGNvb3JkcyBhcmUgdHJhbnNmb3JtZWQgaW50byBub24tbmVnYXRpdmUgMTUtYml0IGludGVnZXIgcmFuZ2VcbiAgICB4ID0gMzI3NjcgKiAoeCAtIG1pblgpIC8gc2l6ZTtcbiAgICB5ID0gMzI3NjcgKiAoeSAtIG1pblkpIC8gc2l6ZTtcblxuICAgIHggPSAoeCB8ICh4IDw8IDgpKSAmIDB4MDBGRjAwRkY7XG4gICAgeCA9ICh4IHwgKHggPDwgNCkpICYgMHgwRjBGMEYwRjtcbiAgICB4ID0gKHggfCAoeCA8PCAyKSkgJiAweDMzMzMzMzMzO1xuICAgIHggPSAoeCB8ICh4IDw8IDEpKSAmIDB4NTU1NTU1NTU7XG5cbiAgICB5ID0gKHkgfCAoeSA8PCA4KSkgJiAweDAwRkYwMEZGO1xuICAgIHkgPSAoeSB8ICh5IDw8IDQpKSAmIDB4MEYwRjBGMEY7XG4gICAgeSA9ICh5IHwgKHkgPDwgMikpICYgMHgzMzMzMzMzMztcbiAgICB5ID0gKHkgfCAoeSA8PCAxKSkgJiAweDU1NTU1NTU1O1xuXG4gICAgcmV0dXJuIHggfCAoeSA8PCAxKTtcbn1cblxuLy8gZmluZCB0aGUgbGVmdG1vc3Qgbm9kZSBvZiBhIHBvbHlnb24gcmluZ1xuZnVuY3Rpb24gZ2V0TGVmdG1vc3Qoc3RhcnQpIHtcbiAgICB2YXIgcCA9IHN0YXJ0LFxuICAgICAgICBsZWZ0bW9zdCA9IHN0YXJ0O1xuICAgIGRvIHtcbiAgICAgICAgaWYgKHAueCA8IGxlZnRtb3N0LngpIGxlZnRtb3N0ID0gcDtcbiAgICAgICAgcCA9IHAubmV4dDtcbiAgICB9IHdoaWxlIChwICE9PSBzdGFydCk7XG5cbiAgICByZXR1cm4gbGVmdG1vc3Q7XG59XG5cbi8vIGNoZWNrIGlmIGEgcG9pbnQgbGllcyB3aXRoaW4gYSBjb252ZXggdHJpYW5nbGVcbmZ1bmN0aW9uIHBvaW50SW5UcmlhbmdsZShheCwgYXksIGJ4LCBieSwgY3gsIGN5LCBweCwgcHkpIHtcbiAgICByZXR1cm4gKGN4IC0gcHgpICogKGF5IC0gcHkpIC0gKGF4IC0gcHgpICogKGN5IC0gcHkpID49IDAgJiZcbiAgICAgICAgICAgKGF4IC0gcHgpICogKGJ5IC0gcHkpIC0gKGJ4IC0gcHgpICogKGF5IC0gcHkpID49IDAgJiZcbiAgICAgICAgICAgKGJ4IC0gcHgpICogKGN5IC0gcHkpIC0gKGN4IC0gcHgpICogKGJ5IC0gcHkpID49IDA7XG59XG5cbi8vIGNoZWNrIGlmIGEgZGlhZ29uYWwgYmV0d2VlbiB0d28gcG9seWdvbiBub2RlcyBpcyB2YWxpZCAobGllcyBpbiBwb2x5Z29uIGludGVyaW9yKVxuZnVuY3Rpb24gaXNWYWxpZERpYWdvbmFsKGEsIGIpIHtcbiAgICByZXR1cm4gZXF1YWxzKGEsIGIpIHx8IGEubmV4dC5pICE9PSBiLmkgJiYgYS5wcmV2LmkgIT09IGIuaSAmJiAhaW50ZXJzZWN0c1BvbHlnb24oYSwgYikgJiZcbiAgICAgICAgICAgbG9jYWxseUluc2lkZShhLCBiKSAmJiBsb2NhbGx5SW5zaWRlKGIsIGEpICYmIG1pZGRsZUluc2lkZShhLCBiKTtcbn1cblxuLy8gc2lnbmVkIGFyZWEgb2YgYSB0cmlhbmdsZVxuZnVuY3Rpb24gYXJlYShwLCBxLCByKSB7XG4gICAgcmV0dXJuIChxLnkgLSBwLnkpICogKHIueCAtIHEueCkgLSAocS54IC0gcC54KSAqIChyLnkgLSBxLnkpO1xufVxuXG4vLyBjaGVjayBpZiB0d28gcG9pbnRzIGFyZSBlcXVhbFxuZnVuY3Rpb24gZXF1YWxzKHAxLCBwMikge1xuICAgIHJldHVybiBwMS54ID09PSBwMi54ICYmIHAxLnkgPT09IHAyLnk7XG59XG5cbi8vIGNoZWNrIGlmIHR3byBzZWdtZW50cyBpbnRlcnNlY3RcbmZ1bmN0aW9uIGludGVyc2VjdHMocDEsIHExLCBwMiwgcTIpIHtcbiAgICByZXR1cm4gYXJlYShwMSwgcTEsIHAyKSA+IDAgIT09IGFyZWEocDEsIHExLCBxMikgPiAwICYmXG4gICAgICAgICAgIGFyZWEocDIsIHEyLCBwMSkgPiAwICE9PSBhcmVhKHAyLCBxMiwgcTEpID4gMDtcbn1cblxuLy8gY2hlY2sgaWYgYSBwb2x5Z29uIGRpYWdvbmFsIGludGVyc2VjdHMgYW55IHBvbHlnb24gc2VnbWVudHNcbmZ1bmN0aW9uIGludGVyc2VjdHNQb2x5Z29uKGEsIGIpIHtcbiAgICB2YXIgcCA9IGE7XG4gICAgZG8ge1xuICAgICAgICBpZiAocC5pICE9PSBhLmkgJiYgcC5uZXh0LmkgIT09IGEuaSAmJiBwLmkgIT09IGIuaSAmJiBwLm5leHQuaSAhPT0gYi5pICYmXG4gICAgICAgICAgICAgICAgaW50ZXJzZWN0cyhwLCBwLm5leHQsIGEsIGIpKSByZXR1cm4gdHJ1ZTtcbiAgICAgICAgcCA9IHAubmV4dDtcbiAgICB9IHdoaWxlIChwICE9PSBhKTtcblxuICAgIHJldHVybiBmYWxzZTtcbn1cblxuLy8gY2hlY2sgaWYgYSBwb2x5Z29uIGRpYWdvbmFsIGlzIGxvY2FsbHkgaW5zaWRlIHRoZSBwb2x5Z29uXG5mdW5jdGlvbiBsb2NhbGx5SW5zaWRlKGEsIGIpIHtcbiAgICByZXR1cm4gYXJlYShhLnByZXYsIGEsIGEubmV4dCkgPCAwID9cbiAgICAgICAgYXJlYShhLCBiLCBhLm5leHQpID49IDAgJiYgYXJlYShhLCBhLnByZXYsIGIpID49IDAgOlxuICAgICAgICBhcmVhKGEsIGIsIGEucHJldikgPCAwIHx8IGFyZWEoYSwgYS5uZXh0LCBiKSA8IDA7XG59XG5cbi8vIGNoZWNrIGlmIHRoZSBtaWRkbGUgcG9pbnQgb2YgYSBwb2x5Z29uIGRpYWdvbmFsIGlzIGluc2lkZSB0aGUgcG9seWdvblxuZnVuY3Rpb24gbWlkZGxlSW5zaWRlKGEsIGIpIHtcbiAgICB2YXIgcCA9IGEsXG4gICAgICAgIGluc2lkZSA9IGZhbHNlLFxuICAgICAgICBweCA9IChhLnggKyBiLngpIC8gMixcbiAgICAgICAgcHkgPSAoYS55ICsgYi55KSAvIDI7XG4gICAgZG8ge1xuICAgICAgICBpZiAoKChwLnkgPiBweSkgIT09IChwLm5leHQueSA+IHB5KSkgJiYgKHB4IDwgKHAubmV4dC54IC0gcC54KSAqIChweSAtIHAueSkgLyAocC5uZXh0LnkgLSBwLnkpICsgcC54KSlcbiAgICAgICAgICAgIGluc2lkZSA9ICFpbnNpZGU7XG4gICAgICAgIHAgPSBwLm5leHQ7XG4gICAgfSB3aGlsZSAocCAhPT0gYSk7XG5cbiAgICByZXR1cm4gaW5zaWRlO1xufVxuXG4vLyBsaW5rIHR3byBwb2x5Z29uIHZlcnRpY2VzIHdpdGggYSBicmlkZ2U7IGlmIHRoZSB2ZXJ0aWNlcyBiZWxvbmcgdG8gdGhlIHNhbWUgcmluZywgaXQgc3BsaXRzIHBvbHlnb24gaW50byB0d287XG4vLyBpZiBvbmUgYmVsb25ncyB0byB0aGUgb3V0ZXIgcmluZyBhbmQgYW5vdGhlciB0byBhIGhvbGUsIGl0IG1lcmdlcyBpdCBpbnRvIGEgc2luZ2xlIHJpbmdcbmZ1bmN0aW9uIHNwbGl0UG9seWdvbihhLCBiKSB7XG4gICAgdmFyIGEyID0gbmV3IE5vZGUoYS5pLCBhLngsIGEueSksXG4gICAgICAgIGIyID0gbmV3IE5vZGUoYi5pLCBiLngsIGIueSksXG4gICAgICAgIGFuID0gYS5uZXh0LFxuICAgICAgICBicCA9IGIucHJldjtcblxuICAgIGEubmV4dCA9IGI7XG4gICAgYi5wcmV2ID0gYTtcblxuICAgIGEyLm5leHQgPSBhbjtcbiAgICBhbi5wcmV2ID0gYTI7XG5cbiAgICBiMi5uZXh0ID0gYTI7XG4gICAgYTIucHJldiA9IGIyO1xuXG4gICAgYnAubmV4dCA9IGIyO1xuICAgIGIyLnByZXYgPSBicDtcblxuICAgIHJldHVybiBiMjtcbn1cblxuLy8gY3JlYXRlIGEgbm9kZSBhbmQgb3B0aW9uYWxseSBsaW5rIGl0IHdpdGggcHJldmlvdXMgb25lIChpbiBhIGNpcmN1bGFyIGRvdWJseSBsaW5rZWQgbGlzdClcbmZ1bmN0aW9uIGluc2VydE5vZGUoaSwgeCwgeSwgbGFzdCkge1xuICAgIHZhciBwID0gbmV3IE5vZGUoaSwgeCwgeSk7XG5cbiAgICBpZiAoIWxhc3QpIHtcbiAgICAgICAgcC5wcmV2ID0gcDtcbiAgICAgICAgcC5uZXh0ID0gcDtcblxuICAgIH0gZWxzZSB7XG4gICAgICAgIHAubmV4dCA9IGxhc3QubmV4dDtcbiAgICAgICAgcC5wcmV2ID0gbGFzdDtcbiAgICAgICAgbGFzdC5uZXh0LnByZXYgPSBwO1xuICAgICAgICBsYXN0Lm5leHQgPSBwO1xuICAgIH1cbiAgICByZXR1cm4gcDtcbn1cblxuZnVuY3Rpb24gcmVtb3ZlTm9kZShwKSB7XG4gICAgcC5uZXh0LnByZXYgPSBwLnByZXY7XG4gICAgcC5wcmV2Lm5leHQgPSBwLm5leHQ7XG5cbiAgICBpZiAocC5wcmV2WikgcC5wcmV2Wi5uZXh0WiA9IHAubmV4dFo7XG4gICAgaWYgKHAubmV4dFopIHAubmV4dFoucHJldlogPSBwLnByZXZaO1xufVxuXG5mdW5jdGlvbiBOb2RlKGksIHgsIHkpIHtcbiAgICAvLyB2ZXJ0aWNlIGluZGV4IGluIGNvb3JkaW5hdGVzIGFycmF5XG4gICAgdGhpcy5pID0gaTtcblxuICAgIC8vIHZlcnRleCBjb29yZGluYXRlc1xuICAgIHRoaXMueCA9IHg7XG4gICAgdGhpcy55ID0geTtcblxuICAgIC8vIHByZXZpb3VzIGFuZCBuZXh0IHZlcnRpY2Ugbm9kZXMgaW4gYSBwb2x5Z29uIHJpbmdcbiAgICB0aGlzLnByZXYgPSBudWxsO1xuICAgIHRoaXMubmV4dCA9IG51bGw7XG5cbiAgICAvLyB6LW9yZGVyIGN1cnZlIHZhbHVlXG4gICAgdGhpcy56ID0gbnVsbDtcblxuICAgIC8vIHByZXZpb3VzIGFuZCBuZXh0IG5vZGVzIGluIHotb3JkZXJcbiAgICB0aGlzLnByZXZaID0gbnVsbDtcbiAgICB0aGlzLm5leHRaID0gbnVsbDtcblxuICAgIC8vIGluZGljYXRlcyB3aGV0aGVyIHRoaXMgaXMgYSBzdGVpbmVyIHBvaW50XG4gICAgdGhpcy5zdGVpbmVyID0gZmFsc2U7XG59XG4iLCIndXNlIHN0cmljdCc7XG5cbi8vXG4vLyBXZSBzdG9yZSBvdXIgRUUgb2JqZWN0cyBpbiBhIHBsYWluIG9iamVjdCB3aG9zZSBwcm9wZXJ0aWVzIGFyZSBldmVudCBuYW1lcy5cbi8vIElmIGBPYmplY3QuY3JlYXRlKG51bGwpYCBpcyBub3Qgc3VwcG9ydGVkIHdlIHByZWZpeCB0aGUgZXZlbnQgbmFtZXMgd2l0aCBhXG4vLyBgfmAgdG8gbWFrZSBzdXJlIHRoYXQgdGhlIGJ1aWx0LWluIG9iamVjdCBwcm9wZXJ0aWVzIGFyZSBub3Qgb3ZlcnJpZGRlbiBvclxuLy8gdXNlZCBhcyBhbiBhdHRhY2sgdmVjdG9yLlxuLy8gV2UgYWxzbyBhc3N1bWUgdGhhdCBgT2JqZWN0LmNyZWF0ZShudWxsKWAgaXMgYXZhaWxhYmxlIHdoZW4gdGhlIGV2ZW50IG5hbWVcbi8vIGlzIGFuIEVTNiBTeW1ib2wuXG4vL1xudmFyIHByZWZpeCA9IHR5cGVvZiBPYmplY3QuY3JlYXRlICE9PSAnZnVuY3Rpb24nID8gJ34nIDogZmFsc2U7XG5cbi8qKlxuICogUmVwcmVzZW50YXRpb24gb2YgYSBzaW5nbGUgRXZlbnRFbWl0dGVyIGZ1bmN0aW9uLlxuICpcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZuIEV2ZW50IGhhbmRsZXIgdG8gYmUgY2FsbGVkLlxuICogQHBhcmFtIHtNaXhlZH0gY29udGV4dCBDb250ZXh0IGZvciBmdW5jdGlvbiBleGVjdXRpb24uXG4gKiBAcGFyYW0ge0Jvb2xlYW59IG9uY2UgT25seSBlbWl0IG9uY2VcbiAqIEBhcGkgcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBFRShmbiwgY29udGV4dCwgb25jZSkge1xuICB0aGlzLmZuID0gZm47XG4gIHRoaXMuY29udGV4dCA9IGNvbnRleHQ7XG4gIHRoaXMub25jZSA9IG9uY2UgfHwgZmFsc2U7XG59XG5cbi8qKlxuICogTWluaW1hbCBFdmVudEVtaXR0ZXIgaW50ZXJmYWNlIHRoYXQgaXMgbW9sZGVkIGFnYWluc3QgdGhlIE5vZGUuanNcbiAqIEV2ZW50RW1pdHRlciBpbnRlcmZhY2UuXG4gKlxuICogQGNvbnN0cnVjdG9yXG4gKiBAYXBpIHB1YmxpY1xuICovXG5mdW5jdGlvbiBFdmVudEVtaXR0ZXIoKSB7IC8qIE5vdGhpbmcgdG8gc2V0ICovIH1cblxuLyoqXG4gKiBIb2xkcyB0aGUgYXNzaWduZWQgRXZlbnRFbWl0dGVycyBieSBuYW1lLlxuICpcbiAqIEB0eXBlIHtPYmplY3R9XG4gKiBAcHJpdmF0ZVxuICovXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLl9ldmVudHMgPSB1bmRlZmluZWQ7XG5cbi8qKlxuICogUmV0dXJuIGEgbGlzdCBvZiBhc3NpZ25lZCBldmVudCBsaXN0ZW5lcnMuXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IGV2ZW50IFRoZSBldmVudHMgdGhhdCBzaG91bGQgYmUgbGlzdGVkLlxuICogQHBhcmFtIHtCb29sZWFufSBleGlzdHMgV2Ugb25seSBuZWVkIHRvIGtub3cgaWYgdGhlcmUgYXJlIGxpc3RlbmVycy5cbiAqIEByZXR1cm5zIHtBcnJheXxCb29sZWFufVxuICogQGFwaSBwdWJsaWNcbiAqL1xuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5saXN0ZW5lcnMgPSBmdW5jdGlvbiBsaXN0ZW5lcnMoZXZlbnQsIGV4aXN0cykge1xuICB2YXIgZXZ0ID0gcHJlZml4ID8gcHJlZml4ICsgZXZlbnQgOiBldmVudFxuICAgICwgYXZhaWxhYmxlID0gdGhpcy5fZXZlbnRzICYmIHRoaXMuX2V2ZW50c1tldnRdO1xuXG4gIGlmIChleGlzdHMpIHJldHVybiAhIWF2YWlsYWJsZTtcbiAgaWYgKCFhdmFpbGFibGUpIHJldHVybiBbXTtcbiAgaWYgKGF2YWlsYWJsZS5mbikgcmV0dXJuIFthdmFpbGFibGUuZm5dO1xuXG4gIGZvciAodmFyIGkgPSAwLCBsID0gYXZhaWxhYmxlLmxlbmd0aCwgZWUgPSBuZXcgQXJyYXkobCk7IGkgPCBsOyBpKyspIHtcbiAgICBlZVtpXSA9IGF2YWlsYWJsZVtpXS5mbjtcbiAgfVxuXG4gIHJldHVybiBlZTtcbn07XG5cbi8qKlxuICogRW1pdCBhbiBldmVudCB0byBhbGwgcmVnaXN0ZXJlZCBldmVudCBsaXN0ZW5lcnMuXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IGV2ZW50IFRoZSBuYW1lIG9mIHRoZSBldmVudC5cbiAqIEByZXR1cm5zIHtCb29sZWFufSBJbmRpY2F0aW9uIGlmIHdlJ3ZlIGVtaXR0ZWQgYW4gZXZlbnQuXG4gKiBAYXBpIHB1YmxpY1xuICovXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLmVtaXQgPSBmdW5jdGlvbiBlbWl0KGV2ZW50LCBhMSwgYTIsIGEzLCBhNCwgYTUpIHtcbiAgdmFyIGV2dCA9IHByZWZpeCA/IHByZWZpeCArIGV2ZW50IDogZXZlbnQ7XG5cbiAgaWYgKCF0aGlzLl9ldmVudHMgfHwgIXRoaXMuX2V2ZW50c1tldnRdKSByZXR1cm4gZmFsc2U7XG5cbiAgdmFyIGxpc3RlbmVycyA9IHRoaXMuX2V2ZW50c1tldnRdXG4gICAgLCBsZW4gPSBhcmd1bWVudHMubGVuZ3RoXG4gICAgLCBhcmdzXG4gICAgLCBpO1xuXG4gIGlmICgnZnVuY3Rpb24nID09PSB0eXBlb2YgbGlzdGVuZXJzLmZuKSB7XG4gICAgaWYgKGxpc3RlbmVycy5vbmNlKSB0aGlzLnJlbW92ZUxpc3RlbmVyKGV2ZW50LCBsaXN0ZW5lcnMuZm4sIHVuZGVmaW5lZCwgdHJ1ZSk7XG5cbiAgICBzd2l0Y2ggKGxlbikge1xuICAgICAgY2FzZSAxOiByZXR1cm4gbGlzdGVuZXJzLmZuLmNhbGwobGlzdGVuZXJzLmNvbnRleHQpLCB0cnVlO1xuICAgICAgY2FzZSAyOiByZXR1cm4gbGlzdGVuZXJzLmZuLmNhbGwobGlzdGVuZXJzLmNvbnRleHQsIGExKSwgdHJ1ZTtcbiAgICAgIGNhc2UgMzogcmV0dXJuIGxpc3RlbmVycy5mbi5jYWxsKGxpc3RlbmVycy5jb250ZXh0LCBhMSwgYTIpLCB0cnVlO1xuICAgICAgY2FzZSA0OiByZXR1cm4gbGlzdGVuZXJzLmZuLmNhbGwobGlzdGVuZXJzLmNvbnRleHQsIGExLCBhMiwgYTMpLCB0cnVlO1xuICAgICAgY2FzZSA1OiByZXR1cm4gbGlzdGVuZXJzLmZuLmNhbGwobGlzdGVuZXJzLmNvbnRleHQsIGExLCBhMiwgYTMsIGE0KSwgdHJ1ZTtcbiAgICAgIGNhc2UgNjogcmV0dXJuIGxpc3RlbmVycy5mbi5jYWxsKGxpc3RlbmVycy5jb250ZXh0LCBhMSwgYTIsIGEzLCBhNCwgYTUpLCB0cnVlO1xuICAgIH1cblxuICAgIGZvciAoaSA9IDEsIGFyZ3MgPSBuZXcgQXJyYXkobGVuIC0xKTsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICBhcmdzW2kgLSAxXSA9IGFyZ3VtZW50c1tpXTtcbiAgICB9XG5cbiAgICBsaXN0ZW5lcnMuZm4uYXBwbHkobGlzdGVuZXJzLmNvbnRleHQsIGFyZ3MpO1xuICB9IGVsc2Uge1xuICAgIHZhciBsZW5ndGggPSBsaXN0ZW5lcnMubGVuZ3RoXG4gICAgICAsIGo7XG5cbiAgICBmb3IgKGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmIChsaXN0ZW5lcnNbaV0ub25jZSkgdGhpcy5yZW1vdmVMaXN0ZW5lcihldmVudCwgbGlzdGVuZXJzW2ldLmZuLCB1bmRlZmluZWQsIHRydWUpO1xuXG4gICAgICBzd2l0Y2ggKGxlbikge1xuICAgICAgICBjYXNlIDE6IGxpc3RlbmVyc1tpXS5mbi5jYWxsKGxpc3RlbmVyc1tpXS5jb250ZXh0KTsgYnJlYWs7XG4gICAgICAgIGNhc2UgMjogbGlzdGVuZXJzW2ldLmZuLmNhbGwobGlzdGVuZXJzW2ldLmNvbnRleHQsIGExKTsgYnJlYWs7XG4gICAgICAgIGNhc2UgMzogbGlzdGVuZXJzW2ldLmZuLmNhbGwobGlzdGVuZXJzW2ldLmNvbnRleHQsIGExLCBhMik7IGJyZWFrO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIGlmICghYXJncykgZm9yIChqID0gMSwgYXJncyA9IG5ldyBBcnJheShsZW4gLTEpOyBqIDwgbGVuOyBqKyspIHtcbiAgICAgICAgICAgIGFyZ3NbaiAtIDFdID0gYXJndW1lbnRzW2pdO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGxpc3RlbmVyc1tpXS5mbi5hcHBseShsaXN0ZW5lcnNbaV0uY29udGV4dCwgYXJncyk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHRydWU7XG59O1xuXG4vKipcbiAqIFJlZ2lzdGVyIGEgbmV3IEV2ZW50TGlzdGVuZXIgZm9yIHRoZSBnaXZlbiBldmVudC5cbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gZXZlbnQgTmFtZSBvZiB0aGUgZXZlbnQuXG4gKiBAcGFyYW0ge0Z1bmN0b259IGZuIENhbGxiYWNrIGZ1bmN0aW9uLlxuICogQHBhcmFtIHtNaXhlZH0gY29udGV4dCBUaGUgY29udGV4dCBvZiB0aGUgZnVuY3Rpb24uXG4gKiBAYXBpIHB1YmxpY1xuICovXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLm9uID0gZnVuY3Rpb24gb24oZXZlbnQsIGZuLCBjb250ZXh0KSB7XG4gIHZhciBsaXN0ZW5lciA9IG5ldyBFRShmbiwgY29udGV4dCB8fCB0aGlzKVxuICAgICwgZXZ0ID0gcHJlZml4ID8gcHJlZml4ICsgZXZlbnQgOiBldmVudDtcblxuICBpZiAoIXRoaXMuX2V2ZW50cykgdGhpcy5fZXZlbnRzID0gcHJlZml4ID8ge30gOiBPYmplY3QuY3JlYXRlKG51bGwpO1xuICBpZiAoIXRoaXMuX2V2ZW50c1tldnRdKSB0aGlzLl9ldmVudHNbZXZ0XSA9IGxpc3RlbmVyO1xuICBlbHNlIHtcbiAgICBpZiAoIXRoaXMuX2V2ZW50c1tldnRdLmZuKSB0aGlzLl9ldmVudHNbZXZ0XS5wdXNoKGxpc3RlbmVyKTtcbiAgICBlbHNlIHRoaXMuX2V2ZW50c1tldnRdID0gW1xuICAgICAgdGhpcy5fZXZlbnRzW2V2dF0sIGxpc3RlbmVyXG4gICAgXTtcbiAgfVxuXG4gIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBBZGQgYW4gRXZlbnRMaXN0ZW5lciB0aGF0J3Mgb25seSBjYWxsZWQgb25jZS5cbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gZXZlbnQgTmFtZSBvZiB0aGUgZXZlbnQuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmbiBDYWxsYmFjayBmdW5jdGlvbi5cbiAqIEBwYXJhbSB7TWl4ZWR9IGNvbnRleHQgVGhlIGNvbnRleHQgb2YgdGhlIGZ1bmN0aW9uLlxuICogQGFwaSBwdWJsaWNcbiAqL1xuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5vbmNlID0gZnVuY3Rpb24gb25jZShldmVudCwgZm4sIGNvbnRleHQpIHtcbiAgdmFyIGxpc3RlbmVyID0gbmV3IEVFKGZuLCBjb250ZXh0IHx8IHRoaXMsIHRydWUpXG4gICAgLCBldnQgPSBwcmVmaXggPyBwcmVmaXggKyBldmVudCA6IGV2ZW50O1xuXG4gIGlmICghdGhpcy5fZXZlbnRzKSB0aGlzLl9ldmVudHMgPSBwcmVmaXggPyB7fSA6IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gIGlmICghdGhpcy5fZXZlbnRzW2V2dF0pIHRoaXMuX2V2ZW50c1tldnRdID0gbGlzdGVuZXI7XG4gIGVsc2Uge1xuICAgIGlmICghdGhpcy5fZXZlbnRzW2V2dF0uZm4pIHRoaXMuX2V2ZW50c1tldnRdLnB1c2gobGlzdGVuZXIpO1xuICAgIGVsc2UgdGhpcy5fZXZlbnRzW2V2dF0gPSBbXG4gICAgICB0aGlzLl9ldmVudHNbZXZ0XSwgbGlzdGVuZXJcbiAgICBdO1xuICB9XG5cbiAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIFJlbW92ZSBldmVudCBsaXN0ZW5lcnMuXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IGV2ZW50IFRoZSBldmVudCB3ZSB3YW50IHRvIHJlbW92ZS5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZuIFRoZSBsaXN0ZW5lciB0aGF0IHdlIG5lZWQgdG8gZmluZC5cbiAqIEBwYXJhbSB7TWl4ZWR9IGNvbnRleHQgT25seSByZW1vdmUgbGlzdGVuZXJzIG1hdGNoaW5nIHRoaXMgY29udGV4dC5cbiAqIEBwYXJhbSB7Qm9vbGVhbn0gb25jZSBPbmx5IHJlbW92ZSBvbmNlIGxpc3RlbmVycy5cbiAqIEBhcGkgcHVibGljXG4gKi9cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUucmVtb3ZlTGlzdGVuZXIgPSBmdW5jdGlvbiByZW1vdmVMaXN0ZW5lcihldmVudCwgZm4sIGNvbnRleHQsIG9uY2UpIHtcbiAgdmFyIGV2dCA9IHByZWZpeCA/IHByZWZpeCArIGV2ZW50IDogZXZlbnQ7XG5cbiAgaWYgKCF0aGlzLl9ldmVudHMgfHwgIXRoaXMuX2V2ZW50c1tldnRdKSByZXR1cm4gdGhpcztcblxuICB2YXIgbGlzdGVuZXJzID0gdGhpcy5fZXZlbnRzW2V2dF1cbiAgICAsIGV2ZW50cyA9IFtdO1xuXG4gIGlmIChmbikge1xuICAgIGlmIChsaXN0ZW5lcnMuZm4pIHtcbiAgICAgIGlmIChcbiAgICAgICAgICAgbGlzdGVuZXJzLmZuICE9PSBmblxuICAgICAgICB8fCAob25jZSAmJiAhbGlzdGVuZXJzLm9uY2UpXG4gICAgICAgIHx8IChjb250ZXh0ICYmIGxpc3RlbmVycy5jb250ZXh0ICE9PSBjb250ZXh0KVxuICAgICAgKSB7XG4gICAgICAgIGV2ZW50cy5wdXNoKGxpc3RlbmVycyk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGZvciAodmFyIGkgPSAwLCBsZW5ndGggPSBsaXN0ZW5lcnMubGVuZ3RoOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgIGxpc3RlbmVyc1tpXS5mbiAhPT0gZm5cbiAgICAgICAgICB8fCAob25jZSAmJiAhbGlzdGVuZXJzW2ldLm9uY2UpXG4gICAgICAgICAgfHwgKGNvbnRleHQgJiYgbGlzdGVuZXJzW2ldLmNvbnRleHQgIT09IGNvbnRleHQpXG4gICAgICAgICkge1xuICAgICAgICAgIGV2ZW50cy5wdXNoKGxpc3RlbmVyc1tpXSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvL1xuICAvLyBSZXNldCB0aGUgYXJyYXksIG9yIHJlbW92ZSBpdCBjb21wbGV0ZWx5IGlmIHdlIGhhdmUgbm8gbW9yZSBsaXN0ZW5lcnMuXG4gIC8vXG4gIGlmIChldmVudHMubGVuZ3RoKSB7XG4gICAgdGhpcy5fZXZlbnRzW2V2dF0gPSBldmVudHMubGVuZ3RoID09PSAxID8gZXZlbnRzWzBdIDogZXZlbnRzO1xuICB9IGVsc2Uge1xuICAgIGRlbGV0ZSB0aGlzLl9ldmVudHNbZXZ0XTtcbiAgfVxuXG4gIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBSZW1vdmUgYWxsIGxpc3RlbmVycyBvciBvbmx5IHRoZSBsaXN0ZW5lcnMgZm9yIHRoZSBzcGVjaWZpZWQgZXZlbnQuXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IGV2ZW50IFRoZSBldmVudCB3YW50IHRvIHJlbW92ZSBhbGwgbGlzdGVuZXJzIGZvci5cbiAqIEBhcGkgcHVibGljXG4gKi9cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUucmVtb3ZlQWxsTGlzdGVuZXJzID0gZnVuY3Rpb24gcmVtb3ZlQWxsTGlzdGVuZXJzKGV2ZW50KSB7XG4gIGlmICghdGhpcy5fZXZlbnRzKSByZXR1cm4gdGhpcztcblxuICBpZiAoZXZlbnQpIGRlbGV0ZSB0aGlzLl9ldmVudHNbcHJlZml4ID8gcHJlZml4ICsgZXZlbnQgOiBldmVudF07XG4gIGVsc2UgdGhpcy5fZXZlbnRzID0gcHJlZml4ID8ge30gOiBPYmplY3QuY3JlYXRlKG51bGwpO1xuXG4gIHJldHVybiB0aGlzO1xufTtcblxuLy9cbi8vIEFsaWFzIG1ldGhvZHMgbmFtZXMgYmVjYXVzZSBwZW9wbGUgcm9sbCBsaWtlIHRoYXQuXG4vL1xuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5vZmYgPSBFdmVudEVtaXR0ZXIucHJvdG90eXBlLnJlbW92ZUxpc3RlbmVyO1xuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5hZGRMaXN0ZW5lciA9IEV2ZW50RW1pdHRlci5wcm90b3R5cGUub247XG5cbi8vXG4vLyBUaGlzIGZ1bmN0aW9uIGRvZXNuJ3QgYXBwbHkgYW55bW9yZS5cbi8vXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLnNldE1heExpc3RlbmVycyA9IGZ1bmN0aW9uIHNldE1heExpc3RlbmVycygpIHtcbiAgcmV0dXJuIHRoaXM7XG59O1xuXG4vL1xuLy8gRXhwb3NlIHRoZSBwcmVmaXguXG4vL1xuRXZlbnRFbWl0dGVyLnByZWZpeGVkID0gcHJlZml4O1xuXG4vL1xuLy8gRXhwb3NlIHRoZSBtb2R1bGUuXG4vL1xuaWYgKCd1bmRlZmluZWQnICE9PSB0eXBlb2YgbW9kdWxlKSB7XG4gIG1vZHVsZS5leHBvcnRzID0gRXZlbnRFbWl0dGVyO1xufVxuIiwiLyogZXNsaW50LWRpc2FibGUgbm8tdW51c2VkLXZhcnMgKi9cbid1c2Ugc3RyaWN0JztcbnZhciBoYXNPd25Qcm9wZXJ0eSA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7XG52YXIgcHJvcElzRW51bWVyYWJsZSA9IE9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGU7XG5cbmZ1bmN0aW9uIHRvT2JqZWN0KHZhbCkge1xuXHRpZiAodmFsID09PSBudWxsIHx8IHZhbCA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0dGhyb3cgbmV3IFR5cGVFcnJvcignT2JqZWN0LmFzc2lnbiBjYW5ub3QgYmUgY2FsbGVkIHdpdGggbnVsbCBvciB1bmRlZmluZWQnKTtcblx0fVxuXG5cdHJldHVybiBPYmplY3QodmFsKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQsIHNvdXJjZSkge1xuXHR2YXIgZnJvbTtcblx0dmFyIHRvID0gdG9PYmplY3QodGFyZ2V0KTtcblx0dmFyIHN5bWJvbHM7XG5cblx0Zm9yICh2YXIgcyA9IDE7IHMgPCBhcmd1bWVudHMubGVuZ3RoOyBzKyspIHtcblx0XHRmcm9tID0gT2JqZWN0KGFyZ3VtZW50c1tzXSk7XG5cblx0XHRmb3IgKHZhciBrZXkgaW4gZnJvbSkge1xuXHRcdFx0aWYgKGhhc093blByb3BlcnR5LmNhbGwoZnJvbSwga2V5KSkge1xuXHRcdFx0XHR0b1trZXldID0gZnJvbVtrZXldO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7XG5cdFx0XHRzeW1ib2xzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhmcm9tKTtcblx0XHRcdGZvciAodmFyIGkgPSAwOyBpIDwgc3ltYm9scy5sZW5ndGg7IGkrKykge1xuXHRcdFx0XHRpZiAocHJvcElzRW51bWVyYWJsZS5jYWxsKGZyb20sIHN5bWJvbHNbaV0pKSB7XG5cdFx0XHRcdFx0dG9bc3ltYm9sc1tpXV0gPSBmcm9tW3N5bWJvbHNbaV1dO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIHRvO1xufTtcbiIsIi8qIVxuICogYXN5bmNcbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS9jYW9sYW4vYXN5bmNcbiAqXG4gKiBDb3B5cmlnaHQgMjAxMC0yMDE0IENhb2xhbiBNY01haG9uXG4gKiBSZWxlYXNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2VcbiAqL1xuLypqc2hpbnQgb25ldmFyOiBmYWxzZSwgaW5kZW50OjQgKi9cbi8qZ2xvYmFsIHNldEltbWVkaWF0ZTogZmFsc2UsIHNldFRpbWVvdXQ6IGZhbHNlLCBjb25zb2xlOiBmYWxzZSAqL1xuKGZ1bmN0aW9uICgpIHtcblxuICAgIHZhciBhc3luYyA9IHt9O1xuXG4gICAgLy8gZ2xvYmFsIG9uIHRoZSBzZXJ2ZXIsIHdpbmRvdyBpbiB0aGUgYnJvd3NlclxuICAgIHZhciByb290LCBwcmV2aW91c19hc3luYztcblxuICAgIHJvb3QgPSB0aGlzO1xuICAgIGlmIChyb290ICE9IG51bGwpIHtcbiAgICAgIHByZXZpb3VzX2FzeW5jID0gcm9vdC5hc3luYztcbiAgICB9XG5cbiAgICBhc3luYy5ub0NvbmZsaWN0ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByb290LmFzeW5jID0gcHJldmlvdXNfYXN5bmM7XG4gICAgICAgIHJldHVybiBhc3luYztcbiAgICB9O1xuXG4gICAgZnVuY3Rpb24gb25seV9vbmNlKGZuKSB7XG4gICAgICAgIHZhciBjYWxsZWQgPSBmYWxzZTtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgaWYgKGNhbGxlZCkgdGhyb3cgbmV3IEVycm9yKFwiQ2FsbGJhY2sgd2FzIGFscmVhZHkgY2FsbGVkLlwiKTtcbiAgICAgICAgICAgIGNhbGxlZCA9IHRydWU7XG4gICAgICAgICAgICBmbi5hcHBseShyb290LCBhcmd1bWVudHMpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8vLyBjcm9zcy1icm93c2VyIGNvbXBhdGlibGl0eSBmdW5jdGlvbnMgLy8vL1xuXG4gICAgdmFyIF90b1N0cmluZyA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7XG5cbiAgICB2YXIgX2lzQXJyYXkgPSBBcnJheS5pc0FycmF5IHx8IGZ1bmN0aW9uIChvYmopIHtcbiAgICAgICAgcmV0dXJuIF90b1N0cmluZy5jYWxsKG9iaikgPT09ICdbb2JqZWN0IEFycmF5XSc7XG4gICAgfTtcblxuICAgIHZhciBfZWFjaCA9IGZ1bmN0aW9uIChhcnIsIGl0ZXJhdG9yKSB7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXJyLmxlbmd0aDsgaSArPSAxKSB7XG4gICAgICAgICAgICBpdGVyYXRvcihhcnJbaV0sIGksIGFycik7XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgdmFyIF9tYXAgPSBmdW5jdGlvbiAoYXJyLCBpdGVyYXRvcikge1xuICAgICAgICBpZiAoYXJyLm1hcCkge1xuICAgICAgICAgICAgcmV0dXJuIGFyci5tYXAoaXRlcmF0b3IpO1xuICAgICAgICB9XG4gICAgICAgIHZhciByZXN1bHRzID0gW107XG4gICAgICAgIF9lYWNoKGFyciwgZnVuY3Rpb24gKHgsIGksIGEpIHtcbiAgICAgICAgICAgIHJlc3VsdHMucHVzaChpdGVyYXRvcih4LCBpLCBhKSk7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gcmVzdWx0cztcbiAgICB9O1xuXG4gICAgdmFyIF9yZWR1Y2UgPSBmdW5jdGlvbiAoYXJyLCBpdGVyYXRvciwgbWVtbykge1xuICAgICAgICBpZiAoYXJyLnJlZHVjZSkge1xuICAgICAgICAgICAgcmV0dXJuIGFyci5yZWR1Y2UoaXRlcmF0b3IsIG1lbW8pO1xuICAgICAgICB9XG4gICAgICAgIF9lYWNoKGFyciwgZnVuY3Rpb24gKHgsIGksIGEpIHtcbiAgICAgICAgICAgIG1lbW8gPSBpdGVyYXRvcihtZW1vLCB4LCBpLCBhKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBtZW1vO1xuICAgIH07XG5cbiAgICB2YXIgX2tleXMgPSBmdW5jdGlvbiAob2JqKSB7XG4gICAgICAgIGlmIChPYmplY3Qua2V5cykge1xuICAgICAgICAgICAgcmV0dXJuIE9iamVjdC5rZXlzKG9iaik7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIGtleXMgPSBbXTtcbiAgICAgICAgZm9yICh2YXIgayBpbiBvYmopIHtcbiAgICAgICAgICAgIGlmIChvYmouaGFzT3duUHJvcGVydHkoaykpIHtcbiAgICAgICAgICAgICAgICBrZXlzLnB1c2goayk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGtleXM7XG4gICAgfTtcblxuICAgIC8vLy8gZXhwb3J0ZWQgYXN5bmMgbW9kdWxlIGZ1bmN0aW9ucyAvLy8vXG5cbiAgICAvLy8vIG5leHRUaWNrIGltcGxlbWVudGF0aW9uIHdpdGggYnJvd3Nlci1jb21wYXRpYmxlIGZhbGxiYWNrIC8vLy9cbiAgICBpZiAodHlwZW9mIHByb2Nlc3MgPT09ICd1bmRlZmluZWQnIHx8ICEocHJvY2Vzcy5uZXh0VGljaykpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBzZXRJbW1lZGlhdGUgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIGFzeW5jLm5leHRUaWNrID0gZnVuY3Rpb24gKGZuKSB7XG4gICAgICAgICAgICAgICAgLy8gbm90IGEgZGlyZWN0IGFsaWFzIGZvciBJRTEwIGNvbXBhdGliaWxpdHlcbiAgICAgICAgICAgICAgICBzZXRJbW1lZGlhdGUoZm4pO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGFzeW5jLnNldEltbWVkaWF0ZSA9IGFzeW5jLm5leHRUaWNrO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgYXN5bmMubmV4dFRpY2sgPSBmdW5jdGlvbiAoZm4pIHtcbiAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KGZuLCAwKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBhc3luYy5zZXRJbW1lZGlhdGUgPSBhc3luYy5uZXh0VGljaztcbiAgICAgICAgfVxuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgYXN5bmMubmV4dFRpY2sgPSBwcm9jZXNzLm5leHRUaWNrO1xuICAgICAgICBpZiAodHlwZW9mIHNldEltbWVkaWF0ZSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgIGFzeW5jLnNldEltbWVkaWF0ZSA9IGZ1bmN0aW9uIChmbikge1xuICAgICAgICAgICAgICAvLyBub3QgYSBkaXJlY3QgYWxpYXMgZm9yIElFMTAgY29tcGF0aWJpbGl0eVxuICAgICAgICAgICAgICBzZXRJbW1lZGlhdGUoZm4pO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGFzeW5jLnNldEltbWVkaWF0ZSA9IGFzeW5jLm5leHRUaWNrO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgYXN5bmMuZWFjaCA9IGZ1bmN0aW9uIChhcnIsIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICBjYWxsYmFjayA9IGNhbGxiYWNrIHx8IGZ1bmN0aW9uICgpIHt9O1xuICAgICAgICBpZiAoIWFyci5sZW5ndGgpIHtcbiAgICAgICAgICAgIHJldHVybiBjYWxsYmFjaygpO1xuICAgICAgICB9XG4gICAgICAgIHZhciBjb21wbGV0ZWQgPSAwO1xuICAgICAgICBfZWFjaChhcnIsIGZ1bmN0aW9uICh4KSB7XG4gICAgICAgICAgICBpdGVyYXRvcih4LCBvbmx5X29uY2UoZG9uZSkgKTtcbiAgICAgICAgfSk7XG4gICAgICAgIGZ1bmN0aW9uIGRvbmUoZXJyKSB7XG4gICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgICBjYWxsYmFjayA9IGZ1bmN0aW9uICgpIHt9O1xuICAgICAgICAgIH1cbiAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgY29tcGxldGVkICs9IDE7XG4gICAgICAgICAgICAgIGlmIChjb21wbGV0ZWQgPj0gYXJyLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgY2FsbGJhY2soKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH07XG4gICAgYXN5bmMuZm9yRWFjaCA9IGFzeW5jLmVhY2g7XG5cbiAgICBhc3luYy5lYWNoU2VyaWVzID0gZnVuY3Rpb24gKGFyciwgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgIGNhbGxiYWNrID0gY2FsbGJhY2sgfHwgZnVuY3Rpb24gKCkge307XG4gICAgICAgIGlmICghYXJyLmxlbmd0aCkge1xuICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKCk7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIGNvbXBsZXRlZCA9IDA7XG4gICAgICAgIHZhciBpdGVyYXRlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgaXRlcmF0b3IoYXJyW2NvbXBsZXRlZF0sIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrID0gZnVuY3Rpb24gKCkge307XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBjb21wbGV0ZWQgKz0gMTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNvbXBsZXRlZCA+PSBhcnIubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgaXRlcmF0ZSgpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH07XG4gICAgICAgIGl0ZXJhdGUoKTtcbiAgICB9O1xuICAgIGFzeW5jLmZvckVhY2hTZXJpZXMgPSBhc3luYy5lYWNoU2VyaWVzO1xuXG4gICAgYXN5bmMuZWFjaExpbWl0ID0gZnVuY3Rpb24gKGFyciwgbGltaXQsIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICB2YXIgZm4gPSBfZWFjaExpbWl0KGxpbWl0KTtcbiAgICAgICAgZm4uYXBwbHkobnVsbCwgW2FyciwgaXRlcmF0b3IsIGNhbGxiYWNrXSk7XG4gICAgfTtcbiAgICBhc3luYy5mb3JFYWNoTGltaXQgPSBhc3luYy5lYWNoTGltaXQ7XG5cbiAgICB2YXIgX2VhY2hMaW1pdCA9IGZ1bmN0aW9uIChsaW1pdCkge1xuXG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAoYXJyLCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIGNhbGxiYWNrID0gY2FsbGJhY2sgfHwgZnVuY3Rpb24gKCkge307XG4gICAgICAgICAgICBpZiAoIWFyci5sZW5ndGggfHwgbGltaXQgPD0gMCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBjYWxsYmFjaygpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdmFyIGNvbXBsZXRlZCA9IDA7XG4gICAgICAgICAgICB2YXIgc3RhcnRlZCA9IDA7XG4gICAgICAgICAgICB2YXIgcnVubmluZyA9IDA7XG5cbiAgICAgICAgICAgIChmdW5jdGlvbiByZXBsZW5pc2ggKCkge1xuICAgICAgICAgICAgICAgIGlmIChjb21wbGV0ZWQgPj0gYXJyLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gY2FsbGJhY2soKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB3aGlsZSAocnVubmluZyA8IGxpbWl0ICYmIHN0YXJ0ZWQgPCBhcnIubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgIHN0YXJ0ZWQgKz0gMTtcbiAgICAgICAgICAgICAgICAgICAgcnVubmluZyArPSAxO1xuICAgICAgICAgICAgICAgICAgICBpdGVyYXRvcihhcnJbc3RhcnRlZCAtIDFdLCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayA9IGZ1bmN0aW9uICgpIHt9O1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcGxldGVkICs9IDE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcnVubmluZyAtPSAxO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb21wbGV0ZWQgPj0gYXJyLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVwbGVuaXNoKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KSgpO1xuICAgICAgICB9O1xuICAgIH07XG5cblxuICAgIHZhciBkb1BhcmFsbGVsID0gZnVuY3Rpb24gKGZuKSB7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7XG4gICAgICAgICAgICByZXR1cm4gZm4uYXBwbHkobnVsbCwgW2FzeW5jLmVhY2hdLmNvbmNhdChhcmdzKSk7XG4gICAgICAgIH07XG4gICAgfTtcbiAgICB2YXIgZG9QYXJhbGxlbExpbWl0ID0gZnVuY3Rpb24obGltaXQsIGZuKSB7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7XG4gICAgICAgICAgICByZXR1cm4gZm4uYXBwbHkobnVsbCwgW19lYWNoTGltaXQobGltaXQpXS5jb25jYXQoYXJncykpO1xuICAgICAgICB9O1xuICAgIH07XG4gICAgdmFyIGRvU2VyaWVzID0gZnVuY3Rpb24gKGZuKSB7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7XG4gICAgICAgICAgICByZXR1cm4gZm4uYXBwbHkobnVsbCwgW2FzeW5jLmVhY2hTZXJpZXNdLmNvbmNhdChhcmdzKSk7XG4gICAgICAgIH07XG4gICAgfTtcblxuXG4gICAgdmFyIF9hc3luY01hcCA9IGZ1bmN0aW9uIChlYWNoZm4sIGFyciwgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgIGFyciA9IF9tYXAoYXJyLCBmdW5jdGlvbiAoeCwgaSkge1xuICAgICAgICAgICAgcmV0dXJuIHtpbmRleDogaSwgdmFsdWU6IHh9O1xuICAgICAgICB9KTtcbiAgICAgICAgaWYgKCFjYWxsYmFjaykge1xuICAgICAgICAgICAgZWFjaGZuKGFyciwgZnVuY3Rpb24gKHgsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICAgICAgaXRlcmF0b3IoeC52YWx1ZSwgZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB2YXIgcmVzdWx0cyA9IFtdO1xuICAgICAgICAgICAgZWFjaGZuKGFyciwgZnVuY3Rpb24gKHgsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICAgICAgaXRlcmF0b3IoeC52YWx1ZSwgZnVuY3Rpb24gKGVyciwgdikge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHRzW3guaW5kZXhdID0gdjtcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0sIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnIsIHJlc3VsdHMpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIGFzeW5jLm1hcCA9IGRvUGFyYWxsZWwoX2FzeW5jTWFwKTtcbiAgICBhc3luYy5tYXBTZXJpZXMgPSBkb1NlcmllcyhfYXN5bmNNYXApO1xuICAgIGFzeW5jLm1hcExpbWl0ID0gZnVuY3Rpb24gKGFyciwgbGltaXQsIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICByZXR1cm4gX21hcExpbWl0KGxpbWl0KShhcnIsIGl0ZXJhdG9yLCBjYWxsYmFjayk7XG4gICAgfTtcblxuICAgIHZhciBfbWFwTGltaXQgPSBmdW5jdGlvbihsaW1pdCkge1xuICAgICAgICByZXR1cm4gZG9QYXJhbGxlbExpbWl0KGxpbWl0LCBfYXN5bmNNYXApO1xuICAgIH07XG5cbiAgICAvLyByZWR1Y2Ugb25seSBoYXMgYSBzZXJpZXMgdmVyc2lvbiwgYXMgZG9pbmcgcmVkdWNlIGluIHBhcmFsbGVsIHdvbid0XG4gICAgLy8gd29yayBpbiBtYW55IHNpdHVhdGlvbnMuXG4gICAgYXN5bmMucmVkdWNlID0gZnVuY3Rpb24gKGFyciwgbWVtbywgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgIGFzeW5jLmVhY2hTZXJpZXMoYXJyLCBmdW5jdGlvbiAoeCwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIGl0ZXJhdG9yKG1lbW8sIHgsIGZ1bmN0aW9uIChlcnIsIHYpIHtcbiAgICAgICAgICAgICAgICBtZW1vID0gdjtcbiAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgIGNhbGxiYWNrKGVyciwgbWVtbyk7XG4gICAgICAgIH0pO1xuICAgIH07XG4gICAgLy8gaW5qZWN0IGFsaWFzXG4gICAgYXN5bmMuaW5qZWN0ID0gYXN5bmMucmVkdWNlO1xuICAgIC8vIGZvbGRsIGFsaWFzXG4gICAgYXN5bmMuZm9sZGwgPSBhc3luYy5yZWR1Y2U7XG5cbiAgICBhc3luYy5yZWR1Y2VSaWdodCA9IGZ1bmN0aW9uIChhcnIsIG1lbW8sIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICB2YXIgcmV2ZXJzZWQgPSBfbWFwKGFyciwgZnVuY3Rpb24gKHgpIHtcbiAgICAgICAgICAgIHJldHVybiB4O1xuICAgICAgICB9KS5yZXZlcnNlKCk7XG4gICAgICAgIGFzeW5jLnJlZHVjZShyZXZlcnNlZCwgbWVtbywgaXRlcmF0b3IsIGNhbGxiYWNrKTtcbiAgICB9O1xuICAgIC8vIGZvbGRyIGFsaWFzXG4gICAgYXN5bmMuZm9sZHIgPSBhc3luYy5yZWR1Y2VSaWdodDtcblxuICAgIHZhciBfZmlsdGVyID0gZnVuY3Rpb24gKGVhY2hmbiwgYXJyLCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgdmFyIHJlc3VsdHMgPSBbXTtcbiAgICAgICAgYXJyID0gX21hcChhcnIsIGZ1bmN0aW9uICh4LCBpKSB7XG4gICAgICAgICAgICByZXR1cm4ge2luZGV4OiBpLCB2YWx1ZTogeH07XG4gICAgICAgIH0pO1xuICAgICAgICBlYWNoZm4oYXJyLCBmdW5jdGlvbiAoeCwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIGl0ZXJhdG9yKHgudmFsdWUsIGZ1bmN0aW9uICh2KSB7XG4gICAgICAgICAgICAgICAgaWYgKHYpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0cy5wdXNoKHgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgIGNhbGxiYWNrKF9tYXAocmVzdWx0cy5zb3J0KGZ1bmN0aW9uIChhLCBiKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGEuaW5kZXggLSBiLmluZGV4O1xuICAgICAgICAgICAgfSksIGZ1bmN0aW9uICh4KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHgudmFsdWU7XG4gICAgICAgICAgICB9KSk7XG4gICAgICAgIH0pO1xuICAgIH07XG4gICAgYXN5bmMuZmlsdGVyID0gZG9QYXJhbGxlbChfZmlsdGVyKTtcbiAgICBhc3luYy5maWx0ZXJTZXJpZXMgPSBkb1NlcmllcyhfZmlsdGVyKTtcbiAgICAvLyBzZWxlY3QgYWxpYXNcbiAgICBhc3luYy5zZWxlY3QgPSBhc3luYy5maWx0ZXI7XG4gICAgYXN5bmMuc2VsZWN0U2VyaWVzID0gYXN5bmMuZmlsdGVyU2VyaWVzO1xuXG4gICAgdmFyIF9yZWplY3QgPSBmdW5jdGlvbiAoZWFjaGZuLCBhcnIsIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICB2YXIgcmVzdWx0cyA9IFtdO1xuICAgICAgICBhcnIgPSBfbWFwKGFyciwgZnVuY3Rpb24gKHgsIGkpIHtcbiAgICAgICAgICAgIHJldHVybiB7aW5kZXg6IGksIHZhbHVlOiB4fTtcbiAgICAgICAgfSk7XG4gICAgICAgIGVhY2hmbihhcnIsIGZ1bmN0aW9uICh4LCBjYWxsYmFjaykge1xuICAgICAgICAgICAgaXRlcmF0b3IoeC52YWx1ZSwgZnVuY3Rpb24gKHYpIHtcbiAgICAgICAgICAgICAgICBpZiAoIXYpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0cy5wdXNoKHgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgIGNhbGxiYWNrKF9tYXAocmVzdWx0cy5zb3J0KGZ1bmN0aW9uIChhLCBiKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGEuaW5kZXggLSBiLmluZGV4O1xuICAgICAgICAgICAgfSksIGZ1bmN0aW9uICh4KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHgudmFsdWU7XG4gICAgICAgICAgICB9KSk7XG4gICAgICAgIH0pO1xuICAgIH07XG4gICAgYXN5bmMucmVqZWN0ID0gZG9QYXJhbGxlbChfcmVqZWN0KTtcbiAgICBhc3luYy5yZWplY3RTZXJpZXMgPSBkb1NlcmllcyhfcmVqZWN0KTtcblxuICAgIHZhciBfZGV0ZWN0ID0gZnVuY3Rpb24gKGVhY2hmbiwgYXJyLCBpdGVyYXRvciwgbWFpbl9jYWxsYmFjaykge1xuICAgICAgICBlYWNoZm4oYXJyLCBmdW5jdGlvbiAoeCwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIGl0ZXJhdG9yKHgsIGZ1bmN0aW9uIChyZXN1bHQpIHtcbiAgICAgICAgICAgICAgICBpZiAocmVzdWx0KSB7XG4gICAgICAgICAgICAgICAgICAgIG1haW5fY2FsbGJhY2soeCk7XG4gICAgICAgICAgICAgICAgICAgIG1haW5fY2FsbGJhY2sgPSBmdW5jdGlvbiAoKSB7fTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgIG1haW5fY2FsbGJhY2soKTtcbiAgICAgICAgfSk7XG4gICAgfTtcbiAgICBhc3luYy5kZXRlY3QgPSBkb1BhcmFsbGVsKF9kZXRlY3QpO1xuICAgIGFzeW5jLmRldGVjdFNlcmllcyA9IGRvU2VyaWVzKF9kZXRlY3QpO1xuXG4gICAgYXN5bmMuc29tZSA9IGZ1bmN0aW9uIChhcnIsIGl0ZXJhdG9yLCBtYWluX2NhbGxiYWNrKSB7XG4gICAgICAgIGFzeW5jLmVhY2goYXJyLCBmdW5jdGlvbiAoeCwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIGl0ZXJhdG9yKHgsIGZ1bmN0aW9uICh2KSB7XG4gICAgICAgICAgICAgICAgaWYgKHYpIHtcbiAgICAgICAgICAgICAgICAgICAgbWFpbl9jYWxsYmFjayh0cnVlKTtcbiAgICAgICAgICAgICAgICAgICAgbWFpbl9jYWxsYmFjayA9IGZ1bmN0aW9uICgpIHt9O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgIG1haW5fY2FsbGJhY2soZmFsc2UpO1xuICAgICAgICB9KTtcbiAgICB9O1xuICAgIC8vIGFueSBhbGlhc1xuICAgIGFzeW5jLmFueSA9IGFzeW5jLnNvbWU7XG5cbiAgICBhc3luYy5ldmVyeSA9IGZ1bmN0aW9uIChhcnIsIGl0ZXJhdG9yLCBtYWluX2NhbGxiYWNrKSB7XG4gICAgICAgIGFzeW5jLmVhY2goYXJyLCBmdW5jdGlvbiAoeCwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIGl0ZXJhdG9yKHgsIGZ1bmN0aW9uICh2KSB7XG4gICAgICAgICAgICAgICAgaWYgKCF2KSB7XG4gICAgICAgICAgICAgICAgICAgIG1haW5fY2FsbGJhY2soZmFsc2UpO1xuICAgICAgICAgICAgICAgICAgICBtYWluX2NhbGxiYWNrID0gZnVuY3Rpb24gKCkge307XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhbGxiYWNrKCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSwgZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgbWFpbl9jYWxsYmFjayh0cnVlKTtcbiAgICAgICAgfSk7XG4gICAgfTtcbiAgICAvLyBhbGwgYWxpYXNcbiAgICBhc3luYy5hbGwgPSBhc3luYy5ldmVyeTtcblxuICAgIGFzeW5jLnNvcnRCeSA9IGZ1bmN0aW9uIChhcnIsIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICBhc3luYy5tYXAoYXJyLCBmdW5jdGlvbiAoeCwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIGl0ZXJhdG9yKHgsIGZ1bmN0aW9uIChlcnIsIGNyaXRlcmlhKSB7XG4gICAgICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2sobnVsbCwge3ZhbHVlOiB4LCBjcml0ZXJpYTogY3JpdGVyaWF9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSwgZnVuY3Rpb24gKGVyciwgcmVzdWx0cykge1xuICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAgIHJldHVybiBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgdmFyIGZuID0gZnVuY3Rpb24gKGxlZnQsIHJpZ2h0KSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBhID0gbGVmdC5jcml0ZXJpYSwgYiA9IHJpZ2h0LmNyaXRlcmlhO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYSA8IGIgPyAtMSA6IGEgPiBiID8gMSA6IDA7XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICBjYWxsYmFjayhudWxsLCBfbWFwKHJlc3VsdHMuc29ydChmbiksIGZ1bmN0aW9uICh4KSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB4LnZhbHVlO1xuICAgICAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfTtcblxuICAgIGFzeW5jLmF1dG8gPSBmdW5jdGlvbiAodGFza3MsIGNhbGxiYWNrKSB7XG4gICAgICAgIGNhbGxiYWNrID0gY2FsbGJhY2sgfHwgZnVuY3Rpb24gKCkge307XG4gICAgICAgIHZhciBrZXlzID0gX2tleXModGFza3MpO1xuICAgICAgICB2YXIgcmVtYWluaW5nVGFza3MgPSBrZXlzLmxlbmd0aFxuICAgICAgICBpZiAoIXJlbWFpbmluZ1Rhc2tzKSB7XG4gICAgICAgICAgICByZXR1cm4gY2FsbGJhY2soKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciByZXN1bHRzID0ge307XG5cbiAgICAgICAgdmFyIGxpc3RlbmVycyA9IFtdO1xuICAgICAgICB2YXIgYWRkTGlzdGVuZXIgPSBmdW5jdGlvbiAoZm4pIHtcbiAgICAgICAgICAgIGxpc3RlbmVycy51bnNoaWZ0KGZuKTtcbiAgICAgICAgfTtcbiAgICAgICAgdmFyIHJlbW92ZUxpc3RlbmVyID0gZnVuY3Rpb24gKGZuKSB7XG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxpc3RlbmVycy5sZW5ndGg7IGkgKz0gMSkge1xuICAgICAgICAgICAgICAgIGlmIChsaXN0ZW5lcnNbaV0gPT09IGZuKSB7XG4gICAgICAgICAgICAgICAgICAgIGxpc3RlbmVycy5zcGxpY2UoaSwgMSk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIHZhciB0YXNrQ29tcGxldGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZW1haW5pbmdUYXNrcy0tXG4gICAgICAgICAgICBfZWFjaChsaXN0ZW5lcnMuc2xpY2UoMCksIGZ1bmN0aW9uIChmbikge1xuICAgICAgICAgICAgICAgIGZuKCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfTtcblxuICAgICAgICBhZGRMaXN0ZW5lcihmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBpZiAoIXJlbWFpbmluZ1Rhc2tzKSB7XG4gICAgICAgICAgICAgICAgdmFyIHRoZUNhbGxiYWNrID0gY2FsbGJhY2s7XG4gICAgICAgICAgICAgICAgLy8gcHJldmVudCBmaW5hbCBjYWxsYmFjayBmcm9tIGNhbGxpbmcgaXRzZWxmIGlmIGl0IGVycm9yc1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrID0gZnVuY3Rpb24gKCkge307XG5cbiAgICAgICAgICAgICAgICB0aGVDYWxsYmFjayhudWxsLCByZXN1bHRzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgX2VhY2goa2V5cywgZnVuY3Rpb24gKGspIHtcbiAgICAgICAgICAgIHZhciB0YXNrID0gX2lzQXJyYXkodGFza3Nba10pID8gdGFza3Nba106IFt0YXNrc1trXV07XG4gICAgICAgICAgICB2YXIgdGFza0NhbGxiYWNrID0gZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgICAgIHZhciBhcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKTtcbiAgICAgICAgICAgICAgICBpZiAoYXJncy5sZW5ndGggPD0gMSkge1xuICAgICAgICAgICAgICAgICAgICBhcmdzID0gYXJnc1swXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAgICAgICB2YXIgc2FmZVJlc3VsdHMgPSB7fTtcbiAgICAgICAgICAgICAgICAgICAgX2VhY2goX2tleXMocmVzdWx0cyksIGZ1bmN0aW9uKHJrZXkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNhZmVSZXN1bHRzW3JrZXldID0gcmVzdWx0c1tya2V5XTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIHNhZmVSZXN1bHRzW2tdID0gYXJncztcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soZXJyLCBzYWZlUmVzdWx0cyk7XG4gICAgICAgICAgICAgICAgICAgIC8vIHN0b3Agc3Vic2VxdWVudCBlcnJvcnMgaGl0dGluZyBjYWxsYmFjayBtdWx0aXBsZSB0aW1lc1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayA9IGZ1bmN0aW9uICgpIHt9O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0c1trXSA9IGFyZ3M7XG4gICAgICAgICAgICAgICAgICAgIGFzeW5jLnNldEltbWVkaWF0ZSh0YXNrQ29tcGxldGUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICB2YXIgcmVxdWlyZXMgPSB0YXNrLnNsaWNlKDAsIE1hdGguYWJzKHRhc2subGVuZ3RoIC0gMSkpIHx8IFtdO1xuICAgICAgICAgICAgdmFyIHJlYWR5ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBfcmVkdWNlKHJlcXVpcmVzLCBmdW5jdGlvbiAoYSwgeCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gKGEgJiYgcmVzdWx0cy5oYXNPd25Qcm9wZXJ0eSh4KSk7XG4gICAgICAgICAgICAgICAgfSwgdHJ1ZSkgJiYgIXJlc3VsdHMuaGFzT3duUHJvcGVydHkoayk7XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgaWYgKHJlYWR5KCkpIHtcbiAgICAgICAgICAgICAgICB0YXNrW3Rhc2subGVuZ3RoIC0gMV0odGFza0NhbGxiYWNrLCByZXN1bHRzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHZhciBsaXN0ZW5lciA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlYWR5KCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlbW92ZUxpc3RlbmVyKGxpc3RlbmVyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRhc2tbdGFzay5sZW5ndGggLSAxXSh0YXNrQ2FsbGJhY2ssIHJlc3VsdHMpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICBhZGRMaXN0ZW5lcihsaXN0ZW5lcik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH07XG5cbiAgICBhc3luYy5yZXRyeSA9IGZ1bmN0aW9uKHRpbWVzLCB0YXNrLCBjYWxsYmFjaykge1xuICAgICAgICB2YXIgREVGQVVMVF9USU1FUyA9IDU7XG4gICAgICAgIHZhciBhdHRlbXB0cyA9IFtdO1xuICAgICAgICAvLyBVc2UgZGVmYXVsdHMgaWYgdGltZXMgbm90IHBhc3NlZFxuICAgICAgICBpZiAodHlwZW9mIHRpbWVzID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICBjYWxsYmFjayA9IHRhc2s7XG4gICAgICAgICAgICB0YXNrID0gdGltZXM7XG4gICAgICAgICAgICB0aW1lcyA9IERFRkFVTFRfVElNRVM7XG4gICAgICAgIH1cbiAgICAgICAgLy8gTWFrZSBzdXJlIHRpbWVzIGlzIGEgbnVtYmVyXG4gICAgICAgIHRpbWVzID0gcGFyc2VJbnQodGltZXMsIDEwKSB8fCBERUZBVUxUX1RJTUVTO1xuICAgICAgICB2YXIgd3JhcHBlZFRhc2sgPSBmdW5jdGlvbih3cmFwcGVkQ2FsbGJhY2ssIHdyYXBwZWRSZXN1bHRzKSB7XG4gICAgICAgICAgICB2YXIgcmV0cnlBdHRlbXB0ID0gZnVuY3Rpb24odGFzaywgZmluYWxBdHRlbXB0KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKHNlcmllc0NhbGxiYWNrKSB7XG4gICAgICAgICAgICAgICAgICAgIHRhc2soZnVuY3Rpb24oZXJyLCByZXN1bHQpe1xuICAgICAgICAgICAgICAgICAgICAgICAgc2VyaWVzQ2FsbGJhY2soIWVyciB8fCBmaW5hbEF0dGVtcHQsIHtlcnI6IGVyciwgcmVzdWx0OiByZXN1bHR9KTtcbiAgICAgICAgICAgICAgICAgICAgfSwgd3JhcHBlZFJlc3VsdHMpO1xuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgd2hpbGUgKHRpbWVzKSB7XG4gICAgICAgICAgICAgICAgYXR0ZW1wdHMucHVzaChyZXRyeUF0dGVtcHQodGFzaywgISh0aW1lcy09MSkpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGFzeW5jLnNlcmllcyhhdHRlbXB0cywgZnVuY3Rpb24oZG9uZSwgZGF0YSl7XG4gICAgICAgICAgICAgICAgZGF0YSA9IGRhdGFbZGF0YS5sZW5ndGggLSAxXTtcbiAgICAgICAgICAgICAgICAod3JhcHBlZENhbGxiYWNrIHx8IGNhbGxiYWNrKShkYXRhLmVyciwgZGF0YS5yZXN1bHQpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gSWYgYSBjYWxsYmFjayBpcyBwYXNzZWQsIHJ1biB0aGlzIGFzIGEgY29udHJvbGwgZmxvd1xuICAgICAgICByZXR1cm4gY2FsbGJhY2sgPyB3cmFwcGVkVGFzaygpIDogd3JhcHBlZFRhc2tcbiAgICB9O1xuXG4gICAgYXN5bmMud2F0ZXJmYWxsID0gZnVuY3Rpb24gKHRhc2tzLCBjYWxsYmFjaykge1xuICAgICAgICBjYWxsYmFjayA9IGNhbGxiYWNrIHx8IGZ1bmN0aW9uICgpIHt9O1xuICAgICAgICBpZiAoIV9pc0FycmF5KHRhc2tzKSkge1xuICAgICAgICAgIHZhciBlcnIgPSBuZXcgRXJyb3IoJ0ZpcnN0IGFyZ3VtZW50IHRvIHdhdGVyZmFsbCBtdXN0IGJlIGFuIGFycmF5IG9mIGZ1bmN0aW9ucycpO1xuICAgICAgICAgIHJldHVybiBjYWxsYmFjayhlcnIpO1xuICAgICAgICB9XG4gICAgICAgIGlmICghdGFza3MubGVuZ3RoKSB7XG4gICAgICAgICAgICByZXR1cm4gY2FsbGJhY2soKTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgd3JhcEl0ZXJhdG9yID0gZnVuY3Rpb24gKGl0ZXJhdG9yKSB7XG4gICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2suYXBwbHkobnVsbCwgYXJndW1lbnRzKTtcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2sgPSBmdW5jdGlvbiAoKSB7fTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBhcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKTtcbiAgICAgICAgICAgICAgICAgICAgdmFyIG5leHQgPSBpdGVyYXRvci5uZXh0KCk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChuZXh0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhcmdzLnB1c2god3JhcEl0ZXJhdG9yKG5leHQpKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3MucHVzaChjYWxsYmFjayk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgYXN5bmMuc2V0SW1tZWRpYXRlKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGl0ZXJhdG9yLmFwcGx5KG51bGwsIGFyZ3MpO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9O1xuICAgICAgICB9O1xuICAgICAgICB3cmFwSXRlcmF0b3IoYXN5bmMuaXRlcmF0b3IodGFza3MpKSgpO1xuICAgIH07XG5cbiAgICB2YXIgX3BhcmFsbGVsID0gZnVuY3Rpb24oZWFjaGZuLCB0YXNrcywgY2FsbGJhY2spIHtcbiAgICAgICAgY2FsbGJhY2sgPSBjYWxsYmFjayB8fCBmdW5jdGlvbiAoKSB7fTtcbiAgICAgICAgaWYgKF9pc0FycmF5KHRhc2tzKSkge1xuICAgICAgICAgICAgZWFjaGZuLm1hcCh0YXNrcywgZnVuY3Rpb24gKGZuLCBjYWxsYmFjaykge1xuICAgICAgICAgICAgICAgIGlmIChmbikge1xuICAgICAgICAgICAgICAgICAgICBmbihmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoYXJncy5sZW5ndGggPD0gMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3MgPSBhcmdzWzBdO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2suY2FsbChudWxsLCBlcnIsIGFyZ3MpO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LCBjYWxsYmFjayk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB2YXIgcmVzdWx0cyA9IHt9O1xuICAgICAgICAgICAgZWFjaGZuLmVhY2goX2tleXModGFza3MpLCBmdW5jdGlvbiAoaywgY2FsbGJhY2spIHtcbiAgICAgICAgICAgICAgICB0YXNrc1trXShmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBhcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGFyZ3MubGVuZ3RoIDw9IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3MgPSBhcmdzWzBdO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdHNba10gPSBhcmdzO1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSwgZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrKGVyciwgcmVzdWx0cyk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH07XG5cbiAgICBhc3luYy5wYXJhbGxlbCA9IGZ1bmN0aW9uICh0YXNrcywgY2FsbGJhY2spIHtcbiAgICAgICAgX3BhcmFsbGVsKHsgbWFwOiBhc3luYy5tYXAsIGVhY2g6IGFzeW5jLmVhY2ggfSwgdGFza3MsIGNhbGxiYWNrKTtcbiAgICB9O1xuXG4gICAgYXN5bmMucGFyYWxsZWxMaW1pdCA9IGZ1bmN0aW9uKHRhc2tzLCBsaW1pdCwgY2FsbGJhY2spIHtcbiAgICAgICAgX3BhcmFsbGVsKHsgbWFwOiBfbWFwTGltaXQobGltaXQpLCBlYWNoOiBfZWFjaExpbWl0KGxpbWl0KSB9LCB0YXNrcywgY2FsbGJhY2spO1xuICAgIH07XG5cbiAgICBhc3luYy5zZXJpZXMgPSBmdW5jdGlvbiAodGFza3MsIGNhbGxiYWNrKSB7XG4gICAgICAgIGNhbGxiYWNrID0gY2FsbGJhY2sgfHwgZnVuY3Rpb24gKCkge307XG4gICAgICAgIGlmIChfaXNBcnJheSh0YXNrcykpIHtcbiAgICAgICAgICAgIGFzeW5jLm1hcFNlcmllcyh0YXNrcywgZnVuY3Rpb24gKGZuLCBjYWxsYmFjaykge1xuICAgICAgICAgICAgICAgIGlmIChmbikge1xuICAgICAgICAgICAgICAgICAgICBmbihmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoYXJncy5sZW5ndGggPD0gMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3MgPSBhcmdzWzBdO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2suY2FsbChudWxsLCBlcnIsIGFyZ3MpO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LCBjYWxsYmFjayk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB2YXIgcmVzdWx0cyA9IHt9O1xuICAgICAgICAgICAgYXN5bmMuZWFjaFNlcmllcyhfa2V5cyh0YXNrcyksIGZ1bmN0aW9uIChrLCBjYWxsYmFjaykge1xuICAgICAgICAgICAgICAgIHRhc2tzW2tdKGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGFyZ3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsIDEpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoYXJncy5sZW5ndGggPD0gMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgYXJncyA9IGFyZ3NbMF07XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0c1trXSA9IGFyZ3M7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9LCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2soZXJyLCByZXN1bHRzKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIGFzeW5jLml0ZXJhdG9yID0gZnVuY3Rpb24gKHRhc2tzKSB7XG4gICAgICAgIHZhciBtYWtlQ2FsbGJhY2sgPSBmdW5jdGlvbiAoaW5kZXgpIHtcbiAgICAgICAgICAgIHZhciBmbiA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBpZiAodGFza3MubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgIHRhc2tzW2luZGV4XS5hcHBseShudWxsLCBhcmd1bWVudHMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gZm4ubmV4dCgpO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGZuLm5leHQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIChpbmRleCA8IHRhc2tzLmxlbmd0aCAtIDEpID8gbWFrZUNhbGxiYWNrKGluZGV4ICsgMSk6IG51bGw7XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgcmV0dXJuIGZuO1xuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gbWFrZUNhbGxiYWNrKDApO1xuICAgIH07XG5cbiAgICBhc3luYy5hcHBseSA9IGZ1bmN0aW9uIChmbikge1xuICAgICAgICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMSk7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gZm4uYXBwbHkoXG4gICAgICAgICAgICAgICAgbnVsbCwgYXJncy5jb25jYXQoQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKSlcbiAgICAgICAgICAgICk7XG4gICAgICAgIH07XG4gICAgfTtcblxuICAgIHZhciBfY29uY2F0ID0gZnVuY3Rpb24gKGVhY2hmbiwgYXJyLCBmbiwgY2FsbGJhY2spIHtcbiAgICAgICAgdmFyIHIgPSBbXTtcbiAgICAgICAgZWFjaGZuKGFyciwgZnVuY3Rpb24gKHgsIGNiKSB7XG4gICAgICAgICAgICBmbih4LCBmdW5jdGlvbiAoZXJyLCB5KSB7XG4gICAgICAgICAgICAgICAgciA9IHIuY29uY2F0KHkgfHwgW10pO1xuICAgICAgICAgICAgICAgIGNiKGVycik7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSwgZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgY2FsbGJhY2soZXJyLCByKTtcbiAgICAgICAgfSk7XG4gICAgfTtcbiAgICBhc3luYy5jb25jYXQgPSBkb1BhcmFsbGVsKF9jb25jYXQpO1xuICAgIGFzeW5jLmNvbmNhdFNlcmllcyA9IGRvU2VyaWVzKF9jb25jYXQpO1xuXG4gICAgYXN5bmMud2hpbHN0ID0gZnVuY3Rpb24gKHRlc3QsIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICBpZiAodGVzdCgpKSB7XG4gICAgICAgICAgICBpdGVyYXRvcihmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYXN5bmMud2hpbHN0KHRlc3QsIGl0ZXJhdG9yLCBjYWxsYmFjayk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGNhbGxiYWNrKCk7XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgYXN5bmMuZG9XaGlsc3QgPSBmdW5jdGlvbiAoaXRlcmF0b3IsIHRlc3QsIGNhbGxiYWNrKSB7XG4gICAgICAgIGl0ZXJhdG9yKGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHZhciBhcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKTtcbiAgICAgICAgICAgIGlmICh0ZXN0LmFwcGx5KG51bGwsIGFyZ3MpKSB7XG4gICAgICAgICAgICAgICAgYXN5bmMuZG9XaGlsc3QoaXRlcmF0b3IsIHRlc3QsIGNhbGxiYWNrKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH07XG5cbiAgICBhc3luYy51bnRpbCA9IGZ1bmN0aW9uICh0ZXN0LCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgaWYgKCF0ZXN0KCkpIHtcbiAgICAgICAgICAgIGl0ZXJhdG9yKGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBhc3luYy51bnRpbCh0ZXN0LCBpdGVyYXRvciwgY2FsbGJhY2spO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIGFzeW5jLmRvVW50aWwgPSBmdW5jdGlvbiAoaXRlcmF0b3IsIHRlc3QsIGNhbGxiYWNrKSB7XG4gICAgICAgIGl0ZXJhdG9yKGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHZhciBhcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKTtcbiAgICAgICAgICAgIGlmICghdGVzdC5hcHBseShudWxsLCBhcmdzKSkge1xuICAgICAgICAgICAgICAgIGFzeW5jLmRvVW50aWwoaXRlcmF0b3IsIHRlc3QsIGNhbGxiYWNrKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH07XG5cbiAgICBhc3luYy5xdWV1ZSA9IGZ1bmN0aW9uICh3b3JrZXIsIGNvbmN1cnJlbmN5KSB7XG4gICAgICAgIGlmIChjb25jdXJyZW5jeSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBjb25jdXJyZW5jeSA9IDE7XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gX2luc2VydChxLCBkYXRhLCBwb3MsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgaWYgKCFxLnN0YXJ0ZWQpe1xuICAgICAgICAgICAgcS5zdGFydGVkID0gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKCFfaXNBcnJheShkYXRhKSkge1xuICAgICAgICAgICAgICBkYXRhID0gW2RhdGFdO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZihkYXRhLmxlbmd0aCA9PSAwKSB7XG4gICAgICAgICAgICAgLy8gY2FsbCBkcmFpbiBpbW1lZGlhdGVseSBpZiB0aGVyZSBhcmUgbm8gdGFza3NcbiAgICAgICAgICAgICByZXR1cm4gYXN5bmMuc2V0SW1tZWRpYXRlKGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgICBpZiAocS5kcmFpbikge1xuICAgICAgICAgICAgICAgICAgICAgcS5kcmFpbigpO1xuICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIF9lYWNoKGRhdGEsIGZ1bmN0aW9uKHRhc2spIHtcbiAgICAgICAgICAgICAgdmFyIGl0ZW0gPSB7XG4gICAgICAgICAgICAgICAgICBkYXRhOiB0YXNrLFxuICAgICAgICAgICAgICAgICAgY2FsbGJhY2s6IHR5cGVvZiBjYWxsYmFjayA9PT0gJ2Z1bmN0aW9uJyA/IGNhbGxiYWNrIDogbnVsbFxuICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgIGlmIChwb3MpIHtcbiAgICAgICAgICAgICAgICBxLnRhc2tzLnVuc2hpZnQoaXRlbSk7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcS50YXNrcy5wdXNoKGl0ZW0pO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgaWYgKHEuc2F0dXJhdGVkICYmIHEudGFza3MubGVuZ3RoID09PSBxLmNvbmN1cnJlbmN5KSB7XG4gICAgICAgICAgICAgICAgICBxLnNhdHVyYXRlZCgpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGFzeW5jLnNldEltbWVkaWF0ZShxLnByb2Nlc3MpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIHdvcmtlcnMgPSAwO1xuICAgICAgICB2YXIgcSA9IHtcbiAgICAgICAgICAgIHRhc2tzOiBbXSxcbiAgICAgICAgICAgIGNvbmN1cnJlbmN5OiBjb25jdXJyZW5jeSxcbiAgICAgICAgICAgIHNhdHVyYXRlZDogbnVsbCxcbiAgICAgICAgICAgIGVtcHR5OiBudWxsLFxuICAgICAgICAgICAgZHJhaW46IG51bGwsXG4gICAgICAgICAgICBzdGFydGVkOiBmYWxzZSxcbiAgICAgICAgICAgIHBhdXNlZDogZmFsc2UsXG4gICAgICAgICAgICBwdXNoOiBmdW5jdGlvbiAoZGF0YSwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgICAgX2luc2VydChxLCBkYXRhLCBmYWxzZSwgY2FsbGJhY2spO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGtpbGw6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgcS5kcmFpbiA9IG51bGw7XG4gICAgICAgICAgICAgIHEudGFza3MgPSBbXTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB1bnNoaWZ0OiBmdW5jdGlvbiAoZGF0YSwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgICAgX2luc2VydChxLCBkYXRhLCB0cnVlLCBjYWxsYmFjayk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcHJvY2VzczogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGlmICghcS5wYXVzZWQgJiYgd29ya2VycyA8IHEuY29uY3VycmVuY3kgJiYgcS50YXNrcy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHRhc2sgPSBxLnRhc2tzLnNoaWZ0KCk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChxLmVtcHR5ICYmIHEudGFza3MubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBxLmVtcHR5KCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgd29ya2VycyArPSAxO1xuICAgICAgICAgICAgICAgICAgICB2YXIgbmV4dCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHdvcmtlcnMgLT0gMTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0YXNrLmNhbGxiYWNrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFzay5jYWxsYmFjay5hcHBseSh0YXNrLCBhcmd1bWVudHMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHEuZHJhaW4gJiYgcS50YXNrcy5sZW5ndGggKyB3b3JrZXJzID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcS5kcmFpbigpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgcS5wcm9jZXNzKCk7XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIHZhciBjYiA9IG9ubHlfb25jZShuZXh0KTtcbiAgICAgICAgICAgICAgICAgICAgd29ya2VyKHRhc2suZGF0YSwgY2IpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBsZW5ndGg6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcS50YXNrcy5sZW5ndGg7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcnVubmluZzogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB3b3JrZXJzO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGlkbGU6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBxLnRhc2tzLmxlbmd0aCArIHdvcmtlcnMgPT09IDA7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcGF1c2U6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBpZiAocS5wYXVzZWQgPT09IHRydWUpIHsgcmV0dXJuOyB9XG4gICAgICAgICAgICAgICAgcS5wYXVzZWQgPSB0cnVlO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHJlc3VtZTogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGlmIChxLnBhdXNlZCA9PT0gZmFsc2UpIHsgcmV0dXJuOyB9XG4gICAgICAgICAgICAgICAgcS5wYXVzZWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAvLyBOZWVkIHRvIGNhbGwgcS5wcm9jZXNzIG9uY2UgcGVyIGNvbmN1cnJlbnRcbiAgICAgICAgICAgICAgICAvLyB3b3JrZXIgdG8gcHJlc2VydmUgZnVsbCBjb25jdXJyZW5jeSBhZnRlciBwYXVzZVxuICAgICAgICAgICAgICAgIGZvciAodmFyIHcgPSAxOyB3IDw9IHEuY29uY3VycmVuY3k7IHcrKykge1xuICAgICAgICAgICAgICAgICAgICBhc3luYy5zZXRJbW1lZGlhdGUocS5wcm9jZXNzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiBxO1xuICAgIH07XG5cbiAgICBhc3luYy5wcmlvcml0eVF1ZXVlID0gZnVuY3Rpb24gKHdvcmtlciwgY29uY3VycmVuY3kpIHtcblxuICAgICAgICBmdW5jdGlvbiBfY29tcGFyZVRhc2tzKGEsIGIpe1xuICAgICAgICAgIHJldHVybiBhLnByaW9yaXR5IC0gYi5wcmlvcml0eTtcbiAgICAgICAgfTtcblxuICAgICAgICBmdW5jdGlvbiBfYmluYXJ5U2VhcmNoKHNlcXVlbmNlLCBpdGVtLCBjb21wYXJlKSB7XG4gICAgICAgICAgdmFyIGJlZyA9IC0xLFxuICAgICAgICAgICAgICBlbmQgPSBzZXF1ZW5jZS5sZW5ndGggLSAxO1xuICAgICAgICAgIHdoaWxlIChiZWcgPCBlbmQpIHtcbiAgICAgICAgICAgIHZhciBtaWQgPSBiZWcgKyAoKGVuZCAtIGJlZyArIDEpID4+PiAxKTtcbiAgICAgICAgICAgIGlmIChjb21wYXJlKGl0ZW0sIHNlcXVlbmNlW21pZF0pID49IDApIHtcbiAgICAgICAgICAgICAgYmVnID0gbWlkO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgZW5kID0gbWlkIC0gMTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIGJlZztcbiAgICAgICAgfVxuXG4gICAgICAgIGZ1bmN0aW9uIF9pbnNlcnQocSwgZGF0YSwgcHJpb3JpdHksIGNhbGxiYWNrKSB7XG4gICAgICAgICAgaWYgKCFxLnN0YXJ0ZWQpe1xuICAgICAgICAgICAgcS5zdGFydGVkID0gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKCFfaXNBcnJheShkYXRhKSkge1xuICAgICAgICAgICAgICBkYXRhID0gW2RhdGFdO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZihkYXRhLmxlbmd0aCA9PSAwKSB7XG4gICAgICAgICAgICAgLy8gY2FsbCBkcmFpbiBpbW1lZGlhdGVseSBpZiB0aGVyZSBhcmUgbm8gdGFza3NcbiAgICAgICAgICAgICByZXR1cm4gYXN5bmMuc2V0SW1tZWRpYXRlKGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgICBpZiAocS5kcmFpbikge1xuICAgICAgICAgICAgICAgICAgICAgcS5kcmFpbigpO1xuICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIF9lYWNoKGRhdGEsIGZ1bmN0aW9uKHRhc2spIHtcbiAgICAgICAgICAgICAgdmFyIGl0ZW0gPSB7XG4gICAgICAgICAgICAgICAgICBkYXRhOiB0YXNrLFxuICAgICAgICAgICAgICAgICAgcHJpb3JpdHk6IHByaW9yaXR5LFxuICAgICAgICAgICAgICAgICAgY2FsbGJhY2s6IHR5cGVvZiBjYWxsYmFjayA9PT0gJ2Z1bmN0aW9uJyA/IGNhbGxiYWNrIDogbnVsbFxuICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgIHEudGFza3Muc3BsaWNlKF9iaW5hcnlTZWFyY2gocS50YXNrcywgaXRlbSwgX2NvbXBhcmVUYXNrcykgKyAxLCAwLCBpdGVtKTtcblxuICAgICAgICAgICAgICBpZiAocS5zYXR1cmF0ZWQgJiYgcS50YXNrcy5sZW5ndGggPT09IHEuY29uY3VycmVuY3kpIHtcbiAgICAgICAgICAgICAgICAgIHEuc2F0dXJhdGVkKCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgYXN5bmMuc2V0SW1tZWRpYXRlKHEucHJvY2Vzcyk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBTdGFydCB3aXRoIGEgbm9ybWFsIHF1ZXVlXG4gICAgICAgIHZhciBxID0gYXN5bmMucXVldWUod29ya2VyLCBjb25jdXJyZW5jeSk7XG5cbiAgICAgICAgLy8gT3ZlcnJpZGUgcHVzaCB0byBhY2NlcHQgc2Vjb25kIHBhcmFtZXRlciByZXByZXNlbnRpbmcgcHJpb3JpdHlcbiAgICAgICAgcS5wdXNoID0gZnVuY3Rpb24gKGRhdGEsIHByaW9yaXR5LCBjYWxsYmFjaykge1xuICAgICAgICAgIF9pbnNlcnQocSwgZGF0YSwgcHJpb3JpdHksIGNhbGxiYWNrKTtcbiAgICAgICAgfTtcblxuICAgICAgICAvLyBSZW1vdmUgdW5zaGlmdCBmdW5jdGlvblxuICAgICAgICBkZWxldGUgcS51bnNoaWZ0O1xuXG4gICAgICAgIHJldHVybiBxO1xuICAgIH07XG5cbiAgICBhc3luYy5jYXJnbyA9IGZ1bmN0aW9uICh3b3JrZXIsIHBheWxvYWQpIHtcbiAgICAgICAgdmFyIHdvcmtpbmcgICAgID0gZmFsc2UsXG4gICAgICAgICAgICB0YXNrcyAgICAgICA9IFtdO1xuXG4gICAgICAgIHZhciBjYXJnbyA9IHtcbiAgICAgICAgICAgIHRhc2tzOiB0YXNrcyxcbiAgICAgICAgICAgIHBheWxvYWQ6IHBheWxvYWQsXG4gICAgICAgICAgICBzYXR1cmF0ZWQ6IG51bGwsXG4gICAgICAgICAgICBlbXB0eTogbnVsbCxcbiAgICAgICAgICAgIGRyYWluOiBudWxsLFxuICAgICAgICAgICAgZHJhaW5lZDogdHJ1ZSxcbiAgICAgICAgICAgIHB1c2g6IGZ1bmN0aW9uIChkYXRhLCBjYWxsYmFjaykge1xuICAgICAgICAgICAgICAgIGlmICghX2lzQXJyYXkoZGF0YSkpIHtcbiAgICAgICAgICAgICAgICAgICAgZGF0YSA9IFtkYXRhXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgX2VhY2goZGF0YSwgZnVuY3Rpb24odGFzaykge1xuICAgICAgICAgICAgICAgICAgICB0YXNrcy5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGE6IHRhc2ssXG4gICAgICAgICAgICAgICAgICAgICAgICBjYWxsYmFjazogdHlwZW9mIGNhbGxiYWNrID09PSAnZnVuY3Rpb24nID8gY2FsbGJhY2sgOiBudWxsXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICBjYXJnby5kcmFpbmVkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIGlmIChjYXJnby5zYXR1cmF0ZWQgJiYgdGFza3MubGVuZ3RoID09PSBwYXlsb2FkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjYXJnby5zYXR1cmF0ZWQoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGFzeW5jLnNldEltbWVkaWF0ZShjYXJnby5wcm9jZXNzKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBwcm9jZXNzOiBmdW5jdGlvbiBwcm9jZXNzKCkge1xuICAgICAgICAgICAgICAgIGlmICh3b3JraW5nKSByZXR1cm47XG4gICAgICAgICAgICAgICAgaWYgKHRhc2tzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICBpZihjYXJnby5kcmFpbiAmJiAhY2FyZ28uZHJhaW5lZCkgY2FyZ28uZHJhaW4oKTtcbiAgICAgICAgICAgICAgICAgICAgY2FyZ28uZHJhaW5lZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB2YXIgdHMgPSB0eXBlb2YgcGF5bG9hZCA9PT0gJ251bWJlcidcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IHRhc2tzLnNwbGljZSgwLCBwYXlsb2FkKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogdGFza3Muc3BsaWNlKDAsIHRhc2tzLmxlbmd0aCk7XG5cbiAgICAgICAgICAgICAgICB2YXIgZHMgPSBfbWFwKHRzLCBmdW5jdGlvbiAodGFzaykge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGFzay5kYXRhO1xuICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgaWYoY2FyZ28uZW1wdHkpIGNhcmdvLmVtcHR5KCk7XG4gICAgICAgICAgICAgICAgd29ya2luZyA9IHRydWU7XG4gICAgICAgICAgICAgICAgd29ya2VyKGRzLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIHdvcmtpbmcgPSBmYWxzZTtcblxuICAgICAgICAgICAgICAgICAgICB2YXIgYXJncyA9IGFyZ3VtZW50cztcbiAgICAgICAgICAgICAgICAgICAgX2VhY2godHMsIGZ1bmN0aW9uIChkYXRhKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZGF0YS5jYWxsYmFjaykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEuY2FsbGJhY2suYXBwbHkobnVsbCwgYXJncyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgICAgIHByb2Nlc3MoKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBsZW5ndGg6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGFza3MubGVuZ3RoO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHJ1bm5pbmc6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gd29ya2luZztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIGNhcmdvO1xuICAgIH07XG5cbiAgICB2YXIgX2NvbnNvbGVfZm4gPSBmdW5jdGlvbiAobmFtZSkge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKGZuKSB7XG4gICAgICAgICAgICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMSk7XG4gICAgICAgICAgICBmbi5hcHBseShudWxsLCBhcmdzLmNvbmNhdChbZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgICAgIHZhciBhcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKTtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGNvbnNvbGUgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb25zb2xlLmVycm9yKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihlcnIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKGNvbnNvbGVbbmFtZV0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIF9lYWNoKGFyZ3MsIGZ1bmN0aW9uICh4KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZVtuYW1lXSh4KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfV0pKTtcbiAgICAgICAgfTtcbiAgICB9O1xuICAgIGFzeW5jLmxvZyA9IF9jb25zb2xlX2ZuKCdsb2cnKTtcbiAgICBhc3luYy5kaXIgPSBfY29uc29sZV9mbignZGlyJyk7XG4gICAgLyphc3luYy5pbmZvID0gX2NvbnNvbGVfZm4oJ2luZm8nKTtcbiAgICBhc3luYy53YXJuID0gX2NvbnNvbGVfZm4oJ3dhcm4nKTtcbiAgICBhc3luYy5lcnJvciA9IF9jb25zb2xlX2ZuKCdlcnJvcicpOyovXG5cbiAgICBhc3luYy5tZW1vaXplID0gZnVuY3Rpb24gKGZuLCBoYXNoZXIpIHtcbiAgICAgICAgdmFyIG1lbW8gPSB7fTtcbiAgICAgICAgdmFyIHF1ZXVlcyA9IHt9O1xuICAgICAgICBoYXNoZXIgPSBoYXNoZXIgfHwgZnVuY3Rpb24gKHgpIHtcbiAgICAgICAgICAgIHJldHVybiB4O1xuICAgICAgICB9O1xuICAgICAgICB2YXIgbWVtb2l6ZWQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7XG4gICAgICAgICAgICB2YXIgY2FsbGJhY2sgPSBhcmdzLnBvcCgpO1xuICAgICAgICAgICAgdmFyIGtleSA9IGhhc2hlci5hcHBseShudWxsLCBhcmdzKTtcbiAgICAgICAgICAgIGlmIChrZXkgaW4gbWVtbykge1xuICAgICAgICAgICAgICAgIGFzeW5jLm5leHRUaWNrKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2suYXBwbHkobnVsbCwgbWVtb1trZXldKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGtleSBpbiBxdWV1ZXMpIHtcbiAgICAgICAgICAgICAgICBxdWV1ZXNba2V5XS5wdXNoKGNhbGxiYWNrKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHF1ZXVlc1trZXldID0gW2NhbGxiYWNrXTtcbiAgICAgICAgICAgICAgICBmbi5hcHBseShudWxsLCBhcmdzLmNvbmNhdChbZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICBtZW1vW2tleV0gPSBhcmd1bWVudHM7XG4gICAgICAgICAgICAgICAgICAgIHZhciBxID0gcXVldWVzW2tleV07XG4gICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBxdWV1ZXNba2V5XTtcbiAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDAsIGwgPSBxLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICAgIHFbaV0uYXBwbHkobnVsbCwgYXJndW1lbnRzKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1dKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIG1lbW9pemVkLm1lbW8gPSBtZW1vO1xuICAgICAgICBtZW1vaXplZC51bm1lbW9pemVkID0gZm47XG4gICAgICAgIHJldHVybiBtZW1vaXplZDtcbiAgICB9O1xuXG4gICAgYXN5bmMudW5tZW1vaXplID0gZnVuY3Rpb24gKGZuKSB7XG4gICAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gKGZuLnVubWVtb2l6ZWQgfHwgZm4pLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7XG4gICAgICB9O1xuICAgIH07XG5cbiAgICBhc3luYy50aW1lcyA9IGZ1bmN0aW9uIChjb3VudCwgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgIHZhciBjb3VudGVyID0gW107XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY291bnQ7IGkrKykge1xuICAgICAgICAgICAgY291bnRlci5wdXNoKGkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBhc3luYy5tYXAoY291bnRlciwgaXRlcmF0b3IsIGNhbGxiYWNrKTtcbiAgICB9O1xuXG4gICAgYXN5bmMudGltZXNTZXJpZXMgPSBmdW5jdGlvbiAoY291bnQsIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICB2YXIgY291bnRlciA9IFtdO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNvdW50OyBpKyspIHtcbiAgICAgICAgICAgIGNvdW50ZXIucHVzaChpKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYXN5bmMubWFwU2VyaWVzKGNvdW50ZXIsIGl0ZXJhdG9yLCBjYWxsYmFjayk7XG4gICAgfTtcblxuICAgIGFzeW5jLnNlcSA9IGZ1bmN0aW9uICgvKiBmdW5jdGlvbnMuLi4gKi8pIHtcbiAgICAgICAgdmFyIGZucyA9IGFyZ3VtZW50cztcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHZhciB0aGF0ID0gdGhpcztcbiAgICAgICAgICAgIHZhciBhcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKTtcbiAgICAgICAgICAgIHZhciBjYWxsYmFjayA9IGFyZ3MucG9wKCk7XG4gICAgICAgICAgICBhc3luYy5yZWR1Y2UoZm5zLCBhcmdzLCBmdW5jdGlvbiAobmV3YXJncywgZm4sIGNiKSB7XG4gICAgICAgICAgICAgICAgZm4uYXBwbHkodGhhdCwgbmV3YXJncy5jb25jYXQoW2Z1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGVyciA9IGFyZ3VtZW50c1swXTtcbiAgICAgICAgICAgICAgICAgICAgdmFyIG5leHRhcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKTtcbiAgICAgICAgICAgICAgICAgICAgY2IoZXJyLCBuZXh0YXJncyk7XG4gICAgICAgICAgICAgICAgfV0pKVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGZ1bmN0aW9uIChlcnIsIHJlc3VsdHMpIHtcbiAgICAgICAgICAgICAgICBjYWxsYmFjay5hcHBseSh0aGF0LCBbZXJyXS5jb25jYXQocmVzdWx0cykpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH07XG4gICAgfTtcblxuICAgIGFzeW5jLmNvbXBvc2UgPSBmdW5jdGlvbiAoLyogZnVuY3Rpb25zLi4uICovKSB7XG4gICAgICByZXR1cm4gYXN5bmMuc2VxLmFwcGx5KG51bGwsIEFycmF5LnByb3RvdHlwZS5yZXZlcnNlLmNhbGwoYXJndW1lbnRzKSk7XG4gICAgfTtcblxuICAgIHZhciBfYXBwbHlFYWNoID0gZnVuY3Rpb24gKGVhY2hmbiwgZm5zIC8qYXJncy4uLiovKSB7XG4gICAgICAgIHZhciBnbyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHZhciB0aGF0ID0gdGhpcztcbiAgICAgICAgICAgIHZhciBhcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKTtcbiAgICAgICAgICAgIHZhciBjYWxsYmFjayA9IGFyZ3MucG9wKCk7XG4gICAgICAgICAgICByZXR1cm4gZWFjaGZuKGZucywgZnVuY3Rpb24gKGZuLCBjYikge1xuICAgICAgICAgICAgICAgIGZuLmFwcGx5KHRoYXQsIGFyZ3MuY29uY2F0KFtjYl0pKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjYWxsYmFjayk7XG4gICAgICAgIH07XG4gICAgICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID4gMikge1xuICAgICAgICAgICAgdmFyIGFyZ3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsIDIpO1xuICAgICAgICAgICAgcmV0dXJuIGdvLmFwcGx5KHRoaXMsIGFyZ3MpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIGdvO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBhc3luYy5hcHBseUVhY2ggPSBkb1BhcmFsbGVsKF9hcHBseUVhY2gpO1xuICAgIGFzeW5jLmFwcGx5RWFjaFNlcmllcyA9IGRvU2VyaWVzKF9hcHBseUVhY2gpO1xuXG4gICAgYXN5bmMuZm9yZXZlciA9IGZ1bmN0aW9uIChmbiwgY2FsbGJhY2spIHtcbiAgICAgICAgZnVuY3Rpb24gbmV4dChlcnIpIHtcbiAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICBpZiAoY2FsbGJhY2spIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRocm93IGVycjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZuKG5leHQpO1xuICAgICAgICB9XG4gICAgICAgIG5leHQoKTtcbiAgICB9O1xuXG4gICAgLy8gTm9kZS5qc1xuICAgIGlmICh0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJyAmJiBtb2R1bGUuZXhwb3J0cykge1xuICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IGFzeW5jO1xuICAgIH1cbiAgICAvLyBBTUQgLyBSZXF1aXJlSlNcbiAgICBlbHNlIGlmICh0eXBlb2YgZGVmaW5lICE9PSAndW5kZWZpbmVkJyAmJiBkZWZpbmUuYW1kKSB7XG4gICAgICAgIGRlZmluZShbXSwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIGFzeW5jO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgLy8gaW5jbHVkZWQgZGlyZWN0bHkgdmlhIDxzY3JpcHQ+IHRhZ1xuICAgIGVsc2Uge1xuICAgICAgICByb290LmFzeW5jID0gYXN5bmM7XG4gICAgfVxuXG59KCkpO1xuIiwidmFyIGFzeW5jICAgICAgID0gcmVxdWlyZSgnYXN5bmMnKSxcbiAgICB1cmxQYXJzZXIgICA9IHJlcXVpcmUoJ3VybCcpLFxuICAgIFJlc291cmNlICAgID0gcmVxdWlyZSgnLi9SZXNvdXJjZScpLFxuICAgIEV2ZW50RW1pdHRlciA9IHJlcXVpcmUoJ2V2ZW50ZW1pdHRlcjMnKTtcblxuLyoqXG4gKiBNYW5hZ2VzIHRoZSBzdGF0ZSBhbmQgbG9hZGluZyBvZiBtdWx0aXBsZSByZXNvdXJjZXMgdG8gbG9hZC5cbiAqXG4gKiBAY2xhc3NcbiAqIEBwYXJhbSBbYmFzZVVybD0nJ10ge3N0cmluZ30gVGhlIGJhc2UgdXJsIGZvciBhbGwgcmVzb3VyY2VzIGxvYWRlZCBieSB0aGlzIGxvYWRlci5cbiAqIEBwYXJhbSBbY29uY3VycmVuY3k9MTBdIHtudW1iZXJ9IFRoZSBudW1iZXIgb2YgcmVzb3VyY2VzIHRvIGxvYWQgY29uY3VycmVudGx5LlxuICovXG5mdW5jdGlvbiBMb2FkZXIoYmFzZVVybCwgY29uY3VycmVuY3kpIHtcbiAgICBFdmVudEVtaXR0ZXIuY2FsbCh0aGlzKTtcblxuICAgIGNvbmN1cnJlbmN5ID0gY29uY3VycmVuY3kgfHwgMTA7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYmFzZSB1cmwgZm9yIGFsbCByZXNvdXJjZXMgbG9hZGVkIGJ5IHRoaXMgbG9hZGVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7c3RyaW5nfVxuICAgICAqL1xuICAgIHRoaXMuYmFzZVVybCA9IGJhc2VVcmwgfHwgJyc7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgcHJvZ3Jlc3MgcGVyY2VudCBvZiB0aGUgbG9hZGVyIGdvaW5nIHRocm91Z2ggdGhlIHF1ZXVlLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMucHJvZ3Jlc3MgPSAwO1xuXG4gICAgLyoqXG4gICAgICogTG9hZGluZyBzdGF0ZSBvZiB0aGUgbG9hZGVyLCB0cnVlIGlmIGl0IGlzIGN1cnJlbnRseSBsb2FkaW5nIHJlc291cmNlcy5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICovXG4gICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgcGVyY2VudGFnZSBvZiB0b3RhbCBwcm9ncmVzcyB0aGF0IGEgc2luZ2xlIHJlc291cmNlIHJlcHJlc2VudHMuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy5fcHJvZ3Jlc3NDaHVuayA9IDA7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgbWlkZGxld2FyZSB0byBydW4gYmVmb3JlIGxvYWRpbmcgZWFjaCByZXNvdXJjZS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Z1bmN0aW9uW119XG4gICAgICovXG4gICAgdGhpcy5fYmVmb3JlTWlkZGxld2FyZSA9IFtdO1xuXG4gICAgLyoqXG4gICAgICogVGhlIG1pZGRsZXdhcmUgdG8gcnVuIGFmdGVyIGxvYWRpbmcgZWFjaCByZXNvdXJjZS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Z1bmN0aW9uW119XG4gICAgICovXG4gICAgdGhpcy5fYWZ0ZXJNaWRkbGV3YXJlID0gW107XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYF9sb2FkUmVzb3VyY2VgIGZ1bmN0aW9uIGJvdW5kIHdpdGggdGhpcyBvYmplY3QgY29udGV4dC5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQG1lbWJlciB7ZnVuY3Rpb259XG4gICAgICovXG4gICAgdGhpcy5fYm91bmRMb2FkUmVzb3VyY2UgPSB0aGlzLl9sb2FkUmVzb3VyY2UuYmluZCh0aGlzKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBgX29uTG9hZGAgZnVuY3Rpb24gYm91bmQgd2l0aCB0aGlzIG9iamVjdCBjb250ZXh0LlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAbWVtYmVyIHtmdW5jdGlvbn1cbiAgICAgKi9cbiAgICB0aGlzLl9ib3VuZE9uTG9hZCA9IHRoaXMuX29uTG9hZC5iaW5kKHRoaXMpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHJlc291cmNlIGJ1ZmZlciB0aGF0IGZpbGxzIHVudGlsIGBsb2FkYCBpcyBjYWxsZWQgdG8gc3RhcnQgbG9hZGluZyByZXNvdXJjZXMuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBtZW1iZXIge1Jlc291cmNlW119XG4gICAgICovXG4gICAgdGhpcy5fYnVmZmVyID0gW107XG5cbiAgICAvKipcbiAgICAgKiBVc2VkIHRvIHRyYWNrIGxvYWQgY29tcGxldGlvbi5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMuX251bVRvTG9hZCA9IDA7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgcmVzb3VyY2VzIHdhaXRpbmcgdG8gYmUgbG9hZGVkLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAbWVtYmVyIHtSZXNvdXJjZVtdfVxuICAgICAqL1xuICAgIHRoaXMuX3F1ZXVlID0gYXN5bmMucXVldWUodGhpcy5fYm91bmRMb2FkUmVzb3VyY2UsIGNvbmN1cnJlbmN5KTtcblxuICAgIC8qKlxuICAgICAqIEFsbCB0aGUgcmVzb3VyY2VzIGZvciB0aGlzIGxvYWRlciBrZXllZCBieSBuYW1lLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7b2JqZWN0PHN0cmluZywgUmVzb3VyY2U+fVxuICAgICAqL1xuICAgIHRoaXMucmVzb3VyY2VzID0ge307XG5cbiAgICAvKipcbiAgICAgKiBFbWl0dGVkIG9uY2UgcGVyIGxvYWRlZCBvciBlcnJvcmVkIHJlc291cmNlLlxuICAgICAqXG4gICAgICogQGV2ZW50IHByb2dyZXNzXG4gICAgICogQG1lbWJlcm9mIExvYWRlciNcbiAgICAgKi9cblxuICAgIC8qKlxuICAgICAqIEVtaXR0ZWQgb25jZSBwZXIgZXJyb3JlZCByZXNvdXJjZS5cbiAgICAgKlxuICAgICAqIEBldmVudCBlcnJvclxuICAgICAqIEBtZW1iZXJvZiBMb2FkZXIjXG4gICAgICovXG5cbiAgICAvKipcbiAgICAgKiBFbWl0dGVkIG9uY2UgcGVyIGxvYWRlZCByZXNvdXJjZS5cbiAgICAgKlxuICAgICAqIEBldmVudCBsb2FkXG4gICAgICogQG1lbWJlcm9mIExvYWRlciNcbiAgICAgKi9cblxuICAgIC8qKlxuICAgICAqIEVtaXR0ZWQgd2hlbiB0aGUgbG9hZGVyIGJlZ2lucyB0byBwcm9jZXNzIHRoZSBxdWV1ZS5cbiAgICAgKlxuICAgICAqIEBldmVudCBzdGFydFxuICAgICAqIEBtZW1iZXJvZiBMb2FkZXIjXG4gICAgICovXG5cbiAgICAvKipcbiAgICAgKiBFbWl0dGVkIHdoZW4gdGhlIHF1ZXVlZCByZXNvdXJjZXMgYWxsIGxvYWQuXG4gICAgICpcbiAgICAgKiBAZXZlbnQgY29tcGxldGVcbiAgICAgKiBAbWVtYmVyb2YgTG9hZGVyI1xuICAgICAqL1xufVxuXG5Mb2FkZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShFdmVudEVtaXR0ZXIucHJvdG90eXBlKTtcbkxvYWRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBMb2FkZXI7XG5tb2R1bGUuZXhwb3J0cyA9IExvYWRlcjtcblxuLyoqXG4gKiBBZGRzIGEgcmVzb3VyY2UgKG9yIG11bHRpcGxlIHJlc291cmNlcykgdG8gdGhlIGxvYWRlciBxdWV1ZS5cbiAqXG4gKiBUaGlzIGZ1bmN0aW9uIGNhbiB0YWtlIGEgd2lkZSB2YXJpZXR5IG9mIGRpZmZlcmVudCBwYXJhbWV0ZXJzLiBUaGUgb25seSB0aGluZyB0aGF0IGlzIGFsd2F5c1xuICogcmVxdWlyZWQgdGhlIHVybCB0byBsb2FkLiBBbGwgdGhlIGZvbGxvd2luZyB3aWxsIHdvcms6XG4gKlxuICogYGBganNcbiAqIGxvYWRlclxuICogICAgIC8vIG5vcm1hbCBwYXJhbSBzeW50YXhcbiAqICAgICAuYWRkKCdrZXknLCAnaHR0cDovLy4uLicsIGZ1bmN0aW9uICgpIHt9KVxuICogICAgIC5hZGQoJ2h0dHA6Ly8uLi4nLCBmdW5jdGlvbiAoKSB7fSlcbiAqICAgICAuYWRkKCdodHRwOi8vLi4uJylcbiAqXG4gKiAgICAgLy8gb2JqZWN0IHN5bnRheFxuICogICAgIC5hZGQoe1xuICogICAgICAgICBuYW1lOiAna2V5MicsXG4gKiAgICAgICAgIHVybDogJ2h0dHA6Ly8uLi4nXG4gKiAgICAgfSwgZnVuY3Rpb24gKCkge30pXG4gKiAgICAgLmFkZCh7XG4gKiAgICAgICAgIHVybDogJ2h0dHA6Ly8uLi4nXG4gKiAgICAgfSwgZnVuY3Rpb24gKCkge30pXG4gKiAgICAgLmFkZCh7XG4gKiAgICAgICAgIG5hbWU6ICdrZXkzJyxcbiAqICAgICAgICAgdXJsOiAnaHR0cDovLy4uLidcbiAqICAgICAgICAgb25Db21wbGV0ZTogZnVuY3Rpb24gKCkge31cbiAqICAgICB9KVxuICogICAgIC5hZGQoe1xuICogICAgICAgICB1cmw6ICdodHRwczovLy4uLicsXG4gKiAgICAgICAgIG9uQ29tcGxldGU6IGZ1bmN0aW9uICgpIHt9LFxuICogICAgICAgICBjcm9zc09yaWdpbjogdHJ1ZVxuICogICAgIH0pXG4gKlxuICogICAgIC8vIHlvdSBjYW4gYWxzbyBwYXNzIGFuIGFycmF5IG9mIG9iamVjdHMgb3IgdXJscyBvciBib3RoXG4gKiAgICAgLmFkZChbXG4gKiAgICAgICAgIHsgbmFtZTogJ2tleTQnLCB1cmw6ICdodHRwOi8vLi4uJywgb25Db21wbGV0ZTogZnVuY3Rpb24gKCkge30gfSxcbiAqICAgICAgICAgeyB1cmw6ICdodHRwOi8vLi4uJywgb25Db21wbGV0ZTogZnVuY3Rpb24gKCkge30gfSxcbiAqICAgICAgICAgJ2h0dHA6Ly8uLi4nXG4gKiAgICAgXSk7XG4gKiBgYGBcbiAqXG4gKiBAYWxpYXMgZW5xdWV1ZVxuICogQHBhcmFtIFtuYW1lXSB7c3RyaW5nfSBUaGUgbmFtZSBvZiB0aGUgcmVzb3VyY2UgdG8gbG9hZCwgaWYgbm90IHBhc3NlZCB0aGUgdXJsIGlzIHVzZWQuXG4gKiBAcGFyYW0gdXJsIHtzdHJpbmd9IFRoZSB1cmwgZm9yIHRoaXMgcmVzb3VyY2UsIHJlbGF0aXZlIHRvIHRoZSBiYXNlVXJsIG9mIHRoaXMgbG9hZGVyLlxuICogQHBhcmFtIFtvcHRpb25zXSB7b2JqZWN0fSBUaGUgb3B0aW9ucyBmb3IgdGhlIGxvYWQuXG4gKiBAcGFyYW0gW29wdGlvbnMuY3Jvc3NPcmlnaW5dIHtib29sZWFufSBJcyB0aGlzIHJlcXVlc3QgY3Jvc3Mtb3JpZ2luPyBEZWZhdWx0IGlzIHRvIGRldGVybWluZSBhdXRvbWF0aWNhbGx5LlxuICogQHBhcmFtIFtvcHRpb25zLmxvYWRUeXBlPVJlc291cmNlLkxPQURfVFlQRS5YSFJdIHtSZXNvdXJjZS5YSFJfTE9BRF9UWVBFfSBIb3cgc2hvdWxkIHRoaXMgcmVzb3VyY2UgYmUgbG9hZGVkP1xuICogQHBhcmFtIFtvcHRpb25zLnhoclR5cGU9UmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuREVGQVVMVF0ge1Jlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFfSBIb3cgc2hvdWxkIHRoZSBkYXRhIGJlaW5nXG4gKiAgICAgIGxvYWRlZCBiZSBpbnRlcnByZXRlZCB3aGVuIHVzaW5nIFhIUj9cbiAqIEBwYXJhbSBbY2FsbGJhY2tdIHtmdW5jdGlvbn0gRnVuY3Rpb24gdG8gY2FsbCB3aGVuIHRoaXMgc3BlY2lmaWMgcmVzb3VyY2UgY29tcGxldGVzIGxvYWRpbmcuXG4gKiBAcmV0dXJuIHtMb2FkZXJ9XG4gKi9cbkxvYWRlci5wcm90b3R5cGUuYWRkID0gTG9hZGVyLnByb3RvdHlwZS5lbnF1ZXVlID0gZnVuY3Rpb24gKG5hbWUsIHVybCwgb3B0aW9ucywgY2IpIHtcbiAgICAvLyBzcGVjaWFsIGNhc2Ugb2YgYW4gYXJyYXkgb2Ygb2JqZWN0cyBvciB1cmxzXG4gICAgaWYgKEFycmF5LmlzQXJyYXkobmFtZSkpIHtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBuYW1lLmxlbmd0aDsgKytpKSB7XG4gICAgICAgICAgICB0aGlzLmFkZChuYW1lW2ldKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIC8vIGlmIGFuIG9iamVjdCBpcyBwYXNzZWQgaW5zdGVhZCBvZiBwYXJhbXNcbiAgICBpZiAodHlwZW9mIG5hbWUgPT09ICdvYmplY3QnKSB7XG4gICAgICAgIGNiID0gdXJsIHx8IG5hbWUuY2FsbGJhY2sgfHwgbmFtZS5vbkNvbXBsZXRlO1xuICAgICAgICBvcHRpb25zID0gbmFtZTtcbiAgICAgICAgdXJsID0gbmFtZS51cmw7XG4gICAgICAgIG5hbWUgPSBuYW1lLm5hbWUgfHwgbmFtZS5rZXkgfHwgbmFtZS51cmw7XG4gICAgfVxuXG4gICAgLy8gY2FzZSB3aGVyZSBubyBuYW1lIGlzIHBhc3NlZCBzaGlmdCBhbGwgYXJncyBvdmVyIGJ5IG9uZS5cbiAgICBpZiAodHlwZW9mIHVybCAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgY2IgPSBvcHRpb25zO1xuICAgICAgICBvcHRpb25zID0gdXJsO1xuICAgICAgICB1cmwgPSBuYW1lO1xuICAgIH1cblxuICAgIC8vIG5vdyB0aGF0IHdlIHNoaWZ0ZWQgbWFrZSBzdXJlIHdlIGhhdmUgYSBwcm9wZXIgdXJsLlxuICAgIGlmICh0eXBlb2YgdXJsICE9PSAnc3RyaW5nJykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ05vIHVybCBwYXNzZWQgdG8gYWRkIHJlc291cmNlIHRvIGxvYWRlci4nKTtcbiAgICB9XG5cbiAgICAvLyBvcHRpb25zIGFyZSBvcHRpb25hbCBzbyBwZW9wbGUgbWlnaHQgcGFzcyBhIGZ1bmN0aW9uIGFuZCBubyBvcHRpb25zXG4gICAgaWYgKHR5cGVvZiBvcHRpb25zID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIGNiID0gb3B0aW9ucztcbiAgICAgICAgb3B0aW9ucyA9IG51bGw7XG4gICAgfVxuXG4gICAgLy8gY2hlY2sgaWYgcmVzb3VyY2UgYWxyZWFkeSBleGlzdHMuXG4gICAgaWYgKHRoaXMucmVzb3VyY2VzW25hbWVdKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignUmVzb3VyY2Ugd2l0aCBuYW1lIFwiJyArIG5hbWUgKyAnXCIgYWxyZWFkeSBleGlzdHMuJyk7XG4gICAgfVxuXG4gICAgLy8gYWRkIGJhc2UgdXJsIGlmIHRoaXMgaXNuJ3QgYW4gYWJzb2x1dGUgdXJsXG4gICAgdXJsID0gdGhpcy5faGFuZGxlQmFzZVVybCh1cmwpO1xuXG4gICAgLy8gY3JlYXRlIHRoZSBzdG9yZSB0aGUgcmVzb3VyY2VcbiAgICB0aGlzLnJlc291cmNlc1tuYW1lXSA9IG5ldyBSZXNvdXJjZShuYW1lLCB1cmwsIG9wdGlvbnMpO1xuXG4gICAgaWYgKHR5cGVvZiBjYiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB0aGlzLnJlc291cmNlc1tuYW1lXS5vbmNlKCdhZnRlck1pZGRsZXdhcmUnLCBjYik7XG4gICAgfVxuXG4gICAgdGhpcy5fbnVtVG9Mb2FkKys7XG5cbiAgICAvLyBpZiBhbHJlYWR5IGxvYWRpbmcgYWRkIGl0IHRvIHRoZSB3b3JrZXIgcXVldWVcbiAgICBpZiAodGhpcy5fcXVldWUuc3RhcnRlZCkge1xuICAgICAgICB0aGlzLl9xdWV1ZS5wdXNoKHRoaXMucmVzb3VyY2VzW25hbWVdKTtcbiAgICAgICAgdGhpcy5fcHJvZ3Jlc3NDaHVuayA9ICgxMDAgLSB0aGlzLnByb2dyZXNzKSAvICh0aGlzLl9xdWV1ZS5sZW5ndGgoKSArIHRoaXMuX3F1ZXVlLnJ1bm5pbmcoKSk7XG4gICAgfVxuICAgIC8vIG90aGVyd2lzZSBidWZmZXIgaXQgdG8gYmUgYWRkZWQgdG8gdGhlIHF1ZXVlIGxhdGVyXG4gICAgZWxzZSB7XG4gICAgICAgIHRoaXMuX2J1ZmZlci5wdXNoKHRoaXMucmVzb3VyY2VzW25hbWVdKTtcbiAgICAgICAgdGhpcy5fcHJvZ3Jlc3NDaHVuayA9IDEwMCAvIHRoaXMuX2J1ZmZlci5sZW5ndGg7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG5Mb2FkZXIucHJvdG90eXBlLl9oYW5kbGVCYXNlVXJsID0gZnVuY3Rpb24gKHVybCkge1xuICAgIHZhciBwYXJzZWRVcmwgPSB1cmxQYXJzZXIucGFyc2UodXJsKTtcblxuICAgIC8vIGFic29sdXRlIHVybCwganVzdCB1c2UgaXQgYXMgaXMuXG4gICAgaWYgKHBhcnNlZFVybC5wcm90b2NvbCB8fCBwYXJzZWRVcmwucGF0aG5hbWUuaW5kZXhPZignLy8nKSA9PT0gMCkge1xuICAgICAgICByZXR1cm4gdXJsO1xuICAgIH1cblxuICAgIC8vIGlmIGJhc2VVcmwgZG9lc24ndCBlbmQgaW4gc2xhc2ggYW5kIHVybCBkb2Vzbid0IHN0YXJ0IHdpdGggc2xhc2gsIHRoZW4gYWRkIGEgc2xhc2ggaW5iZXR3ZWVuXG4gICAgaWYgKFxuICAgICAgICB0aGlzLmJhc2VVcmwubGVuZ3RoICYmXG4gICAgICAgIHRoaXMuYmFzZVVybC5sYXN0SW5kZXhPZignLycpICE9PSB0aGlzLmJhc2VVcmwubGVuZ3RoIC0gMSAmJlxuICAgICAgICB1cmwuY2hhckF0KDApICE9PSAnLydcbiAgICApIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYmFzZVVybCArICcvJyArIHVybDtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHJldHVybiB0aGlzLmJhc2VVcmwgKyB1cmw7XG4gICAgfVxufTtcblxuXG4vKipcbiAqIFNldHMgdXAgYSBtaWRkbGV3YXJlIGZ1bmN0aW9uIHRoYXQgd2lsbCBydW4gKmJlZm9yZSogdGhlXG4gKiByZXNvdXJjZSBpcyBsb2FkZWQuXG4gKlxuICogQGFsaWFzIHByZVxuICogQHBhcmFtIG1pZGRsZXdhcmUge2Z1bmN0aW9ufSBUaGUgbWlkZGxld2FyZSBmdW5jdGlvbiB0byByZWdpc3Rlci5cbiAqIEByZXR1cm4ge0xvYWRlcn1cbiAqL1xuTG9hZGVyLnByb3RvdHlwZS5iZWZvcmUgPSBMb2FkZXIucHJvdG90eXBlLnByZSA9IGZ1bmN0aW9uIChmbikge1xuICAgIHRoaXMuX2JlZm9yZU1pZGRsZXdhcmUucHVzaChmbik7XG5cbiAgICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogU2V0cyB1cCBhIG1pZGRsZXdhcmUgZnVuY3Rpb24gdGhhdCB3aWxsIHJ1biAqYWZ0ZXIqIHRoZVxuICogcmVzb3VyY2UgaXMgbG9hZGVkLlxuICpcbiAqIEBhbGlhcyB1c2VcbiAqIEBwYXJhbSBtaWRkbGV3YXJlIHtmdW5jdGlvbn0gVGhlIG1pZGRsZXdhcmUgZnVuY3Rpb24gdG8gcmVnaXN0ZXIuXG4gKiBAcmV0dXJuIHtMb2FkZXJ9XG4gKi9cbkxvYWRlci5wcm90b3R5cGUuYWZ0ZXIgPSBMb2FkZXIucHJvdG90eXBlLnVzZSA9IGZ1bmN0aW9uIChmbikge1xuICAgIHRoaXMuX2FmdGVyTWlkZGxld2FyZS5wdXNoKGZuKTtcblxuICAgIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBSZXNldHMgdGhlIHF1ZXVlIG9mIHRoZSBsb2FkZXIgdG8gcHJlcGFyZSBmb3IgYSBuZXcgbG9hZC5cbiAqXG4gKiBAcmV0dXJuIHtMb2FkZXJ9XG4gKi9cbkxvYWRlci5wcm90b3R5cGUucmVzZXQgPSBmdW5jdGlvbiAoKSB7XG4gICAgLy8gdGhpcy5iYXNlVXJsID0gYmFzZVVybCB8fCAnJztcblxuICAgIHRoaXMucHJvZ3Jlc3MgPSAwO1xuXG4gICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XG5cbiAgICB0aGlzLl9wcm9ncmVzc0NodW5rID0gMDtcblxuICAgIC8vIHRoaXMuX2JlZm9yZU1pZGRsZXdhcmUubGVuZ3RoID0gMDtcbiAgICAvLyB0aGlzLl9hZnRlck1pZGRsZXdhcmUubGVuZ3RoID0gMDtcblxuICAgIHRoaXMuX2J1ZmZlci5sZW5ndGggPSAwO1xuXG4gICAgdGhpcy5fbnVtVG9Mb2FkID0gMDtcblxuICAgIHRoaXMuX3F1ZXVlLmtpbGwoKTtcbiAgICB0aGlzLl9xdWV1ZS5zdGFydGVkID0gZmFsc2U7XG5cbiAgICB0aGlzLnJlc291cmNlcyA9IHt9O1xufTtcblxuLyoqXG4gKiBTdGFydHMgbG9hZGluZyB0aGUgcXVldWVkIHJlc291cmNlcy5cbiAqXG4gKiBAZmlyZXMgc3RhcnRcbiAqIEBwYXJhbSBbY2FsbGJhY2tdIHtmdW5jdGlvbn0gT3B0aW9uYWwgY2FsbGJhY2sgdGhhdCB3aWxsIGJlIGJvdW5kIHRvIHRoZSBgY29tcGxldGVgIGV2ZW50LlxuICogQHJldHVybiB7TG9hZGVyfVxuICovXG5Mb2FkZXIucHJvdG90eXBlLmxvYWQgPSBmdW5jdGlvbiAoY2IpIHtcbiAgICAvLyByZWdpc3RlciBjb21wbGV0ZSBjYWxsYmFjayBpZiB0aGV5IHBhc3Mgb25lXG4gICAgaWYgKHR5cGVvZiBjYiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB0aGlzLm9uY2UoJ2NvbXBsZXRlJywgY2IpO1xuICAgIH1cblxuICAgIC8vIGlmIHRoZSBxdWV1ZSBoYXMgYWxyZWFkeSBzdGFydGVkIHdlIGFyZSBkb25lIGhlcmVcbiAgICBpZiAodGhpcy5fcXVldWUuc3RhcnRlZCkge1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICAvLyBub3RpZnkgb2Ygc3RhcnRcbiAgICB0aGlzLmVtaXQoJ3N0YXJ0JywgdGhpcyk7XG5cbiAgICAvLyBzdGFydCB0aGUgaW50ZXJuYWwgcXVldWVcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuX2J1ZmZlci5sZW5ndGg7ICsraSkge1xuICAgICAgICB0aGlzLl9xdWV1ZS5wdXNoKHRoaXMuX2J1ZmZlcltpXSk7XG4gICAgfVxuXG4gICAgLy8gZW1wdHkgdGhlIGJ1ZmZlclxuICAgIHRoaXMuX2J1ZmZlci5sZW5ndGggPSAwO1xuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIExvYWRzIGEgc2luZ2xlIHJlc291cmNlLlxuICpcbiAqIEBmaXJlcyBwcm9ncmVzc1xuICogQHByaXZhdGVcbiAqL1xuTG9hZGVyLnByb3RvdHlwZS5fbG9hZFJlc291cmNlID0gZnVuY3Rpb24gKHJlc291cmNlLCBkZXF1ZXVlKSB7XG4gICAgdmFyIHNlbGYgPSB0aGlzO1xuXG4gICAgcmVzb3VyY2UuX2RlcXVldWUgPSBkZXF1ZXVlO1xuXG4gICAgdGhpcy5fcnVuTWlkZGxld2FyZShyZXNvdXJjZSwgdGhpcy5fYmVmb3JlTWlkZGxld2FyZSwgZnVuY3Rpb24gKCkge1xuICAgICAgICAvLyByZXNvdXJjZS5vbigncHJvZ3Jlc3MnLCBzZWxmLmVtaXQuYmluZChzZWxmLCAncHJvZ3Jlc3MnKSk7XG5cbiAgICAgICAgcmVzb3VyY2UubG9hZChzZWxmLl9ib3VuZE9uTG9hZCk7XG4gICAgfSk7XG59O1xuXG4vKipcbiAqIENhbGxlZCBvbmNlIGVhY2ggcmVzb3VyY2UgaGFzIGxvYWRlZC5cbiAqXG4gKiBAZmlyZXMgY29tcGxldGVcbiAqIEBwcml2YXRlXG4gKi9cbkxvYWRlci5wcm90b3R5cGUuX29uQ29tcGxldGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgdGhpcy5lbWl0KCdjb21wbGV0ZScsIHRoaXMsIHRoaXMucmVzb3VyY2VzKTtcbn07XG5cbi8qKlxuICogQ2FsbGVkIGVhY2ggdGltZSBhIHJlc291cmNlcyBpcyBsb2FkZWQuXG4gKlxuICogQGZpcmVzIHByb2dyZXNzXG4gKiBAZmlyZXMgZXJyb3JcbiAqIEBmaXJlcyBsb2FkXG4gKiBAcHJpdmF0ZVxuICovXG5Mb2FkZXIucHJvdG90eXBlLl9vbkxvYWQgPSBmdW5jdGlvbiAocmVzb3VyY2UpIHtcbiAgICB0aGlzLnByb2dyZXNzICs9IHRoaXMuX3Byb2dyZXNzQ2h1bms7XG5cbiAgICB0aGlzLmVtaXQoJ3Byb2dyZXNzJywgdGhpcywgcmVzb3VyY2UpO1xuXG4gICAgLy8gcnVuIG1pZGRsZXdhcmUsIHRoaXMgKm11c3QqIGhhcHBlbiBiZWZvcmUgZGVxdWV1ZSBzbyBzdWItYXNzZXRzIGdldCBhZGRlZCBwcm9wZXJseVxuICAgIHRoaXMuX3J1bk1pZGRsZXdhcmUocmVzb3VyY2UsIHRoaXMuX2FmdGVyTWlkZGxld2FyZSwgZnVuY3Rpb24gKCkge1xuICAgICAgICByZXNvdXJjZS5lbWl0KCdhZnRlck1pZGRsZXdhcmUnLCByZXNvdXJjZSk7XG5cbiAgICAgICAgdGhpcy5fbnVtVG9Mb2FkLS07XG5cbiAgICAgICAgLy8gZG8gY29tcGxldGlvbiBjaGVja1xuICAgICAgICBpZiAodGhpcy5fbnVtVG9Mb2FkID09PSAwKSB7XG4gICAgICAgICAgICB0aGlzLnByb2dyZXNzID0gMTAwO1xuICAgICAgICAgICAgdGhpcy5fb25Db21wbGV0ZSgpO1xuICAgICAgICB9XG4gICAgICAgIFxuICAgICAgICBpZiAocmVzb3VyY2UuZXJyb3IpIHtcbiAgICAgICAgICAgIHRoaXMuZW1pdCgnZXJyb3InLCByZXNvdXJjZS5lcnJvciwgdGhpcywgcmVzb3VyY2UpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5lbWl0KCdsb2FkJywgdGhpcywgcmVzb3VyY2UpO1xuICAgICAgICB9XG4gICAgfSk7XG4gICAgXG5cblxuICAgIC8vIHJlbW92ZSB0aGlzIHJlc291cmNlIGZyb20gdGhlIGFzeW5jIHF1ZXVlXG4gICAgcmVzb3VyY2UuX2RlcXVldWUoKTtcbn07XG5cbi8qKlxuICogUnVuIG1pZGRsZXdhcmUgZnVuY3Rpb25zIG9uIGEgcmVzb3VyY2UuXG4gKlxuICogQHByaXZhdGVcbiAqL1xuTG9hZGVyLnByb3RvdHlwZS5fcnVuTWlkZGxld2FyZSA9IGZ1bmN0aW9uIChyZXNvdXJjZSwgZm5zLCBjYikge1xuICAgIHZhciBzZWxmID0gdGhpcztcblxuICAgIGFzeW5jLmVhY2hTZXJpZXMoZm5zLCBmdW5jdGlvbiAoZm4sIG5leHQpIHtcbiAgICAgICAgZm4uY2FsbChzZWxmLCByZXNvdXJjZSwgbmV4dCk7XG4gICAgfSwgY2IuYmluZCh0aGlzLCByZXNvdXJjZSkpO1xufTtcblxuTG9hZGVyLkxPQURfVFlQRSA9IFJlc291cmNlLkxPQURfVFlQRTtcbkxvYWRlci5YSFJfUkVBRFlfU1RBVEUgPSBSZXNvdXJjZS5YSFJfUkVBRFlfU1RBVEU7XG5Mb2FkZXIuWEhSX1JFU1BPTlNFX1RZUEUgPSBSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRTtcbiIsInZhciBFdmVudEVtaXR0ZXIgPSByZXF1aXJlKCdldmVudGVtaXR0ZXIzJyksXG4gICAgX3VybCA9IHJlcXVpcmUoJ3VybCcpLFxuICAgIC8vIHRlc3RzIGlzIENPUlMgaXMgc3VwcG9ydGVkIGluIFhIUiwgaWYgbm90IHdlIG5lZWQgdG8gdXNlIFhEUlxuICAgIHVzZVhkciA9ICEhKHdpbmRvdy5YRG9tYWluUmVxdWVzdCAmJiAhKCd3aXRoQ3JlZGVudGlhbHMnIGluIChuZXcgWE1MSHR0cFJlcXVlc3QoKSkpKSxcbiAgICB0ZW1wQW5jaG9yID0gbnVsbDtcblxuLyoqXG4gKiBNYW5hZ2VzIHRoZSBzdGF0ZSBhbmQgbG9hZGluZyBvZiBhIHNpbmdsZSByZXNvdXJjZSByZXByZXNlbnRlZCBieVxuICogYSBzaW5nbGUgVVJMLlxuICpcbiAqIEBjbGFzc1xuICogQHBhcmFtIG5hbWUge3N0cmluZ30gVGhlIG5hbWUgb2YgdGhlIHJlc291cmNlIHRvIGxvYWQuXG4gKiBAcGFyYW0gdXJsIHtzdHJpbmd8c3RyaW5nW119IFRoZSB1cmwgZm9yIHRoaXMgcmVzb3VyY2UsIGZvciBhdWRpby92aWRlbyBsb2FkcyB5b3UgY2FuIHBhc3MgYW4gYXJyYXkgb2Ygc291cmNlcy5cbiAqIEBwYXJhbSBbb3B0aW9uc10ge29iamVjdH0gVGhlIG9wdGlvbnMgZm9yIHRoZSBsb2FkLlxuICogQHBhcmFtIFtvcHRpb25zLmNyb3NzT3JpZ2luXSB7c3RyaW5nfGJvb2xlYW59IElzIHRoaXMgcmVxdWVzdCBjcm9zcy1vcmlnaW4/IERlZmF1bHQgaXMgdG8gZGV0ZXJtaW5lIGF1dG9tYXRpY2FsbHkuXG4gKiBAcGFyYW0gW29wdGlvbnMubG9hZFR5cGU9UmVzb3VyY2UuTE9BRF9UWVBFLlhIUl0ge1Jlc291cmNlLkxPQURfVFlQRX0gSG93IHNob3VsZCB0aGlzIHJlc291cmNlIGJlIGxvYWRlZD9cbiAqIEBwYXJhbSBbb3B0aW9ucy54aHJUeXBlPVJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkRFRkFVTFRdIHtSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRX0gSG93IHNob3VsZCB0aGUgZGF0YSBiZWluZ1xuICogICAgICBsb2FkZWQgYmUgaW50ZXJwcmV0ZWQgd2hlbiB1c2luZyBYSFI/XG4gKiBAcGFyYW0gW29wdGlvbnMubWV0YWRhdGFdIHtvYmplY3R9IEV4dHJhIGluZm8gZm9yIG1pZGRsZXdhcmUuXG4gKi9cbmZ1bmN0aW9uIFJlc291cmNlKG5hbWUsIHVybCwgb3B0aW9ucykge1xuICAgIEV2ZW50RW1pdHRlci5jYWxsKHRoaXMpO1xuXG4gICAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG5cbiAgICBpZiAodHlwZW9mIG5hbWUgIT09ICdzdHJpbmcnIHx8IHR5cGVvZiB1cmwgIT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignQm90aCBuYW1lIGFuZCB1cmwgYXJlIHJlcXVpcmVkIGZvciBjb25zdHJ1Y3RpbmcgYSByZXNvdXJjZS4nKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGUgbmFtZSBvZiB0aGlzIHJlc291cmNlLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7c3RyaW5nfVxuICAgICAqIEByZWFkb25seVxuICAgICAqL1xuICAgIHRoaXMubmFtZSA9IG5hbWU7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgdXJsIHVzZWQgdG8gbG9hZCB0aGlzIHJlc291cmNlLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7c3RyaW5nfVxuICAgICAqIEByZWFkb25seVxuICAgICAqL1xuICAgIHRoaXMudXJsID0gdXJsO1xuXG4gICAgLyoqXG4gICAgICogU3RvcmVzIHdoZXRoZXIgb3Igbm90IHRoaXMgdXJsIGlzIGEgZGF0YSB1cmwuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqIEByZWFkb25seVxuICAgICAqL1xuICAgIHRoaXMuaXNEYXRhVXJsID0gdGhpcy51cmwuaW5kZXhPZignZGF0YTonKSA9PT0gMDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBkYXRhIHRoYXQgd2FzIGxvYWRlZCBieSB0aGUgcmVzb3VyY2UuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHthbnl9XG4gICAgICovXG4gICAgdGhpcy5kYXRhID0gbnVsbDtcblxuICAgIC8qKlxuICAgICAqIElzIHRoaXMgcmVxdWVzdCBjcm9zcy1vcmlnaW4/IElmIHVuc2V0LCBkZXRlcm1pbmVkIGF1dG9tYXRpY2FsbHkuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtzdHJpbmd9XG4gICAgICovXG4gICAgdGhpcy5jcm9zc09yaWdpbiA9IG9wdGlvbnMuY3Jvc3NPcmlnaW4gPT09IHRydWUgPyAnYW5vbnltb3VzJyA6IG9wdGlvbnMuY3Jvc3NPcmlnaW47XG5cbiAgICAvKipcbiAgICAgKiBUaGUgbWV0aG9kIG9mIGxvYWRpbmcgdG8gdXNlIGZvciB0aGlzIHJlc291cmNlLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UmVzb3VyY2UuTE9BRF9UWVBFfVxuICAgICAqL1xuICAgIHRoaXMubG9hZFR5cGUgPSBvcHRpb25zLmxvYWRUeXBlIHx8IHRoaXMuX2RldGVybWluZUxvYWRUeXBlKCk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgdHlwZSB1c2VkIHRvIGxvYWQgdGhlIHJlc291cmNlIHZpYSBYSFIuIElmIHVuc2V0LCBkZXRlcm1pbmVkIGF1dG9tYXRpY2FsbHkuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtzdHJpbmd9XG4gICAgICovXG4gICAgdGhpcy54aHJUeXBlID0gb3B0aW9ucy54aHJUeXBlO1xuXG4gICAgLyoqXG4gICAgICogRXh0cmEgaW5mbyBmb3IgbWlkZGxld2FyZVxuICAgICAqXG4gICAgICogQG1lbWJlciB7b2JqZWN0fVxuICAgICAqL1xuICAgIHRoaXMubWV0YWRhdGEgPSBvcHRpb25zLm1ldGFkYXRhIHx8IHt9O1xuXG4gICAgLyoqXG4gICAgICogVGhlIGVycm9yIHRoYXQgb2NjdXJyZWQgd2hpbGUgbG9hZGluZyAoaWYgYW55KS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge0Vycm9yfVxuICAgICAqIEByZWFkb25seVxuICAgICAqL1xuICAgIHRoaXMuZXJyb3IgPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogVGhlIFhIUiBvYmplY3QgdGhhdCB3YXMgdXNlZCB0byBsb2FkIHRoaXMgcmVzb3VyY2UuIFRoaXMgaXMgb25seSBzZXRcbiAgICAgKiB3aGVuIGBsb2FkVHlwZWAgaXMgYFJlc291cmNlLkxPQURfVFlQRS5YSFJgLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7WE1MSHR0cFJlcXVlc3R9XG4gICAgICovXG4gICAgdGhpcy54aHIgPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogRGVzY3JpYmVzIGlmIHRoaXMgcmVzb3VyY2Ugd2FzIGxvYWRlZCBhcyBqc29uLiBPbmx5IHZhbGlkIGFmdGVyIHRoZSByZXNvdXJjZVxuICAgICAqIGhhcyBjb21wbGV0ZWx5IGxvYWRlZC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICovXG4gICAgdGhpcy5pc0pzb24gPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIERlc2NyaWJlcyBpZiB0aGlzIHJlc291cmNlIHdhcyBsb2FkZWQgYXMgeG1sLiBPbmx5IHZhbGlkIGFmdGVyIHRoZSByZXNvdXJjZVxuICAgICAqIGhhcyBjb21wbGV0ZWx5IGxvYWRlZC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICovXG4gICAgdGhpcy5pc1htbCA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogRGVzY3JpYmVzIGlmIHRoaXMgcmVzb3VyY2Ugd2FzIGxvYWRlZCBhcyBhbiBpbWFnZSB0YWcuIE9ubHkgdmFsaWQgYWZ0ZXIgdGhlIHJlc291cmNlXG4gICAgICogaGFzIGNvbXBsZXRlbHkgbG9hZGVkLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKi9cbiAgICB0aGlzLmlzSW1hZ2UgPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIERlc2NyaWJlcyBpZiB0aGlzIHJlc291cmNlIHdhcyBsb2FkZWQgYXMgYW4gYXVkaW8gdGFnLiBPbmx5IHZhbGlkIGFmdGVyIHRoZSByZXNvdXJjZVxuICAgICAqIGhhcyBjb21wbGV0ZWx5IGxvYWRlZC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICovXG4gICAgdGhpcy5pc0F1ZGlvID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBEZXNjcmliZXMgaWYgdGhpcyByZXNvdXJjZSB3YXMgbG9hZGVkIGFzIGEgdmlkZW8gdGFnLiBPbmx5IHZhbGlkIGFmdGVyIHRoZSByZXNvdXJjZVxuICAgICAqIGhhcyBjb21wbGV0ZWx5IGxvYWRlZC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICovXG4gICAgdGhpcy5pc1ZpZGVvID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYGRlcXVldWVgIG1ldGhvZCB0aGF0IHdpbGwgYmUgdXNlZCBhIHN0b3JhZ2UgcGxhY2UgZm9yIHRoZSBhc3luYyBxdWV1ZSBkZXF1ZXVlIG1ldGhvZFxuICAgICAqIHVzZWQgcHJpdmF0ZWx5IGJ5IHRoZSBsb2FkZXIuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtmdW5jdGlvbn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX2RlcXVldWUgPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGBjb21wbGV0ZWAgZnVuY3Rpb24gYm91bmQgdG8gdGhpcyByZXNvdXJjZSdzIGNvbnRleHQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtmdW5jdGlvbn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX2JvdW5kQ29tcGxldGUgPSB0aGlzLmNvbXBsZXRlLmJpbmQodGhpcyk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYF9vbkVycm9yYCBmdW5jdGlvbiBib3VuZCB0byB0aGlzIHJlc291cmNlJ3MgY29udGV4dC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Z1bmN0aW9ufVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fYm91bmRPbkVycm9yID0gdGhpcy5fb25FcnJvci5iaW5kKHRoaXMpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGBfb25Qcm9ncmVzc2AgZnVuY3Rpb24gYm91bmQgdG8gdGhpcyByZXNvdXJjZSdzIGNvbnRleHQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtmdW5jdGlvbn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX2JvdW5kT25Qcm9ncmVzcyA9IHRoaXMuX29uUHJvZ3Jlc3MuYmluZCh0aGlzKTtcblxuICAgIC8vIHhociBjYWxsYmFja3NcbiAgICB0aGlzLl9ib3VuZFhock9uRXJyb3IgPSB0aGlzLl94aHJPbkVycm9yLmJpbmQodGhpcyk7XG4gICAgdGhpcy5fYm91bmRYaHJPbkFib3J0ID0gdGhpcy5feGhyT25BYm9ydC5iaW5kKHRoaXMpO1xuICAgIHRoaXMuX2JvdW5kWGhyT25Mb2FkID0gdGhpcy5feGhyT25Mb2FkLmJpbmQodGhpcyk7XG4gICAgdGhpcy5fYm91bmRYZHJPblRpbWVvdXQgPSB0aGlzLl94ZHJPblRpbWVvdXQuYmluZCh0aGlzKTtcblxuICAgIC8qKlxuICAgICAqIEVtaXR0ZWQgd2hlbiB0aGUgcmVzb3VyY2UgYmVpbmdzIHRvIGxvYWQuXG4gICAgICpcbiAgICAgKiBAZXZlbnQgc3RhcnRcbiAgICAgKiBAbWVtYmVyb2YgUmVzb3VyY2UjXG4gICAgICovXG5cbiAgICAvKipcbiAgICAgKiBFbWl0dGVkIGVhY2ggdGltZSBwcm9ncmVzcyBvZiB0aGlzIHJlc291cmNlIGxvYWQgdXBkYXRlcy5cbiAgICAgKiBOb3QgYWxsIHJlc291cmNlcyB0eXBlcyBhbmQgbG9hZGVyIHN5c3RlbXMgY2FuIHN1cHBvcnQgdGhpcyBldmVudFxuICAgICAqIHNvIHNvbWV0aW1lcyBpdCBtYXkgbm90IGJlIGF2YWlsYWJsZS4gSWYgdGhlIHJlc291cmNlXG4gICAgICogaXMgYmVpbmcgbG9hZGVkIG9uIGEgbW9kZXJuIGJyb3dzZXIsIHVzaW5nIFhIUiwgYW5kIHRoZSByZW1vdGUgc2VydmVyXG4gICAgICogcHJvcGVybHkgc2V0cyBDb250ZW50LUxlbmd0aCBoZWFkZXJzLCB0aGVuIHRoaXMgd2lsbCBiZSBhdmFpbGFibGUuXG4gICAgICpcbiAgICAgKiBAZXZlbnQgcHJvZ3Jlc3NcbiAgICAgKiBAbWVtYmVyb2YgUmVzb3VyY2UjXG4gICAgICovXG5cbiAgICAvKipcbiAgICAgKiBFbWl0dGVkIG9uY2UgdGhpcyByZXNvdXJjZSBoYXMgbG9hZGVkLCBpZiB0aGVyZSB3YXMgYW4gZXJyb3IgaXQgd2lsbFxuICAgICAqIGJlIGluIHRoZSBgZXJyb3JgIHByb3BlcnR5LlxuICAgICAqXG4gICAgICogQGV2ZW50IGNvbXBsZXRlXG4gICAgICogQG1lbWJlcm9mIFJlc291cmNlI1xuICAgICAqL1xufVxuXG5SZXNvdXJjZS5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKEV2ZW50RW1pdHRlci5wcm90b3R5cGUpO1xuUmVzb3VyY2UucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gUmVzb3VyY2U7XG5tb2R1bGUuZXhwb3J0cyA9IFJlc291cmNlO1xuXG4vKipcbiAqIE1hcmtzIHRoZSByZXNvdXJjZSBhcyBjb21wbGV0ZS5cbiAqXG4gKiBAZmlyZXMgY29tcGxldGVcbiAqL1xuUmVzb3VyY2UucHJvdG90eXBlLmNvbXBsZXRlID0gZnVuY3Rpb24gKCkge1xuICAgIC8vIFRPRE86IENsZWFuIHRoaXMgdXAgaW4gYSB3cmFwcGVyIG9yIHNvbWV0aGluZy4uLmdyb3NzLi4uLlxuICAgIGlmICh0aGlzLmRhdGEgJiYgdGhpcy5kYXRhLnJlbW92ZUV2ZW50TGlzdGVuZXIpIHtcbiAgICAgICAgdGhpcy5kYXRhLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2Vycm9yJywgdGhpcy5fYm91bmRPbkVycm9yKTtcbiAgICAgICAgdGhpcy5kYXRhLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2xvYWQnLCB0aGlzLl9ib3VuZENvbXBsZXRlKTtcbiAgICAgICAgdGhpcy5kYXRhLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3Byb2dyZXNzJywgdGhpcy5fYm91bmRPblByb2dyZXNzKTtcbiAgICAgICAgdGhpcy5kYXRhLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2NhbnBsYXl0aHJvdWdoJywgdGhpcy5fYm91bmRDb21wbGV0ZSk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMueGhyKSB7XG4gICAgICAgIGlmICh0aGlzLnhoci5yZW1vdmVFdmVudExpc3RlbmVyKSB7XG4gICAgICAgICAgICB0aGlzLnhoci5yZW1vdmVFdmVudExpc3RlbmVyKCdlcnJvcicsIHRoaXMuX2JvdW5kWGhyT25FcnJvcik7XG4gICAgICAgICAgICB0aGlzLnhoci5yZW1vdmVFdmVudExpc3RlbmVyKCdhYm9ydCcsIHRoaXMuX2JvdW5kWGhyT25BYm9ydCk7XG4gICAgICAgICAgICB0aGlzLnhoci5yZW1vdmVFdmVudExpc3RlbmVyKCdwcm9ncmVzcycsIHRoaXMuX2JvdW5kT25Qcm9ncmVzcyk7XG4gICAgICAgICAgICB0aGlzLnhoci5yZW1vdmVFdmVudExpc3RlbmVyKCdsb2FkJywgdGhpcy5fYm91bmRYaHJPbkxvYWQpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy54aHIub25lcnJvciA9IG51bGw7XG4gICAgICAgICAgICB0aGlzLnhoci5vbnRpbWVvdXQgPSBudWxsO1xuICAgICAgICAgICAgdGhpcy54aHIub25wcm9ncmVzcyA9IG51bGw7XG4gICAgICAgICAgICB0aGlzLnhoci5vbmxvYWQgPSBudWxsO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5lbWl0KCdjb21wbGV0ZScsIHRoaXMpO1xufTtcblxuLyoqXG4gKiBLaWNrcyBvZmYgbG9hZGluZyBvZiB0aGlzIHJlc291cmNlLlxuICpcbiAqIEBmaXJlcyBzdGFydFxuICogQHBhcmFtIFtjYWxsYmFja10ge2Z1bmN0aW9ufSBPcHRpb25hbCBjYWxsYmFjayB0byBjYWxsIG9uY2UgdGhlIHJlc291cmNlIGlzIGxvYWRlZC5cbiAqL1xuUmVzb3VyY2UucHJvdG90eXBlLmxvYWQgPSBmdW5jdGlvbiAoY2IpIHtcbiAgICB0aGlzLmVtaXQoJ3N0YXJ0JywgdGhpcyk7XG5cbiAgICAvLyBpZiBhIGNhbGxiYWNrIGlzIHNldCwgbGlzdGVuIGZvciBjb21wbGV0ZSBldmVudFxuICAgIGlmIChjYikge1xuICAgICAgICB0aGlzLm9uY2UoJ2NvbXBsZXRlJywgY2IpO1xuICAgIH1cblxuICAgIC8vIGlmIHVuc2V0LCBkZXRlcm1pbmUgdGhlIHZhbHVlXG4gICAgaWYgKHRoaXMuY3Jvc3NPcmlnaW4gPT09IGZhbHNlIHx8IHR5cGVvZiB0aGlzLmNyb3NzT3JpZ2luICE9PSAnc3RyaW5nJykge1xuICAgICAgICB0aGlzLmNyb3NzT3JpZ2luID0gdGhpcy5fZGV0ZXJtaW5lQ3Jvc3NPcmlnaW4odGhpcy51cmwpO1xuICAgIH1cblxuICAgIHN3aXRjaCh0aGlzLmxvYWRUeXBlKSB7XG4gICAgICAgIGNhc2UgUmVzb3VyY2UuTE9BRF9UWVBFLklNQUdFOlxuICAgICAgICAgICAgdGhpcy5fbG9hZEltYWdlKCk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIFJlc291cmNlLkxPQURfVFlQRS5BVURJTzpcbiAgICAgICAgICAgIHRoaXMuX2xvYWRFbGVtZW50KCdhdWRpbycpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSBSZXNvdXJjZS5MT0FEX1RZUEUuVklERU86XG4gICAgICAgICAgICB0aGlzLl9sb2FkRWxlbWVudCgndmlkZW8nKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgUmVzb3VyY2UuTE9BRF9UWVBFLlhIUjpcbiAgICAgICAgICAgIC8qIGZhbGxzIHRocm91Z2ggKi9cbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIGlmICh1c2VYZHIgJiYgdGhpcy5jcm9zc09yaWdpbikge1xuICAgICAgICAgICAgICAgIHRoaXMuX2xvYWRYZHIoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuX2xvYWRYaHIoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGJyZWFrO1xuICAgIH1cbn07XG5cbi8qKlxuICogTG9hZHMgdGhpcyByZXNvdXJjZXMgdXNpbmcgYW4gSW1hZ2Ugb2JqZWN0LlxuICpcbiAqIEBwcml2YXRlXG4gKi9cblJlc291cmNlLnByb3RvdHlwZS5fbG9hZEltYWdlID0gZnVuY3Rpb24gKCkge1xuICAgIHRoaXMuZGF0YSA9IG5ldyBJbWFnZSgpO1xuXG4gICAgaWYgKHRoaXMuY3Jvc3NPcmlnaW4pIHtcbiAgICAgICAgdGhpcy5kYXRhLmNyb3NzT3JpZ2luID0gdGhpcy5jcm9zc09yaWdpbjtcbiAgICB9XG5cbiAgICB0aGlzLmRhdGEuc3JjID0gdGhpcy51cmw7XG5cbiAgICB0aGlzLmlzSW1hZ2UgPSB0cnVlO1xuXG4gICAgdGhpcy5kYXRhLmFkZEV2ZW50TGlzdGVuZXIoJ2Vycm9yJywgdGhpcy5fYm91bmRPbkVycm9yLCBmYWxzZSk7XG4gICAgdGhpcy5kYXRhLmFkZEV2ZW50TGlzdGVuZXIoJ2xvYWQnLCB0aGlzLl9ib3VuZENvbXBsZXRlLCBmYWxzZSk7XG4gICAgdGhpcy5kYXRhLmFkZEV2ZW50TGlzdGVuZXIoJ3Byb2dyZXNzJywgdGhpcy5fYm91bmRPblByb2dyZXNzLCBmYWxzZSk7XG59O1xuXG4vKipcbiAqIExvYWRzIHRoaXMgcmVzb3VyY2VzIHVzaW5nIGFuIEhUTUxBdWRpb0VsZW1lbnQgb3IgSFRNTFZpZGVvRWxlbWVudC5cbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5SZXNvdXJjZS5wcm90b3R5cGUuX2xvYWRFbGVtZW50ID0gZnVuY3Rpb24gKHR5cGUpIHtcbiAgICBpZiAodHlwZSA9PT0gJ2F1ZGlvJyAmJiB0eXBlb2YgQXVkaW8gIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIHRoaXMuZGF0YSA9IG5ldyBBdWRpbygpO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgdGhpcy5kYXRhID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCh0eXBlKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5kYXRhID09PSBudWxsKSB7XG4gICAgICAgIHRoaXMuZXJyb3IgPSBuZXcgRXJyb3IoJ1Vuc3VwcG9ydGVkIGVsZW1lbnQgJyArIHR5cGUpO1xuICAgICAgICB0aGlzLmNvbXBsZXRlKCk7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBzdXBwb3J0IGZvciBDb2Nvb25KUyBDYW52YXMrIHJ1bnRpbWUsIGxhY2tzIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NvdXJjZScpXG4gICAgaWYgKG5hdmlnYXRvci5pc0NvY29vbkpTKSB7XG4gICAgICAgIHRoaXMuZGF0YS5zcmMgPSBBcnJheS5pc0FycmF5KHRoaXMudXJsKSA/IHRoaXMudXJsWzBdIDogdGhpcy51cmw7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSh0aGlzLnVybCkpIHtcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy51cmwubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmRhdGEuYXBwZW5kQ2hpbGQodGhpcy5fY3JlYXRlU291cmNlKHR5cGUsIHRoaXMudXJsW2ldKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmRhdGEuYXBwZW5kQ2hpbGQodGhpcy5fY3JlYXRlU291cmNlKHR5cGUsIHRoaXMudXJsKSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzWydpcycgKyB0eXBlWzBdLnRvVXBwZXJDYXNlKCkgKyB0eXBlLnN1YnN0cmluZygxKV0gPSB0cnVlO1xuXG4gICAgdGhpcy5kYXRhLmFkZEV2ZW50TGlzdGVuZXIoJ2Vycm9yJywgdGhpcy5fYm91bmRPbkVycm9yLCBmYWxzZSk7XG4gICAgdGhpcy5kYXRhLmFkZEV2ZW50TGlzdGVuZXIoJ2xvYWQnLCB0aGlzLl9ib3VuZENvbXBsZXRlLCBmYWxzZSk7XG4gICAgdGhpcy5kYXRhLmFkZEV2ZW50TGlzdGVuZXIoJ3Byb2dyZXNzJywgdGhpcy5fYm91bmRPblByb2dyZXNzLCBmYWxzZSk7XG4gICAgdGhpcy5kYXRhLmFkZEV2ZW50TGlzdGVuZXIoJ2NhbnBsYXl0aHJvdWdoJywgdGhpcy5fYm91bmRDb21wbGV0ZSwgZmFsc2UpO1xuXG4gICAgdGhpcy5kYXRhLmxvYWQoKTtcbn07XG5cbi8qKlxuICogTG9hZHMgdGhpcyByZXNvdXJjZXMgdXNpbmcgYW4gWE1MSHR0cFJlcXVlc3QuXG4gKlxuICogQHByaXZhdGVcbiAqL1xuUmVzb3VyY2UucHJvdG90eXBlLl9sb2FkWGhyID0gZnVuY3Rpb24gKCkge1xuICAgIC8vIGlmIHVuc2V0LCBkZXRlcm1pbmUgdGhlIHZhbHVlXG4gICAgaWYgKHR5cGVvZiB0aGlzLnhoclR5cGUgIT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHRoaXMueGhyVHlwZSA9IHRoaXMuX2RldGVybWluZVhoclR5cGUoKTtcbiAgICB9XG5cbiAgICB2YXIgeGhyID0gdGhpcy54aHIgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTtcblxuICAgIC8vIHNldCB0aGUgcmVxdWVzdCB0eXBlIGFuZCB1cmxcbiAgICB4aHIub3BlbignR0VUJywgdGhpcy51cmwsIHRydWUpO1xuXG4gICAgLy8gbG9hZCBqc29uIGFzIHRleHQgYW5kIHBhcnNlIGl0IG91cnNlbHZlcy4gV2UgZG8gdGhpcyBiZWNhdXNlIHNvbWUgYnJvd3NlcnNcbiAgICAvLyAqY291Z2gqIHNhZmFyaSAqY291Z2gqIGNhbid0IGRlYWwgd2l0aCBpdC5cbiAgICBpZiAodGhpcy54aHJUeXBlID09PSBSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRS5KU09OIHx8IHRoaXMueGhyVHlwZSA9PT0gUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuRE9DVU1FTlQpIHtcbiAgICAgICAgeGhyLnJlc3BvbnNlVHlwZSA9IFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLlRFWFQ7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICB4aHIucmVzcG9uc2VUeXBlID0gdGhpcy54aHJUeXBlO1xuICAgIH1cblxuICAgIHhoci5hZGRFdmVudExpc3RlbmVyKCdlcnJvcicsIHRoaXMuX2JvdW5kWGhyT25FcnJvciwgZmFsc2UpO1xuICAgIHhoci5hZGRFdmVudExpc3RlbmVyKCdhYm9ydCcsIHRoaXMuX2JvdW5kWGhyT25BYm9ydCwgZmFsc2UpO1xuICAgIHhoci5hZGRFdmVudExpc3RlbmVyKCdwcm9ncmVzcycsIHRoaXMuX2JvdW5kT25Qcm9ncmVzcywgZmFsc2UpO1xuICAgIHhoci5hZGRFdmVudExpc3RlbmVyKCdsb2FkJywgdGhpcy5fYm91bmRYaHJPbkxvYWQsIGZhbHNlKTtcblxuICAgIHhoci5zZW5kKCk7XG59O1xuXG4vKipcbiAqIExvYWRzIHRoaXMgcmVzb3VyY2VzIHVzaW5nIGFuIFhEb21haW5SZXF1ZXN0LiBUaGlzIGlzIGhlcmUgYmVjYXVzZSB3ZSBuZWVkIHRvIHN1cHBvcnQgSUU5IChncm9zcykuXG4gKlxuICogQHByaXZhdGVcbiAqL1xuUmVzb3VyY2UucHJvdG90eXBlLl9sb2FkWGRyID0gZnVuY3Rpb24gKCkge1xuICAgIC8vIGlmIHVuc2V0LCBkZXRlcm1pbmUgdGhlIHZhbHVlXG4gICAgaWYgKHR5cGVvZiB0aGlzLnhoclR5cGUgIT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHRoaXMueGhyVHlwZSA9IHRoaXMuX2RldGVybWluZVhoclR5cGUoKTtcbiAgICB9XG5cbiAgICB2YXIgeGRyID0gdGhpcy54aHIgPSBuZXcgWERvbWFpblJlcXVlc3QoKTtcblxuICAgIC8vIFhEb21haW5SZXF1ZXN0IGhhcyBhIGZldyBxdWlya3MuIE9jY2FzaW9uYWxseSBpdCB3aWxsIGFib3J0IHJlcXVlc3RzXG4gICAgLy8gQSB3YXkgdG8gYXZvaWQgdGhpcyBpcyB0byBtYWtlIHN1cmUgQUxMIGNhbGxiYWNrcyBhcmUgc2V0IGV2ZW4gaWYgbm90IHVzZWRcbiAgICAvLyBNb3JlIGluZm8gaGVyZTogaHR0cDovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy8xNTc4Njk2Ni94ZG9tYWlucmVxdWVzdC1hYm9ydHMtcG9zdC1vbi1pZS05XG4gICAgeGRyLnRpbWVvdXQgPSA1MDAwO1xuXG4gICAgeGRyLm9uZXJyb3IgPSB0aGlzLl9ib3VuZFhock9uRXJyb3I7XG4gICAgeGRyLm9udGltZW91dCA9IHRoaXMuX2JvdW5kWGRyT25UaW1lb3V0O1xuICAgIHhkci5vbnByb2dyZXNzID0gdGhpcy5fYm91bmRPblByb2dyZXNzO1xuICAgIHhkci5vbmxvYWQgPSB0aGlzLl9ib3VuZFhock9uTG9hZDtcblxuICAgIHhkci5vcGVuKCdHRVQnLCB0aGlzLnVybCwgdHJ1ZSk7XG5cbiAgICAvLyAgTm90ZTogVGhlIHhkci5zZW5kKCkgY2FsbCBpcyB3cmFwcGVkIGluIGEgdGltZW91dCB0byBwcmV2ZW50IGFuIGlzc3VlIHdpdGggdGhlIGludGVyZmFjZSB3aGVyZSBzb21lIHJlcXVlc3RzIGFyZSBsb3N0XG4gICAgLy8gIGlmIG11bHRpcGxlIFhEb21haW5SZXF1ZXN0cyBhcmUgYmVpbmcgc2VudCBhdCB0aGUgc2FtZSB0aW1lLlxuICAgIC8vIFNvbWUgaW5mbyBoZXJlOiBodHRwczovL2dpdGh1Yi5jb20vcGhvdG9uc3Rvcm0vcGhhc2VyL2lzc3Vlcy8xMjQ4XG4gICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICAgIHhkci5zZW5kKCk7XG4gICAgfSwgMCk7XG59O1xuXG4vKipcbiAqIENyZWF0ZXMgYSBzb3VyY2UgdXNlZCBpbiBsb2FkaW5nIHZpYSBhbiBlbGVtZW50LlxuICpcbiAqIEBwYXJhbSB0eXBlIHtzdHJpbmd9IFRoZSBlbGVtZW50IHR5cGUgKHZpZGVvIG9yIGF1ZGlvKS5cbiAqIEBwYXJhbSB1cmwge3N0cmluZ30gVGhlIHNvdXJjZSBVUkwgdG8gbG9hZCBmcm9tLlxuICogQHBhcmFtIFttaW1lXSB7c3RyaW5nfSBUaGUgbWltZSB0eXBlIG9mIHRoZSB2aWRlb1xuICogQHByaXZhdGVcbiAqL1xuUmVzb3VyY2UucHJvdG90eXBlLl9jcmVhdGVTb3VyY2UgPSBmdW5jdGlvbiAodHlwZSwgdXJsLCBtaW1lKSB7XG4gICAgaWYgKCFtaW1lKSB7XG4gICAgICAgIG1pbWUgPSB0eXBlICsgJy8nICsgdXJsLnN1YnN0cih1cmwubGFzdEluZGV4T2YoJy4nKSArIDEpO1xuICAgIH1cblxuICAgIHZhciBzb3VyY2UgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzb3VyY2UnKTtcblxuICAgIHNvdXJjZS5zcmMgPSB1cmw7XG4gICAgc291cmNlLnR5cGUgPSBtaW1lO1xuXG4gICAgcmV0dXJuIHNvdXJjZTtcbn07XG5cbi8qKlxuICogQ2FsbGVkIGlmIGEgbG9hZCBlcnJvcnMgb3V0LlxuICpcbiAqIEBwYXJhbSBldmVudCB7RXZlbnR9IFRoZSBlcnJvciBldmVudCBmcm9tIHRoZSBlbGVtZW50IHRoYXQgZW1pdHMgaXQuXG4gKiBAcHJpdmF0ZVxuICovXG5SZXNvdXJjZS5wcm90b3R5cGUuX29uRXJyb3IgPSBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICB0aGlzLmVycm9yID0gbmV3IEVycm9yKCdGYWlsZWQgdG8gbG9hZCBlbGVtZW50IHVzaW5nICcgKyBldmVudC50YXJnZXQubm9kZU5hbWUpO1xuICAgIHRoaXMuY29tcGxldGUoKTtcbn07XG5cbi8qKlxuICogQ2FsbGVkIGlmIGEgbG9hZCBwcm9ncmVzcyBldmVudCBmaXJlcyBmb3IgeGhyL3hkci5cbiAqXG4gKiBAZmlyZXMgcHJvZ3Jlc3NcbiAqIEBwYXJhbSBldmVudCB7WE1MSHR0cFJlcXVlc3RQcm9ncmVzc0V2ZW50fEV2ZW50fVxuICogQHByaXZhdGVcbiAqL1xuUmVzb3VyY2UucHJvdG90eXBlLl9vblByb2dyZXNzID0gIGZ1bmN0aW9uIChldmVudCkge1xuICAgIGlmIChldmVudCAmJiBldmVudC5sZW5ndGhDb21wdXRhYmxlKSB7XG4gICAgICAgIHRoaXMuZW1pdCgncHJvZ3Jlc3MnLCB0aGlzLCBldmVudC5sb2FkZWQgLyBldmVudC50b3RhbCk7XG4gICAgfVxufTtcblxuLyoqXG4gKiBDYWxsZWQgaWYgYW4gZXJyb3IgZXZlbnQgZmlyZXMgZm9yIHhoci94ZHIuXG4gKlxuICogQHBhcmFtIGV2ZW50IHtYTUxIdHRwUmVxdWVzdEVycm9yRXZlbnR8RXZlbnR9XG4gKiBAcHJpdmF0ZVxuICovXG5SZXNvdXJjZS5wcm90b3R5cGUuX3hock9uRXJyb3IgPSBmdW5jdGlvbiAoKSB7XG4gICAgdGhpcy5lcnJvciA9IG5ldyBFcnJvcihcbiAgICAgICAgcmVxVHlwZSh0aGlzLnhocikgKyAnIFJlcXVlc3QgZmFpbGVkLiAnICtcbiAgICAgICAgJ1N0YXR1czogJyArIHRoaXMueGhyLnN0YXR1cyArICcsIHRleHQ6IFwiJyArIHRoaXMueGhyLnN0YXR1c1RleHQgKyAnXCInXG4gICAgKTtcblxuICAgIHRoaXMuY29tcGxldGUoKTtcbn07XG5cbi8qKlxuICogQ2FsbGVkIGlmIGFuIGFib3J0IGV2ZW50IGZpcmVzIGZvciB4aHIuXG4gKlxuICogQHBhcmFtIGV2ZW50IHtYTUxIdHRwUmVxdWVzdEFib3J0RXZlbnR9XG4gKiBAcHJpdmF0ZVxuICovXG5SZXNvdXJjZS5wcm90b3R5cGUuX3hock9uQWJvcnQgPSBmdW5jdGlvbiAoKSB7XG4gICAgdGhpcy5lcnJvciA9IG5ldyBFcnJvcihyZXFUeXBlKHRoaXMueGhyKSArICcgUmVxdWVzdCB3YXMgYWJvcnRlZCBieSB0aGUgdXNlci4nKTtcbiAgICB0aGlzLmNvbXBsZXRlKCk7XG59O1xuXG4vKipcbiAqIENhbGxlZCBpZiBhIHRpbWVvdXQgZXZlbnQgZmlyZXMgZm9yIHhkci5cbiAqXG4gKiBAcGFyYW0gZXZlbnQge0V2ZW50fVxuICogQHByaXZhdGVcbiAqL1xuUmVzb3VyY2UucHJvdG90eXBlLl94ZHJPblRpbWVvdXQgPSBmdW5jdGlvbiAoKSB7XG4gICAgdGhpcy5lcnJvciA9IG5ldyBFcnJvcihyZXFUeXBlKHRoaXMueGhyKSArICcgUmVxdWVzdCB0aW1lZCBvdXQuJyk7XG4gICAgdGhpcy5jb21wbGV0ZSgpO1xufTtcblxuLyoqXG4gKiBDYWxsZWQgd2hlbiBkYXRhIHN1Y2Nlc3NmdWxseSBsb2FkcyBmcm9tIGFuIHhoci94ZHIgcmVxdWVzdC5cbiAqXG4gKiBAcGFyYW0gZXZlbnQge1hNTEh0dHBSZXF1ZXN0TG9hZEV2ZW50fEV2ZW50fVxuICogQHByaXZhdGVcbiAqL1xuUmVzb3VyY2UucHJvdG90eXBlLl94aHJPbkxvYWQgPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHhociA9IHRoaXMueGhyLFxuICAgICAgICBzdGF0dXMgPSB4aHIuc3RhdHVzICE9PSB1bmRlZmluZWQgPyB4aHIuc3RhdHVzIDogMjAwOyAvL1hEUiBoYXMgbm8gYC5zdGF0dXNgLCBhc3N1bWUgMjAwLlxuXG4gICAgLy8gc3RhdHVzIGNhbiBiZSAwIHdoZW4gdXNpbmcgdGhlIGZpbGU6Ly8gcHJvdG9jb2wsIGFsc28gY2hlY2sgaWYgYSByZXNwb25zZSB3YXMgZm91bmRcbiAgICBpZiAoc3RhdHVzID09PSAyMDAgfHwgc3RhdHVzID09PSAyMDQgfHwgKHN0YXR1cyA9PT0gMCAmJiB4aHIucmVzcG9uc2VUZXh0Lmxlbmd0aCA+IDApKSB7XG4gICAgICAgIC8vIGlmIHRleHQsIGp1c3QgcmV0dXJuIGl0XG4gICAgICAgIGlmICh0aGlzLnhoclR5cGUgPT09IFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLlRFWFQpIHtcbiAgICAgICAgICAgIHRoaXMuZGF0YSA9IHhoci5yZXNwb25zZVRleHQ7XG4gICAgICAgIH1cbiAgICAgICAgLy8gaWYganNvbiwgcGFyc2UgaW50byBqc29uIG9iamVjdFxuICAgICAgICBlbHNlIGlmICh0aGlzLnhoclR5cGUgPT09IFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkpTT04pIHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgdGhpcy5kYXRhID0gSlNPTi5wYXJzZSh4aHIucmVzcG9uc2VUZXh0KTtcbiAgICAgICAgICAgICAgICB0aGlzLmlzSnNvbiA9IHRydWU7XG4gICAgICAgICAgICB9IGNhdGNoKGUpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmVycm9yID0gbmV3IEVycm9yKCdFcnJvciB0cnlpbmcgdG8gcGFyc2UgbG9hZGVkIGpzb246JywgZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8gaWYgeG1sLCBwYXJzZSBpbnRvIGFuIHhtbCBkb2N1bWVudCBvciBkaXYgZWxlbWVudFxuICAgICAgICBlbHNlIGlmICh0aGlzLnhoclR5cGUgPT09IFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkRPQ1VNRU5UKSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGlmICh3aW5kb3cuRE9NUGFyc2VyKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBkb21wYXJzZXIgPSBuZXcgRE9NUGFyc2VyKCk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGF0YSA9IGRvbXBhcnNlci5wYXJzZUZyb21TdHJpbmcoeGhyLnJlc3BvbnNlVGV4dCwgJ3RleHQveG1sJyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB2YXIgZGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgICAgICAgICAgICAgIGRpdi5pbm5lckhUTUwgPSB4aHIucmVzcG9uc2VUZXh0O1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmRhdGEgPSBkaXY7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXMuaXNYbWwgPSB0cnVlO1xuICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgIHRoaXMuZXJyb3IgPSBuZXcgRXJyb3IoJ0Vycm9yIHRyeWluZyB0byBwYXJzZSBsb2FkZWQgeG1sOicsIGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIG90aGVyIHR5cGVzIGp1c3QgcmV0dXJuIHRoZSByZXNwb25zZVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuZGF0YSA9IHhoci5yZXNwb25zZSB8fCB4aHIucmVzcG9uc2VUZXh0O1xuICAgICAgICB9XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICB0aGlzLmVycm9yID0gbmV3IEVycm9yKCdbJyArIHhoci5zdGF0dXMgKyAnXScgKyB4aHIuc3RhdHVzVGV4dCArICc6JyArIHhoci5yZXNwb25zZVVSTCk7XG4gICAgfVxuXG4gICAgdGhpcy5jb21wbGV0ZSgpO1xufTtcblxuZnVuY3Rpb24gcmVxVHlwZSh4aHIpIHtcbiAgICByZXR1cm4geGhyLnRvU3RyaW5nKCkucmVwbGFjZSgnb2JqZWN0ICcsICcnKTtcbn1cblxuLyoqXG4gKiBTZXRzIHRoZSBgY3Jvc3NPcmlnaW5gIHByb3BlcnR5IGZvciB0aGlzIHJlc291cmNlIGJhc2VkIG9uIGlmIHRoZSB1cmxcbiAqIGZvciB0aGlzIHJlc291cmNlIGlzIGNyb3NzLW9yaWdpbi4gSWYgY3Jvc3NPcmlnaW4gd2FzIG1hbnVhbGx5IHNldCwgdGhpc1xuICogZnVuY3Rpb24gZG9lcyBub3RoaW5nLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0gdXJsIHtzdHJpbmd9IFRoZSB1cmwgdG8gdGVzdC5cbiAqIEBwYXJhbSBbbG9jYXRpb249d2luZG93LmxvY2F0aW9uXSB7b2JqZWN0fSBUaGUgbG9jYXRpb24gb2JqZWN0IHRvIHRlc3QgYWdhaW5zdC5cbiAqIEByZXR1cm4ge3N0cmluZ30gVGhlIGNyb3NzT3JpZ2luIHZhbHVlIHRvIHVzZSAob3IgZW1wdHkgc3RyaW5nIGZvciBub25lKS5cbiAqL1xuUmVzb3VyY2UucHJvdG90eXBlLl9kZXRlcm1pbmVDcm9zc09yaWdpbiA9IGZ1bmN0aW9uICh1cmwsIGxvYykge1xuICAgIC8vIGRhdGE6IGFuZCBqYXZhc2NyaXB0OiB1cmxzIGFyZSBjb25zaWRlcmVkIHNhbWUtb3JpZ2luXG4gICAgaWYgKHVybC5pbmRleE9mKCdkYXRhOicpID09PSAwKSB7XG4gICAgICAgIHJldHVybiAnJztcbiAgICB9XG5cbiAgICAvLyBkZWZhdWx0IGlzIHdpbmRvdy5sb2NhdGlvblxuICAgIGxvYyA9IGxvYyB8fCB3aW5kb3cubG9jYXRpb247XG5cbiAgICBpZiAoIXRlbXBBbmNob3IpIHtcbiAgICAgICAgdGVtcEFuY2hvciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2EnKTtcbiAgICB9XG5cbiAgICAvLyBsZXQgdGhlIGJyb3dzZXIgZGV0ZXJtaW5lIHRoZSBmdWxsIGhyZWYgZm9yIHRoZSB1cmwgb2YgdGhpcyByZXNvdXJjZSBhbmQgdGhlblxuICAgIC8vIHBhcnNlIHdpdGggdGhlIG5vZGUgdXJsIGxpYiwgd2UgY2FuJ3QgdXNlIHRoZSBwcm9wZXJ0aWVzIG9mIHRoZSBhbmNob3IgZWxlbWVudFxuICAgIC8vIGJlY2F1c2UgdGhleSBkb24ndCB3b3JrIGluIElFOSA6KFxuICAgIHRlbXBBbmNob3IuaHJlZiA9IHVybDtcbiAgICB1cmwgPSBfdXJsLnBhcnNlKHRlbXBBbmNob3IuaHJlZik7XG5cbiAgICB2YXIgc2FtZVBvcnQgPSAoIXVybC5wb3J0ICYmIGxvYy5wb3J0ID09PSAnJykgfHwgKHVybC5wb3J0ID09PSBsb2MucG9ydCk7XG5cbiAgICAvLyBpZiBjcm9zcyBvcmlnaW5cbiAgICBpZiAodXJsLmhvc3RuYW1lICE9PSBsb2MuaG9zdG5hbWUgfHwgIXNhbWVQb3J0IHx8IHVybC5wcm90b2NvbCAhPT0gbG9jLnByb3RvY29sKSB7XG4gICAgICAgIHJldHVybiAnYW5vbnltb3VzJztcbiAgICB9XG5cbiAgICByZXR1cm4gJyc7XG59O1xuXG4vKipcbiAqIERldGVybWluZXMgdGhlIHJlc3BvbnNlVHlwZSBvZiBhbiBYSFIgcmVxdWVzdCBiYXNlZCBvbiB0aGUgZXh0ZW5zaW9uIG9mIHRoZVxuICogcmVzb3VyY2UgYmVpbmcgbG9hZGVkLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcmV0dXJuIHtSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRX0gVGhlIHJlc3BvbnNlVHlwZSB0byB1c2UuXG4gKi9cblJlc291cmNlLnByb3RvdHlwZS5fZGV0ZXJtaW5lWGhyVHlwZSA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gUmVzb3VyY2UuX3hoclR5cGVNYXBbdGhpcy5fZ2V0RXh0ZW5zaW9uKCldIHx8IFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLlRFWFQ7XG59O1xuXG5SZXNvdXJjZS5wcm90b3R5cGUuX2RldGVybWluZUxvYWRUeXBlID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBSZXNvdXJjZS5fbG9hZFR5cGVNYXBbdGhpcy5fZ2V0RXh0ZW5zaW9uKCldIHx8IFJlc291cmNlLkxPQURfVFlQRS5YSFI7XG59O1xuXG5SZXNvdXJjZS5wcm90b3R5cGUuX2dldEV4dGVuc2lvbiA9IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgdXJsID0gdGhpcy51cmwsXG4gICAgICAgIGV4dDtcblxuICAgIGlmICh0aGlzLmlzRGF0YVVybCkge1xuICAgICAgICB2YXIgc2xhc2hJbmRleCA9IHVybC5pbmRleE9mKCcvJyk7XG4gICAgICAgIGV4dCA9IHVybC5zdWJzdHJpbmcoc2xhc2hJbmRleCArIDEsIHVybC5pbmRleE9mKCc7Jywgc2xhc2hJbmRleCkpO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgdmFyIHF1ZXJ5U3RhcnQgPSB1cmwuaW5kZXhPZignPycpO1xuICAgICAgICBpZiAocXVlcnlTdGFydCAhPT0gLTEpIHtcbiAgICAgICAgICAgIHVybCA9IHVybC5zdWJzdHJpbmcoMCwgcXVlcnlTdGFydCk7XG4gICAgICAgIH1cblxuICAgICAgICBleHQgPSB1cmwuc3Vic3RyaW5nKHVybC5sYXN0SW5kZXhPZignLicpICsgMSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGV4dDtcbn07XG5cbi8qKlxuICogRGV0ZXJtaW5lcyB0aGUgbWltZSB0eXBlIG9mIGFuIFhIUiByZXF1ZXN0IGJhc2VkIG9uIHRoZSByZXNwb25zZVR5cGUgb2ZcbiAqIHJlc291cmNlIGJlaW5nIGxvYWRlZC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHJldHVybiB7c3RyaW5nfSBUaGUgbWltZSB0eXBlIHRvIHVzZS5cbiAqL1xuUmVzb3VyY2UucHJvdG90eXBlLl9nZXRNaW1lRnJvbVhoclR5cGUgPSBmdW5jdGlvbiAodHlwZSkge1xuICAgIHN3aXRjaCh0eXBlKSB7XG4gICAgICAgIGNhc2UgUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuQlVGRkVSOlxuICAgICAgICAgICAgcmV0dXJuICdhcHBsaWNhdGlvbi9vY3RldC1iaW5hcnknO1xuXG4gICAgICAgIGNhc2UgUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuQkxPQjpcbiAgICAgICAgICAgIHJldHVybiAnYXBwbGljYXRpb24vYmxvYic7XG5cbiAgICAgICAgY2FzZSBSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRS5ET0NVTUVOVDpcbiAgICAgICAgICAgIHJldHVybiAnYXBwbGljYXRpb24veG1sJztcblxuICAgICAgICBjYXNlIFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkpTT046XG4gICAgICAgICAgICByZXR1cm4gJ2FwcGxpY2F0aW9uL2pzb24nO1xuXG4gICAgICAgIGNhc2UgUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuREVGQVVMVDpcbiAgICAgICAgY2FzZSBSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRS5URVhUOlxuICAgICAgICAgICAgLyogZmFsbHMgdGhyb3VnaCAqL1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgcmV0dXJuICd0ZXh0L3BsYWluJztcblxuICAgIH1cbn07XG5cbi8qKlxuICogVGhlIHR5cGVzIG9mIGxvYWRpbmcgYSByZXNvdXJjZSBjYW4gdXNlLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBjb25zdGFudFxuICogQHByb3BlcnR5IHtvYmplY3R9IExPQURfVFlQRVxuICogQHByb3BlcnR5IHtudW1iZXJ9IExPQURfVFlQRS5YSFIgLSBVc2VzIFhNTEh0dHBSZXF1ZXN0IHRvIGxvYWQgdGhlIHJlc291cmNlLlxuICogQHByb3BlcnR5IHtudW1iZXJ9IExPQURfVFlQRS5JTUFHRSAtIFVzZXMgYW4gYEltYWdlYCBvYmplY3QgdG8gbG9hZCB0aGUgcmVzb3VyY2UuXG4gKiBAcHJvcGVydHkge251bWJlcn0gTE9BRF9UWVBFLkFVRElPIC0gVXNlcyBhbiBgQXVkaW9gIG9iamVjdCB0byBsb2FkIHRoZSByZXNvdXJjZS5cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBMT0FEX1RZUEUuVklERU8gLSBVc2VzIGEgYFZpZGVvYCBvYmplY3QgdG8gbG9hZCB0aGUgcmVzb3VyY2UuXG4gKi9cblJlc291cmNlLkxPQURfVFlQRSA9IHtcbiAgICBYSFI6ICAgIDEsXG4gICAgSU1BR0U6ICAyLFxuICAgIEFVRElPOiAgMyxcbiAgICBWSURFTzogIDRcbn07XG5cbi8qKlxuICogVGhlIFhIUiByZWFkeSBzdGF0ZXMsIHVzZWQgaW50ZXJuYWxseS5cbiAqXG4gKiBAc3RhdGljXG4gKiBAY29uc3RhbnRcbiAqIEBwcm9wZXJ0eSB7b2JqZWN0fSBYSFJfUkVBRFlfU1RBVEVcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBYSFJfUkVBRFlfU1RBVEUuVU5TRU5UIC0gb3BlbigpaGFzIG5vdCBiZWVuIGNhbGxlZCB5ZXQuXG4gKiBAcHJvcGVydHkge251bWJlcn0gWEhSX1JFQURZX1NUQVRFLk9QRU5FRCAtIHNlbmQoKWhhcyBub3QgYmVlbiBjYWxsZWQgeWV0LlxuICogQHByb3BlcnR5IHtudW1iZXJ9IFhIUl9SRUFEWV9TVEFURS5IRUFERVJTX1JFQ0VJVkVEIC0gc2VuZCgpIGhhcyBiZWVuIGNhbGxlZCwgYW5kIGhlYWRlcnMgYW5kIHN0YXR1cyBhcmUgYXZhaWxhYmxlLlxuICogQHByb3BlcnR5IHtudW1iZXJ9IFhIUl9SRUFEWV9TVEFURS5MT0FESU5HIC0gRG93bmxvYWRpbmc7IHJlc3BvbnNlVGV4dCBob2xkcyBwYXJ0aWFsIGRhdGEuXG4gKiBAcHJvcGVydHkge251bWJlcn0gWEhSX1JFQURZX1NUQVRFLkRPTkUgLSBUaGUgb3BlcmF0aW9uIGlzIGNvbXBsZXRlLlxuICovXG5SZXNvdXJjZS5YSFJfUkVBRFlfU1RBVEUgPSB7XG4gICAgVU5TRU5UOiAwLFxuICAgIE9QRU5FRDogMSxcbiAgICBIRUFERVJTX1JFQ0VJVkVEOiAyLFxuICAgIExPQURJTkc6IDMsXG4gICAgRE9ORTogNFxufTtcblxuLyoqXG4gKiBUaGUgWEhSIHJlYWR5IHN0YXRlcywgdXNlZCBpbnRlcm5hbGx5LlxuICpcbiAqIEBzdGF0aWNcbiAqIEBjb25zdGFudFxuICogQHByb3BlcnR5IHtvYmplY3R9IFhIUl9SRVNQT05TRV9UWVBFXG4gKiBAcHJvcGVydHkge3N0cmluZ30gWEhSX1JFU1BPTlNFX1RZUEUuREVGQVVMVCAtIGRlZmF1bHRzIHRvIHRleHRcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBYSFJfUkVTUE9OU0VfVFlQRS5CVUZGRVIgLSBBcnJheUJ1ZmZlclxuICogQHByb3BlcnR5IHtzdHJpbmd9IFhIUl9SRVNQT05TRV9UWVBFLkJMT0IgLSBCbG9iXG4gKiBAcHJvcGVydHkge3N0cmluZ30gWEhSX1JFU1BPTlNFX1RZUEUuRE9DVU1FTlQgLSBEb2N1bWVudFxuICogQHByb3BlcnR5IHtzdHJpbmd9IFhIUl9SRVNQT05TRV9UWVBFLkpTT04gLSBPYmplY3RcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBYSFJfUkVTUE9OU0VfVFlQRS5URVhUIC0gU3RyaW5nXG4gKi9cblJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFID0ge1xuICAgIERFRkFVTFQ6ICAgICd0ZXh0JyxcbiAgICBCVUZGRVI6ICAgICAnYXJyYXlidWZmZXInLFxuICAgIEJMT0I6ICAgICAgICdibG9iJyxcbiAgICBET0NVTUVOVDogICAnZG9jdW1lbnQnLFxuICAgIEpTT046ICAgICAgICdqc29uJyxcbiAgICBURVhUOiAgICAgICAndGV4dCdcbn07XG5cblJlc291cmNlLl9sb2FkVHlwZU1hcCA9IHtcbiAgICAnZ2lmJzogICAgICBSZXNvdXJjZS5MT0FEX1RZUEUuSU1BR0UsXG4gICAgJ3BuZyc6ICAgICAgUmVzb3VyY2UuTE9BRF9UWVBFLklNQUdFLFxuICAgICdibXAnOiAgICAgIFJlc291cmNlLkxPQURfVFlQRS5JTUFHRSxcbiAgICAnanBnJzogICAgICBSZXNvdXJjZS5MT0FEX1RZUEUuSU1BR0UsXG4gICAgJ2pwZWcnOiAgICAgUmVzb3VyY2UuTE9BRF9UWVBFLklNQUdFLFxuICAgICd0aWYnOiAgICAgIFJlc291cmNlLkxPQURfVFlQRS5JTUFHRSxcbiAgICAndGlmZic6ICAgICBSZXNvdXJjZS5MT0FEX1RZUEUuSU1BR0UsXG4gICAgJ3dlYnAnOiAgICAgUmVzb3VyY2UuTE9BRF9UWVBFLklNQUdFLFxuICAgICd0Z2EnOiAgICAgIFJlc291cmNlLkxPQURfVFlQRS5JTUFHRVxufTtcblxuUmVzb3VyY2UuX3hoclR5cGVNYXAgPSB7XG4gICAgLy8geG1sXG4gICAgJ3hodG1sJzogICAgUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuRE9DVU1FTlQsXG4gICAgJ2h0bWwnOiAgICAgUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuRE9DVU1FTlQsXG4gICAgJ2h0bSc6ICAgICAgUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuRE9DVU1FTlQsXG4gICAgJ3htbCc6ICAgICAgUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuRE9DVU1FTlQsXG4gICAgJ3RteCc6ICAgICAgUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuRE9DVU1FTlQsXG4gICAgJ3RzeCc6ICAgICAgUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuRE9DVU1FTlQsXG4gICAgJ3N2Zyc6ICAgICAgUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuRE9DVU1FTlQsXG5cbiAgICAvLyBpbWFnZXNcbiAgICAnZ2lmJzogICAgICBSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRS5CTE9CLFxuICAgICdwbmcnOiAgICAgIFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkJMT0IsXG4gICAgJ2JtcCc6ICAgICAgUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuQkxPQixcbiAgICAnanBnJzogICAgICBSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRS5CTE9CLFxuICAgICdqcGVnJzogICAgIFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkJMT0IsXG4gICAgJ3RpZic6ICAgICAgUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuQkxPQixcbiAgICAndGlmZic6ICAgICBSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRS5CTE9CLFxuICAgICd3ZWJwJzogICAgIFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkJMT0IsXG4gICAgJ3RnYSc6ICAgICAgUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuQkxPQixcblxuICAgIC8vIGpzb25cbiAgICAnanNvbic6ICAgICBSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRS5KU09OLFxuXG4gICAgLy8gdGV4dFxuICAgICd0ZXh0JzogICAgIFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLlRFWFQsXG4gICAgJ3R4dCc6ICAgICAgUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuVEVYVFxufTtcblxuLyoqXG4gKiBTZXRzIHRoZSBsb2FkIHR5cGUgdG8gYmUgdXNlZCBmb3IgYSBzcGVjaWZpYyBleHRlbnNpb24uXG4gKlxuICogQHN0YXRpY1xuICogQHBhcmFtIGV4dG5hbWUge3N0cmluZ30gVGhlIGV4dGVuc2lvbiB0byBzZXQgdGhlIHR5cGUgZm9yLCBlLmcuIFwicG5nXCIgb3IgXCJmbnRcIlxuICogQHBhcmFtIGxvYWRUeXBlIHtSZXNvdXJjZS5MT0FEX1RZUEV9IFRoZSBsb2FkIHR5cGUgdG8gc2V0IGl0IHRvLlxuICovXG5SZXNvdXJjZS5zZXRFeHRlbnNpb25Mb2FkVHlwZSA9IGZ1bmN0aW9uIChleHRuYW1lLCBsb2FkVHlwZSkge1xuICAgIHNldEV4dE1hcChSZXNvdXJjZS5fbG9hZFR5cGVNYXAsIGV4dG5hbWUsIGxvYWRUeXBlKTtcbn07XG5cbi8qKlxuICogU2V0cyB0aGUgbG9hZCB0eXBlIHRvIGJlIHVzZWQgZm9yIGEgc3BlY2lmaWMgZXh0ZW5zaW9uLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBwYXJhbSBleHRuYW1lIHtzdHJpbmd9IFRoZSBleHRlbnNpb24gdG8gc2V0IHRoZSB0eXBlIGZvciwgZS5nLiBcInBuZ1wiIG9yIFwiZm50XCJcbiAqIEBwYXJhbSB4aHJUeXBlIHtSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRX0gVGhlIHhociB0eXBlIHRvIHNldCBpdCB0by5cbiAqL1xuUmVzb3VyY2Uuc2V0RXh0ZW5zaW9uWGhyVHlwZSA9IGZ1bmN0aW9uIChleHRuYW1lLCB4aHJUeXBlKSB7XG4gICAgc2V0RXh0TWFwKFJlc291cmNlLl94aHJUeXBlTWFwLCBleHRuYW1lLCB4aHJUeXBlKTtcbn07XG5cbmZ1bmN0aW9uIHNldEV4dE1hcChtYXAsIGV4dG5hbWUsIHZhbCkge1xuICAgIGlmIChleHRuYW1lICYmIGV4dG5hbWUuaW5kZXhPZignLicpID09PSAwKSB7XG4gICAgICAgIGV4dG5hbWUgPSBleHRuYW1lLnN1YnN0cmluZygxKTtcbiAgICB9XG5cbiAgICBpZiAoIWV4dG5hbWUpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIG1hcFtleHRuYW1lXSA9IHZhbDtcbn1cbiIsIm1vZHVsZS5leHBvcnRzID0ge1xuXG4gICAgLy8gcHJpdmF0ZSBwcm9wZXJ0eVxuICAgIF9rZXlTdHI6IFwiQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkrLz1cIixcblxuICAgIGVuY29kZUJpbmFyeTogZnVuY3Rpb24gKGlucHV0KSB7XG4gICAgICAgIHZhciBvdXRwdXQgPSBcIlwiO1xuICAgICAgICB2YXIgYnl0ZWJ1ZmZlcjtcbiAgICAgICAgdmFyIGVuY29kZWRDaGFySW5kZXhlcyA9IG5ldyBBcnJheSg0KTtcbiAgICAgICAgdmFyIGlueCA9IDA7XG4gICAgICAgIHZhciBqbnggPSAwO1xuICAgICAgICB2YXIgcGFkZGluZ0J5dGVzID0gMDtcblxuICAgICAgICB3aGlsZSAoaW54IDwgaW5wdXQubGVuZ3RoKSB7XG4gICAgICAgICAgICAvLyBGaWxsIGJ5dGUgYnVmZmVyIGFycmF5XG4gICAgICAgICAgICBieXRlYnVmZmVyID0gbmV3IEFycmF5KDMpO1xuICAgICAgICAgICAgZm9yIChqbnggPSAwOyBqbnggPCBieXRlYnVmZmVyLmxlbmd0aDsgam54KyspIHtcbiAgICAgICAgICAgICAgICBpZiAoaW54IDwgaW5wdXQubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIHRocm93IGF3YXkgaGlnaC1vcmRlciBieXRlLCBhcyBkb2N1bWVudGVkIGF0OlxuICAgICAgICAgICAgICAgICAgICAvLyBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9Fbi9Vc2luZ19YTUxIdHRwUmVxdWVzdCNIYW5kbGluZ19iaW5hcnlfZGF0YVxuICAgICAgICAgICAgICAgICAgICBieXRlYnVmZmVyW2pueF0gPSBpbnB1dC5jaGFyQ29kZUF0KGlueCsrKSAmIDB4ZmY7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBieXRlYnVmZmVyW2pueF0gPSAwO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gR2V0IGVhY2ggZW5jb2RlZCBjaGFyYWN0ZXIsIDYgYml0cyBhdCBhIHRpbWVcbiAgICAgICAgICAgIC8vIGluZGV4IDE6IGZpcnN0IDYgYml0c1xuICAgICAgICAgICAgZW5jb2RlZENoYXJJbmRleGVzWzBdID0gYnl0ZWJ1ZmZlclswXSA+PiAyO1xuICAgICAgICAgICAgLy8gaW5kZXggMjogc2Vjb25kIDYgYml0cyAoMiBsZWFzdCBzaWduaWZpY2FudCBiaXRzIGZyb20gaW5wdXQgYnl0ZSAxICsgNCBtb3N0IHNpZ25pZmljYW50IGJpdHMgZnJvbSBieXRlIDIpXG4gICAgICAgICAgICBlbmNvZGVkQ2hhckluZGV4ZXNbMV0gPSAoKGJ5dGVidWZmZXJbMF0gJiAweDMpIDw8IDQpIHwgKGJ5dGVidWZmZXJbMV0gPj4gNCk7XG4gICAgICAgICAgICAvLyBpbmRleCAzOiB0aGlyZCA2IGJpdHMgKDQgbGVhc3Qgc2lnbmlmaWNhbnQgYml0cyBmcm9tIGlucHV0IGJ5dGUgMiArIDIgbW9zdCBzaWduaWZpY2FudCBiaXRzIGZyb20gYnl0ZSAzKVxuICAgICAgICAgICAgZW5jb2RlZENoYXJJbmRleGVzWzJdID0gKChieXRlYnVmZmVyWzFdICYgMHgwZikgPDwgMikgfCAoYnl0ZWJ1ZmZlclsyXSA+PiA2KTtcbiAgICAgICAgICAgIC8vIGluZGV4IDM6IGZvcnRoIDYgYml0cyAoNiBsZWFzdCBzaWduaWZpY2FudCBiaXRzIGZyb20gaW5wdXQgYnl0ZSAzKVxuICAgICAgICAgICAgZW5jb2RlZENoYXJJbmRleGVzWzNdID0gYnl0ZWJ1ZmZlclsyXSAmIDB4M2Y7XG5cbiAgICAgICAgICAgIC8vIERldGVybWluZSB3aGV0aGVyIHBhZGRpbmcgaGFwcGVuZWQsIGFuZCBhZGp1c3QgYWNjb3JkaW5nbHlcbiAgICAgICAgICAgIHBhZGRpbmdCeXRlcyA9IGlueCAtIChpbnB1dC5sZW5ndGggLSAxKTtcbiAgICAgICAgICAgIHN3aXRjaCAocGFkZGluZ0J5dGVzKSB7XG4gICAgICAgICAgICAgICAgY2FzZSAyOlxuICAgICAgICAgICAgICAgICAgICAvLyBTZXQgbGFzdCAyIGNoYXJhY3RlcnMgdG8gcGFkZGluZyBjaGFyXG4gICAgICAgICAgICAgICAgICAgIGVuY29kZWRDaGFySW5kZXhlc1szXSA9IDY0O1xuICAgICAgICAgICAgICAgICAgICBlbmNvZGVkQ2hhckluZGV4ZXNbMl0gPSA2NDtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICAgICAgICAgIC8vIFNldCBsYXN0IGNoYXJhY3RlciB0byBwYWRkaW5nIGNoYXJcbiAgICAgICAgICAgICAgICAgICAgZW5jb2RlZENoYXJJbmRleGVzWzNdID0gNjQ7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7IC8vIE5vIHBhZGRpbmcgLSBwcm9jZWVkXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIE5vdyB3ZSB3aWxsIGdyYWIgZWFjaCBhcHByb3ByaWF0ZSBjaGFyYWN0ZXIgb3V0IG9mIG91ciBrZXlzdHJpbmdcbiAgICAgICAgICAgIC8vIGJhc2VkIG9uIG91ciBpbmRleCBhcnJheSBhbmQgYXBwZW5kIGl0IHRvIHRoZSBvdXRwdXQgc3RyaW5nXG4gICAgICAgICAgICBmb3IgKGpueCA9IDA7IGpueCA8IGVuY29kZWRDaGFySW5kZXhlcy5sZW5ndGg7IGpueCsrKSB7XG4gICAgICAgICAgICAgICAgb3V0cHV0ICs9IHRoaXMuX2tleVN0ci5jaGFyQXQoZW5jb2RlZENoYXJJbmRleGVzW2pueF0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBvdXRwdXQ7XG4gICAgfVxufTtcbiIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9Mb2FkZXInKTtcblxubW9kdWxlLmV4cG9ydHMuUmVzb3VyY2UgPSByZXF1aXJlKCcuL1Jlc291cmNlJyk7XG5cbm1vZHVsZS5leHBvcnRzLm1pZGRsZXdhcmUgPSB7XG4gICAgY2FjaGluZzoge1xuICAgICAgICBtZW1vcnk6IHJlcXVpcmUoJy4vbWlkZGxld2FyZXMvY2FjaGluZy9tZW1vcnknKVxuICAgIH0sXG4gICAgcGFyc2luZzoge1xuICAgICAgICBibG9iOiByZXF1aXJlKCcuL21pZGRsZXdhcmVzL3BhcnNpbmcvYmxvYicpXG4gICAgfVxufTtcbiIsIi8vIGEgc2ltcGxlIGluLW1lbW9yeSBjYWNoZSBmb3IgcmVzb3VyY2VzXG52YXIgY2FjaGUgPSB7fTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChyZXNvdXJjZSwgbmV4dCkge1xuICAgICAgICAvLyBpZiBjYWNoZWQsIHRoZW4gc2V0IGRhdGEgYW5kIGNvbXBsZXRlIHRoZSByZXNvdXJjZVxuICAgICAgICBpZiAoY2FjaGVbcmVzb3VyY2UudXJsXSkge1xuICAgICAgICAgICAgcmVzb3VyY2UuZGF0YSA9IGNhY2hlW3Jlc291cmNlLnVybF07XG4gICAgICAgICAgICByZXNvdXJjZS5jb21wbGV0ZSgpO1xuICAgICAgICB9XG4gICAgICAgIC8vIGlmIG5vdCBjYWNoZWQsIHdhaXQgZm9yIGNvbXBsZXRlIGFuZCBzdG9yZSBpdCBpbiB0aGUgY2FjaGUuXG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcmVzb3VyY2Uub25jZSgnY29tcGxldGUnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICBjYWNoZVt0aGlzLnVybF0gPSB0aGlzLmRhdGE7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBcbiAgICAgICAgbmV4dCgpO1xuICAgIH07XG59O1xuIiwidmFyIFJlc291cmNlID0gcmVxdWlyZSgnLi4vLi4vUmVzb3VyY2UnKSxcbiAgICBiNjQgPSByZXF1aXJlKCcuLi8uLi9iNjQnKTtcblxud2luZG93LlVSTCA9IHdpbmRvdy5VUkwgfHwgd2luZG93LndlYmtpdFVSTDtcblxuLy8gYSBtaWRkbGV3YXJlIGZvciB0cmFuc2Zvcm1pbmcgWEhSIGxvYWRlZCBCbG9icyBpbnRvIG1vcmUgdXNlZnVsIG9iamVjdHNcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChyZXNvdXJjZSwgbmV4dCkge1xuICAgICAgICBpZiAoIXJlc291cmNlLmRhdGEpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXh0KCk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBpZiB0aGlzIHdhcyBhbiBYSFIgbG9hZCBvZiBhIGJsb2JcbiAgICAgICAgaWYgKHJlc291cmNlLnhociAmJiByZXNvdXJjZS54aHJUeXBlID09PSBSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRS5CTE9CKSB7XG4gICAgICAgICAgICAvLyBpZiB0aGVyZSBpcyBubyBibG9iIHN1cHBvcnQgd2UgcHJvYmFibHkgZ290IGEgYmluYXJ5IHN0cmluZyBiYWNrXG4gICAgICAgICAgICBpZiAoIXdpbmRvdy5CbG9iIHx8IHR5cGVvZiByZXNvdXJjZS5kYXRhID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgICAgIHZhciB0eXBlID0gcmVzb3VyY2UueGhyLmdldFJlc3BvbnNlSGVhZGVyKCdjb250ZW50LXR5cGUnKTtcblxuICAgICAgICAgICAgICAgIC8vIHRoaXMgaXMgYW4gaW1hZ2UsIGNvbnZlcnQgdGhlIGJpbmFyeSBzdHJpbmcgaW50byBhIGRhdGEgdXJsXG4gICAgICAgICAgICAgICAgaWYgKHR5cGUgJiYgdHlwZS5pbmRleE9mKCdpbWFnZScpID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc291cmNlLmRhdGEgPSBuZXcgSW1hZ2UoKTtcbiAgICAgICAgICAgICAgICAgICAgcmVzb3VyY2UuZGF0YS5zcmMgPSAnZGF0YTonICsgdHlwZSArICc7YmFzZTY0LCcgKyBiNjQuZW5jb2RlQmluYXJ5KHJlc291cmNlLnhoci5yZXNwb25zZVRleHQpO1xuXG4gICAgICAgICAgICAgICAgICAgIHJlc291cmNlLmlzSW1hZ2UgPSB0cnVlO1xuXG4gICAgICAgICAgICAgICAgICAgIC8vIHdhaXQgdW50aWwgdGhlIGltYWdlIGxvYWRzIGFuZCB0aGVuIGNhbGxiYWNrXG4gICAgICAgICAgICAgICAgICAgIHJlc291cmNlLmRhdGEub25sb2FkID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVzb3VyY2UuZGF0YS5vbmxvYWQgPSBudWxsO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBuZXh0KCk7XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gaWYgY29udGVudCB0eXBlIHNheXMgdGhpcyBpcyBhbiBpbWFnZSwgdGhlbiB3ZSBzaG91bGQgdHJhbnNmb3JtIHRoZSBibG9iIGludG8gYW4gSW1hZ2Ugb2JqZWN0XG4gICAgICAgICAgICBlbHNlIGlmIChyZXNvdXJjZS5kYXRhLnR5cGUuaW5kZXhPZignaW1hZ2UnKSA9PT0gMCkge1xuICAgICAgICAgICAgICAgIHZhciBzcmMgPSBVUkwuY3JlYXRlT2JqZWN0VVJMKHJlc291cmNlLmRhdGEpO1xuXG4gICAgICAgICAgICAgICAgcmVzb3VyY2UuYmxvYiA9IHJlc291cmNlLmRhdGE7XG4gICAgICAgICAgICAgICAgcmVzb3VyY2UuZGF0YSA9IG5ldyBJbWFnZSgpO1xuICAgICAgICAgICAgICAgIHJlc291cmNlLmRhdGEuc3JjID0gc3JjO1xuXG4gICAgICAgICAgICAgICAgcmVzb3VyY2UuaXNJbWFnZSA9IHRydWU7XG5cbiAgICAgICAgICAgICAgICAvLyBjbGVhbnVwIHRoZSBubyBsb25nZXIgdXNlZCBibG9iIGFmdGVyIHRoZSBpbWFnZSBsb2Fkc1xuICAgICAgICAgICAgICAgIHJlc291cmNlLmRhdGEub25sb2FkID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICBVUkwucmV2b2tlT2JqZWN0VVJMKHNyYyk7XG4gICAgICAgICAgICAgICAgICAgIHJlc291cmNlLmRhdGEub25sb2FkID0gbnVsbDtcblxuICAgICAgICAgICAgICAgICAgICBuZXh0KCk7XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIG5leHQoKTtcbiAgICAgICAgfVxuICAgIH07XG59O1xuIiwibW9kdWxlLmV4cG9ydHM9e1xuICBcIm5hbWVcIjogXCJwaXhpLmpzXCIsXG4gIFwidmVyc2lvblwiOiBcIjMuMC4xMC1kZXZcIixcbiAgXCJkZXNjcmlwdGlvblwiOiBcIlBpeGkuanMgaXMgYSBmYXN0IGxpZ2h0d2VpZ2h0IDJEIGxpYnJhcnkgdGhhdCB3b3JrcyBhY3Jvc3MgYWxsIGRldmljZXMuXCIsXG4gIFwiYXV0aG9yXCI6IFwiTWF0IEdyb3Zlc1wiLFxuICBcImNvbnRyaWJ1dG9yc1wiOiBbXG4gICAgXCJDaGFkIEVuZ2xlciA8Y2hhZEBwYW50aGVyZGV2LmNvbT5cIixcbiAgICBcIlJpY2hhcmQgRGF2ZXkgPHJkYXZleUBnbWFpbC5jb20+XCJcbiAgXSxcbiAgXCJtYWluXCI6IFwiLi9zcmMvaW5kZXguanNcIixcbiAgXCJob21lcGFnZVwiOiBcImh0dHA6Ly9nb29kYm95ZGlnaXRhbC5jb20vXCIsXG4gIFwiYnVnc1wiOiBcImh0dHBzOi8vZ2l0aHViLmNvbS9waXhpanMvcGl4aS5qcy9pc3N1ZXNcIixcbiAgXCJsaWNlbnNlXCI6IFwiTUlUXCIsXG4gIFwicmVwb3NpdG9yeVwiOiB7XG4gICAgXCJ0eXBlXCI6IFwiZ2l0XCIsXG4gICAgXCJ1cmxcIjogXCJodHRwczovL2dpdGh1Yi5jb20vcGl4aWpzL3BpeGkuanMuZ2l0XCJcbiAgfSxcbiAgXCJzY3JpcHRzXCI6IHtcbiAgICBcInN0YXJ0XCI6IFwiZ3VscCAmJiBndWxwIHdhdGNoXCIsXG4gICAgXCJ0ZXN0XCI6IFwiZ3VscCAmJiB0ZXN0ZW0gY2lcIixcbiAgICBcImJ1aWxkXCI6IFwiZ3VscFwiLFxuICAgIFwiZG9jc1wiOiBcImpzZG9jIC1jIC4vZ3VscC91dGlsL2pzZG9jLmNvbmYuanNvbiAtUiBSRUFETUUubWRcIlxuICB9LFxuICBcImZpbGVzXCI6IFtcbiAgICBcImJpbi9cIixcbiAgICBcInNyYy9cIixcbiAgICBcIkNPTlRSSUJVVElORy5tZFwiLFxuICAgIFwiTElDRU5TRVwiLFxuICAgIFwicGFja2FnZS5qc29uXCIsXG4gICAgXCJSRUFETUUubWRcIlxuICBdLFxuICBcImRlcGVuZGVuY2llc1wiOiB7XG4gICAgXCJhc3luY1wiOiBcIl4xLjUuMFwiLFxuICAgIFwiYnJmc1wiOiBcIl4xLjQuMVwiLFxuICAgIFwiZWFyY3V0XCI6IFwiXjIuMC43XCIsXG4gICAgXCJldmVudGVtaXR0ZXIzXCI6IFwiXjEuMS4xXCIsXG4gICAgXCJvYmplY3QtYXNzaWduXCI6IFwiXjQuMC4xXCIsXG4gICAgXCJwaXhpLWdsLWNvcmVcIjogXCJnaXQraHR0cHM6Ly9naXRodWIuY29tL0dvb2RCb3lEaWdpdGFsL3BpeGktZ2wtY29yZS5naXRcIixcbiAgICBcInJlc291cmNlLWxvYWRlclwiOiBcIl4xLjYuNFwiXG4gIH0sXG4gIFwiZGV2RGVwZW5kZW5jaWVzXCI6IHtcbiAgICBcImJyb3dzZXJpZnlcIjogXCJeMTEuMS4wXCIsXG4gICAgXCJjaGFpXCI6IFwiXjMuMi4wXCIsXG4gICAgXCJkZWxcIjogXCJeMi4wLjJcIixcbiAgICBcImd1bHBcIjogXCJeMy45LjBcIixcbiAgICBcImd1bHAtY2FjaGVkXCI6IFwiXjEuMS4wXCIsXG4gICAgXCJndWxwLWNvbmNhdFwiOiBcIl4yLjYuMFwiLFxuICAgIFwiZ3VscC1kZWJ1Z1wiOiBcIl4yLjEuMFwiLFxuICAgIFwiZ3VscC1oZWFkZXJcIjogXCJeMS43LjFcIixcbiAgICBcImd1bHAtanNoaW50XCI6IFwiXjEuMTEuMlwiLFxuICAgIFwiZ3VscC1taXJyb3JcIjogXCJeMC40LjBcIixcbiAgICBcImd1bHAtcGx1bWJlclwiOiBcIl4xLjAuMVwiLFxuICAgIFwiZ3VscC1yZW5hbWVcIjogXCJeMS4yLjJcIixcbiAgICBcImd1bHAtc291cmNlbWFwc1wiOiBcIl4xLjUuMlwiLFxuICAgIFwiZ3VscC11Z2xpZnlcIjogXCJeMS40LjFcIixcbiAgICBcImd1bHAtdXRpbFwiOiBcIl4zLjAuNlwiLFxuICAgIFwiamFndWFyanMtanNkb2NcIjogXCJnaXQraHR0cHM6Ly9naXRodWIuY29tL2Rhdmlkc2hpbWpzL2phZ3VhcmpzLWpzZG9jLmdpdFwiLFxuICAgIFwianNkb2NcIjogXCJeMy4zLjJcIixcbiAgICBcImpzaGludC1zdW1tYXJ5XCI6IFwiXjAuNC4wXCIsXG4gICAgXCJtaW5pbWlzdFwiOiBcIl4xLjIuMFwiLFxuICAgIFwibW9jaGFcIjogXCJeMi4zLjJcIixcbiAgICBcInJlcXVpcmUtZGlyXCI6IFwiXjAuMy4wXCIsXG4gICAgXCJydW4tc2VxdWVuY2VcIjogXCJeMS4xLjJcIixcbiAgICBcInRlc3RlbVwiOiBcIl4wLjkuNFwiLFxuICAgIFwidmlueWwtYnVmZmVyXCI6IFwiXjEuMC4wXCIsXG4gICAgXCJ2aW55bC1zb3VyY2Utc3RyZWFtXCI6IFwiXjEuMS4wXCIsXG4gICAgXCJ3YXRjaGlmeVwiOiBcIl4zLjQuMFwiXG4gIH0sXG4gIFwiYnJvd3NlcmlmeVwiOiB7XG4gICAgXCJ0cmFuc2Zvcm1cIjogW1xuICAgICAgXCJicmZzXCJcbiAgICBdXG4gIH1cbn1cbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vY29yZScpO1xuXG4vLyBhZGQgc29tZSBleHRyYSB2YXJpYWJsZXMgdG8gdGhlIGNvbnRhaW5lci4uXG5PYmplY3QuYXNzaWduKFxuICAgIGNvcmUuRGlzcGxheU9iamVjdC5wcm90b3R5cGUsXG4gICAgcmVxdWlyZSgnLi9hY2Nlc3NpYmxlVGFyZ2V0Jylcbik7XG5cblxuLyoqXG4gKiBUaGUgQWNjZXNzaWJpbGl0eSBtYW5hZ2VyIHJlYWNyZWF0ZXMgdGhlIGFiaWxpdHkgdG8gdGFiIGFuZCBhbmQgaGF2ZSBjb250ZW50IHJlYWQgYnkgc2NyZWVuIHJlYWRlcnMuIFRoaXMgaXMgdmVyeSBpbXBvcnRhbnQgYXMgaXQgY2FuIHBvc3NpYmx5IGhlbHAgcGVvcGxlIHdpdGggZGlzYWJpbGl0aWVzIGFjY2VzcyBwaXhpIGNvbnRlbnQuXG4gKiBNdWNoIGxpa2UgaW50ZXJhY3Rpb24gYW55IERpc3BsYXlPYmplY3QgY2FuIGJlIG1hZGUgYWNjZXNzaWJsZS4gVGhpcyBtYW5hZ2VyIHdpbGwgbWFwIHRoZSBldmVudHMgYXMgaWYgdGhlIG1vdXNlIHdhcyBiZWluZyB1c2VkLCBtaW5pbWl6aW5nIHRoZSBlZmZlcm90IHJlcXVpcmVkIHRvIGltcGxlbWVudC5cbiAqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuQ2FudmFzUmVuZGVyZXJ8UElYSS5XZWJHTFJlbmRlcmVyfSBBIHJlZmVyZW5jZSB0byB0aGUgY3VycmVudCByZW5kZXJlclxuICovXG5mdW5jdGlvbiBBY2Nlc3NpYmlsaXR5TWFuYWdlcihyZW5kZXJlcilcbntcblx0Ly8gZmlyc3Qgd2UgY3JlYXRlIGEgZGl2IHRoYXQgd2lsbCBzaXQgb3ZlciB0aGUgcGl4aSBlbGVtZW50LiBUaGlzIGlzIHdoZXJlIHRoZSBkaXYgb3ZlcmxheXMgd2lsbCBnby5cbiAgICB2YXIgZGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgXG4gICAgZGl2LnN0eWxlLndpZHRoID0gMTAwICsgJ3B4JztcbiAgICBkaXYuc3R5bGUuaGVpZ2h0ID0gMTAwICsgJ3B4JztcbiAgICBkaXYuc3R5bGUucG9zaXRpb24gPSAnYWJzb2x1dGUnO1xuICAgIGRpdi5zdHlsZS50b3AgPSAwO1xuICAgIGRpdi5zdHlsZS5sZWZ0ID0gMDtcbiAgIC8vXG4gICAgZGl2LnN0eWxlLnpJbmRleCA9IDI7XG4gICBcdFxuICAgXHQvKipcbiAgIFx0ICogVGhpcyBpcyB0aGUgZG9tIGVsZW1lbnQgdGhhdCB3aWxsIHNpdCBvdmVyIHRoZSBwaXhpIGVsZW1lbnQuIFRoaXMgaXMgd2hlcmUgdGhlIGRpdiBvdmVybGF5cyB3aWxsIGdvLlxuICAgXHQgKiBcbiAgIFx0ICogQHR5cGUge0hUTUxFbGVtZW50fVxuICAgXHQgKiBAcHJpdmF0ZVxuICAgXHQgKi9cbiAgIFx0dGhpcy5kaXYgPSBkaXY7XG5cbiAgIFx0LyoqXG4gICBcdCAqIEEgc2ltcGxlIHBvb2wgZm9yIHN0b3JpbmcgZGl2cy5cbiAgIFx0ICogXG4gICBcdCAqIEB0eXBlIHtBcnJheX1cbiAgIFx0ICogQHByaXZhdGVcbiAgIFx0ICovXG4gXHR0aGlzLnBvb2wgPSBbXTtcblxuIFx0LyoqXG4gXHQgKiBUaGlzIGlzIGEgdGljayB1c2VkIHRvIGNoZWNrIGlmIGFuIG9iamVjdCBpcyBubyBsb25nZXIgYmVpbmcgcmVuZGVyZWQuXG4gXHQgKiBcbiBcdCAqIEB0eXBlIHtOdW1iZXJ9XG4gXHQgKiBAcHJpdmF0ZVxuIFx0ICovXG4gICBcdHRoaXMucmVuZGVySWQgPSAwO1xuXG4gICBcdC8qKlxuICAgXHQgKiBTZXR0aW5nIHRoaXMgdG8gdHJ1ZSB3aWxsIHZpc3VhbGx5IHNob3cgdGhlIGRpdnNcbiAgIFx0ICogXG4gICBcdCAqIEB0eXBlIHtCb29sZWFufVxuICAgXHQgKi9cbiAgIFx0dGhpcy5kZWJ1ZyA9IGZhbHNlO1xuXG4gIFx0LyoqXG4gICAgICogVGhlIHJlbmRlcmVyIHRoaXMgYWNjZXNzaWJpbGl0eSBtYW5hZ2VyIHdvcmtzIGZvci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuU3lzdGVtUmVuZGVyZXJ9XG4gICAgICovXG4gICBcdHRoaXMucmVuZGVyZXIgPSByZW5kZXJlcjtcblxuICAgXHQvKipcbiAgICAgKiBUaGUgYXJyYXkgb2YgY3VycmVudGx5IGFjdGl2ZSBhY2Nlc3NpYmxlIGl0ZW1zLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7QXJyYXl9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgIFx0dGhpcy5jaGlsZHJlbiA9IFtdO1xuICAgXHRcbiAgIFx0LyoqXG4gICAgICogcHJlIGJpbmQgdGhlIGZ1bmN0aW9ucy4uXG4gICAgICovXG4gICBcdHRoaXMuX29uS2V5RG93biA9IHRoaXMuX29uS2V5RG93bi5iaW5kKHRoaXMpO1xuICAgXHR0aGlzLl9vbk1vdXNlTW92ZSA9IHRoaXMuX29uTW91c2VNb3ZlLmJpbmQodGhpcyk7XG4gICBcdFxuICAgXHQvKipcbiAgICAgKiBzdG9yZXMgdGhlIHN0YXRlIG9mIHRoZSBtYW5hZ2VyLiBJZiB0aGVyZSBhcmUgbm8gYWNjZXNzaWJsZSBvYmplY3RzIG9yIHRoZSBtb3VzZSBpcyBtb3ZpbmcgdGhlIHdpbGwgYmUgZmFsc2UuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtBcnJheX1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgXHR0aGlzLmlzQWN0aXZlID0gZmFsc2U7XG5cblxuICAgXHQvLyBsZXQgbGlzdGVuIGZvciB0YWIuLiBvbmNlIHByZXNzZWQgd2UgY2FuIGZpcmUgdXAgYW5kIHNob3cgdGhlIGFjY2Vzc2liaWxpdHkgbGF5ZXJcbiAgIFx0d2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLCB0aGlzLl9vbktleURvd24sIGZhbHNlKTtcbn1cblxuXG5BY2Nlc3NpYmlsaXR5TWFuYWdlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBBY2Nlc3NpYmlsaXR5TWFuYWdlcjtcbm1vZHVsZS5leHBvcnRzID0gQWNjZXNzaWJpbGl0eU1hbmFnZXI7XG5cbi8qKlxuICogQWN0aXZhdGluZyB3aWxsIGNhdXNlIHRoZSBBY2Nlc3NpYmlsaXR5IGxheWVyIHRvIGJlIHNob3duLiBUaGlzIGlzIGNhbGxlZCB3aGVuIGEgdXNlciBwcmVzZXMgdGhlIHRhYiBrZXlcbiAqIEBwcml2YXRlXG4gKi9cbkFjY2Vzc2liaWxpdHlNYW5hZ2VyLnByb3RvdHlwZS5hY3RpdmF0ZSA9IGZ1bmN0aW9uKClcbntcblx0aWYodGhpcy5pc0FjdGl2ZSlcblx0e1xuXHRcdHJldHVybjtcblx0fVxuXG5cdHRoaXMuaXNBY3RpdmUgPSB0cnVlO1xuXG5cdHdpbmRvdy5kb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdtb3VzZW1vdmUnLCB0aGlzLl9vbk1vdXNlTW92ZSwgdHJ1ZSk7XG5cdHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdrZXlkb3duJywgdGhpcy5fb25LZXlEb3duLCBmYWxzZSk7XG5cblx0dGhpcy5yZW5kZXJlci5vbigncG9zdHJlbmRlcicsIHRoaXMudXBkYXRlLCB0aGlzKTtcblxuXHR0aGlzLnJlbmRlcmVyLnZpZXcucGFyZW50Tm9kZS5hcHBlbmRDaGlsZCh0aGlzLmRpdik7XHRcbn07XG5cbi8qKlxuICogRGVhY3RpdmF0aW5nIHdpbGwgY2F1c2UgdGhlIEFjY2Vzc2liaWxpdHkgbGF5ZXIgdG8gYmUgaGlkZGVuLiBUaGlzIGlzIGNhbGxlZCB3aGVuIGEgdXNlciBtb3ZlcyB0aGUgbW91c2VcbiAqIEBwcml2YXRlXG4gKi9cbkFjY2Vzc2liaWxpdHlNYW5hZ2VyLnByb3RvdHlwZS5kZWFjdGl2YXRlID0gZnVuY3Rpb24oKVxue1xuXHRpZighdGhpcy5pc0FjdGl2ZSlcblx0e1xuXHRcdHJldHVybjtcblx0fVxuXG5cdHRoaXMuaXNBY3RpdmUgPSBmYWxzZTtcblxuXHR3aW5kb3cuZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignbW91c2Vtb3ZlJywgdGhpcy5fb25Nb3VzZU1vdmUpO1xuXHR3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsIHRoaXMuX29uS2V5RG93biwgZmFsc2UpO1xuXG5cdHRoaXMucmVuZGVyZXIub2ZmKCdwb3N0cmVuZGVyJywgdGhpcy51cGRhdGUpO1xuXG5cdHRoaXMuZGl2LnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodGhpcy5kaXYpO1xuXG59O1xuXG4vKipcbiAqIFRoaXMgcmVjdXJzaXZlIGZ1bmN0aW9uIHdpbGwgcnVuIHRocm91Z2h0IGhlIHNjZW5lIGdyYXBoIGFuZCBhZGQgYW55IG5ldyBhY2Nlc3NpYmxlIG9iamVjdHMgdG8gdGhlIERPTSBsYXllci5cbiAqIEBwYXJhbSBlbGVtZW50IHtQSVhJLkNvbnRhaW5lcnxQSVhJLlNwcml0ZXxQSVhJLmV4dHJhcy5UaWxpbmdTcHJpdGV9IHRoZSBEaXNwbGF5T2JqZWN0IHRvIGNoZWNrLlxuICogQHByaXZhdGVcbiAqL1xuQWNjZXNzaWJpbGl0eU1hbmFnZXIucHJvdG90eXBlLnVwZGF0ZUFjY2Vzc2libGVPYmplY3RzID0gZnVuY3Rpb24oZGlzcGxheU9iamVjdClcbntcblx0aWYoIWRpc3BsYXlPYmplY3QudmlzaWJsZSlcblx0e1xuXHRcdHJldHVybjtcblx0fVxuXG5cdGlmKGRpc3BsYXlPYmplY3QuYWNjZXNzaWJsZSAmJiBkaXNwbGF5T2JqZWN0LmludGVyYWN0aXZlKVxuXHR7XG5cdFx0aWYoIWRpc3BsYXlPYmplY3QuX2FjY2Vzc2libGVBY3RpdmUpXG5cdFx0e1xuXHRcdFx0dGhpcy5hZGRDaGlsZChkaXNwbGF5T2JqZWN0KTtcblx0XHR9XG5cdCAgIFx0XG5cdCAgIFx0ZGlzcGxheU9iamVjdC5yZW5kZXJJZCA9IHRoaXMucmVuZGVySWQ7XG5cdH1cblxuXHR2YXIgY2hpbGRyZW4gPSBkaXNwbGF5T2JqZWN0LmNoaWxkcmVuO1xuXG5cdGZvciAodmFyIGkgPSBjaGlsZHJlbi5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuXHRcdFxuXHRcdHRoaXMudXBkYXRlQWNjZXNzaWJsZU9iamVjdHMoY2hpbGRyZW5baV0pO1xuXHR9XG59O1xuXG5cbi8qKlxuICogQmVmb3JlIGVhY2ggcmVuZGVyIHRoaXMgZnVuY3Rpb24gd2lsbCBlbnN1cmUgdGhhdCBhbGwgZGl2cyBhcmUgbWFwcGVkIGNvcnJlY3RseSB0byB0aGVpciBEaXNwbGF5T2JqZWN0c1xuICogQHByaXZhdGVcbiAqL1xuQWNjZXNzaWJpbGl0eU1hbmFnZXIucHJvdG90eXBlLnVwZGF0ZSA9IGZ1bmN0aW9uKClcbntcblxuXHQvLyB1cGRhdGUgY2hpbGRyZW4uLi5cblx0dGhpcy51cGRhdGVBY2Nlc3NpYmxlT2JqZWN0cyh0aGlzLnJlbmRlcmVyLl9sYXN0T2JqZWN0UmVuZGVyZWQpO1xuXG5cdHZhciByZWN0ID0gdGhpcy5yZW5kZXJlci52aWV3LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuXHR2YXIgc3ggPSByZWN0LndpZHRoICAvIHRoaXMucmVuZGVyZXIud2lkdGg7XG5cdHZhciBzeSA9IHJlY3QuaGVpZ2h0IC8gdGhpcy5yZW5kZXJlci5oZWlnaHQ7XG5cblx0dmFyIGRpdiA9IHRoaXMuZGl2O1xuXG5cdGRpdi5zdHlsZS5sZWZ0ID0gcmVjdC5sZWZ0ICsgJ3B4Jztcblx0ZGl2LnN0eWxlLnRvcCA9IHJlY3QudG9wICsgJ3B4Jztcblx0ZGl2LnN0eWxlLndpZHRoID0gdGhpcy5yZW5kZXJlci53aWR0aCArICdweCc7XG5cdGRpdi5zdHlsZS5oZWlnaHQgPSB0aGlzLnJlbmRlcmVyLmhlaWdodCArICdweCc7XG5cblx0Zm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmNoaWxkcmVuLmxlbmd0aDsgaSsrKVxuXHR7XG5cblx0XHR2YXIgY2hpbGQgPSB0aGlzLmNoaWxkcmVuW2ldO1xuXG5cdFx0aWYoY2hpbGQucmVuZGVySWQgIT09IHRoaXMucmVuZGVySWQpXG5cdFx0e1xuXHRcdFx0Y2hpbGQuX2FjY2Vzc2libGVBY3RpdmUgPSBmYWxzZTtcblxuICAgICAgICAgICAgY29yZS51dGlscy5yZW1vdmVJdGVtcyh0aGlzLmNoaWxkcmVuLCBpLCAxKTtcblx0XHRcdHRoaXMuZGl2LnJlbW92ZUNoaWxkKCBjaGlsZC5fYWNjZXNzaWJsZURpdiApO1xuXHRcdFx0dGhpcy5wb29sLnB1c2goY2hpbGQuX2FjY2Vzc2libGVEaXYpO1xuXHRcdFx0Y2hpbGQuX2FjY2Vzc2libGVEaXYgPSBudWxsO1xuXG5cdFx0XHRpLS07XG5cblx0XHRcdGlmKHRoaXMuY2hpbGRyZW4ubGVuZ3RoID09PSAwKVxuXHRcdFx0e1xuXHRcdFx0XHR0aGlzLmRlYWN0aXZhdGUoKTtcblx0XHRcdH1cblx0XHR9XG5cdFx0ZWxzZVxuXHRcdHtcblx0XHRcdC8vIG1hcCBkaXYgdG8gZGlzcGxheS4uXG5cdFx0XHRkaXYgPSBjaGlsZC5fYWNjZXNzaWJsZURpdjtcblx0XHRcdHZhciBoaXRBcmVhID0gY2hpbGQuaGl0QXJlYTtcblx0XHRcdHZhciB3dCA9IGNoaWxkLndvcmxkVHJhbnNmb3JtO1xuXG5cdFx0XHRpZihjaGlsZC5oaXRBcmVhKVxuXHRcdFx0e1xuXHRcdFx0XHRkaXYuc3R5bGUubGVmdCA9ICgod3QudHggKyAoaGl0QXJlYS54ICogd3QuYSkpICogc3gpICsgJ3B4Jztcblx0XHRcdFx0ZGl2LnN0eWxlLnRvcCA9ICAoKHd0LnR5ICsgKGhpdEFyZWEueSAqIHd0LmQpKSAqIHN5KSArICAncHgnO1xuXG5cdFx0XHRcdGRpdi5zdHlsZS53aWR0aCA9IChoaXRBcmVhLndpZHRoICogd3QuYSAqIHN4KSArICdweCc7XG5cdFx0XHRcdGRpdi5zdHlsZS5oZWlnaHQgPSAoaGl0QXJlYS5oZWlnaHQgKiB3dC5kICogc3kpICsgJ3B4Jztcblx0XHRcdFxuXHRcdFx0fVxuXHRcdFx0ZWxzZVxuXHRcdFx0e1xuXHRcdFx0XHRoaXRBcmVhID0gY2hpbGQuZ2V0Qm91bmRzKCk7XG5cblx0XHRcdFx0dGhpcy5jYXBIaXRBcmVhKGhpdEFyZWEpO1xuXG5cdFx0XHRcdGRpdi5zdHlsZS5sZWZ0ID0gKGhpdEFyZWEueCAqIHN4KSArICdweCc7XG5cdFx0XHRcdGRpdi5zdHlsZS50b3AgPSAgKGhpdEFyZWEueSAqIHN5KSArICAncHgnO1xuXG5cdFx0XHRcdGRpdi5zdHlsZS53aWR0aCA9IChoaXRBcmVhLndpZHRoICogc3gpICsgJ3B4Jztcblx0XHRcdFx0ZGl2LnN0eWxlLmhlaWdodCA9IChoaXRBcmVhLmhlaWdodCAqIHN5KSArICdweCc7XG5cdFx0XHR9XHRcdFxuXHRcdH1cblx0fVxuXG5cdC8vIGluY3JlbWVudCB0aGUgcmVuZGVyIGlkLi5cblx0dGhpcy5yZW5kZXJJZCsrO1xufTtcblxuQWNjZXNzaWJpbGl0eU1hbmFnZXIucHJvdG90eXBlLmNhcEhpdEFyZWEgPSBmdW5jdGlvbiAoaGl0QXJlYSlcbntcbiAgICBpZiAoaGl0QXJlYS54IDwgMClcbiAgICB7XG4gICAgICAgIGhpdEFyZWEud2lkdGggKz0gaGl0QXJlYS54O1xuICAgICAgICBoaXRBcmVhLnggPSAwO1xuICAgIH1cblxuICAgIGlmIChoaXRBcmVhLnkgPCAwKVxuICAgIHtcbiAgICAgICAgaGl0QXJlYS5oZWlnaHQgKz0gaGl0QXJlYS55O1xuICAgICAgICBoaXRBcmVhLnkgPSAwO1xuICAgIH1cblxuICAgIGlmICggaGl0QXJlYS54ICsgaGl0QXJlYS53aWR0aCA+IHRoaXMucmVuZGVyZXIud2lkdGggKVxuICAgIHtcbiAgICAgICAgaGl0QXJlYS53aWR0aCA9IHRoaXMucmVuZGVyZXIud2lkdGggLSBoaXRBcmVhLng7XG4gICAgfVxuXG4gICAgaWYgKCBoaXRBcmVhLnkgKyBoaXRBcmVhLmhlaWdodCA+IHRoaXMucmVuZGVyZXIuaGVpZ2h0IClcbiAgICB7XG4gICAgICAgIGhpdEFyZWEuaGVpZ2h0ID0gdGhpcy5yZW5kZXJlci5oZWlnaHQgLSBoaXRBcmVhLnk7XG4gICAgfVxufTtcblxuXG4vKipcbiAqIEFkZHMgYSBEaXNwbGF5T2JqZWN0IHRvIHRoZSBhY2Nlc3NpYmlsaXR5IG1hbmFnZXJcbiAqIEBwcml2YXRlXG4gKi9cbkFjY2Vzc2liaWxpdHlNYW5hZ2VyLnByb3RvdHlwZS5hZGRDaGlsZCA9IGZ1bmN0aW9uKGRpc3BsYXlPYmplY3QpXG57XG4vL1x0dGhpcy5hY3RpdmF0ZSgpO1xuXHRcblx0dmFyIGRpdiA9IHRoaXMucG9vbC5wb3AoKTtcblxuXHRpZighZGl2KVxuXHR7XG5cdFx0ZGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYnV0dG9uJyk7IFxuXG5cdCAgICBkaXYuc3R5bGUud2lkdGggPSAxMDAgKyAncHgnO1xuXHQgICAgZGl2LnN0eWxlLmhlaWdodCA9IDEwMCArICdweCc7XG5cdCAgICBkaXYuc3R5bGUuYmFja2dyb3VuZENvbG9yID0gdGhpcy5kZWJ1ZyA/ICdyZ2JhKDI1NSwwLDAsMC41KScgOiAndHJhbnNwYXJlbnQnO1xuXHQgICAgZGl2LnN0eWxlLnBvc2l0aW9uID0gJ2Fic29sdXRlJztcblx0ICAgIGRpdi5zdHlsZS56SW5kZXggPSAyO1xuXHQgICAgZGl2LnN0eWxlLmJvcmRlclN0eWxlID0gJ25vbmUnO1xuXG5cdCAgICBcblx0ICAgIGRpdi5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIHRoaXMuX29uQ2xpY2suYmluZCh0aGlzKSk7XG5cdCAgICBkaXYuYWRkRXZlbnRMaXN0ZW5lcignZm9jdXMnLCB0aGlzLl9vbkZvY3VzLmJpbmQodGhpcykpO1xuXHQgICAgZGl2LmFkZEV2ZW50TGlzdGVuZXIoJ2ZvY3Vzb3V0JywgdGhpcy5fb25Gb2N1c091dC5iaW5kKHRoaXMpKTtcblx0fVxuXHQgICBcdFxuXG5cblxuXHRkaXYudGl0bGUgPSBkaXNwbGF5T2JqZWN0LmFjY2Vzc2libGVUaXRsZSB8fCAnZGlzcGxheU9iamVjdCAnICsgdGhpcy50YWJJbmRleDtcblxuXHQvL1xuXHRcblx0ZGlzcGxheU9iamVjdC5fYWNjZXNzaWJsZUFjdGl2ZSA9IHRydWU7XG5cdGRpc3BsYXlPYmplY3QuX2FjY2Vzc2libGVEaXYgPSBkaXY7XG5cdGRpdi5kaXNwbGF5T2JqZWN0ID0gZGlzcGxheU9iamVjdDtcblxuXG5cdHRoaXMuY2hpbGRyZW4ucHVzaChkaXNwbGF5T2JqZWN0KTtcblx0dGhpcy5kaXYuYXBwZW5kQ2hpbGQoIGRpc3BsYXlPYmplY3QuX2FjY2Vzc2libGVEaXYgKTtcblx0ZGlzcGxheU9iamVjdC5fYWNjZXNzaWJsZURpdi50YWJJbmRleCA9IGRpc3BsYXlPYmplY3QudGFiSW5kZXg7XG59O1xuXG5cbi8qKlxuICogTWFwcyB0aGUgZGl2IGJ1dHRvbiBwcmVzcyB0byBwaXhpJ3MgSW50ZXJhY3Rpb25NYW5hZ2VyIChjbGljaylcbiAqIEBwcml2YXRlXG4gKi9cbkFjY2Vzc2liaWxpdHlNYW5hZ2VyLnByb3RvdHlwZS5fb25DbGljayA9IGZ1bmN0aW9uKGUpXG57XG5cdHZhciBpbnRlcmFjdGlvbk1hbmFnZXIgPSB0aGlzLnJlbmRlcmVyLnBsdWdpbnMuaW50ZXJhY3Rpb247XG5cdGludGVyYWN0aW9uTWFuYWdlci5kaXNwYXRjaEV2ZW50KGUudGFyZ2V0LmRpc3BsYXlPYmplY3QsICdjbGljaycsIGludGVyYWN0aW9uTWFuYWdlci5ldmVudERhdGEpO1xufTtcblxuLyoqXG4gKiBNYXBzIHRoZSBkaXYgZm9jdXMgZXZlbnRzIHRvIHBpeGlzIEludGVyYWN0aW9uTWFuYWdlciAobW91c2VvdmVyKVxuICogQHByaXZhdGVcbiAqL1xuQWNjZXNzaWJpbGl0eU1hbmFnZXIucHJvdG90eXBlLl9vbkZvY3VzID0gZnVuY3Rpb24oZSlcbntcblx0dmFyIGludGVyYWN0aW9uTWFuYWdlciA9IHRoaXMucmVuZGVyZXIucGx1Z2lucy5pbnRlcmFjdGlvbjtcblx0aW50ZXJhY3Rpb25NYW5hZ2VyLmRpc3BhdGNoRXZlbnQoZS50YXJnZXQuZGlzcGxheU9iamVjdCwgJ21vdXNlb3ZlcicsIGludGVyYWN0aW9uTWFuYWdlci5ldmVudERhdGEpO1xufTtcblxuLyoqXG4gKiBNYXBzIHRoZSBkaXYgZm9jdXMgZXZlbnRzIHRvIHBpeGlzIEludGVyYWN0aW9uTWFuYWdlciAobW91c2VvdXQpXG4gKiBAcHJpdmF0ZVxuICovXG5BY2Nlc3NpYmlsaXR5TWFuYWdlci5wcm90b3R5cGUuX29uRm9jdXNPdXQgPSBmdW5jdGlvbihlKVxue1xuXHR2YXIgaW50ZXJhY3Rpb25NYW5hZ2VyID0gdGhpcy5yZW5kZXJlci5wbHVnaW5zLmludGVyYWN0aW9uO1xuXHRpbnRlcmFjdGlvbk1hbmFnZXIuZGlzcGF0Y2hFdmVudChlLnRhcmdldC5kaXNwbGF5T2JqZWN0LCAnbW91c2VvdXQnLCBpbnRlcmFjdGlvbk1hbmFnZXIuZXZlbnREYXRhKTtcbn07XG5cbi8qKlxuICogSXMgY2FsbGVkIHdoZW4gYSBrZXkgaXMgcHJlc3NlZFxuICpcbiAqIEBwcml2YXRlXG4gKi9cbkFjY2Vzc2liaWxpdHlNYW5hZ2VyLnByb3RvdHlwZS5fb25LZXlEb3duID0gZnVuY3Rpb24oZSlcbntcblx0aWYoZS5rZXlDb2RlICE9PSA5KVxuXHR7XG5cdFx0cmV0dXJuO1xuXHR9XG5cblx0dGhpcy5hY3RpdmF0ZSgpO1xufTtcblxuLyoqXG4gKiBJcyBjYWxsZWQgd2hlbiB0aGUgbW91c2UgbW92ZXMgYWNyb3NzIHRoZSByZW5kZXJlciBlbGVtZW50XG4gKlxuICogQHByaXZhdGVcbiAqL1xuQWNjZXNzaWJpbGl0eU1hbmFnZXIucHJvdG90eXBlLl9vbk1vdXNlTW92ZSA9IGZ1bmN0aW9uKClcbntcblx0dGhpcy5kZWFjdGl2YXRlKCk7XG59O1xuXG5cbi8qKlxuICogRGVzdHJveXMgdGhlIGFjY2Vzc2liaWxpdHkgbWFuYWdlclxuICpcbiAqL1xuQWNjZXNzaWJpbGl0eU1hbmFnZXIucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoKSBcbntcblx0dGhpcy5kaXYgPSBudWxsO1xuXG5cdGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5jaGlsZHJlbi5sZW5ndGg7IGkrKylcblx0e1xuXHRcdHRoaXMuY2hpbGRyZW5baV0uZGl2ID0gbnVsbDtcblx0fVxuXG5cdFxuXHR3aW5kb3cuZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignbW91c2Vtb3ZlJywgdGhpcy5fb25Nb3VzZU1vdmUpO1xuXHR3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsIHRoaXMuX29uS2V5RG93bik7XG5cdFx0XG5cdHRoaXMucG9vbCA9IG51bGw7XG5cdHRoaXMuY2hpbGRyZW4gPSBudWxsO1xuXHR0aGlzLnJlbmRlcmVyID0gbnVsbDtcblxufTtcblxuY29yZS5XZWJHTFJlbmRlcmVyLnJlZ2lzdGVyUGx1Z2luKCdhY2Nlc3NpYmlsaXR5JywgQWNjZXNzaWJpbGl0eU1hbmFnZXIpO1xuY29yZS5DYW52YXNSZW5kZXJlci5yZWdpc3RlclBsdWdpbignYWNjZXNzaWJpbGl0eScsIEFjY2Vzc2liaWxpdHlNYW5hZ2VyKTtcblxuIiwiLyoqXG4gKiBEZWZhdWx0IHByb3BlcnR5IHZhbHVlcyBvZiBhY2Nlc3NpYmxlIG9iamVjdHNcbiAqIHVzZWQgYnkge0BsaW5rIFBJWEkuYWNjZXNzaWJpbGl0eS5BY2Nlc3NpYmlsaXR5TWFuYWdlcn0uXG4gKlxuICogQG1peGluXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQGV4YW1wbGVcbiAqICAgICAgZnVuY3Rpb24gTXlPYmplY3QoKSB7fVxuICpcbiAqICAgICAgT2JqZWN0LmFzc2lnbihcbiAqICAgICAgICAgIE15T2JqZWN0LnByb3RvdHlwZSxcbiAqICAgICAgICAgIFBJWEkuYWNjZXNzaWJpbGl0eS5hY2Nlc3NpYmxlVGFyZ2V0XG4gKiAgICAgICk7XG4gKi9cbnZhciBhY2Nlc3NpYmxlVGFyZ2V0ID0ge1xuICAgIFxuICAgIC8qKlxuICAgICAqIEB0b2RvIE5lZWRzIGRvY3MuXG4gICAgICovXG4gICAgYWNjZXNzaWJsZTpmYWxzZSxcblxuICAgIC8qKlxuICAgICAqIEB0b2RvIE5lZWRzIGRvY3MuXG4gICAgICovXG4gICAgYWNjZXNzaWJsZVRpdGxlOm51bGwsXG5cbiAgICAvKipcbiAgICAgKiBAdG9kbyBOZWVkcyBkb2NzLlxuICAgICAqL1xuICAgIHRhYkluZGV4OjAsXG5cbiAgICAvKipcbiAgICAgKiBAdG9kbyBOZWVkcyBkb2NzLlxuICAgICAqL1xuICAgIF9hY2Nlc3NpYmxlQWN0aXZlOmZhbHNlLFxuXG4gICAgLyoqXG4gICAgICogQHRvZG8gTmVlZHMgZG9jcy5cbiAgICAgKi9cbiAgICBfYWNjZXNzaWJsZURpdjpmYWxzZVxuXG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGFjY2Vzc2libGVUYXJnZXQ7XG4iLCIvKipcbiAqIEBmaWxlICAgICAgICBNYWluIGV4cG9ydCBvZiB0aGUgUElYSSBhY2Nlc3NpYmlsaXR5IGxpYnJhcnlcbiAqIEBhdXRob3IgICAgICBNYXQgR3JvdmVzIDxtYXRAZ29vZGJveWRpZ2l0YWwuY29tPlxuICogQGNvcHlyaWdodCAgIDIwMTMtMjAxNSBHb29kQm95RGlnaXRhbFxuICogQGxpY2Vuc2UgICAgIHtAbGluayBodHRwczovL2dpdGh1Yi5jb20vcGl4aWpzL3BpeGkuanMvYmxvYi9tYXN0ZXIvTElDRU5TRXxNSVQgTGljZW5zZX1cbiAqL1xuXG4vKipcbiAqIEBuYW1lc3BhY2UgUElYSS5pbnRlcmFjdGlvblxuICovXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgICBhY2Nlc3NpYmxlVGFyZ2V0OiAgICAgcmVxdWlyZSgnLi9hY2Nlc3NpYmxlVGFyZ2V0JyksXG4gICAgQWNjZXNzaWJpbGl0eU1hbmFnZXI6IHJlcXVpcmUoJy4vQWNjZXNzaWJpbGl0eU1hbmFnZXInKVxufTtcbiIsIi8qKlxuICogQ29uc3RhbnQgdmFsdWVzIHVzZWQgaW4gcGl4aVxuICpcbiAqIEBsZW5kcyBQSVhJXG4gKi9cbnZhciBDT05TVCA9IHtcbiAgICAvKipcbiAgICAgKiBTdHJpbmcgb2YgdGhlIGN1cnJlbnQgUElYSSB2ZXJzaW9uXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQGNvbnN0YW50XG4gICAgICogQHByb3BlcnR5IHtzdHJpbmd9IFZFUlNJT05cbiAgICAgKi9cbiAgICBWRVJTSU9OOiByZXF1aXJlKCcuLi8uLi9wYWNrYWdlLmpzb24nKS52ZXJzaW9uLFxuXG4gICAgLyoqXG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IFBJXzIgLSBUd28gUGlcbiAgICAgKiBAY29uc3RhbnRcbiAgICAgKiBAc3RhdGljXG4gICAgICovXG4gICAgUElfMjogTWF0aC5QSSAqIDIsXG5cbiAgICAvKipcbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gUkFEX1RPX0RFRyAtIENvbnN0YW50IGNvbnZlcnNpb24gZmFjdG9yIGZvciBjb252ZXJ0aW5nIHJhZGlhbnMgdG8gZGVncmVlc1xuICAgICAqIEBjb25zdGFudFxuICAgICAqIEBzdGF0aWNcbiAgICAgKi9cbiAgICBSQURfVE9fREVHOiAxODAgLyBNYXRoLlBJLFxuXG4gICAgLyoqXG4gICAgICogQHByb3BlcnR5IHtOdW1iZXJ9IERFR19UT19SQUQgLSBDb25zdGFudCBjb252ZXJzaW9uIGZhY3RvciBmb3IgY29udmVydGluZyBkZWdyZWVzIHRvIHJhZGlhbnNcbiAgICAgKiBAY29uc3RhbnRcbiAgICAgKiBAc3RhdGljXG4gICAgICovXG4gICAgREVHX1RPX1JBRDogTWF0aC5QSSAvIDE4MCxcblxuICAgIC8qKlxuICAgICAqIFRhcmdldCBmcmFtZXMgcGVyIG1pbGxpc2Vjb25kLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBjb25zdGFudFxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBUQVJHRVRfRlBNUz0wLjA2XG4gICAgICovXG4gICAgVEFSR0VUX0ZQTVM6IDAuMDYsXG5cbiAgICAvKipcbiAgICAgKiBDb25zdGFudCB0byBpZGVudGlmeSB0aGUgUmVuZGVyZXIgVHlwZS5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAY29uc3RhbnRcbiAgICAgKiBAcHJvcGVydHkge29iamVjdH0gUkVOREVSRVJfVFlQRVxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBSRU5ERVJFUl9UWVBFLlVOS05PV05cbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gUkVOREVSRVJfVFlQRS5XRUJHTFxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBSRU5ERVJFUl9UWVBFLkNBTlZBU1xuICAgICAqL1xuICAgIFJFTkRFUkVSX1RZUEU6IHtcbiAgICAgICAgVU5LTk9XTjogICAgMCxcbiAgICAgICAgV0VCR0w6ICAgICAgMSxcbiAgICAgICAgQ0FOVkFTOiAgICAgMlxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBWYXJpb3VzIGJsZW5kIG1vZGVzIHN1cHBvcnRlZCBieSBQSVhJLiBJTVBPUlRBTlQgLSBUaGUgV2ViR0wgcmVuZGVyZXIgb25seSBzdXBwb3J0c1xuICAgICAqIHRoZSBOT1JNQUwsIEFERCwgTVVMVElQTFkgYW5kIFNDUkVFTiBibGVuZCBtb2Rlcy4gQW55dGhpbmcgZWxzZSB3aWxsIHNpbGVudGx5IGFjdCBsaWtlXG4gICAgICogTk9STUFMLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBjb25zdGFudFxuICAgICAqIEBwcm9wZXJ0eSB7b2JqZWN0fSBCTEVORF9NT0RFU1xuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBCTEVORF9NT0RFUy5OT1JNQUxcbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gQkxFTkRfTU9ERVMuQUREXG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IEJMRU5EX01PREVTLk1VTFRJUExZXG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IEJMRU5EX01PREVTLlNDUkVFTlxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBCTEVORF9NT0RFUy5PVkVSTEFZXG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IEJMRU5EX01PREVTLkRBUktFTlxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBCTEVORF9NT0RFUy5MSUdIVEVOXG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IEJMRU5EX01PREVTLkNPTE9SX0RPREdFXG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IEJMRU5EX01PREVTLkNPTE9SX0JVUk5cbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gQkxFTkRfTU9ERVMuSEFSRF9MSUdIVFxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBCTEVORF9NT0RFUy5TT0ZUX0xJR0hUXG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IEJMRU5EX01PREVTLkRJRkZFUkVOQ0VcbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gQkxFTkRfTU9ERVMuRVhDTFVTSU9OXG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IEJMRU5EX01PREVTLkhVRVxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBCTEVORF9NT0RFUy5TQVRVUkFUSU9OXG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IEJMRU5EX01PREVTLkNPTE9SXG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IEJMRU5EX01PREVTLkxVTUlOT1NJVFlcbiAgICAgKi9cbiAgICBCTEVORF9NT0RFUzoge1xuICAgICAgICBOT1JNQUw6ICAgICAgICAgMCxcbiAgICAgICAgQUREOiAgICAgICAgICAgIDEsXG4gICAgICAgIE1VTFRJUExZOiAgICAgICAyLFxuICAgICAgICBTQ1JFRU46ICAgICAgICAgMyxcbiAgICAgICAgT1ZFUkxBWTogICAgICAgIDQsXG4gICAgICAgIERBUktFTjogICAgICAgICA1LFxuICAgICAgICBMSUdIVEVOOiAgICAgICAgNixcbiAgICAgICAgQ09MT1JfRE9ER0U6ICAgIDcsXG4gICAgICAgIENPTE9SX0JVUk46ICAgICA4LFxuICAgICAgICBIQVJEX0xJR0hUOiAgICAgOSxcbiAgICAgICAgU09GVF9MSUdIVDogICAgIDEwLFxuICAgICAgICBESUZGRVJFTkNFOiAgICAgMTEsXG4gICAgICAgIEVYQ0xVU0lPTjogICAgICAxMixcbiAgICAgICAgSFVFOiAgICAgICAgICAgIDEzLFxuICAgICAgICBTQVRVUkFUSU9OOiAgICAgMTQsXG4gICAgICAgIENPTE9SOiAgICAgICAgICAxNSxcbiAgICAgICAgTFVNSU5PU0lUWTogICAgIDE2XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFZhcmlvdXMgd2ViZ2wgZHJhdyBtb2Rlcy4gVGhlc2UgY2FuIGJlIHVzZWQgdG8gc3BlY2lmeSB3aGljaCBHTCBkcmF3TW9kZSB0byB1c2VcbiAgICAgKiB1bmRlciBjZXJ0YWluIHNpdHVhdGlvbnMgYW5kIHJlbmRlcmVycy5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAY29uc3RhbnRcbiAgICAgKiBAcHJvcGVydHkge29iamVjdH0gRFJBV19NT0RFU1xuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBEUkFXX01PREVTLlBPSU5UU1xuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBEUkFXX01PREVTLkxJTkVTXG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IERSQVdfTU9ERVMuTElORV9MT09QXG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IERSQVdfTU9ERVMuTElORV9TVFJJUFxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBEUkFXX01PREVTLlRSSUFOR0xFU1xuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBEUkFXX01PREVTLlRSSUFOR0xFX1NUUklQXG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IERSQVdfTU9ERVMuVFJJQU5HTEVfRkFOXG4gICAgICovXG4gICAgRFJBV19NT0RFUzoge1xuICAgICAgICBQT0lOVFM6ICAgICAgICAgMCxcbiAgICAgICAgTElORVM6ICAgICAgICAgIDEsXG4gICAgICAgIExJTkVfTE9PUDogICAgICAyLFxuICAgICAgICBMSU5FX1NUUklQOiAgICAgMyxcbiAgICAgICAgVFJJQU5HTEVTOiAgICAgIDQsXG4gICAgICAgIFRSSUFOR0xFX1NUUklQOiA1LFxuICAgICAgICBUUklBTkdMRV9GQU46ICAgNlxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBUaGUgc2NhbGUgbW9kZXMgdGhhdCBhcmUgc3VwcG9ydGVkIGJ5IHBpeGkuXG4gICAgICpcbiAgICAgKiBUaGUgREVGQVVMVCBzY2FsZSBtb2RlIGFmZmVjdHMgdGhlIGRlZmF1bHQgc2NhbGluZyBtb2RlIG9mIGZ1dHVyZSBvcGVyYXRpb25zLlxuICAgICAqIEl0IGNhbiBiZSByZS1hc3NpZ25lZCB0byBlaXRoZXIgTElORUFSIG9yIE5FQVJFU1QsIGRlcGVuZGluZyB1cG9uIHN1aXRhYmlsaXR5LlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBjb25zdGFudFxuICAgICAqIEBwcm9wZXJ0eSB7b2JqZWN0fSBTQ0FMRV9NT0RFU1xuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBTQ0FMRV9NT0RFUy5ERUZBVUxUPUxJTkVBUlxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBTQ0FMRV9NT0RFUy5MSU5FQVIgU21vb3RoIHNjYWxpbmdcbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gU0NBTEVfTU9ERVMuTkVBUkVTVCBQaXhlbGF0aW5nIHNjYWxpbmdcbiAgICAgKi9cbiAgICBTQ0FMRV9NT0RFUzoge1xuICAgICAgICBERUZBVUxUOiAgICAwLFxuICAgICAgICBMSU5FQVI6ICAgICAwLFxuICAgICAgICBORUFSRVNUOiAgICAxXG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFRoZSBwcmVmaXggdGhhdCBkZW5vdGVzIGEgVVJMIGlzIGZvciBhIHJldGluYSBhc3NldFxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBjb25zdGFudFxuICAgICAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBSRVRJTkFfUFJFRklYXG4gICAgICovXG4gICAgLy9leGFtcGxlOiAnQDJ4JyxcbiAgICBSRVRJTkFfUFJFRklYOiAvQCguKyl4LyxcblxuICAgIFJFU09MVVRJT046MSxcblxuICAgIEZJTFRFUl9SRVNPTFVUSU9OOjEsXG5cbiAgICAvKipcbiAgICAgKiBUaGUgZGVmYXVsdCByZW5kZXIgb3B0aW9ucyBpZiBub25lIGFyZSBzdXBwbGllZCB0byB7QGxpbmsgUElYSS5XZWJHTFJlbmRlcmVyfVxuICAgICAqIG9yIHtAbGluayBQSVhJLkNhbnZhc1JlbmRlcmVyfS5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAY29uc3RhbnRcbiAgICAgKiBAcHJvcGVydHkge29iamVjdH0gREVGQVVMVF9SRU5ERVJfT1BUSU9OU1xuICAgICAqIEBwcm9wZXJ0eSB7SFRNTENhbnZhc0VsZW1lbnR9IERFRkFVTFRfUkVOREVSX09QVElPTlMudmlldz1udWxsXG4gICAgICogQHByb3BlcnR5IHtib29sZWFufSBERUZBVUxUX1JFTkRFUl9PUFRJT05TLnRyYW5zcGFyZW50PWZhbHNlXG4gICAgICogQHByb3BlcnR5IHtib29sZWFufSBERUZBVUxUX1JFTkRFUl9PUFRJT05TLmFudGlhbGlhcz1mYWxzZVxuICAgICAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gREVGQVVMVF9SRU5ERVJfT1BUSU9OUy5mb3JjZUZYQUE9ZmFsc2VcbiAgICAgKiBAcHJvcGVydHkge2Jvb2xlYW59IERFRkFVTFRfUkVOREVSX09QVElPTlMucHJlc2VydmVEcmF3aW5nQnVmZmVyPWZhbHNlXG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IERFRkFVTFRfUkVOREVSX09QVElPTlMucmVzb2x1dGlvbj0xXG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IERFRkFVTFRfUkVOREVSX09QVElPTlMuYmFja2dyb3VuZENvbG9yPTB4MDAwMDAwXG4gICAgICogQHByb3BlcnR5IHtib29sZWFufSBERUZBVUxUX1JFTkRFUl9PUFRJT05TLmNsZWFyQmVmb3JlUmVuZGVyPXRydWVcbiAgICAgKiBAcHJvcGVydHkge2Jvb2xlYW59IERFRkFVTFRfUkVOREVSX09QVElPTlMuYXV0b1Jlc2l6ZT1mYWxzZVxuICAgICAqL1xuICAgIERFRkFVTFRfUkVOREVSX09QVElPTlM6IHtcbiAgICAgICAgdmlldzogbnVsbCxcbiAgICAgICAgcmVzb2x1dGlvbjogMSxcbiAgICAgICAgYW50aWFsaWFzOiBmYWxzZSxcbiAgICAgICAgZm9yY2VGWEFBOiBmYWxzZSxcbiAgICAgICAgYXV0b1Jlc2l6ZTogZmFsc2UsXG4gICAgICAgIHRyYW5zcGFyZW50OiBmYWxzZSxcbiAgICAgICAgYmFja2dyb3VuZENvbG9yOiAweDAwMDAwMCxcbiAgICAgICAgY2xlYXJCZWZvcmVSZW5kZXI6IHRydWUsXG4gICAgICAgIHByZXNlcnZlRHJhd2luZ0J1ZmZlcjogZmFsc2UsXG4gICAgICAgIHJvdW5kUGl4ZWxzOiBmYWxzZVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBDb25zdGFudHMgdGhhdCBpZGVudGlmeSBzaGFwZXMsIG1haW5seSB0byBwcmV2ZW50IGBpbnN0YW5jZW9mYCBjYWxscy5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAY29uc3RhbnRcbiAgICAgKiBAcHJvcGVydHkge29iamVjdH0gU0hBUEVTXG4gICAgICogQHByb3BlcnR5IHtvYmplY3R9IFNIQVBFUy5QT0xZPTBcbiAgICAgKiBAcHJvcGVydHkge29iamVjdH0gU0hBUEVTLlJFQ1Q9MVxuICAgICAqIEBwcm9wZXJ0eSB7b2JqZWN0fSBTSEFQRVMuQ0lSQz0yXG4gICAgICogQHByb3BlcnR5IHtvYmplY3R9IFNIQVBFUy5FTElQPTNcbiAgICAgKiBAcHJvcGVydHkge29iamVjdH0gU0hBUEVTLlJSRUM9NFxuICAgICAqL1xuICAgIFNIQVBFUzoge1xuICAgICAgICBQT0xZOiAwLFxuICAgICAgICBSRUNUOiAxLFxuICAgICAgICBDSVJDOiAyLFxuICAgICAgICBFTElQOiAzLFxuICAgICAgICBSUkVDOiA0XG4gICAgfSxcblxuICAgIC8vIFRPRE86IG1heWJlIGNoYW5nZSB0byBTUFJJVEUuQkFUQ0hfU0laRTogMjAwMFxuICAgIC8vIFRPRE86IG1heWJlIGFkZCBQQVJUSUNMRS5CQVRDSF9TSVpFOiAxNTAwMFxuICAgIFNQUklURV9CQVRDSF9TSVpFOiAyMDAwIC8vbmljZSBiYWxhbmNlIGJldHdlZW4gbW9iaWxlIGFuZCBkZXNrdG9wIG1hY2hpbmVzXG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IENPTlNUO1xuIiwidmFyIG1hdGggPSByZXF1aXJlKCcuLi9tYXRoJyksXG4gICAgdXRpbHMgPSByZXF1aXJlKCcuLi91dGlscycpLFxuICAgIERpc3BsYXlPYmplY3QgPSByZXF1aXJlKCcuL0Rpc3BsYXlPYmplY3QnKSxcbiAgICBSZW5kZXJUZXh0dXJlID0gcmVxdWlyZSgnLi4vdGV4dHVyZXMvUmVuZGVyVGV4dHVyZScpLFxuICAgIF90ZW1wTWF0cml4ID0gbmV3IG1hdGguTWF0cml4KCk7XG5cbi8qKlxuICogQSBDb250YWluZXIgcmVwcmVzZW50cyBhIGNvbGxlY3Rpb24gb2YgZGlzcGxheSBvYmplY3RzLlxuICogSXQgaXMgdGhlIGJhc2UgY2xhc3Mgb2YgYWxsIGRpc3BsYXkgb2JqZWN0cyB0aGF0IGFjdCBhcyBhIGNvbnRhaW5lciBmb3Igb3RoZXIgb2JqZWN0cy5cbiAqXG4gKmBgYGpzXG4gKiB2YXIgY29udGFpbmVyID0gbmV3IFBJWEkuQ29udGFpbmVyKCk7XG4gKiBjb250YWluZXIuYWRkQ2hpbGQoc3ByaXRlKTtcbiAqIGBgYFxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLkRpc3BsYXlPYmplY3RcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKi9cbmZ1bmN0aW9uIENvbnRhaW5lcigpXG57XG4gICAgRGlzcGxheU9iamVjdC5jYWxsKHRoaXMpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGFycmF5IG9mIGNoaWxkcmVuIG9mIHRoaXMgY29udGFpbmVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5EaXNwbGF5T2JqZWN0W119XG4gICAgICogQHJlYWRvbmx5XG4gICAgICovXG4gICAgdGhpcy5jaGlsZHJlbiA9IFtdO1xufVxuXG4vLyBjb25zdHJ1Y3RvclxuQ29udGFpbmVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoRGlzcGxheU9iamVjdC5wcm90b3R5cGUpO1xuQ29udGFpbmVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IENvbnRhaW5lcjtcbm1vZHVsZS5leHBvcnRzID0gQ29udGFpbmVyO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhDb250YWluZXIucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogVGhlIHdpZHRoIG9mIHRoZSBDb250YWluZXIsIHNldHRpbmcgdGhpcyB3aWxsIGFjdHVhbGx5IG1vZGlmeSB0aGUgc2NhbGUgdG8gYWNoaWV2ZSB0aGUgdmFsdWUgc2V0XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuQ29udGFpbmVyI1xuICAgICAqL1xuICAgIHdpZHRoOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuc2NhbGUueCAqIHRoaXMuZ2V0TG9jYWxCb3VuZHMoKS53aWR0aDtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcblxuICAgICAgICAgICAgdmFyIHdpZHRoID0gdGhpcy5nZXRMb2NhbEJvdW5kcygpLndpZHRoO1xuXG4gICAgICAgICAgICBpZiAod2lkdGggIT09IDApXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdGhpcy5zY2FsZS54ID0gdmFsdWUgLyB3aWR0aDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNjYWxlLnggPSAxO1xuICAgICAgICAgICAgfVxuXG5cbiAgICAgICAgICAgIHRoaXMuX3dpZHRoID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVGhlIGhlaWdodCBvZiB0aGUgQ29udGFpbmVyLCBzZXR0aW5nIHRoaXMgd2lsbCBhY3R1YWxseSBtb2RpZnkgdGhlIHNjYWxlIHRvIGFjaGlldmUgdGhlIHZhbHVlIHNldFxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLkNvbnRhaW5lciNcbiAgICAgKi9cbiAgICBoZWlnaHQ6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gIHRoaXMuc2NhbGUueSAqIHRoaXMuZ2V0TG9jYWxCb3VuZHMoKS5oZWlnaHQ7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG5cbiAgICAgICAgICAgIHZhciBoZWlnaHQgPSB0aGlzLmdldExvY2FsQm91bmRzKCkuaGVpZ2h0O1xuXG4gICAgICAgICAgICBpZiAoaGVpZ2h0ICE9PSAwKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHRoaXMuc2NhbGUueSA9IHZhbHVlIC8gaGVpZ2h0IDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNjYWxlLnkgPSAxO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLl9oZWlnaHQgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuXG4vKipcbiAqIE92ZXJyaWRhYmxlIG1ldGhvZCB0aGF0IGNhbiBiZSB1c2VkIGJ5IENvbnRhaW5lciBzdWJjbGFzc2VzIHdoZW5ldmVyIHRoZSBjaGlsZHJlbiBhcnJheSBpcyBtb2RpZmllZFxuICpcbiAqIEBwcml2YXRlXG4gKi9cbkNvbnRhaW5lci5wcm90b3R5cGUub25DaGlsZHJlbkNoYW5nZSA9IGZ1bmN0aW9uICgpIHt9O1xuXG4vKipcbiAqIEFkZHMgYSBjaGlsZCB0byB0aGUgY29udGFpbmVyLlxuICogXG4gKiBZb3UgY2FuIGFsc28gYWRkIG11bHRwbGUgaXRlbXMgbGlrZSBzbzogbXlDb250YWluZXIuYWRkQ2hpbGQodGhpbmtPbmUsIHRoaW5nVHdvLCB0aGluZ1RocmVlKVxuICogQHBhcmFtIGNoaWxkIHtQSVhJLkRpc3BsYXlPYmplY3R9IFRoZSBEaXNwbGF5T2JqZWN0IHRvIGFkZCB0byB0aGUgY29udGFpbmVyXG4gKiBAcmV0dXJuIHtQSVhJLkRpc3BsYXlPYmplY3R9IFRoZSBjaGlsZCB0aGF0IHdhcyBhZGRlZC5cbiAqL1xuQ29udGFpbmVyLnByb3RvdHlwZS5hZGRDaGlsZCA9IGZ1bmN0aW9uIChjaGlsZClcbnsgXG4gICAgdmFyIGFyZ3VtZW50c0xlbmd0aCA9IGFyZ3VtZW50cy5sZW5ndGg7XG5cbiAgICAvLyBpZiB0aGVyZSBpcyBvbmx5IG9uZSBhcmd1bWVudCB3ZSBjYW4gYnlwYXNzIGxvb3BpbmcgdGhyb3VnaCB0aGUgdGhlbVxuICAgIGlmKGFyZ3VtZW50c0xlbmd0aCA+IDEpXG4gICAge1xuICAgICAgICAvLyBsb29wIHRocm91Z2ggdGhlIGFyZ3VtZW50cyBwcm9wZXJ0eSBhbmQgYWRkIGFsbCBjaGlsZHJlblxuICAgICAgICAvLyB1c2UgaXQgdGhlIHJpZ2h0IHdheSAoLmxlbmd0aCBhbmQgW2ldKSBzbyB0aGF0IHRoaXMgZnVuY3Rpb24gY2FuIHN0aWxsIGJlIG9wdGltaXNlZCBieSBKUyBydW50aW1lc1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFyZ3VtZW50c0xlbmd0aDsgaSsrKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmFkZENoaWxkKCBhcmd1bWVudHNbaV0gKTtcbiAgICAgICAgfVxuICAgIH0gICAgIFxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIC8vIGlmIHRoZSBjaGlsZCBoYXMgYSBwYXJlbnQgdGhlbiBsZXRzIHJlbW92ZSBpdCBhcyBQaXhpIG9iamVjdHMgY2FuIG9ubHkgZXhpc3QgaW4gb25lIHBsYWNlXG4gICAgICAgIGlmIChjaGlsZC5wYXJlbnQpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNoaWxkLnBhcmVudC5yZW1vdmVDaGlsZChjaGlsZCk7XG4gICAgICAgIH1cblxuICAgICAgICBjaGlsZC5wYXJlbnQgPSB0aGlzO1xuICAgICAgICBcbiAgICAgICAgdGhpcy5jaGlsZHJlbi5wdXNoKGNoaWxkKTtcblxuICAgICAgICAvLyBUT0RPIC0gbGV0cyBlaXRoZXIgZG8gYWxsIGNhbGxiYWNrcyBvciBhbGwgZXZlbnRzLi4gbm90IGJvdGghXG4gICAgICAgIHRoaXMub25DaGlsZHJlbkNoYW5nZSh0aGlzLmNoaWxkcmVuLmxlbmd0aC0xKTtcbiAgICAgICAgY2hpbGQuZW1pdCgnYWRkZWQnLCB0aGlzKTtcbiAgICB9XG5cbiAgICByZXR1cm4gY2hpbGQ7XG59O1xuXG4vKipcbiAqIEFkZHMgYSBjaGlsZCB0byB0aGUgY29udGFpbmVyIGF0IGEgc3BlY2lmaWVkIGluZGV4LiBJZiB0aGUgaW5kZXggaXMgb3V0IG9mIGJvdW5kcyBhbiBlcnJvciB3aWxsIGJlIHRocm93blxuICpcbiAqIEBwYXJhbSBjaGlsZCB7UElYSS5EaXNwbGF5T2JqZWN0fSBUaGUgY2hpbGQgdG8gYWRkXG4gKiBAcGFyYW0gaW5kZXgge251bWJlcn0gVGhlIGluZGV4IHRvIHBsYWNlIHRoZSBjaGlsZCBpblxuICogQHJldHVybiB7UElYSS5EaXNwbGF5T2JqZWN0fSBUaGUgY2hpbGQgdGhhdCB3YXMgYWRkZWQuXG4gKi9cbkNvbnRhaW5lci5wcm90b3R5cGUuYWRkQ2hpbGRBdCA9IGZ1bmN0aW9uIChjaGlsZCwgaW5kZXgpXG57XG4gICAgaWYgKGluZGV4ID49IDAgJiYgaW5kZXggPD0gdGhpcy5jaGlsZHJlbi5sZW5ndGgpXG4gICAge1xuICAgICAgICBpZiAoY2hpbGQucGFyZW50KVxuICAgICAgICB7XG4gICAgICAgICAgICBjaGlsZC5wYXJlbnQucmVtb3ZlQ2hpbGQoY2hpbGQpO1xuICAgICAgICB9XG5cbiAgICAgICAgY2hpbGQucGFyZW50ID0gdGhpcztcblxuICAgICAgICB0aGlzLmNoaWxkcmVuLnNwbGljZShpbmRleCwgMCwgY2hpbGQpO1xuXG4gICAgICAgIC8vIFRPRE8gLSBsZXRzIGVpdGhlciBkbyBhbGwgY2FsbGJhY2tzIG9yIGFsbCBldmVudHMuLiBub3QgYm90aCFcbiAgICAgICAgdGhpcy5vbkNoaWxkcmVuQ2hhbmdlKGluZGV4KTtcbiAgICAgICAgY2hpbGQuZW1pdCgnYWRkZWQnLCB0aGlzKTtcblxuICAgICAgICByZXR1cm4gY2hpbGQ7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihjaGlsZCArICdhZGRDaGlsZEF0OiBUaGUgaW5kZXggJysgaW5kZXggKycgc3VwcGxpZWQgaXMgb3V0IG9mIGJvdW5kcyAnICsgdGhpcy5jaGlsZHJlbi5sZW5ndGgpO1xuICAgIH1cbn07XG5cbi8qKlxuICogU3dhcHMgdGhlIHBvc2l0aW9uIG9mIDIgRGlzcGxheSBPYmplY3RzIHdpdGhpbiB0aGlzIGNvbnRhaW5lci5cbiAqXG4gKiBAcGFyYW0gY2hpbGQge1BJWEkuRGlzcGxheU9iamVjdH1cbiAqIEBwYXJhbSBjaGlsZDIge1BJWEkuRGlzcGxheU9iamVjdH1cbiAqL1xuQ29udGFpbmVyLnByb3RvdHlwZS5zd2FwQ2hpbGRyZW4gPSBmdW5jdGlvbiAoY2hpbGQsIGNoaWxkMilcbntcbiAgICBpZiAoY2hpbGQgPT09IGNoaWxkMilcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB2YXIgaW5kZXgxID0gdGhpcy5nZXRDaGlsZEluZGV4KGNoaWxkKTtcbiAgICB2YXIgaW5kZXgyID0gdGhpcy5nZXRDaGlsZEluZGV4KGNoaWxkMik7XG5cbiAgICBpZiAoaW5kZXgxIDwgMCB8fCBpbmRleDIgPCAwKVxuICAgIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdzd2FwQ2hpbGRyZW46IEJvdGggdGhlIHN1cHBsaWVkIERpc3BsYXlPYmplY3RzIG11c3QgYmUgY2hpbGRyZW4gb2YgdGhlIGNhbGxlci4nKTtcbiAgICB9XG5cbiAgICB0aGlzLmNoaWxkcmVuW2luZGV4MV0gPSBjaGlsZDI7XG4gICAgdGhpcy5jaGlsZHJlbltpbmRleDJdID0gY2hpbGQ7XG4gICAgdGhpcy5vbkNoaWxkcmVuQ2hhbmdlKGluZGV4MSA8IGluZGV4MiA/IGluZGV4MSA6IGluZGV4Mik7XG59O1xuXG4vKipcbiAqIFJldHVybnMgdGhlIGluZGV4IHBvc2l0aW9uIG9mIGEgY2hpbGQgRGlzcGxheU9iamVjdCBpbnN0YW5jZVxuICpcbiAqIEBwYXJhbSBjaGlsZCB7UElYSS5EaXNwbGF5T2JqZWN0fSBUaGUgRGlzcGxheU9iamVjdCBpbnN0YW5jZSB0byBpZGVudGlmeVxuICogQHJldHVybiB7bnVtYmVyfSBUaGUgaW5kZXggcG9zaXRpb24gb2YgdGhlIGNoaWxkIGRpc3BsYXkgb2JqZWN0IHRvIGlkZW50aWZ5XG4gKi9cbkNvbnRhaW5lci5wcm90b3R5cGUuZ2V0Q2hpbGRJbmRleCA9IGZ1bmN0aW9uIChjaGlsZClcbntcbiAgICB2YXIgaW5kZXggPSB0aGlzLmNoaWxkcmVuLmluZGV4T2YoY2hpbGQpO1xuXG4gICAgaWYgKGluZGV4ID09PSAtMSlcbiAgICB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignVGhlIHN1cHBsaWVkIERpc3BsYXlPYmplY3QgbXVzdCBiZSBhIGNoaWxkIG9mIHRoZSBjYWxsZXInKTtcbiAgICB9XG5cbiAgICByZXR1cm4gaW5kZXg7XG59O1xuXG4vKipcbiAqIENoYW5nZXMgdGhlIHBvc2l0aW9uIG9mIGFuIGV4aXN0aW5nIGNoaWxkIGluIHRoZSBkaXNwbGF5IG9iamVjdCBjb250YWluZXJcbiAqXG4gKiBAcGFyYW0gY2hpbGQge1BJWEkuRGlzcGxheU9iamVjdH0gVGhlIGNoaWxkIERpc3BsYXlPYmplY3QgaW5zdGFuY2UgZm9yIHdoaWNoIHlvdSB3YW50IHRvIGNoYW5nZSB0aGUgaW5kZXggbnVtYmVyXG4gKiBAcGFyYW0gaW5kZXgge251bWJlcn0gVGhlIHJlc3VsdGluZyBpbmRleCBudW1iZXIgZm9yIHRoZSBjaGlsZCBkaXNwbGF5IG9iamVjdFxuICovXG5Db250YWluZXIucHJvdG90eXBlLnNldENoaWxkSW5kZXggPSBmdW5jdGlvbiAoY2hpbGQsIGluZGV4KVxue1xuICAgIGlmIChpbmRleCA8IDAgfHwgaW5kZXggPj0gdGhpcy5jaGlsZHJlbi5sZW5ndGgpXG4gICAge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RoZSBzdXBwbGllZCBpbmRleCBpcyBvdXQgb2YgYm91bmRzJyk7XG4gICAgfVxuXG4gICAgdmFyIGN1cnJlbnRJbmRleCA9IHRoaXMuZ2V0Q2hpbGRJbmRleChjaGlsZCk7XG5cbiAgICB1dGlscy5yZW1vdmVJdGVtcyh0aGlzLmNoaWxkcmVuLCBjdXJyZW50SW5kZXgsIDEpOyAvLyByZW1vdmUgZnJvbSBvbGQgcG9zaXRpb25cbiAgICB0aGlzLmNoaWxkcmVuLnNwbGljZShpbmRleCwgMCwgY2hpbGQpOyAvL2FkZCBhdCBuZXcgcG9zaXRpb25cbiAgICB0aGlzLm9uQ2hpbGRyZW5DaGFuZ2UoaW5kZXgpO1xufTtcblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBjaGlsZCBhdCB0aGUgc3BlY2lmaWVkIGluZGV4XG4gKlxuICogQHBhcmFtIGluZGV4IHtudW1iZXJ9IFRoZSBpbmRleCB0byBnZXQgdGhlIGNoaWxkIGF0XG4gKiBAcmV0dXJuIHtQSVhJLkRpc3BsYXlPYmplY3R9IFRoZSBjaGlsZCBhdCB0aGUgZ2l2ZW4gaW5kZXgsIGlmIGFueS5cbiAqL1xuQ29udGFpbmVyLnByb3RvdHlwZS5nZXRDaGlsZEF0ID0gZnVuY3Rpb24gKGluZGV4KVxue1xuICAgIGlmIChpbmRleCA8IDAgfHwgaW5kZXggPj0gdGhpcy5jaGlsZHJlbi5sZW5ndGgpXG4gICAge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2dldENoaWxkQXQ6IFN1cHBsaWVkIGluZGV4ICcgKyBpbmRleCArICcgZG9lcyBub3QgZXhpc3QgaW4gdGhlIGNoaWxkIGxpc3QsIG9yIHRoZSBzdXBwbGllZCBEaXNwbGF5T2JqZWN0IGlzIG5vdCBhIGNoaWxkIG9mIHRoZSBjYWxsZXInKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5jaGlsZHJlbltpbmRleF07XG59O1xuXG4vKipcbiAqIFJlbW92ZXMgYSBjaGlsZCBmcm9tIHRoZSBjb250YWluZXIuXG4gKlxuICogQHBhcmFtIGNoaWxkIHtQSVhJLkRpc3BsYXlPYmplY3R9IFRoZSBEaXNwbGF5T2JqZWN0IHRvIHJlbW92ZVxuICogQHJldHVybiB7UElYSS5EaXNwbGF5T2JqZWN0fSBUaGUgY2hpbGQgdGhhdCB3YXMgcmVtb3ZlZC5cbiAqL1xuQ29udGFpbmVyLnByb3RvdHlwZS5yZW1vdmVDaGlsZCA9IGZ1bmN0aW9uIChjaGlsZClcbntcbiAgICB2YXIgYXJndW1lbnRzTGVuZ3RoID0gYXJndW1lbnRzLmxlbmd0aDtcblxuICAgIC8vIGlmIHRoZXJlIGlzIG9ubHkgb25lIGFyZ3VtZW50IHdlIGNhbiBieXBhc3MgbG9vcGluZyB0aHJvdWdoIHRoZSB0aGVtXG4gICAgaWYoYXJndW1lbnRzTGVuZ3RoID4gMSlcbiAgICB7XG4gICAgICAgIC8vIGxvb3AgdGhyb3VnaCB0aGUgYXJndW1lbnRzIHByb3BlcnR5IGFuZCBhZGQgYWxsIGNoaWxkcmVuXG4gICAgICAgIC8vIHVzZSBpdCB0aGUgcmlnaHQgd2F5ICgubGVuZ3RoIGFuZCBbaV0pIHNvIHRoYXQgdGhpcyBmdW5jdGlvbiBjYW4gc3RpbGwgYmUgb3B0aW1pc2VkIGJ5IEpTIHJ1bnRpbWVzXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXJndW1lbnRzTGVuZ3RoOyBpKyspXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMucmVtb3ZlQ2hpbGQoIGFyZ3VtZW50c1tpXSApO1xuICAgICAgICB9XG4gICAgfSAgICAgXG4gICAgZWxzZVxuICAgIHsgICBcbiAgICAgICAgdmFyIGluZGV4ID0gdGhpcy5jaGlsZHJlbi5pbmRleE9mKGNoaWxkKTtcblxuICAgICAgICBpZiAoaW5kZXggPT09IC0xKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjaGlsZC5wYXJlbnQgPSBudWxsO1xuICAgICAgICB1dGlscy5yZW1vdmVJdGVtcyh0aGlzLmNoaWxkcmVuLCBpbmRleCwgMSk7XG5cbiAgICAgICAgLy8gVE9ETyAtIGxldHMgZWl0aGVyIGRvIGFsbCBjYWxsYmFja3Mgb3IgYWxsIGV2ZW50cy4uIG5vdCBib3RoIVxuICAgICAgICB0aGlzLm9uQ2hpbGRyZW5DaGFuZ2UoaW5kZXgpO1xuICAgICAgICBjaGlsZC5lbWl0KCdyZW1vdmVkJywgdGhpcyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGNoaWxkO1xufTtcblxuLyoqXG4gKiBSZW1vdmVzIGEgY2hpbGQgZnJvbSB0aGUgc3BlY2lmaWVkIGluZGV4IHBvc2l0aW9uLlxuICpcbiAqIEBwYXJhbSBpbmRleCB7bnVtYmVyfSBUaGUgaW5kZXggdG8gZ2V0IHRoZSBjaGlsZCBmcm9tXG4gKiBAcmV0dXJuIHtQSVhJLkRpc3BsYXlPYmplY3R9IFRoZSBjaGlsZCB0aGF0IHdhcyByZW1vdmVkLlxuICovXG5Db250YWluZXIucHJvdG90eXBlLnJlbW92ZUNoaWxkQXQgPSBmdW5jdGlvbiAoaW5kZXgpXG57XG4gICAgdmFyIGNoaWxkID0gdGhpcy5nZXRDaGlsZEF0KGluZGV4KTtcblxuICAgIGNoaWxkLnBhcmVudCA9IG51bGw7XG4gICAgdXRpbHMucmVtb3ZlSXRlbXModGhpcy5jaGlsZHJlbiwgaW5kZXgsIDEpO1xuXG4gICAgLy8gVE9ETyAtIGxldHMgZWl0aGVyIGRvIGFsbCBjYWxsYmFja3Mgb3IgYWxsIGV2ZW50cy4uIG5vdCBib3RoIVxuICAgIHRoaXMub25DaGlsZHJlbkNoYW5nZShpbmRleCk7XG4gICAgY2hpbGQuZW1pdCgncmVtb3ZlZCcsIHRoaXMpO1xuXG4gICAgcmV0dXJuIGNoaWxkO1xufTtcblxuLyoqXG4gKiBSZW1vdmVzIGFsbCBjaGlsZHJlbiBmcm9tIHRoaXMgY29udGFpbmVyIHRoYXQgYXJlIHdpdGhpbiB0aGUgYmVnaW4gYW5kIGVuZCBpbmRleGVzLlxuICpcbiAqIEBwYXJhbSBiZWdpbkluZGV4IHtudW1iZXJ9IFRoZSBiZWdpbm5pbmcgcG9zaXRpb24uIERlZmF1bHQgdmFsdWUgaXMgMC5cbiAqIEBwYXJhbSBlbmRJbmRleCB7bnVtYmVyfSBUaGUgZW5kaW5nIHBvc2l0aW9uLiBEZWZhdWx0IHZhbHVlIGlzIHNpemUgb2YgdGhlIGNvbnRhaW5lci5cbiAqL1xuQ29udGFpbmVyLnByb3RvdHlwZS5yZW1vdmVDaGlsZHJlbiA9IGZ1bmN0aW9uIChiZWdpbkluZGV4LCBlbmRJbmRleClcbntcbiAgICB2YXIgYmVnaW4gPSBiZWdpbkluZGV4IHx8IDA7XG4gICAgdmFyIGVuZCA9IHR5cGVvZiBlbmRJbmRleCA9PT0gJ251bWJlcicgPyBlbmRJbmRleCA6IHRoaXMuY2hpbGRyZW4ubGVuZ3RoO1xuICAgIHZhciByYW5nZSA9IGVuZCAtIGJlZ2luO1xuICAgIHZhciByZW1vdmVkLCBpO1xuXG4gICAgaWYgKHJhbmdlID4gMCAmJiByYW5nZSA8PSBlbmQpXG4gICAge1xuICAgICAgICByZW1vdmVkID0gdGhpcy5jaGlsZHJlbi5zcGxpY2UoYmVnaW4sIHJhbmdlKTtcblxuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgcmVtb3ZlZC5sZW5ndGg7ICsraSlcbiAgICAgICAge1xuICAgICAgICAgICAgcmVtb3ZlZFtpXS5wYXJlbnQgPSBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5vbkNoaWxkcmVuQ2hhbmdlKGJlZ2luSW5kZXgpO1xuXG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCByZW1vdmVkLmxlbmd0aDsgKytpKVxuICAgICAgICB7XG4gICAgICAgICAgICByZW1vdmVkW2ldLmVtaXQoJ3JlbW92ZWQnLCB0aGlzKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiByZW1vdmVkO1xuICAgIH1cbiAgICBlbHNlIGlmIChyYW5nZSA9PT0gMCAmJiB0aGlzLmNoaWxkcmVuLmxlbmd0aCA9PT0gMClcbiAgICB7XG4gICAgICAgIHJldHVybiBbXTtcbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ3JlbW92ZUNoaWxkcmVuOiBudW1lcmljIHZhbHVlcyBhcmUgb3V0c2lkZSB0aGUgYWNjZXB0YWJsZSByYW5nZS4nKTtcbiAgICB9XG59O1xuXG4vKipcbiAqIFVzZWZ1bCBmdW5jdGlvbiB0aGF0IHJldHVybnMgYSB0ZXh0dXJlIG9mIHRoZSBkaXNwbGF5IG9iamVjdCB0aGF0IGNhbiB0aGVuIGJlIHVzZWQgdG8gY3JlYXRlIHNwcml0ZXNcbiAqIFRoaXMgY2FuIGJlIHF1aXRlIHVzZWZ1bCBpZiB5b3VyIGRpc3BsYXlPYmplY3QgaXMgc3RhdGljIC8gY29tcGxpY2F0ZWQgYW5kIG5lZWRzIHRvIGJlIHJldXNlZCBtdWx0aXBsZSB0aW1lcy5cbiAqXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuQ2FudmFzUmVuZGVyZXJ8UElYSS5XZWJHTFJlbmRlcmVyfSBUaGUgcmVuZGVyZXIgdXNlZCB0byBnZW5lcmF0ZSB0aGUgdGV4dHVyZS5cbiAqIEBwYXJhbSByZXNvbHV0aW9uIHtudW1iZXJ9IFRoZSByZXNvbHV0aW9uIG9mIHRoZSB0ZXh0dXJlIGJlaW5nIGdlbmVyYXRlZFxuICogQHBhcmFtIHNjYWxlTW9kZSB7bnVtYmVyfSBTZWUge0BsaW5rIFBJWEkuU0NBTEVfTU9ERVN9IGZvciBwb3NzaWJsZSB2YWx1ZXNcbiAqIEByZXR1cm4ge1BJWEkuVGV4dHVyZX0gYSB0ZXh0dXJlIG9mIHRoZSBkaXNwbGF5IG9iamVjdFxuICovXG5Db250YWluZXIucHJvdG90eXBlLmdlbmVyYXRlVGV4dHVyZSA9IGZ1bmN0aW9uIChyZW5kZXJlciwgcmVzb2x1dGlvbiwgc2NhbGVNb2RlKVxue1xuICAgIHZhciBib3VuZHMgPSB0aGlzLmdldExvY2FsQm91bmRzKCk7XG5cbiAgICB2YXIgcmVuZGVyVGV4dHVyZSA9IG5ldyBSZW5kZXJUZXh0dXJlKHJlbmRlcmVyLCBib3VuZHMud2lkdGggfCAwLCBib3VuZHMuaGVpZ2h0IHwgMCwgc2NhbGVNb2RlLCByZXNvbHV0aW9uKTtcblxuICAgIF90ZW1wTWF0cml4LnR4ID0gLWJvdW5kcy54O1xuICAgIF90ZW1wTWF0cml4LnR5ID0gLWJvdW5kcy55O1xuXG4gICAgcmVuZGVyVGV4dHVyZS5yZW5kZXIodGhpcywgX3RlbXBNYXRyaXgpO1xuXG4gICAgcmV0dXJuIHJlbmRlclRleHR1cmU7XG59O1xuXG4vKlxuICogVXBkYXRlcyB0aGUgdHJhbnNmb3JtIG9uIGFsbCBjaGlsZHJlbiBvZiB0aGlzIGNvbnRhaW5lciBmb3IgcmVuZGVyaW5nXG4gKlxuICogQHByaXZhdGVcbiAqL1xuQ29udGFpbmVyLnByb3RvdHlwZS51cGRhdGVUcmFuc2Zvcm0gPSBmdW5jdGlvbiAoKVxue1xuICAgIGlmICghdGhpcy52aXNpYmxlKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuZGlzcGxheU9iamVjdFVwZGF0ZVRyYW5zZm9ybSgpO1xuXG4gICAgZm9yICh2YXIgaSA9IDAsIGogPSB0aGlzLmNoaWxkcmVuLmxlbmd0aDsgaSA8IGo7ICsraSlcbiAgICB7XG4gICAgICAgIHRoaXMuY2hpbGRyZW5baV0udXBkYXRlVHJhbnNmb3JtKCk7XG4gICAgfVxuXG4gICAgdGhpcy5kaXJ0eVRyYW5zZm9ybSA9IGZhbHNlO1xufTtcblxuLy8gcGVyZm9ybWFuY2UgaW5jcmVhc2UgdG8gYXZvaWQgdXNpbmcgY2FsbC4uICgxMHggZmFzdGVyKVxuQ29udGFpbmVyLnByb3RvdHlwZS5jb250YWluZXJVcGRhdGVUcmFuc2Zvcm0gPSBDb250YWluZXIucHJvdG90eXBlLnVwZGF0ZVRyYW5zZm9ybTtcblxuLyoqXG4gKiBSZXRyaWV2ZXMgdGhlIGJvdW5kcyBvZiB0aGUgQ29udGFpbmVyIGFzIGEgcmVjdGFuZ2xlLiBUaGUgYm91bmRzIGNhbGN1bGF0aW9uIHRha2VzIGFsbCB2aXNpYmxlIGNoaWxkcmVuIGludG8gY29uc2lkZXJhdGlvbi5cbiAqXG4gKiBAcmV0dXJuIHtQSVhJLlJlY3RhbmdsZX0gVGhlIHJlY3Rhbmd1bGFyIGJvdW5kaW5nIGFyZWFcbiAqL1xuQ29udGFpbmVyLnByb3RvdHlwZS5nZXRCb3VuZHMgPSBmdW5jdGlvbiAoKVxue1xuICAgIGlmKCF0aGlzLl9jdXJyZW50Qm91bmRzKVxuICAgIHtcblxuICAgICAgICBpZiAodGhpcy5jaGlsZHJlbi5sZW5ndGggPT09IDApXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiBtYXRoLlJlY3RhbmdsZS5FTVBUWTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFRPRE8gdGhlIGJvdW5kcyBoYXZlIGFscmVhZHkgYmVlbiBjYWxjdWxhdGVkIHRoaXMgcmVuZGVyIHNlc3Npb24gc28gcmV0dXJuIHdoYXQgd2UgaGF2ZVxuXG4gICAgICAgIHZhciBtaW5YID0gSW5maW5pdHk7XG4gICAgICAgIHZhciBtaW5ZID0gSW5maW5pdHk7XG5cbiAgICAgICAgdmFyIG1heFggPSAtSW5maW5pdHk7XG4gICAgICAgIHZhciBtYXhZID0gLUluZmluaXR5O1xuXG4gICAgICAgIHZhciBjaGlsZEJvdW5kcztcbiAgICAgICAgdmFyIGNoaWxkTWF4WDtcbiAgICAgICAgdmFyIGNoaWxkTWF4WTtcblxuICAgICAgICB2YXIgY2hpbGRWaXNpYmxlID0gZmFsc2U7XG5cbiAgICAgICAgZm9yICh2YXIgaSA9IDAsIGogPSB0aGlzLmNoaWxkcmVuLmxlbmd0aDsgaSA8IGo7ICsraSlcbiAgICAgICAge1xuICAgICAgICAgICAgdmFyIGNoaWxkID0gdGhpcy5jaGlsZHJlbltpXTtcblxuICAgICAgICAgICAgaWYgKCFjaGlsZC52aXNpYmxlKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjaGlsZFZpc2libGUgPSB0cnVlO1xuXG4gICAgICAgICAgICBjaGlsZEJvdW5kcyA9IHRoaXMuY2hpbGRyZW5baV0uZ2V0Qm91bmRzKCk7XG5cbiAgICAgICAgICAgIG1pblggPSBtaW5YIDwgY2hpbGRCb3VuZHMueCA/IG1pblggOiBjaGlsZEJvdW5kcy54O1xuICAgICAgICAgICAgbWluWSA9IG1pblkgPCBjaGlsZEJvdW5kcy55ID8gbWluWSA6IGNoaWxkQm91bmRzLnk7XG5cbiAgICAgICAgICAgIGNoaWxkTWF4WCA9IGNoaWxkQm91bmRzLndpZHRoICsgY2hpbGRCb3VuZHMueDtcbiAgICAgICAgICAgIGNoaWxkTWF4WSA9IGNoaWxkQm91bmRzLmhlaWdodCArIGNoaWxkQm91bmRzLnk7XG5cbiAgICAgICAgICAgIG1heFggPSBtYXhYID4gY2hpbGRNYXhYID8gbWF4WCA6IGNoaWxkTWF4WDtcbiAgICAgICAgICAgIG1heFkgPSBtYXhZID4gY2hpbGRNYXhZID8gbWF4WSA6IGNoaWxkTWF4WTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghY2hpbGRWaXNpYmxlKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gbWF0aC5SZWN0YW5nbGUuRU1QVFk7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgYm91bmRzID0gdGhpcy5fYm91bmRzO1xuXG4gICAgICAgIGJvdW5kcy54ID0gbWluWDtcbiAgICAgICAgYm91bmRzLnkgPSBtaW5ZO1xuICAgICAgICBib3VuZHMud2lkdGggPSBtYXhYIC0gbWluWDtcbiAgICAgICAgYm91bmRzLmhlaWdodCA9IG1heFkgLSBtaW5ZO1xuXG4gICAgICAgIHRoaXMuX2N1cnJlbnRCb3VuZHMgPSBib3VuZHM7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuX2N1cnJlbnRCb3VuZHM7XG59O1xuXG5Db250YWluZXIucHJvdG90eXBlLmNvbnRhaW5lckdldEJvdW5kcyA9IENvbnRhaW5lci5wcm90b3R5cGUuZ2V0Qm91bmRzO1xuXG4vKipcbiAqIFJldHJpZXZlcyB0aGUgbm9uLWdsb2JhbCBsb2NhbCBib3VuZHMgb2YgdGhlIENvbnRhaW5lciBhcyBhIHJlY3RhbmdsZS5cbiAqIFRoZSBjYWxjdWxhdGlvbiB0YWtlcyBhbGwgdmlzaWJsZSBjaGlsZHJlbiBpbnRvIGNvbnNpZGVyYXRpb24uXG4gKlxuICogQHJldHVybiB7UElYSS5SZWN0YW5nbGV9IFRoZSByZWN0YW5ndWxhciBib3VuZGluZyBhcmVhXG4gKi9cbkNvbnRhaW5lci5wcm90b3R5cGUuZ2V0TG9jYWxCb3VuZHMgPSBmdW5jdGlvbiAoKVxue1xuICAgIHZhciBtYXRyaXhDYWNoZSA9IHRoaXMud29ybGRUcmFuc2Zvcm07XG5cbiAgICB0aGlzLndvcmxkVHJhbnNmb3JtID0gbWF0aC5NYXRyaXguSURFTlRJVFk7XG5cbiAgICBmb3IgKHZhciBpID0gMCwgaiA9IHRoaXMuY2hpbGRyZW4ubGVuZ3RoOyBpIDwgajsgKytpKVxuICAgIHtcbiAgICAgICAgdGhpcy5jaGlsZHJlbltpXS51cGRhdGVUcmFuc2Zvcm0oKTtcbiAgICB9XG5cbiAgICB0aGlzLndvcmxkVHJhbnNmb3JtID0gbWF0cml4Q2FjaGU7XG5cbiAgICB0aGlzLl9jdXJyZW50Qm91bmRzID0gbnVsbDtcblxuICAgIHJldHVybiB0aGlzLmdldEJvdW5kcyggbWF0aC5NYXRyaXguSURFTlRJVFkgKTtcbn07XG5cbi8qKlxuICogUmVuZGVycyB0aGUgb2JqZWN0IHVzaW5nIHRoZSBXZWJHTCByZW5kZXJlclxuICpcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5XZWJHTFJlbmRlcmVyfSBUaGUgcmVuZGVyZXJcbiAqL1xuQ29udGFpbmVyLnByb3RvdHlwZS5yZW5kZXJXZWJHTCA9IGZ1bmN0aW9uIChyZW5kZXJlcilcbntcblxuICAgIC8vIGlmIHRoZSBvYmplY3QgaXMgbm90IHZpc2libGUgb3IgdGhlIGFscGhhIGlzIDAgdGhlbiBubyBuZWVkIHRvIHJlbmRlciB0aGlzIGVsZW1lbnRcbiAgICBpZiAoIXRoaXMudmlzaWJsZSB8fCB0aGlzLndvcmxkQWxwaGEgPD0gMCB8fCAhdGhpcy5yZW5kZXJhYmxlKVxuICAgIHtcbiAgICAgIFxuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFyIGksIGo7XG5cbiAgICAvLyBkbyBhIHF1aWNrIGNoZWNrIHRvIHNlZSBpZiB0aGlzIGVsZW1lbnQgaGFzIGEgbWFzayBvciBhIGZpbHRlci5cbiAgICBpZiAodGhpcy5fbWFzayB8fCB0aGlzLl9maWx0ZXJzKVxuICAgIHtcbiAgICAgICAgcmVuZGVyZXIuY3VycmVudFJlbmRlcmVyLmZsdXNoKCk7XG5cbiAgICAgICAgLy8gcHVzaCBmaWx0ZXIgZmlyc3QgYXMgd2UgbmVlZCB0byBlbnN1cmUgdGhlIHN0ZW5jaWwgYnVmZmVyIGlzIGNvcnJlY3QgZm9yIGFueSBtYXNraW5nXG4gICAgICAgIGlmICh0aGlzLl9maWx0ZXJzICYmIHRoaXMuX2ZpbHRlcnMubGVuZ3RoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLnB1c2hGaWx0ZXIodGhpcywgdGhpcy5fZmlsdGVycyk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5fbWFzaylcbiAgICAgICAge1xuICAgICAgICAgICAgcmVuZGVyZXIubWFza01hbmFnZXIucHVzaE1hc2sodGhpcywgdGhpcy5fbWFzayk7XG4gICAgICAgIH1cblxuICAgICAgICByZW5kZXJlci5jdXJyZW50UmVuZGVyZXIuc3RhcnQoKTtcblxuICAgICAgICAvLyBhZGQgdGhpcyBvYmplY3QgdG8gdGhlIGJhdGNoLCBvbmx5IHJlbmRlcmVkIGlmIGl0IGhhcyBhIHRleHR1cmUuXG4gICAgICAgIHRoaXMuX3JlbmRlcldlYkdMKHJlbmRlcmVyKTtcblxuICAgICAgICAvLyBub3cgbG9vcCB0aHJvdWdoIHRoZSBjaGlsZHJlbiBhbmQgbWFrZSBzdXJlIHRoZXkgZ2V0IHJlbmRlcmVkXG4gICAgICAgIGZvciAoaSA9IDAsIGogPSB0aGlzLmNoaWxkcmVuLmxlbmd0aDsgaSA8IGo7IGkrKylcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5jaGlsZHJlbltpXS5yZW5kZXJXZWJHTChyZW5kZXJlcik7XG4gICAgICAgIH1cblxuICAgICAgICByZW5kZXJlci5jdXJyZW50UmVuZGVyZXIuZmx1c2goKTtcblxuICAgICAgICBpZiAodGhpcy5fbWFzaylcbiAgICAgICAge1xuICAgICAgICAgICAgcmVuZGVyZXIubWFza01hbmFnZXIucG9wTWFzayh0aGlzLCB0aGlzLl9tYXNrKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLl9maWx0ZXJzKVxuICAgICAgICB7XG4gICAgICAgICAgICByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLnBvcEZpbHRlcigpO1xuXG4gICAgICAgIH1cbiAgICAgICAgcmVuZGVyZXIuY3VycmVudFJlbmRlcmVyLnN0YXJ0KCk7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHRoaXMuX3JlbmRlcldlYkdMKHJlbmRlcmVyKTtcblxuICAgICAgICAvLyBzaW1wbGUgcmVuZGVyIGNoaWxkcmVuIVxuICAgICAgICBmb3IgKGkgPSAwLCBqID0gdGhpcy5jaGlsZHJlbi5sZW5ndGg7IGkgPCBqOyArK2kpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuY2hpbGRyZW5baV0ucmVuZGVyV2ViR0wocmVuZGVyZXIpO1xuICAgICAgICB9XG4gICAgfVxufTtcblxuLyoqXG4gKiBUbyBiZSBvdmVycmlkZGVuIGJ5IHRoZSBzdWJjbGFzc1xuICpcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5XZWJHTFJlbmRlcmVyfSBUaGUgcmVuZGVyZXJcbiAqIEBwcml2YXRlXG4gKi9cbkNvbnRhaW5lci5wcm90b3R5cGUuX3JlbmRlcldlYkdMID0gZnVuY3Rpb24gKHJlbmRlcmVyKSAvLyBqc2hpbnQgdW51c2VkOmZhbHNlXG57XG4gICAgLy8gdGhpcyBpcyB3aGVyZSBjb250ZW50IGl0c2VsZiBnZXRzIHJlbmRlcmVkLi4uXG59O1xuXG4vKipcbiAqIFRvIGJlIG92ZXJyaWRkZW4gYnkgdGhlIHN1YmNsYXNzXG4gKlxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLkNhbnZhc1JlbmRlcmVyfSBUaGUgcmVuZGVyZXJcbiAqIEBwcml2YXRlXG4gKi9cbkNvbnRhaW5lci5wcm90b3R5cGUuX3JlbmRlckNhbnZhcyA9IGZ1bmN0aW9uIChyZW5kZXJlcikgLy8ganNoaW50IHVudXNlZDpmYWxzZVxue1xuICAgIC8vIHRoaXMgaXMgd2hlcmUgY29udGVudCBpdHNlbGYgZ2V0cyByZW5kZXJlZC4uLlxufTtcblxuXG4vKipcbiAqIFJlbmRlcnMgdGhlIG9iamVjdCB1c2luZyB0aGUgQ2FudmFzIHJlbmRlcmVyXG4gKlxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLkNhbnZhc1JlbmRlcmVyfSBUaGUgcmVuZGVyZXJcbiAqL1xuQ29udGFpbmVyLnByb3RvdHlwZS5yZW5kZXJDYW52YXMgPSBmdW5jdGlvbiAocmVuZGVyZXIpXG57XG4gICAgLy8gaWYgbm90IHZpc2libGUgb3IgdGhlIGFscGhhIGlzIDAgdGhlbiBubyBuZWVkIHRvIHJlbmRlciB0aGlzXG4gICAgaWYgKCF0aGlzLnZpc2libGUgfHwgdGhpcy5hbHBoYSA8PSAwIHx8ICF0aGlzLnJlbmRlcmFibGUpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX21hc2spXG4gICAge1xuICAgICAgICByZW5kZXJlci5tYXNrTWFuYWdlci5wdXNoTWFzayh0aGlzLl9tYXNrLCByZW5kZXJlcik7XG4gICAgfVxuXG4gICAgdGhpcy5fcmVuZGVyQ2FudmFzKHJlbmRlcmVyKTtcbiAgICBmb3IgKHZhciBpID0gMCwgaiA9IHRoaXMuY2hpbGRyZW4ubGVuZ3RoOyBpIDwgajsgKytpKVxuICAgIHtcbiAgICAgICAgdGhpcy5jaGlsZHJlbltpXS5yZW5kZXJDYW52YXMocmVuZGVyZXIpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLl9tYXNrKVxuICAgIHtcbiAgICAgICAgcmVuZGVyZXIubWFza01hbmFnZXIucG9wTWFzayhyZW5kZXJlcik7XG4gICAgfVxufTtcblxuLyoqXG4gKiBEZXN0cm95cyB0aGUgY29udGFpbmVyXG4gKiBAcGFyYW0gW2Rlc3Ryb3lDaGlsZHJlbj1mYWxzZV0ge2Jvb2xlYW59IGlmIHNldCB0byB0cnVlLCBhbGwgdGhlIGNoaWxkcmVuIHdpbGwgaGF2ZSB0aGVpciBkZXN0cm95IG1ldGhvZCBjYWxsZWQgYXMgd2VsbFxuICovXG5Db250YWluZXIucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoZGVzdHJveUNoaWxkcmVuKVxue1xuICAgIERpc3BsYXlPYmplY3QucHJvdG90eXBlLmRlc3Ryb3kuY2FsbCh0aGlzKTtcblxuICAgIGlmIChkZXN0cm95Q2hpbGRyZW4pXG4gICAge1xuICAgICAgICBmb3IgKHZhciBpID0gMCwgaiA9IHRoaXMuY2hpbGRyZW4ubGVuZ3RoOyBpIDwgajsgKytpKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmNoaWxkcmVuW2ldLmRlc3Ryb3koZGVzdHJveUNoaWxkcmVuKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMucmVtb3ZlQ2hpbGRyZW4oKTtcblxuICAgIHRoaXMuY2hpbGRyZW4gPSBudWxsO1xufTtcbiIsInZhciBtYXRoID0gcmVxdWlyZSgnLi4vbWF0aCcpLFxuICAgIFJlbmRlclRleHR1cmUgPSByZXF1aXJlKCcuLi90ZXh0dXJlcy9SZW5kZXJUZXh0dXJlJyksXG4gICAgRXZlbnRFbWl0dGVyID0gcmVxdWlyZSgnZXZlbnRlbWl0dGVyMycpLFxuICAgIENPTlNUID0gcmVxdWlyZSgnLi4vY29uc3QnKSxcbiAgICBfdGVtcE1hdHJpeCA9IG5ldyBtYXRoLk1hdHJpeCgpLFxuICAgIF90ZW1wRGlzcGxheU9iamVjdFBhcmVudCA9IHt3b3JsZFRyYW5zZm9ybTpuZXcgbWF0aC5NYXRyaXgoKSwgd29ybGRBbHBoYToxLCBjaGlsZHJlbjpbXX07XG5cblxuLyoqXG4gKiBUaGUgYmFzZSBjbGFzcyBmb3IgYWxsIG9iamVjdHMgdGhhdCBhcmUgcmVuZGVyZWQgb24gdGhlIHNjcmVlbi5cbiAqIFRoaXMgaXMgYW4gYWJzdHJhY3QgY2xhc3MgYW5kIHNob3VsZCBub3QgYmUgdXNlZCBvbiBpdHMgb3duIHJhdGhlciBpdCBzaG91bGQgYmUgZXh0ZW5kZWQuXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBFdmVudEVtaXR0ZXJcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKi9cbmZ1bmN0aW9uIERpc3BsYXlPYmplY3QoKVxue1xuICAgIEV2ZW50RW1pdHRlci5jYWxsKHRoaXMpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGNvb3JkaW5hdGUgb2YgdGhlIG9iamVjdCByZWxhdGl2ZSB0byB0aGUgbG9jYWwgY29vcmRpbmF0ZXMgb2YgdGhlIHBhcmVudC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuUG9pbnR9XG4gICAgICovXG4gICAgdGhpcy5wb3NpdGlvbiA9IG5ldyBtYXRoLlBvaW50KCk7XG4gICAgdGhpcy5fcG9zaXRpb24gPSBuZXcgQ2FjaGVQb2ludCh0aGlzKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBzY2FsZSBmYWN0b3Igb2YgdGhlIG9iamVjdC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuUG9pbnR9XG4gICAgICovXG4gICAgdGhpcy5zY2FsZSA9IG5ldyBtYXRoLlBvaW50KDEsIDEpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHBpdm90IHBvaW50IG9mIHRoZSBkaXNwbGF5T2JqZWN0IHRoYXQgaXQgcm90YXRlcyBhcm91bmRcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuUG9pbnR9XG4gICAgICovXG4gICAgdGhpcy5waXZvdCA9IG5ldyBtYXRoLlBvaW50KDAsIDApO1xuXG5cbiAgICAvKipcbiAgICAgKiBUaGUgc2tldyBmYWN0b3IgZm9yIHRoZSBvYmplY3QgaW4gcmFkaWFucy5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuUG9pbnR9XG4gICAgICovXG4gICAgdGhpcy5za2V3ID0gbmV3IG1hdGguUG9pbnQoMCwgMCk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgcm90YXRpb24gb2YgdGhlIG9iamVjdCBpbiByYWRpYW5zLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMuX3JvdGF0aW9uID0gMDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBvcGFjaXR5IG9mIHRoZSBvYmplY3QuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy5hbHBoYSA9IDE7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgdmlzaWJpbGl0eSBvZiB0aGUgb2JqZWN0LiBJZiBmYWxzZSB0aGUgb2JqZWN0IHdpbGwgbm90IGJlIGRyYXduLCBhbmRcbiAgICAgKiB0aGUgdXBkYXRlVHJhbnNmb3JtIGZ1bmN0aW9uIHdpbGwgbm90IGJlIGNhbGxlZC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICovXG4gICAgdGhpcy52aXNpYmxlID0gdHJ1ZTtcblxuICAgIC8qKlxuICAgICAqIENhbiB0aGlzIG9iamVjdCBiZSByZW5kZXJlZCwgaWYgZmFsc2UgdGhlIG9iamVjdCB3aWxsIG5vdCBiZSBkcmF3biBidXQgdGhlIHVwZGF0ZVRyYW5zZm9ybVxuICAgICAqIG1ldGhvZHMgd2lsbCBzdGlsbCBiZSBjYWxsZWQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqL1xuICAgIHRoaXMucmVuZGVyYWJsZSA9IHRydWU7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgZGlzcGxheSBvYmplY3QgY29udGFpbmVyIHRoYXQgY29udGFpbnMgdGhpcyBkaXNwbGF5IG9iamVjdC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuQ29udGFpbmVyfVxuICAgICAqIEByZWFkT25seVxuICAgICAqL1xuICAgIHRoaXMucGFyZW50ID0gbnVsbDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBtdWx0aXBsaWVkIGFscGhhIG9mIHRoZSBkaXNwbGF5T2JqZWN0XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQHJlYWRPbmx5XG4gICAgICovXG4gICAgdGhpcy53b3JsZEFscGhhID0gMTtcblxuICAgIC8qKlxuICAgICAqIEN1cnJlbnQgdHJhbnNmb3JtIG9mIHRoZSBvYmplY3QgYmFzZWQgb24gd29ybGQgKHBhcmVudCkgZmFjdG9yc1xuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5NYXRyaXh9XG4gICAgICogQHJlYWRPbmx5XG4gICAgICovXG4gICAgdGhpcy53b3JsZFRyYW5zZm9ybSA9IG5ldyBtYXRoLk1hdHJpeCgpO1xuICAgIHRoaXMubG9jYWxUcmFuc2Zvcm0gPSBuZXcgbWF0aC5NYXRyaXgoKTtcblxuXG4gICAgLyoqXG4gICAgICogVGhlIGFyZWEgdGhlIGZpbHRlciBpcyBhcHBsaWVkIHRvLiBUaGlzIGlzIHVzZWQgYXMgbW9yZSBvZiBhbiBvcHRpbWlzYXRpb25cbiAgICAgKiByYXRoZXIgdGhhbiBmaWd1cmluZyBvdXQgdGhlIGRpbWVuc2lvbnMgb2YgdGhlIGRpc3BsYXlPYmplY3QgZWFjaCBmcmFtZSB5b3UgY2FuIHNldCB0aGlzIHJlY3RhbmdsZVxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5SZWN0YW5nbGV9XG4gICAgICovXG4gICAgdGhpcy5maWx0ZXJBcmVhID0gbnVsbDtcblxuICAgIC8qKlxuICAgICAqIGNhY2hlZCBzaW4gcm90YXRpb25cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX3NyID0gMDtcblxuICAgIC8qKlxuICAgICAqIGNhY2hlZCBjb3Mgcm90YXRpb25cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX2NyID0gMTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBvcmlnaW5hbCwgY2FjaGVkIGJvdW5kcyBvZiB0aGUgb2JqZWN0XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlJlY3RhbmdsZX1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX2JvdW5kcyA9IG5ldyBtYXRoLlJlY3RhbmdsZSgwLCAwLCAxLCAxKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBtb3N0IHVwLXRvLWRhdGUgYm91bmRzIG9mIHRoZSBvYmplY3RcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuUmVjdGFuZ2xlfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fY3VycmVudEJvdW5kcyA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgb3JpZ2luYWwsIGNhY2hlZCBtYXNrIG9mIHRoZSBvYmplY3RcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuUmVjdGFuZ2xlfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fbWFzayA9IG51bGw7XG5cbiAgICB0aGlzLmRpcnR5VHJhbnNmb3JtID0gdHJ1ZTtcbn1cblxuLy8gY29uc3RydWN0b3JcbkRpc3BsYXlPYmplY3QucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShFdmVudEVtaXR0ZXIucHJvdG90eXBlKTtcbkRpc3BsYXlPYmplY3QucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gRGlzcGxheU9iamVjdDtcbm1vZHVsZS5leHBvcnRzID0gRGlzcGxheU9iamVjdDtcblxudmFyIENhY2hlUG9pbnQgPSBmdW5jdGlvbihkb2Mpe1xuICAgIFxuICAgIHRoaXMuZG9jID0gZG9jO1xuXG4gICAgdGhpcy54ID0gMDtcbiAgICB0aGlzLnkgPSAwO1xufVxuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhDYWNoZVBvaW50LnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFRoZSBwb3NpdGlvbiBvZiB0aGUgZGlzcGxheU9iamVjdCBvbiB0aGUgeCBheGlzIHJlbGF0aXZlIHRvIHRoZSBsb2NhbCBjb29yZGluYXRlcyBvZiB0aGUgcGFyZW50LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLkRpc3BsYXlPYmplY3QjXG4gICAgICovXG4gICAgeDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmRvYy5wb3NpdGlvbi54O1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5kb2MucG9zaXRpb24ueCA9IHZhbHVlO1xuICAgICAgICAgICAgdGhpcy5kb2MuZGlydHlUcmFuc2Zvcm0gPSB0cnVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIHk6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5kb2MucG9zaWl0b24ueTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuZG9jLnBvc2l0aW9uLnkgPSB2YWx1ZTtcbiAgICAgICAgICAgIHRoaXMuZG9jLmRpcnR5VHJhbnNmb3JtID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuXG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKERpc3BsYXlPYmplY3QucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogVGhlIHBvc2l0aW9uIG9mIHRoZSBkaXNwbGF5T2JqZWN0IG9uIHRoZSB4IGF4aXMgcmVsYXRpdmUgdG8gdGhlIGxvY2FsIGNvb3JkaW5hdGVzIG9mIHRoZSBwYXJlbnQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuRGlzcGxheU9iamVjdCNcbiAgICAgKi9cbiAgICB4OiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMucG9zaXRpb24ueDtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMucG9zaXRpb24ueCA9IHZhbHVlO1xuICAgICAgICAgICAgdGhpcy5kaXJ0eVRyYW5zZm9ybSA9IHRydWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVGhlIHBvc2l0aW9uIG9mIHRoZSBkaXNwbGF5T2JqZWN0IG9uIHRoZSB5IGF4aXMgcmVsYXRpdmUgdG8gdGhlIGxvY2FsIGNvb3JkaW5hdGVzIG9mIHRoZSBwYXJlbnQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuRGlzcGxheU9iamVjdCNcbiAgICAgKi9cbiAgICB5OiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMucG9zaXRpb24ueTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMucG9zaXRpb24ueSA9IHZhbHVlO1xuICAgICAgICAgICAgdGhpcy5kaXJ0eVRyYW5zZm9ybSA9IHRydWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgc2NhbGVYOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuc2NhbGUueDtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuc2NhbGUueCA9IHZhbHVlO1xuICAgICAgICAgICAgdGhpcy5kaXJ0eVRyYW5zZm9ybSA9IHRydWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVGhlIHBvc2l0aW9uIG9mIHRoZSBkaXNwbGF5T2JqZWN0IG9uIHRoZSB5IGF4aXMgcmVsYXRpdmUgdG8gdGhlIGxvY2FsIGNvb3JkaW5hdGVzIG9mIHRoZSBwYXJlbnQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuRGlzcGxheU9iamVjdCNcbiAgICAgKi9cbiAgICBzY2FsZVk6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5zY2FsZS55O1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5zY2FsZS55ID0gdmFsdWU7XG4gICAgICAgICAgICB0aGlzLmRpcnR5VHJhbnNmb3JtID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICByb3RhdGlvbjoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9yb3RhdGlvbjtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuX3JvdGF0aW9uID0gdmFsdWU7XG4gICAgICAgICAgICB0aGlzLmRpcnR5VHJhbnNmb3JtID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMuX3NyID0gTWF0aC5zaW4odmFsdWUpO1xuICAgICAgICAgICAgdGhpcy5fY3IgPSBNYXRoLmNvcyh2YWx1ZSk7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVGhlIHBvc2l0aW9uIG9mIHRoZSBkaXNwbGF5T2JqZWN0IG9uIHRoZSB5IGF4aXMgcmVsYXRpdmUgdG8gdGhlIGxvY2FsIGNvb3JkaW5hdGVzIG9mIHRoZSBwYXJlbnQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuRGlzcGxheU9iamVjdCNcbiAgICAgKi9cbiAgICBzY2FsZVk6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5zY2FsZS55O1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5zY2FsZS55ID0gdmFsdWU7XG4gICAgICAgICAgICB0aGlzLmRpcnR5VHJhbnNmb3JtID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBJbmRpY2F0ZXMgaWYgdGhlIHNwcml0ZSBpcyBnbG9iYWxseSB2aXNpYmxlLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5EaXNwbGF5T2JqZWN0I1xuICAgICAqIEByZWFkb25seVxuICAgICAqL1xuICAgIHdvcmxkVmlzaWJsZToge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHZhciBpdGVtID0gdGhpcztcblxuICAgICAgICAgICAgZG8ge1xuICAgICAgICAgICAgICAgIGlmICghaXRlbS52aXNpYmxlKVxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGl0ZW0gPSBpdGVtLnBhcmVudDtcbiAgICAgICAgICAgIH0gd2hpbGUgKGl0ZW0pO1xuXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBTZXRzIGEgbWFzayBmb3IgdGhlIGRpc3BsYXlPYmplY3QuIEEgbWFzayBpcyBhbiBvYmplY3QgdGhhdCBsaW1pdHMgdGhlIHZpc2liaWxpdHkgb2YgYW4gb2JqZWN0IHRvIHRoZSBzaGFwZSBvZiB0aGUgbWFzayBhcHBsaWVkIHRvIGl0LlxuICAgICAqIEluIFBJWEkgYSByZWd1bGFyIG1hc2sgbXVzdCBiZSBhIFBJWEkuR3JhcGhpY3Mgb3IgYSBQSVhJLlNwcml0ZSBvYmplY3QuIFRoaXMgYWxsb3dzIGZvciBtdWNoIGZhc3RlciBtYXNraW5nIGluIGNhbnZhcyBhcyBpdCB1dGlsaXNlcyBzaGFwZSBjbGlwcGluZy5cbiAgICAgKiBUbyByZW1vdmUgYSBtYXNrLCBzZXQgdGhpcyBwcm9wZXJ0eSB0byBudWxsLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5HcmFwaGljc3xQSVhJLlNwcml0ZX1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5EaXNwbGF5T2JqZWN0I1xuICAgICAqL1xuICAgIG1hc2s6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fbWFzaztcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGlmICh0aGlzLl9tYXNrKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHRoaXMuX21hc2sucmVuZGVyYWJsZSA9IHRydWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuX21hc2sgPSB2YWx1ZTtcblxuICAgICAgICAgICAgaWYgKHRoaXMuX21hc2spXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdGhpcy5fbWFzay5yZW5kZXJhYmxlID0gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgZmlsdGVycyBmb3IgdGhlIGRpc3BsYXlPYmplY3QuXG4gICAgICogKiBJTVBPUlRBTlQ6IFRoaXMgaXMgYSB3ZWJHTCBvbmx5IGZlYXR1cmUgYW5kIHdpbGwgYmUgaWdub3JlZCBieSB0aGUgY2FudmFzIHJlbmRlcmVyLlxuICAgICAqIFRvIHJlbW92ZSBmaWx0ZXJzIHNpbXBseSBzZXQgdGhpcyBwcm9wZXJ0eSB0byAnbnVsbCdcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuQWJzdHJhY3RGaWx0ZXJbXX1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5EaXNwbGF5T2JqZWN0I1xuICAgICAqL1xuICAgIGZpbHRlcnM6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fZmlsdGVycyAmJiB0aGlzLl9maWx0ZXJzLnNsaWNlKCk7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLl9maWx0ZXJzID0gdmFsdWUgJiYgdmFsdWUuc2xpY2UoKTtcbiAgICAgICAgfVxuICAgIH1cblxufSk7XG5cbi8qXG4gKiBVcGRhdGVzIHRoZSBvYmplY3QgdHJhbnNmb3JtIGZvciByZW5kZXJpbmdcbiAqXG4gKiBUT0RPIC0gT3B0aW1pemF0aW9uIHBhc3MhXG4gKi9cbkRpc3BsYXlPYmplY3QucHJvdG90eXBlLnVwZGF0ZVRyYW5zZm9ybSA9IGZ1bmN0aW9uICgpXG57XG4gICAgdmFyIHB0ID0gdGhpcy5wYXJlbnQud29ybGRUcmFuc2Zvcm07XG4gICAgdmFyIHd0ID0gdGhpcy53b3JsZFRyYW5zZm9ybTtcbiAgICB2YXIgbHQgPSB0aGlzLmxvY2FsVHJhbnNmb3JtO1xuXG4gICAgaWYodGhpcy5kaXJ0eVRyYW5zZm9ybSlcbiAgICB7XG4gICAgICAgIC8vIGdldCB0aGUgbWF0cml4IHZhbHVlcyBvZiB0aGUgZGlzcGxheW9iamVjdCBiYXNlZCBvbiBpdHMgdHJhbnNmb3JtIHByb3BlcnRpZXMuLlxuICAgICAgICBsdC5hICA9ICB0aGlzLl9jciAqIHRoaXMuc2NhbGUueDtcbiAgICAgICAgbHQuYiAgPSAgdGhpcy5fc3IgKiB0aGlzLnNjYWxlLng7XG4gICAgICAgIGx0LmMgID0gLXRoaXMuX3NyICogdGhpcy5zY2FsZS55O1xuICAgICAgICBsdC5kICA9ICB0aGlzLl9jciAqIHRoaXMuc2NhbGUueTtcbiAgICAgICAgbHQudHggPSAgdGhpcy5wb3NpdGlvbi54IC0gKHRoaXMucGl2b3QueCAqIGx0LmEgKyB0aGlzLnBpdm90LnkgKiBsdC5jKTtcbiAgICAgICAgbHQudHkgPSAgdGhpcy5wb3NpdGlvbi55IC0gKHRoaXMucGl2b3QueCAqIGx0LmIgKyB0aGlzLnBpdm90LnkgKiBsdC5kKTtcbiAgICB9XG5cbiAgICBpZih0aGlzLmRpcnR5VHJhbnNmb3JtIHx8IHRoaXMucGFyZW50LmRpcnR5VHJhbnNmb3JtKVxuICAgIHsgICAgICBcbiAgICAgICAgLy8gY29uY2F0IHRoZSBwYXJlbnQgbWF0cml4IHdpdGggdGhlIG9iamVjdHMgdHJhbnNmb3JtLlxuICAgICAgICB3dC5hICA9IGx0LmEgICogcHQuYSArIGx0LmIgICogcHQuYztcbiAgICAgICAgd3QuYiAgPSBsdC5hICAqIHB0LmIgKyBsdC5iICAqIHB0LmQ7XG4gICAgICAgIHd0LmMgID0gbHQuYyAgKiBwdC5hICsgbHQuZCAgKiBwdC5jO1xuICAgICAgICB3dC5kICA9IGx0LmMgICogcHQuYiArIGx0LmQgICogcHQuZDtcbiAgICAgICAgd3QudHggPSBsdC50eCAqIHB0LmEgKyBsdC50eSAqIHB0LmMgKyBwdC50eDtcbiAgICAgICAgd3QudHkgPSBsdC50eCAqIHB0LmIgKyBsdC50eSAqIHB0LmQgKyBwdC50eTsgICAgICAgXG4gICAgXG4gICAgICAgIHRoaXMuX2N1cnJlbnRCb3VuZHMgPSBudWxsO1xuICAgIH1cblxuICAgIC8vIG11bHRpcGx5IHRoZSBhbHBoYXMuLlxuICAgIHRoaXMud29ybGRBbHBoYSA9IHRoaXMuYWxwaGEgKiB0aGlzLnBhcmVudC53b3JsZEFscGhhO1xuXG4gICAgLy8gcmVzZXQgdGhlIGJvdW5kcyBlYWNoIHRpbWUgdGhpcyBpcyBjYWxsZWQhXG4gICAgXG59O1xuXG4vLyBwZXJmb3JtYW5jZSBpbmNyZWFzZSB0byBhdm9pZCB1c2luZyBjYWxsLi4gKDEweCBmYXN0ZXIpXG5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS5kaXNwbGF5T2JqZWN0VXBkYXRlVHJhbnNmb3JtID0gRGlzcGxheU9iamVjdC5wcm90b3R5cGUudXBkYXRlVHJhbnNmb3JtO1xuXG4vKipcbiAqXG4gKlxuICogUmV0cmlldmVzIHRoZSBib3VuZHMgb2YgdGhlIGRpc3BsYXlPYmplY3QgYXMgYSByZWN0YW5nbGUgb2JqZWN0XG4gKlxuICogQHBhcmFtIG1hdHJpeCB7UElYSS5NYXRyaXh9XG4gKiBAcmV0dXJuIHtQSVhJLlJlY3RhbmdsZX0gdGhlIHJlY3Rhbmd1bGFyIGJvdW5kaW5nIGFyZWFcbiAqL1xuRGlzcGxheU9iamVjdC5wcm90b3R5cGUuZ2V0Qm91bmRzID0gZnVuY3Rpb24gKG1hdHJpeCkgLy8ganNoaW50IHVudXNlZDpmYWxzZVxue1xuICAgIHJldHVybiBtYXRoLlJlY3RhbmdsZS5FTVBUWTtcbn07XG5cbi8qKlxuICogUmV0cmlldmVzIHRoZSBsb2NhbCBib3VuZHMgb2YgdGhlIGRpc3BsYXlPYmplY3QgYXMgYSByZWN0YW5nbGUgb2JqZWN0XG4gKlxuICogQHJldHVybiB7UElYSS5SZWN0YW5nbGV9IHRoZSByZWN0YW5ndWxhciBib3VuZGluZyBhcmVhXG4gKi9cbkRpc3BsYXlPYmplY3QucHJvdG90eXBlLmdldExvY2FsQm91bmRzID0gZnVuY3Rpb24gKClcbntcbiAgICByZXR1cm4gdGhpcy5nZXRCb3VuZHMobWF0aC5NYXRyaXguSURFTlRJVFkpO1xufTtcblxuLyoqXG4gKiBDYWxjdWxhdGVzIHRoZSBnbG9iYWwgcG9zaXRpb24gb2YgdGhlIGRpc3BsYXkgb2JqZWN0XG4gKlxuICogQHBhcmFtIHBvc2l0aW9uIHtQSVhJLlBvaW50fSBUaGUgd29ybGQgb3JpZ2luIHRvIGNhbGN1bGF0ZSBmcm9tXG4gKiBAcmV0dXJuIHtQSVhJLlBvaW50fSBBIHBvaW50IG9iamVjdCByZXByZXNlbnRpbmcgdGhlIHBvc2l0aW9uIG9mIHRoaXMgb2JqZWN0XG4gKi9cbkRpc3BsYXlPYmplY3QucHJvdG90eXBlLnRvR2xvYmFsID0gZnVuY3Rpb24gKHBvc2l0aW9uKVxue1xuICAgIC8vIHRoaXMgcGFyZW50IGNoZWNrIGlzIGZvciBqdXN0IGluIGNhc2UgdGhlIGl0ZW0gaXMgYSByb290IG9iamVjdC5cbiAgICAvLyBJZiBpdCBpcyB3ZSBuZWVkIHRvIGdpdmUgaXQgYSB0ZW1wb3JhcnkgcGFyZW50IHNvIHRoYXQgZGlzcGxheU9iamVjdFVwZGF0ZVRyYW5zZm9ybSB3b3JrcyBjb3JyZWN0bHlcbiAgICAvLyB0aGlzIGlzIG1haW5seSB0byBhdm9pZCBhIHBhcmVudCBjaGVjayBpbiB0aGUgbWFpbiBsb29wLiBFdmVyeSBsaXR0bGUgaGVscHMgZm9yIHBlcmZvcm1hbmNlIDopXG4gICAgaWYoIXRoaXMucGFyZW50KVxuICAgIHtcbiAgICAgICAgdGhpcy5wYXJlbnQgPSBfdGVtcERpc3BsYXlPYmplY3RQYXJlbnQ7XG4gICAgICAgIHRoaXMuZGlzcGxheU9iamVjdFVwZGF0ZVRyYW5zZm9ybSgpO1xuICAgICAgICB0aGlzLnBhcmVudCA9IG51bGw7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHRoaXMuZGlzcGxheU9iamVjdFVwZGF0ZVRyYW5zZm9ybSgpO1xuICAgIH1cblxuICAgIC8vIGRvbid0IG5lZWQgdG8gdXBkYXRlIHRoZSBsb3RcbiAgICByZXR1cm4gdGhpcy53b3JsZFRyYW5zZm9ybS5hcHBseShwb3NpdGlvbik7XG59O1xuXG4vKipcbiAqIENhbGN1bGF0ZXMgdGhlIGxvY2FsIHBvc2l0aW9uIG9mIHRoZSBkaXNwbGF5IG9iamVjdCByZWxhdGl2ZSB0byBhbm90aGVyIHBvaW50XG4gKlxuICogQHBhcmFtIHBvc2l0aW9uIHtQSVhJLlBvaW50fSBUaGUgd29ybGQgb3JpZ2luIHRvIGNhbGN1bGF0ZSBmcm9tXG4gKiBAcGFyYW0gW2Zyb21dIHtQSVhJLkRpc3BsYXlPYmplY3R9IFRoZSBEaXNwbGF5T2JqZWN0IHRvIGNhbGN1bGF0ZSB0aGUgZ2xvYmFsIHBvc2l0aW9uIGZyb21cbiAqIEBwYXJhbSBbcG9pbnRdIHtQSVhJLlBvaW50fSBBIFBvaW50IG9iamVjdCBpbiB3aGljaCB0byBzdG9yZSB0aGUgdmFsdWUsIG9wdGlvbmFsIChvdGhlcndpc2Ugd2lsbCBjcmVhdGUgYSBuZXcgUG9pbnQpXG4gKiBAcmV0dXJuIHtQSVhJLlBvaW50fSBBIHBvaW50IG9iamVjdCByZXByZXNlbnRpbmcgdGhlIHBvc2l0aW9uIG9mIHRoaXMgb2JqZWN0XG4gKi9cbkRpc3BsYXlPYmplY3QucHJvdG90eXBlLnRvTG9jYWwgPSBmdW5jdGlvbiAocG9zaXRpb24sIGZyb20sIHBvaW50KVxue1xuICAgIGlmIChmcm9tKVxuICAgIHtcbiAgICAgICAgcG9zaXRpb24gPSBmcm9tLnRvR2xvYmFsKHBvc2l0aW9uKTtcbiAgICB9XG5cbiAgICAvLyB0aGlzIHBhcmVudCBjaGVjayBpcyBmb3IganVzdCBpbiBjYXNlIHRoZSBpdGVtIGlzIGEgcm9vdCBvYmplY3QuXG4gICAgLy8gSWYgaXQgaXMgd2UgbmVlZCB0byBnaXZlIGl0IGEgdGVtcG9yYXJ5IHBhcmVudCBzbyB0aGF0IGRpc3BsYXlPYmplY3RVcGRhdGVUcmFuc2Zvcm0gd29ya3MgY29ycmVjdGx5XG4gICAgLy8gdGhpcyBpcyBtYWlubHkgdG8gYXZvaWQgYSBwYXJlbnQgY2hlY2sgaW4gdGhlIG1haW4gbG9vcC4gRXZlcnkgbGl0dGxlIGhlbHBzIGZvciBwZXJmb3JtYW5jZSA6KVxuICAgIGlmKCF0aGlzLnBhcmVudClcbiAgICB7XG4gICAgICAgIHRoaXMucGFyZW50ID0gX3RlbXBEaXNwbGF5T2JqZWN0UGFyZW50O1xuICAgICAgICB0aGlzLmRpc3BsYXlPYmplY3RVcGRhdGVUcmFuc2Zvcm0oKTtcbiAgICAgICAgdGhpcy5wYXJlbnQgPSBudWxsO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICB0aGlzLmRpc3BsYXlPYmplY3RVcGRhdGVUcmFuc2Zvcm0oKTtcbiAgICB9XG5cbiAgICAvLyBzaW1wbHkgYXBwbHkgdGhlIG1hdHJpeC4uXG4gICAgcmV0dXJuIHRoaXMud29ybGRUcmFuc2Zvcm0uYXBwbHlJbnZlcnNlKHBvc2l0aW9uLCBwb2ludCk7XG59O1xuXG4vKipcbiAqIFJlbmRlcnMgdGhlIG9iamVjdCB1c2luZyB0aGUgV2ViR0wgcmVuZGVyZXJcbiAqXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcn0gVGhlIHJlbmRlcmVyXG4gKiBAcHJpdmF0ZVxuICovXG5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS5yZW5kZXJXZWJHTCA9IGZ1bmN0aW9uIChyZW5kZXJlcikgLy8ganNoaW50IHVudXNlZDpmYWxzZVxue1xuICAgIC8vIE9WRVJXUklURTtcbn07XG5cbi8qKlxuICogUmVuZGVycyB0aGUgb2JqZWN0IHVzaW5nIHRoZSBDYW52YXMgcmVuZGVyZXJcbiAqXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuQ2FudmFzUmVuZGVyZXJ9IFRoZSByZW5kZXJlclxuICogQHByaXZhdGVcbiAqL1xuRGlzcGxheU9iamVjdC5wcm90b3R5cGUucmVuZGVyQ2FudmFzID0gZnVuY3Rpb24gKHJlbmRlcmVyKSAvLyBqc2hpbnQgdW51c2VkOmZhbHNlXG57XG4gICAgLy8gT1ZFUldSSVRFO1xufTtcbi8qKlxuICogVXNlZnVsIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyBhIHRleHR1cmUgb2YgdGhlIGRpc3BsYXkgb2JqZWN0IHRoYXQgY2FuIHRoZW4gYmUgdXNlZCB0byBjcmVhdGUgc3ByaXRlc1xuICogVGhpcyBjYW4gYmUgcXVpdGUgdXNlZnVsIGlmIHlvdXIgZGlzcGxheU9iamVjdCBpcyBzdGF0aWMgLyBjb21wbGljYXRlZCBhbmQgbmVlZHMgdG8gYmUgcmV1c2VkIG11bHRpcGxlIHRpbWVzLlxuICpcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5DYW52YXNSZW5kZXJlcnxQSVhJLldlYkdMUmVuZGVyZXJ9IFRoZSByZW5kZXJlciB1c2VkIHRvIGdlbmVyYXRlIHRoZSB0ZXh0dXJlLlxuICogQHBhcmFtIHNjYWxlTW9kZSB7bnVtYmVyfSBTZWUge0BsaW5rIFBJWEkuU0NBTEVfTU9ERVN9IGZvciBwb3NzaWJsZSB2YWx1ZXNcbiAqIEBwYXJhbSByZXNvbHV0aW9uIHtudW1iZXJ9IFRoZSByZXNvbHV0aW9uIG9mIHRoZSB0ZXh0dXJlIGJlaW5nIGdlbmVyYXRlZFxuICogQHJldHVybiB7UElYSS5UZXh0dXJlfSBhIHRleHR1cmUgb2YgdGhlIGRpc3BsYXkgb2JqZWN0XG4gKi9cbkRpc3BsYXlPYmplY3QucHJvdG90eXBlLmdlbmVyYXRlVGV4dHVyZSA9IGZ1bmN0aW9uIChyZW5kZXJlciwgc2NhbGVNb2RlLCByZXNvbHV0aW9uKVxue1xuICAgIHZhciBib3VuZHMgPSB0aGlzLmdldExvY2FsQm91bmRzKCk7XG5cbiAgICB2YXIgcmVuZGVyVGV4dHVyZSA9IG5ldyBSZW5kZXJUZXh0dXJlKHJlbmRlcmVyLCBib3VuZHMud2lkdGggfCAwLCBib3VuZHMuaGVpZ2h0IHwgMCwgc2NhbGVNb2RlLCByZXNvbHV0aW9uKTtcblxuICAgIF90ZW1wTWF0cml4LnR4ID0gLWJvdW5kcy54O1xuICAgIF90ZW1wTWF0cml4LnR5ID0gLWJvdW5kcy55O1xuXG4gICAgcmVuZGVyVGV4dHVyZS5yZW5kZXIodGhpcywgX3RlbXBNYXRyaXgpO1xuXG4gICAgcmV0dXJuIHJlbmRlclRleHR1cmU7XG59O1xuXG4vKipcbiAqIFNldCB0aGUgcGFyZW50IENvbnRhaW5lciBvZiB0aGlzIERpc3BsYXlPYmplY3RcbiAqXG4gKiBAcGFyYW0gY29udGFpbmVyIHtDb250YWluZXJ9IFRoZSBDb250YWluZXIgdG8gYWRkIHRoaXMgRGlzcGxheU9iamVjdCB0b1xuICogQHJldHVybiB7Q29udGFpbmVyfSBUaGUgQ29udGFpbmVyIHRoYXQgdGhpcyBEaXNwbGF5T2JqZWN0IHdhcyBhZGRlZCB0b1xuICovXG5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS5zZXRQYXJlbnQgPSBmdW5jdGlvbiAoY29udGFpbmVyKVxue1xuICAgIGlmICghY29udGFpbmVyIHx8ICFjb250YWluZXIuYWRkQ2hpbGQpXG4gICAge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3NldFBhcmVudDogQXJndW1lbnQgbXVzdCBiZSBhIENvbnRhaW5lcicpO1xuICAgIH1cblxuICAgIGNvbnRhaW5lci5hZGRDaGlsZCh0aGlzKTtcbiAgICByZXR1cm4gY29udGFpbmVyO1xufTtcblxuLyoqXG4gKiBDb252ZW5pZW5jZSBmdW5jdGlvbiB0byBzZXQgdGhlIHBvc3Rpb24sIHNjYWxlLCBza2V3IGFuZCBwaXZvdCBhdCBvbmNlLlxuICpcbiAqIEBwYXJhbSBbeD0wXSB7bnVtYmVyfSBUaGUgWCBwb3NpdGlvblxuICogQHBhcmFtIFt5PTBdIHtudW1iZXJ9IFRoZSBZIHBvc2l0aW9uXG4gKiBAcGFyYW0gW3NjYWxlWD0xXSB7bnVtYmVyfSBUaGUgWCBzY2FsZSB2YWx1ZVxuICogQHBhcmFtIFtzY2FsZVk9MV0ge251bWJlcn0gVGhlIFkgc2NhbGUgdmFsdWVcbiAqIEBwYXJhbSBbcm90YXRpb249MF0ge251bWJlcn0gVGhlIHJvdGF0aW9uXG4gKiBAcGFyYW0gW3NrZXdYPTBdIHtudW1iZXJ9IFRoZSBYIHNrZXcgdmFsdWVcbiAqIEBwYXJhbSBbc2tld1k9MF0ge251bWJlcn0gVGhlIFkgc2tldyB2YWx1ZVxuICogQHBhcmFtIFtwaXZvdFg9MF0ge251bWJlcn0gVGhlIFggcGl2b3QgdmFsdWVcbiAqIEBwYXJhbSBbcGl2b3RZPTBdIHtudW1iZXJ9IFRoZSBZIHBpdm90IHZhbHVlXG4gKiBAcmV0dXJuIHtQSVhJLkRpc3BsYXlPYmplY3R9XG4gKi9cbkRpc3BsYXlPYmplY3QucHJvdG90eXBlLnNldFRyYW5zZm9ybSA9IGZ1bmN0aW9uKHgsIHksIHNjYWxlWCwgc2NhbGVZLCByb3RhdGlvbiwgc2tld1gsIHNrZXdZLCBwaXZvdFgsIHBpdm90WSkgLy9qc2hpbnQgaWdub3JlOmxpbmVcbntcbiAgICB0aGlzLnBvc2l0aW9uLnggPSB4IHx8IDA7XG4gICAgdGhpcy5wb3NpdGlvbi55ID0geSB8fCAwO1xuICAgIHRoaXMuc2NhbGUueCA9ICFzY2FsZVggPyAxIDogc2NhbGVYO1xuICAgIHRoaXMuc2NhbGUueSA9ICFzY2FsZVkgPyAxIDogc2NhbGVZO1xuICAgIHRoaXMucm90YXRpb24gPSByb3RhdGlvbiB8fCAwO1xuICAgIHRoaXMuc2tldy54ID0gc2tld1ggfHwgMDtcbiAgICB0aGlzLnNrZXcueSA9IHNrZXdZIHx8IDA7XG4gICAgdGhpcy5waXZvdC54ID0gcGl2b3RYIHx8IDA7XG4gICAgdGhpcy5waXZvdC55ID0gcGl2b3RZIHx8IDA7XG4gICAgdGhpcy5kaXJ0eVRyYW5zZm9ybSA9IHRydWU7XG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIEJhc2UgZGVzdHJveSBtZXRob2QgZm9yIGdlbmVyaWMgZGlzcGxheSBvYmplY3RzXG4gKlxuICovXG5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKClcbntcblxuICAgIHRoaXMucG9zaXRpb24gPSBudWxsO1xuICAgIHRoaXMuc2NhbGUgPSBudWxsO1xuICAgIHRoaXMucGl2b3QgPSBudWxsO1xuICAgIHRoaXMuc2tldyA9IG51bGw7XG5cbiAgICB0aGlzLnBhcmVudCA9IG51bGw7XG5cbiAgICB0aGlzLl9ib3VuZHMgPSBudWxsO1xuICAgIHRoaXMuX2N1cnJlbnRCb3VuZHMgPSBudWxsO1xuICAgIHRoaXMuX21hc2sgPSBudWxsO1xuXG4gICAgdGhpcy53b3JsZFRyYW5zZm9ybSA9IG51bGw7XG4gICAgdGhpcy5maWx0ZXJBcmVhID0gbnVsbDtcbn07XG4iLCJ2YXIgQ29udGFpbmVyID0gcmVxdWlyZSgnLi4vZGlzcGxheS9Db250YWluZXInKSxcbiAgICBUZXh0dXJlID0gcmVxdWlyZSgnLi4vdGV4dHVyZXMvVGV4dHVyZScpLFxuICAgIENhbnZhc0J1ZmZlciA9IHJlcXVpcmUoJy4uL3JlbmRlcmVycy9jYW52YXMvdXRpbHMvQ2FudmFzQnVmZmVyJyksXG4gICAgQ2FudmFzR3JhcGhpY3MgPSByZXF1aXJlKCcuLi9yZW5kZXJlcnMvY2FudmFzL3V0aWxzL0NhbnZhc0dyYXBoaWNzJyksXG4gICAgR3JhcGhpY3NEYXRhID0gcmVxdWlyZSgnLi9HcmFwaGljc0RhdGEnKSxcbiAgICBtYXRoID0gcmVxdWlyZSgnLi4vbWF0aCcpLFxuICAgIENPTlNUID0gcmVxdWlyZSgnLi4vY29uc3QnKSxcbiAgICB0ZW1wUG9pbnQgPSBuZXcgbWF0aC5Qb2ludCgpO1xuXG4vKipcbiAqIFRoZSBHcmFwaGljcyBjbGFzcyBjb250YWlucyBtZXRob2RzIHVzZWQgdG8gZHJhdyBwcmltaXRpdmUgc2hhcGVzIHN1Y2ggYXMgbGluZXMsIGNpcmNsZXMgYW5kXG4gKiByZWN0YW5nbGVzIHRvIHRoZSBkaXNwbGF5LCBhbmQgdG8gY29sb3IgYW5kIGZpbGwgdGhlbS5cbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQ29udGFpbmVyXG4gKiBAbWVtYmVyb2YgUElYSVxuICovXG5mdW5jdGlvbiBHcmFwaGljcygpXG57XG4gICAgQ29udGFpbmVyLmNhbGwodGhpcyk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYWxwaGEgdmFsdWUgdXNlZCB3aGVuIGZpbGxpbmcgdGhlIEdyYXBoaWNzIG9iamVjdC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAxXG4gICAgICovXG4gICAgdGhpcy5maWxsQWxwaGEgPSAxO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHdpZHRoICh0aGlja25lc3MpIG9mIGFueSBsaW5lcyBkcmF3bi5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAwXG4gICAgICovXG4gICAgdGhpcy5saW5lV2lkdGggPSAwO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGNvbG9yIG9mIGFueSBsaW5lcyBkcmF3bi5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge3N0cmluZ31cbiAgICAgKiBAZGVmYXVsdCAwXG4gICAgICovXG4gICAgdGhpcy5saW5lQ29sb3IgPSAwO1xuXG4gICAgLyoqXG4gICAgICogR3JhcGhpY3MgZGF0YVxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5HcmFwaGljc0RhdGFbXX1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuZ3JhcGhpY3NEYXRhID0gW107XG5cbiAgICAvKipcbiAgICAgKiBUaGUgdGludCBhcHBsaWVkIHRvIHRoZSBncmFwaGljIHNoYXBlLiBUaGlzIGlzIGEgaGV4IHZhbHVlLiBBcHBseSBhIHZhbHVlIG9mIDB4RkZGRkZGIHRvIHJlc2V0IHRoZSB0aW50LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDB4RkZGRkZGXG4gICAgICovXG4gICAgdGhpcy50aW50ID0gMHhGRkZGRkY7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgcHJldmlvdXMgdGludCBhcHBsaWVkIHRvIHRoZSBncmFwaGljIHNoYXBlLiBVc2VkIHRvIGNvbXBhcmUgdG8gdGhlIGN1cnJlbnQgdGludCBhbmQgY2hlY2sgaWYgdGhlcmVzIGNoYW5nZS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBkZWZhdWx0IDB4RkZGRkZGXG4gICAgICovXG4gICAgdGhpcy5fcHJldlRpbnQgPSAweEZGRkZGRjtcblxuICAgIC8qKlxuICAgICAqIFRoZSBibGVuZCBtb2RlIHRvIGJlIGFwcGxpZWQgdG8gdGhlIGdyYXBoaWMgc2hhcGUuIEFwcGx5IGEgdmFsdWUgb2YgYFBJWEkuQkxFTkRfTU9ERVMuTk9STUFMYCB0byByZXNldCB0aGUgYmxlbmQgbW9kZS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCBQSVhJLkJMRU5EX01PREVTLk5PUk1BTDtcbiAgICAgKiBAc2VlIFBJWEkuQkxFTkRfTU9ERVNcbiAgICAgKi9cbiAgICB0aGlzLmJsZW5kTW9kZSA9IENPTlNULkJMRU5EX01PREVTLk5PUk1BTDtcblxuICAgIC8qKlxuICAgICAqIEN1cnJlbnQgcGF0aFxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5HcmFwaGljc0RhdGF9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLmN1cnJlbnRQYXRoID0gbnVsbDtcblxuICAgIC8qKlxuICAgICAqIEFycmF5IGNvbnRhaW5pbmcgc29tZSBXZWJHTC1yZWxhdGVkIHByb3BlcnRpZXMgdXNlZCBieSB0aGUgV2ViR0wgcmVuZGVyZXIuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtvYmplY3Q8bnVtYmVyLCBvYmplY3Q+fVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgLy8gVE9ETyAtIF93ZWJnbCBzaG91bGQgdXNlIGEgcHJvdG90eXBlIG9iamVjdCwgbm90IGEgcmFuZG9tIHVuZG9jdW1lbnRlZCBvYmplY3QuLi5cbiAgICB0aGlzLl93ZWJHTCA9IHt9O1xuXG4gICAgLyoqXG4gICAgICogV2hldGhlciB0aGlzIHNoYXBlIGlzIGJlaW5nIHVzZWQgYXMgYSBtYXNrLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKi9cbiAgICB0aGlzLmlzTWFzayA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGJvdW5kcycgcGFkZGluZyB1c2VkIGZvciBib3VuZHMgY2FsY3VsYXRpb24uXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy5ib3VuZHNQYWRkaW5nID0gMDtcblxuICAgIC8qKlxuICAgICAqIEEgY2FjaGUgb2YgdGhlIGxvY2FsIGJvdW5kcyB0byBwcmV2ZW50IHJlY2FsY3VsYXRpb24uXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlJlY3RhbmdsZX1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX2xvY2FsQm91bmRzID0gbmV3IG1hdGguUmVjdGFuZ2xlKDAsMCwxLDEpO1xuXG4gICAgLyoqXG4gICAgICogVXNlZCB0byBkZXRlY3QgaWYgdGhlIGdyYXBoaWNzIG9iamVjdCBoYXMgY2hhbmdlZC4gSWYgdGhpcyBpcyBzZXQgdG8gdHJ1ZSB0aGVuIHRoZSBncmFwaGljc1xuICAgICAqIG9iamVjdCB3aWxsIGJlIHJlY2FsY3VsYXRlZC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLmRpcnR5ID0gdHJ1ZTtcblxuICAgIC8qKlxuICAgICAqIFVzZWQgdG8gZGV0ZWN0IGlmIHRoZSBXZWJHTCBncmFwaGljcyBvYmplY3QgaGFzIGNoYW5nZWQuIElmIHRoaXMgaXMgc2V0IHRvIHRydWUgdGhlbiB0aGVcbiAgICAgKiBncmFwaGljcyBvYmplY3Qgd2lsbCBiZSByZWNhbGN1bGF0ZWQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5nbERpcnR5ID0gZmFsc2U7XG5cbiAgICB0aGlzLmJvdW5kc0RpcnR5ID0gdHJ1ZTtcblxuICAgIC8qKlxuICAgICAqIFVzZWQgdG8gZGV0ZWN0IGlmIHRoZSBjYWNoZWQgc3ByaXRlIG9iamVjdCBuZWVkcyB0byBiZSB1cGRhdGVkLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuY2FjaGVkU3ByaXRlRGlydHkgPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIFdoZW4gY2FjaGVBc0JpdG1hcCBpcyBzZXQgdG8gdHJ1ZSB0aGUgZ3JhcGhpY3Mgb2JqZWN0IHdpbGwgYmUgcmVuZGVyZWQgYXMgaWYgaXQgd2FzIGEgc3ByaXRlLlxuICAgICAqIFRoaXMgaXMgdXNlZnVsIGlmIHlvdXIgZ3JhcGhpY3MgZWxlbWVudCBkb2VzIG5vdCBjaGFuZ2Ugb2Z0ZW4sIGFzIGl0IHdpbGwgc3BlZWQgdXAgdGhlIHJlbmRlcmluZ1xuICAgICAqIG9mIHRoZSBvYmplY3QgaW4gZXhjaGFuZ2UgZm9yIHRha2luZyB1cCB0ZXh0dXJlIG1lbW9yeS4gSXQgaXMgYWxzbyB1c2VmdWwgaWYgeW91IG5lZWQgdGhlIGdyYXBoaWNzXG4gICAgICogb2JqZWN0IHRvIGJlIGFudGktYWxpYXNlZCwgYmVjYXVzZSBpdCB3aWxsIGJlIHJlbmRlcmVkIHVzaW5nIGNhbnZhcy4gVGhpcyBpcyBub3QgcmVjb21tZW5kZWQgaWZcbiAgICAgKiB5b3UgYXJlIGNvbnN0YW50bHkgcmVkcmF3aW5nIHRoZSBncmFwaGljcyBlbGVtZW50LlxuICAgICAqXG4gICAgICogQG5hbWUgY2FjaGVBc0JpdG1hcFxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICogQG1lbWJlcm9mIFBJWEkuR3JhcGhpY3MjXG4gICAgICogQGRlZmF1bHQgZmFsc2VcbiAgICAgKi9cbn1cblxuLy8gY29uc3RydWN0b3JcbkdyYXBoaWNzLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoQ29udGFpbmVyLnByb3RvdHlwZSk7XG5HcmFwaGljcy5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBHcmFwaGljcztcbm1vZHVsZS5leHBvcnRzID0gR3JhcGhpY3M7XG5cbi8qKlxuICogQ3JlYXRlcyBhIG5ldyBHcmFwaGljcyBvYmplY3Qgd2l0aCB0aGUgc2FtZSB2YWx1ZXMgYXMgdGhpcyBvbmUuXG4gKiBOb3RlIHRoYXQgdGhlIG9ubHkgdGhlIHByb3BlcnRpZXMgb2YgdGhlIG9iamVjdCBhcmUgY2xvbmVkLCBub3QgaXRzIHRyYW5zZm9ybSAocG9zaXRpb24sc2NhbGUsZXRjKVxuICpcbiAqIEByZXR1cm4ge1BJWEkuR3JhcGhpY3N9XG4gKi9cbkdyYXBoaWNzLnByb3RvdHlwZS5jbG9uZSA9IGZ1bmN0aW9uICgpXG57XG4gICAgdmFyIGNsb25lID0gbmV3IEdyYXBoaWNzKCk7XG5cbiAgICBjbG9uZS5yZW5kZXJhYmxlICAgID0gdGhpcy5yZW5kZXJhYmxlO1xuICAgIGNsb25lLmZpbGxBbHBoYSAgICAgPSB0aGlzLmZpbGxBbHBoYTtcbiAgICBjbG9uZS5saW5lV2lkdGggICAgID0gdGhpcy5saW5lV2lkdGg7XG4gICAgY2xvbmUubGluZUNvbG9yICAgICA9IHRoaXMubGluZUNvbG9yO1xuICAgIGNsb25lLnRpbnQgICAgICAgICAgPSB0aGlzLnRpbnQ7XG4gICAgY2xvbmUuYmxlbmRNb2RlICAgICA9IHRoaXMuYmxlbmRNb2RlO1xuICAgIGNsb25lLmlzTWFzayAgICAgICAgPSB0aGlzLmlzTWFzaztcbiAgICBjbG9uZS5ib3VuZHNQYWRkaW5nID0gdGhpcy5ib3VuZHNQYWRkaW5nO1xuICAgIGNsb25lLmRpcnR5ICAgICAgICAgPSB0cnVlO1xuICAgIGNsb25lLmdsRGlydHkgICAgICAgPSB0cnVlO1xuICAgIGNsb25lLmNhY2hlZFNwcml0ZURpcnR5ID0gdGhpcy5jYWNoZWRTcHJpdGVEaXJ0eTtcblxuICAgIC8vIGNvcHkgZ3JhcGhpY3MgZGF0YVxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5ncmFwaGljc0RhdGEubGVuZ3RoOyArK2kpXG4gICAge1xuICAgICAgICBjbG9uZS5ncmFwaGljc0RhdGEucHVzaCh0aGlzLmdyYXBoaWNzRGF0YVtpXS5jbG9uZSgpKTtcbiAgICB9XG5cbiAgICBjbG9uZS5jdXJyZW50UGF0aCA9IGNsb25lLmdyYXBoaWNzRGF0YVtjbG9uZS5ncmFwaGljc0RhdGEubGVuZ3RoIC0gMV07XG5cbiAgICBjbG9uZS51cGRhdGVMb2NhbEJvdW5kcygpO1xuXG4gICAgcmV0dXJuIGNsb25lO1xufTtcblxuLyoqXG4gKiBTcGVjaWZpZXMgdGhlIGxpbmUgc3R5bGUgdXNlZCBmb3Igc3Vic2VxdWVudCBjYWxscyB0byBHcmFwaGljcyBtZXRob2RzIHN1Y2ggYXMgdGhlIGxpbmVUbygpIG1ldGhvZCBvciB0aGUgZHJhd0NpcmNsZSgpIG1ldGhvZC5cbiAqXG4gKiBAcGFyYW0gbGluZVdpZHRoIHtudW1iZXJ9IHdpZHRoIG9mIHRoZSBsaW5lIHRvIGRyYXcsIHdpbGwgdXBkYXRlIHRoZSBvYmplY3RzIHN0b3JlZCBzdHlsZVxuICogQHBhcmFtIGNvbG9yIHtudW1iZXJ9IGNvbG9yIG9mIHRoZSBsaW5lIHRvIGRyYXcsIHdpbGwgdXBkYXRlIHRoZSBvYmplY3RzIHN0b3JlZCBzdHlsZVxuICogQHBhcmFtIGFscGhhIHtudW1iZXJ9IGFscGhhIG9mIHRoZSBsaW5lIHRvIGRyYXcsIHdpbGwgdXBkYXRlIHRoZSBvYmplY3RzIHN0b3JlZCBzdHlsZVxuICogQHJldHVybiB7UElYSS5HcmFwaGljc31cbiAqL1xuR3JhcGhpY3MucHJvdG90eXBlLmxpbmVTdHlsZSA9IGZ1bmN0aW9uIChsaW5lV2lkdGgsIGNvbG9yLCBhbHBoYSlcbntcbiAgICB0aGlzLmxpbmVXaWR0aCA9IGxpbmVXaWR0aCB8fCAwO1xuICAgIHRoaXMubGluZUNvbG9yID0gY29sb3IgfHwgMDtcbiAgICB0aGlzLmxpbmVBbHBoYSA9IChhbHBoYSA9PT0gdW5kZWZpbmVkKSA/IDEgOiBhbHBoYTtcblxuICAgIGlmICh0aGlzLmN1cnJlbnRQYXRoKVxuICAgIHtcbiAgICAgICAgaWYgKHRoaXMuY3VycmVudFBhdGguc2hhcGUucG9pbnRzLmxlbmd0aClcbiAgICAgICAge1xuICAgICAgICAgICAgLy8gaGFsZndheSB0aHJvdWdoIGEgbGluZT8gc3RhcnQgYSBuZXcgb25lIVxuICAgICAgICAgICAgdmFyIHNoYXBlID0gbmV3IG1hdGguUG9seWdvbih0aGlzLmN1cnJlbnRQYXRoLnNoYXBlLnBvaW50cy5zbGljZSgtMikpO1xuICAgICAgICAgICAgc2hhcGUuY2xvc2VkID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLmRyYXdTaGFwZShzaGFwZSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgICAvLyBvdGhlcndpc2UgaXRzIGVtcHR5IHNvIGxldHMganVzdCBzZXQgdGhlIGxpbmUgcHJvcGVydGllc1xuICAgICAgICAgICAgdGhpcy5jdXJyZW50UGF0aC5saW5lV2lkdGggPSB0aGlzLmxpbmVXaWR0aDtcbiAgICAgICAgICAgIHRoaXMuY3VycmVudFBhdGgubGluZUNvbG9yID0gdGhpcy5saW5lQ29sb3I7XG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRQYXRoLmxpbmVBbHBoYSA9IHRoaXMubGluZUFscGhhO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIE1vdmVzIHRoZSBjdXJyZW50IGRyYXdpbmcgcG9zaXRpb24gdG8geCwgeS5cbiAqXG4gKiBAcGFyYW0geCB7bnVtYmVyfSB0aGUgWCBjb29yZGluYXRlIHRvIG1vdmUgdG9cbiAqIEBwYXJhbSB5IHtudW1iZXJ9IHRoZSBZIGNvb3JkaW5hdGUgdG8gbW92ZSB0b1xuICogQHJldHVybiB7UElYSS5HcmFwaGljc31cbiAgKi9cbkdyYXBoaWNzLnByb3RvdHlwZS5tb3ZlVG8gPSBmdW5jdGlvbiAoeCwgeSlcbntcbiAgICB2YXIgc2hhcGUgPSBuZXcgbWF0aC5Qb2x5Z29uKFt4LHldKTtcbiAgICBzaGFwZS5jbG9zZWQgPSBmYWxzZTtcbiAgICB0aGlzLmRyYXdTaGFwZShzaGFwZSk7XG5cbiAgICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogRHJhd3MgYSBsaW5lIHVzaW5nIHRoZSBjdXJyZW50IGxpbmUgc3R5bGUgZnJvbSB0aGUgY3VycmVudCBkcmF3aW5nIHBvc2l0aW9uIHRvICh4LCB5KTtcbiAqIFRoZSBjdXJyZW50IGRyYXdpbmcgcG9zaXRpb24gaXMgdGhlbiBzZXQgdG8gKHgsIHkpLlxuICpcbiAqIEBwYXJhbSB4IHtudW1iZXJ9IHRoZSBYIGNvb3JkaW5hdGUgdG8gZHJhdyB0b1xuICogQHBhcmFtIHkge251bWJlcn0gdGhlIFkgY29vcmRpbmF0ZSB0byBkcmF3IHRvXG4gKiBAcmV0dXJuIHtQSVhJLkdyYXBoaWNzfVxuICovXG5HcmFwaGljcy5wcm90b3R5cGUubGluZVRvID0gZnVuY3Rpb24gKHgsIHkpXG57XG4gICAgdGhpcy5jdXJyZW50UGF0aC5zaGFwZS5wb2ludHMucHVzaCh4LCB5KTtcbiAgICB0aGlzLmRpcnR5ID0gdHJ1ZTtcblxuICAgIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBDYWxjdWxhdGUgdGhlIHBvaW50cyBmb3IgYSBxdWFkcmF0aWMgYmV6aWVyIGN1cnZlIGFuZCB0aGVuIGRyYXdzIGl0LlxuICogQmFzZWQgb246IGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vcXVlc3Rpb25zLzc4NTA5Ny9ob3ctZG8taS1pbXBsZW1lbnQtYS1iZXppZXItY3VydmUtaW4tY1xuICpcbiAqIEBwYXJhbSBjcFgge251bWJlcn0gQ29udHJvbCBwb2ludCB4XG4gKiBAcGFyYW0gY3BZIHtudW1iZXJ9IENvbnRyb2wgcG9pbnQgeVxuICogQHBhcmFtIHRvWCB7bnVtYmVyfSBEZXN0aW5hdGlvbiBwb2ludCB4XG4gKiBAcGFyYW0gdG9ZIHtudW1iZXJ9IERlc3RpbmF0aW9uIHBvaW50IHlcbiAqIEByZXR1cm4ge1BJWEkuR3JhcGhpY3N9XG4gKi9cbkdyYXBoaWNzLnByb3RvdHlwZS5xdWFkcmF0aWNDdXJ2ZVRvID0gZnVuY3Rpb24gKGNwWCwgY3BZLCB0b1gsIHRvWSlcbntcbiAgICBpZiAodGhpcy5jdXJyZW50UGF0aClcbiAgICB7XG4gICAgICAgIGlmICh0aGlzLmN1cnJlbnRQYXRoLnNoYXBlLnBvaW50cy5sZW5ndGggPT09IDApXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuY3VycmVudFBhdGguc2hhcGUucG9pbnRzID0gWzAsIDBdO1xuICAgICAgICB9XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHRoaXMubW92ZVRvKDAsMCk7XG4gICAgfVxuXG4gICAgdmFyIHhhLFxuICAgICAgICB5YSxcbiAgICAgICAgbiA9IDIwLFxuICAgICAgICBwb2ludHMgPSB0aGlzLmN1cnJlbnRQYXRoLnNoYXBlLnBvaW50cztcblxuICAgIGlmIChwb2ludHMubGVuZ3RoID09PSAwKVxuICAgIHtcbiAgICAgICAgdGhpcy5tb3ZlVG8oMCwgMCk7XG4gICAgfVxuXG4gICAgdmFyIGZyb21YID0gcG9pbnRzW3BvaW50cy5sZW5ndGgtMl07XG4gICAgdmFyIGZyb21ZID0gcG9pbnRzW3BvaW50cy5sZW5ndGgtMV07XG5cbiAgICB2YXIgaiA9IDA7XG4gICAgZm9yICh2YXIgaSA9IDE7IGkgPD0gbjsgKytpKVxuICAgIHtcbiAgICAgICAgaiA9IGkgLyBuO1xuXG4gICAgICAgIHhhID0gZnJvbVggKyAoIChjcFggLSBmcm9tWCkgKiBqICk7XG4gICAgICAgIHlhID0gZnJvbVkgKyAoIChjcFkgLSBmcm9tWSkgKiBqICk7XG5cbiAgICAgICAgcG9pbnRzLnB1c2goIHhhICsgKCAoKGNwWCArICggKHRvWCAtIGNwWCkgKiBqICkpIC0geGEpICogaiApLFxuICAgICAgICAgICAgICAgICAgICAgeWEgKyAoICgoY3BZICsgKCAodG9ZIC0gY3BZKSAqIGogKSkgLSB5YSkgKiBqICkgKTtcbiAgICB9XG5cbiAgICB0aGlzLmRpcnR5ID0gdGhpcy5ib3VuZHNEaXJ0eSA9IHRydWU7XG5cbiAgICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogQ2FsY3VsYXRlIHRoZSBwb2ludHMgZm9yIGEgYmV6aWVyIGN1cnZlIGFuZCB0aGVuIGRyYXdzIGl0LlxuICpcbiAqIEBwYXJhbSBjcFgge251bWJlcn0gQ29udHJvbCBwb2ludCB4XG4gKiBAcGFyYW0gY3BZIHtudW1iZXJ9IENvbnRyb2wgcG9pbnQgeVxuICogQHBhcmFtIGNwWDIge251bWJlcn0gU2Vjb25kIENvbnRyb2wgcG9pbnQgeFxuICogQHBhcmFtIGNwWTIge251bWJlcn0gU2Vjb25kIENvbnRyb2wgcG9pbnQgeVxuICogQHBhcmFtIHRvWCB7bnVtYmVyfSBEZXN0aW5hdGlvbiBwb2ludCB4XG4gKiBAcGFyYW0gdG9ZIHtudW1iZXJ9IERlc3RpbmF0aW9uIHBvaW50IHlcbiAqIEByZXR1cm4ge1BJWEkuR3JhcGhpY3N9XG4gKi9cbkdyYXBoaWNzLnByb3RvdHlwZS5iZXppZXJDdXJ2ZVRvID0gZnVuY3Rpb24gKGNwWCwgY3BZLCBjcFgyLCBjcFkyLCB0b1gsIHRvWSlcbntcbiAgICBpZiAodGhpcy5jdXJyZW50UGF0aClcbiAgICB7XG4gICAgICAgIGlmICh0aGlzLmN1cnJlbnRQYXRoLnNoYXBlLnBvaW50cy5sZW5ndGggPT09IDApXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuY3VycmVudFBhdGguc2hhcGUucG9pbnRzID0gWzAsIDBdO1xuICAgICAgICB9XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHRoaXMubW92ZVRvKDAsMCk7XG4gICAgfVxuXG4gICAgdmFyIG4gPSAyMCxcbiAgICAgICAgZHQsXG4gICAgICAgIGR0MixcbiAgICAgICAgZHQzLFxuICAgICAgICB0MixcbiAgICAgICAgdDMsXG4gICAgICAgIHBvaW50cyA9IHRoaXMuY3VycmVudFBhdGguc2hhcGUucG9pbnRzO1xuXG4gICAgdmFyIGZyb21YID0gcG9pbnRzW3BvaW50cy5sZW5ndGgtMl07XG4gICAgdmFyIGZyb21ZID0gcG9pbnRzW3BvaW50cy5sZW5ndGgtMV07XG5cbiAgICB2YXIgaiA9IDA7XG5cbiAgICBmb3IgKHZhciBpID0gMTsgaSA8PSBuOyArK2kpXG4gICAge1xuICAgICAgICBqID0gaSAvIG47XG5cbiAgICAgICAgZHQgPSAoMSAtIGopO1xuICAgICAgICBkdDIgPSBkdCAqIGR0O1xuICAgICAgICBkdDMgPSBkdDIgKiBkdDtcblxuICAgICAgICB0MiA9IGogKiBqO1xuICAgICAgICB0MyA9IHQyICogajtcblxuICAgICAgICBwb2ludHMucHVzaCggZHQzICogZnJvbVggKyAzICogZHQyICogaiAqIGNwWCArIDMgKiBkdCAqIHQyICogY3BYMiArIHQzICogdG9YLFxuICAgICAgICAgICAgICAgICAgICAgZHQzICogZnJvbVkgKyAzICogZHQyICogaiAqIGNwWSArIDMgKiBkdCAqIHQyICogY3BZMiArIHQzICogdG9ZKTtcbiAgICB9XG5cbiAgICB0aGlzLmRpcnR5ID0gdGhpcy5ib3VuZHNEaXJ0eSA9IHRydWU7XG5cbiAgICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogVGhlIGFyY1RvKCkgbWV0aG9kIGNyZWF0ZXMgYW4gYXJjL2N1cnZlIGJldHdlZW4gdHdvIHRhbmdlbnRzIG9uIHRoZSBjYW52YXMuXG4gKlxuICogXCJib3Jyb3dlZFwiIGZyb20gaHR0cHM6Ly9jb2RlLmdvb2dsZS5jb20vcC9meGNhbnZhcy8gLSB0aGFua3MgZ29vZ2xlIVxuICpcbiAqIEBwYXJhbSB4MSB7bnVtYmVyfSBUaGUgeC1jb29yZGluYXRlIG9mIHRoZSBiZWdpbm5pbmcgb2YgdGhlIGFyY1xuICogQHBhcmFtIHkxIHtudW1iZXJ9IFRoZSB5LWNvb3JkaW5hdGUgb2YgdGhlIGJlZ2lubmluZyBvZiB0aGUgYXJjXG4gKiBAcGFyYW0geDIge251bWJlcn0gVGhlIHgtY29vcmRpbmF0ZSBvZiB0aGUgZW5kIG9mIHRoZSBhcmNcbiAqIEBwYXJhbSB5MiB7bnVtYmVyfSBUaGUgeS1jb29yZGluYXRlIG9mIHRoZSBlbmQgb2YgdGhlIGFyY1xuICogQHBhcmFtIHJhZGl1cyB7bnVtYmVyfSBUaGUgcmFkaXVzIG9mIHRoZSBhcmNcbiAqIEByZXR1cm4ge1BJWEkuR3JhcGhpY3N9XG4gKi9cbkdyYXBoaWNzLnByb3RvdHlwZS5hcmNUbyA9IGZ1bmN0aW9uICh4MSwgeTEsIHgyLCB5MiwgcmFkaXVzKVxue1xuICAgIGlmICh0aGlzLmN1cnJlbnRQYXRoKVxuICAgIHtcbiAgICAgICAgaWYgKHRoaXMuY3VycmVudFBhdGguc2hhcGUucG9pbnRzLmxlbmd0aCA9PT0gMClcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5jdXJyZW50UGF0aC5zaGFwZS5wb2ludHMucHVzaCh4MSwgeTEpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHRoaXMubW92ZVRvKHgxLCB5MSk7XG4gICAgfVxuXG4gICAgdmFyIHBvaW50cyA9IHRoaXMuY3VycmVudFBhdGguc2hhcGUucG9pbnRzLFxuICAgICAgICBmcm9tWCA9IHBvaW50c1twb2ludHMubGVuZ3RoLTJdLFxuICAgICAgICBmcm9tWSA9IHBvaW50c1twb2ludHMubGVuZ3RoLTFdLFxuICAgICAgICBhMSA9IGZyb21ZIC0geTEsXG4gICAgICAgIGIxID0gZnJvbVggLSB4MSxcbiAgICAgICAgYTIgPSB5MiAgIC0geTEsXG4gICAgICAgIGIyID0geDIgICAtIHgxLFxuICAgICAgICBtbSA9IE1hdGguYWJzKGExICogYjIgLSBiMSAqIGEyKTtcblxuICAgIGlmIChtbSA8IDEuMGUtOCB8fCByYWRpdXMgPT09IDApXG4gICAge1xuICAgICAgICBpZiAocG9pbnRzW3BvaW50cy5sZW5ndGgtMl0gIT09IHgxIHx8IHBvaW50c1twb2ludHMubGVuZ3RoLTFdICE9PSB5MSlcbiAgICAgICAge1xuICAgICAgICAgICAgcG9pbnRzLnB1c2goeDEsIHkxKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICB2YXIgZGQgPSBhMSAqIGExICsgYjEgKiBiMSxcbiAgICAgICAgICAgIGNjID0gYTIgKiBhMiArIGIyICogYjIsXG4gICAgICAgICAgICB0dCA9IGExICogYTIgKyBiMSAqIGIyLFxuICAgICAgICAgICAgazEgPSByYWRpdXMgKiBNYXRoLnNxcnQoZGQpIC8gbW0sXG4gICAgICAgICAgICBrMiA9IHJhZGl1cyAqIE1hdGguc3FydChjYykgLyBtbSxcbiAgICAgICAgICAgIGoxID0gazEgKiB0dCAvIGRkLFxuICAgICAgICAgICAgajIgPSBrMiAqIHR0IC8gY2MsXG4gICAgICAgICAgICBjeCA9IGsxICogYjIgKyBrMiAqIGIxLFxuICAgICAgICAgICAgY3kgPSBrMSAqIGEyICsgazIgKiBhMSxcbiAgICAgICAgICAgIHB4ID0gYjEgKiAoazIgKyBqMSksXG4gICAgICAgICAgICBweSA9IGExICogKGsyICsgajEpLFxuICAgICAgICAgICAgcXggPSBiMiAqIChrMSArIGoyKSxcbiAgICAgICAgICAgIHF5ID0gYTIgKiAoazEgKyBqMiksXG4gICAgICAgICAgICBzdGFydEFuZ2xlID0gTWF0aC5hdGFuMihweSAtIGN5LCBweCAtIGN4KSxcbiAgICAgICAgICAgIGVuZEFuZ2xlICAgPSBNYXRoLmF0YW4yKHF5IC0gY3ksIHF4IC0gY3gpO1xuXG4gICAgICAgIHRoaXMuYXJjKGN4ICsgeDEsIGN5ICsgeTEsIHJhZGl1cywgc3RhcnRBbmdsZSwgZW5kQW5nbGUsIGIxICogYTIgPiBiMiAqIGExKTtcbiAgICB9XG5cbiAgICB0aGlzLmRpcnR5ID0gdGhpcy5ib3VuZHNEaXJ0eSA9IHRydWU7XG5cbiAgICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogVGhlIGFyYyBtZXRob2QgY3JlYXRlcyBhbiBhcmMvY3VydmUgKHVzZWQgdG8gY3JlYXRlIGNpcmNsZXMsIG9yIHBhcnRzIG9mIGNpcmNsZXMpLlxuICpcbiAqIEBwYXJhbSBjeCB7bnVtYmVyfSBUaGUgeC1jb29yZGluYXRlIG9mIHRoZSBjZW50ZXIgb2YgdGhlIGNpcmNsZVxuICogQHBhcmFtIGN5IHtudW1iZXJ9IFRoZSB5LWNvb3JkaW5hdGUgb2YgdGhlIGNlbnRlciBvZiB0aGUgY2lyY2xlXG4gKiBAcGFyYW0gcmFkaXVzIHtudW1iZXJ9IFRoZSByYWRpdXMgb2YgdGhlIGNpcmNsZVxuICogQHBhcmFtIHN0YXJ0QW5nbGUge251bWJlcn0gVGhlIHN0YXJ0aW5nIGFuZ2xlLCBpbiByYWRpYW5zICgwIGlzIGF0IHRoZSAzIG8nY2xvY2sgcG9zaXRpb24gb2YgdGhlIGFyYydzIGNpcmNsZSlcbiAqIEBwYXJhbSBlbmRBbmdsZSB7bnVtYmVyfSBUaGUgZW5kaW5nIGFuZ2xlLCBpbiByYWRpYW5zXG4gKiBAcGFyYW0gYW50aWNsb2Nrd2lzZSB7Ym9vbGVhbn0gT3B0aW9uYWwuIFNwZWNpZmllcyB3aGV0aGVyIHRoZSBkcmF3aW5nIHNob3VsZCBiZSBjb3VudGVyY2xvY2t3aXNlIG9yIGNsb2Nrd2lzZS4gRmFsc2UgaXMgZGVmYXVsdCwgYW5kIGluZGljYXRlcyBjbG9ja3dpc2UsIHdoaWxlIHRydWUgaW5kaWNhdGVzIGNvdW50ZXItY2xvY2t3aXNlLlxuICogQHJldHVybiB7UElYSS5HcmFwaGljc31cbiAqL1xuR3JhcGhpY3MucHJvdG90eXBlLmFyYyA9IGZ1bmN0aW9uKGN4LCBjeSwgcmFkaXVzLCBzdGFydEFuZ2xlLCBlbmRBbmdsZSwgYW50aWNsb2Nrd2lzZSlcbntcbiAgICBhbnRpY2xvY2t3aXNlID0gYW50aWNsb2Nrd2lzZSB8fCBmYWxzZTtcblxuICAgIGlmIChzdGFydEFuZ2xlID09PSBlbmRBbmdsZSlcbiAgICB7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIGlmKCAhYW50aWNsb2Nrd2lzZSAmJiBlbmRBbmdsZSA8PSBzdGFydEFuZ2xlIClcbiAgICB7XG4gICAgICAgIGVuZEFuZ2xlICs9IE1hdGguUEkgKiAyO1xuICAgIH1cbiAgICBlbHNlIGlmKCBhbnRpY2xvY2t3aXNlICYmIHN0YXJ0QW5nbGUgPD0gZW5kQW5nbGUgKVxuICAgIHtcbiAgICAgICAgc3RhcnRBbmdsZSArPSBNYXRoLlBJICogMjtcbiAgICB9XG5cbiAgICB2YXIgc3dlZXAgPSBhbnRpY2xvY2t3aXNlID8gKHN0YXJ0QW5nbGUgLSBlbmRBbmdsZSkgKiAtMSA6IChlbmRBbmdsZSAtIHN0YXJ0QW5nbGUpO1xuICAgIHZhciBzZWdzID0gIE1hdGguY2VpbChNYXRoLmFicyhzd2VlcCkgLyAoTWF0aC5QSSAqIDIpKSAqIDQwO1xuXG4gICAgaWYoc3dlZXAgPT09IDApXG4gICAge1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICB2YXIgc3RhcnRYID0gY3ggKyBNYXRoLmNvcyhzdGFydEFuZ2xlKSAqIHJhZGl1cztcbiAgICB2YXIgc3RhcnRZID0gY3kgKyBNYXRoLnNpbihzdGFydEFuZ2xlKSAqIHJhZGl1cztcblxuICAgIGlmICh0aGlzLmN1cnJlbnRQYXRoKVxuICAgIHtcbiAgICAgICAgdGhpcy5jdXJyZW50UGF0aC5zaGFwZS5wb2ludHMucHVzaChzdGFydFgsIHN0YXJ0WSk7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHRoaXMubW92ZVRvKHN0YXJ0WCwgc3RhcnRZKTtcbiAgICB9XG5cbiAgICB2YXIgcG9pbnRzID0gdGhpcy5jdXJyZW50UGF0aC5zaGFwZS5wb2ludHM7XG5cbiAgICB2YXIgdGhldGEgPSBzd2VlcC8oc2VncyoyKTtcbiAgICB2YXIgdGhldGEyID0gdGhldGEqMjtcblxuICAgIHZhciBjVGhldGEgPSBNYXRoLmNvcyh0aGV0YSk7XG4gICAgdmFyIHNUaGV0YSA9IE1hdGguc2luKHRoZXRhKTtcblxuICAgIHZhciBzZWdNaW51cyA9IHNlZ3MgLSAxO1xuXG4gICAgdmFyIHJlbWFpbmRlciA9ICggc2VnTWludXMgJSAxICkgLyBzZWdNaW51cztcblxuICAgIGZvcih2YXIgaT0wOyBpPD1zZWdNaW51czsgaSsrKVxuICAgIHtcbiAgICAgICAgdmFyIHJlYWwgPSAgaSArIHJlbWFpbmRlciAqIGk7XG5cblxuICAgICAgICB2YXIgYW5nbGUgPSAoKHRoZXRhKSArIHN0YXJ0QW5nbGUgKyAodGhldGEyICogcmVhbCkpO1xuXG4gICAgICAgIHZhciBjID0gTWF0aC5jb3MoYW5nbGUpO1xuICAgICAgICB2YXIgcyA9IC1NYXRoLnNpbihhbmdsZSk7XG5cbiAgICAgICAgcG9pbnRzLnB1c2goKCAoY1RoZXRhICogIGMpICsgKHNUaGV0YSAqIHMpICkgKiByYWRpdXMgKyBjeCxcbiAgICAgICAgICAgICAgICAgICAgKCAoY1RoZXRhICogLXMpICsgKHNUaGV0YSAqIGMpICkgKiByYWRpdXMgKyBjeSk7XG4gICAgfVxuXG4gICAgdGhpcy5kaXJ0eSA9IHRoaXMuYm91bmRzRGlydHkgPSB0cnVlO1xuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIFNwZWNpZmllcyBhIHNpbXBsZSBvbmUtY29sb3IgZmlsbCB0aGF0IHN1YnNlcXVlbnQgY2FsbHMgdG8gb3RoZXIgR3JhcGhpY3MgbWV0aG9kc1xuICogKHN1Y2ggYXMgbGluZVRvKCkgb3IgZHJhd0NpcmNsZSgpKSB1c2Ugd2hlbiBkcmF3aW5nLlxuICpcbiAqIEBwYXJhbSBjb2xvciB7bnVtYmVyfSB0aGUgY29sb3Igb2YgdGhlIGZpbGxcbiAqIEBwYXJhbSBhbHBoYSB7bnVtYmVyfSB0aGUgYWxwaGEgb2YgdGhlIGZpbGxcbiAqIEByZXR1cm4ge1BJWEkuR3JhcGhpY3N9XG4gKi9cbkdyYXBoaWNzLnByb3RvdHlwZS5iZWdpbkZpbGwgPSBmdW5jdGlvbiAoY29sb3IsIGFscGhhKVxue1xuICAgIHRoaXMuZmlsbGluZyA9IHRydWU7XG4gICAgdGhpcy5maWxsQ29sb3IgPSBjb2xvciB8fCAwO1xuICAgIHRoaXMuZmlsbEFscGhhID0gKGFscGhhID09PSB1bmRlZmluZWQpID8gMSA6IGFscGhhO1xuXG4gICAgaWYgKHRoaXMuY3VycmVudFBhdGgpXG4gICAge1xuICAgICAgICBpZiAodGhpcy5jdXJyZW50UGF0aC5zaGFwZS5wb2ludHMubGVuZ3RoIDw9IDIpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuY3VycmVudFBhdGguZmlsbCA9IHRoaXMuZmlsbGluZztcbiAgICAgICAgICAgIHRoaXMuY3VycmVudFBhdGguZmlsbENvbG9yID0gdGhpcy5maWxsQ29sb3I7XG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRQYXRoLmZpbGxBbHBoYSA9IHRoaXMuZmlsbEFscGhhO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBBcHBsaWVzIGEgZmlsbCB0byB0aGUgbGluZXMgYW5kIHNoYXBlcyB0aGF0IHdlcmUgYWRkZWQgc2luY2UgdGhlIGxhc3QgY2FsbCB0byB0aGUgYmVnaW5GaWxsKCkgbWV0aG9kLlxuICpcbiAqIEByZXR1cm4ge0dyYXBoaWNzfVxuICovXG5HcmFwaGljcy5wcm90b3R5cGUuZW5kRmlsbCA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy5maWxsaW5nID0gZmFsc2U7XG4gICAgdGhpcy5maWxsQ29sb3IgPSBudWxsO1xuICAgIHRoaXMuZmlsbEFscGhhID0gMTtcblxuICAgIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKlxuICogQHBhcmFtIHgge251bWJlcn0gVGhlIFggY29vcmQgb2YgdGhlIHRvcC1sZWZ0IG9mIHRoZSByZWN0YW5nbGVcbiAqIEBwYXJhbSB5IHtudW1iZXJ9IFRoZSBZIGNvb3JkIG9mIHRoZSB0b3AtbGVmdCBvZiB0aGUgcmVjdGFuZ2xlXG4gKiBAcGFyYW0gd2lkdGgge251bWJlcn0gVGhlIHdpZHRoIG9mIHRoZSByZWN0YW5nbGVcbiAqIEBwYXJhbSBoZWlnaHQge251bWJlcn0gVGhlIGhlaWdodCBvZiB0aGUgcmVjdGFuZ2xlXG4gKiBAcmV0dXJuIHtQSVhJLkdyYXBoaWNzfVxuICovXG5HcmFwaGljcy5wcm90b3R5cGUuZHJhd1JlY3QgPSBmdW5jdGlvbiAoIHgsIHksIHdpZHRoLCBoZWlnaHQgKVxue1xuICAgIHRoaXMuZHJhd1NoYXBlKG5ldyBtYXRoLlJlY3RhbmdsZSh4LHksIHdpZHRoLCBoZWlnaHQpKTtcblxuICAgIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKlxuICogQHBhcmFtIHgge251bWJlcn0gVGhlIFggY29vcmQgb2YgdGhlIHRvcC1sZWZ0IG9mIHRoZSByZWN0YW5nbGVcbiAqIEBwYXJhbSB5IHtudW1iZXJ9IFRoZSBZIGNvb3JkIG9mIHRoZSB0b3AtbGVmdCBvZiB0aGUgcmVjdGFuZ2xlXG4gKiBAcGFyYW0gd2lkdGgge251bWJlcn0gVGhlIHdpZHRoIG9mIHRoZSByZWN0YW5nbGVcbiAqIEBwYXJhbSBoZWlnaHQge251bWJlcn0gVGhlIGhlaWdodCBvZiB0aGUgcmVjdGFuZ2xlXG4gKiBAcGFyYW0gcmFkaXVzIHtudW1iZXJ9IFJhZGl1cyBvZiB0aGUgcmVjdGFuZ2xlIGNvcm5lcnNcbiAqIEByZXR1cm4ge1BJWEkuR3JhcGhpY3N9XG4gKi9cbkdyYXBoaWNzLnByb3RvdHlwZS5kcmF3Um91bmRlZFJlY3QgPSBmdW5jdGlvbiAoIHgsIHksIHdpZHRoLCBoZWlnaHQsIHJhZGl1cyApXG57XG4gICAgdGhpcy5kcmF3U2hhcGUobmV3IG1hdGguUm91bmRlZFJlY3RhbmdsZSh4LCB5LCB3aWR0aCwgaGVpZ2h0LCByYWRpdXMpKTtcblxuICAgIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBEcmF3cyBhIGNpcmNsZS5cbiAqXG4gKiBAcGFyYW0geCB7bnVtYmVyfSBUaGUgWCBjb29yZGluYXRlIG9mIHRoZSBjZW50ZXIgb2YgdGhlIGNpcmNsZVxuICogQHBhcmFtIHkge251bWJlcn0gVGhlIFkgY29vcmRpbmF0ZSBvZiB0aGUgY2VudGVyIG9mIHRoZSBjaXJjbGVcbiAqIEBwYXJhbSByYWRpdXMge251bWJlcn0gVGhlIHJhZGl1cyBvZiB0aGUgY2lyY2xlXG4gKiBAcmV0dXJuIHtQSVhJLkdyYXBoaWNzfVxuICovXG5HcmFwaGljcy5wcm90b3R5cGUuZHJhd0NpcmNsZSA9IGZ1bmN0aW9uICh4LCB5LCByYWRpdXMpXG57XG4gICAgdGhpcy5kcmF3U2hhcGUobmV3IG1hdGguQ2lyY2xlKHgseSwgcmFkaXVzKSk7XG5cbiAgICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogRHJhd3MgYW4gZWxsaXBzZS5cbiAqXG4gKiBAcGFyYW0geCB7bnVtYmVyfSBUaGUgWCBjb29yZGluYXRlIG9mIHRoZSBjZW50ZXIgb2YgdGhlIGVsbGlwc2VcbiAqIEBwYXJhbSB5IHtudW1iZXJ9IFRoZSBZIGNvb3JkaW5hdGUgb2YgdGhlIGNlbnRlciBvZiB0aGUgZWxsaXBzZVxuICogQHBhcmFtIHdpZHRoIHtudW1iZXJ9IFRoZSBoYWxmIHdpZHRoIG9mIHRoZSBlbGxpcHNlXG4gKiBAcGFyYW0gaGVpZ2h0IHtudW1iZXJ9IFRoZSBoYWxmIGhlaWdodCBvZiB0aGUgZWxsaXBzZVxuICogQHJldHVybiB7UElYSS5HcmFwaGljc31cbiAqL1xuR3JhcGhpY3MucHJvdG90eXBlLmRyYXdFbGxpcHNlID0gZnVuY3Rpb24gKHgsIHksIHdpZHRoLCBoZWlnaHQpXG57XG4gICAgdGhpcy5kcmF3U2hhcGUobmV3IG1hdGguRWxsaXBzZSh4LCB5LCB3aWR0aCwgaGVpZ2h0KSk7XG5cbiAgICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogRHJhd3MgYSBwb2x5Z29uIHVzaW5nIHRoZSBnaXZlbiBwYXRoLlxuICpcbiAqIEBwYXJhbSBwYXRoIHtudW1iZXJbXXxQSVhJLlBvaW50W119IFRoZSBwYXRoIGRhdGEgdXNlZCB0byBjb25zdHJ1Y3QgdGhlIHBvbHlnb24uXG4gKiBAcmV0dXJuIHtQSVhJLkdyYXBoaWNzfVxuICovXG5HcmFwaGljcy5wcm90b3R5cGUuZHJhd1BvbHlnb24gPSBmdW5jdGlvbiAocGF0aClcbntcbiAgICAvLyBwcmV2ZW50cyBhbiBhcmd1bWVudCBhc3NpZ25tZW50IGRlb3B0XG4gICAgLy8gc2VlIHNlY3Rpb24gMy4xOiBodHRwczovL2dpdGh1Yi5jb20vcGV0a2FhbnRvbm92L2JsdWViaXJkL3dpa2kvT3B0aW1pemF0aW9uLWtpbGxlcnMjMy1tYW5hZ2luZy1hcmd1bWVudHNcbiAgICB2YXIgcG9pbnRzID0gcGF0aDtcblxuICAgIHZhciBjbG9zZWQgPSB0cnVlO1xuXG4gICAgaWYgKHBvaW50cyBpbnN0YW5jZW9mIG1hdGguUG9seWdvbilcbiAgICB7XG4gICAgICAgIGNsb3NlZCA9IHBvaW50cy5jbG9zZWQ7XG4gICAgICAgIHBvaW50cyA9IHBvaW50cy5wb2ludHM7XG4gICAgfVxuXG4gICAgaWYgKCFBcnJheS5pc0FycmF5KHBvaW50cykpXG4gICAge1xuICAgICAgICAvLyBwcmV2ZW50cyBhbiBhcmd1bWVudCBsZWFrIGRlb3B0XG4gICAgICAgIC8vIHNlZSBzZWN0aW9uIDMuMjogaHR0cHM6Ly9naXRodWIuY29tL3BldGthYW50b25vdi9ibHVlYmlyZC93aWtpL09wdGltaXphdGlvbi1raWxsZXJzIzMtbWFuYWdpbmctYXJndW1lbnRzXG4gICAgICAgIHBvaW50cyA9IG5ldyBBcnJheShhcmd1bWVudHMubGVuZ3RoKTtcblxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHBvaW50cy5sZW5ndGg7ICsraSlcbiAgICAgICAge1xuICAgICAgICAgICAgcG9pbnRzW2ldID0gYXJndW1lbnRzW2ldO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgdmFyIHNoYXBlID0gbmV3IG1hdGguUG9seWdvbihwb2ludHMpO1xuICAgIHNoYXBlLmNsb3NlZCA9IGNsb3NlZDtcblxuICAgIHRoaXMuZHJhd1NoYXBlKHNoYXBlKTtcblxuICAgIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBDbGVhcnMgdGhlIGdyYXBoaWNzIHRoYXQgd2VyZSBkcmF3biB0byB0aGlzIEdyYXBoaWNzIG9iamVjdCwgYW5kIHJlc2V0cyBmaWxsIGFuZCBsaW5lIHN0eWxlIHNldHRpbmdzLlxuICpcbiAqIEByZXR1cm4ge1BJWEkuR3JhcGhpY3N9XG4gKi9cbkdyYXBoaWNzLnByb3RvdHlwZS5jbGVhciA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy5saW5lV2lkdGggPSAwO1xuICAgIHRoaXMuZmlsbGluZyA9IGZhbHNlO1xuXG4gICAgdGhpcy5kaXJ0eSA9IHRydWU7XG4gICAgdGhpcy5jbGVhckRpcnR5ID0gdHJ1ZTtcbiAgICB0aGlzLmdyYXBoaWNzRGF0YSA9IFtdO1xuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIFVzZWZ1bCBmdW5jdGlvbiB0aGF0IHJldHVybnMgYSB0ZXh0dXJlIG9mIHRoZSBncmFwaGljcyBvYmplY3QgdGhhdCBjYW4gdGhlbiBiZSB1c2VkIHRvIGNyZWF0ZSBzcHJpdGVzXG4gKiBUaGlzIGNhbiBiZSBxdWl0ZSB1c2VmdWwgaWYgeW91ciBnZW9tZXRyeSBpcyBjb21wbGljYXRlZCBhbmQgbmVlZHMgdG8gYmUgcmV1c2VkIG11bHRpcGxlIHRpbWVzLlxuICpcbiAqIEBwYXJhbSByZXNvbHV0aW9uIHtudW1iZXJ9IFRoZSByZXNvbHV0aW9uIG9mIHRoZSB0ZXh0dXJlIGJlaW5nIGdlbmVyYXRlZFxuICogQHBhcmFtIHNjYWxlTW9kZSB7bnVtYmVyfSBTaG91bGQgYmUgb25lIG9mIHRoZSBzY2FsZU1vZGUgY29uc3RzXG4gKiBAcmV0dXJuIHtQSVhJLlRleHR1cmV9IGEgdGV4dHVyZSBvZiB0aGUgZ3JhcGhpY3Mgb2JqZWN0XG4gKi9cbkdyYXBoaWNzLnByb3RvdHlwZS5nZW5lcmF0ZVRleHR1cmUgPSBmdW5jdGlvbiAocmVuZGVyZXIsIHJlc29sdXRpb24sIHNjYWxlTW9kZSlcbntcblxuICAgIHJlc29sdXRpb24gPSByZXNvbHV0aW9uIHx8IDE7XG5cbiAgICB2YXIgYm91bmRzID0gdGhpcy5nZXRMb2NhbEJvdW5kcygpO1xuXG4gICAgdmFyIGNhbnZhc0J1ZmZlciA9IG5ldyBDYW52YXNCdWZmZXIoYm91bmRzLndpZHRoICogcmVzb2x1dGlvbiwgYm91bmRzLmhlaWdodCAqIHJlc29sdXRpb24pO1xuXG4gICAgdmFyIHRleHR1cmUgPSBUZXh0dXJlLmZyb21DYW52YXMoY2FudmFzQnVmZmVyLmNhbnZhcywgc2NhbGVNb2RlKTtcbiAgICB0ZXh0dXJlLmJhc2VUZXh0dXJlLnJlc29sdXRpb24gPSByZXNvbHV0aW9uO1xuXG4gICAgY2FudmFzQnVmZmVyLmNvbnRleHQuc2NhbGUocmVzb2x1dGlvbiwgcmVzb2x1dGlvbik7XG5cbiAgICBjYW52YXNCdWZmZXIuY29udGV4dC50cmFuc2xhdGUoLWJvdW5kcy54LC1ib3VuZHMueSk7XG5cbiAgICBDYW52YXNHcmFwaGljcy5yZW5kZXJHcmFwaGljcyh0aGlzLCBjYW52YXNCdWZmZXIuY29udGV4dCk7XG5cbiAgICByZXR1cm4gdGV4dHVyZTtcbn07XG5cbi8qKlxuICogUmVuZGVycyB0aGUgb2JqZWN0IHVzaW5nIHRoZSBXZWJHTCByZW5kZXJlclxuICpcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5XZWJHTFJlbmRlcmVyfVxuICogQHByaXZhdGVcbiAqL1xuR3JhcGhpY3MucHJvdG90eXBlLl9yZW5kZXJXZWJHTCA9IGZ1bmN0aW9uIChyZW5kZXJlcilcbntcbiAgICAvLyBpZiB0aGUgc3ByaXRlIGlzIG5vdCB2aXNpYmxlIG9yIHRoZSBhbHBoYSBpcyAwIHRoZW4gbm8gbmVlZCB0byByZW5kZXIgdGhpcyBlbGVtZW50XG5cbiAgICBpZiAodGhpcy5nbERpcnR5KVxuICAgIHtcbiAgICAgICAgdGhpcy5kaXJ0eSA9IHRydWU7XG4gICAgICAgIHRoaXMuZ2xEaXJ0eSA9IGZhbHNlO1xuICAgIH1cblxuICAgIHJlbmRlcmVyLnNldE9iamVjdFJlbmRlcmVyKHJlbmRlcmVyLnBsdWdpbnMuZ3JhcGhpY3MpO1xuICAgIHJlbmRlcmVyLnBsdWdpbnMuZ3JhcGhpY3MucmVuZGVyKHRoaXMpO1xuXG59O1xuXG4vKipcbiAqIFJlbmRlcnMgdGhlIG9iamVjdCB1c2luZyB0aGUgQ2FudmFzIHJlbmRlcmVyXG4gKlxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLkNhbnZhc1JlbmRlcmVyfVxuICogQHByaXZhdGVcbiAqL1xuR3JhcGhpY3MucHJvdG90eXBlLl9yZW5kZXJDYW52YXMgPSBmdW5jdGlvbiAocmVuZGVyZXIpXG57XG4gICAgaWYgKHRoaXMuaXNNYXNrID09PSB0cnVlKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIGlmIHRoZSB0aW50IGhhcyBjaGFuZ2VkLCBzZXQgdGhlIGdyYXBoaWNzIG9iamVjdCB0byBkaXJ0eS5cbiAgICBpZiAodGhpcy5fcHJldlRpbnQgIT09IHRoaXMudGludCkge1xuICAgICAgICB0aGlzLmRpcnR5ID0gdHJ1ZTtcbiAgICB9XG5cbiAgICAvLyB0aGlzIGNvZGUgbWF5IHN0aWxsIGJlIG5lZWRlZCBzbyBsZWF2aW5nIGZvciBub3cuLlxuICAgIC8vXG4gICAgLypcbiAgICBpZiAodGhpcy5fY2FjaGVBc0JpdG1hcClcbiAgICB7XG4gICAgICAgIGlmICh0aGlzLmRpcnR5IHx8IHRoaXMuY2FjaGVkU3ByaXRlRGlydHkpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuX2dlbmVyYXRlQ2FjaGVkU3ByaXRlKCk7XG5cbiAgICAgICAgICAgIC8vIHdlIHdpbGwgYWxzbyBuZWVkIHRvIHVwZGF0ZSB0aGUgdGV4dHVyZVxuICAgICAgICAgICAgdGhpcy51cGRhdGVDYWNoZWRTcHJpdGVUZXh0dXJlKCk7XG5cbiAgICAgICAgICAgIHRoaXMuY2FjaGVkU3ByaXRlRGlydHkgPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMuZGlydHkgPSBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX2NhY2hlZFNwcml0ZS5hbHBoYSA9IHRoaXMuYWxwaGE7XG5cbiAgICAgICAgU3ByaXRlLnByb3RvdHlwZS5fcmVuZGVyQ2FudmFzLmNhbGwodGhpcy5fY2FjaGVkU3ByaXRlLCByZW5kZXJlcik7XG5cbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICAqL1xuICAgIHZhciBjb250ZXh0ID0gcmVuZGVyZXIuY29udGV4dDtcbiAgICB2YXIgdHJhbnNmb3JtID0gdGhpcy53b3JsZFRyYW5zZm9ybTtcblxuICAgIHZhciBjb21wb3NpdGVPcGVyYXRpb24gPSByZW5kZXJlci5ibGVuZE1vZGVzW3RoaXMuYmxlbmRNb2RlXTtcbiAgICBpZiAoY29tcG9zaXRlT3BlcmF0aW9uICE9PSBjb250ZXh0Lmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbilcbiAgICB7XG4gICAgICAgIGNvbnRleHQuZ2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uID0gY29tcG9zaXRlT3BlcmF0aW9uO1xuICAgIH1cblxuICAgIHZhciByZXNvbHV0aW9uID0gcmVuZGVyZXIucmVzb2x1dGlvbjtcbiAgICBjb250ZXh0LnNldFRyYW5zZm9ybShcbiAgICAgICAgdHJhbnNmb3JtLmEgKiByZXNvbHV0aW9uLFxuICAgICAgICB0cmFuc2Zvcm0uYiAqIHJlc29sdXRpb24sXG4gICAgICAgIHRyYW5zZm9ybS5jICogcmVzb2x1dGlvbixcbiAgICAgICAgdHJhbnNmb3JtLmQgKiByZXNvbHV0aW9uLFxuICAgICAgICB0cmFuc2Zvcm0udHggKiByZXNvbHV0aW9uLFxuICAgICAgICB0cmFuc2Zvcm0udHkgKiByZXNvbHV0aW9uXG4gICAgKTtcblxuICAgIENhbnZhc0dyYXBoaWNzLnJlbmRlckdyYXBoaWNzKHRoaXMsIGNvbnRleHQpO1xufTtcblxuLyoqXG4gKiBSZXRyaWV2ZXMgdGhlIGJvdW5kcyBvZiB0aGUgZ3JhcGhpYyBzaGFwZSBhcyBhIHJlY3RhbmdsZSBvYmplY3RcbiAqXG4gKiBAcGFyYW0gW21hdHJpeF0ge1BJWEkuTWF0cml4fSBUaGUgd29ybGQgdHJhbnNmb3JtIG1hdHJpeCB0byB1c2UsIGRlZmF1bHRzIHRvIHRoaXNcbiAqICBvYmplY3QncyB3b3JsZFRyYW5zZm9ybS5cbiAqIEByZXR1cm4ge1BJWEkuUmVjdGFuZ2xlfSB0aGUgcmVjdGFuZ3VsYXIgYm91bmRpbmcgYXJlYVxuICovXG5HcmFwaGljcy5wcm90b3R5cGUuZ2V0Qm91bmRzID0gZnVuY3Rpb24gKG1hdHJpeClcbntcbiAgICBpZighdGhpcy5fY3VycmVudEJvdW5kcylcbiAgICB7XG5cbiAgICAgICAgLy8gcmV0dXJuIGFuIGVtcHR5IG9iamVjdCBpZiB0aGUgaXRlbSBpcyBhIG1hc2shXG4gICAgICAgIGlmICghdGhpcy5yZW5kZXJhYmxlKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gbWF0aC5SZWN0YW5nbGUuRU1QVFk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5ib3VuZHNEaXJ0eSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51cGRhdGVMb2NhbEJvdW5kcygpO1xuXG4gICAgICAgICAgICB0aGlzLmdsRGlydHkgPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy5jYWNoZWRTcHJpdGVEaXJ0eSA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLmJvdW5kc0RpcnR5ID0gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgYm91bmRzID0gdGhpcy5fbG9jYWxCb3VuZHM7XG5cbiAgICAgICAgdmFyIHcwID0gYm91bmRzLng7XG4gICAgICAgIHZhciB3MSA9IGJvdW5kcy53aWR0aCArIGJvdW5kcy54O1xuXG4gICAgICAgIHZhciBoMCA9IGJvdW5kcy55O1xuICAgICAgICB2YXIgaDEgPSBib3VuZHMuaGVpZ2h0ICsgYm91bmRzLnk7XG5cbiAgICAgICAgdmFyIHdvcmxkVHJhbnNmb3JtID0gbWF0cml4IHx8IHRoaXMud29ybGRUcmFuc2Zvcm07XG5cbiAgICAgICAgdmFyIGEgPSB3b3JsZFRyYW5zZm9ybS5hO1xuICAgICAgICB2YXIgYiA9IHdvcmxkVHJhbnNmb3JtLmI7XG4gICAgICAgIHZhciBjID0gd29ybGRUcmFuc2Zvcm0uYztcbiAgICAgICAgdmFyIGQgPSB3b3JsZFRyYW5zZm9ybS5kO1xuICAgICAgICB2YXIgdHggPSB3b3JsZFRyYW5zZm9ybS50eDtcbiAgICAgICAgdmFyIHR5ID0gd29ybGRUcmFuc2Zvcm0udHk7XG5cbiAgICAgICAgdmFyIHgxID0gYSAqIHcxICsgYyAqIGgxICsgdHg7XG4gICAgICAgIHZhciB5MSA9IGQgKiBoMSArIGIgKiB3MSArIHR5O1xuXG4gICAgICAgIHZhciB4MiA9IGEgKiB3MCArIGMgKiBoMSArIHR4O1xuICAgICAgICB2YXIgeTIgPSBkICogaDEgKyBiICogdzAgKyB0eTtcblxuICAgICAgICB2YXIgeDMgPSBhICogdzAgKyBjICogaDAgKyB0eDtcbiAgICAgICAgdmFyIHkzID0gZCAqIGgwICsgYiAqIHcwICsgdHk7XG5cbiAgICAgICAgdmFyIHg0ID0gIGEgKiB3MSArIGMgKiBoMCArIHR4O1xuICAgICAgICB2YXIgeTQgPSAgZCAqIGgwICsgYiAqIHcxICsgdHk7XG5cbiAgICAgICAgdmFyIG1heFggPSB4MTtcbiAgICAgICAgdmFyIG1heFkgPSB5MTtcblxuICAgICAgICB2YXIgbWluWCA9IHgxO1xuICAgICAgICB2YXIgbWluWSA9IHkxO1xuXG4gICAgICAgIG1pblggPSB4MiA8IG1pblggPyB4MiA6IG1pblg7XG4gICAgICAgIG1pblggPSB4MyA8IG1pblggPyB4MyA6IG1pblg7XG4gICAgICAgIG1pblggPSB4NCA8IG1pblggPyB4NCA6IG1pblg7XG5cbiAgICAgICAgbWluWSA9IHkyIDwgbWluWSA/IHkyIDogbWluWTtcbiAgICAgICAgbWluWSA9IHkzIDwgbWluWSA/IHkzIDogbWluWTtcbiAgICAgICAgbWluWSA9IHk0IDwgbWluWSA/IHk0IDogbWluWTtcblxuICAgICAgICBtYXhYID0geDIgPiBtYXhYID8geDIgOiBtYXhYO1xuICAgICAgICBtYXhYID0geDMgPiBtYXhYID8geDMgOiBtYXhYO1xuICAgICAgICBtYXhYID0geDQgPiBtYXhYID8geDQgOiBtYXhYO1xuXG4gICAgICAgIG1heFkgPSB5MiA+IG1heFkgPyB5MiA6IG1heFk7XG4gICAgICAgIG1heFkgPSB5MyA+IG1heFkgPyB5MyA6IG1heFk7XG4gICAgICAgIG1heFkgPSB5NCA+IG1heFkgPyB5NCA6IG1heFk7XG5cbiAgICAgICAgdGhpcy5fYm91bmRzLnggPSBtaW5YO1xuICAgICAgICB0aGlzLl9ib3VuZHMud2lkdGggPSBtYXhYIC0gbWluWDtcblxuICAgICAgICB0aGlzLl9ib3VuZHMueSA9IG1pblk7XG4gICAgICAgIHRoaXMuX2JvdW5kcy5oZWlnaHQgPSBtYXhZIC0gbWluWTtcblxuICAgICAgICB0aGlzLl9jdXJyZW50Qm91bmRzID0gdGhpcy5fYm91bmRzO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLl9jdXJyZW50Qm91bmRzO1xufTtcblxuLyoqXG4qIFRlc3RzIGlmIGEgcG9pbnQgaXMgaW5zaWRlIHRoaXMgZ3JhcGhpY3Mgb2JqZWN0XG4qXG4qIEBwYXJhbSBwb2ludCB7UElYSS5Qb2ludH0gdGhlIHBvaW50IHRvIHRlc3RcbiogQHJldHVybiB7Ym9vbGVhbn0gdGhlIHJlc3VsdCBvZiB0aGUgdGVzdFxuKi9cbkdyYXBoaWNzLnByb3RvdHlwZS5jb250YWluc1BvaW50ID0gZnVuY3Rpb24oIHBvaW50IClcbntcbiAgICB0aGlzLndvcmxkVHJhbnNmb3JtLmFwcGx5SW52ZXJzZShwb2ludCwgIHRlbXBQb2ludCk7XG5cbiAgICB2YXIgZ3JhcGhpY3NEYXRhID0gdGhpcy5ncmFwaGljc0RhdGE7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGdyYXBoaWNzRGF0YS5sZW5ndGg7IGkrKylcbiAgICB7XG4gICAgICAgIHZhciBkYXRhID0gZ3JhcGhpY3NEYXRhW2ldO1xuXG4gICAgICAgIGlmICghZGF0YS5maWxsKVxuICAgICAgICB7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIG9ubHkgZGVhbCB3aXRoIGZpbGxzLi5cbiAgICAgICAgaWYgKGRhdGEuc2hhcGUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGlmICggZGF0YS5zaGFwZS5jb250YWlucyggdGVtcFBvaW50LngsIHRlbXBQb2ludC55ICkgKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xufTtcblxuLyoqXG4gKiBVcGRhdGUgdGhlIGJvdW5kcyBvZiB0aGUgb2JqZWN0XG4gKlxuICovXG5HcmFwaGljcy5wcm90b3R5cGUudXBkYXRlTG9jYWxCb3VuZHMgPSBmdW5jdGlvbiAoKVxue1xuICAgIHZhciBtaW5YID0gSW5maW5pdHk7XG4gICAgdmFyIG1heFggPSAtSW5maW5pdHk7XG5cbiAgICB2YXIgbWluWSA9IEluZmluaXR5O1xuICAgIHZhciBtYXhZID0gLUluZmluaXR5O1xuXG4gICAgaWYgKHRoaXMuZ3JhcGhpY3NEYXRhLmxlbmd0aClcbiAgICB7XG4gICAgICAgIHZhciBzaGFwZSwgcG9pbnRzLCB4LCB5LCB3LCBoO1xuXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5ncmFwaGljc0RhdGEubGVuZ3RoOyBpKyspXG4gICAgICAgIHtcbiAgICAgICAgICAgIHZhciBkYXRhID0gdGhpcy5ncmFwaGljc0RhdGFbaV07XG4gICAgICAgICAgICB2YXIgdHlwZSA9IGRhdGEudHlwZTtcbiAgICAgICAgICAgIHZhciBsaW5lV2lkdGggPSBkYXRhLmxpbmVXaWR0aDtcbiAgICAgICAgICAgIHNoYXBlID0gZGF0YS5zaGFwZTtcblxuICAgICAgICAgICAgaWYgKHR5cGUgPT09IENPTlNULlNIQVBFUy5SRUNUIHx8IHR5cGUgPT09IENPTlNULlNIQVBFUy5SUkVDKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHggPSBzaGFwZS54IC0gbGluZVdpZHRoLzI7XG4gICAgICAgICAgICAgICAgeSA9IHNoYXBlLnkgLSBsaW5lV2lkdGgvMjtcbiAgICAgICAgICAgICAgICB3ID0gc2hhcGUud2lkdGggKyBsaW5lV2lkdGg7XG4gICAgICAgICAgICAgICAgaCA9IHNoYXBlLmhlaWdodCArIGxpbmVXaWR0aDtcblxuICAgICAgICAgICAgICAgIG1pblggPSB4IDwgbWluWCA/IHggOiBtaW5YO1xuICAgICAgICAgICAgICAgIG1heFggPSB4ICsgdyA+IG1heFggPyB4ICsgdyA6IG1heFg7XG5cbiAgICAgICAgICAgICAgICBtaW5ZID0geSA8IG1pblkgPyB5IDogbWluWTtcbiAgICAgICAgICAgICAgICBtYXhZID0geSArIGggPiBtYXhZID8geSArIGggOiBtYXhZO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAodHlwZSA9PT0gQ09OU1QuU0hBUEVTLkNJUkMpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgeCA9IHNoYXBlLng7XG4gICAgICAgICAgICAgICAgeSA9IHNoYXBlLnk7XG4gICAgICAgICAgICAgICAgdyA9IHNoYXBlLnJhZGl1cyArIGxpbmVXaWR0aC8yO1xuICAgICAgICAgICAgICAgIGggPSBzaGFwZS5yYWRpdXMgKyBsaW5lV2lkdGgvMjtcblxuICAgICAgICAgICAgICAgIG1pblggPSB4IC0gdyA8IG1pblggPyB4IC0gdyA6IG1pblg7XG4gICAgICAgICAgICAgICAgbWF4WCA9IHggKyB3ID4gbWF4WCA/IHggKyB3IDogbWF4WDtcblxuICAgICAgICAgICAgICAgIG1pblkgPSB5IC0gaCA8IG1pblkgPyB5IC0gaCA6IG1pblk7XG4gICAgICAgICAgICAgICAgbWF4WSA9IHkgKyBoID4gbWF4WSA/IHkgKyBoIDogbWF4WTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKHR5cGUgPT09IENPTlNULlNIQVBFUy5FTElQKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHggPSBzaGFwZS54O1xuICAgICAgICAgICAgICAgIHkgPSBzaGFwZS55O1xuICAgICAgICAgICAgICAgIHcgPSBzaGFwZS53aWR0aCArIGxpbmVXaWR0aC8yO1xuICAgICAgICAgICAgICAgIGggPSBzaGFwZS5oZWlnaHQgKyBsaW5lV2lkdGgvMjtcblxuICAgICAgICAgICAgICAgIG1pblggPSB4IC0gdyA8IG1pblggPyB4IC0gdyA6IG1pblg7XG4gICAgICAgICAgICAgICAgbWF4WCA9IHggKyB3ID4gbWF4WCA/IHggKyB3IDogbWF4WDtcblxuICAgICAgICAgICAgICAgIG1pblkgPSB5IC0gaCA8IG1pblkgPyB5IC0gaCA6IG1pblk7XG4gICAgICAgICAgICAgICAgbWF4WSA9IHkgKyBoID4gbWF4WSA/IHkgKyBoIDogbWF4WTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAvLyBQT0xZXG4gICAgICAgICAgICAgICAgcG9pbnRzID0gc2hhcGUucG9pbnRzO1xuXG4gICAgICAgICAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBwb2ludHMubGVuZ3RoOyBqICs9IDIpXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICB4ID0gcG9pbnRzW2pdO1xuICAgICAgICAgICAgICAgICAgICB5ID0gcG9pbnRzW2orMV07XG5cbiAgICAgICAgICAgICAgICAgICAgbWluWCA9IHgtbGluZVdpZHRoIDwgbWluWCA/IHgtbGluZVdpZHRoIDogbWluWDtcbiAgICAgICAgICAgICAgICAgICAgbWF4WCA9IHgrbGluZVdpZHRoID4gbWF4WCA/IHgrbGluZVdpZHRoIDogbWF4WDtcblxuICAgICAgICAgICAgICAgICAgICBtaW5ZID0geS1saW5lV2lkdGggPCBtaW5ZID8geS1saW5lV2lkdGggOiBtaW5ZO1xuICAgICAgICAgICAgICAgICAgICBtYXhZID0geStsaW5lV2lkdGggPiBtYXhZID8geStsaW5lV2lkdGggOiBtYXhZO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICBtaW5YID0gMDtcbiAgICAgICAgbWF4WCA9IDA7XG4gICAgICAgIG1pblkgPSAwO1xuICAgICAgICBtYXhZID0gMDtcbiAgICB9XG5cbiAgICB2YXIgcGFkZGluZyA9IHRoaXMuYm91bmRzUGFkZGluZztcblxuICAgIHRoaXMuX2xvY2FsQm91bmRzLnggPSBtaW5YIC0gcGFkZGluZztcbiAgICB0aGlzLl9sb2NhbEJvdW5kcy53aWR0aCA9IChtYXhYIC0gbWluWCkgKyBwYWRkaW5nICogMjtcblxuICAgIHRoaXMuX2xvY2FsQm91bmRzLnkgPSBtaW5ZIC0gcGFkZGluZztcbiAgICB0aGlzLl9sb2NhbEJvdW5kcy5oZWlnaHQgPSAobWF4WSAtIG1pblkpICsgcGFkZGluZyAqIDI7XG59O1xuXG4vKipcbiAqIEdlbmVyYXRlcyB0aGUgY2FjaGVkIHNwcml0ZSB3aGVuIHRoZSBzcHJpdGUgaGFzIGNhY2hlQXNCaXRtYXAgPSB0cnVlXG4gKlxuICogQHByaXZhdGVcbiAqL1xuLypcbkdyYXBoaWNzLnByb3RvdHlwZS5fZ2VuZXJhdGVDYWNoZWRTcHJpdGUgPSBmdW5jdGlvbiAoKVxue1xuICAgIHZhciBib3VuZHMgPSB0aGlzLmdldExvY2FsQm91bmRzKCk7XG5cbiAgICBpZiAoIXRoaXMuX2NhY2hlZFNwcml0ZSlcbiAgICB7XG4gICAgICAgIHZhciBjYW52YXNCdWZmZXIgPSBuZXcgQ2FudmFzQnVmZmVyKGJvdW5kcy53aWR0aCwgYm91bmRzLmhlaWdodCk7XG4gICAgICAgIHZhciB0ZXh0dXJlID0gVGV4dHVyZS5mcm9tQ2FudmFzKGNhbnZhc0J1ZmZlci5jYW52YXMpO1xuXG4gICAgICAgIHRoaXMuX2NhY2hlZFNwcml0ZSA9IG5ldyBTcHJpdGUodGV4dHVyZSk7XG4gICAgICAgIHRoaXMuX2NhY2hlZFNwcml0ZS5idWZmZXIgPSBjYW52YXNCdWZmZXI7XG5cbiAgICAgICAgdGhpcy5fY2FjaGVkU3ByaXRlLndvcmxkVHJhbnNmb3JtID0gdGhpcy53b3JsZFRyYW5zZm9ybTtcbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgdGhpcy5fY2FjaGVkU3ByaXRlLmJ1ZmZlci5yZXNpemUoYm91bmRzLndpZHRoLCBib3VuZHMuaGVpZ2h0KTtcbiAgICB9XG5cbiAgICAvLyBsZXZlcmFnZSB0aGUgYW5jaG9yIHRvIGFjY291bnQgZm9yIHRoZSBvZmZzZXQgb2YgdGhlIGVsZW1lbnRcbiAgICB0aGlzLl9jYWNoZWRTcHJpdGUuYW5jaG9yLnggPSAtKCBib3VuZHMueCAvIGJvdW5kcy53aWR0aCApO1xuICAgIHRoaXMuX2NhY2hlZFNwcml0ZS5hbmNob3IueSA9IC0oIGJvdW5kcy55IC8gYm91bmRzLmhlaWdodCApO1xuXG4gICAgLy8gdGhpcy5fY2FjaGVkU3ByaXRlLmJ1ZmZlci5jb250ZXh0LnNhdmUoKTtcbiAgICB0aGlzLl9jYWNoZWRTcHJpdGUuYnVmZmVyLmNvbnRleHQudHJhbnNsYXRlKC1ib3VuZHMueCwtYm91bmRzLnkpO1xuXG4gICAgLy8gbWFrZSBzdXJlIHdlIHNldCB0aGUgYWxwaGEgb2YgdGhlIGdyYXBoaWNzIHRvIDEgZm9yIHRoZSByZW5kZXIuLlxuICAgIHRoaXMud29ybGRBbHBoYSA9IDE7XG5cbiAgICAvLyBub3cgcmVuZGVyIHRoZSBncmFwaGljLi5cbiAgICBDYW52YXNHcmFwaGljcy5yZW5kZXJHcmFwaGljcyh0aGlzLCB0aGlzLl9jYWNoZWRTcHJpdGUuYnVmZmVyLmNvbnRleHQpO1xuXG4gICAgdGhpcy5fY2FjaGVkU3ByaXRlLmFscGhhID0gdGhpcy5hbHBoYTtcbn07XG4qL1xuLyoqXG4gKiBVcGRhdGVzIHRleHR1cmUgc2l6ZSBiYXNlZCBvbiBjYW52YXMgc2l6ZVxuICpcbiAqIEBwcml2YXRlXG4gKi9cbi8qXG5HcmFwaGljcy5wcm90b3R5cGUudXBkYXRlQ2FjaGVkU3ByaXRlVGV4dHVyZSA9IGZ1bmN0aW9uICgpXG57XG4gICAgdmFyIGNhY2hlZFNwcml0ZSA9IHRoaXMuX2NhY2hlZFNwcml0ZTtcbiAgICB2YXIgdGV4dHVyZSA9IGNhY2hlZFNwcml0ZS50ZXh0dXJlO1xuICAgIHZhciBjYW52YXMgPSBjYWNoZWRTcHJpdGUuYnVmZmVyLmNhbnZhcztcblxuICAgIHRleHR1cmUuYmFzZVRleHR1cmUud2lkdGggPSBjYW52YXMud2lkdGg7XG4gICAgdGV4dHVyZS5iYXNlVGV4dHVyZS5oZWlnaHQgPSBjYW52YXMuaGVpZ2h0O1xuICAgIHRleHR1cmUuY3JvcC53aWR0aCA9IHRleHR1cmUuZnJhbWUud2lkdGggPSBjYW52YXMud2lkdGg7XG4gICAgdGV4dHVyZS5jcm9wLmhlaWdodCA9IHRleHR1cmUuZnJhbWUuaGVpZ2h0ID0gY2FudmFzLmhlaWdodDtcblxuICAgIGNhY2hlZFNwcml0ZS5fd2lkdGggPSBjYW52YXMud2lkdGg7XG4gICAgY2FjaGVkU3ByaXRlLl9oZWlnaHQgPSBjYW52YXMuaGVpZ2h0O1xuXG4gICAgLy8gdXBkYXRlIHRoZSBkaXJ0eSBiYXNlIHRleHR1cmVzXG4gICAgdGV4dHVyZS5iYXNlVGV4dHVyZS5kaXJ0eSgpO1xufTsqL1xuXG4vKipcbiAqIERlc3Ryb3lzIGEgcHJldmlvdXMgY2FjaGVkIHNwcml0ZS5cbiAqXG4gKi9cbi8qXG5HcmFwaGljcy5wcm90b3R5cGUuZGVzdHJveUNhY2hlZFNwcml0ZSA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy5fY2FjaGVkU3ByaXRlLnRleHR1cmUuZGVzdHJveSh0cnVlKTtcblxuICAgIC8vIGxldCB0aGUgZ2MgY29sbGVjdCB0aGUgdW51c2VkIHNwcml0ZVxuICAgIC8vIFRPRE8gY291bGQgYmUgb2JqZWN0IHBvb2xlZCFcbiAgICB0aGlzLl9jYWNoZWRTcHJpdGUgPSBudWxsO1xufTsqL1xuXG4vKipcbiAqIERyYXdzIHRoZSBnaXZlbiBzaGFwZSB0byB0aGlzIEdyYXBoaWNzIG9iamVjdC4gQ2FuIGJlIGFueSBvZiBDaXJjbGUsIFJlY3RhbmdsZSwgRWxsaXBzZSwgTGluZSBvciBQb2x5Z29uLlxuICpcbiAqIEBwYXJhbSBzaGFwZSB7UElYSS5DaXJjbGV8UElYSS5SZWN0YW5nbGV8UElYSS5FbGxpcHNlfFBJWEkuTGluZXxQSVhJLlBvbHlnb259IFRoZSBzaGFwZSBvYmplY3QgdG8gZHJhdy5cbiAqIEByZXR1cm4ge1BJWEkuR3JhcGhpY3NEYXRhfSBUaGUgZ2VuZXJhdGVkIEdyYXBoaWNzRGF0YSBvYmplY3QuXG4gKi9cbkdyYXBoaWNzLnByb3RvdHlwZS5kcmF3U2hhcGUgPSBmdW5jdGlvbiAoc2hhcGUpXG57XG4gICAgaWYgKHRoaXMuY3VycmVudFBhdGgpXG4gICAge1xuICAgICAgICAvLyBjaGVjayBjdXJyZW50IHBhdGghXG4gICAgICAgIGlmICh0aGlzLmN1cnJlbnRQYXRoLnNoYXBlLnBvaW50cy5sZW5ndGggPD0gMilcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5ncmFwaGljc0RhdGEucG9wKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLmN1cnJlbnRQYXRoID0gbnVsbDtcblxuICAgIHZhciBkYXRhID0gbmV3IEdyYXBoaWNzRGF0YSh0aGlzLmxpbmVXaWR0aCwgdGhpcy5saW5lQ29sb3IsIHRoaXMubGluZUFscGhhLCB0aGlzLmZpbGxDb2xvciwgdGhpcy5maWxsQWxwaGEsIHRoaXMuZmlsbGluZywgc2hhcGUpO1xuXG4gICAgdGhpcy5ncmFwaGljc0RhdGEucHVzaChkYXRhKTtcblxuICAgIGlmIChkYXRhLnR5cGUgPT09IENPTlNULlNIQVBFUy5QT0xZKVxuICAgIHtcbiAgICAgICAgZGF0YS5zaGFwZS5jbG9zZWQgPSBkYXRhLnNoYXBlLmNsb3NlZCB8fCB0aGlzLmZpbGxpbmc7XG4gICAgICAgIHRoaXMuY3VycmVudFBhdGggPSBkYXRhO1xuICAgIH1cblxuICAgIHRoaXMuZGlydHkgPSB0aGlzLmJvdW5kc0RpcnR5ID0gdHJ1ZTtcblxuICAgIHJldHVybiBkYXRhO1xufTtcblxuLyoqXG4gKiBEZXN0cm95cyB0aGUgR3JhcGhpY3Mgb2JqZWN0LlxuICovXG5HcmFwaGljcy5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uICgpIHtcbiAgICBDb250YWluZXIucHJvdG90eXBlLmRlc3Ryb3kuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcblxuICAgIC8vIGRlc3Ryb3kgZWFjaCBvZiB0aGUgR3JhcGhpY3NEYXRhIG9iamVjdHNcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuZ3JhcGhpY3NEYXRhLmxlbmd0aDsgKytpKSB7XG4gICAgICAgIHRoaXMuZ3JhcGhpY3NEYXRhW2ldLmRlc3Ryb3koKTtcbiAgICB9XG5cbiAgICAvLyBmb3IgZWFjaCB3ZWJnbCBkYXRhIGVudHJ5LCBkZXN0cm95IHRoZSBXZWJHTEdyYXBoaWNzRGF0YVxuICAgIGZvciAodmFyIGlkIGluIHRoaXMuX3dlYmdsKSB7XG4gICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgdGhpcy5fd2ViZ2xbaWRdLmRhdGEubGVuZ3RoOyArK2opIHtcbiAgICAgICAgICAgIHRoaXMuX3dlYmdsW2lkXS5kYXRhW2pdLmRlc3Ryb3koKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMuZ3JhcGhpY3NEYXRhID0gbnVsbDtcblxuICAgIHRoaXMuY3VycmVudFBhdGggPSBudWxsO1xuICAgIHRoaXMuX3dlYmdsID0gbnVsbDtcbiAgICB0aGlzLl9sb2NhbEJvdW5kcyA9IG51bGw7XG59O1xuIiwiLyoqXG4gKiBBIEdyYXBoaWNzRGF0YSBvYmplY3QuXG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIGxpbmVXaWR0aCB7bnVtYmVyfSB0aGUgd2lkdGggb2YgdGhlIGxpbmUgdG8gZHJhd1xuICogQHBhcmFtIGxpbmVDb2xvciB7bnVtYmVyfSB0aGUgY29sb3Igb2YgdGhlIGxpbmUgdG8gZHJhd1xuICogQHBhcmFtIGxpbmVBbHBoYSB7bnVtYmVyfSB0aGUgYWxwaGEgb2YgdGhlIGxpbmUgdG8gZHJhd1xuICogQHBhcmFtIGZpbGxDb2xvciB7bnVtYmVyfSB0aGUgY29sb3Igb2YgdGhlIGZpbGxcbiAqIEBwYXJhbSBmaWxsQWxwaGEge251bWJlcn0gdGhlIGFscGhhIG9mIHRoZSBmaWxsXG4gKiBAcGFyYW0gZmlsbCAgICAgIHtib29sZWFufSB3aGV0aGVyIG9yIG5vdCB0aGUgc2hhcGUgaXMgZmlsbGVkIHdpdGggYSBjb2xvdXJcbiAqIEBwYXJhbSBzaGFwZSAgICAge0NpcmNsZXxSZWN0YW5nbGV8RWxsaXBzZXxMaW5lfFBvbHlnb259IFRoZSBzaGFwZSBvYmplY3QgdG8gZHJhdy5cbiAqL1xuZnVuY3Rpb24gR3JhcGhpY3NEYXRhKGxpbmVXaWR0aCwgbGluZUNvbG9yLCBsaW5lQWxwaGEsIGZpbGxDb2xvciwgZmlsbEFscGhhLCBmaWxsLCBzaGFwZSlcbntcbiAgICAvKlxuICAgICAqIEBtZW1iZXIge251bWJlcn0gdGhlIHdpZHRoIG9mIHRoZSBsaW5lIHRvIGRyYXdcbiAgICAgKi9cbiAgICB0aGlzLmxpbmVXaWR0aCA9IGxpbmVXaWR0aDtcblxuICAgIC8qXG4gICAgICogQG1lbWJlciB7bnVtYmVyfSB0aGUgY29sb3Igb2YgdGhlIGxpbmUgdG8gZHJhd1xuICAgICAqL1xuICAgIHRoaXMubGluZUNvbG9yID0gbGluZUNvbG9yO1xuICAgIC8qXG4gICAgICogQG1lbWJlciB7bnVtYmVyfSB0aGUgYWxwaGEgb2YgdGhlIGxpbmUgdG8gZHJhd1xuICAgICAqL1xuICAgIHRoaXMubGluZUFscGhhID0gbGluZUFscGhhO1xuICAgIC8qXG4gICAgICogQG1lbWJlciB7bnVtYmVyfSBjYWNoZWQgdGludCBvZiB0aGUgbGluZSB0byBkcmF3XG4gICAgICovXG4gICAgdGhpcy5fbGluZVRpbnQgPSBsaW5lQ29sb3I7XG5cbiAgICAvKlxuICAgICAqIEBtZW1iZXIge251bWJlcn0gdGhlIGNvbG9yIG9mIHRoZSBmaWxsXG4gICAgICovXG4gICAgdGhpcy5maWxsQ29sb3IgPSBmaWxsQ29sb3I7XG5cbiAgICAvKlxuICAgICAqIEBtZW1iZXIge251bWJlcn0gdGhlIGFscGhhIG9mIHRoZSBmaWxsXG4gICAgICovXG4gICAgdGhpcy5maWxsQWxwaGEgPSBmaWxsQWxwaGE7XG5cbiAgICAvKlxuICAgICAqIEBtZW1iZXIge251bWJlcn0gY2FjaGVkIHRpbnQgb2YgdGhlIGZpbGxcbiAgICAgKi9cbiAgICB0aGlzLl9maWxsVGludCA9IGZpbGxDb2xvcjtcblxuICAgIC8qXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn0gd2hldGhlciBvciBub3QgdGhlIHNoYXBlIGlzIGZpbGxlZCB3aXRoIGEgY29sb3VyXG4gICAgICovXG4gICAgdGhpcy5maWxsID0gZmlsbDtcblxuICAgIC8qXG4gICAgICogQG1lbWJlciB7UElYSS5DaXJjbGV8UElYSS5SZWN0YW5nbGV8UElYSS5FbGxpcHNlfFBJWEkuTGluZXxQSVhJLlBvbHlnb259IFRoZSBzaGFwZSBvYmplY3QgdG8gZHJhdy5cbiAgICAgKi9cbiAgICB0aGlzLnNoYXBlID0gc2hhcGU7XG5cbiAgICAvKlxuICAgICAqIEBtZW1iZXIge251bWJlcn0gVGhlIHR5cGUgb2YgdGhlIHNoYXBlLCBzZWUgdGhlIENvbnN0LlNoYXBlcyBmaWxlIGZvciBhbGwgdGhlIGV4aXN0aW5nIHR5cGVzLFxuICAgICAqL1xuICAgIHRoaXMudHlwZSA9IHNoYXBlLnR5cGU7XG59XG5cbkdyYXBoaWNzRGF0YS5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBHcmFwaGljc0RhdGE7XG5tb2R1bGUuZXhwb3J0cyA9IEdyYXBoaWNzRGF0YTtcblxuLyoqXG4gKiBDcmVhdGVzIGEgbmV3IEdyYXBoaWNzRGF0YSBvYmplY3Qgd2l0aCB0aGUgc2FtZSB2YWx1ZXMgYXMgdGhpcyBvbmUuXG4gKlxuICogQHJldHVybiB7UElYSS5HcmFwaGljc0RhdGF9XG4gKi9cbkdyYXBoaWNzRGF0YS5wcm90b3R5cGUuY2xvbmUgPSBmdW5jdGlvbiAoKVxue1xuICAgIHJldHVybiBuZXcgR3JhcGhpY3NEYXRhKFxuICAgICAgICB0aGlzLmxpbmVXaWR0aCxcbiAgICAgICAgdGhpcy5saW5lQ29sb3IsXG4gICAgICAgIHRoaXMubGluZUFscGhhLFxuICAgICAgICB0aGlzLmZpbGxDb2xvcixcbiAgICAgICAgdGhpcy5maWxsQWxwaGEsXG4gICAgICAgIHRoaXMuZmlsbCxcbiAgICAgICAgdGhpcy5zaGFwZVxuICAgICk7XG59O1xuXG4vKipcbiAqIERlc3Ryb3lzIHRoZSBHcmFwaGljcyBkYXRhLlxuICovXG5HcmFwaGljc0RhdGEucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoKSB7XG4gICAgdGhpcy5zaGFwZSA9IG51bGw7XG59O1xuIiwidmFyIHV0aWxzID0gcmVxdWlyZSgnLi4vLi4vdXRpbHMnKSxcbiAgICBtYXRoID0gcmVxdWlyZSgnLi4vLi4vbWF0aCcpLFxuICAgIENPTlNUID0gcmVxdWlyZSgnLi4vLi4vY29uc3QnKSxcbiAgICBPYmplY3RSZW5kZXJlciA9IHJlcXVpcmUoJy4uLy4uL3JlbmRlcmVycy93ZWJnbC91dGlscy9PYmplY3RSZW5kZXJlcicpLFxuICAgIFdlYkdMUmVuZGVyZXIgPSByZXF1aXJlKCcuLi8uLi9yZW5kZXJlcnMvd2ViZ2wvV2ViR0xSZW5kZXJlcicpLFxuICAgIFdlYkdMR3JhcGhpY3NEYXRhID0gcmVxdWlyZSgnLi9XZWJHTEdyYXBoaWNzRGF0YScpLFxuICAgIFByaW1pdGl2ZVNoYWRlciA9IHJlcXVpcmUoJy4vc2hhZGVycy9QcmltaXRpdmVTaGFkZXInKSxcblxuICAgIC8vIHNvbWUgZHJhd2luZyBmdW5jdGlvbnMuLlxuICAgIGJ1aWxkTGluZSA9IHJlcXVpcmUoJy4vdXRpbHMvYnVpbGRMaW5lJyk7XG4gICAgYnVpbGRQb2x5ID0gcmVxdWlyZSgnLi91dGlscy9idWlsZFBvbHknKTtcbiAgICBidWlsZENvbXBsZXhQb2x5ID0gcmVxdWlyZSgnLi91dGlscy9idWlsZENvbXBsZXhQb2x5Jyk7XG4gICAgYnVpbGRSZWN0YW5nbGUgPSByZXF1aXJlKCcuL3V0aWxzL2J1aWxkUmVjdGFuZ2xlJyk7XG4gICAgYnVpbGRSb3VuZGVkUmVjdGFuZ2xlID0gcmVxdWlyZSgnLi91dGlscy9idWlsZFJvdW5kZWRSZWN0YW5nbGUnKTtcbiAgICBidWlsZENpcmNsZSA9IHJlcXVpcmUoJy4vdXRpbHMvYnVpbGRDaXJjbGUnKTtcblxuICAgIGVhcmN1dCA9IHJlcXVpcmUoJ2VhcmN1dCcpO1xuXG4vKipcbiAqIFJlbmRlcnMgdGhlIGdyYXBoaWNzIG9iamVjdC5cbiAqXG4gKiBAY2xhc3NcbiAqIEBwcml2YXRlXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQGV4dGVuZHMgUElYSS5PYmplY3RSZW5kZXJlclxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLldlYkdMUmVuZGVyZXJ9IFRoZSByZW5kZXJlciB0aGlzIG9iamVjdCByZW5kZXJlciB3b3JrcyBmb3IuXG4gKi9cbmZ1bmN0aW9uIEdyYXBoaWNzUmVuZGVyZXIocmVuZGVyZXIpXG57XG4gICAgT2JqZWN0UmVuZGVyZXIuY2FsbCh0aGlzLCByZW5kZXJlcik7XG5cbiAgICB0aGlzLmdyYXBoaWNzRGF0YVBvb2wgPSBbXTtcblxuICAgIHRoaXMucHJpbWl0aXZlU2hhZGVyID0gbnVsbDtcbiAgICB0aGlzLmNvbXBsZXhQcmltaXRpdmVTaGFkZXIgPSBudWxsO1xuXG4gICAgdGhpcy5nbCA9IHJlbmRlcmVyLmdsO1xuXG4gICAgLyoqXG4gICAgICogVGhpcyBpcyB0aGUgbWF4aW11bSBudW1iZXIgb2YgcG9pbnRzIGEgcG9seSBjYW4gY29udGFpbiBiZWZvcmUgaXQgaXMgcmVuZGVyZWQgYXMgYSBjb21wbGV4IHBvbHlnb24gKHVzaW5nIHRoZSBzdGVuY2lsIGJ1ZmZlcilcbiAgICAgKiBAdHlwZSB7TnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMubWF4aW11bVNpbXBsZVBvbHlTaXplID0gMjAwO1xufVxuXG5HcmFwaGljc1JlbmRlcmVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoT2JqZWN0UmVuZGVyZXIucHJvdG90eXBlKTtcbkdyYXBoaWNzUmVuZGVyZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gR3JhcGhpY3NSZW5kZXJlcjtcbm1vZHVsZS5leHBvcnRzID0gR3JhcGhpY3NSZW5kZXJlcjtcblxuV2ViR0xSZW5kZXJlci5yZWdpc3RlclBsdWdpbignZ3JhcGhpY3MnLCBHcmFwaGljc1JlbmRlcmVyKTtcblxuLyoqXG4gKiBDYWxsZWQgd2hlbiB0aGVyZSBpcyBhIFdlYkdMIGNvbnRleHQgY2hhbmdlXG4gKlxuICogQHByaXZhdGVcbiAqXG4gKi9cbkdyYXBoaWNzUmVuZGVyZXIucHJvdG90eXBlLm9uQ29udGV4dENoYW5nZSA9IGZ1bmN0aW9uKClcbntcbiAgICB0aGlzLmdsID0gdGhpcy5yZW5kZXJlci5nbDtcbiAgICB0aGlzLnByaW1pdGl2ZVNoYWRlciA9IG5ldyBQcmltaXRpdmVTaGFkZXIodGhpcy5nbClcbn07XG5cbi8qKlxuICogRGVzdHJveXMgdGhpcyByZW5kZXJlci5cbiAqXG4gKi9cbkdyYXBoaWNzUmVuZGVyZXIucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoKSB7XG4gICAgT2JqZWN0UmVuZGVyZXIucHJvdG90eXBlLmRlc3Ryb3kuY2FsbCh0aGlzKTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5ncmFwaGljc0RhdGFQb29sLmxlbmd0aDsgKytpKSB7XG4gICAgICAgIHRoaXMuZ3JhcGhpY3NEYXRhUG9vbFtpXS5kZXN0cm95KCk7XG4gICAgfVxuXG4gICAgdGhpcy5ncmFwaGljc0RhdGFQb29sID0gbnVsbDtcbn07XG5cbi8qKlxuICogUmVuZGVycyBhIGdyYXBoaWNzIG9iamVjdC5cbiAqXG4gKiBAcGFyYW0gZ3JhcGhpY3Mge1BJWEkuR3JhcGhpY3N9IFRoZSBncmFwaGljcyBvYmplY3QgdG8gcmVuZGVyLlxuICovXG5HcmFwaGljc1JlbmRlcmVyLnByb3RvdHlwZS5yZW5kZXIgPSBmdW5jdGlvbihncmFwaGljcylcbntcbiAgICB2YXIgcmVuZGVyZXIgPSB0aGlzLnJlbmRlcmVyO1xuICAgIHZhciBnbCA9IHJlbmRlcmVyLmdsO1xuXG4gICAgdmFyIHdlYkdMRGF0YTtcbiAgLy8gIGNvbnNvbGUubG9nKGdyYXBoaWNzKVxuICAgIGlmIChncmFwaGljcy5kaXJ0eSB8fCAhZ3JhcGhpY3MuX3dlYkdMW2dsLmlkXSlcbiAgICB7XG4gICAgICAgIHRoaXMudXBkYXRlR3JhcGhpY3MoZ3JhcGhpY3MpO1xuICAgIH1cblxuICAgIHZhciB3ZWJHTCA9IGdyYXBoaWNzLl93ZWJHTFtnbC5pZF07XG5cbiAgICAvLyBUaGlzICBjb3VsZCBiZSBzcGVlZGVkIHVwIGZvciBzdXJlIVxuXG4gICAgcmVuZGVyZXIuYmxlbmRNb2RlTWFuYWdlci5zZXRCbGVuZE1vZGUoIGdyYXBoaWNzLmJsZW5kTW9kZSApO1xuXG4vLyAgICB2YXIgbWF0cml4ID0gIGdyYXBoaWNzLndvcmxkVHJhbnNmb3JtLmNsb25lKCk7XG4vLyAgICB2YXIgbWF0cml4ID0gIHJlbmRlcmVyLmN1cnJlbnRSZW5kZXJUYXJnZXQucHJvamVjdGlvbk1hdHJpeC5jbG9uZSgpO1xuLy8gICAgbWF0cml4LmFwcGVuZChncmFwaGljcy53b3JsZFRyYW5zZm9ybSk7XG5cbiAgICBmb3IgKHZhciBpID0gMCwgbiA9IHdlYkdMLmRhdGEubGVuZ3RoOyBpIDwgbjsgaSsrKVxuICAgIHtcbiAgICAgICAgd2ViR0xEYXRhID0gd2ViR0wuZGF0YVtpXTtcblxuICAgICAgICBpZiAod2ViR0wuZGF0YVtpXS5tb2RlID09PSAxKVxuICAgICAgICB7XG4gICAgICAgICAgICAvL1RPRE8gZml4IHRoaXMgb25lIVxuICAgICAgICAgICAgXG4gICAgICAgICAgICAvKlxuICAgICAgICAgICAgcmVuZGVyZXIuc3RlbmNpbE1hbmFnZXIucHVzaFN0ZW5jaWwoZ3JhcGhpY3MsIHdlYkdMRGF0YSk7XG5cbiAgICAgICAgICAgIGdsLnVuaWZvcm0xZihyZW5kZXJlci5zaGFkZXJNYW5hZ2VyLmNvbXBsZXhQcmltaXRpdmVTaGFkZXIudW5pZm9ybXMuYWxwaGEuX2xvY2F0aW9uLCBncmFwaGljcy53b3JsZEFscGhhICogd2ViR0xEYXRhLmFscGhhKTtcblxuICAgICAgICAgICAgLy8gcmVuZGVyIHF1YWQuLlxuICAgICAgICAgICAgZ2wuZHJhd0VsZW1lbnRzKGdsLlRSSUFOR0xFX0ZBTiwgNCwgZ2wuVU5TSUdORURfU0hPUlQsICggd2ViR0xEYXRhLmluZGljZXMubGVuZ3RoIC0gNCApICogMiApO1xuXG4gICAgICAgICAgICByZW5kZXJlci5zdGVuY2lsTWFuYWdlci5wb3BTdGVuY2lsKGdyYXBoaWNzLCB3ZWJHTERhdGEpO1xuICAgICAgICAgICAgKi9cbiAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgIHtcblxuICAgICAgICAgICAgc2hhZGVyID0gdGhpcy5wcmltaXRpdmVTaGFkZXI7XG5cbiAgICAgICAgICAgIHJlbmRlcmVyLmJpbmRTaGFkZXIoc2hhZGVyKVxuXG4gICAgICAgICAgICBzaGFkZXIudW5pZm9ybXMudHJhbnNsYXRpb25NYXRyaXggPSBncmFwaGljcy53b3JsZFRyYW5zZm9ybS50b0FycmF5KHRydWUpO1xuICAgICAgICAgICAgc2hhZGVyLnVuaWZvcm1zLnRpbnQgPSB1dGlscy5oZXgycmdiKGdyYXBoaWNzLnRpbnQpO1xuICAgICAgICAgICAgc2hhZGVyLnVuaWZvcm1zLmFscGhhID0gZ3JhcGhpY3Mud29ybGRBbHBoYTtcblxuXG4gICAgICAgICAgICBnbC5iaW5kQnVmZmVyKGdsLkFSUkFZX0JVRkZFUiwgd2ViR0xEYXRhLmJ1ZmZlcik7XG5cbiAgICAgICAgICAgIHNoYWRlciA9IHRoaXMucHJpbWl0aXZlU2hhZGVyO1xuXG4gICAgICAgICAgICBzaGFkZXIuYXR0cmlidXRlcy5hVmVydGV4UG9zaXRpb24ucG9pbnRlcihnbC5GTE9BVCwgZmFsc2UsIDQgKiA2LCAwKTtcbiAgICAgICAgICAgIHNoYWRlci5hdHRyaWJ1dGVzLmFDb2xvci5wb2ludGVyKGdsLkZMT0FULCBmYWxzZSwgNCAqIDYsIDIgKiA0KTtcblxuICAgICAgICAgICAgZ2wuZW5hYmxlVmVydGV4QXR0cmliQXJyYXkoc2hhZGVyLmF0dHJpYnV0ZXMuYVZlcnRleFBvc2l0aW9uLmxvY2F0aW9uKTtcbiAgICAgICAgICAgIGdsLmVuYWJsZVZlcnRleEF0dHJpYkFycmF5KHNoYWRlci5hdHRyaWJ1dGVzLmFDb2xvci5sb2NhdGlvbik7XG5cbiAgICAgICAgICAgIC8vIHNldCB0aGUgaW5kZXggYnVmZmVyIVxuICAgICAgICAgICAgZ2wuYmluZEJ1ZmZlcihnbC5FTEVNRU5UX0FSUkFZX0JVRkZFUiwgd2ViR0xEYXRhLmluZGV4QnVmZmVyKTtcbiAgICAgICAgICAgIGdsLmRyYXdFbGVtZW50cyhnbC5UUklBTkdMRV9TVFJJUCwgIHdlYkdMRGF0YS5pbmRpY2VzLmxlbmd0aCwgZ2wuVU5TSUdORURfU0hPUlQsIDAgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJlbmRlcmVyLmRyYXdDb3VudCsrO1xuICAgIH1cbn07XG5cbi8qKlxuICogVXBkYXRlcyB0aGUgZ3JhcGhpY3Mgb2JqZWN0XG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSBncmFwaGljcyB7UElYSS5HcmFwaGljc30gVGhlIGdyYXBoaWNzIG9iamVjdCB0byB1cGRhdGVcbiAqL1xuR3JhcGhpY3NSZW5kZXJlci5wcm90b3R5cGUudXBkYXRlR3JhcGhpY3MgPSBmdW5jdGlvbihncmFwaGljcylcbntcbiAgICB2YXIgZ2wgPSB0aGlzLnJlbmRlcmVyLmdsO1xuXG4gICAgIC8vIGdldCB0aGUgY29udGV4dHMgZ3JhcGhpY3Mgb2JqZWN0XG4gICAgdmFyIHdlYkdMID0gZ3JhcGhpY3MuX3dlYkdMW2dsLmlkXTtcblxuICAgIC8vIGlmIHRoZSBncmFwaGljcyBvYmplY3QgZG9lcyBub3QgZXhpc3QgaW4gdGhlIHdlYkdMIGNvbnRleHQgdGltZSB0byBjcmVhdGUgaXQhXG4gICAgaWYgKCF3ZWJHTClcbiAgICB7XG4gICAgICAgIHdlYkdMID0gZ3JhcGhpY3MuX3dlYkdMW2dsLmlkXSA9IHtsYXN0SW5kZXg6MCwgZGF0YTpbXSwgZ2w6Z2x9O1xuICAgIH1cblxuICAgXG4gICAgLy8gZmxhZyB0aGUgZ3JhcGhpY3MgYXMgbm90IGRpcnR5IGFzIHdlIGFyZSBhYm91dCB0byB1cGRhdGUgaXQuLi5cbiAgICBncmFwaGljcy5kaXJ0eSA9IGZhbHNlO1xuXG4gICAgdmFyIGk7XG5cbiAgICAvLyBpZiB0aGUgdXNlciBjbGVhcmVkIHRoZSBncmFwaGljcyBvYmplY3Qgd2Ugd2lsbCBuZWVkIHRvIGNsZWFyIGV2ZXJ5IG9iamVjdFxuICAgIGlmIChncmFwaGljcy5jbGVhckRpcnR5KVxuICAgIHtcbiAgICAgICAgZ3JhcGhpY3MuY2xlYXJEaXJ0eSA9IGZhbHNlO1xuXG4gICAgICAgIC8vIGxvb3AgdGhyb3VnaCBhbmQgcmV0dXJuIGFsbCB0aGUgd2ViR0xEYXRhcyB0byB0aGUgb2JqZWN0IHBvb2wgc28gdGhhbiBjYW4gYmUgcmV1c2VkIGxhdGVyIG9uXG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCB3ZWJHTC5kYXRhLmxlbmd0aDsgaSsrKVxuICAgICAgICB7XG4gICAgICAgICAgICB2YXIgZ3JhcGhpY3NEYXRhID0gd2ViR0wuZGF0YVtpXTtcbiAgICAgICAgICAgIGdyYXBoaWNzRGF0YS5yZXNldCgpO1xuICAgICAgICAgICAgdGhpcy5ncmFwaGljc0RhdGFQb29sLnB1c2goIGdyYXBoaWNzRGF0YSApO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gY2xlYXIgdGhlIGFycmF5IGFuZCByZXNldCB0aGUgaW5kZXguLlxuICAgICAgICB3ZWJHTC5kYXRhID0gW107XG4gICAgICAgIHdlYkdMLmxhc3RJbmRleCA9IDA7XG4gICAgfVxuXG4gICAgdmFyIHdlYkdMRGF0YTtcblxuICAgIC8vIGxvb3AgdGhyb3VnaCB0aGUgZ3JhcGhpY3MgZGF0YXMgYW5kIGNvbnN0cnVjdCBlYWNoIG9uZS4uXG4gICAgLy8gaWYgdGhlIG9iamVjdCBpcyBhIGNvbXBsZXggZmlsbCB0aGVuIHRoZSBuZXcgc3RlbmNpbCBidWZmZXIgdGVjaG5pcXVlIHdpbGwgYmUgdXNlZFxuICAgIC8vIG90aGVyIHdpc2UgZ3JhcGhpY3Mgb2JqZWN0cyB3aWxsIGJlIHB1c2hlZCBpbnRvIGEgYmF0Y2guLlxuICAgIGZvciAoaSA9IHdlYkdMLmxhc3RJbmRleDsgaSA8IGdyYXBoaWNzLmdyYXBoaWNzRGF0YS5sZW5ndGg7IGkrKylcbiAgICB7XG4gICAgICAgIHZhciBkYXRhID0gZ3JhcGhpY3MuZ3JhcGhpY3NEYXRhW2ldO1xuXG4gICAgICAgIGlmIChkYXRhLnR5cGUgPT09IENPTlNULlNIQVBFUy5QT0xZKVxuICAgICAgICB7XG4gICAgICAgICAgICAvLyBuZWVkIHRvIGFkZCB0aGUgcG9pbnRzIHRoZSB0aGUgZ3JhcGhpY3Mgb2JqZWN0Li5cbiAgICAgICAgICAgIGRhdGEucG9pbnRzID0gZGF0YS5zaGFwZS5wb2ludHMuc2xpY2UoKTtcbiAgICAgICAgICAgIGlmIChkYXRhLnNoYXBlLmNsb3NlZClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAvLyBjbG9zZSB0aGUgcG9seSBpZiB0aGUgdmFsdWUgaXMgdHJ1ZSFcbiAgICAgICAgICAgICAgICBpZiAoZGF0YS5wb2ludHNbMF0gIT09IGRhdGEucG9pbnRzW2RhdGEucG9pbnRzLmxlbmd0aC0yXSB8fCBkYXRhLnBvaW50c1sxXSAhPT0gZGF0YS5wb2ludHNbZGF0YS5wb2ludHMubGVuZ3RoLTFdKVxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgZGF0YS5wb2ludHMucHVzaChkYXRhLnBvaW50c1swXSwgZGF0YS5wb2ludHNbMV0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gTUFLRSBTVVJFIFdFIEhBVkUgVEhFIENPUlJFQ1QgVFlQRS4uXG4gICAgICAgICAgICBpZiAoZGF0YS5maWxsKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGlmIChkYXRhLnBvaW50cy5sZW5ndGggPj0gNilcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChkYXRhLnBvaW50cy5sZW5ndGggPCB0aGlzLm1heGltdW1TaW1wbGVQb2x5U2l6ZSAqIDIpXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHdlYkdMRGF0YSA9IHRoaXMuc3dpdGNoTW9kZSh3ZWJHTCwgMCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjYW5EcmF3VXNpbmdTaW1wbGUgPSBidWlsZFBvbHkoZGF0YSwgd2ViR0xEYXRhKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFjYW5EcmF3VXNpbmdTaW1wbGUpXG4gICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd2ViR0xEYXRhID0gdGhpcy5zd2l0Y2hNb2RlKHdlYkdMLCAxKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWlsZENvbXBsZXhQb2x5KGRhdGEsIHdlYkdMRGF0YSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHdlYkdMRGF0YSA9IHRoaXMuc3dpdGNoTW9kZSh3ZWJHTCwgMSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBidWlsZENvbXBsZXhQb2x5KGRhdGEsIHdlYkdMRGF0YSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChkYXRhLmxpbmVXaWR0aCA+IDApXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgd2ViR0xEYXRhID0gdGhpcy5zd2l0Y2hNb2RlKHdlYkdMLCAwKTtcbiAgICAgICAgICAgICAgICBidWlsZExpbmUoZGF0YSwgd2ViR0xEYXRhKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgIHtcbiAgICAgICAgICAgIHdlYkdMRGF0YSA9IHRoaXMuc3dpdGNoTW9kZSh3ZWJHTCwgMCk7XG5cbiAgICAgICAgICAgIGlmIChkYXRhLnR5cGUgPT09IENPTlNULlNIQVBFUy5SRUNUKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGJ1aWxkUmVjdGFuZ2xlKGRhdGEsIHdlYkdMRGF0YSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChkYXRhLnR5cGUgPT09IENPTlNULlNIQVBFUy5DSVJDIHx8IGRhdGEudHlwZSA9PT0gQ09OU1QuU0hBUEVTLkVMSVApXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgYnVpbGRDaXJjbGUoZGF0YSwgd2ViR0xEYXRhKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGRhdGEudHlwZSA9PT0gQ09OU1QuU0hBUEVTLlJSRUMpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgYnVpbGRSb3VuZGVkUmVjdGFuZ2xlKGRhdGEsIHdlYkdMRGF0YSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICB3ZWJHTC5sYXN0SW5kZXgrKztcbiAgICB9XG5cbiAgICAvLyB1cGxvYWQgYWxsIHRoZSBkaXJ0eSBkYXRhLi4uXG4gICAgZm9yIChpID0gMDsgaSA8IHdlYkdMLmRhdGEubGVuZ3RoOyBpKyspXG4gICAge1xuICAgICAgICB3ZWJHTERhdGEgPSB3ZWJHTC5kYXRhW2ldO1xuXG4gICAgICAgIGlmICh3ZWJHTERhdGEuZGlydHkpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHdlYkdMRGF0YS51cGxvYWQoKTtcbiAgICAgICAgfVxuICAgIH1cbn07XG5cbi8qKlxuICpcbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHdlYkdMIHtXZWJHTFJlbmRlcmluZ0NvbnRleHR9IHRoZSBjdXJyZW50IFdlYkdMIGRyYXdpbmcgY29udGV4dFxuICogQHBhcmFtIHR5cGUge251bWJlcn0gVE9ETyBAQWx2aW5cbiAqL1xuR3JhcGhpY3NSZW5kZXJlci5wcm90b3R5cGUuc3dpdGNoTW9kZSA9IGZ1bmN0aW9uICh3ZWJHTCwgdHlwZSlcbntcbiAgICB2YXIgd2ViR0xEYXRhO1xuXG4gICAgaWYgKCF3ZWJHTC5kYXRhLmxlbmd0aClcbiAgICB7XG4gICAgICAgIHdlYkdMRGF0YSA9IHRoaXMuZ3JhcGhpY3NEYXRhUG9vbC5wb3AoKSB8fCBuZXcgV2ViR0xHcmFwaGljc0RhdGEod2ViR0wuZ2wpO1xuICAgICAgICB3ZWJHTERhdGEubW9kZSA9IHR5cGU7XG4gICAgICAgIHdlYkdMLmRhdGEucHVzaCh3ZWJHTERhdGEpO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICB3ZWJHTERhdGEgPSB3ZWJHTC5kYXRhW3dlYkdMLmRhdGEubGVuZ3RoLTFdO1xuXG4gICAgICAgIGlmICgod2ViR0xEYXRhLnBvaW50cy5sZW5ndGggPiAzMjAwMDApIHx8IHdlYkdMRGF0YS5tb2RlICE9PSB0eXBlIHx8IHR5cGUgPT09IDEpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHdlYkdMRGF0YSA9IHRoaXMuZ3JhcGhpY3NEYXRhUG9vbC5wb3AoKSB8fCBuZXcgV2ViR0xHcmFwaGljc0RhdGEod2ViR0wuZ2wpO1xuICAgICAgICAgICAgd2ViR0xEYXRhLm1vZGUgPSB0eXBlO1xuICAgICAgICAgICAgd2ViR0wuZGF0YS5wdXNoKHdlYkdMRGF0YSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB3ZWJHTERhdGEuZGlydHkgPSB0cnVlO1xuXG4gICAgcmV0dXJuIHdlYkdMRGF0YTtcbn07XG5cbiIsIi8qKlxuICogQW4gb2JqZWN0IGNvbnRhaW5pbmcgV2ViR0wgc3BlY2lmaWMgcHJvcGVydGllcyB0byBiZSB1c2VkIGJ5IHRoZSBXZWJHTCByZW5kZXJlclxuICpcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqIEBwYXJhbSBnbCB7V2ViR0xSZW5kZXJpbmdDb250ZXh0fSB0aGUgY3VycmVudCBXZWJHTCBkcmF3aW5nIGNvbnRleHRcbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIFdlYkdMR3JhcGhpY3NEYXRhKGdsKSB7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgY3VycmVudCBXZWJHTCBkcmF3aW5nIGNvbnRleHRcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1dlYkdMUmVuZGVyaW5nQ29udGV4dH1cbiAgICAgKi9cbiAgICB0aGlzLmdsID0gZ2w7XG5cbiAgICAvL1RPRE8gZG9lcyB0aGlzIG5lZWQgdG8gYmUgc3BsaXQgYmVmb3JlIHVwbG9kaW5nPz9cbiAgICAvKipcbiAgICAgKiBBbiBhcnJheSBvZiBjb2xvciBjb21wb25lbnRzIChyLGcsYilcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJbXX1cbiAgICAgKi9cbiAgICB0aGlzLmNvbG9yID0gWzAsMCwwXTsgLy8gY29sb3Igc3BsaXQhXG5cbiAgICAvKipcbiAgICAgKiBBbiBhcnJheSBvZiBwb2ludHMgdG8gZHJhd1xuICAgICAqIEBtZW1iZXIge1BJWEkuUG9pbnRbXX1cbiAgICAgKi9cbiAgICB0aGlzLnBvaW50cyA9IFtdO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGluZGljZXMgb2YgdGhlIHZlcnRpY2VzXG4gICAgICogQG1lbWJlciB7bnVtYmVyW119XG4gICAgICovXG4gICAgdGhpcy5pbmRpY2VzID0gW107XG4gICAgLyoqXG4gICAgICogVGhlIG1haW4gYnVmZmVyXG4gICAgICogQG1lbWJlciB7V2ViR0xCdWZmZXJ9XG4gICAgICovXG4gICAgdGhpcy5idWZmZXIgPSBnbC5jcmVhdGVCdWZmZXIoKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBpbmRleCBidWZmZXJcbiAgICAgKiBAbWVtYmVyIHtXZWJHTEJ1ZmZlcn1cbiAgICAgKi9cbiAgICB0aGlzLmluZGV4QnVmZmVyID0gZ2wuY3JlYXRlQnVmZmVyKCk7XG5cbiAgICAvKipcbiAgICAgKiB0b2RvIEBhbHZpblxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLm1vZGUgPSAxO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGFscGhhIG9mIHRoZSBncmFwaGljc1xuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLmFscGhhID0gMTtcblxuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgdGhpcyBncmFwaGljcyBpcyBkaXJ0eSBvciBub3RcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqL1xuICAgIHRoaXMuZGlydHkgPSB0cnVlO1xuXG4gICAgdGhpcy5nbFBvaW50cyA9IG51bGw7XG4gICAgdGhpcy5nbEluZGljZXMgPSBudWxsO1xufVxuXG5XZWJHTEdyYXBoaWNzRGF0YS5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBXZWJHTEdyYXBoaWNzRGF0YTtcbm1vZHVsZS5leHBvcnRzID0gV2ViR0xHcmFwaGljc0RhdGE7XG5cbi8qKlxuICogUmVzZXRzIHRoZSB2ZXJ0aWNlcyBhbmQgdGhlIGluZGljZXNcbiAqL1xuV2ViR0xHcmFwaGljc0RhdGEucHJvdG90eXBlLnJlc2V0ID0gZnVuY3Rpb24gKCkge1xuICAgIHRoaXMucG9pbnRzLmxlbmd0aCA9IDA7XG4gICAgdGhpcy5pbmRpY2VzLmxlbmd0aCA9IDA7XG59O1xuXG4vKipcbiAqIEJpbmRzIHRoZSBidWZmZXJzIGFuZCB1cGxvYWRzIHRoZSBkYXRhXG4gKi9cbldlYkdMR3JhcGhpY3NEYXRhLnByb3RvdHlwZS51cGxvYWQgPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGdsID0gdGhpcy5nbDtcblxuLy8gICAgdGhpcy5sYXN0SW5kZXggPSBncmFwaGljcy5ncmFwaGljc0RhdGEubGVuZ3RoO1xuICAgIHRoaXMuZ2xQb2ludHMgPSBuZXcgRmxvYXQzMkFycmF5KHRoaXMucG9pbnRzKTtcblxuICAgIGdsLmJpbmRCdWZmZXIoZ2wuQVJSQVlfQlVGRkVSLCB0aGlzLmJ1ZmZlcik7XG4gICAgZ2wuYnVmZmVyRGF0YShnbC5BUlJBWV9CVUZGRVIsIHRoaXMuZ2xQb2ludHMsIGdsLlNUQVRJQ19EUkFXKTtcblxuICAgIHRoaXMuZ2xJbmRpY2VzID0gbmV3IFVpbnQxNkFycmF5KHRoaXMuaW5kaWNlcyk7XG5cbiAgICBnbC5iaW5kQnVmZmVyKGdsLkVMRU1FTlRfQVJSQVlfQlVGRkVSLCB0aGlzLmluZGV4QnVmZmVyKTtcbiAgICBnbC5idWZmZXJEYXRhKGdsLkVMRU1FTlRfQVJSQVlfQlVGRkVSLCB0aGlzLmdsSW5kaWNlcywgZ2wuU1RBVElDX0RSQVcpO1xuXG4gICAgdGhpcy5kaXJ0eSA9IGZhbHNlO1xufTtcblxuV2ViR0xHcmFwaGljc0RhdGEucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoKSB7XG4gICAgdGhpcy5jb2xvciA9IG51bGw7XG4gICAgdGhpcy5wb2ludHMgPSBudWxsO1xuICAgIHRoaXMuaW5kaWNlcyA9IG51bGw7XG5cbiAgICB0aGlzLmdsLmRlbGV0ZUJ1ZmZlcih0aGlzLmJ1ZmZlcik7XG4gICAgdGhpcy5nbC5kZWxldGVCdWZmZXIodGhpcy5pbmRleEJ1ZmZlcik7XG4gICAgXG4gICAgdGhpcy5nbCA9IG51bGw7XG5cbiAgICB0aGlzLmJ1ZmZlciA9IG51bGw7XG4gICAgdGhpcy5pbmRleEJ1ZmZlciA9IG51bGw7XG5cbiAgICB0aGlzLmdsUG9pbnRzID0gbnVsbDtcbiAgICB0aGlzLmdsSW5kaWNlcyA9IG51bGw7XG59O1xuIiwidmFyIFNoYWRlciA9IHJlcXVpcmUoJ3BpeGktZ2wtY29yZScpLkdMU2hhZGVyO1xuXG4vKipcbiAqIFRoaXMgc2hhZGVyIGlzIHVzZWQgdG8gZHJhdyBzaW1wbGUgcHJpbWl0aXZlIHNoYXBlcyBmb3Ige0BsaW5rIFBJWEkuR3JhcGhpY3N9LlxuICpcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqIEBleHRlbmRzIFBJWEkuU2hhZGVyXG4gKiBAcGFyYW0gc2hhZGVyTWFuYWdlciB7U2hhZGVyTWFuYWdlcn0gVGhlIHdlYmdsIHNoYWRlciBtYW5hZ2VyIHRoaXMgc2hhZGVyIHdvcmtzIGZvci5cbiAqL1xuZnVuY3Rpb24gUHJpbWl0aXZlU2hhZGVyKGdsKVxue1xuICAgIFNoYWRlci5jYWxsKHRoaXMsXG4gICAgICAgIGdsLFxuICAgICAgICAvLyB2ZXJ0ZXggc2hhZGVyXG4gICAgICAgIFtcbiAgICAgICAgICAgICdhdHRyaWJ1dGUgdmVjMiBhVmVydGV4UG9zaXRpb247JyxcbiAgICAgICAgICAgICdhdHRyaWJ1dGUgdmVjNCBhQ29sb3I7JyxcblxuICAgICAgICAgICAgJ3VuaWZvcm0gbWF0MyB0cmFuc2xhdGlvbk1hdHJpeDsnLFxuICAgICAgICAgICAgJ3VuaWZvcm0gbWF0MyBwcm9qZWN0aW9uTWF0cml4OycsXG5cbiAgICAgICAgICAgICd1bmlmb3JtIGZsb2F0IGFscGhhOycsXG4gICAgICAgICAgICAndW5pZm9ybSBmbG9hdCBmbGlwWTsnLFxuICAgICAgICAgICAgJ3VuaWZvcm0gdmVjMyB0aW50OycsXG5cbiAgICAgICAgICAgICd2YXJ5aW5nIHZlYzQgdkNvbG9yOycsXG5cbiAgICAgICAgICAgICd2b2lkIG1haW4odm9pZCl7JyxcbiAgICAgICAgICAgICcgICBnbF9Qb3NpdGlvbiA9IHZlYzQoKHByb2plY3Rpb25NYXRyaXggKiB0cmFuc2xhdGlvbk1hdHJpeCAqIHZlYzMoYVZlcnRleFBvc2l0aW9uLCAxLjApKS54eSwgMC4wLCAxLjApOycsXG4gICAgICAgICAgICAnICAgdkNvbG9yID0gYUNvbG9yICogdmVjNCh0aW50ICogYWxwaGEsIGFscGhhKTsnLFxuICAgICAgICAgICAgJ30nXG4gICAgICAgIF0uam9pbignXFxuJyksXG4gICAgICAgIC8vIGZyYWdtZW50IHNoYWRlclxuICAgICAgICBbXG4gICAgICAgICAgICAncHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7JyxcblxuICAgICAgICAgICAgJ3ZhcnlpbmcgdmVjNCB2Q29sb3I7JyxcblxuICAgICAgICAgICAgJ3ZvaWQgbWFpbih2b2lkKXsnLFxuICAgICAgICAgICAgJyAgIGdsX0ZyYWdDb2xvciA9IHZDb2xvcjsnLFxuICAgICAgICAgICAgJ30nXG4gICAgICAgIF0uam9pbignXFxuJylcbiAgICApO1xufVxuXG5QcmltaXRpdmVTaGFkZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShTaGFkZXIucHJvdG90eXBlKTtcblByaW1pdGl2ZVNoYWRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBQcmltaXRpdmVTaGFkZXI7XG5cbm1vZHVsZS5leHBvcnRzID0gUHJpbWl0aXZlU2hhZGVyO1xuIiwidmFyIGJ1aWxkTGluZSA9IHJlcXVpcmUoJy4vYnVpbGRMaW5lJyksXG4gICAgdXRpbHMgPSByZXF1aXJlKCcuLi8uLi8uLi91dGlscycpO1xuXG4vKipcbiAqIEJ1aWxkcyBhIGNpcmNsZSB0byBkcmF3XG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSBncmFwaGljc0RhdGEge1BJWEkuR3JhcGhpY3N9IFRoZSBncmFwaGljcyBvYmplY3QgdG8gZHJhd1xuICogQHBhcmFtIHdlYkdMRGF0YSB7b2JqZWN0fSBhbiBvYmplY3QgY29udGFpbmluZyBhbGwgdGhlIHdlYkdMLXNwZWNpZmljIGluZm9ybWF0aW9uIHRvIGNyZWF0ZSB0aGlzIHNoYXBlXG4gKi9cbnZhciBidWlsZENpcmNsZSA9IGZ1bmN0aW9uIChncmFwaGljc0RhdGEsIHdlYkdMRGF0YSlcbntcbiAgICAvLyBuZWVkIHRvIGNvbnZlcnQgcG9pbnRzIHRvIGEgbmljZSByZWd1bGFyIGRhdGFcbiAgICB2YXIgY2lyY2xlRGF0YSA9IGdyYXBoaWNzRGF0YS5zaGFwZTtcbiAgICB2YXIgeCA9IGNpcmNsZURhdGEueDtcbiAgICB2YXIgeSA9IGNpcmNsZURhdGEueTtcbiAgICB2YXIgd2lkdGg7XG4gICAgdmFyIGhlaWdodDtcblxuICAgIC8vIFRPRE8gLSBiaXQgaGFja3k/P1xuICAgIGlmIChncmFwaGljc0RhdGEudHlwZSA9PT0gQ09OU1QuU0hBUEVTLkNJUkMpXG4gICAge1xuICAgICAgICB3aWR0aCA9IGNpcmNsZURhdGEucmFkaXVzO1xuICAgICAgICBoZWlnaHQgPSBjaXJjbGVEYXRhLnJhZGl1cztcbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgd2lkdGggPSBjaXJjbGVEYXRhLndpZHRoO1xuICAgICAgICBoZWlnaHQgPSBjaXJjbGVEYXRhLmhlaWdodDtcbiAgICB9XG5cbiAgICB2YXIgdG90YWxTZWdzID0gTWF0aC5mbG9vcigzMCAqIE1hdGguc3FydChjaXJjbGVEYXRhLnJhZGl1cykpIHx8IE1hdGguZmxvb3IoMTUgKiBNYXRoLnNxcnQoY2lyY2xlRGF0YS53aWR0aCArIGNpcmNsZURhdGEuaGVpZ2h0KSk7XG4gICAgdmFyIHNlZyA9IChNYXRoLlBJICogMikgLyB0b3RhbFNlZ3MgO1xuXG4gICAgdmFyIGkgPSAwO1xuXG4gICAgaWYgKGdyYXBoaWNzRGF0YS5maWxsKVxuICAgIHtcbiAgICAgICAgdmFyIGNvbG9yID0gdXRpbHMuaGV4MnJnYihncmFwaGljc0RhdGEuZmlsbENvbG9yKTtcbiAgICAgICAgdmFyIGFscGhhID0gZ3JhcGhpY3NEYXRhLmZpbGxBbHBoYTtcblxuICAgICAgICB2YXIgciA9IGNvbG9yWzBdICogYWxwaGE7XG4gICAgICAgIHZhciBnID0gY29sb3JbMV0gKiBhbHBoYTtcbiAgICAgICAgdmFyIGIgPSBjb2xvclsyXSAqIGFscGhhO1xuXG4gICAgICAgIHZhciB2ZXJ0cyA9IHdlYkdMRGF0YS5wb2ludHM7XG4gICAgICAgIHZhciBpbmRpY2VzID0gd2ViR0xEYXRhLmluZGljZXM7XG5cbiAgICAgICAgdmFyIHZlY1BvcyA9IHZlcnRzLmxlbmd0aC82O1xuXG4gICAgICAgIGluZGljZXMucHVzaCh2ZWNQb3MpO1xuXG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCB0b3RhbFNlZ3MgKyAxIDsgaSsrKVxuICAgICAgICB7XG4gICAgICAgICAgICB2ZXJ0cy5wdXNoKHgseSwgciwgZywgYiwgYWxwaGEpO1xuXG4gICAgICAgICAgICB2ZXJ0cy5wdXNoKHggKyBNYXRoLnNpbihzZWcgKiBpKSAqIHdpZHRoLFxuICAgICAgICAgICAgICAgICAgICAgICB5ICsgTWF0aC5jb3Moc2VnICogaSkgKiBoZWlnaHQsXG4gICAgICAgICAgICAgICAgICAgICAgIHIsIGcsIGIsIGFscGhhKTtcblxuICAgICAgICAgICAgaW5kaWNlcy5wdXNoKHZlY1BvcysrLCB2ZWNQb3MrKyk7XG4gICAgICAgIH1cblxuICAgICAgICBpbmRpY2VzLnB1c2godmVjUG9zLTEpO1xuICAgIH1cblxuICAgIGlmIChncmFwaGljc0RhdGEubGluZVdpZHRoKVxuICAgIHtcbiAgICAgICAgdmFyIHRlbXBQb2ludHMgPSBncmFwaGljc0RhdGEucG9pbnRzO1xuXG4gICAgICAgIGdyYXBoaWNzRGF0YS5wb2ludHMgPSBbXTtcblxuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgdG90YWxTZWdzICsgMTsgaSsrKVxuICAgICAgICB7XG4gICAgICAgICAgICBncmFwaGljc0RhdGEucG9pbnRzLnB1c2goeCArIE1hdGguc2luKHNlZyAqIGkpICogd2lkdGgsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeSArIE1hdGguY29zKHNlZyAqIGkpICogaGVpZ2h0KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGJ1aWxkTGluZShncmFwaGljc0RhdGEsIHdlYkdMRGF0YSk7XG5cbiAgICAgICAgZ3JhcGhpY3NEYXRhLnBvaW50cyA9IHRlbXBQb2ludHM7XG4gICAgfVxufTtcblxuXG5tb2R1bGUuZXhwb3J0cyA9IGJ1aWxkQ2lyY2xlOyIsInZhciBidWlsZExpbmUgPSByZXF1aXJlKCcuL2J1aWxkTGluZScpLFxuICAgIHV0aWxzID0gcmVxdWlyZSgnLi4vLi4vLi4vdXRpbHMnKTtcbiAgICBcblxuXG4vKipcbiAqIEJ1aWxkcyBhIGNvbXBsZXggcG9seWdvbiB0byBkcmF3XG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSBncmFwaGljc0RhdGEge1BJWEkuR3JhcGhpY3N9IFRoZSBncmFwaGljcyBvYmplY3QgY29udGFpbmluZyBhbGwgdGhlIG5lY2Vzc2FyeSBwcm9wZXJ0aWVzXG4gKiBAcGFyYW0gd2ViR0xEYXRhIHtvYmplY3R9IGFuIG9iamVjdCBjb250YWluaW5nIGFsbCB0aGUgd2ViR0wtc3BlY2lmaWMgaW5mb3JtYXRpb24gdG8gY3JlYXRlIHRoaXMgc2hhcGVcbiAqL1xudmFyIGJ1aWxkQ29tcGxleFBvbHkgPSBmdW5jdGlvbiAoZ3JhcGhpY3NEYXRhLCB3ZWJHTERhdGEpXG57XG4gICAgLy9UT0RPIC0gbm8gbmVlZCB0byBjb3B5IHRoaXMgYXMgaXQgZ2V0cyB0dXJuZWQgaW50byBhIEZMb2F0MzJBcnJheSBhbnl3YXlzLi5cbiAgICB2YXIgcG9pbnRzID0gZ3JhcGhpY3NEYXRhLnBvaW50cy5zbGljZSgpO1xuXG4gICAgaWYgKHBvaW50cy5sZW5ndGggPCA2KVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIGdldCBmaXJzdCBhbmQgbGFzdCBwb2ludC4uIGZpZ3VyZSBvdXQgdGhlIG1pZGRsZSFcbiAgICB2YXIgaW5kaWNlcyA9IHdlYkdMRGF0YS5pbmRpY2VzO1xuICAgIHdlYkdMRGF0YS5wb2ludHMgPSBwb2ludHM7XG4gICAgd2ViR0xEYXRhLmFscGhhID0gZ3JhcGhpY3NEYXRhLmZpbGxBbHBoYTtcbiAgICB3ZWJHTERhdGEuY29sb3IgPSB1dGlscy5oZXgycmdiKGdyYXBoaWNzRGF0YS5maWxsQ29sb3IpO1xuXG4gICAgLy8gY2FsY2xhdGUgdGhlIGJvdW5kcy4uXG4gICAgdmFyIG1pblggPSBJbmZpbml0eTtcbiAgICB2YXIgbWF4WCA9IC1JbmZpbml0eTtcblxuICAgIHZhciBtaW5ZID0gSW5maW5pdHk7XG4gICAgdmFyIG1heFkgPSAtSW5maW5pdHk7XG5cbiAgICB2YXIgeCx5O1xuXG4gICAgLy8gZ2V0IHNpemUuLlxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcG9pbnRzLmxlbmd0aDsgaSs9MilcbiAgICB7XG4gICAgICAgIHggPSBwb2ludHNbaV07XG4gICAgICAgIHkgPSBwb2ludHNbaSsxXTtcblxuICAgICAgICBtaW5YID0geCA8IG1pblggPyB4IDogbWluWDtcbiAgICAgICAgbWF4WCA9IHggPiBtYXhYID8geCA6IG1heFg7XG5cbiAgICAgICAgbWluWSA9IHkgPCBtaW5ZID8geSA6IG1pblk7XG4gICAgICAgIG1heFkgPSB5ID4gbWF4WSA/IHkgOiBtYXhZO1xuICAgIH1cblxuICAgIC8vIGFkZCBhIHF1YWQgdG8gdGhlIGVuZCBjb3MgdGhlcmUgaXMgbm8gcG9pbnQgbWFraW5nIGFub3RoZXIgYnVmZmVyIVxuICAgIHBvaW50cy5wdXNoKG1pblgsIG1pblksXG4gICAgICAgICAgICAgICAgbWF4WCwgbWluWSxcbiAgICAgICAgICAgICAgICBtYXhYLCBtYXhZLFxuICAgICAgICAgICAgICAgIG1pblgsIG1heFkpO1xuXG4gICAgLy8gcHVzaCBhIHF1YWQgb250byB0aGUgZW5kLi5cblxuICAgIC8vVE9ETyAtIHRoaXMgYWludCBuZWVkZWQhXG4gICAgdmFyIGxlbmd0aCA9IHBvaW50cy5sZW5ndGggLyAyO1xuICAgIGZvciAoaSA9IDA7IGkgPCBsZW5ndGg7IGkrKylcbiAgICB7XG4gICAgICAgIGluZGljZXMucHVzaCggaSApO1xuICAgIH1cblxufTtcblxuXG5cbm1vZHVsZS5leHBvcnRzID0gYnVpbGRDb21wbGV4UG9seTsiLCJ2YXIgbWF0aCA9IHJlcXVpcmUoJy4uLy4uLy4uL21hdGgnKSxcbiAgICB1dGlscyA9IHJlcXVpcmUoJy4uLy4uLy4uL3V0aWxzJyk7XG5cbi8qKlxuICogQnVpbGRzIGEgbGluZSB0byBkcmF3XG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSBncmFwaGljc0RhdGEge1BJWEkuR3JhcGhpY3N9IFRoZSBncmFwaGljcyBvYmplY3QgY29udGFpbmluZyBhbGwgdGhlIG5lY2Vzc2FyeSBwcm9wZXJ0aWVzXG4gKiBAcGFyYW0gd2ViR0xEYXRhIHtvYmplY3R9IGFuIG9iamVjdCBjb250YWluaW5nIGFsbCB0aGUgd2ViR0wtc3BlY2lmaWMgaW5mb3JtYXRpb24gdG8gY3JlYXRlIHRoaXMgc2hhcGVcbiAqL1xudmFyIGJ1aWxkTGluZSA9IGZ1bmN0aW9uIChncmFwaGljc0RhdGEsIHdlYkdMRGF0YSlcbntcbiAgICAvLyBUT0RPIE9QVElNSVNFIVxuICAgIHZhciBpID0gMDtcbiAgICB2YXIgcG9pbnRzID0gZ3JhcGhpY3NEYXRhLnBvaW50cztcblxuICAgIGlmIChwb2ludHMubGVuZ3RoID09PSAwKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICAvLyBpZiB0aGUgbGluZSB3aWR0aCBpcyBhbiBvZGQgbnVtYmVyIGFkZCAwLjUgdG8gYWxpZ24gdG8gYSB3aG9sZSBwaXhlbFxuICAgIC8vIGNvbW1lbnRpbmcgdGhpcyBvdXQgZml4ZXMgIzcxMSBhbmQgIzE2MjBcbiAgICAvLyBpZiAoZ3JhcGhpY3NEYXRhLmxpbmVXaWR0aCUyKVxuICAgIC8vIHtcbiAgICAvLyAgICAgZm9yIChpID0gMDsgaSA8IHBvaW50cy5sZW5ndGg7IGkrKylcbiAgICAvLyAgICAge1xuICAgIC8vICAgICAgICAgcG9pbnRzW2ldICs9IDAuNTtcbiAgICAvLyAgICAgfVxuICAgIC8vIH1cblxuICAgIC8vIGdldCBmaXJzdCBhbmQgbGFzdCBwb2ludC4uIGZpZ3VyZSBvdXQgdGhlIG1pZGRsZSFcbiAgICB2YXIgZmlyc3RQb2ludCA9IG5ldyBtYXRoLlBvaW50KHBvaW50c1swXSwgcG9pbnRzWzFdKTtcbiAgICB2YXIgbGFzdFBvaW50ID0gbmV3IG1hdGguUG9pbnQocG9pbnRzW3BvaW50cy5sZW5ndGggLSAyXSwgcG9pbnRzW3BvaW50cy5sZW5ndGggLSAxXSk7XG5cbiAgICAvLyBpZiB0aGUgZmlyc3QgcG9pbnQgaXMgdGhlIGxhc3QgcG9pbnQgLSBnb25uYSBoYXZlIGlzc3VlcyA6KVxuICAgIGlmIChmaXJzdFBvaW50LnggPT09IGxhc3RQb2ludC54ICYmIGZpcnN0UG9pbnQueSA9PT0gbGFzdFBvaW50LnkpXG4gICAge1xuICAgICAgICAvLyBuZWVkIHRvIGNsb25lIGFzIHdlIGFyZSBnb2luZyB0byBzbGlnaHRseSBtb2RpZnkgdGhlIHNoYXBlLi5cbiAgICAgICAgcG9pbnRzID0gcG9pbnRzLnNsaWNlKCk7XG5cbiAgICAgICAgcG9pbnRzLnBvcCgpO1xuICAgICAgICBwb2ludHMucG9wKCk7XG5cbiAgICAgICAgbGFzdFBvaW50ID0gbmV3IG1hdGguUG9pbnQocG9pbnRzW3BvaW50cy5sZW5ndGggLSAyXSwgcG9pbnRzW3BvaW50cy5sZW5ndGggLSAxXSk7XG5cbiAgICAgICAgdmFyIG1pZFBvaW50WCA9IGxhc3RQb2ludC54ICsgKGZpcnN0UG9pbnQueCAtIGxhc3RQb2ludC54KSAqMC41O1xuICAgICAgICB2YXIgbWlkUG9pbnRZID0gbGFzdFBvaW50LnkgKyAoZmlyc3RQb2ludC55IC0gbGFzdFBvaW50LnkpICowLjU7XG5cbiAgICAgICAgcG9pbnRzLnVuc2hpZnQobWlkUG9pbnRYLCBtaWRQb2ludFkpO1xuICAgICAgICBwb2ludHMucHVzaChtaWRQb2ludFgsIG1pZFBvaW50WSk7XG4gICAgfVxuXG4gICAgdmFyIHZlcnRzID0gd2ViR0xEYXRhLnBvaW50cztcbiAgICB2YXIgaW5kaWNlcyA9IHdlYkdMRGF0YS5pbmRpY2VzO1xuICAgIHZhciBsZW5ndGggPSBwb2ludHMubGVuZ3RoIC8gMjtcbiAgICB2YXIgaW5kZXhDb3VudCA9IHBvaW50cy5sZW5ndGg7XG4gICAgdmFyIGluZGV4U3RhcnQgPSB2ZXJ0cy5sZW5ndGgvNjtcblxuICAgIC8vIERSQVcgdGhlIExpbmVcbiAgICB2YXIgd2lkdGggPSBncmFwaGljc0RhdGEubGluZVdpZHRoIC8gMjtcblxuICAgIC8vIHNvcnQgY29sb3JcbiAgICB2YXIgY29sb3IgPSB1dGlscy5oZXgycmdiKGdyYXBoaWNzRGF0YS5saW5lQ29sb3IpO1xuICAgIHZhciBhbHBoYSA9IGdyYXBoaWNzRGF0YS5saW5lQWxwaGE7XG4gICAgdmFyIHIgPSBjb2xvclswXSAqIGFscGhhO1xuICAgIHZhciBnID0gY29sb3JbMV0gKiBhbHBoYTtcbiAgICB2YXIgYiA9IGNvbG9yWzJdICogYWxwaGE7XG5cbiAgICB2YXIgcHgsIHB5LCBwMXgsIHAxeSwgcDJ4LCBwMnksIHAzeCwgcDN5O1xuICAgIHZhciBwZXJweCwgcGVycHksIHBlcnAyeCwgcGVycDJ5LCBwZXJwM3gsIHBlcnAzeTtcbiAgICB2YXIgYTEsIGIxLCBjMSwgYTIsIGIyLCBjMjtcbiAgICB2YXIgZGVub20sIHBkaXN0LCBkaXN0O1xuXG4gICAgcDF4ID0gcG9pbnRzWzBdO1xuICAgIHAxeSA9IHBvaW50c1sxXTtcblxuICAgIHAyeCA9IHBvaW50c1syXTtcbiAgICBwMnkgPSBwb2ludHNbM107XG5cbiAgICBwZXJweCA9IC0ocDF5IC0gcDJ5KTtcbiAgICBwZXJweSA9ICBwMXggLSBwMng7XG5cbiAgICBkaXN0ID0gTWF0aC5zcXJ0KHBlcnB4KnBlcnB4ICsgcGVycHkqcGVycHkpO1xuXG4gICAgcGVycHggLz0gZGlzdDtcbiAgICBwZXJweSAvPSBkaXN0O1xuICAgIHBlcnB4ICo9IHdpZHRoO1xuICAgIHBlcnB5ICo9IHdpZHRoO1xuXG4gICAgLy8gc3RhcnRcbiAgICB2ZXJ0cy5wdXNoKHAxeCAtIHBlcnB4ICwgcDF5IC0gcGVycHksXG4gICAgICAgICAgICAgICAgciwgZywgYiwgYWxwaGEpO1xuXG4gICAgdmVydHMucHVzaChwMXggKyBwZXJweCAsIHAxeSArIHBlcnB5LFxuICAgICAgICAgICAgICAgIHIsIGcsIGIsIGFscGhhKTtcblxuICAgIGZvciAoaSA9IDE7IGkgPCBsZW5ndGgtMTsgaSsrKVxuICAgIHtcbiAgICAgICAgcDF4ID0gcG9pbnRzWyhpLTEpKjJdO1xuICAgICAgICBwMXkgPSBwb2ludHNbKGktMSkqMiArIDFdO1xuXG4gICAgICAgIHAyeCA9IHBvaW50c1soaSkqMl07XG4gICAgICAgIHAyeSA9IHBvaW50c1soaSkqMiArIDFdO1xuXG4gICAgICAgIHAzeCA9IHBvaW50c1soaSsxKSoyXTtcbiAgICAgICAgcDN5ID0gcG9pbnRzWyhpKzEpKjIgKyAxXTtcblxuICAgICAgICBwZXJweCA9IC0ocDF5IC0gcDJ5KTtcbiAgICAgICAgcGVycHkgPSBwMXggLSBwMng7XG5cbiAgICAgICAgZGlzdCA9IE1hdGguc3FydChwZXJweCpwZXJweCArIHBlcnB5KnBlcnB5KTtcbiAgICAgICAgcGVycHggLz0gZGlzdDtcbiAgICAgICAgcGVycHkgLz0gZGlzdDtcbiAgICAgICAgcGVycHggKj0gd2lkdGg7XG4gICAgICAgIHBlcnB5ICo9IHdpZHRoO1xuXG4gICAgICAgIHBlcnAyeCA9IC0ocDJ5IC0gcDN5KTtcbiAgICAgICAgcGVycDJ5ID0gcDJ4IC0gcDN4O1xuXG4gICAgICAgIGRpc3QgPSBNYXRoLnNxcnQocGVycDJ4KnBlcnAyeCArIHBlcnAyeSpwZXJwMnkpO1xuICAgICAgICBwZXJwMnggLz0gZGlzdDtcbiAgICAgICAgcGVycDJ5IC89IGRpc3Q7XG4gICAgICAgIHBlcnAyeCAqPSB3aWR0aDtcbiAgICAgICAgcGVycDJ5ICo9IHdpZHRoO1xuXG4gICAgICAgIGExID0gKC1wZXJweSArIHAxeSkgLSAoLXBlcnB5ICsgcDJ5KTtcbiAgICAgICAgYjEgPSAoLXBlcnB4ICsgcDJ4KSAtICgtcGVycHggKyBwMXgpO1xuICAgICAgICBjMSA9ICgtcGVycHggKyBwMXgpICogKC1wZXJweSArIHAyeSkgLSAoLXBlcnB4ICsgcDJ4KSAqICgtcGVycHkgKyBwMXkpO1xuICAgICAgICBhMiA9ICgtcGVycDJ5ICsgcDN5KSAtICgtcGVycDJ5ICsgcDJ5KTtcbiAgICAgICAgYjIgPSAoLXBlcnAyeCArIHAyeCkgLSAoLXBlcnAyeCArIHAzeCk7XG4gICAgICAgIGMyID0gKC1wZXJwMnggKyBwM3gpICogKC1wZXJwMnkgKyBwMnkpIC0gKC1wZXJwMnggKyBwMngpICogKC1wZXJwMnkgKyBwM3kpO1xuXG4gICAgICAgIGRlbm9tID0gYTEqYjIgLSBhMipiMTtcblxuICAgICAgICBpZiAoTWF0aC5hYnMoZGVub20pIDwgMC4xIClcbiAgICAgICAge1xuXG4gICAgICAgICAgICBkZW5vbSs9MTAuMTtcbiAgICAgICAgICAgIHZlcnRzLnB1c2gocDJ4IC0gcGVycHggLCBwMnkgLSBwZXJweSxcbiAgICAgICAgICAgICAgICByLCBnLCBiLCBhbHBoYSk7XG5cbiAgICAgICAgICAgIHZlcnRzLnB1c2gocDJ4ICsgcGVycHggLCBwMnkgKyBwZXJweSxcbiAgICAgICAgICAgICAgICByLCBnLCBiLCBhbHBoYSk7XG5cbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgcHggPSAoYjEqYzIgLSBiMipjMSkvZGVub207XG4gICAgICAgIHB5ID0gKGEyKmMxIC0gYTEqYzIpL2Rlbm9tO1xuXG5cbiAgICAgICAgcGRpc3QgPSAocHggLXAyeCkgKiAocHggLXAyeCkgKyAocHkgLXAyeSkgKiAocHkgLXAyeSk7XG5cblxuICAgICAgICBpZiAocGRpc3QgPiAxNDAgKiAxNDApXG4gICAgICAgIHtcbiAgICAgICAgICAgIHBlcnAzeCA9IHBlcnB4IC0gcGVycDJ4O1xuICAgICAgICAgICAgcGVycDN5ID0gcGVycHkgLSBwZXJwMnk7XG5cbiAgICAgICAgICAgIGRpc3QgPSBNYXRoLnNxcnQocGVycDN4KnBlcnAzeCArIHBlcnAzeSpwZXJwM3kpO1xuICAgICAgICAgICAgcGVycDN4IC89IGRpc3Q7XG4gICAgICAgICAgICBwZXJwM3kgLz0gZGlzdDtcbiAgICAgICAgICAgIHBlcnAzeCAqPSB3aWR0aDtcbiAgICAgICAgICAgIHBlcnAzeSAqPSB3aWR0aDtcblxuICAgICAgICAgICAgdmVydHMucHVzaChwMnggLSBwZXJwM3gsIHAyeSAtcGVycDN5KTtcbiAgICAgICAgICAgIHZlcnRzLnB1c2gociwgZywgYiwgYWxwaGEpO1xuXG4gICAgICAgICAgICB2ZXJ0cy5wdXNoKHAyeCArIHBlcnAzeCwgcDJ5ICtwZXJwM3kpO1xuICAgICAgICAgICAgdmVydHMucHVzaChyLCBnLCBiLCBhbHBoYSk7XG5cbiAgICAgICAgICAgIHZlcnRzLnB1c2gocDJ4IC0gcGVycDN4LCBwMnkgLXBlcnAzeSk7XG4gICAgICAgICAgICB2ZXJ0cy5wdXNoKHIsIGcsIGIsIGFscGhhKTtcblxuICAgICAgICAgICAgaW5kZXhDb3VudCsrO1xuICAgICAgICB9XG4gICAgICAgIGVsc2VcbiAgICAgICAge1xuXG4gICAgICAgICAgICB2ZXJ0cy5wdXNoKHB4ICwgcHkpO1xuICAgICAgICAgICAgdmVydHMucHVzaChyLCBnLCBiLCBhbHBoYSk7XG5cbiAgICAgICAgICAgIHZlcnRzLnB1c2gocDJ4IC0gKHB4LXAyeCksIHAyeSAtIChweSAtIHAyeSkpO1xuICAgICAgICAgICAgdmVydHMucHVzaChyLCBnLCBiLCBhbHBoYSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwMXggPSBwb2ludHNbKGxlbmd0aC0yKSoyXTtcbiAgICBwMXkgPSBwb2ludHNbKGxlbmd0aC0yKSoyICsgMV07XG5cbiAgICBwMnggPSBwb2ludHNbKGxlbmd0aC0xKSoyXTtcbiAgICBwMnkgPSBwb2ludHNbKGxlbmd0aC0xKSoyICsgMV07XG5cbiAgICBwZXJweCA9IC0ocDF5IC0gcDJ5KTtcbiAgICBwZXJweSA9IHAxeCAtIHAyeDtcblxuICAgIGRpc3QgPSBNYXRoLnNxcnQocGVycHgqcGVycHggKyBwZXJweSpwZXJweSk7XG4gICAgcGVycHggLz0gZGlzdDtcbiAgICBwZXJweSAvPSBkaXN0O1xuICAgIHBlcnB4ICo9IHdpZHRoO1xuICAgIHBlcnB5ICo9IHdpZHRoO1xuXG4gICAgdmVydHMucHVzaChwMnggLSBwZXJweCAsIHAyeSAtIHBlcnB5KTtcbiAgICB2ZXJ0cy5wdXNoKHIsIGcsIGIsIGFscGhhKTtcblxuICAgIHZlcnRzLnB1c2gocDJ4ICsgcGVycHggLCBwMnkgKyBwZXJweSk7XG4gICAgdmVydHMucHVzaChyLCBnLCBiLCBhbHBoYSk7XG5cbiAgICBpbmRpY2VzLnB1c2goaW5kZXhTdGFydCk7XG5cbiAgICBmb3IgKGkgPSAwOyBpIDwgaW5kZXhDb3VudDsgaSsrKVxuICAgIHtcbiAgICAgICAgaW5kaWNlcy5wdXNoKGluZGV4U3RhcnQrKyk7XG4gICAgfVxuXG4gICAgaW5kaWNlcy5wdXNoKGluZGV4U3RhcnQtMSk7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGJ1aWxkTGluZTsiLCJ2YXIgdXRpbHMgPSByZXF1aXJlKCcuLi8uLi8uLi91dGlscycpO1xuXG4vKipcbiAqIEJ1aWxkcyBhIHBvbHlnb24gdG8gZHJhd1xuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0gZ3JhcGhpY3NEYXRhIHtQSVhJLldlYkdMR3JhcGhpY3NEYXRhfSBUaGUgZ3JhcGhpY3Mgb2JqZWN0IGNvbnRhaW5pbmcgYWxsIHRoZSBuZWNlc3NhcnkgcHJvcGVydGllc1xuICogQHBhcmFtIHdlYkdMRGF0YSB7b2JqZWN0fSBhbiBvYmplY3QgY29udGFpbmluZyBhbGwgdGhlIHdlYkdMLXNwZWNpZmljIGluZm9ybWF0aW9uIHRvIGNyZWF0ZSB0aGlzIHNoYXBlXG4gKi9cbnZhciBidWlsZFBvbHkgPSBmdW5jdGlvbiAoZ3JhcGhpY3NEYXRhLCB3ZWJHTERhdGEpXG57XG4gICAgdmFyIHBvaW50cyA9IGdyYXBoaWNzRGF0YS5wb2ludHM7XG5cbiAgICBpZiAocG9pbnRzLmxlbmd0aCA8IDYpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gZ2V0IGZpcnN0IGFuZCBsYXN0IHBvaW50Li4gZmlndXJlIG91dCB0aGUgbWlkZGxlIVxuICAgIHZhciB2ZXJ0cyA9IHdlYkdMRGF0YS5wb2ludHM7XG4gICAgdmFyIGluZGljZXMgPSB3ZWJHTERhdGEuaW5kaWNlcztcblxuICAgIHZhciBsZW5ndGggPSBwb2ludHMubGVuZ3RoIC8gMjtcblxuICAgIC8vIHNvcnQgY29sb3JcbiAgICB2YXIgY29sb3IgPSB1dGlscy5oZXgycmdiKGdyYXBoaWNzRGF0YS5maWxsQ29sb3IpO1xuICAgIHZhciBhbHBoYSA9IGdyYXBoaWNzRGF0YS5maWxsQWxwaGE7XG4gICAgdmFyIHIgPSBjb2xvclswXSAqIGFscGhhO1xuICAgIHZhciBnID0gY29sb3JbMV0gKiBhbHBoYTtcbiAgICB2YXIgYiA9IGNvbG9yWzJdICogYWxwaGE7XG5cbiAgICB2YXIgdHJpYW5nbGVzID0gZWFyY3V0KHBvaW50cywgbnVsbCwgMik7XG5cbiAgICBpZiAoIXRyaWFuZ2xlcykge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgdmFyIHZlcnRQb3MgPSB2ZXJ0cy5sZW5ndGggLyA2O1xuXG4gICAgdmFyIGkgPSAwO1xuXG4gICAgZm9yIChpID0gMDsgaSA8IHRyaWFuZ2xlcy5sZW5ndGg7IGkrPTMpXG4gICAge1xuICAgICAgICBpbmRpY2VzLnB1c2godHJpYW5nbGVzW2ldICsgdmVydFBvcyk7XG4gICAgICAgIGluZGljZXMucHVzaCh0cmlhbmdsZXNbaV0gKyB2ZXJ0UG9zKTtcbiAgICAgICAgaW5kaWNlcy5wdXNoKHRyaWFuZ2xlc1tpKzFdICsgdmVydFBvcyk7XG4gICAgICAgIGluZGljZXMucHVzaCh0cmlhbmdsZXNbaSsyXSArdmVydFBvcyk7XG4gICAgICAgIGluZGljZXMucHVzaCh0cmlhbmdsZXNbaSsyXSArIHZlcnRQb3MpO1xuICAgIH1cblxuICAgIGZvciAoaSA9IDA7IGkgPCBsZW5ndGg7IGkrKylcbiAgICB7XG4gICAgICAgIHZlcnRzLnB1c2gocG9pbnRzW2kgKiAyXSwgcG9pbnRzW2kgKiAyICsgMV0sXG4gICAgICAgICAgICAgICAgICAgciwgZywgYiwgYWxwaGEpO1xuICAgIH1cblxuICAgIHJldHVybiB0cnVlO1xufTtcblxuXG5tb2R1bGUuZXhwb3J0cyA9IGJ1aWxkUG9seTtcbiIsInZhciBidWlsZExpbmUgPSByZXF1aXJlKCcuL2J1aWxkTGluZScpLFxuICAgIHV0aWxzID0gcmVxdWlyZSgnLi4vLi4vLi4vdXRpbHMnKTtcblxuLyoqXG4gKiBCdWlsZHMgYSByZWN0YW5nbGUgdG8gZHJhd1xuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0gZ3JhcGhpY3NEYXRhIHtQSVhJLkdyYXBoaWNzfSBUaGUgZ3JhcGhpY3Mgb2JqZWN0IGNvbnRhaW5pbmcgYWxsIHRoZSBuZWNlc3NhcnkgcHJvcGVydGllc1xuICogQHBhcmFtIHdlYkdMRGF0YSB7b2JqZWN0fSBhbiBvYmplY3QgY29udGFpbmluZyBhbGwgdGhlIHdlYkdMLXNwZWNpZmljIGluZm9ybWF0aW9uIHRvIGNyZWF0ZSB0aGlzIHNoYXBlXG4gKi9cbnZhciBidWlsZFJlY3RhbmdsZSA9IGZ1bmN0aW9uIChncmFwaGljc0RhdGEsIHdlYkdMRGF0YSlcbntcbiAgICAvLyAtLS0gLy9cbiAgICAvLyBuZWVkIHRvIGNvbnZlcnQgcG9pbnRzIHRvIGEgbmljZSByZWd1bGFyIGRhdGFcbiAgICAvL1xuICAgIHZhciByZWN0RGF0YSA9IGdyYXBoaWNzRGF0YS5zaGFwZTtcbiAgICB2YXIgeCA9IHJlY3REYXRhLng7XG4gICAgdmFyIHkgPSByZWN0RGF0YS55O1xuICAgIHZhciB3aWR0aCA9IHJlY3REYXRhLndpZHRoO1xuICAgIHZhciBoZWlnaHQgPSByZWN0RGF0YS5oZWlnaHQ7XG5cbiAgICBpZiAoZ3JhcGhpY3NEYXRhLmZpbGwpXG4gICAge1xuICAgICAgICB2YXIgY29sb3IgPSB1dGlscy5oZXgycmdiKGdyYXBoaWNzRGF0YS5maWxsQ29sb3IpO1xuICAgICAgICB2YXIgYWxwaGEgPSBncmFwaGljc0RhdGEuZmlsbEFscGhhO1xuXG4gICAgICAgIHZhciByID0gY29sb3JbMF0gKiBhbHBoYTtcbiAgICAgICAgdmFyIGcgPSBjb2xvclsxXSAqIGFscGhhO1xuICAgICAgICB2YXIgYiA9IGNvbG9yWzJdICogYWxwaGE7XG5cbiAgICAgICAgdmFyIHZlcnRzID0gd2ViR0xEYXRhLnBvaW50cztcbiAgICAgICAgdmFyIGluZGljZXMgPSB3ZWJHTERhdGEuaW5kaWNlcztcblxuICAgICAgICB2YXIgdmVydFBvcyA9IHZlcnRzLmxlbmd0aC82O1xuXG4gICAgICAgIC8vIHN0YXJ0XG4gICAgICAgIHZlcnRzLnB1c2goeCwgeSk7XG4gICAgICAgIHZlcnRzLnB1c2gociwgZywgYiwgYWxwaGEpO1xuXG4gICAgICAgIHZlcnRzLnB1c2goeCArIHdpZHRoLCB5KTtcbiAgICAgICAgdmVydHMucHVzaChyLCBnLCBiLCBhbHBoYSk7XG5cbiAgICAgICAgdmVydHMucHVzaCh4ICwgeSArIGhlaWdodCk7XG4gICAgICAgIHZlcnRzLnB1c2gociwgZywgYiwgYWxwaGEpO1xuXG4gICAgICAgIHZlcnRzLnB1c2goeCArIHdpZHRoLCB5ICsgaGVpZ2h0KTtcbiAgICAgICAgdmVydHMucHVzaChyLCBnLCBiLCBhbHBoYSk7XG5cbiAgICAgICAgLy8gaW5zZXJ0IDIgZGVhZCB0cmlhbmdsZXMuLlxuICAgICAgICBpbmRpY2VzLnB1c2godmVydFBvcywgdmVydFBvcywgdmVydFBvcysxLCB2ZXJ0UG9zKzIsIHZlcnRQb3MrMywgdmVydFBvcyszKTtcbiAgICB9XG5cbiAgICBpZiAoZ3JhcGhpY3NEYXRhLmxpbmVXaWR0aClcbiAgICB7XG4gICAgICAgIHZhciB0ZW1wUG9pbnRzID0gZ3JhcGhpY3NEYXRhLnBvaW50cztcblxuICAgICAgICBncmFwaGljc0RhdGEucG9pbnRzID0gW3gsIHksXG4gICAgICAgICAgICAgICAgICB4ICsgd2lkdGgsIHksXG4gICAgICAgICAgICAgICAgICB4ICsgd2lkdGgsIHkgKyBoZWlnaHQsXG4gICAgICAgICAgICAgICAgICB4LCB5ICsgaGVpZ2h0LFxuICAgICAgICAgICAgICAgICAgeCwgeV07XG5cblxuICAgICAgICBidWlsZExpbmUoZ3JhcGhpY3NEYXRhLCB3ZWJHTERhdGEpO1xuXG4gICAgICAgIGdyYXBoaWNzRGF0YS5wb2ludHMgPSB0ZW1wUG9pbnRzO1xuICAgIH1cbn07XG5cbm1vZHVsZS5leHBvcnRzID0gYnVpbGRSZWN0YW5nbGU7IiwidmFyIGJ1aWxkTGluZSA9IHJlcXVpcmUoJy4vYnVpbGRMaW5lJyksXG4gICAgdXRpbHMgPSByZXF1aXJlKCcuLi8uLi8uLi91dGlscycpO1xuICAgIFxuLyoqXG4gKiBCdWlsZHMgYSByb3VuZGVkIHJlY3RhbmdsZSB0byBkcmF3XG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSBncmFwaGljc0RhdGEge1BJWEkuR3JhcGhpY3N9IFRoZSBncmFwaGljcyBvYmplY3QgY29udGFpbmluZyBhbGwgdGhlIG5lY2Vzc2FyeSBwcm9wZXJ0aWVzXG4gKiBAcGFyYW0gd2ViR0xEYXRhIHtvYmplY3R9IGFuIG9iamVjdCBjb250YWluaW5nIGFsbCB0aGUgd2ViR0wtc3BlY2lmaWMgaW5mb3JtYXRpb24gdG8gY3JlYXRlIHRoaXMgc2hhcGVcbiAqL1xuYnVpbGRSb3VuZGVkUmVjdGFuZ2xlID0gZnVuY3Rpb24gKGdyYXBoaWNzRGF0YSwgd2ViR0xEYXRhKVxue1xuICAgIHZhciBycmVjdERhdGEgPSBncmFwaGljc0RhdGEuc2hhcGU7XG4gICAgdmFyIHggPSBycmVjdERhdGEueDtcbiAgICB2YXIgeSA9IHJyZWN0RGF0YS55O1xuICAgIHZhciB3aWR0aCA9IHJyZWN0RGF0YS53aWR0aDtcbiAgICB2YXIgaGVpZ2h0ID0gcnJlY3REYXRhLmhlaWdodDtcblxuICAgIHZhciByYWRpdXMgPSBycmVjdERhdGEucmFkaXVzO1xuXG4gICAgdmFyIHJlY1BvaW50cyA9IFtdO1xuICAgIHJlY1BvaW50cy5wdXNoKHgsIHkgKyByYWRpdXMpO1xuICAgIHRoaXMucXVhZHJhdGljQmV6aWVyQ3VydmUoeCwgeSArIGhlaWdodCAtIHJhZGl1cywgeCwgeSArIGhlaWdodCwgeCArIHJhZGl1cywgeSArIGhlaWdodCwgcmVjUG9pbnRzKTtcbiAgICB0aGlzLnF1YWRyYXRpY0JlemllckN1cnZlKHggKyB3aWR0aCAtIHJhZGl1cywgeSArIGhlaWdodCwgeCArIHdpZHRoLCB5ICsgaGVpZ2h0LCB4ICsgd2lkdGgsIHkgKyBoZWlnaHQgLSByYWRpdXMsIHJlY1BvaW50cyk7XG4gICAgdGhpcy5xdWFkcmF0aWNCZXppZXJDdXJ2ZSh4ICsgd2lkdGgsIHkgKyByYWRpdXMsIHggKyB3aWR0aCwgeSwgeCArIHdpZHRoIC0gcmFkaXVzLCB5LCByZWNQb2ludHMpO1xuICAgIHRoaXMucXVhZHJhdGljQmV6aWVyQ3VydmUoeCArIHJhZGl1cywgeSwgeCwgeSwgeCwgeSArIHJhZGl1cyArIDAuMDAwMDAwMDAwMSwgcmVjUG9pbnRzKTtcblxuICAgIC8vIHRoaXMgdGlueSBudW1iZXIgZGVhbHMgd2l0aCB0aGUgaXNzdWUgdGhhdCBvY2N1cnMgd2hlbiBwb2ludHMgb3ZlcmxhcCBhbmQgZWFyY3V0IGZhaWxzIHRvIHRyaWFuZ3VsYXRlIHRoZSBpdGVtLlxuICAgIC8vIFRPRE8gLSBmaXggdGhpcyBwcm9wZXJseSwgdGhpcyBpcyBub3QgdmVyeSBlbGVnYW50Li4gYnV0IGl0IHdvcmtzIGZvciBub3cuXG5cbiAgICBpZiAoZ3JhcGhpY3NEYXRhLmZpbGwpXG4gICAge1xuICAgICAgICB2YXIgY29sb3IgPSB1dGlscy5oZXgycmdiKGdyYXBoaWNzRGF0YS5maWxsQ29sb3IpO1xuICAgICAgICB2YXIgYWxwaGEgPSBncmFwaGljc0RhdGEuZmlsbEFscGhhO1xuXG4gICAgICAgIHZhciByID0gY29sb3JbMF0gKiBhbHBoYTtcbiAgICAgICAgdmFyIGcgPSBjb2xvclsxXSAqIGFscGhhO1xuICAgICAgICB2YXIgYiA9IGNvbG9yWzJdICogYWxwaGE7XG5cbiAgICAgICAgdmFyIHZlcnRzID0gd2ViR0xEYXRhLnBvaW50cztcbiAgICAgICAgdmFyIGluZGljZXMgPSB3ZWJHTERhdGEuaW5kaWNlcztcblxuICAgICAgICB2YXIgdmVjUG9zID0gdmVydHMubGVuZ3RoLzY7XG5cbiAgICAgICAgdmFyIHRyaWFuZ2xlcyA9IGVhcmN1dChyZWNQb2ludHMsIG51bGwsIDIpO1xuXG4gICAgICAgIHZhciBpID0gMDtcbiAgICAgICAgZm9yIChpID0gMDsgaSA8IHRyaWFuZ2xlcy5sZW5ndGg7IGkrPTMpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGluZGljZXMucHVzaCh0cmlhbmdsZXNbaV0gKyB2ZWNQb3MpO1xuICAgICAgICAgICAgaW5kaWNlcy5wdXNoKHRyaWFuZ2xlc1tpXSArIHZlY1Bvcyk7XG4gICAgICAgICAgICBpbmRpY2VzLnB1c2godHJpYW5nbGVzW2krMV0gKyB2ZWNQb3MpO1xuICAgICAgICAgICAgaW5kaWNlcy5wdXNoKHRyaWFuZ2xlc1tpKzJdICsgdmVjUG9zKTtcbiAgICAgICAgICAgIGluZGljZXMucHVzaCh0cmlhbmdsZXNbaSsyXSArIHZlY1Bvcyk7XG4gICAgICAgIH1cblxuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgcmVjUG9pbnRzLmxlbmd0aDsgaSsrKVxuICAgICAgICB7XG4gICAgICAgICAgICB2ZXJ0cy5wdXNoKHJlY1BvaW50c1tpXSwgcmVjUG9pbnRzWysraV0sIHIsIGcsIGIsIGFscGhhKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGlmIChncmFwaGljc0RhdGEubGluZVdpZHRoKVxuICAgIHtcbiAgICAgICAgdmFyIHRlbXBQb2ludHMgPSBncmFwaGljc0RhdGEucG9pbnRzO1xuXG4gICAgICAgIGdyYXBoaWNzRGF0YS5wb2ludHMgPSByZWNQb2ludHM7XG5cbiAgICAgICAgdGhpcy5idWlsZExpbmUoZ3JhcGhpY3NEYXRhLCB3ZWJHTERhdGEpO1xuXG4gICAgICAgIGdyYXBoaWNzRGF0YS5wb2ludHMgPSB0ZW1wUG9pbnRzO1xuICAgIH1cbn07XG5cbi8qKlxuICogQ2FsY3VsYXRlIHRoZSBwb2ludHMgZm9yIGEgcXVhZHJhdGljIGJlemllciBjdXJ2ZS4gKGhlbHBlciBmdW5jdGlvbi4uKVxuICogQmFzZWQgb246IGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vcXVlc3Rpb25zLzc4NTA5Ny9ob3ctZG8taS1pbXBsZW1lbnQtYS1iZXppZXItY3VydmUtaW4tY1xuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0gZnJvbVgge251bWJlcn0gT3JpZ2luIHBvaW50IHhcbiAqIEBwYXJhbSBmcm9tWSB7bnVtYmVyfSBPcmlnaW4gcG9pbnQgeFxuICogQHBhcmFtIGNwWCB7bnVtYmVyfSBDb250cm9sIHBvaW50IHhcbiAqIEBwYXJhbSBjcFkge251bWJlcn0gQ29udHJvbCBwb2ludCB5XG4gKiBAcGFyYW0gdG9YIHtudW1iZXJ9IERlc3RpbmF0aW9uIHBvaW50IHhcbiAqIEBwYXJhbSB0b1kge251bWJlcn0gRGVzdGluYXRpb24gcG9pbnQgeVxuICogQHBhcmFtIFtvdXRdIHtudW1iZXJbXX0gVGhlIG91dHB1dCBhcnJheSB0byBhZGQgcG9pbnRzIGludG8uIElmIG5vdCBwYXNzZWQsIGEgbmV3IGFycmF5IGlzIGNyZWF0ZWQuXG4gKiBAcmV0dXJuIHtudW1iZXJbXX0gYW4gYXJyYXkgb2YgcG9pbnRzXG4gKi9cbnF1YWRyYXRpY0JlemllckN1cnZlID0gZnVuY3Rpb24gKGZyb21YLCBmcm9tWSwgY3BYLCBjcFksIHRvWCwgdG9ZLCBvdXQpXG57XG4gICAgdmFyIHhhLFxuICAgICAgICB5YSxcbiAgICAgICAgeGIsXG4gICAgICAgIHliLFxuICAgICAgICB4LFxuICAgICAgICB5LFxuICAgICAgICBuID0gMjAsXG4gICAgICAgIHBvaW50cyA9IG91dCB8fCBbXTtcblxuICAgIGZ1bmN0aW9uIGdldFB0KG4xICwgbjIsIHBlcmMpIHtcbiAgICAgICAgdmFyIGRpZmYgPSBuMiAtIG4xO1xuXG4gICAgICAgIHJldHVybiBuMSArICggZGlmZiAqIHBlcmMgKTtcbiAgICB9XG5cbiAgICB2YXIgaiA9IDA7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPD0gbjsgaSsrICkge1xuICAgICAgICBqID0gaSAvIG47XG5cbiAgICAgICAgLy8gVGhlIEdyZWVuIExpbmVcbiAgICAgICAgeGEgPSBnZXRQdCggZnJvbVggLCBjcFggLCBqICk7XG4gICAgICAgIHlhID0gZ2V0UHQoIGZyb21ZICwgY3BZICwgaiApO1xuICAgICAgICB4YiA9IGdldFB0KCBjcFggLCB0b1ggLCBqICk7XG4gICAgICAgIHliID0gZ2V0UHQoIGNwWSAsIHRvWSAsIGogKTtcblxuICAgICAgICAvLyBUaGUgQmxhY2sgRG90XG4gICAgICAgIHggPSBnZXRQdCggeGEgLCB4YiAsIGogKTtcbiAgICAgICAgeSA9IGdldFB0KCB5YSAsIHliICwgaiApO1xuXG4gICAgICAgIHBvaW50cy5wdXNoKHgsIHkpO1xuICAgIH1cblxuICAgIHJldHVybiBwb2ludHM7XG59O1xuXG5cbm1vZHVsZS5leHBvcnRzID0gYnVpbGRSb3VuZGVkUmVjdGFuZ2xlOyIsIi8qKlxuICogQGZpbGUgICAgICAgIE1haW4gZXhwb3J0IG9mIHRoZSBQSVhJIGNvcmUgbGlicmFyeVxuICogQGF1dGhvciAgICAgIE1hdCBHcm92ZXMgPG1hdEBnb29kYm95ZGlnaXRhbC5jb20+XG4gKiBAY29weXJpZ2h0ICAgMjAxMy0yMDE1IEdvb2RCb3lEaWdpdGFsXG4gKiBAbGljZW5zZSAgICAge0BsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9waXhpanMvcGl4aS5qcy9ibG9iL21hc3Rlci9MSUNFTlNFfE1JVCBMaWNlbnNlfVxuICovXG5cbi8qKlxuICogQG5hbWVzcGFjZSBQSVhJXG4gKi9cbi8vIGV4cG9ydCBjb3JlIGFuZCBjb25zdC4gV2UgYXNzaWduIGNvcmUgdG8gY29uc3Qgc28gdGhhdCB0aGUgbm9uLXJlZmVyZW5jZSB0eXBlcyBpbiBjb25zdCByZW1haW4gaW4tdGFjdFxudmFyIGNvcmUgPSBtb2R1bGUuZXhwb3J0cyA9IE9iamVjdC5hc3NpZ24ocmVxdWlyZSgnLi9jb25zdCcpLCByZXF1aXJlKCcuL21hdGgnKSwge1xuICAgIC8vIHV0aWxzXG4gICAgdXRpbHM6IHJlcXVpcmUoJy4vdXRpbHMnKSxcbiAgICB0aWNrZXI6IHJlcXVpcmUoJy4vdGlja2VyJyksXG5cbiAgICAvLyBkaXNwbGF5XG4gICAgRGlzcGxheU9iamVjdDogICAgICAgICAgcmVxdWlyZSgnLi9kaXNwbGF5L0Rpc3BsYXlPYmplY3QnKSxcbiAgICBDb250YWluZXI6ICAgICAgICAgICAgICByZXF1aXJlKCcuL2Rpc3BsYXkvQ29udGFpbmVyJyksXG5cbiAgICAvLyBzcHJpdGVzXG4gICAgU3ByaXRlOiAgICAgICAgICAgICAgICAgcmVxdWlyZSgnLi9zcHJpdGVzL1Nwcml0ZScpLFxuICAgIFBhcnRpY2xlQ29udGFpbmVyOiAgICAgIHJlcXVpcmUoJy4vcGFydGljbGVzL1BhcnRpY2xlQ29udGFpbmVyJyksXG4gICAgU3ByaXRlUmVuZGVyZXI6ICAgICAgICAgcmVxdWlyZSgnLi9zcHJpdGVzL3dlYmdsL1Nwcml0ZVJlbmRlcmVyJyksXG4gICAgUGFydGljbGVSZW5kZXJlcjogICAgICAgcmVxdWlyZSgnLi9wYXJ0aWNsZXMvd2ViZ2wvUGFydGljbGVSZW5kZXJlcicpLFxuXG4gICAgLy8gdGV4dFxuICAgIFRleHQ6ICAgICAgICAgICAgICAgICAgIHJlcXVpcmUoJy4vdGV4dC9UZXh0JyksXG5cbiAgICAvLyBwcmltaXRpdmVzXG4gICAgR3JhcGhpY3M6ICAgICAgICAgICAgICAgcmVxdWlyZSgnLi9ncmFwaGljcy9HcmFwaGljcycpLFxuICAgIEdyYXBoaWNzRGF0YTogICAgICAgICAgIHJlcXVpcmUoJy4vZ3JhcGhpY3MvR3JhcGhpY3NEYXRhJyksXG4gICAgR3JhcGhpY3NSZW5kZXJlcjogICAgICAgcmVxdWlyZSgnLi9ncmFwaGljcy93ZWJnbC9HcmFwaGljc1JlbmRlcmVyJyksXG5cbiAgICAvLyB0ZXh0dXJlc1xuICAgIFRleHR1cmU6ICAgICAgICAgICAgICAgIHJlcXVpcmUoJy4vdGV4dHVyZXMvVGV4dHVyZScpLFxuICAgIEJhc2VUZXh0dXJlOiAgICAgICAgICAgIHJlcXVpcmUoJy4vdGV4dHVyZXMvQmFzZVRleHR1cmUnKSxcbiAgICBSZW5kZXJUZXh0dXJlOiAgICAgICAgICByZXF1aXJlKCcuL3RleHR1cmVzL1JlbmRlclRleHR1cmUnKSxcbiAgICBWaWRlb0Jhc2VUZXh0dXJlOiAgICAgICByZXF1aXJlKCcuL3RleHR1cmVzL1ZpZGVvQmFzZVRleHR1cmUnKSxcbiAgICBUZXh0dXJlVXZzOiAgICAgICAgICAgICByZXF1aXJlKCcuL3RleHR1cmVzL1RleHR1cmVVdnMnKSxcblxuICAgIC8vIHJlbmRlcmVycyAtIGNhbnZhc1xuICAgIENhbnZhc1JlbmRlcmVyOiAgICAgICAgIHJlcXVpcmUoJy4vcmVuZGVyZXJzL2NhbnZhcy9DYW52YXNSZW5kZXJlcicpLFxuICAgIENhbnZhc0dyYXBoaWNzOiAgICAgICAgIHJlcXVpcmUoJy4vcmVuZGVyZXJzL2NhbnZhcy91dGlscy9DYW52YXNHcmFwaGljcycpLFxuICAgIENhbnZhc0J1ZmZlcjogICAgICAgICAgIHJlcXVpcmUoJy4vcmVuZGVyZXJzL2NhbnZhcy91dGlscy9DYW52YXNCdWZmZXInKSxcblxuICAgIC8vIHJlbmRlcmVycyAtIHdlYmdsXG4gICAgV2ViR0xSZW5kZXJlcjogICAgICAgICAgcmVxdWlyZSgnLi9yZW5kZXJlcnMvd2ViZ2wvV2ViR0xSZW5kZXJlcicpLFxuICAgIFdlYkdMTWFuYWdlcjogICAgICAgICAgcmVxdWlyZSgnLi9yZW5kZXJlcnMvd2ViZ2wvbWFuYWdlcnMvV2ViR0xNYW5hZ2VyJyksXG4gICAgU2hhZGVyTWFuYWdlcjogICAgICAgICAgcmVxdWlyZSgnLi9yZW5kZXJlcnMvd2ViZ2wvbWFuYWdlcnMvU2hhZGVyTWFuYWdlcicpLFxuICAgIFNoYWRlcjogICAgICAgICAgICAgICAgIHJlcXVpcmUoJy4vcmVuZGVyZXJzL3dlYmdsL3NoYWRlcnMvU2hhZGVyJyksXG4gICAgT2JqZWN0UmVuZGVyZXI6ICAgICAgICAgcmVxdWlyZSgnLi9yZW5kZXJlcnMvd2ViZ2wvdXRpbHMvT2JqZWN0UmVuZGVyZXInKSxcbiAgICBSZW5kZXJUYXJnZXQ6ICAgICAgICAgICByZXF1aXJlKCcuL3JlbmRlcmVycy93ZWJnbC91dGlscy9SZW5kZXJUYXJnZXQnKSxcblxuICAgIC8vIGZpbHRlcnMgLSB3ZWJnbFxuICAgIEFic3RyYWN0RmlsdGVyOiAgICAgICAgIHJlcXVpcmUoJy4vcmVuZGVyZXJzL3dlYmdsL2ZpbHRlcnMvQWJzdHJhY3RGaWx0ZXInKSxcbiAgICBGWEFBRmlsdGVyOiAgICAgICAgICAgICByZXF1aXJlKCcuL3JlbmRlcmVycy93ZWJnbC9maWx0ZXJzL0ZYQUFGaWx0ZXInKSxcbiAgICBTcHJpdGVNYXNrRmlsdGVyOiAgICAgICByZXF1aXJlKCcuL3JlbmRlcmVycy93ZWJnbC9maWx0ZXJzL1Nwcml0ZU1hc2tGaWx0ZXInKSxcblxuICAgIGdsQ29yZTogICAgICAgICAgICAgICAgICAgcmVxdWlyZSgncGl4aS1nbC1jb3JlJyksXG5cbiAgICAvKipcbiAgICAgKiBUaGlzIGhlbHBlciBmdW5jdGlvbiB3aWxsIGF1dG9tYXRpY2FsbHkgZGV0ZWN0IHdoaWNoIHJlbmRlcmVyIHlvdSBzaG91bGQgYmUgdXNpbmcuXG4gICAgICogV2ViR0wgaXMgdGhlIHByZWZlcnJlZCByZW5kZXJlciBhcyBpdCBpcyBhIGxvdCBmYXN0ZXIuIElmIHdlYkdMIGlzIG5vdCBzdXBwb3J0ZWQgYnlcbiAgICAgKiB0aGUgYnJvd3NlciB0aGVuIHRoaXMgZnVuY3Rpb24gd2lsbCByZXR1cm4gYSBjYW52YXMgcmVuZGVyZXJcbiAgICAgKlxuICAgICAqIEBtZW1iZXJvZiBQSVhJXG4gICAgICogQHBhcmFtIHdpZHRoPTgwMCB7bnVtYmVyfSB0aGUgd2lkdGggb2YgdGhlIHJlbmRlcmVycyB2aWV3XG4gICAgICogQHBhcmFtIGhlaWdodD02MDAge251bWJlcn0gdGhlIGhlaWdodCBvZiB0aGUgcmVuZGVyZXJzIHZpZXdcbiAgICAgKiBAcGFyYW0gW29wdGlvbnNdIHtvYmplY3R9IFRoZSBvcHRpb25hbCByZW5kZXJlciBwYXJhbWV0ZXJzXG4gICAgICogQHBhcmFtIFtvcHRpb25zLnZpZXddIHtIVE1MQ2FudmFzRWxlbWVudH0gdGhlIGNhbnZhcyB0byB1c2UgYXMgYSB2aWV3LCBvcHRpb25hbFxuICAgICAqIEBwYXJhbSBbb3B0aW9ucy50cmFuc3BhcmVudD1mYWxzZV0ge2Jvb2xlYW59IElmIHRoZSByZW5kZXIgdmlldyBpcyB0cmFuc3BhcmVudCwgZGVmYXVsdCBmYWxzZVxuICAgICAqIEBwYXJhbSBbb3B0aW9ucy5hbnRpYWxpYXM9ZmFsc2VdIHtib29sZWFufSBzZXRzIGFudGlhbGlhcyAob25seSBhcHBsaWNhYmxlIGluIGNocm9tZSBhdCB0aGUgbW9tZW50KVxuICAgICAqIEBwYXJhbSBbb3B0aW9ucy5wcmVzZXJ2ZURyYXdpbmdCdWZmZXI9ZmFsc2VdIHtib29sZWFufSBlbmFibGVzIGRyYXdpbmcgYnVmZmVyIHByZXNlcnZhdGlvbiwgZW5hYmxlIHRoaXMgaWYgeW91XG4gICAgICogICAgICBuZWVkIHRvIGNhbGwgdG9EYXRhVXJsIG9uIHRoZSB3ZWJnbCBjb250ZXh0XG4gICAgICogQHBhcmFtIFtvcHRpb25zLnJlc29sdXRpb249MV0ge251bWJlcn0gdGhlIHJlc29sdXRpb24gb2YgdGhlIHJlbmRlcmVyLCByZXRpbmEgd291bGQgYmUgMlxuICAgICAqIEBwYXJhbSBbbm9XZWJHTD1mYWxzZV0ge2Jvb2xlYW59IHByZXZlbnRzIHNlbGVjdGlvbiBvZiBXZWJHTCByZW5kZXJlciwgZXZlbiBpZiBzdWNoIGlzIHByZXNlbnRcbiAgICAgKlxuICAgICAqIEByZXR1cm4ge1dlYkdMUmVuZGVyZXJ8Q2FudmFzUmVuZGVyZXJ9IFJldHVybnMgV2ViR0wgcmVuZGVyZXIgaWYgYXZhaWxhYmxlLCBvdGhlcndpc2UgQ2FudmFzUmVuZGVyZXJcbiAgICAgKi9cbiAgICBhdXRvRGV0ZWN0UmVuZGVyZXI6IGZ1bmN0aW9uICh3aWR0aCwgaGVpZ2h0LCBvcHRpb25zLCBub1dlYkdMKVxuICAgIHtcbiAgICAgICAgd2lkdGggPSB3aWR0aCB8fCA4MDA7XG4gICAgICAgIGhlaWdodCA9IGhlaWdodCB8fCA2MDA7XG5cbiAgICAgICAgaWYgKCFub1dlYkdMICYmIGNvcmUudXRpbHMuaXNXZWJHTFN1cHBvcnRlZCgpKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IGNvcmUuV2ViR0xSZW5kZXJlcih3aWR0aCwgaGVpZ2h0LCBvcHRpb25zKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBuZXcgY29yZS5DYW52YXNSZW5kZXJlcih3aWR0aCwgaGVpZ2h0LCBvcHRpb25zKTtcbiAgICB9XG59KTtcbiIsIi8vIEB0b2RvIC0gaWdub3JlIHRoZSB0b28gbWFueSBwYXJhbWV0ZXJzIHdhcm5pbmcgZm9yIG5vd1xuLy8gc2hvdWxkIGVpdGhlciBmaXggaXQgb3IgY2hhbmdlIHRoZSBqc2hpbnQgY29uZmlnXG4vLyBqc2hpbnQgLVcwNzJcblxudmFyIFBvaW50ID0gcmVxdWlyZSgnLi9Qb2ludCcpO1xuXG4vKipcbiAqIFRoZSBwaXhpIE1hdHJpeCBjbGFzcyBhcyBhbiBvYmplY3QsIHdoaWNoIG1ha2VzIGl0IGEgbG90IGZhc3RlcixcbiAqIGhlcmUgaXMgYSByZXByZXNlbnRhdGlvbiBvZiBpdCA6XG4gKiB8IGEgfCBiIHwgdHh8XG4gKiB8IGMgfCBkIHwgdHl8XG4gKiB8IDAgfCAwIHwgMSB8XG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICovXG5mdW5jdGlvbiBNYXRyaXgoKVxue1xuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAxXG4gICAgICovXG4gICAgdGhpcy5hID0gMTtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAwXG4gICAgICovXG4gICAgdGhpcy5iID0gMDtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAwXG4gICAgICovXG4gICAgdGhpcy5jID0gMDtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAxXG4gICAgICovXG4gICAgdGhpcy5kID0gMTtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAwXG4gICAgICovXG4gICAgdGhpcy50eCA9IDA7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMFxuICAgICAqL1xuICAgIHRoaXMudHkgPSAwO1xufVxuXG5NYXRyaXgucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gTWF0cml4O1xubW9kdWxlLmV4cG9ydHMgPSBNYXRyaXg7XG5cbi8qKlxuICogQ3JlYXRlcyBhIE1hdHJpeCBvYmplY3QgYmFzZWQgb24gdGhlIGdpdmVuIGFycmF5LiBUaGUgRWxlbWVudCB0byBNYXRyaXggbWFwcGluZyBvcmRlciBpcyBhcyBmb2xsb3dzOlxuICpcbiAqIGEgPSBhcnJheVswXVxuICogYiA9IGFycmF5WzFdXG4gKiBjID0gYXJyYXlbM11cbiAqIGQgPSBhcnJheVs0XVxuICogdHggPSBhcnJheVsyXVxuICogdHkgPSBhcnJheVs1XVxuICpcbiAqIEBwYXJhbSBhcnJheSB7bnVtYmVyW119IFRoZSBhcnJheSB0aGF0IHRoZSBtYXRyaXggd2lsbCBiZSBwb3B1bGF0ZWQgZnJvbS5cbiAqL1xuTWF0cml4LnByb3RvdHlwZS5mcm9tQXJyYXkgPSBmdW5jdGlvbiAoYXJyYXkpXG57XG4gICAgdGhpcy5hID0gYXJyYXlbMF07XG4gICAgdGhpcy5iID0gYXJyYXlbMV07XG4gICAgdGhpcy5jID0gYXJyYXlbM107XG4gICAgdGhpcy5kID0gYXJyYXlbNF07XG4gICAgdGhpcy50eCA9IGFycmF5WzJdO1xuICAgIHRoaXMudHkgPSBhcnJheVs1XTtcbn07XG5cblxuLyoqXG4gKiBzZXRzIHRoZSBtYXRyaXggcHJvcGVydGllc1xuICpcbiAqIEBwYXJhbSB7bnVtYmVyfSBhXG4gKiBAcGFyYW0ge251bWJlcn0gYlxuICogQHBhcmFtIHtudW1iZXJ9IGNcbiAqIEBwYXJhbSB7bnVtYmVyfSBkXG4gKiBAcGFyYW0ge251bWJlcn0gdHhcbiAqIEBwYXJhbSB7bnVtYmVyfSB0eVxuICpcbiAqIEByZXR1cm4ge1BJWEkuTWF0cml4fSBUaGlzIG1hdHJpeC4gR29vZCBmb3IgY2hhaW5pbmcgbWV0aG9kIGNhbGxzLlxuICovXG5NYXRyaXgucHJvdG90eXBlLnNldCA9IGZ1bmN0aW9uIChhLCBiLCBjLCBkLCB0eCwgdHkpXG57XG4gICAgdGhpcy5hID0gYTtcbiAgICB0aGlzLmIgPSBiO1xuICAgIHRoaXMuYyA9IGM7XG4gICAgdGhpcy5kID0gZDtcbiAgICB0aGlzLnR4ID0gdHg7XG4gICAgdGhpcy50eSA9IHR5O1xuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG5cbi8qKlxuICogQ3JlYXRlcyBhbiBhcnJheSBmcm9tIHRoZSBjdXJyZW50IE1hdHJpeCBvYmplY3QuXG4gKlxuICogQHBhcmFtIHRyYW5zcG9zZSB7Ym9vbGVhbn0gV2hldGhlciB3ZSBuZWVkIHRvIHRyYW5zcG9zZSB0aGUgbWF0cml4IG9yIG5vdFxuICogQHBhcmFtIFtvdXRdIHtBcnJheX0gSWYgcHJvdmlkZWQgdGhlIGFycmF5IHdpbGwgYmUgYXNzaWduZWQgdG8gb3V0XG4gKiBAcmV0dXJuIHtudW1iZXJbXX0gdGhlIG5ld2x5IGNyZWF0ZWQgYXJyYXkgd2hpY2ggY29udGFpbnMgdGhlIG1hdHJpeFxuICovXG5NYXRyaXgucHJvdG90eXBlLnRvQXJyYXkgPSBmdW5jdGlvbiAodHJhbnNwb3NlLCBvdXQpXG57XG4gICAgaWYgKCF0aGlzLmFycmF5KVxuICAgIHtcbiAgICAgICAgdGhpcy5hcnJheSA9IG5ldyBGbG9hdDMyQXJyYXkoOSk7XG4gICAgfVxuXG4gICAgdmFyIGFycmF5ID0gb3V0IHx8IHRoaXMuYXJyYXk7XG5cbiAgICBpZiAodHJhbnNwb3NlKVxuICAgIHtcbiAgICAgICAgYXJyYXlbMF0gPSB0aGlzLmE7XG4gICAgICAgIGFycmF5WzFdID0gdGhpcy5iO1xuICAgICAgICBhcnJheVsyXSA9IDA7XG4gICAgICAgIGFycmF5WzNdID0gdGhpcy5jO1xuICAgICAgICBhcnJheVs0XSA9IHRoaXMuZDtcbiAgICAgICAgYXJyYXlbNV0gPSAwO1xuICAgICAgICBhcnJheVs2XSA9IHRoaXMudHg7XG4gICAgICAgIGFycmF5WzddID0gdGhpcy50eTtcbiAgICAgICAgYXJyYXlbOF0gPSAxO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICBhcnJheVswXSA9IHRoaXMuYTtcbiAgICAgICAgYXJyYXlbMV0gPSB0aGlzLmM7XG4gICAgICAgIGFycmF5WzJdID0gdGhpcy50eDtcbiAgICAgICAgYXJyYXlbM10gPSB0aGlzLmI7XG4gICAgICAgIGFycmF5WzRdID0gdGhpcy5kO1xuICAgICAgICBhcnJheVs1XSA9IHRoaXMudHk7XG4gICAgICAgIGFycmF5WzZdID0gMDtcbiAgICAgICAgYXJyYXlbN10gPSAwO1xuICAgICAgICBhcnJheVs4XSA9IDE7XG4gICAgfVxuXG4gICAgcmV0dXJuIGFycmF5O1xufTtcblxuLyoqXG4gKiBHZXQgYSBuZXcgcG9zaXRpb24gd2l0aCB0aGUgY3VycmVudCB0cmFuc2Zvcm1hdGlvbiBhcHBsaWVkLlxuICogQ2FuIGJlIHVzZWQgdG8gZ28gZnJvbSBhIGNoaWxkJ3MgY29vcmRpbmF0ZSBzcGFjZSB0byB0aGUgd29ybGQgY29vcmRpbmF0ZSBzcGFjZS4gKGUuZy4gcmVuZGVyaW5nKVxuICpcbiAqIEBwYXJhbSBwb3Mge1BJWEkuUG9pbnR9IFRoZSBvcmlnaW5cbiAqIEBwYXJhbSBbbmV3UG9zXSB7UElYSS5Qb2ludH0gVGhlIHBvaW50IHRoYXQgdGhlIG5ldyBwb3NpdGlvbiBpcyBhc3NpZ25lZCB0byAoYWxsb3dlZCB0byBiZSBzYW1lIGFzIGlucHV0KVxuICogQHJldHVybiB7UElYSS5Qb2ludH0gVGhlIG5ldyBwb2ludCwgdHJhbnNmb3JtZWQgdGhyb3VnaCB0aGlzIG1hdHJpeFxuICovXG5NYXRyaXgucHJvdG90eXBlLmFwcGx5ID0gZnVuY3Rpb24gKHBvcywgbmV3UG9zKVxue1xuICAgIG5ld1BvcyA9IG5ld1BvcyB8fCBuZXcgUG9pbnQoKTtcblxuICAgIHZhciB4ID0gcG9zLng7XG4gICAgdmFyIHkgPSBwb3MueTtcblxuICAgIG5ld1Bvcy54ID0gdGhpcy5hICogeCArIHRoaXMuYyAqIHkgKyB0aGlzLnR4O1xuICAgIG5ld1Bvcy55ID0gdGhpcy5iICogeCArIHRoaXMuZCAqIHkgKyB0aGlzLnR5O1xuXG4gICAgcmV0dXJuIG5ld1Bvcztcbn07XG5cbi8qKlxuICogR2V0IGEgbmV3IHBvc2l0aW9uIHdpdGggdGhlIGludmVyc2Ugb2YgdGhlIGN1cnJlbnQgdHJhbnNmb3JtYXRpb24gYXBwbGllZC5cbiAqIENhbiBiZSB1c2VkIHRvIGdvIGZyb20gdGhlIHdvcmxkIGNvb3JkaW5hdGUgc3BhY2UgdG8gYSBjaGlsZCdzIGNvb3JkaW5hdGUgc3BhY2UuIChlLmcuIGlucHV0KVxuICpcbiAqIEBwYXJhbSBwb3Mge1BJWEkuUG9pbnR9IFRoZSBvcmlnaW5cbiAqIEBwYXJhbSBbbmV3UG9zXSB7UElYSS5Qb2ludH0gVGhlIHBvaW50IHRoYXQgdGhlIG5ldyBwb3NpdGlvbiBpcyBhc3NpZ25lZCB0byAoYWxsb3dlZCB0byBiZSBzYW1lIGFzIGlucHV0KVxuICogQHJldHVybiB7UElYSS5Qb2ludH0gVGhlIG5ldyBwb2ludCwgaW52ZXJzZS10cmFuc2Zvcm1lZCB0aHJvdWdoIHRoaXMgbWF0cml4XG4gKi9cbk1hdHJpeC5wcm90b3R5cGUuYXBwbHlJbnZlcnNlID0gZnVuY3Rpb24gKHBvcywgbmV3UG9zKVxue1xuICAgIG5ld1BvcyA9IG5ld1BvcyB8fCBuZXcgUG9pbnQoKTtcblxuICAgIHZhciBpZCA9IDEgLyAodGhpcy5hICogdGhpcy5kICsgdGhpcy5jICogLXRoaXMuYik7XG5cbiAgICB2YXIgeCA9IHBvcy54O1xuICAgIHZhciB5ID0gcG9zLnk7XG5cbiAgICBuZXdQb3MueCA9IHRoaXMuZCAqIGlkICogeCArIC10aGlzLmMgKiBpZCAqIHkgKyAodGhpcy50eSAqIHRoaXMuYyAtIHRoaXMudHggKiB0aGlzLmQpICogaWQ7XG4gICAgbmV3UG9zLnkgPSB0aGlzLmEgKiBpZCAqIHkgKyAtdGhpcy5iICogaWQgKiB4ICsgKC10aGlzLnR5ICogdGhpcy5hICsgdGhpcy50eCAqIHRoaXMuYikgKiBpZDtcblxuICAgIHJldHVybiBuZXdQb3M7XG59O1xuXG4vKipcbiAqIFRyYW5zbGF0ZXMgdGhlIG1hdHJpeCBvbiB0aGUgeCBhbmQgeS5cbiAqXG4gKiBAcGFyYW0ge251bWJlcn0geFxuICogQHBhcmFtIHtudW1iZXJ9IHlcbiAqIEByZXR1cm4ge1BJWEkuTWF0cml4fSBUaGlzIG1hdHJpeC4gR29vZCBmb3IgY2hhaW5pbmcgbWV0aG9kIGNhbGxzLlxuICovXG5NYXRyaXgucHJvdG90eXBlLnRyYW5zbGF0ZSA9IGZ1bmN0aW9uICh4LCB5KVxue1xuICAgIHRoaXMudHggKz0geDtcbiAgICB0aGlzLnR5ICs9IHk7XG5cbiAgICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogQXBwbGllcyBhIHNjYWxlIHRyYW5zZm9ybWF0aW9uIHRvIHRoZSBtYXRyaXguXG4gKlxuICogQHBhcmFtIHtudW1iZXJ9IHggVGhlIGFtb3VudCB0byBzY2FsZSBob3Jpem9udGFsbHlcbiAqIEBwYXJhbSB7bnVtYmVyfSB5IFRoZSBhbW91bnQgdG8gc2NhbGUgdmVydGljYWxseVxuICogQHJldHVybiB7UElYSS5NYXRyaXh9IFRoaXMgbWF0cml4LiBHb29kIGZvciBjaGFpbmluZyBtZXRob2QgY2FsbHMuXG4gKi9cbk1hdHJpeC5wcm90b3R5cGUuc2NhbGUgPSBmdW5jdGlvbiAoeCwgeSlcbntcbiAgICB0aGlzLmEgKj0geDtcbiAgICB0aGlzLmQgKj0geTtcbiAgICB0aGlzLmMgKj0geDtcbiAgICB0aGlzLmIgKj0geTtcbiAgICB0aGlzLnR4ICo9IHg7XG4gICAgdGhpcy50eSAqPSB5O1xuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG5cbi8qKlxuICogQXBwbGllcyBhIHJvdGF0aW9uIHRyYW5zZm9ybWF0aW9uIHRvIHRoZSBtYXRyaXguXG4gKlxuICogQHBhcmFtIHtudW1iZXJ9IGFuZ2xlIC0gVGhlIGFuZ2xlIGluIHJhZGlhbnMuXG4gKiBAcmV0dXJuIHtQSVhJLk1hdHJpeH0gVGhpcyBtYXRyaXguIEdvb2QgZm9yIGNoYWluaW5nIG1ldGhvZCBjYWxscy5cbiAqL1xuTWF0cml4LnByb3RvdHlwZS5yb3RhdGUgPSBmdW5jdGlvbiAoYW5nbGUpXG57XG4gICAgdmFyIGNvcyA9IE1hdGguY29zKCBhbmdsZSApO1xuICAgIHZhciBzaW4gPSBNYXRoLnNpbiggYW5nbGUgKTtcblxuICAgIHZhciBhMSA9IHRoaXMuYTtcbiAgICB2YXIgYzEgPSB0aGlzLmM7XG4gICAgdmFyIHR4MSA9IHRoaXMudHg7XG5cbiAgICB0aGlzLmEgPSBhMSAqIGNvcy10aGlzLmIgKiBzaW47XG4gICAgdGhpcy5iID0gYTEgKiBzaW4rdGhpcy5iICogY29zO1xuICAgIHRoaXMuYyA9IGMxICogY29zLXRoaXMuZCAqIHNpbjtcbiAgICB0aGlzLmQgPSBjMSAqIHNpbit0aGlzLmQgKiBjb3M7XG4gICAgdGhpcy50eCA9IHR4MSAqIGNvcyAtIHRoaXMudHkgKiBzaW47XG4gICAgdGhpcy50eSA9IHR4MSAqIHNpbiArIHRoaXMudHkgKiBjb3M7XG5cbiAgICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogQXBwZW5kcyB0aGUgZ2l2ZW4gTWF0cml4IHRvIHRoaXMgTWF0cml4LlxuICpcbiAqIEBwYXJhbSB7UElYSS5NYXRyaXh9IG1hdHJpeFxuICogQHJldHVybiB7UElYSS5NYXRyaXh9IFRoaXMgbWF0cml4LiBHb29kIGZvciBjaGFpbmluZyBtZXRob2QgY2FsbHMuXG4gKi9cbk1hdHJpeC5wcm90b3R5cGUuYXBwZW5kID0gZnVuY3Rpb24gKG1hdHJpeClcbntcbiAgICB2YXIgYTEgPSB0aGlzLmE7XG4gICAgdmFyIGIxID0gdGhpcy5iO1xuICAgIHZhciBjMSA9IHRoaXMuYztcbiAgICB2YXIgZDEgPSB0aGlzLmQ7XG5cbiAgICB0aGlzLmEgID0gbWF0cml4LmEgKiBhMSArIG1hdHJpeC5iICogYzE7XG4gICAgdGhpcy5iICA9IG1hdHJpeC5hICogYjEgKyBtYXRyaXguYiAqIGQxO1xuICAgIHRoaXMuYyAgPSBtYXRyaXguYyAqIGExICsgbWF0cml4LmQgKiBjMTtcbiAgICB0aGlzLmQgID0gbWF0cml4LmMgKiBiMSArIG1hdHJpeC5kICogZDE7XG5cbiAgICB0aGlzLnR4ID0gbWF0cml4LnR4ICogYTEgKyBtYXRyaXgudHkgKiBjMSArIHRoaXMudHg7XG4gICAgdGhpcy50eSA9IG1hdHJpeC50eCAqIGIxICsgbWF0cml4LnR5ICogZDEgKyB0aGlzLnR5O1xuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIFNldHMgdGhlIG1hdHJpeCBiYXNlZCBvbiBhbGwgdGhlIGF2YWlsYWJsZSBwcm9wZXJ0aWVzXG4gKlxuICogQHBhcmFtIHtudW1iZXJ9IHhcbiAqIEBwYXJhbSB7bnVtYmVyfSB5XG4gKiBAcGFyYW0ge251bWJlcn0gcGl2b3RYXG4gKiBAcGFyYW0ge251bWJlcn0gcGl2b3RZXG4gKiBAcGFyYW0ge251bWJlcn0gc2NhbGVYXG4gKiBAcGFyYW0ge251bWJlcn0gc2NhbGVZXG4gKiBAcGFyYW0ge251bWJlcn0gcm90YXRpb25cbiAqIEBwYXJhbSB7bnVtYmVyfSBza2V3WFxuICogQHBhcmFtIHtudW1iZXJ9IHNrZXdZXG4gKlxuICogQHJldHVybiB7UElYSS5NYXRyaXh9IFRoaXMgbWF0cml4LiBHb29kIGZvciBjaGFpbmluZyBtZXRob2QgY2FsbHMuXG4gKi9cbk1hdHJpeC5wcm90b3R5cGUuc2V0VHJhbnNmb3JtID0gZnVuY3Rpb24gKHgsIHksIHBpdm90WCwgcGl2b3RZLCBzY2FsZVgsIHNjYWxlWSwgcm90YXRpb24sIHNrZXdYLCBza2V3WSlcbntcbiAgICB2YXIgYSwgYiwgYywgZCwgc3IsIGNyLCBjeSwgc3ksIG5zeCwgY3g7XG5cbiAgICBzciAgPSBNYXRoLnNpbihyb3RhdGlvbik7XG4gICAgY3IgID0gTWF0aC5jb3Mocm90YXRpb24pO1xuICAgIGN5ICA9IE1hdGguY29zKHNrZXdZKTtcbiAgICBzeSAgPSBNYXRoLnNpbihza2V3WSk7XG4gICAgbnN4ID0gLU1hdGguc2luKHNrZXdYKTtcbiAgICBjeCAgPSAgTWF0aC5jb3Moc2tld1gpO1xuXG4gICAgYSAgPSAgY3IgKiBzY2FsZVg7XG4gICAgYiAgPSAgc3IgKiBzY2FsZVg7XG4gICAgYyAgPSAtc3IgKiBzY2FsZVk7XG4gICAgZCAgPSAgY3IgKiBzY2FsZVk7XG5cbiAgICB0aGlzLmEgID0gY3kgKiBhICsgc3kgKiBjO1xuICAgIHRoaXMuYiAgPSBjeSAqIGIgKyBzeSAqIGQ7XG4gICAgdGhpcy5jICA9IG5zeCAqIGEgKyBjeCAqIGM7XG4gICAgdGhpcy5kICA9IG5zeCAqIGIgKyBjeCAqIGQ7XG5cbiAgICB0aGlzLnR4ID0geCArICggcGl2b3RYICogYSArIHBpdm90WSAqIGMgKTtcbiAgICB0aGlzLnR5ID0geSArICggcGl2b3RYICogYiArIHBpdm90WSAqIGQgKTtcblxuICAgIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBQcmVwZW5kcyB0aGUgZ2l2ZW4gTWF0cml4IHRvIHRoaXMgTWF0cml4LlxuICpcbiAqIEBwYXJhbSB7UElYSS5NYXRyaXh9IG1hdHJpeFxuICogQHJldHVybiB7UElYSS5NYXRyaXh9IFRoaXMgbWF0cml4LiBHb29kIGZvciBjaGFpbmluZyBtZXRob2QgY2FsbHMuXG4gKi9cbk1hdHJpeC5wcm90b3R5cGUucHJlcGVuZCA9IGZ1bmN0aW9uKG1hdHJpeClcbntcbiAgICB2YXIgdHgxID0gdGhpcy50eDtcblxuICAgIGlmIChtYXRyaXguYSAhPT0gMSB8fCBtYXRyaXguYiAhPT0gMCB8fCBtYXRyaXguYyAhPT0gMCB8fCBtYXRyaXguZCAhPT0gMSlcbiAgICB7XG4gICAgICAgIHZhciBhMSA9IHRoaXMuYTtcbiAgICAgICAgdmFyIGMxID0gdGhpcy5jO1xuICAgICAgICB0aGlzLmEgID0gYTEqbWF0cml4LmErdGhpcy5iKm1hdHJpeC5jO1xuICAgICAgICB0aGlzLmIgID0gYTEqbWF0cml4LmIrdGhpcy5iKm1hdHJpeC5kO1xuICAgICAgICB0aGlzLmMgID0gYzEqbWF0cml4LmErdGhpcy5kKm1hdHJpeC5jO1xuICAgICAgICB0aGlzLmQgID0gYzEqbWF0cml4LmIrdGhpcy5kKm1hdHJpeC5kO1xuICAgIH1cblxuICAgIHRoaXMudHggPSB0eDEqbWF0cml4LmErdGhpcy50eSptYXRyaXguYyttYXRyaXgudHg7XG4gICAgdGhpcy50eSA9IHR4MSptYXRyaXguYit0aGlzLnR5Km1hdHJpeC5kK21hdHJpeC50eTtcblxuICAgIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBJbnZlcnRzIHRoaXMgbWF0cml4XG4gKlxuICogQHJldHVybiB7UElYSS5NYXRyaXh9IFRoaXMgbWF0cml4LiBHb29kIGZvciBjaGFpbmluZyBtZXRob2QgY2FsbHMuXG4gKi9cbk1hdHJpeC5wcm90b3R5cGUuaW52ZXJ0ID0gZnVuY3Rpb24oKVxue1xuICAgIHZhciBhMSA9IHRoaXMuYTtcbiAgICB2YXIgYjEgPSB0aGlzLmI7XG4gICAgdmFyIGMxID0gdGhpcy5jO1xuICAgIHZhciBkMSA9IHRoaXMuZDtcbiAgICB2YXIgdHgxID0gdGhpcy50eDtcbiAgICB2YXIgbiA9IGExKmQxLWIxKmMxO1xuXG4gICAgdGhpcy5hID0gZDEvbjtcbiAgICB0aGlzLmIgPSAtYjEvbjtcbiAgICB0aGlzLmMgPSAtYzEvbjtcbiAgICB0aGlzLmQgPSBhMS9uO1xuICAgIHRoaXMudHggPSAoYzEqdGhpcy50eS1kMSp0eDEpL247XG4gICAgdGhpcy50eSA9IC0oYTEqdGhpcy50eS1iMSp0eDEpL247XG5cbiAgICByZXR1cm4gdGhpcztcbn07XG5cblxuLyoqXG4gKiBSZXNldHMgdGhpcyBNYXRpeCB0byBhbiBpZGVudGl0eSAoZGVmYXVsdCkgbWF0cml4LlxuICpcbiAqIEByZXR1cm4ge1BJWEkuTWF0cml4fSBUaGlzIG1hdHJpeC4gR29vZCBmb3IgY2hhaW5pbmcgbWV0aG9kIGNhbGxzLlxuICovXG5NYXRyaXgucHJvdG90eXBlLmlkZW50aXR5ID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLmEgPSAxO1xuICAgIHRoaXMuYiA9IDA7XG4gICAgdGhpcy5jID0gMDtcbiAgICB0aGlzLmQgPSAxO1xuICAgIHRoaXMudHggPSAwO1xuICAgIHRoaXMudHkgPSAwO1xuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIENyZWF0ZXMgYSBuZXcgTWF0cml4IG9iamVjdCB3aXRoIHRoZSBzYW1lIHZhbHVlcyBhcyB0aGlzIG9uZS5cbiAqXG4gKiBAcmV0dXJuIHtQSVhJLk1hdHJpeH0gQSBjb3B5IG9mIHRoaXMgbWF0cml4LiBHb29kIGZvciBjaGFpbmluZyBtZXRob2QgY2FsbHMuXG4gKi9cbk1hdHJpeC5wcm90b3R5cGUuY2xvbmUgPSBmdW5jdGlvbiAoKVxue1xuICAgIHZhciBtYXRyaXggPSBuZXcgTWF0cml4KCk7XG4gICAgbWF0cml4LmEgPSB0aGlzLmE7XG4gICAgbWF0cml4LmIgPSB0aGlzLmI7XG4gICAgbWF0cml4LmMgPSB0aGlzLmM7XG4gICAgbWF0cml4LmQgPSB0aGlzLmQ7XG4gICAgbWF0cml4LnR4ID0gdGhpcy50eDtcbiAgICBtYXRyaXgudHkgPSB0aGlzLnR5O1xuXG4gICAgcmV0dXJuIG1hdHJpeDtcbn07XG5cbi8qKlxuICogQ2hhbmdlcyB0aGUgdmFsdWVzIG9mIHRoZSBnaXZlbiBtYXRyaXggdG8gYmUgdGhlIHNhbWUgYXMgdGhlIG9uZXMgaW4gdGhpcyBtYXRyaXhcbiAqXG4gKiBAcmV0dXJuIHtQSVhJLk1hdHJpeH0gVGhlIG1hdHJpeCBnaXZlbiBpbiBwYXJhbWV0ZXIgd2l0aCBpdHMgdmFsdWVzIHVwZGF0ZWQuXG4gKi9cbk1hdHJpeC5wcm90b3R5cGUuY29weSA9IGZ1bmN0aW9uIChtYXRyaXgpXG57XG4gICAgbWF0cml4LmEgPSB0aGlzLmE7XG4gICAgbWF0cml4LmIgPSB0aGlzLmI7XG4gICAgbWF0cml4LmMgPSB0aGlzLmM7XG4gICAgbWF0cml4LmQgPSB0aGlzLmQ7XG4gICAgbWF0cml4LnR4ID0gdGhpcy50eDtcbiAgICBtYXRyaXgudHkgPSB0aGlzLnR5O1xuXG4gICAgcmV0dXJuIG1hdHJpeDtcbn07XG5cbi8qKlxuICogQSBkZWZhdWx0IChpZGVudGl0eSkgbWF0cml4XG4gKlxuICogQHN0YXRpY1xuICogQGNvbnN0XG4gKi9cbk1hdHJpeC5JREVOVElUWSA9IG5ldyBNYXRyaXgoKTtcblxuLyoqXG4gKiBBIHRlbXAgbWF0cml4XG4gKlxuICogQHN0YXRpY1xuICogQGNvbnN0XG4gKi9cbk1hdHJpeC5URU1QX01BVFJJWCA9IG5ldyBNYXRyaXgoKTtcbiIsIi8qKlxuICogVGhlIFBvaW50IG9iamVjdCByZXByZXNlbnRzIGEgbG9jYXRpb24gaW4gYSB0d28tZGltZW5zaW9uYWwgY29vcmRpbmF0ZSBzeXN0ZW0sIHdoZXJlIHggcmVwcmVzZW50c1xuICogdGhlIGhvcml6b250YWwgYXhpcyBhbmQgeSByZXByZXNlbnRzIHRoZSB2ZXJ0aWNhbCBheGlzLlxuICpcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqIEBwYXJhbSBbeD0wXSB7bnVtYmVyfSBwb3NpdGlvbiBvZiB0aGUgcG9pbnQgb24gdGhlIHggYXhpc1xuICogQHBhcmFtIFt5PTBdIHtudW1iZXJ9IHBvc2l0aW9uIG9mIHRoZSBwb2ludCBvbiB0aGUgeSBheGlzXG4gKi9cbmZ1bmN0aW9uIFBvaW50KHgsIHkpXG57XG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDBcbiAgICAgKi9cbiAgICB0aGlzLnggPSB4IHx8IDA7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMFxuICAgICAqL1xuICAgIHRoaXMueSA9IHkgfHwgMDtcbn1cblxuUG9pbnQucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gUG9pbnQ7XG5tb2R1bGUuZXhwb3J0cyA9IFBvaW50O1xuXG4vKipcbiAqIENyZWF0ZXMgYSBjbG9uZSBvZiB0aGlzIHBvaW50XG4gKlxuICogQHJldHVybiB7UElYSS5Qb2ludH0gYSBjb3B5IG9mIHRoZSBwb2ludFxuICovXG5Qb2ludC5wcm90b3R5cGUuY2xvbmUgPSBmdW5jdGlvbiAoKVxue1xuICAgIHJldHVybiBuZXcgUG9pbnQodGhpcy54LCB0aGlzLnkpO1xufTtcblxuLyoqXG4gKiBDb3BpZXMgeCBhbmQgeSBmcm9tIHRoZSBnaXZlbiBwb2ludFxuICpcbiAqIEBwYXJhbSBwIHtQSVhJLlBvaW50fVxuICovXG5Qb2ludC5wcm90b3R5cGUuY29weSA9IGZ1bmN0aW9uIChwKSB7XG4gICAgdGhpcy5zZXQocC54LCBwLnkpO1xufTtcblxuLyoqXG4gKiBSZXR1cm5zIHRydWUgaWYgdGhlIGdpdmVuIHBvaW50IGlzIGVxdWFsIHRvIHRoaXMgcG9pbnRcbiAqXG4gKiBAcGFyYW0gcCB7UElYSS5Qb2ludH1cbiAqIEByZXR1cm5zIHtib29sZWFufVxuICovXG5Qb2ludC5wcm90b3R5cGUuZXF1YWxzID0gZnVuY3Rpb24gKHApIHtcbiAgICByZXR1cm4gKHAueCA9PT0gdGhpcy54KSAmJiAocC55ID09PSB0aGlzLnkpO1xufTtcblxuLyoqXG4gKiBTZXRzIHRoZSBwb2ludCB0byBhIG5ldyB4IGFuZCB5IHBvc2l0aW9uLlxuICogSWYgeSBpcyBvbWl0dGVkLCBib3RoIHggYW5kIHkgd2lsbCBiZSBzZXQgdG8geC5cbiAqXG4gKiBAcGFyYW0gW3g9MF0ge251bWJlcn0gcG9zaXRpb24gb2YgdGhlIHBvaW50IG9uIHRoZSB4IGF4aXNcbiAqIEBwYXJhbSBbeT0wXSB7bnVtYmVyfSBwb3NpdGlvbiBvZiB0aGUgcG9pbnQgb24gdGhlIHkgYXhpc1xuICovXG5Qb2ludC5wcm90b3R5cGUuc2V0ID0gZnVuY3Rpb24gKHgsIHkpXG57XG4gICAgdGhpcy54ID0geCB8fCAwO1xuICAgIHRoaXMueSA9IHkgfHwgKCAoeSAhPT0gMCkgPyB0aGlzLnggOiAwICkgO1xufTtcbiIsIi8qKlxuICogTWF0aCBjbGFzc2VzIGFuZCB1dGlsaXRpZXMgbWl4ZWQgaW50byBQSVhJIG5hbWVzcGFjZS5cbiAqXG4gKiBAbGVuZHMgUElYSVxuICovXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgICAvLyBUaGVzZSB3aWxsIGJlIG1peGVkIHRvIGJlIG1hZGUgcHVibGljbHkgYXZhaWxhYmxlLFxuICAgIC8vIHdoaWxlIHRoaXMgbW9kdWxlIGlzIHVzZWQgaW50ZXJuYWxseSBpbiBjb3JlXG4gICAgLy8gdG8gYXZvaWQgY2lyY3VsYXIgZGVwZW5kZW5jaWVzIGFuZCBjdXQgZG93biBvblxuICAgIC8vIGludGVybmFsIG1vZHVsZSByZXF1aXJlcy5cblxuICAgIFBvaW50OiAgICAgIHJlcXVpcmUoJy4vUG9pbnQnKSxcbiAgICBNYXRyaXg6ICAgICByZXF1aXJlKCcuL01hdHJpeCcpLFxuXG4gICAgQ2lyY2xlOiAgICAgcmVxdWlyZSgnLi9zaGFwZXMvQ2lyY2xlJyksXG4gICAgRWxsaXBzZTogICAgcmVxdWlyZSgnLi9zaGFwZXMvRWxsaXBzZScpLFxuICAgIFBvbHlnb246ICAgIHJlcXVpcmUoJy4vc2hhcGVzL1BvbHlnb24nKSxcbiAgICBSZWN0YW5nbGU6ICByZXF1aXJlKCcuL3NoYXBlcy9SZWN0YW5nbGUnKSxcbiAgICBSb3VuZGVkUmVjdGFuZ2xlOiByZXF1aXJlKCcuL3NoYXBlcy9Sb3VuZGVkUmVjdGFuZ2xlJylcbn07XG4iLCJ2YXIgUmVjdGFuZ2xlID0gcmVxdWlyZSgnLi9SZWN0YW5nbGUnKSxcbiAgICBDT05TVCA9IHJlcXVpcmUoJy4uLy4uL2NvbnN0Jyk7XG5cbi8qKlxuICogVGhlIENpcmNsZSBvYmplY3QgY2FuIGJlIHVzZWQgdG8gc3BlY2lmeSBhIGhpdCBhcmVhIGZvciBkaXNwbGF5T2JqZWN0c1xuICpcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqIEBwYXJhbSB4IHtudW1iZXJ9IFRoZSBYIGNvb3JkaW5hdGUgb2YgdGhlIGNlbnRlciBvZiB0aGlzIGNpcmNsZVxuICogQHBhcmFtIHkge251bWJlcn0gVGhlIFkgY29vcmRpbmF0ZSBvZiB0aGUgY2VudGVyIG9mIHRoaXMgY2lyY2xlXG4gKiBAcGFyYW0gcmFkaXVzIHtudW1iZXJ9IFRoZSByYWRpdXMgb2YgdGhlIGNpcmNsZVxuICovXG5mdW5jdGlvbiBDaXJjbGUoeCwgeSwgcmFkaXVzKVxue1xuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAwXG4gICAgICovXG4gICAgdGhpcy54ID0geCB8fCAwO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDBcbiAgICAgKi9cbiAgICB0aGlzLnkgPSB5IHx8IDA7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMFxuICAgICAqL1xuICAgIHRoaXMucmFkaXVzID0gcmFkaXVzIHx8IDA7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgdHlwZSBvZiB0aGUgb2JqZWN0LCBtYWlubHkgdXNlZCB0byBhdm9pZCBgaW5zdGFuY2VvZmAgY2hlY2tzXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy50eXBlID0gQ09OU1QuU0hBUEVTLkNJUkM7XG59XG5cbkNpcmNsZS5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBDaXJjbGU7XG5tb2R1bGUuZXhwb3J0cyA9IENpcmNsZTtcblxuLyoqXG4gKiBDcmVhdGVzIGEgY2xvbmUgb2YgdGhpcyBDaXJjbGUgaW5zdGFuY2VcbiAqXG4gKiBAcmV0dXJuIHtQSVhJLkNpcmNsZX0gYSBjb3B5IG9mIHRoZSBDaXJjbGVcbiAqL1xuQ2lyY2xlLnByb3RvdHlwZS5jbG9uZSA9IGZ1bmN0aW9uICgpXG57XG4gICAgcmV0dXJuIG5ldyBDaXJjbGUodGhpcy54LCB0aGlzLnksIHRoaXMucmFkaXVzKTtcbn07XG5cbi8qKlxuICogQ2hlY2tzIHdoZXRoZXIgdGhlIHggYW5kIHkgY29vcmRpbmF0ZXMgZ2l2ZW4gYXJlIGNvbnRhaW5lZCB3aXRoaW4gdGhpcyBjaXJjbGVcbiAqXG4gKiBAcGFyYW0geCB7bnVtYmVyfSBUaGUgWCBjb29yZGluYXRlIG9mIHRoZSBwb2ludCB0byB0ZXN0XG4gKiBAcGFyYW0geSB7bnVtYmVyfSBUaGUgWSBjb29yZGluYXRlIG9mIHRoZSBwb2ludCB0byB0ZXN0XG4gKiBAcmV0dXJuIHtib29sZWFufSBXaGV0aGVyIHRoZSB4L3kgY29vcmRpbmF0ZXMgYXJlIHdpdGhpbiB0aGlzIENpcmNsZVxuICovXG5DaXJjbGUucHJvdG90eXBlLmNvbnRhaW5zID0gZnVuY3Rpb24gKHgsIHkpXG57XG4gICAgaWYgKHRoaXMucmFkaXVzIDw9IDApXG4gICAge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgdmFyIGR4ID0gKHRoaXMueCAtIHgpLFxuICAgICAgICBkeSA9ICh0aGlzLnkgLSB5KSxcbiAgICAgICAgcjIgPSB0aGlzLnJhZGl1cyAqIHRoaXMucmFkaXVzO1xuXG4gICAgZHggKj0gZHg7XG4gICAgZHkgKj0gZHk7XG5cbiAgICByZXR1cm4gKGR4ICsgZHkgPD0gcjIpO1xufTtcblxuLyoqXG4qIFJldHVybnMgdGhlIGZyYW1pbmcgcmVjdGFuZ2xlIG9mIHRoZSBjaXJjbGUgYXMgYSBSZWN0YW5nbGUgb2JqZWN0XG4qXG4qIEByZXR1cm4ge1BJWEkuUmVjdGFuZ2xlfSB0aGUgZnJhbWluZyByZWN0YW5nbGVcbiovXG5DaXJjbGUucHJvdG90eXBlLmdldEJvdW5kcyA9IGZ1bmN0aW9uICgpXG57XG4gICAgcmV0dXJuIG5ldyBSZWN0YW5nbGUodGhpcy54IC0gdGhpcy5yYWRpdXMsIHRoaXMueSAtIHRoaXMucmFkaXVzLCB0aGlzLnJhZGl1cyAqIDIsIHRoaXMucmFkaXVzICogMik7XG59O1xuIiwidmFyIFJlY3RhbmdsZSA9IHJlcXVpcmUoJy4vUmVjdGFuZ2xlJyksXG4gICAgQ09OU1QgPSByZXF1aXJlKCcuLi8uLi9jb25zdCcpO1xuXG4vKipcbiAqIFRoZSBFbGxpcHNlIG9iamVjdCBjYW4gYmUgdXNlZCB0byBzcGVjaWZ5IGEgaGl0IGFyZWEgZm9yIGRpc3BsYXlPYmplY3RzXG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIHgge251bWJlcn0gVGhlIFggY29vcmRpbmF0ZSBvZiB0aGUgY2VudGVyIG9mIHRoZSBlbGxpcHNlXG4gKiBAcGFyYW0geSB7bnVtYmVyfSBUaGUgWSBjb29yZGluYXRlIG9mIHRoZSBjZW50ZXIgb2YgdGhlIGVsbGlwc2VcbiAqIEBwYXJhbSB3aWR0aCB7bnVtYmVyfSBUaGUgaGFsZiB3aWR0aCBvZiB0aGlzIGVsbGlwc2VcbiAqIEBwYXJhbSBoZWlnaHQge251bWJlcn0gVGhlIGhhbGYgaGVpZ2h0IG9mIHRoaXMgZWxsaXBzZVxuICovXG5mdW5jdGlvbiBFbGxpcHNlKHgsIHksIHdpZHRoLCBoZWlnaHQpXG57XG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDBcbiAgICAgKi9cbiAgICB0aGlzLnggPSB4IHx8IDA7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMFxuICAgICAqL1xuICAgIHRoaXMueSA9IHkgfHwgMDtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAwXG4gICAgICovXG4gICAgdGhpcy53aWR0aCA9IHdpZHRoIHx8IDA7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMFxuICAgICAqL1xuICAgIHRoaXMuaGVpZ2h0ID0gaGVpZ2h0IHx8IDA7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgdHlwZSBvZiB0aGUgb2JqZWN0LCBtYWlubHkgdXNlZCB0byBhdm9pZCBgaW5zdGFuY2VvZmAgY2hlY2tzXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy50eXBlID0gQ09OU1QuU0hBUEVTLkVMSVA7XG59XG5cbkVsbGlwc2UucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gRWxsaXBzZTtcbm1vZHVsZS5leHBvcnRzID0gRWxsaXBzZTtcblxuLyoqXG4gKiBDcmVhdGVzIGEgY2xvbmUgb2YgdGhpcyBFbGxpcHNlIGluc3RhbmNlXG4gKlxuICogQHJldHVybiB7UElYSS5FbGxpcHNlfSBhIGNvcHkgb2YgdGhlIGVsbGlwc2VcbiAqL1xuRWxsaXBzZS5wcm90b3R5cGUuY2xvbmUgPSBmdW5jdGlvbiAoKVxue1xuICAgIHJldHVybiBuZXcgRWxsaXBzZSh0aGlzLngsIHRoaXMueSwgdGhpcy53aWR0aCwgdGhpcy5oZWlnaHQpO1xufTtcblxuLyoqXG4gKiBDaGVja3Mgd2hldGhlciB0aGUgeCBhbmQgeSBjb29yZGluYXRlcyBnaXZlbiBhcmUgY29udGFpbmVkIHdpdGhpbiB0aGlzIGVsbGlwc2VcbiAqXG4gKiBAcGFyYW0geCB7bnVtYmVyfSBUaGUgWCBjb29yZGluYXRlIG9mIHRoZSBwb2ludCB0byB0ZXN0XG4gKiBAcGFyYW0geSB7bnVtYmVyfSBUaGUgWSBjb29yZGluYXRlIG9mIHRoZSBwb2ludCB0byB0ZXN0XG4gKiBAcmV0dXJuIHtib29sZWFufSBXaGV0aGVyIHRoZSB4L3kgY29vcmRzIGFyZSB3aXRoaW4gdGhpcyBlbGxpcHNlXG4gKi9cbkVsbGlwc2UucHJvdG90eXBlLmNvbnRhaW5zID0gZnVuY3Rpb24gKHgsIHkpXG57XG4gICAgaWYgKHRoaXMud2lkdGggPD0gMCB8fCB0aGlzLmhlaWdodCA8PSAwKVxuICAgIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIC8vbm9ybWFsaXplIHRoZSBjb29yZHMgdG8gYW4gZWxsaXBzZSB3aXRoIGNlbnRlciAwLDBcbiAgICB2YXIgbm9ybXggPSAoKHggLSB0aGlzLngpIC8gdGhpcy53aWR0aCksXG4gICAgICAgIG5vcm15ID0gKCh5IC0gdGhpcy55KSAvIHRoaXMuaGVpZ2h0KTtcblxuICAgIG5vcm14ICo9IG5vcm14O1xuICAgIG5vcm15ICo9IG5vcm15O1xuXG4gICAgcmV0dXJuIChub3JteCArIG5vcm15IDw9IDEpO1xufTtcblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBmcmFtaW5nIHJlY3RhbmdsZSBvZiB0aGUgZWxsaXBzZSBhcyBhIFJlY3RhbmdsZSBvYmplY3RcbiAqXG4gKiBAcmV0dXJuIHtQSVhJLlJlY3RhbmdsZX0gdGhlIGZyYW1pbmcgcmVjdGFuZ2xlXG4gKi9cbkVsbGlwc2UucHJvdG90eXBlLmdldEJvdW5kcyA9IGZ1bmN0aW9uICgpXG57XG4gICAgcmV0dXJuIG5ldyBSZWN0YW5nbGUodGhpcy54IC0gdGhpcy53aWR0aCwgdGhpcy55IC0gdGhpcy5oZWlnaHQsIHRoaXMud2lkdGgsIHRoaXMuaGVpZ2h0KTtcbn07XG4iLCJ2YXIgUG9pbnQgPSByZXF1aXJlKCcuLi9Qb2ludCcpLFxuICAgIENPTlNUID0gcmVxdWlyZSgnLi4vLi4vY29uc3QnKTtcblxuLyoqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gcG9pbnRzIHtQSVhJLlBvaW50W118bnVtYmVyW118Li4uUElYSS5Qb2ludHwuLi5udW1iZXJ9IFRoaXMgY2FuIGJlIGFuIGFycmF5IG9mIFBvaW50cyB0aGF0IGZvcm0gdGhlIHBvbHlnb24sXG4gKiAgICAgIGEgZmxhdCBhcnJheSBvZiBudW1iZXJzIHRoYXQgd2lsbCBiZSBpbnRlcnByZXRlZCBhcyBbeCx5LCB4LHksIC4uLl0sIG9yIHRoZSBhcmd1bWVudHMgcGFzc2VkIGNhbiBiZVxuICogICAgICBhbGwgdGhlIHBvaW50cyBvZiB0aGUgcG9seWdvbiBlLmcuIGBuZXcgUElYSS5Qb2x5Z29uKG5ldyBQSVhJLlBvaW50KCksIG5ldyBQSVhJLlBvaW50KCksIC4uLilgLCBvciB0aGVcbiAqICAgICAgYXJndW1lbnRzIHBhc3NlZCBjYW4gYmUgZmxhdCB4LHkgdmFsdWVzIGUuZy4gYG5ldyBQb2x5Z29uKHgseSwgeCx5LCB4LHksIC4uLilgIHdoZXJlIGB4YCBhbmQgYHlgIGFyZVxuICogICAgICBOdW1iZXJzLlxuICovXG5mdW5jdGlvbiBQb2x5Z29uKHBvaW50c18pXG57XG4gICAgLy8gcHJldmVudHMgYW4gYXJndW1lbnQgYXNzaWdubWVudCBkZW9wdFxuICAgIC8vIHNlZSBzZWN0aW9uIDMuMTogaHR0cHM6Ly9naXRodWIuY29tL3BldGthYW50b25vdi9ibHVlYmlyZC93aWtpL09wdGltaXphdGlvbi1raWxsZXJzIzMtbWFuYWdpbmctYXJndW1lbnRzXG4gICAgdmFyIHBvaW50cyA9IHBvaW50c187XG5cbiAgICAvL2lmIHBvaW50cyBpc24ndCBhbiBhcnJheSwgdXNlIGFyZ3VtZW50cyBhcyB0aGUgYXJyYXlcbiAgICBpZiAoIUFycmF5LmlzQXJyYXkocG9pbnRzKSlcbiAgICB7XG4gICAgICAgIC8vIHByZXZlbnRzIGFuIGFyZ3VtZW50IGxlYWsgZGVvcHRcbiAgICAgICAgLy8gc2VlIHNlY3Rpb24gMy4yOiBodHRwczovL2dpdGh1Yi5jb20vcGV0a2FhbnRvbm92L2JsdWViaXJkL3dpa2kvT3B0aW1pemF0aW9uLWtpbGxlcnMjMy1tYW5hZ2luZy1hcmd1bWVudHNcbiAgICAgICAgcG9pbnRzID0gbmV3IEFycmF5KGFyZ3VtZW50cy5sZW5ndGgpO1xuXG4gICAgICAgIGZvciAodmFyIGEgPSAwOyBhIDwgcG9pbnRzLmxlbmd0aDsgKythKSB7XG4gICAgICAgICAgICBwb2ludHNbYV0gPSBhcmd1bWVudHNbYV07XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBpZiB0aGlzIGlzIGFuIGFycmF5IG9mIHBvaW50cywgY29udmVydCBpdCB0byBhIGZsYXQgYXJyYXkgb2YgbnVtYmVyc1xuICAgIGlmIChwb2ludHNbMF0gaW5zdGFuY2VvZiBQb2ludClcbiAgICB7XG4gICAgICAgIHZhciBwID0gW107XG4gICAgICAgIGZvciAodmFyIGkgPSAwLCBpbCA9IHBvaW50cy5sZW5ndGg7IGkgPCBpbDsgaSsrKVxuICAgICAgICB7XG4gICAgICAgICAgICBwLnB1c2gocG9pbnRzW2ldLngsIHBvaW50c1tpXS55KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHBvaW50cyA9IHA7XG4gICAgfVxuXG4gICAgdGhpcy5jbG9zZWQgPSB0cnVlO1xuXG4gICAgLyoqXG4gICAgICogQW4gYXJyYXkgb2YgdGhlIHBvaW50cyBvZiB0aGlzIHBvbHlnb25cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcltdfVxuICAgICAqL1xuICAgIHRoaXMucG9pbnRzID0gcG9pbnRzO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHR5cGUgb2YgdGhlIG9iamVjdCwgbWFpbmx5IHVzZWQgdG8gYXZvaWQgYGluc3RhbmNlb2ZgIGNoZWNrc1xuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMudHlwZSA9IENPTlNULlNIQVBFUy5QT0xZO1xufVxuXG5Qb2x5Z29uLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFBvbHlnb247XG5tb2R1bGUuZXhwb3J0cyA9IFBvbHlnb247XG5cbi8qKlxuICogQ3JlYXRlcyBhIGNsb25lIG9mIHRoaXMgcG9seWdvblxuICpcbiAqIEByZXR1cm4ge1BJWEkuUG9seWdvbn0gYSBjb3B5IG9mIHRoZSBwb2x5Z29uXG4gKi9cblBvbHlnb24ucHJvdG90eXBlLmNsb25lID0gZnVuY3Rpb24gKClcbntcbiAgICByZXR1cm4gbmV3IFBvbHlnb24odGhpcy5wb2ludHMuc2xpY2UoKSk7XG59O1xuXG4vKipcbiAqIENoZWNrcyB3aGV0aGVyIHRoZSB4IGFuZCB5IGNvb3JkaW5hdGVzIHBhc3NlZCB0byB0aGlzIGZ1bmN0aW9uIGFyZSBjb250YWluZWQgd2l0aGluIHRoaXMgcG9seWdvblxuICpcbiAqIEBwYXJhbSB4IHtudW1iZXJ9IFRoZSBYIGNvb3JkaW5hdGUgb2YgdGhlIHBvaW50IHRvIHRlc3RcbiAqIEBwYXJhbSB5IHtudW1iZXJ9IFRoZSBZIGNvb3JkaW5hdGUgb2YgdGhlIHBvaW50IHRvIHRlc3RcbiAqIEByZXR1cm4ge2Jvb2xlYW59IFdoZXRoZXIgdGhlIHgveSBjb29yZGluYXRlcyBhcmUgd2l0aGluIHRoaXMgcG9seWdvblxuICovXG5Qb2x5Z29uLnByb3RvdHlwZS5jb250YWlucyA9IGZ1bmN0aW9uICh4LCB5KVxue1xuICAgIHZhciBpbnNpZGUgPSBmYWxzZTtcblxuICAgIC8vIHVzZSBzb21lIHJheWNhc3RpbmcgdG8gdGVzdCBoaXRzXG4gICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL3N1YnN0YWNrL3BvaW50LWluLXBvbHlnb24vYmxvYi9tYXN0ZXIvaW5kZXguanNcbiAgICB2YXIgbGVuZ3RoID0gdGhpcy5wb2ludHMubGVuZ3RoIC8gMjtcblxuICAgIGZvciAodmFyIGkgPSAwLCBqID0gbGVuZ3RoIC0gMTsgaSA8IGxlbmd0aDsgaiA9IGkrKylcbiAgICB7XG4gICAgICAgIHZhciB4aSA9IHRoaXMucG9pbnRzW2kgKiAyXSwgeWkgPSB0aGlzLnBvaW50c1tpICogMiArIDFdLFxuICAgICAgICAgICAgeGogPSB0aGlzLnBvaW50c1tqICogMl0sIHlqID0gdGhpcy5wb2ludHNbaiAqIDIgKyAxXSxcbiAgICAgICAgICAgIGludGVyc2VjdCA9ICgoeWkgPiB5KSAhPT0gKHlqID4geSkpICYmICh4IDwgKHhqIC0geGkpICogKHkgLSB5aSkgLyAoeWogLSB5aSkgKyB4aSk7XG5cbiAgICAgICAgaWYgKGludGVyc2VjdClcbiAgICAgICAge1xuICAgICAgICAgICAgaW5zaWRlID0gIWluc2lkZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBpbnNpZGU7XG59O1xuIiwidmFyIENPTlNUID0gcmVxdWlyZSgnLi4vLi4vY29uc3QnKTtcblxuLyoqXG4gKiB0aGUgUmVjdGFuZ2xlIG9iamVjdCBpcyBhbiBhcmVhIGRlZmluZWQgYnkgaXRzIHBvc2l0aW9uLCBhcyBpbmRpY2F0ZWQgYnkgaXRzIHRvcC1sZWZ0IGNvcm5lciBwb2ludCAoeCwgeSkgYW5kIGJ5IGl0cyB3aWR0aCBhbmQgaXRzIGhlaWdodC5cbiAqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0geCB7bnVtYmVyfSBUaGUgWCBjb29yZGluYXRlIG9mIHRoZSB1cHBlci1sZWZ0IGNvcm5lciBvZiB0aGUgcmVjdGFuZ2xlXG4gKiBAcGFyYW0geSB7bnVtYmVyfSBUaGUgWSBjb29yZGluYXRlIG9mIHRoZSB1cHBlci1sZWZ0IGNvcm5lciBvZiB0aGUgcmVjdGFuZ2xlXG4gKiBAcGFyYW0gd2lkdGgge251bWJlcn0gVGhlIG92ZXJhbGwgd2lkdGggb2YgdGhpcyByZWN0YW5nbGVcbiAqIEBwYXJhbSBoZWlnaHQge251bWJlcn0gVGhlIG92ZXJhbGwgaGVpZ2h0IG9mIHRoaXMgcmVjdGFuZ2xlXG4gKi9cbmZ1bmN0aW9uIFJlY3RhbmdsZSh4LCB5LCB3aWR0aCwgaGVpZ2h0KVxue1xuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAwXG4gICAgICovXG4gICAgdGhpcy54ID0geCB8fCAwO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDBcbiAgICAgKi9cbiAgICB0aGlzLnkgPSB5IHx8IDA7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMFxuICAgICAqL1xuICAgIHRoaXMud2lkdGggPSB3aWR0aCB8fCAwO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDBcbiAgICAgKi9cbiAgICB0aGlzLmhlaWdodCA9IGhlaWdodCB8fCAwO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHR5cGUgb2YgdGhlIG9iamVjdCwgbWFpbmx5IHVzZWQgdG8gYXZvaWQgYGluc3RhbmNlb2ZgIGNoZWNrc1xuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMudHlwZSA9IENPTlNULlNIQVBFUy5SRUNUO1xufVxuXG5SZWN0YW5nbGUucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gUmVjdGFuZ2xlO1xubW9kdWxlLmV4cG9ydHMgPSBSZWN0YW5nbGU7XG5cbi8qKlxuICogQSBjb25zdGFudCBlbXB0eSByZWN0YW5nbGUuXG4gKlxuICogQHN0YXRpY1xuICogQGNvbnN0YW50XG4gKi9cblJlY3RhbmdsZS5FTVBUWSA9IG5ldyBSZWN0YW5nbGUoMCwgMCwgMCwgMCk7XG5cblxuLyoqXG4gKiBDcmVhdGVzIGEgY2xvbmUgb2YgdGhpcyBSZWN0YW5nbGVcbiAqXG4gKiBAcmV0dXJuIHtQSVhJLlJlY3RhbmdsZX0gYSBjb3B5IG9mIHRoZSByZWN0YW5nbGVcbiAqL1xuUmVjdGFuZ2xlLnByb3RvdHlwZS5jbG9uZSA9IGZ1bmN0aW9uICgpXG57XG4gICAgcmV0dXJuIG5ldyBSZWN0YW5nbGUodGhpcy54LCB0aGlzLnksIHRoaXMud2lkdGgsIHRoaXMuaGVpZ2h0KTtcbn07XG5cbi8qKlxuICogQ2hlY2tzIHdoZXRoZXIgdGhlIHggYW5kIHkgY29vcmRpbmF0ZXMgZ2l2ZW4gYXJlIGNvbnRhaW5lZCB3aXRoaW4gdGhpcyBSZWN0YW5nbGVcbiAqXG4gKiBAcGFyYW0geCB7bnVtYmVyfSBUaGUgWCBjb29yZGluYXRlIG9mIHRoZSBwb2ludCB0byB0ZXN0XG4gKiBAcGFyYW0geSB7bnVtYmVyfSBUaGUgWSBjb29yZGluYXRlIG9mIHRoZSBwb2ludCB0byB0ZXN0XG4gKiBAcmV0dXJuIHtib29sZWFufSBXaGV0aGVyIHRoZSB4L3kgY29vcmRpbmF0ZXMgYXJlIHdpdGhpbiB0aGlzIFJlY3RhbmdsZVxuICovXG5SZWN0YW5nbGUucHJvdG90eXBlLmNvbnRhaW5zID0gZnVuY3Rpb24gKHgsIHkpXG57XG4gICAgaWYgKHRoaXMud2lkdGggPD0gMCB8fCB0aGlzLmhlaWdodCA8PSAwKVxuICAgIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGlmICh4ID49IHRoaXMueCAmJiB4IDwgdGhpcy54ICsgdGhpcy53aWR0aClcbiAgICB7XG4gICAgICAgIGlmICh5ID49IHRoaXMueSAmJiB5IDwgdGhpcy55ICsgdGhpcy5oZWlnaHQpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xufTtcbiIsInZhciBDT05TVCA9IHJlcXVpcmUoJy4uLy4uL2NvbnN0Jyk7XG5cbi8qKlxuICogVGhlIFJvdW5kZWQgUmVjdGFuZ2xlIG9iamVjdCBpcyBhbiBhcmVhIHRoYXQgaGFzIG5pY2Ugcm91bmRlZCBjb3JuZXJzLCBhcyBpbmRpY2F0ZWQgYnkgaXRzIHRvcC1sZWZ0IGNvcm5lciBwb2ludCAoeCwgeSkgYW5kIGJ5IGl0cyB3aWR0aCBhbmQgaXRzIGhlaWdodCBhbmQgaXRzIHJhZGl1cy5cbiAqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0geCB7bnVtYmVyfSBUaGUgWCBjb29yZGluYXRlIG9mIHRoZSB1cHBlci1sZWZ0IGNvcm5lciBvZiB0aGUgcm91bmRlZCByZWN0YW5nbGVcbiAqIEBwYXJhbSB5IHtudW1iZXJ9IFRoZSBZIGNvb3JkaW5hdGUgb2YgdGhlIHVwcGVyLWxlZnQgY29ybmVyIG9mIHRoZSByb3VuZGVkIHJlY3RhbmdsZVxuICogQHBhcmFtIHdpZHRoIHtudW1iZXJ9IFRoZSBvdmVyYWxsIHdpZHRoIG9mIHRoaXMgcm91bmRlZCByZWN0YW5nbGVcbiAqIEBwYXJhbSBoZWlnaHQge251bWJlcn0gVGhlIG92ZXJhbGwgaGVpZ2h0IG9mIHRoaXMgcm91bmRlZCByZWN0YW5nbGVcbiAqIEBwYXJhbSByYWRpdXMge251bWJlcn0gQ29udHJvbHMgdGhlIHJhZGl1cyBvZiB0aGUgcm91bmRlZCBjb3JuZXJzXG4gKi9cbmZ1bmN0aW9uIFJvdW5kZWRSZWN0YW5nbGUoeCwgeSwgd2lkdGgsIGhlaWdodCwgcmFkaXVzKVxue1xuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAwXG4gICAgICovXG4gICAgdGhpcy54ID0geCB8fCAwO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDBcbiAgICAgKi9cbiAgICB0aGlzLnkgPSB5IHx8IDA7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMFxuICAgICAqL1xuICAgIHRoaXMud2lkdGggPSB3aWR0aCB8fCAwO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDBcbiAgICAgKi9cbiAgICB0aGlzLmhlaWdodCA9IGhlaWdodCB8fCAwO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDIwXG4gICAgICovXG4gICAgdGhpcy5yYWRpdXMgPSByYWRpdXMgfHwgMjA7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgdHlwZSBvZiB0aGUgb2JqZWN0LCBtYWlubHkgdXNlZCB0byBhdm9pZCBgaW5zdGFuY2VvZmAgY2hlY2tzXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy50eXBlID0gQ09OU1QuU0hBUEVTLlJSRUM7XG59XG5cblJvdW5kZWRSZWN0YW5nbGUucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gUm91bmRlZFJlY3RhbmdsZTtcbm1vZHVsZS5leHBvcnRzID0gUm91bmRlZFJlY3RhbmdsZTtcblxuLyoqXG4gKiBDcmVhdGVzIGEgY2xvbmUgb2YgdGhpcyBSb3VuZGVkIFJlY3RhbmdsZVxuICpcbiAqIEByZXR1cm4ge1BJWEkuUm91bmRlZFJlY3RhbmdsZX0gYSBjb3B5IG9mIHRoZSByb3VuZGVkIHJlY3RhbmdsZVxuICovXG5Sb3VuZGVkUmVjdGFuZ2xlLnByb3RvdHlwZS5jbG9uZSA9IGZ1bmN0aW9uICgpXG57XG4gICAgcmV0dXJuIG5ldyBSb3VuZGVkUmVjdGFuZ2xlKHRoaXMueCwgdGhpcy55LCB0aGlzLndpZHRoLCB0aGlzLmhlaWdodCwgdGhpcy5yYWRpdXMpO1xufTtcblxuLyoqXG4gKiBDaGVja3Mgd2hldGhlciB0aGUgeCBhbmQgeSBjb29yZGluYXRlcyBnaXZlbiBhcmUgY29udGFpbmVkIHdpdGhpbiB0aGlzIFJvdW5kZWQgUmVjdGFuZ2xlXG4gKlxuICogQHBhcmFtIHgge251bWJlcn0gVGhlIFggY29vcmRpbmF0ZSBvZiB0aGUgcG9pbnQgdG8gdGVzdFxuICogQHBhcmFtIHkge251bWJlcn0gVGhlIFkgY29vcmRpbmF0ZSBvZiB0aGUgcG9pbnQgdG8gdGVzdFxuICogQHJldHVybiB7Ym9vbGVhbn0gV2hldGhlciB0aGUgeC95IGNvb3JkaW5hdGVzIGFyZSB3aXRoaW4gdGhpcyBSb3VuZGVkIFJlY3RhbmdsZVxuICovXG5Sb3VuZGVkUmVjdGFuZ2xlLnByb3RvdHlwZS5jb250YWlucyA9IGZ1bmN0aW9uICh4LCB5KVxue1xuICAgIGlmICh0aGlzLndpZHRoIDw9IDAgfHwgdGhpcy5oZWlnaHQgPD0gMClcbiAgICB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBpZiAoeCA+PSB0aGlzLnggJiYgeCA8PSB0aGlzLnggKyB0aGlzLndpZHRoKVxuICAgIHtcbiAgICAgICAgaWYgKHkgPj0gdGhpcy55ICYmIHkgPD0gdGhpcy55ICsgdGhpcy5oZWlnaHQpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xufTtcbiIsInZhciBDb250YWluZXIgPSByZXF1aXJlKCcuLi9kaXNwbGF5L0NvbnRhaW5lcicpLFxuICAgIENPTlNUID0gcmVxdWlyZSgnLi4vY29uc3QnKTtcblxuLyoqXG4gKiBUaGUgUGFydGljbGVDb250YWluZXIgY2xhc3MgaXMgYSByZWFsbHkgZmFzdCB2ZXJzaW9uIG9mIHRoZSBDb250YWluZXIgYnVpbHQgc29sZWx5IGZvciBzcGVlZCxcbiAqIHNvIHVzZSB3aGVuIHlvdSBuZWVkIGEgbG90IG9mIHNwcml0ZXMgb3IgcGFydGljbGVzLiBUaGUgdHJhZGVvZmYgb2YgdGhlIFBhcnRpY2xlQ29udGFpbmVyIGlzIHRoYXQgYWR2YW5jZWRcbiAqIGZ1bmN0aW9uYWxpdHkgd2lsbCBub3Qgd29yay4gUGFydGljbGVDb250YWluZXIgaW1wbGVtZW50cyBvbmx5IHRoZSBiYXNpYyBvYmplY3QgdHJhbnNmb3JtIChwb3NpdGlvbiwgc2NhbGUsIHJvdGF0aW9uKS5cbiAqIEFueSBvdGhlciBmdW5jdGlvbmFsaXR5IGxpa2UgdGludGluZywgbWFza2luZywgZXRjIHdpbGwgbm90IHdvcmsgb24gc3ByaXRlcyBpbiB0aGlzIGJhdGNoLlxuICpcbiAqIEl0J3MgZXh0cmVtZWx5IGVhc3kgdG8gdXNlIDpcbiAqXG4gKiBgYGBqc1xuICogdmFyIGNvbnRhaW5lciA9IG5ldyBQYXJ0aWNsZUNvbnRhaW5lcigpO1xuICpcbiAqIGZvciAodmFyIGkgPSAwOyBpIDwgMTAwOyArK2kpXG4gKiB7XG4gKiAgICAgdmFyIHNwcml0ZSA9IG5ldyBQSVhJLlNwcml0ZS5mcm9tSW1hZ2UoXCJteUltYWdlLnBuZ1wiKTtcbiAqICAgICBjb250YWluZXIuYWRkQ2hpbGQoc3ByaXRlKTtcbiAqIH1cbiAqIGBgYFxuICpcbiAqIEFuZCBoZXJlIHlvdSBoYXZlIGEgaHVuZHJlZCBzcHJpdGVzIHRoYXQgd2lsbCBiZSByZW5kZXJlciBhdCB0aGUgc3BlZWQgb2YgbGlnaHQuXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLkNvbnRhaW5lclxuICogQG1lbWJlcm9mIFBJWElcbiAqIEBwYXJhbSBbbWF4U2l6ZT0xNTAwMF0ge251bWJlcn0gVGhlIG1heGltdW0gbnVtYmVyIG9mIHBhcnRpY2xlcyB0aGF0IGNhbiBiZSByZW5kZXJlciBieSB0aGUgY29udGFpbmVyLlxuICogQHBhcmFtIFtwcm9wZXJ0aWVzXSB7b2JqZWN0fSBUaGUgcHJvcGVydGllcyBvZiBjaGlsZHJlbiB0aGF0IHNob3VsZCBiZSB1cGxvYWRlZCB0byB0aGUgZ3B1IGFuZCBhcHBsaWVkLlxuICogQHBhcmFtIFtwcm9wZXJ0aWVzLnNjYWxlPWZhbHNlXSB7Ym9vbGVhbn0gV2hlbiB0cnVlLCBzY2FsZSBiZSB1cGxvYWRlZCBhbmQgYXBwbGllZC5cbiAqIEBwYXJhbSBbcHJvcGVydGllcy5wb3NpdGlvbj10cnVlXSB7Ym9vbGVhbn0gV2hlbiB0cnVlLCBwb3NpdGlvbiBiZSB1cGxvYWRlZCBhbmQgYXBwbGllZC5cbiAqIEBwYXJhbSBbcHJvcGVydGllcy5yb3RhdGlvbj1mYWxzZV0ge2Jvb2xlYW59IFdoZW4gdHJ1ZSwgcm90YXRpb24gYmUgdXBsb2FkZWQgYW5kIGFwcGxpZWQuXG4gKiBAcGFyYW0gW3Byb3BlcnRpZXMudXZzPWZhbHNlXSB7Ym9vbGVhbn0gV2hlbiB0cnVlLCB1dnMgYmUgdXBsb2FkZWQgYW5kIGFwcGxpZWQuXG4gKiBAcGFyYW0gW3Byb3BlcnRpZXMuYWxwaGE9ZmFsc2VdIHtib29sZWFufSBXaGVuIHRydWUsIGFscGhhIGJlIHVwbG9hZGVkIGFuZCBhcHBsaWVkLlxuICogQHBhcmFtIFtiYXRjaFNpemU9MTUwMDBdIHtudW1iZXJ9IE51bWJlciBvZiBwYXJ0aWNsZXMgcGVyIGJhdGNoLlxuICovXG5mdW5jdGlvbiBQYXJ0aWNsZUNvbnRhaW5lcihtYXhTaXplLCBwcm9wZXJ0aWVzLCBiYXRjaFNpemUpXG57XG4gICAgQ29udGFpbmVyLmNhbGwodGhpcyk7XG5cbiAgICBiYXRjaFNpemUgPSBiYXRjaFNpemUgfHwgMTUwMDA7IC8vQ09OU1QuU1BSSVRFX0JBVENIX1NJWkU7IC8vIDIwMDAgaXMgYSBuaWNlIGJhbGFuY2UgYmV0d2VlbiBtb2JpbGUgLyBkZXNrdG9wXG4gICAgbWF4U2l6ZSA9IG1heFNpemUgfHwgMTUwMDA7XG5cbiAgICAvLyBNYWtpbmcgc3VyZSB0aGUgYmF0Y2ggc2l6ZSBpcyB2YWxpZFxuICAgIC8vIDY1NTM1IGlzIG1heCB2ZXJ0ZXggaW5kZXggaW4gdGhlIGluZGV4IGJ1ZmZlciAoc2VlIFBhcnRpY2xlUmVuZGVyZXIpXG4gICAgLy8gc28gbWF4IG51bWJlciBvZiBwYXJ0aWNsZXMgaXMgNjU1MzYgLyA0ID0gMTYzODRcbiAgICB2YXIgbWF4QmF0Y2hTaXplID0gMTYzODQ7XG4gICAgaWYgKGJhdGNoU2l6ZSA+IG1heEJhdGNoU2l6ZSkge1xuICAgICAgICBiYXRjaFNpemUgPSBtYXhCYXRjaFNpemU7XG4gICAgfVxuXG4gICAgaWYgKGJhdGNoU2l6ZSA+IG1heFNpemUpIHtcbiAgICAgICAgYmF0Y2hTaXplID0gbWF4U2l6ZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTZXQgcHJvcGVydGllcyB0byBiZSBkeW5hbWljICh0cnVlKSAvIHN0YXRpYyAoZmFsc2UpXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFuW119XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9wcm9wZXJ0aWVzID0gW2ZhbHNlLCB0cnVlLCBmYWxzZSwgZmFsc2UsIGZhbHNlXTtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX21heFNpemUgPSBtYXhTaXplO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fYmF0Y2hTaXplID0gYmF0Y2hTaXplO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7V2ViR0xCdWZmZXJ9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9idWZmZXJzID0gbnVsbDtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX2J1ZmZlclRvVXBkYXRlID0gMDtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICpcbiAgICAgKi9cbiAgICB0aGlzLmludGVyYWN0aXZlQ2hpbGRyZW4gPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBibGVuZCBtb2RlIHRvIGJlIGFwcGxpZWQgdG8gdGhlIHNwcml0ZS4gQXBwbHkgYSB2YWx1ZSBvZiBgUElYSS5CTEVORF9NT0RFUy5OT1JNQUxgIHRvIHJlc2V0IHRoZSBibGVuZCBtb2RlLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IFBJWEkuQkxFTkRfTU9ERVMuTk9STUFMXG4gICAgICogQHNlZSBQSVhJLkJMRU5EX01PREVTXG4gICAgICovXG4gICAgdGhpcy5ibGVuZE1vZGUgPSBDT05TVC5CTEVORF9NT0RFUy5OT1JNQUw7XG5cbiAgICAvKipcbiAgICAgKiBVc2VkIGZvciBjYW52YXMgcmVuZGVyZXJpbmcuIElmIHRydWUgdGhlbiB0aGUgZWxlbWVudHMgd2lsbCBiZSBwb3NpdGlvbmVkIGF0IHRoZSBuZWFyZXN0IHBpeGVsLiBUaGlzIHByb3ZpZGVzIGEgbmljZSBzcGVlZCBib29zdC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICogQGRlZmF1bHQgdHJ1ZTtcbiAgICAgKi9cbiAgICB0aGlzLnJvdW5kUGl4ZWxzID0gdHJ1ZTtcblxuICAgIHRoaXMuc2V0UHJvcGVydGllcyhwcm9wZXJ0aWVzKTtcbn1cblxuUGFydGljbGVDb250YWluZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShDb250YWluZXIucHJvdG90eXBlKTtcblBhcnRpY2xlQ29udGFpbmVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFBhcnRpY2xlQ29udGFpbmVyO1xubW9kdWxlLmV4cG9ydHMgPSBQYXJ0aWNsZUNvbnRhaW5lcjtcblxuLyoqXG4gKiBTZXRzIHRoZSBwcml2YXRlIHByb3BlcnRpZXMgYXJyYXkgdG8gZHluYW1pYyAvIHN0YXRpYyBiYXNlZCBvbiB0aGUgcGFzc2VkIHByb3BlcnRpZXMgb2JqZWN0XG4gKlxuICogQHBhcmFtIHByb3BlcnRpZXMge29iamVjdH0gVGhlIHByb3BlcnRpZXMgdG8gYmUgdXBsb2FkZWRcbiAqL1xuUGFydGljbGVDb250YWluZXIucHJvdG90eXBlLnNldFByb3BlcnRpZXMgPSBmdW5jdGlvbihwcm9wZXJ0aWVzKVxue1xuICAgIGlmICggcHJvcGVydGllcyApIHtcbiAgICAgICAgdGhpcy5fcHJvcGVydGllc1swXSA9ICdzY2FsZScgaW4gcHJvcGVydGllcyA/ICEhcHJvcGVydGllcy5zY2FsZSA6IHRoaXMuX3Byb3BlcnRpZXNbMF07XG4gICAgICAgIHRoaXMuX3Byb3BlcnRpZXNbMV0gPSAncG9zaXRpb24nIGluIHByb3BlcnRpZXMgPyAhIXByb3BlcnRpZXMucG9zaXRpb24gOiB0aGlzLl9wcm9wZXJ0aWVzWzFdO1xuICAgICAgICB0aGlzLl9wcm9wZXJ0aWVzWzJdID0gJ3JvdGF0aW9uJyBpbiBwcm9wZXJ0aWVzID8gISFwcm9wZXJ0aWVzLnJvdGF0aW9uIDogdGhpcy5fcHJvcGVydGllc1syXTtcbiAgICAgICAgdGhpcy5fcHJvcGVydGllc1szXSA9ICd1dnMnIGluIHByb3BlcnRpZXMgPyAhIXByb3BlcnRpZXMudXZzIDogdGhpcy5fcHJvcGVydGllc1szXTtcbiAgICAgICAgdGhpcy5fcHJvcGVydGllc1s0XSA9ICdhbHBoYScgaW4gcHJvcGVydGllcyA/ICEhcHJvcGVydGllcy5hbHBoYSA6IHRoaXMuX3Byb3BlcnRpZXNbNF07XG4gICAgfVxufTtcblxuLyoqXG4gKiBVcGRhdGVzIHRoZSBvYmplY3QgdHJhbnNmb3JtIGZvciByZW5kZXJpbmdcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5QYXJ0aWNsZUNvbnRhaW5lci5wcm90b3R5cGUudXBkYXRlVHJhbnNmb3JtID0gZnVuY3Rpb24gKClcbntcblxuICAgIC8vIFRPRE8gZG9uJ3QgbmVlZCB0byFcbiAgICB0aGlzLmRpc3BsYXlPYmplY3RVcGRhdGVUcmFuc2Zvcm0oKTtcbiAgICAvLyAgUElYSS5Db250YWluZXIucHJvdG90eXBlLnVwZGF0ZVRyYW5zZm9ybS5jYWxsKCB0aGlzICk7XG59O1xuXG4vKipcbiAqIFJlbmRlcnMgdGhlIGNvbnRhaW5lciB1c2luZyB0aGUgV2ViR0wgcmVuZGVyZXJcbiAqXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcn0gVGhlIHdlYmdsIHJlbmRlcmVyXG4gKiBAcHJpdmF0ZVxuICovXG5QYXJ0aWNsZUNvbnRhaW5lci5wcm90b3R5cGUucmVuZGVyV2ViR0wgPSBmdW5jdGlvbiAocmVuZGVyZXIpXG57XG4gICAgaWYgKCF0aGlzLnZpc2libGUgfHwgdGhpcy53b3JsZEFscGhhIDw9IDAgfHwgIXRoaXMuY2hpbGRyZW4ubGVuZ3RoIHx8ICF0aGlzLnJlbmRlcmFibGUpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgcmVuZGVyZXIuc2V0T2JqZWN0UmVuZGVyZXIoIHJlbmRlcmVyLnBsdWdpbnMucGFydGljbGUgKTtcbiAgICByZW5kZXJlci5wbHVnaW5zLnBhcnRpY2xlLnJlbmRlciggdGhpcyApO1xufTtcblxuLyoqXG4gKiBTZXQgdGhlIGZsYWcgdGhhdCBzdGF0aWMgZGF0YSBzaG91bGQgYmUgdXBkYXRlZCB0byB0cnVlXG4gKlxuICogQHByaXZhdGVcbiAqL1xuUGFydGljbGVDb250YWluZXIucHJvdG90eXBlLm9uQ2hpbGRyZW5DaGFuZ2UgPSBmdW5jdGlvbiAoc21hbGxlc3RDaGlsZEluZGV4KVxue1xuICAgIHZhciBidWZmZXJJbmRleCA9IE1hdGguZmxvb3Ioc21hbGxlc3RDaGlsZEluZGV4IC8gdGhpcy5fYmF0Y2hTaXplKTtcbiAgICBpZiAoYnVmZmVySW5kZXggPCB0aGlzLl9idWZmZXJUb1VwZGF0ZSkge1xuICAgICAgICB0aGlzLl9idWZmZXJUb1VwZGF0ZSA9IGJ1ZmZlckluZGV4O1xuICAgIH1cbn07XG5cbi8qKlxuICogUmVuZGVycyB0aGUgb2JqZWN0IHVzaW5nIHRoZSBDYW52YXMgcmVuZGVyZXJcbiAqXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuQ2FudmFzUmVuZGVyZXJ9IFRoZSBjYW52YXMgcmVuZGVyZXJcbiAqIEBwcml2YXRlXG4gKi9cblBhcnRpY2xlQ29udGFpbmVyLnByb3RvdHlwZS5yZW5kZXJDYW52YXMgPSBmdW5jdGlvbiAocmVuZGVyZXIpXG57XG4gICAgaWYgKCF0aGlzLnZpc2libGUgfHwgdGhpcy53b3JsZEFscGhhIDw9IDAgfHwgIXRoaXMuY2hpbGRyZW4ubGVuZ3RoIHx8ICF0aGlzLnJlbmRlcmFibGUpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFyIGNvbnRleHQgPSByZW5kZXJlci5jb250ZXh0O1xuICAgIHZhciB0cmFuc2Zvcm0gPSB0aGlzLndvcmxkVHJhbnNmb3JtO1xuICAgIHZhciBpc1JvdGF0ZWQgPSB0cnVlO1xuXG4gICAgdmFyIHBvc2l0aW9uWCA9IDA7XG4gICAgdmFyIHBvc2l0aW9uWSA9IDA7XG5cbiAgICB2YXIgZmluYWxXaWR0aCA9IDA7XG4gICAgdmFyIGZpbmFsSGVpZ2h0ID0gMDtcblxuICAgIHZhciBjb21wb3NpdGVPcGVyYXRpb24gPSByZW5kZXJlci5ibGVuZE1vZGVzW3RoaXMuYmxlbmRNb2RlXTtcbiAgICBpZiAoY29tcG9zaXRlT3BlcmF0aW9uICE9PSBjb250ZXh0Lmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbilcbiAgICB7XG4gICAgICAgIGNvbnRleHQuZ2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uID0gY29tcG9zaXRlT3BlcmF0aW9uO1xuICAgIH1cblxuICAgIGNvbnRleHQuZ2xvYmFsQWxwaGEgPSB0aGlzLndvcmxkQWxwaGE7XG5cbiAgICB0aGlzLmRpc3BsYXlPYmplY3RVcGRhdGVUcmFuc2Zvcm0oKTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5jaGlsZHJlbi5sZW5ndGg7ICsraSlcbiAgICB7XG4gICAgICAgIHZhciBjaGlsZCA9IHRoaXMuY2hpbGRyZW5baV07XG5cbiAgICAgICAgaWYgKCFjaGlsZC52aXNpYmxlKVxuICAgICAgICB7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBmcmFtZSA9IGNoaWxkLnRleHR1cmUuZnJhbWU7XG5cbiAgICAgICAgY29udGV4dC5nbG9iYWxBbHBoYSA9IHRoaXMud29ybGRBbHBoYSAqIGNoaWxkLmFscGhhO1xuXG4gICAgICAgIGlmIChjaGlsZC5yb3RhdGlvbiAlIChNYXRoLlBJICogMikgPT09IDApXG4gICAgICAgIHtcbiAgICAgICAgICAgIC8vIHRoaXMgaXMgdGhlIGZhc3Rlc3QgIHdheSB0byBvcHRpbWlzZSEgLSBpZiByb3RhdGlvbiBpcyAwIHRoZW4gd2UgY2FuIGF2b2lkIGFueSBraW5kIG9mIHNldFRyYW5zZm9ybSBjYWxsXG4gICAgICAgICAgICBpZiAoaXNSb3RhdGVkKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGNvbnRleHQuc2V0VHJhbnNmb3JtKFxuICAgICAgICAgICAgICAgICAgICB0cmFuc2Zvcm0uYSxcbiAgICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtLmIsXG4gICAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybS5jLFxuICAgICAgICAgICAgICAgICAgICB0cmFuc2Zvcm0uZCxcbiAgICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtLnR4LFxuICAgICAgICAgICAgICAgICAgICB0cmFuc2Zvcm0udHlcbiAgICAgICAgICAgICAgICApO1xuXG4gICAgICAgICAgICAgICAgaXNSb3RhdGVkID0gZmFsc2U7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHBvc2l0aW9uWCA9ICgoY2hpbGQuYW5jaG9yLngpICogKC1mcmFtZS53aWR0aCAqIGNoaWxkLnNjYWxlLngpICsgY2hpbGQucG9zaXRpb24ueCAgKyAwLjUpO1xuICAgICAgICAgICAgcG9zaXRpb25ZID0gKChjaGlsZC5hbmNob3IueSkgKiAoLWZyYW1lLmhlaWdodCAqIGNoaWxkLnNjYWxlLnkpICsgY2hpbGQucG9zaXRpb24ueSAgKyAwLjUpO1xuXG4gICAgICAgICAgICBmaW5hbFdpZHRoID0gZnJhbWUud2lkdGggKiBjaGlsZC5zY2FsZS54O1xuICAgICAgICAgICAgZmluYWxIZWlnaHQgPSBmcmFtZS5oZWlnaHQgKiBjaGlsZC5zY2FsZS55O1xuXG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgICBpZiAoIWlzUm90YXRlZClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBpc1JvdGF0ZWQgPSB0cnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjaGlsZC5kaXNwbGF5T2JqZWN0VXBkYXRlVHJhbnNmb3JtKCk7XG5cbiAgICAgICAgICAgIHZhciBjaGlsZFRyYW5zZm9ybSA9IGNoaWxkLndvcmxkVHJhbnNmb3JtO1xuXG4gICAgICAgICAgICBpZiAocmVuZGVyZXIucm91bmRQaXhlbHMpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29udGV4dC5zZXRUcmFuc2Zvcm0oXG4gICAgICAgICAgICAgICAgICAgIGNoaWxkVHJhbnNmb3JtLmEsXG4gICAgICAgICAgICAgICAgICAgIGNoaWxkVHJhbnNmb3JtLmIsXG4gICAgICAgICAgICAgICAgICAgIGNoaWxkVHJhbnNmb3JtLmMsXG4gICAgICAgICAgICAgICAgICAgIGNoaWxkVHJhbnNmb3JtLmQsXG4gICAgICAgICAgICAgICAgICAgIGNoaWxkVHJhbnNmb3JtLnR4IHwgMCxcbiAgICAgICAgICAgICAgICAgICAgY2hpbGRUcmFuc2Zvcm0udHkgfCAwXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb250ZXh0LnNldFRyYW5zZm9ybShcbiAgICAgICAgICAgICAgICAgICAgY2hpbGRUcmFuc2Zvcm0uYSxcbiAgICAgICAgICAgICAgICAgICAgY2hpbGRUcmFuc2Zvcm0uYixcbiAgICAgICAgICAgICAgICAgICAgY2hpbGRUcmFuc2Zvcm0uYyxcbiAgICAgICAgICAgICAgICAgICAgY2hpbGRUcmFuc2Zvcm0uZCxcbiAgICAgICAgICAgICAgICAgICAgY2hpbGRUcmFuc2Zvcm0udHgsXG4gICAgICAgICAgICAgICAgICAgIGNoaWxkVHJhbnNmb3JtLnR5XG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcG9zaXRpb25YID0gKChjaGlsZC5hbmNob3IueCkgKiAoLWZyYW1lLndpZHRoKSArIDAuNSk7XG4gICAgICAgICAgICBwb3NpdGlvblkgPSAoKGNoaWxkLmFuY2hvci55KSAqICgtZnJhbWUuaGVpZ2h0KSArIDAuNSk7XG5cbiAgICAgICAgICAgIGZpbmFsV2lkdGggPSBmcmFtZS53aWR0aDtcbiAgICAgICAgICAgIGZpbmFsSGVpZ2h0ID0gZnJhbWUuaGVpZ2h0O1xuICAgICAgICB9XG5cbiAgICAgICAgY29udGV4dC5kcmF3SW1hZ2UoXG4gICAgICAgICAgICBjaGlsZC50ZXh0dXJlLmJhc2VUZXh0dXJlLnNvdXJjZSxcbiAgICAgICAgICAgIGZyYW1lLngsXG4gICAgICAgICAgICBmcmFtZS55LFxuICAgICAgICAgICAgZnJhbWUud2lkdGgsXG4gICAgICAgICAgICBmcmFtZS5oZWlnaHQsXG4gICAgICAgICAgICBwb3NpdGlvblgsXG4gICAgICAgICAgICBwb3NpdGlvblksXG4gICAgICAgICAgICBmaW5hbFdpZHRoLFxuICAgICAgICAgICAgZmluYWxIZWlnaHRcbiAgICAgICAgKTtcbiAgICB9XG59O1xuXG4vKipcbiAqIERlc3Ryb3lzIHRoZSBjb250YWluZXJcbiAqXG4gKiBAcGFyYW0gW2Rlc3Ryb3lDaGlsZHJlbj1mYWxzZV0ge2Jvb2xlYW59IGlmIHNldCB0byB0cnVlLCBhbGwgdGhlIGNoaWxkcmVuIHdpbGwgaGF2ZSB0aGVpciBkZXN0cm95IG1ldGhvZCBjYWxsZWQgYXMgd2VsbFxuICovXG5QYXJ0aWNsZUNvbnRhaW5lci5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uICgpIHtcbiAgICBDb250YWluZXIucHJvdG90eXBlLmRlc3Ryb3kuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcblxuICAgIGlmICh0aGlzLl9idWZmZXJzKSB7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5fYnVmZmVycy5sZW5ndGg7ICsraSkge1xuICAgICAgICAgICAgdGhpcy5fYnVmZmVyc1tpXS5kZXN0cm95KCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLl9wcm9wZXJ0aWVzID0gbnVsbDtcbiAgICB0aGlzLl9idWZmZXJzID0gbnVsbDtcbn07XG4iLCJcbi8qKlxuICogQGF1dGhvciBNYXQgR3JvdmVzXG4gKlxuICogQmlnIHRoYW5rcyB0byB0aGUgdmVyeSBjbGV2ZXIgTWF0dCBEZXNMYXVyaWVycyA8bWF0dGRlc2w+IGh0dHBzOi8vZ2l0aHViLmNvbS9tYXR0ZGVzbC9cbiAqIGZvciBjcmVhdGluZyB0aGUgb3JpZ2luYWwgcGl4aSB2ZXJzaW9uIVxuICogQWxzbyBhIHRoYW5rcyB0byBodHRwczovL2dpdGh1Yi5jb20vYmNoZXZhbGllciBmb3IgdHdlYWtpbmcgdGhlIHRpbnQgYW5kIGFscGhhIHNvIHRoYXQgdGhleSBub3cgc2hhcmUgNCBieXRlcyBvbiB0aGUgdmVydGV4IGJ1ZmZlclxuICpcbiAqIEhlYXZpbHkgaW5zcGlyZWQgYnkgTGliR0RYJ3MgUGFydGljbGVCdWZmZXI6XG4gKiBodHRwczovL2dpdGh1Yi5jb20vbGliZ2R4L2xpYmdkeC9ibG9iL21hc3Rlci9nZHgvc3JjL2NvbS9iYWRsb2dpYy9nZHgvZ3JhcGhpY3MvZzJkL1BhcnRpY2xlQnVmZmVyLmphdmFcbiAqL1xuXG4vKipcbiAqIFRoZSBwYXJ0aWNsZSBidWZmZXIgbWFuYWdlcyB0aGUgc3RhdGljIGFuZCBkeW5hbWljIGJ1ZmZlcnMgZm9yIGEgcGFydGljbGUgY29udGFpbmVyLlxuICpcbiAqIEBjbGFzc1xuICogQHByaXZhdGVcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKi9cbmZ1bmN0aW9uIFBhcnRpY2xlQnVmZmVyKGdsLCBwcm9wZXJ0aWVzLCBkeW5hbWljUHJvcGVydHlGbGFncywgc2l6ZSlcbntcbiAgICAvKipcbiAgICAgKiBUaGUgY3VycmVudCBXZWJHTCBkcmF3aW5nIGNvbnRleHQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtXZWJHTFJlbmRlcmluZ0NvbnRleHR9XG4gICAgICovXG4gICAgdGhpcy5nbCA9IGdsO1xuXG4gICAgLyoqXG4gICAgICogU2l6ZSBvZiBhIHNpbmdsZSB2ZXJ0ZXguXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy52ZXJ0U2l6ZSA9IDI7XG5cbiAgICAvKipcbiAgICAgKiBTaXplIG9mIGEgc2luZ2xlIHZlcnRleCBpbiBieXRlcy5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLnZlcnRCeXRlU2l6ZSA9IHRoaXMudmVydFNpemUgKiA0O1xuXG4gICAgLyoqXG4gICAgICogVGhlIG51bWJlciBvZiBwYXJ0aWNsZXMgdGhlIGJ1ZmZlciBjYW4gaG9sZFxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMuc2l6ZSA9IHNpemU7XG5cbiAgICAvKipcbiAgICAgKiBBIGxpc3Qgb2YgdGhlIHByb3BlcnRpZXMgdGhhdCBhcmUgZHluYW1pYy5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge29iamVjdFtdfVxuICAgICAqL1xuICAgIHRoaXMuZHluYW1pY1Byb3BlcnRpZXMgPSBbXTtcblxuICAgIC8qKlxuICAgICAqIEEgbGlzdCBvZiB0aGUgcHJvcGVydGllcyB0aGF0IGFyZSBzdGF0aWMuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtvYmplY3RbXX1cbiAgICAgKi9cbiAgICB0aGlzLnN0YXRpY1Byb3BlcnRpZXMgPSBbXTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcGVydGllcy5sZW5ndGg7IGkrKylcbiAgICB7XG4gICAgICAgIHZhciBwcm9wZXJ0eSA9IHByb3BlcnRpZXNbaV07XG5cbiAgICAgICAgaWYoZHluYW1pY1Byb3BlcnR5RmxhZ3NbaV0pXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuZHluYW1pY1Byb3BlcnRpZXMucHVzaChwcm9wZXJ0eSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnN0YXRpY1Byb3BlcnRpZXMucHVzaChwcm9wZXJ0eSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLnN0YXRpY1N0cmlkZSA9IDA7XG4gICAgdGhpcy5zdGF0aWNCdWZmZXIgPSBudWxsO1xuICAgIHRoaXMuc3RhdGljRGF0YSA9IG51bGw7XG5cbiAgICB0aGlzLmR5bmFtaWNTdHJpZGUgPSAwO1xuICAgIHRoaXMuZHluYW1pY0J1ZmZlciA9IG51bGw7XG4gICAgdGhpcy5keW5hbWljRGF0YSA9IG51bGw7XG5cbiAgICB0aGlzLmluaXRCdWZmZXJzKCk7XG5cbn1cblxuUGFydGljbGVCdWZmZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gUGFydGljbGVCdWZmZXI7XG5tb2R1bGUuZXhwb3J0cyA9IFBhcnRpY2xlQnVmZmVyO1xuXG4vKipcbiAqIFNldHMgdXAgdGhlIHJlbmRlcmVyIGNvbnRleHQgYW5kIG5lY2Vzc2FyeSBidWZmZXJzLlxuICpcbiAqIEBwcml2YXRlXG4gKi9cblBhcnRpY2xlQnVmZmVyLnByb3RvdHlwZS5pbml0QnVmZmVycyA9IGZ1bmN0aW9uICgpXG57XG4gICAgdmFyIGdsID0gdGhpcy5nbDtcbiAgICB2YXIgaTtcbiAgICB2YXIgcHJvcGVydHk7XG5cbiAgICB2YXIgZHluYW1pY09mZnNldCA9IDA7XG4gICAgdGhpcy5keW5hbWljU3RyaWRlID0gMDtcblxuICAgIGZvciAoaSA9IDA7IGkgPCB0aGlzLmR5bmFtaWNQcm9wZXJ0aWVzLmxlbmd0aDsgaSsrKVxuICAgIHtcbiAgICAgICAgcHJvcGVydHkgPSB0aGlzLmR5bmFtaWNQcm9wZXJ0aWVzW2ldO1xuXG4gICAgICAgIHByb3BlcnR5Lm9mZnNldCA9IGR5bmFtaWNPZmZzZXQ7XG4gICAgICAgIGR5bmFtaWNPZmZzZXQgKz0gcHJvcGVydHkuc2l6ZTtcbiAgICAgICAgdGhpcy5keW5hbWljU3RyaWRlICs9IHByb3BlcnR5LnNpemU7XG4gICAgfVxuXG4gICAgdGhpcy5keW5hbWljRGF0YSA9IG5ldyBGbG9hdDMyQXJyYXkoIHRoaXMuc2l6ZSAqIHRoaXMuZHluYW1pY1N0cmlkZSAqIDQpO1xuICAgIHRoaXMuZHluYW1pY0J1ZmZlciA9IGdsLmNyZWF0ZUJ1ZmZlcigpO1xuXG4gICAgZ2wuYmluZEJ1ZmZlcihnbC5BUlJBWV9CVUZGRVIsIHRoaXMuZHluYW1pY0J1ZmZlcik7XG4gICAgZ2wuYnVmZmVyRGF0YShnbC5BUlJBWV9CVUZGRVIsIHRoaXMuZHluYW1pY0RhdGEsIGdsLkRZTkFNSUNfRFJBVyk7XG5cblxuICAgIC8vIHN0YXRpYyAvL1xuICAgIHZhciBzdGF0aWNPZmZzZXQgPSAwO1xuICAgIHRoaXMuc3RhdGljU3RyaWRlID0gMDtcblxuICAgIGZvciAoaSA9IDA7IGkgPCB0aGlzLnN0YXRpY1Byb3BlcnRpZXMubGVuZ3RoOyBpKyspXG4gICAge1xuICAgICAgICBwcm9wZXJ0eSA9IHRoaXMuc3RhdGljUHJvcGVydGllc1tpXTtcblxuICAgICAgICBwcm9wZXJ0eS5vZmZzZXQgPSBzdGF0aWNPZmZzZXQ7XG4gICAgICAgIHN0YXRpY09mZnNldCArPSBwcm9wZXJ0eS5zaXplO1xuICAgICAgICB0aGlzLnN0YXRpY1N0cmlkZSArPSBwcm9wZXJ0eS5zaXplO1xuICAgIH1cblxuICAgIHRoaXMuc3RhdGljRGF0YSA9IG5ldyBGbG9hdDMyQXJyYXkoIHRoaXMuc2l6ZSAqIHRoaXMuc3RhdGljU3RyaWRlICogNCk7XG4gICAgdGhpcy5zdGF0aWNCdWZmZXIgPSBnbC5jcmVhdGVCdWZmZXIoKTtcblxuICAgIGdsLmJpbmRCdWZmZXIoZ2wuQVJSQVlfQlVGRkVSLCB0aGlzLnN0YXRpY0J1ZmZlcik7XG4gICAgZ2wuYnVmZmVyRGF0YShnbC5BUlJBWV9CVUZGRVIsIHRoaXMuc3RhdGljRGF0YSwgZ2wuRFlOQU1JQ19EUkFXKTtcbn07XG5cbi8qKlxuICogVXBsb2FkcyB0aGUgZHluYW1pYyBwcm9wZXJ0aWVzLlxuICpcbiAqL1xuUGFydGljbGVCdWZmZXIucHJvdG90eXBlLnVwbG9hZER5bmFtaWMgPSBmdW5jdGlvbihjaGlsZHJlbiwgc3RhcnRJbmRleCwgYW1vdW50KVxue1xuICAgIHZhciBnbCA9IHRoaXMuZ2w7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuZHluYW1pY1Byb3BlcnRpZXMubGVuZ3RoOyBpKyspXG4gICAge1xuICAgICAgICB2YXIgcHJvcGVydHkgPSB0aGlzLmR5bmFtaWNQcm9wZXJ0aWVzW2ldO1xuICAgICAgICBwcm9wZXJ0eS51cGxvYWRGdW5jdGlvbihjaGlsZHJlbiwgc3RhcnRJbmRleCwgYW1vdW50LCB0aGlzLmR5bmFtaWNEYXRhLCB0aGlzLmR5bmFtaWNTdHJpZGUsIHByb3BlcnR5Lm9mZnNldCk7XG4gICAgfVxuXG4gICAgZ2wuYmluZEJ1ZmZlcihnbC5BUlJBWV9CVUZGRVIsIHRoaXMuZHluYW1pY0J1ZmZlcik7XG4gICAgZ2wuYnVmZmVyU3ViRGF0YShnbC5BUlJBWV9CVUZGRVIsIDAsIHRoaXMuZHluYW1pY0RhdGEpO1xufTtcblxuLyoqXG4gKiBVcGxvYWRzIHRoZSBzdGF0aWMgcHJvcGVydGllcy5cbiAqXG4gKi9cblBhcnRpY2xlQnVmZmVyLnByb3RvdHlwZS51cGxvYWRTdGF0aWMgPSBmdW5jdGlvbihjaGlsZHJlbiwgc3RhcnRJbmRleCwgYW1vdW50KVxue1xuICAgIHZhciBnbCA9IHRoaXMuZ2w7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuc3RhdGljUHJvcGVydGllcy5sZW5ndGg7IGkrKylcbiAgICB7XG4gICAgICAgIHZhciBwcm9wZXJ0eSA9IHRoaXMuc3RhdGljUHJvcGVydGllc1tpXTtcbiAgICAgICAgcHJvcGVydHkudXBsb2FkRnVuY3Rpb24oY2hpbGRyZW4sIHN0YXJ0SW5kZXgsIGFtb3VudCwgdGhpcy5zdGF0aWNEYXRhLCB0aGlzLnN0YXRpY1N0cmlkZSwgcHJvcGVydHkub2Zmc2V0KTtcbiAgICB9XG5cbiAgICBnbC5iaW5kQnVmZmVyKGdsLkFSUkFZX0JVRkZFUiwgdGhpcy5zdGF0aWNCdWZmZXIpO1xuICAgIGdsLmJ1ZmZlclN1YkRhdGEoZ2wuQVJSQVlfQlVGRkVSLCAwLCB0aGlzLnN0YXRpY0RhdGEpO1xufTtcblxuLyoqXG4gKiBCaW5kcyB0aGUgYnVmZmVycyB0byB0aGUgR1BVXG4gKlxuICovXG5QYXJ0aWNsZUJ1ZmZlci5wcm90b3R5cGUuYmluZCA9IGZ1bmN0aW9uICgpXG57XG4gICAgdmFyIGdsID0gdGhpcy5nbDtcbiAgICB2YXIgaSwgcHJvcGVydHk7XG5cbiAgICBnbC5iaW5kQnVmZmVyKGdsLkFSUkFZX0JVRkZFUiwgdGhpcy5keW5hbWljQnVmZmVyKTtcblxuICAgIGZvciAoaSA9IDA7IGkgPCB0aGlzLmR5bmFtaWNQcm9wZXJ0aWVzLmxlbmd0aDsgaSsrKVxuICAgIHtcbiAgICAgICAgcHJvcGVydHkgPSB0aGlzLmR5bmFtaWNQcm9wZXJ0aWVzW2ldO1xuICAgICAgICBnbC52ZXJ0ZXhBdHRyaWJQb2ludGVyKHByb3BlcnR5LmF0dHJpYnV0ZSwgcHJvcGVydHkuc2l6ZSwgZ2wuRkxPQVQsIGZhbHNlLCB0aGlzLmR5bmFtaWNTdHJpZGUgKiA0LCBwcm9wZXJ0eS5vZmZzZXQgKiA0KTtcbiAgICB9XG5cbiAgICBnbC5iaW5kQnVmZmVyKGdsLkFSUkFZX0JVRkZFUiwgdGhpcy5zdGF0aWNCdWZmZXIpO1xuXG4gICAgZm9yIChpID0gMDsgaSA8IHRoaXMuc3RhdGljUHJvcGVydGllcy5sZW5ndGg7IGkrKylcbiAgICB7XG4gICAgICAgIHByb3BlcnR5ID0gdGhpcy5zdGF0aWNQcm9wZXJ0aWVzW2ldO1xuICAgICAgICBnbC52ZXJ0ZXhBdHRyaWJQb2ludGVyKHByb3BlcnR5LmF0dHJpYnV0ZSwgcHJvcGVydHkuc2l6ZSwgZ2wuRkxPQVQsIGZhbHNlLCB0aGlzLnN0YXRpY1N0cmlkZSAqIDQsIHByb3BlcnR5Lm9mZnNldCAqIDQpO1xuICAgIH1cbn07XG5cbi8qKlxuICogRGVzdHJveXMgdGhlIFBhcnRpY2xlQnVmZmVyLlxuICpcbiAqL1xuUGFydGljbGVCdWZmZXIucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoKVxue1xuICAgIHRoaXMuZHluYW1pY1Byb3BlcnRpZXMgPSBudWxsO1xuICAgIHRoaXMuZHluYW1pY0RhdGEgPSBudWxsO1xuICAgIHRoaXMuZ2wuZGVsZXRlQnVmZmVyKHRoaXMuZHluYW1pY0J1ZmZlcik7XG5cbiAgICB0aGlzLnN0YXRpY1Byb3BlcnRpZXMgPSBudWxsO1xuICAgIHRoaXMuc3RhdGljRGF0YSA9IG51bGw7XG4gICAgdGhpcy5nbC5kZWxldGVCdWZmZXIodGhpcy5zdGF0aWNCdWZmZXIpO1xufTtcbiIsInZhciBPYmplY3RSZW5kZXJlciA9IHJlcXVpcmUoJy4uLy4uL3JlbmRlcmVycy93ZWJnbC91dGlscy9PYmplY3RSZW5kZXJlcicpLFxuICAgIFdlYkdMUmVuZGVyZXIgPSByZXF1aXJlKCcuLi8uLi9yZW5kZXJlcnMvd2ViZ2wvV2ViR0xSZW5kZXJlcicpLFxuICAgIFBhcnRpY2xlU2hhZGVyID0gcmVxdWlyZSgnLi9QYXJ0aWNsZVNoYWRlcicpLFxuICAgIFBhcnRpY2xlQnVmZmVyID0gcmVxdWlyZSgnLi9QYXJ0aWNsZUJ1ZmZlcicpLFxuICAgIG1hdGggICAgICAgICAgICA9IHJlcXVpcmUoJy4uLy4uL21hdGgnKTtcblxuLyoqXG4gKiBAYXV0aG9yIE1hdCBHcm92ZXNcbiAqXG4gKiBCaWcgdGhhbmtzIHRvIHRoZSB2ZXJ5IGNsZXZlciBNYXR0IERlc0xhdXJpZXJzIDxtYXR0ZGVzbD4gaHR0cHM6Ly9naXRodWIuY29tL21hdHRkZXNsL1xuICogZm9yIGNyZWF0aW5nIHRoZSBvcmlnaW5hbCBwaXhpIHZlcnNpb24hXG4gKiBBbHNvIGEgdGhhbmtzIHRvIGh0dHBzOi8vZ2l0aHViLmNvbS9iY2hldmFsaWVyIGZvciB0d2Vha2luZyB0aGUgdGludCBhbmQgYWxwaGEgc28gdGhhdCB0aGV5IG5vdyBzaGFyZSA0IGJ5dGVzIG9uIHRoZSB2ZXJ0ZXggYnVmZmVyXG4gKlxuICogSGVhdmlseSBpbnNwaXJlZCBieSBMaWJHRFgncyBQYXJ0aWNsZVJlbmRlcmVyOlxuICogaHR0cHM6Ly9naXRodWIuY29tL2xpYmdkeC9saWJnZHgvYmxvYi9tYXN0ZXIvZ2R4L3NyYy9jb20vYmFkbG9naWMvZ2R4L2dyYXBoaWNzL2cyZC9QYXJ0aWNsZVJlbmRlcmVyLmphdmFcbiAqL1xuXG4vKipcbiAqXG4gKiBAY2xhc3NcbiAqIEBwcml2YXRlXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLldlYkdMUmVuZGVyZXJ9IFRoZSByZW5kZXJlciB0aGlzIHNwcml0ZSBiYXRjaCB3b3JrcyBmb3IuXG4gKi9cbmZ1bmN0aW9uIFBhcnRpY2xlUmVuZGVyZXIocmVuZGVyZXIpXG57XG4gICAgT2JqZWN0UmVuZGVyZXIuY2FsbCh0aGlzLCByZW5kZXJlcik7XG5cbiAgICAvLyA2NTUzNSBpcyBtYXggdmVydGV4IGluZGV4IGluIHRoZSBpbmRleCBidWZmZXIgKHNlZSBQYXJ0aWNsZVJlbmRlcmVyKVxuICAgIC8vIHNvIG1heCBudW1iZXIgb2YgcGFydGljbGVzIGlzIDY1NTM2IC8gNCA9IDE2Mzg0XG4gICAgLy8gYW5kIG1heCBudW1iZXIgb2YgZWxlbWVudCBpbiB0aGUgaW5kZXggYnVmZmVyIGlzIDE2Mzg0ICogNiA9IDk4MzA0XG4gICAgLy8gQ3JlYXRpbmcgYSBmdWxsIGluZGV4IGJ1ZmZlciwgb3ZlcmhlYWQgaXMgOTgzMDQgKiAyID0gMTk2S29cbiAgICB2YXIgbnVtSW5kaWNlcyA9IDk4MzA0O1xuXG4gICAgLyoqXG4gICAgICogSG9sZHMgdGhlIGluZGljZXNcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1VpbnQxNkFycmF5fVxuICAgICAqL1xuICAgIHRoaXMuaW5kaWNlcyA9IG5ldyBVaW50MTZBcnJheShudW1JbmRpY2VzKTtcblxuICAgIGZvciAodmFyIGk9MCwgaj0wOyBpIDwgbnVtSW5kaWNlczsgaSArPSA2LCBqICs9IDQpXG4gICAge1xuICAgICAgICB0aGlzLmluZGljZXNbaSArIDBdID0gaiArIDA7XG4gICAgICAgIHRoaXMuaW5kaWNlc1tpICsgMV0gPSBqICsgMTtcbiAgICAgICAgdGhpcy5pbmRpY2VzW2kgKyAyXSA9IGogKyAyO1xuICAgICAgICB0aGlzLmluZGljZXNbaSArIDNdID0gaiArIDA7XG4gICAgICAgIHRoaXMuaW5kaWNlc1tpICsgNF0gPSBqICsgMjtcbiAgICAgICAgdGhpcy5pbmRpY2VzW2kgKyA1XSA9IGogKyAzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoZSBkZWZhdWx0IHNoYWRlciB0aGF0IGlzIHVzZWQgaWYgYSBzcHJpdGUgZG9lc24ndCBoYXZlIGEgbW9yZSBzcGVjaWZpYyBvbmUuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlNoYWRlcn1cbiAgICAgKi9cbiAgICB0aGlzLnNoYWRlciA9IG51bGw7XG5cbiAgICB0aGlzLmluZGV4QnVmZmVyID0gbnVsbDtcblxuICAgIHRoaXMucHJvcGVydGllcyA9IG51bGw7XG5cbiAgICB0aGlzLnRlbXBNYXRyaXggPSBuZXcgbWF0aC5NYXRyaXgoKTtcbn1cblxuUGFydGljbGVSZW5kZXJlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKE9iamVjdFJlbmRlcmVyLnByb3RvdHlwZSk7XG5QYXJ0aWNsZVJlbmRlcmVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFBhcnRpY2xlUmVuZGVyZXI7XG5tb2R1bGUuZXhwb3J0cyA9IFBhcnRpY2xlUmVuZGVyZXI7XG5cbldlYkdMUmVuZGVyZXIucmVnaXN0ZXJQbHVnaW4oJ3BhcnRpY2xlJywgUGFydGljbGVSZW5kZXJlcik7XG5cbi8qKlxuICogV2hlbiB0aGVyZSBpcyBhIFdlYkdMIGNvbnRleHQgY2hhbmdlXG4gKlxuICogQHByaXZhdGVcbiAqL1xuUGFydGljbGVSZW5kZXJlci5wcm90b3R5cGUub25Db250ZXh0Q2hhbmdlID0gZnVuY3Rpb24gKClcbntcbiAgICB2YXIgZ2wgPSB0aGlzLnJlbmRlcmVyLmdsO1xuXG4gICAgLy8gc2V0dXAgZGVmYXVsdCBzaGFkZXJcbiAgICB0aGlzLnNoYWRlciA9IG5ldyBQYXJ0aWNsZVNoYWRlcih0aGlzLnJlbmRlcmVyLnNoYWRlck1hbmFnZXIpO1xuXG4gICAgdGhpcy5pbmRleEJ1ZmZlciA9IGdsLmNyZWF0ZUJ1ZmZlcigpO1xuXG4gICAgLy8gNjU1MzUgaXMgbWF4IGluZGV4LCBzbyA2NTUzNSAvIDYgPSAxMDkyMi5cblxuICAgIC8vdXBsb2FkIHRoZSBpbmRleCBkYXRhXG4gICAgZ2wuYmluZEJ1ZmZlcihnbC5FTEVNRU5UX0FSUkFZX0JVRkZFUiwgdGhpcy5pbmRleEJ1ZmZlcik7XG4gICAgZ2wuYnVmZmVyRGF0YShnbC5FTEVNRU5UX0FSUkFZX0JVRkZFUiwgdGhpcy5pbmRpY2VzLCBnbC5TVEFUSUNfRFJBVyk7XG5cbiAgICB0aGlzLnByb3BlcnRpZXMgPSBbXG4gICAgICAgIC8vIHZlcnRpY2VzRGF0YVxuICAgICAgICB7XG4gICAgICAgICAgICBhdHRyaWJ1dGU6dGhpcy5zaGFkZXIuYXR0cmlidXRlcy5hVmVydGV4UG9zaXRpb24sXG4gICAgICAgICAgICBzaXplOjIsXG4gICAgICAgICAgICB1cGxvYWRGdW5jdGlvbjp0aGlzLnVwbG9hZFZlcnRpY2VzLFxuICAgICAgICAgICAgb2Zmc2V0OjBcbiAgICAgICAgfSxcbiAgICAgICAgLy8gcG9zaXRpb25EYXRhXG4gICAgICAgIHtcbiAgICAgICAgICAgIGF0dHJpYnV0ZTp0aGlzLnNoYWRlci5hdHRyaWJ1dGVzLmFQb3NpdGlvbkNvb3JkLFxuICAgICAgICAgICAgc2l6ZToyLFxuICAgICAgICAgICAgdXBsb2FkRnVuY3Rpb246dGhpcy51cGxvYWRQb3NpdGlvbixcbiAgICAgICAgICAgIG9mZnNldDowXG4gICAgICAgIH0sXG4gICAgICAgIC8vIHJvdGF0aW9uRGF0YVxuICAgICAgICB7XG4gICAgICAgICAgICBhdHRyaWJ1dGU6dGhpcy5zaGFkZXIuYXR0cmlidXRlcy5hUm90YXRpb24sXG4gICAgICAgICAgICBzaXplOjEsXG4gICAgICAgICAgICB1cGxvYWRGdW5jdGlvbjp0aGlzLnVwbG9hZFJvdGF0aW9uLFxuICAgICAgICAgICAgb2Zmc2V0OjBcbiAgICAgICAgfSxcbiAgICAgICAgLy8gdXZzRGF0YVxuICAgICAgICB7XG4gICAgICAgICAgICBhdHRyaWJ1dGU6dGhpcy5zaGFkZXIuYXR0cmlidXRlcy5hVGV4dHVyZUNvb3JkLFxuICAgICAgICAgICAgc2l6ZToyLFxuICAgICAgICAgICAgdXBsb2FkRnVuY3Rpb246dGhpcy51cGxvYWRVdnMsXG4gICAgICAgICAgICBvZmZzZXQ6MFxuICAgICAgICB9LFxuICAgICAgICAvLyBhbHBoYURhdGFcbiAgICAgICAge1xuICAgICAgICAgICAgYXR0cmlidXRlOnRoaXMuc2hhZGVyLmF0dHJpYnV0ZXMuYUNvbG9yLFxuICAgICAgICAgICAgc2l6ZToxLFxuICAgICAgICAgICAgdXBsb2FkRnVuY3Rpb246dGhpcy51cGxvYWRBbHBoYSxcbiAgICAgICAgICAgIG9mZnNldDowXG4gICAgICAgIH1cbiAgICBdO1xufTtcblxuLyoqXG4gKiBTdGFydHMgYSBuZXcgcGFydGljbGUgYmF0Y2guXG4gKlxuICovXG5QYXJ0aWNsZVJlbmRlcmVyLnByb3RvdHlwZS5zdGFydCA9IGZ1bmN0aW9uICgpXG57XG4gICAgdmFyIGdsID0gdGhpcy5yZW5kZXJlci5nbDtcblxuICAgIC8vIGJpbmQgdGhlIG1haW4gdGV4dHVyZVxuICAgIGdsLmFjdGl2ZVRleHR1cmUoZ2wuVEVYVFVSRTApO1xuXG4gICAgLy8gYmluZCB0aGUgYnVmZmVyc1xuXG4gICAgZ2wuYmluZEJ1ZmZlcihnbC5FTEVNRU5UX0FSUkFZX0JVRkZFUiwgdGhpcy5pbmRleEJ1ZmZlcik7XG5cbiAgICB2YXIgc2hhZGVyID0gdGhpcy5zaGFkZXI7XG5cbiAgICB0aGlzLnJlbmRlcmVyLnNoYWRlck1hbmFnZXIuc2V0U2hhZGVyKHNoYWRlcik7XG59O1xuXG5cbi8qKlxuICogUmVuZGVycyB0aGUgcGFydGljbGUgY29udGFpbmVyIG9iamVjdC5cbiAqXG4gKiBAcGFyYW0gY29udGFpbmVyIHtQSVhJLlBhcnRpY2xlQ29udGFpbmVyfSBUaGUgY29udGFpbmVyIHRvIHJlbmRlciB1c2luZyB0aGlzIFBhcnRpY2xlUmVuZGVyZXJcbiAqL1xuUGFydGljbGVSZW5kZXJlci5wcm90b3R5cGUucmVuZGVyID0gZnVuY3Rpb24gKGNvbnRhaW5lcilcbntcbiAgICB2YXIgY2hpbGRyZW4gPSBjb250YWluZXIuY2hpbGRyZW4sXG4gICAgICAgIHRvdGFsQ2hpbGRyZW4gPSBjaGlsZHJlbi5sZW5ndGgsXG4gICAgICAgIG1heFNpemUgPSBjb250YWluZXIuX21heFNpemUsXG4gICAgICAgIGJhdGNoU2l6ZSA9IGNvbnRhaW5lci5fYmF0Y2hTaXplO1xuXG4gICAgaWYodG90YWxDaGlsZHJlbiA9PT0gMClcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgZWxzZSBpZih0b3RhbENoaWxkcmVuID4gbWF4U2l6ZSlcbiAgICB7XG4gICAgICAgIHRvdGFsQ2hpbGRyZW4gPSBtYXhTaXplO1xuICAgIH1cblxuICAgIGlmKCFjb250YWluZXIuX2J1ZmZlcnMpXG4gICAge1xuICAgICAgICBjb250YWluZXIuX2J1ZmZlcnMgPSB0aGlzLmdlbmVyYXRlQnVmZmVycyggY29udGFpbmVyICk7XG4gICAgfVxuXG4gICAgLy8gaWYgdGhlIHV2cyBoYXZlIG5vdCB1cGRhdGVkIHRoZW4gbm8gcG9pbnQgcmVuZGVyaW5nIGp1c3QgeWV0IVxuICAgIHRoaXMucmVuZGVyZXIuYmxlbmRNb2RlTWFuYWdlci5zZXRCbGVuZE1vZGUoY29udGFpbmVyLmJsZW5kTW9kZSk7XG5cbiAgICB2YXIgZ2wgPSB0aGlzLnJlbmRlcmVyLmdsO1xuXG4gICAgdmFyIG0gPSAgY29udGFpbmVyLndvcmxkVHJhbnNmb3JtLmNvcHkoIHRoaXMudGVtcE1hdHJpeCApO1xuICAgIG0ucHJlcGVuZCggdGhpcy5yZW5kZXJlci5jdXJyZW50UmVuZGVyVGFyZ2V0LnByb2plY3Rpb25NYXRyaXggKTtcbiAgICBnbC51bmlmb3JtTWF0cml4M2Z2KHRoaXMuc2hhZGVyLnVuaWZvcm1zLnByb2plY3Rpb25NYXRyaXguX2xvY2F0aW9uLCBmYWxzZSwgbS50b0FycmF5KHRydWUpKTtcbiAgICBnbC51bmlmb3JtMWYodGhpcy5zaGFkZXIudW5pZm9ybXMudUFscGhhLl9sb2NhdGlvbiwgY29udGFpbmVyLndvcmxkQWxwaGEpO1xuXG5cbiAgICAvLyBtYWtlIHN1cmUgdGhlIHRleHR1cmUgaXMgYm91bmQuLlxuICAgIHZhciBiYXNlVGV4dHVyZSA9IGNoaWxkcmVuWzBdLl90ZXh0dXJlLmJhc2VUZXh0dXJlO1xuXG4gICAgaWYgKCFiYXNlVGV4dHVyZS5fZ2xUZXh0dXJlc1tnbC5pZF0pXG4gICAge1xuICAgICAgICAvLyBpZiB0aGUgdGV4dHVyZSBoYXMgbm90IHVwZGF0ZWQgdGhlbiBsZXRzIG5vdCB1cGxvYWQgYW55IHN0YXRpYyBwcm9wZXJ0aWVzXG4gICAgICAgIGlmKCF0aGlzLnJlbmRlcmVyLnVwZGF0ZVRleHR1cmUoYmFzZVRleHR1cmUpKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZighY29udGFpbmVyLl9wcm9wZXJ0aWVzWzBdIHx8ICFjb250YWluZXIuX3Byb3BlcnRpZXNbM10pXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNvbnRhaW5lci5fYnVmZmVyVG9VcGRhdGUgPSAwO1xuICAgICAgICB9XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIGdsLmJpbmRUZXh0dXJlKGdsLlRFWFRVUkVfMkQsIGJhc2VUZXh0dXJlLl9nbFRleHR1cmVzW2dsLmlkXSk7XG4gICAgfVxuXG4gICAgLy8gbm93IGxldHMgdXBsb2FkIGFuZCByZW5kZXIgdGhlIGJ1ZmZlcnMuLlxuICAgIGZvciAodmFyIGkgPSAwLCBqID0gMDsgaSA8IHRvdGFsQ2hpbGRyZW47IGkgKz0gYmF0Y2hTaXplLCBqICs9IDEpXG4gICAge1xuICAgICAgICB2YXIgYW1vdW50ID0gKCB0b3RhbENoaWxkcmVuIC0gaSk7XG4gICAgICAgIGlmKGFtb3VudCA+IGJhdGNoU2l6ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgYW1vdW50ID0gYmF0Y2hTaXplO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGJ1ZmZlciA9IGNvbnRhaW5lci5fYnVmZmVyc1tqXTtcblxuICAgICAgICAvLyB3ZSBhbHdheXMgdXBsb2FkIHRoZSBkeW5hbWljXG4gICAgICAgIGJ1ZmZlci51cGxvYWREeW5hbWljKGNoaWxkcmVuLCBpLCBhbW91bnQpO1xuXG4gICAgICAgIC8vIHdlIG9ubHkgdXBsb2FkIHRoZSBzdGF0aWMgY29udGVudCB3aGVuIHdlIGhhdmUgdG8hXG4gICAgICAgIGlmKGNvbnRhaW5lci5fYnVmZmVyVG9VcGRhdGUgPT09IGopXG4gICAgICAgIHtcbiAgICAgICAgICAgIGJ1ZmZlci51cGxvYWRTdGF0aWMoY2hpbGRyZW4sIGksIGFtb3VudCk7XG4gICAgICAgICAgICBjb250YWluZXIuX2J1ZmZlclRvVXBkYXRlID0gaiArIDE7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBiaW5kIHRoZSBidWZmZXJcbiAgICAgICAgYnVmZmVyLmJpbmQoIHRoaXMuc2hhZGVyICk7XG5cbiAgICAgICAgIC8vIG5vdyBkcmF3IHRob3NlIHN1Y2thcyFcbiAgICAgICAgZ2wuZHJhd0VsZW1lbnRzKGdsLlRSSUFOR0xFUywgYW1vdW50ICogNiwgZ2wuVU5TSUdORURfU0hPUlQsIDApO1xuICAgICAgICB0aGlzLnJlbmRlcmVyLmRyYXdDb3VudCsrO1xuICAgIH1cbn07XG5cbi8qKlxuICogQ3JlYXRlcyBvbmUgcGFydGljbGUgYnVmZmVyIGZvciBlYWNoIGNoaWxkIGluIHRoZSBjb250YWluZXIgd2Ugd2FudCB0byByZW5kZXIgYW5kIHVwZGF0ZXMgaW50ZXJuYWwgcHJvcGVydGllc1xuICpcbiAqIEBwYXJhbSBjb250YWluZXIge1BJWEkuUGFydGljbGVDb250YWluZXJ9IFRoZSBjb250YWluZXIgdG8gcmVuZGVyIHVzaW5nIHRoaXMgUGFydGljbGVSZW5kZXJlclxuICovXG5QYXJ0aWNsZVJlbmRlcmVyLnByb3RvdHlwZS5nZW5lcmF0ZUJ1ZmZlcnMgPSBmdW5jdGlvbiAoY29udGFpbmVyKVxue1xuICAgIHZhciBnbCA9IHRoaXMucmVuZGVyZXIuZ2wsXG4gICAgICAgIGJ1ZmZlcnMgPSBbXSxcbiAgICAgICAgc2l6ZSA9IGNvbnRhaW5lci5fbWF4U2l6ZSxcbiAgICAgICAgYmF0Y2hTaXplID0gY29udGFpbmVyLl9iYXRjaFNpemUsXG4gICAgICAgIGR5bmFtaWNQcm9wZXJ0eUZsYWdzID0gY29udGFpbmVyLl9wcm9wZXJ0aWVzLFxuICAgICAgICBpO1xuXG4gICAgZm9yIChpID0gMDsgaSA8IHNpemU7IGkgKz0gYmF0Y2hTaXplKVxuICAgIHtcbiAgICAgICAgYnVmZmVycy5wdXNoKG5ldyBQYXJ0aWNsZUJ1ZmZlcihnbCwgdGhpcy5wcm9wZXJ0aWVzLCBkeW5hbWljUHJvcGVydHlGbGFncywgYmF0Y2hTaXplKSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGJ1ZmZlcnM7XG59O1xuXG4vKipcbiAqIFVwbG9hZHMgdGhlIHZlcnRpY2llcy5cbiAqXG4gKiBAcGFyYW0gY2hpbGRyZW4ge1BJWEkuRGlzcGxheU9iamVjdFtdfSB0aGUgYXJyYXkgb2YgZGlzcGxheSBvYmplY3RzIHRvIHJlbmRlclxuICogQHBhcmFtIHN0YXJ0SW5kZXgge251bWJlcn0gdGhlIGluZGV4IHRvIHN0YXJ0IGZyb20gaW4gdGhlIGNoaWxkcmVuIGFycmF5XG4gKiBAcGFyYW0gYW1vdW50IHtudW1iZXJ9IHRoZSBhbW91bnQgb2YgY2hpbGRyZW4gdGhhdCB3aWxsIGhhdmUgdGhlaXIgdmVydGljZXMgdXBsb2FkZWRcbiAqIEBwYXJhbSBhcnJheSB7bnVtYmVyW119XG4gKiBAcGFyYW0gc3RyaWRlIHtudW1iZXJ9XG4gKiBAcGFyYW0gb2Zmc2V0IHtudW1iZXJ9XG4gKi9cblBhcnRpY2xlUmVuZGVyZXIucHJvdG90eXBlLnVwbG9hZFZlcnRpY2VzID0gZnVuY3Rpb24gKGNoaWxkcmVuLCBzdGFydEluZGV4LCBhbW91bnQsIGFycmF5LCBzdHJpZGUsIG9mZnNldClcbntcbiAgICB2YXIgc3ByaXRlLFxuICAgICAgICB0ZXh0dXJlLFxuICAgICAgICB0cmltLFxuICAgICAgICBzeCxcbiAgICAgICAgc3ksXG4gICAgICAgIHcwLCB3MSwgaDAsIGgxO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhbW91bnQ7IGkrKykge1xuXG4gICAgICAgIHNwcml0ZSA9IGNoaWxkcmVuW3N0YXJ0SW5kZXggKyBpXTtcbiAgICAgICAgdGV4dHVyZSA9IHNwcml0ZS5fdGV4dHVyZTtcbiAgICAgICAgc3ggPSBzcHJpdGUuc2NhbGUueDtcbiAgICAgICAgc3kgPSBzcHJpdGUuc2NhbGUueTtcblxuICAgICAgICBpZiAodGV4dHVyZS50cmltKVxuICAgICAgICB7XG4gICAgICAgICAgICAvLyBpZiB0aGUgc3ByaXRlIGlzIHRyaW1tZWQgdGhlbiB3ZSBuZWVkIHRvIGFkZCB0aGUgZXh0cmEgc3BhY2UgYmVmb3JlIHRyYW5zZm9ybWluZyB0aGUgc3ByaXRlIGNvb3Jkcy4uXG4gICAgICAgICAgICB0cmltID0gdGV4dHVyZS50cmltO1xuXG4gICAgICAgICAgICB3MSA9IHRyaW0ueCAtIHNwcml0ZS5hbmNob3IueCAqIHRyaW0ud2lkdGg7XG4gICAgICAgICAgICB3MCA9IHcxICsgdGV4dHVyZS5jcm9wLndpZHRoO1xuXG4gICAgICAgICAgICBoMSA9IHRyaW0ueSAtIHNwcml0ZS5hbmNob3IueSAqIHRyaW0uaGVpZ2h0O1xuICAgICAgICAgICAgaDAgPSBoMSArIHRleHR1cmUuY3JvcC5oZWlnaHQ7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgICB3MCA9ICh0ZXh0dXJlLl9mcmFtZS53aWR0aCApICogKDEtc3ByaXRlLmFuY2hvci54KTtcbiAgICAgICAgICAgIHcxID0gKHRleHR1cmUuX2ZyYW1lLndpZHRoICkgKiAtc3ByaXRlLmFuY2hvci54O1xuXG4gICAgICAgICAgICBoMCA9IHRleHR1cmUuX2ZyYW1lLmhlaWdodCAqICgxLXNwcml0ZS5hbmNob3IueSk7XG4gICAgICAgICAgICBoMSA9IHRleHR1cmUuX2ZyYW1lLmhlaWdodCAqIC1zcHJpdGUuYW5jaG9yLnk7XG4gICAgICAgIH1cblxuICAgICAgICBhcnJheVtvZmZzZXRdID0gdzEgKiBzeDtcbiAgICAgICAgYXJyYXlbb2Zmc2V0ICsgMV0gPSBoMSAqIHN5O1xuXG4gICAgICAgIGFycmF5W29mZnNldCArIHN0cmlkZV0gPSB3MCAqIHN4O1xuICAgICAgICBhcnJheVtvZmZzZXQgKyBzdHJpZGUgKyAxXSA9IGgxICogc3k7XG5cbiAgICAgICAgYXJyYXlbb2Zmc2V0ICsgc3RyaWRlICogMl0gPSB3MCAqIHN4O1xuICAgICAgICBhcnJheVtvZmZzZXQgKyBzdHJpZGUgKiAyICsgMV0gPSBoMCAqIHN5O1xuXG4gICAgICAgIGFycmF5W29mZnNldCArIHN0cmlkZSAqIDNdID0gdzEgKiBzeDtcbiAgICAgICAgYXJyYXlbb2Zmc2V0ICsgc3RyaWRlICogMyArIDFdID0gaDAgKiBzeTtcblxuICAgICAgICBvZmZzZXQgKz0gc3RyaWRlICogNDtcbiAgICB9XG5cbn07XG5cbi8qKlxuICpcbiAqIEBwYXJhbSBjaGlsZHJlbiB7UElYSS5EaXNwbGF5T2JqZWN0W119IHRoZSBhcnJheSBvZiBkaXNwbGF5IG9iamVjdHMgdG8gcmVuZGVyXG4gKiBAcGFyYW0gc3RhcnRJbmRleCB7bnVtYmVyfSB0aGUgaW5kZXggdG8gc3RhcnQgZnJvbSBpbiB0aGUgY2hpbGRyZW4gYXJyYXlcbiAqIEBwYXJhbSBhbW91bnQge251bWJlcn0gdGhlIGFtb3VudCBvZiBjaGlsZHJlbiB0aGF0IHdpbGwgaGF2ZSB0aGVpciBwb3NpdGlvbnMgdXBsb2FkZWRcbiAqIEBwYXJhbSBhcnJheSB7bnVtYmVyW119XG4gKiBAcGFyYW0gc3RyaWRlIHtudW1iZXJ9XG4gKiBAcGFyYW0gb2Zmc2V0IHtudW1iZXJ9XG4gKi9cblBhcnRpY2xlUmVuZGVyZXIucHJvdG90eXBlLnVwbG9hZFBvc2l0aW9uID0gZnVuY3Rpb24gKGNoaWxkcmVuLHN0YXJ0SW5kZXgsIGFtb3VudCwgYXJyYXksIHN0cmlkZSwgb2Zmc2V0KVxue1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYW1vdW50OyBpKyspXG4gICAge1xuICAgICAgICB2YXIgc3ByaXRlUG9zaXRpb24gPSBjaGlsZHJlbltzdGFydEluZGV4ICsgaV0ucG9zaXRpb247XG5cbiAgICAgICAgYXJyYXlbb2Zmc2V0XSA9IHNwcml0ZVBvc2l0aW9uLng7XG4gICAgICAgIGFycmF5W29mZnNldCArIDFdID0gc3ByaXRlUG9zaXRpb24ueTtcblxuICAgICAgICBhcnJheVtvZmZzZXQgKyBzdHJpZGVdID0gc3ByaXRlUG9zaXRpb24ueDtcbiAgICAgICAgYXJyYXlbb2Zmc2V0ICsgc3RyaWRlICsgMV0gPSBzcHJpdGVQb3NpdGlvbi55O1xuXG4gICAgICAgIGFycmF5W29mZnNldCArIHN0cmlkZSAqIDJdID0gc3ByaXRlUG9zaXRpb24ueDtcbiAgICAgICAgYXJyYXlbb2Zmc2V0ICsgc3RyaWRlICogMiArIDFdID0gc3ByaXRlUG9zaXRpb24ueTtcblxuICAgICAgICBhcnJheVtvZmZzZXQgKyBzdHJpZGUgKiAzXSA9IHNwcml0ZVBvc2l0aW9uLng7XG4gICAgICAgIGFycmF5W29mZnNldCArIHN0cmlkZSAqIDMgKyAxXSA9IHNwcml0ZVBvc2l0aW9uLnk7XG5cbiAgICAgICAgb2Zmc2V0ICs9IHN0cmlkZSAqIDQ7XG4gICAgfVxuXG59O1xuXG4vKipcbiAqXG4gKiBAcGFyYW0gY2hpbGRyZW4ge1BJWEkuRGlzcGxheU9iamVjdFtdfSB0aGUgYXJyYXkgb2YgZGlzcGxheSBvYmplY3RzIHRvIHJlbmRlclxuICogQHBhcmFtIHN0YXJ0SW5kZXgge251bWJlcn0gdGhlIGluZGV4IHRvIHN0YXJ0IGZyb20gaW4gdGhlIGNoaWxkcmVuIGFycmF5XG4gKiBAcGFyYW0gYW1vdW50IHtudW1iZXJ9IHRoZSBhbW91bnQgb2YgY2hpbGRyZW4gdGhhdCB3aWxsIGhhdmUgdGhlaXIgcm90YXRpb24gdXBsb2FkZWRcbiAqIEBwYXJhbSBhcnJheSB7bnVtYmVyW119XG4gKiBAcGFyYW0gc3RyaWRlIHtudW1iZXJ9XG4gKiBAcGFyYW0gb2Zmc2V0IHtudW1iZXJ9XG4gKi9cblBhcnRpY2xlUmVuZGVyZXIucHJvdG90eXBlLnVwbG9hZFJvdGF0aW9uID0gZnVuY3Rpb24gKGNoaWxkcmVuLHN0YXJ0SW5kZXgsIGFtb3VudCwgYXJyYXksIHN0cmlkZSwgb2Zmc2V0KVxue1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYW1vdW50OyBpKyspXG4gICAge1xuICAgICAgICB2YXIgc3ByaXRlUm90YXRpb24gPSBjaGlsZHJlbltzdGFydEluZGV4ICsgaV0ucm90YXRpb247XG5cblxuICAgICAgICBhcnJheVtvZmZzZXRdID0gc3ByaXRlUm90YXRpb247XG4gICAgICAgIGFycmF5W29mZnNldCArIHN0cmlkZV0gPSBzcHJpdGVSb3RhdGlvbjtcbiAgICAgICAgYXJyYXlbb2Zmc2V0ICsgc3RyaWRlICogMl0gPSBzcHJpdGVSb3RhdGlvbjtcbiAgICAgICAgYXJyYXlbb2Zmc2V0ICsgc3RyaWRlICogM10gPSBzcHJpdGVSb3RhdGlvbjtcblxuICAgICAgICBvZmZzZXQgKz0gc3RyaWRlICogNDtcbiAgICB9XG59O1xuXG4vKipcbiAqXG4gKiBAcGFyYW0gY2hpbGRyZW4ge1BJWEkuRGlzcGxheU9iamVjdFtdfSB0aGUgYXJyYXkgb2YgZGlzcGxheSBvYmplY3RzIHRvIHJlbmRlclxuICogQHBhcmFtIHN0YXJ0SW5kZXgge251bWJlcn0gdGhlIGluZGV4IHRvIHN0YXJ0IGZyb20gaW4gdGhlIGNoaWxkcmVuIGFycmF5XG4gKiBAcGFyYW0gYW1vdW50IHtudW1iZXJ9IHRoZSBhbW91bnQgb2YgY2hpbGRyZW4gdGhhdCB3aWxsIGhhdmUgdGhlaXIgVXZzIHVwbG9hZGVkXG4gKiBAcGFyYW0gYXJyYXkge251bWJlcltdfVxuICogQHBhcmFtIHN0cmlkZSB7bnVtYmVyfVxuICogQHBhcmFtIG9mZnNldCB7bnVtYmVyfVxuICovXG5QYXJ0aWNsZVJlbmRlcmVyLnByb3RvdHlwZS51cGxvYWRVdnMgPSBmdW5jdGlvbiAoY2hpbGRyZW4sc3RhcnRJbmRleCwgYW1vdW50LCBhcnJheSwgc3RyaWRlLCBvZmZzZXQpXG57XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhbW91bnQ7IGkrKylcbiAgICB7XG4gICAgICAgIHZhciB0ZXh0dXJlVXZzID0gY2hpbGRyZW5bc3RhcnRJbmRleCArIGldLl90ZXh0dXJlLl91dnM7XG5cbiAgICAgICAgaWYgKHRleHR1cmVVdnMpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGFycmF5W29mZnNldF0gPSB0ZXh0dXJlVXZzLngwO1xuICAgICAgICAgICAgYXJyYXlbb2Zmc2V0ICsgMV0gPSB0ZXh0dXJlVXZzLnkwO1xuXG4gICAgICAgICAgICBhcnJheVtvZmZzZXQgKyBzdHJpZGVdID0gdGV4dHVyZVV2cy54MTtcbiAgICAgICAgICAgIGFycmF5W29mZnNldCArIHN0cmlkZSArIDFdID0gdGV4dHVyZVV2cy55MTtcblxuICAgICAgICAgICAgYXJyYXlbb2Zmc2V0ICsgc3RyaWRlICogMl0gPSB0ZXh0dXJlVXZzLngyO1xuICAgICAgICAgICAgYXJyYXlbb2Zmc2V0ICsgc3RyaWRlICogMiArIDFdID0gdGV4dHVyZVV2cy55MjtcblxuICAgICAgICAgICAgYXJyYXlbb2Zmc2V0ICsgc3RyaWRlICogM10gPSB0ZXh0dXJlVXZzLngzO1xuICAgICAgICAgICAgYXJyYXlbb2Zmc2V0ICsgc3RyaWRlICogMyArIDFdID0gdGV4dHVyZVV2cy55MztcblxuICAgICAgICAgICAgb2Zmc2V0ICs9IHN0cmlkZSAqIDQ7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgICAvL1RPRE8geW91IGtub3cgdGhpcyBjYW4gYmUgZWFzaWVyIVxuICAgICAgICAgICAgYXJyYXlbb2Zmc2V0XSA9IDA7XG4gICAgICAgICAgICBhcnJheVtvZmZzZXQgKyAxXSA9IDA7XG5cbiAgICAgICAgICAgIGFycmF5W29mZnNldCArIHN0cmlkZV0gPSAwO1xuICAgICAgICAgICAgYXJyYXlbb2Zmc2V0ICsgc3RyaWRlICsgMV0gPSAwO1xuXG4gICAgICAgICAgICBhcnJheVtvZmZzZXQgKyBzdHJpZGUgKiAyXSA9IDA7XG4gICAgICAgICAgICBhcnJheVtvZmZzZXQgKyBzdHJpZGUgKiAyICsgMV0gPSAwO1xuXG4gICAgICAgICAgICBhcnJheVtvZmZzZXQgKyBzdHJpZGUgKiAzXSA9IDA7XG4gICAgICAgICAgICBhcnJheVtvZmZzZXQgKyBzdHJpZGUgKiAzICsgMV0gPSAwO1xuXG4gICAgICAgICAgICBvZmZzZXQgKz0gc3RyaWRlICogNDtcbiAgICAgICAgfVxuICAgIH1cbn07XG5cbi8qKlxuICpcbiAqIEBwYXJhbSBjaGlsZHJlbiB7UElYSS5EaXNwbGF5T2JqZWN0W119IHRoZSBhcnJheSBvZiBkaXNwbGF5IG9iamVjdHMgdG8gcmVuZGVyXG4gKiBAcGFyYW0gc3RhcnRJbmRleCB7bnVtYmVyfSB0aGUgaW5kZXggdG8gc3RhcnQgZnJvbSBpbiB0aGUgY2hpbGRyZW4gYXJyYXlcbiAqIEBwYXJhbSBhbW91bnQge251bWJlcn0gdGhlIGFtb3VudCBvZiBjaGlsZHJlbiB0aGF0IHdpbGwgaGF2ZSB0aGVpciBhbHBoYSB1cGxvYWRlZFxuICogQHBhcmFtIGFycmF5IHtudW1iZXJbXX1cbiAqIEBwYXJhbSBzdHJpZGUge251bWJlcn1cbiAqIEBwYXJhbSBvZmZzZXQge251bWJlcn1cbiAqL1xuUGFydGljbGVSZW5kZXJlci5wcm90b3R5cGUudXBsb2FkQWxwaGEgPSBmdW5jdGlvbiAoY2hpbGRyZW4sc3RhcnRJbmRleCwgYW1vdW50LCBhcnJheSwgc3RyaWRlLCBvZmZzZXQpXG57XG4gICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYW1vdW50OyBpKyspXG4gICAgIHtcbiAgICAgICAgdmFyIHNwcml0ZUFscGhhID0gY2hpbGRyZW5bc3RhcnRJbmRleCArIGldLmFscGhhO1xuXG4gICAgICAgIGFycmF5W29mZnNldF0gPSBzcHJpdGVBbHBoYTtcbiAgICAgICAgYXJyYXlbb2Zmc2V0ICsgc3RyaWRlXSA9IHNwcml0ZUFscGhhO1xuICAgICAgICBhcnJheVtvZmZzZXQgKyBzdHJpZGUgKiAyXSA9IHNwcml0ZUFscGhhO1xuICAgICAgICBhcnJheVtvZmZzZXQgKyBzdHJpZGUgKiAzXSA9IHNwcml0ZUFscGhhO1xuXG4gICAgICAgIG9mZnNldCArPSBzdHJpZGUgKiA0O1xuICAgIH1cbn07XG5cblxuLyoqXG4gKiBEZXN0cm95cyB0aGUgUGFydGljbGVSZW5kZXJlci5cbiAqXG4gKi9cblBhcnRpY2xlUmVuZGVyZXIucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoKVxue1xuICAgIGlmICh0aGlzLnJlbmRlcmVyLmdsKSB7XG4gICAgICAgIHRoaXMucmVuZGVyZXIuZ2wuZGVsZXRlQnVmZmVyKHRoaXMuaW5kZXhCdWZmZXIpO1xuICAgIH1cblxuICAgIE9iamVjdFJlbmRlcmVyLnByb3RvdHlwZS5kZXN0cm95LmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG5cbiAgICB0aGlzLnNoYWRlci5kZXN0cm95KCk7XG5cbiAgICB0aGlzLmluZGljZXMgPSBudWxsO1xuICAgIHRoaXMudGVtcE1hdHJpeCA9IG51bGw7XG59O1xuIiwidmFyIFRleHR1cmVTaGFkZXIgPSByZXF1aXJlKCcuLi8uLi9yZW5kZXJlcnMvd2ViZ2wvc2hhZGVycy9UZXh0dXJlU2hhZGVyJyk7XG5cbi8qKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLlRleHR1cmVTaGFkZXJcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gc2hhZGVyTWFuYWdlciB7U2hhZGVyTWFuYWdlcn0gVGhlIHdlYmdsIHNoYWRlciBtYW5hZ2VyIHRoaXMgc2hhZGVyIHdvcmtzIGZvci5cbiAqL1xuZnVuY3Rpb24gUGFydGljbGVTaGFkZXIoc2hhZGVyTWFuYWdlcilcbntcbiAgICBUZXh0dXJlU2hhZGVyLmNhbGwodGhpcyxcbiAgICAgICAgc2hhZGVyTWFuYWdlcixcbiAgICAgICAgLy8gdmVydGV4IHNoYWRlclxuICAgICAgICBbXG4gICAgICAgICAgICAnYXR0cmlidXRlIHZlYzIgYVZlcnRleFBvc2l0aW9uOycsXG4gICAgICAgICAgICAnYXR0cmlidXRlIHZlYzIgYVRleHR1cmVDb29yZDsnLFxuICAgICAgICAgICAgJ2F0dHJpYnV0ZSBmbG9hdCBhQ29sb3I7JyxcblxuICAgICAgICAgICAgJ2F0dHJpYnV0ZSB2ZWMyIGFQb3NpdGlvbkNvb3JkOycsXG4gICAgICAgICAgICAnYXR0cmlidXRlIHZlYzIgYVNjYWxlOycsXG4gICAgICAgICAgICAnYXR0cmlidXRlIGZsb2F0IGFSb3RhdGlvbjsnLFxuXG4gICAgICAgICAgICAndW5pZm9ybSBtYXQzIHByb2plY3Rpb25NYXRyaXg7JyxcblxuICAgICAgICAgICAgJ3ZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkOycsXG4gICAgICAgICAgICAndmFyeWluZyBmbG9hdCB2Q29sb3I7JyxcblxuICAgICAgICAgICAgJ3ZvaWQgbWFpbih2b2lkKXsnLFxuICAgICAgICAgICAgJyAgIHZlYzIgdiA9IGFWZXJ0ZXhQb3NpdGlvbjsnLFxuXG4gICAgICAgICAgICAnICAgdi54ID0gKGFWZXJ0ZXhQb3NpdGlvbi54KSAqIGNvcyhhUm90YXRpb24pIC0gKGFWZXJ0ZXhQb3NpdGlvbi55KSAqIHNpbihhUm90YXRpb24pOycsXG4gICAgICAgICAgICAnICAgdi55ID0gKGFWZXJ0ZXhQb3NpdGlvbi54KSAqIHNpbihhUm90YXRpb24pICsgKGFWZXJ0ZXhQb3NpdGlvbi55KSAqIGNvcyhhUm90YXRpb24pOycsXG4gICAgICAgICAgICAnICAgdiA9IHYgKyBhUG9zaXRpb25Db29yZDsnLFxuXG4gICAgICAgICAgICAnICAgZ2xfUG9zaXRpb24gPSB2ZWM0KChwcm9qZWN0aW9uTWF0cml4ICogdmVjMyh2LCAxLjApKS54eSwgMC4wLCAxLjApOycsXG5cbiAgICAgICAgICAgICcgICB2VGV4dHVyZUNvb3JkID0gYVRleHR1cmVDb29yZDsnLFxuICAgICAgICAgICAgJyAgIHZDb2xvciA9IGFDb2xvcjsnLFxuICAgICAgICAgICAgJ30nXG4gICAgICAgIF0uam9pbignXFxuJyksXG4gICAgICAgIC8vIGhlbGxvXG4gICAgICAgICBbXG4gICAgICAgICAgICAncHJlY2lzaW9uIGxvd3AgZmxvYXQ7JyxcblxuICAgICAgICAgICAgJ3ZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkOycsXG4gICAgICAgICAgICAndmFyeWluZyBmbG9hdCB2Q29sb3I7JyxcblxuICAgICAgICAgICAgJ3VuaWZvcm0gc2FtcGxlcjJEIHVTYW1wbGVyOycsXG4gICAgICAgICAgICAndW5pZm9ybSBmbG9hdCB1QWxwaGE7JyxcblxuICAgICAgICAgICAgJ3ZvaWQgbWFpbih2b2lkKXsnLFxuICAgICAgICAgICAgJyAgdmVjNCBjb2xvciA9IHRleHR1cmUyRCh1U2FtcGxlciwgdlRleHR1cmVDb29yZCkgKiB2Q29sb3IgKiB1QWxwaGE7JyxcbiAgICAgICAgICAgICcgIGlmIChjb2xvci5hID09IDAuMCkgZGlzY2FyZDsnLFxuICAgICAgICAgICAgJyAgZ2xfRnJhZ0NvbG9yID0gY29sb3I7JyxcbiAgICAgICAgICAgICd9J1xuICAgICAgICBdLmpvaW4oJ1xcbicpLFxuICAgICAgICAvLyBjdXN0b20gdW5pZm9ybXNcbiAgICAgICAge1xuICAgICAgICAgICAgdUFscGhhOiAgeyB0eXBlOiAnMWYnLCB2YWx1ZTogMSB9XG4gICAgICAgIH0sXG4gICAgICAgIC8vIGN1c3RvbSBhdHRyaWJ1dGVzXG4gICAgICAgIHtcbiAgICAgICAgICAgIGFQb3NpdGlvbkNvb3JkOiAwLFxuICAgICAgICAgICAvLyBhU2NhbGU6ICAgICAgICAgMCxcbiAgICAgICAgICAgIGFSb3RhdGlvbjogICAgICAwXG4gICAgICAgIH1cbiAgICApO1xuXG4gICAgLy8gVEVNUCBIQUNLXG5cbn1cblxuUGFydGljbGVTaGFkZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShUZXh0dXJlU2hhZGVyLnByb3RvdHlwZSk7XG5QYXJ0aWNsZVNoYWRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBQYXJ0aWNsZVNoYWRlcjtcblxubW9kdWxlLmV4cG9ydHMgPSBQYXJ0aWNsZVNoYWRlcjtcbiIsInZhciB1dGlscyA9IHJlcXVpcmUoJy4uL3V0aWxzJyksXG4gICAgbWF0aCA9IHJlcXVpcmUoJy4uL21hdGgnKSxcbiAgICBDT05TVCA9IHJlcXVpcmUoJy4uL2NvbnN0JyksXG4gICAgRXZlbnRFbWl0dGVyID0gcmVxdWlyZSgnZXZlbnRlbWl0dGVyMycpO1xuXG4vKipcbiAqIFRoZSBDYW52YXNSZW5kZXJlciBkcmF3cyB0aGUgc2NlbmUgYW5kIGFsbCBpdHMgY29udGVudCBvbnRvIGEgMmQgY2FudmFzLiBUaGlzIHJlbmRlcmVyIHNob3VsZCBiZSB1c2VkIGZvciBicm93c2VycyB0aGF0IGRvIG5vdCBzdXBwb3J0IHdlYkdMLlxuICogRG9uJ3QgZm9yZ2V0IHRvIGFkZCB0aGUgQ2FudmFzUmVuZGVyZXIudmlldyB0byB5b3VyIERPTSBvciB5b3Ugd2lsbCBub3Qgc2VlIGFueXRoaW5nIDopXG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIHN5c3RlbSB7c3RyaW5nfSBUaGUgbmFtZSBvZiB0aGUgc3lzdGVtIHRoaXMgcmVuZGVyZXIgaXMgZm9yLlxuICogQHBhcmFtIFt3aWR0aD04MDBdIHtudW1iZXJ9IHRoZSB3aWR0aCBvZiB0aGUgY2FudmFzIHZpZXdcbiAqIEBwYXJhbSBbaGVpZ2h0PTYwMF0ge251bWJlcn0gdGhlIGhlaWdodCBvZiB0aGUgY2FudmFzIHZpZXdcbiAqIEBwYXJhbSBbb3B0aW9uc10ge29iamVjdH0gVGhlIG9wdGlvbmFsIHJlbmRlcmVyIHBhcmFtZXRlcnNcbiAqIEBwYXJhbSBbb3B0aW9ucy52aWV3XSB7SFRNTENhbnZhc0VsZW1lbnR9IHRoZSBjYW52YXMgdG8gdXNlIGFzIGEgdmlldywgb3B0aW9uYWxcbiAqIEBwYXJhbSBbb3B0aW9ucy50cmFuc3BhcmVudD1mYWxzZV0ge2Jvb2xlYW59IElmIHRoZSByZW5kZXIgdmlldyBpcyB0cmFuc3BhcmVudCwgZGVmYXVsdCBmYWxzZVxuICogQHBhcmFtIFtvcHRpb25zLmF1dG9SZXNpemU9ZmFsc2VdIHtib29sZWFufSBJZiB0aGUgcmVuZGVyIHZpZXcgaXMgYXV0b21hdGljYWxseSByZXNpemVkLCBkZWZhdWx0IGZhbHNlXG4gKiBAcGFyYW0gW29wdGlvbnMuYW50aWFsaWFzPWZhbHNlXSB7Ym9vbGVhbn0gc2V0cyBhbnRpYWxpYXMgKG9ubHkgYXBwbGljYWJsZSBpbiBjaHJvbWUgYXQgdGhlIG1vbWVudClcbiAqIEBwYXJhbSBbb3B0aW9ucy5yZXNvbHV0aW9uPTFdIHtudW1iZXJ9IHRoZSByZXNvbHV0aW9uIG9mIHRoZSByZW5kZXJlciByZXRpbmEgd291bGQgYmUgMlxuICogQHBhcmFtIFtvcHRpb25zLmNsZWFyQmVmb3JlUmVuZGVyPXRydWVdIHtib29sZWFufSBUaGlzIHNldHMgaWYgdGhlIENhbnZhc1JlbmRlcmVyIHdpbGwgY2xlYXIgdGhlIGNhbnZhcyBvclxuICogICAgICBub3QgYmVmb3JlIHRoZSBuZXcgcmVuZGVyIHBhc3MuXG4gKiBAcGFyYW0gW29wdGlvbnMuYmFja2dyb3VuZENvbG9yPTB4MDAwMDAwXSB7bnVtYmVyfSBUaGUgYmFja2dyb3VuZCBjb2xvciBvZiB0aGUgcmVuZGVyZWQgYXJlYSAoc2hvd24gaWYgbm90IHRyYW5zcGFyZW50KS5cbiAqIEBwYXJhbSBbb3B0aW9ucy5yb3VuZFBpeGVscz1mYWxzZV0ge2Jvb2xlYW59IElmIHRydWUgUGl4aSB3aWxsIE1hdGguZmxvb3IoKSB4L3kgdmFsdWVzIHdoZW4gcmVuZGVyaW5nLCBzdG9wcGluZyBwaXhlbCBpbnRlcnBvbGF0aW9uLlxuICovXG5mdW5jdGlvbiBTeXN0ZW1SZW5kZXJlcihzeXN0ZW0sIHdpZHRoLCBoZWlnaHQsIG9wdGlvbnMpXG57XG4gICAgRXZlbnRFbWl0dGVyLmNhbGwodGhpcyk7XG5cbiAgICB1dGlscy5zYXlIZWxsbyhzeXN0ZW0pO1xuXG4gICAgLy8gcHJlcGFyZSBvcHRpb25zXG4gICAgaWYgKG9wdGlvbnMpXG4gICAge1xuICAgICAgICBmb3IgKHZhciBpIGluIENPTlNULkRFRkFVTFRfUkVOREVSX09QVElPTlMpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGlmICh0eXBlb2Ygb3B0aW9uc1tpXSA9PT0gJ3VuZGVmaW5lZCcpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgb3B0aW9uc1tpXSA9IENPTlNULkRFRkFVTFRfUkVOREVSX09QVElPTlNbaV07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgb3B0aW9ucyA9IENPTlNULkRFRkFVTFRfUkVOREVSX09QVElPTlM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhlIHR5cGUgb2YgdGhlIHJlbmRlcmVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IFBJWEkuUkVOREVSRVJfVFlQRS5VTktOT1dOXG4gICAgICogQHNlZSBQSVhJLlJFTkRFUkVSX1RZUEVcbiAgICAgKi9cbiAgICB0aGlzLnR5cGUgPSBDT05TVC5SRU5ERVJFUl9UWVBFLlVOS05PV047XG5cbiAgICAvKipcbiAgICAgKiBUaGUgd2lkdGggb2YgdGhlIGNhbnZhcyB2aWV3XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgODAwXG4gICAgICovXG4gICAgdGhpcy53aWR0aCA9IHdpZHRoIHx8IDgwMDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBoZWlnaHQgb2YgdGhlIGNhbnZhcyB2aWV3XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgNjAwXG4gICAgICovXG4gICAgdGhpcy5oZWlnaHQgPSBoZWlnaHQgfHwgNjAwO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGNhbnZhcyBlbGVtZW50IHRoYXQgZXZlcnl0aGluZyBpcyBkcmF3biB0b1xuICAgICAqXG4gICAgICogQG1lbWJlciB7SFRNTENhbnZhc0VsZW1lbnR9XG4gICAgICovXG4gICAgdGhpcy52aWV3ID0gb3B0aW9ucy52aWV3IHx8IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NhbnZhcycpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHJlc29sdXRpb24gb2YgdGhlIHJlbmRlcmVyXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMVxuICAgICAqL1xuICAgIHRoaXMucmVzb2x1dGlvbiA9IG9wdGlvbnMucmVzb2x1dGlvbjtcblxuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgdGhlIHJlbmRlciB2aWV3IGlzIHRyYW5zcGFyZW50XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqL1xuICAgIHRoaXMudHJhbnNwYXJlbnQgPSBvcHRpb25zLnRyYW5zcGFyZW50O1xuXG4gICAgLyoqXG4gICAgICogV2hldGhlciB0aGUgcmVuZGVyIHZpZXcgc2hvdWxkIGJlIHJlc2l6ZWQgYXV0b21hdGljYWxseVxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKi9cbiAgICB0aGlzLmF1dG9SZXNpemUgPSBvcHRpb25zLmF1dG9SZXNpemUgfHwgZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBUcmFja3MgdGhlIGJsZW5kIG1vZGVzIHVzZWZ1bCBmb3IgdGhpcyByZW5kZXJlci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge29iamVjdDxzdHJpbmcsIG1peGVkPn1cbiAgICAgKi9cbiAgICB0aGlzLmJsZW5kTW9kZXMgPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHZhbHVlIG9mIHRoZSBwcmVzZXJ2ZURyYXdpbmdCdWZmZXIgZmxhZyBhZmZlY3RzIHdoZXRoZXIgb3Igbm90IHRoZSBjb250ZW50cyBvZiB0aGUgc3RlbmNpbCBidWZmZXIgaXMgcmV0YWluZWQgYWZ0ZXIgcmVuZGVyaW5nLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKi9cbiAgICB0aGlzLnByZXNlcnZlRHJhd2luZ0J1ZmZlciA9IG9wdGlvbnMucHJlc2VydmVEcmF3aW5nQnVmZmVyO1xuXG4gICAgLyoqXG4gICAgICogVGhpcyBzZXRzIGlmIHRoZSBDYW52YXNSZW5kZXJlciB3aWxsIGNsZWFyIHRoZSBjYW52YXMgb3Igbm90IGJlZm9yZSB0aGUgbmV3IHJlbmRlciBwYXNzLlxuICAgICAqIElmIHRoZSBzY2VuZSBpcyBOT1QgdHJhbnNwYXJlbnQgUGl4aSB3aWxsIHVzZSBhIGNhbnZhcyBzaXplZCBmaWxsUmVjdCBvcGVyYXRpb24gZXZlcnkgZnJhbWUgdG8gc2V0IHRoZSBjYW52YXMgYmFja2dyb3VuZCBjb2xvci5cbiAgICAgKiBJZiB0aGUgc2NlbmUgaXMgdHJhbnNwYXJlbnQgUGl4aSB3aWxsIHVzZSBjbGVhclJlY3QgdG8gY2xlYXIgdGhlIGNhbnZhcyBldmVyeSBmcmFtZS5cbiAgICAgKiBEaXNhYmxlIHRoaXMgYnkgc2V0dGluZyB0aGlzIHRvIGZhbHNlLiBGb3IgZXhhbXBsZSBpZiB5b3VyIGdhbWUgaGFzIGEgY2FudmFzIGZpbGxpbmcgYmFja2dyb3VuZCBpbWFnZSB5b3Ugb2Z0ZW4gZG9uJ3QgbmVlZCB0aGlzIHNldC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICogQGRlZmF1bHRcbiAgICAgKi9cbiAgICB0aGlzLmNsZWFyQmVmb3JlUmVuZGVyID0gb3B0aW9ucy5jbGVhckJlZm9yZVJlbmRlcjtcblxuICAgIC8qKlxuICAgICAqIElmIHRydWUgUGl4aSB3aWxsIE1hdGguZmxvb3IoKSB4L3kgdmFsdWVzIHdoZW4gcmVuZGVyaW5nLCBzdG9wcGluZyBwaXhlbCBpbnRlcnBvbGF0aW9uLlxuICAgICAqIEhhbmR5IGZvciBjcmlzcCBwaXhlbCBhcnQgYW5kIHNwZWVkIG9uIGxlZ2FjeSBkZXZpY2VzLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKi9cbiAgICB0aGlzLnJvdW5kUGl4ZWxzID0gb3B0aW9ucy5yb3VuZFBpeGVscztcblxuICAgIC8qKlxuICAgICAqIFRoZSBiYWNrZ3JvdW5kIGNvbG9yIGFzIGEgbnVtYmVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fYmFja2dyb3VuZENvbG9yID0gMHgwMDAwMDA7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYmFja2dyb3VuZCBjb2xvciBhcyBhbiBbUiwgRywgQl0gYXJyYXkuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJbXX1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX2JhY2tncm91bmRDb2xvclJnYmEgPSBbMCwgMCwgMCwgMF07XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYmFja2dyb3VuZCBjb2xvciBhcyBhIHN0cmluZy5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge3N0cmluZ31cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX2JhY2tncm91bmRDb2xvclN0cmluZyA9ICcjMDAwMDAwJztcblxuICAgIHRoaXMuYmFja2dyb3VuZENvbG9yID0gb3B0aW9ucy5iYWNrZ3JvdW5kQ29sb3IgfHwgdGhpcy5fYmFja2dyb3VuZENvbG9yOyAvLyBydW4gYmcgY29sb3Igc2V0dGVyXG5cbiAgICAvKipcbiAgICAgKiBUaGlzIHRlbXBvcmFyeSBkaXNwbGF5IG9iamVjdCB1c2VkIGFzIHRoZSBwYXJlbnQgb2YgdGhlIGN1cnJlbnRseSBiZWluZyByZW5kZXJlZCBpdGVtXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLkRpc3BsYXlPYmplY3R9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl90ZW1wRGlzcGxheU9iamVjdFBhcmVudCA9IHt3b3JsZFRyYW5zZm9ybTpuZXcgbWF0aC5NYXRyaXgoKSwgd29ybGRBbHBoYToxLCBjaGlsZHJlbjpbXX07XG5cbiAgICAvKipcbiAgICAgKiBUaGUgbGFzdCByb290IG9iamVjdCB0aGF0IHRoZSByZW5kZXJlciB0cmllZCB0byByZW5kZXIuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLkRpc3BsYXlPYmplY3R9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9sYXN0T2JqZWN0UmVuZGVyZWQgPSB0aGlzLl90ZW1wRGlzcGxheU9iamVjdFBhcmVudDtcbn1cblxuLy8gY29uc3RydWN0b3JcblN5c3RlbVJlbmRlcmVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoRXZlbnRFbWl0dGVyLnByb3RvdHlwZSk7XG5TeXN0ZW1SZW5kZXJlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBTeXN0ZW1SZW5kZXJlcjtcbm1vZHVsZS5leHBvcnRzID0gU3lzdGVtUmVuZGVyZXI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKFN5c3RlbVJlbmRlcmVyLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFRoZSBiYWNrZ3JvdW5kIGNvbG9yIHRvIGZpbGwgaWYgbm90IHRyYW5zcGFyZW50XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuU3lzdGVtUmVuZGVyZXIjXG4gICAgICovXG4gICAgYmFja2dyb3VuZENvbG9yOlxuICAgIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fYmFja2dyb3VuZENvbG9yO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWwpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuX2JhY2tncm91bmRDb2xvciA9IHZhbDtcbiAgICAgICAgICAgIHRoaXMuX2JhY2tncm91bmRDb2xvclN0cmluZyA9IHV0aWxzLmhleDJzdHJpbmcodmFsKTtcbiAgICAgICAgICAgIHV0aWxzLmhleDJyZ2IodmFsLCB0aGlzLl9iYWNrZ3JvdW5kQ29sb3JSZ2JhKTtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuXG4vKipcbiAqIFJlc2l6ZXMgdGhlIGNhbnZhcyB2aWV3IHRvIHRoZSBzcGVjaWZpZWQgd2lkdGggYW5kIGhlaWdodFxuICpcbiAqIEBwYXJhbSB3aWR0aCB7bnVtYmVyfSB0aGUgbmV3IHdpZHRoIG9mIHRoZSBjYW52YXMgdmlld1xuICogQHBhcmFtIGhlaWdodCB7bnVtYmVyfSB0aGUgbmV3IGhlaWdodCBvZiB0aGUgY2FudmFzIHZpZXdcbiAqL1xuU3lzdGVtUmVuZGVyZXIucHJvdG90eXBlLnJlc2l6ZSA9IGZ1bmN0aW9uICh3aWR0aCwgaGVpZ2h0KSB7XG4gICAgdGhpcy53aWR0aCA9IHdpZHRoICogdGhpcy5yZXNvbHV0aW9uO1xuICAgIHRoaXMuaGVpZ2h0ID0gaGVpZ2h0ICogdGhpcy5yZXNvbHV0aW9uO1xuXG4gICAgdGhpcy52aWV3LndpZHRoID0gdGhpcy53aWR0aDtcbiAgICB0aGlzLnZpZXcuaGVpZ2h0ID0gdGhpcy5oZWlnaHQ7XG5cbiAgICBpZiAodGhpcy5hdXRvUmVzaXplKVxuICAgIHtcbiAgICAgICAgdGhpcy52aWV3LnN0eWxlLndpZHRoID0gdGhpcy53aWR0aCAvIHRoaXMucmVzb2x1dGlvbiArICdweCc7XG4gICAgICAgIHRoaXMudmlldy5zdHlsZS5oZWlnaHQgPSB0aGlzLmhlaWdodCAvIHRoaXMucmVzb2x1dGlvbiArICdweCc7XG4gICAgfVxufTtcblxuLyoqXG4gKiBSZW1vdmVzIGV2ZXJ5dGhpbmcgZnJvbSB0aGUgcmVuZGVyZXIgYW5kIG9wdGlvbmFsbHkgcmVtb3ZlcyB0aGUgQ2FudmFzIERPTSBlbGVtZW50LlxuICpcbiAqIEBwYXJhbSBbcmVtb3ZlVmlldz1mYWxzZV0ge2Jvb2xlYW59IFJlbW92ZXMgdGhlIENhbnZhcyBlbGVtZW50IGZyb20gdGhlIERPTS5cbiAqL1xuU3lzdGVtUmVuZGVyZXIucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAocmVtb3ZlVmlldykge1xuICAgIGlmIChyZW1vdmVWaWV3ICYmIHRoaXMudmlldy5wYXJlbnROb2RlKVxuICAgIHtcbiAgICAgICAgdGhpcy52aWV3LnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodGhpcy52aWV3KTtcbiAgICB9XG5cbiAgICB0aGlzLnR5cGUgPSBDT05TVC5SRU5ERVJFUl9UWVBFLlVOS05PV047XG5cbiAgICB0aGlzLndpZHRoID0gMDtcbiAgICB0aGlzLmhlaWdodCA9IDA7XG5cbiAgICB0aGlzLnZpZXcgPSBudWxsO1xuXG4gICAgdGhpcy5yZXNvbHV0aW9uID0gMDtcblxuICAgIHRoaXMudHJhbnNwYXJlbnQgPSBmYWxzZTtcblxuICAgIHRoaXMuYXV0b1Jlc2l6ZSA9IGZhbHNlO1xuXG4gICAgdGhpcy5ibGVuZE1vZGVzID0gbnVsbDtcblxuICAgIHRoaXMucHJlc2VydmVEcmF3aW5nQnVmZmVyID0gZmFsc2U7XG4gICAgdGhpcy5jbGVhckJlZm9yZVJlbmRlciA9IGZhbHNlO1xuXG4gICAgdGhpcy5yb3VuZFBpeGVscyA9IGZhbHNlO1xuXG4gICAgdGhpcy5fYmFja2dyb3VuZENvbG9yID0gMDtcbiAgICB0aGlzLl9iYWNrZ3JvdW5kQ29sb3JSZ2JhID0gbnVsbDtcbiAgICB0aGlzLl9iYWNrZ3JvdW5kQ29sb3JTdHJpbmcgPSBudWxsO1xufTtcbiIsInZhciBTeXN0ZW1SZW5kZXJlciA9IHJlcXVpcmUoJy4uL1N5c3RlbVJlbmRlcmVyJyksXG4gICAgQ2FudmFzTWFza01hbmFnZXIgPSByZXF1aXJlKCcuL3V0aWxzL0NhbnZhc01hc2tNYW5hZ2VyJyksXG4gICAgdXRpbHMgPSByZXF1aXJlKCcuLi8uLi91dGlscycpLFxuICAgIG1hdGggPSByZXF1aXJlKCcuLi8uLi9tYXRoJyksXG4gICAgQ09OU1QgPSByZXF1aXJlKCcuLi8uLi9jb25zdCcpO1xuXG4vKipcbiAqIFRoZSBDYW52YXNSZW5kZXJlciBkcmF3cyB0aGUgc2NlbmUgYW5kIGFsbCBpdHMgY29udGVudCBvbnRvIGEgMmQgY2FudmFzLiBUaGlzIHJlbmRlcmVyIHNob3VsZCBiZSB1c2VkIGZvciBicm93c2VycyB0aGF0IGRvIG5vdCBzdXBwb3J0IHdlYkdMLlxuICogRG9uJ3QgZm9yZ2V0IHRvIGFkZCB0aGUgQ2FudmFzUmVuZGVyZXIudmlldyB0byB5b3VyIERPTSBvciB5b3Ugd2lsbCBub3Qgc2VlIGFueXRoaW5nIDopXG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQGV4dGVuZHMgUElYSS5TeXN0ZW1SZW5kZXJlclxuICogQHBhcmFtIFt3aWR0aD04MDBdIHtudW1iZXJ9IHRoZSB3aWR0aCBvZiB0aGUgY2FudmFzIHZpZXdcbiAqIEBwYXJhbSBbaGVpZ2h0PTYwMF0ge251bWJlcn0gdGhlIGhlaWdodCBvZiB0aGUgY2FudmFzIHZpZXdcbiAqIEBwYXJhbSBbb3B0aW9uc10ge29iamVjdH0gVGhlIG9wdGlvbmFsIHJlbmRlcmVyIHBhcmFtZXRlcnNcbiAqIEBwYXJhbSBbb3B0aW9ucy52aWV3XSB7SFRNTENhbnZhc0VsZW1lbnR9IHRoZSBjYW52YXMgdG8gdXNlIGFzIGEgdmlldywgb3B0aW9uYWxcbiAqIEBwYXJhbSBbb3B0aW9ucy50cmFuc3BhcmVudD1mYWxzZV0ge2Jvb2xlYW59IElmIHRoZSByZW5kZXIgdmlldyBpcyB0cmFuc3BhcmVudCwgZGVmYXVsdCBmYWxzZVxuICogQHBhcmFtIFtvcHRpb25zLmF1dG9SZXNpemU9ZmFsc2VdIHtib29sZWFufSBJZiB0aGUgcmVuZGVyIHZpZXcgaXMgYXV0b21hdGljYWxseSByZXNpemVkLCBkZWZhdWx0IGZhbHNlXG4gKiBAcGFyYW0gW29wdGlvbnMuYW50aWFsaWFzPWZhbHNlXSB7Ym9vbGVhbn0gc2V0cyBhbnRpYWxpYXMgKG9ubHkgYXBwbGljYWJsZSBpbiBjaHJvbWUgYXQgdGhlIG1vbWVudClcbiAqIEBwYXJhbSBbb3B0aW9ucy5yZXNvbHV0aW9uPTFdIHtudW1iZXJ9IHRoZSByZXNvbHV0aW9uIG9mIHRoZSByZW5kZXJlciByZXRpbmEgd291bGQgYmUgMlxuICogQHBhcmFtIFtvcHRpb25zLmNsZWFyQmVmb3JlUmVuZGVyPXRydWVdIHtib29sZWFufSBUaGlzIHNldHMgaWYgdGhlIENhbnZhc1JlbmRlcmVyIHdpbGwgY2xlYXIgdGhlIGNhbnZhcyBvclxuICogICAgICBub3QgYmVmb3JlIHRoZSBuZXcgcmVuZGVyIHBhc3MuXG4gKiBAcGFyYW0gW29wdGlvbnMucm91bmRQaXhlbHM9ZmFsc2VdIHtib29sZWFufSBJZiB0cnVlIFBpeGkgd2lsbCBNYXRoLmZsb29yKCkgeC95IHZhbHVlcyB3aGVuIHJlbmRlcmluZywgc3RvcHBpbmcgcGl4ZWwgaW50ZXJwb2xhdGlvbi5cbiAqL1xuZnVuY3Rpb24gQ2FudmFzUmVuZGVyZXIod2lkdGgsIGhlaWdodCwgb3B0aW9ucylcbntcbiAgICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcblxuICAgIFN5c3RlbVJlbmRlcmVyLmNhbGwodGhpcywgJ0NhbnZhcycsIHdpZHRoLCBoZWlnaHQsIG9wdGlvbnMpO1xuXG4gICAgdGhpcy50eXBlID0gQ09OU1QuUkVOREVSRVJfVFlQRS5DQU5WQVM7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgY2FudmFzIDJkIGNvbnRleHQgdGhhdCBldmVyeXRoaW5nIGlzIGRyYXduIHdpdGguXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtDYW52YXNSZW5kZXJpbmdDb250ZXh0MkR9XG4gICAgICovXG4gICAgdGhpcy5jb250ZXh0ID0gdGhpcy52aWV3LmdldENvbnRleHQoJzJkJywgeyBhbHBoYTogdGhpcy50cmFuc3BhcmVudCB9KTtcblxuICAgIC8qKlxuICAgICAqIEJvb2xlYW4gZmxhZyBjb250cm9sbGluZyBjYW52YXMgcmVmcmVzaC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICovXG4gICAgdGhpcy5yZWZyZXNoID0gdHJ1ZTtcblxuICAgIC8qKlxuICAgICAqIEluc3RhbmNlIG9mIGEgQ2FudmFzTWFza01hbmFnZXIsIGhhbmRsZXMgbWFza2luZyB3aGVuIHVzaW5nIHRoZSBjYW52YXMgcmVuZGVyZXIuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLkNhbnZhc01hc2tNYW5hZ2VyfVxuICAgICAqL1xuICAgIHRoaXMubWFza01hbmFnZXIgPSBuZXcgQ2FudmFzTWFza01hbmFnZXIoKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBjYW52YXMgcHJvcGVydHkgdXNlZCB0byBzZXQgdGhlIGNhbnZhcyBzbW9vdGhpbmcgcHJvcGVydHkuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtzdHJpbmd9XG4gICAgICovXG4gICAgdGhpcy5zbW9vdGhQcm9wZXJ0eSA9ICdpbWFnZVNtb290aGluZ0VuYWJsZWQnO1xuXG4gICAgaWYgKCF0aGlzLmNvbnRleHQuaW1hZ2VTbW9vdGhpbmdFbmFibGVkKVxuICAgIHtcbiAgICAgICAgaWYgKHRoaXMuY29udGV4dC53ZWJraXRJbWFnZVNtb290aGluZ0VuYWJsZWQpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuc21vb3RoUHJvcGVydHkgPSAnd2Via2l0SW1hZ2VTbW9vdGhpbmdFbmFibGVkJztcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh0aGlzLmNvbnRleHQubW96SW1hZ2VTbW9vdGhpbmdFbmFibGVkKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnNtb290aFByb3BlcnR5ID0gJ21vekltYWdlU21vb3RoaW5nRW5hYmxlZCc7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodGhpcy5jb250ZXh0Lm9JbWFnZVNtb290aGluZ0VuYWJsZWQpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuc21vb3RoUHJvcGVydHkgPSAnb0ltYWdlU21vb3RoaW5nRW5hYmxlZCc7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodGhpcy5jb250ZXh0Lm1zSW1hZ2VTbW9vdGhpbmdFbmFibGVkKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnNtb290aFByb3BlcnR5ID0gJ21zSW1hZ2VTbW9vdGhpbmdFbmFibGVkJztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMuaW5pdFBsdWdpbnMoKTtcblxuICAgIHRoaXMuX21hcEJsZW5kTW9kZXMoKTtcblxuICAgIC8qKlxuICAgICAqIFRoaXMgdGVtcG9yYXJ5IGRpc3BsYXkgb2JqZWN0IHVzZWQgYXMgdGhlIHBhcmVudCBvZiB0aGUgY3VycmVudGx5IGJlaW5nIHJlbmRlcmVkIGl0ZW1cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuRGlzcGxheU9iamVjdH1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX3RlbXBEaXNwbGF5T2JqZWN0UGFyZW50ID0ge1xuICAgICAgICB3b3JsZFRyYW5zZm9ybTogbmV3IG1hdGguTWF0cml4KCksXG4gICAgICAgIHdvcmxkQWxwaGE6IDFcbiAgICB9O1xuXG5cbiAgICB0aGlzLnJlc2l6ZSh3aWR0aCwgaGVpZ2h0KTtcbn1cblxuLy8gY29uc3RydWN0b3JcbkNhbnZhc1JlbmRlcmVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoU3lzdGVtUmVuZGVyZXIucHJvdG90eXBlKTtcbkNhbnZhc1JlbmRlcmVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IENhbnZhc1JlbmRlcmVyO1xubW9kdWxlLmV4cG9ydHMgPSBDYW52YXNSZW5kZXJlcjtcbnV0aWxzLnBsdWdpblRhcmdldC5taXhpbihDYW52YXNSZW5kZXJlcik7XG5cbi8qKlxuICogUmVuZGVycyB0aGUgb2JqZWN0IHRvIHRoaXMgY2FudmFzIHZpZXdcbiAqXG4gKiBAcGFyYW0gb2JqZWN0IHtQSVhJLkRpc3BsYXlPYmplY3R9IHRoZSBvYmplY3QgdG8gYmUgcmVuZGVyZWRcbiAqL1xuQ2FudmFzUmVuZGVyZXIucHJvdG90eXBlLnJlbmRlciA9IGZ1bmN0aW9uIChvYmplY3QpXG57XG4gICAgdGhpcy5lbWl0KCdwcmVyZW5kZXInKTtcblxuICAgIHZhciBjYWNoZVBhcmVudCA9IG9iamVjdC5wYXJlbnQ7XG5cbiAgICB0aGlzLl9sYXN0T2JqZWN0UmVuZGVyZWQgPSBvYmplY3Q7XG5cbiAgICBvYmplY3QucGFyZW50ID0gdGhpcy5fdGVtcERpc3BsYXlPYmplY3RQYXJlbnQ7XG5cbiAgICAvLyB1cGRhdGUgdGhlIHNjZW5lIGdyYXBoXG4gICAgb2JqZWN0LnVwZGF0ZVRyYW5zZm9ybSgpO1xuXG4gICAgb2JqZWN0LnBhcmVudCA9IGNhY2hlUGFyZW50O1xuXG4gICAgdGhpcy5jb250ZXh0LnNldFRyYW5zZm9ybSgxLCAwLCAwLCAxLCAwLCAwKTtcblxuICAgIHRoaXMuY29udGV4dC5nbG9iYWxBbHBoYSA9IDE7XG5cbiAgICB0aGlzLmNvbnRleHQuZ2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uID0gdGhpcy5ibGVuZE1vZGVzW0NPTlNULkJMRU5EX01PREVTLk5PUk1BTF07XG5cbiAgICBpZiAobmF2aWdhdG9yLmlzQ29jb29uSlMgJiYgdGhpcy52aWV3LnNjcmVlbmNhbnZhcylcbiAgICB7XG4gICAgICAgIHRoaXMuY29udGV4dC5maWxsU3R5bGUgPSAnYmxhY2snO1xuICAgICAgICB0aGlzLmNvbnRleHQuY2xlYXIoKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5jbGVhckJlZm9yZVJlbmRlcilcbiAgICB7XG4gICAgICAgIGlmICh0aGlzLnRyYW5zcGFyZW50KVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmNvbnRleHQuY2xlYXJSZWN0KDAsIDAsIHRoaXMud2lkdGgsIHRoaXMuaGVpZ2h0KTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuY29udGV4dC5maWxsU3R5bGUgPSB0aGlzLl9iYWNrZ3JvdW5kQ29sb3JTdHJpbmc7XG4gICAgICAgICAgICB0aGlzLmNvbnRleHQuZmlsbFJlY3QoMCwgMCwgdGhpcy53aWR0aCAsIHRoaXMuaGVpZ2h0KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMucmVuZGVyRGlzcGxheU9iamVjdChvYmplY3QsIHRoaXMuY29udGV4dCk7XG5cbiAgICB0aGlzLmVtaXQoJ3Bvc3RyZW5kZXInKTtcbn07XG5cbi8qKlxuICogUmVtb3ZlcyBldmVyeXRoaW5nIGZyb20gdGhlIHJlbmRlcmVyIGFuZCBvcHRpb25hbGx5IHJlbW92ZXMgdGhlIENhbnZhcyBET00gZWxlbWVudC5cbiAqXG4gKiBAcGFyYW0gW3JlbW92ZVZpZXc9ZmFsc2VdIHtib29sZWFufSBSZW1vdmVzIHRoZSBDYW52YXMgZWxlbWVudCBmcm9tIHRoZSBET00uXG4gKi9cbkNhbnZhc1JlbmRlcmVyLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKHJlbW92ZVZpZXcpXG57XG4gICAgdGhpcy5kZXN0cm95UGx1Z2lucygpO1xuXG4gICAgLy8gY2FsbCB0aGUgYmFzZSBkZXN0cm95XG4gICAgU3lzdGVtUmVuZGVyZXIucHJvdG90eXBlLmRlc3Ryb3kuY2FsbCh0aGlzLCByZW1vdmVWaWV3KTtcblxuICAgIHRoaXMuY29udGV4dCA9IG51bGw7XG5cbiAgICB0aGlzLnJlZnJlc2ggPSB0cnVlO1xuXG4gICAgdGhpcy5tYXNrTWFuYWdlci5kZXN0cm95KCk7XG4gICAgdGhpcy5tYXNrTWFuYWdlciA9IG51bGw7XG5cbiAgICB0aGlzLnNtb290aFByb3BlcnR5ID0gbnVsbDtcbn07XG5cbi8qKlxuICogUmVuZGVycyBhIGRpc3BsYXkgb2JqZWN0XG4gKlxuICogQHBhcmFtIGRpc3BsYXlPYmplY3Qge1BJWEkuRGlzcGxheU9iamVjdH0gVGhlIGRpc3BsYXlPYmplY3QgdG8gcmVuZGVyXG4gKiBAcHJpdmF0ZVxuICovXG5DYW52YXNSZW5kZXJlci5wcm90b3R5cGUucmVuZGVyRGlzcGxheU9iamVjdCA9IGZ1bmN0aW9uIChkaXNwbGF5T2JqZWN0LCBjb250ZXh0KVxue1xuICAgIHZhciB0ZW1wQ29udGV4dCA9IHRoaXMuY29udGV4dDtcblxuICAgIHRoaXMuY29udGV4dCA9IGNvbnRleHQ7XG4gICAgZGlzcGxheU9iamVjdC5yZW5kZXJDYW52YXModGhpcyk7XG4gICAgdGhpcy5jb250ZXh0ID0gdGVtcENvbnRleHQ7XG59O1xuXG4vKipcbiAqIEBleHRlbmRzIFBJWEkuU3lzdGVtUmVuZGVyZXIjcmVzaXplXG4gKlxuICogQHBhcmFtIHtudW1iZXJ9IHdcbiAqIEBwYXJhbSB7bnVtYmVyfSBoXG4gKi9cbkNhbnZhc1JlbmRlcmVyLnByb3RvdHlwZS5yZXNpemUgPSBmdW5jdGlvbiAodywgaClcbntcbiAgICBTeXN0ZW1SZW5kZXJlci5wcm90b3R5cGUucmVzaXplLmNhbGwodGhpcywgdywgaCk7XG5cbiAgICAvL3Jlc2V0IHRoZSBzY2FsZSBtb2RlLi4gb2RkbHkgdGhpcyBzZWVtcyB0byBiZSByZXNldCB3aGVuIHRoZSBjYW52YXMgaXMgcmVzaXplZC5cbiAgICAvL3N1cmVseSBhIGJyb3dzZXIgYnVnPz8gTGV0IHBpeGkgZml4IHRoYXQgZm9yIHlvdS4uXG4gICAgaWYodGhpcy5zbW9vdGhQcm9wZXJ0eSlcbiAgICB7XG4gICAgICAgIHRoaXMuY29udGV4dFt0aGlzLnNtb290aFByb3BlcnR5XSA9IChDT05TVC5TQ0FMRV9NT0RFUy5ERUZBVUxUID09PSBDT05TVC5TQ0FMRV9NT0RFUy5MSU5FQVIpO1xuICAgIH1cblxufTtcblxuLyoqXG4gKiBNYXBzIFBpeGkgYmxlbmQgbW9kZXMgdG8gY2FudmFzIGJsZW5kIG1vZGVzLlxuICpcbiAqIEBwcml2YXRlXG4gKi9cbkNhbnZhc1JlbmRlcmVyLnByb3RvdHlwZS5fbWFwQmxlbmRNb2RlcyA9IGZ1bmN0aW9uICgpXG57XG4gICAgaWYgKCF0aGlzLmJsZW5kTW9kZXMpXG4gICAge1xuICAgICAgICB0aGlzLmJsZW5kTW9kZXMgPSB7fTtcblxuICAgICAgICBpZiAodXRpbHMuY2FuVXNlTmV3Q2FudmFzQmxlbmRNb2RlcygpKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuTk9STUFMXSAgICAgICAgPSAnc291cmNlLW92ZXInO1xuICAgICAgICAgICAgdGhpcy5ibGVuZE1vZGVzW0NPTlNULkJMRU5EX01PREVTLkFERF0gICAgICAgICAgID0gJ2xpZ2h0ZXInOyAvL0lTIFRISVMgT0s/Pz9cbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5NVUxUSVBMWV0gICAgICA9ICdtdWx0aXBseSc7XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuU0NSRUVOXSAgICAgICAgPSAnc2NyZWVuJztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5PVkVSTEFZXSAgICAgICA9ICdvdmVybGF5JztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5EQVJLRU5dICAgICAgICA9ICdkYXJrZW4nO1xuICAgICAgICAgICAgdGhpcy5ibGVuZE1vZGVzW0NPTlNULkJMRU5EX01PREVTLkxJR0hURU5dICAgICAgID0gJ2xpZ2h0ZW4nO1xuICAgICAgICAgICAgdGhpcy5ibGVuZE1vZGVzW0NPTlNULkJMRU5EX01PREVTLkNPTE9SX0RPREdFXSAgID0gJ2NvbG9yLWRvZGdlJztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5DT0xPUl9CVVJOXSAgICA9ICdjb2xvci1idXJuJztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5IQVJEX0xJR0hUXSAgICA9ICdoYXJkLWxpZ2h0JztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5TT0ZUX0xJR0hUXSAgICA9ICdzb2Z0LWxpZ2h0JztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5ESUZGRVJFTkNFXSAgICA9ICdkaWZmZXJlbmNlJztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5FWENMVVNJT05dICAgICA9ICdleGNsdXNpb24nO1xuICAgICAgICAgICAgdGhpcy5ibGVuZE1vZGVzW0NPTlNULkJMRU5EX01PREVTLkhVRV0gICAgICAgICAgID0gJ2h1ZSc7XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuU0FUVVJBVElPTl0gICAgPSAnc2F0dXJhdGUnO1xuICAgICAgICAgICAgdGhpcy5ibGVuZE1vZGVzW0NPTlNULkJMRU5EX01PREVTLkNPTE9SXSAgICAgICAgID0gJ2NvbG9yJztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5MVU1JTk9TSVRZXSAgICA9ICdsdW1pbm9zaXR5JztcbiAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgIHtcbiAgICAgICAgICAgIC8vIHRoaXMgbWVhbnMgdGhhdCB0aGUgYnJvd3NlciBkb2VzIG5vdCBzdXBwb3J0IHRoZSBjb29sIG5ldyBibGVuZCBtb2RlcyBpbiBjYW52YXMgJ2NvdWdoJyBpZSAnY291Z2gnXG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuTk9STUFMXSAgICAgICAgPSAnc291cmNlLW92ZXInO1xuICAgICAgICAgICAgdGhpcy5ibGVuZE1vZGVzW0NPTlNULkJMRU5EX01PREVTLkFERF0gICAgICAgICAgID0gJ2xpZ2h0ZXInOyAvL0lTIFRISVMgT0s/Pz9cbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5NVUxUSVBMWV0gICAgICA9ICdzb3VyY2Utb3Zlcic7XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuU0NSRUVOXSAgICAgICAgPSAnc291cmNlLW92ZXInO1xuICAgICAgICAgICAgdGhpcy5ibGVuZE1vZGVzW0NPTlNULkJMRU5EX01PREVTLk9WRVJMQVldICAgICAgID0gJ3NvdXJjZS1vdmVyJztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5EQVJLRU5dICAgICAgICA9ICdzb3VyY2Utb3Zlcic7XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuTElHSFRFTl0gICAgICAgPSAnc291cmNlLW92ZXInO1xuICAgICAgICAgICAgdGhpcy5ibGVuZE1vZGVzW0NPTlNULkJMRU5EX01PREVTLkNPTE9SX0RPREdFXSAgID0gJ3NvdXJjZS1vdmVyJztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5DT0xPUl9CVVJOXSAgICA9ICdzb3VyY2Utb3Zlcic7XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuSEFSRF9MSUdIVF0gICAgPSAnc291cmNlLW92ZXInO1xuICAgICAgICAgICAgdGhpcy5ibGVuZE1vZGVzW0NPTlNULkJMRU5EX01PREVTLlNPRlRfTElHSFRdICAgID0gJ3NvdXJjZS1vdmVyJztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5ESUZGRVJFTkNFXSAgICA9ICdzb3VyY2Utb3Zlcic7XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuRVhDTFVTSU9OXSAgICAgPSAnc291cmNlLW92ZXInO1xuICAgICAgICAgICAgdGhpcy5ibGVuZE1vZGVzW0NPTlNULkJMRU5EX01PREVTLkhVRV0gICAgICAgICAgID0gJ3NvdXJjZS1vdmVyJztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5TQVRVUkFUSU9OXSAgICA9ICdzb3VyY2Utb3Zlcic7XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuQ09MT1JdICAgICAgICAgPSAnc291cmNlLW92ZXInO1xuICAgICAgICAgICAgdGhpcy5ibGVuZE1vZGVzW0NPTlNULkJMRU5EX01PREVTLkxVTUlOT1NJVFldICAgID0gJ3NvdXJjZS1vdmVyJztcbiAgICAgICAgfVxuICAgIH1cbn07XG4iLCIvKipcbiAqIENyZWF0ZXMgYSBDYW52YXMgZWxlbWVudCBvZiB0aGUgZ2l2ZW4gc2l6ZS5cbiAqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gd2lkdGgge251bWJlcn0gdGhlIHdpZHRoIGZvciB0aGUgbmV3bHkgY3JlYXRlZCBjYW52YXNcbiAqIEBwYXJhbSBoZWlnaHQge251bWJlcn0gdGhlIGhlaWdodCBmb3IgdGhlIG5ld2x5IGNyZWF0ZWQgY2FudmFzXG4gKi9cbmZ1bmN0aW9uIENhbnZhc0J1ZmZlcih3aWR0aCwgaGVpZ2h0KVxue1xuICAgIC8qKlxuICAgICAqIFRoZSBDYW52YXMgb2JqZWN0IHRoYXQgYmVsb25ncyB0byB0aGlzIENhbnZhc0J1ZmZlci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge0hUTUxDYW52YXNFbGVtZW50fVxuICAgICAqL1xuICAgIHRoaXMuY2FudmFzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnY2FudmFzJyk7XG5cbiAgICAvKipcbiAgICAgKiBBIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRCBvYmplY3QgcmVwcmVzZW50aW5nIGEgdHdvLWRpbWVuc2lvbmFsIHJlbmRlcmluZyBjb250ZXh0LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEfVxuICAgICAqL1xuICAgIHRoaXMuY29udGV4dCA9IHRoaXMuY2FudmFzLmdldENvbnRleHQoJzJkJyk7XG5cbiAgICB0aGlzLmNhbnZhcy53aWR0aCA9IHdpZHRoO1xuICAgIHRoaXMuY2FudmFzLmhlaWdodCA9IGhlaWdodDtcbn1cblxuQ2FudmFzQnVmZmVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IENhbnZhc0J1ZmZlcjtcbm1vZHVsZS5leHBvcnRzID0gQ2FudmFzQnVmZmVyO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhDYW52YXNCdWZmZXIucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogVGhlIHdpZHRoIG9mIHRoZSBjYW52YXMgYnVmZmVyIGluIHBpeGVscy5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5DYW52YXNCdWZmZXIjXG4gICAgICovXG4gICAgd2lkdGg6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jYW52YXMud2lkdGg7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbClcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5jYW52YXMud2lkdGggPSB2YWw7XG4gICAgICAgIH1cbiAgICB9LFxuICAgIC8qKlxuICAgICAqIFRoZSBoZWlnaHQgb2YgdGhlIGNhbnZhcyBidWZmZXIgaW4gcGl4ZWxzLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLkNhbnZhc0J1ZmZlciNcbiAgICAgKi9cbiAgICBoZWlnaHQ6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jYW52YXMuaGVpZ2h0O1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWwpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuY2FudmFzLmhlaWdodCA9IHZhbDtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuXG4vKipcbiAqIENsZWFycyB0aGUgY2FudmFzIHRoYXQgd2FzIGNyZWF0ZWQgYnkgdGhlIENhbnZhc0J1ZmZlciBjbGFzcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5DYW52YXNCdWZmZXIucHJvdG90eXBlLmNsZWFyID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLmNvbnRleHQuc2V0VHJhbnNmb3JtKDEsIDAsIDAsIDEsIDAsIDApO1xuICAgIHRoaXMuY29udGV4dC5jbGVhclJlY3QoMCwwLCB0aGlzLmNhbnZhcy53aWR0aCwgdGhpcy5jYW52YXMuaGVpZ2h0KTtcbn07XG5cbi8qKlxuICogUmVzaXplcyB0aGUgY2FudmFzIHRvIHRoZSBzcGVjaWZpZWQgd2lkdGggYW5kIGhlaWdodC5cbiAqXG4gKiBAcGFyYW0gd2lkdGgge251bWJlcn0gdGhlIG5ldyB3aWR0aCBvZiB0aGUgY2FudmFzXG4gKiBAcGFyYW0gaGVpZ2h0IHtudW1iZXJ9IHRoZSBuZXcgaGVpZ2h0IG9mIHRoZSBjYW52YXNcbiAqL1xuQ2FudmFzQnVmZmVyLnByb3RvdHlwZS5yZXNpemUgPSBmdW5jdGlvbiAod2lkdGgsIGhlaWdodClcbntcbiAgICB0aGlzLmNhbnZhcy53aWR0aCA9IHdpZHRoO1xuICAgIHRoaXMuY2FudmFzLmhlaWdodCA9IGhlaWdodDtcbn07XG5cbi8qKlxuICogRGVzdHJveXMgdGhpcyBjYW52YXMuXG4gKlxuICovXG5DYW52YXNCdWZmZXIucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoKVxue1xuICAgIHRoaXMuY29udGV4dCA9IG51bGw7XG4gICAgdGhpcy5jYW52YXMgPSBudWxsO1xufTtcbiIsInZhciBDT05TVCA9IHJlcXVpcmUoJy4uLy4uLy4uL2NvbnN0Jyk7XG5cbi8qKlxuICogQSBzZXQgb2YgZnVuY3Rpb25zIHVzZWQgYnkgdGhlIGNhbnZhcyByZW5kZXJlciB0byBkcmF3IHRoZSBwcmltaXRpdmUgZ3JhcGhpY3MgZGF0YS5cbiAqIEBzdGF0aWNcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqL1xudmFyIENhbnZhc0dyYXBoaWNzID0ge307XG5tb2R1bGUuZXhwb3J0cyA9IENhbnZhc0dyYXBoaWNzO1xuXG4vKlxuICogUmVuZGVycyBhIEdyYXBoaWNzIG9iamVjdCB0byBhIGNhbnZhcy5cbiAqXG4gKiBAcGFyYW0gZ3JhcGhpY3Mge1BJWEkuR3JhcGhpY3N9IHRoZSBhY3R1YWwgZ3JhcGhpY3Mgb2JqZWN0IHRvIHJlbmRlclxuICogQHBhcmFtIGNvbnRleHQge0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRH0gdGhlIDJkIGRyYXdpbmcgbWV0aG9kIG9mIHRoZSBjYW52YXNcbiAqL1xuQ2FudmFzR3JhcGhpY3MucmVuZGVyR3JhcGhpY3MgPSBmdW5jdGlvbiAoZ3JhcGhpY3MsIGNvbnRleHQpXG57XG4gICAgdmFyIHdvcmxkQWxwaGEgPSBncmFwaGljcy53b3JsZEFscGhhO1xuXG4gICAgaWYgKGdyYXBoaWNzLmRpcnR5KVxuICAgIHtcbiAgICAgICAgdGhpcy51cGRhdGVHcmFwaGljc1RpbnQoZ3JhcGhpY3MpO1xuICAgICAgICBncmFwaGljcy5kaXJ0eSA9IGZhbHNlO1xuICAgIH1cblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZ3JhcGhpY3MuZ3JhcGhpY3NEYXRhLmxlbmd0aDsgaSsrKVxuICAgIHtcbiAgICAgICAgdmFyIGRhdGEgPSBncmFwaGljcy5ncmFwaGljc0RhdGFbaV07XG4gICAgICAgIHZhciBzaGFwZSA9IGRhdGEuc2hhcGU7XG5cbiAgICAgICAgdmFyIGZpbGxDb2xvciA9IGRhdGEuX2ZpbGxUaW50O1xuICAgICAgICB2YXIgbGluZUNvbG9yID0gZGF0YS5fbGluZVRpbnQ7XG5cbiAgICAgICAgY29udGV4dC5saW5lV2lkdGggPSBkYXRhLmxpbmVXaWR0aDtcblxuICAgICAgICBpZiAoZGF0YS50eXBlID09PSBDT05TVC5TSEFQRVMuUE9MWSlcbiAgICAgICAge1xuICAgICAgICAgICAgY29udGV4dC5iZWdpblBhdGgoKTtcblxuICAgICAgICAgICAgdmFyIHBvaW50cyA9IHNoYXBlLnBvaW50cztcblxuICAgICAgICAgICAgY29udGV4dC5tb3ZlVG8ocG9pbnRzWzBdLCBwb2ludHNbMV0pO1xuXG4gICAgICAgICAgICBmb3IgKHZhciBqPTE7IGogPCBwb2ludHMubGVuZ3RoLzI7IGorKylcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb250ZXh0LmxpbmVUbyhwb2ludHNbaiAqIDJdLCBwb2ludHNbaiAqIDIgKyAxXSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChzaGFwZS5jbG9zZWQpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29udGV4dC5saW5lVG8ocG9pbnRzWzBdLCBwb2ludHNbMV0pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBpZiB0aGUgZmlyc3QgYW5kIGxhc3QgcG9pbnQgYXJlIHRoZSBzYW1lIGNsb3NlIHRoZSBwYXRoIC0gbXVjaCBuZWF0ZXIgOilcbiAgICAgICAgICAgIGlmIChwb2ludHNbMF0gPT09IHBvaW50c1twb2ludHMubGVuZ3RoLTJdICYmIHBvaW50c1sxXSA9PT0gcG9pbnRzW3BvaW50cy5sZW5ndGgtMV0pXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29udGV4dC5jbG9zZVBhdGgoKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGRhdGEuZmlsbClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb250ZXh0Lmdsb2JhbEFscGhhID0gZGF0YS5maWxsQWxwaGEgKiB3b3JsZEFscGhhO1xuICAgICAgICAgICAgICAgIGNvbnRleHQuZmlsbFN0eWxlID0gJyMnICsgKCcwMDAwMCcgKyAoIGZpbGxDb2xvciB8IDApLnRvU3RyaW5nKDE2KSkuc3Vic3RyKC02KTtcbiAgICAgICAgICAgICAgICBjb250ZXh0LmZpbGwoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChkYXRhLmxpbmVXaWR0aClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb250ZXh0Lmdsb2JhbEFscGhhID0gZGF0YS5saW5lQWxwaGEgKiB3b3JsZEFscGhhO1xuICAgICAgICAgICAgICAgIGNvbnRleHQuc3Ryb2tlU3R5bGUgPSAnIycgKyAoJzAwMDAwJyArICggbGluZUNvbG9yIHwgMCkudG9TdHJpbmcoMTYpKS5zdWJzdHIoLTYpO1xuICAgICAgICAgICAgICAgIGNvbnRleHQuc3Ryb2tlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoZGF0YS50eXBlID09PSBDT05TVC5TSEFQRVMuUkVDVClcbiAgICAgICAge1xuXG4gICAgICAgICAgICBpZiAoZGF0YS5maWxsQ29sb3IgfHwgZGF0YS5maWxsQ29sb3IgPT09IDApXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29udGV4dC5nbG9iYWxBbHBoYSA9IGRhdGEuZmlsbEFscGhhICogd29ybGRBbHBoYTtcbiAgICAgICAgICAgICAgICBjb250ZXh0LmZpbGxTdHlsZSA9ICcjJyArICgnMDAwMDAnICsgKCBmaWxsQ29sb3IgfCAwKS50b1N0cmluZygxNikpLnN1YnN0cigtNik7XG4gICAgICAgICAgICAgICAgY29udGV4dC5maWxsUmVjdChzaGFwZS54LCBzaGFwZS55LCBzaGFwZS53aWR0aCwgc2hhcGUuaGVpZ2h0KTtcblxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGRhdGEubGluZVdpZHRoKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGNvbnRleHQuZ2xvYmFsQWxwaGEgPSBkYXRhLmxpbmVBbHBoYSAqIHdvcmxkQWxwaGE7XG4gICAgICAgICAgICAgICAgY29udGV4dC5zdHJva2VTdHlsZSA9ICcjJyArICgnMDAwMDAnICsgKCBsaW5lQ29sb3IgfCAwKS50b1N0cmluZygxNikpLnN1YnN0cigtNik7XG4gICAgICAgICAgICAgICAgY29udGV4dC5zdHJva2VSZWN0KHNoYXBlLngsIHNoYXBlLnksIHNoYXBlLndpZHRoLCBzaGFwZS5oZWlnaHQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGRhdGEudHlwZSA9PT0gQ09OU1QuU0hBUEVTLkNJUkMpXG4gICAgICAgIHtcbiAgICAgICAgICAgIC8vIFRPRE8gLSBuZWVkIHRvIGJlIFVuZGVmaW5lZCFcbiAgICAgICAgICAgIGNvbnRleHQuYmVnaW5QYXRoKCk7XG4gICAgICAgICAgICBjb250ZXh0LmFyYyhzaGFwZS54LCBzaGFwZS55LCBzaGFwZS5yYWRpdXMsMCwyKk1hdGguUEkpO1xuICAgICAgICAgICAgY29udGV4dC5jbG9zZVBhdGgoKTtcblxuICAgICAgICAgICAgaWYgKGRhdGEuZmlsbClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb250ZXh0Lmdsb2JhbEFscGhhID0gZGF0YS5maWxsQWxwaGEgKiB3b3JsZEFscGhhO1xuICAgICAgICAgICAgICAgIGNvbnRleHQuZmlsbFN0eWxlID0gJyMnICsgKCcwMDAwMCcgKyAoIGZpbGxDb2xvciB8IDApLnRvU3RyaW5nKDE2KSkuc3Vic3RyKC02KTtcbiAgICAgICAgICAgICAgICBjb250ZXh0LmZpbGwoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChkYXRhLmxpbmVXaWR0aClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb250ZXh0Lmdsb2JhbEFscGhhID0gZGF0YS5saW5lQWxwaGEgKiB3b3JsZEFscGhhO1xuICAgICAgICAgICAgICAgIGNvbnRleHQuc3Ryb2tlU3R5bGUgPSAnIycgKyAoJzAwMDAwJyArICggbGluZUNvbG9yIHwgMCkudG9TdHJpbmcoMTYpKS5zdWJzdHIoLTYpO1xuICAgICAgICAgICAgICAgIGNvbnRleHQuc3Ryb2tlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoZGF0YS50eXBlID09PSBDT05TVC5TSEFQRVMuRUxJUClcbiAgICAgICAge1xuICAgICAgICAgICAgLy8gZWxsaXBzZSBjb2RlIHRha2VuIGZyb206IGh0dHA6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvMjE3Mjc5OC9ob3ctdG8tZHJhdy1hbi1vdmFsLWluLWh0bWw1LWNhbnZhc1xuXG4gICAgICAgICAgICB2YXIgdyA9IHNoYXBlLndpZHRoICogMjtcbiAgICAgICAgICAgIHZhciBoID0gc2hhcGUuaGVpZ2h0ICogMjtcblxuICAgICAgICAgICAgdmFyIHggPSBzaGFwZS54IC0gdy8yO1xuICAgICAgICAgICAgdmFyIHkgPSBzaGFwZS55IC0gaC8yO1xuXG4gICAgICAgICAgICBjb250ZXh0LmJlZ2luUGF0aCgpO1xuXG4gICAgICAgICAgICB2YXIga2FwcGEgPSAwLjU1MjI4NDgsXG4gICAgICAgICAgICAgICAgb3ggPSAodyAvIDIpICoga2FwcGEsIC8vIGNvbnRyb2wgcG9pbnQgb2Zmc2V0IGhvcml6b250YWxcbiAgICAgICAgICAgICAgICBveSA9IChoIC8gMikgKiBrYXBwYSwgLy8gY29udHJvbCBwb2ludCBvZmZzZXQgdmVydGljYWxcbiAgICAgICAgICAgICAgICB4ZSA9IHggKyB3LCAgICAgICAgICAgLy8geC1lbmRcbiAgICAgICAgICAgICAgICB5ZSA9IHkgKyBoLCAgICAgICAgICAgLy8geS1lbmRcbiAgICAgICAgICAgICAgICB4bSA9IHggKyB3IC8gMiwgICAgICAgLy8geC1taWRkbGVcbiAgICAgICAgICAgICAgICB5bSA9IHkgKyBoIC8gMjsgICAgICAgLy8geS1taWRkbGVcblxuICAgICAgICAgICAgY29udGV4dC5tb3ZlVG8oeCwgeW0pO1xuICAgICAgICAgICAgY29udGV4dC5iZXppZXJDdXJ2ZVRvKHgsIHltIC0gb3ksIHhtIC0gb3gsIHksIHhtLCB5KTtcbiAgICAgICAgICAgIGNvbnRleHQuYmV6aWVyQ3VydmVUbyh4bSArIG94LCB5LCB4ZSwgeW0gLSBveSwgeGUsIHltKTtcbiAgICAgICAgICAgIGNvbnRleHQuYmV6aWVyQ3VydmVUbyh4ZSwgeW0gKyBveSwgeG0gKyBveCwgeWUsIHhtLCB5ZSk7XG4gICAgICAgICAgICBjb250ZXh0LmJlemllckN1cnZlVG8oeG0gLSBveCwgeWUsIHgsIHltICsgb3ksIHgsIHltKTtcblxuICAgICAgICAgICAgY29udGV4dC5jbG9zZVBhdGgoKTtcblxuICAgICAgICAgICAgaWYgKGRhdGEuZmlsbClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb250ZXh0Lmdsb2JhbEFscGhhID0gZGF0YS5maWxsQWxwaGEgKiB3b3JsZEFscGhhO1xuICAgICAgICAgICAgICAgIGNvbnRleHQuZmlsbFN0eWxlID0gJyMnICsgKCcwMDAwMCcgKyAoIGZpbGxDb2xvciB8IDApLnRvU3RyaW5nKDE2KSkuc3Vic3RyKC02KTtcbiAgICAgICAgICAgICAgICBjb250ZXh0LmZpbGwoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChkYXRhLmxpbmVXaWR0aClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb250ZXh0Lmdsb2JhbEFscGhhID0gZGF0YS5saW5lQWxwaGEgKiB3b3JsZEFscGhhO1xuICAgICAgICAgICAgICAgIGNvbnRleHQuc3Ryb2tlU3R5bGUgPSAnIycgKyAoJzAwMDAwJyArICggbGluZUNvbG9yIHwgMCkudG9TdHJpbmcoMTYpKS5zdWJzdHIoLTYpO1xuICAgICAgICAgICAgICAgIGNvbnRleHQuc3Ryb2tlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoZGF0YS50eXBlID09PSBDT05TVC5TSEFQRVMuUlJFQylcbiAgICAgICAge1xuICAgICAgICAgICAgdmFyIHJ4ID0gc2hhcGUueDtcbiAgICAgICAgICAgIHZhciByeSA9IHNoYXBlLnk7XG4gICAgICAgICAgICB2YXIgd2lkdGggPSBzaGFwZS53aWR0aDtcbiAgICAgICAgICAgIHZhciBoZWlnaHQgPSBzaGFwZS5oZWlnaHQ7XG4gICAgICAgICAgICB2YXIgcmFkaXVzID0gc2hhcGUucmFkaXVzO1xuXG4gICAgICAgICAgICB2YXIgbWF4UmFkaXVzID0gTWF0aC5taW4od2lkdGgsIGhlaWdodCkgLyAyIHwgMDtcbiAgICAgICAgICAgIHJhZGl1cyA9IHJhZGl1cyA+IG1heFJhZGl1cyA/IG1heFJhZGl1cyA6IHJhZGl1cztcblxuICAgICAgICAgICAgY29udGV4dC5iZWdpblBhdGgoKTtcbiAgICAgICAgICAgIGNvbnRleHQubW92ZVRvKHJ4LCByeSArIHJhZGl1cyk7XG4gICAgICAgICAgICBjb250ZXh0LmxpbmVUbyhyeCwgcnkgKyBoZWlnaHQgLSByYWRpdXMpO1xuICAgICAgICAgICAgY29udGV4dC5xdWFkcmF0aWNDdXJ2ZVRvKHJ4LCByeSArIGhlaWdodCwgcnggKyByYWRpdXMsIHJ5ICsgaGVpZ2h0KTtcbiAgICAgICAgICAgIGNvbnRleHQubGluZVRvKHJ4ICsgd2lkdGggLSByYWRpdXMsIHJ5ICsgaGVpZ2h0KTtcbiAgICAgICAgICAgIGNvbnRleHQucXVhZHJhdGljQ3VydmVUbyhyeCArIHdpZHRoLCByeSArIGhlaWdodCwgcnggKyB3aWR0aCwgcnkgKyBoZWlnaHQgLSByYWRpdXMpO1xuICAgICAgICAgICAgY29udGV4dC5saW5lVG8ocnggKyB3aWR0aCwgcnkgKyByYWRpdXMpO1xuICAgICAgICAgICAgY29udGV4dC5xdWFkcmF0aWNDdXJ2ZVRvKHJ4ICsgd2lkdGgsIHJ5LCByeCArIHdpZHRoIC0gcmFkaXVzLCByeSk7XG4gICAgICAgICAgICBjb250ZXh0LmxpbmVUbyhyeCArIHJhZGl1cywgcnkpO1xuICAgICAgICAgICAgY29udGV4dC5xdWFkcmF0aWNDdXJ2ZVRvKHJ4LCByeSwgcngsIHJ5ICsgcmFkaXVzKTtcbiAgICAgICAgICAgIGNvbnRleHQuY2xvc2VQYXRoKCk7XG5cbiAgICAgICAgICAgIGlmIChkYXRhLmZpbGxDb2xvciB8fCBkYXRhLmZpbGxDb2xvciA9PT0gMClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb250ZXh0Lmdsb2JhbEFscGhhID0gZGF0YS5maWxsQWxwaGEgKiB3b3JsZEFscGhhO1xuICAgICAgICAgICAgICAgIGNvbnRleHQuZmlsbFN0eWxlID0gJyMnICsgKCcwMDAwMCcgKyAoIGZpbGxDb2xvciB8IDApLnRvU3RyaW5nKDE2KSkuc3Vic3RyKC02KTtcbiAgICAgICAgICAgICAgICBjb250ZXh0LmZpbGwoKTtcblxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGRhdGEubGluZVdpZHRoKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGNvbnRleHQuZ2xvYmFsQWxwaGEgPSBkYXRhLmxpbmVBbHBoYSAqIHdvcmxkQWxwaGE7XG4gICAgICAgICAgICAgICAgY29udGV4dC5zdHJva2VTdHlsZSA9ICcjJyArICgnMDAwMDAnICsgKCBsaW5lQ29sb3IgfCAwKS50b1N0cmluZygxNikpLnN1YnN0cigtNik7XG4gICAgICAgICAgICAgICAgY29udGV4dC5zdHJva2UoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn07XG5cbi8qXG4gKiBSZW5kZXJzIGEgZ3JhcGhpY3MgbWFza1xuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0gZ3JhcGhpY3Mge1BJWEkuR3JhcGhpY3N9IHRoZSBncmFwaGljcyB3aGljaCB3aWxsIGJlIHVzZWQgYXMgYSBtYXNrXG4gKiBAcGFyYW0gY29udGV4dCB7Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEfSB0aGUgY29udGV4dCAyZCBtZXRob2Qgb2YgdGhlIGNhbnZhc1xuICovXG5DYW52YXNHcmFwaGljcy5yZW5kZXJHcmFwaGljc01hc2sgPSBmdW5jdGlvbiAoZ3JhcGhpY3MsIGNvbnRleHQpXG57XG4gICAgdmFyIGxlbiA9IGdyYXBoaWNzLmdyYXBoaWNzRGF0YS5sZW5ndGg7XG5cbiAgICBpZiAobGVuID09PSAwKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnRleHQuYmVnaW5QYXRoKCk7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgaSsrKVxuICAgIHtcbiAgICAgICAgdmFyIGRhdGEgPSBncmFwaGljcy5ncmFwaGljc0RhdGFbaV07XG4gICAgICAgIHZhciBzaGFwZSA9IGRhdGEuc2hhcGU7XG5cbiAgICAgICAgaWYgKGRhdGEudHlwZSA9PT0gQ09OU1QuU0hBUEVTLlBPTFkpXG4gICAgICAgIHtcblxuICAgICAgICAgICAgdmFyIHBvaW50cyA9IHNoYXBlLnBvaW50cztcblxuICAgICAgICAgICAgY29udGV4dC5tb3ZlVG8ocG9pbnRzWzBdLCBwb2ludHNbMV0pO1xuXG4gICAgICAgICAgICBmb3IgKHZhciBqPTE7IGogPCBwb2ludHMubGVuZ3RoLzI7IGorKylcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb250ZXh0LmxpbmVUbyhwb2ludHNbaiAqIDJdLCBwb2ludHNbaiAqIDIgKyAxXSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIGlmIHRoZSBmaXJzdCBhbmQgbGFzdCBwb2ludCBhcmUgdGhlIHNhbWUgY2xvc2UgdGhlIHBhdGggLSBtdWNoIG5lYXRlciA6KVxuICAgICAgICAgICAgaWYgKHBvaW50c1swXSA9PT0gcG9pbnRzW3BvaW50cy5sZW5ndGgtMl0gJiYgcG9pbnRzWzFdID09PSBwb2ludHNbcG9pbnRzLmxlbmd0aC0xXSlcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb250ZXh0LmNsb3NlUGF0aCgpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoZGF0YS50eXBlID09PSBDT05TVC5TSEFQRVMuUkVDVClcbiAgICAgICAge1xuICAgICAgICAgICAgY29udGV4dC5yZWN0KHNoYXBlLngsIHNoYXBlLnksIHNoYXBlLndpZHRoLCBzaGFwZS5oZWlnaHQpO1xuICAgICAgICAgICAgY29udGV4dC5jbG9zZVBhdGgoKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChkYXRhLnR5cGUgPT09IENPTlNULlNIQVBFUy5DSVJDKVxuICAgICAgICB7XG4gICAgICAgICAgICAvLyBUT0RPIC0gbmVlZCB0byBiZSBVbmRlZmluZWQhXG4gICAgICAgICAgICBjb250ZXh0LmFyYyhzaGFwZS54LCBzaGFwZS55LCBzaGFwZS5yYWRpdXMsIDAsIDIgKiBNYXRoLlBJKTtcbiAgICAgICAgICAgIGNvbnRleHQuY2xvc2VQYXRoKCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoZGF0YS50eXBlID09PSBDT05TVC5TSEFQRVMuRUxJUClcbiAgICAgICAge1xuXG4gICAgICAgICAgICAvLyBlbGxpcHNlIGNvZGUgdGFrZW4gZnJvbTogaHR0cDovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy8yMTcyNzk4L2hvdy10by1kcmF3LWFuLW92YWwtaW4taHRtbDUtY2FudmFzXG5cbiAgICAgICAgICAgIHZhciB3ID0gc2hhcGUud2lkdGggKiAyO1xuICAgICAgICAgICAgdmFyIGggPSBzaGFwZS5oZWlnaHQgKiAyO1xuXG4gICAgICAgICAgICB2YXIgeCA9IHNoYXBlLnggLSB3LzI7XG4gICAgICAgICAgICB2YXIgeSA9IHNoYXBlLnkgLSBoLzI7XG5cbiAgICAgICAgICAgIHZhciBrYXBwYSA9IDAuNTUyMjg0OCxcbiAgICAgICAgICAgICAgICBveCA9ICh3IC8gMikgKiBrYXBwYSwgLy8gY29udHJvbCBwb2ludCBvZmZzZXQgaG9yaXpvbnRhbFxuICAgICAgICAgICAgICAgIG95ID0gKGggLyAyKSAqIGthcHBhLCAvLyBjb250cm9sIHBvaW50IG9mZnNldCB2ZXJ0aWNhbFxuICAgICAgICAgICAgICAgIHhlID0geCArIHcsICAgICAgICAgICAvLyB4LWVuZFxuICAgICAgICAgICAgICAgIHllID0geSArIGgsICAgICAgICAgICAvLyB5LWVuZFxuICAgICAgICAgICAgICAgIHhtID0geCArIHcgLyAyLCAgICAgICAvLyB4LW1pZGRsZVxuICAgICAgICAgICAgICAgIHltID0geSArIGggLyAyOyAgICAgICAvLyB5LW1pZGRsZVxuXG4gICAgICAgICAgICBjb250ZXh0Lm1vdmVUbyh4LCB5bSk7XG4gICAgICAgICAgICBjb250ZXh0LmJlemllckN1cnZlVG8oeCwgeW0gLSBveSwgeG0gLSBveCwgeSwgeG0sIHkpO1xuICAgICAgICAgICAgY29udGV4dC5iZXppZXJDdXJ2ZVRvKHhtICsgb3gsIHksIHhlLCB5bSAtIG95LCB4ZSwgeW0pO1xuICAgICAgICAgICAgY29udGV4dC5iZXppZXJDdXJ2ZVRvKHhlLCB5bSArIG95LCB4bSArIG94LCB5ZSwgeG0sIHllKTtcbiAgICAgICAgICAgIGNvbnRleHQuYmV6aWVyQ3VydmVUbyh4bSAtIG94LCB5ZSwgeCwgeW0gKyBveSwgeCwgeW0pO1xuICAgICAgICAgICAgY29udGV4dC5jbG9zZVBhdGgoKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChkYXRhLnR5cGUgPT09IENPTlNULlNIQVBFUy5SUkVDKVxuICAgICAgICB7XG5cbiAgICAgICAgICAgIHZhciByeCA9IHNoYXBlLng7XG4gICAgICAgICAgICB2YXIgcnkgPSBzaGFwZS55O1xuICAgICAgICAgICAgdmFyIHdpZHRoID0gc2hhcGUud2lkdGg7XG4gICAgICAgICAgICB2YXIgaGVpZ2h0ID0gc2hhcGUuaGVpZ2h0O1xuICAgICAgICAgICAgdmFyIHJhZGl1cyA9IHNoYXBlLnJhZGl1cztcblxuICAgICAgICAgICAgdmFyIG1heFJhZGl1cyA9IE1hdGgubWluKHdpZHRoLCBoZWlnaHQpIC8gMiB8IDA7XG4gICAgICAgICAgICByYWRpdXMgPSByYWRpdXMgPiBtYXhSYWRpdXMgPyBtYXhSYWRpdXMgOiByYWRpdXM7XG5cbiAgICAgICAgICAgIGNvbnRleHQubW92ZVRvKHJ4LCByeSArIHJhZGl1cyk7XG4gICAgICAgICAgICBjb250ZXh0LmxpbmVUbyhyeCwgcnkgKyBoZWlnaHQgLSByYWRpdXMpO1xuICAgICAgICAgICAgY29udGV4dC5xdWFkcmF0aWNDdXJ2ZVRvKHJ4LCByeSArIGhlaWdodCwgcnggKyByYWRpdXMsIHJ5ICsgaGVpZ2h0KTtcbiAgICAgICAgICAgIGNvbnRleHQubGluZVRvKHJ4ICsgd2lkdGggLSByYWRpdXMsIHJ5ICsgaGVpZ2h0KTtcbiAgICAgICAgICAgIGNvbnRleHQucXVhZHJhdGljQ3VydmVUbyhyeCArIHdpZHRoLCByeSArIGhlaWdodCwgcnggKyB3aWR0aCwgcnkgKyBoZWlnaHQgLSByYWRpdXMpO1xuICAgICAgICAgICAgY29udGV4dC5saW5lVG8ocnggKyB3aWR0aCwgcnkgKyByYWRpdXMpO1xuICAgICAgICAgICAgY29udGV4dC5xdWFkcmF0aWNDdXJ2ZVRvKHJ4ICsgd2lkdGgsIHJ5LCByeCArIHdpZHRoIC0gcmFkaXVzLCByeSk7XG4gICAgICAgICAgICBjb250ZXh0LmxpbmVUbyhyeCArIHJhZGl1cywgcnkpO1xuICAgICAgICAgICAgY29udGV4dC5xdWFkcmF0aWNDdXJ2ZVRvKHJ4LCByeSwgcngsIHJ5ICsgcmFkaXVzKTtcbiAgICAgICAgICAgIGNvbnRleHQuY2xvc2VQYXRoKCk7XG4gICAgICAgIH1cbiAgICB9XG59O1xuXG4vKlxuICogVXBkYXRlcyB0aGUgdGludCBvZiBhIGdyYXBoaWNzIG9iamVjdFxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0gZ3JhcGhpY3Mge1BJWEkuR3JhcGhpY3N9IHRoZSBncmFwaGljcyB0aGF0IHdpbGwgaGF2ZSBpdHMgdGludCB1cGRhdGVkXG4gKlxuICovXG5DYW52YXNHcmFwaGljcy51cGRhdGVHcmFwaGljc1RpbnQgPSBmdW5jdGlvbiAoZ3JhcGhpY3MpXG57XG4gICAgaWYgKGdyYXBoaWNzLnRpbnQgPT09IDB4RkZGRkZGICYmIGdyYXBoaWNzLl9wcmV2VGludCA9PT0gZ3JhcGhpY3MudGludClcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgZ3JhcGhpY3MuX3ByZXZUaW50ID0gZ3JhcGhpY3MudGludDtcblxuICAgIHZhciB0aW50UiA9IChncmFwaGljcy50aW50ID4+IDE2ICYgMHhGRikgLyAyNTU7XG4gICAgdmFyIHRpbnRHID0gKGdyYXBoaWNzLnRpbnQgPj4gOCAmIDB4RkYpIC8gMjU1O1xuICAgIHZhciB0aW50QiA9IChncmFwaGljcy50aW50ICYgMHhGRikvIDI1NTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZ3JhcGhpY3MuZ3JhcGhpY3NEYXRhLmxlbmd0aDsgaSsrKVxuICAgIHtcbiAgICAgICAgdmFyIGRhdGEgPSBncmFwaGljcy5ncmFwaGljc0RhdGFbaV07XG5cbiAgICAgICAgdmFyIGZpbGxDb2xvciA9IGRhdGEuZmlsbENvbG9yIHwgMDtcbiAgICAgICAgdmFyIGxpbmVDb2xvciA9IGRhdGEubGluZUNvbG9yIHwgMDtcblxuICAgICAgICAvKlxuICAgICAgICB2YXIgY29sb3JSID0gKGZpbGxDb2xvciA+PiAxNiAmIDB4RkYpIC8gMjU1O1xuICAgICAgICB2YXIgY29sb3JHID0gKGZpbGxDb2xvciA+PiA4ICYgMHhGRikgLyAyNTU7XG4gICAgICAgIHZhciBjb2xvckIgPSAoZmlsbENvbG9yICYgMHhGRikgLyAyNTU7XG5cbiAgICAgICAgY29sb3JSICo9IHRpbnRSO1xuICAgICAgICBjb2xvckcgKj0gdGludEc7XG4gICAgICAgIGNvbG9yQiAqPSB0aW50QjtcblxuICAgICAgICBmaWxsQ29sb3IgPSAoKGNvbG9yUioyNTUgPDwgMTYpICsgKGNvbG9yRyoyNTUgPDwgOCkgKyBjb2xvckIqMjU1KTtcblxuICAgICAgICBjb2xvclIgPSAobGluZUNvbG9yID4+IDE2ICYgMHhGRikgLyAyNTU7XG4gICAgICAgIGNvbG9yRyA9IChsaW5lQ29sb3IgPj4gOCAmIDB4RkYpIC8gMjU1O1xuICAgICAgICBjb2xvckIgPSAobGluZUNvbG9yICYgMHhGRikgLyAyNTU7XG5cbiAgICAgICAgY29sb3JSICo9IHRpbnRSO1xuICAgICAgICBjb2xvckcgKj0gdGludEc7XG4gICAgICAgIGNvbG9yQiAqPSB0aW50QjtcblxuICAgICAgICBsaW5lQ29sb3IgPSAoKGNvbG9yUioyNTUgPDwgMTYpICsgKGNvbG9yRyoyNTUgPDwgOCkgKyBjb2xvckIqMjU1KTtcbiAgICAgICAgKi9cblxuICAgICAgICAvLyBzdXBlciBpbmxpbmUgY29zIGltIGFuIG9wdGltaXphdGlvbiBOQVpJIDopXG4gICAgICAgIGRhdGEuX2ZpbGxUaW50ID0gKCgoZmlsbENvbG9yID4+IDE2ICYgMHhGRikgLyAyNTUgKiB0aW50UioyNTUgPDwgMTYpICsgKChmaWxsQ29sb3IgPj4gOCAmIDB4RkYpIC8gMjU1ICogdGludEcqMjU1IDw8IDgpICsgIChmaWxsQ29sb3IgJiAweEZGKSAvIDI1NSAqIHRpbnRCKjI1NSk7XG4gICAgICAgIGRhdGEuX2xpbmVUaW50ID0gKCgobGluZUNvbG9yID4+IDE2ICYgMHhGRikgLyAyNTUgKiB0aW50UioyNTUgPDwgMTYpICsgKChsaW5lQ29sb3IgPj4gOCAmIDB4RkYpIC8gMjU1ICogdGludEcqMjU1IDw8IDgpICsgIChsaW5lQ29sb3IgJiAweEZGKSAvIDI1NSAqIHRpbnRCKjI1NSk7XG5cbiAgICB9XG59O1xuXG4iLCJ2YXIgQ2FudmFzR3JhcGhpY3MgPSByZXF1aXJlKCcuL0NhbnZhc0dyYXBoaWNzJyk7XG5cbi8qKlxuICogQSBzZXQgb2YgZnVuY3Rpb25zIHVzZWQgdG8gaGFuZGxlIG1hc2tpbmcuXG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICovXG5mdW5jdGlvbiBDYW52YXNNYXNrTWFuYWdlcigpXG57fVxuXG5DYW52YXNNYXNrTWFuYWdlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBDYW52YXNNYXNrTWFuYWdlcjtcbm1vZHVsZS5leHBvcnRzID0gQ2FudmFzTWFza01hbmFnZXI7XG5cbi8qKlxuICogVGhpcyBtZXRob2QgYWRkcyBpdCB0byB0aGUgY3VycmVudCBzdGFjayBvZiBtYXNrcy5cbiAqXG4gKiBAcGFyYW0gbWFza0RhdGEge29iamVjdH0gdGhlIG1hc2tEYXRhIHRoYXQgd2lsbCBiZSBwdXNoZWRcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5XZWJHTFJlbmRlcmVyfFBJWEkuQ2FudmFzUmVuZGVyZXJ9IFRoZSByZW5kZXJlciBjb250ZXh0IHRvIHVzZS5cbiAqL1xuQ2FudmFzTWFza01hbmFnZXIucHJvdG90eXBlLnB1c2hNYXNrID0gZnVuY3Rpb24gKG1hc2tEYXRhLCByZW5kZXJlcilcbntcblxuICAgIHJlbmRlcmVyLmNvbnRleHQuc2F2ZSgpO1xuXG4gICAgdmFyIGNhY2hlQWxwaGEgPSBtYXNrRGF0YS5hbHBoYTtcbiAgICB2YXIgdHJhbnNmb3JtID0gbWFza0RhdGEud29ybGRUcmFuc2Zvcm07XG4gICAgdmFyIHJlc29sdXRpb24gPSByZW5kZXJlci5yZXNvbHV0aW9uO1xuXG4gICAgcmVuZGVyZXIuY29udGV4dC5zZXRUcmFuc2Zvcm0oXG4gICAgICAgIHRyYW5zZm9ybS5hICogcmVzb2x1dGlvbixcbiAgICAgICAgdHJhbnNmb3JtLmIgKiByZXNvbHV0aW9uLFxuICAgICAgICB0cmFuc2Zvcm0uYyAqIHJlc29sdXRpb24sXG4gICAgICAgIHRyYW5zZm9ybS5kICogcmVzb2x1dGlvbixcbiAgICAgICAgdHJhbnNmb3JtLnR4ICogcmVzb2x1dGlvbixcbiAgICAgICAgdHJhbnNmb3JtLnR5ICogcmVzb2x1dGlvblxuICAgICk7XG5cbiAgICAvL1RPRE8gc3Vwb3J0IHNwcml0ZSBhbHBoYSBtYXNrcz8/XG4gICAgLy9sb3RzIG9mIGVmZm9ydCByZXF1aXJlZC4gSWYgZGVtYW5kIGlzIGdyZWF0IGVub3VnaC4uXG4gICAgaWYoIW1hc2tEYXRhLnRleHR1cmUpXG4gICAge1xuICAgICAgICBDYW52YXNHcmFwaGljcy5yZW5kZXJHcmFwaGljc01hc2sobWFza0RhdGEsIHJlbmRlcmVyLmNvbnRleHQpO1xuICAgICAgICByZW5kZXJlci5jb250ZXh0LmNsaXAoKTtcbiAgICB9XG5cbiAgICBtYXNrRGF0YS53b3JsZEFscGhhID0gY2FjaGVBbHBoYTtcbn07XG5cbi8qKlxuICogUmVzdG9yZXMgdGhlIGN1cnJlbnQgZHJhd2luZyBjb250ZXh0IHRvIHRoZSBzdGF0ZSBpdCB3YXMgYmVmb3JlIHRoZSBtYXNrIHdhcyBhcHBsaWVkLlxuICpcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5XZWJHTFJlbmRlcmVyfFBJWEkuQ2FudmFzUmVuZGVyZXJ9IFRoZSByZW5kZXJlciBjb250ZXh0IHRvIHVzZS5cbiAqL1xuQ2FudmFzTWFza01hbmFnZXIucHJvdG90eXBlLnBvcE1hc2sgPSBmdW5jdGlvbiAocmVuZGVyZXIpXG57XG4gICAgcmVuZGVyZXIuY29udGV4dC5yZXN0b3JlKCk7XG59O1xuXG5DYW52YXNNYXNrTWFuYWdlci5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uICgpIHt9O1xuIiwidmFyIHV0aWxzID0gcmVxdWlyZSgnLi4vLi4vLi4vdXRpbHMnKTtcblxuLyoqXG4gKiBVdGlsaXR5IG1ldGhvZHMgZm9yIFNwcml0ZS9UZXh0dXJlIHRpbnRpbmcuXG4gKiBAc3RhdGljXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKi9cbnZhciBDYW52YXNUaW50ZXIgPSB7fTtcbm1vZHVsZS5leHBvcnRzID0gQ2FudmFzVGludGVyO1xuXG4vKipcbiAqIEJhc2ljYWxseSB0aGlzIG1ldGhvZCBqdXN0IG5lZWRzIGEgc3ByaXRlIGFuZCBhIGNvbG9yIGFuZCB0aW50cyB0aGUgc3ByaXRlIHdpdGggdGhlIGdpdmVuIGNvbG9yLlxuICpcbiAqIEBwYXJhbSBzcHJpdGUge1BJWEkuU3ByaXRlfSB0aGUgc3ByaXRlIHRvIHRpbnRcbiAqIEBwYXJhbSBjb2xvciB7bnVtYmVyfSB0aGUgY29sb3IgdG8gdXNlIHRvIHRpbnQgdGhlIHNwcml0ZSB3aXRoXG4gKiBAcmV0dXJuIHtIVE1MQ2FudmFzRWxlbWVudH0gVGhlIHRpbnRlZCBjYW52YXNcbiAqL1xuQ2FudmFzVGludGVyLmdldFRpbnRlZFRleHR1cmUgPSBmdW5jdGlvbiAoc3ByaXRlLCBjb2xvcilcbntcbiAgICB2YXIgdGV4dHVyZSA9IHNwcml0ZS50ZXh0dXJlO1xuXG4gICAgY29sb3IgPSBDYW52YXNUaW50ZXIucm91bmRDb2xvcihjb2xvcik7XG5cbiAgICB2YXIgc3RyaW5nQ29sb3IgPSAnIycgKyAoJzAwMDAwJyArICggY29sb3IgfCAwKS50b1N0cmluZygxNikpLnN1YnN0cigtNik7XG5cbiAgICB0ZXh0dXJlLnRpbnRDYWNoZSA9IHRleHR1cmUudGludENhY2hlIHx8IHt9O1xuXG4gICAgaWYgKHRleHR1cmUudGludENhY2hlW3N0cmluZ0NvbG9yXSlcbiAgICB7XG4gICAgICAgIHJldHVybiB0ZXh0dXJlLnRpbnRDYWNoZVtzdHJpbmdDb2xvcl07XG4gICAgfVxuXG4gICAgIC8vIGNsb25lIHRleHR1cmUuLlxuICAgIHZhciBjYW52YXMgPSBDYW52YXNUaW50ZXIuY2FudmFzIHx8IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NhbnZhcycpO1xuXG4gICAgLy9DYW52YXNUaW50ZXIudGludFdpdGhQZXJQaXhlbCh0ZXh0dXJlLCBzdHJpbmdDb2xvciwgY2FudmFzKTtcbiAgICBDYW52YXNUaW50ZXIudGludE1ldGhvZCh0ZXh0dXJlLCBjb2xvciwgY2FudmFzKTtcblxuICAgIGlmIChDYW52YXNUaW50ZXIuY29udmVydFRpbnRUb0ltYWdlKVxuICAgIHtcbiAgICAgICAgLy8gaXMgdGhpcyBiZXR0ZXI/XG4gICAgICAgIHZhciB0aW50SW1hZ2UgPSBuZXcgSW1hZ2UoKTtcbiAgICAgICAgdGludEltYWdlLnNyYyA9IGNhbnZhcy50b0RhdGFVUkwoKTtcblxuICAgICAgICB0ZXh0dXJlLnRpbnRDYWNoZVtzdHJpbmdDb2xvcl0gPSB0aW50SW1hZ2U7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHRleHR1cmUudGludENhY2hlW3N0cmluZ0NvbG9yXSA9IGNhbnZhcztcbiAgICAgICAgLy8gaWYgd2UgYXJlIG5vdCBjb252ZXJ0aW5nIHRoZSB0ZXh0dXJlIHRvIGFuIGltYWdlIHRoZW4gd2UgbmVlZCB0byBsb3NlIHRoZSByZWZlcmVuY2UgdG8gdGhlIGNhbnZhc1xuICAgICAgICBDYW52YXNUaW50ZXIuY2FudmFzID0gbnVsbDtcbiAgICB9XG5cbiAgICByZXR1cm4gY2FudmFzO1xufTtcblxuLyoqXG4gKiBUaW50IGEgdGV4dHVyZSB1c2luZyB0aGUgJ211bHRpcGx5JyBvcGVyYXRpb24uXG4gKlxuICogQHBhcmFtIHRleHR1cmUge1BJWEkuVGV4dHVyZX0gdGhlIHRleHR1cmUgdG8gdGludFxuICogQHBhcmFtIGNvbG9yIHtudW1iZXJ9IHRoZSBjb2xvciB0byB1c2UgdG8gdGludCB0aGUgc3ByaXRlIHdpdGhcbiAqIEBwYXJhbSBjYW52YXMge0hUTUxDYW52YXNFbGVtZW50fSB0aGUgY3VycmVudCBjYW52YXNcbiAqL1xuQ2FudmFzVGludGVyLnRpbnRXaXRoTXVsdGlwbHkgPSBmdW5jdGlvbiAodGV4dHVyZSwgY29sb3IsIGNhbnZhcylcbntcbiAgICB2YXIgY29udGV4dCA9IGNhbnZhcy5nZXRDb250ZXh0KCAnMmQnICk7XG5cbiAgICB2YXIgcmVzb2x1dGlvbiA9IHRleHR1cmUuYmFzZVRleHR1cmUucmVzb2x1dGlvbjtcblxuICAgIHZhciBjcm9wID0gdGV4dHVyZS5jcm9wLmNsb25lKCk7XG4gICAgY3JvcC54ICo9IHJlc29sdXRpb247XG4gICAgY3JvcC55ICo9IHJlc29sdXRpb247XG4gICAgY3JvcC53aWR0aCAqPSByZXNvbHV0aW9uO1xuICAgIGNyb3AuaGVpZ2h0ICo9IHJlc29sdXRpb247XG5cbiAgICBjYW52YXMud2lkdGggPSBjcm9wLndpZHRoO1xuICAgIGNhbnZhcy5oZWlnaHQgPSBjcm9wLmhlaWdodDtcblxuICAgIGNvbnRleHQuZmlsbFN0eWxlID0gJyMnICsgKCcwMDAwMCcgKyAoIGNvbG9yIHwgMCkudG9TdHJpbmcoMTYpKS5zdWJzdHIoLTYpO1xuXG4gICAgY29udGV4dC5maWxsUmVjdCgwLCAwLCBjcm9wLndpZHRoLCBjcm9wLmhlaWdodCk7XG5cbiAgICBjb250ZXh0Lmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbiA9ICdtdWx0aXBseSc7XG5cbiAgICBjb250ZXh0LmRyYXdJbWFnZShcbiAgICAgICAgdGV4dHVyZS5iYXNlVGV4dHVyZS5zb3VyY2UsXG4gICAgICAgIGNyb3AueCxcbiAgICAgICAgY3JvcC55LFxuICAgICAgICBjcm9wLndpZHRoLFxuICAgICAgICBjcm9wLmhlaWdodCxcbiAgICAgICAgMCxcbiAgICAgICAgMCxcbiAgICAgICAgY3JvcC53aWR0aCxcbiAgICAgICAgY3JvcC5oZWlnaHRcbiAgICApO1xuXG4gICAgY29udGV4dC5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb24gPSAnZGVzdGluYXRpb24tYXRvcCc7XG5cbiAgICBjb250ZXh0LmRyYXdJbWFnZShcbiAgICAgICAgdGV4dHVyZS5iYXNlVGV4dHVyZS5zb3VyY2UsXG4gICAgICAgIGNyb3AueCxcbiAgICAgICAgY3JvcC55LFxuICAgICAgICBjcm9wLndpZHRoLFxuICAgICAgICBjcm9wLmhlaWdodCxcbiAgICAgICAgMCxcbiAgICAgICAgMCxcbiAgICAgICAgY3JvcC53aWR0aCxcbiAgICAgICAgY3JvcC5oZWlnaHRcbiAgICApO1xufTtcblxuLyoqXG4gKiBUaW50IGEgdGV4dHVyZSB1c2luZyB0aGUgJ292ZXJsYXknIG9wZXJhdGlvbi5cbiAqXG4gKiBAcGFyYW0gdGV4dHVyZSB7UElYSS5UZXh0dXJlfSB0aGUgdGV4dHVyZSB0byB0aW50XG4gKiBAcGFyYW0gY29sb3Ige251bWJlcn0gdGhlIGNvbG9yIHRvIHVzZSB0byB0aW50IHRoZSBzcHJpdGUgd2l0aFxuICogQHBhcmFtIGNhbnZhcyB7SFRNTENhbnZhc0VsZW1lbnR9IHRoZSBjdXJyZW50IGNhbnZhc1xuICovXG5DYW52YXNUaW50ZXIudGludFdpdGhPdmVybGF5ID0gZnVuY3Rpb24gKHRleHR1cmUsIGNvbG9yLCBjYW52YXMpXG57XG4gICAgdmFyIGNvbnRleHQgPSBjYW52YXMuZ2V0Q29udGV4dCggJzJkJyApO1xuXG4gICAgdmFyIHJlc29sdXRpb24gPSB0ZXh0dXJlLmJhc2VUZXh0dXJlLnJlc29sdXRpb247XG5cbiAgICB2YXIgY3JvcCA9IHRleHR1cmUuY3JvcC5jbG9uZSgpO1xuICAgIGNyb3AueCAqPSByZXNvbHV0aW9uO1xuICAgIGNyb3AueSAqPSByZXNvbHV0aW9uO1xuICAgIGNyb3Aud2lkdGggKj0gcmVzb2x1dGlvbjtcbiAgICBjcm9wLmhlaWdodCAqPSByZXNvbHV0aW9uO1xuXG4gICAgY2FudmFzLndpZHRoID0gY3JvcC53aWR0aDtcbiAgICBjYW52YXMuaGVpZ2h0ID0gY3JvcC5oZWlnaHQ7XG5cbiAgICBjb250ZXh0Lmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbiA9ICdjb3B5JztcbiAgICBjb250ZXh0LmZpbGxTdHlsZSA9ICcjJyArICgnMDAwMDAnICsgKCBjb2xvciB8IDApLnRvU3RyaW5nKDE2KSkuc3Vic3RyKC02KTtcbiAgICBjb250ZXh0LmZpbGxSZWN0KDAsIDAsIGNyb3Aud2lkdGgsIGNyb3AuaGVpZ2h0KTtcblxuICAgIGNvbnRleHQuZ2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uID0gJ2Rlc3RpbmF0aW9uLWF0b3AnO1xuICAgIGNvbnRleHQuZHJhd0ltYWdlKFxuICAgICAgICB0ZXh0dXJlLmJhc2VUZXh0dXJlLnNvdXJjZSxcbiAgICAgICAgY3JvcC54LFxuICAgICAgICBjcm9wLnksXG4gICAgICAgIGNyb3Aud2lkdGgsXG4gICAgICAgIGNyb3AuaGVpZ2h0LFxuICAgICAgICAwLFxuICAgICAgICAwLFxuICAgICAgICBjcm9wLndpZHRoLFxuICAgICAgICBjcm9wLmhlaWdodFxuICAgICk7XG5cbiAgICAvLyBjb250ZXh0Lmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbiA9ICdjb3B5Jztcbn07XG5cbi8qKlxuICogVGludCBhIHRleHR1cmUgcGl4ZWwgcGVyIHBpeGVsLlxuICpcbiAqIEBwYXJhbSB0ZXh0dXJlIHtQSVhJLlRleHR1cmV9IHRoZSB0ZXh0dXJlIHRvIHRpbnRcbiAqIEBwYXJhbSBjb2xvciB7bnVtYmVyfSB0aGUgY29sb3IgdG8gdXNlIHRvIHRpbnQgdGhlIHNwcml0ZSB3aXRoXG4gKiBAcGFyYW0gY2FudmFzIHtIVE1MQ2FudmFzRWxlbWVudH0gdGhlIGN1cnJlbnQgY2FudmFzXG4gKi9cbkNhbnZhc1RpbnRlci50aW50V2l0aFBlclBpeGVsID0gZnVuY3Rpb24gKHRleHR1cmUsIGNvbG9yLCBjYW52YXMpXG57XG4gICAgdmFyIGNvbnRleHQgPSBjYW52YXMuZ2V0Q29udGV4dCggJzJkJyApO1xuXG4gICAgdmFyIHJlc29sdXRpb24gPSB0ZXh0dXJlLmJhc2VUZXh0dXJlLnJlc29sdXRpb247XG5cbiAgICB2YXIgY3JvcCA9IHRleHR1cmUuY3JvcC5jbG9uZSgpO1xuICAgIGNyb3AueCAqPSByZXNvbHV0aW9uO1xuICAgIGNyb3AueSAqPSByZXNvbHV0aW9uO1xuICAgIGNyb3Aud2lkdGggKj0gcmVzb2x1dGlvbjtcbiAgICBjcm9wLmhlaWdodCAqPSByZXNvbHV0aW9uO1xuXG4gICAgY2FudmFzLndpZHRoID0gY3JvcC53aWR0aDtcbiAgICBjYW52YXMuaGVpZ2h0ID0gY3JvcC5oZWlnaHQ7XG5cbiAgICBjb250ZXh0Lmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbiA9ICdjb3B5JztcbiAgICBjb250ZXh0LmRyYXdJbWFnZShcbiAgICAgICAgdGV4dHVyZS5iYXNlVGV4dHVyZS5zb3VyY2UsXG4gICAgICAgIGNyb3AueCxcbiAgICAgICAgY3JvcC55LFxuICAgICAgICBjcm9wLndpZHRoLFxuICAgICAgICBjcm9wLmhlaWdodCxcbiAgICAgICAgMCxcbiAgICAgICAgMCxcbiAgICAgICAgY3JvcC53aWR0aCxcbiAgICAgICAgY3JvcC5oZWlnaHRcbiAgICApO1xuXG4gICAgdmFyIHJnYlZhbHVlcyA9IHV0aWxzLmhleDJyZ2IoY29sb3IpO1xuICAgIHZhciByID0gcmdiVmFsdWVzWzBdLCBnID0gcmdiVmFsdWVzWzFdLCBiID0gcmdiVmFsdWVzWzJdO1xuXG4gICAgdmFyIHBpeGVsRGF0YSA9IGNvbnRleHQuZ2V0SW1hZ2VEYXRhKDAsIDAsIGNyb3Aud2lkdGgsIGNyb3AuaGVpZ2h0KTtcblxuICAgIHZhciBwaXhlbHMgPSBwaXhlbERhdGEuZGF0YTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcGl4ZWxzLmxlbmd0aDsgaSArPSA0KVxuICAgIHtcbiAgICAgICAgcGl4ZWxzW2krMF0gKj0gcjtcbiAgICAgICAgcGl4ZWxzW2krMV0gKj0gZztcbiAgICAgICAgcGl4ZWxzW2krMl0gKj0gYjtcbiAgICB9XG5cbiAgICBjb250ZXh0LnB1dEltYWdlRGF0YShwaXhlbERhdGEsIDAsIDApO1xufTtcblxuLyoqXG4gKiBSb3VuZHMgdGhlIHNwZWNpZmllZCBjb2xvciBhY2NvcmRpbmcgdG8gdGhlIENhbnZhc1RpbnRlci5jYWNoZVN0ZXBzUGVyQ29sb3JDaGFubmVsLlxuICpcbiAqIEBwYXJhbSBjb2xvciB7bnVtYmVyfSB0aGUgY29sb3IgdG8gcm91bmQsIHNob3VsZCBiZSBhIGhleCBjb2xvclxuICovXG5DYW52YXNUaW50ZXIucm91bmRDb2xvciA9IGZ1bmN0aW9uIChjb2xvcilcbntcbiAgICB2YXIgc3RlcCA9IENhbnZhc1RpbnRlci5jYWNoZVN0ZXBzUGVyQ29sb3JDaGFubmVsO1xuXG4gICAgdmFyIHJnYlZhbHVlcyA9IHV0aWxzLmhleDJyZ2IoY29sb3IpO1xuXG4gICAgcmdiVmFsdWVzWzBdID0gTWF0aC5taW4oMjU1LCAocmdiVmFsdWVzWzBdIC8gc3RlcCkgKiBzdGVwKTtcbiAgICByZ2JWYWx1ZXNbMV0gPSBNYXRoLm1pbigyNTUsIChyZ2JWYWx1ZXNbMV0gLyBzdGVwKSAqIHN0ZXApO1xuICAgIHJnYlZhbHVlc1syXSA9IE1hdGgubWluKDI1NSwgKHJnYlZhbHVlc1syXSAvIHN0ZXApICogc3RlcCk7XG5cbiAgICByZXR1cm4gdXRpbHMucmdiMmhleChyZ2JWYWx1ZXMpO1xufTtcblxuLyoqXG4gKiBOdW1iZXIgb2Ygc3RlcHMgd2hpY2ggd2lsbCBiZSB1c2VkIGFzIGEgY2FwIHdoZW4gcm91bmRpbmcgY29sb3JzLlxuICpcbiAqIEBtZW1iZXJcbiAqL1xuQ2FudmFzVGludGVyLmNhY2hlU3RlcHNQZXJDb2xvckNoYW5uZWwgPSA4O1xuXG4vKipcbiAqIFRpbnQgY2FjaGUgYm9vbGVhbiBmbGFnLlxuICpcbiAqIEBtZW1iZXJcbiAqL1xuQ2FudmFzVGludGVyLmNvbnZlcnRUaW50VG9JbWFnZSA9IGZhbHNlO1xuXG4vKipcbiAqIFdoZXRoZXIgb3Igbm90IHRoZSBDYW52YXMgQmxlbmRNb2RlcyBhcmUgc3VwcG9ydGVkLCBjb25zZXF1ZW50bHkgdGhlIGFiaWxpdHkgdG8gdGludCB1c2luZyB0aGUgbXVsdGlwbHkgbWV0aG9kLlxuICpcbiAqIEBtZW1iZXJcbiAqL1xuQ2FudmFzVGludGVyLmNhblVzZU11bHRpcGx5ID0gdXRpbHMuY2FuVXNlTmV3Q2FudmFzQmxlbmRNb2RlcygpO1xuXG4vKipcbiAqIFRoZSB0aW50aW5nIG1ldGhvZCB0aGF0IHdpbGwgYmUgdXNlZC5cbiAqXG4gKi9cbkNhbnZhc1RpbnRlci50aW50TWV0aG9kID0gQ2FudmFzVGludGVyLmNhblVzZU11bHRpcGx5ID8gQ2FudmFzVGludGVyLnRpbnRXaXRoTXVsdGlwbHkgOiAgQ2FudmFzVGludGVyLnRpbnRXaXRoUGVyUGl4ZWw7XG4iLCJ2YXIgR0xUZXh0dXJlID0gcmVxdWlyZSgncGl4aS1nbC1jb3JlJykuR0xUZXh0dXJlLFxuXHR1dGlscyA9IHJlcXVpcmUoJy4uLy4uL3V0aWxzJyk7XG5cbi8qKlxuICogSGVscGVyIGNsYXNzIHRvIGNyZWF0ZSBhIHdlYkdMIFRleHR1cmVcbiAqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gZ2wge1dlYkdMUmVuZGVyaW5nQ29udGV4dH1cbiAqL1xuXG52YXIgVGV4dHVyZU1hbmFnZXIgPSBmdW5jdGlvbihnbClcbntcblx0dGhpcy5nbCA9IGdsO1xuXG5cdC8vIHRyYWNrIHRleHR1cmVzIGluIHRoZSByZW5kZXJlciBzbyB3ZSBjYW4gbm8gbG9uZ2VyIGxpc3RlbiB0byB0aGVtIG9uIGRlc3RydWN0aW9uLlxuXHR0aGlzLl9tYW5hZ2VkVGV4dHVyZXMgPSBbXTtcbiAgICB0aGlzLmdsVGV4dHVyZXMgPSB7fTtcblxufVxuXG5UZXh0dXJlTWFuYWdlci5wcm90b3R5cGUuYmluZFRleHR1cmUgPSBmdW5jdGlvbih0ZXh0dXJlKVxue1xuXG59XG5cblxuVGV4dHVyZU1hbmFnZXIucHJvdG90eXBlLmdldFRleHR1cmUgPSBmdW5jdGlvbih0ZXh0dXJlKVxue1xuXG59XG5cbi8qKlxuICogVXBkYXRlcyBhbmQvb3IgQ3JlYXRlcyBhIFdlYkdMIHRleHR1cmUgZm9yIHRoZSByZW5kZXJlcidzIGNvbnRleHQuXG4gKlxuICogQHBhcmFtIHRleHR1cmUge1BJWEkuQmFzZVRleHR1cmV8UElYSS5UZXh0dXJlfSB0aGUgdGV4dHVyZSB0byB1cGRhdGVcbiAqL1xuVGV4dHVyZU1hbmFnZXIucHJvdG90eXBlLnVwZGF0ZVRleHR1cmUgPSBmdW5jdGlvbih0ZXh0dXJlKVxue1xuXHR0ZXh0dXJlID0gdGV4dHVyZS5iYXNlVGV4dHVyZSB8fCB0ZXh0dXJlO1xuXG5cdGlmICghdGV4dHVyZS5oYXNMb2FkZWQpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgXG4gICAgdmFyIGdsID0gdGhpcy5nbDtcbiAgICB2YXIgZ2xUZXh0dXJlID0gdGhpcy5nbFRleHR1cmVzW3RleHR1cmUudWlkXS8vdGV4dHVyZS5fZ2xUZXh0dXJlc1tnbC5pZF07XG5cbiAgICBpZiAoIWdsVGV4dHVyZSlcbiAgICB7XG4gICAgICAgIGdsVGV4dHVyZSA9IG5ldyBHTFRleHR1cmUoZ2wpO1xuICAgICAgICBnbFRleHR1cmUucHJlbXVsdGlwbHlBbHBoYSA9IHRydWVcbiAgICAgICAgdGV4dHVyZS5fZ2xUZXh0dXJlc1tnbC5pZF0gPSBnbFRleHR1cmU7XG5cbiAgICAgICAvLyB0aGlzLmdsVGV4dHVyZXNbdGV4dHVyZS51aWRdID0gZ2xUZXh0dXJlO1xuXG4gICAgICAgIHRleHR1cmUub24oJ3VwZGF0ZScsIHRoaXMudXBkYXRlVGV4dHVyZSwgdGhpcyk7XG4gICAgICAgIHRleHR1cmUub24oJ2Rpc3Bvc2UnLCB0aGlzLmRlc3Ryb3lUZXh0dXJlLCB0aGlzKTtcbiAgICAgICAgXG4gICAgICAgIHRoaXMuX21hbmFnZWRUZXh0dXJlcy5wdXNoKHRleHR1cmUpO1xuICAgIH1cblxuICAgIGdsVGV4dHVyZS51cGxvYWQodGV4dHVyZS5zb3VyY2UpO1xuICAgIFxuICAgIC8vVE9ETyBjaGVjayBpcyBwb3dlciBvZiB0d28uLlxuICAgIGdsVGV4dHVyZS5lbmFibGVXcmFwQ2xhbXAoKTtcblxuXG4gICAgLy8gVE9ETyBjaGVjayBmb3Igc2NhbGluZyB0eXBlXG4gICAgZ2xUZXh0dXJlLmVuYWJsZUxpbmVhclNjYWxpbmcoKTtcblxuICAgIHJldHVybiAgdGV4dHVyZS5fZ2xUZXh0dXJlc1tnbC5pZF07XG59XG5cbi8qKlxuICogRGVsZXRlcyB0aGUgdGV4dHVyZSBmcm9tIFdlYkdMXG4gKlxuICogQHBhcmFtIHRleHR1cmUge1BJWEkuQmFzZVRleHR1cmV8UElYSS5UZXh0dXJlfSB0aGUgdGV4dHVyZSB0byBkZXN0cm95XG4gKi9cblRleHR1cmVNYW5hZ2VyLnByb3RvdHlwZS5kZXN0cm95VGV4dHVyZSA9IGZ1bmN0aW9uKHRleHR1cmUsIF9za2lwUmVtb3ZlKVxue1xuXHR0ZXh0dXJlID0gdGV4dHVyZS5iYXNlVGV4dHVyZSB8fCB0ZXh0dXJlO1xuXG4gICAgaWYgKCF0ZXh0dXJlLmhhc0xvYWRlZClcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAodGV4dHVyZS5fZ2xUZXh0dXJlc1t0aGlzLmdsLmlkXSlcbiAgICB7XG4gICAgICAgIHRleHR1cmUuX2dsVGV4dHVyZXNbdGhpcy5nbC5pZF0uZGVzdHJveSgpO1xuICAgICAgICB0ZXh0dXJlLm9mZigndXBkYXRlJywgdGhpcy51cGRhdGVUZXh0dXJlLCB0aGlzKTtcbiAgICAgICAgdGV4dHVyZS5vZmYoJ2Rpc3Bvc2UnLCB0aGlzLmRlc3Ryb3lUZXh0dXJlLCB0aGlzKTtcblxuXG4gICAgICAgIGRlbGV0ZSB0ZXh0dXJlLl9nbFRleHR1cmVzW3RoaXMuZ2wuaWRdO1xuXG4gICAgICAgIGlmICghX3NraXBSZW1vdmUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHZhciBpID0gdGhpcy5fbWFuYWdlZFRleHR1cmVzLmluZGV4T2YodGV4dHVyZSk7XG4gICAgICAgICAgICBpZiAoaSAhPT0gLTEpIHtcbiAgICAgICAgICAgICAgICB1dGlscy5yZW1vdmVJdGVtcyh0aGlzLl9tYW5hZ2VkVGV4dHVyZXMsIGksIDEpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxufVxuXG5UZXh0dXJlTWFuYWdlci5wcm90b3R5cGUucmVtb3ZlQWxsID0gZnVuY3Rpb24oKVxue1xuXHQvLyBlbXB0eSBhbGwgdGhlIG9sZCBnbCB0ZXh0dXJlcyBhcyB0aGV5IGFyZSB1c2VsZXNzIG5vd1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5fbWFuYWdlZFRleHR1cmVzLmxlbmd0aDsgKytpKVxuICAgIHtcbiAgICAgICAgdmFyIHRleHR1cmUgPSB0aGlzLl9tYW5hZ2VkVGV4dHVyZXNbaV07XG4gICAgICAgIGlmICh0ZXh0dXJlLl9nbFRleHR1cmVzW3RoaXMuZ2wuaWRdKVxuICAgICAgICB7XG4gICAgICAgICAgICBkZWxldGUgdGV4dHVyZS5fZ2xUZXh0dXJlc1t0aGlzLmdsLmlkXTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuVGV4dHVyZU1hbmFnZXIucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbigpXG57XG4gICAgLy8gZGVzdHJveSBtYW5hZ2VkIHRleHR1cmVzXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLl9tYW5hZ2VkVGV4dHVyZXMubGVuZ3RoOyArK2kpXG4gICAge1xuICAgICAgICB2YXIgdGV4dHVyZSA9IHRoaXMuX21hbmFnZWRUZXh0dXJlc1tpXTtcbiAgICAgICAgdGhpcy5kZXN0cm95VGV4dHVyZSh0ZXh0dXJlLCB0cnVlKTtcbiAgICAgICAgdGV4dHVyZS5vZmYoJ3VwZGF0ZScsIHRoaXMudXBkYXRlVGV4dHVyZSwgdGhpcyk7XG4gICAgICAgIHRleHR1cmUub2ZmKCdkaXNwb3NlJywgdGhpcy5kZXN0cm95VGV4dHVyZSwgdGhpcyk7XG4gICAgfVxuXG4gICAgdGhpcy5fbWFuYWdlZFRleHR1cmVzID0gbnVsbDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBUZXh0dXJlTWFuYWdlcjtcblxuIiwidmFyIFN5c3RlbVJlbmRlcmVyID0gcmVxdWlyZSgnLi4vU3lzdGVtUmVuZGVyZXInKSxcbiAgICBTaGFkZXJNYW5hZ2VyID0gcmVxdWlyZSgnLi9tYW5hZ2Vycy9TaGFkZXJNYW5hZ2VyJyksXG4gICAgTWFza01hbmFnZXIgPSByZXF1aXJlKCcuL21hbmFnZXJzL01hc2tNYW5hZ2VyJyksXG4gICAgU3RlbmNpbE1hbmFnZXIgPSByZXF1aXJlKCcuL21hbmFnZXJzL1N0ZW5jaWxNYW5hZ2VyJyksXG4gICAgRmlsdGVyTWFuYWdlciA9IHJlcXVpcmUoJy4vbWFuYWdlcnMvRmlsdGVyTWFuYWdlcicpLFxuICAgIEJsZW5kTW9kZU1hbmFnZXIgPSByZXF1aXJlKCcuL21hbmFnZXJzL0JsZW5kTW9kZU1hbmFnZXInKSxcbiAgICBSZW5kZXJUYXJnZXQgPSByZXF1aXJlKCcuL3V0aWxzL1JlbmRlclRhcmdldCcpLFxuICAgIE9iamVjdFJlbmRlcmVyID0gcmVxdWlyZSgnLi91dGlscy9PYmplY3RSZW5kZXJlcicpLFxuICAgIEZYQUFGaWx0ZXIgPSByZXF1aXJlKCcuL2ZpbHRlcnMvRlhBQUZpbHRlcicpLFxuICAgIFRleHR1cmVNYW5hZ2VyID0gcmVxdWlyZSgnLi9UZXh0dXJlTWFuYWdlcicpLFxuICAgIGNyZWF0ZUNvbnRleHQgPSByZXF1aXJlKCdwaXhpLWdsLWNvcmUnKS5jcmVhdGVDb250ZXh0LFxuICAgIG1hcFdlYkdMQmxlbmRNb2Rlc1RvUGl4aSA9IHJlcXVpcmUoJy4vdXRpbHMvbWFwV2ViR0xCbGVuZE1vZGVzVG9QaXhpJyksXG4gICAgbWFwV2ViR0xEcmF3TW9kZXNUb1BpeGkgPSByZXF1aXJlKCcuL3V0aWxzL21hcFdlYkdMRHJhd01vZGVzVG9QaXhpJyksXG4gICAgdXRpbHMgPSByZXF1aXJlKCcuLi8uLi91dGlscycpLFxuICAgIENPTlNUID0gcmVxdWlyZSgnLi4vLi4vY29uc3QnKTtcblxuLyoqXG4gKiBUaGUgV2ViR0xSZW5kZXJlciBkcmF3cyB0aGUgc2NlbmUgYW5kIGFsbCBpdHMgY29udGVudCBvbnRvIGEgd2ViR0wgZW5hYmxlZCBjYW52YXMuIFRoaXMgcmVuZGVyZXJcbiAqIHNob3VsZCBiZSB1c2VkIGZvciBicm93c2VycyB0aGF0IHN1cHBvcnQgd2ViR0wuIFRoaXMgUmVuZGVyIHdvcmtzIGJ5IGF1dG9tYXRpY2FsbHkgbWFuYWdpbmcgd2ViR0xCYXRjaHMuXG4gKiBTbyBubyBuZWVkIGZvciBTcHJpdGUgQmF0Y2hlcyBvciBTcHJpdGUgQ2xvdWRzLlxuICogRG9uJ3QgZm9yZ2V0IHRvIGFkZCB0aGUgdmlldyB0byB5b3VyIERPTSBvciB5b3Ugd2lsbCBub3Qgc2VlIGFueXRoaW5nIDopXG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQGV4dGVuZHMgUElYSS5TeXN0ZW1SZW5kZXJlclxuICogQHBhcmFtIFt3aWR0aD0wXSB7bnVtYmVyfSB0aGUgd2lkdGggb2YgdGhlIGNhbnZhcyB2aWV3XG4gKiBAcGFyYW0gW2hlaWdodD0wXSB7bnVtYmVyfSB0aGUgaGVpZ2h0IG9mIHRoZSBjYW52YXMgdmlld1xuICogQHBhcmFtIFtvcHRpb25zXSB7b2JqZWN0fSBUaGUgb3B0aW9uYWwgcmVuZGVyZXIgcGFyYW1ldGVyc1xuICogQHBhcmFtIFtvcHRpb25zLnZpZXddIHtIVE1MQ2FudmFzRWxlbWVudH0gdGhlIGNhbnZhcyB0byB1c2UgYXMgYSB2aWV3LCBvcHRpb25hbFxuICogQHBhcmFtIFtvcHRpb25zLnRyYW5zcGFyZW50PWZhbHNlXSB7Ym9vbGVhbn0gSWYgdGhlIHJlbmRlciB2aWV3IGlzIHRyYW5zcGFyZW50LCBkZWZhdWx0IGZhbHNlXG4gKiBAcGFyYW0gW29wdGlvbnMuYXV0b1Jlc2l6ZT1mYWxzZV0ge2Jvb2xlYW59IElmIHRoZSByZW5kZXIgdmlldyBpcyBhdXRvbWF0aWNhbGx5IHJlc2l6ZWQsIGRlZmF1bHQgZmFsc2VcbiAqIEBwYXJhbSBbb3B0aW9ucy5hbnRpYWxpYXM9ZmFsc2VdIHtib29sZWFufSBzZXRzIGFudGlhbGlhcy4gSWYgbm90IGF2YWlsYWJsZSBuYXRpdmVseSB0aGVuIEZYQUEgYW50aWFsaWFzaW5nIGlzIHVzZWRcbiAqIEBwYXJhbSBbb3B0aW9ucy5mb3JjZUZYQUE9ZmFsc2VdIHtib29sZWFufSBmb3JjZXMgRlhBQSBhbnRpYWxpYXNpbmcgdG8gYmUgdXNlZCBvdmVyIG5hdGl2ZS4gRlhBQSBpcyBmYXN0ZXIsIGJ1dCBtYXkgbm90IGFsd2F5cyBsb29rIGFzIGdyZWF0XG4gKiBAcGFyYW0gW29wdGlvbnMucmVzb2x1dGlvbj0xXSB7bnVtYmVyfSB0aGUgcmVzb2x1dGlvbiBvZiB0aGUgcmVuZGVyZXIgcmV0aW5hIHdvdWxkIGJlIDJcbiAqIEBwYXJhbSBbb3B0aW9ucy5jbGVhckJlZm9yZVJlbmRlcj10cnVlXSB7Ym9vbGVhbn0gVGhpcyBzZXRzIGlmIHRoZSBDYW52YXNSZW5kZXJlciB3aWxsIGNsZWFyIHRoZSBjYW52YXMgb3JcbiAqICAgICAgbm90IGJlZm9yZSB0aGUgbmV3IHJlbmRlciBwYXNzLiBJZiB5b3Ugd2lzaCB0byBzZXQgdGhpcyB0byBmYWxzZSwgeW91ICptdXN0KiBzZXQgcHJlc2VydmVEcmF3aW5nQnVmZmVyIHRvIGB0cnVlYC5cbiAqIEBwYXJhbSBbb3B0aW9ucy5wcmVzZXJ2ZURyYXdpbmdCdWZmZXI9ZmFsc2VdIHtib29sZWFufSBlbmFibGVzIGRyYXdpbmcgYnVmZmVyIHByZXNlcnZhdGlvbiwgZW5hYmxlIHRoaXMgaWZcbiAqICAgICAgeW91IG5lZWQgdG8gY2FsbCB0b0RhdGFVcmwgb24gdGhlIHdlYmdsIGNvbnRleHQuXG4gKiBAcGFyYW0gW29wdGlvbnMucm91bmRQaXhlbHM9ZmFsc2VdIHtib29sZWFufSBJZiB0cnVlIFBpeGkgd2lsbCBNYXRoLmZsb29yKCkgeC95IHZhbHVlcyB3aGVuIHJlbmRlcmluZywgc3RvcHBpbmcgcGl4ZWwgaW50ZXJwb2xhdGlvbi5cbiAqL1xuZnVuY3Rpb24gV2ViR0xSZW5kZXJlcih3aWR0aCwgaGVpZ2h0LCBvcHRpb25zKVxue1xuICAgIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuXG4gICAgU3lzdGVtUmVuZGVyZXIuY2FsbCh0aGlzLCAnV2ViR0wnLCB3aWR0aCwgaGVpZ2h0LCBvcHRpb25zKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSB0eXBlIG9mIHRoaXMgcmVuZGVyZXIgYXMgYSBzdGFuZGFyZGlzZWQgY29uc3RcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn0vL1xuICAgICAqXG4gICAgICovXG4gICAgdGhpcy50eXBlID0gQ09OU1QuUkVOREVSRVJfVFlQRS5XRUJHTDtcblxuICAgIHRoaXMuaGFuZGxlQ29udGV4dExvc3QgPSB0aGlzLmhhbmRsZUNvbnRleHRMb3N0LmJpbmQodGhpcyk7XG4gICAgdGhpcy5oYW5kbGVDb250ZXh0UmVzdG9yZWQgPSB0aGlzLmhhbmRsZUNvbnRleHRSZXN0b3JlZC5iaW5kKHRoaXMpO1xuXG4gICAgdGhpcy52aWV3LmFkZEV2ZW50TGlzdGVuZXIoJ3dlYmdsY29udGV4dGxvc3QnLCB0aGlzLmhhbmRsZUNvbnRleHRMb3N0LCBmYWxzZSk7XG4gICAgdGhpcy52aWV3LmFkZEV2ZW50TGlzdGVuZXIoJ3dlYmdsY29udGV4dHJlc3RvcmVkJywgdGhpcy5oYW5kbGVDb250ZXh0UmVzdG9yZWQsIGZhbHNlKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBvcHRpb25zIHBhc3NlZCBpbiB0byBjcmVhdGUgYSBuZXcgd2ViZ2wgY29udGV4dC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge29iamVjdH1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX2NvbnRleHRPcHRpb25zID0ge1xuICAgICAgICBhbHBoYTogdGhpcy50cmFuc3BhcmVudCxcbiAgICAgICAgYW50aWFsaWFzOiBvcHRpb25zLmFudGlhbGlhcyxcbiAgICAgICAgcHJlbXVsdGlwbGllZEFscGhhOiB0aGlzLnRyYW5zcGFyZW50ICYmIHRoaXMudHJhbnNwYXJlbnQgIT09ICdub3RNdWx0aXBsaWVkJyxcbiAgICAgICAgc3RlbmNpbDogdHJ1ZSxcbiAgICAgICAgcHJlc2VydmVEcmF3aW5nQnVmZmVyOiBvcHRpb25zLnByZXNlcnZlRHJhd2luZ0J1ZmZlclxuICAgIH07XG5cbiAgICB0aGlzLl9iYWNrZ3JvdW5kQ29sb3JSZ2JhWzNdID0gdGhpcy50cmFuc3BhcmVudCA/IDAgOiAxO1xuXG4gICAgLyoqXG4gICAgICogRGVhbHMgd2l0aCBtYW5hZ2luZyB0aGUgc2hhZGVyIHByb2dyYW1zIGFuZCB0aGVpciBhdHRyaWJzLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5TaGFkZXJNYW5hZ2VyfVxuICAgICAqL1xuICAgIHRoaXMuc2hhZGVyTWFuYWdlciA9IG5ldyBTaGFkZXJNYW5hZ2VyKHRoaXMpO1xuXG4gICAgLyoqXG4gICAgICogTWFuYWdlcyB0aGUgbWFza3MgdXNpbmcgdGhlIHN0ZW5jaWwgYnVmZmVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5NYXNrTWFuYWdlcn1cbiAgICAgKi9cbiAgICB0aGlzLm1hc2tNYW5hZ2VyID0gbmV3IE1hc2tNYW5hZ2VyKHRoaXMpO1xuXG4gICAgLyoqXG4gICAgICogTWFuYWdlcyB0aGUgc3RlbmNpbCBidWZmZXIuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlN0ZW5jaWxNYW5hZ2VyfVxuICAgICAqL1xuICAgIHRoaXMuc3RlbmNpbE1hbmFnZXIgPSBuZXcgU3RlbmNpbE1hbmFnZXIodGhpcyk7XG5cbiAgICAvKipcbiAgICAgKiBNYW5hZ2VzIHRoZSBmaWx0ZXJzLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5GaWx0ZXJNYW5hZ2VyfVxuICAgICAqL1xuICAgIHRoaXMuZmlsdGVyTWFuYWdlciA9IG5ldyBGaWx0ZXJNYW5hZ2VyKHRoaXMpO1xuXG4gICAgLyoqXG4gICAgICogTWFuYWdlcyB0aGUgYmxlbmRNb2Rlc1xuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5CbGVuZE1vZGVNYW5hZ2VyfVxuICAgICAqL1xuICAgIHRoaXMuYmxlbmRNb2RlTWFuYWdlciA9IG5ldyBCbGVuZE1vZGVNYW5hZ2VyKHRoaXMpO1xuXG4gICAgXG4gICAgLyoqXG4gICAgICogVGhlIGN1cnJlbnRseSBhY3RpdmUgT2JqZWN0UmVuZGVyZXIuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLk9iamVjdFJlbmRlcmVyfVxuICAgICAqL1xuICAgIHRoaXMuY3VycmVudFJlbmRlcmVyID0gbmV3IE9iamVjdFJlbmRlcmVyKHRoaXMpO1xuXG4gICAgdGhpcy5pbml0UGx1Z2lucygpO1xuXG4gICAgLy8gaW5pdGlhbGl6ZSB0aGUgY29udGV4dCBzbyBpdCBpcyByZWFkeSBmb3IgdGhlIG1hbmFnZXJzLlxuICAgIHRoaXMuZ2wgPSBjcmVhdGVDb250ZXh0KHRoaXMudmlldywgdGhpcy5fY29udGV4dE9wdGlvbnMpO1xuXG4gICAgdGhpcy5faW5pdENvbnRleHQoKTtcblxuICAgIC8vIG1hcCBzb21lIHdlYkdMIGJsZW5kIGFuZCBkcmF3bW9kZXMuLlxuICAgIHRoaXMuYmxlbmRNb2RlcyA9IG1hcFdlYkdMQmxlbmRNb2Rlc1RvUGl4aShnbCk7XG4gICAgdGhpcy5kcmF3TW9kZXMgPSBtYXBXZWJHTERyYXdNb2Rlc1RvUGl4aShnbClcblxuICAgIHRoaXMuX2FjdGl2ZVNoYWRlciA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBIb2xkcyB0aGUgY3VycmVudCByZW5kZXIgdGFyZ2V0XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlJlbmRlclRhcmdldH1cbiAgICAgKi9cbiAgICB0aGlzLl9hY3RpdmVSZW5kZXJUYXJnZXQgPSBudWxsO1xuICAgIHRoaXMuX2FjdGl2ZVRleHR1cmVMb2NhdGlvbiA9IG51bGw7XG4gICAgdGhpcy5fYWN0aXZlVGV4dHVyZSA9IG51bGw7XG59XG5cbi8vIGNvbnN0cnVjdG9yXG5XZWJHTFJlbmRlcmVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoU3lzdGVtUmVuZGVyZXIucHJvdG90eXBlKTtcbldlYkdMUmVuZGVyZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gV2ViR0xSZW5kZXJlcjtcbm1vZHVsZS5leHBvcnRzID0gV2ViR0xSZW5kZXJlcjtcbnV0aWxzLnBsdWdpblRhcmdldC5taXhpbihXZWJHTFJlbmRlcmVyKTtcblxuLyoqXG4gKiBDcmVhdGVzIHRoZSBXZWJHTCBjb250ZXh0XG4gKlxuICogQHByaXZhdGVcbiAqL1xuV2ViR0xSZW5kZXJlci5wcm90b3R5cGUuX2luaXRDb250ZXh0ID0gZnVuY3Rpb24gKClcbntcbiAgICB2YXIgZ2wgPSB0aGlzLmdsO1xuXG4gICAgLy8gY3JlYXRlIGEgdGV4dHVyZSBtYW5hZ2VyLi4uXG4gICAgdGhpcy50ZXh0dXJlTWFuYWdlciA9IG5ldyBUZXh0dXJlTWFuYWdlcihnbCk7XG5cbiAgICAvLyBzZXQgdXAgdGhlIGRlZmF1bHQgcGl4aSBzZXR0aW5ncy4uXG4gICAgZ2wuZGlzYWJsZShnbC5ERVBUSF9URVNUKTtcbiAgICBnbC5kaXNhYmxlKGdsLkNVTExfRkFDRSk7XG4gICAgZ2wuZW5hYmxlKGdsLkJMRU5EKTtcblxuXG4gICAgdGhpcy5yb290UmVuZGVyVGFyZ2V0ID0gbmV3IFJlbmRlclRhcmdldChnbCwgdGhpcy53aWR0aCwgdGhpcy5oZWlnaHQsIG51bGwsIHRoaXMucmVzb2x1dGlvbiwgdHJ1ZSk7XG4gICAgdGhpcy5yb290UmVuZGVyVGFyZ2V0LmNsZWFyQ29sb3IgPSB0aGlzLl9iYWNrZ3JvdW5kQ29sb3JSZ2JhO1xuICAgIFxuICAgIHRoaXMuYmluZFJlbmRlclRhcmdldCh0aGlzLnJvb3RSZW5kZXJUYXJnZXQpO1xuXG4gICAgdGhpcy5lbWl0KCdjb250ZXh0JywgZ2wpO1xuXG4gICAgLy8gc2V0dXAgdGhlIHdpZHRoL2hlaWdodCBwcm9wZXJ0aWVzIGFuZCBnbCB2aWV3cG9ydFxuICAgIHRoaXMucmVzaXplKHRoaXMud2lkdGgsIHRoaXMuaGVpZ2h0KTsgICAgXG59O1xuXG4vKipcbiAqIFJlbmRlcnMgdGhlIG9iamVjdCB0byBpdHMgd2ViR0wgdmlld1xuICpcbiAqIEBwYXJhbSBvYmplY3Qge1BJWEkuRGlzcGxheU9iamVjdH0gdGhlIG9iamVjdCB0byBiZSByZW5kZXJlZFxuICovXG5XZWJHTFJlbmRlcmVyLnByb3RvdHlwZS5yZW5kZXIgPSBmdW5jdGlvbiAoZGlzcGxheU9iamVjdClcbntcbiAgICB0aGlzLmVtaXQoJ3ByZXJlbmRlcicpO1xuXG4gICAgLy8gbm8gcG9pbnQgcmVuZGVyaW5nIGlmIG91ciBjb250ZXh0IGhhcyBiZWVuIGJsb3duIHVwIVxuICAgIGlmICh0aGlzLmdsLmlzQ29udGV4dExvc3QoKSlcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLl9sYXN0T2JqZWN0UmVuZGVyZWQgPSBkaXNwbGF5T2JqZWN0O1xuXG4gICAgdmFyIGNhY2hlUGFyZW50ID0gZGlzcGxheU9iamVjdC5wYXJlbnQ7XG4gICAgZGlzcGxheU9iamVjdC5wYXJlbnQgPSB0aGlzLl90ZW1wRGlzcGxheU9iamVjdFBhcmVudDtcbiAgICAvLyB1cGRhdGUgdGhlIHNjZW5lIGdyYXBoXG4gICAgZGlzcGxheU9iamVjdC51cGRhdGVUcmFuc2Zvcm0oKTtcbiAgICBkaXNwbGF5T2JqZWN0LnBhcmVudCA9IGNhY2hlUGFyZW50O1xuXG4gICAgdGhpcy5yZW5kZXJEaXNwbGF5T2JqZWN0KGRpc3BsYXlPYmplY3QsIHRoaXMucm9vdFJlbmRlclRhcmdldCwgdGhpcy5jbGVhckJlZm9yZVJlbmRlcik7Ly90aGlzLnByb2plY3Rpb24pO1xuXG4gICAgdGhpcy5lbWl0KCdwb3N0cmVuZGVyJyk7XG59O1xuXG4vKipcbiAqIFJlbmRlcnMgYSBEaXNwbGF5IE9iamVjdC5cbiAqXG4gKiBAcGFyYW0gZGlzcGxheU9iamVjdCB7UElYSS5EaXNwbGF5T2JqZWN0fSBUaGUgRGlzcGxheU9iamVjdCB0byByZW5kZXJcbiAqIEBwYXJhbSByZW5kZXJUYXJnZXQge1BJWEkuUmVuZGVyVGFyZ2V0fSBUaGUgcmVuZGVyIHRhcmdldCB0byB1c2UgdG8gcmVuZGVyIHRoaXMgZGlzcGxheSBvYmplY3RcbiAqXG4gKi9cbldlYkdMUmVuZGVyZXIucHJvdG90eXBlLnJlbmRlckRpc3BsYXlPYmplY3QgPSBmdW5jdGlvbiAoZGlzcGxheU9iamVjdCwgcmVuZGVyVGFyZ2V0LCBjbGVhcikvL3Byb2plY3Rpb24sIGJ1ZmZlcilcbntcbiAgICB0aGlzLmJpbmRSZW5kZXJUYXJnZXQocmVuZGVyVGFyZ2V0KTtcblxuICAgIGlmKGNsZWFyKVxuICAgIHtcbiAgICAgICAgcmVuZGVyVGFyZ2V0LmNsZWFyKCk7XG4gICAgfVxuXG4gICAgLy8gc3RhcnQgdGhlIGZpbHRlciBtYW5hZ2VyXG4gICAgdGhpcy5maWx0ZXJNYW5hZ2VyLnNldEZpbHRlclN0YWNrKCByZW5kZXJUYXJnZXQuZmlsdGVyU3RhY2sgKTtcblxuICAgIC8vIHJlbmRlciB0aGUgc2NlbmUhXG4gICAgZGlzcGxheU9iamVjdC5yZW5kZXJXZWJHTCh0aGlzKTtcblxuICAgIC8vIGZpbmlzaCB0aGUgY3VycmVudCByZW5kZXJlci4uXG4gICAgdGhpcy5jdXJyZW50UmVuZGVyZXIuZmx1c2goKTtcbn07XG5cbi8qKlxuICogQ2hhbmdlcyB0aGUgY3VycmVudCByZW5kZXJlciB0byB0aGUgb25lIGdpdmVuIGluIHBhcmFtZXRlclxuICpcbiAqIEBwYXJhbSBvYmplY3RSZW5kZXJlciB7UElYSS5PYmplY3RSZW5kZXJlcn0gVGhlIG9iamVjdCByZW5kZXJlciB0byB1c2UuXG4gKi9cbldlYkdMUmVuZGVyZXIucHJvdG90eXBlLnNldE9iamVjdFJlbmRlcmVyID0gZnVuY3Rpb24gKG9iamVjdFJlbmRlcmVyKVxue1xuICAgIGlmICh0aGlzLmN1cnJlbnRSZW5kZXJlciA9PT0gb2JqZWN0UmVuZGVyZXIpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5jdXJyZW50UmVuZGVyZXIuc3RvcCgpO1xuICAgIHRoaXMuY3VycmVudFJlbmRlcmVyID0gb2JqZWN0UmVuZGVyZXI7XG4gICAgdGhpcy5jdXJyZW50UmVuZGVyZXIuc3RhcnQoKTtcbn07XG5cbi8qKlxuICogUmVzaXplcyB0aGUgd2ViR0wgdmlldyB0byB0aGUgc3BlY2lmaWVkIHdpZHRoIGFuZCBoZWlnaHQuXG4gKlxuICogQHBhcmFtIHdpZHRoIHtudW1iZXJ9IHRoZSBuZXcgd2lkdGggb2YgdGhlIHdlYkdMIHZpZXdcbiAqIEBwYXJhbSBoZWlnaHQge251bWJlcn0gdGhlIG5ldyBoZWlnaHQgb2YgdGhlIHdlYkdMIHZpZXdcbiAqL1xuV2ViR0xSZW5kZXJlci5wcm90b3R5cGUucmVzaXplID0gZnVuY3Rpb24gKHdpZHRoLCBoZWlnaHQpXG57XG4gICAgU3lzdGVtUmVuZGVyZXIucHJvdG90eXBlLnJlc2l6ZS5jYWxsKHRoaXMsIHdpZHRoLCBoZWlnaHQpO1xuXG4gICAgdGhpcy5maWx0ZXJNYW5hZ2VyLnJlc2l6ZSh3aWR0aCwgaGVpZ2h0KTtcbiAgICB0aGlzLnJvb3RSZW5kZXJUYXJnZXQucmVzaXplKHdpZHRoLCBoZWlnaHQpO1xuXG4gICAgaWYodGhpcy5jdXJyZW50UmVuZGVyVGFyZ2V0ID09PSB0aGlzLnJlbmRlclRhcmdldClcbiAgICB7XG4gICAgICAgIHRoaXMucm9vdFJlbmRlclRhcmdldC5hY3RpdmF0ZSgpO1xuICAgIH1cbn07XG5cbi8qKlxuICogQ2hhbmdlcyB0aGUgY3VycmVudCByZW5kZXIgdGFyZ2V0IHRvIHRoZSBvbmUgZ2l2ZW4gaW4gcGFyYW1ldGVyXG4gKlxuICogQHBhcmFtIHJlbmRlclRhcmdldCB7UElYSS5SZW5kZXJUYXJnZXR9IHRoZSBuZXcgcmVuZGVyIHRhcmdldFxuICovXG5XZWJHTFJlbmRlcmVyLnByb3RvdHlwZS5iaW5kUmVuZGVyVGFyZ2V0ID0gZnVuY3Rpb24gKHJlbmRlclRhcmdldCkvL3Byb2plY3Rpb24sIGJ1ZmZlcilcbntcbiAgICBpZihyZW5kZXJUYXJnZXQgIT09IHRoaXMuX2FjdGl2ZVJlbmRlclRhcmdldClcbiAgICB7XG4gICAgICAgIHRoaXMuX2FjdGl2ZVJlbmRlclRhcmdldCA9IHJlbmRlclRhcmdldDtcblxuICAgICAgICBpZih0aGlzLl9hY3RpdmVTaGFkZXIpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuX2FjdGl2ZVNoYWRlci51bmlmb3Jtcy5wcm9qZWN0aW9uTWF0cml4ID0gcmVuZGVyVGFyZ2V0LnByb2plY3Rpb25NYXRyaXgudG9BcnJheSh0cnVlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJlbmRlclRhcmdldC5hY3RpdmF0ZSgpO1xuXG4gICAgICAgIHRoaXMuc3RlbmNpbE1hbmFnZXIuc2V0TWFza1N0YWNrKCByZW5kZXJUYXJnZXQuc3RlbmNpbE1hc2tTdGFjayApO1xuICAgIH1cbn1cblxuV2ViR0xSZW5kZXJlci5wcm90b3R5cGUuYmluZFNoYWRlciA9IGZ1bmN0aW9uIChzaGFkZXIpLy9wcm9qZWN0aW9uLCBidWZmZXIpXG57XG4gICAgLy9UT0RPIGNhY2hlXG4gICAgaWYodGhpcy5fYWN0aXZlU2hhZGVyICE9PSBzaGFkZXIpXG4gICAge1xuICAgICAgICB0aGlzLl9hY3RpdmVTaGFkZXIgPSBzaGFkZXI7XG4gICAgICAgIHNoYWRlci5iaW5kKCk7XG5cbiAgICAgICAgLy8gYXV0b21hdGljYWxseSBzZXQgdGhlIHByb2plY3Rpb24gbWF0cml4XG4gICAgICAgIHNoYWRlci51bmlmb3Jtcy5wcm9qZWN0aW9uTWF0cml4ID0gdGhpcy5fYWN0aXZlUmVuZGVyVGFyZ2V0LnByb2plY3Rpb25NYXRyaXgudG9BcnJheSh0cnVlKTtcbiAgICB9XG59XG5cblxuV2ViR0xSZW5kZXJlci5wcm90b3R5cGUuYmluZFRleHR1cmUgPSBmdW5jdGlvbiAodGV4dHVyZSwgbG9jYXRpb24pXG57XG4gICAgdmFyIGdsID0gdGhpcy5nbDtcblxuICAgIC8vVE9ETyB0ZXN0IHBlcmYgb2YgY2FjaGU/XG4gICAgbG9jYXRpb24gPSBsb2NhdGlvbiB8fCAwO1xuXG4gICAgaWYodGhpcy5fYWN0aXZlVGV4dHVyZUxvY2F0aW9uICE9PSBsb2NhdGlvbikvL1xuICAgIHtcbiAgICAgICAgdGhpcy5fYWN0aXZlVGV4dHVyZUxvY2F0aW9uID0gbG9jYXRpb25cbiAgICAgICAgZ2wuYWN0aXZlVGV4dHVyZShnbC5URVhUVVJFMCArIGxvY2F0aW9uICk7XG4gICAgfVxuXG4gICAgLy9UT0RPIC0gY2FuIHdlIGNhY2hlIHRoaXMgdGV4dHVyZSB0b28/XG4gICAgdGhpcy5fYWN0aXZlVGV4dHVyZSA9IHRleHR1cmU7ICAgICAgXG4gICAgXG4gICAgaWYgKCF0ZXh0dXJlLl9nbFRleHR1cmVzW2dsLmlkXSlcbiAgICB7XG4gICAgICAgIC8vIHRoaXMgd2lsbCBhbHNvIGJpbmQgdGhlIHRleHR1cmUuLlxuICAgICAgICB0aGlzLnRleHR1cmVNYW5hZ2VyLnVwZGF0ZVRleHR1cmUodGV4dHVyZSk7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7ICAgXG4gICAgICAgIC8vIGJpbmQgdGhlIGN1cnJlbnQgdGV4dHVyZVxuICAgICAgICB0ZXh0dXJlLl9nbFRleHR1cmVzW2dsLmlkXS5iaW5kKCk7XG4gICAgfVxufVxuXG5cbi8qKlxuICogSGFuZGxlcyBhIGxvc3Qgd2ViZ2wgY29udGV4dFxuICpcbiAqIEBwcml2YXRlXG4gKi9cbldlYkdMUmVuZGVyZXIucHJvdG90eXBlLmhhbmRsZUNvbnRleHRMb3N0ID0gZnVuY3Rpb24gKGV2ZW50KVxue1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG59O1xuXG4vKipcbiAqIEhhbmRsZXMgYSByZXN0b3JlZCB3ZWJnbCBjb250ZXh0XG4gKlxuICogQHByaXZhdGVcbiAqL1xuV2ViR0xSZW5kZXJlci5wcm90b3R5cGUuaGFuZGxlQ29udGV4dFJlc3RvcmVkID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLl9pbml0Q29udGV4dCgpO1xuICAgIHRoaXMudGV4dHVyZU1hbmFnZXIucmVtb3ZlQWxsKCk7XG59O1xuXG4vKipcbiAqIFJlbW92ZXMgZXZlcnl0aGluZyBmcm9tIHRoZSByZW5kZXJlciAoZXZlbnQgbGlzdGVuZXJzLCBzcHJpdGViYXRjaCwgZXRjLi4uKVxuICpcbiAqIEBwYXJhbSBbcmVtb3ZlVmlldz1mYWxzZV0ge2Jvb2xlYW59IFJlbW92ZXMgdGhlIENhbnZhcyBlbGVtZW50IGZyb20gdGhlIERPTS5cbiAqL1xuV2ViR0xSZW5kZXJlci5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uIChyZW1vdmVWaWV3KVxue1xuICAgIHRoaXMuZGVzdHJveVBsdWdpbnMoKTtcblxuICAgIC8vIHJlbW92ZSBsaXN0ZW5lcnNcbiAgICB0aGlzLnZpZXcucmVtb3ZlRXZlbnRMaXN0ZW5lcignd2ViZ2xjb250ZXh0bG9zdCcsIHRoaXMuaGFuZGxlQ29udGV4dExvc3QpO1xuICAgIHRoaXMudmlldy5yZW1vdmVFdmVudExpc3RlbmVyKCd3ZWJnbGNvbnRleHRyZXN0b3JlZCcsIHRoaXMuaGFuZGxlQ29udGV4dFJlc3RvcmVkKTtcblxuICAgIHRoaXMudGV4dHVyZU1hbmFnZXIuZGVzdHJveUFsbCgpO1xuXG4gICAgLy8gY2FsbCBiYXNlIGRlc3Ryb3lcbiAgICBTeXN0ZW1SZW5kZXJlci5wcm90b3R5cGUuZGVzdHJveS5jYWxsKHRoaXMsIHJlbW92ZVZpZXcpO1xuXG4gICAgdGhpcy51aWQgPSAwO1xuXG4gICAgLy8gZGVzdHJveSB0aGUgbWFuYWdlcnNcbiAgICB0aGlzLnNoYWRlck1hbmFnZXIuZGVzdHJveSgpO1xuICAgIHRoaXMubWFza01hbmFnZXIuZGVzdHJveSgpO1xuICAgIHRoaXMuc3RlbmNpbE1hbmFnZXIuZGVzdHJveSgpO1xuICAgIHRoaXMuZmlsdGVyTWFuYWdlci5kZXN0cm95KCk7XG4gICAgdGhpcy5ibGVuZE1vZGVNYW5hZ2VyLmRlc3Ryb3koKTtcblxuICAgIHRoaXMuc2hhZGVyTWFuYWdlciA9IG51bGw7XG4gICAgdGhpcy5tYXNrTWFuYWdlciA9IG51bGw7XG4gICAgdGhpcy5maWx0ZXJNYW5hZ2VyID0gbnVsbDtcbiAgICB0aGlzLmJsZW5kTW9kZU1hbmFnZXIgPSBudWxsO1xuICAgIHRoaXMuY3VycmVudFJlbmRlcmVyID0gbnVsbDtcblxuICAgIHRoaXMuaGFuZGxlQ29udGV4dExvc3QgPSBudWxsO1xuICAgIHRoaXMuaGFuZGxlQ29udGV4dFJlc3RvcmVkID0gbnVsbDtcblxuICAgIHRoaXMuX2NvbnRleHRPcHRpb25zID0gbnVsbDtcblxuICAgIHRoaXMuZ2wudXNlUHJvZ3JhbShudWxsKTtcbiAgICB0aGlzLmdsID0gbnVsbDtcbn07XG5cbiIsInZhciBEZWZhdWx0U2hhZGVyID0gcmVxdWlyZSgnLi4vc2hhZGVycy9UZXh0dXJlU2hhZGVyJyk7XG5cbi8qKlxuICogVGhpcyBpcyB0aGUgYmFzZSBjbGFzcyBmb3IgY3JlYXRpbmcgYSBQSVhJIGZpbHRlci4gQ3VycmVudGx5IG9ubHkgV2ViR0wgc3VwcG9ydHMgZmlsdGVycy5cbiAqIElmIHlvdSB3YW50IHRvIG1ha2UgYSBjdXN0b20gZmlsdGVyIHRoaXMgc2hvdWxkIGJlIHlvdXIgYmFzZSBjbGFzcy5cbiAqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gdmVydGV4U3JjIHtzdHJpbmd8c3RyaW5nW119IFRoZSB2ZXJ0ZXggc2hhZGVyIHNvdXJjZSBhcyBhbiBhcnJheSBvZiBzdHJpbmdzLlxuICogQHBhcmFtIGZyYWdtZW50U3JjIHtzdHJpbmd8c3RyaW5nW119IFRoZSBmcmFnbWVudCBzaGFkZXIgc291cmNlIGFzIGFuIGFycmF5IG9mIHN0cmluZ3MuXG4gKiBAcGFyYW0gdW5pZm9ybXMge29iamVjdH0gQW4gb2JqZWN0IGNvbnRhaW5pbmcgdGhlIHVuaWZvcm1zIGZvciB0aGlzIGZpbHRlci5cbiAqL1xuZnVuY3Rpb24gQWJzdHJhY3RGaWx0ZXIodmVydGV4U3JjLCBmcmFnbWVudFNyYywgdW5pZm9ybXMpXG57XG5cbiAgICAvKipcbiAgICAgKiBBbiBhcnJheSBvZiBzaGFkZXJzXG4gICAgICogQG1lbWJlciB7UElYSS5TaGFkZXJbXX1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuc2hhZGVycyA9IFtdO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGV4dHJhIHBhZGRpbmcgdGhhdCB0aGUgZmlsdGVyIG1pZ2h0IG5lZWRcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy5wYWRkaW5nID0gMDtcblxuICAgIC8qKlxuICAgICAqIFRoZSB1bmlmb3JtcyBhcyBhbiBvYmplY3RcbiAgICAgKiBAbWVtYmVyIHtvYmplY3R9XG4gICAgICovXG4gICAgdGhpcy51bmlmb3JtcyA9IHVuaWZvcm1zIHx8IHt9O1xuXG5cbiAgICAvKipcbiAgICAgKiBUaGUgY29kZSBvZiB0aGUgdmVydGV4IHNoYWRlclxuICAgICAqIEBtZW1iZXIge3N0cmluZ1tdfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy52ZXJ0ZXhTcmMgPSB2ZXJ0ZXhTcmMgfHwgRGVmYXVsdFNoYWRlci5kZWZhdWx0VmVydGV4U3JjO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGNvZGUgb2YgdGhlIGZyYW1lbnQgc2hhZGVyXG4gICAgICogQG1lbWJlciB7c3RyaW5nW119XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLmZyYWdtZW50U3JjID0gZnJhZ21lbnRTcmMgfHwgRGVmYXVsdFNoYWRlci5kZWZhdWx0RnJhZ21lbnRTcmM7XG5cbiAgICAvL1RPRE8gYSByZW1pbmRlciAtIHdvdWxkIGJlIGNvb2wgdG8gaGF2ZSBsb3dlciByZXMgZmlsdGVycyBhcyB0aGlzIHdvdWxkIGdpdmUgYmV0dGVyIHBlcmZvcm1hbmNlLlxuXG4gICAgLy90eXBlb2YgZnJhZ21lbnRTcmMgPT09ICdzdHJpbmcnID8gZnJhZ21lbnRTcmMuc3BsaXQoJycpIDogKGZyYWdtZW50U3JjIHx8IFtdKTtcblxufVxuXG5BYnN0cmFjdEZpbHRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBBYnN0cmFjdEZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gQWJzdHJhY3RGaWx0ZXI7XG5cbi8qKlxuICogR3JhYnMgYSBzaGFkZXIgZnJvbSB0aGUgY3VycmVudCByZW5kZXJlclxuICpcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5XZWJHTFJlbmRlcmVyfSBUaGUgcmVuZGVyZXIgdG8gcmV0cmlldmUgdGhlIHNoYWRlciBmcm9tXG4gKi9cbkFic3RyYWN0RmlsdGVyLnByb3RvdHlwZS5nZXRTaGFkZXIgPSBmdW5jdGlvbiAocmVuZGVyZXIpXG57XG4gICAgdmFyIGdsID0gcmVuZGVyZXIuZ2w7XG5cbiAgICB2YXIgc2hhZGVyID0gdGhpcy5zaGFkZXJzW2dsLmlkXTtcblxuICAgIGlmICghc2hhZGVyKVxuICAgIHtcbiAgICAgICAgc2hhZGVyID0gbmV3IERlZmF1bHRTaGFkZXIocmVuZGVyZXIuc2hhZGVyTWFuYWdlcixcbiAgICAgICAgICAgIHRoaXMudmVydGV4U3JjLFxuICAgICAgICAgICAgdGhpcy5mcmFnbWVudFNyYyxcbiAgICAgICAgICAgIHRoaXMudW5pZm9ybXMsXG4gICAgICAgICAgICB0aGlzLmF0dHJpYnV0ZXNcbiAgICAgICAgKTtcblxuICAgICAgICB0aGlzLnNoYWRlcnNbZ2wuaWRdID0gc2hhZGVyO1xuICAgIH1cblxuICAgIHJldHVybiBzaGFkZXI7XG59O1xuXG4vKipcbiAqIEFwcGxpZXMgdGhlIGZpbHRlclxuICpcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5XZWJHTFJlbmRlcmVyfSBUaGUgcmVuZGVyZXIgdG8gcmV0cmlldmUgdGhlIGZpbHRlciBmcm9tXG4gKiBAcGFyYW0gaW5wdXQge1BJWEkuUmVuZGVyVGFyZ2V0fVxuICogQHBhcmFtIG91dHB1dCB7UElYSS5SZW5kZXJUYXJnZXR9XG4gKiBAcGFyYW0gY2xlYXIge2Jvb2xlYW59IFdoZXRoZXIgb3Igbm90IHdlIHdhbnQgdG8gY2xlYXIgdGhlIG91dHB1dFRhcmdldFxuICovXG5BYnN0cmFjdEZpbHRlci5wcm90b3R5cGUuYXBwbHlGaWx0ZXIgPSBmdW5jdGlvbiAocmVuZGVyZXIsIGlucHV0LCBvdXRwdXQsIGNsZWFyKVxue1xuICAgIHZhciBzaGFkZXIgPSB0aGlzLmdldFNoYWRlcihyZW5kZXJlcik7XG5cbiAgICByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLmFwcGx5RmlsdGVyKHNoYWRlciwgaW5wdXQsIG91dHB1dCwgY2xlYXIpO1xufTtcblxuLyoqXG4gKiBTeW5jcyBhIHVuaWZvcm0gYmV0d2VlbiB0aGUgY2xhc3Mgb2JqZWN0IGFuZCB0aGUgc2hhZGVycy5cbiAqXG4gKi9cbkFic3RyYWN0RmlsdGVyLnByb3RvdHlwZS5zeW5jVW5pZm9ybSA9IGZ1bmN0aW9uICh1bmlmb3JtKVxue1xuICAgIGZvciAodmFyIGkgPSAwLCBqID0gdGhpcy5zaGFkZXJzLmxlbmd0aDsgaSA8IGo7ICsraSlcbiAgICB7XG4gICAgICAgIHRoaXMuc2hhZGVyc1tpXS5zeW5jVW5pZm9ybSh1bmlmb3JtKTtcbiAgICB9XG59O1xuIiwidmFyIEFic3RyYWN0RmlsdGVyID0gcmVxdWlyZSgnLi9BYnN0cmFjdEZpbHRlcicpO1xuLy8gQHNlZSBodHRwczovL2dpdGh1Yi5jb20vc3Vic3RhY2svYnJmcy9pc3N1ZXMvMjVcblxuXG4vKipcbiAqXG4gKiBCYXNpYyBGWEFBIGltcGxlbWVudGF0aW9uIGJhc2VkIG9uIHRoZSBjb2RlIG9uIGdlZWtzM2QuY29tIHdpdGggdGhlXG4gKiBtb2RpZmljYXRpb24gdGhhdCB0aGUgdGV4dHVyZTJETG9kIHN0dWZmIHdhcyByZW1vdmVkIHNpbmNlIGl0J3NcbiAqIHVuc3VwcG9ydGVkIGJ5IFdlYkdMLlxuICpcbiAqIC0tXG4gKiBGcm9tOlxuICogaHR0cHM6Ly9naXRodWIuY29tL21pdHN1aGlrby93ZWJnbC1tZWluY3JhZnRcbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQWJzdHJhY3RGaWx0ZXJcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKlxuICovXG5mdW5jdGlvbiBGWEFBRmlsdGVyKClcbntcbiAgICBBYnN0cmFjdEZpbHRlci5jYWxsKHRoaXMsXG4gICAgICAgIC8vIHZlcnRleCBzaGFkZXJcbiAgICAgICAgXCJcXG5wcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcXG5cXG5hdHRyaWJ1dGUgdmVjMiBhVmVydGV4UG9zaXRpb247XFxuYXR0cmlidXRlIHZlYzIgYVRleHR1cmVDb29yZDtcXG5hdHRyaWJ1dGUgdmVjNCBhQ29sb3I7XFxuXFxudW5pZm9ybSBtYXQzIHByb2plY3Rpb25NYXRyaXg7XFxudW5pZm9ybSB2ZWMyIHJlc29sdXRpb247XFxuXFxudmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7XFxudmFyeWluZyB2ZWM0IHZDb2xvcjtcXG5cXG52YXJ5aW5nIHZlYzIgdlJlc29sdXRpb247XFxuXFxuLy90ZXhjb29yZHMgY29tcHV0ZWQgaW4gdmVydGV4IHN0ZXBcXG4vL3RvIGF2b2lkIGRlcGVuZGVudCB0ZXh0dXJlIHJlYWRzXFxudmFyeWluZyB2ZWMyIHZfcmdiTlc7XFxudmFyeWluZyB2ZWMyIHZfcmdiTkU7XFxudmFyeWluZyB2ZWMyIHZfcmdiU1c7XFxudmFyeWluZyB2ZWMyIHZfcmdiU0U7XFxudmFyeWluZyB2ZWMyIHZfcmdiTTtcXG5cXG5cXG52b2lkIHRleGNvb3Jkcyh2ZWMyIGZyYWdDb29yZCwgdmVjMiByZXNvbHV0aW9uLFxcbiAgICAgICAgICAgIG91dCB2ZWMyIHZfcmdiTlcsIG91dCB2ZWMyIHZfcmdiTkUsXFxuICAgICAgICAgICAgb3V0IHZlYzIgdl9yZ2JTVywgb3V0IHZlYzIgdl9yZ2JTRSxcXG4gICAgICAgICAgICBvdXQgdmVjMiB2X3JnYk0pIHtcXG4gICAgdmVjMiBpbnZlcnNlVlAgPSAxLjAgLyByZXNvbHV0aW9uLnh5O1xcbiAgICB2X3JnYk5XID0gKGZyYWdDb29yZCArIHZlYzIoLTEuMCwgLTEuMCkpICogaW52ZXJzZVZQO1xcbiAgICB2X3JnYk5FID0gKGZyYWdDb29yZCArIHZlYzIoMS4wLCAtMS4wKSkgKiBpbnZlcnNlVlA7XFxuICAgIHZfcmdiU1cgPSAoZnJhZ0Nvb3JkICsgdmVjMigtMS4wLCAxLjApKSAqIGludmVyc2VWUDtcXG4gICAgdl9yZ2JTRSA9IChmcmFnQ29vcmQgKyB2ZWMyKDEuMCwgMS4wKSkgKiBpbnZlcnNlVlA7XFxuICAgIHZfcmdiTSA9IHZlYzIoZnJhZ0Nvb3JkICogaW52ZXJzZVZQKTtcXG59XFxuXFxudm9pZCBtYWluKHZvaWQpe1xcbiAgIGdsX1Bvc2l0aW9uID0gdmVjNCgocHJvamVjdGlvbk1hdHJpeCAqIHZlYzMoYVZlcnRleFBvc2l0aW9uLCAxLjApKS54eSwgMC4wLCAxLjApO1xcbiAgIHZUZXh0dXJlQ29vcmQgPSBhVGV4dHVyZUNvb3JkO1xcbiAgIHZDb2xvciA9IHZlYzQoYUNvbG9yLnJnYiAqIGFDb2xvci5hLCBhQ29sb3IuYSk7XFxuICAgdlJlc29sdXRpb24gPSByZXNvbHV0aW9uO1xcblxcbiAgIC8vY29tcHV0ZSB0aGUgdGV4dHVyZSBjb29yZHMgYW5kIHNlbmQgdGhlbSB0byB2YXJ5aW5nc1xcbiAgIHRleGNvb3JkcyhhVGV4dHVyZUNvb3JkICogcmVzb2x1dGlvbiwgcmVzb2x1dGlvbiwgdl9yZ2JOVywgdl9yZ2JORSwgdl9yZ2JTVywgdl9yZ2JTRSwgdl9yZ2JNKTtcXG59XFxuXCIsXG4gICAgICAgIC8vIGZyYWdtZW50IHNoYWRlclxuICAgICAgICBcInByZWNpc2lvbiBsb3dwIGZsb2F0O1xcblxcblxcbi8qKlxcbkJhc2ljIEZYQUEgaW1wbGVtZW50YXRpb24gYmFzZWQgb24gdGhlIGNvZGUgb24gZ2Vla3MzZC5jb20gd2l0aCB0aGVcXG5tb2RpZmljYXRpb24gdGhhdCB0aGUgdGV4dHVyZTJETG9kIHN0dWZmIHdhcyByZW1vdmVkIHNpbmNlIGl0J3NcXG51bnN1cHBvcnRlZCBieSBXZWJHTC5cXG5cXG4tLVxcblxcbkZyb206XFxuaHR0cHM6Ly9naXRodWIuY29tL21pdHN1aGlrby93ZWJnbC1tZWluY3JhZnRcXG5cXG5Db3B5cmlnaHQgKGMpIDIwMTEgYnkgQXJtaW4gUm9uYWNoZXIuXFxuXFxuU29tZSByaWdodHMgcmVzZXJ2ZWQuXFxuXFxuUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0XFxubW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZVxcbm1ldDpcXG5cXG4gICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodFxcbiAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci5cXG5cXG4gICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlXFxuICAgICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmdcXG4gICAgICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWRcXG4gICAgICB3aXRoIHRoZSBkaXN0cmlidXRpb24uXFxuXFxuICAgICogVGhlIG5hbWVzIG9mIHRoZSBjb250cmlidXRvcnMgbWF5IG5vdCBiZSB1c2VkIHRvIGVuZG9yc2Ugb3JcXG4gICAgICBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWNcXG4gICAgICBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uXFxuXFxuVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SU1xcblxcXCJBUyBJU1xcXCIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UXFxuTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SXFxuQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFRcXG5PV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCxcXG5TUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UXFxuTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsXFxuREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZXFxuVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVFxcbihJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRVxcbk9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuXFxuKi9cXG5cXG4jaWZuZGVmIEZYQUFfUkVEVUNFX01JTlxcbiAgICAjZGVmaW5lIEZYQUFfUkVEVUNFX01JTiAgICgxLjAvIDEyOC4wKVxcbiNlbmRpZlxcbiNpZm5kZWYgRlhBQV9SRURVQ0VfTVVMXFxuICAgICNkZWZpbmUgRlhBQV9SRURVQ0VfTVVMICAgKDEuMCAvIDguMClcXG4jZW5kaWZcXG4jaWZuZGVmIEZYQUFfU1BBTl9NQVhcXG4gICAgI2RlZmluZSBGWEFBX1NQQU5fTUFYICAgICA4LjBcXG4jZW5kaWZcXG5cXG4vL29wdGltaXplZCB2ZXJzaW9uIGZvciBtb2JpbGUsIHdoZXJlIGRlcGVuZGVudFxcbi8vdGV4dHVyZSByZWFkcyBjYW4gYmUgYSBib3R0bGVuZWNrXFxudmVjNCBmeGFhKHNhbXBsZXIyRCB0ZXgsIHZlYzIgZnJhZ0Nvb3JkLCB2ZWMyIHJlc29sdXRpb24sXFxuICAgICAgICAgICAgdmVjMiB2X3JnYk5XLCB2ZWMyIHZfcmdiTkUsXFxuICAgICAgICAgICAgdmVjMiB2X3JnYlNXLCB2ZWMyIHZfcmdiU0UsXFxuICAgICAgICAgICAgdmVjMiB2X3JnYk0pIHtcXG4gICAgdmVjNCBjb2xvcjtcXG4gICAgbWVkaXVtcCB2ZWMyIGludmVyc2VWUCA9IHZlYzIoMS4wIC8gcmVzb2x1dGlvbi54LCAxLjAgLyByZXNvbHV0aW9uLnkpO1xcbiAgICB2ZWMzIHJnYk5XID0gdGV4dHVyZTJEKHRleCwgdl9yZ2JOVykueHl6O1xcbiAgICB2ZWMzIHJnYk5FID0gdGV4dHVyZTJEKHRleCwgdl9yZ2JORSkueHl6O1xcbiAgICB2ZWMzIHJnYlNXID0gdGV4dHVyZTJEKHRleCwgdl9yZ2JTVykueHl6O1xcbiAgICB2ZWMzIHJnYlNFID0gdGV4dHVyZTJEKHRleCwgdl9yZ2JTRSkueHl6O1xcbiAgICB2ZWM0IHRleENvbG9yID0gdGV4dHVyZTJEKHRleCwgdl9yZ2JNKTtcXG4gICAgdmVjMyByZ2JNICA9IHRleENvbG9yLnh5ejtcXG4gICAgdmVjMyBsdW1hID0gdmVjMygwLjI5OSwgMC41ODcsIDAuMTE0KTtcXG4gICAgZmxvYXQgbHVtYU5XID0gZG90KHJnYk5XLCBsdW1hKTtcXG4gICAgZmxvYXQgbHVtYU5FID0gZG90KHJnYk5FLCBsdW1hKTtcXG4gICAgZmxvYXQgbHVtYVNXID0gZG90KHJnYlNXLCBsdW1hKTtcXG4gICAgZmxvYXQgbHVtYVNFID0gZG90KHJnYlNFLCBsdW1hKTtcXG4gICAgZmxvYXQgbHVtYU0gID0gZG90KHJnYk0sICBsdW1hKTtcXG4gICAgZmxvYXQgbHVtYU1pbiA9IG1pbihsdW1hTSwgbWluKG1pbihsdW1hTlcsIGx1bWFORSksIG1pbihsdW1hU1csIGx1bWFTRSkpKTtcXG4gICAgZmxvYXQgbHVtYU1heCA9IG1heChsdW1hTSwgbWF4KG1heChsdW1hTlcsIGx1bWFORSksIG1heChsdW1hU1csIGx1bWFTRSkpKTtcXG5cXG4gICAgbWVkaXVtcCB2ZWMyIGRpcjtcXG4gICAgZGlyLnggPSAtKChsdW1hTlcgKyBsdW1hTkUpIC0gKGx1bWFTVyArIGx1bWFTRSkpO1xcbiAgICBkaXIueSA9ICAoKGx1bWFOVyArIGx1bWFTVykgLSAobHVtYU5FICsgbHVtYVNFKSk7XFxuXFxuICAgIGZsb2F0IGRpclJlZHVjZSA9IG1heCgobHVtYU5XICsgbHVtYU5FICsgbHVtYVNXICsgbHVtYVNFKSAqXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAoMC4yNSAqIEZYQUFfUkVEVUNFX01VTCksIEZYQUFfUkVEVUNFX01JTik7XFxuXFxuICAgIGZsb2F0IHJjcERpck1pbiA9IDEuMCAvIChtaW4oYWJzKGRpci54KSwgYWJzKGRpci55KSkgKyBkaXJSZWR1Y2UpO1xcbiAgICBkaXIgPSBtaW4odmVjMihGWEFBX1NQQU5fTUFYLCBGWEFBX1NQQU5fTUFYKSxcXG4gICAgICAgICAgICAgIG1heCh2ZWMyKC1GWEFBX1NQQU5fTUFYLCAtRlhBQV9TUEFOX01BWCksXFxuICAgICAgICAgICAgICBkaXIgKiByY3BEaXJNaW4pKSAqIGludmVyc2VWUDtcXG5cXG4gICAgdmVjMyByZ2JBID0gMC41ICogKFxcbiAgICAgICAgdGV4dHVyZTJEKHRleCwgZnJhZ0Nvb3JkICogaW52ZXJzZVZQICsgZGlyICogKDEuMCAvIDMuMCAtIDAuNSkpLnh5eiArXFxuICAgICAgICB0ZXh0dXJlMkQodGV4LCBmcmFnQ29vcmQgKiBpbnZlcnNlVlAgKyBkaXIgKiAoMi4wIC8gMy4wIC0gMC41KSkueHl6KTtcXG4gICAgdmVjMyByZ2JCID0gcmdiQSAqIDAuNSArIDAuMjUgKiAoXFxuICAgICAgICB0ZXh0dXJlMkQodGV4LCBmcmFnQ29vcmQgKiBpbnZlcnNlVlAgKyBkaXIgKiAtMC41KS54eXogK1xcbiAgICAgICAgdGV4dHVyZTJEKHRleCwgZnJhZ0Nvb3JkICogaW52ZXJzZVZQICsgZGlyICogMC41KS54eXopO1xcblxcbiAgICBmbG9hdCBsdW1hQiA9IGRvdChyZ2JCLCBsdW1hKTtcXG4gICAgaWYgKChsdW1hQiA8IGx1bWFNaW4pIHx8IChsdW1hQiA+IGx1bWFNYXgpKVxcbiAgICAgICAgY29sb3IgPSB2ZWM0KHJnYkEsIHRleENvbG9yLmEpO1xcbiAgICBlbHNlXFxuICAgICAgICBjb2xvciA9IHZlYzQocmdiQiwgdGV4Q29sb3IuYSk7XFxuICAgIHJldHVybiBjb2xvcjtcXG59XFxuXFxuXFxudmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7XFxudmFyeWluZyB2ZWM0IHZDb2xvcjtcXG52YXJ5aW5nIHZlYzIgdlJlc29sdXRpb247XFxuXFxuLy90ZXhjb29yZHMgY29tcHV0ZWQgaW4gdmVydGV4IHN0ZXBcXG4vL3RvIGF2b2lkIGRlcGVuZGVudCB0ZXh0dXJlIHJlYWRzXFxudmFyeWluZyB2ZWMyIHZfcmdiTlc7XFxudmFyeWluZyB2ZWMyIHZfcmdiTkU7XFxudmFyeWluZyB2ZWMyIHZfcmdiU1c7XFxudmFyeWluZyB2ZWMyIHZfcmdiU0U7XFxudmFyeWluZyB2ZWMyIHZfcmdiTTtcXG5cXG51bmlmb3JtIHNhbXBsZXIyRCB1U2FtcGxlcjtcXG5cXG5cXG52b2lkIG1haW4odm9pZCl7XFxuXFxuICAgIGdsX0ZyYWdDb2xvciA9IGZ4YWEodVNhbXBsZXIsIHZUZXh0dXJlQ29vcmQgKiB2UmVzb2x1dGlvbiwgdlJlc29sdXRpb24sIHZfcmdiTlcsIHZfcmdiTkUsIHZfcmdiU1csIHZfcmdiU0UsIHZfcmdiTSk7XFxuXFxufVxcblwiLFxuICAgICAgICAvLyB1bmlmb3Jtc1xuICAgICAgICB7XG4gICAgICAgICAgICByZXNvbHV0aW9uOiB7IHR5cGU6ICd2MicsIHZhbHVlOiB7IHg6IDEsIHk6IDEgfSB9XG4gICAgICAgIH1cbiAgICApO1xuXG59XG5cbkZYQUFGaWx0ZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShBYnN0cmFjdEZpbHRlci5wcm90b3R5cGUpO1xuRlhBQUZpbHRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBGWEFBRmlsdGVyO1xubW9kdWxlLmV4cG9ydHMgPSBGWEFBRmlsdGVyO1xuXG4vKipcbiAqIEFwcGxpZXMgdGhlIGZpbHRlclxuICpcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5XZWJHTFJlbmRlcmVyfSBUaGUgcmVuZGVyZXIgdG8gcmV0cmlldmUgdGhlIGZpbHRlciBmcm9tXG4gKiBAcGFyYW0gaW5wdXQge1BJWEkuUmVuZGVyVGFyZ2V0fVxuICogQHBhcmFtIG91dHB1dCB7UElYSS5SZW5kZXJUYXJnZXR9XG4gKi9cbkZYQUFGaWx0ZXIucHJvdG90eXBlLmFwcGx5RmlsdGVyID0gZnVuY3Rpb24gKHJlbmRlcmVyLCBpbnB1dCwgb3V0cHV0KVxue1xuICAgIHZhciBmaWx0ZXJNYW5hZ2VyID0gcmVuZGVyZXIuZmlsdGVyTWFuYWdlcjtcblxuICAgIHZhciBzaGFkZXIgPSB0aGlzLmdldFNoYWRlciggcmVuZGVyZXIgKTtcbiAgICAgLy8gZHJhdyB0aGUgZmlsdGVyLi4uXG4gICAgZmlsdGVyTWFuYWdlci5hcHBseUZpbHRlcihzaGFkZXIsIGlucHV0LCBvdXRwdXQpO1xufTtcbiIsInZhciBBYnN0cmFjdEZpbHRlciA9IHJlcXVpcmUoJy4vQWJzdHJhY3RGaWx0ZXInKSxcbiAgICBtYXRoID0gIHJlcXVpcmUoJy4uLy4uLy4uL21hdGgnKTtcblxuLy8gQHNlZSBodHRwczovL2dpdGh1Yi5jb20vc3Vic3RhY2svYnJmcy9pc3N1ZXMvMjVcblxuXG4vKipcbiAqIFRoZSBTcHJpdGVNYXNrRmlsdGVyIGNsYXNzXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLkFic3RyYWN0RmlsdGVyXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIHNwcml0ZSB7UElYSS5TcHJpdGV9IHRoZSB0YXJnZXQgc3ByaXRlXG4gKi9cbmZ1bmN0aW9uIFNwcml0ZU1hc2tGaWx0ZXIoc3ByaXRlKVxue1xuICAgIHZhciBtYXNrTWF0cml4ID0gbmV3IG1hdGguTWF0cml4KCk7XG5cbiAgICBBYnN0cmFjdEZpbHRlci5jYWxsKHRoaXMsXG4gICAgICAgIFwiYXR0cmlidXRlIHZlYzIgYVZlcnRleFBvc2l0aW9uO1xcbmF0dHJpYnV0ZSB2ZWMyIGFUZXh0dXJlQ29vcmQ7XFxuYXR0cmlidXRlIHZlYzQgYUNvbG9yO1xcblxcbnVuaWZvcm0gbWF0MyBwcm9qZWN0aW9uTWF0cml4O1xcbnVuaWZvcm0gbWF0MyBvdGhlck1hdHJpeDtcXG5cXG52YXJ5aW5nIHZlYzIgdk1hc2tDb29yZDtcXG52YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDtcXG52YXJ5aW5nIHZlYzQgdkNvbG9yO1xcblxcbnZvaWQgbWFpbih2b2lkKVxcbntcXG4gICAgZ2xfUG9zaXRpb24gPSB2ZWM0KChwcm9qZWN0aW9uTWF0cml4ICogdmVjMyhhVmVydGV4UG9zaXRpb24sIDEuMCkpLnh5LCAwLjAsIDEuMCk7XFxuICAgIHZUZXh0dXJlQ29vcmQgPSBhVGV4dHVyZUNvb3JkO1xcbiAgICB2TWFza0Nvb3JkID0gKCBvdGhlck1hdHJpeCAqIHZlYzMoIGFUZXh0dXJlQ29vcmQsIDEuMCkgICkueHk7XFxuICAgIHZDb2xvciA9IHZlYzQoYUNvbG9yLnJnYiAqIGFDb2xvci5hLCBhQ29sb3IuYSk7XFxufVxcblwiLFxuICAgICAgICBcInByZWNpc2lvbiBsb3dwIGZsb2F0O1xcblxcbnZhcnlpbmcgdmVjMiB2TWFza0Nvb3JkO1xcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xcbnZhcnlpbmcgdmVjNCB2Q29sb3I7XFxuXFxudW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXI7XFxudW5pZm9ybSBmbG9hdCBhbHBoYTtcXG51bmlmb3JtIHNhbXBsZXIyRCBtYXNrO1xcblxcbnZvaWQgbWFpbih2b2lkKVxcbntcXG4gICAgLy8gY2hlY2sgY2xpcCEgdGhpcyB3aWxsIHN0b3AgdGhlIG1hc2sgYmxlZWRpbmcgb3V0IGZyb20gdGhlIGVkZ2VzXFxuICAgIHZlYzIgdGV4dCA9IGFicyggdk1hc2tDb29yZCAtIDAuNSApO1xcbiAgICB0ZXh0ID0gc3RlcCgwLjUsIHRleHQpO1xcbiAgICBmbG9hdCBjbGlwID0gMS4wIC0gbWF4KHRleHQueSwgdGV4dC54KTtcXG4gICAgdmVjNCBvcmlnaW5hbCA9IHRleHR1cmUyRCh1U2FtcGxlciwgdlRleHR1cmVDb29yZCk7XFxuICAgIHZlYzQgbWFza3kgPSB0ZXh0dXJlMkQobWFzaywgdk1hc2tDb29yZCk7XFxuICAgIG9yaWdpbmFsICo9IChtYXNreS5yICogbWFza3kuYSAqIGFscGhhICogY2xpcCk7XFxuICAgIGdsX0ZyYWdDb2xvciA9IG9yaWdpbmFsO1xcbn1cXG5cIixcbiAgICAgICAge1xuICAgICAgICAgICAgbWFzazogICAgICAgICAgIHsgdHlwZTogJ3NhbXBsZXIyRCcsIHZhbHVlOiBzcHJpdGUuX3RleHR1cmUgfSxcbiAgICAgICAgICAgIGFscGhhOiAgICAgICAgICB7IHR5cGU6ICdmJywgdmFsdWU6IDF9LFxuICAgICAgICAgICAgb3RoZXJNYXRyaXg6ICAgIHsgdHlwZTogJ21hdDMnLCB2YWx1ZTogbWFza01hdHJpeC50b0FycmF5KHRydWUpIH1cbiAgICAgICAgfVxuICAgICk7XG5cbiAgICB0aGlzLm1hc2tTcHJpdGUgPSBzcHJpdGU7XG4gICAgdGhpcy5tYXNrTWF0cml4ID0gbWFza01hdHJpeDtcbn1cblxuU3ByaXRlTWFza0ZpbHRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKEFic3RyYWN0RmlsdGVyLnByb3RvdHlwZSk7XG5TcHJpdGVNYXNrRmlsdGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFNwcml0ZU1hc2tGaWx0ZXI7XG5tb2R1bGUuZXhwb3J0cyA9IFNwcml0ZU1hc2tGaWx0ZXI7XG5cbi8qKlxuICogQXBwbGllcyB0aGUgZmlsdGVyXG4gKlxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLldlYkdMUmVuZGVyZXJ9IFRoZSByZW5kZXJlciB0byByZXRyaWV2ZSB0aGUgZmlsdGVyIGZyb21cbiAqIEBwYXJhbSBpbnB1dCB7UElYSS5SZW5kZXJUYXJnZXR9XG4gKiBAcGFyYW0gb3V0cHV0IHtQSVhJLlJlbmRlclRhcmdldH1cbiAqL1xuU3ByaXRlTWFza0ZpbHRlci5wcm90b3R5cGUuYXBwbHlGaWx0ZXIgPSBmdW5jdGlvbiAocmVuZGVyZXIsIGlucHV0LCBvdXRwdXQpXG57XG4gICAgdmFyIGZpbHRlck1hbmFnZXIgPSByZW5kZXJlci5maWx0ZXJNYW5hZ2VyO1xuXG4gICAgdGhpcy51bmlmb3Jtcy5tYXNrLnZhbHVlID0gdGhpcy5tYXNrU3ByaXRlLl90ZXh0dXJlO1xuXG4gICAgZmlsdGVyTWFuYWdlci5jYWxjdWxhdGVNYXBwZWRNYXRyaXgoaW5wdXQuZnJhbWUsIHRoaXMubWFza1Nwcml0ZSwgdGhpcy5tYXNrTWF0cml4KTtcblxuICAgIHRoaXMudW5pZm9ybXMub3RoZXJNYXRyaXgudmFsdWUgPSB0aGlzLm1hc2tNYXRyaXgudG9BcnJheSh0cnVlKTtcbiAgICB0aGlzLnVuaWZvcm1zLmFscGhhLnZhbHVlID0gdGhpcy5tYXNrU3ByaXRlLndvcmxkQWxwaGE7XG5cbiAgICB2YXIgc2hhZGVyID0gdGhpcy5nZXRTaGFkZXIocmVuZGVyZXIpO1xuICAgICAvLyBkcmF3IHRoZSBmaWx0ZXIuLi5cbiAgICBmaWx0ZXJNYW5hZ2VyLmFwcGx5RmlsdGVyKHNoYWRlciwgaW5wdXQsIG91dHB1dCk7XG59O1xuXG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKFNwcml0ZU1hc2tGaWx0ZXIucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogVGhlIHRleHR1cmUgdXNlZCBmb3IgdGhlIGRpc3BsYWNlbWVudCBtYXAuIE11c3QgYmUgcG93ZXIgb2YgMiBzaXplZCB0ZXh0dXJlLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5UZXh0dXJlfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLlNwcml0ZU1hc2tGaWx0ZXIjXG4gICAgICovXG4gICAgbWFwOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudW5pZm9ybXMubWFzay52YWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudW5pZm9ybXMubWFzay52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFRoZSBvZmZzZXQgdXNlZCB0byBtb3ZlIHRoZSBkaXNwbGFjZW1lbnQgbWFwLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5Qb2ludH1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5TcHJpdGVNYXNrRmlsdGVyI1xuICAgICAqL1xuICAgIG9mZnNldDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudW5pZm9ybXMub2Zmc2V0LnZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLm9mZnNldC52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfVxufSk7XG4iLCJ2YXIgV2ViR0xNYW5hZ2VyID0gcmVxdWlyZSgnLi9XZWJHTE1hbmFnZXInKTtcblxuLyoqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAZXh0ZW5kcyBQSVhJLldlYkdsTWFuYWdlclxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLldlYkdMUmVuZGVyZXJ9IFRoZSByZW5kZXJlciB0aGlzIG1hbmFnZXIgd29ya3MgZm9yLlxuICovXG5mdW5jdGlvbiBCbGVuZE1vZGVNYW5hZ2VyKHJlbmRlcmVyKVxue1xuICAgIFdlYkdMTWFuYWdlci5jYWxsKHRoaXMsIHJlbmRlcmVyKTtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLmN1cnJlbnRCbGVuZE1vZGUgPSA5OTk5OTtcbn1cblxuQmxlbmRNb2RlTWFuYWdlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFdlYkdMTWFuYWdlci5wcm90b3R5cGUpO1xuQmxlbmRNb2RlTWFuYWdlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBCbGVuZE1vZGVNYW5hZ2VyO1xubW9kdWxlLmV4cG9ydHMgPSBCbGVuZE1vZGVNYW5hZ2VyO1xuXG4vKipcbiAqIFNldHMtdXAgdGhlIGdpdmVuIGJsZW5kTW9kZSBmcm9tIFdlYkdMJ3MgcG9pbnQgb2Ygdmlldy5cbiAqXG4gKiBAcGFyYW0gYmxlbmRNb2RlIHtudW1iZXJ9IHRoZSBibGVuZE1vZGUsIHNob3VsZCBiZSBhIFBpeGkgY29uc3QsIHN1Y2ggYXMgYFBJWEkuQkxFTkRfTU9ERVMuQUREYC4gU2VlXG4gKiAge0BsaW5rIFBJWEkuQkxFTkRfTU9ERVN9IGZvciBwb3NzaWJsZSB2YWx1ZXMuXG4gKi9cbkJsZW5kTW9kZU1hbmFnZXIucHJvdG90eXBlLnNldEJsZW5kTW9kZSA9IGZ1bmN0aW9uIChibGVuZE1vZGUpXG57XG4gICAgaWYgKHRoaXMuY3VycmVudEJsZW5kTW9kZSA9PT0gYmxlbmRNb2RlKVxuICAgIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHRoaXMuY3VycmVudEJsZW5kTW9kZSA9IGJsZW5kTW9kZTtcblxuICAgIHZhciBtb2RlID0gdGhpcy5yZW5kZXJlci5ibGVuZE1vZGVzW3RoaXMuY3VycmVudEJsZW5kTW9kZV07XG4gICAgdGhpcy5yZW5kZXJlci5nbC5ibGVuZEZ1bmMobW9kZVswXSwgbW9kZVsxXSk7XG5cbiAgICByZXR1cm4gdHJ1ZTtcbn07XG4iLCJ2YXIgV2ViR0xNYW5hZ2VyID0gcmVxdWlyZSgnLi9XZWJHTE1hbmFnZXInKSxcbiAgICBSZW5kZXJUYXJnZXQgPSByZXF1aXJlKCcuLi91dGlscy9SZW5kZXJUYXJnZXQnKSxcbiAgICBDT05TVCA9IHJlcXVpcmUoJy4uLy4uLy4uL2NvbnN0JyksXG4gICAgUXVhZCA9IHJlcXVpcmUoJy4uL3V0aWxzL1F1YWQnKSxcbiAgICBtYXRoID0gIHJlcXVpcmUoJy4uLy4uLy4uL21hdGgnKTtcblxuLyoqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAZXh0ZW5kcyBQSVhJLldlYkdMTWFuYWdlclxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLldlYkdMUmVuZGVyZXJ9IFRoZSByZW5kZXJlciB0aGlzIG1hbmFnZXIgd29ya3MgZm9yLlxuICovXG5mdW5jdGlvbiBGaWx0ZXJNYW5hZ2VyKHJlbmRlcmVyKVxue1xuICAgIFdlYkdMTWFuYWdlci5jYWxsKHRoaXMsIHJlbmRlcmVyKTtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge29iamVjdFtdfVxuICAgICAqL1xuICAgIHRoaXMuZmlsdGVyU3RhY2sgPSBbXTtcblxuICAgIHRoaXMuZmlsdGVyU3RhY2sucHVzaCh7XG4gICAgICAgIHJlbmRlclRhcmdldDpyZW5kZXJlci5jdXJyZW50UmVuZGVyVGFyZ2V0LFxuICAgICAgICBmaWx0ZXI6W10sXG4gICAgICAgIGJvdW5kczpudWxsXG4gICAgfSk7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlJlbmRlclRhcmdldFtdfVxuICAgICAqL1xuICAgIHRoaXMudGV4dHVyZVBvb2wgPSBbXTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBzaXplIG9mIHRoZSB0ZXh0dXJlXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlJlY3RhbmdsZX1cbiAgICAgKi9cbiAgICAvLyBsaXN0ZW4gZm9yIGNvbnRleHQgYW5kIHVwZGF0ZSBuZWNlc3NhcnkgYnVmZmVyc1xuICAgIC8vVE9ETyBtYWtlIHRoaXMgZHluYW1pYyFcbiAgICAvL1RPRE8gdGVzdCB0aGlzIG91dCBieSBmb3JjZXMgcG93ZXIgb2YgdHdvP1xuICAgIHRoaXMudGV4dHVyZVNpemUgPSBuZXcgbWF0aC5SZWN0YW5nbGUoMCwgMCwgcmVuZGVyZXIud2lkdGgsIHJlbmRlcmVyLmhlaWdodCk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgY3VycmVudCBmcmFtZVxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5SZWN0YW5nbGV9XG4gICAgICovXG4gICAgdGhpcy5jdXJyZW50RnJhbWUgPSBudWxsO1xufVxuXG5GaWx0ZXJNYW5hZ2VyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoV2ViR0xNYW5hZ2VyLnByb3RvdHlwZSk7XG5GaWx0ZXJNYW5hZ2VyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IEZpbHRlck1hbmFnZXI7XG5tb2R1bGUuZXhwb3J0cyA9IEZpbHRlck1hbmFnZXI7XG5cblxuLyoqXG4gKiBDYWxsZWQgd2hlbiB0aGVyZSBpcyBhIFdlYkdMIGNvbnRleHQgY2hhbmdlLlxuICpcbiAqL1xuRmlsdGVyTWFuYWdlci5wcm90b3R5cGUub25Db250ZXh0Q2hhbmdlID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLnRleHR1cmVQb29sLmxlbmd0aCA9IDA7XG5cbiAgICB2YXIgZ2wgPSB0aGlzLnJlbmRlcmVyLmdsO1xuICAgIHRoaXMucXVhZCA9IG5ldyBRdWFkKGdsKTtcbn07XG5cbi8qKlxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLldlYkdMUmVuZGVyZXJ9XG4gKiBAcGFyYW0gYnVmZmVyIHtBcnJheUJ1ZmZlcn1cbiAqL1xuRmlsdGVyTWFuYWdlci5wcm90b3R5cGUuc2V0RmlsdGVyU3RhY2sgPSBmdW5jdGlvbiAoIGZpbHRlclN0YWNrIClcbntcbiAgICB0aGlzLmZpbHRlclN0YWNrID0gZmlsdGVyU3RhY2s7XG59O1xuXG4vKipcbiAqIEFwcGxpZXMgdGhlIGZpbHRlciBhbmQgYWRkcyBpdCB0byB0aGUgY3VycmVudCBmaWx0ZXIgc3RhY2suXG4gKlxuICogQHBhcmFtIHRhcmdldCB7UElYSS5EaXNwbGF5T2JqZWN0fVxuICogQHBhcmFtIGZpbHRlcnMge1BJWEkuQWJzdHJhY3RGaWxlcltdfSB0aGUgZmlsdGVycyB0aGF0IHdpbGwgYmUgcHVzaGVkIHRvIHRoZSBjdXJyZW50IGZpbHRlciBzdGFja1xuICovXG5GaWx0ZXJNYW5hZ2VyLnByb3RvdHlwZS5wdXNoRmlsdGVyID0gZnVuY3Rpb24gKHRhcmdldCwgZmlsdGVycylcbntcbiAgICAvLyBnZXQgdGhlIGJvdW5kcyBvZiB0aGUgb2JqZWN0Li5cbiAgICAvLyBUT0RPIHJlcGxhY2UgY2xvbmUgd2l0aCBhIGNvcHkgdG8gc2F2ZSBvYmplY3QgY3JlYXRpb25cbiAgICB2YXIgYm91bmRzID0gdGFyZ2V0LmZpbHRlckFyZWEgPyB0YXJnZXQuZmlsdGVyQXJlYS5jbG9uZSgpIDogdGFyZ2V0LmdldEJvdW5kcygpO1xuXG4gICAgLy9ib3VuZHMgPSBib3VuZHMuY2xvbmUoKTtcblxuICAgIC8vIHJvdW5kIG9mZiB0aGUgcmVjdGFuZ2xlIHRvIGdldCBhIG5pY2Ugc21vb29vb29vdGggZmlsdGVyIDopXG4gICAgYm91bmRzLnggPSBib3VuZHMueCB8IDA7XG4gICAgYm91bmRzLnkgPSBib3VuZHMueSB8IDA7XG4gICAgYm91bmRzLndpZHRoID0gYm91bmRzLndpZHRoIHwgMDtcbiAgICBib3VuZHMuaGVpZ2h0ID0gYm91bmRzLmhlaWdodCB8IDA7XG5cblxuICAgIC8vIHBhZGRpbmchXG4gICAgdmFyIHBhZGRpbmcgPSBmaWx0ZXJzWzBdLnBhZGRpbmcgfCAwO1xuICAgIGJvdW5kcy54IC09IHBhZGRpbmc7XG4gICAgYm91bmRzLnkgLT0gcGFkZGluZztcbiAgICBib3VuZHMud2lkdGggKz0gcGFkZGluZyAqIDI7XG4gICAgYm91bmRzLmhlaWdodCArPSBwYWRkaW5nICogMjtcblxuXG4gICAgaWYodGhpcy5yZW5kZXJlci5jdXJyZW50UmVuZGVyVGFyZ2V0LnRyYW5zZm9ybSlcbiAgICB7XG4gICAgICAgIC8vVE9ETyB0aGlzIHdpbGwgYnJlYWsgaWYgdGhlIHJlbmRlclRleHR1cmUgdHJhbnNmb3JtIGlzIGFueXRoaW5nIG90aGVyIHRoYW4gYSB0cmFuc2xhdGlvbi5cbiAgICAgICAgLy9XaWxsIG5lZWQgdG8gdGFrZSB0aGUgZnVsbCBtYXRyaXggdHJhbnNmb3JtIGludG8gYWNvdW50Li5cbiAgICAgICAgdmFyIHRyYW5zZm9ybSA9IHRoaXMucmVuZGVyZXIuY3VycmVudFJlbmRlclRhcmdldC50cmFuc2Zvcm07XG5cbiAgICAgICAgYm91bmRzLnggKz0gdHJhbnNmb3JtLnR4O1xuICAgICAgICBib3VuZHMueSArPSB0cmFuc2Zvcm0udHk7XG5cbiAgICAgICAgdGhpcy5jYXBGaWx0ZXJBcmVhKCBib3VuZHMgKTtcblxuICAgICAgICBib3VuZHMueCAtPSB0cmFuc2Zvcm0udHg7XG4gICAgICAgIGJvdW5kcy55IC09IHRyYW5zZm9ybS50eTtcbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgIHRoaXMuY2FwRmlsdGVyQXJlYSggYm91bmRzICk7XG4gICAgfVxuXG4gICAgaWYoYm91bmRzLndpZHRoID4gMCAmJiBib3VuZHMuaGVpZ2h0ID4gMClcbiAgICB7XG4gICAgICAgIHRoaXMuY3VycmVudEZyYW1lID0gYm91bmRzO1xuXG4gICAgICAgIHZhciB0ZXh0dXJlID0gdGhpcy5nZXRSZW5kZXJUYXJnZXQoKTtcblxuICAgICAgICB0aGlzLnJlbmRlcmVyLnNldFJlbmRlclRhcmdldCh0ZXh0dXJlKTtcblxuICAgICAgICAvLyBjbGVhciB0aGUgdGV4dHVyZS4uXG4gICAgICAgIHRleHR1cmUuY2xlYXIoKTtcblxuICAgICAgICAvLyBUT0RPIGdldCByaWQgb2Ygb2JqZWN0IGNyZWF0aW9uIVxuICAgICAgICB0aGlzLmZpbHRlclN0YWNrLnB1c2goe1xuICAgICAgICAgICAgcmVuZGVyVGFyZ2V0OiB0ZXh0dXJlLFxuICAgICAgICAgICAgZmlsdGVyOiBmaWx0ZXJzXG4gICAgICAgIH0pO1xuXG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIC8vIHB1c2ggc29tdGhpbmcgb24gdG8gdGhlIHN0YWNrIHRoYXQgaXMgZW1wdHlcbiAgICAgICAgdGhpcy5maWx0ZXJTdGFjay5wdXNoKHtcbiAgICAgICAgICAgIHJlbmRlclRhcmdldDogbnVsbCxcbiAgICAgICAgICAgIGZpbHRlcjogZmlsdGVyc1xuICAgICAgICB9KTtcbiAgICB9XG59O1xuXG5cbi8qKlxuICogUmVtb3ZlcyB0aGUgbGFzdCBmaWx0ZXIgZnJvbSB0aGUgZmlsdGVyIHN0YWNrIGFuZCByZXR1cm5zIGl0LlxuICpcbiAqL1xuRmlsdGVyTWFuYWdlci5wcm90b3R5cGUucG9wRmlsdGVyID0gZnVuY3Rpb24gKClcbntcbiAgICB2YXIgZmlsdGVyRGF0YSA9IHRoaXMuZmlsdGVyU3RhY2sucG9wKCk7XG4gICAgdmFyIHByZXZpb3VzRmlsdGVyRGF0YSA9IHRoaXMuZmlsdGVyU3RhY2tbdGhpcy5maWx0ZXJTdGFjay5sZW5ndGgtMV07XG5cbiAgICB2YXIgaW5wdXQgPSBmaWx0ZXJEYXRhLnJlbmRlclRhcmdldDtcblxuICAgIC8vIGlmIHRoZSByZW5kZXJUYXJnZXQgaXMgbnVsbCB0aGVuIHdlIGRvbid0IGFwcGx5IHRoZSBmaWx0ZXIgYXMgaXRzIG9mZnNjcmVlblxuICAgIGlmKCFmaWx0ZXJEYXRhLnJlbmRlclRhcmdldClcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB2YXIgb3V0cHV0ID0gcHJldmlvdXNGaWx0ZXJEYXRhLnJlbmRlclRhcmdldDtcblxuICAgIC8vIHVzZSBwcm9ncmFtXG4gICAgdmFyIGdsID0gdGhpcy5yZW5kZXJlci5nbDtcblxuXG4gICAgdGhpcy5jdXJyZW50RnJhbWUgPSBpbnB1dC5mcmFtZTtcblxuICAgIHRoaXMucXVhZC5tYXAodGhpcy50ZXh0dXJlU2l6ZSwgaW5wdXQuZnJhbWUpO1xuXG5cbiAgICAvLyBUT0RPLi4gdGhpcyBwcm9iYWJseSBvbmx5IG5lZWRzIHRvIGJlIGRvbmUgb25jZSFcbiAgICBnbC5iaW5kQnVmZmVyKGdsLkFSUkFZX0JVRkZFUiwgdGhpcy5xdWFkLnZlcnRleEJ1ZmZlcik7XG4gICAgZ2wuYmluZEJ1ZmZlcihnbC5FTEVNRU5UX0FSUkFZX0JVRkZFUiwgdGhpcy5xdWFkLmluZGV4QnVmZmVyKTtcblxuICAgIHZhciBmaWx0ZXJzID0gZmlsdGVyRGF0YS5maWx0ZXI7XG5cbiAgICAvLyBhc3N1bWluZyBhbGwgZmlsdGVycyBmb2xsb3cgdGhlIGNvcnJlY3QgZm9ybWF0Pz9cbiAgICBnbC52ZXJ0ZXhBdHRyaWJQb2ludGVyKHRoaXMucmVuZGVyZXIuc2hhZGVyTWFuYWdlci5kZWZhdWx0U2hhZGVyLmF0dHJpYnV0ZXMuYVZlcnRleFBvc2l0aW9uLCAyLCBnbC5GTE9BVCwgZmFsc2UsIDAsIDApO1xuICAgIGdsLnZlcnRleEF0dHJpYlBvaW50ZXIodGhpcy5yZW5kZXJlci5zaGFkZXJNYW5hZ2VyLmRlZmF1bHRTaGFkZXIuYXR0cmlidXRlcy5hVGV4dHVyZUNvb3JkLCAyLCBnbC5GTE9BVCwgZmFsc2UsIDAsIDIgKiA0ICogNCk7XG4gICAgZ2wudmVydGV4QXR0cmliUG9pbnRlcih0aGlzLnJlbmRlcmVyLnNoYWRlck1hbmFnZXIuZGVmYXVsdFNoYWRlci5hdHRyaWJ1dGVzLmFDb2xvciwgNCwgZ2wuRkxPQVQsIGZhbHNlLCAwLCA0ICogNCAqIDQpO1xuXG4gICAgLy8gcmVzdG9yZSB0aGUgbm9ybWFsIGJsZW5kbW9kZSFcbiAgICB0aGlzLnJlbmRlcmVyLmJsZW5kTW9kZU1hbmFnZXIuc2V0QmxlbmRNb2RlKENPTlNULkJMRU5EX01PREVTLk5PUk1BTCk7XG5cbiAgICBpZiAoZmlsdGVycy5sZW5ndGggPT09IDEpXG4gICAge1xuICAgICAgICAvLyBUT0RPIChjZW5nbGVyKSAtIFRoZXJlIGhhcyB0byBiZSBhIGJldHRlciB3YXkgdGhlbiBzZXR0aW5nIHRoaXMgZWFjaCB0aW1lP1xuICAgICAgICBpZiAoZmlsdGVyc1swXS51bmlmb3Jtcy5kaW1lbnNpb25zKVxuICAgICAgICB7XG4gICAgICAgICAgICBmaWx0ZXJzWzBdLnVuaWZvcm1zLmRpbWVuc2lvbnMudmFsdWVbMF0gPSB0aGlzLnJlbmRlcmVyLndpZHRoO1xuICAgICAgICAgICAgZmlsdGVyc1swXS51bmlmb3Jtcy5kaW1lbnNpb25zLnZhbHVlWzFdID0gdGhpcy5yZW5kZXJlci5oZWlnaHQ7XG4gICAgICAgICAgICBmaWx0ZXJzWzBdLnVuaWZvcm1zLmRpbWVuc2lvbnMudmFsdWVbMl0gPSB0aGlzLnF1YWQudmVydGljZXNbMF07XG4gICAgICAgICAgICBmaWx0ZXJzWzBdLnVuaWZvcm1zLmRpbWVuc2lvbnMudmFsdWVbM10gPSB0aGlzLnF1YWQudmVydGljZXNbNV07XG4gICAgICAgIH1cblxuICAgICAgICBmaWx0ZXJzWzBdLmFwcGx5RmlsdGVyKCB0aGlzLnJlbmRlcmVyLCBpbnB1dCwgb3V0cHV0ICk7XG4gICAgICAgIHRoaXMucmV0dXJuUmVuZGVyVGFyZ2V0KCBpbnB1dCApO1xuXG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHZhciBmbGlwVGV4dHVyZSA9IGlucHV0O1xuICAgICAgICB2YXIgZmxvcFRleHR1cmUgPSB0aGlzLmdldFJlbmRlclRhcmdldCh0cnVlKTtcblxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGZpbHRlcnMubGVuZ3RoLTE7IGkrKylcbiAgICAgICAge1xuICAgICAgICAgICAgdmFyIGZpbHRlciA9IGZpbHRlcnNbaV07XG5cbiAgICAgICAgICAgIC8vIFRPRE8gKGNlbmdsZXIpIC0gVGhlcmUgaGFzIHRvIGJlIGEgYmV0dGVyIHdheSB0aGVuIHNldHRpbmcgdGhpcyBlYWNoIHRpbWU/XG4gICAgICAgICAgICBpZiAoZmlsdGVyLnVuaWZvcm1zLmRpbWVuc2lvbnMpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgZmlsdGVyLnVuaWZvcm1zLmRpbWVuc2lvbnMudmFsdWVbMF0gPSB0aGlzLnJlbmRlcmVyLndpZHRoO1xuICAgICAgICAgICAgICAgIGZpbHRlci51bmlmb3Jtcy5kaW1lbnNpb25zLnZhbHVlWzFdID0gdGhpcy5yZW5kZXJlci5oZWlnaHQ7XG4gICAgICAgICAgICAgICAgZmlsdGVyLnVuaWZvcm1zLmRpbWVuc2lvbnMudmFsdWVbMl0gPSB0aGlzLnF1YWQudmVydGljZXNbMF07XG4gICAgICAgICAgICAgICAgZmlsdGVyLnVuaWZvcm1zLmRpbWVuc2lvbnMudmFsdWVbM10gPSB0aGlzLnF1YWQudmVydGljZXNbNV07XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGZpbHRlci5hcHBseUZpbHRlciggdGhpcy5yZW5kZXJlciwgZmxpcFRleHR1cmUsIGZsb3BUZXh0dXJlICk7XG5cbiAgICAgICAgICAgIHZhciB0ZW1wID0gZmxpcFRleHR1cmU7XG4gICAgICAgICAgICBmbGlwVGV4dHVyZSA9IGZsb3BUZXh0dXJlO1xuICAgICAgICAgICAgZmxvcFRleHR1cmUgPSB0ZW1wO1xuICAgICAgICB9XG5cbiAgICAgICAgZmlsdGVyc1tmaWx0ZXJzLmxlbmd0aC0xXS5hcHBseUZpbHRlciggdGhpcy5yZW5kZXJlciwgZmxpcFRleHR1cmUsIG91dHB1dCApO1xuXG4gICAgICAgIHRoaXMucmV0dXJuUmVuZGVyVGFyZ2V0KCBmbGlwVGV4dHVyZSApO1xuICAgICAgICB0aGlzLnJldHVyblJlbmRlclRhcmdldCggZmxvcFRleHR1cmUgKTtcbiAgICB9XG5cbiAgICByZXR1cm4gZmlsdGVyRGF0YS5maWx0ZXI7XG59O1xuXG4vKipcbiAqIEdyYWJzIGFuIHJlbmRlciB0YXJnZXQgZnJvbSB0aGUgaW50ZXJuYWwgcG9vbFxuICpcbiAqIEBwYXJhbSBjbGVhciB7Ym9vbGVhbn0gV2hldGhlciBvciBub3Qgd2UgbmVlZCB0byBjbGVhciB0aGUgUmVuZGVyVGFyZ2V0XG4gKiBAcmV0dXJuIHtSZW5kZXJUYXJnZXR9XG4gKi9cbkZpbHRlck1hbmFnZXIucHJvdG90eXBlLmdldFJlbmRlclRhcmdldCA9IGZ1bmN0aW9uICggY2xlYXIgKVxue1xuICAgIHZhciByZW5kZXJUYXJnZXQgPSB0aGlzLnRleHR1cmVQb29sLnBvcCgpIHx8IG5ldyBSZW5kZXJUYXJnZXQodGhpcy5yZW5kZXJlci5nbCwgdGhpcy50ZXh0dXJlU2l6ZS53aWR0aCwgdGhpcy50ZXh0dXJlU2l6ZS5oZWlnaHQsIENPTlNULlNDQUxFX01PREVTLkxJTkVBUiwgdGhpcy5yZW5kZXJlci5yZXNvbHV0aW9uICogQ09OU1QuRklMVEVSX1JFU09MVVRJT04pO1xuICAgIHJlbmRlclRhcmdldC5mcmFtZSA9IHRoaXMuY3VycmVudEZyYW1lO1xuXG4gICAgaWYgKGNsZWFyKVxuICAgIHtcbiAgICAgICAgcmVuZGVyVGFyZ2V0LmNsZWFyKHRydWUpO1xuICAgIH1cblxuICAgIHJldHVybiByZW5kZXJUYXJnZXQ7XG59O1xuXG4vKlxuICogUmV0dXJucyBhIFJlbmRlclRhcmdldCB0byB0aGUgaW50ZXJuYWwgcG9vbFxuICogQHBhcmFtIHJlbmRlclRhcmdldCB7UmVuZGVyVGFyZ2V0fSBUaGUgUmVuZGVyVGFyZ2V0IHdlIHdhbnQgdG8gcmV0dXJuIHRvIHRoZSBwb29sXG4gKi9cbkZpbHRlck1hbmFnZXIucHJvdG90eXBlLnJldHVyblJlbmRlclRhcmdldCA9IGZ1bmN0aW9uIChyZW5kZXJUYXJnZXQpXG57XG4gICAgdGhpcy50ZXh0dXJlUG9vbC5wdXNoKCByZW5kZXJUYXJnZXQgKTtcbn07XG5cbi8qXG4gKiBBcHBsaWVzIHRoZSBmaWx0ZXJcbiAqIEBwYXJhbSBzaGFkZXIge1NoYWRlcn0gVGhlIHNoYWRlciB0byB1cGxvYWRcbiAqIEBwYXJhbSBpbnB1dFRhcmdldCB7UmVuZGVyVGFyZ2V0fVxuICogQHBhcmFtIG91dHB1dFRhcmdldCB7UmVuZGVyVGFyZ2V0fVxuICogQHBhcmFtIGNsZWFyIHtib29sZWFufSBXaGV0aGVyIG9yIG5vdCB3ZSB3YW50IHRvIGNsZWFyIHRoZSBvdXRwdXRUYXJnZXRcbiAqL1xuRmlsdGVyTWFuYWdlci5wcm90b3R5cGUuYXBwbHlGaWx0ZXIgPSBmdW5jdGlvbiAoc2hhZGVyLCBpbnB1dFRhcmdldCwgb3V0cHV0VGFyZ2V0LCBjbGVhcilcbntcbiAgICB2YXIgZ2wgPSB0aGlzLnJlbmRlcmVyLmdsO1xuXG4gICAgdGhpcy5yZW5kZXJlci5zZXRSZW5kZXJUYXJnZXQob3V0cHV0VGFyZ2V0KTtcblxuICAgIGlmIChjbGVhcilcbiAgICB7XG4gICAgICAgIG91dHB1dFRhcmdldC5jbGVhcigpO1xuICAgIH1cblxuICAgIC8vIHNldCB0aGUgc2hhZGVyXG4gICAgdGhpcy5yZW5kZXJlci5zaGFkZXJNYW5hZ2VyLnNldFNoYWRlcihzaGFkZXIpO1xuXG4gICAgLy8gVE9ETyAoY2VuZ2xlcikgLSBDYW4gdGhpcyBiZSBjYWNoZWQgYW5kIG5vdCBgdG9BcnJheWBlZCBlYWNoIGZyYW1lP1xuICAgIHNoYWRlci51bmlmb3Jtcy5wcm9qZWN0aW9uTWF0cml4LnZhbHVlID0gdGhpcy5yZW5kZXJlci5jdXJyZW50UmVuZGVyVGFyZ2V0LnByb2plY3Rpb25NYXRyaXgudG9BcnJheSh0cnVlKTtcblxuICAgIC8vVE9ETyBjYW4gdGhpcyBiZSBvcHRpbWlzZWQ/XG4gICAgc2hhZGVyLnN5bmNVbmlmb3JtcygpO1xuLypcbiAgICBnbC52ZXJ0ZXhBdHRyaWJQb2ludGVyKHNoYWRlci5hdHRyaWJ1dGVzLmFWZXJ0ZXhQb3NpdGlvbiwgMiwgZ2wuRkxPQVQsIGZhbHNlLCAwLCAwKTtcbiAgICBnbC52ZXJ0ZXhBdHRyaWJQb2ludGVyKHNoYWRlci5hdHRyaWJ1dGVzLmFUZXh0dXJlQ29vcmQsIDIsIGdsLkZMT0FULCBmYWxzZSwgMCwgMiAqIDQgKiA0KTtcbiAgICBnbC52ZXJ0ZXhBdHRyaWJQb2ludGVyKHNoYWRlci5hdHRyaWJ1dGVzLmFDb2xvciwgNCwgZ2wuRkxPQVQsIGZhbHNlLCAwLCA0ICogNCAqIDQpO1xuKi9cblxuICAgIGdsLmFjdGl2ZVRleHR1cmUoZ2wuVEVYVFVSRTApO1xuICAgIGdsLmJpbmRUZXh0dXJlKGdsLlRFWFRVUkVfMkQsIGlucHV0VGFyZ2V0LnRleHR1cmUpO1xuXG4gICAgZ2wuZHJhd0VsZW1lbnRzKGdsLlRSSUFOR0xFUywgNiwgZ2wuVU5TSUdORURfU0hPUlQsIDAgKTtcbiAgICB0aGlzLnJlbmRlcmVyLmRyYXdDb3VudCsrO1xufTtcblxuLypcbiAqIENhbGN1bGF0ZXMgdGhlIG1hcHBlZCBtYXRyaXhcbiAqIEBwYXJhbSBmaWx0ZXJBcmVhIHtSZWN0YW5nbGV9IFRoZSBmaWx0ZXIgYXJlYVxuICogQHBhcmFtIHNwcml0ZSB7U3ByaXRlfSB0aGUgdGFyZ2V0IHNwcml0ZVxuICogQHBhcmFtIG91dHB1dE1hdHJpeCB7TWF0cml4fSBAYWx2aW5cbiAqL1xuLy8gVE9ETyBwbGF5aW5nIGFyb3VuZCBoZXJlLi4gdGhpcyBpcyB0ZW1wb3JhcnkgLSAod2lsbCBlbmQgdXAgaW4gdGhlIHNoYWRlcilcbkZpbHRlck1hbmFnZXIucHJvdG90eXBlLmNhbGN1bGF0ZU1hcHBlZE1hdHJpeCA9IGZ1bmN0aW9uIChmaWx0ZXJBcmVhLCBzcHJpdGUsIG91dHB1dE1hdHJpeClcbntcbiAgICB2YXIgd29ybGRUcmFuc2Zvcm0gPSBzcHJpdGUud29ybGRUcmFuc2Zvcm0uY29weShtYXRoLk1hdHJpeC5URU1QX01BVFJJWCksXG4gICAgdGV4dHVyZSA9IHNwcml0ZS5fdGV4dHVyZS5iYXNlVGV4dHVyZTtcblxuICAgIHZhciBtYXBwZWRNYXRyaXggPSBvdXRwdXRNYXRyaXguaWRlbnRpdHkoKTtcblxuICAgIC8vIHNjYWxlLi5cbiAgICB2YXIgcmF0aW8gPSB0aGlzLnRleHR1cmVTaXplLmhlaWdodCAvIHRoaXMudGV4dHVyZVNpemUud2lkdGg7XG5cbiAgICBtYXBwZWRNYXRyaXgudHJhbnNsYXRlKGZpbHRlckFyZWEueCAvIHRoaXMudGV4dHVyZVNpemUud2lkdGgsIGZpbHRlckFyZWEueSAvIHRoaXMudGV4dHVyZVNpemUuaGVpZ2h0ICk7XG5cbiAgICBtYXBwZWRNYXRyaXguc2NhbGUoMSAsIHJhdGlvKTtcblxuICAgIHZhciB0cmFuc2xhdGVTY2FsZVggPSAodGhpcy50ZXh0dXJlU2l6ZS53aWR0aCAvIHRleHR1cmUud2lkdGgpO1xuICAgIHZhciB0cmFuc2xhdGVTY2FsZVkgPSAodGhpcy50ZXh0dXJlU2l6ZS5oZWlnaHQgLyB0ZXh0dXJlLmhlaWdodCk7XG5cbiAgICB3b3JsZFRyYW5zZm9ybS50eCAvPSB0ZXh0dXJlLndpZHRoICogdHJhbnNsYXRlU2NhbGVYO1xuICAgIHdvcmxkVHJhbnNmb3JtLnR5IC89IHRleHR1cmUud2lkdGggKiB0cmFuc2xhdGVTY2FsZVg7XG5cbiAgICB3b3JsZFRyYW5zZm9ybS5pbnZlcnQoKTtcblxuICAgIG1hcHBlZE1hdHJpeC5wcmVwZW5kKHdvcmxkVHJhbnNmb3JtKTtcblxuICAgIC8vIGFwcGx5IGludmVyc2Ugc2NhbGUuLlxuICAgIG1hcHBlZE1hdHJpeC5zY2FsZSgxICwgMS9yYXRpbyk7XG5cbiAgICBtYXBwZWRNYXRyaXguc2NhbGUoIHRyYW5zbGF0ZVNjYWxlWCAsIHRyYW5zbGF0ZVNjYWxlWSApO1xuXG4gICAgbWFwcGVkTWF0cml4LnRyYW5zbGF0ZShzcHJpdGUuYW5jaG9yLngsIHNwcml0ZS5hbmNob3IueSk7XG5cbiAgICByZXR1cm4gbWFwcGVkTWF0cml4O1xuXG4gICAgLy8gS2VlcGluZyB0aGUgb3JnaW5hbCBhcyBhIHJlbWluZGVyIHRvIG1lIG9uIGhvdyB0aGlzIHdvcmtzIVxuICAgIC8vXG4gICAgLy8gdmFyIG0gPSBuZXcgbWF0aC5NYXRyaXgoKTtcblxuICAgIC8vIC8vIHNjYWxlLi5cbiAgICAvLyB2YXIgcmF0aW8gPSB0aGlzLnRleHR1cmVTaXplLmhlaWdodCAvIHRoaXMudGV4dHVyZVNpemUud2lkdGg7XG5cbiAgICAvLyBtLnRyYW5zbGF0ZShmaWx0ZXJBcmVhLnggLyB0aGlzLnRleHR1cmVTaXplLndpZHRoLCBmaWx0ZXJBcmVhLnkgLyB0aGlzLnRleHR1cmVTaXplLmhlaWdodCk7XG5cblxuICAgIC8vIG0uc2NhbGUoMSAsIHJhdGlvKTtcblxuXG4gICAgLy8gdmFyIHRyYW5zZm9ybSA9IHd0LmNsb25lKCk7XG5cbiAgICAvLyB2YXIgdHJhbnNsYXRlU2NhbGVYID0gKHRoaXMudGV4dHVyZVNpemUud2lkdGggLyA2MjApO1xuICAgIC8vIHZhciB0cmFuc2xhdGVTY2FsZVkgPSAodGhpcy50ZXh0dXJlU2l6ZS5oZWlnaHQgLyAzODApO1xuXG4gICAgLy8gdHJhbnNmb3JtLnR4IC89IDYyMCAqIHRyYW5zbGF0ZVNjYWxlWDtcbiAgICAvLyB0cmFuc2Zvcm0udHkgLz0gNjIwICogdHJhbnNsYXRlU2NhbGVYO1xuXG4gICAgLy8gdHJhbnNmb3JtLmludmVydCgpO1xuXG4gICAgLy8gdHJhbnNmb3JtLmFwcGVuZChtKTtcblxuICAgIC8vIC8vIGFwcGx5IGludmVyc2Ugc2NhbGUuLlxuICAgIC8vIHRyYW5zZm9ybS5zY2FsZSgxICwgMS9yYXRpbyk7XG5cbiAgICAvLyB0cmFuc2Zvcm0uc2NhbGUoIHRyYW5zbGF0ZVNjYWxlWCAsIHRyYW5zbGF0ZVNjYWxlWSApO1xuXG4gICAgLy8gcmV0dXJuIHRyYW5zZm9ybTtcbn07XG5cbi8qXG4gKiBDb25zdHJhaW5zIHRoZSBmaWx0ZXIgYXJlYSB0byB0aGUgdGV4dHVyZSBzaXplXG4gKiBAcGFyYW0gZmlsdGVyQXJlYSB7UmVjdGFuZ2xlfSBUaGUgZmlsdGVyIGFyZWEgd2Ugd2FudCB0byBjYXBcbiAqL1xuRmlsdGVyTWFuYWdlci5wcm90b3R5cGUuY2FwRmlsdGVyQXJlYSA9IGZ1bmN0aW9uIChmaWx0ZXJBcmVhKVxue1xuICAgIGlmIChmaWx0ZXJBcmVhLnggPCAwKVxuICAgIHtcbiAgICAgICAgZmlsdGVyQXJlYS53aWR0aCArPSBmaWx0ZXJBcmVhLng7XG4gICAgICAgIGZpbHRlckFyZWEueCA9IDA7XG4gICAgfVxuXG4gICAgaWYgKGZpbHRlckFyZWEueSA8IDApXG4gICAge1xuICAgICAgICBmaWx0ZXJBcmVhLmhlaWdodCArPSBmaWx0ZXJBcmVhLnk7XG4gICAgICAgIGZpbHRlckFyZWEueSA9IDA7XG4gICAgfVxuXG4gICAgaWYgKCBmaWx0ZXJBcmVhLnggKyBmaWx0ZXJBcmVhLndpZHRoID4gdGhpcy50ZXh0dXJlU2l6ZS53aWR0aCApXG4gICAge1xuICAgICAgICBmaWx0ZXJBcmVhLndpZHRoID0gdGhpcy50ZXh0dXJlU2l6ZS53aWR0aCAtIGZpbHRlckFyZWEueDtcbiAgICB9XG5cbiAgICBpZiAoIGZpbHRlckFyZWEueSArIGZpbHRlckFyZWEuaGVpZ2h0ID4gdGhpcy50ZXh0dXJlU2l6ZS5oZWlnaHQgKVxuICAgIHtcbiAgICAgICAgZmlsdGVyQXJlYS5oZWlnaHQgPSB0aGlzLnRleHR1cmVTaXplLmhlaWdodCAtIGZpbHRlckFyZWEueTtcbiAgICB9XG59O1xuXG4vKlxuICogUmVzaXplcyBhbGwgdGhlIHJlbmRlciB0YXJnZXRzIGluIHRoZSBwb29sXG4gKiBAcGFyYW0gd2lkdGgge251bWJlcn0gdGhlIG5ldyB3aWR0aFxuICogQHBhcmFtIGhlaWdodCB7bnVtYmVyfSB0aGUgbmV3IGhlaWdodFxuICovXG5GaWx0ZXJNYW5hZ2VyLnByb3RvdHlwZS5yZXNpemUgPSBmdW5jdGlvbiAoIHdpZHRoLCBoZWlnaHQgKVxue1xuICAgIHRoaXMudGV4dHVyZVNpemUud2lkdGggPSB3aWR0aDtcbiAgICB0aGlzLnRleHR1cmVTaXplLmhlaWdodCA9IGhlaWdodDtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy50ZXh0dXJlUG9vbC5sZW5ndGg7IGkrKylcbiAgICB7XG4gICAgICAgIHRoaXMudGV4dHVyZVBvb2xbaV0ucmVzaXplKCB3aWR0aCwgaGVpZ2h0ICk7XG4gICAgfVxufTtcblxuLyoqXG4gKiBEZXN0cm95cyB0aGUgZmlsdGVyIGFuZCByZW1vdmVzIGl0IGZyb20gdGhlIGZpbHRlciBzdGFjay5cbiAqXG4gKi9cbkZpbHRlck1hbmFnZXIucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoKVxue1xuICAgIHRoaXMucXVhZC5kZXN0cm95KCk7XG4gICAgXG4gICAgV2ViR0xNYW5hZ2VyLnByb3RvdHlwZS5kZXN0cm95LmNhbGwodGhpcyk7XG4gICAgXG4gICAgdGhpcy5maWx0ZXJTdGFjayA9IG51bGw7XG4gICAgdGhpcy5vZmZzZXRZID0gMDtcblxuICAgIC8vIGRlc3Ryb3kgdGV4dHVyZXNcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMudGV4dHVyZVBvb2wubGVuZ3RoOyBpKyspXG4gICAge1xuICAgICAgICB0aGlzLnRleHR1cmVQb29sW2ldLmRlc3Ryb3koKTtcbiAgICB9XG5cbiAgICB0aGlzLnRleHR1cmVQb29sID0gbnVsbDtcbn07XG4iLCJ2YXIgV2ViR0xNYW5hZ2VyID0gcmVxdWlyZSgnLi9XZWJHTE1hbmFnZXInKSxcbiAgICBBbHBoYU1hc2tGaWx0ZXIgPSByZXF1aXJlKCcuLi9maWx0ZXJzL1Nwcml0ZU1hc2tGaWx0ZXInKTtcblxuLyoqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcn0gVGhlIHJlbmRlcmVyIHRoaXMgbWFuYWdlciB3b3JrcyBmb3IuXG4gKi9cbmZ1bmN0aW9uIE1hc2tNYW5hZ2VyKHJlbmRlcmVyKVxue1xuICAgIFdlYkdMTWFuYWdlci5jYWxsKHRoaXMsIHJlbmRlcmVyKTtcblxuICAgIHRoaXMuc3RlbmNpbFN0YWNrID0gW107XG4gICAgdGhpcy5yZXZlcnNlID0gdHJ1ZTtcbiAgICB0aGlzLmNvdW50ID0gMDtcblxuICAgIHRoaXMuYWxwaGFNYXNrUG9vbCA9IFtdO1xufVxuXG5NYXNrTWFuYWdlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFdlYkdMTWFuYWdlci5wcm90b3R5cGUpO1xuTWFza01hbmFnZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gTWFza01hbmFnZXI7XG5tb2R1bGUuZXhwb3J0cyA9IE1hc2tNYW5hZ2VyO1xuXG4vKipcbiAqIEFwcGxpZXMgdGhlIE1hc2sgYW5kIGFkZHMgaXQgdG8gdGhlIGN1cnJlbnQgZmlsdGVyIHN0YWNrLlxuICpcbiAqIEBwYXJhbSBncmFwaGljcyB7UElYSS5HcmFwaGljc31cbiAqIEBwYXJhbSB3ZWJHTERhdGEge2FueVtdfVxuICovXG5NYXNrTWFuYWdlci5wcm90b3R5cGUucHVzaE1hc2sgPSBmdW5jdGlvbiAodGFyZ2V0LCBtYXNrRGF0YSlcbntcbiAgICBpZiAobWFza0RhdGEudGV4dHVyZSlcbiAgICB7XG4gICAgICAgIHRoaXMucHVzaFNwcml0ZU1hc2sodGFyZ2V0LCBtYXNrRGF0YSk7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHRoaXMucHVzaFN0ZW5jaWxNYXNrKHRhcmdldCwgbWFza0RhdGEpO1xuICAgIH1cblxufTtcblxuLyoqXG4gKiBSZW1vdmVzIHRoZSBsYXN0IG1hc2sgZnJvbSB0aGUgbWFzayBzdGFjayBhbmQgZG9lc24ndCByZXR1cm4gaXQuXG4gKlxuICogQHBhcmFtIHRhcmdldCB7UElYSS5SZW5kZXJUYXJnZXR9XG4gKiBAcGFyYW0gbWFza0RhdGEge2FueVtdfVxuICovXG5NYXNrTWFuYWdlci5wcm90b3R5cGUucG9wTWFzayA9IGZ1bmN0aW9uICh0YXJnZXQsIG1hc2tEYXRhKVxue1xuICAgIGlmIChtYXNrRGF0YS50ZXh0dXJlKVxuICAgIHtcbiAgICAgICAgdGhpcy5wb3BTcHJpdGVNYXNrKHRhcmdldCwgbWFza0RhdGEpO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICB0aGlzLnBvcFN0ZW5jaWxNYXNrKHRhcmdldCwgbWFza0RhdGEpO1xuICAgIH1cbn07XG5cbi8qKlxuICogQXBwbGllcyB0aGUgTWFzayBhbmQgYWRkcyBpdCB0byB0aGUgY3VycmVudCBmaWx0ZXIgc3RhY2suXG4gKlxuICogQHBhcmFtIHRhcmdldCB7UElYSS5SZW5kZXJUYXJnZXR9XG4gKiBAcGFyYW0gbWFza0RhdGEge2FueVtdfVxuICovXG5NYXNrTWFuYWdlci5wcm90b3R5cGUucHVzaFNwcml0ZU1hc2sgPSBmdW5jdGlvbiAodGFyZ2V0LCBtYXNrRGF0YSlcbntcbiAgICB2YXIgYWxwaGFNYXNrRmlsdGVyID0gdGhpcy5hbHBoYU1hc2tQb29sLnBvcCgpO1xuXG4gICAgaWYgKCFhbHBoYU1hc2tGaWx0ZXIpXG4gICAge1xuICAgICAgICBhbHBoYU1hc2tGaWx0ZXIgPSBbbmV3IEFscGhhTWFza0ZpbHRlcihtYXNrRGF0YSldO1xuICAgIH1cblxuICAgIGFscGhhTWFza0ZpbHRlclswXS5tYXNrU3ByaXRlID0gbWFza0RhdGE7XG4gICAgdGhpcy5yZW5kZXJlci5maWx0ZXJNYW5hZ2VyLnB1c2hGaWx0ZXIodGFyZ2V0LCBhbHBoYU1hc2tGaWx0ZXIpO1xufTtcblxuLyoqXG4gKiBSZW1vdmVzIHRoZSBsYXN0IGZpbHRlciBmcm9tIHRoZSBmaWx0ZXIgc3RhY2sgYW5kIGRvZXNuJ3QgcmV0dXJuIGl0LlxuICpcbiAqL1xuTWFza01hbmFnZXIucHJvdG90eXBlLnBvcFNwcml0ZU1hc2sgPSBmdW5jdGlvbiAoKVxue1xuICAgIHZhciBmaWx0ZXJzID0gdGhpcy5yZW5kZXJlci5maWx0ZXJNYW5hZ2VyLnBvcEZpbHRlcigpO1xuXG4gICAgdGhpcy5hbHBoYU1hc2tQb29sLnB1c2goZmlsdGVycyk7XG59O1xuXG5cbi8qKlxuICogQXBwbGllcyB0aGUgTWFzayBhbmQgYWRkcyBpdCB0byB0aGUgY3VycmVudCBmaWx0ZXIgc3RhY2suXG4gKlxuICogQHBhcmFtIHRhcmdldCB7UElYSS5SZW5kZXJUYXJnZXR9XG4gKiBAcGFyYW0gbWFza0RhdGEge2FueVtdfVxuICovXG5NYXNrTWFuYWdlci5wcm90b3R5cGUucHVzaFN0ZW5jaWxNYXNrID0gZnVuY3Rpb24gKHRhcmdldCwgbWFza0RhdGEpXG57XG4gICAgdGhpcy5yZW5kZXJlci5zdGVuY2lsTWFuYWdlci5wdXNoTWFzayhtYXNrRGF0YSk7XG59O1xuXG4vKipcbiAqIFJlbW92ZXMgdGhlIGxhc3QgZmlsdGVyIGZyb20gdGhlIGZpbHRlciBzdGFjayBhbmQgZG9lc24ndCByZXR1cm4gaXQuXG4gKlxuICogQHBhcmFtIHRhcmdldCB7UElYSS5SZW5kZXJUYXJnZXR9XG4gKiBAcGFyYW0gbWFza0RhdGEge2FueVtdfVxuICovXG5NYXNrTWFuYWdlci5wcm90b3R5cGUucG9wU3RlbmNpbE1hc2sgPSBmdW5jdGlvbiAodGFyZ2V0LCBtYXNrRGF0YSlcbntcbiAgICB0aGlzLnJlbmRlcmVyLnN0ZW5jaWxNYW5hZ2VyLnBvcE1hc2sobWFza0RhdGEpO1xufTtcblxuIiwidmFyIFdlYkdMTWFuYWdlciA9IHJlcXVpcmUoJy4vV2ViR0xNYW5hZ2VyJyksXG4gICAgVGV4dHVyZVNoYWRlciA9IHJlcXVpcmUoJy4uL3NoYWRlcnMvVGV4dHVyZVNoYWRlcicpLFxuICAgIENvbXBsZXhQcmltaXRpdmVTaGFkZXIgPSByZXF1aXJlKCcuLi9zaGFkZXJzL0NvbXBsZXhQcmltaXRpdmVTaGFkZXInKSxcbiAgICBQcmltaXRpdmVTaGFkZXIgPSByZXF1aXJlKCcuLi9zaGFkZXJzL1ByaW1pdGl2ZVNoYWRlcicpLFxuICAgIHV0aWxzID0gcmVxdWlyZSgnLi4vLi4vLi4vdXRpbHMnKTtcblxuLyoqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAZXh0ZW5kcyBQSVhJLldlYkdMTWFuYWdlclxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLldlYkdMUmVuZGVyZXJ9IFRoZSByZW5kZXJlciB0aGlzIG1hbmFnZXIgd29ya3MgZm9yLlxuICovXG5mdW5jdGlvbiBTaGFkZXJNYW5hZ2VyKHJlbmRlcmVyKVxue1xuICAgIFdlYkdMTWFuYWdlci5jYWxsKHRoaXMsIHJlbmRlcmVyKTtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLm1heEF0dGlicyA9IDEwO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7YW55W119XG4gICAgICovXG4gICAgdGhpcy5hdHRyaWJTdGF0ZSA9IFtdO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7YW55W119XG4gICAgICovXG4gICAgdGhpcy50ZW1wQXR0cmliU3RhdGUgPSBbXTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5tYXhBdHRpYnM7IGkrKylcbiAgICB7XG4gICAgICAgIHRoaXMuYXR0cmliU3RhdGVbaV0gPSBmYWxzZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHthbnlbXX1cbiAgICAgKi9cbiAgICB0aGlzLnN0YWNrID0gW107XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9jdXJyZW50SWQgPSAtMTtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge1BJWEkuU2hhZGVyfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5jdXJyZW50U2hhZGVyID0gbnVsbDtcblxuLy8gICAgdGhpcy5pbml0UGx1Z2lucygpO1xufVxuXG5TaGFkZXJNYW5hZ2VyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoV2ViR0xNYW5hZ2VyLnByb3RvdHlwZSk7XG5TaGFkZXJNYW5hZ2VyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFNoYWRlck1hbmFnZXI7XG51dGlscy5wbHVnaW5UYXJnZXQubWl4aW4oU2hhZGVyTWFuYWdlcik7XG5cbm1vZHVsZS5leHBvcnRzID0gU2hhZGVyTWFuYWdlcjtcblxuLyoqXG4gKiBDYWxsZWQgd2hlbiB0aGVyZSBpcyBhIFdlYkdMIGNvbnRleHQgY2hhbmdlLlxuICpcbiAqL1xuU2hhZGVyTWFuYWdlci5wcm90b3R5cGUub25Db250ZXh0Q2hhbmdlID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLmluaXRQbHVnaW5zKCk7XG5cbiAgICB2YXIgZ2wgPSB0aGlzLnJlbmRlcmVyLmdsO1xuXG4gICAgLy8gZ2V0IHRoZSBtYXhpbXVtIG51bWJlciBvZiBhdHRyaWJ1dGUgY29ycmVjdGx5IGFzIHRoaXMgdGVuZHMgdG8gdmFyeVxuICAgIHRoaXMubWF4QXR0aWJzID0gZ2wuZ2V0UGFyYW1ldGVyKGdsLk1BWF9WRVJURVhfQVRUUklCUyk7XG5cbiAgICB0aGlzLmF0dHJpYlN0YXRlID0gW107XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMubWF4QXR0aWJzOyBpKyspXG4gICAge1xuICAgICAgICB0aGlzLmF0dHJpYlN0YXRlW2ldID0gZmFsc2U7XG4gICAgfVxuXG4gICAgLy8gVE9ETyAtIFdoeSBhcmUgdGhlc2Ugbm90IHBsdWdpbnM/IFdlIGNhbid0IGRlY291cGxlIHByaW1pdGl2ZXMgdW5sZXNzIHRoZXkgYXJlLi4uLlxuICAgIHRoaXMuZGVmYXVsdFNoYWRlciA9IG5ldyBUZXh0dXJlU2hhZGVyKHRoaXMpO1xuICAgIHRoaXMucHJpbWl0aXZlU2hhZGVyID0gbmV3IFByaW1pdGl2ZVNoYWRlcih0aGlzKTtcbiAgICB0aGlzLmNvbXBsZXhQcmltaXRpdmVTaGFkZXIgPSBuZXcgQ29tcGxleFByaW1pdGl2ZVNoYWRlcih0aGlzKTtcbn07XG5cbi8qKlxuICogVGFrZXMgdGhlIGF0dHJpYnV0ZXMgZ2l2ZW4gaW4gcGFyYW1ldGVycyBhbmQgdXBsb2FkcyB0aGVtLlxuICpcbiAqIEBwYXJhbSBhdHRyaWJzIHthbnlbXX0gYXR0cmlic1xuICovXG5TaGFkZXJNYW5hZ2VyLnByb3RvdHlwZS5zZXRBdHRyaWJzID0gZnVuY3Rpb24gKGF0dHJpYnMpXG57XG4gICAgLy8gcmVzZXQgdGVtcCBzdGF0ZVxuICAgIHZhciBpO1xuXG4gICAgZm9yIChpID0gMDsgaSA8IHRoaXMudGVtcEF0dHJpYlN0YXRlLmxlbmd0aDsgaSsrKVxuICAgIHtcbiAgICAgICAgdGhpcy50ZW1wQXR0cmliU3RhdGVbaV0gPSBmYWxzZTtcbiAgICB9XG5cbiAgICAvLyBzZXQgdGhlIG5ldyBhdHRyaWJzXG4gICAgZm9yICh2YXIgYSBpbiBhdHRyaWJzKVxuICAgIHtcbiAgICAgICAgdGhpcy50ZW1wQXR0cmliU3RhdGVbYXR0cmlic1thXV0gPSB0cnVlO1xuICAgIH1cblxuICAgIHZhciBnbCA9IHRoaXMucmVuZGVyZXIuZ2w7XG5cbiAgICBmb3IgKGkgPSAwOyBpIDwgdGhpcy5hdHRyaWJTdGF0ZS5sZW5ndGg7IGkrKylcbiAgICB7XG4gICAgICAgIGlmICh0aGlzLmF0dHJpYlN0YXRlW2ldICE9PSB0aGlzLnRlbXBBdHRyaWJTdGF0ZVtpXSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5hdHRyaWJTdGF0ZVtpXSA9IHRoaXMudGVtcEF0dHJpYlN0YXRlW2ldO1xuXG4gICAgICAgICAgICBpZiAodGhpcy5hdHRyaWJTdGF0ZVtpXSlcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBnbC5lbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBnbC5kaXNhYmxlVmVydGV4QXR0cmliQXJyYXkoaSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG59O1xuXG4vKipcbiAqIFNldHMgdGhlIGN1cnJlbnQgc2hhZGVyLlxuICpcbiAqIEBwYXJhbSBzaGFkZXIge1BJWEkuU2hhZGVyfSB0aGUgc2hhZGVyIHRvIHVwbG9hZFxuICovXG5TaGFkZXJNYW5hZ2VyLnByb3RvdHlwZS5zZXRTaGFkZXIgPSBmdW5jdGlvbiAoc2hhZGVyKVxue1xuICAgIHJldHVybjtcbiAgICBpZiAodGhpcy5fY3VycmVudElkID09PSBzaGFkZXIudWlkKVxuICAgIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHRoaXMuX2N1cnJlbnRJZCA9IHNoYWRlci51aWQ7XG5cbiAgICB0aGlzLmN1cnJlbnRTaGFkZXIgPSBzaGFkZXI7XG5cbiAgICB0aGlzLnJlbmRlcmVyLmdsLnVzZVByb2dyYW0oc2hhZGVyLnByb2dyYW0pO1xuICAgIHRoaXMuc2V0QXR0cmlicyhzaGFkZXIuYXR0cmlidXRlcyk7XG5cbiAgICByZXR1cm4gdHJ1ZTtcbn07XG5cbi8qKlxuICogRGVzdHJveXMgdGhpcyBvYmplY3QuXG4gKlxuICovXG5TaGFkZXJNYW5hZ2VyLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLnByaW1pdGl2ZVNoYWRlci5kZXN0cm95KCk7XG4gICAgdGhpcy5jb21wbGV4UHJpbWl0aXZlU2hhZGVyLmRlc3Ryb3koKTtcbiAgICBXZWJHTE1hbmFnZXIucHJvdG90eXBlLmRlc3Ryb3kuY2FsbCh0aGlzKTtcblxuICAgIHRoaXMuZGVzdHJveVBsdWdpbnMoKTtcblxuICAgIHRoaXMuYXR0cmliU3RhdGUgPSBudWxsO1xuXG4gICAgdGhpcy50ZW1wQXR0cmliU3RhdGUgPSBudWxsO1xufTtcbiIsInZhciBXZWJHTE1hbmFnZXIgPSByZXF1aXJlKCcuL1dlYkdMTWFuYWdlcicpLFxuICAgIHV0aWxzID0gcmVxdWlyZSgnLi4vLi4vLi4vdXRpbHMnKTtcblxuLyoqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcn0gVGhlIHJlbmRlcmVyIHRoaXMgbWFuYWdlciB3b3JrcyBmb3IuXG4gKi9cbmZ1bmN0aW9uIFdlYkdMTWFza01hbmFnZXIocmVuZGVyZXIpXG57XG4gICAgV2ViR0xNYW5hZ2VyLmNhbGwodGhpcywgcmVuZGVyZXIpO1xuICAgIHRoaXMuc3RlbmNpbE1hc2tTdGFjayA9IG51bGw7XG59XG5cbldlYkdMTWFza01hbmFnZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShXZWJHTE1hbmFnZXIucHJvdG90eXBlKTtcbldlYkdMTWFza01hbmFnZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gV2ViR0xNYXNrTWFuYWdlcjtcbm1vZHVsZS5leHBvcnRzID0gV2ViR0xNYXNrTWFuYWdlcjtcblxuLyoqXG4gKiBDaGFuZ2VzIHRoZSBtYXNrIHN0YWNrIHRoYXQgaXMgdXNlZCBieSB0aGlzIG1hbmFnZXIuXG4gKlxuICogQHBhcmFtIHN0ZW5jaWxNYXNrU3RhY2sge1BJWEkuU3RlbmNpbE1hc2tTdGFja30gVGhlIG1hc2sgc3RhY2tcbiAqL1xuV2ViR0xNYXNrTWFuYWdlci5wcm90b3R5cGUuc2V0TWFza1N0YWNrID0gZnVuY3Rpb24gKCBzdGVuY2lsTWFza1N0YWNrIClcbntcbiAgICB0aGlzLnN0ZW5jaWxNYXNrU3RhY2sgPSBzdGVuY2lsTWFza1N0YWNrO1xuXG4gICAgdmFyIGdsID0gdGhpcy5yZW5kZXJlci5nbDtcblxuICAgIGlmIChzdGVuY2lsTWFza1N0YWNrLnN0ZW5jaWxTdGFjay5sZW5ndGggPT09IDApXG4gICAge1xuICAgICAgICBnbC5kaXNhYmxlKGdsLlNURU5DSUxfVEVTVCk7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIGdsLmVuYWJsZShnbC5TVEVOQ0lMX1RFU1QpO1xuICAgIH1cbn07XG5cbi8qKlxuICogQXBwbGllcyB0aGUgTWFzayBhbmQgYWRkcyBpdCB0byB0aGUgY3VycmVudCBmaWx0ZXIgc3RhY2suIEBhbHZpblxuICpcbiAqIEBwYXJhbSBncmFwaGljcyB7UElYSS5HcmFwaGljc31cbiAqIEBwYXJhbSB3ZWJHTERhdGEge2FueVtdfVxuICovXG5XZWJHTE1hc2tNYW5hZ2VyLnByb3RvdHlwZS5wdXNoU3RlbmNpbCA9IGZ1bmN0aW9uIChncmFwaGljcywgd2ViR0xEYXRhKVxue1xuICAgIHRoaXMucmVuZGVyZXIuX2FjdGl2ZVJlbmRlclRhcmdldC5hdHRhY2hTdGVuY2lsQnVmZmVyKCk7XG5cbiAgICB2YXIgZ2wgPSB0aGlzLnJlbmRlcmVyLmdsLFxuICAgICAgICBzbXMgPSB0aGlzLnN0ZW5jaWxNYXNrU3RhY2s7XG5cbiAgICB0aGlzLmJpbmRHcmFwaGljcyhncmFwaGljcywgd2ViR0xEYXRhKTtcblxuICAgIGlmIChzbXMuc3RlbmNpbFN0YWNrLmxlbmd0aCA9PT0gMClcbiAgICB7XG4gICAgICAgIGdsLmVuYWJsZShnbC5TVEVOQ0lMX1RFU1QpO1xuICAgICAgICBnbC5jbGVhcihnbC5TVEVOQ0lMX0JVRkZFUl9CSVQpO1xuICAgICAgICBzbXMucmV2ZXJzZSA9IHRydWU7XG4gICAgICAgIHNtcy5jb3VudCA9IDA7XG4gICAgfVxuXG4gICAgc21zLnN0ZW5jaWxTdGFjay5wdXNoKHdlYkdMRGF0YSk7XG5cbiAgICB2YXIgbGV2ZWwgPSBzbXMuY291bnQ7XG5cbiAgICBnbC5jb2xvck1hc2soZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UpO1xuXG4gICAgZ2wuc3RlbmNpbEZ1bmMoZ2wuQUxXQVlTLDAsMHhGRik7XG4gICAgZ2wuc3RlbmNpbE9wKGdsLktFRVAsZ2wuS0VFUCxnbC5JTlZFUlQpO1xuXG4gICAgLy8gZHJhdyB0aGUgdHJpYW5nbGUgc3RyaXAhXG5cbiAgICBpZiAod2ViR0xEYXRhLm1vZGUgPT09IDEpXG4gICAge1xuICAgICAgICBnbC5kcmF3RWxlbWVudHMoZ2wuVFJJQU5HTEVfRkFOLCAgd2ViR0xEYXRhLmluZGljZXMubGVuZ3RoIC0gNCwgZ2wuVU5TSUdORURfU0hPUlQsIDAgKTtcblxuICAgICAgICBpZiAoc21zLnJldmVyc2UpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGdsLnN0ZW5jaWxGdW5jKGdsLkVRVUFMLCAweEZGIC0gbGV2ZWwsIDB4RkYpO1xuICAgICAgICAgICAgZ2wuc3RlbmNpbE9wKGdsLktFRVAsZ2wuS0VFUCxnbC5ERUNSKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgIHtcbiAgICAgICAgICAgIGdsLnN0ZW5jaWxGdW5jKGdsLkVRVUFMLGxldmVsLCAweEZGKTtcbiAgICAgICAgICAgIGdsLnN0ZW5jaWxPcChnbC5LRUVQLGdsLktFRVAsZ2wuSU5DUik7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBkcmF3IGEgcXVhZCB0byBpbmNyZW1lbnQuLlxuICAgICAgICBnbC5kcmF3RWxlbWVudHMoZ2wuVFJJQU5HTEVfRkFOLCA0LCBnbC5VTlNJR05FRF9TSE9SVCwgKCB3ZWJHTERhdGEuaW5kaWNlcy5sZW5ndGggLSA0ICkgKiAyICk7XG5cbiAgICAgICAgaWYgKHNtcy5yZXZlcnNlKVxuICAgICAgICB7XG4gICAgICAgICAgICBnbC5zdGVuY2lsRnVuYyhnbC5FUVVBTCwweEZGLShsZXZlbCsxKSwgMHhGRik7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgICBnbC5zdGVuY2lsRnVuYyhnbC5FUVVBTCxsZXZlbCsxLCAweEZGKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHNtcy5yZXZlcnNlID0gIXNtcy5yZXZlcnNlO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICBpZiAoIXNtcy5yZXZlcnNlKVxuICAgICAgICB7XG4gICAgICAgICAgICBnbC5zdGVuY2lsRnVuYyhnbC5FUVVBTCwgMHhGRiAtIGxldmVsLCAweEZGKTtcbiAgICAgICAgICAgIGdsLnN0ZW5jaWxPcChnbC5LRUVQLGdsLktFRVAsZ2wuREVDUik7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgICBnbC5zdGVuY2lsRnVuYyhnbC5FUVVBTCxsZXZlbCwgMHhGRik7XG4gICAgICAgICAgICBnbC5zdGVuY2lsT3AoZ2wuS0VFUCxnbC5LRUVQLGdsLklOQ1IpO1xuICAgICAgICB9XG5cbiAgICAgICAgZ2wuZHJhd0VsZW1lbnRzKGdsLlRSSUFOR0xFX1NUUklQLCAgd2ViR0xEYXRhLmluZGljZXMubGVuZ3RoLCBnbC5VTlNJR05FRF9TSE9SVCwgMCApO1xuXG4gICAgICAgIGlmICghc21zLnJldmVyc2UpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGdsLnN0ZW5jaWxGdW5jKGdsLkVRVUFMLDB4RkYtKGxldmVsKzEpLCAweEZGKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgIHtcbiAgICAgICAgICAgIGdsLnN0ZW5jaWxGdW5jKGdsLkVRVUFMLGxldmVsKzEsIDB4RkYpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZ2wuY29sb3JNYXNrKHRydWUsIHRydWUsIHRydWUsIHRydWUpO1xuICAgIGdsLnN0ZW5jaWxPcChnbC5LRUVQLGdsLktFRVAsZ2wuS0VFUCk7XG5cbiAgICBzbXMuY291bnQrKztcbn07XG5cbi8qKlxuICogVE9ETyB0aGlzIGRvZXMgbm90IGJlbG9uZyBoZXJlIVxuICpcbiAqIEBwYXJhbSBncmFwaGljcyB7UElYSS5HcmFwaGljc31cbiAqIEBwYXJhbSB3ZWJHTERhdGEge2FueVtdfVxuICovXG5XZWJHTE1hc2tNYW5hZ2VyLnByb3RvdHlwZS5iaW5kR3JhcGhpY3MgPSBmdW5jdGlvbiAoZ3JhcGhpY3MsIHdlYkdMRGF0YSlcbntcbiAgICAvL2lmICh0aGlzLl9jdXJyZW50R3JhcGhpY3MgPT09IGdyYXBoaWNzKXJldHVybjtcbiAgICB2YXIgZ2wgPSB0aGlzLnJlbmRlcmVyLmdsO1xuXG4gICAgIC8vIGJpbmQgdGhlIGdyYXBoaWNzIG9iamVjdC4uXG4gICAgdmFyIHNoYWRlciA9IHRoaXMucmVuZGVyZXIucGx1Z2lucy5ncmFwaGljcy5wcmltaXRpdmVTaGFkZXI7XG5cbiAgICBpZiAod2ViR0xEYXRhLm1vZGUgPT09IDEpXG4gICAge1xuICAgICAgICAvKlxuICAgICAgICBzaGFkZXIgPSB0aGlzLnJlbmRlcmVyLnNoYWRlck1hbmFnZXIuY29tcGxleFByaW1pdGl2ZVNoYWRlcjtcblxuICAgICAgICB0aGlzLnJlbmRlcmVyLnNoYWRlck1hbmFnZXIuc2V0U2hhZGVyKHNoYWRlcik7XG5cbiAgICAgICAgZ2wudW5pZm9ybU1hdHJpeDNmdihzaGFkZXIudW5pZm9ybXMudHJhbnNsYXRpb25NYXRyaXguX2xvY2F0aW9uLCBmYWxzZSwgZ3JhcGhpY3Mud29ybGRUcmFuc2Zvcm0udG9BcnJheSh0cnVlKSk7XG5cbiAgICAgICAgZ2wudW5pZm9ybU1hdHJpeDNmdihzaGFkZXIudW5pZm9ybXMucHJvamVjdGlvbk1hdHJpeC5fbG9jYXRpb24sIGZhbHNlLCB0aGlzLnJlbmRlcmVyLmN1cnJlbnRSZW5kZXJUYXJnZXQucHJvamVjdGlvbk1hdHJpeC50b0FycmF5KHRydWUpKTtcblxuICAgICAgICBnbC51bmlmb3JtM2Z2KHNoYWRlci51bmlmb3Jtcy50aW50Ll9sb2NhdGlvbiwgdXRpbHMuaGV4MnJnYihncmFwaGljcy50aW50KSk7XG5cbiAgICAgICAgZ2wudW5pZm9ybTNmdihzaGFkZXIudW5pZm9ybXMuY29sb3IuX2xvY2F0aW9uLCB3ZWJHTERhdGEuY29sb3IpO1xuXG4gICAgICAgIGdsLnVuaWZvcm0xZihzaGFkZXIudW5pZm9ybXMuYWxwaGEuX2xvY2F0aW9uLCBncmFwaGljcy53b3JsZEFscGhhKTtcblxuICAgICAgICBnbC5iaW5kQnVmZmVyKGdsLkFSUkFZX0JVRkZFUiwgd2ViR0xEYXRhLmJ1ZmZlcik7XG5cbiAgICAgICAgZ2wudmVydGV4QXR0cmliUG9pbnRlcihzaGFkZXIuYXR0cmlidXRlcy5hVmVydGV4UG9zaXRpb24sIDIsIGdsLkZMT0FULCBmYWxzZSwgNCAqIDIsIDApO1xuXG4gICAgICAgIC8vIG5vdyBkbyB0aGUgcmVzdC4uXG4gICAgICAgIC8vIHNldCB0aGUgaW5kZXggYnVmZmVyIVxuICAgICAgICBnbC5iaW5kQnVmZmVyKGdsLkVMRU1FTlRfQVJSQVlfQlVGRkVSLCB3ZWJHTERhdGEuaW5kZXhCdWZmZXIpO1xuICAgICovXG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIC8vdGhpcy5yZW5kZXJlci5zaGFkZXJNYW5hZ2VyLmFjdGl2YXRlUHJpbWl0aXZlU2hhZGVyKCk7XG4vLyAgICAgICAgc2hhZGVyID0gdGhpcy5yZW5kZXJlci5zaGFkZXJNYW5hZ2VyLnByaW1pdGl2ZVNoYWRlcjtcbiAgICAgICBcbiAgICAgICAgdGhpcy5yZW5kZXJlci5iaW5kU2hhZGVyKHNoYWRlcilcblxuICAgICAgICBzaGFkZXIudW5pZm9ybXMudHJhbnNsYXRpb25NYXRyaXggPSBncmFwaGljcy53b3JsZFRyYW5zZm9ybS50b0FycmF5KHRydWUpO1xuICAgICAgICBzaGFkZXIudW5pZm9ybXMudGludCA9IHV0aWxzLmhleDJyZ2IoZ3JhcGhpY3MudGludCk7XG4gICAgICAgIHNoYWRlci51bmlmb3Jtcy5hbHBoYSA9IGdyYXBoaWNzLndvcmxkQWxwaGE7XG5cblxuICAgICAgICBnbC5iaW5kQnVmZmVyKGdsLkFSUkFZX0JVRkZFUiwgd2ViR0xEYXRhLmJ1ZmZlcik7XG5cblxuICAgICAgICBzaGFkZXIuYXR0cmlidXRlcy5hVmVydGV4UG9zaXRpb24ucG9pbnRlcihnbC5GTE9BVCwgZmFsc2UsIDQgKiA2LCAwKTtcbiAgICAgICAgc2hhZGVyLmF0dHJpYnV0ZXMuYUNvbG9yLnBvaW50ZXIoZ2wuRkxPQVQsIGZhbHNlLCA0ICogNiwgMiAqIDQpO1xuXG4gICAgICAgIGdsLmVuYWJsZVZlcnRleEF0dHJpYkFycmF5KHNoYWRlci5hdHRyaWJ1dGVzLmFWZXJ0ZXhQb3NpdGlvbi5sb2NhdGlvbik7XG4gICAgICAgIGdsLmVuYWJsZVZlcnRleEF0dHJpYkFycmF5KHNoYWRlci5hdHRyaWJ1dGVzLmFDb2xvci5sb2NhdGlvbik7XG5cbiAgICAgICAgLy8gc2V0IHRoZSBpbmRleCBidWZmZXIhXG4gICAgICAgIGdsLmJpbmRCdWZmZXIoZ2wuRUxFTUVOVF9BUlJBWV9CVUZGRVIsIHdlYkdMRGF0YS5pbmRleEJ1ZmZlcik7XG4vLyAgICAgICAgZ2wuZHJhd0VsZW1lbnRzKGdsLlRSSUFOR0xFX1NUUklQLCAgd2ViR0xEYXRhLmluZGljZXMubGVuZ3RoLCBnbC5VTlNJR05FRF9TSE9SVCwgMCApO1xuXG5cbiAgICAgIC8qICB0aGlzLnJlbmRlcmVyLnNoYWRlck1hbmFnZXIuc2V0U2hhZGVyKHNoYWRlcik7XG5cbiAgICAgICAgZ2wudW5pZm9ybU1hdHJpeDNmdihzaGFkZXIudW5pZm9ybXMudHJhbnNsYXRpb25NYXRyaXguX2xvY2F0aW9uLCBmYWxzZSwgZ3JhcGhpY3Mud29ybGRUcmFuc2Zvcm0udG9BcnJheSh0cnVlKSk7XG5cbiAgICAgICAgZ2wudW5pZm9ybU1hdHJpeDNmdihzaGFkZXIudW5pZm9ybXMucHJvamVjdGlvbk1hdHJpeC5fbG9jYXRpb24sIGZhbHNlLCB0aGlzLnJlbmRlcmVyLmN1cnJlbnRSZW5kZXJUYXJnZXQucHJvamVjdGlvbk1hdHJpeC50b0FycmF5KHRydWUpKTtcblxuICAgICAgICBnbC51bmlmb3JtM2Z2KHNoYWRlci51bmlmb3Jtcy50aW50Ll9sb2NhdGlvbiwgdXRpbHMuaGV4MnJnYihncmFwaGljcy50aW50KSk7XG5cbiAgICAgICAgZ2wudW5pZm9ybTFmKHNoYWRlci51bmlmb3Jtcy5hbHBoYS5fbG9jYXRpb24sIGdyYXBoaWNzLndvcmxkQWxwaGEpO1xuXG4gICAgICAgIGdsLmJpbmRCdWZmZXIoZ2wuQVJSQVlfQlVGRkVSLCB3ZWJHTERhdGEuYnVmZmVyKTtcblxuICAgICAgICBnbC52ZXJ0ZXhBdHRyaWJQb2ludGVyKHNoYWRlci5hdHRyaWJ1dGVzLmFWZXJ0ZXhQb3NpdGlvbiwgMiwgZ2wuRkxPQVQsIGZhbHNlLCA0ICogNiwgMCk7XG4gICAgICAgIGdsLnZlcnRleEF0dHJpYlBvaW50ZXIoc2hhZGVyLmF0dHJpYnV0ZXMuYUNvbG9yLCA0LCBnbC5GTE9BVCwgZmFsc2UsNCAqIDYsIDIgKiA0KTtcblxuICAgICAgICAvLyBzZXQgdGhlIGluZGV4IGJ1ZmZlciFcbiAgICAgICAgZ2wuYmluZEJ1ZmZlcihnbC5FTEVNRU5UX0FSUkFZX0JVRkZFUiwgd2ViR0xEYXRhLmluZGV4QnVmZmVyKTsqL1xuICAgIH1cbn07XG5cbi8qKlxuICogVE9ETyBAYWx2aW5cbiAqIEBwYXJhbSBncmFwaGljcyB7UElYSS5HcmFwaGljc31cbiAqIEBwYXJhbSB3ZWJHTERhdGEge2FueVtdfVxuICovXG5XZWJHTE1hc2tNYW5hZ2VyLnByb3RvdHlwZS5wb3BTdGVuY2lsID0gZnVuY3Rpb24gKGdyYXBoaWNzLCB3ZWJHTERhdGEpXG57XG4gICAgdmFyIGdsID0gdGhpcy5yZW5kZXJlci5nbCxcbiAgICAgICAgc21zID0gdGhpcy5zdGVuY2lsTWFza1N0YWNrO1xuXG4gICAgc21zLnN0ZW5jaWxTdGFjay5wb3AoKTtcblxuICAgIHNtcy5jb3VudC0tO1xuXG4gICAgaWYgKHNtcy5zdGVuY2lsU3RhY2subGVuZ3RoID09PSAwKVxuICAgIHtcbiAgICAgICAgLy8gdGhlIHN0YWNrIGlzIGVtcHR5IVxuICAgICAgICBnbC5kaXNhYmxlKGdsLlNURU5DSUxfVEVTVCk7XG5cbiAgICB9XG4gICAgZWxzZVxuICAgIHtcblxuICAgICAgICB2YXIgbGV2ZWwgPSBzbXMuY291bnQ7XG5cbiAgICAgICAgdGhpcy5iaW5kR3JhcGhpY3MoZ3JhcGhpY3MsIHdlYkdMRGF0YSk7XG5cbiAgICAgICAgZ2wuY29sb3JNYXNrKGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlKTtcblxuICAgICAgICBpZiAod2ViR0xEYXRhLm1vZGUgPT09IDEpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHNtcy5yZXZlcnNlID0gIXNtcy5yZXZlcnNlO1xuXG4gICAgICAgICAgICBpZiAoc21zLnJldmVyc2UpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgZ2wuc3RlbmNpbEZ1bmMoZ2wuRVFVQUwsIDB4RkYgLSAobGV2ZWwrMSksIDB4RkYpO1xuICAgICAgICAgICAgICAgIGdsLnN0ZW5jaWxPcChnbC5LRUVQLGdsLktFRVAsZ2wuSU5DUik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgZ2wuc3RlbmNpbEZ1bmMoZ2wuRVFVQUwsbGV2ZWwrMSwgMHhGRik7XG4gICAgICAgICAgICAgICAgZ2wuc3RlbmNpbE9wKGdsLktFRVAsZ2wuS0VFUCxnbC5ERUNSKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gZHJhdyBhIHF1YWQgdG8gaW5jcmVtZW50Li5cbiAgICAgICAgICAgIGdsLmRyYXdFbGVtZW50cyhnbC5UUklBTkdMRV9GQU4sIDQsIGdsLlVOU0lHTkVEX1NIT1JULCAoIHdlYkdMRGF0YS5pbmRpY2VzLmxlbmd0aCAtIDQgKSAqIDIgKTtcblxuICAgICAgICAgICAgZ2wuc3RlbmNpbEZ1bmMoZ2wuQUxXQVlTLDAsMHhGRik7XG4gICAgICAgICAgICBnbC5zdGVuY2lsT3AoZ2wuS0VFUCxnbC5LRUVQLGdsLklOVkVSVCk7XG5cbiAgICAgICAgICAgIC8vIGRyYXcgdGhlIHRyaWFuZ2xlIHN0cmlwIVxuICAgICAgICAgICAgZ2wuZHJhd0VsZW1lbnRzKGdsLlRSSUFOR0xFX0ZBTiwgIHdlYkdMRGF0YS5pbmRpY2VzLmxlbmd0aCAtIDQsIGdsLlVOU0lHTkVEX1NIT1JULCAwICk7XG5cbiAgICAgICAgICAgIHRoaXMucmVuZGVyZXIuZHJhd0NvdW50ICs9IDI7XG5cbiAgICAgICAgICAgIGlmICghc21zLnJldmVyc2UpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgZ2wuc3RlbmNpbEZ1bmMoZ2wuRVFVQUwsMHhGRi0obGV2ZWwpLCAweEZGKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBnbC5zdGVuY2lsRnVuYyhnbC5FUVVBTCxsZXZlbCwgMHhGRik7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgIHtcbiAgICAgICAgICAvLyAgY29uc29sZS5sb2coXCI8PD4+XCIpXG4gICAgICAgICAgICBpZiAoIXNtcy5yZXZlcnNlKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGdsLnN0ZW5jaWxGdW5jKGdsLkVRVUFMLCAweEZGIC0gKGxldmVsKzEpLCAweEZGKTtcbiAgICAgICAgICAgICAgICBnbC5zdGVuY2lsT3AoZ2wuS0VFUCxnbC5LRUVQLGdsLklOQ1IpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGdsLnN0ZW5jaWxGdW5jKGdsLkVRVUFMLGxldmVsKzEsIDB4RkYpO1xuICAgICAgICAgICAgICAgIGdsLnN0ZW5jaWxPcChnbC5LRUVQLGdsLktFRVAsZ2wuREVDUik7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGdsLmRyYXdFbGVtZW50cyhnbC5UUklBTkdMRV9TVFJJUCwgIHdlYkdMRGF0YS5pbmRpY2VzLmxlbmd0aCwgZ2wuVU5TSUdORURfU0hPUlQsIDAgKTtcblxuICAgICAgICAgICAgdGhpcy5yZW5kZXJlci5kcmF3Q291bnQrKztcblxuICAgICAgICAgICAgaWYgKCFzbXMucmV2ZXJzZSlcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBnbC5zdGVuY2lsRnVuYyhnbC5FUVVBTCwweEZGLShsZXZlbCksIDB4RkYpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGdsLnN0ZW5jaWxGdW5jKGdsLkVRVUFMLGxldmVsLCAweEZGKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGdsLmNvbG9yTWFzayh0cnVlLCB0cnVlLCB0cnVlLCB0cnVlKTtcbiAgICAgICAgZ2wuc3RlbmNpbE9wKGdsLktFRVAsZ2wuS0VFUCxnbC5LRUVQKTtcblxuXG4gICAgfVxufTtcblxuLyoqXG4gKiBEZXN0cm95cyB0aGUgbWFzayBzdGFjay5cbiAqXG4gKi9cbldlYkdMTWFza01hbmFnZXIucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoKVxue1xuICAgIFdlYkdMTWFuYWdlci5wcm90b3R5cGUuZGVzdHJveS5jYWxsKHRoaXMpO1xuXG4gICAgdGhpcy5zdGVuY2lsTWFza1N0YWNrLnN0ZW5jaWxTdGFjayA9IG51bGw7XG59O1xuXG4vKipcbiAqIEFwcGxpZXMgdGhlIE1hc2sgYW5kIGFkZHMgaXQgdG8gdGhlIGN1cnJlbnQgZmlsdGVyIHN0YWNrLlxuICpcbiAqIEBwYXJhbSBtYXNrRGF0YSB7YW55W119IFRoZSBtYXNrIGRhdGEgc3RydWN0dXJlIHRvIHVzZVxuICovXG5XZWJHTE1hc2tNYW5hZ2VyLnByb3RvdHlwZS5wdXNoTWFzayA9IGZ1bmN0aW9uIChtYXNrRGF0YSlcbntcbiAgICB0aGlzLnJlbmRlcmVyLnNldE9iamVjdFJlbmRlcmVyKHRoaXMucmVuZGVyZXIucGx1Z2lucy5ncmFwaGljcyk7XG4gICAgXG4gICAgLy9UT0RPIEZJWFxuICAgIGlmIChtYXNrRGF0YS5kaXJ0eSlcbiAgICB7XG4gICAgICAgIHRoaXMucmVuZGVyZXIucGx1Z2lucy5ncmFwaGljcy51cGRhdGVHcmFwaGljcyhtYXNrRGF0YSwgdGhpcy5yZW5kZXJlci5nbCk7XG4gICAgfVxuXG4gICAgaWYgKCFtYXNrRGF0YS5fd2ViR0xbdGhpcy5yZW5kZXJlci5nbC5pZF0uZGF0YS5sZW5ndGgpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5wdXNoU3RlbmNpbChtYXNrRGF0YSwgbWFza0RhdGEuX3dlYkdMW3RoaXMucmVuZGVyZXIuZ2wuaWRdLmRhdGFbMF0pO1xufTtcblxuLyoqXG4gKiBSZW1vdmVzIHRoZSBsYXN0IGZpbHRlciBmcm9tIHRoZSBmaWx0ZXIgc3RhY2sgYW5kIGRvZXNuJ3QgcmV0dXJuIGl0LlxuICpcbiAqIEBwYXJhbSBtYXNrRGF0YSB7YW55W119XG4gKi9cbldlYkdMTWFza01hbmFnZXIucHJvdG90eXBlLnBvcE1hc2sgPSBmdW5jdGlvbiAobWFza0RhdGEpXG57XG4gICAgdGhpcy5yZW5kZXJlci5zZXRPYmplY3RSZW5kZXJlcih0aGlzLnJlbmRlcmVyLnBsdWdpbnMuZ3JhcGhpY3MpO1xuXG4gICAgdGhpcy5wb3BTdGVuY2lsKG1hc2tEYXRhLCBtYXNrRGF0YS5fd2ViR0xbdGhpcy5yZW5kZXJlci5nbC5pZF0uZGF0YVswXSk7XG59O1xuXG4iLCIvKipcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5XZWJHTFJlbmRlcmVyfSBUaGUgcmVuZGVyZXIgdGhpcyBtYW5hZ2VyIHdvcmtzIGZvci5cbiAqL1xuZnVuY3Rpb24gV2ViR0xNYW5hZ2VyKHJlbmRlcmVyKVxue1xuICAgIC8qKlxuICAgICAqIFRoZSByZW5kZXJlciB0aGlzIG1hbmFnZXIgd29ya3MgZm9yLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5XZWJHTFJlbmRlcmVyfVxuICAgICAqL1xuICAgIHRoaXMucmVuZGVyZXIgPSByZW5kZXJlcjtcblxuICAgIHRoaXMucmVuZGVyZXIub24oJ2NvbnRleHQnLCB0aGlzLm9uQ29udGV4dENoYW5nZSwgdGhpcyk7XG59XG5cbldlYkdMTWFuYWdlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBXZWJHTE1hbmFnZXI7XG5tb2R1bGUuZXhwb3J0cyA9IFdlYkdMTWFuYWdlcjtcblxuLyoqXG4gKiBHZW5lcmljIG1ldGhvZCBjYWxsZWQgd2hlbiB0aGVyZSBpcyBhIFdlYkdMIGNvbnRleHQgY2hhbmdlLlxuICpcbiAqL1xuV2ViR0xNYW5hZ2VyLnByb3RvdHlwZS5vbkNvbnRleHRDaGFuZ2UgPSBmdW5jdGlvbiAoKVxue1xuXHQvLyBkbyBzb21lIGNvZGVzIGluaXQhXG59O1xuXG4vKipcbiAqIEdlbmVyaWMgZGVzdHJveSBtZXRob2RzIHRvIGJlIG92ZXJyaWRkZW4gYnkgdGhlIHN1YmNsYXNzXG4gKlxuICovXG5XZWJHTE1hbmFnZXIucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoKVxue1xuICAgIHRoaXMucmVuZGVyZXIub2ZmKCdjb250ZXh0JywgdGhpcy5vbkNvbnRleHRDaGFuZ2UsIHRoaXMpO1xuXG4gICAgdGhpcy5yZW5kZXJlciA9IG51bGw7XG59O1xuIiwidmFyIFNoYWRlciA9IHJlcXVpcmUoJy4vU2hhZGVyJyk7XG5cbi8qKlxuICogVGhpcyBzaGFkZXIgaXMgdXNlZCB0byBkcmF3IGNvbXBsZXggcHJpbWl0aXZlIHNoYXBlcyBmb3Ige0BsaW5rIFBJWEkuR3JhcGhpY3N9LlxuICpcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqIEBleHRlbmRzIFBJWEkuU2hhZGVyXG4gKiBAcGFyYW0gc2hhZGVyTWFuYWdlciB7UElYSS5TaGFkZXJNYW5hZ2VyfSBUaGUgd2ViZ2wgc2hhZGVyIG1hbmFnZXIgdGhpcyBzaGFkZXIgd29ya3MgZm9yLlxuICovXG5mdW5jdGlvbiBDb21wbGV4UHJpbWl0aXZlU2hhZGVyKHNoYWRlck1hbmFnZXIpXG57XG4gICAgU2hhZGVyLmNhbGwodGhpcyxcbiAgICAgICAgc2hhZGVyTWFuYWdlcixcbiAgICAgICAgLy8gdmVydGV4IHNoYWRlclxuICAgICAgICBbXG4gICAgICAgICAgICAnYXR0cmlidXRlIHZlYzIgYVZlcnRleFBvc2l0aW9uOycsXG5cbiAgICAgICAgICAgICd1bmlmb3JtIG1hdDMgdHJhbnNsYXRpb25NYXRyaXg7JyxcbiAgICAgICAgICAgICd1bmlmb3JtIG1hdDMgcHJvamVjdGlvbk1hdHJpeDsnLFxuXG4gICAgICAgICAgICAndW5pZm9ybSB2ZWMzIHRpbnQ7JyxcbiAgICAgICAgICAgICd1bmlmb3JtIGZsb2F0IGFscGhhOycsXG4gICAgICAgICAgICAndW5pZm9ybSB2ZWMzIGNvbG9yOycsXG5cbiAgICAgICAgICAgICd2YXJ5aW5nIHZlYzQgdkNvbG9yOycsXG5cbiAgICAgICAgICAgICd2b2lkIG1haW4odm9pZCl7JyxcbiAgICAgICAgICAgICcgICBnbF9Qb3NpdGlvbiA9IHZlYzQoKHByb2plY3Rpb25NYXRyaXggKiB0cmFuc2xhdGlvbk1hdHJpeCAqIHZlYzMoYVZlcnRleFBvc2l0aW9uLCAxLjApKS54eSwgMC4wLCAxLjApOycsXG4gICAgICAgICAgICAnICAgdkNvbG9yID0gdmVjNChjb2xvciAqIGFscGhhICogdGludCwgYWxwaGEpOycsLy9cIiAqIHZlYzQodGludCAqIGFscGhhLCBhbHBoYSk7JyxcbiAgICAgICAgICAgICd9J1xuICAgICAgICBdLmpvaW4oJ1xcbicpLFxuICAgICAgICAvLyBmcmFnbWVudCBzaGFkZXJcbiAgICAgICAgW1xuICAgICAgICAgICAgJ3ByZWNpc2lvbiBtZWRpdW1wIGZsb2F0OycsXG5cbiAgICAgICAgICAgICd2YXJ5aW5nIHZlYzQgdkNvbG9yOycsXG5cbiAgICAgICAgICAgICd2b2lkIG1haW4odm9pZCl7JyxcbiAgICAgICAgICAgICcgICBnbF9GcmFnQ29sb3IgPSB2Q29sb3I7JyxcbiAgICAgICAgICAgICd9J1xuICAgICAgICBdLmpvaW4oJ1xcbicpLFxuICAgICAgICAvLyBjdXN0b20gdW5pZm9ybXNcbiAgICAgICAge1xuICAgICAgICAgICAgdGludDogICB7IHR5cGU6ICczZicsIHZhbHVlOiBbMCwgMCwgMF0gfSxcbiAgICAgICAgICAgIGFscGhhOiAgeyB0eXBlOiAnMWYnLCB2YWx1ZTogMCB9LFxuICAgICAgICAgICAgY29sb3I6ICB7IHR5cGU6ICczZicsIHZhbHVlOiBbMCwwLDBdIH0sXG4gICAgICAgICAgICB0cmFuc2xhdGlvbk1hdHJpeDogeyB0eXBlOiAnbWF0MycsIHZhbHVlOiBuZXcgRmxvYXQzMkFycmF5KDkpIH0sXG4gICAgICAgICAgICBwcm9qZWN0aW9uTWF0cml4OiB7IHR5cGU6ICdtYXQzJywgdmFsdWU6IG5ldyBGbG9hdDMyQXJyYXkoOSkgfVxuICAgICAgICB9LFxuICAgICAgICAvLyBhdHRyaWJ1dGVzXG4gICAgICAgIHtcbiAgICAgICAgICAgIGFWZXJ0ZXhQb3NpdGlvbjowXG4gICAgICAgIH1cbiAgICApO1xufVxuXG5Db21wbGV4UHJpbWl0aXZlU2hhZGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoU2hhZGVyLnByb3RvdHlwZSk7XG5Db21wbGV4UHJpbWl0aXZlU2hhZGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IENvbXBsZXhQcmltaXRpdmVTaGFkZXI7XG5tb2R1bGUuZXhwb3J0cyA9IENvbXBsZXhQcmltaXRpdmVTaGFkZXI7XG4iLCJ2YXIgU2hhZGVyID0gcmVxdWlyZSgnLi9TaGFkZXInKTtcblxuLyoqXG4gKiBUaGlzIHNoYWRlciBpcyB1c2VkIHRvIGRyYXcgc2ltcGxlIHByaW1pdGl2ZSBzaGFwZXMgZm9yIHtAbGluayBQSVhJLkdyYXBoaWNzfS5cbiAqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAZXh0ZW5kcyBQSVhJLlNoYWRlclxuICogQHBhcmFtIHNoYWRlck1hbmFnZXIge1NoYWRlck1hbmFnZXJ9IFRoZSB3ZWJnbCBzaGFkZXIgbWFuYWdlciB0aGlzIHNoYWRlciB3b3JrcyBmb3IuXG4gKi9cbmZ1bmN0aW9uIFByaW1pdGl2ZVNoYWRlcihzaGFkZXJNYW5hZ2VyKVxue1xuICAgIFNoYWRlci5jYWxsKHRoaXMsXG4gICAgICAgIHNoYWRlck1hbmFnZXIsXG4gICAgICAgIC8vIHZlcnRleCBzaGFkZXJcbiAgICAgICAgW1xuICAgICAgICAgICAgJ2F0dHJpYnV0ZSB2ZWMyIGFWZXJ0ZXhQb3NpdGlvbjsnLFxuICAgICAgICAgICAgJ2F0dHJpYnV0ZSB2ZWM0IGFDb2xvcjsnLFxuXG4gICAgICAgICAgICAndW5pZm9ybSBtYXQzIHRyYW5zbGF0aW9uTWF0cml4OycsXG4gICAgICAgICAgICAndW5pZm9ybSBtYXQzIHByb2plY3Rpb25NYXRyaXg7JyxcblxuICAgICAgICAgICAgJ3VuaWZvcm0gZmxvYXQgYWxwaGE7JyxcbiAgICAgICAgICAgICd1bmlmb3JtIGZsb2F0IGZsaXBZOycsXG4gICAgICAgICAgICAndW5pZm9ybSB2ZWMzIHRpbnQ7JyxcblxuICAgICAgICAgICAgJ3ZhcnlpbmcgdmVjNCB2Q29sb3I7JyxcblxuICAgICAgICAgICAgJ3ZvaWQgbWFpbih2b2lkKXsnLFxuICAgICAgICAgICAgJyAgIGdsX1Bvc2l0aW9uID0gdmVjNCgocHJvamVjdGlvbk1hdHJpeCAqIHRyYW5zbGF0aW9uTWF0cml4ICogdmVjMyhhVmVydGV4UG9zaXRpb24sIDEuMCkpLnh5LCAwLjAsIDEuMCk7JyxcbiAgICAgICAgICAgICcgICB2Q29sb3IgPSBhQ29sb3IgKiB2ZWM0KHRpbnQgKiBhbHBoYSwgYWxwaGEpOycsXG4gICAgICAgICAgICAnfSdcbiAgICAgICAgXS5qb2luKCdcXG4nKSxcbiAgICAgICAgLy8gZnJhZ21lbnQgc2hhZGVyXG4gICAgICAgIFtcbiAgICAgICAgICAgICdwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDsnLFxuXG4gICAgICAgICAgICAndmFyeWluZyB2ZWM0IHZDb2xvcjsnLFxuXG4gICAgICAgICAgICAndm9pZCBtYWluKHZvaWQpeycsXG4gICAgICAgICAgICAnICAgZ2xfRnJhZ0NvbG9yID0gdkNvbG9yOycsXG4gICAgICAgICAgICAnfSdcbiAgICAgICAgXS5qb2luKCdcXG4nKSxcbiAgICAgICAgLy8gY3VzdG9tIHVuaWZvcm1zXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRpbnQ6ICAgeyB0eXBlOiAnM2YnLCB2YWx1ZTogWzAsIDAsIDBdIH0sXG4gICAgICAgICAgICBhbHBoYTogIHsgdHlwZTogJzFmJywgdmFsdWU6IDAgfSxcbiAgICAgICAgICAgIHRyYW5zbGF0aW9uTWF0cml4OiB7IHR5cGU6ICdtYXQzJywgdmFsdWU6IG5ldyBGbG9hdDMyQXJyYXkoOSkgfSxcbiAgICAgICAgICAgIHByb2plY3Rpb25NYXRyaXg6IHsgdHlwZTogJ21hdDMnLCB2YWx1ZTogbmV3IEZsb2F0MzJBcnJheSg5KSB9XG4gICAgICAgIH0sXG4gICAgICAgIC8vIGN1c3RvbSBhdHRyaWJ1dGVzXG4gICAgICAgIHtcbiAgICAgICAgICAgIGFWZXJ0ZXhQb3NpdGlvbjowLFxuICAgICAgICAgICAgYUNvbG9yOjBcbiAgICAgICAgfVxuICAgICk7XG59XG5cblByaW1pdGl2ZVNoYWRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFNoYWRlci5wcm90b3R5cGUpO1xuUHJpbWl0aXZlU2hhZGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFByaW1pdGl2ZVNoYWRlcjtcbm1vZHVsZS5leHBvcnRzID0gUHJpbWl0aXZlU2hhZGVyO1xuIiwiLypnbG9iYWwgY29uc29sZSAqL1xudmFyIHV0aWxzID0gcmVxdWlyZSgnLi4vLi4vLi4vdXRpbHMnKTtcblxuLyoqXG4gKiBCYXNlIHNoYWRlciBjbGFzcyBmb3IgUElYSSBtYW5hZ2VkIHNoYWRlcnMuXG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIHNoYWRlck1hbmFnZXIge1BJWEkuU2hhZGVyTWFuYWdlcn0gVGhlIHdlYmdsIHNoYWRlciBtYW5hZ2VyIHRoaXMgc2hhZGVyIHdvcmtzIGZvci5cbiAqIEBwYXJhbSBbdmVydGV4U3JjXSB7c3RyaW5nfSBUaGUgc291cmNlIG9mIHRoZSB2ZXJ0ZXggc2hhZGVyLlxuICogQHBhcmFtIFtmcmFnbWVudFNyY10ge3N0cmluZ30gVGhlIHNvdXJjZSBvZiB0aGUgZnJhZ21lbnQgc2hhZGVyLlxuICogQHBhcmFtIFt1bmlmb3Jtc10ge29iamVjdH0gVW5pZm9ybXMgZm9yIHRoaXMgc2hhZGVyLlxuICogQHBhcmFtIFthdHRyaWJ1dGVzXSB7b2JqZWN0fSBBdHRyaWJ1dGVzIGZvciB0aGlzIHNoYWRlci5cbiAqL1xuZnVuY3Rpb24gU2hhZGVyKHNoYWRlck1hbmFnZXIsIHZlcnRleFNyYywgZnJhZ21lbnRTcmMsIHVuaWZvcm1zLCBhdHRyaWJ1dGVzKVxue1xuICAgIGlmICghdmVydGV4U3JjIHx8ICFmcmFnbWVudFNyYylcbiAgICB7XG4gICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1BpeGkuanMgRXJyb3IuIFNoYWRlciByZXF1aXJlcyB2ZXJ0ZXhTcmMgYW5kIGZyYWdtZW50U3JjJyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQSB1bmlxdWUgaWRcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQHJlYWRvbmx5XG4gICAgICovXG4gICAgdGhpcy51aWQgPSB1dGlscy51aWQoKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBjdXJyZW50IFdlYkdMIGRyYXdpbmcgY29udGV4dFxuICAgICAqIEBtZW1iZXIge1dlYkdMUmVuZGVyaW5nQ29udGV4dH1cbiAgICAgKiBAcmVhZG9ubHlcbiAgICAgKi9cbiAgICB0aGlzLmdsID0gc2hhZGVyTWFuYWdlci5yZW5kZXJlci5nbDtcblxuICAgIC8vVE9ETyBtYXliZSB3ZSBzaG91bGQgcGFzcyByZW5kZXJlciByYXRoZXIgdGhhbiBzaGFkZXIgbWFuZ2VyPz8gZm9vZCBmb3IgdGhvdWdodC4uXG4gICAgdGhpcy5zaGFkZXJNYW5hZ2VyID0gc2hhZGVyTWFuYWdlcjtcblxuICAgIC8qKlxuICAgICAqIFRoZSBXZWJHTCBwcm9ncmFtLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7V2ViR0xQcm9ncmFtfVxuICAgICAqIEByZWFkb25seVxuICAgICAqL1xuICAgIHRoaXMucHJvZ3JhbSA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgdW5pZm9ybXMgYXMgYW4gb2JqZWN0XG4gICAgICogQG1lbWJlciB7b2JqZWN0fVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy51bmlmb3JtcyA9IHVuaWZvcm1zIHx8IHt9O1xuXG4gICAgLyoqXG4gICAgICogVGhlIGF0dHJpYnV0ZXMgYXMgYW4gb2JqZWN0XG4gICAgICogQG1lbWJlciB7b2JqZWN0fVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5hdHRyaWJ1dGVzID0gYXR0cmlidXRlcyB8fCB7fTtcblxuICAgIC8qKlxuICAgICAqIEludGVybmFsIHRleHR1cmUgY291bnRlclxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMudGV4dHVyZUNvdW50ID0gMTtcblxuICAgIC8qKlxuICAgICAqIFRoZSB2ZXJ0ZXggc2hhZGVyIGFzIGFuIGFycmF5IG9mIHN0cmluZ3NcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge3N0cmluZ31cbiAgICAgKi9cbiAgICB0aGlzLnZlcnRleFNyYyA9IHZlcnRleFNyYztcblxuICAgIC8qKlxuICAgICAqIFRoZSBmcmFnbWVudCBzaGFkZXIgYXMgYW4gYXJyYXkgb2Ygc3RyaW5nc1xuICAgICAqXG4gICAgICogQG1lbWJlciB7c3RyaW5nfVxuICAgICAqL1xuICAgIHRoaXMuZnJhZ21lbnRTcmMgPSBmcmFnbWVudFNyYztcblxuICAgIHRoaXMuaW5pdCgpO1xufVxuXG5TaGFkZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gU2hhZGVyO1xubW9kdWxlLmV4cG9ydHMgPSBTaGFkZXI7XG5cbi8qKlxuICogQ3JlYXRlcyB0aGUgc2hhZGVyIGFuZCB1c2VzIGl0XG4gKlxuICovXG5TaGFkZXIucHJvdG90eXBlLmluaXQgPSBmdW5jdGlvbiAoKVxue1xuICAgIHRoaXMuY29tcGlsZSgpO1xuXG4gICAgdGhpcy5nbC51c2VQcm9ncmFtKHRoaXMucHJvZ3JhbSk7XG5cbiAgICB0aGlzLmNhY2hlVW5pZm9ybUxvY2F0aW9ucyhPYmplY3Qua2V5cyh0aGlzLnVuaWZvcm1zKSk7XG4gICAgdGhpcy5jYWNoZUF0dHJpYnV0ZUxvY2F0aW9ucyhPYmplY3Qua2V5cyh0aGlzLmF0dHJpYnV0ZXMpKTtcbn07XG5cbi8qKlxuICogQ2FjaGVzIHRoZSBsb2NhdGlvbnMgb2YgdGhlIHVuaWZvcm0gZm9yIHJldXNlLlxuICpcbiAqIEBwYXJhbSBrZXlzIHtzdHJpbmd9IHRoZSB1bmlmb3JtcyB0byBjYWNoZVxuICovXG5TaGFkZXIucHJvdG90eXBlLmNhY2hlVW5pZm9ybUxvY2F0aW9ucyA9IGZ1bmN0aW9uIChrZXlzKVxue1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7ICsraSlcbiAgICB7XG4gICAgICAgIHRoaXMudW5pZm9ybXNba2V5c1tpXV0uX2xvY2F0aW9uID0gdGhpcy5nbC5nZXRVbmlmb3JtTG9jYXRpb24odGhpcy5wcm9ncmFtLCBrZXlzW2ldKTtcbiAgICB9XG59O1xuXG4vKipcbiAqIENhY2hlcyB0aGUgbG9jYXRpb25zIG9mIHRoZSBhdHRyaWJ1dGUgZm9yIHJldXNlLlxuICpcbiAqIEBwYXJhbSBrZXlzIHtzdHJpbmd9IHRoZSBhdHRyaWJ1dGVzIHRvIGNhY2hlXG4gKi9cblNoYWRlci5wcm90b3R5cGUuY2FjaGVBdHRyaWJ1dGVMb2NhdGlvbnMgPSBmdW5jdGlvbiAoa2V5cylcbntcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyArK2kpXG4gICAge1xuICAgICAgICB0aGlzLmF0dHJpYnV0ZXNba2V5c1tpXV0gPSB0aGlzLmdsLmdldEF0dHJpYkxvY2F0aW9uKHRoaXMucHJvZ3JhbSwga2V5c1tpXSk7XG4gICAgfVxuXG4gICAgLy8gVE9ETzogQ2hlY2sgaWYgdGhpcyBpcyBuZWVkZWQgYW55bW9yZS4uLlxuXG4gICAgLy8gQmVnaW4gd29yc3QgaGFjayBldmEgLy9cblxuICAgIC8vIFdIWT8/PyBPTkxZIG9uIG15IGNocm9tZSBwaXhlbCB0aGUgbGluZSBhYm92ZSByZXR1cm5zIC0xIHdoZW4gdXNpbmcgZmlsdGVycz9cbiAgICAvLyBtYXliZSBpdHMgc29tZXRoaW5nIHRvIGRvIHdpdGggdGhlIGN1cnJlbnQgc3RhdGUgb2YgdGhlIGdsIGNvbnRleHQuXG4gICAgLy8gSSdtIGNvbnZpbmNlZCB0aGlzIGlzIGEgYnVnIGluIHRoZSBjaHJvbWUgYnJvd3NlciBhcyB0aGVyZSBpcyBOTyByZWFzb24gd2h5IHRoaXMgc2hvdWxkIGJlIHJldHVybmluZyAtMSBlc3BlY2lhbGx5IGFzIGl0IG9ubHkgbWFuaWZlc3RzIG9uIG15IGNocm9tZSBwaXhlbFxuICAgIC8vIElmIHRoZXJlcyBhbnkgd2ViR0wgcGVvcGxlIHRoYXQga25vdyB3aHkgY291bGQgaGFwcGVuIHBsZWFzZSBoZWxwIDopXG4gICAgLy8gaWYgKHRoaXMuYXR0cmlidXRlcy5hQ29sb3IgPT09IC0xKXtcbiAgICAvLyAgICAgdGhpcy5hdHRyaWJ1dGVzLmFDb2xvciA9IDI7XG4gICAgLy8gfVxuXG4gICAgLy8gRW5kIHdvcnN0IGhhY2sgZXZhIC8vXG59O1xuXG4vKipcbiAqIEF0dGFjaGVzIHRoZSBzaGFkZXJzIGFuZCBjcmVhdGVzIHRoZSBwcm9ncmFtLlxuICpcbiAqIEByZXR1cm4ge1dlYkdMUHJvZ3JhbX1cbiAqL1xuU2hhZGVyLnByb3RvdHlwZS5jb21waWxlID0gZnVuY3Rpb24gKClcbntcbiAgICB2YXIgZ2wgPSB0aGlzLmdsO1xuXG4gICAgdmFyIGdsVmVydFNoYWRlciA9IHRoaXMuX2dsQ29tcGlsZShnbC5WRVJURVhfU0hBREVSLCB0aGlzLnZlcnRleFNyYyk7XG4gICAgdmFyIGdsRnJhZ1NoYWRlciA9IHRoaXMuX2dsQ29tcGlsZShnbC5GUkFHTUVOVF9TSEFERVIsIHRoaXMuZnJhZ21lbnRTcmMpO1xuXG4gICAgdmFyIHByb2dyYW0gPSBnbC5jcmVhdGVQcm9ncmFtKCk7XG5cbiAgICBnbC5hdHRhY2hTaGFkZXIocHJvZ3JhbSwgZ2xWZXJ0U2hhZGVyKTtcbiAgICBnbC5hdHRhY2hTaGFkZXIocHJvZ3JhbSwgZ2xGcmFnU2hhZGVyKTtcbiAgICBnbC5saW5rUHJvZ3JhbShwcm9ncmFtKTtcblxuICAgIC8vIGlmIGxpbmtpbmcgZmFpbHMsIHRoZW4gbG9nIGFuZCBjbGVhbnVwXG4gICAgaWYgKCFnbC5nZXRQcm9ncmFtUGFyYW1ldGVyKHByb2dyYW0sIGdsLkxJTktfU1RBVFVTKSlcbiAgICB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ1BpeGkuanMgRXJyb3I6IENvdWxkIG5vdCBpbml0aWFsaXplIHNoYWRlci4nKTtcbiAgICAgICAgY29uc29sZS5lcnJvcignZ2wuVkFMSURBVEVfU1RBVFVTJywgZ2wuZ2V0UHJvZ3JhbVBhcmFtZXRlcihwcm9ncmFtLCBnbC5WQUxJREFURV9TVEFUVVMpKTtcbiAgICAgICAgY29uc29sZS5lcnJvcignZ2wuZ2V0RXJyb3IoKScsIGdsLmdldEVycm9yKCkpO1xuXG4gICAgICAgIC8vIGlmIHRoZXJlIGlzIGEgcHJvZ3JhbSBpbmZvIGxvZywgbG9nIGl0XG4gICAgICAgIGlmIChnbC5nZXRQcm9ncmFtSW5mb0xvZyhwcm9ncmFtKSAhPT0gJycpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignUGl4aS5qcyBXYXJuaW5nOiBnbC5nZXRQcm9ncmFtSW5mb0xvZygpJywgZ2wuZ2V0UHJvZ3JhbUluZm9Mb2cocHJvZ3JhbSkpO1xuICAgICAgICB9XG5cbiAgICAgICAgZ2wuZGVsZXRlUHJvZ3JhbShwcm9ncmFtKTtcbiAgICAgICAgcHJvZ3JhbSA9IG51bGw7XG4gICAgfVxuXG4gICAgLy8gY2xlYW4gdXAgc29tZSBzaGFkZXJzXG4gICAgZ2wuZGVsZXRlU2hhZGVyKGdsVmVydFNoYWRlcik7XG4gICAgZ2wuZGVsZXRlU2hhZGVyKGdsRnJhZ1NoYWRlcik7XG5cbiAgICByZXR1cm4gKHRoaXMucHJvZ3JhbSA9IHByb2dyYW0pO1xufTtcblxuLyoqXG4qIEFkZHMgYSBuZXcgdW5pZm9ybVxuKlxuKiBAcGFyYW0gdW5pZm9ybSB7b2JqZWN0fSB0aGUgbmV3IHVuaWZvcm0gdG8gYXR0YWNoXG4qL1xuU2hhZGVyLnByb3RvdHlwZS5zeW5jVW5pZm9ybSA9IGZ1bmN0aW9uICh1bmlmb3JtKVxue1xuICAgIHZhciBsb2NhdGlvbiA9IHVuaWZvcm0uX2xvY2F0aW9uLFxuICAgICAgICB2YWx1ZSA9IHVuaWZvcm0udmFsdWUsXG4gICAgICAgIGdsID0gdGhpcy5nbCxcbiAgICAgICAgaSwgaWw7XG5cbiAgICBzd2l0Y2ggKHVuaWZvcm0udHlwZSlcbiAgICB7XG4gICAgICAgIGNhc2UgJ2InOlxuICAgICAgICBjYXNlICdib29sJzpcbiAgICAgICAgY2FzZSAnYm9vbGVhbic6XG4gICAgICAgICAgICBnbC51bmlmb3JtMWkobG9jYXRpb24sIHZhbHVlID8gMSA6IDApO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLy8gc2luZ2xlIGludCB2YWx1ZVxuICAgICAgICBjYXNlICdpJzpcbiAgICAgICAgY2FzZSAnMWknOlxuICAgICAgICAgICAgZ2wudW5pZm9ybTFpKGxvY2F0aW9uLCB2YWx1ZSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAvLyBzaW5nbGUgZmxvYXQgdmFsdWVcbiAgICAgICAgY2FzZSAnZic6XG4gICAgICAgIGNhc2UgJzFmJzpcbiAgICAgICAgICAgIGdsLnVuaWZvcm0xZihsb2NhdGlvbiwgdmFsdWUpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLy8gRmxvYXQzMkFycmF5KDIpIG9yIEpTIEFycnJheVxuICAgICAgICBjYXNlICcyZic6XG4gICAgICAgICAgICBnbC51bmlmb3JtMmYobG9jYXRpb24sIHZhbHVlWzBdLCB2YWx1ZVsxXSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAvLyBGbG9hdDMyQXJyYXkoMykgb3IgSlMgQXJycmF5XG4gICAgICAgIGNhc2UgJzNmJzpcbiAgICAgICAgICAgIGdsLnVuaWZvcm0zZihsb2NhdGlvbiwgdmFsdWVbMF0sIHZhbHVlWzFdLCB2YWx1ZVsyXSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAvLyBGbG9hdDMyQXJyYXkoNCkgb3IgSlMgQXJycmF5XG4gICAgICAgIGNhc2UgJzRmJzpcbiAgICAgICAgICAgIGdsLnVuaWZvcm00Zihsb2NhdGlvbiwgdmFsdWVbMF0sIHZhbHVlWzFdLCB2YWx1ZVsyXSwgdmFsdWVbM10pO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLy8gYSAyRCBQb2ludCBvYmplY3RcbiAgICAgICAgY2FzZSAndjInOlxuICAgICAgICAgICAgZ2wudW5pZm9ybTJmKGxvY2F0aW9uLCB2YWx1ZS54LCB2YWx1ZS55KTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIC8vIGEgM0QgUG9pbnQgb2JqZWN0XG4gICAgICAgIGNhc2UgJ3YzJzpcbiAgICAgICAgICAgIGdsLnVuaWZvcm0zZihsb2NhdGlvbiwgdmFsdWUueCwgdmFsdWUueSwgdmFsdWUueik7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAvLyBhIDREIFBvaW50IG9iamVjdFxuICAgICAgICBjYXNlICd2NCc6XG4gICAgICAgICAgICBnbC51bmlmb3JtNGYobG9jYXRpb24sIHZhbHVlLngsIHZhbHVlLnksIHZhbHVlLnosIHZhbHVlLncpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLy8gSW50MzJBcnJheSBvciBKUyBBcnJheVxuICAgICAgICBjYXNlICcxaXYnOlxuICAgICAgICAgICAgZ2wudW5pZm9ybTFpdihsb2NhdGlvbiwgdmFsdWUpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLy8gSW50MzJBcnJheSBvciBKUyBBcnJheVxuICAgICAgICBjYXNlICcyaXYnOlxuICAgICAgICAgICAgZ2wudW5pZm9ybTJpdihsb2NhdGlvbiwgdmFsdWUpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLy8gSW50MzJBcnJheSBvciBKUyBBcnJheVxuICAgICAgICBjYXNlICczaXYnOlxuICAgICAgICAgICAgZ2wudW5pZm9ybTNpdihsb2NhdGlvbiwgdmFsdWUpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLy8gSW50MzJBcnJheSBvciBKUyBBcnJheVxuICAgICAgICBjYXNlICc0aXYnOlxuICAgICAgICAgICAgZ2wudW5pZm9ybTRpdihsb2NhdGlvbiwgdmFsdWUpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLy8gRmxvYXQzMkFycmF5IG9yIEpTIEFycmF5XG4gICAgICAgIGNhc2UgJzFmdic6XG4gICAgICAgICAgICBnbC51bmlmb3JtMWZ2KGxvY2F0aW9uLCB2YWx1ZSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAvLyBGbG9hdDMyQXJyYXkgb3IgSlMgQXJyYXlcbiAgICAgICAgY2FzZSAnMmZ2JzpcbiAgICAgICAgICAgIGdsLnVuaWZvcm0yZnYobG9jYXRpb24sIHZhbHVlKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIC8vIEZsb2F0MzJBcnJheSBvciBKUyBBcnJheVxuICAgICAgICBjYXNlICczZnYnOlxuICAgICAgICAgICAgZ2wudW5pZm9ybTNmdihsb2NhdGlvbiwgdmFsdWUpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLy8gRmxvYXQzMkFycmF5IG9yIEpTIEFycmF5XG4gICAgICAgIGNhc2UgJzRmdic6XG4gICAgICAgICAgICBnbC51bmlmb3JtNGZ2KGxvY2F0aW9uLCB2YWx1ZSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAvLyBGbG9hdDMyQXJyYXkgb3IgSlMgQXJyYXlcbiAgICAgICAgY2FzZSAnbTInOlxuICAgICAgICBjYXNlICdtYXQyJzpcbiAgICAgICAgY2FzZSAnTWF0cml4MmZ2JzpcbiAgICAgICAgICAgIGdsLnVuaWZvcm1NYXRyaXgyZnYobG9jYXRpb24sIHVuaWZvcm0udHJhbnNwb3NlLCB2YWx1ZSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAvLyBGbG9hdDMyQXJyYXkgb3IgSlMgQXJyYXlcbiAgICAgICAgY2FzZSAnbTMnOlxuICAgICAgICBjYXNlICdtYXQzJzpcbiAgICAgICAgY2FzZSAnTWF0cml4M2Z2JzpcblxuICAgICAgICAgICAgZ2wudW5pZm9ybU1hdHJpeDNmdihsb2NhdGlvbiwgdW5pZm9ybS50cmFuc3Bvc2UsIHZhbHVlKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIC8vIEZsb2F0MzJBcnJheSBvciBKUyBBcnJheVxuICAgICAgICBjYXNlICdtNCc6XG4gICAgICAgIGNhc2UgJ21hdDQnOlxuICAgICAgICBjYXNlICdNYXRyaXg0ZnYnOlxuICAgICAgICAgICAgZ2wudW5pZm9ybU1hdHJpeDRmdihsb2NhdGlvbiwgdW5pZm9ybS50cmFuc3Bvc2UsIHZhbHVlKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIC8vIGEgQ29sb3IgVmFsdWVcbiAgICAgICAgY2FzZSAnYyc6XG4gICAgICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJylcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB2YWx1ZSA9IHV0aWxzLmhleDJyZ2IodmFsdWUpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBnbC51bmlmb3JtM2YobG9jYXRpb24sIHZhbHVlWzBdLCB2YWx1ZVsxXSwgdmFsdWVbMl0pO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLy8gZmxhdCBhcnJheSBvZiBpbnRlZ2VycyAoSlMgb3IgdHlwZWQgYXJyYXkpXG4gICAgICAgIGNhc2UgJ2l2MSc6XG4gICAgICAgICAgICBnbC51bmlmb3JtMWl2KGxvY2F0aW9uLCB2YWx1ZSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAvLyBmbGF0IGFycmF5IG9mIGludGVnZXJzIHdpdGggMyB4IE4gc2l6ZSAoSlMgb3IgdHlwZWQgYXJyYXkpXG4gICAgICAgIGNhc2UgJ2l2JzpcbiAgICAgICAgICAgIGdsLnVuaWZvcm0zaXYobG9jYXRpb24sIHZhbHVlKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIC8vIGZsYXQgYXJyYXkgb2YgZmxvYXRzIChKUyBvciB0eXBlZCBhcnJheSlcbiAgICAgICAgY2FzZSAnZnYxJzpcbiAgICAgICAgICAgIGdsLnVuaWZvcm0xZnYobG9jYXRpb24sIHZhbHVlKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIC8vIGZsYXQgYXJyYXkgb2YgZmxvYXRzIHdpdGggMyB4IE4gc2l6ZSAoSlMgb3IgdHlwZWQgYXJyYXkpXG4gICAgICAgIGNhc2UgJ2Z2JzpcbiAgICAgICAgICAgIGdsLnVuaWZvcm0zZnYobG9jYXRpb24sIHZhbHVlKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIC8vIGFycmF5IG9mIDJEIFBvaW50IG9iamVjdHNcbiAgICAgICAgY2FzZSAndjJ2JzpcbiAgICAgICAgICAgIGlmICghdW5pZm9ybS5fYXJyYXkpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdW5pZm9ybS5fYXJyYXkgPSBuZXcgRmxvYXQzMkFycmF5KDIgKiB2YWx1ZS5sZW5ndGgpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBmb3IgKGkgPSAwLCBpbCA9IHZhbHVlLmxlbmd0aDsgaSA8IGlsOyArK2kpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdW5pZm9ybS5fYXJyYXlbaSAqIDJdICAgICAgID0gdmFsdWVbaV0ueDtcbiAgICAgICAgICAgICAgICB1bmlmb3JtLl9hcnJheVtpICogMiArIDFdICAgPSB2YWx1ZVtpXS55O1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBnbC51bmlmb3JtMmZ2KGxvY2F0aW9uLCB1bmlmb3JtLl9hcnJheSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAvLyBhcnJheSBvZiAzRCBQb2ludCBvYmplY3RzXG4gICAgICAgIGNhc2UgJ3Yzdic6XG4gICAgICAgICAgICBpZiAoIXVuaWZvcm0uX2FycmF5KVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHVuaWZvcm0uX2FycmF5ID0gbmV3IEZsb2F0MzJBcnJheSgzICogdmFsdWUubGVuZ3RoKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZm9yIChpID0gMCwgaWwgPSB2YWx1ZS5sZW5ndGg7IGkgPCBpbDsgKytpKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHVuaWZvcm0uX2FycmF5W2kgKiAzXSAgICAgICA9IHZhbHVlW2ldLng7XG4gICAgICAgICAgICAgICAgdW5pZm9ybS5fYXJyYXlbaSAqIDMgKyAxXSAgID0gdmFsdWVbaV0ueTtcbiAgICAgICAgICAgICAgICB1bmlmb3JtLl9hcnJheVtpICogMyArIDJdICAgPSB2YWx1ZVtpXS56O1xuXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGdsLnVuaWZvcm0zZnYobG9jYXRpb24sIHVuaWZvcm0uX2FycmF5KTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIC8vIGFycmF5IG9mIDREIFBvaW50IG9iamVjdHNcbiAgICAgICAgY2FzZSAndjR2JzpcbiAgICAgICAgICAgIGlmICghdW5pZm9ybS5fYXJyYXkpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdW5pZm9ybS5fYXJyYXkgPSBuZXcgRmxvYXQzMkFycmF5KDQgKiB2YWx1ZS5sZW5ndGgpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBmb3IgKGkgPSAwLCBpbCA9IHZhbHVlLmxlbmd0aDsgaSA8IGlsOyArK2kpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdW5pZm9ybS5fYXJyYXlbaSAqIDRdICAgICAgID0gdmFsdWVbaV0ueDtcbiAgICAgICAgICAgICAgICB1bmlmb3JtLl9hcnJheVtpICogNCArIDFdICAgPSB2YWx1ZVtpXS55O1xuICAgICAgICAgICAgICAgIHVuaWZvcm0uX2FycmF5W2kgKiA0ICsgMl0gICA9IHZhbHVlW2ldLno7XG4gICAgICAgICAgICAgICAgdW5pZm9ybS5fYXJyYXlbaSAqIDQgKyAzXSAgID0gdmFsdWVbaV0udztcblxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBnbC51bmlmb3JtNGZ2KGxvY2F0aW9uLCB1bmlmb3JtLl9hcnJheSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAvLyBQSVhJLlRleHR1cmVcbiAgICAgICAgY2FzZSAndCc6XG4gICAgICAgIGNhc2UgJ3NhbXBsZXIyRCc6XG5cbiAgICAgICAgICAgIGlmICghdW5pZm9ybS52YWx1ZSB8fCAhdW5pZm9ybS52YWx1ZS5iYXNlVGV4dHVyZS5oYXNMb2FkZWQpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIGFjdGl2YXRlIHRoaXMgdGV4dHVyZVxuICAgICAgICAgICAgZ2wuYWN0aXZlVGV4dHVyZShnbFsnVEVYVFVSRScgKyB0aGlzLnRleHR1cmVDb3VudF0pO1xuXG4gICAgICAgICAgICB2YXIgdGV4dHVyZSA9IHVuaWZvcm0udmFsdWUuYmFzZVRleHR1cmUuX2dsVGV4dHVyZXNbZ2wuaWRdO1xuXG4gICAgICAgICAgICBpZiAoIXRleHR1cmUpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdGhpcy5pbml0U2FtcGxlcjJEKHVuaWZvcm0pO1xuXG4gICAgICAgICAgICAgICAgLy8gc2V0IHRoZSB0ZXh0dXIgdG8gdGhlIG5ld2x5IGNyZWF0ZWQgb25lLi5cbiAgICAgICAgICAgICAgICB0ZXh0dXJlID0gdW5pZm9ybS52YWx1ZS5iYXNlVGV4dHVyZS5fZ2xUZXh0dXJlc1tnbC5pZF07XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIGJpbmQgdGhlIHRleHR1cmVcbiAgICAgICAgICAgIGdsLmJpbmRUZXh0dXJlKGdsLlRFWFRVUkVfMkQsIHRleHR1cmUpO1xuXG4gICAgICAgICAgICAvLyBzZXQgdW5pZm9ybSB0byB0ZXh0dXJlIGluZGV4XG4gICAgICAgICAgICBnbC51bmlmb3JtMWkodW5pZm9ybS5fbG9jYXRpb24sIHRoaXMudGV4dHVyZUNvdW50KTtcblxuICAgICAgICAgICAgLy8gaW5jcmVtZW50IG5leHQgdGV4dHVyZSBpZFxuICAgICAgICAgICAgdGhpcy50ZXh0dXJlQ291bnQrKztcblxuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignUGl4aS5qcyBTaGFkZXIgV2FybmluZzogVW5rbm93biB1bmlmb3JtIHR5cGU6ICcgKyB1bmlmb3JtLnR5cGUpO1xuICAgIH1cbn07XG5cbi8qKlxuICogVXBkYXRlcyB0aGUgc2hhZGVyIHVuaWZvcm0gdmFsdWVzLlxuICpcbiAqL1xuU2hhZGVyLnByb3RvdHlwZS5zeW5jVW5pZm9ybXMgPSBmdW5jdGlvbiAoKVxue1xuICAgIHRoaXMudGV4dHVyZUNvdW50ID0gMTtcblxuICAgIGZvciAodmFyIGtleSBpbiB0aGlzLnVuaWZvcm1zKVxuICAgIHtcbiAgICAgICAgdGhpcy5zeW5jVW5pZm9ybSh0aGlzLnVuaWZvcm1zW2tleV0pO1xuICAgIH1cbn07XG5cblxuLyoqXG4gKiBJbml0aWFsaXNlcyBhIFNhbXBsZXIyRCB1bmlmb3JtICh3aGljaCBtYXkgb25seSBiZSBhdmFpbGFibGUgbGF0ZXIgb24gYWZ0ZXIgaW5pdFVuaWZvcm1zIG9uY2UgdGhlIHRleHR1cmUgaGFzIGxvYWRlZClcbiAqXG4gKi9cblNoYWRlci5wcm90b3R5cGUuaW5pdFNhbXBsZXIyRCA9IGZ1bmN0aW9uICh1bmlmb3JtKVxue1xuICAgIHZhciBnbCA9IHRoaXMuZ2w7XG5cbiAgICB2YXIgdGV4dHVyZSA9IHVuaWZvcm0udmFsdWUuYmFzZVRleHR1cmU7XG5cbiAgICBpZighdGV4dHVyZS5oYXNMb2FkZWQpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG5cblxuICAgIGlmICh1bmlmb3JtLnRleHR1cmVEYXRhKVxuICAgIHtcblxuICAgICAgICAvL1RPRE8gbW92ZSB0aGlzLi4uXG4gICAgICAgIHZhciBkYXRhID0gdW5pZm9ybS50ZXh0dXJlRGF0YTtcblxuICAgICAgICB0ZXh0dXJlLl9nbFRleHR1cmVzW2dsLmlkXSA9IGdsLmNyZWF0ZVRleHR1cmUoKTtcblxuICAgICAgICBnbC5iaW5kVGV4dHVyZShnbC5URVhUVVJFXzJELCB0ZXh0dXJlLl9nbFRleHR1cmVzW2dsLmlkXSk7XG5cbiAgICAgICAgZ2wucGl4ZWxTdG9yZWkoZ2wuVU5QQUNLX1BSRU1VTFRJUExZX0FMUEhBX1dFQkdMLCB0ZXh0dXJlLnByZW11bHRpcGxpZWRBbHBoYSk7XG4gICAgICAgIC8vIEdMVGV4dHVyZSA9IG1hZyBsaW5lYXIsIG1pbiBsaW5lYXJfbWlwbWFwX2xpbmVhciwgd3JhcCByZXBlYXQgKyBnbC5nZW5lcmF0ZU1pcG1hcChnbC5URVhUVVJFXzJEKTtcbiAgICAgICAgLy8gR0xUZXh0dXJlTGluZWFyID0gbWFnL21pbiBsaW5lYXIsIHdyYXAgY2xhbXBcbiAgICAgICAgLy8gR0xUZXh0dXJlTmVhcmVzdFJlcGVhdCA9IG1hZy9taW4gTkVBUkVTVCwgd3JhcCByZXBlYXRcbiAgICAgICAgLy8gR0xUZXh0dXJlTmVhcmVzdCA9IG1hZy9taW4gbmVhcmVzdCwgd3JhcCBjbGFtcFxuICAgICAgICAvLyBBdWRpb1RleHR1cmUgPSB3aGF0ZXZlciArIGx1bWluYW5jZSArIHdpZHRoIDUxMiwgaGVpZ2h0IDIsIGJvcmRlciAwXG4gICAgICAgIC8vIEtleVRleHR1cmUgPSB3aGF0ZXZlciArIGx1bWluYW5jZSArIHdpZHRoIDI1NiwgaGVpZ2h0IDIsIGJvcmRlciAwXG5cbiAgICAgICAgLy8gIG1hZ0ZpbHRlciBjYW4gYmU6IGdsLkxJTkVBUiwgZ2wuTElORUFSX01JUE1BUF9MSU5FQVIgb3IgZ2wuTkVBUkVTVFxuICAgICAgICAvLyAgd3JhcFMvVCBjYW4gYmU6IGdsLkNMQU1QX1RPX0VER0Ugb3IgZ2wuUkVQRUFUXG5cbiAgICAgICAgZ2wudGV4SW1hZ2UyRChnbC5URVhUVVJFXzJELCAwLCBkYXRhLmx1bWluYW5jZSA/IGdsLkxVTUlOQU5DRSA6IGdsLlJHQkEsIGdsLlJHQkEsIGdsLlVOU0lHTkVEX0JZVEUsIHRleHR1cmUuc291cmNlKTtcblxuICAgICAgICBnbC50ZXhQYXJhbWV0ZXJpKGdsLlRFWFRVUkVfMkQsIGdsLlRFWFRVUkVfTUFHX0ZJTFRFUiwgZGF0YS5tYWdGaWx0ZXIgPyBkYXRhLm1hZ0ZpbHRlciA6IGdsLkxJTkVBUiApO1xuICAgICAgICBnbC50ZXhQYXJhbWV0ZXJpKGdsLlRFWFRVUkVfMkQsIGdsLlRFWFRVUkVfTUlOX0ZJTFRFUiwgZGF0YS53cmFwUyA/IGRhdGEud3JhcFMgOiBnbC5DTEFNUF9UT19FREdFICk7XG5cbiAgICAgICAgZ2wudGV4UGFyYW1ldGVyaShnbC5URVhUVVJFXzJELCBnbC5URVhUVVJFX1dSQVBfVCwgZGF0YS53cmFwUyA/IGRhdGEud3JhcFMgOiBnbC5DTEFNUF9UT19FREdFKTtcbiAgICAgICAgZ2wudGV4UGFyYW1ldGVyaShnbC5URVhUVVJFXzJELCBnbC5URVhUVVJFX1dSQVBfUywgZGF0YS53cmFwVCA/IGRhdGEud3JhcFQgOiBnbC5DTEFNUF9UT19FREdFKTtcbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgdGhpcy5zaGFkZXJNYW5hZ2VyLnJlbmRlcmVyLnVwZGF0ZVRleHR1cmUodGV4dHVyZSk7XG4gICAgfVxufTtcblxuLyoqXG4gKiBEZXN0cm95cyB0aGUgc2hhZGVyLlxuICpcbiAqL1xuU2hhZGVyLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLmdsLmRlbGV0ZVByb2dyYW0odGhpcy5wcm9ncmFtKTtcblxuICAgIHRoaXMuZ2wgPSBudWxsO1xuICAgIHRoaXMudW5pZm9ybXMgPSBudWxsO1xuICAgIHRoaXMuYXR0cmlidXRlcyA9IG51bGw7XG5cbiAgICB0aGlzLnZlcnRleFNyYyA9IG51bGw7XG4gICAgdGhpcy5mcmFnbWVudFNyYyA9IG51bGw7XG59O1xuXG5TaGFkZXIucHJvdG90eXBlLl9nbENvbXBpbGUgPSBmdW5jdGlvbiAodHlwZSwgc3JjKVxue1xuICAgIHZhciBzaGFkZXIgPSB0aGlzLmdsLmNyZWF0ZVNoYWRlcih0eXBlKTtcblxuICAgIHRoaXMuZ2wuc2hhZGVyU291cmNlKHNoYWRlciwgc3JjKTtcbiAgICB0aGlzLmdsLmNvbXBpbGVTaGFkZXIoc2hhZGVyKTtcblxuICAgIGlmICghdGhpcy5nbC5nZXRTaGFkZXJQYXJhbWV0ZXIoc2hhZGVyLCB0aGlzLmdsLkNPTVBJTEVfU1RBVFVTKSlcbiAgICB7XG4gICAgICAgIGNvbnNvbGUubG9nKHRoaXMuZ2wuZ2V0U2hhZGVySW5mb0xvZyhzaGFkZXIpKTtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgcmV0dXJuIHNoYWRlcjtcbn07XG4iLCJ2YXIgU2hhZGVyID0gcmVxdWlyZSgnLi9TaGFkZXInKTtcblxuLyoqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAZXh0ZW5kcyBQSVhJLlNoYWRlclxuICogQHBhcmFtIHNoYWRlck1hbmFnZXIge1BJWEkuU2hhZGVyTWFuYWdlcn0gVGhlIHdlYmdsIHNoYWRlciBtYW5hZ2VyIHRoaXMgc2hhZGVyIHdvcmtzIGZvci5cbiAqIEBwYXJhbSBbdmVydGV4U3JjXSB7c3RyaW5nfSBUaGUgc291cmNlIG9mIHRoZSB2ZXJ0ZXggc2hhZGVyLlxuICogQHBhcmFtIFtmcmFnbWVudFNyY10ge3N0cmluZ30gVGhlIHNvdXJjZSBvZiB0aGUgZnJhZ21lbnQgc2hhZGVyLlxuICogQHBhcmFtIFtjdXN0b21Vbmlmb3Jtc10ge29iamVjdH0gQ3VzdG9tIHVuaWZvcm1zIHRvIHVzZSB0byBhdWdtZW50IHRoZSBidWlsdC1pbiBvbmVzLlxuICogQHBhcmFtIFtmcmFnbWVudFNyY10ge3N0cmluZ30gVGhlIHNvdXJjZSBvZiB0aGUgZnJhZ21lbnQgc2hhZGVyLlxuICovXG5mdW5jdGlvbiBUZXh0dXJlU2hhZGVyKHNoYWRlck1hbmFnZXIsIHZlcnRleFNyYywgZnJhZ21lbnRTcmMsIGN1c3RvbVVuaWZvcm1zLCBjdXN0b21BdHRyaWJ1dGVzKVxue1xuICAgIHZhciB1bmlmb3JtcyA9IHtcblxuICAgICAgICB1U2FtcGxlcjogICAgICAgICAgIHsgdHlwZTogJ3NhbXBsZXIyRCcsIHZhbHVlOiAwIH0sXG4gICAgICAgIHByb2plY3Rpb25NYXRyaXg6ICAgeyB0eXBlOiAnbWF0MycsIHZhbHVlOiBuZXcgRmxvYXQzMkFycmF5KFsxLCAwLCAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgMSwgMCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsIDAsIDFdKSB9XG4gICAgfTtcblxuICAgIGlmIChjdXN0b21Vbmlmb3JtcylcbiAgICB7XG4gICAgICAgIGZvciAodmFyIHUgaW4gY3VzdG9tVW5pZm9ybXMpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHVuaWZvcm1zW3VdID0gY3VzdG9tVW5pZm9ybXNbdV07XG4gICAgICAgIH1cbiAgICB9XG5cblxuICAgIHZhciBhdHRyaWJ1dGVzID0ge1xuICAgICAgICBhVmVydGV4UG9zaXRpb246ICAgIDAsXG4gICAgICAgIGFUZXh0dXJlQ29vcmQ6ICAgICAgMCxcbiAgICAgICAgYUNvbG9yOiAgICAgICAgICAgICAwXG4gICAgfTtcblxuICAgIGlmIChjdXN0b21BdHRyaWJ1dGVzKVxuICAgIHtcbiAgICAgICAgZm9yICh2YXIgYSBpbiBjdXN0b21BdHRyaWJ1dGVzKVxuICAgICAgICB7XG4gICAgICAgICAgICBhdHRyaWJ1dGVzW2FdID0gY3VzdG9tQXR0cmlidXRlc1thXTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoZSB2ZXJ0ZXggc2hhZGVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7c3RyaW5nfVxuICAgICAqL1xuICAgIHZlcnRleFNyYyA9IHZlcnRleFNyYyB8fCBUZXh0dXJlU2hhZGVyLmRlZmF1bHRWZXJ0ZXhTcmM7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgZnJhZ21lbnQgc2hhZGVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7c3RyaW5nfVxuICAgICAqL1xuICAgIGZyYWdtZW50U3JjID0gZnJhZ21lbnRTcmMgfHwgVGV4dHVyZVNoYWRlci5kZWZhdWx0RnJhZ21lbnRTcmM7XG5cbiAgICBTaGFkZXIuY2FsbCh0aGlzLCBzaGFkZXJNYW5hZ2VyLCB2ZXJ0ZXhTcmMsIGZyYWdtZW50U3JjLCB1bmlmb3JtcywgYXR0cmlidXRlcyk7XG59XG5cbi8vIGNvbnN0cnVjdG9yXG5UZXh0dXJlU2hhZGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoU2hhZGVyLnByb3RvdHlwZSk7XG5UZXh0dXJlU2hhZGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFRleHR1cmVTaGFkZXI7XG5tb2R1bGUuZXhwb3J0cyA9IFRleHR1cmVTaGFkZXI7XG5cbi8qKlxuICogVGhlIGRlZmF1bHQgdmVydGV4IHNoYWRlciBzb3VyY2VcbiAqXG4gKiBAc3RhdGljXG4gKiBAY29uc3RhbnRcbiAqL1xuVGV4dHVyZVNoYWRlci5kZWZhdWx0VmVydGV4U3JjID0gW1xuICAgICdwcmVjaXNpb24gbG93cCBmbG9hdDsnLFxuICAgICdhdHRyaWJ1dGUgdmVjMiBhVmVydGV4UG9zaXRpb247JyxcbiAgICAnYXR0cmlidXRlIHZlYzIgYVRleHR1cmVDb29yZDsnLFxuICAgICdhdHRyaWJ1dGUgdmVjNCBhQ29sb3I7JyxcblxuICAgICd1bmlmb3JtIG1hdDMgcHJvamVjdGlvbk1hdHJpeDsnLFxuXG4gICAgJ3ZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkOycsXG4gICAgJ3ZhcnlpbmcgdmVjNCB2Q29sb3I7JyxcblxuICAgICd2b2lkIG1haW4odm9pZCl7JyxcbiAgICAnICAgZ2xfUG9zaXRpb24gPSB2ZWM0KChwcm9qZWN0aW9uTWF0cml4ICogdmVjMyhhVmVydGV4UG9zaXRpb24sIDEuMCkpLnh5LCAwLjAsIDEuMCk7JyxcbiAgICAnICAgdlRleHR1cmVDb29yZCA9IGFUZXh0dXJlQ29vcmQ7JyxcbiAgICAnICAgdkNvbG9yID0gdmVjNChhQ29sb3IucmdiICogYUNvbG9yLmEsIGFDb2xvci5hKTsnLFxuICAgICd9J1xuXS5qb2luKCdcXG4nKTtcblxuLyoqXG4gKiBUaGUgZGVmYXVsdCBmcmFnbWVudCBzaGFkZXIgc291cmNlXG4gKlxuICogQHN0YXRpY1xuICogQGNvbnN0YW50XG4gKi9cblRleHR1cmVTaGFkZXIuZGVmYXVsdEZyYWdtZW50U3JjID0gW1xuICAgICdwcmVjaXNpb24gbG93cCBmbG9hdDsnLFxuXG4gICAgJ3ZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkOycsXG4gICAgJ3ZhcnlpbmcgdmVjNCB2Q29sb3I7JyxcblxuICAgICd1bmlmb3JtIHNhbXBsZXIyRCB1U2FtcGxlcjsnLFxuXG4gICAgJ3ZvaWQgbWFpbih2b2lkKXsnLFxuICAgICcgICBnbF9GcmFnQ29sb3IgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZUZXh0dXJlQ29vcmQpICogdkNvbG9yIDsnLFxuICAgICd9J1xuXS5qb2luKCdcXG4nKTtcbiIsInZhciBTaGFkZXIgPSByZXF1aXJlKCdwaXhpLWdsLWNvcmUnKS5HTFNoYWRlcjtcblxuLyoqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAZXh0ZW5kcyBQSVhJLlNoYWRlclxuICogQHBhcmFtIHNoYWRlck1hbmFnZXIge1BJWEkuU2hhZGVyTWFuYWdlcn0gVGhlIHdlYmdsIHNoYWRlciBtYW5hZ2VyIHRoaXMgc2hhZGVyIHdvcmtzIGZvci5cbiAqIEBwYXJhbSBbdmVydGV4U3JjXSB7c3RyaW5nfSBUaGUgc291cmNlIG9mIHRoZSB2ZXJ0ZXggc2hhZGVyLlxuICogQHBhcmFtIFtmcmFnbWVudFNyY10ge3N0cmluZ30gVGhlIHNvdXJjZSBvZiB0aGUgZnJhZ21lbnQgc2hhZGVyLlxuICogQHBhcmFtIFtjdXN0b21Vbmlmb3Jtc10ge29iamVjdH0gQ3VzdG9tIHVuaWZvcm1zIHRvIHVzZSB0byBhdWdtZW50IHRoZSBidWlsdC1pbiBvbmVzLlxuICogQHBhcmFtIFtmcmFnbWVudFNyY10ge3N0cmluZ30gVGhlIHNvdXJjZSBvZiB0aGUgZnJhZ21lbnQgc2hhZGVyLlxuICovXG5mdW5jdGlvbiBUZXh0dXJlU2hhZGVyKGdsKVxue1xuICAgIC8qKlxuICAgICAqIFRoZSB2ZXJ0ZXggc2hhZGVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7c3RyaW5nfVxuICAgICAqL1xuICAgIHZlcnRleFNyYyA9IFRleHR1cmVTaGFkZXIuZGVmYXVsdFZlcnRleFNyYztcblxuICAgIC8qKlxuICAgICAqIFRoZSBmcmFnbWVudCBzaGFkZXIuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtzdHJpbmd9XG4gICAgICovXG4gICAgZnJhZ21lbnRTcmMgPSBUZXh0dXJlU2hhZGVyLmRlZmF1bHRGcmFnbWVudFNyYztcblxuICAgIFNoYWRlci5jYWxsKHRoaXMsIGdsLCB2ZXJ0ZXhTcmMsIGZyYWdtZW50U3JjKTsvLywgdW5pZm9ybXMsIGF0dHJpYnV0ZXMpO1xuXG59XG5cbi8vIGNvbnN0cnVjdG9yXG5UZXh0dXJlU2hhZGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoU2hhZGVyLnByb3RvdHlwZSk7XG5UZXh0dXJlU2hhZGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFRleHR1cmVTaGFkZXI7XG5tb2R1bGUuZXhwb3J0cyA9IFRleHR1cmVTaGFkZXI7XG5cbi8qKlxuICogVGhlIGRlZmF1bHQgdmVydGV4IHNoYWRlciBzb3VyY2VcbiAqXG4gKiBAc3RhdGljXG4gKiBAY29uc3RhbnRcbiAqL1xuVGV4dHVyZVNoYWRlci5kZWZhdWx0VmVydGV4U3JjID0gW1xuICAgICdwcmVjaXNpb24gbG93cCBmbG9hdDsnLFxuICAgICdhdHRyaWJ1dGUgdmVjMiBhVmVydGV4UG9zaXRpb247JyxcbiAgICAnYXR0cmlidXRlIHZlYzIgYVRleHR1cmVDb29yZDsnLFxuICAgICdhdHRyaWJ1dGUgdmVjNCBhQ29sb3I7JyxcblxuICAgICd1bmlmb3JtIG1hdDMgcHJvamVjdGlvbk1hdHJpeDsnLFxuXG4gICAgJ3ZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkOycsXG4gICAgJ3ZhcnlpbmcgdmVjNCB2Q29sb3I7JyxcblxuICAgICd2b2lkIG1haW4odm9pZCl7JyxcbiAgICAnICAgZ2xfUG9zaXRpb24gPSB2ZWM0KChwcm9qZWN0aW9uTWF0cml4ICogdmVjMyhhVmVydGV4UG9zaXRpb24sIDEuMCkpLnh5LCAwLjAsIDEuMCk7JyxcbiAgICAnICAgdlRleHR1cmVDb29yZCA9IGFUZXh0dXJlQ29vcmQ7JyxcbiAgICAnICAgdkNvbG9yID0gdmVjNChhQ29sb3IucmdiICogYUNvbG9yLmEsIGFDb2xvci5hKTsnLFxuICAgICd9J1xuXS5qb2luKCdcXG4nKTtcblxuLyoqXG4gKiBUaGUgZGVmYXVsdCBmcmFnbWVudCBzaGFkZXIgc291cmNlXG4gKlxuICogQHN0YXRpY1xuICogQGNvbnN0YW50XG4gKi9cblRleHR1cmVTaGFkZXIuZGVmYXVsdEZyYWdtZW50U3JjID0gW1xuICAgICdwcmVjaXNpb24gbG93cCBmbG9hdDsnLFxuXG4gICAgJ3ZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkOycsXG4gICAgJ3ZhcnlpbmcgdmVjNCB2Q29sb3I7JyxcblxuICAgICd1bmlmb3JtIHNhbXBsZXIyRCB1U2FtcGxlcjsnLFxuXG4gICAgJ3ZvaWQgbWFpbih2b2lkKXsnLFxuICAgICcgICBnbF9GcmFnQ29sb3IgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZUZXh0dXJlQ29vcmQpICogdkNvbG9yIDsnLFxuICAgICd9J1xuXS5qb2luKCdcXG4nKTtcbiIsInZhciBXZWJHTE1hbmFnZXIgPSByZXF1aXJlKCcuLi9tYW5hZ2Vycy9XZWJHTE1hbmFnZXInKTtcblxuLyoqXG4gKiBCYXNlIGZvciBhIGNvbW1vbiBvYmplY3QgcmVuZGVyZXIgdGhhdCBjYW4gYmUgdXNlZCBhcyBhIHN5c3RlbSByZW5kZXJlciBwbHVnaW4uXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLldlYkdMTWFuYWdlclxuICogQG1lbWJlcm9mIFBJWElcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5XZWJHTFJlbmRlcmVyfSBUaGUgcmVuZGVyZXIgdGhpcyBvYmplY3QgcmVuZGVyZXIgd29ya3MgZm9yLlxuICovXG5mdW5jdGlvbiBPYmplY3RSZW5kZXJlcihyZW5kZXJlcilcbntcbiAgICBXZWJHTE1hbmFnZXIuY2FsbCh0aGlzLCByZW5kZXJlcik7XG59XG5cblxuT2JqZWN0UmVuZGVyZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShXZWJHTE1hbmFnZXIucHJvdG90eXBlKTtcbk9iamVjdFJlbmRlcmVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IE9iamVjdFJlbmRlcmVyO1xubW9kdWxlLmV4cG9ydHMgPSBPYmplY3RSZW5kZXJlcjtcblxuLyoqXG4gKiBTdGFydHMgdGhlIHJlbmRlcmVyIGFuZCBzZXRzIHRoZSBzaGFkZXJcbiAqXG4gKi9cbk9iamVjdFJlbmRlcmVyLnByb3RvdHlwZS5zdGFydCA9IGZ1bmN0aW9uICgpXG57XG4gICAgLy8gc2V0IHRoZSBzaGFkZXIuLlxufTtcblxuLyoqXG4gKiBTdG9wcyB0aGUgcmVuZGVyZXJcbiAqXG4gKi9cbk9iamVjdFJlbmRlcmVyLnByb3RvdHlwZS5zdG9wID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLmZsdXNoKCk7XG59O1xuXG4vKipcbiAqIGZsdXNoZXNcbiAqXG4gKi9cbk9iamVjdFJlbmRlcmVyLnByb3RvdHlwZS5mbHVzaCA9IGZ1bmN0aW9uICgpXG57XG4gICAgLy8gZmx1c2ghXG59O1xuXG4vKipcbiAqIFJlbmRlcnMgYW4gb2JqZWN0XG4gKlxuICogQHBhcmFtIG9iamVjdCB7UElYSS5EaXNwbGF5T2JqZWN0fSBUaGUgb2JqZWN0IHRvIHJlbmRlci5cbiAqL1xuT2JqZWN0UmVuZGVyZXIucHJvdG90eXBlLnJlbmRlciA9IGZ1bmN0aW9uIChvYmplY3QpIC8vIGpzaGludCB1bnVzZWQ6ZmFsc2VcbntcbiAgICAvLyByZW5kZXIgdGhlIG9iamVjdFxufTtcbiIsIi8qKlxuICogSGVscGVyIGNsYXNzIHRvIGNyZWF0ZSBhIHF1YWRcbiAqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gZ2wge1dlYkdMUmVuZGVyaW5nQ29udGV4dH0gVGhlIGdsIGNvbnRleHQgZm9yIHRoaXMgcXVhZCB0byB1c2UuXG4gKi9cbmZ1bmN0aW9uIFF1YWQoZ2wpXG57XG4gICAgLypcbiAgICAgKiB0aGUgY3VycmVudCBXZWJHTCBkcmF3aW5nIGNvbnRleHRcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1dlYkdMUmVuZGVyaW5nQ29udGV4dH1cbiAgICAgKi9cbiAgICB0aGlzLmdsID0gZ2w7XG5cbi8vICAgIHRoaXMudGV4dHVyZXMgPSBuZXcgVGV4dHVyZVV2cygpO1xuXG4gICAgLyoqXG4gICAgICogQW4gYXJyYXkgb2YgdmVydGljZXNcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge0Zsb2F0MzJBcnJheX1cbiAgICAgKi9cbiAgICB0aGlzLnZlcnRpY2VzID0gbmV3IEZsb2F0MzJBcnJheShbXG4gICAgICAgIDAsMCxcbiAgICAgICAgMjAwLDAsXG4gICAgICAgIDIwMCwyMDAsXG4gICAgICAgIDAsMjAwXG4gICAgXSk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgVXZzIG9mIHRoZSBxdWFkXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtGbG9hdDMyQXJyYXl9XG4gICAgICovXG4gICAgdGhpcy51dnMgPSBuZXcgRmxvYXQzMkFycmF5KFtcbiAgICAgICAgMCwwLFxuICAgICAgICAxLDAsXG4gICAgICAgIDEsMSxcbiAgICAgICAgMCwxXG4gICAgXSk7XG5cbi8vICAgIHZhciB3aGl0ZSA9ICgweEZGRkZGRiA+PiAxNikgKyAoMHhGRkZGRkYgJiAweGZmMDApICsgKCgweEZGRkZGRiAmIDB4ZmYpIDw8IDE2KSArICgxICogMjU1IDw8IDI0KTtcbiAgICAvL1RPRE8gY29udmVydCB0aGlzIHRvIGEgMzIgdW5zaWduZWQgaW50IGFycmF5XG4gICAgLyoqXG4gICAgICogVGhlIGNvbG9yIGNvbXBvbmVudHMgb2YgdGhlIHRyaWFuZ2xlc1xuICAgICAqXG4gICAgICogQG1lbWJlciB7RmxvYXQzMkFycmF5fVxuICAgICAqL1xuICAgIHRoaXMuY29sb3JzID0gbmV3IEZsb2F0MzJBcnJheShbXG4gICAgICAgIDEsMSwxLDEsXG4gICAgICAgIDEsMSwxLDEsXG4gICAgICAgIDEsMSwxLDEsXG4gICAgICAgIDEsMSwxLDFcbiAgICBdKTtcblxuICAgIC8qXG4gICAgICogQG1lbWJlciB7VWludDE2QXJyYXl9IEFuIGFycmF5IGNvbnRhaW5pbmcgdGhlIGluZGljZXMgb2YgdGhlIHZlcnRpY2VzXG4gICAgICovXG4gICAgdGhpcy5pbmRpY2VzID0gbmV3IFVpbnQxNkFycmF5KFtcbiAgICAgICAgMCwgMSwgMiwgMCwgMywgMlxuICAgIF0pO1xuXG4gICAgLypcbiAgICAgKiBAbWVtYmVyIHtXZWJHTEJ1ZmZlcn0gVGhlIHZlcnRleCBidWZmZXJcbiAgICAgKi9cbiAgICB0aGlzLnZlcnRleEJ1ZmZlciA9IGdsLmNyZWF0ZUJ1ZmZlcigpO1xuXG4gICAgLypcbiAgICAgKiBAbWVtYmVyIHtXZWJHTEJ1ZmZlcn0gVGhlIGluZGV4IGJ1ZmZlclxuICAgICAqL1xuICAgIHRoaXMuaW5kZXhCdWZmZXIgPSBnbC5jcmVhdGVCdWZmZXIoKTtcblxuICAgIGdsLmJpbmRCdWZmZXIoZ2wuQVJSQVlfQlVGRkVSLCB0aGlzLnZlcnRleEJ1ZmZlcik7XG4gICAgZ2wuYnVmZmVyRGF0YShnbC5BUlJBWV9CVUZGRVIsICg4ICsgOCArIDE2KSAqIDQsIGdsLkRZTkFNSUNfRFJBVyk7XG5cbiAgICBnbC5iaW5kQnVmZmVyKGdsLkVMRU1FTlRfQVJSQVlfQlVGRkVSLCB0aGlzLmluZGV4QnVmZmVyKTtcbiAgICBnbC5idWZmZXJEYXRhKGdsLkVMRU1FTlRfQVJSQVlfQlVGRkVSLCB0aGlzLmluZGljZXMsIGdsLlNUQVRJQ19EUkFXKTtcblxuICAgIHRoaXMudXBsb2FkKCk7XG59XG5cblF1YWQucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gUXVhZDtcblxuLyoqXG4gKiBNYXBzIHR3byBSZWN0YW5nbGUgdG8gdGhlIHF1YWRcbiAqIEBwYXJhbSByZWN0IHtQSVhJLlJlY3RhbmdsZX0gdGhlIGZpcnN0IHJlY3RhbmdsZVxuICogQHBhcmFtIHJlY3QyIHtQSVhJLlJlY3RhbmdsZX0gdGhlIHNlY29uZCByZWN0YW5nbGVcbiAqL1xuUXVhZC5wcm90b3R5cGUubWFwID0gZnVuY3Rpb24ocmVjdCwgcmVjdDIpXG57XG4gICAgdmFyIHggPSAwOyAvL3JlY3QyLnggLyByZWN0LndpZHRoO1xuICAgIHZhciB5ID0gMDsgLy9yZWN0Mi55IC8gcmVjdC5oZWlnaHQ7XG5cbiAgICB0aGlzLnV2c1swXSA9IHg7XG4gICAgdGhpcy51dnNbMV0gPSB5O1xuXG4gICAgdGhpcy51dnNbMl0gPSB4ICsgcmVjdDIud2lkdGggLyByZWN0LndpZHRoO1xuICAgIHRoaXMudXZzWzNdID0geTtcblxuICAgIHRoaXMudXZzWzRdID0geCArIHJlY3QyLndpZHRoIC8gcmVjdC53aWR0aDtcbiAgICB0aGlzLnV2c1s1XSA9IHkgKyByZWN0Mi5oZWlnaHQgLyByZWN0LmhlaWdodDtcblxuICAgIHRoaXMudXZzWzZdID0geDtcbiAgICB0aGlzLnV2c1s3XSA9IHkgKyByZWN0Mi5oZWlnaHQgLyByZWN0LmhlaWdodDtcblxuICAgIC8vLyAtLS0tLVxuICAgIHggPSByZWN0Mi54O1xuICAgIHkgPSByZWN0Mi55O1xuXG4gICAgdGhpcy52ZXJ0aWNlc1swXSA9IHg7XG4gICAgdGhpcy52ZXJ0aWNlc1sxXSA9IHk7XG5cbiAgICB0aGlzLnZlcnRpY2VzWzJdID0geCArIHJlY3QyLndpZHRoO1xuICAgIHRoaXMudmVydGljZXNbM10gPSB5O1xuXG4gICAgdGhpcy52ZXJ0aWNlc1s0XSA9IHggKyByZWN0Mi53aWR0aDtcbiAgICB0aGlzLnZlcnRpY2VzWzVdID0geSArIHJlY3QyLmhlaWdodDtcblxuICAgIHRoaXMudmVydGljZXNbNl0gPSB4O1xuICAgIHRoaXMudmVydGljZXNbN10gPSB5ICsgcmVjdDIuaGVpZ2h0O1xuXG4gICAgdGhpcy51cGxvYWQoKTtcbn07XG5cbi8qKlxuICogQmluZHMgdGhlIGJ1ZmZlciBhbmQgdXBsb2FkcyB0aGUgZGF0YVxuICovXG5RdWFkLnByb3RvdHlwZS51cGxvYWQgPSBmdW5jdGlvbigpXG57XG4gICAgdmFyIGdsID0gdGhpcy5nbDtcblxuICAgIC8vIFRPRE8gY291bGQgcHJvYmFibHkgYmUgcHVzaGVkIGludG8gb25lIHVwbG9hZCFcbiAgICBnbC5iaW5kQnVmZmVyKCBnbC5BUlJBWV9CVUZGRVIsIHRoaXMudmVydGV4QnVmZmVyICk7XG5cbiAgICBnbC5idWZmZXJTdWJEYXRhKGdsLkFSUkFZX0JVRkZFUiwgMCwgdGhpcy52ZXJ0aWNlcyk7XG5cbiAgICBnbC5idWZmZXJTdWJEYXRhKGdsLkFSUkFZX0JVRkZFUiwgOCAqIDQsIHRoaXMudXZzKTtcblxuICAgIGdsLmJ1ZmZlclN1YkRhdGEoZ2wuQVJSQVlfQlVGRkVSLCAoOCArIDgpICogNCwgdGhpcy5jb2xvcnMpO1xufTtcblxuUXVhZC5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uKClcbntcbiAgICB2YXIgZ2wgPSB0aGlzLmdsO1xuICAgIFxuICAgICBnbC5kZWxldGVCdWZmZXIodGhpcy52ZXJ0ZXhCdWZmZXIpO1xuICAgICBnbC5kZWxldGVCdWZmZXIodGhpcy5pbmRleEJ1ZmZlcik7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IFF1YWQ7XG5cblxuIiwidmFyIG1hdGggPSByZXF1aXJlKCcuLi8uLi8uLi9tYXRoJyksXG4gICAgdXRpbHMgPSByZXF1aXJlKCcuLi8uLi8uLi91dGlscycpLFxuICAgIENPTlNUID0gcmVxdWlyZSgnLi4vLi4vLi4vY29uc3QnKSxcbiAgICAgICAgXG4gICAgR0xUZXh0dXJlID0gcmVxdWlyZSgncGl4aS1nbC1jb3JlJykuR0xUZXh0dXJlLFxuICAgIEdMRnJhbWVidWZmZXIgPSByZXF1aXJlKCdwaXhpLWdsLWNvcmUnKS5HTEZyYW1lYnVmZmVyLFxuICAgIFxuICAgIFN0ZW5jaWxNYXNrU3RhY2sgPSByZXF1aXJlKCcuL1N0ZW5jaWxNYXNrU3RhY2snKTtcblxuLyoqXG4gKiBAYXV0aG9yIE1hdCBHcm92ZXMgaHR0cDovL21hdGdyb3Zlcy5jb20vIEBEb29ybWF0MjNcbiAqL1xuXG4vKipcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqIEBwYXJhbSBnbCB7V2ViR0xSZW5kZXJpbmdDb250ZXh0fSB0aGUgY3VycmVudCBXZWJHTCBkcmF3aW5nIGNvbnRleHRcbiAqIEBwYXJhbSB3aWR0aCB7bnVtYmVyfSB0aGUgaG9yaXpvbnRhbCByYW5nZSBvZiB0aGUgZmlsdGVyXG4gKiBAcGFyYW0gaGVpZ2h0IHtudW1iZXJ9IHRoZSB2ZXJ0aWNhbCByYW5nZSBvZiB0aGUgZmlsdGVyXG4gKiBAcGFyYW0gc2NhbGVNb2RlIHtudW1iZXJ9IFNlZSB7QGxpbmsgUElYSS5TQ0FMRV9NT0RFU30gZm9yIHBvc3NpYmxlIHZhbHVlc1xuICogQHBhcmFtIHJlc29sdXRpb24ge251bWJlcn0gdGhlIGN1cnJlbnQgcmVzb2x1dGlvblxuICogQHBhcmFtIHJvb3Qge2Jvb2xlYW59IFdoZXRoZXIgdGhpcyBvYmplY3QgaXMgdGhlIHJvb3QgZWxlbWVudCBvciBub3RcbiAqL1xudmFyIFJlbmRlclRhcmdldCA9IGZ1bmN0aW9uKGdsLCB3aWR0aCwgaGVpZ2h0LCBzY2FsZU1vZGUsIHJlc29sdXRpb24sIHJvb3QpXG57XG4gICAgLy9UT0RPIFJlc29sdXRpb24gY291bGQgZ28gaGVyZSAoIGVnIGxvdyByZXMgYmx1cnMgKVxuXG4gICAgLyoqXG4gICAgICogVGhlIGN1cnJlbnQgV2ViR0wgZHJhd2luZyBjb250ZXh0LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7V2ViR0xSZW5kZXJpbmdDb250ZXh0fVxuICAgICAqL1xuICAgIHRoaXMuZ2wgPSBnbDtcblxuICAgIC8vIG5leHQgdGltZSB0byBjcmVhdGUgYSBmcmFtZSBidWZmZXIgYW5kIHRleHR1cmVcblxuICAgIC8qKlxuICAgICAqIEEgZnJhbWUgYnVmZmVyXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtXZWJHTEZyYW1lQnVmZmVyfVxuICAgICAqL1xuICAgIHRoaXMuZnJhbWVCdWZmZXIgPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHRleHR1cmVcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuVGV4dHVyZX1cbiAgICAgKi9cbiAgICB0aGlzLnRleHR1cmUgPSBudWxsO1xuXG4gICAgdGhpcy5jbGVhckNvbG9yID0gWzAsIDAsIDAsIDBdO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHNpemUgb2YgdGhlIG9iamVjdCBhcyBhIHJlY3RhbmdsZVxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5SZWN0YW5nbGV9XG4gICAgICovXG4gICAgdGhpcy5zaXplID0gbmV3IG1hdGguUmVjdGFuZ2xlKDAsIDAsIDEsIDEpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGN1cnJlbnQgcmVzb2x1dGlvblxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMucmVzb2x1dGlvbiA9IHJlc29sdXRpb24gfHwgQ09OU1QuUkVTT0xVVElPTjtcblxuICAgIC8qKlxuICAgICAqIFRoZSBwcm9qZWN0aW9uIG1hdHJpeFxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5NYXRyaXh9XG4gICAgICovXG4gICAgdGhpcy5wcm9qZWN0aW9uTWF0cml4ID0gbmV3IG1hdGguTWF0cml4KCk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgb2JqZWN0J3MgdHJhbnNmb3JtXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLk1hdHJpeH1cbiAgICAgKi9cbiAgICB0aGlzLnRyYW5zZm9ybSA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgZnJhbWUuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlJlY3RhbmdsZX1cbiAgICAgKi9cbiAgICB0aGlzLmZyYW1lID0gbnVsbDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBzdGVuY2lsIGJ1ZmZlciBzdG9yZXMgbWFza2luZyBkYXRhIGZvciB0aGUgcmVuZGVyIHRhcmdldFxuICAgICAqXG4gICAgICogQG1lbWJlciB7V2ViR0xSZW5kZXJCdWZmZXJ9XG4gICAgICovXG4gICAgdGhpcy5zdGVuY2lsQnVmZmVyID0gbnVsbDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBkYXRhIHN0cnVjdHVyZSBmb3IgdGhlIHN0ZW5jaWwgbWFza3NcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuU3RlbmNpbE1hc2tTdGFja31cbiAgICAgKi9cbiAgICB0aGlzLnN0ZW5jaWxNYXNrU3RhY2sgPSBuZXcgU3RlbmNpbE1hc2tTdGFjaygpO1xuXG4gICAgLyoqXG4gICAgICogU3RvcmVzIGZpbHRlciBkYXRhIGZvciB0aGUgcmVuZGVyIHRhcmdldFxuICAgICAqXG4gICAgICogQG1lbWJlciB7b2JqZWN0W119XG4gICAgICovXG4gICAgdGhpcy5maWx0ZXJTdGFjayA9IFtcbiAgICAgICAge1xuICAgICAgICAgICAgcmVuZGVyVGFyZ2V0OnRoaXMsXG4gICAgICAgICAgICBmaWx0ZXI6W10sXG4gICAgICAgICAgICBib3VuZHM6dGhpcy5zaXplXG4gICAgICAgIH1cbiAgICBdO1xuXG5cbiAgICAvKipcbiAgICAgKiBUaGUgc2NhbGUgbW9kZS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCBQSVhJLlNDQUxFX01PREVTLkRFRkFVTFRcbiAgICAgKiBAc2VlIFBJWEkuU0NBTEVfTU9ERVNcbiAgICAgKi9cbiAgICB0aGlzLnNjYWxlTW9kZSA9IHNjYWxlTW9kZSB8fCBDT05TVC5TQ0FMRV9NT0RFUy5ERUZBVUxUO1xuXG4gICAgLyoqXG4gICAgICogV2hldGhlciB0aGlzIG9iamVjdCBpcyB0aGUgcm9vdCBlbGVtZW50IG9yIG5vdFxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKi9cbiAgICB0aGlzLnJvb3QgPSByb290O1xuXG4gICAgdGhpcy5mcmFtZUJ1ZmZlciA9IEdMRnJhbWVidWZmZXIuY3JlYXRlUkdCQShnbCwgMTAwLCAxMDApO1xuICAgIGlmKHRoaXMuZnJhbWVCdWZmZXIpdGhpcy5mcmFtZUJ1ZmZlci51bmJpbmQoKTtcblxuICAgLy8gdGhpcy5mcmFtZUJ1ZmZlciA9IHtmcmFtZWJ1ZmZlcjpudWxsLCBiaW5kOmZ1bmN0aW9uKCl7fSwgY2xlYXI6ZnVuY3Rpb24oKXt9LCByZXNpemU6ZnVuY3Rpb24oKXt9fS8vbmV3IEdMRnJhbWVidWZmZXIuY3JlYXRlUkdCQShnbCwgMTAwLCAxMDApO1xuXG5cblxuICAgIGlmICghdGhpcy5yb290KVxuICAgIHtcbiAgICAgICAgLypcbiAgICAgICAgICAgIEEgZnJhbWUgYnVmZmVyIG5lZWRzIGEgdGFyZ2V0IHRvIHJlbmRlciB0by4uXG4gICAgICAgICAgICBjcmVhdGUgYSB0ZXh0dXJlIGFuZCBiaW5kIGl0IGF0dGFjaCBpdCB0byB0aGUgZnJhbWVidWZmZXIuLlxuICAgICAgICAgKi9cbiAgICAgICAgXG4gICAgICAgIC8vIGNyZWF0ZSBhIHRleHR1cmUgdG8gYmluZCBhdHRhY2ggdG8gdGhlIGZyYW1lQnVmZmVyLi5cbiAgICAgICAgdmFyIHRleHR1cmUgPSBuZXcgR0xUZXh0dXJlKGdsKTtcblxuICAgICAgICB0ZXh0dXJlLmVuYWJsZUxpbmVhclNjYWxpbmcoKVxuICAgICAgICB0ZXh0dXJlLmVuYWJsZVdyYXBDbGFtcCgpXG5cbiAgICAgICAgdGhpcy5mcmFtZUJ1ZmZlci5lbmFibGVUZXh0dXJlKHRleHR1cmUpO1xuXG4gICAgICAgIC8vIFRPRE8gY2hhbmdlIVxuICAgICAgICAvLyB0aGlzIGlzIHVzZWQgYnkgdGhlIGJhc2UgdGV4dHVyZVxuICAgICAgICB0aGlzLnRleHR1cmUgPSB0ZXh0dXJlLnRleHR1cmU7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIC8vIG1ha2UgaXQgYSBudWxsIGZyYW1lYnVmZmVyLi5cbiAgICAgICAgdGhpcy5mcmFtZUJ1ZmZlci5mcmFtZWJ1ZmZlciA9IG51bGw7XG4gICAgfVxuXG4gICAgdGhpcy5yZXNpemUod2lkdGgsIGhlaWdodCk7XG59O1xuXG5SZW5kZXJUYXJnZXQucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gUmVuZGVyVGFyZ2V0O1xubW9kdWxlLmV4cG9ydHMgPSBSZW5kZXJUYXJnZXQ7XG5cbi8qKlxuICogQ2xlYXJzIHRoZSBmaWx0ZXIgdGV4dHVyZS5cbiAqXG4gKiBAcGFyYW0gW2JpbmQ9ZmFsc2VdIHtib29sZWFufSBTaG91bGQgd2UgYmluZCBvdXIgZnJhbWVidWZmZXIgYmVmb3JlIGNsZWFyaW5nP1xuICovXG5SZW5kZXJUYXJnZXQucHJvdG90eXBlLmNsZWFyID0gZnVuY3Rpb24oY2xlYXJDb2xvcilcbntcbiAgICB2YXIgY2MgPSBjbGVhckNvbG9yIHx8IHRoaXMuY2xlYXJDb2xvclxuICAgIHRoaXMuZnJhbWVCdWZmZXIuY2xlYXIoY2NbMF0sY2NbMV0sY2NbMl0sY2NbM10pLy9yLGcsYixhKTtcbn07XG5cbi8qKlxuICogQmluZHMgdGhlIHN0ZW5jaWwgYnVmZmVyLlxuICpcbiAqL1xuUmVuZGVyVGFyZ2V0LnByb3RvdHlwZS5hdHRhY2hTdGVuY2lsQnVmZmVyID0gZnVuY3Rpb24oKVxue1xuICAgIC8vVE9ETyBjaGVjayBpZiBzdGVuY2lsIGlzIGRvbmU/XG4gICAgLyoqXG4gICAgICogVGhlIHN0ZW5jaWwgYnVmZmVyIGlzIHVzZWQgZm9yIG1hc2tpbmcgaW4gcGl4aVxuICAgICAqIGxldHMgY3JlYXRlIG9uZSBhbmQgdGhlbiBhZGQgYXR0YWNoIGl0IHRvIHRoZSBmcmFtZWJ1ZmZlci4uXG4gICAgICovXG4gICAgaWYgKCF0aGlzLnJvb3QpXG4gICAge1xuICAgICAgICB0aGlzLmZyYW1lQnVmZmVyLmVuYWJsZVN0ZW5jaWwoKTtcbiAgICB9XG59O1xuXG4vKipcbiAqIEJpbmRzIHRoZSBidWZmZXJzIGFuZCBpbml0aWFsaXNlcyB0aGUgdmlld3BvcnQuXG4gKlxuICovXG5SZW5kZXJUYXJnZXQucHJvdG90eXBlLmFjdGl2YXRlID0gZnVuY3Rpb24oKVxue1xuICAgIC8vVE9PRCByZWZhY3RvciB1c2FnZSBvZiBmcmFtZS4uXG4gICAgdmFyIGdsID0gdGhpcy5nbDtcblxuICAgIHRoaXMuZnJhbWVCdWZmZXIuYmluZCgpO1xuXG5cbiAgICB2YXIgcHJvamVjdGlvbkZyYW1lID0gdGhpcy5mcmFtZSB8fCB0aGlzLnNpemU7XG5cbiAgICAvLyBUT0RPIGFkZCBhIGRpcnR5IGZsYWcgdG8gdGhpcyBvZiBhIHNldHRlciBmb3IgdGhlIGZyYW1lP1xuICAgIHRoaXMuY2FsY3VsYXRlUHJvamVjdGlvbiggcHJvamVjdGlvbkZyYW1lICk7XG5cbiAgICBpZih0aGlzLnRyYW5zZm9ybSlcbiAgICB7XG4gICAgICAgIHRoaXMucHJvamVjdGlvbk1hdHJpeC5hcHBlbmQodGhpcy50cmFuc2Zvcm0pO1xuICAgIH1cblxuICAgIGdsLnZpZXdwb3J0KDAsMCwgcHJvamVjdGlvbkZyYW1lLndpZHRoICogdGhpcy5yZXNvbHV0aW9uLCBwcm9qZWN0aW9uRnJhbWUuaGVpZ2h0ICogdGhpcy5yZXNvbHV0aW9uKTtcbn07XG5cbi8qKlxuICogVXBkYXRlcyB0aGUgcHJvamVjdGlvbiBtYXRyaXggYmFzZWQgb24gYSBwcm9qZWN0aW9uIGZyYW1lICh3aGljaCBpcyBhIHJlY3RhbmdsZSlcbiAqXG4gKi9cblJlbmRlclRhcmdldC5wcm90b3R5cGUuY2FsY3VsYXRlUHJvamVjdGlvbiA9IGZ1bmN0aW9uIChwcm9qZWN0aW9uRnJhbWUpXG57XG4gICAgdmFyIHBtID0gdGhpcy5wcm9qZWN0aW9uTWF0cml4O1xuXG4gICAgcG0uaWRlbnRpdHkoKTtcblxuICAgIGlmICghdGhpcy5yb290KVxuICAgIHtcbiAgICAgICAgcG0uYSA9IDEgLyBwcm9qZWN0aW9uRnJhbWUud2lkdGgqMjtcbiAgICAgICAgcG0uZCA9IDEgLyBwcm9qZWN0aW9uRnJhbWUuaGVpZ2h0KjI7XG5cbiAgICAgICAgcG0udHggPSAtMSAtIHByb2plY3Rpb25GcmFtZS54ICogcG0uYTtcbiAgICAgICAgcG0udHkgPSAtMSAtIHByb2plY3Rpb25GcmFtZS55ICogcG0uZDtcbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgcG0uYSA9IDEgLyBwcm9qZWN0aW9uRnJhbWUud2lkdGgqMjtcbiAgICAgICAgcG0uZCA9IC0xIC8gcHJvamVjdGlvbkZyYW1lLmhlaWdodCoyO1xuXG4gICAgICAgIHBtLnR4ID0gLTEgLSBwcm9qZWN0aW9uRnJhbWUueCAqIHBtLmE7XG4gICAgICAgIHBtLnR5ID0gMSAtIHByb2plY3Rpb25GcmFtZS55ICogcG0uZDtcbiAgICB9XG59O1xuXG4vKipcbiAqIFJlc2l6ZXMgdGhlIHRleHR1cmUgdG8gdGhlIHNwZWNpZmllZCB3aWR0aCBhbmQgaGVpZ2h0XG4gKlxuICogQHBhcmFtIHdpZHRoIHtOdW1iZXJ9IHRoZSBuZXcgd2lkdGggb2YgdGhlIHRleHR1cmVcbiAqIEBwYXJhbSBoZWlnaHQge051bWJlcn0gdGhlIG5ldyBoZWlnaHQgb2YgdGhlIHRleHR1cmVcbiAqL1xuUmVuZGVyVGFyZ2V0LnByb3RvdHlwZS5yZXNpemUgPSBmdW5jdGlvbiAod2lkdGgsIGhlaWdodClcbntcbiAgICB3aWR0aCA9IHdpZHRoIHwgMDtcbiAgICBoZWlnaHQgPSBoZWlnaHQgfCAwO1xuXG4gICAgaWYgKHRoaXMuc2l6ZS53aWR0aCA9PT0gd2lkdGggJiYgdGhpcy5zaXplLmhlaWdodCA9PT0gaGVpZ2h0KSBcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLnNpemUud2lkdGggPSB3aWR0aDtcbiAgICB0aGlzLnNpemUuaGVpZ2h0ID0gaGVpZ2h0O1xuXG4gICAgdGhpcy5mcmFtZUJ1ZmZlci5yZXNpemUod2lkdGggKiB0aGlzLnJlc29sdXRpb24sIGhlaWdodCAqIHRoaXMucmVzb2x1dGlvbik7XG4gICAgXG4gICAgdmFyIHByb2plY3Rpb25GcmFtZSA9IHRoaXMuZnJhbWUgfHwgdGhpcy5zaXplO1xuXG4gICAgdGhpcy5jYWxjdWxhdGVQcm9qZWN0aW9uKCBwcm9qZWN0aW9uRnJhbWUgKTtcbn07XG5cbi8qKlxuICogRGVzdHJveXMgdGhlIHJlbmRlciB0YXJnZXQuXG4gKlxuICovXG5SZW5kZXJUYXJnZXQucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoKVxue1xuICAgIHZhciBnbCA9IHRoaXMuZ2w7XG4gICAgXG4gICAgdGhpcy5mcmFtZUJ1ZmZlci5kZXN0cm95KCk7XG5cbiAgICB0aGlzLmZyYW1lQnVmZmVyID0gbnVsbDtcbiAgICB0aGlzLnRleHR1cmUgPSBudWxsO1xufTtcbiIsIi8qKlxuICogR2VuZXJpYyBNYXNrIFN0YWNrIGRhdGEgc3RydWN0dXJlXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKi9cbmZ1bmN0aW9uIFN0ZW5jaWxNYXNrU3RhY2soKVxue1xuXHQvKipcbiAgICAgKiBUaGUgYWN0dWFsIHN0YWNrXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHthbnlbXX1cbiAgICAgKi9cbiAgICB0aGlzLnN0ZW5jaWxTdGFjayA9IFtdO1xuXG4gICAgLyoqXG4gICAgICogVE9ETyBAYWx2aW5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICovXG4gICAgdGhpcy5yZXZlcnNlID0gdHJ1ZTtcblxuICAgIC8qKlxuICAgICAqIEludGVybmFsIGNvdW50XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy5jb3VudCA9IDA7XG59XG5cblN0ZW5jaWxNYXNrU3RhY2sucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gU3RlbmNpbE1hc2tTdGFjaztcbm1vZHVsZS5leHBvcnRzID0gU3RlbmNpbE1hc2tTdGFjaztcbiIsIkNPTlNUID0gcmVxdWlyZSgnLi4vLi4vLi4vY29uc3QnKTtcblxuLyoqXG4gKiBNYXBzIGdsIGJsZW5kIGNvbWJpbmF0aW9ucyB0byBXZWJHTFxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICovXG5mdW5jdGlvbiBtYXBXZWJHTEJsZW5kTW9kZXNUb1BpeGkoZ2wsIG9iamVjdClcbntcbiAgICBvYmplY3QgPSBvYmplY3QgfHwge307XG5cbiAgICAvL1RPRE8gLSBwcmVtdWx0aXBseSBhbHBoYSB3b3VsZCBiZSBkaWZmZXJlbnQuXG4gICAgLy9hZGQgYSBib29sZWFuIGZvciB0aGF0IVxuICAgIG9iamVjdFtDT05TVC5CTEVORF9NT0RFUy5OT1JNQUxdICAgICAgICA9IFtnbC5PTkUsICAgICAgIGdsLk9ORV9NSU5VU19TUkNfQUxQSEFdO1xuICAgIG9iamVjdFtDT05TVC5CTEVORF9NT0RFUy5BRERdICAgICAgICAgICA9IFtnbC5TUkNfQUxQSEEsIGdsLkRTVF9BTFBIQV07XG4gICAgb2JqZWN0W0NPTlNULkJMRU5EX01PREVTLk1VTFRJUExZXSAgICAgID0gW2dsLkRTVF9DT0xPUiwgZ2wuT05FX01JTlVTX1NSQ19BTFBIQV07XG4gICAgb2JqZWN0W0NPTlNULkJMRU5EX01PREVTLlNDUkVFTl0gICAgICAgID0gW2dsLlNSQ19BTFBIQSwgZ2wuT05FXTtcbiAgICBvYmplY3RbQ09OU1QuQkxFTkRfTU9ERVMuT1ZFUkxBWV0gICAgICAgPSBbZ2wuT05FLCAgICAgICBnbC5PTkVfTUlOVVNfU1JDX0FMUEhBXTtcbiAgICBvYmplY3RbQ09OU1QuQkxFTkRfTU9ERVMuREFSS0VOXSAgICAgICAgPSBbZ2wuT05FLCAgICAgICBnbC5PTkVfTUlOVVNfU1JDX0FMUEhBXTtcbiAgICBvYmplY3RbQ09OU1QuQkxFTkRfTU9ERVMuTElHSFRFTl0gICAgICAgPSBbZ2wuT05FLCAgICAgICBnbC5PTkVfTUlOVVNfU1JDX0FMUEhBXTtcbiAgICBvYmplY3RbQ09OU1QuQkxFTkRfTU9ERVMuQ09MT1JfRE9ER0VdICAgPSBbZ2wuT05FLCAgICAgICBnbC5PTkVfTUlOVVNfU1JDX0FMUEhBXTtcbiAgICBvYmplY3RbQ09OU1QuQkxFTkRfTU9ERVMuQ09MT1JfQlVSTl0gICAgPSBbZ2wuT05FLCAgICAgICBnbC5PTkVfTUlOVVNfU1JDX0FMUEhBXTtcbiAgICBvYmplY3RbQ09OU1QuQkxFTkRfTU9ERVMuSEFSRF9MSUdIVF0gICAgPSBbZ2wuT05FLCAgICAgICBnbC5PTkVfTUlOVVNfU1JDX0FMUEhBXTtcbiAgICBvYmplY3RbQ09OU1QuQkxFTkRfTU9ERVMuU09GVF9MSUdIVF0gICAgPSBbZ2wuT05FLCAgICAgICBnbC5PTkVfTUlOVVNfU1JDX0FMUEhBXTtcbiAgICBvYmplY3RbQ09OU1QuQkxFTkRfTU9ERVMuRElGRkVSRU5DRV0gICAgPSBbZ2wuT05FLCAgICAgICBnbC5PTkVfTUlOVVNfU1JDX0FMUEhBXTtcbiAgICBvYmplY3RbQ09OU1QuQkxFTkRfTU9ERVMuRVhDTFVTSU9OXSAgICAgPSBbZ2wuT05FLCAgICAgICBnbC5PTkVfTUlOVVNfU1JDX0FMUEhBXTtcbiAgICBvYmplY3RbQ09OU1QuQkxFTkRfTU9ERVMuSFVFXSAgICAgICAgICAgPSBbZ2wuT05FLCAgICAgICBnbC5PTkVfTUlOVVNfU1JDX0FMUEhBXTtcbiAgICBvYmplY3RbQ09OU1QuQkxFTkRfTU9ERVMuU0FUVVJBVElPTl0gICAgPSBbZ2wuT05FLCAgICAgICBnbC5PTkVfTUlOVVNfU1JDX0FMUEhBXTtcbiAgICBvYmplY3RbQ09OU1QuQkxFTkRfTU9ERVMuQ09MT1JdICAgICAgICAgPSBbZ2wuT05FLCAgICAgICBnbC5PTkVfTUlOVVNfU1JDX0FMUEhBXTtcbiAgICBvYmplY3RbQ09OU1QuQkxFTkRfTU9ERVMuTFVNSU5PU0lUWV0gICAgPSBbZ2wuT05FLCAgICAgICBnbC5PTkVfTUlOVVNfU1JDX0FMUEhBXTtcblxuICAgIHJldHVybiBvYmplY3Q7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gbWFwV2ViR0xCbGVuZE1vZGVzVG9QaXhpO1xuIiwiQ09OU1QgPSByZXF1aXJlKCcuLi8uLi8uLi9jb25zdCcpO1xuXG4vKipcbiAqIEdlbmVyaWMgTWFzayBTdGFjayBkYXRhIHN0cnVjdHVyZVxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICovXG5mdW5jdGlvbiBtYXBXZWJHTERyYXdNb2Rlc1RvUGl4aShnbCwgb2JqZWN0KVxue1xuXHRvYmplY3Q9IG9iamVjdCB8fCB7fTtcblxuICAgIG9iamVjdFtDT05TVC5EUkFXX01PREVTLlBPSU5UU10gICAgICAgICA9IGdsLlBPSU5UUztcbiAgICBvYmplY3RbQ09OU1QuRFJBV19NT0RFUy5MSU5FU10gICAgICAgICAgPSBnbC5MSU5FUztcbiAgICBvYmplY3RbQ09OU1QuRFJBV19NT0RFUy5MSU5FX0xPT1BdICAgICAgPSBnbC5MSU5FX0xPT1A7XG4gICAgb2JqZWN0W0NPTlNULkRSQVdfTU9ERVMuTElORV9TVFJJUF0gICAgID0gZ2wuTElORV9TVFJJUDtcbiAgICBvYmplY3RbQ09OU1QuRFJBV19NT0RFUy5UUklBTkdMRVNdICAgICAgPSBnbC5UUklBTkdMRVM7XG4gICAgb2JqZWN0W0NPTlNULkRSQVdfTU9ERVMuVFJJQU5HTEVfU1RSSVBdID0gZ2wuVFJJQU5HTEVfU1RSSVA7XG4gICAgb2JqZWN0W0NPTlNULkRSQVdfTU9ERVMuVFJJQU5HTEVfRkFOXSAgID0gZ2wuVFJJQU5HTEVfRkFOO1xuXG59XG5cbm1vZHVsZS5leHBvcnRzID0gbWFwV2ViR0xEcmF3TW9kZXNUb1BpeGk7XG4iLCJ2YXIgbWF0aCA9IHJlcXVpcmUoJy4uL21hdGgnKSxcbiAgICBUZXh0dXJlID0gcmVxdWlyZSgnLi4vdGV4dHVyZXMvVGV4dHVyZScpLFxuICAgIENvbnRhaW5lciA9IHJlcXVpcmUoJy4uL2Rpc3BsYXkvQ29udGFpbmVyJyksXG4gICAgQ2FudmFzVGludGVyID0gcmVxdWlyZSgnLi4vcmVuZGVyZXJzL2NhbnZhcy91dGlscy9DYW52YXNUaW50ZXInKSxcbiAgICB1dGlscyA9IHJlcXVpcmUoJy4uL3V0aWxzJyksXG4gICAgQ09OU1QgPSByZXF1aXJlKCcuLi9jb25zdCcpLFxuICAgIHRlbXBQb2ludCA9IG5ldyBtYXRoLlBvaW50KCk7XG5cbi8qKlxuICogVGhlIFNwcml0ZSBvYmplY3QgaXMgdGhlIGJhc2UgZm9yIGFsbCB0ZXh0dXJlZCBvYmplY3RzIHRoYXQgYXJlIHJlbmRlcmVkIHRvIHRoZSBzY3JlZW5cbiAqXG4gKiBBIHNwcml0ZSBjYW4gYmUgY3JlYXRlZCBkaXJlY3RseSBmcm9tIGFuIGltYWdlIGxpa2UgdGhpczpcbiAqXG4gKiBgYGBqc1xuICogdmFyIHNwcml0ZSA9IG5ldyBQSVhJLlNwcml0ZS5mcm9tSW1hZ2UoJ2Fzc2V0cy9pbWFnZS5wbmcnKTtcbiAqIGBgYFxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5Db250YWluZXJcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gdGV4dHVyZSB7UElYSS5UZXh0dXJlfSBUaGUgdGV4dHVyZSBmb3IgdGhpcyBzcHJpdGVcbiAqL1xuZnVuY3Rpb24gU3ByaXRlKHRleHR1cmUpXG57XG4gICAgQ29udGFpbmVyLmNhbGwodGhpcyk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYW5jaG9yIHNldHMgdGhlIG9yaWdpbiBwb2ludCBvZiB0aGUgdGV4dHVyZS5cbiAgICAgKiBUaGUgZGVmYXVsdCBpcyAwLDAgdGhpcyBtZWFucyB0aGUgdGV4dHVyZSdzIG9yaWdpbiBpcyB0aGUgdG9wIGxlZnRcbiAgICAgKiBTZXR0aW5nIHRoZSBhbmNob3IgdG8gMC41LDAuNSBtZWFucyB0aGUgdGV4dHVyZSdzIG9yaWdpbiBpcyBjZW50ZXJlZFxuICAgICAqIFNldHRpbmcgdGhlIGFuY2hvciB0byAxLDEgd291bGQgbWVhbiB0aGUgdGV4dHVyZSdzIG9yaWdpbiBwb2ludCB3aWxsIGJlIHRoZSBib3R0b20gcmlnaHQgY29ybmVyXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlBvaW50fVxuICAgICAqL1xuICAgIHRoaXMuYW5jaG9yID0gbmV3IG1hdGguUG9pbnQoKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSB0ZXh0dXJlIHRoYXQgdGhlIHNwcml0ZSBpcyB1c2luZ1xuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5UZXh0dXJlfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fdGV4dHVyZSA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgd2lkdGggb2YgdGhlIHNwcml0ZSAodGhpcyBpcyBpbml0aWFsbHkgc2V0IGJ5IHRoZSB0ZXh0dXJlKVxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fd2lkdGggPSAwO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGhlaWdodCBvZiB0aGUgc3ByaXRlICh0aGlzIGlzIGluaXRpYWxseSBzZXQgYnkgdGhlIHRleHR1cmUpXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9oZWlnaHQgPSAwO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHRpbnQgYXBwbGllZCB0byB0aGUgc3ByaXRlLiBUaGlzIGlzIGEgaGV4IHZhbHVlLiBBIHZhbHVlIG9mIDB4RkZGRkZGIHdpbGwgcmVtb3ZlIGFueSB0aW50IGVmZmVjdC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAweEZGRkZGRlxuICAgICAqL1xuICAgIHRoaXMudGludCA9IDB4RkZGRkZGO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGJsZW5kIG1vZGUgdG8gYmUgYXBwbGllZCB0byB0aGUgc3ByaXRlLiBBcHBseSBhIHZhbHVlIG9mIGBQSVhJLkJMRU5EX01PREVTLk5PUk1BTGAgdG8gcmVzZXQgdGhlIGJsZW5kIG1vZGUuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgUElYSS5CTEVORF9NT0RFUy5OT1JNQUxcbiAgICAgKiBAc2VlIFBJWEkuQkxFTkRfTU9ERVNcbiAgICAgKi9cbiAgICB0aGlzLmJsZW5kTW9kZSA9IENPTlNULkJMRU5EX01PREVTLk5PUk1BTDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBzaGFkZXIgdGhhdCB3aWxsIGJlIHVzZWQgdG8gcmVuZGVyIHRoZSBzcHJpdGUuIFNldCB0byBudWxsIHRvIHJlbW92ZSBhIGN1cnJlbnQgc2hhZGVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5BYnN0cmFjdEZpbHRlcnxQSVhJLlNoYWRlcn1cbiAgICAgKi9cbiAgICB0aGlzLnNoYWRlciA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBBbiBpbnRlcm5hbCBjYWNoZWQgdmFsdWUgb2YgdGhlIHRpbnQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMHhGRkZGRkZcbiAgICAgKi9cbiAgICB0aGlzLmNhY2hlZFRpbnQgPSAweEZGRkZGRjtcblxuICAgIC8vIGNhbGwgdGV4dHVyZSBzZXR0ZXJcbiAgICB0aGlzLnRleHR1cmUgPSB0ZXh0dXJlIHx8IFRleHR1cmUuRU1QVFk7XG4gICAgdGhpcy50ZXh0dXJlRGlydHkgPSB0cnVlXG4gICAgdGhpcy52ZXJ0ZXhEaXJ0eSA9IHRydWU7XG4gICAgdGhpcy52ZXJ0ZXhEYXRhID0gbmV3IEZsb2F0MzJBcnJheSg4KTtcbn1cblxuLy8gY29uc3RydWN0b3JcblNwcml0ZS5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKENvbnRhaW5lci5wcm90b3R5cGUpO1xuU3ByaXRlLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFNwcml0ZTtcbm1vZHVsZS5leHBvcnRzID0gU3ByaXRlO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhTcHJpdGUucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogVGhlIHdpZHRoIG9mIHRoZSBzcHJpdGUsIHNldHRpbmcgdGhpcyB3aWxsIGFjdHVhbGx5IG1vZGlmeSB0aGUgc2NhbGUgdG8gYWNoaWV2ZSB0aGUgdmFsdWUgc2V0XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuU3ByaXRlI1xuICAgICAqL1xuICAgIHdpZHRoOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIE1hdGguYWJzKHRoaXMuc2NhbGUueCkgKiB0aGlzLnRleHR1cmUuX2ZyYW1lLndpZHRoO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdmFyIHNpZ24gPSB1dGlscy5zaWduKHRoaXMuc2NhbGUueCkgfHwgMTtcbiAgICAgICAgICAgIHRoaXMuc2NhbGUueCA9IHNpZ24gKiB2YWx1ZSAvIHRoaXMudGV4dHVyZS5fZnJhbWUud2lkdGg7XG4gICAgICAgICAgICB0aGlzLl93aWR0aCA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFRoZSBoZWlnaHQgb2YgdGhlIHNwcml0ZSwgc2V0dGluZyB0aGlzIHdpbGwgYWN0dWFsbHkgbW9kaWZ5IHRoZSBzY2FsZSB0byBhY2hpZXZlIHRoZSB2YWx1ZSBzZXRcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5TcHJpdGUjXG4gICAgICovXG4gICAgaGVpZ2h0OiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuICBNYXRoLmFicyh0aGlzLnNjYWxlLnkpICogdGhpcy50ZXh0dXJlLl9mcmFtZS5oZWlnaHQ7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB2YXIgc2lnbiA9IHV0aWxzLnNpZ24odGhpcy5zY2FsZS55KSB8fCAxO1xuICAgICAgICAgICAgdGhpcy5zY2FsZS55ID0gc2lnbiAqIHZhbHVlIC8gdGhpcy50ZXh0dXJlLl9mcmFtZS5oZWlnaHQ7XG4gICAgICAgICAgICB0aGlzLl9oZWlnaHQgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBUaGUgdGV4dHVyZSB0aGF0IHRoZSBzcHJpdGUgaXMgdXNpbmdcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuVGV4dHVyZX1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5TcHJpdGUjXG4gICAgICovXG4gICAgdGV4dHVyZToge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiAgdGhpcy5fdGV4dHVyZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGlmICh0aGlzLl90ZXh0dXJlID09PSB2YWx1ZSlcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuX3RleHR1cmUgPSB2YWx1ZTtcbiAgICAgICAgICAgIHRoaXMuY2FjaGVkVGludCA9IDB4RkZGRkZGO1xuXG4gICAgICAgICAgICB0aGlzLnRleHR1cmVEaXJ0eSA9IHRydWU7XG5cbiAgICAgICAgICAgIGlmICh2YWx1ZSlcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAvLyB3YWl0IGZvciB0aGUgdGV4dHVyZSB0byBsb2FkXG4gICAgICAgICAgICAgICAgaWYgKHZhbHVlLmJhc2VUZXh0dXJlLmhhc0xvYWRlZClcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX29uVGV4dHVyZVVwZGF0ZSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICB2YWx1ZS5vbmNlKCd1cGRhdGUnLCB0aGlzLl9vblRleHR1cmVVcGRhdGUsIHRoaXMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn0pO1xuXG4vKipcbiAqIFdoZW4gdGhlIHRleHR1cmUgaXMgdXBkYXRlZCwgdGhpcyBldmVudCB3aWxsIGZpcmUgdG8gdXBkYXRlIHRoZSBzY2FsZSBhbmQgZnJhbWVcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5TcHJpdGUucHJvdG90eXBlLl9vblRleHR1cmVVcGRhdGUgPSBmdW5jdGlvbiAoKVxue1xuICAgIHRoaXMudGV4dHVyZURpcnR5ID0gdHJ1ZTtcblxuICAgIC8vIHNvIGlmIF93aWR0aCBpcyAwIHRoZW4gd2lkdGggd2FzIG5vdCBzZXQuLlxuICAgIGlmICh0aGlzLl93aWR0aClcbiAgICB7XG4gICAgICAgIHRoaXMuc2NhbGUueCA9IHV0aWxzLnNpZ24odGhpcy5zY2FsZS54KSAqIHRoaXMuX3dpZHRoIC8gdGhpcy50ZXh0dXJlLmZyYW1lLndpZHRoO1xuICAgIH1cblxuICAgIGlmICh0aGlzLl9oZWlnaHQpXG4gICAge1xuICAgICAgICB0aGlzLnNjYWxlLnkgPSB1dGlscy5zaWduKHRoaXMuc2NhbGUueSkgKiB0aGlzLl9oZWlnaHQgLyB0aGlzLnRleHR1cmUuZnJhbWUuaGVpZ2h0O1xuICAgIH1cbn07XG5cblNwcml0ZS5wcm90b3R5cGUuY2FjbHVsYXRlVmVydGljZXMgPSBmdW5jdGlvbiAoKVxue1xuXG4gICAgdmFyIHRleHR1cmUgPSB0aGlzLl90ZXh0dXJlLFxuICAgICAgICB3dCA9IHRoaXMud29ybGRUcmFuc2Zvcm0sXG4gICAgICAgIGEgPSB3dC5hLCBiID0gd3QuYiwgYyA9IHd0LmMsIGQgPSB3dC5kLCB0eCA9IHd0LnR4LCB0eSA9IHd0LnR5LFxuICAgICAgICB2ZXJ0ZXhEYXRhID0gdGhpcy52ZXJ0ZXhEYXRhLFxuICAgICAgICB3MCwgdzEsIGgwLCBoMSxcbiAgICAgICAgdHJpbSA9IHRleHR1cmUudHJpbTtcbiAgICBcbiAgICBpZiAodHJpbSlcbiAgICB7XG4gICAgICAgIC8vIGlmIHRoZSBzcHJpdGUgaXMgdHJpbW1lZCBhbmQgaXMgbm90IGEgdGlsaW5nc3ByaXRlIHRoZW4gd2UgbmVlZCB0byBhZGQgdGhlIGV4dHJhIHNwYWNlIGJlZm9yZSB0cmFuc2Zvcm1pbmcgdGhlIHNwcml0ZSBjb29yZHMuLlxuICAgICAgICB3MSA9IHRyaW0ueCAtIHRoaXMuYW5jaG9yLnggKiB0cmltLndpZHRoO1xuICAgICAgICB3MCA9IHcxICsgdGV4dHVyZS5jcm9wLndpZHRoO1xuXG4gICAgICAgIGgxID0gdHJpbS55IC0gdGhpcy5hbmNob3IueSAqIHRyaW0uaGVpZ2h0O1xuICAgICAgICBoMCA9IGgxICsgdGV4dHVyZS5jcm9wLmhlaWdodDtcblxuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICB3MCA9ICh0ZXh0dXJlLl9mcmFtZS53aWR0aCApICogKDEtdGhpcy5hbmNob3IueCk7XG4gICAgICAgIHcxID0gKHRleHR1cmUuX2ZyYW1lLndpZHRoICkgKiAtdGhpcy5hbmNob3IueDtcblxuICAgICAgICBoMCA9IHRleHR1cmUuX2ZyYW1lLmhlaWdodCAqICgxLXRoaXMuYW5jaG9yLnkpO1xuICAgICAgICBoMSA9IHRleHR1cmUuX2ZyYW1lLmhlaWdodCAqIC10aGlzLmFuY2hvci55O1xuICAgIH1cblxuICAgIC8vIHh5XG4gICAgdmVydGV4RGF0YVswXSA9IGEgKiB3MSArIGMgKiBoMSArIHR4O1xuICAgIHZlcnRleERhdGFbMV0gPSBkICogaDEgKyBiICogdzEgKyB0eTtcblxuICAgIC8vIHh5XG4gICAgdmVydGV4RGF0YVsyXSA9IGEgKiB3MCArIGMgKiBoMSArIHR4O1xuICAgIHZlcnRleERhdGFbM10gPSBkICogaDEgKyBiICogdzAgKyB0eTtcblxuICAgICAvLyB4eVxuICAgIHZlcnRleERhdGFbNF0gPSBhICogdzAgKyBjICogaDAgKyB0eDtcbiAgICB2ZXJ0ZXhEYXRhWzVdID0gZCAqIGgwICsgYiAqIHcwICsgdHk7XG5cbiAgICAvLyB4eVxuICAgIHZlcnRleERhdGFbNl0gPSBhICogdzEgKyBjICogaDAgKyB0eDtcbiAgICB2ZXJ0ZXhEYXRhWzddID0gZCAqIGgwICsgYiAqIHcxICsgdHk7XG5cblxufVxuXG4vKipcbipcbiogUmVuZGVycyB0aGUgb2JqZWN0IHVzaW5nIHRoZSBXZWJHTCByZW5kZXJlclxuKlxuKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcn1cbiogQHByaXZhdGVcbiovXG5TcHJpdGUucHJvdG90eXBlLl9yZW5kZXJXZWJHTCA9IGZ1bmN0aW9uIChyZW5kZXJlcilcbntcbiAgICBpZih0aGlzLnRleHR1cmVEaXJ0eSlcbiAgICB7XG4gICAgICAgIHRoaXMudGV4dHVyZURpcnR5ID0gZmFsc2U7XG5cbiAgICAgICAgdGhpcy5fb25UZXh0dXJlVXBkYXRlKCk7XG4gICAgICAgIFxuICAgICAgICB0aGlzLnZlcnRleERpcnR5ID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBpZih0aGlzLnZlcnRleERpcnR5KVxuICAgIHtcbiAgICAgICAgdGhpcy52ZXJ0ZXhEaXJ0eSA9IGZhbHNlO1xuXG4gICAgICAgIC8vIHNldCB0aGUgdmVydGV4IGRhdGFcbiAgICAgICAgdGhpcy5jYWNsdWxhdGVWZXJ0aWNlcygpO1xuXG4gICAgfVxuICAgIFxuICAgIHJlbmRlcmVyLnNldE9iamVjdFJlbmRlcmVyKHJlbmRlcmVyLnBsdWdpbnMuc3ByaXRlKTtcbiAgICByZW5kZXJlci5wbHVnaW5zLnNwcml0ZS5yZW5kZXIodGhpcyk7XG59O1xuXG4vKipcbiAqIFJldHVybnMgdGhlIGJvdW5kcyBvZiB0aGUgU3ByaXRlIGFzIGEgcmVjdGFuZ2xlLiBUaGUgYm91bmRzIGNhbGN1bGF0aW9uIHRha2VzIHRoZSB3b3JsZFRyYW5zZm9ybSBpbnRvIGFjY291bnQuXG4gKlxuICogQHBhcmFtIG1hdHJpeCB7UElYSS5NYXRyaXh9IHRoZSB0cmFuc2Zvcm1hdGlvbiBtYXRyaXggb2YgdGhlIHNwcml0ZVxuICogQHJldHVybiB7UElYSS5SZWN0YW5nbGV9IHRoZSBmcmFtaW5nIHJlY3RhbmdsZVxuICovXG5TcHJpdGUucHJvdG90eXBlLmdldEJvdW5kcyA9IGZ1bmN0aW9uIChtYXRyaXgpXG57XG4gICAgaWYoIXRoaXMuX2N1cnJlbnRCb3VuZHMpXG4gICAge1xuICAgICAgICBpZih0aGlzLnZlcnRleERpcnR5KVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnZlcnRleERpcnR5ID0gZmFsc2U7XG5cbiAgICAgICAgICAgIC8vIHNldCB0aGUgdmVydGV4IGRhdGFcbiAgICAgICAgICAgIHRoaXMuY2FjbHVsYXRlVmVydGljZXMoKTtcblxuICAgICAgICB9XG5cbiAgICAgICAgdmFyIG1pblgsXG4gICAgICAgICAgICBtYXhYLFxuICAgICAgICAgICAgbWluWSxcbiAgICAgICAgICAgIG1heFksXG4gICAgICAgICAgICB2ZXJ0ZXhEYXRhID0gdGhpcy52ZXJ0ZXhEYXRhO1xuXG4gICAgICAgIHZhciB4MSA9IHZlcnRleERhdGFbMF1cbiAgICAgICAgdmFyIHkxID0gdmVydGV4RGF0YVsxXVxuXG4gICAgICAgIHZhciB4MiA9IHZlcnRleERhdGFbMl1cbiAgICAgICAgdmFyIHkyID0gdmVydGV4RGF0YVszXVxuXG4gICAgICAgIHZhciB4MyA9IHZlcnRleERhdGFbNF1cbiAgICAgICAgdmFyIHkzID0gdmVydGV4RGF0YVs1XVxuXG4gICAgICAgIHZhciB4NCA9IHZlcnRleERhdGFbNl1cbiAgICAgICAgdmFyIHk0ID0gdmVydGV4RGF0YVs3XVxuXG4gICAgICAgIG1pblggPSB4MTtcbiAgICAgICAgbWluWCA9IHgyIDwgbWluWCA/IHgyIDogbWluWDtcbiAgICAgICAgbWluWCA9IHgzIDwgbWluWCA/IHgzIDogbWluWDtcbiAgICAgICAgbWluWCA9IHg0IDwgbWluWCA/IHg0IDogbWluWDtcblxuICAgICAgICBtaW5ZID0geTE7XG4gICAgICAgIG1pblkgPSB5MiA8IG1pblkgPyB5MiA6IG1pblk7XG4gICAgICAgIG1pblkgPSB5MyA8IG1pblkgPyB5MyA6IG1pblk7XG4gICAgICAgIG1pblkgPSB5NCA8IG1pblkgPyB5NCA6IG1pblk7XG5cbiAgICAgICAgbWF4WCA9IHgxO1xuICAgICAgICBtYXhYID0geDIgPiBtYXhYID8geDIgOiBtYXhYO1xuICAgICAgICBtYXhYID0geDMgPiBtYXhYID8geDMgOiBtYXhYO1xuICAgICAgICBtYXhYID0geDQgPiBtYXhYID8geDQgOiBtYXhYO1xuXG4gICAgICAgIG1heFkgPSB5MTtcbiAgICAgICAgbWF4WSA9IHkyID4gbWF4WSA/IHkyIDogbWF4WTtcbiAgICAgICAgbWF4WSA9IHkzID4gbWF4WSA/IHkzIDogbWF4WTtcbiAgICAgICAgbWF4WSA9IHk0ID4gbWF4WSA/IHk0IDogbWF4WTtcblxuICAgICAgICAvLyBjaGVjayBmb3IgY2hpbGRyZW5cbiAgICAgICAgaWYodGhpcy5jaGlsZHJlbi5sZW5ndGgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHZhciBjaGlsZEJvdW5kcyA9IHRoaXMuY29udGFpbmVyR2V0Qm91bmRzKCk7XG5cbiAgICAgICAgICAgIHcwID0gY2hpbGRCb3VuZHMueDtcbiAgICAgICAgICAgIHcxID0gY2hpbGRCb3VuZHMueCArIGNoaWxkQm91bmRzLndpZHRoO1xuICAgICAgICAgICAgaDAgPSBjaGlsZEJvdW5kcy55O1xuICAgICAgICAgICAgaDEgPSBjaGlsZEJvdW5kcy55ICsgY2hpbGRCb3VuZHMuaGVpZ2h0O1xuXG4gICAgICAgICAgICBtaW5YID0gKG1pblggPCB3MCkgPyBtaW5YIDogdzA7XG4gICAgICAgICAgICBtaW5ZID0gKG1pblkgPCBoMCkgPyBtaW5ZIDogaDA7XG5cbiAgICAgICAgICAgIG1heFggPSAobWF4WCA+IHcxKSA/IG1heFggOiB3MTtcbiAgICAgICAgICAgIG1heFkgPSAobWF4WSA+IGgxKSA/IG1heFkgOiBoMTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBib3VuZHMgPSB0aGlzLl9ib3VuZHM7XG5cbiAgICAgICAgYm91bmRzLnggPSBtaW5YO1xuICAgICAgICBib3VuZHMud2lkdGggPSBtYXhYIC0gbWluWDtcblxuICAgICAgICBib3VuZHMueSA9IG1pblk7XG4gICAgICAgIGJvdW5kcy5oZWlnaHQgPSBtYXhZIC0gbWluWTtcblxuICAgICAgICAvLyBzdG9yZSBhIHJlZmVyZW5jZSBzbyB0aGF0IGlmIHRoaXMgZnVuY3Rpb24gZ2V0cyBjYWxsZWQgYWdhaW4gaW4gdGhlIHJlbmRlciBjeWNsZSB3ZSBkbyBub3QgaGF2ZSB0byByZWNhbGN1bGF0ZVxuICAgICAgICB0aGlzLl9jdXJyZW50Qm91bmRzID0gYm91bmRzO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLl9jdXJyZW50Qm91bmRzO1xufTtcblxuLyoqXG4gKiBHZXRzIHRoZSBsb2NhbCBib3VuZHMgb2YgdGhlIHNwcml0ZSBvYmplY3QuXG4gKlxuICovXG5TcHJpdGUucHJvdG90eXBlLmdldExvY2FsQm91bmRzID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLl9ib3VuZHMueCA9IC10aGlzLl90ZXh0dXJlLl9mcmFtZS53aWR0aCAqIHRoaXMuYW5jaG9yLng7XG4gICAgdGhpcy5fYm91bmRzLnkgPSAtdGhpcy5fdGV4dHVyZS5fZnJhbWUuaGVpZ2h0ICogdGhpcy5hbmNob3IueTtcbiAgICB0aGlzLl9ib3VuZHMud2lkdGggPSB0aGlzLl90ZXh0dXJlLl9mcmFtZS53aWR0aDtcbiAgICB0aGlzLl9ib3VuZHMuaGVpZ2h0ID0gdGhpcy5fdGV4dHVyZS5fZnJhbWUuaGVpZ2h0O1xuICAgIHJldHVybiB0aGlzLl9ib3VuZHM7XG59O1xuXG4vKipcbiogVGVzdHMgaWYgYSBwb2ludCBpcyBpbnNpZGUgdGhpcyBzcHJpdGVcbipcbiogQHBhcmFtIHBvaW50IHtQSVhJLlBvaW50fSB0aGUgcG9pbnQgdG8gdGVzdFxuKiBAcmV0dXJuIHtib29sZWFufSB0aGUgcmVzdWx0IG9mIHRoZSB0ZXN0XG4qL1xuU3ByaXRlLnByb3RvdHlwZS5jb250YWluc1BvaW50ID0gZnVuY3Rpb24oIHBvaW50IClcbntcbiAgICB0aGlzLndvcmxkVHJhbnNmb3JtLmFwcGx5SW52ZXJzZShwb2ludCwgIHRlbXBQb2ludCk7XG5cbiAgICB2YXIgd2lkdGggPSB0aGlzLl90ZXh0dXJlLl9mcmFtZS53aWR0aDtcbiAgICB2YXIgaGVpZ2h0ID0gdGhpcy5fdGV4dHVyZS5fZnJhbWUuaGVpZ2h0O1xuICAgIHZhciB4MSA9IC13aWR0aCAqIHRoaXMuYW5jaG9yLng7XG4gICAgdmFyIHkxO1xuXG4gICAgaWYgKCB0ZW1wUG9pbnQueCA+IHgxICYmIHRlbXBQb2ludC54IDwgeDEgKyB3aWR0aCApXG4gICAge1xuICAgICAgICB5MSA9IC1oZWlnaHQgKiB0aGlzLmFuY2hvci55O1xuXG4gICAgICAgIGlmICggdGVtcFBvaW50LnkgPiB5MSAmJiB0ZW1wUG9pbnQueSA8IHkxICsgaGVpZ2h0IClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2U7XG59O1xuXG4vKipcbiogUmVuZGVycyB0aGUgb2JqZWN0IHVzaW5nIHRoZSBDYW52YXMgcmVuZGVyZXJcbipcbiogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLkNhbnZhc1JlbmRlcmVyfSBUaGUgcmVuZGVyZXJcbiogQHByaXZhdGVcbiovXG5TcHJpdGUucHJvdG90eXBlLl9yZW5kZXJDYW52YXMgPSBmdW5jdGlvbiAocmVuZGVyZXIpXG57XG4gICAgaWYgKHRoaXMudGV4dHVyZS5jcm9wLndpZHRoIDw9IDAgfHwgdGhpcy50ZXh0dXJlLmNyb3AuaGVpZ2h0IDw9IDApXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFyIGNvbXBvc2l0ZU9wZXJhdGlvbiA9IHJlbmRlcmVyLmJsZW5kTW9kZXNbdGhpcy5ibGVuZE1vZGVdO1xuICAgIGlmIChjb21wb3NpdGVPcGVyYXRpb24gIT09IHJlbmRlcmVyLmNvbnRleHQuZ2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uKVxuICAgIHtcbiAgICAgICAgcmVuZGVyZXIuY29udGV4dC5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb24gPSBjb21wb3NpdGVPcGVyYXRpb247XG4gICAgfVxuXG4gICAgLy8gIElnbm9yZSBudWxsIHNvdXJjZXNcbiAgICBpZiAodGhpcy50ZXh0dXJlLnZhbGlkKVxuICAgIHtcbiAgICAgICAgdmFyIHRleHR1cmUgPSB0aGlzLl90ZXh0dXJlLFxuICAgICAgICAgICAgd3QgPSB0aGlzLndvcmxkVHJhbnNmb3JtLFxuICAgICAgICAgICAgZHgsXG4gICAgICAgICAgICBkeSxcbiAgICAgICAgICAgIHdpZHRoLFxuICAgICAgICAgICAgaGVpZ2h0O1xuXG4gICAgICAgIHJlbmRlcmVyLmNvbnRleHQuZ2xvYmFsQWxwaGEgPSB0aGlzLndvcmxkQWxwaGE7XG5cbiAgICAgICAgLy8gSWYgc21vb3RoaW5nRW5hYmxlZCBpcyBzdXBwb3J0ZWQgYW5kIHdlIG5lZWQgdG8gY2hhbmdlIHRoZSBzbW9vdGhpbmcgcHJvcGVydHkgZm9yIHRoaXMgdGV4dHVyZVxuICAgICAgICB2YXIgc21vb3RoaW5nRW5hYmxlZCA9IHRleHR1cmUuYmFzZVRleHR1cmUuc2NhbGVNb2RlID09PSBDT05TVC5TQ0FMRV9NT0RFUy5MSU5FQVI7XG4gICAgICAgIGlmIChyZW5kZXJlci5zbW9vdGhQcm9wZXJ0eSAmJiByZW5kZXJlci5jb250ZXh0W3JlbmRlcmVyLnNtb290aFByb3BlcnR5XSAhPT0gc21vb3RoaW5nRW5hYmxlZClcbiAgICAgICAge1xuICAgICAgICAgICAgcmVuZGVyZXIuY29udGV4dFtyZW5kZXJlci5zbW9vdGhQcm9wZXJ0eV0gPSBzbW9vdGhpbmdFbmFibGVkO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gSWYgdGhlIHRleHR1cmUgaXMgdHJpbW1lZCB3ZSBvZmZzZXQgYnkgdGhlIHRyaW0geC95LCBvdGhlcndpc2Ugd2UgdXNlIHRoZSBmcmFtZSBkaW1lbnNpb25zXG5cbiAgICAgICAgaWYodGV4dHVyZS5yb3RhdGUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHdpZHRoID0gdGV4dHVyZS5jcm9wLmhlaWdodDtcbiAgICAgICAgICAgIGhlaWdodCA9IHRleHR1cmUuY3JvcC53aWR0aDtcblxuICAgICAgICAgICAgZHggPSAodGV4dHVyZS50cmltKSA/IHRleHR1cmUudHJpbS55IC0gdGhpcy5hbmNob3IueSAqIHRleHR1cmUudHJpbS5oZWlnaHQgOiB0aGlzLmFuY2hvci55ICogLXRleHR1cmUuX2ZyYW1lLmhlaWdodDtcbiAgICAgICAgICAgIGR5ID0gKHRleHR1cmUudHJpbSkgPyB0ZXh0dXJlLnRyaW0ueCAtIHRoaXMuYW5jaG9yLnggKiB0ZXh0dXJlLnRyaW0ud2lkdGggOiB0aGlzLmFuY2hvci54ICogLXRleHR1cmUuX2ZyYW1lLndpZHRoO1xuICAgICAgIFxuICAgICAgICAgICAgZHggKz0gd2lkdGg7XG5cbiAgICAgICAgICAgIHd0LnR4ID0gZHkgKiB3dC5hICsgZHggKiB3dC5jICsgd3QudHg7XG4gICAgICAgICAgICB3dC50eSA9IGR5ICogd3QuYiArIGR4ICogd3QuZCArIHd0LnR5O1xuXG4gICAgICAgICAgICB2YXIgdGVtcCA9IHd0LmE7XG4gICAgICAgICAgICB3dC5hICA9IC13dC5jO1xuICAgICAgICAgICAgd3QuYyAgPSAgdGVtcDtcblxuICAgICAgICAgICAgdGVtcCA9IHd0LmI7XG4gICAgICAgICAgICB3dC5iICA9IC13dC5kO1xuICAgICAgICAgICAgd3QuZCAgPSAgdGVtcDtcblxuICAgICAgICAgICAgLy8gdGhlIGFuY2hvciBoYXMgYWxyZWFkeSBiZWVuIGFwcGxpZWQgYWJvdmUsIHNvIGxldHMgc2V0IGl0IHRvIHplcm9cbiAgICAgICAgICAgIGR4ID0gMDtcbiAgICAgICAgICAgIGR5ID0gMDtcblxuICAgICAgICB9XG4gICAgICAgIGVsc2VcbiAgICAgICAge1xuICAgICAgICAgICAgd2lkdGggPSB0ZXh0dXJlLmNyb3Aud2lkdGg7XG4gICAgICAgICAgICBoZWlnaHQgPSB0ZXh0dXJlLmNyb3AuaGVpZ2h0O1xuXG4gICAgICAgICAgICBkeCA9ICh0ZXh0dXJlLnRyaW0pID8gdGV4dHVyZS50cmltLnggLSB0aGlzLmFuY2hvci54ICogdGV4dHVyZS50cmltLndpZHRoIDogdGhpcy5hbmNob3IueCAqIC10ZXh0dXJlLl9mcmFtZS53aWR0aDtcbiAgICAgICAgICAgIGR5ID0gKHRleHR1cmUudHJpbSkgPyB0ZXh0dXJlLnRyaW0ueSAtIHRoaXMuYW5jaG9yLnkgKiB0ZXh0dXJlLnRyaW0uaGVpZ2h0IDogdGhpcy5hbmNob3IueSAqIC10ZXh0dXJlLl9mcmFtZS5oZWlnaHQ7XG4gICAgICAgIH1cblxuXG5cbiAgICAgICAgLy8gQWxsb3cgZm9yIHBpeGVsIHJvdW5kaW5nXG4gICAgICAgIGlmIChyZW5kZXJlci5yb3VuZFBpeGVscylcbiAgICAgICAge1xuICAgICAgICAgICAgcmVuZGVyZXIuY29udGV4dC5zZXRUcmFuc2Zvcm0oXG4gICAgICAgICAgICAgICAgd3QuYSxcbiAgICAgICAgICAgICAgICB3dC5iLFxuICAgICAgICAgICAgICAgIHd0LmMsXG4gICAgICAgICAgICAgICAgd3QuZCxcbiAgICAgICAgICAgICAgICAod3QudHggKiByZW5kZXJlci5yZXNvbHV0aW9uKSB8IDAsXG4gICAgICAgICAgICAgICAgKHd0LnR5ICogcmVuZGVyZXIucmVzb2x1dGlvbikgfCAwXG4gICAgICAgICAgICApO1xuXG4gICAgICAgICAgICBkeCA9IGR4IHwgMDtcbiAgICAgICAgICAgIGR5ID0gZHkgfCAwO1xuICAgICAgICB9XG4gICAgICAgIGVsc2VcbiAgICAgICAge1xuXG4gICAgICAgICAgICByZW5kZXJlci5jb250ZXh0LnNldFRyYW5zZm9ybShcbiAgICAgICAgICAgICAgICB3dC5hLFxuICAgICAgICAgICAgICAgIHd0LmIsXG4gICAgICAgICAgICAgICAgd3QuYyxcbiAgICAgICAgICAgICAgICB3dC5kLFxuICAgICAgICAgICAgICAgIHd0LnR4ICogcmVuZGVyZXIucmVzb2x1dGlvbixcbiAgICAgICAgICAgICAgICB3dC50eSAqIHJlbmRlcmVyLnJlc29sdXRpb25cbiAgICAgICAgICAgICk7XG5cblxuICAgICAgICB9XG5cbiAgICAgICAgdmFyIHJlc29sdXRpb24gPSB0ZXh0dXJlLmJhc2VUZXh0dXJlLnJlc29sdXRpb247XG5cbiAgICAgICAgaWYgKHRoaXMudGludCAhPT0gMHhGRkZGRkYpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmNhY2hlZFRpbnQgIT09IHRoaXMudGludClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB0aGlzLmNhY2hlZFRpbnQgPSB0aGlzLnRpbnQ7XG5cbiAgICAgICAgICAgICAgICAvLyBUT0RPIGNsZWFuIHVwIGNhY2hpbmcgLSBob3cgdG8gY2xlYW4gdXAgdGhlIGNhY2hlcz9cbiAgICAgICAgICAgICAgICB0aGlzLnRpbnRlZFRleHR1cmUgPSBDYW52YXNUaW50ZXIuZ2V0VGludGVkVGV4dHVyZSh0aGlzLCB0aGlzLnRpbnQpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZW5kZXJlci5jb250ZXh0LmRyYXdJbWFnZShcbiAgICAgICAgICAgICAgICB0aGlzLnRpbnRlZFRleHR1cmUsXG4gICAgICAgICAgICAgICAgMCxcbiAgICAgICAgICAgICAgICAwLFxuICAgICAgICAgICAgICAgIHdpZHRoICogcmVzb2x1dGlvbixcbiAgICAgICAgICAgICAgICBoZWlnaHQgKiByZXNvbHV0aW9uLFxuICAgICAgICAgICAgICAgIGR4ICogcmVuZGVyZXIucmVzb2x1dGlvbixcbiAgICAgICAgICAgICAgICBkeSAqIHJlbmRlcmVyLnJlc29sdXRpb24sXG4gICAgICAgICAgICAgICAgd2lkdGggKiByZW5kZXJlci5yZXNvbHV0aW9uLFxuICAgICAgICAgICAgICAgIGhlaWdodCAqIHJlbmRlcmVyLnJlc29sdXRpb25cbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgICByZW5kZXJlci5jb250ZXh0LmRyYXdJbWFnZShcbiAgICAgICAgICAgICAgICB0ZXh0dXJlLmJhc2VUZXh0dXJlLnNvdXJjZSxcbiAgICAgICAgICAgICAgICB0ZXh0dXJlLmNyb3AueCAqIHJlc29sdXRpb24sXG4gICAgICAgICAgICAgICAgdGV4dHVyZS5jcm9wLnkgKiByZXNvbHV0aW9uLFxuICAgICAgICAgICAgICAgIHdpZHRoICogcmVzb2x1dGlvbixcbiAgICAgICAgICAgICAgICBoZWlnaHQgKiByZXNvbHV0aW9uLFxuICAgICAgICAgICAgICAgIGR4ICAqIHJlbmRlcmVyLnJlc29sdXRpb24sXG4gICAgICAgICAgICAgICAgZHkgICogcmVuZGVyZXIucmVzb2x1dGlvbixcbiAgICAgICAgICAgICAgICB3aWR0aCAqIHJlbmRlcmVyLnJlc29sdXRpb24sXG4gICAgICAgICAgICAgICAgaGVpZ2h0ICogcmVuZGVyZXIucmVzb2x1dGlvblxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgIH1cbn07XG5cbi8qKlxuICogRGVzdHJveXMgdGhpcyBzcHJpdGUgYW5kIG9wdGlvbmFsbHkgaXRzIHRleHR1cmVcbiAqXG4gKiBAcGFyYW0gW2Rlc3Ryb3lUZXh0dXJlPWZhbHNlXSB7Ym9vbGVhbn0gU2hvdWxkIGl0IGRlc3Ryb3kgdGhlIGN1cnJlbnQgdGV4dHVyZSBvZiB0aGUgc3ByaXRlIGFzIHdlbGxcbiAqIEBwYXJhbSBbZGVzdHJveUJhc2VUZXh0dXJlPWZhbHNlXSB7Ym9vbGVhbn0gU2hvdWxkIGl0IGRlc3Ryb3kgdGhlIGJhc2UgdGV4dHVyZSBvZiB0aGUgc3ByaXRlIGFzIHdlbGxcbiAqL1xuU3ByaXRlLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKGRlc3Ryb3lUZXh0dXJlLCBkZXN0cm95QmFzZVRleHR1cmUpXG57XG4gICAgQ29udGFpbmVyLnByb3RvdHlwZS5kZXN0cm95LmNhbGwodGhpcyk7XG5cbiAgICB0aGlzLmFuY2hvciA9IG51bGw7XG5cbiAgICBpZiAoZGVzdHJveVRleHR1cmUpXG4gICAge1xuICAgICAgICB0aGlzLl90ZXh0dXJlLmRlc3Ryb3koZGVzdHJveUJhc2VUZXh0dXJlKTtcbiAgICB9XG5cbiAgICB0aGlzLl90ZXh0dXJlID0gbnVsbDtcbiAgICB0aGlzLnNoYWRlciA9IG51bGw7XG59O1xuXG4vLyBzb21lIGhlbHBlciBmdW5jdGlvbnMuLlxuXG4vKipcbiAqIEhlbHBlciBmdW5jdGlvbiB0aGF0IGNyZWF0ZXMgYSBzcHJpdGUgdGhhdCB3aWxsIGNvbnRhaW4gYSB0ZXh0dXJlIGZyb20gdGhlIFRleHR1cmVDYWNoZSBiYXNlZCBvbiB0aGUgZnJhbWVJZFxuICogVGhlIGZyYW1lIGlkcyBhcmUgY3JlYXRlZCB3aGVuIGEgVGV4dHVyZSBwYWNrZXIgZmlsZSBoYXMgYmVlbiBsb2FkZWRcbiAqXG4gKiBAc3RhdGljXG4gKiBAcGFyYW0gZnJhbWVJZCB7c3RyaW5nfSBUaGUgZnJhbWUgSWQgb2YgdGhlIHRleHR1cmUgaW4gdGhlIGNhY2hlXG4gKiBAcGFyYW0gW2Nyb3Nzb3JpZ2luPShhdXRvKV0ge2Jvb2xlYW59IGlmIHlvdSB3YW50IHRvIHNwZWNpZnkgdGhlIGNyb3NzLW9yaWdpbiBwYXJhbWV0ZXJcbiAqIEBwYXJhbSBbc2NhbGVNb2RlPVBJWEkuU0NBTEVfTU9ERVMuREVGQVVMVF0ge251bWJlcn0gaWYgeW91IHdhbnQgdG8gc3BlY2lmeSB0aGUgc2NhbGUgbW9kZSwgc2VlIHtAbGluayBQSVhJLlNDQUxFX01PREVTfSBmb3IgcG9zc2libGUgdmFsdWVzXG4gKiBAcmV0dXJuIHtQSVhJLlNwcml0ZX0gQSBuZXcgU3ByaXRlIHVzaW5nIGEgdGV4dHVyZSBmcm9tIHRoZSB0ZXh0dXJlIGNhY2hlIG1hdGNoaW5nIHRoZSBmcmFtZUlkXG4gKi9cblNwcml0ZS5mcm9tRnJhbWUgPSBmdW5jdGlvbiAoZnJhbWVJZClcbntcbiAgICB2YXIgdGV4dHVyZSA9IHV0aWxzLlRleHR1cmVDYWNoZVtmcmFtZUlkXTtcblxuICAgIGlmICghdGV4dHVyZSlcbiAgICB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignVGhlIGZyYW1lSWQgXCInICsgZnJhbWVJZCArICdcIiBkb2VzIG5vdCBleGlzdCBpbiB0aGUgdGV4dHVyZSBjYWNoZScpO1xuICAgIH1cblxuICAgIHJldHVybiBuZXcgU3ByaXRlKHRleHR1cmUpO1xufTtcblxuLyoqXG4gKiBIZWxwZXIgZnVuY3Rpb24gdGhhdCBjcmVhdGVzIGEgc3ByaXRlIHRoYXQgd2lsbCBjb250YWluIGEgdGV4dHVyZSBiYXNlZCBvbiBhbiBpbWFnZSB1cmxcbiAqIElmIHRoZSBpbWFnZSBpcyBub3QgaW4gdGhlIHRleHR1cmUgY2FjaGUgaXQgd2lsbCBiZSBsb2FkZWRcbiAqXG4gKiBAc3RhdGljXG4gKiBAcGFyYW0gaW1hZ2VJZCB7c3RyaW5nfSBUaGUgaW1hZ2UgdXJsIG9mIHRoZSB0ZXh0dXJlXG4gKiBAcmV0dXJuIHtQSVhJLlNwcml0ZX0gQSBuZXcgU3ByaXRlIHVzaW5nIGEgdGV4dHVyZSBmcm9tIHRoZSB0ZXh0dXJlIGNhY2hlIG1hdGNoaW5nIHRoZSBpbWFnZSBpZFxuICovXG5TcHJpdGUuZnJvbUltYWdlID0gZnVuY3Rpb24gKGltYWdlSWQsIGNyb3Nzb3JpZ2luLCBzY2FsZU1vZGUpXG57XG4gICAgcmV0dXJuIG5ldyBTcHJpdGUoVGV4dHVyZS5mcm9tSW1hZ2UoaW1hZ2VJZCwgY3Jvc3NvcmlnaW4sIHNjYWxlTW9kZSkpO1xufTtcbiIsInZhciBPYmplY3RSZW5kZXJlciA9IHJlcXVpcmUoJy4uLy4uL3JlbmRlcmVycy93ZWJnbC91dGlscy9PYmplY3RSZW5kZXJlcicpLFxuICAgIFdlYkdMUmVuZGVyZXIgPSByZXF1aXJlKCcuLi8uLi9yZW5kZXJlcnMvd2ViZ2wvV2ViR0xSZW5kZXJlcicpLFxuICAgIFRleHR1cmVTaGFkZXIgPSByZXF1aXJlKCcuLi8uLi9yZW5kZXJlcnMvd2ViZ2wvc2hhZGVycy9fVGV4dHVyZVNoYWRlcicpLFxuICAgIGNyZWF0ZUluZGljZXNGb3JRdWFkcyA9IHJlcXVpcmUoJy4uLy4uL3V0aWxzL2NyZWF0ZUluZGljZXNGb3JRdWFkcycpLFxuICAgIGdlbmVyYXRlTXVsdGlUZXh0dXJlU2hhZGVyID0gcmVxdWlyZSgnLi9nZW5lcmF0ZU11bHRpVGV4dHVyZVNoYWRlcicpLFxuICAgIENPTlNUID0gcmVxdWlyZSgnLi4vLi4vY29uc3QnKSxcbiAgICBnbENvcmUgPSByZXF1aXJlKCdwaXhpLWdsLWNvcmUnKTtcblxuLyoqXG4gKiBAYXV0aG9yIE1hdCBHcm92ZXNcbiAqXG4gKiBCaWcgdGhhbmtzIHRvIHRoZSB2ZXJ5IGNsZXZlciBNYXR0IERlc0xhdXJpZXJzIDxtYXR0ZGVzbD4gaHR0cHM6Ly9naXRodWIuY29tL21hdHRkZXNsL1xuICogZm9yIGNyZWF0aW5nIHRoZSBvcmlnaW5hbCBwaXhpIHZlcnNpb24hXG4gKiBBbHNvIGEgdGhhbmtzIHRvIGh0dHBzOi8vZ2l0aHViLmNvbS9iY2hldmFsaWVyIGZvciB0d2Vha2luZyB0aGUgdGludCBhbmQgYWxwaGEgc28gdGhhdCB0aGV5IG5vdyBzaGFyZSA0IGJ5dGVzIG9uIHRoZSB2ZXJ0ZXggYnVmZmVyXG4gKlxuICogSGVhdmlseSBpbnNwaXJlZCBieSBMaWJHRFgncyBTcHJpdGVSZW5kZXJlcjpcbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS9saWJnZHgvbGliZ2R4L2Jsb2IvbWFzdGVyL2dkeC9zcmMvY29tL2JhZGxvZ2ljL2dkeC9ncmFwaGljcy9nMmQvU3ByaXRlUmVuZGVyZXIuamF2YVxuICovXG5cbi8qKlxuICogUmVuZGVyZXIgZGVkaWNhdGVkIHRvIGRyYXdpbmcgYW5kIGJhdGNoaW5nIHNwcml0ZXMuXG4gKlxuICogQGNsYXNzXG4gKiBAcHJpdmF0ZVxuICogQG1lbWJlcm9mIFBJWElcbiAqIEBleHRlbmRzIFBJWEkuT2JqZWN0UmVuZGVyZXJcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5XZWJHTFJlbmRlcmVyfSBUaGUgcmVuZGVyZXIgdGhpcyBzcHJpdGUgYmF0Y2ggd29ya3MgZm9yLlxuICovXG5mdW5jdGlvbiBTcHJpdGVSZW5kZXJlcihyZW5kZXJlcilcbntcbiAgICBPYmplY3RSZW5kZXJlci5jYWxsKHRoaXMsIHJlbmRlcmVyKTtcblxuICAgIC8qKlxuICAgICAqIE51bWJlciBvZiB2YWx1ZXMgc2VudCBpbiB0aGUgdmVydGV4IGJ1ZmZlci5cbiAgICAgKiBwb3NpdGlvblgsIHBvc2l0aW9uWSwgY29sb3JSLCBjb2xvckcsIGNvbG9yQiA9IDVcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLnZlcnRTaXplID0gNTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBzaXplIG9mIHRoZSB2ZXJ0ZXggaW5mb3JtYXRpb24gaW4gYnl0ZXMuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy52ZXJ0Qnl0ZVNpemUgPSB0aGlzLnZlcnRTaXplICogNDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBudW1iZXIgb2YgaW1hZ2VzIGluIHRoZSBTcHJpdGVCYXRjaCBiZWZvcmUgaXQgZmx1c2hlcy5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLnNpemUgPSBDT05TVC5TUFJJVEVfQkFUQ0hfU0laRTsgLy8gMjAwMCBpcyBhIG5pY2UgYmFsYW5jZSBiZXR3ZWVuIG1vYmlsZSAvIGRlc2t0b3BcblxuICAgIC8vIHRoZSB0b3RhbCBudW1iZXIgb2YgYnl0ZXMgaW4gb3VyIGJhdGNoXG4gICAgdmFyIG51bVZlcnRzID0gKHRoaXMuc2l6ZSAqIDQpICogdGhpcy52ZXJ0Qnl0ZVNpemU7XG5cbiAgICAvLyB0aGUgdG90YWwgbnVtYmVyIG9mIGluZGljZXMgaW4gb3VyIGJhdGNoLCB0aGVyZSBhcmUgNiBwb2ludHMgcGVyIHF1YWQuXG4gICAgdmFyIG51bUluZGljZXMgPSB0aGlzLnNpemUgKiA2O1xuXG4gICAgLyoqXG4gICAgICogSG9sZHMgdGhlIHZlcnRleCBkYXRhIHRoYXQgd2lsbCBiZSBzZW50IHRvIHRoZSB2ZXJ0ZXggc2hhZGVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7QXJyYXlCdWZmZXJ9XG4gICAgICovXG4gICAgdGhpcy52ZXJ0aWNlcyA9IG5ldyBBcnJheUJ1ZmZlcihudW1WZXJ0cyk7XG5cbiAgICAvKipcbiAgICAgKiBWaWV3IG9uIHRoZSB2ZXJ0aWNlcyBhcyBhIEZsb2F0MzJBcnJheSBmb3IgcG9zaXRpb25zXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtGbG9hdDMyQXJyYXl9XG4gICAgICovXG4gICAgdGhpcy5wb3NpdGlvbnMgPSBuZXcgRmxvYXQzMkFycmF5KHRoaXMudmVydGljZXMpO1xuICAgIFxuICAgIC8qKlxuICAgICAqIFZpZXcgb24gdGhlIHZlcnRpY2VzIGFzIGEgVWludDMyQXJyYXkgZm9yIHV2c1xuICAgICAqXG4gICAgICogQG1lbWJlciB7RmxvYXQzMkFycmF5fVxuICAgICAqL1xuICAgIHRoaXMudXZzID0gbmV3IFVpbnQzMkFycmF5KHRoaXMudmVydGljZXMpO1xuXG4gICAgLyoqXG4gICAgICogVmlldyBvbiB0aGUgdmVydGljZXMgYXMgYSBVaW50MzJBcnJheSBmb3IgY29sb3JzXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtVaW50MzJBcnJheX1cbiAgICAgKi9cbiAgICB0aGlzLmNvbG9ycyA9IG5ldyBVaW50MzJBcnJheSh0aGlzLnZlcnRpY2VzKTtcblxuICAgIC8qKlxuICAgICAqIEhvbGRzIHRoZSBpbmRpY2VzIG9mIHRoZSBnZW9tZXRyeSAocXVhZHMpIHRvIGRyYXdcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1VpbnQxNkFycmF5fVxuICAgICAqL1xuICAgIHRoaXMuaW5kaWNlcyA9IGNyZWF0ZUluZGljZXNGb3JRdWFkcyh0aGlzLnNpemUpXG5cbiAgICAvKipcbiAgICAgKiBUaGUgZGVmYXVsdCBzaGFkZXIgdGhhdCBpcyB1c2VkIGlmIGEgc3ByaXRlIGRvZXNuJ3QgaGF2ZSBhIG1vcmUgc3BlY2lmaWMgb25lLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5TaGFkZXJ9XG4gICAgICovXG4gICAgdGhpcy5zaGFkZXIgPSBudWxsO1xuXG4gICAgdGhpcy50ZXh0dXJlQ291bnQgPSAwO1xuICAgIHRoaXMuY3VycmVudEluZGV4ID0gMDtcbiAgXG4gICAgdGhpcy5ncm91cENvdW50ID0gMDtcbiAgICB0aGlzLmdyb3VwcyA9IFtdO1xuICAgIFxuICAgIC8vVE9ETyAtIDMwMCBpcyBhIGJpdCBtYWdpYywgZmlndXJlIG91dCBhIG5pY2VyIGFtb3VudCFcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuc2l6ZTsgaSsrKSBcbiAgICB7XG4gICAgICAgIHRoaXMuZ3JvdXBzW2ldID0ge3RleHR1cmVzOltdLCB0ZXh0dXJlQ291bnQ6MCwgaWRzOltdLCBzaXplOjAsIHN0YXJ0OjAsIGJsZW5kOjB9OyBcbiAgICB9O1xuICAgIFxuICAgIHRoaXMuY3VycmVudEdyb3VwID0gdGhpcy5ncm91cHNbdGhpcy5ncm91cENvdW50KytdO1xuXG4gICAgdGhpcy5jdXJyZW50VGV4dHVyZSA9IG51bGw7ICAgIFxufVxuXG5cblNwcml0ZVJlbmRlcmVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoT2JqZWN0UmVuZGVyZXIucHJvdG90eXBlKTtcblNwcml0ZVJlbmRlcmVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFNwcml0ZVJlbmRlcmVyO1xubW9kdWxlLmV4cG9ydHMgPSBTcHJpdGVSZW5kZXJlcjtcblxuV2ViR0xSZW5kZXJlci5yZWdpc3RlclBsdWdpbignc3ByaXRlJywgU3ByaXRlUmVuZGVyZXIpO1xuXG4vKipcbiAqIFNldHMgdXAgdGhlIHJlbmRlcmVyIGNvbnRleHQgYW5kIG5lY2Vzc2FyeSBidWZmZXJzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0gZ2wge1dlYkdMUmVuZGVyaW5nQ29udGV4dH0gdGhlIGN1cnJlbnQgV2ViR0wgZHJhd2luZyBjb250ZXh0XG4gKi9cblNwcml0ZVJlbmRlcmVyLnByb3RvdHlwZS5vbkNvbnRleHRDaGFuZ2UgPSBmdW5jdGlvbiAoKVxue1xuICAgIHZhciBnbCA9IHRoaXMucmVuZGVyZXIuZ2w7XG5cbiAgICB0aGlzLk1BWF9URVhUVUVTID0gZ2wuZ2V0UGFyYW1ldGVyKGdsLk1BWF9URVhUVVJFX0lNQUdFX1VOSVRTKTtcblxuICAgIHRoaXMuX3NoYWRlciA9IGdlbmVyYXRlTXVsdGlUZXh0dXJlU2hhZGVyKGdsLCB0aGlzLk1BWF9URVhUVUVTKS8vbmV3IFRleHR1cmVTaGFkZXIoZ2wpO1xuXG4gICAgLy8gc2V0dXAgZGVmYXVsdCBzaGFkZXJcbiAgICB0aGlzLnNoYWRlciA9IHRoaXMucmVuZGVyZXIuc2hhZGVyTWFuYWdlci5kZWZhdWx0U2hhZGVyO1xuXG4gICAgLy8gY3JlYXRlIGEgY291cGxlIG9mIGJ1ZmZlcnNcbiAgICB0aGlzLnZlcnRleEJ1ZmZlciA9IGdsQ29yZS5HTEJ1ZmZlci5jcmVhdGVWZXJ0ZXhCdWZmZXIoZ2wsIG51bGwsIGdsLkRZTkFNSUNfRFJBVyk7XG4gICAgdGhpcy5pbmRleEJ1ZmZlciA9IGdsQ29yZS5HTEJ1ZmZlci5jcmVhdGVJbmRleEJ1ZmZlcihnbCwgdGhpcy5pbmRpY2VzLCBnbC5TVEFUSUNfRFJBVyk7XG5cbiAgICAvLyBidWlsZCB0aGUgdmFvIG9iamVjdCB0aGF0IHdpbGwgcmVuZGVyLi5cbiAgICB0aGlzLnZhbyA9IG5ldyBnbENvcmUuVmVydGV4QXJyYXlPYmplY3QoZ2wpO1xuXG4gICAgdGhpcy52YW8uYWRkSW5kZXgodGhpcy5pbmRleEJ1ZmZlcik7XG4gICAgdGhpcy52YW8uYWRkQXR0cmlidXRlKHRoaXMudmVydGV4QnVmZmVyLCB0aGlzLl9zaGFkZXIuYXR0cmlidXRlcy5hVmVydGV4UG9zaXRpb24sIGdsLkZMT0FULCBmYWxzZSwgdGhpcy52ZXJ0Qnl0ZVNpemUsIDApO1xuICAgIHRoaXMudmFvLmFkZEF0dHJpYnV0ZSh0aGlzLnZlcnRleEJ1ZmZlciwgdGhpcy5fc2hhZGVyLmF0dHJpYnV0ZXMuYVRleHR1cmVDb29yZCwgZ2wuVU5TSUdORURfU0hPUlQsIHRydWUsIHRoaXMudmVydEJ5dGVTaXplLCAyICogNCk7XG4gICAgdGhpcy52YW8uYWRkQXR0cmlidXRlKHRoaXMudmVydGV4QnVmZmVyLCB0aGlzLl9zaGFkZXIuYXR0cmlidXRlcy5hQ29sb3IsIGdsLlVOU0lHTkVEX0JZVEUsIHRydWUsIHRoaXMudmVydEJ5dGVTaXplLCAzICogNCk7XG4gICAgdGhpcy52YW8uYWRkQXR0cmlidXRlKHRoaXMudmVydGV4QnVmZmVyLCB0aGlzLl9zaGFkZXIuYXR0cmlidXRlcy5hVGV4dHVyZUlkLCBnbC5GTE9BVCwgZmFsc2UsIHRoaXMudmVydEJ5dGVTaXplLCA0ICogNCk7XG5cbiAgICB0aGlzLmN1cnJlbnRCbGVuZE1vZGUgPSA5OTk5OTtcbn07XG5cbi8qKlxuICogUmVuZGVycyB0aGUgc3ByaXRlIG9iamVjdC5cbiAqXG4gKiBAcGFyYW0gc3ByaXRlIHtQSVhJLlNwcml0ZX0gdGhlIHNwcml0ZSB0byByZW5kZXIgd2hlbiB1c2luZyB0aGlzIHNwcml0ZWJhdGNoXG4gKi9cblNwcml0ZVJlbmRlcmVyLnByb3RvdHlwZS5yZW5kZXIgPSBmdW5jdGlvbiAoc3ByaXRlKVxue1xuICAgIC8vVE9ETyBzZXQgYmxlbmQgbW9kZXMuLlxuICAgIC8vIGNoZWNrIHRleHR1cmUuLlxuICAgIGlmICh0aGlzLmN1cnJlbnRJbmRleCA+PSB0aGlzLnNpemUpXG4gICAge1xuICAgICAgICB0aGlzLmZsdXNoKCk7XG4gICAgfVxuXG4gIFxuICAgIC8vIGdldCB0aGUgdXZzIGZvciB0aGUgdGV4dHVyZVxuICAgXG5cbiAgICAvLyBpZiB0aGUgdXZzIGhhdmUgbm90IHVwZGF0ZWQgdGhlbiBubyBwb2ludCByZW5kZXJpbmcganVzdCB5ZXQhXG4gICAgaWYgKCFzcHJpdGUudGV4dHVyZS5fdXZzKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgICAvLyBwdXNoIGEgdGV4dHVyZS5cbiAgICAvLyBpbmNyZW1lbnQgdGhlIGJhdGNoc2l6ZVxuICAgIHZhciBuZXh0VGV4dHVyZSA9ICBzcHJpdGUudGV4dHVyZS5iYXNlVGV4dHVyZTtcbiAgICB2YXIgY3VycmVudEdyb3VwID0gdGhpcy5jdXJyZW50R3JvdXA7XG4gICAgdmFyIGk7XG5cbiAgICBpZih0aGlzLmN1cnJlbnRUZXh0dXJlICE9PSBuZXh0VGV4dHVyZSlcbiAgICB7XG4gICAgICAgIHRoaXMuY3VycmVudFRleHR1cmUgPSBuZXh0VGV4dHVyZTtcbiAgICAgICAgXG4gICAgICAgIGlmKCFuZXh0VGV4dHVyZS5fZW5hYmxlZClcbiAgICAgICAge1xuICAgICAgICAgICAgbmV4dFRleHR1cmUuX2VuYWJsZWQgPSB0cnVlO1xuICAgICAgICAgICAgbmV4dFRleHR1cmUuX2lkID0gdGhpcy50ZXh0dXJlQ291bnQ7XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIGlmKHRoaXMudGV4dHVyZUNvdW50ID09PSB0aGlzLk1BWF9URVhUVUVTKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGZvciAoIGkgPSAwOyBpIDwgY3VycmVudEdyb3VwLnRleHR1cmVDb3VudDsgaSsrKSBcbiAgICAgICAgICAgICAgICB7ICAgICBcbiAgICAgICAgICAgICAgICAgICAgY3VycmVudEdyb3VwLnRleHR1cmVzW2ldLl9lbmFibGVkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgIHRoaXMudGV4dHVyZUNvdW50ID0gMDtcblxuICAgICAgICAgICAgICAgIGN1cnJlbnRHcm91cC5zaXplID0gdGhpcy5jdXJyZW50SW5kZXggLSBjdXJyZW50R3JvdXAuc3RhcnQ7XG4gICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICBjdXJyZW50R3JvdXAgPSB0aGlzLmN1cnJlbnRHcm91cCA9IHRoaXMuZ3JvdXBzW3RoaXMuZ3JvdXBDb3VudCsrXTtcbiAgICAgICAgICAgICAgICBjdXJyZW50R3JvdXAudGV4dHVyZUNvdW50ID0gMDtcbiAgICAgICAgICAgICAgICBjdXJyZW50R3JvdXAuc3RhcnQgPSB0aGlzLmN1cnJlbnRJbmRleDtcbiAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY3VycmVudEdyb3VwLnRleHR1cmVzW2N1cnJlbnRHcm91cC50ZXh0dXJlQ291bnQrK10gPSBuZXh0VGV4dHVyZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMudGV4dHVyZUNvdW50Kys7XG4gICAgfVxuXG4gICAgLy8gVE9ETyB0cmltPz9cbiAgICB2YXIgaW5kZXggPSB0aGlzLmN1cnJlbnRJbmRleCAqIHRoaXMudmVydEJ5dGVTaXplO1xuXG4gICAgdGhpcy5jdXJyZW50SW5kZXgrKztcblxuICAgIC8vIHVwbG9hZCB0aGUgc3ByaXRlIGVsZW1ldG5zLi4uXG4gICAgLy8gdGhleSBoYXZlIGFsbCByZWFkeSBiZWVuIGNhbGN1bGF0ZWQgc28gd2UganVzdCBuZWVkIHRvIHB1c2ggdGhlbSBpbnRvIHRoZSBidWZmZXIuXG4gICAgdmFyIGNvbG9ycyA9IHRoaXMuY29sb3JzO1xuICAgIHZhciBwb3NpdGlvbnMgPSB0aGlzLnBvc2l0aW9ucztcbiAgICB2YXIgdmVydGV4RGF0YSA9IHNwcml0ZS52ZXJ0ZXhEYXRhXG4gICAgdmFyIHRpbnQgPSAoc3ByaXRlLnRpbnQgPj4gMTYpICsgKHNwcml0ZS50aW50ICYgMHhmZjAwKSArICgoc3ByaXRlLnRpbnQgJiAweGZmKSA8PCAxNikgKyAoc3ByaXRlLndvcmxkQWxwaGEgKiAyNTUgPDwgMjQpO1xuICAgIHZhciB1dnMgPSBzcHJpdGUudGV4dHVyZS5fdXZzLnV2c191aW50MzI7XG4gICAgLy94eVxuICAgIHBvc2l0aW9uc1tpbmRleCsrXSA9IHZlcnRleERhdGFbMF07XG4gICAgcG9zaXRpb25zW2luZGV4KytdID0gdmVydGV4RGF0YVsxXTtcbiAgICB0aGlzLnV2c1tpbmRleCsrXSA9IHV2c1swXTtcbiAgICBjb2xvcnNbaW5kZXgrK10gPSB0aW50O1xuICAgIHBvc2l0aW9uc1tpbmRleCsrXSA9IG5leHRUZXh0dXJlLl9pZDsgXG4gICAgXG4gICAgLy8geHlcbiAgICBwb3NpdGlvbnNbaW5kZXgrK10gPSB2ZXJ0ZXhEYXRhWzJdO1xuICAgIHBvc2l0aW9uc1tpbmRleCsrXSA9IHZlcnRleERhdGFbM107XG4gICAgdGhpcy51dnNbaW5kZXgrK10gPSB1dnNbMV07XG4gICAgY29sb3JzW2luZGV4KytdID0gdGludDtcbiAgICBwb3NpdGlvbnNbaW5kZXgrK10gPSBuZXh0VGV4dHVyZS5faWQ7XG5cbiAgICAgLy8geHlcbiAgICBwb3NpdGlvbnNbaW5kZXgrK10gPSB2ZXJ0ZXhEYXRhWzRdO1xuICAgIHBvc2l0aW9uc1tpbmRleCsrXSA9IHZlcnRleERhdGFbNV07XG4gICAgdGhpcy51dnNbaW5kZXgrK10gPSB1dnNbMl07XG4gICAgY29sb3JzW2luZGV4KytdID0gdGludDtcbiAgICBwb3NpdGlvbnNbaW5kZXgrK10gPSBuZXh0VGV4dHVyZS5faWQ7XG5cbiAgICAvLyB4eVxuICAgIHBvc2l0aW9uc1tpbmRleCsrXSA9IHZlcnRleERhdGFbNl07XG4gICAgcG9zaXRpb25zW2luZGV4KytdID0gdmVydGV4RGF0YVs3XTtcbiAgICB0aGlzLnV2c1tpbmRleCsrXSA9IHV2c1szXTtcbiAgICBjb2xvcnNbaW5kZXgrK10gPSB0aW50O1xuICAgIHBvc2l0aW9uc1tpbmRleCsrXSA9IG5leHRUZXh0dXJlLl9pZDtcbn07XG5cbi8qKlxuICogUmVuZGVycyB0aGUgY29udGVudCBhbmQgZW1wdGllcyB0aGUgY3VycmVudCBiYXRjaC5cbiAqXG4gKi9cblNwcml0ZVJlbmRlcmVyLnByb3RvdHlwZS5mbHVzaCA9IGZ1bmN0aW9uICgpXG57XG4gICAgaWYgKHRoaXMuY3VycmVudEluZGV4ID09PSAwKXJldHVybjtcblxuICAgIHZhciBnbCA9IHRoaXMucmVuZGVyZXIuZ2w7XG5cblxuICAgIHRoaXMuY3VycmVudEdyb3VwLnNpemUgPSB0aGlzLmN1cnJlbnRJbmRleCAtIHRoaXMuY3VycmVudEdyb3VwLnN0YXJ0O1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5jdXJyZW50R3JvdXAudGV4dHVyZUNvdW50OyBpKyspIFxuICAgIHsgICAgIFxuICAgICAgICB0aGlzLmN1cnJlbnRHcm91cC50ZXh0dXJlc1tpXS5fZW5hYmxlZCA9IGZhbHNlO1xuICAgIH07XG4gICBcbiAgICAvLyBkbyBzb21lIHNtYXJ0IGFycmF5IHN0dWZmLi5cbiAgICAvLyBkb3VibGUgc2l6ZSBzbyB3ZSBkb250IGFsd2F5IHN1YmFycmF5IHRoZSBlbGVtZW50cy4uXG4gICAgLy8gdXBsb2FkIHRoZSB2ZXJ0cyB0byB0aGUgYnVmZmVyXG4gICAgaWYgKHRoaXMuY3VycmVudEJhdGNoU2l6ZSA+ICggdGhpcy5zaXplICogMC41ICkgKVxuICAgIHtcbiAgICAgICAgdGhpcy52ZXJ0ZXhCdWZmZXIudXBsb2FkKHRoaXMudmVydGljZXMsIDAsIHRydWUpO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICAvLyBvIGsgLi4gc3ViIGFycmF5IGlzIFNMT1c+P1xuICAgICAgICB2YXIgdmlldyA9IHRoaXMucG9zaXRpb25zLnN1YmFycmF5KDAsIHRoaXMuY3VycmVudEluZGV4ICogdGhpcy52ZXJ0Qnl0ZVNpemUpO1xuICAgICAgICB0aGlzLnZlcnRleEJ1ZmZlci51cGxvYWQodmlldywgMCwgdHJ1ZSk7XG4gICAgfVxuXG4gICAgLy8gYmluZCBzaGFkZXIuLlxuICAgIHRoaXMucmVuZGVyZXIuYmluZFNoYWRlcih0aGlzLl9zaGFkZXIpO1xuICAgIHRoaXMucmVuZGVyZXIuYmxlbmRNb2RlTWFuYWdlci5zZXRCbGVuZE1vZGUoIDAgKTtcblxuICAgIC8vLyByZW5kZXIgdGhlIGdyb3Vwcy4uXG4gICAgZm9yIChpID0gMDsgaSA8IHRoaXMuZ3JvdXBDb3VudDsgaSsrKSB7XG4gICAgICAgIFxuICAgICAgICB2YXIgZ3JvdXAgPSB0aGlzLmdyb3Vwc1tpXTtcblxuICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IGdyb3VwLnRleHR1cmVDb3VudDsgaisrKSB7XG4gICAgICAgICAgICB0aGlzLnJlbmRlcmVyLmJpbmRUZXh0dXJlKGdyb3VwLnRleHR1cmVzW2pdLCBqKTtcbiAgICAgICAgfTtcblxuICAgICAgICBnbC5kcmF3RWxlbWVudHMoZ2wuVFJJQU5HTEVTLCBncm91cC5zaXplICogNiwgZ2wuVU5TSUdORURfU0hPUlQsIGdyb3VwLnN0YXJ0ICogNiAqIDIpO1xuICAgIH07XG5cbiAgICAvLyByZXNldCBlbGVtZW50cyBmb3IgdGhlIG5leHQgZmx1c2hcbiAgICB0aGlzLmN1cnJlbnRUZXh0dXJlID0gbnVsbDtcbiAgICB0aGlzLmN1cnJlbnRJbmRleCA9IDA7XG4gICAgdGhpcy50ZXh0dXJlQ291bnQgPSAwO1xuICAgIHRoaXMuZ3JvdXBDb3VudCA9IDA7XG4gICAgXG4gICAgdGhpcy5jdXJyZW50R3JvdXAgPSB0aGlzLmdyb3Vwc1t0aGlzLmdyb3VwQ291bnQrK107XG4gICAgdGhpcy5jdXJyZW50R3JvdXAudGV4dHVyZUNvdW50ID0gMDtcbn07XG5cbi8qKlxuICogU3RhcnRzIGEgbmV3IHNwcml0ZSBiYXRjaC5cbiAqXG4gKi9cblNwcml0ZVJlbmRlcmVyLnByb3RvdHlwZS5zdGFydCA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy52YW8uYmluZCgpO1xufTtcblxuU3ByaXRlUmVuZGVyZXIucHJvdG90eXBlLnN0b3AgPSBmdW5jdGlvbiAoKVxue1xuICAgIHRoaXMuZmx1c2goKTtcbiAgICB0aGlzLnZhby51bmJpbmQoKTtcbn07XG4vKipcbiAqIERlc3Ryb3lzIHRoZSBTcHJpdGVCYXRjaC5cbiAqXG4gKi9cblNwcml0ZVJlbmRlcmVyLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLnZlcnRleEJ1ZmZlci5kZXN0cm95KCk7XG4gICAgdGhpcy5pbmRleEJ1ZmZlci5kZXN0cm95KCk7XG5cbiAgICBPYmplY3RSZW5kZXJlci5wcm90b3R5cGUuZGVzdHJveS5jYWxsKHRoaXMpO1xuXG4gICAgdGhpcy5zaGFkZXIuZGVzdHJveSgpO1xuXG4gICAgdGhpcy5yZW5kZXJlciA9IG51bGw7XG5cbiAgICB0aGlzLnZlcnRpY2VzID0gbnVsbDtcbiAgICB0aGlzLnBvc2l0aW9ucyA9IG51bGw7XG4gICAgdGhpcy5jb2xvcnMgPSBudWxsO1xuICAgIHRoaXMuaW5kaWNlcyA9IG51bGw7XG5cbiAgICB0aGlzLnZlcnRleEJ1ZmZlciA9IG51bGw7XG4gICAgdGhpcy5pbmRleEJ1ZmZlciA9IG51bGw7XG5cbiAgICB0aGlzLnNwcml0ZXMgPSBudWxsO1xuICAgIHRoaXMuc2hhZGVyID0gbnVsbDtcbn07XG4iLCJ2YXIgU2hhZGVyID0gcmVxdWlyZSgncGl4aS1nbC1jb3JlJykuR0xTaGFkZXI7XG5cblxuZnVuY3Rpb24gZ2VuZXJhdGVNdWx0aVRleHR1cmVTaGFkZXIoZ2wsIG1heFRleHR1cmVzKVxue1xuICAgIHZhciB2ZXJ0ZXhTcmMgPSBcInByZWNpc2lvbiBsb3dwIGZsb2F0O1xcbmF0dHJpYnV0ZSB2ZWMyIGFWZXJ0ZXhQb3NpdGlvbjtcXG5hdHRyaWJ1dGUgdmVjMiBhVGV4dHVyZUNvb3JkO1xcbmF0dHJpYnV0ZSB2ZWM0IGFDb2xvcjtcXG5hdHRyaWJ1dGUgZmxvYXQgYVRleHR1cmVJZDtcXG5cXG51bmlmb3JtIG1hdDMgcHJvamVjdGlvbk1hdHJpeDtcXG5cXG52YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDtcXG52YXJ5aW5nIHZlYzQgdkNvbG9yO1xcbnZhcnlpbmcgZmxvYXQgdlRleHR1cmVJZDtcXG5cXG52b2lkIG1haW4odm9pZCl7XFxuICAgZ2xfUG9zaXRpb24gPSB2ZWM0KChwcm9qZWN0aW9uTWF0cml4ICogdmVjMyhhVmVydGV4UG9zaXRpb24sIDEuMCkpLnh5LCAwLjAsIDEuMCk7XFxuICAgdlRleHR1cmVDb29yZCA9IGFUZXh0dXJlQ29vcmQ7XFxuICAgdlRleHR1cmVJZCA9IGFUZXh0dXJlSWQ7XFxuICAgdkNvbG9yID0gdmVjNChhQ29sb3IucmdiICogYUNvbG9yLmEsIGFDb2xvci5hKTtcXG59XCI7XG4gICAgdmFyIGZyYWdtZW50U3JjID0gJ3ByZWNpc2lvbiBsb3dwIGZsb2F0O1xcblxcbicgKyBnZW5lcmF0ZVNhbXBsZVNyYyhtYXhUZXh0dXJlcykgKyBcIlxcblxcblwiICsgZnJhZ1RlbXBsYXRlXG5cbiAgICBmcmFnbWVudFNyYyA9IGZyYWdtZW50U3JjLnJlcGxhY2UoL1xcJVxcJS9naSwgJzE2Jyk7XG5cbiAgICB2YXIgc2hhZGVyID0gbmV3IFNoYWRlcihnbCwgdmVydGV4U3JjLCBmcmFnbWVudFNyYyk7XG5cblxuICAgIHZhciBzYW1wbGVWYWx1ZXMgPSBbXTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG1heFRleHR1cmVzOyBpKyspIHtcbiAgICAgICAgc2FtcGxlVmFsdWVzW2ldID0gaTtcbiAgICB9O1xuXG4gICAgc2hhZGVyLmJpbmQoKTtcbiAgICBzaGFkZXIudW5pZm9ybXMudVNhbXBsZXJzID0gc2FtcGxlVmFsdWVzO1xuXG4gICAgcmV0dXJuIHNoYWRlcjtcbn1cblxuZnVuY3Rpb24gZ2VuZXJhdGVTYW1wbGVTcmMobWF4VGV4dHVyZXMpXG57XG4gICAgdmFyIHNyYyA9ICd2ZWM0IGdldFNhbXBsZUZyb21BcnJheShzYW1wbGVyMkQgdGV4dHVyZXNbJSVdLCBpbnQgbmR4LCB2ZWMyIHV2KSB7XFxuXFxudmVjNCBjb2xvcjsnXG5cbiAgICBzcmMgKz0gJ1xcbic7XG4gICAgc3JjICs9ICdcXG4nO1xuICAgIFxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbWF4VGV4dHVyZXM7IGkrKykgXG4gICAge1xuICAgICAgICBpZihpID4gMClzcmMgKz0gJ1xcbmVsc2UgJztcbiAgICAgICAgaWYoaSA8IG1heFRleHR1cmVzLTEpc3JjICs9ICdpZihuZHggPT0gJyArIGkgKyAnKSc7XG4gICAgICAgIHNyYyArPSAnXFxueyc7XG4gICAgICAgIHNyYyArPSAnXFxuXFx0Y29sb3IgPSB0ZXh0dXJlMkQodGV4dHVyZXNbJytpKyddLCB1dik7JztcbiAgICAgICAgc3JjICs9ICdcXG59JztcbiAgICB9O1xuXG4gICAgc3JjICs9ICdcXG4nO1xuICAgIHNyYyArPSAnXFxuJztcbiAgICBzcmMgKz0gJ3JldHVybiBjb2xvcjsnO1xuICAgIHNyYyArPSAnXFxufSc7XG5cbiAgICByZXR1cm4gc3JjO1xufVxuXG52YXIgZnJhZ1RlbXBsYXRlID0gW1xuXG4gICAgJ3ZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkOycsXG4gICAgJ3ZhcnlpbmcgdmVjNCB2Q29sb3I7JyxcbiAgICAndmFyeWluZyBmbG9hdCB2VGV4dHVyZUlkOycsXG4gICAgJ3VuaWZvcm0gc2FtcGxlcjJEIHVTYW1wbGVyc1slJV07JyxcblxuICAgICd2b2lkIG1haW4odm9pZCl7JyxcbiAgICAgICAgJ2dsX0ZyYWdDb2xvciA9IGdldFNhbXBsZUZyb21BcnJheSh1U2FtcGxlcnMsIGludCh2VGV4dHVyZUlkKSwgdlRleHR1cmVDb29yZCkgKiB2Q29sb3I7JyxcbiAgICAnfSdcbl0uam9pbignXFxuJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZ2VuZXJhdGVNdWx0aVRleHR1cmVTaGFkZXI7XG4iLCJ2YXIgU3ByaXRlID0gcmVxdWlyZSgnLi4vc3ByaXRlcy9TcHJpdGUnKSxcbiAgICBUZXh0dXJlID0gcmVxdWlyZSgnLi4vdGV4dHVyZXMvVGV4dHVyZScpLFxuICAgIG1hdGggPSByZXF1aXJlKCcuLi9tYXRoJyksXG4gICAgdXRpbHMgPSByZXF1aXJlKCcuLi91dGlscycpLFxuICAgIENPTlNUID0gcmVxdWlyZSgnLi4vY29uc3QnKTtcblxuLyoqXG4gKiBBIFRleHQgT2JqZWN0IHdpbGwgY3JlYXRlIGEgbGluZSBvciBtdWx0aXBsZSBsaW5lcyBvZiB0ZXh0LiBUbyBzcGxpdCBhIGxpbmUgeW91IGNhbiB1c2UgJ1xcbicgaW4geW91ciB0ZXh0IHN0cmluZyxcbiAqIG9yIGFkZCBhIHdvcmRXcmFwIHByb3BlcnR5IHNldCB0byB0cnVlIGFuZCBhbmQgd29yZFdyYXBXaWR0aCBwcm9wZXJ0eSB3aXRoIGEgdmFsdWUgaW4gdGhlIHN0eWxlIG9iamVjdC5cbiAqXG4gKiBBIFRleHQgY2FuIGJlIGNyZWF0ZWQgZGlyZWN0bHkgZnJvbSBhIHN0cmluZyBhbmQgYSBzdHlsZSBvYmplY3RcbiAqXG4gKiBgYGBqc1xuICogdmFyIHRleHQgPSBuZXcgUElYSS5UZXh0KCdUaGlzIGlzIGEgcGl4aSB0ZXh0Jyx7Zm9udCA6ICcyNHB4IEFyaWFsJywgZmlsbCA6IDB4ZmYxMDEwLCBhbGlnbiA6ICdjZW50ZXInfSk7XG4gKiBgYGBcbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuU3ByaXRlXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIHRleHQge3N0cmluZ30gVGhlIGNvcHkgdGhhdCB5b3Ugd291bGQgbGlrZSB0aGUgdGV4dCB0byBkaXNwbGF5XG4gKiBAcGFyYW0gW3N0eWxlXSB7b2JqZWN0fSBUaGUgc3R5bGUgcGFyYW1ldGVyc1xuICogQHBhcmFtIFtzdHlsZS5mb250XSB7c3RyaW5nfSBkZWZhdWx0ICdib2xkIDIwcHggQXJpYWwnIFRoZSBzdHlsZSBhbmQgc2l6ZSBvZiB0aGUgZm9udFxuICogQHBhcmFtIFtzdHlsZS5maWxsPSdibGFjayddIHtTdHJpbmd8TnVtYmVyfSBBIGNhbnZhcyBmaWxsc3R5bGUgdGhhdCB3aWxsIGJlIHVzZWQgb24gdGhlIHRleHQgZS5nICdyZWQnLCAnIzAwRkYwMCdcbiAqIEBwYXJhbSBbc3R5bGUuYWxpZ249J2xlZnQnXSB7c3RyaW5nfSBBbGlnbm1lbnQgZm9yIG11bHRpbGluZSB0ZXh0ICgnbGVmdCcsICdjZW50ZXInIG9yICdyaWdodCcpLCBkb2VzIG5vdCBhZmZlY3Qgc2luZ2xlIGxpbmUgdGV4dFxuICogQHBhcmFtIFtzdHlsZS5zdHJva2VdIHtTdHJpbmd8TnVtYmVyfSBBIGNhbnZhcyBmaWxsc3R5bGUgdGhhdCB3aWxsIGJlIHVzZWQgb24gdGhlIHRleHQgc3Ryb2tlIGUuZyAnYmx1ZScsICcjRkNGRjAwJ1xuICogQHBhcmFtIFtzdHlsZS5zdHJva2VUaGlja25lc3M9MF0ge251bWJlcn0gQSBudW1iZXIgdGhhdCByZXByZXNlbnRzIHRoZSB0aGlja25lc3Mgb2YgdGhlIHN0cm9rZS4gRGVmYXVsdCBpcyAwIChubyBzdHJva2UpXG4gKiBAcGFyYW0gW3N0eWxlLndvcmRXcmFwPWZhbHNlXSB7Ym9vbGVhbn0gSW5kaWNhdGVzIGlmIHdvcmQgd3JhcCBzaG91bGQgYmUgdXNlZFxuICogQHBhcmFtIFtzdHlsZS53b3JkV3JhcFdpZHRoPTEwMF0ge251bWJlcn0gVGhlIHdpZHRoIGF0IHdoaWNoIHRleHQgd2lsbCB3cmFwLCBpdCBuZWVkcyB3b3JkV3JhcCB0byBiZSBzZXQgdG8gdHJ1ZVxuICogQHBhcmFtIFtzdHlsZS5saW5lSGVpZ2h0XSB7bnVtYmVyfSBUaGUgbGluZSBoZWlnaHQsIGEgbnVtYmVyIHRoYXQgcmVwcmVzZW50cyB0aGUgdmVydGljYWwgc3BhY2UgdGhhdCBhIGxldHRlciB1c2VzXG4gKiBAcGFyYW0gW3N0eWxlLmRyb3BTaGFkb3c9ZmFsc2VdIHtib29sZWFufSBTZXQgYSBkcm9wIHNoYWRvdyBmb3IgdGhlIHRleHRcbiAqIEBwYXJhbSBbc3R5bGUuZHJvcFNoYWRvd0NvbG9yPScjMDAwMDAwJ10ge3N0cmluZ30gQSBmaWxsIHN0eWxlIHRvIGJlIHVzZWQgb24gdGhlIGRyb3BzaGFkb3cgZS5nICdyZWQnLCAnIzAwRkYwMCdcbiAqIEBwYXJhbSBbc3R5bGUuZHJvcFNoYWRvd0FuZ2xlPU1hdGguUEkvNF0ge251bWJlcn0gU2V0IGEgYW5nbGUgb2YgdGhlIGRyb3Agc2hhZG93XG4gKiBAcGFyYW0gW3N0eWxlLmRyb3BTaGFkb3dEaXN0YW5jZT01XSB7bnVtYmVyfSBTZXQgYSBkaXN0YW5jZSBvZiB0aGUgZHJvcCBzaGFkb3dcbiAqIEBwYXJhbSBbc3R5bGUuZHJvcFNoYWRvd0JsdXI9MF0ge251bWJlcn0gU2V0IGEgc2hhZG93IGJsdXIgcmFkaXVzXG4gKiBAcGFyYW0gW3N0eWxlLnBhZGRpbmc9MF0ge251bWJlcn0gT2NjYXNpb25hbGx5IHNvbWUgZm9udHMgYXJlIGNyb3BwZWQgb24gdG9wIG9yIGJvdHRvbS4gQWRkaW5nIHNvbWUgcGFkZGluZyB3aWxsXG4gKiAgICAgIHByZXZlbnQgdGhpcyBmcm9tIGhhcHBlbmluZyBieSBhZGRpbmcgcGFkZGluZyB0byB0aGUgdG9wIGFuZCBib3R0b20gb2YgdGV4dCBoZWlnaHQuXG4gKiBAcGFyYW0gW3N0eWxlLnRleHRCYXNlbGluZT0nYWxwaGFiZXRpYyddIHtzdHJpbmd9IFRoZSBiYXNlbGluZSBvZiB0aGUgdGV4dCB0aGF0IGlzIHJlbmRlcmVkLlxuICogQHBhcmFtIFtzdHlsZS5saW5lSm9pbj0nbWl0ZXInXSB7c3RyaW5nfSBUaGUgbGluZUpvaW4gcHJvcGVydHkgc2V0cyB0aGUgdHlwZSBvZiBjb3JuZXIgY3JlYXRlZCwgaXQgY2FuIHJlc29sdmVcbiAqICAgICAgc3Bpa2VkIHRleHQgaXNzdWVzLiBEZWZhdWx0IGlzICdtaXRlcicgKGNyZWF0ZXMgYSBzaGFycCBjb3JuZXIpLlxuICogQHBhcmFtIFtzdHlsZS5taXRlckxpbWl0PTEwXSB7bnVtYmVyfSBUaGUgbWl0ZXIgbGltaXQgdG8gdXNlIHdoZW4gdXNpbmcgdGhlICdtaXRlcicgbGluZUpvaW4gbW9kZS4gVGhpcyBjYW4gcmVkdWNlXG4gKiAgICAgIG9yIGluY3JlYXNlIHRoZSBzcGlraW5lc3Mgb2YgcmVuZGVyZWQgdGV4dC5cbiAqL1xuZnVuY3Rpb24gVGV4dCh0ZXh0LCBzdHlsZSwgcmVzb2x1dGlvbilcbntcbiAgICAvKipcbiAgICAgKiBUaGUgY2FudmFzIGVsZW1lbnQgdGhhdCBldmVyeXRoaW5nIGlzIGRyYXduIHRvXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtIVE1MQ2FudmFzRWxlbWVudH1cbiAgICAgKi9cbiAgICB0aGlzLmNhbnZhcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NhbnZhcycpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGNhbnZhcyAyZCBjb250ZXh0IHRoYXQgZXZlcnl0aGluZyBpcyBkcmF3biB3aXRoXG4gICAgICogQG1lbWJlciB7SFRNTENhbnZhc0VsZW1lbnR9XG4gICAgICovXG4gICAgdGhpcy5jb250ZXh0ID0gdGhpcy5jYW52YXMuZ2V0Q29udGV4dCgnMmQnKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSByZXNvbHV0aW9uIG9mIHRoZSBjYW52YXMuXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMucmVzb2x1dGlvbiA9IHJlc29sdXRpb24gfHwgQ09OU1QuUkVTT0xVVElPTjtcblxuICAgIC8qKlxuICAgICAqIFByaXZhdGUgdHJhY2tlciBmb3IgdGhlIGN1cnJlbnQgdGV4dC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge3N0cmluZ31cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX3RleHQgPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogUHJpdmF0ZSB0cmFja2VyIGZvciB0aGUgY3VycmVudCBzdHlsZS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge29iamVjdH1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX3N0eWxlID0gbnVsbDtcblxuICAgIHZhciB0ZXh0dXJlID0gVGV4dHVyZS5mcm9tQ2FudmFzKHRoaXMuY2FudmFzKTtcbiAgICB0ZXh0dXJlLnRyaW0gPSBuZXcgbWF0aC5SZWN0YW5nbGUoKTtcbiAgICBTcHJpdGUuY2FsbCh0aGlzLCB0ZXh0dXJlKTtcblxuICAgIHRoaXMudGV4dCA9IHRleHQ7XG4gICAgdGhpcy5zdHlsZSA9IHN0eWxlO1xufVxuXG4vLyBjb25zdHJ1Y3RvclxuVGV4dC5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFNwcml0ZS5wcm90b3R5cGUpO1xuVGV4dC5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBUZXh0O1xubW9kdWxlLmV4cG9ydHMgPSBUZXh0O1xuXG5UZXh0LmZvbnRQcm9wZXJ0aWVzQ2FjaGUgPSB7fTtcblRleHQuZm9udFByb3BlcnRpZXNDYW52YXMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdjYW52YXMnKTtcblRleHQuZm9udFByb3BlcnRpZXNDb250ZXh0ID0gVGV4dC5mb250UHJvcGVydGllc0NhbnZhcy5nZXRDb250ZXh0KCcyZCcpO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhUZXh0LnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFRoZSB3aWR0aCBvZiB0aGUgVGV4dCwgc2V0dGluZyB0aGlzIHdpbGwgYWN0dWFsbHkgbW9kaWZ5IHRoZSBzY2FsZSB0byBhY2hpZXZlIHRoZSB2YWx1ZSBzZXRcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5UZXh0I1xuICAgICAqL1xuICAgIHdpZHRoOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgaWYgKHRoaXMuZGlydHkpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdGhpcy51cGRhdGVUZXh0KCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiB0aGlzLnNjYWxlLnggKiB0aGlzLl90ZXh0dXJlLl9mcmFtZS53aWR0aDtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuc2NhbGUueCA9IHZhbHVlIC8gdGhpcy5fdGV4dHVyZS5fZnJhbWUud2lkdGg7XG4gICAgICAgICAgICB0aGlzLl93aWR0aCA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFRoZSBoZWlnaHQgb2YgdGhlIFRleHQsIHNldHRpbmcgdGhpcyB3aWxsIGFjdHVhbGx5IG1vZGlmeSB0aGUgc2NhbGUgdG8gYWNoaWV2ZSB0aGUgdmFsdWUgc2V0XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuVGV4dCNcbiAgICAgKi9cbiAgICBoZWlnaHQ6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICBpZiAodGhpcy5kaXJ0eSlcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZVRleHQoKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuICB0aGlzLnNjYWxlLnkgKiB0aGlzLl90ZXh0dXJlLl9mcmFtZS5oZWlnaHQ7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnNjYWxlLnkgPSB2YWx1ZSAvIHRoaXMuX3RleHR1cmUuX2ZyYW1lLmhlaWdodDtcbiAgICAgICAgICAgIHRoaXMuX2hlaWdodCA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFNldCB0aGUgc3R5bGUgb2YgdGhlIHRleHRcbiAgICAgKlxuICAgICAqIEBwYXJhbSBbc3R5bGVdIHtvYmplY3R9IFRoZSBzdHlsZSBwYXJhbWV0ZXJzXG4gICAgICogQHBhcmFtIFtzdHlsZS5mb250PSdib2xkIDIwcHQgQXJpYWwnXSB7c3RyaW5nfSBUaGUgc3R5bGUgYW5kIHNpemUgb2YgdGhlIGZvbnRcbiAgICAgKiBAcGFyYW0gW3N0eWxlLmZpbGw9J2JsYWNrJ10ge3N0cmluZ3xudW1iZXJ9IEEgY2FudmFzIGZpbGxzdHlsZSB0aGF0IHdpbGwgYmUgdXNlZCBvbiB0aGUgdGV4dCBlZyAncmVkJywgJyMwMEZGMDAnXG4gICAgICogQHBhcmFtIFtzdHlsZS5hbGlnbj0nbGVmdCddIHtzdHJpbmd9IEFsaWdubWVudCBmb3IgbXVsdGlsaW5lIHRleHQgKCdsZWZ0JywgJ2NlbnRlcicgb3IgJ3JpZ2h0JyksIGRvZXMgbm90IGFmZmVjdCBzaW5nbGUgbGluZSB0ZXh0XG4gICAgICogQHBhcmFtIFtzdHlsZS5zdHJva2U9J2JsYWNrJ10ge3N0cmluZ3xudW1iZXJ9IEEgY2FudmFzIGZpbGxzdHlsZSB0aGF0IHdpbGwgYmUgdXNlZCBvbiB0aGUgdGV4dCBzdHJva2UgZWcgJ2JsdWUnLCAnI0ZDRkYwMCdcbiAgICAgKiBAcGFyYW0gW3N0eWxlLnN0cm9rZVRoaWNrbmVzcz0wXSB7bnVtYmVyfSBBIG51bWJlciB0aGF0IHJlcHJlc2VudHMgdGhlIHRoaWNrbmVzcyBvZiB0aGUgc3Ryb2tlLiBEZWZhdWx0IGlzIDAgKG5vIHN0cm9rZSlcbiAgICAgKiBAcGFyYW0gW3N0eWxlLndvcmRXcmFwPWZhbHNlXSB7Ym9vbGVhbn0gSW5kaWNhdGVzIGlmIHdvcmQgd3JhcCBzaG91bGQgYmUgdXNlZFxuICAgICAqIEBwYXJhbSBbc3R5bGUud29yZFdyYXBXaWR0aD0xMDBdIHtudW1iZXJ9IFRoZSB3aWR0aCBhdCB3aGljaCB0ZXh0IHdpbGwgd3JhcFxuICAgICAqIEBwYXJhbSBbc3R5bGUubGluZUhlaWdodF0ge251bWJlcn0gVGhlIGxpbmUgaGVpZ2h0LCBhIG51bWJlciB0aGF0IHJlcHJlc2VudHMgdGhlIHZlcnRpY2FsIHNwYWNlIHRoYXQgYSBsZXR0ZXIgdXNlc1xuICAgICAqIEBwYXJhbSBbc3R5bGUuZHJvcFNoYWRvdz1mYWxzZV0ge2Jvb2xlYW59IFNldCBhIGRyb3Agc2hhZG93IGZvciB0aGUgdGV4dFxuICAgICAqIEBwYXJhbSBbc3R5bGUuZHJvcFNoYWRvd0NvbG9yPScjMDAwMDAwJ10ge3N0cmluZ3xudW1iZXJ9IEEgZmlsbCBzdHlsZSB0byBiZSB1c2VkIG9uIHRoZSBkcm9wc2hhZG93IGUuZyAncmVkJywgJyMwMEZGMDAnXG4gICAgICogQHBhcmFtIFtzdHlsZS5kcm9wU2hhZG93QW5nbGU9TWF0aC5QSS82XSB7bnVtYmVyfSBTZXQgYSBhbmdsZSBvZiB0aGUgZHJvcCBzaGFkb3dcbiAgICAgKiBAcGFyYW0gW3N0eWxlLmRyb3BTaGFkb3dEaXN0YW5jZT01XSB7bnVtYmVyfSBTZXQgYSBkaXN0YW5jZSBvZiB0aGUgZHJvcCBzaGFkb3dcbiAgICAgKiBAcGFyYW0gW3N0eWxlLmRyb3BTaGFkb3dCbHVyPTBdIHtudW1iZXJ9IFNldCBhIHNoYWRvdyBibHVyIHJhZGl1c1xuICAgICAqIEBwYXJhbSBbc3R5bGUucGFkZGluZz0wXSB7bnVtYmVyfSBPY2Nhc2lvbmFsbHkgc29tZSBmb250cyBhcmUgY3JvcHBlZCBvbiB0b3Agb3IgYm90dG9tLiBBZGRpbmcgc29tZSBwYWRkaW5nIHdpbGxcbiAgICAgKiAgICAgIHByZXZlbnQgdGhpcyBmcm9tIGhhcHBlbmluZyBieSBhZGRpbmcgcGFkZGluZyB0byB0aGUgdG9wIGFuZCBib3R0b20gb2YgdGV4dCBoZWlnaHQuXG4gICAgICogQHBhcmFtIFtzdHlsZS50ZXh0QmFzZWxpbmU9J2FscGhhYmV0aWMnXSB7c3RyaW5nfSBUaGUgYmFzZWxpbmUgb2YgdGhlIHRleHQgdGhhdCBpcyByZW5kZXJlZC5cbiAgICAgKiBAcGFyYW0gW3N0eWxlLmxpbmVKb2luPSdtaXRlciddIHtzdHJpbmd9IFRoZSBsaW5lSm9pbiBwcm9wZXJ0eSBzZXRzIHRoZSB0eXBlIG9mIGNvcm5lciBjcmVhdGVkLCBpdCBjYW4gcmVzb2x2ZVxuICAgICAqICAgICAgc3Bpa2VkIHRleHQgaXNzdWVzLiBEZWZhdWx0IGlzICdtaXRlcicgKGNyZWF0ZXMgYSBzaGFycCBjb3JuZXIpLlxuICAgICAqIEBwYXJhbSBbc3R5bGUubWl0ZXJMaW1pdD0xMF0ge251bWJlcn0gVGhlIG1pdGVyIGxpbWl0IHRvIHVzZSB3aGVuIHVzaW5nIHRoZSAnbWl0ZXInIGxpbmVKb2luIG1vZGUuIFRoaXMgY2FuIHJlZHVjZVxuICAgICAqICAgICAgb3IgaW5jcmVhc2UgdGhlIHNwaWtpbmVzcyBvZiByZW5kZXJlZCB0ZXh0LlxuICAgICAqIEBtZW1iZXJvZiBQSVhJLlRleHQjXG4gICAgICovXG4gICAgc3R5bGU6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fc3R5bGU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHN0eWxlKVxuICAgICAgICB7XG4gICAgICAgICAgICBzdHlsZSA9IHN0eWxlIHx8IHt9O1xuXG4gICAgICAgICAgICBpZiAodHlwZW9mIHN0eWxlLmZpbGwgPT09ICdudW1iZXInKSB7XG4gICAgICAgICAgICAgICAgc3R5bGUuZmlsbCA9IHV0aWxzLmhleDJzdHJpbmcoc3R5bGUuZmlsbCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICh0eXBlb2Ygc3R5bGUuc3Ryb2tlID09PSAnbnVtYmVyJykge1xuICAgICAgICAgICAgICAgIHN0eWxlLnN0cm9rZSA9IHV0aWxzLmhleDJzdHJpbmcoc3R5bGUuc3Ryb2tlKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHR5cGVvZiBzdHlsZS5kcm9wU2hhZG93Q29sb3IgPT09ICdudW1iZXInKSB7XG4gICAgICAgICAgICAgICAgc3R5bGUuZHJvcFNoYWRvd0NvbG9yID0gdXRpbHMuaGV4MnN0cmluZyhzdHlsZS5kcm9wU2hhZG93Q29sb3IpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBzdHlsZS5mb250ID0gc3R5bGUuZm9udCB8fCAnYm9sZCAyMHB0IEFyaWFsJztcbiAgICAgICAgICAgIHN0eWxlLmZpbGwgPSBzdHlsZS5maWxsIHx8ICdibGFjayc7XG4gICAgICAgICAgICBzdHlsZS5hbGlnbiA9IHN0eWxlLmFsaWduIHx8ICdsZWZ0JztcbiAgICAgICAgICAgIHN0eWxlLnN0cm9rZSA9IHN0eWxlLnN0cm9rZSB8fCAnYmxhY2snOyAvL3Byb3ZpZGUgYSBkZWZhdWx0LCBzZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9waXhpanMvcGl4aS5qcy9pc3N1ZXMvMTM2XG4gICAgICAgICAgICBzdHlsZS5zdHJva2VUaGlja25lc3MgPSBzdHlsZS5zdHJva2VUaGlja25lc3MgfHwgMDtcbiAgICAgICAgICAgIHN0eWxlLndvcmRXcmFwID0gc3R5bGUud29yZFdyYXAgfHwgZmFsc2U7XG4gICAgICAgICAgICBzdHlsZS53b3JkV3JhcFdpZHRoID0gc3R5bGUud29yZFdyYXBXaWR0aCB8fCAxMDA7XG5cbiAgICAgICAgICAgIHN0eWxlLmRyb3BTaGFkb3cgPSBzdHlsZS5kcm9wU2hhZG93IHx8IGZhbHNlO1xuICAgICAgICAgICAgc3R5bGUuZHJvcFNoYWRvd0NvbG9yID0gc3R5bGUuZHJvcFNoYWRvd0NvbG9yIHx8ICcjMDAwMDAwJztcbiAgICAgICAgICAgIHN0eWxlLmRyb3BTaGFkb3dBbmdsZSA9IHN0eWxlLmRyb3BTaGFkb3dBbmdsZSAhPT0gdW5kZWZpbmVkID8gc3R5bGUuZHJvcFNoYWRvd0FuZ2xlIDogTWF0aC5QSSAvIDY7XG4gICAgICAgICAgICBzdHlsZS5kcm9wU2hhZG93RGlzdGFuY2UgPSBzdHlsZS5kcm9wU2hhZG93RGlzdGFuY2UgIT09IHVuZGVmaW5lZCA/IHN0eWxlLmRyb3BTaGFkb3dEaXN0YW5jZSA6IDU7XG4gICAgICAgICAgICBzdHlsZS5kcm9wU2hhZG93Qmx1ciA9IHN0eWxlLmRyb3BTaGFkb3dCbHVyICE9PSB1bmRlZmluZWQgPyBzdHlsZS5kcm9wU2hhZG93Qmx1ciA6IDA7IC8vc2hhZG93Qmx1ciBpcyAnMCcgYnkgZGVmYXVsdCBhY2NvcmRpbmcgdG8gSFRNTFxuXG4gICAgICAgICAgICBzdHlsZS5wYWRkaW5nID0gc3R5bGUucGFkZGluZyB8fCAwO1xuXG4gICAgICAgICAgICBzdHlsZS50ZXh0QmFzZWxpbmUgPSBzdHlsZS50ZXh0QmFzZWxpbmUgfHwgJ2FscGhhYmV0aWMnO1xuXG4gICAgICAgICAgICBzdHlsZS5saW5lSm9pbiA9IHN0eWxlLmxpbmVKb2luIHx8ICdtaXRlcic7XG4gICAgICAgICAgICBzdHlsZS5taXRlckxpbWl0ID0gc3R5bGUubWl0ZXJMaW1pdCB8fCAxMDtcblxuICAgICAgICAgICAgdGhpcy5fc3R5bGUgPSBzdHlsZTtcbiAgICAgICAgICAgIHRoaXMuZGlydHkgPSB0cnVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFNldCB0aGUgY29weSBmb3IgdGhlIHRleHQgb2JqZWN0LiBUbyBzcGxpdCBhIGxpbmUgeW91IGNhbiB1c2UgJ1xcbicuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gdGV4dCB7c3RyaW5nfSBUaGUgY29weSB0aGF0IHlvdSB3b3VsZCBsaWtlIHRoZSB0ZXh0IHRvIGRpc3BsYXlcbiAgICAgKiBAbWVtYmVyb2YgUElYSS5UZXh0I1xuICAgICAqL1xuICAgIHRleHQ6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbigpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl90ZXh0O1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh0ZXh0KXtcbiAgICAgICAgICAgIHRleHQgPSB0ZXh0LnRvU3RyaW5nKCkgfHwgJyAnO1xuICAgICAgICAgICAgaWYgKHRoaXMuX3RleHQgPT09IHRleHQpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5fdGV4dCA9IHRleHQ7XG4gICAgICAgICAgICB0aGlzLmRpcnR5ID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuXG4vKipcbiAqIFJlbmRlcnMgdGV4dCBhbmQgdXBkYXRlcyBpdCB3aGVuIG5lZWRlZFxuICpcbiAqIEBwcml2YXRlXG4gKi9cblRleHQucHJvdG90eXBlLnVwZGF0ZVRleHQgPSBmdW5jdGlvbiAoKVxue1xuICAgIHZhciBzdHlsZSA9IHRoaXMuX3N0eWxlO1xuICAgIHRoaXMuY29udGV4dC5mb250ID0gc3R5bGUuZm9udDtcblxuICAgIC8vIHdvcmQgd3JhcFxuICAgIC8vIHByZXNlcnZlIG9yaWdpbmFsIHRleHRcbiAgICB2YXIgb3V0cHV0VGV4dCA9IHN0eWxlLndvcmRXcmFwID8gdGhpcy53b3JkV3JhcCh0aGlzLl90ZXh0KSA6IHRoaXMuX3RleHQ7XG5cbiAgICAvLyBzcGxpdCB0ZXh0IGludG8gbGluZXNcbiAgICB2YXIgbGluZXMgPSBvdXRwdXRUZXh0LnNwbGl0KC8oPzpcXHJcXG58XFxyfFxcbikvKTtcblxuICAgIC8vIGNhbGN1bGF0ZSB0ZXh0IHdpZHRoXG4gICAgdmFyIGxpbmVXaWR0aHMgPSBuZXcgQXJyYXkobGluZXMubGVuZ3RoKTtcbiAgICB2YXIgbWF4TGluZVdpZHRoID0gMDtcbiAgICB2YXIgZm9udFByb3BlcnRpZXMgPSB0aGlzLmRldGVybWluZUZvbnRQcm9wZXJ0aWVzKHN0eWxlLmZvbnQpO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGluZXMubGVuZ3RoOyBpKyspXG4gICAge1xuICAgICAgICB2YXIgbGluZVdpZHRoID0gdGhpcy5jb250ZXh0Lm1lYXN1cmVUZXh0KGxpbmVzW2ldKS53aWR0aDtcbiAgICAgICAgbGluZVdpZHRoc1tpXSA9IGxpbmVXaWR0aDtcbiAgICAgICAgbWF4TGluZVdpZHRoID0gTWF0aC5tYXgobWF4TGluZVdpZHRoLCBsaW5lV2lkdGgpO1xuICAgIH1cblxuICAgIHZhciB3aWR0aCA9IG1heExpbmVXaWR0aCArIHN0eWxlLnN0cm9rZVRoaWNrbmVzcztcbiAgICBpZiAoc3R5bGUuZHJvcFNoYWRvdylcbiAgICB7XG4gICAgICAgIHdpZHRoICs9IHN0eWxlLmRyb3BTaGFkb3dEaXN0YW5jZTtcbiAgICB9XG5cbiAgICB0aGlzLmNhbnZhcy53aWR0aCA9ICggd2lkdGggKyB0aGlzLmNvbnRleHQubGluZVdpZHRoICkgKiB0aGlzLnJlc29sdXRpb247XG5cbiAgICAvLyBjYWxjdWxhdGUgdGV4dCBoZWlnaHRcbiAgICB2YXIgbGluZUhlaWdodCA9IHRoaXMuc3R5bGUubGluZUhlaWdodCB8fCBmb250UHJvcGVydGllcy5mb250U2l6ZSArIHN0eWxlLnN0cm9rZVRoaWNrbmVzcztcblxuICAgIHZhciBoZWlnaHQgPSBsaW5lSGVpZ2h0ICogbGluZXMubGVuZ3RoO1xuICAgIGlmIChzdHlsZS5kcm9wU2hhZG93KVxuICAgIHtcbiAgICAgICAgaGVpZ2h0ICs9IHN0eWxlLmRyb3BTaGFkb3dEaXN0YW5jZTtcbiAgICB9XG5cbiAgICB0aGlzLmNhbnZhcy5oZWlnaHQgPSAoIGhlaWdodCArIHRoaXMuX3N0eWxlLnBhZGRpbmcgKiAyICkgKiB0aGlzLnJlc29sdXRpb247XG5cbiAgICB0aGlzLmNvbnRleHQuc2NhbGUoIHRoaXMucmVzb2x1dGlvbiwgdGhpcy5yZXNvbHV0aW9uKTtcblxuICAgIGlmIChuYXZpZ2F0b3IuaXNDb2Nvb25KUylcbiAgICB7XG4gICAgICAgIHRoaXMuY29udGV4dC5jbGVhclJlY3QoMCwgMCwgdGhpcy5jYW52YXMud2lkdGgsIHRoaXMuY2FudmFzLmhlaWdodCk7XG5cbiAgICB9XG5cbiAgICAvL3RoaXMuY29udGV4dC5maWxsU3R5bGU9XCIjRkYwMDAwXCI7XG4gICAgLy90aGlzLmNvbnRleHQuZmlsbFJlY3QoMCwgMCwgdGhpcy5jYW52YXMud2lkdGgsIHRoaXMuY2FudmFzLmhlaWdodCk7XG5cbiAgICB0aGlzLmNvbnRleHQuZm9udCA9IHN0eWxlLmZvbnQ7XG4gICAgdGhpcy5jb250ZXh0LnN0cm9rZVN0eWxlID0gc3R5bGUuc3Ryb2tlO1xuICAgIHRoaXMuY29udGV4dC5saW5lV2lkdGggPSBzdHlsZS5zdHJva2VUaGlja25lc3M7XG4gICAgdGhpcy5jb250ZXh0LnRleHRCYXNlbGluZSA9IHN0eWxlLnRleHRCYXNlbGluZTtcbiAgICB0aGlzLmNvbnRleHQubGluZUpvaW4gPSBzdHlsZS5saW5lSm9pbjtcbiAgICB0aGlzLmNvbnRleHQubWl0ZXJMaW1pdCA9IHN0eWxlLm1pdGVyTGltaXQ7XG5cbiAgICB2YXIgbGluZVBvc2l0aW9uWDtcbiAgICB2YXIgbGluZVBvc2l0aW9uWTtcblxuICAgIGlmIChzdHlsZS5kcm9wU2hhZG93KVxuICAgIHtcbiAgICAgICAgaWYgKHN0eWxlLmRyb3BTaGFkb3dCbHVyID4gMCkge1xuICAgICAgICAgICAgdGhpcy5jb250ZXh0LnNoYWRvd0NvbG9yID0gc3R5bGUuZHJvcFNoYWRvd0NvbG9yO1xuICAgICAgICAgICAgdGhpcy5jb250ZXh0LnNoYWRvd0JsdXIgPSBzdHlsZS5kcm9wU2hhZG93Qmx1cjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuY29udGV4dC5maWxsU3R5bGUgPSBzdHlsZS5kcm9wU2hhZG93Q29sb3I7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgeFNoYWRvd09mZnNldCA9IE1hdGguY29zKHN0eWxlLmRyb3BTaGFkb3dBbmdsZSkgKiBzdHlsZS5kcm9wU2hhZG93RGlzdGFuY2U7XG4gICAgICAgIHZhciB5U2hhZG93T2Zmc2V0ID0gTWF0aC5zaW4oc3R5bGUuZHJvcFNoYWRvd0FuZ2xlKSAqIHN0eWxlLmRyb3BTaGFkb3dEaXN0YW5jZTtcblxuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbGluZXMubGVuZ3RoOyBpKyspXG4gICAgICAgIHtcbiAgICAgICAgICAgIGxpbmVQb3NpdGlvblggPSBzdHlsZS5zdHJva2VUaGlja25lc3MgLyAyO1xuICAgICAgICAgICAgbGluZVBvc2l0aW9uWSA9IChzdHlsZS5zdHJva2VUaGlja25lc3MgLyAyICsgaSAqIGxpbmVIZWlnaHQpICsgZm9udFByb3BlcnRpZXMuYXNjZW50O1xuXG4gICAgICAgICAgICBpZiAoc3R5bGUuYWxpZ24gPT09ICdyaWdodCcpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgbGluZVBvc2l0aW9uWCArPSBtYXhMaW5lV2lkdGggLSBsaW5lV2lkdGhzW2ldO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoc3R5bGUuYWxpZ24gPT09ICdjZW50ZXInKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGxpbmVQb3NpdGlvblggKz0gKG1heExpbmVXaWR0aCAtIGxpbmVXaWR0aHNbaV0pIC8gMjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHN0eWxlLmZpbGwpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdGhpcy5jb250ZXh0LmZpbGxUZXh0KGxpbmVzW2ldLCBsaW5lUG9zaXRpb25YICsgeFNoYWRvd09mZnNldCwgbGluZVBvc2l0aW9uWSArIHlTaGFkb3dPZmZzZXQgKyB0aGlzLl9zdHlsZS5wYWRkaW5nKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vc2V0IGNhbnZhcyB0ZXh0IHN0eWxlc1xuICAgIHRoaXMuY29udGV4dC5maWxsU3R5bGUgPSBzdHlsZS5maWxsO1xuXG4gICAgLy9kcmF3IGxpbmVzIGxpbmUgYnkgbGluZVxuICAgIGZvciAoaSA9IDA7IGkgPCBsaW5lcy5sZW5ndGg7IGkrKylcbiAgICB7XG4gICAgICAgIGxpbmVQb3NpdGlvblggPSBzdHlsZS5zdHJva2VUaGlja25lc3MgLyAyO1xuICAgICAgICBsaW5lUG9zaXRpb25ZID0gKHN0eWxlLnN0cm9rZVRoaWNrbmVzcyAvIDIgKyBpICogbGluZUhlaWdodCkgKyBmb250UHJvcGVydGllcy5hc2NlbnQ7XG5cbiAgICAgICAgaWYgKHN0eWxlLmFsaWduID09PSAncmlnaHQnKVxuICAgICAgICB7XG4gICAgICAgICAgICBsaW5lUG9zaXRpb25YICs9IG1heExpbmVXaWR0aCAtIGxpbmVXaWR0aHNbaV07XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoc3R5bGUuYWxpZ24gPT09ICdjZW50ZXInKVxuICAgICAgICB7XG4gICAgICAgICAgICBsaW5lUG9zaXRpb25YICs9IChtYXhMaW5lV2lkdGggLSBsaW5lV2lkdGhzW2ldKSAvIDI7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoc3R5bGUuc3Ryb2tlICYmIHN0eWxlLnN0cm9rZVRoaWNrbmVzcylcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5jb250ZXh0LnN0cm9rZVRleHQobGluZXNbaV0sIGxpbmVQb3NpdGlvblgsIGxpbmVQb3NpdGlvblkgKyB0aGlzLl9zdHlsZS5wYWRkaW5nKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChzdHlsZS5maWxsKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmNvbnRleHQuZmlsbFRleHQobGluZXNbaV0sIGxpbmVQb3NpdGlvblgsIGxpbmVQb3NpdGlvblkgKyB0aGlzLl9zdHlsZS5wYWRkaW5nKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMudXBkYXRlVGV4dHVyZSgpO1xufTtcblxuLyoqXG4gKiBVcGRhdGVzIHRleHR1cmUgc2l6ZSBiYXNlZCBvbiBjYW52YXMgc2l6ZVxuICpcbiAqIEBwcml2YXRlXG4gKi9cblRleHQucHJvdG90eXBlLnVwZGF0ZVRleHR1cmUgPSBmdW5jdGlvbiAoKVxue1xuICAgIHZhciB0ZXh0dXJlID0gdGhpcy5fdGV4dHVyZTtcblxuICAgIHRleHR1cmUuYmFzZVRleHR1cmUuaGFzTG9hZGVkID0gdHJ1ZTtcbiAgICB0ZXh0dXJlLmJhc2VUZXh0dXJlLnJlc29sdXRpb24gPSB0aGlzLnJlc29sdXRpb247XG5cbiAgICB0ZXh0dXJlLmJhc2VUZXh0dXJlLndpZHRoID0gdGhpcy5jYW52YXMud2lkdGggLyB0aGlzLnJlc29sdXRpb247XG4gICAgdGV4dHVyZS5iYXNlVGV4dHVyZS5oZWlnaHQgPSB0aGlzLmNhbnZhcy5oZWlnaHQgLyB0aGlzLnJlc29sdXRpb247XG4gICAgdGV4dHVyZS5jcm9wLndpZHRoID0gdGV4dHVyZS5fZnJhbWUud2lkdGggPSB0aGlzLmNhbnZhcy53aWR0aCAvIHRoaXMucmVzb2x1dGlvbjtcbiAgICB0ZXh0dXJlLmNyb3AuaGVpZ2h0ID0gdGV4dHVyZS5fZnJhbWUuaGVpZ2h0ID0gdGhpcy5jYW52YXMuaGVpZ2h0IC8gdGhpcy5yZXNvbHV0aW9uO1xuXG4gICAgdGV4dHVyZS50cmltLnggPSAwO1xuICAgIHRleHR1cmUudHJpbS55ID0gLXRoaXMuX3N0eWxlLnBhZGRpbmc7XG5cbiAgICB0ZXh0dXJlLnRyaW0ud2lkdGggPSB0ZXh0dXJlLl9mcmFtZS53aWR0aDtcbiAgICB0ZXh0dXJlLnRyaW0uaGVpZ2h0ID0gdGV4dHVyZS5fZnJhbWUuaGVpZ2h0IC0gdGhpcy5fc3R5bGUucGFkZGluZyoyO1xuXG4gICAgdGhpcy5fd2lkdGggPSB0aGlzLmNhbnZhcy53aWR0aCAvIHRoaXMucmVzb2x1dGlvbjtcbiAgICB0aGlzLl9oZWlnaHQgPSB0aGlzLmNhbnZhcy5oZWlnaHQgLyB0aGlzLnJlc29sdXRpb247XG5cbiAgICB0ZXh0dXJlLmJhc2VUZXh0dXJlLmVtaXQoJ3VwZGF0ZScsICB0ZXh0dXJlLmJhc2VUZXh0dXJlKTtcblxuICAgIHRoaXMuZGlydHkgPSBmYWxzZTtcbn07XG5cbi8qKlxuICogUmVuZGVycyB0aGUgb2JqZWN0IHVzaW5nIHRoZSBXZWJHTCByZW5kZXJlclxuICpcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5XZWJHTFJlbmRlcmVyfVxuICovXG5UZXh0LnByb3RvdHlwZS5yZW5kZXJXZWJHTCA9IGZ1bmN0aW9uIChyZW5kZXJlcilcbntcbiAgICBpZiAodGhpcy5kaXJ0eSlcbiAgICB7XG4gICAgICAgIC8vdGhpcy5yZXNvbHV0aW9uID0gMS8vcmVuZGVyZXIucmVzb2x1dGlvbjtcblxuICAgICAgICB0aGlzLnVwZGF0ZVRleHQoKTtcbiAgICB9XG5cbiAgICBTcHJpdGUucHJvdG90eXBlLnJlbmRlcldlYkdMLmNhbGwodGhpcywgcmVuZGVyZXIpO1xufTtcblxuLyoqXG4gKiBSZW5kZXJzIHRoZSBvYmplY3QgdXNpbmcgdGhlIENhbnZhcyByZW5kZXJlclxuICpcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5DYW52YXNSZW5kZXJlcn1cbiAqIEBwcml2YXRlXG4gKi9cblRleHQucHJvdG90eXBlLl9yZW5kZXJDYW52YXMgPSBmdW5jdGlvbiAocmVuZGVyZXIpXG57XG4gICAgaWYgKHRoaXMuZGlydHkpXG4gICAge1xuICAgICAvLyAgIHRoaXMucmVzb2x1dGlvbiA9IDEvL3JlbmRlcmVyLnJlc29sdXRpb247XG5cbiAgICAgICAgdGhpcy51cGRhdGVUZXh0KCk7XG4gICAgfVxuXG4gICAgU3ByaXRlLnByb3RvdHlwZS5fcmVuZGVyQ2FudmFzLmNhbGwodGhpcywgcmVuZGVyZXIpO1xufTtcblxuLyoqXG4gKiBDYWxjdWxhdGVzIHRoZSBhc2NlbnQsIGRlc2NlbnQgYW5kIGZvbnRTaXplIG9mIGEgZ2l2ZW4gZm9udFN0eWxlXG4gKlxuICogQHBhcmFtIGZvbnRTdHlsZSB7b2JqZWN0fVxuICogQHByaXZhdGVcbiAqL1xuVGV4dC5wcm90b3R5cGUuZGV0ZXJtaW5lRm9udFByb3BlcnRpZXMgPSBmdW5jdGlvbiAoZm9udFN0eWxlKVxue1xuICAgIHZhciBwcm9wZXJ0aWVzID0gVGV4dC5mb250UHJvcGVydGllc0NhY2hlW2ZvbnRTdHlsZV07XG5cbiAgICBpZiAoIXByb3BlcnRpZXMpXG4gICAge1xuICAgICAgICBwcm9wZXJ0aWVzID0ge307XG5cbiAgICAgICAgdmFyIGNhbnZhcyA9IFRleHQuZm9udFByb3BlcnRpZXNDYW52YXM7XG4gICAgICAgIHZhciBjb250ZXh0ID0gVGV4dC5mb250UHJvcGVydGllc0NvbnRleHQ7XG5cbiAgICAgICAgY29udGV4dC5mb250ID0gZm9udFN0eWxlO1xuXG4gICAgICAgIHZhciB3aWR0aCA9IE1hdGguY2VpbChjb250ZXh0Lm1lYXN1cmVUZXh0KCd8TcOJcScpLndpZHRoKTtcbiAgICAgICAgdmFyIGJhc2VsaW5lID0gTWF0aC5jZWlsKGNvbnRleHQubWVhc3VyZVRleHQoJ00nKS53aWR0aCk7XG4gICAgICAgIHZhciBoZWlnaHQgPSAyICogYmFzZWxpbmU7XG5cbiAgICAgICAgYmFzZWxpbmUgPSBiYXNlbGluZSAqIDEuNCB8IDA7XG5cbiAgICAgICAgY2FudmFzLndpZHRoID0gd2lkdGg7XG4gICAgICAgIGNhbnZhcy5oZWlnaHQgPSBoZWlnaHQ7XG5cbiAgICAgICAgY29udGV4dC5maWxsU3R5bGUgPSAnI2YwMCc7XG4gICAgICAgIGNvbnRleHQuZmlsbFJlY3QoMCwgMCwgd2lkdGgsIGhlaWdodCk7XG5cbiAgICAgICAgY29udGV4dC5mb250ID0gZm9udFN0eWxlO1xuXG4gICAgICAgIGNvbnRleHQudGV4dEJhc2VsaW5lID0gJ2FscGhhYmV0aWMnO1xuICAgICAgICBjb250ZXh0LmZpbGxTdHlsZSA9ICcjMDAwJztcbiAgICAgICAgY29udGV4dC5maWxsVGV4dCgnfE3DiXEnLCAwLCBiYXNlbGluZSk7XG5cbiAgICAgICAgdmFyIGltYWdlZGF0YSA9IGNvbnRleHQuZ2V0SW1hZ2VEYXRhKDAsIDAsIHdpZHRoLCBoZWlnaHQpLmRhdGE7XG4gICAgICAgIHZhciBwaXhlbHMgPSBpbWFnZWRhdGEubGVuZ3RoO1xuICAgICAgICB2YXIgbGluZSA9IHdpZHRoICogNDtcblxuICAgICAgICB2YXIgaSwgajtcblxuICAgICAgICB2YXIgaWR4ID0gMDtcbiAgICAgICAgdmFyIHN0b3AgPSBmYWxzZTtcblxuICAgICAgICAvLyBhc2NlbnQuIHNjYW4gZnJvbSB0b3AgdG8gYm90dG9tIHVudGlsIHdlIGZpbmQgYSBub24gcmVkIHBpeGVsXG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCBiYXNlbGluZTsgaSsrKVxuICAgICAgICB7XG4gICAgICAgICAgICBmb3IgKGogPSAwOyBqIDwgbGluZTsgaiArPSA0KVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGlmIChpbWFnZWRhdGFbaWR4ICsgal0gIT09IDI1NSlcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIHN0b3AgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIXN0b3ApXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgaWR4ICs9IGxpbmU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBwcm9wZXJ0aWVzLmFzY2VudCA9IGJhc2VsaW5lIC0gaTtcblxuICAgICAgICBpZHggPSBwaXhlbHMgLSBsaW5lO1xuICAgICAgICBzdG9wID0gZmFsc2U7XG5cbiAgICAgICAgLy8gZGVzY2VudC4gc2NhbiBmcm9tIGJvdHRvbSB0byB0b3AgdW50aWwgd2UgZmluZCBhIG5vbiByZWQgcGl4ZWxcbiAgICAgICAgZm9yIChpID0gaGVpZ2h0OyBpID4gYmFzZWxpbmU7IGktLSlcbiAgICAgICAge1xuICAgICAgICAgICAgZm9yIChqID0gMDsgaiA8IGxpbmU7IGogKz0gNClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBpZiAoaW1hZ2VkYXRhW2lkeCArIGpdICE9PSAyNTUpXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBzdG9wID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCFzdG9wKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGlkeCAtPSBsaW5lO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcHJvcGVydGllcy5kZXNjZW50ID0gaSAtIGJhc2VsaW5lO1xuICAgICAgICBwcm9wZXJ0aWVzLmZvbnRTaXplID0gcHJvcGVydGllcy5hc2NlbnQgKyBwcm9wZXJ0aWVzLmRlc2NlbnQ7XG5cbiAgICAgICAgVGV4dC5mb250UHJvcGVydGllc0NhY2hlW2ZvbnRTdHlsZV0gPSBwcm9wZXJ0aWVzO1xuICAgIH1cblxuICAgIHJldHVybiBwcm9wZXJ0aWVzO1xufTtcblxuLyoqXG4gKiBBcHBsaWVzIG5ld2xpbmVzIHRvIGEgc3RyaW5nIHRvIGhhdmUgaXQgb3B0aW1hbGx5IGZpdCBpbnRvIHRoZSBob3Jpem9udGFsXG4gKiBib3VuZHMgc2V0IGJ5IHRoZSBUZXh0IG9iamVjdCdzIHdvcmRXcmFwV2lkdGggcHJvcGVydHkuXG4gKlxuICogQHBhcmFtIHRleHQge3N0cmluZ31cbiAqIEBwcml2YXRlXG4gKi9cblRleHQucHJvdG90eXBlLndvcmRXcmFwID0gZnVuY3Rpb24gKHRleHQpXG57XG4gICAgLy8gR3JlZWR5IHdyYXBwaW5nIGFsZ29yaXRobSB0aGF0IHdpbGwgd3JhcCB3b3JkcyBhcyB0aGUgbGluZSBncm93cyBsb25nZXJcbiAgICAvLyB0aGFuIGl0cyBob3Jpem9udGFsIGJvdW5kcy5cbiAgICB2YXIgcmVzdWx0ID0gJyc7XG4gICAgdmFyIGxpbmVzID0gdGV4dC5zcGxpdCgnXFxuJyk7XG4gICAgdmFyIHdvcmRXcmFwV2lkdGggPSB0aGlzLl9zdHlsZS53b3JkV3JhcFdpZHRoO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGluZXMubGVuZ3RoOyBpKyspXG4gICAge1xuICAgICAgICB2YXIgc3BhY2VMZWZ0ID0gd29yZFdyYXBXaWR0aDtcbiAgICAgICAgdmFyIHdvcmRzID0gbGluZXNbaV0uc3BsaXQoJyAnKTtcbiAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCB3b3Jkcy5sZW5ndGg7IGorKylcbiAgICAgICAge1xuICAgICAgICAgICAgdmFyIHdvcmRXaWR0aCA9IHRoaXMuY29udGV4dC5tZWFzdXJlVGV4dCh3b3Jkc1tqXSkud2lkdGg7XG4gICAgICAgICAgICB2YXIgd29yZFdpZHRoV2l0aFNwYWNlID0gd29yZFdpZHRoICsgdGhpcy5jb250ZXh0Lm1lYXN1cmVUZXh0KCcgJykud2lkdGg7XG4gICAgICAgICAgICBpZiAoaiA9PT0gMCB8fCB3b3JkV2lkdGhXaXRoU3BhY2UgPiBzcGFjZUxlZnQpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgLy8gU2tpcCBwcmludGluZyB0aGUgbmV3bGluZSBpZiBpdCdzIHRoZSBmaXJzdCB3b3JkIG9mIHRoZSBsaW5lIHRoYXQgaXNcbiAgICAgICAgICAgICAgICAvLyBncmVhdGVyIHRoYW4gdGhlIHdvcmQgd3JhcCB3aWR0aC5cbiAgICAgICAgICAgICAgICBpZiAoaiA+IDApXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQgKz0gJ1xcbic7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJlc3VsdCArPSB3b3Jkc1tqXTtcbiAgICAgICAgICAgICAgICBzcGFjZUxlZnQgPSB3b3JkV3JhcFdpZHRoIC0gd29yZFdpZHRoO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHNwYWNlTGVmdCAtPSB3b3JkV2lkdGhXaXRoU3BhY2U7XG4gICAgICAgICAgICAgICAgcmVzdWx0ICs9ICcgJyArIHdvcmRzW2pdO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGkgPCBsaW5lcy5sZW5ndGgtMSlcbiAgICAgICAge1xuICAgICAgICAgICAgcmVzdWx0ICs9ICdcXG4nO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG59O1xuXG4vKipcbiAqIFJldHVybnMgdGhlIGJvdW5kcyBvZiB0aGUgVGV4dCBhcyBhIHJlY3RhbmdsZS4gVGhlIGJvdW5kcyBjYWxjdWxhdGlvbiB0YWtlcyB0aGUgd29ybGRUcmFuc2Zvcm0gaW50byBhY2NvdW50LlxuICpcbiAqIEBwYXJhbSBtYXRyaXgge1BJWEkuTWF0cml4fSB0aGUgdHJhbnNmb3JtYXRpb24gbWF0cml4IG9mIHRoZSBUZXh0XG4gKiBAcmV0dXJuIHtQSVhJLlJlY3RhbmdsZX0gdGhlIGZyYW1pbmcgcmVjdGFuZ2xlXG4gKi9cblRleHQucHJvdG90eXBlLmdldEJvdW5kcyA9IGZ1bmN0aW9uIChtYXRyaXgpXG57XG4gICAgaWYgKHRoaXMuZGlydHkpXG4gICAge1xuICAgICAgICB0aGlzLnVwZGF0ZVRleHQoKTtcbiAgICB9XG5cbiAgICByZXR1cm4gU3ByaXRlLnByb3RvdHlwZS5nZXRCb3VuZHMuY2FsbCh0aGlzLCBtYXRyaXgpO1xufTtcblxuLyoqXG4gKiBEZXN0cm95cyB0aGlzIHRleHQgb2JqZWN0LlxuICpcbiAqIEBwYXJhbSBbZGVzdHJveUJhc2VUZXh0dXJlPXRydWVdIHtib29sZWFufSB3aGV0aGVyIHRvIGRlc3Ryb3kgdGhlIGJhc2UgdGV4dHVyZSBhcyB3ZWxsXG4gKi9cblRleHQucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoZGVzdHJveUJhc2VUZXh0dXJlKVxue1xuICAgIC8vIG1ha2Ugc3VyZSB0byByZXNldCB0aGUgdGhlIGNvbnRleHQgYW5kIGNhbnZhcy4uIGRvbnQgd2FudCB0aGlzIGhhbmdpbmcgYXJvdW5kIGluIG1lbW9yeSFcbiAgICB0aGlzLmNvbnRleHQgPSBudWxsO1xuICAgIHRoaXMuY2FudmFzID0gbnVsbDtcblxuICAgIHRoaXMuX3N0eWxlID0gbnVsbDtcblxuICAgIHRoaXMuX3RleHR1cmUuZGVzdHJveShkZXN0cm95QmFzZVRleHR1cmUgPT09IHVuZGVmaW5lZCA/IHRydWUgOiBkZXN0cm95QmFzZVRleHR1cmUpO1xufTtcbiIsInZhciB1dGlscyA9IHJlcXVpcmUoJy4uL3V0aWxzJyksXG4gICAgQ09OU1QgPSByZXF1aXJlKCcuLi9jb25zdCcpLFxuICAgIEV2ZW50RW1pdHRlciA9IHJlcXVpcmUoJ2V2ZW50ZW1pdHRlcjMnKTtcblxuLyoqXG4gKiBBIHRleHR1cmUgc3RvcmVzIHRoZSBpbmZvcm1hdGlvbiB0aGF0IHJlcHJlc2VudHMgYW4gaW1hZ2UuIEFsbCB0ZXh0dXJlcyBoYXZlIGEgYmFzZSB0ZXh0dXJlLlxuICpcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqIEBwYXJhbSBzb3VyY2Uge0ltYWdlfENhbnZhc30gdGhlIHNvdXJjZSBvYmplY3Qgb2YgdGhlIHRleHR1cmUuXG4gKiBAcGFyYW0gW3NjYWxlTW9kZT1QSVhJLlNDQUxFX01PREVTLkRFRkFVTFRdIHtudW1iZXJ9IFNlZSB7QGxpbmsgUElYSS5TQ0FMRV9NT0RFU30gZm9yIHBvc3NpYmxlIHZhbHVlc1xuICogQHBhcmFtIHJlc29sdXRpb24ge251bWJlcn0gdGhlIHJlc29sdXRpb24gb2YgdGhlIHRleHR1cmUgZm9yIGRldmljZXMgd2l0aCBkaWZmZXJlbnQgcGl4ZWwgcmF0aW9zXG4gKi9cbmZ1bmN0aW9uIEJhc2VUZXh0dXJlKHNvdXJjZSwgc2NhbGVNb2RlLCByZXNvbHV0aW9uKVxue1xuICAgIEV2ZW50RW1pdHRlci5jYWxsKHRoaXMpO1xuXG4gICAgdGhpcy51aWQgPSB1dGlscy51aWQoKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBSZXNvbHV0aW9uIG9mIHRoZSB0ZXh0dXJlLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMucmVzb2x1dGlvbiA9IHJlc29sdXRpb24gfHwgMTtcblxuICAgIC8qKlxuICAgICAqIFRoZSB3aWR0aCBvZiB0aGUgYmFzZSB0ZXh0dXJlIHNldCB3aGVuIHRoZSBpbWFnZSBoYXMgbG9hZGVkXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQHJlYWRPbmx5XG4gICAgICovXG4gICAgdGhpcy53aWR0aCA9IDEwMDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBoZWlnaHQgb2YgdGhlIGJhc2UgdGV4dHVyZSBzZXQgd2hlbiB0aGUgaW1hZ2UgaGFzIGxvYWRlZFxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEByZWFkT25seVxuICAgICAqL1xuICAgIHRoaXMuaGVpZ2h0ID0gMTAwO1xuXG4gICAgLy8gVE9ETyBkb2NzXG4gICAgLy8gdXNlZCB0byBzdG9yZSB0aGUgYWN0dWFsIGRpbWVuc2lvbnMgb2YgdGhlIHNvdXJjZVxuICAgIC8qKlxuICAgICAqIFVzZWQgdG8gc3RvcmUgdGhlIGFjdHVhbCB3aWR0aCBvZiB0aGUgc291cmNlIG9mIHRoaXMgdGV4dHVyZVxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEByZWFkT25seVxuICAgICAqL1xuICAgIHRoaXMucmVhbFdpZHRoID0gMTAwO1xuICAgIC8qKlxuICAgICAqIFVzZWQgdG8gc3RvcmUgdGhlIGFjdHVhbCBoZWlnaHQgb2YgdGhlIHNvdXJjZSBvZiB0aGlzIHRleHR1cmVcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAcmVhZE9ubHlcbiAgICAgKi9cbiAgICB0aGlzLnJlYWxIZWlnaHQgPSAxMDA7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgc2NhbGUgbW9kZSB0byBhcHBseSB3aGVuIHNjYWxpbmcgdGhpcyB0ZXh0dXJlXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgUElYSS5TQ0FMRV9NT0RFUy5MSU5FQVJcbiAgICAgKiBAc2VlIFBJWEkuU0NBTEVfTU9ERVNcbiAgICAgKi9cbiAgICB0aGlzLnNjYWxlTW9kZSA9IHNjYWxlTW9kZSB8fCBDT05TVC5TQ0FMRV9NT0RFUy5ERUZBVUxUO1xuXG4gICAgLyoqXG4gICAgICogU2V0IHRvIHRydWUgb25jZSB0aGUgYmFzZSB0ZXh0dXJlIGhhcyBzdWNjZXNzZnVsbHkgbG9hZGVkLlxuICAgICAqXG4gICAgICogVGhpcyBpcyBuZXZlciB0cnVlIGlmIHRoZSB1bmRlcmx5aW5nIHNvdXJjZSBmYWlscyB0byBsb2FkIG9yIGhhcyBubyB0ZXh0dXJlIGRhdGEuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqIEByZWFkT25seVxuICAgICAqL1xuICAgIHRoaXMuaGFzTG9hZGVkID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBTZXQgdG8gdHJ1ZSBpZiB0aGUgc291cmNlIGlzIGN1cnJlbnRseSBsb2FkaW5nLlxuICAgICAqXG4gICAgICogSWYgYW4gSW1hZ2Ugc291cmNlIGlzIGxvYWRpbmcgdGhlICdsb2FkZWQnIG9yICdlcnJvcicgZXZlbnQgd2lsbCBiZVxuICAgICAqIGRpc3BhdGNoZWQgd2hlbiB0aGUgb3BlcmF0aW9uIGVuZHMuIEFuIHVuZGVyeWxpbmcgc291cmNlIHRoYXQgaXNcbiAgICAgKiBpbW1lZGlhdGVseS1hdmFpbGFibGUgYnlwYXNzZXMgbG9hZGluZyBlbnRpcmVseS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICogQHJlYWRvbmx5XG4gICAgICovXG4gICAgdGhpcy5pc0xvYWRpbmcgPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBpbWFnZSBzb3VyY2UgdGhhdCBpcyB1c2VkIHRvIGNyZWF0ZSB0aGUgdGV4dHVyZS5cbiAgICAgKlxuICAgICAqIFRPRE86IE1ha2UgdGhpcyBhIHNldHRlciB0aGF0IGNhbGxzIGxvYWRTb3VyY2UoKTtcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge0ltYWdlfENhbnZhc31cbiAgICAgKiBAcmVhZG9ubHlcbiAgICAgKi9cbiAgICB0aGlzLnNvdXJjZSA9IG51bGw7IC8vIHNldCBpbiBsb2FkU291cmNlLCBpZiBhdCBhbGxcblxuICAgIC8qKlxuICAgICAqIENvbnRyb2xzIGlmIFJHQiBjaGFubmVscyBzaG91bGQgYmUgcHJlLW11bHRpcGxpZWQgYnkgQWxwaGEgIChXZWJHTCBvbmx5KVxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKiBAZGVmYXVsdCB0cnVlXG4gICAgICovXG4gICAgdGhpcy5wcmVtdWx0aXBsaWVkQWxwaGEgPSB0cnVlO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7c3RyaW5nfVxuICAgICAqL1xuICAgIHRoaXMuaW1hZ2VVcmwgPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogV2V0aGVyIG9yIG5vdCB0aGUgdGV4dHVyZSBpcyBhIHBvd2VyIG9mIHR3bywgdHJ5IHRvIHVzZSBwb3dlciBvZiB0d28gdGV4dHVyZXMgYXMgbXVjaCBhcyB5b3UgY2FuXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuaXNQb3dlck9mVHdvID0gZmFsc2U7XG5cbiAgICAvLyB1c2VkIGZvciB3ZWJHTFxuXG4gICAgLyoqXG4gICAgICpcbiAgICAgKiBTZXQgdGhpcyB0byB0cnVlIGlmIGEgbWlwbWFwIG9mIHRoaXMgdGV4dHVyZSBuZWVkcyB0byBiZSBnZW5lcmF0ZWQuIFRoaXMgdmFsdWUgbmVlZHMgdG8gYmUgc2V0IGJlZm9yZSB0aGUgdGV4dHVyZSBpcyB1c2VkXG4gICAgICogQWxzbyB0aGUgdGV4dHVyZSBtdXN0IGJlIGEgcG93ZXIgb2YgdHdvIHNpemUgdG8gd29ya1xuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKi9cbiAgICB0aGlzLm1pcG1hcCA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogQSBtYXAgb2YgcmVuZGVyZXIgSURzIHRvIHdlYmdsIHRleHR1cmVzXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtvYmplY3Q8bnVtYmVyLCBXZWJHTFRleHR1cmU+fVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fZ2xUZXh0dXJlcyA9IHt9O1xuICAgIHRoaXMuX2FjdGl2ZSA9IGZhbHNlO1xuICAgIHRoaXMuX2lkID0gMDtcbiAgICBcbiAgICAvLyBpZiBubyBzb3VyY2UgcGFzc2VkIGRvbid0IHRyeSB0byBsb2FkXG4gICAgaWYgKHNvdXJjZSlcbiAgICB7XG4gICAgICAgIHRoaXMubG9hZFNvdXJjZShzb3VyY2UpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEZpcmVkIHdoZW4gYSBub3QtaW1tZWRpYXRlbHktYXZhaWxhYmxlIHNvdXJjZSBmaW5pc2hlcyBsb2FkaW5nLlxuICAgICAqXG4gICAgICogQGV2ZW50IGxvYWRlZFxuICAgICAqIEBtZW1iZXJvZiBQSVhJLkJhc2VUZXh0dXJlI1xuICAgICAqIEBwcm90ZWN0ZWRcbiAgICAgKi9cblxuICAgIC8qKlxuICAgICAqIEZpcmVkIHdoZW4gYSBub3QtaW1tZWRpYXRlbHktYXZhaWxhYmxlIHNvdXJjZSBmYWlscyB0byBsb2FkLlxuICAgICAqXG4gICAgICogQGV2ZW50IGVycm9yXG4gICAgICogQG1lbWJlcm9mIFBJWEkuQmFzZVRleHR1cmUjXG4gICAgICogQHByb3RlY3RlZFxuICAgICAqL1xufVxuXG5CYXNlVGV4dHVyZS5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKEV2ZW50RW1pdHRlci5wcm90b3R5cGUpO1xuQmFzZVRleHR1cmUucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gQmFzZVRleHR1cmU7XG5tb2R1bGUuZXhwb3J0cyA9IEJhc2VUZXh0dXJlO1xuXG4vKipcbiAqIFVwZGF0ZXMgdGhlIHRleHR1cmUgb24gYWxsIHRoZSB3ZWJnbCByZW5kZXJlcnMsIHRoaXMgYWxzbyBhc3N1bWVzIHRoZSBzcmMgaGFzIGNoYW5nZWQuXG4gKlxuICogQGZpcmVzIHVwZGF0ZVxuICovXG5CYXNlVGV4dHVyZS5wcm90b3R5cGUudXBkYXRlID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLnJlYWxXaWR0aCA9IHRoaXMuc291cmNlLm5hdHVyYWxXaWR0aCB8fCB0aGlzLnNvdXJjZS53aWR0aDtcbiAgICB0aGlzLnJlYWxIZWlnaHQgPSB0aGlzLnNvdXJjZS5uYXR1cmFsSGVpZ2h0IHx8IHRoaXMuc291cmNlLmhlaWdodDtcblxuICAgIHRoaXMud2lkdGggPSB0aGlzLnJlYWxXaWR0aCAvIHRoaXMucmVzb2x1dGlvbjtcbiAgICB0aGlzLmhlaWdodCA9IHRoaXMucmVhbEhlaWdodCAvIHRoaXMucmVzb2x1dGlvbjtcblxuICAgIHRoaXMuaXNQb3dlck9mVHdvID0gdXRpbHMuaXNQb3dlck9mVHdvKHRoaXMucmVhbFdpZHRoLCB0aGlzLnJlYWxIZWlnaHQpO1xuXG4gICAgdGhpcy5lbWl0KCd1cGRhdGUnLCB0aGlzKTtcbn07XG5cbi8qKlxuICogTG9hZCBhIHNvdXJjZS5cbiAqXG4gKiBJZiB0aGUgc291cmNlIGlzIG5vdC1pbW1lZGlhdGVseS1hdmFpbGFibGUsIHN1Y2ggYXMgYW4gaW1hZ2UgdGhhdCBuZWVkcyB0byBiZVxuICogZG93bmxvYWRlZCwgdGhlbiB0aGUgJ2xvYWRlZCcgb3IgJ2Vycm9yJyBldmVudCB3aWxsIGJlIGRpc3BhdGNoZWQgaW4gdGhlIGZ1dHVyZVxuICogYW5kIGBoYXNMb2FkZWRgIHdpbGwgcmVtYWluIGZhbHNlIGFmdGVyIHRoaXMgY2FsbC5cbiAqXG4gKiBUaGUgbG9naWMgc3RhdGUgYWZ0ZXIgY2FsbGluZyBgbG9hZFNvdXJjZWAgZGlyZWN0bHkgb3IgaW5kaXJlY3RseSAoZWcuIGBmcm9tSW1hZ2VgLCBgbmV3IEJhc2VUZXh0dXJlYCkgaXM6XG4gKlxuICogICAgIGlmICh0ZXh0dXJlLmhhc0xvYWRlZClcbiB7XG4gKiAgICAgICAgLy8gdGV4dHVyZSByZWFkeSBmb3IgdXNlXG4gKiAgICAgfSBlbHNlIGlmICh0ZXh0dXJlLmlzTG9hZGluZylcbiB7XG4gKiAgICAgICAgLy8gbGlzdGVuIHRvICdsb2FkZWQnIGFuZC9vciAnZXJyb3InIGV2ZW50cyBvbiB0ZXh0dXJlXG4gKiAgICAgfSBlbHNlIHtcbiAqICAgICAgICAvLyBub3QgbG9hZGluZywgbm90IGdvaW5nIHRvIGxvYWQgVU5MRVNTIHRoZSBzb3VyY2UgaXMgcmVsb2FkZWRcbiAqICAgICAgICAvLyAoaXQgbWF5IHN0aWxsIG1ha2Ugc2Vuc2UgdG8gbGlzdGVuIHRvIHRoZSBldmVudHMpXG4gKiAgICAgfVxuICpcbiAqIEBwcm90ZWN0ZWRcbiAqIEBwYXJhbSBzb3VyY2Uge0ltYWdlfENhbnZhc30gdGhlIHNvdXJjZSBvYmplY3Qgb2YgdGhlIHRleHR1cmUuXG4gKi9cbkJhc2VUZXh0dXJlLnByb3RvdHlwZS5sb2FkU291cmNlID0gZnVuY3Rpb24gKHNvdXJjZSlcbntcbiAgICB2YXIgd2FzTG9hZGluZyA9IHRoaXMuaXNMb2FkaW5nO1xuICAgIHRoaXMuaGFzTG9hZGVkID0gZmFsc2U7XG4gICAgdGhpcy5pc0xvYWRpbmcgPSBmYWxzZTtcblxuICAgIGlmICh3YXNMb2FkaW5nICYmIHRoaXMuc291cmNlKVxuICAgIHtcbiAgICAgICAgdGhpcy5zb3VyY2Uub25sb2FkID0gbnVsbDtcbiAgICAgICAgdGhpcy5zb3VyY2Uub25lcnJvciA9IG51bGw7XG4gICAgfVxuXG4gICAgdGhpcy5zb3VyY2UgPSBzb3VyY2U7XG5cbiAgICAvLyBBcHBseSBzb3VyY2UgaWYgbG9hZGVkLiBPdGhlcndpc2Ugc2V0dXAgYXBwcm9wcmlhdGUgbG9hZGluZyBtb25pdG9ycy5cbiAgICBpZiAoKHRoaXMuc291cmNlLmNvbXBsZXRlIHx8IHRoaXMuc291cmNlLmdldENvbnRleHQpICYmIHRoaXMuc291cmNlLndpZHRoICYmIHRoaXMuc291cmNlLmhlaWdodClcbiAgICB7XG4gICAgICAgIHRoaXMuX3NvdXJjZUxvYWRlZCgpO1xuICAgIH1cbiAgICBlbHNlIGlmICghc291cmNlLmdldENvbnRleHQpXG4gICAge1xuXG4gICAgICAgIC8vIEltYWdlIGZhaWwgLyBub3QgcmVhZHlcbiAgICAgICAgdGhpcy5pc0xvYWRpbmcgPSB0cnVlO1xuXG4gICAgICAgIHZhciBzY29wZSA9IHRoaXM7XG5cbiAgICAgICAgc291cmNlLm9ubG9hZCA9IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHNvdXJjZS5vbmxvYWQgPSBudWxsO1xuICAgICAgICAgICAgc291cmNlLm9uZXJyb3IgPSBudWxsO1xuXG4gICAgICAgICAgICBpZiAoIXNjb3BlLmlzTG9hZGluZylcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHNjb3BlLmlzTG9hZGluZyA9IGZhbHNlO1xuICAgICAgICAgICAgc2NvcGUuX3NvdXJjZUxvYWRlZCgpO1xuXG4gICAgICAgICAgICBzY29wZS5lbWl0KCdsb2FkZWQnLCBzY29wZSk7XG4gICAgICAgIH07XG5cbiAgICAgICAgc291cmNlLm9uZXJyb3IgPSBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICBzb3VyY2Uub25sb2FkID0gbnVsbDtcbiAgICAgICAgICAgIHNvdXJjZS5vbmVycm9yID0gbnVsbDtcblxuICAgICAgICAgICAgaWYgKCFzY29wZS5pc0xvYWRpbmcpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBzY29wZS5pc0xvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgICAgIHNjb3BlLmVtaXQoJ2Vycm9yJywgc2NvcGUpO1xuICAgICAgICB9O1xuXG4gICAgICAgIC8vIFBlciBodHRwOi8vd3d3LnczLm9yZy9UUi9odG1sNS9lbWJlZGRlZC1jb250ZW50LTAuaHRtbCN0aGUtaW1nLWVsZW1lbnRcbiAgICAgICAgLy8gICBcIlRoZSB2YWx1ZSBvZiBgY29tcGxldGVgIGNhbiB0aHVzIGNoYW5nZSB3aGlsZSBhIHNjcmlwdCBpcyBleGVjdXRpbmcuXCJcbiAgICAgICAgLy8gU28gY29tcGxldGUgbmVlZHMgdG8gYmUgcmUtY2hlY2tlZCBhZnRlciB0aGUgY2FsbGJhY2tzIGhhdmUgYmVlbiBhZGRlZC4uXG4gICAgICAgIC8vIE5PVEU6IGNvbXBsZXRlIHdpbGwgYmUgdHJ1ZSBpZiB0aGUgaW1hZ2UgaGFzIG5vIHNyYyBzbyBiZXN0IHRvIGNoZWNrIGlmIHRoZSBzcmMgaXMgc2V0LlxuICAgICAgICBpZiAoc291cmNlLmNvbXBsZXRlICYmIHNvdXJjZS5zcmMpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuaXNMb2FkaW5nID0gZmFsc2U7XG5cbiAgICAgICAgICAgIC8vIC4uYW5kIGlmIHdlJ3JlIGNvbXBsZXRlIG5vdywgbm8gbmVlZCBmb3IgY2FsbGJhY2tzXG4gICAgICAgICAgICBzb3VyY2Uub25sb2FkID0gbnVsbDtcbiAgICAgICAgICAgIHNvdXJjZS5vbmVycm9yID0gbnVsbDtcblxuICAgICAgICAgICAgaWYgKHNvdXJjZS53aWR0aCAmJiBzb3VyY2UuaGVpZ2h0KVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHRoaXMuX3NvdXJjZUxvYWRlZCgpO1xuXG4gICAgICAgICAgICAgICAgLy8gSWYgYW55IHByZXZpb3VzIHN1YnNjcmliZXJzIHBvc3NpYmxlXG4gICAgICAgICAgICAgICAgaWYgKHdhc0xvYWRpbmcpXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmVtaXQoJ2xvYWRlZCcsIHRoaXMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAvLyBJZiBhbnkgcHJldmlvdXMgc3Vic2NyaWJlcnMgcG9zc2libGVcbiAgICAgICAgICAgICAgICBpZiAod2FzTG9hZGluZylcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZW1pdCgnZXJyb3InLCB0aGlzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG59O1xuXG4vKipcbiAqIFVzZWQgaW50ZXJuYWxseSB0byB1cGRhdGUgdGhlIHdpZHRoLCBoZWlnaHQsIGFuZCBzb21lIG90aGVyIHRyYWNraW5nIHZhcnMgb25jZVxuICogYSBzb3VyY2UgaGFzIHN1Y2Nlc3NmdWxseSBsb2FkZWQuXG4gKlxuICogQHByaXZhdGVcbiAqL1xuQmFzZVRleHR1cmUucHJvdG90eXBlLl9zb3VyY2VMb2FkZWQgPSBmdW5jdGlvbiAoKVxue1xuICAgIHRoaXMuaGFzTG9hZGVkID0gdHJ1ZTtcbiAgICB0aGlzLnVwZGF0ZSgpO1xufTtcblxuLyoqXG4gKiBEZXN0cm95cyB0aGlzIGJhc2UgdGV4dHVyZVxuICpcbiAqL1xuQmFzZVRleHR1cmUucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoKVxue1xuICAgIGlmICh0aGlzLmltYWdlVXJsKVxuICAgIHtcbiAgICAgICAgZGVsZXRlIHV0aWxzLkJhc2VUZXh0dXJlQ2FjaGVbdGhpcy5pbWFnZVVybF07XG4gICAgICAgIGRlbGV0ZSB1dGlscy5UZXh0dXJlQ2FjaGVbdGhpcy5pbWFnZVVybF07XG5cbiAgICAgICAgdGhpcy5pbWFnZVVybCA9IG51bGw7XG5cbiAgICAgICAgaWYgKCFuYXZpZ2F0b3IuaXNDb2Nvb25KUylcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5zb3VyY2Uuc3JjID0gJyc7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZWxzZSBpZiAodGhpcy5zb3VyY2UgJiYgdGhpcy5zb3VyY2UuX3BpeGlJZClcbiAgICB7XG4gICAgICAgIGRlbGV0ZSB1dGlscy5CYXNlVGV4dHVyZUNhY2hlW3RoaXMuc291cmNlLl9waXhpSWRdO1xuICAgIH1cblxuICAgIHRoaXMuc291cmNlID0gbnVsbDtcblxuICAgIHRoaXMuZGlzcG9zZSgpO1xufTtcblxuLyoqXG4gKiBGcmVlcyB0aGUgdGV4dHVyZSBmcm9tIFdlYkdMIG1lbW9yeSB3aXRob3V0IGRlc3Ryb3lpbmcgdGhpcyB0ZXh0dXJlIG9iamVjdC5cbiAqIFRoaXMgbWVhbnMgeW91IGNhbiBzdGlsbCB1c2UgdGhlIHRleHR1cmUgbGF0ZXIgd2hpY2ggd2lsbCB1cGxvYWQgaXQgdG8gR1BVXG4gKiBtZW1vcnkgYWdhaW4uXG4gKlxuICovXG5CYXNlVGV4dHVyZS5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy5lbWl0KCdkaXNwb3NlJywgdGhpcyk7XG5cbiAgICAvLyB0aGlzIHNob3VsZCBubyBsb25nZXIgYmUgbmVlZGVkLCB0aGUgcmVuZGVyZXJzIHNob3VsZCBjbGVhbnVwIGFsbCB0aGUgZ2wgdGV4dHVyZXMuXG4gICAgLy8gdGhpcy5fZ2xUZXh0dXJlcyA9IHt9O1xufTtcblxuLyoqXG4gKiBDaGFuZ2VzIHRoZSBzb3VyY2UgaW1hZ2Ugb2YgdGhlIHRleHR1cmUuXG4gKiBUaGUgb3JpZ2luYWwgc291cmNlIG11c3QgYmUgYW4gSW1hZ2UgZWxlbWVudC5cbiAqXG4gKiBAcGFyYW0gbmV3U3JjIHtzdHJpbmd9IHRoZSBwYXRoIG9mIHRoZSBpbWFnZVxuICovXG5CYXNlVGV4dHVyZS5wcm90b3R5cGUudXBkYXRlU291cmNlSW1hZ2UgPSBmdW5jdGlvbiAobmV3U3JjKVxue1xuICAgIHRoaXMuc291cmNlLnNyYyA9IG5ld1NyYztcblxuICAgIHRoaXMubG9hZFNvdXJjZSh0aGlzLnNvdXJjZSk7XG59O1xuXG4vKipcbiAqIEhlbHBlciBmdW5jdGlvbiB0aGF0IGNyZWF0ZXMgYSBiYXNlIHRleHR1cmUgZnJvbSB0aGUgZ2l2ZW4gaW1hZ2UgdXJsLlxuICogSWYgdGhlIGltYWdlIGlzIG5vdCBpbiB0aGUgYmFzZSB0ZXh0dXJlIGNhY2hlIGl0IHdpbGwgYmUgY3JlYXRlZCBhbmQgbG9hZGVkLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBwYXJhbSBpbWFnZVVybCB7c3RyaW5nfSBUaGUgaW1hZ2UgdXJsIG9mIHRoZSB0ZXh0dXJlXG4gKiBAcGFyYW0gW2Nyb3Nzb3JpZ2luPShhdXRvKV0ge2Jvb2xlYW59IFNob3VsZCB1c2UgYW5vbnltb3VzIENPUlM/IERlZmF1bHRzIHRvIHRydWUgaWYgdGhlIFVSTCBpcyBub3QgYSBkYXRhLVVSSS5cbiAqIEBwYXJhbSBbc2NhbGVNb2RlPVBJWEkuU0NBTEVfTU9ERVMuREVGQVVMVF0ge251bWJlcn0gU2VlIHtAbGluayBQSVhJLlNDQUxFX01PREVTfSBmb3IgcG9zc2libGUgdmFsdWVzXG4gKiBAcmV0dXJuIFBJWEkuQmFzZVRleHR1cmVcbiAqL1xuQmFzZVRleHR1cmUuZnJvbUltYWdlID0gZnVuY3Rpb24gKGltYWdlVXJsLCBjcm9zc29yaWdpbiwgc2NhbGVNb2RlKVxue1xuICAgIHZhciBiYXNlVGV4dHVyZSA9IHV0aWxzLkJhc2VUZXh0dXJlQ2FjaGVbaW1hZ2VVcmxdO1xuXG4gICAgaWYgKGNyb3Nzb3JpZ2luID09PSB1bmRlZmluZWQgJiYgaW1hZ2VVcmwuaW5kZXhPZignZGF0YTonKSAhPT0gMClcbiAgICB7XG4gICAgICAgIGNyb3Nzb3JpZ2luID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBpZiAoIWJhc2VUZXh0dXJlKVxuICAgIHtcbiAgICAgICAgLy8gbmV3IEltYWdlKCkgYnJlYWtzIHRleCBsb2FkaW5nIGluIHNvbWUgdmVyc2lvbnMgb2YgQ2hyb21lLlxuICAgICAgICAvLyBTZWUgaHR0cHM6Ly9jb2RlLmdvb2dsZS5jb20vcC9jaHJvbWl1bS9pc3N1ZXMvZGV0YWlsP2lkPTIzODA3MVxuICAgICAgICB2YXIgaW1hZ2UgPSBuZXcgSW1hZ2UoKTsvL2RvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2ltZycpO1xuICAgICAgICBpZiAoY3Jvc3NvcmlnaW4pXG4gICAgICAgIHtcbiAgICAgICAgICAgIGltYWdlLmNyb3NzT3JpZ2luID0gJyc7XG4gICAgICAgIH1cblxuICAgICAgICBiYXNlVGV4dHVyZSA9IG5ldyBCYXNlVGV4dHVyZShpbWFnZSwgc2NhbGVNb2RlKTtcbiAgICAgICAgYmFzZVRleHR1cmUuaW1hZ2VVcmwgPSBpbWFnZVVybDtcblxuICAgICAgICBpbWFnZS5zcmMgPSBpbWFnZVVybDtcblxuICAgICAgICB1dGlscy5CYXNlVGV4dHVyZUNhY2hlW2ltYWdlVXJsXSA9IGJhc2VUZXh0dXJlO1xuXG4gICAgICAgIC8vIGlmIHRoZXJlIGlzIGFuIEAyeCBhdCB0aGUgZW5kIG9mIHRoZSB1cmwgd2UgYXJlIGdvaW5nIHRvIGFzc3VtZSBpdHMgYSBoaWdocmVzIGltYWdlXG4gICAgICAgIGJhc2VUZXh0dXJlLnJlc29sdXRpb24gPSB1dGlscy5nZXRSZXNvbHV0aW9uT2ZVcmwoaW1hZ2VVcmwpO1xuICAgIH1cblxuICAgIHJldHVybiBiYXNlVGV4dHVyZTtcbn07XG5cbi8qKlxuICogSGVscGVyIGZ1bmN0aW9uIHRoYXQgY3JlYXRlcyBhIGJhc2UgdGV4dHVyZSBmcm9tIHRoZSBnaXZlbiBjYW52YXMgZWxlbWVudC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAcGFyYW0gY2FudmFzIHtDYW52YXN9IFRoZSBjYW52YXMgZWxlbWVudCBzb3VyY2Ugb2YgdGhlIHRleHR1cmVcbiAqIEBwYXJhbSBzY2FsZU1vZGUge251bWJlcn0gU2VlIHtAbGluayBQSVhJLlNDQUxFX01PREVTfSBmb3IgcG9zc2libGUgdmFsdWVzXG4gKiBAcmV0dXJuIFBJWEkuQmFzZVRleHR1cmVcbiAqL1xuQmFzZVRleHR1cmUuZnJvbUNhbnZhcyA9IGZ1bmN0aW9uIChjYW52YXMsIHNjYWxlTW9kZSlcbntcbiAgICBpZiAoIWNhbnZhcy5fcGl4aUlkKVxuICAgIHtcbiAgICAgICAgY2FudmFzLl9waXhpSWQgPSAnY2FudmFzXycgKyB1dGlscy51aWQoKTtcbiAgICB9XG5cbiAgICB2YXIgYmFzZVRleHR1cmUgPSB1dGlscy5CYXNlVGV4dHVyZUNhY2hlW2NhbnZhcy5fcGl4aUlkXTtcblxuICAgIGlmICghYmFzZVRleHR1cmUpXG4gICAge1xuICAgICAgICBiYXNlVGV4dHVyZSA9IG5ldyBCYXNlVGV4dHVyZShjYW52YXMsIHNjYWxlTW9kZSk7XG4gICAgICAgIHV0aWxzLkJhc2VUZXh0dXJlQ2FjaGVbY2FudmFzLl9waXhpSWRdID0gYmFzZVRleHR1cmU7XG4gICAgfVxuXG4gICAgcmV0dXJuIGJhc2VUZXh0dXJlO1xufTtcbiIsInZhciBCYXNlVGV4dHVyZSA9IHJlcXVpcmUoJy4vQmFzZVRleHR1cmUnKSxcbiAgICBUZXh0dXJlID0gcmVxdWlyZSgnLi9UZXh0dXJlJyksXG4gICAgUmVuZGVyVGFyZ2V0ID0gcmVxdWlyZSgnLi4vcmVuZGVyZXJzL3dlYmdsL3V0aWxzL1JlbmRlclRhcmdldCcpLFxuICAgIEZpbHRlck1hbmFnZXIgPSByZXF1aXJlKCcuLi9yZW5kZXJlcnMvd2ViZ2wvbWFuYWdlcnMvRmlsdGVyTWFuYWdlcicpLFxuICAgIENhbnZhc0J1ZmZlciA9IHJlcXVpcmUoJy4uL3JlbmRlcmVycy9jYW52YXMvdXRpbHMvQ2FudmFzQnVmZmVyJyksXG4gICAgbWF0aCA9IHJlcXVpcmUoJy4uL21hdGgnKSxcbiAgICBDT05TVCA9IHJlcXVpcmUoJy4uL2NvbnN0JyksXG4gICAgdGVtcE1hdHJpeCA9IG5ldyBtYXRoLk1hdHJpeCgpO1xuXG4vKipcbiAqIEEgUmVuZGVyVGV4dHVyZSBpcyBhIHNwZWNpYWwgdGV4dHVyZSB0aGF0IGFsbG93cyBhbnkgUGl4aSBkaXNwbGF5IG9iamVjdCB0byBiZSByZW5kZXJlZCB0byBpdC5cbiAqXG4gKiBfX0hpbnRfXzogQWxsIERpc3BsYXlPYmplY3RzIChpLmUuIFNwcml0ZXMpIHRoYXQgcmVuZGVyIHRvIGEgUmVuZGVyVGV4dHVyZSBzaG91bGQgYmUgcHJlbG9hZGVkXG4gKiBvdGhlcndpc2UgYmxhY2sgcmVjdGFuZ2xlcyB3aWxsIGJlIGRyYXduIGluc3RlYWQuXG4gKlxuICogQSBSZW5kZXJUZXh0dXJlIHRha2VzIGEgc25hcHNob3Qgb2YgYW55IERpc3BsYXkgT2JqZWN0IGdpdmVuIHRvIGl0cyByZW5kZXIgbWV0aG9kLiBUaGUgcG9zaXRpb25cbiAqIGFuZCByb3RhdGlvbiBvZiB0aGUgZ2l2ZW4gRGlzcGxheSBPYmplY3RzIGlzIGlnbm9yZWQuIEZvciBleGFtcGxlOlxuICpcbiAqIGBgYGpzXG4gKiB2YXIgcmVuZGVyZXIgPSBQSVhJLmF1dG9EZXRlY3RSZW5kZXJlcigxMDI0LCAxMDI0LCB7IHZpZXc6IGNhbnZhcywgcmF0aW86IDEgfSk7XG4gKiB2YXIgcmVuZGVyVGV4dHVyZSA9IG5ldyBQSVhJLlJlbmRlclRleHR1cmUocmVuZGVyZXIsIDgwMCwgNjAwKTtcbiAqIHZhciBzcHJpdGUgPSBQSVhJLlNwcml0ZS5mcm9tSW1hZ2UoXCJzcGluT2JqXzAxLnBuZ1wiKTtcbiAqXG4gKiBzcHJpdGUucG9zaXRpb24ueCA9IDgwMC8yO1xuICogc3ByaXRlLnBvc2l0aW9uLnkgPSA2MDAvMjtcbiAqIHNwcml0ZS5hbmNob3IueCA9IDAuNTtcbiAqIHNwcml0ZS5hbmNob3IueSA9IDAuNTtcbiAqXG4gKiByZW5kZXJUZXh0dXJlLnJlbmRlcihzcHJpdGUpO1xuICogYGBgXG4gKlxuICogVGhlIFNwcml0ZSBpbiB0aGlzIGNhc2Ugd2lsbCBiZSByZW5kZXJlZCB0byBhIHBvc2l0aW9uIG9mIDAsMC4gVG8gcmVuZGVyIHRoaXMgc3ByaXRlIGF0IGl0cyBhY3R1YWxcbiAqIHBvc2l0aW9uIGEgQ29udGFpbmVyIHNob3VsZCBiZSB1c2VkOlxuICpcbiAqIGBgYGpzXG4gKiB2YXIgZG9jID0gbmV3IFBJWEkuQ29udGFpbmVyKCk7XG4gKlxuICogZG9jLmFkZENoaWxkKHNwcml0ZSk7XG4gKlxuICogcmVuZGVyVGV4dHVyZS5yZW5kZXIoZG9jKTsgIC8vIFJlbmRlcnMgdG8gY2VudGVyIG9mIHJlbmRlclRleHR1cmVcbiAqIGBgYFxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5UZXh0dXJlXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLkNhbnZhc1JlbmRlcmVyfFBJWEkuV2ViR0xSZW5kZXJlcn0gVGhlIHJlbmRlcmVyIHVzZWQgZm9yIHRoaXMgUmVuZGVyVGV4dHVyZVxuICogQHBhcmFtIFt3aWR0aD0xMDBdIHtudW1iZXJ9IFRoZSB3aWR0aCBvZiB0aGUgcmVuZGVyIHRleHR1cmVcbiAqIEBwYXJhbSBbaGVpZ2h0PTEwMF0ge251bWJlcn0gVGhlIGhlaWdodCBvZiB0aGUgcmVuZGVyIHRleHR1cmVcbiAqIEBwYXJhbSBbc2NhbGVNb2RlXSB7bnVtYmVyfSBTZWUge0BsaW5rIFBJWEkuU0NBTEVfTU9ERVN9IGZvciBwb3NzaWJsZSB2YWx1ZXNcbiAqIEBwYXJhbSBbcmVzb2x1dGlvbj0xXSB7bnVtYmVyfSBUaGUgcmVzb2x1dGlvbiBvZiB0aGUgdGV4dHVyZSBiZWluZyBnZW5lcmF0ZWRcbiAqL1xuZnVuY3Rpb24gUmVuZGVyVGV4dHVyZShyZW5kZXJlciwgd2lkdGgsIGhlaWdodCwgc2NhbGVNb2RlLCByZXNvbHV0aW9uKVxue1xuICAgIGlmICghcmVuZGVyZXIpXG4gICAge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1VuYWJsZSB0byBjcmVhdGUgUmVuZGVyVGV4dHVyZSwgeW91IG11c3QgcGFzcyBhIHJlbmRlcmVyIGludG8gdGhlIGNvbnN0cnVjdG9yLicpO1xuICAgIH1cblxuICAgIHdpZHRoID0gd2lkdGggfHwgMTAwO1xuICAgIGhlaWdodCA9IGhlaWdodCB8fCAxMDA7XG4gICAgcmVzb2x1dGlvbiA9IHJlc29sdXRpb24gfHwgQ09OU1QuUkVTT0xVVElPTjtcblxuICAgIC8qKlxuICAgICAqIFRoZSBiYXNlIHRleHR1cmUgb2JqZWN0IHRoYXQgdGhpcyB0ZXh0dXJlIHVzZXNcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge0Jhc2VUZXh0dXJlfVxuICAgICAqL1xuICAgIHZhciBiYXNlVGV4dHVyZSA9IG5ldyBCYXNlVGV4dHVyZSgpO1xuICAgIGJhc2VUZXh0dXJlLndpZHRoID0gd2lkdGg7XG4gICAgYmFzZVRleHR1cmUuaGVpZ2h0ID0gaGVpZ2h0O1xuICAgIGJhc2VUZXh0dXJlLnJlc29sdXRpb24gPSByZXNvbHV0aW9uO1xuICAgIGJhc2VUZXh0dXJlLnNjYWxlTW9kZSA9IHNjYWxlTW9kZSB8fCBDT05TVC5TQ0FMRV9NT0RFUy5ERUZBVUxUO1xuICAgIGJhc2VUZXh0dXJlLmhhc0xvYWRlZCA9IHRydWU7XG5cblxuICAgIFRleHR1cmUuY2FsbCh0aGlzLFxuICAgICAgICBiYXNlVGV4dHVyZSxcbiAgICAgICAgbmV3IG1hdGguUmVjdGFuZ2xlKDAsIDAsIHdpZHRoLCBoZWlnaHQpXG4gICAgKTtcblxuXG4gICAgLyoqXG4gICAgICogVGhlIHdpdGggb2YgdGhlIHJlbmRlciB0ZXh0dXJlXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy53aWR0aCA9IHdpZHRoO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGhlaWdodCBvZiB0aGUgcmVuZGVyIHRleHR1cmVcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLmhlaWdodCA9IGhlaWdodDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBSZXNvbHV0aW9uIG9mIHRoZSB0ZXh0dXJlLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMucmVzb2x1dGlvbiA9IHJlc29sdXRpb247XG5cbiAgICAvKipcbiAgICAgKiBEcmF3L3JlbmRlciB0aGUgZ2l2ZW4gRGlzcGxheU9iamVjdCBvbnRvIHRoZSB0ZXh0dXJlLlxuICAgICAqXG4gICAgICogVGhlIGRpc3BsYXlPYmplY3QgYW5kIGRlc2NlbmRlbnRzIGFyZSB0cmFuc2Zvcm1lZCBkdXJpbmcgdGhpcyBvcGVyYXRpb24uXG4gICAgICogSWYgYHVwZGF0ZVRyYW5zZm9ybWAgaXMgdHJ1ZSB0aGVuIHRoZSB0cmFuc2Zvcm1hdGlvbnMgd2lsbCBiZSByZXN0b3JlZCBiZWZvcmUgdGhlXG4gICAgICogbWV0aG9kIHJldHVybnMuIE90aGVyd2lzZSBpdCBpcyB1cCB0byB0aGUgY2FsbGluZyBjb2RlIHRvIGNvcnJlY3RseSB1c2Ugb3IgcmVzZXRcbiAgICAgKiB0aGUgdHJhbnNmb3JtZWQgZGlzcGxheSBvYmplY3RzLlxuICAgICAqXG4gICAgICogVGhlIGRpc3BsYXkgb2JqZWN0IGlzIGFsd2F5cyByZW5kZXJlZCB3aXRoIGEgd29ybGRBbHBoYSB2YWx1ZSBvZiAxLlxuICAgICAqXG4gICAgICogQG1ldGhvZFxuICAgICAqIEBwYXJhbSBkaXNwbGF5T2JqZWN0IHtQSVhJLkRpc3BsYXlPYmplY3R9IFRoZSBkaXNwbGF5IG9iamVjdCB0byByZW5kZXIgdGhpcyB0ZXh0dXJlIG9uXG4gICAgICogQHBhcmFtIFttYXRyaXhdIHtQSVhJLk1hdHJpeH0gT3B0aW9uYWwgbWF0cml4IHRvIGFwcGx5IHRvIHRoZSBkaXNwbGF5IG9iamVjdCBiZWZvcmUgcmVuZGVyaW5nLlxuICAgICAqIEBwYXJhbSBbY2xlYXI9ZmFsc2VdIHtib29sZWFufSBJZiB0cnVlIHRoZSB0ZXh0dXJlIHdpbGwgYmUgY2xlYXJlZCBiZWZvcmUgdGhlIGRpc3BsYXlPYmplY3QgaXMgZHJhd25cbiAgICAgKiBAcGFyYW0gW3VwZGF0ZVRyYW5zZm9ybT10cnVlXSB7Ym9vbGVhbn0gSWYgdHJ1ZSB0aGUgZGlzcGxheU9iamVjdCdzIHdvcmxkVHJhbnNmb3JtL3dvcmxkQWxwaGEgYW5kIGFsbCBjaGlsZHJlblxuICAgICAqICB0cmFuc2Zvcm1hdGlvbnMgd2lsbCBiZSByZXN0b3JlZC4gTm90IHJlc3RvcmluZyB0aGlzIGluZm9ybWF0aW9uIHdpbGwgYmUgYSBsaXR0bGUgZmFzdGVyLlxuICAgICAqL1xuICAgIHRoaXMucmVuZGVyID0gbnVsbDtcblxuICAgIC8qKlxuICAgICAqIFRoZSByZW5kZXJlciB0aGlzIFJlbmRlclRleHR1cmUgdXNlcy4gQSBSZW5kZXJUZXh0dXJlIGNhbiBvbmx5IGJlbG9uZyB0byBvbmUgcmVuZGVyZXIgYXQgdGhlIG1vbWVudCBpZiBpdHMgd2ViR0wuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLkNhbnZhc1JlbmRlcmVyfFBJWEkuV2ViR0xSZW5kZXJlcn1cbiAgICAgKi9cbiAgICB0aGlzLnJlbmRlcmVyID0gcmVuZGVyZXI7XG5cbiAgICBpZiAodGhpcy5yZW5kZXJlci50eXBlID09PSBDT05TVC5SRU5ERVJFUl9UWVBFLldFQkdMKVxuICAgIHtcbiAgICAgICAgdmFyIGdsID0gdGhpcy5yZW5kZXJlci5nbDtcblxuICAgICAgICB0aGlzLnRleHR1cmVCdWZmZXIgPSBuZXcgUmVuZGVyVGFyZ2V0KGdsLCB0aGlzLndpZHRoLCB0aGlzLmhlaWdodCwgYmFzZVRleHR1cmUuc2NhbGVNb2RlLCB0aGlzLnJlc29sdXRpb24pOy8vLCB0aGlzLmJhc2VUZXh0dXJlLnNjYWxlTW9kZSk7XG4gICAgICAgIHRoaXMuYmFzZVRleHR1cmUuX2dsVGV4dHVyZXNbZ2wuaWRdID0gdGhpcy50ZXh0dXJlQnVmZmVyLnRleHR1cmU7XG5cbiAgICAgICAgLy9UT0RPIHJlZmFjdG9yIGZpbHRlciBtYW5hZ2VyLi4gYXMgcmVhbGx5IGl0cyBubyBsb25nZXIgYSBtYW5hZ2VyIGlmIHdlIHVzZSBpdCBoZXJlLi5cbiAgICAgICAgdGhpcy5maWx0ZXJNYW5hZ2VyID0gbmV3IEZpbHRlck1hbmFnZXIodGhpcy5yZW5kZXJlcik7XG4gICAgICAgIHRoaXMuZmlsdGVyTWFuYWdlci5vbkNvbnRleHRDaGFuZ2UoKTtcbiAgICAgICAgdGhpcy5maWx0ZXJNYW5hZ2VyLnJlc2l6ZSh3aWR0aCwgaGVpZ2h0KTtcbiAgICAgICAgdGhpcy5yZW5kZXIgPSB0aGlzLnJlbmRlcldlYkdMO1xuXG4gICAgICAgIC8vIHRoZSBjcmVhdGlvbiBvZiBhIGZpbHRlciBtYW5hZ2VyIHVuYmluZHMgdGhlIGJ1ZmZlcnMuLlxuICAgICAgICB0aGlzLnJlbmRlcmVyLmN1cnJlbnRSZW5kZXJlci5zdGFydCgpO1xuICAgICAgICB0aGlzLnJlbmRlcmVyLmN1cnJlbnRSZW5kZXJUYXJnZXQuYWN0aXZhdGUoKTtcbiAgICB9XG4gICAgZWxzZVxuICAgIHtcblxuICAgICAgICB0aGlzLnJlbmRlciA9IHRoaXMucmVuZGVyQ2FudmFzO1xuICAgICAgICB0aGlzLnRleHR1cmVCdWZmZXIgPSBuZXcgQ2FudmFzQnVmZmVyKHRoaXMud2lkdGgqIHRoaXMucmVzb2x1dGlvbiwgdGhpcy5oZWlnaHQqIHRoaXMucmVzb2x1dGlvbik7XG4gICAgICAgIHRoaXMuYmFzZVRleHR1cmUuc291cmNlID0gdGhpcy50ZXh0dXJlQnVmZmVyLmNhbnZhcztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqL1xuICAgIHRoaXMudmFsaWQgPSB0cnVlO1xuXG4gICAgdGhpcy5fdXBkYXRlVXZzKCk7XG59XG5cblJlbmRlclRleHR1cmUucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShUZXh0dXJlLnByb3RvdHlwZSk7XG5SZW5kZXJUZXh0dXJlLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFJlbmRlclRleHR1cmU7XG5tb2R1bGUuZXhwb3J0cyA9IFJlbmRlclRleHR1cmU7XG5cbi8qKlxuICogUmVzaXplcyB0aGUgUmVuZGVyVGV4dHVyZS5cbiAqXG4gKiBAcGFyYW0gd2lkdGgge251bWJlcn0gVGhlIHdpZHRoIHRvIHJlc2l6ZSB0by5cbiAqIEBwYXJhbSBoZWlnaHQge251bWJlcn0gVGhlIGhlaWdodCB0byByZXNpemUgdG8uXG4gKiBAcGFyYW0gdXBkYXRlQmFzZSB7Ym9vbGVhbn0gU2hvdWxkIHRoZSBiYXNlVGV4dHVyZS53aWR0aCBhbmQgaGVpZ2h0IHZhbHVlcyBiZSByZXNpemVkIGFzIHdlbGw/XG4gKi9cblJlbmRlclRleHR1cmUucHJvdG90eXBlLnJlc2l6ZSA9IGZ1bmN0aW9uICh3aWR0aCwgaGVpZ2h0LCB1cGRhdGVCYXNlKVxue1xuICAgIGlmICh3aWR0aCA9PT0gdGhpcy53aWR0aCAmJiBoZWlnaHQgPT09IHRoaXMuaGVpZ2h0KVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMudmFsaWQgPSAod2lkdGggPiAwICYmIGhlaWdodCA+IDApO1xuXG4gICAgdGhpcy53aWR0aCA9IHRoaXMuX2ZyYW1lLndpZHRoID0gdGhpcy5jcm9wLndpZHRoID0gd2lkdGg7XG4gICAgdGhpcy5oZWlnaHQgPSAgdGhpcy5fZnJhbWUuaGVpZ2h0ID0gdGhpcy5jcm9wLmhlaWdodCA9IGhlaWdodDtcblxuICAgIGlmICh1cGRhdGVCYXNlKVxuICAgIHtcbiAgICAgICAgdGhpcy5iYXNlVGV4dHVyZS53aWR0aCA9IHRoaXMud2lkdGg7XG4gICAgICAgIHRoaXMuYmFzZVRleHR1cmUuaGVpZ2h0ID0gdGhpcy5oZWlnaHQ7XG4gICAgfVxuXG4gICAgaWYgKCF0aGlzLnZhbGlkKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMudGV4dHVyZUJ1ZmZlci5yZXNpemUodGhpcy53aWR0aCwgdGhpcy5oZWlnaHQpO1xuXG4gICAgaWYodGhpcy5maWx0ZXJNYW5hZ2VyKVxuICAgIHtcbiAgICAgICAgdGhpcy5maWx0ZXJNYW5hZ2VyLnJlc2l6ZSh0aGlzLndpZHRoLCB0aGlzLmhlaWdodCk7XG4gICAgfVxufTtcblxuLyoqXG4gKiBDbGVhcnMgdGhlIFJlbmRlclRleHR1cmUuXG4gKlxuICovXG5SZW5kZXJUZXh0dXJlLnByb3RvdHlwZS5jbGVhciA9IGZ1bmN0aW9uICgpXG57XG4gICAgaWYgKCF0aGlzLnZhbGlkKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnJlbmRlcmVyLnR5cGUgPT09IENPTlNULlJFTkRFUkVSX1RZUEUuV0VCR0wpXG4gICAge1xuICAgICAgICB0aGlzLnJlbmRlcmVyLmdsLmJpbmRGcmFtZWJ1ZmZlcih0aGlzLnJlbmRlcmVyLmdsLkZSQU1FQlVGRkVSLCB0aGlzLnRleHR1cmVCdWZmZXIuZnJhbWVCdWZmZXIpO1xuICAgIH1cblxuICAgIHRoaXMudGV4dHVyZUJ1ZmZlci5jbGVhcigpO1xufTtcblxuLyoqXG4gKiBJbnRlcm5hbCBtZXRob2QgYXNzaWduZWQgdG8gdGhlIGByZW5kZXJgIHByb3BlcnR5IGlmIHVzaW5nIGEgQ2FudmFzUmVuZGVyZXIuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSBkaXNwbGF5T2JqZWN0IHtQSVhJLkRpc3BsYXlPYmplY3R9IFRoZSBkaXNwbGF5IG9iamVjdCB0byByZW5kZXIgdGhpcyB0ZXh0dXJlIG9uXG4gKiBAcGFyYW0gW21hdHJpeF0ge1BJWEkuTWF0cml4fSBPcHRpb25hbCBtYXRyaXggdG8gYXBwbHkgdG8gdGhlIGRpc3BsYXkgb2JqZWN0IGJlZm9yZSByZW5kZXJpbmcuXG4gKiBAcGFyYW0gW2NsZWFyPWZhbHNlXSB7Ym9vbGVhbn0gSWYgdHJ1ZSB0aGUgdGV4dHVyZSB3aWxsIGJlIGNsZWFyZWQgYmVmb3JlIHRoZSBkaXNwbGF5T2JqZWN0IGlzIGRyYXduXG4gKiBAcGFyYW0gW3VwZGF0ZVRyYW5zZm9ybT10cnVlXSB7Ym9vbGVhbn0gSWYgdHJ1ZSB0aGUgZGlzcGxheU9iamVjdCdzIHdvcmxkVHJhbnNmb3JtL3dvcmxkQWxwaGEgYW5kIGFsbCBjaGlsZHJlblxuICogIHRyYW5zZm9ybWF0aW9ucyB3aWxsIGJlIHJlc3RvcmVkLiBOb3QgcmVzdG9yaW5nIHRoaXMgaW5mb3JtYXRpb24gd2lsbCBiZSBhIGxpdHRsZSBmYXN0ZXIuXG4gKi9cblJlbmRlclRleHR1cmUucHJvdG90eXBlLnJlbmRlcldlYkdMID0gZnVuY3Rpb24gKGRpc3BsYXlPYmplY3QsIG1hdHJpeCwgY2xlYXIsIHVwZGF0ZVRyYW5zZm9ybSlcbntcbiAgICBpZiAoIXRoaXMudmFsaWQpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG5cbiAgICB1cGRhdGVUcmFuc2Zvcm0gPSAodXBkYXRlVHJhbnNmb3JtICE9PSB1bmRlZmluZWQpID8gdXBkYXRlVHJhbnNmb3JtIDogdHJ1ZTsvLyF1cGRhdGVUcmFuc2Zvcm07XG5cbiAgICB0aGlzLnRleHR1cmVCdWZmZXIudHJhbnNmb3JtID0gbWF0cml4O1xuXG4gICAgLy9UT0RPIG5vdCBhIGZhbiB0aGF0IHRoaXMgaXMgaGVyZS4uLiBpdCB3aWxsIG1vdmUhXG4gICAgdGhpcy50ZXh0dXJlQnVmZmVyLmFjdGl2YXRlKCk7XG5cbiAgICAvLyBzZXRXb3JsZCBBbHBoYSB0byBlbnN1cmUgdGhhdCB0aGUgb2JqZWN0IGlzIHJlbmRlcmVyIGF0IGZ1bGwgb3BhY2l0eVxuICAgIGRpc3BsYXlPYmplY3Qud29ybGRBbHBoYSA9IDE7XG5cbiAgICBpZiAodXBkYXRlVHJhbnNmb3JtKVxuICAgIHtcblxuICAgICAgICAvLyByZXNldCB0aGUgbWF0cml4IG9mIHRoZSBkaXNwbGF0eU9iamVjdC4uXG4gICAgICAgIGRpc3BsYXlPYmplY3Qud29ybGRUcmFuc2Zvcm0uaWRlbnRpdHkoKTtcblxuICAgICAgICBkaXNwbGF5T2JqZWN0LmN1cnJlbnRCb3VuZHMgPSBudWxsO1xuXG4gICAgICAgIC8vIFRpbWUgdG8gdXBkYXRlIGFsbCB0aGUgY2hpbGRyZW4gb2YgdGhlIGRpc3BsYXlPYmplY3Qgd2l0aCB0aGUgbmV3IG1hdHJpeC4uXG4gICAgICAgIHZhciBjaGlsZHJlbiA9IGRpc3BsYXlPYmplY3QuY2hpbGRyZW47XG4gICAgICAgIHZhciBpLCBqO1xuXG4gICAgICAgIGZvciAoaSA9IDAsIGogPSBjaGlsZHJlbi5sZW5ndGg7IGkgPCBqOyArK2kpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNoaWxkcmVuW2ldLnVwZGF0ZVRyYW5zZm9ybSgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy9UT0RPIHJlbmFtZSB0ZXh0dXJlQnVmZmVyIHRvIHJlbmRlclRhcmdldC4uXG4gICAgdmFyIHRlbXAgPSAgdGhpcy5yZW5kZXJlci5maWx0ZXJNYW5hZ2VyO1xuXG4gICAgdGhpcy5yZW5kZXJlci5maWx0ZXJNYW5hZ2VyID0gdGhpcy5maWx0ZXJNYW5hZ2VyO1xuICAgIHRoaXMucmVuZGVyZXIucmVuZGVyRGlzcGxheU9iamVjdChkaXNwbGF5T2JqZWN0LCB0aGlzLnRleHR1cmVCdWZmZXIsIGNsZWFyKTtcblxuICAgIHRoaXMucmVuZGVyZXIuZmlsdGVyTWFuYWdlciA9IHRlbXA7XG59O1xuXG5cbi8qKlxuICogSW50ZXJuYWwgbWV0aG9kIGFzc2lnbmVkIHRvIHRoZSBgcmVuZGVyYCBwcm9wZXJ0eSBpZiB1c2luZyBhIENhbnZhc1JlbmRlcmVyLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0gZGlzcGxheU9iamVjdCB7UElYSS5EaXNwbGF5T2JqZWN0fSBUaGUgZGlzcGxheSBvYmplY3QgdG8gcmVuZGVyIHRoaXMgdGV4dHVyZSBvblxuICogQHBhcmFtIFttYXRyaXhdIHtQSVhJLk1hdHJpeH0gT3B0aW9uYWwgbWF0cml4IHRvIGFwcGx5IHRvIHRoZSBkaXNwbGF5IG9iamVjdCBiZWZvcmUgcmVuZGVyaW5nLlxuICogQHBhcmFtIFtjbGVhcl0ge2Jvb2xlYW59IElmIHRydWUgdGhlIHRleHR1cmUgd2lsbCBiZSBjbGVhcmVkIGJlZm9yZSB0aGUgZGlzcGxheU9iamVjdCBpcyBkcmF3blxuICovXG5SZW5kZXJUZXh0dXJlLnByb3RvdHlwZS5yZW5kZXJDYW52YXMgPSBmdW5jdGlvbiAoZGlzcGxheU9iamVjdCwgbWF0cml4LCBjbGVhciwgdXBkYXRlVHJhbnNmb3JtKVxue1xuICAgIGlmICghdGhpcy52YWxpZClcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB1cGRhdGVUcmFuc2Zvcm0gPSAhIXVwZGF0ZVRyYW5zZm9ybTtcblxuICAgIHZhciB3dCA9IHRlbXBNYXRyaXg7XG5cbiAgICB3dC5pZGVudGl0eSgpO1xuXG4gICAgaWYgKG1hdHJpeClcbiAgICB7XG4gICAgICAgIHd0LmFwcGVuZChtYXRyaXgpO1xuICAgIH1cblxuICAgIHZhciBjYWNoZWRXdCA9IGRpc3BsYXlPYmplY3Qud29ybGRUcmFuc2Zvcm07XG4gICAgZGlzcGxheU9iamVjdC53b3JsZFRyYW5zZm9ybSA9IHd0O1xuXG4gICAgLy8gc2V0V29ybGQgQWxwaGEgdG8gZW5zdXJlIHRoYXQgdGhlIG9iamVjdCBpcyByZW5kZXJlciBhdCBmdWxsIG9wYWNpdHlcbiAgICBkaXNwbGF5T2JqZWN0LndvcmxkQWxwaGEgPSAxO1xuXG4gICAgLy8gVGltZSB0byB1cGRhdGUgYWxsIHRoZSBjaGlsZHJlbiBvZiB0aGUgZGlzcGxheU9iamVjdCB3aXRoIHRoZSBuZXcgbWF0cml4Li5cbiAgICB2YXIgY2hpbGRyZW4gPSBkaXNwbGF5T2JqZWN0LmNoaWxkcmVuO1xuICAgIHZhciBpLCBqO1xuXG4gICAgZm9yIChpID0gMCwgaiA9IGNoaWxkcmVuLmxlbmd0aDsgaSA8IGo7ICsraSlcbiAgICB7XG4gICAgICAgIGNoaWxkcmVuW2ldLnVwZGF0ZVRyYW5zZm9ybSgpO1xuICAgIH1cblxuICAgIGlmIChjbGVhcilcbiAgICB7XG4gICAgICAgIHRoaXMudGV4dHVyZUJ1ZmZlci5jbGVhcigpO1xuICAgIH1cblxuXG4vLyAgICB0aGlzLnRleHR1cmVCdWZmZXIuXG4gICAgdmFyIGNvbnRleHQgPSB0aGlzLnRleHR1cmVCdWZmZXIuY29udGV4dDtcblxuICAgIHZhciByZWFsUmVzb2x1dGlvbiA9IHRoaXMucmVuZGVyZXIucmVzb2x1dGlvbjtcblxuICAgIHRoaXMucmVuZGVyZXIucmVzb2x1dGlvbiA9IHRoaXMucmVzb2x1dGlvbjtcblxuICAgIHRoaXMucmVuZGVyZXIucmVuZGVyRGlzcGxheU9iamVjdChkaXNwbGF5T2JqZWN0LCBjb250ZXh0KTtcblxuICAgIHRoaXMucmVuZGVyZXIucmVzb2x1dGlvbiA9IHJlYWxSZXNvbHV0aW9uO1xuXG4gICAgaWYoZGlzcGxheU9iamVjdC53b3JsZFRyYW5zZm9ybSA9PT0gd3QpXG4gICAge1xuICAgICAgICAvLyBmaXhlcyBjYWNoZUFzQml0bWFwIEhhcHBlbmluZyBkdXJpbmcgdGhlIGFib3ZlLi5cbiAgICAgICAgZGlzcGxheU9iamVjdC53b3JsZFRyYW5zZm9ybSA9IGNhY2hlZFd0O1xuICAgIH1cblxufTtcblxuLyoqXG4gKiBEZXN0cm95cyB0aGlzIHRleHR1cmVcbiAqXG4gKiBAcGFyYW0gZGVzdHJveUJhc2Uge2Jvb2xlYW59IFdoZXRoZXIgdG8gZGVzdHJveSB0aGUgYmFzZSB0ZXh0dXJlIGFzIHdlbGxcbiAqL1xuUmVuZGVyVGV4dHVyZS5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uICgpXG57XG4gICAgVGV4dHVyZS5wcm90b3R5cGUuZGVzdHJveS5jYWxsKHRoaXMsIHRydWUpO1xuXG4gICAgdGhpcy50ZXh0dXJlQnVmZmVyLmRlc3Ryb3koKTtcblxuICAgIC8vIGRlc3Ryb3kgdGhlIGZpbHRlcm1hbmFnZXIuLlxuICAgIGlmKHRoaXMuZmlsdGVyTWFuYWdlcilcbiAgICB7XG4gICAgICAgIHRoaXMuZmlsdGVyTWFuYWdlci5kZXN0cm95KCk7XG4gICAgfVxuXG4gICAgdGhpcy5yZW5kZXJlciA9IG51bGw7XG59O1xuXG4vKipcbiAqIFdpbGwgcmV0dXJuIGEgSFRNTCBJbWFnZSBvZiB0aGUgdGV4dHVyZVxuICpcbiAqIEByZXR1cm4ge0ltYWdlfVxuICovXG5SZW5kZXJUZXh0dXJlLnByb3RvdHlwZS5nZXRJbWFnZSA9IGZ1bmN0aW9uICgpXG57XG4gICAgdmFyIGltYWdlID0gbmV3IEltYWdlKCk7XG4gICAgaW1hZ2Uuc3JjID0gdGhpcy5nZXRCYXNlNjQoKTtcbiAgICByZXR1cm4gaW1hZ2U7XG59O1xuXG4vKipcbiAqIFdpbGwgcmV0dXJuIGEgYSBiYXNlNjQgZW5jb2RlZCBzdHJpbmcgb2YgdGhpcyB0ZXh0dXJlLiBJdCB3b3JrcyBieSBjYWxsaW5nIFJlbmRlclRleHR1cmUuZ2V0Q2FudmFzIGFuZCB0aGVuIHJ1bm5pbmcgdG9EYXRhVVJMIG9uIHRoYXQuXG4gKlxuICogQHJldHVybiB7c3RyaW5nfSBBIGJhc2U2NCBlbmNvZGVkIHN0cmluZyBvZiB0aGUgdGV4dHVyZS5cbiAqL1xuUmVuZGVyVGV4dHVyZS5wcm90b3R5cGUuZ2V0QmFzZTY0ID0gZnVuY3Rpb24gKClcbntcbiAgICByZXR1cm4gdGhpcy5nZXRDYW52YXMoKS50b0RhdGFVUkwoKTtcbn07XG5cbi8qKlxuICogQ3JlYXRlcyBhIENhbnZhcyBlbGVtZW50LCByZW5kZXJzIHRoaXMgUmVuZGVyVGV4dHVyZSB0byBpdCBhbmQgdGhlbiByZXR1cm5zIGl0LlxuICpcbiAqIEByZXR1cm4ge0hUTUxDYW52YXNFbGVtZW50fSBBIENhbnZhcyBlbGVtZW50IHdpdGggdGhlIHRleHR1cmUgcmVuZGVyZWQgb24uXG4gKi9cblJlbmRlclRleHR1cmUucHJvdG90eXBlLmdldENhbnZhcyA9IGZ1bmN0aW9uICgpXG57XG4gICAgaWYgKHRoaXMucmVuZGVyZXIudHlwZSA9PT0gQ09OU1QuUkVOREVSRVJfVFlQRS5XRUJHTClcbiAgICB7XG4gICAgICAgIHZhciBnbCA9IHRoaXMucmVuZGVyZXIuZ2w7XG4gICAgICAgIHZhciB3aWR0aCA9IHRoaXMudGV4dHVyZUJ1ZmZlci5zaXplLndpZHRoO1xuICAgICAgICB2YXIgaGVpZ2h0ID0gdGhpcy50ZXh0dXJlQnVmZmVyLnNpemUuaGVpZ2h0O1xuXG4gICAgICAgIHZhciB3ZWJHTFBpeGVscyA9IG5ldyBVaW50OEFycmF5KDQgKiB3aWR0aCAqIGhlaWdodCk7XG5cbiAgICAgICAgZ2wuYmluZEZyYW1lYnVmZmVyKGdsLkZSQU1FQlVGRkVSLCB0aGlzLnRleHR1cmVCdWZmZXIuZnJhbWVCdWZmZXIpO1xuICAgICAgICBnbC5yZWFkUGl4ZWxzKDAsIDAsIHdpZHRoLCBoZWlnaHQsIGdsLlJHQkEsIGdsLlVOU0lHTkVEX0JZVEUsIHdlYkdMUGl4ZWxzKTtcbiAgICAgICAgZ2wuYmluZEZyYW1lYnVmZmVyKGdsLkZSQU1FQlVGRkVSLCBudWxsKTtcblxuICAgICAgICB2YXIgdGVtcENhbnZhcyA9IG5ldyBDYW52YXNCdWZmZXIod2lkdGgsIGhlaWdodCk7XG4gICAgICAgIHZhciBjYW52YXNEYXRhID0gdGVtcENhbnZhcy5jb250ZXh0LmdldEltYWdlRGF0YSgwLCAwLCB3aWR0aCwgaGVpZ2h0KTtcbiAgICAgICAgY2FudmFzRGF0YS5kYXRhLnNldCh3ZWJHTFBpeGVscyk7XG5cbiAgICAgICAgdGVtcENhbnZhcy5jb250ZXh0LnB1dEltYWdlRGF0YShjYW52YXNEYXRhLCAwLCAwKTtcblxuICAgICAgICByZXR1cm4gdGVtcENhbnZhcy5jYW52YXM7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHJldHVybiB0aGlzLnRleHR1cmVCdWZmZXIuY2FudmFzO1xuICAgIH1cbn07XG5cbi8qKlxuICogV2lsbCByZXR1cm4gYSBvbmUtZGltZW5zaW9uYWwgYXJyYXkgY29udGFpbmluZyB0aGUgcGl4ZWwgZGF0YSBvZiB0aGUgZW50aXJlIHRleHR1cmUgaW4gUkdCQSBvcmRlciwgd2l0aCBpbnRlZ2VyIHZhbHVlcyBiZXR3ZWVuIDAgYW5kIDI1NSAoaW5jbHVkZWQpLlxuICpcbiAqIEByZXR1cm4ge1VpbnQ4Q2xhbXBlZEFycmF5fVxuICovXG5SZW5kZXJUZXh0dXJlLnByb3RvdHlwZS5nZXRQaXhlbHMgPSBmdW5jdGlvbiAoKVxue1xuICAgIHZhciB3aWR0aCwgaGVpZ2h0O1xuXG4gICAgaWYgKHRoaXMucmVuZGVyZXIudHlwZSA9PT0gQ09OU1QuUkVOREVSRVJfVFlQRS5XRUJHTClcbiAgICB7XG4gICAgICAgIHZhciBnbCA9IHRoaXMucmVuZGVyZXIuZ2w7XG4gICAgICAgIHdpZHRoID0gdGhpcy50ZXh0dXJlQnVmZmVyLnNpemUud2lkdGg7XG4gICAgICAgIGhlaWdodCA9IHRoaXMudGV4dHVyZUJ1ZmZlci5zaXplLmhlaWdodDtcblxuICAgICAgICB2YXIgd2ViR0xQaXhlbHMgPSBuZXcgVWludDhBcnJheSg0ICogd2lkdGggKiBoZWlnaHQpO1xuXG4gICAgICAgIGdsLmJpbmRGcmFtZWJ1ZmZlcihnbC5GUkFNRUJVRkZFUiwgdGhpcy50ZXh0dXJlQnVmZmVyLmZyYW1lQnVmZmVyKTtcbiAgICAgICAgZ2wucmVhZFBpeGVscygwLCAwLCB3aWR0aCwgaGVpZ2h0LCBnbC5SR0JBLCBnbC5VTlNJR05FRF9CWVRFLCB3ZWJHTFBpeGVscyk7XG4gICAgICAgIGdsLmJpbmRGcmFtZWJ1ZmZlcihnbC5GUkFNRUJVRkZFUiwgbnVsbCk7XG5cbiAgICAgICAgcmV0dXJuIHdlYkdMUGl4ZWxzO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICB3aWR0aCA9IHRoaXMudGV4dHVyZUJ1ZmZlci5jYW52YXMud2lkdGg7XG4gICAgICAgIGhlaWdodCA9IHRoaXMudGV4dHVyZUJ1ZmZlci5jYW52YXMuaGVpZ2h0O1xuXG4gICAgICAgIHJldHVybiB0aGlzLnRleHR1cmVCdWZmZXIuY2FudmFzLmdldENvbnRleHQoJzJkJykuZ2V0SW1hZ2VEYXRhKDAsIDAsIHdpZHRoLCBoZWlnaHQpLmRhdGE7XG4gICAgfVxufTtcblxuLyoqXG4gKiBXaWxsIHJldHVybiBhIG9uZS1kaW1lbnNpb25hbCBhcnJheSBjb250YWluaW5nIHRoZSBwaXhlbCBkYXRhIG9mIGEgcGl4ZWwgd2l0aGluIHRoZSB0ZXh0dXJlIGluIFJHQkEgb3JkZXIsIHdpdGggaW50ZWdlciB2YWx1ZXMgYmV0d2VlbiAwIGFuZCAyNTUgKGluY2x1ZGVkKS5cbiAqXG4gKiBAcGFyYW0geCB7bnVtYmVyfSBUaGUgeCBjb29yZGluYXRlIG9mIHRoZSBwaXhlbCB0byByZXRyaWV2ZS5cbiAqIEBwYXJhbSB5IHtudW1iZXJ9IFRoZSB5IGNvb3JkaW5hdGUgb2YgdGhlIHBpeGVsIHRvIHJldHJpZXZlLlxuICogQHJldHVybiB7VWludDhDbGFtcGVkQXJyYXl9XG4gKi9cblJlbmRlclRleHR1cmUucHJvdG90eXBlLmdldFBpeGVsID0gZnVuY3Rpb24gKHgsIHkpXG57XG4gICAgaWYgKHRoaXMucmVuZGVyZXIudHlwZSA9PT0gQ09OU1QuUkVOREVSRVJfVFlQRS5XRUJHTClcbiAgICB7XG4gICAgICAgIHZhciBnbCA9IHRoaXMucmVuZGVyZXIuZ2w7XG5cbiAgICAgICAgdmFyIHdlYkdMUGl4ZWxzID0gbmV3IFVpbnQ4QXJyYXkoNCk7XG5cbiAgICAgICAgZ2wuYmluZEZyYW1lYnVmZmVyKGdsLkZSQU1FQlVGRkVSLCB0aGlzLnRleHR1cmVCdWZmZXIuZnJhbWVCdWZmZXIpO1xuICAgICAgICBnbC5yZWFkUGl4ZWxzKHgsIHksIDEsIDEsIGdsLlJHQkEsIGdsLlVOU0lHTkVEX0JZVEUsIHdlYkdMUGl4ZWxzKTtcbiAgICAgICAgZ2wuYmluZEZyYW1lYnVmZmVyKGdsLkZSQU1FQlVGRkVSLCBudWxsKTtcblxuICAgICAgICByZXR1cm4gd2ViR0xQaXhlbHM7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHJldHVybiB0aGlzLnRleHR1cmVCdWZmZXIuY2FudmFzLmdldENvbnRleHQoJzJkJykuZ2V0SW1hZ2VEYXRhKHgsIHksIDEsIDEpLmRhdGE7XG4gICAgfVxufTtcbiIsInZhciBCYXNlVGV4dHVyZSA9IHJlcXVpcmUoJy4vQmFzZVRleHR1cmUnKSxcbiAgICBWaWRlb0Jhc2VUZXh0dXJlID0gcmVxdWlyZSgnLi9WaWRlb0Jhc2VUZXh0dXJlJyksXG4gICAgVGV4dHVyZVV2cyA9IHJlcXVpcmUoJy4vVGV4dHVyZVV2cycpLFxuICAgIEV2ZW50RW1pdHRlciA9IHJlcXVpcmUoJ2V2ZW50ZW1pdHRlcjMnKSxcbiAgICBtYXRoID0gcmVxdWlyZSgnLi4vbWF0aCcpLFxuICAgIHV0aWxzID0gcmVxdWlyZSgnLi4vdXRpbHMnKTtcblxuLyoqXG4gKiBBIHRleHR1cmUgc3RvcmVzIHRoZSBpbmZvcm1hdGlvbiB0aGF0IHJlcHJlc2VudHMgYW4gaW1hZ2Ugb3IgcGFydCBvZiBhbiBpbWFnZS4gSXQgY2Fubm90IGJlIGFkZGVkXG4gKiB0byB0aGUgZGlzcGxheSBsaXN0IGRpcmVjdGx5LiBJbnN0ZWFkIHVzZSBpdCBhcyB0aGUgdGV4dHVyZSBmb3IgYSBTcHJpdGUuIElmIG5vIGZyYW1lIGlzIHByb3ZpZGVkIHRoZW4gdGhlIHdob2xlIGltYWdlIGlzIHVzZWQuXG4gKlxuICogWW91IGNhbiBkaXJlY3RseSBjcmVhdGUgYSB0ZXh0dXJlIGZyb20gYW4gaW1hZ2UgYW5kIHRoZW4gcmV1c2UgaXQgbXVsdGlwbGUgdGltZXMgbGlrZSB0aGlzIDpcbiAqXG4gKiBgYGBqc1xuICogdmFyIHRleHR1cmUgPSBQSVhJLlRleHR1cmUuZnJvbUltYWdlKCdhc3NldHMvaW1hZ2UucG5nJyk7XG4gKiB2YXIgc3ByaXRlMSA9IG5ldyBQSVhJLlNwcml0ZSh0ZXh0dXJlKTtcbiAqIHZhciBzcHJpdGUyID0gbmV3IFBJWEkuU3ByaXRlKHRleHR1cmUpO1xuICogYGBgXG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIGJhc2VUZXh0dXJlIHtQSVhJLkJhc2VUZXh0dXJlfSBUaGUgYmFzZSB0ZXh0dXJlIHNvdXJjZSB0byBjcmVhdGUgdGhlIHRleHR1cmUgZnJvbVxuICogQHBhcmFtIFtmcmFtZV0ge1BJWEkuUmVjdGFuZ2xlfSBUaGUgcmVjdGFuZ2xlIGZyYW1lIG9mIHRoZSB0ZXh0dXJlIHRvIHNob3dcbiAqIEBwYXJhbSBbY3JvcF0ge1BJWEkuUmVjdGFuZ2xlfSBUaGUgYXJlYSBvZiBvcmlnaW5hbCB0ZXh0dXJlXG4gKiBAcGFyYW0gW3RyaW1dIHtQSVhJLlJlY3RhbmdsZX0gVHJpbW1lZCB0ZXh0dXJlIHJlY3RhbmdsZVxuICogQHBhcmFtIFtyb3RhdGVdIHtib29sZWFufSBpbmRpY2F0ZXMgd2hldGhlciB0aGUgdGV4dHVyZSBzaG91bGQgYmUgcm90YXRlZCBieSA5MCBkZWdyZWVzICggdXNlZCBieSB0ZXh0dXJlIHBhY2tlciApXG4gKi9cbmZ1bmN0aW9uIFRleHR1cmUoYmFzZVRleHR1cmUsIGZyYW1lLCBjcm9wLCB0cmltLCByb3RhdGUpXG57XG4gICAgRXZlbnRFbWl0dGVyLmNhbGwodGhpcyk7XG5cbiAgICAvKipcbiAgICAgKiBEb2VzIHRoaXMgVGV4dHVyZSBoYXZlIGFueSBmcmFtZSBkYXRhIGFzc2lnbmVkIHRvIGl0P1xuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKi9cbiAgICB0aGlzLm5vRnJhbWUgPSBmYWxzZTtcblxuICAgIGlmICghZnJhbWUpXG4gICAge1xuICAgICAgICB0aGlzLm5vRnJhbWUgPSB0cnVlO1xuICAgICAgICBmcmFtZSA9IG5ldyBtYXRoLlJlY3RhbmdsZSgwLCAwLCAxLCAxKTtcbiAgICB9XG5cbiAgICBpZiAoYmFzZVRleHR1cmUgaW5zdGFuY2VvZiBUZXh0dXJlKVxuICAgIHtcbiAgICAgICAgYmFzZVRleHR1cmUgPSBiYXNlVGV4dHVyZS5iYXNlVGV4dHVyZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYmFzZSB0ZXh0dXJlIHRoYXQgdGhpcyB0ZXh0dXJlIHVzZXMuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLkJhc2VUZXh0dXJlfVxuICAgICAqL1xuICAgIHRoaXMuYmFzZVRleHR1cmUgPSBiYXNlVGV4dHVyZTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBmcmFtZSBzcGVjaWZpZXMgdGhlIHJlZ2lvbiBvZiB0aGUgYmFzZSB0ZXh0dXJlIHRoYXQgdGhpcyB0ZXh0dXJlIHVzZXNcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuUmVjdGFuZ2xlfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fZnJhbWUgPSBmcmFtZTtcblxuICAgIC8qKlxuICAgICAqIFRoZSB0ZXh0dXJlIHRyaW0gZGF0YS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuUmVjdGFuZ2xlfVxuICAgICAqL1xuICAgIHRoaXMudHJpbSA9IHRyaW07XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIHdpbGwgbGV0IHRoZSByZW5kZXJlciBrbm93IGlmIHRoZSB0ZXh0dXJlIGlzIHZhbGlkLiBJZiBpdCdzIG5vdCB0aGVuIGl0IGNhbm5vdCBiZSByZW5kZXJlZC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICovXG4gICAgdGhpcy52YWxpZCA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogVGhpcyB3aWxsIGxldCBhIHJlbmRlcmVyIGtub3cgdGhhdCBhIHRleHR1cmUgaGFzIGJlZW4gdXBkYXRlZCAodXNlZCBtYWlubHkgZm9yIHdlYkdMIHV2IHVwZGF0ZXMpXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqL1xuICAgIHRoaXMucmVxdWlyZXNVcGRhdGUgPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBXZWJHTCBVViBkYXRhIGNhY2hlLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5UZXh0dXJlVXZzfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fdXZzID0gbnVsbDtcblxuICAgIC8qKlxuICAgICAqIFRoZSB3aWR0aCBvZiB0aGUgVGV4dHVyZSBpbiBwaXhlbHMuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy53aWR0aCA9IDA7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgaGVpZ2h0IG9mIHRoZSBUZXh0dXJlIGluIHBpeGVscy5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLmhlaWdodCA9IDA7XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIGlzIHRoZSBhcmVhIG9mIHRoZSBCYXNlVGV4dHVyZSBpbWFnZSB0byBhY3R1YWxseSBjb3B5IHRvIHRoZSBDYW52YXMgLyBXZWJHTCB3aGVuIHJlbmRlcmluZyxcbiAgICAgKiBpcnJlc3BlY3RpdmUgb2YgdGhlIGFjdHVhbCBmcmFtZSBzaXplIG9yIHBsYWNlbWVudCAod2hpY2ggY2FuIGJlIGluZmx1ZW5jZWQgYnkgdHJpbW1lZCB0ZXh0dXJlIGF0bGFzZXMpXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlJlY3RhbmdsZX1cbiAgICAgKi9cbiAgICB0aGlzLmNyb3AgPSBjcm9wIHx8IGZyYW1lOy8vbmV3IG1hdGguUmVjdGFuZ2xlKDAsIDAsIDEsIDEpO1xuXG4gICAgLyoqXG4gICAgICogSW5kaWNhdGVzIHdoZXRoZXIgdGhlIHRleHR1cmUgc2hvdWxkIGJlIHJvdGF0ZWQgYnkgOTAgZGVncmVlc1xuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqL1xuICAgIHRoaXMucm90YXRlID0gISFyb3RhdGU7XG5cbiAgICBpZiAoYmFzZVRleHR1cmUuaGFzTG9hZGVkKVxuICAgIHtcbiAgICAgICAgaWYgKHRoaXMubm9GcmFtZSlcbiAgICAgICAge1xuICAgICAgICAgICAgZnJhbWUgPSBuZXcgbWF0aC5SZWN0YW5nbGUoMCwgMCwgYmFzZVRleHR1cmUud2lkdGgsIGJhc2VUZXh0dXJlLmhlaWdodCk7XG5cbiAgICAgICAgICAgIC8vIGlmIHRoZXJlIGlzIG5vIGZyYW1lIHdlIHNob3VsZCBtb25pdG9yIGZvciBhbnkgYmFzZSB0ZXh0dXJlIGNoYW5nZXMuLlxuICAgICAgICAgICAgYmFzZVRleHR1cmUub24oJ3VwZGF0ZScsIHRoaXMub25CYXNlVGV4dHVyZVVwZGF0ZWQsIHRoaXMpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZnJhbWUgPSBmcmFtZTtcbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgYmFzZVRleHR1cmUub25jZSgnbG9hZGVkJywgdGhpcy5vbkJhc2VUZXh0dXJlTG9hZGVkLCB0aGlzKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBGaXJlZCB3aGVuIHRoZSB0ZXh0dXJlIGlzIHVwZGF0ZWQuIFRoaXMgaGFwcGVucyBpZiB0aGUgZnJhbWUgb3IgdGhlIGJhc2VUZXh0dXJlIGlzIHVwZGF0ZWQuXG4gICAgICpcbiAgICAgKiBAZXZlbnQgdXBkYXRlXG4gICAgICogQG1lbWJlcm9mIFBJWEkuVGV4dHVyZSNcbiAgICAgKiBAcHJvdGVjdGVkXG4gICAgICovXG59XG5cblRleHR1cmUucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShFdmVudEVtaXR0ZXIucHJvdG90eXBlKTtcblRleHR1cmUucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gVGV4dHVyZTtcbm1vZHVsZS5leHBvcnRzID0gVGV4dHVyZTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoVGV4dHVyZS5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBUaGUgZnJhbWUgc3BlY2lmaWVzIHRoZSByZWdpb24gb2YgdGhlIGJhc2UgdGV4dHVyZSB0aGF0IHRoaXMgdGV4dHVyZSB1c2VzLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5SZWN0YW5nbGV9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuVGV4dHVyZSNcbiAgICAgKi9cbiAgICBmcmFtZToge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9mcmFtZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAoZnJhbWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuX2ZyYW1lID0gZnJhbWU7XG5cbiAgICAgICAgICAgIHRoaXMubm9GcmFtZSA9IGZhbHNlO1xuXG4gICAgICAgICAgICB0aGlzLndpZHRoID0gZnJhbWUud2lkdGg7XG4gICAgICAgICAgICB0aGlzLmhlaWdodCA9IGZyYW1lLmhlaWdodDtcblxuICAgICAgICAgICAgaWYgKCF0aGlzLnRyaW0gJiYgIXRoaXMucm90YXRlICYmIChmcmFtZS54ICsgZnJhbWUud2lkdGggPiB0aGlzLmJhc2VUZXh0dXJlLndpZHRoIHx8IGZyYW1lLnkgKyBmcmFtZS5oZWlnaHQgPiB0aGlzLmJhc2VUZXh0dXJlLmhlaWdodCkpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdUZXh0dXJlIEVycm9yOiBmcmFtZSBkb2VzIG5vdCBmaXQgaW5zaWRlIHRoZSBiYXNlIFRleHR1cmUgZGltZW5zaW9ucyAnICsgdGhpcyk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vdGhpcy52YWxpZCA9IGZyYW1lICYmIGZyYW1lLndpZHRoICYmIGZyYW1lLmhlaWdodCAmJiB0aGlzLmJhc2VUZXh0dXJlLnNvdXJjZSAmJiB0aGlzLmJhc2VUZXh0dXJlLmhhc0xvYWRlZDtcbiAgICAgICAgICAgIHRoaXMudmFsaWQgPSBmcmFtZSAmJiBmcmFtZS53aWR0aCAmJiBmcmFtZS5oZWlnaHQgJiYgdGhpcy5iYXNlVGV4dHVyZS5oYXNMb2FkZWQ7XG5cbiAgICAgICAgICAgIGlmICh0aGlzLnRyaW0pXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdGhpcy53aWR0aCA9IHRoaXMudHJpbS53aWR0aDtcbiAgICAgICAgICAgICAgICB0aGlzLmhlaWdodCA9IHRoaXMudHJpbS5oZWlnaHQ7XG4gICAgICAgICAgICAgICAgdGhpcy5fZnJhbWUud2lkdGggPSB0aGlzLnRyaW0ud2lkdGg7XG4gICAgICAgICAgICAgICAgdGhpcy5fZnJhbWUuaGVpZ2h0ID0gdGhpcy50cmltLmhlaWdodDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB0aGlzLmNyb3AgPSBmcmFtZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHRoaXMudmFsaWQpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdGhpcy5fdXBkYXRlVXZzKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG59KTtcblxuLyoqXG4gKiBVcGRhdGVzIHRoaXMgdGV4dHVyZSBvbiB0aGUgZ3B1LlxuICpcbiAqL1xuVGV4dHVyZS5wcm90b3R5cGUudXBkYXRlID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLmJhc2VUZXh0dXJlLnVwZGF0ZSgpO1xufTtcblxuLyoqXG4gKiBDYWxsZWQgd2hlbiB0aGUgYmFzZSB0ZXh0dXJlIGlzIGxvYWRlZFxuICpcbiAqIEBwcml2YXRlXG4gKi9cblRleHR1cmUucHJvdG90eXBlLm9uQmFzZVRleHR1cmVMb2FkZWQgPSBmdW5jdGlvbiAoYmFzZVRleHR1cmUpXG57XG4gICAgLy8gVE9ETyB0aGlzIGNvZGUgbG9va3MgY29uZnVzaW5nLi4gYm9vIHRvIGFidXNpbmcgZ2V0dGVycyBhbmQgc2V0dGVyc3MhXG4gICAgaWYgKHRoaXMubm9GcmFtZSlcbiAgICB7XG4gICAgICAgIHRoaXMuZnJhbWUgPSBuZXcgbWF0aC5SZWN0YW5nbGUoMCwgMCwgYmFzZVRleHR1cmUud2lkdGgsIGJhc2VUZXh0dXJlLmhlaWdodCk7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHRoaXMuZnJhbWUgPSB0aGlzLl9mcmFtZTtcbiAgICB9XG5cbiAgICB0aGlzLmVtaXQoJ3VwZGF0ZScsIHRoaXMpO1xufTtcblxuLyoqXG4gKiBDYWxsZWQgd2hlbiB0aGUgYmFzZSB0ZXh0dXJlIGlzIHVwZGF0ZWRcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5UZXh0dXJlLnByb3RvdHlwZS5vbkJhc2VUZXh0dXJlVXBkYXRlZCA9IGZ1bmN0aW9uIChiYXNlVGV4dHVyZSlcbntcbiAgICB0aGlzLl9mcmFtZS53aWR0aCA9IGJhc2VUZXh0dXJlLndpZHRoO1xuICAgIHRoaXMuX2ZyYW1lLmhlaWdodCA9IGJhc2VUZXh0dXJlLmhlaWdodDtcblxuICAgIHRoaXMuZW1pdCgndXBkYXRlJywgdGhpcyk7XG59O1xuXG4vKipcbiAqIERlc3Ryb3lzIHRoaXMgdGV4dHVyZVxuICpcbiAqIEBwYXJhbSBbZGVzdHJveUJhc2U9ZmFsc2VdIHtib29sZWFufSBXaGV0aGVyIHRvIGRlc3Ryb3kgdGhlIGJhc2UgdGV4dHVyZSBhcyB3ZWxsXG4gKi9cblRleHR1cmUucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoZGVzdHJveUJhc2UpXG57XG4gICAgaWYgKHRoaXMuYmFzZVRleHR1cmUpXG4gICAge1xuICAgICAgICBpZiAoZGVzdHJveUJhc2UpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuYmFzZVRleHR1cmUuZGVzdHJveSgpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5iYXNlVGV4dHVyZS5vZmYoJ3VwZGF0ZScsIHRoaXMub25CYXNlVGV4dHVyZVVwZGF0ZWQsIHRoaXMpO1xuICAgICAgICB0aGlzLmJhc2VUZXh0dXJlLm9mZignbG9hZGVkJywgdGhpcy5vbkJhc2VUZXh0dXJlTG9hZGVkLCB0aGlzKTtcblxuICAgICAgICB0aGlzLmJhc2VUZXh0dXJlID0gbnVsbDtcbiAgICB9XG5cbiAgICB0aGlzLl9mcmFtZSA9IG51bGw7XG4gICAgdGhpcy5fdXZzID0gbnVsbDtcbiAgICB0aGlzLnRyaW0gPSBudWxsO1xuICAgIHRoaXMuY3JvcCA9IG51bGw7XG5cbiAgICB0aGlzLnZhbGlkID0gZmFsc2U7XG5cbiAgICB0aGlzLm9mZignZGlzcG9zZScsIHRoaXMuZGlzcG9zZSwgdGhpcyk7XG4gICAgdGhpcy5vZmYoJ3VwZGF0ZScsIHRoaXMudXBkYXRlLCB0aGlzKTtcbn07XG5cbi8qKlxuICogQ3JlYXRlcyBhIG5ldyB0ZXh0dXJlIG9iamVjdCB0aGF0IGFjdHMgdGhlIHNhbWUgYXMgdGhpcyBvbmUuXG4gKlxuICogQHJldHVybiB7UElYSS5UZXh0dXJlfVxuICovXG5UZXh0dXJlLnByb3RvdHlwZS5jbG9uZSA9IGZ1bmN0aW9uICgpXG57XG4gICAgcmV0dXJuIG5ldyBUZXh0dXJlKHRoaXMuYmFzZVRleHR1cmUsIHRoaXMuZnJhbWUsIHRoaXMuY3JvcCwgdGhpcy50cmltLCB0aGlzLnJvdGF0ZSk7XG59O1xuXG4vKipcbiAqIFVwZGF0ZXMgdGhlIGludGVybmFsIFdlYkdMIFVWIGNhY2hlLlxuICpcbiAqIEBwcml2YXRlXG4gKi9cblRleHR1cmUucHJvdG90eXBlLl91cGRhdGVVdnMgPSBmdW5jdGlvbiAoKVxue1xuICAgIGlmICghdGhpcy5fdXZzKVxuICAgIHtcbiAgICAgICAgdGhpcy5fdXZzID0gbmV3IFRleHR1cmVVdnMoKTtcbiAgICB9XG5cbiAgICB0aGlzLl91dnMuc2V0KHRoaXMuY3JvcCwgdGhpcy5iYXNlVGV4dHVyZSwgdGhpcy5yb3RhdGUpO1xufTtcblxuLyoqXG4gKiBIZWxwZXIgZnVuY3Rpb24gdGhhdCBjcmVhdGVzIGEgVGV4dHVyZSBvYmplY3QgZnJvbSB0aGUgZ2l2ZW4gaW1hZ2UgdXJsLlxuICogSWYgdGhlIGltYWdlIGlzIG5vdCBpbiB0aGUgdGV4dHVyZSBjYWNoZSBpdCB3aWxsIGJlICBjcmVhdGVkIGFuZCBsb2FkZWQuXG4gKlxuICogQHN0YXRpY1xuICogQHBhcmFtIGltYWdlVXJsIHtzdHJpbmd9IFRoZSBpbWFnZSB1cmwgb2YgdGhlIHRleHR1cmVcbiAqIEBwYXJhbSBjcm9zc29yaWdpbiB7Ym9vbGVhbn0gV2hldGhlciByZXF1ZXN0cyBzaG91bGQgYmUgdHJlYXRlZCBhcyBjcm9zc29yaWdpblxuICogQHBhcmFtIHNjYWxlTW9kZSB7bnVtYmVyfSBTZWUge0BsaW5rIFBJWEkuU0NBTEVfTU9ERVN9IGZvciBwb3NzaWJsZSB2YWx1ZXNcbiAqIEByZXR1cm4ge1BJWEkuVGV4dHVyZX0gVGhlIG5ld2x5IGNyZWF0ZWQgdGV4dHVyZVxuICovXG5UZXh0dXJlLmZyb21JbWFnZSA9IGZ1bmN0aW9uIChpbWFnZVVybCwgY3Jvc3NvcmlnaW4sIHNjYWxlTW9kZSlcbntcbiAgICB2YXIgdGV4dHVyZSA9IHV0aWxzLlRleHR1cmVDYWNoZVtpbWFnZVVybF07XG5cbiAgICBpZiAoIXRleHR1cmUpXG4gICAge1xuICAgICAgICB0ZXh0dXJlID0gbmV3IFRleHR1cmUoQmFzZVRleHR1cmUuZnJvbUltYWdlKGltYWdlVXJsLCBjcm9zc29yaWdpbiwgc2NhbGVNb2RlKSk7XG4gICAgICAgIHV0aWxzLlRleHR1cmVDYWNoZVtpbWFnZVVybF0gPSB0ZXh0dXJlO1xuICAgIH1cblxuICAgIHJldHVybiB0ZXh0dXJlO1xufTtcblxuLyoqXG4gKiBIZWxwZXIgZnVuY3Rpb24gdGhhdCBjcmVhdGVzIGEgc3ByaXRlIHRoYXQgd2lsbCBjb250YWluIGEgdGV4dHVyZSBmcm9tIHRoZSBUZXh0dXJlQ2FjaGUgYmFzZWQgb24gdGhlIGZyYW1lSWRcbiAqIFRoZSBmcmFtZSBpZHMgYXJlIGNyZWF0ZWQgd2hlbiBhIFRleHR1cmUgcGFja2VyIGZpbGUgaGFzIGJlZW4gbG9hZGVkXG4gKlxuICogQHN0YXRpY1xuICogQHBhcmFtIGZyYW1lSWQge3N0cmluZ30gVGhlIGZyYW1lIElkIG9mIHRoZSB0ZXh0dXJlIGluIHRoZSBjYWNoZVxuICogQHJldHVybiB7UElYSS5UZXh0dXJlfSBUaGUgbmV3bHkgY3JlYXRlZCB0ZXh0dXJlXG4gKi9cblRleHR1cmUuZnJvbUZyYW1lID0gZnVuY3Rpb24gKGZyYW1lSWQpXG57XG4gICAgdmFyIHRleHR1cmUgPSB1dGlscy5UZXh0dXJlQ2FjaGVbZnJhbWVJZF07XG5cbiAgICBpZiAoIXRleHR1cmUpXG4gICAge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RoZSBmcmFtZUlkIFwiJyArIGZyYW1lSWQgKyAnXCIgZG9lcyBub3QgZXhpc3QgaW4gdGhlIHRleHR1cmUgY2FjaGUnKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGV4dHVyZTtcbn07XG5cbi8qKlxuICogSGVscGVyIGZ1bmN0aW9uIHRoYXQgY3JlYXRlcyBhIG5ldyBUZXh0dXJlIGJhc2VkIG9uIHRoZSBnaXZlbiBjYW52YXMgZWxlbWVudC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAcGFyYW0gY2FudmFzIHtDYW52YXN9IFRoZSBjYW52YXMgZWxlbWVudCBzb3VyY2Ugb2YgdGhlIHRleHR1cmVcbiAqIEBwYXJhbSBzY2FsZU1vZGUge251bWJlcn0gU2VlIHtAbGluayBQSVhJLlNDQUxFX01PREVTfSBmb3IgcG9zc2libGUgdmFsdWVzXG4gKiBAcmV0dXJuIHtQSVhJLlRleHR1cmV9XG4gKi9cblRleHR1cmUuZnJvbUNhbnZhcyA9IGZ1bmN0aW9uIChjYW52YXMsIHNjYWxlTW9kZSlcbntcbiAgICByZXR1cm4gbmV3IFRleHR1cmUoQmFzZVRleHR1cmUuZnJvbUNhbnZhcyhjYW52YXMsIHNjYWxlTW9kZSkpO1xufTtcblxuLyoqXG4gKiBIZWxwZXIgZnVuY3Rpb24gdGhhdCBjcmVhdGVzIGEgbmV3IFRleHR1cmUgYmFzZWQgb24gdGhlIGdpdmVuIHZpZGVvIGVsZW1lbnQuXG4gKlxuICogQHN0YXRpY1xuICogQHBhcmFtIHZpZGVvIHtIVE1MVmlkZW9FbGVtZW50fVxuICogQHBhcmFtIHNjYWxlTW9kZSB7bnVtYmVyfSBTZWUge0BsaW5rIFBJWEkuU0NBTEVfTU9ERVN9IGZvciBwb3NzaWJsZSB2YWx1ZXNcbiAqIEByZXR1cm4ge1BJWEkuVGV4dHVyZX0gQSBUZXh0dXJlXG4gKi9cblRleHR1cmUuZnJvbVZpZGVvID0gZnVuY3Rpb24gKHZpZGVvLCBzY2FsZU1vZGUpXG57XG4gICAgaWYgKHR5cGVvZiB2aWRlbyA9PT0gJ3N0cmluZycpXG4gICAge1xuICAgICAgICByZXR1cm4gVGV4dHVyZS5mcm9tVmlkZW9VcmwodmlkZW8sIHNjYWxlTW9kZSk7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHJldHVybiBuZXcgVGV4dHVyZShWaWRlb0Jhc2VUZXh0dXJlLmZyb21WaWRlbyh2aWRlbywgc2NhbGVNb2RlKSk7XG4gICAgfVxufTtcblxuLyoqXG4gKiBIZWxwZXIgZnVuY3Rpb24gdGhhdCBjcmVhdGVzIGEgbmV3IFRleHR1cmUgYmFzZWQgb24gdGhlIHZpZGVvIHVybC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAcGFyYW0gdmlkZW9Vcmwge3N0cmluZ31cbiAqIEBwYXJhbSBzY2FsZU1vZGUge251bWJlcn0gU2VlIHtAbGluayBQSVhJLlNDQUxFX01PREVTfSBmb3IgcG9zc2libGUgdmFsdWVzXG4gKiBAcmV0dXJuIHtQSVhJLlRleHR1cmV9IEEgVGV4dHVyZVxuICovXG5UZXh0dXJlLmZyb21WaWRlb1VybCA9IGZ1bmN0aW9uICh2aWRlb1VybCwgc2NhbGVNb2RlKVxue1xuICAgIHJldHVybiBuZXcgVGV4dHVyZShWaWRlb0Jhc2VUZXh0dXJlLmZyb21VcmwodmlkZW9VcmwsIHNjYWxlTW9kZSkpO1xufTtcblxuLyoqXG4gKiBBZGRzIGEgdGV4dHVyZSB0byB0aGUgZ2xvYmFsIHV0aWxzLlRleHR1cmVDYWNoZS4gVGhpcyBjYWNoZSBpcyBzaGFyZWQgYWNyb3NzIHRoZSB3aG9sZSBQSVhJIG9iamVjdC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAcGFyYW0gdGV4dHVyZSB7UElYSS5UZXh0dXJlfSBUaGUgVGV4dHVyZSB0byBhZGQgdG8gdGhlIGNhY2hlLlxuICogQHBhcmFtIGlkIHtzdHJpbmd9IFRoZSBpZCB0aGF0IHRoZSB0ZXh0dXJlIHdpbGwgYmUgc3RvcmVkIGFnYWluc3QuXG4gKi9cblRleHR1cmUuYWRkVGV4dHVyZVRvQ2FjaGUgPSBmdW5jdGlvbiAodGV4dHVyZSwgaWQpXG57XG4gICAgdXRpbHMuVGV4dHVyZUNhY2hlW2lkXSA9IHRleHR1cmU7XG59O1xuXG4vKipcbiAqIFJlbW92ZSBhIHRleHR1cmUgZnJvbSB0aGUgZ2xvYmFsIHV0aWxzLlRleHR1cmVDYWNoZS5cbiAqXG4gKiBAc3RhdGljXG4gKiBAcGFyYW0gaWQge3N0cmluZ30gVGhlIGlkIG9mIHRoZSB0ZXh0dXJlIHRvIGJlIHJlbW92ZWRcbiAqIEByZXR1cm4ge1BJWEkuVGV4dHVyZX0gVGhlIHRleHR1cmUgdGhhdCB3YXMgcmVtb3ZlZFxuICovXG5UZXh0dXJlLnJlbW92ZVRleHR1cmVGcm9tQ2FjaGUgPSBmdW5jdGlvbiAoaWQpXG57XG4gICAgdmFyIHRleHR1cmUgPSB1dGlscy5UZXh0dXJlQ2FjaGVbaWRdO1xuXG4gICAgZGVsZXRlIHV0aWxzLlRleHR1cmVDYWNoZVtpZF07XG4gICAgZGVsZXRlIHV0aWxzLkJhc2VUZXh0dXJlQ2FjaGVbaWRdO1xuXG4gICAgcmV0dXJuIHRleHR1cmU7XG59O1xuXG4vKipcbiAqIEFuIGVtcHR5IHRleHR1cmUsIHVzZWQgb2Z0ZW4gdG8gbm90IGhhdmUgdG8gY3JlYXRlIG11bHRpcGxlIGVtcHR5IHRleHR1cmVzLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBjb25zdGFudFxuICovXG5UZXh0dXJlLkVNUFRZID0gbmV3IFRleHR1cmUobmV3IEJhc2VUZXh0dXJlKCkpO1xuIiwiXG4vKipcbiAqIEEgc3RhbmRhcmQgb2JqZWN0IHRvIHN0b3JlIHRoZSBVdnMgb2YgYSB0ZXh0dXJlXG4gKlxuICogQGNsYXNzXG4gKiBAcHJpdmF0ZVxuICogQG1lbWJlcm9mIFBJWElcbiAqL1xuZnVuY3Rpb24gVGV4dHVyZVV2cygpXG57XG4gICAgdGhpcy54MCA9IDA7XG4gICAgdGhpcy55MCA9IDA7XG5cbiAgICB0aGlzLngxID0gMTtcbiAgICB0aGlzLnkxID0gMDtcblxuICAgIHRoaXMueDIgPSAxO1xuICAgIHRoaXMueTIgPSAxO1xuXG4gICAgdGhpcy54MyA9IDA7XG4gICAgdGhpcy55MyA9IDE7XG5cbiAgICB0aGlzLnh5MF91aW50MzIgPSAwO1xuICAgIHRoaXMueHkxX3VpbnQzMiA9IDA7XG4gICAgdGhpcy54eTJfdWludDMyID0gMDtcbiAgICB0aGlzLnh5M191aW50MzIgPSAwO1xuXG4gICAgdGhpcy51dnNfdWludDMyID0gbmV3IFVpbnQzMkFycmF5KDQpXG59XG5cbm1vZHVsZS5leHBvcnRzID0gVGV4dHVyZVV2cztcblxuLyoqXG4gKiBTZXRzIHRoZSB0ZXh0dXJlIFV2cyBiYXNlZCBvbiB0aGUgZ2l2ZW4gZnJhbWUgaW5mb3JtYXRpb25cbiAqIEBwYXJhbSBmcmFtZSB7UElYSS5SZWN0YW5nbGV9XG4gKiBAcGFyYW0gYmFzZUZyYW1lIHtQSVhJLlJlY3RhbmdsZX1cbiAqIEBwYXJhbSByb3RhdGUge2Jvb2xlYW59IFdoZXRoZXIgb3Igbm90IHRoZSBmcmFtZSBpcyByb3RhdGVkXG4gKiBAcHJpdmF0ZVxuICovXG5UZXh0dXJlVXZzLnByb3RvdHlwZS5zZXQgPSBmdW5jdGlvbiAoZnJhbWUsIGJhc2VGcmFtZSwgcm90YXRlKVxue1xuICAgIHZhciB0dyA9IGJhc2VGcmFtZS53aWR0aDtcbiAgICB2YXIgdGggPSBiYXNlRnJhbWUuaGVpZ2h0O1xuXG4gICAgaWYocm90YXRlKVxuICAgIHtcbiAgICAgICAgdGhpcy54MCA9IChmcmFtZS54ICsgZnJhbWUuaGVpZ2h0KSAvIHR3O1xuICAgICAgICB0aGlzLnkwID0gZnJhbWUueSAvIHRoO1xuXG4gICAgICAgIHRoaXMueDEgPSAoZnJhbWUueCArIGZyYW1lLmhlaWdodCkgLyB0dztcbiAgICAgICAgdGhpcy55MSA9IChmcmFtZS55ICsgZnJhbWUud2lkdGgpIC8gdGg7XG5cbiAgICAgICAgdGhpcy54MiA9IGZyYW1lLnggLyB0dztcbiAgICAgICAgdGhpcy55MiA9IChmcmFtZS55ICsgZnJhbWUud2lkdGgpIC8gdGg7XG5cbiAgICAgICAgdGhpcy54MyA9IGZyYW1lLnggLyB0dztcbiAgICAgICAgdGhpcy55MyA9IGZyYW1lLnkgLyB0aDtcbiAgICB9XG4gICAgZWxzZVxuICAgIHtcblxuICAgICAgICB0aGlzLngwID0gZnJhbWUueCAvIHR3O1xuICAgICAgICB0aGlzLnkwID0gZnJhbWUueSAvIHRoO1xuXG4gICAgICAgIHRoaXMueDEgPSAoZnJhbWUueCArIGZyYW1lLndpZHRoKSAvIHR3O1xuICAgICAgICB0aGlzLnkxID0gZnJhbWUueSAvIHRoO1xuXG4gICAgICAgIHRoaXMueDIgPSAoZnJhbWUueCArIGZyYW1lLndpZHRoKSAvIHR3O1xuICAgICAgICB0aGlzLnkyID0gKGZyYW1lLnkgKyBmcmFtZS5oZWlnaHQpIC8gdGg7XG5cbiAgICAgICAgdGhpcy54MyA9IGZyYW1lLnggLyB0dztcbiAgICAgICAgdGhpcy55MyA9IChmcmFtZS55ICsgZnJhbWUuaGVpZ2h0KSAvIHRoO1xuICAgIH1cblxuICAgIHRoaXMudXZzX3VpbnQzMlswXSA9ICgoKHRoaXMueTAgKiA2NTUzNSkgJiAweEZGRkYpIDw8IDE2KSB8ICgodGhpcy54MCAqIDY1NTM1KSAmIDB4RkZGRik7XG4gICAgdGhpcy51dnNfdWludDMyWzFdID0gKCgodGhpcy55MSAqIDY1NTM1KSAmIDB4RkZGRikgPDwgMTYpIHwgKCh0aGlzLngxICogNjU1MzUpICYgMHhGRkZGKTtcbiAgICB0aGlzLnV2c191aW50MzJbMl0gPSAoKCh0aGlzLnkyICogNjU1MzUpICYgMHhGRkZGKSA8PCAxNikgfCAoKHRoaXMueDIgKiA2NTUzNSkgJiAweEZGRkYpO1xuICAgIHRoaXMudXZzX3VpbnQzMlszXSA9ICgoKHRoaXMueTMgKiA2NTUzNSkgJiAweEZGRkYpIDw8IDE2KSB8ICgodGhpcy54MyAqIDY1NTM1KSAmIDB4RkZGRik7XG59O1xuIiwidmFyIEJhc2VUZXh0dXJlID0gcmVxdWlyZSgnLi9CYXNlVGV4dHVyZScpLFxuICAgIHV0aWxzID0gcmVxdWlyZSgnLi4vdXRpbHMnKTtcblxuLyoqXG4gKiBBIHRleHR1cmUgb2YgYSBbcGxheWluZ10gVmlkZW8uXG4gKlxuICogVmlkZW8gYmFzZSB0ZXh0dXJlcyBtaW1pYyBQaXhpIEJhc2VUZXh0dXJlLmZyb20uLi4uIG1ldGhvZCBpbiB0aGVpciBjcmVhdGlvbiBwcm9jZXNzLlxuICpcbiAqIFRoaXMgY2FuIGJlIHVzZWQgaW4gc2V2ZXJhbCB3YXlzLCBzdWNoIGFzOlxuICpcbiAqIGBgYGpzXG4gKiB2YXIgdGV4dHVyZSA9IFBJWEkuVmlkZW9CYXNlVGV4dHVyZS5mcm9tVXJsKCdodHRwOi8vbXlkb21haW4uY29tL3ZpZGVvLm1wNCcpO1xuICpcbiAqIHZhciB0ZXh0dXJlID0gUElYSS5WaWRlb0Jhc2VUZXh0dXJlLmZyb21VcmwoeyBzcmM6ICdodHRwOi8vbXlkb21haW4uY29tL3ZpZGVvLm1wNCcsIG1pbWU6ICd2aWRlby9tcDQnIH0pO1xuICpcbiAqIHZhciB0ZXh0dXJlID0gUElYSS5WaWRlb0Jhc2VUZXh0dXJlLmZyb21VcmxzKFsnL3ZpZGVvLndlYm0nLCAnL3ZpZGVvLm1wNCddKTtcbiAqXG4gKiB2YXIgdGV4dHVyZSA9IFBJWEkuVmlkZW9CYXNlVGV4dHVyZS5mcm9tVXJscyhbXG4gKiAgICAgeyBzcmM6ICcvdmlkZW8ud2VibScsIG1pbWU6ICd2aWRlby93ZWJtJyB9LFxuICogICAgIHsgc3JjOiAnL3ZpZGVvLm1wNCcsIG1pbWU6ICd2aWRlby9tcDQnIH1cbiAqIF0pO1xuICogYGBgXG4gKlxuICogU2VlIHRoZSBbXCJkZXVzXCIgZGVtb10oaHR0cDovL3d3dy5nb29kYm95ZGlnaXRhbC5jb20vcGl4aWpzL2V4YW1wbGVzL2RldXMvKS5cbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQmFzZVRleHR1cmVcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gc291cmNlIHtIVE1MVmlkZW9FbGVtZW50fVxuICogQHBhcmFtIFtzY2FsZU1vZGVdIHtudW1iZXJ9IFNlZSB7QGxpbmsgUElYSS5TQ0FMRV9NT0RFU30gZm9yIHBvc3NpYmxlIHZhbHVlc1xuICovXG5mdW5jdGlvbiBWaWRlb0Jhc2VUZXh0dXJlKHNvdXJjZSwgc2NhbGVNb2RlKVxue1xuICAgIGlmICghc291cmNlKVxuICAgIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdObyB2aWRlbyBzb3VyY2UgZWxlbWVudCBzcGVjaWZpZWQuJyk7XG4gICAgfVxuXG4gICAgLy8gaG9vayBpbiBoZXJlIHRvIGNoZWNrIGlmIHZpZGVvIGlzIGFscmVhZHkgYXZhaWxhYmxlLlxuICAgIC8vIEJhc2VUZXh0dXJlIGxvb2tzIGZvciBhIHNvdXJjZS5jb21wbGV0ZSBib29sZWFuLCBwbHVzIHdpZHRoICYgaGVpZ2h0LlxuXG4gICAgaWYgKChzb3VyY2UucmVhZHlTdGF0ZSA9PT0gc291cmNlLkhBVkVfRU5PVUdIX0RBVEEgfHwgc291cmNlLnJlYWR5U3RhdGUgPT09IHNvdXJjZS5IQVZFX0ZVVFVSRV9EQVRBKSAmJiBzb3VyY2Uud2lkdGggJiYgc291cmNlLmhlaWdodClcbiAgICB7XG4gICAgICAgIHNvdXJjZS5jb21wbGV0ZSA9IHRydWU7XG4gICAgfVxuXG4gICAgQmFzZVRleHR1cmUuY2FsbCh0aGlzLCBzb3VyY2UsIHNjYWxlTW9kZSk7XG5cbiAgICAvKipcbiAgICAgKiBTaG91bGQgdGhlIGJhc2UgdGV4dHVyZSBhdXRvbWF0aWNhbGx5IHVwZGF0ZSBpdHNlbGYsIHNldCB0byB0cnVlIGJ5IGRlZmF1bHRcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICogQGRlZmF1bHQgdHJ1ZVxuICAgICAqL1xuICAgIHRoaXMuYXV0b1VwZGF0ZSA9IGZhbHNlO1xuXG4gICAgdGhpcy5fb25VcGRhdGUgPSB0aGlzLl9vblVwZGF0ZS5iaW5kKHRoaXMpO1xuICAgIHRoaXMuX29uQ2FuUGxheSA9IHRoaXMuX29uQ2FuUGxheS5iaW5kKHRoaXMpO1xuXG4gICAgaWYgKCFzb3VyY2UuY29tcGxldGUpXG4gICAge1xuICAgICAgICBzb3VyY2UuYWRkRXZlbnRMaXN0ZW5lcignY2FucGxheScsIHRoaXMuX29uQ2FuUGxheSk7XG4gICAgICAgIHNvdXJjZS5hZGRFdmVudExpc3RlbmVyKCdjYW5wbGF5dGhyb3VnaCcsIHRoaXMuX29uQ2FuUGxheSk7XG5cbiAgICAgICAgLy8gc3RhcnRlZCBwbGF5aW5nLi5cbiAgICAgICAgc291cmNlLmFkZEV2ZW50TGlzdGVuZXIoJ3BsYXknLCB0aGlzLl9vblBsYXlTdGFydC5iaW5kKHRoaXMpKTtcbiAgICAgICAgc291cmNlLmFkZEV2ZW50TGlzdGVuZXIoJ3BhdXNlJywgdGhpcy5fb25QbGF5U3RvcC5iaW5kKHRoaXMpKTtcbiAgICB9XG5cbiAgICB0aGlzLl9fbG9hZGVkID0gZmFsc2U7XG59XG5cblZpZGVvQmFzZVRleHR1cmUucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShCYXNlVGV4dHVyZS5wcm90b3R5cGUpO1xuVmlkZW9CYXNlVGV4dHVyZS5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBWaWRlb0Jhc2VUZXh0dXJlO1xubW9kdWxlLmV4cG9ydHMgPSBWaWRlb0Jhc2VUZXh0dXJlO1xuXG4vKipcbiAqIFRoZSBpbnRlcm5hbCB1cGRhdGUgbG9vcCBvZiB0aGUgdmlkZW8gYmFzZSB0ZXh0dXJlLCBvbmx5IHJ1bnMgd2hlbiBhdXRvVXBkYXRlIGlzIHNldCB0byB0cnVlXG4gKlxuICogQHByaXZhdGVcbiAqL1xuVmlkZW9CYXNlVGV4dHVyZS5wcm90b3R5cGUuX29uVXBkYXRlID0gZnVuY3Rpb24gKClcbntcbiAgICBpZiAodGhpcy5hdXRvVXBkYXRlKVxuICAgIHtcbiAgICAgICAgd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZSh0aGlzLl9vblVwZGF0ZSk7XG4gICAgICAgIHRoaXMudXBkYXRlKCk7XG4gICAgfVxufTtcblxuLyoqXG4gKiBSdW5zIHRoZSB1cGRhdGUgbG9vcCB3aGVuIHRoZSB2aWRlbyBpcyByZWFkeSB0byBwbGF5XG4gKlxuICogQHByaXZhdGVcbiAqL1xuVmlkZW9CYXNlVGV4dHVyZS5wcm90b3R5cGUuX29uUGxheVN0YXJ0ID0gZnVuY3Rpb24gKClcbntcbiAgICBpZiAoIXRoaXMuYXV0b1VwZGF0ZSlcbiAgICB7XG4gICAgICAgIHdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUodGhpcy5fb25VcGRhdGUpO1xuICAgICAgICB0aGlzLmF1dG9VcGRhdGUgPSB0cnVlO1xuICAgIH1cbn07XG5cbi8qKlxuICogRmlyZWQgd2hlbiBhIHBhdXNlIGV2ZW50IGlzIHRyaWdnZXJlZCwgc3RvcHMgdGhlIHVwZGF0ZSBsb29wXG4gKlxuICogQHByaXZhdGVcbiAqL1xuVmlkZW9CYXNlVGV4dHVyZS5wcm90b3R5cGUuX29uUGxheVN0b3AgPSBmdW5jdGlvbiAoKVxue1xuICAgIHRoaXMuYXV0b1VwZGF0ZSA9IGZhbHNlO1xufTtcblxuLyoqXG4gKiBGaXJlZCB3aGVuIHRoZSB2aWRlbyBpcyBsb2FkZWQgYW5kIHJlYWR5IHRvIHBsYXlcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5WaWRlb0Jhc2VUZXh0dXJlLnByb3RvdHlwZS5fb25DYW5QbGF5ID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLmhhc0xvYWRlZCA9IHRydWU7XG5cbiAgICBpZiAodGhpcy5zb3VyY2UpXG4gICAge1xuICAgICAgICB0aGlzLnNvdXJjZS5yZW1vdmVFdmVudExpc3RlbmVyKCdjYW5wbGF5JywgdGhpcy5fb25DYW5QbGF5KTtcbiAgICAgICAgdGhpcy5zb3VyY2UucmVtb3ZlRXZlbnRMaXN0ZW5lcignY2FucGxheXRocm91Z2gnLCB0aGlzLl9vbkNhblBsYXkpO1xuXG4gICAgICAgIHRoaXMud2lkdGggPSB0aGlzLnNvdXJjZS52aWRlb1dpZHRoO1xuICAgICAgICB0aGlzLmhlaWdodCA9IHRoaXMuc291cmNlLnZpZGVvSGVpZ2h0O1xuXG4gICAgICAgIHRoaXMuc291cmNlLnBsYXkoKTtcblxuICAgICAgICAvLyBwcmV2ZW50IG11bHRpcGxlIGxvYWRlZCBkaXNwYXRjaGVzLi5cbiAgICAgICAgaWYgKCF0aGlzLl9fbG9hZGVkKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLl9fbG9hZGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMuZW1pdCgnbG9hZGVkJywgdGhpcyk7XG4gICAgICAgIH1cbiAgICB9XG59O1xuXG4vKipcbiAqIERlc3Ryb3lzIHRoaXMgdGV4dHVyZVxuICpcbiAqL1xuVmlkZW9CYXNlVGV4dHVyZS5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uICgpXG57XG4gICAgaWYgKHRoaXMuc291cmNlICYmIHRoaXMuc291cmNlLl9waXhpSWQpXG4gICAge1xuICAgICAgICBkZWxldGUgdXRpbHMuQmFzZVRleHR1cmVDYWNoZVsgdGhpcy5zb3VyY2UuX3BpeGlJZCBdO1xuICAgICAgICBkZWxldGUgdGhpcy5zb3VyY2UuX3BpeGlJZDtcbiAgICB9XG5cbiAgICBCYXNlVGV4dHVyZS5wcm90b3R5cGUuZGVzdHJveS5jYWxsKHRoaXMpO1xufTtcblxuLyoqXG4gKiBNaW1pYyBQaXhpIEJhc2VUZXh0dXJlLmZyb20uLi4uIG1ldGhvZC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAcGFyYW0gdmlkZW8ge0hUTUxWaWRlb0VsZW1lbnR9XG4gKiBAcGFyYW0gc2NhbGVNb2RlIHtudW1iZXJ9IFNlZSB7QGxpbmsgUElYSS5TQ0FMRV9NT0RFU30gZm9yIHBvc3NpYmxlIHZhbHVlc1xuICogQHJldHVybiB7UElYSS5WaWRlb0Jhc2VUZXh0dXJlfVxuICovXG5WaWRlb0Jhc2VUZXh0dXJlLmZyb21WaWRlbyA9IGZ1bmN0aW9uICh2aWRlbywgc2NhbGVNb2RlKVxue1xuICAgIGlmICghdmlkZW8uX3BpeGlJZClcbiAgICB7XG4gICAgICAgIHZpZGVvLl9waXhpSWQgPSAndmlkZW9fJyArIHV0aWxzLnVpZCgpO1xuICAgIH1cblxuICAgIHZhciBiYXNlVGV4dHVyZSA9IHV0aWxzLkJhc2VUZXh0dXJlQ2FjaGVbdmlkZW8uX3BpeGlJZF07XG5cbiAgICBpZiAoIWJhc2VUZXh0dXJlKVxuICAgIHtcbiAgICAgICAgYmFzZVRleHR1cmUgPSBuZXcgVmlkZW9CYXNlVGV4dHVyZSh2aWRlbywgc2NhbGVNb2RlKTtcbiAgICAgICAgdXRpbHMuQmFzZVRleHR1cmVDYWNoZVsgdmlkZW8uX3BpeGlJZCBdID0gYmFzZVRleHR1cmU7XG4gICAgfVxuXG4gICAgcmV0dXJuIGJhc2VUZXh0dXJlO1xufTtcblxuLyoqXG4gKiBIZWxwZXIgZnVuY3Rpb24gdGhhdCBjcmVhdGVzIGEgbmV3IEJhc2VUZXh0dXJlIGJhc2VkIG9uIHRoZSBnaXZlbiB2aWRlbyBlbGVtZW50LlxuICogVGhpcyBCYXNlVGV4dHVyZSBjYW4gdGhlbiBiZSB1c2VkIHRvIGNyZWF0ZSBhIHRleHR1cmVcbiAqXG4gKiBAc3RhdGljXG4gKiBAcGFyYW0gdmlkZW9TcmMge3N0cmluZ3xvYmplY3R8c3RyaW5nW118b2JqZWN0W119IFRoZSBVUkwocykgZm9yIHRoZSB2aWRlby5cbiAqIEBwYXJhbSBbdmlkZW9TcmMuc3JjXSB7c3RyaW5nfSBPbmUgb2YgdGhlIHNvdXJjZSB1cmxzIGZvciB0aGUgdmlkZW9cbiAqIEBwYXJhbSBbdmlkZW9TcmMubWltZV0ge3N0cmluZ30gVGhlIG1pbWV0eXBlIG9mIHRoZSB2aWRlbyAoZS5nLiAndmlkZW8vbXA0JykuIElmIG5vdCBzcGVjaWZpZWRcbiAqICB0aGUgdXJsJ3MgZXh0ZW5zaW9uIHdpbGwgYmUgdXNlZCBhcyB0aGUgc2Vjb25kIHBhcnQgb2YgdGhlIG1pbWUgdHlwZS5cbiAqIEBwYXJhbSBzY2FsZU1vZGUge251bWJlcn0gU2VlIHtAbGluayBQSVhJLlNDQUxFX01PREVTfSBmb3IgcG9zc2libGUgdmFsdWVzXG4gKiBAcmV0dXJuIHtQSVhJLlZpZGVvQmFzZVRleHR1cmV9XG4gKi9cblZpZGVvQmFzZVRleHR1cmUuZnJvbVVybCA9IGZ1bmN0aW9uICh2aWRlb1NyYywgc2NhbGVNb2RlKVxue1xuICAgIHZhciB2aWRlbyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3ZpZGVvJyk7XG5cbiAgICAvLyBhcnJheSBvZiBvYmplY3RzIG9yIHN0cmluZ3NcbiAgICBpZiAoQXJyYXkuaXNBcnJheSh2aWRlb1NyYykpXG4gICAge1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHZpZGVvU3JjLmxlbmd0aDsgKytpKVxuICAgICAgICB7XG4gICAgICAgICAgICB2aWRlby5hcHBlbmRDaGlsZChjcmVhdGVTb3VyY2UodmlkZW9TcmNbaV0uc3JjIHx8IHZpZGVvU3JjW2ldLCB2aWRlb1NyY1tpXS5taW1lKSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLy8gc2luZ2xlIG9iamVjdCBvciBzdHJpbmdcbiAgICBlbHNlXG4gICAge1xuICAgICAgICB2aWRlby5hcHBlbmRDaGlsZChjcmVhdGVTb3VyY2UodmlkZW9TcmMuc3JjIHx8IHZpZGVvU3JjLCB2aWRlb1NyYy5taW1lKSk7XG4gICAgfVxuXG4gICAgdmlkZW8ubG9hZCgpO1xuICAgIHZpZGVvLnBsYXkoKTtcblxuICAgIHJldHVybiBWaWRlb0Jhc2VUZXh0dXJlLmZyb21WaWRlbyh2aWRlbywgc2NhbGVNb2RlKTtcbn07XG5cblZpZGVvQmFzZVRleHR1cmUuZnJvbVVybHMgPSBWaWRlb0Jhc2VUZXh0dXJlLmZyb21Vcmw7XG5cbmZ1bmN0aW9uIGNyZWF0ZVNvdXJjZShwYXRoLCB0eXBlKVxue1xuICAgIGlmICghdHlwZSlcbiAgICB7XG4gICAgICAgIHR5cGUgPSAndmlkZW8vJyArIHBhdGguc3Vic3RyKHBhdGgubGFzdEluZGV4T2YoJy4nKSArIDEpO1xuICAgIH1cblxuICAgIHZhciBzb3VyY2UgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzb3VyY2UnKTtcblxuICAgIHNvdXJjZS5zcmMgPSBwYXRoO1xuICAgIHNvdXJjZS50eXBlID0gdHlwZTtcblxuICAgIHJldHVybiBzb3VyY2U7XG59XG4iLCJ2YXIgQ09OU1QgPSByZXF1aXJlKCcuLi9jb25zdCcpLFxuICAgIEV2ZW50RW1pdHRlciA9IHJlcXVpcmUoJ2V2ZW50ZW1pdHRlcjMnKSxcbiAgICAvLyBJbnRlcm5hbCBldmVudCB1c2VkIGJ5IGNvbXBvc2VkIGVtaXR0ZXJcbiAgICBUSUNLID0gJ3RpY2snO1xuXG4vKipcbiAqIEEgVGlja2VyIGNsYXNzIHRoYXQgcnVucyBhbiB1cGRhdGUgbG9vcCB0aGF0IG90aGVyIG9iamVjdHMgbGlzdGVuIHRvLlxuICogVGhpcyBjbGFzcyBpcyBjb21wb3NlZCBhcm91bmQgYW4gRXZlbnRFbWl0dGVyIG9iamVjdCB0byBhZGQgbGlzdGVuZXJzXG4gKiBtZWFudCBmb3IgZXhlY3V0aW9uIG9uIHRoZSBuZXh0IHJlcXVlc3RlZCBhbmltYXRpb24gZnJhbWUuXG4gKiBBbmltYXRpb24gZnJhbWVzIGFyZSByZXF1ZXN0ZWQgb25seSB3aGVuIG5lY2Vzc2FyeSxcbiAqIGUuZy4gV2hlbiB0aGUgdGlja2VyIGlzIHN0YXJ0ZWQgYW5kIHRoZSBlbWl0dGVyIGhhcyBsaXN0ZW5lcnMuXG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSS50aWNrZXJcbiAqL1xuZnVuY3Rpb24gVGlja2VyKClcbntcbiAgICB2YXIgX3RoaXMgPSB0aGlzO1xuXG4gICAgLyoqXG4gICAgICogSW50ZXJuYWwgdGljayBtZXRob2QgYm91bmQgdG8gdGlja2VyIGluc3RhbmNlLlxuICAgICAqIFRoaXMgaXMgYmVjYXVzZSBpbiBlYXJseSAyMDE1LCBGdW5jdGlvbi5iaW5kXG4gICAgICogaXMgc3RpbGwgNjAlIHNsb3dlciBpbiBoaWdoIHBlcmZvcm1hbmNlIHNjZW5hcmlvcy5cbiAgICAgKiBBbHNvIHNlcGFyYXRpbmcgZnJhbWUgcmVxdWVzdHMgZnJvbSB1cGRhdGUgbWV0aG9kXG4gICAgICogc28gbGlzdGVuZXJzIG1heSBiZSBjYWxsZWQgYXQgYW55IHRpbWUgYW5kIHdpdGhcbiAgICAgKiBhbnkgYW5pbWF0aW9uIEFQSSwganVzdCBpbnZva2UgdGlja2VyLnVwZGF0ZSh0aW1lKS5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fdGljayA9IGZ1bmN0aW9uIF90aWNrKHRpbWUpIHtcblxuICAgICAgICBfdGhpcy5fcmVxdWVzdElkID0gbnVsbDtcblxuICAgICAgICBpZiAoX3RoaXMuc3RhcnRlZClcbiAgICAgICAge1xuICAgICAgICAgICAgLy8gSW52b2tlIGxpc3RlbmVycyBub3dcbiAgICAgICAgICAgIF90aGlzLnVwZGF0ZSh0aW1lKTtcbiAgICAgICAgICAgIC8vIExpc3RlbmVyIHNpZGUgZWZmZWN0cyBtYXkgaGF2ZSBtb2RpZmllZCB0aWNrZXIgc3RhdGUuXG4gICAgICAgICAgICBpZiAoX3RoaXMuc3RhcnRlZCAmJiBfdGhpcy5fcmVxdWVzdElkID09PSBudWxsICYmIF90aGlzLl9lbWl0dGVyLmxpc3RlbmVycyhUSUNLLCB0cnVlKSlcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBfdGhpcy5fcmVxdWVzdElkID0gcmVxdWVzdEFuaW1hdGlvbkZyYW1lKF90aGlzLl90aWNrKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH07XG5cbiAgICAvKipcbiAgICAgKiBJbnRlcm5hbCBlbWl0dGVyIHVzZWQgdG8gZmlyZSAndGljaycgZXZlbnRcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX2VtaXR0ZXIgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgICAvKipcbiAgICAgKiBJbnRlcm5hbCBjdXJyZW50IGZyYW1lIHJlcXVlc3QgSURcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX3JlcXVlc3RJZCA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBJbnRlcm5hbCB2YWx1ZSBtYW5hZ2VkIGJ5IG1pbkZQUyBwcm9wZXJ0eSBzZXR0ZXIgYW5kIGdldHRlci5cbiAgICAgKiBUaGlzIGlzIHRoZSBtYXhpbXVtIGFsbG93ZWQgbWlsbGlzZWNvbmRzIGJldHdlZW4gdXBkYXRlcy5cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX21heEVsYXBzZWRNUyA9IDEwMDtcblxuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgb3Igbm90IHRoaXMgdGlja2VyIHNob3VsZCBpbnZva2UgdGhlIG1ldGhvZFxuICAgICAqIHtAbGluayBQSVhJLnRpY2tlci5UaWNrZXIjc3RhcnR9IGF1dG9tYXRpY2FsbHlcbiAgICAgKiB3aGVuIGEgbGlzdGVuZXIgaXMgYWRkZWQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqIEBkZWZhdWx0IGZhbHNlXG4gICAgICovXG4gICAgdGhpcy5hdXRvU3RhcnQgPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIFNjYWxhciB0aW1lIHZhbHVlIGZyb20gbGFzdCBmcmFtZSB0byB0aGlzIGZyYW1lLlxuICAgICAqIFRoaXMgdmFsdWUgaXMgY2FwcGVkIGJ5IHNldHRpbmcge0BsaW5rIFBJWEkudGlja2VyLlRpY2tlciNtaW5GUFN9XG4gICAgICogYW5kIGlzIHNjYWxlZCB3aXRoIHtAbGluayBQSVhJLnRpY2tlci5UaWNrZXIjc3BlZWR9LlxuICAgICAqICoqTm90ZToqKiBUaGUgY2FwIG1heSBiZSBleGNlZWRlZCBieSBzY2FsaW5nLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDFcbiAgICAgKi9cbiAgICB0aGlzLmRlbHRhVGltZSA9IDE7XG5cbiAgICAvKipcbiAgICAgKiBUaW1lIGVsYXBzZWQgaW4gbWlsbGlzZWNvbmRzIGZyb20gbGFzdCBmcmFtZSB0byB0aGlzIGZyYW1lLlxuICAgICAqIE9wcG9zZWQgdG8gd2hhdCB0aGUgc2NhbGFyIHtAbGluayBQSVhJLnRpY2tlci5UaWNrZXIjZGVsdGFUaW1lfVxuICAgICAqIGlzIGJhc2VkLCB0aGlzIHZhbHVlIGlzIG5laXRoZXIgY2FwcGVkIG5vciBzY2FsZWQuXG4gICAgICogSWYgdGhlIHBsYXRmb3JtIHN1cHBvcnRzIERPTUhpZ2hSZXNUaW1lU3RhbXAsXG4gICAgICogdGhpcyB2YWx1ZSB3aWxsIGhhdmUgYSBwcmVjaXNpb24gb2YgMSDCtXMuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtET01IaWdoUmVzVGltZVN0YW1wfG51bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAxIC8gVEFSR0VUX0ZQTVNcbiAgICAgKi9cbiAgICB0aGlzLmVsYXBzZWRNUyA9IDEgLyBDT05TVC5UQVJHRVRfRlBNUzsgLy8gZGVmYXVsdCB0byB0YXJnZXQgZnJhbWUgdGltZVxuXG4gICAgLyoqXG4gICAgICogVGhlIGxhc3QgdGltZSB7QGxpbmsgUElYSS50aWNrZXIuVGlja2VyI3VwZGF0ZX0gd2FzIGludm9rZWQuXG4gICAgICogVGhpcyB2YWx1ZSBpcyBhbHNvIHJlc2V0IGludGVybmFsbHkgb3V0c2lkZSBvZiBpbnZva2luZ1xuICAgICAqIHVwZGF0ZSwgYnV0IG9ubHkgd2hlbiBhIG5ldyBhbmltYXRpb24gZnJhbWUgaXMgcmVxdWVzdGVkLlxuICAgICAqIElmIHRoZSBwbGF0Zm9ybSBzdXBwb3J0cyBET01IaWdoUmVzVGltZVN0YW1wLFxuICAgICAqIHRoaXMgdmFsdWUgd2lsbCBoYXZlIGEgcHJlY2lzaW9uIG9mIDEgwrVzLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7RE9NSGlnaFJlc1RpbWVTdGFtcHxudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMFxuICAgICAqL1xuICAgIHRoaXMubGFzdFRpbWUgPSAwO1xuXG4gICAgLyoqXG4gICAgICogRmFjdG9yIG9mIGN1cnJlbnQge0BsaW5rIFBJWEkudGlja2VyLlRpY2tlciNkZWx0YVRpbWV9LlxuICAgICAqIEBleGFtcGxlXG4gICAgICogLy8gU2NhbGVzIHRpY2tlci5kZWx0YVRpbWUgdG8gd2hhdCB3b3VsZCBiZVxuICAgICAqIC8vIHRoZSBlcXVpdmFsZW50IG9mIGFwcHJveGltYXRlbHkgMTIwIEZQU1xuICAgICAqIHRpY2tlci5zcGVlZCA9IDI7XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMVxuICAgICAqL1xuICAgIHRoaXMuc3BlZWQgPSAxO1xuXG4gICAgLyoqXG4gICAgICogV2hldGhlciBvciBub3QgdGhpcyB0aWNrZXIgaGFzIGJlZW4gc3RhcnRlZC5cbiAgICAgKiBgdHJ1ZWAgaWYge0BsaW5rIFBJWEkudGlja2VyLlRpY2tlciNzdGFydH0gaGFzIGJlZW4gY2FsbGVkLlxuICAgICAqIGBmYWxzZWAgaWYge0BsaW5rIFBJWEkudGlja2VyLlRpY2tlciNzdG9wfSBoYXMgYmVlbiBjYWxsZWQuXG4gICAgICogV2hpbGUgYGZhbHNlYCwgdGhpcyB2YWx1ZSBtYXkgY2hhbmdlIHRvIGB0cnVlYCBpbiB0aGVcbiAgICAgKiBldmVudCBvZiB7QGxpbmsgUElYSS50aWNrZXIuVGlja2VyI2F1dG9TdGFydH0gYmVpbmcgYHRydWVgXG4gICAgICogYW5kIGEgbGlzdGVuZXIgaXMgYWRkZWQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqIEBkZWZhdWx0IGZhbHNlXG4gICAgICovXG4gICAgdGhpcy5zdGFydGVkID0gZmFsc2U7XG59XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKFRpY2tlci5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBUaGUgZnJhbWVzIHBlciBzZWNvbmQgYXQgd2hpY2ggdGhpcyB0aWNrZXIgaXMgcnVubmluZy5cbiAgICAgKiBUaGUgZGVmYXVsdCBpcyBhcHByb3hpbWF0ZWx5IDYwIGluIG1vc3QgbW9kZXJuIGJyb3dzZXJzLlxuICAgICAqICoqTm90ZToqKiBUaGlzIGRvZXMgbm90IGZhY3RvciBpbiB0aGUgdmFsdWUgb2ZcbiAgICAgKiB7QGxpbmsgUElYSS50aWNrZXIuVGlja2VyI3NwZWVkfSwgd2hpY2ggaXMgc3BlY2lmaWNcbiAgICAgKiB0byBzY2FsaW5nIHtAbGluayBQSVhJLnRpY2tlci5UaWNrZXIjZGVsdGFUaW1lfS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXJcbiAgICAgKiBAbWVtYmVyb2YgUElYSS50aWNrZXIuVGlja2VyI1xuICAgICAqIEByZWFkb25seVxuICAgICAqL1xuICAgIEZQUzoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIDEwMDAgLyB0aGlzLmVsYXBzZWRNUztcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBNYW5hZ2VzIHRoZSBtYXhpbXVtIGFtb3VudCBvZiBtaWxsaXNlY29uZHMgYWxsb3dlZCB0b1xuICAgICAqIGVsYXBzZSBiZXR3ZWVuIGludm9raW5nIHtAbGluayBQSVhJLnRpY2tlci5UaWNrZXIjdXBkYXRlfS5cbiAgICAgKiBUaGlzIHZhbHVlIGlzIHVzZWQgdG8gY2FwIHtAbGluayBQSVhJLnRpY2tlci5UaWNrZXIjZGVsdGFUaW1lfSxcbiAgICAgKiBidXQgZG9lcyBub3QgZWZmZWN0IHRoZSBtZWFzdXJlZCB2YWx1ZSBvZiB7QGxpbmsgUElYSS50aWNrZXIuVGlja2VyI0ZQU30uXG4gICAgICogV2hlbiBzZXR0aW5nIHRoaXMgcHJvcGVydHkgaXQgaXMgY2xhbXBlZCB0byBhIHZhbHVlIGJldHdlZW5cbiAgICAgKiBgMGAgYW5kIGBQSVhJLlRBUkdFVF9GUE1TICogMTAwMGAuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyXG4gICAgICogQG1lbWJlcm9mIFBJWEkudGlja2VyLlRpY2tlciNcbiAgICAgKiBAZGVmYXVsdCAxMFxuICAgICAqL1xuICAgIG1pbkZQUzoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIDEwMDAgLyB0aGlzLl9tYXhFbGFwc2VkTVM7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24oZnBzKVxuICAgICAgICB7XG4gICAgICAgICAgICAvLyBDbGFtcDogMCB0byBUQVJHRVRfRlBNU1xuICAgICAgICAgICAgdmFyIG1pbkZQTVMgPSBNYXRoLm1pbihNYXRoLm1heCgwLCBmcHMpIC8gMTAwMCwgQ09OU1QuVEFSR0VUX0ZQTVMpO1xuICAgICAgICAgICAgdGhpcy5fbWF4RWxhcHNlZE1TID0gMSAvIG1pbkZQTVM7XG4gICAgICAgIH1cbiAgICB9XG59KTtcblxuLyoqXG4gKiBDb25kaXRpb25hbGx5IHJlcXVlc3RzIGEgbmV3IGFuaW1hdGlvbiBmcmFtZS5cbiAqIElmIGEgZnJhbWUgaGFzIG5vdCBhbHJlYWR5IGJlZW4gcmVxdWVzdGVkLCBhbmQgaWYgdGhlIGludGVybmFsXG4gKiBlbWl0dGVyIGhhcyBsaXN0ZW5lcnMsIGEgbmV3IGZyYW1lIGlzIHJlcXVlc3RlZC5cbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5UaWNrZXIucHJvdG90eXBlLl9yZXF1ZXN0SWZOZWVkZWQgPSBmdW5jdGlvbiBfcmVxdWVzdElmTmVlZGVkKClcbntcbiAgICBpZiAodGhpcy5fcmVxdWVzdElkID09PSBudWxsICYmIHRoaXMuX2VtaXR0ZXIubGlzdGVuZXJzKFRJQ0ssIHRydWUpKVxuICAgIHtcbiAgICAgICAgLy8gZW5zdXJlIGNhbGxiYWNrcyBnZXQgY29ycmVjdCBkZWx0YVxuICAgICAgICB0aGlzLmxhc3RUaW1lID0gcGVyZm9ybWFuY2Uubm93KCk7XG4gICAgICAgIHRoaXMuX3JlcXVlc3RJZCA9IHJlcXVlc3RBbmltYXRpb25GcmFtZSh0aGlzLl90aWNrKTtcbiAgICB9XG59O1xuXG4vKipcbiAqIENvbmRpdGlvbmFsbHkgY2FuY2VscyBhIHBlbmRpbmcgYW5pbWF0aW9uIGZyYW1lLlxuICpcbiAqIEBwcml2YXRlXG4gKi9cblRpY2tlci5wcm90b3R5cGUuX2NhbmNlbElmTmVlZGVkID0gZnVuY3Rpb24gX2NhbmNlbElmTmVlZGVkKClcbntcbiAgICBpZiAodGhpcy5fcmVxdWVzdElkICE9PSBudWxsKVxuICAgIHtcbiAgICAgICAgY2FuY2VsQW5pbWF0aW9uRnJhbWUodGhpcy5fcmVxdWVzdElkKTtcbiAgICAgICAgdGhpcy5fcmVxdWVzdElkID0gbnVsbDtcbiAgICB9XG59O1xuXG4vKipcbiAqIENvbmRpdGlvbmFsbHkgcmVxdWVzdHMgYSBuZXcgYW5pbWF0aW9uIGZyYW1lLlxuICogSWYgdGhlIHRpY2tlciBoYXMgYmVlbiBzdGFydGVkIGl0IGNoZWNrcyBpZiBhIGZyYW1lIGhhcyBub3QgYWxyZWFkeVxuICogYmVlbiByZXF1ZXN0ZWQsIGFuZCBpZiB0aGUgaW50ZXJuYWwgZW1pdHRlciBoYXMgbGlzdGVuZXJzLiBJZiB0aGVzZVxuICogY29uZGl0aW9ucyBhcmUgbWV0LCBhIG5ldyBmcmFtZSBpcyByZXF1ZXN0ZWQuIElmIHRoZSB0aWNrZXIgaGFzIG5vdFxuICogYmVlbiBzdGFydGVkLCBidXQgYXV0b1N0YXJ0IGlzIGB0cnVlYCwgdGhlbiB0aGUgdGlja2VyIHN0YXJ0cyBub3csXG4gKiBhbmQgY29udGludWVzIHdpdGggdGhlIHByZXZpb3VzIGNvbmRpdGlvbnMgdG8gcmVxdWVzdCBhIG5ldyBmcmFtZS5cbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5UaWNrZXIucHJvdG90eXBlLl9zdGFydElmUG9zc2libGUgPSBmdW5jdGlvbiBfc3RhcnRJZlBvc3NpYmxlKClcbntcbiAgICBpZiAodGhpcy5zdGFydGVkKVxuICAgIHtcbiAgICAgICAgdGhpcy5fcmVxdWVzdElmTmVlZGVkKCk7XG4gICAgfVxuICAgIGVsc2UgaWYgKHRoaXMuYXV0b1N0YXJ0KVxuICAgIHtcbiAgICAgICAgdGhpcy5zdGFydCgpO1xuICAgIH1cbn07XG5cbi8qKlxuICogQ2FsbHMge0BsaW5rIG1vZHVsZTpldmVudGVtaXR0ZXIzLkV2ZW50RW1pdHRlciNvbn0gaW50ZXJuYWxseSBmb3IgdGhlXG4gKiBpbnRlcm5hbCAndGljaycgZXZlbnQuIEl0IGNoZWNrcyBpZiB0aGUgZW1pdHRlciBoYXMgbGlzdGVuZXJzLFxuICogYW5kIGlmIHNvIGl0IHJlcXVlc3RzIGEgbmV3IGFuaW1hdGlvbiBmcmFtZSBhdCB0aGlzIHBvaW50LlxuICpcbiAqIEBwYXJhbSBmbiB7RnVuY3Rpb259IFRoZSBsaXN0ZW5lciBmdW5jdGlvbiB0byBiZSBhZGRlZCBmb3IgdXBkYXRlc1xuICogQHBhcmFtIFtjb250ZXh0XSB7RnVuY3Rpb259IFRoZSBsaXN0ZW5lciBjb250ZXh0XG4gKiBAcmV0dXJucyB7UElYSS50aWNrZXIuVGlja2VyfSB0aGlzXG4gKi9cblRpY2tlci5wcm90b3R5cGUuYWRkID0gZnVuY3Rpb24gYWRkKGZuLCBjb250ZXh0KVxue1xuICAgIHRoaXMuX2VtaXR0ZXIub24oVElDSywgZm4sIGNvbnRleHQpO1xuXG4gICAgdGhpcy5fc3RhcnRJZlBvc3NpYmxlKCk7XG5cbiAgICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogQ2FsbHMge0BsaW5rIG1vZHVsZTpldmVudGVtaXR0ZXIzLkV2ZW50RW1pdHRlciNvbmNlfSBpbnRlcm5hbGx5IGZvciB0aGVcbiAqIGludGVybmFsICd0aWNrJyBldmVudC4gSXQgY2hlY2tzIGlmIHRoZSBlbWl0dGVyIGhhcyBsaXN0ZW5lcnMsXG4gKiBhbmQgaWYgc28gaXQgcmVxdWVzdHMgYSBuZXcgYW5pbWF0aW9uIGZyYW1lIGF0IHRoaXMgcG9pbnQuXG4gKlxuICogQHBhcmFtIGZuIHtGdW5jdGlvbn0gVGhlIGxpc3RlbmVyIGZ1bmN0aW9uIHRvIGJlIGFkZGVkIGZvciBvbmUgdXBkYXRlXG4gKiBAcGFyYW0gW2NvbnRleHRdIHtGdW5jdGlvbn0gVGhlIGxpc3RlbmVyIGNvbnRleHRcbiAqIEByZXR1cm5zIHtQSVhJLnRpY2tlci5UaWNrZXJ9IHRoaXNcbiAqL1xuVGlja2VyLnByb3RvdHlwZS5hZGRPbmNlID0gZnVuY3Rpb24gYWRkT25jZShmbiwgY29udGV4dClcbntcbiAgICB0aGlzLl9lbWl0dGVyLm9uY2UoVElDSywgZm4sIGNvbnRleHQpO1xuXG4gICAgdGhpcy5fc3RhcnRJZlBvc3NpYmxlKCk7XG5cbiAgICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogQ2FsbHMge0BsaW5rIG1vZHVsZTpldmVudGVtaXR0ZXIzLkV2ZW50RW1pdHRlciNvZmZ9IGludGVybmFsbHkgZm9yICd0aWNrJyBldmVudC5cbiAqIEl0IGNoZWNrcyBpZiB0aGUgZW1pdHRlciBoYXMgbGlzdGVuZXJzIGZvciAndGljaycgZXZlbnQuXG4gKiBJZiBpdCBkb2VzLCB0aGVuIGl0IGNhbmNlbHMgdGhlIGFuaW1hdGlvbiBmcmFtZS5cbiAqXG4gKiBAcGFyYW0gW2ZuXSB7RnVuY3Rpb259IFRoZSBsaXN0ZW5lciBmdW5jdGlvbiB0byBiZSByZW1vdmVkXG4gKiBAcGFyYW0gW2NvbnRleHRdIHtGdW5jdGlvbn0gVGhlIGxpc3RlbmVyIGNvbnRleHQgdG8gYmUgcmVtb3ZlZFxuICogQHJldHVybnMge1BJWEkudGlja2VyLlRpY2tlcn0gdGhpc1xuICovXG5UaWNrZXIucHJvdG90eXBlLnJlbW92ZSA9IGZ1bmN0aW9uIHJlbW92ZShmbiwgY29udGV4dClcbntcbiAgICB0aGlzLl9lbWl0dGVyLm9mZihUSUNLLCBmbiwgY29udGV4dCk7XG5cbiAgICBpZiAoIXRoaXMuX2VtaXR0ZXIubGlzdGVuZXJzKFRJQ0ssIHRydWUpKVxuICAgIHtcbiAgICAgICAgdGhpcy5fY2FuY2VsSWZOZWVkZWQoKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogU3RhcnRzIHRoZSB0aWNrZXIuIElmIHRoZSB0aWNrZXIgaGFzIGxpc3RlbmVyc1xuICogYSBuZXcgYW5pbWF0aW9uIGZyYW1lIGlzIHJlcXVlc3RlZCBhdCB0aGlzIHBvaW50LlxuICovXG5UaWNrZXIucHJvdG90eXBlLnN0YXJ0ID0gZnVuY3Rpb24gc3RhcnQoKVxue1xuICAgIGlmICghdGhpcy5zdGFydGVkKVxuICAgIHtcbiAgICAgICAgdGhpcy5zdGFydGVkID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5fcmVxdWVzdElmTmVlZGVkKCk7XG4gICAgfVxufTtcblxuLyoqXG4gKiBTdG9wcyB0aGUgdGlja2VyLiBJZiB0aGUgdGlja2VyIGhhcyByZXF1ZXN0ZWRcbiAqIGFuIGFuaW1hdGlvbiBmcmFtZSBpdCBpcyBjYW5jZWxlZCBhdCB0aGlzIHBvaW50LlxuICovXG5UaWNrZXIucHJvdG90eXBlLnN0b3AgPSBmdW5jdGlvbiBzdG9wKClcbntcbiAgICBpZiAodGhpcy5zdGFydGVkKVxuICAgIHtcbiAgICAgICAgdGhpcy5zdGFydGVkID0gZmFsc2U7XG4gICAgICAgIHRoaXMuX2NhbmNlbElmTmVlZGVkKCk7XG4gICAgfVxufTtcblxuLyoqXG4gKiBUcmlnZ2VycyBhbiB1cGRhdGUuIEFuIHVwZGF0ZSBlbnRhaWxzIHNldHRpbmcgdGhlXG4gKiBjdXJyZW50IHtAbGluayBQSVhJLnRpY2tlci5UaWNrZXIjZWxhcHNlZE1TfSxcbiAqIHRoZSBjdXJyZW50IHtAbGluayBQSVhJLnRpY2tlci5UaWNrZXIjZGVsdGFUaW1lfSxcbiAqIGludm9raW5nIGFsbCBsaXN0ZW5lcnMgd2l0aCBjdXJyZW50IGRlbHRhVGltZSxcbiAqIGFuZCB0aGVuIGZpbmFsbHkgc2V0dGluZyB7QGxpbmsgUElYSS50aWNrZXIuVGlja2VyI2xhc3RUaW1lfVxuICogd2l0aCB0aGUgdmFsdWUgb2YgY3VycmVudFRpbWUgdGhhdCB3YXMgcHJvdmlkZWQuXG4gKiBUaGlzIG1ldGhvZCB3aWxsIGJlIGNhbGxlZCBhdXRvbWF0aWNhbGx5IGJ5IGFuaW1hdGlvblxuICogZnJhbWUgY2FsbGJhY2tzIGlmIHRoZSB0aWNrZXIgaW5zdGFuY2UgaGFzIGJlZW4gc3RhcnRlZFxuICogYW5kIGxpc3RlbmVycyBhcmUgYWRkZWQuXG4gKlxuICogQHBhcmFtIFtjdXJyZW50VGltZT1wZXJmb3JtYW5jZS5ub3coKV0ge0RPTUhpZ2hSZXNUaW1lU3RhbXB8bnVtYmVyfSB0aGUgY3VycmVudCB0aW1lIG9mIGV4ZWN1dGlvblxuICovXG5UaWNrZXIucHJvdG90eXBlLnVwZGF0ZSA9IGZ1bmN0aW9uIHVwZGF0ZShjdXJyZW50VGltZSlcbntcbiAgICB2YXIgZWxhcHNlZE1TO1xuXG4gICAgLy8gQWxsb3cgY2FsbGluZyB1cGRhdGUgZGlyZWN0bHkgd2l0aCBkZWZhdWx0IGN1cnJlbnRUaW1lLlxuICAgIGN1cnJlbnRUaW1lID0gY3VycmVudFRpbWUgfHwgcGVyZm9ybWFuY2Uubm93KCk7XG4gICAgLy8gU2F2ZSB1bmNhcHBlZCBlbGFwc2VkTVMgZm9yIG1lYXN1cmVtZW50XG4gICAgZWxhcHNlZE1TID0gdGhpcy5lbGFwc2VkTVMgPSBjdXJyZW50VGltZSAtIHRoaXMubGFzdFRpbWU7XG5cbiAgICAvLyBjYXAgdGhlIG1pbGxpc2Vjb25kcyBlbGFwc2VkIHVzZWQgZm9yIGRlbHRhVGltZVxuICAgIGlmIChlbGFwc2VkTVMgPiB0aGlzLl9tYXhFbGFwc2VkTVMpXG4gICAge1xuICAgICAgICBlbGFwc2VkTVMgPSB0aGlzLl9tYXhFbGFwc2VkTVM7XG4gICAgfVxuXG4gICAgdGhpcy5kZWx0YVRpbWUgPSBlbGFwc2VkTVMgKiBDT05TVC5UQVJHRVRfRlBNUyAqIHRoaXMuc3BlZWQ7XG5cbiAgICAvLyBJbnZva2UgbGlzdGVuZXJzIGFkZGVkIHRvIGludGVybmFsIGVtaXR0ZXJcbiAgICB0aGlzLl9lbWl0dGVyLmVtaXQoVElDSywgdGhpcy5kZWx0YVRpbWUpO1xuXG4gICAgdGhpcy5sYXN0VGltZSA9IGN1cnJlbnRUaW1lO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBUaWNrZXI7XG4iLCJ2YXIgVGlja2VyID0gcmVxdWlyZSgnLi9UaWNrZXInKTtcblxuLyoqXG4gKiBUaGUgc2hhcmVkIHRpY2tlciBpbnN0YW5jZSB1c2VkIGJ5IHtAbGluayBQSVhJLmV4dHJhcy5Nb3ZpZUNsaXB9LlxuICogYW5kIGJ5IHtAbGluayBQSVhJLmludGVyYWN0aW9uLkludGVyYWN0aW9uTWFuYWdlcn0uXG4gKiBUaGUgcHJvcGVydHkge0BsaW5rIFBJWEkudGlja2VyLlRpY2tlciNhdXRvU3RhcnR9IGlzIHNldCB0byBgdHJ1ZWBcbiAqIGZvciB0aGlzIGluc3RhbmNlLiBQbGVhc2UgZm9sbG93IHRoZSBleGFtcGxlcyBmb3IgdXNhZ2UsIGluY2x1ZGluZ1xuICogaG93IHRvIG9wdC1vdXQgb2YgYXV0by1zdGFydGluZyB0aGUgc2hhcmVkIHRpY2tlci5cbiAqXG4gKiBAZXhhbXBsZVxuICogdmFyIHRpY2tlciA9IFBJWEkudGlja2VyLnNoYXJlZDtcbiAqIC8vIFNldCB0aGlzIHRvIHByZXZlbnQgc3RhcnRpbmcgdGhpcyB0aWNrZXIgd2hlbiBsaXN0ZW5lcnMgYXJlIGFkZGVkLlxuICogLy8gQnkgZGVmYXVsdCB0aGlzIGlzIHRydWUgb25seSBmb3IgdGhlIFBJWEkudGlja2VyLnNoYXJlZCBpbnN0YW5jZS5cbiAqIHRpY2tlci5hdXRvU3RhcnQgPSBmYWxzZTtcbiAqIC8vIEZZSSwgY2FsbCB0aGlzIHRvIGVuc3VyZSB0aGUgdGlja2VyIGlzIHN0b3BwZWQuIEl0IHNob3VsZCBiZSBzdG9wcGVkXG4gKiAvLyBpZiB5b3UgaGF2ZSBub3QgYXR0ZW1wdGVkIHRvIHJlbmRlciBhbnl0aGluZyB5ZXQuXG4gKiB0aWNrZXIuc3RvcCgpO1xuICogLy8gQ2FsbCB0aGlzIHdoZW4geW91IGFyZSByZWFkeSBmb3IgYSBydW5uaW5nIHNoYXJlZCB0aWNrZXIuXG4gKiB0aWNrZXIuc3RhcnQoKTtcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gWW91IG1heSB1c2UgdGhlIHNoYXJlZCB0aWNrZXIgdG8gcmVuZGVyLi4uXG4gKiB2YXIgcmVuZGVyZXIgPSBQSVhJLmF1dG9EZXRlY3RSZW5kZXJlcig4MDAsIDYwMCk7XG4gKiB2YXIgc3RhZ2UgPSBuZXcgUElYSS5Db250YWluZXIoKTtcbiAqIHZhciBpbnRlcmFjdGlvbk1hbmFnZXIgPSBQSVhJLmludGVyYWN0aW9uLkludGVyYWN0aW9uTWFuYWdlcihyZW5kZXJlcik7XG4gKiBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKHJlbmRlcmVyLnZpZXcpO1xuICogdGlja2VyLmFkZChmdW5jdGlvbiAodGltZSkge1xuICogICAgIHJlbmRlcmVyLnJlbmRlcihzdGFnZSk7XG4gKiB9KTtcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gT3IgeW91IGNhbiBqdXN0IHVwZGF0ZSBpdCBtYW51YWxseS5cbiAqIHRpY2tlci5hdXRvU3RhcnQgPSBmYWxzZTtcbiAqIHRpY2tlci5zdG9wKCk7XG4gKiBmdW5jdGlvbiBhbmltYXRlKHRpbWUpIHtcbiAqICAgICB0aWNrZXIudXBkYXRlKHRpbWUpO1xuICogICAgIHJlbmRlcmVyLnJlbmRlcihzdGFnZSk7XG4gKiAgICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKGFuaW1hdGUpO1xuICogfVxuICogYW5pbWF0ZShwZXJmb3JtYW5jZS5ub3coKSk7XG4gKlxuICogQHR5cGUge1BJWEkudGlja2VyLlRpY2tlcn1cbiAqIEBtZW1iZXJvZiBQSVhJLnRpY2tlclxuICovXG52YXIgc2hhcmVkID0gbmV3IFRpY2tlcigpO1xuc2hhcmVkLmF1dG9TdGFydCA9IHRydWU7XG5cbi8qKlxuICogQG5hbWVzcGFjZSBQSVhJLnRpY2tlclxuICovXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgICBzaGFyZWQ6IHNoYXJlZCxcbiAgICBUaWNrZXI6IFRpY2tlclxufTtcbiIsIi8qKlxuICogR2VuZXJpYyBNYXNrIFN0YWNrIGRhdGEgc3RydWN0dXJlXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKi9cblxudmFyIEdMX01BUCA9IHt9O1xuXG5cbnZhciBjcmVhdGVJbmRpY2VzRm9yUXVhZHMgPSBmdW5jdGlvbiAoc2l6ZSlcbntcbiAgICAvLyB0aGUgdG90YWwgbnVtYmVyIG9mIGluZGljZXMgaW4gb3VyIGFycmF5LCB0aGVyZSBhcmUgNiBwb2ludHMgcGVyIHF1YWQuXG4gICBcbiAgICB2YXIgdG90YWxJbmRpY2VzID0gc2l6ZSAqIDY7XG5cbiAgICB2YXIgaW5kaWNlcyA9IG5ldyBVaW50MTZBcnJheSh0b3RhbEluZGljZXMpO1xuXG5cdC8vIGZpbGwgdGhlIGluZGljZXMgd2l0aCB0aGUgcXVhZHMgdG8gZHJhd1xuICAgIGZvciAodmFyIGk9MCwgaj0wOyBpIDwgdG90YWxJbmRpY2VzOyBpICs9IDYsIGogKz0gNClcbiAgICB7XG4gICAgICAgIGluZGljZXNbaSArIDBdID0gaiArIDA7XG4gICAgICAgIGluZGljZXNbaSArIDFdID0gaiArIDE7XG4gICAgICAgIGluZGljZXNbaSArIDJdID0gaiArIDI7XG4gICAgICAgIGluZGljZXNbaSArIDNdID0gaiArIDA7XG4gICAgICAgIGluZGljZXNbaSArIDRdID0gaiArIDI7XG4gICAgICAgIGluZGljZXNbaSArIDVdID0gaiArIDM7XG4gICAgfVxuXG4gICAgcmV0dXJuIGluZGljZXM7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGNyZWF0ZUluZGljZXNGb3JRdWFkczsiLCJ2YXIgQ09OU1QgPSByZXF1aXJlKCcuLi9jb25zdCcpO1xuXG4vKipcbiAqIEBuYW1lc3BhY2UgUElYSS51dGlsc1xuICovXG52YXIgdXRpbHMgPSBtb2R1bGUuZXhwb3J0cyA9IHtcbiAgICBfdWlkOiAwLFxuICAgIF9zYWlkSGVsbG86IGZhbHNlLFxuXG4gICAgRXZlbnRFbWl0dGVyOiAgIHJlcXVpcmUoJ2V2ZW50ZW1pdHRlcjMnKSxcbiAgICBwbHVnaW5UYXJnZXQ6ICAgcmVxdWlyZSgnLi9wbHVnaW5UYXJnZXQnKSxcbiAgICBhc3luYzogICAgICAgICAgcmVxdWlyZSgnYXN5bmMnKSxcblxuICAgIC8qKlxuICAgICAqIEdldHMgdGhlIG5leHQgdW5pcXVlIGlkZW50aWZpZXJcbiAgICAgKlxuICAgICAqIEByZXR1cm4ge251bWJlcn0gVGhlIG5leHQgdW5pcXVlIGlkZW50aWZpZXIgdG8gdXNlLlxuICAgICAqL1xuICAgIHVpZDogZnVuY3Rpb24gKClcbiAgICB7XG4gICAgICAgIHJldHVybiArK3V0aWxzLl91aWQ7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIENvbnZlcnRzIGEgaGV4IGNvbG9yIG51bWJlciB0byBhbiBbUiwgRywgQl0gYXJyYXlcbiAgICAgKlxuICAgICAqIEBwYXJhbSBoZXgge251bWJlcn1cbiAgICAgKiBAcGFyYW0gIHtudW1iZXJbXX0gW291dD1bXV1cbiAgICAgKiBAcmV0dXJuIHtudW1iZXJbXX0gQW4gYXJyYXkgcmVwcmVzZW50aW5nIHRoZSBbUiwgRywgQl0gb2YgdGhlIGNvbG9yLlxuICAgICAqL1xuICAgIGhleDJyZ2I6IGZ1bmN0aW9uIChoZXgsIG91dClcbiAgICB7XG4gICAgICAgIG91dCA9IG91dCB8fCBbXTtcblxuICAgICAgICBvdXRbMF0gPSAoaGV4ID4+IDE2ICYgMHhGRikgLyAyNTU7XG4gICAgICAgIG91dFsxXSA9IChoZXggPj4gOCAmIDB4RkYpIC8gMjU1O1xuICAgICAgICBvdXRbMl0gPSAoaGV4ICYgMHhGRikgLyAyNTU7XG5cbiAgICAgICAgcmV0dXJuIG91dDtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQ29udmVydHMgYSBoZXggY29sb3IgbnVtYmVyIHRvIGEgc3RyaW5nLlxuICAgICAqXG4gICAgICogQHBhcmFtIGhleCB7bnVtYmVyfVxuICAgICAqIEByZXR1cm4ge3N0cmluZ30gVGhlIHN0cmluZyBjb2xvci5cbiAgICAgKi9cbiAgICBoZXgyc3RyaW5nOiBmdW5jdGlvbiAoaGV4KVxuICAgIHtcbiAgICAgICAgaGV4ID0gaGV4LnRvU3RyaW5nKDE2KTtcbiAgICAgICAgaGV4ID0gJzAwMDAwMCcuc3Vic3RyKDAsIDYgLSBoZXgubGVuZ3RoKSArIGhleDtcblxuICAgICAgICByZXR1cm4gJyMnICsgaGV4O1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBDb252ZXJ0cyBhIGNvbG9yIGFzIGFuIFtSLCBHLCBCXSBhcnJheSB0byBhIGhleCBudW1iZXJcbiAgICAgKlxuICAgICAqIEBwYXJhbSByZ2Ige251bWJlcltdfVxuICAgICAqIEByZXR1cm4ge251bWJlcn0gVGhlIGNvbG9yIG51bWJlclxuICAgICAqL1xuICAgIHJnYjJoZXg6IGZ1bmN0aW9uIChyZ2IpXG4gICAge1xuICAgICAgICByZXR1cm4gKChyZ2JbMF0qMjU1IDw8IDE2KSArIChyZ2JbMV0qMjU1IDw8IDgpICsgcmdiWzJdKjI1NSk7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIENoZWNrcyB3aGV0aGVyIHRoZSBDYW52YXMgQmxlbmRNb2RlcyBhcmUgc3VwcG9ydGVkIGJ5IHRoZSBjdXJyZW50IGJyb3dzZXJcbiAgICAgKlxuICAgICAqIEByZXR1cm4ge2Jvb2xlYW59IHdoZXRoZXIgdGhleSBhcmUgc3VwcG9ydGVkXG4gICAgICovXG4gICAgY2FuVXNlTmV3Q2FudmFzQmxlbmRNb2RlczogZnVuY3Rpb24gKClcbiAgICB7XG4gICAgICAgIGlmICh0eXBlb2YgZG9jdW1lbnQgPT09ICd1bmRlZmluZWQnKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgcG5nSGVhZCA9ICdkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQUFRQUFBQUJBUU1BQUFERDhwMk9BQUFBQTFCTVZFWC8nO1xuICAgICAgICB2YXIgcG5nRW5kID0gJ0FBQUFDa2xFUVZRSTEyTmdBQUFBQWdBQjRpRzhNd0FBQUFCSlJVNUVya0pnZ2c9PSc7XG5cbiAgICAgICAgdmFyIG1hZ2VudGEgPSBuZXcgSW1hZ2UoKTtcbiAgICAgICAgbWFnZW50YS5zcmMgPSBwbmdIZWFkICsgJ0FQODA0T2E2JyArIHBuZ0VuZDtcblxuICAgICAgICB2YXIgeWVsbG93ID0gbmV3IEltYWdlKCk7XG4gICAgICAgIHllbGxvdy5zcmMgPSBwbmdIZWFkICsgJy93Q0t4dlJGJyArIHBuZ0VuZDtcblxuICAgICAgICB2YXIgY2FudmFzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnY2FudmFzJyk7XG4gICAgICAgIGNhbnZhcy53aWR0aCA9IDY7XG4gICAgICAgIGNhbnZhcy5oZWlnaHQgPSAxO1xuXG4gICAgICAgIHZhciBjb250ZXh0ID0gY2FudmFzLmdldENvbnRleHQoJzJkJyk7XG4gICAgICAgIGNvbnRleHQuZ2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uID0gJ211bHRpcGx5JztcbiAgICAgICAgY29udGV4dC5kcmF3SW1hZ2UobWFnZW50YSwgMCwgMCk7XG4gICAgICAgIGNvbnRleHQuZHJhd0ltYWdlKHllbGxvdywgMiwgMCk7XG5cbiAgICAgICAgdmFyIGRhdGEgPSBjb250ZXh0LmdldEltYWdlRGF0YSgyLDAsMSwxKS5kYXRhO1xuXG4gICAgICAgIHJldHVybiAoZGF0YVswXSA9PT0gMjU1ICYmIGRhdGFbMV0gPT09IDAgJiYgZGF0YVsyXSA9PT0gMCk7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIEdpdmVuIGEgbnVtYmVyLCB0aGlzIGZ1bmN0aW9uIHJldHVybnMgdGhlIGNsb3Nlc3QgbnVtYmVyIHRoYXQgaXMgYSBwb3dlciBvZiB0d29cbiAgICAgKiB0aGlzIGZ1bmN0aW9uIGlzIHRha2VuIGZyb20gU3RhcmxpbmcgRnJhbWV3b3JrIGFzIGl0cyBwcmV0dHkgbmVhdCA7KVxuICAgICAqXG4gICAgICogQHBhcmFtIG51bWJlciB7bnVtYmVyfVxuICAgICAqIEByZXR1cm4ge251bWJlcn0gdGhlIGNsb3Nlc3QgbnVtYmVyIHRoYXQgaXMgYSBwb3dlciBvZiB0d29cbiAgICAgKi9cbiAgICBnZXROZXh0UG93ZXJPZlR3bzogZnVuY3Rpb24gKG51bWJlcilcbiAgICB7XG4gICAgICAgIC8vIHNlZTogaHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9Qb3dlcl9vZl90d28jRmFzdF9hbGdvcml0aG1fdG9fY2hlY2tfaWZfYV9wb3NpdGl2ZV9udW1iZXJfaXNfYV9wb3dlcl9vZl90d29cbiAgICAgICAgaWYgKG51bWJlciA+IDAgJiYgKG51bWJlciAmIChudW1iZXIgLSAxKSkgPT09IDApXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiBudW1iZXI7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgICB2YXIgcmVzdWx0ID0gMTtcblxuICAgICAgICAgICAgd2hpbGUgKHJlc3VsdCA8IG51bWJlcilcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICByZXN1bHQgPDw9IDE7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogY2hlY2tzIGlmIHRoZSBnaXZlbiB3aWR0aCBhbmQgaGVpZ2h0IG1ha2UgYSBwb3dlciBvZiB0d28gcmVjdGFuZ2xlXG4gICAgICpcbiAgICAgKiBAcGFyYW0gd2lkdGgge251bWJlcn1cbiAgICAgKiBAcGFyYW0gaGVpZ2h0IHtudW1iZXJ9XG4gICAgICogQHJldHVybiB7Ym9vbGVhbn1cbiAgICAgKi9cbiAgICBpc1Bvd2VyT2ZUd286IGZ1bmN0aW9uICh3aWR0aCwgaGVpZ2h0KVxuICAgIHtcbiAgICAgICAgcmV0dXJuICh3aWR0aCA+IDAgJiYgKHdpZHRoICYgKHdpZHRoIC0gMSkpID09PSAwICYmIGhlaWdodCA+IDAgJiYgKGhlaWdodCAmIChoZWlnaHQgLSAxKSkgPT09IDApO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBnZXQgdGhlIHJlc29sdXRpb24gb2YgYW4gYXNzZXQgYnkgbG9va2luZyBmb3IgdGhlIHByZWZpeFxuICAgICAqIHVzZWQgYnkgc3ByaXRlc2hlZXRzIGFuZCBpbWFnZSB1cmxzXG4gICAgICpcbiAgICAgKiBAcGFyYW0gdXJsIHtzdHJpbmd9IHRoZSBpbWFnZSBwYXRoXG4gICAgICogQHJldHVybiB7bnVtYmVyfVxuICAgICAqL1xuICAgIGdldFJlc29sdXRpb25PZlVybDogZnVuY3Rpb24gKHVybClcbiAgICB7XG4gICAgICAgIHZhciByZXNvbHV0aW9uID0gQ09OU1QuUkVUSU5BX1BSRUZJWC5leGVjKHVybCk7XG5cbiAgICAgICAgaWYgKHJlc29sdXRpb24pXG4gICAgICAgIHtcbiAgICAgICAgICAgcmV0dXJuIHBhcnNlRmxvYXQocmVzb2x1dGlvblsxXSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gMTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogTG9ncyBvdXQgdGhlIHZlcnNpb24gYW5kIHJlbmRlcmVyIGluZm9ybWF0aW9uIGZvciB0aGlzIHJ1bm5pbmcgaW5zdGFuY2Ugb2YgUElYSS5cbiAgICAgKiBJZiB5b3UgZG9uJ3Qgd2FudCB0byBzZWUgdGhpcyBtZXNzYWdlIHlvdSBjYW4gc2V0IGBQSVhJLnV0aWxzLl9zYWlkSGVsbG8gPSB0cnVlO2BcbiAgICAgKiBzbyB0aGUgbGlicmFyeSB0aGlua3MgaXQgYWxyZWFkeSBzYWlkIGl0LiBLZWVwIGluIG1pbmQgdGhhdCBkb2luZyB0aGF0IHdpbGwgZm9yZXZlclxuICAgICAqIG1ha2VzIHlvdSBhIGplcmsgZmFjZS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSB0eXBlIC0gVGhlIHN0cmluZyByZW5kZXJlciB0eXBlIHRvIGxvZy5cbiAgICAgKiBAY29uc3RhbnRcbiAgICAgKiBAc3RhdGljXG4gICAgICovXG4gICAgc2F5SGVsbG86IGZ1bmN0aW9uICh0eXBlKVxuICAgIHtcbiAgICAgICAgaWYgKHV0aWxzLl9zYWlkSGVsbG8pXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChuYXZpZ2F0b3IudXNlckFnZW50LnRvTG93ZXJDYXNlKCkuaW5kZXhPZignY2hyb21lJykgPiAtMSlcbiAgICAgICAge1xuICAgICAgICAgICAgdmFyIGFyZ3MgPSBbXG4gICAgICAgICAgICAgICAgJ1xcbiAlYyAlYyAlYyBQaXhpLmpzICcgKyBDT05TVC5WRVJTSU9OICsgJyAtIOKcsCAnICsgdHlwZSArICcg4pywICAlYyAnICsgJyAlYyAnICsgJyBodHRwOi8vd3d3LnBpeGlqcy5jb20vICAlYyAlYyDimaUlY+KZpSVj4pmlIFxcblxcbicsXG4gICAgICAgICAgICAgICAgJ2JhY2tncm91bmQ6ICNmZjY2YTU7IHBhZGRpbmc6NXB4IDA7JyxcbiAgICAgICAgICAgICAgICAnYmFja2dyb3VuZDogI2ZmNjZhNTsgcGFkZGluZzo1cHggMDsnLFxuICAgICAgICAgICAgICAgICdjb2xvcjogI2ZmNjZhNTsgYmFja2dyb3VuZDogIzAzMDMwNzsgcGFkZGluZzo1cHggMDsnLFxuICAgICAgICAgICAgICAgICdiYWNrZ3JvdW5kOiAjZmY2NmE1OyBwYWRkaW5nOjVweCAwOycsXG4gICAgICAgICAgICAgICAgJ2JhY2tncm91bmQ6ICNmZmMzZGM7IHBhZGRpbmc6NXB4IDA7JyxcbiAgICAgICAgICAgICAgICAnYmFja2dyb3VuZDogI2ZmNjZhNTsgcGFkZGluZzo1cHggMDsnLFxuICAgICAgICAgICAgICAgICdjb2xvcjogI2ZmMjQyNDsgYmFja2dyb3VuZDogI2ZmZjsgcGFkZGluZzo1cHggMDsnLFxuICAgICAgICAgICAgICAgICdjb2xvcjogI2ZmMjQyNDsgYmFja2dyb3VuZDogI2ZmZjsgcGFkZGluZzo1cHggMDsnLFxuICAgICAgICAgICAgICAgICdjb2xvcjogI2ZmMjQyNDsgYmFja2dyb3VuZDogI2ZmZjsgcGFkZGluZzo1cHggMDsnXG4gICAgICAgICAgICBdO1xuXG4gICAgICAgICAgICB3aW5kb3cuY29uc29sZS5sb2cuYXBwbHkoY29uc29sZSwgYXJncyk7IC8vanNoaW50IGlnbm9yZTpsaW5lXG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAod2luZG93LmNvbnNvbGUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHdpbmRvdy5jb25zb2xlLmxvZygnUGl4aS5qcyAnICsgQ09OU1QuVkVSU0lPTiArICcgLSAnICsgdHlwZSArICcgLSBodHRwOi8vd3d3LnBpeGlqcy5jb20vJyk7IC8vanNoaW50IGlnbm9yZTpsaW5lXG4gICAgICAgIH1cblxuICAgICAgICB1dGlscy5fc2FpZEhlbGxvID0gdHJ1ZTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogSGVscGVyIGZvciBjaGVja2luZyBmb3Igd2ViZ2wgc3VwcG9ydFxuICAgICAqXG4gICAgICogQHJldHVybiB7Ym9vbGVhbn1cbiAgICAgKi9cbiAgICBpc1dlYkdMU3VwcG9ydGVkOiBmdW5jdGlvbiAoKVxuICAgIHtcbiAgICAgICAgdmFyIGNvbnRleHRPcHRpb25zID0geyBzdGVuY2lsOiB0cnVlIH07XG4gICAgICAgIHRyeVxuICAgICAgICB7XG4gICAgICAgICAgICBpZiAoIXdpbmRvdy5XZWJHTFJlbmRlcmluZ0NvbnRleHQpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB2YXIgY2FudmFzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnY2FudmFzJyksXG4gICAgICAgICAgICAgICAgZ2wgPSBjYW52YXMuZ2V0Q29udGV4dCgnd2ViZ2wnLCBjb250ZXh0T3B0aW9ucykgfHwgY2FudmFzLmdldENvbnRleHQoJ2V4cGVyaW1lbnRhbC13ZWJnbCcsIGNvbnRleHRPcHRpb25zKTtcblxuICAgICAgICAgICAgcmV0dXJuICEhKGdsICYmIGdsLmdldENvbnRleHRBdHRyaWJ1dGVzKCkuc3RlbmNpbCk7XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHNpZ24gb2YgbnVtYmVyXG4gICAgICpcbiAgICAgKiBAcGFyYW0gbiB7bnVtYmVyfVxuICAgICAqIEByZXR1cm5zIHtudW1iZXJ9IDAgaWYgbiBpcyAwLCAtMSBpZiBuIGlzIG5lZ2F0aXZlLCAxIGlmIG4gaSBwb3NpdGl2ZVxuICAgICAqL1xuICAgIHNpZ246IGZ1bmN0aW9uIChuKVxuICAgIHtcbiAgICAgICAgcmV0dXJuIG4gPyAobiA8IDAgPyAtMSA6IDEpIDogMDtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogcmVtb3ZlSXRlbXNcbiAgICAgKlxuICAgICAqIEBwYXJhbSB7YXJyYXl9IGFyciBUaGUgdGFyZ2V0IGFycmF5XG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHN0YXJ0SWR4IFRoZSBpbmRleCB0byBiZWdpbiByZW1vdmluZyBmcm9tIChpbmNsdXNpdmUpXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHJlbW92ZUNvdW50IEhvdyBtYW55IGl0ZW1zIHRvIHJlbW92ZVxuICAgICAqL1xuICAgIHJlbW92ZUl0ZW1zOiBmdW5jdGlvbiAoYXJyLCBzdGFydElkeCwgcmVtb3ZlQ291bnQpXG4gICAge1xuICAgICAgICB2YXIgbGVuZ3RoID0gYXJyLmxlbmd0aDtcblxuICAgICAgICBpZiAoc3RhcnRJZHggPj0gbGVuZ3RoIHx8IHJlbW92ZUNvdW50ID09PSAwKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICByZW1vdmVDb3VudCA9IChzdGFydElkeCtyZW1vdmVDb3VudCA+IGxlbmd0aCA/IGxlbmd0aC1zdGFydElkeCA6IHJlbW92ZUNvdW50KTtcbiAgICAgICAgZm9yICh2YXIgaSA9IHN0YXJ0SWR4LCBsZW4gPSBsZW5ndGgtcmVtb3ZlQ291bnQ7IGkgPCBsZW47ICsraSlcbiAgICAgICAge1xuICAgICAgICAgICAgYXJyW2ldID0gYXJyW2kgKyByZW1vdmVDb3VudF07XG4gICAgICAgIH1cblxuICAgICAgICBhcnIubGVuZ3RoID0gbGVuO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBAdG9kbyBEZXNjcmliZSBwcm9wZXJ0eSB1c2FnZVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgVGV4dHVyZUNhY2hlOiB7fSxcblxuICAgIC8qKlxuICAgICAqIEB0b2RvIERlc2NyaWJlIHByb3BlcnR5IHVzYWdlXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICBCYXNlVGV4dHVyZUNhY2hlOiB7fVxufTtcbiIsIi8qKlxuICogTWl4aW5zIGZ1bmN0aW9uYWxpdHkgdG8gbWFrZSBhbiBvYmplY3QgaGF2ZSBcInBsdWdpbnNcIi5cbiAqXG4gKiBAbWl4aW5cbiAqIEBtZW1iZXJvZiBQSVhJLnV0aWxzXG4gKiBAcGFyYW0gb2JqIHtvYmplY3R9IFRoZSBvYmplY3QgdG8gbWl4IGludG8uXG4gKiBAZXhhbXBsZVxuICogICAgICBmdW5jdGlvbiBNeU9iamVjdCgpIHt9XG4gKlxuICogICAgICBwbHVnaW5UYXJnZXQubWl4aW4oTXlPYmplY3QpO1xuICovXG5mdW5jdGlvbiBwbHVnaW5UYXJnZXQob2JqKVxue1xuICAgIG9iai5fX3BsdWdpbnMgPSB7fTtcblxuICAgIC8qKlxuICAgICAqIEFkZHMgYSBwbHVnaW4gdG8gYW4gb2JqZWN0XG4gICAgICpcbiAgICAgKiBAcGFyYW0gcGx1Z2luTmFtZSB7c3RyaW5nfSBUaGUgZXZlbnRzIHRoYXQgc2hvdWxkIGJlIGxpc3RlZC5cbiAgICAgKiBAcGFyYW0gY3RvciB7RnVuY3Rpb259IFRoZSBjb25zdHJ1Y3RvciBmdW5jdGlvbiBmb3IgdGhlIHBsdWdpbi5cbiAgICAgKi9cbiAgICBvYmoucmVnaXN0ZXJQbHVnaW4gPSBmdW5jdGlvbiAocGx1Z2luTmFtZSwgY3RvcilcbiAgICB7XG4gICAgICAgIG9iai5fX3BsdWdpbnNbcGx1Z2luTmFtZV0gPSBjdG9yO1xuICAgIH07XG5cbiAgICAvKipcbiAgICAgKiBJbnN0YW50aWF0ZXMgYWxsIHRoZSBwbHVnaW5zIG9mIHRoaXMgb2JqZWN0XG4gICAgICpcbiAgICAgKi9cbiAgICBvYmoucHJvdG90eXBlLmluaXRQbHVnaW5zID0gZnVuY3Rpb24gKClcbiAgICB7XG4gICAgICAgIHRoaXMucGx1Z2lucyA9IHRoaXMucGx1Z2lucyB8fCB7fTtcblxuICAgICAgICBmb3IgKHZhciBvIGluIG9iai5fX3BsdWdpbnMpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMucGx1Z2luc1tvXSA9IG5ldyAob2JqLl9fcGx1Z2luc1tvXSkodGhpcyk7XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgLyoqXG4gICAgICogUmVtb3ZlcyBhbGwgdGhlIHBsdWdpbnMgb2YgdGhpcyBvYmplY3RcbiAgICAgKlxuICAgICAqL1xuICAgIG9iai5wcm90b3R5cGUuZGVzdHJveVBsdWdpbnMgPSBmdW5jdGlvbiAoKVxuICAgIHtcbiAgICAgICAgZm9yICh2YXIgbyBpbiB0aGlzLnBsdWdpbnMpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMucGx1Z2luc1tvXS5kZXN0cm95KCk7XG4gICAgICAgICAgICB0aGlzLnBsdWdpbnNbb10gPSBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5wbHVnaW5zID0gbnVsbDtcbiAgICB9O1xufVxuXG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICAgIC8qKlxuICAgICAqIE1peGVzIGluIHRoZSBwcm9wZXJ0aWVzIG9mIHRoZSBwbHVnaW5UYXJnZXQgaW50byBhbm90aGVyIG9iamVjdFxuICAgICAqXG4gICAgICogQHBhcmFtIG9iamVjdCB7b2JqZWN0fSBUaGUgb2JqIHRvIG1peCBpbnRvXG4gICAgICovXG4gICAgbWl4aW46IGZ1bmN0aW9uIG1peGluKG9iailcbiAgICB7XG4gICAgICAgIHBsdWdpblRhcmdldChvYmopO1xuICAgIH1cbn07XG4iLCIvKmdsb2JhbCBjb25zb2xlICovXG52YXIgY29yZSA9IHJlcXVpcmUoJy4vY29yZScpLFxuICAgIG1lc2ggPSByZXF1aXJlKCcuL21lc2gnKSxcbiAgICBleHRyYXMgPSByZXF1aXJlKCcuL2V4dHJhcycpLFxuICAgIGZpbHRlcnMgPSByZXF1aXJlKCcuL2ZpbHRlcnMnKTtcblxuLyoqXG4gKiBAY2xhc3NcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBTcHJpdGVCYXRjaFxuICogQG1lbWJlcm9mIFBJWElcbiAqIEBzZWUgUElYSS5QYXJ0aWNsZUNvbnRhaW5lclxuICogQHRocm93cyB7UmVmZXJlbmNlRXJyb3J9IFNwcml0ZUJhdGNoIGRvZXMgbm90IGV4aXN0IGFueSBtb3JlLCBwbGVhc2UgdXNlIHRoZSBuZXcgUGFydGljbGVDb250YWluZXIgaW5zdGVhZC5cbiAqIEBkZXByZWNhdGVkIHNpbmNlIHZlcnNpb24gMy4wLjBcbiAqL1xuY29yZS5TcHJpdGVCYXRjaCA9IGZ1bmN0aW9uKClcbntcbiAgICB0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoJ1Nwcml0ZUJhdGNoIGRvZXMgbm90IGV4aXN0IGFueSBtb3JlLCBwbGVhc2UgdXNlIHRoZSBuZXcgUGFydGljbGVDb250YWluZXIgaW5zdGVhZC4nKTtcbn07XG5cbi8qKlxuICogQGNsYXNzXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgQXNzZXRMb2FkZXJcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAc2VlIFBJWEkubG9hZGVycy5Mb2FkZXJcbiAqIEB0aHJvd3Mge1JlZmVyZW5jZUVycm9yfSBUaGUgbG9hZGVyIHN5c3RlbSB3YXMgb3ZlcmhhdWxlZCBpbiBwaXhpIHYzLCBwbGVhc2Ugc2VlIHRoZSBuZXcgUElYSS5sb2FkZXJzLkxvYWRlciBjbGFzcy5cbiAqIEBkZXByZWNhdGVkIHNpbmNlIHZlcnNpb24gMy4wLjBcbiAqL1xuY29yZS5Bc3NldExvYWRlciA9IGZ1bmN0aW9uKClcbntcbiAgICB0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoJ1RoZSBsb2FkZXIgc3lzdGVtIHdhcyBvdmVyaGF1bGVkIGluIHBpeGkgdjMsIHBsZWFzZSBzZWUgdGhlIG5ldyBQSVhJLmxvYWRlcnMuTG9hZGVyIGNsYXNzLicpO1xufTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoY29yZSwge1xuXG4gICAgLyoqXG4gICAgICogQGNsYXNzXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAbmFtZSBTdGFnZVxuICAgICAqIEBtZW1iZXJvZiBQSVhJXG4gICAgICogQHNlZSBQSVhJLkNvbnRhaW5lclxuICAgICAqIEBkZXByZWNhdGVkIHNpbmNlIHZlcnNpb24gMy4wLjBcbiAgICAgKi9cbiAgICBTdGFnZToge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uKClcbiAgICAgICAge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKCdZb3UgZG8gbm90IG5lZWQgdG8gdXNlIGEgUElYSSBTdGFnZSBhbnkgbW9yZSwgeW91IGNhbiBzaW1wbHkgcmVuZGVyIGFueSBjb250YWluZXIuJyk7XG4gICAgICAgICAgICByZXR1cm4gY29yZS5Db250YWluZXI7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQGNsYXNzXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAbmFtZSBEaXNwbGF5T2JqZWN0Q29udGFpbmVyXG4gICAgICogQG1lbWJlcm9mIFBJWElcbiAgICAgKiBAc2VlIFBJWEkuQ29udGFpbmVyXG4gICAgICogQGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiAzLjAuMFxuICAgICAqL1xuICAgIERpc3BsYXlPYmplY3RDb250YWluZXI6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbigpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignRGlzcGxheU9iamVjdENvbnRhaW5lciBoYXMgYmVlbiBzaG9ydGVuZWQgdG8gQ29udGFpbmVyLCBwbGVhc2UgdXNlIENvbnRhaW5lciBmcm9tIG5vdyBvbi4nKTtcbiAgICAgICAgICAgIHJldHVybiBjb3JlLkNvbnRhaW5lcjtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBAY2xhc3NcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBuYW1lIFN0cmlwXG4gICAgICogQG1lbWJlcm9mIFBJWElcbiAgICAgKiBAc2VlIFBJWEkubWVzaC5NZXNoXG4gICAgICogQGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiAzLjAuMFxuICAgICAqL1xuICAgIFN0cmlwOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24oKVxuICAgICAgICB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ1RoZSBTdHJpcCBjbGFzcyBoYXMgYmVlbiByZW5hbWVkIHRvIE1lc2ggYW5kIG1vdmVkIHRvIG1lc2guTWVzaCwgcGxlYXNlIHVzZSBtZXNoLk1lc2ggZnJvbSBub3cgb24uJyk7XG4gICAgICAgICAgICByZXR1cm4gbWVzaC5NZXNoO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIEBjbGFzc1xuICAgICAqIEBwcml2YXRlXG4gICAgICogQG5hbWUgUm9wZVxuICAgICAqIEBtZW1iZXJvZiBQSVhJXG4gICAgICogQHNlZSBQSVhJLm1lc2guUm9wZVxuICAgICAqIEBkZXByZWNhdGVkIHNpbmNlIHZlcnNpb24gMy4wLjBcbiAgICAgKi9cbiAgICBSb3BlOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24oKVxuICAgICAgICB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ1RoZSBSb3BlIGNsYXNzIGhhcyBiZWVuIG1vdmVkIHRvIG1lc2guUm9wZSwgcGxlYXNlIHVzZSBtZXNoLlJvcGUgZnJvbSBub3cgb24uJyk7XG4gICAgICAgICAgICByZXR1cm4gbWVzaC5Sb3BlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIEBjbGFzc1xuICAgICAqIEBwcml2YXRlXG4gICAgICogQG5hbWUgTW92aWVDbGlwXG4gICAgICogQG1lbWJlcm9mIFBJWElcbiAgICAgKiBAc2VlIFBJWEkuZXh0cmFzLk1vdmllQ2xpcFxuICAgICAqIEBkZXByZWNhdGVkIHNpbmNlIHZlcnNpb24gMy4wLjBcbiAgICAgKi9cbiAgICBNb3ZpZUNsaXA6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbigpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignVGhlIE1vdmllQ2xpcCBjbGFzcyBoYXMgYmVlbiBtb3ZlZCB0byBleHRyYXMuTW92aWVDbGlwLCBwbGVhc2UgdXNlIGV4dHJhcy5Nb3ZpZUNsaXAgZnJvbSBub3cgb24uJyk7XG4gICAgICAgICAgICByZXR1cm4gZXh0cmFzLk1vdmllQ2xpcDtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBAY2xhc3NcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBuYW1lIFRpbGluZ1Nwcml0ZVxuICAgICAqIEBtZW1iZXJvZiBQSVhJXG4gICAgICogQHNlZSBQSVhJLmV4dHJhcy5UaWxpbmdTcHJpdGVcbiAgICAgKiBAZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDMuMC4wXG4gICAgICovXG4gICAgVGlsaW5nU3ByaXRlOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24oKVxuICAgICAgICB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ1RoZSBUaWxpbmdTcHJpdGUgY2xhc3MgaGFzIGJlZW4gbW92ZWQgdG8gZXh0cmFzLlRpbGluZ1Nwcml0ZSwgcGxlYXNlIHVzZSBleHRyYXMuVGlsaW5nU3ByaXRlIGZyb20gbm93IG9uLicpO1xuICAgICAgICAgICAgcmV0dXJuIGV4dHJhcy5UaWxpbmdTcHJpdGU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQGNsYXNzXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAbmFtZSBCaXRtYXBUZXh0XG4gICAgICogQG1lbWJlcm9mIFBJWElcbiAgICAgKiBAc2VlIFBJWEkuZXh0cmFzLkJpdG1hcFRleHRcbiAgICAgKiBAZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDMuMC4wXG4gICAgICovXG4gICAgQml0bWFwVGV4dDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uKClcbiAgICAgICAge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKCdUaGUgQml0bWFwVGV4dCBjbGFzcyBoYXMgYmVlbiBtb3ZlZCB0byBleHRyYXMuQml0bWFwVGV4dCwgcGxlYXNlIHVzZSBleHRyYXMuQml0bWFwVGV4dCBmcm9tIG5vdyBvbi4nKTtcbiAgICAgICAgICAgIHJldHVybiBleHRyYXMuQml0bWFwVGV4dDtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBAY2xhc3NcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBuYW1lIGJsZW5kTW9kZXNcbiAgICAgKiBAbWVtYmVyb2YgUElYSVxuICAgICAqIEBzZWUgUElYSS5CTEVORF9NT0RFU1xuICAgICAqIEBkZXByZWNhdGVkIHNpbmNlIHZlcnNpb24gMy4wLjBcbiAgICAgKi9cbiAgICBibGVuZE1vZGVzOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24oKVxuICAgICAgICB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ1RoZSBibGVuZE1vZGVzIGhhcyBiZWVuIG1vdmVkIHRvIEJMRU5EX01PREVTLCBwbGVhc2UgdXNlIEJMRU5EX01PREVTIGZyb20gbm93IG9uLicpO1xuICAgICAgICAgICAgcmV0dXJuIGNvcmUuQkxFTkRfTU9ERVM7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQGNsYXNzXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAbmFtZSBzY2FsZU1vZGVzXG4gICAgICogQG1lbWJlcm9mIFBJWElcbiAgICAgKiBAc2VlIFBJWEkuU0NBTEVfTU9ERVNcbiAgICAgKiBAZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDMuMC4wXG4gICAgICovXG4gICAgc2NhbGVNb2Rlczoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uKClcbiAgICAgICAge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKCdUaGUgc2NhbGVNb2RlcyBoYXMgYmVlbiBtb3ZlZCB0byBTQ0FMRV9NT0RFUywgcGxlYXNlIHVzZSBTQ0FMRV9NT0RFUyBmcm9tIG5vdyBvbi4nKTtcbiAgICAgICAgICAgIHJldHVybiBjb3JlLlNDQUxFX01PREVTO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIEBjbGFzc1xuICAgICAqIEBwcml2YXRlXG4gICAgICogQG5hbWUgQmFzZVRleHR1cmVDYWNoZVxuICAgICAqIEBtZW1iZXJvZiBQSVhJXG4gICAgICogQHNlZSBQSVhJLnV0aWxzLkJhc2VUZXh0dXJlQ2FjaGVcbiAgICAgKiBAZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDMuMC4wXG4gICAgICovXG4gICAgQmFzZVRleHR1cmVDYWNoZToge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignVGhlIEJhc2VUZXh0dXJlQ2FjaGUgY2xhc3MgaGFzIGJlZW4gbW92ZWQgdG8gdXRpbHMuQmFzZVRleHR1cmVDYWNoZSwgcGxlYXNlIHVzZSB1dGlscy5CYXNlVGV4dHVyZUNhY2hlIGZyb20gbm93IG9uLicpO1xuICAgICAgICAgICAgcmV0dXJuIGNvcmUudXRpbHMuQmFzZVRleHR1cmVDYWNoZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBAY2xhc3NcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBuYW1lIFRleHR1cmVDYWNoZVxuICAgICAqIEBtZW1iZXJvZiBQSVhJXG4gICAgICogQHNlZSBQSVhJLnV0aWxzLlRleHR1cmVDYWNoZVxuICAgICAqIEBkZXByZWNhdGVkIHNpbmNlIHZlcnNpb24gMy4wLjBcbiAgICAgKi9cbiAgICBUZXh0dXJlQ2FjaGU6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ1RoZSBUZXh0dXJlQ2FjaGUgY2xhc3MgaGFzIGJlZW4gbW92ZWQgdG8gdXRpbHMuVGV4dHVyZUNhY2hlLCBwbGVhc2UgdXNlIHV0aWxzLlRleHR1cmVDYWNoZSBmcm9tIG5vdyBvbi4nKTtcbiAgICAgICAgICAgIHJldHVybiBjb3JlLnV0aWxzLlRleHR1cmVDYWNoZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBAbmFtZXNwYWNlXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAbmFtZSBtYXRoXG4gICAgICogQG1lbWJlcm9mIFBJWElcbiAgICAgKiBAc2VlIFBJWElcbiAgICAgKiBAZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDMuMC42XG4gICAgICovXG4gICAgbWF0aDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignVGhlIG1hdGggbmFtZXNwYWNlIGlzIGRlcHJlY2F0ZWQsIHBsZWFzZSBhY2Nlc3MgbWVtYmVycyBhbHJlYWR5IGFjY2Vzc2libGUgb24gUElYSS4nKTtcbiAgICAgICAgICAgIHJldHVybiBjb3JlO1xuICAgICAgICB9XG4gICAgfVxufSk7XG5cbi8qKlxuICogQG1ldGhvZFxuICogQHByaXZhdGVcbiAqIEBuYW1lIFBJWEkuU3ByaXRlI3NldFRleHR1cmVcbiAqIEBzZWUgUElYSS5TcHJpdGUjdGV4dHVyZVxuICogQGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiAzLjAuMFxuICovXG5jb3JlLlNwcml0ZS5wcm90b3R5cGUuc2V0VGV4dHVyZSA9IGZ1bmN0aW9uKHRleHR1cmUpXG57XG4gICAgdGhpcy50ZXh0dXJlID0gdGV4dHVyZTtcbiAgICBjb25zb2xlLndhcm4oJ3NldFRleHR1cmUgaXMgbm93IGRlcHJlY2F0ZWQsIHBsZWFzZSB1c2UgdGhlIHRleHR1cmUgcHJvcGVydHksIGUuZyA6IHNwcml0ZS50ZXh0dXJlID0gdGV4dHVyZTsnKTtcbn07XG5cbi8qKlxuICogQG1ldGhvZFxuICogQG5hbWUgUElYSS5leHRyYXMuQml0bWFwVGV4dCNzZXRUZXh0XG4gKiBAc2VlIFBJWEkuZXh0cmFzLkJpdG1hcFRleHQjdGV4dFxuICogQGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiAzLjAuMFxuICovXG5leHRyYXMuQml0bWFwVGV4dC5wcm90b3R5cGUuc2V0VGV4dCA9IGZ1bmN0aW9uKHRleHQpXG57XG4gICAgdGhpcy50ZXh0ID0gdGV4dDtcbiAgICBjb25zb2xlLndhcm4oJ3NldFRleHQgaXMgbm93IGRlcHJlY2F0ZWQsIHBsZWFzZSB1c2UgdGhlIHRleHQgcHJvcGVydHksIGUuZyA6IG15Qml0bWFwVGV4dC50ZXh0ID0gXFwnbXkgdGV4dFxcJzsnKTtcbn07XG5cbi8qKlxuICogQG1ldGhvZFxuICogQG5hbWUgUElYSS5UZXh0I3NldFRleHRcbiAqIEBzZWUgUElYSS5UZXh0I3RleHRcbiAqIEBkZXByZWNhdGVkIHNpbmNlIHZlcnNpb24gMy4wLjBcbiAqL1xuY29yZS5UZXh0LnByb3RvdHlwZS5zZXRUZXh0ID0gZnVuY3Rpb24odGV4dClcbntcbiAgICB0aGlzLnRleHQgPSB0ZXh0O1xuICAgIGNvbnNvbGUud2Fybignc2V0VGV4dCBpcyBub3cgZGVwcmVjYXRlZCwgcGxlYXNlIHVzZSB0aGUgdGV4dCBwcm9wZXJ0eSwgZS5nIDogbXlUZXh0LnRleHQgPSBcXCdteSB0ZXh0XFwnOycpO1xufTtcblxuLyoqXG4gKiBAbWV0aG9kXG4gKiBAbmFtZSBQSVhJLlRleHQjc2V0U3R5bGVcbiAqIEBzZWUgUElYSS5UZXh0I3N0eWxlXG4gKiBAZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDMuMC4wXG4gKi9cbmNvcmUuVGV4dC5wcm90b3R5cGUuc2V0U3R5bGUgPSBmdW5jdGlvbihzdHlsZSlcbntcbiAgICB0aGlzLnN0eWxlID0gc3R5bGU7XG4gICAgY29uc29sZS53YXJuKCdzZXRTdHlsZSBpcyBub3cgZGVwcmVjYXRlZCwgcGxlYXNlIHVzZSB0aGUgc3R5bGUgcHJvcGVydHksIGUuZyA6IG15VGV4dC5zdHlsZSA9IHN0eWxlOycpO1xufTtcblxuLyoqXG4gKiBAbWV0aG9kXG4gKiBAbmFtZSBQSVhJLlRleHR1cmUjc2V0RnJhbWVcbiAqIEBzZWUgUElYSS5UZXh0dXJlI3NldEZyYW1lXG4gKiBAZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDMuMC4wXG4gKi9cbmNvcmUuVGV4dHVyZS5wcm90b3R5cGUuc2V0RnJhbWUgPSBmdW5jdGlvbihmcmFtZSlcbntcbiAgICB0aGlzLmZyYW1lID0gZnJhbWU7XG4gICAgY29uc29sZS53YXJuKCdzZXRGcmFtZSBpcyBub3cgZGVwcmVjYXRlZCwgcGxlYXNlIHVzZSB0aGUgZnJhbWUgcHJvcGVydHksIGUuZyA6IG15VGV4dHVyZS5mcmFtZSA9IGZyYW1lOycpO1xufTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoZmlsdGVycywge1xuXG4gICAgLyoqXG4gICAgICogQGNsYXNzXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAbmFtZSBQSVhJLmZpbHRlcnMuQWJzdHJhY3RGaWx0ZXJcbiAgICAgKiBAc2VlIFBJWEkuQWJzdHJhY3RGaWx0ZXJcbiAgICAgKiBAZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDMuMC42XG4gICAgICovXG4gICAgQWJzdHJhY3RGaWx0ZXI6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbigpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignZmlsdGVycy5BYnN0cmFjdEZpbHRlciBpcyBhbiB1bmRvY3VtZW50ZWQgYWxpYXMsIHBsZWFzZSB1c2UgQWJzdHJhY3RGaWx0ZXIgZnJvbSBub3cgb24uJyk7XG4gICAgICAgICAgICByZXR1cm4gY29yZS5BYnN0cmFjdEZpbHRlcjtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBAY2xhc3NcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBuYW1lIFBJWEkuZmlsdGVycy5GWEFBRmlsdGVyXG4gICAgICogQHNlZSBQSVhJLkZYQUFGaWx0ZXJcbiAgICAgKiBAZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDMuMC42XG4gICAgICovXG4gICAgRlhBQUZpbHRlcjoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uKClcbiAgICAgICAge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKCdmaWx0ZXJzLkZYQUFGaWx0ZXIgaXMgYW4gdW5kb2N1bWVudGVkIGFsaWFzLCBwbGVhc2UgdXNlIEZYQUFGaWx0ZXIgZnJvbSBub3cgb24uJyk7XG4gICAgICAgICAgICByZXR1cm4gY29yZS5GWEFBRmlsdGVyO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIEBjbGFzc1xuICAgICAqIEBwcml2YXRlXG4gICAgICogQG5hbWUgUElYSS5maWx0ZXJzLlNwcml0ZU1hc2tGaWx0ZXJcbiAgICAgKiBAc2VlIFBJWEkuU3ByaXRlTWFza0ZpbHRlclxuICAgICAqIEBkZXByZWNhdGVkIHNpbmNlIHZlcnNpb24gMy4wLjZcbiAgICAgKi9cbiAgICBTcHJpdGVNYXNrRmlsdGVyOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24oKVxuICAgICAgICB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ2ZpbHRlcnMuU3ByaXRlTWFza0ZpbHRlciBpcyBhbiB1bmRvY3VtZW50ZWQgYWxpYXMsIHBsZWFzZSB1c2UgU3ByaXRlTWFza0ZpbHRlciBmcm9tIG5vdyBvbi4nKTtcbiAgICAgICAgICAgIHJldHVybiBjb3JlLlNwcml0ZU1hc2tGaWx0ZXI7XG4gICAgICAgIH1cbiAgICB9XG59KTtcblxuLyoqXG4gKiBAbWV0aG9kXG4gKiBAbmFtZSBQSVhJLnV0aWxzLnV1aWRcbiAqIEBzZWUgUElYSS51dGlscy51aWRcbiAqIEBkZXByZWNhdGVkIHNpbmNlIHZlcnNpb24gMy4wLjZcbiAqL1xuY29yZS51dGlscy51dWlkID0gZnVuY3Rpb24gKClcbntcbiAgICBjb25zb2xlLndhcm4oJ3V0aWxzLnV1aWQoKSBpcyBkZXByZWNhdGVkLCBwbGVhc2UgdXNlIHV0aWxzLnVpZCgpIGZyb20gbm93IG9uLicpO1xuICAgIHJldHVybiBjb3JlLnV0aWxzLnVpZCgpO1xufTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vY29yZScpO1xuXG4vKipcbiAqIEEgQml0bWFwVGV4dCBvYmplY3Qgd2lsbCBjcmVhdGUgYSBsaW5lIG9yIG11bHRpcGxlIGxpbmVzIG9mIHRleHQgdXNpbmcgYml0bWFwIGZvbnQuIFRvXG4gKiBzcGxpdCBhIGxpbmUgeW91IGNhbiB1c2UgJ1xcbicsICdcXHInIG9yICdcXHJcXG4nIGluIHlvdXIgc3RyaW5nLiBZb3UgY2FuIGdlbmVyYXRlIHRoZSBmbnQgZmlsZXMgdXNpbmc6XG4gKlxuICogQSBCaXRtYXBUZXh0IGNhbiBvbmx5IGJlIGNyZWF0ZWQgd2hlbiB0aGUgZm9udCBpcyBsb2FkZWRcbiAqXG4gKiBgYGBqc1xuICogLy8gaW4gdGhpcyBjYXNlIHRoZSBmb250IGlzIGluIGEgZmlsZSBjYWxsZWQgJ2Rlc3lyZWwuZm50J1xuICogdmFyIGJpdG1hcFRleHQgPSBuZXcgUElYSS5leHRyYXMuQml0bWFwVGV4dChcInRleHQgdXNpbmcgYSBmYW5jeSBmb250IVwiLCB7Zm9udDogXCIzNXB4IERlc3lyZWxcIiwgYWxpZ246IFwicmlnaHRcIn0pO1xuICogYGBgXG4gKlxuICpcbiAqIGh0dHA6Ly93d3cuYW5nZWxjb2RlLmNvbS9wcm9kdWN0cy9ibWZvbnQvIGZvciB3aW5kb3dzIG9yXG4gKiBodHRwOi8vd3d3LmJtZ2x5cGguY29tLyBmb3IgbWFjLlxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5Db250YWluZXJcbiAqIEBtZW1iZXJvZiBQSVhJLmV4dHJhc1xuICogQHBhcmFtIHRleHQge3N0cmluZ30gVGhlIGNvcHkgdGhhdCB5b3Ugd291bGQgbGlrZSB0aGUgdGV4dCB0byBkaXNwbGF5XG4gKiBAcGFyYW0gc3R5bGUge29iamVjdH0gVGhlIHN0eWxlIHBhcmFtZXRlcnNcbiAqIEBwYXJhbSBzdHlsZS5mb250IHtzdHJpbmd8b2JqZWN0fSBUaGUgZm9udCBkZXNjcmlwdG9yIGZvciB0aGUgb2JqZWN0LCBjYW4gYmUgcGFzc2VkIGFzIGEgc3RyaW5nIG9mIGZvcm1cbiAqICAgICAgXCIyNHB4IEZvbnROYW1lXCIgb3IgXCJGb250TmFtZVwiIG9yIGFzIGFuIG9iamVjdCB3aXRoIGV4cGxpY2l0IG5hbWUvc2l6ZSBwcm9wZXJ0aWVzLlxuICogQHBhcmFtIFtzdHlsZS5mb250Lm5hbWVdIHtzdHJpbmd9IFRoZSBiaXRtYXAgZm9udCBpZFxuICogQHBhcmFtIFtzdHlsZS5mb250LnNpemVdIHtudW1iZXJ9IFRoZSBzaXplIG9mIHRoZSBmb250IGluIHBpeGVscywgZS5nLiAyNFxuICogQHBhcmFtIFtzdHlsZS5hbGlnbj0nbGVmdCddIHtzdHJpbmd9IEFsaWdubWVudCBmb3IgbXVsdGlsaW5lIHRleHQgKCdsZWZ0JywgJ2NlbnRlcicgb3IgJ3JpZ2h0JyksIGRvZXMgbm90IGFmZmVjdFxuICogICAgICBzaW5nbGUgbGluZSB0ZXh0XG4gKiBAcGFyYW0gW3N0eWxlLnRpbnQ9MHhGRkZGRkZdIHtudW1iZXJ9IFRoZSB0aW50IGNvbG9yXG4gKi9cbmZ1bmN0aW9uIEJpdG1hcFRleHQodGV4dCwgc3R5bGUpXG57XG4gICAgY29yZS5Db250YWluZXIuY2FsbCh0aGlzKTtcblxuICAgIHN0eWxlID0gc3R5bGUgfHwge307XG5cbiAgICAvKipcbiAgICAgKiBUaGUgd2lkdGggb2YgdGhlIG92ZXJhbGwgdGV4dCwgZGlmZmVyZW50IGZyb20gZm9udFNpemUsXG4gICAgICogd2hpY2ggaXMgZGVmaW5lZCBpbiB0aGUgc3R5bGUgb2JqZWN0XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQHJlYWRPbmx5XG4gICAgICovXG4gICAgdGhpcy50ZXh0V2lkdGggPSAwO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGhlaWdodCBvZiB0aGUgb3ZlcmFsbCB0ZXh0LCBkaWZmZXJlbnQgZnJvbSBmb250U2l6ZSxcbiAgICAgKiB3aGljaCBpcyBkZWZpbmVkIGluIHRoZSBzdHlsZSBvYmplY3RcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAcmVhZE9ubHlcbiAgICAgKi9cbiAgICB0aGlzLnRleHRIZWlnaHQgPSAwO1xuXG4gICAgLyoqXG4gICAgICogUHJpdmF0ZSB0cmFja2VyIGZvciB0aGUgbGV0dGVyIHNwcml0ZSBwb29sLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5TcHJpdGVbXX1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX2dseXBocyA9IFtdO1xuXG4gICAgLyoqXG4gICAgICogUHJpdmF0ZSB0cmFja2VyIGZvciB0aGUgY3VycmVudCBzdHlsZS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge29iamVjdH1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX2ZvbnQgPSB7XG4gICAgICAgIHRpbnQ6IHN0eWxlLnRpbnQgIT09IHVuZGVmaW5lZCA/IHN0eWxlLnRpbnQgOiAweEZGRkZGRixcbiAgICAgICAgYWxpZ246IHN0eWxlLmFsaWduIHx8ICdsZWZ0JyxcbiAgICAgICAgbmFtZTogbnVsbCxcbiAgICAgICAgc2l6ZTogMFxuICAgIH07XG5cbiAgICAvKipcbiAgICAgKiBQcml2YXRlIHRyYWNrZXIgZm9yIHRoZSBjdXJyZW50IGZvbnQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtvYmplY3R9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLmZvbnQgPSBzdHlsZS5mb250OyAvLyBydW4gZm9udCBzZXR0ZXJcblxuICAgIC8qKlxuICAgICAqIFByaXZhdGUgdHJhY2tlciBmb3IgdGhlIGN1cnJlbnQgdGV4dC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge3N0cmluZ31cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX3RleHQgPSB0ZXh0O1xuXG4gICAgLyoqXG4gICAgICogVGhlIG1heCB3aWR0aCBvZiB0aGlzIGJpdG1hcCB0ZXh0IGluIHBpeGVscy4gSWYgdGhlIHRleHQgcHJvdmlkZWQgaXMgbG9uZ2VyIHRoYW4gdGhlIHZhbHVlIHByb3ZpZGVkLCBsaW5lIGJyZWFrcyB3aWxsIGJlIGF1dG9tYXRpY2FsbHkgaW5zZXJ0ZWQgaW4gdGhlIGxhc3Qgd2hpdGVzcGFjZS5cbiAgICAgKiBEaXNhYmxlIGJ5IHNldHRpbmcgdmFsdWUgdG8gMFxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMubWF4V2lkdGggPSAwO1xuXG4gICAgLyoqXG4gICAgICogVGhlIG1heCBsaW5lIGhlaWdodC4gVGhpcyBpcyB1c2VmdWwgd2hlbiB0cnlpbmcgdG8gdXNlIHRoZSB0b3RhbCBoZWlnaHQgb2YgdGhlIFRleHQsIGllOiB3aGVuIHRyeWluZyB0byB2ZXJ0aWNhbGx5IGFsaWduLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMubWF4TGluZUhlaWdodCA9IDA7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgZGlydHkgc3RhdGUgb2YgdGhpcyBvYmplY3QuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqL1xuICAgIHRoaXMuZGlydHkgPSBmYWxzZTtcblxuICAgIHRoaXMudXBkYXRlVGV4dCgpO1xufVxuXG4vLyBjb25zdHJ1Y3RvclxuQml0bWFwVGV4dC5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuQ29udGFpbmVyLnByb3RvdHlwZSk7XG5CaXRtYXBUZXh0LnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IEJpdG1hcFRleHQ7XG5tb2R1bGUuZXhwb3J0cyA9IEJpdG1hcFRleHQ7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKEJpdG1hcFRleHQucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogVGhlIHRpbnQgb2YgdGhlIEJpdG1hcFRleHQgb2JqZWN0XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZXh0cmFzLkJpdG1hcFRleHQjXG4gICAgICovXG4gICAgdGludDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9mb250LnRpbnQ7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLl9mb250LnRpbnQgPSAodHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJyAmJiB2YWx1ZSA+PSAwKSA/IHZhbHVlIDogMHhGRkZGRkY7XG5cbiAgICAgICAgICAgIHRoaXMuZGlydHkgPSB0cnVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFRoZSBhbGlnbm1lbnQgb2YgdGhlIEJpdG1hcFRleHQgb2JqZWN0XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtzdHJpbmd9XG4gICAgICogQGRlZmF1bHQgJ2xlZnQnXG4gICAgICogQG1lbWJlcm9mIFBJWEkuZXh0cmFzLkJpdG1hcFRleHQjXG4gICAgICovXG4gICAgYWxpZ246IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fZm9udC5hbGlnbjtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuX2ZvbnQuYWxpZ24gPSB2YWx1ZSB8fCAnbGVmdCc7XG5cbiAgICAgICAgICAgIHRoaXMuZGlydHkgPSB0cnVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFRoZSBmb250IGRlc2NyaXB0b3Igb2YgdGhlIEJpdG1hcFRleHQgb2JqZWN0XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtGb250fVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmV4dHJhcy5CaXRtYXBUZXh0I1xuICAgICAqL1xuICAgIGZvbnQ6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fZm9udDtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGlmICghdmFsdWUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICAgICAgdmFsdWUgPSB2YWx1ZS5zcGxpdCgnICcpO1xuXG4gICAgICAgICAgICAgICAgdGhpcy5fZm9udC5uYW1lID0gdmFsdWUubGVuZ3RoID09PSAxID8gdmFsdWVbMF0gOiB2YWx1ZS5zbGljZSgxKS5qb2luKCcgJyk7XG4gICAgICAgICAgICAgICAgdGhpcy5fZm9udC5zaXplID0gdmFsdWUubGVuZ3RoID49IDIgPyBwYXJzZUludCh2YWx1ZVswXSwgMTApIDogQml0bWFwVGV4dC5mb250c1t0aGlzLl9mb250Lm5hbWVdLnNpemU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9mb250Lm5hbWUgPSB2YWx1ZS5uYW1lO1xuICAgICAgICAgICAgICAgIHRoaXMuX2ZvbnQuc2l6ZSA9IHR5cGVvZiB2YWx1ZS5zaXplID09PSAnbnVtYmVyJyA/IHZhbHVlLnNpemUgOiBwYXJzZUludCh2YWx1ZS5zaXplLCAxMCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuZGlydHkgPSB0cnVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFRoZSB0ZXh0IG9mIHRoZSBCaXRtYXBUZXh0IG9iamVjdFxuICAgICAqXG4gICAgICogQG1lbWJlciB7c3RyaW5nfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmV4dHJhcy5CaXRtYXBUZXh0I1xuICAgICAqL1xuICAgIHRleHQ6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fdGV4dDtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHZhbHVlID0gdmFsdWUudG9TdHJpbmcoKSB8fCAnICc7XG4gICAgICAgICAgICBpZiAodGhpcy5fdGV4dCA9PT0gdmFsdWUpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5fdGV4dCA9IHZhbHVlO1xuICAgICAgICAgICAgdGhpcy5kaXJ0eSA9IHRydWU7XG4gICAgICAgIH1cbiAgICB9XG59KTtcblxuLyoqXG4gKiBSZW5kZXJzIHRleHQgYW5kIHVwZGF0ZXMgaXQgd2hlbiBuZWVkZWRcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5CaXRtYXBUZXh0LnByb3RvdHlwZS51cGRhdGVUZXh0ID0gZnVuY3Rpb24gKClcbntcbiAgICB2YXIgZGF0YSA9IEJpdG1hcFRleHQuZm9udHNbdGhpcy5fZm9udC5uYW1lXTtcbiAgICB2YXIgcG9zID0gbmV3IGNvcmUuUG9pbnQoKTtcbiAgICB2YXIgcHJldkNoYXJDb2RlID0gbnVsbDtcbiAgICB2YXIgY2hhcnMgPSBbXTtcbiAgICB2YXIgbGFzdExpbmVXaWR0aCA9IDA7XG4gICAgdmFyIG1heExpbmVXaWR0aCA9IDA7XG4gICAgdmFyIGxpbmVXaWR0aHMgPSBbXTtcbiAgICB2YXIgbGluZSA9IDA7XG4gICAgdmFyIHNjYWxlID0gdGhpcy5fZm9udC5zaXplIC8gZGF0YS5zaXplO1xuICAgIHZhciBsYXN0U3BhY2UgPSAtMTtcbiAgICB2YXIgbWF4TGluZUhlaWdodCA9IDA7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMudGV4dC5sZW5ndGg7IGkrKylcbiAgICB7XG4gICAgICAgIHZhciBjaGFyQ29kZSA9IHRoaXMudGV4dC5jaGFyQ29kZUF0KGkpO1xuICAgICAgICBsYXN0U3BhY2UgPSAvKFxccykvLnRlc3QodGhpcy50ZXh0LmNoYXJBdChpKSkgPyBpIDogbGFzdFNwYWNlO1xuXG4gICAgICAgIGlmICgvKD86XFxyXFxufFxccnxcXG4pLy50ZXN0KHRoaXMudGV4dC5jaGFyQXQoaSkpKVxuICAgICAgICB7XG4gICAgICAgICAgICBsaW5lV2lkdGhzLnB1c2gobGFzdExpbmVXaWR0aCk7XG4gICAgICAgICAgICBtYXhMaW5lV2lkdGggPSBNYXRoLm1heChtYXhMaW5lV2lkdGgsIGxhc3RMaW5lV2lkdGgpO1xuICAgICAgICAgICAgbGluZSsrO1xuXG4gICAgICAgICAgICBwb3MueCA9IDA7XG4gICAgICAgICAgICBwb3MueSArPSBkYXRhLmxpbmVIZWlnaHQ7XG4gICAgICAgICAgICBwcmV2Q2hhckNvZGUgPSBudWxsO1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAobGFzdFNwYWNlICE9PSAtMSAmJiB0aGlzLm1heFdpZHRoID4gMCAmJiBwb3MueCAqIHNjYWxlID4gdGhpcy5tYXhXaWR0aClcbiAgICAgICAge1xuICAgICAgICAgICAgY29yZS51dGlscy5yZW1vdmVJdGVtcyhjaGFycywgbGFzdFNwYWNlLCBpIC0gbGFzdFNwYWNlKTtcbiAgICAgICAgICAgIGkgPSBsYXN0U3BhY2U7XG4gICAgICAgICAgICBsYXN0U3BhY2UgPSAtMTtcblxuICAgICAgICAgICAgbGluZVdpZHRocy5wdXNoKGxhc3RMaW5lV2lkdGgpO1xuICAgICAgICAgICAgbWF4TGluZVdpZHRoID0gTWF0aC5tYXgobWF4TGluZVdpZHRoLCBsYXN0TGluZVdpZHRoKTtcbiAgICAgICAgICAgIGxpbmUrKztcblxuICAgICAgICAgICAgcG9zLnggPSAwO1xuICAgICAgICAgICAgcG9zLnkgKz0gZGF0YS5saW5lSGVpZ2h0O1xuICAgICAgICAgICAgcHJldkNoYXJDb2RlID0gbnVsbDtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGNoYXJEYXRhID0gZGF0YS5jaGFyc1tjaGFyQ29kZV07XG5cbiAgICAgICAgaWYgKCFjaGFyRGF0YSlcbiAgICAgICAge1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAocHJldkNoYXJDb2RlICYmIGNoYXJEYXRhLmtlcm5pbmdbcHJldkNoYXJDb2RlXSlcbiAgICAgICAge1xuICAgICAgICAgICAgcG9zLnggKz0gY2hhckRhdGEua2VybmluZ1twcmV2Q2hhckNvZGVdO1xuICAgICAgICB9XG5cbiAgICAgICAgY2hhcnMucHVzaCh7dGV4dHVyZTpjaGFyRGF0YS50ZXh0dXJlLCBsaW5lOiBsaW5lLCBjaGFyQ29kZTogY2hhckNvZGUsIHBvc2l0aW9uOiBuZXcgY29yZS5Qb2ludChwb3MueCArIGNoYXJEYXRhLnhPZmZzZXQsIHBvcy55ICsgY2hhckRhdGEueU9mZnNldCl9KTtcbiAgICAgICAgbGFzdExpbmVXaWR0aCA9IHBvcy54ICsgKGNoYXJEYXRhLnRleHR1cmUud2lkdGggKyBjaGFyRGF0YS54T2Zmc2V0KTtcbiAgICAgICAgcG9zLnggKz0gY2hhckRhdGEueEFkdmFuY2U7XG4gICAgICAgIG1heExpbmVIZWlnaHQgPSBNYXRoLm1heChtYXhMaW5lSGVpZ2h0LCAoY2hhckRhdGEueU9mZnNldCArIGNoYXJEYXRhLnRleHR1cmUuaGVpZ2h0KSk7XG4gICAgICAgIHByZXZDaGFyQ29kZSA9IGNoYXJDb2RlO1xuICAgIH1cblxuICAgIGxpbmVXaWR0aHMucHVzaChsYXN0TGluZVdpZHRoKTtcbiAgICBtYXhMaW5lV2lkdGggPSBNYXRoLm1heChtYXhMaW5lV2lkdGgsIGxhc3RMaW5lV2lkdGgpO1xuXG4gICAgdmFyIGxpbmVBbGlnbk9mZnNldHMgPSBbXTtcblxuICAgIGZvciAoaSA9IDA7IGkgPD0gbGluZTsgaSsrKVxuICAgIHtcbiAgICAgICAgdmFyIGFsaWduT2Zmc2V0ID0gMDtcblxuICAgICAgICBpZiAodGhpcy5fZm9udC5hbGlnbiA9PT0gJ3JpZ2h0JylcbiAgICAgICAge1xuICAgICAgICAgICAgYWxpZ25PZmZzZXQgPSBtYXhMaW5lV2lkdGggLSBsaW5lV2lkdGhzW2ldO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHRoaXMuX2ZvbnQuYWxpZ24gPT09ICdjZW50ZXInKVxuICAgICAgICB7XG4gICAgICAgICAgICBhbGlnbk9mZnNldCA9IChtYXhMaW5lV2lkdGggLSBsaW5lV2lkdGhzW2ldKSAvIDI7XG4gICAgICAgIH1cblxuICAgICAgICBsaW5lQWxpZ25PZmZzZXRzLnB1c2goYWxpZ25PZmZzZXQpO1xuICAgIH1cblxuICAgIHZhciBsZW5DaGFycyA9IGNoYXJzLmxlbmd0aDtcbiAgICB2YXIgdGludCA9IHRoaXMudGludDtcblxuICAgIGZvciAoaSA9IDA7IGkgPCBsZW5DaGFyczsgaSsrKVxuICAgIHtcbiAgICAgICAgdmFyIGMgPSB0aGlzLl9nbHlwaHNbaV07IC8vIGdldCB0aGUgbmV4dCBnbHlwaCBzcHJpdGVcblxuICAgICAgICBpZiAoYylcbiAgICAgICAge1xuICAgICAgICAgICAgYy50ZXh0dXJlID0gY2hhcnNbaV0udGV4dHVyZTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgIHtcbiAgICAgICAgICAgIGMgPSBuZXcgY29yZS5TcHJpdGUoY2hhcnNbaV0udGV4dHVyZSk7XG4gICAgICAgICAgICB0aGlzLl9nbHlwaHMucHVzaChjKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGMucG9zaXRpb24ueCA9IChjaGFyc1tpXS5wb3NpdGlvbi54ICsgbGluZUFsaWduT2Zmc2V0c1tjaGFyc1tpXS5saW5lXSkgKiBzY2FsZTtcbiAgICAgICAgYy5wb3NpdGlvbi55ID0gY2hhcnNbaV0ucG9zaXRpb24ueSAqIHNjYWxlO1xuICAgICAgICBjLnNjYWxlLnggPSBjLnNjYWxlLnkgPSBzY2FsZTtcbiAgICAgICAgYy50aW50ID0gdGludDtcblxuICAgICAgICBpZiAoIWMucGFyZW50KVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmFkZENoaWxkKGMpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gcmVtb3ZlIHVubmVjZXNzYXJ5IGNoaWxkcmVuLlxuICAgIGZvciAoaSA9IGxlbkNoYXJzOyBpIDwgdGhpcy5fZ2x5cGhzLmxlbmd0aDsgKytpKVxuICAgIHtcbiAgICAgICAgdGhpcy5yZW1vdmVDaGlsZCh0aGlzLl9nbHlwaHNbaV0pO1xuICAgIH1cblxuICAgIHRoaXMudGV4dFdpZHRoID0gbWF4TGluZVdpZHRoICogc2NhbGU7XG4gICAgdGhpcy50ZXh0SGVpZ2h0ID0gKHBvcy55ICsgZGF0YS5saW5lSGVpZ2h0KSAqIHNjYWxlO1xuICAgIHRoaXMubWF4TGluZUhlaWdodCA9IG1heExpbmVIZWlnaHQgKiBzY2FsZTtcbn07XG5cbi8qKlxuICogVXBkYXRlcyB0aGUgdHJhbnNmb3JtIG9mIHRoaXMgb2JqZWN0XG4gKlxuICogQHByaXZhdGVcbiAqL1xuQml0bWFwVGV4dC5wcm90b3R5cGUudXBkYXRlVHJhbnNmb3JtID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLnZhbGlkYXRlKCk7XG4gICAgdGhpcy5jb250YWluZXJVcGRhdGVUcmFuc2Zvcm0oKTtcbn07XG5cbi8qKlxuICogVmFsaWRhdGVzIHRleHQgYmVmb3JlIGNhbGxpbmcgcGFyZW50J3MgZ2V0TG9jYWxCb3VuZHNcbiAqXG4gKiBAcmV0dXJuIHtQSVhJLlJlY3RhbmdsZX0gVGhlIHJlY3Rhbmd1bGFyIGJvdW5kaW5nIGFyZWFcbiAqL1xuXG5CaXRtYXBUZXh0LnByb3RvdHlwZS5nZXRMb2NhbEJvdW5kcyA9IGZ1bmN0aW9uKClcbntcbiAgICB0aGlzLnZhbGlkYXRlKCk7XG4gICAgcmV0dXJuIGNvcmUuQ29udGFpbmVyLnByb3RvdHlwZS5nZXRMb2NhbEJvdW5kcy5jYWxsKHRoaXMpO1xufTtcblxuLyoqXG4gKiBVcGRhdGVzIHRleHQgd2hlbiBuZWVkZWRcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5CaXRtYXBUZXh0LnByb3RvdHlwZS52YWxpZGF0ZSA9IGZ1bmN0aW9uKClcbntcbiAgICBpZiAodGhpcy5kaXJ0eSlcbiAgICB7XG4gICAgICAgIHRoaXMudXBkYXRlVGV4dCgpO1xuICAgICAgICB0aGlzLmRpcnR5ID0gZmFsc2U7XG4gICAgfVxufTtcblxuQml0bWFwVGV4dC5mb250cyA9IHt9O1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi9jb3JlJyk7XG5cbi8qKlxuICogQSBNb3ZpZUNsaXAgaXMgYSBzaW1wbGUgd2F5IHRvIGRpc3BsYXkgYW4gYW5pbWF0aW9uIGRlcGljdGVkIGJ5IGEgbGlzdCBvZiB0ZXh0dXJlcy5cbiAqXG4gKiBgYGBqc1xuICogdmFyIGFsaWVuSW1hZ2VzID0gW1wiaW1hZ2Vfc2VxdWVuY2VfMDEucG5nXCIsXCJpbWFnZV9zZXF1ZW5jZV8wMi5wbmdcIixcImltYWdlX3NlcXVlbmNlXzAzLnBuZ1wiLFwiaW1hZ2Vfc2VxdWVuY2VfMDQucG5nXCJdO1xuICogdmFyIHRleHR1cmVBcnJheSA9IFtdO1xuICpcbiAqIGZvciAodmFyIGk9MDsgaSA8IDQ7IGkrKylcbiAqIHtcbiAqICAgICAgdmFyIHRleHR1cmUgPSBQSVhJLlRleHR1cmUuZnJvbUltYWdlKGFsaWVuSW1hZ2VzW2ldKTtcbiAqICAgICAgdGV4dHVyZUFycmF5LnB1c2godGV4dHVyZSk7XG4gKiB9O1xuICpcbiAqIHZhciBtYyA9IG5ldyBQSVhJLk1vdmllQ2xpcCh0ZXh0dXJlQXJyYXkpO1xuICogYGBgXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLlNwcml0ZVxuICogQG1lbWJlcm9mIFBJWEkuZXh0cmFzXG4gKiBAcGFyYW0gdGV4dHVyZXMge1BJWEkuVGV4dHVyZVtdfE9iamVjdFtdfSBhbiBhcnJheSBvZiB7QGxpbmsgUElYSS5UZXh0dXJlfSBvciBmcmFtZSBvYmplY3RzIHRoYXQgbWFrZSB1cCB0aGUgYW5pbWF0aW9uXG4gKiBAcGFyYW0gdGV4dHVyZXNbXS50ZXh0dXJlIHtQSVhJLlRleHR1cmV9IHRoZSB7QGxpbmsgUElYSS5UZXh0dXJlfSBvZiB0aGUgZnJhbWVcbiAqIEBwYXJhbSB0ZXh0dXJlc1tdLnRpbWUge251bWJlcn0gdGhlIGR1cmF0aW9uIG9mIHRoZSBmcmFtZSBpbiBtc1xuICovXG5mdW5jdGlvbiBNb3ZpZUNsaXAodGV4dHVyZXMpXG57XG4gICAgY29yZS5TcHJpdGUuY2FsbCh0aGlzLCB0ZXh0dXJlc1swXSBpbnN0YW5jZW9mIGNvcmUuVGV4dHVyZSA/IHRleHR1cmVzWzBdIDogdGV4dHVyZXNbMF0udGV4dHVyZSk7XG5cbiAgICAvKipcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX3RleHR1cmVzID0gbnVsbDtcblxuICAgIC8qKlxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fZHVyYXRpb25zID0gbnVsbDtcblxuICAgIHRoaXMudGV4dHVyZXMgPSB0ZXh0dXJlcztcblxuICAgIC8qKlxuICAgICAqIFRoZSBzcGVlZCB0aGF0IHRoZSBNb3ZpZUNsaXAgd2lsbCBwbGF5IGF0LiBIaWdoZXIgaXMgZmFzdGVyLCBsb3dlciBpcyBzbG93ZXJcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAxXG4gICAgICovXG4gICAgdGhpcy5hbmltYXRpb25TcGVlZCA9IDE7XG5cbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIG9yIG5vdCB0aGUgbW92aWUgY2xpcCByZXBlYXRzIGFmdGVyIHBsYXlpbmcuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqIEBkZWZhdWx0IHRydWVcbiAgICAgKi9cbiAgICB0aGlzLmxvb3AgPSB0cnVlO1xuXG4gICAgLyoqXG4gICAgICogRnVuY3Rpb24gdG8gY2FsbCB3aGVuIGEgTW92aWVDbGlwIGZpbmlzaGVzIHBsYXlpbmdcbiAgICAgKlxuICAgICAqIEBtZXRob2RcbiAgICAgKiBAbWVtYmVyb2YgUElYSS5leHRyYXMuTW92aWVDbGlwI1xuICAgICAqL1xuICAgIHRoaXMub25Db21wbGV0ZSA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBFbGFwc2VkIHRpbWUgc2luY2UgYW5pbWF0aW9uIGhhcyBiZWVuIHN0YXJ0ZWQsIHVzZWQgaW50ZXJuYWxseSB0byBkaXNwbGF5IGN1cnJlbnQgdGV4dHVyZVxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fY3VycmVudFRpbWUgPSAwO1xuXG4gICAgLyoqXG4gICAgICogSW5kaWNhdGVzIGlmIHRoZSBNb3ZpZUNsaXAgaXMgY3VycmVudGx5IHBsYXlpbmdcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICogQHJlYWRvbmx5XG4gICAgICovXG4gICAgdGhpcy5wbGF5aW5nID0gZmFsc2U7XG59XG5cbi8vIGNvbnN0cnVjdG9yXG5Nb3ZpZUNsaXAucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShjb3JlLlNwcml0ZS5wcm90b3R5cGUpO1xuTW92aWVDbGlwLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IE1vdmllQ2xpcDtcbm1vZHVsZS5leHBvcnRzID0gTW92aWVDbGlwO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhNb3ZpZUNsaXAucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogdG90YWxGcmFtZXMgaXMgdGhlIHRvdGFsIG51bWJlciBvZiBmcmFtZXMgaW4gdGhlIE1vdmllQ2xpcC4gVGhpcyBpcyB0aGUgc2FtZSBhcyBudW1iZXIgb2YgdGV4dHVyZXNcbiAgICAgKiBhc3NpZ25lZCB0byB0aGUgTW92aWVDbGlwLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmV4dHJhcy5Nb3ZpZUNsaXAjXG4gICAgICogQGRlZmF1bHQgMFxuICAgICAqIEByZWFkb25seVxuICAgICAqL1xuICAgIHRvdGFsRnJhbWVzOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24oKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fdGV4dHVyZXMubGVuZ3RoO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFRoZSBhcnJheSBvZiB0ZXh0dXJlcyB1c2VkIGZvciB0aGlzIE1vdmllQ2xpcFxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5UZXh0dXJlW119XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZXh0cmFzLk1vdmllQ2xpcCNcbiAgICAgKlxuICAgICAqL1xuICAgIHRleHR1cmVzOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3RleHR1cmVzO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgaWYodmFsdWVbMF0gaW5zdGFuY2VvZiBjb3JlLlRleHR1cmUpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdGhpcy5fdGV4dHVyZXMgPSB2YWx1ZTtcbiAgICAgICAgICAgICAgICB0aGlzLl9kdXJhdGlvbnMgPSBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHRoaXMuX3RleHR1cmVzID0gW107XG4gICAgICAgICAgICAgICAgdGhpcy5fZHVyYXRpb25zID0gW107XG4gICAgICAgICAgICAgICAgZm9yKHZhciBpID0gMDsgaSA8IHZhbHVlLmxlbmd0aDsgaSsrKVxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fdGV4dHVyZXMucHVzaCh2YWx1ZVtpXS50ZXh0dXJlKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fZHVyYXRpb25zLnB1c2godmFsdWVbaV0udGltZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICogVGhlIE1vdmllQ2xpcHMgY3VycmVudCBmcmFtZSBpbmRleFxuICAgICpcbiAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAqIEBtZW1iZXJvZiBQSVhJLmV4dHJhcy5Nb3ZpZUNsaXAjXG4gICAgKiBAcmVhZG9ubHlcbiAgICAqL1xuICAgIGN1cnJlbnRGcmFtZToge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHZhciBjdXJyZW50RnJhbWUgPSBNYXRoLmZsb29yKHRoaXMuX2N1cnJlbnRUaW1lKSAlIHRoaXMuX3RleHR1cmVzLmxlbmd0aDtcbiAgICAgICAgICAgIGlmIChjdXJyZW50RnJhbWUgPCAwKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGN1cnJlbnRGcmFtZSArPSB0aGlzLl90ZXh0dXJlcy5sZW5ndGg7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gY3VycmVudEZyYW1lO1xuICAgICAgICB9XG4gICAgfVxuXG59KTtcblxuLyoqXG4gKiBTdG9wcyB0aGUgTW92aWVDbGlwXG4gKlxuICovXG5Nb3ZpZUNsaXAucHJvdG90eXBlLnN0b3AgPSBmdW5jdGlvbiAoKVxue1xuICAgIGlmKCF0aGlzLnBsYXlpbmcpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5wbGF5aW5nID0gZmFsc2U7XG4gICAgY29yZS50aWNrZXIuc2hhcmVkLnJlbW92ZSh0aGlzLnVwZGF0ZSwgdGhpcyk7XG59O1xuXG4vKipcbiAqIFBsYXlzIHRoZSBNb3ZpZUNsaXBcbiAqXG4gKi9cbk1vdmllQ2xpcC5wcm90b3R5cGUucGxheSA9IGZ1bmN0aW9uICgpXG57XG4gICAgaWYodGhpcy5wbGF5aW5nKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMucGxheWluZyA9IHRydWU7XG4gICAgY29yZS50aWNrZXIuc2hhcmVkLmFkZCh0aGlzLnVwZGF0ZSwgdGhpcyk7XG59O1xuXG4vKipcbiAqIFN0b3BzIHRoZSBNb3ZpZUNsaXAgYW5kIGdvZXMgdG8gYSBzcGVjaWZpYyBmcmFtZVxuICpcbiAqIEBwYXJhbSBmcmFtZU51bWJlciB7bnVtYmVyfSBmcmFtZSBpbmRleCB0byBzdG9wIGF0XG4gKi9cbk1vdmllQ2xpcC5wcm90b3R5cGUuZ290b0FuZFN0b3AgPSBmdW5jdGlvbiAoZnJhbWVOdW1iZXIpXG57XG4gICAgdGhpcy5zdG9wKCk7XG5cbiAgICB0aGlzLl9jdXJyZW50VGltZSA9IGZyYW1lTnVtYmVyO1xuXG4gICAgdGhpcy5fdGV4dHVyZSA9IHRoaXMuX3RleHR1cmVzW3RoaXMuY3VycmVudEZyYW1lXTtcbn07XG5cbi8qKlxuICogR29lcyB0byBhIHNwZWNpZmljIGZyYW1lIGFuZCBiZWdpbnMgcGxheWluZyB0aGUgTW92aWVDbGlwXG4gKlxuICogQHBhcmFtIGZyYW1lTnVtYmVyIHtudW1iZXJ9IGZyYW1lIGluZGV4IHRvIHN0YXJ0IGF0XG4gKi9cbk1vdmllQ2xpcC5wcm90b3R5cGUuZ290b0FuZFBsYXkgPSBmdW5jdGlvbiAoZnJhbWVOdW1iZXIpXG57XG4gICAgdGhpcy5fY3VycmVudFRpbWUgPSBmcmFtZU51bWJlcjtcblxuICAgIHRoaXMucGxheSgpO1xufTtcblxuLypcbiAqIFVwZGF0ZXMgdGhlIG9iamVjdCB0cmFuc2Zvcm0gZm9yIHJlbmRlcmluZ1xuICogQHByaXZhdGVcbiAqL1xuTW92aWVDbGlwLnByb3RvdHlwZS51cGRhdGUgPSBmdW5jdGlvbiAoZGVsdGFUaW1lKVxue1xuICAgIHZhciBlbGFwc2VkID0gdGhpcy5hbmltYXRpb25TcGVlZCAqIGRlbHRhVGltZTtcblxuICAgIGlmICh0aGlzLl9kdXJhdGlvbnMgIT09IG51bGwpXG4gICAge1xuICAgICAgICB2YXIgbGFnID0gdGhpcy5fY3VycmVudFRpbWUgJSAxICogdGhpcy5fZHVyYXRpb25zW3RoaXMuY3VycmVudEZyYW1lXTtcblxuICAgICAgICBsYWcgKz0gZWxhcHNlZCAvIDYwICogMTAwMDtcblxuICAgICAgICB3aGlsZSAobGFnIDwgMClcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5fY3VycmVudFRpbWUtLTtcbiAgICAgICAgICAgIGxhZyArPSB0aGlzLl9kdXJhdGlvbnNbdGhpcy5jdXJyZW50RnJhbWVdO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIHNpZ24gPSBNYXRoLnNpZ24odGhpcy5hbmltYXRpb25TcGVlZCAqIGRlbHRhVGltZSk7XG4gICAgICAgIHRoaXMuX2N1cnJlbnRUaW1lID0gTWF0aC5mbG9vcih0aGlzLl9jdXJyZW50VGltZSk7XG5cbiAgICAgICAgd2hpbGUgKGxhZyA+PSB0aGlzLl9kdXJhdGlvbnNbdGhpcy5jdXJyZW50RnJhbWVdKVxuICAgICAgICB7XG4gICAgICAgICAgICBsYWcgLT0gdGhpcy5fZHVyYXRpb25zW3RoaXMuY3VycmVudEZyYW1lXSAqIHNpZ247XG4gICAgICAgICAgICB0aGlzLl9jdXJyZW50VGltZSArPSBzaWduO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fY3VycmVudFRpbWUgKz0gbGFnIC8gdGhpcy5fZHVyYXRpb25zW3RoaXMuY3VycmVudEZyYW1lXTtcbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgdGhpcy5fY3VycmVudFRpbWUgKz0gZWxhcHNlZDtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5fY3VycmVudFRpbWUgPCAwICYmICF0aGlzLmxvb3ApXG4gICAge1xuICAgICAgICB0aGlzLmdvdG9BbmRTdG9wKDApO1xuXG4gICAgICAgIGlmICh0aGlzLm9uQ29tcGxldGUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMub25Db21wbGV0ZSgpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGVsc2UgaWYgKHRoaXMuX2N1cnJlbnRUaW1lID49IHRoaXMuX3RleHR1cmVzLmxlbmd0aCAmJiAhdGhpcy5sb29wKVxuICAgIHtcbiAgICAgICAgdGhpcy5nb3RvQW5kU3RvcCh0aGlzLl90ZXh0dXJlcy5sZW5ndGggLSAxKTtcblxuICAgICAgICBpZiAodGhpcy5vbkNvbXBsZXRlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLm9uQ29tcGxldGUoKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICB0aGlzLl90ZXh0dXJlID0gdGhpcy5fdGV4dHVyZXNbdGhpcy5jdXJyZW50RnJhbWVdO1xuICAgIH1cblxufTtcblxuLypcbiAqIFN0b3BzIHRoZSBNb3ZpZUNsaXAgYW5kIGRlc3Ryb3lzIGl0XG4gKlxuICovXG5Nb3ZpZUNsaXAucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoIClcbntcbiAgICB0aGlzLnN0b3AoKTtcbiAgICBjb3JlLlNwcml0ZS5wcm90b3R5cGUuZGVzdHJveS5jYWxsKHRoaXMpO1xufTtcblxuLyoqXG4gKiBBIHNob3J0IGhhbmQgd2F5IG9mIGNyZWF0aW5nIGEgbW92aWVjbGlwIGZyb20gYW4gYXJyYXkgb2YgZnJhbWUgaWRzXG4gKlxuICogQHN0YXRpY1xuICogQHBhcmFtIGZyYW1lcyB7c3RyaW5nW119IHRoZSBhcnJheSBvZiBmcmFtZXMgaWRzIHRoZSBtb3ZpZWNsaXAgd2lsbCB1c2UgYXMgaXRzIHRleHR1cmUgZnJhbWVzXG4gKi9cbk1vdmllQ2xpcC5mcm9tRnJhbWVzID0gZnVuY3Rpb24gKGZyYW1lcylcbntcbiAgICB2YXIgdGV4dHVyZXMgPSBbXTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZnJhbWVzLmxlbmd0aDsgKytpKVxuICAgIHtcbiAgICAgICAgdGV4dHVyZXMucHVzaChuZXcgY29yZS5UZXh0dXJlLmZyb21GcmFtZShmcmFtZXNbaV0pKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IE1vdmllQ2xpcCh0ZXh0dXJlcyk7XG59O1xuXG4vKipcbiAqIEEgc2hvcnQgaGFuZCB3YXkgb2YgY3JlYXRpbmcgYSBtb3ZpZWNsaXAgZnJvbSBhbiBhcnJheSBvZiBpbWFnZSBpZHNcbiAqXG4gKiBAc3RhdGljXG4gKiBAcGFyYW0gaW1hZ2VzIHtzdHJpbmdbXX0gdGhlIGFycmF5IG9mIGltYWdlIHVybHMgdGhlIG1vdmllY2xpcCB3aWxsIHVzZSBhcyBpdHMgdGV4dHVyZSBmcmFtZXNcbiAqL1xuTW92aWVDbGlwLmZyb21JbWFnZXMgPSBmdW5jdGlvbiAoaW1hZ2VzKVxue1xuICAgIHZhciB0ZXh0dXJlcyA9IFtdO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBpbWFnZXMubGVuZ3RoOyArK2kpXG4gICAge1xuICAgICAgICB0ZXh0dXJlcy5wdXNoKG5ldyBjb3JlLlRleHR1cmUuZnJvbUltYWdlKGltYWdlc1tpXSkpO1xuICAgIH1cblxuICAgIHJldHVybiBuZXcgTW92aWVDbGlwKHRleHR1cmVzKTtcbn07IiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi9jb3JlJyksXG4gICAgLy8gYSBzcHJpdGUgdXNlIGRmb3IgcmVuZGVyaW5nIHRleHR1cmVzLi5cbiAgICB0ZW1wUG9pbnQgPSBuZXcgY29yZS5Qb2ludCgpLFxuICAgIENhbnZhc1RpbnRlciA9IHJlcXVpcmUoJy4uL2NvcmUvcmVuZGVyZXJzL2NhbnZhcy91dGlscy9DYW52YXNUaW50ZXInKTtcblxuLyoqXG4gKiBBIHRpbGluZyBzcHJpdGUgaXMgYSBmYXN0IHdheSBvZiByZW5kZXJpbmcgYSB0aWxpbmcgaW1hZ2VcbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuU3ByaXRlXG4gKiBAbWVtYmVyb2YgUElYSS5leHRyYXNcbiAqIEBwYXJhbSB0ZXh0dXJlIHtUZXh0dXJlfSB0aGUgdGV4dHVyZSBvZiB0aGUgdGlsaW5nIHNwcml0ZVxuICogQHBhcmFtIHdpZHRoIHtudW1iZXJ9ICB0aGUgd2lkdGggb2YgdGhlIHRpbGluZyBzcHJpdGVcbiAqIEBwYXJhbSBoZWlnaHQge251bWJlcn0gdGhlIGhlaWdodCBvZiB0aGUgdGlsaW5nIHNwcml0ZVxuICovXG5mdW5jdGlvbiBUaWxpbmdTcHJpdGUodGV4dHVyZSwgd2lkdGgsIGhlaWdodClcbntcbiAgICBjb3JlLlNwcml0ZS5jYWxsKHRoaXMsIHRleHR1cmUpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHNjYWxpbmcgb2YgdGhlIGltYWdlIHRoYXQgaXMgYmVpbmcgdGlsZWRcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuUG9pbnR9XG4gICAgICovXG4gICAgdGhpcy50aWxlU2NhbGUgPSBuZXcgY29yZS5Qb2ludCgxLDEpO1xuXG5cbiAgICAvKipcbiAgICAgKiBUaGUgb2Zmc2V0IHBvc2l0aW9uIG9mIHRoZSBpbWFnZSB0aGF0IGlzIGJlaW5nIHRpbGVkXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlBvaW50fVxuICAgICAqL1xuICAgIHRoaXMudGlsZVBvc2l0aW9uID0gbmV3IGNvcmUuUG9pbnQoMCwwKTtcblxuICAgIC8vLy8vIHByaXZhdGVcblxuICAgIC8qKlxuICAgICAqIFRoZSB3aXRoIG9mIHRoZSB0aWxpbmcgc3ByaXRlXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl93aWR0aCA9IHdpZHRoIHx8IDEwMDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBoZWlnaHQgb2YgdGhlIHRpbGluZyBzcHJpdGVcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX2hlaWdodCA9IGhlaWdodCB8fCAxMDA7XG5cbiAgICAvKipcbiAgICAgKiBBbiBpbnRlcm5hbCBXZWJHTCBVViBjYWNoZS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuVGV4dHVyZVV2c31cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX3V2cyA9IG5ldyBjb3JlLlRleHR1cmVVdnMoKTtcblxuICAgIHRoaXMuX2NhbnZhc1BhdHRlcm4gPSBudWxsO1xuXG4gICAgLy9UT0RPIG1vdmUuLlxuICAgIHRoaXMuc2hhZGVyID0gbmV3IGNvcmUuQWJzdHJhY3RGaWx0ZXIoXG5cbiAgICAgIFtcbiAgICAgICAgJ3ByZWNpc2lvbiBsb3dwIGZsb2F0OycsXG4gICAgICAgICdhdHRyaWJ1dGUgdmVjMiBhVmVydGV4UG9zaXRpb247JyxcbiAgICAgICAgJ2F0dHJpYnV0ZSB2ZWMyIGFUZXh0dXJlQ29vcmQ7JyxcbiAgICAgICAgJ2F0dHJpYnV0ZSB2ZWM0IGFDb2xvcjsnLFxuXG4gICAgICAgICd1bmlmb3JtIG1hdDMgcHJvamVjdGlvbk1hdHJpeDsnLFxuXG4gICAgICAgICd1bmlmb3JtIHZlYzQgdUZyYW1lOycsXG4gICAgICAgICd1bmlmb3JtIHZlYzQgdVRyYW5zZm9ybTsnLFxuXG4gICAgICAgICd2YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDsnLFxuICAgICAgICAndmFyeWluZyB2ZWM0IHZDb2xvcjsnLFxuXG4gICAgICAgICd2b2lkIG1haW4odm9pZCl7JyxcbiAgICAgICAgJyAgIGdsX1Bvc2l0aW9uID0gdmVjNCgocHJvamVjdGlvbk1hdHJpeCAqIHZlYzMoYVZlcnRleFBvc2l0aW9uLCAxLjApKS54eSwgMC4wLCAxLjApOycsXG5cbiAgICAgICAgJyAgIHZlYzIgY29vcmQgPSBhVGV4dHVyZUNvb3JkOycsXG4gICAgICAgICcgICBjb29yZCAtPSB1VHJhbnNmb3JtLnh5OycsXG4gICAgICAgICcgICBjb29yZCAvPSB1VHJhbnNmb3JtLnp3OycsXG4gICAgICAgICcgICB2VGV4dHVyZUNvb3JkID0gY29vcmQ7JyxcblxuICAgICAgICAnICAgdkNvbG9yID0gdmVjNChhQ29sb3IucmdiICogYUNvbG9yLmEsIGFDb2xvci5hKTsnLFxuICAgICAgICAnfSdcbiAgICAgIF0uam9pbignXFxuJyksXG4gICAgICBbXG4gICAgICAgICdwcmVjaXNpb24gbG93cCBmbG9hdDsnLFxuXG4gICAgICAgICd2YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDsnLFxuICAgICAgICAndmFyeWluZyB2ZWM0IHZDb2xvcjsnLFxuXG4gICAgICAgICd1bmlmb3JtIHNhbXBsZXIyRCB1U2FtcGxlcjsnLFxuICAgICAgICAndW5pZm9ybSB2ZWM0IHVGcmFtZTsnLFxuICAgICAgICAndW5pZm9ybSB2ZWMyIHVQaXhlbFNpemU7JyxcblxuICAgICAgICAndm9pZCBtYWluKHZvaWQpeycsXG5cbiAgICAgICAgJyAgIHZlYzIgY29vcmQgPSBtb2QodlRleHR1cmVDb29yZCwgdUZyYW1lLnp3KTsnLFxuICAgICAgICAnICAgY29vcmQgPSBjbGFtcChjb29yZCwgdVBpeGVsU2l6ZSwgdUZyYW1lLnp3IC0gdVBpeGVsU2l6ZSk7JyxcbiAgICAgICAgJyAgIGNvb3JkICs9IHVGcmFtZS54eTsnLFxuXG4gICAgICAgICcgICBnbF9GcmFnQ29sb3IgPSAgdGV4dHVyZTJEKHVTYW1wbGVyLCBjb29yZCkgKiB2Q29sb3IgOycsXG4gICAgICAgICd9J1xuICAgICAgXS5qb2luKCdcXG4nKSxcblxuICAgICAgICAgICAgLy8gc2V0IHRoZSB1bmlmb3Jtc1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHVGcmFtZTogeyB0eXBlOiAnNGZ2JywgdmFsdWU6IFswLDAsMSwxXSB9LFxuICAgICAgICAgICAgICAgIHVUcmFuc2Zvcm06IHsgdHlwZTogJzRmdicsIHZhbHVlOiBbMCwwLDEsMV0gfSxcbiAgICAgICAgICAgICAgICB1UGl4ZWxTaXplIDogeyB0eXBlIDogJzJmdicsIHZhbHVlOiBbMSwgMV19XG4gICAgICAgICAgICB9XG4gICAgICApO1xufVxuXG5UaWxpbmdTcHJpdGUucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShjb3JlLlNwcml0ZS5wcm90b3R5cGUpO1xuVGlsaW5nU3ByaXRlLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFRpbGluZ1Nwcml0ZTtcbm1vZHVsZS5leHBvcnRzID0gVGlsaW5nU3ByaXRlO1xuXG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKFRpbGluZ1Nwcml0ZS5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBUaGUgd2lkdGggb2YgdGhlIHNwcml0ZSwgc2V0dGluZyB0aGlzIHdpbGwgYWN0dWFsbHkgbW9kaWZ5IHRoZSBzY2FsZSB0byBhY2hpZXZlIHRoZSB2YWx1ZSBzZXRcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5leHRyYXMuVGlsaW5nU3ByaXRlI1xuICAgICAqL1xuICAgIHdpZHRoOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3dpZHRoO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5fd2lkdGggPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBUaGUgaGVpZ2h0IG9mIHRoZSBUaWxpbmdTcHJpdGUsIHNldHRpbmcgdGhpcyB3aWxsIGFjdHVhbGx5IG1vZGlmeSB0aGUgc2NhbGUgdG8gYWNoaWV2ZSB0aGUgdmFsdWUgc2V0XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZXh0cmFzLlRpbGluZ1Nwcml0ZSNcbiAgICAgKi9cbiAgICBoZWlnaHQ6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5faGVpZ2h0O1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5faGVpZ2h0ID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG59KTtcblxuVGlsaW5nU3ByaXRlLnByb3RvdHlwZS5fb25UZXh0dXJlVXBkYXRlID0gZnVuY3Rpb24gKClcbntcbiAgICByZXR1cm47XG59O1xuXG5cbi8qKlxuICogUmVuZGVycyB0aGUgb2JqZWN0IHVzaW5nIHRoZSBXZWJHTCByZW5kZXJlclxuICpcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5XZWJHTFJlbmRlcmVyfVxuICogQHByaXZhdGVcbiAqL1xuVGlsaW5nU3ByaXRlLnByb3RvdHlwZS5fcmVuZGVyV2ViR0wgPSBmdW5jdGlvbiAocmVuZGVyZXIpXG57XG4gICAgLy8gdHdlYWsgb3VyIHRleHR1cmUgdGVtcG9yYXJpbHkuLlxuICAgIHZhciB0ZXh0dXJlID0gdGhpcy5fdGV4dHVyZTtcblxuICAgIGlmKCF0ZXh0dXJlIHx8ICF0ZXh0dXJlLl91dnMpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFyIHRlbXBVdnMgPSB0ZXh0dXJlLl91dnMsXG4gICAgICAgIHRlbXBXaWR0aCA9IHRleHR1cmUuX2ZyYW1lLndpZHRoLFxuICAgICAgICB0ZW1wSGVpZ2h0ID0gdGV4dHVyZS5fZnJhbWUuaGVpZ2h0LFxuICAgICAgICB0dyA9IHRleHR1cmUuYmFzZVRleHR1cmUud2lkdGgsXG4gICAgICAgIHRoID0gdGV4dHVyZS5iYXNlVGV4dHVyZS5oZWlnaHQ7XG5cbiAgICB0ZXh0dXJlLl91dnMgPSB0aGlzLl91dnM7XG4gICAgdGV4dHVyZS5fZnJhbWUud2lkdGggPSB0aGlzLndpZHRoO1xuICAgIHRleHR1cmUuX2ZyYW1lLmhlaWdodCA9IHRoaXMuaGVpZ2h0O1xuXG4gICAgdGhpcy5zaGFkZXIudW5pZm9ybXMudVBpeGVsU2l6ZS52YWx1ZVswXSA9IDEuMC90dztcbiAgICB0aGlzLnNoYWRlci51bmlmb3Jtcy51UGl4ZWxTaXplLnZhbHVlWzFdID0gMS4wL3RoO1xuXG4gICAgdGhpcy5zaGFkZXIudW5pZm9ybXMudUZyYW1lLnZhbHVlWzBdID0gdGVtcFV2cy54MDtcbiAgICB0aGlzLnNoYWRlci51bmlmb3Jtcy51RnJhbWUudmFsdWVbMV0gPSB0ZW1wVXZzLnkwO1xuICAgIHRoaXMuc2hhZGVyLnVuaWZvcm1zLnVGcmFtZS52YWx1ZVsyXSA9IHRlbXBVdnMueDEgLSB0ZW1wVXZzLngwO1xuICAgIHRoaXMuc2hhZGVyLnVuaWZvcm1zLnVGcmFtZS52YWx1ZVszXSA9IHRlbXBVdnMueTIgLSB0ZW1wVXZzLnkwO1xuXG4gICAgdGhpcy5zaGFkZXIudW5pZm9ybXMudVRyYW5zZm9ybS52YWx1ZVswXSA9ICh0aGlzLnRpbGVQb3NpdGlvbi54ICUgKHRlbXBXaWR0aCAqIHRoaXMudGlsZVNjYWxlLngpKSAvIHRoaXMuX3dpZHRoO1xuICAgIHRoaXMuc2hhZGVyLnVuaWZvcm1zLnVUcmFuc2Zvcm0udmFsdWVbMV0gPSAodGhpcy50aWxlUG9zaXRpb24ueSAlICh0ZW1wSGVpZ2h0ICogdGhpcy50aWxlU2NhbGUueSkpIC8gdGhpcy5faGVpZ2h0O1xuICAgIHRoaXMuc2hhZGVyLnVuaWZvcm1zLnVUcmFuc2Zvcm0udmFsdWVbMl0gPSAoIHR3IC8gdGhpcy5fd2lkdGggKSAqIHRoaXMudGlsZVNjYWxlLng7XG4gICAgdGhpcy5zaGFkZXIudW5pZm9ybXMudVRyYW5zZm9ybS52YWx1ZVszXSA9ICggdGggLyB0aGlzLl9oZWlnaHQgKSAqIHRoaXMudGlsZVNjYWxlLnk7XG5cbiAgICByZW5kZXJlci5zZXRPYmplY3RSZW5kZXJlcihyZW5kZXJlci5wbHVnaW5zLnNwcml0ZSk7XG4gICAgcmVuZGVyZXIucGx1Z2lucy5zcHJpdGUucmVuZGVyKHRoaXMpO1xuXG4gICAgdGV4dHVyZS5fdXZzID0gdGVtcFV2cztcbiAgICB0ZXh0dXJlLl9mcmFtZS53aWR0aCA9IHRlbXBXaWR0aDtcbiAgICB0ZXh0dXJlLl9mcmFtZS5oZWlnaHQgPSB0ZW1wSGVpZ2h0O1xufTtcblxuLyoqXG4gKiBSZW5kZXJzIHRoZSBvYmplY3QgdXNpbmcgdGhlIENhbnZhcyByZW5kZXJlclxuICpcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5DYW52YXNSZW5kZXJlcn0gYSByZWZlcmVuY2UgdG8gdGhlIGNhbnZhcyByZW5kZXJlclxuICogQHByaXZhdGVcbiAqL1xuVGlsaW5nU3ByaXRlLnByb3RvdHlwZS5fcmVuZGVyQ2FudmFzID0gZnVuY3Rpb24gKHJlbmRlcmVyKVxue1xuICAgIHZhciB0ZXh0dXJlID0gdGhpcy5fdGV4dHVyZTtcblxuICAgIGlmICghdGV4dHVyZS5iYXNlVGV4dHVyZS5oYXNMb2FkZWQpXG4gICAge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHZhciBjb250ZXh0ID0gcmVuZGVyZXIuY29udGV4dCxcbiAgICAgICAgdHJhbnNmb3JtID0gdGhpcy53b3JsZFRyYW5zZm9ybSxcbiAgICAgICAgcmVzb2x1dGlvbiA9IHJlbmRlcmVyLnJlc29sdXRpb24sXG4gICAgICAgIGJhc2VUZXh0dXJlID0gdGV4dHVyZS5iYXNlVGV4dHVyZSxcbiAgICAgICAgbW9kWCA9ICh0aGlzLnRpbGVQb3NpdGlvbi54IC8gdGhpcy50aWxlU2NhbGUueCkgJSB0ZXh0dXJlLl9mcmFtZS53aWR0aCxcbiAgICAgICAgbW9kWSA9ICh0aGlzLnRpbGVQb3NpdGlvbi55IC8gdGhpcy50aWxlU2NhbGUueSkgJSB0ZXh0dXJlLl9mcmFtZS5oZWlnaHQ7XG5cbiAgICAvLyBjcmVhdGUgYSBuaWNlIHNoaW55IHBhdHRlcm4hXG4gICAgLy8gVE9ETyB0aGlzIG5lZWRzIHRvIGJlIHJlZnJlc2hlZCBpZiB0ZXh0dXJlIGNoYW5nZXMuLlxuICAgIGlmKCF0aGlzLl9jYW52YXNQYXR0ZXJuKVxuICAgIHtcbiAgICAgICAgLy8gY3V0IGFuIG9iamVjdCBmcm9tIGEgc3ByaXRlc2hlZXQuLlxuICAgICAgICB2YXIgdGVtcENhbnZhcyA9IG5ldyBjb3JlLkNhbnZhc0J1ZmZlcih0ZXh0dXJlLl9mcmFtZS53aWR0aCwgdGV4dHVyZS5fZnJhbWUuaGVpZ2h0KTtcblxuICAgICAgICAvLyBUaW50IHRoZSB0aWxpbmcgc3ByaXRlXG4gICAgICAgIGlmICh0aGlzLnRpbnQgIT09IDB4RkZGRkZGKVxuICAgICAgICB7XG4gICAgICAgICAgICBpZiAodGhpcy5jYWNoZWRUaW50ICE9PSB0aGlzLnRpbnQpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdGhpcy5jYWNoZWRUaW50ID0gdGhpcy50aW50O1xuXG4gICAgICAgICAgICAgICAgdGhpcy50aW50ZWRUZXh0dXJlID0gQ2FudmFzVGludGVyLmdldFRpbnRlZFRleHR1cmUodGhpcywgdGhpcy50aW50KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRlbXBDYW52YXMuY29udGV4dC5kcmF3SW1hZ2UodGhpcy50aW50ZWRUZXh0dXJlLCAwLCAwKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRlbXBDYW52YXMuY29udGV4dC5kcmF3SW1hZ2UoYmFzZVRleHR1cmUuc291cmNlLCAtdGV4dHVyZS5fZnJhbWUueCwgLXRleHR1cmUuX2ZyYW1lLnkpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX2NhbnZhc1BhdHRlcm4gPSB0ZW1wQ2FudmFzLmNvbnRleHQuY3JlYXRlUGF0dGVybiggdGVtcENhbnZhcy5jYW52YXMsICdyZXBlYXQnICk7XG4gICAgfVxuXG4gICAgLy8gc2V0IGNvbnRleHQgc3RhdGUuLlxuICAgIGNvbnRleHQuZ2xvYmFsQWxwaGEgPSB0aGlzLndvcmxkQWxwaGE7XG4gICAgY29udGV4dC5zZXRUcmFuc2Zvcm0odHJhbnNmb3JtLmEgKiByZXNvbHV0aW9uLFxuICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2Zvcm0uYiAqIHJlc29sdXRpb24sXG4gICAgICAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybS5jICogcmVzb2x1dGlvbixcbiAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtLmQgKiByZXNvbHV0aW9uLFxuICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2Zvcm0udHggKiByZXNvbHV0aW9uLFxuICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2Zvcm0udHkgKiByZXNvbHV0aW9uKTtcblxuICAgIC8vIFRPRE8gLSB0aGlzIHNob3VsZCBiZSByb2xsZWQgaW50byB0aGUgc2V0VHJhbnNmb3JtIGFib3ZlLi5cbiAgICBjb250ZXh0LnNjYWxlKHRoaXMudGlsZVNjYWxlLngsdGhpcy50aWxlU2NhbGUueSk7XG5cbiAgICBjb250ZXh0LnRyYW5zbGF0ZShtb2RYICsgKHRoaXMuYW5jaG9yLnggKiAtdGhpcy5fd2lkdGggKSxcbiAgICAgICAgICAgICAgICAgICAgICBtb2RZICsgKHRoaXMuYW5jaG9yLnkgKiAtdGhpcy5faGVpZ2h0KSk7XG5cbiAgICAvLyBjaGVjayBibGVuZCBtb2RlXG4gICAgdmFyIGNvbXBvc2l0ZU9wZXJhdGlvbiA9IHJlbmRlcmVyLmJsZW5kTW9kZXNbdGhpcy5ibGVuZE1vZGVdO1xuICAgIGlmIChjb21wb3NpdGVPcGVyYXRpb24gIT09IHJlbmRlcmVyLmNvbnRleHQuZ2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uKVxuICAgIHtcbiAgICAgICAgY29udGV4dC5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb24gPSBjb21wb3NpdGVPcGVyYXRpb247XG4gICAgfVxuXG4gICAgLy8gZmlsbCB0aGUgcGF0dGVybiFcbiAgICBjb250ZXh0LmZpbGxTdHlsZSA9IHRoaXMuX2NhbnZhc1BhdHRlcm47XG4gICAgY29udGV4dC5maWxsUmVjdCgtbW9kWCxcbiAgICAgICAgICAgICAgICAgICAgIC1tb2RZLFxuICAgICAgICAgICAgICAgICAgICAgdGhpcy5fd2lkdGggLyB0aGlzLnRpbGVTY2FsZS54LFxuICAgICAgICAgICAgICAgICAgICAgdGhpcy5faGVpZ2h0IC8gdGhpcy50aWxlU2NhbGUueSk7XG5cblxuICAgIC8vVE9ETyAtIHByZXR0eSBzdXJlIHRoaXMgY2FuIGJlIGRlbGV0ZWQuLi5cbiAgICAvL2NvbnRleHQudHJhbnNsYXRlKC10aGlzLnRpbGVQb3NpdGlvbi54ICsgKHRoaXMuYW5jaG9yLnggKiB0aGlzLl93aWR0aCksIC10aGlzLnRpbGVQb3NpdGlvbi55ICsgKHRoaXMuYW5jaG9yLnkgKiB0aGlzLl9oZWlnaHQpKTtcbiAgICAvL2NvbnRleHQuc2NhbGUoMSAvIHRoaXMudGlsZVNjYWxlLngsIDEgLyB0aGlzLnRpbGVTY2FsZS55KTtcbn07XG5cblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBmcmFtaW5nIHJlY3RhbmdsZSBvZiB0aGUgc3ByaXRlIGFzIGEgUmVjdGFuZ2xlIG9iamVjdFxuKlxuICogQHJldHVybiB7UElYSS5SZWN0YW5nbGV9IHRoZSBmcmFtaW5nIHJlY3RhbmdsZVxuICovXG5UaWxpbmdTcHJpdGUucHJvdG90eXBlLmdldEJvdW5kcyA9IGZ1bmN0aW9uICgpXG57XG4gICAgdmFyIHdpZHRoID0gdGhpcy5fd2lkdGg7XG4gICAgdmFyIGhlaWdodCA9IHRoaXMuX2hlaWdodDtcblxuICAgIHZhciB3MCA9IHdpZHRoICogKDEtdGhpcy5hbmNob3IueCk7XG4gICAgdmFyIHcxID0gd2lkdGggKiAtdGhpcy5hbmNob3IueDtcblxuICAgIHZhciBoMCA9IGhlaWdodCAqICgxLXRoaXMuYW5jaG9yLnkpO1xuICAgIHZhciBoMSA9IGhlaWdodCAqIC10aGlzLmFuY2hvci55O1xuXG4gICAgdmFyIHdvcmxkVHJhbnNmb3JtID0gdGhpcy53b3JsZFRyYW5zZm9ybTtcblxuICAgIHZhciBhID0gd29ybGRUcmFuc2Zvcm0uYTtcbiAgICB2YXIgYiA9IHdvcmxkVHJhbnNmb3JtLmI7XG4gICAgdmFyIGMgPSB3b3JsZFRyYW5zZm9ybS5jO1xuICAgIHZhciBkID0gd29ybGRUcmFuc2Zvcm0uZDtcbiAgICB2YXIgdHggPSB3b3JsZFRyYW5zZm9ybS50eDtcbiAgICB2YXIgdHkgPSB3b3JsZFRyYW5zZm9ybS50eTtcblxuICAgIHZhciB4MSA9IGEgKiB3MSArIGMgKiBoMSArIHR4O1xuICAgIHZhciB5MSA9IGQgKiBoMSArIGIgKiB3MSArIHR5O1xuXG4gICAgdmFyIHgyID0gYSAqIHcwICsgYyAqIGgxICsgdHg7XG4gICAgdmFyIHkyID0gZCAqIGgxICsgYiAqIHcwICsgdHk7XG5cbiAgICB2YXIgeDMgPSBhICogdzAgKyBjICogaDAgKyB0eDtcbiAgICB2YXIgeTMgPSBkICogaDAgKyBiICogdzAgKyB0eTtcblxuICAgIHZhciB4NCA9ICBhICogdzEgKyBjICogaDAgKyB0eDtcbiAgICB2YXIgeTQgPSAgZCAqIGgwICsgYiAqIHcxICsgdHk7XG5cbiAgICB2YXIgbWluWCxcbiAgICAgICAgbWF4WCxcbiAgICAgICAgbWluWSxcbiAgICAgICAgbWF4WTtcblxuICAgIG1pblggPSB4MTtcbiAgICBtaW5YID0geDIgPCBtaW5YID8geDIgOiBtaW5YO1xuICAgIG1pblggPSB4MyA8IG1pblggPyB4MyA6IG1pblg7XG4gICAgbWluWCA9IHg0IDwgbWluWCA/IHg0IDogbWluWDtcblxuICAgIG1pblkgPSB5MTtcbiAgICBtaW5ZID0geTIgPCBtaW5ZID8geTIgOiBtaW5ZO1xuICAgIG1pblkgPSB5MyA8IG1pblkgPyB5MyA6IG1pblk7XG4gICAgbWluWSA9IHk0IDwgbWluWSA/IHk0IDogbWluWTtcblxuICAgIG1heFggPSB4MTtcbiAgICBtYXhYID0geDIgPiBtYXhYID8geDIgOiBtYXhYO1xuICAgIG1heFggPSB4MyA+IG1heFggPyB4MyA6IG1heFg7XG4gICAgbWF4WCA9IHg0ID4gbWF4WCA/IHg0IDogbWF4WDtcblxuICAgIG1heFkgPSB5MTtcbiAgICBtYXhZID0geTIgPiBtYXhZID8geTIgOiBtYXhZO1xuICAgIG1heFkgPSB5MyA+IG1heFkgPyB5MyA6IG1heFk7XG4gICAgbWF4WSA9IHk0ID4gbWF4WSA/IHk0IDogbWF4WTtcblxuICAgIHZhciBib3VuZHMgPSB0aGlzLl9ib3VuZHM7XG5cbiAgICBib3VuZHMueCA9IG1pblg7XG4gICAgYm91bmRzLndpZHRoID0gbWF4WCAtIG1pblg7XG5cbiAgICBib3VuZHMueSA9IG1pblk7XG4gICAgYm91bmRzLmhlaWdodCA9IG1heFkgLSBtaW5ZO1xuXG4gICAgLy8gc3RvcmUgYSByZWZlcmVuY2Ugc28gdGhhdCBpZiB0aGlzIGZ1bmN0aW9uIGdldHMgY2FsbGVkIGFnYWluIGluIHRoZSByZW5kZXIgY3ljbGUgd2UgZG8gbm90IGhhdmUgdG8gcmVjYWxjdWxhdGVcbiAgICB0aGlzLl9jdXJyZW50Qm91bmRzID0gYm91bmRzO1xuXG4gICAgcmV0dXJuIGJvdW5kcztcbn07XG5cbi8qKlxuICogQ2hlY2tzIGlmIGEgcG9pbnQgaXMgaW5zaWRlIHRoaXMgdGlsaW5nIHNwcml0ZVxuICogQHBhcmFtIHBvaW50IHtQSVhJLlBvaW50fSB0aGUgcG9pbnQgdG8gY2hlY2tcbiAqL1xuVGlsaW5nU3ByaXRlLnByb3RvdHlwZS5jb250YWluc1BvaW50ID0gZnVuY3Rpb24oIHBvaW50IClcbntcbiAgICB0aGlzLndvcmxkVHJhbnNmb3JtLmFwcGx5SW52ZXJzZShwb2ludCwgIHRlbXBQb2ludCk7XG5cbiAgICB2YXIgd2lkdGggPSB0aGlzLl93aWR0aDtcbiAgICB2YXIgaGVpZ2h0ID0gdGhpcy5faGVpZ2h0O1xuICAgIHZhciB4MSA9IC13aWR0aCAqIHRoaXMuYW5jaG9yLng7XG4gICAgdmFyIHkxO1xuXG4gICAgaWYgKCB0ZW1wUG9pbnQueCA+IHgxICYmIHRlbXBQb2ludC54IDwgeDEgKyB3aWR0aCApXG4gICAge1xuICAgICAgICB5MSA9IC1oZWlnaHQgKiB0aGlzLmFuY2hvci55O1xuXG4gICAgICAgIGlmICggdGVtcFBvaW50LnkgPiB5MSAmJiB0ZW1wUG9pbnQueSA8IHkxICsgaGVpZ2h0IClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2U7XG59O1xuXG4vKipcbiAqIERlc3Ryb3lzIHRoaXMgdGlsaW5nIHNwcml0ZVxuICpcbiAqL1xuVGlsaW5nU3ByaXRlLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKCkge1xuICAgIGNvcmUuU3ByaXRlLnByb3RvdHlwZS5kZXN0cm95LmNhbGwodGhpcyk7XG5cbiAgICB0aGlzLnRpbGVTY2FsZSA9IG51bGw7XG4gICAgdGhpcy5fdGlsZVNjYWxlT2Zmc2V0ID0gbnVsbDtcbiAgICB0aGlzLnRpbGVQb3NpdGlvbiA9IG51bGw7XG5cbiAgICB0aGlzLl91dnMgPSBudWxsO1xufTtcblxuLyoqXG4gKiBIZWxwZXIgZnVuY3Rpb24gdGhhdCBjcmVhdGVzIGEgdGlsaW5nIHNwcml0ZSB0aGF0IHdpbGwgdXNlIGEgdGV4dHVyZSBmcm9tIHRoZSBUZXh0dXJlQ2FjaGUgYmFzZWQgb24gdGhlIGZyYW1lSWRcbiAqIFRoZSBmcmFtZSBpZHMgYXJlIGNyZWF0ZWQgd2hlbiBhIFRleHR1cmUgcGFja2VyIGZpbGUgaGFzIGJlZW4gbG9hZGVkXG4gKlxuICogQHN0YXRpY1xuICogQHBhcmFtIGZyYW1lSWQge3N0cmluZ30gVGhlIGZyYW1lIElkIG9mIHRoZSB0ZXh0dXJlIGluIHRoZSBjYWNoZVxuICogQHJldHVybiB7UElYSS5leHRyYXMuVGlsaW5nU3ByaXRlfSBBIG5ldyBUaWxpbmdTcHJpdGUgdXNpbmcgYSB0ZXh0dXJlIGZyb20gdGhlIHRleHR1cmUgY2FjaGUgbWF0Y2hpbmcgdGhlIGZyYW1lSWRcbiAqIEBwYXJhbSB3aWR0aCB7bnVtYmVyfSAgdGhlIHdpZHRoIG9mIHRoZSB0aWxpbmcgc3ByaXRlXG4gKiBAcGFyYW0gaGVpZ2h0IHtudW1iZXJ9IHRoZSBoZWlnaHQgb2YgdGhlIHRpbGluZyBzcHJpdGVcbiAqL1xuVGlsaW5nU3ByaXRlLmZyb21GcmFtZSA9IGZ1bmN0aW9uIChmcmFtZUlkLHdpZHRoLGhlaWdodClcbntcbiAgICB2YXIgdGV4dHVyZSA9IGNvcmUudXRpbHMuVGV4dHVyZUNhY2hlW2ZyYW1lSWRdO1xuXG4gICAgaWYgKCF0ZXh0dXJlKVxuICAgIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdUaGUgZnJhbWVJZCBcIicgKyBmcmFtZUlkICsgJ1wiIGRvZXMgbm90IGV4aXN0IGluIHRoZSB0ZXh0dXJlIGNhY2hlICcgKyB0aGlzKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IFRpbGluZ1Nwcml0ZSh0ZXh0dXJlLHdpZHRoLGhlaWdodCk7XG59O1xuXG4vKipcbiAqIEhlbHBlciBmdW5jdGlvbiB0aGF0IGNyZWF0ZXMgYSBzcHJpdGUgdGhhdCB3aWxsIGNvbnRhaW4gYSB0ZXh0dXJlIGJhc2VkIG9uIGFuIGltYWdlIHVybFxuICogSWYgdGhlIGltYWdlIGlzIG5vdCBpbiB0aGUgdGV4dHVyZSBjYWNoZSBpdCB3aWxsIGJlIGxvYWRlZFxuICpcbiAqIEBzdGF0aWNcbiAqIEBwYXJhbSBpbWFnZUlkIHtzdHJpbmd9IFRoZSBpbWFnZSB1cmwgb2YgdGhlIHRleHR1cmVcbiAqIEBwYXJhbSB3aWR0aCB7bnVtYmVyfSAgdGhlIHdpZHRoIG9mIHRoZSB0aWxpbmcgc3ByaXRlXG4gKiBAcGFyYW0gaGVpZ2h0IHtudW1iZXJ9IHRoZSBoZWlnaHQgb2YgdGhlIHRpbGluZyBzcHJpdGVcbiAqIEBwYXJhbSBbY3Jvc3NvcmlnaW49KGF1dG8pXSB7Ym9vbGVhbn0gaWYgeW91IHdhbnQgdG8gc3BlY2lmeSB0aGUgY3Jvc3Mtb3JpZ2luIHBhcmFtZXRlclxuICogQHBhcmFtIFtzY2FsZU1vZGU9UElYSS5TQ0FMRV9NT0RFUy5ERUZBVUxUXSB7bnVtYmVyfSBpZiB5b3Ugd2FudCB0byBzcGVjaWZ5IHRoZSBzY2FsZSBtb2RlLCBzZWUge0BsaW5rIFBJWEkuU0NBTEVfTU9ERVN9IGZvciBwb3NzaWJsZSB2YWx1ZXNcbiAqIEByZXR1cm4ge1BJWEkuZXh0cmFzLlRpbGluZ1Nwcml0ZX0gQSBuZXcgVGlsaW5nU3ByaXRlIHVzaW5nIGEgdGV4dHVyZSBmcm9tIHRoZSB0ZXh0dXJlIGNhY2hlIG1hdGNoaW5nIHRoZSBpbWFnZSBpZFxuICovXG5UaWxpbmdTcHJpdGUuZnJvbUltYWdlID0gZnVuY3Rpb24gKGltYWdlSWQsIHdpZHRoLCBoZWlnaHQsIGNyb3Nzb3JpZ2luLCBzY2FsZU1vZGUpXG57XG4gICAgcmV0dXJuIG5ldyBUaWxpbmdTcHJpdGUoY29yZS5UZXh0dXJlLmZyb21JbWFnZShpbWFnZUlkLCBjcm9zc29yaWdpbiwgc2NhbGVNb2RlKSx3aWR0aCxoZWlnaHQpO1xufTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vY29yZScpLFxuICAgIERpc3BsYXlPYmplY3QgPSBjb3JlLkRpc3BsYXlPYmplY3QsXG4gICAgX3RlbXBNYXRyaXggPSBuZXcgY29yZS5NYXRyaXgoKTtcblxuRGlzcGxheU9iamVjdC5wcm90b3R5cGUuX2NhY2hlQXNCaXRtYXAgPSBmYWxzZTtcbkRpc3BsYXlPYmplY3QucHJvdG90eXBlLl9vcmlnaW5hbFJlbmRlcldlYkdMID0gbnVsbDtcbkRpc3BsYXlPYmplY3QucHJvdG90eXBlLl9vcmlnaW5hbFJlbmRlckNhbnZhcyA9IG51bGw7XG5cbkRpc3BsYXlPYmplY3QucHJvdG90eXBlLl9vcmlnaW5hbFVwZGF0ZVRyYW5zZm9ybSA9IG51bGw7XG5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS5fb3JpZ2luYWxIaXRUZXN0ID0gbnVsbDtcbkRpc3BsYXlPYmplY3QucHJvdG90eXBlLl9vcmlnaW5hbERlc3Ryb3kgPSBudWxsO1xuRGlzcGxheU9iamVjdC5wcm90b3R5cGUuX2NhY2hlZFNwcml0ZSA9IG51bGw7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKERpc3BsYXlPYmplY3QucHJvdG90eXBlLCB7XG5cbiAgICAvKipcbiAgICAgKiBTZXQgdGhpcyB0byB0cnVlIGlmIHlvdSB3YW50IHRoaXMgZGlzcGxheSBvYmplY3QgdG8gYmUgY2FjaGVkIGFzIGEgYml0bWFwLlxuICAgICAqIFRoaXMgYmFzaWNhbGx5IHRha2VzIGEgc25hcCBzaG90IG9mIHRoZSBkaXNwbGF5IG9iamVjdCBhcyBpdCBpcyBhdCB0aGF0IG1vbWVudC4gSXQgY2FuIHByb3ZpZGUgYSBwZXJmb3JtYW5jZSBiZW5lZml0IGZvciBjb21wbGV4IHN0YXRpYyBkaXNwbGF5T2JqZWN0cy5cbiAgICAgKiBUbyByZW1vdmUgc2ltcGx5IHNldCB0aGlzIHByb3BlcnR5IHRvICdmYWxzZSdcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICogQG1lbWJlcm9mIFBJWEkuRGlzcGxheU9iamVjdCNcbiAgICAgKi9cbiAgICBjYWNoZUFzQml0bWFwOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2NhY2hlQXNCaXRtYXA7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICBpZiAodGhpcy5fY2FjaGVBc0JpdG1hcCA9PT0gdmFsdWUpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLl9jYWNoZUFzQml0bWFwID0gdmFsdWU7XG5cbiAgICAgICAgICAgIGlmICh2YWx1ZSlcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9vcmlnaW5hbFJlbmRlcldlYkdMID0gdGhpcy5yZW5kZXJXZWJHTDtcbiAgICAgICAgICAgICAgICB0aGlzLl9vcmlnaW5hbFJlbmRlckNhbnZhcyA9IHRoaXMucmVuZGVyQ2FudmFzO1xuXG4gICAgICAgICAgICAgICAgdGhpcy5fb3JpZ2luYWxVcGRhdGVUcmFuc2Zvcm0gPSB0aGlzLnVwZGF0ZVRyYW5zZm9ybTtcbiAgICAgICAgICAgICAgICB0aGlzLl9vcmlnaW5hbEdldEJvdW5kcyA9IHRoaXMuZ2V0Qm91bmRzO1xuXG4gICAgICAgICAgICAgICAgdGhpcy5fb3JpZ2luYWxEZXN0cm95ID0gdGhpcy5kZXN0cm95O1xuXG4gICAgICAgICAgICAgICAgdGhpcy5fb3JpZ2luYWxDb250YWluc1BvaW50ID0gdGhpcy5jb250YWluc1BvaW50O1xuXG4gICAgICAgICAgICAgICAgdGhpcy5yZW5kZXJXZWJHTCA9IHRoaXMuX3JlbmRlckNhY2hlZFdlYkdMO1xuICAgICAgICAgICAgICAgIHRoaXMucmVuZGVyQ2FudmFzID0gdGhpcy5fcmVuZGVyQ2FjaGVkQ2FudmFzO1xuXG4gICAgICAgICAgICAgICAgdGhpcy5kZXN0cm95ID0gdGhpcy5fY2FjaGVBc0JpdG1hcERlc3Ryb3k7XG5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5fY2FjaGVkU3ByaXRlKVxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fZGVzdHJveUNhY2hlZERpc3BsYXlPYmplY3QoKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB0aGlzLnJlbmRlcldlYkdMID0gdGhpcy5fb3JpZ2luYWxSZW5kZXJXZWJHTDtcbiAgICAgICAgICAgICAgICB0aGlzLnJlbmRlckNhbnZhcyA9IHRoaXMuX29yaWdpbmFsUmVuZGVyQ2FudmFzO1xuICAgICAgICAgICAgICAgIHRoaXMuZ2V0Qm91bmRzID0gdGhpcy5fb3JpZ2luYWxHZXRCb3VuZHM7XG5cbiAgICAgICAgICAgICAgICB0aGlzLmRlc3Ryb3kgPSB0aGlzLl9vcmlnaW5hbERlc3Ryb3k7XG5cbiAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZVRyYW5zZm9ybSA9IHRoaXMuX29yaWdpbmFsVXBkYXRlVHJhbnNmb3JtO1xuICAgICAgICAgICAgICAgIHRoaXMuY29udGFpbnNQb2ludCA9IHRoaXMuX29yaWdpbmFsQ29udGFpbnNQb2ludDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn0pO1xuLyoqXG4qIFJlbmRlcnMgYSBjYWNoZWQgdmVyc2lvbiBvZiB0aGUgc3ByaXRlIHdpdGggV2ViR0xcbipcbiogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLldlYkdMUmVuZGVyZXJ9IHRoZSBXZWJHTCByZW5kZXJlclxuKiBAcHJpdmF0ZVxuKi9cbkRpc3BsYXlPYmplY3QucHJvdG90eXBlLl9yZW5kZXJDYWNoZWRXZWJHTCA9IGZ1bmN0aW9uIChyZW5kZXJlcilcbntcbiAgICBpZiAoIXRoaXMudmlzaWJsZSB8fCB0aGlzLndvcmxkQWxwaGEgPD0gMCB8fCAhdGhpcy5yZW5kZXJhYmxlKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuX2luaXRDYWNoZWREaXNwbGF5T2JqZWN0KCByZW5kZXJlciApO1xuXG4gICAgdGhpcy5fY2FjaGVkU3ByaXRlLndvcmxkQWxwaGEgPSB0aGlzLndvcmxkQWxwaGE7XG5cbiAgICByZW5kZXJlci5zZXRPYmplY3RSZW5kZXJlcihyZW5kZXJlci5wbHVnaW5zLnNwcml0ZSk7XG4gICAgcmVuZGVyZXIucGx1Z2lucy5zcHJpdGUucmVuZGVyKCB0aGlzLl9jYWNoZWRTcHJpdGUgKTtcbn07XG5cbi8qKlxuKiBQcmVwYXJlcyB0aGUgV2ViR0wgcmVuZGVyZXIgdG8gY2FjaGUgdGhlIHNwcml0ZVxuKlxuKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcn0gdGhlIFdlYkdMIHJlbmRlcmVyXG4qIEBwcml2YXRlXG4qL1xuRGlzcGxheU9iamVjdC5wcm90b3R5cGUuX2luaXRDYWNoZWREaXNwbGF5T2JqZWN0ID0gZnVuY3Rpb24gKHJlbmRlcmVyKVxue1xuICAgIGlmKHRoaXMuX2NhY2hlZFNwcml0ZSlcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBmaXJzdCB3ZSBmbHVzaCBhbnl0aGluZyBsZWZ0IGluIHRoZSByZW5kZXJlciAob3RoZXJ3aXNlIGl0IHdvdWxkIGdldCByZW5kZXJlZCB0byB0aGUgY2FjaGVkIHRleHR1cmUpXG4gICAgcmVuZGVyZXIuY3VycmVudFJlbmRlcmVyLmZsdXNoKCk7XG4gICAgLy90aGlzLmZpbHRlcnM9IFtdO1xuICAgIC8vIG5leHQgd2UgZmluZCB0aGUgZGltZW5zaW9ucyBvZiB0aGUgdW50cmFuc2Zvcm1lZCBvYmplY3RcbiAgICAvLyB0aGlzIGZ1bmN0aW9uIGFsc28gY2FsbHMgdXBkYXRldHJhbnNmb3JtIG9uIGFsbCBpdHMgY2hpbGRyZW4gYXMgcGFydCBvZiB0aGUgbWVhc3VyaW5nLiBUaGlzIG1lYW5zIHdlIGRvbid0IG5lZWQgdG8gdXBkYXRlIHRoZSB0cmFuc2Zvcm0gYWdhaW4gaW4gdGhpcyBmdW5jdGlvblxuICAgIC8vIFRPRE8gcGFzcyBhbiBvYmplY3QgdG8gY2xvbmUgdG9vPyBzYXZlcyBoYXZpbmcgdG8gY3JlYXRlIGEgbmV3IG9uZSBlYWNoIHRpbWUhXG4gICAgdmFyIGJvdW5kcyA9IHRoaXMuZ2V0TG9jYWxCb3VuZHMoKS5jbG9uZSgpO1xuXG4gICAgLy8gYWRkIHNvbWUgcGFkZGluZyFcbiAgICBpZih0aGlzLl9maWx0ZXJzKVxuICAgIHtcbiAgICAgICAgdmFyIHBhZGRpbmcgPSB0aGlzLl9maWx0ZXJzWzBdLnBhZGRpbmc7XG4gICAgICAgIGJvdW5kcy54IC09IHBhZGRpbmc7XG4gICAgICAgIGJvdW5kcy55IC09IHBhZGRpbmc7XG5cbiAgICAgICAgYm91bmRzLndpZHRoICs9IHBhZGRpbmcgKiAyO1xuICAgICAgICBib3VuZHMuaGVpZ2h0ICs9IHBhZGRpbmcgKiAyO1xuICAgIH1cblxuICAgIC8vIGZvciBub3cgd2UgY2FjaGUgdGhlIGN1cnJlbnQgcmVuZGVyVGFyZ2V0IHRoYXQgdGhlIHdlYkdMIHJlbmRlcmVyIGlzIGN1cnJlbnRseSB1c2luZy5cbiAgICAvLyB0aGlzIGNvdWxkIGJlIG1vcmUgZWxlZ2VudC4uXG4gICAgdmFyIGNhY2hlZFJlbmRlclRhcmdldCA9IHJlbmRlcmVyLmN1cnJlbnRSZW5kZXJUYXJnZXQ7XG4gICAgLy8gV2UgYWxzbyBzdG9yZSB0aGUgZmlsdGVyIHN0YWNrIC0gSSB3aWxsIGRlZmluaXRlbHkgbG9vayB0byBjaGFuZ2UgaG93IHRoaXMgd29ya3MgYSBsaXR0bGUgbGF0ZXIgZG93biB0aGUgbGluZS5cbiAgICB2YXIgc3RhY2sgPSByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLmZpbHRlclN0YWNrO1xuXG4gICAgLy8gdGhpcyByZW5kZXJUZXh0dXJlIHdpbGwgYmUgdXNlZCB0byBzdG9yZSB0aGUgY2FjaGVkIERpc3BsYXlPYmplY3RcbiAgICB2YXIgcmVuZGVyVGV4dHVyZSA9IG5ldyBjb3JlLlJlbmRlclRleHR1cmUocmVuZGVyZXIsIGJvdW5kcy53aWR0aCB8IDAsIGJvdW5kcy5oZWlnaHQgfCAwKTtcblxuICAgIC8vIG5lZWQgdG8gc2V0IC8vXG4gICAgdmFyIG0gPSBfdGVtcE1hdHJpeDtcblxuICAgIG0udHggPSAtYm91bmRzLng7XG4gICAgbS50eSA9IC1ib3VuZHMueTtcblxuXG5cbiAgICAvLyBzZXQgYWxsIHByb3BlcnRpZXMgdG8gdGhlcmUgb3JpZ2luYWwgc28gd2UgY2FuIHJlbmRlciB0byBhIHRleHR1cmVcbiAgICB0aGlzLnJlbmRlcldlYkdMID0gdGhpcy5fb3JpZ2luYWxSZW5kZXJXZWJHTDtcblxuICAgIHJlbmRlclRleHR1cmUucmVuZGVyKHRoaXMsIG0sIHRydWUsIHRydWUpO1xuXG4gICAgLy8gbm93IHJlc3RvcmUgdGhlIHN0YXRlIGJlIHNldHRpbmcgdGhlIG5ldyBwcm9wZXJ0aWVzXG4gICAgcmVuZGVyZXIuc2V0UmVuZGVyVGFyZ2V0KGNhY2hlZFJlbmRlclRhcmdldCk7XG4gICAgcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5maWx0ZXJTdGFjayA9IHN0YWNrO1xuXG4gICAgdGhpcy5yZW5kZXJXZWJHTCAgICAgPSB0aGlzLl9yZW5kZXJDYWNoZWRXZWJHTDtcbiAgICB0aGlzLnVwZGF0ZVRyYW5zZm9ybSA9IHRoaXMuZGlzcGxheU9iamVjdFVwZGF0ZVRyYW5zZm9ybTtcbiAgICB0aGlzLmdldEJvdW5kcyAgICAgICA9IHRoaXMuX2dldENhY2hlZEJvdW5kcztcblxuXG4gICAgLy8gY3JlYXRlIG91ciBjYWNoZWQgc3ByaXRlXG4gICAgdGhpcy5fY2FjaGVkU3ByaXRlID0gbmV3IGNvcmUuU3ByaXRlKHJlbmRlclRleHR1cmUpO1xuICAgIHRoaXMuX2NhY2hlZFNwcml0ZS53b3JsZFRyYW5zZm9ybSA9IHRoaXMud29ybGRUcmFuc2Zvcm07XG4gICAgdGhpcy5fY2FjaGVkU3ByaXRlLmFuY2hvci54ID0gLSggYm91bmRzLnggLyBib3VuZHMud2lkdGggKTtcbiAgICB0aGlzLl9jYWNoZWRTcHJpdGUuYW5jaG9yLnkgPSAtKCBib3VuZHMueSAvIGJvdW5kcy5oZWlnaHQgKTtcblxuICAgIC8vIHJlc3RvcmUgdGhlIHRyYW5zZm9ybSBvZiB0aGUgY2FjaGVkIHNwcml0ZSB0byBhdm9pZCB0aGUgbmFzdHkgZmxpY2tlci4uXG4gICAgdGhpcy51cGRhdGVUcmFuc2Zvcm0oKTtcblxuICAgIC8vIG1hcCB0aGUgaGl0IHRlc3QuLlxuICAgIHRoaXMuY29udGFpbnNQb2ludCA9IHRoaXMuX2NhY2hlZFNwcml0ZS5jb250YWluc1BvaW50LmJpbmQodGhpcy5fY2FjaGVkU3ByaXRlKTtcbn07XG5cbi8qKlxuKiBSZW5kZXJzIGEgY2FjaGVkIHZlcnNpb24gb2YgdGhlIHNwcml0ZSB3aXRoIGNhbnZhc1xuKlxuKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuQ2FudmFzUmVuZGVyZXJ9IHRoZSBDYW52YXMgcmVuZGVyZXJcbiogQHByaXZhdGVcbiovXG5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS5fcmVuZGVyQ2FjaGVkQ2FudmFzID0gZnVuY3Rpb24gKHJlbmRlcmVyKVxue1xuICAgIGlmICghdGhpcy52aXNpYmxlIHx8IHRoaXMud29ybGRBbHBoYSA8PSAwIHx8ICF0aGlzLnJlbmRlcmFibGUpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5faW5pdENhY2hlZERpc3BsYXlPYmplY3RDYW52YXMoIHJlbmRlcmVyICk7XG5cbiAgICB0aGlzLl9jYWNoZWRTcHJpdGUud29ybGRBbHBoYSA9IHRoaXMud29ybGRBbHBoYTtcblxuICAgIHRoaXMuX2NhY2hlZFNwcml0ZS5yZW5kZXJDYW52YXMocmVuZGVyZXIpO1xufTtcblxuLy9UT0RPIHRoaXMgY2FuIGJlIHRoZSBzYW1lIGFzIHRoZSB3ZWJHTCB2ZXJpc29uLi4gd2lsbCBuZWVkIHRvIGRvIGEgbGl0dGxlIHR3ZWFraW5nIGZpcnN0IHRob3VnaC4uXG4vKipcbiogUHJlcGFyZXMgdGhlIENhbnZhcyByZW5kZXJlciB0byBjYWNoZSB0aGUgc3ByaXRlXG4qXG4qIEBwYXJhbSByZW5kZXJlciB7UElYSS5DYW52YXNSZW5kZXJlcn0gdGhlIENhbnZhcyByZW5kZXJlclxuKiBAcHJpdmF0ZVxuKi9cbkRpc3BsYXlPYmplY3QucHJvdG90eXBlLl9pbml0Q2FjaGVkRGlzcGxheU9iamVjdENhbnZhcyA9IGZ1bmN0aW9uIChyZW5kZXJlcilcbntcbiAgICBpZih0aGlzLl9jYWNoZWRTcHJpdGUpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy9nZXQgYm91bmRzIGFjdHVhbGx5IHRyYW5zZm9ybXMgdGhlIG9iamVjdCBmb3IgdXMgYWxyZWFkeSFcbiAgICB2YXIgYm91bmRzID0gdGhpcy5nZXRMb2NhbEJvdW5kcygpO1xuXG4gICAgdmFyIGNhY2hlZFJlbmRlclRhcmdldCA9IHJlbmRlcmVyLmNvbnRleHQ7XG5cbiAgICB2YXIgcmVuZGVyVGV4dHVyZSA9IG5ldyBjb3JlLlJlbmRlclRleHR1cmUocmVuZGVyZXIsIGJvdW5kcy53aWR0aCB8IDAsIGJvdW5kcy5oZWlnaHQgfCAwKTtcblxuICAgIC8vIG5lZWQgdG8gc2V0IC8vXG4gICAgdmFyIG0gPSBfdGVtcE1hdHJpeDtcblxuICAgIG0udHggPSAtYm91bmRzLng7XG4gICAgbS50eSA9IC1ib3VuZHMueTtcblxuICAgIC8vIHNldCBhbGwgcHJvcGVydGllcyB0byB0aGVyZSBvcmlnaW5hbCBzbyB3ZSBjYW4gcmVuZGVyIHRvIGEgdGV4dHVyZVxuICAgIHRoaXMucmVuZGVyQ2FudmFzID0gdGhpcy5fb3JpZ2luYWxSZW5kZXJDYW52YXM7XG5cbiAgICByZW5kZXJUZXh0dXJlLnJlbmRlcih0aGlzLCBtLCB0cnVlKTtcblxuICAgIC8vIG5vdyByZXN0b3JlIHRoZSBzdGF0ZSBiZSBzZXR0aW5nIHRoZSBuZXcgcHJvcGVydGllc1xuICAgIHJlbmRlcmVyLmNvbnRleHQgPSBjYWNoZWRSZW5kZXJUYXJnZXQ7XG5cbiAgICB0aGlzLnJlbmRlckNhbnZhcyA9IHRoaXMuX3JlbmRlckNhY2hlZENhbnZhcztcbiAgICB0aGlzLnVwZGF0ZVRyYW5zZm9ybSA9IHRoaXMuZGlzcGxheU9iamVjdFVwZGF0ZVRyYW5zZm9ybTtcbiAgICB0aGlzLmdldEJvdW5kcyAgPSB0aGlzLl9nZXRDYWNoZWRCb3VuZHM7XG5cblxuICAgIC8vIGNyZWF0ZSBvdXIgY2FjaGVkIHNwcml0ZVxuICAgIHRoaXMuX2NhY2hlZFNwcml0ZSA9IG5ldyBjb3JlLlNwcml0ZShyZW5kZXJUZXh0dXJlKTtcbiAgICB0aGlzLl9jYWNoZWRTcHJpdGUud29ybGRUcmFuc2Zvcm0gPSB0aGlzLndvcmxkVHJhbnNmb3JtO1xuICAgIHRoaXMuX2NhY2hlZFNwcml0ZS5hbmNob3IueCA9IC0oIGJvdW5kcy54IC8gYm91bmRzLndpZHRoICk7XG4gICAgdGhpcy5fY2FjaGVkU3ByaXRlLmFuY2hvci55ID0gLSggYm91bmRzLnkgLyBib3VuZHMuaGVpZ2h0ICk7XG5cbiAgICB0aGlzLnVwZGF0ZVRyYW5zZm9ybSgpO1xuXG4gICAgdGhpcy5jb250YWluc1BvaW50ID0gdGhpcy5fY2FjaGVkU3ByaXRlLmNvbnRhaW5zUG9pbnQuYmluZCh0aGlzLl9jYWNoZWRTcHJpdGUpO1xufTtcblxuLyoqXG4qIENhbGN1bGF0ZXMgdGhlIGJvdW5kcyBvZiB0aGUgY2FjaGVkIHNwcml0ZVxuKlxuKiBAcHJpdmF0ZVxuKi9cbkRpc3BsYXlPYmplY3QucHJvdG90eXBlLl9nZXRDYWNoZWRCb3VuZHMgPSBmdW5jdGlvbiAoKVxue1xuICAgIHRoaXMuX2NhY2hlZFNwcml0ZS5fY3VycmVudEJvdW5kcyA9IG51bGw7XG5cbiAgICByZXR1cm4gdGhpcy5fY2FjaGVkU3ByaXRlLmdldEJvdW5kcygpO1xufTtcblxuLyoqXG4qIERlc3Ryb3lzIHRoZSBjYWNoZWQgc3ByaXRlLlxuKlxuKiBAcHJpdmF0ZVxuKi9cbkRpc3BsYXlPYmplY3QucHJvdG90eXBlLl9kZXN0cm95Q2FjaGVkRGlzcGxheU9iamVjdCA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy5fY2FjaGVkU3ByaXRlLl90ZXh0dXJlLmRlc3Ryb3koKTtcbiAgICB0aGlzLl9jYWNoZWRTcHJpdGUgPSBudWxsO1xufTtcblxuRGlzcGxheU9iamVjdC5wcm90b3R5cGUuX2NhY2hlQXNCaXRtYXBEZXN0cm95ID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLmNhY2hlQXNCaXRtYXAgPSBmYWxzZTtcbiAgICB0aGlzLl9vcmlnaW5hbERlc3Ryb3koKTtcbn07XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uL2NvcmUnKTtcblxuLyoqXG4gKiBUaGUgaW5zdGFuY2UgbmFtZSBvZiB0aGUgb2JqZWN0LlxuICpcbiAqIEBtZW1iZXJvZiBQSVhJLkRpc3BsYXlPYmplY3QjXG4gKiBAbWVtYmVyIHtzdHJpbmd9XG4gKi9cbmNvcmUuRGlzcGxheU9iamVjdC5wcm90b3R5cGUubmFtZSA9IG51bGw7XG5cbi8qKlxuKiBSZXR1cm5zIHRoZSBkaXNwbGF5IG9iamVjdCBpbiB0aGUgY29udGFpbmVyXG4qXG4qIEBtZW1iZXJvZiBQSVhJLkNvbnRhaW5lciNcbiogQHBhcmFtIG5hbWUge3N0cmluZ30gaW5zdGFuY2UgbmFtZVxuKiBAcmV0dXJuIHtQSVhJLkRpc3BsYXlPYmplY3R9XG4qL1xuY29yZS5Db250YWluZXIucHJvdG90eXBlLmdldENoaWxkQnlOYW1lID0gZnVuY3Rpb24gKG5hbWUpXG57XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmNoaWxkcmVuLmxlbmd0aDsgaSsrKVxuICAgIHtcbiAgICAgICAgaWYgKHRoaXMuY2hpbGRyZW5baV0ubmFtZSA9PT0gbmFtZSlcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY2hpbGRyZW5baV07XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG59O1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi9jb3JlJyk7XG5cbi8qKlxuKiBSZXR1cm5zIHRoZSBnbG9iYWwgcG9zaXRpb24gb2YgdGhlIGRpc3BsYXlPYmplY3RcbipcbiogQG1lbWJlcm9mIFBJWEkuRGlzcGxheU9iamVjdCNcbiogQHBhcmFtIHBvaW50IHtQb2ludH0gdGhlIHBvaW50IHRvIHdyaXRlIHRoZSBnbG9iYWwgdmFsdWUgdG8uIElmIG51bGwgYSBuZXcgcG9pbnQgd2lsbCBiZSByZXR1cm5lZFxuKiBAcmV0dXJuIHtQb2ludH1cbiovXG5jb3JlLkRpc3BsYXlPYmplY3QucHJvdG90eXBlLmdldEdsb2JhbFBvc2l0aW9uID0gZnVuY3Rpb24gKHBvaW50KVxue1xuICAgIHBvaW50ID0gcG9pbnQgfHwgbmV3IGNvcmUuUG9pbnQoKTtcblxuICAgIGlmKHRoaXMucGFyZW50KVxuICAgIHtcbiAgICAgICAgdGhpcy5kaXNwbGF5T2JqZWN0VXBkYXRlVHJhbnNmb3JtKCk7XG5cbiAgICAgICAgcG9pbnQueCA9IHRoaXMud29ybGRUcmFuc2Zvcm0udHg7XG4gICAgICAgIHBvaW50LnkgPSB0aGlzLndvcmxkVHJhbnNmb3JtLnR5O1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICBwb2ludC54ID0gdGhpcy5wb3NpdGlvbi54O1xuICAgICAgICBwb2ludC55ID0gdGhpcy5wb3NpdGlvbi55O1xuICAgIH1cblxuICAgIHJldHVybiBwb2ludDtcbn07XG4iLCIvKipcbiAqIEBmaWxlICAgICAgICBNYWluIGV4cG9ydCBvZiB0aGUgUElYSSBleHRyYXMgbGlicmFyeVxuICogQGF1dGhvciAgICAgIE1hdCBHcm92ZXMgPG1hdEBnb29kYm95ZGlnaXRhbC5jb20+XG4gKiBAY29weXJpZ2h0ICAgMjAxMy0yMDE1IEdvb2RCb3lEaWdpdGFsXG4gKiBAbGljZW5zZSAgICAge0BsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9waXhpanMvcGl4aS5qcy9ibG9iL21hc3Rlci9MSUNFTlNFfE1JVCBMaWNlbnNlfVxuICovXG5cbnJlcXVpcmUoJy4vY2FjaGVBc0JpdG1hcCcpO1xucmVxdWlyZSgnLi9nZXRDaGlsZEJ5TmFtZScpO1xucmVxdWlyZSgnLi9nZXRHbG9iYWxQb3NpdGlvbicpO1xuXG4vKipcbiAqIEBuYW1lc3BhY2UgUElYSS5leHRyYXNcbiAqL1xubW9kdWxlLmV4cG9ydHMgPSB7XG4gICAgTW92aWVDbGlwOiAgICAgIHJlcXVpcmUoJy4vTW92aWVDbGlwJyksXG4gICAgVGlsaW5nU3ByaXRlOiAgIHJlcXVpcmUoJy4vVGlsaW5nU3ByaXRlJyksXG4gICAgQml0bWFwVGV4dDogICAgIHJlcXVpcmUoJy4vQml0bWFwVGV4dCcpXG59O1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi8uLi9jb3JlJyk7XG4vLyBAc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9zdWJzdGFjay9icmZzL2lzc3Vlcy8yNVxuXG5cbi8vIFRPRE8gKGNlbmdsZXIpIC0gVGhlIFkgaXMgZmxpcHBlZCBpbiB0aGlzIHNoYWRlciBmb3Igc29tZSByZWFzb24uXG5cbi8qKlxuICogQGF1dGhvciBWaWNvIEB2aWNvY290ZWFcbiAqIG9yaWdpbmFsIHNoYWRlciA6IGh0dHBzOi8vd3d3LnNoYWRlcnRveS5jb20vdmlldy9sc3NHRGogYnkgQG1vdkFYMTNoXG4gKi9cblxuLyoqXG4gKiBBbiBBU0NJSSBmaWx0ZXIuXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLkFic3RyYWN0RmlsdGVyXG4gKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzXG4gKi9cbmZ1bmN0aW9uIEFzY2lpRmlsdGVyKClcbntcbiAgICBjb3JlLkFic3RyYWN0RmlsdGVyLmNhbGwodGhpcyxcbiAgICAgICAgLy8gdmVydGV4IHNoYWRlclxuICAgICAgICBudWxsLFxuICAgICAgICAvLyBmcmFnbWVudCBzaGFkZXJcbiAgICAgICAgXCJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcXG5cXG51bmlmb3JtIHZlYzQgZGltZW5zaW9ucztcXG51bmlmb3JtIGZsb2F0IHBpeGVsU2l6ZTtcXG51bmlmb3JtIHNhbXBsZXIyRCB1U2FtcGxlcjtcXG5cXG5mbG9hdCBjaGFyYWN0ZXIoZmxvYXQgbiwgdmVjMiBwKVxcbntcXG4gICAgcCA9IGZsb29yKHAqdmVjMig0LjAsIC00LjApICsgMi41KTtcXG4gICAgaWYgKGNsYW1wKHAueCwgMC4wLCA0LjApID09IHAueCAmJiBjbGFtcChwLnksIDAuMCwgNC4wKSA9PSBwLnkpXFxuICAgIHtcXG4gICAgICAgIGlmIChpbnQobW9kKG4vZXhwMihwLnggKyA1LjAqcC55KSwgMi4wKSkgPT0gMSkgcmV0dXJuIDEuMDtcXG4gICAgfVxcbiAgICByZXR1cm4gMC4wO1xcbn1cXG5cXG52b2lkIG1haW4oKVxcbntcXG4gICAgdmVjMiB1diA9IGdsX0ZyYWdDb29yZC54eTtcXG5cXG4gICAgdmVjMyBjb2wgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIGZsb29yKCB1diAvIHBpeGVsU2l6ZSApICogcGl4ZWxTaXplIC8gZGltZW5zaW9ucy54eSkucmdiO1xcblxcbiAgICBmbG9hdCBncmF5ID0gKGNvbC5yICsgY29sLmcgKyBjb2wuYikgLyAzLjA7XFxuXFxuICAgIGZsb2F0IG4gPSAgNjU1MzYuMDsgICAgICAgICAgICAgLy8gLlxcbiAgICBpZiAoZ3JheSA+IDAuMikgbiA9IDY1NjAwLjA7ICAgIC8vIDpcXG4gICAgaWYgKGdyYXkgPiAwLjMpIG4gPSAzMzI3NzIuMDsgICAvLyAqXFxuICAgIGlmIChncmF5ID4gMC40KSBuID0gMTUyNTUwODYuMDsgLy8gb1xcbiAgICBpZiAoZ3JheSA+IDAuNSkgbiA9IDIzMzg1MTY0LjA7IC8vICZcXG4gICAgaWYgKGdyYXkgPiAwLjYpIG4gPSAxNTI1MjAxNC4wOyAvLyA4XFxuICAgIGlmIChncmF5ID4gMC43KSBuID0gMTMxOTk0NTIuMDsgLy8gQFxcbiAgICBpZiAoZ3JheSA+IDAuOCkgbiA9IDExNTEyODEwLjA7IC8vICNcXG5cXG4gICAgdmVjMiBwID0gbW9kKCB1diAvICggcGl4ZWxTaXplICogMC41ICksIDIuMCkgLSB2ZWMyKDEuMCk7XFxuICAgIGNvbCA9IGNvbCAqIGNoYXJhY3RlcihuLCBwKTtcXG5cXG4gICAgZ2xfRnJhZ0NvbG9yID0gdmVjNChjb2wsIDEuMCk7XFxufVxcblwiLFxuICAgICAgICAvLyBjdXN0b20gdW5pZm9ybXNcbiAgICAgICAge1xuICAgICAgICAgICAgZGltZW5zaW9uczogeyB0eXBlOiAnNGZ2JywgdmFsdWU6IG5ldyBGbG9hdDMyQXJyYXkoWzAsIDAsIDAsIDBdKSB9LFxuICAgICAgICAgICAgcGl4ZWxTaXplOiAgeyB0eXBlOiAnMWYnLCB2YWx1ZTogOCB9XG4gICAgICAgIH1cbiAgICApO1xufVxuXG5Bc2NpaUZpbHRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuQWJzdHJhY3RGaWx0ZXIucHJvdG90eXBlKTtcbkFzY2lpRmlsdGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IEFzY2lpRmlsdGVyO1xubW9kdWxlLmV4cG9ydHMgPSBBc2NpaUZpbHRlcjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoQXNjaWlGaWx0ZXIucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogVGhlIHBpeGVsIHNpemUgdXNlZCBieSB0aGUgZmlsdGVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuQXNjaWlGaWx0ZXIjXG4gICAgICovXG4gICAgc2l6ZToge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVuaWZvcm1zLnBpeGVsU2l6ZS52YWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudW5pZm9ybXMucGl4ZWxTaXplLnZhbHVlID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG59KTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vLi4vY29yZScpLFxuICAgIEJsdXJYRmlsdGVyID0gcmVxdWlyZSgnLi4vYmx1ci9CbHVyWEZpbHRlcicpLFxuICAgIEJsdXJZRmlsdGVyID0gcmVxdWlyZSgnLi4vYmx1ci9CbHVyWUZpbHRlcicpO1xuXG4vKipcbiAqIFRoZSBCbG9vbUZpbHRlciBhcHBsaWVzIGEgR2F1c3NpYW4gYmx1ciB0byBhbiBvYmplY3QuXG4gKiBUaGUgc3RyZW5ndGggb2YgdGhlIGJsdXIgY2FuIGJlIHNldCBmb3IgeC0gYW5kIHktYXhpcyBzZXBhcmF0ZWx5LlxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5BYnN0cmFjdEZpbHRlclxuICogQG1lbWJlcm9mIFBJWEkuZmlsdGVyc1xuICovXG5mdW5jdGlvbiBCbG9vbUZpbHRlcigpXG57XG4gICAgY29yZS5BYnN0cmFjdEZpbHRlci5jYWxsKHRoaXMpO1xuXG4gICAgdGhpcy5ibHVyWEZpbHRlciA9IG5ldyBCbHVyWEZpbHRlcigpO1xuICAgIHRoaXMuYmx1cllGaWx0ZXIgPSBuZXcgQmx1cllGaWx0ZXIoKTtcblxuICAgIHRoaXMuZGVmYXVsdEZpbHRlciA9IG5ldyBjb3JlLkFic3RyYWN0RmlsdGVyKCk7XG59XG5cbkJsb29tRmlsdGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoY29yZS5BYnN0cmFjdEZpbHRlci5wcm90b3R5cGUpO1xuQmxvb21GaWx0ZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gQmxvb21GaWx0ZXI7XG5tb2R1bGUuZXhwb3J0cyA9IEJsb29tRmlsdGVyO1xuXG5CbG9vbUZpbHRlci5wcm90b3R5cGUuYXBwbHlGaWx0ZXIgPSBmdW5jdGlvbiAocmVuZGVyZXIsIGlucHV0LCBvdXRwdXQpXG57XG4gICAgdmFyIHJlbmRlclRhcmdldCA9IHJlbmRlcmVyLmZpbHRlck1hbmFnZXIuZ2V0UmVuZGVyVGFyZ2V0KHRydWUpO1xuXG4gICAgLy9UT0RPIC0gY29weVRleFN1YkltYWdlMkQgY291bGQgYmUgdXNlZCBoZXJlP1xuICAgIHRoaXMuZGVmYXVsdEZpbHRlci5hcHBseUZpbHRlcihyZW5kZXJlciwgaW5wdXQsIG91dHB1dCk7XG5cbiAgICB0aGlzLmJsdXJYRmlsdGVyLmFwcGx5RmlsdGVyKHJlbmRlcmVyLCBpbnB1dCwgcmVuZGVyVGFyZ2V0KTtcblxuICAgIHJlbmRlcmVyLmJsZW5kTW9kZU1hbmFnZXIuc2V0QmxlbmRNb2RlKGNvcmUuQkxFTkRfTU9ERVMuU0NSRUVOKTtcblxuICAgIHRoaXMuYmx1cllGaWx0ZXIuYXBwbHlGaWx0ZXIocmVuZGVyZXIsIHJlbmRlclRhcmdldCwgb3V0cHV0KTtcblxuICAgIHJlbmRlcmVyLmJsZW5kTW9kZU1hbmFnZXIuc2V0QmxlbmRNb2RlKGNvcmUuQkxFTkRfTU9ERVMuTk9STUFMKTtcblxuICAgIHJlbmRlcmVyLmZpbHRlck1hbmFnZXIucmV0dXJuUmVuZGVyVGFyZ2V0KHJlbmRlclRhcmdldCk7XG59O1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhCbG9vbUZpbHRlci5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBzdHJlbmd0aCBvZiBib3RoIHRoZSBibHVyWCBhbmQgYmx1clkgcHJvcGVydGllcyBzaW11bHRhbmVvdXNseVxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJPZiBQSVhJLmZpbHRlcnMuQmxvb21GaWx0ZXIjXG4gICAgICogQGRlZmF1bHQgMlxuICAgICAqL1xuICAgIGJsdXI6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5ibHVyWEZpbHRlci5ibHVyO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5ibHVyWEZpbHRlci5ibHVyID0gdGhpcy5ibHVyWUZpbHRlci5ibHVyID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgc3RyZW5ndGggb2YgdGhlIGJsdXJYIHByb3BlcnR5XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlck9mIFBJWEkuZmlsdGVycy5CbG9vbUZpbHRlciNcbiAgICAgKiBAZGVmYXVsdCAyXG4gICAgICovXG4gICAgYmx1clg6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5ibHVyWEZpbHRlci5ibHVyO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5ibHVyWEZpbHRlci5ibHVyID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgc3RyZW5ndGggb2YgdGhlIGJsdXJZIHByb3BlcnR5XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlck9mIFBJWEkuZmlsdGVycy5CbG9vbUZpbHRlciNcbiAgICAgKiBAZGVmYXVsdCAyXG4gICAgICovXG4gICAgYmx1clk6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5ibHVyWUZpbHRlci5ibHVyO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5ibHVyWUZpbHRlci5ibHVyID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG59KTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vLi4vY29yZScpO1xuXG5cbi8qKlxuICogVGhlIEJsdXJEaXJGaWx0ZXIgYXBwbGllcyBhIEdhdXNzaWFuIGJsdXIgdG93YXJkIGEgZGlyZWN0aW9uIHRvIGFuIG9iamVjdC5cbiAqXG4gKiBAY2xhc3NcbiAqIEBwYXJhbSB7bnVtYmVyfSBkaXJYXG4gKiBAcGFyYW0ge251bWJlcn0gZGlyWVxuICogQGV4dGVuZHMgUElYSS5BYnN0cmFjdEZpbHRlclxuICogQG1lbWJlcm9mIFBJWEkuZmlsdGVyc1xuICovXG5mdW5jdGlvbiBCbHVyRGlyRmlsdGVyKGRpclgsIGRpclkpXG57XG4gICAgY29yZS5BYnN0cmFjdEZpbHRlci5jYWxsKHRoaXMsXG4gICAgICAgIC8vIHZlcnRleCBzaGFkZXJcbiAgICAgICAgXCJhdHRyaWJ1dGUgdmVjMiBhVmVydGV4UG9zaXRpb247XFxuYXR0cmlidXRlIHZlYzIgYVRleHR1cmVDb29yZDtcXG5hdHRyaWJ1dGUgdmVjNCBhQ29sb3I7XFxuXFxudW5pZm9ybSBmbG9hdCBzdHJlbmd0aDtcXG51bmlmb3JtIGZsb2F0IGRpclg7XFxudW5pZm9ybSBmbG9hdCBkaXJZO1xcbnVuaWZvcm0gbWF0MyBwcm9qZWN0aW9uTWF0cml4O1xcblxcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xcbnZhcnlpbmcgdmVjNCB2Q29sb3I7XFxudmFyeWluZyB2ZWMyIHZCbHVyVGV4Q29vcmRzWzNdO1xcblxcbnZvaWQgbWFpbih2b2lkKVxcbntcXG4gICAgZ2xfUG9zaXRpb24gPSB2ZWM0KChwcm9qZWN0aW9uTWF0cml4ICogdmVjMygoYVZlcnRleFBvc2l0aW9uKSwgMS4wKSkueHksIDAuMCwgMS4wKTtcXG4gICAgdlRleHR1cmVDb29yZCA9IGFUZXh0dXJlQ29vcmQ7XFxuXFxuICAgIHZCbHVyVGV4Q29vcmRzWzBdID0gYVRleHR1cmVDb29yZCArIHZlYzIoICgwLjAwNCAqIHN0cmVuZ3RoKSAqIGRpclgsICgwLjAwNCAqIHN0cmVuZ3RoKSAqIGRpclkgKTtcXG4gICAgdkJsdXJUZXhDb29yZHNbMV0gPSBhVGV4dHVyZUNvb3JkICsgdmVjMiggKDAuMDA4ICogc3RyZW5ndGgpICogZGlyWCwgKDAuMDA4ICogc3RyZW5ndGgpICogZGlyWSApO1xcbiAgICB2Qmx1clRleENvb3Jkc1syXSA9IGFUZXh0dXJlQ29vcmQgKyB2ZWMyKCAoMC4wMTIgKiBzdHJlbmd0aCkgKiBkaXJYLCAoMC4wMTIgKiBzdHJlbmd0aCkgKiBkaXJZICk7XFxuXFxuICAgIHZDb2xvciA9IHZlYzQoYUNvbG9yLnJnYiAqIGFDb2xvci5hLCBhQ29sb3IuYSk7XFxufVxcblwiLFxuICAgICAgICAvLyBmcmFnbWVudCBzaGFkZXJcbiAgICAgICAgXCJwcmVjaXNpb24gbG93cCBmbG9hdDtcXG5cXG52YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDtcXG52YXJ5aW5nIHZlYzIgdkJsdXJUZXhDb29yZHNbM107XFxudmFyeWluZyB2ZWM0IHZDb2xvcjtcXG5cXG51bmlmb3JtIHNhbXBsZXIyRCB1U2FtcGxlcjtcXG5cXG52b2lkIG1haW4odm9pZClcXG57XFxuICAgIGdsX0ZyYWdDb2xvciA9IHZlYzQoMC4wKTtcXG5cXG4gICAgZ2xfRnJhZ0NvbG9yICs9IHRleHR1cmUyRCh1U2FtcGxlciwgdlRleHR1cmVDb29yZCAgICAgKSAqIDAuMzk4OTQyMjgwNDAxNDMyNztcXG4gICAgZ2xfRnJhZ0NvbG9yICs9IHRleHR1cmUyRCh1U2FtcGxlciwgdkJsdXJUZXhDb29yZHNbIDBdKSAqIDAuMjQxOTcwNzI0NTE5MTQ1NDtcXG4gICAgZ2xfRnJhZ0NvbG9yICs9IHRleHR1cmUyRCh1U2FtcGxlciwgdkJsdXJUZXhDb29yZHNbIDFdKSAqIDAuMDUzOTkwOTY2NTEzMTg5ODU7XFxuICAgIGdsX0ZyYWdDb2xvciArPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZCbHVyVGV4Q29vcmRzWyAyXSkgKiAwLjAwNDQzMTg0ODQxMTkzODM0MTtcXG59XFxuXCIsXG4gICAgICAgIC8vIHNldCB0aGUgdW5pZm9ybXNcbiAgICAgICAge1xuICAgICAgICAgICAgc3RyZW5ndGg6IHsgdHlwZTogJzFmJywgdmFsdWU6IDEgfSxcbiAgICAgICAgICAgIGRpclg6IHsgdHlwZTogJzFmJywgdmFsdWU6IGRpclggfHwgMCB9LFxuICAgICAgICAgICAgZGlyWTogeyB0eXBlOiAnMWYnLCB2YWx1ZTogZGlyWSB8fCAwIH1cbiAgICAgICAgfVxuICAgICk7XG5cbiAgICB0aGlzLmRlZmF1bHRGaWx0ZXIgPSBuZXcgY29yZS5BYnN0cmFjdEZpbHRlcigpO1xuXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgbnVtYmVyIG9mIHBhc3NlcyBmb3IgYmx1ci4gTW9yZSBwYXNzZXMgbWVhbnMgaGlnaGVyIHF1YWlsaXR5IGJsdXJpbmcuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMVxuICAgICAqL1xuICAgIHRoaXMucGFzc2VzID0gMTtcblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIFggZGlyZWN0aW9uIG9mIHRoZSBibHVyXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMFxuICAgICAqL1xuICAgIHRoaXMuZGlyWCA9IGRpclggfHwgMDtcblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIFkgZGlyZWN0aW9uIG9mIHRoZSBibHVyXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMFxuICAgICAqL1xuICAgIHRoaXMuZGlyWSA9IGRpclkgfHwgMDtcblxuICAgIHRoaXMuc3RyZW5ndGggPSA0O1xufVxuXG5CbHVyRGlyRmlsdGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoY29yZS5BYnN0cmFjdEZpbHRlci5wcm90b3R5cGUpO1xuQmx1ckRpckZpbHRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBCbHVyRGlyRmlsdGVyO1xubW9kdWxlLmV4cG9ydHMgPSBCbHVyRGlyRmlsdGVyO1xuXG5CbHVyRGlyRmlsdGVyLnByb3RvdHlwZS5hcHBseUZpbHRlciA9IGZ1bmN0aW9uIChyZW5kZXJlciwgaW5wdXQsIG91dHB1dCwgY2xlYXIpIHtcblxuICAgIHZhciBzaGFkZXIgPSB0aGlzLmdldFNoYWRlcihyZW5kZXJlcik7XG5cbiAgICB0aGlzLnVuaWZvcm1zLnN0cmVuZ3RoLnZhbHVlID0gdGhpcy5zdHJlbmd0aCAvIDQgLyB0aGlzLnBhc3NlcyAqIChpbnB1dC5mcmFtZS53aWR0aCAvIGlucHV0LnNpemUud2lkdGgpO1xuXG4gICAgaWYgKHRoaXMucGFzc2VzID09PSAxKSB7XG4gICAgICAgIHJlbmRlcmVyLmZpbHRlck1hbmFnZXIuYXBwbHlGaWx0ZXIoc2hhZGVyLCBpbnB1dCwgb3V0cHV0LCBjbGVhcik7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgdmFyIHJlbmRlclRhcmdldCA9IHJlbmRlcmVyLmZpbHRlck1hbmFnZXIuZ2V0UmVuZGVyVGFyZ2V0KHRydWUpO1xuXG4gICAgICAgIHJlbmRlcmVyLmZpbHRlck1hbmFnZXIuYXBwbHlGaWx0ZXIoc2hhZGVyLCBpbnB1dCwgcmVuZGVyVGFyZ2V0LCBjbGVhcik7XG5cbiAgICAgICAgZm9yKHZhciBpID0gMDsgaSA8IHRoaXMucGFzc2VzLTI7IGkrKylcbiAgICAgICAge1xuICAgICAgICAgICAgLy90aGlzLnVuaWZvcm1zLnN0cmVuZ3RoLnZhbHVlID0gdGhpcy5zdHJlbmd0aCAvIDQgLyAodGhpcy5wYXNzZXMrKGkqMikpICogKGlucHV0LmZyYW1lLndpZHRoIC8gaW5wdXQuc2l6ZS53aWR0aCk7XG4gICAgICAgICAgICByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLmFwcGx5RmlsdGVyKHNoYWRlciwgcmVuZGVyVGFyZ2V0LCByZW5kZXJUYXJnZXQsIGNsZWFyKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJlbmRlcmVyLmZpbHRlck1hbmFnZXIuYXBwbHlGaWx0ZXIoc2hhZGVyLCByZW5kZXJUYXJnZXQsIG91dHB1dCwgY2xlYXIpO1xuXG4gICAgICAgIHJlbmRlcmVyLmZpbHRlck1hbmFnZXIucmV0dXJuUmVuZGVyVGFyZ2V0KHJlbmRlclRhcmdldCk7XG4gICAgfVxufTtcblxuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhCbHVyRGlyRmlsdGVyLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIHN0cmVuZ3RoIG9mIGJvdGggdGhlIGJsdXIuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5CbHVyRGlyRmlsdGVyI1xuICAgICAqIEBkZWZhdWx0IDJcbiAgICAgKi9cbiAgICBibHVyOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuc3RyZW5ndGg7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnBhZGRpbmcgPSB2YWx1ZSAqIDAuNTtcbiAgICAgICAgICAgIHRoaXMuc3RyZW5ndGggPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgWCBkaXJlY3Rpb24gb2YgdGhlIGJsdXIuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5CbHVyWUZpbHRlciNcbiAgICAgKiBAZGVmYXVsdCAwXG4gICAgICovXG4gICAgZGlyWDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmRpclg7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLmRpclgudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgWSBkaXJlY3Rpb24gb2YgdGhlIGJsdXIuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5CbHVyRGlyRmlsdGVyI1xuICAgICAqIEBkZWZhdWx0IDBcbiAgICAgKi9cbiAgICBkaXJZOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZGlyWTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudW5pZm9ybXMuZGlyWS52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfVxufSk7XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uLy4uL2NvcmUnKSxcbiAgICBCbHVyWEZpbHRlciA9IHJlcXVpcmUoJy4vQmx1clhGaWx0ZXInKSxcbiAgICBCbHVyWUZpbHRlciA9IHJlcXVpcmUoJy4vQmx1cllGaWx0ZXInKTtcblxuLyoqXG4gKiBUaGUgQmx1ckZpbHRlciBhcHBsaWVzIGEgR2F1c3NpYW4gYmx1ciB0byBhbiBvYmplY3QuXG4gKiBUaGUgc3RyZW5ndGggb2YgdGhlIGJsdXIgY2FuIGJlIHNldCBmb3IgeC0gYW5kIHktYXhpcyBzZXBhcmF0ZWx5LlxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5BYnN0cmFjdEZpbHRlclxuICogQG1lbWJlcm9mIFBJWEkuZmlsdGVyc1xuICovXG5mdW5jdGlvbiBCbHVyRmlsdGVyKClcbntcbiAgICBjb3JlLkFic3RyYWN0RmlsdGVyLmNhbGwodGhpcyk7XG5cbiAgICB0aGlzLmJsdXJYRmlsdGVyID0gbmV3IEJsdXJYRmlsdGVyKCk7XG4gICAgdGhpcy5ibHVyWUZpbHRlciA9IG5ldyBCbHVyWUZpbHRlcigpO1xufVxuXG5CbHVyRmlsdGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoY29yZS5BYnN0cmFjdEZpbHRlci5wcm90b3R5cGUpO1xuQmx1ckZpbHRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBCbHVyRmlsdGVyO1xubW9kdWxlLmV4cG9ydHMgPSBCbHVyRmlsdGVyO1xuXG5CbHVyRmlsdGVyLnByb3RvdHlwZS5hcHBseUZpbHRlciA9IGZ1bmN0aW9uIChyZW5kZXJlciwgaW5wdXQsIG91dHB1dClcbntcbiAgICB2YXIgcmVuZGVyVGFyZ2V0ID0gcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5nZXRSZW5kZXJUYXJnZXQodHJ1ZSk7XG5cbiAgICB0aGlzLmJsdXJYRmlsdGVyLmFwcGx5RmlsdGVyKHJlbmRlcmVyLCBpbnB1dCwgcmVuZGVyVGFyZ2V0KTtcbiAgICB0aGlzLmJsdXJZRmlsdGVyLmFwcGx5RmlsdGVyKHJlbmRlcmVyLCByZW5kZXJUYXJnZXQsIG91dHB1dCk7XG5cbiAgICByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLnJldHVyblJlbmRlclRhcmdldChyZW5kZXJUYXJnZXQpO1xufTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoQmx1ckZpbHRlci5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBzdHJlbmd0aCBvZiBib3RoIHRoZSBibHVyWCBhbmQgYmx1clkgcHJvcGVydGllcyBzaW11bHRhbmVvdXNseVxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJPZiBQSVhJLmZpbHRlcnMuQmx1ckZpbHRlciNcbiAgICAgKiBAZGVmYXVsdCAyXG4gICAgICovXG4gICAgYmx1cjoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmJsdXJYRmlsdGVyLmJsdXI7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnBhZGRpbmcgPSBNYXRoLmFicyh2YWx1ZSkgKiAwLjU7XG4gICAgICAgICAgICB0aGlzLmJsdXJYRmlsdGVyLmJsdXIgPSB0aGlzLmJsdXJZRmlsdGVyLmJsdXIgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBudW1iZXIgb2YgcGFzc2VzIGZvciBibHVyLiBNb3JlIHBhc3NlcyBtZWFucyBoaWdoZXIgcXVhaWxpdHkgYmx1cmluZy5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLkJsdXJZRmlsdGVyI1xuICAgICAqIEBkZWZhdWx0IDFcbiAgICAgKi9cbiAgICBwYXNzZXM6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gIHRoaXMuYmx1clhGaWx0ZXIucGFzc2VzO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5ibHVyWEZpbHRlci5wYXNzZXMgPSB0aGlzLmJsdXJZRmlsdGVyLnBhc3NlcyA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIHN0cmVuZ3RoIG9mIHRoZSBibHVyWCBwcm9wZXJ0eVxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJPZiBQSVhJLmZpbHRlcnMuQmx1ckZpbHRlciNcbiAgICAgKiBAZGVmYXVsdCAyXG4gICAgICovXG4gICAgYmx1clg6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5ibHVyWEZpbHRlci5ibHVyO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5ibHVyWEZpbHRlci5ibHVyID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgc3RyZW5ndGggb2YgdGhlIGJsdXJZIHByb3BlcnR5XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlck9mIFBJWEkuZmlsdGVycy5CbHVyRmlsdGVyI1xuICAgICAqIEBkZWZhdWx0IDJcbiAgICAgKi9cbiAgICBibHVyWToge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmJsdXJZRmlsdGVyLmJsdXI7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmJsdXJZRmlsdGVyLmJsdXIgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi8uLi9jb3JlJyk7XG4vLyBAc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9zdWJzdGFjay9icmZzL2lzc3Vlcy8yNVxuXG5cbi8qKlxuICogVGhlIEJsdXJYRmlsdGVyIGFwcGxpZXMgYSBob3Jpem9udGFsIEdhdXNzaWFuIGJsdXIgdG8gYW4gb2JqZWN0LlxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5BYnN0cmFjdEZpbHRlclxuICogQG1lbWJlcm9mIFBJWEkuZmlsdGVyc1xuICovXG5mdW5jdGlvbiBCbHVyWEZpbHRlcigpXG57XG4gICAgY29yZS5BYnN0cmFjdEZpbHRlci5jYWxsKHRoaXMsXG4gICAgICAgIC8vIHZlcnRleCBzaGFkZXJcbiAgICAgICAgXCJhdHRyaWJ1dGUgdmVjMiBhVmVydGV4UG9zaXRpb247XFxuYXR0cmlidXRlIHZlYzIgYVRleHR1cmVDb29yZDtcXG5hdHRyaWJ1dGUgdmVjNCBhQ29sb3I7XFxuXFxudW5pZm9ybSBmbG9hdCBzdHJlbmd0aDtcXG51bmlmb3JtIG1hdDMgcHJvamVjdGlvbk1hdHJpeDtcXG5cXG52YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDtcXG52YXJ5aW5nIHZlYzQgdkNvbG9yO1xcbnZhcnlpbmcgdmVjMiB2Qmx1clRleENvb3Jkc1s2XTtcXG5cXG52b2lkIG1haW4odm9pZClcXG57XFxuICAgIGdsX1Bvc2l0aW9uID0gdmVjNCgocHJvamVjdGlvbk1hdHJpeCAqIHZlYzMoKGFWZXJ0ZXhQb3NpdGlvbiksIDEuMCkpLnh5LCAwLjAsIDEuMCk7XFxuICAgIHZUZXh0dXJlQ29vcmQgPSBhVGV4dHVyZUNvb3JkO1xcblxcbiAgICB2Qmx1clRleENvb3Jkc1sgMF0gPSBhVGV4dHVyZUNvb3JkICsgdmVjMigtMC4wMTIgKiBzdHJlbmd0aCwgMC4wKTtcXG4gICAgdkJsdXJUZXhDb29yZHNbIDFdID0gYVRleHR1cmVDb29yZCArIHZlYzIoLTAuMDA4ICogc3RyZW5ndGgsIDAuMCk7XFxuICAgIHZCbHVyVGV4Q29vcmRzWyAyXSA9IGFUZXh0dXJlQ29vcmQgKyB2ZWMyKC0wLjAwNCAqIHN0cmVuZ3RoLCAwLjApO1xcbiAgICB2Qmx1clRleENvb3Jkc1sgM10gPSBhVGV4dHVyZUNvb3JkICsgdmVjMiggMC4wMDQgKiBzdHJlbmd0aCwgMC4wKTtcXG4gICAgdkJsdXJUZXhDb29yZHNbIDRdID0gYVRleHR1cmVDb29yZCArIHZlYzIoIDAuMDA4ICogc3RyZW5ndGgsIDAuMCk7XFxuICAgIHZCbHVyVGV4Q29vcmRzWyA1XSA9IGFUZXh0dXJlQ29vcmQgKyB2ZWMyKCAwLjAxMiAqIHN0cmVuZ3RoLCAwLjApO1xcblxcbiAgICB2Q29sb3IgPSB2ZWM0KGFDb2xvci5yZ2IgKiBhQ29sb3IuYSwgYUNvbG9yLmEpO1xcbn1cXG5cIixcbiAgICAgICAgLy8gZnJhZ21lbnQgc2hhZGVyXG4gICAgICAgIFwicHJlY2lzaW9uIGxvd3AgZmxvYXQ7XFxuXFxudmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7XFxudmFyeWluZyB2ZWMyIHZCbHVyVGV4Q29vcmRzWzZdO1xcbnZhcnlpbmcgdmVjNCB2Q29sb3I7XFxuXFxudW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXI7XFxuXFxudm9pZCBtYWluKHZvaWQpXFxue1xcbiAgICBnbF9GcmFnQ29sb3IgPSB2ZWM0KDAuMCk7XFxuXFxuICAgIGdsX0ZyYWdDb2xvciArPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZCbHVyVGV4Q29vcmRzWyAwXSkqMC4wMDQ0MzE4NDg0MTE5MzgzNDE7XFxuICAgIGdsX0ZyYWdDb2xvciArPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZCbHVyVGV4Q29vcmRzWyAxXSkqMC4wNTM5OTA5NjY1MTMxODk4NTtcXG4gICAgZ2xfRnJhZ0NvbG9yICs9IHRleHR1cmUyRCh1U2FtcGxlciwgdkJsdXJUZXhDb29yZHNbIDJdKSowLjI0MTk3MDcyNDUxOTE0NTQ7XFxuICAgIGdsX0ZyYWdDb2xvciArPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZUZXh0dXJlQ29vcmQgICAgICkqMC4zOTg5NDIyODA0MDE0MzI3O1xcbiAgICBnbF9GcmFnQ29sb3IgKz0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2Qmx1clRleENvb3Jkc1sgM10pKjAuMjQxOTcwNzI0NTE5MTQ1NDtcXG4gICAgZ2xfRnJhZ0NvbG9yICs9IHRleHR1cmUyRCh1U2FtcGxlciwgdkJsdXJUZXhDb29yZHNbIDRdKSowLjA1Mzk5MDk2NjUxMzE4OTg1O1xcbiAgICBnbF9GcmFnQ29sb3IgKz0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2Qmx1clRleENvb3Jkc1sgNV0pKjAuMDA0NDMxODQ4NDExOTM4MzQxO1xcbn1cXG5cIixcbiAgICAgICAgLy8gc2V0IHRoZSB1bmlmb3Jtc1xuICAgICAgICB7XG4gICAgICAgICAgICBzdHJlbmd0aDogeyB0eXBlOiAnMWYnLCB2YWx1ZTogMSB9XG4gICAgICAgIH1cbiAgICApO1xuXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgbnVtYmVyIG9mIHBhc3NlcyBmb3IgYmx1ci4gTW9yZSBwYXNzZXMgbWVhbnMgaGlnaGVyIHF1YWlsaXR5IGJsdXJpbmcuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMVxuICAgICAqL1xuICAgIHRoaXMucGFzc2VzID0gMTtcblxuICAgIHRoaXMuc3RyZW5ndGggPSA0O1xufVxuXG5CbHVyWEZpbHRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuQWJzdHJhY3RGaWx0ZXIucHJvdG90eXBlKTtcbkJsdXJYRmlsdGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IEJsdXJYRmlsdGVyO1xubW9kdWxlLmV4cG9ydHMgPSBCbHVyWEZpbHRlcjtcblxuQmx1clhGaWx0ZXIucHJvdG90eXBlLmFwcGx5RmlsdGVyID0gZnVuY3Rpb24gKHJlbmRlcmVyLCBpbnB1dCwgb3V0cHV0LCBjbGVhcilcbntcbiAgICB2YXIgc2hhZGVyID0gdGhpcy5nZXRTaGFkZXIocmVuZGVyZXIpO1xuXG4gICAgdGhpcy51bmlmb3Jtcy5zdHJlbmd0aC52YWx1ZSA9IHRoaXMuc3RyZW5ndGggLyA0IC8gdGhpcy5wYXNzZXMgKiAoaW5wdXQuZnJhbWUud2lkdGggLyBpbnB1dC5zaXplLndpZHRoKTtcblxuICAgIGlmKHRoaXMucGFzc2VzID09PSAxKVxuICAgIHtcbiAgICAgICAgcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5hcHBseUZpbHRlcihzaGFkZXIsIGlucHV0LCBvdXRwdXQsIGNsZWFyKTtcbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgdmFyIHJlbmRlclRhcmdldCA9IHJlbmRlcmVyLmZpbHRlck1hbmFnZXIuZ2V0UmVuZGVyVGFyZ2V0KHRydWUpO1xuICAgICAgICB2YXIgZmxpcCA9IGlucHV0O1xuICAgICAgICB2YXIgZmxvcCA9IHJlbmRlclRhcmdldDtcblxuICAgICAgICBmb3IodmFyIGkgPSAwOyBpIDwgdGhpcy5wYXNzZXMtMTsgaSsrKVxuICAgICAgICB7XG4gICAgICAgICAgICByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLmFwcGx5RmlsdGVyKHNoYWRlciwgZmxpcCwgZmxvcCwgdHJ1ZSk7XG5cbiAgICAgICAgICAgdmFyIHRlbXAgPSBmbG9wO1xuICAgICAgICAgICBmbG9wID0gZmxpcDtcbiAgICAgICAgICAgZmxpcCA9IHRlbXA7XG4gICAgICAgIH1cblxuICAgICAgICByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLmFwcGx5RmlsdGVyKHNoYWRlciwgZmxpcCwgb3V0cHV0LCBjbGVhcik7XG5cbiAgICAgICAgcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5yZXR1cm5SZW5kZXJUYXJnZXQocmVuZGVyVGFyZ2V0KTtcbiAgICB9XG59O1xuXG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKEJsdXJYRmlsdGVyLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIHN0cmVuZ3RoIG9mIGJvdGggdGhlIGJsdXIuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5CbHVyWEZpbHRlciNcbiAgICAgKiBAZGVmYXVsdCAyXG4gICAgICovXG4gICAgYmx1cjoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiAgdGhpcy5zdHJlbmd0aDtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMucGFkZGluZyA9ICBNYXRoLmFicyh2YWx1ZSkgKiAwLjU7XG4gICAgICAgICAgICB0aGlzLnN0cmVuZ3RoID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG59KTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vLi4vY29yZScpO1xuLy8gQHNlZSBodHRwczovL2dpdGh1Yi5jb20vc3Vic3RhY2svYnJmcy9pc3N1ZXMvMjVcblxuXG4vKipcbiAqIFRoZSBCbHVyWUZpbHRlciBhcHBsaWVzIGEgaG9yaXpvbnRhbCBHYXVzc2lhbiBibHVyIHRvIGFuIG9iamVjdC5cbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQWJzdHJhY3RGaWx0ZXJcbiAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnNcbiAqL1xuZnVuY3Rpb24gQmx1cllGaWx0ZXIoKVxue1xuICAgIGNvcmUuQWJzdHJhY3RGaWx0ZXIuY2FsbCh0aGlzLFxuICAgICAgICAvLyB2ZXJ0ZXggc2hhZGVyXG4gICAgICAgIFwiYXR0cmlidXRlIHZlYzIgYVZlcnRleFBvc2l0aW9uO1xcbmF0dHJpYnV0ZSB2ZWMyIGFUZXh0dXJlQ29vcmQ7XFxuYXR0cmlidXRlIHZlYzQgYUNvbG9yO1xcblxcbnVuaWZvcm0gZmxvYXQgc3RyZW5ndGg7XFxudW5pZm9ybSBtYXQzIHByb2plY3Rpb25NYXRyaXg7XFxuXFxudmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7XFxudmFyeWluZyB2ZWM0IHZDb2xvcjtcXG52YXJ5aW5nIHZlYzIgdkJsdXJUZXhDb29yZHNbNl07XFxuXFxudm9pZCBtYWluKHZvaWQpXFxue1xcbiAgICBnbF9Qb3NpdGlvbiA9IHZlYzQoKHByb2plY3Rpb25NYXRyaXggKiB2ZWMzKChhVmVydGV4UG9zaXRpb24pLCAxLjApKS54eSwgMC4wLCAxLjApO1xcbiAgICB2VGV4dHVyZUNvb3JkID0gYVRleHR1cmVDb29yZDtcXG5cXG4gICAgdkJsdXJUZXhDb29yZHNbIDBdID0gYVRleHR1cmVDb29yZCArIHZlYzIoMC4wLCAtMC4wMTIgKiBzdHJlbmd0aCk7XFxuICAgIHZCbHVyVGV4Q29vcmRzWyAxXSA9IGFUZXh0dXJlQ29vcmQgKyB2ZWMyKDAuMCwgLTAuMDA4ICogc3RyZW5ndGgpO1xcbiAgICB2Qmx1clRleENvb3Jkc1sgMl0gPSBhVGV4dHVyZUNvb3JkICsgdmVjMigwLjAsIC0wLjAwNCAqIHN0cmVuZ3RoKTtcXG4gICAgdkJsdXJUZXhDb29yZHNbIDNdID0gYVRleHR1cmVDb29yZCArIHZlYzIoMC4wLCAgMC4wMDQgKiBzdHJlbmd0aCk7XFxuICAgIHZCbHVyVGV4Q29vcmRzWyA0XSA9IGFUZXh0dXJlQ29vcmQgKyB2ZWMyKDAuMCwgIDAuMDA4ICogc3RyZW5ndGgpO1xcbiAgICB2Qmx1clRleENvb3Jkc1sgNV0gPSBhVGV4dHVyZUNvb3JkICsgdmVjMigwLjAsICAwLjAxMiAqIHN0cmVuZ3RoKTtcXG5cXG4gICB2Q29sb3IgPSB2ZWM0KGFDb2xvci5yZ2IgKiBhQ29sb3IuYSwgYUNvbG9yLmEpO1xcbn1cXG5cIixcbiAgICAgICAgLy8gZnJhZ21lbnQgc2hhZGVyXG4gICAgICAgIFwicHJlY2lzaW9uIGxvd3AgZmxvYXQ7XFxuXFxudmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7XFxudmFyeWluZyB2ZWMyIHZCbHVyVGV4Q29vcmRzWzZdO1xcbnZhcnlpbmcgdmVjNCB2Q29sb3I7XFxuXFxudW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXI7XFxuXFxudm9pZCBtYWluKHZvaWQpXFxue1xcbiAgICBnbF9GcmFnQ29sb3IgPSB2ZWM0KDAuMCk7XFxuXFxuICAgIGdsX0ZyYWdDb2xvciArPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZCbHVyVGV4Q29vcmRzWyAwXSkqMC4wMDQ0MzE4NDg0MTE5MzgzNDE7XFxuICAgIGdsX0ZyYWdDb2xvciArPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZCbHVyVGV4Q29vcmRzWyAxXSkqMC4wNTM5OTA5NjY1MTMxODk4NTtcXG4gICAgZ2xfRnJhZ0NvbG9yICs9IHRleHR1cmUyRCh1U2FtcGxlciwgdkJsdXJUZXhDb29yZHNbIDJdKSowLjI0MTk3MDcyNDUxOTE0NTQ7XFxuICAgIGdsX0ZyYWdDb2xvciArPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZUZXh0dXJlQ29vcmQgICAgICkqMC4zOTg5NDIyODA0MDE0MzI3O1xcbiAgICBnbF9GcmFnQ29sb3IgKz0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2Qmx1clRleENvb3Jkc1sgM10pKjAuMjQxOTcwNzI0NTE5MTQ1NDtcXG4gICAgZ2xfRnJhZ0NvbG9yICs9IHRleHR1cmUyRCh1U2FtcGxlciwgdkJsdXJUZXhDb29yZHNbIDRdKSowLjA1Mzk5MDk2NjUxMzE4OTg1O1xcbiAgICBnbF9GcmFnQ29sb3IgKz0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2Qmx1clRleENvb3Jkc1sgNV0pKjAuMDA0NDMxODQ4NDExOTM4MzQxO1xcbn1cXG5cIixcbiAgICAgICAgLy8gc2V0IHRoZSB1bmlmb3Jtc1xuICAgICAgICB7XG4gICAgICAgICAgICBzdHJlbmd0aDogeyB0eXBlOiAnMWYnLCB2YWx1ZTogMSB9XG4gICAgICAgIH1cbiAgICApO1xuXG4gICAgdGhpcy5wYXNzZXMgPSAxO1xuICAgIHRoaXMuc3RyZW5ndGggPSA0O1xufVxuXG5CbHVyWUZpbHRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuQWJzdHJhY3RGaWx0ZXIucHJvdG90eXBlKTtcbkJsdXJZRmlsdGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IEJsdXJZRmlsdGVyO1xubW9kdWxlLmV4cG9ydHMgPSBCbHVyWUZpbHRlcjtcblxuQmx1cllGaWx0ZXIucHJvdG90eXBlLmFwcGx5RmlsdGVyID0gZnVuY3Rpb24gKHJlbmRlcmVyLCBpbnB1dCwgb3V0cHV0LCBjbGVhcilcbntcbiAgICB2YXIgc2hhZGVyID0gdGhpcy5nZXRTaGFkZXIocmVuZGVyZXIpO1xuXG4gICAgdGhpcy51bmlmb3Jtcy5zdHJlbmd0aC52YWx1ZSA9IE1hdGguYWJzKHRoaXMuc3RyZW5ndGgpIC8gNCAvIHRoaXMucGFzc2VzICogKGlucHV0LmZyYW1lLmhlaWdodCAvIGlucHV0LnNpemUuaGVpZ2h0KTtcblxuICAgIGlmKHRoaXMucGFzc2VzID09PSAxKVxuICAgIHtcbiAgICAgICAgcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5hcHBseUZpbHRlcihzaGFkZXIsIGlucHV0LCBvdXRwdXQsIGNsZWFyKTtcbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgdmFyIHJlbmRlclRhcmdldCA9IHJlbmRlcmVyLmZpbHRlck1hbmFnZXIuZ2V0UmVuZGVyVGFyZ2V0KHRydWUpO1xuICAgICAgICB2YXIgZmxpcCA9IGlucHV0O1xuICAgICAgICB2YXIgZmxvcCA9IHJlbmRlclRhcmdldDtcblxuICAgICAgICBmb3IodmFyIGkgPSAwOyBpIDwgdGhpcy5wYXNzZXMtMTsgaSsrKVxuICAgICAgICB7XG4gICAgICAgICAgICByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLmFwcGx5RmlsdGVyKHNoYWRlciwgZmxpcCwgZmxvcCwgdHJ1ZSk7XG5cbiAgICAgICAgICAgdmFyIHRlbXAgPSBmbG9wO1xuICAgICAgICAgICBmbG9wID0gZmxpcDtcbiAgICAgICAgICAgZmxpcCA9IHRlbXA7XG4gICAgICAgIH1cblxuICAgICAgICByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLmFwcGx5RmlsdGVyKHNoYWRlciwgZmxpcCwgb3V0cHV0LCBjbGVhcik7XG5cbiAgICAgICAgcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5yZXR1cm5SZW5kZXJUYXJnZXQocmVuZGVyVGFyZ2V0KTtcbiAgICB9XG59O1xuXG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKEJsdXJZRmlsdGVyLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIHN0cmVuZ3RoIG9mIGJvdGggdGhlIGJsdXIuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5CbHVyWUZpbHRlciNcbiAgICAgKiBAZGVmYXVsdCAyXG4gICAgICovXG4gICAgYmx1cjoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiAgdGhpcy5zdHJlbmd0aDtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMucGFkZGluZyA9IE1hdGguYWJzKHZhbHVlKSAqIDAuNTtcbiAgICAgICAgICAgIHRoaXMuc3RyZW5ndGggPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi8uLi9jb3JlJyk7XG4vLyBAc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9zdWJzdGFjay9icmZzL2lzc3Vlcy8yNVxuXG5cbi8qKlxuICogQSBTbWFydCBCbHVyIEZpbHRlci5cbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQWJzdHJhY3RGaWx0ZXJcbiAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnNcbiAqL1xuZnVuY3Rpb24gU21hcnRCbHVyRmlsdGVyKClcbntcbiAgICBjb3JlLkFic3RyYWN0RmlsdGVyLmNhbGwodGhpcyxcbiAgICAgICAgLy8gdmVydGV4IHNoYWRlclxuICAgICAgICBudWxsLFxuICAgICAgICAvLyBmcmFnbWVudCBzaGFkZXJcbiAgICAgICAgXCJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcXG5cXG52YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDtcXG5cXG51bmlmb3JtIHNhbXBsZXIyRCB1U2FtcGxlcjtcXG51bmlmb3JtIHZlYzIgZGVsdGE7XFxuXFxuZmxvYXQgcmFuZG9tKHZlYzMgc2NhbGUsIGZsb2F0IHNlZWQpXFxue1xcbiAgICByZXR1cm4gZnJhY3Qoc2luKGRvdChnbF9GcmFnQ29vcmQueHl6ICsgc2VlZCwgc2NhbGUpKSAqIDQzNzU4LjU0NTMgKyBzZWVkKTtcXG59XFxuXFxudm9pZCBtYWluKHZvaWQpXFxue1xcbiAgICB2ZWM0IGNvbG9yID0gdmVjNCgwLjApO1xcbiAgICBmbG9hdCB0b3RhbCA9IDAuMDtcXG5cXG4gICAgZmxvYXQgb2Zmc2V0ID0gcmFuZG9tKHZlYzMoMTIuOTg5OCwgNzguMjMzLCAxNTEuNzE4MiksIDAuMCk7XFxuXFxuICAgIGZvciAoZmxvYXQgdCA9IC0zMC4wOyB0IDw9IDMwLjA7IHQrKylcXG4gICAge1xcbiAgICAgICAgZmxvYXQgcGVyY2VudCA9ICh0ICsgb2Zmc2V0IC0gMC41KSAvIDMwLjA7XFxuICAgICAgICBmbG9hdCB3ZWlnaHQgPSAxLjAgLSBhYnMocGVyY2VudCk7XFxuICAgICAgICB2ZWM0IHNhbXBsZSA9IHRleHR1cmUyRCh1U2FtcGxlciwgdlRleHR1cmVDb29yZCArIGRlbHRhICogcGVyY2VudCk7XFxuICAgICAgICBzYW1wbGUucmdiICo9IHNhbXBsZS5hO1xcbiAgICAgICAgY29sb3IgKz0gc2FtcGxlICogd2VpZ2h0O1xcbiAgICAgICAgdG90YWwgKz0gd2VpZ2h0O1xcbiAgICB9XFxuXFxuICAgIGdsX0ZyYWdDb2xvciA9IGNvbG9yIC8gdG90YWw7XFxuICAgIGdsX0ZyYWdDb2xvci5yZ2IgLz0gZ2xfRnJhZ0NvbG9yLmEgKyAwLjAwMDAxO1xcbn1cXG5cIixcbiAgICAgICAgLy8gdW5pZm9ybXNcbiAgICAgICAge1xuICAgICAgICAgIGRlbHRhOiB7IHR5cGU6ICd2MicsIHZhbHVlOiB7IHg6IDAuMSwgeTogMC4wIH0gfVxuICAgICAgICB9XG4gICAgKTtcbn1cblxuU21hcnRCbHVyRmlsdGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoY29yZS5BYnN0cmFjdEZpbHRlci5wcm90b3R5cGUpO1xuU21hcnRCbHVyRmlsdGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFNtYXJ0Qmx1ckZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gU21hcnRCbHVyRmlsdGVyO1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi8uLi9jb3JlJyk7XG4vLyBAc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9zdWJzdGFjay9icmZzL2lzc3Vlcy8yNVxuXG5cbi8qKlxuICogVGhlIENvbG9yTWF0cml4RmlsdGVyIGNsYXNzIGxldHMgeW91IGFwcGx5IGEgNXg0IG1hdHJpeCB0cmFuc2Zvcm1hdGlvbiBvbiB0aGUgUkdCQVxuICogY29sb3IgYW5kIGFscGhhIHZhbHVlcyBvZiBldmVyeSBwaXhlbCBvbiB5b3VyIGRpc3BsYXlPYmplY3QgdG8gcHJvZHVjZSBhIHJlc3VsdFxuICogd2l0aCBhIG5ldyBzZXQgb2YgUkdCQSBjb2xvciBhbmQgYWxwaGEgdmFsdWVzLiBJdCdzIHByZXR0eSBwb3dlcmZ1bCFcbiAqXG4gKiBgYGBqc1xuICogIHZhciBjb2xvck1hdHJpeCA9IG5ldyBQSVhJLkNvbG9yTWF0cml4RmlsdGVyKCk7XG4gKiAgY29udGFpbmVyLmZpbHRlcnMgPSBbY29sb3JNYXRyaXhdO1xuICogIGNvbG9yTWF0cml4LmNvbnRyYXN0KDIpO1xuICogYGBgXG4gKiBAYXV0aG9yIENsw6ltZW50IENoZW5lYmF1bHQgPGNsZW1lbnRAZ29vZGJveWRpZ2l0YWwuY29tPlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLkFic3RyYWN0RmlsdGVyXG4gKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzXG4gKi9cbmZ1bmN0aW9uIENvbG9yTWF0cml4RmlsdGVyKClcbntcbiAgICBjb3JlLkFic3RyYWN0RmlsdGVyLmNhbGwodGhpcyxcbiAgICAgICAgLy8gdmVydGV4IHNoYWRlclxuICAgICAgICBudWxsLFxuICAgICAgICAvLyBmcmFnbWVudCBzaGFkZXJcbiAgICAgICAgXCJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcXG5cXG52YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDtcXG51bmlmb3JtIHNhbXBsZXIyRCB1U2FtcGxlcjtcXG51bmlmb3JtIGZsb2F0IG1bMjVdO1xcblxcbnZvaWQgbWFpbih2b2lkKVxcbntcXG5cXG4gICAgdmVjNCBjID0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2VGV4dHVyZUNvb3JkKTtcXG5cXG4gICAgZ2xfRnJhZ0NvbG9yLnIgPSAobVswXSAqIGMucik7XFxuICAgICAgICBnbF9GcmFnQ29sb3IuciArPSAobVsxXSAqIGMuZyk7XFxuICAgICAgICBnbF9GcmFnQ29sb3IuciArPSAobVsyXSAqIGMuYik7XFxuICAgICAgICBnbF9GcmFnQ29sb3IuciArPSAobVszXSAqIGMuYSk7XFxuICAgICAgICBnbF9GcmFnQ29sb3IuciArPSBtWzRdO1xcblxcbiAgICBnbF9GcmFnQ29sb3IuZyA9IChtWzVdICogYy5yKTtcXG4gICAgICAgIGdsX0ZyYWdDb2xvci5nICs9IChtWzZdICogYy5nKTtcXG4gICAgICAgIGdsX0ZyYWdDb2xvci5nICs9IChtWzddICogYy5iKTtcXG4gICAgICAgIGdsX0ZyYWdDb2xvci5nICs9IChtWzhdICogYy5hKTtcXG4gICAgICAgIGdsX0ZyYWdDb2xvci5nICs9IG1bOV07XFxuXFxuICAgICBnbF9GcmFnQ29sb3IuYiA9IChtWzEwXSAqIGMucik7XFxuICAgICAgICBnbF9GcmFnQ29sb3IuYiArPSAobVsxMV0gKiBjLmcpO1xcbiAgICAgICAgZ2xfRnJhZ0NvbG9yLmIgKz0gKG1bMTJdICogYy5iKTtcXG4gICAgICAgIGdsX0ZyYWdDb2xvci5iICs9IChtWzEzXSAqIGMuYSk7XFxuICAgICAgICBnbF9GcmFnQ29sb3IuYiArPSBtWzE0XTtcXG5cXG4gICAgIGdsX0ZyYWdDb2xvci5hID0gKG1bMTVdICogYy5yKTtcXG4gICAgICAgIGdsX0ZyYWdDb2xvci5hICs9IChtWzE2XSAqIGMuZyk7XFxuICAgICAgICBnbF9GcmFnQ29sb3IuYSArPSAobVsxN10gKiBjLmIpO1xcbiAgICAgICAgZ2xfRnJhZ0NvbG9yLmEgKz0gKG1bMThdICogYy5hKTtcXG4gICAgICAgIGdsX0ZyYWdDb2xvci5hICs9IG1bMTldO1xcblxcbn1cXG5cIixcbiAgICAgICAgLy8gY3VzdG9tIHVuaWZvcm1zXG4gICAgICAgIHtcbiAgICAgICAgICAgIG06IHtcbiAgICAgICAgICAgICAgICB0eXBlOiAnMWZ2JywgdmFsdWU6IFtcbiAgICAgICAgICAgICAgICAgICAgMSwgMCwgMCwgMCwgMCxcbiAgICAgICAgICAgICAgICAgICAgMCwgMSwgMCwgMCwgMCxcbiAgICAgICAgICAgICAgICAgICAgMCwgMCwgMSwgMCwgMCxcbiAgICAgICAgICAgICAgICAgICAgMCwgMCwgMCwgMSwgMFxuICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICk7XG59XG5cbkNvbG9yTWF0cml4RmlsdGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoY29yZS5BYnN0cmFjdEZpbHRlci5wcm90b3R5cGUpO1xuQ29sb3JNYXRyaXhGaWx0ZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gQ29sb3JNYXRyaXhGaWx0ZXI7XG5tb2R1bGUuZXhwb3J0cyA9IENvbG9yTWF0cml4RmlsdGVyO1xuXG5cbi8qKlxuICogVHJhbnNmb3JtcyBjdXJyZW50IG1hdHJpeCBhbmQgc2V0IHRoZSBuZXcgb25lXG4gKlxuICogQHBhcmFtIG1hdHJpeCB7bnVtYmVyW119IChtYXQgNXg0KVxuICogQHBhcmFtIG11bHRpcGx5IHtib29sZWFufSBpZiB0cnVlLCBjdXJyZW50IG1hdHJpeCBhbmQgbWF0cml4IGFyZSBtdWx0aXBsaWVkLiBJZiBmYWxzZSwganVzdCBzZXQgdGhlIGN1cnJlbnQgbWF0cml4IHdpdGggQHBhcmFtIG1hdHJpeFxuICovXG5Db2xvck1hdHJpeEZpbHRlci5wcm90b3R5cGUuX2xvYWRNYXRyaXggPSBmdW5jdGlvbiAobWF0cml4LCBtdWx0aXBseSlcbntcbiAgICBtdWx0aXBseSA9ICEhbXVsdGlwbHk7XG5cbiAgICB2YXIgbmV3TWF0cml4ID0gbWF0cml4O1xuXG4gICAgaWYgKG11bHRpcGx5KSB7XG4gICAgICAgIHRoaXMuX211bHRpcGx5KG5ld01hdHJpeCwgdGhpcy51bmlmb3Jtcy5tLnZhbHVlLCBtYXRyaXgpO1xuICAgICAgICBuZXdNYXRyaXggPSB0aGlzLl9jb2xvck1hdHJpeChuZXdNYXRyaXgpO1xuICAgIH1cblxuICAgIC8vIHNldCB0aGUgbmV3IG1hdHJpeFxuICAgIHRoaXMudW5pZm9ybXMubS52YWx1ZSA9IG5ld01hdHJpeDtcbn07XG5cbi8qKlxuICogTXVsdGlwbGllcyB0d28gbWF0NSdzXG4gKlxuICogQHBhcmFtIG91dCB7bnVtYmVyW119IChtYXQgNXg0KSB0aGUgcmVjZWl2aW5nIG1hdHJpeFxuICogQHBhcmFtIGEge251bWJlcltdfSAobWF0IDV4NCkgdGhlIGZpcnN0IG9wZXJhbmRcbiAqIEBwYXJhbSBiIHtudW1iZXJbXX0gKG1hdCA1eDQpIHRoZSBzZWNvbmQgb3BlcmFuZFxuICogQHJldHVybnMgb3V0IHtudW1iZXJbXX0gKG1hdCA1eDQpXG4gKi9cbkNvbG9yTWF0cml4RmlsdGVyLnByb3RvdHlwZS5fbXVsdGlwbHkgPSBmdW5jdGlvbiAob3V0LCBhLCBiKVxue1xuXG4gICAgLy8gUmVkIENoYW5uZWxcbiAgICBvdXRbMF0gPSAoYVswXSAqIGJbMF0pICsgKGFbMV0gKiBiWzVdKSArIChhWzJdICogYlsxMF0pICsgKGFbM10gKiBiWzE1XSk7XG4gICAgb3V0WzFdID0gKGFbMF0gKiBiWzFdKSArIChhWzFdICogYls2XSkgKyAoYVsyXSAqIGJbMTFdKSArIChhWzNdICogYlsxNl0pO1xuICAgIG91dFsyXSA9IChhWzBdICogYlsyXSkgKyAoYVsxXSAqIGJbN10pICsgKGFbMl0gKiBiWzEyXSkgKyAoYVszXSAqIGJbMTddKTtcbiAgICBvdXRbM10gPSAoYVswXSAqIGJbM10pICsgKGFbMV0gKiBiWzhdKSArIChhWzJdICogYlsxM10pICsgKGFbM10gKiBiWzE4XSk7XG4gICAgb3V0WzRdID0gKGFbMF0gKiBiWzRdKSArIChhWzFdICogYls5XSkgKyAoYVsyXSAqIGJbMTRdKSArIChhWzNdICogYlsxOV0pO1xuXG4gICAgLy8gR3JlZW4gQ2hhbm5lbFxuICAgIG91dFs1XSA9IChhWzVdICogYlswXSkgKyAoYVs2XSAqIGJbNV0pICsgKGFbN10gKiBiWzEwXSkgKyAoYVs4XSAqIGJbMTVdKTtcbiAgICBvdXRbNl0gPSAoYVs1XSAqIGJbMV0pICsgKGFbNl0gKiBiWzZdKSArIChhWzddICogYlsxMV0pICsgKGFbOF0gKiBiWzE2XSk7XG4gICAgb3V0WzddID0gKGFbNV0gKiBiWzJdKSArIChhWzZdICogYls3XSkgKyAoYVs3XSAqIGJbMTJdKSArIChhWzhdICogYlsxN10pO1xuICAgIG91dFs4XSA9IChhWzVdICogYlszXSkgKyAoYVs2XSAqIGJbOF0pICsgKGFbN10gKiBiWzEzXSkgKyAoYVs4XSAqIGJbMThdKTtcbiAgICBvdXRbOV0gPSAoYVs1XSAqIGJbNF0pICsgKGFbNl0gKiBiWzldKSArIChhWzddICogYlsxNF0pICsgKGFbOF0gKiBiWzE5XSk7XG5cbiAgICAvLyBCbHVlIENoYW5uZWxcbiAgICBvdXRbMTBdID0gKGFbMTBdICogYlswXSkgKyAoYVsxMV0gKiBiWzVdKSArIChhWzEyXSAqIGJbMTBdKSArIChhWzEzXSAqIGJbMTVdKTtcbiAgICBvdXRbMTFdID0gKGFbMTBdICogYlsxXSkgKyAoYVsxMV0gKiBiWzZdKSArIChhWzEyXSAqIGJbMTFdKSArIChhWzEzXSAqIGJbMTZdKTtcbiAgICBvdXRbMTJdID0gKGFbMTBdICogYlsyXSkgKyAoYVsxMV0gKiBiWzddKSArIChhWzEyXSAqIGJbMTJdKSArIChhWzEzXSAqIGJbMTddKTtcbiAgICBvdXRbMTNdID0gKGFbMTBdICogYlszXSkgKyAoYVsxMV0gKiBiWzhdKSArIChhWzEyXSAqIGJbMTNdKSArIChhWzEzXSAqIGJbMThdKTtcbiAgICBvdXRbMTRdID0gKGFbMTBdICogYls0XSkgKyAoYVsxMV0gKiBiWzldKSArIChhWzEyXSAqIGJbMTRdKSArIChhWzEzXSAqIGJbMTldKTtcblxuICAgIC8vIEFscGhhIENoYW5uZWxcbiAgICBvdXRbMTVdID0gKGFbMTVdICogYlswXSkgKyAoYVsxNl0gKiBiWzVdKSArIChhWzE3XSAqIGJbMTBdKSArIChhWzE4XSAqIGJbMTVdKTtcbiAgICBvdXRbMTZdID0gKGFbMTVdICogYlsxXSkgKyAoYVsxNl0gKiBiWzZdKSArIChhWzE3XSAqIGJbMTFdKSArIChhWzE4XSAqIGJbMTZdKTtcbiAgICBvdXRbMTddID0gKGFbMTVdICogYlsyXSkgKyAoYVsxNl0gKiBiWzddKSArIChhWzE3XSAqIGJbMTJdKSArIChhWzE4XSAqIGJbMTddKTtcbiAgICBvdXRbMThdID0gKGFbMTVdICogYlszXSkgKyAoYVsxNl0gKiBiWzhdKSArIChhWzE3XSAqIGJbMTNdKSArIChhWzE4XSAqIGJbMThdKTtcbiAgICBvdXRbMTldID0gKGFbMTVdICogYls0XSkgKyAoYVsxNl0gKiBiWzldKSArIChhWzE3XSAqIGJbMTRdKSArIChhWzE4XSAqIGJbMTldKTtcblxuICAgIHJldHVybiBvdXQ7XG59O1xuXG4vKipcbiAqIENyZWF0ZSBhIEZsb2F0MzIgQXJyYXkgYW5kIG5vcm1hbGl6ZSB0aGUgb2Zmc2V0IGNvbXBvbmVudCB0byAwLTFcbiAqXG4gKiBAcGFyYW0gbWF0cml4IHtudW1iZXJbXX0gKG1hdCA1eDQpXG4gKiBAcmV0dXJuIG0ge251bWJlcltdfSAobWF0IDV4NCkgd2l0aCBhbGwgdmFsdWVzIGJldHdlZW4gMC0xXG4gKi9cbkNvbG9yTWF0cml4RmlsdGVyLnByb3RvdHlwZS5fY29sb3JNYXRyaXggPSBmdW5jdGlvbiAobWF0cml4KVxue1xuICAgIC8vIENyZWF0ZSBhIEZsb2F0MzIgQXJyYXkgYW5kIG5vcm1hbGl6ZSB0aGUgb2Zmc2V0IGNvbXBvbmVudCB0byAwLTFcbiAgICB2YXIgbSA9IG5ldyBGbG9hdDMyQXJyYXkobWF0cml4KTtcbiAgICBtWzRdIC89IDI1NTtcbiAgICBtWzldIC89IDI1NTtcbiAgICBtWzE0XSAvPSAyNTU7XG4gICAgbVsxOV0gLz0gMjU1O1xuXG4gICAgcmV0dXJuIG07XG59O1xuXG4vKipcbiAqIEFkanVzdHMgYnJpZ2h0bmVzc1xuICpcbiAqIEBwYXJhbSBiIHtudW1iZXJ9IHZhbHVlIG9mIHRoZSBicmlndGhuZXNzICgwIGlzIGJsYWNrKVxuICogQHBhcmFtIG11bHRpcGx5IHtib29sZWFufSByZWZlciB0byAuX2xvYWRNYXRyaXgoKSBtZXRob2RcbiAqL1xuQ29sb3JNYXRyaXhGaWx0ZXIucHJvdG90eXBlLmJyaWdodG5lc3MgPSBmdW5jdGlvbiAoYiwgbXVsdGlwbHkpXG57XG4gICAgdmFyIG1hdHJpeCA9IFtcbiAgICAgICAgYiwgMCwgMCwgMCwgMCxcbiAgICAgICAgMCwgYiwgMCwgMCwgMCxcbiAgICAgICAgMCwgMCwgYiwgMCwgMCxcbiAgICAgICAgMCwgMCwgMCwgMSwgMFxuICAgIF07XG5cbiAgICB0aGlzLl9sb2FkTWF0cml4KG1hdHJpeCwgbXVsdGlwbHkpO1xufTtcblxuLyoqXG4gKiBTZXQgdGhlIG1hdHJpY2VzIGluIGdyZXkgc2NhbGVzXG4gKlxuICogQHBhcmFtIHNjYWxlIHtudW1iZXJ9IHZhbHVlIG9mIHRoZSBncmV5ICgwIGlzIGJsYWNrKVxuICogQHBhcmFtIG11bHRpcGx5IHtib29sZWFufSByZWZlciB0byAuX2xvYWRNYXRyaXgoKSBtZXRob2RcbiAqL1xuQ29sb3JNYXRyaXhGaWx0ZXIucHJvdG90eXBlLmdyZXlzY2FsZSA9IGZ1bmN0aW9uIChzY2FsZSwgbXVsdGlwbHkpXG57XG4gICAgdmFyIG1hdHJpeCA9IFtcbiAgICAgICAgc2NhbGUsIHNjYWxlLCBzY2FsZSwgMCwgMCxcbiAgICAgICAgc2NhbGUsIHNjYWxlLCBzY2FsZSwgMCwgMCxcbiAgICAgICAgc2NhbGUsIHNjYWxlLCBzY2FsZSwgMCwgMCxcbiAgICAgICAgMCwgMCwgMCwgMSwgMFxuICAgIF07XG5cbiAgICB0aGlzLl9sb2FkTWF0cml4KG1hdHJpeCwgbXVsdGlwbHkpO1xufTtcbi8vQW1lcmljYW5pemVkIGFsaWFzXG5Db2xvck1hdHJpeEZpbHRlci5wcm90b3R5cGUuZ3JheXNjYWxlID0gQ29sb3JNYXRyaXhGaWx0ZXIucHJvdG90eXBlLmdyZXlzY2FsZTtcblxuLyoqXG4gKiBTZXQgdGhlIGJsYWNrIGFuZCB3aGl0ZSBtYXRyaWNlXG4gKiBNdWx0aXBseSB0aGUgY3VycmVudCBtYXRyaXhcbiAqXG4gKiBAcGFyYW0gbXVsdGlwbHkge2Jvb2xlYW59IHJlZmVyIHRvIC5fbG9hZE1hdHJpeCgpIG1ldGhvZFxuICovXG5Db2xvck1hdHJpeEZpbHRlci5wcm90b3R5cGUuYmxhY2tBbmRXaGl0ZSA9IGZ1bmN0aW9uIChtdWx0aXBseSlcbntcbiAgICB2YXIgbWF0cml4ID0gW1xuICAgICAgICAwLjMsIDAuNiwgMC4xLCAwLCAwLFxuICAgICAgICAwLjMsIDAuNiwgMC4xLCAwLCAwLFxuICAgICAgICAwLjMsIDAuNiwgMC4xLCAwLCAwLFxuICAgICAgICAwLCAwLCAwLCAxLCAwXG4gICAgXTtcblxuICAgIHRoaXMuX2xvYWRNYXRyaXgobWF0cml4LCBtdWx0aXBseSk7XG59O1xuXG4vKipcbiAqIFNldCB0aGUgaHVlIHByb3BlcnR5IG9mIHRoZSBjb2xvclxuICpcbiAqIEBwYXJhbSByb3RhdGlvbiB7bnVtYmVyfSBpbiBkZWdyZWVzXG4gKiBAcGFyYW0gbXVsdGlwbHkge2Jvb2xlYW59IHJlZmVyIHRvIC5fbG9hZE1hdHJpeCgpIG1ldGhvZFxuICovXG5Db2xvck1hdHJpeEZpbHRlci5wcm90b3R5cGUuaHVlID0gZnVuY3Rpb24gKHJvdGF0aW9uLCBtdWx0aXBseSlcbntcbiAgICByb3RhdGlvbiA9IChyb3RhdGlvbiB8fCAwKSAvIDE4MCAqIE1hdGguUEk7XG4gICAgdmFyIGNvcyA9IE1hdGguY29zKHJvdGF0aW9uKSxcbiAgICAgICAgc2luID0gTWF0aC5zaW4ocm90YXRpb24pO1xuXG4gICAgLy8gbHVtaW5hbmNlUmVkLCBsdW1pbmFuY2VHcmVlbiwgbHVtaW5hbmNlQmx1ZVxuICAgIHZhciBsdW1SID0gMC4yMTMsIC8vIG9yIDAuMzA4NlxuICAgICAgICBsdW1HID0gMC43MTUsIC8vIG9yIDAuNjA5NFxuICAgICAgICBsdW1CID0gMC4wNzI7IC8vIG9yIDAuMDgyMFxuXG4gICAgdmFyIG1hdHJpeCA9IFtcbiAgICAgICAgbHVtUiArIGNvcyAqICgxIC0gbHVtUikgKyBzaW4gKiAoLWx1bVIpLCBsdW1HICsgY29zICogKC1sdW1HKSArIHNpbiAqICgtbHVtRyksIGx1bUIgKyBjb3MgKiAoLWx1bUIpICsgc2luICogKDEgLSBsdW1CKSwgMCwgMCxcbiAgICAgICAgbHVtUiArIGNvcyAqICgtbHVtUikgKyBzaW4gKiAoMC4xNDMpLCBsdW1HICsgY29zICogKDEgLSBsdW1HKSArIHNpbiAqICgwLjE0MCksIGx1bUIgKyBjb3MgKiAoLWx1bUIpICsgc2luICogKC0wLjI4MyksIDAsIDAsXG4gICAgICAgIGx1bVIgKyBjb3MgKiAoLWx1bVIpICsgc2luICogKC0oMSAtIGx1bVIpKSwgbHVtRyArIGNvcyAqICgtbHVtRykgKyBzaW4gKiAobHVtRyksIGx1bUIgKyBjb3MgKiAoMSAtIGx1bUIpICsgc2luICogKGx1bUIpLCAwLCAwLFxuICAgICAgICAwLCAwLCAwLCAxLCAwXG4gICAgXTtcblxuICAgIHRoaXMuX2xvYWRNYXRyaXgobWF0cml4LCBtdWx0aXBseSk7XG59O1xuXG5cbi8qKlxuICogU2V0IHRoZSBjb250cmFzdCBtYXRyaXgsIGluY3JlYXNlIHRoZSBzZXBhcmF0aW9uIGJldHdlZW4gZGFyayBhbmQgYnJpZ2h0XG4gKiBJbmNyZWFzZSBjb250cmFzdCA6IHNoYWRvd3MgZGFya2VyIGFuZCBoaWdobGlnaHRzIGJyaWdodGVyXG4gKiBEZWNyZWFzZSBjb250cmFzdCA6IGJyaW5nIHRoZSBzaGFkb3dzIHVwIGFuZCB0aGUgaGlnaGxpZ2h0cyBkb3duXG4gKlxuICogQHBhcmFtIGFtb3VudCB7bnVtYmVyfSB2YWx1ZSBvZiB0aGUgY29udHJhc3RcbiAqIEBwYXJhbSBtdWx0aXBseSB7Ym9vbGVhbn0gcmVmZXIgdG8gLl9sb2FkTWF0cml4KCkgbWV0aG9kXG4gKi9cbkNvbG9yTWF0cml4RmlsdGVyLnByb3RvdHlwZS5jb250cmFzdCA9IGZ1bmN0aW9uIChhbW91bnQsIG11bHRpcGx5KVxue1xuICAgIHZhciB2ID0gKGFtb3VudCB8fCAwKSArIDE7XG4gICAgdmFyIG8gPSAtMTI4ICogKHYgLSAxKTtcblxuICAgIHZhciBtYXRyaXggPSBbXG4gICAgICAgIHYsIDAsIDAsIDAsIG8sXG4gICAgICAgIDAsIHYsIDAsIDAsIG8sXG4gICAgICAgIDAsIDAsIHYsIDAsIG8sXG4gICAgICAgIDAsIDAsIDAsIDEsIDBcbiAgICBdO1xuXG4gICAgdGhpcy5fbG9hZE1hdHJpeChtYXRyaXgsIG11bHRpcGx5KTtcbn07XG5cbi8qKlxuICogU2V0IHRoZSBzYXR1cmF0aW9uIG1hdHJpeCwgaW5jcmVhc2UgdGhlIHNlcGFyYXRpb24gYmV0d2VlbiBjb2xvcnNcbiAqIEluY3JlYXNlIHNhdHVyYXRpb24gOiBpbmNyZWFzZSBjb250cmFzdCwgYnJpZ2h0bmVzcywgYW5kIHNoYXJwbmVzc1xuICpcbiAqIEBwYXJhbSBhbW91bnQge251bWJlcn1cbiAqIEBwYXJhbSBtdWx0aXBseSB7Ym9vbGVhbn0gcmVmZXIgdG8gLl9sb2FkTWF0cml4KCkgbWV0aG9kXG4gKi9cbkNvbG9yTWF0cml4RmlsdGVyLnByb3RvdHlwZS5zYXR1cmF0ZSA9IGZ1bmN0aW9uIChhbW91bnQsIG11bHRpcGx5KVxue1xuICAgIHZhciB4ID0gKGFtb3VudCB8fCAwKSAqIDIgLyAzICsgMTtcbiAgICB2YXIgeSA9ICgoeCAtIDEpICogLTAuNSk7XG5cbiAgICB2YXIgbWF0cml4ID0gW1xuICAgICAgICB4LCB5LCB5LCAwLCAwLFxuICAgICAgICB5LCB4LCB5LCAwLCAwLFxuICAgICAgICB5LCB5LCB4LCAwLCAwLFxuICAgICAgICAwLCAwLCAwLCAxLCAwXG4gICAgXTtcblxuICAgIHRoaXMuX2xvYWRNYXRyaXgobWF0cml4LCBtdWx0aXBseSk7XG59O1xuXG4vKipcbiAqIERlc2F0dXJhdGUgaW1hZ2UgKHJlbW92ZSBjb2xvcilcbiAqXG4gKiBDYWxsIHRoZSBzYXR1cmF0ZSBmdW5jdGlvblxuICpcbiAqIEBwYXJhbSBtdWx0aXBseSB7Ym9vbGVhbn0gcmVmZXIgdG8gLl9sb2FkTWF0cml4KCkgbWV0aG9kXG4gKi9cbkNvbG9yTWF0cml4RmlsdGVyLnByb3RvdHlwZS5kZXNhdHVyYXRlID0gZnVuY3Rpb24gKG11bHRpcGx5KSAvLyBqc2hpbnQgdW51c2VkOmZhbHNlXG57XG4gICAgdGhpcy5zYXR1cmF0ZSgtMSk7XG59O1xuXG4vKipcbiAqIE5lZ2F0aXZlIGltYWdlIChpbnZlcnNlIG9mIGNsYXNzaWMgcmdiIG1hdHJpeClcbiAqXG4gKiBAcGFyYW0gbXVsdGlwbHkge2Jvb2xlYW59IHJlZmVyIHRvIC5fbG9hZE1hdHJpeCgpIG1ldGhvZFxuICovXG5Db2xvck1hdHJpeEZpbHRlci5wcm90b3R5cGUubmVnYXRpdmUgPSBmdW5jdGlvbiAobXVsdGlwbHkpXG57XG4gICAgdmFyIG1hdHJpeCA9IFtcbiAgICAgICAgMCwgMSwgMSwgMCwgMCxcbiAgICAgICAgMSwgMCwgMSwgMCwgMCxcbiAgICAgICAgMSwgMSwgMCwgMCwgMCxcbiAgICAgICAgMCwgMCwgMCwgMSwgMFxuICAgIF07XG5cbiAgICB0aGlzLl9sb2FkTWF0cml4KG1hdHJpeCwgbXVsdGlwbHkpO1xufTtcblxuLyoqXG4gKiBTZXBpYSBpbWFnZVxuICpcbiAqIEBwYXJhbSBtdWx0aXBseSB7Ym9vbGVhbn0gcmVmZXIgdG8gLl9sb2FkTWF0cml4KCkgbWV0aG9kXG4gKi9cbkNvbG9yTWF0cml4RmlsdGVyLnByb3RvdHlwZS5zZXBpYSA9IGZ1bmN0aW9uIChtdWx0aXBseSlcbntcbiAgICB2YXIgbWF0cml4ID0gW1xuICAgICAgICAwLjM5MywgMC43Njg5OTk5LCAwLjE4ODk5OTk5LCAwLCAwLFxuICAgICAgICAwLjM0OSwgMC42ODU5OTk5LCAwLjE2Nzk5OTk5LCAwLCAwLFxuICAgICAgICAwLjI3MiwgMC41MzM5OTk5LCAwLjEzMDk5OTk5LCAwLCAwLFxuICAgICAgICAwLCAwLCAwLCAxLCAwXG4gICAgXTtcblxuICAgIHRoaXMuX2xvYWRNYXRyaXgobWF0cml4LCBtdWx0aXBseSk7XG59O1xuXG4vKipcbiAqIENvbG9yIG1vdGlvbiBwaWN0dXJlIHByb2Nlc3MgaW52ZW50ZWQgaW4gMTkxNiAodGhhbmtzIERvbWluaWMgU3phYmxld3NraSlcbiAqXG4gKiBAcGFyYW0gbXVsdGlwbHkge2Jvb2xlYW59IHJlZmVyIHRvIC5fbG9hZE1hdHJpeCgpIG1ldGhvZFxuICovXG5Db2xvck1hdHJpeEZpbHRlci5wcm90b3R5cGUudGVjaG5pY29sb3IgPSBmdW5jdGlvbiAobXVsdGlwbHkpXG57XG4gICAgdmFyIG1hdHJpeCA9IFtcbiAgICAgICAgMS45MTI1Mjc3ODkxNDU2MDgzLCAtMC44NTQ1MzQ0OTc2OTUxNjQ1LCAtMC4wOTE1NTUwODQ4Mjc1NTU4NSwgMCwgMTEuNzkzNjAzNDM0Mzc3MzM3LFxuICAgICAgICAtMC4zMDg3ODMzMzg1OTI4MDk3LCAxLjc2NTg5MDg1NTU0NTg0MjgsIC0wLjEwNjAxNzQzMDc0NzIyMjQ1LCAwLCAtNzAuMzUyMDUxNjE0NjEzOTgsXG4gICAgICAgIC0wLjIzMTEwMzM3NzU0ODYxNiwgLTAuNzUwMTg5OTE5NzQ0MDIxMiwgMS44NDc1OTc4MTYxMDgxODksIDAsIDMwLjk1MDk0MDg2OTQ5MTEzOCxcbiAgICAgICAgMCwgMCwgMCwgMSwgMFxuICAgIF07XG5cbiAgICB0aGlzLl9sb2FkTWF0cml4KG1hdHJpeCwgbXVsdGlwbHkpO1xufTtcblxuLyoqXG4gKiBQb2xhcm9pZCBmaWx0ZXJcbiAqXG4gKiBAcGFyYW0gbXVsdGlwbHkge2Jvb2xlYW59IHJlZmVyIHRvIC5fbG9hZE1hdHJpeCgpIG1ldGhvZFxuICovXG5Db2xvck1hdHJpeEZpbHRlci5wcm90b3R5cGUucG9sYXJvaWQgPSBmdW5jdGlvbiAobXVsdGlwbHkpXG57XG4gICAgdmFyIG1hdHJpeCA9IFtcbiAgICAgICAgMS40MzgsIC0wLjA2MiwgLTAuMDYyLCAwLCAwLFxuICAgICAgICAtMC4xMjIsIDEuMzc4LCAtMC4xMjIsIDAsIDAsXG4gICAgICAgIC0wLjAxNiwgLTAuMDE2LCAxLjQ4MywgMCwgMCxcbiAgICAgICAgMCwgMCwgMCwgMSwgMFxuICAgIF07XG5cbiAgICB0aGlzLl9sb2FkTWF0cml4KG1hdHJpeCwgbXVsdGlwbHkpO1xufTtcblxuLyoqXG4gKiBGaWx0ZXIgd2hvIHRyYW5zZm9ybXMgOiBSZWQgLT4gQmx1ZSBhbmQgQmx1ZSAtPiBSZWRcbiAqXG4gKiBAcGFyYW0gbXVsdGlwbHkge2Jvb2xlYW59IHJlZmVyIHRvIC5fbG9hZE1hdHJpeCgpIG1ldGhvZFxuICovXG5Db2xvck1hdHJpeEZpbHRlci5wcm90b3R5cGUudG9CR1IgPSBmdW5jdGlvbiAobXVsdGlwbHkpXG57XG4gICAgdmFyIG1hdHJpeCA9IFtcbiAgICAgICAgMCwgMCwgMSwgMCwgMCxcbiAgICAgICAgMCwgMSwgMCwgMCwgMCxcbiAgICAgICAgMSwgMCwgMCwgMCwgMCxcbiAgICAgICAgMCwgMCwgMCwgMSwgMFxuICAgIF07XG5cbiAgICB0aGlzLl9sb2FkTWF0cml4KG1hdHJpeCwgbXVsdGlwbHkpO1xufTtcblxuLyoqXG4gKiBDb2xvciByZXZlcnNhbCBmaWxtIGludHJvZHVjZWQgYnkgRWFzdG1hbiBLb2RhayBpbiAxOTM1LiAodGhhbmtzIERvbWluaWMgU3phYmxld3NraSlcbiAqXG4gKiBAcGFyYW0gbXVsdGlwbHkge2Jvb2xlYW59IHJlZmVyIHRvIC5fbG9hZE1hdHJpeCgpIG1ldGhvZFxuICovXG5Db2xvck1hdHJpeEZpbHRlci5wcm90b3R5cGUua29kYWNocm9tZSA9IGZ1bmN0aW9uIChtdWx0aXBseSlcbntcbiAgICB2YXIgbWF0cml4ID0gW1xuICAgICAgICAxLjEyODU1ODIzOTY1OTM1MjUsIC0wLjM5NjczODIyODM2MDEzNDgsIC0wLjAzOTkyNTU5MTcyOTIxNzkzLCAwLCA2My43Mjk1ODc2MjE5NjUwMixcbiAgICAgICAgLTAuMTY0MDQzMzk5NjIyNDQ2MTYsIDEuMDgzNTI1MTU2NjI5MTMwNCwgLTAuMDU0OTg4MDUxMTU2MzMxMzIsIDAsIDI0LjczMjQwNzg5NjcwNjIwMyxcbiAgICAgICAgLTAuMTY3ODYwMTA3MDYxNTU3NjMsIC0wLjU2MDM0MTYyNzc2OTUyNDgsIDEuNjAxNDg1MDc2MTk2NDk0MywgMCwgMzUuNjI5ODI4MDc0NjA5NDYsXG4gICAgICAgIDAsIDAsIDAsIDEsIDBcbiAgICBdO1xuXG4gICAgdGhpcy5fbG9hZE1hdHJpeChtYXRyaXgsIG11bHRpcGx5KTtcbn07XG5cbi8qKlxuICogQnJvd24gZGVsaWNpb3VzIGJyb3duaSBmaWx0ZXIgKHRoYW5rcyBEb21pbmljIFN6YWJsZXdza2kpXG4gKlxuICogQHBhcmFtIG11bHRpcGx5IHtib29sZWFufSByZWZlciB0byAuX2xvYWRNYXRyaXgoKSBtZXRob2RcbiAqL1xuQ29sb3JNYXRyaXhGaWx0ZXIucHJvdG90eXBlLmJyb3duaSA9IGZ1bmN0aW9uIChtdWx0aXBseSlcbntcbiAgICB2YXIgbWF0cml4ID0gW1xuICAgICAgICAwLjU5OTcwMjM0OTgxNTk3MTUsIDAuMzQ1NTMyNDMwNDgzOTEyNjMsIC0wLjI3MDgyOTg2NzQ1MzgwNDIsIDAsIDQ3LjQzMTkyODU1NjAwODczLFxuICAgICAgICAtMC4wMzc3MDMyNDk4Mzc3ODMxNTcsIDAuODYwOTU3NzU4Nzk5MjY0MSwgMC4xNTA1OTU1MjM4ODQ1OTkxMywgMCwgLTM2Ljk2ODQxNDk4MzE5MTI3LFxuICAgICAgICAwLjI0MTEzNjM1MTI4MTUzMzM1LCAtMC4wNzQ0MTAzNzkwODQyMjQ5MiwgMC40NDk3MjE4MjA2NDg3NzE1MywgMCwgLTcuNTYyMDc1Mjc3NTkxMjgzLFxuICAgICAgICAwLCAwLCAwLCAxLCAwXG4gICAgXTtcblxuICAgIHRoaXMuX2xvYWRNYXRyaXgobWF0cml4LCBtdWx0aXBseSk7XG59O1xuXG4vKlxuICogVmludGFnZSBmaWx0ZXIgKHRoYW5rcyBEb21pbmljIFN6YWJsZXdza2kpXG4gKlxuICogQHBhcmFtIG11bHRpcGx5IHtib29sZWFufSByZWZlciB0byAuX2xvYWRNYXRyaXgoKSBtZXRob2RcbiAqL1xuQ29sb3JNYXRyaXhGaWx0ZXIucHJvdG90eXBlLnZpbnRhZ2UgPSBmdW5jdGlvbiAobXVsdGlwbHkpXG57XG4gICAgdmFyIG1hdHJpeCA9IFtcbiAgICAgICAgMC42Mjc5MzQ1NjM1NjA1OTk0LCAwLjMyMDIxODM0MjA4MTkzNjcsIC0wLjAzOTY1NDA4MjExMzEyNDUzLCAwLCA5LjY1MTI4NTgzNTI5NDEyMyxcbiAgICAgICAgMC4wMjU3ODM5NzcwNDgwODg2OCwgMC42NDQxMTg4NjQ0Mzc0NzcxLCAwLjAzMjU5MTI3NjE2MTQ5Mjk0LCAwLCA3LjQ2MjgyOTE3NjQ3MDU5MSxcbiAgICAgICAgMC4wNDY2MDU1NTU2NzgyNzE5LCAtMC4wODUxMjMyOTg3MjQ3ODkxLCAwLjUyNDE2NDgwMTg3MDA0NjUsIDAsIDUuMTU5MTkwNTg4MjM1Mjk2LFxuICAgICAgICAwLCAwLCAwLCAxLCAwXG4gICAgXTtcblxuICAgIHRoaXMuX2xvYWRNYXRyaXgobWF0cml4LCBtdWx0aXBseSk7XG59O1xuXG4vKlxuICogV2UgZG9uJ3Qga25vdyBleGFjdGx5IHdoYXQgaXQgZG9lcywga2luZCBvZiBncmFkaWVudCBtYXAsIGJ1dCBmdW5ueSB0byBwbGF5IHdpdGghXG4gKlxuICogQHBhcmFtIGRlc2F0dXJhdGlvbiB7bnVtYmVyfVxuICogQHBhcmFtIHRvbmVkIHtudW1iZXJ9XG4gKiBAcGFyYW0gbGlnaHRDb2xvciB7c3RyaW5nfSAoZXhhbXBsZSA6IFwiMHhGRkU1ODBcIilcbiAqIEBwYXJhbSBkYXJrQ29sb3Ige3N0cmluZ30gIChleGFtcGxlIDogXCIweEZGRTU4MFwiKVxuICpcbiAqIEBwYXJhbSBtdWx0aXBseSB7Ym9vbGVhbn0gcmVmZXIgdG8gLl9sb2FkTWF0cml4KCkgbWV0aG9kXG4gKi9cbkNvbG9yTWF0cml4RmlsdGVyLnByb3RvdHlwZS5jb2xvclRvbmUgPSBmdW5jdGlvbiAoZGVzYXR1cmF0aW9uLCB0b25lZCwgbGlnaHRDb2xvciwgZGFya0NvbG9yLCBtdWx0aXBseSlcbntcbiAgICBkZXNhdHVyYXRpb24gPSBkZXNhdHVyYXRpb24gfHwgMC4yO1xuICAgIHRvbmVkID0gdG9uZWQgfHwgMC4xNTtcbiAgICBsaWdodENvbG9yID0gbGlnaHRDb2xvciB8fCAweEZGRTU4MDtcbiAgICBkYXJrQ29sb3IgPSBkYXJrQ29sb3IgfHwgMHgzMzgwMDA7XG5cbiAgICB2YXIgbFIgPSAoKGxpZ2h0Q29sb3IgPj4gMTYpICYgMHhGRikgLyAyNTU7XG4gICAgdmFyIGxHID0gKChsaWdodENvbG9yID4+IDgpICYgMHhGRikgLyAyNTU7XG4gICAgdmFyIGxCID0gKGxpZ2h0Q29sb3IgJiAweEZGKSAvIDI1NTtcblxuICAgIHZhciBkUiA9ICgoZGFya0NvbG9yID4+IDE2KSAmIDB4RkYpIC8gMjU1O1xuICAgIHZhciBkRyA9ICgoZGFya0NvbG9yID4+IDgpICYgMHhGRikgLyAyNTU7XG4gICAgdmFyIGRCID0gKGRhcmtDb2xvciAmIDB4RkYpIC8gMjU1O1xuXG4gICAgdmFyIG1hdHJpeCA9IFtcbiAgICAgICAgMC4zLCAwLjU5LCAwLjExLCAwLCAwLFxuICAgICAgICBsUiwgbEcsIGxCLCBkZXNhdHVyYXRpb24sIDAsXG4gICAgICAgIGRSLCBkRywgZEIsIHRvbmVkLCAwLFxuICAgICAgICBsUiAtIGRSLCBsRyAtIGRHLCBsQiAtIGRCLCAwLCAwXG4gICAgXTtcblxuICAgIHRoaXMuX2xvYWRNYXRyaXgobWF0cml4LCBtdWx0aXBseSk7XG59O1xuXG4vKlxuICogTmlnaHQgZWZmZWN0XG4gKlxuICogQHBhcmFtIGludGVuc2l0eSB7bnVtYmVyfVxuICogQHBhcmFtIG11bHRpcGx5IHtib29sZWFufSByZWZlciB0byAuX2xvYWRNYXRyaXgoKSBtZXRob2RcbiAqL1xuQ29sb3JNYXRyaXhGaWx0ZXIucHJvdG90eXBlLm5pZ2h0ID0gZnVuY3Rpb24gKGludGVuc2l0eSwgbXVsdGlwbHkpXG57XG4gICAgaW50ZW5zaXR5ID0gaW50ZW5zaXR5IHx8IDAuMTtcbiAgICB2YXIgbWF0cml4ID0gW1xuICAgICAgICBpbnRlbnNpdHkgKiAoIC0yLjApLCAtaW50ZW5zaXR5LCAwLCAwLCAwLFxuICAgICAgICAtaW50ZW5zaXR5LCAwLCBpbnRlbnNpdHksIDAsIDAsXG4gICAgICAgIDAsIGludGVuc2l0eSwgaW50ZW5zaXR5ICogMi4wLCAwLCAwLFxuICAgICAgICAwLCAwLCAwLCAxLCAwXG4gICAgXTtcblxuICAgIHRoaXMuX2xvYWRNYXRyaXgobWF0cml4LCBtdWx0aXBseSk7XG59O1xuXG5cbi8qXG4gKiBQcmVkYXRvciBlZmZlY3RcbiAqXG4gKiBFcmFzZSB0aGUgY3VycmVudCBtYXRyaXggYnkgc2V0dGluZyBhIG5ldyBpbmRlcGVudCBvbmVcbiAqXG4gKiBAcGFyYW0gYW1vdW50IHtudW1iZXJ9IGhvdyBtdWNoIHRoZSBwcmVkYXRvciBmZWVscyBoaXMgZnV0dXJlIHZpY3RpbVxuICogQHBhcmFtIG11bHRpcGx5IHtib29sZWFufSByZWZlciB0byAuX2xvYWRNYXRyaXgoKSBtZXRob2RcbiAqL1xuQ29sb3JNYXRyaXhGaWx0ZXIucHJvdG90eXBlLnByZWRhdG9yID0gZnVuY3Rpb24gKGFtb3VudCwgbXVsdGlwbHkpXG57XG4gICAgdmFyIG1hdHJpeCA9IFtcbiAgICAgICAgMTEuMjI0MTMwNjMwNDkzMTY0ICogYW1vdW50LCAtNC43OTQ0ODY5OTk1MTE3MTkgKiBhbW91bnQsIC0yLjg3NDYxMTg1NDU1MzIyMjcgKiBhbW91bnQsIDAgKiBhbW91bnQsIDAuNDAzNDI0MzgyMjA5Nzc3ODMgKiBhbW91bnQsXG4gICAgICAgIC0zLjYzMzA2OTc1MzY0Njg1MDYgKiBhbW91bnQsIDkuMTkzMTU3MTk2MDQ0OTIyICogYW1vdW50LCAtMi45NTE4MTA4MzY3OTE5OTIgKiBhbW91bnQsIDAgKiBhbW91bnQsIC0xLjMxNjEzNTA0ODg2NjI3MiAqIGFtb3VudCxcbiAgICAgICAgLTMuMjE4NDE5NzkwMjY3OTQ0MyAqIGFtb3VudCwgLTQuMjM3NTAzMDUxNzU3ODEyNSAqIGFtb3VudCwgNy40NzY0NDgwNTkwODIwMzEgKiBhbW91bnQsIDAgKiBhbW91bnQsIDAuODA0NDQ1OTIyMzc0NzI1MyAqIGFtb3VudCxcbiAgICAgICAgMCwgMCwgMCwgMSwgMFxuICAgIF07XG5cbiAgICB0aGlzLl9sb2FkTWF0cml4KG1hdHJpeCwgbXVsdGlwbHkpO1xufTtcblxuLypcbiAqIExTRCBlZmZlY3RcbiAqXG4gKiBNdWx0aXBseSB0aGUgY3VycmVudCBtYXRyaXhcbiAqXG4gKiBAcGFyYW0gYW1vdW50IHtudW1iZXJ9IEhvdyBjcmF6eSBpcyB5b3VyIGVmZmVjdFxuICogQHBhcmFtIG11bHRpcGx5IHtib29sZWFufSByZWZlciB0byAuX2xvYWRNYXRyaXgoKSBtZXRob2RcbiAqL1xuQ29sb3JNYXRyaXhGaWx0ZXIucHJvdG90eXBlLmxzZCA9IGZ1bmN0aW9uIChtdWx0aXBseSlcbntcbiAgICB2YXIgbWF0cml4ID0gW1xuICAgICAgICAyLCAtMC40LCAwLjUsIDAsIDAsXG4gICAgICAgIC0wLjUsIDIsIC0wLjQsIDAsIDAsXG4gICAgICAgIC0wLjQsIC0wLjUsIDMsIDAsIDAsXG4gICAgICAgIDAsIDAsIDAsIDEsIDBcbiAgICBdO1xuXG4gICAgdGhpcy5fbG9hZE1hdHJpeChtYXRyaXgsIG11bHRpcGx5KTtcbn07XG5cbi8qXG4gKiBFcmFzZSB0aGUgY3VycmVudCBtYXRyaXggYnkgc2V0dGluZyB0aGUgZGVmYXVsdCBvbmVcbiAqXG4gKi9cbkNvbG9yTWF0cml4RmlsdGVyLnByb3RvdHlwZS5yZXNldCA9IGZ1bmN0aW9uICgpXG57XG4gICAgdmFyIG1hdHJpeCA9IFtcbiAgICAgICAgMSwgMCwgMCwgMCwgMCxcbiAgICAgICAgMCwgMSwgMCwgMCwgMCxcbiAgICAgICAgMCwgMCwgMSwgMCwgMCxcbiAgICAgICAgMCwgMCwgMCwgMSwgMFxuICAgIF07XG5cbiAgICB0aGlzLl9sb2FkTWF0cml4KG1hdHJpeCwgZmFsc2UpO1xufTtcblxuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhDb2xvck1hdHJpeEZpbHRlci5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBtYXRyaXggb2YgdGhlIGNvbG9yIG1hdHJpeCBmaWx0ZXJcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcltdfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuQ29sb3JNYXRyaXhGaWx0ZXIjXG4gICAgICogQGRlZmF1bHQgWzEsIDAsIDAsIDAsIDAsIDAsIDEsIDAsIDAsIDAsIDAsIDAsIDEsIDAsIDAsIDAsIDAsIDAsIDEsIDBdXG4gICAgICovXG4gICAgbWF0cml4OiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudW5pZm9ybXMubS52YWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudW5pZm9ybXMubS52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfVxufSk7XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uLy4uL2NvcmUnKTtcbi8vIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL3N1YnN0YWNrL2JyZnMvaXNzdWVzLzI1XG5cblxuLyoqXG4gKiBUaGlzIGxvd2VycyB0aGUgY29sb3IgZGVwdGggb2YgeW91ciBpbWFnZSBieSB0aGUgZ2l2ZW4gYW1vdW50LCBwcm9kdWNpbmcgYW4gaW1hZ2Ugd2l0aCBhIHNtYWxsZXIgcGFsZXR0ZS5cbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQWJzdHJhY3RGaWx0ZXJcbiAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnNcbiAqL1xuZnVuY3Rpb24gQ29sb3JTdGVwRmlsdGVyKClcbntcbiAgICBjb3JlLkFic3RyYWN0RmlsdGVyLmNhbGwodGhpcyxcbiAgICAgICAgLy8gdmVydGV4IHNoYWRlclxuICAgICAgICBudWxsLFxuICAgICAgICAvLyBmcmFnbWVudCBzaGFkZXJcbiAgICAgICAgXCJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcXG5cXG52YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDtcXG5cXG51bmlmb3JtIHNhbXBsZXIyRCB1U2FtcGxlcjtcXG51bmlmb3JtIGZsb2F0IHN0ZXA7XFxuXFxudm9pZCBtYWluKHZvaWQpXFxue1xcbiAgICB2ZWM0IGNvbG9yID0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2VGV4dHVyZUNvb3JkKTtcXG5cXG4gICAgY29sb3IgPSBmbG9vcihjb2xvciAqIHN0ZXApIC8gc3RlcDtcXG5cXG4gICAgZ2xfRnJhZ0NvbG9yID0gY29sb3I7XFxufVxcblwiLFxuICAgICAgICAvLyBjdXN0b20gdW5pZm9ybXNcbiAgICAgICAge1xuICAgICAgICAgICAgc3RlcDogeyB0eXBlOiAnMWYnLCB2YWx1ZTogNSB9XG4gICAgICAgIH1cbiAgICApO1xufVxuXG5Db2xvclN0ZXBGaWx0ZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShjb3JlLkFic3RyYWN0RmlsdGVyLnByb3RvdHlwZSk7XG5Db2xvclN0ZXBGaWx0ZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gQ29sb3JTdGVwRmlsdGVyO1xubW9kdWxlLmV4cG9ydHMgPSBDb2xvclN0ZXBGaWx0ZXI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKENvbG9yU3RlcEZpbHRlci5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBUaGUgbnVtYmVyIG9mIHN0ZXBzIHRvIHJlZHVjZSB0aGUgcGFsZXR0ZSBieS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLkNvbG9yU3RlcEZpbHRlciNcbiAgICAgKi9cbiAgICBzdGVwOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudW5pZm9ybXMuc3RlcC52YWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudW5pZm9ybXMuc3RlcC52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfVxufSk7XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uLy4uL2NvcmUnKTtcbi8vIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL3N1YnN0YWNrL2JyZnMvaXNzdWVzLzI1XG5cblxuLyoqXG4gKiBUaGUgQ29udm9sdXRpb25GaWx0ZXIgY2xhc3MgYXBwbGllcyBhIG1hdHJpeCBjb252b2x1dGlvbiBmaWx0ZXIgZWZmZWN0LlxuICogQSBjb252b2x1dGlvbiBjb21iaW5lcyBwaXhlbHMgaW4gdGhlIGlucHV0IGltYWdlIHdpdGggbmVpZ2hib3JpbmcgcGl4ZWxzIHRvIHByb2R1Y2UgYSBuZXcgaW1hZ2UuXG4gKiBBIHdpZGUgdmFyaWV0eSBvZiBpbWFnZSBlZmZlY3RzIGNhbiBiZSBhY2hpZXZlZCB0aHJvdWdoIGNvbnZvbHV0aW9ucywgaW5jbHVkaW5nIGJsdXJyaW5nLCBlZGdlXG4gKiBkZXRlY3Rpb24sIHNoYXJwZW5pbmcsIGVtYm9zc2luZywgYW5kIGJldmVsaW5nLiBUaGUgbWF0cml4IHNob3VsZCBiZSBzcGVjaWZpZWQgYXMgYSA5IHBvaW50IEFycmF5LlxuICogU2VlIGh0dHA6Ly9kb2NzLmdpbXAub3JnL2VuL3BsdWctaW4tY29udm1hdHJpeC5odG1sIGZvciBtb3JlIGluZm8uXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLkFic3RyYWN0RmlsdGVyXG4gKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzXG4gKiBAcGFyYW0gbWF0cml4IHtudW1iZXJbXX0gQW4gYXJyYXkgb2YgdmFsdWVzIHVzZWQgZm9yIG1hdHJpeCB0cmFuc2Zvcm1hdGlvbi4gU3BlY2lmaWVkIGFzIGEgOSBwb2ludCBBcnJheS5cbiAqIEBwYXJhbSB3aWR0aCB7bnVtYmVyfSBXaWR0aCBvZiB0aGUgb2JqZWN0IHlvdSBhcmUgdHJhbnNmb3JtaW5nXG4gKiBAcGFyYW0gaGVpZ2h0IHtudW1iZXJ9IEhlaWdodCBvZiB0aGUgb2JqZWN0IHlvdSBhcmUgdHJhbnNmb3JtaW5nXG4gKi9cbmZ1bmN0aW9uIENvbnZvbHV0aW9uRmlsdGVyKG1hdHJpeCwgd2lkdGgsIGhlaWdodClcbntcbiAgICBjb3JlLkFic3RyYWN0RmlsdGVyLmNhbGwodGhpcyxcbiAgICAgICAgLy8gdmVydGV4IHNoYWRlclxuICAgICAgICBudWxsLFxuICAgICAgICAvLyBmcmFnbWVudCBzaGFkZXJcbiAgICAgICAgXCJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcXG5cXG52YXJ5aW5nIG1lZGl1bXAgdmVjMiB2VGV4dHVyZUNvb3JkO1xcblxcbnVuaWZvcm0gc2FtcGxlcjJEIHVTYW1wbGVyO1xcbnVuaWZvcm0gdmVjMiB0ZXhlbFNpemU7XFxudW5pZm9ybSBmbG9hdCBtYXRyaXhbOV07XFxuXFxudm9pZCBtYWluKHZvaWQpXFxue1xcbiAgIHZlYzQgYzExID0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2VGV4dHVyZUNvb3JkIC0gdGV4ZWxTaXplKTsgLy8gdG9wIGxlZnRcXG4gICB2ZWM0IGMxMiA9IHRleHR1cmUyRCh1U2FtcGxlciwgdmVjMih2VGV4dHVyZUNvb3JkLngsIHZUZXh0dXJlQ29vcmQueSAtIHRleGVsU2l6ZS55KSk7IC8vIHRvcCBjZW50ZXJcXG4gICB2ZWM0IGMxMyA9IHRleHR1cmUyRCh1U2FtcGxlciwgdmVjMih2VGV4dHVyZUNvb3JkLnggKyB0ZXhlbFNpemUueCwgdlRleHR1cmVDb29yZC55IC0gdGV4ZWxTaXplLnkpKTsgLy8gdG9wIHJpZ2h0XFxuXFxuICAgdmVjNCBjMjEgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZlYzIodlRleHR1cmVDb29yZC54IC0gdGV4ZWxTaXplLngsIHZUZXh0dXJlQ29vcmQueSkpOyAvLyBtaWQgbGVmdFxcbiAgIHZlYzQgYzIyID0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2VGV4dHVyZUNvb3JkKTsgLy8gbWlkIGNlbnRlclxcbiAgIHZlYzQgYzIzID0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2ZWMyKHZUZXh0dXJlQ29vcmQueCArIHRleGVsU2l6ZS54LCB2VGV4dHVyZUNvb3JkLnkpKTsgLy8gbWlkIHJpZ2h0XFxuXFxuICAgdmVjNCBjMzEgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZlYzIodlRleHR1cmVDb29yZC54IC0gdGV4ZWxTaXplLngsIHZUZXh0dXJlQ29vcmQueSArIHRleGVsU2l6ZS55KSk7IC8vIGJvdHRvbSBsZWZ0XFxuICAgdmVjNCBjMzIgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZlYzIodlRleHR1cmVDb29yZC54LCB2VGV4dHVyZUNvb3JkLnkgKyB0ZXhlbFNpemUueSkpOyAvLyBib3R0b20gY2VudGVyXFxuICAgdmVjNCBjMzMgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZUZXh0dXJlQ29vcmQgKyB0ZXhlbFNpemUpOyAvLyBib3R0b20gcmlnaHRcXG5cXG4gICBnbF9GcmFnQ29sb3IgPVxcbiAgICAgICBjMTEgKiBtYXRyaXhbMF0gKyBjMTIgKiBtYXRyaXhbMV0gKyBjMTMgKiBtYXRyaXhbMl0gK1xcbiAgICAgICBjMjEgKiBtYXRyaXhbM10gKyBjMjIgKiBtYXRyaXhbNF0gKyBjMjMgKiBtYXRyaXhbNV0gK1xcbiAgICAgICBjMzEgKiBtYXRyaXhbNl0gKyBjMzIgKiBtYXRyaXhbN10gKyBjMzMgKiBtYXRyaXhbOF07XFxuXFxuICAgZ2xfRnJhZ0NvbG9yLmEgPSBjMjIuYTtcXG59XFxuXCIsXG4gICAgICAgIC8vIGN1c3RvbSB1bmlmb3Jtc1xuICAgICAgICB7XG4gICAgICAgICAgICBtYXRyaXg6ICAgICB7IHR5cGU6ICcxZnYnLCB2YWx1ZTogbmV3IEZsb2F0MzJBcnJheShtYXRyaXgpIH0sXG4gICAgICAgICAgICB0ZXhlbFNpemU6ICB7IHR5cGU6ICd2MicsIHZhbHVlOiB7IHg6IDEgLyB3aWR0aCwgeTogMSAvIGhlaWdodCB9IH1cbiAgICAgICAgfVxuICAgICk7XG59XG5cbkNvbnZvbHV0aW9uRmlsdGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoY29yZS5BYnN0cmFjdEZpbHRlci5wcm90b3R5cGUpO1xuQ29udm9sdXRpb25GaWx0ZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gQ29udm9sdXRpb25GaWx0ZXI7XG5tb2R1bGUuZXhwb3J0cyA9IENvbnZvbHV0aW9uRmlsdGVyO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhDb252b2x1dGlvbkZpbHRlci5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBBbiBhcnJheSBvZiB2YWx1ZXMgdXNlZCBmb3IgbWF0cml4IHRyYW5zZm9ybWF0aW9uLiBTcGVjaWZpZWQgYXMgYSA5IHBvaW50IEFycmF5LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyW119XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5Db252b2x1dGlvbkZpbHRlciNcbiAgICAgKi9cbiAgICBtYXRyaXg6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy51bmlmb3Jtcy5tYXRyaXgudmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLm1hdHJpeC52YWx1ZSA9IG5ldyBGbG9hdDMyQXJyYXkodmFsdWUpO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFdpZHRoIG9mIHRoZSBvYmplY3QgeW91IGFyZSB0cmFuc2Zvcm1pbmdcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLkNvbnZvbHV0aW9uRmlsdGVyI1xuICAgICAqL1xuICAgIHdpZHRoOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIDEvdGhpcy51bmlmb3Jtcy50ZXhlbFNpemUudmFsdWUueDtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudW5pZm9ybXMudGV4ZWxTaXplLnZhbHVlLnggPSAxL3ZhbHVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIEhlaWdodCBvZiB0aGUgb2JqZWN0IHlvdSBhcmUgdHJhbnNmb3JtaW5nXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5Db252b2x1dGlvbkZpbHRlciNcbiAgICAgKi9cbiAgICBoZWlnaHQ6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gMS90aGlzLnVuaWZvcm1zLnRleGVsU2l6ZS52YWx1ZS55O1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy50ZXhlbFNpemUudmFsdWUueSA9IDEvdmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG59KTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vLi4vY29yZScpO1xuLy8gQHNlZSBodHRwczovL2dpdGh1Yi5jb20vc3Vic3RhY2svYnJmcy9pc3N1ZXMvMjVcblxuXG4vKipcbiAqIEEgQ3Jvc3MgSGF0Y2ggZWZmZWN0IGZpbHRlci5cbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQWJzdHJhY3RGaWx0ZXJcbiAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnNcbiAqL1xuZnVuY3Rpb24gQ3Jvc3NIYXRjaEZpbHRlcigpXG57XG4gICAgY29yZS5BYnN0cmFjdEZpbHRlci5jYWxsKHRoaXMsXG4gICAgICAgIC8vIHZlcnRleCBzaGFkZXJcbiAgICAgICAgbnVsbCxcbiAgICAgICAgLy8gZnJhZ21lbnQgc2hhZGVyXG4gICAgICAgIFwicHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XFxuXFxudmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7XFxuXFxudW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXI7XFxuXFxudm9pZCBtYWluKHZvaWQpXFxue1xcbiAgICBmbG9hdCBsdW0gPSBsZW5ndGgodGV4dHVyZTJEKHVTYW1wbGVyLCB2VGV4dHVyZUNvb3JkLnh5KS5yZ2IpO1xcblxcbiAgICBnbF9GcmFnQ29sb3IgPSB2ZWM0KDEuMCwgMS4wLCAxLjAsIDEuMCk7XFxuXFxuICAgIGlmIChsdW0gPCAxLjAwKVxcbiAgICB7XFxuICAgICAgICBpZiAobW9kKGdsX0ZyYWdDb29yZC54ICsgZ2xfRnJhZ0Nvb3JkLnksIDEwLjApID09IDAuMClcXG4gICAgICAgIHtcXG4gICAgICAgICAgICBnbF9GcmFnQ29sb3IgPSB2ZWM0KDAuMCwgMC4wLCAwLjAsIDEuMCk7XFxuICAgICAgICB9XFxuICAgIH1cXG5cXG4gICAgaWYgKGx1bSA8IDAuNzUpXFxuICAgIHtcXG4gICAgICAgIGlmIChtb2QoZ2xfRnJhZ0Nvb3JkLnggLSBnbF9GcmFnQ29vcmQueSwgMTAuMCkgPT0gMC4wKVxcbiAgICAgICAge1xcbiAgICAgICAgICAgIGdsX0ZyYWdDb2xvciA9IHZlYzQoMC4wLCAwLjAsIDAuMCwgMS4wKTtcXG4gICAgICAgIH1cXG4gICAgfVxcblxcbiAgICBpZiAobHVtIDwgMC41MClcXG4gICAge1xcbiAgICAgICAgaWYgKG1vZChnbF9GcmFnQ29vcmQueCArIGdsX0ZyYWdDb29yZC55IC0gNS4wLCAxMC4wKSA9PSAwLjApXFxuICAgICAgICB7XFxuICAgICAgICAgICAgZ2xfRnJhZ0NvbG9yID0gdmVjNCgwLjAsIDAuMCwgMC4wLCAxLjApO1xcbiAgICAgICAgfVxcbiAgICB9XFxuXFxuICAgIGlmIChsdW0gPCAwLjMpXFxuICAgIHtcXG4gICAgICAgIGlmIChtb2QoZ2xfRnJhZ0Nvb3JkLnggLSBnbF9GcmFnQ29vcmQueSAtIDUuMCwgMTAuMCkgPT0gMC4wKVxcbiAgICAgICAge1xcbiAgICAgICAgICAgIGdsX0ZyYWdDb2xvciA9IHZlYzQoMC4wLCAwLjAsIDAuMCwgMS4wKTtcXG4gICAgICAgIH1cXG4gICAgfVxcbn1cXG5cIlxuICAgICk7XG59XG5cbkNyb3NzSGF0Y2hGaWx0ZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShjb3JlLkFic3RyYWN0RmlsdGVyLnByb3RvdHlwZSk7XG5Dcm9zc0hhdGNoRmlsdGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IENyb3NzSGF0Y2hGaWx0ZXI7XG5tb2R1bGUuZXhwb3J0cyA9IENyb3NzSGF0Y2hGaWx0ZXI7XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uLy4uL2NvcmUnKTtcbi8vIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL3N1YnN0YWNrL2JyZnMvaXNzdWVzLzI1XG5cblxuLyoqXG4gKiBUaGUgRGlzcGxhY2VtZW50RmlsdGVyIGNsYXNzIHVzZXMgdGhlIHBpeGVsIHZhbHVlcyBmcm9tIHRoZSBzcGVjaWZpZWQgdGV4dHVyZSAoY2FsbGVkIHRoZSBkaXNwbGFjZW1lbnQgbWFwKSB0byBwZXJmb3JtIGEgZGlzcGxhY2VtZW50IG9mIGFuIG9iamVjdC5cbiAqIFlvdSBjYW4gdXNlIHRoaXMgZmlsdGVyIHRvIGFwcGx5IGFsbCBtYW5vciBvZiBjcmF6eSB3YXJwaW5nIGVmZmVjdHNcbiAqIEN1cnJlbnRseSB0aGUgciBwcm9wZXJ0eSBvZiB0aGUgdGV4dHVyZSBpcyB1c2VkIHRvIG9mZnNldCB0aGUgeCBhbmQgdGhlIGcgcHJvcGVydHkgb2YgdGhlIHRleHR1cmUgaXMgdXNlZCB0byBvZmZzZXQgdGhlIHkuXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLkFic3RyYWN0RmlsdGVyXG4gKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzXG4gKiBAcGFyYW0gc3ByaXRlIHtQSVhJLlNwcml0ZX0gdGhlIHNwcml0ZSB1c2VkIGZvciB0aGUgZGlzcGxhY2VtZW50IG1hcC4gKG1ha2Ugc3VyZSBpdHMgYWRkZWQgdG8gdGhlIHNjZW5lISlcbiAqL1xuZnVuY3Rpb24gRGlzcGxhY2VtZW50RmlsdGVyKHNwcml0ZSwgc2NhbGUpXG57XG4gICAgdmFyIG1hc2tNYXRyaXggPSBuZXcgY29yZS5NYXRyaXgoKTtcbiAgICBzcHJpdGUucmVuZGVyYWJsZSA9IGZhbHNlO1xuXG4gICAgY29yZS5BYnN0cmFjdEZpbHRlci5jYWxsKHRoaXMsXG4gICAgICAgIC8vIHZlcnRleCBzaGFkZXJcbiAgICAgICAgXCJhdHRyaWJ1dGUgdmVjMiBhVmVydGV4UG9zaXRpb247XFxuYXR0cmlidXRlIHZlYzIgYVRleHR1cmVDb29yZDtcXG5hdHRyaWJ1dGUgdmVjNCBhQ29sb3I7XFxuXFxudW5pZm9ybSBtYXQzIHByb2plY3Rpb25NYXRyaXg7XFxudW5pZm9ybSBtYXQzIG90aGVyTWF0cml4O1xcblxcbnZhcnlpbmcgdmVjMiB2TWFwQ29vcmQ7XFxudmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7XFxudmFyeWluZyB2ZWM0IHZDb2xvcjtcXG5cXG52b2lkIG1haW4odm9pZClcXG57XFxuICAgZ2xfUG9zaXRpb24gPSB2ZWM0KChwcm9qZWN0aW9uTWF0cml4ICogdmVjMyhhVmVydGV4UG9zaXRpb24sIDEuMCkpLnh5LCAwLjAsIDEuMCk7XFxuICAgdlRleHR1cmVDb29yZCA9IGFUZXh0dXJlQ29vcmQ7XFxuICAgdk1hcENvb3JkID0gKCBvdGhlck1hdHJpeCAqIHZlYzMoIGFUZXh0dXJlQ29vcmQsIDEuMCkgICkueHk7XFxuICAgdkNvbG9yID0gdmVjNChhQ29sb3IucmdiICogYUNvbG9yLmEsIGFDb2xvci5hKTtcXG59XFxuXCIsXG4gICAgICAgIC8vIGZyYWdtZW50IHNoYWRlclxuICAgICAgICBcInByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xcblxcbnZhcnlpbmcgdmVjMiB2TWFwQ29vcmQ7XFxudmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7XFxudmFyeWluZyB2ZWM0IHZDb2xvcjtcXG5cXG51bmlmb3JtIHZlYzIgc2NhbGU7XFxuXFxudW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXI7XFxudW5pZm9ybSBzYW1wbGVyMkQgbWFwU2FtcGxlcjtcXG5cXG52b2lkIG1haW4odm9pZClcXG57XFxuICAgdmVjNCBtYXAgPSAgdGV4dHVyZTJEKG1hcFNhbXBsZXIsIHZNYXBDb29yZCk7XFxuXFxuICAgbWFwIC09IDAuNTtcXG4gICBtYXAueHkgKj0gc2NhbGU7XFxuXFxuICAgZ2xfRnJhZ0NvbG9yID0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2ZWMyKHZUZXh0dXJlQ29vcmQueCArIG1hcC54LCB2VGV4dHVyZUNvb3JkLnkgKyBtYXAueSkpO1xcbn1cXG5cIixcbiAgICAgICAgLy8gdW5pZm9ybXNcbiAgICAgICAge1xuICAgICAgICAgICAgbWFwU2FtcGxlcjogICAgIHsgdHlwZTogJ3NhbXBsZXIyRCcsIHZhbHVlOiBzcHJpdGUudGV4dHVyZSB9LFxuICAgICAgICAgICAgb3RoZXJNYXRyaXg6ICAgIHsgdHlwZTogJ21hdDMnLCB2YWx1ZTogbWFza01hdHJpeC50b0FycmF5KHRydWUpIH0sXG4gICAgICAgICAgICBzY2FsZTogICAgICAgICAgeyB0eXBlOiAndjInLCB2YWx1ZTogeyB4OiAxLCB5OiAxIH0gfVxuICAgICAgICB9XG4gICAgKTtcblxuICAgIHRoaXMubWFza1Nwcml0ZSA9IHNwcml0ZTtcbiAgICB0aGlzLm1hc2tNYXRyaXggPSBtYXNrTWF0cml4O1xuXG4gICAgaWYgKHNjYWxlID09PSBudWxsIHx8IHNjYWxlID09PSB1bmRlZmluZWQpXG4gICAge1xuICAgICAgICBzY2FsZSA9IDIwO1xuICAgIH1cblxuICAgIHRoaXMuc2NhbGUgPSBuZXcgY29yZS5Qb2ludChzY2FsZSwgc2NhbGUpO1xufVxuXG5EaXNwbGFjZW1lbnRGaWx0ZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShjb3JlLkFic3RyYWN0RmlsdGVyLnByb3RvdHlwZSk7XG5EaXNwbGFjZW1lbnRGaWx0ZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gRGlzcGxhY2VtZW50RmlsdGVyO1xubW9kdWxlLmV4cG9ydHMgPSBEaXNwbGFjZW1lbnRGaWx0ZXI7XG5cbkRpc3BsYWNlbWVudEZpbHRlci5wcm90b3R5cGUuYXBwbHlGaWx0ZXIgPSBmdW5jdGlvbiAocmVuZGVyZXIsIGlucHV0LCBvdXRwdXQpXG57XG4gICAgdmFyIGZpbHRlck1hbmFnZXIgPSByZW5kZXJlci5maWx0ZXJNYW5hZ2VyO1xuXG4gICAgZmlsdGVyTWFuYWdlci5jYWxjdWxhdGVNYXBwZWRNYXRyaXgoaW5wdXQuZnJhbWUsIHRoaXMubWFza1Nwcml0ZSwgdGhpcy5tYXNrTWF0cml4KTtcblxuICAgIHRoaXMudW5pZm9ybXMub3RoZXJNYXRyaXgudmFsdWUgPSB0aGlzLm1hc2tNYXRyaXgudG9BcnJheSh0cnVlKTtcbiAgICB0aGlzLnVuaWZvcm1zLnNjYWxlLnZhbHVlLnggPSB0aGlzLnNjYWxlLnggKiAoMS9pbnB1dC5mcmFtZS53aWR0aCk7XG4gICAgdGhpcy51bmlmb3Jtcy5zY2FsZS52YWx1ZS55ID0gdGhpcy5zY2FsZS55ICogKDEvaW5wdXQuZnJhbWUuaGVpZ2h0KTtcblxuICAgIHZhciBzaGFkZXIgPSB0aGlzLmdldFNoYWRlcihyZW5kZXJlcik7XG4gICAgIC8vIGRyYXcgdGhlIGZpbHRlci4uLlxuICAgIGZpbHRlck1hbmFnZXIuYXBwbHlGaWx0ZXIoc2hhZGVyLCBpbnB1dCwgb3V0cHV0KTtcbn07XG5cblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoRGlzcGxhY2VtZW50RmlsdGVyLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFRoZSB0ZXh0dXJlIHVzZWQgZm9yIHRoZSBkaXNwbGFjZW1lbnQgbWFwLiBNdXN0IGJlIHBvd2VyIG9mIDIgc2l6ZWQgdGV4dHVyZS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuVGV4dHVyZX1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLkRpc3BsYWNlbWVudEZpbHRlciNcbiAgICAgKi9cbiAgICBtYXA6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy51bmlmb3Jtcy5tYXBTYW1wbGVyLnZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy5tYXBTYW1wbGVyLnZhbHVlID0gdmFsdWU7XG5cbiAgICAgICAgfVxuICAgIH1cbn0pO1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi8uLi9jb3JlJyk7XG4vLyBAc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9zdWJzdGFjay9icmZzL2lzc3Vlcy8yNVxuXG5cbi8qKlxuICogQGF1dGhvciBNYXQgR3JvdmVzIGh0dHA6Ly9tYXRncm92ZXMuY29tLyBARG9vcm1hdDIzXG4gKiBvcmlnaW5hbCBmaWx0ZXI6IGh0dHBzOi8vZ2l0aHViLmNvbS9ldmFudy9nbGZ4LmpzL2Jsb2IvbWFzdGVyL3NyYy9maWx0ZXJzL2Z1bi9kb3RzY3JlZW4uanNcbiAqL1xuXG4vKipcbiAqIFRoaXMgZmlsdGVyIGFwcGxpZXMgYSBkb3RzY3JlZW4gZWZmZWN0IG1ha2luZyBkaXNwbGF5IG9iamVjdHMgYXBwZWFyIHRvIGJlIG1hZGUgb3V0IG9mXG4gKiBibGFjayBhbmQgd2hpdGUgaGFsZnRvbmUgZG90cyBsaWtlIGFuIG9sZCBwcmludGVyLlxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5BYnN0cmFjdEZpbHRlclxuICogQG1lbWJlcm9mIFBJWEkuZmlsdGVyc1xuICovXG5mdW5jdGlvbiBEb3RTY3JlZW5GaWx0ZXIoKVxue1xuICAgIGNvcmUuQWJzdHJhY3RGaWx0ZXIuY2FsbCh0aGlzLFxuICAgICAgICAvLyB2ZXJ0ZXggc2hhZGVyXG4gICAgICAgIG51bGwsXG4gICAgICAgIC8vIGZyYWdtZW50IHNoYWRlclxuICAgICAgICBcInByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xcblxcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xcbnZhcnlpbmcgdmVjNCB2Q29sb3I7XFxuXFxudW5pZm9ybSB2ZWM0IGRpbWVuc2lvbnM7XFxudW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXI7XFxuXFxudW5pZm9ybSBmbG9hdCBhbmdsZTtcXG51bmlmb3JtIGZsb2F0IHNjYWxlO1xcblxcbmZsb2F0IHBhdHRlcm4oKVxcbntcXG4gICBmbG9hdCBzID0gc2luKGFuZ2xlKSwgYyA9IGNvcyhhbmdsZSk7XFxuICAgdmVjMiB0ZXggPSB2VGV4dHVyZUNvb3JkICogZGltZW5zaW9ucy54eTtcXG4gICB2ZWMyIHBvaW50ID0gdmVjMihcXG4gICAgICAgYyAqIHRleC54IC0gcyAqIHRleC55LFxcbiAgICAgICBzICogdGV4LnggKyBjICogdGV4LnlcXG4gICApICogc2NhbGU7XFxuICAgcmV0dXJuIChzaW4ocG9pbnQueCkgKiBzaW4ocG9pbnQueSkpICogNC4wO1xcbn1cXG5cXG52b2lkIG1haW4oKVxcbntcXG4gICB2ZWM0IGNvbG9yID0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2VGV4dHVyZUNvb3JkKTtcXG4gICBmbG9hdCBhdmVyYWdlID0gKGNvbG9yLnIgKyBjb2xvci5nICsgY29sb3IuYikgLyAzLjA7XFxuICAgZ2xfRnJhZ0NvbG9yID0gdmVjNCh2ZWMzKGF2ZXJhZ2UgKiAxMC4wIC0gNS4wICsgcGF0dGVybigpKSwgY29sb3IuYSk7XFxufVxcblwiLFxuICAgICAgICAvLyBjdXN0b20gdW5pZm9ybXNcbiAgICAgICAge1xuICAgICAgICAgICAgc2NhbGU6ICAgICAgeyB0eXBlOiAnMWYnLCB2YWx1ZTogMSB9LFxuICAgICAgICAgICAgYW5nbGU6ICAgICAgeyB0eXBlOiAnMWYnLCB2YWx1ZTogNSB9LFxuICAgICAgICAgICAgZGltZW5zaW9uczogeyB0eXBlOiAnNGZ2JywgdmFsdWU6IFswLCAwLCAwLCAwXSB9XG4gICAgICAgIH1cbiAgICApO1xufVxuXG5Eb3RTY3JlZW5GaWx0ZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShjb3JlLkFic3RyYWN0RmlsdGVyLnByb3RvdHlwZSk7XG5Eb3RTY3JlZW5GaWx0ZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gRG90U2NyZWVuRmlsdGVyO1xubW9kdWxlLmV4cG9ydHMgPSBEb3RTY3JlZW5GaWx0ZXI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKERvdFNjcmVlbkZpbHRlci5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBUaGUgc2NhbGUgb2YgdGhlIGVmZmVjdC5cbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5Eb3RTY3JlZW5GaWx0ZXIjXG4gICAgICovXG4gICAgc2NhbGU6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy51bmlmb3Jtcy5zY2FsZS52YWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudW5pZm9ybXMuc2NhbGUudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBUaGUgcmFkaXVzIG9mIHRoZSBlZmZlY3QuXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuRG90U2NyZWVuRmlsdGVyI1xuICAgICAqL1xuICAgIGFuZ2xlOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudW5pZm9ybXMuYW5nbGUudmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLmFuZ2xlLnZhbHVlID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG59KTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vLi4vY29yZScpO1xuXG4vLyBAc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9zdWJzdGFjay9icmZzL2lzc3Vlcy8yNVxuXG5cbi8qKlxuICogVGhlIEJsdXJZVGludEZpbHRlciBhcHBsaWVzIGEgdmVydGljYWwgR2F1c3NpYW4gYmx1ciB0byBhbiBvYmplY3QuXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLkFic3RyYWN0RmlsdGVyXG4gKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzXG4gKi9cbmZ1bmN0aW9uIEJsdXJZVGludEZpbHRlcigpXG57XG4gICAgY29yZS5BYnN0cmFjdEZpbHRlci5jYWxsKHRoaXMsXG4gICAgICAgIC8vIHZlcnRleCBzaGFkZXJcbiAgICAgICAgXCJhdHRyaWJ1dGUgdmVjMiBhVmVydGV4UG9zaXRpb247XFxuYXR0cmlidXRlIHZlYzIgYVRleHR1cmVDb29yZDtcXG5hdHRyaWJ1dGUgdmVjNCBhQ29sb3I7XFxuXFxudW5pZm9ybSBmbG9hdCBzdHJlbmd0aDtcXG51bmlmb3JtIHZlYzIgb2Zmc2V0O1xcblxcbnVuaWZvcm0gbWF0MyBwcm9qZWN0aW9uTWF0cml4O1xcblxcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xcbnZhcnlpbmcgdmVjNCB2Q29sb3I7XFxudmFyeWluZyB2ZWMyIHZCbHVyVGV4Q29vcmRzWzZdO1xcblxcbnZvaWQgbWFpbih2b2lkKVxcbntcXG4gICAgZ2xfUG9zaXRpb24gPSB2ZWM0KChwcm9qZWN0aW9uTWF0cml4ICogdmVjMygoYVZlcnRleFBvc2l0aW9uK29mZnNldCksIDEuMCkpLnh5LCAwLjAsIDEuMCk7XFxuICAgIHZUZXh0dXJlQ29vcmQgPSBhVGV4dHVyZUNvb3JkO1xcblxcbiAgICB2Qmx1clRleENvb3Jkc1sgMF0gPSBhVGV4dHVyZUNvb3JkICsgdmVjMigwLjAsIC0wLjAxMiAqIHN0cmVuZ3RoKTtcXG4gICAgdkJsdXJUZXhDb29yZHNbIDFdID0gYVRleHR1cmVDb29yZCArIHZlYzIoMC4wLCAtMC4wMDggKiBzdHJlbmd0aCk7XFxuICAgIHZCbHVyVGV4Q29vcmRzWyAyXSA9IGFUZXh0dXJlQ29vcmQgKyB2ZWMyKDAuMCwgLTAuMDA0ICogc3RyZW5ndGgpO1xcbiAgICB2Qmx1clRleENvb3Jkc1sgM10gPSBhVGV4dHVyZUNvb3JkICsgdmVjMigwLjAsICAwLjAwNCAqIHN0cmVuZ3RoKTtcXG4gICAgdkJsdXJUZXhDb29yZHNbIDRdID0gYVRleHR1cmVDb29yZCArIHZlYzIoMC4wLCAgMC4wMDggKiBzdHJlbmd0aCk7XFxuICAgIHZCbHVyVGV4Q29vcmRzWyA1XSA9IGFUZXh0dXJlQ29vcmQgKyB2ZWMyKDAuMCwgIDAuMDEyICogc3RyZW5ndGgpO1xcblxcbiAgIHZDb2xvciA9IHZlYzQoYUNvbG9yLnJnYiAqIGFDb2xvci5hLCBhQ29sb3IuYSk7XFxufVxcblwiLFxuICAgICAgICAvLyBmcmFnbWVudCBzaGFkZXJcbiAgICAgICAgXCJwcmVjaXNpb24gbG93cCBmbG9hdDtcXG5cXG52YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDtcXG52YXJ5aW5nIHZlYzIgdkJsdXJUZXhDb29yZHNbNl07XFxudmFyeWluZyB2ZWM0IHZDb2xvcjtcXG5cXG51bmlmb3JtIHZlYzMgY29sb3I7XFxudW5pZm9ybSBmbG9hdCBhbHBoYTtcXG5cXG51bmlmb3JtIHNhbXBsZXIyRCB1U2FtcGxlcjtcXG5cXG52b2lkIG1haW4odm9pZClcXG57XFxuICAgIHZlYzQgc3VtID0gdmVjNCgwLjApO1xcblxcbiAgICBzdW0gKz0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2Qmx1clRleENvb3Jkc1sgMF0pKjAuMDA0NDMxODQ4NDExOTM4MzQxO1xcbiAgICBzdW0gKz0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2Qmx1clRleENvb3Jkc1sgMV0pKjAuMDUzOTkwOTY2NTEzMTg5ODU7XFxuICAgIHN1bSArPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZCbHVyVGV4Q29vcmRzWyAyXSkqMC4yNDE5NzA3MjQ1MTkxNDU0O1xcbiAgICBzdW0gKz0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2VGV4dHVyZUNvb3JkICAgICApKjAuMzk4OTQyMjgwNDAxNDMyNztcXG4gICAgc3VtICs9IHRleHR1cmUyRCh1U2FtcGxlciwgdkJsdXJUZXhDb29yZHNbIDNdKSowLjI0MTk3MDcyNDUxOTE0NTQ7XFxuICAgIHN1bSArPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZCbHVyVGV4Q29vcmRzWyA0XSkqMC4wNTM5OTA5NjY1MTMxODk4NTtcXG4gICAgc3VtICs9IHRleHR1cmUyRCh1U2FtcGxlciwgdkJsdXJUZXhDb29yZHNbIDVdKSowLjAwNDQzMTg0ODQxMTkzODM0MTtcXG5cXG4gICAgZ2xfRnJhZ0NvbG9yID0gdmVjNCggY29sb3IucmdiICogc3VtLmEgKiBhbHBoYSwgc3VtLmEgKiBhbHBoYSApO1xcbn1cXG5cIixcbiAgICAgICAgLy8gc2V0IHRoZSB1bmlmb3Jtc1xuICAgICAgICB7XG4gICAgICAgICAgICBibHVyOiB7IHR5cGU6ICcxZicsIHZhbHVlOiAxIC8gNTEyIH0sXG4gICAgICAgICAgICBjb2xvcjogeyB0eXBlOiAnYycsIHZhbHVlOiBbMCwwLDBdfSxcbiAgICAgICAgICAgIGFscGhhOiB7IHR5cGU6ICcxZicsIHZhbHVlOiAwLjcgfSxcbiAgICAgICAgICAgIG9mZnNldDogeyB0eXBlOiAnMmYnLCB2YWx1ZTpbNSwgNV19LFxuICAgICAgICAgICAgc3RyZW5ndGg6IHsgdHlwZTogJzFmJywgdmFsdWU6MX1cbiAgICAgICAgfVxuICAgICk7XG5cbiAgICB0aGlzLnBhc3NlcyA9IDE7XG4gICAgdGhpcy5zdHJlbmd0aCA9IDQ7XG59XG5cbkJsdXJZVGludEZpbHRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuQWJzdHJhY3RGaWx0ZXIucHJvdG90eXBlKTtcbkJsdXJZVGludEZpbHRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBCbHVyWVRpbnRGaWx0ZXI7XG5tb2R1bGUuZXhwb3J0cyA9IEJsdXJZVGludEZpbHRlcjtcblxuQmx1cllUaW50RmlsdGVyLnByb3RvdHlwZS5hcHBseUZpbHRlciA9IGZ1bmN0aW9uIChyZW5kZXJlciwgaW5wdXQsIG91dHB1dCwgY2xlYXIpXG57XG4gICAgdmFyIHNoYWRlciA9IHRoaXMuZ2V0U2hhZGVyKHJlbmRlcmVyKTtcblxuICAgIHRoaXMudW5pZm9ybXMuc3RyZW5ndGgudmFsdWUgPSB0aGlzLnN0cmVuZ3RoIC8gNCAvIHRoaXMucGFzc2VzICogKGlucHV0LmZyYW1lLmhlaWdodCAvIGlucHV0LnNpemUuaGVpZ2h0KTtcblxuICAgIGlmKHRoaXMucGFzc2VzID09PSAxKVxuICAgIHtcbiAgICAgICAgcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5hcHBseUZpbHRlcihzaGFkZXIsIGlucHV0LCBvdXRwdXQsIGNsZWFyKTtcbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgdmFyIHJlbmRlclRhcmdldCA9IHJlbmRlcmVyLmZpbHRlck1hbmFnZXIuZ2V0UmVuZGVyVGFyZ2V0KHRydWUpO1xuICAgICAgICB2YXIgZmxpcCA9IGlucHV0O1xuICAgICAgICB2YXIgZmxvcCA9IHJlbmRlclRhcmdldDtcblxuICAgICAgICBmb3IodmFyIGkgPSAwOyBpIDwgdGhpcy5wYXNzZXMtMTsgaSsrKVxuICAgICAgICB7XG4gICAgICAgICAgICByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLmFwcGx5RmlsdGVyKHNoYWRlciwgZmxpcCwgZmxvcCwgY2xlYXIpO1xuXG4gICAgICAgICAgIHZhciB0ZW1wID0gZmxvcDtcbiAgICAgICAgICAgZmxvcCA9IGZsaXA7XG4gICAgICAgICAgIGZsaXAgPSB0ZW1wO1xuICAgICAgICB9XG5cbiAgICAgICAgcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5hcHBseUZpbHRlcihzaGFkZXIsIGZsaXAsIG91dHB1dCwgY2xlYXIpO1xuXG4gICAgICAgIHJlbmRlcmVyLmZpbHRlck1hbmFnZXIucmV0dXJuUmVuZGVyVGFyZ2V0KHJlbmRlclRhcmdldCk7XG4gICAgfVxufTtcblxuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhCbHVyWVRpbnRGaWx0ZXIucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgc3RyZW5ndGggb2YgYm90aCB0aGUgYmx1ci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLkJsdXJZVGludEZpbHRlciNcbiAgICAgKiBAZGVmYXVsdCAyXG4gICAgICovXG4gICAgYmx1cjoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiAgdGhpcy5zdHJlbmd0aDtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMucGFkZGluZyA9IHZhbHVlICogMC41O1xuICAgICAgICAgICAgdGhpcy5zdHJlbmd0aCA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfVxufSk7XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uLy4uL2NvcmUnKSxcbiAgICBCbHVyWEZpbHRlciA9IHJlcXVpcmUoJy4uL2JsdXIvQmx1clhGaWx0ZXInKSxcbiAgICBCbHVyWVRpbnRGaWx0ZXIgPSByZXF1aXJlKCcuL0JsdXJZVGludEZpbHRlcicpO1xuXG4vKipcbiAqIFRoZSBEcm9wU2hhZG93RmlsdGVyIGFwcGxpZXMgYSBHYXVzc2lhbiBibHVyIHRvIGFuIG9iamVjdC5cbiAqIFRoZSBzdHJlbmd0aCBvZiB0aGUgYmx1ciBjYW4gYmUgc2V0IGZvciB4LSBhbmQgeS1heGlzIHNlcGFyYXRlbHkuXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLkFic3RyYWN0RmlsdGVyXG4gKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzXG4gKi9cbmZ1bmN0aW9uIERyb3BTaGFkb3dGaWx0ZXIoKVxue1xuICAgIGNvcmUuQWJzdHJhY3RGaWx0ZXIuY2FsbCh0aGlzKTtcblxuICAgIHRoaXMuYmx1clhGaWx0ZXIgPSBuZXcgQmx1clhGaWx0ZXIoKTtcbiAgICB0aGlzLmJsdXJZVGludEZpbHRlciA9IG5ldyBCbHVyWVRpbnRGaWx0ZXIoKTtcblxuICAgIHRoaXMuZGVmYXVsdEZpbHRlciA9IG5ldyBjb3JlLkFic3RyYWN0RmlsdGVyKCk7XG5cbiAgICB0aGlzLnBhZGRpbmcgPSAzMDtcblxuICAgIHRoaXMuX2RpcnR5UG9zaXRpb24gPSB0cnVlO1xuICAgIHRoaXMuX2FuZ2xlID0gNDUgKiBNYXRoLlBJIC8gMTgwO1xuICAgIHRoaXMuX2Rpc3RhbmNlID0gMTA7XG4gICAgdGhpcy5hbHBoYSA9IDAuNzU7XG4gICAgdGhpcy5oaWRlT2JqZWN0ID0gZmFsc2U7XG4gICAgdGhpcy5ibGVuZE1vZGUgPSBjb3JlLkJMRU5EX01PREVTLk1VTFRJUExZO1xufVxuXG5Ecm9wU2hhZG93RmlsdGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoY29yZS5BYnN0cmFjdEZpbHRlci5wcm90b3R5cGUpO1xuRHJvcFNoYWRvd0ZpbHRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBEcm9wU2hhZG93RmlsdGVyO1xubW9kdWxlLmV4cG9ydHMgPSBEcm9wU2hhZG93RmlsdGVyO1xuXG5Ecm9wU2hhZG93RmlsdGVyLnByb3RvdHlwZS5hcHBseUZpbHRlciA9IGZ1bmN0aW9uIChyZW5kZXJlciwgaW5wdXQsIG91dHB1dClcbntcbiAgICB2YXIgcmVuZGVyVGFyZ2V0ID0gcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5nZXRSZW5kZXJUYXJnZXQodHJ1ZSk7XG5cbiAgICAvL1RPRE8gLSBjb3B5VGV4U3ViSW1hZ2UyRCBjb3VsZCBiZSB1c2VkIGhlcmU/XG4gICAgaWYodGhpcy5fZGlydHlQb3NpdGlvbilcbiAgICB7XG4gICAgICAgIHRoaXMuX2RpcnR5UG9zaXRpb24gPSBmYWxzZTtcblxuICAgICAgICB0aGlzLmJsdXJZVGludEZpbHRlci51bmlmb3Jtcy5vZmZzZXQudmFsdWVbMF0gPSBNYXRoLnNpbih0aGlzLl9hbmdsZSkgKiB0aGlzLl9kaXN0YW5jZTtcbiAgICAgICAgdGhpcy5ibHVyWVRpbnRGaWx0ZXIudW5pZm9ybXMub2Zmc2V0LnZhbHVlWzFdID0gTWF0aC5jb3ModGhpcy5fYW5nbGUpICogdGhpcy5fZGlzdGFuY2U7XG4gICAgfVxuXG4gICAgdGhpcy5ibHVyWEZpbHRlci5hcHBseUZpbHRlcihyZW5kZXJlciwgaW5wdXQsIHJlbmRlclRhcmdldCk7XG5cbiAgICByZW5kZXJlci5ibGVuZE1vZGVNYW5hZ2VyLnNldEJsZW5kTW9kZSh0aGlzLmJsZW5kTW9kZSk7XG5cbiAgICB0aGlzLmJsdXJZVGludEZpbHRlci5hcHBseUZpbHRlcihyZW5kZXJlciwgcmVuZGVyVGFyZ2V0LCBvdXRwdXQpO1xuXG4gICAgcmVuZGVyZXIuYmxlbmRNb2RlTWFuYWdlci5zZXRCbGVuZE1vZGUoY29yZS5CTEVORF9NT0RFUy5OT1JNQUwpO1xuXG4gICAgaWYoIXRoaXMuaGlkZU9iamVjdClcbiAgICB7XG5cbiAgICAgICAgdGhpcy5kZWZhdWx0RmlsdGVyLmFwcGx5RmlsdGVyKHJlbmRlcmVyLCBpbnB1dCwgb3V0cHV0KTtcbiAgICB9XG5cblxuICAgIHJlbmRlcmVyLmZpbHRlck1hbmFnZXIucmV0dXJuUmVuZGVyVGFyZ2V0KHJlbmRlclRhcmdldCk7XG59O1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhEcm9wU2hhZG93RmlsdGVyLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIHN0cmVuZ3RoIG9mIGJvdGggdGhlIGJsdXJYIGFuZCBibHVyWSBwcm9wZXJ0aWVzIHNpbXVsdGFuZW91c2x5XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlck9mIFBJWEkuZmlsdGVycy5Ecm9wU2hhZG93RmlsdGVyI1xuICAgICAqIEBkZWZhdWx0IDJcbiAgICAgKi9cbiAgICBibHVyOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuYmx1clhGaWx0ZXIuYmx1cjtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuYmx1clhGaWx0ZXIuYmx1ciA9IHRoaXMuYmx1cllUaW50RmlsdGVyLmJsdXIgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBzdHJlbmd0aCBvZiB0aGUgYmx1clggcHJvcGVydHlcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyT2YgUElYSS5maWx0ZXJzLkRyb3BTaGFkb3dGaWx0ZXIjXG4gICAgICogQGRlZmF1bHQgMlxuICAgICAqL1xuICAgIGJsdXJYOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuYmx1clhGaWx0ZXIuYmx1cjtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuYmx1clhGaWx0ZXIuYmx1ciA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIHN0cmVuZ3RoIG9mIHRoZSBibHVyWSBwcm9wZXJ0eVxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJPZiBQSVhJLmZpbHRlcnMuRHJvcFNoYWRvd0ZpbHRlciNcbiAgICAgKiBAZGVmYXVsdCAyXG4gICAgICovXG4gICAgYmx1clk6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5ibHVyWVRpbnRGaWx0ZXIuYmx1cjtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuYmx1cllUaW50RmlsdGVyLmJsdXIgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBjb2xvciBvZiB0aGUgc2hhZG93XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlck9mIFBJWEkuZmlsdGVycy5Ecm9wU2hhZG93RmlsdGVyI1xuICAgICAqL1xuICAgIGNvbG9yOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuICBjb3JlLnV0aWxzLnJnYjJoZXgoIHRoaXMuYmx1cllUaW50RmlsdGVyLnVuaWZvcm1zLmNvbG9yLnZhbHVlICk7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmJsdXJZVGludEZpbHRlci51bmlmb3Jtcy5jb2xvci52YWx1ZSA9IGNvcmUudXRpbHMuaGV4MnJnYih2YWx1ZSk7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgYWxwaGEgb2YgdGhlIHNoYWRvd1xuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJPZiBQSVhJLmZpbHRlcnMuRHJvcFNoYWRvd0ZpbHRlciNcbiAgICAgKi9cbiAgICBhbHBoYToge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiAgdGhpcy5ibHVyWVRpbnRGaWx0ZXIudW5pZm9ybXMuYWxwaGEudmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmJsdXJZVGludEZpbHRlci51bmlmb3Jtcy5hbHBoYS52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIGRpc3RhbmNlIG9mIHRoZSBzaGFkb3dcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyT2YgUElYSS5maWx0ZXJzLkRyb3BTaGFkb3dGaWx0ZXIjXG4gICAgICovXG4gICAgZGlzdGFuY2U6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gIHRoaXMuX2Rpc3RhbmNlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5fZGlydHlQb3NpdGlvbiA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLl9kaXN0YW5jZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIGFuZ2xlIG9mIHRoZSBzaGFkb3dcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyT2YgUElYSS5maWx0ZXJzLkRyb3BTaGFkb3dGaWx0ZXIjXG4gICAgICovXG4gICAgYW5nbGU6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gIHRoaXMuX2FuZ2xlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5fZGlydHlQb3NpdGlvbiA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLl9hbmdsZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfVxufSk7XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uLy4uL2NvcmUnKTtcbi8vIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL3N1YnN0YWNrL2JyZnMvaXNzdWVzLzI1XG5cblxuLyoqXG4gKiBUaGlzIGdyZXlzY2FsZXMgdGhlIHBhbGV0dGUgb2YgeW91ciBEaXNwbGF5IE9iamVjdHMuXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLkFic3RyYWN0RmlsdGVyXG4gKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzXG4gKi9cbmZ1bmN0aW9uIEdyYXlGaWx0ZXIoKVxue1xuICAgIGNvcmUuQWJzdHJhY3RGaWx0ZXIuY2FsbCh0aGlzLFxuICAgICAgICAvLyB2ZXJ0ZXggc2hhZGVyXG4gICAgICAgIG51bGwsXG4gICAgICAgIC8vIGZyYWdtZW50IHNoYWRlclxuICAgICAgICBcInByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xcblxcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xcbnZhcnlpbmcgdmVjNCB2Q29sb3I7XFxuXFxudW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXI7XFxudW5pZm9ybSBmbG9hdCBncmF5O1xcblxcbnZvaWQgbWFpbih2b2lkKVxcbntcXG4gICBnbF9GcmFnQ29sb3IgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZUZXh0dXJlQ29vcmQpO1xcbiAgIGdsX0ZyYWdDb2xvci5yZ2IgPSBtaXgoZ2xfRnJhZ0NvbG9yLnJnYiwgdmVjMygwLjIxMjYqZ2xfRnJhZ0NvbG9yLnIgKyAwLjcxNTIqZ2xfRnJhZ0NvbG9yLmcgKyAwLjA3MjIqZ2xfRnJhZ0NvbG9yLmIpLCBncmF5KTtcXG59XFxuXCIsXG4gICAgICAgIC8vIHNldCB0aGUgdW5pZm9ybXNcbiAgICAgICAge1xuICAgICAgICAgICAgZ3JheTogeyB0eXBlOiAnMWYnLCB2YWx1ZTogMSB9XG4gICAgICAgIH1cbiAgICApO1xufVxuXG5HcmF5RmlsdGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoY29yZS5BYnN0cmFjdEZpbHRlci5wcm90b3R5cGUpO1xuR3JheUZpbHRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBHcmF5RmlsdGVyO1xubW9kdWxlLmV4cG9ydHMgPSBHcmF5RmlsdGVyO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhHcmF5RmlsdGVyLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFRoZSBzdHJlbmd0aCBvZiB0aGUgZ3JheS4gMSB3aWxsIG1ha2UgdGhlIG9iamVjdCBibGFjayBhbmQgd2hpdGUsIDAgd2lsbCBtYWtlIHRoZSBvYmplY3QgaXRzIG5vcm1hbCBjb2xvci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLkdyYXlGaWx0ZXIjXG4gICAgICovXG4gICAgZ3JheToge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVuaWZvcm1zLmdyYXkudmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLmdyYXkudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuIiwiLyoqXG4gKiBAZmlsZSAgICAgICAgTWFpbiBleHBvcnQgb2YgdGhlIFBJWEkgZmlsdGVycyBsaWJyYXJ5XG4gKiBAYXV0aG9yICAgICAgTWF0IEdyb3ZlcyA8bWF0QGdvb2Rib3lkaWdpdGFsLmNvbT5cbiAqIEBjb3B5cmlnaHQgICAyMDEzLTIwMTUgR29vZEJveURpZ2l0YWxcbiAqIEBsaWNlbnNlICAgICB7QGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL3BpeGlqcy9waXhpLmpzL2Jsb2IvbWFzdGVyL0xJQ0VOU0V8TUlUIExpY2Vuc2V9XG4gKi9cblxuLyoqXG4gKiBAbmFtZXNwYWNlIFBJWEkuZmlsdGVyc1xuICovXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgICBBc2NpaUZpbHRlcjogICAgICAgIHJlcXVpcmUoJy4vYXNjaWkvQXNjaWlGaWx0ZXInKSxcbiAgICBCbG9vbUZpbHRlcjogICAgICAgIHJlcXVpcmUoJy4vYmxvb20vQmxvb21GaWx0ZXInKSxcbiAgICBCbHVyRmlsdGVyOiAgICAgICAgIHJlcXVpcmUoJy4vYmx1ci9CbHVyRmlsdGVyJyksXG4gICAgQmx1clhGaWx0ZXI6ICAgICAgICByZXF1aXJlKCcuL2JsdXIvQmx1clhGaWx0ZXInKSxcbiAgICBCbHVyWUZpbHRlcjogICAgICAgIHJlcXVpcmUoJy4vYmx1ci9CbHVyWUZpbHRlcicpLFxuICAgIEJsdXJEaXJGaWx0ZXI6ICAgICAgcmVxdWlyZSgnLi9ibHVyL0JsdXJEaXJGaWx0ZXInKSxcbiAgICBDb2xvck1hdHJpeEZpbHRlcjogIHJlcXVpcmUoJy4vY29sb3IvQ29sb3JNYXRyaXhGaWx0ZXInKSxcbiAgICBDb2xvclN0ZXBGaWx0ZXI6ICAgIHJlcXVpcmUoJy4vY29sb3IvQ29sb3JTdGVwRmlsdGVyJyksXG4gICAgQ29udm9sdXRpb25GaWx0ZXI6ICByZXF1aXJlKCcuL2NvbnZvbHV0aW9uL0NvbnZvbHV0aW9uRmlsdGVyJyksXG4gICAgQ3Jvc3NIYXRjaEZpbHRlcjogICByZXF1aXJlKCcuL2Nyb3NzaGF0Y2gvQ3Jvc3NIYXRjaEZpbHRlcicpLFxuICAgIERpc3BsYWNlbWVudEZpbHRlcjogcmVxdWlyZSgnLi9kaXNwbGFjZW1lbnQvRGlzcGxhY2VtZW50RmlsdGVyJyksXG4gICAgRG90U2NyZWVuRmlsdGVyOiAgICByZXF1aXJlKCcuL2RvdC9Eb3RTY3JlZW5GaWx0ZXInKSxcbiAgICBHcmF5RmlsdGVyOiAgICAgICAgIHJlcXVpcmUoJy4vZ3JheS9HcmF5RmlsdGVyJyksXG4gICAgRHJvcFNoYWRvd0ZpbHRlcjogICByZXF1aXJlKCcuL2Ryb3BzaGFkb3cvRHJvcFNoYWRvd0ZpbHRlcicpLFxuICAgIEludmVydEZpbHRlcjogICAgICAgcmVxdWlyZSgnLi9pbnZlcnQvSW52ZXJ0RmlsdGVyJyksXG4gICAgTm9pc2VGaWx0ZXI6ICAgICAgICByZXF1aXJlKCcuL25vaXNlL05vaXNlRmlsdGVyJyksXG4gICAgUGl4ZWxhdGVGaWx0ZXI6ICAgICByZXF1aXJlKCcuL3BpeGVsYXRlL1BpeGVsYXRlRmlsdGVyJyksXG4gICAgUkdCU3BsaXRGaWx0ZXI6ICAgICByZXF1aXJlKCcuL3JnYi9SR0JTcGxpdEZpbHRlcicpLFxuICAgIFNob2Nrd2F2ZUZpbHRlcjogICAgcmVxdWlyZSgnLi9zaG9ja3dhdmUvU2hvY2t3YXZlRmlsdGVyJyksXG4gICAgU2VwaWFGaWx0ZXI6ICAgICAgICByZXF1aXJlKCcuL3NlcGlhL1NlcGlhRmlsdGVyJyksXG4gICAgU21hcnRCbHVyRmlsdGVyOiAgICByZXF1aXJlKCcuL2JsdXIvU21hcnRCbHVyRmlsdGVyJyksXG4gICAgVGlsdFNoaWZ0RmlsdGVyOiAgICByZXF1aXJlKCcuL3RpbHRzaGlmdC9UaWx0U2hpZnRGaWx0ZXInKSxcbiAgICBUaWx0U2hpZnRYRmlsdGVyOiAgIHJlcXVpcmUoJy4vdGlsdHNoaWZ0L1RpbHRTaGlmdFhGaWx0ZXInKSxcbiAgICBUaWx0U2hpZnRZRmlsdGVyOiAgIHJlcXVpcmUoJy4vdGlsdHNoaWZ0L1RpbHRTaGlmdFlGaWx0ZXInKSxcbiAgICBUd2lzdEZpbHRlcjogICAgICAgIHJlcXVpcmUoJy4vdHdpc3QvVHdpc3RGaWx0ZXInKVxufTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vLi4vY29yZScpO1xuLy8gQHNlZSBodHRwczovL2dpdGh1Yi5jb20vc3Vic3RhY2svYnJmcy9pc3N1ZXMvMjVcblxuXG4vKipcbiAqIFRoaXMgaW52ZXJ0cyB5b3VyIERpc3BsYXkgT2JqZWN0cyBjb2xvcnMuXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLkFic3RyYWN0RmlsdGVyXG4gKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzXG4gKi9cbmZ1bmN0aW9uIEludmVydEZpbHRlcigpXG57XG4gICAgY29yZS5BYnN0cmFjdEZpbHRlci5jYWxsKHRoaXMsXG4gICAgICAgIC8vIHZlcnRleCBzaGFkZXJcbiAgICAgICAgbnVsbCxcbiAgICAgICAgLy8gZnJhZ21lbnQgc2hhZGVyXG4gICAgICAgIFwicHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XFxuXFxudmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7XFxuXFxudW5pZm9ybSBmbG9hdCBpbnZlcnQ7XFxudW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXI7XFxuXFxudm9pZCBtYWluKHZvaWQpXFxue1xcbiAgICBnbF9GcmFnQ29sb3IgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZUZXh0dXJlQ29vcmQpO1xcblxcbiAgICBnbF9GcmFnQ29sb3IucmdiID0gbWl4KCAodmVjMygxKS1nbF9GcmFnQ29sb3IucmdiKSAqIGdsX0ZyYWdDb2xvci5hLCBnbF9GcmFnQ29sb3IucmdiLCAxLjAgLSBpbnZlcnQpO1xcbn1cXG5cIixcbiAgICAgICAgLy8gY3VzdG9tIHVuaWZvcm1zXG4gICAgICAgIHtcbiAgICAgICAgICAgIGludmVydDogeyB0eXBlOiAnMWYnLCB2YWx1ZTogMSB9XG4gICAgICAgIH1cbiAgICApO1xufVxuXG5JbnZlcnRGaWx0ZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShjb3JlLkFic3RyYWN0RmlsdGVyLnByb3RvdHlwZSk7XG5JbnZlcnRGaWx0ZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gSW52ZXJ0RmlsdGVyO1xubW9kdWxlLmV4cG9ydHMgPSBJbnZlcnRGaWx0ZXI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKEludmVydEZpbHRlci5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBUaGUgc3RyZW5ndGggb2YgdGhlIGludmVydC4gYDFgIHdpbGwgZnVsbHkgaW52ZXJ0IHRoZSBjb2xvcnMsIGFuZFxuICAgICAqIGAwYCB3aWxsIG1ha2UgdGhlIG9iamVjdCBpdHMgbm9ybWFsIGNvbG9yLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuSW52ZXJ0RmlsdGVyI1xuICAgICAqL1xuICAgIGludmVydDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVuaWZvcm1zLmludmVydC52YWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudW5pZm9ybXMuaW52ZXJ0LnZhbHVlID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG59KTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vLi4vY29yZScpO1xuLy8gQHNlZSBodHRwczovL2dpdGh1Yi5jb20vc3Vic3RhY2svYnJmcy9pc3N1ZXMvMjVcblxuXG4vKipcbiAqIEBhdXRob3IgVmljbyBAdmljb2NvdGVhXG4gKiBvcmlnaW5hbCBmaWx0ZXI6IGh0dHBzOi8vZ2l0aHViLmNvbS9ldmFudy9nbGZ4LmpzL2Jsb2IvbWFzdGVyL3NyYy9maWx0ZXJzL2FkanVzdC9ub2lzZS5qc1xuICovXG5cbi8qKlxuICogQSBOb2lzZSBlZmZlY3QgZmlsdGVyLlxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5BYnN0cmFjdEZpbHRlclxuICogQG1lbWJlcm9mIFBJWEkuZmlsdGVyc1xuICovXG5mdW5jdGlvbiBOb2lzZUZpbHRlcigpXG57XG4gICAgY29yZS5BYnN0cmFjdEZpbHRlci5jYWxsKHRoaXMsXG4gICAgICAgIC8vIHZlcnRleCBzaGFkZXJcbiAgICAgICAgbnVsbCxcbiAgICAgICAgLy8gZnJhZ21lbnQgc2hhZGVyXG4gICAgICAgIFwicHJlY2lzaW9uIGhpZ2hwIGZsb2F0O1xcblxcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xcbnZhcnlpbmcgdmVjNCB2Q29sb3I7XFxuXFxudW5pZm9ybSBmbG9hdCBub2lzZTtcXG51bmlmb3JtIHNhbXBsZXIyRCB1U2FtcGxlcjtcXG5cXG5mbG9hdCByYW5kKHZlYzIgY28pXFxue1xcbiAgICByZXR1cm4gZnJhY3Qoc2luKGRvdChjby54eSwgdmVjMigxMi45ODk4LCA3OC4yMzMpKSkgKiA0Mzc1OC41NDUzKTtcXG59XFxuXFxudm9pZCBtYWluKClcXG57XFxuICAgIHZlYzQgY29sb3IgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZUZXh0dXJlQ29vcmQpO1xcblxcbiAgICBmbG9hdCBkaWZmID0gKHJhbmQodlRleHR1cmVDb29yZCkgLSAwLjUpICogbm9pc2U7XFxuXFxuICAgIGNvbG9yLnIgKz0gZGlmZjtcXG4gICAgY29sb3IuZyArPSBkaWZmO1xcbiAgICBjb2xvci5iICs9IGRpZmY7XFxuXFxuICAgIGdsX0ZyYWdDb2xvciA9IGNvbG9yO1xcbn1cXG5cIixcbiAgICAgICAgLy8gY3VzdG9tIHVuaWZvcm1zXG4gICAgICAgIHtcbiAgICAgICAgICAgIG5vaXNlOiB7IHR5cGU6ICcxZicsIHZhbHVlOiAwLjUgfVxuICAgICAgICB9XG4gICAgKTtcbn1cblxuTm9pc2VGaWx0ZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShjb3JlLkFic3RyYWN0RmlsdGVyLnByb3RvdHlwZSk7XG5Ob2lzZUZpbHRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBOb2lzZUZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gTm9pc2VGaWx0ZXI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKE5vaXNlRmlsdGVyLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFRoZSBhbW91bnQgb2Ygbm9pc2UgdG8gYXBwbHkuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5Ob2lzZUZpbHRlciNcbiAgICAgKiBAZGVmYXVsdCAwLjVcbiAgICAgKi9cbiAgICBub2lzZToge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVuaWZvcm1zLm5vaXNlLnZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy5ub2lzZS52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfVxufSk7XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uLy4uL2NvcmUnKTtcbi8vIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL3N1YnN0YWNrL2JyZnMvaXNzdWVzLzI1XG5cblxuLyoqXG4gKiBUaGlzIGZpbHRlciBhcHBsaWVzIGEgcGl4ZWxhdGUgZWZmZWN0IG1ha2luZyBkaXNwbGF5IG9iamVjdHMgYXBwZWFyICdibG9ja3knLlxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5BYnN0cmFjdEZpbHRlclxuICogQG1lbWJlcm9mIFBJWEkuZmlsdGVyc1xuICovXG5mdW5jdGlvbiBQaXhlbGF0ZUZpbHRlcigpXG57XG4gICAgY29yZS5BYnN0cmFjdEZpbHRlci5jYWxsKHRoaXMsXG4gICAgICAgIC8vIHZlcnRleCBzaGFkZXJcbiAgICAgICAgbnVsbCxcbiAgICAgICAgLy8gZnJhZ21lbnQgc2hhZGVyXG4gICAgICAgIFwicHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XFxuXFxudmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7XFxuXFxudW5pZm9ybSB2ZWM0IGRpbWVuc2lvbnM7XFxudW5pZm9ybSB2ZWMyIHBpeGVsU2l6ZTtcXG51bmlmb3JtIHNhbXBsZXIyRCB1U2FtcGxlcjtcXG5cXG52b2lkIG1haW4odm9pZClcXG57XFxuICAgIHZlYzIgY29vcmQgPSB2VGV4dHVyZUNvb3JkO1xcblxcbiAgICB2ZWMyIHNpemUgPSBkaW1lbnNpb25zLnh5IC8gcGl4ZWxTaXplO1xcblxcbiAgICB2ZWMyIGNvbG9yID0gZmxvb3IoICggdlRleHR1cmVDb29yZCAqIHNpemUgKSApIC8gc2l6ZSArIHBpeGVsU2l6ZS9kaW1lbnNpb25zLnh5ICogMC41O1xcblxcbiAgICBnbF9GcmFnQ29sb3IgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIGNvbG9yKTtcXG59XFxuXCIsXG4gICAgICAgIC8vIGN1c3RvbSB1bmlmb3Jtc1xuICAgICAgICB7XG4gICAgICAgICAgICBkaW1lbnNpb25zOiB7IHR5cGU6ICc0ZnYnLCAgdmFsdWU6IG5ldyBGbG9hdDMyQXJyYXkoWzAsIDAsIDAsIDBdKSB9LFxuICAgICAgICAgICAgcGl4ZWxTaXplOiAgeyB0eXBlOiAndjInLCAgIHZhbHVlOiB7IHg6IDEwLCB5OiAxMCB9IH1cbiAgICAgICAgfVxuICAgICk7XG59XG5cblBpeGVsYXRlRmlsdGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoY29yZS5BYnN0cmFjdEZpbHRlci5wcm90b3R5cGUpO1xuUGl4ZWxhdGVGaWx0ZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gUGl4ZWxhdGVGaWx0ZXI7XG5tb2R1bGUuZXhwb3J0cyA9IFBpeGVsYXRlRmlsdGVyO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhQaXhlbGF0ZUZpbHRlci5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBUaGlzIGEgcG9pbnQgdGhhdCBkZXNjcmliZXMgdGhlIHNpemUgb2YgdGhlIGJsb2Nrcy5cbiAgICAgKiB4IGlzIHRoZSB3aWR0aCBvZiB0aGUgYmxvY2sgYW5kIHkgaXMgdGhlIGhlaWdodC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuUG9pbnR9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5QaXhlbGF0ZUZpbHRlciNcbiAgICAgKi9cbiAgICBzaXplOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudW5pZm9ybXMucGl4ZWxTaXplLnZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy5waXhlbFNpemUudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi8uLi9jb3JlJyk7XG4vLyBAc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9zdWJzdGFjay9icmZzL2lzc3Vlcy8yNVxuXG5cbi8qKlxuICogQW4gUkdCIFNwbGl0IEZpbHRlci5cbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQWJzdHJhY3RGaWx0ZXJcbiAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnNcbiAqL1xuZnVuY3Rpb24gUkdCU3BsaXRGaWx0ZXIoKVxue1xuICAgIGNvcmUuQWJzdHJhY3RGaWx0ZXIuY2FsbCh0aGlzLFxuICAgICAgICAvLyB2ZXJ0ZXggc2hhZGVyXG4gICAgICAgIG51bGwsXG4gICAgICAgIC8vIGZyYWdtZW50IHNoYWRlclxuICAgICAgICBcInByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xcblxcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xcblxcbnVuaWZvcm0gc2FtcGxlcjJEIHVTYW1wbGVyO1xcbnVuaWZvcm0gdmVjNCBkaW1lbnNpb25zO1xcbnVuaWZvcm0gdmVjMiByZWQ7XFxudW5pZm9ybSB2ZWMyIGdyZWVuO1xcbnVuaWZvcm0gdmVjMiBibHVlO1xcblxcbnZvaWQgbWFpbih2b2lkKVxcbntcXG4gICBnbF9GcmFnQ29sb3IuciA9IHRleHR1cmUyRCh1U2FtcGxlciwgdlRleHR1cmVDb29yZCArIHJlZC9kaW1lbnNpb25zLnh5KS5yO1xcbiAgIGdsX0ZyYWdDb2xvci5nID0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2VGV4dHVyZUNvb3JkICsgZ3JlZW4vZGltZW5zaW9ucy54eSkuZztcXG4gICBnbF9GcmFnQ29sb3IuYiA9IHRleHR1cmUyRCh1U2FtcGxlciwgdlRleHR1cmVDb29yZCArIGJsdWUvZGltZW5zaW9ucy54eSkuYjtcXG4gICBnbF9GcmFnQ29sb3IuYSA9IHRleHR1cmUyRCh1U2FtcGxlciwgdlRleHR1cmVDb29yZCkuYTtcXG59XFxuXCIsXG4gICAgICAgIC8vIGN1c3RvbSB1bmlmb3Jtc1xuICAgICAgICB7XG4gICAgICAgICAgICByZWQ6ICAgICAgICB7IHR5cGU6ICd2MicsIHZhbHVlOiB7IHg6IDIwLCB5OiAyMCB9IH0sXG4gICAgICAgICAgICBncmVlbjogICAgICB7IHR5cGU6ICd2MicsIHZhbHVlOiB7IHg6IC0yMCwgeTogMjAgfSB9LFxuICAgICAgICAgICAgYmx1ZTogICAgICAgeyB0eXBlOiAndjInLCB2YWx1ZTogeyB4OiAyMCwgeTogLTIwIH0gfSxcbiAgICAgICAgICAgIGRpbWVuc2lvbnM6IHsgdHlwZTogJzRmdicsIHZhbHVlOiBbMCwgMCwgMCwgMF0gfVxuICAgICAgICB9XG4gICAgKTtcbn1cblxuUkdCU3BsaXRGaWx0ZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShjb3JlLkFic3RyYWN0RmlsdGVyLnByb3RvdHlwZSk7XG5SR0JTcGxpdEZpbHRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBSR0JTcGxpdEZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gUkdCU3BsaXRGaWx0ZXI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKFJHQlNwbGl0RmlsdGVyLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFJlZCBjaGFubmVsIG9mZnNldC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuUG9pbnR9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5SR0JTcGxpdEZpbHRlciNcbiAgICAgKi9cbiAgICByZWQ6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy51bmlmb3Jtcy5yZWQudmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLnJlZC52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIEdyZWVuIGNoYW5uZWwgb2Zmc2V0LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5Qb2ludH1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLlJHQlNwbGl0RmlsdGVyI1xuICAgICAqL1xuICAgIGdyZWVuOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudW5pZm9ybXMuZ3JlZW4udmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLmdyZWVuLnZhbHVlID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQmx1ZSBvZmZzZXQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlBvaW50fVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuUkdCU3BsaXRGaWx0ZXIjXG4gICAgICovXG4gICAgYmx1ZToge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVuaWZvcm1zLmJsdWUudmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLmJsdWUudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi8uLi9jb3JlJyk7XG4vLyBAc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9zdWJzdGFjay9icmZzL2lzc3Vlcy8yNVxuXG5cbi8qKlxuICogVGhpcyBhcHBsaWVzIGEgc2VwaWEgZWZmZWN0IHRvIHlvdXIgRGlzcGxheSBPYmplY3RzLlxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5BYnN0cmFjdEZpbHRlclxuICogQG1lbWJlcm9mIFBJWEkuZmlsdGVyc1xuICovXG5mdW5jdGlvbiBTZXBpYUZpbHRlcigpXG57XG4gICAgY29yZS5BYnN0cmFjdEZpbHRlci5jYWxsKHRoaXMsXG4gICAgICAgIC8vIHZlcnRleCBzaGFkZXJcbiAgICAgICAgbnVsbCxcbiAgICAgICAgLy8gZnJhZ21lbnQgc2hhZGVyXG4gICAgICAgIFwicHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XFxuXFxudmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7XFxuXFxudW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXI7XFxudW5pZm9ybSBmbG9hdCBzZXBpYTtcXG5cXG5jb25zdCBtYXQzIHNlcGlhTWF0cml4ID0gbWF0MygwLjM1ODgsIDAuNzA0NCwgMC4xMzY4LCAwLjI5OTAsIDAuNTg3MCwgMC4xMTQwLCAwLjIzOTIsIDAuNDY5NiwgMC4wOTEyKTtcXG5cXG52b2lkIG1haW4odm9pZClcXG57XFxuICAgZ2xfRnJhZ0NvbG9yID0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2VGV4dHVyZUNvb3JkKTtcXG4gICBnbF9GcmFnQ29sb3IucmdiID0gbWl4KCBnbF9GcmFnQ29sb3IucmdiLCBnbF9GcmFnQ29sb3IucmdiICogc2VwaWFNYXRyaXgsIHNlcGlhKTtcXG59XFxuXCIsXG4gICAgICAgIC8vIGN1c3RvbSB1bmlmb3Jtc1xuICAgICAgICB7XG4gICAgICAgICAgICBzZXBpYTogeyB0eXBlOiAnMWYnLCB2YWx1ZTogMSB9XG4gICAgICAgIH1cbiAgICApO1xufVxuXG5TZXBpYUZpbHRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuQWJzdHJhY3RGaWx0ZXIucHJvdG90eXBlKTtcblNlcGlhRmlsdGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFNlcGlhRmlsdGVyO1xubW9kdWxlLmV4cG9ydHMgPSBTZXBpYUZpbHRlcjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoU2VwaWFGaWx0ZXIucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogVGhlIHN0cmVuZ3RoIG9mIHRoZSBzZXBpYS4gYDFgIHdpbGwgYXBwbHkgdGhlIGZ1bGwgc2VwaWEgZWZmZWN0LCBhbmRcbiAgICAgKiBgMGAgd2lsbCBtYWtlIHRoZSBvYmplY3QgaXRzIG5vcm1hbCBjb2xvci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLlNlcGlhRmlsdGVyI1xuICAgICAqL1xuICAgIHNlcGlhOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudW5pZm9ybXMuc2VwaWEudmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLnNlcGlhLnZhbHVlID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG59KTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vLi4vY29yZScpO1xuLy8gQHNlZSBodHRwczovL2dpdGh1Yi5jb20vc3Vic3RhY2svYnJmcy9pc3N1ZXMvMjVcblxuXG4vKipcbiAqIFRoZSBDb2xvck1hdHJpeEZpbHRlciBjbGFzcyBsZXRzIHlvdSBhcHBseSBhIDR4NCBtYXRyaXggdHJhbnNmb3JtYXRpb24gb24gdGhlIFJHQkFcbiAqIGNvbG9yIGFuZCBhbHBoYSB2YWx1ZXMgb2YgZXZlcnkgcGl4ZWwgb24geW91ciBkaXNwbGF5T2JqZWN0IHRvIHByb2R1Y2UgYSByZXN1bHRcbiAqIHdpdGggYSBuZXcgc2V0IG9mIFJHQkEgY29sb3IgYW5kIGFscGhhIHZhbHVlcy4gSXQncyBwcmV0dHkgcG93ZXJmdWwhXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLkFic3RyYWN0RmlsdGVyXG4gKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzXG4gKi9cbmZ1bmN0aW9uIFNob2Nrd2F2ZUZpbHRlcigpXG57XG4gICAgY29yZS5BYnN0cmFjdEZpbHRlci5jYWxsKHRoaXMsXG4gICAgICAgIC8vIHZlcnRleCBzaGFkZXJcbiAgICAgICAgbnVsbCxcbiAgICAgICAgLy8gZnJhZ21lbnQgc2hhZGVyXG4gICAgICAgIFwicHJlY2lzaW9uIGxvd3AgZmxvYXQ7XFxuXFxudmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7XFxuXFxudW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXI7XFxuXFxudW5pZm9ybSB2ZWMyIGNlbnRlcjtcXG51bmlmb3JtIHZlYzMgcGFyYW1zOyAvLyAxMC4wLCAwLjgsIDAuMVxcbnVuaWZvcm0gZmxvYXQgdGltZTtcXG5cXG52b2lkIG1haW4oKVxcbntcXG4gICAgdmVjMiB1diA9IHZUZXh0dXJlQ29vcmQ7XFxuICAgIHZlYzIgdGV4Q29vcmQgPSB1djtcXG5cXG4gICAgZmxvYXQgZGlzdCA9IGRpc3RhbmNlKHV2LCBjZW50ZXIpO1xcblxcbiAgICBpZiAoIChkaXN0IDw9ICh0aW1lICsgcGFyYW1zLnopKSAmJiAoZGlzdCA+PSAodGltZSAtIHBhcmFtcy56KSkgKVxcbiAgICB7XFxuICAgICAgICBmbG9hdCBkaWZmID0gKGRpc3QgLSB0aW1lKTtcXG4gICAgICAgIGZsb2F0IHBvd0RpZmYgPSAxLjAgLSBwb3coYWJzKGRpZmYqcGFyYW1zLngpLCBwYXJhbXMueSk7XFxuXFxuICAgICAgICBmbG9hdCBkaWZmVGltZSA9IGRpZmYgICogcG93RGlmZjtcXG4gICAgICAgIHZlYzIgZGlmZlVWID0gbm9ybWFsaXplKHV2IC0gY2VudGVyKTtcXG4gICAgICAgIHRleENvb3JkID0gdXYgKyAoZGlmZlVWICogZGlmZlRpbWUpO1xcbiAgICB9XFxuXFxuICAgIGdsX0ZyYWdDb2xvciA9IHRleHR1cmUyRCh1U2FtcGxlciwgdGV4Q29vcmQpO1xcbn1cXG5cIixcbiAgICAgICAgLy8gY3VzdG9tIHVuaWZvcm1zXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNlbnRlcjogeyB0eXBlOiAndjInLCB2YWx1ZTogeyB4OiAwLjUsIHk6IDAuNSB9IH0sXG4gICAgICAgICAgICBwYXJhbXM6IHsgdHlwZTogJ3YzJywgdmFsdWU6IHsgeDogMTAsIHk6IDAuOCwgejogMC4xIH0gfSxcbiAgICAgICAgICAgIHRpbWU6IHsgdHlwZTogJzFmJywgdmFsdWU6IDAgfVxuICAgICAgICB9XG4gICAgKTtcbn1cblxuU2hvY2t3YXZlRmlsdGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoY29yZS5BYnN0cmFjdEZpbHRlci5wcm90b3R5cGUpO1xuU2hvY2t3YXZlRmlsdGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFNob2Nrd2F2ZUZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gU2hvY2t3YXZlRmlsdGVyO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhTaG9ja3dhdmVGaWx0ZXIucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgY2VudGVyIG9mIHRoZSBzaG9ja3dhdmUgaW4gbm9ybWFsaXplZCBzY3JlZW4gY29vcmRzLiBUaGF0IGlzXG4gICAgICogKDAsMCkgaXMgdGhlIHRvcC1sZWZ0IGFuZCAoMSwxKSBpcyB0aGUgYm90dG9tIHJpZ2h0LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7b2JqZWN0PHN0cmluZywgbnVtYmVyPn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLlNob2Nrd2F2ZUZpbHRlciNcbiAgICAgKi9cbiAgICBjZW50ZXI6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy51bmlmb3Jtcy5jZW50ZXIudmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLmNlbnRlci52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfSxcbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBwYXJhbXMgb2YgdGhlIHNob2Nrd2F2ZS4gVGhlc2UgbW9kaWZ5IHRoZSBsb29rIGFuZCBiZWhhdmlvciBvZlxuICAgICAqIHRoZSBzaG9ja3dhdmUgYXMgaXQgcmlwcGxlcyBvdXQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtvYmplY3Q8c3RyaW5nLCBudW1iZXI+fVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuU2hvY2t3YXZlRmlsdGVyI1xuICAgICAqL1xuICAgIHBhcmFtczoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVuaWZvcm1zLnBhcmFtcy52YWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudW5pZm9ybXMucGFyYW1zLnZhbHVlID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9LFxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIGVsYXBzZWQgdGltZSBvZiB0aGUgc2hvY2t3YXZlLiBUaGlzIGNvbnRyb2xzIHRoZSBzcGVlZCBhdCB3aGljaFxuICAgICAqIHRoZSBzaG9ja3dhdmUgcmlwcGxlcyBvdXQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5TaG9ja3dhdmVGaWx0ZXIjXG4gICAgICovXG4gICAgdGltZToge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVuaWZvcm1zLnRpbWUudmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLnRpbWUudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi8uLi9jb3JlJyk7XG4vLyBAc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9zdWJzdGFjay9icmZzL2lzc3Vlcy8yNVxuXG5cbi8qKlxuICogQGF1dGhvciBWaWNvIEB2aWNvY290ZWFcbiAqIG9yaWdpbmFsIGZpbHRlciBodHRwczovL2dpdGh1Yi5jb20vZXZhbncvZ2xmeC5qcy9ibG9iL21hc3Rlci9zcmMvZmlsdGVycy9ibHVyL3RpbHRzaGlmdC5qcyBieSBFdmFuIFdhbGxhY2UgOiBodHRwOi8vbWFkZWJ5ZXZhbi5jb20vXG4gKi9cblxuLyoqXG4gKiBBIFRpbHRTaGlmdEF4aXNGaWx0ZXIuXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLkFic3RyYWN0RmlsdGVyXG4gKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzXG4gKi9cbmZ1bmN0aW9uIFRpbHRTaGlmdEF4aXNGaWx0ZXIoKVxue1xuICAgIGNvcmUuQWJzdHJhY3RGaWx0ZXIuY2FsbCh0aGlzLFxuICAgICAgICAvLyB2ZXJ0ZXggc2hhZGVyXG4gICAgICAgIG51bGwsXG4gICAgICAgIC8vIGZyYWdtZW50IHNoYWRlclxuICAgICAgICBcInByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xcblxcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xcblxcbnVuaWZvcm0gc2FtcGxlcjJEIHVTYW1wbGVyO1xcbnVuaWZvcm0gZmxvYXQgYmx1cjtcXG51bmlmb3JtIGZsb2F0IGdyYWRpZW50Qmx1cjtcXG51bmlmb3JtIHZlYzIgc3RhcnQ7XFxudW5pZm9ybSB2ZWMyIGVuZDtcXG51bmlmb3JtIHZlYzIgZGVsdGE7XFxudW5pZm9ybSB2ZWMyIHRleFNpemU7XFxuXFxuZmxvYXQgcmFuZG9tKHZlYzMgc2NhbGUsIGZsb2F0IHNlZWQpXFxue1xcbiAgICByZXR1cm4gZnJhY3Qoc2luKGRvdChnbF9GcmFnQ29vcmQueHl6ICsgc2VlZCwgc2NhbGUpKSAqIDQzNzU4LjU0NTMgKyBzZWVkKTtcXG59XFxuXFxudm9pZCBtYWluKHZvaWQpXFxue1xcbiAgICB2ZWM0IGNvbG9yID0gdmVjNCgwLjApO1xcbiAgICBmbG9hdCB0b3RhbCA9IDAuMDtcXG5cXG4gICAgZmxvYXQgb2Zmc2V0ID0gcmFuZG9tKHZlYzMoMTIuOTg5OCwgNzguMjMzLCAxNTEuNzE4MiksIDAuMCk7XFxuICAgIHZlYzIgbm9ybWFsID0gbm9ybWFsaXplKHZlYzIoc3RhcnQueSAtIGVuZC55LCBlbmQueCAtIHN0YXJ0LngpKTtcXG4gICAgZmxvYXQgcmFkaXVzID0gc21vb3Roc3RlcCgwLjAsIDEuMCwgYWJzKGRvdCh2VGV4dHVyZUNvb3JkICogdGV4U2l6ZSAtIHN0YXJ0LCBub3JtYWwpKSAvIGdyYWRpZW50Qmx1cikgKiBibHVyO1xcblxcbiAgICBmb3IgKGZsb2F0IHQgPSAtMzAuMDsgdCA8PSAzMC4wOyB0KyspXFxuICAgIHtcXG4gICAgICAgIGZsb2F0IHBlcmNlbnQgPSAodCArIG9mZnNldCAtIDAuNSkgLyAzMC4wO1xcbiAgICAgICAgZmxvYXQgd2VpZ2h0ID0gMS4wIC0gYWJzKHBlcmNlbnQpO1xcbiAgICAgICAgdmVjNCBzYW1wbGUgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZUZXh0dXJlQ29vcmQgKyBkZWx0YSAvIHRleFNpemUgKiBwZXJjZW50ICogcmFkaXVzKTtcXG4gICAgICAgIHNhbXBsZS5yZ2IgKj0gc2FtcGxlLmE7XFxuICAgICAgICBjb2xvciArPSBzYW1wbGUgKiB3ZWlnaHQ7XFxuICAgICAgICB0b3RhbCArPSB3ZWlnaHQ7XFxuICAgIH1cXG5cXG4gICAgZ2xfRnJhZ0NvbG9yID0gY29sb3IgLyB0b3RhbDtcXG4gICAgZ2xfRnJhZ0NvbG9yLnJnYiAvPSBnbF9GcmFnQ29sb3IuYSArIDAuMDAwMDE7XFxufVxcblwiLFxuICAgICAgICAvLyBjdXN0b20gdW5pZm9ybXNcbiAgICAgICAge1xuICAgICAgICAgICAgYmx1cjogICAgICAgICAgIHsgdHlwZTogJzFmJywgdmFsdWU6IDEwMCB9LFxuICAgICAgICAgICAgZ3JhZGllbnRCbHVyOiAgIHsgdHlwZTogJzFmJywgdmFsdWU6IDYwMCB9LFxuICAgICAgICAgICAgc3RhcnQ6ICAgICAgICAgIHsgdHlwZTogJ3YyJywgdmFsdWU6IHsgeDogMCwgICAgeTogd2luZG93LmlubmVySGVpZ2h0IC8gMiB9IH0sXG4gICAgICAgICAgICBlbmQ6ICAgICAgICAgICAgeyB0eXBlOiAndjInLCB2YWx1ZTogeyB4OiA2MDAsICB5OiB3aW5kb3cuaW5uZXJIZWlnaHQgLyAyIH0gfSxcbiAgICAgICAgICAgIGRlbHRhOiAgICAgICAgICB7IHR5cGU6ICd2MicsIHZhbHVlOiB7IHg6IDMwLCAgIHk6IDMwIH0gfSxcbiAgICAgICAgICAgIHRleFNpemU6ICAgICAgICB7IHR5cGU6ICd2MicsIHZhbHVlOiB7IHg6IHdpbmRvdy5pbm5lcldpZHRoLCB5OiB3aW5kb3cuaW5uZXJIZWlnaHQgfSB9XG4gICAgICAgIH1cbiAgICApO1xuXG4gICAgdGhpcy51cGRhdGVEZWx0YSgpO1xufVxuXG5UaWx0U2hpZnRBeGlzRmlsdGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoY29yZS5BYnN0cmFjdEZpbHRlci5wcm90b3R5cGUpO1xuVGlsdFNoaWZ0QXhpc0ZpbHRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBUaWx0U2hpZnRBeGlzRmlsdGVyO1xubW9kdWxlLmV4cG9ydHMgPSBUaWx0U2hpZnRBeGlzRmlsdGVyO1xuXG4vKipcbiAqIFVwZGF0ZXMgdGhlIGZpbHRlciBkZWx0YSB2YWx1ZXMuXG4gKiBUaGlzIGlzIG92ZXJyaWRkZW4gaW4gdGhlIFggYW5kIFkgZmlsdGVycywgZG9lcyBub3RoaW5nIGZvciB0aGlzIGNsYXNzLlxuICpcbiAqL1xuVGlsdFNoaWZ0QXhpc0ZpbHRlci5wcm90b3R5cGUudXBkYXRlRGVsdGEgPSBmdW5jdGlvbiAoKVxue1xuICAgIHRoaXMudW5pZm9ybXMuZGVsdGEudmFsdWUueCA9IDA7XG4gICAgdGhpcy51bmlmb3Jtcy5kZWx0YS52YWx1ZS55ID0gMDtcbn07XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKFRpbHRTaGlmdEF4aXNGaWx0ZXIucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogVGhlIHN0cmVuZ3RoIG9mIHRoZSBibHVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuVGlsdFNoaWZ0QXhpc0ZpbHRlciNcbiAgICAgKi9cbiAgICBibHVyOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudW5pZm9ybXMuYmx1ci52YWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudW5pZm9ybXMuYmx1ci52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFRoZSBzdHJlbmd0aCBvZiB0aGUgZ3JhZGllbnQgYmx1ci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLlRpbHRTaGlmdEF4aXNGaWx0ZXIjXG4gICAgICovXG4gICAgZ3JhZGllbnRCbHVyOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudW5pZm9ybXMuZ3JhZGllbnRCbHVyLnZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy5ncmFkaWVudEJsdXIudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBUaGUgWCB2YWx1ZSB0byBzdGFydCB0aGUgZWZmZWN0IGF0LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5Qb2ludH1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLlRpbHRTaGlmdEF4aXNGaWx0ZXIjXG4gICAgICovXG4gICAgc3RhcnQ6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy51bmlmb3Jtcy5zdGFydC52YWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudW5pZm9ybXMuc3RhcnQudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlRGVsdGEoKTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBUaGUgWCB2YWx1ZSB0byBlbmQgdGhlIGVmZmVjdCBhdC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuUG9pbnR9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5UaWx0U2hpZnRBeGlzRmlsdGVyI1xuICAgICAqL1xuICAgIGVuZDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVuaWZvcm1zLmVuZC52YWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudW5pZm9ybXMuZW5kLnZhbHVlID0gdmFsdWU7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZURlbHRhKCk7XG4gICAgICAgIH1cbiAgICB9XG59KTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vLi4vY29yZScpLFxuICAgIFRpbHRTaGlmdFhGaWx0ZXIgPSByZXF1aXJlKCcuL1RpbHRTaGlmdFhGaWx0ZXInKSxcbiAgICBUaWx0U2hpZnRZRmlsdGVyID0gcmVxdWlyZSgnLi9UaWx0U2hpZnRZRmlsdGVyJyk7XG5cbi8qKlxuICogQGF1dGhvciBWaWNvIEB2aWNvY290ZWFcbiAqIG9yaWdpbmFsIGZpbHRlciBodHRwczovL2dpdGh1Yi5jb20vZXZhbncvZ2xmeC5qcy9ibG9iL21hc3Rlci9zcmMvZmlsdGVycy9ibHVyL3RpbHRzaGlmdC5qcyBieSBFdmFuIFdhbGxhY2UgOiBodHRwOi8vbWFkZWJ5ZXZhbi5jb20vXG4gKi9cblxuLyoqXG4gKiBBIFRpbHRTaGlmdCBGaWx0ZXIuIE1hbmFnZXMgdGhlIHBhc3Mgb2YgYm90aCBhIFRpbHRTaGlmdFhGaWx0ZXIgYW5kIFRpbHRTaGlmdFlGaWx0ZXIuXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLkFic3RyYWN0RmlsdGVyXG4gKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzXG4gKi9cbmZ1bmN0aW9uIFRpbHRTaGlmdEZpbHRlcigpXG57XG4gICAgY29yZS5BYnN0cmFjdEZpbHRlci5jYWxsKHRoaXMpO1xuXG4gICAgdGhpcy50aWx0U2hpZnRYRmlsdGVyID0gbmV3IFRpbHRTaGlmdFhGaWx0ZXIoKTtcbiAgICB0aGlzLnRpbHRTaGlmdFlGaWx0ZXIgPSBuZXcgVGlsdFNoaWZ0WUZpbHRlcigpO1xufVxuXG5UaWx0U2hpZnRGaWx0ZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShjb3JlLkFic3RyYWN0RmlsdGVyLnByb3RvdHlwZSk7XG5UaWx0U2hpZnRGaWx0ZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gVGlsdFNoaWZ0RmlsdGVyO1xubW9kdWxlLmV4cG9ydHMgPSBUaWx0U2hpZnRGaWx0ZXI7XG5cblRpbHRTaGlmdEZpbHRlci5wcm90b3R5cGUuYXBwbHlGaWx0ZXIgPSBmdW5jdGlvbiAocmVuZGVyZXIsIGlucHV0LCBvdXRwdXQpXG57XG4gICAgdmFyIHJlbmRlclRhcmdldCA9IHJlbmRlcmVyLmZpbHRlck1hbmFnZXIuZ2V0UmVuZGVyVGFyZ2V0KHRydWUpO1xuXG4gICAgdGhpcy50aWx0U2hpZnRYRmlsdGVyLmFwcGx5RmlsdGVyKHJlbmRlcmVyLCBpbnB1dCwgcmVuZGVyVGFyZ2V0KTtcblxuICAgIHRoaXMudGlsdFNoaWZ0WUZpbHRlci5hcHBseUZpbHRlcihyZW5kZXJlciwgcmVuZGVyVGFyZ2V0LCBvdXRwdXQpO1xuXG4gICAgcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5yZXR1cm5SZW5kZXJUYXJnZXQocmVuZGVyVGFyZ2V0KTtcbn07XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKFRpbHRTaGlmdEZpbHRlci5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBUaGUgc3RyZW5ndGggb2YgdGhlIGJsdXIuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5UaWx0U2hpZnRGaWx0ZXIjXG4gICAgICovXG4gICAgYmx1cjoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnRpbHRTaGlmdFhGaWx0ZXIuYmx1cjtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudGlsdFNoaWZ0WEZpbHRlci5ibHVyID0gdGhpcy50aWx0U2hpZnRZRmlsdGVyLmJsdXIgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBUaGUgc3RyZW5ndGggb2YgdGhlIGdyYWRpZW50IGJsdXIuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5UaWx0U2hpZnRGaWx0ZXIjXG4gICAgICovXG4gICAgZ3JhZGllbnRCbHVyOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudGlsdFNoaWZ0WEZpbHRlci5ncmFkaWVudEJsdXI7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnRpbHRTaGlmdFhGaWx0ZXIuZ3JhZGllbnRCbHVyID0gdGhpcy50aWx0U2hpZnRZRmlsdGVyLmdyYWRpZW50Qmx1ciA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFRoZSBZIHZhbHVlIHRvIHN0YXJ0IHRoZSBlZmZlY3QgYXQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5UaWx0U2hpZnRGaWx0ZXIjXG4gICAgICovXG4gICAgc3RhcnQ6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy50aWx0U2hpZnRYRmlsdGVyLnN0YXJ0O1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy50aWx0U2hpZnRYRmlsdGVyLnN0YXJ0ID0gdGhpcy50aWx0U2hpZnRZRmlsdGVyLnN0YXJ0ID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVGhlIFkgdmFsdWUgdG8gZW5kIHRoZSBlZmZlY3QgYXQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5UaWx0U2hpZnRGaWx0ZXIjXG4gICAgICovXG4gICAgZW5kOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudGlsdFNoaWZ0WEZpbHRlci5lbmQ7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnRpbHRTaGlmdFhGaWx0ZXIuZW5kID0gdGhpcy50aWx0U2hpZnRZRmlsdGVyLmVuZCA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfVxufSk7XG4iLCJ2YXIgVGlsdFNoaWZ0QXhpc0ZpbHRlciA9IHJlcXVpcmUoJy4vVGlsdFNoaWZ0QXhpc0ZpbHRlcicpO1xuXG4vKipcbiAqIEBhdXRob3IgVmljbyBAdmljb2NvdGVhXG4gKiBvcmlnaW5hbCBmaWx0ZXIgaHR0cHM6Ly9naXRodWIuY29tL2V2YW53L2dsZnguanMvYmxvYi9tYXN0ZXIvc3JjL2ZpbHRlcnMvYmx1ci90aWx0c2hpZnQuanMgYnkgRXZhbiBXYWxsYWNlIDogaHR0cDovL21hZGVieWV2YW4uY29tL1xuICovXG5cbi8qKlxuICogQSBUaWx0U2hpZnRYRmlsdGVyLlxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5UaWx0U2hpZnRBeGlzRmlsdGVyXG4gKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzXG4gKi9cbmZ1bmN0aW9uIFRpbHRTaGlmdFhGaWx0ZXIoKVxue1xuICAgIFRpbHRTaGlmdEF4aXNGaWx0ZXIuY2FsbCh0aGlzKTtcbn1cblxuVGlsdFNoaWZ0WEZpbHRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFRpbHRTaGlmdEF4aXNGaWx0ZXIucHJvdG90eXBlKTtcblRpbHRTaGlmdFhGaWx0ZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gVGlsdFNoaWZ0WEZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gVGlsdFNoaWZ0WEZpbHRlcjtcblxuLyoqXG4gKiBVcGRhdGVzIHRoZSBmaWx0ZXIgZGVsdGEgdmFsdWVzLlxuICpcbiAqL1xuVGlsdFNoaWZ0WEZpbHRlci5wcm90b3R5cGUudXBkYXRlRGVsdGEgPSBmdW5jdGlvbiAoKVxue1xuICAgIHZhciBkeCA9IHRoaXMudW5pZm9ybXMuZW5kLnZhbHVlLnggLSB0aGlzLnVuaWZvcm1zLnN0YXJ0LnZhbHVlLng7XG4gICAgdmFyIGR5ID0gdGhpcy51bmlmb3Jtcy5lbmQudmFsdWUueSAtIHRoaXMudW5pZm9ybXMuc3RhcnQudmFsdWUueTtcbiAgICB2YXIgZCA9IE1hdGguc3FydChkeCAqIGR4ICsgZHkgKiBkeSk7XG5cbiAgICB0aGlzLnVuaWZvcm1zLmRlbHRhLnZhbHVlLnggPSBkeCAvIGQ7XG4gICAgdGhpcy51bmlmb3Jtcy5kZWx0YS52YWx1ZS55ID0gZHkgLyBkO1xufTtcbiIsInZhciBUaWx0U2hpZnRBeGlzRmlsdGVyID0gcmVxdWlyZSgnLi9UaWx0U2hpZnRBeGlzRmlsdGVyJyk7XG5cbi8qKlxuICogQGF1dGhvciBWaWNvIEB2aWNvY290ZWFcbiAqIG9yaWdpbmFsIGZpbHRlciBodHRwczovL2dpdGh1Yi5jb20vZXZhbncvZ2xmeC5qcy9ibG9iL21hc3Rlci9zcmMvZmlsdGVycy9ibHVyL3RpbHRzaGlmdC5qcyBieSBFdmFuIFdhbGxhY2UgOiBodHRwOi8vbWFkZWJ5ZXZhbi5jb20vXG4gKi9cblxuLyoqXG4gKiBBIFRpbHRTaGlmdFlGaWx0ZXIuXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLlRpbHRTaGlmdEF4aXNGaWx0ZXJcbiAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnNcbiAqL1xuZnVuY3Rpb24gVGlsdFNoaWZ0WUZpbHRlcigpXG57XG4gICAgVGlsdFNoaWZ0QXhpc0ZpbHRlci5jYWxsKHRoaXMpO1xufVxuXG5UaWx0U2hpZnRZRmlsdGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoVGlsdFNoaWZ0QXhpc0ZpbHRlci5wcm90b3R5cGUpO1xuVGlsdFNoaWZ0WUZpbHRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBUaWx0U2hpZnRZRmlsdGVyO1xubW9kdWxlLmV4cG9ydHMgPSBUaWx0U2hpZnRZRmlsdGVyO1xuXG4vKipcbiAqIFVwZGF0ZXMgdGhlIGZpbHRlciBkZWx0YSB2YWx1ZXMuXG4gKlxuICovXG5UaWx0U2hpZnRZRmlsdGVyLnByb3RvdHlwZS51cGRhdGVEZWx0YSA9IGZ1bmN0aW9uICgpXG57XG4gICAgdmFyIGR4ID0gdGhpcy51bmlmb3Jtcy5lbmQudmFsdWUueCAtIHRoaXMudW5pZm9ybXMuc3RhcnQudmFsdWUueDtcbiAgICB2YXIgZHkgPSB0aGlzLnVuaWZvcm1zLmVuZC52YWx1ZS55IC0gdGhpcy51bmlmb3Jtcy5zdGFydC52YWx1ZS55O1xuICAgIHZhciBkID0gTWF0aC5zcXJ0KGR4ICogZHggKyBkeSAqIGR5KTtcblxuICAgIHRoaXMudW5pZm9ybXMuZGVsdGEudmFsdWUueCA9IC1keSAvIGQ7XG4gICAgdGhpcy51bmlmb3Jtcy5kZWx0YS52YWx1ZS55ID0gZHggLyBkO1xufTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vLi4vY29yZScpO1xuLy8gQHNlZSBodHRwczovL2dpdGh1Yi5jb20vc3Vic3RhY2svYnJmcy9pc3N1ZXMvMjVcblxuXG4vKipcbiAqIFRoaXMgZmlsdGVyIGFwcGxpZXMgYSB0d2lzdCBlZmZlY3QgbWFraW5nIGRpc3BsYXkgb2JqZWN0cyBhcHBlYXIgdHdpc3RlZCBpbiB0aGUgZ2l2ZW4gZGlyZWN0aW9uLlxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5BYnN0cmFjdEZpbHRlclxuICogQG1lbWJlcm9mIFBJWEkuZmlsdGVyc1xuICovXG5mdW5jdGlvbiBUd2lzdEZpbHRlcigpXG57XG4gICAgY29yZS5BYnN0cmFjdEZpbHRlci5jYWxsKHRoaXMsXG4gICAgICAgIC8vIHZlcnRleCBzaGFkZXJcbiAgICAgICAgbnVsbCxcbiAgICAgICAgLy8gZnJhZ21lbnQgc2hhZGVyXG4gICAgICAgIFwicHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XFxuXFxudmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7XFxuXFxudW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXI7XFxudW5pZm9ybSBmbG9hdCByYWRpdXM7XFxudW5pZm9ybSBmbG9hdCBhbmdsZTtcXG51bmlmb3JtIHZlYzIgb2Zmc2V0O1xcblxcbnZvaWQgbWFpbih2b2lkKVxcbntcXG4gICB2ZWMyIGNvb3JkID0gdlRleHR1cmVDb29yZCAtIG9mZnNldDtcXG4gICBmbG9hdCBkaXN0ID0gbGVuZ3RoKGNvb3JkKTtcXG5cXG4gICBpZiAoZGlzdCA8IHJhZGl1cylcXG4gICB7XFxuICAgICAgIGZsb2F0IHJhdGlvID0gKHJhZGl1cyAtIGRpc3QpIC8gcmFkaXVzO1xcbiAgICAgICBmbG9hdCBhbmdsZU1vZCA9IHJhdGlvICogcmF0aW8gKiBhbmdsZTtcXG4gICAgICAgZmxvYXQgcyA9IHNpbihhbmdsZU1vZCk7XFxuICAgICAgIGZsb2F0IGMgPSBjb3MoYW5nbGVNb2QpO1xcbiAgICAgICBjb29yZCA9IHZlYzIoY29vcmQueCAqIGMgLSBjb29yZC55ICogcywgY29vcmQueCAqIHMgKyBjb29yZC55ICogYyk7XFxuICAgfVxcblxcbiAgIGdsX0ZyYWdDb2xvciA9IHRleHR1cmUyRCh1U2FtcGxlciwgY29vcmQrb2Zmc2V0KTtcXG59XFxuXCIsXG4gICAgICAgIC8vIGN1c3RvbSB1bmlmb3Jtc1xuICAgICAgICB7XG4gICAgICAgICAgICByYWRpdXM6ICAgICB7IHR5cGU6ICcxZicsIHZhbHVlOiAwLjUgfSxcbiAgICAgICAgICAgIGFuZ2xlOiAgICAgIHsgdHlwZTogJzFmJywgdmFsdWU6IDUgfSxcbiAgICAgICAgICAgIG9mZnNldDogICAgIHsgdHlwZTogJ3YyJywgdmFsdWU6IHsgeDogMC41LCB5OiAwLjUgfSB9XG4gICAgICAgIH1cbiAgICApO1xufVxuXG5Ud2lzdEZpbHRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuQWJzdHJhY3RGaWx0ZXIucHJvdG90eXBlKTtcblR3aXN0RmlsdGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFR3aXN0RmlsdGVyO1xubW9kdWxlLmV4cG9ydHMgPSBUd2lzdEZpbHRlcjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoVHdpc3RGaWx0ZXIucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogVGhpcyBwb2ludCBkZXNjcmliZXMgdGhlIHRoZSBvZmZzZXQgb2YgdGhlIHR3aXN0LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5Qb2ludH1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLlR3aXN0RmlsdGVyI1xuICAgICAqL1xuICAgIG9mZnNldDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVuaWZvcm1zLm9mZnNldC52YWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudW5pZm9ybXMub2Zmc2V0LnZhbHVlID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVGhpcyByYWRpdXMgb2YgdGhlIHR3aXN0LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuVHdpc3RGaWx0ZXIjXG4gICAgICovXG4gICAgcmFkaXVzOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudW5pZm9ybXMucmFkaXVzLnZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy5yYWRpdXMudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBUaGlzIGFuZ2xlIG9mIHRoZSB0d2lzdC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLlR3aXN0RmlsdGVyI1xuICAgICAqL1xuICAgIGFuZ2xlOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudW5pZm9ybXMuYW5nbGUudmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLmFuZ2xlLnZhbHVlID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG59KTtcbiIsIi8vIHJ1biB0aGUgcG9seWZpbGxzXG5yZXF1aXJlKCcuL3BvbHlmaWxsJyk7XG5cbnZhciBjb3JlID0gbW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL2NvcmUnKTtcblxuLy8gYWRkIGNvcmUgcGx1Z2lucy5cbmNvcmUuZXh0cmFzICAgICAgICAgPSByZXF1aXJlKCcuL2V4dHJhcycpO1xuY29yZS5maWx0ZXJzICAgICAgICA9IHJlcXVpcmUoJy4vZmlsdGVycycpO1xuY29yZS5pbnRlcmFjdGlvbiAgICA9IHJlcXVpcmUoJy4vaW50ZXJhY3Rpb24nKTtcbmNvcmUubG9hZGVycyAgICAgICAgPSByZXF1aXJlKCcuL2xvYWRlcnMnKTtcbmNvcmUubWVzaCAgICAgICAgICAgPSByZXF1aXJlKCcuL21lc2gnKTtcbmNvcmUuYWNjZXNzaWJpbGl0eSAgPSByZXF1aXJlKCcuL2FjY2Vzc2liaWxpdHknKTtcblxuLy8gZXhwb3J0IGEgcHJlbWFkZSBsb2FkZXIgaW5zdGFuY2Vcbi8qKlxuICogQSBwcmVtYWRlIGluc3RhbmNlIG9mIHRoZSBsb2FkZXIgdGhhdCBjYW4gYmUgdXNlZCB0byBsb2FkZXIgcmVzb3VyY2VzLlxuICpcbiAqIEBuYW1lIGxvYWRlclxuICogQG1lbWJlcm9mIFBJWElcbiAqIEBwcm9wZXJ0eSB7UElYSS5sb2FkZXJzLkxvYWRlcn1cbiAqL1xuY29yZS5sb2FkZXIgPSBuZXcgY29yZS5sb2FkZXJzLkxvYWRlcigpO1xuXG4vLyBtaXhpbiB0aGUgZGVwcmVjYXRpb24gZmVhdHVyZXMuXG5PYmplY3QuYXNzaWduKGNvcmUsIHJlcXVpcmUoJy4vZGVwcmVjYXRpb24nKSk7XG5cbi8vIEFsd2F5cyBleHBvcnQgcGl4aSBnbG9iYWxseS5cbmdsb2JhbC5QSVhJID0gY29yZTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vY29yZScpO1xuXG4vKipcbiAqIEhvbGRzIGFsbCBpbmZvcm1hdGlvbiByZWxhdGVkIHRvIGFuIEludGVyYWN0aW9uIGV2ZW50XG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSS5pbnRlcmFjdGlvblxuICovXG5mdW5jdGlvbiBJbnRlcmFjdGlvbkRhdGEoKVxue1xuICAgIC8qKlxuICAgICAqIFRoaXMgcG9pbnQgc3RvcmVzIHRoZSBnbG9iYWwgY29vcmRzIG9mIHdoZXJlIHRoZSB0b3VjaC9tb3VzZSBldmVudCBoYXBwZW5lZFxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5Qb2ludH1cbiAgICAgKi9cbiAgICB0aGlzLmdsb2JhbCA9IG5ldyBjb3JlLlBvaW50KCk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgdGFyZ2V0IFNwcml0ZSB0aGF0IHdhcyBpbnRlcmFjdGVkIHdpdGhcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuU3ByaXRlfVxuICAgICAqL1xuICAgIHRoaXMudGFyZ2V0ID0gbnVsbDtcblxuICAgIC8qKlxuICAgICAqIFdoZW4gcGFzc2VkIHRvIGFuIGV2ZW50IGhhbmRsZXIsIHRoaXMgd2lsbCBiZSB0aGUgb3JpZ2luYWwgRE9NIEV2ZW50IHRoYXQgd2FzIGNhcHR1cmVkXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtFdmVudH1cbiAgICAgKi9cbiAgICB0aGlzLm9yaWdpbmFsRXZlbnQgPSBudWxsO1xufVxuXG5JbnRlcmFjdGlvbkRhdGEucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gSW50ZXJhY3Rpb25EYXRhO1xubW9kdWxlLmV4cG9ydHMgPSBJbnRlcmFjdGlvbkRhdGE7XG5cbi8qKlxuICogVGhpcyB3aWxsIHJldHVybiB0aGUgbG9jYWwgY29vcmRpbmF0ZXMgb2YgdGhlIHNwZWNpZmllZCBkaXNwbGF5T2JqZWN0IGZvciB0aGlzIEludGVyYWN0aW9uRGF0YVxuICpcbiAqIEBwYXJhbSBkaXNwbGF5T2JqZWN0IHtQSVhJLkRpc3BsYXlPYmplY3R9IFRoZSBEaXNwbGF5T2JqZWN0IHRoYXQgeW91IHdvdWxkIGxpa2UgdGhlIGxvY2FsIGNvb3JkcyBvZmZcbiAqIEBwYXJhbSBbcG9pbnRdIHtQSVhJLlBvaW50fSBBIFBvaW50IG9iamVjdCBpbiB3aGljaCB0byBzdG9yZSB0aGUgdmFsdWUsIG9wdGlvbmFsIChvdGhlcndpc2Ugd2lsbCBjcmVhdGUgYSBuZXcgcG9pbnQpXG4gKiBAcGFyYW0gW2dsb2JhbFBvc10ge1BJWEkuUG9pbnR9IEEgUG9pbnQgb2JqZWN0IGNvbnRhaW5pbmcgeW91ciBjdXN0b20gZ2xvYmFsIGNvb3Jkcywgb3B0aW9uYWwgKG90aGVyd2lzZSB3aWxsIHVzZSB0aGUgY3VycmVudCBnbG9iYWwgY29vcmRzKVxuICogQHJldHVybiB7UElYSS5Qb2ludH0gQSBwb2ludCBjb250YWluaW5nIHRoZSBjb29yZGluYXRlcyBvZiB0aGUgSW50ZXJhY3Rpb25EYXRhIHBvc2l0aW9uIHJlbGF0aXZlIHRvIHRoZSBEaXNwbGF5T2JqZWN0XG4gKi9cbkludGVyYWN0aW9uRGF0YS5wcm90b3R5cGUuZ2V0TG9jYWxQb3NpdGlvbiA9IGZ1bmN0aW9uIChkaXNwbGF5T2JqZWN0LCBwb2ludCwgZ2xvYmFsUG9zKVxue1xuICAgIHJldHVybiBkaXNwbGF5T2JqZWN0LndvcmxkVHJhbnNmb3JtLmFwcGx5SW52ZXJzZShnbG9iYWxQb3MgfHwgdGhpcy5nbG9iYWwsIHBvaW50KTtcbn07XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uL2NvcmUnKSxcbiAgICBJbnRlcmFjdGlvbkRhdGEgPSByZXF1aXJlKCcuL0ludGVyYWN0aW9uRGF0YScpO1xuXG4vLyBNaXggaW50ZXJhY3RpdmVUYXJnZXQgaW50byBjb3JlLkRpc3BsYXlPYmplY3QucHJvdG90eXBlXG5PYmplY3QuYXNzaWduKFxuICAgIGNvcmUuRGlzcGxheU9iamVjdC5wcm90b3R5cGUsXG4gICAgcmVxdWlyZSgnLi9pbnRlcmFjdGl2ZVRhcmdldCcpXG4pO1xuXG4vKipcbiAqIFRoZSBpbnRlcmFjdGlvbiBtYW5hZ2VyIGRlYWxzIHdpdGggbW91c2UgYW5kIHRvdWNoIGV2ZW50cy4gQW55IERpc3BsYXlPYmplY3QgY2FuIGJlIGludGVyYWN0aXZlXG4gKiBpZiBpdHMgaW50ZXJhY3RpdmUgcGFyYW1ldGVyIGlzIHNldCB0byB0cnVlXG4gKiBUaGlzIG1hbmFnZXIgYWxzbyBzdXBwb3J0cyBtdWx0aXRvdWNoLlxuICpcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWEkuaW50ZXJhY3Rpb25cbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5DYW52YXNSZW5kZXJlcnxQSVhJLldlYkdMUmVuZGVyZXJ9IEEgcmVmZXJlbmNlIHRvIHRoZSBjdXJyZW50IHJlbmRlcmVyXG4gKiBAcGFyYW0gW29wdGlvbnNdIHtvYmplY3R9XG4gKiBAcGFyYW0gW29wdGlvbnMuYXV0b1ByZXZlbnREZWZhdWx0PXRydWVdIHtib29sZWFufSBTaG91bGQgdGhlIG1hbmFnZXIgYXV0b21hdGljYWxseSBwcmV2ZW50IGRlZmF1bHQgYnJvd3NlciBhY3Rpb25zLlxuICogQHBhcmFtIFtvcHRpb25zLmludGVyYWN0aW9uRnJlcXVlbmN5PTEwXSB7bnVtYmVyfSBGcmVxdWVuY3kgaW5jcmVhc2VzIHRoZSBpbnRlcmFjdGlvbiBldmVudHMgd2lsbCBiZSBjaGVja2VkLlxuICovXG5mdW5jdGlvbiBJbnRlcmFjdGlvbk1hbmFnZXIocmVuZGVyZXIsIG9wdGlvbnMpXG57XG4gICAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG5cbiAgICAvKipcbiAgICAgKiBUaGUgcmVuZGVyZXIgdGhpcyBpbnRlcmFjdGlvbiBtYW5hZ2VyIHdvcmtzIGZvci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuU3lzdGVtUmVuZGVyZXJ9XG4gICAgICovXG4gICAgdGhpcy5yZW5kZXJlciA9IHJlbmRlcmVyO1xuXG4gICAgLyoqXG4gICAgICogU2hvdWxkIGRlZmF1bHQgYnJvd3NlciBhY3Rpb25zIGF1dG9tYXRpY2FsbHkgYmUgcHJldmVudGVkLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKiBAZGVmYXVsdCB0cnVlXG4gICAgICovXG4gICAgdGhpcy5hdXRvUHJldmVudERlZmF1bHQgPSBvcHRpb25zLmF1dG9QcmV2ZW50RGVmYXVsdCAhPT0gdW5kZWZpbmVkID8gb3B0aW9ucy5hdXRvUHJldmVudERlZmF1bHQgOiB0cnVlO1xuXG4gICAgLyoqXG4gICAgICogQXMgdGhpcyBmcmVxdWVuY3kgaW5jcmVhc2VzIHRoZSBpbnRlcmFjdGlvbiBldmVudHMgd2lsbCBiZSBjaGVja2VkIG1vcmUgb2Z0ZW4uXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMTBcbiAgICAgKi9cbiAgICB0aGlzLmludGVyYWN0aW9uRnJlcXVlbmN5ID0gb3B0aW9ucy5pbnRlcmFjdGlvbkZyZXF1ZW5jeSB8fCAxMDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBtb3VzZSBkYXRhXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLmludGVyYWN0aW9uLkludGVyYWN0aW9uRGF0YX1cbiAgICAgKi9cbiAgICB0aGlzLm1vdXNlID0gbmV3IEludGVyYWN0aW9uRGF0YSgpO1xuXG4gICAgLyoqXG4gICAgICogQW4gZXZlbnQgZGF0YSBvYmplY3QgdG8gaGFuZGxlIGFsbCB0aGUgZXZlbnQgdHJhY2tpbmcvZGlzcGF0Y2hpbmdcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge29iamVjdH1cbiAgICAgKi9cbiAgICB0aGlzLmV2ZW50RGF0YSA9IHtcbiAgICAgICAgc3RvcHBlZDogZmFsc2UsXG4gICAgICAgIHRhcmdldDogbnVsbCxcbiAgICAgICAgdHlwZTogbnVsbCxcbiAgICAgICAgZGF0YTogdGhpcy5tb3VzZSxcbiAgICAgICAgc3RvcFByb3BhZ2F0aW9uOmZ1bmN0aW9uKCl7XG4gICAgICAgICAgICB0aGlzLnN0b3BwZWQgPSB0cnVlO1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIC8qKlxuICAgICAqIFRpbnkgbGl0dGxlIGludGVyYWN0aXZlRGF0YSBwb29sICFcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuaW50ZXJhY3Rpb24uSW50ZXJhY3Rpb25EYXRhW119XG4gICAgICovXG4gICAgdGhpcy5pbnRlcmFjdGl2ZURhdGFQb29sID0gW107XG5cbiAgICAvKipcbiAgICAgKiBUaGUgRE9NIGVsZW1lbnQgdG8gYmluZCB0by5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge0hUTUxFbGVtZW50fVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5pbnRlcmFjdGlvbkRPTUVsZW1lbnQgPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogSGF2ZSBldmVudHMgYmVlbiBhdHRhY2hlZCB0byB0aGUgZG9tIGVsZW1lbnQ/XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5ldmVudHNBZGRlZCA9IGZhbHNlO1xuXG4gICAgLy90aGlzIHdpbGwgbWFrZSBpdCBzbyB0aGF0IHlvdSBkb24ndCBoYXZlIHRvIGNhbGwgYmluZCBhbGwgdGhlIHRpbWVcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge0Z1bmN0aW9ufVxuICAgICAqL1xuICAgIHRoaXMub25Nb3VzZVVwID0gdGhpcy5vbk1vdXNlVXAuYmluZCh0aGlzKTtcbiAgICB0aGlzLnByb2Nlc3NNb3VzZVVwID0gdGhpcy5wcm9jZXNzTW91c2VVcC5iaW5kKCB0aGlzICk7XG5cblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge0Z1bmN0aW9ufVxuICAgICAqL1xuICAgIHRoaXMub25Nb3VzZURvd24gPSB0aGlzLm9uTW91c2VEb3duLmJpbmQodGhpcyk7XG4gICAgdGhpcy5wcm9jZXNzTW91c2VEb3duID0gdGhpcy5wcm9jZXNzTW91c2VEb3duLmJpbmQoIHRoaXMgKTtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge0Z1bmN0aW9ufVxuICAgICAqL1xuICAgIHRoaXMub25Nb3VzZU1vdmUgPSB0aGlzLm9uTW91c2VNb3ZlLmJpbmQoIHRoaXMgKTtcbiAgICB0aGlzLnByb2Nlc3NNb3VzZU1vdmUgPSB0aGlzLnByb2Nlc3NNb3VzZU1vdmUuYmluZCggdGhpcyApO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7RnVuY3Rpb259XG4gICAgICovXG4gICAgdGhpcy5vbk1vdXNlT3V0ID0gdGhpcy5vbk1vdXNlT3V0LmJpbmQodGhpcyk7XG4gICAgdGhpcy5wcm9jZXNzTW91c2VPdmVyT3V0ID0gdGhpcy5wcm9jZXNzTW91c2VPdmVyT3V0LmJpbmQoIHRoaXMgKTtcblxuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7RnVuY3Rpb259XG4gICAgICovXG4gICAgdGhpcy5vblRvdWNoU3RhcnQgPSB0aGlzLm9uVG91Y2hTdGFydC5iaW5kKHRoaXMpO1xuICAgIHRoaXMucHJvY2Vzc1RvdWNoU3RhcnQgPSB0aGlzLnByb2Nlc3NUb3VjaFN0YXJ0LmJpbmQodGhpcyk7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtGdW5jdGlvbn1cbiAgICAgKi9cbiAgICB0aGlzLm9uVG91Y2hFbmQgPSB0aGlzLm9uVG91Y2hFbmQuYmluZCh0aGlzKTtcbiAgICB0aGlzLnByb2Nlc3NUb3VjaEVuZCA9IHRoaXMucHJvY2Vzc1RvdWNoRW5kLmJpbmQodGhpcyk7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtGdW5jdGlvbn1cbiAgICAgKi9cbiAgICB0aGlzLm9uVG91Y2hNb3ZlID0gdGhpcy5vblRvdWNoTW92ZS5iaW5kKHRoaXMpO1xuICAgIHRoaXMucHJvY2Vzc1RvdWNoTW92ZSA9IHRoaXMucHJvY2Vzc1RvdWNoTW92ZS5iaW5kKHRoaXMpO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMubGFzdCA9IDA7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgY3NzIHN0eWxlIG9mIHRoZSBjdXJzb3IgdGhhdCBpcyBiZWluZyB1c2VkXG4gICAgICogQG1lbWJlciB7c3RyaW5nfVxuICAgICAqL1xuICAgIHRoaXMuY3VycmVudEN1cnNvclN0eWxlID0gJ2luaGVyaXQnO1xuXG4gICAgLyoqXG4gICAgICogSW50ZXJuYWwgY2FjaGVkIHZhclxuICAgICAqIEBtZW1iZXIge1BJWEkuUG9pbnR9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl90ZW1wUG9pbnQgPSBuZXcgY29yZS5Qb2ludCgpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGN1cnJlbnQgcmVzb2x1dGlvblxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLnJlc29sdXRpb24gPSAxO1xuXG4gICAgdGhpcy5zZXRUYXJnZXRFbGVtZW50KHRoaXMucmVuZGVyZXIudmlldywgdGhpcy5yZW5kZXJlci5yZXNvbHV0aW9uKTtcbn1cblxuSW50ZXJhY3Rpb25NYW5hZ2VyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IEludGVyYWN0aW9uTWFuYWdlcjtcbm1vZHVsZS5leHBvcnRzID0gSW50ZXJhY3Rpb25NYW5hZ2VyO1xuXG4vKipcbiAqIFNldHMgdGhlIERPTSBlbGVtZW50IHdoaWNoIHdpbGwgcmVjZWl2ZSBtb3VzZS90b3VjaCBldmVudHMuIFRoaXMgaXMgdXNlZnVsIGZvciB3aGVuIHlvdSBoYXZlXG4gKiBvdGhlciBET00gZWxlbWVudHMgb24gdG9wIG9mIHRoZSByZW5kZXJlcnMgQ2FudmFzIGVsZW1lbnQuIFdpdGggdGhpcyB5b3UnbGwgYmUgYmFsZSB0byBkZWxldGVnYXRlXG4gKiBhbm90aGVyIERPTSBlbGVtZW50IHRvIHJlY2VpdmUgdGhvc2UgZXZlbnRzLlxuICpcbiAqIEBwYXJhbSBlbGVtZW50IHtIVE1MRWxlbWVudH0gdGhlIERPTSBlbGVtZW50IHdoaWNoIHdpbGwgcmVjZWl2ZSBtb3VzZSBhbmQgdG91Y2ggZXZlbnRzLlxuICogQHBhcmFtIFtyZXNvbHV0aW9uPTFdIHtudW1iZXJ9IFRIZSByZXNvbHV0aW9uIG9mIHRoZSBuZXcgZWxlbWVudCAocmVsYXRpdmUgdG8gdGhlIGNhbnZhcykuXG4gKiBAcHJpdmF0ZVxuICovXG5JbnRlcmFjdGlvbk1hbmFnZXIucHJvdG90eXBlLnNldFRhcmdldEVsZW1lbnQgPSBmdW5jdGlvbiAoZWxlbWVudCwgcmVzb2x1dGlvbilcbntcbiAgICB0aGlzLnJlbW92ZUV2ZW50cygpO1xuXG4gICAgdGhpcy5pbnRlcmFjdGlvbkRPTUVsZW1lbnQgPSBlbGVtZW50O1xuXG4gICAgdGhpcy5yZXNvbHV0aW9uID0gcmVzb2x1dGlvbiB8fCAxO1xuXG4gICAgdGhpcy5hZGRFdmVudHMoKTtcbn07XG5cbi8qKlxuICogUmVnaXN0ZXJzIGFsbCB0aGUgRE9NIGV2ZW50c1xuICpcbiAqIEBwcml2YXRlXG4gKi9cbkludGVyYWN0aW9uTWFuYWdlci5wcm90b3R5cGUuYWRkRXZlbnRzID0gZnVuY3Rpb24gKClcbntcbiAgICBpZiAoIXRoaXMuaW50ZXJhY3Rpb25ET01FbGVtZW50KVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvcmUudGlja2VyLnNoYXJlZC5hZGQodGhpcy51cGRhdGUsIHRoaXMpO1xuXG4gICAgaWYgKHdpbmRvdy5uYXZpZ2F0b3IubXNQb2ludGVyRW5hYmxlZClcbiAgICB7XG4gICAgICAgIHRoaXMuaW50ZXJhY3Rpb25ET01FbGVtZW50LnN0eWxlWyctbXMtY29udGVudC16b29taW5nJ10gPSAnbm9uZSc7XG4gICAgICAgIHRoaXMuaW50ZXJhY3Rpb25ET01FbGVtZW50LnN0eWxlWyctbXMtdG91Y2gtYWN0aW9uJ10gPSAnbm9uZSc7XG4gICAgfVxuXG4gICAgd2luZG93LmRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlbW92ZScsICAgIHRoaXMub25Nb3VzZU1vdmUsIHRydWUpO1xuICAgIHRoaXMuaW50ZXJhY3Rpb25ET01FbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlZG93bicsICAgIHRoaXMub25Nb3VzZURvd24sIHRydWUpO1xuICAgIHRoaXMuaW50ZXJhY3Rpb25ET01FbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlb3V0JywgICAgIHRoaXMub25Nb3VzZU91dCwgdHJ1ZSk7XG5cbiAgICB0aGlzLmludGVyYWN0aW9uRE9NRWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCd0b3VjaHN0YXJ0JywgICB0aGlzLm9uVG91Y2hTdGFydCwgdHJ1ZSk7XG4gICAgdGhpcy5pbnRlcmFjdGlvbkRPTUVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigndG91Y2hlbmQnLCAgICAgdGhpcy5vblRvdWNoRW5kLCB0cnVlKTtcbiAgICB0aGlzLmludGVyYWN0aW9uRE9NRWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCd0b3VjaG1vdmUnLCAgICB0aGlzLm9uVG91Y2hNb3ZlLCB0cnVlKTtcblxuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdtb3VzZXVwJywgIHRoaXMub25Nb3VzZVVwLCB0cnVlKTtcblxuICAgIHRoaXMuZXZlbnRzQWRkZWQgPSB0cnVlO1xufTtcblxuLyoqXG4gKiBSZW1vdmVzIGFsbCB0aGUgRE9NIGV2ZW50cyB0aGF0IHdlcmUgcHJldmlvdXNseSByZWdpc3RlcmVkXG4gKlxuICogQHByaXZhdGVcbiAqL1xuSW50ZXJhY3Rpb25NYW5hZ2VyLnByb3RvdHlwZS5yZW1vdmVFdmVudHMgPSBmdW5jdGlvbiAoKVxue1xuICAgIGlmICghdGhpcy5pbnRlcmFjdGlvbkRPTUVsZW1lbnQpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29yZS50aWNrZXIuc2hhcmVkLnJlbW92ZSh0aGlzLnVwZGF0ZSk7XG5cbiAgICBpZiAod2luZG93Lm5hdmlnYXRvci5tc1BvaW50ZXJFbmFibGVkKVxuICAgIHtcbiAgICAgICAgdGhpcy5pbnRlcmFjdGlvbkRPTUVsZW1lbnQuc3R5bGVbJy1tcy1jb250ZW50LXpvb21pbmcnXSA9ICcnO1xuICAgICAgICB0aGlzLmludGVyYWN0aW9uRE9NRWxlbWVudC5zdHlsZVsnLW1zLXRvdWNoLWFjdGlvbiddID0gJyc7XG4gICAgfVxuXG4gICAgd2luZG93LmRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21vdXNlbW92ZScsIHRoaXMub25Nb3VzZU1vdmUsIHRydWUpO1xuICAgIHRoaXMuaW50ZXJhY3Rpb25ET01FbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21vdXNlZG93bicsIHRoaXMub25Nb3VzZURvd24sIHRydWUpO1xuICAgIHRoaXMuaW50ZXJhY3Rpb25ET01FbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21vdXNlb3V0JywgIHRoaXMub25Nb3VzZU91dCwgdHJ1ZSk7XG5cbiAgICB0aGlzLmludGVyYWN0aW9uRE9NRWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCd0b3VjaHN0YXJ0JywgdGhpcy5vblRvdWNoU3RhcnQsIHRydWUpO1xuICAgIHRoaXMuaW50ZXJhY3Rpb25ET01FbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3RvdWNoZW5kJywgIHRoaXMub25Ub3VjaEVuZCwgdHJ1ZSk7XG4gICAgdGhpcy5pbnRlcmFjdGlvbkRPTUVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigndG91Y2htb3ZlJywgdGhpcy5vblRvdWNoTW92ZSwgdHJ1ZSk7XG5cbiAgICB0aGlzLmludGVyYWN0aW9uRE9NRWxlbWVudCA9IG51bGw7XG5cbiAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcignbW91c2V1cCcsICB0aGlzLm9uTW91c2VVcCwgdHJ1ZSk7XG5cbiAgICB0aGlzLmV2ZW50c0FkZGVkID0gZmFsc2U7XG59O1xuXG4vKipcbiAqIFVwZGF0ZXMgdGhlIHN0YXRlIG9mIGludGVyYWN0aXZlIG9iamVjdHMuXG4gKiBJbnZva2VkIGJ5IGEgdGhyb3R0bGVkIHRpY2tlciB1cGRhdGUgZnJvbVxuICoge0BsaW5rIFBJWEkudGlja2VyLnNoYXJlZH0uXG4gKlxuICogQHBhcmFtIGRlbHRhVGltZSB7bnVtYmVyfVxuICovXG5JbnRlcmFjdGlvbk1hbmFnZXIucHJvdG90eXBlLnVwZGF0ZSA9IGZ1bmN0aW9uIChkZWx0YVRpbWUpXG57XG4gICAgdGhpcy5fZGVsdGFUaW1lICs9IGRlbHRhVGltZTtcblxuICAgIGlmICh0aGlzLl9kZWx0YVRpbWUgPCB0aGlzLmludGVyYWN0aW9uRnJlcXVlbmN5KVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuX2RlbHRhVGltZSA9IDA7XG5cbiAgICBpZiAoIXRoaXMuaW50ZXJhY3Rpb25ET01FbGVtZW50KVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIGlmIHRoZSB1c2VyIG1vdmUgdGhlIG1vdXNlIHRoaXMgY2hlY2sgaGFzIGFscmVhZHkgYmVlbiBkZm9uZSB1c2luZyB0aGUgbW91c2UgbW92ZSFcbiAgICBpZih0aGlzLmRpZE1vdmUpXG4gICAge1xuICAgICAgICB0aGlzLmRpZE1vdmUgPSBmYWxzZTtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuY3Vyc29yID0gJ2luaGVyaXQnO1xuXG4gICAgdGhpcy5wcm9jZXNzSW50ZXJhY3RpdmUodGhpcy5tb3VzZS5nbG9iYWwsIHRoaXMucmVuZGVyZXIuX2xhc3RPYmplY3RSZW5kZXJlZCwgdGhpcy5wcm9jZXNzTW91c2VPdmVyT3V0LCB0cnVlICk7XG5cbiAgICBpZiAodGhpcy5jdXJyZW50Q3Vyc29yU3R5bGUgIT09IHRoaXMuY3Vyc29yKVxuICAgIHtcbiAgICAgICAgdGhpcy5jdXJyZW50Q3Vyc29yU3R5bGUgPSB0aGlzLmN1cnNvcjtcbiAgICAgICAgdGhpcy5pbnRlcmFjdGlvbkRPTUVsZW1lbnQuc3R5bGUuY3Vyc29yID0gdGhpcy5jdXJzb3I7XG4gICAgfVxuXG4gICAgLy9UT0RPXG59O1xuXG4vKipcbiAqIERpc3BhdGNoZXMgYW4gZXZlbnQgb24gdGhlIGRpc3BsYXkgb2JqZWN0IHRoYXQgd2FzIGludGVyYWN0ZWQgd2l0aFxuICpcbiAqIEBwYXJhbSBkaXNwbGF5T2JqZWN0IHtQSVhJLkNvbnRhaW5lcnxQSVhJLlNwcml0ZXxQSVhJLmV4dHJhcy5UaWxpbmdTcHJpdGV9IHRoZSBkaXNwbGF5IG9iamVjdCBpbiBxdWVzdGlvblxuICogQHBhcmFtIGV2ZW50U3RyaW5nIHtzdHJpbmd9IHRoZSBuYW1lIG9mIHRoZSBldmVudCAoZS5nLCBtb3VzZWRvd24pXG4gKiBAcGFyYW0gZXZlbnREYXRhIHtvYmplY3R9IHRoZSBldmVudCBkYXRhIG9iamVjdFxuICogQHByaXZhdGVcbiAqL1xuSW50ZXJhY3Rpb25NYW5hZ2VyLnByb3RvdHlwZS5kaXNwYXRjaEV2ZW50ID0gZnVuY3Rpb24gKCBkaXNwbGF5T2JqZWN0LCBldmVudFN0cmluZywgZXZlbnREYXRhIClcbntcbiAgICBpZighZXZlbnREYXRhLnN0b3BwZWQpXG4gICAge1xuICAgICAgICBldmVudERhdGEudGFyZ2V0ID0gZGlzcGxheU9iamVjdDtcbiAgICAgICAgZXZlbnREYXRhLnR5cGUgPSBldmVudFN0cmluZztcblxuICAgICAgICBkaXNwbGF5T2JqZWN0LmVtaXQoIGV2ZW50U3RyaW5nLCBldmVudERhdGEgKTtcblxuICAgICAgICBpZiggZGlzcGxheU9iamVjdFtldmVudFN0cmluZ10gKVxuICAgICAgICB7XG4gICAgICAgICAgICBkaXNwbGF5T2JqZWN0W2V2ZW50U3RyaW5nXSggZXZlbnREYXRhICk7XG4gICAgICAgIH1cbiAgICB9XG59O1xuXG4vKipcbiAqIE1hcHMgeCBhbmQgeSBjb29yZHMgZnJvbSBhIERPTSBvYmplY3QgYW5kIG1hcHMgdGhlbSBjb3JyZWN0bHkgdG8gdGhlIHBpeGkgdmlldy4gVGhlIHJlc3VsdGluZyB2YWx1ZSBpcyBzdG9yZWQgaW4gdGhlIHBvaW50LlxuICogVGhpcyB0YWtlcyBpbnRvIGFjY291bnQgdGhlIGZhY3QgdGhhdCB0aGUgRE9NIGVsZW1lbnQgY291bGQgYmUgc2NhbGVkIGFuZCBwb3NpdGlvbmVkIGFueXdoZXJlIG9uIHRoZSBzY3JlZW4uXG4gKlxuICogQHBhcmFtICB7UElYSS5Qb2ludH0gcG9pbnQgdGhlIHBvaW50IHRoYXQgdGhlIHJlc3VsdCB3aWxsIGJlIHN0b3JlZCBpblxuICogQHBhcmFtICB7bnVtYmVyfSB4ICAgICB0aGUgeCBjb29yZCBvZiB0aGUgcG9zaXRpb24gdG8gbWFwXG4gKiBAcGFyYW0gIHtudW1iZXJ9IHkgICAgIHRoZSB5IGNvb3JkIG9mIHRoZSBwb3NpdGlvbiB0byBtYXBcbiAqL1xuSW50ZXJhY3Rpb25NYW5hZ2VyLnByb3RvdHlwZS5tYXBQb3NpdGlvblRvUG9pbnQgPSBmdW5jdGlvbiAoIHBvaW50LCB4LCB5IClcbntcbiAgICB2YXIgcmVjdCA9IHRoaXMuaW50ZXJhY3Rpb25ET01FbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgIHBvaW50LnggPSAoICggeCAtIHJlY3QubGVmdCApICogKHRoaXMuaW50ZXJhY3Rpb25ET01FbGVtZW50LndpZHRoICAvIHJlY3Qud2lkdGggICkgKSAvIHRoaXMucmVzb2x1dGlvbjtcbiAgICBwb2ludC55ID0gKCAoIHkgLSByZWN0LnRvcCAgKSAqICh0aGlzLmludGVyYWN0aW9uRE9NRWxlbWVudC5oZWlnaHQgLyByZWN0LmhlaWdodCApICkgLyB0aGlzLnJlc29sdXRpb247XG59O1xuXG4vKipcbiAqIFRoaXMgZnVuY3Rpb24gaXMgcHJvdmlkZXMgYSBuZWF0IHdheSBvZiBjcmF3bGluZyB0aHJvdWdoIHRoZSBzY2VuZSBncmFwaCBhbmQgcnVubmluZyBhIHNwZWNpZmllZCBmdW5jdGlvbiBvbiBhbGwgaW50ZXJhY3RpdmUgb2JqZWN0cyBpdCBmaW5kcy5cbiAqIEl0IHdpbGwgYWxzbyB0YWtlIGNhcmUgb2YgaGl0IHRlc3RpbmcgdGhlIGludGVyYWN0aXZlIG9iamVjdHMgYW5kIHBhc3NlcyB0aGUgaGl0IGFjcm9zcyBpbiB0aGUgZnVuY3Rpb24uXG4gKlxuICogQHBhcmFtICB7UElYSS5Qb2ludH0gcG9pbnQgdGhlIHBvaW50IHRoYXQgaXMgdGVzdGVkIGZvciBjb2xsaXNpb25cbiAqIEBwYXJhbSAge1BJWEkuQ29udGFpbmVyfFBJWEkuU3ByaXRlfFBJWEkuZXh0cmFzLlRpbGluZ1Nwcml0ZX0gZGlzcGxheU9iamVjdCB0aGUgZGlzcGxheU9iamVjdCB0aGF0IHdpbGwgYmUgaGl0IHRlc3QgKHJlY3VyY3Npdmx5IGNyYXdscyBpdHMgY2hpbGRyZW4pXG4gKiBAcGFyYW0gIHtGdW5jdGlvbn0gZnVuYyB0aGUgZnVuY3Rpb24gdGhhdCB3aWxsIGJlIGNhbGxlZCBvbiBlYWNoIGludGVyYWN0aXZlIG9iamVjdC4gVGhlIGRpc3BsYXlPYmplY3QgYW5kIGhpdCB3aWxsIGJlIHBhc3NlZCB0byB0aGUgZnVuY3Rpb25cbiAqIEBwYXJhbSAge2Jvb2xlYW59IGhpdFRlc3QgdGhpcyBpbmRpY2F0ZXMgaWYgdGhlIG9iamVjdHMgaW5zaWRlIHNob3VsZCBiZSBoaXQgdGVzdCBhZ2FpbnN0IHRoZSBwb2ludFxuICogQHJldHVybiB7Ym9vbGVhbn0gcmV0dXJucyB0cnVlIGlmIHRoZSBkaXNwbGF5T2JqZWN0IGhpdCB0aGUgcG9pbnRcbiAqL1xuSW50ZXJhY3Rpb25NYW5hZ2VyLnByb3RvdHlwZS5wcm9jZXNzSW50ZXJhY3RpdmUgPSBmdW5jdGlvbiAocG9pbnQsIGRpc3BsYXlPYmplY3QsIGZ1bmMsIGhpdFRlc3QsIGludGVyYWN0aXZlKVxue1xuICAgIGlmKCFkaXNwbGF5T2JqZWN0IHx8ICFkaXNwbGF5T2JqZWN0LnZpc2libGUpXG4gICAge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgLy8gVG9vayBhIGxpdHRsZSB3aGlsZSB0byByZXdvcmsgdGhpcyBmdW5jdGlvbiBjb3JyZWN0bHkhIEJ1dCBub3cgaXQgaXMgZG9uZSBhbmQgbmljZSBhbmQgb3B0aW1pc2VkLiBeX15cbiAgICAvLyBcbiAgICAvLyBUaGlzIGZ1bmN0aW9uIHdpbGwgbm93IGxvb3AgdGhyb3VnaCBhbGwgb2JqZWN0cyBhbmQgdGhlbiBvbmx5IGhpdCB0ZXN0IHRoZSBvYmplY3RzIGl0IEhBUyB0bywgbm90IGFsbCBvZiB0aGVtLiBNVUNIIGZhc3Rlci4uXG4gICAgLy8gQW4gb2JqZWN0IHdpbGwgYmUgaGl0IHRlc3QgaWYgdGhlIGZvbGxvd2luZyBpcyB0cnVlOlxuICAgIC8vIFxuICAgIC8vIDE6IEl0IGlzIGludGVyYWN0aXZlLlxuICAgIC8vIDI6IEl0IGJlbG9uZ3MgdG8gYSBwYXJlbnQgdGhhdCBpcyBpbnRlcmFjdGl2ZSBBTkQgb25lIG9mIHRoZSBwYXJlbnRzIGNoaWxkcmVuIGhhdmUgbm90IGFscmVhZHkgYmVlbiBoaXQuXG4gICAgLy8gXG4gICAgLy8gQXMgYW5vdGhlciBsaXR0bGUgb3B0aW1pc2F0aW9uIG9uY2UgYW4gaW50ZXJhY3RpdmUgb2JqZWN0IGhhcyBiZWVuIGhpdCB3ZSBjYW4gY2Fycnkgb24gdGhyb3VnaCB0aGUgc2NlbmVncmFwaCwgYnV0IHdlIGtub3cgdGhhdCB0aGVyZSB3aWxsIGJlIG5vIG1vcmUgaGl0cyEgU28gd2UgY2FuIGF2b2lkIGV4dHJhIGhpdCB0ZXN0c1xuICAgIC8vIEEgZmluYWwgb3B0aW1pc2F0aW9uIGlzIHRoYXQgYW4gb2JqZWN0IGlzIG5vdCBoaXQgdGVzdCBkaXJlY3RseSBpZiBhIGNoaWxkIGhhcyBhbHJlYWR5IGJlZW4gaGl0LlxuICAgIFxuICAgIHZhciBoaXQgPSBmYWxzZSxcbiAgICAgICAgaW50ZXJhY3RpdmVQYXJlbnQgPSBpbnRlcmFjdGl2ZSA9IGRpc3BsYXlPYmplY3QuaW50ZXJhY3RpdmUgfHwgaW50ZXJhY3RpdmU7XG5cbiAgICAvLyBpZiB0aGUgZGlzcGxheW9iamVjdCBoYXMgYSBoaXRBcmVhLCB0aGVuIGl0IGRvZXMgbm90IG5lZWQgdG8gaGl0VGVzdCBjaGlsZHJlbi5cbiAgICBpZihkaXNwbGF5T2JqZWN0LmhpdEFyZWEpXG4gICAge1xuICAgICAgICBpbnRlcmFjdGl2ZVBhcmVudCA9IGZhbHNlO1xuICAgIH1cblxuICAgIC8vICoqIEZSRUUgVElQICoqISBJZiBhbiBvYmplY3QgaXMgbm90IGludGVyYWN0dGl2ZSBvciBoYXMgbm8gYnV0dG9ucyBpbiBpdCAoc3VjaCBhcyBhIGdhbWUgc2NlbmUhKSBzZXQgaW50ZXJhY3RpdmVDaGlsZHJlbiB0byBmYWxzZSBmb3IgdGhhdCBkaXNwbGF5T2JqZWN0LlxuICAgIC8vIFRoaXMgd2lsbCBhbGxvdyBwaXhpIHRvIGNvbXBsZXRseSBpZ25vcmUgYW5kIGJ5cGFzcyBjaGVja2luZyB0aGUgZGlzcGxheU9iamVjdHMgY2hpbGRyZW4uXG4gICAgaWYoZGlzcGxheU9iamVjdC5pbnRlcmFjdGl2ZUNoaWxkcmVuKVxuICAgIHsgICAgICAgXG4gICAgICAgIHZhciBjaGlsZHJlbiA9IGRpc3BsYXlPYmplY3QuY2hpbGRyZW47XG4gICAgICAgIFxuICAgICAgICBmb3IgKHZhciBpID0gY2hpbGRyZW4ubGVuZ3RoLTE7IGkgPj0gMDsgaS0tKVxuICAgICAgICB7XG4gICAgICAgICAgICAvLyB0aW1lIHRvIGdldCByZWN1cnNpdmUuLiBpZiB0aGlzIGZ1bmN0aW9uIHdpbGwgcmV0dXJuIGlmIHNvbXRoaW5nIGlzIGhpdC4uXG4gICAgICAgICAgICBpZiggdGhpcy5wcm9jZXNzSW50ZXJhY3RpdmUocG9pbnQsIGNoaWxkcmVuW2ldLCBmdW5jLCBoaXRUZXN0LCBpbnRlcmFjdGl2ZVBhcmVudCkgKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGhpdCA9IHRydWU7XG5cbiAgICAgICAgICAgICAgICAvLyB3ZSBubyBsb25nZXIgbmVlZCB0byBoaXQgdGVzdCBhbnkgbW9yZSBvYmplY3RzIGluIHRoaXMgY29udGFpbmVyIGFzIHdlIHdlIG5vdyBrbm93IHRoZSBwYXJlbnQgaGFzIGJlZW4gaGl0XG4gICAgICAgICAgICAgICAgaW50ZXJhY3RpdmVQYXJlbnQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAvLyBJZiB0aGUgY2hpbGQgaXMgaW50ZXJhY3RpdmUgLCB0aGF0IG1lYW5zIHRoYXQgdGhlIG9iamVjdCBoaXQgd2FzIGFjdHVhbGx5IGludGVyYWN0aXZlIGFuZCBub3QganVzdCB0aGUgY2hpbGQgb2YgYW4gaW50ZXJhY3RpdmUgb2JqZWN0LiBcbiAgICAgICAgICAgICAgICAvLyBUaGlzIG1lYW5zIHdlIG5vIGxvbmdlciBuZWVkIHRvIGhpdCB0ZXN0IGFueXRoaW5nIGVsc2UuIFdlIHN0aWxsIG5lZWQgdG8gcnVuIHRocm91Z2ggYWxsIG9iamVjdHMsIGJ1dCB3ZSBkb24ndCBuZWVkIHRvIHBlcmZvcm0gYW55IGhpdCB0ZXN0cy5cbiAgICAgICAgICAgICAgICBpZihjaGlsZHJlbltpXS5pbnRlcmFjdGl2ZSlcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIGhpdFRlc3QgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBubyBwb2ludCBydW5uaW5nIHRoaXMgaWYgdGhlIGl0ZW0gaXMgbm90IGludGVyYWN0aXZlIG9yIGRvZXMgbm90IGhhdmUgYW4gaW50ZXJhY3RpdmUgcGFyZW50LlxuICAgIGlmKGludGVyYWN0aXZlKVxuICAgIHtcbiAgICAgICAgLy8gaWYgd2UgYXJlIGhpdCB0ZXN0aW5nIChhcyBpbiB3ZSBoYXZlIG5vIGhpdCBhbnkgb2JqZWN0cyB5ZXQpXG4gICAgICAgIC8vIFdlIGFsc28gZG9uJ3QgbmVlZCB0byB3b3JyeSBhYm91dCBoaXQgdGVzdGluZyBpZiBvbmNlIG9mIHRoZSBkaXNwbGF5T2JqZWN0cyBjaGlsZHJlbiBoYXMgYWxyZWFkeSBiZWVuIGhpdCFcbiAgICAgICAgaWYoaGl0VGVzdCAmJiAhaGl0KVxuICAgICAgICB7ICBcbiAgICAgICAgICAgIGlmKGRpc3BsYXlPYmplY3QuaGl0QXJlYSlcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBkaXNwbGF5T2JqZWN0LndvcmxkVHJhbnNmb3JtLmFwcGx5SW52ZXJzZShwb2ludCwgIHRoaXMuX3RlbXBQb2ludCk7XG4gICAgICAgICAgICAgICAgaGl0ID0gZGlzcGxheU9iamVjdC5oaXRBcmVhLmNvbnRhaW5zKCB0aGlzLl90ZW1wUG9pbnQueCwgdGhpcy5fdGVtcFBvaW50LnkgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYoZGlzcGxheU9iamVjdC5jb250YWluc1BvaW50KVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGhpdCA9IGRpc3BsYXlPYmplY3QuY29udGFpbnNQb2ludChwb2ludCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZihkaXNwbGF5T2JqZWN0LmludGVyYWN0aXZlKVxuICAgICAgICB7XG4gICAgICAgICAgICBmdW5jKGRpc3BsYXlPYmplY3QsIGhpdCk7IFxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGhpdDtcbiAgXG59O1xuXG5cbi8qKlxuICogSXMgY2FsbGVkIHdoZW4gdGhlIG1vdXNlIGJ1dHRvbiBpcyBwcmVzc2VkIGRvd24gb24gdGhlIHJlbmRlcmVyIGVsZW1lbnRcbiAqXG4gKiBAcGFyYW0gZXZlbnQge0V2ZW50fSBUaGUgRE9NIGV2ZW50IG9mIGEgbW91c2UgYnV0dG9uIGJlaW5nIHByZXNzZWQgZG93blxuICogQHByaXZhdGVcbiAqL1xuSW50ZXJhY3Rpb25NYW5hZ2VyLnByb3RvdHlwZS5vbk1vdXNlRG93biA9IGZ1bmN0aW9uIChldmVudClcbntcbiAgICB0aGlzLm1vdXNlLm9yaWdpbmFsRXZlbnQgPSBldmVudDtcbiAgICB0aGlzLmV2ZW50RGF0YS5kYXRhID0gdGhpcy5tb3VzZTtcbiAgICB0aGlzLmV2ZW50RGF0YS5zdG9wcGVkID0gZmFsc2U7XG5cbiAgICAvLyBVcGRhdGUgaW50ZXJuYWwgbW91c2UgcmVmZXJlbmNlXG4gICAgdGhpcy5tYXBQb3NpdGlvblRvUG9pbnQoIHRoaXMubW91c2UuZ2xvYmFsLCBldmVudC5jbGllbnRYLCBldmVudC5jbGllbnRZKTtcblxuICAgIGlmICh0aGlzLmF1dG9QcmV2ZW50RGVmYXVsdClcbiAgICB7XG4gICAgICAgIHRoaXMubW91c2Uub3JpZ2luYWxFdmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIH1cblxuICAgIHRoaXMucHJvY2Vzc0ludGVyYWN0aXZlKHRoaXMubW91c2UuZ2xvYmFsLCB0aGlzLnJlbmRlcmVyLl9sYXN0T2JqZWN0UmVuZGVyZWQsIHRoaXMucHJvY2Vzc01vdXNlRG93biwgdHJ1ZSApO1xufTtcblxuLyoqXG4gKiBQcm9jZXNzZXMgdGhlIHJlc3VsdCBvZiB0aGUgbW91c2UgZG93biBjaGVjayBhbmQgZGlzcGF0Y2hlcyB0aGUgZXZlbnQgaWYgbmVlZCBiZVxuICpcbiAqIEBwYXJhbSBkaXNwbGF5T2JqZWN0IHtQSVhJLkNvbnRhaW5lcnxQSVhJLlNwcml0ZXxQSVhJLmV4dHJhcy5UaWxpbmdTcHJpdGV9IFRoZSBkaXNwbGF5IG9iamVjdCB0aGF0IHdhcyB0ZXN0ZWRcbiAqIEBwYXJhbSBoaXQge2Jvb2xlYW59IHRoZSByZXN1bHQgb2YgdGhlIGhpdCB0ZXN0IG9uIHRoZSBkaXNwYXkgb2JqZWN0XG4gKiBAcHJpdmF0ZVxuICovXG5JbnRlcmFjdGlvbk1hbmFnZXIucHJvdG90eXBlLnByb2Nlc3NNb3VzZURvd24gPSBmdW5jdGlvbiAoIGRpc3BsYXlPYmplY3QsIGhpdCApXG57XG4gICAgdmFyIGUgPSB0aGlzLm1vdXNlLm9yaWdpbmFsRXZlbnQ7XG4gICAgXG4gICAgdmFyIGlzUmlnaHRCdXR0b24gPSBlLmJ1dHRvbiA9PT0gMiB8fCBlLndoaWNoID09PSAzO1xuXG4gICAgaWYoaGl0KVxuICAgIHtcbiAgICAgICAgZGlzcGxheU9iamVjdFsgaXNSaWdodEJ1dHRvbiA/ICdfaXNSaWdodERvd24nIDogJ19pc0xlZnREb3duJyBdID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50KCBkaXNwbGF5T2JqZWN0LCBpc1JpZ2h0QnV0dG9uID8gJ3JpZ2h0ZG93bicgOiAnbW91c2Vkb3duJywgdGhpcy5ldmVudERhdGEgKTtcbiAgICB9XG59O1xuXG5cblxuLyoqXG4gKiBJcyBjYWxsZWQgd2hlbiB0aGUgbW91c2UgYnV0dG9uIGlzIHJlbGVhc2VkIG9uIHRoZSByZW5kZXJlciBlbGVtZW50XG4gKlxuICogQHBhcmFtIGV2ZW50IHtFdmVudH0gVGhlIERPTSBldmVudCBvZiBhIG1vdXNlIGJ1dHRvbiBiZWluZyByZWxlYXNlZFxuICogQHByaXZhdGVcbiAqL1xuSW50ZXJhY3Rpb25NYW5hZ2VyLnByb3RvdHlwZS5vbk1vdXNlVXAgPSBmdW5jdGlvbiAoZXZlbnQpXG57XG4gICAgdGhpcy5tb3VzZS5vcmlnaW5hbEV2ZW50ID0gZXZlbnQ7XG4gICAgdGhpcy5ldmVudERhdGEuZGF0YSA9IHRoaXMubW91c2U7XG4gICAgdGhpcy5ldmVudERhdGEuc3RvcHBlZCA9IGZhbHNlO1xuXG4gICAgLy8gVXBkYXRlIGludGVybmFsIG1vdXNlIHJlZmVyZW5jZVxuICAgIHRoaXMubWFwUG9zaXRpb25Ub1BvaW50KCB0aGlzLm1vdXNlLmdsb2JhbCwgZXZlbnQuY2xpZW50WCwgZXZlbnQuY2xpZW50WSk7XG5cbiAgICB0aGlzLnByb2Nlc3NJbnRlcmFjdGl2ZSh0aGlzLm1vdXNlLmdsb2JhbCwgdGhpcy5yZW5kZXJlci5fbGFzdE9iamVjdFJlbmRlcmVkLCB0aGlzLnByb2Nlc3NNb3VzZVVwLCB0cnVlICk7XG59O1xuXG4vKipcbiAqIFByb2Nlc3NlcyB0aGUgcmVzdWx0IG9mIHRoZSBtb3VzZSB1cCBjaGVjayBhbmQgZGlzcGF0Y2hlcyB0aGUgZXZlbnQgaWYgbmVlZCBiZVxuICpcbiAqIEBwYXJhbSBkaXNwbGF5T2JqZWN0IHtQSVhJLkNvbnRhaW5lcnxQSVhJLlNwcml0ZXxQSVhJLmV4dHJhcy5UaWxpbmdTcHJpdGV9IFRoZSBkaXNwbGF5IG9iamVjdCB0aGF0IHdhcyB0ZXN0ZWRcbiAqIEBwYXJhbSBoaXQge2Jvb2xlYW59IHRoZSByZXN1bHQgb2YgdGhlIGhpdCB0ZXN0IG9uIHRoZSBkaXNwbGF5IG9iamVjdFxuICogQHByaXZhdGVcbiAqL1xuSW50ZXJhY3Rpb25NYW5hZ2VyLnByb3RvdHlwZS5wcm9jZXNzTW91c2VVcCA9IGZ1bmN0aW9uICggZGlzcGxheU9iamVjdCwgaGl0IClcbntcbiAgICB2YXIgZSA9IHRoaXMubW91c2Uub3JpZ2luYWxFdmVudDtcblxuICAgIHZhciBpc1JpZ2h0QnV0dG9uID0gZS5idXR0b24gPT09IDIgfHwgZS53aGljaCA9PT0gMztcbiAgICB2YXIgaXNEb3duID0gIGlzUmlnaHRCdXR0b24gPyAnX2lzUmlnaHREb3duJyA6ICdfaXNMZWZ0RG93bic7XG5cbiAgICBpZihoaXQpXG4gICAge1xuICAgICAgICB0aGlzLmRpc3BhdGNoRXZlbnQoIGRpc3BsYXlPYmplY3QsIGlzUmlnaHRCdXR0b24gPyAncmlnaHR1cCcgOiAnbW91c2V1cCcsIHRoaXMuZXZlbnREYXRhICk7XG5cbiAgICAgICAgaWYoIGRpc3BsYXlPYmplY3RbIGlzRG93biBdIClcbiAgICAgICAge1xuICAgICAgICAgICAgZGlzcGxheU9iamVjdFsgaXNEb3duIF0gPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudCggZGlzcGxheU9iamVjdCwgaXNSaWdodEJ1dHRvbiA/ICdyaWdodGNsaWNrJyA6ICdjbGljaycsIHRoaXMuZXZlbnREYXRhICk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgaWYoIGRpc3BsYXlPYmplY3RbIGlzRG93biBdIClcbiAgICAgICAge1xuICAgICAgICAgICAgZGlzcGxheU9iamVjdFsgaXNEb3duIF0gPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudCggZGlzcGxheU9iamVjdCwgaXNSaWdodEJ1dHRvbiA/ICdyaWdodHVwb3V0c2lkZScgOiAnbW91c2V1cG91dHNpZGUnLCB0aGlzLmV2ZW50RGF0YSApO1xuICAgICAgICB9XG4gICAgfVxufTtcblxuXG4vKipcbiAqIElzIGNhbGxlZCB3aGVuIHRoZSBtb3VzZSBtb3ZlcyBhY3Jvc3MgdGhlIHJlbmRlcmVyIGVsZW1lbnRcbiAqXG4gKiBAcGFyYW0gZXZlbnQge0V2ZW50fSBUaGUgRE9NIGV2ZW50IG9mIHRoZSBtb3VzZSBtb3ZpbmdcbiAqIEBwcml2YXRlXG4gKi9cbkludGVyYWN0aW9uTWFuYWdlci5wcm90b3R5cGUub25Nb3VzZU1vdmUgPSBmdW5jdGlvbiAoZXZlbnQpXG57XG4gICAgdGhpcy5tb3VzZS5vcmlnaW5hbEV2ZW50ID0gZXZlbnQ7XG4gICAgdGhpcy5ldmVudERhdGEuZGF0YSA9IHRoaXMubW91c2U7XG4gICAgdGhpcy5ldmVudERhdGEuc3RvcHBlZCA9IGZhbHNlO1xuXG4gICAgdGhpcy5tYXBQb3NpdGlvblRvUG9pbnQoIHRoaXMubW91c2UuZ2xvYmFsLCBldmVudC5jbGllbnRYLCBldmVudC5jbGllbnRZKTtcblxuICAgIHRoaXMuZGlkTW92ZSA9IHRydWU7XG5cbiAgICB0aGlzLmN1cnNvciA9ICdpbmhlcml0JztcblxuICAgIHRoaXMucHJvY2Vzc0ludGVyYWN0aXZlKHRoaXMubW91c2UuZ2xvYmFsLCB0aGlzLnJlbmRlcmVyLl9sYXN0T2JqZWN0UmVuZGVyZWQsIHRoaXMucHJvY2Vzc01vdXNlTW92ZSwgdHJ1ZSApO1xuXG4gICAgaWYgKHRoaXMuY3VycmVudEN1cnNvclN0eWxlICE9PSB0aGlzLmN1cnNvcilcbiAgICB7XG4gICAgICAgIHRoaXMuY3VycmVudEN1cnNvclN0eWxlID0gdGhpcy5jdXJzb3I7XG4gICAgICAgIHRoaXMuaW50ZXJhY3Rpb25ET01FbGVtZW50LnN0eWxlLmN1cnNvciA9IHRoaXMuY3Vyc29yO1xuICAgIH1cblxuICAgIC8vVE9ETyBCVUcgZm9yIHBhcmVudHMgaW5lcmFjdGl2ZSBvYmplY3QgKGJvcmRlciBvcmRlciBpc3N1ZSlcbn07XG5cbi8qKlxuICogUHJvY2Vzc2VzIHRoZSByZXN1bHQgb2YgdGhlIG1vdXNlIG1vdmUgY2hlY2sgYW5kIGRpc3BhdGNoZXMgdGhlIGV2ZW50IGlmIG5lZWQgYmVcbiAqXG4gKiBAcGFyYW0gZGlzcGxheU9iamVjdCB7UElYSS5Db250YWluZXJ8UElYSS5TcHJpdGV8UElYSS5leHRyYXMuVGlsaW5nU3ByaXRlfSBUaGUgZGlzcGxheSBvYmplY3QgdGhhdCB3YXMgdGVzdGVkXG4gKiBAcGFyYW0gaGl0IHtib29sZWFufSB0aGUgcmVzdWx0IG9mIHRoZSBoaXQgdGVzdCBvbiB0aGUgZGlzcGxheSBvYmplY3RcbiAqIEBwcml2YXRlXG4gKi9cbkludGVyYWN0aW9uTWFuYWdlci5wcm90b3R5cGUucHJvY2Vzc01vdXNlTW92ZSA9IGZ1bmN0aW9uICggZGlzcGxheU9iamVjdCwgaGl0IClcbntcbiAgICB0aGlzLmRpc3BhdGNoRXZlbnQoIGRpc3BsYXlPYmplY3QsICdtb3VzZW1vdmUnLCB0aGlzLmV2ZW50RGF0YSk7XG4gICAgdGhpcy5wcm9jZXNzTW91c2VPdmVyT3V0KGRpc3BsYXlPYmplY3QsIGhpdCk7XG59O1xuXG5cbi8qKlxuICogSXMgY2FsbGVkIHdoZW4gdGhlIG1vdXNlIGlzIG1vdmVkIG91dCBvZiB0aGUgcmVuZGVyZXIgZWxlbWVudFxuICpcbiAqIEBwYXJhbSBldmVudCB7RXZlbnR9IFRoZSBET00gZXZlbnQgb2YgYSBtb3VzZSBiZWluZyBtb3ZlZCBvdXRcbiAqIEBwcml2YXRlXG4gKi9cbkludGVyYWN0aW9uTWFuYWdlci5wcm90b3R5cGUub25Nb3VzZU91dCA9IGZ1bmN0aW9uIChldmVudClcbntcbiAgICB0aGlzLm1vdXNlLm9yaWdpbmFsRXZlbnQgPSBldmVudDtcbiAgICB0aGlzLmV2ZW50RGF0YS5zdG9wcGVkID0gZmFsc2U7XG5cbiAgICAvLyBVcGRhdGUgaW50ZXJuYWwgbW91c2UgcmVmZXJlbmNlXG4gICAgdGhpcy5tYXBQb3NpdGlvblRvUG9pbnQoIHRoaXMubW91c2UuZ2xvYmFsLCBldmVudC5jbGllbnRYLCBldmVudC5jbGllbnRZKTtcblxuICAgIHRoaXMuaW50ZXJhY3Rpb25ET01FbGVtZW50LnN0eWxlLmN1cnNvciA9ICdpbmhlcml0JztcblxuICAgIC8vIFRPRE8gb3B0aW1pemUgYnkgbm90IGNoZWNrIEVWRVJZIFRJTUUhIG1heWJlIGhhbGYgYXMgb2Z0ZW4/IC8vXG4gICAgdGhpcy5tYXBQb3NpdGlvblRvUG9pbnQoIHRoaXMubW91c2UuZ2xvYmFsLCBldmVudC5jbGllbnRYLCBldmVudC5jbGllbnRZICk7XG5cbiAgICB0aGlzLnByb2Nlc3NJbnRlcmFjdGl2ZSggdGhpcy5tb3VzZS5nbG9iYWwsIHRoaXMucmVuZGVyZXIuX2xhc3RPYmplY3RSZW5kZXJlZCwgdGhpcy5wcm9jZXNzTW91c2VPdmVyT3V0LCBmYWxzZSApO1xufTtcblxuLyoqXG4gKiBQcm9jZXNzZXMgdGhlIHJlc3VsdCBvZiB0aGUgbW91c2Ugb3Zlci9vdXQgY2hlY2sgYW5kIGRpc3BhdGNoZXMgdGhlIGV2ZW50IGlmIG5lZWQgYmVcbiAqXG4gKiBAcGFyYW0gZGlzcGxheU9iamVjdCB7UElYSS5Db250YWluZXJ8UElYSS5TcHJpdGV8UElYSS5leHRyYXMuVGlsaW5nU3ByaXRlfSBUaGUgZGlzcGxheSBvYmplY3QgdGhhdCB3YXMgdGVzdGVkXG4gKiBAcGFyYW0gaGl0IHtib29sZWFufSB0aGUgcmVzdWx0IG9mIHRoZSBoaXQgdGVzdCBvbiB0aGUgZGlzcGxheSBvYmplY3RcbiAqIEBwcml2YXRlXG4gKi9cbkludGVyYWN0aW9uTWFuYWdlci5wcm90b3R5cGUucHJvY2Vzc01vdXNlT3Zlck91dCA9IGZ1bmN0aW9uICggZGlzcGxheU9iamVjdCwgaGl0IClcbntcbiAgICBpZihoaXQpXG4gICAge1xuICAgICAgICBpZighZGlzcGxheU9iamVjdC5fb3ZlcilcbiAgICAgICAge1xuICAgICAgICAgICAgZGlzcGxheU9iamVjdC5fb3ZlciA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLmRpc3BhdGNoRXZlbnQoIGRpc3BsYXlPYmplY3QsICdtb3VzZW92ZXInLCB0aGlzLmV2ZW50RGF0YSApO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGRpc3BsYXlPYmplY3QuYnV0dG9uTW9kZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5jdXJzb3IgPSBkaXNwbGF5T2JqZWN0LmRlZmF1bHRDdXJzb3I7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgaWYoZGlzcGxheU9iamVjdC5fb3ZlcilcbiAgICAgICAge1xuICAgICAgICAgICAgZGlzcGxheU9iamVjdC5fb3ZlciA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50KCBkaXNwbGF5T2JqZWN0LCAnbW91c2VvdXQnLCB0aGlzLmV2ZW50RGF0YSk7XG4gICAgICAgIH1cbiAgICB9XG59O1xuXG5cbi8qKlxuICogSXMgY2FsbGVkIHdoZW4gYSB0b3VjaCBpcyBzdGFydGVkIG9uIHRoZSByZW5kZXJlciBlbGVtZW50XG4gKlxuICogQHBhcmFtIGV2ZW50IHtFdmVudH0gVGhlIERPTSBldmVudCBvZiBhIHRvdWNoIHN0YXJ0aW5nIG9uIHRoZSByZW5kZXJlciB2aWV3XG4gKiBAcHJpdmF0ZVxuICovXG5JbnRlcmFjdGlvbk1hbmFnZXIucHJvdG90eXBlLm9uVG91Y2hTdGFydCA9IGZ1bmN0aW9uIChldmVudClcbntcbiAgICBpZiAodGhpcy5hdXRvUHJldmVudERlZmF1bHQpXG4gICAge1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIH1cblxuICAgIHZhciBjaGFuZ2VkVG91Y2hlcyA9IGV2ZW50LmNoYW5nZWRUb3VjaGVzO1xuICAgIHZhciBjTGVuZ3RoID0gY2hhbmdlZFRvdWNoZXMubGVuZ3RoO1xuXG4gICAgZm9yICh2YXIgaT0wOyBpIDwgY0xlbmd0aDsgaSsrKVxuICAgIHtcbiAgICAgICAgdmFyIHRvdWNoRXZlbnQgPSBjaGFuZ2VkVG91Y2hlc1tpXTtcbiAgICAgICAgLy9UT0RPIFBPT0xcbiAgICAgICAgdmFyIHRvdWNoRGF0YSA9IHRoaXMuZ2V0VG91Y2hEYXRhKCB0b3VjaEV2ZW50ICk7XG5cbiAgICAgICAgdG91Y2hEYXRhLm9yaWdpbmFsRXZlbnQgPSBldmVudDtcblxuICAgICAgICB0aGlzLmV2ZW50RGF0YS5kYXRhID0gdG91Y2hEYXRhO1xuICAgICAgICB0aGlzLmV2ZW50RGF0YS5zdG9wcGVkID0gZmFsc2U7XG5cbiAgICAgICAgdGhpcy5wcm9jZXNzSW50ZXJhY3RpdmUoIHRvdWNoRGF0YS5nbG9iYWwsIHRoaXMucmVuZGVyZXIuX2xhc3RPYmplY3RSZW5kZXJlZCwgdGhpcy5wcm9jZXNzVG91Y2hTdGFydCwgdHJ1ZSApO1xuXG4gICAgICAgIHRoaXMucmV0dXJuVG91Y2hEYXRhKCB0b3VjaERhdGEgKTtcbiAgICB9XG59O1xuXG4vKipcbiAqIFByb2Nlc3NlcyB0aGUgcmVzdWx0IG9mIGEgdG91Y2ggY2hlY2sgYW5kIGRpc3BhdGNoZXMgdGhlIGV2ZW50IGlmIG5lZWQgYmVcbiAqXG4gKiBAcGFyYW0gZGlzcGxheU9iamVjdCB7UElYSS5Db250YWluZXJ8UElYSS5TcHJpdGV8UElYSS5leHRyYXMuVGlsaW5nU3ByaXRlfSBUaGUgZGlzcGxheSBvYmplY3QgdGhhdCB3YXMgdGVzdGVkXG4gKiBAcGFyYW0gaGl0IHtib29sZWFufSB0aGUgcmVzdWx0IG9mIHRoZSBoaXQgdGVzdCBvbiB0aGUgZGlzcGxheSBvYmplY3RcbiAqIEBwcml2YXRlXG4gKi9cbkludGVyYWN0aW9uTWFuYWdlci5wcm90b3R5cGUucHJvY2Vzc1RvdWNoU3RhcnQgPSBmdW5jdGlvbiAoIGRpc3BsYXlPYmplY3QsIGhpdCApXG57XG4gICAgaWYoaGl0KVxuICAgIHtcbiAgICAgICAgZGlzcGxheU9iamVjdC5fdG91Y2hEb3duID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50KCBkaXNwbGF5T2JqZWN0LCAndG91Y2hzdGFydCcsIHRoaXMuZXZlbnREYXRhICk7XG4gICAgfVxufTtcblxuXG4vKipcbiAqIElzIGNhbGxlZCB3aGVuIGEgdG91Y2ggZW5kcyBvbiB0aGUgcmVuZGVyZXIgZWxlbWVudFxuICpcbiAqIEBwYXJhbSBldmVudCB7RXZlbnR9IFRoZSBET00gZXZlbnQgb2YgYSB0b3VjaCBlbmRpbmcgb24gdGhlIHJlbmRlcmVyIHZpZXdcbiAqL1xuSW50ZXJhY3Rpb25NYW5hZ2VyLnByb3RvdHlwZS5vblRvdWNoRW5kID0gZnVuY3Rpb24gKGV2ZW50KVxue1xuICAgIGlmICh0aGlzLmF1dG9QcmV2ZW50RGVmYXVsdClcbiAgICB7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgfVxuXG4gICAgdmFyIGNoYW5nZWRUb3VjaGVzID0gZXZlbnQuY2hhbmdlZFRvdWNoZXM7XG4gICAgdmFyIGNMZW5ndGggPSBjaGFuZ2VkVG91Y2hlcy5sZW5ndGg7XG5cbiAgICBmb3IgKHZhciBpPTA7IGkgPCBjTGVuZ3RoOyBpKyspXG4gICAge1xuICAgICAgICB2YXIgdG91Y2hFdmVudCA9IGNoYW5nZWRUb3VjaGVzW2ldO1xuXG4gICAgICAgIHZhciB0b3VjaERhdGEgPSB0aGlzLmdldFRvdWNoRGF0YSggdG91Y2hFdmVudCApO1xuXG4gICAgICAgIHRvdWNoRGF0YS5vcmlnaW5hbEV2ZW50ID0gZXZlbnQ7XG5cbiAgICAgICAgLy9UT0RPIHRoaXMgc2hvdWxkIGJlIHBhc3NlZCBhbG9uZy4uIG5vIHNldFxuICAgICAgICB0aGlzLmV2ZW50RGF0YS5kYXRhID0gdG91Y2hEYXRhO1xuICAgICAgICB0aGlzLmV2ZW50RGF0YS5zdG9wcGVkID0gZmFsc2U7XG5cblxuICAgICAgICB0aGlzLnByb2Nlc3NJbnRlcmFjdGl2ZSggdG91Y2hEYXRhLmdsb2JhbCwgdGhpcy5yZW5kZXJlci5fbGFzdE9iamVjdFJlbmRlcmVkLCB0aGlzLnByb2Nlc3NUb3VjaEVuZCwgdHJ1ZSApO1xuXG4gICAgICAgIHRoaXMucmV0dXJuVG91Y2hEYXRhKCB0b3VjaERhdGEgKTtcbiAgICB9XG59O1xuXG4vKipcbiAqIFByb2Nlc3NlcyB0aGUgcmVzdWx0IG9mIHRoZSBlbmQgb2YgYSB0b3VjaCBhbmQgZGlzcGF0Y2hlcyB0aGUgZXZlbnQgaWYgbmVlZCBiZVxuICpcbiAqIEBwYXJhbSBkaXNwbGF5T2JqZWN0IHtQSVhJLkNvbnRhaW5lcnxQSVhJLlNwcml0ZXxQSVhJLmV4dHJhcy5UaWxpbmdTcHJpdGV9IFRoZSBkaXNwbGF5IG9iamVjdCB0aGF0IHdhcyB0ZXN0ZWRcbiAqIEBwYXJhbSBoaXQge2Jvb2xlYW59IHRoZSByZXN1bHQgb2YgdGhlIGhpdCB0ZXN0IG9uIHRoZSBkaXNwbGF5IG9iamVjdFxuICogQHByaXZhdGVcbiAqL1xuSW50ZXJhY3Rpb25NYW5hZ2VyLnByb3RvdHlwZS5wcm9jZXNzVG91Y2hFbmQgPSBmdW5jdGlvbiAoIGRpc3BsYXlPYmplY3QsIGhpdCApXG57XG4gICAgaWYoaGl0KVxuICAgIHtcbiAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50KCBkaXNwbGF5T2JqZWN0LCAndG91Y2hlbmQnLCB0aGlzLmV2ZW50RGF0YSApO1xuXG4gICAgICAgIGlmKCBkaXNwbGF5T2JqZWN0Ll90b3VjaERvd24gKVxuICAgICAgICB7XG4gICAgICAgICAgICBkaXNwbGF5T2JqZWN0Ll90b3VjaERvd24gPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudCggZGlzcGxheU9iamVjdCwgJ3RhcCcsIHRoaXMuZXZlbnREYXRhICk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgaWYoIGRpc3BsYXlPYmplY3QuX3RvdWNoRG93biApXG4gICAgICAgIHtcbiAgICAgICAgICAgIGRpc3BsYXlPYmplY3QuX3RvdWNoRG93biA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50KCBkaXNwbGF5T2JqZWN0LCAndG91Y2hlbmRvdXRzaWRlJywgdGhpcy5ldmVudERhdGEgKTtcbiAgICAgICAgfVxuICAgIH1cbn07XG5cbi8qKlxuICogSXMgY2FsbGVkIHdoZW4gYSB0b3VjaCBpcyBtb3ZlZCBhY3Jvc3MgdGhlIHJlbmRlcmVyIGVsZW1lbnRcbiAqXG4gKiBAcGFyYW0gZXZlbnQge0V2ZW50fSBUaGUgRE9NIGV2ZW50IG9mIGEgdG91Y2ggbW92aW5nIGFjcm9zcyB0aGUgcmVuZGVyZXIgdmlld1xuICogQHByaXZhdGVcbiAqL1xuSW50ZXJhY3Rpb25NYW5hZ2VyLnByb3RvdHlwZS5vblRvdWNoTW92ZSA9IGZ1bmN0aW9uIChldmVudClcbntcbiAgICBpZiAodGhpcy5hdXRvUHJldmVudERlZmF1bHQpXG4gICAge1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIH1cblxuICAgIHZhciBjaGFuZ2VkVG91Y2hlcyA9IGV2ZW50LmNoYW5nZWRUb3VjaGVzO1xuICAgIHZhciBjTGVuZ3RoID0gY2hhbmdlZFRvdWNoZXMubGVuZ3RoO1xuXG4gICAgZm9yICh2YXIgaT0wOyBpIDwgY0xlbmd0aDsgaSsrKVxuICAgIHtcbiAgICAgICAgdmFyIHRvdWNoRXZlbnQgPSBjaGFuZ2VkVG91Y2hlc1tpXTtcblxuICAgICAgICB2YXIgdG91Y2hEYXRhID0gdGhpcy5nZXRUb3VjaERhdGEoIHRvdWNoRXZlbnQgKTtcblxuICAgICAgICB0b3VjaERhdGEub3JpZ2luYWxFdmVudCA9IGV2ZW50O1xuXG4gICAgICAgIHRoaXMuZXZlbnREYXRhLmRhdGEgPSB0b3VjaERhdGE7XG4gICAgICAgIHRoaXMuZXZlbnREYXRhLnN0b3BwZWQgPSBmYWxzZTtcblxuICAgICAgICB0aGlzLnByb2Nlc3NJbnRlcmFjdGl2ZSggdG91Y2hEYXRhLmdsb2JhbCwgdGhpcy5yZW5kZXJlci5fbGFzdE9iamVjdFJlbmRlcmVkLCB0aGlzLnByb2Nlc3NUb3VjaE1vdmUsIHRydWUgKTtcblxuICAgICAgICB0aGlzLnJldHVyblRvdWNoRGF0YSggdG91Y2hEYXRhICk7XG4gICAgfVxufTtcblxuLyoqXG4gKiBQcm9jZXNzZXMgdGhlIHJlc3VsdCBvZiBhIHRvdWNoIG1vdmUgY2hlY2sgYW5kIGRpc3BhdGNoZXMgdGhlIGV2ZW50IGlmIG5lZWQgYmVcbiAqXG4gKiBAcGFyYW0gZGlzcGxheU9iamVjdCB7UElYSS5Db250YWluZXJ8UElYSS5TcHJpdGV8UElYSS5leHRyYXMuVGlsaW5nU3ByaXRlfSBUaGUgZGlzcGxheSBvYmplY3QgdGhhdCB3YXMgdGVzdGVkXG4gKiBAcGFyYW0gaGl0IHtib29sZWFufSB0aGUgcmVzdWx0IG9mIHRoZSBoaXQgdGVzdCBvbiB0aGUgZGlzcGxheSBvYmplY3RcbiAqIEBwcml2YXRlXG4gKi9cbkludGVyYWN0aW9uTWFuYWdlci5wcm90b3R5cGUucHJvY2Vzc1RvdWNoTW92ZSA9IGZ1bmN0aW9uICggZGlzcGxheU9iamVjdCwgaGl0IClcbntcbiAgICBoaXQgPSBoaXQ7XG4gICAgdGhpcy5kaXNwYXRjaEV2ZW50KCBkaXNwbGF5T2JqZWN0LCAndG91Y2htb3ZlJywgdGhpcy5ldmVudERhdGEpO1xufTtcblxuLyoqXG4gKiBHcmFicyBhbiBpbnRlcmFjdGlvbiBkYXRhIG9iamVjdCBmcm9tIHRoZSBpbnRlcm5hbCBwb29sXG4gKlxuICogQHBhcmFtIHRvdWNoRXZlbnQge0V2ZW50RGF0YX0gVGhlIHRvdWNoIGV2ZW50IHdlIG5lZWQgdG8gcGFpciB3aXRoIGFuIGludGVyYWN0aW9uRGF0YSBvYmplY3RcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5JbnRlcmFjdGlvbk1hbmFnZXIucHJvdG90eXBlLmdldFRvdWNoRGF0YSA9IGZ1bmN0aW9uICh0b3VjaEV2ZW50KVxue1xuICAgIHZhciB0b3VjaERhdGEgPSB0aGlzLmludGVyYWN0aXZlRGF0YVBvb2wucG9wKCk7XG5cbiAgICBpZighdG91Y2hEYXRhKVxuICAgIHtcbiAgICAgICAgdG91Y2hEYXRhID0gbmV3IEludGVyYWN0aW9uRGF0YSgpO1xuICAgIH1cblxuICAgIHRvdWNoRGF0YS5pZGVudGlmaWVyID0gdG91Y2hFdmVudC5pZGVudGlmaWVyO1xuICAgIHRoaXMubWFwUG9zaXRpb25Ub1BvaW50KCB0b3VjaERhdGEuZ2xvYmFsLCB0b3VjaEV2ZW50LmNsaWVudFgsIHRvdWNoRXZlbnQuY2xpZW50WSApO1xuXG4gICAgaWYobmF2aWdhdG9yLmlzQ29jb29uSlMpXG4gICAge1xuICAgICAgICB0b3VjaERhdGEuZ2xvYmFsLnggPSB0b3VjaERhdGEuZ2xvYmFsLnggLyB0aGlzLnJlc29sdXRpb247XG4gICAgICAgIHRvdWNoRGF0YS5nbG9iYWwueSA9IHRvdWNoRGF0YS5nbG9iYWwueSAvIHRoaXMucmVzb2x1dGlvbjtcbiAgICB9XG5cbiAgICB0b3VjaEV2ZW50Lmdsb2JhbFggPSB0b3VjaERhdGEuZ2xvYmFsLng7XG4gICAgdG91Y2hFdmVudC5nbG9iYWxZID0gdG91Y2hEYXRhLmdsb2JhbC55O1xuXG4gICAgcmV0dXJuIHRvdWNoRGF0YTtcbn07XG5cbi8qKlxuICogUmV0dXJucyBhbiBpbnRlcmFjdGlvbiBkYXRhIG9iamVjdCB0byB0aGUgaW50ZXJuYWwgcG9vbFxuICpcbiAqIEBwYXJhbSB0b3VjaERhdGEge1BJWEkuaW50ZXJhY3Rpb24uSW50ZXJhY3Rpb25EYXRhfSBUaGUgdG91Y2ggZGF0YSBvYmplY3Qgd2Ugd2FudCB0byByZXR1cm4gdG8gdGhlIHBvb2xcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5JbnRlcmFjdGlvbk1hbmFnZXIucHJvdG90eXBlLnJldHVyblRvdWNoRGF0YSA9IGZ1bmN0aW9uICggdG91Y2hEYXRhIClcbntcbiAgICB0aGlzLmludGVyYWN0aXZlRGF0YVBvb2wucHVzaCggdG91Y2hEYXRhICk7XG59O1xuXG4vKipcbiAqIERlc3Ryb3lzIHRoZSBpbnRlcmFjdGlvbiBtYW5hZ2VyXG4gKlxuICovXG5JbnRlcmFjdGlvbk1hbmFnZXIucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoKSB7XG4gICAgdGhpcy5yZW1vdmVFdmVudHMoKTtcblxuICAgIHRoaXMucmVuZGVyZXIgPSBudWxsO1xuXG4gICAgdGhpcy5tb3VzZSA9IG51bGw7XG5cbiAgICB0aGlzLmV2ZW50RGF0YSA9IG51bGw7XG5cbiAgICB0aGlzLmludGVyYWN0aXZlRGF0YVBvb2wgPSBudWxsO1xuXG4gICAgdGhpcy5pbnRlcmFjdGlvbkRPTUVsZW1lbnQgPSBudWxsO1xuXG4gICAgdGhpcy5vbk1vdXNlVXAgPSBudWxsO1xuICAgIHRoaXMucHJvY2Vzc01vdXNlVXAgPSBudWxsO1xuXG5cbiAgICB0aGlzLm9uTW91c2VEb3duID0gbnVsbDtcbiAgICB0aGlzLnByb2Nlc3NNb3VzZURvd24gPSBudWxsO1xuXG4gICAgdGhpcy5vbk1vdXNlTW92ZSA9IG51bGw7XG4gICAgdGhpcy5wcm9jZXNzTW91c2VNb3ZlID0gbnVsbDtcblxuICAgIHRoaXMub25Nb3VzZU91dCA9IG51bGw7XG4gICAgdGhpcy5wcm9jZXNzTW91c2VPdmVyT3V0ID0gbnVsbDtcblxuXG4gICAgdGhpcy5vblRvdWNoU3RhcnQgPSBudWxsO1xuICAgIHRoaXMucHJvY2Vzc1RvdWNoU3RhcnQgPSBudWxsO1xuXG4gICAgdGhpcy5vblRvdWNoRW5kID0gbnVsbDtcbiAgICB0aGlzLnByb2Nlc3NUb3VjaEVuZCA9IG51bGw7XG5cbiAgICB0aGlzLm9uVG91Y2hNb3ZlID0gbnVsbDtcbiAgICB0aGlzLnByb2Nlc3NUb3VjaE1vdmUgPSBudWxsO1xuXG4gICAgdGhpcy5fdGVtcFBvaW50ID0gbnVsbDtcbn07XG5cbmNvcmUuV2ViR0xSZW5kZXJlci5yZWdpc3RlclBsdWdpbignaW50ZXJhY3Rpb24nLCBJbnRlcmFjdGlvbk1hbmFnZXIpO1xuY29yZS5DYW52YXNSZW5kZXJlci5yZWdpc3RlclBsdWdpbignaW50ZXJhY3Rpb24nLCBJbnRlcmFjdGlvbk1hbmFnZXIpO1xuIiwiLyoqXG4gKiBAZmlsZSAgICAgICAgTWFpbiBleHBvcnQgb2YgdGhlIFBJWEkgaW50ZXJhY3Rpb25zIGxpYnJhcnlcbiAqIEBhdXRob3IgICAgICBNYXQgR3JvdmVzIDxtYXRAZ29vZGJveWRpZ2l0YWwuY29tPlxuICogQGNvcHlyaWdodCAgIDIwMTMtMjAxNSBHb29kQm95RGlnaXRhbFxuICogQGxpY2Vuc2UgICAgIHtAbGluayBodHRwczovL2dpdGh1Yi5jb20vcGl4aWpzL3BpeGkuanMvYmxvYi9tYXN0ZXIvTElDRU5TRXxNSVQgTGljZW5zZX1cbiAqL1xuXG4vKipcbiAqIEBuYW1lc3BhY2UgUElYSS5pbnRlcmFjdGlvblxuICovXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgICBJbnRlcmFjdGlvbkRhdGE6ICAgIHJlcXVpcmUoJy4vSW50ZXJhY3Rpb25EYXRhJyksXG4gICAgSW50ZXJhY3Rpb25NYW5hZ2VyOiByZXF1aXJlKCcuL0ludGVyYWN0aW9uTWFuYWdlcicpLFxuICAgIGludGVyYWN0aXZlVGFyZ2V0OiAgcmVxdWlyZSgnLi9pbnRlcmFjdGl2ZVRhcmdldCcpXG59O1xuIiwiLyoqXG4gKiBEZWZhdWx0IHByb3BlcnR5IHZhbHVlcyBvZiBpbnRlcmFjdGl2ZSBvYmplY3RzXG4gKiB1c2VkIGJ5IHtAbGluayBQSVhJLmludGVyYWN0aW9uLkludGVyYWN0aW9uTWFuYWdlcn0uXG4gKlxuICogQG1peGluXG4gKiBAbWVtYmVyb2YgUElYSS5pbnRlcmFjdGlvblxuICogQGV4YW1wbGVcbiAqICAgICAgZnVuY3Rpb24gTXlPYmplY3QoKSB7fVxuICpcbiAqICAgICAgT2JqZWN0LmFzc2lnbihcbiAqICAgICAgICAgIE15T2JqZWN0LnByb3RvdHlwZSxcbiAqICAgICAgICAgIFBJWEkuaW50ZXJhY3Rpb24uaW50ZXJhY3RpdmVUYXJnZXRcbiAqICAgICAgKTtcbiAqL1xudmFyIGludGVyYWN0aXZlVGFyZ2V0ID0ge1xuICAgIC8qKlxuICAgICAqIEB0b2RvIE5lZWRzIGRvY3MuXG4gICAgICovXG4gICAgaW50ZXJhY3RpdmU6IGZhbHNlLFxuICAgIC8qKlxuICAgICAqIEB0b2RvIE5lZWRzIGRvY3MuXG4gICAgICovXG4gICAgYnV0dG9uTW9kZTogZmFsc2UsXG4gICAgLyoqXG4gICAgICogQHRvZG8gTmVlZHMgZG9jcy5cbiAgICAgKi9cbiAgICBpbnRlcmFjdGl2ZUNoaWxkcmVuOiB0cnVlLFxuICAgIC8qKlxuICAgICAqIEB0b2RvIE5lZWRzIGRvY3MuXG4gICAgICovXG4gICAgZGVmYXVsdEN1cnNvcjogJ3BvaW50ZXInLFxuXG4gICAgLy8gc29tZSBpbnRlcm5hbCBjaGVja3MuLlxuXG4gICAgLyoqXG4gICAgICogQHRvZG8gTmVlZHMgZG9jcy5cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIF9vdmVyOiBmYWxzZSxcbiAgICAvKipcbiAgICAgKiBAdG9kbyBOZWVkcyBkb2NzLlxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgX3RvdWNoRG93bjogZmFsc2Vcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gaW50ZXJhY3RpdmVUYXJnZXQ7XG4iLCJ2YXIgUmVzb3VyY2UgPSByZXF1aXJlKCdyZXNvdXJjZS1sb2FkZXInKS5SZXNvdXJjZSxcbiAgICBjb3JlID0gcmVxdWlyZSgnLi4vY29yZScpLFxuICAgIGV4dHJhcyA9IHJlcXVpcmUoJy4uL2V4dHJhcycpLFxuICAgIHBhdGggPSByZXF1aXJlKCdwYXRoJyk7XG5cblxuZnVuY3Rpb24gcGFyc2UocmVzb3VyY2UsIHRleHR1cmUpIHtcbiAgICB2YXIgZGF0YSA9IHt9O1xuICAgIHZhciBpbmZvID0gcmVzb3VyY2UuZGF0YS5nZXRFbGVtZW50c0J5VGFnTmFtZSgnaW5mbycpWzBdO1xuICAgIHZhciBjb21tb24gPSByZXNvdXJjZS5kYXRhLmdldEVsZW1lbnRzQnlUYWdOYW1lKCdjb21tb24nKVswXTtcblxuICAgIGRhdGEuZm9udCA9IGluZm8uZ2V0QXR0cmlidXRlKCdmYWNlJyk7XG4gICAgZGF0YS5zaXplID0gcGFyc2VJbnQoaW5mby5nZXRBdHRyaWJ1dGUoJ3NpemUnKSwgMTApO1xuICAgIGRhdGEubGluZUhlaWdodCA9IHBhcnNlSW50KGNvbW1vbi5nZXRBdHRyaWJ1dGUoJ2xpbmVIZWlnaHQnKSwgMTApO1xuICAgIGRhdGEuY2hhcnMgPSB7fTtcblxuICAgIC8vcGFyc2UgbGV0dGVyc1xuICAgIHZhciBsZXR0ZXJzID0gcmVzb3VyY2UuZGF0YS5nZXRFbGVtZW50c0J5VGFnTmFtZSgnY2hhcicpO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZXR0ZXJzLmxlbmd0aDsgaSsrKVxuICAgIHtcbiAgICAgICAgdmFyIGNoYXJDb2RlID0gcGFyc2VJbnQobGV0dGVyc1tpXS5nZXRBdHRyaWJ1dGUoJ2lkJyksIDEwKTtcblxuICAgICAgICB2YXIgdGV4dHVyZVJlY3QgPSBuZXcgY29yZS5SZWN0YW5nbGUoXG4gICAgICAgICAgICBwYXJzZUludChsZXR0ZXJzW2ldLmdldEF0dHJpYnV0ZSgneCcpLCAxMCkgKyB0ZXh0dXJlLmZyYW1lLngsXG4gICAgICAgICAgICBwYXJzZUludChsZXR0ZXJzW2ldLmdldEF0dHJpYnV0ZSgneScpLCAxMCkgKyB0ZXh0dXJlLmZyYW1lLnksXG4gICAgICAgICAgICBwYXJzZUludChsZXR0ZXJzW2ldLmdldEF0dHJpYnV0ZSgnd2lkdGgnKSwgMTApLFxuICAgICAgICAgICAgcGFyc2VJbnQobGV0dGVyc1tpXS5nZXRBdHRyaWJ1dGUoJ2hlaWdodCcpLCAxMClcbiAgICAgICAgKTtcblxuICAgICAgICBkYXRhLmNoYXJzW2NoYXJDb2RlXSA9IHtcbiAgICAgICAgICAgIHhPZmZzZXQ6IHBhcnNlSW50KGxldHRlcnNbaV0uZ2V0QXR0cmlidXRlKCd4b2Zmc2V0JyksIDEwKSxcbiAgICAgICAgICAgIHlPZmZzZXQ6IHBhcnNlSW50KGxldHRlcnNbaV0uZ2V0QXR0cmlidXRlKCd5b2Zmc2V0JyksIDEwKSxcbiAgICAgICAgICAgIHhBZHZhbmNlOiBwYXJzZUludChsZXR0ZXJzW2ldLmdldEF0dHJpYnV0ZSgneGFkdmFuY2UnKSwgMTApLFxuICAgICAgICAgICAga2VybmluZzoge30sXG4gICAgICAgICAgICB0ZXh0dXJlOiBuZXcgY29yZS5UZXh0dXJlKHRleHR1cmUuYmFzZVRleHR1cmUsIHRleHR1cmVSZWN0KVxuXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgLy9wYXJzZSBrZXJuaW5nc1xuICAgIHZhciBrZXJuaW5ncyA9IHJlc291cmNlLmRhdGEuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2tlcm5pbmcnKTtcbiAgICBmb3IgKGkgPSAwOyBpIDwga2VybmluZ3MubGVuZ3RoOyBpKyspXG4gICAge1xuICAgICAgICB2YXIgZmlyc3QgPSBwYXJzZUludChrZXJuaW5nc1tpXS5nZXRBdHRyaWJ1dGUoJ2ZpcnN0JyksIDEwKTtcbiAgICAgICAgdmFyIHNlY29uZCA9IHBhcnNlSW50KGtlcm5pbmdzW2ldLmdldEF0dHJpYnV0ZSgnc2Vjb25kJyksIDEwKTtcbiAgICAgICAgdmFyIGFtb3VudCA9IHBhcnNlSW50KGtlcm5pbmdzW2ldLmdldEF0dHJpYnV0ZSgnYW1vdW50JyksIDEwKTtcblxuICAgICAgICBkYXRhLmNoYXJzW3NlY29uZF0ua2VybmluZ1tmaXJzdF0gPSBhbW91bnQ7XG4gICAgfVxuXG4gICAgcmVzb3VyY2UuYml0bWFwRm9udCA9IGRhdGE7XG5cbiAgICAvLyBJJ20gbGVhdmluZyB0aGlzIGFzIGEgdGVtcG9yYXJ5IGZpeCBzbyB3ZSBjYW4gdGVzdCB0aGUgYml0bWFwIGZvbnRzIGluIHYzXG4gICAgLy8gYnV0IGl0J3MgdmVyeSBsaWtlbHkgdG8gY2hhbmdlXG4gICAgZXh0cmFzLkJpdG1hcFRleHQuZm9udHNbZGF0YS5mb250XSA9IGRhdGE7XG59XG5cblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoKVxue1xuICAgIHJldHVybiBmdW5jdGlvbiAocmVzb3VyY2UsIG5leHQpXG4gICAge1xuICAgICAgICAvLyBza2lwIGlmIG5vIGRhdGEgb3Igbm90IHhtbCBkYXRhXG4gICAgICAgIGlmICghcmVzb3VyY2UuZGF0YSB8fCAhcmVzb3VyY2UuaXNYbWwpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiBuZXh0KCk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBza2lwIGlmIG5vdCBiaXRtYXAgZm9udCBkYXRhLCB1c2luZyBzb21lIHNpbGx5IGR1Y2stdHlwaW5nXG4gICAgICAgIGlmIChcbiAgICAgICAgICAgIHJlc291cmNlLmRhdGEuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ3BhZ2UnKS5sZW5ndGggPT09IDAgfHxcbiAgICAgICAgICAgIHJlc291cmNlLmRhdGEuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2luZm8nKS5sZW5ndGggPT09IDAgfHxcbiAgICAgICAgICAgIHJlc291cmNlLmRhdGEuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2luZm8nKVswXS5nZXRBdHRyaWJ1dGUoJ2ZhY2UnKSA9PT0gbnVsbFxuICAgICAgICAgICAgKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gbmV4dCgpO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIHhtbFVybCA9IHBhdGguZGlybmFtZShyZXNvdXJjZS51cmwpO1xuXG4gICAgICAgIGlmICh4bWxVcmwgPT09ICcuJykge1xuICAgICAgICAgICAgeG1sVXJsID0gJyc7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5iYXNlVXJsICYmIHhtbFVybCkge1xuICAgICAgICAgICAgLy8gaWYgYmFzZXVybCBoYXMgYSB0cmFpbGluZyBzbGFzaCB0aGVuIGFkZCBvbmUgdG8geG1sVXJsIHNvIHRoZSByZXBsYWNlIHdvcmtzIGJlbG93XG4gICAgICAgICAgICBpZiAodGhpcy5iYXNlVXJsLmNoYXJBdCh0aGlzLmJhc2VVcmwubGVuZ3RoIC0gMSkgPT09ICcvJykge1xuICAgICAgICAgICAgICAgIHhtbFVybCArPSAnLyc7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIHJlbW92ZSBiYXNlVXJsIGZyb20geG1sVXJsXG4gICAgICAgICAgICB4bWxVcmwgPSB4bWxVcmwucmVwbGFjZSh0aGlzLmJhc2VVcmwsICcnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGlmIHRoZXJlIGlzIGFuIHhtbFVybCBub3csIGl0IG5lZWRzIGEgdHJhaWxpbmcgc2xhc2guIEVuc3VyZSB0aGF0IGl0IGRvZXMgaWYgdGhlIHN0cmluZyBpc24ndCBlbXB0eS5cbiAgICAgICAgaWYgKHhtbFVybCAmJiB4bWxVcmwuY2hhckF0KHhtbFVybC5sZW5ndGggLSAxKSAhPT0gJy8nKSB7XG4gICAgICAgICAgICB4bWxVcmwgKz0gJy8nO1xuICAgICAgICB9XG4gICAgICAgIHZhciB0ZXh0dXJlVXJsID0geG1sVXJsICsgcmVzb3VyY2UuZGF0YS5nZXRFbGVtZW50c0J5VGFnTmFtZSgncGFnZScpWzBdLmdldEF0dHJpYnV0ZSgnZmlsZScpO1xuICAgICAgICBpZiAoY29yZS51dGlscy5UZXh0dXJlQ2FjaGVbdGV4dHVyZVVybF0pIHtcbiAgICAgICAgICAgIC8vcmV1c2UgZXhpc3RpbmcgdGV4dHVyZVxuICAgICAgICAgICAgcGFyc2UocmVzb3VyY2UsIGNvcmUudXRpbHMuVGV4dHVyZUNhY2hlW3RleHR1cmVVcmxdKTtcbiAgICAgICAgICAgIG5leHQoKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHZhciBsb2FkT3B0aW9ucyA9IHtcbiAgICAgICAgICAgICAgICBjcm9zc09yaWdpbjogcmVzb3VyY2UuY3Jvc3NPcmlnaW4sXG4gICAgICAgICAgICAgICAgbG9hZFR5cGU6IFJlc291cmNlLkxPQURfVFlQRS5JTUFHRSxcbiAgICAgICAgICAgICAgICBtZXRhZGF0YTogcmVzb3VyY2UubWV0YWRhdGEuaW1hZ2VNZXRhZGF0YVxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIC8vIGxvYWQgdGhlIHRleHR1cmUgZm9yIHRoZSBmb250XG4gICAgICAgICAgICB0aGlzLmFkZChyZXNvdXJjZS5uYW1lICsgJ19pbWFnZScsIHRleHR1cmVVcmwsIGxvYWRPcHRpb25zLCBmdW5jdGlvbiAocmVzKSB7XG4gICAgICAgICAgICAgICAgcGFyc2UocmVzb3VyY2UsIHJlcy50ZXh0dXJlKTtcbiAgICAgICAgICAgICAgICBuZXh0KCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH07XG59O1xuIiwiLyoqXG4gKiBAZmlsZSAgICAgICAgTWFpbiBleHBvcnQgb2YgdGhlIFBJWEkgbG9hZGVycyBsaWJyYXJ5XG4gKiBAYXV0aG9yICAgICAgTWF0IEdyb3ZlcyA8bWF0QGdvb2Rib3lkaWdpdGFsLmNvbT5cbiAqIEBjb3B5cmlnaHQgICAyMDEzLTIwMTUgR29vZEJveURpZ2l0YWxcbiAqIEBsaWNlbnNlICAgICB7QGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL3BpeGlqcy9waXhpLmpzL2Jsb2IvbWFzdGVyL0xJQ0VOU0V8TUlUIExpY2Vuc2V9XG4gKi9cblxuLyoqXG4gKiBAbmFtZXNwYWNlIFBJWEkubG9hZGVyc1xuICovXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgICBMb2FkZXI6ICAgICAgICAgICAgIHJlcXVpcmUoJy4vbG9hZGVyJyksXG5cbiAgICAvLyBwYXJzZXJzXG4gICAgYml0bWFwRm9udFBhcnNlcjogICByZXF1aXJlKCcuL2JpdG1hcEZvbnRQYXJzZXInKSxcbiAgICBzcHJpdGVzaGVldFBhcnNlcjogIHJlcXVpcmUoJy4vc3ByaXRlc2hlZXRQYXJzZXInKSxcbiAgICB0ZXh0dXJlUGFyc2VyOiAgICAgIHJlcXVpcmUoJy4vdGV4dHVyZVBhcnNlcicpLFxuICAgIFJlc291cmNlOiAgICAgICAgICAgcmVxdWlyZSgncmVzb3VyY2UtbG9hZGVyJykuUmVzb3VyY2Vcbn07XG4iLCJ2YXIgUmVzb3VyY2VMb2FkZXIgPSByZXF1aXJlKCdyZXNvdXJjZS1sb2FkZXInKSxcbiAgICB0ZXh0dXJlUGFyc2VyID0gcmVxdWlyZSgnLi90ZXh0dXJlUGFyc2VyJyksXG4gICAgc3ByaXRlc2hlZXRQYXJzZXIgPSByZXF1aXJlKCcuL3Nwcml0ZXNoZWV0UGFyc2VyJyksXG4gICAgYml0bWFwRm9udFBhcnNlciA9IHJlcXVpcmUoJy4vYml0bWFwRm9udFBhcnNlcicpO1xuXG4vKipcbiAqXG4gKiBUaGUgbmV3IGxvYWRlciwgZXh0ZW5kcyBSZXNvdXJjZSBMb2FkZXIgYnkgQ2hhZCBFbmdsZXIgOiBodHRwczovL2dpdGh1Yi5jb20vZW5nbGVyY2ovcmVzb3VyY2UtbG9hZGVyXG4gKlxuICogYGBganNcbiAqIHZhciBsb2FkZXIgPSBQSVhJLmxvYWRlcjsgLy8gcGl4aSBleHBvc2VzIGEgcHJlbWFkZSBpbnN0YW5jZSBmb3IgeW91IHRvIHVzZS5cbiAqIC8vb3JcbiAqIHZhciBsb2FkZXIgPSBuZXcgUElYSS5sb2FkZXJzLkxvYWRlcigpOyAvLyB5b3UgY2FuIGFsc28gY3JlYXRlIHlvdXIgb3duIGlmIHlvdSB3YW50XG4gKlxuICogbG9hZGVyLmFkZCgnYnVubnknLFwiZGF0YS9idW5ueS5wbmdcIik7XG4gKlxuICogbG9hZGVyLm9uY2UoJ2NvbXBsZXRlJyxvbkFzc2V0c0xvYWRlZCk7XG4gKlxuICogbG9hZGVyLmxvYWQoKTtcbiAqIGBgYFxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5SZXNvdXJjZUxvYWRlclxuICogQG1lbWJlcm9mIFBJWEkubG9hZGVyc1xuICogQHBhcmFtIFtiYXNlVXJsPScnXSB7c3RyaW5nfSBUaGUgYmFzZSB1cmwgZm9yIGFsbCByZXNvdXJjZXMgbG9hZGVkIGJ5IHRoaXMgbG9hZGVyLlxuICogQHBhcmFtIFtjb25jdXJyZW5jeT0xMF0ge251bWJlcn0gVGhlIG51bWJlciBvZiByZXNvdXJjZXMgdG8gbG9hZCBjb25jdXJyZW50bHkuXG4gKi9cbmZ1bmN0aW9uIExvYWRlcihiYXNlVXJsLCBjb25jdXJyZW5jeSlcbntcbiAgICBSZXNvdXJjZUxvYWRlci5jYWxsKHRoaXMsIGJhc2VVcmwsIGNvbmN1cnJlbmN5KTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgTG9hZGVyLl9waXhpTWlkZGxld2FyZS5sZW5ndGg7ICsraSkge1xuICAgICAgICB0aGlzLnVzZShMb2FkZXIuX3BpeGlNaWRkbGV3YXJlW2ldKCkpO1xuICAgIH1cbn1cblxuTG9hZGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoUmVzb3VyY2VMb2FkZXIucHJvdG90eXBlKTtcbkxvYWRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBMb2FkZXI7XG5cbm1vZHVsZS5leHBvcnRzID0gTG9hZGVyO1xuXG5Mb2FkZXIuX3BpeGlNaWRkbGV3YXJlID0gW1xuICAgIC8vIHBhcnNlIGFueSBibG9iIGludG8gbW9yZSB1c2FibGUgb2JqZWN0cyAoZS5nLiBJbWFnZSlcbiAgICBSZXNvdXJjZUxvYWRlci5taWRkbGV3YXJlLnBhcnNpbmcuYmxvYixcbiAgICAvLyBwYXJzZSBhbnkgSW1hZ2Ugb2JqZWN0cyBpbnRvIHRleHR1cmVzXG4gICAgdGV4dHVyZVBhcnNlcixcbiAgICAvLyBwYXJzZSBhbnkgc3ByaXRlc2hlZXQgZGF0YSBpbnRvIG11bHRpcGxlIHRleHR1cmVzXG4gICAgc3ByaXRlc2hlZXRQYXJzZXIsXG4gICAgLy8gcGFyc2UgYW55IHNwcml0ZXNoZWV0IGRhdGEgaW50byBtdWx0aXBsZSB0ZXh0dXJlc1xuICAgIGJpdG1hcEZvbnRQYXJzZXJcbl07XG5cbkxvYWRlci5hZGRQaXhpTWlkZGxld2FyZSA9IGZ1bmN0aW9uIChmbikge1xuICAgIExvYWRlci5fcGl4aU1pZGRsZXdhcmUucHVzaChmbik7XG59O1xuXG4vLyBBZGQgY3VzdG9tIGV4dGVudGlvbnNcbnZhciBSZXNvdXJjZSA9IFJlc291cmNlTG9hZGVyLlJlc291cmNlO1xuXG5SZXNvdXJjZS5zZXRFeHRlbnNpb25YaHJUeXBlKCdmbnQnLCBSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRS5ET0NVTUVOVCk7XG4iLCJ2YXIgUmVzb3VyY2UgPSByZXF1aXJlKCdyZXNvdXJjZS1sb2FkZXInKS5SZXNvdXJjZSxcbiAgICBwYXRoID0gcmVxdWlyZSgncGF0aCcpLFxuICAgIGNvcmUgPSByZXF1aXJlKCcuLi9jb3JlJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKClcbntcbiAgICByZXR1cm4gZnVuY3Rpb24gKHJlc291cmNlLCBuZXh0KVxuICAgIHtcbiAgICAgICAgLy8gc2tpcCBpZiBubyBkYXRhLCBpdHMgbm90IGpzb24sIG9yIGl0IGlzbid0IHNwcml0ZXNoZWV0IGRhdGFcbiAgICAgICAgaWYgKCFyZXNvdXJjZS5kYXRhIHx8ICFyZXNvdXJjZS5pc0pzb24gfHwgIXJlc291cmNlLmRhdGEuZnJhbWVzKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gbmV4dCgpO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGxvYWRPcHRpb25zID0ge1xuICAgICAgICAgICAgY3Jvc3NPcmlnaW46IHJlc291cmNlLmNyb3NzT3JpZ2luLFxuICAgICAgICAgICAgbG9hZFR5cGU6IFJlc291cmNlLkxPQURfVFlQRS5JTUFHRSxcbiAgICAgICAgICAgIG1ldGFkYXRhOiByZXNvdXJjZS5tZXRhZGF0YS5pbWFnZU1ldGFkYXRhXG4gICAgICAgIH07XG5cbiAgICAgICAgdmFyIHJvdXRlID0gcGF0aC5kaXJuYW1lKHJlc291cmNlLnVybC5yZXBsYWNlKHRoaXMuYmFzZVVybCwgJycpKTtcblxuICAgICAgICB2YXIgcmVzb2x1dGlvbiA9IGNvcmUudXRpbHMuZ2V0UmVzb2x1dGlvbk9mVXJsKCByZXNvdXJjZS51cmwgKTtcblxuICAgICAgICAvLyBsb2FkIHRoZSBpbWFnZSBmb3IgdGhpcyBzaGVldFxuICAgICAgICB0aGlzLmFkZChyZXNvdXJjZS5uYW1lICsgJ19pbWFnZScsIHJvdXRlICsgJy8nICsgcmVzb3VyY2UuZGF0YS5tZXRhLmltYWdlLCBsb2FkT3B0aW9ucywgZnVuY3Rpb24gKHJlcylcbiAgICAgICAge1xuICAgICAgICAgICAgcmVzb3VyY2UudGV4dHVyZXMgPSB7fTtcblxuICAgICAgICAgICAgdmFyIGZyYW1lcyA9IHJlc291cmNlLmRhdGEuZnJhbWVzO1xuXG4gICAgICAgICAgICBmb3IgKHZhciBpIGluIGZyYW1lcylcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB2YXIgcmVjdCA9IGZyYW1lc1tpXS5mcmFtZTtcblxuICAgICAgICAgICAgICAgIGlmIChyZWN0KVxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHNpemUgPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICB2YXIgdHJpbSA9IG51bGw7XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKGZyYW1lc1tpXS5yb3RhdGVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzaXplID0gbmV3IGNvcmUuUmVjdGFuZ2xlKHJlY3QueCwgcmVjdC55LCByZWN0LmgsIHJlY3Qudyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzaXplID0gbmV3IGNvcmUuUmVjdGFuZ2xlKHJlY3QueCwgcmVjdC55LCByZWN0LncsIHJlY3QuaCk7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAvLyAgQ2hlY2sgdG8gc2VlIGlmIHRoZSBzcHJpdGUgaXMgdHJpbW1lZFxuICAgICAgICAgICAgICAgICAgICBpZiAoZnJhbWVzW2ldLnRyaW1tZWQpXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRyaW0gPSBuZXcgY29yZS5SZWN0YW5nbGUoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJhbWVzW2ldLnNwcml0ZVNvdXJjZVNpemUueCAvIHJlc29sdXRpb24sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJhbWVzW2ldLnNwcml0ZVNvdXJjZVNpemUueSAvIHJlc29sdXRpb24sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJhbWVzW2ldLnNvdXJjZVNpemUudyAvIHJlc29sdXRpb24sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJhbWVzW2ldLnNvdXJjZVNpemUuaCAvIHJlc29sdXRpb25cbiAgICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgLy8gZmxpcCB0aGUgd2lkdGggYW5kIGhlaWdodCFcbiAgICAgICAgICAgICAgICAgICAgaWYgKGZyYW1lc1tpXS5yb3RhdGVkKVxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgdGVtcCA9IHNpemUud2lkdGg7XG4gICAgICAgICAgICAgICAgICAgICAgICBzaXplLndpZHRoID0gc2l6ZS5oZWlnaHQ7XG4gICAgICAgICAgICAgICAgICAgICAgICBzaXplLmhlaWdodCA9IHRlbXA7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBzaXplLnggLz0gcmVzb2x1dGlvbjtcbiAgICAgICAgICAgICAgICAgICAgc2l6ZS55IC89IHJlc29sdXRpb247XG4gICAgICAgICAgICAgICAgICAgIHNpemUud2lkdGggLz0gcmVzb2x1dGlvbjtcbiAgICAgICAgICAgICAgICAgICAgc2l6ZS5oZWlnaHQgLz0gcmVzb2x1dGlvbjtcblxuICAgICAgICAgICAgICAgICAgICByZXNvdXJjZS50ZXh0dXJlc1tpXSA9IG5ldyBjb3JlLlRleHR1cmUocmVzLnRleHR1cmUuYmFzZVRleHR1cmUsIHNpemUsIHNpemUuY2xvbmUoKSwgdHJpbSwgZnJhbWVzW2ldLnJvdGF0ZWQpO1xuXG4gICAgICAgICAgICAgICAgICAgIC8vIGxldHMgYWxzbyBhZGQgdGhlIGZyYW1lIHRvIHBpeGkncyBnbG9iYWwgY2FjaGUgZm9yIGZyb21GcmFtZSBhbmQgZnJvbUltYWdlIGZ1bmN0aW9uc1xuICAgICAgICAgICAgICAgICAgICBjb3JlLnV0aWxzLlRleHR1cmVDYWNoZVtpXSA9IHJlc291cmNlLnRleHR1cmVzW2ldO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgbmV4dCgpO1xuICAgICAgICB9KTtcbiAgICB9O1xufTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vY29yZScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICgpXG57XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChyZXNvdXJjZSwgbmV4dClcbiAgICB7XG4gICAgICAgIC8vIGNyZWF0ZSBhIG5ldyB0ZXh0dXJlIGlmIHRoZSBkYXRhIGlzIGFuIEltYWdlIG9iamVjdFxuICAgICAgICBpZiAocmVzb3VyY2UuZGF0YSAmJiByZXNvdXJjZS5pc0ltYWdlKVxuICAgICAgICB7XG4gICAgICAgICAgICB2YXIgYmFzZVRleHR1cmUgPSBuZXcgY29yZS5CYXNlVGV4dHVyZShyZXNvdXJjZS5kYXRhLCBudWxsLCBjb3JlLnV0aWxzLmdldFJlc29sdXRpb25PZlVybChyZXNvdXJjZS51cmwpKTtcbiAgICAgICAgICAgIGJhc2VUZXh0dXJlLmltYWdlVXJsID0gcmVzb3VyY2UudXJsO1xuICAgICAgICAgICAgcmVzb3VyY2UudGV4dHVyZSA9IG5ldyBjb3JlLlRleHR1cmUoYmFzZVRleHR1cmUpO1xuICAgICAgICAgICAgLy8gbGV0cyBhbHNvIGFkZCB0aGUgZnJhbWUgdG8gcGl4aSdzIGdsb2JhbCBjYWNoZSBmb3IgZnJvbUZyYW1lIGFuZCBmcm9tSW1hZ2UgZnVjbnRpb25zXG4gICAgICAgICAgICBjb3JlLnV0aWxzLkJhc2VUZXh0dXJlQ2FjaGVbcmVzb3VyY2UudXJsXSA9IGJhc2VUZXh0dXJlO1xuICAgICAgICAgICAgY29yZS51dGlscy5UZXh0dXJlQ2FjaGVbcmVzb3VyY2UudXJsXSA9IHJlc291cmNlLnRleHR1cmU7XG4gICAgICAgIH1cblxuICAgICAgICBuZXh0KCk7XG4gICAgfTtcbn07XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uL2NvcmUnKSxcbiAgICB0ZW1wUG9pbnQgPSBuZXcgY29yZS5Qb2ludCgpLFxuICAgIHRlbXBQb2x5Z29uID0gbmV3IGNvcmUuUG9seWdvbigpO1xuXG4vKipcbiAqIEJhc2UgbWVzaCBjbGFzc1xuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLkNvbnRhaW5lclxuICogQG1lbWJlcm9mIFBJWEkubWVzaFxuICogQHBhcmFtIHRleHR1cmUge1BJWEkuVGV4dHVyZX0gVGhlIHRleHR1cmUgdG8gdXNlXG4gKiBAcGFyYW0gW3ZlcnRpY2VzXSB7RmxvYXQzMkFycmF5fSBpZiB5b3Ugd2FudCB0byBzcGVjaWZ5IHRoZSB2ZXJ0aWNlc1xuICogQHBhcmFtIFt1dnNdIHtGbG9hdDMyQXJyYXl9IGlmIHlvdSB3YW50IHRvIHNwZWNpZnkgdGhlIHV2c1xuICogQHBhcmFtIFtpbmRpY2VzXSB7VWludDE2QXJyYXl9IGlmIHlvdSB3YW50IHRvIHNwZWNpZnkgdGhlIGluZGljZXNcbiAqIEBwYXJhbSBbZHJhd01vZGVdIHtudW1iZXJ9IHRoZSBkcmF3TW9kZSwgY2FuIGJlIGFueSBvZiB0aGUgTWVzaC5EUkFXX01PREVTIGNvbnN0c1xuICovXG5mdW5jdGlvbiBNZXNoKHRleHR1cmUsIHZlcnRpY2VzLCB1dnMsIGluZGljZXMsIGRyYXdNb2RlKVxue1xuICAgIGNvcmUuQ29udGFpbmVyLmNhbGwodGhpcyk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgdGV4dHVyZSBvZiB0aGUgTWVzaFxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5UZXh0dXJlfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fdGV4dHVyZSA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgVXZzIG9mIHRoZSBNZXNoXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtGbG9hdDMyQXJyYXl9XG4gICAgICovXG4gICAgdGhpcy51dnMgPSB1dnMgfHwgbmV3IEZsb2F0MzJBcnJheShbMCwgMCxcbiAgICAgICAgMSwgMCxcbiAgICAgICAgMSwgMSxcbiAgICAgICAgMCwgMV0pO1xuXG4gICAgLyoqXG4gICAgICogQW4gYXJyYXkgb2YgdmVydGljZXNcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge0Zsb2F0MzJBcnJheX1cbiAgICAgKi9cbiAgICB0aGlzLnZlcnRpY2VzID0gdmVydGljZXMgfHwgbmV3IEZsb2F0MzJBcnJheShbMCwgMCxcbiAgICAgICAgMTAwLCAwLFxuICAgICAgICAxMDAsIDEwMCxcbiAgICAgICAgMCwgMTAwXSk7XG5cbiAgICAvKlxuICAgICAqIEBtZW1iZXIge1VpbnQxNkFycmF5fSBBbiBhcnJheSBjb250YWluaW5nIHRoZSBpbmRpY2VzIG9mIHRoZSB2ZXJ0aWNlc1xuICAgICAqL1xuICAgIC8vICBUT0RPIGF1dG8gZ2VuZXJhdGUgdGhpcyBiYXNlZCBvbiBkcmF3IG1vZGUhXG4gICAgdGhpcy5pbmRpY2VzID0gaW5kaWNlcyB8fCBuZXcgVWludDE2QXJyYXkoWzAsIDEsIDMsIDJdKTtcblxuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgdGhlIE1lc2ggaXMgZGlydHkgb3Igbm90XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqL1xuICAgIHRoaXMuZGlydHkgPSB0cnVlO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGJsZW5kIG1vZGUgdG8gYmUgYXBwbGllZCB0byB0aGUgc3ByaXRlLiBTZXQgdG8gYFBJWEkuQkxFTkRfTU9ERVMuTk9STUFMYCB0byByZW1vdmUgYW55IGJsZW5kIG1vZGUuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgUElYSS5CTEVORF9NT0RFUy5OT1JNQUxcbiAgICAgKiBAc2VlIFBJWEkuQkxFTkRfTU9ERVNcbiAgICAgKi9cbiAgICB0aGlzLmJsZW5kTW9kZSA9IGNvcmUuQkxFTkRfTU9ERVMuTk9STUFMO1xuXG4gICAgLyoqXG4gICAgICogVHJpYW5nbGVzIGluIGNhbnZhcyBtb2RlIGFyZSBhdXRvbWF0aWNhbGx5IGFudGlhbGlhc2VkLCB1c2UgdGhpcyB2YWx1ZSB0byBmb3JjZSB0cmlhbmdsZXMgdG8gb3ZlcmxhcCBhIGJpdCB3aXRoIGVhY2ggb3RoZXIuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy5jYW52YXNQYWRkaW5nID0gMDtcblxuICAgIC8qKlxuICAgICAqIFRoZSB3YXkgdGhlIE1lc2ggc2hvdWxkIGJlIGRyYXduLCBjYW4gYmUgYW55IG9mIHRoZSB7QGxpbmsgUElYSS5tZXNoLk1lc2guRFJBV19NT0RFU30gY29uc3RzXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQHNlZSBQSVhJLm1lc2guTWVzaC5EUkFXX01PREVTXG4gICAgICovXG4gICAgdGhpcy5kcmF3TW9kZSA9IGRyYXdNb2RlIHx8IE1lc2guRFJBV19NT0RFUy5UUklBTkdMRV9NRVNIO1xuXG4gICAgLy8gcnVuIHRleHR1cmUgc2V0dGVyO1xuICAgIHRoaXMudGV4dHVyZSA9IHRleHR1cmU7XG5cbiAgICAgLyoqXG4gICAgICogVGhlIGRlZmF1bHQgc2hhZGVyIHRoYXQgaXMgdXNlZCBpZiBhIG1lc2ggZG9lc24ndCBoYXZlIGEgbW9yZSBzcGVjaWZpYyBvbmUuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlNoYWRlcn1cbiAgICAgKi9cbiAgICB0aGlzLnNoYWRlciA9IG51bGw7XG59XG5cbi8vIGNvbnN0cnVjdG9yXG5NZXNoLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoY29yZS5Db250YWluZXIucHJvdG90eXBlKTtcbk1lc2gucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gTWVzaDtcbm1vZHVsZS5leHBvcnRzID0gTWVzaDtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoTWVzaC5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBUaGUgdGV4dHVyZSB0aGF0IHRoZSBzcHJpdGUgaXMgdXNpbmdcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuVGV4dHVyZX1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5tZXNoLk1lc2gjXG4gICAgICovXG4gICAgdGV4dHVyZToge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiAgdGhpcy5fdGV4dHVyZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGlmICh0aGlzLl90ZXh0dXJlID09PSB2YWx1ZSlcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuX3RleHR1cmUgPSB2YWx1ZTtcblxuICAgICAgICAgICAgaWYgKHZhbHVlKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIC8vIHdhaXQgZm9yIHRoZSB0ZXh0dXJlIHRvIGxvYWRcbiAgICAgICAgICAgICAgICBpZiAodmFsdWUuYmFzZVRleHR1cmUuaGFzTG9hZGVkKVxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fb25UZXh0dXJlVXBkYXRlKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlLm9uY2UoJ3VwZGF0ZScsIHRoaXMuX29uVGV4dHVyZVVwZGF0ZSwgdGhpcyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxufSk7XG5cbi8qKlxuICogUmVuZGVycyB0aGUgb2JqZWN0IHVzaW5nIHRoZSBXZWJHTCByZW5kZXJlclxuICpcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5XZWJHTFJlbmRlcmVyfSBhIHJlZmVyZW5jZSB0byB0aGUgV2ViR0wgcmVuZGVyZXJcbiAqIEBwcml2YXRlXG4gKi9cbk1lc2gucHJvdG90eXBlLl9yZW5kZXJXZWJHTCA9IGZ1bmN0aW9uIChyZW5kZXJlcilcbntcbiAgICByZW5kZXJlci5zZXRPYmplY3RSZW5kZXJlcihyZW5kZXJlci5wbHVnaW5zLm1lc2gpO1xuICAgIHJlbmRlcmVyLnBsdWdpbnMubWVzaC5yZW5kZXIodGhpcyk7XG59O1xuXG4vKipcbiAqIFJlbmRlcnMgdGhlIG9iamVjdCB1c2luZyB0aGUgQ2FudmFzIHJlbmRlcmVyXG4gKlxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLkNhbnZhc1JlbmRlcmVyfVxuICogQHByaXZhdGVcbiAqL1xuTWVzaC5wcm90b3R5cGUuX3JlbmRlckNhbnZhcyA9IGZ1bmN0aW9uIChyZW5kZXJlcilcbntcbiAgICB2YXIgY29udGV4dCA9IHJlbmRlcmVyLmNvbnRleHQ7XG5cbiAgICB2YXIgdHJhbnNmb3JtID0gdGhpcy53b3JsZFRyYW5zZm9ybTtcblxuICAgIGlmIChyZW5kZXJlci5yb3VuZFBpeGVscylcbiAgICB7XG4gICAgICAgIGNvbnRleHQuc2V0VHJhbnNmb3JtKHRyYW5zZm9ybS5hLCB0cmFuc2Zvcm0uYiwgdHJhbnNmb3JtLmMsIHRyYW5zZm9ybS5kLCB0cmFuc2Zvcm0udHggfCAwLCB0cmFuc2Zvcm0udHkgfCAwKTtcbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgY29udGV4dC5zZXRUcmFuc2Zvcm0odHJhbnNmb3JtLmEsIHRyYW5zZm9ybS5iLCB0cmFuc2Zvcm0uYywgdHJhbnNmb3JtLmQsIHRyYW5zZm9ybS50eCwgdHJhbnNmb3JtLnR5KTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5kcmF3TW9kZSA9PT0gTWVzaC5EUkFXX01PREVTLlRSSUFOR0xFX01FU0gpXG4gICAge1xuICAgICAgICB0aGlzLl9yZW5kZXJDYW52YXNUcmlhbmdsZU1lc2goY29udGV4dCk7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHRoaXMuX3JlbmRlckNhbnZhc1RyaWFuZ2xlcyhjb250ZXh0KTtcbiAgICB9XG59O1xuXG4vKipcbiAqIERyYXdzIHRoZSBvYmplY3QgaW4gVHJpYW5nbGUgTWVzaCBtb2RlIHVzaW5nIGNhbnZhc1xuICpcbiAqIEBwYXJhbSBjb250ZXh0IHtDYW52YXNSZW5kZXJpbmdDb250ZXh0MkR9IHRoZSBjdXJyZW50IGRyYXdpbmcgY29udGV4dFxuICogQHByaXZhdGVcbiAqL1xuTWVzaC5wcm90b3R5cGUuX3JlbmRlckNhbnZhc1RyaWFuZ2xlTWVzaCA9IGZ1bmN0aW9uIChjb250ZXh0KVxue1xuICAgIC8vIGRyYXcgdHJpYW5nbGVzISFcbiAgICB2YXIgdmVydGljZXMgPSB0aGlzLnZlcnRpY2VzO1xuICAgIHZhciB1dnMgPSB0aGlzLnV2cztcblxuICAgIHZhciBsZW5ndGggPSB2ZXJ0aWNlcy5sZW5ndGggLyAyO1xuICAgIC8vIHRoaXMuY291bnQrKztcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoIC0gMjsgaSsrKVxuICAgIHtcbiAgICAgICAgLy8gZHJhdyBzb21lIHRyaWFuZ2xlcyFcbiAgICAgICAgdmFyIGluZGV4ID0gaSAqIDI7XG4gICAgICAgIHRoaXMuX3JlbmRlckNhbnZhc0RyYXdUcmlhbmdsZShjb250ZXh0LCB2ZXJ0aWNlcywgdXZzLCBpbmRleCwgKGluZGV4ICsgMiksIChpbmRleCArIDQpKTtcbiAgICB9XG59O1xuXG4vKipcbiAqIERyYXdzIHRoZSBvYmplY3QgaW4gdHJpYW5nbGUgbW9kZSB1c2luZyBjYW52YXNcbiAqXG4gKiBAcGFyYW0gY29udGV4dCB7Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEfSB0aGUgY3VycmVudCBkcmF3aW5nIGNvbnRleHRcbiAqIEBwcml2YXRlXG4gKi9cbk1lc2gucHJvdG90eXBlLl9yZW5kZXJDYW52YXNUcmlhbmdsZXMgPSBmdW5jdGlvbiAoY29udGV4dClcbntcbiAgICAvLyBkcmF3IHRyaWFuZ2xlcyEhXG4gICAgdmFyIHZlcnRpY2VzID0gdGhpcy52ZXJ0aWNlcztcbiAgICB2YXIgdXZzID0gdGhpcy51dnM7XG4gICAgdmFyIGluZGljZXMgPSB0aGlzLmluZGljZXM7XG5cbiAgICB2YXIgbGVuZ3RoID0gaW5kaWNlcy5sZW5ndGg7XG4gICAgLy8gdGhpcy5jb3VudCsrO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7IGkgKz0gMylcbiAgICB7XG4gICAgICAgIC8vIGRyYXcgc29tZSB0cmlhbmdsZXMhXG4gICAgICAgIHZhciBpbmRleDAgPSBpbmRpY2VzW2ldICogMiwgaW5kZXgxID0gaW5kaWNlc1tpICsgMV0gKiAyLCBpbmRleDIgPSBpbmRpY2VzW2kgKyAyXSAqIDI7XG4gICAgICAgIHRoaXMuX3JlbmRlckNhbnZhc0RyYXdUcmlhbmdsZShjb250ZXh0LCB2ZXJ0aWNlcywgdXZzLCBpbmRleDAsIGluZGV4MSwgaW5kZXgyKTtcbiAgICB9XG59O1xuXG4vKipcbiAqIERyYXdzIG9uZSBvZiB0aGUgdHJpYW5nbGVzIHRoYXQgZm9ybSB0aGlzIE1lc2hcbiAqXG4gKiBAcGFyYW0gY29udGV4dCB7Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEfSB0aGUgY3VycmVudCBkcmF3aW5nIGNvbnRleHRcbiAqIEBwYXJhbSB2ZXJ0aWNlcyB7RmxvYXQzMkFycmF5fSBhIHJlZmVyZW5jZSB0byB0aGUgdmVydGljZXMgb2YgdGhlIE1lc2hcbiAqIEBwYXJhbSB1dnMge0Zsb2F0MzJBcnJheX0gYSByZWZlcmVuY2UgdG8gdGhlIHV2cyBvZiB0aGUgTWVzaFxuICogQHBhcmFtIGluZGV4MCB7bnVtYmVyfSB0aGUgaW5kZXggb2YgdGhlIGZpcnN0IHZlcnRleFxuICogQHBhcmFtIGluZGV4MSB7bnVtYmVyfSB0aGUgaW5kZXggb2YgdGhlIHNlY29uZCB2ZXJ0ZXhcbiAqIEBwYXJhbSBpbmRleDIge251bWJlcn0gdGhlIGluZGV4IG9mIHRoZSB0aGlyZCB2ZXJ0ZXhcbiAqIEBwcml2YXRlXG4gKi9cbk1lc2gucHJvdG90eXBlLl9yZW5kZXJDYW52YXNEcmF3VHJpYW5nbGUgPSBmdW5jdGlvbiAoY29udGV4dCwgdmVydGljZXMsIHV2cywgaW5kZXgwLCBpbmRleDEsIGluZGV4MilcbntcbiAgICB2YXIgdGV4dHVyZVNvdXJjZSA9IHRoaXMuX3RleHR1cmUuYmFzZVRleHR1cmUuc291cmNlO1xuICAgIHZhciB0ZXh0dXJlV2lkdGggPSB0aGlzLl90ZXh0dXJlLmJhc2VUZXh0dXJlLndpZHRoO1xuICAgIHZhciB0ZXh0dXJlSGVpZ2h0ID0gdGhpcy5fdGV4dHVyZS5iYXNlVGV4dHVyZS5oZWlnaHQ7XG5cbiAgICB2YXIgeDAgPSB2ZXJ0aWNlc1tpbmRleDBdLCB4MSA9IHZlcnRpY2VzW2luZGV4MV0sIHgyID0gdmVydGljZXNbaW5kZXgyXTtcbiAgICB2YXIgeTAgPSB2ZXJ0aWNlc1tpbmRleDAgKyAxXSwgeTEgPSB2ZXJ0aWNlc1tpbmRleDEgKyAxXSwgeTIgPSB2ZXJ0aWNlc1tpbmRleDIgKyAxXTtcblxuICAgIHZhciB1MCA9IHV2c1tpbmRleDBdICogdGV4dHVyZVdpZHRoLCB1MSA9IHV2c1tpbmRleDFdICogdGV4dHVyZVdpZHRoLCB1MiA9IHV2c1tpbmRleDJdICogdGV4dHVyZVdpZHRoO1xuICAgIHZhciB2MCA9IHV2c1tpbmRleDAgKyAxXSAqIHRleHR1cmVIZWlnaHQsIHYxID0gdXZzW2luZGV4MSArIDFdICogdGV4dHVyZUhlaWdodCwgdjIgPSB1dnNbaW5kZXgyICsgMV0gKiB0ZXh0dXJlSGVpZ2h0O1xuXG4gICAgaWYgKHRoaXMuY2FudmFzUGFkZGluZyA+IDApXG4gICAge1xuICAgICAgICB2YXIgcGFkZGluZ1ggPSB0aGlzLmNhbnZhc1BhZGRpbmcgLyB0aGlzLndvcmxkVHJhbnNmb3JtLmE7XG4gICAgICAgIHZhciBwYWRkaW5nWSA9IHRoaXMuY2FudmFzUGFkZGluZyAvIHRoaXMud29ybGRUcmFuc2Zvcm0uZDtcbiAgICAgICAgdmFyIGNlbnRlclggPSAoeDAgKyB4MSArIHgyKSAvIDM7XG4gICAgICAgIHZhciBjZW50ZXJZID0gKHkwICsgeTEgKyB5MikgLyAzO1xuXG4gICAgICAgIHZhciBub3JtWCA9IHgwIC0gY2VudGVyWDtcbiAgICAgICAgdmFyIG5vcm1ZID0geTAgLSBjZW50ZXJZO1xuXG4gICAgICAgIHZhciBkaXN0ID0gTWF0aC5zcXJ0KG5vcm1YICogbm9ybVggKyBub3JtWSAqIG5vcm1ZKTtcbiAgICAgICAgeDAgPSBjZW50ZXJYICsgKG5vcm1YIC8gZGlzdCkgKiAoZGlzdCArIHBhZGRpbmdYKTtcbiAgICAgICAgeTAgPSBjZW50ZXJZICsgKG5vcm1ZIC8gZGlzdCkgKiAoZGlzdCArIHBhZGRpbmdZKTtcblxuICAgICAgICAvL1xuXG4gICAgICAgIG5vcm1YID0geDEgLSBjZW50ZXJYO1xuICAgICAgICBub3JtWSA9IHkxIC0gY2VudGVyWTtcblxuICAgICAgICBkaXN0ID0gTWF0aC5zcXJ0KG5vcm1YICogbm9ybVggKyBub3JtWSAqIG5vcm1ZKTtcbiAgICAgICAgeDEgPSBjZW50ZXJYICsgKG5vcm1YIC8gZGlzdCkgKiAoZGlzdCArIHBhZGRpbmdYKTtcbiAgICAgICAgeTEgPSBjZW50ZXJZICsgKG5vcm1ZIC8gZGlzdCkgKiAoZGlzdCArIHBhZGRpbmdZKTtcblxuICAgICAgICBub3JtWCA9IHgyIC0gY2VudGVyWDtcbiAgICAgICAgbm9ybVkgPSB5MiAtIGNlbnRlclk7XG5cbiAgICAgICAgZGlzdCA9IE1hdGguc3FydChub3JtWCAqIG5vcm1YICsgbm9ybVkgKiBub3JtWSk7XG4gICAgICAgIHgyID0gY2VudGVyWCArIChub3JtWCAvIGRpc3QpICogKGRpc3QgKyBwYWRkaW5nWCk7XG4gICAgICAgIHkyID0gY2VudGVyWSArIChub3JtWSAvIGRpc3QpICogKGRpc3QgKyBwYWRkaW5nWSk7XG4gICAgfVxuXG4gICAgY29udGV4dC5zYXZlKCk7XG4gICAgY29udGV4dC5iZWdpblBhdGgoKTtcblxuXG4gICAgY29udGV4dC5tb3ZlVG8oeDAsIHkwKTtcbiAgICBjb250ZXh0LmxpbmVUbyh4MSwgeTEpO1xuICAgIGNvbnRleHQubGluZVRvKHgyLCB5Mik7XG5cbiAgICBjb250ZXh0LmNsb3NlUGF0aCgpO1xuXG4gICAgY29udGV4dC5jbGlwKCk7XG5cbiAgICAvLyBDb21wdXRlIG1hdHJpeCB0cmFuc2Zvcm1cbiAgICB2YXIgZGVsdGEgPSAgKHUwICogdjEpICAgICAgKyAodjAgKiB1MikgICAgICArICh1MSAqIHYyKSAgICAgIC0gKHYxICogdTIpICAgICAgLSAodjAgKiB1MSkgICAgICAtICh1MCAqIHYyKTtcbiAgICB2YXIgZGVsdGFBID0gKHgwICogdjEpICAgICAgKyAodjAgKiB4MikgICAgICArICh4MSAqIHYyKSAgICAgIC0gKHYxICogeDIpICAgICAgLSAodjAgKiB4MSkgICAgICAtICh4MCAqIHYyKTtcbiAgICB2YXIgZGVsdGFCID0gKHUwICogeDEpICAgICAgKyAoeDAgKiB1MikgICAgICArICh1MSAqIHgyKSAgICAgIC0gKHgxICogdTIpICAgICAgLSAoeDAgKiB1MSkgICAgICAtICh1MCAqIHgyKTtcbiAgICB2YXIgZGVsdGFDID0gKHUwICogdjEgKiB4MikgKyAodjAgKiB4MSAqIHUyKSArICh4MCAqIHUxICogdjIpIC0gKHgwICogdjEgKiB1MikgLSAodjAgKiB1MSAqIHgyKSAtICh1MCAqIHgxICogdjIpO1xuICAgIHZhciBkZWx0YUQgPSAoeTAgKiB2MSkgICAgICArICh2MCAqIHkyKSAgICAgICsgKHkxICogdjIpICAgICAgLSAodjEgKiB5MikgICAgICAtICh2MCAqIHkxKSAgICAgIC0gKHkwICogdjIpO1xuICAgIHZhciBkZWx0YUUgPSAodTAgKiB5MSkgICAgICArICh5MCAqIHUyKSAgICAgICsgKHUxICogeTIpICAgICAgLSAoeTEgKiB1MikgICAgICAtICh5MCAqIHUxKSAgICAgIC0gKHUwICogeTIpO1xuICAgIHZhciBkZWx0YUYgPSAodTAgKiB2MSAqIHkyKSArICh2MCAqIHkxICogdTIpICsgKHkwICogdTEgKiB2MikgLSAoeTAgKiB2MSAqIHUyKSAtICh2MCAqIHUxICogeTIpIC0gKHUwICogeTEgKiB2Mik7XG5cbiAgICBjb250ZXh0LnRyYW5zZm9ybShkZWx0YUEgLyBkZWx0YSwgZGVsdGFEIC8gZGVsdGEsXG4gICAgICAgIGRlbHRhQiAvIGRlbHRhLCBkZWx0YUUgLyBkZWx0YSxcbiAgICAgICAgZGVsdGFDIC8gZGVsdGEsIGRlbHRhRiAvIGRlbHRhKTtcblxuICAgIGNvbnRleHQuZHJhd0ltYWdlKHRleHR1cmVTb3VyY2UsIDAsIDApO1xuICAgIGNvbnRleHQucmVzdG9yZSgpO1xufTtcblxuXG5cbi8qKlxuICogUmVuZGVycyBhIGZsYXQgTWVzaFxuICpcbiAqIEBwYXJhbSBNZXNoIHtQSVhJLm1lc2guTWVzaH0gVGhlIE1lc2ggdG8gcmVuZGVyXG4gKiBAcHJpdmF0ZVxuICovXG5NZXNoLnByb3RvdHlwZS5yZW5kZXJNZXNoRmxhdCA9IGZ1bmN0aW9uIChNZXNoKVxue1xuICAgIHZhciBjb250ZXh0ID0gdGhpcy5jb250ZXh0O1xuICAgIHZhciB2ZXJ0aWNlcyA9IE1lc2gudmVydGljZXM7XG5cbiAgICB2YXIgbGVuZ3RoID0gdmVydGljZXMubGVuZ3RoLzI7XG4gICAgLy8gdGhpcy5jb3VudCsrO1xuXG4gICAgY29udGV4dC5iZWdpblBhdGgoKTtcbiAgICBmb3IgKHZhciBpPTE7IGkgPCBsZW5ndGgtMjsgaSsrKVxuICAgIHtcbiAgICAgICAgLy8gZHJhdyBzb21lIHRyaWFuZ2xlcyFcbiAgICAgICAgdmFyIGluZGV4ID0gaSoyO1xuXG4gICAgICAgIHZhciB4MCA9IHZlcnRpY2VzW2luZGV4XSwgICB4MSA9IHZlcnRpY2VzW2luZGV4KzJdLCB4MiA9IHZlcnRpY2VzW2luZGV4KzRdO1xuICAgICAgICB2YXIgeTAgPSB2ZXJ0aWNlc1tpbmRleCsxXSwgeTEgPSB2ZXJ0aWNlc1tpbmRleCszXSwgeTIgPSB2ZXJ0aWNlc1tpbmRleCs1XTtcblxuICAgICAgICBjb250ZXh0Lm1vdmVUbyh4MCwgeTApO1xuICAgICAgICBjb250ZXh0LmxpbmVUbyh4MSwgeTEpO1xuICAgICAgICBjb250ZXh0LmxpbmVUbyh4MiwgeTIpO1xuICAgIH1cblxuICAgIGNvbnRleHQuZmlsbFN0eWxlID0gJyNGRjAwMDAnO1xuICAgIGNvbnRleHQuZmlsbCgpO1xuICAgIGNvbnRleHQuY2xvc2VQYXRoKCk7XG59O1xuXG4vKipcbiAqIFdoZW4gdGhlIHRleHR1cmUgaXMgdXBkYXRlZCwgdGhpcyBldmVudCB3aWxsIGZpcmUgdG8gdXBkYXRlIHRoZSBzY2FsZSBhbmQgZnJhbWVcbiAqXG4gKiBAcGFyYW0gZXZlbnRcbiAqIEBwcml2YXRlXG4gKi9cbk1lc2gucHJvdG90eXBlLl9vblRleHR1cmVVcGRhdGUgPSBmdW5jdGlvbiAoKVxue1xuICAgIHRoaXMudXBkYXRlRnJhbWUgPSB0cnVlO1xufTtcblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBib3VuZHMgb2YgdGhlIG1lc2ggYXMgYSByZWN0YW5nbGUuIFRoZSBib3VuZHMgY2FsY3VsYXRpb24gdGFrZXMgdGhlIHdvcmxkVHJhbnNmb3JtIGludG8gYWNjb3VudC5cbiAqXG4gKiBAcGFyYW0gbWF0cml4IHtQSVhJLk1hdHJpeH0gdGhlIHRyYW5zZm9ybWF0aW9uIG1hdHJpeCBvZiB0aGUgc3ByaXRlXG4gKiBAcmV0dXJuIHtQSVhJLlJlY3RhbmdsZX0gdGhlIGZyYW1pbmcgcmVjdGFuZ2xlXG4gKi9cbk1lc2gucHJvdG90eXBlLmdldEJvdW5kcyA9IGZ1bmN0aW9uIChtYXRyaXgpXG57XG4gICAgaWYgKCF0aGlzLl9jdXJyZW50Qm91bmRzKSB7XG4gICAgICAgIHZhciB3b3JsZFRyYW5zZm9ybSA9IG1hdHJpeCB8fCB0aGlzLndvcmxkVHJhbnNmb3JtO1xuXG4gICAgICAgIHZhciBhID0gd29ybGRUcmFuc2Zvcm0uYTtcbiAgICAgICAgdmFyIGIgPSB3b3JsZFRyYW5zZm9ybS5iO1xuICAgICAgICB2YXIgYyA9IHdvcmxkVHJhbnNmb3JtLmM7XG4gICAgICAgIHZhciBkID0gd29ybGRUcmFuc2Zvcm0uZDtcbiAgICAgICAgdmFyIHR4ID0gd29ybGRUcmFuc2Zvcm0udHg7XG4gICAgICAgIHZhciB0eSA9IHdvcmxkVHJhbnNmb3JtLnR5O1xuXG4gICAgICAgIHZhciBtYXhYID0gLUluZmluaXR5O1xuICAgICAgICB2YXIgbWF4WSA9IC1JbmZpbml0eTtcblxuICAgICAgICB2YXIgbWluWCA9IEluZmluaXR5O1xuICAgICAgICB2YXIgbWluWSA9IEluZmluaXR5O1xuXG4gICAgICAgIHZhciB2ZXJ0aWNlcyA9IHRoaXMudmVydGljZXM7XG4gICAgICAgIGZvciAodmFyIGkgPSAwLCBuID0gdmVydGljZXMubGVuZ3RoOyBpIDwgbjsgaSArPSAyKSB7XG4gICAgICAgICAgICB2YXIgcmF3WCA9IHZlcnRpY2VzW2ldLCByYXdZID0gdmVydGljZXNbaSArIDFdO1xuICAgICAgICAgICAgdmFyIHggPSAoYSAqIHJhd1gpICsgKGMgKiByYXdZKSArIHR4O1xuICAgICAgICAgICAgdmFyIHkgPSAoZCAqIHJhd1kpICsgKGIgKiByYXdYKSArIHR5O1xuXG4gICAgICAgICAgICBtaW5YID0geCA8IG1pblggPyB4IDogbWluWDtcbiAgICAgICAgICAgIG1pblkgPSB5IDwgbWluWSA/IHkgOiBtaW5ZO1xuXG4gICAgICAgICAgICBtYXhYID0geCA+IG1heFggPyB4IDogbWF4WDtcbiAgICAgICAgICAgIG1heFkgPSB5ID4gbWF4WSA/IHkgOiBtYXhZO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG1pblggPT09IC1JbmZpbml0eSB8fCBtYXhZID09PSBJbmZpbml0eSkge1xuICAgICAgICAgICAgcmV0dXJuIGNvcmUuUmVjdGFuZ2xlLkVNUFRZO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGJvdW5kcyA9IHRoaXMuX2JvdW5kcztcblxuICAgICAgICBib3VuZHMueCA9IG1pblg7XG4gICAgICAgIGJvdW5kcy53aWR0aCA9IG1heFggLSBtaW5YO1xuXG4gICAgICAgIGJvdW5kcy55ID0gbWluWTtcbiAgICAgICAgYm91bmRzLmhlaWdodCA9IG1heFkgLSBtaW5ZO1xuXG4gICAgICAgIC8vIHN0b3JlIGEgcmVmZXJlbmNlIHNvIHRoYXQgaWYgdGhpcyBmdW5jdGlvbiBnZXRzIGNhbGxlZCBhZ2FpbiBpbiB0aGUgcmVuZGVyIGN5Y2xlIHdlIGRvIG5vdCBoYXZlIHRvIHJlY2FsY3VsYXRlXG4gICAgICAgIHRoaXMuX2N1cnJlbnRCb3VuZHMgPSBib3VuZHM7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuX2N1cnJlbnRCb3VuZHM7XG59O1xuXG4vKipcbiAqIFRlc3RzIGlmIGEgcG9pbnQgaXMgaW5zaWRlIHRoaXMgbWVzaC4gV29ya3Mgb25seSBmb3IgVFJJQU5HTEVfTUVTSFxuICpcbiAqIEBwYXJhbSBwb2ludCB7UElYSS5Qb2ludH0gdGhlIHBvaW50IHRvIHRlc3RcbiAqIEByZXR1cm4ge2Jvb2xlYW59IHRoZSByZXN1bHQgb2YgdGhlIHRlc3RcbiAqL1xuTWVzaC5wcm90b3R5cGUuY29udGFpbnNQb2ludCA9IGZ1bmN0aW9uKCBwb2ludCApIHtcbiAgICBpZiAoIXRoaXMuZ2V0Qm91bmRzKCkuY29udGFpbnMocG9pbnQueCwgcG9pbnQueSkpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICB0aGlzLndvcmxkVHJhbnNmb3JtLmFwcGx5SW52ZXJzZShwb2ludCwgIHRlbXBQb2ludCk7XG5cbiAgICB2YXIgdmVydGljZXMgPSB0aGlzLnZlcnRpY2VzO1xuICAgIHZhciBwb2ludHMgPSB0ZW1wUG9seWdvbi5wb2ludHM7XG4gICAgdmFyIGksIGxlbjtcblxuICAgIGlmICh0aGlzLmRyYXdNb2RlID09PSBNZXNoLkRSQVdfTU9ERVMuVFJJQU5HTEVTKSB7XG4gICAgICAgIHZhciBpbmRpY2VzID0gdGhpcy5pbmRpY2VzO1xuICAgICAgICBsZW4gPSB0aGlzLmluZGljZXMubGVuZ3RoO1xuICAgICAgICAvL1RPRE86IGlubGluZSB0aGlzLlxuICAgICAgICBmb3IgKGk9MDtpPGxlbjtpKz0zKSB7XG4gICAgICAgICAgICB2YXIgaW5kMCA9IGluZGljZXNbaV0qMiwgaW5kMSA9IGluZGljZXNbaSsxXSoyLCBpbmQyID0gaW5kaWNlc1tpKzJdKjI7XG4gICAgICAgICAgICBwb2ludHNbMF0gPSB2ZXJ0aWNlc1tpbmQwXTtcbiAgICAgICAgICAgIHBvaW50c1sxXSA9IHZlcnRpY2VzW2luZDArMV07XG4gICAgICAgICAgICBwb2ludHNbMl0gPSB2ZXJ0aWNlc1tpbmQxXTtcbiAgICAgICAgICAgIHBvaW50c1szXSA9IHZlcnRpY2VzW2luZDErMV07XG4gICAgICAgICAgICBwb2ludHNbNF0gPSB2ZXJ0aWNlc1tpbmQyXTtcbiAgICAgICAgICAgIHBvaW50c1s1XSA9IHZlcnRpY2VzW2luZDIrMV07XG4gICAgICAgICAgICBpZiAodGVtcFBvbHlnb24uY29udGFpbnModGVtcFBvaW50LngsIHRlbXBQb2ludC55KSkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgICAgbGVuID0gdmVydGljZXMubGVuZ3RoO1xuICAgICAgICBmb3IgKGk9MDtpPGxlbjtpKz02KSB7XG4gICAgICAgICAgICBwb2ludHNbMF0gPSB2ZXJ0aWNlc1tpXTtcbiAgICAgICAgICAgIHBvaW50c1sxXSA9IHZlcnRpY2VzW2krMV07XG4gICAgICAgICAgICBwb2ludHNbMl0gPSB2ZXJ0aWNlc1tpKzJdO1xuICAgICAgICAgICAgcG9pbnRzWzNdID0gdmVydGljZXNbaSszXTtcbiAgICAgICAgICAgIHBvaW50c1s0XSA9IHZlcnRpY2VzW2krNF07XG4gICAgICAgICAgICBwb2ludHNbNV0gPSB2ZXJ0aWNlc1tpKzVdO1xuICAgICAgICAgICAgaWYgKHRlbXBQb2x5Z29uLmNvbnRhaW5zKHRlbXBQb2ludC54LCB0ZW1wUG9pbnQueSkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG59O1xuXG4vKipcbiAqIERpZmZlcmVudCBkcmF3aW5nIGJ1ZmZlciBtb2RlcyBzdXBwb3J0ZWRcbiAqXG4gKiBAc3RhdGljXG4gKiBAY29uc3RhbnRcbiAqIEBwcm9wZXJ0eSB7b2JqZWN0fSBEUkFXX01PREVTXG4gKiBAcHJvcGVydHkge251bWJlcn0gRFJBV19NT0RFUy5UUklBTkdMRV9NRVNIXG4gKiBAcHJvcGVydHkge251bWJlcn0gRFJBV19NT0RFUy5UUklBTkdMRVNcbiAqL1xuTWVzaC5EUkFXX01PREVTID0ge1xuICAgIFRSSUFOR0xFX01FU0g6IDAsXG4gICAgVFJJQU5HTEVTOiAxXG59O1xuIiwidmFyIE1lc2ggPSByZXF1aXJlKCcuL01lc2gnKTtcblxuLyoqXG4gKiBUaGUgUGxhbmUgYWxsb3dzIHlvdSB0byBkcmF3IGEgdGV4dHVyZSBhY3Jvc3Mgc2V2ZXJhbCBwb2ludHMgYW5kIHRoZW0gbWFuaXB1bGF0ZSB0aGVzZSBwb2ludHNcbiAqXG4gKmBgYGpzXG4gKiBmb3IgKHZhciBpID0gMDsgaSA8IDIwOyBpKyspIHtcbiAqICAgICBwb2ludHMucHVzaChuZXcgUElYSS5Qb2ludChpICogNTAsIDApKTtcbiAqIH07XG4gKiB2YXIgUGxhbmUgPSBuZXcgUElYSS5QbGFuZShQSVhJLlRleHR1cmUuZnJvbUltYWdlKFwic25ha2UucG5nXCIpLCBwb2ludHMpO1xuICogIGBgYFxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5tZXNoLk1lc2hcbiAqIEBtZW1iZXJvZiBQSVhJLm1lc2hcbiAqIEBwYXJhbSB7UElYSS5UZXh0dXJlfSB0ZXh0dXJlIC0gVGhlIHRleHR1cmUgdG8gdXNlIG9uIHRoZSBQbGFuZS5cbiAqIEBwYXJhbSB7aW50fSBzZWdtZW50c1ggLSBUaGUgbnVtYmVyIG94IHggc2VnbWVudHNcbiAqIEBwYXJhbSB7aW50fSBzZWdtZW50c1kgLSBUaGUgbnVtYmVyIG9mIHkgc2VnbWVudHNcbiAqXG4gKi9cbmZ1bmN0aW9uIFBsYW5lKHRleHR1cmUsIHNlZ21lbnRzWCwgc2VnbWVudHNZKVxue1xuICAgIE1lc2guY2FsbCh0aGlzLCB0ZXh0dXJlKTtcblxuICAgIC8qKlxuICAgICAqIFRyYWNrZXIgZm9yIGlmIHRoZSBQbGFuZSBpcyByZWFkeSB0byBiZSBkcmF3bi4gTmVlZGVkIGJlY2F1c2UgTWVzaCBjdG9yIGNhblxuICAgICAqIGNhbGwgX29uVGV4dHVyZVVwZGF0ZWQgd2hpY2ggY291bGQgY2FsbCByZWZyZXNoIHRvbyBlYXJseS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9yZWFkeSA9IHRydWU7XG5cbiAgICB0aGlzLnNlZ21lbnRzWCA9ICBzZWdtZW50c1ggfHwgMTA7XG4gICAgdGhpcy5zZWdtZW50c1kgPSBzZWdtZW50c1kgfHwgMTA7XG5cbiAgICB0aGlzLmRyYXdNb2RlID0gTWVzaC5EUkFXX01PREVTLlRSSUFOR0xFUztcbiAgICB0aGlzLnJlZnJlc2goKTtcblxufVxuXG5cbi8vIGNvbnN0cnVjdG9yXG5QbGFuZS5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKCBNZXNoLnByb3RvdHlwZSApO1xuUGxhbmUucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gUGxhbmU7XG5tb2R1bGUuZXhwb3J0cyA9IFBsYW5lO1xuXG4vKipcbiAqIFJlZnJlc2hlc1xuICpcbiAqL1xuUGxhbmUucHJvdG90eXBlLnJlZnJlc2ggPSBmdW5jdGlvbigpXG57XG4gICAgdmFyIHRvdGFsID0gdGhpcy5zZWdtZW50c1ggKiB0aGlzLnNlZ21lbnRzWTtcbiAgICB2YXIgdmVydHMgPSBbXTtcbiAgICB2YXIgY29sb3JzID0gW107XG4gICAgdmFyIHV2cyA9IFtdO1xuICAgIHZhciBpbmRpY2VzID0gW107XG4gICAgdmFyIHRleHR1cmUgPSB0aGlzLnRleHR1cmU7XG5cbiAgLy8gIHRleHR1cmUud2lkdGggPSA4MDAgdGV4dHVyZS53aWR0aCB8fCA4MDA7XG4gLy8gICB0ZXh0dXJlLmhlaWdodCA9IDgwMC8vdGV4dHVyZS5oZWlnaHQgfHwgODAwO1xuXG4gICAgdmFyIHNlZ21lbnRzWFN1YiA9IHRoaXMuc2VnbWVudHNYIC0gMTtcbiAgICB2YXIgc2VnbWVudHNZU3ViID0gdGhpcy5zZWdtZW50c1kgLSAxO1xuICAgIHZhciBpID0gMDtcblxuICAgIHZhciBzaXplWCA9IHRleHR1cmUud2lkdGggLyBzZWdtZW50c1hTdWI7XG4gICAgdmFyIHNpemVZID0gdGV4dHVyZS5oZWlnaHQgLyBzZWdtZW50c1lTdWI7XG5cbiAgICBmb3IgKGkgPSAwOyBpIDwgdG90YWw7IGkrKykge1xuXG4gICAgICAgIHZhciB4ID0gKGkgJSB0aGlzLnNlZ21lbnRzWCk7XG4gICAgICAgIHZhciB5ID0gKCAoaSAvIHRoaXMuc2VnbWVudHNYICkgfCAwICk7XG5cblxuICAgICAgICB2ZXJ0cy5wdXNoKCh4ICogc2l6ZVgpLFxuICAgICAgICAgICAgICAgICAgICh5ICogc2l6ZVkpKTtcblxuICAgICAgICAvLyB0aGlzIHdvcmtzIGZvciByZWN0YW5ndWxhciB0ZXh0dXJlcy4gXG4gICAgICAgIHV2cy5wdXNoKHRleHR1cmUuX3V2cy54MCArICh0ZXh0dXJlLl91dnMueDEgLSB0ZXh0dXJlLl91dnMueDApICogKHggLyAodGhpcy5zZWdtZW50c1gtMSkpLCB0ZXh0dXJlLl91dnMueTAgKyAodGV4dHVyZS5fdXZzLnkzLXRleHR1cmUuX3V2cy55MCkgKiAoeS8gKHRoaXMuc2VnbWVudHNZLTEpKSk7XG4gICAgICB9XG5cbiAgICAvLyAgY29uc1xuXG4gICAgdmFyIHRvdGFsU3ViID0gc2VnbWVudHNYU3ViICogc2VnbWVudHNZU3ViO1xuXG4gICAgZm9yIChpID0gMDsgaSA8IHRvdGFsU3ViOyBpKyspIHtcblxuICAgICAgICB2YXIgeHBvcyA9IGkgJSBzZWdtZW50c1hTdWI7XG4gICAgICAgIHZhciB5cG9zID0gKGkgLyBzZWdtZW50c1hTdWIgKSB8IDA7XG5cblxuICAgICAgICB2YXIgIHZhbHVlID0gKHlwb3MgKiB0aGlzLnNlZ21lbnRzWCkgKyB4cG9zO1xuICAgICAgICB2YXIgIHZhbHVlMiA9ICh5cG9zICogdGhpcy5zZWdtZW50c1gpICsgeHBvcyArIDE7XG4gICAgICAgIHZhciAgdmFsdWUzID0gKCh5cG9zKzEpICogdGhpcy5zZWdtZW50c1gpICsgeHBvcztcbiAgICAgICAgdmFyICB2YWx1ZTQgPSAoKHlwb3MrMSkgKiB0aGlzLnNlZ21lbnRzWCkgKyB4cG9zICsgMTtcblxuICAgICAgICBpbmRpY2VzLnB1c2godmFsdWUsIHZhbHVlMiwgdmFsdWUzKTtcbiAgICAgICAgaW5kaWNlcy5wdXNoKHZhbHVlMiwgdmFsdWU0LCB2YWx1ZTMpO1xuICAgIH1cblxuXG4gICAgLy9jb25zb2xlLmxvZyhpbmRpY2VzKVxuICAgIHRoaXMudmVydGljZXMgPSBuZXcgRmxvYXQzMkFycmF5KHZlcnRzKTtcbiAgICB0aGlzLnV2cyA9IG5ldyBGbG9hdDMyQXJyYXkodXZzKTtcbiAgICB0aGlzLmNvbG9ycyA9IG5ldyBGbG9hdDMyQXJyYXkoY29sb3JzKTtcbiAgICB0aGlzLmluZGljZXMgPSBuZXcgVWludDE2QXJyYXkoaW5kaWNlcyk7XG59O1xuXG4vKipcbiAqIENsZWFyIHRleHR1cmUgVVZzIHdoZW4gbmV3IHRleHR1cmUgaXMgc2V0XG4gKlxuICogQHByaXZhdGVcbiAqL1xuUGxhbmUucHJvdG90eXBlLl9vblRleHR1cmVVcGRhdGUgPSBmdW5jdGlvbiAoKVxue1xuICAgIE1lc2gucHJvdG90eXBlLl9vblRleHR1cmVVcGRhdGUuY2FsbCh0aGlzKTtcblxuICAgIC8vIHdhaXQgZm9yIHRoZSBQbGFuZSBjdG9yIHRvIGZpbmlzaCBiZWZvcmUgY2FsbGluZyByZWZyZXNoXG4gICAgaWYgKHRoaXMuX3JlYWR5KSB7XG4gICAgICAgIHRoaXMucmVmcmVzaCgpO1xuICAgIH1cbn07XG4iLCJ2YXIgTWVzaCA9IHJlcXVpcmUoJy4vTWVzaCcpO1xudmFyIGNvcmUgPSByZXF1aXJlKCcuLi9jb3JlJyk7XG5cbi8qKlxuICogVGhlIHJvcGUgYWxsb3dzIHlvdSB0byBkcmF3IGEgdGV4dHVyZSBhY3Jvc3Mgc2V2ZXJhbCBwb2ludHMgYW5kIHRoZW0gbWFuaXB1bGF0ZSB0aGVzZSBwb2ludHNcbiAqXG4gKmBgYGpzXG4gKiBmb3IgKHZhciBpID0gMDsgaSA8IDIwOyBpKyspIHtcbiAqICAgICBwb2ludHMucHVzaChuZXcgUElYSS5Qb2ludChpICogNTAsIDApKTtcbiAqIH07XG4gKiB2YXIgcm9wZSA9IG5ldyBQSVhJLlJvcGUoUElYSS5UZXh0dXJlLmZyb21JbWFnZShcInNuYWtlLnBuZ1wiKSwgcG9pbnRzKTtcbiAqICBgYGBcbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkubWVzaC5NZXNoXG4gKiBAbWVtYmVyb2YgUElYSS5tZXNoXG4gKiBAcGFyYW0ge1BJWEkuVGV4dHVyZX0gdGV4dHVyZSAtIFRoZSB0ZXh0dXJlIHRvIHVzZSBvbiB0aGUgcm9wZS5cbiAqIEBwYXJhbSB7UElYSS5Qb2ludFtdfSBwb2ludHMgLSBBbiBhcnJheSBvZiB7QGxpbmsgUElYSS5Qb2ludH0gb2JqZWN0cyB0byBjb25zdHJ1Y3QgdGhpcyByb3BlLlxuICpcbiAqL1xuZnVuY3Rpb24gUm9wZSh0ZXh0dXJlLCBwb2ludHMpXG57XG4gICAgTWVzaC5jYWxsKHRoaXMsIHRleHR1cmUpO1xuXG4gICAgLypcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlBvaW50W119IEFuIGFycmF5IG9mIHBvaW50cyB0aGF0IGRldGVybWluZSB0aGUgcm9wZVxuICAgICAqL1xuICAgIHRoaXMucG9pbnRzID0gcG9pbnRzO1xuXG4gICAgLypcbiAgICAgKiBAbWVtYmVyIHtGbG9hdDMyQXJyYXl9IEFuIGFycmF5IG9mIHZlcnRpY2VzIHVzZWQgdG8gY29uc3RydWN0IHRoaXMgcm9wZS5cbiAgICAgKi9cbiAgICB0aGlzLnZlcnRpY2VzID0gbmV3IEZsb2F0MzJBcnJheShwb2ludHMubGVuZ3RoICogNCk7XG5cbiAgICAvKlxuICAgICAqIEBtZW1iZXIge0Zsb2F0MzJBcnJheX0gVGhlIFdlYkdMIFV2cyBvZiB0aGUgcm9wZS5cbiAgICAgKi9cbiAgICB0aGlzLnV2cyA9IG5ldyBGbG9hdDMyQXJyYXkocG9pbnRzLmxlbmd0aCAqIDQpO1xuXG4gICAgLypcbiAgICAgKiBAbWVtYmVyIHtGbG9hdDMyQXJyYXl9IEFuIGFycmF5IGNvbnRhaW5pbmcgdGhlIGNvbG9yIGNvbXBvbmVudHNcbiAgICAgKi9cbiAgICB0aGlzLmNvbG9ycyA9IG5ldyBGbG9hdDMyQXJyYXkocG9pbnRzLmxlbmd0aCAqIDIpO1xuXG4gICAgLypcbiAgICAgKiBAbWVtYmVyIHtVaW50MTZBcnJheX0gQW4gYXJyYXkgY29udGFpbmluZyB0aGUgaW5kaWNlcyBvZiB0aGUgdmVydGljZXNcbiAgICAgKi9cbiAgICB0aGlzLmluZGljZXMgPSBuZXcgVWludDE2QXJyYXkocG9pbnRzLmxlbmd0aCAqIDIpO1xuXG4gICAgLyoqXG4gICAgICogVHJhY2tlciBmb3IgaWYgdGhlIHJvcGUgaXMgcmVhZHkgdG8gYmUgZHJhd24uIE5lZWRlZCBiZWNhdXNlIE1lc2ggY3RvciBjYW5cbiAgICAgKiBjYWxsIF9vblRleHR1cmVVcGRhdGVkIHdoaWNoIGNvdWxkIGNhbGwgcmVmcmVzaCB0b28gZWFybHkuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgIHRoaXMuX3JlYWR5ID0gdHJ1ZTtcblxuICAgICB0aGlzLnJlZnJlc2goKTtcbn1cblxuXG4vLyBjb25zdHJ1Y3RvclxuUm9wZS5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKE1lc2gucHJvdG90eXBlKTtcblJvcGUucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gUm9wZTtcbm1vZHVsZS5leHBvcnRzID0gUm9wZTtcblxuLyoqXG4gKiBSZWZyZXNoZXNcbiAqXG4gKi9cblJvcGUucHJvdG90eXBlLnJlZnJlc2ggPSBmdW5jdGlvbiAoKVxue1xuICAgIHZhciBwb2ludHMgPSB0aGlzLnBvaW50cztcblxuICAgIC8vIGlmIHRvbyBsaXR0bGUgcG9pbnRzLCBvciB0ZXh0dXJlIGhhc24ndCBnb3QgVVZzIHNldCB5ZXQganVzdCBtb3ZlIG9uLlxuICAgIGlmIChwb2ludHMubGVuZ3RoIDwgMSB8fCAhdGhpcy5fdGV4dHVyZS5fdXZzKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHZhciB1dnMgPSB0aGlzLnV2cztcblxuICAgIHZhciBpbmRpY2VzID0gdGhpcy5pbmRpY2VzO1xuICAgIHZhciBjb2xvcnMgPSB0aGlzLmNvbG9ycztcblxuICAgIHZhciB0ZXh0dXJlVXZzID0gdGhpcy5fdGV4dHVyZS5fdXZzO1xuICAgIHZhciBvZmZzZXQgPSBuZXcgY29yZS5Qb2ludCh0ZXh0dXJlVXZzLngwLCB0ZXh0dXJlVXZzLnkwKTtcbiAgICB2YXIgZmFjdG9yID0gbmV3IGNvcmUuUG9pbnQodGV4dHVyZVV2cy54MiAtIHRleHR1cmVVdnMueDAsIHRleHR1cmVVdnMueTIgLSB0ZXh0dXJlVXZzLnkwKTtcblxuICAgIHV2c1swXSA9IDAgKyBvZmZzZXQueDtcbiAgICB1dnNbMV0gPSAwICsgb2Zmc2V0Lnk7XG4gICAgdXZzWzJdID0gMCArIG9mZnNldC54O1xuICAgIHV2c1szXSA9IDEgKiBmYWN0b3IueSArIG9mZnNldC55O1xuXG4gICAgY29sb3JzWzBdID0gMTtcbiAgICBjb2xvcnNbMV0gPSAxO1xuXG4gICAgaW5kaWNlc1swXSA9IDA7XG4gICAgaW5kaWNlc1sxXSA9IDE7XG5cbiAgICB2YXIgdG90YWwgPSBwb2ludHMubGVuZ3RoLFxuICAgICAgICBwb2ludCwgaW5kZXgsIGFtb3VudDtcblxuICAgIGZvciAodmFyIGkgPSAxOyBpIDwgdG90YWw7IGkrKylcbiAgICB7XG4gICAgICAgIHBvaW50ID0gcG9pbnRzW2ldO1xuICAgICAgICBpbmRleCA9IGkgKiA0O1xuICAgICAgICAvLyB0aW1lIHRvIGRvIHNvbWUgc21hcnQgZHJhd2luZyFcbiAgICAgICAgYW1vdW50ID0gaSAvICh0b3RhbC0xKTtcblxuICAgICAgICB1dnNbaW5kZXhdID0gYW1vdW50ICogZmFjdG9yLnggKyBvZmZzZXQueDtcbiAgICAgICAgdXZzW2luZGV4KzFdID0gMCArIG9mZnNldC55O1xuXG4gICAgICAgIHV2c1tpbmRleCsyXSA9IGFtb3VudCAqIGZhY3Rvci54ICsgb2Zmc2V0Lng7XG4gICAgICAgIHV2c1tpbmRleCszXSA9IDEgKiBmYWN0b3IueSArIG9mZnNldC55O1xuXG4gICAgICAgIGluZGV4ID0gaSAqIDI7XG4gICAgICAgIGNvbG9yc1tpbmRleF0gPSAxO1xuICAgICAgICBjb2xvcnNbaW5kZXgrMV0gPSAxO1xuXG4gICAgICAgIGluZGV4ID0gaSAqIDI7XG4gICAgICAgIGluZGljZXNbaW5kZXhdID0gaW5kZXg7XG4gICAgICAgIGluZGljZXNbaW5kZXggKyAxXSA9IGluZGV4ICsgMTtcbiAgICB9XG5cbiAgICB0aGlzLmRpcnR5ID0gdHJ1ZTtcbn07XG5cbi8qKlxuICogQ2xlYXIgdGV4dHVyZSBVVnMgd2hlbiBuZXcgdGV4dHVyZSBpcyBzZXRcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5Sb3BlLnByb3RvdHlwZS5fb25UZXh0dXJlVXBkYXRlID0gZnVuY3Rpb24gKClcbntcbiAgICBNZXNoLnByb3RvdHlwZS5fb25UZXh0dXJlVXBkYXRlLmNhbGwodGhpcyk7XG5cbiAgICAvLyB3YWl0IGZvciB0aGUgUm9wZSBjdG9yIHRvIGZpbmlzaCBiZWZvcmUgY2FsbGluZyByZWZyZXNoXG4gICAgaWYgKHRoaXMuX3JlYWR5KSB7XG4gICAgICAgIHRoaXMucmVmcmVzaCgpO1xuICAgIH1cbn07XG5cbi8qKlxuICogVXBkYXRlcyB0aGUgb2JqZWN0IHRyYW5zZm9ybSBmb3IgcmVuZGVyaW5nXG4gKlxuICogQHByaXZhdGVcbiAqL1xuUm9wZS5wcm90b3R5cGUudXBkYXRlVHJhbnNmb3JtID0gZnVuY3Rpb24gKClcbntcbiAgICB2YXIgcG9pbnRzID0gdGhpcy5wb2ludHM7XG5cbiAgICBpZiAocG9pbnRzLmxlbmd0aCA8IDEpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFyIGxhc3RQb2ludCA9IHBvaW50c1swXTtcbiAgICB2YXIgbmV4dFBvaW50O1xuICAgIHZhciBwZXJwWCA9IDA7XG4gICAgdmFyIHBlcnBZID0gMDtcblxuICAgIC8vIHRoaXMuY291bnQgLT0gMC4yO1xuXG4gICAgdmFyIHZlcnRpY2VzID0gdGhpcy52ZXJ0aWNlcztcbiAgICB2YXIgdG90YWwgPSBwb2ludHMubGVuZ3RoLFxuICAgICAgICBwb2ludCwgaW5kZXgsIHJhdGlvLCBwZXJwTGVuZ3RoLCBudW07XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRvdGFsOyBpKyspXG4gICAge1xuICAgICAgICBwb2ludCA9IHBvaW50c1tpXTtcbiAgICAgICAgaW5kZXggPSBpICogNDtcblxuICAgICAgICBpZiAoaSA8IHBvaW50cy5sZW5ndGgtMSlcbiAgICAgICAge1xuICAgICAgICAgICAgbmV4dFBvaW50ID0gcG9pbnRzW2krMV07XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgICBuZXh0UG9pbnQgPSBwb2ludDtcbiAgICAgICAgfVxuXG4gICAgICAgIHBlcnBZID0gLShuZXh0UG9pbnQueCAtIGxhc3RQb2ludC54KTtcbiAgICAgICAgcGVycFggPSBuZXh0UG9pbnQueSAtIGxhc3RQb2ludC55O1xuXG4gICAgICAgIHJhdGlvID0gKDEgLSAoaSAvICh0b3RhbC0xKSkpICogMTA7XG5cbiAgICAgICAgaWYgKHJhdGlvID4gMSlcbiAgICAgICAge1xuICAgICAgICAgICAgcmF0aW8gPSAxO1xuICAgICAgICB9XG5cbiAgICAgICAgcGVycExlbmd0aCA9IE1hdGguc3FydChwZXJwWCAqIHBlcnBYICsgcGVycFkgKiBwZXJwWSk7XG4gICAgICAgIG51bSA9IHRoaXMuX3RleHR1cmUuaGVpZ2h0IC8gMjsgLy8oMjAgKyBNYXRoLmFicyhNYXRoLnNpbigoaSArIHRoaXMuY291bnQpICogMC4zKSAqIDUwKSApKiByYXRpbztcbiAgICAgICAgcGVycFggLz0gcGVycExlbmd0aDtcbiAgICAgICAgcGVycFkgLz0gcGVycExlbmd0aDtcblxuICAgICAgICBwZXJwWCAqPSBudW07XG4gICAgICAgIHBlcnBZICo9IG51bTtcblxuICAgICAgICB2ZXJ0aWNlc1tpbmRleF0gPSBwb2ludC54ICsgcGVycFg7XG4gICAgICAgIHZlcnRpY2VzW2luZGV4KzFdID0gcG9pbnQueSArIHBlcnBZO1xuICAgICAgICB2ZXJ0aWNlc1tpbmRleCsyXSA9IHBvaW50LnggLSBwZXJwWDtcbiAgICAgICAgdmVydGljZXNbaW5kZXgrM10gPSBwb2ludC55IC0gcGVycFk7XG5cbiAgICAgICAgbGFzdFBvaW50ID0gcG9pbnQ7XG4gICAgfVxuXG4gICAgdGhpcy5jb250YWluZXJVcGRhdGVUcmFuc2Zvcm0oKTtcbn07XG4iLCIvKipcbiAqIEBmaWxlICAgICAgICBNYWluIGV4cG9ydCBvZiB0aGUgUElYSSBleHRyYXMgbGlicmFyeVxuICogQGF1dGhvciAgICAgIE1hdCBHcm92ZXMgPG1hdEBnb29kYm95ZGlnaXRhbC5jb20+XG4gKiBAY29weXJpZ2h0ICAgMjAxMy0yMDE1IEdvb2RCb3lEaWdpdGFsXG4gKiBAbGljZW5zZSAgICAge0BsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9waXhpanMvcGl4aS5qcy9ibG9iL21hc3Rlci9MSUNFTlNFfE1JVCBMaWNlbnNlfVxuICovXG5cbi8qKlxuICogQG5hbWVzcGFjZSBQSVhJLm1lc2hcbiAqL1xubW9kdWxlLmV4cG9ydHMgPSB7XG4gICAgTWVzaDogICAgICAgICAgIHJlcXVpcmUoJy4vTWVzaCcpLFxuICAgIFBsYW5lOiAgICAgICAgICAgcmVxdWlyZSgnLi9QbGFuZScpLFxuICAgIFJvcGU6ICAgICAgICAgICByZXF1aXJlKCcuL1JvcGUnKSxcbiAgICBNZXNoUmVuZGVyZXI6ICAgcmVxdWlyZSgnLi93ZWJnbC9NZXNoUmVuZGVyZXInKSxcbiAgICBNZXNoU2hhZGVyOiAgICAgcmVxdWlyZSgnLi93ZWJnbC9NZXNoU2hhZGVyJylcbn07XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uLy4uL2NvcmUnKSxcbiAgICBNZXNoID0gcmVxdWlyZSgnLi4vTWVzaCcpO1xuXG4vKipcbiAqIEBhdXRob3IgTWF0IEdyb3Zlc1xuICpcbiAqIEJpZyB0aGFua3MgdG8gdGhlIHZlcnkgY2xldmVyIE1hdHQgRGVzTGF1cmllcnMgPG1hdHRkZXNsPiBodHRwczovL2dpdGh1Yi5jb20vbWF0dGRlc2wvXG4gKiBmb3IgY3JlYXRpbmcgdGhlIG9yaWdpbmFsIHBpeGkgdmVyc2lvbiFcbiAqIEFsc28gYSB0aGFua3MgdG8gaHR0cHM6Ly9naXRodWIuY29tL2JjaGV2YWxpZXIgZm9yIHR3ZWFraW5nIHRoZSB0aW50IGFuZCBhbHBoYSBzbyB0aGF0IHRoZXkgbm93IHNoYXJlIDQgYnl0ZXMgb24gdGhlIHZlcnRleCBidWZmZXJcbiAqXG4gKiBIZWF2aWx5IGluc3BpcmVkIGJ5IExpYkdEWCdzIE1lc2hSZW5kZXJlcjpcbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS9saWJnZHgvbGliZ2R4L2Jsb2IvbWFzdGVyL2dkeC9zcmMvY29tL2JhZGxvZ2ljL2dkeC9ncmFwaGljcy9nMmQvTWVzaFJlbmRlcmVyLmphdmFcbiAqL1xuXG4vKipcbiAqXG4gKiBAY2xhc3NcbiAqIEBwcml2YXRlXG4gKiBAbWVtYmVyb2YgUElYSS5tZXNoXG4gKiBAZXh0ZW5kcyBQSVhJLk9iamVjdFJlbmRlcmVyXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcn0gVGhlIHJlbmRlcmVyIHRoaXMgc3ByaXRlIGJhdGNoIHdvcmtzIGZvci5cbiAqL1xuZnVuY3Rpb24gTWVzaFJlbmRlcmVyKHJlbmRlcmVyKVxue1xuICAgIGNvcmUuT2JqZWN0UmVuZGVyZXIuY2FsbCh0aGlzLCByZW5kZXJlcik7XG5cblxuICAgIC8qKlxuICAgICAqIEhvbGRzIHRoZSBpbmRpY2VzXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtVaW50MTZBcnJheX1cbiAgICAgKi9cbiAgICBcbiAgICB0aGlzLmluZGljZXMgPSBuZXcgVWludDE2QXJyYXkoMTUwMDApO1xuXG4gICAgLy9UT0RPIHRoaXMgY291bGQgYmUgYSBzaW5nbGUgYnVmZmVyIHNoYXJlZCBhbW9uZ3N0IGFsbCByZW5kZXJlcnMgYXMgd2UgcmV1c2UgdGhpcyBzZXQgdXAgaW4gbW9zdCByZW5kZXJlcnNcbiAgICBmb3IgKHZhciBpPTAsIGo9MDsgaSA8IDE1MDAwOyBpICs9IDYsIGogKz0gNClcbiAgICB7XG4gICAgICAgIHRoaXMuaW5kaWNlc1tpICsgMF0gPSBqICsgMDtcbiAgICAgICAgdGhpcy5pbmRpY2VzW2kgKyAxXSA9IGogKyAxO1xuICAgICAgICB0aGlzLmluZGljZXNbaSArIDJdID0gaiArIDI7XG4gICAgICAgIHRoaXMuaW5kaWNlc1tpICsgM10gPSBqICsgMDtcbiAgICAgICAgdGhpcy5pbmRpY2VzW2kgKyA0XSA9IGogKyAyO1xuICAgICAgICB0aGlzLmluZGljZXNbaSArIDVdID0gaiArIDM7XG4gICAgfVxuXG4gICAgdGhpcy5jdXJyZW50U2hhZGVyID0gbnVsbDtcbn1cblxuTWVzaFJlbmRlcmVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoY29yZS5PYmplY3RSZW5kZXJlci5wcm90b3R5cGUpO1xuTWVzaFJlbmRlcmVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IE1lc2hSZW5kZXJlcjtcbm1vZHVsZS5leHBvcnRzID0gTWVzaFJlbmRlcmVyO1xuXG5jb3JlLldlYkdMUmVuZGVyZXIucmVnaXN0ZXJQbHVnaW4oJ21lc2gnLCBNZXNoUmVuZGVyZXIpO1xuXG4vKipcbiAqIFNldHMgdXAgdGhlIHJlbmRlcmVyIGNvbnRleHQgYW5kIG5lY2Vzc2FyeSBidWZmZXJzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0gZ2wge1dlYkdMUmVuZGVyaW5nQ29udGV4dH0gdGhlIGN1cnJlbnQgV2ViR0wgZHJhd2luZyBjb250ZXh0XG4gKi9cbk1lc2hSZW5kZXJlci5wcm90b3R5cGUub25Db250ZXh0Q2hhbmdlID0gZnVuY3Rpb24gKClcbntcblxufTtcblxuLyoqXG4gKiBSZW5kZXJzIHRoZSBzcHJpdGUgb2JqZWN0LlxuICpcbiAqIEBwYXJhbSBtZXNoIHtQSVhJLm1lc2guTWVzaH0gdGhlIG1lc2ggdG8gcmVuZGVyXG4gKi9cbk1lc2hSZW5kZXJlci5wcm90b3R5cGUucmVuZGVyID0gZnVuY3Rpb24gKG1lc2gpXG57XG4gICAgaWYoIW1lc2guX3ZlcnRleEJ1ZmZlcilcbiAgICB7XG4gICAgICAgIHRoaXMuX2luaXRXZWJHTChtZXNoKTtcbiAgICB9XG5cbiAgICB2YXIgcmVuZGVyZXIgPSB0aGlzLnJlbmRlcmVyLFxuICAgICAgICBnbCA9IHJlbmRlcmVyLmdsLFxuICAgICAgICB0ZXh0dXJlID0gbWVzaC5fdGV4dHVyZS5iYXNlVGV4dHVyZSxcbiAgICAgICAgc2hhZGVyID0gbWVzaC5zaGFkZXI7Ly8gfHwgcmVuZGVyZXIuc2hhZGVyTWFuYWdlci5wbHVnaW5zLm1lc2hTaGFkZXI7XG5cbiAgICB2YXIgZHJhd01vZGUgPSBtZXNoLmRyYXdNb2RlID09PSBNZXNoLkRSQVdfTU9ERVMuVFJJQU5HTEVfTUVTSCA/IGdsLlRSSUFOR0xFX1NUUklQIDogZ2wuVFJJQU5HTEVTO1xuXG4gICAgcmVuZGVyZXIuYmxlbmRNb2RlTWFuYWdlci5zZXRCbGVuZE1vZGUobWVzaC5ibGVuZE1vZGUpO1xuXG4gICAgLy9UT0RPIGNhY2hlIGN1c3RvbSBzdGF0ZS4uXG4gICAgaWYgKCFzaGFkZXIpXG4gICAge1xuICAgICAgICBzaGFkZXIgPSByZW5kZXJlci5zaGFkZXJNYW5hZ2VyLnBsdWdpbnMubWVzaFNoYWRlcjtcbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgc2hhZGVyID0gc2hhZGVyLnNoYWRlcnNbZ2wuaWRdIHx8IHNoYWRlci5nZXRTaGFkZXIocmVuZGVyZXIpOy8vIDogc2hhZGVyO1xuICAgIH1cblxuICAgIHRoaXMucmVuZGVyZXIuc2hhZGVyTWFuYWdlci5zZXRTaGFkZXIoc2hhZGVyKTtcblxuICAgIHNoYWRlci51bmlmb3Jtcy50cmFuc2xhdGlvbk1hdHJpeC52YWx1ZSA9IG1lc2gud29ybGRUcmFuc2Zvcm0udG9BcnJheSh0cnVlKTtcbiAgICBzaGFkZXIudW5pZm9ybXMucHJvamVjdGlvbk1hdHJpeC52YWx1ZSA9IHJlbmRlcmVyLmN1cnJlbnRSZW5kZXJUYXJnZXQucHJvamVjdGlvbk1hdHJpeC50b0FycmF5KHRydWUpO1xuICAgIHNoYWRlci51bmlmb3Jtcy5hbHBoYS52YWx1ZSA9IG1lc2gud29ybGRBbHBoYTtcblxuICAgIHNoYWRlci5zeW5jVW5pZm9ybXMoKTtcblxuICAgIGlmICghbWVzaC5kaXJ0eSlcbiAgICB7XG5cbiAgICAgICAgZ2wuYmluZEJ1ZmZlcihnbC5BUlJBWV9CVUZGRVIsIG1lc2guX3ZlcnRleEJ1ZmZlcik7XG4gICAgICAgIGdsLmJ1ZmZlclN1YkRhdGEoZ2wuQVJSQVlfQlVGRkVSLCAwLCBtZXNoLnZlcnRpY2VzKTtcbiAgICAgICAgZ2wudmVydGV4QXR0cmliUG9pbnRlcihzaGFkZXIuYXR0cmlidXRlcy5hVmVydGV4UG9zaXRpb24sIDIsIGdsLkZMT0FULCBmYWxzZSwgMCwgMCk7XG5cbiAgICAgICAgLy8gdXBkYXRlIHRoZSB1dnNcbiAgICAgICAgZ2wuYmluZEJ1ZmZlcihnbC5BUlJBWV9CVUZGRVIsIG1lc2guX3V2QnVmZmVyKTtcbiAgICAgICAgZ2wudmVydGV4QXR0cmliUG9pbnRlcihzaGFkZXIuYXR0cmlidXRlcy5hVGV4dHVyZUNvb3JkLCAyLCBnbC5GTE9BVCwgZmFsc2UsIDAsIDApO1xuXG5cbiAgICAgICAgZ2wuYWN0aXZlVGV4dHVyZShnbC5URVhUVVJFMCk7XG5cbiAgICAgICBpZiAoIXRleHR1cmUuX2dsVGV4dHVyZXNbZ2wuaWRdKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnJlbmRlcmVyLnVwZGF0ZVRleHR1cmUodGV4dHVyZSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgICAvLyBiaW5kIHRoZSBjdXJyZW50IHRleHR1cmVcbiAgICAgICAgICAgIGdsLmJpbmRUZXh0dXJlKGdsLlRFWFRVUkVfMkQsIHRleHR1cmUuX2dsVGV4dHVyZXNbZ2wuaWRdKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGdsLmJpbmRCdWZmZXIoZ2wuRUxFTUVOVF9BUlJBWV9CVUZGRVIsIG1lc2guX2luZGV4QnVmZmVyKTtcbiAgICAgICAgZ2wuYnVmZmVyU3ViRGF0YShnbC5FTEVNRU5UX0FSUkFZX0JVRkZFUiwgMCwgbWVzaC5pbmRpY2VzKTtcbiAgICB9XG4gICAgZWxzZVxuICAgIHtcblxuICAgICAgICBtZXNoLmRpcnR5ID0gZmFsc2U7XG4gICAgICAgIGdsLmJpbmRCdWZmZXIoZ2wuQVJSQVlfQlVGRkVSLCBtZXNoLl92ZXJ0ZXhCdWZmZXIpO1xuICAgICAgICBnbC5idWZmZXJEYXRhKGdsLkFSUkFZX0JVRkZFUiwgbWVzaC52ZXJ0aWNlcywgZ2wuU1RBVElDX0RSQVcpO1xuICAgICAgICBnbC52ZXJ0ZXhBdHRyaWJQb2ludGVyKHNoYWRlci5hdHRyaWJ1dGVzLmFWZXJ0ZXhQb3NpdGlvbiwgMiwgZ2wuRkxPQVQsIGZhbHNlLCAwLCAwKTtcblxuICAgICAgICAvLyB1cGRhdGUgdGhlIHV2c1xuICAgICAgICBnbC5iaW5kQnVmZmVyKGdsLkFSUkFZX0JVRkZFUiwgbWVzaC5fdXZCdWZmZXIpO1xuICAgICAgICBnbC5idWZmZXJEYXRhKGdsLkFSUkFZX0JVRkZFUiwgbWVzaC51dnMsIGdsLlNUQVRJQ19EUkFXKTtcbiAgICAgICAgZ2wudmVydGV4QXR0cmliUG9pbnRlcihzaGFkZXIuYXR0cmlidXRlcy5hVGV4dHVyZUNvb3JkLCAyLCBnbC5GTE9BVCwgZmFsc2UsIDAsIDApO1xuXG4gICAgICAgICBnbC5hY3RpdmVUZXh0dXJlKGdsLlRFWFRVUkUwKTtcblxuICAgICAgICBpZiAoIXRleHR1cmUuX2dsVGV4dHVyZXNbZ2wuaWRdKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnJlbmRlcmVyLnVwZGF0ZVRleHR1cmUodGV4dHVyZSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgICAvLyBiaW5kIHRoZSBjdXJyZW50IHRleHR1cmVcbiAgICAgICAgICAgIGdsLmJpbmRUZXh0dXJlKGdsLlRFWFRVUkVfMkQsIHRleHR1cmUuX2dsVGV4dHVyZXNbZ2wuaWRdKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGRvbnQgbmVlZCB0byB1cGxvYWQhXG4gICAgICAgIGdsLmJpbmRCdWZmZXIoZ2wuRUxFTUVOVF9BUlJBWV9CVUZGRVIsIG1lc2guX2luZGV4QnVmZmVyKTtcbiAgICAgICAgZ2wuYnVmZmVyRGF0YShnbC5FTEVNRU5UX0FSUkFZX0JVRkZFUiwgbWVzaC5pbmRpY2VzLCBnbC5TVEFUSUNfRFJBVyk7XG5cbiAgICB9XG5cbiAgICBnbC5kcmF3RWxlbWVudHMoZHJhd01vZGUsIG1lc2guaW5kaWNlcy5sZW5ndGgsIGdsLlVOU0lHTkVEX1NIT1JULCAwKTtcblxufTtcblxuLyoqXG4gKiBQcmVwYXJlcyBhbGwgdGhlIGJ1ZmZlcnMgdG8gcmVuZGVyIHRoaXMgbWVzaFxuICogQHBhcmFtIG1lc2gge1BJWEkubWVzaC5NZXNofSB0aGUgbWVzaCB0byByZW5kZXJcbiAqL1xuTWVzaFJlbmRlcmVyLnByb3RvdHlwZS5faW5pdFdlYkdMID0gZnVuY3Rpb24gKG1lc2gpXG57XG4gICAgLy8gYnVpbGQgdGhlIHN0cmlwIVxuICAgIHZhciBnbCA9IHRoaXMucmVuZGVyZXIuZ2w7XG5cbiAgICBtZXNoLl92ZXJ0ZXhCdWZmZXIgPSBnbC5jcmVhdGVCdWZmZXIoKTtcbiAgICBtZXNoLl9pbmRleEJ1ZmZlciA9IGdsLmNyZWF0ZUJ1ZmZlcigpO1xuICAgIG1lc2guX3V2QnVmZmVyID0gZ2wuY3JlYXRlQnVmZmVyKCk7XG5cblxuXG4gICAgZ2wuYmluZEJ1ZmZlcihnbC5BUlJBWV9CVUZGRVIsIG1lc2guX3ZlcnRleEJ1ZmZlcik7XG4gICAgZ2wuYnVmZmVyRGF0YShnbC5BUlJBWV9CVUZGRVIsIG1lc2gudmVydGljZXMsIGdsLkRZTkFNSUNfRFJBVyk7XG5cbiAgICBnbC5iaW5kQnVmZmVyKGdsLkFSUkFZX0JVRkZFUiwgbWVzaC5fdXZCdWZmZXIpO1xuICAgIGdsLmJ1ZmZlckRhdGEoZ2wuQVJSQVlfQlVGRkVSLCAgbWVzaC51dnMsIGdsLlNUQVRJQ19EUkFXKTtcblxuICAgIGlmKG1lc2guY29sb3JzKXtcbiAgICAgICAgbWVzaC5fY29sb3JCdWZmZXIgPSBnbC5jcmVhdGVCdWZmZXIoKTtcbiAgICAgICAgZ2wuYmluZEJ1ZmZlcihnbC5BUlJBWV9CVUZGRVIsIG1lc2guX2NvbG9yQnVmZmVyKTtcbiAgICAgICAgZ2wuYnVmZmVyRGF0YShnbC5BUlJBWV9CVUZGRVIsIG1lc2guY29sb3JzLCBnbC5TVEFUSUNfRFJBVyk7XG4gICAgfVxuXG4gICAgZ2wuYmluZEJ1ZmZlcihnbC5FTEVNRU5UX0FSUkFZX0JVRkZFUiwgbWVzaC5faW5kZXhCdWZmZXIpO1xuICAgIGdsLmJ1ZmZlckRhdGEoZ2wuRUxFTUVOVF9BUlJBWV9CVUZGRVIsIG1lc2guaW5kaWNlcywgZ2wuU1RBVElDX0RSQVcpO1xufTtcblxuXG4vKipcbiAqIEVtcHRpZXMgdGhlIGN1cnJlbnQgYmF0Y2guXG4gKlxuICovXG5NZXNoUmVuZGVyZXIucHJvdG90eXBlLmZsdXNoID0gZnVuY3Rpb24gKClcbntcblxufTtcblxuLyoqXG4gKiBTdGFydHMgYSBuZXcgbWVzaCByZW5kZXJlci5cbiAqXG4gKi9cbk1lc2hSZW5kZXJlci5wcm90b3R5cGUuc3RhcnQgPSBmdW5jdGlvbiAoKVxue1xuICAgIFxuXG4gICAgdGhpcy5jdXJyZW50U2hhZGVyID0gbnVsbDtcbn07XG5cbi8qKlxuICogRGVzdHJveXMgdGhlIE1lc2ggcmVuZGVyZXJcbiAqXG4gKi9cbk1lc2hSZW5kZXJlci5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uICgpXG57XG4gICAgY29yZS5PYmplY3RSZW5kZXJlci5wcm90b3R5cGUuZGVzdHJveS5jYWxsKHRoaXMpO1xufTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vLi4vY29yZScpO1xuXG4vKipcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5TaGFkZXJcbiAqIEBtZW1iZXJvZiBQSVhJLm1lc2hcbiAqIEBwYXJhbSBzaGFkZXJNYW5hZ2VyIHtQSVhJLlNoYWRlck1hbmFnZXJ9IFRoZSBXZWJHTCBzaGFkZXIgbWFuYWdlciB0aGlzIHNoYWRlciB3b3JrcyBmb3IuXG4gKi9cbmZ1bmN0aW9uIE1lc2hTaGFkZXIoc2hhZGVyTWFuYWdlcilcbntcbiAgICBjb3JlLlNoYWRlci5jYWxsKHRoaXMsXG4gICAgICAgIHNoYWRlck1hbmFnZXIsXG4gICAgICAgIC8vIHZlcnRleCBzaGFkZXJcbiAgICAgICAgW1xuICAgICAgICAgICAgJ3ByZWNpc2lvbiBsb3dwIGZsb2F0OycsXG4gICAgICAgICAgICAnYXR0cmlidXRlIHZlYzIgYVZlcnRleFBvc2l0aW9uOycsXG4gICAgICAgICAgICAnYXR0cmlidXRlIHZlYzIgYVRleHR1cmVDb29yZDsnLFxuXG4gICAgICAgICAgICAndW5pZm9ybSBtYXQzIHRyYW5zbGF0aW9uTWF0cml4OycsXG4gICAgICAgICAgICAndW5pZm9ybSBtYXQzIHByb2plY3Rpb25NYXRyaXg7JyxcblxuICAgICAgICAgICAgJ3ZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkOycsXG5cbiAgICAgICAgICAgICd2b2lkIG1haW4odm9pZCl7JyxcbiAgICAgICAgICAgICcgICBnbF9Qb3NpdGlvbiA9IHZlYzQoKHByb2plY3Rpb25NYXRyaXggKiB0cmFuc2xhdGlvbk1hdHJpeCAqIHZlYzMoYVZlcnRleFBvc2l0aW9uLCAxLjApKS54eSwgMC4wLCAxLjApOycsXG4gICAgICAgICAgICAnICAgdlRleHR1cmVDb29yZCA9IGFUZXh0dXJlQ29vcmQ7JyxcbiAgICAgICAgICAgICd9J1xuICAgICAgICBdLmpvaW4oJ1xcbicpLFxuICAgICAgICBbXG4gICAgICAgICAgICAncHJlY2lzaW9uIGxvd3AgZmxvYXQ7JyxcblxuICAgICAgICAgICAgJ3ZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkOycsXG4gICAgICAgICAgICAndW5pZm9ybSBmbG9hdCBhbHBoYTsnLFxuXG4gICAgICAgICAgICAndW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXI7JyxcblxuICAgICAgICAgICAgJ3ZvaWQgbWFpbih2b2lkKXsnLFxuICAgICAgICAgICAgJyAgIGdsX0ZyYWdDb2xvciA9IHRleHR1cmUyRCh1U2FtcGxlciwgdlRleHR1cmVDb29yZCkgKiBhbHBoYSA7JyxcbiAgICAgICAgICAgICd9J1xuICAgICAgICBdLmpvaW4oJ1xcbicpLFxuICAgICAgICAvLyBjdXN0b20gdW5pZm9ybXNcbiAgICAgICAge1xuICAgICAgICAgICAgYWxwaGE6ICB7IHR5cGU6ICcxZicsIHZhbHVlOiAwIH0sXG4gICAgICAgICAgICB0cmFuc2xhdGlvbk1hdHJpeDogeyB0eXBlOiAnbWF0MycsIHZhbHVlOiBuZXcgRmxvYXQzMkFycmF5KDkpIH0sXG4gICAgICAgICAgICBwcm9qZWN0aW9uTWF0cml4OiB7IHR5cGU6ICdtYXQzJywgdmFsdWU6IG5ldyBGbG9hdDMyQXJyYXkoOSkgfVxuICAgICAgICB9LFxuICAgICAgICAvLyBjdXN0b20gYXR0cmlidXRlc1xuICAgICAgICB7XG4gICAgICAgICAgICBhVmVydGV4UG9zaXRpb246MCxcbiAgICAgICAgICAgIGFUZXh0dXJlQ29vcmQ6MFxuICAgICAgICB9XG4gICAgKTtcbn1cblxuTWVzaFNoYWRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuU2hhZGVyLnByb3RvdHlwZSk7XG5NZXNoU2hhZGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IE1lc2hTaGFkZXI7XG5tb2R1bGUuZXhwb3J0cyA9IE1lc2hTaGFkZXI7XG5cbmNvcmUuU2hhZGVyTWFuYWdlci5yZWdpc3RlclBsdWdpbignbWVzaFNoYWRlcicsIE1lc2hTaGFkZXIpO1xuIiwiLy8gUmVmZXJlbmNlczpcbi8vIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0phdmFTY3JpcHQvUmVmZXJlbmNlL0dsb2JhbF9PYmplY3RzL01hdGgvc2lnblxuXG5pZiAoIU1hdGguc2lnbilcbntcbiAgICBNYXRoLnNpZ24gPSBmdW5jdGlvbiAoeCkge1xuICAgICAgICB4ID0gK3g7XG4gICAgICAgIGlmICh4ID09PSAwIHx8IGlzTmFOKHgpKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4geDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4geCA+IDAgPyAxIDogLTE7XG4gICAgfTtcbn1cbiIsIi8vIFJlZmVyZW5jZXM6XG4vLyBodHRwczovL2dpdGh1Yi5jb20vc2luZHJlc29yaHVzL29iamVjdC1hc3NpZ25cbi8vIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0phdmFTY3JpcHQvUmVmZXJlbmNlL0dsb2JhbF9PYmplY3RzL09iamVjdC9hc3NpZ25cblxuaWYgKCFPYmplY3QuYXNzaWduKVxue1xuICAgIE9iamVjdC5hc3NpZ24gPSByZXF1aXJlKCdvYmplY3QtYXNzaWduJyk7XG59XG4iLCJyZXF1aXJlKCcuL09iamVjdC5hc3NpZ24nKTtcbnJlcXVpcmUoJy4vcmVxdWVzdEFuaW1hdGlvbkZyYW1lJyk7XG5yZXF1aXJlKCcuL01hdGguc2lnbicpO1xuIiwiLy8gUmVmZXJlbmNlczpcbi8vIGh0dHA6Ly9wYXVsaXJpc2guY29tLzIwMTEvcmVxdWVzdGFuaW1hdGlvbmZyYW1lLWZvci1zbWFydC1hbmltYXRpbmcvXG4vLyBodHRwczovL2dpc3QuZ2l0aHViLmNvbS8xNTc5NjcxXG4vLyBodHRwOi8vdXBkYXRlcy5odG1sNXJvY2tzLmNvbS8yMDEyLzA1L3JlcXVlc3RBbmltYXRpb25GcmFtZS1BUEktbm93LXdpdGgtc3ViLW1pbGxpc2Vjb25kLXByZWNpc2lvblxuLy8gaHR0cHM6Ly9naXN0LmdpdGh1Yi5jb20vdGltaGFsbC80MDc4NjE0XG4vLyBodHRwczovL2dpdGh1Yi5jb20vRmluYW5jaWFsLVRpbWVzL3BvbHlmaWxsLXNlcnZpY2UvdHJlZS9tYXN0ZXIvcG9seWZpbGxzL3JlcXVlc3RBbmltYXRpb25GcmFtZVxuXG4vLyBFeHBlY3RlZCB0byBiZSB1c2VkIHdpdGggQnJvd3NlcmZpeVxuLy8gQnJvd3NlcmlmeSBhdXRvbWF0aWNhbGx5IGRldGVjdHMgdGhlIHVzZSBvZiBgZ2xvYmFsYCBhbmQgcGFzc2VzIHRoZVxuLy8gY29ycmVjdCByZWZlcmVuY2Ugb2YgYGdsb2JhbGAsIGBzZWxmYCwgYW5kIGZpbmFsbHkgYHdpbmRvd2BcblxuLy8gRGF0ZS5ub3dcbmlmICghKERhdGUubm93ICYmIERhdGUucHJvdG90eXBlLmdldFRpbWUpKSB7XG4gICAgRGF0ZS5ub3cgPSBmdW5jdGlvbiBub3coKSB7XG4gICAgICAgIHJldHVybiBuZXcgRGF0ZSgpLmdldFRpbWUoKTtcbiAgICB9O1xufVxuXG4vLyBwZXJmb3JtYW5jZS5ub3dcbmlmICghKGdsb2JhbC5wZXJmb3JtYW5jZSAmJiBnbG9iYWwucGVyZm9ybWFuY2Uubm93KSkge1xuICAgIHZhciBzdGFydFRpbWUgPSBEYXRlLm5vdygpO1xuICAgIGlmICghZ2xvYmFsLnBlcmZvcm1hbmNlKSB7XG4gICAgICAgIGdsb2JhbC5wZXJmb3JtYW5jZSA9IHt9O1xuICAgIH1cbiAgICBnbG9iYWwucGVyZm9ybWFuY2Uubm93ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gRGF0ZS5ub3coKSAtIHN0YXJ0VGltZTtcbiAgICB9O1xufVxuXG4vLyByZXF1ZXN0QW5pbWF0aW9uRnJhbWVcbnZhciBsYXN0VGltZSA9IERhdGUubm93KCk7XG52YXIgdmVuZG9ycyA9IFsnbXMnLCAnbW96JywgJ3dlYmtpdCcsICdvJ107XG5cbmZvcih2YXIgeCA9IDA7IHggPCB2ZW5kb3JzLmxlbmd0aCAmJiAhZ2xvYmFsLnJlcXVlc3RBbmltYXRpb25GcmFtZTsgKyt4KSB7XG4gICAgZ2xvYmFsLnJlcXVlc3RBbmltYXRpb25GcmFtZSA9IGdsb2JhbFt2ZW5kb3JzW3hdICsgJ1JlcXVlc3RBbmltYXRpb25GcmFtZSddO1xuICAgIGdsb2JhbC5jYW5jZWxBbmltYXRpb25GcmFtZSA9IGdsb2JhbFt2ZW5kb3JzW3hdICsgJ0NhbmNlbEFuaW1hdGlvbkZyYW1lJ10gfHxcbiAgICAgICAgZ2xvYmFsW3ZlbmRvcnNbeF0gKyAnQ2FuY2VsUmVxdWVzdEFuaW1hdGlvbkZyYW1lJ107XG59XG5cbmlmICghZ2xvYmFsLnJlcXVlc3RBbmltYXRpb25GcmFtZSkge1xuICAgIGdsb2JhbC5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUgPSBmdW5jdGlvbiAoY2FsbGJhY2spIHtcbiAgICAgICAgaWYgKHR5cGVvZiBjYWxsYmFjayAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihjYWxsYmFjayArICdpcyBub3QgYSBmdW5jdGlvbicpO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGN1cnJlbnRUaW1lID0gRGF0ZS5ub3coKSxcbiAgICAgICAgICAgIGRlbGF5ID0gMTYgKyBsYXN0VGltZSAtIGN1cnJlbnRUaW1lO1xuXG4gICAgICAgIGlmIChkZWxheSA8IDApIHtcbiAgICAgICAgICAgIGRlbGF5ID0gMDtcbiAgICAgICAgfVxuXG4gICAgICAgIGxhc3RUaW1lID0gY3VycmVudFRpbWU7XG5cbiAgICAgICAgcmV0dXJuIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgbGFzdFRpbWUgPSBEYXRlLm5vdygpO1xuICAgICAgICAgICAgY2FsbGJhY2socGVyZm9ybWFuY2Uubm93KCkpO1xuICAgICAgICB9LCBkZWxheSk7XG4gICAgfTtcbn1cblxuaWYgKCFnbG9iYWwuY2FuY2VsQW5pbWF0aW9uRnJhbWUpIHtcbiAgICBnbG9iYWwuY2FuY2VsQW5pbWF0aW9uRnJhbWUgPSBmdW5jdGlvbihpZCkge1xuICAgICAgICBjbGVhclRpbWVvdXQoaWQpO1xuICAgIH07XG59XG4iXX0= //# sourceMappingURL=pixi.js.map diff --git a/bin/pixi.min.js b/bin/pixi.min.js index f7a788e..d59cd98 100644 --- a/bin/pixi.min.js +++ b/bin/pixi.min.js @@ -1,11 +1,11 @@ -!function(t){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=t();else if("function"==typeof define&&define.amd)define([],t);else{var e;e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:this,e.PIXI=t()}}(function(){var t;return function e(t,r,i){function n(s,a){if(!r[s]){if(!t[s]){var h="function"==typeof require&&require;if(!a&&h)return h(s,!0);if(o)return o(s,!0);var u=new Error("Cannot find module '"+s+"'");throw u.code="MODULE_NOT_FOUND",u}var l=r[s]={exports:{}};t[s][0].call(l.exports,function(e){var r=t[s][1][e];return n(r?r:e)},l,l.exports,e,t,r,i)}return r[s].exports}for(var o="function"==typeof require&&require,s=0;s=t.byteLength?i.bufferSubData(this.type,e,t):i.bufferData(this.type,t,this.drawType),this.data=t},n.prototype.bind=function(){var t=this.gl;t.bindBuffer(this.type,this.buffer)},n.createVertexBuffer=function(t,e,r){return new n(t,t.ARRAY_BUFFER,e,r)},n.createIndexBuffer=function(t,e,r){return new n(t,t.ELEMENT_ARRAY_BUFFER,e,r)},n.create=function(t,e,r,i){return new n(t,e,i)},e.exports=n},{}],3:[function(t,e,r){var i=t("./GLTexture"),n=function(t,e,r){this.gl=t,this.framebuffer=t.createFramebuffer(),this.stencil=null,this.texture=null,this.width=e||100,this.height=r||100};n.prototype.enableTexture=function(t){var e=this.gl;this.texture=t||new i(e),this.texture.bind(),this.bind(),e.framebufferTexture2D(e.FRAMEBUFFER,e.COLOR_ATTACHMENT0,e.TEXTURE_2D,this.texture.texture,0)},n.prototype.enableStencil=function(){if(!this.stencil){var t=this.gl;this.stencil=t.createRenderbuffer(),t.bindRenderbuffer(t.RENDERBUFFER,this.stencil),t.framebufferRenderbuffer(t.FRAMEBUFFER,t.DEPTH_STENCIL_ATTACHMENT,t.RENDERBUFFER,this.stencil),t.renderbufferStorage(t.RENDERBUFFER,t.DEPTH_STENCIL,this.width,this.height)}},n.prototype.clear=function(t,e,r,i){this.bind();var n=this.gl;n.clearColor(t,e,r,i),n.clear(n.COLOR_BUFFER_BIT)},n.prototype.bind=function(){var t=this.gl;t.bindFramebuffer(t.FRAMEBUFFER,this.framebuffer)},n.prototype.unbind=function(){gl.bindFramebuffer(gl.FRAMEBUFFER,null)},n.prototype.resize=function(t,e){var r=this.gl;this.width=t,this.height=e,this.texture&&(this.texture.bind(),r.texImage2D(r.TEXTURE_2D,0,this.format,t,e,0,this.format,this.type,null)),this.stencil&&(r.bindRenderbuffer(r.RENDERBUFFER,this.stencil),r.renderbufferStorage(r.RENDERBUFFER,r.DEPTH_STENCIL,t,e))},n.prototype.destroy=function(){var t=this.gl;t.deleteFramebuffer(this.framebuffer)},n.createRGBA=function(t,e,r,o){var s=new i(t,e,r);s.enableNearestScaling(),s.enableWrapClamp(),t.texImage2D(t.TEXTURE_2D,0,t.RGBA,e,r,0,t.RGBA,t.UNSIGNED_BYTE,o);var a=new n(t,e,r);return a.enableTexture(s),a},n.createFloat32=function(t,e,r,o){var s=new i.fromData(t,o,e,r);s.enableNearestScaling(),s.enableWrapClamp();var a=new n(t,e,r);return a.enableTexture(s),a},e.exports=n},{"./GLTexture":5}],4:[function(t,e,r){var i=t("./shader/compileProgram"),n=t("./shader/extractAttributes"),o=t("./shader/extractUniforms"),s=t("./shader/generateUniformAccessObject"),a=function(t,e,r){this.gl=t,this.program=i(t,e,r),this.attributes=n(t,this.program);var a=o(t,this.program);this.uniforms=s(t,a)};a.prototype.bind=function(){this.gl.useProgram(this.program)},a.prototype.destroy=function(){this.gl},e.exports=a},{"./shader/compileProgram":9,"./shader/extractAttributes":11,"./shader/extractUniforms":12,"./shader/generateUniformAccessObject":13}],5:[function(t,e,r){var i=function(t,e,r,i,n){this.gl=t,this.texture=t.createTexture(),this.mipmap=!1,this.premultiplyAlpha=!1,this.width=e||0,this.height=r||0,this.format=i||t.RGBA,this.type=n||t.UNSIGNED_BYTE};i.prototype.upload=function(t){this.bind();var e=this.gl;this.width=t.width,this.height=t.height,e.pixelStorei(e.UNPACK_PREMULTIPLY_ALPHA_WEBGL,this.premultiplyAlpha),e.texImage2D(e.TEXTURE_2D,0,this.format,this.format,this.type,t)};var n=!1;i.prototype.uploadData=function(t,e,r){if(this.bind(),this.width=e||this.width,this.height=r||this.height,t instanceof Float32Array){if(!n){var i=gl.getExtension("OES_texture_float");if(!i)throw new Error("floating point textures not available");n=!0}this.type=gl.FLOAT}else this.type=gl.UNSIGNED_BYTE;gl.pixelStorei(gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL,this.premultiplyAlpha),gl.texImage2D(gl.TEXTURE_2D,0,this.format,this.width,this.height,0,this.format,this.type,t)},i.prototype.bind=function(t){var e=this.gl;void 0!==t&&e.activeTexture(e.TEXTURE0+t),e.bindTexture(e.TEXTURE_2D,this.texture)},i.prototype.unbind=function(){var t=this.gl;t.bindTexture(t.TEXTURE_2D,null)},i.prototype.minFilter=function(t){var e=this.gl;this.bind(),this.mipmap?e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MIN_FILTER,t?e.LINEAR_MIPMAP_LINEAR:e.NEAREST_MIPMAP_NEAREST):e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MIN_FILTER,t?e.LINEAR:e.NEAREST)},i.prototype.magFilter=function(t){var e=this.gl;this.bind(),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MAG_FILTER,t?e.LINEAR:e.NEAREST)},i.prototype.enableMipmap=function(){this.bind(),this.mipmap=!0,gl.generateMipmap(gl.TEXTURE_2D)},i.prototype.enableLinearScaling=function(){this.minFilter(!0),this.magFilter(!0)},i.prototype.enableNearestScaling=function(){this.minFilter(!1),this.magFilter(!1)},i.prototype.enableWrapClamp=function(){var t=this.gl;this.bind(),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_WRAP_S,t.CLAMP_TO_EDGE),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_WRAP_T,t.CLAMP_TO_EDGE)},i.prototype.enableWrapRepeat=function(){var t=this.gl;this.bind(),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_WRAP_S,t.REPEAT),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_WRAP_T,t.REPEAT)},i.prototype.destroy=function(){var t=this.gl;t.deleteTexture(this.texture)},i.fromSource=function(t,e,r){var n=new i(t);return n.premultiplyAlpha=r||!1,n.upload(e),n},i.fromData=function(t,e,r,n){var o=new i(t);return o.uploadData(e,r,n),o},e.exports=i},{}],6:[function(t,e,r){function i(t){this.nativeVaoExtension=t.getExtension("OES_vertex_array_object")||t.getExtension("MOZ_OES_vertex_array_object")||t.getExtension("WEBKIT_OES_vertex_array_object"),this.nativeVaoExtension&&(this.nativeVao=this.nativeVaoExtension.createVertexArrayOES()),this.gl=t,this.attributes=[],this.indexBuffer=null,this.dirty=!1}i.prototype.constructor=i,e.exports=i,i.prototype.bind=function(){this.nativeVao?(this.nativeVaoExtension.bindVertexArrayOES(this.nativeVao),this.dirty&&(this.dirty=!1,this.activate())):this.activate()},i.prototype.unbind=function(){this.nativeVao&&this.nativeVaoExtension.bindVertexArrayOES(null)},i.prototype.activate=function(){for(var t=this.gl,e=0;es;s++){var a=t.getActiveAttrib(e,s),h=i(t,a.type);r[a.name]={type:h,size:n(h),location:t.getAttribLocation(e,a.name),pointer:function(e,r,i,n){t.vertexAttribPointer(this.location,this.size,e||t.FLOAT,r||!1,i||0,n||0)}}}return r};e.exports=o},{"./mapSize":14,"./mapType":15}],12:[function(t,e,r){var i=t("./mapType"),n=t("./defaultValue"),o=function(t,e){for(var r={},o=t.getProgramParameter(e,t.ACTIVE_UNIFORMS),s=0;o>s;s++){var a=t.getActiveUniform(e,s),h=a.name.replace(/\[.*?\]/,""),u=i(t,a.type);r[h]={type:u,size:a.size,location:t.getUniformLocation(e,h),value:n(u,a.size)}}return r};e.exports=o},{"./defaultValue":10,"./mapType":15}],13:[function(t,e,r){var i=function(t,e){var r={data:{}};r.gl=t;for(var i=Object.keys(e),a=0;a=0&&t.length%1===0}function c(t,e){for(var r=-1,i=t.length;++ri?i:null}):(r=Y(t),e=r.length,function(){return i++,e>i?r[i]:null})}function y(t,e){return e=null==e?t.length-1:+e,function(){for(var r=Math.max(arguments.length-e,0),i=Array(r),n=0;r>n;n++)i[n]=arguments[n+e];switch(e){case 0:return t.call(this,i);case 1:return t.call(this,arguments[0],i)}}}function x(t){return function(e,r,i){return t(e,i)}}function b(t){return function(e,r,i){i=u(i||n),e=e||[];var o=m(e);if(0>=t)return i(null);var s=!1,a=0,l=!1;!function c(){if(s&&0>=a)return i(null);for(;t>a&&!l;){var n=o();if(null===n)return s=!0,void(0>=a&&i(null));a+=1,r(e[n],n,h(function(t){a-=1,t?(i(t),l=!0):c()}))}}()}}function _(t){return function(e,r,i){return t(N.eachOf,e,r,i)}}function T(t){return function(e,r,i,n){return t(b(r),e,i,n)}}function E(t){return function(e,r,i){return t(N.eachOfSeries,e,r,i)}}function S(t,e,r,i){i=u(i||n),e=e||[];var o=l(e)?[]:{};t(e,function(t,e,i){r(t,function(t,r){o[e]=r,i(t)})},function(t){i(t,o)})}function w(t,e,r,i){var n=[];t(e,function(t,e,i){r(t,function(r){r&&n.push({index:e,value:t}),i()})},function(){i(p(n.sort(function(t,e){return t.index-e.index}),function(t){return t.value}))})}function C(t,e,r,i){w(t,e,function(t,e){r(t,function(t){e(!t)})},i)}function A(t,e,r){return function(i,n,o,s){function a(){s&&s(r(!1,void 0))}function h(t,i,n){return s?void o(t,function(i){s&&e(i)&&(s(r(!0,t)),s=o=!1),n()}):n()}arguments.length>3?t(i,n,h,a):(s=o,o=n,t(i,h,a))}}function M(t,e){return e}function R(t,e,r){r=r||n;var i=l(e)?[]:{};t(e,function(t,e,r){t(y(function(t,n){n.length<=1&&(n=n[0]),i[e]=n,r(t)}))},function(t){r(t,i)})}function O(t,e,r,i){var n=[];t(e,function(t,e,i){r(t,function(t,e){n=n.concat(e||[]),i(t)})},function(t){i(t,n)})}function D(t,e,r){function i(t,e,r,i){if(null!=i&&"function"!=typeof i)throw new Error("task callback must be a function");return t.started=!0,j(e)||(e=[e]),0===e.length&&t.idle()?N.setImmediate(function(){t.drain()}):(c(e,function(e){var o={data:e,callback:i||n};r?t.tasks.unshift(o):t.tasks.push(o),t.tasks.length===t.concurrency&&t.saturated()}),void N.setImmediate(t.process))}function o(t,e){return function(){s-=1;var r=!1,i=arguments;c(e,function(t){c(a,function(e,i){e!==t||r||(a.splice(i,1),r=!0)}),t.callback.apply(t,i)}),t.tasks.length+s===0&&t.drain(),t.process()}}if(null==e)e=1;else if(0===e)throw new Error("Concurrency must not be zero");var s=0,a=[],u={tasks:[],concurrency:e,payload:r,saturated:n,empty:n,drain:n,started:!1,paused:!1,push:function(t,e){i(u,t,!1,e)},kill:function(){u.drain=n,u.tasks=[]},unshift:function(t,e){i(u,t,!0,e)},process:function(){if(!u.paused&&s=e;e++)N.setImmediate(u.process)}}};return u}function P(t){return y(function(e,r){e.apply(null,r.concat([y(function(e,r){"object"==typeof console&&(e?console.error&&console.error(e):console[t]&&c(r,function(e){console[t](e)}))})]))})}function F(t){return function(e,r,i){t(d(e),r,i)}}function L(t){return y(function(e,r){var i=y(function(r){var i=this,n=r.pop();return t(e,function(t,e,n){t.apply(i,r.concat([n]))},n)});return r.length?i.apply(this,r):i})}function B(t){return y(function(e){var r=e.pop();e.push(function(){var t=arguments;i?N.setImmediate(function(){r.apply(null,t)}):r.apply(null,t)});var i=!0;t.apply(this,e),i=!1})}var I,N={},U="object"==typeof self&&self.self===self&&self||"object"==typeof i&&i.global===i&&i||this;null!=U&&(I=U.async),N.noConflict=function(){return U.async=I,N};var k=Object.prototype.toString,j=Array.isArray||function(t){return"[object Array]"===k.call(t)},G=function(t){var e=typeof t;return"function"===e||"object"===e&&!!t},Y=Object.keys||function(t){var e=[];for(var r in t)t.hasOwnProperty(r)&&e.push(r);return e},X="function"==typeof setImmediate&&setImmediate,z=X?function(t){X(t)}:function(t){setTimeout(t,0)};"object"==typeof e&&"function"==typeof e.nextTick?N.nextTick=e.nextTick:N.nextTick=z,N.setImmediate=X?z:N.nextTick,N.forEach=N.each=function(t,e,r){return N.eachOf(t,x(e),r)},N.forEachSeries=N.eachSeries=function(t,e,r){return N.eachOfSeries(t,x(e),r)},N.forEachLimit=N.eachLimit=function(t,e,r,i){return b(e)(t,x(r),i)},N.forEachOf=N.eachOf=function(t,e,r){function i(t){a--,t?r(t):null===o&&0>=a&&r(null)}r=u(r||n),t=t||[];for(var o,s=m(t),a=0;null!=(o=s());)a+=1,e(t[o],o,h(i));0===a&&r(null)},N.forEachOfSeries=N.eachOfSeries=function(t,e,r){function i(){var n=!0;return null===s?r(null):(e(t[s],s,h(function(t){if(t)r(t);else{if(s=o(),null===s)return r(null);n?N.setImmediate(i):i()}})),void(n=!1))}r=u(r||n),t=t||[];var o=m(t),s=o();i()},N.forEachOfLimit=N.eachOfLimit=function(t,e,r,i){b(e)(t,r,i)},N.map=_(S),N.mapSeries=E(S),N.mapLimit=T(S),N.inject=N.foldl=N.reduce=function(t,e,r,i){N.eachOfSeries(t,function(t,i,n){r(e,t,function(t,r){e=r,n(t)})},function(t){i(t,e)})},N.foldr=N.reduceRight=function(t,e,r,i){var n=p(t,o).reverse();N.reduce(n,e,r,i)},N.transform=function(t,e,r,i){3===arguments.length&&(i=r,r=e,e=j(t)?[]:{}),N.eachOf(t,function(t,i,n){r(e,t,i,n)},function(t){i(t,e)})},N.select=N.filter=_(w),N.selectLimit=N.filterLimit=T(w),N.selectSeries=N.filterSeries=E(w),N.reject=_(C),N.rejectLimit=T(C),N.rejectSeries=E(C),N.any=N.some=A(N.eachOf,s,o),N.someLimit=A(N.eachOfLimit,s,o),N.all=N.every=A(N.eachOf,a,a),N.everyLimit=A(N.eachOfLimit,a,a),N.detect=A(N.eachOf,o,M),N.detectSeries=A(N.eachOfSeries,o,M),N.detectLimit=A(N.eachOfLimit,o,M),N.sortBy=function(t,e,r){function i(t,e){var r=t.criteria,i=e.criteria;return i>r?-1:r>i?1:0}N.map(t,function(t,r){e(t,function(e,i){e?r(e):r(null,{value:t,criteria:i})})},function(t,e){return t?r(t):void r(null,p(e.sort(i),function(t){return t.value}))})},N.auto=function(t,e,r){function i(t){d.unshift(t)}function o(t){var e=g(d,t);e>=0&&d.splice(e,1)}function s(){h--,c(d.slice(0),function(t){t()})}r||(r=e,e=null),r=u(r||n);var a=Y(t),h=a.length;if(!h)return r(null);e||(e=h);var l={},p=0,d=[];i(function(){h||r(null,l)}),c(a,function(n){function a(){return e>p&&f(m,function(t,e){return t&&l.hasOwnProperty(e)},!0)&&!l.hasOwnProperty(n)}function h(){a()&&(p++,o(h),c[c.length-1](d,l))}for(var u,c=j(t[n])?t[n]:[t[n]],d=y(function(t,e){if(p--,e.length<=1&&(e=e[0]),t){var i={};v(l,function(t,e){i[e]=t}),i[n]=e,r(t,i)}else l[n]=e,N.setImmediate(s)}),m=c.slice(0,c.length-1),x=m.length;x--;){if(!(u=t[m[x]]))throw new Error("Has inexistant dependency");if(j(u)&&g(u,n)>=0)throw new Error("Has cyclic dependencies")}a()?(p++,c[c.length-1](d,l)):i(h)})},N.retry=function(t,e,r){function i(t,e){if("number"==typeof e)t.times=parseInt(e,10)||o;else{if("object"!=typeof e)throw new Error("Unsupported argument type for 'times': "+typeof e);t.times=parseInt(e.times,10)||o,t.interval=parseInt(e.interval,10)||s}}function n(t,e){function r(t,r){return function(i){t(function(t,e){i(!t||r,{err:t,result:e})},e)}}function i(t){return function(e){setTimeout(function(){e(null)},t)}}for(;h.times;){var n=!(h.times-=1);a.push(r(h.task,n)),!n&&h.interval>0&&a.push(i(h.interval))}N.series(a,function(e,r){r=r[r.length-1],(t||h.callback)(r.err,r.result)})}var o=5,s=0,a=[],h={times:o,interval:s},u=arguments.length;if(1>u||u>3)throw new Error("Invalid arguments - must be either (task), (task, callback), (times, task) or (times, task, callback)");return 2>=u&&"function"==typeof t&&(r=e,e=t),"function"!=typeof t&&i(h,t),h.callback=r,h.task=e,h.callback?n():n},N.waterfall=function(t,e){function r(t){return y(function(i,n){if(i)e.apply(null,[i].concat(n));else{var o=t.next();o?n.push(r(o)):n.push(e),B(t).apply(null,n)}})}if(e=u(e||n),!j(t)){var i=new Error("First argument to waterfall must be an array of functions");return e(i)}return t.length?void r(N.iterator(t))():e()},N.parallel=function(t,e){R(N.eachOf,t,e)},N.parallelLimit=function(t,e,r){R(b(e),t,r)},N.series=function(t,e){R(N.eachOfSeries,t,e)},N.iterator=function(t){function e(r){function i(){return t.length&&t[r].apply(null,arguments),i.next()}return i.next=function(){return ri;){var o=i+(n-i+1>>>1);r(e,t[o])>=0?i=o:n=o-1}return i}function o(t,e,o,s){if(null!=s&&"function"!=typeof s)throw new Error("task callback must be a function");return t.started=!0,j(e)||(e=[e]),0===e.length?N.setImmediate(function(){t.drain()}):void c(e,function(e){var a={data:e,priority:o,callback:"function"==typeof s?s:n};t.tasks.splice(i(t.tasks,a,r)+1,0,a),t.tasks.length===t.concurrency&&t.saturated(),N.setImmediate(t.process)})}var s=N.queue(t,e);return s.push=function(t,e,r){o(s,t,e,r)},delete s.unshift,s},N.cargo=function(t,e){return D(t,1,e)},N.log=P("log"),N.dir=P("dir"),N.memoize=function(t,e){var r={},i={};e=e||o;var n=y(function(n){var o=n.pop(),s=e.apply(null,n);s in r?N.setImmediate(function(){o.apply(null,r[s])}):s in i?i[s].push(o):(i[s]=[o],t.apply(null,n.concat([y(function(t){r[s]=t;var e=i[s];delete i[s];for(var n=0,o=e.length;o>n;n++)e[n].apply(null,t)})])))});return n.memo=r,n.unmemoized=t,n},N.unmemoize=function(t){return function(){return(t.unmemoized||t).apply(null,arguments)}},N.times=F(N.map),N.timesSeries=F(N.mapSeries),N.timesLimit=function(t,e,r,i){return N.mapLimit(d(t),e,r,i)},N.seq=function(){var t=arguments;return y(function(e){var r=this,i=e[e.length-1];"function"==typeof i?e.pop():i=n,N.reduce(t,e,function(t,e,i){e.apply(r,t.concat([y(function(t,e){i(t,e)})]))},function(t,e){i.apply(r,[t].concat(e))})})},N.compose=function(){return N.seq.apply(null,Array.prototype.reverse.call(arguments))},N.applyEach=L(N.eachOf),N.applyEachSeries=L(N.eachOfSeries),N.forever=function(t,e){function r(t){return t?i(t):void o(r)}var i=h(e||n),o=B(t);r()},N.ensureAsync=B,N.constant=y(function(t){var e=[null].concat(t);return function(t){return t.apply(this,e)}}),N.wrapSync=N.asyncify=function(t){return y(function(e){var r,i=e.pop();try{r=t.apply(this,e)}catch(n){return i(n)}G(r)&&"function"==typeof r.then?r.then(function(t){i(null,t)})["catch"](function(t){i(t.message?t:new Error(t))}):i(null,r)})},"object"==typeof r&&r.exports?r.exports=N:"function"==typeof t&&t.amd?t([],function(){return N}):U.async=N}()}).call(this,e("_process"),"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{_process:18}],17:[function(t,e,r){(function(t){function e(t,e){for(var r=0,i=t.length-1;i>=0;i--){var n=t[i];"."===n?t.splice(i,1):".."===n?(t.splice(i,1),r++):r&&(t.splice(i,1),r--)}if(e)for(;r--;r)t.unshift("..");return t}function i(t,e){if(t.filter)return t.filter(e);for(var r=[],i=0;i=-1&&!n;o--){var s=o>=0?arguments[o]:t.cwd();if("string"!=typeof s)throw new TypeError("Arguments to path.resolve must be strings");s&&(r=s+"/"+r,n="/"===s.charAt(0))}return r=e(i(r.split("/"),function(t){return!!t}),!n).join("/"),(n?"/":"")+r||"."},r.normalize=function(t){var n=r.isAbsolute(t),o="/"===s(t,-1);return t=e(i(t.split("/"),function(t){return!!t}),!n).join("/"),t||n||(t="."),t&&o&&(t+="/"),(n?"/":"")+t},r.isAbsolute=function(t){return"/"===t.charAt(0)},r.join=function(){var t=Array.prototype.slice.call(arguments,0);return r.normalize(i(t,function(t,e){if("string"!=typeof t)throw new TypeError("Arguments to path.join must be strings");return t}).join("/"))},r.relative=function(t,e){function i(t){for(var e=0;e=0&&""===t[r];r--);return e>r?[]:t.slice(e,r-e+1)}t=r.resolve(t).substr(1),e=r.resolve(e).substr(1);for(var n=i(t.split("/")),o=i(e.split("/")),s=Math.min(n.length,o.length),a=s,h=0;s>h;h++)if(n[h]!==o[h]){a=h;break}for(var u=[],h=a;he&&(e=t.length+e),t.substr(e,r)}}).call(this,t("_process"))},{_process:18}],18:[function(t,e,r){function i(){l=!1,a.length?u=a.concat(u):c=-1,u.length&&n()}function n(){if(!l){var t=setTimeout(i);l=!0;for(var e=u.length;e;){for(a=u,u=[];++c1)for(var r=1;r1&&(i=r[0]+"@",t=r[1]),t=t.replace(F,".");var n=t.split("."),o=s(n,e).join(".");return i+o}function h(t){for(var e,r,i=[],n=0,o=t.length;o>n;)e=t.charCodeAt(n++),e>=55296&&56319>=e&&o>n?(r=t.charCodeAt(n++),56320==(64512&r)?i.push(((1023&e)<<10)+(1023&r)+65536):(i.push(e),n--)):i.push(e);return i}function u(t){return s(t,function(t){var e="";return t>65535&&(t-=65536,e+=N(t>>>10&1023|55296),t=56320|1023&t),e+=N(t)}).join("")}function l(t){return 10>t-48?t-22:26>t-65?t-65:26>t-97?t-97:E}function c(t,e){return t+22+75*(26>t)-((0!=e)<<5)}function p(t,e,r){var i=0;for(t=r?I(t/A):t>>1,t+=I(t/e);t>B*w>>1;i+=E)t=I(t/B);return I(i+(B+1)*t/(t+C))}function d(t){var e,r,i,n,s,a,h,c,d,f,v=[],g=t.length,m=0,y=R,x=M;for(r=t.lastIndexOf(O),0>r&&(r=0),i=0;r>i;++i)t.charCodeAt(i)>=128&&o("not-basic"),v.push(t.charCodeAt(i));for(n=r>0?r+1:0;g>n;){for(s=m,a=1,h=E;n>=g&&o("invalid-input"),c=l(t.charCodeAt(n++)),(c>=E||c>I((T-m)/a))&&o("overflow"),m+=c*a,d=x>=h?S:h>=x+w?w:h-x,!(d>c);h+=E)f=E-d,a>I(T/f)&&o("overflow"),a*=f;e=v.length+1,x=p(m-s,e,0==s),I(m/e)>T-y&&o("overflow"),y+=I(m/e),m%=e,v.splice(m++,0,y)}return u(v)}function f(t){var e,r,i,n,s,a,u,l,d,f,v,g,m,y,x,b=[];for(t=h(t),g=t.length,e=R,r=0,s=M,a=0;g>a;++a)v=t[a],128>v&&b.push(N(v));for(i=n=b.length,n&&b.push(O);g>i;){for(u=T,a=0;g>a;++a)v=t[a],v>=e&&u>v&&(u=v);for(m=i+1,u-e>I((T-r)/m)&&o("overflow"),r+=(u-e)*m,e=u,a=0;g>a;++a)if(v=t[a],e>v&&++r>T&&o("overflow"),v==e){for(l=r,d=E;f=s>=d?S:d>=s+w?w:d-s,!(f>l);d+=E)x=l-f,y=E-f,b.push(N(c(f+x%y,0))),l=I(x/y);b.push(N(c(l,0))),s=p(r,m,i==n),r=0,++i}++r,++e}return b.join("")}function v(t){return a(t,function(t){return D.test(t)?d(t.slice(4).toLowerCase()):t})}function g(t){return a(t,function(t){return P.test(t)?"xn--"+f(t):t})}var m="object"==typeof i&&i&&!i.nodeType&&i,y="object"==typeof r&&r&&!r.nodeType&&r,x="object"==typeof e&&e;(x.global===x||x.window===x||x.self===x)&&(n=x);var b,_,T=2147483647,E=36,S=1,w=26,C=38,A=700,M=72,R=128,O="-",D=/^xn--/,P=/[^\x20-\x7E]/,F=/[\x2E\u3002\uFF0E\uFF61]/g,L={overflow:"Overflow: input needs wider integers to process","not-basic":"Illegal input >= 0x80 (not a basic code point)","invalid-input":"Invalid input"},B=E-S,I=Math.floor,N=String.fromCharCode;if(b={version:"1.3.2",ucs2:{decode:h,encode:u},decode:d,encode:f,toASCII:g,toUnicode:v},"function"==typeof t&&"object"==typeof t.amd&&t.amd)t("punycode",function(){return b});else if(m&&y)if(r.exports==m)y.exports=b;else for(_ in b)b.hasOwnProperty(_)&&(m[_]=b[_]);else n.punycode=b}(this)}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{}],20:[function(t,e,r){"use strict";function i(t,e){return Object.prototype.hasOwnProperty.call(t,e)}e.exports=function(t,e,r,o){e=e||"&",r=r||"=";var s={};if("string"!=typeof t||0===t.length)return s;var a=/\+/g;t=t.split(e);var h=1e3;o&&"number"==typeof o.maxKeys&&(h=o.maxKeys);var u=t.length;h>0&&u>h&&(u=h);for(var l=0;u>l;++l){var c,p,d,f,v=t[l].replace(a,"%20"),g=v.indexOf(r);g>=0?(c=v.substr(0,g),p=v.substr(g+1)):(c=v, -p=""),d=decodeURIComponent(c),f=decodeURIComponent(p),i(s,d)?n(s[d])?s[d].push(f):s[d]=[s[d],f]:s[d]=f}return s};var n=Array.isArray||function(t){return"[object Array]"===Object.prototype.toString.call(t)}},{}],21:[function(t,e,r){"use strict";function i(t,e){if(t.map)return t.map(e);for(var r=[],i=0;i",'"',"`"," ","\r","\n"," "],g=["{","}","|","\\","^","`"].concat(v),m=["'"].concat(g),y=["%","/","?",";","#"].concat(m),x=["/","?","#"],b=255,_=/^[a-z0-9A-Z_-]{0,63}$/,T=/^([a-z0-9A-Z_-]{0,63})(.*)$/,E={javascript:!0,"javascript:":!0},S={javascript:!0,"javascript:":!0},w={http:!0,https:!0,ftp:!0,gopher:!0,file:!0,"http:":!0,"https:":!0,"ftp:":!0,"gopher:":!0,"file:":!0},C=t("querystring");i.prototype.parse=function(t,e,r){if(!h(t))throw new TypeError("Parameter 'url' must be a string, not "+typeof t);var i=t;i=i.trim();var n=d.exec(i);if(n){n=n[0];var o=n.toLowerCase();this.protocol=o,i=i.substr(n.length)}if(r||n||i.match(/^\/\/[^@\/]+@[^@\/]+/)){var s="//"===i.substr(0,2);!s||n&&S[n]||(i=i.substr(2),this.slashes=!0)}if(!S[n]&&(s||n&&!w[n])){for(var a=-1,u=0;ul)&&(a=l)}var c,f;f=-1===a?i.lastIndexOf("@"):i.lastIndexOf("@",a),-1!==f&&(c=i.slice(0,f),i=i.slice(f+1),this.auth=decodeURIComponent(c)),a=-1;for(var u=0;ul)&&(a=l)}-1===a&&(a=i.length),this.host=i.slice(0,a),i=i.slice(a),this.parseHost(),this.hostname=this.hostname||"";var v="["===this.hostname[0]&&"]"===this.hostname[this.hostname.length-1];if(!v)for(var g=this.hostname.split(/\./),u=0,A=g.length;A>u;u++){var M=g[u];if(M&&!M.match(_)){for(var R="",O=0,D=M.length;D>O;O++)R+=M.charCodeAt(O)>127?"x":M[O];if(!R.match(_)){var P=g.slice(0,u),F=g.slice(u+1),L=M.match(T);L&&(P.push(L[1]),F.unshift(L[2])),F.length&&(i="/"+F.join(".")+i),this.hostname=P.join(".");break}}}if(this.hostname.length>b?this.hostname="":this.hostname=this.hostname.toLowerCase(),!v){for(var B=this.hostname.split("."),I=[],u=0;uu;u++){var j=m[u],G=encodeURIComponent(j);G===j&&(G=escape(j)),i=i.split(j).join(G)}var Y=i.indexOf("#");-1!==Y&&(this.hash=i.substr(Y),i=i.slice(0,Y));var X=i.indexOf("?");if(-1!==X?(this.search=i.substr(X),this.query=i.substr(X+1),e&&(this.query=C.parse(this.query)),i=i.slice(0,X)):e&&(this.search="",this.query={}),i&&(this.pathname=i),w[o]&&this.hostname&&!this.pathname&&(this.pathname="/"),this.pathname||this.search){var U=this.pathname||"",N=this.search||"";this.path=U+N}return this.href=this.format(),this},i.prototype.format=function(){var t=this.auth||"";t&&(t=encodeURIComponent(t),t=t.replace(/%3A/i,":"),t+="@");var e=this.protocol||"",r=this.pathname||"",i=this.hash||"",n=!1,o="";this.host?n=t+this.host:this.hostname&&(n=t+(-1===this.hostname.indexOf(":")?this.hostname:"["+this.hostname+"]"),this.port&&(n+=":"+this.port)),this.query&&u(this.query)&&Object.keys(this.query).length&&(o=C.stringify(this.query));var s=this.search||o&&"?"+o||"";return e&&":"!==e.substr(-1)&&(e+=":"),this.slashes||(!e||w[e])&&n!==!1?(n="//"+(n||""),r&&"/"!==r.charAt(0)&&(r="/"+r)):n||(n=""),i&&"#"!==i.charAt(0)&&(i="#"+i),s&&"?"!==s.charAt(0)&&(s="?"+s),r=r.replace(/[?#]/g,function(t){return encodeURIComponent(t)}),s=s.replace("#","%23"),e+n+r+s+i},i.prototype.resolve=function(t){return this.resolveObject(n(t,!1,!0)).format()},i.prototype.resolveObject=function(t){if(h(t)){var e=new i;e.parse(t,!1,!0),t=e}var r=new i;if(Object.keys(this).forEach(function(t){r[t]=this[t]},this),r.hash=t.hash,""===t.href)return r.href=r.format(),r;if(t.slashes&&!t.protocol)return Object.keys(t).forEach(function(e){"protocol"!==e&&(r[e]=t[e])}),w[r.protocol]&&r.hostname&&!r.pathname&&(r.path=r.pathname="/"),r.href=r.format(),r;if(t.protocol&&t.protocol!==r.protocol){if(!w[t.protocol])return Object.keys(t).forEach(function(e){r[e]=t[e]}),r.href=r.format(),r;if(r.protocol=t.protocol,t.host||S[t.protocol])r.pathname=t.pathname;else{for(var n=(t.pathname||"").split("/");n.length&&!(t.host=n.shift()););t.host||(t.host=""),t.hostname||(t.hostname=""),""!==n[0]&&n.unshift(""),n.length<2&&n.unshift(""),r.pathname=n.join("/")}if(r.search=t.search,r.query=t.query,r.host=t.host||"",r.auth=t.auth,r.hostname=t.hostname||t.host,r.port=t.port,r.pathname||r.search){var o=r.pathname||"",s=r.search||"";r.path=o+s}return r.slashes=r.slashes||t.slashes,r.href=r.format(),r}var a=r.pathname&&"/"===r.pathname.charAt(0),u=t.host||t.pathname&&"/"===t.pathname.charAt(0),p=u||a||r.host&&t.pathname,d=p,f=r.pathname&&r.pathname.split("/")||[],n=t.pathname&&t.pathname.split("/")||[],v=r.protocol&&!w[r.protocol];if(v&&(r.hostname="",r.port=null,r.host&&(""===f[0]?f[0]=r.host:f.unshift(r.host)),r.host="",t.protocol&&(t.hostname=null,t.port=null,t.host&&(""===n[0]?n[0]=t.host:n.unshift(t.host)),t.host=null),p=p&&(""===n[0]||""===f[0])),u)r.host=t.host||""===t.host?t.host:r.host,r.hostname=t.hostname||""===t.hostname?t.hostname:r.hostname,r.search=t.search,r.query=t.query,f=n;else if(n.length)f||(f=[]),f.pop(),f=f.concat(n),r.search=t.search,r.query=t.query;else if(!c(t.search)){if(v){r.hostname=r.host=f.shift();var g=r.host&&r.host.indexOf("@")>0?r.host.split("@"):!1;g&&(r.auth=g.shift(),r.host=r.hostname=g.shift())}return r.search=t.search,r.query=t.query,l(r.pathname)&&l(r.search)||(r.path=(r.pathname?r.pathname:"")+(r.search?r.search:"")),r.href=r.format(),r}if(!f.length)return r.pathname=null,r.search?r.path="/"+r.search:r.path=null,r.href=r.format(),r;for(var m=f.slice(-1)[0],y=(r.host||t.host)&&("."===m||".."===m)||""===m,x=0,b=f.length;b>=0;b--)m=f[b],"."==m?f.splice(b,1):".."===m?(f.splice(b,1),x++):x&&(f.splice(b,1),x--);if(!p&&!d)for(;x--;x)f.unshift("..");!p||""===f[0]||f[0]&&"/"===f[0].charAt(0)||f.unshift(""),y&&"/"!==f.join("/").substr(-1)&&f.push("");var _=""===f[0]||f[0]&&"/"===f[0].charAt(0);if(v){r.hostname=r.host=_?"":f.length?f.shift():"";var g=r.host&&r.host.indexOf("@")>0?r.host.split("@"):!1;g&&(r.auth=g.shift(),r.host=r.hostname=g.shift())}return p=p||r.host&&f.length,p&&!_&&f.unshift(""),f.length?r.pathname=f.join("/"):(r.pathname=null,r.path=null),l(r.pathname)&&l(r.search)||(r.path=(r.pathname?r.pathname:"")+(r.search?r.search:"")),r.auth=t.auth||r.auth,r.slashes=r.slashes||t.slashes,r.href=r.format(),r},i.prototype.parseHost=function(){var t=this.host,e=f.exec(t);e&&(e=e[0],":"!==e&&(this.port=e.substr(1)),t=t.substr(0,t.length-e.length)),t&&(this.hostname=t)}},{punycode:19,querystring:22}],24:[function(t,e,r){"use strict";function i(t,e,r){r=r||2;var i=e&&e.length,o=i?e[0]*r:t.length,a=n(t,0,o,r,!0),h=[];if(!a)return h;var u,l,p,d,f,v,g;if(i&&(a=c(t,e,a,r)),t.length>80*r){u=p=t[0],l=d=t[1];for(var m=r;o>m;m+=r)f=t[m],v=t[m+1],u>f&&(u=f),l>v&&(l=v),f>p&&(p=f),v>d&&(d=v);g=Math.max(p-u,d-l)}return s(a,h,r,u,l,g),h}function n(t,e,r,i,n){var o,s,a,h=0;for(o=e,s=r-i;r>o;o+=i)h+=(t[s]-t[o])*(t[o+1]+t[s+1]),s=o;if(n===h>0)for(o=e;r>o;o+=i)a=M(o,t[o],t[o+1],a);else for(o=r-i;o>=e;o-=i)a=M(o,t[o],t[o+1],a);return a}function o(t,e){if(!t)return t;e||(e=t);var r,i=t;do if(r=!1,i.steiner||!T(i,i.next)&&0!==_(i.prev,i,i.next))i=i.next;else{if(R(i),i=e=i.prev,i===i.next)return null;r=!0}while(r||i!==e);return e}function s(t,e,r,i,n,c,p){if(t){!p&&c&&v(t,i,n,c);for(var d,f,g=t;t.prev!==t.next;)if(d=t.prev,f=t.next,c?h(t,i,n,c):a(t))e.push(d.i/r),e.push(t.i/r),e.push(f.i/r),R(t),t=f.next,g=f.next;else if(t=f,t===g){p?1===p?(t=u(t,e,r),s(t,e,r,i,n,c,2)):2===p&&l(t,e,r,i,n,c):s(o(t),e,r,i,n,c,1);break}}}function a(t){var e=t.prev,r=t,i=t.next;if(_(e,r,i)>=0)return!1;for(var n=t.next.next;n!==t.prev;){if(x(e.x,e.y,r.x,r.y,i.x,i.y,n.x,n.y)&&_(n.prev,n,n.next)>=0)return!1;n=n.next}return!0}function h(t,e,r,i){var n=t.prev,o=t,s=t.next;if(_(n,o,s)>=0)return!1;for(var a=n.xo.x?n.x>s.x?n.x:s.x:o.x>s.x?o.x:s.x,l=n.y>o.y?n.y>s.y?n.y:s.y:o.y>s.y?o.y:s.y,c=m(a,h,e,r,i),p=m(u,l,e,r,i),d=t.nextZ;d&&d.z<=p;){if(d!==t.prev&&d!==t.next&&x(n.x,n.y,o.x,o.y,s.x,s.y,d.x,d.y)&&_(d.prev,d,d.next)>=0)return!1;d=d.nextZ}for(d=t.prevZ;d&&d.z>=c;){if(d!==t.prev&&d!==t.next&&x(n.x,n.y,o.x,o.y,s.x,s.y,d.x,d.y)&&_(d.prev,d,d.next)>=0)return!1;d=d.prevZ}return!0}function u(t,e,r){var i=t;do{var n=i.prev,o=i.next.next;E(n,i,i.next,o)&&w(n,o)&&w(o,n)&&(e.push(n.i/r),e.push(i.i/r),e.push(o.i/r),R(i),R(i.next),i=t=o),i=i.next}while(i!==t);return i}function l(t,e,r,i,n,a){var h=t;do{for(var u=h.next.next;u!==h.prev;){if(h.i!==u.i&&b(h,u)){var l=A(h,u);return h=o(h,h.next),l=o(l,l.next),s(h,e,r,i,n,a),void s(l,e,r,i,n,a)}u=u.next}h=h.next}while(h!==t)}function c(t,e,r,i){var s,a,h,u,l,c=[];for(s=0,a=e.length;a>s;s++)h=e[s]*i,u=a-1>s?e[s+1]*i:t.length,l=n(t,h,u,i,!1),l===l.next&&(l.steiner=!0),c.push(y(l));for(c.sort(p),s=0;s=i.next.y){var a=i.x+(o-i.y)*(i.next.x-i.x)/(i.next.y-i.y);n>=a&&a>s&&(s=a,r=i.x=i.x&&i.x>=r.x&&x(oh||h===l&&i.x>r.x)&&w(i,t)&&(r=i,l=h)),i=i.next;return r}function v(t,e,r,i){var n=t;do null===n.z&&(n.z=m(n.x,n.y,e,r,i)),n.prevZ=n.prev,n.nextZ=n.next,n=n.next;while(n!==t);n.prevZ.nextZ=null,n.prevZ=null,g(n)}function g(t){var e,r,i,n,o,s,a,h,u=1;do{for(r=t,t=null,o=null,s=0;r;){for(s++,i=r,a=0,e=0;u>e&&(a++,i=i.nextZ,i);e++);for(h=u;a>0||h>0&&i;)0===a?(n=i,i=i.nextZ,h--):0!==h&&i?r.z<=i.z?(n=r,r=r.nextZ,a--):(n=i,i=i.nextZ,h--):(n=r,r=r.nextZ,a--),o?o.nextZ=n:t=n,n.prevZ=o,o=n;r=i}o.nextZ=null,u*=2}while(s>1);return t}function m(t,e,r,i,n){return t=32767*(t-r)/n,e=32767*(e-i)/n,t=16711935&(t|t<<8),t=252645135&(t|t<<4),t=858993459&(t|t<<2),t=1431655765&(t|t<<1),e=16711935&(e|e<<8),e=252645135&(e|e<<4),e=858993459&(e|e<<2),e=1431655765&(e|e<<1),t|e<<1}function y(t){var e=t,r=t;do e.x=0&&(t-s)*(i-a)-(r-s)*(e-a)>=0&&(r-s)*(o-a)-(n-s)*(i-a)>=0}function b(t,e){return T(t,e)||t.next.i!==e.i&&t.prev.i!==e.i&&!S(t,e)&&w(t,e)&&w(e,t)&&C(t,e)}function _(t,e,r){return(e.y-t.y)*(r.x-e.x)-(e.x-t.x)*(r.y-e.y)}function T(t,e){return t.x===e.x&&t.y===e.y}function E(t,e,r,i){return _(t,e,r)>0!=_(t,e,i)>0&&_(r,i,t)>0!=_(r,i,e)>0}function S(t,e){var r=t;do{if(r.i!==t.i&&r.next.i!==t.i&&r.i!==e.i&&r.next.i!==e.i&&E(r,r.next,t,e))return!0;r=r.next}while(r!==t);return!1}function w(t,e){return _(t.prev,t,t.next)<0?_(t,e,t.next)>=0&&_(t,t.prev,e)>=0:_(t,e,t.prev)<0||_(t,t.next,e)<0}function C(t,e){var r=t,i=!1,n=(t.x+e.x)/2,o=(t.y+e.y)/2;do r.y>o!=r.next.y>o&&n<(r.next.x-r.x)*(o-r.y)/(r.next.y-r.y)+r.x&&(i=!i),r=r.next;while(r!==t);return i}function A(t,e){var r=new O(t.i,t.x,t.y),i=new O(e.i,e.x,e.y),n=t.next,o=e.prev;return t.next=e,e.prev=t,r.next=n,n.prev=r,i.next=r,r.prev=i,o.next=i,i.prev=o,i}function M(t,e,r,i){var n=new O(t,e,r);return i?(n.next=i.next,n.prev=i,i.next.prev=n,i.next=n):(n.prev=n,n.next=n),n}function R(t){t.next.prev=t.prev,t.prev.next=t.next,t.prevZ&&(t.prevZ.nextZ=t.nextZ),t.nextZ&&(t.nextZ.prevZ=t.prevZ)}function O(t,e,r){this.i=t,this.x=e,this.y=r,this.prev=null,this.next=null,this.z=null,this.prevZ=null,this.nextZ=null,this.steiner=!1}e.exports=i},{}],25:[function(t,e,r){"use strict";function i(t,e,r){this.fn=t,this.context=e,this.once=r||!1}function n(){}var o="function"!=typeof Object.create?"~":!1;n.prototype._events=void 0,n.prototype.listeners=function(t,e){var r=o?o+t:t,i=this._events&&this._events[r];if(e)return!!i;if(!i)return[];if(i.fn)return[i.fn];for(var n=0,s=i.length,a=new Array(s);s>n;n++)a[n]=i[n].fn;return a},n.prototype.emit=function(t,e,r,i,n,s){var a=o?o+t:t;if(!this._events||!this._events[a])return!1;var h,u,l=this._events[a],c=arguments.length;if("function"==typeof l.fn){switch(l.once&&this.removeListener(t,l.fn,void 0,!0),c){case 1:return l.fn.call(l.context),!0;case 2:return l.fn.call(l.context,e),!0;case 3:return l.fn.call(l.context,e,r),!0;case 4:return l.fn.call(l.context,e,r,i),!0;case 5:return l.fn.call(l.context,e,r,i,n),!0;case 6:return l.fn.call(l.context,e,r,i,n,s),!0}for(u=1,h=new Array(c-1);c>u;u++)h[u-1]=arguments[u];l.fn.apply(l.context,h)}else{var p,d=l.length;for(u=0;d>u;u++)switch(l[u].once&&this.removeListener(t,l[u].fn,void 0,!0),c){case 1:l[u].fn.call(l[u].context);break;case 2:l[u].fn.call(l[u].context,e);break;case 3:l[u].fn.call(l[u].context,e,r);break;default:if(!h)for(p=1,h=new Array(c-1);c>p;p++)h[p-1]=arguments[p];l[u].fn.apply(l[u].context,h)}}return!0},n.prototype.on=function(t,e,r){var n=new i(e,r||this),s=o?o+t:t;return this._events||(this._events=o?{}:Object.create(null)),this._events[s]?this._events[s].fn?this._events[s]=[this._events[s],n]:this._events[s].push(n):this._events[s]=n,this},n.prototype.once=function(t,e,r){var n=new i(e,r||this,!0),s=o?o+t:t;return this._events||(this._events=o?{}:Object.create(null)),this._events[s]?this._events[s].fn?this._events[s]=[this._events[s],n]:this._events[s].push(n):this._events[s]=n,this},n.prototype.removeListener=function(t,e,r,i){var n=o?o+t:t;if(!this._events||!this._events[n])return this;var s=this._events[n],a=[];if(e)if(s.fn)(s.fn!==e||i&&!s.once||r&&s.context!==r)&&a.push(s);else for(var h=0,u=s.length;u>h;h++)(s[h].fn!==e||i&&!s[h].once||r&&s[h].context!==r)&&a.push(s[h]);return a.length?this._events[n]=1===a.length?a[0]:a:delete this._events[n],this},n.prototype.removeAllListeners=function(t){return this._events?(t?delete this._events[o?o+t:t]:this._events=o?{}:Object.create(null),this):this},n.prototype.off=n.prototype.removeListener,n.prototype.addListener=n.prototype.on,n.prototype.setMaxListeners=function(){return this},n.prefixed=o,"undefined"!=typeof e&&(e.exports=n)},{}],26:[function(t,e,r){"use strict";function i(t){if(null===t||void 0===t)throw new TypeError("Object.assign cannot be called with null or undefined");return Object(t)}var n=Object.prototype.hasOwnProperty,o=Object.prototype.propertyIsEnumerable;e.exports=Object.assign||function(t,e){for(var r,s,a=i(t),h=1;h=t.length&&r())}if(r=r||function(){},!t.length)return r();var o=0;u(t,function(t){e(t,i(n))})},s.forEach=s.each,s.eachSeries=function(t,e,r){if(r=r||function(){},!t.length)return r();var i=0,n=function(){e(t[i],function(e){e?(r(e),r=function(){}):(i+=1,i>=t.length?r():n())})};n()},s.forEachSeries=s.eachSeries,s.eachLimit=function(t,e,r,i){var n=d(e);n.apply(null,[t,r,i])},s.forEachLimit=s.eachLimit;var d=function(t){return function(e,r,i){if(i=i||function(){},!e.length||0>=t)return i();var n=0,o=0,s=0;!function a(){if(n>=e.length)return i();for(;t>s&&o=e.length?i():a())})}()}},f=function(t){return function(){var e=Array.prototype.slice.call(arguments);return t.apply(null,[s.each].concat(e))}},v=function(t,e){return function(){var r=Array.prototype.slice.call(arguments);return e.apply(null,[d(t)].concat(r))}},g=function(t){return function(){var e=Array.prototype.slice.call(arguments);return t.apply(null,[s.eachSeries].concat(e))}},m=function(t,e,r,i){if(e=l(e,function(t,e){return{index:e,value:t}}),i){var n=[];t(e,function(t,e){r(t.value,function(r,i){n[t.index]=i,e(r)})},function(t){i(t,n)})}else t(e,function(t,e){r(t.value,function(t){e(t)})})};s.map=f(m),s.mapSeries=g(m),s.mapLimit=function(t,e,r,i){return y(e)(t,r,i)};var y=function(t){return v(t,m)};s.reduce=function(t,e,r,i){s.eachSeries(t,function(t,i){r(e,t,function(t,r){e=r,i(t)})},function(t){i(t,e)})},s.inject=s.reduce,s.foldl=s.reduce,s.reduceRight=function(t,e,r,i){var n=l(t,function(t){return t}).reverse();s.reduce(n,e,r,i)},s.foldr=s.reduceRight;var x=function(t,e,r,i){var n=[];e=l(e,function(t,e){return{index:e,value:t}}),t(e,function(t,e){r(t.value,function(r){r&&n.push(t),e()})},function(t){i(l(n.sort(function(t,e){return t.index-e.index}),function(t){return t.value}))})};s.filter=f(x),s.filterSeries=g(x),s.select=s.filter,s.selectSeries=s.filterSeries;var b=function(t,e,r,i){var n=[];e=l(e,function(t,e){return{index:e,value:t}}),t(e,function(t,e){r(t.value,function(r){r||n.push(t),e()})},function(t){i(l(n.sort(function(t,e){return t.index-e.index}),function(t){return t.value}))})};s.reject=f(b),s.rejectSeries=g(b);var _=function(t,e,r,i){t(e,function(t,e){r(t,function(r){r?(i(t),i=function(){}):e()})},function(t){i()})};s.detect=f(_),s.detectSeries=g(_),s.some=function(t,e,r){s.each(t,function(t,i){e(t,function(t){t&&(r(!0),r=function(){}),i()})},function(t){r(!1)})},s.any=s.some,s.every=function(t,e,r){s.each(t,function(t,i){e(t,function(t){t||(r(!1),r=function(){}),i()})},function(t){r(!0)})},s.all=s.every,s.sortBy=function(t,e,r){s.map(t,function(t,r){e(t,function(e,i){e?r(e):r(null,{value:t,criteria:i})})},function(t,e){if(t)return r(t);var i=function(t,e){var r=t.criteria,i=e.criteria;return i>r?-1:r>i?1:0};r(null,l(e.sort(i),function(t){return t.value}))})},s.auto=function(t,e){e=e||function(){};var r=p(t),i=r.length;if(!i)return e();var n={},o=[],a=function(t){o.unshift(t)},l=function(t){for(var e=0;ei;){var o=i+(n-i+1>>>1);r(e,t[o])>=0?i=o:n=o-1}return i}function n(t,e,n,o){return t.started||(t.started=!0),h(e)||(e=[e]),0==e.length?s.setImmediate(function(){t.drain&&t.drain()}):void u(e,function(e){var a={data:e,priority:n,callback:"function"==typeof o?o:null};t.tasks.splice(i(t.tasks,a,r)+1,0,a),t.saturated&&t.tasks.length===t.concurrency&&t.saturated(),s.setImmediate(t.process)})}var o=s.queue(t,e);return o.push=function(t,e,r){n(o,t,e,r)},delete o.unshift,o},s.cargo=function(t,e){var r=!1,i=[],n={tasks:i,payload:e,saturated:null,empty:null,drain:null,drained:!0,push:function(t,r){h(t)||(t=[t]),u(t,function(t){i.push({data:t,callback:"function"==typeof r?r:null}),n.drained=!1,n.saturated&&i.length===e&&n.saturated()}),s.setImmediate(n.process)},process:function o(){if(!r){if(0===i.length)return n.drain&&!n.drained&&n.drain(),void(n.drained=!0);var s="number"==typeof e?i.splice(0,e):i.splice(0,i.length),a=l(s,function(t){return t.data});n.empty&&n.empty(),r=!0,t(a,function(){r=!1;var t=arguments;u(s,function(e){e.callback&&e.callback.apply(null,t)}),o()})}},length:function(){return i.length},running:function(){return r}};return n};var S=function(t){return function(e){var r=Array.prototype.slice.call(arguments,1);e.apply(null,r.concat([function(e){var r=Array.prototype.slice.call(arguments,1);"undefined"!=typeof console&&(e?console.error&&console.error(e):console[t]&&u(r,function(e){console[t](e)}))}]))}};s.log=S("log"),s.dir=S("dir"),s.memoize=function(t,e){var r={},i={};e=e||function(t){return t};var n=function(){var n=Array.prototype.slice.call(arguments),o=n.pop(),a=e.apply(null,n);a in r?s.nextTick(function(){o.apply(null,r[a])}):a in i?i[a].push(o):(i[a]=[o],t.apply(null,n.concat([function(){r[a]=arguments;var t=i[a];delete i[a];for(var e=0,n=t.length;n>e;e++)t[e].apply(null,arguments)}])))};return n.memo=r,n.unmemoized=t,n},s.unmemoize=function(t){return function(){return(t.unmemoized||t).apply(null,arguments)}},s.times=function(t,e,r){for(var i=[],n=0;t>n;n++)i.push(n);return s.map(i,e,r)},s.timesSeries=function(t,e,r){for(var i=[],n=0;t>n;n++)i.push(n);return s.mapSeries(i,e,r)},s.seq=function(){var t=arguments;return function(){var e=this,r=Array.prototype.slice.call(arguments),i=r.pop();s.reduce(t,r,function(t,r,i){r.apply(e,t.concat([function(){var t=arguments[0],e=Array.prototype.slice.call(arguments,1);i(t,e)}]))},function(t,r){i.apply(e,[t].concat(r))})}},s.compose=function(){return s.seq.apply(null,Array.prototype.reverse.call(arguments))};var w=function(t,e){var r=function(){var r=this,i=Array.prototype.slice.call(arguments),n=i.pop();return t(e,function(t,e){t.apply(r,i.concat([e]))},n)};if(arguments.length>2){var i=Array.prototype.slice.call(arguments,2);return r.apply(this,i)}return r};s.applyEach=f(w),s.applyEachSeries=g(w),s.forever=function(t,e){function r(i){if(i){if(e)return e(i);throw i}t(r)}r()},"undefined"!=typeof r&&r.exports?r.exports=s:"undefined"!=typeof t&&t.amd?t([],function(){return s}):n.async=s}()}).call(this,e("_process"))},{_process:18}],28:[function(t,e,r){function i(t,e){a.call(this),e=e||10,this.baseUrl=t||"",this.progress=0,this.loading=!1,this._progressChunk=0,this._beforeMiddleware=[],this._afterMiddleware=[],this._boundLoadResource=this._loadResource.bind(this),this._boundOnLoad=this._onLoad.bind(this),this._buffer=[],this._numToLoad=0,this._queue=n.queue(this._boundLoadResource,e),this.resources={}}var n=t("async"),o=t("url"),s=t("./Resource"),a=t("eventemitter3");i.prototype=Object.create(a.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.add=i.prototype.enqueue=function(t,e,r,i){if(Array.isArray(t)){for(var n=0;n0)if(this.xhrType===i.XHR_RESPONSE_TYPE.TEXT)this.data=t.responseText;else if(this.xhrType===i.XHR_RESPONSE_TYPE.JSON)try{this.data=JSON.parse(t.responseText),this.isJson=!0}catch(r){this.error=new Error("Error trying to parse loaded json:",r)}else if(this.xhrType===i.XHR_RESPONSE_TYPE.DOCUMENT)try{if(window.DOMParser){var n=new DOMParser;this.data=n.parseFromString(t.responseText,"text/xml")}else{var o=document.createElement("div");o.innerHTML=t.responseText,this.data=o}this.isXml=!0}catch(r){this.error=new Error("Error trying to parse loaded xml:",r)}else this.data=t.response||t.responseText;else this.error=new Error("["+t.status+"]"+t.statusText+":"+t.responseURL);this.complete()},i.prototype._determineCrossOrigin=function(t,e){if(0===t.indexOf("data:"))return"";e=e||window.location,u||(u=document.createElement("a")),u.href=t,t=a.parse(u.href);var r=!t.port&&""===e.port||t.port===e.port;return t.hostname===e.hostname&&r&&t.protocol===e.protocol?"":"anonymous"},i.prototype._determineXhrType=function(){return i._xhrTypeMap[this._getExtension()]||i.XHR_RESPONSE_TYPE.TEXT},i.prototype._determineLoadType=function(){return i._loadTypeMap[this._getExtension()]||i.LOAD_TYPE.XHR},i.prototype._getExtension=function(){var t,e=this.url;if(this.isDataUrl){var r=e.indexOf("/");t=e.substring(r+1,e.indexOf(";",r))}else{var i=e.indexOf("?");-1!==i&&(e=e.substring(0,i)),t=e.substring(e.lastIndexOf(".")+1)}return t},i.prototype._getMimeFromXhrType=function(t){switch(t){case i.XHR_RESPONSE_TYPE.BUFFER:return"application/octet-binary";case i.XHR_RESPONSE_TYPE.BLOB:return"application/blob";case i.XHR_RESPONSE_TYPE.DOCUMENT:return"application/xml";case i.XHR_RESPONSE_TYPE.JSON:return"application/json";case i.XHR_RESPONSE_TYPE.DEFAULT:case i.XHR_RESPONSE_TYPE.TEXT:default:return"text/plain"}},i.LOAD_TYPE={XHR:1,IMAGE:2,AUDIO:3,VIDEO:4},i.XHR_READY_STATE={UNSENT:0,OPENED:1,HEADERS_RECEIVED:2,LOADING:3,DONE:4},i.XHR_RESPONSE_TYPE={DEFAULT:"text",BUFFER:"arraybuffer",BLOB:"blob",DOCUMENT:"document",JSON:"json",TEXT:"text"},i._loadTypeMap={gif:i.LOAD_TYPE.IMAGE,png:i.LOAD_TYPE.IMAGE,bmp:i.LOAD_TYPE.IMAGE,jpg:i.LOAD_TYPE.IMAGE,jpeg:i.LOAD_TYPE.IMAGE,tif:i.LOAD_TYPE.IMAGE,tiff:i.LOAD_TYPE.IMAGE,webp:i.LOAD_TYPE.IMAGE,tga:i.LOAD_TYPE.IMAGE},i._xhrTypeMap={xhtml:i.XHR_RESPONSE_TYPE.DOCUMENT,html:i.XHR_RESPONSE_TYPE.DOCUMENT,htm:i.XHR_RESPONSE_TYPE.DOCUMENT,xml:i.XHR_RESPONSE_TYPE.DOCUMENT,tmx:i.XHR_RESPONSE_TYPE.DOCUMENT,tsx:i.XHR_RESPONSE_TYPE.DOCUMENT,svg:i.XHR_RESPONSE_TYPE.DOCUMENT,gif:i.XHR_RESPONSE_TYPE.BLOB,png:i.XHR_RESPONSE_TYPE.BLOB,bmp:i.XHR_RESPONSE_TYPE.BLOB,jpg:i.XHR_RESPONSE_TYPE.BLOB,jpeg:i.XHR_RESPONSE_TYPE.BLOB,tif:i.XHR_RESPONSE_TYPE.BLOB,tiff:i.XHR_RESPONSE_TYPE.BLOB,webp:i.XHR_RESPONSE_TYPE.BLOB,tga:i.XHR_RESPONSE_TYPE.BLOB,json:i.XHR_RESPONSE_TYPE.JSON,text:i.XHR_RESPONSE_TYPE.TEXT,txt:i.XHR_RESPONSE_TYPE.TEXT},i.setExtensionLoadType=function(t,e){o(i._loadTypeMap,t,e)},i.setExtensionXhrType=function(t,e){o(i._xhrTypeMap,t,e)}},{eventemitter3:25,url:23}],30:[function(t,e,r){e.exports={_keyStr:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",encodeBinary:function(t){for(var e,r="",i=new Array(4),n=0,o=0,s=0;n>2,i[1]=(3&e[0])<<4|e[1]>>4,i[2]=(15&e[1])<<2|e[2]>>6,i[3]=63&e[2],s=n-(t.length-1)){case 2:i[3]=64,i[2]=64;break;case 1:i[3]=64}for(o=0;o","Richard Davey "],main:"./src/index.js",homepage:"http://goodboydigital.com/",bugs:"https://github.com/pixijs/pixi.js/issues",license:"MIT",repository:{type:"git",url:"https://github.com/pixijs/pixi.js.git"},scripts:{start:"gulp && gulp watch",test:"gulp && testem ci",build:"gulp",docs:"jsdoc -c ./gulp/util/jsdoc.conf.json -R README.md"},files:["bin/","src/","CONTRIBUTING.md","LICENSE","package.json","README.md"],dependencies:{async:"^1.5.0",brfs:"^1.4.1",earcut:"^2.0.7",eventemitter3:"^1.1.1","object-assign":"^4.0.1","pixi-gl-core":"git+https://github.com/GoodBoyDigital/pixi-gl-core.git","resource-loader":"^1.6.4"},devDependencies:{browserify:"^11.1.0",chai:"^3.2.0",del:"^2.0.2",gulp:"^3.9.0","gulp-cached":"^1.1.0","gulp-concat":"^2.6.0","gulp-debug":"^2.1.0","gulp-header":"^1.7.1","gulp-jshint":"^1.11.2","gulp-mirror":"^0.4.0","gulp-plumber":"^1.0.1","gulp-rename":"^1.2.2","gulp-sourcemaps":"^1.5.2","gulp-uglify":"^1.4.1","gulp-util":"^3.0.6","jaguarjs-jsdoc":"git+https://github.com/davidshimjs/jaguarjs-jsdoc.git",jsdoc:"^3.3.2","jshint-summary":"^0.4.0",minimist:"^1.2.0",mocha:"^2.3.2","require-dir":"^0.3.0","run-sequence":"^1.1.2",testem:"^0.9.4","vinyl-buffer":"^1.0.0","vinyl-source-stream":"^1.1.0",watchify:"^3.4.0"},browserify:{transform:["brfs"]}}},{}],35:[function(t,e,r){function i(t){var e=document.createElement("div");e.style.width="100px",e.style.height="100px",e.style.position="absolute",e.style.top=0,e.style.left=0,e.style.zIndex=2,this.div=e,this.pool=[],this.renderId=0,this.debug=!1,this.renderer=t,this.children=[],this._onKeyDown=this._onKeyDown.bind(this),this._onMouseMove=this._onMouseMove.bind(this),this.isActive=!1,window.addEventListener("keydown",this._onKeyDown,!1)}var n=t("../core");Object.assign(n.DisplayObject.prototype,t("./accessibleTarget")),i.prototype.constructor=i,e.exports=i,i.prototype.activate=function(){this.isActive||(this.isActive=!0,window.document.addEventListener("mousemove",this._onMouseMove,!0),window.removeEventListener("keydown",this._onKeyDown,!1),this.renderer.on("postrender",this.update,this),this.renderer.view.parentNode.appendChild(this.div))},i.prototype.deactivate=function(){this.isActive&&(this.isActive=!1,window.document.removeEventListener("mousemove",this._onMouseMove),window.addEventListener("keydown",this._onKeyDown,!1),this.renderer.off("postrender",this.update),this.div.parentNode.removeChild(this.div))},i.prototype.updateAccessibleObjects=function(t){if(t.visible){t.accessible&&t.interactive&&(t._accessibleActive||this.addChild(t),t.renderId=this.renderId);for(var e=t.children,r=e.length-1;r>=0;r--)this.updateAccessibleObjects(e[r])}},i.prototype.update=function(){this.updateAccessibleObjects(this.renderer._lastObjectRendered);var t=this.renderer.view.getBoundingClientRect(),e=t.width/this.renderer.width,r=t.height/this.renderer.height,i=this.div;i.style.left=t.left+"px",i.style.top=t.top+"px",i.style.width=this.renderer.width+"px",i.style.height=this.renderer.height+"px";for(var o=0;othis.renderer.width&&(t.width=this.renderer.width-t.x),t.y+t.height>this.renderer.height&&(t.height=this.renderer.height-t.y)},i.prototype.addChild=function(t){var e=this.pool.pop();e||(e=document.createElement("button"),e.style.width="100px",e.style.height="100px",e.style.backgroundColor=this.debug?"rgba(255,0,0,0.5)":"transparent",e.style.position="absolute",e.style.zIndex=2,e.style.borderStyle="none",e.addEventListener("click",this._onClick.bind(this)),e.addEventListener("focus",this._onFocus.bind(this)),e.addEventListener("focusout",this._onFocusOut.bind(this))),e.title=t.accessibleTitle||"displayObject "+this.tabIndex,t._accessibleActive=!0,t._accessibleDiv=e,e.displayObject=t,this.children.push(t),this.div.appendChild(t._accessibleDiv),t._accessibleDiv.tabIndex=t.tabIndex},i.prototype._onClick=function(t){var e=this.renderer.plugins.interaction;e.dispatchEvent(t.target.displayObject,"click",e.eventData)},i.prototype._onFocus=function(t){var e=this.renderer.plugins.interaction;e.dispatchEvent(t.target.displayObject,"mouseover",e.eventData)},i.prototype._onFocusOut=function(t){var e=this.renderer.plugins.interaction;e.dispatchEvent(t.target.displayObject,"mouseout",e.eventData)},i.prototype._onKeyDown=function(t){9===t.keyCode&&this.activate()},i.prototype._onMouseMove=function(){this.deactivate()},i.prototype.destroy=function(){this.div=null;for(var t=0;t1)for(var r=0;e>r;r++)this.addChild(arguments[r]);else t.parent&&t.parent.removeChild(t),t.parent=this,this.children.push(t),this.onChildrenChange(this.children.length-1),t.emit("added",this);return t},i.prototype.addChildAt=function(t,e){if(e>=0&&e<=this.children.length)return t.parent&&t.parent.removeChild(t),t.parent=this,this.children.splice(e,0,t),this.onChildrenChange(e),t.emit("added",this),t;throw new Error(t+"addChildAt: The index "+e+" supplied is out of bounds "+this.children.length)},i.prototype.swapChildren=function(t,e){if(t!==e){var r=this.getChildIndex(t),i=this.getChildIndex(e);if(0>r||0>i)throw new Error("swapChildren: Both the supplied DisplayObjects must be children of the caller.");this.children[r]=e,this.children[i]=t,this.onChildrenChange(i>r?r:i)}},i.prototype.getChildIndex=function(t){var e=this.children.indexOf(t);if(-1===e)throw new Error("The supplied DisplayObject must be a child of the caller");return e},i.prototype.setChildIndex=function(t,e){if(0>e||e>=this.children.length)throw new Error("The supplied index is out of bounds");var r=this.getChildIndex(t);o.removeItems(this.children,r,1),this.children.splice(e,0,t),this.onChildrenChange(e)},i.prototype.getChildAt=function(t){if(0>t||t>=this.children.length)throw new Error("getChildAt: Supplied index "+t+" does not exist in the child list, or the supplied DisplayObject is not a child of the caller");return this.children[t]},i.prototype.removeChild=function(t){var e=arguments.length;if(e>1)for(var r=0;e>r;r++)this.removeChild(arguments[r]);else{var i=this.children.indexOf(t);if(-1===i)return;t.parent=null,o.removeItems(this.children,i,1),this.onChildrenChange(i),t.emit("removed",this)}return t},i.prototype.removeChildAt=function(t){var e=this.getChildAt(t);return e.parent=null,o.removeItems(this.children,t,1),this.onChildrenChange(t),e.emit("removed",this),e},i.prototype.removeChildren=function(t,e){var r,i,n=t||0,o="number"==typeof e?e:this.children.length,s=o-n;if(s>0&&o>=s){for(r=this.children.splice(n,s),i=0;it;++t)this.children[t].updateTransform();this.dirty=!1}},i.prototype.containerUpdateTransform=i.prototype.updateTransform,i.prototype.getBounds=function(){if(!this._currentBounds){if(0===this.children.length)return n.Rectangle.EMPTY;for(var t,e,r,i=1/0,o=1/0,s=-(1/0),a=-(1/0),h=!1,u=0,l=this.children.length;l>u;++u){var c=this.children[u];c.visible&&(h=!0,t=this.children[u].getBounds(),i=ie?s:e,a=a>r?a:r)}if(!h)return n.Rectangle.EMPTY;var p=this._bounds;p.x=i,p.y=o,p.width=s-i,p.height=a-o,this._currentBounds=p}return this._currentBounds},i.prototype.containerGetBounds=i.prototype.getBounds,i.prototype.getLocalBounds=function(){var t=this.worldTransform;this.worldTransform=n.Matrix.IDENTITY;for(var e=0,r=this.children.length;r>e;++e)this.children[e].updateTransform();return this.worldTransform=t,this._currentBounds=null,this.getBounds(n.Matrix.IDENTITY)},i.prototype.renderWebGL=function(t){if(this.visible&&!(this.worldAlpha<=0)&&this.renderable){var e,r;if(this._mask||this._filters){for(t.currentRenderer.flush(),this._filters&&this._filters.length&&t.filterManager.pushFilter(this,this._filters),this._mask&&t.maskManager.pushMask(this,this._mask),t.currentRenderer.start(),this._renderWebGL(t),e=0,r=this.children.length;r>e;e++)this.children[e].renderWebGL(t);t.currentRenderer.flush(),this._mask&&t.maskManager.popMask(this,this._mask),this._filters&&t.filterManager.popFilter(),t.currentRenderer.start()}else for(this._renderWebGL(t),e=0,r=this.children.length;r>e;++e)this.children[e].renderWebGL(t)}},i.prototype._renderWebGL=function(t){},i.prototype._renderCanvas=function(t){},i.prototype.renderCanvas=function(t){if(this.visible&&!(this.alpha<=0)&&this.renderable){this._mask&&t.maskManager.pushMask(this._mask,t),this._renderCanvas(t);for(var e=0,r=this.children.length;r>e;++e)this.children[e].renderCanvas(t);this._mask&&t.maskManager.popMask(t)}},i.prototype.destroy=function(t){if(s.prototype.destroy.call(this),t)for(var e=0,r=this.children.length;r>e;++e)this.children[e].destroy(t);this.removeChildren(),this.children=null}},{"../math":48,"../textures/RenderTexture":91,"../utils":98,"./DisplayObject":40}],40:[function(t,e,r){function i(){s.call(this),this.position=new n.Point,this.scale=new n.Point(1,1),this.pivot=new n.Point(0,0),this.skew=new n.Point(0,0),this._rotation=0,this.alpha=1,this.visible=!0,this.renderable=!0,this.parent=null,this.worldAlpha=1,this.worldTransform=new n.Matrix,this.localTransform=new n.Matrix,this.filterArea=null,this._sr=0,this._cr=1,this._bounds=new n.Rectangle(0,0,1,1),this._currentBounds=null,this._mask=null,this.dirty=!0}var n=t("../math"),o=t("../textures/RenderTexture"),s=t("eventemitter3"),a=(t("../const"),new n.Matrix),h={worldTransform:new n.Matrix,worldAlpha:1,children:[]};i.prototype=Object.create(s.prototype),i.prototype.constructor=i,e.exports=i,Object.defineProperties(i.prototype,{x:{get:function(){return this.position.x},set:function(t){this.position.x=t,this.dirty=!0}},y:{get:function(){return this.position.y},set:function(t){this.position.y=t,this.dirty=!0}},scaleX:{get:function(){return this.scale.x},set:function(t){this.scale.x=t,this.dirty=!0}},scaleY:{get:function(){return this.scale.y},set:function(t){this.scale.y=t,this.dirty=!0}},rotation:{get:function(){return this._rotation},set:function(t){this._rotation=t,this.dirty=!0,this._sr=Math.sin(t),this._cr=Math.cos(t)}},scaleY:{get:function(){return this.scale.y},set:function(t){this.scale.y=t,this.dirty=!0}},worldVisible:{get:function(){var t=this;do{if(!t.visible)return!1;t=t.parent}while(t);return!0}},mask:{get:function(){return this._mask},set:function(t){this._mask&&(this._mask.renderable=!0),this._mask=t,this._mask&&(this._mask.renderable=!1)}},filters:{get:function(){return this._filters&&this._filters.slice()},set:function(t){this._filters=t&&t.slice()}}}),i.prototype.updateTransform=function(){var t=this.parent.worldTransform,e=this.worldTransform,r=this.localTransform;this.dirty&&(r.a=this._cr*this.scale.x,r.b=this._sr*this.scale.x,r.c=-this._sr*this.scale.y,r.d=this._cr*this.scale.y,r.tx=this.position.x-(this.pivot.x*r.a+this.pivot.y*r.c),r.ty=this.position.y-(this.pivot.x*r.b+this.pivot.y*r.d)),(this.dirty||this.parent.dirty)&&(e.a=r.a*t.a+r.b*t.c,e.b=r.a*t.b+r.b*t.d,e.c=r.c*t.a+r.d*t.c,e.d=r.c*t.b+r.d*t.d,e.tx=r.tx*t.a+r.ty*t.c+t.tx,e.ty=r.tx*t.b+r.ty*t.d+t.ty,this._currentBounds=null),this.worldAlpha=this.alpha*this.parent.worldAlpha},i.prototype.displayObjectUpdateTransform=i.prototype.updateTransform,i.prototype.getBounds=function(t){return n.Rectangle.EMPTY},i.prototype.getLocalBounds=function(){return this.getBounds(n.Matrix.IDENTITY)},i.prototype.toGlobal=function(t){return this.parent?this.displayObjectUpdateTransform():(this.parent=h,this.displayObjectUpdateTransform(),this.parent=null),this.worldTransform.apply(t)},i.prototype.toLocal=function(t,e,r){return e&&(t=e.toGlobal(t)),this.parent?this.displayObjectUpdateTransform():(this.parent=h,this.displayObjectUpdateTransform(),this.parent=null),this.worldTransform.applyInverse(t,r)},i.prototype.renderWebGL=function(t){},i.prototype.renderCanvas=function(t){},i.prototype.generateTexture=function(t,e,r){var i=this.getLocalBounds(),n=new o(t,0|i.width,0|i.height,e,r);return a.tx=-i.x,a.ty=-i.y,n.render(this,a),n},i.prototype.setParent=function(t){if(!t||!t.addChild)throw new Error("setParent: Argument must be a Container");return t.addChild(this),t},i.prototype.setTransform=function(t,e,r,i,n,o,s,a,h){return this.position.x=t||0,this.position.y=e||0,this.scale.x=r?r:1,this.scale.y=i?i:1,this.rotation=n||0,this.skew.x=o||0,this.skew.y=s||0,this.pivot.x=a||0,this.pivot.y=h||0,this.dirty=!0,this},i.prototype.destroy=function(){this.position=null,this.scale=null,this.pivot=null,this.skew=null,this.parent=null,this._bounds=null,this._currentBounds=null,this._mask=null,this.worldTransform=null,this.filterArea=null}},{"../const":38,"../math":48,"../textures/RenderTexture":91,eventemitter3:25}],41:[function(t,e,r){function i(){n.call(this),this.fillAlpha=1,this.lineWidth=0,this.lineColor=0,this.graphicsData=[],this.tint=16777215,this._prevTint=16777215,this.blendMode=l.BLEND_MODES.NORMAL,this.currentPath=null,this._webGL={},this.isMask=!1,this.boundsPadding=0,this._localBounds=new u.Rectangle(0,0,1,1),this.dirty=!0,this.glDirty=!1,this.boundsDirty=!0,this.cachedSpriteDirty=!1}var n=t("../display/Container"),o=t("../textures/Texture"),s=t("../renderers/canvas/utils/CanvasBuffer"),a=t("../renderers/canvas/utils/CanvasGraphics"),h=t("./GraphicsData"),u=t("../math"),l=t("../const"),c=new u.Point;i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.clone=function(){var t=new i;t.renderable=this.renderable,t.fillAlpha=this.fillAlpha,t.lineWidth=this.lineWidth,t.lineColor=this.lineColor,t.tint=this.tint,t.blendMode=this.blendMode,t.isMask=this.isMask,t.boundsPadding=this.boundsPadding,t.dirty=!0,t.glDirty=!0,t.cachedSpriteDirty=this.cachedSpriteDirty;for(var e=0;e=c;++c)l=c/s,n=h+(t-h)*l,o=u+(e-u)*l,a.push(n+(t+(r-t)*l-n)*l,o+(e+(i-e)*l-o)*l);return this.dirty=this.boundsDirty=!0,this},i.prototype.bezierCurveTo=function(t,e,r,i,n,o){this.currentPath?0===this.currentPath.shape.points.length&&(this.currentPath.shape.points=[0,0]):this.moveTo(0,0);for(var s,a,h,u,l,c=20,p=this.currentPath.shape.points,d=p[p.length-2],f=p[p.length-1],v=0,g=1;c>=g;++g)v=g/c,s=1-v,a=s*s,h=a*s,u=v*v,l=u*v,p.push(h*d+3*a*v*t+3*s*u*r+l*n,h*f+3*a*v*e+3*s*u*i+l*o);return this.dirty=this.boundsDirty=!0,this},i.prototype.arcTo=function(t,e,r,i,n){this.currentPath?0===this.currentPath.shape.points.length&&this.currentPath.shape.points.push(t,e):this.moveTo(t,e);var o=this.currentPath.shape.points,s=o[o.length-2],a=o[o.length-1],h=a-e,u=s-t,l=i-e,c=r-t,p=Math.abs(h*c-u*l);if(1e-8>p||0===n)(o[o.length-2]!==t||o[o.length-1]!==e)&&o.push(t,e);else{var d=h*h+u*u,f=l*l+c*c,v=h*l+u*c,g=n*Math.sqrt(d)/p,m=n*Math.sqrt(f)/p,y=g*v/d,x=m*v/f,b=g*c+m*u,_=g*l+m*h,T=u*(m+y),E=h*(m+y),S=c*(g+x),w=l*(g+x),C=Math.atan2(E-_,T-b),A=Math.atan2(w-_,S-b);this.arc(b+t,_+e,n,C,A,u*l>c*h)}return this.dirty=this.boundsDirty=!0,this},i.prototype.arc=function(t,e,r,i,n,o){if(o=o||!1,i===n)return this;!o&&i>=n?n+=2*Math.PI:o&&n>=i&&(i+=2*Math.PI);var s=o?-1*(i-n):n-i,a=40*Math.ceil(Math.abs(s)/(2*Math.PI));if(0===s)return this;var h=t+Math.cos(i)*r,u=e+Math.sin(i)*r;this.currentPath?this.currentPath.shape.points.push(h,u):this.moveTo(h,u);for(var l=this.currentPath.shape.points,c=s/(2*a),p=2*c,d=Math.cos(c),f=Math.sin(c),v=a-1,g=v%1/v,m=0;v>=m;m++){var y=m+g*m,x=c+i+p*y,b=Math.cos(x),_=-Math.sin(x);l.push((d*b+f*_)*r+t,(d*-_+f*b)*r+e)}return this.dirty=this.boundsDirty=!0,this},i.prototype.beginFill=function(t,e){return this.filling=!0,this.fillColor=t||0,this.fillAlpha=void 0===e?1:e,this.currentPath&&this.currentPath.shape.points.length<=2&&(this.currentPath.fill=this.filling,this.currentPath.fillColor=this.fillColor,this.currentPath.fillAlpha=this.fillAlpha),this},i.prototype.endFill=function(){return this.filling=!1,this.fillColor=null,this.fillAlpha=1,this},i.prototype.drawRect=function(t,e,r,i){return this.drawShape(new u.Rectangle(t,e,r,i)),this},i.prototype.drawRoundedRect=function(t,e,r,i,n){return this.drawShape(new u.RoundedRectangle(t,e,r,i,n)),this},i.prototype.drawCircle=function(t,e,r){return this.drawShape(new u.Circle(t,e,r)),this},i.prototype.drawEllipse=function(t,e,r,i){return this.drawShape(new u.Ellipse(t,e,r,i)),this},i.prototype.drawPolygon=function(t){var e=t,r=!0;if(e instanceof u.Polygon&&(r=e.closed,e=e.points),!Array.isArray(e)){e=new Array(arguments.length);for(var i=0;ig?g:S,S=S>y?y:S,S=S>b?b:S,w=w>m?m:w,w=w>x?x:w,w=w>_?_:w,T=g>T?g:T,T=y>T?y:T,T=b>T?b:T,E=m>E?m:E,E=x>E?x:E,E=_>E?_:E,this._bounds.x=S,this._bounds.width=T-S,this._bounds.y=w,this._bounds.height=E-w,this._currentBounds=this._bounds}return this._currentBounds},i.prototype.containsPoint=function(t){this.worldTransform.applyInverse(t,c);for(var e=this.graphicsData,r=0;rs?s:t,e=s+h>e?s+h:e,r=r>a?a:r,i=a+u>i?a+u:i;else if(d===l.SHAPES.CIRC)s=n.x,a=n.y,h=n.radius+f/2,u=n.radius+f/2,t=t>s-h?s-h:t,e=s+h>e?s+h:e,r=r>a-u?a-u:r,i=a+u>i?a+u:i;else if(d===l.SHAPES.ELIP)s=n.x,a=n.y,h=n.width+f/2,u=n.height+f/2,t=t>s-h?s-h:t,e=s+h>e?s+h:e,r=r>a-u?a-u:r,i=a+u>i?a+u:i;else{o=n.points;for(var v=0;vs-f?s-f:t,e=s+f>e?s+f:e,r=r>a-f?a-f:r,i=a+f>i?a+f:i}}else t=0,e=0,r=0,i=0;var g=this.boundsPadding;this._localBounds.x=t-g,this._localBounds.width=e-t+2*g,this._localBounds.y=r-g,this._localBounds.height=i-r+2*g},i.prototype.drawShape=function(t){this.currentPath&&this.currentPath.shape.points.length<=2&&this.graphicsData.pop(),this.currentPath=null;var e=new h(this.lineWidth,this.lineColor,this.lineAlpha,this.fillColor,this.fillAlpha,this.filling,t);return this.graphicsData.push(e),e.type===l.SHAPES.POLY&&(e.shape.closed=e.shape.closed||this.filling,this.currentPath=e),this.dirty=this.boundsDirty=!0,e},i.prototype.destroy=function(){n.prototype.destroy.apply(this,arguments);for(var t=0;ta;a++)e=s.data[a],1===s.data[a].mode?(r.stencilManager.pushStencil(t,e),i.uniform1f(r.shaderManager.complexPrimitiveShader.uniforms.alpha._location,t.worldAlpha*e.alpha),i.drawElements(i.TRIANGLE_FAN,4,i.UNSIGNED_SHORT,2*(e.indices.length-4)),r.stencilManager.popStencil(t,e)):(o=r.shaderManager.primitiveShader,r.shaderManager.setShader(o),i.uniformMatrix3fv(o.uniforms.translationMatrix._location,!1,t.worldTransform.toArray(!0)),i.uniformMatrix3fv(o.uniforms.projectionMatrix._location,!1,r.currentRenderTarget.projectionMatrix.toArray(!0)),i.uniform3fv(o.uniforms.tint._location,n.hex2rgb(t.tint)),i.uniform1f(o.uniforms.alpha._location,t.worldAlpha),i.bindBuffer(i.ARRAY_BUFFER,e.buffer),i.vertexAttribPointer(o.attributes.aVertexPosition,2,i.FLOAT,!1,24,0),i.vertexAttribPointer(o.attributes.aColor,4,i.FLOAT,!1,24,8),i.bindBuffer(i.ELEMENT_ARRAY_BUFFER,e.indexBuffer),i.drawElements(i.TRIANGLE_STRIP,e.indices.length,i.UNSIGNED_SHORT,0)),r.drawCount++},i.prototype.updateGraphics=function(t){var e=this.renderer.gl,r=t._webGL[e.id];r||(r=t._webGL[e.id]={lastIndex:0,data:[],gl:e}),t.dirty=!1;var i;if(t.clearDirty){for(t.clearDirty=!1,i=0;i=6)if(a.points.length<2*this.maximumSimplePolySize){o=this.switchMode(r,0);var h=this.buildPoly(a,o);h||(o=this.switchMode(r,1),this.buildComplexPoly(a,o))}else o=this.switchMode(r,1),this.buildComplexPoly(a,o);a.lineWidth>0&&(o=this.switchMode(r,0),this.buildLine(a,o))}else o=this.switchMode(r,0),a.type===s.SHAPES.RECT?this.buildRectangle(a,o):a.type===s.SHAPES.CIRC||a.type===s.SHAPES.ELIP?this.buildCircle(a,o):a.type===s.SHAPES.RREC&&this.buildRoundedRectangle(a,o);r.lastIndex++}for(i=0;i32e4||r.mode!==e||1===e)&&(r=this.graphicsDataPool.pop()||new u(t.gl),r.mode=e,t.data.push(r))):(r=this.graphicsDataPool.pop()||new u(t.gl),r.mode=e,t.data.push(r)),r.dirty=!0,r},i.prototype.buildRectangle=function(t,e){var r=t.shape,i=r.x,o=r.y,s=r.width,a=r.height;if(t.fill){var h=n.hex2rgb(t.fillColor),u=t.fillAlpha,l=h[0]*u,c=h[1]*u,p=h[2]*u,d=e.points,f=e.indices,v=d.length/6;d.push(i,o),d.push(l,c,p,u),d.push(i+s,o),d.push(l,c,p,u),d.push(i,o+a),d.push(l,c,p,u),d.push(i+s,o+a),d.push(l,c,p,u),f.push(v,v,v+1,v+2,v+3,v+3)}if(t.lineWidth){var g=t.points;t.points=[i,o,i+s,o,i+s,o+a,i,o+a,i,o],this.buildLine(t,e),t.points=g}},i.prototype.buildRoundedRectangle=function(t,e){var r=t.shape,i=r.x,o=r.y,s=r.width,a=r.height,h=r.radius,u=[];if(u.push(i,o+h),this.quadraticBezierCurve(i,o+a-h,i,o+a,i+h,o+a,u),this.quadraticBezierCurve(i+s-h,o+a,i+s,o+a,i+s,o+a-h,u),this.quadraticBezierCurve(i+s,o+h,i+s,o,i+s-h,o,u),this.quadraticBezierCurve(i+h,o,i,o,i,o+h+1e-10,u),t.fill){var c=n.hex2rgb(t.fillColor),p=t.fillAlpha,d=c[0]*p,f=c[1]*p,v=c[2]*p,g=e.points,m=e.indices,y=g.length/6,x=l(u,null,2),b=0;for(b=0;b=m;m++)g=m/f,h=a(t,r,g),u=a(e,i,g),l=a(r,n,g),c=a(i,o,g),p=a(h,l,g),d=a(u,c,g),v.push(p,d);return v},i.prototype.buildCircle=function(t,e){var r,i,o=t.shape,a=o.x,h=o.y;t.type===s.SHAPES.CIRC?(r=o.radius,i=o.radius):(r=o.width,i=o.height);var u=Math.floor(30*Math.sqrt(o.radius))||Math.floor(15*Math.sqrt(o.width+o.height)),l=2*Math.PI/u,c=0;if(t.fill){var p=n.hex2rgb(t.fillColor),d=t.fillAlpha,f=p[0]*d,v=p[1]*d,g=p[2]*d,m=e.points,y=e.indices,x=m.length/6;for(y.push(x),c=0;u+1>c;c++)m.push(a,h,f,v,g,d),m.push(a+Math.sin(l*c)*r,h+Math.cos(l*c)*i,f,v,g,d),y.push(x++,x++);y.push(x-1)}if(t.lineWidth){var b=t.points;for(t.points=[],c=0;u+1>c;c++)t.points.push(a+Math.sin(l*c)*r,h+Math.cos(l*c)*i);this.buildLine(t,e),t.points=b}},i.prototype.buildLine=function(t,e){var r=0,i=t.points;if(0!==i.length){var s=new o.Point(i[0],i[1]),a=new o.Point(i[i.length-2],i[i.length-1]);if(s.x===a.x&&s.y===a.y){i=i.slice(),i.pop(),i.pop(),a=new o.Point(i[i.length-2],i[i.length-1]);var h=a.x+.5*(s.x-a.x),u=a.y+.5*(s.y-a.y);i.unshift(h,u),i.push(h,u)}var l,c,p,d,f,v,g,m,y,x,b,_,T,E,S,w,C,A,M,R,O,D,P,F=e.points,L=e.indices,B=i.length/2,I=i.length,N=F.length/6,U=t.lineWidth/2,k=n.hex2rgb(t.lineColor),j=t.lineAlpha,G=k[0]*j,Y=k[1]*j,X=k[2]*j;for(p=i[0],d=i[1],f=i[2],v=i[3],y=-(d-v),x=p-f,P=Math.sqrt(y*y+x*x),y/=P,x/=P,y*=U,x*=U,F.push(p-y,d-x,G,Y,X,j),F.push(p+y,d+x,G,Y,X,j),r=1;B-1>r;r++)p=i[2*(r-1)],d=i[2*(r-1)+1],f=i[2*r],v=i[2*r+1],g=i[2*(r+1)],m=i[2*(r+1)+1],y=-(d-v),x=p-f,P=Math.sqrt(y*y+x*x),y/=P,x/=P,y*=U,x*=U,b=-(v-m),_=f-g,P=Math.sqrt(b*b+_*_),b/=P,_/=P,b*=U,_*=U,S=-x+d-(-x+v),w=-y+f-(-y+p),C=(-y+p)*(-x+v)-(-y+f)*(-x+d),A=-_+m-(-_+v),M=-b+f-(-b+g),R=(-b+g)*(-_+v)-(-b+f)*(-_+m),O=S*M-A*w,Math.abs(O)<.1?(O+=10.1,F.push(f-y,v-x,G,Y,X,j),F.push(f+y,v+x,G,Y,X,j)):(l=(w*R-M*C)/O,c=(A*C-S*R)/O,D=(l-f)*(l-f)+(c-v)*(c-v),D>19600?(T=y-b,E=x-_,P=Math.sqrt(T*T+E*E),T/=P,E/=P,T*=U,E*=U,F.push(f-T,v-E),F.push(G,Y,X,j),F.push(f+T,v+E),F.push(G,Y,X,j),F.push(f-T,v-E),F.push(G,Y,X,j),I++):(F.push(l,c),F.push(G,Y,X,j),F.push(f-(l-f),v-(c-v)),F.push(G,Y,X,j)));for(p=i[2*(B-2)],d=i[2*(B-2)+1],f=i[2*(B-1)],v=i[2*(B-1)+1],y=-(d-v),x=p-f,P=Math.sqrt(y*y+x*x),y/=P,x/=P,y*=U,x*=U,F.push(f-y,v-x),F.push(G,Y,X,j),F.push(f+y,v+x),F.push(G,Y,X,j),L.push(N),r=0;I>r;r++)L.push(N++);L.push(N-1)}},i.prototype.buildComplexPoly=function(t,e){var r=t.points.slice();if(!(r.length<6)){var i=e.indices;e.points=r,e.alpha=t.fillAlpha,e.color=n.hex2rgb(t.fillColor);for(var o,s,a=1/0,h=-(1/0),u=1/0,l=-(1/0),c=0;co?o:a,h=o>h?o:h,u=u>s?s:u,l=s>l?s:l;r.push(a,u,h,u,h,l,a,l);var p=r.length/2;for(c=0;p>c;c++)i.push(c)}},i.prototype.buildPoly=function(t,e){var r=t.points;if(!(r.length<6)){var i=e.points,o=e.indices,s=r.length/2,a=n.hex2rgb(t.fillColor),h=t.fillAlpha,u=a[0]*h,c=a[1]*h,p=a[2]*h,d=l(r,null,2);if(!d)return!1;var f=i.length/6,v=0;for(v=0;vv;v++)i.push(r[2*v],r[2*v+1],u,c,p,h);return!0}}},{"../../const":38,"../../math":48,"../../renderers/webgl/WebGLRenderer":65,"../../renderers/webgl/utils/ObjectRenderer":80,"../../utils":98,"./WebGLGraphicsData":44,earcut:24}],44:[function(t,e,r){function i(t){this.gl=t,this.color=[0,0,0],this.points=[],this.indices=[],this.buffer=t.createBuffer(),this.indexBuffer=t.createBuffer(),this.mode=1,this.alpha=1,this.dirty=!0,this.glPoints=null,this.glIndices=null}i.prototype.constructor=i,e.exports=i,i.prototype.reset=function(){this.points.length=0,this.indices.length=0},i.prototype.upload=function(){var t=this.gl;this.glPoints=new Float32Array(this.points),t.bindBuffer(t.ARRAY_BUFFER,this.buffer),t.bufferData(t.ARRAY_BUFFER,this.glPoints,t.STATIC_DRAW),this.glIndices=new Uint16Array(this.indices),t.bindBuffer(t.ELEMENT_ARRAY_BUFFER,this.indexBuffer),t.bufferData(t.ELEMENT_ARRAY_BUFFER,this.glIndices,t.STATIC_DRAW),this.dirty=!1},i.prototype.destroy=function(){this.color=null,this.points=null,this.indices=null,this.gl.deleteBuffer(this.buffer),this.gl.deleteBuffer(this.indexBuffer),this.gl=null,this.buffer=null,this.indexBuffer=null,this.glPoints=null,this.glIndices=null}},{}],45:[function(t,e,r){var i=e.exports=Object.assign(t("./const"),t("./math"),{utils:t("./utils"),ticker:t("./ticker"),DisplayObject:t("./display/DisplayObject"),Container:t("./display/Container"),Sprite:t("./sprites/Sprite"),ParticleContainer:t("./particles/ParticleContainer"),SpriteRenderer:t("./sprites/webgl/SpriteRenderer"),ParticleRenderer:t("./particles/webgl/ParticleRenderer"),Text:t("./text/Text"),Graphics:t("./graphics/Graphics"),GraphicsData:t("./graphics/GraphicsData"),GraphicsRenderer:t("./graphics/webgl/GraphicsRenderer"),Texture:t("./textures/Texture"),BaseTexture:t("./textures/BaseTexture"),RenderTexture:t("./textures/RenderTexture"),VideoBaseTexture:t("./textures/VideoBaseTexture"),TextureUvs:t("./textures/TextureUvs"),CanvasRenderer:t("./renderers/canvas/CanvasRenderer"),CanvasGraphics:t("./renderers/canvas/utils/CanvasGraphics"),CanvasBuffer:t("./renderers/canvas/utils/CanvasBuffer"),WebGLRenderer:t("./renderers/webgl/WebGLRenderer"),WebGLManager:t("./renderers/webgl/managers/WebGLManager"),ShaderManager:t("./renderers/webgl/managers/ShaderManager"),Shader:t("./renderers/webgl/shaders/Shader"),ObjectRenderer:t("./renderers/webgl/utils/ObjectRenderer"),RenderTarget:t("./renderers/webgl/utils/RenderTarget"),AbstractFilter:t("./renderers/webgl/filters/AbstractFilter"),FXAAFilter:t("./renderers/webgl/filters/FXAAFilter"),SpriteMaskFilter:t("./renderers/webgl/filters/SpriteMaskFilter"),glCore:t("pixi-gl-core"),autoDetectRenderer:function(t,e,r,n){return t=t||800,e=e||600,!n&&i.utils.isWebGLSupported()?new i.WebGLRenderer(t,e,r):new i.CanvasRenderer(t,e,r)}})},{"./const":38,"./display/Container":39,"./display/DisplayObject":40,"./graphics/Graphics":41,"./graphics/GraphicsData":42,"./graphics/webgl/GraphicsRenderer":43,"./math":48,"./particles/ParticleContainer":54,"./particles/webgl/ParticleRenderer":56,"./renderers/canvas/CanvasRenderer":59,"./renderers/canvas/utils/CanvasBuffer":60,"./renderers/canvas/utils/CanvasGraphics":61,"./renderers/webgl/WebGLRenderer":65,"./renderers/webgl/filters/AbstractFilter":66,"./renderers/webgl/filters/FXAAFilter":67,"./renderers/webgl/filters/SpriteMaskFilter":68,"./renderers/webgl/managers/ShaderManager":72,"./renderers/webgl/managers/WebGLManager":74,"./renderers/webgl/shaders/Shader":77,"./renderers/webgl/utils/ObjectRenderer":80,"./renderers/webgl/utils/RenderTarget":82,"./sprites/Sprite":86,"./sprites/webgl/SpriteRenderer":87,"./text/Text":89,"./textures/BaseTexture":90,"./textures/RenderTexture":91,"./textures/Texture":92,"./textures/TextureUvs":93,"./textures/VideoBaseTexture":94,"./ticker":96,"./utils":98,"pixi-gl-core":1}],46:[function(t,e,r){function i(){this.a=1,this.b=0,this.c=0,this.d=1,this.tx=0,this.ty=0}var n=t("./Point");i.prototype.constructor=i,e.exports=i,i.prototype.fromArray=function(t){this.a=t[0],this.b=t[1],this.c=t[3],this.d=t[4],this.tx=t[2],this.ty=t[5]},i.prototype.set=function(t,e,r,i,n,o){return this.a=t,this.b=e,this.c=r,this.d=i,this.tx=n,this.ty=o,this},i.prototype.toArray=function(t,e){this.array||(this.array=new Float32Array(9));var r=e||this.array;return t?(r[0]=this.a,r[1]=this.b,r[2]=0,r[3]=this.c,r[4]=this.d,r[5]=0,r[6]=this.tx,r[7]=this.ty,r[8]=1):(r[0]=this.a,r[1]=this.c,r[2]=this.tx,r[3]=this.b,r[4]=this.d,r[5]=this.ty,r[6]=0,r[7]=0,r[8]=1),r},i.prototype.apply=function(t,e){e=e||new n;var r=t.x,i=t.y;return e.x=this.a*r+this.c*i+this.tx,e.y=this.b*r+this.d*i+this.ty,e},i.prototype.applyInverse=function(t,e){e=e||new n;var r=1/(this.a*this.d+this.c*-this.b),i=t.x,o=t.y;return e.x=this.d*r*i+-this.c*r*o+(this.ty*this.c-this.tx*this.d)*r,e.y=this.a*r*o+-this.b*r*i+(-this.ty*this.a+this.tx*this.b)*r,e},i.prototype.translate=function(t,e){return this.tx+=t,this.ty+=e,this},i.prototype.scale=function(t,e){return this.a*=t,this.d*=e,this.c*=t,this.b*=e,this.tx*=t,this.ty*=e,this},i.prototype.rotate=function(t){var e=Math.cos(t),r=Math.sin(t),i=this.a,n=this.c,o=this.tx;return this.a=i*e-this.b*r,this.b=i*r+this.b*e,this.c=n*e-this.d*r,this.d=n*r+this.d*e,this.tx=o*e-this.ty*r,this.ty=o*r+this.ty*e,this},i.prototype.append=function(t){var e=this.a,r=this.b,i=this.c,n=this.d;return this.a=t.a*e+t.b*i,this.b=t.a*r+t.b*n,this.c=t.c*e+t.d*i,this.d=t.c*r+t.d*n,this.tx=t.tx*e+t.ty*i+this.tx,this.ty=t.tx*r+t.ty*n+this.ty,this},i.prototype.setTransform=function(t,e,r,i,n,o,s,a,h){var u,l,c,p,d,f,v,g,m,y;return d=Math.sin(s),f=Math.cos(s),v=Math.cos(h),g=Math.sin(h),m=-Math.sin(a),y=Math.cos(a),u=f*n,l=d*n,c=-d*o,p=f*o,this.a=v*u+g*c,this.b=v*l+g*p,this.c=m*u+y*c,this.d=m*l+y*p,this.tx=t+(r*u+i*c),this.ty=e+(r*l+i*p),this},i.prototype.prepend=function(t){var e=this.tx;if(1!==t.a||0!==t.b||0!==t.c||1!==t.d){var r=this.a,i=this.c;this.a=r*t.a+this.b*t.c,this.b=r*t.b+this.b*t.d,this.c=i*t.a+this.d*t.c,this.d=i*t.b+this.d*t.d}return this.tx=e*t.a+this.ty*t.c+t.tx,this.ty=e*t.b+this.ty*t.d+t.ty,this},i.prototype.invert=function(){var t=this.a,e=this.b,r=this.c,i=this.d,n=this.tx,o=t*i-e*r;return this.a=i/o,this.b=-e/o,this.c=-r/o,this.d=t/o,this.tx=(r*this.ty-i*n)/o,this.ty=-(t*this.ty-e*n)/o,this},i.prototype.identity=function(){return this.a=1,this.b=0,this.c=0,this.d=1,this.tx=0,this.ty=0,this},i.prototype.clone=function(){var t=new i;return t.a=this.a,t.b=this.b,t.c=this.c,t.d=this.d,t.tx=this.tx,t.ty=this.ty,t},i.prototype.copy=function(t){return t.a=this.a,t.b=this.b,t.c=this.c,t.d=this.d,t.tx=this.tx,t.ty=this.ty,t},i.IDENTITY=new i,i.TEMP_MATRIX=new i},{"./Point":47}],47:[function(t,e,r){function i(t,e){this.x=t||0,this.y=e||0}i.prototype.constructor=i,e.exports=i,i.prototype.clone=function(){return new i(this.x,this.y)},i.prototype.copy=function(t){this.set(t.x,t.y)},i.prototype.equals=function(t){return t.x===this.x&&t.y===this.y},i.prototype.set=function(t,e){this.x=t||0,this.y=e||(0!==e?this.x:0)}},{}],48:[function(t,e,r){e.exports={Point:t("./Point"),Matrix:t("./Matrix"),Circle:t("./shapes/Circle"),Ellipse:t("./shapes/Ellipse"),Polygon:t("./shapes/Polygon"),Rectangle:t("./shapes/Rectangle"),RoundedRectangle:t("./shapes/RoundedRectangle")}},{"./Matrix":46,"./Point":47,"./shapes/Circle":49,"./shapes/Ellipse":50,"./shapes/Polygon":51,"./shapes/Rectangle":52,"./shapes/RoundedRectangle":53}],49:[function(t,e,r){function i(t,e,r){this.x=t||0,this.y=e||0,this.radius=r||0,this.type=o.SHAPES.CIRC}var n=t("./Rectangle"),o=t("../../const");i.prototype.constructor=i,e.exports=i,i.prototype.clone=function(){return new i(this.x,this.y,this.radius)},i.prototype.contains=function(t,e){if(this.radius<=0)return!1;var r=this.x-t,i=this.y-e,n=this.radius*this.radius;return r*=r,i*=i,n>=r+i},i.prototype.getBounds=function(){return new n(this.x-this.radius,this.y-this.radius,2*this.radius,2*this.radius)}},{"../../const":38,"./Rectangle":52}],50:[function(t,e,r){function i(t,e,r,i){this.x=t||0,this.y=e||0,this.width=r||0,this.height=i||0,this.type=o.SHAPES.ELIP}var n=t("./Rectangle"),o=t("../../const");i.prototype.constructor=i,e.exports=i,i.prototype.clone=function(){return new i(this.x,this.y,this.width,this.height)},i.prototype.contains=function(t,e){if(this.width<=0||this.height<=0)return!1;var r=(t-this.x)/this.width,i=(e-this.y)/this.height;return r*=r,i*=i,1>=r+i},i.prototype.getBounds=function(){return new n(this.x-this.width,this.y-this.height,this.width,this.height)}},{"../../const":38,"./Rectangle":52}],51:[function(t,e,r){function i(t){var e=t;if(!Array.isArray(e)){e=new Array(arguments.length);for(var r=0;rs;s++)i.push(e[s].x,e[s].y);e=i}this.closed=!0,this.points=e,this.type=o.SHAPES.POLY}var n=t("../Point"),o=t("../../const");i.prototype.constructor=i,e.exports=i,i.prototype.clone=function(){return new i(this.points.slice())},i.prototype.contains=function(t,e){for(var r=!1,i=this.points.length/2,n=0,o=i-1;i>n;o=n++){var s=this.points[2*n],a=this.points[2*n+1],h=this.points[2*o],u=this.points[2*o+1],l=a>e!=u>e&&(h-s)*(e-a)/(u-a)+s>t;l&&(r=!r)}return r}},{"../../const":38,"../Point":47}],52:[function(t,e,r){function i(t,e,r,i){this.x=t||0,this.y=e||0,this.width=r||0,this.height=i||0,this.type=n.SHAPES.RECT}var n=t("../../const");i.prototype.constructor=i,e.exports=i,i.EMPTY=new i(0,0,0,0),i.prototype.clone=function(){return new i(this.x,this.y,this.width,this.height)},i.prototype.contains=function(t,e){return this.width<=0||this.height<=0?!1:t>=this.x&&t=this.y&&e=this.x&&t<=this.x+this.width&&e>=this.y&&e<=this.y+this.height?!0:!1}},{"../../const":38}],54:[function(t,e,r){function i(t,e,r){n.call(this),r=r||15e3,t=t||15e3;var i=16384;r>i&&(r=i),r>t&&(r=t),this._properties=[!1,!0,!1,!1,!1],this._maxSize=t,this._batchSize=r,this._buffers=null,this._bufferToUpdate=0,this.interactiveChildren=!1,this.blendMode=o.BLEND_MODES.NORMAL,this.roundPixels=!0,this.setProperties(e)}var n=t("../display/Container"),o=t("../const");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.setProperties=function(t){t&&(this._properties[0]="scale"in t?!!t.scale:this._properties[0],this._properties[1]="position"in t?!!t.position:this._properties[1],this._properties[2]="rotation"in t?!!t.rotation:this._properties[2],this._properties[3]="uvs"in t?!!t.uvs:this._properties[3],this._properties[4]="alpha"in t?!!t.alpha:this._properties[4])},i.prototype.updateTransform=function(){this.displayObjectUpdateTransform()},i.prototype.renderWebGL=function(t){this.visible&&!(this.worldAlpha<=0)&&this.children.length&&this.renderable&&(t.setObjectRenderer(t.plugins.particle),t.plugins.particle.render(this))},i.prototype.onChildrenChange=function(t){var e=Math.floor(t/this._batchSize);er;r+=6,i+=4)this.indices[r+0]=i+0,this.indices[r+1]=i+1,this.indices[r+2]=i+2,this.indices[r+3]=i+0,this.indices[r+4]=i+2,this.indices[r+5]=i+3;this.shader=null,this.indexBuffer=null,this.properties=null,this.tempMatrix=new h.Matrix}var n=t("../../renderers/webgl/utils/ObjectRenderer"),o=t("../../renderers/webgl/WebGLRenderer"),s=t("./ParticleShader"),a=t("./ParticleBuffer"),h=t("../../math");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,o.registerPlugin("particle",i),i.prototype.onContextChange=function(){var t=this.renderer.gl;this.shader=new s(this.renderer.shaderManager),this.indexBuffer=t.createBuffer(),t.bindBuffer(t.ELEMENT_ARRAY_BUFFER,this.indexBuffer),t.bufferData(t.ELEMENT_ARRAY_BUFFER,this.indices,t.STATIC_DRAW),this.properties=[{attribute:this.shader.attributes.aVertexPosition,size:2,uploadFunction:this.uploadVertices,offset:0},{attribute:this.shader.attributes.aPositionCoord,size:2,uploadFunction:this.uploadPosition,offset:0},{attribute:this.shader.attributes.aRotation,size:1,uploadFunction:this.uploadRotation,offset:0},{attribute:this.shader.attributes.aTextureCoord,size:2,uploadFunction:this.uploadUvs,offset:0},{attribute:this.shader.attributes.aColor,size:1,uploadFunction:this.uploadAlpha,offset:0}]},i.prototype.start=function(){var t=this.renderer.gl;t.activeTexture(t.TEXTURE0),t.bindBuffer(t.ELEMENT_ARRAY_BUFFER,this.indexBuffer);var e=this.shader;this.renderer.shaderManager.setShader(e)},i.prototype.render=function(t){var e=t.children,r=e.length,i=t._maxSize,n=t._batchSize;if(0!==r){r>i&&(r=i),t._buffers||(t._buffers=this.generateBuffers(t)),this.renderer.blendModeManager.setBlendMode(t.blendMode);var o=this.renderer.gl,s=t.worldTransform.copy(this.tempMatrix);s.prepend(this.renderer.currentRenderTarget.projectionMatrix),o.uniformMatrix3fv(this.shader.uniforms.projectionMatrix._location,!1,s.toArray(!0)),o.uniform1f(this.shader.uniforms.uAlpha._location,t.worldAlpha);var a=e[0]._texture.baseTexture;if(a._glTextures[o.id])o.bindTexture(o.TEXTURE_2D,a._glTextures[o.id]);else{if(!this.renderer.updateTexture(a))return;t._properties[0]&&t._properties[3]||(t._bufferToUpdate=0)}for(var h=0,u=0;r>h;h+=n,u+=1){var l=r-h;l>n&&(l=n);var c=t._buffers[u];c.uploadDynamic(e,h,l),t._bufferToUpdate===u&&(c.uploadStatic(e,h,l),t._bufferToUpdate=u+1),c.bind(this.shader),o.drawElements(o.TRIANGLES,6*l,o.UNSIGNED_SHORT,0),this.renderer.drawCount++}}},i.prototype.generateBuffers=function(t){var e,r=this.renderer.gl,i=[],n=t._maxSize,o=t._batchSize,s=t._properties;for(e=0;n>e;e+=o)i.push(new a(r,this.properties,s,o));return i},i.prototype.uploadVertices=function(t,e,r,i,n,o){for(var s,a,h,u,l,c,p,d,f,v=0;r>v;v++)s=t[e+v],a=s._texture,u=s.scale.x,l=s.scale.y,a.trim?(h=a.trim,p=h.x-s.anchor.x*h.width,c=p+a.crop.width,f=h.y-s.anchor.y*h.height,d=f+a.crop.height):(c=a._frame.width*(1-s.anchor.x),p=a._frame.width*-s.anchor.x,d=a._frame.height*(1-s.anchor.y),f=a._frame.height*-s.anchor.y),i[o]=p*u,i[o+1]=f*l,i[o+n]=c*u,i[o+n+1]=f*l,i[o+2*n]=c*u,i[o+2*n+1]=d*l,i[o+3*n]=p*u,i[o+3*n+1]=d*l,o+=4*n},i.prototype.uploadPosition=function(t,e,r,i,n,o){for(var s=0;r>s;s++){var a=t[e+s].position;i[o]=a.x,i[o+1]=a.y,i[o+n]=a.x,i[o+n+1]=a.y,i[o+2*n]=a.x,i[o+2*n+1]=a.y,i[o+3*n]=a.x,i[o+3*n+1]=a.y,o+=4*n}},i.prototype.uploadRotation=function(t,e,r,i,n,o){for(var s=0;r>s;s++){var a=t[e+s].rotation;i[o]=a,i[o+n]=a,i[o+2*n]=a,i[o+3*n]=a,o+=4*n}},i.prototype.uploadUvs=function(t,e,r,i,n,o){for(var s=0;r>s;s++){var a=t[e+s]._texture._uvs;a?(i[o]=a.x0,i[o+1]=a.y0,i[o+n]=a.x1,i[o+n+1]=a.y1,i[o+2*n]=a.x2,i[o+2*n+1]=a.y2,i[o+3*n]=a.x3,i[o+3*n+1]=a.y3,o+=4*n):(i[o]=0,i[o+1]=0,i[o+n]=0,i[o+n+1]=0,i[o+2*n]=0,i[o+2*n+1]=0,i[o+3*n]=0,i[o+3*n+1]=0,o+=4*n)}},i.prototype.uploadAlpha=function(t,e,r,i,n,o){for(var s=0;r>s;s++){var a=t[e+s].alpha;i[o]=a,i[o+n]=a,i[o+2*n]=a,i[o+3*n]=a,o+=4*n}},i.prototype.destroy=function(){this.renderer.gl&&this.renderer.gl.deleteBuffer(this.indexBuffer),n.prototype.destroy.apply(this,arguments),this.shader.destroy(),this.indices=null,this.tempMatrix=null}},{"../../math":48,"../../renderers/webgl/WebGLRenderer":65,"../../renderers/webgl/utils/ObjectRenderer":80,"./ParticleBuffer":55,"./ParticleShader":57}],57:[function(t,e,r){function i(t){n.call(this,t,["attribute vec2 aVertexPosition;","attribute vec2 aTextureCoord;","attribute float aColor;","attribute vec2 aPositionCoord;","attribute vec2 aScale;","attribute float aRotation;","uniform mat3 projectionMatrix;","varying vec2 vTextureCoord;","varying float vColor;","void main(void){"," vec2 v = aVertexPosition;"," v.x = (aVertexPosition.x) * cos(aRotation) - (aVertexPosition.y) * sin(aRotation);"," v.y = (aVertexPosition.x) * sin(aRotation) + (aVertexPosition.y) * cos(aRotation);"," v = v + aPositionCoord;"," gl_Position = vec4((projectionMatrix * vec3(v, 1.0)).xy, 0.0, 1.0);"," vTextureCoord = aTextureCoord;"," vColor = aColor;","}"].join("\n"),["precision lowp float;","varying vec2 vTextureCoord;","varying float vColor;","uniform sampler2D uSampler;","uniform float uAlpha;","void main(void){"," vec4 color = texture2D(uSampler, vTextureCoord) * vColor * uAlpha;"," if (color.a == 0.0) discard;"," gl_FragColor = color;","}"].join("\n"),{uAlpha:{type:"1f",value:1}},{aPositionCoord:0,aRotation:0})}var n=t("../../renderers/webgl/shaders/TextureShader");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i},{"../../renderers/webgl/shaders/TextureShader":78}],58:[function(t,e,r){function i(t,e,r,i){if(a.call(this),n.sayHello(t),i)for(var h in s.DEFAULT_RENDER_OPTIONS)"undefined"==typeof i[h]&&(i[h]=s.DEFAULT_RENDER_OPTIONS[h]);else i=s.DEFAULT_RENDER_OPTIONS;this.type=s.RENDERER_TYPE.UNKNOWN,this.width=e||800,this.height=r||600,this.view=i.view||document.createElement("canvas"),this.resolution=i.resolution,this.transparent=i.transparent,this.autoResize=i.autoResize||!1,this.blendModes=null,this.preserveDrawingBuffer=i.preserveDrawingBuffer,this.clearBeforeRender=i.clearBeforeRender,this.roundPixels=i.roundPixels,this._backgroundColor=0,this._backgroundColorRgba=[0,0,0,0],this._backgroundColorString="#000000",this.backgroundColor=i.backgroundColor||this._backgroundColor,this._tempDisplayObjectParent={worldTransform:new o.Matrix,worldAlpha:1,children:[]},this._lastObjectRendered=this._tempDisplayObjectParent}var n=t("../utils"),o=t("../math"),s=t("../const"),a=t("eventemitter3");i.prototype=Object.create(a.prototype),i.prototype.constructor=i,e.exports=i,Object.defineProperties(i.prototype,{backgroundColor:{get:function(){return this._backgroundColor},set:function(t){this._backgroundColor=t,this._backgroundColorString=n.hex2string(t),n.hex2rgb(t,this._backgroundColorRgba)}}}),i.prototype.resize=function(t,e){this.width=t*this.resolution,this.height=e*this.resolution,this.view.width=this.width,this.view.height=this.height,this.autoResize&&(this.view.style.width=this.width/this.resolution+"px",this.view.style.height=this.height/this.resolution+"px")},i.prototype.destroy=function(t){t&&this.view.parentNode&&this.view.parentNode.removeChild(this.view),this.type=s.RENDERER_TYPE.UNKNOWN,this.width=0,this.height=0,this.view=null,this.resolution=0,this.transparent=!1,this.autoResize=!1,this.blendModes=null,this.preserveDrawingBuffer=!1,this.clearBeforeRender=!1,this.roundPixels=!1,this._backgroundColor=0, -this._backgroundColorRgba=null,this._backgroundColorString=null}},{"../const":38,"../math":48,"../utils":98,eventemitter3:25}],59:[function(t,e,r){function i(t,e,r){r=r||{},n.call(this,"Canvas",t,e,r),this.type=h.RENDERER_TYPE.CANVAS,this.context=this.view.getContext("2d",{alpha:this.transparent}),this.refresh=!0,this.maskManager=new o,this.smoothProperty="imageSmoothingEnabled",this.context.imageSmoothingEnabled||(this.context.webkitImageSmoothingEnabled?this.smoothProperty="webkitImageSmoothingEnabled":this.context.mozImageSmoothingEnabled?this.smoothProperty="mozImageSmoothingEnabled":this.context.oImageSmoothingEnabled?this.smoothProperty="oImageSmoothingEnabled":this.context.msImageSmoothingEnabled&&(this.smoothProperty="msImageSmoothingEnabled")),this.initPlugins(),this._mapBlendModes(),this._tempDisplayObjectParent={worldTransform:new a.Matrix,worldAlpha:1},this.resize(t,e)}var n=t("../SystemRenderer"),o=t("./utils/CanvasMaskManager"),s=t("../../utils"),a=t("../../math"),h=t("../../const");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,s.pluginTarget.mixin(i),i.prototype.render=function(t){this.emit("prerender");var e=t.parent;this._lastObjectRendered=t,t.parent=this._tempDisplayObjectParent,t.updateTransform(),t.parent=e,this.context.setTransform(1,0,0,1,0,0),this.context.globalAlpha=1,this.context.globalCompositeOperation=this.blendModes[h.BLEND_MODES.NORMAL],navigator.isCocoonJS&&this.view.screencanvas&&(this.context.fillStyle="black",this.context.clear()),this.clearBeforeRender&&(this.transparent?this.context.clearRect(0,0,this.width,this.height):(this.context.fillStyle=this._backgroundColorString,this.context.fillRect(0,0,this.width,this.height))),this.renderDisplayObject(t,this.context),this.emit("postrender")},i.prototype.destroy=function(t){this.destroyPlugins(),n.prototype.destroy.call(this,t),this.context=null,this.refresh=!0,this.maskManager.destroy(),this.maskManager=null,this.smoothProperty=null},i.prototype.renderDisplayObject=function(t,e){var r=this.context;this.context=e,t.renderCanvas(this),this.context=r},i.prototype.resize=function(t,e){n.prototype.resize.call(this,t,e),this.smoothProperty&&(this.context[this.smoothProperty]=h.SCALE_MODES.DEFAULT===h.SCALE_MODES.LINEAR)},i.prototype._mapBlendModes=function(){this.blendModes||(this.blendModes={},s.canUseNewCanvasBlendModes()?(this.blendModes[h.BLEND_MODES.NORMAL]="source-over",this.blendModes[h.BLEND_MODES.ADD]="lighter",this.blendModes[h.BLEND_MODES.MULTIPLY]="multiply",this.blendModes[h.BLEND_MODES.SCREEN]="screen",this.blendModes[h.BLEND_MODES.OVERLAY]="overlay",this.blendModes[h.BLEND_MODES.DARKEN]="darken",this.blendModes[h.BLEND_MODES.LIGHTEN]="lighten",this.blendModes[h.BLEND_MODES.COLOR_DODGE]="color-dodge",this.blendModes[h.BLEND_MODES.COLOR_BURN]="color-burn",this.blendModes[h.BLEND_MODES.HARD_LIGHT]="hard-light",this.blendModes[h.BLEND_MODES.SOFT_LIGHT]="soft-light",this.blendModes[h.BLEND_MODES.DIFFERENCE]="difference",this.blendModes[h.BLEND_MODES.EXCLUSION]="exclusion",this.blendModes[h.BLEND_MODES.HUE]="hue",this.blendModes[h.BLEND_MODES.SATURATION]="saturate",this.blendModes[h.BLEND_MODES.COLOR]="color",this.blendModes[h.BLEND_MODES.LUMINOSITY]="luminosity"):(this.blendModes[h.BLEND_MODES.NORMAL]="source-over",this.blendModes[h.BLEND_MODES.ADD]="lighter",this.blendModes[h.BLEND_MODES.MULTIPLY]="source-over",this.blendModes[h.BLEND_MODES.SCREEN]="source-over",this.blendModes[h.BLEND_MODES.OVERLAY]="source-over",this.blendModes[h.BLEND_MODES.DARKEN]="source-over",this.blendModes[h.BLEND_MODES.LIGHTEN]="source-over",this.blendModes[h.BLEND_MODES.COLOR_DODGE]="source-over",this.blendModes[h.BLEND_MODES.COLOR_BURN]="source-over",this.blendModes[h.BLEND_MODES.HARD_LIGHT]="source-over",this.blendModes[h.BLEND_MODES.SOFT_LIGHT]="source-over",this.blendModes[h.BLEND_MODES.DIFFERENCE]="source-over",this.blendModes[h.BLEND_MODES.EXCLUSION]="source-over",this.blendModes[h.BLEND_MODES.HUE]="source-over",this.blendModes[h.BLEND_MODES.SATURATION]="source-over",this.blendModes[h.BLEND_MODES.COLOR]="source-over",this.blendModes[h.BLEND_MODES.LUMINOSITY]="source-over"))}},{"../../const":38,"../../math":48,"../../utils":98,"../SystemRenderer":58,"./utils/CanvasMaskManager":62}],60:[function(t,e,r){function i(t,e){this.canvas=document.createElement("canvas"),this.context=this.canvas.getContext("2d"),this.canvas.width=t,this.canvas.height=e}i.prototype.constructor=i,e.exports=i,Object.defineProperties(i.prototype,{width:{get:function(){return this.canvas.width},set:function(t){this.canvas.width=t}},height:{get:function(){return this.canvas.height},set:function(t){this.canvas.height=t}}}),i.prototype.clear=function(){this.context.setTransform(1,0,0,1,0,0),this.context.clearRect(0,0,this.canvas.width,this.canvas.height)},i.prototype.resize=function(t,e){this.canvas.width=t,this.canvas.height=e},i.prototype.destroy=function(){this.context=null,this.canvas=null}},{}],61:[function(t,e,r){var i=t("../../../const"),n={};e.exports=n,n.renderGraphics=function(t,e){var r=t.worldAlpha;t.dirty&&(this.updateGraphicsTint(t),t.dirty=!1);for(var n=0;nA?A:C,e.beginPath(),e.moveTo(T,E+C),e.lineTo(T,E+w-C),e.quadraticCurveTo(T,E+w,T+C,E+w),e.lineTo(T+S-C,E+w),e.quadraticCurveTo(T+S,E+w,T+S,E+w-C),e.lineTo(T+S,E+C),e.quadraticCurveTo(T+S,E,T+S-C,E),e.lineTo(T+C,E),e.quadraticCurveTo(T,E,T,E+C),e.closePath(),(o.fillColor||0===o.fillColor)&&(e.globalAlpha=o.fillAlpha*r,e.fillStyle="#"+("00000"+(0|a).toString(16)).substr(-6),e.fill()),o.lineWidth&&(e.globalAlpha=o.lineAlpha*r,e.strokeStyle="#"+("00000"+(0|h).toString(16)).substr(-6),e.stroke())}}},n.renderGraphicsMask=function(t,e){var r=t.graphicsData.length;if(0!==r){e.beginPath();for(var n=0;r>n;n++){var o=t.graphicsData[n],s=o.shape;if(o.type===i.SHAPES.POLY){var a=s.points;e.moveTo(a[0],a[1]);for(var h=1;hw?w:S,e.moveTo(b,_+S),e.lineTo(b,_+E-S),e.quadraticCurveTo(b,_+E,b+S,_+E),e.lineTo(b+T-S,_+E),e.quadraticCurveTo(b+T,_+E,b+T,_+E-S),e.lineTo(b+T,_+S),e.quadraticCurveTo(b+T,_,b+T-S,_),e.lineTo(b+S,_),e.quadraticCurveTo(b,_,b,_+S),e.closePath()}}}},n.updateGraphicsTint=function(t){if(16777215!==t.tint||t._prevTint!==t.tint){t._prevTint=t.tint;for(var e=(t.tint>>16&255)/255,r=(t.tint>>8&255)/255,i=(255&t.tint)/255,n=0;n>16&255)/255*e*255<<16)+((s>>8&255)/255*r*255<<8)+(255&s)/255*i*255,o._lineTint=((a>>16&255)/255*e*255<<16)+((a>>8&255)/255*r*255<<8)+(255&a)/255*i*255}}}},{"../../../const":38}],62:[function(t,e,r){function i(){}var n=t("./CanvasGraphics");i.prototype.constructor=i,e.exports=i,i.prototype.pushMask=function(t,e){e.context.save();var r=t.alpha,i=t.worldTransform,o=e.resolution;e.context.setTransform(i.a*o,i.b*o,i.c*o,i.d*o,i.tx*o,i.ty*o),t.texture||(n.renderGraphicsMask(t,e.context),e.context.clip()),t.worldAlpha=r},i.prototype.popMask=function(t){t.context.restore()},i.prototype.destroy=function(){}},{"./CanvasGraphics":61}],63:[function(t,e,r){var i=t("../../../utils"),n={};e.exports=n,n.getTintedTexture=function(t,e){var r=t.texture;e=n.roundColor(e);var i="#"+("00000"+(0|e).toString(16)).substr(-6);if(r.tintCache=r.tintCache||{},r.tintCache[i])return r.tintCache[i];var o=n.canvas||document.createElement("canvas");if(n.tintMethod(r,e,o),n.convertTintToImage){var s=new Image;s.src=o.toDataURL(),r.tintCache[i]=s}else r.tintCache[i]=o,n.canvas=null;return o},n.tintWithMultiply=function(t,e,r){var i=r.getContext("2d"),n=t.baseTexture.resolution,o=t.crop.clone();o.x*=n,o.y*=n,o.width*=n,o.height*=n,r.width=o.width,r.height=o.height,i.fillStyle="#"+("00000"+(0|e).toString(16)).substr(-6),i.fillRect(0,0,o.width,o.height),i.globalCompositeOperation="multiply",i.drawImage(t.baseTexture.source,o.x,o.y,o.width,o.height,0,0,o.width,o.height),i.globalCompositeOperation="destination-atop",i.drawImage(t.baseTexture.source,o.x,o.y,o.width,o.height,0,0,o.width,o.height)},n.tintWithOverlay=function(t,e,r){var i=r.getContext("2d"),n=t.baseTexture.resolution,o=t.crop.clone();o.x*=n,o.y*=n,o.width*=n,o.height*=n,r.width=o.width,r.height=o.height,i.globalCompositeOperation="copy",i.fillStyle="#"+("00000"+(0|e).toString(16)).substr(-6),i.fillRect(0,0,o.width,o.height),i.globalCompositeOperation="destination-atop",i.drawImage(t.baseTexture.source,o.x,o.y,o.width,o.height,0,0,o.width,o.height)},n.tintWithPerPixel=function(t,e,r){var n=r.getContext("2d"),o=t.baseTexture.resolution,s=t.crop.clone();s.x*=o,s.y*=o,s.width*=o,s.height*=o,r.width=s.width,r.height=s.height,n.globalCompositeOperation="copy",n.drawImage(t.baseTexture.source,s.x,s.y,s.width,s.height,0,0,s.width,s.height);for(var a=i.hex2rgb(e),h=a[0],u=a[1],l=a[2],c=n.getImageData(0,0,s.width,s.height),p=c.data,d=0;de;++e)this.shaders[e].syncUniform(t)}},{"../shaders/TextureShader":78}],67:[function(t,e,r){function i(){n.call(this,"\nprecision mediump float;\n\nattribute vec2 aVertexPosition;\nattribute vec2 aTextureCoord;\nattribute vec4 aColor;\n\nuniform mat3 projectionMatrix;\nuniform vec2 resolution;\n\nvarying vec2 vTextureCoord;\nvarying vec4 vColor;\n\nvarying vec2 vResolution;\n\n//texcoords computed in vertex step\n//to avoid dependent texture reads\nvarying vec2 v_rgbNW;\nvarying vec2 v_rgbNE;\nvarying vec2 v_rgbSW;\nvarying vec2 v_rgbSE;\nvarying vec2 v_rgbM;\n\n\nvoid texcoords(vec2 fragCoord, vec2 resolution,\n out vec2 v_rgbNW, out vec2 v_rgbNE,\n out vec2 v_rgbSW, out vec2 v_rgbSE,\n out vec2 v_rgbM) {\n vec2 inverseVP = 1.0 / resolution.xy;\n v_rgbNW = (fragCoord + vec2(-1.0, -1.0)) * inverseVP;\n v_rgbNE = (fragCoord + vec2(1.0, -1.0)) * inverseVP;\n v_rgbSW = (fragCoord + vec2(-1.0, 1.0)) * inverseVP;\n v_rgbSE = (fragCoord + vec2(1.0, 1.0)) * inverseVP;\n v_rgbM = vec2(fragCoord * inverseVP);\n}\n\nvoid main(void){\n gl_Position = vec4((projectionMatrix * vec3(aVertexPosition, 1.0)).xy, 0.0, 1.0);\n vTextureCoord = aTextureCoord;\n vColor = vec4(aColor.rgb * aColor.a, aColor.a);\n vResolution = resolution;\n\n //compute the texture coords and send them to varyings\n texcoords(aTextureCoord * resolution, resolution, v_rgbNW, v_rgbNE, v_rgbSW, v_rgbSE, v_rgbM);\n}\n",'precision lowp float;\n\n\n/**\nBasic FXAA implementation based on the code on geeks3d.com with the\nmodification that the texture2DLod stuff was removed since it\'s\nunsupported by WebGL.\n\n--\n\nFrom:\nhttps://github.com/mitsuhiko/webgl-meincraft\n\nCopyright (c) 2011 by Armin Ronacher.\n\nSome rights reserved.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are\nmet:\n\n * Redistributions of source code must retain the above copyright\n notice, this list of conditions and the following disclaimer.\n\n * Redistributions in binary form must reproduce the above\n copyright notice, this list of conditions and the following\n disclaimer in the documentation and/or other materials provided\n with the distribution.\n\n * The names of the contributors may not be used to endorse or\n promote products derived from this software without specific\n prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\nLIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\nA PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\nOWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\nSPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\nLIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\nDATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\nTHEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\nOF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n*/\n\n#ifndef FXAA_REDUCE_MIN\n #define FXAA_REDUCE_MIN (1.0/ 128.0)\n#endif\n#ifndef FXAA_REDUCE_MUL\n #define FXAA_REDUCE_MUL (1.0 / 8.0)\n#endif\n#ifndef FXAA_SPAN_MAX\n #define FXAA_SPAN_MAX 8.0\n#endif\n\n//optimized version for mobile, where dependent\n//texture reads can be a bottleneck\nvec4 fxaa(sampler2D tex, vec2 fragCoord, vec2 resolution,\n vec2 v_rgbNW, vec2 v_rgbNE,\n vec2 v_rgbSW, vec2 v_rgbSE,\n vec2 v_rgbM) {\n vec4 color;\n mediump vec2 inverseVP = vec2(1.0 / resolution.x, 1.0 / resolution.y);\n vec3 rgbNW = texture2D(tex, v_rgbNW).xyz;\n vec3 rgbNE = texture2D(tex, v_rgbNE).xyz;\n vec3 rgbSW = texture2D(tex, v_rgbSW).xyz;\n vec3 rgbSE = texture2D(tex, v_rgbSE).xyz;\n vec4 texColor = texture2D(tex, v_rgbM);\n vec3 rgbM = texColor.xyz;\n vec3 luma = vec3(0.299, 0.587, 0.114);\n float lumaNW = dot(rgbNW, luma);\n float lumaNE = dot(rgbNE, luma);\n float lumaSW = dot(rgbSW, luma);\n float lumaSE = dot(rgbSE, luma);\n float lumaM = dot(rgbM, luma);\n float lumaMin = min(lumaM, min(min(lumaNW, lumaNE), min(lumaSW, lumaSE)));\n float lumaMax = max(lumaM, max(max(lumaNW, lumaNE), max(lumaSW, lumaSE)));\n\n mediump vec2 dir;\n dir.x = -((lumaNW + lumaNE) - (lumaSW + lumaSE));\n dir.y = ((lumaNW + lumaSW) - (lumaNE + lumaSE));\n\n float dirReduce = max((lumaNW + lumaNE + lumaSW + lumaSE) *\n (0.25 * FXAA_REDUCE_MUL), FXAA_REDUCE_MIN);\n\n float rcpDirMin = 1.0 / (min(abs(dir.x), abs(dir.y)) + dirReduce);\n dir = min(vec2(FXAA_SPAN_MAX, FXAA_SPAN_MAX),\n max(vec2(-FXAA_SPAN_MAX, -FXAA_SPAN_MAX),\n dir * rcpDirMin)) * inverseVP;\n\n vec3 rgbA = 0.5 * (\n texture2D(tex, fragCoord * inverseVP + dir * (1.0 / 3.0 - 0.5)).xyz +\n texture2D(tex, fragCoord * inverseVP + dir * (2.0 / 3.0 - 0.5)).xyz);\n vec3 rgbB = rgbA * 0.5 + 0.25 * (\n texture2D(tex, fragCoord * inverseVP + dir * -0.5).xyz +\n texture2D(tex, fragCoord * inverseVP + dir * 0.5).xyz);\n\n float lumaB = dot(rgbB, luma);\n if ((lumaB < lumaMin) || (lumaB > lumaMax))\n color = vec4(rgbA, texColor.a);\n else\n color = vec4(rgbB, texColor.a);\n return color;\n}\n\n\nvarying vec2 vTextureCoord;\nvarying vec4 vColor;\nvarying vec2 vResolution;\n\n//texcoords computed in vertex step\n//to avoid dependent texture reads\nvarying vec2 v_rgbNW;\nvarying vec2 v_rgbNE;\nvarying vec2 v_rgbSW;\nvarying vec2 v_rgbSE;\nvarying vec2 v_rgbM;\n\nuniform sampler2D uSampler;\n\n\nvoid main(void){\n\n gl_FragColor = fxaa(uSampler, vTextureCoord * vResolution, vResolution, v_rgbNW, v_rgbNE, v_rgbSW, v_rgbSE, v_rgbM);\n\n}\n',{resolution:{type:"v2",value:{x:1,y:1}}})}var n=t("./AbstractFilter");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.applyFilter=function(t,e,r){var i=t.filterManager,n=this.getShader(t);i.applyFilter(n,e,r)}},{"./AbstractFilter":66}],68:[function(t,e,r){function i(t){var e=new o.Matrix;n.call(this,"attribute vec2 aVertexPosition;\nattribute vec2 aTextureCoord;\nattribute vec4 aColor;\n\nuniform mat3 projectionMatrix;\nuniform mat3 otherMatrix;\n\nvarying vec2 vMaskCoord;\nvarying vec2 vTextureCoord;\nvarying vec4 vColor;\n\nvoid main(void)\n{\n gl_Position = vec4((projectionMatrix * vec3(aVertexPosition, 1.0)).xy, 0.0, 1.0);\n vTextureCoord = aTextureCoord;\n vMaskCoord = ( otherMatrix * vec3( aTextureCoord, 1.0) ).xy;\n vColor = vec4(aColor.rgb * aColor.a, aColor.a);\n}\n","precision lowp float;\n\nvarying vec2 vMaskCoord;\nvarying vec2 vTextureCoord;\nvarying vec4 vColor;\n\nuniform sampler2D uSampler;\nuniform float alpha;\nuniform sampler2D mask;\n\nvoid main(void)\n{\n // check clip! this will stop the mask bleeding out from the edges\n vec2 text = abs( vMaskCoord - 0.5 );\n text = step(0.5, text);\n float clip = 1.0 - max(text.y, text.x);\n vec4 original = texture2D(uSampler, vTextureCoord);\n vec4 masky = texture2D(mask, vMaskCoord);\n original *= (masky.r * masky.a * alpha * clip);\n gl_FragColor = original;\n}\n",{mask:{type:"sampler2D",value:t._texture},alpha:{type:"f",value:1},otherMatrix:{type:"mat3",value:e.toArray(!0)}}),this.maskSprite=t,this.maskMatrix=e}var n=t("./AbstractFilter"),o=t("../../../math");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.applyFilter=function(t,e,r){var i=t.filterManager;this.uniforms.mask.value=this.maskSprite._texture,i.calculateMappedMatrix(e.frame,this.maskSprite,this.maskMatrix),this.uniforms.otherMatrix.value=this.maskMatrix.toArray(!0),this.uniforms.alpha.value=this.maskSprite.worldAlpha;var n=this.getShader(t);i.applyFilter(n,e,r)},Object.defineProperties(i.prototype,{map:{get:function(){return this.uniforms.mask.value},set:function(t){this.uniforms.mask.value=t}},offset:{get:function(){return this.uniforms.offset.value},set:function(t){this.uniforms.offset.value=t}}})},{"../../../math":48,"./AbstractFilter":66}],69:[function(t,e,r){function i(t){n.call(this,t),this.currentBlendMode=99999}var n=t("./WebGLManager");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.setBlendMode=function(t){if(this.currentBlendMode===t)return!1;this.currentBlendMode=t;var e=this.renderer.blendModes[this.currentBlendMode];return this.renderer.gl.blendFunc(e[0],e[1]),!0}},{"./WebGLManager":74}],70:[function(t,e,r){function i(t){n.call(this,t),this.filterStack=[],this.filterStack.push({renderTarget:t.currentRenderTarget,filter:[],bounds:null}),this.texturePool=[],this.textureSize=new h.Rectangle(0,0,t.width,t.height),this.currentFrame=null}var n=t("./WebGLManager"),o=t("../utils/RenderTarget"),s=t("../../../const"),a=t("../utils/Quad"),h=t("../../../math");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.onContextChange=function(){this.texturePool.length=0;var t=this.renderer.gl;this.quad=new a(t)},i.prototype.setFilterStack=function(t){this.filterStack=t},i.prototype.pushFilter=function(t,e){var r=t.filterArea?t.filterArea.clone():t.getBounds();r.x=0|r.x,r.y=0|r.y,r.width=0|r.width,r.height=0|r.height;var i=0|e[0].padding;if(r.x-=i,r.y-=i,r.width+=2*i,r.height+=2*i,this.renderer.currentRenderTarget.transform){var n=this.renderer.currentRenderTarget.transform;r.x+=n.tx,r.y+=n.ty,this.capFilterArea(r),r.x-=n.tx,r.y-=n.ty}else this.capFilterArea(r);if(r.width>0&&r.height>0){this.currentFrame=r;var o=this.getRenderTarget();this.renderer.setRenderTarget(o),o.clear(),this.filterStack.push({renderTarget:o,filter:e})}else this.filterStack.push({renderTarget:null,filter:e})},i.prototype.popFilter=function(){var t=this.filterStack.pop(),e=this.filterStack[this.filterStack.length-1],r=t.renderTarget;if(t.renderTarget){var i=e.renderTarget,n=this.renderer.gl;this.currentFrame=r.frame,this.quad.map(this.textureSize,r.frame),n.bindBuffer(n.ARRAY_BUFFER,this.quad.vertexBuffer),n.bindBuffer(n.ELEMENT_ARRAY_BUFFER,this.quad.indexBuffer);var o=t.filter;if(n.vertexAttribPointer(this.renderer.shaderManager.defaultShader.attributes.aVertexPosition,2,n.FLOAT,!1,0,0),n.vertexAttribPointer(this.renderer.shaderManager.defaultShader.attributes.aTextureCoord,2,n.FLOAT,!1,0,32),n.vertexAttribPointer(this.renderer.shaderManager.defaultShader.attributes.aColor,4,n.FLOAT,!1,0,64),this.renderer.blendModeManager.setBlendMode(s.BLEND_MODES.NORMAL),1===o.length)o[0].uniforms.dimensions&&(o[0].uniforms.dimensions.value[0]=this.renderer.width,o[0].uniforms.dimensions.value[1]=this.renderer.height,o[0].uniforms.dimensions.value[2]=this.quad.vertices[0],o[0].uniforms.dimensions.value[3]=this.quad.vertices[5]),o[0].applyFilter(this.renderer,r,i),this.returnRenderTarget(r);else{for(var a=r,h=this.getRenderTarget(!0),u=0;uthis.textureSize.width&&(t.width=this.textureSize.width-t.x),t.y+t.height>this.textureSize.height&&(t.height=this.textureSize.height-t.y)},i.prototype.resize=function(t,e){this.textureSize.width=t,this.textureSize.height=e;for(var r=0;re;++e)t._array[2*e]=o[e].x,t._array[2*e+1]=o[e].y;s.uniform2fv(i,t._array);break;case"v3v":for(t._array||(t._array=new Float32Array(3*o.length)),e=0,r=o.length;r>e;++e)t._array[3*e]=o[e].x,t._array[3*e+1]=o[e].y,t._array[3*e+2]=o[e].z;s.uniform3fv(i,t._array);break;case"v4v":for(t._array||(t._array=new Float32Array(4*o.length)),e=0,r=o.length;r>e;++e)t._array[4*e]=o[e].x,t._array[4*e+1]=o[e].y,t._array[4*e+2]=o[e].z,t._array[4*e+3]=o[e].w;s.uniform4fv(i,t._array);break;case"t":case"sampler2D":if(!t.value||!t.value.baseTexture.hasLoaded)break;s.activeTexture(s["TEXTURE"+this.textureCount]);var a=t.value.baseTexture._glTextures[s.id];a||(this.initSampler2D(t),a=t.value.baseTexture._glTextures[s.id]),s.bindTexture(s.TEXTURE_2D,a),s.uniform1i(t._location,this.textureCount),this.textureCount++;break;default:console.warn("Pixi.js Shader Warning: Unknown uniform type: "+t.type)}},i.prototype.syncUniforms=function(){this.textureCount=1;for(var t in this.uniforms)this.syncUniform(this.uniforms[t])},i.prototype.initSampler2D=function(t){var e=this.gl,r=t.value.baseTexture;if(r.hasLoaded)if(t.textureData){var i=t.textureData;r._glTextures[e.id]=e.createTexture(),e.bindTexture(e.TEXTURE_2D,r._glTextures[e.id]),e.pixelStorei(e.UNPACK_PREMULTIPLY_ALPHA_WEBGL,r.premultipliedAlpha),e.texImage2D(e.TEXTURE_2D,0,i.luminance?e.LUMINANCE:e.RGBA,e.RGBA,e.UNSIGNED_BYTE,r.source),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MAG_FILTER,i.magFilter?i.magFilter:e.LINEAR),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MIN_FILTER,i.wrapS?i.wrapS:e.CLAMP_TO_EDGE),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,i.wrapS?i.wrapS:e.CLAMP_TO_EDGE),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,i.wrapT?i.wrapT:e.CLAMP_TO_EDGE)}else this.shaderManager.renderer.updateTexture(r)},i.prototype.destroy=function(){this.gl.deleteProgram(this.program),this.gl=null,this.uniforms=null,this.attributes=null,this.vertexSrc=null,this.fragmentSrc=null},i.prototype._glCompile=function(t,e){var r=this.gl.createShader(t);return this.gl.shaderSource(r,e),this.gl.compileShader(r),this.gl.getShaderParameter(r,this.gl.COMPILE_STATUS)?r:(console.log(this.gl.getShaderInfoLog(r)),null)}},{"../../../utils":98}],78:[function(t,e,r){function i(t,e,r,o,s){var a={uSampler:{type:"sampler2D",value:0},projectionMatrix:{type:"mat3",value:new Float32Array([1,0,0,0,1,0,0,0,1])}};if(o)for(var h in o)a[h]=o[h];var u={aVertexPosition:0,aTextureCoord:0,aColor:0};if(s)for(var l in s)u[l]=s[l];e=e||i.defaultVertexSrc,r=r||i.defaultFragmentSrc,n.call(this,t,e,r,a,u)}var n=t("./Shader");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.defaultVertexSrc=["precision lowp float;","attribute vec2 aVertexPosition;","attribute vec2 aTextureCoord;","attribute vec4 aColor;","uniform mat3 projectionMatrix;","varying vec2 vTextureCoord;","varying vec4 vColor;","void main(void){"," gl_Position = vec4((projectionMatrix * vec3(aVertexPosition, 1.0)).xy, 0.0, 1.0);"," vTextureCoord = aTextureCoord;"," vColor = vec4(aColor.rgb * aColor.a, aColor.a);","}"].join("\n"),i.defaultFragmentSrc=["precision lowp float;","varying vec2 vTextureCoord;","varying vec4 vColor;","uniform sampler2D uSampler;","void main(void){"," gl_FragColor = texture2D(uSampler, vTextureCoord) * vColor ;","}"].join("\n")},{"./Shader":77}],79:[function(t,e,r){function i(t){vertexSrc=i.defaultVertexSrc,fragmentSrc=i.defaultFragmentSrc,console.log(fragmentSrc),n.call(this,t,vertexSrc,fragmentSrc)}var n=t("pixi-gl-core").GLShader;i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.defaultVertexSrc=["precision lowp float;","attribute vec2 aVertexPosition;","attribute vec2 aTextureCoord;","attribute vec4 aColor;","uniform mat3 projectionMatrix;","varying vec2 vTextureCoord;","varying vec4 vColor;","void main(void){"," gl_Position = vec4((projectionMatrix * vec3(aVertexPosition, 1.0)).xy, 0.0, 1.0);"," vTextureCoord = aTextureCoord;"," vColor = vec4(aColor.rgb * aColor.a, aColor.a);","}"].join("\n"),i.defaultFragmentSrc=["precision lowp float;","varying vec2 vTextureCoord;","varying vec4 vColor;","uniform sampler2D uSampler;","void main(void){"," gl_FragColor = texture2D(uSampler, vTextureCoord) * vColor ;","}"].join("\n")},{"pixi-gl-core":1}],80:[function(t,e,r){function i(t){n.call(this,t)}var n=t("../managers/WebGLManager");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.start=function(){},i.prototype.stop=function(){this.flush()},i.prototype.flush=function(){},i.prototype.render=function(t){}},{"../managers/WebGLManager":74}],81:[function(t,e,r){function i(t){this.gl=t,this.vertices=new Float32Array([0,0,200,0,200,200,0,200]),this.uvs=new Float32Array([0,0,1,0,1,1,0,1]),this.colors=new Float32Array([1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]),this.indices=new Uint16Array([0,1,2,0,3,2]),this.vertexBuffer=t.createBuffer(),this.indexBuffer=t.createBuffer(),t.bindBuffer(t.ARRAY_BUFFER,this.vertexBuffer),t.bufferData(t.ARRAY_BUFFER,128,t.DYNAMIC_DRAW),t.bindBuffer(t.ELEMENT_ARRAY_BUFFER,this.indexBuffer),t.bufferData(t.ELEMENT_ARRAY_BUFFER,this.indices,t.STATIC_DRAW),this.upload()}i.prototype.constructor=i,i.prototype.map=function(t,e){var r=0,i=0;this.uvs[0]=r,this.uvs[1]=i,this.uvs[2]=r+e.width/t.width,this.uvs[3]=i,this.uvs[4]=r+e.width/t.width,this.uvs[5]=i+e.height/t.height,this.uvs[6]=r,this.uvs[7]=i+e.height/t.height,r=e.x,i=e.y,this.vertices[0]=r,this.vertices[1]=i,this.vertices[2]=r+e.width,this.vertices[3]=i,this.vertices[4]=r+e.width,this.vertices[5]=i+e.height,this.vertices[6]=r,this.vertices[7]=i+e.height,this.upload()},i.prototype.upload=function(){var t=this.gl;t.bindBuffer(t.ARRAY_BUFFER,this.vertexBuffer),t.bufferSubData(t.ARRAY_BUFFER,0,this.vertices),t.bufferSubData(t.ARRAY_BUFFER,32,this.uvs),t.bufferSubData(t.ARRAY_BUFFER,64,this.colors)},i.prototype.destroy=function(){var t=this.gl;t.deleteBuffer(this.vertexBuffer),t.deleteBuffer(this.indexBuffer)},e.exports=i},{}],82:[function(t,e,r){var i=t("../../../math"),n=(t("../../../utils"),t("../../../const")),o=t("pixi-gl-core").GLTexture,s=t("pixi-gl-core").GLFramebuffer,a=t("./StencilMaskStack"),h=function(t,e,r,h,u,l){if(this.gl=t,this.frameBuffer=null,this.texture=null,this.clearColor=[0,0,0,0],this.size=new i.Rectangle(0,0,1,1),this.resolution=u||n.RESOLUTION,this.projectionMatrix=new i.Matrix,this.transform=null,this.frame=null,this.stencilBuffer=null,this.stencilMaskStack=new a,this.filterStack=[{renderTarget:this,filter:[],bounds:this.size}],this.scaleMode=h||n.SCALE_MODES.DEFAULT,this.root=l,this.frameBuffer=new s.createRGBA(t,100,100),this.root)this.frameBuffer.framebuffer=null;else{var c=new o(t);c.enableLinearScaling(),c.enableWrapClamp(),this.frameBuffer.enableTexture(c),this.texture=c.texture}this.resize(e,r)};h.prototype.constructor=h,e.exports=h,h.prototype.clear=function(t){var e=t||this.clearColor;this.frameBuffer.clear(e[0],e[1],e[2],e[3])},h.prototype.attachStencilBuffer=function(){this.root||this.frameBuffer.enableStencil()},h.prototype.activate=function(){var t=this.gl;this.frameBuffer.bind();var e=this.frame||this.size;this.calculateProjection(e),this.transform&&this.projectionMatrix.append(this.transform),t.viewport(0,0,e.width*this.resolution,e.height*this.resolution)},h.prototype.calculateProjection=function(t){var e=this.projectionMatrix;e.identity(),this.root?(e.a=1/t.width*2,e.d=-1/t.height*2,e.tx=-1-t.x*e.a,e.ty=1-t.y*e.d):(e.a=1/t.width*2,e.d=1/t.height*2,e.tx=-1-t.x*e.a,e.ty=-1-t.y*e.d)},h.prototype.resize=function(t,e){if(t=0|t,e=0|e,this.size.width!==t||this.size.height!==e){this.size.width=t,this.size.height=e,this.frameBuffer.resize(t*this.resolution,e*this.resolution);var r=this.frame||this.size;this.calculateProjection(r)}},h.prototype.destroy=function(){this.gl;this.frameBuffer.destroy(),this.frameBuffer=null,this.texture=null}},{"../../../const":38,"../../../math":48,"../../../utils":98,"./StencilMaskStack":83,"pixi-gl-core":1}],83:[function(t,e,r){function i(){this.stencilStack=[],this.reverse=!0,this.count=0}i.prototype.constructor=i,e.exports=i},{}],84:[function(t,e,r){function i(t,e){return e=e||{},e[CONST.BLEND_MODES.NORMAL]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.ADD]=[t.SRC_ALPHA,t.DST_ALPHA],e[CONST.BLEND_MODES.MULTIPLY]=[t.DST_COLOR,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.SCREEN]=[t.SRC_ALPHA,t.ONE],e[CONST.BLEND_MODES.OVERLAY]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.DARKEN]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.LIGHTEN]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.COLOR_DODGE]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.COLOR_BURN]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.HARD_LIGHT]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.SOFT_LIGHT]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.DIFFERENCE]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.EXCLUSION]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.HUE]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.SATURATION]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.COLOR]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.LUMINOSITY]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e}CONST=t("../../../const"),e.exports=i},{"../../../const":38}],85:[function(t,e,r){function i(t,e){e=e||{},e[CONST.DRAW_MODES.POINTS]=t.POINTS,e[CONST.DRAW_MODES.LINES]=t.LINES,e[CONST.DRAW_MODES.LINE_LOOP]=t.LINE_LOOP,e[CONST.DRAW_MODES.LINE_STRIP]=t.LINE_STRIP,e[CONST.DRAW_MODES.TRIANGLES]=t.TRIANGLES,e[CONST.DRAW_MODES.TRIANGLE_STRIP]=t.TRIANGLE_STRIP,e[CONST.DRAW_MODES.TRIANGLE_FAN]=t.TRIANGLE_FAN}CONST=t("../../../const"),e.exports=i},{"../../../const":38}],86:[function(t,e,r){function i(t){s.call(this),this.anchor=new n.Point,this._texture=null,this._width=0,this._height=0,this.tint=16777215,this.blendMode=u.BLEND_MODES.NORMAL,this.shader=null,this.cachedTint=16777215,this.texture=t||o.EMPTY,this.textureDirty=!0,this.vertexDirty=!0,this.vertexData=new Float32Array(8)}var n=t("../math"),o=t("../textures/Texture"),s=t("../display/Container"),a=t("../renderers/canvas/utils/CanvasTinter"),h=t("../utils"),u=t("../const"),l=new n.Point;i.prototype=Object.create(s.prototype),i.prototype.constructor=i,e.exports=i,Object.defineProperties(i.prototype,{width:{get:function(){return Math.abs(this.scale.x)*this.texture._frame.width},set:function(t){var e=h.sign(this.scale.x)||1;this.scale.x=e*t/this.texture._frame.width,this._width=t}},height:{get:function(){return Math.abs(this.scale.y)*this.texture._frame.height},set:function(t){var e=h.sign(this.scale.y)||1;this.scale.y=e*t/this.texture._frame.height,this._height=t}},texture:{get:function(){return this._texture},set:function(t){this._texture!==t&&(this._texture=t,this.cachedTint=16777215,this.textureDirty=!0,t&&(t.baseTexture.hasLoaded?this._onTextureUpdate():t.once("update",this._onTextureUpdate,this)))}}}),i.prototype._onTextureUpdate=function(){this.textureDirty=!0,this._width&&(this.scale.x=h.sign(this.scale.x)*this._width/this.texture.frame.width),this._height&&(this.scale.y=h.sign(this.scale.y)*this._height/this.texture.frame.height)},i.prototype.caclulateVertices=function(){var t,e,r,i,n=this._texture,o=this.worldTransform,s=o.a,a=o.b,h=o.c,u=o.d,l=o.tx,c=o.ty,p=this.vertexData,d=n.trim;d?(e=d.x-this.anchor.x*d.width,t=e+n.crop.width,i=d.y-this.anchor.y*d.height,r=i+n.crop.height):(t=n._frame.width*(1-this.anchor.x),e=n._frame.width*-this.anchor.x,r=n._frame.height*(1-this.anchor.y),i=n._frame.height*-this.anchor.y),p[0]=s*e+h*i+l,p[1]=u*i+a*e+c,p[2]=s*t+h*i+l,p[3]=u*i+a*t+c,p[4]=s*t+h*r+l,p[5]=u*r+a*t+c,p[6]=s*e+h*r+l,p[7]=u*r+a*e+c},i.prototype._renderWebGL=function(t){this.textureDirty&&(this.textureDirty=!1,this._onTextureUpdate(),this.vertexDirty=!0),this.vertexDirty&&(this.vertexDirty=!1,this.caclulateVertices()),t.setObjectRenderer(t.plugins.sprite),t.plugins.sprite.render(this)},i.prototype.getBounds=function(t){if(!this._currentBounds){this.vertexDirty&&(this.vertexDirty=!1,this.caclulateVertices());var e,r,i,n,o=this.vertexData,s=o[0],a=o[1],h=o[2],u=o[3],l=o[4],c=o[5],p=o[6],d=o[7];if(e=s,e=e>h?h:e,e=e>l?l:e,e=e>p?p:e,i=a,i=i>u?u:i,i=i>c?c:i,i=i>d?d:i,r=s,r=h>r?h:r,r=l>r?l:r,r=p>r?p:r,n=a,n=u>n?u:n,n=c>n?c:n,n=d>n?d:n,this.children.length){var f=this.containerGetBounds();w0=f.x,w1=f.x+f.width,h0=f.y,h1=f.y+f.height,e=ew1?r:w1,n=n>h1?n:h1}var v=this._bounds;v.x=e,v.width=r-e,v.y=i,v.height=n-i,this._currentBounds=v}return this._currentBounds},i.prototype.getLocalBounds=function(){return this._bounds.x=-this._texture._frame.width*this.anchor.x,this._bounds.y=-this._texture._frame.height*this.anchor.y,this._bounds.width=this._texture._frame.width,this._bounds.height=this._texture._frame.height,this._bounds},i.prototype.containsPoint=function(t){this.worldTransform.applyInverse(t,l);var e,r=this._texture._frame.width,i=this._texture._frame.height,n=-r*this.anchor.x;return l.x>n&&l.xe&&l.yr;r++)this.groups[r]={textures:[],textureCount:0,ids:[],size:0,start:0,blend:0};this.currentGroup=this.groups[this.groupCount++],this.currentTexture=null}var n=t("../../renderers/webgl/utils/ObjectRenderer"),o=t("../../renderers/webgl/WebGLRenderer"),s=(t("../../renderers/webgl/shaders/_TextureShader"),t("../../utils/createIndicesForQuads")),a=t("./generateMultiTextureShader"),h=t("../../const"),u=t("pixi-gl-core"),l=2;i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,o.registerPlugin("sprite",i),i.prototype.onContextChange=function(){var t=this.renderer.gl;this._shader=a(t,l),this.shader=this.renderer.shaderManager.defaultShader,this.vertexBuffer=u.GLBuffer.createVertexBuffer(t,null,t.DYNAMIC_DRAW),this.indexBuffer=u.GLBuffer.createIndexBuffer(t,this.indices,t.STATIC_DRAW),this.vao=new u.VertexArrayObject(t),this.vao.addIndex(this.indexBuffer),this.vao.addAttribute(this.vertexBuffer,this._shader.attributes.aVertexPosition,t.FLOAT,!1,this.vertByteSize,0),this.vao.addAttribute(this.vertexBuffer,this._shader.attributes.aTextureCoord,t.UNSIGNED_SHORT,!0,this.vertByteSize,8),this.vao.addAttribute(this.vertexBuffer,this._shader.attributes.aColor,t.UNSIGNED_BYTE,!0,this.vertByteSize,12),this.vao.addAttribute(this.vertexBuffer,this._shader.attributes.aTextureId,t.FLOAT,!1,this.vertByteSize,16),this.currentBlendMode=99999},i.prototype.render=function(t){this.currentIndex>=this.size&&this.flush();var e=t.texture._uvs;if(e){var r=(this.groups,t.texture.baseTexture),i=this.currentGroup;if(this.currentTexture!==r&&(this.currentTexture=r,!r._enabled)){if(r._enabled=!0,r._id=this.textureCount,this.textureCount===l){for(var n=0;n>16)+(65280&t.tint)+((255&t.tint)<<16)+(255*t.worldAlpha<<24);a[o++]=h[0],a[o++]=h[1],this.uvs[o++]=e.uvs_uint32[0],s[o++]=u,a[o++]=r._id,a[o++]=h[2],a[o++]=h[3],this.uvs[o++]=e.uvs_uint32[1],s[o++]=u,a[o++]=r._id,a[o++]=h[4],a[o++]=h[5],this.uvs[o++]=e.uvs_uint32[2],s[o++]=u,a[o++]=r._id,a[o++]=h[6],a[o++]=h[7],this.uvs[o++]=e.uvs_uint32[3],s[o++]=u,a[o++]=r._id,this.sprites[this.currentBatchSize++]=t}},i.prototype.renderSprites=function(t){for(var e=0;e.5*this.size)this.vertexBuffer.upload(this.vertices,0,!0);else{var e=this.positions.subarray(0,this.currentIndex*this.vertByteSize);this.vertexBuffer.upload(e,0,!0)}for(this.renderer.bindShader(this._shader),this.renderer.blendModeManager.setBlendMode(0),t=0;tu;u++)h[u]=u;return a.bind(),a.uniforms.uSamplers=h,a}function n(t){var e="vec4 getSampleFromArray(sampler2D textures[%%], int ndx, vec2 uv) {\n\nvec4 color;";e+="\n", -e+="\n";for(var r=0;t>r;r++)r>0&&(e+="\nelse "),t-1>r&&(e+="if(ndx == "+r+")"),e+="\n{",e+="\n color = texture2D(textures["+r+"], uv);",e+="\n}";return e+="\n",e+="\n",e+="return color;",e+="\n}"}var o=t("pixi-gl-core").GLShader,s=["varying vec2 vTextureCoord;","varying vec4 vColor;","varying float vTextureId;","uniform sampler2D uSamplers[%%];","void main(void){","gl_FragColor = getSampleFromArray(uSamplers, int(vTextureId), vTextureCoord) * vColor;","}"].join("\n");e.exports=i},{"pixi-gl-core":1}],89:[function(t,e,r){function i(t,e,r){this.canvas=document.createElement("canvas"),this.context=this.canvas.getContext("2d"),this.resolution=r||h.RESOLUTION,this._text=null,this._style=null;var i=o.fromCanvas(this.canvas);i.trim=new s.Rectangle,n.call(this,i),this.text=t,this.style=e}var n=t("../sprites/Sprite"),o=t("../textures/Texture"),s=t("../math"),a=t("../utils"),h=t("../const");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.fontPropertiesCache={},i.fontPropertiesCanvas=document.createElement("canvas"),i.fontPropertiesContext=i.fontPropertiesCanvas.getContext("2d"),Object.defineProperties(i.prototype,{width:{get:function(){return this.dirty&&this.updateText(),this.scale.x*this._texture._frame.width},set:function(t){this.scale.x=t/this._texture._frame.width,this._width=t}},height:{get:function(){return this.dirty&&this.updateText(),this.scale.y*this._texture._frame.height},set:function(t){this.scale.y=t/this._texture._frame.height,this._height=t}},style:{get:function(){return this._style},set:function(t){t=t||{},"number"==typeof t.fill&&(t.fill=a.hex2string(t.fill)),"number"==typeof t.stroke&&(t.stroke=a.hex2string(t.stroke)),"number"==typeof t.dropShadowColor&&(t.dropShadowColor=a.hex2string(t.dropShadowColor)),t.font=t.font||"bold 20pt Arial",t.fill=t.fill||"black",t.align=t.align||"left",t.stroke=t.stroke||"black",t.strokeThickness=t.strokeThickness||0,t.wordWrap=t.wordWrap||!1,t.wordWrapWidth=t.wordWrapWidth||100,t.dropShadow=t.dropShadow||!1,t.dropShadowColor=t.dropShadowColor||"#000000",t.dropShadowAngle=void 0!==t.dropShadowAngle?t.dropShadowAngle:Math.PI/6,t.dropShadowDistance=void 0!==t.dropShadowDistance?t.dropShadowDistance:5,t.dropShadowBlur=void 0!==t.dropShadowBlur?t.dropShadowBlur:0,t.padding=t.padding||0,t.textBaseline=t.textBaseline||"alphabetic",t.lineJoin=t.lineJoin||"miter",t.miterLimit=t.miterLimit||10,this._style=t,this.dirty=!0}},text:{get:function(){return this._text},set:function(t){t=t.toString()||" ",this._text!==t&&(this._text=t,this.dirty=!0)}}}),i.prototype.updateText=function(){var t=this._style;this.context.font=t.font;for(var e=t.wordWrap?this.wordWrap(this._text):this._text,r=e.split(/(?:\r\n|\r|\n)/),i=new Array(r.length),n=0,o=this.determineFontProperties(t.font),s=0;s0?(this.context.shadowColor=t.dropShadowColor,this.context.shadowBlur=t.dropShadowBlur):this.context.fillStyle=t.dropShadowColor;var d=Math.cos(t.dropShadowAngle)*t.dropShadowDistance,f=Math.sin(t.dropShadowAngle)*t.dropShadowDistance;for(s=0;sh;h++){for(u=0;p>u;u+=4)if(255!==l[d+u]){f=!0;break}if(f)break;d+=p}for(e.ascent=s-h,d=c-p,f=!1,h=a;h>s;h--){for(u=0;p>u;u+=4)if(255!==l[d+u]){f=!0;break}if(f)break;d-=p}e.descent=h-s,e.fontSize=e.ascent+e.descent,i.fontPropertiesCache[t]=e}return e},i.prototype.wordWrap=function(t){for(var e="",r=t.split("\n"),i=this._style.wordWrapWidth,n=0;no?(a>0&&(e+="\n"),e+=s[a],o=i-h):(o-=u,e+=" "+s[a])}n0&&e>0,this.width=this._frame.width=this.crop.width=t,this.height=this._frame.height=this.crop.height=e,r&&(this.baseTexture.width=this.width,this.baseTexture.height=this.height),this.valid&&(this.textureBuffer.resize(this.width,this.height),this.filterManager&&this.filterManager.resize(this.width,this.height)))},i.prototype.clear=function(){this.valid&&(this.renderer.type===l.RENDERER_TYPE.WEBGL&&this.renderer.gl.bindFramebuffer(this.renderer.gl.FRAMEBUFFER,this.textureBuffer.frameBuffer),this.textureBuffer.clear())},i.prototype.renderWebGL=function(t,e,r,i){if(this.valid){if(i=void 0!==i?i:!0,this.textureBuffer.transform=e,this.textureBuffer.activate(),t.worldAlpha=1,i){t.worldTransform.identity(),t.currentBounds=null;var n,o,s=t.children;for(n=0,o=s.length;o>n;++n)s[n].updateTransform()}var a=this.renderer.filterManager;this.renderer.filterManager=this.filterManager,this.renderer.renderDisplayObject(t,this.textureBuffer,r),this.renderer.filterManager=a}},i.prototype.renderCanvas=function(t,e,r,i){if(this.valid){i=!!i;var n=c;n.identity(),e&&n.append(e);var o=t.worldTransform;t.worldTransform=n,t.worldAlpha=1;var s,a,h=t.children;for(s=0,a=h.length;a>s;++s)h[s].updateTransform();r&&this.textureBuffer.clear();var u=this.textureBuffer.context,l=this.renderer.resolution;this.renderer.resolution=this.resolution,this.renderer.renderDisplayObject(t,u),this.renderer.resolution=l,t.worldTransform===n&&(t.worldTransform=o)}},i.prototype.destroy=function(){o.prototype.destroy.call(this,!0),this.textureBuffer.destroy(),this.filterManager&&this.filterManager.destroy(),this.renderer=null},i.prototype.getImage=function(){var t=new Image;return t.src=this.getBase64(),t},i.prototype.getBase64=function(){return this.getCanvas().toDataURL()},i.prototype.getCanvas=function(){if(this.renderer.type===l.RENDERER_TYPE.WEBGL){var t=this.renderer.gl,e=this.textureBuffer.size.width,r=this.textureBuffer.size.height,i=new Uint8Array(4*e*r);t.bindFramebuffer(t.FRAMEBUFFER,this.textureBuffer.frameBuffer),t.readPixels(0,0,e,r,t.RGBA,t.UNSIGNED_BYTE,i),t.bindFramebuffer(t.FRAMEBUFFER,null);var n=new h(e,r),o=n.context.getImageData(0,0,e,r);return o.data.set(i),n.context.putImageData(o,0,0),n.canvas}return this.textureBuffer.canvas},i.prototype.getPixels=function(){var t,e;if(this.renderer.type===l.RENDERER_TYPE.WEBGL){var r=this.renderer.gl;t=this.textureBuffer.size.width,e=this.textureBuffer.size.height;var i=new Uint8Array(4*t*e);return r.bindFramebuffer(r.FRAMEBUFFER,this.textureBuffer.frameBuffer),r.readPixels(0,0,t,e,r.RGBA,r.UNSIGNED_BYTE,i),r.bindFramebuffer(r.FRAMEBUFFER,null),i}return t=this.textureBuffer.canvas.width,e=this.textureBuffer.canvas.height,this.textureBuffer.canvas.getContext("2d").getImageData(0,0,t,e).data},i.prototype.getPixel=function(t,e){if(this.renderer.type===l.RENDERER_TYPE.WEBGL){var r=this.renderer.gl,i=new Uint8Array(4);return r.bindFramebuffer(r.FRAMEBUFFER,this.textureBuffer.frameBuffer),r.readPixels(t,e,1,1,r.RGBA,r.UNSIGNED_BYTE,i),r.bindFramebuffer(r.FRAMEBUFFER,null),i}return this.textureBuffer.canvas.getContext("2d").getImageData(t,e,1,1).data}},{"../const":38,"../math":48,"../renderers/canvas/utils/CanvasBuffer":60,"../renderers/webgl/managers/FilterManager":70,"../renderers/webgl/utils/RenderTarget":82,"./BaseTexture":90,"./Texture":92}],92:[function(t,e,r){function i(t,e,r,n,o){a.call(this),this.noFrame=!1,e||(this.noFrame=!0,e=new h.Rectangle(0,0,1,1)),t instanceof i&&(t=t.baseTexture),this.baseTexture=t,this._frame=e,this.trim=n,this.valid=!1,this.requiresUpdate=!1,this._uvs=null,this.width=0,this.height=0,this.crop=r||e,this.rotate=!!o,t.hasLoaded?(this.noFrame&&(e=new h.Rectangle(0,0,t.width,t.height),t.on("update",this.onBaseTextureUpdated,this)),this.frame=e):t.once("loaded",this.onBaseTextureLoaded,this)}var n=t("./BaseTexture"),o=t("./VideoBaseTexture"),s=t("./TextureUvs"),a=t("eventemitter3"),h=t("../math"),u=t("../utils");i.prototype=Object.create(a.prototype),i.prototype.constructor=i,e.exports=i,Object.defineProperties(i.prototype,{frame:{get:function(){return this._frame},set:function(t){if(this._frame=t,this.noFrame=!1,this.width=t.width,this.height=t.height,!this.trim&&!this.rotate&&(t.x+t.width>this.baseTexture.width||t.y+t.height>this.baseTexture.height))throw new Error("Texture Error: frame does not fit inside the base Texture dimensions "+this);this.valid=t&&t.width&&t.height&&this.baseTexture.hasLoaded,this.trim?(this.width=this.trim.width,this.height=this.trim.height,this._frame.width=this.trim.width,this._frame.height=this.trim.height):this.crop=t,this.valid&&this._updateUvs()}}}),i.prototype.update=function(){this.baseTexture.update()},i.prototype.onBaseTextureLoaded=function(t){this.noFrame?this.frame=new h.Rectangle(0,0,t.width,t.height):this.frame=this._frame,this.emit("update",this)},i.prototype.onBaseTextureUpdated=function(t){this._frame.width=t.width,this._frame.height=t.height,this.emit("update",this)},i.prototype.destroy=function(t){this.baseTexture&&(t&&this.baseTexture.destroy(),this.baseTexture.off("update",this.onBaseTextureUpdated,this),this.baseTexture.off("loaded",this.onBaseTextureLoaded,this),this.baseTexture=null),this._frame=null,this._uvs=null,this.trim=null,this.crop=null,this.valid=!1,this.off("dispose",this.dispose,this),this.off("update",this.update,this)},i.prototype.clone=function(){return new i(this.baseTexture,this.frame,this.crop,this.trim,this.rotate)},i.prototype._updateUvs=function(){this._uvs||(this._uvs=new s),this._uvs.set(this.crop,this.baseTexture,this.rotate)},i.fromImage=function(t,e,r){var o=u.TextureCache[t];return o||(o=new i(n.fromImage(t,e,r)),u.TextureCache[t]=o),o},i.fromFrame=function(t){var e=u.TextureCache[t];if(!e)throw new Error('The frameId "'+t+'" does not exist in the texture cache');return e},i.fromCanvas=function(t,e){return new i(n.fromCanvas(t,e))},i.fromVideo=function(t,e){return"string"==typeof t?i.fromVideoUrl(t,e):new i(o.fromVideo(t,e))},i.fromVideoUrl=function(t,e){return new i(o.fromUrl(t,e))},i.addTextureToCache=function(t,e){u.TextureCache[e]=t},i.removeTextureFromCache=function(t){var e=u.TextureCache[t];return delete u.TextureCache[t],delete u.BaseTextureCache[t],e},i.EMPTY=new i(new n)},{"../math":48,"../utils":98,"./BaseTexture":90,"./TextureUvs":93,"./VideoBaseTexture":94,eventemitter3:25}],93:[function(t,e,r){function i(){this.x0=0,this.y0=0,this.x1=1,this.y1=0,this.x2=1,this.y2=1,this.x3=0,this.y3=1,this.xy0_uint32=0,this.xy1_uint32=0,this.xy2_uint32=0,this.xy3_uint32=0,this.uvs_uint32=new Uint32Array(4)}e.exports=i,i.prototype.set=function(t,e,r){var i=e.width,n=e.height;r?(this.x0=(t.x+t.height)/i,this.y0=t.y/n,this.x1=(t.x+t.height)/i,this.y1=(t.y+t.width)/n,this.x2=t.x/i,this.y2=(t.y+t.width)/n,this.x3=t.x/i,this.y3=t.y/n):(this.x0=t.x/i,this.y0=t.y/n,this.x1=(t.x+t.width)/i,this.y1=t.y/n,this.x2=(t.x+t.width)/i,this.y2=(t.y+t.height)/n,this.x3=t.x/i,this.y3=(t.y+t.height)/n),this.uvs_uint32[0]=(65535*this.y0&65535)<<16|65535*this.x0&65535,this.uvs_uint32[1]=(65535*this.y1&65535)<<16|65535*this.x1&65535,this.uvs_uint32[2]=(65535*this.y2&65535)<<16|65535*this.x2&65535,this.uvs_uint32[3]=(65535*this.y3&65535)<<16|65535*this.x3&65535}},{}],94:[function(t,e,r){function i(t,e){if(!t)throw new Error("No video source element specified.");(t.readyState===t.HAVE_ENOUGH_DATA||t.readyState===t.HAVE_FUTURE_DATA)&&t.width&&t.height&&(t.complete=!0),o.call(this,t,e),this.autoUpdate=!1,this._onUpdate=this._onUpdate.bind(this),this._onCanPlay=this._onCanPlay.bind(this),t.complete||(t.addEventListener("canplay",this._onCanPlay),t.addEventListener("canplaythrough",this._onCanPlay),t.addEventListener("play",this._onPlayStart.bind(this)),t.addEventListener("pause",this._onPlayStop.bind(this))),this.__loaded=!1}function n(t,e){e||(e="video/"+t.substr(t.lastIndexOf(".")+1));var r=document.createElement("source");return r.src=t,r.type=e,r}var o=t("./BaseTexture"),s=t("../utils");i.prototype=Object.create(o.prototype),i.prototype.constructor=i,e.exports=i,i.prototype._onUpdate=function(){this.autoUpdate&&(window.requestAnimationFrame(this._onUpdate),this.update())},i.prototype._onPlayStart=function(){this.autoUpdate||(window.requestAnimationFrame(this._onUpdate),this.autoUpdate=!0)},i.prototype._onPlayStop=function(){this.autoUpdate=!1},i.prototype._onCanPlay=function(){this.hasLoaded=!0,this.source&&(this.source.removeEventListener("canplay",this._onCanPlay),this.source.removeEventListener("canplaythrough",this._onCanPlay),this.width=this.source.videoWidth,this.height=this.source.videoHeight,this.source.play(),this.__loaded||(this.__loaded=!0,this.emit("loaded",this)))},i.prototype.destroy=function(){this.source&&this.source._pixiId&&(delete s.BaseTextureCache[this.source._pixiId],delete this.source._pixiId),o.prototype.destroy.call(this)},i.fromVideo=function(t,e){t._pixiId||(t._pixiId="video_"+s.uid());var r=s.BaseTextureCache[t._pixiId];return r||(r=new i(t,e),s.BaseTextureCache[t._pixiId]=r),r},i.fromUrl=function(t,e){var r=document.createElement("video");if(Array.isArray(t))for(var o=0;othis._maxElapsedMS&&(e=this._maxElapsedMS),this.deltaTime=e*n.TARGET_FPMS*this.speed,this._emitter.emit(s,this.deltaTime),this.lastTime=t},e.exports=i},{"../const":38,eventemitter3:25}],96:[function(t,e,r){var i=t("./Ticker"),n=new i;n.autoStart=!0,e.exports={shared:n,Ticker:i}},{"./Ticker":95}],97:[function(t,e,r){var i=function(t){for(var e=6*t,r=new Uint16Array(e),i=0,n=0;e>i;i+=6,n+=4)r[i+0]=n+0,r[i+1]=n+1,r[i+2]=n+2,r[i+3]=n+0,r[i+4]=n+2,r[i+5]=n+3;return r};e.exports=i},{}],98:[function(t,e,r){var i=t("../const"),n=e.exports={_uid:0,_saidHello:!1,EventEmitter:t("eventemitter3"),pluginTarget:t("./pluginTarget"),async:t("async"),uid:function(){return++n._uid},hex2rgb:function(t,e){return e=e||[],e[0]=(t>>16&255)/255,e[1]=(t>>8&255)/255,e[2]=(255&t)/255,e},hex2string:function(t){return t=t.toString(16),t="000000".substr(0,6-t.length)+t,"#"+t},rgb2hex:function(t){return(255*t[0]<<16)+(255*t[1]<<8)+255*t[2]},canUseNewCanvasBlendModes:function(){if("undefined"==typeof document)return!1;var t="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAQAAAABAQMAAADD8p2OAAAAA1BMVEX/",e="AAAACklEQVQI12NgAAAAAgAB4iG8MwAAAABJRU5ErkJggg==",r=new Image;r.src=t+"AP804Oa6"+e;var i=new Image;i.src=t+"/wCKxvRF"+e;var n=document.createElement("canvas");n.width=6,n.height=1;var o=n.getContext("2d");o.globalCompositeOperation="multiply",o.drawImage(r,0,0),o.drawImage(i,2,0);var s=o.getImageData(2,0,1,1).data;return 255===s[0]&&0===s[1]&&0===s[2]},getNextPowerOfTwo:function(t){if(t>0&&0===(t&t-1))return t;for(var e=1;t>e;)e<<=1;return e},isPowerOfTwo:function(t,e){return t>0&&0===(t&t-1)&&e>0&&0===(e&e-1)},getResolutionOfUrl:function(t){var e=i.RETINA_PREFIX.exec(t);return e?parseFloat(e[1]):1},sayHello:function(t){if(!n._saidHello){if(navigator.userAgent.toLowerCase().indexOf("chrome")>-1){var e=["\n %c %c %c Pixi.js "+i.VERSION+" - ✰ "+t+" ✰ %c %c http://www.pixijs.com/ %c %c ♥%c♥%c♥ \n\n","background: #ff66a5; padding:5px 0;","background: #ff66a5; padding:5px 0;","color: #ff66a5; background: #030307; padding:5px 0;","background: #ff66a5; padding:5px 0;","background: #ffc3dc; padding:5px 0;","background: #ff66a5; padding:5px 0;","color: #ff2424; background: #fff; padding:5px 0;","color: #ff2424; background: #fff; padding:5px 0;","color: #ff2424; background: #fff; padding:5px 0;"];window.console.log.apply(console,e)}else window.console&&window.console.log("Pixi.js "+i.VERSION+" - "+t+" - http://www.pixijs.com/");n._saidHello=!0}},isWebGLSupported:function(){var t={stencil:!0};try{if(!window.WebGLRenderingContext)return!1;var e=document.createElement("canvas"),r=e.getContext("webgl",t)||e.getContext("experimental-webgl",t);return!(!r||!r.getContextAttributes().stencil)}catch(i){return!1}},sign:function(t){return t?0>t?-1:1:0},removeItems:function(t,e,r){var i=t.length;if(!(e>=i||0===r)){r=e+r>i?i-e:r;for(var n=e,o=i-r;o>n;++n)t[n]=t[n+r];t.length=o}},TextureCache:{},BaseTextureCache:{}}},{"../const":38,"./pluginTarget":99,async:16,eventemitter3:25}],99:[function(t,e,r){function i(t){t.__plugins={},t.registerPlugin=function(e,r){t.__plugins[e]=r},t.prototype.initPlugins=function(){this.plugins=this.plugins||{};for(var e in t.__plugins)this.plugins[e]=new t.__plugins[e](this)},t.prototype.destroyPlugins=function(){for(var t in this.plugins)this.plugins[t].destroy(),this.plugins[t]=null;this.plugins=null}}e.exports={mixin:function(t){i(t)}}},{}],100:[function(t,e,r){var i=t("./core"),n=t("./mesh"),o=t("./extras"),s=t("./filters");i.SpriteBatch=function(){throw new ReferenceError("SpriteBatch does not exist any more, please use the new ParticleContainer instead.")},i.AssetLoader=function(){throw new ReferenceError("The loader system was overhauled in pixi v3, please see the new PIXI.loaders.Loader class.")},Object.defineProperties(i,{Stage:{get:function(){return console.warn("You do not need to use a PIXI Stage any more, you can simply render any container."),i.Container}},DisplayObjectContainer:{get:function(){return console.warn("DisplayObjectContainer has been shortened to Container, please use Container from now on."),i.Container}},Strip:{get:function(){return console.warn("The Strip class has been renamed to Mesh and moved to mesh.Mesh, please use mesh.Mesh from now on."),n.Mesh}},Rope:{get:function(){return console.warn("The Rope class has been moved to mesh.Rope, please use mesh.Rope from now on."),n.Rope}},MovieClip:{get:function(){return console.warn("The MovieClip class has been moved to extras.MovieClip, please use extras.MovieClip from now on."),o.MovieClip}},TilingSprite:{get:function(){return console.warn("The TilingSprite class has been moved to extras.TilingSprite, please use extras.TilingSprite from now on."),o.TilingSprite}},BitmapText:{get:function(){return console.warn("The BitmapText class has been moved to extras.BitmapText, please use extras.BitmapText from now on."),o.BitmapText}},blendModes:{get:function(){return console.warn("The blendModes has been moved to BLEND_MODES, please use BLEND_MODES from now on."),i.BLEND_MODES}},scaleModes:{get:function(){return console.warn("The scaleModes has been moved to SCALE_MODES, please use SCALE_MODES from now on."),i.SCALE_MODES}},BaseTextureCache:{get:function(){return console.warn("The BaseTextureCache class has been moved to utils.BaseTextureCache, please use utils.BaseTextureCache from now on."),i.utils.BaseTextureCache}},TextureCache:{get:function(){return console.warn("The TextureCache class has been moved to utils.TextureCache, please use utils.TextureCache from now on."),i.utils.TextureCache}},math:{get:function(){return console.warn("The math namespace is deprecated, please access members already accessible on PIXI."),i}}}),i.Sprite.prototype.setTexture=function(t){this.texture=t,console.warn("setTexture is now deprecated, please use the texture property, e.g : sprite.texture = texture;")},o.BitmapText.prototype.setText=function(t){this.text=t,console.warn("setText is now deprecated, please use the text property, e.g : myBitmapText.text = 'my text';")},i.Text.prototype.setText=function(t){this.text=t,console.warn("setText is now deprecated, please use the text property, e.g : myText.text = 'my text';")},i.Text.prototype.setStyle=function(t){this.style=t,console.warn("setStyle is now deprecated, please use the style property, e.g : myText.style = style;")},i.Texture.prototype.setFrame=function(t){this.frame=t,console.warn("setFrame is now deprecated, please use the frame property, e.g : myTexture.frame = frame;")},Object.defineProperties(s,{AbstractFilter:{get:function(){return console.warn("filters.AbstractFilter is an undocumented alias, please use AbstractFilter from now on."),i.AbstractFilter}},FXAAFilter:{get:function(){return console.warn("filters.FXAAFilter is an undocumented alias, please use FXAAFilter from now on."),i.FXAAFilter}},SpriteMaskFilter:{get:function(){return console.warn("filters.SpriteMaskFilter is an undocumented alias, please use SpriteMaskFilter from now on."),i.SpriteMaskFilter}}}),i.utils.uuid=function(){return console.warn("utils.uuid() is deprecated, please use utils.uid() from now on."),i.utils.uid()}},{"./core":45,"./extras":107,"./filters":124,"./mesh":149}],101:[function(t,e,r){function i(t,e){n.Container.call(this),e=e||{},this.textWidth=0,this.textHeight=0,this._glyphs=[],this._font={tint:void 0!==e.tint?e.tint:16777215,align:e.align||"left",name:null,size:0},this.font=e.font,this._text=t,this.maxWidth=0,this.maxLineHeight=0,this.dirty=!1,this.updateText()}var n=t("../core");i.prototype=Object.create(n.Container.prototype),i.prototype.constructor=i,e.exports=i,Object.defineProperties(i.prototype,{tint:{get:function(){return this._font.tint},set:function(t){this._font.tint="number"==typeof t&&t>=0?t:16777215,this.dirty=!0}},align:{get:function(){return this._font.align},set:function(t){this._font.align=t||"left",this.dirty=!0}},font:{get:function(){return this._font},set:function(t){t&&("string"==typeof t?(t=t.split(" "),this._font.name=1===t.length?t[0]:t.slice(1).join(" "),this._font.size=t.length>=2?parseInt(t[0],10):i.fonts[this._font.name].size):(this._font.name=t.name,this._font.size="number"==typeof t.size?t.size:parseInt(t.size,10)),this.dirty=!0)}},text:{get:function(){return this._text},set:function(t){t=t.toString()||" ",this._text!==t&&(this._text=t,this.dirty=!0)}}}),i.prototype.updateText=function(){for(var t=i.fonts[this._font.name],e=new n.Point,r=null,o=[],s=0,a=0,h=[],u=0,l=this._font.size/t.size,c=-1,p=0,d=0;d0&&e.x*l>this.maxWidth)n.utils.removeItems(o,c,d-c),d=c,c=-1,h.push(s),a=Math.max(a,s),u++,e.x=0,e.y+=t.lineHeight,r=null;else{var v=t.chars[f];v&&(r&&v.kerning[r]&&(e.x+=v.kerning[r]),o.push({texture:v.texture,line:u,charCode:f,position:new n.Point(e.x+v.xOffset,e.y+v.yOffset)}),s=e.x+(v.texture.width+v.xOffset),e.x+=v.xAdvance,p=Math.max(p,v.yOffset+v.texture.height),r=f)}}h.push(s),a=Math.max(a,s);var g=[];for(d=0;u>=d;d++){var m=0;"right"===this._font.align?m=a-h[d]:"center"===this._font.align&&(m=(a-h[d])/2),g.push(m)}var y=o.length,x=this.tint;for(d=0;y>d;d++){var b=this._glyphs[d];b?b.texture=o[d].texture:(b=new n.Sprite(o[d].texture),this._glyphs.push(b)),b.position.x=(o[d].position.x+g[o[d].line])*l,b.position.y=o[d].position.y*l,b.scale.x=b.scale.y=l,b.tint=x,b.parent||this.addChild(b)}for(d=y;dt&&(t+=this._textures.length),t}}}),i.prototype.stop=function(){this.playing&&(this.playing=!1,n.ticker.shared.remove(this.update,this))},i.prototype.play=function(){this.playing||(this.playing=!0,n.ticker.shared.add(this.update,this))},i.prototype.gotoAndStop=function(t){this.stop(),this._currentTime=t,this._texture=this._textures[this.currentFrame]},i.prototype.gotoAndPlay=function(t){this._currentTime=t,this.play()},i.prototype.update=function(t){var e=this.animationSpeed*t;if(null!==this._durations){var r=this._currentTime%1*this._durations[this.currentFrame];for(r+=e/60*1e3;0>r;)this._currentTime--,r+=this._durations[this.currentFrame];var i=Math.sign(this.animationSpeed*t);for(this._currentTime=Math.floor(this._currentTime);r>=this._durations[this.currentFrame];)r-=this._durations[this.currentFrame]*i,this._currentTime+=i;this._currentTime+=r/this._durations[this.currentFrame]}else this._currentTime+=e;this._currentTime<0&&!this.loop?(this.gotoAndStop(0),this.onComplete&&this.onComplete()):this._currentTime>=this._textures.length&&!this.loop?(this.gotoAndStop(this._textures.length-1),this.onComplete&&this.onComplete()):this._texture=this._textures[this.currentFrame]},i.prototype.destroy=function(){this.stop(),n.Sprite.prototype.destroy.call(this)},i.fromFrames=function(t){for(var e=[],r=0;rx?x:t,t=t>_?_:t,t=t>E?E:t,r=y,r=r>b?b:r,r=r>T?T:r,r=r>S?S:r,e=m,e=x>e?x:e,e=_>e?_:e,e=E>e?E:e,i=y,i=b>i?b:i,i=T>i?T:i,i=S>i?S:i;var w=this._bounds;return w.x=t,w.width=e-t,w.y=r,w.height=i-r,this._currentBounds=w,w},i.prototype.containsPoint=function(t){this.worldTransform.applyInverse(t,o);var e,r=this._width,i=this._height,n=-r*this.anchor.x;return o.x>n&&o.xe&&o.y 0.2) n = 65600.0; // :\n if (gray > 0.3) n = 332772.0; // *\n if (gray > 0.4) n = 15255086.0; // o\n if (gray > 0.5) n = 23385164.0; // &\n if (gray > 0.6) n = 15252014.0; // 8\n if (gray > 0.7) n = 13199452.0; // @\n if (gray > 0.8) n = 11512810.0; // #\n\n vec2 p = mod( uv / ( pixelSize * 0.5 ), 2.0) - vec2(1.0);\n col = col * character(n, p);\n\n gl_FragColor = vec4(col, 1.0);\n}\n",{dimensions:{type:"4fv",value:new Float32Array([0,0,0,0])},pixelSize:{type:"1f",value:8}})}var n=t("../../core");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i,Object.defineProperties(i.prototype,{size:{get:function(){return this.uniforms.pixelSize.value},set:function(t){this.uniforms.pixelSize.value=t}}})},{"../../core":45}],109:[function(t,e,r){function i(){n.AbstractFilter.call(this),this.blurXFilter=new o,this.blurYFilter=new s,this.defaultFilter=new n.AbstractFilter}var n=t("../../core"),o=t("../blur/BlurXFilter"),s=t("../blur/BlurYFilter");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.applyFilter=function(t,e,r){var i=t.filterManager.getRenderTarget(!0);this.defaultFilter.applyFilter(t,e,r),this.blurXFilter.applyFilter(t,e,i),t.blendModeManager.setBlendMode(n.BLEND_MODES.SCREEN),this.blurYFilter.applyFilter(t,i,r),t.blendModeManager.setBlendMode(n.BLEND_MODES.NORMAL),t.filterManager.returnRenderTarget(i)},Object.defineProperties(i.prototype,{blur:{get:function(){return this.blurXFilter.blur},set:function(t){this.blurXFilter.blur=this.blurYFilter.blur=t}},blurX:{get:function(){return this.blurXFilter.blur},set:function(t){this.blurXFilter.blur=t}},blurY:{get:function(){return this.blurYFilter.blur},set:function(t){this.blurYFilter.blur=t}}})},{"../../core":45,"../blur/BlurXFilter":112,"../blur/BlurYFilter":113}],110:[function(t,e,r){function i(t,e){n.AbstractFilter.call(this,"attribute vec2 aVertexPosition;\nattribute vec2 aTextureCoord;\nattribute vec4 aColor;\n\nuniform float strength;\nuniform float dirX;\nuniform float dirY;\nuniform mat3 projectionMatrix;\n\nvarying vec2 vTextureCoord;\nvarying vec4 vColor;\nvarying vec2 vBlurTexCoords[3];\n\nvoid main(void)\n{\n gl_Position = vec4((projectionMatrix * vec3((aVertexPosition), 1.0)).xy, 0.0, 1.0);\n vTextureCoord = aTextureCoord;\n\n vBlurTexCoords[0] = aTextureCoord + vec2( (0.004 * strength) * dirX, (0.004 * strength) * dirY );\n vBlurTexCoords[1] = aTextureCoord + vec2( (0.008 * strength) * dirX, (0.008 * strength) * dirY );\n vBlurTexCoords[2] = aTextureCoord + vec2( (0.012 * strength) * dirX, (0.012 * strength) * dirY );\n\n vColor = vec4(aColor.rgb * aColor.a, aColor.a);\n}\n","precision lowp float;\n\nvarying vec2 vTextureCoord;\nvarying vec2 vBlurTexCoords[3];\nvarying vec4 vColor;\n\nuniform sampler2D uSampler;\n\nvoid main(void)\n{\n gl_FragColor = vec4(0.0);\n\n gl_FragColor += texture2D(uSampler, vTextureCoord ) * 0.3989422804014327;\n gl_FragColor += texture2D(uSampler, vBlurTexCoords[ 0]) * 0.2419707245191454;\n gl_FragColor += texture2D(uSampler, vBlurTexCoords[ 1]) * 0.05399096651318985;\n gl_FragColor += texture2D(uSampler, vBlurTexCoords[ 2]) * 0.004431848411938341;\n}\n",{strength:{type:"1f",value:1},dirX:{type:"1f",value:t||0},dirY:{type:"1f",value:e||0}}),this.defaultFilter=new n.AbstractFilter,this.passes=1,this.dirX=t||0,this.dirY=e||0,this.strength=4}var n=t("../../core");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.applyFilter=function(t,e,r,i){var n=this.getShader(t);if(this.uniforms.strength.value=this.strength/4/this.passes*(e.frame.width/e.size.width),1===this.passes)t.filterManager.applyFilter(n,e,r,i);else{var o=t.filterManager.getRenderTarget(!0);t.filterManager.applyFilter(n,e,o,i);for(var s=0;s>16&255)/255,s=(r>>8&255)/255,a=(255&r)/255,h=(i>>16&255)/255,u=(i>>8&255)/255,l=(255&i)/255,c=[.3,.59,.11,0,0,o,s,a,t,0,h,u,l,e,0,o-h,s-u,a-l,0,0];this._loadMatrix(c,n)},i.prototype.night=function(t,e){t=t||.1;var r=[-2*t,-t,0,0,0,-t,0,t,0,0,0,t,2*t,0,0,0,0,0,1,0];this._loadMatrix(r,e)},i.prototype.predator=function(t,e){var r=[11.224130630493164*t,-4.794486999511719*t,-2.8746118545532227*t,0*t,.40342438220977783*t,-3.6330697536468506*t,9.193157196044922*t,-2.951810836791992*t,0*t,-1.316135048866272*t,-3.2184197902679443*t,-4.2375030517578125*t,7.476448059082031*t,0*t,.8044459223747253*t,0,0,0,1,0];this._loadMatrix(r,e)},i.prototype.lsd=function(t){var e=[2,-.4,.5,0,0,-.5,2,-.4,0,0,-.4,-.5,3,0,0,0,0,0,1,0];this._loadMatrix(e,t)},i.prototype.reset=function(){var t=[1,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,1,0];this._loadMatrix(t,!1)},Object.defineProperties(i.prototype,{matrix:{get:function(){return this.uniforms.m.value},set:function(t){this.uniforms.m.value=t}}})},{"../../core":45}],116:[function(t,e,r){function i(){n.AbstractFilter.call(this,null,"precision mediump float;\n\nvarying vec2 vTextureCoord;\n\nuniform sampler2D uSampler;\nuniform float step;\n\nvoid main(void)\n{\n vec4 color = texture2D(uSampler, vTextureCoord);\n\n color = floor(color * step) / step;\n\n gl_FragColor = color;\n}\n",{step:{type:"1f",value:5}})}var n=t("../../core");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i,Object.defineProperties(i.prototype,{step:{get:function(){return this.uniforms.step.value},set:function(t){this.uniforms.step.value=t}}})},{"../../core":45}],117:[function(t,e,r){function i(t,e,r){n.AbstractFilter.call(this,null,"precision mediump float;\n\nvarying mediump vec2 vTextureCoord;\n\nuniform sampler2D uSampler;\nuniform vec2 texelSize;\nuniform float matrix[9];\n\nvoid main(void)\n{\n vec4 c11 = texture2D(uSampler, vTextureCoord - texelSize); // top left\n vec4 c12 = texture2D(uSampler, vec2(vTextureCoord.x, vTextureCoord.y - texelSize.y)); // top center\n vec4 c13 = texture2D(uSampler, vec2(vTextureCoord.x + texelSize.x, vTextureCoord.y - texelSize.y)); // top right\n\n vec4 c21 = texture2D(uSampler, vec2(vTextureCoord.x - texelSize.x, vTextureCoord.y)); // mid left\n vec4 c22 = texture2D(uSampler, vTextureCoord); // mid center\n vec4 c23 = texture2D(uSampler, vec2(vTextureCoord.x + texelSize.x, vTextureCoord.y)); // mid right\n\n vec4 c31 = texture2D(uSampler, vec2(vTextureCoord.x - texelSize.x, vTextureCoord.y + texelSize.y)); // bottom left\n vec4 c32 = texture2D(uSampler, vec2(vTextureCoord.x, vTextureCoord.y + texelSize.y)); // bottom center\n vec4 c33 = texture2D(uSampler, vTextureCoord + texelSize); // bottom right\n\n gl_FragColor =\n c11 * matrix[0] + c12 * matrix[1] + c13 * matrix[2] +\n c21 * matrix[3] + c22 * matrix[4] + c23 * matrix[5] +\n c31 * matrix[6] + c32 * matrix[7] + c33 * matrix[8];\n\n gl_FragColor.a = c22.a;\n}\n",{matrix:{type:"1fv",value:new Float32Array(t)},texelSize:{type:"v2",value:{x:1/e,y:1/r}}})}var n=t("../../core");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i,Object.defineProperties(i.prototype,{matrix:{get:function(){return this.uniforms.matrix.value},set:function(t){this.uniforms.matrix.value=new Float32Array(t)}},width:{get:function(){return 1/this.uniforms.texelSize.value.x},set:function(t){this.uniforms.texelSize.value.x=1/t}},height:{get:function(){return 1/this.uniforms.texelSize.value.y},set:function(t){this.uniforms.texelSize.value.y=1/t}}})},{"../../core":45 -}],118:[function(t,e,r){function i(){n.AbstractFilter.call(this,null,"precision mediump float;\n\nvarying vec2 vTextureCoord;\n\nuniform sampler2D uSampler;\n\nvoid main(void)\n{\n float lum = length(texture2D(uSampler, vTextureCoord.xy).rgb);\n\n gl_FragColor = vec4(1.0, 1.0, 1.0, 1.0);\n\n if (lum < 1.00)\n {\n if (mod(gl_FragCoord.x + gl_FragCoord.y, 10.0) == 0.0)\n {\n gl_FragColor = vec4(0.0, 0.0, 0.0, 1.0);\n }\n }\n\n if (lum < 0.75)\n {\n if (mod(gl_FragCoord.x - gl_FragCoord.y, 10.0) == 0.0)\n {\n gl_FragColor = vec4(0.0, 0.0, 0.0, 1.0);\n }\n }\n\n if (lum < 0.50)\n {\n if (mod(gl_FragCoord.x + gl_FragCoord.y - 5.0, 10.0) == 0.0)\n {\n gl_FragColor = vec4(0.0, 0.0, 0.0, 1.0);\n }\n }\n\n if (lum < 0.3)\n {\n if (mod(gl_FragCoord.x - gl_FragCoord.y - 5.0, 10.0) == 0.0)\n {\n gl_FragColor = vec4(0.0, 0.0, 0.0, 1.0);\n }\n }\n}\n")}var n=t("../../core");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i},{"../../core":45}],119:[function(t,e,r){function i(t,e){var r=new n.Matrix;t.renderable=!1,n.AbstractFilter.call(this,"attribute vec2 aVertexPosition;\nattribute vec2 aTextureCoord;\nattribute vec4 aColor;\n\nuniform mat3 projectionMatrix;\nuniform mat3 otherMatrix;\n\nvarying vec2 vMapCoord;\nvarying vec2 vTextureCoord;\nvarying vec4 vColor;\n\nvoid main(void)\n{\n gl_Position = vec4((projectionMatrix * vec3(aVertexPosition, 1.0)).xy, 0.0, 1.0);\n vTextureCoord = aTextureCoord;\n vMapCoord = ( otherMatrix * vec3( aTextureCoord, 1.0) ).xy;\n vColor = vec4(aColor.rgb * aColor.a, aColor.a);\n}\n","precision mediump float;\n\nvarying vec2 vMapCoord;\nvarying vec2 vTextureCoord;\nvarying vec4 vColor;\n\nuniform vec2 scale;\n\nuniform sampler2D uSampler;\nuniform sampler2D mapSampler;\n\nvoid main(void)\n{\n vec4 map = texture2D(mapSampler, vMapCoord);\n\n map -= 0.5;\n map.xy *= scale;\n\n gl_FragColor = texture2D(uSampler, vec2(vTextureCoord.x + map.x, vTextureCoord.y + map.y));\n}\n",{mapSampler:{type:"sampler2D",value:t.texture},otherMatrix:{type:"mat3",value:r.toArray(!0)},scale:{type:"v2",value:{x:1,y:1}}}),this.maskSprite=t,this.maskMatrix=r,(null===e||void 0===e)&&(e=20),this.scale=new n.Point(e,e)}var n=t("../../core");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.applyFilter=function(t,e,r){var i=t.filterManager;i.calculateMappedMatrix(e.frame,this.maskSprite,this.maskMatrix),this.uniforms.otherMatrix.value=this.maskMatrix.toArray(!0),this.uniforms.scale.value.x=this.scale.x*(1/e.frame.width),this.uniforms.scale.value.y=this.scale.y*(1/e.frame.height);var n=this.getShader(t);i.applyFilter(n,e,r)},Object.defineProperties(i.prototype,{map:{get:function(){return this.uniforms.mapSampler.value},set:function(t){this.uniforms.mapSampler.value=t}}})},{"../../core":45}],120:[function(t,e,r){function i(){n.AbstractFilter.call(this,null,"precision mediump float;\n\nvarying vec2 vTextureCoord;\nvarying vec4 vColor;\n\nuniform vec4 dimensions;\nuniform sampler2D uSampler;\n\nuniform float angle;\nuniform float scale;\n\nfloat pattern()\n{\n float s = sin(angle), c = cos(angle);\n vec2 tex = vTextureCoord * dimensions.xy;\n vec2 point = vec2(\n c * tex.x - s * tex.y,\n s * tex.x + c * tex.y\n ) * scale;\n return (sin(point.x) * sin(point.y)) * 4.0;\n}\n\nvoid main()\n{\n vec4 color = texture2D(uSampler, vTextureCoord);\n float average = (color.r + color.g + color.b) / 3.0;\n gl_FragColor = vec4(vec3(average * 10.0 - 5.0 + pattern()), color.a);\n}\n",{scale:{type:"1f",value:1},angle:{type:"1f",value:5},dimensions:{type:"4fv",value:[0,0,0,0]}})}var n=t("../../core");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i,Object.defineProperties(i.prototype,{scale:{get:function(){return this.uniforms.scale.value},set:function(t){this.uniforms.scale.value=t}},angle:{get:function(){return this.uniforms.angle.value},set:function(t){this.uniforms.angle.value=t}}})},{"../../core":45}],121:[function(t,e,r){function i(){n.AbstractFilter.call(this,"attribute vec2 aVertexPosition;\nattribute vec2 aTextureCoord;\nattribute vec4 aColor;\n\nuniform float strength;\nuniform vec2 offset;\n\nuniform mat3 projectionMatrix;\n\nvarying vec2 vTextureCoord;\nvarying vec4 vColor;\nvarying vec2 vBlurTexCoords[6];\n\nvoid main(void)\n{\n gl_Position = vec4((projectionMatrix * vec3((aVertexPosition+offset), 1.0)).xy, 0.0, 1.0);\n vTextureCoord = aTextureCoord;\n\n vBlurTexCoords[ 0] = aTextureCoord + vec2(0.0, -0.012 * strength);\n vBlurTexCoords[ 1] = aTextureCoord + vec2(0.0, -0.008 * strength);\n vBlurTexCoords[ 2] = aTextureCoord + vec2(0.0, -0.004 * strength);\n vBlurTexCoords[ 3] = aTextureCoord + vec2(0.0, 0.004 * strength);\n vBlurTexCoords[ 4] = aTextureCoord + vec2(0.0, 0.008 * strength);\n vBlurTexCoords[ 5] = aTextureCoord + vec2(0.0, 0.012 * strength);\n\n vColor = vec4(aColor.rgb * aColor.a, aColor.a);\n}\n","precision lowp float;\n\nvarying vec2 vTextureCoord;\nvarying vec2 vBlurTexCoords[6];\nvarying vec4 vColor;\n\nuniform vec3 color;\nuniform float alpha;\n\nuniform sampler2D uSampler;\n\nvoid main(void)\n{\n vec4 sum = vec4(0.0);\n\n sum += texture2D(uSampler, vBlurTexCoords[ 0])*0.004431848411938341;\n sum += texture2D(uSampler, vBlurTexCoords[ 1])*0.05399096651318985;\n sum += texture2D(uSampler, vBlurTexCoords[ 2])*0.2419707245191454;\n sum += texture2D(uSampler, vTextureCoord )*0.3989422804014327;\n sum += texture2D(uSampler, vBlurTexCoords[ 3])*0.2419707245191454;\n sum += texture2D(uSampler, vBlurTexCoords[ 4])*0.05399096651318985;\n sum += texture2D(uSampler, vBlurTexCoords[ 5])*0.004431848411938341;\n\n gl_FragColor = vec4( color.rgb * sum.a * alpha, sum.a * alpha );\n}\n",{blur:{type:"1f",value:1/512},color:{type:"c",value:[0,0,0]},alpha:{type:"1f",value:.7},offset:{type:"2f",value:[5,5]},strength:{type:"1f",value:1}}),this.passes=1,this.strength=4}var n=t("../../core");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.applyFilter=function(t,e,r,i){var n=this.getShader(t);if(this.uniforms.strength.value=this.strength/4/this.passes*(e.frame.height/e.size.height),1===this.passes)t.filterManager.applyFilter(n,e,r,i);else{for(var o=t.filterManager.getRenderTarget(!0),s=e,a=o,h=0;h= (time - params.z)) )\n {\n float diff = (dist - time);\n float powDiff = 1.0 - pow(abs(diff*params.x), params.y);\n\n float diffTime = diff * powDiff;\n vec2 diffUV = normalize(uv - center);\n texCoord = uv + (diffUV * diffTime);\n }\n\n gl_FragColor = texture2D(uSampler, texCoord);\n}\n",{center:{type:"v2",value:{x:.5,y:.5}},params:{type:"v3",value:{x:10,y:.8,z:.1}},time:{type:"1f",value:0}})}var n=t("../../core");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i,Object.defineProperties(i.prototype,{center:{get:function(){return this.uniforms.center.value},set:function(t){this.uniforms.center.value=t}},params:{get:function(){return this.uniforms.params.value},set:function(t){this.uniforms.params.value=t}},time:{get:function(){return this.uniforms.time.value},set:function(t){this.uniforms.time.value=t}}})},{"../../core":45}],131:[function(t,e,r){function i(){n.AbstractFilter.call(this,null,"precision mediump float;\n\nvarying vec2 vTextureCoord;\n\nuniform sampler2D uSampler;\nuniform float blur;\nuniform float gradientBlur;\nuniform vec2 start;\nuniform vec2 end;\nuniform vec2 delta;\nuniform vec2 texSize;\n\nfloat random(vec3 scale, float seed)\n{\n return fract(sin(dot(gl_FragCoord.xyz + seed, scale)) * 43758.5453 + seed);\n}\n\nvoid main(void)\n{\n vec4 color = vec4(0.0);\n float total = 0.0;\n\n float offset = random(vec3(12.9898, 78.233, 151.7182), 0.0);\n vec2 normal = normalize(vec2(start.y - end.y, end.x - start.x));\n float radius = smoothstep(0.0, 1.0, abs(dot(vTextureCoord * texSize - start, normal)) / gradientBlur) * blur;\n\n for (float t = -30.0; t <= 30.0; t++)\n {\n float percent = (t + offset - 0.5) / 30.0;\n float weight = 1.0 - abs(percent);\n vec4 sample = texture2D(uSampler, vTextureCoord + delta / texSize * percent * radius);\n sample.rgb *= sample.a;\n color += sample * weight;\n total += weight;\n }\n\n gl_FragColor = color / total;\n gl_FragColor.rgb /= gl_FragColor.a + 0.00001;\n}\n",{blur:{type:"1f",value:100},gradientBlur:{type:"1f",value:600},start:{type:"v2",value:{x:0,y:window.innerHeight/2}},end:{type:"v2",value:{x:600,y:window.innerHeight/2}},delta:{type:"v2",value:{x:30,y:30}},texSize:{type:"v2",value:{x:window.innerWidth,y:window.innerHeight}}}),this.updateDelta()}var n=t("../../core");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.updateDelta=function(){this.uniforms.delta.value.x=0,this.uniforms.delta.value.y=0},Object.defineProperties(i.prototype,{blur:{get:function(){return this.uniforms.blur.value},set:function(t){this.uniforms.blur.value=t}},gradientBlur:{get:function(){return this.uniforms.gradientBlur.value},set:function(t){this.uniforms.gradientBlur.value=t}},start:{get:function(){return this.uniforms.start.value},set:function(t){this.uniforms.start.value=t,this.updateDelta()}},end:{get:function(){return this.uniforms.end.value},set:function(t){this.uniforms.end.value=t,this.updateDelta()}}})},{"../../core":45}],132:[function(t,e,r){function i(){n.AbstractFilter.call(this),this.tiltShiftXFilter=new o,this.tiltShiftYFilter=new s}var n=t("../../core"),o=t("./TiltShiftXFilter"),s=t("./TiltShiftYFilter");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.applyFilter=function(t,e,r){var i=t.filterManager.getRenderTarget(!0);this.tiltShiftXFilter.applyFilter(t,e,i),this.tiltShiftYFilter.applyFilter(t,i,r),t.filterManager.returnRenderTarget(i)},Object.defineProperties(i.prototype,{blur:{get:function(){return this.tiltShiftXFilter.blur},set:function(t){this.tiltShiftXFilter.blur=this.tiltShiftYFilter.blur=t}},gradientBlur:{get:function(){return this.tiltShiftXFilter.gradientBlur},set:function(t){this.tiltShiftXFilter.gradientBlur=this.tiltShiftYFilter.gradientBlur=t}},start:{get:function(){return this.tiltShiftXFilter.start},set:function(t){this.tiltShiftXFilter.start=this.tiltShiftYFilter.start=t}},end:{get:function(){return this.tiltShiftXFilter.end},set:function(t){this.tiltShiftXFilter.end=this.tiltShiftYFilter.end=t}}})},{"../../core":45,"./TiltShiftXFilter":133,"./TiltShiftYFilter":134}],133:[function(t,e,r){function i(){n.call(this)}var n=t("./TiltShiftAxisFilter");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.updateDelta=function(){var t=this.uniforms.end.value.x-this.uniforms.start.value.x,e=this.uniforms.end.value.y-this.uniforms.start.value.y,r=Math.sqrt(t*t+e*e);this.uniforms.delta.value.x=t/r,this.uniforms.delta.value.y=e/r}},{"./TiltShiftAxisFilter":131}],134:[function(t,e,r){function i(){n.call(this)}var n=t("./TiltShiftAxisFilter");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.updateDelta=function(){var t=this.uniforms.end.value.x-this.uniforms.start.value.x,e=this.uniforms.end.value.y-this.uniforms.start.value.y,r=Math.sqrt(t*t+e*e);this.uniforms.delta.value.x=-e/r,this.uniforms.delta.value.y=t/r}},{"./TiltShiftAxisFilter":131}],135:[function(t,e,r){function i(){n.AbstractFilter.call(this,null,"precision mediump float;\n\nvarying vec2 vTextureCoord;\n\nuniform sampler2D uSampler;\nuniform float radius;\nuniform float angle;\nuniform vec2 offset;\n\nvoid main(void)\n{\n vec2 coord = vTextureCoord - offset;\n float dist = length(coord);\n\n if (dist < radius)\n {\n float ratio = (radius - dist) / radius;\n float angleMod = ratio * ratio * angle;\n float s = sin(angleMod);\n float c = cos(angleMod);\n coord = vec2(coord.x * c - coord.y * s, coord.x * s + coord.y * c);\n }\n\n gl_FragColor = texture2D(uSampler, coord+offset);\n}\n",{radius:{type:"1f",value:.5},angle:{type:"1f",value:5},offset:{type:"v2",value:{x:.5,y:.5}}})}var n=t("../../core");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i,Object.defineProperties(i.prototype,{offset:{get:function(){return this.uniforms.offset.value},set:function(t){this.uniforms.offset.value=t}},radius:{get:function(){return this.uniforms.radius.value},set:function(t){this.uniforms.radius.value=t}},angle:{get:function(){return this.uniforms.angle.value},set:function(t){this.uniforms.angle.value=t}}})},{"../../core":45}],136:[function(t,e,r){(function(r){t("./polyfill");var i=e.exports=t("./core");i.extras=t("./extras"),i.filters=t("./filters"),i.interaction=t("./interaction"),i.loaders=t("./loaders"),i.mesh=t("./mesh"),i.accessibility=t("./accessibility"),i.loader=new i.loaders.Loader,Object.assign(i,t("./deprecation")),r.PIXI=i}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{"./accessibility":37,"./core":45,"./deprecation":100,"./extras":107,"./filters":124,"./interaction":139,"./loaders":142,"./mesh":149,"./polyfill":154}],137:[function(t,e,r){function i(){this.global=new n.Point,this.target=null,this.originalEvent=null}var n=t("../core");i.prototype.constructor=i,e.exports=i,i.prototype.getLocalPosition=function(t,e,r){return t.worldTransform.applyInverse(r||this.global,e)}},{"../core":45}],138:[function(t,e,r){function i(t,e){e=e||{},this.renderer=t,this.autoPreventDefault=void 0!==e.autoPreventDefault?e.autoPreventDefault:!0,this.interactionFrequency=e.interactionFrequency||10,this.mouse=new o,this.eventData={stopped:!1,target:null,type:null,data:this.mouse,stopPropagation:function(){this.stopped=!0}},this.interactiveDataPool=[],this.interactionDOMElement=null,this.eventsAdded=!1,this.onMouseUp=this.onMouseUp.bind(this),this.processMouseUp=this.processMouseUp.bind(this),this.onMouseDown=this.onMouseDown.bind(this),this.processMouseDown=this.processMouseDown.bind(this),this.onMouseMove=this.onMouseMove.bind(this),this.processMouseMove=this.processMouseMove.bind(this),this.onMouseOut=this.onMouseOut.bind(this),this.processMouseOverOut=this.processMouseOverOut.bind(this),this.onTouchStart=this.onTouchStart.bind(this),this.processTouchStart=this.processTouchStart.bind(this),this.onTouchEnd=this.onTouchEnd.bind(this),this.processTouchEnd=this.processTouchEnd.bind(this),this.onTouchMove=this.onTouchMove.bind(this),this.processTouchMove=this.processTouchMove.bind(this),this.last=0,this.currentCursorStyle="inherit",this._tempPoint=new n.Point,this.resolution=1,this.setTargetElement(this.renderer.view,this.renderer.resolution)}var n=t("../core"),o=t("./InteractionData");Object.assign(n.DisplayObject.prototype,t("./interactiveTarget")),i.prototype.constructor=i,e.exports=i,i.prototype.setTargetElement=function(t,e){this.removeEvents(),this.interactionDOMElement=t,this.resolution=e||1,this.addEvents()},i.prototype.addEvents=function(){this.interactionDOMElement&&(n.ticker.shared.add(this.update,this),window.navigator.msPointerEnabled&&(this.interactionDOMElement.style["-ms-content-zooming"]="none",this.interactionDOMElement.style["-ms-touch-action"]="none"),window.document.addEventListener("mousemove",this.onMouseMove,!0),this.interactionDOMElement.addEventListener("mousedown",this.onMouseDown,!0),this.interactionDOMElement.addEventListener("mouseout",this.onMouseOut,!0),this.interactionDOMElement.addEventListener("touchstart",this.onTouchStart,!0),this.interactionDOMElement.addEventListener("touchend",this.onTouchEnd,!0),this.interactionDOMElement.addEventListener("touchmove",this.onTouchMove,!0),window.addEventListener("mouseup",this.onMouseUp,!0),this.eventsAdded=!0)},i.prototype.removeEvents=function(){this.interactionDOMElement&&(n.ticker.shared.remove(this.update),window.navigator.msPointerEnabled&&(this.interactionDOMElement.style["-ms-content-zooming"]="",this.interactionDOMElement.style["-ms-touch-action"]=""),window.document.removeEventListener("mousemove",this.onMouseMove,!0),this.interactionDOMElement.removeEventListener("mousedown",this.onMouseDown,!0),this.interactionDOMElement.removeEventListener("mouseout",this.onMouseOut,!0),this.interactionDOMElement.removeEventListener("touchstart",this.onTouchStart,!0),this.interactionDOMElement.removeEventListener("touchend",this.onTouchEnd,!0),this.interactionDOMElement.removeEventListener("touchmove",this.onTouchMove,!0),this.interactionDOMElement=null,window.removeEventListener("mouseup",this.onMouseUp,!0),this.eventsAdded=!1)},i.prototype.update=function(t){if(this._deltaTime+=t,!(this._deltaTime=0;h--)this.processInteractive(t,a[h],r,i,s)&&(o=!0,s=!1,a[h].interactive&&(i=!1));return n&&(i&&!o&&(e.hitArea?(e.worldTransform.applyInverse(t,this._tempPoint),o=e.hitArea.contains(this._tempPoint.x,this._tempPoint.y)):e.containsPoint&&(o=e.containsPoint(t))),e.interactive&&r(e,o)),o},i.prototype.onMouseDown=function(t){this.mouse.originalEvent=t,this.eventData.data=this.mouse,this.eventData.stopped=!1,this.mapPositionToPoint(this.mouse.global,t.clientX,t.clientY),this.autoPreventDefault&&this.mouse.originalEvent.preventDefault(),this.processInteractive(this.mouse.global,this.renderer._lastObjectRendered,this.processMouseDown,!0)},i.prototype.processMouseDown=function(t,e){var r=this.mouse.originalEvent,i=2===r.button||3===r.which;e&&(t[i?"_isRightDown":"_isLeftDown"]=!0,this.dispatchEvent(t,i?"rightdown":"mousedown",this.eventData))},i.prototype.onMouseUp=function(t){this.mouse.originalEvent=t,this.eventData.data=this.mouse,this.eventData.stopped=!1,this.mapPositionToPoint(this.mouse.global,t.clientX,t.clientY),this.processInteractive(this.mouse.global,this.renderer._lastObjectRendered,this.processMouseUp,!0)},i.prototype.processMouseUp=function(t,e){var r=this.mouse.originalEvent,i=2===r.button||3===r.which,n=i?"_isRightDown":"_isLeftDown";e?(this.dispatchEvent(t,i?"rightup":"mouseup",this.eventData),t[n]&&(t[n]=!1,this.dispatchEvent(t,i?"rightclick":"click",this.eventData))):t[n]&&(t[n]=!1,this.dispatchEvent(t,i?"rightupoutside":"mouseupoutside",this.eventData))},i.prototype.onMouseMove=function(t){this.mouse.originalEvent=t,this.eventData.data=this.mouse,this.eventData.stopped=!1,this.mapPositionToPoint(this.mouse.global,t.clientX,t.clientY),this.didMove=!0,this.cursor="inherit",this.processInteractive(this.mouse.global,this.renderer._lastObjectRendered,this.processMouseMove,!0),this.currentCursorStyle!==this.cursor&&(this.currentCursorStyle=this.cursor,this.interactionDOMElement.style.cursor=this.cursor)},i.prototype.processMouseMove=function(t,e){this.dispatchEvent(t,"mousemove",this.eventData),this.processMouseOverOut(t,e)},i.prototype.onMouseOut=function(t){this.mouse.originalEvent=t,this.eventData.stopped=!1,this.mapPositionToPoint(this.mouse.global,t.clientX,t.clientY),this.interactionDOMElement.style.cursor="inherit",this.mapPositionToPoint(this.mouse.global,t.clientX,t.clientY),this.processInteractive(this.mouse.global,this.renderer._lastObjectRendered,this.processMouseOverOut,!1)},i.prototype.processMouseOverOut=function(t,e){e?(t._over||(t._over=!0,this.dispatchEvent(t,"mouseover",this.eventData)),t.buttonMode&&(this.cursor=t.defaultCursor)):t._over&&(t._over=!1,this.dispatchEvent(t,"mouseout",this.eventData))},i.prototype.onTouchStart=function(t){this.autoPreventDefault&&t.preventDefault();for(var e=t.changedTouches,r=e.length,i=0;r>i;i++){var n=e[i],o=this.getTouchData(n);o.originalEvent=t,this.eventData.data=o,this.eventData.stopped=!1,this.processInteractive(o.global,this.renderer._lastObjectRendered,this.processTouchStart,!0),this.returnTouchData(o)}},i.prototype.processTouchStart=function(t,e){e&&(t._touchDown=!0,this.dispatchEvent(t,"touchstart",this.eventData))},i.prototype.onTouchEnd=function(t){this.autoPreventDefault&&t.preventDefault();for(var e=t.changedTouches,r=e.length,i=0;r>i;i++){var n=e[i],o=this.getTouchData(n);o.originalEvent=t,this.eventData.data=o,this.eventData.stopped=!1,this.processInteractive(o.global,this.renderer._lastObjectRendered,this.processTouchEnd,!0),this.returnTouchData(o)}},i.prototype.processTouchEnd=function(t,e){e?(this.dispatchEvent(t,"touchend",this.eventData),t._touchDown&&(t._touchDown=!1,this.dispatchEvent(t,"tap",this.eventData))):t._touchDown&&(t._touchDown=!1,this.dispatchEvent(t,"touchendoutside",this.eventData))},i.prototype.onTouchMove=function(t){this.autoPreventDefault&&t.preventDefault();for(var e=t.changedTouches,r=e.length,i=0;r>i;i++){var n=e[i],o=this.getTouchData(n);o.originalEvent=t,this.eventData.data=o,this.eventData.stopped=!1,this.processInteractive(o.global,this.renderer._lastObjectRendered,this.processTouchMove,!0),this.returnTouchData(o)}},i.prototype.processTouchMove=function(t,e){e=e,this.dispatchEvent(t,"touchmove",this.eventData)},i.prototype.getTouchData=function(t){var e=this.interactiveDataPool.pop();return e||(e=new o),e.identifier=t.identifier,this.mapPositionToPoint(e.global,t.clientX,t.clientY),navigator.isCocoonJS&&(e.global.x=e.global.x/this.resolution,e.global.y=e.global.y/this.resolution),t.globalX=e.global.x,t.globalY=e.global.y,e},i.prototype.returnTouchData=function(t){ -this.interactiveDataPool.push(t)},i.prototype.destroy=function(){this.removeEvents(),this.renderer=null,this.mouse=null,this.eventData=null,this.interactiveDataPool=null,this.interactionDOMElement=null,this.onMouseUp=null,this.processMouseUp=null,this.onMouseDown=null,this.processMouseDown=null,this.onMouseMove=null,this.processMouseMove=null,this.onMouseOut=null,this.processMouseOverOut=null,this.onTouchStart=null,this.processTouchStart=null,this.onTouchEnd=null,this.processTouchEnd=null,this.onTouchMove=null,this.processTouchMove=null,this._tempPoint=null},n.WebGLRenderer.registerPlugin("interaction",i),n.CanvasRenderer.registerPlugin("interaction",i)},{"../core":45,"./InteractionData":137,"./interactiveTarget":140}],139:[function(t,e,r){e.exports={InteractionData:t("./InteractionData"),InteractionManager:t("./InteractionManager"),interactiveTarget:t("./interactiveTarget")}},{"./InteractionData":137,"./InteractionManager":138,"./interactiveTarget":140}],140:[function(t,e,r){var i={interactive:!1,buttonMode:!1,interactiveChildren:!0,defaultCursor:"pointer",_over:!1,_touchDown:!1};e.exports=i},{}],141:[function(t,e,r){function i(t,e){var r={},i=t.data.getElementsByTagName("info")[0],n=t.data.getElementsByTagName("common")[0];r.font=i.getAttribute("face"),r.size=parseInt(i.getAttribute("size"),10),r.lineHeight=parseInt(n.getAttribute("lineHeight"),10),r.chars={};for(var a=t.data.getElementsByTagName("char"),h=0;hn;n++){var o=2*n;this._renderCanvasDrawTriangle(t,e,r,o,o+2,o+4)}},i.prototype._renderCanvasTriangles=function(t){for(var e=this.vertices,r=this.uvs,i=this.indices,n=i.length,o=0;n>o;o+=3){var s=2*i[o],a=2*i[o+1],h=2*i[o+2];this._renderCanvasDrawTriangle(t,e,r,s,a,h)}},i.prototype._renderCanvasDrawTriangle=function(t,e,r,i,n,o){var s=this._texture.baseTexture.source,a=this._texture.baseTexture.width,h=this._texture.baseTexture.height,u=e[i],l=e[n],c=e[o],p=e[i+1],d=e[n+1],f=e[o+1],v=r[i]*a,g=r[n]*a,m=r[o]*a,y=r[i+1]*h,x=r[n+1]*h,b=r[o+1]*h;if(this.canvasPadding>0){var _=this.canvasPadding/this.worldTransform.a,T=this.canvasPadding/this.worldTransform.d,E=(u+l+c)/3,S=(p+d+f)/3,w=u-E,C=p-S,A=Math.sqrt(w*w+C*C);u=E+w/A*(A+_),p=S+C/A*(A+T),w=l-E,C=d-S,A=Math.sqrt(w*w+C*C),l=E+w/A*(A+_),d=S+C/A*(A+T),w=c-E,C=f-S,A=Math.sqrt(w*w+C*C),c=E+w/A*(A+_),f=S+C/A*(A+T)}t.save(),t.beginPath(),t.moveTo(u,p),t.lineTo(l,d),t.lineTo(c,f),t.closePath(),t.clip();var M=v*x+y*m+g*b-x*m-y*g-v*b,R=u*x+y*c+l*b-x*c-y*l-u*b,O=v*l+u*m+g*c-l*m-u*g-v*c,D=v*x*c+y*l*m+u*g*b-u*x*m-y*g*c-v*l*b,P=p*x+y*f+d*b-x*f-y*d-p*b,F=v*d+p*m+g*f-d*m-p*g-v*f,L=v*x*f+y*d*m+p*g*b-p*x*m-y*g*f-v*d*b;t.transform(R/M,P/M,O/M,F/M,D/M,L/M),t.drawImage(s,0,0),t.restore()},i.prototype.renderMeshFlat=function(t){var e=this.context,r=t.vertices,i=r.length/2;e.beginPath();for(var n=1;i-2>n;n++){var o=2*n,s=r[o],a=r[o+2],h=r[o+4],u=r[o+1],l=r[o+3],c=r[o+5];e.moveTo(s,u),e.lineTo(a,l),e.lineTo(h,c)}e.fillStyle="#FF0000",e.fill(),e.closePath()},i.prototype._onTextureUpdate=function(){this.updateFrame=!0},i.prototype.getBounds=function(t){if(!this._currentBounds){for(var e=t||this.worldTransform,r=e.a,i=e.b,o=e.c,s=e.d,a=e.tx,h=e.ty,u=-(1/0),l=-(1/0),c=1/0,p=1/0,d=this.vertices,f=0,v=d.length;v>f;f+=2){var g=d[f],m=d[f+1],y=r*g+o*m+a,x=s*m+i*g+h;c=c>y?y:c,p=p>x?x:p,u=y>u?y:u,l=x>l?x:l}if(c===-(1/0)||l===1/0)return n.Rectangle.EMPTY;var b=this._bounds;b.x=c,b.width=u-c,b.y=p,b.height=l-p,this._currentBounds=b}return this._currentBounds},i.prototype.containsPoint=function(t){if(!this.getBounds().contains(t.x,t.y))return!1;this.worldTransform.applyInverse(t,o);var e,r,n=this.vertices,a=s.points;if(this.drawMode===i.DRAW_MODES.TRIANGLES){var h=this.indices;for(r=this.indices.length,e=0;r>e;e+=3){var u=2*h[e],l=2*h[e+1],c=2*h[e+2];if(a[0]=n[u],a[1]=n[u+1],a[2]=n[l],a[3]=n[l+1],a[4]=n[c],a[5]=n[c+1],s.contains(o.x,o.y))return!0}}else for(r=n.length,e=0;r>e;e+=6)if(a[0]=n[e],a[1]=n[e+1],a[2]=n[e+2],a[3]=n[e+3],a[4]=n[e+4],a[5]=n[e+5],s.contains(o.x,o.y))return!0;return!1},i.DRAW_MODES={TRIANGLE_MESH:0,TRIANGLES:1}},{"../core":45}],147:[function(t,e,r){function i(t,e,r){n.call(this,t),this._ready=!0,this.segmentsX=e||10,this.segmentsY=r||10,this.drawMode=n.DRAW_MODES.TRIANGLES,this.refresh()}var n=t("./Mesh");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.refresh=function(){var t=this.segmentsX*this.segmentsY,e=[],r=[],i=[],n=[],o=this.texture,s=this.segmentsX-1,a=this.segmentsY-1,h=0,u=o.width/s,l=o.height/a;for(h=0;t>h;h++){var c=h%this.segmentsX,p=h/this.segmentsX|0;e.push(c*u,p*l),i.push(o._uvs.x0+(o._uvs.x1-o._uvs.x0)*(c/(this.segmentsX-1)),o._uvs.y0+(o._uvs.y3-o._uvs.y0)*(p/(this.segmentsY-1)))}var d=s*a;for(h=0;d>h;h++){var f=h%s,v=h/s|0,g=v*this.segmentsX+f,m=v*this.segmentsX+f+1,y=(v+1)*this.segmentsX+f,x=(v+1)*this.segmentsX+f+1;n.push(g,m,y),n.push(m,x,y)}this.vertices=new Float32Array(e),this.uvs=new Float32Array(i),this.colors=new Float32Array(r),this.indices=new Uint16Array(n)},i.prototype._onTextureUpdate=function(){n.prototype._onTextureUpdate.call(this),this._ready&&this.refresh()}},{"./Mesh":146}],148:[function(t,e,r){function i(t,e){n.call(this,t),this.points=e,this.vertices=new Float32Array(4*e.length),this.uvs=new Float32Array(4*e.length),this.colors=new Float32Array(2*e.length),this.indices=new Uint16Array(2*e.length),this._ready=!0,this.refresh()}var n=t("./Mesh"),o=t("../core");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.refresh=function(){var t=this.points;if(!(t.length<1)&&this._texture._uvs){var e=this.uvs,r=this.indices,i=this.colors,n=this._texture._uvs,s=new o.Point(n.x0,n.y0),a=new o.Point(n.x2-n.x0,n.y2-n.y0);e[0]=0+s.x,e[1]=0+s.y,e[2]=0+s.x,e[3]=1*a.y+s.y,i[0]=1,i[1]=1,r[0]=0,r[1]=1;for(var h,u,l,c=t.length,p=1;c>p;p++)h=t[p],u=4*p,l=p/(c-1),e[u]=l*a.x+s.x,e[u+1]=0+s.y,e[u+2]=l*a.x+s.x,e[u+3]=1*a.y+s.y,u=2*p,i[u]=1,i[u+1]=1,u=2*p,r[u]=u,r[u+1]=u+1;this.dirty=!0}},i.prototype._onTextureUpdate=function(){n.prototype._onTextureUpdate.call(this),this._ready&&this.refresh()},i.prototype.updateTransform=function(){var t=this.points;if(!(t.length<1)){for(var e,r,i,n,o,s,a=t[0],h=0,u=0,l=this.vertices,c=t.length,p=0;c>p;p++)r=t[p],i=4*p,e=p1&&(n=1),o=Math.sqrt(h*h+u*u),s=this._texture.height/2,h/=o,u/=o,h*=s,u*=s,l[i]=r.x+h,l[i+1]=r.y+u,l[i+2]=r.x-h,l[i+3]=r.y-u,a=r;this.containerUpdateTransform()}}},{"../core":45,"./Mesh":146}],149:[function(t,e,r){e.exports={Mesh:t("./Mesh"),Plane:t("./Plane"),Rope:t("./Rope"),MeshRenderer:t("./webgl/MeshRenderer"),MeshShader:t("./webgl/MeshShader")}},{"./Mesh":146,"./Plane":147,"./Rope":148,"./webgl/MeshRenderer":150,"./webgl/MeshShader":151}],150:[function(t,e,r){function i(t){n.ObjectRenderer.call(this,t),this.indices=new Uint16Array(15e3);for(var e=0,r=0;15e3>e;e+=6,r+=4)this.indices[e+0]=r+0,this.indices[e+1]=r+1,this.indices[e+2]=r+2,this.indices[e+3]=r+0,this.indices[e+4]=r+2,this.indices[e+5]=r+3;this.currentShader=null}var n=t("../../core"),o=t("../Mesh");i.prototype=Object.create(n.ObjectRenderer.prototype),i.prototype.constructor=i,e.exports=i,n.WebGLRenderer.registerPlugin("mesh",i),i.prototype.onContextChange=function(){},i.prototype.render=function(t){t._vertexBuffer||this._initWebGL(t);var e=this.renderer,r=e.gl,i=t._texture.baseTexture,n=t.shader,s=t.drawMode===o.DRAW_MODES.TRIANGLE_MESH?r.TRIANGLE_STRIP:r.TRIANGLES;e.blendModeManager.setBlendMode(t.blendMode),n=n?n.shaders[r.id]||n.getShader(e):e.shaderManager.plugins.meshShader,this.renderer.shaderManager.setShader(n),n.uniforms.translationMatrix.value=t.worldTransform.toArray(!0),n.uniforms.projectionMatrix.value=e.currentRenderTarget.projectionMatrix.toArray(!0),n.uniforms.alpha.value=t.worldAlpha,n.syncUniforms(),t.dirty?(t.dirty=!1,r.bindBuffer(r.ARRAY_BUFFER,t._vertexBuffer),r.bufferData(r.ARRAY_BUFFER,t.vertices,r.STATIC_DRAW),r.vertexAttribPointer(n.attributes.aVertexPosition,2,r.FLOAT,!1,0,0),r.bindBuffer(r.ARRAY_BUFFER,t._uvBuffer),r.bufferData(r.ARRAY_BUFFER,t.uvs,r.STATIC_DRAW),r.vertexAttribPointer(n.attributes.aTextureCoord,2,r.FLOAT,!1,0,0),r.activeTexture(r.TEXTURE0),i._glTextures[r.id]?r.bindTexture(r.TEXTURE_2D,i._glTextures[r.id]):this.renderer.updateTexture(i),r.bindBuffer(r.ELEMENT_ARRAY_BUFFER,t._indexBuffer),r.bufferData(r.ELEMENT_ARRAY_BUFFER,t.indices,r.STATIC_DRAW)):(r.bindBuffer(r.ARRAY_BUFFER,t._vertexBuffer),r.bufferSubData(r.ARRAY_BUFFER,0,t.vertices),r.vertexAttribPointer(n.attributes.aVertexPosition,2,r.FLOAT,!1,0,0),r.bindBuffer(r.ARRAY_BUFFER,t._uvBuffer),r.vertexAttribPointer(n.attributes.aTextureCoord,2,r.FLOAT,!1,0,0),r.activeTexture(r.TEXTURE0),i._glTextures[r.id]?r.bindTexture(r.TEXTURE_2D,i._glTextures[r.id]):this.renderer.updateTexture(i),r.bindBuffer(r.ELEMENT_ARRAY_BUFFER,t._indexBuffer),r.bufferSubData(r.ELEMENT_ARRAY_BUFFER,0,t.indices)),r.drawElements(s,t.indices.length,r.UNSIGNED_SHORT,0)},i.prototype._initWebGL=function(t){var e=this.renderer.gl;t._vertexBuffer=e.createBuffer(),t._indexBuffer=e.createBuffer(),t._uvBuffer=e.createBuffer(),e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferData(e.ARRAY_BUFFER,t.vertices,e.DYNAMIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferData(e.ARRAY_BUFFER,t.uvs,e.STATIC_DRAW),t.colors&&(t._colorBuffer=e.createBuffer(),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.bufferData(e.ARRAY_BUFFER,t.colors,e.STATIC_DRAW)),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer),e.bufferData(e.ELEMENT_ARRAY_BUFFER,t.indices,e.STATIC_DRAW)},i.prototype.flush=function(){},i.prototype.start=function(){this.currentShader=null},i.prototype.destroy=function(){n.ObjectRenderer.prototype.destroy.call(this)}},{"../../core":45,"../Mesh":146}],151:[function(t,e,r){function i(t){n.Shader.call(this,t,["precision lowp float;","attribute vec2 aVertexPosition;","attribute vec2 aTextureCoord;","uniform mat3 translationMatrix;","uniform mat3 projectionMatrix;","varying vec2 vTextureCoord;","void main(void){"," gl_Position = vec4((projectionMatrix * translationMatrix * vec3(aVertexPosition, 1.0)).xy, 0.0, 1.0);"," vTextureCoord = aTextureCoord;","}"].join("\n"),["precision lowp float;","varying vec2 vTextureCoord;","uniform float alpha;","uniform sampler2D uSampler;","void main(void){"," gl_FragColor = texture2D(uSampler, vTextureCoord) * alpha ;","}"].join("\n"),{alpha:{type:"1f",value:0},translationMatrix:{type:"mat3",value:new Float32Array(9)},projectionMatrix:{type:"mat3",value:new Float32Array(9)}},{aVertexPosition:0,aTextureCoord:0})}var n=t("../../core");i.prototype=Object.create(n.Shader.prototype),i.prototype.constructor=i,e.exports=i,n.ShaderManager.registerPlugin("meshShader",i)},{"../../core":45}],152:[function(t,e,r){Math.sign||(Math.sign=function(t){return t=+t,0===t||isNaN(t)?t:t>0?1:-1})},{}],153:[function(t,e,r){Object.assign||(Object.assign=t("object-assign"))},{"object-assign":26}],154:[function(t,e,r){t("./Object.assign"),t("./requestAnimationFrame"),t("./Math.sign")},{"./Math.sign":152,"./Object.assign":153,"./requestAnimationFrame":155}],155:[function(t,e,r){(function(t){if(Date.now&&Date.prototype.getTime||(Date.now=function(){return(new Date).getTime()}),!t.performance||!t.performance.now){var e=Date.now();t.performance||(t.performance={}),t.performance.now=function(){return Date.now()-e}}for(var r=Date.now(),i=["ms","moz","webkit","o"],n=0;ni&&(i=0),r=e,setTimeout(function(){r=Date.now(),t(performance.now())},i)}),t.cancelAnimationFrame||(t.cancelAnimationFrame=function(t){clearTimeout(t)})}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{}]},{},[136])(136)}); +!function(t){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=t();else if("function"==typeof define&&define.amd)define([],t);else{var e;e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:this,e.PIXI=t()}}(function(){var t;return function e(t,r,i){function n(s,a){if(!r[s]){if(!t[s]){var h="function"==typeof require&&require;if(!a&&h)return h(s,!0);if(o)return o(s,!0);var u=new Error("Cannot find module '"+s+"'");throw u.code="MODULE_NOT_FOUND",u}var l=r[s]={exports:{}};t[s][0].call(l.exports,function(e){var r=t[s][1][e];return n(r?r:e)},l,l.exports,e,t,r,i)}return r[s].exports}for(var o="function"==typeof require&&require,s=0;s=t.byteLength?i.bufferSubData(this.type,e,t):i.bufferData(this.type,t,this.drawType),this.data=t},n.prototype.bind=function(){var t=this.gl;t.bindBuffer(this.type,this.buffer)},n.createVertexBuffer=function(t,e,r){return new n(t,t.ARRAY_BUFFER,e,r)},n.createIndexBuffer=function(t,e,r){return new n(t,t.ELEMENT_ARRAY_BUFFER,e,r)},n.create=function(t,e,r,i){return new n(t,e,i)},e.exports=n},{}],3:[function(t,e,r){var i=t("./GLTexture"),n=function(t,e,r){this.gl=t,this.framebuffer=t.createFramebuffer(),this.stencil=null,this.texture=null,this.width=e||100,this.height=r||100};n.prototype.enableTexture=function(t){var e=this.gl;this.texture=t||new i(e),this.texture.bind(),this.bind(),e.framebufferTexture2D(e.FRAMEBUFFER,e.COLOR_ATTACHMENT0,e.TEXTURE_2D,this.texture.texture,0)},n.prototype.enableStencil=function(){if(!this.stencil){var t=this.gl;this.stencil=t.createRenderbuffer(),t.bindRenderbuffer(t.RENDERBUFFER,this.stencil),t.framebufferRenderbuffer(t.FRAMEBUFFER,t.DEPTH_STENCIL_ATTACHMENT,t.RENDERBUFFER,this.stencil),t.renderbufferStorage(t.RENDERBUFFER,t.DEPTH_STENCIL,this.width,this.height)}},n.prototype.clear=function(t,e,r,i){this.bind();var n=this.gl;n.clearColor(t,e,r,i),n.clear(n.COLOR_BUFFER_BIT)},n.prototype.bind=function(){var t=this.gl;t.bindFramebuffer(t.FRAMEBUFFER,this.framebuffer)},n.prototype.unbind=function(){gl.bindFramebuffer(gl.FRAMEBUFFER,null)},n.prototype.resize=function(t,e){var r=this.gl;this.width=t,this.height=e,this.texture&&this.texture.uploadData(null,t,e),this.stencil&&(r.bindRenderbuffer(r.RENDERBUFFER,this.stencil),r.renderbufferStorage(r.RENDERBUFFER,r.DEPTH_STENCIL,t,e))},n.prototype.destroy=function(){var t=this.gl;t.deleteFramebuffer(this.framebuffer)},n.createRGBA=function(t,e,r,o){var s=i.fromData(t,null,e,r);s.enableNearestScaling(),s.enableWrapClamp();var a=new n(t,e,r);return a.enableTexture(s),a},n.createFloat32=function(t,e,r,o){var s=new i.fromData(t,o,e,r);s.enableNearestScaling(),s.enableWrapClamp();var a=new n(t,e,r);return a.enableTexture(s),a},e.exports=n},{"./GLTexture":5}],4:[function(t,e,r){var i=t("./shader/compileProgram"),n=t("./shader/extractAttributes"),o=t("./shader/extractUniforms"),s=t("./shader/generateUniformAccessObject"),a=function(t,e,r){this.gl=t,this.program=i(t,e,r),this.attributes=n(t,this.program);var a=o(t,this.program);this.uniforms=s(t,a)};a.prototype.bind=function(){this.gl.useProgram(this.program)},a.prototype.destroy=function(){this.gl},e.exports=a},{"./shader/compileProgram":9,"./shader/extractAttributes":11,"./shader/extractUniforms":12,"./shader/generateUniformAccessObject":13}],5:[function(t,e,r){var i=function(t,e,r,i,n){this.gl=t,this.texture=t.createTexture(),this.mipmap=!1,this.premultiplyAlpha=!1,this.width=e||0,this.height=r||0,this.format=i||t.RGBA,this.type=n||t.UNSIGNED_BYTE};i.prototype.upload=function(t){this.bind();var e=this.gl;this.width=t.width,this.height=t.height,e.pixelStorei(e.UNPACK_PREMULTIPLY_ALPHA_WEBGL,this.premultiplyAlpha),e.texImage2D(e.TEXTURE_2D,0,this.format,this.format,this.type,t)};var n=!1;i.prototype.uploadData=function(t,e,r){if(this.bind(),this.width=e||this.width,this.height=r||this.height,t instanceof Float32Array){if(!n){var i=gl.getExtension("OES_texture_float");if(!i)throw new Error("floating point textures not available");n=!0}this.type=gl.FLOAT}else this.type=gl.UNSIGNED_BYTE;gl.pixelStorei(gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL,this.premultiplyAlpha),gl.texImage2D(gl.TEXTURE_2D,0,this.format,this.width,this.height,0,this.format,this.type,t||null)},i.prototype.bind=function(t){var e=this.gl;void 0!==t&&e.activeTexture(e.TEXTURE0+t),e.bindTexture(e.TEXTURE_2D,this.texture)},i.prototype.unbind=function(){var t=this.gl;t.bindTexture(t.TEXTURE_2D,null)},i.prototype.minFilter=function(t){var e=this.gl;this.bind(),this.mipmap?e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MIN_FILTER,t?e.LINEAR_MIPMAP_LINEAR:e.NEAREST_MIPMAP_NEAREST):e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MIN_FILTER,t?e.LINEAR:e.NEAREST)},i.prototype.magFilter=function(t){var e=this.gl;this.bind(),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MAG_FILTER,t?e.LINEAR:e.NEAREST)},i.prototype.enableMipmap=function(){this.bind(),this.mipmap=!0,gl.generateMipmap(gl.TEXTURE_2D)},i.prototype.enableLinearScaling=function(){this.minFilter(!0),this.magFilter(!0)},i.prototype.enableNearestScaling=function(){this.minFilter(!1),this.magFilter(!1)},i.prototype.enableWrapClamp=function(){var t=this.gl;this.bind(),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_WRAP_S,t.CLAMP_TO_EDGE),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_WRAP_T,t.CLAMP_TO_EDGE)},i.prototype.enableWrapRepeat=function(){var t=this.gl;this.bind(),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_WRAP_S,t.REPEAT),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_WRAP_T,t.REPEAT)},i.prototype.destroy=function(){var t=this.gl;t.deleteTexture(this.texture)},i.fromSource=function(t,e,r){var n=new i(t);return n.premultiplyAlpha=r||!1,n.upload(e),n},i.fromData=function(t,e,r,n){var o=new i(t);return o.uploadData(e,r,n),o},e.exports=i},{}],6:[function(t,e,r){function i(t){this.nativeVaoExtension=t.getExtension("OES_vertex_array_object")||t.getExtension("MOZ_OES_vertex_array_object")||t.getExtension("WEBKIT_OES_vertex_array_object"),this.nativeVaoExtension&&(this.nativeVao=this.nativeVaoExtension.createVertexArrayOES()),this.gl=t,this.attributes=[],this.indexBuffer=null,this.dirty=!1}i.prototype.constructor=i,e.exports=i,i.prototype.bind=function(){this.nativeVao?(this.nativeVaoExtension.bindVertexArrayOES(this.nativeVao),this.dirty&&(this.dirty=!1,this.activate())):this.activate()},i.prototype.unbind=function(){this.nativeVao&&this.nativeVaoExtension.bindVertexArrayOES(null)},i.prototype.activate=function(){for(var t=this.gl,e=0;es;s++){var a=t.getActiveAttrib(e,s),h=i(t,a.type);r[a.name]={type:h,size:n(h),location:t.getAttribLocation(e,a.name),pointer:function(e,r,i,n){t.vertexAttribPointer(this.location,this.size,e||t.FLOAT,r||!1,i||0,n||0)}}}return r};e.exports=o},{"./mapSize":14,"./mapType":15}],12:[function(t,e,r){var i=t("./mapType"),n=t("./defaultValue"),o=function(t,e){for(var r={},o=t.getProgramParameter(e,t.ACTIVE_UNIFORMS),s=0;o>s;s++){var a=t.getActiveUniform(e,s),h=a.name.replace(/\[.*?\]/,""),u=i(t,a.type);r[h]={type:u,size:a.size,location:t.getUniformLocation(e,h),value:n(u,a.size)}}return r};e.exports=o},{"./defaultValue":10,"./mapType":15}],13:[function(t,e,r){var i=function(t,e){var r={data:{}};r.gl=t;for(var i=Object.keys(e),a=0;a=0&&t.length%1===0}function c(t,e){for(var r=-1,i=t.length;++ri?i:null}):(r=X(t),e=r.length,function(){return i++,e>i?r[i]:null})}function y(t,e){return e=null==e?t.length-1:+e,function(){for(var r=Math.max(arguments.length-e,0),i=Array(r),n=0;r>n;n++)i[n]=arguments[n+e];switch(e){case 0:return t.call(this,i);case 1:return t.call(this,arguments[0],i)}}}function x(t){return function(e,r,i){return t(e,i)}}function b(t){return function(e,r,i){i=u(i||n),e=e||[];var o=m(e);if(0>=t)return i(null);var s=!1,a=0,l=!1;!function c(){if(s&&0>=a)return i(null);for(;t>a&&!l;){var n=o();if(null===n)return s=!0,void(0>=a&&i(null));a+=1,r(e[n],n,h(function(t){a-=1,t?(i(t),l=!0):c()}))}}()}}function _(t){return function(e,r,i){return t(N.eachOf,e,r,i)}}function T(t){return function(e,r,i,n){return t(b(r),e,i,n)}}function E(t){return function(e,r,i){return t(N.eachOfSeries,e,r,i)}}function S(t,e,r,i){i=u(i||n),e=e||[];var o=l(e)?[]:{};t(e,function(t,e,i){r(t,function(t,r){o[e]=r,i(t)})},function(t){i(t,o)})}function w(t,e,r,i){var n=[];t(e,function(t,e,i){r(t,function(r){r&&n.push({index:e,value:t}),i()})},function(){i(p(n.sort(function(t,e){return t.index-e.index}),function(t){return t.value}))})}function C(t,e,r,i){w(t,e,function(t,e){r(t,function(t){e(!t)})},i)}function A(t,e,r){return function(i,n,o,s){function a(){s&&s(r(!1,void 0))}function h(t,i,n){return s?void o(t,function(i){s&&e(i)&&(s(r(!0,t)),s=o=!1),n()}):n()}arguments.length>3?t(i,n,h,a):(s=o,o=n,t(i,h,a))}}function M(t,e){return e}function R(t,e,r){r=r||n;var i=l(e)?[]:{};t(e,function(t,e,r){t(y(function(t,n){n.length<=1&&(n=n[0]),i[e]=n,r(t)}))},function(t){r(t,i)})}function O(t,e,r,i){var n=[];t(e,function(t,e,i){r(t,function(t,e){n=n.concat(e||[]),i(t)})},function(t){i(t,n)})}function P(t,e,r){function i(t,e,r,i){if(null!=i&&"function"!=typeof i)throw new Error("task callback must be a function");return t.started=!0,j(e)||(e=[e]),0===e.length&&t.idle()?N.setImmediate(function(){t.drain()}):(c(e,function(e){var o={data:e,callback:i||n};r?t.tasks.unshift(o):t.tasks.push(o),t.tasks.length===t.concurrency&&t.saturated()}),void N.setImmediate(t.process))}function o(t,e){return function(){s-=1;var r=!1,i=arguments;c(e,function(t){c(a,function(e,i){e!==t||r||(a.splice(i,1),r=!0)}),t.callback.apply(t,i)}),t.tasks.length+s===0&&t.drain(),t.process()}}if(null==e)e=1;else if(0===e)throw new Error("Concurrency must not be zero");var s=0,a=[],u={tasks:[],concurrency:e,payload:r,saturated:n,empty:n,drain:n,started:!1,paused:!1,push:function(t,e){i(u,t,!1,e)},kill:function(){u.drain=n,u.tasks=[]},unshift:function(t,e){i(u,t,!0,e)},process:function(){if(!u.paused&&s=e;e++)N.setImmediate(u.process)}}};return u}function D(t){return y(function(e,r){e.apply(null,r.concat([y(function(e,r){"object"==typeof console&&(e?console.error&&console.error(e):console[t]&&c(r,function(e){console[t](e)}))})]))})}function F(t){return function(e,r,i){t(d(e),r,i)}}function L(t){return y(function(e,r){var i=y(function(r){var i=this,n=r.pop();return t(e,function(t,e,n){t.apply(i,r.concat([n]))},n)});return r.length?i.apply(this,r):i})}function B(t){return y(function(e){var r=e.pop();e.push(function(){var t=arguments;i?N.setImmediate(function(){r.apply(null,t)}):r.apply(null,t)});var i=!0;t.apply(this,e),i=!1})}var I,N={},U="object"==typeof self&&self.self===self&&self||"object"==typeof i&&i.global===i&&i||this;null!=U&&(I=U.async),N.noConflict=function(){return U.async=I,N};var k=Object.prototype.toString,j=Array.isArray||function(t){return"[object Array]"===k.call(t)},G=function(t){var e=typeof t;return"function"===e||"object"===e&&!!t},X=Object.keys||function(t){var e=[];for(var r in t)t.hasOwnProperty(r)&&e.push(r);return e},Y="function"==typeof setImmediate&&setImmediate,z=Y?function(t){Y(t)}:function(t){setTimeout(t,0)};"object"==typeof e&&"function"==typeof e.nextTick?N.nextTick=e.nextTick:N.nextTick=z,N.setImmediate=Y?z:N.nextTick,N.forEach=N.each=function(t,e,r){return N.eachOf(t,x(e),r)},N.forEachSeries=N.eachSeries=function(t,e,r){return N.eachOfSeries(t,x(e),r)},N.forEachLimit=N.eachLimit=function(t,e,r,i){return b(e)(t,x(r),i)},N.forEachOf=N.eachOf=function(t,e,r){function i(t){a--,t?r(t):null===o&&0>=a&&r(null)}r=u(r||n),t=t||[];for(var o,s=m(t),a=0;null!=(o=s());)a+=1,e(t[o],o,h(i));0===a&&r(null)},N.forEachOfSeries=N.eachOfSeries=function(t,e,r){function i(){var n=!0;return null===s?r(null):(e(t[s],s,h(function(t){if(t)r(t);else{if(s=o(),null===s)return r(null);n?N.setImmediate(i):i()}})),void(n=!1))}r=u(r||n),t=t||[];var o=m(t),s=o();i()},N.forEachOfLimit=N.eachOfLimit=function(t,e,r,i){b(e)(t,r,i)},N.map=_(S),N.mapSeries=E(S),N.mapLimit=T(S),N.inject=N.foldl=N.reduce=function(t,e,r,i){N.eachOfSeries(t,function(t,i,n){r(e,t,function(t,r){e=r,n(t)})},function(t){i(t,e)})},N.foldr=N.reduceRight=function(t,e,r,i){var n=p(t,o).reverse();N.reduce(n,e,r,i)},N.transform=function(t,e,r,i){3===arguments.length&&(i=r,r=e,e=j(t)?[]:{}),N.eachOf(t,function(t,i,n){r(e,t,i,n)},function(t){i(t,e)})},N.select=N.filter=_(w),N.selectLimit=N.filterLimit=T(w),N.selectSeries=N.filterSeries=E(w),N.reject=_(C),N.rejectLimit=T(C),N.rejectSeries=E(C),N.any=N.some=A(N.eachOf,s,o),N.someLimit=A(N.eachOfLimit,s,o),N.all=N.every=A(N.eachOf,a,a),N.everyLimit=A(N.eachOfLimit,a,a),N.detect=A(N.eachOf,o,M),N.detectSeries=A(N.eachOfSeries,o,M),N.detectLimit=A(N.eachOfLimit,o,M),N.sortBy=function(t,e,r){function i(t,e){var r=t.criteria,i=e.criteria;return i>r?-1:r>i?1:0}N.map(t,function(t,r){e(t,function(e,i){e?r(e):r(null,{value:t,criteria:i})})},function(t,e){return t?r(t):void r(null,p(e.sort(i),function(t){return t.value}))})},N.auto=function(t,e,r){function i(t){d.unshift(t)}function o(t){var e=g(d,t);e>=0&&d.splice(e,1)}function s(){h--,c(d.slice(0),function(t){t()})}r||(r=e,e=null),r=u(r||n);var a=X(t),h=a.length;if(!h)return r(null);e||(e=h);var l={},p=0,d=[];i(function(){h||r(null,l)}),c(a,function(n){function a(){return e>p&&f(m,function(t,e){return t&&l.hasOwnProperty(e)},!0)&&!l.hasOwnProperty(n)}function h(){a()&&(p++,o(h),c[c.length-1](d,l))}for(var u,c=j(t[n])?t[n]:[t[n]],d=y(function(t,e){if(p--,e.length<=1&&(e=e[0]),t){var i={};v(l,function(t,e){i[e]=t}),i[n]=e,r(t,i)}else l[n]=e,N.setImmediate(s)}),m=c.slice(0,c.length-1),x=m.length;x--;){if(!(u=t[m[x]]))throw new Error("Has inexistant dependency");if(j(u)&&g(u,n)>=0)throw new Error("Has cyclic dependencies")}a()?(p++,c[c.length-1](d,l)):i(h)})},N.retry=function(t,e,r){function i(t,e){if("number"==typeof e)t.times=parseInt(e,10)||o;else{if("object"!=typeof e)throw new Error("Unsupported argument type for 'times': "+typeof e);t.times=parseInt(e.times,10)||o,t.interval=parseInt(e.interval,10)||s}}function n(t,e){function r(t,r){return function(i){t(function(t,e){i(!t||r,{err:t,result:e})},e)}}function i(t){return function(e){setTimeout(function(){e(null)},t)}}for(;h.times;){var n=!(h.times-=1);a.push(r(h.task,n)),!n&&h.interval>0&&a.push(i(h.interval))}N.series(a,function(e,r){r=r[r.length-1],(t||h.callback)(r.err,r.result)})}var o=5,s=0,a=[],h={times:o,interval:s},u=arguments.length;if(1>u||u>3)throw new Error("Invalid arguments - must be either (task), (task, callback), (times, task) or (times, task, callback)");return 2>=u&&"function"==typeof t&&(r=e,e=t),"function"!=typeof t&&i(h,t),h.callback=r,h.task=e,h.callback?n():n},N.waterfall=function(t,e){function r(t){return y(function(i,n){if(i)e.apply(null,[i].concat(n));else{var o=t.next();o?n.push(r(o)):n.push(e),B(t).apply(null,n)}})}if(e=u(e||n),!j(t)){var i=new Error("First argument to waterfall must be an array of functions");return e(i)}return t.length?void r(N.iterator(t))():e()},N.parallel=function(t,e){R(N.eachOf,t,e)},N.parallelLimit=function(t,e,r){R(b(e),t,r)},N.series=function(t,e){R(N.eachOfSeries,t,e)},N.iterator=function(t){function e(r){function i(){return t.length&&t[r].apply(null,arguments),i.next()}return i.next=function(){return ri;){var o=i+(n-i+1>>>1);r(e,t[o])>=0?i=o:n=o-1}return i}function o(t,e,o,s){if(null!=s&&"function"!=typeof s)throw new Error("task callback must be a function");return t.started=!0,j(e)||(e=[e]),0===e.length?N.setImmediate(function(){t.drain()}):void c(e,function(e){var a={data:e,priority:o,callback:"function"==typeof s?s:n};t.tasks.splice(i(t.tasks,a,r)+1,0,a),t.tasks.length===t.concurrency&&t.saturated(),N.setImmediate(t.process)})}var s=N.queue(t,e);return s.push=function(t,e,r){o(s,t,e,r)},delete s.unshift,s},N.cargo=function(t,e){return P(t,1,e)},N.log=D("log"),N.dir=D("dir"),N.memoize=function(t,e){var r={},i={};e=e||o;var n=y(function(n){var o=n.pop(),s=e.apply(null,n);s in r?N.setImmediate(function(){o.apply(null,r[s])}):s in i?i[s].push(o):(i[s]=[o],t.apply(null,n.concat([y(function(t){r[s]=t;var e=i[s];delete i[s];for(var n=0,o=e.length;o>n;n++)e[n].apply(null,t)})])))});return n.memo=r,n.unmemoized=t,n},N.unmemoize=function(t){return function(){return(t.unmemoized||t).apply(null,arguments)}},N.times=F(N.map),N.timesSeries=F(N.mapSeries),N.timesLimit=function(t,e,r,i){return N.mapLimit(d(t),e,r,i)},N.seq=function(){var t=arguments;return y(function(e){var r=this,i=e[e.length-1];"function"==typeof i?e.pop():i=n,N.reduce(t,e,function(t,e,i){e.apply(r,t.concat([y(function(t,e){i(t,e)})]))},function(t,e){i.apply(r,[t].concat(e))})})},N.compose=function(){return N.seq.apply(null,Array.prototype.reverse.call(arguments))},N.applyEach=L(N.eachOf),N.applyEachSeries=L(N.eachOfSeries),N.forever=function(t,e){function r(t){return t?i(t):void o(r)}var i=h(e||n),o=B(t);r()},N.ensureAsync=B,N.constant=y(function(t){var e=[null].concat(t);return function(t){return t.apply(this,e)}}),N.wrapSync=N.asyncify=function(t){return y(function(e){var r,i=e.pop();try{r=t.apply(this,e)}catch(n){return i(n)}G(r)&&"function"==typeof r.then?r.then(function(t){i(null,t)})["catch"](function(t){i(t.message?t:new Error(t))}):i(null,r)})},"object"==typeof r&&r.exports?r.exports=N:"function"==typeof t&&t.amd?t([],function(){return N}):U.async=N}()}).call(this,e("_process"),"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{_process:18}],17:[function(t,e,r){(function(t){function e(t,e){for(var r=0,i=t.length-1;i>=0;i--){var n=t[i];"."===n?t.splice(i,1):".."===n?(t.splice(i,1),r++):r&&(t.splice(i,1),r--)}if(e)for(;r--;r)t.unshift("..");return t}function i(t,e){if(t.filter)return t.filter(e);for(var r=[],i=0;i=-1&&!n;o--){var s=o>=0?arguments[o]:t.cwd();if("string"!=typeof s)throw new TypeError("Arguments to path.resolve must be strings");s&&(r=s+"/"+r,n="/"===s.charAt(0))}return r=e(i(r.split("/"),function(t){return!!t}),!n).join("/"),(n?"/":"")+r||"."},r.normalize=function(t){var n=r.isAbsolute(t),o="/"===s(t,-1);return t=e(i(t.split("/"),function(t){return!!t}),!n).join("/"),t||n||(t="."),t&&o&&(t+="/"),(n?"/":"")+t},r.isAbsolute=function(t){return"/"===t.charAt(0)},r.join=function(){var t=Array.prototype.slice.call(arguments,0);return r.normalize(i(t,function(t,e){if("string"!=typeof t)throw new TypeError("Arguments to path.join must be strings");return t}).join("/"))},r.relative=function(t,e){function i(t){for(var e=0;e=0&&""===t[r];r--);return e>r?[]:t.slice(e,r-e+1)}t=r.resolve(t).substr(1),e=r.resolve(e).substr(1);for(var n=i(t.split("/")),o=i(e.split("/")),s=Math.min(n.length,o.length),a=s,h=0;s>h;h++)if(n[h]!==o[h]){a=h;break}for(var u=[],h=a;he&&(e=t.length+e),t.substr(e,r)}}).call(this,t("_process"))},{_process:18}],18:[function(t,e,r){function i(){l=!1,a.length?u=a.concat(u):c=-1,u.length&&n()}function n(){if(!l){var t=setTimeout(i);l=!0;for(var e=u.length;e;){for(a=u,u=[];++c1)for(var r=1;r1&&(i=r[0]+"@",t=r[1]),t=t.replace(F,".");var n=t.split("."),o=s(n,e).join(".");return i+o}function h(t){for(var e,r,i=[],n=0,o=t.length;o>n;)e=t.charCodeAt(n++),e>=55296&&56319>=e&&o>n?(r=t.charCodeAt(n++),56320==(64512&r)?i.push(((1023&e)<<10)+(1023&r)+65536):(i.push(e),n--)):i.push(e);return i}function u(t){return s(t,function(t){var e="";return t>65535&&(t-=65536,e+=N(t>>>10&1023|55296),t=56320|1023&t),e+=N(t)}).join("")}function l(t){return 10>t-48?t-22:26>t-65?t-65:26>t-97?t-97:E}function c(t,e){return t+22+75*(26>t)-((0!=e)<<5)}function p(t,e,r){var i=0;for(t=r?I(t/A):t>>1,t+=I(t/e);t>B*w>>1;i+=E)t=I(t/B);return I(i+(B+1)*t/(t+C))}function d(t){var e,r,i,n,s,a,h,c,d,f,v=[],g=t.length,m=0,y=R,x=M;for(r=t.lastIndexOf(O),0>r&&(r=0),i=0;r>i;++i)t.charCodeAt(i)>=128&&o("not-basic"),v.push(t.charCodeAt(i));for(n=r>0?r+1:0;g>n;){for(s=m,a=1,h=E;n>=g&&o("invalid-input"),c=l(t.charCodeAt(n++)),(c>=E||c>I((T-m)/a))&&o("overflow"),m+=c*a,d=x>=h?S:h>=x+w?w:h-x,!(d>c);h+=E)f=E-d,a>I(T/f)&&o("overflow"),a*=f;e=v.length+1,x=p(m-s,e,0==s),I(m/e)>T-y&&o("overflow"),y+=I(m/e),m%=e,v.splice(m++,0,y)}return u(v)}function f(t){var e,r,i,n,s,a,u,l,d,f,v,g,m,y,x,b=[];for(t=h(t),g=t.length,e=R,r=0,s=M,a=0;g>a;++a)v=t[a],128>v&&b.push(N(v));for(i=n=b.length,n&&b.push(O);g>i;){for(u=T,a=0;g>a;++a)v=t[a],v>=e&&u>v&&(u=v);for(m=i+1,u-e>I((T-r)/m)&&o("overflow"),r+=(u-e)*m,e=u,a=0;g>a;++a)if(v=t[a],e>v&&++r>T&&o("overflow"),v==e){for(l=r,d=E;f=s>=d?S:d>=s+w?w:d-s,!(f>l);d+=E)x=l-f,y=E-f,b.push(N(c(f+x%y,0))),l=I(x/y);b.push(N(c(l,0))),s=p(r,m,i==n),r=0,++i}++r,++e}return b.join("")}function v(t){return a(t,function(t){return P.test(t)?d(t.slice(4).toLowerCase()):t})}function g(t){return a(t,function(t){return D.test(t)?"xn--"+f(t):t})}var m="object"==typeof i&&i&&!i.nodeType&&i,y="object"==typeof r&&r&&!r.nodeType&&r,x="object"==typeof e&&e;(x.global===x||x.window===x||x.self===x)&&(n=x);var b,_,T=2147483647,E=36,S=1,w=26,C=38,A=700,M=72,R=128,O="-",P=/^xn--/,D=/[^\x20-\x7E]/,F=/[\x2E\u3002\uFF0E\uFF61]/g,L={overflow:"Overflow: input needs wider integers to process","not-basic":"Illegal input >= 0x80 (not a basic code point)","invalid-input":"Invalid input"},B=E-S,I=Math.floor,N=String.fromCharCode;if(b={version:"1.3.2",ucs2:{decode:h,encode:u},decode:d,encode:f,toASCII:g,toUnicode:v},"function"==typeof t&&"object"==typeof t.amd&&t.amd)t("punycode",function(){return b});else if(m&&y)if(r.exports==m)y.exports=b;else for(_ in b)b.hasOwnProperty(_)&&(m[_]=b[_]);else n.punycode=b}(this)}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{}],20:[function(t,e,r){"use strict";function i(t,e){return Object.prototype.hasOwnProperty.call(t,e)}e.exports=function(t,e,r,o){e=e||"&",r=r||"=";var s={};if("string"!=typeof t||0===t.length)return s;var a=/\+/g;t=t.split(e);var h=1e3;o&&"number"==typeof o.maxKeys&&(h=o.maxKeys);var u=t.length;h>0&&u>h&&(u=h);for(var l=0;u>l;++l){var c,p,d,f,v=t[l].replace(a,"%20"),g=v.indexOf(r);g>=0?(c=v.substr(0,g),p=v.substr(g+1)):(c=v,p=""),d=decodeURIComponent(c), +f=decodeURIComponent(p),i(s,d)?n(s[d])?s[d].push(f):s[d]=[s[d],f]:s[d]=f}return s};var n=Array.isArray||function(t){return"[object Array]"===Object.prototype.toString.call(t)}},{}],21:[function(t,e,r){"use strict";function i(t,e){if(t.map)return t.map(e);for(var r=[],i=0;i",'"',"`"," ","\r","\n"," "],g=["{","}","|","\\","^","`"].concat(v),m=["'"].concat(g),y=["%","/","?",";","#"].concat(m),x=["/","?","#"],b=255,_=/^[a-z0-9A-Z_-]{0,63}$/,T=/^([a-z0-9A-Z_-]{0,63})(.*)$/,E={javascript:!0,"javascript:":!0},S={javascript:!0,"javascript:":!0},w={http:!0,https:!0,ftp:!0,gopher:!0,file:!0,"http:":!0,"https:":!0,"ftp:":!0,"gopher:":!0,"file:":!0},C=t("querystring");i.prototype.parse=function(t,e,r){if(!h(t))throw new TypeError("Parameter 'url' must be a string, not "+typeof t);var i=t;i=i.trim();var n=d.exec(i);if(n){n=n[0];var o=n.toLowerCase();this.protocol=o,i=i.substr(n.length)}if(r||n||i.match(/^\/\/[^@\/]+@[^@\/]+/)){var s="//"===i.substr(0,2);!s||n&&S[n]||(i=i.substr(2),this.slashes=!0)}if(!S[n]&&(s||n&&!w[n])){for(var a=-1,u=0;ul)&&(a=l)}var c,f;f=-1===a?i.lastIndexOf("@"):i.lastIndexOf("@",a),-1!==f&&(c=i.slice(0,f),i=i.slice(f+1),this.auth=decodeURIComponent(c)),a=-1;for(var u=0;ul)&&(a=l)}-1===a&&(a=i.length),this.host=i.slice(0,a),i=i.slice(a),this.parseHost(),this.hostname=this.hostname||"";var v="["===this.hostname[0]&&"]"===this.hostname[this.hostname.length-1];if(!v)for(var g=this.hostname.split(/\./),u=0,A=g.length;A>u;u++){var M=g[u];if(M&&!M.match(_)){for(var R="",O=0,P=M.length;P>O;O++)R+=M.charCodeAt(O)>127?"x":M[O];if(!R.match(_)){var D=g.slice(0,u),F=g.slice(u+1),L=M.match(T);L&&(D.push(L[1]),F.unshift(L[2])),F.length&&(i="/"+F.join(".")+i),this.hostname=D.join(".");break}}}if(this.hostname.length>b?this.hostname="":this.hostname=this.hostname.toLowerCase(),!v){for(var B=this.hostname.split("."),I=[],u=0;uu;u++){var j=m[u],G=encodeURIComponent(j);G===j&&(G=escape(j)),i=i.split(j).join(G)}var X=i.indexOf("#");-1!==X&&(this.hash=i.substr(X),i=i.slice(0,X));var Y=i.indexOf("?");if(-1!==Y?(this.search=i.substr(Y),this.query=i.substr(Y+1),e&&(this.query=C.parse(this.query)),i=i.slice(0,Y)):e&&(this.search="",this.query={}),i&&(this.pathname=i),w[o]&&this.hostname&&!this.pathname&&(this.pathname="/"),this.pathname||this.search){var U=this.pathname||"",N=this.search||"";this.path=U+N}return this.href=this.format(),this},i.prototype.format=function(){var t=this.auth||"";t&&(t=encodeURIComponent(t),t=t.replace(/%3A/i,":"),t+="@");var e=this.protocol||"",r=this.pathname||"",i=this.hash||"",n=!1,o="";this.host?n=t+this.host:this.hostname&&(n=t+(-1===this.hostname.indexOf(":")?this.hostname:"["+this.hostname+"]"),this.port&&(n+=":"+this.port)),this.query&&u(this.query)&&Object.keys(this.query).length&&(o=C.stringify(this.query));var s=this.search||o&&"?"+o||"";return e&&":"!==e.substr(-1)&&(e+=":"),this.slashes||(!e||w[e])&&n!==!1?(n="//"+(n||""),r&&"/"!==r.charAt(0)&&(r="/"+r)):n||(n=""),i&&"#"!==i.charAt(0)&&(i="#"+i),s&&"?"!==s.charAt(0)&&(s="?"+s),r=r.replace(/[?#]/g,function(t){return encodeURIComponent(t)}),s=s.replace("#","%23"),e+n+r+s+i},i.prototype.resolve=function(t){return this.resolveObject(n(t,!1,!0)).format()},i.prototype.resolveObject=function(t){if(h(t)){var e=new i;e.parse(t,!1,!0),t=e}var r=new i;if(Object.keys(this).forEach(function(t){r[t]=this[t]},this),r.hash=t.hash,""===t.href)return r.href=r.format(),r;if(t.slashes&&!t.protocol)return Object.keys(t).forEach(function(e){"protocol"!==e&&(r[e]=t[e])}),w[r.protocol]&&r.hostname&&!r.pathname&&(r.path=r.pathname="/"),r.href=r.format(),r;if(t.protocol&&t.protocol!==r.protocol){if(!w[t.protocol])return Object.keys(t).forEach(function(e){r[e]=t[e]}),r.href=r.format(),r;if(r.protocol=t.protocol,t.host||S[t.protocol])r.pathname=t.pathname;else{for(var n=(t.pathname||"").split("/");n.length&&!(t.host=n.shift()););t.host||(t.host=""),t.hostname||(t.hostname=""),""!==n[0]&&n.unshift(""),n.length<2&&n.unshift(""),r.pathname=n.join("/")}if(r.search=t.search,r.query=t.query,r.host=t.host||"",r.auth=t.auth,r.hostname=t.hostname||t.host,r.port=t.port,r.pathname||r.search){var o=r.pathname||"",s=r.search||"";r.path=o+s}return r.slashes=r.slashes||t.slashes,r.href=r.format(),r}var a=r.pathname&&"/"===r.pathname.charAt(0),u=t.host||t.pathname&&"/"===t.pathname.charAt(0),p=u||a||r.host&&t.pathname,d=p,f=r.pathname&&r.pathname.split("/")||[],n=t.pathname&&t.pathname.split("/")||[],v=r.protocol&&!w[r.protocol];if(v&&(r.hostname="",r.port=null,r.host&&(""===f[0]?f[0]=r.host:f.unshift(r.host)),r.host="",t.protocol&&(t.hostname=null,t.port=null,t.host&&(""===n[0]?n[0]=t.host:n.unshift(t.host)),t.host=null),p=p&&(""===n[0]||""===f[0])),u)r.host=t.host||""===t.host?t.host:r.host,r.hostname=t.hostname||""===t.hostname?t.hostname:r.hostname,r.search=t.search,r.query=t.query,f=n;else if(n.length)f||(f=[]),f.pop(),f=f.concat(n),r.search=t.search,r.query=t.query;else if(!c(t.search)){if(v){r.hostname=r.host=f.shift();var g=r.host&&r.host.indexOf("@")>0?r.host.split("@"):!1;g&&(r.auth=g.shift(),r.host=r.hostname=g.shift())}return r.search=t.search,r.query=t.query,l(r.pathname)&&l(r.search)||(r.path=(r.pathname?r.pathname:"")+(r.search?r.search:"")),r.href=r.format(),r}if(!f.length)return r.pathname=null,r.search?r.path="/"+r.search:r.path=null,r.href=r.format(),r;for(var m=f.slice(-1)[0],y=(r.host||t.host)&&("."===m||".."===m)||""===m,x=0,b=f.length;b>=0;b--)m=f[b],"."==m?f.splice(b,1):".."===m?(f.splice(b,1),x++):x&&(f.splice(b,1),x--);if(!p&&!d)for(;x--;x)f.unshift("..");!p||""===f[0]||f[0]&&"/"===f[0].charAt(0)||f.unshift(""),y&&"/"!==f.join("/").substr(-1)&&f.push("");var _=""===f[0]||f[0]&&"/"===f[0].charAt(0);if(v){r.hostname=r.host=_?"":f.length?f.shift():"";var g=r.host&&r.host.indexOf("@")>0?r.host.split("@"):!1;g&&(r.auth=g.shift(),r.host=r.hostname=g.shift())}return p=p||r.host&&f.length,p&&!_&&f.unshift(""),f.length?r.pathname=f.join("/"):(r.pathname=null,r.path=null),l(r.pathname)&&l(r.search)||(r.path=(r.pathname?r.pathname:"")+(r.search?r.search:"")),r.auth=t.auth||r.auth,r.slashes=r.slashes||t.slashes,r.href=r.format(),r},i.prototype.parseHost=function(){var t=this.host,e=f.exec(t);e&&(e=e[0],":"!==e&&(this.port=e.substr(1)),t=t.substr(0,t.length-e.length)),t&&(this.hostname=t)}},{punycode:19,querystring:22}],24:[function(t,e,r){"use strict";function i(t,e,r){r=r||2;var i=e&&e.length,o=i?e[0]*r:t.length,a=n(t,0,o,r,!0),h=[];if(!a)return h;var u,l,p,d,f,v,g;if(i&&(a=c(t,e,a,r)),t.length>80*r){u=p=t[0],l=d=t[1];for(var m=r;o>m;m+=r)f=t[m],v=t[m+1],u>f&&(u=f),l>v&&(l=v),f>p&&(p=f),v>d&&(d=v);g=Math.max(p-u,d-l)}return s(a,h,r,u,l,g),h}function n(t,e,r,i,n){var o,s,a,h=0;for(o=e,s=r-i;r>o;o+=i)h+=(t[s]-t[o])*(t[o+1]+t[s+1]),s=o;if(n===h>0)for(o=e;r>o;o+=i)a=M(o,t[o],t[o+1],a);else for(o=r-i;o>=e;o-=i)a=M(o,t[o],t[o+1],a);return a}function o(t,e){if(!t)return t;e||(e=t);var r,i=t;do if(r=!1,i.steiner||!T(i,i.next)&&0!==_(i.prev,i,i.next))i=i.next;else{if(R(i),i=e=i.prev,i===i.next)return null;r=!0}while(r||i!==e);return e}function s(t,e,r,i,n,c,p){if(t){!p&&c&&v(t,i,n,c);for(var d,f,g=t;t.prev!==t.next;)if(d=t.prev,f=t.next,c?h(t,i,n,c):a(t))e.push(d.i/r),e.push(t.i/r),e.push(f.i/r),R(t),t=f.next,g=f.next;else if(t=f,t===g){p?1===p?(t=u(t,e,r),s(t,e,r,i,n,c,2)):2===p&&l(t,e,r,i,n,c):s(o(t),e,r,i,n,c,1);break}}}function a(t){var e=t.prev,r=t,i=t.next;if(_(e,r,i)>=0)return!1;for(var n=t.next.next;n!==t.prev;){if(x(e.x,e.y,r.x,r.y,i.x,i.y,n.x,n.y)&&_(n.prev,n,n.next)>=0)return!1;n=n.next}return!0}function h(t,e,r,i){var n=t.prev,o=t,s=t.next;if(_(n,o,s)>=0)return!1;for(var a=n.xo.x?n.x>s.x?n.x:s.x:o.x>s.x?o.x:s.x,l=n.y>o.y?n.y>s.y?n.y:s.y:o.y>s.y?o.y:s.y,c=m(a,h,e,r,i),p=m(u,l,e,r,i),d=t.nextZ;d&&d.z<=p;){if(d!==t.prev&&d!==t.next&&x(n.x,n.y,o.x,o.y,s.x,s.y,d.x,d.y)&&_(d.prev,d,d.next)>=0)return!1;d=d.nextZ}for(d=t.prevZ;d&&d.z>=c;){if(d!==t.prev&&d!==t.next&&x(n.x,n.y,o.x,o.y,s.x,s.y,d.x,d.y)&&_(d.prev,d,d.next)>=0)return!1;d=d.prevZ}return!0}function u(t,e,r){var i=t;do{var n=i.prev,o=i.next.next;E(n,i,i.next,o)&&w(n,o)&&w(o,n)&&(e.push(n.i/r),e.push(i.i/r),e.push(o.i/r),R(i),R(i.next),i=t=o),i=i.next}while(i!==t);return i}function l(t,e,r,i,n,a){var h=t;do{for(var u=h.next.next;u!==h.prev;){if(h.i!==u.i&&b(h,u)){var l=A(h,u);return h=o(h,h.next),l=o(l,l.next),s(h,e,r,i,n,a),void s(l,e,r,i,n,a)}u=u.next}h=h.next}while(h!==t)}function c(t,e,r,i){var s,a,h,u,l,c=[];for(s=0,a=e.length;a>s;s++)h=e[s]*i,u=a-1>s?e[s+1]*i:t.length,l=n(t,h,u,i,!1),l===l.next&&(l.steiner=!0),c.push(y(l));for(c.sort(p),s=0;s=i.next.y){var a=i.x+(o-i.y)*(i.next.x-i.x)/(i.next.y-i.y);n>=a&&a>s&&(s=a,r=i.x=i.x&&i.x>=r.x&&x(oh||h===l&&i.x>r.x)&&w(i,t)&&(r=i,l=h)),i=i.next;return r}function v(t,e,r,i){var n=t;do null===n.z&&(n.z=m(n.x,n.y,e,r,i)),n.prevZ=n.prev,n.nextZ=n.next,n=n.next;while(n!==t);n.prevZ.nextZ=null,n.prevZ=null,g(n)}function g(t){var e,r,i,n,o,s,a,h,u=1;do{for(r=t,t=null,o=null,s=0;r;){for(s++,i=r,a=0,e=0;u>e&&(a++,i=i.nextZ,i);e++);for(h=u;a>0||h>0&&i;)0===a?(n=i,i=i.nextZ,h--):0!==h&&i?r.z<=i.z?(n=r,r=r.nextZ,a--):(n=i,i=i.nextZ,h--):(n=r,r=r.nextZ,a--),o?o.nextZ=n:t=n,n.prevZ=o,o=n;r=i}o.nextZ=null,u*=2}while(s>1);return t}function m(t,e,r,i,n){return t=32767*(t-r)/n,e=32767*(e-i)/n,t=16711935&(t|t<<8),t=252645135&(t|t<<4),t=858993459&(t|t<<2),t=1431655765&(t|t<<1),e=16711935&(e|e<<8),e=252645135&(e|e<<4),e=858993459&(e|e<<2),e=1431655765&(e|e<<1),t|e<<1}function y(t){var e=t,r=t;do e.x=0&&(t-s)*(i-a)-(r-s)*(e-a)>=0&&(r-s)*(o-a)-(n-s)*(i-a)>=0}function b(t,e){return T(t,e)||t.next.i!==e.i&&t.prev.i!==e.i&&!S(t,e)&&w(t,e)&&w(e,t)&&C(t,e)}function _(t,e,r){return(e.y-t.y)*(r.x-e.x)-(e.x-t.x)*(r.y-e.y)}function T(t,e){return t.x===e.x&&t.y===e.y}function E(t,e,r,i){return _(t,e,r)>0!=_(t,e,i)>0&&_(r,i,t)>0!=_(r,i,e)>0}function S(t,e){var r=t;do{if(r.i!==t.i&&r.next.i!==t.i&&r.i!==e.i&&r.next.i!==e.i&&E(r,r.next,t,e))return!0;r=r.next}while(r!==t);return!1}function w(t,e){return _(t.prev,t,t.next)<0?_(t,e,t.next)>=0&&_(t,t.prev,e)>=0:_(t,e,t.prev)<0||_(t,t.next,e)<0}function C(t,e){var r=t,i=!1,n=(t.x+e.x)/2,o=(t.y+e.y)/2;do r.y>o!=r.next.y>o&&n<(r.next.x-r.x)*(o-r.y)/(r.next.y-r.y)+r.x&&(i=!i),r=r.next;while(r!==t);return i}function A(t,e){var r=new O(t.i,t.x,t.y),i=new O(e.i,e.x,e.y),n=t.next,o=e.prev;return t.next=e,e.prev=t,r.next=n,n.prev=r,i.next=r,r.prev=i,o.next=i,i.prev=o,i}function M(t,e,r,i){var n=new O(t,e,r);return i?(n.next=i.next,n.prev=i,i.next.prev=n,i.next=n):(n.prev=n,n.next=n),n}function R(t){t.next.prev=t.prev,t.prev.next=t.next,t.prevZ&&(t.prevZ.nextZ=t.nextZ),t.nextZ&&(t.nextZ.prevZ=t.prevZ)}function O(t,e,r){this.i=t,this.x=e,this.y=r,this.prev=null,this.next=null,this.z=null,this.prevZ=null,this.nextZ=null,this.steiner=!1}e.exports=i},{}],25:[function(t,e,r){"use strict";function i(t,e,r){this.fn=t,this.context=e,this.once=r||!1}function n(){}var o="function"!=typeof Object.create?"~":!1;n.prototype._events=void 0,n.prototype.listeners=function(t,e){var r=o?o+t:t,i=this._events&&this._events[r];if(e)return!!i;if(!i)return[];if(i.fn)return[i.fn];for(var n=0,s=i.length,a=new Array(s);s>n;n++)a[n]=i[n].fn;return a},n.prototype.emit=function(t,e,r,i,n,s){var a=o?o+t:t;if(!this._events||!this._events[a])return!1;var h,u,l=this._events[a],c=arguments.length;if("function"==typeof l.fn){switch(l.once&&this.removeListener(t,l.fn,void 0,!0),c){case 1:return l.fn.call(l.context),!0;case 2:return l.fn.call(l.context,e),!0;case 3:return l.fn.call(l.context,e,r),!0;case 4:return l.fn.call(l.context,e,r,i),!0;case 5:return l.fn.call(l.context,e,r,i,n),!0;case 6:return l.fn.call(l.context,e,r,i,n,s),!0}for(u=1,h=new Array(c-1);c>u;u++)h[u-1]=arguments[u];l.fn.apply(l.context,h)}else{var p,d=l.length;for(u=0;d>u;u++)switch(l[u].once&&this.removeListener(t,l[u].fn,void 0,!0),c){case 1:l[u].fn.call(l[u].context);break;case 2:l[u].fn.call(l[u].context,e);break;case 3:l[u].fn.call(l[u].context,e,r);break;default:if(!h)for(p=1,h=new Array(c-1);c>p;p++)h[p-1]=arguments[p];l[u].fn.apply(l[u].context,h)}}return!0},n.prototype.on=function(t,e,r){var n=new i(e,r||this),s=o?o+t:t;return this._events||(this._events=o?{}:Object.create(null)),this._events[s]?this._events[s].fn?this._events[s]=[this._events[s],n]:this._events[s].push(n):this._events[s]=n,this},n.prototype.once=function(t,e,r){var n=new i(e,r||this,!0),s=o?o+t:t;return this._events||(this._events=o?{}:Object.create(null)),this._events[s]?this._events[s].fn?this._events[s]=[this._events[s],n]:this._events[s].push(n):this._events[s]=n,this},n.prototype.removeListener=function(t,e,r,i){var n=o?o+t:t;if(!this._events||!this._events[n])return this;var s=this._events[n],a=[];if(e)if(s.fn)(s.fn!==e||i&&!s.once||r&&s.context!==r)&&a.push(s);else for(var h=0,u=s.length;u>h;h++)(s[h].fn!==e||i&&!s[h].once||r&&s[h].context!==r)&&a.push(s[h]);return a.length?this._events[n]=1===a.length?a[0]:a:delete this._events[n],this},n.prototype.removeAllListeners=function(t){return this._events?(t?delete this._events[o?o+t:t]:this._events=o?{}:Object.create(null),this):this},n.prototype.off=n.prototype.removeListener,n.prototype.addListener=n.prototype.on,n.prototype.setMaxListeners=function(){return this},n.prefixed=o,"undefined"!=typeof e&&(e.exports=n)},{}],26:[function(t,e,r){"use strict";function i(t){if(null===t||void 0===t)throw new TypeError("Object.assign cannot be called with null or undefined");return Object(t)}var n=Object.prototype.hasOwnProperty,o=Object.prototype.propertyIsEnumerable;e.exports=Object.assign||function(t,e){for(var r,s,a=i(t),h=1;h=t.length&&r())}if(r=r||function(){},!t.length)return r();var o=0;u(t,function(t){e(t,i(n))})},s.forEach=s.each,s.eachSeries=function(t,e,r){if(r=r||function(){},!t.length)return r();var i=0,n=function(){e(t[i],function(e){e?(r(e),r=function(){}):(i+=1,i>=t.length?r():n())})};n()},s.forEachSeries=s.eachSeries,s.eachLimit=function(t,e,r,i){var n=d(e);n.apply(null,[t,r,i])},s.forEachLimit=s.eachLimit;var d=function(t){return function(e,r,i){if(i=i||function(){},!e.length||0>=t)return i();var n=0,o=0,s=0;!function a(){if(n>=e.length)return i();for(;t>s&&o=e.length?i():a())})}()}},f=function(t){return function(){var e=Array.prototype.slice.call(arguments);return t.apply(null,[s.each].concat(e))}},v=function(t,e){return function(){var r=Array.prototype.slice.call(arguments);return e.apply(null,[d(t)].concat(r))}},g=function(t){return function(){var e=Array.prototype.slice.call(arguments);return t.apply(null,[s.eachSeries].concat(e))}},m=function(t,e,r,i){if(e=l(e,function(t,e){return{index:e,value:t}}),i){var n=[];t(e,function(t,e){r(t.value,function(r,i){n[t.index]=i,e(r)})},function(t){i(t,n)})}else t(e,function(t,e){r(t.value,function(t){e(t)})})};s.map=f(m),s.mapSeries=g(m),s.mapLimit=function(t,e,r,i){return y(e)(t,r,i)};var y=function(t){return v(t,m)};s.reduce=function(t,e,r,i){s.eachSeries(t,function(t,i){r(e,t,function(t,r){e=r,i(t)})},function(t){i(t,e)})},s.inject=s.reduce,s.foldl=s.reduce,s.reduceRight=function(t,e,r,i){var n=l(t,function(t){return t}).reverse();s.reduce(n,e,r,i)},s.foldr=s.reduceRight;var x=function(t,e,r,i){var n=[];e=l(e,function(t,e){return{index:e,value:t}}),t(e,function(t,e){r(t.value,function(r){r&&n.push(t),e()})},function(t){i(l(n.sort(function(t,e){return t.index-e.index}),function(t){return t.value}))})};s.filter=f(x),s.filterSeries=g(x),s.select=s.filter,s.selectSeries=s.filterSeries;var b=function(t,e,r,i){var n=[];e=l(e,function(t,e){return{index:e,value:t}}),t(e,function(t,e){r(t.value,function(r){r||n.push(t),e()})},function(t){i(l(n.sort(function(t,e){return t.index-e.index}),function(t){return t.value}))})};s.reject=f(b),s.rejectSeries=g(b);var _=function(t,e,r,i){t(e,function(t,e){r(t,function(r){r?(i(t),i=function(){}):e()})},function(t){i()})};s.detect=f(_),s.detectSeries=g(_),s.some=function(t,e,r){s.each(t,function(t,i){e(t,function(t){t&&(r(!0),r=function(){}),i()})},function(t){r(!1)})},s.any=s.some,s.every=function(t,e,r){s.each(t,function(t,i){e(t,function(t){t||(r(!1),r=function(){}),i()})},function(t){r(!0)})},s.all=s.every,s.sortBy=function(t,e,r){s.map(t,function(t,r){e(t,function(e,i){e?r(e):r(null,{value:t,criteria:i})})},function(t,e){if(t)return r(t);var i=function(t,e){var r=t.criteria,i=e.criteria;return i>r?-1:r>i?1:0};r(null,l(e.sort(i),function(t){return t.value}))})},s.auto=function(t,e){e=e||function(){};var r=p(t),i=r.length;if(!i)return e();var n={},o=[],a=function(t){o.unshift(t)},l=function(t){for(var e=0;ei;){var o=i+(n-i+1>>>1);r(e,t[o])>=0?i=o:n=o-1}return i}function n(t,e,n,o){return t.started||(t.started=!0),h(e)||(e=[e]),0==e.length?s.setImmediate(function(){t.drain&&t.drain()}):void u(e,function(e){var a={data:e,priority:n,callback:"function"==typeof o?o:null};t.tasks.splice(i(t.tasks,a,r)+1,0,a),t.saturated&&t.tasks.length===t.concurrency&&t.saturated(),s.setImmediate(t.process)})}var o=s.queue(t,e);return o.push=function(t,e,r){n(o,t,e,r)},delete o.unshift,o},s.cargo=function(t,e){var r=!1,i=[],n={tasks:i,payload:e,saturated:null,empty:null,drain:null,drained:!0,push:function(t,r){h(t)||(t=[t]),u(t,function(t){i.push({data:t,callback:"function"==typeof r?r:null}),n.drained=!1,n.saturated&&i.length===e&&n.saturated()}),s.setImmediate(n.process)},process:function o(){if(!r){if(0===i.length)return n.drain&&!n.drained&&n.drain(),void(n.drained=!0);var s="number"==typeof e?i.splice(0,e):i.splice(0,i.length),a=l(s,function(t){return t.data});n.empty&&n.empty(),r=!0,t(a,function(){r=!1;var t=arguments;u(s,function(e){e.callback&&e.callback.apply(null,t)}),o()})}},length:function(){return i.length},running:function(){return r}};return n};var S=function(t){return function(e){var r=Array.prototype.slice.call(arguments,1);e.apply(null,r.concat([function(e){var r=Array.prototype.slice.call(arguments,1);"undefined"!=typeof console&&(e?console.error&&console.error(e):console[t]&&u(r,function(e){console[t](e)}))}]))}};s.log=S("log"),s.dir=S("dir"),s.memoize=function(t,e){var r={},i={};e=e||function(t){return t};var n=function(){var n=Array.prototype.slice.call(arguments),o=n.pop(),a=e.apply(null,n);a in r?s.nextTick(function(){o.apply(null,r[a])}):a in i?i[a].push(o):(i[a]=[o],t.apply(null,n.concat([function(){r[a]=arguments;var t=i[a];delete i[a];for(var e=0,n=t.length;n>e;e++)t[e].apply(null,arguments)}])))};return n.memo=r,n.unmemoized=t,n},s.unmemoize=function(t){return function(){return(t.unmemoized||t).apply(null,arguments)}},s.times=function(t,e,r){for(var i=[],n=0;t>n;n++)i.push(n);return s.map(i,e,r)},s.timesSeries=function(t,e,r){for(var i=[],n=0;t>n;n++)i.push(n);return s.mapSeries(i,e,r)},s.seq=function(){var t=arguments;return function(){var e=this,r=Array.prototype.slice.call(arguments),i=r.pop();s.reduce(t,r,function(t,r,i){r.apply(e,t.concat([function(){var t=arguments[0],e=Array.prototype.slice.call(arguments,1);i(t,e)}]))},function(t,r){i.apply(e,[t].concat(r))})}},s.compose=function(){return s.seq.apply(null,Array.prototype.reverse.call(arguments))};var w=function(t,e){var r=function(){var r=this,i=Array.prototype.slice.call(arguments),n=i.pop();return t(e,function(t,e){t.apply(r,i.concat([e]))},n)};if(arguments.length>2){var i=Array.prototype.slice.call(arguments,2);return r.apply(this,i)}return r};s.applyEach=f(w),s.applyEachSeries=g(w),s.forever=function(t,e){function r(i){if(i){if(e)return e(i);throw i}t(r)}r()},"undefined"!=typeof r&&r.exports?r.exports=s:"undefined"!=typeof t&&t.amd?t([],function(){return s}):n.async=s}()}).call(this,e("_process"))},{_process:18}],28:[function(t,e,r){function i(t,e){a.call(this),e=e||10,this.baseUrl=t||"",this.progress=0,this.loading=!1,this._progressChunk=0,this._beforeMiddleware=[],this._afterMiddleware=[],this._boundLoadResource=this._loadResource.bind(this),this._boundOnLoad=this._onLoad.bind(this),this._buffer=[],this._numToLoad=0,this._queue=n.queue(this._boundLoadResource,e),this.resources={}}var n=t("async"),o=t("url"),s=t("./Resource"),a=t("eventemitter3");i.prototype=Object.create(a.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.add=i.prototype.enqueue=function(t,e,r,i){if(Array.isArray(t)){for(var n=0;n0)if(this.xhrType===i.XHR_RESPONSE_TYPE.TEXT)this.data=t.responseText;else if(this.xhrType===i.XHR_RESPONSE_TYPE.JSON)try{this.data=JSON.parse(t.responseText),this.isJson=!0}catch(r){this.error=new Error("Error trying to parse loaded json:",r)}else if(this.xhrType===i.XHR_RESPONSE_TYPE.DOCUMENT)try{if(window.DOMParser){var n=new DOMParser;this.data=n.parseFromString(t.responseText,"text/xml")}else{var o=document.createElement("div");o.innerHTML=t.responseText,this.data=o}this.isXml=!0}catch(r){this.error=new Error("Error trying to parse loaded xml:",r)}else this.data=t.response||t.responseText;else this.error=new Error("["+t.status+"]"+t.statusText+":"+t.responseURL);this.complete()},i.prototype._determineCrossOrigin=function(t,e){if(0===t.indexOf("data:"))return"";e=e||window.location,u||(u=document.createElement("a")),u.href=t,t=a.parse(u.href);var r=!t.port&&""===e.port||t.port===e.port;return t.hostname===e.hostname&&r&&t.protocol===e.protocol?"":"anonymous"},i.prototype._determineXhrType=function(){return i._xhrTypeMap[this._getExtension()]||i.XHR_RESPONSE_TYPE.TEXT},i.prototype._determineLoadType=function(){return i._loadTypeMap[this._getExtension()]||i.LOAD_TYPE.XHR},i.prototype._getExtension=function(){var t,e=this.url;if(this.isDataUrl){var r=e.indexOf("/");t=e.substring(r+1,e.indexOf(";",r))}else{var i=e.indexOf("?");-1!==i&&(e=e.substring(0,i)),t=e.substring(e.lastIndexOf(".")+1)}return t},i.prototype._getMimeFromXhrType=function(t){switch(t){case i.XHR_RESPONSE_TYPE.BUFFER:return"application/octet-binary";case i.XHR_RESPONSE_TYPE.BLOB:return"application/blob";case i.XHR_RESPONSE_TYPE.DOCUMENT:return"application/xml";case i.XHR_RESPONSE_TYPE.JSON:return"application/json";case i.XHR_RESPONSE_TYPE.DEFAULT:case i.XHR_RESPONSE_TYPE.TEXT:default:return"text/plain"}},i.LOAD_TYPE={XHR:1,IMAGE:2,AUDIO:3,VIDEO:4},i.XHR_READY_STATE={UNSENT:0,OPENED:1,HEADERS_RECEIVED:2,LOADING:3,DONE:4},i.XHR_RESPONSE_TYPE={DEFAULT:"text",BUFFER:"arraybuffer",BLOB:"blob",DOCUMENT:"document",JSON:"json",TEXT:"text"},i._loadTypeMap={gif:i.LOAD_TYPE.IMAGE,png:i.LOAD_TYPE.IMAGE,bmp:i.LOAD_TYPE.IMAGE,jpg:i.LOAD_TYPE.IMAGE,jpeg:i.LOAD_TYPE.IMAGE,tif:i.LOAD_TYPE.IMAGE,tiff:i.LOAD_TYPE.IMAGE,webp:i.LOAD_TYPE.IMAGE,tga:i.LOAD_TYPE.IMAGE},i._xhrTypeMap={xhtml:i.XHR_RESPONSE_TYPE.DOCUMENT,html:i.XHR_RESPONSE_TYPE.DOCUMENT,htm:i.XHR_RESPONSE_TYPE.DOCUMENT,xml:i.XHR_RESPONSE_TYPE.DOCUMENT,tmx:i.XHR_RESPONSE_TYPE.DOCUMENT,tsx:i.XHR_RESPONSE_TYPE.DOCUMENT,svg:i.XHR_RESPONSE_TYPE.DOCUMENT,gif:i.XHR_RESPONSE_TYPE.BLOB,png:i.XHR_RESPONSE_TYPE.BLOB,bmp:i.XHR_RESPONSE_TYPE.BLOB,jpg:i.XHR_RESPONSE_TYPE.BLOB,jpeg:i.XHR_RESPONSE_TYPE.BLOB,tif:i.XHR_RESPONSE_TYPE.BLOB,tiff:i.XHR_RESPONSE_TYPE.BLOB,webp:i.XHR_RESPONSE_TYPE.BLOB,tga:i.XHR_RESPONSE_TYPE.BLOB,json:i.XHR_RESPONSE_TYPE.JSON,text:i.XHR_RESPONSE_TYPE.TEXT,txt:i.XHR_RESPONSE_TYPE.TEXT},i.setExtensionLoadType=function(t,e){o(i._loadTypeMap,t,e)},i.setExtensionXhrType=function(t,e){o(i._xhrTypeMap,t,e)}},{eventemitter3:25,url:23}],30:[function(t,e,r){e.exports={_keyStr:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",encodeBinary:function(t){for(var e,r="",i=new Array(4),n=0,o=0,s=0;n>2,i[1]=(3&e[0])<<4|e[1]>>4,i[2]=(15&e[1])<<2|e[2]>>6,i[3]=63&e[2],s=n-(t.length-1)){case 2:i[3]=64,i[2]=64;break;case 1:i[3]=64}for(o=0;o","Richard Davey "],main:"./src/index.js",homepage:"http://goodboydigital.com/",bugs:"https://github.com/pixijs/pixi.js/issues",license:"MIT",repository:{type:"git",url:"https://github.com/pixijs/pixi.js.git"},scripts:{start:"gulp && gulp watch",test:"gulp && testem ci",build:"gulp",docs:"jsdoc -c ./gulp/util/jsdoc.conf.json -R README.md"},files:["bin/","src/","CONTRIBUTING.md","LICENSE","package.json","README.md"],dependencies:{async:"^1.5.0",brfs:"^1.4.1",earcut:"^2.0.7",eventemitter3:"^1.1.1","object-assign":"^4.0.1","pixi-gl-core":"git+https://github.com/GoodBoyDigital/pixi-gl-core.git","resource-loader":"^1.6.4"},devDependencies:{browserify:"^11.1.0",chai:"^3.2.0",del:"^2.0.2",gulp:"^3.9.0","gulp-cached":"^1.1.0","gulp-concat":"^2.6.0","gulp-debug":"^2.1.0","gulp-header":"^1.7.1","gulp-jshint":"^1.11.2","gulp-mirror":"^0.4.0","gulp-plumber":"^1.0.1","gulp-rename":"^1.2.2","gulp-sourcemaps":"^1.5.2","gulp-uglify":"^1.4.1","gulp-util":"^3.0.6","jaguarjs-jsdoc":"git+https://github.com/davidshimjs/jaguarjs-jsdoc.git",jsdoc:"^3.3.2","jshint-summary":"^0.4.0",minimist:"^1.2.0",mocha:"^2.3.2","require-dir":"^0.3.0","run-sequence":"^1.1.2",testem:"^0.9.4","vinyl-buffer":"^1.0.0","vinyl-source-stream":"^1.1.0",watchify:"^3.4.0"},browserify:{transform:["brfs"]}}},{}],35:[function(t,e,r){function i(t){var e=document.createElement("div");e.style.width="100px",e.style.height="100px",e.style.position="absolute",e.style.top=0,e.style.left=0,e.style.zIndex=2,this.div=e,this.pool=[],this.renderId=0,this.debug=!1,this.renderer=t,this.children=[],this._onKeyDown=this._onKeyDown.bind(this),this._onMouseMove=this._onMouseMove.bind(this),this.isActive=!1,window.addEventListener("keydown",this._onKeyDown,!1)}var n=t("../core");Object.assign(n.DisplayObject.prototype,t("./accessibleTarget")),i.prototype.constructor=i,e.exports=i,i.prototype.activate=function(){this.isActive||(this.isActive=!0,window.document.addEventListener("mousemove",this._onMouseMove,!0),window.removeEventListener("keydown",this._onKeyDown,!1),this.renderer.on("postrender",this.update,this),this.renderer.view.parentNode.appendChild(this.div))},i.prototype.deactivate=function(){this.isActive&&(this.isActive=!1,window.document.removeEventListener("mousemove",this._onMouseMove),window.addEventListener("keydown",this._onKeyDown,!1),this.renderer.off("postrender",this.update),this.div.parentNode.removeChild(this.div))},i.prototype.updateAccessibleObjects=function(t){if(t.visible){t.accessible&&t.interactive&&(t._accessibleActive||this.addChild(t),t.renderId=this.renderId);for(var e=t.children,r=e.length-1;r>=0;r--)this.updateAccessibleObjects(e[r])}},i.prototype.update=function(){this.updateAccessibleObjects(this.renderer._lastObjectRendered);var t=this.renderer.view.getBoundingClientRect(),e=t.width/this.renderer.width,r=t.height/this.renderer.height,i=this.div;i.style.left=t.left+"px",i.style.top=t.top+"px",i.style.width=this.renderer.width+"px",i.style.height=this.renderer.height+"px";for(var o=0;othis.renderer.width&&(t.width=this.renderer.width-t.x),t.y+t.height>this.renderer.height&&(t.height=this.renderer.height-t.y)},i.prototype.addChild=function(t){var e=this.pool.pop();e||(e=document.createElement("button"),e.style.width="100px",e.style.height="100px",e.style.backgroundColor=this.debug?"rgba(255,0,0,0.5)":"transparent",e.style.position="absolute",e.style.zIndex=2,e.style.borderStyle="none",e.addEventListener("click",this._onClick.bind(this)),e.addEventListener("focus",this._onFocus.bind(this)),e.addEventListener("focusout",this._onFocusOut.bind(this))),e.title=t.accessibleTitle||"displayObject "+this.tabIndex,t._accessibleActive=!0,t._accessibleDiv=e,e.displayObject=t,this.children.push(t),this.div.appendChild(t._accessibleDiv),t._accessibleDiv.tabIndex=t.tabIndex},i.prototype._onClick=function(t){var e=this.renderer.plugins.interaction;e.dispatchEvent(t.target.displayObject,"click",e.eventData)},i.prototype._onFocus=function(t){var e=this.renderer.plugins.interaction;e.dispatchEvent(t.target.displayObject,"mouseover",e.eventData)},i.prototype._onFocusOut=function(t){var e=this.renderer.plugins.interaction;e.dispatchEvent(t.target.displayObject,"mouseout",e.eventData)},i.prototype._onKeyDown=function(t){9===t.keyCode&&this.activate()},i.prototype._onMouseMove=function(){this.deactivate()},i.prototype.destroy=function(){this.div=null;for(var t=0;t1)for(var r=0;e>r;r++)this.addChild(arguments[r]);else t.parent&&t.parent.removeChild(t),t.parent=this,this.children.push(t),this.onChildrenChange(this.children.length-1),t.emit("added",this);return t},i.prototype.addChildAt=function(t,e){if(e>=0&&e<=this.children.length)return t.parent&&t.parent.removeChild(t),t.parent=this,this.children.splice(e,0,t),this.onChildrenChange(e),t.emit("added",this),t;throw new Error(t+"addChildAt: The index "+e+" supplied is out of bounds "+this.children.length)},i.prototype.swapChildren=function(t,e){if(t!==e){var r=this.getChildIndex(t),i=this.getChildIndex(e);if(0>r||0>i)throw new Error("swapChildren: Both the supplied DisplayObjects must be children of the caller.");this.children[r]=e,this.children[i]=t,this.onChildrenChange(i>r?r:i)}},i.prototype.getChildIndex=function(t){var e=this.children.indexOf(t);if(-1===e)throw new Error("The supplied DisplayObject must be a child of the caller");return e},i.prototype.setChildIndex=function(t,e){if(0>e||e>=this.children.length)throw new Error("The supplied index is out of bounds");var r=this.getChildIndex(t);o.removeItems(this.children,r,1),this.children.splice(e,0,t),this.onChildrenChange(e)},i.prototype.getChildAt=function(t){if(0>t||t>=this.children.length)throw new Error("getChildAt: Supplied index "+t+" does not exist in the child list, or the supplied DisplayObject is not a child of the caller");return this.children[t]},i.prototype.removeChild=function(t){var e=arguments.length;if(e>1)for(var r=0;e>r;r++)this.removeChild(arguments[r]);else{var i=this.children.indexOf(t);if(-1===i)return;t.parent=null,o.removeItems(this.children,i,1),this.onChildrenChange(i),t.emit("removed",this)}return t},i.prototype.removeChildAt=function(t){var e=this.getChildAt(t);return e.parent=null,o.removeItems(this.children,t,1),this.onChildrenChange(t),e.emit("removed",this),e},i.prototype.removeChildren=function(t,e){var r,i,n=t||0,o="number"==typeof e?e:this.children.length,s=o-n;if(s>0&&o>=s){for(r=this.children.splice(n,s),i=0;it;++t)this.children[t].updateTransform();this.dirtyTransform=!1}},i.prototype.containerUpdateTransform=i.prototype.updateTransform,i.prototype.getBounds=function(){if(!this._currentBounds){if(0===this.children.length)return n.Rectangle.EMPTY;for(var t,e,r,i=1/0,o=1/0,s=-(1/0),a=-(1/0),h=!1,u=0,l=this.children.length;l>u;++u){var c=this.children[u];c.visible&&(h=!0,t=this.children[u].getBounds(),i=ie?s:e,a=a>r?a:r)}if(!h)return n.Rectangle.EMPTY;var p=this._bounds;p.x=i,p.y=o,p.width=s-i,p.height=a-o,this._currentBounds=p}return this._currentBounds},i.prototype.containerGetBounds=i.prototype.getBounds,i.prototype.getLocalBounds=function(){var t=this.worldTransform;this.worldTransform=n.Matrix.IDENTITY;for(var e=0,r=this.children.length;r>e;++e)this.children[e].updateTransform();return this.worldTransform=t,this._currentBounds=null,this.getBounds(n.Matrix.IDENTITY)},i.prototype.renderWebGL=function(t){if(this.visible&&!(this.worldAlpha<=0)&&this.renderable){var e,r;if(this._mask||this._filters){for(t.currentRenderer.flush(),this._filters&&this._filters.length&&t.filterManager.pushFilter(this,this._filters),this._mask&&t.maskManager.pushMask(this,this._mask),t.currentRenderer.start(),this._renderWebGL(t),e=0,r=this.children.length;r>e;e++)this.children[e].renderWebGL(t);t.currentRenderer.flush(),this._mask&&t.maskManager.popMask(this,this._mask),this._filters&&t.filterManager.popFilter(),t.currentRenderer.start()}else for(this._renderWebGL(t),e=0,r=this.children.length;r>e;++e)this.children[e].renderWebGL(t)}},i.prototype._renderWebGL=function(t){},i.prototype._renderCanvas=function(t){},i.prototype.renderCanvas=function(t){if(this.visible&&!(this.alpha<=0)&&this.renderable){this._mask&&t.maskManager.pushMask(this._mask,t),this._renderCanvas(t);for(var e=0,r=this.children.length;r>e;++e)this.children[e].renderCanvas(t);this._mask&&t.maskManager.popMask(t)}},i.prototype.destroy=function(t){if(s.prototype.destroy.call(this),t)for(var e=0,r=this.children.length;r>e;++e)this.children[e].destroy(t);this.removeChildren(),this.children=null}},{"../math":55,"../textures/RenderTexture":98,"../utils":105,"./DisplayObject":40}],40:[function(t,e,r){function i(){s.call(this),this.position=new n.Point,this._position=new u(this),this.scale=new n.Point(1,1),this.pivot=new n.Point(0,0),this.skew=new n.Point(0,0),this._rotation=0,this.alpha=1,this.visible=!0,this.renderable=!0,this.parent=null,this.worldAlpha=1,this.worldTransform=new n.Matrix,this.localTransform=new n.Matrix,this.filterArea=null,this._sr=0,this._cr=1,this._bounds=new n.Rectangle(0,0,1,1),this._currentBounds=null,this._mask=null,this.dirtyTransform=!0}var n=t("../math"),o=t("../textures/RenderTexture"),s=t("eventemitter3"),a=(t("../const"),new n.Matrix),h={worldTransform:new n.Matrix,worldAlpha:1,children:[]};i.prototype=Object.create(s.prototype),i.prototype.constructor=i,e.exports=i;var u=function(t){this.doc=t,this.x=0,this.y=0};Object.defineProperties(u.prototype,{x:{get:function(){return this.doc.position.x},set:function(t){this.doc.position.x=t,this.doc.dirtyTransform=!0}},y:{get:function(){return this.doc.posiiton.y},set:function(t){this.doc.position.y=t,this.doc.dirtyTransform=!0}}}),Object.defineProperties(i.prototype,{x:{get:function(){return this.position.x},set:function(t){this.position.x=t,this.dirtyTransform=!0}},y:{get:function(){return this.position.y},set:function(t){this.position.y=t,this.dirtyTransform=!0}},scaleX:{get:function(){return this.scale.x},set:function(t){this.scale.x=t,this.dirtyTransform=!0}},scaleY:{get:function(){return this.scale.y},set:function(t){this.scale.y=t,this.dirtyTransform=!0}},rotation:{get:function(){return this._rotation},set:function(t){this._rotation=t,this.dirtyTransform=!0,this._sr=Math.sin(t),this._cr=Math.cos(t)}},scaleY:{get:function(){return this.scale.y},set:function(t){this.scale.y=t,this.dirtyTransform=!0}},worldVisible:{get:function(){var t=this;do{if(!t.visible)return!1;t=t.parent}while(t);return!0}},mask:{get:function(){return this._mask},set:function(t){this._mask&&(this._mask.renderable=!0),this._mask=t,this._mask&&(this._mask.renderable=!1)}},filters:{get:function(){return this._filters&&this._filters.slice()},set:function(t){this._filters=t&&t.slice()}}}),i.prototype.updateTransform=function(){var t=this.parent.worldTransform,e=this.worldTransform,r=this.localTransform;this.dirtyTransform&&(r.a=this._cr*this.scale.x,r.b=this._sr*this.scale.x,r.c=-this._sr*this.scale.y,r.d=this._cr*this.scale.y,r.tx=this.position.x-(this.pivot.x*r.a+this.pivot.y*r.c),r.ty=this.position.y-(this.pivot.x*r.b+this.pivot.y*r.d)),(this.dirtyTransform||this.parent.dirtyTransform)&&(e.a=r.a*t.a+r.b*t.c,e.b=r.a*t.b+r.b*t.d,e.c=r.c*t.a+r.d*t.c,e.d=r.c*t.b+r.d*t.d,e.tx=r.tx*t.a+r.ty*t.c+t.tx,e.ty=r.tx*t.b+r.ty*t.d+t.ty,this._currentBounds=null),this.worldAlpha=this.alpha*this.parent.worldAlpha},i.prototype.displayObjectUpdateTransform=i.prototype.updateTransform,i.prototype.getBounds=function(t){return n.Rectangle.EMPTY},i.prototype.getLocalBounds=function(){return this.getBounds(n.Matrix.IDENTITY)},i.prototype.toGlobal=function(t){return this.parent?this.displayObjectUpdateTransform():(this.parent=h,this.displayObjectUpdateTransform(),this.parent=null),this.worldTransform.apply(t)},i.prototype.toLocal=function(t,e,r){return e&&(t=e.toGlobal(t)),this.parent?this.displayObjectUpdateTransform():(this.parent=h,this.displayObjectUpdateTransform(),this.parent=null),this.worldTransform.applyInverse(t,r)},i.prototype.renderWebGL=function(t){},i.prototype.renderCanvas=function(t){},i.prototype.generateTexture=function(t,e,r){var i=this.getLocalBounds(),n=new o(t,0|i.width,0|i.height,e,r);return a.tx=-i.x,a.ty=-i.y,n.render(this,a),n},i.prototype.setParent=function(t){if(!t||!t.addChild)throw new Error("setParent: Argument must be a Container");return t.addChild(this),t},i.prototype.setTransform=function(t,e,r,i,n,o,s,a,h){return this.position.x=t||0,this.position.y=e||0,this.scale.x=r?r:1,this.scale.y=i?i:1,this.rotation=n||0,this.skew.x=o||0,this.skew.y=s||0,this.pivot.x=a||0,this.pivot.y=h||0,this.dirtyTransform=!0,this},i.prototype.destroy=function(){this.position=null,this.scale=null,this.pivot=null,this.skew=null,this.parent=null,this._bounds=null,this._currentBounds=null,this._mask=null,this.worldTransform=null,this.filterArea=null}},{"../const":38,"../math":55,"../textures/RenderTexture":98,eventemitter3:25}],41:[function(t,e,r){function i(){n.call(this),this.fillAlpha=1,this.lineWidth=0,this.lineColor=0,this.graphicsData=[],this.tint=16777215,this._prevTint=16777215,this.blendMode=l.BLEND_MODES.NORMAL,this.currentPath=null,this._webGL={},this.isMask=!1,this.boundsPadding=0,this._localBounds=new u.Rectangle(0,0,1,1),this.dirty=!0,this.glDirty=!1,this.boundsDirty=!0,this.cachedSpriteDirty=!1}var n=t("../display/Container"),o=t("../textures/Texture"),s=t("../renderers/canvas/utils/CanvasBuffer"),a=t("../renderers/canvas/utils/CanvasGraphics"),h=t("./GraphicsData"),u=t("../math"),l=t("../const"),c=new u.Point;i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.clone=function(){var t=new i;t.renderable=this.renderable,t.fillAlpha=this.fillAlpha,t.lineWidth=this.lineWidth,t.lineColor=this.lineColor,t.tint=this.tint,t.blendMode=this.blendMode,t.isMask=this.isMask,t.boundsPadding=this.boundsPadding,t.dirty=!0,t.glDirty=!0,t.cachedSpriteDirty=this.cachedSpriteDirty;for(var e=0;e=c;++c)l=c/s,n=h+(t-h)*l,o=u+(e-u)*l,a.push(n+(t+(r-t)*l-n)*l,o+(e+(i-e)*l-o)*l);return this.dirty=this.boundsDirty=!0,this},i.prototype.bezierCurveTo=function(t,e,r,i,n,o){this.currentPath?0===this.currentPath.shape.points.length&&(this.currentPath.shape.points=[0,0]):this.moveTo(0,0);for(var s,a,h,u,l,c=20,p=this.currentPath.shape.points,d=p[p.length-2],f=p[p.length-1],v=0,g=1;c>=g;++g)v=g/c,s=1-v,a=s*s,h=a*s,u=v*v,l=u*v,p.push(h*d+3*a*v*t+3*s*u*r+l*n,h*f+3*a*v*e+3*s*u*i+l*o);return this.dirty=this.boundsDirty=!0,this},i.prototype.arcTo=function(t,e,r,i,n){this.currentPath?0===this.currentPath.shape.points.length&&this.currentPath.shape.points.push(t,e):this.moveTo(t,e);var o=this.currentPath.shape.points,s=o[o.length-2],a=o[o.length-1],h=a-e,u=s-t,l=i-e,c=r-t,p=Math.abs(h*c-u*l);if(1e-8>p||0===n)(o[o.length-2]!==t||o[o.length-1]!==e)&&o.push(t,e);else{var d=h*h+u*u,f=l*l+c*c,v=h*l+u*c,g=n*Math.sqrt(d)/p,m=n*Math.sqrt(f)/p,y=g*v/d,x=m*v/f,b=g*c+m*u,_=g*l+m*h,T=u*(m+y),E=h*(m+y),S=c*(g+x),w=l*(g+x),C=Math.atan2(E-_,T-b),A=Math.atan2(w-_,S-b);this.arc(b+t,_+e,n,C,A,u*l>c*h)}return this.dirty=this.boundsDirty=!0,this},i.prototype.arc=function(t,e,r,i,n,o){if(o=o||!1,i===n)return this;!o&&i>=n?n+=2*Math.PI:o&&n>=i&&(i+=2*Math.PI);var s=o?-1*(i-n):n-i,a=40*Math.ceil(Math.abs(s)/(2*Math.PI));if(0===s)return this;var h=t+Math.cos(i)*r,u=e+Math.sin(i)*r;this.currentPath?this.currentPath.shape.points.push(h,u):this.moveTo(h,u);for(var l=this.currentPath.shape.points,c=s/(2*a),p=2*c,d=Math.cos(c),f=Math.sin(c),v=a-1,g=v%1/v,m=0;v>=m;m++){var y=m+g*m,x=c+i+p*y,b=Math.cos(x),_=-Math.sin(x);l.push((d*b+f*_)*r+t,(d*-_+f*b)*r+e)}return this.dirty=this.boundsDirty=!0,this},i.prototype.beginFill=function(t,e){return this.filling=!0,this.fillColor=t||0,this.fillAlpha=void 0===e?1:e,this.currentPath&&this.currentPath.shape.points.length<=2&&(this.currentPath.fill=this.filling,this.currentPath.fillColor=this.fillColor,this.currentPath.fillAlpha=this.fillAlpha),this},i.prototype.endFill=function(){return this.filling=!1,this.fillColor=null,this.fillAlpha=1,this},i.prototype.drawRect=function(t,e,r,i){return this.drawShape(new u.Rectangle(t,e,r,i)),this},i.prototype.drawRoundedRect=function(t,e,r,i,n){return this.drawShape(new u.RoundedRectangle(t,e,r,i,n)),this},i.prototype.drawCircle=function(t,e,r){return this.drawShape(new u.Circle(t,e,r)),this},i.prototype.drawEllipse=function(t,e,r,i){return this.drawShape(new u.Ellipse(t,e,r,i)),this},i.prototype.drawPolygon=function(t){var e=t,r=!0;if(e instanceof u.Polygon&&(r=e.closed,e=e.points),!Array.isArray(e)){e=new Array(arguments.length);for(var i=0;ig?g:S,S=S>y?y:S,S=S>b?b:S,w=w>m?m:w,w=w>x?x:w,w=w>_?_:w,T=g>T?g:T,T=y>T?y:T,T=b>T?b:T,E=m>E?m:E,E=x>E?x:E,E=_>E?_:E,this._bounds.x=S,this._bounds.width=T-S,this._bounds.y=w,this._bounds.height=E-w,this._currentBounds=this._bounds}return this._currentBounds},i.prototype.containsPoint=function(t){this.worldTransform.applyInverse(t,c); +for(var e=this.graphicsData,r=0;rs?s:t,e=s+h>e?s+h:e,r=r>a?a:r,i=a+u>i?a+u:i;else if(d===l.SHAPES.CIRC)s=n.x,a=n.y,h=n.radius+f/2,u=n.radius+f/2,t=t>s-h?s-h:t,e=s+h>e?s+h:e,r=r>a-u?a-u:r,i=a+u>i?a+u:i;else if(d===l.SHAPES.ELIP)s=n.x,a=n.y,h=n.width+f/2,u=n.height+f/2,t=t>s-h?s-h:t,e=s+h>e?s+h:e,r=r>a-u?a-u:r,i=a+u>i?a+u:i;else{o=n.points;for(var v=0;vs-f?s-f:t,e=s+f>e?s+f:e,r=r>a-f?a-f:r,i=a+f>i?a+f:i}}else t=0,e=0,r=0,i=0;var g=this.boundsPadding;this._localBounds.x=t-g,this._localBounds.width=e-t+2*g,this._localBounds.y=r-g,this._localBounds.height=i-r+2*g},i.prototype.drawShape=function(t){this.currentPath&&this.currentPath.shape.points.length<=2&&this.graphicsData.pop(),this.currentPath=null;var e=new h(this.lineWidth,this.lineColor,this.lineAlpha,this.fillColor,this.fillAlpha,this.filling,t);return this.graphicsData.push(e),e.type===l.SHAPES.POLY&&(e.shape.closed=e.shape.closed||this.filling,this.currentPath=e),this.dirty=this.boundsDirty=!0,e},i.prototype.destroy=function(){n.prototype.destroy.apply(this,arguments);for(var t=0;ts;s++)e=o.data[s],1===o.data[s].mode||(shader=this.primitiveShader,r.bindShader(shader),shader.uniforms.translationMatrix=t.worldTransform.toArray(!0),shader.uniforms.tint=n.hex2rgb(t.tint),shader.uniforms.alpha=t.worldAlpha,i.bindBuffer(i.ARRAY_BUFFER,e.buffer),shader=this.primitiveShader,shader.attributes.aVertexPosition.pointer(i.FLOAT,!1,24,0),shader.attributes.aColor.pointer(i.FLOAT,!1,24,8),i.enableVertexAttribArray(shader.attributes.aVertexPosition.location),i.enableVertexAttribArray(shader.attributes.aColor.location),i.bindBuffer(i.ELEMENT_ARRAY_BUFFER,e.indexBuffer),i.drawElements(i.TRIANGLE_STRIP,e.indices.length,i.UNSIGNED_SHORT,0)),r.drawCount++},i.prototype.updateGraphics=function(t){var e=this.renderer.gl,r=t._webGL[e.id];r||(r=t._webGL[e.id]={lastIndex:0,data:[],gl:e}),t.dirty=!1;var i;if(t.clearDirty){for(t.clearDirty=!1,i=0;i=6)if(a.points.length<2*this.maximumSimplePolySize){s=this.switchMode(r,0);var h=buildPoly(a,s);h||(s=this.switchMode(r,1),buildComplexPoly(a,s))}else s=this.switchMode(r,1),buildComplexPoly(a,s);a.lineWidth>0&&(s=this.switchMode(r,0),l(a,s))}else s=this.switchMode(r,0),a.type===o.SHAPES.RECT?buildRectangle(a,s):a.type===o.SHAPES.CIRC||a.type===o.SHAPES.ELIP?buildCircle(a,s):a.type===o.SHAPES.RREC&&buildRoundedRectangle(a,s);r.lastIndex++}for(i=0;i32e4||r.mode!==e||1===e)&&(r=this.graphicsDataPool.pop()||new h(t.gl),r.mode=e,t.data.push(r))):(r=this.graphicsDataPool.pop()||new h(t.gl),r.mode=e,t.data.push(r)),r.dirty=!0,r}},{"../../const":38,"../../math":55,"../../renderers/webgl/WebGLRenderer":72,"../../renderers/webgl/utils/ObjectRenderer":87,"../../utils":105,"./WebGLGraphicsData":44,"./shaders/PrimitiveShader":45,"./utils/buildCircle":46,"./utils/buildComplexPoly":47,"./utils/buildLine":48,"./utils/buildPoly":49,"./utils/buildRectangle":50,"./utils/buildRoundedRectangle":51,earcut:24}],44:[function(t,e,r){function i(t){this.gl=t,this.color=[0,0,0],this.points=[],this.indices=[],this.buffer=t.createBuffer(),this.indexBuffer=t.createBuffer(),this.mode=1,this.alpha=1,this.dirty=!0,this.glPoints=null,this.glIndices=null}i.prototype.constructor=i,e.exports=i,i.prototype.reset=function(){this.points.length=0,this.indices.length=0},i.prototype.upload=function(){var t=this.gl;this.glPoints=new Float32Array(this.points),t.bindBuffer(t.ARRAY_BUFFER,this.buffer),t.bufferData(t.ARRAY_BUFFER,this.glPoints,t.STATIC_DRAW),this.glIndices=new Uint16Array(this.indices),t.bindBuffer(t.ELEMENT_ARRAY_BUFFER,this.indexBuffer),t.bufferData(t.ELEMENT_ARRAY_BUFFER,this.glIndices,t.STATIC_DRAW),this.dirty=!1},i.prototype.destroy=function(){this.color=null,this.points=null,this.indices=null,this.gl.deleteBuffer(this.buffer),this.gl.deleteBuffer(this.indexBuffer),this.gl=null,this.buffer=null,this.indexBuffer=null,this.glPoints=null,this.glIndices=null}},{}],45:[function(t,e,r){function i(t){n.call(this,t,["attribute vec2 aVertexPosition;","attribute vec4 aColor;","uniform mat3 translationMatrix;","uniform mat3 projectionMatrix;","uniform float alpha;","uniform float flipY;","uniform vec3 tint;","varying vec4 vColor;","void main(void){"," gl_Position = vec4((projectionMatrix * translationMatrix * vec3(aVertexPosition, 1.0)).xy, 0.0, 1.0);"," vColor = aColor * vec4(tint * alpha, alpha);","}"].join("\n"),["precision mediump float;","varying vec4 vColor;","void main(void){"," gl_FragColor = vColor;","}"].join("\n"))}var n=t("pixi-gl-core").GLShader;i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i},{"pixi-gl-core":1}],46:[function(t,e,r){var i=t("./buildLine"),n=t("../../../utils"),o=function(t,e){var r,o,s=t.shape,a=s.x,h=s.y;t.type===CONST.SHAPES.CIRC?(r=s.radius,o=s.radius):(r=s.width,o=s.height);var u=Math.floor(30*Math.sqrt(s.radius))||Math.floor(15*Math.sqrt(s.width+s.height)),l=2*Math.PI/u,c=0;if(t.fill){var p=n.hex2rgb(t.fillColor),d=t.fillAlpha,f=p[0]*d,v=p[1]*d,g=p[2]*d,m=e.points,y=e.indices,x=m.length/6;for(y.push(x),c=0;u+1>c;c++)m.push(a,h,f,v,g,d),m.push(a+Math.sin(l*c)*r,h+Math.cos(l*c)*o,f,v,g,d),y.push(x++,x++);y.push(x-1)}if(t.lineWidth){var b=t.points;for(t.points=[],c=0;u+1>c;c++)t.points.push(a+Math.sin(l*c)*r,h+Math.cos(l*c)*o);i(t,e),t.points=b}};e.exports=o},{"../../../utils":105,"./buildLine":48}],47:[function(t,e,r){var i=(t("./buildLine"),t("../../../utils")),n=function(t,e){var r=t.points.slice();if(!(r.length<6)){var n=e.indices;e.points=r,e.alpha=t.fillAlpha,e.color=i.hex2rgb(t.fillColor);for(var o,s,a=1/0,h=-(1/0),u=1/0,l=-(1/0),c=0;co?o:a,h=o>h?o:h,u=u>s?s:u,l=s>l?s:l;r.push(a,u,h,u,h,l,a,l);var p=r.length/2;for(c=0;p>c;c++)n.push(c)}};e.exports=n},{"../../../utils":105,"./buildLine":48}],48:[function(t,e,r){var i=t("../../../math"),n=t("../../../utils"),o=function(t,e){var r=0,o=t.points;if(0!==o.length){var s=new i.Point(o[0],o[1]),a=new i.Point(o[o.length-2],o[o.length-1]);if(s.x===a.x&&s.y===a.y){o=o.slice(),o.pop(),o.pop(),a=new i.Point(o[o.length-2],o[o.length-1]);var h=a.x+.5*(s.x-a.x),u=a.y+.5*(s.y-a.y);o.unshift(h,u),o.push(h,u)}var l,c,p,d,f,v,g,m,y,x,b,_,T,E,S,w,C,A,M,R,O,P,D,F=e.points,L=e.indices,B=o.length/2,I=o.length,N=F.length/6,U=t.lineWidth/2,k=n.hex2rgb(t.lineColor),j=t.lineAlpha,G=k[0]*j,X=k[1]*j,Y=k[2]*j;for(p=o[0],d=o[1],f=o[2],v=o[3],y=-(d-v),x=p-f,D=Math.sqrt(y*y+x*x),y/=D,x/=D,y*=U,x*=U,F.push(p-y,d-x,G,X,Y,j),F.push(p+y,d+x,G,X,Y,j),r=1;B-1>r;r++)p=o[2*(r-1)],d=o[2*(r-1)+1],f=o[2*r],v=o[2*r+1],g=o[2*(r+1)],m=o[2*(r+1)+1],y=-(d-v),x=p-f,D=Math.sqrt(y*y+x*x),y/=D,x/=D,y*=U,x*=U,b=-(v-m),_=f-g,D=Math.sqrt(b*b+_*_),b/=D,_/=D,b*=U,_*=U,S=-x+d-(-x+v),w=-y+f-(-y+p),C=(-y+p)*(-x+v)-(-y+f)*(-x+d),A=-_+m-(-_+v),M=-b+f-(-b+g),R=(-b+g)*(-_+v)-(-b+f)*(-_+m),O=S*M-A*w,Math.abs(O)<.1?(O+=10.1,F.push(f-y,v-x,G,X,Y,j),F.push(f+y,v+x,G,X,Y,j)):(l=(w*R-M*C)/O,c=(A*C-S*R)/O,P=(l-f)*(l-f)+(c-v)*(c-v),P>19600?(T=y-b,E=x-_,D=Math.sqrt(T*T+E*E),T/=D,E/=D,T*=U,E*=U,F.push(f-T,v-E),F.push(G,X,Y,j),F.push(f+T,v+E),F.push(G,X,Y,j),F.push(f-T,v-E),F.push(G,X,Y,j),I++):(F.push(l,c),F.push(G,X,Y,j),F.push(f-(l-f),v-(c-v)),F.push(G,X,Y,j)));for(p=o[2*(B-2)],d=o[2*(B-2)+1],f=o[2*(B-1)],v=o[2*(B-1)+1],y=-(d-v),x=p-f,D=Math.sqrt(y*y+x*x),y/=D,x/=D,y*=U,x*=U,F.push(f-y,v-x),F.push(G,X,Y,j),F.push(f+y,v+x),F.push(G,X,Y,j),L.push(N),r=0;I>r;r++)L.push(N++);L.push(N-1)}};e.exports=o},{"../../../math":55,"../../../utils":105}],49:[function(t,e,r){var i=t("../../../utils"),n=function(t,e){var r=t.points;if(!(r.length<6)){var n=e.points,o=e.indices,s=r.length/2,a=i.hex2rgb(t.fillColor),h=t.fillAlpha,u=a[0]*h,l=a[1]*h,c=a[2]*h,p=earcut(r,null,2);if(!p)return!1;var d=n.length/6,f=0;for(f=0;ff;f++)n.push(r[2*f],r[2*f+1],u,l,c,h);return!0}};e.exports=n},{"../../../utils":105}],50:[function(t,e,r){var i=t("./buildLine"),n=t("../../../utils"),o=function(t,e){var r=t.shape,o=r.x,s=r.y,a=r.width,h=r.height;if(t.fill){var u=n.hex2rgb(t.fillColor),l=t.fillAlpha,c=u[0]*l,p=u[1]*l,d=u[2]*l,f=e.points,v=e.indices,g=f.length/6;f.push(o,s),f.push(c,p,d,l),f.push(o+a,s),f.push(c,p,d,l),f.push(o,s+h),f.push(c,p,d,l),f.push(o+a,s+h),f.push(c,p,d,l),v.push(g,g,g+1,g+2,g+3,g+3)}if(t.lineWidth){var m=t.points;t.points=[o,s,o+a,s,o+a,s+h,o,s+h,o,s],i(t,e),t.points=m}};e.exports=o},{"../../../utils":105,"./buildLine":48}],51:[function(t,e,r){var i=(t("./buildLine"),t("../../../utils"));buildRoundedRectangle=function(t,e){var r=t.shape,n=r.x,o=r.y,s=r.width,a=r.height,h=r.radius,u=[];if(u.push(n,o+h),this.quadraticBezierCurve(n,o+a-h,n,o+a,n+h,o+a,u),this.quadraticBezierCurve(n+s-h,o+a,n+s,o+a,n+s,o+a-h,u),this.quadraticBezierCurve(n+s,o+h,n+s,o,n+s-h,o,u),this.quadraticBezierCurve(n+h,o,n,o,n,o+h+1e-10,u),t.fill){var l=i.hex2rgb(t.fillColor),c=t.fillAlpha,p=l[0]*c,d=l[1]*c,f=l[2]*c,v=e.points,g=e.indices,m=v.length/6,y=earcut(u,null,2),x=0;for(x=0;x=m;m++)g=m/f,h=a(t,r,g),u=a(e,i,g),l=a(r,n,g),c=a(i,o,g),p=a(h,l,g),d=a(u,c,g),v.push(p,d);return v},e.exports=buildRoundedRectangle},{"../../../utils":105,"./buildLine":48}],52:[function(t,e,r){var i=e.exports=Object.assign(t("./const"),t("./math"),{utils:t("./utils"),ticker:t("./ticker"),DisplayObject:t("./display/DisplayObject"),Container:t("./display/Container"),Sprite:t("./sprites/Sprite"),ParticleContainer:t("./particles/ParticleContainer"),SpriteRenderer:t("./sprites/webgl/SpriteRenderer"),ParticleRenderer:t("./particles/webgl/ParticleRenderer"),Text:t("./text/Text"),Graphics:t("./graphics/Graphics"),GraphicsData:t("./graphics/GraphicsData"),GraphicsRenderer:t("./graphics/webgl/GraphicsRenderer"),Texture:t("./textures/Texture"),BaseTexture:t("./textures/BaseTexture"),RenderTexture:t("./textures/RenderTexture"),VideoBaseTexture:t("./textures/VideoBaseTexture"),TextureUvs:t("./textures/TextureUvs"),CanvasRenderer:t("./renderers/canvas/CanvasRenderer"),CanvasGraphics:t("./renderers/canvas/utils/CanvasGraphics"),CanvasBuffer:t("./renderers/canvas/utils/CanvasBuffer"),WebGLRenderer:t("./renderers/webgl/WebGLRenderer"),WebGLManager:t("./renderers/webgl/managers/WebGLManager"),ShaderManager:t("./renderers/webgl/managers/ShaderManager"),Shader:t("./renderers/webgl/shaders/Shader"),ObjectRenderer:t("./renderers/webgl/utils/ObjectRenderer"),RenderTarget:t("./renderers/webgl/utils/RenderTarget"),AbstractFilter:t("./renderers/webgl/filters/AbstractFilter"),FXAAFilter:t("./renderers/webgl/filters/FXAAFilter"),SpriteMaskFilter:t("./renderers/webgl/filters/SpriteMaskFilter"),glCore:t("pixi-gl-core"),autoDetectRenderer:function(t,e,r,n){return t=t||800,e=e||600,!n&&i.utils.isWebGLSupported()?new i.WebGLRenderer(t,e,r):new i.CanvasRenderer(t,e,r)}})},{"./const":38,"./display/Container":39,"./display/DisplayObject":40,"./graphics/Graphics":41,"./graphics/GraphicsData":42,"./graphics/webgl/GraphicsRenderer":43,"./math":55,"./particles/ParticleContainer":61,"./particles/webgl/ParticleRenderer":63,"./renderers/canvas/CanvasRenderer":66,"./renderers/canvas/utils/CanvasBuffer":67,"./renderers/canvas/utils/CanvasGraphics":68,"./renderers/webgl/WebGLRenderer":72,"./renderers/webgl/filters/AbstractFilter":73,"./renderers/webgl/filters/FXAAFilter":74,"./renderers/webgl/filters/SpriteMaskFilter":75,"./renderers/webgl/managers/ShaderManager":79,"./renderers/webgl/managers/WebGLManager":81,"./renderers/webgl/shaders/Shader":84,"./renderers/webgl/utils/ObjectRenderer":87,"./renderers/webgl/utils/RenderTarget":89,"./sprites/Sprite":93,"./sprites/webgl/SpriteRenderer":94,"./text/Text":96,"./textures/BaseTexture":97,"./textures/RenderTexture":98,"./textures/Texture":99,"./textures/TextureUvs":100,"./textures/VideoBaseTexture":101,"./ticker":103,"./utils":105,"pixi-gl-core":1}],53:[function(t,e,r){function i(){this.a=1,this.b=0,this.c=0,this.d=1,this.tx=0,this.ty=0}var n=t("./Point");i.prototype.constructor=i,e.exports=i,i.prototype.fromArray=function(t){this.a=t[0],this.b=t[1],this.c=t[3],this.d=t[4],this.tx=t[2],this.ty=t[5]},i.prototype.set=function(t,e,r,i,n,o){return this.a=t,this.b=e,this.c=r,this.d=i,this.tx=n,this.ty=o,this},i.prototype.toArray=function(t,e){this.array||(this.array=new Float32Array(9));var r=e||this.array;return t?(r[0]=this.a,r[1]=this.b,r[2]=0,r[3]=this.c,r[4]=this.d,r[5]=0,r[6]=this.tx,r[7]=this.ty,r[8]=1):(r[0]=this.a,r[1]=this.c,r[2]=this.tx,r[3]=this.b,r[4]=this.d,r[5]=this.ty,r[6]=0,r[7]=0,r[8]=1),r},i.prototype.apply=function(t,e){e=e||new n;var r=t.x,i=t.y;return e.x=this.a*r+this.c*i+this.tx,e.y=this.b*r+this.d*i+this.ty,e},i.prototype.applyInverse=function(t,e){e=e||new n;var r=1/(this.a*this.d+this.c*-this.b),i=t.x,o=t.y;return e.x=this.d*r*i+-this.c*r*o+(this.ty*this.c-this.tx*this.d)*r,e.y=this.a*r*o+-this.b*r*i+(-this.ty*this.a+this.tx*this.b)*r,e},i.prototype.translate=function(t,e){return this.tx+=t,this.ty+=e,this},i.prototype.scale=function(t,e){return this.a*=t,this.d*=e,this.c*=t,this.b*=e,this.tx*=t,this.ty*=e,this},i.prototype.rotate=function(t){var e=Math.cos(t),r=Math.sin(t),i=this.a,n=this.c,o=this.tx;return this.a=i*e-this.b*r,this.b=i*r+this.b*e,this.c=n*e-this.d*r,this.d=n*r+this.d*e,this.tx=o*e-this.ty*r,this.ty=o*r+this.ty*e,this},i.prototype.append=function(t){var e=this.a,r=this.b,i=this.c,n=this.d;return this.a=t.a*e+t.b*i,this.b=t.a*r+t.b*n,this.c=t.c*e+t.d*i,this.d=t.c*r+t.d*n,this.tx=t.tx*e+t.ty*i+this.tx,this.ty=t.tx*r+t.ty*n+this.ty,this},i.prototype.setTransform=function(t,e,r,i,n,o,s,a,h){var u,l,c,p,d,f,v,g,m,y;return d=Math.sin(s),f=Math.cos(s),v=Math.cos(h),g=Math.sin(h),m=-Math.sin(a),y=Math.cos(a),u=f*n,l=d*n,c=-d*o,p=f*o,this.a=v*u+g*c,this.b=v*l+g*p,this.c=m*u+y*c,this.d=m*l+y*p,this.tx=t+(r*u+i*c),this.ty=e+(r*l+i*p),this},i.prototype.prepend=function(t){var e=this.tx;if(1!==t.a||0!==t.b||0!==t.c||1!==t.d){var r=this.a,i=this.c;this.a=r*t.a+this.b*t.c,this.b=r*t.b+this.b*t.d,this.c=i*t.a+this.d*t.c,this.d=i*t.b+this.d*t.d}return this.tx=e*t.a+this.ty*t.c+t.tx,this.ty=e*t.b+this.ty*t.d+t.ty,this},i.prototype.invert=function(){var t=this.a,e=this.b,r=this.c,i=this.d,n=this.tx,o=t*i-e*r;return this.a=i/o,this.b=-e/o,this.c=-r/o,this.d=t/o,this.tx=(r*this.ty-i*n)/o,this.ty=-(t*this.ty-e*n)/o,this},i.prototype.identity=function(){return this.a=1,this.b=0,this.c=0,this.d=1,this.tx=0,this.ty=0,this},i.prototype.clone=function(){var t=new i;return t.a=this.a,t.b=this.b,t.c=this.c,t.d=this.d,t.tx=this.tx,t.ty=this.ty,t},i.prototype.copy=function(t){return t.a=this.a,t.b=this.b,t.c=this.c,t.d=this.d,t.tx=this.tx,t.ty=this.ty,t},i.IDENTITY=new i,i.TEMP_MATRIX=new i},{"./Point":54}],54:[function(t,e,r){function i(t,e){this.x=t||0,this.y=e||0}i.prototype.constructor=i,e.exports=i,i.prototype.clone=function(){return new i(this.x,this.y)},i.prototype.copy=function(t){this.set(t.x,t.y)},i.prototype.equals=function(t){return t.x===this.x&&t.y===this.y},i.prototype.set=function(t,e){this.x=t||0,this.y=e||(0!==e?this.x:0)}},{}],55:[function(t,e,r){e.exports={Point:t("./Point"),Matrix:t("./Matrix"),Circle:t("./shapes/Circle"),Ellipse:t("./shapes/Ellipse"),Polygon:t("./shapes/Polygon"),Rectangle:t("./shapes/Rectangle"),RoundedRectangle:t("./shapes/RoundedRectangle")}},{"./Matrix":53,"./Point":54,"./shapes/Circle":56,"./shapes/Ellipse":57,"./shapes/Polygon":58,"./shapes/Rectangle":59,"./shapes/RoundedRectangle":60}],56:[function(t,e,r){function i(t,e,r){this.x=t||0,this.y=e||0,this.radius=r||0,this.type=o.SHAPES.CIRC}var n=t("./Rectangle"),o=t("../../const");i.prototype.constructor=i,e.exports=i,i.prototype.clone=function(){return new i(this.x,this.y,this.radius)},i.prototype.contains=function(t,e){if(this.radius<=0)return!1;var r=this.x-t,i=this.y-e,n=this.radius*this.radius;return r*=r,i*=i,n>=r+i},i.prototype.getBounds=function(){return new n(this.x-this.radius,this.y-this.radius,2*this.radius,2*this.radius)}},{"../../const":38,"./Rectangle":59}],57:[function(t,e,r){function i(t,e,r,i){this.x=t||0,this.y=e||0,this.width=r||0,this.height=i||0,this.type=o.SHAPES.ELIP}var n=t("./Rectangle"),o=t("../../const");i.prototype.constructor=i,e.exports=i,i.prototype.clone=function(){return new i(this.x,this.y,this.width,this.height)},i.prototype.contains=function(t,e){if(this.width<=0||this.height<=0)return!1;var r=(t-this.x)/this.width,i=(e-this.y)/this.height;return r*=r,i*=i,1>=r+i},i.prototype.getBounds=function(){return new n(this.x-this.width,this.y-this.height,this.width,this.height)}},{"../../const":38,"./Rectangle":59}],58:[function(t,e,r){function i(t){var e=t;if(!Array.isArray(e)){e=new Array(arguments.length);for(var r=0;rs;s++)i.push(e[s].x,e[s].y);e=i}this.closed=!0,this.points=e,this.type=o.SHAPES.POLY}var n=t("../Point"),o=t("../../const");i.prototype.constructor=i,e.exports=i,i.prototype.clone=function(){return new i(this.points.slice())},i.prototype.contains=function(t,e){for(var r=!1,i=this.points.length/2,n=0,o=i-1;i>n;o=n++){var s=this.points[2*n],a=this.points[2*n+1],h=this.points[2*o],u=this.points[2*o+1],l=a>e!=u>e&&(h-s)*(e-a)/(u-a)+s>t;l&&(r=!r)}return r}},{"../../const":38,"../Point":54}],59:[function(t,e,r){function i(t,e,r,i){this.x=t||0,this.y=e||0,this.width=r||0,this.height=i||0,this.type=n.SHAPES.RECT}var n=t("../../const");i.prototype.constructor=i,e.exports=i,i.EMPTY=new i(0,0,0,0),i.prototype.clone=function(){return new i(this.x,this.y,this.width,this.height)},i.prototype.contains=function(t,e){return this.width<=0||this.height<=0?!1:t>=this.x&&t=this.y&&e=this.x&&t<=this.x+this.width&&e>=this.y&&e<=this.y+this.height?!0:!1}},{"../../const":38}],61:[function(t,e,r){function i(t,e,r){n.call(this),r=r||15e3,t=t||15e3;var i=16384;r>i&&(r=i),r>t&&(r=t),this._properties=[!1,!0,!1,!1,!1],this._maxSize=t,this._batchSize=r,this._buffers=null,this._bufferToUpdate=0,this.interactiveChildren=!1,this.blendMode=o.BLEND_MODES.NORMAL,this.roundPixels=!0,this.setProperties(e)}var n=t("../display/Container"),o=t("../const");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.setProperties=function(t){t&&(this._properties[0]="scale"in t?!!t.scale:this._properties[0],this._properties[1]="position"in t?!!t.position:this._properties[1],this._properties[2]="rotation"in t?!!t.rotation:this._properties[2],this._properties[3]="uvs"in t?!!t.uvs:this._properties[3],this._properties[4]="alpha"in t?!!t.alpha:this._properties[4])},i.prototype.updateTransform=function(){this.displayObjectUpdateTransform()},i.prototype.renderWebGL=function(t){this.visible&&!(this.worldAlpha<=0)&&this.children.length&&this.renderable&&(t.setObjectRenderer(t.plugins.particle),t.plugins.particle.render(this))},i.prototype.onChildrenChange=function(t){var e=Math.floor(t/this._batchSize);er;r+=6,i+=4)this.indices[r+0]=i+0,this.indices[r+1]=i+1,this.indices[r+2]=i+2,this.indices[r+3]=i+0,this.indices[r+4]=i+2,this.indices[r+5]=i+3;this.shader=null,this.indexBuffer=null,this.properties=null,this.tempMatrix=new h.Matrix}var n=t("../../renderers/webgl/utils/ObjectRenderer"),o=t("../../renderers/webgl/WebGLRenderer"),s=t("./ParticleShader"),a=t("./ParticleBuffer"),h=t("../../math");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,o.registerPlugin("particle",i),i.prototype.onContextChange=function(){var t=this.renderer.gl;this.shader=new s(this.renderer.shaderManager),this.indexBuffer=t.createBuffer(),t.bindBuffer(t.ELEMENT_ARRAY_BUFFER,this.indexBuffer),t.bufferData(t.ELEMENT_ARRAY_BUFFER,this.indices,t.STATIC_DRAW),this.properties=[{attribute:this.shader.attributes.aVertexPosition,size:2,uploadFunction:this.uploadVertices,offset:0},{attribute:this.shader.attributes.aPositionCoord,size:2,uploadFunction:this.uploadPosition,offset:0},{attribute:this.shader.attributes.aRotation,size:1,uploadFunction:this.uploadRotation,offset:0},{attribute:this.shader.attributes.aTextureCoord,size:2,uploadFunction:this.uploadUvs,offset:0},{attribute:this.shader.attributes.aColor,size:1,uploadFunction:this.uploadAlpha,offset:0}]},i.prototype.start=function(){var t=this.renderer.gl;t.activeTexture(t.TEXTURE0),t.bindBuffer(t.ELEMENT_ARRAY_BUFFER,this.indexBuffer);var e=this.shader;this.renderer.shaderManager.setShader(e)},i.prototype.render=function(t){var e=t.children,r=e.length,i=t._maxSize,n=t._batchSize;if(0!==r){r>i&&(r=i),t._buffers||(t._buffers=this.generateBuffers(t)),this.renderer.blendModeManager.setBlendMode(t.blendMode);var o=this.renderer.gl,s=t.worldTransform.copy(this.tempMatrix);s.prepend(this.renderer.currentRenderTarget.projectionMatrix),o.uniformMatrix3fv(this.shader.uniforms.projectionMatrix._location,!1,s.toArray(!0)),o.uniform1f(this.shader.uniforms.uAlpha._location,t.worldAlpha);var a=e[0]._texture.baseTexture;if(a._glTextures[o.id])o.bindTexture(o.TEXTURE_2D,a._glTextures[o.id]);else{if(!this.renderer.updateTexture(a))return;t._properties[0]&&t._properties[3]||(t._bufferToUpdate=0)}for(var h=0,u=0;r>h;h+=n,u+=1){var l=r-h;l>n&&(l=n);var c=t._buffers[u];c.uploadDynamic(e,h,l),t._bufferToUpdate===u&&(c.uploadStatic(e,h,l),t._bufferToUpdate=u+1),c.bind(this.shader),o.drawElements(o.TRIANGLES,6*l,o.UNSIGNED_SHORT,0),this.renderer.drawCount++}}},i.prototype.generateBuffers=function(t){var e,r=this.renderer.gl,i=[],n=t._maxSize,o=t._batchSize,s=t._properties;for(e=0;n>e;e+=o)i.push(new a(r,this.properties,s,o));return i},i.prototype.uploadVertices=function(t,e,r,i,n,o){for(var s,a,h,u,l,c,p,d,f,v=0;r>v;v++)s=t[e+v],a=s._texture,u=s.scale.x,l=s.scale.y,a.trim?(h=a.trim,p=h.x-s.anchor.x*h.width,c=p+a.crop.width,f=h.y-s.anchor.y*h.height,d=f+a.crop.height):(c=a._frame.width*(1-s.anchor.x),p=a._frame.width*-s.anchor.x,d=a._frame.height*(1-s.anchor.y),f=a._frame.height*-s.anchor.y),i[o]=p*u,i[o+1]=f*l,i[o+n]=c*u,i[o+n+1]=f*l,i[o+2*n]=c*u,i[o+2*n+1]=d*l,i[o+3*n]=p*u,i[o+3*n+1]=d*l,o+=4*n},i.prototype.uploadPosition=function(t,e,r,i,n,o){for(var s=0;r>s;s++){var a=t[e+s].position;i[o]=a.x,i[o+1]=a.y,i[o+n]=a.x,i[o+n+1]=a.y,i[o+2*n]=a.x,i[o+2*n+1]=a.y,i[o+3*n]=a.x,i[o+3*n+1]=a.y,o+=4*n}},i.prototype.uploadRotation=function(t,e,r,i,n,o){for(var s=0;r>s;s++){var a=t[e+s].rotation;i[o]=a,i[o+n]=a,i[o+2*n]=a,i[o+3*n]=a,o+=4*n}},i.prototype.uploadUvs=function(t,e,r,i,n,o){for(var s=0;r>s;s++){var a=t[e+s]._texture._uvs;a?(i[o]=a.x0,i[o+1]=a.y0,i[o+n]=a.x1,i[o+n+1]=a.y1,i[o+2*n]=a.x2,i[o+2*n+1]=a.y2,i[o+3*n]=a.x3,i[o+3*n+1]=a.y3,o+=4*n):(i[o]=0,i[o+1]=0,i[o+n]=0,i[o+n+1]=0,i[o+2*n]=0,i[o+2*n+1]=0,i[o+3*n]=0,i[o+3*n+1]=0,o+=4*n)}},i.prototype.uploadAlpha=function(t,e,r,i,n,o){for(var s=0;r>s;s++){var a=t[e+s].alpha;i[o]=a,i[o+n]=a,i[o+2*n]=a,i[o+3*n]=a,o+=4*n}},i.prototype.destroy=function(){this.renderer.gl&&this.renderer.gl.deleteBuffer(this.indexBuffer),n.prototype.destroy.apply(this,arguments),this.shader.destroy(),this.indices=null,this.tempMatrix=null}},{"../../math":55,"../../renderers/webgl/WebGLRenderer":72,"../../renderers/webgl/utils/ObjectRenderer":87,"./ParticleBuffer":62,"./ParticleShader":64}],64:[function(t,e,r){function i(t){n.call(this,t,["attribute vec2 aVertexPosition;","attribute vec2 aTextureCoord;","attribute float aColor;","attribute vec2 aPositionCoord;","attribute vec2 aScale;","attribute float aRotation;","uniform mat3 projectionMatrix;","varying vec2 vTextureCoord;","varying float vColor;","void main(void){"," vec2 v = aVertexPosition;"," v.x = (aVertexPosition.x) * cos(aRotation) - (aVertexPosition.y) * sin(aRotation);"," v.y = (aVertexPosition.x) * sin(aRotation) + (aVertexPosition.y) * cos(aRotation);"," v = v + aPositionCoord;"," gl_Position = vec4((projectionMatrix * vec3(v, 1.0)).xy, 0.0, 1.0);"," vTextureCoord = aTextureCoord;"," vColor = aColor;","}"].join("\n"),["precision lowp float;","varying vec2 vTextureCoord;","varying float vColor;","uniform sampler2D uSampler;","uniform float uAlpha;","void main(void){"," vec4 color = texture2D(uSampler, vTextureCoord) * vColor * uAlpha;"," if (color.a == 0.0) discard;"," gl_FragColor = color;","}"].join("\n"),{uAlpha:{type:"1f",value:1}},{aPositionCoord:0,aRotation:0})}var n=t("../../renderers/webgl/shaders/TextureShader");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i},{"../../renderers/webgl/shaders/TextureShader":85}],65:[function(t,e,r){ +function i(t,e,r,i){if(a.call(this),n.sayHello(t),i)for(var h in s.DEFAULT_RENDER_OPTIONS)"undefined"==typeof i[h]&&(i[h]=s.DEFAULT_RENDER_OPTIONS[h]);else i=s.DEFAULT_RENDER_OPTIONS;this.type=s.RENDERER_TYPE.UNKNOWN,this.width=e||800,this.height=r||600,this.view=i.view||document.createElement("canvas"),this.resolution=i.resolution,this.transparent=i.transparent,this.autoResize=i.autoResize||!1,this.blendModes=null,this.preserveDrawingBuffer=i.preserveDrawingBuffer,this.clearBeforeRender=i.clearBeforeRender,this.roundPixels=i.roundPixels,this._backgroundColor=0,this._backgroundColorRgba=[0,0,0,0],this._backgroundColorString="#000000",this.backgroundColor=i.backgroundColor||this._backgroundColor,this._tempDisplayObjectParent={worldTransform:new o.Matrix,worldAlpha:1,children:[]},this._lastObjectRendered=this._tempDisplayObjectParent}var n=t("../utils"),o=t("../math"),s=t("../const"),a=t("eventemitter3");i.prototype=Object.create(a.prototype),i.prototype.constructor=i,e.exports=i,Object.defineProperties(i.prototype,{backgroundColor:{get:function(){return this._backgroundColor},set:function(t){this._backgroundColor=t,this._backgroundColorString=n.hex2string(t),n.hex2rgb(t,this._backgroundColorRgba)}}}),i.prototype.resize=function(t,e){this.width=t*this.resolution,this.height=e*this.resolution,this.view.width=this.width,this.view.height=this.height,this.autoResize&&(this.view.style.width=this.width/this.resolution+"px",this.view.style.height=this.height/this.resolution+"px")},i.prototype.destroy=function(t){t&&this.view.parentNode&&this.view.parentNode.removeChild(this.view),this.type=s.RENDERER_TYPE.UNKNOWN,this.width=0,this.height=0,this.view=null,this.resolution=0,this.transparent=!1,this.autoResize=!1,this.blendModes=null,this.preserveDrawingBuffer=!1,this.clearBeforeRender=!1,this.roundPixels=!1,this._backgroundColor=0,this._backgroundColorRgba=null,this._backgroundColorString=null}},{"../const":38,"../math":55,"../utils":105,eventemitter3:25}],66:[function(t,e,r){function i(t,e,r){r=r||{},n.call(this,"Canvas",t,e,r),this.type=h.RENDERER_TYPE.CANVAS,this.context=this.view.getContext("2d",{alpha:this.transparent}),this.refresh=!0,this.maskManager=new o,this.smoothProperty="imageSmoothingEnabled",this.context.imageSmoothingEnabled||(this.context.webkitImageSmoothingEnabled?this.smoothProperty="webkitImageSmoothingEnabled":this.context.mozImageSmoothingEnabled?this.smoothProperty="mozImageSmoothingEnabled":this.context.oImageSmoothingEnabled?this.smoothProperty="oImageSmoothingEnabled":this.context.msImageSmoothingEnabled&&(this.smoothProperty="msImageSmoothingEnabled")),this.initPlugins(),this._mapBlendModes(),this._tempDisplayObjectParent={worldTransform:new a.Matrix,worldAlpha:1},this.resize(t,e)}var n=t("../SystemRenderer"),o=t("./utils/CanvasMaskManager"),s=t("../../utils"),a=t("../../math"),h=t("../../const");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,s.pluginTarget.mixin(i),i.prototype.render=function(t){this.emit("prerender");var e=t.parent;this._lastObjectRendered=t,t.parent=this._tempDisplayObjectParent,t.updateTransform(),t.parent=e,this.context.setTransform(1,0,0,1,0,0),this.context.globalAlpha=1,this.context.globalCompositeOperation=this.blendModes[h.BLEND_MODES.NORMAL],navigator.isCocoonJS&&this.view.screencanvas&&(this.context.fillStyle="black",this.context.clear()),this.clearBeforeRender&&(this.transparent?this.context.clearRect(0,0,this.width,this.height):(this.context.fillStyle=this._backgroundColorString,this.context.fillRect(0,0,this.width,this.height))),this.renderDisplayObject(t,this.context),this.emit("postrender")},i.prototype.destroy=function(t){this.destroyPlugins(),n.prototype.destroy.call(this,t),this.context=null,this.refresh=!0,this.maskManager.destroy(),this.maskManager=null,this.smoothProperty=null},i.prototype.renderDisplayObject=function(t,e){var r=this.context;this.context=e,t.renderCanvas(this),this.context=r},i.prototype.resize=function(t,e){n.prototype.resize.call(this,t,e),this.smoothProperty&&(this.context[this.smoothProperty]=h.SCALE_MODES.DEFAULT===h.SCALE_MODES.LINEAR)},i.prototype._mapBlendModes=function(){this.blendModes||(this.blendModes={},s.canUseNewCanvasBlendModes()?(this.blendModes[h.BLEND_MODES.NORMAL]="source-over",this.blendModes[h.BLEND_MODES.ADD]="lighter",this.blendModes[h.BLEND_MODES.MULTIPLY]="multiply",this.blendModes[h.BLEND_MODES.SCREEN]="screen",this.blendModes[h.BLEND_MODES.OVERLAY]="overlay",this.blendModes[h.BLEND_MODES.DARKEN]="darken",this.blendModes[h.BLEND_MODES.LIGHTEN]="lighten",this.blendModes[h.BLEND_MODES.COLOR_DODGE]="color-dodge",this.blendModes[h.BLEND_MODES.COLOR_BURN]="color-burn",this.blendModes[h.BLEND_MODES.HARD_LIGHT]="hard-light",this.blendModes[h.BLEND_MODES.SOFT_LIGHT]="soft-light",this.blendModes[h.BLEND_MODES.DIFFERENCE]="difference",this.blendModes[h.BLEND_MODES.EXCLUSION]="exclusion",this.blendModes[h.BLEND_MODES.HUE]="hue",this.blendModes[h.BLEND_MODES.SATURATION]="saturate",this.blendModes[h.BLEND_MODES.COLOR]="color",this.blendModes[h.BLEND_MODES.LUMINOSITY]="luminosity"):(this.blendModes[h.BLEND_MODES.NORMAL]="source-over",this.blendModes[h.BLEND_MODES.ADD]="lighter",this.blendModes[h.BLEND_MODES.MULTIPLY]="source-over",this.blendModes[h.BLEND_MODES.SCREEN]="source-over",this.blendModes[h.BLEND_MODES.OVERLAY]="source-over",this.blendModes[h.BLEND_MODES.DARKEN]="source-over",this.blendModes[h.BLEND_MODES.LIGHTEN]="source-over",this.blendModes[h.BLEND_MODES.COLOR_DODGE]="source-over",this.blendModes[h.BLEND_MODES.COLOR_BURN]="source-over",this.blendModes[h.BLEND_MODES.HARD_LIGHT]="source-over",this.blendModes[h.BLEND_MODES.SOFT_LIGHT]="source-over",this.blendModes[h.BLEND_MODES.DIFFERENCE]="source-over",this.blendModes[h.BLEND_MODES.EXCLUSION]="source-over",this.blendModes[h.BLEND_MODES.HUE]="source-over",this.blendModes[h.BLEND_MODES.SATURATION]="source-over",this.blendModes[h.BLEND_MODES.COLOR]="source-over",this.blendModes[h.BLEND_MODES.LUMINOSITY]="source-over"))}},{"../../const":38,"../../math":55,"../../utils":105,"../SystemRenderer":65,"./utils/CanvasMaskManager":69}],67:[function(t,e,r){function i(t,e){this.canvas=document.createElement("canvas"),this.context=this.canvas.getContext("2d"),this.canvas.width=t,this.canvas.height=e}i.prototype.constructor=i,e.exports=i,Object.defineProperties(i.prototype,{width:{get:function(){return this.canvas.width},set:function(t){this.canvas.width=t}},height:{get:function(){return this.canvas.height},set:function(t){this.canvas.height=t}}}),i.prototype.clear=function(){this.context.setTransform(1,0,0,1,0,0),this.context.clearRect(0,0,this.canvas.width,this.canvas.height)},i.prototype.resize=function(t,e){this.canvas.width=t,this.canvas.height=e},i.prototype.destroy=function(){this.context=null,this.canvas=null}},{}],68:[function(t,e,r){var i=t("../../../const"),n={};e.exports=n,n.renderGraphics=function(t,e){var r=t.worldAlpha;t.dirty&&(this.updateGraphicsTint(t),t.dirty=!1);for(var n=0;nA?A:C,e.beginPath(),e.moveTo(T,E+C),e.lineTo(T,E+w-C),e.quadraticCurveTo(T,E+w,T+C,E+w),e.lineTo(T+S-C,E+w),e.quadraticCurveTo(T+S,E+w,T+S,E+w-C),e.lineTo(T+S,E+C),e.quadraticCurveTo(T+S,E,T+S-C,E),e.lineTo(T+C,E),e.quadraticCurveTo(T,E,T,E+C),e.closePath(),(o.fillColor||0===o.fillColor)&&(e.globalAlpha=o.fillAlpha*r,e.fillStyle="#"+("00000"+(0|a).toString(16)).substr(-6),e.fill()),o.lineWidth&&(e.globalAlpha=o.lineAlpha*r,e.strokeStyle="#"+("00000"+(0|h).toString(16)).substr(-6),e.stroke())}}},n.renderGraphicsMask=function(t,e){var r=t.graphicsData.length;if(0!==r){e.beginPath();for(var n=0;r>n;n++){var o=t.graphicsData[n],s=o.shape;if(o.type===i.SHAPES.POLY){var a=s.points;e.moveTo(a[0],a[1]);for(var h=1;hw?w:S,e.moveTo(b,_+S),e.lineTo(b,_+E-S),e.quadraticCurveTo(b,_+E,b+S,_+E),e.lineTo(b+T-S,_+E),e.quadraticCurveTo(b+T,_+E,b+T,_+E-S),e.lineTo(b+T,_+S),e.quadraticCurveTo(b+T,_,b+T-S,_),e.lineTo(b+S,_),e.quadraticCurveTo(b,_,b,_+S),e.closePath()}}}},n.updateGraphicsTint=function(t){if(16777215!==t.tint||t._prevTint!==t.tint){t._prevTint=t.tint;for(var e=(t.tint>>16&255)/255,r=(t.tint>>8&255)/255,i=(255&t.tint)/255,n=0;n>16&255)/255*e*255<<16)+((s>>8&255)/255*r*255<<8)+(255&s)/255*i*255,o._lineTint=((a>>16&255)/255*e*255<<16)+((a>>8&255)/255*r*255<<8)+(255&a)/255*i*255}}}},{"../../../const":38}],69:[function(t,e,r){function i(){}var n=t("./CanvasGraphics");i.prototype.constructor=i,e.exports=i,i.prototype.pushMask=function(t,e){e.context.save();var r=t.alpha,i=t.worldTransform,o=e.resolution;e.context.setTransform(i.a*o,i.b*o,i.c*o,i.d*o,i.tx*o,i.ty*o),t.texture||(n.renderGraphicsMask(t,e.context),e.context.clip()),t.worldAlpha=r},i.prototype.popMask=function(t){t.context.restore()},i.prototype.destroy=function(){}},{"./CanvasGraphics":68}],70:[function(t,e,r){var i=t("../../../utils"),n={};e.exports=n,n.getTintedTexture=function(t,e){var r=t.texture;e=n.roundColor(e);var i="#"+("00000"+(0|e).toString(16)).substr(-6);if(r.tintCache=r.tintCache||{},r.tintCache[i])return r.tintCache[i];var o=n.canvas||document.createElement("canvas");if(n.tintMethod(r,e,o),n.convertTintToImage){var s=new Image;s.src=o.toDataURL(),r.tintCache[i]=s}else r.tintCache[i]=o,n.canvas=null;return o},n.tintWithMultiply=function(t,e,r){var i=r.getContext("2d"),n=t.baseTexture.resolution,o=t.crop.clone();o.x*=n,o.y*=n,o.width*=n,o.height*=n,r.width=o.width,r.height=o.height,i.fillStyle="#"+("00000"+(0|e).toString(16)).substr(-6),i.fillRect(0,0,o.width,o.height),i.globalCompositeOperation="multiply",i.drawImage(t.baseTexture.source,o.x,o.y,o.width,o.height,0,0,o.width,o.height),i.globalCompositeOperation="destination-atop",i.drawImage(t.baseTexture.source,o.x,o.y,o.width,o.height,0,0,o.width,o.height)},n.tintWithOverlay=function(t,e,r){var i=r.getContext("2d"),n=t.baseTexture.resolution,o=t.crop.clone();o.x*=n,o.y*=n,o.width*=n,o.height*=n,r.width=o.width,r.height=o.height,i.globalCompositeOperation="copy",i.fillStyle="#"+("00000"+(0|e).toString(16)).substr(-6),i.fillRect(0,0,o.width,o.height),i.globalCompositeOperation="destination-atop",i.drawImage(t.baseTexture.source,o.x,o.y,o.width,o.height,0,0,o.width,o.height)},n.tintWithPerPixel=function(t,e,r){var n=r.getContext("2d"),o=t.baseTexture.resolution,s=t.crop.clone();s.x*=o,s.y*=o,s.width*=o,s.height*=o,r.width=s.width,r.height=s.height,n.globalCompositeOperation="copy",n.drawImage(t.baseTexture.source,s.x,s.y,s.width,s.height,0,0,s.width,s.height);for(var a=i.hex2rgb(e),h=a[0],u=a[1],l=a[2],c=n.getImageData(0,0,s.width,s.height),p=c.data,d=0;de;++e)this.shaders[e].syncUniform(t)}},{"../shaders/TextureShader":85}],74:[function(t,e,r){function i(){n.call(this,"\nprecision mediump float;\n\nattribute vec2 aVertexPosition;\nattribute vec2 aTextureCoord;\nattribute vec4 aColor;\n\nuniform mat3 projectionMatrix;\nuniform vec2 resolution;\n\nvarying vec2 vTextureCoord;\nvarying vec4 vColor;\n\nvarying vec2 vResolution;\n\n//texcoords computed in vertex step\n//to avoid dependent texture reads\nvarying vec2 v_rgbNW;\nvarying vec2 v_rgbNE;\nvarying vec2 v_rgbSW;\nvarying vec2 v_rgbSE;\nvarying vec2 v_rgbM;\n\n\nvoid texcoords(vec2 fragCoord, vec2 resolution,\n out vec2 v_rgbNW, out vec2 v_rgbNE,\n out vec2 v_rgbSW, out vec2 v_rgbSE,\n out vec2 v_rgbM) {\n vec2 inverseVP = 1.0 / resolution.xy;\n v_rgbNW = (fragCoord + vec2(-1.0, -1.0)) * inverseVP;\n v_rgbNE = (fragCoord + vec2(1.0, -1.0)) * inverseVP;\n v_rgbSW = (fragCoord + vec2(-1.0, 1.0)) * inverseVP;\n v_rgbSE = (fragCoord + vec2(1.0, 1.0)) * inverseVP;\n v_rgbM = vec2(fragCoord * inverseVP);\n}\n\nvoid main(void){\n gl_Position = vec4((projectionMatrix * vec3(aVertexPosition, 1.0)).xy, 0.0, 1.0);\n vTextureCoord = aTextureCoord;\n vColor = vec4(aColor.rgb * aColor.a, aColor.a);\n vResolution = resolution;\n\n //compute the texture coords and send them to varyings\n texcoords(aTextureCoord * resolution, resolution, v_rgbNW, v_rgbNE, v_rgbSW, v_rgbSE, v_rgbM);\n}\n",'precision lowp float;\n\n\n/**\nBasic FXAA implementation based on the code on geeks3d.com with the\nmodification that the texture2DLod stuff was removed since it\'s\nunsupported by WebGL.\n\n--\n\nFrom:\nhttps://github.com/mitsuhiko/webgl-meincraft\n\nCopyright (c) 2011 by Armin Ronacher.\n\nSome rights reserved.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are\nmet:\n\n * Redistributions of source code must retain the above copyright\n notice, this list of conditions and the following disclaimer.\n\n * Redistributions in binary form must reproduce the above\n copyright notice, this list of conditions and the following\n disclaimer in the documentation and/or other materials provided\n with the distribution.\n\n * The names of the contributors may not be used to endorse or\n promote products derived from this software without specific\n prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\nLIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\nA PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\nOWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\nSPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\nLIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\nDATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\nTHEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\nOF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n*/\n\n#ifndef FXAA_REDUCE_MIN\n #define FXAA_REDUCE_MIN (1.0/ 128.0)\n#endif\n#ifndef FXAA_REDUCE_MUL\n #define FXAA_REDUCE_MUL (1.0 / 8.0)\n#endif\n#ifndef FXAA_SPAN_MAX\n #define FXAA_SPAN_MAX 8.0\n#endif\n\n//optimized version for mobile, where dependent\n//texture reads can be a bottleneck\nvec4 fxaa(sampler2D tex, vec2 fragCoord, vec2 resolution,\n vec2 v_rgbNW, vec2 v_rgbNE,\n vec2 v_rgbSW, vec2 v_rgbSE,\n vec2 v_rgbM) {\n vec4 color;\n mediump vec2 inverseVP = vec2(1.0 / resolution.x, 1.0 / resolution.y);\n vec3 rgbNW = texture2D(tex, v_rgbNW).xyz;\n vec3 rgbNE = texture2D(tex, v_rgbNE).xyz;\n vec3 rgbSW = texture2D(tex, v_rgbSW).xyz;\n vec3 rgbSE = texture2D(tex, v_rgbSE).xyz;\n vec4 texColor = texture2D(tex, v_rgbM);\n vec3 rgbM = texColor.xyz;\n vec3 luma = vec3(0.299, 0.587, 0.114);\n float lumaNW = dot(rgbNW, luma);\n float lumaNE = dot(rgbNE, luma);\n float lumaSW = dot(rgbSW, luma);\n float lumaSE = dot(rgbSE, luma);\n float lumaM = dot(rgbM, luma);\n float lumaMin = min(lumaM, min(min(lumaNW, lumaNE), min(lumaSW, lumaSE)));\n float lumaMax = max(lumaM, max(max(lumaNW, lumaNE), max(lumaSW, lumaSE)));\n\n mediump vec2 dir;\n dir.x = -((lumaNW + lumaNE) - (lumaSW + lumaSE));\n dir.y = ((lumaNW + lumaSW) - (lumaNE + lumaSE));\n\n float dirReduce = max((lumaNW + lumaNE + lumaSW + lumaSE) *\n (0.25 * FXAA_REDUCE_MUL), FXAA_REDUCE_MIN);\n\n float rcpDirMin = 1.0 / (min(abs(dir.x), abs(dir.y)) + dirReduce);\n dir = min(vec2(FXAA_SPAN_MAX, FXAA_SPAN_MAX),\n max(vec2(-FXAA_SPAN_MAX, -FXAA_SPAN_MAX),\n dir * rcpDirMin)) * inverseVP;\n\n vec3 rgbA = 0.5 * (\n texture2D(tex, fragCoord * inverseVP + dir * (1.0 / 3.0 - 0.5)).xyz +\n texture2D(tex, fragCoord * inverseVP + dir * (2.0 / 3.0 - 0.5)).xyz);\n vec3 rgbB = rgbA * 0.5 + 0.25 * (\n texture2D(tex, fragCoord * inverseVP + dir * -0.5).xyz +\n texture2D(tex, fragCoord * inverseVP + dir * 0.5).xyz);\n\n float lumaB = dot(rgbB, luma);\n if ((lumaB < lumaMin) || (lumaB > lumaMax))\n color = vec4(rgbA, texColor.a);\n else\n color = vec4(rgbB, texColor.a);\n return color;\n}\n\n\nvarying vec2 vTextureCoord;\nvarying vec4 vColor;\nvarying vec2 vResolution;\n\n//texcoords computed in vertex step\n//to avoid dependent texture reads\nvarying vec2 v_rgbNW;\nvarying vec2 v_rgbNE;\nvarying vec2 v_rgbSW;\nvarying vec2 v_rgbSE;\nvarying vec2 v_rgbM;\n\nuniform sampler2D uSampler;\n\n\nvoid main(void){\n\n gl_FragColor = fxaa(uSampler, vTextureCoord * vResolution, vResolution, v_rgbNW, v_rgbNE, v_rgbSW, v_rgbSE, v_rgbM);\n\n}\n',{resolution:{type:"v2",value:{x:1,y:1}}})}var n=t("./AbstractFilter");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.applyFilter=function(t,e,r){var i=t.filterManager,n=this.getShader(t);i.applyFilter(n,e,r)}},{"./AbstractFilter":73}],75:[function(t,e,r){function i(t){var e=new o.Matrix;n.call(this,"attribute vec2 aVertexPosition;\nattribute vec2 aTextureCoord;\nattribute vec4 aColor;\n\nuniform mat3 projectionMatrix;\nuniform mat3 otherMatrix;\n\nvarying vec2 vMaskCoord;\nvarying vec2 vTextureCoord;\nvarying vec4 vColor;\n\nvoid main(void)\n{\n gl_Position = vec4((projectionMatrix * vec3(aVertexPosition, 1.0)).xy, 0.0, 1.0);\n vTextureCoord = aTextureCoord;\n vMaskCoord = ( otherMatrix * vec3( aTextureCoord, 1.0) ).xy;\n vColor = vec4(aColor.rgb * aColor.a, aColor.a);\n}\n","precision lowp float;\n\nvarying vec2 vMaskCoord;\nvarying vec2 vTextureCoord;\nvarying vec4 vColor;\n\nuniform sampler2D uSampler;\nuniform float alpha;\nuniform sampler2D mask;\n\nvoid main(void)\n{\n // check clip! this will stop the mask bleeding out from the edges\n vec2 text = abs( vMaskCoord - 0.5 );\n text = step(0.5, text);\n float clip = 1.0 - max(text.y, text.x);\n vec4 original = texture2D(uSampler, vTextureCoord);\n vec4 masky = texture2D(mask, vMaskCoord);\n original *= (masky.r * masky.a * alpha * clip);\n gl_FragColor = original;\n}\n",{mask:{type:"sampler2D",value:t._texture},alpha:{type:"f",value:1},otherMatrix:{type:"mat3",value:e.toArray(!0)}}),this.maskSprite=t,this.maskMatrix=e}var n=t("./AbstractFilter"),o=t("../../../math");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.applyFilter=function(t,e,r){var i=t.filterManager;this.uniforms.mask.value=this.maskSprite._texture,i.calculateMappedMatrix(e.frame,this.maskSprite,this.maskMatrix),this.uniforms.otherMatrix.value=this.maskMatrix.toArray(!0),this.uniforms.alpha.value=this.maskSprite.worldAlpha;var n=this.getShader(t);i.applyFilter(n,e,r)},Object.defineProperties(i.prototype,{map:{get:function(){return this.uniforms.mask.value},set:function(t){this.uniforms.mask.value=t}},offset:{get:function(){return this.uniforms.offset.value},set:function(t){this.uniforms.offset.value=t}}})},{"../../../math":55,"./AbstractFilter":73}],76:[function(t,e,r){function i(t){n.call(this,t),this.currentBlendMode=99999}var n=t("./WebGLManager");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.setBlendMode=function(t){if(this.currentBlendMode===t)return!1;this.currentBlendMode=t;var e=this.renderer.blendModes[this.currentBlendMode];return this.renderer.gl.blendFunc(e[0],e[1]),!0}},{"./WebGLManager":81}],77:[function(t,e,r){function i(t){n.call(this,t),this.filterStack=[],this.filterStack.push({renderTarget:t.currentRenderTarget,filter:[],bounds:null}),this.texturePool=[],this.textureSize=new h.Rectangle(0,0,t.width,t.height),this.currentFrame=null}var n=t("./WebGLManager"),o=t("../utils/RenderTarget"),s=t("../../../const"),a=t("../utils/Quad"),h=t("../../../math");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.onContextChange=function(){this.texturePool.length=0;var t=this.renderer.gl;this.quad=new a(t)},i.prototype.setFilterStack=function(t){this.filterStack=t},i.prototype.pushFilter=function(t,e){var r=t.filterArea?t.filterArea.clone():t.getBounds();r.x=0|r.x,r.y=0|r.y,r.width=0|r.width,r.height=0|r.height;var i=0|e[0].padding;if(r.x-=i,r.y-=i,r.width+=2*i,r.height+=2*i,this.renderer.currentRenderTarget.transform){var n=this.renderer.currentRenderTarget.transform;r.x+=n.tx,r.y+=n.ty,this.capFilterArea(r),r.x-=n.tx,r.y-=n.ty}else this.capFilterArea(r);if(r.width>0&&r.height>0){this.currentFrame=r;var o=this.getRenderTarget();this.renderer.setRenderTarget(o),o.clear(),this.filterStack.push({renderTarget:o,filter:e})}else this.filterStack.push({renderTarget:null,filter:e})},i.prototype.popFilter=function(){var t=this.filterStack.pop(),e=this.filterStack[this.filterStack.length-1],r=t.renderTarget;if(t.renderTarget){var i=e.renderTarget,n=this.renderer.gl;this.currentFrame=r.frame,this.quad.map(this.textureSize,r.frame),n.bindBuffer(n.ARRAY_BUFFER,this.quad.vertexBuffer),n.bindBuffer(n.ELEMENT_ARRAY_BUFFER,this.quad.indexBuffer);var o=t.filter;if(n.vertexAttribPointer(this.renderer.shaderManager.defaultShader.attributes.aVertexPosition,2,n.FLOAT,!1,0,0),n.vertexAttribPointer(this.renderer.shaderManager.defaultShader.attributes.aTextureCoord,2,n.FLOAT,!1,0,32),n.vertexAttribPointer(this.renderer.shaderManager.defaultShader.attributes.aColor,4,n.FLOAT,!1,0,64),this.renderer.blendModeManager.setBlendMode(s.BLEND_MODES.NORMAL),1===o.length)o[0].uniforms.dimensions&&(o[0].uniforms.dimensions.value[0]=this.renderer.width,o[0].uniforms.dimensions.value[1]=this.renderer.height,o[0].uniforms.dimensions.value[2]=this.quad.vertices[0],o[0].uniforms.dimensions.value[3]=this.quad.vertices[5]),o[0].applyFilter(this.renderer,r,i),this.returnRenderTarget(r);else{for(var a=r,h=this.getRenderTarget(!0),u=0;uthis.textureSize.width&&(t.width=this.textureSize.width-t.x),t.y+t.height>this.textureSize.height&&(t.height=this.textureSize.height-t.y)},i.prototype.resize=function(t,e){this.textureSize.width=t,this.textureSize.height=e;for(var r=0;re;++e)t._array[2*e]=o[e].x,t._array[2*e+1]=o[e].y;s.uniform2fv(i,t._array);break;case"v3v":for(t._array||(t._array=new Float32Array(3*o.length)),e=0,r=o.length;r>e;++e)t._array[3*e]=o[e].x,t._array[3*e+1]=o[e].y,t._array[3*e+2]=o[e].z;s.uniform3fv(i,t._array);break;case"v4v":for(t._array||(t._array=new Float32Array(4*o.length)),e=0,r=o.length;r>e;++e)t._array[4*e]=o[e].x,t._array[4*e+1]=o[e].y,t._array[4*e+2]=o[e].z,t._array[4*e+3]=o[e].w;s.uniform4fv(i,t._array);break;case"t":case"sampler2D":if(!t.value||!t.value.baseTexture.hasLoaded)break;s.activeTexture(s["TEXTURE"+this.textureCount]);var a=t.value.baseTexture._glTextures[s.id];a||(this.initSampler2D(t),a=t.value.baseTexture._glTextures[s.id]),s.bindTexture(s.TEXTURE_2D,a),s.uniform1i(t._location,this.textureCount),this.textureCount++;break;default:console.warn("Pixi.js Shader Warning: Unknown uniform type: "+t.type)}},i.prototype.syncUniforms=function(){this.textureCount=1;for(var t in this.uniforms)this.syncUniform(this.uniforms[t])},i.prototype.initSampler2D=function(t){var e=this.gl,r=t.value.baseTexture;if(r.hasLoaded)if(t.textureData){var i=t.textureData;r._glTextures[e.id]=e.createTexture(),e.bindTexture(e.TEXTURE_2D,r._glTextures[e.id]),e.pixelStorei(e.UNPACK_PREMULTIPLY_ALPHA_WEBGL,r.premultipliedAlpha),e.texImage2D(e.TEXTURE_2D,0,i.luminance?e.LUMINANCE:e.RGBA,e.RGBA,e.UNSIGNED_BYTE,r.source),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MAG_FILTER,i.magFilter?i.magFilter:e.LINEAR),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MIN_FILTER,i.wrapS?i.wrapS:e.CLAMP_TO_EDGE),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,i.wrapS?i.wrapS:e.CLAMP_TO_EDGE),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,i.wrapT?i.wrapT:e.CLAMP_TO_EDGE)}else this.shaderManager.renderer.updateTexture(r)},i.prototype.destroy=function(){this.gl.deleteProgram(this.program),this.gl=null,this.uniforms=null,this.attributes=null,this.vertexSrc=null,this.fragmentSrc=null},i.prototype._glCompile=function(t,e){var r=this.gl.createShader(t);return this.gl.shaderSource(r,e),this.gl.compileShader(r),this.gl.getShaderParameter(r,this.gl.COMPILE_STATUS)?r:(console.log(this.gl.getShaderInfoLog(r)),null)}},{"../../../utils":105}],85:[function(t,e,r){function i(t,e,r,o,s){var a={uSampler:{type:"sampler2D",value:0},projectionMatrix:{type:"mat3",value:new Float32Array([1,0,0,0,1,0,0,0,1])}};if(o)for(var h in o)a[h]=o[h];var u={aVertexPosition:0,aTextureCoord:0,aColor:0};if(s)for(var l in s)u[l]=s[l];e=e||i.defaultVertexSrc,r=r||i.defaultFragmentSrc,n.call(this,t,e,r,a,u)}var n=t("./Shader");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.defaultVertexSrc=["precision lowp float;","attribute vec2 aVertexPosition;","attribute vec2 aTextureCoord;","attribute vec4 aColor;","uniform mat3 projectionMatrix;","varying vec2 vTextureCoord;","varying vec4 vColor;","void main(void){"," gl_Position = vec4((projectionMatrix * vec3(aVertexPosition, 1.0)).xy, 0.0, 1.0);"," vTextureCoord = aTextureCoord;"," vColor = vec4(aColor.rgb * aColor.a, aColor.a);","}"].join("\n"),i.defaultFragmentSrc=["precision lowp float;","varying vec2 vTextureCoord;","varying vec4 vColor;","uniform sampler2D uSampler;","void main(void){"," gl_FragColor = texture2D(uSampler, vTextureCoord) * vColor ;","}"].join("\n")},{"./Shader":84}],86:[function(t,e,r){function i(t){vertexSrc=i.defaultVertexSrc,fragmentSrc=i.defaultFragmentSrc,n.call(this,t,vertexSrc,fragmentSrc)}var n=t("pixi-gl-core").GLShader;i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.defaultVertexSrc=["precision lowp float;","attribute vec2 aVertexPosition;","attribute vec2 aTextureCoord;","attribute vec4 aColor;","uniform mat3 projectionMatrix;","varying vec2 vTextureCoord;","varying vec4 vColor;","void main(void){"," gl_Position = vec4((projectionMatrix * vec3(aVertexPosition, 1.0)).xy, 0.0, 1.0);"," vTextureCoord = aTextureCoord;"," vColor = vec4(aColor.rgb * aColor.a, aColor.a);","}"].join("\n"),i.defaultFragmentSrc=["precision lowp float;","varying vec2 vTextureCoord;","varying vec4 vColor;","uniform sampler2D uSampler;","void main(void){"," gl_FragColor = texture2D(uSampler, vTextureCoord) * vColor ;","}"].join("\n")},{"pixi-gl-core":1}],87:[function(t,e,r){function i(t){n.call(this,t)}var n=t("../managers/WebGLManager");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.start=function(){},i.prototype.stop=function(){this.flush()},i.prototype.flush=function(){},i.prototype.render=function(t){}},{"../managers/WebGLManager":81}],88:[function(t,e,r){function i(t){this.gl=t,this.vertices=new Float32Array([0,0,200,0,200,200,0,200]),this.uvs=new Float32Array([0,0,1,0,1,1,0,1]),this.colors=new Float32Array([1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]),this.indices=new Uint16Array([0,1,2,0,3,2]),this.vertexBuffer=t.createBuffer(),this.indexBuffer=t.createBuffer(),t.bindBuffer(t.ARRAY_BUFFER,this.vertexBuffer),t.bufferData(t.ARRAY_BUFFER,128,t.DYNAMIC_DRAW),t.bindBuffer(t.ELEMENT_ARRAY_BUFFER,this.indexBuffer),t.bufferData(t.ELEMENT_ARRAY_BUFFER,this.indices,t.STATIC_DRAW),this.upload()}i.prototype.constructor=i,i.prototype.map=function(t,e){var r=0,i=0;this.uvs[0]=r,this.uvs[1]=i,this.uvs[2]=r+e.width/t.width,this.uvs[3]=i,this.uvs[4]=r+e.width/t.width,this.uvs[5]=i+e.height/t.height,this.uvs[6]=r,this.uvs[7]=i+e.height/t.height,r=e.x,i=e.y,this.vertices[0]=r,this.vertices[1]=i,this.vertices[2]=r+e.width,this.vertices[3]=i,this.vertices[4]=r+e.width,this.vertices[5]=i+e.height,this.vertices[6]=r,this.vertices[7]=i+e.height,this.upload()},i.prototype.upload=function(){var t=this.gl;t.bindBuffer(t.ARRAY_BUFFER,this.vertexBuffer),t.bufferSubData(t.ARRAY_BUFFER,0,this.vertices),t.bufferSubData(t.ARRAY_BUFFER,32,this.uvs),t.bufferSubData(t.ARRAY_BUFFER,64,this.colors)},i.prototype.destroy=function(){var t=this.gl;t.deleteBuffer(this.vertexBuffer),t.deleteBuffer(this.indexBuffer)},e.exports=i},{}],89:[function(t,e,r){var i=t("../../../math"),n=(t("../../../utils"),t("../../../const")),o=t("pixi-gl-core").GLTexture,s=t("pixi-gl-core").GLFramebuffer,a=t("./StencilMaskStack"),h=function(t,e,r,h,u,l){if(this.gl=t,this.frameBuffer=null,this.texture=null,this.clearColor=[0,0,0,0],this.size=new i.Rectangle(0,0,1,1),this.resolution=u||n.RESOLUTION,this.projectionMatrix=new i.Matrix,this.transform=null,this.frame=null,this.stencilBuffer=null,this.stencilMaskStack=new a,this.filterStack=[{renderTarget:this,filter:[],bounds:this.size}],this.scaleMode=h||n.SCALE_MODES.DEFAULT,this.root=l,this.frameBuffer=s.createRGBA(t,100,100),this.frameBuffer&&this.frameBuffer.unbind(),this.root)this.frameBuffer.framebuffer=null;else{var c=new o(t);c.enableLinearScaling(),c.enableWrapClamp(),this.frameBuffer.enableTexture(c),this.texture=c.texture}this.resize(e,r)};h.prototype.constructor=h,e.exports=h,h.prototype.clear=function(t){var e=t||this.clearColor;this.frameBuffer.clear(e[0],e[1],e[2],e[3])},h.prototype.attachStencilBuffer=function(){this.root||this.frameBuffer.enableStencil()},h.prototype.activate=function(){var t=this.gl;this.frameBuffer.bind();var e=this.frame||this.size;this.calculateProjection(e),this.transform&&this.projectionMatrix.append(this.transform),t.viewport(0,0,e.width*this.resolution,e.height*this.resolution)},h.prototype.calculateProjection=function(t){var e=this.projectionMatrix;e.identity(),this.root?(e.a=1/t.width*2,e.d=-1/t.height*2,e.tx=-1-t.x*e.a,e.ty=1-t.y*e.d):(e.a=1/t.width*2,e.d=1/t.height*2,e.tx=-1-t.x*e.a,e.ty=-1-t.y*e.d)},h.prototype.resize=function(t,e){if(t=0|t,e=0|e,this.size.width!==t||this.size.height!==e){this.size.width=t,this.size.height=e,this.frameBuffer.resize(t*this.resolution,e*this.resolution);var r=this.frame||this.size;this.calculateProjection(r)}},h.prototype.destroy=function(){this.gl;this.frameBuffer.destroy(),this.frameBuffer=null,this.texture=null}},{"../../../const":38,"../../../math":55,"../../../utils":105,"./StencilMaskStack":90,"pixi-gl-core":1}],90:[function(t,e,r){function i(){this.stencilStack=[],this.reverse=!0,this.count=0}i.prototype.constructor=i,e.exports=i},{}],91:[function(t,e,r){function i(t,e){return e=e||{},e[CONST.BLEND_MODES.NORMAL]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.ADD]=[t.SRC_ALPHA,t.DST_ALPHA],e[CONST.BLEND_MODES.MULTIPLY]=[t.DST_COLOR,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.SCREEN]=[t.SRC_ALPHA,t.ONE],e[CONST.BLEND_MODES.OVERLAY]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.DARKEN]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.LIGHTEN]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.COLOR_DODGE]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.COLOR_BURN]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.HARD_LIGHT]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.SOFT_LIGHT]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.DIFFERENCE]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.EXCLUSION]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.HUE]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.SATURATION]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.COLOR]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.LUMINOSITY]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e}CONST=t("../../../const"),e.exports=i},{"../../../const":38}],92:[function(t,e,r){function i(t,e){e=e||{},e[CONST.DRAW_MODES.POINTS]=t.POINTS,e[CONST.DRAW_MODES.LINES]=t.LINES,e[CONST.DRAW_MODES.LINE_LOOP]=t.LINE_LOOP,e[CONST.DRAW_MODES.LINE_STRIP]=t.LINE_STRIP,e[CONST.DRAW_MODES.TRIANGLES]=t.TRIANGLES,e[CONST.DRAW_MODES.TRIANGLE_STRIP]=t.TRIANGLE_STRIP,e[CONST.DRAW_MODES.TRIANGLE_FAN]=t.TRIANGLE_FAN}CONST=t("../../../const"),e.exports=i},{"../../../const":38}],93:[function(t,e,r){function i(t){s.call(this),this.anchor=new n.Point,this._texture=null,this._width=0,this._height=0,this.tint=16777215,this.blendMode=u.BLEND_MODES.NORMAL,this.shader=null,this.cachedTint=16777215,this.texture=t||o.EMPTY,this.textureDirty=!0,this.vertexDirty=!0,this.vertexData=new Float32Array(8)}var n=t("../math"),o=t("../textures/Texture"),s=t("../display/Container"),a=t("../renderers/canvas/utils/CanvasTinter"),h=t("../utils"),u=t("../const"),l=new n.Point;i.prototype=Object.create(s.prototype),i.prototype.constructor=i,e.exports=i,Object.defineProperties(i.prototype,{width:{get:function(){return Math.abs(this.scale.x)*this.texture._frame.width},set:function(t){var e=h.sign(this.scale.x)||1;this.scale.x=e*t/this.texture._frame.width,this._width=t}},height:{get:function(){return Math.abs(this.scale.y)*this.texture._frame.height},set:function(t){var e=h.sign(this.scale.y)||1;this.scale.y=e*t/this.texture._frame.height,this._height=t}},texture:{get:function(){return this._texture},set:function(t){this._texture!==t&&(this._texture=t,this.cachedTint=16777215,this.textureDirty=!0,t&&(t.baseTexture.hasLoaded?this._onTextureUpdate():t.once("update",this._onTextureUpdate,this)))}}}),i.prototype._onTextureUpdate=function(){this.textureDirty=!0,this._width&&(this.scale.x=h.sign(this.scale.x)*this._width/this.texture.frame.width),this._height&&(this.scale.y=h.sign(this.scale.y)*this._height/this.texture.frame.height)},i.prototype.caclulateVertices=function(){var t,e,r,i,n=this._texture,o=this.worldTransform,s=o.a,a=o.b,h=o.c,u=o.d,l=o.tx,c=o.ty,p=this.vertexData,d=n.trim;d?(e=d.x-this.anchor.x*d.width,t=e+n.crop.width,i=d.y-this.anchor.y*d.height,r=i+n.crop.height):(t=n._frame.width*(1-this.anchor.x),e=n._frame.width*-this.anchor.x,r=n._frame.height*(1-this.anchor.y),i=n._frame.height*-this.anchor.y),p[0]=s*e+h*i+l,p[1]=u*i+a*e+c,p[2]=s*t+h*i+l,p[3]=u*i+a*t+c,p[4]=s*t+h*r+l,p[5]=u*r+a*t+c,p[6]=s*e+h*r+l,p[7]=u*r+a*e+c},i.prototype._renderWebGL=function(t){this.textureDirty&&(this.textureDirty=!1,this._onTextureUpdate(),this.vertexDirty=!0),this.vertexDirty&&(this.vertexDirty=!1,this.caclulateVertices()),t.setObjectRenderer(t.plugins.sprite),t.plugins.sprite.render(this)},i.prototype.getBounds=function(t){if(!this._currentBounds){this.vertexDirty&&(this.vertexDirty=!1,this.caclulateVertices());var e,r,i,n,o=this.vertexData,s=o[0],a=o[1],h=o[2],u=o[3],l=o[4],c=o[5],p=o[6],d=o[7];if(e=s,e=e>h?h:e,e=e>l?l:e,e=e>p?p:e,i=a,i=i>u?u:i,i=i>c?c:i,i=i>d?d:i,r=s,r=h>r?h:r,r=l>r?l:r,r=p>r?p:r,n=a,n=u>n?u:n,n=c>n?c:n,n=d>n?d:n,this.children.length){var f=this.containerGetBounds();w0=f.x,w1=f.x+f.width,h0=f.y,h1=f.y+f.height,e=ew1?r:w1,n=n>h1?n:h1}var v=this._bounds;v.x=e,v.width=r-e,v.y=i,v.height=n-i,this._currentBounds=v}return this._currentBounds},i.prototype.getLocalBounds=function(){return this._bounds.x=-this._texture._frame.width*this.anchor.x,this._bounds.y=-this._texture._frame.height*this.anchor.y,this._bounds.width=this._texture._frame.width,this._bounds.height=this._texture._frame.height,this._bounds},i.prototype.containsPoint=function(t){this.worldTransform.applyInverse(t,l);var e,r=this._texture._frame.width,i=this._texture._frame.height,n=-r*this.anchor.x;return l.x>n&&l.xe&&l.y=this.size&&this.flush(),t.texture._uvs){var e,r=t.texture.baseTexture,i=this.currentGroup;if(this.currentTexture!==r){if(this.currentTexture=r,!r._enabled){if(r._enabled=!0,r._id=this.textureCount,this.textureCount===this.MAX_TEXTUES){for(e=0;e>16)+(65280&t.tint)+((255&t.tint)<<16)+(255*t.worldAlpha<<24),u=t.texture._uvs.uvs_uint32;s[n++]=a[0],s[n++]=a[1],this.uvs[n++]=u[0],o[n++]=h,s[n++]=r._id,s[n++]=a[2],s[n++]=a[3],this.uvs[n++]=u[1],o[n++]=h,s[n++]=r._id,s[n++]=a[4],s[n++]=a[5],this.uvs[n++]=u[2],o[n++]=h,s[n++]=r._id,s[n++]=a[6],s[n++]=a[7],this.uvs[n++]=u[3],o[n++]=h,s[n++]=r._id}},i.prototype.flush=function(){if(0!==this.currentIndex){var t=this.renderer.gl;this.currentGroup.size=this.currentIndex-this.currentGroup.start;for(var e=0;e.5*this.size)this.vertexBuffer.upload(this.vertices,0,!0);else{var r=this.positions.subarray(0,this.currentIndex*this.vertByteSize);this.vertexBuffer.upload(r,0,!0)}for(this.renderer.bindShader(this._shader),this.renderer.blendModeManager.setBlendMode(0),e=0;eu;u++)h[u]=u;return a.bind(),a.uniforms.uSamplers=h,a}function n(t){var e="vec4 getSampleFromArray(sampler2D textures[%%], int ndx, vec2 uv) {\n\nvec4 color;";e+="\n",e+="\n";for(var r=0;t>r;r++)r>0&&(e+="\nelse "),t-1>r&&(e+="if(ndx == "+r+")"),e+="\n{",e+="\n color = texture2D(textures["+r+"], uv);",e+="\n}";return e+="\n",e+="\n",e+="return color;",e+="\n}"}var o=t("pixi-gl-core").GLShader,s=["varying vec2 vTextureCoord;","varying vec4 vColor;","varying float vTextureId;","uniform sampler2D uSamplers[%%];","void main(void){","gl_FragColor = getSampleFromArray(uSamplers, int(vTextureId), vTextureCoord) * vColor;","}"].join("\n");e.exports=i},{"pixi-gl-core":1}],96:[function(t,e,r){function i(t,e,r){this.canvas=document.createElement("canvas"),this.context=this.canvas.getContext("2d"),this.resolution=r||h.RESOLUTION,this._text=null,this._style=null;var i=o.fromCanvas(this.canvas);i.trim=new s.Rectangle,n.call(this,i),this.text=t,this.style=e}var n=t("../sprites/Sprite"),o=t("../textures/Texture"),s=t("../math"),a=t("../utils"),h=t("../const");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.fontPropertiesCache={},i.fontPropertiesCanvas=document.createElement("canvas"),i.fontPropertiesContext=i.fontPropertiesCanvas.getContext("2d"),Object.defineProperties(i.prototype,{width:{get:function(){return this.dirty&&this.updateText(),this.scale.x*this._texture._frame.width},set:function(t){this.scale.x=t/this._texture._frame.width,this._width=t}},height:{get:function(){return this.dirty&&this.updateText(),this.scale.y*this._texture._frame.height},set:function(t){this.scale.y=t/this._texture._frame.height,this._height=t}},style:{get:function(){return this._style},set:function(t){t=t||{},"number"==typeof t.fill&&(t.fill=a.hex2string(t.fill)),"number"==typeof t.stroke&&(t.stroke=a.hex2string(t.stroke)),"number"==typeof t.dropShadowColor&&(t.dropShadowColor=a.hex2string(t.dropShadowColor)),t.font=t.font||"bold 20pt Arial",t.fill=t.fill||"black",t.align=t.align||"left",t.stroke=t.stroke||"black",t.strokeThickness=t.strokeThickness||0,t.wordWrap=t.wordWrap||!1,t.wordWrapWidth=t.wordWrapWidth||100,t.dropShadow=t.dropShadow||!1,t.dropShadowColor=t.dropShadowColor||"#000000",t.dropShadowAngle=void 0!==t.dropShadowAngle?t.dropShadowAngle:Math.PI/6,t.dropShadowDistance=void 0!==t.dropShadowDistance?t.dropShadowDistance:5,t.dropShadowBlur=void 0!==t.dropShadowBlur?t.dropShadowBlur:0,t.padding=t.padding||0,t.textBaseline=t.textBaseline||"alphabetic",t.lineJoin=t.lineJoin||"miter",t.miterLimit=t.miterLimit||10,this._style=t,this.dirty=!0}},text:{get:function(){return this._text},set:function(t){t=t.toString()||" ",this._text!==t&&(this._text=t,this.dirty=!0)}}}),i.prototype.updateText=function(){var t=this._style;this.context.font=t.font;for(var e=t.wordWrap?this.wordWrap(this._text):this._text,r=e.split(/(?:\r\n|\r|\n)/),i=new Array(r.length),n=0,o=this.determineFontProperties(t.font),s=0;s0?(this.context.shadowColor=t.dropShadowColor,this.context.shadowBlur=t.dropShadowBlur):this.context.fillStyle=t.dropShadowColor;var d=Math.cos(t.dropShadowAngle)*t.dropShadowDistance,f=Math.sin(t.dropShadowAngle)*t.dropShadowDistance;for(s=0;sh;h++){for(u=0;p>u;u+=4)if(255!==l[d+u]){f=!0;break}if(f)break;d+=p}for(e.ascent=s-h,d=c-p,f=!1,h=a;h>s;h--){for(u=0;p>u;u+=4)if(255!==l[d+u]){f=!0;break}if(f)break;d-=p}e.descent=h-s,e.fontSize=e.ascent+e.descent,i.fontPropertiesCache[t]=e}return e},i.prototype.wordWrap=function(t){for(var e="",r=t.split("\n"),i=this._style.wordWrapWidth,n=0;no?(a>0&&(e+="\n"),e+=s[a],o=i-h):(o-=u,e+=" "+s[a])}n0&&e>0,this.width=this._frame.width=this.crop.width=t,this.height=this._frame.height=this.crop.height=e,r&&(this.baseTexture.width=this.width,this.baseTexture.height=this.height),this.valid&&(this.textureBuffer.resize(this.width,this.height),this.filterManager&&this.filterManager.resize(this.width,this.height)))},i.prototype.clear=function(){this.valid&&(this.renderer.type===l.RENDERER_TYPE.WEBGL&&this.renderer.gl.bindFramebuffer(this.renderer.gl.FRAMEBUFFER,this.textureBuffer.frameBuffer),this.textureBuffer.clear())},i.prototype.renderWebGL=function(t,e,r,i){if(this.valid){if(i=void 0!==i?i:!0,this.textureBuffer.transform=e,this.textureBuffer.activate(),t.worldAlpha=1,i){t.worldTransform.identity(),t.currentBounds=null;var n,o,s=t.children;for(n=0,o=s.length;o>n;++n)s[n].updateTransform()}var a=this.renderer.filterManager;this.renderer.filterManager=this.filterManager,this.renderer.renderDisplayObject(t,this.textureBuffer,r),this.renderer.filterManager=a}},i.prototype.renderCanvas=function(t,e,r,i){if(this.valid){i=!!i;var n=c;n.identity(),e&&n.append(e);var o=t.worldTransform;t.worldTransform=n,t.worldAlpha=1;var s,a,h=t.children;for(s=0,a=h.length;a>s;++s)h[s].updateTransform();r&&this.textureBuffer.clear();var u=this.textureBuffer.context,l=this.renderer.resolution;this.renderer.resolution=this.resolution,this.renderer.renderDisplayObject(t,u),this.renderer.resolution=l,t.worldTransform===n&&(t.worldTransform=o)}},i.prototype.destroy=function(){o.prototype.destroy.call(this,!0),this.textureBuffer.destroy(),this.filterManager&&this.filterManager.destroy(),this.renderer=null},i.prototype.getImage=function(){var t=new Image;return t.src=this.getBase64(),t},i.prototype.getBase64=function(){return this.getCanvas().toDataURL()},i.prototype.getCanvas=function(){if(this.renderer.type===l.RENDERER_TYPE.WEBGL){var t=this.renderer.gl,e=this.textureBuffer.size.width,r=this.textureBuffer.size.height,i=new Uint8Array(4*e*r);t.bindFramebuffer(t.FRAMEBUFFER,this.textureBuffer.frameBuffer),t.readPixels(0,0,e,r,t.RGBA,t.UNSIGNED_BYTE,i),t.bindFramebuffer(t.FRAMEBUFFER,null);var n=new h(e,r),o=n.context.getImageData(0,0,e,r);return o.data.set(i),n.context.putImageData(o,0,0),n.canvas}return this.textureBuffer.canvas},i.prototype.getPixels=function(){var t,e;if(this.renderer.type===l.RENDERER_TYPE.WEBGL){var r=this.renderer.gl;t=this.textureBuffer.size.width,e=this.textureBuffer.size.height;var i=new Uint8Array(4*t*e);return r.bindFramebuffer(r.FRAMEBUFFER,this.textureBuffer.frameBuffer),r.readPixels(0,0,t,e,r.RGBA,r.UNSIGNED_BYTE,i),r.bindFramebuffer(r.FRAMEBUFFER,null),i}return t=this.textureBuffer.canvas.width,e=this.textureBuffer.canvas.height,this.textureBuffer.canvas.getContext("2d").getImageData(0,0,t,e).data},i.prototype.getPixel=function(t,e){if(this.renderer.type===l.RENDERER_TYPE.WEBGL){var r=this.renderer.gl,i=new Uint8Array(4);return r.bindFramebuffer(r.FRAMEBUFFER,this.textureBuffer.frameBuffer),r.readPixels(t,e,1,1,r.RGBA,r.UNSIGNED_BYTE,i),r.bindFramebuffer(r.FRAMEBUFFER,null),i}return this.textureBuffer.canvas.getContext("2d").getImageData(t,e,1,1).data}},{"../const":38,"../math":55,"../renderers/canvas/utils/CanvasBuffer":67,"../renderers/webgl/managers/FilterManager":77,"../renderers/webgl/utils/RenderTarget":89,"./BaseTexture":97,"./Texture":99}],99:[function(t,e,r){function i(t,e,r,n,o){a.call(this),this.noFrame=!1,e||(this.noFrame=!0,e=new h.Rectangle(0,0,1,1)),t instanceof i&&(t=t.baseTexture),this.baseTexture=t,this._frame=e,this.trim=n,this.valid=!1,this.requiresUpdate=!1,this._uvs=null,this.width=0,this.height=0,this.crop=r||e,this.rotate=!!o,t.hasLoaded?(this.noFrame&&(e=new h.Rectangle(0,0,t.width,t.height),t.on("update",this.onBaseTextureUpdated,this)),this.frame=e):t.once("loaded",this.onBaseTextureLoaded,this)}var n=t("./BaseTexture"),o=t("./VideoBaseTexture"),s=t("./TextureUvs"),a=t("eventemitter3"),h=t("../math"),u=t("../utils");i.prototype=Object.create(a.prototype),i.prototype.constructor=i,e.exports=i,Object.defineProperties(i.prototype,{frame:{get:function(){return this._frame},set:function(t){if(this._frame=t,this.noFrame=!1,this.width=t.width,this.height=t.height,!this.trim&&!this.rotate&&(t.x+t.width>this.baseTexture.width||t.y+t.height>this.baseTexture.height))throw new Error("Texture Error: frame does not fit inside the base Texture dimensions "+this);this.valid=t&&t.width&&t.height&&this.baseTexture.hasLoaded,this.trim?(this.width=this.trim.width,this.height=this.trim.height,this._frame.width=this.trim.width,this._frame.height=this.trim.height):this.crop=t,this.valid&&this._updateUvs()}}}),i.prototype.update=function(){this.baseTexture.update()},i.prototype.onBaseTextureLoaded=function(t){this.noFrame?this.frame=new h.Rectangle(0,0,t.width,t.height):this.frame=this._frame,this.emit("update",this)},i.prototype.onBaseTextureUpdated=function(t){this._frame.width=t.width,this._frame.height=t.height,this.emit("update",this)},i.prototype.destroy=function(t){this.baseTexture&&(t&&this.baseTexture.destroy(),this.baseTexture.off("update",this.onBaseTextureUpdated,this),this.baseTexture.off("loaded",this.onBaseTextureLoaded,this),this.baseTexture=null),this._frame=null,this._uvs=null,this.trim=null,this.crop=null,this.valid=!1,this.off("dispose",this.dispose,this),this.off("update",this.update,this)},i.prototype.clone=function(){return new i(this.baseTexture,this.frame,this.crop,this.trim,this.rotate)},i.prototype._updateUvs=function(){this._uvs||(this._uvs=new s),this._uvs.set(this.crop,this.baseTexture,this.rotate)},i.fromImage=function(t,e,r){var o=u.TextureCache[t];return o||(o=new i(n.fromImage(t,e,r)),u.TextureCache[t]=o),o},i.fromFrame=function(t){var e=u.TextureCache[t];if(!e)throw new Error('The frameId "'+t+'" does not exist in the texture cache');return e},i.fromCanvas=function(t,e){return new i(n.fromCanvas(t,e))},i.fromVideo=function(t,e){return"string"==typeof t?i.fromVideoUrl(t,e):new i(o.fromVideo(t,e))},i.fromVideoUrl=function(t,e){return new i(o.fromUrl(t,e))},i.addTextureToCache=function(t,e){u.TextureCache[e]=t},i.removeTextureFromCache=function(t){var e=u.TextureCache[t];return delete u.TextureCache[t],delete u.BaseTextureCache[t],e},i.EMPTY=new i(new n)},{"../math":55,"../utils":105,"./BaseTexture":97,"./TextureUvs":100,"./VideoBaseTexture":101,eventemitter3:25}],100:[function(t,e,r){function i(){this.x0=0,this.y0=0,this.x1=1,this.y1=0,this.x2=1,this.y2=1,this.x3=0,this.y3=1,this.xy0_uint32=0,this.xy1_uint32=0,this.xy2_uint32=0,this.xy3_uint32=0,this.uvs_uint32=new Uint32Array(4)}e.exports=i,i.prototype.set=function(t,e,r){var i=e.width,n=e.height;r?(this.x0=(t.x+t.height)/i,this.y0=t.y/n,this.x1=(t.x+t.height)/i,this.y1=(t.y+t.width)/n,this.x2=t.x/i,this.y2=(t.y+t.width)/n,this.x3=t.x/i,this.y3=t.y/n):(this.x0=t.x/i,this.y0=t.y/n,this.x1=(t.x+t.width)/i,this.y1=t.y/n,this.x2=(t.x+t.width)/i,this.y2=(t.y+t.height)/n,this.x3=t.x/i,this.y3=(t.y+t.height)/n),this.uvs_uint32[0]=(65535*this.y0&65535)<<16|65535*this.x0&65535,this.uvs_uint32[1]=(65535*this.y1&65535)<<16|65535*this.x1&65535,this.uvs_uint32[2]=(65535*this.y2&65535)<<16|65535*this.x2&65535,this.uvs_uint32[3]=(65535*this.y3&65535)<<16|65535*this.x3&65535}},{}],101:[function(t,e,r){function i(t,e){if(!t)throw new Error("No video source element specified.");(t.readyState===t.HAVE_ENOUGH_DATA||t.readyState===t.HAVE_FUTURE_DATA)&&t.width&&t.height&&(t.complete=!0),o.call(this,t,e),this.autoUpdate=!1,this._onUpdate=this._onUpdate.bind(this),this._onCanPlay=this._onCanPlay.bind(this),t.complete||(t.addEventListener("canplay",this._onCanPlay),t.addEventListener("canplaythrough",this._onCanPlay),t.addEventListener("play",this._onPlayStart.bind(this)),t.addEventListener("pause",this._onPlayStop.bind(this))),this.__loaded=!1}function n(t,e){e||(e="video/"+t.substr(t.lastIndexOf(".")+1));var r=document.createElement("source");return r.src=t,r.type=e,r}var o=t("./BaseTexture"),s=t("../utils");i.prototype=Object.create(o.prototype),i.prototype.constructor=i,e.exports=i,i.prototype._onUpdate=function(){this.autoUpdate&&(window.requestAnimationFrame(this._onUpdate),this.update())},i.prototype._onPlayStart=function(){this.autoUpdate||(window.requestAnimationFrame(this._onUpdate),this.autoUpdate=!0)},i.prototype._onPlayStop=function(){this.autoUpdate=!1},i.prototype._onCanPlay=function(){this.hasLoaded=!0,this.source&&(this.source.removeEventListener("canplay",this._onCanPlay),this.source.removeEventListener("canplaythrough",this._onCanPlay),this.width=this.source.videoWidth,this.height=this.source.videoHeight,this.source.play(),this.__loaded||(this.__loaded=!0,this.emit("loaded",this)))},i.prototype.destroy=function(){this.source&&this.source._pixiId&&(delete s.BaseTextureCache[this.source._pixiId],delete this.source._pixiId),o.prototype.destroy.call(this)},i.fromVideo=function(t,e){t._pixiId||(t._pixiId="video_"+s.uid());var r=s.BaseTextureCache[t._pixiId];return r||(r=new i(t,e),s.BaseTextureCache[t._pixiId]=r),r},i.fromUrl=function(t,e){var r=document.createElement("video");if(Array.isArray(t))for(var o=0;othis._maxElapsedMS&&(e=this._maxElapsedMS),this.deltaTime=e*n.TARGET_FPMS*this.speed,this._emitter.emit(s,this.deltaTime),this.lastTime=t},e.exports=i},{"../const":38,eventemitter3:25}],103:[function(t,e,r){var i=t("./Ticker"),n=new i;n.autoStart=!0,e.exports={shared:n,Ticker:i}},{"./Ticker":102}],104:[function(t,e,r){var i=function(t){for(var e=6*t,r=new Uint16Array(e),i=0,n=0;e>i;i+=6,n+=4)r[i+0]=n+0,r[i+1]=n+1,r[i+2]=n+2,r[i+3]=n+0,r[i+4]=n+2,r[i+5]=n+3;return r};e.exports=i},{}],105:[function(t,e,r){var i=t("../const"),n=e.exports={_uid:0,_saidHello:!1,EventEmitter:t("eventemitter3"),pluginTarget:t("./pluginTarget"),async:t("async"),uid:function(){return++n._uid},hex2rgb:function(t,e){return e=e||[],e[0]=(t>>16&255)/255,e[1]=(t>>8&255)/255,e[2]=(255&t)/255,e},hex2string:function(t){return t=t.toString(16),t="000000".substr(0,6-t.length)+t,"#"+t},rgb2hex:function(t){return(255*t[0]<<16)+(255*t[1]<<8)+255*t[2]},canUseNewCanvasBlendModes:function(){if("undefined"==typeof document)return!1;var t="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAQAAAABAQMAAADD8p2OAAAAA1BMVEX/",e="AAAACklEQVQI12NgAAAAAgAB4iG8MwAAAABJRU5ErkJggg==",r=new Image;r.src=t+"AP804Oa6"+e;var i=new Image;i.src=t+"/wCKxvRF"+e;var n=document.createElement("canvas");n.width=6,n.height=1;var o=n.getContext("2d");o.globalCompositeOperation="multiply",o.drawImage(r,0,0),o.drawImage(i,2,0);var s=o.getImageData(2,0,1,1).data;return 255===s[0]&&0===s[1]&&0===s[2]},getNextPowerOfTwo:function(t){if(t>0&&0===(t&t-1))return t;for(var e=1;t>e;)e<<=1;return e},isPowerOfTwo:function(t,e){return t>0&&0===(t&t-1)&&e>0&&0===(e&e-1)},getResolutionOfUrl:function(t){var e=i.RETINA_PREFIX.exec(t);return e?parseFloat(e[1]):1},sayHello:function(t){if(!n._saidHello){if(navigator.userAgent.toLowerCase().indexOf("chrome")>-1){var e=["\n %c %c %c Pixi.js "+i.VERSION+" - ✰ "+t+" ✰ %c %c http://www.pixijs.com/ %c %c ♥%c♥%c♥ \n\n","background: #ff66a5; padding:5px 0;","background: #ff66a5; padding:5px 0;","color: #ff66a5; background: #030307; padding:5px 0;","background: #ff66a5; padding:5px 0;","background: #ffc3dc; padding:5px 0;","background: #ff66a5; padding:5px 0;","color: #ff2424; background: #fff; padding:5px 0;","color: #ff2424; background: #fff; padding:5px 0;","color: #ff2424; background: #fff; padding:5px 0;"];window.console.log.apply(console,e)}else window.console&&window.console.log("Pixi.js "+i.VERSION+" - "+t+" - http://www.pixijs.com/");n._saidHello=!0}},isWebGLSupported:function(){var t={stencil:!0};try{if(!window.WebGLRenderingContext)return!1;var e=document.createElement("canvas"),r=e.getContext("webgl",t)||e.getContext("experimental-webgl",t);return!(!r||!r.getContextAttributes().stencil)}catch(i){return!1}},sign:function(t){return t?0>t?-1:1:0},removeItems:function(t,e,r){var i=t.length;if(!(e>=i||0===r)){r=e+r>i?i-e:r;for(var n=e,o=i-r;o>n;++n)t[n]=t[n+r];t.length=o}},TextureCache:{},BaseTextureCache:{}}},{"../const":38,"./pluginTarget":106,async:16,eventemitter3:25}],106:[function(t,e,r){function i(t){t.__plugins={},t.registerPlugin=function(e,r){t.__plugins[e]=r},t.prototype.initPlugins=function(){this.plugins=this.plugins||{};for(var e in t.__plugins)this.plugins[e]=new t.__plugins[e](this)},t.prototype.destroyPlugins=function(){for(var t in this.plugins)this.plugins[t].destroy(),this.plugins[t]=null;this.plugins=null}}e.exports={mixin:function(t){i(t)}}},{}],107:[function(t,e,r){var i=t("./core"),n=t("./mesh"),o=t("./extras"),s=t("./filters");i.SpriteBatch=function(){throw new ReferenceError("SpriteBatch does not exist any more, please use the new ParticleContainer instead.")},i.AssetLoader=function(){throw new ReferenceError("The loader system was overhauled in pixi v3, please see the new PIXI.loaders.Loader class.")},Object.defineProperties(i,{Stage:{get:function(){return console.warn("You do not need to use a PIXI Stage any more, you can simply render any container."),i.Container}},DisplayObjectContainer:{get:function(){return console.warn("DisplayObjectContainer has been shortened to Container, please use Container from now on."),i.Container}},Strip:{get:function(){return console.warn("The Strip class has been renamed to Mesh and moved to mesh.Mesh, please use mesh.Mesh from now on."),n.Mesh}},Rope:{get:function(){return console.warn("The Rope class has been moved to mesh.Rope, please use mesh.Rope from now on."),n.Rope}},MovieClip:{get:function(){return console.warn("The MovieClip class has been moved to extras.MovieClip, please use extras.MovieClip from now on."),o.MovieClip}},TilingSprite:{get:function(){return console.warn("The TilingSprite class has been moved to extras.TilingSprite, please use extras.TilingSprite from now on."),o.TilingSprite}},BitmapText:{get:function(){return console.warn("The BitmapText class has been moved to extras.BitmapText, please use extras.BitmapText from now on."),o.BitmapText}},blendModes:{get:function(){return console.warn("The blendModes has been moved to BLEND_MODES, please use BLEND_MODES from now on."),i.BLEND_MODES}},scaleModes:{get:function(){return console.warn("The scaleModes has been moved to SCALE_MODES, please use SCALE_MODES from now on."),i.SCALE_MODES}},BaseTextureCache:{get:function(){return console.warn("The BaseTextureCache class has been moved to utils.BaseTextureCache, please use utils.BaseTextureCache from now on."),i.utils.BaseTextureCache}},TextureCache:{get:function(){return console.warn("The TextureCache class has been moved to utils.TextureCache, please use utils.TextureCache from now on."),i.utils.TextureCache}},math:{get:function(){return console.warn("The math namespace is deprecated, please access members already accessible on PIXI."),i}}}),i.Sprite.prototype.setTexture=function(t){this.texture=t,console.warn("setTexture is now deprecated, please use the texture property, e.g : sprite.texture = texture;")},o.BitmapText.prototype.setText=function(t){this.text=t,console.warn("setText is now deprecated, please use the text property, e.g : myBitmapText.text = 'my text';")},i.Text.prototype.setText=function(t){this.text=t,console.warn("setText is now deprecated, please use the text property, e.g : myText.text = 'my text';")},i.Text.prototype.setStyle=function(t){this.style=t,console.warn("setStyle is now deprecated, please use the style property, e.g : myText.style = style;")},i.Texture.prototype.setFrame=function(t){this.frame=t,console.warn("setFrame is now deprecated, please use the frame property, e.g : myTexture.frame = frame;")},Object.defineProperties(s,{AbstractFilter:{get:function(){return console.warn("filters.AbstractFilter is an undocumented alias, please use AbstractFilter from now on."),i.AbstractFilter}},FXAAFilter:{get:function(){return console.warn("filters.FXAAFilter is an undocumented alias, please use FXAAFilter from now on."),i.FXAAFilter}},SpriteMaskFilter:{get:function(){return console.warn("filters.SpriteMaskFilter is an undocumented alias, please use SpriteMaskFilter from now on."),i.SpriteMaskFilter}}}),i.utils.uuid=function(){return console.warn("utils.uuid() is deprecated, please use utils.uid() from now on."),i.utils.uid()}},{"./core":52,"./extras":114,"./filters":131,"./mesh":156}],108:[function(t,e,r){function i(t,e){n.Container.call(this),e=e||{},this.textWidth=0,this.textHeight=0,this._glyphs=[],this._font={tint:void 0!==e.tint?e.tint:16777215,align:e.align||"left",name:null,size:0},this.font=e.font,this._text=t,this.maxWidth=0,this.maxLineHeight=0,this.dirty=!1,this.updateText()}var n=t("../core");i.prototype=Object.create(n.Container.prototype),i.prototype.constructor=i,e.exports=i,Object.defineProperties(i.prototype,{tint:{get:function(){return this._font.tint},set:function(t){this._font.tint="number"==typeof t&&t>=0?t:16777215,this.dirty=!0}},align:{get:function(){return this._font.align},set:function(t){this._font.align=t||"left",this.dirty=!0}},font:{get:function(){return this._font},set:function(t){t&&("string"==typeof t?(t=t.split(" "),this._font.name=1===t.length?t[0]:t.slice(1).join(" "),this._font.size=t.length>=2?parseInt(t[0],10):i.fonts[this._font.name].size):(this._font.name=t.name,this._font.size="number"==typeof t.size?t.size:parseInt(t.size,10)),this.dirty=!0)}},text:{get:function(){return this._text},set:function(t){t=t.toString()||" ",this._text!==t&&(this._text=t,this.dirty=!0)}}}),i.prototype.updateText=function(){for(var t=i.fonts[this._font.name],e=new n.Point,r=null,o=[],s=0,a=0,h=[],u=0,l=this._font.size/t.size,c=-1,p=0,d=0;d0&&e.x*l>this.maxWidth)n.utils.removeItems(o,c,d-c),d=c,c=-1,h.push(s),a=Math.max(a,s),u++,e.x=0,e.y+=t.lineHeight,r=null;else{var v=t.chars[f];v&&(r&&v.kerning[r]&&(e.x+=v.kerning[r]),o.push({texture:v.texture,line:u,charCode:f,position:new n.Point(e.x+v.xOffset,e.y+v.yOffset)}),s=e.x+(v.texture.width+v.xOffset),e.x+=v.xAdvance,p=Math.max(p,v.yOffset+v.texture.height),r=f)}}h.push(s),a=Math.max(a,s);var g=[];for(d=0;u>=d;d++){var m=0;"right"===this._font.align?m=a-h[d]:"center"===this._font.align&&(m=(a-h[d])/2),g.push(m)}var y=o.length,x=this.tint;for(d=0;y>d;d++){var b=this._glyphs[d];b?b.texture=o[d].texture:(b=new n.Sprite(o[d].texture),this._glyphs.push(b)),b.position.x=(o[d].position.x+g[o[d].line])*l,b.position.y=o[d].position.y*l, +b.scale.x=b.scale.y=l,b.tint=x,b.parent||this.addChild(b)}for(d=y;dt&&(t+=this._textures.length),t}}}),i.prototype.stop=function(){this.playing&&(this.playing=!1,n.ticker.shared.remove(this.update,this))},i.prototype.play=function(){this.playing||(this.playing=!0,n.ticker.shared.add(this.update,this))},i.prototype.gotoAndStop=function(t){this.stop(),this._currentTime=t,this._texture=this._textures[this.currentFrame]},i.prototype.gotoAndPlay=function(t){this._currentTime=t,this.play()},i.prototype.update=function(t){var e=this.animationSpeed*t;if(null!==this._durations){var r=this._currentTime%1*this._durations[this.currentFrame];for(r+=e/60*1e3;0>r;)this._currentTime--,r+=this._durations[this.currentFrame];var i=Math.sign(this.animationSpeed*t);for(this._currentTime=Math.floor(this._currentTime);r>=this._durations[this.currentFrame];)r-=this._durations[this.currentFrame]*i,this._currentTime+=i;this._currentTime+=r/this._durations[this.currentFrame]}else this._currentTime+=e;this._currentTime<0&&!this.loop?(this.gotoAndStop(0),this.onComplete&&this.onComplete()):this._currentTime>=this._textures.length&&!this.loop?(this.gotoAndStop(this._textures.length-1),this.onComplete&&this.onComplete()):this._texture=this._textures[this.currentFrame]},i.prototype.destroy=function(){this.stop(),n.Sprite.prototype.destroy.call(this)},i.fromFrames=function(t){for(var e=[],r=0;rx?x:t,t=t>_?_:t,t=t>E?E:t,r=y,r=r>b?b:r,r=r>T?T:r,r=r>S?S:r,e=m,e=x>e?x:e,e=_>e?_:e,e=E>e?E:e,i=y,i=b>i?b:i,i=T>i?T:i,i=S>i?S:i;var w=this._bounds;return w.x=t,w.width=e-t,w.y=r,w.height=i-r,this._currentBounds=w,w},i.prototype.containsPoint=function(t){this.worldTransform.applyInverse(t,o);var e,r=this._width,i=this._height,n=-r*this.anchor.x;return o.x>n&&o.xe&&o.y 0.2) n = 65600.0; // :\n if (gray > 0.3) n = 332772.0; // *\n if (gray > 0.4) n = 15255086.0; // o\n if (gray > 0.5) n = 23385164.0; // &\n if (gray > 0.6) n = 15252014.0; // 8\n if (gray > 0.7) n = 13199452.0; // @\n if (gray > 0.8) n = 11512810.0; // #\n\n vec2 p = mod( uv / ( pixelSize * 0.5 ), 2.0) - vec2(1.0);\n col = col * character(n, p);\n\n gl_FragColor = vec4(col, 1.0);\n}\n",{dimensions:{type:"4fv",value:new Float32Array([0,0,0,0])},pixelSize:{type:"1f",value:8}})}var n=t("../../core");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i,Object.defineProperties(i.prototype,{size:{get:function(){return this.uniforms.pixelSize.value},set:function(t){this.uniforms.pixelSize.value=t}}})},{"../../core":52}],116:[function(t,e,r){function i(){n.AbstractFilter.call(this),this.blurXFilter=new o,this.blurYFilter=new s,this.defaultFilter=new n.AbstractFilter}var n=t("../../core"),o=t("../blur/BlurXFilter"),s=t("../blur/BlurYFilter");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.applyFilter=function(t,e,r){var i=t.filterManager.getRenderTarget(!0);this.defaultFilter.applyFilter(t,e,r),this.blurXFilter.applyFilter(t,e,i),t.blendModeManager.setBlendMode(n.BLEND_MODES.SCREEN),this.blurYFilter.applyFilter(t,i,r),t.blendModeManager.setBlendMode(n.BLEND_MODES.NORMAL),t.filterManager.returnRenderTarget(i)},Object.defineProperties(i.prototype,{blur:{get:function(){return this.blurXFilter.blur},set:function(t){this.blurXFilter.blur=this.blurYFilter.blur=t}},blurX:{get:function(){return this.blurXFilter.blur},set:function(t){this.blurXFilter.blur=t}},blurY:{get:function(){return this.blurYFilter.blur},set:function(t){this.blurYFilter.blur=t}}})},{"../../core":52,"../blur/BlurXFilter":119,"../blur/BlurYFilter":120}],117:[function(t,e,r){function i(t,e){n.AbstractFilter.call(this,"attribute vec2 aVertexPosition;\nattribute vec2 aTextureCoord;\nattribute vec4 aColor;\n\nuniform float strength;\nuniform float dirX;\nuniform float dirY;\nuniform mat3 projectionMatrix;\n\nvarying vec2 vTextureCoord;\nvarying vec4 vColor;\nvarying vec2 vBlurTexCoords[3];\n\nvoid main(void)\n{\n gl_Position = vec4((projectionMatrix * vec3((aVertexPosition), 1.0)).xy, 0.0, 1.0);\n vTextureCoord = aTextureCoord;\n\n vBlurTexCoords[0] = aTextureCoord + vec2( (0.004 * strength) * dirX, (0.004 * strength) * dirY );\n vBlurTexCoords[1] = aTextureCoord + vec2( (0.008 * strength) * dirX, (0.008 * strength) * dirY );\n vBlurTexCoords[2] = aTextureCoord + vec2( (0.012 * strength) * dirX, (0.012 * strength) * dirY );\n\n vColor = vec4(aColor.rgb * aColor.a, aColor.a);\n}\n","precision lowp float;\n\nvarying vec2 vTextureCoord;\nvarying vec2 vBlurTexCoords[3];\nvarying vec4 vColor;\n\nuniform sampler2D uSampler;\n\nvoid main(void)\n{\n gl_FragColor = vec4(0.0);\n\n gl_FragColor += texture2D(uSampler, vTextureCoord ) * 0.3989422804014327;\n gl_FragColor += texture2D(uSampler, vBlurTexCoords[ 0]) * 0.2419707245191454;\n gl_FragColor += texture2D(uSampler, vBlurTexCoords[ 1]) * 0.05399096651318985;\n gl_FragColor += texture2D(uSampler, vBlurTexCoords[ 2]) * 0.004431848411938341;\n}\n",{strength:{type:"1f",value:1},dirX:{type:"1f",value:t||0},dirY:{type:"1f",value:e||0}}),this.defaultFilter=new n.AbstractFilter,this.passes=1,this.dirX=t||0,this.dirY=e||0,this.strength=4}var n=t("../../core");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.applyFilter=function(t,e,r,i){var n=this.getShader(t);if(this.uniforms.strength.value=this.strength/4/this.passes*(e.frame.width/e.size.width),1===this.passes)t.filterManager.applyFilter(n,e,r,i);else{var o=t.filterManager.getRenderTarget(!0);t.filterManager.applyFilter(n,e,o,i);for(var s=0;s>16&255)/255,s=(r>>8&255)/255,a=(255&r)/255,h=(i>>16&255)/255,u=(i>>8&255)/255,l=(255&i)/255,c=[.3,.59,.11,0,0,o,s,a,t,0,h,u,l,e,0,o-h,s-u,a-l,0,0];this._loadMatrix(c,n)},i.prototype.night=function(t,e){t=t||.1;var r=[-2*t,-t,0,0,0,-t,0,t,0,0,0,t,2*t,0,0,0,0,0,1,0];this._loadMatrix(r,e)},i.prototype.predator=function(t,e){var r=[11.224130630493164*t,-4.794486999511719*t,-2.8746118545532227*t,0*t,.40342438220977783*t,-3.6330697536468506*t,9.193157196044922*t,-2.951810836791992*t,0*t,-1.316135048866272*t,-3.2184197902679443*t,-4.2375030517578125*t,7.476448059082031*t,0*t,.8044459223747253*t,0,0,0,1,0];this._loadMatrix(r,e)},i.prototype.lsd=function(t){var e=[2,-.4,.5,0,0,-.5,2,-.4,0,0,-.4,-.5,3,0,0,0,0,0,1,0];this._loadMatrix(e,t)},i.prototype.reset=function(){var t=[1,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,1,0];this._loadMatrix(t,!1)},Object.defineProperties(i.prototype,{matrix:{get:function(){return this.uniforms.m.value},set:function(t){this.uniforms.m.value=t}}})},{"../../core":52}],123:[function(t,e,r){function i(){n.AbstractFilter.call(this,null,"precision mediump float;\n\nvarying vec2 vTextureCoord;\n\nuniform sampler2D uSampler;\nuniform float step;\n\nvoid main(void)\n{\n vec4 color = texture2D(uSampler, vTextureCoord);\n\n color = floor(color * step) / step;\n\n gl_FragColor = color;\n}\n",{step:{type:"1f",value:5}})}var n=t("../../core");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i,Object.defineProperties(i.prototype,{step:{get:function(){return this.uniforms.step.value},set:function(t){this.uniforms.step.value=t}}})},{"../../core":52}],124:[function(t,e,r){function i(t,e,r){n.AbstractFilter.call(this,null,"precision mediump float;\n\nvarying mediump vec2 vTextureCoord;\n\nuniform sampler2D uSampler;\nuniform vec2 texelSize;\nuniform float matrix[9];\n\nvoid main(void)\n{\n vec4 c11 = texture2D(uSampler, vTextureCoord - texelSize); // top left\n vec4 c12 = texture2D(uSampler, vec2(vTextureCoord.x, vTextureCoord.y - texelSize.y)); // top center\n vec4 c13 = texture2D(uSampler, vec2(vTextureCoord.x + texelSize.x, vTextureCoord.y - texelSize.y)); // top right\n\n vec4 c21 = texture2D(uSampler, vec2(vTextureCoord.x - texelSize.x, vTextureCoord.y)); // mid left\n vec4 c22 = texture2D(uSampler, vTextureCoord); // mid center\n vec4 c23 = texture2D(uSampler, vec2(vTextureCoord.x + texelSize.x, vTextureCoord.y)); // mid right\n\n vec4 c31 = texture2D(uSampler, vec2(vTextureCoord.x - texelSize.x, vTextureCoord.y + texelSize.y)); // bottom left\n vec4 c32 = texture2D(uSampler, vec2(vTextureCoord.x, vTextureCoord.y + texelSize.y)); // bottom center\n vec4 c33 = texture2D(uSampler, vTextureCoord + texelSize); // bottom right\n\n gl_FragColor =\n c11 * matrix[0] + c12 * matrix[1] + c13 * matrix[2] +\n c21 * matrix[3] + c22 * matrix[4] + c23 * matrix[5] +\n c31 * matrix[6] + c32 * matrix[7] + c33 * matrix[8];\n\n gl_FragColor.a = c22.a;\n}\n",{ +matrix:{type:"1fv",value:new Float32Array(t)},texelSize:{type:"v2",value:{x:1/e,y:1/r}}})}var n=t("../../core");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i,Object.defineProperties(i.prototype,{matrix:{get:function(){return this.uniforms.matrix.value},set:function(t){this.uniforms.matrix.value=new Float32Array(t)}},width:{get:function(){return 1/this.uniforms.texelSize.value.x},set:function(t){this.uniforms.texelSize.value.x=1/t}},height:{get:function(){return 1/this.uniforms.texelSize.value.y},set:function(t){this.uniforms.texelSize.value.y=1/t}}})},{"../../core":52}],125:[function(t,e,r){function i(){n.AbstractFilter.call(this,null,"precision mediump float;\n\nvarying vec2 vTextureCoord;\n\nuniform sampler2D uSampler;\n\nvoid main(void)\n{\n float lum = length(texture2D(uSampler, vTextureCoord.xy).rgb);\n\n gl_FragColor = vec4(1.0, 1.0, 1.0, 1.0);\n\n if (lum < 1.00)\n {\n if (mod(gl_FragCoord.x + gl_FragCoord.y, 10.0) == 0.0)\n {\n gl_FragColor = vec4(0.0, 0.0, 0.0, 1.0);\n }\n }\n\n if (lum < 0.75)\n {\n if (mod(gl_FragCoord.x - gl_FragCoord.y, 10.0) == 0.0)\n {\n gl_FragColor = vec4(0.0, 0.0, 0.0, 1.0);\n }\n }\n\n if (lum < 0.50)\n {\n if (mod(gl_FragCoord.x + gl_FragCoord.y - 5.0, 10.0) == 0.0)\n {\n gl_FragColor = vec4(0.0, 0.0, 0.0, 1.0);\n }\n }\n\n if (lum < 0.3)\n {\n if (mod(gl_FragCoord.x - gl_FragCoord.y - 5.0, 10.0) == 0.0)\n {\n gl_FragColor = vec4(0.0, 0.0, 0.0, 1.0);\n }\n }\n}\n")}var n=t("../../core");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i},{"../../core":52}],126:[function(t,e,r){function i(t,e){var r=new n.Matrix;t.renderable=!1,n.AbstractFilter.call(this,"attribute vec2 aVertexPosition;\nattribute vec2 aTextureCoord;\nattribute vec4 aColor;\n\nuniform mat3 projectionMatrix;\nuniform mat3 otherMatrix;\n\nvarying vec2 vMapCoord;\nvarying vec2 vTextureCoord;\nvarying vec4 vColor;\n\nvoid main(void)\n{\n gl_Position = vec4((projectionMatrix * vec3(aVertexPosition, 1.0)).xy, 0.0, 1.0);\n vTextureCoord = aTextureCoord;\n vMapCoord = ( otherMatrix * vec3( aTextureCoord, 1.0) ).xy;\n vColor = vec4(aColor.rgb * aColor.a, aColor.a);\n}\n","precision mediump float;\n\nvarying vec2 vMapCoord;\nvarying vec2 vTextureCoord;\nvarying vec4 vColor;\n\nuniform vec2 scale;\n\nuniform sampler2D uSampler;\nuniform sampler2D mapSampler;\n\nvoid main(void)\n{\n vec4 map = texture2D(mapSampler, vMapCoord);\n\n map -= 0.5;\n map.xy *= scale;\n\n gl_FragColor = texture2D(uSampler, vec2(vTextureCoord.x + map.x, vTextureCoord.y + map.y));\n}\n",{mapSampler:{type:"sampler2D",value:t.texture},otherMatrix:{type:"mat3",value:r.toArray(!0)},scale:{type:"v2",value:{x:1,y:1}}}),this.maskSprite=t,this.maskMatrix=r,(null===e||void 0===e)&&(e=20),this.scale=new n.Point(e,e)}var n=t("../../core");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.applyFilter=function(t,e,r){var i=t.filterManager;i.calculateMappedMatrix(e.frame,this.maskSprite,this.maskMatrix),this.uniforms.otherMatrix.value=this.maskMatrix.toArray(!0),this.uniforms.scale.value.x=this.scale.x*(1/e.frame.width),this.uniforms.scale.value.y=this.scale.y*(1/e.frame.height);var n=this.getShader(t);i.applyFilter(n,e,r)},Object.defineProperties(i.prototype,{map:{get:function(){return this.uniforms.mapSampler.value},set:function(t){this.uniforms.mapSampler.value=t}}})},{"../../core":52}],127:[function(t,e,r){function i(){n.AbstractFilter.call(this,null,"precision mediump float;\n\nvarying vec2 vTextureCoord;\nvarying vec4 vColor;\n\nuniform vec4 dimensions;\nuniform sampler2D uSampler;\n\nuniform float angle;\nuniform float scale;\n\nfloat pattern()\n{\n float s = sin(angle), c = cos(angle);\n vec2 tex = vTextureCoord * dimensions.xy;\n vec2 point = vec2(\n c * tex.x - s * tex.y,\n s * tex.x + c * tex.y\n ) * scale;\n return (sin(point.x) * sin(point.y)) * 4.0;\n}\n\nvoid main()\n{\n vec4 color = texture2D(uSampler, vTextureCoord);\n float average = (color.r + color.g + color.b) / 3.0;\n gl_FragColor = vec4(vec3(average * 10.0 - 5.0 + pattern()), color.a);\n}\n",{scale:{type:"1f",value:1},angle:{type:"1f",value:5},dimensions:{type:"4fv",value:[0,0,0,0]}})}var n=t("../../core");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i,Object.defineProperties(i.prototype,{scale:{get:function(){return this.uniforms.scale.value},set:function(t){this.uniforms.scale.value=t}},angle:{get:function(){return this.uniforms.angle.value},set:function(t){this.uniforms.angle.value=t}}})},{"../../core":52}],128:[function(t,e,r){function i(){n.AbstractFilter.call(this,"attribute vec2 aVertexPosition;\nattribute vec2 aTextureCoord;\nattribute vec4 aColor;\n\nuniform float strength;\nuniform vec2 offset;\n\nuniform mat3 projectionMatrix;\n\nvarying vec2 vTextureCoord;\nvarying vec4 vColor;\nvarying vec2 vBlurTexCoords[6];\n\nvoid main(void)\n{\n gl_Position = vec4((projectionMatrix * vec3((aVertexPosition+offset), 1.0)).xy, 0.0, 1.0);\n vTextureCoord = aTextureCoord;\n\n vBlurTexCoords[ 0] = aTextureCoord + vec2(0.0, -0.012 * strength);\n vBlurTexCoords[ 1] = aTextureCoord + vec2(0.0, -0.008 * strength);\n vBlurTexCoords[ 2] = aTextureCoord + vec2(0.0, -0.004 * strength);\n vBlurTexCoords[ 3] = aTextureCoord + vec2(0.0, 0.004 * strength);\n vBlurTexCoords[ 4] = aTextureCoord + vec2(0.0, 0.008 * strength);\n vBlurTexCoords[ 5] = aTextureCoord + vec2(0.0, 0.012 * strength);\n\n vColor = vec4(aColor.rgb * aColor.a, aColor.a);\n}\n","precision lowp float;\n\nvarying vec2 vTextureCoord;\nvarying vec2 vBlurTexCoords[6];\nvarying vec4 vColor;\n\nuniform vec3 color;\nuniform float alpha;\n\nuniform sampler2D uSampler;\n\nvoid main(void)\n{\n vec4 sum = vec4(0.0);\n\n sum += texture2D(uSampler, vBlurTexCoords[ 0])*0.004431848411938341;\n sum += texture2D(uSampler, vBlurTexCoords[ 1])*0.05399096651318985;\n sum += texture2D(uSampler, vBlurTexCoords[ 2])*0.2419707245191454;\n sum += texture2D(uSampler, vTextureCoord )*0.3989422804014327;\n sum += texture2D(uSampler, vBlurTexCoords[ 3])*0.2419707245191454;\n sum += texture2D(uSampler, vBlurTexCoords[ 4])*0.05399096651318985;\n sum += texture2D(uSampler, vBlurTexCoords[ 5])*0.004431848411938341;\n\n gl_FragColor = vec4( color.rgb * sum.a * alpha, sum.a * alpha );\n}\n",{blur:{type:"1f",value:1/512},color:{type:"c",value:[0,0,0]},alpha:{type:"1f",value:.7},offset:{type:"2f",value:[5,5]},strength:{type:"1f",value:1}}),this.passes=1,this.strength=4}var n=t("../../core");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.applyFilter=function(t,e,r,i){var n=this.getShader(t);if(this.uniforms.strength.value=this.strength/4/this.passes*(e.frame.height/e.size.height),1===this.passes)t.filterManager.applyFilter(n,e,r,i);else{for(var o=t.filterManager.getRenderTarget(!0),s=e,a=o,h=0;h= (time - params.z)) )\n {\n float diff = (dist - time);\n float powDiff = 1.0 - pow(abs(diff*params.x), params.y);\n\n float diffTime = diff * powDiff;\n vec2 diffUV = normalize(uv - center);\n texCoord = uv + (diffUV * diffTime);\n }\n\n gl_FragColor = texture2D(uSampler, texCoord);\n}\n",{center:{type:"v2",value:{x:.5,y:.5}},params:{type:"v3",value:{x:10,y:.8,z:.1}},time:{type:"1f",value:0}})}var n=t("../../core");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i,Object.defineProperties(i.prototype,{center:{get:function(){return this.uniforms.center.value},set:function(t){this.uniforms.center.value=t}},params:{get:function(){return this.uniforms.params.value},set:function(t){this.uniforms.params.value=t}},time:{get:function(){return this.uniforms.time.value},set:function(t){this.uniforms.time.value=t}}})},{"../../core":52}],138:[function(t,e,r){function i(){n.AbstractFilter.call(this,null,"precision mediump float;\n\nvarying vec2 vTextureCoord;\n\nuniform sampler2D uSampler;\nuniform float blur;\nuniform float gradientBlur;\nuniform vec2 start;\nuniform vec2 end;\nuniform vec2 delta;\nuniform vec2 texSize;\n\nfloat random(vec3 scale, float seed)\n{\n return fract(sin(dot(gl_FragCoord.xyz + seed, scale)) * 43758.5453 + seed);\n}\n\nvoid main(void)\n{\n vec4 color = vec4(0.0);\n float total = 0.0;\n\n float offset = random(vec3(12.9898, 78.233, 151.7182), 0.0);\n vec2 normal = normalize(vec2(start.y - end.y, end.x - start.x));\n float radius = smoothstep(0.0, 1.0, abs(dot(vTextureCoord * texSize - start, normal)) / gradientBlur) * blur;\n\n for (float t = -30.0; t <= 30.0; t++)\n {\n float percent = (t + offset - 0.5) / 30.0;\n float weight = 1.0 - abs(percent);\n vec4 sample = texture2D(uSampler, vTextureCoord + delta / texSize * percent * radius);\n sample.rgb *= sample.a;\n color += sample * weight;\n total += weight;\n }\n\n gl_FragColor = color / total;\n gl_FragColor.rgb /= gl_FragColor.a + 0.00001;\n}\n",{blur:{type:"1f",value:100},gradientBlur:{type:"1f",value:600},start:{type:"v2",value:{x:0,y:window.innerHeight/2}},end:{type:"v2",value:{x:600,y:window.innerHeight/2}},delta:{type:"v2",value:{x:30,y:30}},texSize:{type:"v2",value:{x:window.innerWidth,y:window.innerHeight}}}),this.updateDelta()}var n=t("../../core");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.updateDelta=function(){this.uniforms.delta.value.x=0,this.uniforms.delta.value.y=0},Object.defineProperties(i.prototype,{blur:{get:function(){return this.uniforms.blur.value},set:function(t){this.uniforms.blur.value=t}},gradientBlur:{get:function(){return this.uniforms.gradientBlur.value},set:function(t){this.uniforms.gradientBlur.value=t}},start:{get:function(){return this.uniforms.start.value},set:function(t){this.uniforms.start.value=t,this.updateDelta()}},end:{get:function(){return this.uniforms.end.value},set:function(t){this.uniforms.end.value=t,this.updateDelta()}}})},{"../../core":52}],139:[function(t,e,r){function i(){n.AbstractFilter.call(this),this.tiltShiftXFilter=new o,this.tiltShiftYFilter=new s}var n=t("../../core"),o=t("./TiltShiftXFilter"),s=t("./TiltShiftYFilter");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.applyFilter=function(t,e,r){var i=t.filterManager.getRenderTarget(!0);this.tiltShiftXFilter.applyFilter(t,e,i),this.tiltShiftYFilter.applyFilter(t,i,r),t.filterManager.returnRenderTarget(i)},Object.defineProperties(i.prototype,{blur:{get:function(){return this.tiltShiftXFilter.blur},set:function(t){this.tiltShiftXFilter.blur=this.tiltShiftYFilter.blur=t}},gradientBlur:{get:function(){return this.tiltShiftXFilter.gradientBlur},set:function(t){this.tiltShiftXFilter.gradientBlur=this.tiltShiftYFilter.gradientBlur=t}},start:{get:function(){return this.tiltShiftXFilter.start},set:function(t){this.tiltShiftXFilter.start=this.tiltShiftYFilter.start=t}},end:{get:function(){return this.tiltShiftXFilter.end},set:function(t){this.tiltShiftXFilter.end=this.tiltShiftYFilter.end=t}}})},{"../../core":52,"./TiltShiftXFilter":140,"./TiltShiftYFilter":141}],140:[function(t,e,r){function i(){n.call(this)}var n=t("./TiltShiftAxisFilter");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.updateDelta=function(){var t=this.uniforms.end.value.x-this.uniforms.start.value.x,e=this.uniforms.end.value.y-this.uniforms.start.value.y,r=Math.sqrt(t*t+e*e);this.uniforms.delta.value.x=t/r,this.uniforms.delta.value.y=e/r}},{"./TiltShiftAxisFilter":138}],141:[function(t,e,r){function i(){n.call(this)}var n=t("./TiltShiftAxisFilter");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.updateDelta=function(){var t=this.uniforms.end.value.x-this.uniforms.start.value.x,e=this.uniforms.end.value.y-this.uniforms.start.value.y,r=Math.sqrt(t*t+e*e);this.uniforms.delta.value.x=-e/r,this.uniforms.delta.value.y=t/r}},{"./TiltShiftAxisFilter":138}],142:[function(t,e,r){function i(){n.AbstractFilter.call(this,null,"precision mediump float;\n\nvarying vec2 vTextureCoord;\n\nuniform sampler2D uSampler;\nuniform float radius;\nuniform float angle;\nuniform vec2 offset;\n\nvoid main(void)\n{\n vec2 coord = vTextureCoord - offset;\n float dist = length(coord);\n\n if (dist < radius)\n {\n float ratio = (radius - dist) / radius;\n float angleMod = ratio * ratio * angle;\n float s = sin(angleMod);\n float c = cos(angleMod);\n coord = vec2(coord.x * c - coord.y * s, coord.x * s + coord.y * c);\n }\n\n gl_FragColor = texture2D(uSampler, coord+offset);\n}\n",{radius:{type:"1f",value:.5},angle:{type:"1f",value:5},offset:{type:"v2",value:{x:.5,y:.5}}})}var n=t("../../core");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i,Object.defineProperties(i.prototype,{offset:{get:function(){return this.uniforms.offset.value},set:function(t){this.uniforms.offset.value=t}},radius:{get:function(){return this.uniforms.radius.value},set:function(t){this.uniforms.radius.value=t}},angle:{get:function(){return this.uniforms.angle.value},set:function(t){this.uniforms.angle.value=t}}})},{"../../core":52}],143:[function(t,e,r){(function(r){t("./polyfill");var i=e.exports=t("./core");i.extras=t("./extras"),i.filters=t("./filters"),i.interaction=t("./interaction"),i.loaders=t("./loaders"),i.mesh=t("./mesh"),i.accessibility=t("./accessibility"),i.loader=new i.loaders.Loader,Object.assign(i,t("./deprecation")),r.PIXI=i}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{"./accessibility":37,"./core":52,"./deprecation":107,"./extras":114,"./filters":131,"./interaction":146,"./loaders":149,"./mesh":156,"./polyfill":161}],144:[function(t,e,r){function i(){this.global=new n.Point,this.target=null,this.originalEvent=null}var n=t("../core");i.prototype.constructor=i,e.exports=i,i.prototype.getLocalPosition=function(t,e,r){return t.worldTransform.applyInverse(r||this.global,e)}},{"../core":52}],145:[function(t,e,r){function i(t,e){e=e||{},this.renderer=t,this.autoPreventDefault=void 0!==e.autoPreventDefault?e.autoPreventDefault:!0,this.interactionFrequency=e.interactionFrequency||10,this.mouse=new o,this.eventData={stopped:!1,target:null,type:null,data:this.mouse,stopPropagation:function(){this.stopped=!0}},this.interactiveDataPool=[],this.interactionDOMElement=null,this.eventsAdded=!1,this.onMouseUp=this.onMouseUp.bind(this),this.processMouseUp=this.processMouseUp.bind(this),this.onMouseDown=this.onMouseDown.bind(this),this.processMouseDown=this.processMouseDown.bind(this),this.onMouseMove=this.onMouseMove.bind(this),this.processMouseMove=this.processMouseMove.bind(this),this.onMouseOut=this.onMouseOut.bind(this),this.processMouseOverOut=this.processMouseOverOut.bind(this),this.onTouchStart=this.onTouchStart.bind(this),this.processTouchStart=this.processTouchStart.bind(this),this.onTouchEnd=this.onTouchEnd.bind(this),this.processTouchEnd=this.processTouchEnd.bind(this),this.onTouchMove=this.onTouchMove.bind(this),this.processTouchMove=this.processTouchMove.bind(this),this.last=0,this.currentCursorStyle="inherit",this._tempPoint=new n.Point,this.resolution=1,this.setTargetElement(this.renderer.view,this.renderer.resolution)}var n=t("../core"),o=t("./InteractionData");Object.assign(n.DisplayObject.prototype,t("./interactiveTarget")),i.prototype.constructor=i,e.exports=i,i.prototype.setTargetElement=function(t,e){this.removeEvents(),this.interactionDOMElement=t,this.resolution=e||1,this.addEvents()},i.prototype.addEvents=function(){this.interactionDOMElement&&(n.ticker.shared.add(this.update,this),window.navigator.msPointerEnabled&&(this.interactionDOMElement.style["-ms-content-zooming"]="none",this.interactionDOMElement.style["-ms-touch-action"]="none"),window.document.addEventListener("mousemove",this.onMouseMove,!0),this.interactionDOMElement.addEventListener("mousedown",this.onMouseDown,!0),this.interactionDOMElement.addEventListener("mouseout",this.onMouseOut,!0),this.interactionDOMElement.addEventListener("touchstart",this.onTouchStart,!0),this.interactionDOMElement.addEventListener("touchend",this.onTouchEnd,!0),this.interactionDOMElement.addEventListener("touchmove",this.onTouchMove,!0),window.addEventListener("mouseup",this.onMouseUp,!0),this.eventsAdded=!0)},i.prototype.removeEvents=function(){this.interactionDOMElement&&(n.ticker.shared.remove(this.update),window.navigator.msPointerEnabled&&(this.interactionDOMElement.style["-ms-content-zooming"]="",this.interactionDOMElement.style["-ms-touch-action"]=""),window.document.removeEventListener("mousemove",this.onMouseMove,!0),this.interactionDOMElement.removeEventListener("mousedown",this.onMouseDown,!0),this.interactionDOMElement.removeEventListener("mouseout",this.onMouseOut,!0),this.interactionDOMElement.removeEventListener("touchstart",this.onTouchStart,!0),this.interactionDOMElement.removeEventListener("touchend",this.onTouchEnd,!0),this.interactionDOMElement.removeEventListener("touchmove",this.onTouchMove,!0),this.interactionDOMElement=null,window.removeEventListener("mouseup",this.onMouseUp,!0),this.eventsAdded=!1)},i.prototype.update=function(t){if(this._deltaTime+=t,!(this._deltaTime=0;h--)this.processInteractive(t,a[h],r,i,s)&&(o=!0,s=!1,a[h].interactive&&(i=!1));return n&&(i&&!o&&(e.hitArea?(e.worldTransform.applyInverse(t,this._tempPoint),o=e.hitArea.contains(this._tempPoint.x,this._tempPoint.y)):e.containsPoint&&(o=e.containsPoint(t))),e.interactive&&r(e,o)),o},i.prototype.onMouseDown=function(t){this.mouse.originalEvent=t,this.eventData.data=this.mouse,this.eventData.stopped=!1,this.mapPositionToPoint(this.mouse.global,t.clientX,t.clientY),this.autoPreventDefault&&this.mouse.originalEvent.preventDefault(),this.processInteractive(this.mouse.global,this.renderer._lastObjectRendered,this.processMouseDown,!0)},i.prototype.processMouseDown=function(t,e){var r=this.mouse.originalEvent,i=2===r.button||3===r.which;e&&(t[i?"_isRightDown":"_isLeftDown"]=!0,this.dispatchEvent(t,i?"rightdown":"mousedown",this.eventData))},i.prototype.onMouseUp=function(t){this.mouse.originalEvent=t,this.eventData.data=this.mouse,this.eventData.stopped=!1,this.mapPositionToPoint(this.mouse.global,t.clientX,t.clientY),this.processInteractive(this.mouse.global,this.renderer._lastObjectRendered,this.processMouseUp,!0)},i.prototype.processMouseUp=function(t,e){var r=this.mouse.originalEvent,i=2===r.button||3===r.which,n=i?"_isRightDown":"_isLeftDown";e?(this.dispatchEvent(t,i?"rightup":"mouseup",this.eventData),t[n]&&(t[n]=!1,this.dispatchEvent(t,i?"rightclick":"click",this.eventData))):t[n]&&(t[n]=!1,this.dispatchEvent(t,i?"rightupoutside":"mouseupoutside",this.eventData))},i.prototype.onMouseMove=function(t){this.mouse.originalEvent=t,this.eventData.data=this.mouse,this.eventData.stopped=!1,this.mapPositionToPoint(this.mouse.global,t.clientX,t.clientY),this.didMove=!0,this.cursor="inherit",this.processInteractive(this.mouse.global,this.renderer._lastObjectRendered,this.processMouseMove,!0),this.currentCursorStyle!==this.cursor&&(this.currentCursorStyle=this.cursor,this.interactionDOMElement.style.cursor=this.cursor)},i.prototype.processMouseMove=function(t,e){this.dispatchEvent(t,"mousemove",this.eventData),this.processMouseOverOut(t,e)},i.prototype.onMouseOut=function(t){this.mouse.originalEvent=t,this.eventData.stopped=!1,this.mapPositionToPoint(this.mouse.global,t.clientX,t.clientY),this.interactionDOMElement.style.cursor="inherit",this.mapPositionToPoint(this.mouse.global,t.clientX,t.clientY),this.processInteractive(this.mouse.global,this.renderer._lastObjectRendered,this.processMouseOverOut,!1)},i.prototype.processMouseOverOut=function(t,e){e?(t._over||(t._over=!0,this.dispatchEvent(t,"mouseover",this.eventData)),t.buttonMode&&(this.cursor=t.defaultCursor)):t._over&&(t._over=!1,this.dispatchEvent(t,"mouseout",this.eventData))},i.prototype.onTouchStart=function(t){this.autoPreventDefault&&t.preventDefault();for(var e=t.changedTouches,r=e.length,i=0;r>i;i++){var n=e[i],o=this.getTouchData(n);o.originalEvent=t,this.eventData.data=o,this.eventData.stopped=!1,this.processInteractive(o.global,this.renderer._lastObjectRendered,this.processTouchStart,!0),this.returnTouchData(o)}},i.prototype.processTouchStart=function(t,e){e&&(t._touchDown=!0,this.dispatchEvent(t,"touchstart",this.eventData))},i.prototype.onTouchEnd=function(t){this.autoPreventDefault&&t.preventDefault();for(var e=t.changedTouches,r=e.length,i=0;r>i;i++){var n=e[i],o=this.getTouchData(n);o.originalEvent=t,this.eventData.data=o,this.eventData.stopped=!1,this.processInteractive(o.global,this.renderer._lastObjectRendered,this.processTouchEnd,!0),this.returnTouchData(o)}},i.prototype.processTouchEnd=function(t,e){e?(this.dispatchEvent(t,"touchend",this.eventData),t._touchDown&&(t._touchDown=!1,this.dispatchEvent(t,"tap",this.eventData))):t._touchDown&&(t._touchDown=!1,this.dispatchEvent(t,"touchendoutside",this.eventData))},i.prototype.onTouchMove=function(t){this.autoPreventDefault&&t.preventDefault();for(var e=t.changedTouches,r=e.length,i=0;r>i;i++){var n=e[i],o=this.getTouchData(n);o.originalEvent=t, +this.eventData.data=o,this.eventData.stopped=!1,this.processInteractive(o.global,this.renderer._lastObjectRendered,this.processTouchMove,!0),this.returnTouchData(o)}},i.prototype.processTouchMove=function(t,e){e=e,this.dispatchEvent(t,"touchmove",this.eventData)},i.prototype.getTouchData=function(t){var e=this.interactiveDataPool.pop();return e||(e=new o),e.identifier=t.identifier,this.mapPositionToPoint(e.global,t.clientX,t.clientY),navigator.isCocoonJS&&(e.global.x=e.global.x/this.resolution,e.global.y=e.global.y/this.resolution),t.globalX=e.global.x,t.globalY=e.global.y,e},i.prototype.returnTouchData=function(t){this.interactiveDataPool.push(t)},i.prototype.destroy=function(){this.removeEvents(),this.renderer=null,this.mouse=null,this.eventData=null,this.interactiveDataPool=null,this.interactionDOMElement=null,this.onMouseUp=null,this.processMouseUp=null,this.onMouseDown=null,this.processMouseDown=null,this.onMouseMove=null,this.processMouseMove=null,this.onMouseOut=null,this.processMouseOverOut=null,this.onTouchStart=null,this.processTouchStart=null,this.onTouchEnd=null,this.processTouchEnd=null,this.onTouchMove=null,this.processTouchMove=null,this._tempPoint=null},n.WebGLRenderer.registerPlugin("interaction",i),n.CanvasRenderer.registerPlugin("interaction",i)},{"../core":52,"./InteractionData":144,"./interactiveTarget":147}],146:[function(t,e,r){e.exports={InteractionData:t("./InteractionData"),InteractionManager:t("./InteractionManager"),interactiveTarget:t("./interactiveTarget")}},{"./InteractionData":144,"./InteractionManager":145,"./interactiveTarget":147}],147:[function(t,e,r){var i={interactive:!1,buttonMode:!1,interactiveChildren:!0,defaultCursor:"pointer",_over:!1,_touchDown:!1};e.exports=i},{}],148:[function(t,e,r){function i(t,e){var r={},i=t.data.getElementsByTagName("info")[0],n=t.data.getElementsByTagName("common")[0];r.font=i.getAttribute("face"),r.size=parseInt(i.getAttribute("size"),10),r.lineHeight=parseInt(n.getAttribute("lineHeight"),10),r.chars={};for(var a=t.data.getElementsByTagName("char"),h=0;hn;n++){var o=2*n;this._renderCanvasDrawTriangle(t,e,r,o,o+2,o+4)}},i.prototype._renderCanvasTriangles=function(t){for(var e=this.vertices,r=this.uvs,i=this.indices,n=i.length,o=0;n>o;o+=3){var s=2*i[o],a=2*i[o+1],h=2*i[o+2];this._renderCanvasDrawTriangle(t,e,r,s,a,h)}},i.prototype._renderCanvasDrawTriangle=function(t,e,r,i,n,o){var s=this._texture.baseTexture.source,a=this._texture.baseTexture.width,h=this._texture.baseTexture.height,u=e[i],l=e[n],c=e[o],p=e[i+1],d=e[n+1],f=e[o+1],v=r[i]*a,g=r[n]*a,m=r[o]*a,y=r[i+1]*h,x=r[n+1]*h,b=r[o+1]*h;if(this.canvasPadding>0){var _=this.canvasPadding/this.worldTransform.a,T=this.canvasPadding/this.worldTransform.d,E=(u+l+c)/3,S=(p+d+f)/3,w=u-E,C=p-S,A=Math.sqrt(w*w+C*C);u=E+w/A*(A+_),p=S+C/A*(A+T),w=l-E,C=d-S,A=Math.sqrt(w*w+C*C),l=E+w/A*(A+_),d=S+C/A*(A+T),w=c-E,C=f-S,A=Math.sqrt(w*w+C*C),c=E+w/A*(A+_),f=S+C/A*(A+T)}t.save(),t.beginPath(),t.moveTo(u,p),t.lineTo(l,d),t.lineTo(c,f),t.closePath(),t.clip();var M=v*x+y*m+g*b-x*m-y*g-v*b,R=u*x+y*c+l*b-x*c-y*l-u*b,O=v*l+u*m+g*c-l*m-u*g-v*c,P=v*x*c+y*l*m+u*g*b-u*x*m-y*g*c-v*l*b,D=p*x+y*f+d*b-x*f-y*d-p*b,F=v*d+p*m+g*f-d*m-p*g-v*f,L=v*x*f+y*d*m+p*g*b-p*x*m-y*g*f-v*d*b;t.transform(R/M,D/M,O/M,F/M,P/M,L/M),t.drawImage(s,0,0),t.restore()},i.prototype.renderMeshFlat=function(t){var e=this.context,r=t.vertices,i=r.length/2;e.beginPath();for(var n=1;i-2>n;n++){var o=2*n,s=r[o],a=r[o+2],h=r[o+4],u=r[o+1],l=r[o+3],c=r[o+5];e.moveTo(s,u),e.lineTo(a,l),e.lineTo(h,c)}e.fillStyle="#FF0000",e.fill(),e.closePath()},i.prototype._onTextureUpdate=function(){this.updateFrame=!0},i.prototype.getBounds=function(t){if(!this._currentBounds){for(var e=t||this.worldTransform,r=e.a,i=e.b,o=e.c,s=e.d,a=e.tx,h=e.ty,u=-(1/0),l=-(1/0),c=1/0,p=1/0,d=this.vertices,f=0,v=d.length;v>f;f+=2){var g=d[f],m=d[f+1],y=r*g+o*m+a,x=s*m+i*g+h;c=c>y?y:c,p=p>x?x:p,u=y>u?y:u,l=x>l?x:l}if(c===-(1/0)||l===1/0)return n.Rectangle.EMPTY;var b=this._bounds;b.x=c,b.width=u-c,b.y=p,b.height=l-p,this._currentBounds=b}return this._currentBounds},i.prototype.containsPoint=function(t){if(!this.getBounds().contains(t.x,t.y))return!1;this.worldTransform.applyInverse(t,o);var e,r,n=this.vertices,a=s.points;if(this.drawMode===i.DRAW_MODES.TRIANGLES){var h=this.indices;for(r=this.indices.length,e=0;r>e;e+=3){var u=2*h[e],l=2*h[e+1],c=2*h[e+2];if(a[0]=n[u],a[1]=n[u+1],a[2]=n[l],a[3]=n[l+1],a[4]=n[c],a[5]=n[c+1],s.contains(o.x,o.y))return!0}}else for(r=n.length,e=0;r>e;e+=6)if(a[0]=n[e],a[1]=n[e+1],a[2]=n[e+2],a[3]=n[e+3],a[4]=n[e+4],a[5]=n[e+5],s.contains(o.x,o.y))return!0;return!1},i.DRAW_MODES={TRIANGLE_MESH:0,TRIANGLES:1}},{"../core":52}],154:[function(t,e,r){function i(t,e,r){n.call(this,t),this._ready=!0,this.segmentsX=e||10,this.segmentsY=r||10,this.drawMode=n.DRAW_MODES.TRIANGLES,this.refresh()}var n=t("./Mesh");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.refresh=function(){var t=this.segmentsX*this.segmentsY,e=[],r=[],i=[],n=[],o=this.texture,s=this.segmentsX-1,a=this.segmentsY-1,h=0,u=o.width/s,l=o.height/a;for(h=0;t>h;h++){var c=h%this.segmentsX,p=h/this.segmentsX|0;e.push(c*u,p*l),i.push(o._uvs.x0+(o._uvs.x1-o._uvs.x0)*(c/(this.segmentsX-1)),o._uvs.y0+(o._uvs.y3-o._uvs.y0)*(p/(this.segmentsY-1)))}var d=s*a;for(h=0;d>h;h++){var f=h%s,v=h/s|0,g=v*this.segmentsX+f,m=v*this.segmentsX+f+1,y=(v+1)*this.segmentsX+f,x=(v+1)*this.segmentsX+f+1;n.push(g,m,y),n.push(m,x,y)}this.vertices=new Float32Array(e),this.uvs=new Float32Array(i),this.colors=new Float32Array(r),this.indices=new Uint16Array(n)},i.prototype._onTextureUpdate=function(){n.prototype._onTextureUpdate.call(this),this._ready&&this.refresh()}},{"./Mesh":153}],155:[function(t,e,r){function i(t,e){n.call(this,t),this.points=e,this.vertices=new Float32Array(4*e.length),this.uvs=new Float32Array(4*e.length),this.colors=new Float32Array(2*e.length),this.indices=new Uint16Array(2*e.length),this._ready=!0,this.refresh()}var n=t("./Mesh"),o=t("../core");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.refresh=function(){var t=this.points;if(!(t.length<1)&&this._texture._uvs){var e=this.uvs,r=this.indices,i=this.colors,n=this._texture._uvs,s=new o.Point(n.x0,n.y0),a=new o.Point(n.x2-n.x0,n.y2-n.y0);e[0]=0+s.x,e[1]=0+s.y,e[2]=0+s.x,e[3]=1*a.y+s.y,i[0]=1,i[1]=1,r[0]=0,r[1]=1;for(var h,u,l,c=t.length,p=1;c>p;p++)h=t[p],u=4*p,l=p/(c-1),e[u]=l*a.x+s.x,e[u+1]=0+s.y,e[u+2]=l*a.x+s.x,e[u+3]=1*a.y+s.y,u=2*p,i[u]=1,i[u+1]=1,u=2*p,r[u]=u,r[u+1]=u+1;this.dirty=!0}},i.prototype._onTextureUpdate=function(){n.prototype._onTextureUpdate.call(this),this._ready&&this.refresh()},i.prototype.updateTransform=function(){var t=this.points;if(!(t.length<1)){for(var e,r,i,n,o,s,a=t[0],h=0,u=0,l=this.vertices,c=t.length,p=0;c>p;p++)r=t[p],i=4*p,e=p1&&(n=1),o=Math.sqrt(h*h+u*u),s=this._texture.height/2,h/=o,u/=o,h*=s,u*=s,l[i]=r.x+h,l[i+1]=r.y+u,l[i+2]=r.x-h,l[i+3]=r.y-u,a=r;this.containerUpdateTransform()}}},{"../core":52,"./Mesh":153}],156:[function(t,e,r){e.exports={Mesh:t("./Mesh"),Plane:t("./Plane"),Rope:t("./Rope"),MeshRenderer:t("./webgl/MeshRenderer"),MeshShader:t("./webgl/MeshShader")}},{"./Mesh":153,"./Plane":154,"./Rope":155,"./webgl/MeshRenderer":157,"./webgl/MeshShader":158}],157:[function(t,e,r){function i(t){n.ObjectRenderer.call(this,t),this.indices=new Uint16Array(15e3);for(var e=0,r=0;15e3>e;e+=6,r+=4)this.indices[e+0]=r+0,this.indices[e+1]=r+1,this.indices[e+2]=r+2,this.indices[e+3]=r+0,this.indices[e+4]=r+2,this.indices[e+5]=r+3;this.currentShader=null}var n=t("../../core"),o=t("../Mesh");i.prototype=Object.create(n.ObjectRenderer.prototype),i.prototype.constructor=i,e.exports=i,n.WebGLRenderer.registerPlugin("mesh",i),i.prototype.onContextChange=function(){},i.prototype.render=function(t){t._vertexBuffer||this._initWebGL(t);var e=this.renderer,r=e.gl,i=t._texture.baseTexture,n=t.shader,s=t.drawMode===o.DRAW_MODES.TRIANGLE_MESH?r.TRIANGLE_STRIP:r.TRIANGLES;e.blendModeManager.setBlendMode(t.blendMode),n=n?n.shaders[r.id]||n.getShader(e):e.shaderManager.plugins.meshShader,this.renderer.shaderManager.setShader(n),n.uniforms.translationMatrix.value=t.worldTransform.toArray(!0),n.uniforms.projectionMatrix.value=e.currentRenderTarget.projectionMatrix.toArray(!0),n.uniforms.alpha.value=t.worldAlpha,n.syncUniforms(),t.dirty?(t.dirty=!1,r.bindBuffer(r.ARRAY_BUFFER,t._vertexBuffer),r.bufferData(r.ARRAY_BUFFER,t.vertices,r.STATIC_DRAW),r.vertexAttribPointer(n.attributes.aVertexPosition,2,r.FLOAT,!1,0,0),r.bindBuffer(r.ARRAY_BUFFER,t._uvBuffer),r.bufferData(r.ARRAY_BUFFER,t.uvs,r.STATIC_DRAW),r.vertexAttribPointer(n.attributes.aTextureCoord,2,r.FLOAT,!1,0,0),r.activeTexture(r.TEXTURE0),i._glTextures[r.id]?r.bindTexture(r.TEXTURE_2D,i._glTextures[r.id]):this.renderer.updateTexture(i),r.bindBuffer(r.ELEMENT_ARRAY_BUFFER,t._indexBuffer),r.bufferData(r.ELEMENT_ARRAY_BUFFER,t.indices,r.STATIC_DRAW)):(r.bindBuffer(r.ARRAY_BUFFER,t._vertexBuffer),r.bufferSubData(r.ARRAY_BUFFER,0,t.vertices),r.vertexAttribPointer(n.attributes.aVertexPosition,2,r.FLOAT,!1,0,0),r.bindBuffer(r.ARRAY_BUFFER,t._uvBuffer),r.vertexAttribPointer(n.attributes.aTextureCoord,2,r.FLOAT,!1,0,0),r.activeTexture(r.TEXTURE0),i._glTextures[r.id]?r.bindTexture(r.TEXTURE_2D,i._glTextures[r.id]):this.renderer.updateTexture(i),r.bindBuffer(r.ELEMENT_ARRAY_BUFFER,t._indexBuffer),r.bufferSubData(r.ELEMENT_ARRAY_BUFFER,0,t.indices)),r.drawElements(s,t.indices.length,r.UNSIGNED_SHORT,0)},i.prototype._initWebGL=function(t){var e=this.renderer.gl;t._vertexBuffer=e.createBuffer(),t._indexBuffer=e.createBuffer(),t._uvBuffer=e.createBuffer(),e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferData(e.ARRAY_BUFFER,t.vertices,e.DYNAMIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferData(e.ARRAY_BUFFER,t.uvs,e.STATIC_DRAW),t.colors&&(t._colorBuffer=e.createBuffer(),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.bufferData(e.ARRAY_BUFFER,t.colors,e.STATIC_DRAW)),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer),e.bufferData(e.ELEMENT_ARRAY_BUFFER,t.indices,e.STATIC_DRAW)},i.prototype.flush=function(){},i.prototype.start=function(){this.currentShader=null},i.prototype.destroy=function(){n.ObjectRenderer.prototype.destroy.call(this)}},{"../../core":52,"../Mesh":153}],158:[function(t,e,r){function i(t){n.Shader.call(this,t,["precision lowp float;","attribute vec2 aVertexPosition;","attribute vec2 aTextureCoord;","uniform mat3 translationMatrix;","uniform mat3 projectionMatrix;","varying vec2 vTextureCoord;","void main(void){"," gl_Position = vec4((projectionMatrix * translationMatrix * vec3(aVertexPosition, 1.0)).xy, 0.0, 1.0);"," vTextureCoord = aTextureCoord;","}"].join("\n"),["precision lowp float;","varying vec2 vTextureCoord;","uniform float alpha;","uniform sampler2D uSampler;","void main(void){"," gl_FragColor = texture2D(uSampler, vTextureCoord) * alpha ;","}"].join("\n"),{alpha:{type:"1f",value:0},translationMatrix:{type:"mat3",value:new Float32Array(9)},projectionMatrix:{type:"mat3",value:new Float32Array(9)}},{aVertexPosition:0,aTextureCoord:0})}var n=t("../../core");i.prototype=Object.create(n.Shader.prototype),i.prototype.constructor=i,e.exports=i,n.ShaderManager.registerPlugin("meshShader",i)},{"../../core":52}],159:[function(t,e,r){Math.sign||(Math.sign=function(t){return t=+t,0===t||isNaN(t)?t:t>0?1:-1})},{}],160:[function(t,e,r){Object.assign||(Object.assign=t("object-assign"))},{"object-assign":26}],161:[function(t,e,r){t("./Object.assign"),t("./requestAnimationFrame"),t("./Math.sign")},{"./Math.sign":159,"./Object.assign":160,"./requestAnimationFrame":162}],162:[function(t,e,r){(function(t){if(Date.now&&Date.prototype.getTime||(Date.now=function(){return(new Date).getTime()}),!t.performance||!t.performance.now){var e=Date.now();t.performance||(t.performance={}),t.performance.now=function(){return Date.now()-e}}for(var r=Date.now(),i=["ms","moz","webkit","o"],n=0;ni&&(i=0),r=e,setTimeout(function(){r=Date.now(),t(performance.now())},i)}),t.cancelAnimationFrame||(t.cancelAnimationFrame=function(t){clearTimeout(t)})}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{}]},{},[143])(143)}); //# sourceMappingURL=pixi.min.js.map diff --git a/bin/pixi.min.js.map b/bin/pixi.min.js.map index 857d92a..419daff 100644 --- a/bin/pixi.min.js.map +++ b/bin/pixi.min.js.map @@ -1 +1 @@ -{"version":3,"sources":["pixi.js"],"names":["f","exports","module","define","amd","g","window","global","self","this","PIXI","e","t","n","r","s","o","u","a","require","i","Error","code","l","call","length",1,"createContext","setVertexAttribArrays","GLBuffer","GLFramebuffer","GLShader","GLTexture","VertexArrayObject","./lib/GLBuffer","./lib/GLFramebuffer","./lib/GLShader","./lib/GLTexture","./lib/VertexArrayObject","./lib/createContext","./lib/setVertexAttribArrays",2,"EMPTY_ARRAY_BUFFER","ArrayBuffer","Buffer","gl","type","data","drawType","buffer","createBuffer","ARRAY_BUFFER","STATIC_DRAW","upload","prototype","offset","dontBind","bind","byteLength","bufferSubData","bufferData","bindBuffer","createVertexBuffer","createIndexBuffer","ELEMENT_ARRAY_BUFFER","create",3,"Texture","Framebuffer","width","height","framebuffer","createFramebuffer","stencil","texture","enableTexture","framebufferTexture2D","FRAMEBUFFER","COLOR_ATTACHMENT0","TEXTURE_2D","enableStencil","createRenderbuffer","bindRenderbuffer","RENDERBUFFER","framebufferRenderbuffer","DEPTH_STENCIL_ATTACHMENT","renderbufferStorage","DEPTH_STENCIL","clear","b","clearColor","COLOR_BUFFER_BIT","bindFramebuffer","unbind","resize","texImage2D","format","destroy","deleteFramebuffer","createRGBA","enableNearestScaling","enableWrapClamp","RGBA","UNSIGNED_BYTE","fbo","createFloat32","fromData","./GLTexture",4,"compileProgram","extractAttributes","extractUniforms","generateUniformAccessObject","Shader","vertexSrc","fragmentSrc","program","attributes","uniformData","uniforms","useProgram","./shader/compileProgram","./shader/extractAttributes","./shader/extractUniforms","./shader/generateUniformAccessObject",5,"createTexture","mipmap","premultiplyAlpha","source","pixelStorei","UNPACK_PREMULTIPLY_ALPHA_WEBGL","FLOATING_POINT_AVAILABLE","uploadData","Float32Array","ext","getExtension","FLOAT","location","undefined","activeTexture","TEXTURE0","bindTexture","minFilter","linear","texParameteri","TEXTURE_MIN_FILTER","LINEAR_MIPMAP_LINEAR","NEAREST_MIPMAP_NEAREST","LINEAR","NEAREST","magFilter","TEXTURE_MAG_FILTER","enableMipmap","generateMipmap","enableLinearScaling","TEXTURE_WRAP_S","CLAMP_TO_EDGE","TEXTURE_WRAP_T","enableWrapRepeat","REPEAT","deleteTexture","fromSource",6,"nativeVaoExtension","nativeVao","createVertexArrayOES","indexBuffer","dirty","constructor","bindVertexArrayOES","activate","attrib","attribute","pointer","normalized","stride","start","enableVertexAttribArray","addAttribute","push","addIndex","options",7,"CONTEXT_UID","canvas","getContext","id",8,"GL_MAP","attribs","maxAttribs","getParameter","MAX_VERTEX_ATTRIBS","tempAttribState","Array","attribState","disableVertexAttribArray",9,"glVertShader","compileShader","VERTEX_SHADER","glFragShader","FRAGMENT_SHADER","createProgram","attachShader","linkProgram","getProgramParameter","LINK_STATUS","console","error","VALIDATE_STATUS","getError","getProgramInfoLog","warn","deleteProgram","deleteShader","src","shader","createShader","shaderSource","getShaderParameter","COMPILE_STATUS","log","getShaderInfoLog",10,"defaultValue","size","Int32Array","booleanArray","array",11,"mapType","mapSize","totalAttributes","ACTIVE_ATTRIBUTES","attribData","getActiveAttrib","name","getAttribLocation","vertexAttribPointer","./mapSize","./mapType",12,"totalUniforms","ACTIVE_UNIFORMS","getActiveUniform","replace","getUniformLocation","value","./defaultValue",13,"uniformKeys","Object","keys","fullName","nameTokens","split","uniformGroup","getUniformGroup","uniform","defineProperty","get","generateGetter","set","generateSetter","template","getterTemplate","Function","setTemplate","setterTemplate","GLSL_TO_SINGLE_SETTERS","GLSL_TO_ARRAY_SETTERS","cur","join","float","vec2","vec3","vec4","int","ivec2","ivec3","ivec4","bool","bvec2","bvec3","bvec4","mat2","mat3","mat4","sampler2D",14,"GLSL_TO_SIZE",15,"GL_TABLE","typeNames","GL_TO_GLSL_TYPES","tn","FLOAT_VEC2","FLOAT_VEC3","FLOAT_VEC4","INT","INT_VEC2","INT_VEC3","INT_VEC4","BOOL","BOOL_VEC2","BOOL_VEC3","BOOL_VEC4","FLOAT_MAT2","FLOAT_MAT3","FLOAT_MAT4","SAMPLER_2D",16,"process","noop","identity","v","toBool","notId","only_once","fn","apply","arguments","_once","_isArrayLike","arr","_isArray","_arrayEach","iterator","index","_map","result","_range","count","_reduce","memo","x","_forEachOf","object","_keys","key","_indexOf","item","_keyIterator","coll","len","_restParam","func","startIndex","Math","max","rest","_withoutIndex","callback","_eachOfLimit","limit","obj","nextKey","done","running","errored","replenish","err","doParallel","async","eachOf","doParallelLimit","doSeries","eachOfSeries","_asyncMap","eachfn","results","_filter","sort","_reject","cb","_createTester","check","getResult","iteratee","_","_findGetResult","_parallel","tasks","task","args","_concat","y","concat","_queue","worker","concurrency","payload","_insert","q","pos","started","idle","setImmediate","drain","unshift","saturated","_next","workers","removed","workersList","splice","empty","paused","kill","pause","resume","resumeCount","min","w","_console_fn","_times","mapper","_applyEach","fns","go","that","pop","ensureAsync","innerArgs","sync","previous_async","root","noConflict","_toString","toString","isArray","_isObject","k","hasOwnProperty","_setImmediate","_delay","setTimeout","nextTick","forEach","each","forEachSeries","eachSeries","forEachLimit","eachLimit","forEachOf","completed","iter","forEachOfSeries","iterate","forEachOfLimit","eachOfLimit","map","mapSeries","mapLimit","inject","foldl","reduce","foldr","reduceRight","reversed","reverse","transform","select","filter","selectLimit","filterLimit","selectSeries","filterSeries","reject","rejectLimit","rejectSeries","any","some","someLimit","all","every","everyLimit","detect","detectSeries","detectLimit","sortBy","comparator","left","right","criteria","auto","addListener","listeners","removeListener","idx","taskComplete","remainingTasks","slice","runningTasks","ready","requires","listener","taskCallback","dep","safeResults","val","rkey","retry","times","parseTimes","acc","parseInt","DEFAULT_TIMES","interval","DEFAULT_INTERVAL","wrappedTask","wrappedCallback","wrappedResults","retryAttempt","finalAttempt","seriesCallback","retryInterval","opts","attempts","series","waterfall","wrapIterator","next","parallel","parallelLimit","makeCallback","callArgs","concatSeries","whilst","test","doWhilst","calls","until","doUntil","during","truth","doDuring","queue","items","priorityQueue","_compareTasks","priority","_binarySearch","sequence","compare","beg","end","mid","cargo","dir","memoize","hasher","queues","memoized","unmemoized","unmemoize","timesSeries","timesLimit","seq","newargs","nextargs","compose","applyEach","applyEachSeries","forever","constant","values","wrapSync","asyncify","then","message","_process",17,"normalizeArray","parts","allowAboveRoot","up","last","xs","res","splitPathRe","splitPath","filename","exec","resolve","resolvedPath","resolvedAbsolute","path","cwd","TypeError","charAt","p","normalize","isAbsolute","trailingSlash","substr","paths","relative","from","to","trim","fromParts","toParts","samePartsLength","outputParts","sep","delimiter","dirname","basename","extname","str",18,"cleanUpNextTick","draining","currentQueue","queueIndex","drainQueue","timeout","run","clearTimeout","Item","fun","title","browser","env","argv","version","versions","on","once","off","removeAllListeners","emit","binding","chdir","umask",19,"RangeError","errors","mapDomain","string","regexSeparators","labels","encoded","ucs2decode","extra","output","counter","charCodeAt","ucs2encode","stringFromCharCode","basicToDigit","codePoint","base","digitToBasic","digit","flag","adapt","delta","numPoints","firstTime","floor","damp","baseMinusTMin","tMax","skew","decode","input","out","basic","j","oldi","baseMinusT","inputLength","initialN","bias","initialBias","lastIndexOf","maxInt","tMin","encode","handledCPCount","basicLength","m","currentValue","handledCPCountPlusOne","qMinusT","toUnicode","regexPunycode","toLowerCase","toASCII","regexNonASCII","freeExports","nodeType","freeModule","freeGlobal","punycode","overflow","not-basic","invalid-input","String","fromCharCode","ucs2",20,"prop","qs","eq","regexp","maxKeys","kstr","vstr","indexOf","decodeURIComponent",21,"stringifyPrimitive","isFinite","objectKeys","ks","encodeURIComponent",22,"parse","stringify","./decode","./encode",23,"Url","protocol","slashes","auth","host","port","hostname","hash","search","query","pathname","href","urlParse","url","parseQueryString","slashesDenoteHost","isObject","urlFormat","isString","urlResolve","urlResolveObject","resolveObject","arg","isNull","isNullOrUndefined","protocolPattern","portPattern","delims","unwise","autoEscape","nonHostChars","hostEndingChars","hostnameMaxLen","hostnamePartPattern","hostnamePartStart","unsafeProtocol","javascript","javascript:","hostlessProtocol","slashedProtocol","http","https","ftp","gopher","file","http:","https:","ftp:","gopher:","file:","querystring","proto","lowerProto","match","hostEnd","hec","atSign","parseHost","ipv6Hostname","hostparts","part","newpart","validParts","notHost","bit","domainArray","newOut","h","ae","esc","escape","qm","rel","relPath","shift","isSourceAbs","isRelAbs","mustEndAbs","removeAllDots","srcPath","psychotic","authInHost","hasTrailingSlash",24,"earcut","holeIndices","dim","hasHoles","outerLen","outerNode","linkedList","triangles","minX","minY","maxX","maxY","eliminateHoles","earcutLinked","clockwise","sum","insertNode","filterPoints","again","steiner","equals","area","prev","removeNode","ear","pass","indexCurve","stop","isEarHashed","isEar","cureLocalIntersections","splitEarcut","c","pointInTriangle","minTX","minTY","maxTX","maxTY","minZ","zOrder","maxZ","nextZ","z","prevZ","intersects","locallyInside","isValidDiagonal","splitPolygon","list","getLeftmost","compareX","eliminateHole","hole","findHoleBridge","hx","hy","qx","Infinity","tan","tanMin","abs","sortLinked","tail","numMerges","pSize","qSize","inSize","leftmost","ax","ay","bx","by","cx","cy","px","py","intersectsPolygon","middleInside","p1","p2","q1","q2","inside","a2","Node","b2","an","bp",25,"EE","context","EventEmitter","prefix","_events","event","exists","evt","available","ee","a1","a3","a4","a5","events","setMaxListeners","prefixed",26,"toObject","propIsEnumerable","propertyIsEnumerable","assign","target","symbols","getOwnPropertySymbols",27,"called","_each","_eachLimit","_mapLimit","_detect","main_callback","theCallback","working","drained","ts","ds",28,"Loader","baseUrl","progress","loading","_progressChunk","_beforeMiddleware","_afterMiddleware","_boundLoadResource","_loadResource","_boundOnLoad","_onLoad","_buffer","_numToLoad","resources","urlParser","Resource","add","enqueue","onComplete","_handleBaseUrl","parsedUrl","before","pre","after","use","reset","load","resource","dequeue","_dequeue","_runMiddleware","_onComplete","LOAD_TYPE","XHR_READY_STATE","XHR_RESPONSE_TYPE","./Resource","eventemitter3",29,"isDataUrl","crossOrigin","loadType","_determineLoadType","xhrType","metadata","xhr","isJson","isXml","isImage","isAudio","isVideo","_boundComplete","complete","_boundOnError","_onError","_boundOnProgress","_onProgress","_boundXhrOnError","_xhrOnError","_boundXhrOnAbort","_xhrOnAbort","_boundXhrOnLoad","_xhrOnLoad","_boundXdrOnTimeout","_xdrOnTimeout","reqType","setExtMap","substring","_url","useXdr","XDomainRequest","XMLHttpRequest","tempAnchor","removeEventListener","onerror","ontimeout","onprogress","onload","_determineCrossOrigin","IMAGE","_loadImage","AUDIO","_loadElement","VIDEO","XHR","_loadXdr","_loadXhr","Image","addEventListener","Audio","document","createElement","navigator","isCocoonJS","appendChild","_createSource","toUpperCase","_determineXhrType","open","JSON","DOCUMENT","responseType","TEXT","send","xdr","mime","nodeName","lengthComputable","loaded","total","status","statusText","responseText","DOMParser","domparser","parseFromString","div","innerHTML","response","responseURL","loc","samePort","_xhrTypeMap","_getExtension","_loadTypeMap","slashIndex","queryStart","_getMimeFromXhrType","BUFFER","BLOB","DEFAULT","UNSENT","OPENED","HEADERS_RECEIVED","LOADING","DONE","gif","png","bmp","jpg","jpeg","tif","tiff","webp","tga","xhtml","html","htm","xml","tmx","tsx","svg","json","text","txt","setExtensionLoadType","setExtensionXhrType",30,"_keyStr","encodeBinary","bytebuffer","encodedCharIndexes","inx","jnx","paddingBytes",31,"middleware","caching","memory","parsing","blob","./Loader","./middlewares/caching/memory","./middlewares/parsing/blob",32,"cache",33,"b64","URL","webkitURL","Blob","createObjectURL","revokeObjectURL","getResponseHeader","../../Resource","../../b64",34,"description","author","contributors","main","homepage","bugs","license","repository","scripts","build","docs","files","dependencies","brfs","object-assign","pixi-gl-core","resource-loader","devDependencies","browserify","chai","del","gulp","gulp-cached","gulp-concat","gulp-debug","gulp-header","gulp-jshint","gulp-mirror","gulp-plumber","gulp-rename","gulp-sourcemaps","gulp-uglify","gulp-util","jaguarjs-jsdoc","jsdoc","jshint-summary","minimist","mocha","require-dir","run-sequence","testem","vinyl-buffer","vinyl-source-stream","watchify",35,"AccessibilityManager","renderer","style","position","top","zIndex","pool","renderId","debug","children","_onKeyDown","_onMouseMove","isActive","core","DisplayObject","update","view","parentNode","deactivate","removeChild","updateAccessibleObjects","displayObject","visible","accessible","interactive","_accessibleActive","addChild","_lastObjectRendered","rect","getBoundingClientRect","sx","sy","child","utils","removeItems","_accessibleDiv","hitArea","wt","worldTransform","tx","ty","d","getBounds","capHitArea","backgroundColor","borderStyle","_onClick","_onFocus","_onFocusOut","accessibleTitle","tabIndex","interactionManager","plugins","interaction","dispatchEvent","eventData","keyCode","WebGLRenderer","registerPlugin","CanvasRenderer","../core","./accessibleTarget",36,"accessibleTarget",37,"./AccessibilityManager",38,"CONST","VERSION","PI_2","PI","RAD_TO_DEG","DEG_TO_RAD","TARGET_FPMS","RENDERER_TYPE","UNKNOWN","WEBGL","CANVAS","BLEND_MODES","NORMAL","ADD","MULTIPLY","SCREEN","OVERLAY","DARKEN","LIGHTEN","COLOR_DODGE","COLOR_BURN","HARD_LIGHT","SOFT_LIGHT","DIFFERENCE","EXCLUSION","HUE","SATURATION","COLOR","LUMINOSITY","DRAW_MODES","POINTS","LINES","LINE_LOOP","LINE_STRIP","TRIANGLES","TRIANGLE_STRIP","TRIANGLE_FAN","SCALE_MODES","RETINA_PREFIX","RESOLUTION","FILTER_RESOLUTION","DEFAULT_RENDER_OPTIONS","resolution","antialias","forceFXAA","autoResize","transparent","clearBeforeRender","preserveDrawingBuffer","roundPixels","SHAPES","POLY","RECT","CIRC","ELIP","RREC","SPRITE_BATCH_SIZE","../../package.json",39,"Container","math","RenderTexture","_tempMatrix","Matrix","defineProperties","scale","getLocalBounds","_width","_height","onChildrenChange","argumentsLength","parent","addChildAt","swapChildren","child2","index1","getChildIndex","index2","setChildIndex","currentIndex","getChildAt","removeChildAt","removeChildren","beginIndex","endIndex","begin","range","generateTexture","scaleMode","bounds","renderTexture","render","updateTransform","displayObjectUpdateTransform","containerUpdateTransform","_currentBounds","Rectangle","EMPTY","childBounds","childMaxX","childMaxY","childVisible","_bounds","containerGetBounds","matrixCache","IDENTITY","renderWebGL","worldAlpha","renderable","_mask","_filters","currentRenderer","flush","filterManager","pushFilter","maskManager","pushMask","_renderWebGL","popMask","popFilter","_renderCanvas","renderCanvas","alpha","destroyChildren","../math","../textures/RenderTexture","../utils","./DisplayObject",40,"Point","pivot","_rotation","localTransform","filterArea","_sr","_cr","_tempDisplayObjectParent","scaleX","scaleY","rotation","sin","cos","worldVisible","mask","filters","pt","lt","matrix","toGlobal","toLocal","point","applyInverse","setParent","container","setTransform","skewX","skewY","pivotX","pivotY","../const",41,"Graphics","fillAlpha","lineWidth","lineColor","graphicsData","tint","_prevTint","blendMode","currentPath","_webGL","isMask","boundsPadding","_localBounds","glDirty","boundsDirty","cachedSpriteDirty","CanvasBuffer","CanvasGraphics","GraphicsData","tempPoint","clone","updateLocalBounds","lineStyle","color","lineAlpha","shape","points","Polygon","closed","drawShape","moveTo","lineTo","quadraticCurveTo","cpX","cpY","toX","toY","xa","ya","fromX","fromY","bezierCurveTo","cpX2","cpY2","dt","dt2","dt3","t2","t3","arcTo","x1","y1","x2","y2","radius","b1","mm","dd","cc","tt","k1","sqrt","k2","j1","j2","qy","startAngle","atan2","endAngle","arc","anticlockwise","sweep","segs","ceil","startX","startY","theta","theta2","cTheta","sTheta","segMinus","remainder","real","angle","beginFill","filling","fillColor","fill","endFill","drawRect","drawRoundedRect","RoundedRectangle","drawCircle","Circle","drawEllipse","Ellipse","drawPolygon","clearDirty","canvasBuffer","fromCanvas","baseTexture","translate","renderGraphics","setObjectRenderer","graphics","compositeOperation","blendModes","globalCompositeOperation","w0","w1","h0","h1","x3","y3","x4","y4","containsPoint","contains","padding","_webgl","../display/Container","../renderers/canvas/utils/CanvasBuffer","../renderers/canvas/utils/CanvasGraphics","../textures/Texture","./GraphicsData",42,"_lineTint","_fillTint",43,"GraphicsRenderer","ObjectRenderer","graphicsDataPool","primitiveShader","complexPrimitiveShader","maximumSimplePolySize","WebGLGraphicsData","onContextChange","webGLData","shaderManager","updateGraphics","webGL","blendModeManager","setBlendMode","mode","stencilManager","pushStencil","uniform1f","_location","drawElements","UNSIGNED_SHORT","indices","popStencil","setShader","uniformMatrix3fv","translationMatrix","toArray","projectionMatrix","currentRenderTarget","uniform3fv","hex2rgb","aVertexPosition","aColor","drawCount","lastIndex","switchMode","canDrawUsingSimple","buildPoly","buildComplexPoly","buildLine","buildRectangle","buildCircle","buildRoundedRectangle","rectData","verts","vertPos","tempPoints","rrectData","recPoints","quadraticBezierCurve","vecPos","getPt","n1","n2","perc","diff","xb","yb","circleData","totalSegs","seg","firstPoint","lastPoint","midPointX","midPointY","p1x","p1y","p2x","p2y","p3x","p3y","perpx","perpy","perp2x","perp2y","perp3x","perp3y","c1","c2","denom","pdist","dist","indexCount","indexStart","../../const","../../math","../../renderers/webgl/WebGLRenderer","../../renderers/webgl/utils/ObjectRenderer","../../utils","./WebGLGraphicsData",44,"glPoints","glIndices","Uint16Array","deleteBuffer",45,"ticker","Sprite","ParticleContainer","SpriteRenderer","ParticleRenderer","Text","BaseTexture","VideoBaseTexture","TextureUvs","WebGLManager","ShaderManager","RenderTarget","AbstractFilter","FXAAFilter","SpriteMaskFilter","glCore","autoDetectRenderer","noWebGL","isWebGLSupported","./const","./display/Container","./display/DisplayObject","./graphics/Graphics","./graphics/GraphicsData","./graphics/webgl/GraphicsRenderer","./math","./particles/ParticleContainer","./particles/webgl/ParticleRenderer","./renderers/canvas/CanvasRenderer","./renderers/canvas/utils/CanvasBuffer","./renderers/canvas/utils/CanvasGraphics","./renderers/webgl/WebGLRenderer","./renderers/webgl/filters/AbstractFilter","./renderers/webgl/filters/FXAAFilter","./renderers/webgl/filters/SpriteMaskFilter","./renderers/webgl/managers/ShaderManager","./renderers/webgl/managers/WebGLManager","./renderers/webgl/shaders/Shader","./renderers/webgl/utils/ObjectRenderer","./renderers/webgl/utils/RenderTarget","./sprites/Sprite","./sprites/webgl/SpriteRenderer","./text/Text","./textures/BaseTexture","./textures/RenderTexture","./textures/Texture","./textures/TextureUvs","./textures/VideoBaseTexture","./ticker","./utils",46,"fromArray","transpose","newPos","rotate","tx1","append","d1","sr","cr","nsx","prepend","invert","copy","TEMP_MATRIX","./Point",47,48,"./Matrix","./shapes/Circle","./shapes/Ellipse","./shapes/Polygon","./shapes/Rectangle","./shapes/RoundedRectangle",49,"dx","dy","r2","./Rectangle",50,"normx","normy",51,"points_","il","xi","yi","xj","yj","intersect","../Point",52,53,54,"maxSize","properties","batchSize","maxBatchSize","_properties","_maxSize","_batchSize","_buffers","_bufferToUpdate","interactiveChildren","setProperties","uvs","particle","smallestChildIndex","bufferIndex","isRotated","positionX","positionY","finalWidth","finalHeight","globalAlpha","frame","anchor","childTransform","drawImage",55,"ParticleBuffer","dynamicPropertyFlags","vertSize","vertByteSize","dynamicProperties","staticProperties","property","staticStride","staticBuffer","staticData","dynamicStride","dynamicBuffer","dynamicData","initBuffers","dynamicOffset","DYNAMIC_DRAW","staticOffset","uploadDynamic","amount","uploadFunction","uploadStatic",56,"numIndices","tempMatrix","ParticleShader","uploadVertices","aPositionCoord","uploadPosition","aRotation","uploadRotation","aTextureCoord","uploadUvs","uploadAlpha","totalChildren","generateBuffers","uAlpha","_texture","_glTextures","updateTexture","buffers","sprite","crop","_frame","spritePosition","spriteRotation","textureUvs","_uvs","x0","y0","spriteAlpha","./ParticleBuffer","./ParticleShader",57,"TextureShader","../../renderers/webgl/shaders/TextureShader",58,"SystemRenderer","system","sayHello","_backgroundColor","_backgroundColorRgba","_backgroundColorString","hex2string","removeView",59,"refresh","CanvasMaskManager","smoothProperty","imageSmoothingEnabled","webkitImageSmoothingEnabled","mozImageSmoothingEnabled","oImageSmoothingEnabled","msImageSmoothingEnabled","initPlugins","_mapBlendModes","pluginTarget","mixin","cacheParent","screencanvas","fillStyle","clearRect","fillRect","renderDisplayObject","destroyPlugins","tempContext","canUseNewCanvasBlendModes","../SystemRenderer","./utils/CanvasMaskManager",60,61,"updateGraphicsTint","beginPath","closePath","strokeStyle","stroke","strokeRect","kappa","ox","oy","xe","ye","xm","ym","rx","ry","maxRadius","renderGraphicsMask","tintR","tintG","tintB","../../../const",62,"maskData","save","cacheAlpha","clip","restore","./CanvasGraphics",63,"CanvasTinter","getTintedTexture","roundColor","stringColor","tintCache","tintMethod","convertTintToImage","tintImage","toDataURL","tintWithMultiply","tintWithOverlay","tintWithPerPixel","rgbValues","pixelData","getImageData","pixels","putImageData","step","cacheStepsPerColorChannel","rgb2hex","canUseMultiply","../../../utils",64,"TextureManager","_managedTextures","glTextures","getTexture","hasLoaded","glTexture","uid","destroyTexture","_skipRemove","removeAll",65,"handleContextLost","handleContextRestored","_contextOptions","premultipliedAlpha","MaskManager","StencilManager","FilterManager","BlendModeManager","_initContext","mapWebGLBlendModesToPixi","drawModes","mapWebGLDrawModesToPixi","_activeShader","_activeRenderTarget","_activeTextureLocation","_activeTexture","textureManager","disable","DEPTH_TEST","CULL_FACE","enable","BLEND","rootRenderTarget","bindRenderTarget","isContextLost","renderTarget","setFilterStack","filterStack","objectRenderer","setMaskStack","stencilMaskStack","bindShader","preventDefault","destroyAll","./TextureManager","./filters/FXAAFilter","./managers/BlendModeManager","./managers/FilterManager","./managers/MaskManager","./managers/ShaderManager","./managers/StencilManager","./utils/ObjectRenderer","./utils/RenderTarget","./utils/mapWebGLBlendModesToPixi","./utils/mapWebGLDrawModesToPixi",66,"shaders","DefaultShader","defaultVertexSrc","defaultFragmentSrc","getShader","applyFilter","syncUniform","../shaders/TextureShader",67,"./AbstractFilter",68,"maskMatrix","otherMatrix","maskSprite","calculateMappedMatrix","../../../math",69,"currentBlendMode","blendFunc","./WebGLManager",70,"texturePool","textureSize","currentFrame","Quad","quad","capFilterArea","getRenderTarget","setRenderTarget","filterData","previousFilterData","vertexBuffer","defaultShader","dimensions","vertices","returnRenderTarget","flipTexture","flopTexture","temp","inputTarget","outputTarget","syncUniforms","outputMatrix","mappedMatrix","ratio","translateScaleX","translateScaleY","offsetY","../utils/Quad","../utils/RenderTarget",71,"stencilStack","alphaMaskPool","AlphaMaskFilter","pushSpriteMask","pushStencilMask","popSpriteMask","popStencilMask","alphaMaskFilter","../filters/SpriteMaskFilter",72,"maxAttibs","stack","_currentId","currentShader","ComplexPrimitiveShader","PrimitiveShader","setAttribs","../shaders/ComplexPrimitiveShader","../shaders/PrimitiveShader",73,"WebGLMaskManager","STENCIL_TEST","attachStencilBuffer","sms","bindGraphics","STENCIL_BUFFER_BIT","level","colorMask","stencilFunc","ALWAYS","stencilOp","KEEP","INVERT","EQUAL","DECR","INCR",74,75,"./Shader",76,77,"textureCount","init","compile","cacheUniformLocations","cacheAttributeLocations","_glCompile","uniform1i","uniform2f","uniform3f","uniform4f","uniform1iv","uniform2iv","uniform3iv","uniform4iv","uniform1fv","uniform2fv","uniform4fv","uniformMatrix2fv","uniformMatrix4fv","_array","initSampler2D","textureData","luminance","LUMINANCE","wrapS","wrapT",78,"customUniforms","customAttributes","uSampler",79,80,"../managers/WebGLManager",81,"colors","rect2",82,"StencilMaskStack","frameBuffer","stencilBuffer","projectionFrame","calculateProjection","viewport","pm","./StencilMaskStack",83,84,"ONE","ONE_MINUS_SRC_ALPHA","SRC_ALPHA","DST_ALPHA","DST_COLOR",85,86,"cachedTint","textureDirty","vertexDirty","vertexData","sign","_onTextureUpdate","caclulateVertices","valid","smoothingEnabled","tintedTexture","destroyBaseTexture","fromFrame","frameId","TextureCache","fromImage","imageId","crossorigin","../renderers/canvas/utils/CanvasTinter",87,"numVerts","positions","Uint32Array","createIndicesForQuads","currentBatchSize","sprites","groupCount","groups","textures","ids","blend","currentGroup","currentTexture","generateMultiTextureShader","MAX_TEXTUES","_shader","vao","aTextureId","nextTexture","_enabled","_id","uvs_uint32","renderSprites","subarray","group","../../renderers/webgl/shaders/_TextureShader","../../utils/createIndicesForQuads","./generateMultiTextureShader",88,"maxTextures","generateSampleSrc","fragTemplate","sampleValues","uSamplers",89,"_text","_style","fontPropertiesCache","fontPropertiesCanvas","fontPropertiesContext","updateText","dropShadowColor","font","align","strokeThickness","wordWrap","wordWrapWidth","dropShadow","dropShadowAngle","dropShadowDistance","dropShadowBlur","textBaseline","lineJoin","miterLimit","outputText","lines","lineWidths","maxLineWidth","fontProperties","determineFontProperties","measureText","lineHeight","fontSize","linePositionX","linePositionY","shadowColor","shadowBlur","xShadowOffset","yShadowOffset","ascent","fillText","strokeText","fontStyle","baseline","imagedata","line","descent","spaceLeft","words","wordWidth","wordWidthWithSpace","../sprites/Sprite",90,"realWidth","realHeight","isLoading","imageUrl","isPowerOfTwo","_active","loadSource","naturalWidth","naturalHeight","wasLoading","_sourceLoaded","scope","BaseTextureCache","_pixiId","dispose","updateSourceImage","newSrc","image","getResolutionOfUrl",91,"textureBuffer","_updateUvs","updateBase","currentBounds","cachedWt","realResolution","getImage","getBase64","getCanvas","webGLPixels","Uint8Array","readPixels","tempCanvas","canvasData","getPixels","getPixel","../renderers/webgl/managers/FilterManager","../renderers/webgl/utils/RenderTarget","./BaseTexture","./Texture",92,"noFrame","requiresUpdate","onBaseTextureUpdated","onBaseTextureLoaded","destroyBase","fromVideo","video","fromVideoUrl","videoUrl","fromUrl","addTextureToCache","removeTextureFromCache","./TextureUvs","./VideoBaseTexture",93,"xy0_uint32","xy1_uint32","xy2_uint32","xy3_uint32","baseFrame","tw","th",94,"readyState","HAVE_ENOUGH_DATA","HAVE_FUTURE_DATA","autoUpdate","_onUpdate","_onCanPlay","_onPlayStart","_onPlayStop","__loaded","createSource","requestAnimationFrame","videoWidth","videoHeight","play","videoSrc","fromUrls",95,"Ticker","_this","_tick","time","_requestId","_emitter","TICK","_maxElapsedMS","autoStart","deltaTime","elapsedMS","lastTime","speed","FPS","minFPS","fps","minFPMS","_requestIfNeeded","performance","now","_cancelIfNeeded","cancelAnimationFrame","_startIfPossible","addOnce","remove","currentTime",96,"shared","./Ticker",97,"totalIndices",98,"_uid","_saidHello","hex","rgb","pngHead","pngEnd","magenta","yellow","getNextPowerOfTwo","number","parseFloat","userAgent","contextOptions","WebGLRenderingContext","getContextAttributes","startIdx","removeCount","./pluginTarget",99,"__plugins","pluginName","ctor",100,"mesh","extras","SpriteBatch","ReferenceError","AssetLoader","Stage","DisplayObjectContainer","Strip","Mesh","Rope","MovieClip","TilingSprite","BitmapText","scaleModes","setTexture","setText","setStyle","setFrame","uuid","./core","./extras","./filters","./mesh",101,"textWidth","textHeight","_glyphs","_font","maxWidth","maxLineHeight","fonts","prevCharCode","chars","lastLineWidth","lastSpace","charCode","charData","kerning","xOffset","yOffset","xAdvance","lineAlignOffsets","alignOffset","lenChars","validate",102,"_textures","_durations","animationSpeed","loop","_currentTime","playing","totalFrames","gotoAndStop","frameNumber","gotoAndPlay","elapsed","lag","fromFrames","frames","fromImages","images",103,"tileScale","tilePosition","_canvasPattern","uFrame","uTransform","uPixelSize","tempUvs","tempWidth","tempHeight","modX","modY","createPattern","_tileScaleOffset","../core/renderers/canvas/utils/CanvasTinter",104,"_cacheAsBitmap","_originalRenderWebGL","_originalRenderCanvas","_originalUpdateTransform","_originalHitTest","_originalDestroy","_cachedSprite","cacheAsBitmap","_originalGetBounds","_originalContainsPoint","_renderCachedWebGL","_renderCachedCanvas","_cacheAsBitmapDestroy","_destroyCachedDisplayObject","_initCachedDisplayObject","cachedRenderTarget","_getCachedBounds","_initCachedDisplayObjectCanvas",105,"getChildByName",106,"getGlobalPosition",107,"./BitmapText","./MovieClip","./TilingSprite","./cacheAsBitmap","./getChildByName","./getGlobalPosition",108,"AsciiFilter","pixelSize","../../core",109,"BloomFilter","blurXFilter","BlurXFilter","blurYFilter","BlurYFilter","defaultFilter","blur","blurX","blurY","../blur/BlurXFilter","../blur/BlurYFilter",110,"BlurDirFilter","dirX","dirY","strength","passes",111,"BlurFilter","./BlurXFilter","./BlurYFilter",112,"flip","flop",113,114,"SmartBlurFilter",115,"ColorMatrixFilter","_loadMatrix","multiply","newMatrix","_multiply","_colorMatrix","brightness","greyscale","grayscale","blackAndWhite","hue","lumR","lumG","lumB","contrast","saturate","desaturate","negative","sepia","technicolor","polaroid","toBGR","kodachrome","browni","vintage","colorTone","desaturation","toned","lightColor","darkColor","lR","lG","lB","dR","dG","dB","night","intensity","predator","lsd",116,"ColorStepFilter",117,"ConvolutionFilter","texelSize",118,"CrossHatchFilter",119,"DisplacementFilter","mapSampler",120,"DotScreenFilter",121,"BlurYTintFilter",122,"DropShadowFilter","blurYTintFilter","_dirtyPosition","_angle","_distance","hideObject","distance","./BlurYTintFilter",123,"GrayFilter","gray",124,"InvertFilter","NoiseFilter","PixelateFilter","RGBSplitFilter","ShockwaveFilter","SepiaFilter","TiltShiftFilter","TiltShiftXFilter","TiltShiftYFilter","TwistFilter","./ascii/AsciiFilter","./bloom/BloomFilter","./blur/BlurDirFilter","./blur/BlurFilter","./blur/BlurXFilter","./blur/BlurYFilter","./blur/SmartBlurFilter","./color/ColorMatrixFilter","./color/ColorStepFilter","./convolution/ConvolutionFilter","./crosshatch/CrossHatchFilter","./displacement/DisplacementFilter","./dot/DotScreenFilter","./dropshadow/DropShadowFilter","./gray/GrayFilter","./invert/InvertFilter","./noise/NoiseFilter","./pixelate/PixelateFilter","./rgb/RGBSplitFilter","./sepia/SepiaFilter","./shockwave/ShockwaveFilter","./tiltshift/TiltShiftFilter","./tiltshift/TiltShiftXFilter","./tiltshift/TiltShiftYFilter","./twist/TwistFilter",125,126,"noise",127,128,"red","green","blue",129,130,"center","params",131,"TiltShiftAxisFilter","gradientBlur","innerHeight","texSize","innerWidth","updateDelta",132,"tiltShiftXFilter","tiltShiftYFilter","./TiltShiftXFilter","./TiltShiftYFilter",133,"./TiltShiftAxisFilter",134,135,136,"loaders","accessibility","loader","./accessibility","./deprecation","./interaction","./loaders","./polyfill",137,"InteractionData","originalEvent","getLocalPosition","globalPos",138,"InteractionManager","autoPreventDefault","interactionFrequency","mouse","stopped","stopPropagation","interactiveDataPool","interactionDOMElement","eventsAdded","onMouseUp","processMouseUp","onMouseDown","processMouseDown","onMouseMove","processMouseMove","onMouseOut","processMouseOverOut","onTouchStart","processTouchStart","onTouchEnd","processTouchEnd","onTouchMove","processTouchMove","currentCursorStyle","_tempPoint","setTargetElement","element","removeEvents","addEvents","msPointerEnabled","_deltaTime","didMove","cursor","processInteractive","eventString","mapPositionToPoint","hitTest","hit","interactiveParent","clientX","clientY","isRightButton","button","which","isDown","_over","buttonMode","defaultCursor","changedTouches","cLength","touchEvent","touchData","getTouchData","returnTouchData","_touchDown","identifier","globalX","globalY","./InteractionData","./interactiveTarget",139,"interactiveTarget","./InteractionManager",140,141,"info","getElementsByTagName","common","getAttribute","letters","textureRect","kernings","first","second","bitmapFont","xmlUrl","textureUrl","loadOptions","imageMetadata","../extras",142,"bitmapFontParser","spritesheetParser","textureParser","./bitmapFontParser","./loader","./spritesheetParser","./textureParser",143,"ResourceLoader","_pixiMiddleware","addPixiMiddleware",144,"route","meta","rotated","trimmed","spriteSourceSize","sourceSize",145,146,"drawMode","canvasPadding","TRIANGLE_MESH","tempPolygon","_renderCanvasTriangleMesh","_renderCanvasTriangles","_renderCanvasDrawTriangle","index0","textureSource","textureWidth","textureHeight","u0","u1","u2","v0","v1","v2","paddingX","paddingY","centerX","centerY","normX","normY","deltaA","deltaB","deltaC","deltaD","deltaE","deltaF","renderMeshFlat","updateFrame","rawX","rawY","ind0","ind1","ind2",147,"Plane","segmentsX","segmentsY","_ready","segmentsXSub","segmentsYSub","sizeX","sizeY","totalSub","xpos","ypos","value2","value3","value4","./Mesh",148,"factor","nextPoint","perpLength","num","perpX","perpY",149,"MeshRenderer","MeshShader","./Plane","./Rope","./webgl/MeshRenderer","./webgl/MeshShader",150,"_vertexBuffer","_initWebGL","meshShader","_uvBuffer","_indexBuffer","_colorBuffer","../Mesh",151,152,"isNaN",153,154,"./Math.sign","./Object.assign","./requestAnimationFrame",155,"Date","getTime","startTime","vendors","delay"],"mappings":"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EAAA,GAAAuE,EAAA,GAAAvE,EAAA,GAAAuE,EAAA,GAAAvE,EAAA,GAAAuE,EAAA,IAAAvE,EAAA,GAAAuE,EAAA,IACAqkB,EAAA,GAAA5oB,EAAA,GAAAuE,EAAA,GAAAvE,EAAA,GAAAuE,EAAA,GAAAvE,EAAA,GAAAuE,EAAA,IAAAvE,EAAA,GAAAuE,EAAA,IAGAqkB,EAAA,IAAA5oB,EAAA,IAAAuE,EAAA,GAAAvE,EAAA,IAAAuE,EAAA,GAAAvE,EAAA,IAAAuE,EAAA,IAAAvE,EAAA,IAAAuE,EAAA,IACAqkB,EAAA,IAAA5oB,EAAA,IAAAuE,EAAA,GAAAvE,EAAA,IAAAuE,EAAA,GAAAvE,EAAA,IAAAuE,EAAA,IAAAvE,EAAA,IAAAuE,EAAA,IACAqkB,EAAA,IAAA5oB,EAAA,IAAAuE,EAAA,GAAAvE,EAAA,IAAAuE,EAAA,GAAAvE,EAAA,IAAAuE,EAAA,IAAAvE,EAAA,IAAAuE,EAAA,IACAqkB,EAAA,IAAA5oB,EAAA,IAAAuE,EAAA,GAAAvE,EAAA,IAAAuE,EAAA,GAAAvE,EAAA,IAAAuE,EAAA,IAAAvE,EAAA,IAAAuE,EAAA,IACAqkB,EAAA,IAAA5oB,EAAA,IAAAuE,EAAA,GAAAvE,EAAA,IAAAuE,EAAA,GAAAvE,EAAA,IAAAuE,EAAA,IAAAvE,EAAA,IAAAuE,EAAA,IAGAqkB,EAAA,IAAA5oB,EAAA,IAAAuE,EAAA,GAAAvE,EAAA,IAAAuE,EAAA,GAAAvE,EAAA,IAAAuE,EAAA,IAAAvE,EAAA,IAAAuE,EAAA,IACAqkB,EAAA,IAAA5oB,EAAA,IAAAuE,EAAA,GAAAvE,EAAA,IAAAuE,EAAA,GAAAvE,EAAA,IAAAuE,EAAA,IAAAvE,EAAA,IAAAuE,EAAA,IACAqkB,EAAA,IAAA5oB,EAAA,IAAAuE,EAAA,GAAAvE,EAAA,IAAAuE,EAAA,GAAAvE,EAAA,IAAAuE,EAAA,IAAAvE,EAAA,IAAAuE,EAAA,IACAqkB,EAAA,IAAA5oB,EAAA,IAAAuE,EAAA,GAAAvE,EAAA,IAAAuE,EAAA,GAAAvE,EAAA,IAAAuE,EAAA,IAAAvE,EAAA,IAAAuE,EAAA,IACAqkB,EAA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","file":"pixi.min.js","sourcesContent":[null],"sourceRoot":"./"} \ No newline at end of file +{"version":3,"sources":["pixi.js"],"names":["f","exports","module","define","amd","g","window","global","self","this","PIXI","e","t","n","r","s","o","u","a","require","i","Error","code","l","call","length",1,"createContext","setVertexAttribArrays","GLBuffer","GLFramebuffer","GLShader","GLTexture","VertexArrayObject","./lib/GLBuffer","./lib/GLFramebuffer","./lib/GLShader","./lib/GLTexture","./lib/VertexArrayObject","./lib/createContext","./lib/setVertexAttribArrays",2,"EMPTY_ARRAY_BUFFER","ArrayBuffer","Buffer","gl","type","data","drawType","buffer","createBuffer","ARRAY_BUFFER","STATIC_DRAW","upload","prototype","offset","dontBind","bind","byteLength","bufferSubData","bufferData","bindBuffer","createVertexBuffer","createIndexBuffer","ELEMENT_ARRAY_BUFFER","create",3,"Texture","Framebuffer","width","height","framebuffer","createFramebuffer","stencil","texture","enableTexture","framebufferTexture2D","FRAMEBUFFER","COLOR_ATTACHMENT0","TEXTURE_2D","enableStencil","createRenderbuffer","bindRenderbuffer","RENDERBUFFER","framebufferRenderbuffer","DEPTH_STENCIL_ATTACHMENT","renderbufferStorage","DEPTH_STENCIL","clear","b","clearColor","COLOR_BUFFER_BIT","bindFramebuffer","unbind","resize","uploadData","destroy","deleteFramebuffer","createRGBA","fromData","enableNearestScaling","enableWrapClamp","fbo","createFloat32","./GLTexture",4,"compileProgram","extractAttributes","extractUniforms","generateUniformAccessObject","Shader","vertexSrc","fragmentSrc","program","attributes","uniformData","uniforms","useProgram","./shader/compileProgram","./shader/extractAttributes","./shader/extractUniforms","./shader/generateUniformAccessObject",5,"format","createTexture","mipmap","premultiplyAlpha","RGBA","UNSIGNED_BYTE","source","pixelStorei","UNPACK_PREMULTIPLY_ALPHA_WEBGL","texImage2D","FLOATING_POINT_AVAILABLE","Float32Array","ext","getExtension","FLOAT","location","undefined","activeTexture","TEXTURE0","bindTexture","minFilter","linear","texParameteri","TEXTURE_MIN_FILTER","LINEAR_MIPMAP_LINEAR","NEAREST_MIPMAP_NEAREST","LINEAR","NEAREST","magFilter","TEXTURE_MAG_FILTER","enableMipmap","generateMipmap","enableLinearScaling","TEXTURE_WRAP_S","CLAMP_TO_EDGE","TEXTURE_WRAP_T","enableWrapRepeat","REPEAT","deleteTexture","fromSource",6,"nativeVaoExtension","nativeVao","createVertexArrayOES","indexBuffer","dirty","constructor","bindVertexArrayOES","activate","attrib","attribute","pointer","normalized","stride","start","enableVertexAttribArray","addAttribute","push","addIndex","options","draw","size","drawElements","UNSIGNED_SHORT",7,"CONTEXT_UID","canvas","getContext","id",8,"GL_MAP","attribs","maxAttribs","getParameter","MAX_VERTEX_ATTRIBS","tempAttribState","Array","attribState","disableVertexAttribArray",9,"glVertShader","compileShader","VERTEX_SHADER","glFragShader","FRAGMENT_SHADER","createProgram","attachShader","linkProgram","getProgramParameter","LINK_STATUS","console","error","VALIDATE_STATUS","getError","getProgramInfoLog","warn","deleteProgram","deleteShader","src","shader","createShader","shaderSource","getShaderParameter","COMPILE_STATUS","log","getShaderInfoLog",10,"defaultValue","Int32Array","booleanArray","array",11,"mapType","mapSize","totalAttributes","ACTIVE_ATTRIBUTES","attribData","getActiveAttrib","name","getAttribLocation","vertexAttribPointer","./mapSize","./mapType",12,"totalUniforms","ACTIVE_UNIFORMS","getActiveUniform","replace","getUniformLocation","value","./defaultValue",13,"uniformKeys","Object","keys","fullName","nameTokens","split","uniformGroup","getUniformGroup","uniform","defineProperty","get","generateGetter","set","generateSetter","template","getterTemplate","Function","setTemplate","setterTemplate","GLSL_TO_SINGLE_SETTERS","GLSL_TO_ARRAY_SETTERS","cur","join","float","vec2","vec3","vec4","int","ivec2","ivec3","ivec4","bool","bvec2","bvec3","bvec4","mat2","mat3","mat4","sampler2D",14,"GLSL_TO_SIZE",15,"GL_TABLE","typeNames","GL_TO_GLSL_TYPES","tn","FLOAT_VEC2","FLOAT_VEC3","FLOAT_VEC4","INT","INT_VEC2","INT_VEC3","INT_VEC4","BOOL","BOOL_VEC2","BOOL_VEC3","BOOL_VEC4","FLOAT_MAT2","FLOAT_MAT3","FLOAT_MAT4","SAMPLER_2D",16,"process","noop","identity","v","toBool","notId","only_once","fn","apply","arguments","_once","_isArrayLike","arr","_isArray","_arrayEach","iterator","index","_map","result","_range","count","_reduce","memo","x","_forEachOf","object","_keys","key","_indexOf","item","_keyIterator","coll","len","_restParam","func","startIndex","Math","max","rest","_withoutIndex","callback","_eachOfLimit","limit","obj","nextKey","done","running","errored","replenish","err","doParallel","async","eachOf","doParallelLimit","doSeries","eachOfSeries","_asyncMap","eachfn","results","_filter","sort","_reject","cb","_createTester","check","getResult","iteratee","_","_findGetResult","_parallel","tasks","task","args","_concat","y","concat","_queue","worker","concurrency","payload","_insert","q","pos","started","idle","setImmediate","drain","unshift","saturated","_next","workers","removed","workersList","splice","empty","paused","kill","pause","resume","resumeCount","min","w","_console_fn","_times","mapper","_applyEach","fns","go","that","pop","ensureAsync","innerArgs","sync","previous_async","root","noConflict","_toString","toString","isArray","_isObject","k","hasOwnProperty","_setImmediate","_delay","setTimeout","nextTick","forEach","each","forEachSeries","eachSeries","forEachLimit","eachLimit","forEachOf","completed","iter","forEachOfSeries","iterate","forEachOfLimit","eachOfLimit","map","mapSeries","mapLimit","inject","foldl","reduce","foldr","reduceRight","reversed","reverse","transform","select","filter","selectLimit","filterLimit","selectSeries","filterSeries","reject","rejectLimit","rejectSeries","any","some","someLimit","all","every","everyLimit","detect","detectSeries","detectLimit","sortBy","comparator","left","right","criteria","auto","addListener","listeners","removeListener","idx","taskComplete","remainingTasks","slice","runningTasks","ready","requires","listener","taskCallback","dep","safeResults","val","rkey","retry","times","parseTimes","acc","parseInt","DEFAULT_TIMES","interval","DEFAULT_INTERVAL","wrappedTask","wrappedCallback","wrappedResults","retryAttempt","finalAttempt","seriesCallback","retryInterval","opts","attempts","series","waterfall","wrapIterator","next","parallel","parallelLimit","makeCallback","callArgs","concatSeries","whilst","test","doWhilst","calls","until","doUntil","during","truth","doDuring","queue","items","priorityQueue","_compareTasks","priority","_binarySearch","sequence","compare","beg","end","mid","cargo","dir","memoize","hasher","queues","memoized","unmemoized","unmemoize","timesSeries","timesLimit","seq","newargs","nextargs","compose","applyEach","applyEachSeries","forever","constant","values","wrapSync","asyncify","then","message","_process",17,"normalizeArray","parts","allowAboveRoot","up","last","xs","res","splitPathRe","splitPath","filename","exec","resolve","resolvedPath","resolvedAbsolute","path","cwd","TypeError","charAt","p","normalize","isAbsolute","trailingSlash","substr","paths","relative","from","to","trim","fromParts","toParts","samePartsLength","outputParts","sep","delimiter","dirname","basename","extname","str",18,"cleanUpNextTick","draining","currentQueue","queueIndex","drainQueue","timeout","run","clearTimeout","Item","fun","title","browser","env","argv","version","versions","on","once","off","removeAllListeners","emit","binding","chdir","umask",19,"RangeError","errors","mapDomain","string","regexSeparators","labels","encoded","ucs2decode","extra","output","counter","charCodeAt","ucs2encode","stringFromCharCode","basicToDigit","codePoint","base","digitToBasic","digit","flag","adapt","delta","numPoints","firstTime","floor","damp","baseMinusTMin","tMax","skew","decode","input","out","basic","j","oldi","baseMinusT","inputLength","initialN","bias","initialBias","lastIndexOf","maxInt","tMin","encode","handledCPCount","basicLength","m","currentValue","handledCPCountPlusOne","qMinusT","toUnicode","regexPunycode","toLowerCase","toASCII","regexNonASCII","freeExports","nodeType","freeModule","freeGlobal","punycode","overflow","not-basic","invalid-input","String","fromCharCode","ucs2",20,"prop","qs","eq","regexp","maxKeys","kstr","vstr","indexOf","decodeURIComponent",21,"stringifyPrimitive","isFinite","objectKeys","ks","encodeURIComponent",22,"parse","stringify","./decode","./encode",23,"Url","protocol","slashes","auth","host","port","hostname","hash","search","query","pathname","href","urlParse","url","parseQueryString","slashesDenoteHost","isObject","urlFormat","isString","urlResolve","urlResolveObject","resolveObject","arg","isNull","isNullOrUndefined","protocolPattern","portPattern","delims","unwise","autoEscape","nonHostChars","hostEndingChars","hostnameMaxLen","hostnamePartPattern","hostnamePartStart","unsafeProtocol","javascript","javascript:","hostlessProtocol","slashedProtocol","http","https","ftp","gopher","file","http:","https:","ftp:","gopher:","file:","querystring","proto","lowerProto","match","hostEnd","hec","atSign","parseHost","ipv6Hostname","hostparts","part","newpart","validParts","notHost","bit","domainArray","newOut","h","ae","esc","escape","qm","rel","relPath","shift","isSourceAbs","isRelAbs","mustEndAbs","removeAllDots","srcPath","psychotic","authInHost","hasTrailingSlash",24,"earcut","holeIndices","dim","hasHoles","outerLen","outerNode","linkedList","triangles","minX","minY","maxX","maxY","eliminateHoles","earcutLinked","clockwise","sum","insertNode","filterPoints","again","steiner","equals","area","prev","removeNode","ear","pass","indexCurve","stop","isEarHashed","isEar","cureLocalIntersections","splitEarcut","c","pointInTriangle","minTX","minTY","maxTX","maxTY","minZ","zOrder","maxZ","nextZ","z","prevZ","intersects","locallyInside","isValidDiagonal","splitPolygon","list","getLeftmost","compareX","eliminateHole","hole","findHoleBridge","hx","hy","qx","Infinity","tan","tanMin","abs","sortLinked","tail","numMerges","pSize","qSize","inSize","leftmost","ax","ay","bx","by","cx","cy","px","py","intersectsPolygon","middleInside","p1","p2","q1","q2","inside","a2","Node","b2","an","bp",25,"EE","context","EventEmitter","prefix","_events","event","exists","evt","available","ee","a1","a3","a4","a5","events","setMaxListeners","prefixed",26,"toObject","propIsEnumerable","propertyIsEnumerable","assign","target","symbols","getOwnPropertySymbols",27,"called","_each","_eachLimit","_mapLimit","_detect","main_callback","theCallback","working","drained","ts","ds",28,"Loader","baseUrl","progress","loading","_progressChunk","_beforeMiddleware","_afterMiddleware","_boundLoadResource","_loadResource","_boundOnLoad","_onLoad","_buffer","_numToLoad","resources","urlParser","Resource","add","enqueue","onComplete","_handleBaseUrl","parsedUrl","before","pre","after","use","reset","load","resource","dequeue","_dequeue","_runMiddleware","_onComplete","LOAD_TYPE","XHR_READY_STATE","XHR_RESPONSE_TYPE","./Resource","eventemitter3",29,"isDataUrl","crossOrigin","loadType","_determineLoadType","xhrType","metadata","xhr","isJson","isXml","isImage","isAudio","isVideo","_boundComplete","complete","_boundOnError","_onError","_boundOnProgress","_onProgress","_boundXhrOnError","_xhrOnError","_boundXhrOnAbort","_xhrOnAbort","_boundXhrOnLoad","_xhrOnLoad","_boundXdrOnTimeout","_xdrOnTimeout","reqType","setExtMap","substring","_url","useXdr","XDomainRequest","XMLHttpRequest","tempAnchor","removeEventListener","onerror","ontimeout","onprogress","onload","_determineCrossOrigin","IMAGE","_loadImage","AUDIO","_loadElement","VIDEO","XHR","_loadXdr","_loadXhr","Image","addEventListener","Audio","document","createElement","navigator","isCocoonJS","appendChild","_createSource","toUpperCase","_determineXhrType","open","JSON","DOCUMENT","responseType","TEXT","send","xdr","mime","nodeName","lengthComputable","loaded","total","status","statusText","responseText","DOMParser","domparser","parseFromString","div","innerHTML","response","responseURL","loc","samePort","_xhrTypeMap","_getExtension","_loadTypeMap","slashIndex","queryStart","_getMimeFromXhrType","BUFFER","BLOB","DEFAULT","UNSENT","OPENED","HEADERS_RECEIVED","LOADING","DONE","gif","png","bmp","jpg","jpeg","tif","tiff","webp","tga","xhtml","html","htm","xml","tmx","tsx","svg","json","text","txt","setExtensionLoadType","setExtensionXhrType",30,"_keyStr","encodeBinary","bytebuffer","encodedCharIndexes","inx","jnx","paddingBytes",31,"middleware","caching","memory","parsing","blob","./Loader","./middlewares/caching/memory","./middlewares/parsing/blob",32,"cache",33,"b64","URL","webkitURL","Blob","createObjectURL","revokeObjectURL","getResponseHeader","../../Resource","../../b64",34,"description","author","contributors","main","homepage","bugs","license","repository","scripts","build","docs","files","dependencies","brfs","object-assign","pixi-gl-core","resource-loader","devDependencies","browserify","chai","del","gulp","gulp-cached","gulp-concat","gulp-debug","gulp-header","gulp-jshint","gulp-mirror","gulp-plumber","gulp-rename","gulp-sourcemaps","gulp-uglify","gulp-util","jaguarjs-jsdoc","jsdoc","jshint-summary","minimist","mocha","require-dir","run-sequence","testem","vinyl-buffer","vinyl-source-stream","watchify",35,"AccessibilityManager","renderer","style","position","top","zIndex","pool","renderId","debug","children","_onKeyDown","_onMouseMove","isActive","core","DisplayObject","update","view","parentNode","deactivate","removeChild","updateAccessibleObjects","displayObject","visible","accessible","interactive","_accessibleActive","addChild","_lastObjectRendered","rect","getBoundingClientRect","sx","sy","child","utils","removeItems","_accessibleDiv","hitArea","wt","worldTransform","tx","ty","d","getBounds","capHitArea","backgroundColor","borderStyle","_onClick","_onFocus","_onFocusOut","accessibleTitle","tabIndex","interactionManager","plugins","interaction","dispatchEvent","eventData","keyCode","WebGLRenderer","registerPlugin","CanvasRenderer","../core","./accessibleTarget",36,"accessibleTarget",37,"./AccessibilityManager",38,"CONST","VERSION","PI_2","PI","RAD_TO_DEG","DEG_TO_RAD","TARGET_FPMS","RENDERER_TYPE","UNKNOWN","WEBGL","CANVAS","BLEND_MODES","NORMAL","ADD","MULTIPLY","SCREEN","OVERLAY","DARKEN","LIGHTEN","COLOR_DODGE","COLOR_BURN","HARD_LIGHT","SOFT_LIGHT","DIFFERENCE","EXCLUSION","HUE","SATURATION","COLOR","LUMINOSITY","DRAW_MODES","POINTS","LINES","LINE_LOOP","LINE_STRIP","TRIANGLES","TRIANGLE_STRIP","TRIANGLE_FAN","SCALE_MODES","RETINA_PREFIX","RESOLUTION","FILTER_RESOLUTION","DEFAULT_RENDER_OPTIONS","resolution","antialias","forceFXAA","autoResize","transparent","clearBeforeRender","preserveDrawingBuffer","roundPixels","SHAPES","POLY","RECT","CIRC","ELIP","RREC","SPRITE_BATCH_SIZE","../../package.json",39,"Container","math","RenderTexture","_tempMatrix","Matrix","defineProperties","scale","getLocalBounds","_width","_height","onChildrenChange","argumentsLength","parent","addChildAt","swapChildren","child2","index1","getChildIndex","index2","setChildIndex","currentIndex","getChildAt","removeChildAt","removeChildren","beginIndex","endIndex","begin","range","generateTexture","scaleMode","bounds","renderTexture","render","updateTransform","displayObjectUpdateTransform","dirtyTransform","containerUpdateTransform","_currentBounds","Rectangle","EMPTY","childBounds","childMaxX","childMaxY","childVisible","_bounds","containerGetBounds","matrixCache","IDENTITY","renderWebGL","worldAlpha","renderable","_mask","_filters","currentRenderer","flush","filterManager","pushFilter","maskManager","pushMask","_renderWebGL","popMask","popFilter","_renderCanvas","renderCanvas","alpha","destroyChildren","../math","../textures/RenderTexture","../utils","./DisplayObject",40,"Point","_position","CachePoint","pivot","_rotation","localTransform","filterArea","_sr","_cr","_tempDisplayObjectParent","doc","posiiton","scaleX","scaleY","rotation","sin","cos","worldVisible","mask","filters","pt","lt","matrix","toGlobal","toLocal","point","applyInverse","setParent","container","setTransform","skewX","skewY","pivotX","pivotY","../const",41,"Graphics","fillAlpha","lineWidth","lineColor","graphicsData","tint","_prevTint","blendMode","currentPath","_webGL","isMask","boundsPadding","_localBounds","glDirty","boundsDirty","cachedSpriteDirty","CanvasBuffer","CanvasGraphics","GraphicsData","tempPoint","clone","updateLocalBounds","lineStyle","color","lineAlpha","shape","points","Polygon","closed","drawShape","moveTo","lineTo","quadraticCurveTo","cpX","cpY","toX","toY","xa","ya","fromX","fromY","bezierCurveTo","cpX2","cpY2","dt","dt2","dt3","t2","t3","arcTo","x1","y1","x2","y2","radius","b1","mm","dd","cc","tt","k1","sqrt","k2","j1","j2","qy","startAngle","atan2","endAngle","arc","anticlockwise","sweep","segs","ceil","startX","startY","theta","theta2","cTheta","sTheta","segMinus","remainder","real","angle","beginFill","filling","fillColor","fill","endFill","drawRect","drawRoundedRect","RoundedRectangle","drawCircle","Circle","drawEllipse","Ellipse","drawPolygon","clearDirty","canvasBuffer","fromCanvas","baseTexture","translate","renderGraphics","setObjectRenderer","graphics","compositeOperation","blendModes","globalCompositeOperation","w0","w1","h0","h1","x3","y3","x4","y4","containsPoint","contains","padding","_webgl","../display/Container","../renderers/canvas/utils/CanvasBuffer","../renderers/canvas/utils/CanvasGraphics","../textures/Texture","./GraphicsData",42,"_lineTint","_fillTint",43,"GraphicsRenderer","ObjectRenderer","graphicsDataPool","primitiveShader","complexPrimitiveShader","maximumSimplePolySize","WebGLGraphicsData","PrimitiveShader","buildLine","buildPoly","buildComplexPoly","buildRectangle","buildRoundedRectangle","buildCircle","onContextChange","webGLData","updateGraphics","webGL","blendModeManager","setBlendMode","mode","bindShader","translationMatrix","toArray","hex2rgb","aVertexPosition","aColor","indices","drawCount","lastIndex","switchMode","canDrawUsingSimple","../../const","../../math","../../renderers/webgl/WebGLRenderer","../../renderers/webgl/utils/ObjectRenderer","../../utils","./WebGLGraphicsData","./shaders/PrimitiveShader","./utils/buildCircle","./utils/buildComplexPoly","./utils/buildLine","./utils/buildPoly","./utils/buildRectangle","./utils/buildRoundedRectangle",44,"glPoints","glIndices","Uint16Array","deleteBuffer",45,46,"circleData","totalSegs","seg","verts","vecPos","tempPoints","../../../utils","./buildLine",47,48,"firstPoint","lastPoint","midPointX","midPointY","p1x","p1y","p2x","p2y","p3x","p3y","perpx","perpy","perp2x","perp2y","perp3x","perp3y","c1","c2","denom","pdist","dist","indexCount","indexStart","../../../math",49,"vertPos",50,"rectData",51,"rrectData","recPoints","quadraticBezierCurve","getPt","n1","n2","perc","diff","xb","yb",52,"ticker","Sprite","ParticleContainer","SpriteRenderer","ParticleRenderer","Text","BaseTexture","VideoBaseTexture","TextureUvs","WebGLManager","ShaderManager","RenderTarget","AbstractFilter","FXAAFilter","SpriteMaskFilter","glCore","autoDetectRenderer","noWebGL","isWebGLSupported","./const","./display/Container","./display/DisplayObject","./graphics/Graphics","./graphics/GraphicsData","./graphics/webgl/GraphicsRenderer","./math","./particles/ParticleContainer","./particles/webgl/ParticleRenderer","./renderers/canvas/CanvasRenderer","./renderers/canvas/utils/CanvasBuffer","./renderers/canvas/utils/CanvasGraphics","./renderers/webgl/WebGLRenderer","./renderers/webgl/filters/AbstractFilter","./renderers/webgl/filters/FXAAFilter","./renderers/webgl/filters/SpriteMaskFilter","./renderers/webgl/managers/ShaderManager","./renderers/webgl/managers/WebGLManager","./renderers/webgl/shaders/Shader","./renderers/webgl/utils/ObjectRenderer","./renderers/webgl/utils/RenderTarget","./sprites/Sprite","./sprites/webgl/SpriteRenderer","./text/Text","./textures/BaseTexture","./textures/RenderTexture","./textures/Texture","./textures/TextureUvs","./textures/VideoBaseTexture","./ticker","./utils",53,"fromArray","transpose","newPos","rotate","tx1","append","d1","sr","cr","nsx","prepend","invert","copy","TEMP_MATRIX","./Point",54,55,"./Matrix","./shapes/Circle","./shapes/Ellipse","./shapes/Polygon","./shapes/Rectangle","./shapes/RoundedRectangle",56,"dx","dy","r2","./Rectangle",57,"normx","normy",58,"points_","il","xi","yi","xj","yj","intersect","../Point",59,60,61,"maxSize","properties","batchSize","maxBatchSize","_properties","_maxSize","_batchSize","_buffers","_bufferToUpdate","interactiveChildren","setProperties","uvs","particle","smallestChildIndex","bufferIndex","isRotated","positionX","positionY","finalWidth","finalHeight","globalAlpha","frame","anchor","childTransform","drawImage",62,"ParticleBuffer","dynamicPropertyFlags","vertSize","vertByteSize","dynamicProperties","staticProperties","property","staticStride","staticBuffer","staticData","dynamicStride","dynamicBuffer","dynamicData","initBuffers","dynamicOffset","DYNAMIC_DRAW","staticOffset","uploadDynamic","amount","uploadFunction","uploadStatic",63,"numIndices","tempMatrix","ParticleShader","shaderManager","uploadVertices","aPositionCoord","uploadPosition","aRotation","uploadRotation","aTextureCoord","uploadUvs","uploadAlpha","setShader","totalChildren","generateBuffers","currentRenderTarget","projectionMatrix","uniformMatrix3fv","_location","uniform1f","uAlpha","_texture","_glTextures","updateTexture","buffers","sprite","crop","_frame","spritePosition","spriteRotation","textureUvs","_uvs","x0","y0","spriteAlpha","./ParticleBuffer","./ParticleShader",64,"TextureShader","../../renderers/webgl/shaders/TextureShader",65,"SystemRenderer","system","sayHello","_backgroundColor","_backgroundColorRgba","_backgroundColorString","hex2string","removeView",66,"refresh","CanvasMaskManager","smoothProperty","imageSmoothingEnabled","webkitImageSmoothingEnabled","mozImageSmoothingEnabled","oImageSmoothingEnabled","msImageSmoothingEnabled","initPlugins","_mapBlendModes","pluginTarget","mixin","cacheParent","screencanvas","fillStyle","clearRect","fillRect","renderDisplayObject","destroyPlugins","tempContext","canUseNewCanvasBlendModes","../SystemRenderer","./utils/CanvasMaskManager",67,68,"updateGraphicsTint","beginPath","closePath","strokeStyle","stroke","strokeRect","kappa","ox","oy","xe","ye","xm","ym","rx","ry","maxRadius","renderGraphicsMask","tintR","tintG","tintB","../../../const",69,"maskData","save","cacheAlpha","clip","restore","./CanvasGraphics",70,"CanvasTinter","getTintedTexture","roundColor","stringColor","tintCache","tintMethod","convertTintToImage","tintImage","toDataURL","tintWithMultiply","tintWithOverlay","tintWithPerPixel","rgbValues","pixelData","getImageData","pixels","putImageData","step","cacheStepsPerColorChannel","rgb2hex","canUseMultiply",71,"TextureManager","_managedTextures","glTextures","getTexture","hasLoaded","glTexture","uid","destroyTexture","_skipRemove","removeAll",72,"handleContextLost","handleContextRestored","_contextOptions","premultipliedAlpha","MaskManager","stencilManager","StencilManager","FilterManager","BlendModeManager","_initContext","mapWebGLBlendModesToPixi","drawModes","mapWebGLDrawModesToPixi","_activeShader","_activeRenderTarget","_activeTextureLocation","_activeTexture","textureManager","disable","DEPTH_TEST","CULL_FACE","enable","BLEND","rootRenderTarget","bindRenderTarget","isContextLost","renderTarget","setFilterStack","filterStack","objectRenderer","setMaskStack","stencilMaskStack","preventDefault","destroyAll","./TextureManager","./filters/FXAAFilter","./managers/BlendModeManager","./managers/FilterManager","./managers/MaskManager","./managers/ShaderManager","./managers/StencilManager","./utils/ObjectRenderer","./utils/RenderTarget","./utils/mapWebGLBlendModesToPixi","./utils/mapWebGLDrawModesToPixi",73,"shaders","DefaultShader","defaultVertexSrc","defaultFragmentSrc","getShader","applyFilter","syncUniform","../shaders/TextureShader",74,"./AbstractFilter",75,"maskMatrix","otherMatrix","maskSprite","calculateMappedMatrix",76,"currentBlendMode","blendFunc","./WebGLManager",77,"texturePool","textureSize","currentFrame","Quad","quad","capFilterArea","getRenderTarget","setRenderTarget","filterData","previousFilterData","vertexBuffer","defaultShader","dimensions","vertices","returnRenderTarget","flipTexture","flopTexture","temp","inputTarget","outputTarget","syncUniforms","outputMatrix","mappedMatrix","ratio","translateScaleX","translateScaleY","offsetY","../utils/Quad","../utils/RenderTarget",78,"stencilStack","alphaMaskPool","AlphaMaskFilter","pushSpriteMask","pushStencilMask","popSpriteMask","popStencilMask","alphaMaskFilter","../filters/SpriteMaskFilter",79,"maxAttibs","stack","_currentId","currentShader","ComplexPrimitiveShader","setAttribs","../shaders/ComplexPrimitiveShader","../shaders/PrimitiveShader",80,"WebGLMaskManager","STENCIL_TEST","pushStencil","attachStencilBuffer","sms","bindGraphics","STENCIL_BUFFER_BIT","level","colorMask","stencilFunc","ALWAYS","stencilOp","KEEP","INVERT","EQUAL","DECR","INCR","popStencil",81,82,"./Shader",83,84,"textureCount","init","compile","cacheUniformLocations","cacheAttributeLocations","_glCompile","uniform1i","uniform2f","uniform3f","uniform4f","uniform1iv","uniform2iv","uniform3iv","uniform4iv","uniform1fv","uniform2fv","uniform3fv","uniform4fv","uniformMatrix2fv","uniformMatrix4fv","_array","initSampler2D","textureData","luminance","LUMINANCE","wrapS","wrapT",85,"customUniforms","customAttributes","uSampler",86,87,"../managers/WebGLManager",88,"colors","rect2",89,"StencilMaskStack","frameBuffer","stencilBuffer","projectionFrame","calculateProjection","viewport","pm","./StencilMaskStack",90,91,"ONE","ONE_MINUS_SRC_ALPHA","SRC_ALPHA","DST_ALPHA","DST_COLOR",92,93,"cachedTint","textureDirty","vertexDirty","vertexData","sign","_onTextureUpdate","caclulateVertices","valid","smoothingEnabled","tintedTexture","destroyBaseTexture","fromFrame","frameId","TextureCache","fromImage","imageId","crossorigin","../renderers/canvas/utils/CanvasTinter",94,"numVerts","positions","Uint32Array","createIndicesForQuads","groupCount","groups","textures","ids","blend","currentGroup","currentTexture","generateMultiTextureShader","MAX_TEXTUES","MAX_TEXTURE_IMAGE_UNITS","_shader","vao","aTextureId","nextTexture","_enabled","_id","uvs_uint32","currentBatchSize","subarray","group","sprites","../../renderers/webgl/shaders/_TextureShader","../../utils/createIndicesForQuads","./generateMultiTextureShader",95,"maxTextures","generateSampleSrc","fragTemplate","sampleValues","uSamplers",96,"_text","_style","fontPropertiesCache","fontPropertiesCanvas","fontPropertiesContext","updateText","dropShadowColor","font","align","strokeThickness","wordWrap","wordWrapWidth","dropShadow","dropShadowAngle","dropShadowDistance","dropShadowBlur","textBaseline","lineJoin","miterLimit","outputText","lines","lineWidths","maxLineWidth","fontProperties","determineFontProperties","measureText","lineHeight","fontSize","linePositionX","linePositionY","shadowColor","shadowBlur","xShadowOffset","yShadowOffset","ascent","fillText","strokeText","fontStyle","baseline","imagedata","line","descent","spaceLeft","words","wordWidth","wordWidthWithSpace","../sprites/Sprite",97,"realWidth","realHeight","isLoading","imageUrl","isPowerOfTwo","_active","loadSource","naturalWidth","naturalHeight","wasLoading","_sourceLoaded","scope","BaseTextureCache","_pixiId","dispose","updateSourceImage","newSrc","image","getResolutionOfUrl",98,"textureBuffer","_updateUvs","updateBase","currentBounds","cachedWt","realResolution","getImage","getBase64","getCanvas","webGLPixels","Uint8Array","readPixels","tempCanvas","canvasData","getPixels","getPixel","../renderers/webgl/managers/FilterManager","../renderers/webgl/utils/RenderTarget","./BaseTexture","./Texture",99,"noFrame","requiresUpdate","onBaseTextureUpdated","onBaseTextureLoaded","destroyBase","fromVideo","video","fromVideoUrl","videoUrl","fromUrl","addTextureToCache","removeTextureFromCache","./TextureUvs","./VideoBaseTexture",100,"xy0_uint32","xy1_uint32","xy2_uint32","xy3_uint32","baseFrame","tw","th",101,"readyState","HAVE_ENOUGH_DATA","HAVE_FUTURE_DATA","autoUpdate","_onUpdate","_onCanPlay","_onPlayStart","_onPlayStop","__loaded","createSource","requestAnimationFrame","videoWidth","videoHeight","play","videoSrc","fromUrls",102,"Ticker","_this","_tick","time","_requestId","_emitter","TICK","_maxElapsedMS","autoStart","deltaTime","elapsedMS","lastTime","speed","FPS","minFPS","fps","minFPMS","_requestIfNeeded","performance","now","_cancelIfNeeded","cancelAnimationFrame","_startIfPossible","addOnce","remove","currentTime",103,"shared","./Ticker",104,"totalIndices",105,"_uid","_saidHello","hex","rgb","pngHead","pngEnd","magenta","yellow","getNextPowerOfTwo","number","parseFloat","userAgent","contextOptions","WebGLRenderingContext","getContextAttributes","startIdx","removeCount","./pluginTarget",106,"__plugins","pluginName","ctor",107,"mesh","extras","SpriteBatch","ReferenceError","AssetLoader","Stage","DisplayObjectContainer","Strip","Mesh","Rope","MovieClip","TilingSprite","BitmapText","scaleModes","setTexture","setText","setStyle","setFrame","uuid","./core","./extras","./filters","./mesh",108,"textWidth","textHeight","_glyphs","_font","maxWidth","maxLineHeight","fonts","prevCharCode","chars","lastLineWidth","lastSpace","charCode","charData","kerning","xOffset","yOffset","xAdvance","lineAlignOffsets","alignOffset","lenChars","validate",109,"_textures","_durations","animationSpeed","loop","_currentTime","playing","totalFrames","gotoAndStop","frameNumber","gotoAndPlay","elapsed","lag","fromFrames","frames","fromImages","images",110,"tileScale","tilePosition","_canvasPattern","uFrame","uTransform","uPixelSize","tempUvs","tempWidth","tempHeight","modX","modY","createPattern","_tileScaleOffset","../core/renderers/canvas/utils/CanvasTinter",111,"_cacheAsBitmap","_originalRenderWebGL","_originalRenderCanvas","_originalUpdateTransform","_originalHitTest","_originalDestroy","_cachedSprite","cacheAsBitmap","_originalGetBounds","_originalContainsPoint","_renderCachedWebGL","_renderCachedCanvas","_cacheAsBitmapDestroy","_destroyCachedDisplayObject","_initCachedDisplayObject","cachedRenderTarget","_getCachedBounds","_initCachedDisplayObjectCanvas",112,"getChildByName",113,"getGlobalPosition",114,"./BitmapText","./MovieClip","./TilingSprite","./cacheAsBitmap","./getChildByName","./getGlobalPosition",115,"AsciiFilter","pixelSize","../../core",116,"BloomFilter","blurXFilter","BlurXFilter","blurYFilter","BlurYFilter","defaultFilter","blur","blurX","blurY","../blur/BlurXFilter","../blur/BlurYFilter",117,"BlurDirFilter","dirX","dirY","strength","passes",118,"BlurFilter","./BlurXFilter","./BlurYFilter",119,"flip","flop",120,121,"SmartBlurFilter",122,"ColorMatrixFilter","_loadMatrix","multiply","newMatrix","_multiply","_colorMatrix","brightness","greyscale","grayscale","blackAndWhite","hue","lumR","lumG","lumB","contrast","saturate","desaturate","negative","sepia","technicolor","polaroid","toBGR","kodachrome","browni","vintage","colorTone","desaturation","toned","lightColor","darkColor","lR","lG","lB","dR","dG","dB","night","intensity","predator","lsd",123,"ColorStepFilter",124,"ConvolutionFilter","texelSize",125,"CrossHatchFilter",126,"DisplacementFilter","mapSampler",127,"DotScreenFilter",128,"BlurYTintFilter",129,"DropShadowFilter","blurYTintFilter","_dirtyPosition","_angle","_distance","hideObject","distance","./BlurYTintFilter",130,"GrayFilter","gray",131,"InvertFilter","NoiseFilter","PixelateFilter","RGBSplitFilter","ShockwaveFilter","SepiaFilter","TiltShiftFilter","TiltShiftXFilter","TiltShiftYFilter","TwistFilter","./ascii/AsciiFilter","./bloom/BloomFilter","./blur/BlurDirFilter","./blur/BlurFilter","./blur/BlurXFilter","./blur/BlurYFilter","./blur/SmartBlurFilter","./color/ColorMatrixFilter","./color/ColorStepFilter","./convolution/ConvolutionFilter","./crosshatch/CrossHatchFilter","./displacement/DisplacementFilter","./dot/DotScreenFilter","./dropshadow/DropShadowFilter","./gray/GrayFilter","./invert/InvertFilter","./noise/NoiseFilter","./pixelate/PixelateFilter","./rgb/RGBSplitFilter","./sepia/SepiaFilter","./shockwave/ShockwaveFilter","./tiltshift/TiltShiftFilter","./tiltshift/TiltShiftXFilter","./tiltshift/TiltShiftYFilter","./twist/TwistFilter",132,133,"noise",134,135,"red","green","blue",136,137,"center","params",138,"TiltShiftAxisFilter","gradientBlur","innerHeight","texSize","innerWidth","updateDelta",139,"tiltShiftXFilter","tiltShiftYFilter","./TiltShiftXFilter","./TiltShiftYFilter",140,"./TiltShiftAxisFilter",141,142,143,"loaders","accessibility","loader","./accessibility","./deprecation","./interaction","./loaders","./polyfill",144,"InteractionData","originalEvent","getLocalPosition","globalPos",145,"InteractionManager","autoPreventDefault","interactionFrequency","mouse","stopped","stopPropagation","interactiveDataPool","interactionDOMElement","eventsAdded","onMouseUp","processMouseUp","onMouseDown","processMouseDown","onMouseMove","processMouseMove","onMouseOut","processMouseOverOut","onTouchStart","processTouchStart","onTouchEnd","processTouchEnd","onTouchMove","processTouchMove","currentCursorStyle","_tempPoint","setTargetElement","element","removeEvents","addEvents","msPointerEnabled","_deltaTime","didMove","cursor","processInteractive","eventString","mapPositionToPoint","hitTest","hit","interactiveParent","clientX","clientY","isRightButton","button","which","isDown","_over","buttonMode","defaultCursor","changedTouches","cLength","touchEvent","touchData","getTouchData","returnTouchData","_touchDown","identifier","globalX","globalY","./InteractionData","./interactiveTarget",146,"interactiveTarget","./InteractionManager",147,148,"info","getElementsByTagName","common","getAttribute","letters","textureRect","kernings","first","second","bitmapFont","xmlUrl","textureUrl","loadOptions","imageMetadata","../extras",149,"bitmapFontParser","spritesheetParser","textureParser","./bitmapFontParser","./loader","./spritesheetParser","./textureParser",150,"ResourceLoader","_pixiMiddleware","addPixiMiddleware",151,"route","meta","rotated","trimmed","spriteSourceSize","sourceSize",152,153,"drawMode","canvasPadding","TRIANGLE_MESH","tempPolygon","_renderCanvasTriangleMesh","_renderCanvasTriangles","_renderCanvasDrawTriangle","index0","textureSource","textureWidth","textureHeight","u0","u1","u2","v0","v1","v2","paddingX","paddingY","centerX","centerY","normX","normY","deltaA","deltaB","deltaC","deltaD","deltaE","deltaF","renderMeshFlat","updateFrame","rawX","rawY","ind0","ind1","ind2",154,"Plane","segmentsX","segmentsY","_ready","segmentsXSub","segmentsYSub","sizeX","sizeY","totalSub","xpos","ypos","value2","value3","value4","./Mesh",155,"factor","nextPoint","perpLength","num","perpX","perpY",156,"MeshRenderer","MeshShader","./Plane","./Rope","./webgl/MeshRenderer","./webgl/MeshShader",157,"_vertexBuffer","_initWebGL","meshShader","_uvBuffer","_indexBuffer","_colorBuffer","../Mesh",158,159,"isNaN",160,161,"./Math.sign","./Object.assign","./requestAnimationFrame",162,"Date","getTime","startTime","vendors","delay"],"mappings":"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E,EAAA,GAAAuE,EAAA,GAAAvE,EAAA,GAAAuE,EAAA,IAAAvE,EAAA,GAAAuE,EAAA,IACAwkB,EAAA,GAAA/oB,EAAA,GAAAuE,EAAA,GAAAvE,EAAA,GAAAuE,EAAA,GAAAvE,EAAA,GAAAuE,EAAA,IAAAvE,EAAA,GAAAuE,EAAA,IACAwkB,EAAA,GAAA/oB,EAAA,GAAAuE,EAAA,GAAAvE,EAAA,GAAAuE,EAAA,GAAAvE,EAAA,GAAAuE,EAAA,IAAAvE,EAAA,GAAAuE,EAAA,IAGAwkB,EAAA,GAAA/oB,EAAA,GAAAuE,EAAA,GAAAvE,EAAA,GAAAuE,EAAA,GAAAvE,EAAA,GAAAuE,EAAA,IAAAvE,EAAA,GAAAuE,EAAA,IACAwkB,EAAA,GAAA/oB,EAAA,GAAAuE,EAAA,GAAAvE,EAAA,GAAAuE,EAAA,GAAAvE,EAAA,GAAAuE,EAAA,IAAAvE,EAAA,GAAAuE,EAAA,IACAwkB,EAAA,GAAA/oB,EAAA,GAAAuE,EAAA,GAAAvE,EAAA,GAAAuE,EAAA,GAAAvE,EAAA,GAAAuE,EAAA,IAAAvE,EAAA,GAAAuE,EAAA,IACAwkB,EAAA,GAAA/oB,EAAA,GAAAuE,EAAA,GAAAvE,EAAA,GAAAuE,EAAA,GAAAvE,EAAA,GAAAuE,EAAA,IAAAvE,EAAA,GAAAuE,EAAA,IACAwkB,EAAA,GAAA/oB,EAAA,GAAAuE,EAAA,GAAAvE,EAAA,GAAAuE,EAAA,GAAAvE,EAAA,GAAAuE,EAAA,IAAAvE,EAAA,GAAAuE,EAAA,IAGAwkB,EAAA,IAAA/oB,EAAA,IAAAuE,EAAA,GAAAvE,EAAA,IAAAuE,EAAA,GAAAvE,EAAA,IAAAuE,EAAA,IAAAvE,EAAA,IAAAuE,EAAA,IACAwkB,EAAA,IAAA/oB,EAAA,IAAAuE,EAAA,GAAAvE,EAAA,IAAAuE,EAAA,GAAAvE,EAAA,IAAAuE,EAAA,IAAAvE,EAAA,IAAAuE,EAAA,IACAwkB,EAAA,IAAA/oB,EAAA,IAAAuE,EAAA,GAAAvE,EAAA,IAAAuE,EAAA,GAAAvE,EAAA,IAAAuE,EAAA,IAAAvE,EAAA,IAAAuE,EAAA,IACAwkB,EAAA,IAAA/oB,EAAA,IAAAuE,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","file":"pixi.min.js","sourcesContent":[null],"sourceRoot":"./"} \ No newline at end of file diff --git a/src/core/graphics/webgl/GraphicsRenderer.js b/src/core/graphics/webgl/GraphicsRenderer.js index 279525e..12d80c0 100644 --- a/src/core/graphics/webgl/GraphicsRenderer.js +++ b/src/core/graphics/webgl/GraphicsRenderer.js @@ -4,15 +4,15 @@ ObjectRenderer = require('../../renderers/webgl/utils/ObjectRenderer'), WebGLRenderer = require('../../renderers/webgl/WebGLRenderer'), WebGLGraphicsData = require('./WebGLGraphicsData'), - PrimitiveShader = require('./PrimitiveShader'), + PrimitiveShader = require('./shaders/PrimitiveShader'), // some drawing functions.. - buildLine = require('../buildLine'); - buildPoly = require('../buildPoly'); - buildComplexPoly = require('../buildComplexPoly'); - buildRectangle = require('../buildRectangle'); - buildRoundedRectangle = require('../buildRoundedRectangle'); - buildCircle = require('../buildCircle'); + buildLine = require('./utils/buildLine'); + buildPoly = require('./utils/buildPoly'); + buildComplexPoly = require('./utils/buildComplexPoly'); + buildRectangle = require('./utils/buildRectangle'); + buildRoundedRectangle = require('./utils/buildRoundedRectangle'); + buildCircle = require('./utils/buildCircle'); earcut = require('earcut'); diff --git a/bin/pixi.js b/bin/pixi.js index b57ad10..40862ec 100644 --- a/bin/pixi.js +++ b/bin/pixi.js @@ -1,7 +1,7 @@ /** * @license * pixi.js - v3.0.10-dev - * Compiled 2016-01-17T18:07:22.522Z + * Compiled 2016-01-17T18:16:46.120Z * * pixi.js is licensed under the MIT License. * http://www.opensource.org/licenses/mit-license.php @@ -10864,15 +10864,15 @@ ObjectRenderer = require('../../renderers/webgl/utils/ObjectRenderer'), WebGLRenderer = require('../../renderers/webgl/WebGLRenderer'), WebGLGraphicsData = require('./WebGLGraphicsData'), - PrimitiveShader = require('./PrimitiveShader'), + PrimitiveShader = require('./shaders/PrimitiveShader'), // some drawing functions.. - buildLine = require('./buildLine'); - buildPoly = require('./buildPoly'); - buildComplexPoly = require('./buildComplexPoly'); - buildRectangle = require('./buildRectangle'); - buildRoundedRectangle = require('./buildRoundedRectangle'); - buildCircle = require('./buildCircle'); + buildLine = require('./utils/buildLine'); + buildPoly = require('./utils/buildPoly'); + buildComplexPoly = require('./utils/buildComplexPoly'); + buildRectangle = require('./utils/buildRectangle'); + buildRoundedRectangle = require('./utils/buildRoundedRectangle'); + buildCircle = require('./utils/buildCircle'); earcut = require('earcut'); @@ -11177,59 +11177,7 @@ }; -},{"../../const":38,"../../math":55,"../../renderers/webgl/WebGLRenderer":72,"../../renderers/webgl/utils/ObjectRenderer":87,"../../utils":105,"./PrimitiveShader":44,"./WebGLGraphicsData":45,"./buildCircle":46,"./buildComplexPoly":47,"./buildLine":48,"./buildPoly":49,"./buildRectangle":50,"./buildRoundedRectangle":51,"earcut":24}],44:[function(require,module,exports){ -var Shader = require('pixi-gl-core').GLShader; - -/** - * This shader is used to draw simple primitive shapes for {@link PIXI.Graphics}. - * - * @class - * @memberof PIXI - * @extends PIXI.Shader - * @param shaderManager {ShaderManager} The webgl shader manager this shader works for. - */ -function PrimitiveShader(gl) -{ - Shader.call(this, - gl, - // vertex shader - [ - 'attribute vec2 aVertexPosition;', - 'attribute vec4 aColor;', - - 'uniform mat3 translationMatrix;', - 'uniform mat3 projectionMatrix;', - - 'uniform float alpha;', - 'uniform float flipY;', - 'uniform vec3 tint;', - - 'varying vec4 vColor;', - - 'void main(void){', - ' gl_Position = vec4((projectionMatrix * translationMatrix * vec3(aVertexPosition, 1.0)).xy, 0.0, 1.0);', - ' vColor = aColor * vec4(tint * alpha, alpha);', - '}' - ].join('\n'), - // fragment shader - [ - 'precision mediump float;', - - 'varying vec4 vColor;', - - 'void main(void){', - ' gl_FragColor = vColor;', - '}' - ].join('\n') - ); -} - -PrimitiveShader.prototype = Object.create(Shader.prototype); -PrimitiveShader.prototype.constructor = PrimitiveShader; - -module.exports = PrimitiveShader; - -},{"pixi-gl-core":1}],45:[function(require,module,exports){ +},{"../../const":38,"../../math":55,"../../renderers/webgl/WebGLRenderer":72,"../../renderers/webgl/utils/ObjectRenderer":87,"../../utils":105,"./WebGLGraphicsData":44,"./shaders/PrimitiveShader":45,"./utils/buildCircle":46,"./utils/buildComplexPoly":47,"./utils/buildLine":48,"./utils/buildPoly":49,"./utils/buildRectangle":50,"./utils/buildRoundedRectangle":51,"earcut":24}],44:[function(require,module,exports){ /** * An object containing WebGL specific properties to be used by the WebGL renderer * @@ -11347,9 +11295,61 @@ this.glIndices = null; }; -},{}],46:[function(require,module,exports){ +},{}],45:[function(require,module,exports){ +var Shader = require('pixi-gl-core').GLShader; + +/** + * This shader is used to draw simple primitive shapes for {@link PIXI.Graphics}. + * + * @class + * @memberof PIXI + * @extends PIXI.Shader + * @param shaderManager {ShaderManager} The webgl shader manager this shader works for. + */ +function PrimitiveShader(gl) +{ + Shader.call(this, + gl, + // vertex shader + [ + 'attribute vec2 aVertexPosition;', + 'attribute vec4 aColor;', + + 'uniform mat3 translationMatrix;', + 'uniform mat3 projectionMatrix;', + + 'uniform float alpha;', + 'uniform float flipY;', + 'uniform vec3 tint;', + + 'varying vec4 vColor;', + + 'void main(void){', + ' gl_Position = vec4((projectionMatrix * translationMatrix * vec3(aVertexPosition, 1.0)).xy, 0.0, 1.0);', + ' vColor = aColor * vec4(tint * alpha, alpha);', + '}' + ].join('\n'), + // fragment shader + [ + 'precision mediump float;', + + 'varying vec4 vColor;', + + 'void main(void){', + ' gl_FragColor = vColor;', + '}' + ].join('\n') + ); +} + +PrimitiveShader.prototype = Object.create(Shader.prototype); +PrimitiveShader.prototype.constructor = PrimitiveShader; + +module.exports = PrimitiveShader; + +},{"pixi-gl-core":1}],46:[function(require,module,exports){ var buildLine = require('./buildLine'), - utils = require('../../utils'); + utils = require('../../../utils'); /** * Builds a circle to draw @@ -11426,7 +11426,7 @@ y + Math.cos(seg * i) * height); } - this.buildLine(graphicsData, webGLData); + buildLine(graphicsData, webGLData); graphicsData.points = tempPoints; } @@ -11434,9 +11434,9 @@ module.exports = buildCircle; -},{"../../utils":105,"./buildLine":48}],47:[function(require,module,exports){ +},{"../../../utils":105,"./buildLine":48}],47:[function(require,module,exports){ var buildLine = require('./buildLine'), - utils = require('../../utils'); + utils = require('../../../utils'); @@ -11505,9 +11505,9 @@ module.exports = buildComplexPoly; -},{"../../utils":105,"./buildLine":48}],48:[function(require,module,exports){ -var math = require('../../math'), - utils = require('../../utils'); +},{"../../../utils":105,"./buildLine":48}],48:[function(require,module,exports){ +var math = require('../../../math'), + utils = require('../../../utils'); /** * Builds a line to draw @@ -11725,8 +11725,8 @@ }; module.exports = buildLine; -},{"../../math":55,"../../utils":105}],49:[function(require,module,exports){ -var utils = require('../../utils'); +},{"../../../math":55,"../../../utils":105}],49:[function(require,module,exports){ +var utils = require('../../../utils'); /** * Builds a polygon to draw @@ -11788,9 +11788,9 @@ module.exports = buildPoly; -},{"../../utils":105}],50:[function(require,module,exports){ +},{"../../../utils":105}],50:[function(require,module,exports){ var buildLine = require('./buildLine'), - utils = require('../../utils'); + utils = require('../../../utils'); /** * Builds a rectangle to draw @@ -11859,9 +11859,9 @@ }; module.exports = buildRectangle; -},{"../../utils":105,"./buildLine":48}],51:[function(require,module,exports){ +},{"../../../utils":105,"./buildLine":48}],51:[function(require,module,exports){ var buildLine = require('./buildLine'), - utils = require('../../utils'); + utils = require('../../../utils'); /** * Builds a rounded rectangle to draw @@ -11987,7 +11987,7 @@ module.exports = buildRoundedRectangle; -},{"../../utils":105,"./buildLine":48}],52:[function(require,module,exports){ +},{"../../../utils":105,"./buildLine":48}],52:[function(require,module,exports){ /** * @file Main export of the PIXI core library * @author Mat Groves @@ -30075,6 +30075,6 @@ },{}]},{},[143])(143) }); -//# sourceMappingURL=data:application/json;charset:utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIm5vZGVfbW9kdWxlcy9icm93c2VyaWZ5L25vZGVfbW9kdWxlcy9icm93c2VyLXBhY2svX3ByZWx1ZGUuanMiLCIuLi9waXhpLWdsLWNvcmUvaW5kZXguanMiLCIuLi9waXhpLWdsLWNvcmUvbGliL0dMQnVmZmVyLmpzIiwiLi4vcGl4aS1nbC1jb3JlL2xpYi9HTEZyYW1lYnVmZmVyLmpzIiwiLi4vcGl4aS1nbC1jb3JlL2xpYi9HTFNoYWRlci5qcyIsIi4uL3BpeGktZ2wtY29yZS9saWIvR0xUZXh0dXJlLmpzIiwiLi4vcGl4aS1nbC1jb3JlL2xpYi9WZXJ0ZXhBcnJheU9iamVjdC5qcyIsIi4uL3BpeGktZ2wtY29yZS9saWIvY3JlYXRlQ29udGV4dC5qcyIsIi4uL3BpeGktZ2wtY29yZS9saWIvc2V0VmVydGV4QXR0cmliQXJyYXlzLmpzIiwiLi4vcGl4aS1nbC1jb3JlL2xpYi9zaGFkZXIvY29tcGlsZVByb2dyYW0uanMiLCIuLi9waXhpLWdsLWNvcmUvbGliL3NoYWRlci9kZWZhdWx0VmFsdWUuanMiLCIuLi9waXhpLWdsLWNvcmUvbGliL3NoYWRlci9leHRyYWN0QXR0cmlidXRlcy5qcyIsIi4uL3BpeGktZ2wtY29yZS9saWIvc2hhZGVyL2V4dHJhY3RVbmlmb3Jtcy5qcyIsIi4uL3BpeGktZ2wtY29yZS9saWIvc2hhZGVyL2dlbmVyYXRlVW5pZm9ybUFjY2Vzc09iamVjdC5qcyIsIi4uL3BpeGktZ2wtY29yZS9saWIvc2hhZGVyL21hcFNpemUuanMiLCIuLi9waXhpLWdsLWNvcmUvbGliL3NoYWRlci9tYXBUeXBlLmpzIiwibm9kZV9tb2R1bGVzL2FzeW5jL2xpYi9hc3luYy5qcyIsIm5vZGVfbW9kdWxlcy9icm93c2VyaWZ5L25vZGVfbW9kdWxlcy9wYXRoLWJyb3dzZXJpZnkvaW5kZXguanMiLCJub2RlX21vZHVsZXMvYnJvd3NlcmlmeS9ub2RlX21vZHVsZXMvcHJvY2Vzcy9icm93c2VyLmpzIiwibm9kZV9tb2R1bGVzL2Jyb3dzZXJpZnkvbm9kZV9tb2R1bGVzL3B1bnljb2RlL3B1bnljb2RlLmpzIiwibm9kZV9tb2R1bGVzL2Jyb3dzZXJpZnkvbm9kZV9tb2R1bGVzL3F1ZXJ5c3RyaW5nLWVzMy9kZWNvZGUuanMiLCJub2RlX21vZHVsZXMvYnJvd3NlcmlmeS9ub2RlX21vZHVsZXMvcXVlcnlzdHJpbmctZXMzL2VuY29kZS5qcyIsIm5vZGVfbW9kdWxlcy9icm93c2VyaWZ5L25vZGVfbW9kdWxlcy9xdWVyeXN0cmluZy1lczMvaW5kZXguanMiLCJub2RlX21vZHVsZXMvYnJvd3NlcmlmeS9ub2RlX21vZHVsZXMvdXJsL3VybC5qcyIsIm5vZGVfbW9kdWxlcy9lYXJjdXQvc3JjL2VhcmN1dC5qcyIsIm5vZGVfbW9kdWxlcy9ldmVudGVtaXR0ZXIzL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL29iamVjdC1hc3NpZ24vaW5kZXguanMiLCJub2RlX21vZHVsZXMvcmVzb3VyY2UtbG9hZGVyL25vZGVfbW9kdWxlcy9hc3luYy9saWIvYXN5bmMuanMiLCJub2RlX21vZHVsZXMvcmVzb3VyY2UtbG9hZGVyL3NyYy9Mb2FkZXIuanMiLCJub2RlX21vZHVsZXMvcmVzb3VyY2UtbG9hZGVyL3NyYy9SZXNvdXJjZS5qcyIsIm5vZGVfbW9kdWxlcy9yZXNvdXJjZS1sb2FkZXIvc3JjL2I2NC5qcyIsIm5vZGVfbW9kdWxlcy9yZXNvdXJjZS1sb2FkZXIvc3JjL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL3Jlc291cmNlLWxvYWRlci9zcmMvbWlkZGxld2FyZXMvY2FjaGluZy9tZW1vcnkuanMiLCJub2RlX21vZHVsZXMvcmVzb3VyY2UtbG9hZGVyL3NyYy9taWRkbGV3YXJlcy9wYXJzaW5nL2Jsb2IuanMiLCJwYWNrYWdlLmpzb24iLCJzcmMvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5TWFuYWdlci5qcyIsInNyYy9hY2Nlc3NpYmlsaXR5L2FjY2Vzc2libGVUYXJnZXQuanMiLCJzcmMvYWNjZXNzaWJpbGl0eS9pbmRleC5qcyIsInNyYy9jb3JlL2NvbnN0LmpzIiwic3JjL2NvcmUvZGlzcGxheS9Db250YWluZXIuanMiLCJzcmMvY29yZS9kaXNwbGF5L0Rpc3BsYXlPYmplY3QuanMiLCJzcmMvY29yZS9ncmFwaGljcy9HcmFwaGljcy5qcyIsInNyYy9jb3JlL2dyYXBoaWNzL0dyYXBoaWNzRGF0YS5qcyIsInNyYy9jb3JlL2dyYXBoaWNzL3dlYmdsL0dyYXBoaWNzUmVuZGVyZXIuanMiLCJzcmMvY29yZS9ncmFwaGljcy93ZWJnbC9QcmltaXRpdmVTaGFkZXIuanMiLCJzcmMvY29yZS9ncmFwaGljcy93ZWJnbC9XZWJHTEdyYXBoaWNzRGF0YS5qcyIsInNyYy9jb3JlL2dyYXBoaWNzL3dlYmdsL2J1aWxkQ2lyY2xlLmpzIiwic3JjL2NvcmUvZ3JhcGhpY3Mvd2ViZ2wvYnVpbGRDb21wbGV4UG9seS5qcyIsInNyYy9jb3JlL2dyYXBoaWNzL3dlYmdsL2J1aWxkTGluZS5qcyIsInNyYy9jb3JlL2dyYXBoaWNzL3dlYmdsL2J1aWxkUG9seS5qcyIsInNyYy9jb3JlL2dyYXBoaWNzL3dlYmdsL2J1aWxkUmVjdGFuZ2xlLmpzIiwic3JjL2NvcmUvZ3JhcGhpY3Mvd2ViZ2wvYnVpbGRSb3VuZGVkUmVjdGFuZ2xlLmpzIiwic3JjL2NvcmUvaW5kZXguanMiLCJzcmMvY29yZS9tYXRoL01hdHJpeC5qcyIsInNyYy9jb3JlL21hdGgvUG9pbnQuanMiLCJzcmMvY29yZS9tYXRoL2luZGV4LmpzIiwic3JjL2NvcmUvbWF0aC9zaGFwZXMvQ2lyY2xlLmpzIiwic3JjL2NvcmUvbWF0aC9zaGFwZXMvRWxsaXBzZS5qcyIsInNyYy9jb3JlL21hdGgvc2hhcGVzL1BvbHlnb24uanMiLCJzcmMvY29yZS9tYXRoL3NoYXBlcy9SZWN0YW5nbGUuanMiLCJzcmMvY29yZS9tYXRoL3NoYXBlcy9Sb3VuZGVkUmVjdGFuZ2xlLmpzIiwic3JjL2NvcmUvcGFydGljbGVzL1BhcnRpY2xlQ29udGFpbmVyLmpzIiwic3JjL2NvcmUvcGFydGljbGVzL3dlYmdsL1BhcnRpY2xlQnVmZmVyLmpzIiwic3JjL2NvcmUvcGFydGljbGVzL3dlYmdsL1BhcnRpY2xlUmVuZGVyZXIuanMiLCJzcmMvY29yZS9wYXJ0aWNsZXMvd2ViZ2wvUGFydGljbGVTaGFkZXIuanMiLCJzcmMvY29yZS9yZW5kZXJlcnMvU3lzdGVtUmVuZGVyZXIuanMiLCJzcmMvY29yZS9yZW5kZXJlcnMvY2FudmFzL0NhbnZhc1JlbmRlcmVyLmpzIiwic3JjL2NvcmUvcmVuZGVyZXJzL2NhbnZhcy91dGlscy9DYW52YXNCdWZmZXIuanMiLCJzcmMvY29yZS9yZW5kZXJlcnMvY2FudmFzL3V0aWxzL0NhbnZhc0dyYXBoaWNzLmpzIiwic3JjL2NvcmUvcmVuZGVyZXJzL2NhbnZhcy91dGlscy9DYW52YXNNYXNrTWFuYWdlci5qcyIsInNyYy9jb3JlL3JlbmRlcmVycy9jYW52YXMvdXRpbHMvQ2FudmFzVGludGVyLmpzIiwic3JjL2NvcmUvcmVuZGVyZXJzL3dlYmdsL1RleHR1cmVNYW5hZ2VyLmpzIiwic3JjL2NvcmUvcmVuZGVyZXJzL3dlYmdsL1dlYkdMUmVuZGVyZXIuanMiLCJzcmMvY29yZS9yZW5kZXJlcnMvd2ViZ2wvZmlsdGVycy9BYnN0cmFjdEZpbHRlci5qcyIsInNyYy9jb3JlL3JlbmRlcmVycy93ZWJnbC9maWx0ZXJzL0ZYQUFGaWx0ZXIuanMiLCJzcmMvY29yZS9yZW5kZXJlcnMvd2ViZ2wvZmlsdGVycy9TcHJpdGVNYXNrRmlsdGVyLmpzIiwic3JjL2NvcmUvcmVuZGVyZXJzL3dlYmdsL21hbmFnZXJzL0JsZW5kTW9kZU1hbmFnZXIuanMiLCJzcmMvY29yZS9yZW5kZXJlcnMvd2ViZ2wvbWFuYWdlcnMvRmlsdGVyTWFuYWdlci5qcyIsInNyYy9jb3JlL3JlbmRlcmVycy93ZWJnbC9tYW5hZ2Vycy9NYXNrTWFuYWdlci5qcyIsInNyYy9jb3JlL3JlbmRlcmVycy93ZWJnbC9tYW5hZ2Vycy9TaGFkZXJNYW5hZ2VyLmpzIiwic3JjL2NvcmUvcmVuZGVyZXJzL3dlYmdsL21hbmFnZXJzL1N0ZW5jaWxNYW5hZ2VyLmpzIiwic3JjL2NvcmUvcmVuZGVyZXJzL3dlYmdsL21hbmFnZXJzL1dlYkdMTWFuYWdlci5qcyIsInNyYy9jb3JlL3JlbmRlcmVycy93ZWJnbC9zaGFkZXJzL0NvbXBsZXhQcmltaXRpdmVTaGFkZXIuanMiLCJzcmMvY29yZS9yZW5kZXJlcnMvd2ViZ2wvc2hhZGVycy9QcmltaXRpdmVTaGFkZXIuanMiLCJzcmMvY29yZS9yZW5kZXJlcnMvd2ViZ2wvc2hhZGVycy9TaGFkZXIuanMiLCJzcmMvY29yZS9yZW5kZXJlcnMvd2ViZ2wvc2hhZGVycy9UZXh0dXJlU2hhZGVyLmpzIiwic3JjL2NvcmUvcmVuZGVyZXJzL3dlYmdsL3NoYWRlcnMvX1RleHR1cmVTaGFkZXIuanMiLCJzcmMvY29yZS9yZW5kZXJlcnMvd2ViZ2wvdXRpbHMvT2JqZWN0UmVuZGVyZXIuanMiLCJzcmMvY29yZS9yZW5kZXJlcnMvd2ViZ2wvdXRpbHMvUXVhZC5qcyIsInNyYy9jb3JlL3JlbmRlcmVycy93ZWJnbC91dGlscy9SZW5kZXJUYXJnZXQuanMiLCJzcmMvY29yZS9yZW5kZXJlcnMvd2ViZ2wvdXRpbHMvU3RlbmNpbE1hc2tTdGFjay5qcyIsInNyYy9jb3JlL3JlbmRlcmVycy93ZWJnbC91dGlscy9tYXBXZWJHTEJsZW5kTW9kZXNUb1BpeGkuanMiLCJzcmMvY29yZS9yZW5kZXJlcnMvd2ViZ2wvdXRpbHMvbWFwV2ViR0xEcmF3TW9kZXNUb1BpeGkuanMiLCJzcmMvY29yZS9zcHJpdGVzL1Nwcml0ZS5qcyIsInNyYy9jb3JlL3Nwcml0ZXMvd2ViZ2wvU3ByaXRlUmVuZGVyZXIuanMiLCJzcmMvY29yZS9zcHJpdGVzL3dlYmdsL2dlbmVyYXRlTXVsdGlUZXh0dXJlU2hhZGVyLmpzIiwic3JjL2NvcmUvdGV4dC9UZXh0LmpzIiwic3JjL2NvcmUvdGV4dHVyZXMvQmFzZVRleHR1cmUuanMiLCJzcmMvY29yZS90ZXh0dXJlcy9SZW5kZXJUZXh0dXJlLmpzIiwic3JjL2NvcmUvdGV4dHVyZXMvVGV4dHVyZS5qcyIsInNyYy9jb3JlL3RleHR1cmVzL1RleHR1cmVVdnMuanMiLCJzcmMvY29yZS90ZXh0dXJlcy9WaWRlb0Jhc2VUZXh0dXJlLmpzIiwic3JjL2NvcmUvdGlja2VyL1RpY2tlci5qcyIsInNyYy9jb3JlL3RpY2tlci9pbmRleC5qcyIsInNyYy9jb3JlL3V0aWxzL2NyZWF0ZUluZGljZXNGb3JRdWFkcy5qcyIsInNyYy9jb3JlL3V0aWxzL2luZGV4LmpzIiwic3JjL2NvcmUvdXRpbHMvcGx1Z2luVGFyZ2V0LmpzIiwic3JjL2RlcHJlY2F0aW9uLmpzIiwic3JjL2V4dHJhcy9CaXRtYXBUZXh0LmpzIiwic3JjL2V4dHJhcy9Nb3ZpZUNsaXAuanMiLCJzcmMvZXh0cmFzL1RpbGluZ1Nwcml0ZS5qcyIsInNyYy9leHRyYXMvY2FjaGVBc0JpdG1hcC5qcyIsInNyYy9leHRyYXMvZ2V0Q2hpbGRCeU5hbWUuanMiLCJzcmMvZXh0cmFzL2dldEdsb2JhbFBvc2l0aW9uLmpzIiwic3JjL2V4dHJhcy9pbmRleC5qcyIsInNyYy9maWx0ZXJzL2FzY2lpL0FzY2lpRmlsdGVyLmpzIiwic3JjL2ZpbHRlcnMvYmxvb20vQmxvb21GaWx0ZXIuanMiLCJzcmMvZmlsdGVycy9ibHVyL0JsdXJEaXJGaWx0ZXIuanMiLCJzcmMvZmlsdGVycy9ibHVyL0JsdXJGaWx0ZXIuanMiLCJzcmMvZmlsdGVycy9ibHVyL0JsdXJYRmlsdGVyLmpzIiwic3JjL2ZpbHRlcnMvYmx1ci9CbHVyWUZpbHRlci5qcyIsInNyYy9maWx0ZXJzL2JsdXIvU21hcnRCbHVyRmlsdGVyLmpzIiwic3JjL2ZpbHRlcnMvY29sb3IvQ29sb3JNYXRyaXhGaWx0ZXIuanMiLCJzcmMvZmlsdGVycy9jb2xvci9Db2xvclN0ZXBGaWx0ZXIuanMiLCJzcmMvZmlsdGVycy9jb252b2x1dGlvbi9Db252b2x1dGlvbkZpbHRlci5qcyIsInNyYy9maWx0ZXJzL2Nyb3NzaGF0Y2gvQ3Jvc3NIYXRjaEZpbHRlci5qcyIsInNyYy9maWx0ZXJzL2Rpc3BsYWNlbWVudC9EaXNwbGFjZW1lbnRGaWx0ZXIuanMiLCJzcmMvZmlsdGVycy9kb3QvRG90U2NyZWVuRmlsdGVyLmpzIiwic3JjL2ZpbHRlcnMvZHJvcHNoYWRvdy9CbHVyWVRpbnRGaWx0ZXIuanMiLCJzcmMvZmlsdGVycy9kcm9wc2hhZG93L0Ryb3BTaGFkb3dGaWx0ZXIuanMiLCJzcmMvZmlsdGVycy9ncmF5L0dyYXlGaWx0ZXIuanMiLCJzcmMvZmlsdGVycy9pbmRleC5qcyIsInNyYy9maWx0ZXJzL2ludmVydC9JbnZlcnRGaWx0ZXIuanMiLCJzcmMvZmlsdGVycy9ub2lzZS9Ob2lzZUZpbHRlci5qcyIsInNyYy9maWx0ZXJzL3BpeGVsYXRlL1BpeGVsYXRlRmlsdGVyLmpzIiwic3JjL2ZpbHRlcnMvcmdiL1JHQlNwbGl0RmlsdGVyLmpzIiwic3JjL2ZpbHRlcnMvc2VwaWEvU2VwaWFGaWx0ZXIuanMiLCJzcmMvZmlsdGVycy9zaG9ja3dhdmUvU2hvY2t3YXZlRmlsdGVyLmpzIiwic3JjL2ZpbHRlcnMvdGlsdHNoaWZ0L1RpbHRTaGlmdEF4aXNGaWx0ZXIuanMiLCJzcmMvZmlsdGVycy90aWx0c2hpZnQvVGlsdFNoaWZ0RmlsdGVyLmpzIiwic3JjL2ZpbHRlcnMvdGlsdHNoaWZ0L1RpbHRTaGlmdFhGaWx0ZXIuanMiLCJzcmMvZmlsdGVycy90aWx0c2hpZnQvVGlsdFNoaWZ0WUZpbHRlci5qcyIsInNyYy9maWx0ZXJzL3R3aXN0L1R3aXN0RmlsdGVyLmpzIiwic3JjL3NyYy9pbmRleC5qcyIsInNyYy9pbnRlcmFjdGlvbi9JbnRlcmFjdGlvbkRhdGEuanMiLCJzcmMvaW50ZXJhY3Rpb24vSW50ZXJhY3Rpb25NYW5hZ2VyLmpzIiwic3JjL2ludGVyYWN0aW9uL2luZGV4LmpzIiwic3JjL2ludGVyYWN0aW9uL2ludGVyYWN0aXZlVGFyZ2V0LmpzIiwic3JjL2xvYWRlcnMvYml0bWFwRm9udFBhcnNlci5qcyIsInNyYy9sb2FkZXJzL2luZGV4LmpzIiwic3JjL2xvYWRlcnMvbG9hZGVyLmpzIiwic3JjL2xvYWRlcnMvc3ByaXRlc2hlZXRQYXJzZXIuanMiLCJzcmMvbG9hZGVycy90ZXh0dXJlUGFyc2VyLmpzIiwic3JjL21lc2gvTWVzaC5qcyIsInNyYy9tZXNoL1BsYW5lLmpzIiwic3JjL21lc2gvUm9wZS5qcyIsInNyYy9tZXNoL2luZGV4LmpzIiwic3JjL21lc2gvd2ViZ2wvTWVzaFJlbmRlcmVyLmpzIiwic3JjL21lc2gvd2ViZ2wvTWVzaFNoYWRlci5qcyIsInNyYy9wb2x5ZmlsbC9NYXRoLnNpZ24uanMiLCJzcmMvcG9seWZpbGwvT2JqZWN0LmFzc2lnbi5qcyIsInNyYy9wb2x5ZmlsbC9pbmRleC5qcyIsInNyYy9wb2x5ZmlsbC9yZXF1ZXN0QW5pbWF0aW9uRnJhbWUuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUNBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbklBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDeENBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdk1BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNqSEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDOUJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3REQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN6REE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2xDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDN0JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0SUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2hDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUM5Q0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7O0FDNXVDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7QUNoT0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FDM0ZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7OztBQ3JoQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDcEZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDckZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDSkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ25zQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdGtCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3RRQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FDdkNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7QUNubUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3hjQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDaHlCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2hFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNaQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDcEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDMURBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMxRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuWkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzVDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzdOQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNyb0JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3ZtQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdG9DQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzNGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM5VEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2xEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDcEhBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDckZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3JFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDMU5BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDN0RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3JFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM5SEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDN0ZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3RiQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDcEVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNwQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3RGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM3RkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3JHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNUZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzFGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDN1RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMxTkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDMWRBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDblFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMxUUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2xHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2hXQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM1REE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMxUEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDMUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMzWUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzlHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDckRBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMvRkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDMUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2xjQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDakhBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3hLQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDN1dBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3ZDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM1REE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM3REE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM5Z0JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDN0dBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDL0VBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN4REE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDekpBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDalNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDL0JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3ptQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3ZXQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzdEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzNtQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbmJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzdkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3hhQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQy9FQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzNPQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDaldBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3REQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQy9CQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDblJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNwRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM3VkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2xZQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM5VEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbGNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzlRQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzVCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzVCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ25CQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3ZEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzVJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM1R0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMzRkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDcEZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNUJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3RoQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQy9DQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDekZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3hCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2xGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3RFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDekZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMvTEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQy9DQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3JDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNoREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3JEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2pEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNwRkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDaERBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0RkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDM0hBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzVHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNwQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDcENBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FDbkZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7QUM1QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQy9DQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzEyQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQy9DQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdkhBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbkJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzVEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2xGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDcEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzFkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzVIQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ25OQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDakJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuT0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzNEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ1JBO0FBQ0E7QUFDQTtBQUNBOzs7QUNIQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsImZpbGUiOiJnZW5lcmF0ZWQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlc0NvbnRlbnQiOlsiKGZ1bmN0aW9uIGUodCxuLHIpe2Z1bmN0aW9uIHMobyx1KXtpZighbltvXSl7aWYoIXRbb10pe3ZhciBhPXR5cGVvZiByZXF1aXJlPT1cImZ1bmN0aW9uXCImJnJlcXVpcmU7aWYoIXUmJmEpcmV0dXJuIGEobywhMCk7aWYoaSlyZXR1cm4gaShvLCEwKTt2YXIgZj1uZXcgRXJyb3IoXCJDYW5ub3QgZmluZCBtb2R1bGUgJ1wiK28rXCInXCIpO3Rocm93IGYuY29kZT1cIk1PRFVMRV9OT1RfRk9VTkRcIixmfXZhciBsPW5bb109e2V4cG9ydHM6e319O3Rbb11bMF0uY2FsbChsLmV4cG9ydHMsZnVuY3Rpb24oZSl7dmFyIG49dFtvXVsxXVtlXTtyZXR1cm4gcyhuP246ZSl9LGwsbC5leHBvcnRzLGUsdCxuLHIpfXJldHVybiBuW29dLmV4cG9ydHN9dmFyIGk9dHlwZW9mIHJlcXVpcmU9PVwiZnVuY3Rpb25cIiYmcmVxdWlyZTtmb3IodmFyIG89MDtvPHIubGVuZ3RoO28rKylzKHJbb10pO3JldHVybiBzfSkiLCJcblxubW9kdWxlLmV4cG9ydHMgPSB7XG5cbiAgICBjcmVhdGVDb250ZXh0OiBcdFx0XHRyZXF1aXJlKCcuL2xpYi9jcmVhdGVDb250ZXh0JyksXG4gICAgc2V0VmVydGV4QXR0cmliQXJyYXlzOiBcdHJlcXVpcmUoJy4vbGliL3NldFZlcnRleEF0dHJpYkFycmF5cycpLFxuICAgIFxuICAgIEdMQnVmZmVyOiBcdFx0XHRcdHJlcXVpcmUoJy4vbGliL0dMQnVmZmVyJyksXG4gICAgR0xGcmFtZWJ1ZmZlcjogXHRcdFx0cmVxdWlyZSgnLi9saWIvR0xGcmFtZWJ1ZmZlcicpLFxuICAgIEdMU2hhZGVyOiBcdFx0XHRcdHJlcXVpcmUoJy4vbGliL0dMU2hhZGVyJyksXG4gICAgR0xUZXh0dXJlOiBcdFx0XHRcdHJlcXVpcmUoJy4vbGliL0dMVGV4dHVyZScpLFxuICAgIFxuICAgIFZlcnRleEFycmF5T2JqZWN0OiBcdFx0cmVxdWlyZSgnLi9saWIvVmVydGV4QXJyYXlPYmplY3QnKVxuXG59OyIsIlxuLyoqXG4gKiBIZWxwZXIgY2xhc3MgdG8gY3JlYXRlIGEgd2ViR0wgYnVmZmVyXG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIGdsIHtXZWJHTFJlbmRlcmluZ0NvbnRleHR9XG4gKi9cblxudmFyIEVNUFRZX0FSUkFZX0JVRkZFUiA9IG5ldyBBcnJheUJ1ZmZlcigwKTtcblxudmFyIEJ1ZmZlciA9IGZ1bmN0aW9uKGdsLCB0eXBlLCBkYXRhLCBkcmF3VHlwZSlcbntcblx0dGhpcy5nbCA9IGdsO1xuXG5cdHRoaXMuYnVmZmVyID0gZ2wuY3JlYXRlQnVmZmVyKCk7XG5cdHRoaXMudHlwZSA9IHR5cGUgfHwgZ2wuQVJSQVlfQlVGRkVSO1xuXHR0aGlzLmRyYXdUeXBlID0gZHJhd1R5cGUgfHwgZ2wuU1RBVElDX0RSQVc7XG5cdHRoaXMuZGF0YSA9IEVNUFRZX0FSUkFZX0JVRkZFUjtcblxuXHRpZihkYXRhKVxuXHR7XG5cdFx0dGhpcy51cGxvYWQoZGF0YSk7XG5cdH1cbn1cblxuQnVmZmVyLnByb3RvdHlwZS51cGxvYWQgPSBmdW5jdGlvbihkYXRhLCBvZmZzZXQsIGRvbnRCaW5kKVxue1xuXHQvLyB0b2RvIC0gbmVlZGVkP1xuXHQvL2lmKCFkb250QmluZClcblx0dGhpcy5iaW5kKCk7XG5cblx0dmFyIGdsID0gdGhpcy5nbDtcblx0XG5cdGRhdGEgPSBkYXRhIHx8IHRoaXMuZGF0YTtcblx0b2Zmc2V0ID0gb2Zmc2V0IHx8IDA7XG5cblx0aWYodGhpcy5kYXRhLmJ5dGVMZW5ndGggPj0gZGF0YS5ieXRlTGVuZ3RoKVxuXHR7XHRcblx0XHRnbC5idWZmZXJTdWJEYXRhKHRoaXMudHlwZSwgb2Zmc2V0LCBkYXRhKTtcblx0fVxuXHRlbHNlXG5cdHtcblx0XHRnbC5idWZmZXJEYXRhKHRoaXMudHlwZSwgZGF0YSwgdGhpcy5kcmF3VHlwZSk7XG5cdH1cblxuXHR0aGlzLmRhdGEgPSBkYXRhO1xufVxuXG5CdWZmZXIucHJvdG90eXBlLmJpbmQgPSBmdW5jdGlvbigpXG57XG5cdHZhciBnbCA9IHRoaXMuZ2w7XG5cdGdsLmJpbmRCdWZmZXIodGhpcy50eXBlLCB0aGlzLmJ1ZmZlcik7XG59XG5cbkJ1ZmZlci5jcmVhdGVWZXJ0ZXhCdWZmZXIgPSBmdW5jdGlvbihnbCwgZGF0YSwgZHJhd1R5cGUpXG57XG5cdHJldHVybiBuZXcgQnVmZmVyKGdsLCBnbC5BUlJBWV9CVUZGRVIsIGRhdGEsIGRyYXdUeXBlKTtcbn1cblxuQnVmZmVyLmNyZWF0ZUluZGV4QnVmZmVyID0gZnVuY3Rpb24oZ2wsIGRhdGEsIGRyYXdUeXBlKVxue1xuXHRyZXR1cm4gbmV3IEJ1ZmZlcihnbCwgZ2wuRUxFTUVOVF9BUlJBWV9CVUZGRVIsIGRhdGEsIGRyYXdUeXBlKTtcbn1cblxuQnVmZmVyLmNyZWF0ZSA9IGZ1bmN0aW9uKGdsLCB0eXBlLCBkYXRhLCBkcmF3VHlwZSlcbntcblx0cmV0dXJuIG5ldyBCdWZmZXIoZ2wsIHR5cGUsIGRyYXdUeXBlKTtcbn1cblxuLy9UT0RPIERlc3Ryb3kuLlxuXG5tb2R1bGUuZXhwb3J0cyA9IEJ1ZmZlcjtcblxuIiwiXG52YXIgVGV4dHVyZSA9IHJlcXVpcmUoJy4vR0xUZXh0dXJlJyk7XG5cbi8qKlxuICogSGVscGVyIGNsYXNzIHRvIGNyZWF0ZSBhIHdlYkdMIEZyYW1lYnVmZmVyXG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIGdsIHtXZWJHTFJlbmRlcmluZ0NvbnRleHR9XG4gKi9cblxudmFyIEZyYW1lYnVmZmVyID0gZnVuY3Rpb24oZ2wsIHdpZHRoLCBoZWlnaHQpXG57XG5cdHRoaXMuZ2wgPSBnbDtcblxuXHR0aGlzLmZyYW1lYnVmZmVyID0gZ2wuY3JlYXRlRnJhbWVidWZmZXIoKTtcblx0XG5cdHRoaXMuc3RlbmNpbCA9IG51bGw7XG5cdHRoaXMudGV4dHVyZSA9IG51bGw7XG5cblx0dGhpcy53aWR0aCA9IHdpZHRoIHx8IDEwMDtcblx0dGhpcy5oZWlnaHQgPSBoZWlnaHQgfHwgMTAwO1xufVxuXG5GcmFtZWJ1ZmZlci5wcm90b3R5cGUuZW5hYmxlVGV4dHVyZSA9IGZ1bmN0aW9uKHRleHR1cmUpXG57XG5cdHZhciBnbCA9IHRoaXMuZ2w7XG5cblx0dGhpcy50ZXh0dXJlID0gdGV4dHVyZSB8fCBuZXcgVGV4dHVyZShnbCk7XG5cblx0dGhpcy50ZXh0dXJlLmJpbmQoKTtcblxuXHQvL2dsLnRleEltYWdlMkQoZ2wuVEVYVFVSRV8yRCwgMCwgZ2wuUkdCQSwgIHRoaXMud2lkdGgsIHRoaXMuaGVpZ2h0LCAwLCBnbC5SR0JBLCBnbC5VTlNJR05FRF9CWVRFLCBudWxsKTtcblxuXHR0aGlzLmJpbmQoKTtcblxuXHRnbC5mcmFtZWJ1ZmZlclRleHR1cmUyRChnbC5GUkFNRUJVRkZFUiwgZ2wuQ09MT1JfQVRUQUNITUVOVDAsIGdsLlRFWFRVUkVfMkQsIHRoaXMudGV4dHVyZS50ZXh0dXJlLCAwKTtcbn1cblxuRnJhbWVidWZmZXIucHJvdG90eXBlLmVuYWJsZVN0ZW5jaWwgPSBmdW5jdGlvbigpXG57XG5cdGlmKHRoaXMuc3RlbmNpbClyZXR1cm47XG5cblx0dmFyIGdsID0gdGhpcy5nbDtcblxuXHR0aGlzLnN0ZW5jaWwgPSBnbC5jcmVhdGVSZW5kZXJidWZmZXIoKTtcbiAgICBcbiAgICBnbC5iaW5kUmVuZGVyYnVmZmVyKGdsLlJFTkRFUkJVRkZFUiwgdGhpcy5zdGVuY2lsKTtcbiAgICBcbiAgICAvLyBUT0RPLi4gdGhpcyBpcyBkZXB0aCBBTkQgc3RlbmNpbD9cbiAgICBnbC5mcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcihnbC5GUkFNRUJVRkZFUiwgZ2wuREVQVEhfU1RFTkNJTF9BVFRBQ0hNRU5ULCBnbC5SRU5ERVJCVUZGRVIsIHRoaXMuc3RlbmNpbCk7XG4gICAgZ2wucmVuZGVyYnVmZmVyU3RvcmFnZShnbC5SRU5ERVJCVUZGRVIsIGdsLkRFUFRIX1NURU5DSUwsICB0aGlzLndpZHRoICAsIHRoaXMuaGVpZ2h0ICk7XG59XG5cbkZyYW1lYnVmZmVyLnByb3RvdHlwZS5jbGVhciA9IGZ1bmN0aW9uKCByLCBnLCBiLCBhIClcbntcblx0dGhpcy5iaW5kKCk7XG5cblx0dmFyIGdsID0gdGhpcy5nbDtcbiAgICBcbiAgICBnbC5jbGVhckNvbG9yKHIsIGcsIGIsIGEpO1xuICAgIGdsLmNsZWFyKGdsLkNPTE9SX0JVRkZFUl9CSVQpO1xufVxuXG5GcmFtZWJ1ZmZlci5wcm90b3R5cGUuYmluZCA9IGZ1bmN0aW9uKClcbntcblx0dmFyIGdsID0gdGhpcy5nbDtcblx0Z2wuYmluZEZyYW1lYnVmZmVyKGdsLkZSQU1FQlVGRkVSLCB0aGlzLmZyYW1lYnVmZmVyICk7XHRcbn1cblxuRnJhbWVidWZmZXIucHJvdG90eXBlLnVuYmluZCA9IGZ1bmN0aW9uKClcbntcblx0Z2wuYmluZEZyYW1lYnVmZmVyKGdsLkZSQU1FQlVGRkVSLCBudWxsICk7XHRcbn1cblxuRnJhbWVidWZmZXIucHJvdG90eXBlLnJlc2l6ZSA9IGZ1bmN0aW9uKHdpZHRoLCBoZWlnaHQpXG57XG5cdHZhciBnbCA9IHRoaXMuZ2w7XG5cblx0dGhpcy53aWR0aCA9IHdpZHRoO1xuXHR0aGlzLmhlaWdodCA9IGhlaWdodDtcblxuXHRpZiAoIHRoaXMudGV4dHVyZSApXG4gICAge1xuICAgIFx0dGhpcy50ZXh0dXJlLnVwbG9hZERhdGEobnVsbCwgd2lkdGgsIGhlaWdodCk7XG5cdH1cblxuXHRpZiAoIHRoaXMuc3RlbmNpbCApXG4gICAge1xuICAgICAgICAvLyB1cGRhdGUgdGhlIHN0ZW5jaWwgYnVmZmVyIHdpZHRoIGFuZCBoZWlnaHRcbiAgICAgICAgZ2wuYmluZFJlbmRlcmJ1ZmZlcihnbC5SRU5ERVJCVUZGRVIsIHRoaXMuc3RlbmNpbCk7XG4gICAgICAgIGdsLnJlbmRlcmJ1ZmZlclN0b3JhZ2UoZ2wuUkVOREVSQlVGRkVSLCBnbC5ERVBUSF9TVEVOQ0lMLCB3aWR0aCwgaGVpZ2h0KTtcbiAgICB9XG59XG5cbkZyYW1lYnVmZmVyLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24oKVxue1xuXHR2YXIgZ2wgPSB0aGlzLmdsO1xuXHQvL1RPRE9cblx0Z2wuZGVsZXRlRnJhbWVidWZmZXIodGhpcy5mcmFtZWJ1ZmZlcik7XG59XG5cbkZyYW1lYnVmZmVyLmNyZWF0ZVJHQkEgPSBmdW5jdGlvbihnbCwgd2lkdGgsIGhlaWdodCwgZGF0YSlcbntcblx0dmFyIHRleHR1cmUgPSBUZXh0dXJlLmZyb21EYXRhKGdsLCBudWxsLCB3aWR0aCwgaGVpZ2h0KTtcblx0dGV4dHVyZS5lbmFibGVOZWFyZXN0U2NhbGluZygpO1xuICAgIHRleHR1cmUuZW5hYmxlV3JhcENsYW1wKCk7XG5cbiAgICAvL25vdyBjcmVhdGUgdGhlIGZyYW1lYnVmZmVyIG9iamVjdCBhbmQgYXR0YWNoIHRoZSB0ZXh0dXJlIHRvIGl0LlxuICAgIHZhciBmYm8gPSBuZXcgRnJhbWVidWZmZXIoZ2wsIHdpZHRoLCBoZWlnaHQpO1xuICAgIGZiby5lbmFibGVUZXh0dXJlKHRleHR1cmUpO1xuXG4gICAgcmV0dXJuIGZibztcbn1cblxuRnJhbWVidWZmZXIuY3JlYXRlRmxvYXQzMiA9IGZ1bmN0aW9uKGdsLCB3aWR0aCwgaGVpZ2h0LCBkYXRhKVxue1xuXHQvLyBjcmVhdGUgYSBuZXcgdGV4dHVyZS4uXG4gICAgdmFyIHRleHR1cmUgPSBuZXcgVGV4dHVyZS5mcm9tRGF0YShnbCwgZGF0YSwgd2lkdGgsIGhlaWdodCk7XG4gICAgdGV4dHVyZS5lbmFibGVOZWFyZXN0U2NhbGluZygpO1xuICAgIHRleHR1cmUuZW5hYmxlV3JhcENsYW1wKCk7XG5cbiAgICAvL25vdyBjcmVhdGUgdGhlIGZyYW1lYnVmZmVyIG9iamVjdCBhbmQgYXR0YWNoIHRoZSB0ZXh0dXJlIHRvIGl0LlxuICAgIHZhciBmYm8gPSBuZXcgRnJhbWVidWZmZXIoZ2wsIHdpZHRoLCBoZWlnaHQpO1xuICAgIGZiby5lbmFibGVUZXh0dXJlKHRleHR1cmUpXG5cbiAgICByZXR1cm4gZmJvO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IEZyYW1lYnVmZmVyO1xuXG4iLCJcbnZhciBjb21waWxlUHJvZ3JhbSA9IHJlcXVpcmUoJy4vc2hhZGVyL2NvbXBpbGVQcm9ncmFtJyksXG5cdGV4dHJhY3RBdHRyaWJ1dGVzID0gcmVxdWlyZSgnLi9zaGFkZXIvZXh0cmFjdEF0dHJpYnV0ZXMnKSxcblx0ZXh0cmFjdFVuaWZvcm1zID0gcmVxdWlyZSgnLi9zaGFkZXIvZXh0cmFjdFVuaWZvcm1zJyksXG5cdGdlbmVyYXRlVW5pZm9ybUFjY2Vzc09iamVjdCA9IHJlcXVpcmUoJy4vc2hhZGVyL2dlbmVyYXRlVW5pZm9ybUFjY2Vzc09iamVjdCcpO1xuXG4vKipcbiAqIEhlbHBlciBjbGFzcyB0byBjcmVhdGUgYSB3ZWJHTCBTaGFkZXJcbiAqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gZ2wge1dlYkdMUmVuZGVyaW5nQ29udGV4dH1cbiAqL1xudmFyIFNoYWRlciA9IGZ1bmN0aW9uKGdsLCB2ZXJ0ZXhTcmMsIGZyYWdtZW50U3JjKVxue1xuXHR0aGlzLmdsID0gZ2w7XG5cblx0Ly8gRmlyc3QgY29tcGlsZSB0aGUgcHJvZ3JhbS4uXG5cdHRoaXMucHJvZ3JhbSA9IGNvbXBpbGVQcm9ncmFtKGdsLCB2ZXJ0ZXhTcmMsIGZyYWdtZW50U3JjKTtcblxuXHQvLyBuZXh0IGV4dHJhY3QgdGhlIGF0dHJpYnV0ZXNcblx0dGhpcy5hdHRyaWJ1dGVzID0gZXh0cmFjdEF0dHJpYnV0ZXMoZ2wsIHRoaXMucHJvZ3JhbSk7IFxuXG4gICAgdmFyIHVuaWZvcm1EYXRhID0gZXh0cmFjdFVuaWZvcm1zKGdsLCB0aGlzLnByb2dyYW0pO1xuXG4gICAgdGhpcy51bmlmb3JtcyA9IGdlbmVyYXRlVW5pZm9ybUFjY2Vzc09iamVjdCggZ2wsIHVuaWZvcm1EYXRhICk7XG59XG5cblNoYWRlci5wcm90b3R5cGUuYmluZCA9IGZ1bmN0aW9uKClcbntcblx0dGhpcy5nbC51c2VQcm9ncmFtKHRoaXMucHJvZ3JhbSk7XG59XG5cblNoYWRlci5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uKClcbntcblx0dmFyIGdsID0gdGhpcy5nbDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBTaGFkZXI7XG5cbiIsIlxuLyoqXG4gKiBIZWxwZXIgY2xhc3MgdG8gY3JlYXRlIGEgd2ViR0wgVGV4dHVyZVxuICpcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqIEBwYXJhbSBnbCB7V2ViR0xSZW5kZXJpbmdDb250ZXh0fSBhIFdlYkdMIGNvbnRleHRcbiAqIEBwYXJhbSB3aWR0aCB7bnVtYmVyfSB0aGUgd2lkdGggb2YgdGhlIHRleHR1cmUgXG4gKiBAcGFyYW0gaGVpZ2h0IHtudW1iZXJ9IHRoZSBoZWlnaHQgb2YgdGhlIHRleHR1cmUgXG4gKiBAcGFyYW0gZm9ybWF0IHtudW1iZXJ9IHRoZSBwaXhlbCBmb3JtYXQgb2YgdGhlIHRleHR1cmUuIGRlZmF1bHRzIHRvIGdsLlJHQkFcbiAqIEBwYXJhbSB0eXBlIHtudW1iZXJ9IHRoZSBnbCB0eXBlIG9mIHRoZSB0ZXh0dXJlLiBkZWZhdWx0cyB0byBnbC5VTlNJR05FRF9CWVRFXG4gKi9cbnZhciBUZXh0dXJlID0gZnVuY3Rpb24oZ2wsIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgdHlwZSlcbntcblx0dGhpcy5nbCA9IGdsO1xuXG5cdHRoaXMudGV4dHVyZSA9IGdsLmNyZWF0ZVRleHR1cmUoKTtcblxuXHQvLyBzb21lIHNldHRpbmdzLi5cblx0dGhpcy5taXBtYXAgPSBmYWxzZTtcblxuXHR0aGlzLnByZW11bHRpcGx5QWxwaGEgPSBmYWxzZTtcblxuXHR0aGlzLndpZHRoID0gd2lkdGggfHwgMDtcblx0dGhpcy5oZWlnaHQgPSBoZWlnaHQgfHwgMDtcblxuXHR0aGlzLmZvcm1hdCA9IGZvcm1hdCB8fCBnbC5SR0JBO1xuXHR0aGlzLnR5cGUgPSB0eXBlIHx8IGdsLlVOU0lHTkVEX0JZVEU7XG5cblxufVxuXG4vKipcbiAqIEBwYXJhbSB7UElYSS5nbENvcmUuVGV4dHVyZX0gW3Zhcm5hbWVdIFtkZXNjcmlwdGlvbl1cbiAqL1xuVGV4dHVyZS5wcm90b3R5cGUudXBsb2FkID0gZnVuY3Rpb24oc291cmNlKVxue1xuXHR0aGlzLmJpbmQoKTtcblxuXHR2YXIgZ2wgPSB0aGlzLmdsO1xuXG5cdHRoaXMud2lkdGggPSBzb3VyY2Uud2lkdGg7XG5cdHRoaXMuaGVpZ2h0ID0gc291cmNlLmhlaWdodDtcblxuXHRnbC5waXhlbFN0b3JlaShnbC5VTlBBQ0tfUFJFTVVMVElQTFlfQUxQSEFfV0VCR0wsIHRoaXMucHJlbXVsdGlwbHlBbHBoYSk7XG4gICAgZ2wudGV4SW1hZ2UyRChnbC5URVhUVVJFXzJELCAwLCB0aGlzLmZvcm1hdCwgdGhpcy5mb3JtYXQsIHRoaXMudHlwZSwgc291cmNlKTtcbn1cblxudmFyIEZMT0FUSU5HX1BPSU5UX0FWQUlMQUJMRSA9IGZhbHNlO1xuXG5UZXh0dXJlLnByb3RvdHlwZS51cGxvYWREYXRhID0gZnVuY3Rpb24oZGF0YSwgd2lkdGgsIGhlaWdodClcbntcblx0dGhpcy5iaW5kKCk7XG5cdFxuXHR0aGlzLndpZHRoID0gd2lkdGggfHwgdGhpcy53aWR0aDtcblx0dGhpcy5oZWlnaHQgPSBoZWlnaHQgfHwgdGhpcy5oZWlnaHQ7XG5cblx0aWYoZGF0YSBpbnN0YW5jZW9mIEZsb2F0MzJBcnJheSlcblx0e1xuXHRcdGlmKCFGTE9BVElOR19QT0lOVF9BVkFJTEFCTEUpXG5cdFx0e1xuXHRcdFx0dmFyIGV4dCA9IGdsLmdldEV4dGVuc2lvbihcIk9FU190ZXh0dXJlX2Zsb2F0XCIpO1xuXHRcdFx0XG5cdFx0XHRpZihleHQpXG5cdFx0XHR7XG5cdFx0XHRcdEZMT0FUSU5HX1BPSU5UX0FWQUlMQUJMRSA9IHRydWU7XG5cdFx0XHR9XG5cdFx0XHRlbHNlXG5cdFx0XHR7XG5cdFx0XHRcdHRocm93IG5ldyBFcnJvcignZmxvYXRpbmcgcG9pbnQgdGV4dHVyZXMgbm90IGF2YWlsYWJsZScpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHRoaXMudHlwZSA9IGdsLkZMT0FUO1xuXHR9XG5cdGVsc2Vcblx0e1xuXHRcdC8vIFRPRE8gc3VwcG9ydCBmb3Igb3RoZXIgdHlwZXNcblx0XHR0aGlzLnR5cGUgPSBnbC5VTlNJR05FRF9CWVRFO1xuXHR9XG5cblx0Ly8gd2hhdCB0eXBlIG9mIGRhdGE/XG5cdGdsLnBpeGVsU3RvcmVpKGdsLlVOUEFDS19QUkVNVUxUSVBMWV9BTFBIQV9XRUJHTCwgdGhpcy5wcmVtdWx0aXBseUFscGhhKTtcblx0Z2wudGV4SW1hZ2UyRChnbC5URVhUVVJFXzJELCAwLCB0aGlzLmZvcm1hdCwgIHRoaXMud2lkdGgsIHRoaXMuaGVpZ2h0LCAwLCB0aGlzLmZvcm1hdCwgdGhpcy50eXBlLCBkYXRhIHx8IG51bGwpO1xuXG59XG5cblRleHR1cmUucHJvdG90eXBlLmJpbmQgPSBmdW5jdGlvbihsb2NhdGlvbilcbntcblx0dmFyIGdsID0gdGhpcy5nbDtcblxuXHRpZihsb2NhdGlvbiAhPT0gdW5kZWZpbmVkKVxuXHR7XG5cdFx0Z2wuYWN0aXZlVGV4dHVyZShnbC5URVhUVVJFMCArIGxvY2F0aW9uKTtcblx0fVxuXG5cdGdsLmJpbmRUZXh0dXJlKGdsLlRFWFRVUkVfMkQsIHRoaXMudGV4dHVyZSk7XG59XG5cblRleHR1cmUucHJvdG90eXBlLnVuYmluZCA9IGZ1bmN0aW9uKClcbntcblx0dmFyIGdsID0gdGhpcy5nbDtcblx0Z2wuYmluZFRleHR1cmUoZ2wuVEVYVFVSRV8yRCwgbnVsbCk7XG59XG5cblRleHR1cmUucHJvdG90eXBlLm1pbkZpbHRlciA9IGZ1bmN0aW9uKCBsaW5lYXIgKVxue1xuXHR2YXIgZ2wgPSB0aGlzLmdsO1xuXG5cdHRoaXMuYmluZCgpO1xuXG5cdGlmKHRoaXMubWlwbWFwKVxuXHR7XG5cdFx0Z2wudGV4UGFyYW1ldGVyaShnbC5URVhUVVJFXzJELCBnbC5URVhUVVJFX01JTl9GSUxURVIsIGxpbmVhciA/IGdsLkxJTkVBUl9NSVBNQVBfTElORUFSIDogZ2wuTkVBUkVTVF9NSVBNQVBfTkVBUkVTVCk7XG5cdH1cblx0ZWxzZVxuXHR7XG5cdFx0Z2wudGV4UGFyYW1ldGVyaShnbC5URVhUVVJFXzJELCBnbC5URVhUVVJFX01JTl9GSUxURVIsIGxpbmVhciA/IGdsLkxJTkVBUiA6IGdsLk5FQVJFU1QpO1xuXHR9XHRcbn1cblxuVGV4dHVyZS5wcm90b3R5cGUubWFnRmlsdGVyID0gZnVuY3Rpb24oIGxpbmVhciApXG57XG5cdHZhciBnbCA9IHRoaXMuZ2w7XG5cblx0dGhpcy5iaW5kKCk7XG5cblx0Z2wudGV4UGFyYW1ldGVyaShnbC5URVhUVVJFXzJELCBnbC5URVhUVVJFX01BR19GSUxURVIsIGxpbmVhciA/IGdsLkxJTkVBUiA6IGdsLk5FQVJFU1QpO1xufVxuXG5UZXh0dXJlLnByb3RvdHlwZS5lbmFibGVNaXBtYXAgPSBmdW5jdGlvbigpXG57XG5cdHRoaXMuYmluZCgpO1xuXG5cdHRoaXMubWlwbWFwID0gdHJ1ZTtcblx0Z2wuZ2VuZXJhdGVNaXBtYXAoZ2wuVEVYVFVSRV8yRCk7XG59XG5cblRleHR1cmUucHJvdG90eXBlLmVuYWJsZUxpbmVhclNjYWxpbmcgPSBmdW5jdGlvbigpXG57XG5cdHRoaXMubWluRmlsdGVyKHRydWUpO1xuXHR0aGlzLm1hZ0ZpbHRlcih0cnVlKTtcbn1cblxuVGV4dHVyZS5wcm90b3R5cGUuZW5hYmxlTmVhcmVzdFNjYWxpbmcgPSBmdW5jdGlvbigpXG57XG5cdHRoaXMubWluRmlsdGVyKGZhbHNlKTtcblx0dGhpcy5tYWdGaWx0ZXIoZmFsc2UpO1xufVxuXG5UZXh0dXJlLnByb3RvdHlwZS5lbmFibGVXcmFwQ2xhbXAgPSBmdW5jdGlvbigpXG57XG5cdHZhciBnbCA9IHRoaXMuZ2w7XG5cblx0dGhpcy5iaW5kKCk7XG5cblx0Z2wudGV4UGFyYW1ldGVyaShnbC5URVhUVVJFXzJELCBnbC5URVhUVVJFX1dSQVBfUywgZ2wuQ0xBTVBfVE9fRURHRSk7XG4gICAgZ2wudGV4UGFyYW1ldGVyaShnbC5URVhUVVJFXzJELCBnbC5URVhUVVJFX1dSQVBfVCwgZ2wuQ0xBTVBfVE9fRURHRSk7XG59XG5cblRleHR1cmUucHJvdG90eXBlLmVuYWJsZVdyYXBSZXBlYXQgPSBmdW5jdGlvbigpXG57XG5cdHZhciBnbCA9IHRoaXMuZ2w7XG5cblx0dGhpcy5iaW5kKCk7XG5cdFxuXHRnbC50ZXhQYXJhbWV0ZXJpKGdsLlRFWFRVUkVfMkQsIGdsLlRFWFRVUkVfV1JBUF9TLCBnbC5SRVBFQVQpO1xuICAgIGdsLnRleFBhcmFtZXRlcmkoZ2wuVEVYVFVSRV8yRCwgZ2wuVEVYVFVSRV9XUkFQX1QsIGdsLlJFUEVBVCk7XG59XG5cblRleHR1cmUucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbigpXG57XG5cdHZhciBnbCA9IHRoaXMuZ2w7XG5cdC8vVE9ET1xuXHRnbC5kZWxldGVUZXh0dXJlKHRoaXMudGV4dHVyZSk7XG59XG5cbi8vVGV4dHVyZS5cblRleHR1cmUuZnJvbVNvdXJjZSA9IGZ1bmN0aW9uKGdsLCBzb3VyY2UsIHByZW11bHRpcGx5QWxwaGEpXG57XG5cdHZhciB0ZXh0dXJlID0gbmV3IFRleHR1cmUoZ2wpO1xuXHR0ZXh0dXJlLnByZW11bHRpcGx5QWxwaGEgPSBwcmVtdWx0aXBseUFscGhhIHx8IGZhbHNlO1xuXHR0ZXh0dXJlLnVwbG9hZChzb3VyY2UpO1xuXG5cdHJldHVybiB0ZXh0dXJlO1xufVxuXG5UZXh0dXJlLmZyb21EYXRhID0gZnVuY3Rpb24oZ2wsIGRhdGEsIHdpZHRoLCBoZWlnaHQpXG57XG5cdC8vY29uc29sZS5sb2coZGF0YSwgd2lkdGgsIGhlaWdodCk7XG5cdHZhciB0ZXh0dXJlID0gbmV3IFRleHR1cmUoZ2wpO1xuXHR0ZXh0dXJlLnVwbG9hZERhdGEoZGF0YSwgd2lkdGgsIGhlaWdodCk7XG5cblx0cmV0dXJuIHRleHR1cmU7XG59XG5cblxubW9kdWxlLmV4cG9ydHMgPSBUZXh0dXJlO1xuXG4iLCJcbi8qKlxuICogR2VuZXJpYyBNYXNrIFN0YWNrIGRhdGEgc3RydWN0dXJlXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKi9cblxuLy8gc3RhdGUgb2JqZWN0Ly9cblxuXG5mdW5jdGlvbiBWZXJ0ZXhBcnJheU9iamVjdChnbClcbntcblx0XG5cdHRoaXMubmF0aXZlVmFvRXh0ZW5zaW9uID0gKFxuICAgICAgZ2wuZ2V0RXh0ZW5zaW9uKCdPRVNfdmVydGV4X2FycmF5X29iamVjdCcpIHx8XG4gICAgICBnbC5nZXRFeHRlbnNpb24oJ01PWl9PRVNfdmVydGV4X2FycmF5X29iamVjdCcpIHx8XG4gICAgICBnbC5nZXRFeHRlbnNpb24oJ1dFQktJVF9PRVNfdmVydGV4X2FycmF5X29iamVjdCcpXG4gICAgKTtcblxuLy9cdHRoaXMubmF0aXZlVmFvRXh0ZW5zaW9uID0gbnVsbDtcblxuXHRpZih0aGlzLm5hdGl2ZVZhb0V4dGVuc2lvbilcblx0e1xuXHRcdHRoaXMubmF0aXZlVmFvID0gdGhpcy5uYXRpdmVWYW9FeHRlbnNpb24uY3JlYXRlVmVydGV4QXJyYXlPRVMoKTsgIFxuXHR9XG5cblx0dGhpcy5nbCA9IGdsO1xuXG5cdHRoaXMuYXR0cmlidXRlcyA9IFtdO1xuXG5cdHRoaXMuaW5kZXhCdWZmZXIgPSBudWxsO1xuXG5cdHRoaXMuZGlydHkgPSBmYWxzZTtcblxuXHRcbn1cblxuVmVydGV4QXJyYXlPYmplY3QucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gVmVydGV4QXJyYXlPYmplY3Q7XG5tb2R1bGUuZXhwb3J0cyA9IFZlcnRleEFycmF5T2JqZWN0O1xuXG5WZXJ0ZXhBcnJheU9iamVjdC5wcm90b3R5cGUuYmluZCA9IGZ1bmN0aW9uKClcbntcblx0aWYodGhpcy5uYXRpdmVWYW8pXG5cdHtcblx0XHR0aGlzLm5hdGl2ZVZhb0V4dGVuc2lvbi5iaW5kVmVydGV4QXJyYXlPRVModGhpcy5uYXRpdmVWYW8pOyAgXG5cblx0XHRpZih0aGlzLmRpcnR5KVxuXHRcdHtcblx0XHRcdHRoaXMuZGlydHkgPSBmYWxzZTtcblx0XHRcdHRoaXMuYWN0aXZhdGUoKTtcblx0XHR9XG5cdH1cblx0ZWxzZVxuXHR7XG5cdFx0dGhpcy5hY3RpdmF0ZSgpO1xuXHR9XG59XG5cblZlcnRleEFycmF5T2JqZWN0LnByb3RvdHlwZS51bmJpbmQgPSBmdW5jdGlvbigpXG57XG5cdGlmKHRoaXMubmF0aXZlVmFvKVxuXHR7XG5cdFx0dGhpcy5uYXRpdmVWYW9FeHRlbnNpb24uYmluZFZlcnRleEFycmF5T0VTKG51bGwpO1xuXHR9XG59XG5cblZlcnRleEFycmF5T2JqZWN0LnByb3RvdHlwZS5hY3RpdmF0ZSA9IGZ1bmN0aW9uKClcbntcblx0dmFyIGdsID0gdGhpcy5nbDtcblxuXHRmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuYXR0cmlidXRlcy5sZW5ndGg7IGkrKykgXG5cdHtcblx0XHR2YXIgYXR0cmliID0gdGhpcy5hdHRyaWJ1dGVzW2ldO1xuXHRcdGF0dHJpYi5idWZmZXIuYmluZCgpO1x0XG5cblx0XHRhdHRyaWIuYXR0cmlidXRlLnBvaW50ZXIoYXR0cmliLnR5cGUsIGF0dHJpYi5ub3JtYWxpemVkLCBhdHRyaWIuc3RyaWRlLCBhdHRyaWIuc3RhcnQpOyBcblx0XHRcblx0XHRnbC5lbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShhdHRyaWIuYXR0cmlidXRlLmxvY2F0aW9uKTtcblx0fTtcblxuXHR0aGlzLmluZGV4QnVmZmVyLmJpbmQoKTtcbn1cblxuVmVydGV4QXJyYXlPYmplY3QucHJvdG90eXBlLmFkZEF0dHJpYnV0ZSA9IGZ1bmN0aW9uKGJ1ZmZlciwgYXR0cmlidXRlLCB0eXBlLCBub3JtYWxpemVkLCBzdHJpZGUsIHN0YXJ0KVxue1xuICAgIHRoaXMuYXR0cmlidXRlcy5wdXNoKHtcbiAgICBcdGJ1ZmZlcjogXHRidWZmZXIsXG4gICAgXHRhdHRyaWJ1dGU6IFx0YXR0cmlidXRlLFxuXG4gICAgXHRsb2NhdGlvbjogXHRhdHRyaWJ1dGUubG9jYXRpb24sXG5cdCBcdHR5cGU6IFx0XHR0eXBlIHx8IHRoaXMuZ2wuRkxPQVQsXG5cdCBcdG5vcm1hbGl6ZWQ6IG5vcm1hbGl6ZWQgfHwgZmFsc2UsXG5cdCBcdHN0cmlkZTogXHRzdHJpZGUgfHwgMCxcblx0IFx0c3RhcnQ6IFx0XHRzdGFydCB8fCAwXG5cdH0pXG5cblx0dGhpcy5kaXJ0eSA9IHRydWU7XG59XG5cblxuVmVydGV4QXJyYXlPYmplY3QucHJvdG90eXBlLmFkZEluZGV4ID0gZnVuY3Rpb24oYnVmZmVyLCBvcHRpb25zKVxue1xuICAgIHRoaXMuaW5kZXhCdWZmZXIgPSBidWZmZXI7XG5cbiAgICB0aGlzLmRpcnR5ID0gdHJ1ZTtcbn1cblxuVmVydGV4QXJyYXlPYmplY3QucHJvdG90eXBlLmRyYXcgPSBmdW5jdGlvbih0eXBlLCBzaXplLCBzdGFydClcbntcblx0dmFyIGdsID0gdGhpcy5nbDtcblx0Z2wuZHJhd0VsZW1lbnRzKHR5cGUsIHNpemUsIGdsLlVOU0lHTkVEX1NIT1JULCBzdGFydCk7XG59XG5cbiIsIlxuLyoqXG4gKiBIZWxwZXIgY2xhc3MgdG8gY3JlYXRlIGEgd2ViR0wgQ29udGV4dFxuICpcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqIEBwYXJhbSBnbCB7V2ViR0xSZW5kZXJpbmdDb250ZXh0fVxuICovXG5cbnZhciBDT05URVhUX1VJRCA9IDA7XG5cbnZhciBjcmVhdGVDb250ZXh0ID0gZnVuY3Rpb24oY2FudmFzLCBvcHRpb25zKVxue1xuICAgIGdsID0gY2FudmFzLmdldENvbnRleHQoJ3dlYmdsJywgb3B0aW9ucykgfHwgXG4gICAgXHQgY2FudmFzLmdldENvbnRleHQoJ2V4cGVyaW1lbnRhbC13ZWJnbCcsIG9wdGlvbnMpO1xuXG4gICAgaWYgKCFnbClcbiAgICB7XG4gICAgICAgIC8vIGZhaWwsIG5vdCBhYmxlIHRvIGdldCBhIGNvbnRleHRcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdUaGlzIGJyb3dzZXIgZG9lcyBub3Qgc3VwcG9ydCB3ZWJHTC4gVHJ5IHVzaW5nIHRoZSBjYW52YXMgcmVuZGVyZXInKTtcbiAgICB9XG5cbiAgICAvLyBtaWdodCB3YW50IHRvIHBoYXNlIHRoaXMgb3V0P1xuICAgIGdsLmlkID0gQ09OVEVYVF9VSUQrKztcblxuICAgIHJldHVybiBnbDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBjcmVhdGVDb250ZXh0O1xuXG4iLCIvKipcbiAqIEdlbmVyaWMgTWFzayBTdGFjayBkYXRhIHN0cnVjdHVyZVxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICovXG5cbnZhciBHTF9NQVAgPSB7fTtcblxuXG52YXIgc2V0VmVydGV4QXR0cmliQXJyYXlzID0gZnVuY3Rpb24gKGdsLCBhdHRyaWJzKVxue1x0XG4gICAvLyBjb25zb2xlLmxvZyhnbC5pZClcbiAgICB2YXIgZGF0YSA9IEdMX01BUFtnbC5pZF07XG5cbiAgICBpZighZGF0YSlcbiAgICB7XG5cdCAgIHZhciBtYXhBdHRyaWJzID0gZ2wuZ2V0UGFyYW1ldGVyKGdsLk1BWF9WRVJURVhfQVRUUklCUyk7XG5cdFx0ZGF0YSA9IEdMX01BUFtnbC5pZF0gPSB7dGVtcEF0dHJpYlN0YXRlOm5ldyBBcnJheShtYXhBdHRyaWJzKVxuXHRcdFx0XHQgXHQgXHRcdCAgICxhdHRyaWJTdGF0ZTpuZXcgQXJyYXkobWF4QXR0cmlicyl9O1xuXHR9XG5cdFxuICAgIHZhciBpLFxuICAgIFx0dGVtcEF0dHJpYlN0YXRlID0gZGF0YS50ZW1wQXR0cmliU3RhdGUsXG4gICAgXHRhdHRyaWJTdGF0ZSA9IGRhdGEuYXR0cmliU3RhdGU7XG5cbiAgICBmb3IgKGkgPSAwOyBpIDwgdGVtcEF0dHJpYlN0YXRlLmxlbmd0aDsgaSsrKVxuICAgIHtcbiAgICAgICAgdGVtcEF0dHJpYlN0YXRlW2ldID0gZmFsc2U7XG4gICAgfVxuXG4gICAgLy8gc2V0IHRoZSBuZXcgYXR0cmlic1xuICAgIGZvciAoaSBpbiBhdHRyaWJzKVxuICAgIHtcbiAgICAgICAgdGVtcEF0dHJpYlN0YXRlW2F0dHJpYnNbaV0ubG9jYXRpb25dID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBmb3IgKGkgPSAxOyBpIDwgYXR0cmliU3RhdGUubGVuZ3RoOyBpKyspXG4gICAge1xuICAgICAgICBpZiAoYXR0cmliU3RhdGVbaV0gIT09IHRlbXBBdHRyaWJTdGF0ZVtpXSlcbiAgICAgICAge1xuICAgICAgICAgICAgYXR0cmliU3RhdGVbaV0gPSB0ZW1wQXR0cmliU3RhdGVbaV07XG5cbiAgICAgICAgICAgIGlmIChkYXRhLmF0dHJpYlN0YXRlW2ldKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGdsLmVuYWJsZVZlcnRleEF0dHJpYkFycmF5KGkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGdsLmRpc2FibGVWZXJ0ZXhBdHRyaWJBcnJheShpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn07XG5cbm1vZHVsZS5leHBvcnRzID0gc2V0VmVydGV4QXR0cmliQXJyYXlzOyIsIlxuXG5cblxuY29tcGlsZVByb2dyYW0gPSBmdW5jdGlvbihnbCwgdmVydGV4U3JjLCBmcmFnbWVudFNyYylcbntcbiAgICB2YXIgZ2xWZXJ0U2hhZGVyID0gY29tcGlsZVNoYWRlcihnbCwgZ2wuVkVSVEVYX1NIQURFUiwgdmVydGV4U3JjKTtcbiAgICB2YXIgZ2xGcmFnU2hhZGVyID0gY29tcGlsZVNoYWRlcihnbCwgZ2wuRlJBR01FTlRfU0hBREVSLCBmcmFnbWVudFNyYyk7XG5cbiAgICB2YXIgcHJvZ3JhbSA9IGdsLmNyZWF0ZVByb2dyYW0oKTtcblxuICAgIGdsLmF0dGFjaFNoYWRlcihwcm9ncmFtLCBnbFZlcnRTaGFkZXIpO1xuICAgIGdsLmF0dGFjaFNoYWRlcihwcm9ncmFtLCBnbEZyYWdTaGFkZXIpO1xuICAgIGdsLmxpbmtQcm9ncmFtKHByb2dyYW0pO1xuXG4gICAgLy8gaWYgbGlua2luZyBmYWlscywgdGhlbiBsb2cgYW5kIGNsZWFudXBcbiAgICBpZiAoIWdsLmdldFByb2dyYW1QYXJhbWV0ZXIocHJvZ3JhbSwgZ2wuTElOS19TVEFUVVMpKVxuICAgIHtcbiAgICAgICAgY29uc29sZS5lcnJvcignUGl4aS5qcyBFcnJvcjogQ291bGQgbm90IGluaXRpYWxpemUgc2hhZGVyLicpO1xuICAgICAgICBjb25zb2xlLmVycm9yKCdnbC5WQUxJREFURV9TVEFUVVMnLCBnbC5nZXRQcm9ncmFtUGFyYW1ldGVyKHByb2dyYW0sIGdsLlZBTElEQVRFX1NUQVRVUykpO1xuICAgICAgICBjb25zb2xlLmVycm9yKCdnbC5nZXRFcnJvcigpJywgZ2wuZ2V0RXJyb3IoKSk7XG5cbiAgICAgICAgLy8gaWYgdGhlcmUgaXMgYSBwcm9ncmFtIGluZm8gbG9nLCBsb2cgaXRcbiAgICAgICAgaWYgKGdsLmdldFByb2dyYW1JbmZvTG9nKHByb2dyYW0pICE9PSAnJylcbiAgICAgICAge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKCdQaXhpLmpzIFdhcm5pbmc6IGdsLmdldFByb2dyYW1JbmZvTG9nKCknLCBnbC5nZXRQcm9ncmFtSW5mb0xvZyhwcm9ncmFtKSk7XG4gICAgICAgIH1cblxuICAgICAgICBnbC5kZWxldGVQcm9ncmFtKHByb2dyYW0pO1xuICAgICAgICBwcm9ncmFtID0gbnVsbDtcbiAgICB9XG5cbiAgICAvLyBjbGVhbiB1cCBzb21lIHNoYWRlcnNcbiAgICBnbC5kZWxldGVTaGFkZXIoZ2xWZXJ0U2hhZGVyKTtcbiAgICBnbC5kZWxldGVTaGFkZXIoZ2xGcmFnU2hhZGVyKTtcblxuICAgIHJldHVybiBwcm9ncmFtO1xufVxuXG52YXIgY29tcGlsZVNoYWRlciA9IGZ1bmN0aW9uIChnbCwgdHlwZSwgc3JjKVxue1xuICAgIHZhciBzaGFkZXIgPSBnbC5jcmVhdGVTaGFkZXIodHlwZSk7XG5cbiAgICBnbC5zaGFkZXJTb3VyY2Uoc2hhZGVyLCBzcmMpO1xuICAgIGdsLmNvbXBpbGVTaGFkZXIoc2hhZGVyKTtcblxuICAgIGlmICghZ2wuZ2V0U2hhZGVyUGFyYW1ldGVyKHNoYWRlciwgZ2wuQ09NUElMRV9TVEFUVVMpKVxuICAgIHtcbiAgICAgICAgY29uc29sZS5sb2coZ2wuZ2V0U2hhZGVySW5mb0xvZyhzaGFkZXIpKTtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgcmV0dXJuIHNoYWRlcjtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gY29tcGlsZVByb2dyYW07XG5cbiIsIlxuXG52YXIgZGVmYXVsdFZhbHVlID0gZnVuY3Rpb24odHlwZSwgc2l6ZSkgXG57XG4gICAgc3dpdGNoICh0eXBlKVxuICAgIHtcbiAgICAgICAgY2FzZSAnZmxvYXQnOlxuICAgICAgICAgICAgcmV0dXJuIDA7XG5cbiAgICAgICAgY2FzZSAndmVjMic6IFxuICAgICAgICAgICAgcmV0dXJuIG5ldyBGbG9hdDMyQXJyYXkoMiAqIHNpemUpO1xuXG4gICAgICAgIGNhc2UgJ3ZlYzMnOlxuICAgICAgICAgICAgcmV0dXJuIG5ldyBGbG9hdDMyQXJyYXkoMyAqIHNpemUpO1xuXG4gICAgICAgIGNhc2UgJ3ZlYzQnOiAgICAgXG4gICAgICAgICAgICByZXR1cm4gbmV3IEZsb2F0MzJBcnJheSg0ICogc2l6ZSk7XG4gICAgICAgICAgICBcbiAgICAgICAgY2FzZSAnaW50JzpcbiAgICAgICAgY2FzZSAnc2FtcGxlcjJEJzpcbiAgICAgICAgICAgIHJldHVybiAwO1xuXG4gICAgICAgIGNhc2UgJ2l2ZWMyJzogICBcbiAgICAgICAgICAgIHJldHVybiBuZXcgSW50MzJBcnJheSgyICogc2l6ZSk7XG5cbiAgICAgICAgY2FzZSAnaXZlYzMnOlxuICAgICAgICAgICAgcmV0dXJuIG5ldyBJbnQzMkFycmF5KDMgKiBzaXplKTtcblxuICAgICAgICBjYXNlICdpdmVjNCc6IFxuICAgICAgICAgICAgcmV0dXJuIG5ldyBJbnQzMkFycmF5KDQgKiBzaXplKTtcblxuICAgICAgICBjYXNlICdib29sJzogICAgIFxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuXG4gICAgICAgIGNhc2UgJ2J2ZWMyJzpcblxuICAgICAgICAgICAgcmV0dXJuIGJvb2xlYW5BcnJheSggMiAqIHNpemUpO1xuXG4gICAgICAgIGNhc2UgJ2J2ZWMzJzpcbiAgICAgICAgICAgIHJldHVybiBib29sZWFuQXJyYXkoMyAqIHNpemUpO1xuXG4gICAgICAgIGNhc2UgJ2J2ZWM0JzpcbiAgICAgICAgICAgIHJldHVybiBib29sZWFuQXJyYXkoNCAqIHNpemUpO1xuXG4gICAgICAgIGNhc2UgJ21hdDInOlxuICAgICAgICAgICAgcmV0dXJuIG5ldyBGbG9hdDMyQXJyYXkoWzEsIDBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwwLCAxXSk7XG5cbiAgICAgICAgY2FzZSAnbWF0Myc6IFxuICAgICAgICAgICAgcmV0dXJuIG5ldyBGbG9hdDMyQXJyYXkoWzEsIDAsIDBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwwLCAxLCAwXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsMCwgMCwgMV0pO1xuXG4gICAgICAgIGNhc2UgJ21hdDQnOlxuICAgICAgICAgICAgcmV0dXJuIG5ldyBGbG9hdDMyQXJyYXkoWzEsIDAsIDAsIDBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwwLCAxLCAwLCAwXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsMCwgMCwgMSwgMFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLDAsIDAsIDAsIDFdKTtcbiAgICB9XG59XG5cbnZhciBib29sZWFuQXJyYXkgPSBmdW5jdGlvbihzaXplKVxue1xuICAgIHZhciBhcnJheSA9IG5ldyBBcnJheShzaXplKTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXJyYXkubGVuZ3RoOyBpKyspIFxuICAgIHtcbiAgICAgICAgYXJyYXlbaV0gPSBmYWxzZTtcbiAgICB9O1xuXG4gICAgcmV0dXJuIGFycmF5O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGRlZmF1bHRWYWx1ZTtcbiIsIlxudmFyIG1hcFR5cGUgPSByZXF1aXJlKCcuL21hcFR5cGUnKTtcbnZhciBtYXBTaXplID0gcmVxdWlyZSgnLi9tYXBTaXplJyk7XG5cbnZhciBleHRyYWN0QXR0cmlidXRlcyA9IGZ1bmN0aW9uKGdsLCBwcm9ncmFtKVxue1xuICAgIHZhciBhdHRyaWJ1dGVzID0ge307XG5cbiAgICB2YXIgdG90YWxBdHRyaWJ1dGVzID0gZ2wuZ2V0UHJvZ3JhbVBhcmFtZXRlcihwcm9ncmFtLCBnbC5BQ1RJVkVfQVRUUklCVVRFUylcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdG90YWxBdHRyaWJ1dGVzOyBpKyspIFxuICAgIHtcbiAgICAgICAgdmFyIGF0dHJpYkRhdGEgPSBnbC5nZXRBY3RpdmVBdHRyaWIocHJvZ3JhbSwgaSk7XG4gICAgICAgIHZhciB0eXBlID0gbWFwVHlwZShnbCwgYXR0cmliRGF0YS50eXBlKTtcblxuICAgICAgICBhdHRyaWJ1dGVzW2F0dHJpYkRhdGEubmFtZV0gPSB7XG4gICAgICAgICAgICB0eXBlOnR5cGUsXG4gICAgICAgICAgICBzaXplOm1hcFNpemUodHlwZSksXG4gICAgICAgICAgICBsb2NhdGlvbjpnbC5nZXRBdHRyaWJMb2NhdGlvbihwcm9ncmFtLCBhdHRyaWJEYXRhLm5hbWUpLFxuICAgICAgICAgICAgLy9UT0RPIC0gbWFrZSBhbiBhdHRyaWJ1dGUgb2JqZWN0XG4gICAgICAgICAgICBwb2ludGVyOmZ1bmN0aW9uKHR5cGUsIG5vcm1hbGl6ZWQsIHN0cmlkZSwgc3RhcnQpe1xuXG4gICAgICAgICAgICAgLy8gICBjb25zb2xlLmxvZyh0aGlzLmxvY2F0aW9uKVxuICAgICAgICAgICAgICAgIGdsLnZlcnRleEF0dHJpYlBvaW50ZXIodGhpcy5sb2NhdGlvbix0aGlzLnNpemUsIHR5cGUgfHwgZ2wuRkxPQVQsIG5vcm1hbGl6ZWQgfHwgZmFsc2UsIHN0cmlkZSB8fCAwLCBzdGFydCB8fCAwKTsgXG5cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH07XG5cbiAgICByZXR1cm4gYXR0cmlidXRlczsgIFxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGV4dHJhY3RBdHRyaWJ1dGVzO1xuXG4iLCJ2YXIgbWFwVHlwZSA9IHJlcXVpcmUoJy4vbWFwVHlwZScpO1xudmFyIGRlZmF1bHRWYWx1ZSA9IHJlcXVpcmUoJy4vZGVmYXVsdFZhbHVlJyk7XG5cblxudmFyIGV4dHJhY3RVbmlmb3JtcyA9IGZ1bmN0aW9uKGdsLCBwcm9ncmFtKVxue1xuXHR2YXIgdW5pZm9ybXMgPSB7fTtcblx0XG4gICAgdmFyIHRvdGFsVW5pZm9ybXMgPSBnbC5nZXRQcm9ncmFtUGFyYW1ldGVyKHByb2dyYW0sIGdsLkFDVElWRV9VTklGT1JNUylcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdG90YWxVbmlmb3JtczsgaSsrKSBcbiAgICB7XG4gICAgXHR2YXIgdW5pZm9ybURhdGEgPSBnbC5nZXRBY3RpdmVVbmlmb3JtKHByb2dyYW0sIGkpO1xuICAgIFx0dmFyIG5hbWUgPSB1bmlmb3JtRGF0YS5uYW1lLnJlcGxhY2UoL1xcWy4qP1xcXS8sIFwiXCIpO1xuICAgICAgICB2YXIgdHlwZSA9IG1hcFR5cGUoZ2wsIHVuaWZvcm1EYXRhLnR5cGUgKTtcblxuICAgIFx0dW5pZm9ybXNbbmFtZV0gPSB7XG4gICAgXHRcdHR5cGU6dHlwZSxcbiAgICBcdFx0c2l6ZTp1bmlmb3JtRGF0YS5zaXplLFxuICAgIFx0XHRsb2NhdGlvbjpnbC5nZXRVbmlmb3JtTG9jYXRpb24ocHJvZ3JhbSwgbmFtZSksXG4gICAgXHRcdHZhbHVlOmRlZmF1bHRWYWx1ZSh0eXBlLCB1bmlmb3JtRGF0YS5zaXplKVxuICAgIFx0fVxuICAgIH07XG5cdFxuXHRyZXR1cm4gdW5pZm9ybXM7XHRcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBleHRyYWN0VW5pZm9ybXM7XG5cbiIsIlxudmFyIGdlbmVyYXRlVW5pZm9ybUFjY2Vzc09iamVjdCA9IGZ1bmN0aW9uKGdsLCB1bmlmb3JtRGF0YSlcbntcbiAgICAvLyB0aGlzIGlzIHRoZSBvYmplY3Qgd2Ugd2lsbCBiZSBzZW5kaW5nIGJhY2suXG4gICAgLy8gYW4gb2JqZWN0IGhpZXJhY2h5IHdpbGwgYmUgY3JlYXRlZCBmb3Igc3RydWN0c1xuICAgIHZhciB1bmlmb3JtcyA9IHtkYXRhOnt9fTtcblxuICAgIHVuaWZvcm1zLmdsID0gZ2w7XG4gICAgXG4gICAgdmFyIHVuaWZvcm1LZXlzPSBPYmplY3Qua2V5cyh1bmlmb3JtRGF0YSk7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHVuaWZvcm1LZXlzLmxlbmd0aDsgaSsrKSBcbiAgICB7XG4gICAgICAgIHZhciBmdWxsTmFtZSA9IHVuaWZvcm1LZXlzW2ldXG5cbiAgICAgICAgdmFyIG5hbWVUb2tlbnMgPSBmdWxsTmFtZS5zcGxpdCgnLicpO1xuICAgICAgICB2YXIgbmFtZSA9IG5hbWVUb2tlbnNbbmFtZVRva2Vucy5sZW5ndGggLSAxXTtcblxuICAgICAgICB2YXIgdW5pZm9ybUdyb3VwID0gZ2V0VW5pZm9ybUdyb3VwKG5hbWVUb2tlbnMsIHVuaWZvcm1zKTtcblxuICAgICAgICB2YXIgdW5pZm9ybSA9ICB1bmlmb3JtRGF0YVtmdWxsTmFtZV07XG4gICAgICAgIHVuaWZvcm1Hcm91cC5kYXRhW25hbWVdID0gdW5pZm9ybTtcblxuICAgICAgICB1bmlmb3JtR3JvdXAuZ2wgPSBnbDtcblxuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodW5pZm9ybUdyb3VwLCBuYW1lLCB7XG4gICAgICAgICAgICBnZXQ6IGdlbmVyYXRlR2V0dGVyKG5hbWUpLFxuICAgICAgICAgICAgc2V0OiBnZW5lcmF0ZVNldHRlcihuYW1lLCB1bmlmb3JtKVxuICAgICAgICB9KVxuICAgIH07XG5cbiAgICByZXR1cm4gdW5pZm9ybXM7XG59XG5cbnZhciBnZW5lcmF0ZUdldHRlciA9IGZ1bmN0aW9uKG5hbWUpXG57XG5cdHZhciB0ZW1wbGF0ZSA9IGdldHRlclRlbXBsYXRlLnJlcGxhY2UoJyUlJywgbmFtZSk7XG5cdHJldHVybiBuZXcgRnVuY3Rpb24odGVtcGxhdGUpO1xufVxuXG52YXIgZ2VuZXJhdGVTZXR0ZXIgPSBmdW5jdGlvbihuYW1lLCB1bmlmb3JtKVxue1xuICAgIHZhciB0ZW1wbGF0ZSA9IHNldHRlclRlbXBsYXRlLnJlcGxhY2UoLyUlL2csIG5hbWUpO1xuICAgIHZhciBzZXRUZW1wbGF0ZVxuICAgIFxuICAgIGlmKHVuaWZvcm0uc2l6ZSA9PT0gMSlcbiAgICB7XG4gICAgICAgIHNldFRlbXBsYXRlID0gR0xTTF9UT19TSU5HTEVfU0VUVEVSU1t1bmlmb3JtLnR5cGVdO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICBzZXRUZW1wbGF0ZSA9IEdMU0xfVE9fQVJSQVlfU0VUVEVSU1t1bmlmb3JtLnR5cGVdO1xuICAgIH1cblxuICAgIGlmKHNldFRlbXBsYXRlKVxuICAgIHtcbiAgICAgICAgdGVtcGxhdGUgKz0gXCJcXG50aGlzLmdsLlwiICsgc2V0VGVtcGxhdGUgKyBcIjtcIjtcbiAgICB9XG5cbiAgXHRyZXR1cm4gbmV3IEZ1bmN0aW9uKCd2YWx1ZScsIHRlbXBsYXRlKTtcbn1cblxudmFyIGdldFVuaWZvcm1Hcm91cCA9IGZ1bmN0aW9uKG5hbWVUb2tlbnMsIHVuaWZvcm0pXG57XG4gICAgdmFyIGN1ciA9IHVuaWZvcm07XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG5hbWVUb2tlbnMubGVuZ3RoIC0gMTsgaSsrKSBcbiAgICB7XG4gICAgICAgIHZhciBvID0gY3VyW25hbWVUb2tlbnNbaV1dIHx8IHtkYXRhOnt9fTtcbiAgICAgICAgY3VyW25hbWVUb2tlbnNbaV1dID0gbztcbiAgICAgICAgY3VyID0gbztcbiAgICB9O1xuXG4gICAgcmV0dXJuIGN1clxufVxuXG52YXIgZ2V0dGVyVGVtcGxhdGUgPSBbXG4gICAgJ3JldHVybiB0aGlzLmRhdGEuJSUudmFsdWU7Jyxcbl0uam9pbignXFxuJyk7XG5cbnZhciBzZXR0ZXJUZW1wbGF0ZSA9IFtcbiAgICAndGhpcy5kYXRhLiUlLnZhbHVlID0gdmFsdWU7JyxcbiAgICAndmFyIGxvY2F0aW9uID0gdGhpcy5kYXRhLiUlLmxvY2F0aW9uOydcbl0uam9pbignXFxuJyk7XG5cblxudmFyIEdMU0xfVE9fU0lOR0xFX1NFVFRFUlMgPSB7XG5cbiAgICAnZmxvYXQnOiAgICAndW5pZm9ybTFmKGxvY2F0aW9uLCB2YWx1ZSknLFxuXG4gICAgJ3ZlYzInOiAgICAgJ3VuaWZvcm0yZihsb2NhdGlvbiwgdmFsdWVbMF0sIHZhbHVlWzFdKScsXG4gICAgJ3ZlYzMnOiAgICAgJ3VuaWZvcm0zZihsb2NhdGlvbiwgdmFsdWVbMF0sIHZhbHVlWzFdLCB2YWx1ZVsyXSknLFxuICAgICd2ZWM0JzogICAgICd1bmlmb3JtNGYobG9jYXRpb24sIHZhbHVlWzBdLCB2YWx1ZVsxXSwgdmFsdWVbMl0sIHZhbHVlWzNdKScsXG4gICAgXHRcbiAgICAnaW50JzogICAgICAndW5pZm9ybTFpKGxvY2F0aW9uLCB2YWx1ZSknLFxuICAgICdpdmVjMic6ICAgICd1bmlmb3JtMmkobG9jYXRpb24sIHZhbHVlWzBdLCB2YWx1ZVsxXSknLFxuICAgICdpdmVjMyc6ICAgICd1bmlmb3JtM2kobG9jYXRpb24sIHZhbHVlWzBdLCB2YWx1ZVsxXSwgdmFsdWVbMl0pJyxcbiAgICAnaXZlYzQnOiAgICAndW5pZm9ybTRpKGxvY2F0aW9uLCB2YWx1ZVswXSwgdmFsdWVbMV0sIHZhbHVlWzJdLCB2YWx1ZVszXSknLFxuXG4gICAgJ2Jvb2wnOiAgICAgJ3VuaWZvcm0xaShsb2NhdGlvbiwgdmFsdWUpJyxcbiAgICAnYnZlYzInOiAgICAndW5pZm9ybTJpKGxvY2F0aW9uLCB2YWx1ZVswXSwgdmFsdWVbMV0pJyxcbiAgICAnYnZlYzMnOiAgICAndW5pZm9ybTNpKGxvY2F0aW9uLCB2YWx1ZVswXSwgdmFsdWVbMV0sIHZhbHVlWzJdKScsXG4gICAgJ2J2ZWM0JzogICAgJ3VuaWZvcm00aShsb2NhdGlvbiwgdmFsdWVbMF0sIHZhbHVlWzFdLCB2YWx1ZVsyXSwgdmFsdWVbM10pJyxcblxuICAgICdtYXQyJzogICAgICd1bmlmb3JtTWF0cml4MmZ2KGxvY2F0aW9uLCBmYWxzZSwgdmFsdWUpJyxcbiAgICAnbWF0Myc6ICAgICAndW5pZm9ybU1hdHJpeDNmdihsb2NhdGlvbiwgZmFsc2UsIHZhbHVlKScsXG4gICAgJ21hdDQnOiAgICAgJ3VuaWZvcm1NYXRyaXg0ZnYobG9jYXRpb24sIGZhbHNlLCB2YWx1ZSknLFxuXG4gICAgJ3NhbXBsZXIyRCc6J3VuaWZvcm0xaShsb2NhdGlvbiwgdmFsdWUpJ1xufVxuXG52YXIgR0xTTF9UT19BUlJBWV9TRVRURVJTID0ge1xuXG4gICAgJ2Zsb2F0JzogICAgJ3VuaWZvcm0xZnYobG9jYXRpb24sIHZhbHVlKScsXG5cbiAgICAndmVjMic6ICAgICAndW5pZm9ybTJmdihsb2NhdGlvbiwgdmFsdWUpJyxcbiAgICAndmVjMyc6ICAgICAndW5pZm9ybTNmdihsb2NhdGlvbiwgdmFsdWUpJyxcbiAgICAndmVjNCc6ICAgICAndW5pZm9ybTRmdihsb2NhdGlvbiwgdmFsdWUpJyxcbiAgICBcdFxuICAgICdpbnQnOiAgICAgICd1bmlmb3JtMWl2KGxvY2F0aW9uLCB2YWx1ZSknLFxuICAgICdpdmVjMic6ICAgICd1bmlmb3JtMml2KGxvY2F0aW9uLCB2YWx1ZSknLFxuICAgICdpdmVjMyc6ICAgICd1bmlmb3JtM2l2KGxvY2F0aW9uLCB2YWx1ZSknLFxuICAgICdpdmVjNCc6ICAgICd1bmlmb3JtNGl2KGxvY2F0aW9uLCB2YWx1ZSknLFxuXG4gICAgJ2Jvb2wnOiAgICAgJ3VuaWZvcm0xaXYobG9jYXRpb24sIHZhbHVlKScsXG4gICAgJ2J2ZWMyJzogICAgJ3VuaWZvcm0yaXYobG9jYXRpb24sIHZhbHVlKScsXG4gICAgJ2J2ZWMzJzogICAgJ3VuaWZvcm0zaXYobG9jYXRpb24sIHZhbHVlKScsXG4gICAgJ2J2ZWM0JzogICAgJ3VuaWZvcm00aXYobG9jYXRpb24sIHZhbHVlKScsXG4gICBcbiAgICAnc2FtcGxlcjJEJzondW5pZm9ybTFpdihsb2NhdGlvbiwgdmFsdWUpJ1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGdlbmVyYXRlVW5pZm9ybUFjY2Vzc09iamVjdDtcblxuIiwiXG5cbnZhciBtYXBTaXplID0gZnVuY3Rpb24odHlwZSkgXG57IFxuICAgIHJldHVybiBHTFNMX1RPX1NJWkVbdHlwZV07XG59XG5cblxudmFyIEdMU0xfVE9fU0laRSA9IHtcbiAgICAnZmxvYXQnOiAgICAxLFxuICAgICd2ZWMyJzogICAgIDIsXG4gICAgJ3ZlYzMnOiAgICAgMyxcbiAgICAndmVjNCc6ICAgICA0LFxuXG4gICAgJ2ludCc6ICAgICAgMSxcbiAgICAnaXZlYzInOiAgICAyLFxuICAgICdpdmVjMyc6ICAgIDMsXG4gICAgJ2l2ZWM0JzogICAgNCxcblxuICAgICdib29sJzogICAgIDEsXG4gICAgJ2J2ZWMyJzogICAgMixcbiAgICAnYnZlYzMnOiAgICAzLFxuICAgICdidmVjNCc6ICAgIDQsXG5cbiAgICAnbWF0Mic6ICAgICA0LFxuICAgICdtYXQzJzogICAgIDksXG4gICAgJ21hdDQnOiAgICAgMTYsXG5cbiAgICAnc2FtcGxlcjJEJzogIDFcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBtYXBTaXplO1xuIiwiXG5cbnZhciBtYXBTaXplID0gZnVuY3Rpb24oZ2wsIHR5cGUpIFxue1xuICAgIGlmKCFHTF9UQUJMRSkgXG4gICAge1xuICAgICAgICB2YXIgdHlwZU5hbWVzID0gT2JqZWN0LmtleXMoR0xfVE9fR0xTTF9UWVBFUyk7XG5cbiAgICAgICAgR0xfVEFCTEUgPSB7fTtcblxuICAgICAgICBmb3IodmFyIGkgPSAwOyBpIDwgdHlwZU5hbWVzLmxlbmd0aDsgKytpKSBcbiAgICAgICAge1xuICAgICAgICAgICAgdmFyIHRuID0gdHlwZU5hbWVzW2ldO1xuICAgICAgICAgICAgR0xfVEFCTEVbIGdsW3RuXSBdID0gR0xfVE9fR0xTTF9UWVBFU1t0bl07XG4gICAgICAgIH1cbiAgICB9XG5cbiAgcmV0dXJuIEdMX1RBQkxFW3R5cGVdO1xufVxuXG52YXIgR0xfVEFCTEUgPSBudWxsO1xuXG52YXIgR0xfVE9fR0xTTF9UWVBFUyA9IHtcbiAgJ0ZMT0FUJzogICAgICAgJ2Zsb2F0JyxcbiAgJ0ZMT0FUX1ZFQzInOiAgJ3ZlYzInLFxuICAnRkxPQVRfVkVDMyc6ICAndmVjMycsXG4gICdGTE9BVF9WRUM0JzogICd2ZWM0JyxcblxuICAnSU5UJzogICAgICAgICAnaW50JyxcbiAgJ0lOVF9WRUMyJzogICAgJ2l2ZWMyJyxcbiAgJ0lOVF9WRUMzJzogICAgJ2l2ZWMzJyxcbiAgJ0lOVF9WRUM0JzogICAgJ2l2ZWM0JyxcbiAgXG4gICdCT09MJzogICAgICAgICdib29sJyxcbiAgJ0JPT0xfVkVDMic6ICAgJ2J2ZWMyJyxcbiAgJ0JPT0xfVkVDMyc6ICAgJ2J2ZWMzJyxcbiAgJ0JPT0xfVkVDNCc6ICAgJ2J2ZWM0JyxcbiAgXG4gICdGTE9BVF9NQVQyJzogICdtYXQyJyxcbiAgJ0ZMT0FUX01BVDMnOiAgJ21hdDMnLFxuICAnRkxPQVRfTUFUNCc6ICAnbWF0NCcsXG4gIFxuICAnU0FNUExFUl8yRCc6ICAnc2FtcGxlcjJEJyAgXG59XG5cbm1vZHVsZS5leHBvcnRzID0gbWFwU2l6ZTtcbiIsIi8qIVxuICogYXN5bmNcbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS9jYW9sYW4vYXN5bmNcbiAqXG4gKiBDb3B5cmlnaHQgMjAxMC0yMDE0IENhb2xhbiBNY01haG9uXG4gKiBSZWxlYXNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2VcbiAqL1xuKGZ1bmN0aW9uICgpIHtcblxuICAgIHZhciBhc3luYyA9IHt9O1xuICAgIGZ1bmN0aW9uIG5vb3AoKSB7fVxuICAgIGZ1bmN0aW9uIGlkZW50aXR5KHYpIHtcbiAgICAgICAgcmV0dXJuIHY7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHRvQm9vbCh2KSB7XG4gICAgICAgIHJldHVybiAhIXY7XG4gICAgfVxuICAgIGZ1bmN0aW9uIG5vdElkKHYpIHtcbiAgICAgICAgcmV0dXJuICF2O1xuICAgIH1cblxuICAgIC8vIGdsb2JhbCBvbiB0aGUgc2VydmVyLCB3aW5kb3cgaW4gdGhlIGJyb3dzZXJcbiAgICB2YXIgcHJldmlvdXNfYXN5bmM7XG5cbiAgICAvLyBFc3RhYmxpc2ggdGhlIHJvb3Qgb2JqZWN0LCBgd2luZG93YCAoYHNlbGZgKSBpbiB0aGUgYnJvd3NlciwgYGdsb2JhbGBcbiAgICAvLyBvbiB0aGUgc2VydmVyLCBvciBgdGhpc2AgaW4gc29tZSB2aXJ0dWFsIG1hY2hpbmVzLiBXZSB1c2UgYHNlbGZgXG4gICAgLy8gaW5zdGVhZCBvZiBgd2luZG93YCBmb3IgYFdlYldvcmtlcmAgc3VwcG9ydC5cbiAgICB2YXIgcm9vdCA9IHR5cGVvZiBzZWxmID09PSAnb2JqZWN0JyAmJiBzZWxmLnNlbGYgPT09IHNlbGYgJiYgc2VsZiB8fFxuICAgICAgICAgICAgdHlwZW9mIGdsb2JhbCA9PT0gJ29iamVjdCcgJiYgZ2xvYmFsLmdsb2JhbCA9PT0gZ2xvYmFsICYmIGdsb2JhbCB8fFxuICAgICAgICAgICAgdGhpcztcblxuICAgIGlmIChyb290ICE9IG51bGwpIHtcbiAgICAgICAgcHJldmlvdXNfYXN5bmMgPSByb290LmFzeW5jO1xuICAgIH1cblxuICAgIGFzeW5jLm5vQ29uZmxpY3QgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJvb3QuYXN5bmMgPSBwcmV2aW91c19hc3luYztcbiAgICAgICAgcmV0dXJuIGFzeW5jO1xuICAgIH07XG5cbiAgICBmdW5jdGlvbiBvbmx5X29uY2UoZm4pIHtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgaWYgKGZuID09PSBudWxsKSB0aHJvdyBuZXcgRXJyb3IoXCJDYWxsYmFjayB3YXMgYWxyZWFkeSBjYWxsZWQuXCIpO1xuICAgICAgICAgICAgZm4uYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICAgICAgICAgIGZuID0gbnVsbDtcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBfb25jZShmbikge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICBpZiAoZm4gPT09IG51bGwpIHJldHVybjtcbiAgICAgICAgICAgIGZuLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgICAgICAgICBmbiA9IG51bGw7XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgLy8vLyBjcm9zcy1icm93c2VyIGNvbXBhdGlibGl0eSBmdW5jdGlvbnMgLy8vL1xuXG4gICAgdmFyIF90b1N0cmluZyA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7XG5cbiAgICB2YXIgX2lzQXJyYXkgPSBBcnJheS5pc0FycmF5IHx8IGZ1bmN0aW9uIChvYmopIHtcbiAgICAgICAgcmV0dXJuIF90b1N0cmluZy5jYWxsKG9iaikgPT09ICdbb2JqZWN0IEFycmF5XSc7XG4gICAgfTtcblxuICAgIC8vIFBvcnRlZCBmcm9tIHVuZGVyc2NvcmUuanMgaXNPYmplY3RcbiAgICB2YXIgX2lzT2JqZWN0ID0gZnVuY3Rpb24ob2JqKSB7XG4gICAgICAgIHZhciB0eXBlID0gdHlwZW9mIG9iajtcbiAgICAgICAgcmV0dXJuIHR5cGUgPT09ICdmdW5jdGlvbicgfHwgdHlwZSA9PT0gJ29iamVjdCcgJiYgISFvYmo7XG4gICAgfTtcblxuICAgIGZ1bmN0aW9uIF9pc0FycmF5TGlrZShhcnIpIHtcbiAgICAgICAgcmV0dXJuIF9pc0FycmF5KGFycikgfHwgKFxuICAgICAgICAgICAgLy8gaGFzIGEgcG9zaXRpdmUgaW50ZWdlciBsZW5ndGggcHJvcGVydHlcbiAgICAgICAgICAgIHR5cGVvZiBhcnIubGVuZ3RoID09PSBcIm51bWJlclwiICYmXG4gICAgICAgICAgICBhcnIubGVuZ3RoID49IDAgJiZcbiAgICAgICAgICAgIGFyci5sZW5ndGggJSAxID09PSAwXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gX2FycmF5RWFjaChhcnIsIGl0ZXJhdG9yKSB7XG4gICAgICAgIHZhciBpbmRleCA9IC0xLFxuICAgICAgICAgICAgbGVuZ3RoID0gYXJyLmxlbmd0aDtcblxuICAgICAgICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgICAgICAgICAgaXRlcmF0b3IoYXJyW2luZGV4XSwgaW5kZXgsIGFycik7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBfbWFwKGFyciwgaXRlcmF0b3IpIHtcbiAgICAgICAgdmFyIGluZGV4ID0gLTEsXG4gICAgICAgICAgICBsZW5ndGggPSBhcnIubGVuZ3RoLFxuICAgICAgICAgICAgcmVzdWx0ID0gQXJyYXkobGVuZ3RoKTtcblxuICAgICAgICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgICAgICAgICAgcmVzdWx0W2luZGV4XSA9IGl0ZXJhdG9yKGFycltpbmRleF0sIGluZGV4LCBhcnIpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gX3JhbmdlKGNvdW50KSB7XG4gICAgICAgIHJldHVybiBfbWFwKEFycmF5KGNvdW50KSwgZnVuY3Rpb24gKHYsIGkpIHsgcmV0dXJuIGk7IH0pO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIF9yZWR1Y2UoYXJyLCBpdGVyYXRvciwgbWVtbykge1xuICAgICAgICBfYXJyYXlFYWNoKGFyciwgZnVuY3Rpb24gKHgsIGksIGEpIHtcbiAgICAgICAgICAgIG1lbW8gPSBpdGVyYXRvcihtZW1vLCB4LCBpLCBhKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBtZW1vO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIF9mb3JFYWNoT2Yob2JqZWN0LCBpdGVyYXRvcikge1xuICAgICAgICBfYXJyYXlFYWNoKF9rZXlzKG9iamVjdCksIGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgICAgIGl0ZXJhdG9yKG9iamVjdFtrZXldLCBrZXkpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBfaW5kZXhPZihhcnIsIGl0ZW0pIHtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcnIubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGlmIChhcnJbaV0gPT09IGl0ZW0pIHJldHVybiBpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiAtMTtcbiAgICB9XG5cbiAgICB2YXIgX2tleXMgPSBPYmplY3Qua2V5cyB8fCBmdW5jdGlvbiAob2JqKSB7XG4gICAgICAgIHZhciBrZXlzID0gW107XG4gICAgICAgIGZvciAodmFyIGsgaW4gb2JqKSB7XG4gICAgICAgICAgICBpZiAob2JqLmhhc093blByb3BlcnR5KGspKSB7XG4gICAgICAgICAgICAgICAga2V5cy5wdXNoKGspO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBrZXlzO1xuICAgIH07XG5cbiAgICBmdW5jdGlvbiBfa2V5SXRlcmF0b3IoY29sbCkge1xuICAgICAgICB2YXIgaSA9IC0xO1xuICAgICAgICB2YXIgbGVuO1xuICAgICAgICB2YXIga2V5cztcbiAgICAgICAgaWYgKF9pc0FycmF5TGlrZShjb2xsKSkge1xuICAgICAgICAgICAgbGVuID0gY29sbC5sZW5ndGg7XG4gICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24gbmV4dCgpIHtcbiAgICAgICAgICAgICAgICBpKys7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGkgPCBsZW4gPyBpIDogbnVsbDtcbiAgICAgICAgICAgIH07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBrZXlzID0gX2tleXMoY29sbCk7XG4gICAgICAgICAgICBsZW4gPSBrZXlzLmxlbmd0aDtcbiAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbiBuZXh0KCkge1xuICAgICAgICAgICAgICAgIGkrKztcbiAgICAgICAgICAgICAgICByZXR1cm4gaSA8IGxlbiA/IGtleXNbaV0gOiBudWxsO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIFNpbWlsYXIgdG8gRVM2J3MgcmVzdCBwYXJhbSAoaHR0cDovL2FyaXlhLm9maWxhYnMuY29tLzIwMTMvMDMvZXM2LWFuZC1yZXN0LXBhcmFtZXRlci5odG1sKVxuICAgIC8vIFRoaXMgYWNjdW11bGF0ZXMgdGhlIGFyZ3VtZW50cyBwYXNzZWQgaW50byBhbiBhcnJheSwgYWZ0ZXIgYSBnaXZlbiBpbmRleC5cbiAgICAvLyBGcm9tIHVuZGVyc2NvcmUuanMgKGh0dHBzOi8vZ2l0aHViLmNvbS9qYXNoa2VuYXMvdW5kZXJzY29yZS9wdWxsLzIxNDApLlxuICAgIGZ1bmN0aW9uIF9yZXN0UGFyYW0oZnVuYywgc3RhcnRJbmRleCkge1xuICAgICAgICBzdGFydEluZGV4ID0gc3RhcnRJbmRleCA9PSBudWxsID8gZnVuYy5sZW5ndGggLSAxIDogK3N0YXJ0SW5kZXg7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIHZhciBsZW5ndGggPSBNYXRoLm1heChhcmd1bWVudHMubGVuZ3RoIC0gc3RhcnRJbmRleCwgMCk7XG4gICAgICAgICAgICB2YXIgcmVzdCA9IEFycmF5KGxlbmd0aCk7XG4gICAgICAgICAgICBmb3IgKHZhciBpbmRleCA9IDA7IGluZGV4IDwgbGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgICAgICAgICAgICAgcmVzdFtpbmRleF0gPSBhcmd1bWVudHNbaW5kZXggKyBzdGFydEluZGV4XTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHN3aXRjaCAoc3RhcnRJbmRleCkge1xuICAgICAgICAgICAgICAgIGNhc2UgMDogcmV0dXJuIGZ1bmMuY2FsbCh0aGlzLCByZXN0KTtcbiAgICAgICAgICAgICAgICBjYXNlIDE6IHJldHVybiBmdW5jLmNhbGwodGhpcywgYXJndW1lbnRzWzBdLCByZXN0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIEN1cnJlbnRseSB1bnVzZWQgYnV0IGhhbmRsZSBjYXNlcyBvdXRzaWRlIG9mIHRoZSBzd2l0Y2ggc3RhdGVtZW50OlxuICAgICAgICAgICAgLy8gdmFyIGFyZ3MgPSBBcnJheShzdGFydEluZGV4ICsgMSk7XG4gICAgICAgICAgICAvLyBmb3IgKGluZGV4ID0gMDsgaW5kZXggPCBzdGFydEluZGV4OyBpbmRleCsrKSB7XG4gICAgICAgICAgICAvLyAgICAgYXJnc1tpbmRleF0gPSBhcmd1bWVudHNbaW5kZXhdO1xuICAgICAgICAgICAgLy8gfVxuICAgICAgICAgICAgLy8gYXJnc1tzdGFydEluZGV4XSA9IHJlc3Q7XG4gICAgICAgICAgICAvLyByZXR1cm4gZnVuYy5hcHBseSh0aGlzLCBhcmdzKTtcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBfd2l0aG91dEluZGV4KGl0ZXJhdG9yKSB7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAodmFsdWUsIGluZGV4LCBjYWxsYmFjaykge1xuICAgICAgICAgICAgcmV0dXJuIGl0ZXJhdG9yKHZhbHVlLCBjYWxsYmFjayk7XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgLy8vLyBleHBvcnRlZCBhc3luYyBtb2R1bGUgZnVuY3Rpb25zIC8vLy9cblxuICAgIC8vLy8gbmV4dFRpY2sgaW1wbGVtZW50YXRpb24gd2l0aCBicm93c2VyLWNvbXBhdGlibGUgZmFsbGJhY2sgLy8vL1xuXG4gICAgLy8gY2FwdHVyZSB0aGUgZ2xvYmFsIHJlZmVyZW5jZSB0byBndWFyZCBhZ2FpbnN0IGZha2VUaW1lciBtb2Nrc1xuICAgIHZhciBfc2V0SW1tZWRpYXRlID0gdHlwZW9mIHNldEltbWVkaWF0ZSA9PT0gJ2Z1bmN0aW9uJyAmJiBzZXRJbW1lZGlhdGU7XG5cbiAgICB2YXIgX2RlbGF5ID0gX3NldEltbWVkaWF0ZSA/IGZ1bmN0aW9uKGZuKSB7XG4gICAgICAgIC8vIG5vdCBhIGRpcmVjdCBhbGlhcyBmb3IgSUUxMCBjb21wYXRpYmlsaXR5XG4gICAgICAgIF9zZXRJbW1lZGlhdGUoZm4pO1xuICAgIH0gOiBmdW5jdGlvbihmbikge1xuICAgICAgICBzZXRUaW1lb3V0KGZuLCAwKTtcbiAgICB9O1xuXG4gICAgaWYgKHR5cGVvZiBwcm9jZXNzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgcHJvY2Vzcy5uZXh0VGljayA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBhc3luYy5uZXh0VGljayA9IHByb2Nlc3MubmV4dFRpY2s7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgYXN5bmMubmV4dFRpY2sgPSBfZGVsYXk7XG4gICAgfVxuICAgIGFzeW5jLnNldEltbWVkaWF0ZSA9IF9zZXRJbW1lZGlhdGUgPyBfZGVsYXkgOiBhc3luYy5uZXh0VGljaztcblxuXG4gICAgYXN5bmMuZm9yRWFjaCA9XG4gICAgYXN5bmMuZWFjaCA9IGZ1bmN0aW9uIChhcnIsIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICByZXR1cm4gYXN5bmMuZWFjaE9mKGFyciwgX3dpdGhvdXRJbmRleChpdGVyYXRvciksIGNhbGxiYWNrKTtcbiAgICB9O1xuXG4gICAgYXN5bmMuZm9yRWFjaFNlcmllcyA9XG4gICAgYXN5bmMuZWFjaFNlcmllcyA9IGZ1bmN0aW9uIChhcnIsIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICByZXR1cm4gYXN5bmMuZWFjaE9mU2VyaWVzKGFyciwgX3dpdGhvdXRJbmRleChpdGVyYXRvciksIGNhbGxiYWNrKTtcbiAgICB9O1xuXG5cbiAgICBhc3luYy5mb3JFYWNoTGltaXQgPVxuICAgIGFzeW5jLmVhY2hMaW1pdCA9IGZ1bmN0aW9uIChhcnIsIGxpbWl0LCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgcmV0dXJuIF9lYWNoT2ZMaW1pdChsaW1pdCkoYXJyLCBfd2l0aG91dEluZGV4KGl0ZXJhdG9yKSwgY2FsbGJhY2spO1xuICAgIH07XG5cbiAgICBhc3luYy5mb3JFYWNoT2YgPVxuICAgIGFzeW5jLmVhY2hPZiA9IGZ1bmN0aW9uIChvYmplY3QsIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICBjYWxsYmFjayA9IF9vbmNlKGNhbGxiYWNrIHx8IG5vb3ApO1xuICAgICAgICBvYmplY3QgPSBvYmplY3QgfHwgW107XG5cbiAgICAgICAgdmFyIGl0ZXIgPSBfa2V5SXRlcmF0b3Iob2JqZWN0KTtcbiAgICAgICAgdmFyIGtleSwgY29tcGxldGVkID0gMDtcblxuICAgICAgICB3aGlsZSAoKGtleSA9IGl0ZXIoKSkgIT0gbnVsbCkge1xuICAgICAgICAgICAgY29tcGxldGVkICs9IDE7XG4gICAgICAgICAgICBpdGVyYXRvcihvYmplY3Rba2V5XSwga2V5LCBvbmx5X29uY2UoZG9uZSkpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGNvbXBsZXRlZCA9PT0gMCkgY2FsbGJhY2sobnVsbCk7XG5cbiAgICAgICAgZnVuY3Rpb24gZG9uZShlcnIpIHtcbiAgICAgICAgICAgIGNvbXBsZXRlZC0tO1xuICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBDaGVjayBrZXkgaXMgbnVsbCBpbiBjYXNlIGl0ZXJhdG9yIGlzbid0IGV4aGF1c3RlZFxuICAgICAgICAgICAgLy8gYW5kIGRvbmUgcmVzb2x2ZWQgc3luY2hyb25vdXNseS5cbiAgICAgICAgICAgIGVsc2UgaWYgKGtleSA9PT0gbnVsbCAmJiBjb21wbGV0ZWQgPD0gMCkge1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrKG51bGwpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfTtcblxuICAgIGFzeW5jLmZvckVhY2hPZlNlcmllcyA9XG4gICAgYXN5bmMuZWFjaE9mU2VyaWVzID0gZnVuY3Rpb24gKG9iaiwgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgIGNhbGxiYWNrID0gX29uY2UoY2FsbGJhY2sgfHwgbm9vcCk7XG4gICAgICAgIG9iaiA9IG9iaiB8fCBbXTtcbiAgICAgICAgdmFyIG5leHRLZXkgPSBfa2V5SXRlcmF0b3Iob2JqKTtcbiAgICAgICAgdmFyIGtleSA9IG5leHRLZXkoKTtcbiAgICAgICAgZnVuY3Rpb24gaXRlcmF0ZSgpIHtcbiAgICAgICAgICAgIHZhciBzeW5jID0gdHJ1ZTtcbiAgICAgICAgICAgIGlmIChrZXkgPT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gY2FsbGJhY2sobnVsbCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpdGVyYXRvcihvYmpba2V5XSwga2V5LCBvbmx5X29uY2UoZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGtleSA9IG5leHRLZXkoKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGtleSA9PT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKG51bGwpO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN5bmMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhc3luYy5zZXRJbW1lZGlhdGUoaXRlcmF0ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZXJhdGUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgIHN5bmMgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBpdGVyYXRlKCk7XG4gICAgfTtcblxuXG5cbiAgICBhc3luYy5mb3JFYWNoT2ZMaW1pdCA9XG4gICAgYXN5bmMuZWFjaE9mTGltaXQgPSBmdW5jdGlvbiAob2JqLCBsaW1pdCwgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgIF9lYWNoT2ZMaW1pdChsaW1pdCkob2JqLCBpdGVyYXRvciwgY2FsbGJhY2spO1xuICAgIH07XG5cbiAgICBmdW5jdGlvbiBfZWFjaE9mTGltaXQobGltaXQpIHtcblxuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKG9iaiwgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICBjYWxsYmFjayA9IF9vbmNlKGNhbGxiYWNrIHx8IG5vb3ApO1xuICAgICAgICAgICAgb2JqID0gb2JqIHx8IFtdO1xuICAgICAgICAgICAgdmFyIG5leHRLZXkgPSBfa2V5SXRlcmF0b3Iob2JqKTtcbiAgICAgICAgICAgIGlmIChsaW1pdCA8PSAwKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKG51bGwpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdmFyIGRvbmUgPSBmYWxzZTtcbiAgICAgICAgICAgIHZhciBydW5uaW5nID0gMDtcbiAgICAgICAgICAgIHZhciBlcnJvcmVkID0gZmFsc2U7XG5cbiAgICAgICAgICAgIChmdW5jdGlvbiByZXBsZW5pc2ggKCkge1xuICAgICAgICAgICAgICAgIGlmIChkb25lICYmIHJ1bm5pbmcgPD0gMCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gY2FsbGJhY2sobnVsbCk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgd2hpbGUgKHJ1bm5pbmcgPCBsaW1pdCAmJiAhZXJyb3JlZCkge1xuICAgICAgICAgICAgICAgICAgICB2YXIga2V5ID0gbmV4dEtleSgpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoa2V5ID09PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBkb25lID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChydW5uaW5nIDw9IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhudWxsKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBydW5uaW5nICs9IDE7XG4gICAgICAgICAgICAgICAgICAgIGl0ZXJhdG9yKG9ialtrZXldLCBrZXksIG9ubHlfb25jZShmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBydW5uaW5nIC09IDE7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvcmVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcGxlbmlzaCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSkoKTtcbiAgICAgICAgfTtcbiAgICB9XG5cblxuICAgIGZ1bmN0aW9uIGRvUGFyYWxsZWwoZm4pIHtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChvYmosIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICAgICAgcmV0dXJuIGZuKGFzeW5jLmVhY2hPZiwgb2JqLCBpdGVyYXRvciwgY2FsbGJhY2spO1xuICAgICAgICB9O1xuICAgIH1cbiAgICBmdW5jdGlvbiBkb1BhcmFsbGVsTGltaXQoZm4pIHtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChvYmosIGxpbWl0LCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIHJldHVybiBmbihfZWFjaE9mTGltaXQobGltaXQpLCBvYmosIGl0ZXJhdG9yLCBjYWxsYmFjayk7XG4gICAgICAgIH07XG4gICAgfVxuICAgIGZ1bmN0aW9uIGRvU2VyaWVzKGZuKSB7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAob2JqLCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIHJldHVybiBmbihhc3luYy5lYWNoT2ZTZXJpZXMsIG9iaiwgaXRlcmF0b3IsIGNhbGxiYWNrKTtcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBfYXN5bmNNYXAoZWFjaGZuLCBhcnIsIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICBjYWxsYmFjayA9IF9vbmNlKGNhbGxiYWNrIHx8IG5vb3ApO1xuICAgICAgICBhcnIgPSBhcnIgfHwgW107XG4gICAgICAgIHZhciByZXN1bHRzID0gX2lzQXJyYXlMaWtlKGFycikgPyBbXSA6IHt9O1xuICAgICAgICBlYWNoZm4oYXJyLCBmdW5jdGlvbiAodmFsdWUsIGluZGV4LCBjYWxsYmFjaykge1xuICAgICAgICAgICAgaXRlcmF0b3IodmFsdWUsIGZ1bmN0aW9uIChlcnIsIHYpIHtcbiAgICAgICAgICAgICAgICByZXN1bHRzW2luZGV4XSA9IHY7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICBjYWxsYmFjayhlcnIsIHJlc3VsdHMpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBhc3luYy5tYXAgPSBkb1BhcmFsbGVsKF9hc3luY01hcCk7XG4gICAgYXN5bmMubWFwU2VyaWVzID0gZG9TZXJpZXMoX2FzeW5jTWFwKTtcbiAgICBhc3luYy5tYXBMaW1pdCA9IGRvUGFyYWxsZWxMaW1pdChfYXN5bmNNYXApO1xuXG4gICAgLy8gcmVkdWNlIG9ubHkgaGFzIGEgc2VyaWVzIHZlcnNpb24sIGFzIGRvaW5nIHJlZHVjZSBpbiBwYXJhbGxlbCB3b24ndFxuICAgIC8vIHdvcmsgaW4gbWFueSBzaXR1YXRpb25zLlxuICAgIGFzeW5jLmluamVjdCA9XG4gICAgYXN5bmMuZm9sZGwgPVxuICAgIGFzeW5jLnJlZHVjZSA9IGZ1bmN0aW9uIChhcnIsIG1lbW8sIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICBhc3luYy5lYWNoT2ZTZXJpZXMoYXJyLCBmdW5jdGlvbiAoeCwgaSwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIGl0ZXJhdG9yKG1lbW8sIHgsIGZ1bmN0aW9uIChlcnIsIHYpIHtcbiAgICAgICAgICAgICAgICBtZW1vID0gdjtcbiAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgIGNhbGxiYWNrKGVyciwgbWVtbyk7XG4gICAgICAgIH0pO1xuICAgIH07XG5cbiAgICBhc3luYy5mb2xkciA9XG4gICAgYXN5bmMucmVkdWNlUmlnaHQgPSBmdW5jdGlvbiAoYXJyLCBtZW1vLCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgdmFyIHJldmVyc2VkID0gX21hcChhcnIsIGlkZW50aXR5KS5yZXZlcnNlKCk7XG4gICAgICAgIGFzeW5jLnJlZHVjZShyZXZlcnNlZCwgbWVtbywgaXRlcmF0b3IsIGNhbGxiYWNrKTtcbiAgICB9O1xuXG4gICAgYXN5bmMudHJhbnNmb3JtID0gZnVuY3Rpb24gKGFyciwgbWVtbywgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAzKSB7XG4gICAgICAgICAgICBjYWxsYmFjayA9IGl0ZXJhdG9yO1xuICAgICAgICAgICAgaXRlcmF0b3IgPSBtZW1vO1xuICAgICAgICAgICAgbWVtbyA9IF9pc0FycmF5KGFycikgPyBbXSA6IHt9O1xuICAgICAgICB9XG5cbiAgICAgICAgYXN5bmMuZWFjaE9mKGFyciwgZnVuY3Rpb24odiwgaywgY2IpIHtcbiAgICAgICAgICAgIGl0ZXJhdG9yKG1lbW8sIHYsIGssIGNiKTtcbiAgICAgICAgfSwgZnVuY3Rpb24oZXJyKSB7XG4gICAgICAgICAgICBjYWxsYmFjayhlcnIsIG1lbW8pO1xuICAgICAgICB9KTtcbiAgICB9O1xuXG4gICAgZnVuY3Rpb24gX2ZpbHRlcihlYWNoZm4sIGFyciwgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgIHZhciByZXN1bHRzID0gW107XG4gICAgICAgIGVhY2hmbihhcnIsIGZ1bmN0aW9uICh4LCBpbmRleCwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIGl0ZXJhdG9yKHgsIGZ1bmN0aW9uICh2KSB7XG4gICAgICAgICAgICAgICAgaWYgKHYpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0cy5wdXNoKHtpbmRleDogaW5kZXgsIHZhbHVlOiB4fSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhbGxiYWNrKCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgY2FsbGJhY2soX21hcChyZXN1bHRzLnNvcnQoZnVuY3Rpb24gKGEsIGIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gYS5pbmRleCAtIGIuaW5kZXg7XG4gICAgICAgICAgICB9KSwgZnVuY3Rpb24gKHgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4geC52YWx1ZTtcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgYXN5bmMuc2VsZWN0ID1cbiAgICBhc3luYy5maWx0ZXIgPSBkb1BhcmFsbGVsKF9maWx0ZXIpO1xuXG4gICAgYXN5bmMuc2VsZWN0TGltaXQgPVxuICAgIGFzeW5jLmZpbHRlckxpbWl0ID0gZG9QYXJhbGxlbExpbWl0KF9maWx0ZXIpO1xuXG4gICAgYXN5bmMuc2VsZWN0U2VyaWVzID1cbiAgICBhc3luYy5maWx0ZXJTZXJpZXMgPSBkb1NlcmllcyhfZmlsdGVyKTtcblxuICAgIGZ1bmN0aW9uIF9yZWplY3QoZWFjaGZuLCBhcnIsIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICBfZmlsdGVyKGVhY2hmbiwgYXJyLCBmdW5jdGlvbih2YWx1ZSwgY2IpIHtcbiAgICAgICAgICAgIGl0ZXJhdG9yKHZhbHVlLCBmdW5jdGlvbih2KSB7XG4gICAgICAgICAgICAgICAgY2IoIXYpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sIGNhbGxiYWNrKTtcbiAgICB9XG4gICAgYXN5bmMucmVqZWN0ID0gZG9QYXJhbGxlbChfcmVqZWN0KTtcbiAgICBhc3luYy5yZWplY3RMaW1pdCA9IGRvUGFyYWxsZWxMaW1pdChfcmVqZWN0KTtcbiAgICBhc3luYy5yZWplY3RTZXJpZXMgPSBkb1NlcmllcyhfcmVqZWN0KTtcblxuICAgIGZ1bmN0aW9uIF9jcmVhdGVUZXN0ZXIoZWFjaGZuLCBjaGVjaywgZ2V0UmVzdWx0KSB7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbihhcnIsIGxpbWl0LCBpdGVyYXRvciwgY2IpIHtcbiAgICAgICAgICAgIGZ1bmN0aW9uIGRvbmUoKSB7XG4gICAgICAgICAgICAgICAgaWYgKGNiKSBjYihnZXRSZXN1bHQoZmFsc2UsIHZvaWQgMCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZnVuY3Rpb24gaXRlcmF0ZWUoeCwgXywgY2FsbGJhY2spIHtcbiAgICAgICAgICAgICAgICBpZiAoIWNiKSByZXR1cm4gY2FsbGJhY2soKTtcbiAgICAgICAgICAgICAgICBpdGVyYXRvcih4LCBmdW5jdGlvbiAodikge1xuICAgICAgICAgICAgICAgICAgICBpZiAoY2IgJiYgY2hlY2sodikpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNiKGdldFJlc3VsdCh0cnVlLCB4KSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBjYiA9IGl0ZXJhdG9yID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID4gMykge1xuICAgICAgICAgICAgICAgIGVhY2hmbihhcnIsIGxpbWl0LCBpdGVyYXRlZSwgZG9uZSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGNiID0gaXRlcmF0b3I7XG4gICAgICAgICAgICAgICAgaXRlcmF0b3IgPSBsaW1pdDtcbiAgICAgICAgICAgICAgICBlYWNoZm4oYXJyLCBpdGVyYXRlZSwgZG9uZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgYXN5bmMuYW55ID1cbiAgICBhc3luYy5zb21lID0gX2NyZWF0ZVRlc3Rlcihhc3luYy5lYWNoT2YsIHRvQm9vbCwgaWRlbnRpdHkpO1xuXG4gICAgYXN5bmMuc29tZUxpbWl0ID0gX2NyZWF0ZVRlc3Rlcihhc3luYy5lYWNoT2ZMaW1pdCwgdG9Cb29sLCBpZGVudGl0eSk7XG5cbiAgICBhc3luYy5hbGwgPVxuICAgIGFzeW5jLmV2ZXJ5ID0gX2NyZWF0ZVRlc3Rlcihhc3luYy5lYWNoT2YsIG5vdElkLCBub3RJZCk7XG5cbiAgICBhc3luYy5ldmVyeUxpbWl0ID0gX2NyZWF0ZVRlc3Rlcihhc3luYy5lYWNoT2ZMaW1pdCwgbm90SWQsIG5vdElkKTtcblxuICAgIGZ1bmN0aW9uIF9maW5kR2V0UmVzdWx0KHYsIHgpIHtcbiAgICAgICAgcmV0dXJuIHg7XG4gICAgfVxuICAgIGFzeW5jLmRldGVjdCA9IF9jcmVhdGVUZXN0ZXIoYXN5bmMuZWFjaE9mLCBpZGVudGl0eSwgX2ZpbmRHZXRSZXN1bHQpO1xuICAgIGFzeW5jLmRldGVjdFNlcmllcyA9IF9jcmVhdGVUZXN0ZXIoYXN5bmMuZWFjaE9mU2VyaWVzLCBpZGVudGl0eSwgX2ZpbmRHZXRSZXN1bHQpO1xuICAgIGFzeW5jLmRldGVjdExpbWl0ID0gX2NyZWF0ZVRlc3Rlcihhc3luYy5lYWNoT2ZMaW1pdCwgaWRlbnRpdHksIF9maW5kR2V0UmVzdWx0KTtcblxuICAgIGFzeW5jLnNvcnRCeSA9IGZ1bmN0aW9uIChhcnIsIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICBhc3luYy5tYXAoYXJyLCBmdW5jdGlvbiAoeCwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIGl0ZXJhdG9yKHgsIGZ1bmN0aW9uIChlcnIsIGNyaXRlcmlhKSB7XG4gICAgICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2sobnVsbCwge3ZhbHVlOiB4LCBjcml0ZXJpYTogY3JpdGVyaWF9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSwgZnVuY3Rpb24gKGVyciwgcmVzdWx0cykge1xuICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAgIHJldHVybiBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2sobnVsbCwgX21hcChyZXN1bHRzLnNvcnQoY29tcGFyYXRvciksIGZ1bmN0aW9uICh4KSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB4LnZhbHVlO1xuICAgICAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICB9KTtcblxuICAgICAgICBmdW5jdGlvbiBjb21wYXJhdG9yKGxlZnQsIHJpZ2h0KSB7XG4gICAgICAgICAgICB2YXIgYSA9IGxlZnQuY3JpdGVyaWEsIGIgPSByaWdodC5jcml0ZXJpYTtcbiAgICAgICAgICAgIHJldHVybiBhIDwgYiA/IC0xIDogYSA+IGIgPyAxIDogMDtcbiAgICAgICAgfVxuICAgIH07XG5cbiAgICBhc3luYy5hdXRvID0gZnVuY3Rpb24gKHRhc2tzLCBjb25jdXJyZW5jeSwgY2FsbGJhY2spIHtcbiAgICAgICAgaWYgKCFjYWxsYmFjaykge1xuICAgICAgICAgICAgLy8gY29uY3VycmVuY3kgaXMgb3B0aW9uYWwsIHNoaWZ0IHRoZSBhcmdzLlxuICAgICAgICAgICAgY2FsbGJhY2sgPSBjb25jdXJyZW5jeTtcbiAgICAgICAgICAgIGNvbmN1cnJlbmN5ID0gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBjYWxsYmFjayA9IF9vbmNlKGNhbGxiYWNrIHx8IG5vb3ApO1xuICAgICAgICB2YXIga2V5cyA9IF9rZXlzKHRhc2tzKTtcbiAgICAgICAgdmFyIHJlbWFpbmluZ1Rhc2tzID0ga2V5cy5sZW5ndGg7XG4gICAgICAgIGlmICghcmVtYWluaW5nVGFza3MpIHtcbiAgICAgICAgICAgIHJldHVybiBjYWxsYmFjayhudWxsKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWNvbmN1cnJlbmN5KSB7XG4gICAgICAgICAgICBjb25jdXJyZW5jeSA9IHJlbWFpbmluZ1Rhc2tzO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIHJlc3VsdHMgPSB7fTtcbiAgICAgICAgdmFyIHJ1bm5pbmdUYXNrcyA9IDA7XG5cbiAgICAgICAgdmFyIGxpc3RlbmVycyA9IFtdO1xuICAgICAgICBmdW5jdGlvbiBhZGRMaXN0ZW5lcihmbikge1xuICAgICAgICAgICAgbGlzdGVuZXJzLnVuc2hpZnQoZm4pO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIHJlbW92ZUxpc3RlbmVyKGZuKSB7XG4gICAgICAgICAgICB2YXIgaWR4ID0gX2luZGV4T2YobGlzdGVuZXJzLCBmbik7XG4gICAgICAgICAgICBpZiAoaWR4ID49IDApIGxpc3RlbmVycy5zcGxpY2UoaWR4LCAxKTtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiB0YXNrQ29tcGxldGUoKSB7XG4gICAgICAgICAgICByZW1haW5pbmdUYXNrcy0tO1xuICAgICAgICAgICAgX2FycmF5RWFjaChsaXN0ZW5lcnMuc2xpY2UoMCksIGZ1bmN0aW9uIChmbikge1xuICAgICAgICAgICAgICAgIGZuKCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGFkZExpc3RlbmVyKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGlmICghcmVtYWluaW5nVGFza3MpIHtcbiAgICAgICAgICAgICAgICBjYWxsYmFjayhudWxsLCByZXN1bHRzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgX2FycmF5RWFjaChrZXlzLCBmdW5jdGlvbiAoaykge1xuICAgICAgICAgICAgdmFyIHRhc2sgPSBfaXNBcnJheSh0YXNrc1trXSkgPyB0YXNrc1trXTogW3Rhc2tzW2tdXTtcbiAgICAgICAgICAgIHZhciB0YXNrQ2FsbGJhY2sgPSBfcmVzdFBhcmFtKGZ1bmN0aW9uKGVyciwgYXJncykge1xuICAgICAgICAgICAgICAgIHJ1bm5pbmdUYXNrcy0tO1xuICAgICAgICAgICAgICAgIGlmIChhcmdzLmxlbmd0aCA8PSAxKSB7XG4gICAgICAgICAgICAgICAgICAgIGFyZ3MgPSBhcmdzWzBdO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBzYWZlUmVzdWx0cyA9IHt9O1xuICAgICAgICAgICAgICAgICAgICBfZm9yRWFjaE9mKHJlc3VsdHMsIGZ1bmN0aW9uKHZhbCwgcmtleSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgc2FmZVJlc3VsdHNbcmtleV0gPSB2YWw7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICBzYWZlUmVzdWx0c1trXSA9IGFyZ3M7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKGVyciwgc2FmZVJlc3VsdHMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0c1trXSA9IGFyZ3M7XG4gICAgICAgICAgICAgICAgICAgIGFzeW5jLnNldEltbWVkaWF0ZSh0YXNrQ29tcGxldGUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdmFyIHJlcXVpcmVzID0gdGFzay5zbGljZSgwLCB0YXNrLmxlbmd0aCAtIDEpO1xuICAgICAgICAgICAgLy8gcHJldmVudCBkZWFkLWxvY2tzXG4gICAgICAgICAgICB2YXIgbGVuID0gcmVxdWlyZXMubGVuZ3RoO1xuICAgICAgICAgICAgdmFyIGRlcDtcbiAgICAgICAgICAgIHdoaWxlIChsZW4tLSkge1xuICAgICAgICAgICAgICAgIGlmICghKGRlcCA9IHRhc2tzW3JlcXVpcmVzW2xlbl1dKSkge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0hhcyBpbmV4aXN0YW50IGRlcGVuZGVuY3knKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKF9pc0FycmF5KGRlcCkgJiYgX2luZGV4T2YoZGVwLCBrKSA+PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignSGFzIGN5Y2xpYyBkZXBlbmRlbmNpZXMnKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmdW5jdGlvbiByZWFkeSgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcnVubmluZ1Rhc2tzIDwgY29uY3VycmVuY3kgJiYgX3JlZHVjZShyZXF1aXJlcywgZnVuY3Rpb24gKGEsIHgpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChhICYmIHJlc3VsdHMuaGFzT3duUHJvcGVydHkoeCkpO1xuICAgICAgICAgICAgICAgIH0sIHRydWUpICYmICFyZXN1bHRzLmhhc093blByb3BlcnR5KGspO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHJlYWR5KCkpIHtcbiAgICAgICAgICAgICAgICBydW5uaW5nVGFza3MrKztcbiAgICAgICAgICAgICAgICB0YXNrW3Rhc2subGVuZ3RoIC0gMV0odGFza0NhbGxiYWNrLCByZXN1bHRzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGFkZExpc3RlbmVyKGxpc3RlbmVyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZ1bmN0aW9uIGxpc3RlbmVyKCkge1xuICAgICAgICAgICAgICAgIGlmIChyZWFkeSgpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJ1bm5pbmdUYXNrcysrO1xuICAgICAgICAgICAgICAgICAgICByZW1vdmVMaXN0ZW5lcihsaXN0ZW5lcik7XG4gICAgICAgICAgICAgICAgICAgIHRhc2tbdGFzay5sZW5ndGggLSAxXSh0YXNrQ2FsbGJhY2ssIHJlc3VsdHMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfTtcblxuXG5cbiAgICBhc3luYy5yZXRyeSA9IGZ1bmN0aW9uKHRpbWVzLCB0YXNrLCBjYWxsYmFjaykge1xuICAgICAgICB2YXIgREVGQVVMVF9USU1FUyA9IDU7XG4gICAgICAgIHZhciBERUZBVUxUX0lOVEVSVkFMID0gMDtcblxuICAgICAgICB2YXIgYXR0ZW1wdHMgPSBbXTtcblxuICAgICAgICB2YXIgb3B0cyA9IHtcbiAgICAgICAgICAgIHRpbWVzOiBERUZBVUxUX1RJTUVTLFxuICAgICAgICAgICAgaW50ZXJ2YWw6IERFRkFVTFRfSU5URVJWQUxcbiAgICAgICAgfTtcblxuICAgICAgICBmdW5jdGlvbiBwYXJzZVRpbWVzKGFjYywgdCl7XG4gICAgICAgICAgICBpZih0eXBlb2YgdCA9PT0gJ251bWJlcicpe1xuICAgICAgICAgICAgICAgIGFjYy50aW1lcyA9IHBhcnNlSW50KHQsIDEwKSB8fCBERUZBVUxUX1RJTUVTO1xuICAgICAgICAgICAgfSBlbHNlIGlmKHR5cGVvZiB0ID09PSAnb2JqZWN0Jyl7XG4gICAgICAgICAgICAgICAgYWNjLnRpbWVzID0gcGFyc2VJbnQodC50aW1lcywgMTApIHx8IERFRkFVTFRfVElNRVM7XG4gICAgICAgICAgICAgICAgYWNjLmludGVydmFsID0gcGFyc2VJbnQodC5pbnRlcnZhbCwgMTApIHx8IERFRkFVTFRfSU5URVJWQUw7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignVW5zdXBwb3J0ZWQgYXJndW1lbnQgdHlwZSBmb3IgXFwndGltZXNcXCc6ICcgKyB0eXBlb2YgdCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgbGVuZ3RoID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgICAgICAgaWYgKGxlbmd0aCA8IDEgfHwgbGVuZ3RoID4gMykge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIGFyZ3VtZW50cyAtIG11c3QgYmUgZWl0aGVyICh0YXNrKSwgKHRhc2ssIGNhbGxiYWNrKSwgKHRpbWVzLCB0YXNrKSBvciAodGltZXMsIHRhc2ssIGNhbGxiYWNrKScpO1xuICAgICAgICB9IGVsc2UgaWYgKGxlbmd0aCA8PSAyICYmIHR5cGVvZiB0aW1lcyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgY2FsbGJhY2sgPSB0YXNrO1xuICAgICAgICAgICAgdGFzayA9IHRpbWVzO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0eXBlb2YgdGltZXMgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIHBhcnNlVGltZXMob3B0cywgdGltZXMpO1xuICAgICAgICB9XG4gICAgICAgIG9wdHMuY2FsbGJhY2sgPSBjYWxsYmFjaztcbiAgICAgICAgb3B0cy50YXNrID0gdGFzaztcblxuICAgICAgICBmdW5jdGlvbiB3cmFwcGVkVGFzayh3cmFwcGVkQ2FsbGJhY2ssIHdyYXBwZWRSZXN1bHRzKSB7XG4gICAgICAgICAgICBmdW5jdGlvbiByZXRyeUF0dGVtcHQodGFzaywgZmluYWxBdHRlbXB0KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKHNlcmllc0NhbGxiYWNrKSB7XG4gICAgICAgICAgICAgICAgICAgIHRhc2soZnVuY3Rpb24oZXJyLCByZXN1bHQpe1xuICAgICAgICAgICAgICAgICAgICAgICAgc2VyaWVzQ2FsbGJhY2soIWVyciB8fCBmaW5hbEF0dGVtcHQsIHtlcnI6IGVyciwgcmVzdWx0OiByZXN1bHR9KTtcbiAgICAgICAgICAgICAgICAgICAgfSwgd3JhcHBlZFJlc3VsdHMpO1xuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGZ1bmN0aW9uIHJldHJ5SW50ZXJ2YWwoaW50ZXJ2YWwpe1xuICAgICAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbihzZXJpZXNDYWxsYmFjayl7XG4gICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKXtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlcmllc0NhbGxiYWNrKG51bGwpO1xuICAgICAgICAgICAgICAgICAgICB9LCBpbnRlcnZhbCk7XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgd2hpbGUgKG9wdHMudGltZXMpIHtcblxuICAgICAgICAgICAgICAgIHZhciBmaW5hbEF0dGVtcHQgPSAhKG9wdHMudGltZXMtPTEpO1xuICAgICAgICAgICAgICAgIGF0dGVtcHRzLnB1c2gocmV0cnlBdHRlbXB0KG9wdHMudGFzaywgZmluYWxBdHRlbXB0KSk7XG4gICAgICAgICAgICAgICAgaWYoIWZpbmFsQXR0ZW1wdCAmJiBvcHRzLmludGVydmFsID4gMCl7XG4gICAgICAgICAgICAgICAgICAgIGF0dGVtcHRzLnB1c2gocmV0cnlJbnRlcnZhbChvcHRzLmludGVydmFsKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBhc3luYy5zZXJpZXMoYXR0ZW1wdHMsIGZ1bmN0aW9uKGRvbmUsIGRhdGEpe1xuICAgICAgICAgICAgICAgIGRhdGEgPSBkYXRhW2RhdGEubGVuZ3RoIC0gMV07XG4gICAgICAgICAgICAgICAgKHdyYXBwZWRDYWxsYmFjayB8fCBvcHRzLmNhbGxiYWNrKShkYXRhLmVyciwgZGF0YS5yZXN1bHQpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBJZiBhIGNhbGxiYWNrIGlzIHBhc3NlZCwgcnVuIHRoaXMgYXMgYSBjb250cm9sbCBmbG93XG4gICAgICAgIHJldHVybiBvcHRzLmNhbGxiYWNrID8gd3JhcHBlZFRhc2soKSA6IHdyYXBwZWRUYXNrO1xuICAgIH07XG5cbiAgICBhc3luYy53YXRlcmZhbGwgPSBmdW5jdGlvbiAodGFza3MsIGNhbGxiYWNrKSB7XG4gICAgICAgIGNhbGxiYWNrID0gX29uY2UoY2FsbGJhY2sgfHwgbm9vcCk7XG4gICAgICAgIGlmICghX2lzQXJyYXkodGFza3MpKSB7XG4gICAgICAgICAgICB2YXIgZXJyID0gbmV3IEVycm9yKCdGaXJzdCBhcmd1bWVudCB0byB3YXRlcmZhbGwgbXVzdCBiZSBhbiBhcnJheSBvZiBmdW5jdGlvbnMnKTtcbiAgICAgICAgICAgIHJldHVybiBjYWxsYmFjayhlcnIpO1xuICAgICAgICB9XG4gICAgICAgIGlmICghdGFza3MubGVuZ3RoKSB7XG4gICAgICAgICAgICByZXR1cm4gY2FsbGJhY2soKTtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiB3cmFwSXRlcmF0b3IoaXRlcmF0b3IpIHtcbiAgICAgICAgICAgIHJldHVybiBfcmVzdFBhcmFtKGZ1bmN0aW9uIChlcnIsIGFyZ3MpIHtcbiAgICAgICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrLmFwcGx5KG51bGwsIFtlcnJdLmNvbmNhdChhcmdzKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB2YXIgbmV4dCA9IGl0ZXJhdG9yLm5leHQoKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKG5leHQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3MucHVzaCh3cmFwSXRlcmF0b3IobmV4dCkpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgYXJncy5wdXNoKGNhbGxiYWNrKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbnN1cmVBc3luYyhpdGVyYXRvcikuYXBwbHkobnVsbCwgYXJncyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgd3JhcEl0ZXJhdG9yKGFzeW5jLml0ZXJhdG9yKHRhc2tzKSkoKTtcbiAgICB9O1xuXG4gICAgZnVuY3Rpb24gX3BhcmFsbGVsKGVhY2hmbiwgdGFza3MsIGNhbGxiYWNrKSB7XG4gICAgICAgIGNhbGxiYWNrID0gY2FsbGJhY2sgfHwgbm9vcDtcbiAgICAgICAgdmFyIHJlc3VsdHMgPSBfaXNBcnJheUxpa2UodGFza3MpID8gW10gOiB7fTtcblxuICAgICAgICBlYWNoZm4odGFza3MsIGZ1bmN0aW9uICh0YXNrLCBrZXksIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICB0YXNrKF9yZXN0UGFyYW0oZnVuY3Rpb24gKGVyciwgYXJncykge1xuICAgICAgICAgICAgICAgIGlmIChhcmdzLmxlbmd0aCA8PSAxKSB7XG4gICAgICAgICAgICAgICAgICAgIGFyZ3MgPSBhcmdzWzBdO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXN1bHRzW2tleV0gPSBhcmdzO1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgICB9KSk7XG4gICAgICAgIH0sIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgIGNhbGxiYWNrKGVyciwgcmVzdWx0cyk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGFzeW5jLnBhcmFsbGVsID0gZnVuY3Rpb24gKHRhc2tzLCBjYWxsYmFjaykge1xuICAgICAgICBfcGFyYWxsZWwoYXN5bmMuZWFjaE9mLCB0YXNrcywgY2FsbGJhY2spO1xuICAgIH07XG5cbiAgICBhc3luYy5wYXJhbGxlbExpbWl0ID0gZnVuY3Rpb24odGFza3MsIGxpbWl0LCBjYWxsYmFjaykge1xuICAgICAgICBfcGFyYWxsZWwoX2VhY2hPZkxpbWl0KGxpbWl0KSwgdGFza3MsIGNhbGxiYWNrKTtcbiAgICB9O1xuXG4gICAgYXN5bmMuc2VyaWVzID0gZnVuY3Rpb24odGFza3MsIGNhbGxiYWNrKSB7XG4gICAgICAgIF9wYXJhbGxlbChhc3luYy5lYWNoT2ZTZXJpZXMsIHRhc2tzLCBjYWxsYmFjayk7XG4gICAgfTtcblxuICAgIGFzeW5jLml0ZXJhdG9yID0gZnVuY3Rpb24gKHRhc2tzKSB7XG4gICAgICAgIGZ1bmN0aW9uIG1ha2VDYWxsYmFjayhpbmRleCkge1xuICAgICAgICAgICAgZnVuY3Rpb24gZm4oKSB7XG4gICAgICAgICAgICAgICAgaWYgKHRhc2tzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICB0YXNrc1tpbmRleF0uYXBwbHkobnVsbCwgYXJndW1lbnRzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZuLm5leHQoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZuLm5leHQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIChpbmRleCA8IHRhc2tzLmxlbmd0aCAtIDEpID8gbWFrZUNhbGxiYWNrKGluZGV4ICsgMSk6IG51bGw7XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgcmV0dXJuIGZuO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBtYWtlQ2FsbGJhY2soMCk7XG4gICAgfTtcblxuICAgIGFzeW5jLmFwcGx5ID0gX3Jlc3RQYXJhbShmdW5jdGlvbiAoZm4sIGFyZ3MpIHtcbiAgICAgICAgcmV0dXJuIF9yZXN0UGFyYW0oZnVuY3Rpb24gKGNhbGxBcmdzKSB7XG4gICAgICAgICAgICByZXR1cm4gZm4uYXBwbHkoXG4gICAgICAgICAgICAgICAgbnVsbCwgYXJncy5jb25jYXQoY2FsbEFyZ3MpXG4gICAgICAgICAgICApO1xuICAgICAgICB9KTtcbiAgICB9KTtcblxuICAgIGZ1bmN0aW9uIF9jb25jYXQoZWFjaGZuLCBhcnIsIGZuLCBjYWxsYmFjaykge1xuICAgICAgICB2YXIgcmVzdWx0ID0gW107XG4gICAgICAgIGVhY2hmbihhcnIsIGZ1bmN0aW9uICh4LCBpbmRleCwgY2IpIHtcbiAgICAgICAgICAgIGZuKHgsIGZ1bmN0aW9uIChlcnIsIHkpIHtcbiAgICAgICAgICAgICAgICByZXN1bHQgPSByZXN1bHQuY29uY2F0KHkgfHwgW10pO1xuICAgICAgICAgICAgICAgIGNiKGVycik7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSwgZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgY2FsbGJhY2soZXJyLCByZXN1bHQpO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgYXN5bmMuY29uY2F0ID0gZG9QYXJhbGxlbChfY29uY2F0KTtcbiAgICBhc3luYy5jb25jYXRTZXJpZXMgPSBkb1NlcmllcyhfY29uY2F0KTtcblxuICAgIGFzeW5jLndoaWxzdCA9IGZ1bmN0aW9uICh0ZXN0LCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgY2FsbGJhY2sgPSBjYWxsYmFjayB8fCBub29wO1xuICAgICAgICBpZiAodGVzdCgpKSB7XG4gICAgICAgICAgICB2YXIgbmV4dCA9IF9yZXN0UGFyYW0oZnVuY3Rpb24oZXJyLCBhcmdzKSB7XG4gICAgICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodGVzdC5hcHBseSh0aGlzLCBhcmdzKSkge1xuICAgICAgICAgICAgICAgICAgICBpdGVyYXRvcihuZXh0KTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhudWxsKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGl0ZXJhdG9yKG5leHQpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY2FsbGJhY2sobnVsbCk7XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgYXN5bmMuZG9XaGlsc3QgPSBmdW5jdGlvbiAoaXRlcmF0b3IsIHRlc3QsIGNhbGxiYWNrKSB7XG4gICAgICAgIHZhciBjYWxscyA9IDA7XG4gICAgICAgIHJldHVybiBhc3luYy53aGlsc3QoZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICByZXR1cm4gKytjYWxscyA8PSAxIHx8IHRlc3QuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICAgICAgfSwgaXRlcmF0b3IsIGNhbGxiYWNrKTtcbiAgICB9O1xuXG4gICAgYXN5bmMudW50aWwgPSBmdW5jdGlvbiAodGVzdCwgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgIHJldHVybiBhc3luYy53aGlsc3QoZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICByZXR1cm4gIXRlc3QuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICAgICAgfSwgaXRlcmF0b3IsIGNhbGxiYWNrKTtcbiAgICB9O1xuXG4gICAgYXN5bmMuZG9VbnRpbCA9IGZ1bmN0aW9uIChpdGVyYXRvciwgdGVzdCwgY2FsbGJhY2spIHtcbiAgICAgICAgcmV0dXJuIGFzeW5jLmRvV2hpbHN0KGl0ZXJhdG9yLCBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIHJldHVybiAhdGVzdC5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgICAgICB9LCBjYWxsYmFjayk7XG4gICAgfTtcblxuICAgIGFzeW5jLmR1cmluZyA9IGZ1bmN0aW9uICh0ZXN0LCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgY2FsbGJhY2sgPSBjYWxsYmFjayB8fCBub29wO1xuXG4gICAgICAgIHZhciBuZXh0ID0gX3Jlc3RQYXJhbShmdW5jdGlvbihlcnIsIGFyZ3MpIHtcbiAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBhcmdzLnB1c2goY2hlY2spO1xuICAgICAgICAgICAgICAgIHRlc3QuYXBwbHkodGhpcywgYXJncyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHZhciBjaGVjayA9IGZ1bmN0aW9uKGVyciwgdHJ1dGgpIHtcbiAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh0cnV0aCkge1xuICAgICAgICAgICAgICAgIGl0ZXJhdG9yKG5leHQpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBjYWxsYmFjayhudWxsKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcblxuICAgICAgICB0ZXN0KGNoZWNrKTtcbiAgICB9O1xuXG4gICAgYXN5bmMuZG9EdXJpbmcgPSBmdW5jdGlvbiAoaXRlcmF0b3IsIHRlc3QsIGNhbGxiYWNrKSB7XG4gICAgICAgIHZhciBjYWxscyA9IDA7XG4gICAgICAgIGFzeW5jLmR1cmluZyhmdW5jdGlvbihuZXh0KSB7XG4gICAgICAgICAgICBpZiAoY2FsbHMrKyA8IDEpIHtcbiAgICAgICAgICAgICAgICBuZXh0KG51bGwsIHRydWUpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0ZXN0LmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sIGl0ZXJhdG9yLCBjYWxsYmFjayk7XG4gICAgfTtcblxuICAgIGZ1bmN0aW9uIF9xdWV1ZSh3b3JrZXIsIGNvbmN1cnJlbmN5LCBwYXlsb2FkKSB7XG4gICAgICAgIGlmIChjb25jdXJyZW5jeSA9PSBudWxsKSB7XG4gICAgICAgICAgICBjb25jdXJyZW5jeSA9IDE7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZihjb25jdXJyZW5jeSA9PT0gMCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdDb25jdXJyZW5jeSBtdXN0IG5vdCBiZSB6ZXJvJyk7XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gX2luc2VydChxLCBkYXRhLCBwb3MsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICBpZiAoY2FsbGJhY2sgIT0gbnVsbCAmJiB0eXBlb2YgY2FsbGJhY2sgIT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcInRhc2sgY2FsbGJhY2sgbXVzdCBiZSBhIGZ1bmN0aW9uXCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcS5zdGFydGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIGlmICghX2lzQXJyYXkoZGF0YSkpIHtcbiAgICAgICAgICAgICAgICBkYXRhID0gW2RhdGFdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYoZGF0YS5sZW5ndGggPT09IDAgJiYgcS5pZGxlKCkpIHtcbiAgICAgICAgICAgICAgICAvLyBjYWxsIGRyYWluIGltbWVkaWF0ZWx5IGlmIHRoZXJlIGFyZSBubyB0YXNrc1xuICAgICAgICAgICAgICAgIHJldHVybiBhc3luYy5zZXRJbW1lZGlhdGUoZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgICAgIHEuZHJhaW4oKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIF9hcnJheUVhY2goZGF0YSwgZnVuY3Rpb24odGFzaykge1xuICAgICAgICAgICAgICAgIHZhciBpdGVtID0ge1xuICAgICAgICAgICAgICAgICAgICBkYXRhOiB0YXNrLFxuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjazogY2FsbGJhY2sgfHwgbm9vcFxuICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICBpZiAocG9zKSB7XG4gICAgICAgICAgICAgICAgICAgIHEudGFza3MudW5zaGlmdChpdGVtKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBxLnRhc2tzLnB1c2goaXRlbSk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKHEudGFza3MubGVuZ3RoID09PSBxLmNvbmN1cnJlbmN5KSB7XG4gICAgICAgICAgICAgICAgICAgIHEuc2F0dXJhdGVkKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBhc3luYy5zZXRJbW1lZGlhdGUocS5wcm9jZXNzKTtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBfbmV4dChxLCB0YXNrcykge1xuICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKCl7XG4gICAgICAgICAgICAgICAgd29ya2VycyAtPSAxO1xuXG4gICAgICAgICAgICAgICAgdmFyIHJlbW92ZWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB2YXIgYXJncyA9IGFyZ3VtZW50cztcbiAgICAgICAgICAgICAgICBfYXJyYXlFYWNoKHRhc2tzLCBmdW5jdGlvbiAodGFzaykge1xuICAgICAgICAgICAgICAgICAgICBfYXJyYXlFYWNoKHdvcmtlcnNMaXN0LCBmdW5jdGlvbiAod29ya2VyLCBpbmRleCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHdvcmtlciA9PT0gdGFzayAmJiAhcmVtb3ZlZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdvcmtlcnNMaXN0LnNwbGljZShpbmRleCwgMSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVtb3ZlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgICAgIHRhc2suY2FsbGJhY2suYXBwbHkodGFzaywgYXJncyk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgaWYgKHEudGFza3MubGVuZ3RoICsgd29ya2VycyA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICBxLmRyYWluKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHEucHJvY2VzcygpO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciB3b3JrZXJzID0gMDtcbiAgICAgICAgdmFyIHdvcmtlcnNMaXN0ID0gW107XG4gICAgICAgIHZhciBxID0ge1xuICAgICAgICAgICAgdGFza3M6IFtdLFxuICAgICAgICAgICAgY29uY3VycmVuY3k6IGNvbmN1cnJlbmN5LFxuICAgICAgICAgICAgcGF5bG9hZDogcGF5bG9hZCxcbiAgICAgICAgICAgIHNhdHVyYXRlZDogbm9vcCxcbiAgICAgICAgICAgIGVtcHR5OiBub29wLFxuICAgICAgICAgICAgZHJhaW46IG5vb3AsXG4gICAgICAgICAgICBzdGFydGVkOiBmYWxzZSxcbiAgICAgICAgICAgIHBhdXNlZDogZmFsc2UsXG4gICAgICAgICAgICBwdXNoOiBmdW5jdGlvbiAoZGF0YSwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgICAgICBfaW5zZXJ0KHEsIGRhdGEsIGZhbHNlLCBjYWxsYmFjayk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAga2lsbDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHEuZHJhaW4gPSBub29wO1xuICAgICAgICAgICAgICAgIHEudGFza3MgPSBbXTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB1bnNoaWZ0OiBmdW5jdGlvbiAoZGF0YSwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgICAgICBfaW5zZXJ0KHEsIGRhdGEsIHRydWUsIGNhbGxiYWNrKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBwcm9jZXNzOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgaWYgKCFxLnBhdXNlZCAmJiB3b3JrZXJzIDwgcS5jb25jdXJyZW5jeSAmJiBxLnRhc2tzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICB3aGlsZSh3b3JrZXJzIDwgcS5jb25jdXJyZW5jeSAmJiBxLnRhc2tzLmxlbmd0aCl7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgdGFza3MgPSBxLnBheWxvYWQgP1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHEudGFza3Muc3BsaWNlKDAsIHEucGF5bG9hZCkgOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHEudGFza3Muc3BsaWNlKDAsIHEudGFza3MubGVuZ3RoKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGRhdGEgPSBfbWFwKHRhc2tzLCBmdW5jdGlvbiAodGFzaykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0YXNrLmRhdGE7XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHEudGFza3MubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcS5lbXB0eSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgd29ya2VycyArPSAxO1xuICAgICAgICAgICAgICAgICAgICAgICAgd29ya2Vyc0xpc3QucHVzaCh0YXNrc1swXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgY2IgPSBvbmx5X29uY2UoX25leHQocSwgdGFza3MpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHdvcmtlcihkYXRhLCBjYik7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbGVuZ3RoOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHEudGFza3MubGVuZ3RoO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHJ1bm5pbmc6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gd29ya2VycztcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB3b3JrZXJzTGlzdDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB3b3JrZXJzTGlzdDtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBpZGxlOiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcS50YXNrcy5sZW5ndGggKyB3b3JrZXJzID09PSAwO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHBhdXNlOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgcS5wYXVzZWQgPSB0cnVlO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHJlc3VtZTogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGlmIChxLnBhdXNlZCA9PT0gZmFsc2UpIHsgcmV0dXJuOyB9XG4gICAgICAgICAgICAgICAgcS5wYXVzZWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB2YXIgcmVzdW1lQ291bnQgPSBNYXRoLm1pbihxLmNvbmN1cnJlbmN5LCBxLnRhc2tzLmxlbmd0aCk7XG4gICAgICAgICAgICAgICAgLy8gTmVlZCB0byBjYWxsIHEucHJvY2VzcyBvbmNlIHBlciBjb25jdXJyZW50XG4gICAgICAgICAgICAgICAgLy8gd29ya2VyIHRvIHByZXNlcnZlIGZ1bGwgY29uY3VycmVuY3kgYWZ0ZXIgcGF1c2VcbiAgICAgICAgICAgICAgICBmb3IgKHZhciB3ID0gMTsgdyA8PSByZXN1bWVDb3VudDsgdysrKSB7XG4gICAgICAgICAgICAgICAgICAgIGFzeW5jLnNldEltbWVkaWF0ZShxLnByb2Nlc3MpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIHE7XG4gICAgfVxuXG4gICAgYXN5bmMucXVldWUgPSBmdW5jdGlvbiAod29ya2VyLCBjb25jdXJyZW5jeSkge1xuICAgICAgICB2YXIgcSA9IF9xdWV1ZShmdW5jdGlvbiAoaXRlbXMsIGNiKSB7XG4gICAgICAgICAgICB3b3JrZXIoaXRlbXNbMF0sIGNiKTtcbiAgICAgICAgfSwgY29uY3VycmVuY3ksIDEpO1xuXG4gICAgICAgIHJldHVybiBxO1xuICAgIH07XG5cbiAgICBhc3luYy5wcmlvcml0eVF1ZXVlID0gZnVuY3Rpb24gKHdvcmtlciwgY29uY3VycmVuY3kpIHtcblxuICAgICAgICBmdW5jdGlvbiBfY29tcGFyZVRhc2tzKGEsIGIpe1xuICAgICAgICAgICAgcmV0dXJuIGEucHJpb3JpdHkgLSBiLnByaW9yaXR5O1xuICAgICAgICB9XG5cbiAgICAgICAgZnVuY3Rpb24gX2JpbmFyeVNlYXJjaChzZXF1ZW5jZSwgaXRlbSwgY29tcGFyZSkge1xuICAgICAgICAgICAgdmFyIGJlZyA9IC0xLFxuICAgICAgICAgICAgICAgIGVuZCA9IHNlcXVlbmNlLmxlbmd0aCAtIDE7XG4gICAgICAgICAgICB3aGlsZSAoYmVnIDwgZW5kKSB7XG4gICAgICAgICAgICAgICAgdmFyIG1pZCA9IGJlZyArICgoZW5kIC0gYmVnICsgMSkgPj4+IDEpO1xuICAgICAgICAgICAgICAgIGlmIChjb21wYXJlKGl0ZW0sIHNlcXVlbmNlW21pZF0pID49IDApIHtcbiAgICAgICAgICAgICAgICAgICAgYmVnID0gbWlkO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGVuZCA9IG1pZCAtIDE7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGJlZztcbiAgICAgICAgfVxuXG4gICAgICAgIGZ1bmN0aW9uIF9pbnNlcnQocSwgZGF0YSwgcHJpb3JpdHksIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICBpZiAoY2FsbGJhY2sgIT0gbnVsbCAmJiB0eXBlb2YgY2FsbGJhY2sgIT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcInRhc2sgY2FsbGJhY2sgbXVzdCBiZSBhIGZ1bmN0aW9uXCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcS5zdGFydGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIGlmICghX2lzQXJyYXkoZGF0YSkpIHtcbiAgICAgICAgICAgICAgICBkYXRhID0gW2RhdGFdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYoZGF0YS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgICAvLyBjYWxsIGRyYWluIGltbWVkaWF0ZWx5IGlmIHRoZXJlIGFyZSBubyB0YXNrc1xuICAgICAgICAgICAgICAgIHJldHVybiBhc3luYy5zZXRJbW1lZGlhdGUoZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgICAgIHEuZHJhaW4oKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIF9hcnJheUVhY2goZGF0YSwgZnVuY3Rpb24odGFzaykge1xuICAgICAgICAgICAgICAgIHZhciBpdGVtID0ge1xuICAgICAgICAgICAgICAgICAgICBkYXRhOiB0YXNrLFxuICAgICAgICAgICAgICAgICAgICBwcmlvcml0eTogcHJpb3JpdHksXG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrOiB0eXBlb2YgY2FsbGJhY2sgPT09ICdmdW5jdGlvbicgPyBjYWxsYmFjayA6IG5vb3BcbiAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgcS50YXNrcy5zcGxpY2UoX2JpbmFyeVNlYXJjaChxLnRhc2tzLCBpdGVtLCBfY29tcGFyZVRhc2tzKSArIDEsIDAsIGl0ZW0pO1xuXG4gICAgICAgICAgICAgICAgaWYgKHEudGFza3MubGVuZ3RoID09PSBxLmNvbmN1cnJlbmN5KSB7XG4gICAgICAgICAgICAgICAgICAgIHEuc2F0dXJhdGVkKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGFzeW5jLnNldEltbWVkaWF0ZShxLnByb2Nlc3MpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBTdGFydCB3aXRoIGEgbm9ybWFsIHF1ZXVlXG4gICAgICAgIHZhciBxID0gYXN5bmMucXVldWUod29ya2VyLCBjb25jdXJyZW5jeSk7XG5cbiAgICAgICAgLy8gT3ZlcnJpZGUgcHVzaCB0byBhY2NlcHQgc2Vjb25kIHBhcmFtZXRlciByZXByZXNlbnRpbmcgcHJpb3JpdHlcbiAgICAgICAgcS5wdXNoID0gZnVuY3Rpb24gKGRhdGEsIHByaW9yaXR5LCBjYWxsYmFjaykge1xuICAgICAgICAgICAgX2luc2VydChxLCBkYXRhLCBwcmlvcml0eSwgY2FsbGJhY2spO1xuICAgICAgICB9O1xuXG4gICAgICAgIC8vIFJlbW92ZSB1bnNoaWZ0IGZ1bmN0aW9uXG4gICAgICAgIGRlbGV0ZSBxLnVuc2hpZnQ7XG5cbiAgICAgICAgcmV0dXJuIHE7XG4gICAgfTtcblxuICAgIGFzeW5jLmNhcmdvID0gZnVuY3Rpb24gKHdvcmtlciwgcGF5bG9hZCkge1xuICAgICAgICByZXR1cm4gX3F1ZXVlKHdvcmtlciwgMSwgcGF5bG9hZCk7XG4gICAgfTtcblxuICAgIGZ1bmN0aW9uIF9jb25zb2xlX2ZuKG5hbWUpIHtcbiAgICAgICAgcmV0dXJuIF9yZXN0UGFyYW0oZnVuY3Rpb24gKGZuLCBhcmdzKSB7XG4gICAgICAgICAgICBmbi5hcHBseShudWxsLCBhcmdzLmNvbmNhdChbX3Jlc3RQYXJhbShmdW5jdGlvbiAoZXJyLCBhcmdzKSB7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBjb25zb2xlID09PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoY29uc29sZS5lcnJvcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChjb25zb2xlW25hbWVdKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBfYXJyYXlFYWNoKGFyZ3MsIGZ1bmN0aW9uICh4KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZVtuYW1lXSh4KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSldKSk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBhc3luYy5sb2cgPSBfY29uc29sZV9mbignbG9nJyk7XG4gICAgYXN5bmMuZGlyID0gX2NvbnNvbGVfZm4oJ2RpcicpO1xuICAgIC8qYXN5bmMuaW5mbyA9IF9jb25zb2xlX2ZuKCdpbmZvJyk7XG4gICAgYXN5bmMud2FybiA9IF9jb25zb2xlX2ZuKCd3YXJuJyk7XG4gICAgYXN5bmMuZXJyb3IgPSBfY29uc29sZV9mbignZXJyb3InKTsqL1xuXG4gICAgYXN5bmMubWVtb2l6ZSA9IGZ1bmN0aW9uIChmbiwgaGFzaGVyKSB7XG4gICAgICAgIHZhciBtZW1vID0ge307XG4gICAgICAgIHZhciBxdWV1ZXMgPSB7fTtcbiAgICAgICAgaGFzaGVyID0gaGFzaGVyIHx8IGlkZW50aXR5O1xuICAgICAgICB2YXIgbWVtb2l6ZWQgPSBfcmVzdFBhcmFtKGZ1bmN0aW9uIG1lbW9pemVkKGFyZ3MpIHtcbiAgICAgICAgICAgIHZhciBjYWxsYmFjayA9IGFyZ3MucG9wKCk7XG4gICAgICAgICAgICB2YXIga2V5ID0gaGFzaGVyLmFwcGx5KG51bGwsIGFyZ3MpO1xuICAgICAgICAgICAgaWYgKGtleSBpbiBtZW1vKSB7XG4gICAgICAgICAgICAgICAgYXN5bmMuc2V0SW1tZWRpYXRlKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2suYXBwbHkobnVsbCwgbWVtb1trZXldKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGtleSBpbiBxdWV1ZXMpIHtcbiAgICAgICAgICAgICAgICBxdWV1ZXNba2V5XS5wdXNoKGNhbGxiYWNrKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHF1ZXVlc1trZXldID0gW2NhbGxiYWNrXTtcbiAgICAgICAgICAgICAgICBmbi5hcHBseShudWxsLCBhcmdzLmNvbmNhdChbX3Jlc3RQYXJhbShmdW5jdGlvbiAoYXJncykge1xuICAgICAgICAgICAgICAgICAgICBtZW1vW2tleV0gPSBhcmdzO1xuICAgICAgICAgICAgICAgICAgICB2YXIgcSA9IHF1ZXVlc1trZXldO1xuICAgICAgICAgICAgICAgICAgICBkZWxldGUgcXVldWVzW2tleV07XG4gICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwLCBsID0gcS5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHFbaV0uYXBwbHkobnVsbCwgYXJncyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KV0pKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIG1lbW9pemVkLm1lbW8gPSBtZW1vO1xuICAgICAgICBtZW1vaXplZC51bm1lbW9pemVkID0gZm47XG4gICAgICAgIHJldHVybiBtZW1vaXplZDtcbiAgICB9O1xuXG4gICAgYXN5bmMudW5tZW1vaXplID0gZnVuY3Rpb24gKGZuKSB7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gKGZuLnVubWVtb2l6ZWQgfHwgZm4pLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7XG4gICAgICAgIH07XG4gICAgfTtcblxuICAgIGZ1bmN0aW9uIF90aW1lcyhtYXBwZXIpIHtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChjb3VudCwgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICBtYXBwZXIoX3JhbmdlKGNvdW50KSwgaXRlcmF0b3IsIGNhbGxiYWNrKTtcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBhc3luYy50aW1lcyA9IF90aW1lcyhhc3luYy5tYXApO1xuICAgIGFzeW5jLnRpbWVzU2VyaWVzID0gX3RpbWVzKGFzeW5jLm1hcFNlcmllcyk7XG4gICAgYXN5bmMudGltZXNMaW1pdCA9IGZ1bmN0aW9uIChjb3VudCwgbGltaXQsIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICByZXR1cm4gYXN5bmMubWFwTGltaXQoX3JhbmdlKGNvdW50KSwgbGltaXQsIGl0ZXJhdG9yLCBjYWxsYmFjayk7XG4gICAgfTtcblxuICAgIGFzeW5jLnNlcSA9IGZ1bmN0aW9uICgvKiBmdW5jdGlvbnMuLi4gKi8pIHtcbiAgICAgICAgdmFyIGZucyA9IGFyZ3VtZW50cztcbiAgICAgICAgcmV0dXJuIF9yZXN0UGFyYW0oZnVuY3Rpb24gKGFyZ3MpIHtcbiAgICAgICAgICAgIHZhciB0aGF0ID0gdGhpcztcblxuICAgICAgICAgICAgdmFyIGNhbGxiYWNrID0gYXJnc1thcmdzLmxlbmd0aCAtIDFdO1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBjYWxsYmFjayA9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgYXJncy5wb3AoKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2sgPSBub29wO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBhc3luYy5yZWR1Y2UoZm5zLCBhcmdzLCBmdW5jdGlvbiAobmV3YXJncywgZm4sIGNiKSB7XG4gICAgICAgICAgICAgICAgZm4uYXBwbHkodGhhdCwgbmV3YXJncy5jb25jYXQoW19yZXN0UGFyYW0oZnVuY3Rpb24gKGVyciwgbmV4dGFyZ3MpIHtcbiAgICAgICAgICAgICAgICAgICAgY2IoZXJyLCBuZXh0YXJncyk7XG4gICAgICAgICAgICAgICAgfSldKSk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZnVuY3Rpb24gKGVyciwgcmVzdWx0cykge1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrLmFwcGx5KHRoYXQsIFtlcnJdLmNvbmNhdChyZXN1bHRzKSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfTtcblxuICAgIGFzeW5jLmNvbXBvc2UgPSBmdW5jdGlvbiAoLyogZnVuY3Rpb25zLi4uICovKSB7XG4gICAgICAgIHJldHVybiBhc3luYy5zZXEuYXBwbHkobnVsbCwgQXJyYXkucHJvdG90eXBlLnJldmVyc2UuY2FsbChhcmd1bWVudHMpKTtcbiAgICB9O1xuXG5cbiAgICBmdW5jdGlvbiBfYXBwbHlFYWNoKGVhY2hmbikge1xuICAgICAgICByZXR1cm4gX3Jlc3RQYXJhbShmdW5jdGlvbihmbnMsIGFyZ3MpIHtcbiAgICAgICAgICAgIHZhciBnbyA9IF9yZXN0UGFyYW0oZnVuY3Rpb24oYXJncykge1xuICAgICAgICAgICAgICAgIHZhciB0aGF0ID0gdGhpcztcbiAgICAgICAgICAgICAgICB2YXIgY2FsbGJhY2sgPSBhcmdzLnBvcCgpO1xuICAgICAgICAgICAgICAgIHJldHVybiBlYWNoZm4oZm5zLCBmdW5jdGlvbiAoZm4sIF8sIGNiKSB7XG4gICAgICAgICAgICAgICAgICAgIGZuLmFwcGx5KHRoYXQsIGFyZ3MuY29uY2F0KFtjYl0pKTtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIGNhbGxiYWNrKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgaWYgKGFyZ3MubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGdvLmFwcGx5KHRoaXMsIGFyZ3MpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGdvO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBhc3luYy5hcHBseUVhY2ggPSBfYXBwbHlFYWNoKGFzeW5jLmVhY2hPZik7XG4gICAgYXN5bmMuYXBwbHlFYWNoU2VyaWVzID0gX2FwcGx5RWFjaChhc3luYy5lYWNoT2ZTZXJpZXMpO1xuXG5cbiAgICBhc3luYy5mb3JldmVyID0gZnVuY3Rpb24gKGZuLCBjYWxsYmFjaykge1xuICAgICAgICB2YXIgZG9uZSA9IG9ubHlfb25jZShjYWxsYmFjayB8fCBub29wKTtcbiAgICAgICAgdmFyIHRhc2sgPSBlbnN1cmVBc3luYyhmbik7XG4gICAgICAgIGZ1bmN0aW9uIG5leHQoZXJyKSB7XG4gICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGRvbmUoZXJyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRhc2sobmV4dCk7XG4gICAgICAgIH1cbiAgICAgICAgbmV4dCgpO1xuICAgIH07XG5cbiAgICBmdW5jdGlvbiBlbnN1cmVBc3luYyhmbikge1xuICAgICAgICByZXR1cm4gX3Jlc3RQYXJhbShmdW5jdGlvbiAoYXJncykge1xuICAgICAgICAgICAgdmFyIGNhbGxiYWNrID0gYXJncy5wb3AoKTtcbiAgICAgICAgICAgIGFyZ3MucHVzaChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgdmFyIGlubmVyQXJncyA9IGFyZ3VtZW50cztcbiAgICAgICAgICAgICAgICBpZiAoc3luYykge1xuICAgICAgICAgICAgICAgICAgICBhc3luYy5zZXRJbW1lZGlhdGUoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2suYXBwbHkobnVsbCwgaW5uZXJBcmdzKTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2suYXBwbHkobnVsbCwgaW5uZXJBcmdzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHZhciBzeW5jID0gdHJ1ZTtcbiAgICAgICAgICAgIGZuLmFwcGx5KHRoaXMsIGFyZ3MpO1xuICAgICAgICAgICAgc3luYyA9IGZhbHNlO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBhc3luYy5lbnN1cmVBc3luYyA9IGVuc3VyZUFzeW5jO1xuXG4gICAgYXN5bmMuY29uc3RhbnQgPSBfcmVzdFBhcmFtKGZ1bmN0aW9uKHZhbHVlcykge1xuICAgICAgICB2YXIgYXJncyA9IFtudWxsXS5jb25jYXQodmFsdWVzKTtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChjYWxsYmFjaykge1xuICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrLmFwcGx5KHRoaXMsIGFyZ3MpO1xuICAgICAgICB9O1xuICAgIH0pO1xuXG4gICAgYXN5bmMud3JhcFN5bmMgPVxuICAgIGFzeW5jLmFzeW5jaWZ5ID0gZnVuY3Rpb24gYXN5bmNpZnkoZnVuYykge1xuICAgICAgICByZXR1cm4gX3Jlc3RQYXJhbShmdW5jdGlvbiAoYXJncykge1xuICAgICAgICAgICAgdmFyIGNhbGxiYWNrID0gYXJncy5wb3AoKTtcbiAgICAgICAgICAgIHZhciByZXN1bHQ7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIHJlc3VsdCA9IGZ1bmMuYXBwbHkodGhpcywgYXJncyk7XG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gaWYgcmVzdWx0IGlzIFByb21pc2Ugb2JqZWN0XG4gICAgICAgICAgICBpZiAoX2lzT2JqZWN0KHJlc3VsdCkgJiYgdHlwZW9mIHJlc3VsdC50aGVuID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgICAgICAgICByZXN1bHQudGhlbihmdW5jdGlvbih2YWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhudWxsLCB2YWx1ZSk7XG4gICAgICAgICAgICAgICAgfSlbXCJjYXRjaFwiXShmdW5jdGlvbihlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soZXJyLm1lc3NhZ2UgPyBlcnIgOiBuZXcgRXJyb3IoZXJyKSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrKG51bGwsIHJlc3VsdCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH07XG5cbiAgICAvLyBOb2RlLmpzXG4gICAgaWYgKHR5cGVvZiBtb2R1bGUgPT09ICdvYmplY3QnICYmIG1vZHVsZS5leHBvcnRzKSB7XG4gICAgICAgIG1vZHVsZS5leHBvcnRzID0gYXN5bmM7XG4gICAgfVxuICAgIC8vIEFNRCAvIFJlcXVpcmVKU1xuICAgIGVsc2UgaWYgKHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCkge1xuICAgICAgICBkZWZpbmUoW10sIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiBhc3luYztcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8vIGluY2x1ZGVkIGRpcmVjdGx5IHZpYSA8c2NyaXB0PiB0YWdcbiAgICBlbHNlIHtcbiAgICAgICAgcm9vdC5hc3luYyA9IGFzeW5jO1xuICAgIH1cblxufSgpKTtcbiIsIi8vIENvcHlyaWdodCBKb3llbnQsIEluYy4gYW5kIG90aGVyIE5vZGUgY29udHJpYnV0b3JzLlxuLy9cbi8vIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhXG4vLyBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlXG4vLyBcIlNvZnR3YXJlXCIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmdcbi8vIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCxcbi8vIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXRcbi8vIHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZVxuLy8gZm9sbG93aW5nIGNvbmRpdGlvbnM6XG4vL1xuLy8gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWRcbi8vIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuLy9cbi8vIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1Ncbi8vIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0Zcbi8vIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU5cbi8vIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLFxuLy8gREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SXG4vLyBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFXG4vLyBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLlxuXG4vLyByZXNvbHZlcyAuIGFuZCAuLiBlbGVtZW50cyBpbiBhIHBhdGggYXJyYXkgd2l0aCBkaXJlY3RvcnkgbmFtZXMgdGhlcmVcbi8vIG11c3QgYmUgbm8gc2xhc2hlcywgZW1wdHkgZWxlbWVudHMsIG9yIGRldmljZSBuYW1lcyAoYzpcXCkgaW4gdGhlIGFycmF5XG4vLyAoc28gYWxzbyBubyBsZWFkaW5nIGFuZCB0cmFpbGluZyBzbGFzaGVzIC0gaXQgZG9lcyBub3QgZGlzdGluZ3Vpc2hcbi8vIHJlbGF0aXZlIGFuZCBhYnNvbHV0ZSBwYXRocylcbmZ1bmN0aW9uIG5vcm1hbGl6ZUFycmF5KHBhcnRzLCBhbGxvd0Fib3ZlUm9vdCkge1xuICAvLyBpZiB0aGUgcGF0aCB0cmllcyB0byBnbyBhYm92ZSB0aGUgcm9vdCwgYHVwYCBlbmRzIHVwID4gMFxuICB2YXIgdXAgPSAwO1xuICBmb3IgKHZhciBpID0gcGFydHMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICB2YXIgbGFzdCA9IHBhcnRzW2ldO1xuICAgIGlmIChsYXN0ID09PSAnLicpIHtcbiAgICAgIHBhcnRzLnNwbGljZShpLCAxKTtcbiAgICB9IGVsc2UgaWYgKGxhc3QgPT09ICcuLicpIHtcbiAgICAgIHBhcnRzLnNwbGljZShpLCAxKTtcbiAgICAgIHVwKys7XG4gICAgfSBlbHNlIGlmICh1cCkge1xuICAgICAgcGFydHMuc3BsaWNlKGksIDEpO1xuICAgICAgdXAtLTtcbiAgICB9XG4gIH1cblxuICAvLyBpZiB0aGUgcGF0aCBpcyBhbGxvd2VkIHRvIGdvIGFib3ZlIHRoZSByb290LCByZXN0b3JlIGxlYWRpbmcgLi5zXG4gIGlmIChhbGxvd0Fib3ZlUm9vdCkge1xuICAgIGZvciAoOyB1cC0tOyB1cCkge1xuICAgICAgcGFydHMudW5zaGlmdCgnLi4nKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gcGFydHM7XG59XG5cbi8vIFNwbGl0IGEgZmlsZW5hbWUgaW50byBbcm9vdCwgZGlyLCBiYXNlbmFtZSwgZXh0XSwgdW5peCB2ZXJzaW9uXG4vLyAncm9vdCcgaXMganVzdCBhIHNsYXNoLCBvciBub3RoaW5nLlxudmFyIHNwbGl0UGF0aFJlID1cbiAgICAvXihcXC8/fCkoW1xcc1xcU10qPykoKD86XFwuezEsMn18W15cXC9dKz98KShcXC5bXi5cXC9dKnwpKSg/OltcXC9dKikkLztcbnZhciBzcGxpdFBhdGggPSBmdW5jdGlvbihmaWxlbmFtZSkge1xuICByZXR1cm4gc3BsaXRQYXRoUmUuZXhlYyhmaWxlbmFtZSkuc2xpY2UoMSk7XG59O1xuXG4vLyBwYXRoLnJlc29sdmUoW2Zyb20gLi4uXSwgdG8pXG4vLyBwb3NpeCB2ZXJzaW9uXG5leHBvcnRzLnJlc29sdmUgPSBmdW5jdGlvbigpIHtcbiAgdmFyIHJlc29sdmVkUGF0aCA9ICcnLFxuICAgICAgcmVzb2x2ZWRBYnNvbHV0ZSA9IGZhbHNlO1xuXG4gIGZvciAodmFyIGkgPSBhcmd1bWVudHMubGVuZ3RoIC0gMTsgaSA+PSAtMSAmJiAhcmVzb2x2ZWRBYnNvbHV0ZTsgaS0tKSB7XG4gICAgdmFyIHBhdGggPSAoaSA+PSAwKSA/IGFyZ3VtZW50c1tpXSA6IHByb2Nlc3MuY3dkKCk7XG5cbiAgICAvLyBTa2lwIGVtcHR5IGFuZCBpbnZhbGlkIGVudHJpZXNcbiAgICBpZiAodHlwZW9mIHBhdGggIT09ICdzdHJpbmcnKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdBcmd1bWVudHMgdG8gcGF0aC5yZXNvbHZlIG11c3QgYmUgc3RyaW5ncycpO1xuICAgIH0gZWxzZSBpZiAoIXBhdGgpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIHJlc29sdmVkUGF0aCA9IHBhdGggKyAnLycgKyByZXNvbHZlZFBhdGg7XG4gICAgcmVzb2x2ZWRBYnNvbHV0ZSA9IHBhdGguY2hhckF0KDApID09PSAnLyc7XG4gIH1cblxuICAvLyBBdCB0aGlzIHBvaW50IHRoZSBwYXRoIHNob3VsZCBiZSByZXNvbHZlZCB0byBhIGZ1bGwgYWJzb2x1dGUgcGF0aCwgYnV0XG4gIC8vIGhhbmRsZSByZWxhdGl2ZSBwYXRocyB0byBiZSBzYWZlIChtaWdodCBoYXBwZW4gd2hlbiBwcm9jZXNzLmN3ZCgpIGZhaWxzKVxuXG4gIC8vIE5vcm1hbGl6ZSB0aGUgcGF0aFxuICByZXNvbHZlZFBhdGggPSBub3JtYWxpemVBcnJheShmaWx0ZXIocmVzb2x2ZWRQYXRoLnNwbGl0KCcvJyksIGZ1bmN0aW9uKHApIHtcbiAgICByZXR1cm4gISFwO1xuICB9KSwgIXJlc29sdmVkQWJzb2x1dGUpLmpvaW4oJy8nKTtcblxuICByZXR1cm4gKChyZXNvbHZlZEFic29sdXRlID8gJy8nIDogJycpICsgcmVzb2x2ZWRQYXRoKSB8fCAnLic7XG59O1xuXG4vLyBwYXRoLm5vcm1hbGl6ZShwYXRoKVxuLy8gcG9zaXggdmVyc2lvblxuZXhwb3J0cy5ub3JtYWxpemUgPSBmdW5jdGlvbihwYXRoKSB7XG4gIHZhciBpc0Fic29sdXRlID0gZXhwb3J0cy5pc0Fic29sdXRlKHBhdGgpLFxuICAgICAgdHJhaWxpbmdTbGFzaCA9IHN1YnN0cihwYXRoLCAtMSkgPT09ICcvJztcblxuICAvLyBOb3JtYWxpemUgdGhlIHBhdGhcbiAgcGF0aCA9IG5vcm1hbGl6ZUFycmF5KGZpbHRlcihwYXRoLnNwbGl0KCcvJyksIGZ1bmN0aW9uKHApIHtcbiAgICByZXR1cm4gISFwO1xuICB9KSwgIWlzQWJzb2x1dGUpLmpvaW4oJy8nKTtcblxuICBpZiAoIXBhdGggJiYgIWlzQWJzb2x1dGUpIHtcbiAgICBwYXRoID0gJy4nO1xuICB9XG4gIGlmIChwYXRoICYmIHRyYWlsaW5nU2xhc2gpIHtcbiAgICBwYXRoICs9ICcvJztcbiAgfVxuXG4gIHJldHVybiAoaXNBYnNvbHV0ZSA/ICcvJyA6ICcnKSArIHBhdGg7XG59O1xuXG4vLyBwb3NpeCB2ZXJzaW9uXG5leHBvcnRzLmlzQWJzb2x1dGUgPSBmdW5jdGlvbihwYXRoKSB7XG4gIHJldHVybiBwYXRoLmNoYXJBdCgwKSA9PT0gJy8nO1xufTtcblxuLy8gcG9zaXggdmVyc2lvblxuZXhwb3J0cy5qb2luID0gZnVuY3Rpb24oKSB7XG4gIHZhciBwYXRocyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMCk7XG4gIHJldHVybiBleHBvcnRzLm5vcm1hbGl6ZShmaWx0ZXIocGF0aHMsIGZ1bmN0aW9uKHAsIGluZGV4KSB7XG4gICAgaWYgKHR5cGVvZiBwICE9PSAnc3RyaW5nJykge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignQXJndW1lbnRzIHRvIHBhdGguam9pbiBtdXN0IGJlIHN0cmluZ3MnKTtcbiAgICB9XG4gICAgcmV0dXJuIHA7XG4gIH0pLmpvaW4oJy8nKSk7XG59O1xuXG5cbi8vIHBhdGgucmVsYXRpdmUoZnJvbSwgdG8pXG4vLyBwb3NpeCB2ZXJzaW9uXG5leHBvcnRzLnJlbGF0aXZlID0gZnVuY3Rpb24oZnJvbSwgdG8pIHtcbiAgZnJvbSA9IGV4cG9ydHMucmVzb2x2ZShmcm9tKS5zdWJzdHIoMSk7XG4gIHRvID0gZXhwb3J0cy5yZXNvbHZlKHRvKS5zdWJzdHIoMSk7XG5cbiAgZnVuY3Rpb24gdHJpbShhcnIpIHtcbiAgICB2YXIgc3RhcnQgPSAwO1xuICAgIGZvciAoOyBzdGFydCA8IGFyci5sZW5ndGg7IHN0YXJ0KyspIHtcbiAgICAgIGlmIChhcnJbc3RhcnRdICE9PSAnJykgYnJlYWs7XG4gICAgfVxuXG4gICAgdmFyIGVuZCA9IGFyci5sZW5ndGggLSAxO1xuICAgIGZvciAoOyBlbmQgPj0gMDsgZW5kLS0pIHtcbiAgICAgIGlmIChhcnJbZW5kXSAhPT0gJycpIGJyZWFrO1xuICAgIH1cblxuICAgIGlmIChzdGFydCA+IGVuZCkgcmV0dXJuIFtdO1xuICAgIHJldHVybiBhcnIuc2xpY2Uoc3RhcnQsIGVuZCAtIHN0YXJ0ICsgMSk7XG4gIH1cblxuICB2YXIgZnJvbVBhcnRzID0gdHJpbShmcm9tLnNwbGl0KCcvJykpO1xuICB2YXIgdG9QYXJ0cyA9IHRyaW0odG8uc3BsaXQoJy8nKSk7XG5cbiAgdmFyIGxlbmd0aCA9IE1hdGgubWluKGZyb21QYXJ0cy5sZW5ndGgsIHRvUGFydHMubGVuZ3RoKTtcbiAgdmFyIHNhbWVQYXJ0c0xlbmd0aCA9IGxlbmd0aDtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgIGlmIChmcm9tUGFydHNbaV0gIT09IHRvUGFydHNbaV0pIHtcbiAgICAgIHNhbWVQYXJ0c0xlbmd0aCA9IGk7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICB2YXIgb3V0cHV0UGFydHMgPSBbXTtcbiAgZm9yICh2YXIgaSA9IHNhbWVQYXJ0c0xlbmd0aDsgaSA8IGZyb21QYXJ0cy5sZW5ndGg7IGkrKykge1xuICAgIG91dHB1dFBhcnRzLnB1c2goJy4uJyk7XG4gIH1cblxuICBvdXRwdXRQYXJ0cyA9IG91dHB1dFBhcnRzLmNvbmNhdCh0b1BhcnRzLnNsaWNlKHNhbWVQYXJ0c0xlbmd0aCkpO1xuXG4gIHJldHVybiBvdXRwdXRQYXJ0cy5qb2luKCcvJyk7XG59O1xuXG5leHBvcnRzLnNlcCA9ICcvJztcbmV4cG9ydHMuZGVsaW1pdGVyID0gJzonO1xuXG5leHBvcnRzLmRpcm5hbWUgPSBmdW5jdGlvbihwYXRoKSB7XG4gIHZhciByZXN1bHQgPSBzcGxpdFBhdGgocGF0aCksXG4gICAgICByb290ID0gcmVzdWx0WzBdLFxuICAgICAgZGlyID0gcmVzdWx0WzFdO1xuXG4gIGlmICghcm9vdCAmJiAhZGlyKSB7XG4gICAgLy8gTm8gZGlybmFtZSB3aGF0c29ldmVyXG4gICAgcmV0dXJuICcuJztcbiAgfVxuXG4gIGlmIChkaXIpIHtcbiAgICAvLyBJdCBoYXMgYSBkaXJuYW1lLCBzdHJpcCB0cmFpbGluZyBzbGFzaFxuICAgIGRpciA9IGRpci5zdWJzdHIoMCwgZGlyLmxlbmd0aCAtIDEpO1xuICB9XG5cbiAgcmV0dXJuIHJvb3QgKyBkaXI7XG59O1xuXG5cbmV4cG9ydHMuYmFzZW5hbWUgPSBmdW5jdGlvbihwYXRoLCBleHQpIHtcbiAgdmFyIGYgPSBzcGxpdFBhdGgocGF0aClbMl07XG4gIC8vIFRPRE86IG1ha2UgdGhpcyBjb21wYXJpc29uIGNhc2UtaW5zZW5zaXRpdmUgb24gd2luZG93cz9cbiAgaWYgKGV4dCAmJiBmLnN1YnN0cigtMSAqIGV4dC5sZW5ndGgpID09PSBleHQpIHtcbiAgICBmID0gZi5zdWJzdHIoMCwgZi5sZW5ndGggLSBleHQubGVuZ3RoKTtcbiAgfVxuICByZXR1cm4gZjtcbn07XG5cblxuZXhwb3J0cy5leHRuYW1lID0gZnVuY3Rpb24ocGF0aCkge1xuICByZXR1cm4gc3BsaXRQYXRoKHBhdGgpWzNdO1xufTtcblxuZnVuY3Rpb24gZmlsdGVyICh4cywgZikge1xuICAgIGlmICh4cy5maWx0ZXIpIHJldHVybiB4cy5maWx0ZXIoZik7XG4gICAgdmFyIHJlcyA9IFtdO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgeHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgaWYgKGYoeHNbaV0sIGksIHhzKSkgcmVzLnB1c2goeHNbaV0pO1xuICAgIH1cbiAgICByZXR1cm4gcmVzO1xufVxuXG4vLyBTdHJpbmcucHJvdG90eXBlLnN1YnN0ciAtIG5lZ2F0aXZlIGluZGV4IGRvbid0IHdvcmsgaW4gSUU4XG52YXIgc3Vic3RyID0gJ2FiJy5zdWJzdHIoLTEpID09PSAnYidcbiAgICA/IGZ1bmN0aW9uIChzdHIsIHN0YXJ0LCBsZW4pIHsgcmV0dXJuIHN0ci5zdWJzdHIoc3RhcnQsIGxlbikgfVxuICAgIDogZnVuY3Rpb24gKHN0ciwgc3RhcnQsIGxlbikge1xuICAgICAgICBpZiAoc3RhcnQgPCAwKSBzdGFydCA9IHN0ci5sZW5ndGggKyBzdGFydDtcbiAgICAgICAgcmV0dXJuIHN0ci5zdWJzdHIoc3RhcnQsIGxlbik7XG4gICAgfVxuO1xuIiwiLy8gc2hpbSBmb3IgdXNpbmcgcHJvY2VzcyBpbiBicm93c2VyXG5cbnZhciBwcm9jZXNzID0gbW9kdWxlLmV4cG9ydHMgPSB7fTtcbnZhciBxdWV1ZSA9IFtdO1xudmFyIGRyYWluaW5nID0gZmFsc2U7XG52YXIgY3VycmVudFF1ZXVlO1xudmFyIHF1ZXVlSW5kZXggPSAtMTtcblxuZnVuY3Rpb24gY2xlYW5VcE5leHRUaWNrKCkge1xuICAgIGRyYWluaW5nID0gZmFsc2U7XG4gICAgaWYgKGN1cnJlbnRRdWV1ZS5sZW5ndGgpIHtcbiAgICAgICAgcXVldWUgPSBjdXJyZW50UXVldWUuY29uY2F0KHF1ZXVlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICBxdWV1ZUluZGV4ID0gLTE7XG4gICAgfVxuICAgIGlmIChxdWV1ZS5sZW5ndGgpIHtcbiAgICAgICAgZHJhaW5RdWV1ZSgpO1xuICAgIH1cbn1cblxuZnVuY3Rpb24gZHJhaW5RdWV1ZSgpIHtcbiAgICBpZiAoZHJhaW5pbmcpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB2YXIgdGltZW91dCA9IHNldFRpbWVvdXQoY2xlYW5VcE5leHRUaWNrKTtcbiAgICBkcmFpbmluZyA9IHRydWU7XG5cbiAgICB2YXIgbGVuID0gcXVldWUubGVuZ3RoO1xuICAgIHdoaWxlKGxlbikge1xuICAgICAgICBjdXJyZW50UXVldWUgPSBxdWV1ZTtcbiAgICAgICAgcXVldWUgPSBbXTtcbiAgICAgICAgd2hpbGUgKCsrcXVldWVJbmRleCA8IGxlbikge1xuICAgICAgICAgICAgaWYgKGN1cnJlbnRRdWV1ZSkge1xuICAgICAgICAgICAgICAgIGN1cnJlbnRRdWV1ZVtxdWV1ZUluZGV4XS5ydW4oKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBxdWV1ZUluZGV4ID0gLTE7XG4gICAgICAgIGxlbiA9IHF1ZXVlLmxlbmd0aDtcbiAgICB9XG4gICAgY3VycmVudFF1ZXVlID0gbnVsbDtcbiAgICBkcmFpbmluZyA9IGZhbHNlO1xuICAgIGNsZWFyVGltZW91dCh0aW1lb3V0KTtcbn1cblxucHJvY2Vzcy5uZXh0VGljayA9IGZ1bmN0aW9uIChmdW4pIHtcbiAgICB2YXIgYXJncyA9IG5ldyBBcnJheShhcmd1bWVudHMubGVuZ3RoIC0gMSk7XG4gICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPiAxKSB7XG4gICAgICAgIGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBhcmdzW2kgLSAxXSA9IGFyZ3VtZW50c1tpXTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBxdWV1ZS5wdXNoKG5ldyBJdGVtKGZ1biwgYXJncykpO1xuICAgIGlmIChxdWV1ZS5sZW5ndGggPT09IDEgJiYgIWRyYWluaW5nKSB7XG4gICAgICAgIHNldFRpbWVvdXQoZHJhaW5RdWV1ZSwgMCk7XG4gICAgfVxufTtcblxuLy8gdjggbGlrZXMgcHJlZGljdGlibGUgb2JqZWN0c1xuZnVuY3Rpb24gSXRlbShmdW4sIGFycmF5KSB7XG4gICAgdGhpcy5mdW4gPSBmdW47XG4gICAgdGhpcy5hcnJheSA9IGFycmF5O1xufVxuSXRlbS5wcm90b3R5cGUucnVuID0gZnVuY3Rpb24gKCkge1xuICAgIHRoaXMuZnVuLmFwcGx5KG51bGwsIHRoaXMuYXJyYXkpO1xufTtcbnByb2Nlc3MudGl0bGUgPSAnYnJvd3Nlcic7XG5wcm9jZXNzLmJyb3dzZXIgPSB0cnVlO1xucHJvY2Vzcy5lbnYgPSB7fTtcbnByb2Nlc3MuYXJndiA9IFtdO1xucHJvY2Vzcy52ZXJzaW9uID0gJyc7IC8vIGVtcHR5IHN0cmluZyB0byBhdm9pZCByZWdleHAgaXNzdWVzXG5wcm9jZXNzLnZlcnNpb25zID0ge307XG5cbmZ1bmN0aW9uIG5vb3AoKSB7fVxuXG5wcm9jZXNzLm9uID0gbm9vcDtcbnByb2Nlc3MuYWRkTGlzdGVuZXIgPSBub29wO1xucHJvY2Vzcy5vbmNlID0gbm9vcDtcbnByb2Nlc3Mub2ZmID0gbm9vcDtcbnByb2Nlc3MucmVtb3ZlTGlzdGVuZXIgPSBub29wO1xucHJvY2Vzcy5yZW1vdmVBbGxMaXN0ZW5lcnMgPSBub29wO1xucHJvY2Vzcy5lbWl0ID0gbm9vcDtcblxucHJvY2Vzcy5iaW5kaW5nID0gZnVuY3Rpb24gKG5hbWUpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3Byb2Nlc3MuYmluZGluZyBpcyBub3Qgc3VwcG9ydGVkJyk7XG59O1xuXG5wcm9jZXNzLmN3ZCA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuICcvJyB9O1xucHJvY2Vzcy5jaGRpciA9IGZ1bmN0aW9uIChkaXIpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3Byb2Nlc3MuY2hkaXIgaXMgbm90IHN1cHBvcnRlZCcpO1xufTtcbnByb2Nlc3MudW1hc2sgPSBmdW5jdGlvbigpIHsgcmV0dXJuIDA7IH07XG4iLCIvKiEgaHR0cHM6Ly9tdGhzLmJlL3B1bnljb2RlIHYxLjQuMCBieSBAbWF0aGlhcyAqL1xuOyhmdW5jdGlvbihyb290KSB7XG5cblx0LyoqIERldGVjdCBmcmVlIHZhcmlhYmxlcyAqL1xuXHR2YXIgZnJlZUV4cG9ydHMgPSB0eXBlb2YgZXhwb3J0cyA9PSAnb2JqZWN0JyAmJiBleHBvcnRzICYmXG5cdFx0IWV4cG9ydHMubm9kZVR5cGUgJiYgZXhwb3J0cztcblx0dmFyIGZyZWVNb2R1bGUgPSB0eXBlb2YgbW9kdWxlID09ICdvYmplY3QnICYmIG1vZHVsZSAmJlxuXHRcdCFtb2R1bGUubm9kZVR5cGUgJiYgbW9kdWxlO1xuXHR2YXIgZnJlZUdsb2JhbCA9IHR5cGVvZiBnbG9iYWwgPT0gJ29iamVjdCcgJiYgZ2xvYmFsO1xuXHRpZiAoXG5cdFx0ZnJlZUdsb2JhbC5nbG9iYWwgPT09IGZyZWVHbG9iYWwgfHxcblx0XHRmcmVlR2xvYmFsLndpbmRvdyA9PT0gZnJlZUdsb2JhbCB8fFxuXHRcdGZyZWVHbG9iYWwuc2VsZiA9PT0gZnJlZUdsb2JhbFxuXHQpIHtcblx0XHRyb290ID0gZnJlZUdsb2JhbDtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGUgYHB1bnljb2RlYCBvYmplY3QuXG5cdCAqIEBuYW1lIHB1bnljb2RlXG5cdCAqIEB0eXBlIE9iamVjdFxuXHQgKi9cblx0dmFyIHB1bnljb2RlLFxuXG5cdC8qKiBIaWdoZXN0IHBvc2l0aXZlIHNpZ25lZCAzMi1iaXQgZmxvYXQgdmFsdWUgKi9cblx0bWF4SW50ID0gMjE0NzQ4MzY0NywgLy8gYWthLiAweDdGRkZGRkZGIG9yIDJeMzEtMVxuXG5cdC8qKiBCb290c3RyaW5nIHBhcmFtZXRlcnMgKi9cblx0YmFzZSA9IDM2LFxuXHR0TWluID0gMSxcblx0dE1heCA9IDI2LFxuXHRza2V3ID0gMzgsXG5cdGRhbXAgPSA3MDAsXG5cdGluaXRpYWxCaWFzID0gNzIsXG5cdGluaXRpYWxOID0gMTI4LCAvLyAweDgwXG5cdGRlbGltaXRlciA9ICctJywgLy8gJ1xceDJEJ1xuXG5cdC8qKiBSZWd1bGFyIGV4cHJlc3Npb25zICovXG5cdHJlZ2V4UHVueWNvZGUgPSAvXnhuLS0vLFxuXHRyZWdleE5vbkFTQ0lJID0gL1teXFx4MjAtXFx4N0VdLywgLy8gdW5wcmludGFibGUgQVNDSUkgY2hhcnMgKyBub24tQVNDSUkgY2hhcnNcblx0cmVnZXhTZXBhcmF0b3JzID0gL1tcXHgyRVxcdTMwMDJcXHVGRjBFXFx1RkY2MV0vZywgLy8gUkZDIDM0OTAgc2VwYXJhdG9yc1xuXG5cdC8qKiBFcnJvciBtZXNzYWdlcyAqL1xuXHRlcnJvcnMgPSB7XG5cdFx0J292ZXJmbG93JzogJ092ZXJmbG93OiBpbnB1dCBuZWVkcyB3aWRlciBpbnRlZ2VycyB0byBwcm9jZXNzJyxcblx0XHQnbm90LWJhc2ljJzogJ0lsbGVnYWwgaW5wdXQgPj0gMHg4MCAobm90IGEgYmFzaWMgY29kZSBwb2ludCknLFxuXHRcdCdpbnZhbGlkLWlucHV0JzogJ0ludmFsaWQgaW5wdXQnXG5cdH0sXG5cblx0LyoqIENvbnZlbmllbmNlIHNob3J0Y3V0cyAqL1xuXHRiYXNlTWludXNUTWluID0gYmFzZSAtIHRNaW4sXG5cdGZsb29yID0gTWF0aC5mbG9vcixcblx0c3RyaW5nRnJvbUNoYXJDb2RlID0gU3RyaW5nLmZyb21DaGFyQ29kZSxcblxuXHQvKiogVGVtcG9yYXJ5IHZhcmlhYmxlICovXG5cdGtleTtcblxuXHQvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cblxuXHQvKipcblx0ICogQSBnZW5lcmljIGVycm9yIHV0aWxpdHkgZnVuY3Rpb24uXG5cdCAqIEBwcml2YXRlXG5cdCAqIEBwYXJhbSB7U3RyaW5nfSB0eXBlIFRoZSBlcnJvciB0eXBlLlxuXHQgKiBAcmV0dXJucyB7RXJyb3J9IFRocm93cyBhIGBSYW5nZUVycm9yYCB3aXRoIHRoZSBhcHBsaWNhYmxlIGVycm9yIG1lc3NhZ2UuXG5cdCAqL1xuXHRmdW5jdGlvbiBlcnJvcih0eXBlKSB7XG5cdFx0dGhyb3cgbmV3IFJhbmdlRXJyb3IoZXJyb3JzW3R5cGVdKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBBIGdlbmVyaWMgYEFycmF5I21hcGAgdXRpbGl0eSBmdW5jdGlvbi5cblx0ICogQHByaXZhdGVcblx0ICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIGl0ZXJhdGUgb3Zlci5cblx0ICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2sgVGhlIGZ1bmN0aW9uIHRoYXQgZ2V0cyBjYWxsZWQgZm9yIGV2ZXJ5IGFycmF5XG5cdCAqIGl0ZW0uXG5cdCAqIEByZXR1cm5zIHtBcnJheX0gQSBuZXcgYXJyYXkgb2YgdmFsdWVzIHJldHVybmVkIGJ5IHRoZSBjYWxsYmFjayBmdW5jdGlvbi5cblx0ICovXG5cdGZ1bmN0aW9uIG1hcChhcnJheSwgZm4pIHtcblx0XHR2YXIgbGVuZ3RoID0gYXJyYXkubGVuZ3RoO1xuXHRcdHZhciByZXN1bHQgPSBbXTtcblx0XHR3aGlsZSAobGVuZ3RoLS0pIHtcblx0XHRcdHJlc3VsdFtsZW5ndGhdID0gZm4oYXJyYXlbbGVuZ3RoXSk7XG5cdFx0fVxuXHRcdHJldHVybiByZXN1bHQ7XG5cdH1cblxuXHQvKipcblx0ICogQSBzaW1wbGUgYEFycmF5I21hcGAtbGlrZSB3cmFwcGVyIHRvIHdvcmsgd2l0aCBkb21haW4gbmFtZSBzdHJpbmdzIG9yIGVtYWlsXG5cdCAqIGFkZHJlc3Nlcy5cblx0ICogQHByaXZhdGVcblx0ICogQHBhcmFtIHtTdHJpbmd9IGRvbWFpbiBUaGUgZG9tYWluIG5hbWUgb3IgZW1haWwgYWRkcmVzcy5cblx0ICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2sgVGhlIGZ1bmN0aW9uIHRoYXQgZ2V0cyBjYWxsZWQgZm9yIGV2ZXJ5XG5cdCAqIGNoYXJhY3Rlci5cblx0ICogQHJldHVybnMge0FycmF5fSBBIG5ldyBzdHJpbmcgb2YgY2hhcmFjdGVycyByZXR1cm5lZCBieSB0aGUgY2FsbGJhY2tcblx0ICogZnVuY3Rpb24uXG5cdCAqL1xuXHRmdW5jdGlvbiBtYXBEb21haW4oc3RyaW5nLCBmbikge1xuXHRcdHZhciBwYXJ0cyA9IHN0cmluZy5zcGxpdCgnQCcpO1xuXHRcdHZhciByZXN1bHQgPSAnJztcblx0XHRpZiAocGFydHMubGVuZ3RoID4gMSkge1xuXHRcdFx0Ly8gSW4gZW1haWwgYWRkcmVzc2VzLCBvbmx5IHRoZSBkb21haW4gbmFtZSBzaG91bGQgYmUgcHVueWNvZGVkLiBMZWF2ZVxuXHRcdFx0Ly8gdGhlIGxvY2FsIHBhcnQgKGkuZS4gZXZlcnl0aGluZyB1cCB0byBgQGApIGludGFjdC5cblx0XHRcdHJlc3VsdCA9IHBhcnRzWzBdICsgJ0AnO1xuXHRcdFx0c3RyaW5nID0gcGFydHNbMV07XG5cdFx0fVxuXHRcdC8vIEF2b2lkIGBzcGxpdChyZWdleClgIGZvciBJRTggY29tcGF0aWJpbGl0eS4gU2VlICMxNy5cblx0XHRzdHJpbmcgPSBzdHJpbmcucmVwbGFjZShyZWdleFNlcGFyYXRvcnMsICdcXHgyRScpO1xuXHRcdHZhciBsYWJlbHMgPSBzdHJpbmcuc3BsaXQoJy4nKTtcblx0XHR2YXIgZW5jb2RlZCA9IG1hcChsYWJlbHMsIGZuKS5qb2luKCcuJyk7XG5cdFx0cmV0dXJuIHJlc3VsdCArIGVuY29kZWQ7XG5cdH1cblxuXHQvKipcblx0ICogQ3JlYXRlcyBhbiBhcnJheSBjb250YWluaW5nIHRoZSBudW1lcmljIGNvZGUgcG9pbnRzIG9mIGVhY2ggVW5pY29kZVxuXHQgKiBjaGFyYWN0ZXIgaW4gdGhlIHN0cmluZy4gV2hpbGUgSmF2YVNjcmlwdCB1c2VzIFVDUy0yIGludGVybmFsbHksXG5cdCAqIHRoaXMgZnVuY3Rpb24gd2lsbCBjb252ZXJ0IGEgcGFpciBvZiBzdXJyb2dhdGUgaGFsdmVzIChlYWNoIG9mIHdoaWNoXG5cdCAqIFVDUy0yIGV4cG9zZXMgYXMgc2VwYXJhdGUgY2hhcmFjdGVycykgaW50byBhIHNpbmdsZSBjb2RlIHBvaW50LFxuXHQgKiBtYXRjaGluZyBVVEYtMTYuXG5cdCAqIEBzZWUgYHB1bnljb2RlLnVjczIuZW5jb2RlYFxuXHQgKiBAc2VlIDxodHRwczovL21hdGhpYXNieW5lbnMuYmUvbm90ZXMvamF2YXNjcmlwdC1lbmNvZGluZz5cblx0ICogQG1lbWJlck9mIHB1bnljb2RlLnVjczJcblx0ICogQG5hbWUgZGVjb2RlXG5cdCAqIEBwYXJhbSB7U3RyaW5nfSBzdHJpbmcgVGhlIFVuaWNvZGUgaW5wdXQgc3RyaW5nIChVQ1MtMikuXG5cdCAqIEByZXR1cm5zIHtBcnJheX0gVGhlIG5ldyBhcnJheSBvZiBjb2RlIHBvaW50cy5cblx0ICovXG5cdGZ1bmN0aW9uIHVjczJkZWNvZGUoc3RyaW5nKSB7XG5cdFx0dmFyIG91dHB1dCA9IFtdLFxuXHRcdCAgICBjb3VudGVyID0gMCxcblx0XHQgICAgbGVuZ3RoID0gc3RyaW5nLmxlbmd0aCxcblx0XHQgICAgdmFsdWUsXG5cdFx0ICAgIGV4dHJhO1xuXHRcdHdoaWxlIChjb3VudGVyIDwgbGVuZ3RoKSB7XG5cdFx0XHR2YWx1ZSA9IHN0cmluZy5jaGFyQ29kZUF0KGNvdW50ZXIrKyk7XG5cdFx0XHRpZiAodmFsdWUgPj0gMHhEODAwICYmIHZhbHVlIDw9IDB4REJGRiAmJiBjb3VudGVyIDwgbGVuZ3RoKSB7XG5cdFx0XHRcdC8vIGhpZ2ggc3Vycm9nYXRlLCBhbmQgdGhlcmUgaXMgYSBuZXh0IGNoYXJhY3RlclxuXHRcdFx0XHRleHRyYSA9IHN0cmluZy5jaGFyQ29kZUF0KGNvdW50ZXIrKyk7XG5cdFx0XHRcdGlmICgoZXh0cmEgJiAweEZDMDApID09IDB4REMwMCkgeyAvLyBsb3cgc3Vycm9nYXRlXG5cdFx0XHRcdFx0b3V0cHV0LnB1c2goKCh2YWx1ZSAmIDB4M0ZGKSA8PCAxMCkgKyAoZXh0cmEgJiAweDNGRikgKyAweDEwMDAwKTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHQvLyB1bm1hdGNoZWQgc3Vycm9nYXRlOyBvbmx5IGFwcGVuZCB0aGlzIGNvZGUgdW5pdCwgaW4gY2FzZSB0aGUgbmV4dFxuXHRcdFx0XHRcdC8vIGNvZGUgdW5pdCBpcyB0aGUgaGlnaCBzdXJyb2dhdGUgb2YgYSBzdXJyb2dhdGUgcGFpclxuXHRcdFx0XHRcdG91dHB1dC5wdXNoKHZhbHVlKTtcblx0XHRcdFx0XHRjb3VudGVyLS07XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdG91dHB1dC5wdXNoKHZhbHVlKTtcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIG91dHB1dDtcblx0fVxuXG5cdC8qKlxuXHQgKiBDcmVhdGVzIGEgc3RyaW5nIGJhc2VkIG9uIGFuIGFycmF5IG9mIG51bWVyaWMgY29kZSBwb2ludHMuXG5cdCAqIEBzZWUgYHB1bnljb2RlLnVjczIuZGVjb2RlYFxuXHQgKiBAbWVtYmVyT2YgcHVueWNvZGUudWNzMlxuXHQgKiBAbmFtZSBlbmNvZGVcblx0ICogQHBhcmFtIHtBcnJheX0gY29kZVBvaW50cyBUaGUgYXJyYXkgb2YgbnVtZXJpYyBjb2RlIHBvaW50cy5cblx0ICogQHJldHVybnMge1N0cmluZ30gVGhlIG5ldyBVbmljb2RlIHN0cmluZyAoVUNTLTIpLlxuXHQgKi9cblx0ZnVuY3Rpb24gdWNzMmVuY29kZShhcnJheSkge1xuXHRcdHJldHVybiBtYXAoYXJyYXksIGZ1bmN0aW9uKHZhbHVlKSB7XG5cdFx0XHR2YXIgb3V0cHV0ID0gJyc7XG5cdFx0XHRpZiAodmFsdWUgPiAweEZGRkYpIHtcblx0XHRcdFx0dmFsdWUgLT0gMHgxMDAwMDtcblx0XHRcdFx0b3V0cHV0ICs9IHN0cmluZ0Zyb21DaGFyQ29kZSh2YWx1ZSA+Pj4gMTAgJiAweDNGRiB8IDB4RDgwMCk7XG5cdFx0XHRcdHZhbHVlID0gMHhEQzAwIHwgdmFsdWUgJiAweDNGRjtcblx0XHRcdH1cblx0XHRcdG91dHB1dCArPSBzdHJpbmdGcm9tQ2hhckNvZGUodmFsdWUpO1xuXHRcdFx0cmV0dXJuIG91dHB1dDtcblx0XHR9KS5qb2luKCcnKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBDb252ZXJ0cyBhIGJhc2ljIGNvZGUgcG9pbnQgaW50byBhIGRpZ2l0L2ludGVnZXIuXG5cdCAqIEBzZWUgYGRpZ2l0VG9CYXNpYygpYFxuXHQgKiBAcHJpdmF0ZVxuXHQgKiBAcGFyYW0ge051bWJlcn0gY29kZVBvaW50IFRoZSBiYXNpYyBudW1lcmljIGNvZGUgcG9pbnQgdmFsdWUuXG5cdCAqIEByZXR1cm5zIHtOdW1iZXJ9IFRoZSBudW1lcmljIHZhbHVlIG9mIGEgYmFzaWMgY29kZSBwb2ludCAoZm9yIHVzZSBpblxuXHQgKiByZXByZXNlbnRpbmcgaW50ZWdlcnMpIGluIHRoZSByYW5nZSBgMGAgdG8gYGJhc2UgLSAxYCwgb3IgYGJhc2VgIGlmXG5cdCAqIHRoZSBjb2RlIHBvaW50IGRvZXMgbm90IHJlcHJlc2VudCBhIHZhbHVlLlxuXHQgKi9cblx0ZnVuY3Rpb24gYmFzaWNUb0RpZ2l0KGNvZGVQb2ludCkge1xuXHRcdGlmIChjb2RlUG9pbnQgLSA0OCA8IDEwKSB7XG5cdFx0XHRyZXR1cm4gY29kZVBvaW50IC0gMjI7XG5cdFx0fVxuXHRcdGlmIChjb2RlUG9pbnQgLSA2NSA8IDI2KSB7XG5cdFx0XHRyZXR1cm4gY29kZVBvaW50IC0gNjU7XG5cdFx0fVxuXHRcdGlmIChjb2RlUG9pbnQgLSA5NyA8IDI2KSB7XG5cdFx0XHRyZXR1cm4gY29kZVBvaW50IC0gOTc7XG5cdFx0fVxuXHRcdHJldHVybiBiYXNlO1xuXHR9XG5cblx0LyoqXG5cdCAqIENvbnZlcnRzIGEgZGlnaXQvaW50ZWdlciBpbnRvIGEgYmFzaWMgY29kZSBwb2ludC5cblx0ICogQHNlZSBgYmFzaWNUb0RpZ2l0KClgXG5cdCAqIEBwcml2YXRlXG5cdCAqIEBwYXJhbSB7TnVtYmVyfSBkaWdpdCBUaGUgbnVtZXJpYyB2YWx1ZSBvZiBhIGJhc2ljIGNvZGUgcG9pbnQuXG5cdCAqIEByZXR1cm5zIHtOdW1iZXJ9IFRoZSBiYXNpYyBjb2RlIHBvaW50IHdob3NlIHZhbHVlICh3aGVuIHVzZWQgZm9yXG5cdCAqIHJlcHJlc2VudGluZyBpbnRlZ2VycykgaXMgYGRpZ2l0YCwgd2hpY2ggbmVlZHMgdG8gYmUgaW4gdGhlIHJhbmdlXG5cdCAqIGAwYCB0byBgYmFzZSAtIDFgLiBJZiBgZmxhZ2AgaXMgbm9uLXplcm8sIHRoZSB1cHBlcmNhc2UgZm9ybSBpc1xuXHQgKiB1c2VkOyBlbHNlLCB0aGUgbG93ZXJjYXNlIGZvcm0gaXMgdXNlZC4gVGhlIGJlaGF2aW9yIGlzIHVuZGVmaW5lZFxuXHQgKiBpZiBgZmxhZ2AgaXMgbm9uLXplcm8gYW5kIGBkaWdpdGAgaGFzIG5vIHVwcGVyY2FzZSBmb3JtLlxuXHQgKi9cblx0ZnVuY3Rpb24gZGlnaXRUb0Jhc2ljKGRpZ2l0LCBmbGFnKSB7XG5cdFx0Ly8gIDAuLjI1IG1hcCB0byBBU0NJSSBhLi56IG9yIEEuLlpcblx0XHQvLyAyNi4uMzUgbWFwIHRvIEFTQ0lJIDAuLjlcblx0XHRyZXR1cm4gZGlnaXQgKyAyMiArIDc1ICogKGRpZ2l0IDwgMjYpIC0gKChmbGFnICE9IDApIDw8IDUpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEJpYXMgYWRhcHRhdGlvbiBmdW5jdGlvbiBhcyBwZXIgc2VjdGlvbiAzLjQgb2YgUkZDIDM0OTIuXG5cdCAqIGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmMzNDkyI3NlY3Rpb24tMy40XG5cdCAqIEBwcml2YXRlXG5cdCAqL1xuXHRmdW5jdGlvbiBhZGFwdChkZWx0YSwgbnVtUG9pbnRzLCBmaXJzdFRpbWUpIHtcblx0XHR2YXIgayA9IDA7XG5cdFx0ZGVsdGEgPSBmaXJzdFRpbWUgPyBmbG9vcihkZWx0YSAvIGRhbXApIDogZGVsdGEgPj4gMTtcblx0XHRkZWx0YSArPSBmbG9vcihkZWx0YSAvIG51bVBvaW50cyk7XG5cdFx0Zm9yICgvKiBubyBpbml0aWFsaXphdGlvbiAqLzsgZGVsdGEgPiBiYXNlTWludXNUTWluICogdE1heCA+PiAxOyBrICs9IGJhc2UpIHtcblx0XHRcdGRlbHRhID0gZmxvb3IoZGVsdGEgLyBiYXNlTWludXNUTWluKTtcblx0XHR9XG5cdFx0cmV0dXJuIGZsb29yKGsgKyAoYmFzZU1pbnVzVE1pbiArIDEpICogZGVsdGEgLyAoZGVsdGEgKyBza2V3KSk7XG5cdH1cblxuXHQvKipcblx0ICogQ29udmVydHMgYSBQdW55Y29kZSBzdHJpbmcgb2YgQVNDSUktb25seSBzeW1ib2xzIHRvIGEgc3RyaW5nIG9mIFVuaWNvZGVcblx0ICogc3ltYm9scy5cblx0ICogQG1lbWJlck9mIHB1bnljb2RlXG5cdCAqIEBwYXJhbSB7U3RyaW5nfSBpbnB1dCBUaGUgUHVueWNvZGUgc3RyaW5nIG9mIEFTQ0lJLW9ubHkgc3ltYm9scy5cblx0ICogQHJldHVybnMge1N0cmluZ30gVGhlIHJlc3VsdGluZyBzdHJpbmcgb2YgVW5pY29kZSBzeW1ib2xzLlxuXHQgKi9cblx0ZnVuY3Rpb24gZGVjb2RlKGlucHV0KSB7XG5cdFx0Ly8gRG9uJ3QgdXNlIFVDUy0yXG5cdFx0dmFyIG91dHB1dCA9IFtdLFxuXHRcdCAgICBpbnB1dExlbmd0aCA9IGlucHV0Lmxlbmd0aCxcblx0XHQgICAgb3V0LFxuXHRcdCAgICBpID0gMCxcblx0XHQgICAgbiA9IGluaXRpYWxOLFxuXHRcdCAgICBiaWFzID0gaW5pdGlhbEJpYXMsXG5cdFx0ICAgIGJhc2ljLFxuXHRcdCAgICBqLFxuXHRcdCAgICBpbmRleCxcblx0XHQgICAgb2xkaSxcblx0XHQgICAgdyxcblx0XHQgICAgayxcblx0XHQgICAgZGlnaXQsXG5cdFx0ICAgIHQsXG5cdFx0ICAgIC8qKiBDYWNoZWQgY2FsY3VsYXRpb24gcmVzdWx0cyAqL1xuXHRcdCAgICBiYXNlTWludXNUO1xuXG5cdFx0Ly8gSGFuZGxlIHRoZSBiYXNpYyBjb2RlIHBvaW50czogbGV0IGBiYXNpY2AgYmUgdGhlIG51bWJlciBvZiBpbnB1dCBjb2RlXG5cdFx0Ly8gcG9pbnRzIGJlZm9yZSB0aGUgbGFzdCBkZWxpbWl0ZXIsIG9yIGAwYCBpZiB0aGVyZSBpcyBub25lLCB0aGVuIGNvcHlcblx0XHQvLyB0aGUgZmlyc3QgYmFzaWMgY29kZSBwb2ludHMgdG8gdGhlIG91dHB1dC5cblxuXHRcdGJhc2ljID0gaW5wdXQubGFzdEluZGV4T2YoZGVsaW1pdGVyKTtcblx0XHRpZiAoYmFzaWMgPCAwKSB7XG5cdFx0XHRiYXNpYyA9IDA7XG5cdFx0fVxuXG5cdFx0Zm9yIChqID0gMDsgaiA8IGJhc2ljOyArK2opIHtcblx0XHRcdC8vIGlmIGl0J3Mgbm90IGEgYmFzaWMgY29kZSBwb2ludFxuXHRcdFx0aWYgKGlucHV0LmNoYXJDb2RlQXQoaikgPj0gMHg4MCkge1xuXHRcdFx0XHRlcnJvcignbm90LWJhc2ljJyk7XG5cdFx0XHR9XG5cdFx0XHRvdXRwdXQucHVzaChpbnB1dC5jaGFyQ29kZUF0KGopKTtcblx0XHR9XG5cblx0XHQvLyBNYWluIGRlY29kaW5nIGxvb3A6IHN0YXJ0IGp1c3QgYWZ0ZXIgdGhlIGxhc3QgZGVsaW1pdGVyIGlmIGFueSBiYXNpYyBjb2RlXG5cdFx0Ly8gcG9pbnRzIHdlcmUgY29waWVkOyBzdGFydCBhdCB0aGUgYmVnaW5uaW5nIG90aGVyd2lzZS5cblxuXHRcdGZvciAoaW5kZXggPSBiYXNpYyA+IDAgPyBiYXNpYyArIDEgOiAwOyBpbmRleCA8IGlucHV0TGVuZ3RoOyAvKiBubyBmaW5hbCBleHByZXNzaW9uICovKSB7XG5cblx0XHRcdC8vIGBpbmRleGAgaXMgdGhlIGluZGV4IG9mIHRoZSBuZXh0IGNoYXJhY3RlciB0byBiZSBjb25zdW1lZC5cblx0XHRcdC8vIERlY29kZSBhIGdlbmVyYWxpemVkIHZhcmlhYmxlLWxlbmd0aCBpbnRlZ2VyIGludG8gYGRlbHRhYCxcblx0XHRcdC8vIHdoaWNoIGdldHMgYWRkZWQgdG8gYGlgLiBUaGUgb3ZlcmZsb3cgY2hlY2tpbmcgaXMgZWFzaWVyXG5cdFx0XHQvLyBpZiB3ZSBpbmNyZWFzZSBgaWAgYXMgd2UgZ28sIHRoZW4gc3VidHJhY3Qgb2ZmIGl0cyBzdGFydGluZ1xuXHRcdFx0Ly8gdmFsdWUgYXQgdGhlIGVuZCB0byBvYnRhaW4gYGRlbHRhYC5cblx0XHRcdGZvciAob2xkaSA9IGksIHcgPSAxLCBrID0gYmFzZTsgLyogbm8gY29uZGl0aW9uICovOyBrICs9IGJhc2UpIHtcblxuXHRcdFx0XHRpZiAoaW5kZXggPj0gaW5wdXRMZW5ndGgpIHtcblx0XHRcdFx0XHRlcnJvcignaW52YWxpZC1pbnB1dCcpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0ZGlnaXQgPSBiYXNpY1RvRGlnaXQoaW5wdXQuY2hhckNvZGVBdChpbmRleCsrKSk7XG5cblx0XHRcdFx0aWYgKGRpZ2l0ID49IGJhc2UgfHwgZGlnaXQgPiBmbG9vcigobWF4SW50IC0gaSkgLyB3KSkge1xuXHRcdFx0XHRcdGVycm9yKCdvdmVyZmxvdycpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0aSArPSBkaWdpdCAqIHc7XG5cdFx0XHRcdHQgPSBrIDw9IGJpYXMgPyB0TWluIDogKGsgPj0gYmlhcyArIHRNYXggPyB0TWF4IDogayAtIGJpYXMpO1xuXG5cdFx0XHRcdGlmIChkaWdpdCA8IHQpIHtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGJhc2VNaW51c1QgPSBiYXNlIC0gdDtcblx0XHRcdFx0aWYgKHcgPiBmbG9vcihtYXhJbnQgLyBiYXNlTWludXNUKSkge1xuXHRcdFx0XHRcdGVycm9yKCdvdmVyZmxvdycpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0dyAqPSBiYXNlTWludXNUO1xuXG5cdFx0XHR9XG5cblx0XHRcdG91dCA9IG91dHB1dC5sZW5ndGggKyAxO1xuXHRcdFx0YmlhcyA9IGFkYXB0KGkgLSBvbGRpLCBvdXQsIG9sZGkgPT0gMCk7XG5cblx0XHRcdC8vIGBpYCB3YXMgc3VwcG9zZWQgdG8gd3JhcCBhcm91bmQgZnJvbSBgb3V0YCB0byBgMGAsXG5cdFx0XHQvLyBpbmNyZW1lbnRpbmcgYG5gIGVhY2ggdGltZSwgc28gd2UnbGwgZml4IHRoYXQgbm93OlxuXHRcdFx0aWYgKGZsb29yKGkgLyBvdXQpID4gbWF4SW50IC0gbikge1xuXHRcdFx0XHRlcnJvcignb3ZlcmZsb3cnKTtcblx0XHRcdH1cblxuXHRcdFx0biArPSBmbG9vcihpIC8gb3V0KTtcblx0XHRcdGkgJT0gb3V0O1xuXG5cdFx0XHQvLyBJbnNlcnQgYG5gIGF0IHBvc2l0aW9uIGBpYCBvZiB0aGUgb3V0cHV0XG5cdFx0XHRvdXRwdXQuc3BsaWNlKGkrKywgMCwgbik7XG5cblx0XHR9XG5cblx0XHRyZXR1cm4gdWNzMmVuY29kZShvdXRwdXQpO1xuXHR9XG5cblx0LyoqXG5cdCAqIENvbnZlcnRzIGEgc3RyaW5nIG9mIFVuaWNvZGUgc3ltYm9scyAoZS5nLiBhIGRvbWFpbiBuYW1lIGxhYmVsKSB0byBhXG5cdCAqIFB1bnljb2RlIHN0cmluZyBvZiBBU0NJSS1vbmx5IHN5bWJvbHMuXG5cdCAqIEBtZW1iZXJPZiBwdW55Y29kZVxuXHQgKiBAcGFyYW0ge1N0cmluZ30gaW5wdXQgVGhlIHN0cmluZyBvZiBVbmljb2RlIHN5bWJvbHMuXG5cdCAqIEByZXR1cm5zIHtTdHJpbmd9IFRoZSByZXN1bHRpbmcgUHVueWNvZGUgc3RyaW5nIG9mIEFTQ0lJLW9ubHkgc3ltYm9scy5cblx0ICovXG5cdGZ1bmN0aW9uIGVuY29kZShpbnB1dCkge1xuXHRcdHZhciBuLFxuXHRcdCAgICBkZWx0YSxcblx0XHQgICAgaGFuZGxlZENQQ291bnQsXG5cdFx0ICAgIGJhc2ljTGVuZ3RoLFxuXHRcdCAgICBiaWFzLFxuXHRcdCAgICBqLFxuXHRcdCAgICBtLFxuXHRcdCAgICBxLFxuXHRcdCAgICBrLFxuXHRcdCAgICB0LFxuXHRcdCAgICBjdXJyZW50VmFsdWUsXG5cdFx0ICAgIG91dHB1dCA9IFtdLFxuXHRcdCAgICAvKiogYGlucHV0TGVuZ3RoYCB3aWxsIGhvbGQgdGhlIG51bWJlciBvZiBjb2RlIHBvaW50cyBpbiBgaW5wdXRgLiAqL1xuXHRcdCAgICBpbnB1dExlbmd0aCxcblx0XHQgICAgLyoqIENhY2hlZCBjYWxjdWxhdGlvbiByZXN1bHRzICovXG5cdFx0ICAgIGhhbmRsZWRDUENvdW50UGx1c09uZSxcblx0XHQgICAgYmFzZU1pbnVzVCxcblx0XHQgICAgcU1pbnVzVDtcblxuXHRcdC8vIENvbnZlcnQgdGhlIGlucHV0IGluIFVDUy0yIHRvIFVuaWNvZGVcblx0XHRpbnB1dCA9IHVjczJkZWNvZGUoaW5wdXQpO1xuXG5cdFx0Ly8gQ2FjaGUgdGhlIGxlbmd0aFxuXHRcdGlucHV0TGVuZ3RoID0gaW5wdXQubGVuZ3RoO1xuXG5cdFx0Ly8gSW5pdGlhbGl6ZSB0aGUgc3RhdGVcblx0XHRuID0gaW5pdGlhbE47XG5cdFx0ZGVsdGEgPSAwO1xuXHRcdGJpYXMgPSBpbml0aWFsQmlhcztcblxuXHRcdC8vIEhhbmRsZSB0aGUgYmFzaWMgY29kZSBwb2ludHNcblx0XHRmb3IgKGogPSAwOyBqIDwgaW5wdXRMZW5ndGg7ICsraikge1xuXHRcdFx0Y3VycmVudFZhbHVlID0gaW5wdXRbal07XG5cdFx0XHRpZiAoY3VycmVudFZhbHVlIDwgMHg4MCkge1xuXHRcdFx0XHRvdXRwdXQucHVzaChzdHJpbmdGcm9tQ2hhckNvZGUoY3VycmVudFZhbHVlKSk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0aGFuZGxlZENQQ291bnQgPSBiYXNpY0xlbmd0aCA9IG91dHB1dC5sZW5ndGg7XG5cblx0XHQvLyBgaGFuZGxlZENQQ291bnRgIGlzIHRoZSBudW1iZXIgb2YgY29kZSBwb2ludHMgdGhhdCBoYXZlIGJlZW4gaGFuZGxlZDtcblx0XHQvLyBgYmFzaWNMZW5ndGhgIGlzIHRoZSBudW1iZXIgb2YgYmFzaWMgY29kZSBwb2ludHMuXG5cblx0XHQvLyBGaW5pc2ggdGhlIGJhc2ljIHN0cmluZyAtIGlmIGl0IGlzIG5vdCBlbXB0eSAtIHdpdGggYSBkZWxpbWl0ZXJcblx0XHRpZiAoYmFzaWNMZW5ndGgpIHtcblx0XHRcdG91dHB1dC5wdXNoKGRlbGltaXRlcik7XG5cdFx0fVxuXG5cdFx0Ly8gTWFpbiBlbmNvZGluZyBsb29wOlxuXHRcdHdoaWxlIChoYW5kbGVkQ1BDb3VudCA8IGlucHV0TGVuZ3RoKSB7XG5cblx0XHRcdC8vIEFsbCBub24tYmFzaWMgY29kZSBwb2ludHMgPCBuIGhhdmUgYmVlbiBoYW5kbGVkIGFscmVhZHkuIEZpbmQgdGhlIG5leHRcblx0XHRcdC8vIGxhcmdlciBvbmU6XG5cdFx0XHRmb3IgKG0gPSBtYXhJbnQsIGogPSAwOyBqIDwgaW5wdXRMZW5ndGg7ICsraikge1xuXHRcdFx0XHRjdXJyZW50VmFsdWUgPSBpbnB1dFtqXTtcblx0XHRcdFx0aWYgKGN1cnJlbnRWYWx1ZSA+PSBuICYmIGN1cnJlbnRWYWx1ZSA8IG0pIHtcblx0XHRcdFx0XHRtID0gY3VycmVudFZhbHVlO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdC8vIEluY3JlYXNlIGBkZWx0YWAgZW5vdWdoIHRvIGFkdmFuY2UgdGhlIGRlY29kZXIncyA8bixpPiBzdGF0ZSB0byA8bSwwPixcblx0XHRcdC8vIGJ1dCBndWFyZCBhZ2FpbnN0IG92ZXJmbG93XG5cdFx0XHRoYW5kbGVkQ1BDb3VudFBsdXNPbmUgPSBoYW5kbGVkQ1BDb3VudCArIDE7XG5cdFx0XHRpZiAobSAtIG4gPiBmbG9vcigobWF4SW50IC0gZGVsdGEpIC8gaGFuZGxlZENQQ291bnRQbHVzT25lKSkge1xuXHRcdFx0XHRlcnJvcignb3ZlcmZsb3cnKTtcblx0XHRcdH1cblxuXHRcdFx0ZGVsdGEgKz0gKG0gLSBuKSAqIGhhbmRsZWRDUENvdW50UGx1c09uZTtcblx0XHRcdG4gPSBtO1xuXG5cdFx0XHRmb3IgKGogPSAwOyBqIDwgaW5wdXRMZW5ndGg7ICsraikge1xuXHRcdFx0XHRjdXJyZW50VmFsdWUgPSBpbnB1dFtqXTtcblxuXHRcdFx0XHRpZiAoY3VycmVudFZhbHVlIDwgbiAmJiArK2RlbHRhID4gbWF4SW50KSB7XG5cdFx0XHRcdFx0ZXJyb3IoJ292ZXJmbG93Jyk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZiAoY3VycmVudFZhbHVlID09IG4pIHtcblx0XHRcdFx0XHQvLyBSZXByZXNlbnQgZGVsdGEgYXMgYSBnZW5lcmFsaXplZCB2YXJpYWJsZS1sZW5ndGggaW50ZWdlclxuXHRcdFx0XHRcdGZvciAocSA9IGRlbHRhLCBrID0gYmFzZTsgLyogbm8gY29uZGl0aW9uICovOyBrICs9IGJhc2UpIHtcblx0XHRcdFx0XHRcdHQgPSBrIDw9IGJpYXMgPyB0TWluIDogKGsgPj0gYmlhcyArIHRNYXggPyB0TWF4IDogayAtIGJpYXMpO1xuXHRcdFx0XHRcdFx0aWYgKHEgPCB0KSB7XG5cdFx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0cU1pbnVzVCA9IHEgLSB0O1xuXHRcdFx0XHRcdFx0YmFzZU1pbnVzVCA9IGJhc2UgLSB0O1xuXHRcdFx0XHRcdFx0b3V0cHV0LnB1c2goXG5cdFx0XHRcdFx0XHRcdHN0cmluZ0Zyb21DaGFyQ29kZShkaWdpdFRvQmFzaWModCArIHFNaW51c1QgJSBiYXNlTWludXNULCAwKSlcblx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0XHRxID0gZmxvb3IocU1pbnVzVCAvIGJhc2VNaW51c1QpO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdG91dHB1dC5wdXNoKHN0cmluZ0Zyb21DaGFyQ29kZShkaWdpdFRvQmFzaWMocSwgMCkpKTtcblx0XHRcdFx0XHRiaWFzID0gYWRhcHQoZGVsdGEsIGhhbmRsZWRDUENvdW50UGx1c09uZSwgaGFuZGxlZENQQ291bnQgPT0gYmFzaWNMZW5ndGgpO1xuXHRcdFx0XHRcdGRlbHRhID0gMDtcblx0XHRcdFx0XHQrK2hhbmRsZWRDUENvdW50O1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdCsrZGVsdGE7XG5cdFx0XHQrK247XG5cblx0XHR9XG5cdFx0cmV0dXJuIG91dHB1dC5qb2luKCcnKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBDb252ZXJ0cyBhIFB1bnljb2RlIHN0cmluZyByZXByZXNlbnRpbmcgYSBkb21haW4gbmFtZSBvciBhbiBlbWFpbCBhZGRyZXNzXG5cdCAqIHRvIFVuaWNvZGUuIE9ubHkgdGhlIFB1bnljb2RlZCBwYXJ0cyBvZiB0aGUgaW5wdXQgd2lsbCBiZSBjb252ZXJ0ZWQsIGkuZS5cblx0ICogaXQgZG9lc24ndCBtYXR0ZXIgaWYgeW91IGNhbGwgaXQgb24gYSBzdHJpbmcgdGhhdCBoYXMgYWxyZWFkeSBiZWVuXG5cdCAqIGNvbnZlcnRlZCB0byBVbmljb2RlLlxuXHQgKiBAbWVtYmVyT2YgcHVueWNvZGVcblx0ICogQHBhcmFtIHtTdHJpbmd9IGlucHV0IFRoZSBQdW55Y29kZWQgZG9tYWluIG5hbWUgb3IgZW1haWwgYWRkcmVzcyB0b1xuXHQgKiBjb252ZXJ0IHRvIFVuaWNvZGUuXG5cdCAqIEByZXR1cm5zIHtTdHJpbmd9IFRoZSBVbmljb2RlIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBnaXZlbiBQdW55Y29kZVxuXHQgKiBzdHJpbmcuXG5cdCAqL1xuXHRmdW5jdGlvbiB0b1VuaWNvZGUoaW5wdXQpIHtcblx0XHRyZXR1cm4gbWFwRG9tYWluKGlucHV0LCBmdW5jdGlvbihzdHJpbmcpIHtcblx0XHRcdHJldHVybiByZWdleFB1bnljb2RlLnRlc3Qoc3RyaW5nKVxuXHRcdFx0XHQ/IGRlY29kZShzdHJpbmcuc2xpY2UoNCkudG9Mb3dlckNhc2UoKSlcblx0XHRcdFx0OiBzdHJpbmc7XG5cdFx0fSk7XG5cdH1cblxuXHQvKipcblx0ICogQ29udmVydHMgYSBVbmljb2RlIHN0cmluZyByZXByZXNlbnRpbmcgYSBkb21haW4gbmFtZSBvciBhbiBlbWFpbCBhZGRyZXNzIHRvXG5cdCAqIFB1bnljb2RlLiBPbmx5IHRoZSBub24tQVNDSUkgcGFydHMgb2YgdGhlIGRvbWFpbiBuYW1lIHdpbGwgYmUgY29udmVydGVkLFxuXHQgKiBpLmUuIGl0IGRvZXNuJ3QgbWF0dGVyIGlmIHlvdSBjYWxsIGl0IHdpdGggYSBkb21haW4gdGhhdCdzIGFscmVhZHkgaW5cblx0ICogQVNDSUkuXG5cdCAqIEBtZW1iZXJPZiBwdW55Y29kZVxuXHQgKiBAcGFyYW0ge1N0cmluZ30gaW5wdXQgVGhlIGRvbWFpbiBuYW1lIG9yIGVtYWlsIGFkZHJlc3MgdG8gY29udmVydCwgYXMgYVxuXHQgKiBVbmljb2RlIHN0cmluZy5cblx0ICogQHJldHVybnMge1N0cmluZ30gVGhlIFB1bnljb2RlIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBnaXZlbiBkb21haW4gbmFtZSBvclxuXHQgKiBlbWFpbCBhZGRyZXNzLlxuXHQgKi9cblx0ZnVuY3Rpb24gdG9BU0NJSShpbnB1dCkge1xuXHRcdHJldHVybiBtYXBEb21haW4oaW5wdXQsIGZ1bmN0aW9uKHN0cmluZykge1xuXHRcdFx0cmV0dXJuIHJlZ2V4Tm9uQVNDSUkudGVzdChzdHJpbmcpXG5cdFx0XHRcdD8gJ3huLS0nICsgZW5jb2RlKHN0cmluZylcblx0XHRcdFx0OiBzdHJpbmc7XG5cdFx0fSk7XG5cdH1cblxuXHQvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cblxuXHQvKiogRGVmaW5lIHRoZSBwdWJsaWMgQVBJICovXG5cdHB1bnljb2RlID0ge1xuXHRcdC8qKlxuXHRcdCAqIEEgc3RyaW5nIHJlcHJlc2VudGluZyB0aGUgY3VycmVudCBQdW55Y29kZS5qcyB2ZXJzaW9uIG51bWJlci5cblx0XHQgKiBAbWVtYmVyT2YgcHVueWNvZGVcblx0XHQgKiBAdHlwZSBTdHJpbmdcblx0XHQgKi9cblx0XHQndmVyc2lvbic6ICcxLjMuMicsXG5cdFx0LyoqXG5cdFx0ICogQW4gb2JqZWN0IG9mIG1ldGhvZHMgdG8gY29udmVydCBmcm9tIEphdmFTY3JpcHQncyBpbnRlcm5hbCBjaGFyYWN0ZXJcblx0XHQgKiByZXByZXNlbnRhdGlvbiAoVUNTLTIpIHRvIFVuaWNvZGUgY29kZSBwb2ludHMsIGFuZCBiYWNrLlxuXHRcdCAqIEBzZWUgPGh0dHBzOi8vbWF0aGlhc2J5bmVucy5iZS9ub3Rlcy9qYXZhc2NyaXB0LWVuY29kaW5nPlxuXHRcdCAqIEBtZW1iZXJPZiBwdW55Y29kZVxuXHRcdCAqIEB0eXBlIE9iamVjdFxuXHRcdCAqL1xuXHRcdCd1Y3MyJzoge1xuXHRcdFx0J2RlY29kZSc6IHVjczJkZWNvZGUsXG5cdFx0XHQnZW5jb2RlJzogdWNzMmVuY29kZVxuXHRcdH0sXG5cdFx0J2RlY29kZSc6IGRlY29kZSxcblx0XHQnZW5jb2RlJzogZW5jb2RlLFxuXHRcdCd0b0FTQ0lJJzogdG9BU0NJSSxcblx0XHQndG9Vbmljb2RlJzogdG9Vbmljb2RlXG5cdH07XG5cblx0LyoqIEV4cG9zZSBgcHVueWNvZGVgICovXG5cdC8vIFNvbWUgQU1EIGJ1aWxkIG9wdGltaXplcnMsIGxpa2Ugci5qcywgY2hlY2sgZm9yIHNwZWNpZmljIGNvbmRpdGlvbiBwYXR0ZXJuc1xuXHQvLyBsaWtlIHRoZSBmb2xsb3dpbmc6XG5cdGlmIChcblx0XHR0eXBlb2YgZGVmaW5lID09ICdmdW5jdGlvbicgJiZcblx0XHR0eXBlb2YgZGVmaW5lLmFtZCA9PSAnb2JqZWN0JyAmJlxuXHRcdGRlZmluZS5hbWRcblx0KSB7XG5cdFx0ZGVmaW5lKCdwdW55Y29kZScsIGZ1bmN0aW9uKCkge1xuXHRcdFx0cmV0dXJuIHB1bnljb2RlO1xuXHRcdH0pO1xuXHR9IGVsc2UgaWYgKGZyZWVFeHBvcnRzICYmIGZyZWVNb2R1bGUpIHtcblx0XHRpZiAobW9kdWxlLmV4cG9ydHMgPT0gZnJlZUV4cG9ydHMpIHtcblx0XHRcdC8vIGluIE5vZGUuanMsIGlvLmpzLCBvciBSaW5nb0pTIHYwLjguMCtcblx0XHRcdGZyZWVNb2R1bGUuZXhwb3J0cyA9IHB1bnljb2RlO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHQvLyBpbiBOYXJ3aGFsIG9yIFJpbmdvSlMgdjAuNy4wLVxuXHRcdFx0Zm9yIChrZXkgaW4gcHVueWNvZGUpIHtcblx0XHRcdFx0cHVueWNvZGUuaGFzT3duUHJvcGVydHkoa2V5KSAmJiAoZnJlZUV4cG9ydHNba2V5XSA9IHB1bnljb2RlW2tleV0pO1xuXHRcdFx0fVxuXHRcdH1cblx0fSBlbHNlIHtcblx0XHQvLyBpbiBSaGlubyBvciBhIHdlYiBicm93c2VyXG5cdFx0cm9vdC5wdW55Y29kZSA9IHB1bnljb2RlO1xuXHR9XG5cbn0odGhpcykpO1xuIiwiLy8gQ29weXJpZ2h0IEpveWVudCwgSW5jLiBhbmQgb3RoZXIgTm9kZSBjb250cmlidXRvcnMuXG4vL1xuLy8gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGFcbi8vIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGVcbi8vIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZ1xuLy8gd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLFxuLy8gZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdFxuLy8gcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlXG4vLyBmb2xsb3dpbmcgY29uZGl0aW9uczpcbi8vXG4vLyBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZFxuLy8gaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4vL1xuLy8gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTU1xuLy8gT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRlxuLy8gTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTlxuLy8gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sXG4vLyBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1Jcbi8vIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEVcbi8vIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG5cbid1c2Ugc3RyaWN0JztcblxuLy8gSWYgb2JqLmhhc093blByb3BlcnR5IGhhcyBiZWVuIG92ZXJyaWRkZW4sIHRoZW4gY2FsbGluZ1xuLy8gb2JqLmhhc093blByb3BlcnR5KHByb3ApIHdpbGwgYnJlYWsuXG4vLyBTZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9qb3llbnQvbm9kZS9pc3N1ZXMvMTcwN1xuZnVuY3Rpb24gaGFzT3duUHJvcGVydHkob2JqLCBwcm9wKSB7XG4gIHJldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqLCBwcm9wKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihxcywgc2VwLCBlcSwgb3B0aW9ucykge1xuICBzZXAgPSBzZXAgfHwgJyYnO1xuICBlcSA9IGVxIHx8ICc9JztcbiAgdmFyIG9iaiA9IHt9O1xuXG4gIGlmICh0eXBlb2YgcXMgIT09ICdzdHJpbmcnIHx8IHFzLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiBvYmo7XG4gIH1cblxuICB2YXIgcmVnZXhwID0gL1xcKy9nO1xuICBxcyA9IHFzLnNwbGl0KHNlcCk7XG5cbiAgdmFyIG1heEtleXMgPSAxMDAwO1xuICBpZiAob3B0aW9ucyAmJiB0eXBlb2Ygb3B0aW9ucy5tYXhLZXlzID09PSAnbnVtYmVyJykge1xuICAgIG1heEtleXMgPSBvcHRpb25zLm1heEtleXM7XG4gIH1cblxuICB2YXIgbGVuID0gcXMubGVuZ3RoO1xuICAvLyBtYXhLZXlzIDw9IDAgbWVhbnMgdGhhdCB3ZSBzaG91bGQgbm90IGxpbWl0IGtleXMgY291bnRcbiAgaWYgKG1heEtleXMgPiAwICYmIGxlbiA+IG1heEtleXMpIHtcbiAgICBsZW4gPSBtYXhLZXlzO1xuICB9XG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47ICsraSkge1xuICAgIHZhciB4ID0gcXNbaV0ucmVwbGFjZShyZWdleHAsICclMjAnKSxcbiAgICAgICAgaWR4ID0geC5pbmRleE9mKGVxKSxcbiAgICAgICAga3N0ciwgdnN0ciwgaywgdjtcblxuICAgIGlmIChpZHggPj0gMCkge1xuICAgICAga3N0ciA9IHguc3Vic3RyKDAsIGlkeCk7XG4gICAgICB2c3RyID0geC5zdWJzdHIoaWR4ICsgMSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGtzdHIgPSB4O1xuICAgICAgdnN0ciA9ICcnO1xuICAgIH1cblxuICAgIGsgPSBkZWNvZGVVUklDb21wb25lbnQoa3N0cik7XG4gICAgdiA9IGRlY29kZVVSSUNvbXBvbmVudCh2c3RyKTtcblxuICAgIGlmICghaGFzT3duUHJvcGVydHkob2JqLCBrKSkge1xuICAgICAgb2JqW2tdID0gdjtcbiAgICB9IGVsc2UgaWYgKGlzQXJyYXkob2JqW2tdKSkge1xuICAgICAgb2JqW2tdLnB1c2godik7XG4gICAgfSBlbHNlIHtcbiAgICAgIG9ialtrXSA9IFtvYmpba10sIHZdO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBvYmo7XG59O1xuXG52YXIgaXNBcnJheSA9IEFycmF5LmlzQXJyYXkgfHwgZnVuY3Rpb24gKHhzKSB7XG4gIHJldHVybiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoeHMpID09PSAnW29iamVjdCBBcnJheV0nO1xufTtcbiIsIi8vIENvcHlyaWdodCBKb3llbnQsIEluYy4gYW5kIG90aGVyIE5vZGUgY29udHJpYnV0b3JzLlxuLy9cbi8vIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhXG4vLyBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlXG4vLyBcIlNvZnR3YXJlXCIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmdcbi8vIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCxcbi8vIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXRcbi8vIHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZVxuLy8gZm9sbG93aW5nIGNvbmRpdGlvbnM6XG4vL1xuLy8gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWRcbi8vIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuLy9cbi8vIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1Ncbi8vIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0Zcbi8vIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU5cbi8vIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLFxuLy8gREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SXG4vLyBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFXG4vLyBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLlxuXG4ndXNlIHN0cmljdCc7XG5cbnZhciBzdHJpbmdpZnlQcmltaXRpdmUgPSBmdW5jdGlvbih2KSB7XG4gIHN3aXRjaCAodHlwZW9mIHYpIHtcbiAgICBjYXNlICdzdHJpbmcnOlxuICAgICAgcmV0dXJuIHY7XG5cbiAgICBjYXNlICdib29sZWFuJzpcbiAgICAgIHJldHVybiB2ID8gJ3RydWUnIDogJ2ZhbHNlJztcblxuICAgIGNhc2UgJ251bWJlcic6XG4gICAgICByZXR1cm4gaXNGaW5pdGUodikgPyB2IDogJyc7XG5cbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuICcnO1xuICB9XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKG9iaiwgc2VwLCBlcSwgbmFtZSkge1xuICBzZXAgPSBzZXAgfHwgJyYnO1xuICBlcSA9IGVxIHx8ICc9JztcbiAgaWYgKG9iaiA9PT0gbnVsbCkge1xuICAgIG9iaiA9IHVuZGVmaW5lZDtcbiAgfVxuXG4gIGlmICh0eXBlb2Ygb2JqID09PSAnb2JqZWN0Jykge1xuICAgIHJldHVybiBtYXAob2JqZWN0S2V5cyhvYmopLCBmdW5jdGlvbihrKSB7XG4gICAgICB2YXIga3MgPSBlbmNvZGVVUklDb21wb25lbnQoc3RyaW5naWZ5UHJpbWl0aXZlKGspKSArIGVxO1xuICAgICAgaWYgKGlzQXJyYXkob2JqW2tdKSkge1xuICAgICAgICByZXR1cm4gbWFwKG9ialtrXSwgZnVuY3Rpb24odikge1xuICAgICAgICAgIHJldHVybiBrcyArIGVuY29kZVVSSUNvbXBvbmVudChzdHJpbmdpZnlQcmltaXRpdmUodikpO1xuICAgICAgICB9KS5qb2luKHNlcCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4ga3MgKyBlbmNvZGVVUklDb21wb25lbnQoc3RyaW5naWZ5UHJpbWl0aXZlKG9ialtrXSkpO1xuICAgICAgfVxuICAgIH0pLmpvaW4oc2VwKTtcblxuICB9XG5cbiAgaWYgKCFuYW1lKSByZXR1cm4gJyc7XG4gIHJldHVybiBlbmNvZGVVUklDb21wb25lbnQoc3RyaW5naWZ5UHJpbWl0aXZlKG5hbWUpKSArIGVxICtcbiAgICAgICAgIGVuY29kZVVSSUNvbXBvbmVudChzdHJpbmdpZnlQcmltaXRpdmUob2JqKSk7XG59O1xuXG52YXIgaXNBcnJheSA9IEFycmF5LmlzQXJyYXkgfHwgZnVuY3Rpb24gKHhzKSB7XG4gIHJldHVybiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoeHMpID09PSAnW29iamVjdCBBcnJheV0nO1xufTtcblxuZnVuY3Rpb24gbWFwICh4cywgZikge1xuICBpZiAoeHMubWFwKSByZXR1cm4geHMubWFwKGYpO1xuICB2YXIgcmVzID0gW107XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgeHMubGVuZ3RoOyBpKyspIHtcbiAgICByZXMucHVzaChmKHhzW2ldLCBpKSk7XG4gIH1cbiAgcmV0dXJuIHJlcztcbn1cblxudmFyIG9iamVjdEtleXMgPSBPYmplY3Qua2V5cyB8fCBmdW5jdGlvbiAob2JqKSB7XG4gIHZhciByZXMgPSBbXTtcbiAgZm9yICh2YXIga2V5IGluIG9iaikge1xuICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqLCBrZXkpKSByZXMucHVzaChrZXkpO1xuICB9XG4gIHJldHVybiByZXM7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG5leHBvcnRzLmRlY29kZSA9IGV4cG9ydHMucGFyc2UgPSByZXF1aXJlKCcuL2RlY29kZScpO1xuZXhwb3J0cy5lbmNvZGUgPSBleHBvcnRzLnN0cmluZ2lmeSA9IHJlcXVpcmUoJy4vZW5jb2RlJyk7XG4iLCIvLyBDb3B5cmlnaHQgSm95ZW50LCBJbmMuIGFuZCBvdGhlciBOb2RlIGNvbnRyaWJ1dG9ycy5cbi8vXG4vLyBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYVxuLy8gY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZVxuLy8gXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nXG4vLyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsXG4vLyBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0XG4vLyBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGVcbi8vIGZvbGxvd2luZyBjb25kaXRpb25zOlxuLy9cbi8vIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkXG4vLyBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbi8vXG4vLyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTXG4vLyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GXG4vLyBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOXG4vLyBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSxcbi8vIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUlxuLy8gT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRVxuLy8gVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cblxudmFyIHB1bnljb2RlID0gcmVxdWlyZSgncHVueWNvZGUnKTtcblxuZXhwb3J0cy5wYXJzZSA9IHVybFBhcnNlO1xuZXhwb3J0cy5yZXNvbHZlID0gdXJsUmVzb2x2ZTtcbmV4cG9ydHMucmVzb2x2ZU9iamVjdCA9IHVybFJlc29sdmVPYmplY3Q7XG5leHBvcnRzLmZvcm1hdCA9IHVybEZvcm1hdDtcblxuZXhwb3J0cy5VcmwgPSBVcmw7XG5cbmZ1bmN0aW9uIFVybCgpIHtcbiAgdGhpcy5wcm90b2NvbCA9IG51bGw7XG4gIHRoaXMuc2xhc2hlcyA9IG51bGw7XG4gIHRoaXMuYXV0aCA9IG51bGw7XG4gIHRoaXMuaG9zdCA9IG51bGw7XG4gIHRoaXMucG9ydCA9IG51bGw7XG4gIHRoaXMuaG9zdG5hbWUgPSBudWxsO1xuICB0aGlzLmhhc2ggPSBudWxsO1xuICB0aGlzLnNlYXJjaCA9IG51bGw7XG4gIHRoaXMucXVlcnkgPSBudWxsO1xuICB0aGlzLnBhdGhuYW1lID0gbnVsbDtcbiAgdGhpcy5wYXRoID0gbnVsbDtcbiAgdGhpcy5ocmVmID0gbnVsbDtcbn1cblxuLy8gUmVmZXJlbmNlOiBSRkMgMzk4NiwgUkZDIDE4MDgsIFJGQyAyMzk2XG5cbi8vIGRlZmluZSB0aGVzZSBoZXJlIHNvIGF0IGxlYXN0IHRoZXkgb25seSBoYXZlIHRvIGJlXG4vLyBjb21waWxlZCBvbmNlIG9uIHRoZSBmaXJzdCBtb2R1bGUgbG9hZC5cbnZhciBwcm90b2NvbFBhdHRlcm4gPSAvXihbYS16MC05ListXSs6KS9pLFxuICAgIHBvcnRQYXR0ZXJuID0gLzpbMC05XSokLyxcblxuICAgIC8vIFJGQyAyMzk2OiBjaGFyYWN0ZXJzIHJlc2VydmVkIGZvciBkZWxpbWl0aW5nIFVSTHMuXG4gICAgLy8gV2UgYWN0dWFsbHkganVzdCBhdXRvLWVzY2FwZSB0aGVzZS5cbiAgICBkZWxpbXMgPSBbJzwnLCAnPicsICdcIicsICdgJywgJyAnLCAnXFxyJywgJ1xcbicsICdcXHQnXSxcblxuICAgIC8vIFJGQyAyMzk2OiBjaGFyYWN0ZXJzIG5vdCBhbGxvd2VkIGZvciB2YXJpb3VzIHJlYXNvbnMuXG4gICAgdW53aXNlID0gWyd7JywgJ30nLCAnfCcsICdcXFxcJywgJ14nLCAnYCddLmNvbmNhdChkZWxpbXMpLFxuXG4gICAgLy8gQWxsb3dlZCBieSBSRkNzLCBidXQgY2F1c2Ugb2YgWFNTIGF0dGFja3MuICBBbHdheXMgZXNjYXBlIHRoZXNlLlxuICAgIGF1dG9Fc2NhcGUgPSBbJ1xcJyddLmNvbmNhdCh1bndpc2UpLFxuICAgIC8vIENoYXJhY3RlcnMgdGhhdCBhcmUgbmV2ZXIgZXZlciBhbGxvd2VkIGluIGEgaG9zdG5hbWUuXG4gICAgLy8gTm90ZSB0aGF0IGFueSBpbnZhbGlkIGNoYXJzIGFyZSBhbHNvIGhhbmRsZWQsIGJ1dCB0aGVzZVxuICAgIC8vIGFyZSB0aGUgb25lcyB0aGF0IGFyZSAqZXhwZWN0ZWQqIHRvIGJlIHNlZW4sIHNvIHdlIGZhc3QtcGF0aFxuICAgIC8vIHRoZW0uXG4gICAgbm9uSG9zdENoYXJzID0gWyclJywgJy8nLCAnPycsICc7JywgJyMnXS5jb25jYXQoYXV0b0VzY2FwZSksXG4gICAgaG9zdEVuZGluZ0NoYXJzID0gWycvJywgJz8nLCAnIyddLFxuICAgIGhvc3RuYW1lTWF4TGVuID0gMjU1LFxuICAgIGhvc3RuYW1lUGFydFBhdHRlcm4gPSAvXlthLXowLTlBLVpfLV17MCw2M30kLyxcbiAgICBob3N0bmFtZVBhcnRTdGFydCA9IC9eKFthLXowLTlBLVpfLV17MCw2M30pKC4qKSQvLFxuICAgIC8vIHByb3RvY29scyB0aGF0IGNhbiBhbGxvdyBcInVuc2FmZVwiIGFuZCBcInVud2lzZVwiIGNoYXJzLlxuICAgIHVuc2FmZVByb3RvY29sID0ge1xuICAgICAgJ2phdmFzY3JpcHQnOiB0cnVlLFxuICAgICAgJ2phdmFzY3JpcHQ6JzogdHJ1ZVxuICAgIH0sXG4gICAgLy8gcHJvdG9jb2xzIHRoYXQgbmV2ZXIgaGF2ZSBhIGhvc3RuYW1lLlxuICAgIGhvc3RsZXNzUHJvdG9jb2wgPSB7XG4gICAgICAnamF2YXNjcmlwdCc6IHRydWUsXG4gICAgICAnamF2YXNjcmlwdDonOiB0cnVlXG4gICAgfSxcbiAgICAvLyBwcm90b2NvbHMgdGhhdCBhbHdheXMgY29udGFpbiBhIC8vIGJpdC5cbiAgICBzbGFzaGVkUHJvdG9jb2wgPSB7XG4gICAgICAnaHR0cCc6IHRydWUsXG4gICAgICAnaHR0cHMnOiB0cnVlLFxuICAgICAgJ2Z0cCc6IHRydWUsXG4gICAgICAnZ29waGVyJzogdHJ1ZSxcbiAgICAgICdmaWxlJzogdHJ1ZSxcbiAgICAgICdodHRwOic6IHRydWUsXG4gICAgICAnaHR0cHM6JzogdHJ1ZSxcbiAgICAgICdmdHA6JzogdHJ1ZSxcbiAgICAgICdnb3BoZXI6JzogdHJ1ZSxcbiAgICAgICdmaWxlOic6IHRydWVcbiAgICB9LFxuICAgIHF1ZXJ5c3RyaW5nID0gcmVxdWlyZSgncXVlcnlzdHJpbmcnKTtcblxuZnVuY3Rpb24gdXJsUGFyc2UodXJsLCBwYXJzZVF1ZXJ5U3RyaW5nLCBzbGFzaGVzRGVub3RlSG9zdCkge1xuICBpZiAodXJsICYmIGlzT2JqZWN0KHVybCkgJiYgdXJsIGluc3RhbmNlb2YgVXJsKSByZXR1cm4gdXJsO1xuXG4gIHZhciB1ID0gbmV3IFVybDtcbiAgdS5wYXJzZSh1cmwsIHBhcnNlUXVlcnlTdHJpbmcsIHNsYXNoZXNEZW5vdGVIb3N0KTtcbiAgcmV0dXJuIHU7XG59XG5cblVybC5wcm90b3R5cGUucGFyc2UgPSBmdW5jdGlvbih1cmwsIHBhcnNlUXVlcnlTdHJpbmcsIHNsYXNoZXNEZW5vdGVIb3N0KSB7XG4gIGlmICghaXNTdHJpbmcodXJsKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJQYXJhbWV0ZXIgJ3VybCcgbXVzdCBiZSBhIHN0cmluZywgbm90IFwiICsgdHlwZW9mIHVybCk7XG4gIH1cblxuICB2YXIgcmVzdCA9IHVybDtcblxuICAvLyB0cmltIGJlZm9yZSBwcm9jZWVkaW5nLlxuICAvLyBUaGlzIGlzIHRvIHN1cHBvcnQgcGFyc2Ugc3R1ZmYgbGlrZSBcIiAgaHR0cDovL2Zvby5jb20gIFxcblwiXG4gIHJlc3QgPSByZXN0LnRyaW0oKTtcblxuICB2YXIgcHJvdG8gPSBwcm90b2NvbFBhdHRlcm4uZXhlYyhyZXN0KTtcbiAgaWYgKHByb3RvKSB7XG4gICAgcHJvdG8gPSBwcm90b1swXTtcbiAgICB2YXIgbG93ZXJQcm90byA9IHByb3RvLnRvTG93ZXJDYXNlKCk7XG4gICAgdGhpcy5wcm90b2NvbCA9IGxvd2VyUHJvdG87XG4gICAgcmVzdCA9IHJlc3Quc3Vic3RyKHByb3RvLmxlbmd0aCk7XG4gIH1cblxuICAvLyBmaWd1cmUgb3V0IGlmIGl0J3MgZ290IGEgaG9zdFxuICAvLyB1c2VyQHNlcnZlciBpcyAqYWx3YXlzKiBpbnRlcnByZXRlZCBhcyBhIGhvc3RuYW1lLCBhbmQgdXJsXG4gIC8vIHJlc29sdXRpb24gd2lsbCB0cmVhdCAvL2Zvby9iYXIgYXMgaG9zdD1mb28scGF0aD1iYXIgYmVjYXVzZSB0aGF0J3NcbiAgLy8gaG93IHRoZSBicm93c2VyIHJlc29sdmVzIHJlbGF0aXZlIFVSTHMuXG4gIGlmIChzbGFzaGVzRGVub3RlSG9zdCB8fCBwcm90byB8fCByZXN0Lm1hdGNoKC9eXFwvXFwvW15AXFwvXStAW15AXFwvXSsvKSkge1xuICAgIHZhciBzbGFzaGVzID0gcmVzdC5zdWJzdHIoMCwgMikgPT09ICcvLyc7XG4gICAgaWYgKHNsYXNoZXMgJiYgIShwcm90byAmJiBob3N0bGVzc1Byb3RvY29sW3Byb3RvXSkpIHtcbiAgICAgIHJlc3QgPSByZXN0LnN1YnN0cigyKTtcbiAgICAgIHRoaXMuc2xhc2hlcyA9IHRydWU7XG4gICAgfVxuICB9XG5cbiAgaWYgKCFob3N0bGVzc1Byb3RvY29sW3Byb3RvXSAmJlxuICAgICAgKHNsYXNoZXMgfHwgKHByb3RvICYmICFzbGFzaGVkUHJvdG9jb2xbcHJvdG9dKSkpIHtcblxuICAgIC8vIHRoZXJlJ3MgYSBob3N0bmFtZS5cbiAgICAvLyB0aGUgZmlyc3QgaW5zdGFuY2Ugb2YgLywgPywgOywgb3IgIyBlbmRzIHRoZSBob3N0LlxuICAgIC8vXG4gICAgLy8gSWYgdGhlcmUgaXMgYW4gQCBpbiB0aGUgaG9zdG5hbWUsIHRoZW4gbm9uLWhvc3QgY2hhcnMgKmFyZSogYWxsb3dlZFxuICAgIC8vIHRvIHRoZSBsZWZ0IG9mIHRoZSBsYXN0IEAgc2lnbiwgdW5sZXNzIHNvbWUgaG9zdC1lbmRpbmcgY2hhcmFjdGVyXG4gICAgLy8gY29tZXMgKmJlZm9yZSogdGhlIEAtc2lnbi5cbiAgICAvLyBVUkxzIGFyZSBvYm5veGlvdXMuXG4gICAgLy9cbiAgICAvLyBleDpcbiAgICAvLyBodHRwOi8vYUBiQGMvID0+IHVzZXI6YUBiIGhvc3Q6Y1xuICAgIC8vIGh0dHA6Ly9hQGI/QGMgPT4gdXNlcjphIGhvc3Q6YyBwYXRoOi8/QGNcblxuICAgIC8vIHYwLjEyIFRPRE8oaXNhYWNzKTogVGhpcyBpcyBub3QgcXVpdGUgaG93IENocm9tZSBkb2VzIHRoaW5ncy5cbiAgICAvLyBSZXZpZXcgb3VyIHRlc3QgY2FzZSBhZ2FpbnN0IGJyb3dzZXJzIG1vcmUgY29tcHJlaGVuc2l2ZWx5LlxuXG4gICAgLy8gZmluZCB0aGUgZmlyc3QgaW5zdGFuY2Ugb2YgYW55IGhvc3RFbmRpbmdDaGFyc1xuICAgIHZhciBob3N0RW5kID0gLTE7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBob3N0RW5kaW5nQ2hhcnMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBoZWMgPSByZXN0LmluZGV4T2YoaG9zdEVuZGluZ0NoYXJzW2ldKTtcbiAgICAgIGlmIChoZWMgIT09IC0xICYmIChob3N0RW5kID09PSAtMSB8fCBoZWMgPCBob3N0RW5kKSlcbiAgICAgICAgaG9zdEVuZCA9IGhlYztcbiAgICB9XG5cbiAgICAvLyBhdCB0aGlzIHBvaW50LCBlaXRoZXIgd2UgaGF2ZSBhbiBleHBsaWNpdCBwb2ludCB3aGVyZSB0aGVcbiAgICAvLyBhdXRoIHBvcnRpb24gY2Fubm90IGdvIHBhc3QsIG9yIHRoZSBsYXN0IEAgY2hhciBpcyB0aGUgZGVjaWRlci5cbiAgICB2YXIgYXV0aCwgYXRTaWduO1xuICAgIGlmIChob3N0RW5kID09PSAtMSkge1xuICAgICAgLy8gYXRTaWduIGNhbiBiZSBhbnl3aGVyZS5cbiAgICAgIGF0U2lnbiA9IHJlc3QubGFzdEluZGV4T2YoJ0AnKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gYXRTaWduIG11c3QgYmUgaW4gYXV0aCBwb3J0aW9uLlxuICAgICAgLy8gaHR0cDovL2FAYi9jQGQgPT4gaG9zdDpiIGF1dGg6YSBwYXRoOi9jQGRcbiAgICAgIGF0U2lnbiA9IHJlc3QubGFzdEluZGV4T2YoJ0AnLCBob3N0RW5kKTtcbiAgICB9XG5cbiAgICAvLyBOb3cgd2UgaGF2ZSBhIHBvcnRpb24gd2hpY2ggaXMgZGVmaW5pdGVseSB0aGUgYXV0aC5cbiAgICAvLyBQdWxsIHRoYXQgb2ZmLlxuICAgIGlmIChhdFNpZ24gIT09IC0xKSB7XG4gICAgICBhdXRoID0gcmVzdC5zbGljZSgwLCBhdFNpZ24pO1xuICAgICAgcmVzdCA9IHJlc3Quc2xpY2UoYXRTaWduICsgMSk7XG4gICAgICB0aGlzLmF1dGggPSBkZWNvZGVVUklDb21wb25lbnQoYXV0aCk7XG4gICAgfVxuXG4gICAgLy8gdGhlIGhvc3QgaXMgdGhlIHJlbWFpbmluZyB0byB0aGUgbGVmdCBvZiB0aGUgZmlyc3Qgbm9uLWhvc3QgY2hhclxuICAgIGhvc3RFbmQgPSAtMTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG5vbkhvc3RDaGFycy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGhlYyA9IHJlc3QuaW5kZXhPZihub25Ib3N0Q2hhcnNbaV0pO1xuICAgICAgaWYgKGhlYyAhPT0gLTEgJiYgKGhvc3RFbmQgPT09IC0xIHx8IGhlYyA8IGhvc3RFbmQpKVxuICAgICAgICBob3N0RW5kID0gaGVjO1xuICAgIH1cbiAgICAvLyBpZiB3ZSBzdGlsbCBoYXZlIG5vdCBoaXQgaXQsIHRoZW4gdGhlIGVudGlyZSB0aGluZyBpcyBhIGhvc3QuXG4gICAgaWYgKGhvc3RFbmQgPT09IC0xKVxuICAgICAgaG9zdEVuZCA9IHJlc3QubGVuZ3RoO1xuXG4gICAgdGhpcy5ob3N0ID0gcmVzdC5zbGljZSgwLCBob3N0RW5kKTtcbiAgICByZXN0ID0gcmVzdC5zbGljZShob3N0RW5kKTtcblxuICAgIC8vIHB1bGwgb3V0IHBvcnQuXG4gICAgdGhpcy5wYXJzZUhvc3QoKTtcblxuICAgIC8vIHdlJ3ZlIGluZGljYXRlZCB0aGF0IHRoZXJlIGlzIGEgaG9zdG5hbWUsXG4gICAgLy8gc28gZXZlbiBpZiBpdCdzIGVtcHR5LCBpdCBoYXMgdG8gYmUgcHJlc2VudC5cbiAgICB0aGlzLmhvc3RuYW1lID0gdGhpcy5ob3N0bmFtZSB8fCAnJztcblxuICAgIC8vIGlmIGhvc3RuYW1lIGJlZ2lucyB3aXRoIFsgYW5kIGVuZHMgd2l0aCBdXG4gICAgLy8gYXNzdW1lIHRoYXQgaXQncyBhbiBJUHY2IGFkZHJlc3MuXG4gICAgdmFyIGlwdjZIb3N0bmFtZSA9IHRoaXMuaG9zdG5hbWVbMF0gPT09ICdbJyAmJlxuICAgICAgICB0aGlzLmhvc3RuYW1lW3RoaXMuaG9zdG5hbWUubGVuZ3RoIC0gMV0gPT09ICddJztcblxuICAgIC8vIHZhbGlkYXRlIGEgbGl0dGxlLlxuICAgIGlmICghaXB2Nkhvc3RuYW1lKSB7XG4gICAgICB2YXIgaG9zdHBhcnRzID0gdGhpcy5ob3N0bmFtZS5zcGxpdCgvXFwuLyk7XG4gICAgICBmb3IgKHZhciBpID0gMCwgbCA9IGhvc3RwYXJ0cy5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICAgICAgdmFyIHBhcnQgPSBob3N0cGFydHNbaV07XG4gICAgICAgIGlmICghcGFydCkgY29udGludWU7XG4gICAgICAgIGlmICghcGFydC5tYXRjaChob3N0bmFtZVBhcnRQYXR0ZXJuKSkge1xuICAgICAgICAgIHZhciBuZXdwYXJ0ID0gJyc7XG4gICAgICAgICAgZm9yICh2YXIgaiA9IDAsIGsgPSBwYXJ0Lmxlbmd0aDsgaiA8IGs7IGorKykge1xuICAgICAgICAgICAgaWYgKHBhcnQuY2hhckNvZGVBdChqKSA+IDEyNykge1xuICAgICAgICAgICAgICAvLyB3ZSByZXBsYWNlIG5vbi1BU0NJSSBjaGFyIHdpdGggYSB0ZW1wb3JhcnkgcGxhY2Vob2xkZXJcbiAgICAgICAgICAgICAgLy8gd2UgbmVlZCB0aGlzIHRvIG1ha2Ugc3VyZSBzaXplIG9mIGhvc3RuYW1lIGlzIG5vdFxuICAgICAgICAgICAgICAvLyBicm9rZW4gYnkgcmVwbGFjaW5nIG5vbi1BU0NJSSBieSBub3RoaW5nXG4gICAgICAgICAgICAgIG5ld3BhcnQgKz0gJ3gnO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgbmV3cGFydCArPSBwYXJ0W2pdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICAvLyB3ZSB0ZXN0IGFnYWluIHdpdGggQVNDSUkgY2hhciBvbmx5XG4gICAgICAgICAgaWYgKCFuZXdwYXJ0Lm1hdGNoKGhvc3RuYW1lUGFydFBhdHRlcm4pKSB7XG4gICAgICAgICAgICB2YXIgdmFsaWRQYXJ0cyA9IGhvc3RwYXJ0cy5zbGljZSgwLCBpKTtcbiAgICAgICAgICAgIHZhciBub3RIb3N0ID0gaG9zdHBhcnRzLnNsaWNlKGkgKyAxKTtcbiAgICAgICAgICAgIHZhciBiaXQgPSBwYXJ0Lm1hdGNoKGhvc3RuYW1lUGFydFN0YXJ0KTtcbiAgICAgICAgICAgIGlmIChiaXQpIHtcbiAgICAgICAgICAgICAgdmFsaWRQYXJ0cy5wdXNoKGJpdFsxXSk7XG4gICAgICAgICAgICAgIG5vdEhvc3QudW5zaGlmdChiaXRbMl0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKG5vdEhvc3QubGVuZ3RoKSB7XG4gICAgICAgICAgICAgIHJlc3QgPSAnLycgKyBub3RIb3N0LmpvaW4oJy4nKSArIHJlc3Q7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmhvc3RuYW1lID0gdmFsaWRQYXJ0cy5qb2luKCcuJyk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodGhpcy5ob3N0bmFtZS5sZW5ndGggPiBob3N0bmFtZU1heExlbikge1xuICAgICAgdGhpcy5ob3N0bmFtZSA9ICcnO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBob3N0bmFtZXMgYXJlIGFsd2F5cyBsb3dlciBjYXNlLlxuICAgICAgdGhpcy5ob3N0bmFtZSA9IHRoaXMuaG9zdG5hbWUudG9Mb3dlckNhc2UoKTtcbiAgICB9XG5cbiAgICBpZiAoIWlwdjZIb3N0bmFtZSkge1xuICAgICAgLy8gSUROQSBTdXBwb3J0OiBSZXR1cm5zIGEgcHVueSBjb2RlZCByZXByZXNlbnRhdGlvbiBvZiBcImRvbWFpblwiLlxuICAgICAgLy8gSXQgb25seSBjb252ZXJ0cyB0aGUgcGFydCBvZiB0aGUgZG9tYWluIG5hbWUgdGhhdFxuICAgICAgLy8gaGFzIG5vbiBBU0NJSSBjaGFyYWN0ZXJzLiBJLmUuIGl0IGRvc2VudCBtYXR0ZXIgaWZcbiAgICAgIC8vIHlvdSBjYWxsIGl0IHdpdGggYSBkb21haW4gdGhhdCBhbHJlYWR5IGlzIGluIEFTQ0lJLlxuICAgICAgdmFyIGRvbWFpbkFycmF5ID0gdGhpcy5ob3N0bmFtZS5zcGxpdCgnLicpO1xuICAgICAgdmFyIG5ld091dCA9IFtdO1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBkb21haW5BcnJheS5sZW5ndGg7ICsraSkge1xuICAgICAgICB2YXIgcyA9IGRvbWFpbkFycmF5W2ldO1xuICAgICAgICBuZXdPdXQucHVzaChzLm1hdGNoKC9bXkEtWmEtejAtOV8tXS8pID9cbiAgICAgICAgICAgICd4bi0tJyArIHB1bnljb2RlLmVuY29kZShzKSA6IHMpO1xuICAgICAgfVxuICAgICAgdGhpcy5ob3N0bmFtZSA9IG5ld091dC5qb2luKCcuJyk7XG4gICAgfVxuXG4gICAgdmFyIHAgPSB0aGlzLnBvcnQgPyAnOicgKyB0aGlzLnBvcnQgOiAnJztcbiAgICB2YXIgaCA9IHRoaXMuaG9zdG5hbWUgfHwgJyc7XG4gICAgdGhpcy5ob3N0ID0gaCArIHA7XG4gICAgdGhpcy5ocmVmICs9IHRoaXMuaG9zdDtcblxuICAgIC8vIHN0cmlwIFsgYW5kIF0gZnJvbSB0aGUgaG9zdG5hbWVcbiAgICAvLyB0aGUgaG9zdCBmaWVsZCBzdGlsbCByZXRhaW5zIHRoZW0sIHRob3VnaFxuICAgIGlmIChpcHY2SG9zdG5hbWUpIHtcbiAgICAgIHRoaXMuaG9zdG5hbWUgPSB0aGlzLmhvc3RuYW1lLnN1YnN0cigxLCB0aGlzLmhvc3RuYW1lLmxlbmd0aCAtIDIpO1xuICAgICAgaWYgKHJlc3RbMF0gIT09ICcvJykge1xuICAgICAgICByZXN0ID0gJy8nICsgcmVzdDtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyBub3cgcmVzdCBpcyBzZXQgdG8gdGhlIHBvc3QtaG9zdCBzdHVmZi5cbiAgLy8gY2hvcCBvZmYgYW55IGRlbGltIGNoYXJzLlxuICBpZiAoIXVuc2FmZVByb3RvY29sW2xvd2VyUHJvdG9dKSB7XG5cbiAgICAvLyBGaXJzdCwgbWFrZSAxMDAlIHN1cmUgdGhhdCBhbnkgXCJhdXRvRXNjYXBlXCIgY2hhcnMgZ2V0XG4gICAgLy8gZXNjYXBlZCwgZXZlbiBpZiBlbmNvZGVVUklDb21wb25lbnQgZG9lc24ndCB0aGluayB0aGV5XG4gICAgLy8gbmVlZCB0byBiZS5cbiAgICBmb3IgKHZhciBpID0gMCwgbCA9IGF1dG9Fc2NhcGUubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgICB2YXIgYWUgPSBhdXRvRXNjYXBlW2ldO1xuICAgICAgdmFyIGVzYyA9IGVuY29kZVVSSUNvbXBvbmVudChhZSk7XG4gICAgICBpZiAoZXNjID09PSBhZSkge1xuICAgICAgICBlc2MgPSBlc2NhcGUoYWUpO1xuICAgICAgfVxuICAgICAgcmVzdCA9IHJlc3Quc3BsaXQoYWUpLmpvaW4oZXNjKTtcbiAgICB9XG4gIH1cblxuXG4gIC8vIGNob3Agb2ZmIGZyb20gdGhlIHRhaWwgZmlyc3QuXG4gIHZhciBoYXNoID0gcmVzdC5pbmRleE9mKCcjJyk7XG4gIGlmIChoYXNoICE9PSAtMSkge1xuICAgIC8vIGdvdCBhIGZyYWdtZW50IHN0cmluZy5cbiAgICB0aGlzLmhhc2ggPSByZXN0LnN1YnN0cihoYXNoKTtcbiAgICByZXN0ID0gcmVzdC5zbGljZSgwLCBoYXNoKTtcbiAgfVxuICB2YXIgcW0gPSByZXN0LmluZGV4T2YoJz8nKTtcbiAgaWYgKHFtICE9PSAtMSkge1xuICAgIHRoaXMuc2VhcmNoID0gcmVzdC5zdWJzdHIocW0pO1xuICAgIHRoaXMucXVlcnkgPSByZXN0LnN1YnN0cihxbSArIDEpO1xuICAgIGlmIChwYXJzZVF1ZXJ5U3RyaW5nKSB7XG4gICAgICB0aGlzLnF1ZXJ5ID0gcXVlcnlzdHJpbmcucGFyc2UodGhpcy5xdWVyeSk7XG4gICAgfVxuICAgIHJlc3QgPSByZXN0LnNsaWNlKDAsIHFtKTtcbiAgfSBlbHNlIGlmIChwYXJzZVF1ZXJ5U3RyaW5nKSB7XG4gICAgLy8gbm8gcXVlcnkgc3RyaW5nLCBidXQgcGFyc2VRdWVyeVN0cmluZyBzdGlsbCByZXF1ZXN0ZWRcbiAgICB0aGlzLnNlYXJjaCA9ICcnO1xuICAgIHRoaXMucXVlcnkgPSB7fTtcbiAgfVxuICBpZiAocmVzdCkgdGhpcy5wYXRobmFtZSA9IHJlc3Q7XG4gIGlmIChzbGFzaGVkUHJvdG9jb2xbbG93ZXJQcm90b10gJiZcbiAgICAgIHRoaXMuaG9zdG5hbWUgJiYgIXRoaXMucGF0aG5hbWUpIHtcbiAgICB0aGlzLnBhdGhuYW1lID0gJy8nO1xuICB9XG5cbiAgLy90byBzdXBwb3J0IGh0dHAucmVxdWVzdFxuICBpZiAodGhpcy5wYXRobmFtZSB8fCB0aGlzLnNlYXJjaCkge1xuICAgIHZhciBwID0gdGhpcy5wYXRobmFtZSB8fCAnJztcbiAgICB2YXIgcyA9IHRoaXMuc2VhcmNoIHx8ICcnO1xuICAgIHRoaXMucGF0aCA9IHAgKyBzO1xuICB9XG5cbiAgLy8gZmluYWxseSwgcmVjb25zdHJ1Y3QgdGhlIGhyZWYgYmFzZWQgb24gd2hhdCBoYXMgYmVlbiB2YWxpZGF0ZWQuXG4gIHRoaXMuaHJlZiA9IHRoaXMuZm9ybWF0KCk7XG4gIHJldHVybiB0aGlzO1xufTtcblxuLy8gZm9ybWF0IGEgcGFyc2VkIG9iamVjdCBpbnRvIGEgdXJsIHN0cmluZ1xuZnVuY3Rpb24gdXJsRm9ybWF0KG9iaikge1xuICAvLyBlbnN1cmUgaXQncyBhbiBvYmplY3QsIGFuZCBub3QgYSBzdHJpbmcgdXJsLlxuICAvLyBJZiBpdCdzIGFuIG9iaiwgdGhpcyBpcyBhIG5vLW9wLlxuICAvLyB0aGlzIHdheSwgeW91IGNhbiBjYWxsIHVybF9mb3JtYXQoKSBvbiBzdHJpbmdzXG4gIC8vIHRvIGNsZWFuIHVwIHBvdGVudGlhbGx5IHdvbmt5IHVybHMuXG4gIGlmIChpc1N0cmluZyhvYmopKSBvYmogPSB1cmxQYXJzZShvYmopO1xuICBpZiAoIShvYmogaW5zdGFuY2VvZiBVcmwpKSByZXR1cm4gVXJsLnByb3RvdHlwZS5mb3JtYXQuY2FsbChvYmopO1xuICByZXR1cm4gb2JqLmZvcm1hdCgpO1xufVxuXG5VcmwucHJvdG90eXBlLmZvcm1hdCA9IGZ1bmN0aW9uKCkge1xuICB2YXIgYXV0aCA9IHRoaXMuYXV0aCB8fCAnJztcbiAgaWYgKGF1dGgpIHtcbiAgICBhdXRoID0gZW5jb2RlVVJJQ29tcG9uZW50KGF1dGgpO1xuICAgIGF1dGggPSBhdXRoLnJlcGxhY2UoLyUzQS9pLCAnOicpO1xuICAgIGF1dGggKz0gJ0AnO1xuICB9XG5cbiAgdmFyIHByb3RvY29sID0gdGhpcy5wcm90b2NvbCB8fCAnJyxcbiAgICAgIHBhdGhuYW1lID0gdGhpcy5wYXRobmFtZSB8fCAnJyxcbiAgICAgIGhhc2ggPSB0aGlzLmhhc2ggfHwgJycsXG4gICAgICBob3N0ID0gZmFsc2UsXG4gICAgICBxdWVyeSA9ICcnO1xuXG4gIGlmICh0aGlzLmhvc3QpIHtcbiAgICBob3N0ID0gYXV0aCArIHRoaXMuaG9zdDtcbiAgfSBlbHNlIGlmICh0aGlzLmhvc3RuYW1lKSB7XG4gICAgaG9zdCA9IGF1dGggKyAodGhpcy5ob3N0bmFtZS5pbmRleE9mKCc6JykgPT09IC0xID9cbiAgICAgICAgdGhpcy5ob3N0bmFtZSA6XG4gICAgICAgICdbJyArIHRoaXMuaG9zdG5hbWUgKyAnXScpO1xuICAgIGlmICh0aGlzLnBvcnQpIHtcbiAgICAgIGhvc3QgKz0gJzonICsgdGhpcy5wb3J0O1xuICAgIH1cbiAgfVxuXG4gIGlmICh0aGlzLnF1ZXJ5ICYmXG4gICAgICBpc09iamVjdCh0aGlzLnF1ZXJ5KSAmJlxuICAgICAgT2JqZWN0LmtleXModGhpcy5xdWVyeSkubGVuZ3RoKSB7XG4gICAgcXVlcnkgPSBxdWVyeXN0cmluZy5zdHJpbmdpZnkodGhpcy5xdWVyeSk7XG4gIH1cblxuICB2YXIgc2VhcmNoID0gdGhpcy5zZWFyY2ggfHwgKHF1ZXJ5ICYmICgnPycgKyBxdWVyeSkpIHx8ICcnO1xuXG4gIGlmIChwcm90b2NvbCAmJiBwcm90b2NvbC5zdWJzdHIoLTEpICE9PSAnOicpIHByb3RvY29sICs9ICc6JztcblxuICAvLyBvbmx5IHRoZSBzbGFzaGVkUHJvdG9jb2xzIGdldCB0aGUgLy8uICBOb3QgbWFpbHRvOiwgeG1wcDosIGV0Yy5cbiAgLy8gdW5sZXNzIHRoZXkgaGFkIHRoZW0gdG8gYmVnaW4gd2l0aC5cbiAgaWYgKHRoaXMuc2xhc2hlcyB8fFxuICAgICAgKCFwcm90b2NvbCB8fCBzbGFzaGVkUHJvdG9jb2xbcHJvdG9jb2xdKSAmJiBob3N0ICE9PSBmYWxzZSkge1xuICAgIGhvc3QgPSAnLy8nICsgKGhvc3QgfHwgJycpO1xuICAgIGlmIChwYXRobmFtZSAmJiBwYXRobmFtZS5jaGFyQXQoMCkgIT09ICcvJykgcGF0aG5hbWUgPSAnLycgKyBwYXRobmFtZTtcbiAgfSBlbHNlIGlmICghaG9zdCkge1xuICAgIGhvc3QgPSAnJztcbiAgfVxuXG4gIGlmIChoYXNoICYmIGhhc2guY2hhckF0KDApICE9PSAnIycpIGhhc2ggPSAnIycgKyBoYXNoO1xuICBpZiAoc2VhcmNoICYmIHNlYXJjaC5jaGFyQXQoMCkgIT09ICc/Jykgc2VhcmNoID0gJz8nICsgc2VhcmNoO1xuXG4gIHBhdGhuYW1lID0gcGF0aG5hbWUucmVwbGFjZSgvWz8jXS9nLCBmdW5jdGlvbihtYXRjaCkge1xuICAgIHJldHVybiBlbmNvZGVVUklDb21wb25lbnQobWF0Y2gpO1xuICB9KTtcbiAgc2VhcmNoID0gc2VhcmNoLnJlcGxhY2UoJyMnLCAnJTIzJyk7XG5cbiAgcmV0dXJuIHByb3RvY29sICsgaG9zdCArIHBhdGhuYW1lICsgc2VhcmNoICsgaGFzaDtcbn07XG5cbmZ1bmN0aW9uIHVybFJlc29sdmUoc291cmNlLCByZWxhdGl2ZSkge1xuICByZXR1cm4gdXJsUGFyc2Uoc291cmNlLCBmYWxzZSwgdHJ1ZSkucmVzb2x2ZShyZWxhdGl2ZSk7XG59XG5cblVybC5wcm90b3R5cGUucmVzb2x2ZSA9IGZ1bmN0aW9uKHJlbGF0aXZlKSB7XG4gIHJldHVybiB0aGlzLnJlc29sdmVPYmplY3QodXJsUGFyc2UocmVsYXRpdmUsIGZhbHNlLCB0cnVlKSkuZm9ybWF0KCk7XG59O1xuXG5mdW5jdGlvbiB1cmxSZXNvbHZlT2JqZWN0KHNvdXJjZSwgcmVsYXRpdmUpIHtcbiAgaWYgKCFzb3VyY2UpIHJldHVybiByZWxhdGl2ZTtcbiAgcmV0dXJuIHVybFBhcnNlKHNvdXJjZSwgZmFsc2UsIHRydWUpLnJlc29sdmVPYmplY3QocmVsYXRpdmUpO1xufVxuXG5VcmwucHJvdG90eXBlLnJlc29sdmVPYmplY3QgPSBmdW5jdGlvbihyZWxhdGl2ZSkge1xuICBpZiAoaXNTdHJpbmcocmVsYXRpdmUpKSB7XG4gICAgdmFyIHJlbCA9IG5ldyBVcmwoKTtcbiAgICByZWwucGFyc2UocmVsYXRpdmUsIGZhbHNlLCB0cnVlKTtcbiAgICByZWxhdGl2ZSA9IHJlbDtcbiAgfVxuXG4gIHZhciByZXN1bHQgPSBuZXcgVXJsKCk7XG4gIE9iamVjdC5rZXlzKHRoaXMpLmZvckVhY2goZnVuY3Rpb24oaykge1xuICAgIHJlc3VsdFtrXSA9IHRoaXNba107XG4gIH0sIHRoaXMpO1xuXG4gIC8vIGhhc2ggaXMgYWx3YXlzIG92ZXJyaWRkZW4sIG5vIG1hdHRlciB3aGF0LlxuICAvLyBldmVuIGhyZWY9XCJcIiB3aWxsIHJlbW92ZSBpdC5cbiAgcmVzdWx0Lmhhc2ggPSByZWxhdGl2ZS5oYXNoO1xuXG4gIC8vIGlmIHRoZSByZWxhdGl2ZSB1cmwgaXMgZW1wdHksIHRoZW4gdGhlcmUncyBub3RoaW5nIGxlZnQgdG8gZG8gaGVyZS5cbiAgaWYgKHJlbGF0aXZlLmhyZWYgPT09ICcnKSB7XG4gICAgcmVzdWx0LmhyZWYgPSByZXN1bHQuZm9ybWF0KCk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIC8vIGhyZWZzIGxpa2UgLy9mb28vYmFyIGFsd2F5cyBjdXQgdG8gdGhlIHByb3RvY29sLlxuICBpZiAocmVsYXRpdmUuc2xhc2hlcyAmJiAhcmVsYXRpdmUucHJvdG9jb2wpIHtcbiAgICAvLyB0YWtlIGV2ZXJ5dGhpbmcgZXhjZXB0IHRoZSBwcm90b2NvbCBmcm9tIHJlbGF0aXZlXG4gICAgT2JqZWN0LmtleXMocmVsYXRpdmUpLmZvckVhY2goZnVuY3Rpb24oaykge1xuICAgICAgaWYgKGsgIT09ICdwcm90b2NvbCcpXG4gICAgICAgIHJlc3VsdFtrXSA9IHJlbGF0aXZlW2tdO1xuICAgIH0pO1xuXG4gICAgLy91cmxQYXJzZSBhcHBlbmRzIHRyYWlsaW5nIC8gdG8gdXJscyBsaWtlIGh0dHA6Ly93d3cuZXhhbXBsZS5jb21cbiAgICBpZiAoc2xhc2hlZFByb3RvY29sW3Jlc3VsdC5wcm90b2NvbF0gJiZcbiAgICAgICAgcmVzdWx0Lmhvc3RuYW1lICYmICFyZXN1bHQucGF0aG5hbWUpIHtcbiAgICAgIHJlc3VsdC5wYXRoID0gcmVzdWx0LnBhdGhuYW1lID0gJy8nO1xuICAgIH1cblxuICAgIHJlc3VsdC5ocmVmID0gcmVzdWx0LmZvcm1hdCgpO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICBpZiAocmVsYXRpdmUucHJvdG9jb2wgJiYgcmVsYXRpdmUucHJvdG9jb2wgIT09IHJlc3VsdC5wcm90b2NvbCkge1xuICAgIC8vIGlmIGl0J3MgYSBrbm93biB1cmwgcHJvdG9jb2wsIHRoZW4gY2hhbmdpbmdcbiAgICAvLyB0aGUgcHJvdG9jb2wgZG9lcyB3ZWlyZCB0aGluZ3NcbiAgICAvLyBmaXJzdCwgaWYgaXQncyBub3QgZmlsZTosIHRoZW4gd2UgTVVTVCBoYXZlIGEgaG9zdCxcbiAgICAvLyBhbmQgaWYgdGhlcmUgd2FzIGEgcGF0aFxuICAgIC8vIHRvIGJlZ2luIHdpdGgsIHRoZW4gd2UgTVVTVCBoYXZlIGEgcGF0aC5cbiAgICAvLyBpZiBpdCBpcyBmaWxlOiwgdGhlbiB0aGUgaG9zdCBpcyBkcm9wcGVkLFxuICAgIC8vIGJlY2F1c2UgdGhhdCdzIGtub3duIHRvIGJlIGhvc3RsZXNzLlxuICAgIC8vIGFueXRoaW5nIGVsc2UgaXMgYXNzdW1lZCB0byBiZSBhYnNvbHV0ZS5cbiAgICBpZiAoIXNsYXNoZWRQcm90b2NvbFtyZWxhdGl2ZS5wcm90b2NvbF0pIHtcbiAgICAgIE9iamVjdC5rZXlzKHJlbGF0aXZlKS5mb3JFYWNoKGZ1bmN0aW9uKGspIHtcbiAgICAgICAgcmVzdWx0W2tdID0gcmVsYXRpdmVba107XG4gICAgICB9KTtcbiAgICAgIHJlc3VsdC5ocmVmID0gcmVzdWx0LmZvcm1hdCgpO1xuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICByZXN1bHQucHJvdG9jb2wgPSByZWxhdGl2ZS5wcm90b2NvbDtcbiAgICBpZiAoIXJlbGF0aXZlLmhvc3QgJiYgIWhvc3RsZXNzUHJvdG9jb2xbcmVsYXRpdmUucHJvdG9jb2xdKSB7XG4gICAgICB2YXIgcmVsUGF0aCA9IChyZWxhdGl2ZS5wYXRobmFtZSB8fCAnJykuc3BsaXQoJy8nKTtcbiAgICAgIHdoaWxlIChyZWxQYXRoLmxlbmd0aCAmJiAhKHJlbGF0aXZlLmhvc3QgPSByZWxQYXRoLnNoaWZ0KCkpKTtcbiAgICAgIGlmICghcmVsYXRpdmUuaG9zdCkgcmVsYXRpdmUuaG9zdCA9ICcnO1xuICAgICAgaWYgKCFyZWxhdGl2ZS5ob3N0bmFtZSkgcmVsYXRpdmUuaG9zdG5hbWUgPSAnJztcbiAgICAgIGlmIChyZWxQYXRoWzBdICE9PSAnJykgcmVsUGF0aC51bnNoaWZ0KCcnKTtcbiAgICAgIGlmIChyZWxQYXRoLmxlbmd0aCA8IDIpIHJlbFBhdGgudW5zaGlmdCgnJyk7XG4gICAgICByZXN1bHQucGF0aG5hbWUgPSByZWxQYXRoLmpvaW4oJy8nKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmVzdWx0LnBhdGhuYW1lID0gcmVsYXRpdmUucGF0aG5hbWU7XG4gICAgfVxuICAgIHJlc3VsdC5zZWFyY2ggPSByZWxhdGl2ZS5zZWFyY2g7XG4gICAgcmVzdWx0LnF1ZXJ5ID0gcmVsYXRpdmUucXVlcnk7XG4gICAgcmVzdWx0Lmhvc3QgPSByZWxhdGl2ZS5ob3N0IHx8ICcnO1xuICAgIHJlc3VsdC5hdXRoID0gcmVsYXRpdmUuYXV0aDtcbiAgICByZXN1bHQuaG9zdG5hbWUgPSByZWxhdGl2ZS5ob3N0bmFtZSB8fCByZWxhdGl2ZS5ob3N0O1xuICAgIHJlc3VsdC5wb3J0ID0gcmVsYXRpdmUucG9ydDtcbiAgICAvLyB0byBzdXBwb3J0IGh0dHAucmVxdWVzdFxuICAgIGlmIChyZXN1bHQucGF0aG5hbWUgfHwgcmVzdWx0LnNlYXJjaCkge1xuICAgICAgdmFyIHAgPSByZXN1bHQucGF0aG5hbWUgfHwgJyc7XG4gICAgICB2YXIgcyA9IHJlc3VsdC5zZWFyY2ggfHwgJyc7XG4gICAgICByZXN1bHQucGF0aCA9IHAgKyBzO1xuICAgIH1cbiAgICByZXN1bHQuc2xhc2hlcyA9IHJlc3VsdC5zbGFzaGVzIHx8IHJlbGF0aXZlLnNsYXNoZXM7XG4gICAgcmVzdWx0LmhyZWYgPSByZXN1bHQuZm9ybWF0KCk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIHZhciBpc1NvdXJjZUFicyA9IChyZXN1bHQucGF0aG5hbWUgJiYgcmVzdWx0LnBhdGhuYW1lLmNoYXJBdCgwKSA9PT0gJy8nKSxcbiAgICAgIGlzUmVsQWJzID0gKFxuICAgICAgICAgIHJlbGF0aXZlLmhvc3QgfHxcbiAgICAgICAgICByZWxhdGl2ZS5wYXRobmFtZSAmJiByZWxhdGl2ZS5wYXRobmFtZS5jaGFyQXQoMCkgPT09ICcvJ1xuICAgICAgKSxcbiAgICAgIG11c3RFbmRBYnMgPSAoaXNSZWxBYnMgfHwgaXNTb3VyY2VBYnMgfHxcbiAgICAgICAgICAgICAgICAgICAgKHJlc3VsdC5ob3N0ICYmIHJlbGF0aXZlLnBhdGhuYW1lKSksXG4gICAgICByZW1vdmVBbGxEb3RzID0gbXVzdEVuZEFicyxcbiAgICAgIHNyY1BhdGggPSByZXN1bHQucGF0aG5hbWUgJiYgcmVzdWx0LnBhdGhuYW1lLnNwbGl0KCcvJykgfHwgW10sXG4gICAgICByZWxQYXRoID0gcmVsYXRpdmUucGF0aG5hbWUgJiYgcmVsYXRpdmUucGF0aG5hbWUuc3BsaXQoJy8nKSB8fCBbXSxcbiAgICAgIHBzeWNob3RpYyA9IHJlc3VsdC5wcm90b2NvbCAmJiAhc2xhc2hlZFByb3RvY29sW3Jlc3VsdC5wcm90b2NvbF07XG5cbiAgLy8gaWYgdGhlIHVybCBpcyBhIG5vbi1zbGFzaGVkIHVybCwgdGhlbiByZWxhdGl2ZVxuICAvLyBsaW5rcyBsaWtlIC4uLy4uIHNob3VsZCBiZSBhYmxlXG4gIC8vIHRvIGNyYXdsIHVwIHRvIHRoZSBob3N0bmFtZSwgYXMgd2VsbC4gIFRoaXMgaXMgc3RyYW5nZS5cbiAgLy8gcmVzdWx0LnByb3RvY29sIGhhcyBhbHJlYWR5IGJlZW4gc2V0IGJ5IG5vdy5cbiAgLy8gTGF0ZXIgb24sIHB1dCB0aGUgZmlyc3QgcGF0aCBwYXJ0IGludG8gdGhlIGhvc3QgZmllbGQuXG4gIGlmIChwc3ljaG90aWMpIHtcbiAgICByZXN1bHQuaG9zdG5hbWUgPSAnJztcbiAgICByZXN1bHQucG9ydCA9IG51bGw7XG4gICAgaWYgKHJlc3VsdC5ob3N0KSB7XG4gICAgICBpZiAoc3JjUGF0aFswXSA9PT0gJycpIHNyY1BhdGhbMF0gPSByZXN1bHQuaG9zdDtcbiAgICAgIGVsc2Ugc3JjUGF0aC51bnNoaWZ0KHJlc3VsdC5ob3N0KTtcbiAgICB9XG4gICAgcmVzdWx0Lmhvc3QgPSAnJztcbiAgICBpZiAocmVsYXRpdmUucHJvdG9jb2wpIHtcbiAgICAgIHJlbGF0aXZlLmhvc3RuYW1lID0gbnVsbDtcbiAgICAgIHJlbGF0aXZlLnBvcnQgPSBudWxsO1xuICAgICAgaWYgKHJlbGF0aXZlLmhvc3QpIHtcbiAgICAgICAgaWYgKHJlbFBhdGhbMF0gPT09ICcnKSByZWxQYXRoWzBdID0gcmVsYXRpdmUuaG9zdDtcbiAgICAgICAgZWxzZSByZWxQYXRoLnVuc2hpZnQocmVsYXRpdmUuaG9zdCk7XG4gICAgICB9XG4gICAgICByZWxhdGl2ZS5ob3N0ID0gbnVsbDtcbiAgICB9XG4gICAgbXVzdEVuZEFicyA9IG11c3RFbmRBYnMgJiYgKHJlbFBhdGhbMF0gPT09ICcnIHx8IHNyY1BhdGhbMF0gPT09ICcnKTtcbiAgfVxuXG4gIGlmIChpc1JlbEFicykge1xuICAgIC8vIGl0J3MgYWJzb2x1dGUuXG4gICAgcmVzdWx0Lmhvc3QgPSAocmVsYXRpdmUuaG9zdCB8fCByZWxhdGl2ZS5ob3N0ID09PSAnJykgP1xuICAgICAgICAgICAgICAgICAgcmVsYXRpdmUuaG9zdCA6IHJlc3VsdC5ob3N0O1xuICAgIHJlc3VsdC5ob3N0bmFtZSA9IChyZWxhdGl2ZS5ob3N0bmFtZSB8fCByZWxhdGl2ZS5ob3N0bmFtZSA9PT0gJycpID9cbiAgICAgICAgICAgICAgICAgICAgICByZWxhdGl2ZS5ob3N0bmFtZSA6IHJlc3VsdC5ob3N0bmFtZTtcbiAgICByZXN1bHQuc2VhcmNoID0gcmVsYXRpdmUuc2VhcmNoO1xuICAgIHJlc3VsdC5xdWVyeSA9IHJlbGF0aXZlLnF1ZXJ5O1xuICAgIHNyY1BhdGggPSByZWxQYXRoO1xuICAgIC8vIGZhbGwgdGhyb3VnaCB0byB0aGUgZG90LWhhbmRsaW5nIGJlbG93LlxuICB9IGVsc2UgaWYgKHJlbFBhdGgubGVuZ3RoKSB7XG4gICAgLy8gaXQncyByZWxhdGl2ZVxuICAgIC8vIHRocm93IGF3YXkgdGhlIGV4aXN0aW5nIGZpbGUsIGFuZCB0YWtlIHRoZSBuZXcgcGF0aCBpbnN0ZWFkLlxuICAgIGlmICghc3JjUGF0aCkgc3JjUGF0aCA9IFtdO1xuICAgIHNyY1BhdGgucG9wKCk7XG4gICAgc3JjUGF0aCA9IHNyY1BhdGguY29uY2F0KHJlbFBhdGgpO1xuICAgIHJlc3VsdC5zZWFyY2ggPSByZWxhdGl2ZS5zZWFyY2g7XG4gICAgcmVzdWx0LnF1ZXJ5ID0gcmVsYXRpdmUucXVlcnk7XG4gIH0gZWxzZSBpZiAoIWlzTnVsbE9yVW5kZWZpbmVkKHJlbGF0aXZlLnNlYXJjaCkpIHtcbiAgICAvLyBqdXN0IHB1bGwgb3V0IHRoZSBzZWFyY2guXG4gICAgLy8gbGlrZSBocmVmPSc/Zm9vJy5cbiAgICAvLyBQdXQgdGhpcyBhZnRlciB0aGUgb3RoZXIgdHdvIGNhc2VzIGJlY2F1c2UgaXQgc2ltcGxpZmllcyB0aGUgYm9vbGVhbnNcbiAgICBpZiAocHN5Y2hvdGljKSB7XG4gICAgICByZXN1bHQuaG9zdG5hbWUgPSByZXN1bHQuaG9zdCA9IHNyY1BhdGguc2hpZnQoKTtcbiAgICAgIC8vb2NjYXRpb25hbHkgdGhlIGF1dGggY2FuIGdldCBzdHVjayBvbmx5IGluIGhvc3RcbiAgICAgIC8vdGhpcyBlc3BlY2lhbHkgaGFwcGVucyBpbiBjYXNlcyBsaWtlXG4gICAgICAvL3VybC5yZXNvbHZlT2JqZWN0KCdtYWlsdG86bG9jYWwxQGRvbWFpbjEnLCAnbG9jYWwyQGRvbWFpbjInKVxuICAgICAgdmFyIGF1dGhJbkhvc3QgPSByZXN1bHQuaG9zdCAmJiByZXN1bHQuaG9zdC5pbmRleE9mKCdAJykgPiAwID9cbiAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0Lmhvc3Quc3BsaXQoJ0AnKSA6IGZhbHNlO1xuICAgICAgaWYgKGF1dGhJbkhvc3QpIHtcbiAgICAgICAgcmVzdWx0LmF1dGggPSBhdXRoSW5Ib3N0LnNoaWZ0KCk7XG4gICAgICAgIHJlc3VsdC5ob3N0ID0gcmVzdWx0Lmhvc3RuYW1lID0gYXV0aEluSG9zdC5zaGlmdCgpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXN1bHQuc2VhcmNoID0gcmVsYXRpdmUuc2VhcmNoO1xuICAgIHJlc3VsdC5xdWVyeSA9IHJlbGF0aXZlLnF1ZXJ5O1xuICAgIC8vdG8gc3VwcG9ydCBodHRwLnJlcXVlc3RcbiAgICBpZiAoIWlzTnVsbChyZXN1bHQucGF0aG5hbWUpIHx8ICFpc051bGwocmVzdWx0LnNlYXJjaCkpIHtcbiAgICAgIHJlc3VsdC5wYXRoID0gKHJlc3VsdC5wYXRobmFtZSA/IHJlc3VsdC5wYXRobmFtZSA6ICcnKSArXG4gICAgICAgICAgICAgICAgICAgIChyZXN1bHQuc2VhcmNoID8gcmVzdWx0LnNlYXJjaCA6ICcnKTtcbiAgICB9XG4gICAgcmVzdWx0LmhyZWYgPSByZXN1bHQuZm9ybWF0KCk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIGlmICghc3JjUGF0aC5sZW5ndGgpIHtcbiAgICAvLyBubyBwYXRoIGF0IGFsbC4gIGVhc3kuXG4gICAgLy8gd2UndmUgYWxyZWFkeSBoYW5kbGVkIHRoZSBvdGhlciBzdHVmZiBhYm92ZS5cbiAgICByZXN1bHQucGF0aG5hbWUgPSBudWxsO1xuICAgIC8vdG8gc3VwcG9ydCBodHRwLnJlcXVlc3RcbiAgICBpZiAocmVzdWx0LnNlYXJjaCkge1xuICAgICAgcmVzdWx0LnBhdGggPSAnLycgKyByZXN1bHQuc2VhcmNoO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXN1bHQucGF0aCA9IG51bGw7XG4gICAgfVxuICAgIHJlc3VsdC5ocmVmID0gcmVzdWx0LmZvcm1hdCgpO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICAvLyBpZiBhIHVybCBFTkRzIGluIC4gb3IgLi4sIHRoZW4gaXQgbXVzdCBnZXQgYSB0cmFpbGluZyBzbGFzaC5cbiAgLy8gaG93ZXZlciwgaWYgaXQgZW5kcyBpbiBhbnl0aGluZyBlbHNlIG5vbi1zbGFzaHksXG4gIC8vIHRoZW4gaXQgbXVzdCBOT1QgZ2V0IGEgdHJhaWxpbmcgc2xhc2guXG4gIHZhciBsYXN0ID0gc3JjUGF0aC5zbGljZSgtMSlbMF07XG4gIHZhciBoYXNUcmFpbGluZ1NsYXNoID0gKFxuICAgICAgKHJlc3VsdC5ob3N0IHx8IHJlbGF0aXZlLmhvc3QpICYmIChsYXN0ID09PSAnLicgfHwgbGFzdCA9PT0gJy4uJykgfHxcbiAgICAgIGxhc3QgPT09ICcnKTtcblxuICAvLyBzdHJpcCBzaW5nbGUgZG90cywgcmVzb2x2ZSBkb3VibGUgZG90cyB0byBwYXJlbnQgZGlyXG4gIC8vIGlmIHRoZSBwYXRoIHRyaWVzIHRvIGdvIGFib3ZlIHRoZSByb290LCBgdXBgIGVuZHMgdXAgPiAwXG4gIHZhciB1cCA9IDA7XG4gIGZvciAodmFyIGkgPSBzcmNQYXRoLmxlbmd0aDsgaSA+PSAwOyBpLS0pIHtcbiAgICBsYXN0ID0gc3JjUGF0aFtpXTtcbiAgICBpZiAobGFzdCA9PSAnLicpIHtcbiAgICAgIHNyY1BhdGguc3BsaWNlKGksIDEpO1xuICAgIH0gZWxzZSBpZiAobGFzdCA9PT0gJy4uJykge1xuICAgICAgc3JjUGF0aC5zcGxpY2UoaSwgMSk7XG4gICAgICB1cCsrO1xuICAgIH0gZWxzZSBpZiAodXApIHtcbiAgICAgIHNyY1BhdGguc3BsaWNlKGksIDEpO1xuICAgICAgdXAtLTtcbiAgICB9XG4gIH1cblxuICAvLyBpZiB0aGUgcGF0aCBpcyBhbGxvd2VkIHRvIGdvIGFib3ZlIHRoZSByb290LCByZXN0b3JlIGxlYWRpbmcgLi5zXG4gIGlmICghbXVzdEVuZEFicyAmJiAhcmVtb3ZlQWxsRG90cykge1xuICAgIGZvciAoOyB1cC0tOyB1cCkge1xuICAgICAgc3JjUGF0aC51bnNoaWZ0KCcuLicpO1xuICAgIH1cbiAgfVxuXG4gIGlmIChtdXN0RW5kQWJzICYmIHNyY1BhdGhbMF0gIT09ICcnICYmXG4gICAgICAoIXNyY1BhdGhbMF0gfHwgc3JjUGF0aFswXS5jaGFyQXQoMCkgIT09ICcvJykpIHtcbiAgICBzcmNQYXRoLnVuc2hpZnQoJycpO1xuICB9XG5cbiAgaWYgKGhhc1RyYWlsaW5nU2xhc2ggJiYgKHNyY1BhdGguam9pbignLycpLnN1YnN0cigtMSkgIT09ICcvJykpIHtcbiAgICBzcmNQYXRoLnB1c2goJycpO1xuICB9XG5cbiAgdmFyIGlzQWJzb2x1dGUgPSBzcmNQYXRoWzBdID09PSAnJyB8fFxuICAgICAgKHNyY1BhdGhbMF0gJiYgc3JjUGF0aFswXS5jaGFyQXQoMCkgPT09ICcvJyk7XG5cbiAgLy8gcHV0IHRoZSBob3N0IGJhY2tcbiAgaWYgKHBzeWNob3RpYykge1xuICAgIHJlc3VsdC5ob3N0bmFtZSA9IHJlc3VsdC5ob3N0ID0gaXNBYnNvbHV0ZSA/ICcnIDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyY1BhdGgubGVuZ3RoID8gc3JjUGF0aC5zaGlmdCgpIDogJyc7XG4gICAgLy9vY2NhdGlvbmFseSB0aGUgYXV0aCBjYW4gZ2V0IHN0dWNrIG9ubHkgaW4gaG9zdFxuICAgIC8vdGhpcyBlc3BlY2lhbHkgaGFwcGVucyBpbiBjYXNlcyBsaWtlXG4gICAgLy91cmwucmVzb2x2ZU9iamVjdCgnbWFpbHRvOmxvY2FsMUBkb21haW4xJywgJ2xvY2FsMkBkb21haW4yJylcbiAgICB2YXIgYXV0aEluSG9zdCA9IHJlc3VsdC5ob3N0ICYmIHJlc3VsdC5ob3N0LmluZGV4T2YoJ0AnKSA+IDAgP1xuICAgICAgICAgICAgICAgICAgICAgcmVzdWx0Lmhvc3Quc3BsaXQoJ0AnKSA6IGZhbHNlO1xuICAgIGlmIChhdXRoSW5Ib3N0KSB7XG4gICAgICByZXN1bHQuYXV0aCA9IGF1dGhJbkhvc3Quc2hpZnQoKTtcbiAgICAgIHJlc3VsdC5ob3N0ID0gcmVzdWx0Lmhvc3RuYW1lID0gYXV0aEluSG9zdC5zaGlmdCgpO1xuICAgIH1cbiAgfVxuXG4gIG11c3RFbmRBYnMgPSBtdXN0RW5kQWJzIHx8IChyZXN1bHQuaG9zdCAmJiBzcmNQYXRoLmxlbmd0aCk7XG5cbiAgaWYgKG11c3RFbmRBYnMgJiYgIWlzQWJzb2x1dGUpIHtcbiAgICBzcmNQYXRoLnVuc2hpZnQoJycpO1xuICB9XG5cbiAgaWYgKCFzcmNQYXRoLmxlbmd0aCkge1xuICAgIHJlc3VsdC5wYXRobmFtZSA9IG51bGw7XG4gICAgcmVzdWx0LnBhdGggPSBudWxsO1xuICB9IGVsc2Uge1xuICAgIHJlc3VsdC5wYXRobmFtZSA9IHNyY1BhdGguam9pbignLycpO1xuICB9XG5cbiAgLy90byBzdXBwb3J0IHJlcXVlc3QuaHR0cFxuICBpZiAoIWlzTnVsbChyZXN1bHQucGF0aG5hbWUpIHx8ICFpc051bGwocmVzdWx0LnNlYXJjaCkpIHtcbiAgICByZXN1bHQucGF0aCA9IChyZXN1bHQucGF0aG5hbWUgPyByZXN1bHQucGF0aG5hbWUgOiAnJykgK1xuICAgICAgICAgICAgICAgICAgKHJlc3VsdC5zZWFyY2ggPyByZXN1bHQuc2VhcmNoIDogJycpO1xuICB9XG4gIHJlc3VsdC5hdXRoID0gcmVsYXRpdmUuYXV0aCB8fCByZXN1bHQuYXV0aDtcbiAgcmVzdWx0LnNsYXNoZXMgPSByZXN1bHQuc2xhc2hlcyB8fCByZWxhdGl2ZS5zbGFzaGVzO1xuICByZXN1bHQuaHJlZiA9IHJlc3VsdC5mb3JtYXQoKTtcbiAgcmV0dXJuIHJlc3VsdDtcbn07XG5cblVybC5wcm90b3R5cGUucGFyc2VIb3N0ID0gZnVuY3Rpb24oKSB7XG4gIHZhciBob3N0ID0gdGhpcy5ob3N0O1xuICB2YXIgcG9ydCA9IHBvcnRQYXR0ZXJuLmV4ZWMoaG9zdCk7XG4gIGlmIChwb3J0KSB7XG4gICAgcG9ydCA9IHBvcnRbMF07XG4gICAgaWYgKHBvcnQgIT09ICc6Jykge1xuICAgICAgdGhpcy5wb3J0ID0gcG9ydC5zdWJzdHIoMSk7XG4gICAgfVxuICAgIGhvc3QgPSBob3N0LnN1YnN0cigwLCBob3N0Lmxlbmd0aCAtIHBvcnQubGVuZ3RoKTtcbiAgfVxuICBpZiAoaG9zdCkgdGhpcy5ob3N0bmFtZSA9IGhvc3Q7XG59O1xuXG5mdW5jdGlvbiBpc1N0cmluZyhhcmcpIHtcbiAgcmV0dXJuIHR5cGVvZiBhcmcgPT09IFwic3RyaW5nXCI7XG59XG5cbmZ1bmN0aW9uIGlzT2JqZWN0KGFyZykge1xuICByZXR1cm4gdHlwZW9mIGFyZyA9PT0gJ29iamVjdCcgJiYgYXJnICE9PSBudWxsO1xufVxuXG5mdW5jdGlvbiBpc051bGwoYXJnKSB7XG4gIHJldHVybiBhcmcgPT09IG51bGw7XG59XG5mdW5jdGlvbiBpc051bGxPclVuZGVmaW5lZChhcmcpIHtcbiAgcmV0dXJuICBhcmcgPT0gbnVsbDtcbn1cbiIsIid1c2Ugc3RyaWN0JztcblxubW9kdWxlLmV4cG9ydHMgPSBlYXJjdXQ7XG5cbmZ1bmN0aW9uIGVhcmN1dChkYXRhLCBob2xlSW5kaWNlcywgZGltKSB7XG5cbiAgICBkaW0gPSBkaW0gfHwgMjtcblxuICAgIHZhciBoYXNIb2xlcyA9IGhvbGVJbmRpY2VzICYmIGhvbGVJbmRpY2VzLmxlbmd0aCxcbiAgICAgICAgb3V0ZXJMZW4gPSBoYXNIb2xlcyA/IGhvbGVJbmRpY2VzWzBdICogZGltIDogZGF0YS5sZW5ndGgsXG4gICAgICAgIG91dGVyTm9kZSA9IGxpbmtlZExpc3QoZGF0YSwgMCwgb3V0ZXJMZW4sIGRpbSwgdHJ1ZSksXG4gICAgICAgIHRyaWFuZ2xlcyA9IFtdO1xuXG4gICAgaWYgKCFvdXRlck5vZGUpIHJldHVybiB0cmlhbmdsZXM7XG5cbiAgICB2YXIgbWluWCwgbWluWSwgbWF4WCwgbWF4WSwgeCwgeSwgc2l6ZTtcblxuICAgIGlmIChoYXNIb2xlcykgb3V0ZXJOb2RlID0gZWxpbWluYXRlSG9sZXMoZGF0YSwgaG9sZUluZGljZXMsIG91dGVyTm9kZSwgZGltKTtcblxuICAgIC8vIGlmIHRoZSBzaGFwZSBpcyBub3QgdG9vIHNpbXBsZSwgd2UnbGwgdXNlIHotb3JkZXIgY3VydmUgaGFzaCBsYXRlcjsgY2FsY3VsYXRlIHBvbHlnb24gYmJveFxuICAgIGlmIChkYXRhLmxlbmd0aCA+IDgwICogZGltKSB7XG4gICAgICAgIG1pblggPSBtYXhYID0gZGF0YVswXTtcbiAgICAgICAgbWluWSA9IG1heFkgPSBkYXRhWzFdO1xuXG4gICAgICAgIGZvciAodmFyIGkgPSBkaW07IGkgPCBvdXRlckxlbjsgaSArPSBkaW0pIHtcbiAgICAgICAgICAgIHggPSBkYXRhW2ldO1xuICAgICAgICAgICAgeSA9IGRhdGFbaSArIDFdO1xuICAgICAgICAgICAgaWYgKHggPCBtaW5YKSBtaW5YID0geDtcbiAgICAgICAgICAgIGlmICh5IDwgbWluWSkgbWluWSA9IHk7XG4gICAgICAgICAgICBpZiAoeCA+IG1heFgpIG1heFggPSB4O1xuICAgICAgICAgICAgaWYgKHkgPiBtYXhZKSBtYXhZID0geTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIG1pblgsIG1pblkgYW5kIHNpemUgYXJlIGxhdGVyIHVzZWQgdG8gdHJhbnNmb3JtIGNvb3JkcyBpbnRvIGludGVnZXJzIGZvciB6LW9yZGVyIGNhbGN1bGF0aW9uXG4gICAgICAgIHNpemUgPSBNYXRoLm1heChtYXhYIC0gbWluWCwgbWF4WSAtIG1pblkpO1xuICAgIH1cblxuICAgIGVhcmN1dExpbmtlZChvdXRlck5vZGUsIHRyaWFuZ2xlcywgZGltLCBtaW5YLCBtaW5ZLCBzaXplKTtcblxuICAgIHJldHVybiB0cmlhbmdsZXM7XG59XG5cbi8vIGNyZWF0ZSBhIGNpcmN1bGFyIGRvdWJseSBsaW5rZWQgbGlzdCBmcm9tIHBvbHlnb24gcG9pbnRzIGluIHRoZSBzcGVjaWZpZWQgd2luZGluZyBvcmRlclxuZnVuY3Rpb24gbGlua2VkTGlzdChkYXRhLCBzdGFydCwgZW5kLCBkaW0sIGNsb2Nrd2lzZSkge1xuICAgIHZhciBzdW0gPSAwLFxuICAgICAgICBpLCBqLCBsYXN0O1xuXG4gICAgLy8gY2FsY3VsYXRlIG9yaWdpbmFsIHdpbmRpbmcgb3JkZXIgb2YgYSBwb2x5Z29uIHJpbmdcbiAgICBmb3IgKGkgPSBzdGFydCwgaiA9IGVuZCAtIGRpbTsgaSA8IGVuZDsgaSArPSBkaW0pIHtcbiAgICAgICAgc3VtICs9IChkYXRhW2pdIC0gZGF0YVtpXSkgKiAoZGF0YVtpICsgMV0gKyBkYXRhW2ogKyAxXSk7XG4gICAgICAgIGogPSBpO1xuICAgIH1cblxuICAgIC8vIGxpbmsgcG9pbnRzIGludG8gY2lyY3VsYXIgZG91Ymx5LWxpbmtlZCBsaXN0IGluIHRoZSBzcGVjaWZpZWQgd2luZGluZyBvcmRlclxuICAgIGlmIChjbG9ja3dpc2UgPT09IChzdW0gPiAwKSkge1xuICAgICAgICBmb3IgKGkgPSBzdGFydDsgaSA8IGVuZDsgaSArPSBkaW0pIGxhc3QgPSBpbnNlcnROb2RlKGksIGRhdGFbaV0sIGRhdGFbaSArIDFdLCBsYXN0KTtcbiAgICB9IGVsc2Uge1xuICAgICAgICBmb3IgKGkgPSBlbmQgLSBkaW07IGkgPj0gc3RhcnQ7IGkgLT0gZGltKSBsYXN0ID0gaW5zZXJ0Tm9kZShpLCBkYXRhW2ldLCBkYXRhW2kgKyAxXSwgbGFzdCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGxhc3Q7XG59XG5cbi8vIGVsaW1pbmF0ZSBjb2xpbmVhciBvciBkdXBsaWNhdGUgcG9pbnRzXG5mdW5jdGlvbiBmaWx0ZXJQb2ludHMoc3RhcnQsIGVuZCkge1xuICAgIGlmICghc3RhcnQpIHJldHVybiBzdGFydDtcbiAgICBpZiAoIWVuZCkgZW5kID0gc3RhcnQ7XG5cbiAgICB2YXIgcCA9IHN0YXJ0LFxuICAgICAgICBhZ2FpbjtcbiAgICBkbyB7XG4gICAgICAgIGFnYWluID0gZmFsc2U7XG5cbiAgICAgICAgaWYgKCFwLnN0ZWluZXIgJiYgKGVxdWFscyhwLCBwLm5leHQpIHx8IGFyZWEocC5wcmV2LCBwLCBwLm5leHQpID09PSAwKSkge1xuICAgICAgICAgICAgcmVtb3ZlTm9kZShwKTtcbiAgICAgICAgICAgIHAgPSBlbmQgPSBwLnByZXY7XG4gICAgICAgICAgICBpZiAocCA9PT0gcC5uZXh0KSByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIGFnYWluID0gdHJ1ZTtcblxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcCA9IHAubmV4dDtcbiAgICAgICAgfVxuICAgIH0gd2hpbGUgKGFnYWluIHx8IHAgIT09IGVuZCk7XG5cbiAgICByZXR1cm4gZW5kO1xufVxuXG4vLyBtYWluIGVhciBzbGljaW5nIGxvb3Agd2hpY2ggdHJpYW5ndWxhdGVzIGEgcG9seWdvbiAoZ2l2ZW4gYXMgYSBsaW5rZWQgbGlzdClcbmZ1bmN0aW9uIGVhcmN1dExpbmtlZChlYXIsIHRyaWFuZ2xlcywgZGltLCBtaW5YLCBtaW5ZLCBzaXplLCBwYXNzKSB7XG4gICAgaWYgKCFlYXIpIHJldHVybjtcblxuICAgIC8vIGludGVybGluayBwb2x5Z29uIG5vZGVzIGluIHotb3JkZXJcbiAgICBpZiAoIXBhc3MgJiYgc2l6ZSkgaW5kZXhDdXJ2ZShlYXIsIG1pblgsIG1pblksIHNpemUpO1xuXG4gICAgdmFyIHN0b3AgPSBlYXIsXG4gICAgICAgIHByZXYsIG5leHQ7XG5cbiAgICAvLyBpdGVyYXRlIHRocm91Z2ggZWFycywgc2xpY2luZyB0aGVtIG9uZSBieSBvbmVcbiAgICB3aGlsZSAoZWFyLnByZXYgIT09IGVhci5uZXh0KSB7XG4gICAgICAgIHByZXYgPSBlYXIucHJldjtcbiAgICAgICAgbmV4dCA9IGVhci5uZXh0O1xuXG4gICAgICAgIGlmIChzaXplID8gaXNFYXJIYXNoZWQoZWFyLCBtaW5YLCBtaW5ZLCBzaXplKSA6IGlzRWFyKGVhcikpIHtcbiAgICAgICAgICAgIC8vIGN1dCBvZmYgdGhlIHRyaWFuZ2xlXG4gICAgICAgICAgICB0cmlhbmdsZXMucHVzaChwcmV2LmkgLyBkaW0pO1xuICAgICAgICAgICAgdHJpYW5nbGVzLnB1c2goZWFyLmkgLyBkaW0pO1xuICAgICAgICAgICAgdHJpYW5nbGVzLnB1c2gobmV4dC5pIC8gZGltKTtcblxuICAgICAgICAgICAgcmVtb3ZlTm9kZShlYXIpO1xuXG4gICAgICAgICAgICAvLyBza2lwcGluZyB0aGUgbmV4dCB2ZXJ0aWNlIGxlYWRzIHRvIGxlc3Mgc2xpdmVyIHRyaWFuZ2xlc1xuICAgICAgICAgICAgZWFyID0gbmV4dC5uZXh0O1xuICAgICAgICAgICAgc3RvcCA9IG5leHQubmV4dDtcblxuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICBlYXIgPSBuZXh0O1xuXG4gICAgICAgIC8vIGlmIHdlIGxvb3BlZCB0aHJvdWdoIHRoZSB3aG9sZSByZW1haW5pbmcgcG9seWdvbiBhbmQgY2FuJ3QgZmluZCBhbnkgbW9yZSBlYXJzXG4gICAgICAgIGlmIChlYXIgPT09IHN0b3ApIHtcbiAgICAgICAgICAgIC8vIHRyeSBmaWx0ZXJpbmcgcG9pbnRzIGFuZCBzbGljaW5nIGFnYWluXG4gICAgICAgICAgICBpZiAoIXBhc3MpIHtcbiAgICAgICAgICAgICAgICBlYXJjdXRMaW5rZWQoZmlsdGVyUG9pbnRzKGVhciksIHRyaWFuZ2xlcywgZGltLCBtaW5YLCBtaW5ZLCBzaXplLCAxKTtcblxuICAgICAgICAgICAgLy8gaWYgdGhpcyBkaWRuJ3Qgd29yaywgdHJ5IGN1cmluZyBhbGwgc21hbGwgc2VsZi1pbnRlcnNlY3Rpb25zIGxvY2FsbHlcbiAgICAgICAgICAgIH0gZWxzZSBpZiAocGFzcyA9PT0gMSkge1xuICAgICAgICAgICAgICAgIGVhciA9IGN1cmVMb2NhbEludGVyc2VjdGlvbnMoZWFyLCB0cmlhbmdsZXMsIGRpbSk7XG4gICAgICAgICAgICAgICAgZWFyY3V0TGlua2VkKGVhciwgdHJpYW5nbGVzLCBkaW0sIG1pblgsIG1pblksIHNpemUsIDIpO1xuXG4gICAgICAgICAgICAvLyBhcyBhIGxhc3QgcmVzb3J0LCB0cnkgc3BsaXR0aW5nIHRoZSByZW1haW5pbmcgcG9seWdvbiBpbnRvIHR3b1xuICAgICAgICAgICAgfSBlbHNlIGlmIChwYXNzID09PSAyKSB7XG4gICAgICAgICAgICAgICAgc3BsaXRFYXJjdXQoZWFyLCB0cmlhbmdsZXMsIGRpbSwgbWluWCwgbWluWSwgc2l6ZSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgfVxufVxuXG4vLyBjaGVjayB3aGV0aGVyIGEgcG9seWdvbiBub2RlIGZvcm1zIGEgdmFsaWQgZWFyIHdpdGggYWRqYWNlbnQgbm9kZXNcbmZ1bmN0aW9uIGlzRWFyKGVhcikge1xuICAgIHZhciBhID0gZWFyLnByZXYsXG4gICAgICAgIGIgPSBlYXIsXG4gICAgICAgIGMgPSBlYXIubmV4dDtcblxuICAgIGlmIChhcmVhKGEsIGIsIGMpID49IDApIHJldHVybiBmYWxzZTsgLy8gcmVmbGV4LCBjYW4ndCBiZSBhbiBlYXJcblxuICAgIC8vIG5vdyBtYWtlIHN1cmUgd2UgZG9uJ3QgaGF2ZSBvdGhlciBwb2ludHMgaW5zaWRlIHRoZSBwb3RlbnRpYWwgZWFyXG4gICAgdmFyIHAgPSBlYXIubmV4dC5uZXh0O1xuXG4gICAgd2hpbGUgKHAgIT09IGVhci5wcmV2KSB7XG4gICAgICAgIGlmIChwb2ludEluVHJpYW5nbGUoYS54LCBhLnksIGIueCwgYi55LCBjLngsIGMueSwgcC54LCBwLnkpICYmXG4gICAgICAgICAgICBhcmVhKHAucHJldiwgcCwgcC5uZXh0KSA+PSAwKSByZXR1cm4gZmFsc2U7XG4gICAgICAgIHAgPSBwLm5leHQ7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRydWU7XG59XG5cbmZ1bmN0aW9uIGlzRWFySGFzaGVkKGVhciwgbWluWCwgbWluWSwgc2l6ZSkge1xuICAgIHZhciBhID0gZWFyLnByZXYsXG4gICAgICAgIGIgPSBlYXIsXG4gICAgICAgIGMgPSBlYXIubmV4dDtcblxuICAgIGlmIChhcmVhKGEsIGIsIGMpID49IDApIHJldHVybiBmYWxzZTsgLy8gcmVmbGV4LCBjYW4ndCBiZSBhbiBlYXJcblxuICAgIC8vIHRyaWFuZ2xlIGJib3g7IG1pbiAmIG1heCBhcmUgY2FsY3VsYXRlZCBsaWtlIHRoaXMgZm9yIHNwZWVkXG4gICAgdmFyIG1pblRYID0gYS54IDwgYi54ID8gKGEueCA8IGMueCA/IGEueCA6IGMueCkgOiAoYi54IDwgYy54ID8gYi54IDogYy54KSxcbiAgICAgICAgbWluVFkgPSBhLnkgPCBiLnkgPyAoYS55IDwgYy55ID8gYS55IDogYy55KSA6IChiLnkgPCBjLnkgPyBiLnkgOiBjLnkpLFxuICAgICAgICBtYXhUWCA9IGEueCA+IGIueCA/IChhLnggPiBjLnggPyBhLnggOiBjLngpIDogKGIueCA+IGMueCA/IGIueCA6IGMueCksXG4gICAgICAgIG1heFRZID0gYS55ID4gYi55ID8gKGEueSA+IGMueSA/IGEueSA6IGMueSkgOiAoYi55ID4gYy55ID8gYi55IDogYy55KTtcblxuICAgIC8vIHotb3JkZXIgcmFuZ2UgZm9yIHRoZSBjdXJyZW50IHRyaWFuZ2xlIGJib3g7XG4gICAgdmFyIG1pblogPSB6T3JkZXIobWluVFgsIG1pblRZLCBtaW5YLCBtaW5ZLCBzaXplKSxcbiAgICAgICAgbWF4WiA9IHpPcmRlcihtYXhUWCwgbWF4VFksIG1pblgsIG1pblksIHNpemUpO1xuXG4gICAgLy8gZmlyc3QgbG9vayBmb3IgcG9pbnRzIGluc2lkZSB0aGUgdHJpYW5nbGUgaW4gaW5jcmVhc2luZyB6LW9yZGVyXG4gICAgdmFyIHAgPSBlYXIubmV4dFo7XG5cbiAgICB3aGlsZSAocCAmJiBwLnogPD0gbWF4Wikge1xuICAgICAgICBpZiAocCAhPT0gZWFyLnByZXYgJiYgcCAhPT0gZWFyLm5leHQgJiZcbiAgICAgICAgICAgIHBvaW50SW5UcmlhbmdsZShhLngsIGEueSwgYi54LCBiLnksIGMueCwgYy55LCBwLngsIHAueSkgJiZcbiAgICAgICAgICAgIGFyZWEocC5wcmV2LCBwLCBwLm5leHQpID49IDApIHJldHVybiBmYWxzZTtcbiAgICAgICAgcCA9IHAubmV4dFo7XG4gICAgfVxuXG4gICAgLy8gdGhlbiBsb29rIGZvciBwb2ludHMgaW4gZGVjcmVhc2luZyB6LW9yZGVyXG4gICAgcCA9IGVhci5wcmV2WjtcblxuICAgIHdoaWxlIChwICYmIHAueiA+PSBtaW5aKSB7XG4gICAgICAgIGlmIChwICE9PSBlYXIucHJldiAmJiBwICE9PSBlYXIubmV4dCAmJlxuICAgICAgICAgICAgcG9pbnRJblRyaWFuZ2xlKGEueCwgYS55LCBiLngsIGIueSwgYy54LCBjLnksIHAueCwgcC55KSAmJlxuICAgICAgICAgICAgYXJlYShwLnByZXYsIHAsIHAubmV4dCkgPj0gMCkgcmV0dXJuIGZhbHNlO1xuICAgICAgICBwID0gcC5wcmV2WjtcbiAgICB9XG5cbiAgICByZXR1cm4gdHJ1ZTtcbn1cblxuLy8gZ28gdGhyb3VnaCBhbGwgcG9seWdvbiBub2RlcyBhbmQgY3VyZSBzbWFsbCBsb2NhbCBzZWxmLWludGVyc2VjdGlvbnNcbmZ1bmN0aW9uIGN1cmVMb2NhbEludGVyc2VjdGlvbnMoc3RhcnQsIHRyaWFuZ2xlcywgZGltKSB7XG4gICAgdmFyIHAgPSBzdGFydDtcbiAgICBkbyB7XG4gICAgICAgIHZhciBhID0gcC5wcmV2LFxuICAgICAgICAgICAgYiA9IHAubmV4dC5uZXh0O1xuXG4gICAgICAgIC8vIGEgc2VsZi1pbnRlcnNlY3Rpb24gd2hlcmUgZWRnZSAodltpLTFdLHZbaV0pIGludGVyc2VjdHMgKHZbaSsxXSx2W2krMl0pXG4gICAgICAgIGlmIChpbnRlcnNlY3RzKGEsIHAsIHAubmV4dCwgYikgJiYgbG9jYWxseUluc2lkZShhLCBiKSAmJiBsb2NhbGx5SW5zaWRlKGIsIGEpKSB7XG5cbiAgICAgICAgICAgIHRyaWFuZ2xlcy5wdXNoKGEuaSAvIGRpbSk7XG4gICAgICAgICAgICB0cmlhbmdsZXMucHVzaChwLmkgLyBkaW0pO1xuICAgICAgICAgICAgdHJpYW5nbGVzLnB1c2goYi5pIC8gZGltKTtcblxuICAgICAgICAgICAgLy8gcmVtb3ZlIHR3byBub2RlcyBpbnZvbHZlZFxuICAgICAgICAgICAgcmVtb3ZlTm9kZShwKTtcbiAgICAgICAgICAgIHJlbW92ZU5vZGUocC5uZXh0KTtcblxuICAgICAgICAgICAgcCA9IHN0YXJ0ID0gYjtcbiAgICAgICAgfVxuICAgICAgICBwID0gcC5uZXh0O1xuICAgIH0gd2hpbGUgKHAgIT09IHN0YXJ0KTtcblxuICAgIHJldHVybiBwO1xufVxuXG4vLyB0cnkgc3BsaXR0aW5nIHBvbHlnb24gaW50byB0d28gYW5kIHRyaWFuZ3VsYXRlIHRoZW0gaW5kZXBlbmRlbnRseVxuZnVuY3Rpb24gc3BsaXRFYXJjdXQoc3RhcnQsIHRyaWFuZ2xlcywgZGltLCBtaW5YLCBtaW5ZLCBzaXplKSB7XG4gICAgLy8gbG9vayBmb3IgYSB2YWxpZCBkaWFnb25hbCB0aGF0IGRpdmlkZXMgdGhlIHBvbHlnb24gaW50byB0d29cbiAgICB2YXIgYSA9IHN0YXJ0O1xuICAgIGRvIHtcbiAgICAgICAgdmFyIGIgPSBhLm5leHQubmV4dDtcbiAgICAgICAgd2hpbGUgKGIgIT09IGEucHJldikge1xuICAgICAgICAgICAgaWYgKGEuaSAhPT0gYi5pICYmIGlzVmFsaWREaWFnb25hbChhLCBiKSkge1xuICAgICAgICAgICAgICAgIC8vIHNwbGl0IHRoZSBwb2x5Z29uIGluIHR3byBieSB0aGUgZGlhZ29uYWxcbiAgICAgICAgICAgICAgICB2YXIgYyA9IHNwbGl0UG9seWdvbihhLCBiKTtcblxuICAgICAgICAgICAgICAgIC8vIGZpbHRlciBjb2xpbmVhciBwb2ludHMgYXJvdW5kIHRoZSBjdXRzXG4gICAgICAgICAgICAgICAgYSA9IGZpbHRlclBvaW50cyhhLCBhLm5leHQpO1xuICAgICAgICAgICAgICAgIGMgPSBmaWx0ZXJQb2ludHMoYywgYy5uZXh0KTtcblxuICAgICAgICAgICAgICAgIC8vIHJ1biBlYXJjdXQgb24gZWFjaCBoYWxmXG4gICAgICAgICAgICAgICAgZWFyY3V0TGlua2VkKGEsIHRyaWFuZ2xlcywgZGltLCBtaW5YLCBtaW5ZLCBzaXplKTtcbiAgICAgICAgICAgICAgICBlYXJjdXRMaW5rZWQoYywgdHJpYW5nbGVzLCBkaW0sIG1pblgsIG1pblksIHNpemUpO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGIgPSBiLm5leHQ7XG4gICAgICAgIH1cbiAgICAgICAgYSA9IGEubmV4dDtcbiAgICB9IHdoaWxlIChhICE9PSBzdGFydCk7XG59XG5cbi8vIGxpbmsgZXZlcnkgaG9sZSBpbnRvIHRoZSBvdXRlciBsb29wLCBwcm9kdWNpbmcgYSBzaW5nbGUtcmluZyBwb2x5Z29uIHdpdGhvdXQgaG9sZXNcbmZ1bmN0aW9uIGVsaW1pbmF0ZUhvbGVzKGRhdGEsIGhvbGVJbmRpY2VzLCBvdXRlck5vZGUsIGRpbSkge1xuICAgIHZhciBxdWV1ZSA9IFtdLFxuICAgICAgICBpLCBsZW4sIHN0YXJ0LCBlbmQsIGxpc3Q7XG5cbiAgICBmb3IgKGkgPSAwLCBsZW4gPSBob2xlSW5kaWNlcy5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuICAgICAgICBzdGFydCA9IGhvbGVJbmRpY2VzW2ldICogZGltO1xuICAgICAgICBlbmQgPSBpIDwgbGVuIC0gMSA/IGhvbGVJbmRpY2VzW2kgKyAxXSAqIGRpbSA6IGRhdGEubGVuZ3RoO1xuICAgICAgICBsaXN0ID0gbGlua2VkTGlzdChkYXRhLCBzdGFydCwgZW5kLCBkaW0sIGZhbHNlKTtcbiAgICAgICAgaWYgKGxpc3QgPT09IGxpc3QubmV4dCkgbGlzdC5zdGVpbmVyID0gdHJ1ZTtcbiAgICAgICAgcXVldWUucHVzaChnZXRMZWZ0bW9zdChsaXN0KSk7XG4gICAgfVxuXG4gICAgcXVldWUuc29ydChjb21wYXJlWCk7XG5cbiAgICAvLyBwcm9jZXNzIGhvbGVzIGZyb20gbGVmdCB0byByaWdodFxuICAgIGZvciAoaSA9IDA7IGkgPCBxdWV1ZS5sZW5ndGg7IGkrKykge1xuICAgICAgICBlbGltaW5hdGVIb2xlKHF1ZXVlW2ldLCBvdXRlck5vZGUpO1xuICAgICAgICBvdXRlck5vZGUgPSBmaWx0ZXJQb2ludHMob3V0ZXJOb2RlLCBvdXRlck5vZGUubmV4dCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG91dGVyTm9kZTtcbn1cblxuZnVuY3Rpb24gY29tcGFyZVgoYSwgYikge1xuICAgIHJldHVybiBhLnggLSBiLng7XG59XG5cbi8vIGZpbmQgYSBicmlkZ2UgYmV0d2VlbiB2ZXJ0aWNlcyB0aGF0IGNvbm5lY3RzIGhvbGUgd2l0aCBhbiBvdXRlciByaW5nIGFuZCBhbmQgbGluayBpdFxuZnVuY3Rpb24gZWxpbWluYXRlSG9sZShob2xlLCBvdXRlck5vZGUpIHtcbiAgICBvdXRlck5vZGUgPSBmaW5kSG9sZUJyaWRnZShob2xlLCBvdXRlck5vZGUpO1xuICAgIGlmIChvdXRlck5vZGUpIHtcbiAgICAgICAgdmFyIGIgPSBzcGxpdFBvbHlnb24ob3V0ZXJOb2RlLCBob2xlKTtcbiAgICAgICAgZmlsdGVyUG9pbnRzKGIsIGIubmV4dCk7XG4gICAgfVxufVxuXG4vLyBEYXZpZCBFYmVybHkncyBhbGdvcml0aG0gZm9yIGZpbmRpbmcgYSBicmlkZ2UgYmV0d2VlbiBob2xlIGFuZCBvdXRlciBwb2x5Z29uXG5mdW5jdGlvbiBmaW5kSG9sZUJyaWRnZShob2xlLCBvdXRlck5vZGUpIHtcbiAgICB2YXIgcCA9IG91dGVyTm9kZSxcbiAgICAgICAgaHggPSBob2xlLngsXG4gICAgICAgIGh5ID0gaG9sZS55LFxuICAgICAgICBxeCA9IC1JbmZpbml0eSxcbiAgICAgICAgbTtcblxuICAgIC8vIGZpbmQgYSBzZWdtZW50IGludGVyc2VjdGVkIGJ5IGEgcmF5IGZyb20gdGhlIGhvbGUncyBsZWZ0bW9zdCBwb2ludCB0byB0aGUgbGVmdDtcbiAgICAvLyBzZWdtZW50J3MgZW5kcG9pbnQgd2l0aCBsZXNzZXIgeCB3aWxsIGJlIHBvdGVudGlhbCBjb25uZWN0aW9uIHBvaW50XG4gICAgZG8ge1xuICAgICAgICBpZiAoaHkgPD0gcC55ICYmIGh5ID49IHAubmV4dC55KSB7XG4gICAgICAgICAgICB2YXIgeCA9IHAueCArIChoeSAtIHAueSkgKiAocC5uZXh0LnggLSBwLngpIC8gKHAubmV4dC55IC0gcC55KTtcbiAgICAgICAgICAgIGlmICh4IDw9IGh4ICYmIHggPiBxeCkge1xuICAgICAgICAgICAgICAgIHF4ID0geDtcbiAgICAgICAgICAgICAgICBtID0gcC54IDwgcC5uZXh0LnggPyBwIDogcC5uZXh0O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHAgPSBwLm5leHQ7XG4gICAgfSB3aGlsZSAocCAhPT0gb3V0ZXJOb2RlKTtcblxuICAgIGlmICghbSkgcmV0dXJuIG51bGw7XG5cbiAgICAvLyBsb29rIGZvciBwb2ludHMgaW5zaWRlIHRoZSB0cmlhbmdsZSBvZiBob2xlIHBvaW50LCBzZWdtZW50IGludGVyc2VjdGlvbiBhbmQgZW5kcG9pbnQ7XG4gICAgLy8gaWYgdGhlcmUgYXJlIG5vIHBvaW50cyBmb3VuZCwgd2UgaGF2ZSBhIHZhbGlkIGNvbm5lY3Rpb247XG4gICAgLy8gb3RoZXJ3aXNlIGNob29zZSB0aGUgcG9pbnQgb2YgdGhlIG1pbmltdW0gYW5nbGUgd2l0aCB0aGUgcmF5IGFzIGNvbm5lY3Rpb24gcG9pbnRcblxuICAgIHZhciBzdG9wID0gbSxcbiAgICAgICAgdGFuTWluID0gSW5maW5pdHksXG4gICAgICAgIHRhbjtcblxuICAgIHAgPSBtLm5leHQ7XG5cbiAgICB3aGlsZSAocCAhPT0gc3RvcCkge1xuICAgICAgICBpZiAoaHggPj0gcC54ICYmIHAueCA+PSBtLnggJiZcbiAgICAgICAgICAgICAgICBwb2ludEluVHJpYW5nbGUoaHkgPCBtLnkgPyBoeCA6IHF4LCBoeSwgbS54LCBtLnksIGh5IDwgbS55ID8gcXggOiBoeCwgaHksIHAueCwgcC55KSkge1xuXG4gICAgICAgICAgICB0YW4gPSBNYXRoLmFicyhoeSAtIHAueSkgLyAoaHggLSBwLngpOyAvLyB0YW5nZW50aWFsXG5cbiAgICAgICAgICAgIGlmICgodGFuIDwgdGFuTWluIHx8ICh0YW4gPT09IHRhbk1pbiAmJiBwLnggPiBtLngpKSAmJiBsb2NhbGx5SW5zaWRlKHAsIGhvbGUpKSB7XG4gICAgICAgICAgICAgICAgbSA9IHA7XG4gICAgICAgICAgICAgICAgdGFuTWluID0gdGFuO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcCA9IHAubmV4dDtcbiAgICB9XG5cbiAgICByZXR1cm4gbTtcbn1cblxuLy8gaW50ZXJsaW5rIHBvbHlnb24gbm9kZXMgaW4gei1vcmRlclxuZnVuY3Rpb24gaW5kZXhDdXJ2ZShzdGFydCwgbWluWCwgbWluWSwgc2l6ZSkge1xuICAgIHZhciBwID0gc3RhcnQ7XG4gICAgZG8ge1xuICAgICAgICBpZiAocC56ID09PSBudWxsKSBwLnogPSB6T3JkZXIocC54LCBwLnksIG1pblgsIG1pblksIHNpemUpO1xuICAgICAgICBwLnByZXZaID0gcC5wcmV2O1xuICAgICAgICBwLm5leHRaID0gcC5uZXh0O1xuICAgICAgICBwID0gcC5uZXh0O1xuICAgIH0gd2hpbGUgKHAgIT09IHN0YXJ0KTtcblxuICAgIHAucHJldloubmV4dFogPSBudWxsO1xuICAgIHAucHJldlogPSBudWxsO1xuXG4gICAgc29ydExpbmtlZChwKTtcbn1cblxuLy8gU2ltb24gVGF0aGFtJ3MgbGlua2VkIGxpc3QgbWVyZ2Ugc29ydCBhbGdvcml0aG1cbi8vIGh0dHA6Ly93d3cuY2hpYXJrLmdyZWVuZW5kLm9yZy51ay9+c2d0YXRoYW0vYWxnb3JpdGhtcy9saXN0c29ydC5odG1sXG5mdW5jdGlvbiBzb3J0TGlua2VkKGxpc3QpIHtcbiAgICB2YXIgaSwgcCwgcSwgZSwgdGFpbCwgbnVtTWVyZ2VzLCBwU2l6ZSwgcVNpemUsXG4gICAgICAgIGluU2l6ZSA9IDE7XG5cbiAgICBkbyB7XG4gICAgICAgIHAgPSBsaXN0O1xuICAgICAgICBsaXN0ID0gbnVsbDtcbiAgICAgICAgdGFpbCA9IG51bGw7XG4gICAgICAgIG51bU1lcmdlcyA9IDA7XG5cbiAgICAgICAgd2hpbGUgKHApIHtcbiAgICAgICAgICAgIG51bU1lcmdlcysrO1xuICAgICAgICAgICAgcSA9IHA7XG4gICAgICAgICAgICBwU2l6ZSA9IDA7XG4gICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgaW5TaXplOyBpKyspIHtcbiAgICAgICAgICAgICAgICBwU2l6ZSsrO1xuICAgICAgICAgICAgICAgIHEgPSBxLm5leHRaO1xuICAgICAgICAgICAgICAgIGlmICghcSkgYnJlYWs7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHFTaXplID0gaW5TaXplO1xuXG4gICAgICAgICAgICB3aGlsZSAocFNpemUgPiAwIHx8IChxU2l6ZSA+IDAgJiYgcSkpIHtcblxuICAgICAgICAgICAgICAgIGlmIChwU2l6ZSA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICBlID0gcTtcbiAgICAgICAgICAgICAgICAgICAgcSA9IHEubmV4dFo7XG4gICAgICAgICAgICAgICAgICAgIHFTaXplLS07XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChxU2l6ZSA9PT0gMCB8fCAhcSkge1xuICAgICAgICAgICAgICAgICAgICBlID0gcDtcbiAgICAgICAgICAgICAgICAgICAgcCA9IHAubmV4dFo7XG4gICAgICAgICAgICAgICAgICAgIHBTaXplLS07XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChwLnogPD0gcS56KSB7XG4gICAgICAgICAgICAgICAgICAgIGUgPSBwO1xuICAgICAgICAgICAgICAgICAgICBwID0gcC5uZXh0WjtcbiAgICAgICAgICAgICAgICAgICAgcFNpemUtLTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBlID0gcTtcbiAgICAgICAgICAgICAgICAgICAgcSA9IHEubmV4dFo7XG4gICAgICAgICAgICAgICAgICAgIHFTaXplLS07XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKHRhaWwpIHRhaWwubmV4dFogPSBlO1xuICAgICAgICAgICAgICAgIGVsc2UgbGlzdCA9IGU7XG5cbiAgICAgICAgICAgICAgICBlLnByZXZaID0gdGFpbDtcbiAgICAgICAgICAgICAgICB0YWlsID0gZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcCA9IHE7XG4gICAgICAgIH1cblxuICAgICAgICB0YWlsLm5leHRaID0gbnVsbDtcbiAgICAgICAgaW5TaXplICo9IDI7XG5cbiAgICB9IHdoaWxlIChudW1NZXJnZXMgPiAxKTtcblxuICAgIHJldHVybiBsaXN0O1xufVxuXG4vLyB6LW9yZGVyIG9mIGEgcG9pbnQgZ2l2ZW4gY29vcmRzIGFuZCBzaXplIG9mIHRoZSBkYXRhIGJvdW5kaW5nIGJveFxuZnVuY3Rpb24gek9yZGVyKHgsIHksIG1pblgsIG1pblksIHNpemUpIHtcbiAgICAvLyBjb29yZHMgYXJlIHRyYW5zZm9ybWVkIGludG8gbm9uLW5lZ2F0aXZlIDE1LWJpdCBpbnRlZ2VyIHJhbmdlXG4gICAgeCA9IDMyNzY3ICogKHggLSBtaW5YKSAvIHNpemU7XG4gICAgeSA9IDMyNzY3ICogKHkgLSBtaW5ZKSAvIHNpemU7XG5cbiAgICB4ID0gKHggfCAoeCA8PCA4KSkgJiAweDAwRkYwMEZGO1xuICAgIHggPSAoeCB8ICh4IDw8IDQpKSAmIDB4MEYwRjBGMEY7XG4gICAgeCA9ICh4IHwgKHggPDwgMikpICYgMHgzMzMzMzMzMztcbiAgICB4ID0gKHggfCAoeCA8PCAxKSkgJiAweDU1NTU1NTU1O1xuXG4gICAgeSA9ICh5IHwgKHkgPDwgOCkpICYgMHgwMEZGMDBGRjtcbiAgICB5ID0gKHkgfCAoeSA8PCA0KSkgJiAweDBGMEYwRjBGO1xuICAgIHkgPSAoeSB8ICh5IDw8IDIpKSAmIDB4MzMzMzMzMzM7XG4gICAgeSA9ICh5IHwgKHkgPDwgMSkpICYgMHg1NTU1NTU1NTtcblxuICAgIHJldHVybiB4IHwgKHkgPDwgMSk7XG59XG5cbi8vIGZpbmQgdGhlIGxlZnRtb3N0IG5vZGUgb2YgYSBwb2x5Z29uIHJpbmdcbmZ1bmN0aW9uIGdldExlZnRtb3N0KHN0YXJ0KSB7XG4gICAgdmFyIHAgPSBzdGFydCxcbiAgICAgICAgbGVmdG1vc3QgPSBzdGFydDtcbiAgICBkbyB7XG4gICAgICAgIGlmIChwLnggPCBsZWZ0bW9zdC54KSBsZWZ0bW9zdCA9IHA7XG4gICAgICAgIHAgPSBwLm5leHQ7XG4gICAgfSB3aGlsZSAocCAhPT0gc3RhcnQpO1xuXG4gICAgcmV0dXJuIGxlZnRtb3N0O1xufVxuXG4vLyBjaGVjayBpZiBhIHBvaW50IGxpZXMgd2l0aGluIGEgY29udmV4IHRyaWFuZ2xlXG5mdW5jdGlvbiBwb2ludEluVHJpYW5nbGUoYXgsIGF5LCBieCwgYnksIGN4LCBjeSwgcHgsIHB5KSB7XG4gICAgcmV0dXJuIChjeCAtIHB4KSAqIChheSAtIHB5KSAtIChheCAtIHB4KSAqIChjeSAtIHB5KSA+PSAwICYmXG4gICAgICAgICAgIChheCAtIHB4KSAqIChieSAtIHB5KSAtIChieCAtIHB4KSAqIChheSAtIHB5KSA+PSAwICYmXG4gICAgICAgICAgIChieCAtIHB4KSAqIChjeSAtIHB5KSAtIChjeCAtIHB4KSAqIChieSAtIHB5KSA+PSAwO1xufVxuXG4vLyBjaGVjayBpZiBhIGRpYWdvbmFsIGJldHdlZW4gdHdvIHBvbHlnb24gbm9kZXMgaXMgdmFsaWQgKGxpZXMgaW4gcG9seWdvbiBpbnRlcmlvcilcbmZ1bmN0aW9uIGlzVmFsaWREaWFnb25hbChhLCBiKSB7XG4gICAgcmV0dXJuIGVxdWFscyhhLCBiKSB8fCBhLm5leHQuaSAhPT0gYi5pICYmIGEucHJldi5pICE9PSBiLmkgJiYgIWludGVyc2VjdHNQb2x5Z29uKGEsIGIpICYmXG4gICAgICAgICAgIGxvY2FsbHlJbnNpZGUoYSwgYikgJiYgbG9jYWxseUluc2lkZShiLCBhKSAmJiBtaWRkbGVJbnNpZGUoYSwgYik7XG59XG5cbi8vIHNpZ25lZCBhcmVhIG9mIGEgdHJpYW5nbGVcbmZ1bmN0aW9uIGFyZWEocCwgcSwgcikge1xuICAgIHJldHVybiAocS55IC0gcC55KSAqIChyLnggLSBxLngpIC0gKHEueCAtIHAueCkgKiAoci55IC0gcS55KTtcbn1cblxuLy8gY2hlY2sgaWYgdHdvIHBvaW50cyBhcmUgZXF1YWxcbmZ1bmN0aW9uIGVxdWFscyhwMSwgcDIpIHtcbiAgICByZXR1cm4gcDEueCA9PT0gcDIueCAmJiBwMS55ID09PSBwMi55O1xufVxuXG4vLyBjaGVjayBpZiB0d28gc2VnbWVudHMgaW50ZXJzZWN0XG5mdW5jdGlvbiBpbnRlcnNlY3RzKHAxLCBxMSwgcDIsIHEyKSB7XG4gICAgcmV0dXJuIGFyZWEocDEsIHExLCBwMikgPiAwICE9PSBhcmVhKHAxLCBxMSwgcTIpID4gMCAmJlxuICAgICAgICAgICBhcmVhKHAyLCBxMiwgcDEpID4gMCAhPT0gYXJlYShwMiwgcTIsIHExKSA+IDA7XG59XG5cbi8vIGNoZWNrIGlmIGEgcG9seWdvbiBkaWFnb25hbCBpbnRlcnNlY3RzIGFueSBwb2x5Z29uIHNlZ21lbnRzXG5mdW5jdGlvbiBpbnRlcnNlY3RzUG9seWdvbihhLCBiKSB7XG4gICAgdmFyIHAgPSBhO1xuICAgIGRvIHtcbiAgICAgICAgaWYgKHAuaSAhPT0gYS5pICYmIHAubmV4dC5pICE9PSBhLmkgJiYgcC5pICE9PSBiLmkgJiYgcC5uZXh0LmkgIT09IGIuaSAmJlxuICAgICAgICAgICAgICAgIGludGVyc2VjdHMocCwgcC5uZXh0LCBhLCBiKSkgcmV0dXJuIHRydWU7XG4gICAgICAgIHAgPSBwLm5leHQ7XG4gICAgfSB3aGlsZSAocCAhPT0gYSk7XG5cbiAgICByZXR1cm4gZmFsc2U7XG59XG5cbi8vIGNoZWNrIGlmIGEgcG9seWdvbiBkaWFnb25hbCBpcyBsb2NhbGx5IGluc2lkZSB0aGUgcG9seWdvblxuZnVuY3Rpb24gbG9jYWxseUluc2lkZShhLCBiKSB7XG4gICAgcmV0dXJuIGFyZWEoYS5wcmV2LCBhLCBhLm5leHQpIDwgMCA/XG4gICAgICAgIGFyZWEoYSwgYiwgYS5uZXh0KSA+PSAwICYmIGFyZWEoYSwgYS5wcmV2LCBiKSA+PSAwIDpcbiAgICAgICAgYXJlYShhLCBiLCBhLnByZXYpIDwgMCB8fCBhcmVhKGEsIGEubmV4dCwgYikgPCAwO1xufVxuXG4vLyBjaGVjayBpZiB0aGUgbWlkZGxlIHBvaW50IG9mIGEgcG9seWdvbiBkaWFnb25hbCBpcyBpbnNpZGUgdGhlIHBvbHlnb25cbmZ1bmN0aW9uIG1pZGRsZUluc2lkZShhLCBiKSB7XG4gICAgdmFyIHAgPSBhLFxuICAgICAgICBpbnNpZGUgPSBmYWxzZSxcbiAgICAgICAgcHggPSAoYS54ICsgYi54KSAvIDIsXG4gICAgICAgIHB5ID0gKGEueSArIGIueSkgLyAyO1xuICAgIGRvIHtcbiAgICAgICAgaWYgKCgocC55ID4gcHkpICE9PSAocC5uZXh0LnkgPiBweSkpICYmIChweCA8IChwLm5leHQueCAtIHAueCkgKiAocHkgLSBwLnkpIC8gKHAubmV4dC55IC0gcC55KSArIHAueCkpXG4gICAgICAgICAgICBpbnNpZGUgPSAhaW5zaWRlO1xuICAgICAgICBwID0gcC5uZXh0O1xuICAgIH0gd2hpbGUgKHAgIT09IGEpO1xuXG4gICAgcmV0dXJuIGluc2lkZTtcbn1cblxuLy8gbGluayB0d28gcG9seWdvbiB2ZXJ0aWNlcyB3aXRoIGEgYnJpZGdlOyBpZiB0aGUgdmVydGljZXMgYmVsb25nIHRvIHRoZSBzYW1lIHJpbmcsIGl0IHNwbGl0cyBwb2x5Z29uIGludG8gdHdvO1xuLy8gaWYgb25lIGJlbG9uZ3MgdG8gdGhlIG91dGVyIHJpbmcgYW5kIGFub3RoZXIgdG8gYSBob2xlLCBpdCBtZXJnZXMgaXQgaW50byBhIHNpbmdsZSByaW5nXG5mdW5jdGlvbiBzcGxpdFBvbHlnb24oYSwgYikge1xuICAgIHZhciBhMiA9IG5ldyBOb2RlKGEuaSwgYS54LCBhLnkpLFxuICAgICAgICBiMiA9IG5ldyBOb2RlKGIuaSwgYi54LCBiLnkpLFxuICAgICAgICBhbiA9IGEubmV4dCxcbiAgICAgICAgYnAgPSBiLnByZXY7XG5cbiAgICBhLm5leHQgPSBiO1xuICAgIGIucHJldiA9IGE7XG5cbiAgICBhMi5uZXh0ID0gYW47XG4gICAgYW4ucHJldiA9IGEyO1xuXG4gICAgYjIubmV4dCA9IGEyO1xuICAgIGEyLnByZXYgPSBiMjtcblxuICAgIGJwLm5leHQgPSBiMjtcbiAgICBiMi5wcmV2ID0gYnA7XG5cbiAgICByZXR1cm4gYjI7XG59XG5cbi8vIGNyZWF0ZSBhIG5vZGUgYW5kIG9wdGlvbmFsbHkgbGluayBpdCB3aXRoIHByZXZpb3VzIG9uZSAoaW4gYSBjaXJjdWxhciBkb3VibHkgbGlua2VkIGxpc3QpXG5mdW5jdGlvbiBpbnNlcnROb2RlKGksIHgsIHksIGxhc3QpIHtcbiAgICB2YXIgcCA9IG5ldyBOb2RlKGksIHgsIHkpO1xuXG4gICAgaWYgKCFsYXN0KSB7XG4gICAgICAgIHAucHJldiA9IHA7XG4gICAgICAgIHAubmV4dCA9IHA7XG5cbiAgICB9IGVsc2Uge1xuICAgICAgICBwLm5leHQgPSBsYXN0Lm5leHQ7XG4gICAgICAgIHAucHJldiA9IGxhc3Q7XG4gICAgICAgIGxhc3QubmV4dC5wcmV2ID0gcDtcbiAgICAgICAgbGFzdC5uZXh0ID0gcDtcbiAgICB9XG4gICAgcmV0dXJuIHA7XG59XG5cbmZ1bmN0aW9uIHJlbW92ZU5vZGUocCkge1xuICAgIHAubmV4dC5wcmV2ID0gcC5wcmV2O1xuICAgIHAucHJldi5uZXh0ID0gcC5uZXh0O1xuXG4gICAgaWYgKHAucHJldlopIHAucHJldloubmV4dFogPSBwLm5leHRaO1xuICAgIGlmIChwLm5leHRaKSBwLm5leHRaLnByZXZaID0gcC5wcmV2Wjtcbn1cblxuZnVuY3Rpb24gTm9kZShpLCB4LCB5KSB7XG4gICAgLy8gdmVydGljZSBpbmRleCBpbiBjb29yZGluYXRlcyBhcnJheVxuICAgIHRoaXMuaSA9IGk7XG5cbiAgICAvLyB2ZXJ0ZXggY29vcmRpbmF0ZXNcbiAgICB0aGlzLnggPSB4O1xuICAgIHRoaXMueSA9IHk7XG5cbiAgICAvLyBwcmV2aW91cyBhbmQgbmV4dCB2ZXJ0aWNlIG5vZGVzIGluIGEgcG9seWdvbiByaW5nXG4gICAgdGhpcy5wcmV2ID0gbnVsbDtcbiAgICB0aGlzLm5leHQgPSBudWxsO1xuXG4gICAgLy8gei1vcmRlciBjdXJ2ZSB2YWx1ZVxuICAgIHRoaXMueiA9IG51bGw7XG5cbiAgICAvLyBwcmV2aW91cyBhbmQgbmV4dCBub2RlcyBpbiB6LW9yZGVyXG4gICAgdGhpcy5wcmV2WiA9IG51bGw7XG4gICAgdGhpcy5uZXh0WiA9IG51bGw7XG5cbiAgICAvLyBpbmRpY2F0ZXMgd2hldGhlciB0aGlzIGlzIGEgc3RlaW5lciBwb2ludFxuICAgIHRoaXMuc3RlaW5lciA9IGZhbHNlO1xufVxuIiwiJ3VzZSBzdHJpY3QnO1xuXG4vL1xuLy8gV2Ugc3RvcmUgb3VyIEVFIG9iamVjdHMgaW4gYSBwbGFpbiBvYmplY3Qgd2hvc2UgcHJvcGVydGllcyBhcmUgZXZlbnQgbmFtZXMuXG4vLyBJZiBgT2JqZWN0LmNyZWF0ZShudWxsKWAgaXMgbm90IHN1cHBvcnRlZCB3ZSBwcmVmaXggdGhlIGV2ZW50IG5hbWVzIHdpdGggYVxuLy8gYH5gIHRvIG1ha2Ugc3VyZSB0aGF0IHRoZSBidWlsdC1pbiBvYmplY3QgcHJvcGVydGllcyBhcmUgbm90IG92ZXJyaWRkZW4gb3Jcbi8vIHVzZWQgYXMgYW4gYXR0YWNrIHZlY3Rvci5cbi8vIFdlIGFsc28gYXNzdW1lIHRoYXQgYE9iamVjdC5jcmVhdGUobnVsbClgIGlzIGF2YWlsYWJsZSB3aGVuIHRoZSBldmVudCBuYW1lXG4vLyBpcyBhbiBFUzYgU3ltYm9sLlxuLy9cbnZhciBwcmVmaXggPSB0eXBlb2YgT2JqZWN0LmNyZWF0ZSAhPT0gJ2Z1bmN0aW9uJyA/ICd+JyA6IGZhbHNlO1xuXG4vKipcbiAqIFJlcHJlc2VudGF0aW9uIG9mIGEgc2luZ2xlIEV2ZW50RW1pdHRlciBmdW5jdGlvbi5cbiAqXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmbiBFdmVudCBoYW5kbGVyIHRvIGJlIGNhbGxlZC5cbiAqIEBwYXJhbSB7TWl4ZWR9IGNvbnRleHQgQ29udGV4dCBmb3IgZnVuY3Rpb24gZXhlY3V0aW9uLlxuICogQHBhcmFtIHtCb29sZWFufSBvbmNlIE9ubHkgZW1pdCBvbmNlXG4gKiBAYXBpIHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gRUUoZm4sIGNvbnRleHQsIG9uY2UpIHtcbiAgdGhpcy5mbiA9IGZuO1xuICB0aGlzLmNvbnRleHQgPSBjb250ZXh0O1xuICB0aGlzLm9uY2UgPSBvbmNlIHx8IGZhbHNlO1xufVxuXG4vKipcbiAqIE1pbmltYWwgRXZlbnRFbWl0dGVyIGludGVyZmFjZSB0aGF0IGlzIG1vbGRlZCBhZ2FpbnN0IHRoZSBOb2RlLmpzXG4gKiBFdmVudEVtaXR0ZXIgaW50ZXJmYWNlLlxuICpcbiAqIEBjb25zdHJ1Y3RvclxuICogQGFwaSBwdWJsaWNcbiAqL1xuZnVuY3Rpb24gRXZlbnRFbWl0dGVyKCkgeyAvKiBOb3RoaW5nIHRvIHNldCAqLyB9XG5cbi8qKlxuICogSG9sZHMgdGhlIGFzc2lnbmVkIEV2ZW50RW1pdHRlcnMgYnkgbmFtZS5cbiAqXG4gKiBAdHlwZSB7T2JqZWN0fVxuICogQHByaXZhdGVcbiAqL1xuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5fZXZlbnRzID0gdW5kZWZpbmVkO1xuXG4vKipcbiAqIFJldHVybiBhIGxpc3Qgb2YgYXNzaWduZWQgZXZlbnQgbGlzdGVuZXJzLlxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBldmVudCBUaGUgZXZlbnRzIHRoYXQgc2hvdWxkIGJlIGxpc3RlZC5cbiAqIEBwYXJhbSB7Qm9vbGVhbn0gZXhpc3RzIFdlIG9ubHkgbmVlZCB0byBrbm93IGlmIHRoZXJlIGFyZSBsaXN0ZW5lcnMuXG4gKiBAcmV0dXJucyB7QXJyYXl8Qm9vbGVhbn1cbiAqIEBhcGkgcHVibGljXG4gKi9cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUubGlzdGVuZXJzID0gZnVuY3Rpb24gbGlzdGVuZXJzKGV2ZW50LCBleGlzdHMpIHtcbiAgdmFyIGV2dCA9IHByZWZpeCA/IHByZWZpeCArIGV2ZW50IDogZXZlbnRcbiAgICAsIGF2YWlsYWJsZSA9IHRoaXMuX2V2ZW50cyAmJiB0aGlzLl9ldmVudHNbZXZ0XTtcblxuICBpZiAoZXhpc3RzKSByZXR1cm4gISFhdmFpbGFibGU7XG4gIGlmICghYXZhaWxhYmxlKSByZXR1cm4gW107XG4gIGlmIChhdmFpbGFibGUuZm4pIHJldHVybiBbYXZhaWxhYmxlLmZuXTtcblxuICBmb3IgKHZhciBpID0gMCwgbCA9IGF2YWlsYWJsZS5sZW5ndGgsIGVlID0gbmV3IEFycmF5KGwpOyBpIDwgbDsgaSsrKSB7XG4gICAgZWVbaV0gPSBhdmFpbGFibGVbaV0uZm47XG4gIH1cblxuICByZXR1cm4gZWU7XG59O1xuXG4vKipcbiAqIEVtaXQgYW4gZXZlbnQgdG8gYWxsIHJlZ2lzdGVyZWQgZXZlbnQgbGlzdGVuZXJzLlxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBldmVudCBUaGUgbmFtZSBvZiB0aGUgZXZlbnQuXG4gKiBAcmV0dXJucyB7Qm9vbGVhbn0gSW5kaWNhdGlvbiBpZiB3ZSd2ZSBlbWl0dGVkIGFuIGV2ZW50LlxuICogQGFwaSBwdWJsaWNcbiAqL1xuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5lbWl0ID0gZnVuY3Rpb24gZW1pdChldmVudCwgYTEsIGEyLCBhMywgYTQsIGE1KSB7XG4gIHZhciBldnQgPSBwcmVmaXggPyBwcmVmaXggKyBldmVudCA6IGV2ZW50O1xuXG4gIGlmICghdGhpcy5fZXZlbnRzIHx8ICF0aGlzLl9ldmVudHNbZXZ0XSkgcmV0dXJuIGZhbHNlO1xuXG4gIHZhciBsaXN0ZW5lcnMgPSB0aGlzLl9ldmVudHNbZXZ0XVxuICAgICwgbGVuID0gYXJndW1lbnRzLmxlbmd0aFxuICAgICwgYXJnc1xuICAgICwgaTtcblxuICBpZiAoJ2Z1bmN0aW9uJyA9PT0gdHlwZW9mIGxpc3RlbmVycy5mbikge1xuICAgIGlmIChsaXN0ZW5lcnMub25jZSkgdGhpcy5yZW1vdmVMaXN0ZW5lcihldmVudCwgbGlzdGVuZXJzLmZuLCB1bmRlZmluZWQsIHRydWUpO1xuXG4gICAgc3dpdGNoIChsZW4pIHtcbiAgICAgIGNhc2UgMTogcmV0dXJuIGxpc3RlbmVycy5mbi5jYWxsKGxpc3RlbmVycy5jb250ZXh0KSwgdHJ1ZTtcbiAgICAgIGNhc2UgMjogcmV0dXJuIGxpc3RlbmVycy5mbi5jYWxsKGxpc3RlbmVycy5jb250ZXh0LCBhMSksIHRydWU7XG4gICAgICBjYXNlIDM6IHJldHVybiBsaXN0ZW5lcnMuZm4uY2FsbChsaXN0ZW5lcnMuY29udGV4dCwgYTEsIGEyKSwgdHJ1ZTtcbiAgICAgIGNhc2UgNDogcmV0dXJuIGxpc3RlbmVycy5mbi5jYWxsKGxpc3RlbmVycy5jb250ZXh0LCBhMSwgYTIsIGEzKSwgdHJ1ZTtcbiAgICAgIGNhc2UgNTogcmV0dXJuIGxpc3RlbmVycy5mbi5jYWxsKGxpc3RlbmVycy5jb250ZXh0LCBhMSwgYTIsIGEzLCBhNCksIHRydWU7XG4gICAgICBjYXNlIDY6IHJldHVybiBsaXN0ZW5lcnMuZm4uY2FsbChsaXN0ZW5lcnMuY29udGV4dCwgYTEsIGEyLCBhMywgYTQsIGE1KSwgdHJ1ZTtcbiAgICB9XG5cbiAgICBmb3IgKGkgPSAxLCBhcmdzID0gbmV3IEFycmF5KGxlbiAtMSk7IGkgPCBsZW47IGkrKykge1xuICAgICAgYXJnc1tpIC0gMV0gPSBhcmd1bWVudHNbaV07XG4gICAgfVxuXG4gICAgbGlzdGVuZXJzLmZuLmFwcGx5KGxpc3RlbmVycy5jb250ZXh0LCBhcmdzKTtcbiAgfSBlbHNlIHtcbiAgICB2YXIgbGVuZ3RoID0gbGlzdGVuZXJzLmxlbmd0aFxuICAgICAgLCBqO1xuXG4gICAgZm9yIChpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAobGlzdGVuZXJzW2ldLm9uY2UpIHRoaXMucmVtb3ZlTGlzdGVuZXIoZXZlbnQsIGxpc3RlbmVyc1tpXS5mbiwgdW5kZWZpbmVkLCB0cnVlKTtcblxuICAgICAgc3dpdGNoIChsZW4pIHtcbiAgICAgICAgY2FzZSAxOiBsaXN0ZW5lcnNbaV0uZm4uY2FsbChsaXN0ZW5lcnNbaV0uY29udGV4dCk7IGJyZWFrO1xuICAgICAgICBjYXNlIDI6IGxpc3RlbmVyc1tpXS5mbi5jYWxsKGxpc3RlbmVyc1tpXS5jb250ZXh0LCBhMSk7IGJyZWFrO1xuICAgICAgICBjYXNlIDM6IGxpc3RlbmVyc1tpXS5mbi5jYWxsKGxpc3RlbmVyc1tpXS5jb250ZXh0LCBhMSwgYTIpOyBicmVhaztcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICBpZiAoIWFyZ3MpIGZvciAoaiA9IDEsIGFyZ3MgPSBuZXcgQXJyYXkobGVuIC0xKTsgaiA8IGxlbjsgaisrKSB7XG4gICAgICAgICAgICBhcmdzW2ogLSAxXSA9IGFyZ3VtZW50c1tqXTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBsaXN0ZW5lcnNbaV0uZm4uYXBwbHkobGlzdGVuZXJzW2ldLmNvbnRleHQsIGFyZ3MpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiB0cnVlO1xufTtcblxuLyoqXG4gKiBSZWdpc3RlciBhIG5ldyBFdmVudExpc3RlbmVyIGZvciB0aGUgZ2l2ZW4gZXZlbnQuXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IGV2ZW50IE5hbWUgb2YgdGhlIGV2ZW50LlxuICogQHBhcmFtIHtGdW5jdG9ufSBmbiBDYWxsYmFjayBmdW5jdGlvbi5cbiAqIEBwYXJhbSB7TWl4ZWR9IGNvbnRleHQgVGhlIGNvbnRleHQgb2YgdGhlIGZ1bmN0aW9uLlxuICogQGFwaSBwdWJsaWNcbiAqL1xuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5vbiA9IGZ1bmN0aW9uIG9uKGV2ZW50LCBmbiwgY29udGV4dCkge1xuICB2YXIgbGlzdGVuZXIgPSBuZXcgRUUoZm4sIGNvbnRleHQgfHwgdGhpcylcbiAgICAsIGV2dCA9IHByZWZpeCA/IHByZWZpeCArIGV2ZW50IDogZXZlbnQ7XG5cbiAgaWYgKCF0aGlzLl9ldmVudHMpIHRoaXMuX2V2ZW50cyA9IHByZWZpeCA/IHt9IDogT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgaWYgKCF0aGlzLl9ldmVudHNbZXZ0XSkgdGhpcy5fZXZlbnRzW2V2dF0gPSBsaXN0ZW5lcjtcbiAgZWxzZSB7XG4gICAgaWYgKCF0aGlzLl9ldmVudHNbZXZ0XS5mbikgdGhpcy5fZXZlbnRzW2V2dF0ucHVzaChsaXN0ZW5lcik7XG4gICAgZWxzZSB0aGlzLl9ldmVudHNbZXZ0XSA9IFtcbiAgICAgIHRoaXMuX2V2ZW50c1tldnRdLCBsaXN0ZW5lclxuICAgIF07XG4gIH1cblxuICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogQWRkIGFuIEV2ZW50TGlzdGVuZXIgdGhhdCdzIG9ubHkgY2FsbGVkIG9uY2UuXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IGV2ZW50IE5hbWUgb2YgdGhlIGV2ZW50LlxuICogQHBhcmFtIHtGdW5jdGlvbn0gZm4gQ2FsbGJhY2sgZnVuY3Rpb24uXG4gKiBAcGFyYW0ge01peGVkfSBjb250ZXh0IFRoZSBjb250ZXh0IG9mIHRoZSBmdW5jdGlvbi5cbiAqIEBhcGkgcHVibGljXG4gKi9cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUub25jZSA9IGZ1bmN0aW9uIG9uY2UoZXZlbnQsIGZuLCBjb250ZXh0KSB7XG4gIHZhciBsaXN0ZW5lciA9IG5ldyBFRShmbiwgY29udGV4dCB8fCB0aGlzLCB0cnVlKVxuICAgICwgZXZ0ID0gcHJlZml4ID8gcHJlZml4ICsgZXZlbnQgOiBldmVudDtcblxuICBpZiAoIXRoaXMuX2V2ZW50cykgdGhpcy5fZXZlbnRzID0gcHJlZml4ID8ge30gOiBPYmplY3QuY3JlYXRlKG51bGwpO1xuICBpZiAoIXRoaXMuX2V2ZW50c1tldnRdKSB0aGlzLl9ldmVudHNbZXZ0XSA9IGxpc3RlbmVyO1xuICBlbHNlIHtcbiAgICBpZiAoIXRoaXMuX2V2ZW50c1tldnRdLmZuKSB0aGlzLl9ldmVudHNbZXZ0XS5wdXNoKGxpc3RlbmVyKTtcbiAgICBlbHNlIHRoaXMuX2V2ZW50c1tldnRdID0gW1xuICAgICAgdGhpcy5fZXZlbnRzW2V2dF0sIGxpc3RlbmVyXG4gICAgXTtcbiAgfVxuXG4gIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBSZW1vdmUgZXZlbnQgbGlzdGVuZXJzLlxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBldmVudCBUaGUgZXZlbnQgd2Ugd2FudCB0byByZW1vdmUuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmbiBUaGUgbGlzdGVuZXIgdGhhdCB3ZSBuZWVkIHRvIGZpbmQuXG4gKiBAcGFyYW0ge01peGVkfSBjb250ZXh0IE9ubHkgcmVtb3ZlIGxpc3RlbmVycyBtYXRjaGluZyB0aGlzIGNvbnRleHQuXG4gKiBAcGFyYW0ge0Jvb2xlYW59IG9uY2UgT25seSByZW1vdmUgb25jZSBsaXN0ZW5lcnMuXG4gKiBAYXBpIHB1YmxpY1xuICovXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLnJlbW92ZUxpc3RlbmVyID0gZnVuY3Rpb24gcmVtb3ZlTGlzdGVuZXIoZXZlbnQsIGZuLCBjb250ZXh0LCBvbmNlKSB7XG4gIHZhciBldnQgPSBwcmVmaXggPyBwcmVmaXggKyBldmVudCA6IGV2ZW50O1xuXG4gIGlmICghdGhpcy5fZXZlbnRzIHx8ICF0aGlzLl9ldmVudHNbZXZ0XSkgcmV0dXJuIHRoaXM7XG5cbiAgdmFyIGxpc3RlbmVycyA9IHRoaXMuX2V2ZW50c1tldnRdXG4gICAgLCBldmVudHMgPSBbXTtcblxuICBpZiAoZm4pIHtcbiAgICBpZiAobGlzdGVuZXJzLmZuKSB7XG4gICAgICBpZiAoXG4gICAgICAgICAgIGxpc3RlbmVycy5mbiAhPT0gZm5cbiAgICAgICAgfHwgKG9uY2UgJiYgIWxpc3RlbmVycy5vbmNlKVxuICAgICAgICB8fCAoY29udGV4dCAmJiBsaXN0ZW5lcnMuY29udGV4dCAhPT0gY29udGV4dClcbiAgICAgICkge1xuICAgICAgICBldmVudHMucHVzaChsaXN0ZW5lcnMpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBmb3IgKHZhciBpID0gMCwgbGVuZ3RoID0gbGlzdGVuZXJzLmxlbmd0aDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICAgICBsaXN0ZW5lcnNbaV0uZm4gIT09IGZuXG4gICAgICAgICAgfHwgKG9uY2UgJiYgIWxpc3RlbmVyc1tpXS5vbmNlKVxuICAgICAgICAgIHx8IChjb250ZXh0ICYmIGxpc3RlbmVyc1tpXS5jb250ZXh0ICE9PSBjb250ZXh0KVxuICAgICAgICApIHtcbiAgICAgICAgICBldmVudHMucHVzaChsaXN0ZW5lcnNbaV0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLy9cbiAgLy8gUmVzZXQgdGhlIGFycmF5LCBvciByZW1vdmUgaXQgY29tcGxldGVseSBpZiB3ZSBoYXZlIG5vIG1vcmUgbGlzdGVuZXJzLlxuICAvL1xuICBpZiAoZXZlbnRzLmxlbmd0aCkge1xuICAgIHRoaXMuX2V2ZW50c1tldnRdID0gZXZlbnRzLmxlbmd0aCA9PT0gMSA/IGV2ZW50c1swXSA6IGV2ZW50cztcbiAgfSBlbHNlIHtcbiAgICBkZWxldGUgdGhpcy5fZXZlbnRzW2V2dF07XG4gIH1cblxuICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogUmVtb3ZlIGFsbCBsaXN0ZW5lcnMgb3Igb25seSB0aGUgbGlzdGVuZXJzIGZvciB0aGUgc3BlY2lmaWVkIGV2ZW50LlxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBldmVudCBUaGUgZXZlbnQgd2FudCB0byByZW1vdmUgYWxsIGxpc3RlbmVycyBmb3IuXG4gKiBAYXBpIHB1YmxpY1xuICovXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLnJlbW92ZUFsbExpc3RlbmVycyA9IGZ1bmN0aW9uIHJlbW92ZUFsbExpc3RlbmVycyhldmVudCkge1xuICBpZiAoIXRoaXMuX2V2ZW50cykgcmV0dXJuIHRoaXM7XG5cbiAgaWYgKGV2ZW50KSBkZWxldGUgdGhpcy5fZXZlbnRzW3ByZWZpeCA/IHByZWZpeCArIGV2ZW50IDogZXZlbnRdO1xuICBlbHNlIHRoaXMuX2V2ZW50cyA9IHByZWZpeCA/IHt9IDogT2JqZWN0LmNyZWF0ZShudWxsKTtcblxuICByZXR1cm4gdGhpcztcbn07XG5cbi8vXG4vLyBBbGlhcyBtZXRob2RzIG5hbWVzIGJlY2F1c2UgcGVvcGxlIHJvbGwgbGlrZSB0aGF0LlxuLy9cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUub2ZmID0gRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5yZW1vdmVMaXN0ZW5lcjtcbkV2ZW50RW1pdHRlci5wcm90b3R5cGUuYWRkTGlzdGVuZXIgPSBFdmVudEVtaXR0ZXIucHJvdG90eXBlLm9uO1xuXG4vL1xuLy8gVGhpcyBmdW5jdGlvbiBkb2Vzbid0IGFwcGx5IGFueW1vcmUuXG4vL1xuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5zZXRNYXhMaXN0ZW5lcnMgPSBmdW5jdGlvbiBzZXRNYXhMaXN0ZW5lcnMoKSB7XG4gIHJldHVybiB0aGlzO1xufTtcblxuLy9cbi8vIEV4cG9zZSB0aGUgcHJlZml4LlxuLy9cbkV2ZW50RW1pdHRlci5wcmVmaXhlZCA9IHByZWZpeDtcblxuLy9cbi8vIEV4cG9zZSB0aGUgbW9kdWxlLlxuLy9cbmlmICgndW5kZWZpbmVkJyAhPT0gdHlwZW9mIG1vZHVsZSkge1xuICBtb2R1bGUuZXhwb3J0cyA9IEV2ZW50RW1pdHRlcjtcbn1cbiIsIi8qIGVzbGludC1kaXNhYmxlIG5vLXVudXNlZC12YXJzICovXG4ndXNlIHN0cmljdCc7XG52YXIgaGFzT3duUHJvcGVydHkgPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O1xudmFyIHByb3BJc0VudW1lcmFibGUgPSBPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlO1xuXG5mdW5jdGlvbiB0b09iamVjdCh2YWwpIHtcblx0aWYgKHZhbCA9PT0gbnVsbCB8fCB2YWwgPT09IHVuZGVmaW5lZCkge1xuXHRcdHRocm93IG5ldyBUeXBlRXJyb3IoJ09iamVjdC5hc3NpZ24gY2Fubm90IGJlIGNhbGxlZCB3aXRoIG51bGwgb3IgdW5kZWZpbmVkJyk7XG5cdH1cblxuXHRyZXR1cm4gT2JqZWN0KHZhbCk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0LCBzb3VyY2UpIHtcblx0dmFyIGZyb207XG5cdHZhciB0byA9IHRvT2JqZWN0KHRhcmdldCk7XG5cdHZhciBzeW1ib2xzO1xuXG5cdGZvciAodmFyIHMgPSAxOyBzIDwgYXJndW1lbnRzLmxlbmd0aDsgcysrKSB7XG5cdFx0ZnJvbSA9IE9iamVjdChhcmd1bWVudHNbc10pO1xuXG5cdFx0Zm9yICh2YXIga2V5IGluIGZyb20pIHtcblx0XHRcdGlmIChoYXNPd25Qcm9wZXJ0eS5jYWxsKGZyb20sIGtleSkpIHtcblx0XHRcdFx0dG9ba2V5XSA9IGZyb21ba2V5XTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykge1xuXHRcdFx0c3ltYm9scyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZnJvbSk7XG5cdFx0XHRmb3IgKHZhciBpID0gMDsgaSA8IHN5bWJvbHMubGVuZ3RoOyBpKyspIHtcblx0XHRcdFx0aWYgKHByb3BJc0VudW1lcmFibGUuY2FsbChmcm9tLCBzeW1ib2xzW2ldKSkge1xuXHRcdFx0XHRcdHRvW3N5bWJvbHNbaV1dID0gZnJvbVtzeW1ib2xzW2ldXTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdHJldHVybiB0bztcbn07XG4iLCIvKiFcbiAqIGFzeW5jXG4gKiBodHRwczovL2dpdGh1Yi5jb20vY2FvbGFuL2FzeW5jXG4gKlxuICogQ29weXJpZ2h0IDIwMTAtMjAxNCBDYW9sYW4gTWNNYWhvblxuICogUmVsZWFzZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlXG4gKi9cbi8qanNoaW50IG9uZXZhcjogZmFsc2UsIGluZGVudDo0ICovXG4vKmdsb2JhbCBzZXRJbW1lZGlhdGU6IGZhbHNlLCBzZXRUaW1lb3V0OiBmYWxzZSwgY29uc29sZTogZmFsc2UgKi9cbihmdW5jdGlvbiAoKSB7XG5cbiAgICB2YXIgYXN5bmMgPSB7fTtcblxuICAgIC8vIGdsb2JhbCBvbiB0aGUgc2VydmVyLCB3aW5kb3cgaW4gdGhlIGJyb3dzZXJcbiAgICB2YXIgcm9vdCwgcHJldmlvdXNfYXN5bmM7XG5cbiAgICByb290ID0gdGhpcztcbiAgICBpZiAocm9vdCAhPSBudWxsKSB7XG4gICAgICBwcmV2aW91c19hc3luYyA9IHJvb3QuYXN5bmM7XG4gICAgfVxuXG4gICAgYXN5bmMubm9Db25mbGljdCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcm9vdC5hc3luYyA9IHByZXZpb3VzX2FzeW5jO1xuICAgICAgICByZXR1cm4gYXN5bmM7XG4gICAgfTtcblxuICAgIGZ1bmN0aW9uIG9ubHlfb25jZShmbikge1xuICAgICAgICB2YXIgY2FsbGVkID0gZmFsc2U7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIGlmIChjYWxsZWQpIHRocm93IG5ldyBFcnJvcihcIkNhbGxiYWNrIHdhcyBhbHJlYWR5IGNhbGxlZC5cIik7XG4gICAgICAgICAgICBjYWxsZWQgPSB0cnVlO1xuICAgICAgICAgICAgZm4uYXBwbHkocm9vdCwgYXJndW1lbnRzKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vLy8gY3Jvc3MtYnJvd3NlciBjb21wYXRpYmxpdHkgZnVuY3Rpb25zIC8vLy9cblxuICAgIHZhciBfdG9TdHJpbmcgPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nO1xuXG4gICAgdmFyIF9pc0FycmF5ID0gQXJyYXkuaXNBcnJheSB8fCBmdW5jdGlvbiAob2JqKSB7XG4gICAgICAgIHJldHVybiBfdG9TdHJpbmcuY2FsbChvYmopID09PSAnW29iamVjdCBBcnJheV0nO1xuICAgIH07XG5cbiAgICB2YXIgX2VhY2ggPSBmdW5jdGlvbiAoYXJyLCBpdGVyYXRvcikge1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFyci5sZW5ndGg7IGkgKz0gMSkge1xuICAgICAgICAgICAgaXRlcmF0b3IoYXJyW2ldLCBpLCBhcnIpO1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIHZhciBfbWFwID0gZnVuY3Rpb24gKGFyciwgaXRlcmF0b3IpIHtcbiAgICAgICAgaWYgKGFyci5tYXApIHtcbiAgICAgICAgICAgIHJldHVybiBhcnIubWFwKGl0ZXJhdG9yKTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgcmVzdWx0cyA9IFtdO1xuICAgICAgICBfZWFjaChhcnIsIGZ1bmN0aW9uICh4LCBpLCBhKSB7XG4gICAgICAgICAgICByZXN1bHRzLnB1c2goaXRlcmF0b3IoeCwgaSwgYSkpO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdHM7XG4gICAgfTtcblxuICAgIHZhciBfcmVkdWNlID0gZnVuY3Rpb24gKGFyciwgaXRlcmF0b3IsIG1lbW8pIHtcbiAgICAgICAgaWYgKGFyci5yZWR1Y2UpIHtcbiAgICAgICAgICAgIHJldHVybiBhcnIucmVkdWNlKGl0ZXJhdG9yLCBtZW1vKTtcbiAgICAgICAgfVxuICAgICAgICBfZWFjaChhcnIsIGZ1bmN0aW9uICh4LCBpLCBhKSB7XG4gICAgICAgICAgICBtZW1vID0gaXRlcmF0b3IobWVtbywgeCwgaSwgYSk7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gbWVtbztcbiAgICB9O1xuXG4gICAgdmFyIF9rZXlzID0gZnVuY3Rpb24gKG9iaikge1xuICAgICAgICBpZiAoT2JqZWN0LmtleXMpIHtcbiAgICAgICAgICAgIHJldHVybiBPYmplY3Qua2V5cyhvYmopO1xuICAgICAgICB9XG4gICAgICAgIHZhciBrZXlzID0gW107XG4gICAgICAgIGZvciAodmFyIGsgaW4gb2JqKSB7XG4gICAgICAgICAgICBpZiAob2JqLmhhc093blByb3BlcnR5KGspKSB7XG4gICAgICAgICAgICAgICAga2V5cy5wdXNoKGspO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBrZXlzO1xuICAgIH07XG5cbiAgICAvLy8vIGV4cG9ydGVkIGFzeW5jIG1vZHVsZSBmdW5jdGlvbnMgLy8vL1xuXG4gICAgLy8vLyBuZXh0VGljayBpbXBsZW1lbnRhdGlvbiB3aXRoIGJyb3dzZXItY29tcGF0aWJsZSBmYWxsYmFjayAvLy8vXG4gICAgaWYgKHR5cGVvZiBwcm9jZXNzID09PSAndW5kZWZpbmVkJyB8fCAhKHByb2Nlc3MubmV4dFRpY2spKSB7XG4gICAgICAgIGlmICh0eXBlb2Ygc2V0SW1tZWRpYXRlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICBhc3luYy5uZXh0VGljayA9IGZ1bmN0aW9uIChmbikge1xuICAgICAgICAgICAgICAgIC8vIG5vdCBhIGRpcmVjdCBhbGlhcyBmb3IgSUUxMCBjb21wYXRpYmlsaXR5XG4gICAgICAgICAgICAgICAgc2V0SW1tZWRpYXRlKGZuKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBhc3luYy5zZXRJbW1lZGlhdGUgPSBhc3luYy5uZXh0VGljaztcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGFzeW5jLm5leHRUaWNrID0gZnVuY3Rpb24gKGZuKSB7XG4gICAgICAgICAgICAgICAgc2V0VGltZW91dChmbiwgMCk7XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgYXN5bmMuc2V0SW1tZWRpYXRlID0gYXN5bmMubmV4dFRpY2s7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIGFzeW5jLm5leHRUaWNrID0gcHJvY2Vzcy5uZXh0VGljaztcbiAgICAgICAgaWYgKHR5cGVvZiBzZXRJbW1lZGlhdGUgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICBhc3luYy5zZXRJbW1lZGlhdGUgPSBmdW5jdGlvbiAoZm4pIHtcbiAgICAgICAgICAgICAgLy8gbm90IGEgZGlyZWN0IGFsaWFzIGZvciBJRTEwIGNvbXBhdGliaWxpdHlcbiAgICAgICAgICAgICAgc2V0SW1tZWRpYXRlKGZuKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBhc3luYy5zZXRJbW1lZGlhdGUgPSBhc3luYy5uZXh0VGljaztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGFzeW5jLmVhY2ggPSBmdW5jdGlvbiAoYXJyLCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgY2FsbGJhY2sgPSBjYWxsYmFjayB8fCBmdW5jdGlvbiAoKSB7fTtcbiAgICAgICAgaWYgKCFhcnIubGVuZ3RoKSB7XG4gICAgICAgICAgICByZXR1cm4gY2FsbGJhY2soKTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgY29tcGxldGVkID0gMDtcbiAgICAgICAgX2VhY2goYXJyLCBmdW5jdGlvbiAoeCkge1xuICAgICAgICAgICAgaXRlcmF0b3IoeCwgb25seV9vbmNlKGRvbmUpICk7XG4gICAgICAgIH0pO1xuICAgICAgICBmdW5jdGlvbiBkb25lKGVycikge1xuICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgICAgY2FsbGJhY2sgPSBmdW5jdGlvbiAoKSB7fTtcbiAgICAgICAgICB9XG4gICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgIGNvbXBsZXRlZCArPSAxO1xuICAgICAgICAgICAgICBpZiAoY29tcGxldGVkID49IGFyci5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9O1xuICAgIGFzeW5jLmZvckVhY2ggPSBhc3luYy5lYWNoO1xuXG4gICAgYXN5bmMuZWFjaFNlcmllcyA9IGZ1bmN0aW9uIChhcnIsIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICBjYWxsYmFjayA9IGNhbGxiYWNrIHx8IGZ1bmN0aW9uICgpIHt9O1xuICAgICAgICBpZiAoIWFyci5sZW5ndGgpIHtcbiAgICAgICAgICAgIHJldHVybiBjYWxsYmFjaygpO1xuICAgICAgICB9XG4gICAgICAgIHZhciBjb21wbGV0ZWQgPSAwO1xuICAgICAgICB2YXIgaXRlcmF0ZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGl0ZXJhdG9yKGFycltjb21wbGV0ZWRdLCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayA9IGZ1bmN0aW9uICgpIHt9O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgY29tcGxldGVkICs9IDE7XG4gICAgICAgICAgICAgICAgICAgIGlmIChjb21wbGV0ZWQgPj0gYXJyLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGl0ZXJhdGUoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9O1xuICAgICAgICBpdGVyYXRlKCk7XG4gICAgfTtcbiAgICBhc3luYy5mb3JFYWNoU2VyaWVzID0gYXN5bmMuZWFjaFNlcmllcztcblxuICAgIGFzeW5jLmVhY2hMaW1pdCA9IGZ1bmN0aW9uIChhcnIsIGxpbWl0LCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgdmFyIGZuID0gX2VhY2hMaW1pdChsaW1pdCk7XG4gICAgICAgIGZuLmFwcGx5KG51bGwsIFthcnIsIGl0ZXJhdG9yLCBjYWxsYmFja10pO1xuICAgIH07XG4gICAgYXN5bmMuZm9yRWFjaExpbWl0ID0gYXN5bmMuZWFjaExpbWl0O1xuXG4gICAgdmFyIF9lYWNoTGltaXQgPSBmdW5jdGlvbiAobGltaXQpIHtcblxuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKGFyciwgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICBjYWxsYmFjayA9IGNhbGxiYWNrIHx8IGZ1bmN0aW9uICgpIHt9O1xuICAgICAgICAgICAgaWYgKCFhcnIubGVuZ3RoIHx8IGxpbWl0IDw9IDApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gY2FsbGJhY2soKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHZhciBjb21wbGV0ZWQgPSAwO1xuICAgICAgICAgICAgdmFyIHN0YXJ0ZWQgPSAwO1xuICAgICAgICAgICAgdmFyIHJ1bm5pbmcgPSAwO1xuXG4gICAgICAgICAgICAoZnVuY3Rpb24gcmVwbGVuaXNoICgpIHtcbiAgICAgICAgICAgICAgICBpZiAoY29tcGxldGVkID49IGFyci5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKCk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgd2hpbGUgKHJ1bm5pbmcgPCBsaW1pdCAmJiBzdGFydGVkIDwgYXJyLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICBzdGFydGVkICs9IDE7XG4gICAgICAgICAgICAgICAgICAgIHJ1bm5pbmcgKz0gMTtcbiAgICAgICAgICAgICAgICAgICAgaXRlcmF0b3IoYXJyW3N0YXJ0ZWQgLSAxXSwgZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2sgPSBmdW5jdGlvbiAoKSB7fTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBsZXRlZCArPSAxO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJ1bm5pbmcgLT0gMTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY29tcGxldGVkID49IGFyci5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcGxlbmlzaCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSkoKTtcbiAgICAgICAgfTtcbiAgICB9O1xuXG5cbiAgICB2YXIgZG9QYXJhbGxlbCA9IGZ1bmN0aW9uIChmbikge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIGFyZ3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMpO1xuICAgICAgICAgICAgcmV0dXJuIGZuLmFwcGx5KG51bGwsIFthc3luYy5lYWNoXS5jb25jYXQoYXJncykpO1xuICAgICAgICB9O1xuICAgIH07XG4gICAgdmFyIGRvUGFyYWxsZWxMaW1pdCA9IGZ1bmN0aW9uKGxpbWl0LCBmbikge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIGFyZ3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMpO1xuICAgICAgICAgICAgcmV0dXJuIGZuLmFwcGx5KG51bGwsIFtfZWFjaExpbWl0KGxpbWl0KV0uY29uY2F0KGFyZ3MpKTtcbiAgICAgICAgfTtcbiAgICB9O1xuICAgIHZhciBkb1NlcmllcyA9IGZ1bmN0aW9uIChmbikge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIGFyZ3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMpO1xuICAgICAgICAgICAgcmV0dXJuIGZuLmFwcGx5KG51bGwsIFthc3luYy5lYWNoU2VyaWVzXS5jb25jYXQoYXJncykpO1xuICAgICAgICB9O1xuICAgIH07XG5cblxuICAgIHZhciBfYXN5bmNNYXAgPSBmdW5jdGlvbiAoZWFjaGZuLCBhcnIsIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICBhcnIgPSBfbWFwKGFyciwgZnVuY3Rpb24gKHgsIGkpIHtcbiAgICAgICAgICAgIHJldHVybiB7aW5kZXg6IGksIHZhbHVlOiB4fTtcbiAgICAgICAgfSk7XG4gICAgICAgIGlmICghY2FsbGJhY2spIHtcbiAgICAgICAgICAgIGVhY2hmbihhcnIsIGZ1bmN0aW9uICh4LCBjYWxsYmFjaykge1xuICAgICAgICAgICAgICAgIGl0ZXJhdG9yKHgudmFsdWUsIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdmFyIHJlc3VsdHMgPSBbXTtcbiAgICAgICAgICAgIGVhY2hmbihhcnIsIGZ1bmN0aW9uICh4LCBjYWxsYmFjaykge1xuICAgICAgICAgICAgICAgIGl0ZXJhdG9yKHgudmFsdWUsIGZ1bmN0aW9uIChlcnIsIHYpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0c1t4LmluZGV4XSA9IHY7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9LCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2soZXJyLCByZXN1bHRzKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBhc3luYy5tYXAgPSBkb1BhcmFsbGVsKF9hc3luY01hcCk7XG4gICAgYXN5bmMubWFwU2VyaWVzID0gZG9TZXJpZXMoX2FzeW5jTWFwKTtcbiAgICBhc3luYy5tYXBMaW1pdCA9IGZ1bmN0aW9uIChhcnIsIGxpbWl0LCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgcmV0dXJuIF9tYXBMaW1pdChsaW1pdCkoYXJyLCBpdGVyYXRvciwgY2FsbGJhY2spO1xuICAgIH07XG5cbiAgICB2YXIgX21hcExpbWl0ID0gZnVuY3Rpb24obGltaXQpIHtcbiAgICAgICAgcmV0dXJuIGRvUGFyYWxsZWxMaW1pdChsaW1pdCwgX2FzeW5jTWFwKTtcbiAgICB9O1xuXG4gICAgLy8gcmVkdWNlIG9ubHkgaGFzIGEgc2VyaWVzIHZlcnNpb24sIGFzIGRvaW5nIHJlZHVjZSBpbiBwYXJhbGxlbCB3b24ndFxuICAgIC8vIHdvcmsgaW4gbWFueSBzaXR1YXRpb25zLlxuICAgIGFzeW5jLnJlZHVjZSA9IGZ1bmN0aW9uIChhcnIsIG1lbW8sIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICBhc3luYy5lYWNoU2VyaWVzKGFyciwgZnVuY3Rpb24gKHgsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICBpdGVyYXRvcihtZW1vLCB4LCBmdW5jdGlvbiAoZXJyLCB2KSB7XG4gICAgICAgICAgICAgICAgbWVtbyA9IHY7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICBjYWxsYmFjayhlcnIsIG1lbW8pO1xuICAgICAgICB9KTtcbiAgICB9O1xuICAgIC8vIGluamVjdCBhbGlhc1xuICAgIGFzeW5jLmluamVjdCA9IGFzeW5jLnJlZHVjZTtcbiAgICAvLyBmb2xkbCBhbGlhc1xuICAgIGFzeW5jLmZvbGRsID0gYXN5bmMucmVkdWNlO1xuXG4gICAgYXN5bmMucmVkdWNlUmlnaHQgPSBmdW5jdGlvbiAoYXJyLCBtZW1vLCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgdmFyIHJldmVyc2VkID0gX21hcChhcnIsIGZ1bmN0aW9uICh4KSB7XG4gICAgICAgICAgICByZXR1cm4geDtcbiAgICAgICAgfSkucmV2ZXJzZSgpO1xuICAgICAgICBhc3luYy5yZWR1Y2UocmV2ZXJzZWQsIG1lbW8sIGl0ZXJhdG9yLCBjYWxsYmFjayk7XG4gICAgfTtcbiAgICAvLyBmb2xkciBhbGlhc1xuICAgIGFzeW5jLmZvbGRyID0gYXN5bmMucmVkdWNlUmlnaHQ7XG5cbiAgICB2YXIgX2ZpbHRlciA9IGZ1bmN0aW9uIChlYWNoZm4sIGFyciwgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgIHZhciByZXN1bHRzID0gW107XG4gICAgICAgIGFyciA9IF9tYXAoYXJyLCBmdW5jdGlvbiAoeCwgaSkge1xuICAgICAgICAgICAgcmV0dXJuIHtpbmRleDogaSwgdmFsdWU6IHh9O1xuICAgICAgICB9KTtcbiAgICAgICAgZWFjaGZuKGFyciwgZnVuY3Rpb24gKHgsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICBpdGVyYXRvcih4LnZhbHVlLCBmdW5jdGlvbiAodikge1xuICAgICAgICAgICAgICAgIGlmICh2KSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdHMucHVzaCh4KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2FsbGJhY2soKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICBjYWxsYmFjayhfbWFwKHJlc3VsdHMuc29ydChmdW5jdGlvbiAoYSwgYikge1xuICAgICAgICAgICAgICAgIHJldHVybiBhLmluZGV4IC0gYi5pbmRleDtcbiAgICAgICAgICAgIH0pLCBmdW5jdGlvbiAoeCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB4LnZhbHVlO1xuICAgICAgICAgICAgfSkpO1xuICAgICAgICB9KTtcbiAgICB9O1xuICAgIGFzeW5jLmZpbHRlciA9IGRvUGFyYWxsZWwoX2ZpbHRlcik7XG4gICAgYXN5bmMuZmlsdGVyU2VyaWVzID0gZG9TZXJpZXMoX2ZpbHRlcik7XG4gICAgLy8gc2VsZWN0IGFsaWFzXG4gICAgYXN5bmMuc2VsZWN0ID0gYXN5bmMuZmlsdGVyO1xuICAgIGFzeW5jLnNlbGVjdFNlcmllcyA9IGFzeW5jLmZpbHRlclNlcmllcztcblxuICAgIHZhciBfcmVqZWN0ID0gZnVuY3Rpb24gKGVhY2hmbiwgYXJyLCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgdmFyIHJlc3VsdHMgPSBbXTtcbiAgICAgICAgYXJyID0gX21hcChhcnIsIGZ1bmN0aW9uICh4LCBpKSB7XG4gICAgICAgICAgICByZXR1cm4ge2luZGV4OiBpLCB2YWx1ZTogeH07XG4gICAgICAgIH0pO1xuICAgICAgICBlYWNoZm4oYXJyLCBmdW5jdGlvbiAoeCwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIGl0ZXJhdG9yKHgudmFsdWUsIGZ1bmN0aW9uICh2KSB7XG4gICAgICAgICAgICAgICAgaWYgKCF2KSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdHMucHVzaCh4KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2FsbGJhY2soKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICBjYWxsYmFjayhfbWFwKHJlc3VsdHMuc29ydChmdW5jdGlvbiAoYSwgYikge1xuICAgICAgICAgICAgICAgIHJldHVybiBhLmluZGV4IC0gYi5pbmRleDtcbiAgICAgICAgICAgIH0pLCBmdW5jdGlvbiAoeCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB4LnZhbHVlO1xuICAgICAgICAgICAgfSkpO1xuICAgICAgICB9KTtcbiAgICB9O1xuICAgIGFzeW5jLnJlamVjdCA9IGRvUGFyYWxsZWwoX3JlamVjdCk7XG4gICAgYXN5bmMucmVqZWN0U2VyaWVzID0gZG9TZXJpZXMoX3JlamVjdCk7XG5cbiAgICB2YXIgX2RldGVjdCA9IGZ1bmN0aW9uIChlYWNoZm4sIGFyciwgaXRlcmF0b3IsIG1haW5fY2FsbGJhY2spIHtcbiAgICAgICAgZWFjaGZuKGFyciwgZnVuY3Rpb24gKHgsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICBpdGVyYXRvcih4LCBmdW5jdGlvbiAocmVzdWx0KSB7XG4gICAgICAgICAgICAgICAgaWYgKHJlc3VsdCkge1xuICAgICAgICAgICAgICAgICAgICBtYWluX2NhbGxiYWNrKHgpO1xuICAgICAgICAgICAgICAgICAgICBtYWluX2NhbGxiYWNrID0gZnVuY3Rpb24gKCkge307XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICBtYWluX2NhbGxiYWNrKCk7XG4gICAgICAgIH0pO1xuICAgIH07XG4gICAgYXN5bmMuZGV0ZWN0ID0gZG9QYXJhbGxlbChfZGV0ZWN0KTtcbiAgICBhc3luYy5kZXRlY3RTZXJpZXMgPSBkb1NlcmllcyhfZGV0ZWN0KTtcblxuICAgIGFzeW5jLnNvbWUgPSBmdW5jdGlvbiAoYXJyLCBpdGVyYXRvciwgbWFpbl9jYWxsYmFjaykge1xuICAgICAgICBhc3luYy5lYWNoKGFyciwgZnVuY3Rpb24gKHgsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICBpdGVyYXRvcih4LCBmdW5jdGlvbiAodikge1xuICAgICAgICAgICAgICAgIGlmICh2KSB7XG4gICAgICAgICAgICAgICAgICAgIG1haW5fY2FsbGJhY2sodHJ1ZSk7XG4gICAgICAgICAgICAgICAgICAgIG1haW5fY2FsbGJhY2sgPSBmdW5jdGlvbiAoKSB7fTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2FsbGJhY2soKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICBtYWluX2NhbGxiYWNrKGZhbHNlKTtcbiAgICAgICAgfSk7XG4gICAgfTtcbiAgICAvLyBhbnkgYWxpYXNcbiAgICBhc3luYy5hbnkgPSBhc3luYy5zb21lO1xuXG4gICAgYXN5bmMuZXZlcnkgPSBmdW5jdGlvbiAoYXJyLCBpdGVyYXRvciwgbWFpbl9jYWxsYmFjaykge1xuICAgICAgICBhc3luYy5lYWNoKGFyciwgZnVuY3Rpb24gKHgsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICBpdGVyYXRvcih4LCBmdW5jdGlvbiAodikge1xuICAgICAgICAgICAgICAgIGlmICghdikge1xuICAgICAgICAgICAgICAgICAgICBtYWluX2NhbGxiYWNrKGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgICAgbWFpbl9jYWxsYmFjayA9IGZ1bmN0aW9uICgpIHt9O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgIG1haW5fY2FsbGJhY2sodHJ1ZSk7XG4gICAgICAgIH0pO1xuICAgIH07XG4gICAgLy8gYWxsIGFsaWFzXG4gICAgYXN5bmMuYWxsID0gYXN5bmMuZXZlcnk7XG5cbiAgICBhc3luYy5zb3J0QnkgPSBmdW5jdGlvbiAoYXJyLCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgYXN5bmMubWFwKGFyciwgZnVuY3Rpb24gKHgsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICBpdGVyYXRvcih4LCBmdW5jdGlvbiAoZXJyLCBjcml0ZXJpYSkge1xuICAgICAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKG51bGwsIHt2YWx1ZTogeCwgY3JpdGVyaWE6IGNyaXRlcmlhfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sIGZ1bmN0aW9uIChlcnIsIHJlc3VsdHMpIHtcbiAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHZhciBmbiA9IGZ1bmN0aW9uIChsZWZ0LCByaWdodCkge1xuICAgICAgICAgICAgICAgICAgICB2YXIgYSA9IGxlZnQuY3JpdGVyaWEsIGIgPSByaWdodC5jcml0ZXJpYTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGEgPCBiID8gLTEgOiBhID4gYiA/IDEgOiAwO1xuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgY2FsbGJhY2sobnVsbCwgX21hcChyZXN1bHRzLnNvcnQoZm4pLCBmdW5jdGlvbiAoeCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4geC52YWx1ZTtcbiAgICAgICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH07XG5cbiAgICBhc3luYy5hdXRvID0gZnVuY3Rpb24gKHRhc2tzLCBjYWxsYmFjaykge1xuICAgICAgICBjYWxsYmFjayA9IGNhbGxiYWNrIHx8IGZ1bmN0aW9uICgpIHt9O1xuICAgICAgICB2YXIga2V5cyA9IF9rZXlzKHRhc2tzKTtcbiAgICAgICAgdmFyIHJlbWFpbmluZ1Rhc2tzID0ga2V5cy5sZW5ndGhcbiAgICAgICAgaWYgKCFyZW1haW5pbmdUYXNrcykge1xuICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKCk7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgcmVzdWx0cyA9IHt9O1xuXG4gICAgICAgIHZhciBsaXN0ZW5lcnMgPSBbXTtcbiAgICAgICAgdmFyIGFkZExpc3RlbmVyID0gZnVuY3Rpb24gKGZuKSB7XG4gICAgICAgICAgICBsaXN0ZW5lcnMudW5zaGlmdChmbik7XG4gICAgICAgIH07XG4gICAgICAgIHZhciByZW1vdmVMaXN0ZW5lciA9IGZ1bmN0aW9uIChmbikge1xuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsaXN0ZW5lcnMubGVuZ3RoOyBpICs9IDEpIHtcbiAgICAgICAgICAgICAgICBpZiAobGlzdGVuZXJzW2ldID09PSBmbikge1xuICAgICAgICAgICAgICAgICAgICBsaXN0ZW5lcnMuc3BsaWNlKGksIDEpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICB2YXIgdGFza0NvbXBsZXRlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmVtYWluaW5nVGFza3MtLVxuICAgICAgICAgICAgX2VhY2gobGlzdGVuZXJzLnNsaWNlKDApLCBmdW5jdGlvbiAoZm4pIHtcbiAgICAgICAgICAgICAgICBmbigpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH07XG5cbiAgICAgICAgYWRkTGlzdGVuZXIoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgaWYgKCFyZW1haW5pbmdUYXNrcykge1xuICAgICAgICAgICAgICAgIHZhciB0aGVDYWxsYmFjayA9IGNhbGxiYWNrO1xuICAgICAgICAgICAgICAgIC8vIHByZXZlbnQgZmluYWwgY2FsbGJhY2sgZnJvbSBjYWxsaW5nIGl0c2VsZiBpZiBpdCBlcnJvcnNcbiAgICAgICAgICAgICAgICBjYWxsYmFjayA9IGZ1bmN0aW9uICgpIHt9O1xuXG4gICAgICAgICAgICAgICAgdGhlQ2FsbGJhY2sobnVsbCwgcmVzdWx0cyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIF9lYWNoKGtleXMsIGZ1bmN0aW9uIChrKSB7XG4gICAgICAgICAgICB2YXIgdGFzayA9IF9pc0FycmF5KHRhc2tzW2tdKSA/IHRhc2tzW2tdOiBbdGFza3Nba11dO1xuICAgICAgICAgICAgdmFyIHRhc2tDYWxsYmFjayA9IGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgICAgICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMSk7XG4gICAgICAgICAgICAgICAgaWYgKGFyZ3MubGVuZ3RoIDw9IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgYXJncyA9IGFyZ3NbMF07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHNhZmVSZXN1bHRzID0ge307XG4gICAgICAgICAgICAgICAgICAgIF9lYWNoKF9rZXlzKHJlc3VsdHMpLCBmdW5jdGlvbihya2V5KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzYWZlUmVzdWx0c1tya2V5XSA9IHJlc3VsdHNbcmtleV07XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICBzYWZlUmVzdWx0c1trXSA9IGFyZ3M7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKGVyciwgc2FmZVJlc3VsdHMpO1xuICAgICAgICAgICAgICAgICAgICAvLyBzdG9wIHN1YnNlcXVlbnQgZXJyb3JzIGhpdHRpbmcgY2FsbGJhY2sgbXVsdGlwbGUgdGltZXNcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2sgPSBmdW5jdGlvbiAoKSB7fTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdHNba10gPSBhcmdzO1xuICAgICAgICAgICAgICAgICAgICBhc3luYy5zZXRJbW1lZGlhdGUodGFza0NvbXBsZXRlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgdmFyIHJlcXVpcmVzID0gdGFzay5zbGljZSgwLCBNYXRoLmFicyh0YXNrLmxlbmd0aCAtIDEpKSB8fCBbXTtcbiAgICAgICAgICAgIHZhciByZWFkeSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gX3JlZHVjZShyZXF1aXJlcywgZnVuY3Rpb24gKGEsIHgpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChhICYmIHJlc3VsdHMuaGFzT3duUHJvcGVydHkoeCkpO1xuICAgICAgICAgICAgICAgIH0sIHRydWUpICYmICFyZXN1bHRzLmhhc093blByb3BlcnR5KGspO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGlmIChyZWFkeSgpKSB7XG4gICAgICAgICAgICAgICAgdGFza1t0YXNrLmxlbmd0aCAtIDFdKHRhc2tDYWxsYmFjaywgcmVzdWx0cyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICB2YXIgbGlzdGVuZXIgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChyZWFkeSgpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZW1vdmVMaXN0ZW5lcihsaXN0ZW5lcik7XG4gICAgICAgICAgICAgICAgICAgICAgICB0YXNrW3Rhc2subGVuZ3RoIC0gMV0odGFza0NhbGxiYWNrLCByZXN1bHRzKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgYWRkTGlzdGVuZXIobGlzdGVuZXIpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9O1xuXG4gICAgYXN5bmMucmV0cnkgPSBmdW5jdGlvbih0aW1lcywgdGFzaywgY2FsbGJhY2spIHtcbiAgICAgICAgdmFyIERFRkFVTFRfVElNRVMgPSA1O1xuICAgICAgICB2YXIgYXR0ZW1wdHMgPSBbXTtcbiAgICAgICAgLy8gVXNlIGRlZmF1bHRzIGlmIHRpbWVzIG5vdCBwYXNzZWRcbiAgICAgICAgaWYgKHR5cGVvZiB0aW1lcyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgY2FsbGJhY2sgPSB0YXNrO1xuICAgICAgICAgICAgdGFzayA9IHRpbWVzO1xuICAgICAgICAgICAgdGltZXMgPSBERUZBVUxUX1RJTUVTO1xuICAgICAgICB9XG4gICAgICAgIC8vIE1ha2Ugc3VyZSB0aW1lcyBpcyBhIG51bWJlclxuICAgICAgICB0aW1lcyA9IHBhcnNlSW50KHRpbWVzLCAxMCkgfHwgREVGQVVMVF9USU1FUztcbiAgICAgICAgdmFyIHdyYXBwZWRUYXNrID0gZnVuY3Rpb24od3JhcHBlZENhbGxiYWNrLCB3cmFwcGVkUmVzdWx0cykge1xuICAgICAgICAgICAgdmFyIHJldHJ5QXR0ZW1wdCA9IGZ1bmN0aW9uKHRhc2ssIGZpbmFsQXR0ZW1wdCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbihzZXJpZXNDYWxsYmFjaykge1xuICAgICAgICAgICAgICAgICAgICB0YXNrKGZ1bmN0aW9uKGVyciwgcmVzdWx0KXtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlcmllc0NhbGxiYWNrKCFlcnIgfHwgZmluYWxBdHRlbXB0LCB7ZXJyOiBlcnIsIHJlc3VsdDogcmVzdWx0fSk7XG4gICAgICAgICAgICAgICAgICAgIH0sIHdyYXBwZWRSZXN1bHRzKTtcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIHdoaWxlICh0aW1lcykge1xuICAgICAgICAgICAgICAgIGF0dGVtcHRzLnB1c2gocmV0cnlBdHRlbXB0KHRhc2ssICEodGltZXMtPTEpKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBhc3luYy5zZXJpZXMoYXR0ZW1wdHMsIGZ1bmN0aW9uKGRvbmUsIGRhdGEpe1xuICAgICAgICAgICAgICAgIGRhdGEgPSBkYXRhW2RhdGEubGVuZ3RoIC0gMV07XG4gICAgICAgICAgICAgICAgKHdyYXBwZWRDYWxsYmFjayB8fCBjYWxsYmFjaykoZGF0YS5lcnIsIGRhdGEucmVzdWx0KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIC8vIElmIGEgY2FsbGJhY2sgaXMgcGFzc2VkLCBydW4gdGhpcyBhcyBhIGNvbnRyb2xsIGZsb3dcbiAgICAgICAgcmV0dXJuIGNhbGxiYWNrID8gd3JhcHBlZFRhc2soKSA6IHdyYXBwZWRUYXNrXG4gICAgfTtcblxuICAgIGFzeW5jLndhdGVyZmFsbCA9IGZ1bmN0aW9uICh0YXNrcywgY2FsbGJhY2spIHtcbiAgICAgICAgY2FsbGJhY2sgPSBjYWxsYmFjayB8fCBmdW5jdGlvbiAoKSB7fTtcbiAgICAgICAgaWYgKCFfaXNBcnJheSh0YXNrcykpIHtcbiAgICAgICAgICB2YXIgZXJyID0gbmV3IEVycm9yKCdGaXJzdCBhcmd1bWVudCB0byB3YXRlcmZhbGwgbXVzdCBiZSBhbiBhcnJheSBvZiBmdW5jdGlvbnMnKTtcbiAgICAgICAgICByZXR1cm4gY2FsbGJhY2soZXJyKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIXRhc2tzLmxlbmd0aCkge1xuICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKCk7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIHdyYXBJdGVyYXRvciA9IGZ1bmN0aW9uIChpdGVyYXRvcikge1xuICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrID0gZnVuY3Rpb24gKCkge307XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMSk7XG4gICAgICAgICAgICAgICAgICAgIHZhciBuZXh0ID0gaXRlcmF0b3IubmV4dCgpO1xuICAgICAgICAgICAgICAgICAgICBpZiAobmV4dCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgYXJncy5wdXNoKHdyYXBJdGVyYXRvcihuZXh0KSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhcmdzLnB1c2goY2FsbGJhY2spO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGFzeW5jLnNldEltbWVkaWF0ZShmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpdGVyYXRvci5hcHBseShudWxsLCBhcmdzKTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfTtcbiAgICAgICAgfTtcbiAgICAgICAgd3JhcEl0ZXJhdG9yKGFzeW5jLml0ZXJhdG9yKHRhc2tzKSkoKTtcbiAgICB9O1xuXG4gICAgdmFyIF9wYXJhbGxlbCA9IGZ1bmN0aW9uKGVhY2hmbiwgdGFza3MsIGNhbGxiYWNrKSB7XG4gICAgICAgIGNhbGxiYWNrID0gY2FsbGJhY2sgfHwgZnVuY3Rpb24gKCkge307XG4gICAgICAgIGlmIChfaXNBcnJheSh0YXNrcykpIHtcbiAgICAgICAgICAgIGVhY2hmbi5tYXAodGFza3MsIGZ1bmN0aW9uIChmbiwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgICAgICBpZiAoZm4pIHtcbiAgICAgICAgICAgICAgICAgICAgZm4oZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGFyZ3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsIDEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFyZ3MubGVuZ3RoIDw9IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmdzID0gYXJnc1swXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrLmNhbGwobnVsbCwgZXJyLCBhcmdzKTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSwgY2FsbGJhY2spO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdmFyIHJlc3VsdHMgPSB7fTtcbiAgICAgICAgICAgIGVhY2hmbi5lYWNoKF9rZXlzKHRhc2tzKSwgZnVuY3Rpb24gKGssIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICAgICAgdGFza3Nba10oZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgICAgICAgICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMSk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChhcmdzLmxlbmd0aCA8PSAxKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhcmdzID0gYXJnc1swXTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICByZXN1bHRzW2tdID0gYXJncztcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0sIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnIsIHJlc3VsdHMpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgYXN5bmMucGFyYWxsZWwgPSBmdW5jdGlvbiAodGFza3MsIGNhbGxiYWNrKSB7XG4gICAgICAgIF9wYXJhbGxlbCh7IG1hcDogYXN5bmMubWFwLCBlYWNoOiBhc3luYy5lYWNoIH0sIHRhc2tzLCBjYWxsYmFjayk7XG4gICAgfTtcblxuICAgIGFzeW5jLnBhcmFsbGVsTGltaXQgPSBmdW5jdGlvbih0YXNrcywgbGltaXQsIGNhbGxiYWNrKSB7XG4gICAgICAgIF9wYXJhbGxlbCh7IG1hcDogX21hcExpbWl0KGxpbWl0KSwgZWFjaDogX2VhY2hMaW1pdChsaW1pdCkgfSwgdGFza3MsIGNhbGxiYWNrKTtcbiAgICB9O1xuXG4gICAgYXN5bmMuc2VyaWVzID0gZnVuY3Rpb24gKHRhc2tzLCBjYWxsYmFjaykge1xuICAgICAgICBjYWxsYmFjayA9IGNhbGxiYWNrIHx8IGZ1bmN0aW9uICgpIHt9O1xuICAgICAgICBpZiAoX2lzQXJyYXkodGFza3MpKSB7XG4gICAgICAgICAgICBhc3luYy5tYXBTZXJpZXModGFza3MsIGZ1bmN0aW9uIChmbiwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgICAgICBpZiAoZm4pIHtcbiAgICAgICAgICAgICAgICAgICAgZm4oZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGFyZ3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsIDEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFyZ3MubGVuZ3RoIDw9IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmdzID0gYXJnc1swXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrLmNhbGwobnVsbCwgZXJyLCBhcmdzKTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSwgY2FsbGJhY2spO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdmFyIHJlc3VsdHMgPSB7fTtcbiAgICAgICAgICAgIGFzeW5jLmVhY2hTZXJpZXMoX2tleXModGFza3MpLCBmdW5jdGlvbiAoaywgY2FsbGJhY2spIHtcbiAgICAgICAgICAgICAgICB0YXNrc1trXShmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBhcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGFyZ3MubGVuZ3RoIDw9IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3MgPSBhcmdzWzBdO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdHNba10gPSBhcmdzO1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSwgZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrKGVyciwgcmVzdWx0cyk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH07XG5cbiAgICBhc3luYy5pdGVyYXRvciA9IGZ1bmN0aW9uICh0YXNrcykge1xuICAgICAgICB2YXIgbWFrZUNhbGxiYWNrID0gZnVuY3Rpb24gKGluZGV4KSB7XG4gICAgICAgICAgICB2YXIgZm4gPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgaWYgKHRhc2tzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICB0YXNrc1tpbmRleF0uYXBwbHkobnVsbCwgYXJndW1lbnRzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZuLm5leHQoKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBmbi5uZXh0ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiAoaW5kZXggPCB0YXNrcy5sZW5ndGggLSAxKSA/IG1ha2VDYWxsYmFjayhpbmRleCArIDEpOiBudWxsO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIHJldHVybiBmbjtcbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIG1ha2VDYWxsYmFjaygwKTtcbiAgICB9O1xuXG4gICAgYXN5bmMuYXBwbHkgPSBmdW5jdGlvbiAoZm4pIHtcbiAgICAgICAgdmFyIGFyZ3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsIDEpO1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIGZuLmFwcGx5KFxuICAgICAgICAgICAgICAgIG51bGwsIGFyZ3MuY29uY2F0KEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cykpXG4gICAgICAgICAgICApO1xuICAgICAgICB9O1xuICAgIH07XG5cbiAgICB2YXIgX2NvbmNhdCA9IGZ1bmN0aW9uIChlYWNoZm4sIGFyciwgZm4sIGNhbGxiYWNrKSB7XG4gICAgICAgIHZhciByID0gW107XG4gICAgICAgIGVhY2hmbihhcnIsIGZ1bmN0aW9uICh4LCBjYikge1xuICAgICAgICAgICAgZm4oeCwgZnVuY3Rpb24gKGVyciwgeSkge1xuICAgICAgICAgICAgICAgIHIgPSByLmNvbmNhdCh5IHx8IFtdKTtcbiAgICAgICAgICAgICAgICBjYihlcnIpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgIGNhbGxiYWNrKGVyciwgcik7XG4gICAgICAgIH0pO1xuICAgIH07XG4gICAgYXN5bmMuY29uY2F0ID0gZG9QYXJhbGxlbChfY29uY2F0KTtcbiAgICBhc3luYy5jb25jYXRTZXJpZXMgPSBkb1NlcmllcyhfY29uY2F0KTtcblxuICAgIGFzeW5jLndoaWxzdCA9IGZ1bmN0aW9uICh0ZXN0LCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgaWYgKHRlc3QoKSkge1xuICAgICAgICAgICAgaXRlcmF0b3IoZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGFzeW5jLndoaWxzdCh0ZXN0LCBpdGVyYXRvciwgY2FsbGJhY2spO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIGFzeW5jLmRvV2hpbHN0ID0gZnVuY3Rpb24gKGl0ZXJhdG9yLCB0ZXN0LCBjYWxsYmFjaykge1xuICAgICAgICBpdGVyYXRvcihmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMSk7XG4gICAgICAgICAgICBpZiAodGVzdC5hcHBseShudWxsLCBhcmdzKSkge1xuICAgICAgICAgICAgICAgIGFzeW5jLmRvV2hpbHN0KGl0ZXJhdG9yLCB0ZXN0LCBjYWxsYmFjayk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9O1xuXG4gICAgYXN5bmMudW50aWwgPSBmdW5jdGlvbiAodGVzdCwgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgIGlmICghdGVzdCgpKSB7XG4gICAgICAgICAgICBpdGVyYXRvcihmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYXN5bmMudW50aWwodGVzdCwgaXRlcmF0b3IsIGNhbGxiYWNrKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgY2FsbGJhY2soKTtcbiAgICAgICAgfVxuICAgIH07XG5cbiAgICBhc3luYy5kb1VudGlsID0gZnVuY3Rpb24gKGl0ZXJhdG9yLCB0ZXN0LCBjYWxsYmFjaykge1xuICAgICAgICBpdGVyYXRvcihmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMSk7XG4gICAgICAgICAgICBpZiAoIXRlc3QuYXBwbHkobnVsbCwgYXJncykpIHtcbiAgICAgICAgICAgICAgICBhc3luYy5kb1VudGlsKGl0ZXJhdG9yLCB0ZXN0LCBjYWxsYmFjayk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9O1xuXG4gICAgYXN5bmMucXVldWUgPSBmdW5jdGlvbiAod29ya2VyLCBjb25jdXJyZW5jeSkge1xuICAgICAgICBpZiAoY29uY3VycmVuY3kgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgY29uY3VycmVuY3kgPSAxO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIF9pbnNlcnQocSwgZGF0YSwgcG9zLCBjYWxsYmFjaykge1xuICAgICAgICAgIGlmICghcS5zdGFydGVkKXtcbiAgICAgICAgICAgIHEuc3RhcnRlZCA9IHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICghX2lzQXJyYXkoZGF0YSkpIHtcbiAgICAgICAgICAgICAgZGF0YSA9IFtkYXRhXTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYoZGF0YS5sZW5ndGggPT0gMCkge1xuICAgICAgICAgICAgIC8vIGNhbGwgZHJhaW4gaW1tZWRpYXRlbHkgaWYgdGhlcmUgYXJlIG5vIHRhc2tzXG4gICAgICAgICAgICAgcmV0dXJuIGFzeW5jLnNldEltbWVkaWF0ZShmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgaWYgKHEuZHJhaW4pIHtcbiAgICAgICAgICAgICAgICAgICAgIHEuZHJhaW4oKTtcbiAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgICBfZWFjaChkYXRhLCBmdW5jdGlvbih0YXNrKSB7XG4gICAgICAgICAgICAgIHZhciBpdGVtID0ge1xuICAgICAgICAgICAgICAgICAgZGF0YTogdGFzayxcbiAgICAgICAgICAgICAgICAgIGNhbGxiYWNrOiB0eXBlb2YgY2FsbGJhY2sgPT09ICdmdW5jdGlvbicgPyBjYWxsYmFjayA6IG51bGxcbiAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICBpZiAocG9zKSB7XG4gICAgICAgICAgICAgICAgcS50YXNrcy51bnNoaWZ0KGl0ZW0pO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHEudGFza3MucHVzaChpdGVtKTtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGlmIChxLnNhdHVyYXRlZCAmJiBxLnRhc2tzLmxlbmd0aCA9PT0gcS5jb25jdXJyZW5jeSkge1xuICAgICAgICAgICAgICAgICAgcS5zYXR1cmF0ZWQoKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBhc3luYy5zZXRJbW1lZGlhdGUocS5wcm9jZXNzKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciB3b3JrZXJzID0gMDtcbiAgICAgICAgdmFyIHEgPSB7XG4gICAgICAgICAgICB0YXNrczogW10sXG4gICAgICAgICAgICBjb25jdXJyZW5jeTogY29uY3VycmVuY3ksXG4gICAgICAgICAgICBzYXR1cmF0ZWQ6IG51bGwsXG4gICAgICAgICAgICBlbXB0eTogbnVsbCxcbiAgICAgICAgICAgIGRyYWluOiBudWxsLFxuICAgICAgICAgICAgc3RhcnRlZDogZmFsc2UsXG4gICAgICAgICAgICBwYXVzZWQ6IGZhbHNlLFxuICAgICAgICAgICAgcHVzaDogZnVuY3Rpb24gKGRhdGEsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICAgIF9pbnNlcnQocSwgZGF0YSwgZmFsc2UsIGNhbGxiYWNrKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBraWxsOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgIHEuZHJhaW4gPSBudWxsO1xuICAgICAgICAgICAgICBxLnRhc2tzID0gW107XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdW5zaGlmdDogZnVuY3Rpb24gKGRhdGEsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICAgIF9pbnNlcnQocSwgZGF0YSwgdHJ1ZSwgY2FsbGJhY2spO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHByb2Nlc3M6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBpZiAoIXEucGF1c2VkICYmIHdvcmtlcnMgPCBxLmNvbmN1cnJlbmN5ICYmIHEudGFza3MubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciB0YXNrID0gcS50YXNrcy5zaGlmdCgpO1xuICAgICAgICAgICAgICAgICAgICBpZiAocS5lbXB0eSAmJiBxLnRhc2tzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcS5lbXB0eSgpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHdvcmtlcnMgKz0gMTtcbiAgICAgICAgICAgICAgICAgICAgdmFyIG5leHQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB3b3JrZXJzIC09IDE7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodGFzay5jYWxsYmFjaykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhc2suY2FsbGJhY2suYXBwbHkodGFzaywgYXJndW1lbnRzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChxLmRyYWluICYmIHEudGFza3MubGVuZ3RoICsgd29ya2VycyA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHEuZHJhaW4oKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHEucHJvY2VzcygpO1xuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICB2YXIgY2IgPSBvbmx5X29uY2UobmV4dCk7XG4gICAgICAgICAgICAgICAgICAgIHdvcmtlcih0YXNrLmRhdGEsIGNiKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbGVuZ3RoOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHEudGFza3MubGVuZ3RoO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHJ1bm5pbmc6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gd29ya2VycztcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBpZGxlOiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcS50YXNrcy5sZW5ndGggKyB3b3JrZXJzID09PSAwO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHBhdXNlOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgaWYgKHEucGF1c2VkID09PSB0cnVlKSB7IHJldHVybjsgfVxuICAgICAgICAgICAgICAgIHEucGF1c2VkID0gdHJ1ZTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICByZXN1bWU6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBpZiAocS5wYXVzZWQgPT09IGZhbHNlKSB7IHJldHVybjsgfVxuICAgICAgICAgICAgICAgIHEucGF1c2VkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgLy8gTmVlZCB0byBjYWxsIHEucHJvY2VzcyBvbmNlIHBlciBjb25jdXJyZW50XG4gICAgICAgICAgICAgICAgLy8gd29ya2VyIHRvIHByZXNlcnZlIGZ1bGwgY29uY3VycmVuY3kgYWZ0ZXIgcGF1c2VcbiAgICAgICAgICAgICAgICBmb3IgKHZhciB3ID0gMTsgdyA8PSBxLmNvbmN1cnJlbmN5OyB3KyspIHtcbiAgICAgICAgICAgICAgICAgICAgYXN5bmMuc2V0SW1tZWRpYXRlKHEucHJvY2Vzcyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gcTtcbiAgICB9O1xuXG4gICAgYXN5bmMucHJpb3JpdHlRdWV1ZSA9IGZ1bmN0aW9uICh3b3JrZXIsIGNvbmN1cnJlbmN5KSB7XG5cbiAgICAgICAgZnVuY3Rpb24gX2NvbXBhcmVUYXNrcyhhLCBiKXtcbiAgICAgICAgICByZXR1cm4gYS5wcmlvcml0eSAtIGIucHJpb3JpdHk7XG4gICAgICAgIH07XG5cbiAgICAgICAgZnVuY3Rpb24gX2JpbmFyeVNlYXJjaChzZXF1ZW5jZSwgaXRlbSwgY29tcGFyZSkge1xuICAgICAgICAgIHZhciBiZWcgPSAtMSxcbiAgICAgICAgICAgICAgZW5kID0gc2VxdWVuY2UubGVuZ3RoIC0gMTtcbiAgICAgICAgICB3aGlsZSAoYmVnIDwgZW5kKSB7XG4gICAgICAgICAgICB2YXIgbWlkID0gYmVnICsgKChlbmQgLSBiZWcgKyAxKSA+Pj4gMSk7XG4gICAgICAgICAgICBpZiAoY29tcGFyZShpdGVtLCBzZXF1ZW5jZVttaWRdKSA+PSAwKSB7XG4gICAgICAgICAgICAgIGJlZyA9IG1pZDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGVuZCA9IG1pZCAtIDE7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBiZWc7XG4gICAgICAgIH1cblxuICAgICAgICBmdW5jdGlvbiBfaW5zZXJ0KHEsIGRhdGEsIHByaW9yaXR5LCBjYWxsYmFjaykge1xuICAgICAgICAgIGlmICghcS5zdGFydGVkKXtcbiAgICAgICAgICAgIHEuc3RhcnRlZCA9IHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICghX2lzQXJyYXkoZGF0YSkpIHtcbiAgICAgICAgICAgICAgZGF0YSA9IFtkYXRhXTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYoZGF0YS5sZW5ndGggPT0gMCkge1xuICAgICAgICAgICAgIC8vIGNhbGwgZHJhaW4gaW1tZWRpYXRlbHkgaWYgdGhlcmUgYXJlIG5vIHRhc2tzXG4gICAgICAgICAgICAgcmV0dXJuIGFzeW5jLnNldEltbWVkaWF0ZShmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgaWYgKHEuZHJhaW4pIHtcbiAgICAgICAgICAgICAgICAgICAgIHEuZHJhaW4oKTtcbiAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgICBfZWFjaChkYXRhLCBmdW5jdGlvbih0YXNrKSB7XG4gICAgICAgICAgICAgIHZhciBpdGVtID0ge1xuICAgICAgICAgICAgICAgICAgZGF0YTogdGFzayxcbiAgICAgICAgICAgICAgICAgIHByaW9yaXR5OiBwcmlvcml0eSxcbiAgICAgICAgICAgICAgICAgIGNhbGxiYWNrOiB0eXBlb2YgY2FsbGJhY2sgPT09ICdmdW5jdGlvbicgPyBjYWxsYmFjayA6IG51bGxcbiAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICBxLnRhc2tzLnNwbGljZShfYmluYXJ5U2VhcmNoKHEudGFza3MsIGl0ZW0sIF9jb21wYXJlVGFza3MpICsgMSwgMCwgaXRlbSk7XG5cbiAgICAgICAgICAgICAgaWYgKHEuc2F0dXJhdGVkICYmIHEudGFza3MubGVuZ3RoID09PSBxLmNvbmN1cnJlbmN5KSB7XG4gICAgICAgICAgICAgICAgICBxLnNhdHVyYXRlZCgpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGFzeW5jLnNldEltbWVkaWF0ZShxLnByb2Nlc3MpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gU3RhcnQgd2l0aCBhIG5vcm1hbCBxdWV1ZVxuICAgICAgICB2YXIgcSA9IGFzeW5jLnF1ZXVlKHdvcmtlciwgY29uY3VycmVuY3kpO1xuXG4gICAgICAgIC8vIE92ZXJyaWRlIHB1c2ggdG8gYWNjZXB0IHNlY29uZCBwYXJhbWV0ZXIgcmVwcmVzZW50aW5nIHByaW9yaXR5XG4gICAgICAgIHEucHVzaCA9IGZ1bmN0aW9uIChkYXRhLCBwcmlvcml0eSwgY2FsbGJhY2spIHtcbiAgICAgICAgICBfaW5zZXJ0KHEsIGRhdGEsIHByaW9yaXR5LCBjYWxsYmFjayk7XG4gICAgICAgIH07XG5cbiAgICAgICAgLy8gUmVtb3ZlIHVuc2hpZnQgZnVuY3Rpb25cbiAgICAgICAgZGVsZXRlIHEudW5zaGlmdDtcblxuICAgICAgICByZXR1cm4gcTtcbiAgICB9O1xuXG4gICAgYXN5bmMuY2FyZ28gPSBmdW5jdGlvbiAod29ya2VyLCBwYXlsb2FkKSB7XG4gICAgICAgIHZhciB3b3JraW5nICAgICA9IGZhbHNlLFxuICAgICAgICAgICAgdGFza3MgICAgICAgPSBbXTtcblxuICAgICAgICB2YXIgY2FyZ28gPSB7XG4gICAgICAgICAgICB0YXNrczogdGFza3MsXG4gICAgICAgICAgICBwYXlsb2FkOiBwYXlsb2FkLFxuICAgICAgICAgICAgc2F0dXJhdGVkOiBudWxsLFxuICAgICAgICAgICAgZW1wdHk6IG51bGwsXG4gICAgICAgICAgICBkcmFpbjogbnVsbCxcbiAgICAgICAgICAgIGRyYWluZWQ6IHRydWUsXG4gICAgICAgICAgICBwdXNoOiBmdW5jdGlvbiAoZGF0YSwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgICAgICBpZiAoIV9pc0FycmF5KGRhdGEpKSB7XG4gICAgICAgICAgICAgICAgICAgIGRhdGEgPSBbZGF0YV07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIF9lYWNoKGRhdGEsIGZ1bmN0aW9uKHRhc2spIHtcbiAgICAgICAgICAgICAgICAgICAgdGFza3MucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgICAgICBkYXRhOiB0YXNrLFxuICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2s6IHR5cGVvZiBjYWxsYmFjayA9PT0gJ2Z1bmN0aW9uJyA/IGNhbGxiYWNrIDogbnVsbFxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgY2FyZ28uZHJhaW5lZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICBpZiAoY2FyZ28uc2F0dXJhdGVkICYmIHRhc2tzLmxlbmd0aCA9PT0gcGF5bG9hZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY2FyZ28uc2F0dXJhdGVkKCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBhc3luYy5zZXRJbW1lZGlhdGUoY2FyZ28ucHJvY2Vzcyk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcHJvY2VzczogZnVuY3Rpb24gcHJvY2VzcygpIHtcbiAgICAgICAgICAgICAgICBpZiAod29ya2luZykgcmV0dXJuO1xuICAgICAgICAgICAgICAgIGlmICh0YXNrcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgaWYoY2FyZ28uZHJhaW4gJiYgIWNhcmdvLmRyYWluZWQpIGNhcmdvLmRyYWluKCk7XG4gICAgICAgICAgICAgICAgICAgIGNhcmdvLmRyYWluZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgdmFyIHRzID0gdHlwZW9mIHBheWxvYWQgPT09ICdudW1iZXInXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPyB0YXNrcy5zcGxpY2UoMCwgcGF5bG9hZClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IHRhc2tzLnNwbGljZSgwLCB0YXNrcy5sZW5ndGgpO1xuXG4gICAgICAgICAgICAgICAgdmFyIGRzID0gX21hcCh0cywgZnVuY3Rpb24gKHRhc2spIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRhc2suZGF0YTtcbiAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgIGlmKGNhcmdvLmVtcHR5KSBjYXJnby5lbXB0eSgpO1xuICAgICAgICAgICAgICAgIHdvcmtpbmcgPSB0cnVlO1xuICAgICAgICAgICAgICAgIHdvcmtlcihkcywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICB3b3JraW5nID0gZmFsc2U7XG5cbiAgICAgICAgICAgICAgICAgICAgdmFyIGFyZ3MgPSBhcmd1bWVudHM7XG4gICAgICAgICAgICAgICAgICAgIF9lYWNoKHRzLCBmdW5jdGlvbiAoZGF0YSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRhdGEuY2FsbGJhY2spIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLmNhbGxiYWNrLmFwcGx5KG51bGwsIGFyZ3MpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgICAgICBwcm9jZXNzKCk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbGVuZ3RoOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRhc2tzLmxlbmd0aDtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBydW5uaW5nOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHdvcmtpbmc7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiBjYXJnbztcbiAgICB9O1xuXG4gICAgdmFyIF9jb25zb2xlX2ZuID0gZnVuY3Rpb24gKG5hbWUpIHtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChmbikge1xuICAgICAgICAgICAgdmFyIGFyZ3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsIDEpO1xuICAgICAgICAgICAgZm4uYXBwbHkobnVsbCwgYXJncy5jb25jYXQoW2Z1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgICAgICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMSk7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBjb25zb2xlICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoY29uc29sZS5lcnJvcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChjb25zb2xlW25hbWVdKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBfZWFjaChhcmdzLCBmdW5jdGlvbiAoeCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGVbbmFtZV0oeCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1dKSk7XG4gICAgICAgIH07XG4gICAgfTtcbiAgICBhc3luYy5sb2cgPSBfY29uc29sZV9mbignbG9nJyk7XG4gICAgYXN5bmMuZGlyID0gX2NvbnNvbGVfZm4oJ2RpcicpO1xuICAgIC8qYXN5bmMuaW5mbyA9IF9jb25zb2xlX2ZuKCdpbmZvJyk7XG4gICAgYXN5bmMud2FybiA9IF9jb25zb2xlX2ZuKCd3YXJuJyk7XG4gICAgYXN5bmMuZXJyb3IgPSBfY29uc29sZV9mbignZXJyb3InKTsqL1xuXG4gICAgYXN5bmMubWVtb2l6ZSA9IGZ1bmN0aW9uIChmbiwgaGFzaGVyKSB7XG4gICAgICAgIHZhciBtZW1vID0ge307XG4gICAgICAgIHZhciBxdWV1ZXMgPSB7fTtcbiAgICAgICAgaGFzaGVyID0gaGFzaGVyIHx8IGZ1bmN0aW9uICh4KSB7XG4gICAgICAgICAgICByZXR1cm4geDtcbiAgICAgICAgfTtcbiAgICAgICAgdmFyIG1lbW9pemVkID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIGFyZ3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMpO1xuICAgICAgICAgICAgdmFyIGNhbGxiYWNrID0gYXJncy5wb3AoKTtcbiAgICAgICAgICAgIHZhciBrZXkgPSBoYXNoZXIuYXBwbHkobnVsbCwgYXJncyk7XG4gICAgICAgICAgICBpZiAoa2V5IGluIG1lbW8pIHtcbiAgICAgICAgICAgICAgICBhc3luYy5uZXh0VGljayhmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrLmFwcGx5KG51bGwsIG1lbW9ba2V5XSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChrZXkgaW4gcXVldWVzKSB7XG4gICAgICAgICAgICAgICAgcXVldWVzW2tleV0ucHVzaChjYWxsYmFjayk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBxdWV1ZXNba2V5XSA9IFtjYWxsYmFja107XG4gICAgICAgICAgICAgICAgZm4uYXBwbHkobnVsbCwgYXJncy5jb25jYXQoW2Z1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgbWVtb1trZXldID0gYXJndW1lbnRzO1xuICAgICAgICAgICAgICAgICAgICB2YXIgcSA9IHF1ZXVlc1trZXldO1xuICAgICAgICAgICAgICAgICAgICBkZWxldGUgcXVldWVzW2tleV07XG4gICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwLCBsID0gcS5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICBxW2ldLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICBtZW1vaXplZC5tZW1vID0gbWVtbztcbiAgICAgICAgbWVtb2l6ZWQudW5tZW1vaXplZCA9IGZuO1xuICAgICAgICByZXR1cm4gbWVtb2l6ZWQ7XG4gICAgfTtcblxuICAgIGFzeW5jLnVubWVtb2l6ZSA9IGZ1bmN0aW9uIChmbikge1xuICAgICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIChmbi51bm1lbW9pemVkIHx8IGZuKS5hcHBseShudWxsLCBhcmd1bWVudHMpO1xuICAgICAgfTtcbiAgICB9O1xuXG4gICAgYXN5bmMudGltZXMgPSBmdW5jdGlvbiAoY291bnQsIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICB2YXIgY291bnRlciA9IFtdO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNvdW50OyBpKyspIHtcbiAgICAgICAgICAgIGNvdW50ZXIucHVzaChpKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYXN5bmMubWFwKGNvdW50ZXIsIGl0ZXJhdG9yLCBjYWxsYmFjayk7XG4gICAgfTtcblxuICAgIGFzeW5jLnRpbWVzU2VyaWVzID0gZnVuY3Rpb24gKGNvdW50LCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgdmFyIGNvdW50ZXIgPSBbXTtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7XG4gICAgICAgICAgICBjb3VudGVyLnB1c2goaSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGFzeW5jLm1hcFNlcmllcyhjb3VudGVyLCBpdGVyYXRvciwgY2FsbGJhY2spO1xuICAgIH07XG5cbiAgICBhc3luYy5zZXEgPSBmdW5jdGlvbiAoLyogZnVuY3Rpb25zLi4uICovKSB7XG4gICAgICAgIHZhciBmbnMgPSBhcmd1bWVudHM7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgdGhhdCA9IHRoaXM7XG4gICAgICAgICAgICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7XG4gICAgICAgICAgICB2YXIgY2FsbGJhY2sgPSBhcmdzLnBvcCgpO1xuICAgICAgICAgICAgYXN5bmMucmVkdWNlKGZucywgYXJncywgZnVuY3Rpb24gKG5ld2FyZ3MsIGZuLCBjYikge1xuICAgICAgICAgICAgICAgIGZuLmFwcGx5KHRoYXQsIG5ld2FyZ3MuY29uY2F0KFtmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBlcnIgPSBhcmd1bWVudHNbMF07XG4gICAgICAgICAgICAgICAgICAgIHZhciBuZXh0YXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMSk7XG4gICAgICAgICAgICAgICAgICAgIGNiKGVyciwgbmV4dGFyZ3MpO1xuICAgICAgICAgICAgICAgIH1dKSlcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBmdW5jdGlvbiAoZXJyLCByZXN1bHRzKSB7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2suYXBwbHkodGhhdCwgW2Vycl0uY29uY2F0KHJlc3VsdHMpKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9O1xuICAgIH07XG5cbiAgICBhc3luYy5jb21wb3NlID0gZnVuY3Rpb24gKC8qIGZ1bmN0aW9ucy4uLiAqLykge1xuICAgICAgcmV0dXJuIGFzeW5jLnNlcS5hcHBseShudWxsLCBBcnJheS5wcm90b3R5cGUucmV2ZXJzZS5jYWxsKGFyZ3VtZW50cykpO1xuICAgIH07XG5cbiAgICB2YXIgX2FwcGx5RWFjaCA9IGZ1bmN0aW9uIChlYWNoZm4sIGZucyAvKmFyZ3MuLi4qLykge1xuICAgICAgICB2YXIgZ28gPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgdGhhdCA9IHRoaXM7XG4gICAgICAgICAgICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7XG4gICAgICAgICAgICB2YXIgY2FsbGJhY2sgPSBhcmdzLnBvcCgpO1xuICAgICAgICAgICAgcmV0dXJuIGVhY2hmbihmbnMsIGZ1bmN0aW9uIChmbiwgY2IpIHtcbiAgICAgICAgICAgICAgICBmbi5hcHBseSh0aGF0LCBhcmdzLmNvbmNhdChbY2JdKSk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY2FsbGJhY2spO1xuICAgICAgICB9O1xuICAgICAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA+IDIpIHtcbiAgICAgICAgICAgIHZhciBhcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAyKTtcbiAgICAgICAgICAgIHJldHVybiBnby5hcHBseSh0aGlzLCBhcmdzKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBnbztcbiAgICAgICAgfVxuICAgIH07XG4gICAgYXN5bmMuYXBwbHlFYWNoID0gZG9QYXJhbGxlbChfYXBwbHlFYWNoKTtcbiAgICBhc3luYy5hcHBseUVhY2hTZXJpZXMgPSBkb1NlcmllcyhfYXBwbHlFYWNoKTtcblxuICAgIGFzeW5jLmZvcmV2ZXIgPSBmdW5jdGlvbiAoZm4sIGNhbGxiYWNrKSB7XG4gICAgICAgIGZ1bmN0aW9uIG5leHQoZXJyKSB7XG4gICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgaWYgKGNhbGxiYWNrKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aHJvdyBlcnI7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmbihuZXh0KTtcbiAgICAgICAgfVxuICAgICAgICBuZXh0KCk7XG4gICAgfTtcblxuICAgIC8vIE5vZGUuanNcbiAgICBpZiAodHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCcgJiYgbW9kdWxlLmV4cG9ydHMpIHtcbiAgICAgICAgbW9kdWxlLmV4cG9ydHMgPSBhc3luYztcbiAgICB9XG4gICAgLy8gQU1EIC8gUmVxdWlyZUpTXG4gICAgZWxzZSBpZiAodHlwZW9mIGRlZmluZSAhPT0gJ3VuZGVmaW5lZCcgJiYgZGVmaW5lLmFtZCkge1xuICAgICAgICBkZWZpbmUoW10sIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiBhc3luYztcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8vIGluY2x1ZGVkIGRpcmVjdGx5IHZpYSA8c2NyaXB0PiB0YWdcbiAgICBlbHNlIHtcbiAgICAgICAgcm9vdC5hc3luYyA9IGFzeW5jO1xuICAgIH1cblxufSgpKTtcbiIsInZhciBhc3luYyAgICAgICA9IHJlcXVpcmUoJ2FzeW5jJyksXG4gICAgdXJsUGFyc2VyICAgPSByZXF1aXJlKCd1cmwnKSxcbiAgICBSZXNvdXJjZSAgICA9IHJlcXVpcmUoJy4vUmVzb3VyY2UnKSxcbiAgICBFdmVudEVtaXR0ZXIgPSByZXF1aXJlKCdldmVudGVtaXR0ZXIzJyk7XG5cbi8qKlxuICogTWFuYWdlcyB0aGUgc3RhdGUgYW5kIGxvYWRpbmcgb2YgbXVsdGlwbGUgcmVzb3VyY2VzIHRvIGxvYWQuXG4gKlxuICogQGNsYXNzXG4gKiBAcGFyYW0gW2Jhc2VVcmw9JyddIHtzdHJpbmd9IFRoZSBiYXNlIHVybCBmb3IgYWxsIHJlc291cmNlcyBsb2FkZWQgYnkgdGhpcyBsb2FkZXIuXG4gKiBAcGFyYW0gW2NvbmN1cnJlbmN5PTEwXSB7bnVtYmVyfSBUaGUgbnVtYmVyIG9mIHJlc291cmNlcyB0byBsb2FkIGNvbmN1cnJlbnRseS5cbiAqL1xuZnVuY3Rpb24gTG9hZGVyKGJhc2VVcmwsIGNvbmN1cnJlbmN5KSB7XG4gICAgRXZlbnRFbWl0dGVyLmNhbGwodGhpcyk7XG5cbiAgICBjb25jdXJyZW5jeSA9IGNvbmN1cnJlbmN5IHx8IDEwO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGJhc2UgdXJsIGZvciBhbGwgcmVzb3VyY2VzIGxvYWRlZCBieSB0aGlzIGxvYWRlci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge3N0cmluZ31cbiAgICAgKi9cbiAgICB0aGlzLmJhc2VVcmwgPSBiYXNlVXJsIHx8ICcnO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHByb2dyZXNzIHBlcmNlbnQgb2YgdGhlIGxvYWRlciBnb2luZyB0aHJvdWdoIHRoZSBxdWV1ZS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLnByb2dyZXNzID0gMDtcblxuICAgIC8qKlxuICAgICAqIExvYWRpbmcgc3RhdGUgb2YgdGhlIGxvYWRlciwgdHJ1ZSBpZiBpdCBpcyBjdXJyZW50bHkgbG9hZGluZyByZXNvdXJjZXMuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqL1xuICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHBlcmNlbnRhZ2Ugb2YgdG90YWwgcHJvZ3Jlc3MgdGhhdCBhIHNpbmdsZSByZXNvdXJjZSByZXByZXNlbnRzLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMuX3Byb2dyZXNzQ2h1bmsgPSAwO1xuXG4gICAgLyoqXG4gICAgICogVGhlIG1pZGRsZXdhcmUgdG8gcnVuIGJlZm9yZSBsb2FkaW5nIGVhY2ggcmVzb3VyY2UuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtmdW5jdGlvbltdfVxuICAgICAqL1xuICAgIHRoaXMuX2JlZm9yZU1pZGRsZXdhcmUgPSBbXTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBtaWRkbGV3YXJlIHRvIHJ1biBhZnRlciBsb2FkaW5nIGVhY2ggcmVzb3VyY2UuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtmdW5jdGlvbltdfVxuICAgICAqL1xuICAgIHRoaXMuX2FmdGVyTWlkZGxld2FyZSA9IFtdO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGBfbG9hZFJlc291cmNlYCBmdW5jdGlvbiBib3VuZCB3aXRoIHRoaXMgb2JqZWN0IGNvbnRleHQuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBtZW1iZXIge2Z1bmN0aW9ufVxuICAgICAqL1xuICAgIHRoaXMuX2JvdW5kTG9hZFJlc291cmNlID0gdGhpcy5fbG9hZFJlc291cmNlLmJpbmQodGhpcyk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYF9vbkxvYWRgIGZ1bmN0aW9uIGJvdW5kIHdpdGggdGhpcyBvYmplY3QgY29udGV4dC5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQG1lbWJlciB7ZnVuY3Rpb259XG4gICAgICovXG4gICAgdGhpcy5fYm91bmRPbkxvYWQgPSB0aGlzLl9vbkxvYWQuYmluZCh0aGlzKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSByZXNvdXJjZSBidWZmZXIgdGhhdCBmaWxscyB1bnRpbCBgbG9hZGAgaXMgY2FsbGVkIHRvIHN0YXJ0IGxvYWRpbmcgcmVzb3VyY2VzLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAbWVtYmVyIHtSZXNvdXJjZVtdfVxuICAgICAqL1xuICAgIHRoaXMuX2J1ZmZlciA9IFtdO1xuXG4gICAgLyoqXG4gICAgICogVXNlZCB0byB0cmFjayBsb2FkIGNvbXBsZXRpb24uXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLl9udW1Ub0xvYWQgPSAwO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHJlc291cmNlcyB3YWl0aW5nIHRvIGJlIGxvYWRlZC5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQG1lbWJlciB7UmVzb3VyY2VbXX1cbiAgICAgKi9cbiAgICB0aGlzLl9xdWV1ZSA9IGFzeW5jLnF1ZXVlKHRoaXMuX2JvdW5kTG9hZFJlc291cmNlLCBjb25jdXJyZW5jeSk7XG5cbiAgICAvKipcbiAgICAgKiBBbGwgdGhlIHJlc291cmNlcyBmb3IgdGhpcyBsb2FkZXIga2V5ZWQgYnkgbmFtZS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge29iamVjdDxzdHJpbmcsIFJlc291cmNlPn1cbiAgICAgKi9cbiAgICB0aGlzLnJlc291cmNlcyA9IHt9O1xuXG4gICAgLyoqXG4gICAgICogRW1pdHRlZCBvbmNlIHBlciBsb2FkZWQgb3IgZXJyb3JlZCByZXNvdXJjZS5cbiAgICAgKlxuICAgICAqIEBldmVudCBwcm9ncmVzc1xuICAgICAqIEBtZW1iZXJvZiBMb2FkZXIjXG4gICAgICovXG5cbiAgICAvKipcbiAgICAgKiBFbWl0dGVkIG9uY2UgcGVyIGVycm9yZWQgcmVzb3VyY2UuXG4gICAgICpcbiAgICAgKiBAZXZlbnQgZXJyb3JcbiAgICAgKiBAbWVtYmVyb2YgTG9hZGVyI1xuICAgICAqL1xuXG4gICAgLyoqXG4gICAgICogRW1pdHRlZCBvbmNlIHBlciBsb2FkZWQgcmVzb3VyY2UuXG4gICAgICpcbiAgICAgKiBAZXZlbnQgbG9hZFxuICAgICAqIEBtZW1iZXJvZiBMb2FkZXIjXG4gICAgICovXG5cbiAgICAvKipcbiAgICAgKiBFbWl0dGVkIHdoZW4gdGhlIGxvYWRlciBiZWdpbnMgdG8gcHJvY2VzcyB0aGUgcXVldWUuXG4gICAgICpcbiAgICAgKiBAZXZlbnQgc3RhcnRcbiAgICAgKiBAbWVtYmVyb2YgTG9hZGVyI1xuICAgICAqL1xuXG4gICAgLyoqXG4gICAgICogRW1pdHRlZCB3aGVuIHRoZSBxdWV1ZWQgcmVzb3VyY2VzIGFsbCBsb2FkLlxuICAgICAqXG4gICAgICogQGV2ZW50IGNvbXBsZXRlXG4gICAgICogQG1lbWJlcm9mIExvYWRlciNcbiAgICAgKi9cbn1cblxuTG9hZGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoRXZlbnRFbWl0dGVyLnByb3RvdHlwZSk7XG5Mb2FkZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gTG9hZGVyO1xubW9kdWxlLmV4cG9ydHMgPSBMb2FkZXI7XG5cbi8qKlxuICogQWRkcyBhIHJlc291cmNlIChvciBtdWx0aXBsZSByZXNvdXJjZXMpIHRvIHRoZSBsb2FkZXIgcXVldWUuXG4gKlxuICogVGhpcyBmdW5jdGlvbiBjYW4gdGFrZSBhIHdpZGUgdmFyaWV0eSBvZiBkaWZmZXJlbnQgcGFyYW1ldGVycy4gVGhlIG9ubHkgdGhpbmcgdGhhdCBpcyBhbHdheXNcbiAqIHJlcXVpcmVkIHRoZSB1cmwgdG8gbG9hZC4gQWxsIHRoZSBmb2xsb3dpbmcgd2lsbCB3b3JrOlxuICpcbiAqIGBgYGpzXG4gKiBsb2FkZXJcbiAqICAgICAvLyBub3JtYWwgcGFyYW0gc3ludGF4XG4gKiAgICAgLmFkZCgna2V5JywgJ2h0dHA6Ly8uLi4nLCBmdW5jdGlvbiAoKSB7fSlcbiAqICAgICAuYWRkKCdodHRwOi8vLi4uJywgZnVuY3Rpb24gKCkge30pXG4gKiAgICAgLmFkZCgnaHR0cDovLy4uLicpXG4gKlxuICogICAgIC8vIG9iamVjdCBzeW50YXhcbiAqICAgICAuYWRkKHtcbiAqICAgICAgICAgbmFtZTogJ2tleTInLFxuICogICAgICAgICB1cmw6ICdodHRwOi8vLi4uJ1xuICogICAgIH0sIGZ1bmN0aW9uICgpIHt9KVxuICogICAgIC5hZGQoe1xuICogICAgICAgICB1cmw6ICdodHRwOi8vLi4uJ1xuICogICAgIH0sIGZ1bmN0aW9uICgpIHt9KVxuICogICAgIC5hZGQoe1xuICogICAgICAgICBuYW1lOiAna2V5MycsXG4gKiAgICAgICAgIHVybDogJ2h0dHA6Ly8uLi4nXG4gKiAgICAgICAgIG9uQ29tcGxldGU6IGZ1bmN0aW9uICgpIHt9XG4gKiAgICAgfSlcbiAqICAgICAuYWRkKHtcbiAqICAgICAgICAgdXJsOiAnaHR0cHM6Ly8uLi4nLFxuICogICAgICAgICBvbkNvbXBsZXRlOiBmdW5jdGlvbiAoKSB7fSxcbiAqICAgICAgICAgY3Jvc3NPcmlnaW46IHRydWVcbiAqICAgICB9KVxuICpcbiAqICAgICAvLyB5b3UgY2FuIGFsc28gcGFzcyBhbiBhcnJheSBvZiBvYmplY3RzIG9yIHVybHMgb3IgYm90aFxuICogICAgIC5hZGQoW1xuICogICAgICAgICB7IG5hbWU6ICdrZXk0JywgdXJsOiAnaHR0cDovLy4uLicsIG9uQ29tcGxldGU6IGZ1bmN0aW9uICgpIHt9IH0sXG4gKiAgICAgICAgIHsgdXJsOiAnaHR0cDovLy4uLicsIG9uQ29tcGxldGU6IGZ1bmN0aW9uICgpIHt9IH0sXG4gKiAgICAgICAgICdodHRwOi8vLi4uJ1xuICogICAgIF0pO1xuICogYGBgXG4gKlxuICogQGFsaWFzIGVucXVldWVcbiAqIEBwYXJhbSBbbmFtZV0ge3N0cmluZ30gVGhlIG5hbWUgb2YgdGhlIHJlc291cmNlIHRvIGxvYWQsIGlmIG5vdCBwYXNzZWQgdGhlIHVybCBpcyB1c2VkLlxuICogQHBhcmFtIHVybCB7c3RyaW5nfSBUaGUgdXJsIGZvciB0aGlzIHJlc291cmNlLCByZWxhdGl2ZSB0byB0aGUgYmFzZVVybCBvZiB0aGlzIGxvYWRlci5cbiAqIEBwYXJhbSBbb3B0aW9uc10ge29iamVjdH0gVGhlIG9wdGlvbnMgZm9yIHRoZSBsb2FkLlxuICogQHBhcmFtIFtvcHRpb25zLmNyb3NzT3JpZ2luXSB7Ym9vbGVhbn0gSXMgdGhpcyByZXF1ZXN0IGNyb3NzLW9yaWdpbj8gRGVmYXVsdCBpcyB0byBkZXRlcm1pbmUgYXV0b21hdGljYWxseS5cbiAqIEBwYXJhbSBbb3B0aW9ucy5sb2FkVHlwZT1SZXNvdXJjZS5MT0FEX1RZUEUuWEhSXSB7UmVzb3VyY2UuWEhSX0xPQURfVFlQRX0gSG93IHNob3VsZCB0aGlzIHJlc291cmNlIGJlIGxvYWRlZD9cbiAqIEBwYXJhbSBbb3B0aW9ucy54aHJUeXBlPVJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkRFRkFVTFRdIHtSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRX0gSG93IHNob3VsZCB0aGUgZGF0YSBiZWluZ1xuICogICAgICBsb2FkZWQgYmUgaW50ZXJwcmV0ZWQgd2hlbiB1c2luZyBYSFI/XG4gKiBAcGFyYW0gW2NhbGxiYWNrXSB7ZnVuY3Rpb259IEZ1bmN0aW9uIHRvIGNhbGwgd2hlbiB0aGlzIHNwZWNpZmljIHJlc291cmNlIGNvbXBsZXRlcyBsb2FkaW5nLlxuICogQHJldHVybiB7TG9hZGVyfVxuICovXG5Mb2FkZXIucHJvdG90eXBlLmFkZCA9IExvYWRlci5wcm90b3R5cGUuZW5xdWV1ZSA9IGZ1bmN0aW9uIChuYW1lLCB1cmwsIG9wdGlvbnMsIGNiKSB7XG4gICAgLy8gc3BlY2lhbCBjYXNlIG9mIGFuIGFycmF5IG9mIG9iamVjdHMgb3IgdXJsc1xuICAgIGlmIChBcnJheS5pc0FycmF5KG5hbWUpKSB7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbmFtZS5sZW5ndGg7ICsraSkge1xuICAgICAgICAgICAgdGhpcy5hZGQobmFtZVtpXSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICAvLyBpZiBhbiBvYmplY3QgaXMgcGFzc2VkIGluc3RlYWQgb2YgcGFyYW1zXG4gICAgaWYgKHR5cGVvZiBuYW1lID09PSAnb2JqZWN0Jykge1xuICAgICAgICBjYiA9IHVybCB8fCBuYW1lLmNhbGxiYWNrIHx8IG5hbWUub25Db21wbGV0ZTtcbiAgICAgICAgb3B0aW9ucyA9IG5hbWU7XG4gICAgICAgIHVybCA9IG5hbWUudXJsO1xuICAgICAgICBuYW1lID0gbmFtZS5uYW1lIHx8IG5hbWUua2V5IHx8IG5hbWUudXJsO1xuICAgIH1cblxuICAgIC8vIGNhc2Ugd2hlcmUgbm8gbmFtZSBpcyBwYXNzZWQgc2hpZnQgYWxsIGFyZ3Mgb3ZlciBieSBvbmUuXG4gICAgaWYgKHR5cGVvZiB1cmwgIT09ICdzdHJpbmcnKSB7XG4gICAgICAgIGNiID0gb3B0aW9ucztcbiAgICAgICAgb3B0aW9ucyA9IHVybDtcbiAgICAgICAgdXJsID0gbmFtZTtcbiAgICB9XG5cbiAgICAvLyBub3cgdGhhdCB3ZSBzaGlmdGVkIG1ha2Ugc3VyZSB3ZSBoYXZlIGEgcHJvcGVyIHVybC5cbiAgICBpZiAodHlwZW9mIHVybCAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdObyB1cmwgcGFzc2VkIHRvIGFkZCByZXNvdXJjZSB0byBsb2FkZXIuJyk7XG4gICAgfVxuXG4gICAgLy8gb3B0aW9ucyBhcmUgb3B0aW9uYWwgc28gcGVvcGxlIG1pZ2h0IHBhc3MgYSBmdW5jdGlvbiBhbmQgbm8gb3B0aW9uc1xuICAgIGlmICh0eXBlb2Ygb3B0aW9ucyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBjYiA9IG9wdGlvbnM7XG4gICAgICAgIG9wdGlvbnMgPSBudWxsO1xuICAgIH1cblxuICAgIC8vIGNoZWNrIGlmIHJlc291cmNlIGFscmVhZHkgZXhpc3RzLlxuICAgIGlmICh0aGlzLnJlc291cmNlc1tuYW1lXSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1Jlc291cmNlIHdpdGggbmFtZSBcIicgKyBuYW1lICsgJ1wiIGFscmVhZHkgZXhpc3RzLicpO1xuICAgIH1cblxuICAgIC8vIGFkZCBiYXNlIHVybCBpZiB0aGlzIGlzbid0IGFuIGFic29sdXRlIHVybFxuICAgIHVybCA9IHRoaXMuX2hhbmRsZUJhc2VVcmwodXJsKTtcblxuICAgIC8vIGNyZWF0ZSB0aGUgc3RvcmUgdGhlIHJlc291cmNlXG4gICAgdGhpcy5yZXNvdXJjZXNbbmFtZV0gPSBuZXcgUmVzb3VyY2UobmFtZSwgdXJsLCBvcHRpb25zKTtcblxuICAgIGlmICh0eXBlb2YgY2IgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgdGhpcy5yZXNvdXJjZXNbbmFtZV0ub25jZSgnYWZ0ZXJNaWRkbGV3YXJlJywgY2IpO1xuICAgIH1cblxuICAgIHRoaXMuX251bVRvTG9hZCsrO1xuXG4gICAgLy8gaWYgYWxyZWFkeSBsb2FkaW5nIGFkZCBpdCB0byB0aGUgd29ya2VyIHF1ZXVlXG4gICAgaWYgKHRoaXMuX3F1ZXVlLnN0YXJ0ZWQpIHtcbiAgICAgICAgdGhpcy5fcXVldWUucHVzaCh0aGlzLnJlc291cmNlc1tuYW1lXSk7XG4gICAgICAgIHRoaXMuX3Byb2dyZXNzQ2h1bmsgPSAoMTAwIC0gdGhpcy5wcm9ncmVzcykgLyAodGhpcy5fcXVldWUubGVuZ3RoKCkgKyB0aGlzLl9xdWV1ZS5ydW5uaW5nKCkpO1xuICAgIH1cbiAgICAvLyBvdGhlcndpc2UgYnVmZmVyIGl0IHRvIGJlIGFkZGVkIHRvIHRoZSBxdWV1ZSBsYXRlclxuICAgIGVsc2Uge1xuICAgICAgICB0aGlzLl9idWZmZXIucHVzaCh0aGlzLnJlc291cmNlc1tuYW1lXSk7XG4gICAgICAgIHRoaXMuX3Byb2dyZXNzQ2h1bmsgPSAxMDAgLyB0aGlzLl9idWZmZXIubGVuZ3RoO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzO1xufTtcblxuTG9hZGVyLnByb3RvdHlwZS5faGFuZGxlQmFzZVVybCA9IGZ1bmN0aW9uICh1cmwpIHtcbiAgICB2YXIgcGFyc2VkVXJsID0gdXJsUGFyc2VyLnBhcnNlKHVybCk7XG5cbiAgICAvLyBhYnNvbHV0ZSB1cmwsIGp1c3QgdXNlIGl0IGFzIGlzLlxuICAgIGlmIChwYXJzZWRVcmwucHJvdG9jb2wgfHwgcGFyc2VkVXJsLnBhdGhuYW1lLmluZGV4T2YoJy8vJykgPT09IDApIHtcbiAgICAgICAgcmV0dXJuIHVybDtcbiAgICB9XG5cbiAgICAvLyBpZiBiYXNlVXJsIGRvZXNuJ3QgZW5kIGluIHNsYXNoIGFuZCB1cmwgZG9lc24ndCBzdGFydCB3aXRoIHNsYXNoLCB0aGVuIGFkZCBhIHNsYXNoIGluYmV0d2VlblxuICAgIGlmIChcbiAgICAgICAgdGhpcy5iYXNlVXJsLmxlbmd0aCAmJlxuICAgICAgICB0aGlzLmJhc2VVcmwubGFzdEluZGV4T2YoJy8nKSAhPT0gdGhpcy5iYXNlVXJsLmxlbmd0aCAtIDEgJiZcbiAgICAgICAgdXJsLmNoYXJBdCgwKSAhPT0gJy8nXG4gICAgKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmJhc2VVcmwgKyAnLycgKyB1cmw7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICByZXR1cm4gdGhpcy5iYXNlVXJsICsgdXJsO1xuICAgIH1cbn07XG5cblxuLyoqXG4gKiBTZXRzIHVwIGEgbWlkZGxld2FyZSBmdW5jdGlvbiB0aGF0IHdpbGwgcnVuICpiZWZvcmUqIHRoZVxuICogcmVzb3VyY2UgaXMgbG9hZGVkLlxuICpcbiAqIEBhbGlhcyBwcmVcbiAqIEBwYXJhbSBtaWRkbGV3YXJlIHtmdW5jdGlvbn0gVGhlIG1pZGRsZXdhcmUgZnVuY3Rpb24gdG8gcmVnaXN0ZXIuXG4gKiBAcmV0dXJuIHtMb2FkZXJ9XG4gKi9cbkxvYWRlci5wcm90b3R5cGUuYmVmb3JlID0gTG9hZGVyLnByb3RvdHlwZS5wcmUgPSBmdW5jdGlvbiAoZm4pIHtcbiAgICB0aGlzLl9iZWZvcmVNaWRkbGV3YXJlLnB1c2goZm4pO1xuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIFNldHMgdXAgYSBtaWRkbGV3YXJlIGZ1bmN0aW9uIHRoYXQgd2lsbCBydW4gKmFmdGVyKiB0aGVcbiAqIHJlc291cmNlIGlzIGxvYWRlZC5cbiAqXG4gKiBAYWxpYXMgdXNlXG4gKiBAcGFyYW0gbWlkZGxld2FyZSB7ZnVuY3Rpb259IFRoZSBtaWRkbGV3YXJlIGZ1bmN0aW9uIHRvIHJlZ2lzdGVyLlxuICogQHJldHVybiB7TG9hZGVyfVxuICovXG5Mb2FkZXIucHJvdG90eXBlLmFmdGVyID0gTG9hZGVyLnByb3RvdHlwZS51c2UgPSBmdW5jdGlvbiAoZm4pIHtcbiAgICB0aGlzLl9hZnRlck1pZGRsZXdhcmUucHVzaChmbik7XG5cbiAgICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogUmVzZXRzIHRoZSBxdWV1ZSBvZiB0aGUgbG9hZGVyIHRvIHByZXBhcmUgZm9yIGEgbmV3IGxvYWQuXG4gKlxuICogQHJldHVybiB7TG9hZGVyfVxuICovXG5Mb2FkZXIucHJvdG90eXBlLnJlc2V0ID0gZnVuY3Rpb24gKCkge1xuICAgIC8vIHRoaXMuYmFzZVVybCA9IGJhc2VVcmwgfHwgJyc7XG5cbiAgICB0aGlzLnByb2dyZXNzID0gMDtcblxuICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xuXG4gICAgdGhpcy5fcHJvZ3Jlc3NDaHVuayA9IDA7XG5cbiAgICAvLyB0aGlzLl9iZWZvcmVNaWRkbGV3YXJlLmxlbmd0aCA9IDA7XG4gICAgLy8gdGhpcy5fYWZ0ZXJNaWRkbGV3YXJlLmxlbmd0aCA9IDA7XG5cbiAgICB0aGlzLl9idWZmZXIubGVuZ3RoID0gMDtcblxuICAgIHRoaXMuX251bVRvTG9hZCA9IDA7XG5cbiAgICB0aGlzLl9xdWV1ZS5raWxsKCk7XG4gICAgdGhpcy5fcXVldWUuc3RhcnRlZCA9IGZhbHNlO1xuXG4gICAgdGhpcy5yZXNvdXJjZXMgPSB7fTtcbn07XG5cbi8qKlxuICogU3RhcnRzIGxvYWRpbmcgdGhlIHF1ZXVlZCByZXNvdXJjZXMuXG4gKlxuICogQGZpcmVzIHN0YXJ0XG4gKiBAcGFyYW0gW2NhbGxiYWNrXSB7ZnVuY3Rpb259IE9wdGlvbmFsIGNhbGxiYWNrIHRoYXQgd2lsbCBiZSBib3VuZCB0byB0aGUgYGNvbXBsZXRlYCBldmVudC5cbiAqIEByZXR1cm4ge0xvYWRlcn1cbiAqL1xuTG9hZGVyLnByb3RvdHlwZS5sb2FkID0gZnVuY3Rpb24gKGNiKSB7XG4gICAgLy8gcmVnaXN0ZXIgY29tcGxldGUgY2FsbGJhY2sgaWYgdGhleSBwYXNzIG9uZVxuICAgIGlmICh0eXBlb2YgY2IgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgdGhpcy5vbmNlKCdjb21wbGV0ZScsIGNiKTtcbiAgICB9XG5cbiAgICAvLyBpZiB0aGUgcXVldWUgaGFzIGFscmVhZHkgc3RhcnRlZCB3ZSBhcmUgZG9uZSBoZXJlXG4gICAgaWYgKHRoaXMuX3F1ZXVlLnN0YXJ0ZWQpIHtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLy8gbm90aWZ5IG9mIHN0YXJ0XG4gICAgdGhpcy5lbWl0KCdzdGFydCcsIHRoaXMpO1xuXG4gICAgLy8gc3RhcnQgdGhlIGludGVybmFsIHF1ZXVlXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLl9idWZmZXIubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgdGhpcy5fcXVldWUucHVzaCh0aGlzLl9idWZmZXJbaV0pO1xuICAgIH1cblxuICAgIC8vIGVtcHR5IHRoZSBidWZmZXJcbiAgICB0aGlzLl9idWZmZXIubGVuZ3RoID0gMDtcblxuICAgIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBMb2FkcyBhIHNpbmdsZSByZXNvdXJjZS5cbiAqXG4gKiBAZmlyZXMgcHJvZ3Jlc3NcbiAqIEBwcml2YXRlXG4gKi9cbkxvYWRlci5wcm90b3R5cGUuX2xvYWRSZXNvdXJjZSA9IGZ1bmN0aW9uIChyZXNvdXJjZSwgZGVxdWV1ZSkge1xuICAgIHZhciBzZWxmID0gdGhpcztcblxuICAgIHJlc291cmNlLl9kZXF1ZXVlID0gZGVxdWV1ZTtcblxuICAgIHRoaXMuX3J1bk1pZGRsZXdhcmUocmVzb3VyY2UsIHRoaXMuX2JlZm9yZU1pZGRsZXdhcmUsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgLy8gcmVzb3VyY2Uub24oJ3Byb2dyZXNzJywgc2VsZi5lbWl0LmJpbmQoc2VsZiwgJ3Byb2dyZXNzJykpO1xuXG4gICAgICAgIHJlc291cmNlLmxvYWQoc2VsZi5fYm91bmRPbkxvYWQpO1xuICAgIH0pO1xufTtcblxuLyoqXG4gKiBDYWxsZWQgb25jZSBlYWNoIHJlc291cmNlIGhhcyBsb2FkZWQuXG4gKlxuICogQGZpcmVzIGNvbXBsZXRlXG4gKiBAcHJpdmF0ZVxuICovXG5Mb2FkZXIucHJvdG90eXBlLl9vbkNvbXBsZXRlID0gZnVuY3Rpb24gKCkge1xuICAgIHRoaXMuZW1pdCgnY29tcGxldGUnLCB0aGlzLCB0aGlzLnJlc291cmNlcyk7XG59O1xuXG4vKipcbiAqIENhbGxlZCBlYWNoIHRpbWUgYSByZXNvdXJjZXMgaXMgbG9hZGVkLlxuICpcbiAqIEBmaXJlcyBwcm9ncmVzc1xuICogQGZpcmVzIGVycm9yXG4gKiBAZmlyZXMgbG9hZFxuICogQHByaXZhdGVcbiAqL1xuTG9hZGVyLnByb3RvdHlwZS5fb25Mb2FkID0gZnVuY3Rpb24gKHJlc291cmNlKSB7XG4gICAgdGhpcy5wcm9ncmVzcyArPSB0aGlzLl9wcm9ncmVzc0NodW5rO1xuXG4gICAgdGhpcy5lbWl0KCdwcm9ncmVzcycsIHRoaXMsIHJlc291cmNlKTtcblxuICAgIC8vIHJ1biBtaWRkbGV3YXJlLCB0aGlzICptdXN0KiBoYXBwZW4gYmVmb3JlIGRlcXVldWUgc28gc3ViLWFzc2V0cyBnZXQgYWRkZWQgcHJvcGVybHlcbiAgICB0aGlzLl9ydW5NaWRkbGV3YXJlKHJlc291cmNlLCB0aGlzLl9hZnRlck1pZGRsZXdhcmUsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmVzb3VyY2UuZW1pdCgnYWZ0ZXJNaWRkbGV3YXJlJywgcmVzb3VyY2UpO1xuXG4gICAgICAgIHRoaXMuX251bVRvTG9hZC0tO1xuXG4gICAgICAgIC8vIGRvIGNvbXBsZXRpb24gY2hlY2tcbiAgICAgICAgaWYgKHRoaXMuX251bVRvTG9hZCA9PT0gMCkge1xuICAgICAgICAgICAgdGhpcy5wcm9ncmVzcyA9IDEwMDtcbiAgICAgICAgICAgIHRoaXMuX29uQ29tcGxldGUoKTtcbiAgICAgICAgfVxuICAgICAgICBcbiAgICAgICAgaWYgKHJlc291cmNlLmVycm9yKSB7XG4gICAgICAgICAgICB0aGlzLmVtaXQoJ2Vycm9yJywgcmVzb3VyY2UuZXJyb3IsIHRoaXMsIHJlc291cmNlKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuZW1pdCgnbG9hZCcsIHRoaXMsIHJlc291cmNlKTtcbiAgICAgICAgfVxuICAgIH0pO1xuICAgIFxuXG5cbiAgICAvLyByZW1vdmUgdGhpcyByZXNvdXJjZSBmcm9tIHRoZSBhc3luYyBxdWV1ZVxuICAgIHJlc291cmNlLl9kZXF1ZXVlKCk7XG59O1xuXG4vKipcbiAqIFJ1biBtaWRkbGV3YXJlIGZ1bmN0aW9ucyBvbiBhIHJlc291cmNlLlxuICpcbiAqIEBwcml2YXRlXG4gKi9cbkxvYWRlci5wcm90b3R5cGUuX3J1bk1pZGRsZXdhcmUgPSBmdW5jdGlvbiAocmVzb3VyY2UsIGZucywgY2IpIHtcbiAgICB2YXIgc2VsZiA9IHRoaXM7XG5cbiAgICBhc3luYy5lYWNoU2VyaWVzKGZucywgZnVuY3Rpb24gKGZuLCBuZXh0KSB7XG4gICAgICAgIGZuLmNhbGwoc2VsZiwgcmVzb3VyY2UsIG5leHQpO1xuICAgIH0sIGNiLmJpbmQodGhpcywgcmVzb3VyY2UpKTtcbn07XG5cbkxvYWRlci5MT0FEX1RZUEUgPSBSZXNvdXJjZS5MT0FEX1RZUEU7XG5Mb2FkZXIuWEhSX1JFQURZX1NUQVRFID0gUmVzb3VyY2UuWEhSX1JFQURZX1NUQVRFO1xuTG9hZGVyLlhIUl9SRVNQT05TRV9UWVBFID0gUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEU7XG4iLCJ2YXIgRXZlbnRFbWl0dGVyID0gcmVxdWlyZSgnZXZlbnRlbWl0dGVyMycpLFxuICAgIF91cmwgPSByZXF1aXJlKCd1cmwnKSxcbiAgICAvLyB0ZXN0cyBpcyBDT1JTIGlzIHN1cHBvcnRlZCBpbiBYSFIsIGlmIG5vdCB3ZSBuZWVkIHRvIHVzZSBYRFJcbiAgICB1c2VYZHIgPSAhISh3aW5kb3cuWERvbWFpblJlcXVlc3QgJiYgISgnd2l0aENyZWRlbnRpYWxzJyBpbiAobmV3IFhNTEh0dHBSZXF1ZXN0KCkpKSksXG4gICAgdGVtcEFuY2hvciA9IG51bGw7XG5cbi8qKlxuICogTWFuYWdlcyB0aGUgc3RhdGUgYW5kIGxvYWRpbmcgb2YgYSBzaW5nbGUgcmVzb3VyY2UgcmVwcmVzZW50ZWQgYnlcbiAqIGEgc2luZ2xlIFVSTC5cbiAqXG4gKiBAY2xhc3NcbiAqIEBwYXJhbSBuYW1lIHtzdHJpbmd9IFRoZSBuYW1lIG9mIHRoZSByZXNvdXJjZSB0byBsb2FkLlxuICogQHBhcmFtIHVybCB7c3RyaW5nfHN0cmluZ1tdfSBUaGUgdXJsIGZvciB0aGlzIHJlc291cmNlLCBmb3IgYXVkaW8vdmlkZW8gbG9hZHMgeW91IGNhbiBwYXNzIGFuIGFycmF5IG9mIHNvdXJjZXMuXG4gKiBAcGFyYW0gW29wdGlvbnNdIHtvYmplY3R9IFRoZSBvcHRpb25zIGZvciB0aGUgbG9hZC5cbiAqIEBwYXJhbSBbb3B0aW9ucy5jcm9zc09yaWdpbl0ge3N0cmluZ3xib29sZWFufSBJcyB0aGlzIHJlcXVlc3QgY3Jvc3Mtb3JpZ2luPyBEZWZhdWx0IGlzIHRvIGRldGVybWluZSBhdXRvbWF0aWNhbGx5LlxuICogQHBhcmFtIFtvcHRpb25zLmxvYWRUeXBlPVJlc291cmNlLkxPQURfVFlQRS5YSFJdIHtSZXNvdXJjZS5MT0FEX1RZUEV9IEhvdyBzaG91bGQgdGhpcyByZXNvdXJjZSBiZSBsb2FkZWQ/XG4gKiBAcGFyYW0gW29wdGlvbnMueGhyVHlwZT1SZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRS5ERUZBVUxUXSB7UmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEV9IEhvdyBzaG91bGQgdGhlIGRhdGEgYmVpbmdcbiAqICAgICAgbG9hZGVkIGJlIGludGVycHJldGVkIHdoZW4gdXNpbmcgWEhSP1xuICogQHBhcmFtIFtvcHRpb25zLm1ldGFkYXRhXSB7b2JqZWN0fSBFeHRyYSBpbmZvIGZvciBtaWRkbGV3YXJlLlxuICovXG5mdW5jdGlvbiBSZXNvdXJjZShuYW1lLCB1cmwsIG9wdGlvbnMpIHtcbiAgICBFdmVudEVtaXR0ZXIuY2FsbCh0aGlzKTtcblxuICAgIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuXG4gICAgaWYgKHR5cGVvZiBuYW1lICE9PSAnc3RyaW5nJyB8fCB0eXBlb2YgdXJsICE9PSAnc3RyaW5nJykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0JvdGggbmFtZSBhbmQgdXJsIGFyZSByZXF1aXJlZCBmb3IgY29uc3RydWN0aW5nIGEgcmVzb3VyY2UuJyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhlIG5hbWUgb2YgdGhpcyByZXNvdXJjZS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge3N0cmluZ31cbiAgICAgKiBAcmVhZG9ubHlcbiAgICAgKi9cbiAgICB0aGlzLm5hbWUgPSBuYW1lO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHVybCB1c2VkIHRvIGxvYWQgdGhpcyByZXNvdXJjZS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge3N0cmluZ31cbiAgICAgKiBAcmVhZG9ubHlcbiAgICAgKi9cbiAgICB0aGlzLnVybCA9IHVybDtcblxuICAgIC8qKlxuICAgICAqIFN0b3JlcyB3aGV0aGVyIG9yIG5vdCB0aGlzIHVybCBpcyBhIGRhdGEgdXJsLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKiBAcmVhZG9ubHlcbiAgICAgKi9cbiAgICB0aGlzLmlzRGF0YVVybCA9IHRoaXMudXJsLmluZGV4T2YoJ2RhdGE6JykgPT09IDA7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgZGF0YSB0aGF0IHdhcyBsb2FkZWQgYnkgdGhlIHJlc291cmNlLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7YW55fVxuICAgICAqL1xuICAgIHRoaXMuZGF0YSA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBJcyB0aGlzIHJlcXVlc3QgY3Jvc3Mtb3JpZ2luPyBJZiB1bnNldCwgZGV0ZXJtaW5lZCBhdXRvbWF0aWNhbGx5LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7c3RyaW5nfVxuICAgICAqL1xuICAgIHRoaXMuY3Jvc3NPcmlnaW4gPSBvcHRpb25zLmNyb3NzT3JpZ2luID09PSB0cnVlID8gJ2Fub255bW91cycgOiBvcHRpb25zLmNyb3NzT3JpZ2luO1xuXG4gICAgLyoqXG4gICAgICogVGhlIG1ldGhvZCBvZiBsb2FkaW5nIHRvIHVzZSBmb3IgdGhpcyByZXNvdXJjZS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1Jlc291cmNlLkxPQURfVFlQRX1cbiAgICAgKi9cbiAgICB0aGlzLmxvYWRUeXBlID0gb3B0aW9ucy5sb2FkVHlwZSB8fCB0aGlzLl9kZXRlcm1pbmVMb2FkVHlwZSgpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHR5cGUgdXNlZCB0byBsb2FkIHRoZSByZXNvdXJjZSB2aWEgWEhSLiBJZiB1bnNldCwgZGV0ZXJtaW5lZCBhdXRvbWF0aWNhbGx5LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7c3RyaW5nfVxuICAgICAqL1xuICAgIHRoaXMueGhyVHlwZSA9IG9wdGlvbnMueGhyVHlwZTtcblxuICAgIC8qKlxuICAgICAqIEV4dHJhIGluZm8gZm9yIG1pZGRsZXdhcmVcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge29iamVjdH1cbiAgICAgKi9cbiAgICB0aGlzLm1ldGFkYXRhID0gb3B0aW9ucy5tZXRhZGF0YSB8fCB7fTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBlcnJvciB0aGF0IG9jY3VycmVkIHdoaWxlIGxvYWRpbmcgKGlmIGFueSkuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtFcnJvcn1cbiAgICAgKiBAcmVhZG9ubHlcbiAgICAgKi9cbiAgICB0aGlzLmVycm9yID0gbnVsbDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBYSFIgb2JqZWN0IHRoYXQgd2FzIHVzZWQgdG8gbG9hZCB0aGlzIHJlc291cmNlLiBUaGlzIGlzIG9ubHkgc2V0XG4gICAgICogd2hlbiBgbG9hZFR5cGVgIGlzIGBSZXNvdXJjZS5MT0FEX1RZUEUuWEhSYC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1hNTEh0dHBSZXF1ZXN0fVxuICAgICAqL1xuICAgIHRoaXMueGhyID0gbnVsbDtcblxuICAgIC8qKlxuICAgICAqIERlc2NyaWJlcyBpZiB0aGlzIHJlc291cmNlIHdhcyBsb2FkZWQgYXMganNvbi4gT25seSB2YWxpZCBhZnRlciB0aGUgcmVzb3VyY2VcbiAgICAgKiBoYXMgY29tcGxldGVseSBsb2FkZWQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqL1xuICAgIHRoaXMuaXNKc29uID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBEZXNjcmliZXMgaWYgdGhpcyByZXNvdXJjZSB3YXMgbG9hZGVkIGFzIHhtbC4gT25seSB2YWxpZCBhZnRlciB0aGUgcmVzb3VyY2VcbiAgICAgKiBoYXMgY29tcGxldGVseSBsb2FkZWQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqL1xuICAgIHRoaXMuaXNYbWwgPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIERlc2NyaWJlcyBpZiB0aGlzIHJlc291cmNlIHdhcyBsb2FkZWQgYXMgYW4gaW1hZ2UgdGFnLiBPbmx5IHZhbGlkIGFmdGVyIHRoZSByZXNvdXJjZVxuICAgICAqIGhhcyBjb21wbGV0ZWx5IGxvYWRlZC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICovXG4gICAgdGhpcy5pc0ltYWdlID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBEZXNjcmliZXMgaWYgdGhpcyByZXNvdXJjZSB3YXMgbG9hZGVkIGFzIGFuIGF1ZGlvIHRhZy4gT25seSB2YWxpZCBhZnRlciB0aGUgcmVzb3VyY2VcbiAgICAgKiBoYXMgY29tcGxldGVseSBsb2FkZWQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqL1xuICAgIHRoaXMuaXNBdWRpbyA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogRGVzY3JpYmVzIGlmIHRoaXMgcmVzb3VyY2Ugd2FzIGxvYWRlZCBhcyBhIHZpZGVvIHRhZy4gT25seSB2YWxpZCBhZnRlciB0aGUgcmVzb3VyY2VcbiAgICAgKiBoYXMgY29tcGxldGVseSBsb2FkZWQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqL1xuICAgIHRoaXMuaXNWaWRlbyA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGBkZXF1ZXVlYCBtZXRob2QgdGhhdCB3aWxsIGJlIHVzZWQgYSBzdG9yYWdlIHBsYWNlIGZvciB0aGUgYXN5bmMgcXVldWUgZGVxdWV1ZSBtZXRob2RcbiAgICAgKiB1c2VkIHByaXZhdGVseSBieSB0aGUgbG9hZGVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7ZnVuY3Rpb259XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9kZXF1ZXVlID0gbnVsbDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBgY29tcGxldGVgIGZ1bmN0aW9uIGJvdW5kIHRvIHRoaXMgcmVzb3VyY2UncyBjb250ZXh0LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7ZnVuY3Rpb259XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9ib3VuZENvbXBsZXRlID0gdGhpcy5jb21wbGV0ZS5iaW5kKHRoaXMpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGBfb25FcnJvcmAgZnVuY3Rpb24gYm91bmQgdG8gdGhpcyByZXNvdXJjZSdzIGNvbnRleHQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtmdW5jdGlvbn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX2JvdW5kT25FcnJvciA9IHRoaXMuX29uRXJyb3IuYmluZCh0aGlzKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBgX29uUHJvZ3Jlc3NgIGZ1bmN0aW9uIGJvdW5kIHRvIHRoaXMgcmVzb3VyY2UncyBjb250ZXh0LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7ZnVuY3Rpb259XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9ib3VuZE9uUHJvZ3Jlc3MgPSB0aGlzLl9vblByb2dyZXNzLmJpbmQodGhpcyk7XG5cbiAgICAvLyB4aHIgY2FsbGJhY2tzXG4gICAgdGhpcy5fYm91bmRYaHJPbkVycm9yID0gdGhpcy5feGhyT25FcnJvci5iaW5kKHRoaXMpO1xuICAgIHRoaXMuX2JvdW5kWGhyT25BYm9ydCA9IHRoaXMuX3hock9uQWJvcnQuYmluZCh0aGlzKTtcbiAgICB0aGlzLl9ib3VuZFhock9uTG9hZCA9IHRoaXMuX3hock9uTG9hZC5iaW5kKHRoaXMpO1xuICAgIHRoaXMuX2JvdW5kWGRyT25UaW1lb3V0ID0gdGhpcy5feGRyT25UaW1lb3V0LmJpbmQodGhpcyk7XG5cbiAgICAvKipcbiAgICAgKiBFbWl0dGVkIHdoZW4gdGhlIHJlc291cmNlIGJlaW5ncyB0byBsb2FkLlxuICAgICAqXG4gICAgICogQGV2ZW50IHN0YXJ0XG4gICAgICogQG1lbWJlcm9mIFJlc291cmNlI1xuICAgICAqL1xuXG4gICAgLyoqXG4gICAgICogRW1pdHRlZCBlYWNoIHRpbWUgcHJvZ3Jlc3Mgb2YgdGhpcyByZXNvdXJjZSBsb2FkIHVwZGF0ZXMuXG4gICAgICogTm90IGFsbCByZXNvdXJjZXMgdHlwZXMgYW5kIGxvYWRlciBzeXN0ZW1zIGNhbiBzdXBwb3J0IHRoaXMgZXZlbnRcbiAgICAgKiBzbyBzb21ldGltZXMgaXQgbWF5IG5vdCBiZSBhdmFpbGFibGUuIElmIHRoZSByZXNvdXJjZVxuICAgICAqIGlzIGJlaW5nIGxvYWRlZCBvbiBhIG1vZGVybiBicm93c2VyLCB1c2luZyBYSFIsIGFuZCB0aGUgcmVtb3RlIHNlcnZlclxuICAgICAqIHByb3Blcmx5IHNldHMgQ29udGVudC1MZW5ndGggaGVhZGVycywgdGhlbiB0aGlzIHdpbGwgYmUgYXZhaWxhYmxlLlxuICAgICAqXG4gICAgICogQGV2ZW50IHByb2dyZXNzXG4gICAgICogQG1lbWJlcm9mIFJlc291cmNlI1xuICAgICAqL1xuXG4gICAgLyoqXG4gICAgICogRW1pdHRlZCBvbmNlIHRoaXMgcmVzb3VyY2UgaGFzIGxvYWRlZCwgaWYgdGhlcmUgd2FzIGFuIGVycm9yIGl0IHdpbGxcbiAgICAgKiBiZSBpbiB0aGUgYGVycm9yYCBwcm9wZXJ0eS5cbiAgICAgKlxuICAgICAqIEBldmVudCBjb21wbGV0ZVxuICAgICAqIEBtZW1iZXJvZiBSZXNvdXJjZSNcbiAgICAgKi9cbn1cblxuUmVzb3VyY2UucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShFdmVudEVtaXR0ZXIucHJvdG90eXBlKTtcblJlc291cmNlLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFJlc291cmNlO1xubW9kdWxlLmV4cG9ydHMgPSBSZXNvdXJjZTtcblxuLyoqXG4gKiBNYXJrcyB0aGUgcmVzb3VyY2UgYXMgY29tcGxldGUuXG4gKlxuICogQGZpcmVzIGNvbXBsZXRlXG4gKi9cblJlc291cmNlLnByb3RvdHlwZS5jb21wbGV0ZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAvLyBUT0RPOiBDbGVhbiB0aGlzIHVwIGluIGEgd3JhcHBlciBvciBzb21ldGhpbmcuLi5ncm9zcy4uLi5cbiAgICBpZiAodGhpcy5kYXRhICYmIHRoaXMuZGF0YS5yZW1vdmVFdmVudExpc3RlbmVyKSB7XG4gICAgICAgIHRoaXMuZGF0YS5yZW1vdmVFdmVudExpc3RlbmVyKCdlcnJvcicsIHRoaXMuX2JvdW5kT25FcnJvcik7XG4gICAgICAgIHRoaXMuZGF0YS5yZW1vdmVFdmVudExpc3RlbmVyKCdsb2FkJywgdGhpcy5fYm91bmRDb21wbGV0ZSk7XG4gICAgICAgIHRoaXMuZGF0YS5yZW1vdmVFdmVudExpc3RlbmVyKCdwcm9ncmVzcycsIHRoaXMuX2JvdW5kT25Qcm9ncmVzcyk7XG4gICAgICAgIHRoaXMuZGF0YS5yZW1vdmVFdmVudExpc3RlbmVyKCdjYW5wbGF5dGhyb3VnaCcsIHRoaXMuX2JvdW5kQ29tcGxldGUpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnhocikge1xuICAgICAgICBpZiAodGhpcy54aHIucmVtb3ZlRXZlbnRMaXN0ZW5lcikge1xuICAgICAgICAgICAgdGhpcy54aHIucmVtb3ZlRXZlbnRMaXN0ZW5lcignZXJyb3InLCB0aGlzLl9ib3VuZFhock9uRXJyb3IpO1xuICAgICAgICAgICAgdGhpcy54aHIucmVtb3ZlRXZlbnRMaXN0ZW5lcignYWJvcnQnLCB0aGlzLl9ib3VuZFhock9uQWJvcnQpO1xuICAgICAgICAgICAgdGhpcy54aHIucmVtb3ZlRXZlbnRMaXN0ZW5lcigncHJvZ3Jlc3MnLCB0aGlzLl9ib3VuZE9uUHJvZ3Jlc3MpO1xuICAgICAgICAgICAgdGhpcy54aHIucmVtb3ZlRXZlbnRMaXN0ZW5lcignbG9hZCcsIHRoaXMuX2JvdW5kWGhyT25Mb2FkKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMueGhyLm9uZXJyb3IgPSBudWxsO1xuICAgICAgICAgICAgdGhpcy54aHIub250aW1lb3V0ID0gbnVsbDtcbiAgICAgICAgICAgIHRoaXMueGhyLm9ucHJvZ3Jlc3MgPSBudWxsO1xuICAgICAgICAgICAgdGhpcy54aHIub25sb2FkID0gbnVsbDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMuZW1pdCgnY29tcGxldGUnLCB0aGlzKTtcbn07XG5cbi8qKlxuICogS2lja3Mgb2ZmIGxvYWRpbmcgb2YgdGhpcyByZXNvdXJjZS5cbiAqXG4gKiBAZmlyZXMgc3RhcnRcbiAqIEBwYXJhbSBbY2FsbGJhY2tdIHtmdW5jdGlvbn0gT3B0aW9uYWwgY2FsbGJhY2sgdG8gY2FsbCBvbmNlIHRoZSByZXNvdXJjZSBpcyBsb2FkZWQuXG4gKi9cblJlc291cmNlLnByb3RvdHlwZS5sb2FkID0gZnVuY3Rpb24gKGNiKSB7XG4gICAgdGhpcy5lbWl0KCdzdGFydCcsIHRoaXMpO1xuXG4gICAgLy8gaWYgYSBjYWxsYmFjayBpcyBzZXQsIGxpc3RlbiBmb3IgY29tcGxldGUgZXZlbnRcbiAgICBpZiAoY2IpIHtcbiAgICAgICAgdGhpcy5vbmNlKCdjb21wbGV0ZScsIGNiKTtcbiAgICB9XG5cbiAgICAvLyBpZiB1bnNldCwgZGV0ZXJtaW5lIHRoZSB2YWx1ZVxuICAgIGlmICh0aGlzLmNyb3NzT3JpZ2luID09PSBmYWxzZSB8fCB0eXBlb2YgdGhpcy5jcm9zc09yaWdpbiAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgdGhpcy5jcm9zc09yaWdpbiA9IHRoaXMuX2RldGVybWluZUNyb3NzT3JpZ2luKHRoaXMudXJsKTtcbiAgICB9XG5cbiAgICBzd2l0Y2godGhpcy5sb2FkVHlwZSkge1xuICAgICAgICBjYXNlIFJlc291cmNlLkxPQURfVFlQRS5JTUFHRTpcbiAgICAgICAgICAgIHRoaXMuX2xvYWRJbWFnZSgpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSBSZXNvdXJjZS5MT0FEX1RZUEUuQVVESU86XG4gICAgICAgICAgICB0aGlzLl9sb2FkRWxlbWVudCgnYXVkaW8nKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgUmVzb3VyY2UuTE9BRF9UWVBFLlZJREVPOlxuICAgICAgICAgICAgdGhpcy5fbG9hZEVsZW1lbnQoJ3ZpZGVvJyk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIFJlc291cmNlLkxPQURfVFlQRS5YSFI6XG4gICAgICAgICAgICAvKiBmYWxscyB0aHJvdWdoICovXG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICBpZiAodXNlWGRyICYmIHRoaXMuY3Jvc3NPcmlnaW4pIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9sb2FkWGRyKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9sb2FkWGhyKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBicmVhaztcbiAgICB9XG59O1xuXG4vKipcbiAqIExvYWRzIHRoaXMgcmVzb3VyY2VzIHVzaW5nIGFuIEltYWdlIG9iamVjdC5cbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5SZXNvdXJjZS5wcm90b3R5cGUuX2xvYWRJbWFnZSA9IGZ1bmN0aW9uICgpIHtcbiAgICB0aGlzLmRhdGEgPSBuZXcgSW1hZ2UoKTtcblxuICAgIGlmICh0aGlzLmNyb3NzT3JpZ2luKSB7XG4gICAgICAgIHRoaXMuZGF0YS5jcm9zc09yaWdpbiA9IHRoaXMuY3Jvc3NPcmlnaW47XG4gICAgfVxuXG4gICAgdGhpcy5kYXRhLnNyYyA9IHRoaXMudXJsO1xuXG4gICAgdGhpcy5pc0ltYWdlID0gdHJ1ZTtcblxuICAgIHRoaXMuZGF0YS5hZGRFdmVudExpc3RlbmVyKCdlcnJvcicsIHRoaXMuX2JvdW5kT25FcnJvciwgZmFsc2UpO1xuICAgIHRoaXMuZGF0YS5hZGRFdmVudExpc3RlbmVyKCdsb2FkJywgdGhpcy5fYm91bmRDb21wbGV0ZSwgZmFsc2UpO1xuICAgIHRoaXMuZGF0YS5hZGRFdmVudExpc3RlbmVyKCdwcm9ncmVzcycsIHRoaXMuX2JvdW5kT25Qcm9ncmVzcywgZmFsc2UpO1xufTtcblxuLyoqXG4gKiBMb2FkcyB0aGlzIHJlc291cmNlcyB1c2luZyBhbiBIVE1MQXVkaW9FbGVtZW50IG9yIEhUTUxWaWRlb0VsZW1lbnQuXG4gKlxuICogQHByaXZhdGVcbiAqL1xuUmVzb3VyY2UucHJvdG90eXBlLl9sb2FkRWxlbWVudCA9IGZ1bmN0aW9uICh0eXBlKSB7XG4gICAgaWYgKHR5cGUgPT09ICdhdWRpbycgJiYgdHlwZW9mIEF1ZGlvICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICB0aGlzLmRhdGEgPSBuZXcgQXVkaW8oKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHRoaXMuZGF0YSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQodHlwZSk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuZGF0YSA9PT0gbnVsbCkge1xuICAgICAgICB0aGlzLmVycm9yID0gbmV3IEVycm9yKCdVbnN1cHBvcnRlZCBlbGVtZW50ICcgKyB0eXBlKTtcbiAgICAgICAgdGhpcy5jb21wbGV0ZSgpO1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gc3VwcG9ydCBmb3IgQ29jb29uSlMgQ2FudmFzKyBydW50aW1lLCBsYWNrcyBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzb3VyY2UnKVxuICAgIGlmIChuYXZpZ2F0b3IuaXNDb2Nvb25KUykge1xuICAgICAgICB0aGlzLmRhdGEuc3JjID0gQXJyYXkuaXNBcnJheSh0aGlzLnVybCkgPyB0aGlzLnVybFswXSA6IHRoaXMudXJsO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkodGhpcy51cmwpKSB7XG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMudXJsLmxlbmd0aDsgKytpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5kYXRhLmFwcGVuZENoaWxkKHRoaXMuX2NyZWF0ZVNvdXJjZSh0eXBlLCB0aGlzLnVybFtpXSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5kYXRhLmFwcGVuZENoaWxkKHRoaXMuX2NyZWF0ZVNvdXJjZSh0eXBlLCB0aGlzLnVybCkpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgdGhpc1snaXMnICsgdHlwZVswXS50b1VwcGVyQ2FzZSgpICsgdHlwZS5zdWJzdHJpbmcoMSldID0gdHJ1ZTtcblxuICAgIHRoaXMuZGF0YS5hZGRFdmVudExpc3RlbmVyKCdlcnJvcicsIHRoaXMuX2JvdW5kT25FcnJvciwgZmFsc2UpO1xuICAgIHRoaXMuZGF0YS5hZGRFdmVudExpc3RlbmVyKCdsb2FkJywgdGhpcy5fYm91bmRDb21wbGV0ZSwgZmFsc2UpO1xuICAgIHRoaXMuZGF0YS5hZGRFdmVudExpc3RlbmVyKCdwcm9ncmVzcycsIHRoaXMuX2JvdW5kT25Qcm9ncmVzcywgZmFsc2UpO1xuICAgIHRoaXMuZGF0YS5hZGRFdmVudExpc3RlbmVyKCdjYW5wbGF5dGhyb3VnaCcsIHRoaXMuX2JvdW5kQ29tcGxldGUsIGZhbHNlKTtcblxuICAgIHRoaXMuZGF0YS5sb2FkKCk7XG59O1xuXG4vKipcbiAqIExvYWRzIHRoaXMgcmVzb3VyY2VzIHVzaW5nIGFuIFhNTEh0dHBSZXF1ZXN0LlxuICpcbiAqIEBwcml2YXRlXG4gKi9cblJlc291cmNlLnByb3RvdHlwZS5fbG9hZFhociA9IGZ1bmN0aW9uICgpIHtcbiAgICAvLyBpZiB1bnNldCwgZGV0ZXJtaW5lIHRoZSB2YWx1ZVxuICAgIGlmICh0eXBlb2YgdGhpcy54aHJUeXBlICE9PSAnc3RyaW5nJykge1xuICAgICAgICB0aGlzLnhoclR5cGUgPSB0aGlzLl9kZXRlcm1pbmVYaHJUeXBlKCk7XG4gICAgfVxuXG4gICAgdmFyIHhociA9IHRoaXMueGhyID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7XG5cbiAgICAvLyBzZXQgdGhlIHJlcXVlc3QgdHlwZSBhbmQgdXJsXG4gICAgeGhyLm9wZW4oJ0dFVCcsIHRoaXMudXJsLCB0cnVlKTtcblxuICAgIC8vIGxvYWQganNvbiBhcyB0ZXh0IGFuZCBwYXJzZSBpdCBvdXJzZWx2ZXMuIFdlIGRvIHRoaXMgYmVjYXVzZSBzb21lIGJyb3dzZXJzXG4gICAgLy8gKmNvdWdoKiBzYWZhcmkgKmNvdWdoKiBjYW4ndCBkZWFsIHdpdGggaXQuXG4gICAgaWYgKHRoaXMueGhyVHlwZSA9PT0gUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuSlNPTiB8fCB0aGlzLnhoclR5cGUgPT09IFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkRPQ1VNRU5UKSB7XG4gICAgICAgIHhoci5yZXNwb25zZVR5cGUgPSBSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRS5URVhUO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgeGhyLnJlc3BvbnNlVHlwZSA9IHRoaXMueGhyVHlwZTtcbiAgICB9XG5cbiAgICB4aHIuYWRkRXZlbnRMaXN0ZW5lcignZXJyb3InLCB0aGlzLl9ib3VuZFhock9uRXJyb3IsIGZhbHNlKTtcbiAgICB4aHIuYWRkRXZlbnRMaXN0ZW5lcignYWJvcnQnLCB0aGlzLl9ib3VuZFhock9uQWJvcnQsIGZhbHNlKTtcbiAgICB4aHIuYWRkRXZlbnRMaXN0ZW5lcigncHJvZ3Jlc3MnLCB0aGlzLl9ib3VuZE9uUHJvZ3Jlc3MsIGZhbHNlKTtcbiAgICB4aHIuYWRkRXZlbnRMaXN0ZW5lcignbG9hZCcsIHRoaXMuX2JvdW5kWGhyT25Mb2FkLCBmYWxzZSk7XG5cbiAgICB4aHIuc2VuZCgpO1xufTtcblxuLyoqXG4gKiBMb2FkcyB0aGlzIHJlc291cmNlcyB1c2luZyBhbiBYRG9tYWluUmVxdWVzdC4gVGhpcyBpcyBoZXJlIGJlY2F1c2Ugd2UgbmVlZCB0byBzdXBwb3J0IElFOSAoZ3Jvc3MpLlxuICpcbiAqIEBwcml2YXRlXG4gKi9cblJlc291cmNlLnByb3RvdHlwZS5fbG9hZFhkciA9IGZ1bmN0aW9uICgpIHtcbiAgICAvLyBpZiB1bnNldCwgZGV0ZXJtaW5lIHRoZSB2YWx1ZVxuICAgIGlmICh0eXBlb2YgdGhpcy54aHJUeXBlICE9PSAnc3RyaW5nJykge1xuICAgICAgICB0aGlzLnhoclR5cGUgPSB0aGlzLl9kZXRlcm1pbmVYaHJUeXBlKCk7XG4gICAgfVxuXG4gICAgdmFyIHhkciA9IHRoaXMueGhyID0gbmV3IFhEb21haW5SZXF1ZXN0KCk7XG5cbiAgICAvLyBYRG9tYWluUmVxdWVzdCBoYXMgYSBmZXcgcXVpcmtzLiBPY2Nhc2lvbmFsbHkgaXQgd2lsbCBhYm9ydCByZXF1ZXN0c1xuICAgIC8vIEEgd2F5IHRvIGF2b2lkIHRoaXMgaXMgdG8gbWFrZSBzdXJlIEFMTCBjYWxsYmFja3MgYXJlIHNldCBldmVuIGlmIG5vdCB1c2VkXG4gICAgLy8gTW9yZSBpbmZvIGhlcmU6IGh0dHA6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvMTU3ODY5NjYveGRvbWFpbnJlcXVlc3QtYWJvcnRzLXBvc3Qtb24taWUtOVxuICAgIHhkci50aW1lb3V0ID0gNTAwMDtcblxuICAgIHhkci5vbmVycm9yID0gdGhpcy5fYm91bmRYaHJPbkVycm9yO1xuICAgIHhkci5vbnRpbWVvdXQgPSB0aGlzLl9ib3VuZFhkck9uVGltZW91dDtcbiAgICB4ZHIub25wcm9ncmVzcyA9IHRoaXMuX2JvdW5kT25Qcm9ncmVzcztcbiAgICB4ZHIub25sb2FkID0gdGhpcy5fYm91bmRYaHJPbkxvYWQ7XG5cbiAgICB4ZHIub3BlbignR0VUJywgdGhpcy51cmwsIHRydWUpO1xuXG4gICAgLy8gIE5vdGU6IFRoZSB4ZHIuc2VuZCgpIGNhbGwgaXMgd3JhcHBlZCBpbiBhIHRpbWVvdXQgdG8gcHJldmVudCBhbiBpc3N1ZSB3aXRoIHRoZSBpbnRlcmZhY2Ugd2hlcmUgc29tZSByZXF1ZXN0cyBhcmUgbG9zdFxuICAgIC8vICBpZiBtdWx0aXBsZSBYRG9tYWluUmVxdWVzdHMgYXJlIGJlaW5nIHNlbnQgYXQgdGhlIHNhbWUgdGltZS5cbiAgICAvLyBTb21lIGluZm8gaGVyZTogaHR0cHM6Ly9naXRodWIuY29tL3Bob3RvbnN0b3JtL3BoYXNlci9pc3N1ZXMvMTI0OFxuICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgICB4ZHIuc2VuZCgpO1xuICAgIH0sIDApO1xufTtcblxuLyoqXG4gKiBDcmVhdGVzIGEgc291cmNlIHVzZWQgaW4gbG9hZGluZyB2aWEgYW4gZWxlbWVudC5cbiAqXG4gKiBAcGFyYW0gdHlwZSB7c3RyaW5nfSBUaGUgZWxlbWVudCB0eXBlICh2aWRlbyBvciBhdWRpbykuXG4gKiBAcGFyYW0gdXJsIHtzdHJpbmd9IFRoZSBzb3VyY2UgVVJMIHRvIGxvYWQgZnJvbS5cbiAqIEBwYXJhbSBbbWltZV0ge3N0cmluZ30gVGhlIG1pbWUgdHlwZSBvZiB0aGUgdmlkZW9cbiAqIEBwcml2YXRlXG4gKi9cblJlc291cmNlLnByb3RvdHlwZS5fY3JlYXRlU291cmNlID0gZnVuY3Rpb24gKHR5cGUsIHVybCwgbWltZSkge1xuICAgIGlmICghbWltZSkge1xuICAgICAgICBtaW1lID0gdHlwZSArICcvJyArIHVybC5zdWJzdHIodXJsLmxhc3RJbmRleE9mKCcuJykgKyAxKTtcbiAgICB9XG5cbiAgICB2YXIgc291cmNlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc291cmNlJyk7XG5cbiAgICBzb3VyY2Uuc3JjID0gdXJsO1xuICAgIHNvdXJjZS50eXBlID0gbWltZTtcblxuICAgIHJldHVybiBzb3VyY2U7XG59O1xuXG4vKipcbiAqIENhbGxlZCBpZiBhIGxvYWQgZXJyb3JzIG91dC5cbiAqXG4gKiBAcGFyYW0gZXZlbnQge0V2ZW50fSBUaGUgZXJyb3IgZXZlbnQgZnJvbSB0aGUgZWxlbWVudCB0aGF0IGVtaXRzIGl0LlxuICogQHByaXZhdGVcbiAqL1xuUmVzb3VyY2UucHJvdG90eXBlLl9vbkVycm9yID0gZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgdGhpcy5lcnJvciA9IG5ldyBFcnJvcignRmFpbGVkIHRvIGxvYWQgZWxlbWVudCB1c2luZyAnICsgZXZlbnQudGFyZ2V0Lm5vZGVOYW1lKTtcbiAgICB0aGlzLmNvbXBsZXRlKCk7XG59O1xuXG4vKipcbiAqIENhbGxlZCBpZiBhIGxvYWQgcHJvZ3Jlc3MgZXZlbnQgZmlyZXMgZm9yIHhoci94ZHIuXG4gKlxuICogQGZpcmVzIHByb2dyZXNzXG4gKiBAcGFyYW0gZXZlbnQge1hNTEh0dHBSZXF1ZXN0UHJvZ3Jlc3NFdmVudHxFdmVudH1cbiAqIEBwcml2YXRlXG4gKi9cblJlc291cmNlLnByb3RvdHlwZS5fb25Qcm9ncmVzcyA9ICBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICBpZiAoZXZlbnQgJiYgZXZlbnQubGVuZ3RoQ29tcHV0YWJsZSkge1xuICAgICAgICB0aGlzLmVtaXQoJ3Byb2dyZXNzJywgdGhpcywgZXZlbnQubG9hZGVkIC8gZXZlbnQudG90YWwpO1xuICAgIH1cbn07XG5cbi8qKlxuICogQ2FsbGVkIGlmIGFuIGVycm9yIGV2ZW50IGZpcmVzIGZvciB4aHIveGRyLlxuICpcbiAqIEBwYXJhbSBldmVudCB7WE1MSHR0cFJlcXVlc3RFcnJvckV2ZW50fEV2ZW50fVxuICogQHByaXZhdGVcbiAqL1xuUmVzb3VyY2UucHJvdG90eXBlLl94aHJPbkVycm9yID0gZnVuY3Rpb24gKCkge1xuICAgIHRoaXMuZXJyb3IgPSBuZXcgRXJyb3IoXG4gICAgICAgIHJlcVR5cGUodGhpcy54aHIpICsgJyBSZXF1ZXN0IGZhaWxlZC4gJyArXG4gICAgICAgICdTdGF0dXM6ICcgKyB0aGlzLnhoci5zdGF0dXMgKyAnLCB0ZXh0OiBcIicgKyB0aGlzLnhoci5zdGF0dXNUZXh0ICsgJ1wiJ1xuICAgICk7XG5cbiAgICB0aGlzLmNvbXBsZXRlKCk7XG59O1xuXG4vKipcbiAqIENhbGxlZCBpZiBhbiBhYm9ydCBldmVudCBmaXJlcyBmb3IgeGhyLlxuICpcbiAqIEBwYXJhbSBldmVudCB7WE1MSHR0cFJlcXVlc3RBYm9ydEV2ZW50fVxuICogQHByaXZhdGVcbiAqL1xuUmVzb3VyY2UucHJvdG90eXBlLl94aHJPbkFib3J0ID0gZnVuY3Rpb24gKCkge1xuICAgIHRoaXMuZXJyb3IgPSBuZXcgRXJyb3IocmVxVHlwZSh0aGlzLnhocikgKyAnIFJlcXVlc3Qgd2FzIGFib3J0ZWQgYnkgdGhlIHVzZXIuJyk7XG4gICAgdGhpcy5jb21wbGV0ZSgpO1xufTtcblxuLyoqXG4gKiBDYWxsZWQgaWYgYSB0aW1lb3V0IGV2ZW50IGZpcmVzIGZvciB4ZHIuXG4gKlxuICogQHBhcmFtIGV2ZW50IHtFdmVudH1cbiAqIEBwcml2YXRlXG4gKi9cblJlc291cmNlLnByb3RvdHlwZS5feGRyT25UaW1lb3V0ID0gZnVuY3Rpb24gKCkge1xuICAgIHRoaXMuZXJyb3IgPSBuZXcgRXJyb3IocmVxVHlwZSh0aGlzLnhocikgKyAnIFJlcXVlc3QgdGltZWQgb3V0LicpO1xuICAgIHRoaXMuY29tcGxldGUoKTtcbn07XG5cbi8qKlxuICogQ2FsbGVkIHdoZW4gZGF0YSBzdWNjZXNzZnVsbHkgbG9hZHMgZnJvbSBhbiB4aHIveGRyIHJlcXVlc3QuXG4gKlxuICogQHBhcmFtIGV2ZW50IHtYTUxIdHRwUmVxdWVzdExvYWRFdmVudHxFdmVudH1cbiAqIEBwcml2YXRlXG4gKi9cblJlc291cmNlLnByb3RvdHlwZS5feGhyT25Mb2FkID0gZnVuY3Rpb24gKCkge1xuICAgIHZhciB4aHIgPSB0aGlzLnhocixcbiAgICAgICAgc3RhdHVzID0geGhyLnN0YXR1cyAhPT0gdW5kZWZpbmVkID8geGhyLnN0YXR1cyA6IDIwMDsgLy9YRFIgaGFzIG5vIGAuc3RhdHVzYCwgYXNzdW1lIDIwMC5cblxuICAgIC8vIHN0YXR1cyBjYW4gYmUgMCB3aGVuIHVzaW5nIHRoZSBmaWxlOi8vIHByb3RvY29sLCBhbHNvIGNoZWNrIGlmIGEgcmVzcG9uc2Ugd2FzIGZvdW5kXG4gICAgaWYgKHN0YXR1cyA9PT0gMjAwIHx8IHN0YXR1cyA9PT0gMjA0IHx8IChzdGF0dXMgPT09IDAgJiYgeGhyLnJlc3BvbnNlVGV4dC5sZW5ndGggPiAwKSkge1xuICAgICAgICAvLyBpZiB0ZXh0LCBqdXN0IHJldHVybiBpdFxuICAgICAgICBpZiAodGhpcy54aHJUeXBlID09PSBSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRS5URVhUKSB7XG4gICAgICAgICAgICB0aGlzLmRhdGEgPSB4aHIucmVzcG9uc2VUZXh0O1xuICAgICAgICB9XG4gICAgICAgIC8vIGlmIGpzb24sIHBhcnNlIGludG8ganNvbiBvYmplY3RcbiAgICAgICAgZWxzZSBpZiAodGhpcy54aHJUeXBlID09PSBSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRS5KU09OKSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIHRoaXMuZGF0YSA9IEpTT04ucGFyc2UoeGhyLnJlc3BvbnNlVGV4dCk7XG4gICAgICAgICAgICAgICAgdGhpcy5pc0pzb24gPSB0cnVlO1xuICAgICAgICAgICAgfSBjYXRjaChlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5lcnJvciA9IG5ldyBFcnJvcignRXJyb3IgdHJ5aW5nIHRvIHBhcnNlIGxvYWRlZCBqc29uOicsIGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIGlmIHhtbCwgcGFyc2UgaW50byBhbiB4bWwgZG9jdW1lbnQgb3IgZGl2IGVsZW1lbnRcbiAgICAgICAgZWxzZSBpZiAodGhpcy54aHJUeXBlID09PSBSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRS5ET0NVTUVOVCkge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBpZiAod2luZG93LkRPTVBhcnNlcikge1xuICAgICAgICAgICAgICAgICAgICB2YXIgZG9tcGFyc2VyID0gbmV3IERPTVBhcnNlcigpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmRhdGEgPSBkb21wYXJzZXIucGFyc2VGcm9tU3RyaW5nKHhoci5yZXNwb25zZVRleHQsICd0ZXh0L3htbCcpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICAgICAgICAgICAgICBkaXYuaW5uZXJIVE1MID0geGhyLnJlc3BvbnNlVGV4dDtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kYXRhID0gZGl2O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzLmlzWG1sID0gdHJ1ZTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmVycm9yID0gbmV3IEVycm9yKCdFcnJvciB0cnlpbmcgdG8gcGFyc2UgbG9hZGVkIHhtbDonLCBlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvLyBvdGhlciB0eXBlcyBqdXN0IHJldHVybiB0aGUgcmVzcG9uc2VcbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmRhdGEgPSB4aHIucmVzcG9uc2UgfHwgeGhyLnJlc3BvbnNlVGV4dDtcbiAgICAgICAgfVxuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgdGhpcy5lcnJvciA9IG5ldyBFcnJvcignWycgKyB4aHIuc3RhdHVzICsgJ10nICsgeGhyLnN0YXR1c1RleHQgKyAnOicgKyB4aHIucmVzcG9uc2VVUkwpO1xuICAgIH1cblxuICAgIHRoaXMuY29tcGxldGUoKTtcbn07XG5cbmZ1bmN0aW9uIHJlcVR5cGUoeGhyKSB7XG4gICAgcmV0dXJuIHhoci50b1N0cmluZygpLnJlcGxhY2UoJ29iamVjdCAnLCAnJyk7XG59XG5cbi8qKlxuICogU2V0cyB0aGUgYGNyb3NzT3JpZ2luYCBwcm9wZXJ0eSBmb3IgdGhpcyByZXNvdXJjZSBiYXNlZCBvbiBpZiB0aGUgdXJsXG4gKiBmb3IgdGhpcyByZXNvdXJjZSBpcyBjcm9zcy1vcmlnaW4uIElmIGNyb3NzT3JpZ2luIHdhcyBtYW51YWxseSBzZXQsIHRoaXNcbiAqIGZ1bmN0aW9uIGRvZXMgbm90aGluZy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHVybCB7c3RyaW5nfSBUaGUgdXJsIHRvIHRlc3QuXG4gKiBAcGFyYW0gW2xvY2F0aW9uPXdpbmRvdy5sb2NhdGlvbl0ge29iamVjdH0gVGhlIGxvY2F0aW9uIG9iamVjdCB0byB0ZXN0IGFnYWluc3QuXG4gKiBAcmV0dXJuIHtzdHJpbmd9IFRoZSBjcm9zc09yaWdpbiB2YWx1ZSB0byB1c2UgKG9yIGVtcHR5IHN0cmluZyBmb3Igbm9uZSkuXG4gKi9cblJlc291cmNlLnByb3RvdHlwZS5fZGV0ZXJtaW5lQ3Jvc3NPcmlnaW4gPSBmdW5jdGlvbiAodXJsLCBsb2MpIHtcbiAgICAvLyBkYXRhOiBhbmQgamF2YXNjcmlwdDogdXJscyBhcmUgY29uc2lkZXJlZCBzYW1lLW9yaWdpblxuICAgIGlmICh1cmwuaW5kZXhPZignZGF0YTonKSA9PT0gMCkge1xuICAgICAgICByZXR1cm4gJyc7XG4gICAgfVxuXG4gICAgLy8gZGVmYXVsdCBpcyB3aW5kb3cubG9jYXRpb25cbiAgICBsb2MgPSBsb2MgfHwgd2luZG93LmxvY2F0aW9uO1xuXG4gICAgaWYgKCF0ZW1wQW5jaG9yKSB7XG4gICAgICAgIHRlbXBBbmNob3IgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdhJyk7XG4gICAgfVxuXG4gICAgLy8gbGV0IHRoZSBicm93c2VyIGRldGVybWluZSB0aGUgZnVsbCBocmVmIGZvciB0aGUgdXJsIG9mIHRoaXMgcmVzb3VyY2UgYW5kIHRoZW5cbiAgICAvLyBwYXJzZSB3aXRoIHRoZSBub2RlIHVybCBsaWIsIHdlIGNhbid0IHVzZSB0aGUgcHJvcGVydGllcyBvZiB0aGUgYW5jaG9yIGVsZW1lbnRcbiAgICAvLyBiZWNhdXNlIHRoZXkgZG9uJ3Qgd29yayBpbiBJRTkgOihcbiAgICB0ZW1wQW5jaG9yLmhyZWYgPSB1cmw7XG4gICAgdXJsID0gX3VybC5wYXJzZSh0ZW1wQW5jaG9yLmhyZWYpO1xuXG4gICAgdmFyIHNhbWVQb3J0ID0gKCF1cmwucG9ydCAmJiBsb2MucG9ydCA9PT0gJycpIHx8ICh1cmwucG9ydCA9PT0gbG9jLnBvcnQpO1xuXG4gICAgLy8gaWYgY3Jvc3Mgb3JpZ2luXG4gICAgaWYgKHVybC5ob3N0bmFtZSAhPT0gbG9jLmhvc3RuYW1lIHx8ICFzYW1lUG9ydCB8fCB1cmwucHJvdG9jb2wgIT09IGxvYy5wcm90b2NvbCkge1xuICAgICAgICByZXR1cm4gJ2Fub255bW91cyc7XG4gICAgfVxuXG4gICAgcmV0dXJuICcnO1xufTtcblxuLyoqXG4gKiBEZXRlcm1pbmVzIHRoZSByZXNwb25zZVR5cGUgb2YgYW4gWEhSIHJlcXVlc3QgYmFzZWQgb24gdGhlIGV4dGVuc2lvbiBvZiB0aGVcbiAqIHJlc291cmNlIGJlaW5nIGxvYWRlZC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHJldHVybiB7UmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEV9IFRoZSByZXNwb25zZVR5cGUgdG8gdXNlLlxuICovXG5SZXNvdXJjZS5wcm90b3R5cGUuX2RldGVybWluZVhoclR5cGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIFJlc291cmNlLl94aHJUeXBlTWFwW3RoaXMuX2dldEV4dGVuc2lvbigpXSB8fCBSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRS5URVhUO1xufTtcblxuUmVzb3VyY2UucHJvdG90eXBlLl9kZXRlcm1pbmVMb2FkVHlwZSA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gUmVzb3VyY2UuX2xvYWRUeXBlTWFwW3RoaXMuX2dldEV4dGVuc2lvbigpXSB8fCBSZXNvdXJjZS5MT0FEX1RZUEUuWEhSO1xufTtcblxuUmVzb3VyY2UucHJvdG90eXBlLl9nZXRFeHRlbnNpb24gPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHVybCA9IHRoaXMudXJsLFxuICAgICAgICBleHQ7XG5cbiAgICBpZiAodGhpcy5pc0RhdGFVcmwpIHtcbiAgICAgICAgdmFyIHNsYXNoSW5kZXggPSB1cmwuaW5kZXhPZignLycpO1xuICAgICAgICBleHQgPSB1cmwuc3Vic3RyaW5nKHNsYXNoSW5kZXggKyAxLCB1cmwuaW5kZXhPZignOycsIHNsYXNoSW5kZXgpKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHZhciBxdWVyeVN0YXJ0ID0gdXJsLmluZGV4T2YoJz8nKTtcbiAgICAgICAgaWYgKHF1ZXJ5U3RhcnQgIT09IC0xKSB7XG4gICAgICAgICAgICB1cmwgPSB1cmwuc3Vic3RyaW5nKDAsIHF1ZXJ5U3RhcnQpO1xuICAgICAgICB9XG5cbiAgICAgICAgZXh0ID0gdXJsLnN1YnN0cmluZyh1cmwubGFzdEluZGV4T2YoJy4nKSArIDEpO1xuICAgIH1cblxuICAgIHJldHVybiBleHQ7XG59O1xuXG4vKipcbiAqIERldGVybWluZXMgdGhlIG1pbWUgdHlwZSBvZiBhbiBYSFIgcmVxdWVzdCBiYXNlZCBvbiB0aGUgcmVzcG9uc2VUeXBlIG9mXG4gKiByZXNvdXJjZSBiZWluZyBsb2FkZWQuXG4gKlxuICogQHByaXZhdGVcbiAqIEByZXR1cm4ge3N0cmluZ30gVGhlIG1pbWUgdHlwZSB0byB1c2UuXG4gKi9cblJlc291cmNlLnByb3RvdHlwZS5fZ2V0TWltZUZyb21YaHJUeXBlID0gZnVuY3Rpb24gKHR5cGUpIHtcbiAgICBzd2l0Y2godHlwZSkge1xuICAgICAgICBjYXNlIFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkJVRkZFUjpcbiAgICAgICAgICAgIHJldHVybiAnYXBwbGljYXRpb24vb2N0ZXQtYmluYXJ5JztcblxuICAgICAgICBjYXNlIFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkJMT0I6XG4gICAgICAgICAgICByZXR1cm4gJ2FwcGxpY2F0aW9uL2Jsb2InO1xuXG4gICAgICAgIGNhc2UgUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuRE9DVU1FTlQ6XG4gICAgICAgICAgICByZXR1cm4gJ2FwcGxpY2F0aW9uL3htbCc7XG5cbiAgICAgICAgY2FzZSBSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRS5KU09OOlxuICAgICAgICAgICAgcmV0dXJuICdhcHBsaWNhdGlvbi9qc29uJztcblxuICAgICAgICBjYXNlIFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkRFRkFVTFQ6XG4gICAgICAgIGNhc2UgUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuVEVYVDpcbiAgICAgICAgICAgIC8qIGZhbGxzIHRocm91Z2ggKi9cbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIHJldHVybiAndGV4dC9wbGFpbic7XG5cbiAgICB9XG59O1xuXG4vKipcbiAqIFRoZSB0eXBlcyBvZiBsb2FkaW5nIGEgcmVzb3VyY2UgY2FuIHVzZS5cbiAqXG4gKiBAc3RhdGljXG4gKiBAY29uc3RhbnRcbiAqIEBwcm9wZXJ0eSB7b2JqZWN0fSBMT0FEX1RZUEVcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBMT0FEX1RZUEUuWEhSIC0gVXNlcyBYTUxIdHRwUmVxdWVzdCB0byBsb2FkIHRoZSByZXNvdXJjZS5cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBMT0FEX1RZUEUuSU1BR0UgLSBVc2VzIGFuIGBJbWFnZWAgb2JqZWN0IHRvIGxvYWQgdGhlIHJlc291cmNlLlxuICogQHByb3BlcnR5IHtudW1iZXJ9IExPQURfVFlQRS5BVURJTyAtIFVzZXMgYW4gYEF1ZGlvYCBvYmplY3QgdG8gbG9hZCB0aGUgcmVzb3VyY2UuXG4gKiBAcHJvcGVydHkge251bWJlcn0gTE9BRF9UWVBFLlZJREVPIC0gVXNlcyBhIGBWaWRlb2Agb2JqZWN0IHRvIGxvYWQgdGhlIHJlc291cmNlLlxuICovXG5SZXNvdXJjZS5MT0FEX1RZUEUgPSB7XG4gICAgWEhSOiAgICAxLFxuICAgIElNQUdFOiAgMixcbiAgICBBVURJTzogIDMsXG4gICAgVklERU86ICA0XG59O1xuXG4vKipcbiAqIFRoZSBYSFIgcmVhZHkgc3RhdGVzLCB1c2VkIGludGVybmFsbHkuXG4gKlxuICogQHN0YXRpY1xuICogQGNvbnN0YW50XG4gKiBAcHJvcGVydHkge29iamVjdH0gWEhSX1JFQURZX1NUQVRFXG4gKiBAcHJvcGVydHkge251bWJlcn0gWEhSX1JFQURZX1NUQVRFLlVOU0VOVCAtIG9wZW4oKWhhcyBub3QgYmVlbiBjYWxsZWQgeWV0LlxuICogQHByb3BlcnR5IHtudW1iZXJ9IFhIUl9SRUFEWV9TVEFURS5PUEVORUQgLSBzZW5kKCloYXMgbm90IGJlZW4gY2FsbGVkIHlldC5cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBYSFJfUkVBRFlfU1RBVEUuSEVBREVSU19SRUNFSVZFRCAtIHNlbmQoKSBoYXMgYmVlbiBjYWxsZWQsIGFuZCBoZWFkZXJzIGFuZCBzdGF0dXMgYXJlIGF2YWlsYWJsZS5cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBYSFJfUkVBRFlfU1RBVEUuTE9BRElORyAtIERvd25sb2FkaW5nOyByZXNwb25zZVRleHQgaG9sZHMgcGFydGlhbCBkYXRhLlxuICogQHByb3BlcnR5IHtudW1iZXJ9IFhIUl9SRUFEWV9TVEFURS5ET05FIC0gVGhlIG9wZXJhdGlvbiBpcyBjb21wbGV0ZS5cbiAqL1xuUmVzb3VyY2UuWEhSX1JFQURZX1NUQVRFID0ge1xuICAgIFVOU0VOVDogMCxcbiAgICBPUEVORUQ6IDEsXG4gICAgSEVBREVSU19SRUNFSVZFRDogMixcbiAgICBMT0FESU5HOiAzLFxuICAgIERPTkU6IDRcbn07XG5cbi8qKlxuICogVGhlIFhIUiByZWFkeSBzdGF0ZXMsIHVzZWQgaW50ZXJuYWxseS5cbiAqXG4gKiBAc3RhdGljXG4gKiBAY29uc3RhbnRcbiAqIEBwcm9wZXJ0eSB7b2JqZWN0fSBYSFJfUkVTUE9OU0VfVFlQRVxuICogQHByb3BlcnR5IHtzdHJpbmd9IFhIUl9SRVNQT05TRV9UWVBFLkRFRkFVTFQgLSBkZWZhdWx0cyB0byB0ZXh0XG4gKiBAcHJvcGVydHkge3N0cmluZ30gWEhSX1JFU1BPTlNFX1RZUEUuQlVGRkVSIC0gQXJyYXlCdWZmZXJcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBYSFJfUkVTUE9OU0VfVFlQRS5CTE9CIC0gQmxvYlxuICogQHByb3BlcnR5IHtzdHJpbmd9IFhIUl9SRVNQT05TRV9UWVBFLkRPQ1VNRU5UIC0gRG9jdW1lbnRcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBYSFJfUkVTUE9OU0VfVFlQRS5KU09OIC0gT2JqZWN0XG4gKiBAcHJvcGVydHkge3N0cmluZ30gWEhSX1JFU1BPTlNFX1RZUEUuVEVYVCAtIFN0cmluZ1xuICovXG5SZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRSA9IHtcbiAgICBERUZBVUxUOiAgICAndGV4dCcsXG4gICAgQlVGRkVSOiAgICAgJ2FycmF5YnVmZmVyJyxcbiAgICBCTE9COiAgICAgICAnYmxvYicsXG4gICAgRE9DVU1FTlQ6ICAgJ2RvY3VtZW50JyxcbiAgICBKU09OOiAgICAgICAnanNvbicsXG4gICAgVEVYVDogICAgICAgJ3RleHQnXG59O1xuXG5SZXNvdXJjZS5fbG9hZFR5cGVNYXAgPSB7XG4gICAgJ2dpZic6ICAgICAgUmVzb3VyY2UuTE9BRF9UWVBFLklNQUdFLFxuICAgICdwbmcnOiAgICAgIFJlc291cmNlLkxPQURfVFlQRS5JTUFHRSxcbiAgICAnYm1wJzogICAgICBSZXNvdXJjZS5MT0FEX1RZUEUuSU1BR0UsXG4gICAgJ2pwZyc6ICAgICAgUmVzb3VyY2UuTE9BRF9UWVBFLklNQUdFLFxuICAgICdqcGVnJzogICAgIFJlc291cmNlLkxPQURfVFlQRS5JTUFHRSxcbiAgICAndGlmJzogICAgICBSZXNvdXJjZS5MT0FEX1RZUEUuSU1BR0UsXG4gICAgJ3RpZmYnOiAgICAgUmVzb3VyY2UuTE9BRF9UWVBFLklNQUdFLFxuICAgICd3ZWJwJzogICAgIFJlc291cmNlLkxPQURfVFlQRS5JTUFHRSxcbiAgICAndGdhJzogICAgICBSZXNvdXJjZS5MT0FEX1RZUEUuSU1BR0Vcbn07XG5cblJlc291cmNlLl94aHJUeXBlTWFwID0ge1xuICAgIC8vIHhtbFxuICAgICd4aHRtbCc6ICAgIFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkRPQ1VNRU5ULFxuICAgICdodG1sJzogICAgIFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkRPQ1VNRU5ULFxuICAgICdodG0nOiAgICAgIFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkRPQ1VNRU5ULFxuICAgICd4bWwnOiAgICAgIFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkRPQ1VNRU5ULFxuICAgICd0bXgnOiAgICAgIFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkRPQ1VNRU5ULFxuICAgICd0c3gnOiAgICAgIFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkRPQ1VNRU5ULFxuICAgICdzdmcnOiAgICAgIFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkRPQ1VNRU5ULFxuXG4gICAgLy8gaW1hZ2VzXG4gICAgJ2dpZic6ICAgICAgUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuQkxPQixcbiAgICAncG5nJzogICAgICBSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRS5CTE9CLFxuICAgICdibXAnOiAgICAgIFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkJMT0IsXG4gICAgJ2pwZyc6ICAgICAgUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuQkxPQixcbiAgICAnanBlZyc6ICAgICBSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRS5CTE9CLFxuICAgICd0aWYnOiAgICAgIFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkJMT0IsXG4gICAgJ3RpZmYnOiAgICAgUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuQkxPQixcbiAgICAnd2VicCc6ICAgICBSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRS5CTE9CLFxuICAgICd0Z2EnOiAgICAgIFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkJMT0IsXG5cbiAgICAvLyBqc29uXG4gICAgJ2pzb24nOiAgICAgUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuSlNPTixcblxuICAgIC8vIHRleHRcbiAgICAndGV4dCc6ICAgICBSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRS5URVhULFxuICAgICd0eHQnOiAgICAgIFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLlRFWFRcbn07XG5cbi8qKlxuICogU2V0cyB0aGUgbG9hZCB0eXBlIHRvIGJlIHVzZWQgZm9yIGEgc3BlY2lmaWMgZXh0ZW5zaW9uLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBwYXJhbSBleHRuYW1lIHtzdHJpbmd9IFRoZSBleHRlbnNpb24gdG8gc2V0IHRoZSB0eXBlIGZvciwgZS5nLiBcInBuZ1wiIG9yIFwiZm50XCJcbiAqIEBwYXJhbSBsb2FkVHlwZSB7UmVzb3VyY2UuTE9BRF9UWVBFfSBUaGUgbG9hZCB0eXBlIHRvIHNldCBpdCB0by5cbiAqL1xuUmVzb3VyY2Uuc2V0RXh0ZW5zaW9uTG9hZFR5cGUgPSBmdW5jdGlvbiAoZXh0bmFtZSwgbG9hZFR5cGUpIHtcbiAgICBzZXRFeHRNYXAoUmVzb3VyY2UuX2xvYWRUeXBlTWFwLCBleHRuYW1lLCBsb2FkVHlwZSk7XG59O1xuXG4vKipcbiAqIFNldHMgdGhlIGxvYWQgdHlwZSB0byBiZSB1c2VkIGZvciBhIHNwZWNpZmljIGV4dGVuc2lvbi5cbiAqXG4gKiBAc3RhdGljXG4gKiBAcGFyYW0gZXh0bmFtZSB7c3RyaW5nfSBUaGUgZXh0ZW5zaW9uIHRvIHNldCB0aGUgdHlwZSBmb3IsIGUuZy4gXCJwbmdcIiBvciBcImZudFwiXG4gKiBAcGFyYW0geGhyVHlwZSB7UmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEV9IFRoZSB4aHIgdHlwZSB0byBzZXQgaXQgdG8uXG4gKi9cblJlc291cmNlLnNldEV4dGVuc2lvblhoclR5cGUgPSBmdW5jdGlvbiAoZXh0bmFtZSwgeGhyVHlwZSkge1xuICAgIHNldEV4dE1hcChSZXNvdXJjZS5feGhyVHlwZU1hcCwgZXh0bmFtZSwgeGhyVHlwZSk7XG59O1xuXG5mdW5jdGlvbiBzZXRFeHRNYXAobWFwLCBleHRuYW1lLCB2YWwpIHtcbiAgICBpZiAoZXh0bmFtZSAmJiBleHRuYW1lLmluZGV4T2YoJy4nKSA9PT0gMCkge1xuICAgICAgICBleHRuYW1lID0gZXh0bmFtZS5zdWJzdHJpbmcoMSk7XG4gICAgfVxuXG4gICAgaWYgKCFleHRuYW1lKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBtYXBbZXh0bmFtZV0gPSB2YWw7XG59XG4iLCJtb2R1bGUuZXhwb3J0cyA9IHtcblxuICAgIC8vIHByaXZhdGUgcHJvcGVydHlcbiAgICBfa2V5U3RyOiBcIkFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5Ky89XCIsXG5cbiAgICBlbmNvZGVCaW5hcnk6IGZ1bmN0aW9uIChpbnB1dCkge1xuICAgICAgICB2YXIgb3V0cHV0ID0gXCJcIjtcbiAgICAgICAgdmFyIGJ5dGVidWZmZXI7XG4gICAgICAgIHZhciBlbmNvZGVkQ2hhckluZGV4ZXMgPSBuZXcgQXJyYXkoNCk7XG4gICAgICAgIHZhciBpbnggPSAwO1xuICAgICAgICB2YXIgam54ID0gMDtcbiAgICAgICAgdmFyIHBhZGRpbmdCeXRlcyA9IDA7XG5cbiAgICAgICAgd2hpbGUgKGlueCA8IGlucHV0Lmxlbmd0aCkge1xuICAgICAgICAgICAgLy8gRmlsbCBieXRlIGJ1ZmZlciBhcnJheVxuICAgICAgICAgICAgYnl0ZWJ1ZmZlciA9IG5ldyBBcnJheSgzKTtcbiAgICAgICAgICAgIGZvciAoam54ID0gMDsgam54IDwgYnl0ZWJ1ZmZlci5sZW5ndGg7IGpueCsrKSB7XG4gICAgICAgICAgICAgICAgaWYgKGlueCA8IGlucHV0Lmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICAvLyB0aHJvdyBhd2F5IGhpZ2gtb3JkZXIgYnl0ZSwgYXMgZG9jdW1lbnRlZCBhdDpcbiAgICAgICAgICAgICAgICAgICAgLy8gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvRW4vVXNpbmdfWE1MSHR0cFJlcXVlc3QjSGFuZGxpbmdfYmluYXJ5X2RhdGFcbiAgICAgICAgICAgICAgICAgICAgYnl0ZWJ1ZmZlcltqbnhdID0gaW5wdXQuY2hhckNvZGVBdChpbngrKykgJiAweGZmO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgYnl0ZWJ1ZmZlcltqbnhdID0gMDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIEdldCBlYWNoIGVuY29kZWQgY2hhcmFjdGVyLCA2IGJpdHMgYXQgYSB0aW1lXG4gICAgICAgICAgICAvLyBpbmRleCAxOiBmaXJzdCA2IGJpdHNcbiAgICAgICAgICAgIGVuY29kZWRDaGFySW5kZXhlc1swXSA9IGJ5dGVidWZmZXJbMF0gPj4gMjtcbiAgICAgICAgICAgIC8vIGluZGV4IDI6IHNlY29uZCA2IGJpdHMgKDIgbGVhc3Qgc2lnbmlmaWNhbnQgYml0cyBmcm9tIGlucHV0IGJ5dGUgMSArIDQgbW9zdCBzaWduaWZpY2FudCBiaXRzIGZyb20gYnl0ZSAyKVxuICAgICAgICAgICAgZW5jb2RlZENoYXJJbmRleGVzWzFdID0gKChieXRlYnVmZmVyWzBdICYgMHgzKSA8PCA0KSB8IChieXRlYnVmZmVyWzFdID4+IDQpO1xuICAgICAgICAgICAgLy8gaW5kZXggMzogdGhpcmQgNiBiaXRzICg0IGxlYXN0IHNpZ25pZmljYW50IGJpdHMgZnJvbSBpbnB1dCBieXRlIDIgKyAyIG1vc3Qgc2lnbmlmaWNhbnQgYml0cyBmcm9tIGJ5dGUgMylcbiAgICAgICAgICAgIGVuY29kZWRDaGFySW5kZXhlc1syXSA9ICgoYnl0ZWJ1ZmZlclsxXSAmIDB4MGYpIDw8IDIpIHwgKGJ5dGVidWZmZXJbMl0gPj4gNik7XG4gICAgICAgICAgICAvLyBpbmRleCAzOiBmb3J0aCA2IGJpdHMgKDYgbGVhc3Qgc2lnbmlmaWNhbnQgYml0cyBmcm9tIGlucHV0IGJ5dGUgMylcbiAgICAgICAgICAgIGVuY29kZWRDaGFySW5kZXhlc1szXSA9IGJ5dGVidWZmZXJbMl0gJiAweDNmO1xuXG4gICAgICAgICAgICAvLyBEZXRlcm1pbmUgd2hldGhlciBwYWRkaW5nIGhhcHBlbmVkLCBhbmQgYWRqdXN0IGFjY29yZGluZ2x5XG4gICAgICAgICAgICBwYWRkaW5nQnl0ZXMgPSBpbnggLSAoaW5wdXQubGVuZ3RoIC0gMSk7XG4gICAgICAgICAgICBzd2l0Y2ggKHBhZGRpbmdCeXRlcykge1xuICAgICAgICAgICAgICAgIGNhc2UgMjpcbiAgICAgICAgICAgICAgICAgICAgLy8gU2V0IGxhc3QgMiBjaGFyYWN0ZXJzIHRvIHBhZGRpbmcgY2hhclxuICAgICAgICAgICAgICAgICAgICBlbmNvZGVkQ2hhckluZGV4ZXNbM10gPSA2NDtcbiAgICAgICAgICAgICAgICAgICAgZW5jb2RlZENoYXJJbmRleGVzWzJdID0gNjQ7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgY2FzZSAxOlxuICAgICAgICAgICAgICAgICAgICAvLyBTZXQgbGFzdCBjaGFyYWN0ZXIgdG8gcGFkZGluZyBjaGFyXG4gICAgICAgICAgICAgICAgICAgIGVuY29kZWRDaGFySW5kZXhlc1szXSA9IDY0O1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrOyAvLyBObyBwYWRkaW5nIC0gcHJvY2VlZFxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBOb3cgd2Ugd2lsbCBncmFiIGVhY2ggYXBwcm9wcmlhdGUgY2hhcmFjdGVyIG91dCBvZiBvdXIga2V5c3RyaW5nXG4gICAgICAgICAgICAvLyBiYXNlZCBvbiBvdXIgaW5kZXggYXJyYXkgYW5kIGFwcGVuZCBpdCB0byB0aGUgb3V0cHV0IHN0cmluZ1xuICAgICAgICAgICAgZm9yIChqbnggPSAwOyBqbnggPCBlbmNvZGVkQ2hhckluZGV4ZXMubGVuZ3RoOyBqbngrKykge1xuICAgICAgICAgICAgICAgIG91dHB1dCArPSB0aGlzLl9rZXlTdHIuY2hhckF0KGVuY29kZWRDaGFySW5kZXhlc1tqbnhdKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gb3V0cHV0O1xuICAgIH1cbn07XG4iLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vTG9hZGVyJyk7XG5cbm1vZHVsZS5leHBvcnRzLlJlc291cmNlID0gcmVxdWlyZSgnLi9SZXNvdXJjZScpO1xuXG5tb2R1bGUuZXhwb3J0cy5taWRkbGV3YXJlID0ge1xuICAgIGNhY2hpbmc6IHtcbiAgICAgICAgbWVtb3J5OiByZXF1aXJlKCcuL21pZGRsZXdhcmVzL2NhY2hpbmcvbWVtb3J5JylcbiAgICB9LFxuICAgIHBhcnNpbmc6IHtcbiAgICAgICAgYmxvYjogcmVxdWlyZSgnLi9taWRkbGV3YXJlcy9wYXJzaW5nL2Jsb2InKVxuICAgIH1cbn07XG4iLCIvLyBhIHNpbXBsZSBpbi1tZW1vcnkgY2FjaGUgZm9yIHJlc291cmNlc1xudmFyIGNhY2hlID0ge307XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBmdW5jdGlvbiAocmVzb3VyY2UsIG5leHQpIHtcbiAgICAgICAgLy8gaWYgY2FjaGVkLCB0aGVuIHNldCBkYXRhIGFuZCBjb21wbGV0ZSB0aGUgcmVzb3VyY2VcbiAgICAgICAgaWYgKGNhY2hlW3Jlc291cmNlLnVybF0pIHtcbiAgICAgICAgICAgIHJlc291cmNlLmRhdGEgPSBjYWNoZVtyZXNvdXJjZS51cmxdO1xuICAgICAgICAgICAgcmVzb3VyY2UuY29tcGxldGUoKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBpZiBub3QgY2FjaGVkLCB3YWl0IGZvciBjb21wbGV0ZSBhbmQgc3RvcmUgaXQgaW4gdGhlIGNhY2hlLlxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJlc291cmNlLm9uY2UoJ2NvbXBsZXRlJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgY2FjaGVbdGhpcy51cmxdID0gdGhpcy5kYXRhO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgXG4gICAgICAgIG5leHQoKTtcbiAgICB9O1xufTtcbiIsInZhciBSZXNvdXJjZSA9IHJlcXVpcmUoJy4uLy4uL1Jlc291cmNlJyksXG4gICAgYjY0ID0gcmVxdWlyZSgnLi4vLi4vYjY0Jyk7XG5cbndpbmRvdy5VUkwgPSB3aW5kb3cuVVJMIHx8IHdpbmRvdy53ZWJraXRVUkw7XG5cbi8vIGEgbWlkZGxld2FyZSBmb3IgdHJhbnNmb3JtaW5nIFhIUiBsb2FkZWQgQmxvYnMgaW50byBtb3JlIHVzZWZ1bCBvYmplY3RzXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBmdW5jdGlvbiAocmVzb3VyY2UsIG5leHQpIHtcbiAgICAgICAgaWYgKCFyZXNvdXJjZS5kYXRhKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV4dCgpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gaWYgdGhpcyB3YXMgYW4gWEhSIGxvYWQgb2YgYSBibG9iXG4gICAgICAgIGlmIChyZXNvdXJjZS54aHIgJiYgcmVzb3VyY2UueGhyVHlwZSA9PT0gUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuQkxPQikge1xuICAgICAgICAgICAgLy8gaWYgdGhlcmUgaXMgbm8gYmxvYiBzdXBwb3J0IHdlIHByb2JhYmx5IGdvdCBhIGJpbmFyeSBzdHJpbmcgYmFja1xuICAgICAgICAgICAgaWYgKCF3aW5kb3cuQmxvYiB8fCB0eXBlb2YgcmVzb3VyY2UuZGF0YSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgICAgICB2YXIgdHlwZSA9IHJlc291cmNlLnhoci5nZXRSZXNwb25zZUhlYWRlcignY29udGVudC10eXBlJyk7XG5cbiAgICAgICAgICAgICAgICAvLyB0aGlzIGlzIGFuIGltYWdlLCBjb252ZXJ0IHRoZSBiaW5hcnkgc3RyaW5nIGludG8gYSBkYXRhIHVybFxuICAgICAgICAgICAgICAgIGlmICh0eXBlICYmIHR5cGUuaW5kZXhPZignaW1hZ2UnKSA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICByZXNvdXJjZS5kYXRhID0gbmV3IEltYWdlKCk7XG4gICAgICAgICAgICAgICAgICAgIHJlc291cmNlLmRhdGEuc3JjID0gJ2RhdGE6JyArIHR5cGUgKyAnO2Jhc2U2NCwnICsgYjY0LmVuY29kZUJpbmFyeShyZXNvdXJjZS54aHIucmVzcG9uc2VUZXh0KTtcblxuICAgICAgICAgICAgICAgICAgICByZXNvdXJjZS5pc0ltYWdlID0gdHJ1ZTtcblxuICAgICAgICAgICAgICAgICAgICAvLyB3YWl0IHVudGlsIHRoZSBpbWFnZSBsb2FkcyBhbmQgdGhlbiBjYWxsYmFja1xuICAgICAgICAgICAgICAgICAgICByZXNvdXJjZS5kYXRhLm9ubG9hZCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc291cmNlLmRhdGEub25sb2FkID0gbnVsbDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgbmV4dCgpO1xuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIGlmIGNvbnRlbnQgdHlwZSBzYXlzIHRoaXMgaXMgYW4gaW1hZ2UsIHRoZW4gd2Ugc2hvdWxkIHRyYW5zZm9ybSB0aGUgYmxvYiBpbnRvIGFuIEltYWdlIG9iamVjdFxuICAgICAgICAgICAgZWxzZSBpZiAocmVzb3VyY2UuZGF0YS50eXBlLmluZGV4T2YoJ2ltYWdlJykgPT09IDApIHtcbiAgICAgICAgICAgICAgICB2YXIgc3JjID0gVVJMLmNyZWF0ZU9iamVjdFVSTChyZXNvdXJjZS5kYXRhKTtcblxuICAgICAgICAgICAgICAgIHJlc291cmNlLmJsb2IgPSByZXNvdXJjZS5kYXRhO1xuICAgICAgICAgICAgICAgIHJlc291cmNlLmRhdGEgPSBuZXcgSW1hZ2UoKTtcbiAgICAgICAgICAgICAgICByZXNvdXJjZS5kYXRhLnNyYyA9IHNyYztcblxuICAgICAgICAgICAgICAgIHJlc291cmNlLmlzSW1hZ2UgPSB0cnVlO1xuXG4gICAgICAgICAgICAgICAgLy8gY2xlYW51cCB0aGUgbm8gbG9uZ2VyIHVzZWQgYmxvYiBhZnRlciB0aGUgaW1hZ2UgbG9hZHNcbiAgICAgICAgICAgICAgICByZXNvdXJjZS5kYXRhLm9ubG9hZCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgVVJMLnJldm9rZU9iamVjdFVSTChzcmMpO1xuICAgICAgICAgICAgICAgICAgICByZXNvdXJjZS5kYXRhLm9ubG9hZCA9IG51bGw7XG5cbiAgICAgICAgICAgICAgICAgICAgbmV4dCgpO1xuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBuZXh0KCk7XG4gICAgICAgIH1cbiAgICB9O1xufTtcbiIsIm1vZHVsZS5leHBvcnRzPXtcbiAgXCJuYW1lXCI6IFwicGl4aS5qc1wiLFxuICBcInZlcnNpb25cIjogXCIzLjAuMTAtZGV2XCIsXG4gIFwiZGVzY3JpcHRpb25cIjogXCJQaXhpLmpzIGlzIGEgZmFzdCBsaWdodHdlaWdodCAyRCBsaWJyYXJ5IHRoYXQgd29ya3MgYWNyb3NzIGFsbCBkZXZpY2VzLlwiLFxuICBcImF1dGhvclwiOiBcIk1hdCBHcm92ZXNcIixcbiAgXCJjb250cmlidXRvcnNcIjogW1xuICAgIFwiQ2hhZCBFbmdsZXIgPGNoYWRAcGFudGhlcmRldi5jb20+XCIsXG4gICAgXCJSaWNoYXJkIERhdmV5IDxyZGF2ZXlAZ21haWwuY29tPlwiXG4gIF0sXG4gIFwibWFpblwiOiBcIi4vc3JjL2luZGV4LmpzXCIsXG4gIFwiaG9tZXBhZ2VcIjogXCJodHRwOi8vZ29vZGJveWRpZ2l0YWwuY29tL1wiLFxuICBcImJ1Z3NcIjogXCJodHRwczovL2dpdGh1Yi5jb20vcGl4aWpzL3BpeGkuanMvaXNzdWVzXCIsXG4gIFwibGljZW5zZVwiOiBcIk1JVFwiLFxuICBcInJlcG9zaXRvcnlcIjoge1xuICAgIFwidHlwZVwiOiBcImdpdFwiLFxuICAgIFwidXJsXCI6IFwiaHR0cHM6Ly9naXRodWIuY29tL3BpeGlqcy9waXhpLmpzLmdpdFwiXG4gIH0sXG4gIFwic2NyaXB0c1wiOiB7XG4gICAgXCJzdGFydFwiOiBcImd1bHAgJiYgZ3VscCB3YXRjaFwiLFxuICAgIFwidGVzdFwiOiBcImd1bHAgJiYgdGVzdGVtIGNpXCIsXG4gICAgXCJidWlsZFwiOiBcImd1bHBcIixcbiAgICBcImRvY3NcIjogXCJqc2RvYyAtYyAuL2d1bHAvdXRpbC9qc2RvYy5jb25mLmpzb24gLVIgUkVBRE1FLm1kXCJcbiAgfSxcbiAgXCJmaWxlc1wiOiBbXG4gICAgXCJiaW4vXCIsXG4gICAgXCJzcmMvXCIsXG4gICAgXCJDT05UUklCVVRJTkcubWRcIixcbiAgICBcIkxJQ0VOU0VcIixcbiAgICBcInBhY2thZ2UuanNvblwiLFxuICAgIFwiUkVBRE1FLm1kXCJcbiAgXSxcbiAgXCJkZXBlbmRlbmNpZXNcIjoge1xuICAgIFwiYXN5bmNcIjogXCJeMS41LjBcIixcbiAgICBcImJyZnNcIjogXCJeMS40LjFcIixcbiAgICBcImVhcmN1dFwiOiBcIl4yLjAuN1wiLFxuICAgIFwiZXZlbnRlbWl0dGVyM1wiOiBcIl4xLjEuMVwiLFxuICAgIFwib2JqZWN0LWFzc2lnblwiOiBcIl40LjAuMVwiLFxuICAgIFwicGl4aS1nbC1jb3JlXCI6IFwiZ2l0K2h0dHBzOi8vZ2l0aHViLmNvbS9Hb29kQm95RGlnaXRhbC9waXhpLWdsLWNvcmUuZ2l0XCIsXG4gICAgXCJyZXNvdXJjZS1sb2FkZXJcIjogXCJeMS42LjRcIlxuICB9LFxuICBcImRldkRlcGVuZGVuY2llc1wiOiB7XG4gICAgXCJicm93c2VyaWZ5XCI6IFwiXjExLjEuMFwiLFxuICAgIFwiY2hhaVwiOiBcIl4zLjIuMFwiLFxuICAgIFwiZGVsXCI6IFwiXjIuMC4yXCIsXG4gICAgXCJndWxwXCI6IFwiXjMuOS4wXCIsXG4gICAgXCJndWxwLWNhY2hlZFwiOiBcIl4xLjEuMFwiLFxuICAgIFwiZ3VscC1jb25jYXRcIjogXCJeMi42LjBcIixcbiAgICBcImd1bHAtZGVidWdcIjogXCJeMi4xLjBcIixcbiAgICBcImd1bHAtaGVhZGVyXCI6IFwiXjEuNy4xXCIsXG4gICAgXCJndWxwLWpzaGludFwiOiBcIl4xLjExLjJcIixcbiAgICBcImd1bHAtbWlycm9yXCI6IFwiXjAuNC4wXCIsXG4gICAgXCJndWxwLXBsdW1iZXJcIjogXCJeMS4wLjFcIixcbiAgICBcImd1bHAtcmVuYW1lXCI6IFwiXjEuMi4yXCIsXG4gICAgXCJndWxwLXNvdXJjZW1hcHNcIjogXCJeMS41LjJcIixcbiAgICBcImd1bHAtdWdsaWZ5XCI6IFwiXjEuNC4xXCIsXG4gICAgXCJndWxwLXV0aWxcIjogXCJeMy4wLjZcIixcbiAgICBcImphZ3VhcmpzLWpzZG9jXCI6IFwiZ2l0K2h0dHBzOi8vZ2l0aHViLmNvbS9kYXZpZHNoaW1qcy9qYWd1YXJqcy1qc2RvYy5naXRcIixcbiAgICBcImpzZG9jXCI6IFwiXjMuMy4yXCIsXG4gICAgXCJqc2hpbnQtc3VtbWFyeVwiOiBcIl4wLjQuMFwiLFxuICAgIFwibWluaW1pc3RcIjogXCJeMS4yLjBcIixcbiAgICBcIm1vY2hhXCI6IFwiXjIuMy4yXCIsXG4gICAgXCJyZXF1aXJlLWRpclwiOiBcIl4wLjMuMFwiLFxuICAgIFwicnVuLXNlcXVlbmNlXCI6IFwiXjEuMS4yXCIsXG4gICAgXCJ0ZXN0ZW1cIjogXCJeMC45LjRcIixcbiAgICBcInZpbnlsLWJ1ZmZlclwiOiBcIl4xLjAuMFwiLFxuICAgIFwidmlueWwtc291cmNlLXN0cmVhbVwiOiBcIl4xLjEuMFwiLFxuICAgIFwid2F0Y2hpZnlcIjogXCJeMy40LjBcIlxuICB9LFxuICBcImJyb3dzZXJpZnlcIjoge1xuICAgIFwidHJhbnNmb3JtXCI6IFtcbiAgICAgIFwiYnJmc1wiXG4gICAgXVxuICB9XG59XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uL2NvcmUnKTtcblxuLy8gYWRkIHNvbWUgZXh0cmEgdmFyaWFibGVzIHRvIHRoZSBjb250YWluZXIuLlxuT2JqZWN0LmFzc2lnbihcbiAgICBjb3JlLkRpc3BsYXlPYmplY3QucHJvdG90eXBlLFxuICAgIHJlcXVpcmUoJy4vYWNjZXNzaWJsZVRhcmdldCcpXG4pO1xuXG5cbi8qKlxuICogVGhlIEFjY2Vzc2liaWxpdHkgbWFuYWdlciByZWFjcmVhdGVzIHRoZSBhYmlsaXR5IHRvIHRhYiBhbmQgYW5kIGhhdmUgY29udGVudCByZWFkIGJ5IHNjcmVlbiByZWFkZXJzLiBUaGlzIGlzIHZlcnkgaW1wb3J0YW50IGFzIGl0IGNhbiBwb3NzaWJseSBoZWxwIHBlb3BsZSB3aXRoIGRpc2FiaWxpdGllcyBhY2Nlc3MgcGl4aSBjb250ZW50LlxuICogTXVjaCBsaWtlIGludGVyYWN0aW9uIGFueSBEaXNwbGF5T2JqZWN0IGNhbiBiZSBtYWRlIGFjY2Vzc2libGUuIFRoaXMgbWFuYWdlciB3aWxsIG1hcCB0aGUgZXZlbnRzIGFzIGlmIHRoZSBtb3VzZSB3YXMgYmVpbmcgdXNlZCwgbWluaW1pemluZyB0aGUgZWZmZXJvdCByZXF1aXJlZCB0byBpbXBsZW1lbnQuXG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLkNhbnZhc1JlbmRlcmVyfFBJWEkuV2ViR0xSZW5kZXJlcn0gQSByZWZlcmVuY2UgdG8gdGhlIGN1cnJlbnQgcmVuZGVyZXJcbiAqL1xuZnVuY3Rpb24gQWNjZXNzaWJpbGl0eU1hbmFnZXIocmVuZGVyZXIpXG57XG5cdC8vIGZpcnN0IHdlIGNyZWF0ZSBhIGRpdiB0aGF0IHdpbGwgc2l0IG92ZXIgdGhlIHBpeGkgZWxlbWVudC4gVGhpcyBpcyB3aGVyZSB0aGUgZGl2IG92ZXJsYXlzIHdpbGwgZ28uXG4gICAgdmFyIGRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgIFxuICAgIGRpdi5zdHlsZS53aWR0aCA9IDEwMCArICdweCc7XG4gICAgZGl2LnN0eWxlLmhlaWdodCA9IDEwMCArICdweCc7XG4gICAgZGl2LnN0eWxlLnBvc2l0aW9uID0gJ2Fic29sdXRlJztcbiAgICBkaXYuc3R5bGUudG9wID0gMDtcbiAgICBkaXYuc3R5bGUubGVmdCA9IDA7XG4gICAvL1xuICAgIGRpdi5zdHlsZS56SW5kZXggPSAyO1xuICAgXHRcbiAgIFx0LyoqXG4gICBcdCAqIFRoaXMgaXMgdGhlIGRvbSBlbGVtZW50IHRoYXQgd2lsbCBzaXQgb3ZlciB0aGUgcGl4aSBlbGVtZW50LiBUaGlzIGlzIHdoZXJlIHRoZSBkaXYgb3ZlcmxheXMgd2lsbCBnby5cbiAgIFx0ICogXG4gICBcdCAqIEB0eXBlIHtIVE1MRWxlbWVudH1cbiAgIFx0ICogQHByaXZhdGVcbiAgIFx0ICovXG4gICBcdHRoaXMuZGl2ID0gZGl2O1xuXG4gICBcdC8qKlxuICAgXHQgKiBBIHNpbXBsZSBwb29sIGZvciBzdG9yaW5nIGRpdnMuXG4gICBcdCAqIFxuICAgXHQgKiBAdHlwZSB7QXJyYXl9XG4gICBcdCAqIEBwcml2YXRlXG4gICBcdCAqL1xuIFx0dGhpcy5wb29sID0gW107XG5cbiBcdC8qKlxuIFx0ICogVGhpcyBpcyBhIHRpY2sgdXNlZCB0byBjaGVjayBpZiBhbiBvYmplY3QgaXMgbm8gbG9uZ2VyIGJlaW5nIHJlbmRlcmVkLlxuIFx0ICogXG4gXHQgKiBAdHlwZSB7TnVtYmVyfVxuIFx0ICogQHByaXZhdGVcbiBcdCAqL1xuICAgXHR0aGlzLnJlbmRlcklkID0gMDtcblxuICAgXHQvKipcbiAgIFx0ICogU2V0dGluZyB0aGlzIHRvIHRydWUgd2lsbCB2aXN1YWxseSBzaG93IHRoZSBkaXZzXG4gICBcdCAqIFxuICAgXHQgKiBAdHlwZSB7Qm9vbGVhbn1cbiAgIFx0ICovXG4gICBcdHRoaXMuZGVidWcgPSBmYWxzZTtcblxuICBcdC8qKlxuICAgICAqIFRoZSByZW5kZXJlciB0aGlzIGFjY2Vzc2liaWxpdHkgbWFuYWdlciB3b3JrcyBmb3IuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlN5c3RlbVJlbmRlcmVyfVxuICAgICAqL1xuICAgXHR0aGlzLnJlbmRlcmVyID0gcmVuZGVyZXI7XG5cbiAgIFx0LyoqXG4gICAgICogVGhlIGFycmF5IG9mIGN1cnJlbnRseSBhY3RpdmUgYWNjZXNzaWJsZSBpdGVtcy5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge0FycmF5fVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICBcdHRoaXMuY2hpbGRyZW4gPSBbXTtcbiAgIFx0XG4gICBcdC8qKlxuICAgICAqIHByZSBiaW5kIHRoZSBmdW5jdGlvbnMuLlxuICAgICAqL1xuICAgXHR0aGlzLl9vbktleURvd24gPSB0aGlzLl9vbktleURvd24uYmluZCh0aGlzKTtcbiAgIFx0dGhpcy5fb25Nb3VzZU1vdmUgPSB0aGlzLl9vbk1vdXNlTW92ZS5iaW5kKHRoaXMpO1xuICAgXHRcbiAgIFx0LyoqXG4gICAgICogc3RvcmVzIHRoZSBzdGF0ZSBvZiB0aGUgbWFuYWdlci4gSWYgdGhlcmUgYXJlIG5vIGFjY2Vzc2libGUgb2JqZWN0cyBvciB0aGUgbW91c2UgaXMgbW92aW5nIHRoZSB3aWxsIGJlIGZhbHNlLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7QXJyYXl9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgIFx0dGhpcy5pc0FjdGl2ZSA9IGZhbHNlO1xuXG5cbiAgIFx0Ly8gbGV0IGxpc3RlbiBmb3IgdGFiLi4gb25jZSBwcmVzc2VkIHdlIGNhbiBmaXJlIHVwIGFuZCBzaG93IHRoZSBhY2Nlc3NpYmlsaXR5IGxheWVyXG4gICBcdHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdrZXlkb3duJywgdGhpcy5fb25LZXlEb3duLCBmYWxzZSk7XG59XG5cblxuQWNjZXNzaWJpbGl0eU1hbmFnZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gQWNjZXNzaWJpbGl0eU1hbmFnZXI7XG5tb2R1bGUuZXhwb3J0cyA9IEFjY2Vzc2liaWxpdHlNYW5hZ2VyO1xuXG4vKipcbiAqIEFjdGl2YXRpbmcgd2lsbCBjYXVzZSB0aGUgQWNjZXNzaWJpbGl0eSBsYXllciB0byBiZSBzaG93bi4gVGhpcyBpcyBjYWxsZWQgd2hlbiBhIHVzZXIgcHJlc2VzIHRoZSB0YWIga2V5XG4gKiBAcHJpdmF0ZVxuICovXG5BY2Nlc3NpYmlsaXR5TWFuYWdlci5wcm90b3R5cGUuYWN0aXZhdGUgPSBmdW5jdGlvbigpXG57XG5cdGlmKHRoaXMuaXNBY3RpdmUpXG5cdHtcblx0XHRyZXR1cm47XG5cdH1cblxuXHR0aGlzLmlzQWN0aXZlID0gdHJ1ZTtcblxuXHR3aW5kb3cuZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignbW91c2Vtb3ZlJywgdGhpcy5fb25Nb3VzZU1vdmUsIHRydWUpO1xuXHR3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsIHRoaXMuX29uS2V5RG93biwgZmFsc2UpO1xuXG5cdHRoaXMucmVuZGVyZXIub24oJ3Bvc3RyZW5kZXInLCB0aGlzLnVwZGF0ZSwgdGhpcyk7XG5cblx0dGhpcy5yZW5kZXJlci52aWV3LnBhcmVudE5vZGUuYXBwZW5kQ2hpbGQodGhpcy5kaXYpO1x0XG59O1xuXG4vKipcbiAqIERlYWN0aXZhdGluZyB3aWxsIGNhdXNlIHRoZSBBY2Nlc3NpYmlsaXR5IGxheWVyIHRvIGJlIGhpZGRlbi4gVGhpcyBpcyBjYWxsZWQgd2hlbiBhIHVzZXIgbW92ZXMgdGhlIG1vdXNlXG4gKiBAcHJpdmF0ZVxuICovXG5BY2Nlc3NpYmlsaXR5TWFuYWdlci5wcm90b3R5cGUuZGVhY3RpdmF0ZSA9IGZ1bmN0aW9uKClcbntcblx0aWYoIXRoaXMuaXNBY3RpdmUpXG5cdHtcblx0XHRyZXR1cm47XG5cdH1cblxuXHR0aGlzLmlzQWN0aXZlID0gZmFsc2U7XG5cblx0d2luZG93LmRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21vdXNlbW92ZScsIHRoaXMuX29uTW91c2VNb3ZlKTtcblx0d2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLCB0aGlzLl9vbktleURvd24sIGZhbHNlKTtcblxuXHR0aGlzLnJlbmRlcmVyLm9mZigncG9zdHJlbmRlcicsIHRoaXMudXBkYXRlKTtcblxuXHR0aGlzLmRpdi5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHRoaXMuZGl2KTtcblxufTtcblxuLyoqXG4gKiBUaGlzIHJlY3Vyc2l2ZSBmdW5jdGlvbiB3aWxsIHJ1biB0aHJvdWdodCBoZSBzY2VuZSBncmFwaCBhbmQgYWRkIGFueSBuZXcgYWNjZXNzaWJsZSBvYmplY3RzIHRvIHRoZSBET00gbGF5ZXIuXG4gKiBAcGFyYW0gZWxlbWVudCB7UElYSS5Db250YWluZXJ8UElYSS5TcHJpdGV8UElYSS5leHRyYXMuVGlsaW5nU3ByaXRlfSB0aGUgRGlzcGxheU9iamVjdCB0byBjaGVjay5cbiAqIEBwcml2YXRlXG4gKi9cbkFjY2Vzc2liaWxpdHlNYW5hZ2VyLnByb3RvdHlwZS51cGRhdGVBY2Nlc3NpYmxlT2JqZWN0cyA9IGZ1bmN0aW9uKGRpc3BsYXlPYmplY3QpXG57XG5cdGlmKCFkaXNwbGF5T2JqZWN0LnZpc2libGUpXG5cdHtcblx0XHRyZXR1cm47XG5cdH1cblxuXHRpZihkaXNwbGF5T2JqZWN0LmFjY2Vzc2libGUgJiYgZGlzcGxheU9iamVjdC5pbnRlcmFjdGl2ZSlcblx0e1xuXHRcdGlmKCFkaXNwbGF5T2JqZWN0Ll9hY2Nlc3NpYmxlQWN0aXZlKVxuXHRcdHtcblx0XHRcdHRoaXMuYWRkQ2hpbGQoZGlzcGxheU9iamVjdCk7XG5cdFx0fVxuXHQgICBcdFxuXHQgICBcdGRpc3BsYXlPYmplY3QucmVuZGVySWQgPSB0aGlzLnJlbmRlcklkO1xuXHR9XG5cblx0dmFyIGNoaWxkcmVuID0gZGlzcGxheU9iamVjdC5jaGlsZHJlbjtcblxuXHRmb3IgKHZhciBpID0gY2hpbGRyZW4ubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcblx0XHRcblx0XHR0aGlzLnVwZGF0ZUFjY2Vzc2libGVPYmplY3RzKGNoaWxkcmVuW2ldKTtcblx0fVxufTtcblxuXG4vKipcbiAqIEJlZm9yZSBlYWNoIHJlbmRlciB0aGlzIGZ1bmN0aW9uIHdpbGwgZW5zdXJlIHRoYXQgYWxsIGRpdnMgYXJlIG1hcHBlZCBjb3JyZWN0bHkgdG8gdGhlaXIgRGlzcGxheU9iamVjdHNcbiAqIEBwcml2YXRlXG4gKi9cbkFjY2Vzc2liaWxpdHlNYW5hZ2VyLnByb3RvdHlwZS51cGRhdGUgPSBmdW5jdGlvbigpXG57XG5cblx0Ly8gdXBkYXRlIGNoaWxkcmVuLi4uXG5cdHRoaXMudXBkYXRlQWNjZXNzaWJsZU9iamVjdHModGhpcy5yZW5kZXJlci5fbGFzdE9iamVjdFJlbmRlcmVkKTtcblxuXHR2YXIgcmVjdCA9IHRoaXMucmVuZGVyZXIudmlldy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcblx0dmFyIHN4ID0gcmVjdC53aWR0aCAgLyB0aGlzLnJlbmRlcmVyLndpZHRoO1xuXHR2YXIgc3kgPSByZWN0LmhlaWdodCAvIHRoaXMucmVuZGVyZXIuaGVpZ2h0O1xuXG5cdHZhciBkaXYgPSB0aGlzLmRpdjtcblxuXHRkaXYuc3R5bGUubGVmdCA9IHJlY3QubGVmdCArICdweCc7XG5cdGRpdi5zdHlsZS50b3AgPSByZWN0LnRvcCArICdweCc7XG5cdGRpdi5zdHlsZS53aWR0aCA9IHRoaXMucmVuZGVyZXIud2lkdGggKyAncHgnO1xuXHRkaXYuc3R5bGUuaGVpZ2h0ID0gdGhpcy5yZW5kZXJlci5oZWlnaHQgKyAncHgnO1xuXG5cdGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5jaGlsZHJlbi5sZW5ndGg7IGkrKylcblx0e1xuXG5cdFx0dmFyIGNoaWxkID0gdGhpcy5jaGlsZHJlbltpXTtcblxuXHRcdGlmKGNoaWxkLnJlbmRlcklkICE9PSB0aGlzLnJlbmRlcklkKVxuXHRcdHtcblx0XHRcdGNoaWxkLl9hY2Nlc3NpYmxlQWN0aXZlID0gZmFsc2U7XG5cbiAgICAgICAgICAgIGNvcmUudXRpbHMucmVtb3ZlSXRlbXModGhpcy5jaGlsZHJlbiwgaSwgMSk7XG5cdFx0XHR0aGlzLmRpdi5yZW1vdmVDaGlsZCggY2hpbGQuX2FjY2Vzc2libGVEaXYgKTtcblx0XHRcdHRoaXMucG9vbC5wdXNoKGNoaWxkLl9hY2Nlc3NpYmxlRGl2KTtcblx0XHRcdGNoaWxkLl9hY2Nlc3NpYmxlRGl2ID0gbnVsbDtcblxuXHRcdFx0aS0tO1xuXG5cdFx0XHRpZih0aGlzLmNoaWxkcmVuLmxlbmd0aCA9PT0gMClcblx0XHRcdHtcblx0XHRcdFx0dGhpcy5kZWFjdGl2YXRlKCk7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdGVsc2Vcblx0XHR7XG5cdFx0XHQvLyBtYXAgZGl2IHRvIGRpc3BsYXkuLlxuXHRcdFx0ZGl2ID0gY2hpbGQuX2FjY2Vzc2libGVEaXY7XG5cdFx0XHR2YXIgaGl0QXJlYSA9IGNoaWxkLmhpdEFyZWE7XG5cdFx0XHR2YXIgd3QgPSBjaGlsZC53b3JsZFRyYW5zZm9ybTtcblxuXHRcdFx0aWYoY2hpbGQuaGl0QXJlYSlcblx0XHRcdHtcblx0XHRcdFx0ZGl2LnN0eWxlLmxlZnQgPSAoKHd0LnR4ICsgKGhpdEFyZWEueCAqIHd0LmEpKSAqIHN4KSArICdweCc7XG5cdFx0XHRcdGRpdi5zdHlsZS50b3AgPSAgKCh3dC50eSArIChoaXRBcmVhLnkgKiB3dC5kKSkgKiBzeSkgKyAgJ3B4JztcblxuXHRcdFx0XHRkaXYuc3R5bGUud2lkdGggPSAoaGl0QXJlYS53aWR0aCAqIHd0LmEgKiBzeCkgKyAncHgnO1xuXHRcdFx0XHRkaXYuc3R5bGUuaGVpZ2h0ID0gKGhpdEFyZWEuaGVpZ2h0ICogd3QuZCAqIHN5KSArICdweCc7XG5cdFx0XHRcblx0XHRcdH1cblx0XHRcdGVsc2Vcblx0XHRcdHtcblx0XHRcdFx0aGl0QXJlYSA9IGNoaWxkLmdldEJvdW5kcygpO1xuXG5cdFx0XHRcdHRoaXMuY2FwSGl0QXJlYShoaXRBcmVhKTtcblxuXHRcdFx0XHRkaXYuc3R5bGUubGVmdCA9IChoaXRBcmVhLnggKiBzeCkgKyAncHgnO1xuXHRcdFx0XHRkaXYuc3R5bGUudG9wID0gIChoaXRBcmVhLnkgKiBzeSkgKyAgJ3B4JztcblxuXHRcdFx0XHRkaXYuc3R5bGUud2lkdGggPSAoaGl0QXJlYS53aWR0aCAqIHN4KSArICdweCc7XG5cdFx0XHRcdGRpdi5zdHlsZS5oZWlnaHQgPSAoaGl0QXJlYS5oZWlnaHQgKiBzeSkgKyAncHgnO1xuXHRcdFx0fVx0XHRcblx0XHR9XG5cdH1cblxuXHQvLyBpbmNyZW1lbnQgdGhlIHJlbmRlciBpZC4uXG5cdHRoaXMucmVuZGVySWQrKztcbn07XG5cbkFjY2Vzc2liaWxpdHlNYW5hZ2VyLnByb3RvdHlwZS5jYXBIaXRBcmVhID0gZnVuY3Rpb24gKGhpdEFyZWEpXG57XG4gICAgaWYgKGhpdEFyZWEueCA8IDApXG4gICAge1xuICAgICAgICBoaXRBcmVhLndpZHRoICs9IGhpdEFyZWEueDtcbiAgICAgICAgaGl0QXJlYS54ID0gMDtcbiAgICB9XG5cbiAgICBpZiAoaGl0QXJlYS55IDwgMClcbiAgICB7XG4gICAgICAgIGhpdEFyZWEuaGVpZ2h0ICs9IGhpdEFyZWEueTtcbiAgICAgICAgaGl0QXJlYS55ID0gMDtcbiAgICB9XG5cbiAgICBpZiAoIGhpdEFyZWEueCArIGhpdEFyZWEud2lkdGggPiB0aGlzLnJlbmRlcmVyLndpZHRoIClcbiAgICB7XG4gICAgICAgIGhpdEFyZWEud2lkdGggPSB0aGlzLnJlbmRlcmVyLndpZHRoIC0gaGl0QXJlYS54O1xuICAgIH1cblxuICAgIGlmICggaGl0QXJlYS55ICsgaGl0QXJlYS5oZWlnaHQgPiB0aGlzLnJlbmRlcmVyLmhlaWdodCApXG4gICAge1xuICAgICAgICBoaXRBcmVhLmhlaWdodCA9IHRoaXMucmVuZGVyZXIuaGVpZ2h0IC0gaGl0QXJlYS55O1xuICAgIH1cbn07XG5cblxuLyoqXG4gKiBBZGRzIGEgRGlzcGxheU9iamVjdCB0byB0aGUgYWNjZXNzaWJpbGl0eSBtYW5hZ2VyXG4gKiBAcHJpdmF0ZVxuICovXG5BY2Nlc3NpYmlsaXR5TWFuYWdlci5wcm90b3R5cGUuYWRkQ2hpbGQgPSBmdW5jdGlvbihkaXNwbGF5T2JqZWN0KVxue1xuLy9cdHRoaXMuYWN0aXZhdGUoKTtcblx0XG5cdHZhciBkaXYgPSB0aGlzLnBvb2wucG9wKCk7XG5cblx0aWYoIWRpdilcblx0e1xuXHRcdGRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2J1dHRvbicpOyBcblxuXHQgICAgZGl2LnN0eWxlLndpZHRoID0gMTAwICsgJ3B4Jztcblx0ICAgIGRpdi5zdHlsZS5oZWlnaHQgPSAxMDAgKyAncHgnO1xuXHQgICAgZGl2LnN0eWxlLmJhY2tncm91bmRDb2xvciA9IHRoaXMuZGVidWcgPyAncmdiYSgyNTUsMCwwLDAuNSknIDogJ3RyYW5zcGFyZW50Jztcblx0ICAgIGRpdi5zdHlsZS5wb3NpdGlvbiA9ICdhYnNvbHV0ZSc7XG5cdCAgICBkaXYuc3R5bGUuekluZGV4ID0gMjtcblx0ICAgIGRpdi5zdHlsZS5ib3JkZXJTdHlsZSA9ICdub25lJztcblxuXHQgICAgXG5cdCAgICBkaXYuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCB0aGlzLl9vbkNsaWNrLmJpbmQodGhpcykpO1xuXHQgICAgZGl2LmFkZEV2ZW50TGlzdGVuZXIoJ2ZvY3VzJywgdGhpcy5fb25Gb2N1cy5iaW5kKHRoaXMpKTtcblx0ICAgIGRpdi5hZGRFdmVudExpc3RlbmVyKCdmb2N1c291dCcsIHRoaXMuX29uRm9jdXNPdXQuYmluZCh0aGlzKSk7XG5cdH1cblx0ICAgXHRcblxuXG5cblx0ZGl2LnRpdGxlID0gZGlzcGxheU9iamVjdC5hY2Nlc3NpYmxlVGl0bGUgfHwgJ2Rpc3BsYXlPYmplY3QgJyArIHRoaXMudGFiSW5kZXg7XG5cblx0Ly9cblx0XG5cdGRpc3BsYXlPYmplY3QuX2FjY2Vzc2libGVBY3RpdmUgPSB0cnVlO1xuXHRkaXNwbGF5T2JqZWN0Ll9hY2Nlc3NpYmxlRGl2ID0gZGl2O1xuXHRkaXYuZGlzcGxheU9iamVjdCA9IGRpc3BsYXlPYmplY3Q7XG5cblxuXHR0aGlzLmNoaWxkcmVuLnB1c2goZGlzcGxheU9iamVjdCk7XG5cdHRoaXMuZGl2LmFwcGVuZENoaWxkKCBkaXNwbGF5T2JqZWN0Ll9hY2Nlc3NpYmxlRGl2ICk7XG5cdGRpc3BsYXlPYmplY3QuX2FjY2Vzc2libGVEaXYudGFiSW5kZXggPSBkaXNwbGF5T2JqZWN0LnRhYkluZGV4O1xufTtcblxuXG4vKipcbiAqIE1hcHMgdGhlIGRpdiBidXR0b24gcHJlc3MgdG8gcGl4aSdzIEludGVyYWN0aW9uTWFuYWdlciAoY2xpY2spXG4gKiBAcHJpdmF0ZVxuICovXG5BY2Nlc3NpYmlsaXR5TWFuYWdlci5wcm90b3R5cGUuX29uQ2xpY2sgPSBmdW5jdGlvbihlKVxue1xuXHR2YXIgaW50ZXJhY3Rpb25NYW5hZ2VyID0gdGhpcy5yZW5kZXJlci5wbHVnaW5zLmludGVyYWN0aW9uO1xuXHRpbnRlcmFjdGlvbk1hbmFnZXIuZGlzcGF0Y2hFdmVudChlLnRhcmdldC5kaXNwbGF5T2JqZWN0LCAnY2xpY2snLCBpbnRlcmFjdGlvbk1hbmFnZXIuZXZlbnREYXRhKTtcbn07XG5cbi8qKlxuICogTWFwcyB0aGUgZGl2IGZvY3VzIGV2ZW50cyB0byBwaXhpcyBJbnRlcmFjdGlvbk1hbmFnZXIgKG1vdXNlb3ZlcilcbiAqIEBwcml2YXRlXG4gKi9cbkFjY2Vzc2liaWxpdHlNYW5hZ2VyLnByb3RvdHlwZS5fb25Gb2N1cyA9IGZ1bmN0aW9uKGUpXG57XG5cdHZhciBpbnRlcmFjdGlvbk1hbmFnZXIgPSB0aGlzLnJlbmRlcmVyLnBsdWdpbnMuaW50ZXJhY3Rpb247XG5cdGludGVyYWN0aW9uTWFuYWdlci5kaXNwYXRjaEV2ZW50KGUudGFyZ2V0LmRpc3BsYXlPYmplY3QsICdtb3VzZW92ZXInLCBpbnRlcmFjdGlvbk1hbmFnZXIuZXZlbnREYXRhKTtcbn07XG5cbi8qKlxuICogTWFwcyB0aGUgZGl2IGZvY3VzIGV2ZW50cyB0byBwaXhpcyBJbnRlcmFjdGlvbk1hbmFnZXIgKG1vdXNlb3V0KVxuICogQHByaXZhdGVcbiAqL1xuQWNjZXNzaWJpbGl0eU1hbmFnZXIucHJvdG90eXBlLl9vbkZvY3VzT3V0ID0gZnVuY3Rpb24oZSlcbntcblx0dmFyIGludGVyYWN0aW9uTWFuYWdlciA9IHRoaXMucmVuZGVyZXIucGx1Z2lucy5pbnRlcmFjdGlvbjtcblx0aW50ZXJhY3Rpb25NYW5hZ2VyLmRpc3BhdGNoRXZlbnQoZS50YXJnZXQuZGlzcGxheU9iamVjdCwgJ21vdXNlb3V0JywgaW50ZXJhY3Rpb25NYW5hZ2VyLmV2ZW50RGF0YSk7XG59O1xuXG4vKipcbiAqIElzIGNhbGxlZCB3aGVuIGEga2V5IGlzIHByZXNzZWRcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5BY2Nlc3NpYmlsaXR5TWFuYWdlci5wcm90b3R5cGUuX29uS2V5RG93biA9IGZ1bmN0aW9uKGUpXG57XG5cdGlmKGUua2V5Q29kZSAhPT0gOSlcblx0e1xuXHRcdHJldHVybjtcblx0fVxuXG5cdHRoaXMuYWN0aXZhdGUoKTtcbn07XG5cbi8qKlxuICogSXMgY2FsbGVkIHdoZW4gdGhlIG1vdXNlIG1vdmVzIGFjcm9zcyB0aGUgcmVuZGVyZXIgZWxlbWVudFxuICpcbiAqIEBwcml2YXRlXG4gKi9cbkFjY2Vzc2liaWxpdHlNYW5hZ2VyLnByb3RvdHlwZS5fb25Nb3VzZU1vdmUgPSBmdW5jdGlvbigpXG57XG5cdHRoaXMuZGVhY3RpdmF0ZSgpO1xufTtcblxuXG4vKipcbiAqIERlc3Ryb3lzIHRoZSBhY2Nlc3NpYmlsaXR5IG1hbmFnZXJcbiAqXG4gKi9cbkFjY2Vzc2liaWxpdHlNYW5hZ2VyLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKCkgXG57XG5cdHRoaXMuZGl2ID0gbnVsbDtcblxuXHRmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuY2hpbGRyZW4ubGVuZ3RoOyBpKyspXG5cdHtcblx0XHR0aGlzLmNoaWxkcmVuW2ldLmRpdiA9IG51bGw7XG5cdH1cblxuXHRcblx0d2luZG93LmRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21vdXNlbW92ZScsIHRoaXMuX29uTW91c2VNb3ZlKTtcblx0d2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLCB0aGlzLl9vbktleURvd24pO1xuXHRcdFxuXHR0aGlzLnBvb2wgPSBudWxsO1xuXHR0aGlzLmNoaWxkcmVuID0gbnVsbDtcblx0dGhpcy5yZW5kZXJlciA9IG51bGw7XG5cbn07XG5cbmNvcmUuV2ViR0xSZW5kZXJlci5yZWdpc3RlclBsdWdpbignYWNjZXNzaWJpbGl0eScsIEFjY2Vzc2liaWxpdHlNYW5hZ2VyKTtcbmNvcmUuQ2FudmFzUmVuZGVyZXIucmVnaXN0ZXJQbHVnaW4oJ2FjY2Vzc2liaWxpdHknLCBBY2Nlc3NpYmlsaXR5TWFuYWdlcik7XG5cbiIsIi8qKlxuICogRGVmYXVsdCBwcm9wZXJ0eSB2YWx1ZXMgb2YgYWNjZXNzaWJsZSBvYmplY3RzXG4gKiB1c2VkIGJ5IHtAbGluayBQSVhJLmFjY2Vzc2liaWxpdHkuQWNjZXNzaWJpbGl0eU1hbmFnZXJ9LlxuICpcbiAqIEBtaXhpblxuICogQG1lbWJlcm9mIFBJWElcbiAqIEBleGFtcGxlXG4gKiAgICAgIGZ1bmN0aW9uIE15T2JqZWN0KCkge31cbiAqXG4gKiAgICAgIE9iamVjdC5hc3NpZ24oXG4gKiAgICAgICAgICBNeU9iamVjdC5wcm90b3R5cGUsXG4gKiAgICAgICAgICBQSVhJLmFjY2Vzc2liaWxpdHkuYWNjZXNzaWJsZVRhcmdldFxuICogICAgICApO1xuICovXG52YXIgYWNjZXNzaWJsZVRhcmdldCA9IHtcbiAgICBcbiAgICAvKipcbiAgICAgKiBAdG9kbyBOZWVkcyBkb2NzLlxuICAgICAqL1xuICAgIGFjY2Vzc2libGU6ZmFsc2UsXG5cbiAgICAvKipcbiAgICAgKiBAdG9kbyBOZWVkcyBkb2NzLlxuICAgICAqL1xuICAgIGFjY2Vzc2libGVUaXRsZTpudWxsLFxuXG4gICAgLyoqXG4gICAgICogQHRvZG8gTmVlZHMgZG9jcy5cbiAgICAgKi9cbiAgICB0YWJJbmRleDowLFxuXG4gICAgLyoqXG4gICAgICogQHRvZG8gTmVlZHMgZG9jcy5cbiAgICAgKi9cbiAgICBfYWNjZXNzaWJsZUFjdGl2ZTpmYWxzZSxcblxuICAgIC8qKlxuICAgICAqIEB0b2RvIE5lZWRzIGRvY3MuXG4gICAgICovXG4gICAgX2FjY2Vzc2libGVEaXY6ZmFsc2VcblxufTtcblxubW9kdWxlLmV4cG9ydHMgPSBhY2Nlc3NpYmxlVGFyZ2V0O1xuIiwiLyoqXG4gKiBAZmlsZSAgICAgICAgTWFpbiBleHBvcnQgb2YgdGhlIFBJWEkgYWNjZXNzaWJpbGl0eSBsaWJyYXJ5XG4gKiBAYXV0aG9yICAgICAgTWF0IEdyb3ZlcyA8bWF0QGdvb2Rib3lkaWdpdGFsLmNvbT5cbiAqIEBjb3B5cmlnaHQgICAyMDEzLTIwMTUgR29vZEJveURpZ2l0YWxcbiAqIEBsaWNlbnNlICAgICB7QGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL3BpeGlqcy9waXhpLmpzL2Jsb2IvbWFzdGVyL0xJQ0VOU0V8TUlUIExpY2Vuc2V9XG4gKi9cblxuLyoqXG4gKiBAbmFtZXNwYWNlIFBJWEkuaW50ZXJhY3Rpb25cbiAqL1xubW9kdWxlLmV4cG9ydHMgPSB7XG4gICAgYWNjZXNzaWJsZVRhcmdldDogICAgIHJlcXVpcmUoJy4vYWNjZXNzaWJsZVRhcmdldCcpLFxuICAgIEFjY2Vzc2liaWxpdHlNYW5hZ2VyOiByZXF1aXJlKCcuL0FjY2Vzc2liaWxpdHlNYW5hZ2VyJylcbn07XG4iLCIvKipcbiAqIENvbnN0YW50IHZhbHVlcyB1c2VkIGluIHBpeGlcbiAqXG4gKiBAbGVuZHMgUElYSVxuICovXG52YXIgQ09OU1QgPSB7XG4gICAgLyoqXG4gICAgICogU3RyaW5nIG9mIHRoZSBjdXJyZW50IFBJWEkgdmVyc2lvblxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBjb25zdGFudFxuICAgICAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBWRVJTSU9OXG4gICAgICovXG4gICAgVkVSU0lPTjogcmVxdWlyZSgnLi4vLi4vcGFja2FnZS5qc29uJykudmVyc2lvbixcblxuICAgIC8qKlxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBQSV8yIC0gVHdvIFBpXG4gICAgICogQGNvbnN0YW50XG4gICAgICogQHN0YXRpY1xuICAgICAqL1xuICAgIFBJXzI6IE1hdGguUEkgKiAyLFxuXG4gICAgLyoqXG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IFJBRF9UT19ERUcgLSBDb25zdGFudCBjb252ZXJzaW9uIGZhY3RvciBmb3IgY29udmVydGluZyByYWRpYW5zIHRvIGRlZ3JlZXNcbiAgICAgKiBAY29uc3RhbnRcbiAgICAgKiBAc3RhdGljXG4gICAgICovXG4gICAgUkFEX1RPX0RFRzogMTgwIC8gTWF0aC5QSSxcblxuICAgIC8qKlxuICAgICAqIEBwcm9wZXJ0eSB7TnVtYmVyfSBERUdfVE9fUkFEIC0gQ29uc3RhbnQgY29udmVyc2lvbiBmYWN0b3IgZm9yIGNvbnZlcnRpbmcgZGVncmVlcyB0byByYWRpYW5zXG4gICAgICogQGNvbnN0YW50XG4gICAgICogQHN0YXRpY1xuICAgICAqL1xuICAgIERFR19UT19SQUQ6IE1hdGguUEkgLyAxODAsXG5cbiAgICAvKipcbiAgICAgKiBUYXJnZXQgZnJhbWVzIHBlciBtaWxsaXNlY29uZC5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAY29uc3RhbnRcbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gVEFSR0VUX0ZQTVM9MC4wNlxuICAgICAqL1xuICAgIFRBUkdFVF9GUE1TOiAwLjA2LFxuXG4gICAgLyoqXG4gICAgICogQ29uc3RhbnQgdG8gaWRlbnRpZnkgdGhlIFJlbmRlcmVyIFR5cGUuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQGNvbnN0YW50XG4gICAgICogQHByb3BlcnR5IHtvYmplY3R9IFJFTkRFUkVSX1RZUEVcbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gUkVOREVSRVJfVFlQRS5VTktOT1dOXG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IFJFTkRFUkVSX1RZUEUuV0VCR0xcbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gUkVOREVSRVJfVFlQRS5DQU5WQVNcbiAgICAgKi9cbiAgICBSRU5ERVJFUl9UWVBFOiB7XG4gICAgICAgIFVOS05PV046ICAgIDAsXG4gICAgICAgIFdFQkdMOiAgICAgIDEsXG4gICAgICAgIENBTlZBUzogICAgIDJcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVmFyaW91cyBibGVuZCBtb2RlcyBzdXBwb3J0ZWQgYnkgUElYSS4gSU1QT1JUQU5UIC0gVGhlIFdlYkdMIHJlbmRlcmVyIG9ubHkgc3VwcG9ydHNcbiAgICAgKiB0aGUgTk9STUFMLCBBREQsIE1VTFRJUExZIGFuZCBTQ1JFRU4gYmxlbmQgbW9kZXMuIEFueXRoaW5nIGVsc2Ugd2lsbCBzaWxlbnRseSBhY3QgbGlrZVxuICAgICAqIE5PUk1BTC5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAY29uc3RhbnRcbiAgICAgKiBAcHJvcGVydHkge29iamVjdH0gQkxFTkRfTU9ERVNcbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gQkxFTkRfTU9ERVMuTk9STUFMXG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IEJMRU5EX01PREVTLkFERFxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBCTEVORF9NT0RFUy5NVUxUSVBMWVxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBCTEVORF9NT0RFUy5TQ1JFRU5cbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gQkxFTkRfTU9ERVMuT1ZFUkxBWVxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBCTEVORF9NT0RFUy5EQVJLRU5cbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gQkxFTkRfTU9ERVMuTElHSFRFTlxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBCTEVORF9NT0RFUy5DT0xPUl9ET0RHRVxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBCTEVORF9NT0RFUy5DT0xPUl9CVVJOXG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IEJMRU5EX01PREVTLkhBUkRfTElHSFRcbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gQkxFTkRfTU9ERVMuU09GVF9MSUdIVFxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBCTEVORF9NT0RFUy5ESUZGRVJFTkNFXG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IEJMRU5EX01PREVTLkVYQ0xVU0lPTlxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBCTEVORF9NT0RFUy5IVUVcbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gQkxFTkRfTU9ERVMuU0FUVVJBVElPTlxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBCTEVORF9NT0RFUy5DT0xPUlxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBCTEVORF9NT0RFUy5MVU1JTk9TSVRZXG4gICAgICovXG4gICAgQkxFTkRfTU9ERVM6IHtcbiAgICAgICAgTk9STUFMOiAgICAgICAgIDAsXG4gICAgICAgIEFERDogICAgICAgICAgICAxLFxuICAgICAgICBNVUxUSVBMWTogICAgICAgMixcbiAgICAgICAgU0NSRUVOOiAgICAgICAgIDMsXG4gICAgICAgIE9WRVJMQVk6ICAgICAgICA0LFxuICAgICAgICBEQVJLRU46ICAgICAgICAgNSxcbiAgICAgICAgTElHSFRFTjogICAgICAgIDYsXG4gICAgICAgIENPTE9SX0RPREdFOiAgICA3LFxuICAgICAgICBDT0xPUl9CVVJOOiAgICAgOCxcbiAgICAgICAgSEFSRF9MSUdIVDogICAgIDksXG4gICAgICAgIFNPRlRfTElHSFQ6ICAgICAxMCxcbiAgICAgICAgRElGRkVSRU5DRTogICAgIDExLFxuICAgICAgICBFWENMVVNJT046ICAgICAgMTIsXG4gICAgICAgIEhVRTogICAgICAgICAgICAxMyxcbiAgICAgICAgU0FUVVJBVElPTjogICAgIDE0LFxuICAgICAgICBDT0xPUjogICAgICAgICAgMTUsXG4gICAgICAgIExVTUlOT1NJVFk6ICAgICAxNlxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBWYXJpb3VzIHdlYmdsIGRyYXcgbW9kZXMuIFRoZXNlIGNhbiBiZSB1c2VkIHRvIHNwZWNpZnkgd2hpY2ggR0wgZHJhd01vZGUgdG8gdXNlXG4gICAgICogdW5kZXIgY2VydGFpbiBzaXR1YXRpb25zIGFuZCByZW5kZXJlcnMuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQGNvbnN0YW50XG4gICAgICogQHByb3BlcnR5IHtvYmplY3R9IERSQVdfTU9ERVNcbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gRFJBV19NT0RFUy5QT0lOVFNcbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gRFJBV19NT0RFUy5MSU5FU1xuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBEUkFXX01PREVTLkxJTkVfTE9PUFxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBEUkFXX01PREVTLkxJTkVfU1RSSVBcbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gRFJBV19NT0RFUy5UUklBTkdMRVNcbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gRFJBV19NT0RFUy5UUklBTkdMRV9TVFJJUFxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBEUkFXX01PREVTLlRSSUFOR0xFX0ZBTlxuICAgICAqL1xuICAgIERSQVdfTU9ERVM6IHtcbiAgICAgICAgUE9JTlRTOiAgICAgICAgIDAsXG4gICAgICAgIExJTkVTOiAgICAgICAgICAxLFxuICAgICAgICBMSU5FX0xPT1A6ICAgICAgMixcbiAgICAgICAgTElORV9TVFJJUDogICAgIDMsXG4gICAgICAgIFRSSUFOR0xFUzogICAgICA0LFxuICAgICAgICBUUklBTkdMRV9TVFJJUDogNSxcbiAgICAgICAgVFJJQU5HTEVfRkFOOiAgIDZcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVGhlIHNjYWxlIG1vZGVzIHRoYXQgYXJlIHN1cHBvcnRlZCBieSBwaXhpLlxuICAgICAqXG4gICAgICogVGhlIERFRkFVTFQgc2NhbGUgbW9kZSBhZmZlY3RzIHRoZSBkZWZhdWx0IHNjYWxpbmcgbW9kZSBvZiBmdXR1cmUgb3BlcmF0aW9ucy5cbiAgICAgKiBJdCBjYW4gYmUgcmUtYXNzaWduZWQgdG8gZWl0aGVyIExJTkVBUiBvciBORUFSRVNULCBkZXBlbmRpbmcgdXBvbiBzdWl0YWJpbGl0eS5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAY29uc3RhbnRcbiAgICAgKiBAcHJvcGVydHkge29iamVjdH0gU0NBTEVfTU9ERVNcbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gU0NBTEVfTU9ERVMuREVGQVVMVD1MSU5FQVJcbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gU0NBTEVfTU9ERVMuTElORUFSIFNtb290aCBzY2FsaW5nXG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IFNDQUxFX01PREVTLk5FQVJFU1QgUGl4ZWxhdGluZyBzY2FsaW5nXG4gICAgICovXG4gICAgU0NBTEVfTU9ERVM6IHtcbiAgICAgICAgREVGQVVMVDogICAgMCxcbiAgICAgICAgTElORUFSOiAgICAgMCxcbiAgICAgICAgTkVBUkVTVDogICAgMVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBUaGUgcHJlZml4IHRoYXQgZGVub3RlcyBhIFVSTCBpcyBmb3IgYSByZXRpbmEgYXNzZXRcbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAY29uc3RhbnRcbiAgICAgKiBAcHJvcGVydHkge3N0cmluZ30gUkVUSU5BX1BSRUZJWFxuICAgICAqL1xuICAgIC8vZXhhbXBsZTogJ0AyeCcsXG4gICAgUkVUSU5BX1BSRUZJWDogL0AoLispeC8sXG5cbiAgICBSRVNPTFVUSU9OOjEsXG5cbiAgICBGSUxURVJfUkVTT0xVVElPTjoxLFxuXG4gICAgLyoqXG4gICAgICogVGhlIGRlZmF1bHQgcmVuZGVyIG9wdGlvbnMgaWYgbm9uZSBhcmUgc3VwcGxpZWQgdG8ge0BsaW5rIFBJWEkuV2ViR0xSZW5kZXJlcn1cbiAgICAgKiBvciB7QGxpbmsgUElYSS5DYW52YXNSZW5kZXJlcn0uXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQGNvbnN0YW50XG4gICAgICogQHByb3BlcnR5IHtvYmplY3R9IERFRkFVTFRfUkVOREVSX09QVElPTlNcbiAgICAgKiBAcHJvcGVydHkge0hUTUxDYW52YXNFbGVtZW50fSBERUZBVUxUX1JFTkRFUl9PUFRJT05TLnZpZXc9bnVsbFxuICAgICAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gREVGQVVMVF9SRU5ERVJfT1BUSU9OUy50cmFuc3BhcmVudD1mYWxzZVxuICAgICAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gREVGQVVMVF9SRU5ERVJfT1BUSU9OUy5hbnRpYWxpYXM9ZmFsc2VcbiAgICAgKiBAcHJvcGVydHkge2Jvb2xlYW59IERFRkFVTFRfUkVOREVSX09QVElPTlMuZm9yY2VGWEFBPWZhbHNlXG4gICAgICogQHByb3BlcnR5IHtib29sZWFufSBERUZBVUxUX1JFTkRFUl9PUFRJT05TLnByZXNlcnZlRHJhd2luZ0J1ZmZlcj1mYWxzZVxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBERUZBVUxUX1JFTkRFUl9PUFRJT05TLnJlc29sdXRpb249MVxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBERUZBVUxUX1JFTkRFUl9PUFRJT05TLmJhY2tncm91bmRDb2xvcj0weDAwMDAwMFxuICAgICAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gREVGQVVMVF9SRU5ERVJfT1BUSU9OUy5jbGVhckJlZm9yZVJlbmRlcj10cnVlXG4gICAgICogQHByb3BlcnR5IHtib29sZWFufSBERUZBVUxUX1JFTkRFUl9PUFRJT05TLmF1dG9SZXNpemU9ZmFsc2VcbiAgICAgKi9cbiAgICBERUZBVUxUX1JFTkRFUl9PUFRJT05TOiB7XG4gICAgICAgIHZpZXc6IG51bGwsXG4gICAgICAgIHJlc29sdXRpb246IDEsXG4gICAgICAgIGFudGlhbGlhczogZmFsc2UsXG4gICAgICAgIGZvcmNlRlhBQTogZmFsc2UsXG4gICAgICAgIGF1dG9SZXNpemU6IGZhbHNlLFxuICAgICAgICB0cmFuc3BhcmVudDogZmFsc2UsXG4gICAgICAgIGJhY2tncm91bmRDb2xvcjogMHgwMDAwMDAsXG4gICAgICAgIGNsZWFyQmVmb3JlUmVuZGVyOiB0cnVlLFxuICAgICAgICBwcmVzZXJ2ZURyYXdpbmdCdWZmZXI6IGZhbHNlLFxuICAgICAgICByb3VuZFBpeGVsczogZmFsc2VcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQ29uc3RhbnRzIHRoYXQgaWRlbnRpZnkgc2hhcGVzLCBtYWlubHkgdG8gcHJldmVudCBgaW5zdGFuY2VvZmAgY2FsbHMuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQGNvbnN0YW50XG4gICAgICogQHByb3BlcnR5IHtvYmplY3R9IFNIQVBFU1xuICAgICAqIEBwcm9wZXJ0eSB7b2JqZWN0fSBTSEFQRVMuUE9MWT0wXG4gICAgICogQHByb3BlcnR5IHtvYmplY3R9IFNIQVBFUy5SRUNUPTFcbiAgICAgKiBAcHJvcGVydHkge29iamVjdH0gU0hBUEVTLkNJUkM9MlxuICAgICAqIEBwcm9wZXJ0eSB7b2JqZWN0fSBTSEFQRVMuRUxJUD0zXG4gICAgICogQHByb3BlcnR5IHtvYmplY3R9IFNIQVBFUy5SUkVDPTRcbiAgICAgKi9cbiAgICBTSEFQRVM6IHtcbiAgICAgICAgUE9MWTogMCxcbiAgICAgICAgUkVDVDogMSxcbiAgICAgICAgQ0lSQzogMixcbiAgICAgICAgRUxJUDogMyxcbiAgICAgICAgUlJFQzogNFxuICAgIH0sXG5cbiAgICAvLyBUT0RPOiBtYXliZSBjaGFuZ2UgdG8gU1BSSVRFLkJBVENIX1NJWkU6IDIwMDBcbiAgICAvLyBUT0RPOiBtYXliZSBhZGQgUEFSVElDTEUuQkFUQ0hfU0laRTogMTUwMDBcbiAgICBTUFJJVEVfQkFUQ0hfU0laRTogMjAwMCAvL25pY2UgYmFsYW5jZSBiZXR3ZWVuIG1vYmlsZSBhbmQgZGVza3RvcCBtYWNoaW5lc1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBDT05TVDtcbiIsInZhciBtYXRoID0gcmVxdWlyZSgnLi4vbWF0aCcpLFxuICAgIHV0aWxzID0gcmVxdWlyZSgnLi4vdXRpbHMnKSxcbiAgICBEaXNwbGF5T2JqZWN0ID0gcmVxdWlyZSgnLi9EaXNwbGF5T2JqZWN0JyksXG4gICAgUmVuZGVyVGV4dHVyZSA9IHJlcXVpcmUoJy4uL3RleHR1cmVzL1JlbmRlclRleHR1cmUnKSxcbiAgICBfdGVtcE1hdHJpeCA9IG5ldyBtYXRoLk1hdHJpeCgpO1xuXG4vKipcbiAqIEEgQ29udGFpbmVyIHJlcHJlc2VudHMgYSBjb2xsZWN0aW9uIG9mIGRpc3BsYXkgb2JqZWN0cy5cbiAqIEl0IGlzIHRoZSBiYXNlIGNsYXNzIG9mIGFsbCBkaXNwbGF5IG9iamVjdHMgdGhhdCBhY3QgYXMgYSBjb250YWluZXIgZm9yIG90aGVyIG9iamVjdHMuXG4gKlxuICpgYGBqc1xuICogdmFyIGNvbnRhaW5lciA9IG5ldyBQSVhJLkNvbnRhaW5lcigpO1xuICogY29udGFpbmVyLmFkZENoaWxkKHNwcml0ZSk7XG4gKiBgYGBcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5EaXNwbGF5T2JqZWN0XG4gKiBAbWVtYmVyb2YgUElYSVxuICovXG5mdW5jdGlvbiBDb250YWluZXIoKVxue1xuICAgIERpc3BsYXlPYmplY3QuY2FsbCh0aGlzKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBhcnJheSBvZiBjaGlsZHJlbiBvZiB0aGlzIGNvbnRhaW5lci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuRGlzcGxheU9iamVjdFtdfVxuICAgICAqIEByZWFkb25seVxuICAgICAqL1xuICAgIHRoaXMuY2hpbGRyZW4gPSBbXTtcbn1cblxuLy8gY29uc3RydWN0b3JcbkNvbnRhaW5lci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKERpc3BsYXlPYmplY3QucHJvdG90eXBlKTtcbkNvbnRhaW5lci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBDb250YWluZXI7XG5tb2R1bGUuZXhwb3J0cyA9IENvbnRhaW5lcjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoQ29udGFpbmVyLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFRoZSB3aWR0aCBvZiB0aGUgQ29udGFpbmVyLCBzZXR0aW5nIHRoaXMgd2lsbCBhY3R1YWxseSBtb2RpZnkgdGhlIHNjYWxlIHRvIGFjaGlldmUgdGhlIHZhbHVlIHNldFxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLkNvbnRhaW5lciNcbiAgICAgKi9cbiAgICB3aWR0aDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnNjYWxlLnggKiB0aGlzLmdldExvY2FsQm91bmRzKCkud2lkdGg7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG5cbiAgICAgICAgICAgIHZhciB3aWR0aCA9IHRoaXMuZ2V0TG9jYWxCb3VuZHMoKS53aWR0aDtcblxuICAgICAgICAgICAgaWYgKHdpZHRoICE9PSAwKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHRoaXMuc2NhbGUueCA9IHZhbHVlIC8gd2lkdGg7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdGhpcy5zY2FsZS54ID0gMTtcbiAgICAgICAgICAgIH1cblxuXG4gICAgICAgICAgICB0aGlzLl93aWR0aCA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFRoZSBoZWlnaHQgb2YgdGhlIENvbnRhaW5lciwgc2V0dGluZyB0aGlzIHdpbGwgYWN0dWFsbHkgbW9kaWZ5IHRoZSBzY2FsZSB0byBhY2hpZXZlIHRoZSB2YWx1ZSBzZXRcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5Db250YWluZXIjXG4gICAgICovXG4gICAgaGVpZ2h0OiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuICB0aGlzLnNjYWxlLnkgKiB0aGlzLmdldExvY2FsQm91bmRzKCkuaGVpZ2h0O1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuXG4gICAgICAgICAgICB2YXIgaGVpZ2h0ID0gdGhpcy5nZXRMb2NhbEJvdW5kcygpLmhlaWdodDtcblxuICAgICAgICAgICAgaWYgKGhlaWdodCAhPT0gMClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNjYWxlLnkgPSB2YWx1ZSAvIGhlaWdodCA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdGhpcy5zY2FsZS55ID0gMTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5faGVpZ2h0ID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG59KTtcblxuLyoqXG4gKiBPdmVycmlkYWJsZSBtZXRob2QgdGhhdCBjYW4gYmUgdXNlZCBieSBDb250YWluZXIgc3ViY2xhc3NlcyB3aGVuZXZlciB0aGUgY2hpbGRyZW4gYXJyYXkgaXMgbW9kaWZpZWRcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5Db250YWluZXIucHJvdG90eXBlLm9uQ2hpbGRyZW5DaGFuZ2UgPSBmdW5jdGlvbiAoKSB7fTtcblxuLyoqXG4gKiBBZGRzIGEgY2hpbGQgdG8gdGhlIGNvbnRhaW5lci5cbiAqIFxuICogWW91IGNhbiBhbHNvIGFkZCBtdWx0cGxlIGl0ZW1zIGxpa2Ugc286IG15Q29udGFpbmVyLmFkZENoaWxkKHRoaW5rT25lLCB0aGluZ1R3bywgdGhpbmdUaHJlZSlcbiAqIEBwYXJhbSBjaGlsZCB7UElYSS5EaXNwbGF5T2JqZWN0fSBUaGUgRGlzcGxheU9iamVjdCB0byBhZGQgdG8gdGhlIGNvbnRhaW5lclxuICogQHJldHVybiB7UElYSS5EaXNwbGF5T2JqZWN0fSBUaGUgY2hpbGQgdGhhdCB3YXMgYWRkZWQuXG4gKi9cbkNvbnRhaW5lci5wcm90b3R5cGUuYWRkQ2hpbGQgPSBmdW5jdGlvbiAoY2hpbGQpXG57IFxuICAgIHZhciBhcmd1bWVudHNMZW5ndGggPSBhcmd1bWVudHMubGVuZ3RoO1xuXG4gICAgLy8gaWYgdGhlcmUgaXMgb25seSBvbmUgYXJndW1lbnQgd2UgY2FuIGJ5cGFzcyBsb29waW5nIHRocm91Z2ggdGhlIHRoZW1cbiAgICBpZihhcmd1bWVudHNMZW5ndGggPiAxKVxuICAgIHtcbiAgICAgICAgLy8gbG9vcCB0aHJvdWdoIHRoZSBhcmd1bWVudHMgcHJvcGVydHkgYW5kIGFkZCBhbGwgY2hpbGRyZW5cbiAgICAgICAgLy8gdXNlIGl0IHRoZSByaWdodCB3YXkgKC5sZW5ndGggYW5kIFtpXSkgc28gdGhhdCB0aGlzIGZ1bmN0aW9uIGNhbiBzdGlsbCBiZSBvcHRpbWlzZWQgYnkgSlMgcnVudGltZXNcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcmd1bWVudHNMZW5ndGg7IGkrKylcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5hZGRDaGlsZCggYXJndW1lbnRzW2ldICk7XG4gICAgICAgIH1cbiAgICB9ICAgICBcbiAgICBlbHNlXG4gICAge1xuICAgICAgICAvLyBpZiB0aGUgY2hpbGQgaGFzIGEgcGFyZW50IHRoZW4gbGV0cyByZW1vdmUgaXQgYXMgUGl4aSBvYmplY3RzIGNhbiBvbmx5IGV4aXN0IGluIG9uZSBwbGFjZVxuICAgICAgICBpZiAoY2hpbGQucGFyZW50KVxuICAgICAgICB7XG4gICAgICAgICAgICBjaGlsZC5wYXJlbnQucmVtb3ZlQ2hpbGQoY2hpbGQpO1xuICAgICAgICB9XG5cbiAgICAgICAgY2hpbGQucGFyZW50ID0gdGhpcztcbiAgICAgICAgXG4gICAgICAgIHRoaXMuY2hpbGRyZW4ucHVzaChjaGlsZCk7XG5cbiAgICAgICAgLy8gVE9ETyAtIGxldHMgZWl0aGVyIGRvIGFsbCBjYWxsYmFja3Mgb3IgYWxsIGV2ZW50cy4uIG5vdCBib3RoIVxuICAgICAgICB0aGlzLm9uQ2hpbGRyZW5DaGFuZ2UodGhpcy5jaGlsZHJlbi5sZW5ndGgtMSk7XG4gICAgICAgIGNoaWxkLmVtaXQoJ2FkZGVkJywgdGhpcyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGNoaWxkO1xufTtcblxuLyoqXG4gKiBBZGRzIGEgY2hpbGQgdG8gdGhlIGNvbnRhaW5lciBhdCBhIHNwZWNpZmllZCBpbmRleC4gSWYgdGhlIGluZGV4IGlzIG91dCBvZiBib3VuZHMgYW4gZXJyb3Igd2lsbCBiZSB0aHJvd25cbiAqXG4gKiBAcGFyYW0gY2hpbGQge1BJWEkuRGlzcGxheU9iamVjdH0gVGhlIGNoaWxkIHRvIGFkZFxuICogQHBhcmFtIGluZGV4IHtudW1iZXJ9IFRoZSBpbmRleCB0byBwbGFjZSB0aGUgY2hpbGQgaW5cbiAqIEByZXR1cm4ge1BJWEkuRGlzcGxheU9iamVjdH0gVGhlIGNoaWxkIHRoYXQgd2FzIGFkZGVkLlxuICovXG5Db250YWluZXIucHJvdG90eXBlLmFkZENoaWxkQXQgPSBmdW5jdGlvbiAoY2hpbGQsIGluZGV4KVxue1xuICAgIGlmIChpbmRleCA+PSAwICYmIGluZGV4IDw9IHRoaXMuY2hpbGRyZW4ubGVuZ3RoKVxuICAgIHtcbiAgICAgICAgaWYgKGNoaWxkLnBhcmVudClcbiAgICAgICAge1xuICAgICAgICAgICAgY2hpbGQucGFyZW50LnJlbW92ZUNoaWxkKGNoaWxkKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNoaWxkLnBhcmVudCA9IHRoaXM7XG5cbiAgICAgICAgdGhpcy5jaGlsZHJlbi5zcGxpY2UoaW5kZXgsIDAsIGNoaWxkKTtcblxuICAgICAgICAvLyBUT0RPIC0gbGV0cyBlaXRoZXIgZG8gYWxsIGNhbGxiYWNrcyBvciBhbGwgZXZlbnRzLi4gbm90IGJvdGghXG4gICAgICAgIHRoaXMub25DaGlsZHJlbkNoYW5nZShpbmRleCk7XG4gICAgICAgIGNoaWxkLmVtaXQoJ2FkZGVkJywgdGhpcyk7XG5cbiAgICAgICAgcmV0dXJuIGNoaWxkO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoY2hpbGQgKyAnYWRkQ2hpbGRBdDogVGhlIGluZGV4ICcrIGluZGV4ICsnIHN1cHBsaWVkIGlzIG91dCBvZiBib3VuZHMgJyArIHRoaXMuY2hpbGRyZW4ubGVuZ3RoKTtcbiAgICB9XG59O1xuXG4vKipcbiAqIFN3YXBzIHRoZSBwb3NpdGlvbiBvZiAyIERpc3BsYXkgT2JqZWN0cyB3aXRoaW4gdGhpcyBjb250YWluZXIuXG4gKlxuICogQHBhcmFtIGNoaWxkIHtQSVhJLkRpc3BsYXlPYmplY3R9XG4gKiBAcGFyYW0gY2hpbGQyIHtQSVhJLkRpc3BsYXlPYmplY3R9XG4gKi9cbkNvbnRhaW5lci5wcm90b3R5cGUuc3dhcENoaWxkcmVuID0gZnVuY3Rpb24gKGNoaWxkLCBjaGlsZDIpXG57XG4gICAgaWYgKGNoaWxkID09PSBjaGlsZDIpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFyIGluZGV4MSA9IHRoaXMuZ2V0Q2hpbGRJbmRleChjaGlsZCk7XG4gICAgdmFyIGluZGV4MiA9IHRoaXMuZ2V0Q2hpbGRJbmRleChjaGlsZDIpO1xuXG4gICAgaWYgKGluZGV4MSA8IDAgfHwgaW5kZXgyIDwgMClcbiAgICB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignc3dhcENoaWxkcmVuOiBCb3RoIHRoZSBzdXBwbGllZCBEaXNwbGF5T2JqZWN0cyBtdXN0IGJlIGNoaWxkcmVuIG9mIHRoZSBjYWxsZXIuJyk7XG4gICAgfVxuXG4gICAgdGhpcy5jaGlsZHJlbltpbmRleDFdID0gY2hpbGQyO1xuICAgIHRoaXMuY2hpbGRyZW5baW5kZXgyXSA9IGNoaWxkO1xuICAgIHRoaXMub25DaGlsZHJlbkNoYW5nZShpbmRleDEgPCBpbmRleDIgPyBpbmRleDEgOiBpbmRleDIpO1xufTtcblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBpbmRleCBwb3NpdGlvbiBvZiBhIGNoaWxkIERpc3BsYXlPYmplY3QgaW5zdGFuY2VcbiAqXG4gKiBAcGFyYW0gY2hpbGQge1BJWEkuRGlzcGxheU9iamVjdH0gVGhlIERpc3BsYXlPYmplY3QgaW5zdGFuY2UgdG8gaWRlbnRpZnlcbiAqIEByZXR1cm4ge251bWJlcn0gVGhlIGluZGV4IHBvc2l0aW9uIG9mIHRoZSBjaGlsZCBkaXNwbGF5IG9iamVjdCB0byBpZGVudGlmeVxuICovXG5Db250YWluZXIucHJvdG90eXBlLmdldENoaWxkSW5kZXggPSBmdW5jdGlvbiAoY2hpbGQpXG57XG4gICAgdmFyIGluZGV4ID0gdGhpcy5jaGlsZHJlbi5pbmRleE9mKGNoaWxkKTtcblxuICAgIGlmIChpbmRleCA9PT0gLTEpXG4gICAge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RoZSBzdXBwbGllZCBEaXNwbGF5T2JqZWN0IG11c3QgYmUgYSBjaGlsZCBvZiB0aGUgY2FsbGVyJyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGluZGV4O1xufTtcblxuLyoqXG4gKiBDaGFuZ2VzIHRoZSBwb3NpdGlvbiBvZiBhbiBleGlzdGluZyBjaGlsZCBpbiB0aGUgZGlzcGxheSBvYmplY3QgY29udGFpbmVyXG4gKlxuICogQHBhcmFtIGNoaWxkIHtQSVhJLkRpc3BsYXlPYmplY3R9IFRoZSBjaGlsZCBEaXNwbGF5T2JqZWN0IGluc3RhbmNlIGZvciB3aGljaCB5b3Ugd2FudCB0byBjaGFuZ2UgdGhlIGluZGV4IG51bWJlclxuICogQHBhcmFtIGluZGV4IHtudW1iZXJ9IFRoZSByZXN1bHRpbmcgaW5kZXggbnVtYmVyIGZvciB0aGUgY2hpbGQgZGlzcGxheSBvYmplY3RcbiAqL1xuQ29udGFpbmVyLnByb3RvdHlwZS5zZXRDaGlsZEluZGV4ID0gZnVuY3Rpb24gKGNoaWxkLCBpbmRleClcbntcbiAgICBpZiAoaW5kZXggPCAwIHx8IGluZGV4ID49IHRoaXMuY2hpbGRyZW4ubGVuZ3RoKVxuICAgIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdUaGUgc3VwcGxpZWQgaW5kZXggaXMgb3V0IG9mIGJvdW5kcycpO1xuICAgIH1cblxuICAgIHZhciBjdXJyZW50SW5kZXggPSB0aGlzLmdldENoaWxkSW5kZXgoY2hpbGQpO1xuXG4gICAgdXRpbHMucmVtb3ZlSXRlbXModGhpcy5jaGlsZHJlbiwgY3VycmVudEluZGV4LCAxKTsgLy8gcmVtb3ZlIGZyb20gb2xkIHBvc2l0aW9uXG4gICAgdGhpcy5jaGlsZHJlbi5zcGxpY2UoaW5kZXgsIDAsIGNoaWxkKTsgLy9hZGQgYXQgbmV3IHBvc2l0aW9uXG4gICAgdGhpcy5vbkNoaWxkcmVuQ2hhbmdlKGluZGV4KTtcbn07XG5cbi8qKlxuICogUmV0dXJucyB0aGUgY2hpbGQgYXQgdGhlIHNwZWNpZmllZCBpbmRleFxuICpcbiAqIEBwYXJhbSBpbmRleCB7bnVtYmVyfSBUaGUgaW5kZXggdG8gZ2V0IHRoZSBjaGlsZCBhdFxuICogQHJldHVybiB7UElYSS5EaXNwbGF5T2JqZWN0fSBUaGUgY2hpbGQgYXQgdGhlIGdpdmVuIGluZGV4LCBpZiBhbnkuXG4gKi9cbkNvbnRhaW5lci5wcm90b3R5cGUuZ2V0Q2hpbGRBdCA9IGZ1bmN0aW9uIChpbmRleClcbntcbiAgICBpZiAoaW5kZXggPCAwIHx8IGluZGV4ID49IHRoaXMuY2hpbGRyZW4ubGVuZ3RoKVxuICAgIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdnZXRDaGlsZEF0OiBTdXBwbGllZCBpbmRleCAnICsgaW5kZXggKyAnIGRvZXMgbm90IGV4aXN0IGluIHRoZSBjaGlsZCBsaXN0LCBvciB0aGUgc3VwcGxpZWQgRGlzcGxheU9iamVjdCBpcyBub3QgYSBjaGlsZCBvZiB0aGUgY2FsbGVyJyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuY2hpbGRyZW5baW5kZXhdO1xufTtcblxuLyoqXG4gKiBSZW1vdmVzIGEgY2hpbGQgZnJvbSB0aGUgY29udGFpbmVyLlxuICpcbiAqIEBwYXJhbSBjaGlsZCB7UElYSS5EaXNwbGF5T2JqZWN0fSBUaGUgRGlzcGxheU9iamVjdCB0byByZW1vdmVcbiAqIEByZXR1cm4ge1BJWEkuRGlzcGxheU9iamVjdH0gVGhlIGNoaWxkIHRoYXQgd2FzIHJlbW92ZWQuXG4gKi9cbkNvbnRhaW5lci5wcm90b3R5cGUucmVtb3ZlQ2hpbGQgPSBmdW5jdGlvbiAoY2hpbGQpXG57XG4gICAgdmFyIGFyZ3VtZW50c0xlbmd0aCA9IGFyZ3VtZW50cy5sZW5ndGg7XG5cbiAgICAvLyBpZiB0aGVyZSBpcyBvbmx5IG9uZSBhcmd1bWVudCB3ZSBjYW4gYnlwYXNzIGxvb3BpbmcgdGhyb3VnaCB0aGUgdGhlbVxuICAgIGlmKGFyZ3VtZW50c0xlbmd0aCA+IDEpXG4gICAge1xuICAgICAgICAvLyBsb29wIHRocm91Z2ggdGhlIGFyZ3VtZW50cyBwcm9wZXJ0eSBhbmQgYWRkIGFsbCBjaGlsZHJlblxuICAgICAgICAvLyB1c2UgaXQgdGhlIHJpZ2h0IHdheSAoLmxlbmd0aCBhbmQgW2ldKSBzbyB0aGF0IHRoaXMgZnVuY3Rpb24gY2FuIHN0aWxsIGJlIG9wdGltaXNlZCBieSBKUyBydW50aW1lc1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFyZ3VtZW50c0xlbmd0aDsgaSsrKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnJlbW92ZUNoaWxkKCBhcmd1bWVudHNbaV0gKTtcbiAgICAgICAgfVxuICAgIH0gICAgIFxuICAgIGVsc2VcbiAgICB7ICAgXG4gICAgICAgIHZhciBpbmRleCA9IHRoaXMuY2hpbGRyZW4uaW5kZXhPZihjaGlsZCk7XG5cbiAgICAgICAgaWYgKGluZGV4ID09PSAtMSlcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY2hpbGQucGFyZW50ID0gbnVsbDtcbiAgICAgICAgdXRpbHMucmVtb3ZlSXRlbXModGhpcy5jaGlsZHJlbiwgaW5kZXgsIDEpO1xuXG4gICAgICAgIC8vIFRPRE8gLSBsZXRzIGVpdGhlciBkbyBhbGwgY2FsbGJhY2tzIG9yIGFsbCBldmVudHMuLiBub3QgYm90aCFcbiAgICAgICAgdGhpcy5vbkNoaWxkcmVuQ2hhbmdlKGluZGV4KTtcbiAgICAgICAgY2hpbGQuZW1pdCgncmVtb3ZlZCcsIHRoaXMpO1xuICAgIH1cblxuICAgIHJldHVybiBjaGlsZDtcbn07XG5cbi8qKlxuICogUmVtb3ZlcyBhIGNoaWxkIGZyb20gdGhlIHNwZWNpZmllZCBpbmRleCBwb3NpdGlvbi5cbiAqXG4gKiBAcGFyYW0gaW5kZXgge251bWJlcn0gVGhlIGluZGV4IHRvIGdldCB0aGUgY2hpbGQgZnJvbVxuICogQHJldHVybiB7UElYSS5EaXNwbGF5T2JqZWN0fSBUaGUgY2hpbGQgdGhhdCB3YXMgcmVtb3ZlZC5cbiAqL1xuQ29udGFpbmVyLnByb3RvdHlwZS5yZW1vdmVDaGlsZEF0ID0gZnVuY3Rpb24gKGluZGV4KVxue1xuICAgIHZhciBjaGlsZCA9IHRoaXMuZ2V0Q2hpbGRBdChpbmRleCk7XG5cbiAgICBjaGlsZC5wYXJlbnQgPSBudWxsO1xuICAgIHV0aWxzLnJlbW92ZUl0ZW1zKHRoaXMuY2hpbGRyZW4sIGluZGV4LCAxKTtcblxuICAgIC8vIFRPRE8gLSBsZXRzIGVpdGhlciBkbyBhbGwgY2FsbGJhY2tzIG9yIGFsbCBldmVudHMuLiBub3QgYm90aCFcbiAgICB0aGlzLm9uQ2hpbGRyZW5DaGFuZ2UoaW5kZXgpO1xuICAgIGNoaWxkLmVtaXQoJ3JlbW92ZWQnLCB0aGlzKTtcblxuICAgIHJldHVybiBjaGlsZDtcbn07XG5cbi8qKlxuICogUmVtb3ZlcyBhbGwgY2hpbGRyZW4gZnJvbSB0aGlzIGNvbnRhaW5lciB0aGF0IGFyZSB3aXRoaW4gdGhlIGJlZ2luIGFuZCBlbmQgaW5kZXhlcy5cbiAqXG4gKiBAcGFyYW0gYmVnaW5JbmRleCB7bnVtYmVyfSBUaGUgYmVnaW5uaW5nIHBvc2l0aW9uLiBEZWZhdWx0IHZhbHVlIGlzIDAuXG4gKiBAcGFyYW0gZW5kSW5kZXgge251bWJlcn0gVGhlIGVuZGluZyBwb3NpdGlvbi4gRGVmYXVsdCB2YWx1ZSBpcyBzaXplIG9mIHRoZSBjb250YWluZXIuXG4gKi9cbkNvbnRhaW5lci5wcm90b3R5cGUucmVtb3ZlQ2hpbGRyZW4gPSBmdW5jdGlvbiAoYmVnaW5JbmRleCwgZW5kSW5kZXgpXG57XG4gICAgdmFyIGJlZ2luID0gYmVnaW5JbmRleCB8fCAwO1xuICAgIHZhciBlbmQgPSB0eXBlb2YgZW5kSW5kZXggPT09ICdudW1iZXInID8gZW5kSW5kZXggOiB0aGlzLmNoaWxkcmVuLmxlbmd0aDtcbiAgICB2YXIgcmFuZ2UgPSBlbmQgLSBiZWdpbjtcbiAgICB2YXIgcmVtb3ZlZCwgaTtcblxuICAgIGlmIChyYW5nZSA+IDAgJiYgcmFuZ2UgPD0gZW5kKVxuICAgIHtcbiAgICAgICAgcmVtb3ZlZCA9IHRoaXMuY2hpbGRyZW4uc3BsaWNlKGJlZ2luLCByYW5nZSk7XG5cbiAgICAgICAgZm9yIChpID0gMDsgaSA8IHJlbW92ZWQubGVuZ3RoOyArK2kpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJlbW92ZWRbaV0ucGFyZW50ID0gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMub25DaGlsZHJlbkNoYW5nZShiZWdpbkluZGV4KTtcblxuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgcmVtb3ZlZC5sZW5ndGg7ICsraSlcbiAgICAgICAge1xuICAgICAgICAgICAgcmVtb3ZlZFtpXS5lbWl0KCdyZW1vdmVkJywgdGhpcyk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gcmVtb3ZlZDtcbiAgICB9XG4gICAgZWxzZSBpZiAocmFuZ2UgPT09IDAgJiYgdGhpcy5jaGlsZHJlbi5sZW5ndGggPT09IDApXG4gICAge1xuICAgICAgICByZXR1cm4gW107XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdyZW1vdmVDaGlsZHJlbjogbnVtZXJpYyB2YWx1ZXMgYXJlIG91dHNpZGUgdGhlIGFjY2VwdGFibGUgcmFuZ2UuJyk7XG4gICAgfVxufTtcblxuLyoqXG4gKiBVc2VmdWwgZnVuY3Rpb24gdGhhdCByZXR1cm5zIGEgdGV4dHVyZSBvZiB0aGUgZGlzcGxheSBvYmplY3QgdGhhdCBjYW4gdGhlbiBiZSB1c2VkIHRvIGNyZWF0ZSBzcHJpdGVzXG4gKiBUaGlzIGNhbiBiZSBxdWl0ZSB1c2VmdWwgaWYgeW91ciBkaXNwbGF5T2JqZWN0IGlzIHN0YXRpYyAvIGNvbXBsaWNhdGVkIGFuZCBuZWVkcyB0byBiZSByZXVzZWQgbXVsdGlwbGUgdGltZXMuXG4gKlxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLkNhbnZhc1JlbmRlcmVyfFBJWEkuV2ViR0xSZW5kZXJlcn0gVGhlIHJlbmRlcmVyIHVzZWQgdG8gZ2VuZXJhdGUgdGhlIHRleHR1cmUuXG4gKiBAcGFyYW0gcmVzb2x1dGlvbiB7bnVtYmVyfSBUaGUgcmVzb2x1dGlvbiBvZiB0aGUgdGV4dHVyZSBiZWluZyBnZW5lcmF0ZWRcbiAqIEBwYXJhbSBzY2FsZU1vZGUge251bWJlcn0gU2VlIHtAbGluayBQSVhJLlNDQUxFX01PREVTfSBmb3IgcG9zc2libGUgdmFsdWVzXG4gKiBAcmV0dXJuIHtQSVhJLlRleHR1cmV9IGEgdGV4dHVyZSBvZiB0aGUgZGlzcGxheSBvYmplY3RcbiAqL1xuQ29udGFpbmVyLnByb3RvdHlwZS5nZW5lcmF0ZVRleHR1cmUgPSBmdW5jdGlvbiAocmVuZGVyZXIsIHJlc29sdXRpb24sIHNjYWxlTW9kZSlcbntcbiAgICB2YXIgYm91bmRzID0gdGhpcy5nZXRMb2NhbEJvdW5kcygpO1xuXG4gICAgdmFyIHJlbmRlclRleHR1cmUgPSBuZXcgUmVuZGVyVGV4dHVyZShyZW5kZXJlciwgYm91bmRzLndpZHRoIHwgMCwgYm91bmRzLmhlaWdodCB8IDAsIHNjYWxlTW9kZSwgcmVzb2x1dGlvbik7XG5cbiAgICBfdGVtcE1hdHJpeC50eCA9IC1ib3VuZHMueDtcbiAgICBfdGVtcE1hdHJpeC50eSA9IC1ib3VuZHMueTtcblxuICAgIHJlbmRlclRleHR1cmUucmVuZGVyKHRoaXMsIF90ZW1wTWF0cml4KTtcblxuICAgIHJldHVybiByZW5kZXJUZXh0dXJlO1xufTtcblxuLypcbiAqIFVwZGF0ZXMgdGhlIHRyYW5zZm9ybSBvbiBhbGwgY2hpbGRyZW4gb2YgdGhpcyBjb250YWluZXIgZm9yIHJlbmRlcmluZ1xuICpcbiAqIEBwcml2YXRlXG4gKi9cbkNvbnRhaW5lci5wcm90b3R5cGUudXBkYXRlVHJhbnNmb3JtID0gZnVuY3Rpb24gKClcbntcbiAgICBpZiAoIXRoaXMudmlzaWJsZSlcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLmRpc3BsYXlPYmplY3RVcGRhdGVUcmFuc2Zvcm0oKTtcblxuICAgIGZvciAodmFyIGkgPSAwLCBqID0gdGhpcy5jaGlsZHJlbi5sZW5ndGg7IGkgPCBqOyArK2kpXG4gICAge1xuICAgICAgICB0aGlzLmNoaWxkcmVuW2ldLnVwZGF0ZVRyYW5zZm9ybSgpO1xuICAgIH1cblxuICAgIHRoaXMuZGlydHlUcmFuc2Zvcm0gPSBmYWxzZTtcbn07XG5cbi8vIHBlcmZvcm1hbmNlIGluY3JlYXNlIHRvIGF2b2lkIHVzaW5nIGNhbGwuLiAoMTB4IGZhc3RlcilcbkNvbnRhaW5lci5wcm90b3R5cGUuY29udGFpbmVyVXBkYXRlVHJhbnNmb3JtID0gQ29udGFpbmVyLnByb3RvdHlwZS51cGRhdGVUcmFuc2Zvcm07XG5cbi8qKlxuICogUmV0cmlldmVzIHRoZSBib3VuZHMgb2YgdGhlIENvbnRhaW5lciBhcyBhIHJlY3RhbmdsZS4gVGhlIGJvdW5kcyBjYWxjdWxhdGlvbiB0YWtlcyBhbGwgdmlzaWJsZSBjaGlsZHJlbiBpbnRvIGNvbnNpZGVyYXRpb24uXG4gKlxuICogQHJldHVybiB7UElYSS5SZWN0YW5nbGV9IFRoZSByZWN0YW5ndWxhciBib3VuZGluZyBhcmVhXG4gKi9cbkNvbnRhaW5lci5wcm90b3R5cGUuZ2V0Qm91bmRzID0gZnVuY3Rpb24gKClcbntcbiAgICBpZighdGhpcy5fY3VycmVudEJvdW5kcylcbiAgICB7XG5cbiAgICAgICAgaWYgKHRoaXMuY2hpbGRyZW4ubGVuZ3RoID09PSAwKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gbWF0aC5SZWN0YW5nbGUuRU1QVFk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBUT0RPIHRoZSBib3VuZHMgaGF2ZSBhbHJlYWR5IGJlZW4gY2FsY3VsYXRlZCB0aGlzIHJlbmRlciBzZXNzaW9uIHNvIHJldHVybiB3aGF0IHdlIGhhdmVcblxuICAgICAgICB2YXIgbWluWCA9IEluZmluaXR5O1xuICAgICAgICB2YXIgbWluWSA9IEluZmluaXR5O1xuXG4gICAgICAgIHZhciBtYXhYID0gLUluZmluaXR5O1xuICAgICAgICB2YXIgbWF4WSA9IC1JbmZpbml0eTtcblxuICAgICAgICB2YXIgY2hpbGRCb3VuZHM7XG4gICAgICAgIHZhciBjaGlsZE1heFg7XG4gICAgICAgIHZhciBjaGlsZE1heFk7XG5cbiAgICAgICAgdmFyIGNoaWxkVmlzaWJsZSA9IGZhbHNlO1xuXG4gICAgICAgIGZvciAodmFyIGkgPSAwLCBqID0gdGhpcy5jaGlsZHJlbi5sZW5ndGg7IGkgPCBqOyArK2kpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHZhciBjaGlsZCA9IHRoaXMuY2hpbGRyZW5baV07XG5cbiAgICAgICAgICAgIGlmICghY2hpbGQudmlzaWJsZSlcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY2hpbGRWaXNpYmxlID0gdHJ1ZTtcblxuICAgICAgICAgICAgY2hpbGRCb3VuZHMgPSB0aGlzLmNoaWxkcmVuW2ldLmdldEJvdW5kcygpO1xuXG4gICAgICAgICAgICBtaW5YID0gbWluWCA8IGNoaWxkQm91bmRzLnggPyBtaW5YIDogY2hpbGRCb3VuZHMueDtcbiAgICAgICAgICAgIG1pblkgPSBtaW5ZIDwgY2hpbGRCb3VuZHMueSA/IG1pblkgOiBjaGlsZEJvdW5kcy55O1xuXG4gICAgICAgICAgICBjaGlsZE1heFggPSBjaGlsZEJvdW5kcy53aWR0aCArIGNoaWxkQm91bmRzLng7XG4gICAgICAgICAgICBjaGlsZE1heFkgPSBjaGlsZEJvdW5kcy5oZWlnaHQgKyBjaGlsZEJvdW5kcy55O1xuXG4gICAgICAgICAgICBtYXhYID0gbWF4WCA+IGNoaWxkTWF4WCA/IG1heFggOiBjaGlsZE1heFg7XG4gICAgICAgICAgICBtYXhZID0gbWF4WSA+IGNoaWxkTWF4WSA/IG1heFkgOiBjaGlsZE1heFk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIWNoaWxkVmlzaWJsZSlcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIG1hdGguUmVjdGFuZ2xlLkVNUFRZO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGJvdW5kcyA9IHRoaXMuX2JvdW5kcztcblxuICAgICAgICBib3VuZHMueCA9IG1pblg7XG4gICAgICAgIGJvdW5kcy55ID0gbWluWTtcbiAgICAgICAgYm91bmRzLndpZHRoID0gbWF4WCAtIG1pblg7XG4gICAgICAgIGJvdW5kcy5oZWlnaHQgPSBtYXhZIC0gbWluWTtcblxuICAgICAgICB0aGlzLl9jdXJyZW50Qm91bmRzID0gYm91bmRzO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLl9jdXJyZW50Qm91bmRzO1xufTtcblxuQ29udGFpbmVyLnByb3RvdHlwZS5jb250YWluZXJHZXRCb3VuZHMgPSBDb250YWluZXIucHJvdG90eXBlLmdldEJvdW5kcztcblxuLyoqXG4gKiBSZXRyaWV2ZXMgdGhlIG5vbi1nbG9iYWwgbG9jYWwgYm91bmRzIG9mIHRoZSBDb250YWluZXIgYXMgYSByZWN0YW5nbGUuXG4gKiBUaGUgY2FsY3VsYXRpb24gdGFrZXMgYWxsIHZpc2libGUgY2hpbGRyZW4gaW50byBjb25zaWRlcmF0aW9uLlxuICpcbiAqIEByZXR1cm4ge1BJWEkuUmVjdGFuZ2xlfSBUaGUgcmVjdGFuZ3VsYXIgYm91bmRpbmcgYXJlYVxuICovXG5Db250YWluZXIucHJvdG90eXBlLmdldExvY2FsQm91bmRzID0gZnVuY3Rpb24gKClcbntcbiAgICB2YXIgbWF0cml4Q2FjaGUgPSB0aGlzLndvcmxkVHJhbnNmb3JtO1xuXG4gICAgdGhpcy53b3JsZFRyYW5zZm9ybSA9IG1hdGguTWF0cml4LklERU5USVRZO1xuXG4gICAgZm9yICh2YXIgaSA9IDAsIGogPSB0aGlzLmNoaWxkcmVuLmxlbmd0aDsgaSA8IGo7ICsraSlcbiAgICB7XG4gICAgICAgIHRoaXMuY2hpbGRyZW5baV0udXBkYXRlVHJhbnNmb3JtKCk7XG4gICAgfVxuXG4gICAgdGhpcy53b3JsZFRyYW5zZm9ybSA9IG1hdHJpeENhY2hlO1xuXG4gICAgdGhpcy5fY3VycmVudEJvdW5kcyA9IG51bGw7XG5cbiAgICByZXR1cm4gdGhpcy5nZXRCb3VuZHMoIG1hdGguTWF0cml4LklERU5USVRZICk7XG59O1xuXG4vKipcbiAqIFJlbmRlcnMgdGhlIG9iamVjdCB1c2luZyB0aGUgV2ViR0wgcmVuZGVyZXJcbiAqXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcn0gVGhlIHJlbmRlcmVyXG4gKi9cbkNvbnRhaW5lci5wcm90b3R5cGUucmVuZGVyV2ViR0wgPSBmdW5jdGlvbiAocmVuZGVyZXIpXG57XG5cbiAgICAvLyBpZiB0aGUgb2JqZWN0IGlzIG5vdCB2aXNpYmxlIG9yIHRoZSBhbHBoYSBpcyAwIHRoZW4gbm8gbmVlZCB0byByZW5kZXIgdGhpcyBlbGVtZW50XG4gICAgaWYgKCF0aGlzLnZpc2libGUgfHwgdGhpcy53b3JsZEFscGhhIDw9IDAgfHwgIXRoaXMucmVuZGVyYWJsZSlcbiAgICB7XG4gICAgICBcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHZhciBpLCBqO1xuXG4gICAgLy8gZG8gYSBxdWljayBjaGVjayB0byBzZWUgaWYgdGhpcyBlbGVtZW50IGhhcyBhIG1hc2sgb3IgYSBmaWx0ZXIuXG4gICAgaWYgKHRoaXMuX21hc2sgfHwgdGhpcy5fZmlsdGVycylcbiAgICB7XG4gICAgICAgIHJlbmRlcmVyLmN1cnJlbnRSZW5kZXJlci5mbHVzaCgpO1xuXG4gICAgICAgIC8vIHB1c2ggZmlsdGVyIGZpcnN0IGFzIHdlIG5lZWQgdG8gZW5zdXJlIHRoZSBzdGVuY2lsIGJ1ZmZlciBpcyBjb3JyZWN0IGZvciBhbnkgbWFza2luZ1xuICAgICAgICBpZiAodGhpcy5fZmlsdGVycyAmJiB0aGlzLl9maWx0ZXJzLmxlbmd0aClcbiAgICAgICAge1xuICAgICAgICAgICAgcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5wdXNoRmlsdGVyKHRoaXMsIHRoaXMuX2ZpbHRlcnMpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuX21hc2spXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJlbmRlcmVyLm1hc2tNYW5hZ2VyLnB1c2hNYXNrKHRoaXMsIHRoaXMuX21hc2spO1xuICAgICAgICB9XG5cbiAgICAgICAgcmVuZGVyZXIuY3VycmVudFJlbmRlcmVyLnN0YXJ0KCk7XG5cbiAgICAgICAgLy8gYWRkIHRoaXMgb2JqZWN0IHRvIHRoZSBiYXRjaCwgb25seSByZW5kZXJlZCBpZiBpdCBoYXMgYSB0ZXh0dXJlLlxuICAgICAgICB0aGlzLl9yZW5kZXJXZWJHTChyZW5kZXJlcik7XG5cbiAgICAgICAgLy8gbm93IGxvb3AgdGhyb3VnaCB0aGUgY2hpbGRyZW4gYW5kIG1ha2Ugc3VyZSB0aGV5IGdldCByZW5kZXJlZFxuICAgICAgICBmb3IgKGkgPSAwLCBqID0gdGhpcy5jaGlsZHJlbi5sZW5ndGg7IGkgPCBqOyBpKyspXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuY2hpbGRyZW5baV0ucmVuZGVyV2ViR0wocmVuZGVyZXIpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmVuZGVyZXIuY3VycmVudFJlbmRlcmVyLmZsdXNoKCk7XG5cbiAgICAgICAgaWYgKHRoaXMuX21hc2spXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJlbmRlcmVyLm1hc2tNYW5hZ2VyLnBvcE1hc2sodGhpcywgdGhpcy5fbWFzayk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5fZmlsdGVycylcbiAgICAgICAge1xuICAgICAgICAgICAgcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5wb3BGaWx0ZXIoKTtcblxuICAgICAgICB9XG4gICAgICAgIHJlbmRlcmVyLmN1cnJlbnRSZW5kZXJlci5zdGFydCgpO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICB0aGlzLl9yZW5kZXJXZWJHTChyZW5kZXJlcik7XG5cbiAgICAgICAgLy8gc2ltcGxlIHJlbmRlciBjaGlsZHJlbiFcbiAgICAgICAgZm9yIChpID0gMCwgaiA9IHRoaXMuY2hpbGRyZW4ubGVuZ3RoOyBpIDwgajsgKytpKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmNoaWxkcmVuW2ldLnJlbmRlcldlYkdMKHJlbmRlcmVyKTtcbiAgICAgICAgfVxuICAgIH1cbn07XG5cbi8qKlxuICogVG8gYmUgb3ZlcnJpZGRlbiBieSB0aGUgc3ViY2xhc3NcbiAqXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcn0gVGhlIHJlbmRlcmVyXG4gKiBAcHJpdmF0ZVxuICovXG5Db250YWluZXIucHJvdG90eXBlLl9yZW5kZXJXZWJHTCA9IGZ1bmN0aW9uIChyZW5kZXJlcikgLy8ganNoaW50IHVudXNlZDpmYWxzZVxue1xuICAgIC8vIHRoaXMgaXMgd2hlcmUgY29udGVudCBpdHNlbGYgZ2V0cyByZW5kZXJlZC4uLlxufTtcblxuLyoqXG4gKiBUbyBiZSBvdmVycmlkZGVuIGJ5IHRoZSBzdWJjbGFzc1xuICpcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5DYW52YXNSZW5kZXJlcn0gVGhlIHJlbmRlcmVyXG4gKiBAcHJpdmF0ZVxuICovXG5Db250YWluZXIucHJvdG90eXBlLl9yZW5kZXJDYW52YXMgPSBmdW5jdGlvbiAocmVuZGVyZXIpIC8vIGpzaGludCB1bnVzZWQ6ZmFsc2VcbntcbiAgICAvLyB0aGlzIGlzIHdoZXJlIGNvbnRlbnQgaXRzZWxmIGdldHMgcmVuZGVyZWQuLi5cbn07XG5cblxuLyoqXG4gKiBSZW5kZXJzIHRoZSBvYmplY3QgdXNpbmcgdGhlIENhbnZhcyByZW5kZXJlclxuICpcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5DYW52YXNSZW5kZXJlcn0gVGhlIHJlbmRlcmVyXG4gKi9cbkNvbnRhaW5lci5wcm90b3R5cGUucmVuZGVyQ2FudmFzID0gZnVuY3Rpb24gKHJlbmRlcmVyKVxue1xuICAgIC8vIGlmIG5vdCB2aXNpYmxlIG9yIHRoZSBhbHBoYSBpcyAwIHRoZW4gbm8gbmVlZCB0byByZW5kZXIgdGhpc1xuICAgIGlmICghdGhpcy52aXNpYmxlIHx8IHRoaXMuYWxwaGEgPD0gMCB8fCAhdGhpcy5yZW5kZXJhYmxlKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICh0aGlzLl9tYXNrKVxuICAgIHtcbiAgICAgICAgcmVuZGVyZXIubWFza01hbmFnZXIucHVzaE1hc2sodGhpcy5fbWFzaywgcmVuZGVyZXIpO1xuICAgIH1cblxuICAgIHRoaXMuX3JlbmRlckNhbnZhcyhyZW5kZXJlcik7XG4gICAgZm9yICh2YXIgaSA9IDAsIGogPSB0aGlzLmNoaWxkcmVuLmxlbmd0aDsgaSA8IGo7ICsraSlcbiAgICB7XG4gICAgICAgIHRoaXMuY2hpbGRyZW5baV0ucmVuZGVyQ2FudmFzKHJlbmRlcmVyKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5fbWFzaylcbiAgICB7XG4gICAgICAgIHJlbmRlcmVyLm1hc2tNYW5hZ2VyLnBvcE1hc2socmVuZGVyZXIpO1xuICAgIH1cbn07XG5cbi8qKlxuICogRGVzdHJveXMgdGhlIGNvbnRhaW5lclxuICogQHBhcmFtIFtkZXN0cm95Q2hpbGRyZW49ZmFsc2VdIHtib29sZWFufSBpZiBzZXQgdG8gdHJ1ZSwgYWxsIHRoZSBjaGlsZHJlbiB3aWxsIGhhdmUgdGhlaXIgZGVzdHJveSBtZXRob2QgY2FsbGVkIGFzIHdlbGxcbiAqL1xuQ29udGFpbmVyLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKGRlc3Ryb3lDaGlsZHJlbilcbntcbiAgICBEaXNwbGF5T2JqZWN0LnByb3RvdHlwZS5kZXN0cm95LmNhbGwodGhpcyk7XG5cbiAgICBpZiAoZGVzdHJveUNoaWxkcmVuKVxuICAgIHtcbiAgICAgICAgZm9yICh2YXIgaSA9IDAsIGogPSB0aGlzLmNoaWxkcmVuLmxlbmd0aDsgaSA8IGo7ICsraSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5jaGlsZHJlbltpXS5kZXN0cm95KGRlc3Ryb3lDaGlsZHJlbik7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLnJlbW92ZUNoaWxkcmVuKCk7XG5cbiAgICB0aGlzLmNoaWxkcmVuID0gbnVsbDtcbn07XG4iLCJ2YXIgbWF0aCA9IHJlcXVpcmUoJy4uL21hdGgnKSxcbiAgICBSZW5kZXJUZXh0dXJlID0gcmVxdWlyZSgnLi4vdGV4dHVyZXMvUmVuZGVyVGV4dHVyZScpLFxuICAgIEV2ZW50RW1pdHRlciA9IHJlcXVpcmUoJ2V2ZW50ZW1pdHRlcjMnKSxcbiAgICBDT05TVCA9IHJlcXVpcmUoJy4uL2NvbnN0JyksXG4gICAgX3RlbXBNYXRyaXggPSBuZXcgbWF0aC5NYXRyaXgoKSxcbiAgICBfdGVtcERpc3BsYXlPYmplY3RQYXJlbnQgPSB7d29ybGRUcmFuc2Zvcm06bmV3IG1hdGguTWF0cml4KCksIHdvcmxkQWxwaGE6MSwgY2hpbGRyZW46W119O1xuXG5cbi8qKlxuICogVGhlIGJhc2UgY2xhc3MgZm9yIGFsbCBvYmplY3RzIHRoYXQgYXJlIHJlbmRlcmVkIG9uIHRoZSBzY3JlZW4uXG4gKiBUaGlzIGlzIGFuIGFic3RyYWN0IGNsYXNzIGFuZCBzaG91bGQgbm90IGJlIHVzZWQgb24gaXRzIG93biByYXRoZXIgaXQgc2hvdWxkIGJlIGV4dGVuZGVkLlxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgRXZlbnRFbWl0dGVyXG4gKiBAbWVtYmVyb2YgUElYSVxuICovXG5mdW5jdGlvbiBEaXNwbGF5T2JqZWN0KClcbntcbiAgICBFdmVudEVtaXR0ZXIuY2FsbCh0aGlzKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBjb29yZGluYXRlIG9mIHRoZSBvYmplY3QgcmVsYXRpdmUgdG8gdGhlIGxvY2FsIGNvb3JkaW5hdGVzIG9mIHRoZSBwYXJlbnQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlBvaW50fVxuICAgICAqL1xuICAgIHRoaXMucG9zaXRpb24gPSBuZXcgbWF0aC5Qb2ludCgpO1xuICAgIHRoaXMuX3Bvc2l0aW9uID0gbmV3IENhY2hlUG9pbnQodGhpcyk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgc2NhbGUgZmFjdG9yIG9mIHRoZSBvYmplY3QuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlBvaW50fVxuICAgICAqL1xuICAgIHRoaXMuc2NhbGUgPSBuZXcgbWF0aC5Qb2ludCgxLCAxKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBwaXZvdCBwb2ludCBvZiB0aGUgZGlzcGxheU9iamVjdCB0aGF0IGl0IHJvdGF0ZXMgYXJvdW5kXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlBvaW50fVxuICAgICAqL1xuICAgIHRoaXMucGl2b3QgPSBuZXcgbWF0aC5Qb2ludCgwLCAwKTtcblxuXG4gICAgLyoqXG4gICAgICogVGhlIHNrZXcgZmFjdG9yIGZvciB0aGUgb2JqZWN0IGluIHJhZGlhbnMuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlBvaW50fVxuICAgICAqL1xuICAgIHRoaXMuc2tldyA9IG5ldyBtYXRoLlBvaW50KDAsIDApO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHJvdGF0aW9uIG9mIHRoZSBvYmplY3QgaW4gcmFkaWFucy5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLl9yb3RhdGlvbiA9IDA7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgb3BhY2l0eSBvZiB0aGUgb2JqZWN0LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMuYWxwaGEgPSAxO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHZpc2liaWxpdHkgb2YgdGhlIG9iamVjdC4gSWYgZmFsc2UgdGhlIG9iamVjdCB3aWxsIG5vdCBiZSBkcmF3biwgYW5kXG4gICAgICogdGhlIHVwZGF0ZVRyYW5zZm9ybSBmdW5jdGlvbiB3aWxsIG5vdCBiZSBjYWxsZWQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqL1xuICAgIHRoaXMudmlzaWJsZSA9IHRydWU7XG5cbiAgICAvKipcbiAgICAgKiBDYW4gdGhpcyBvYmplY3QgYmUgcmVuZGVyZWQsIGlmIGZhbHNlIHRoZSBvYmplY3Qgd2lsbCBub3QgYmUgZHJhd24gYnV0IHRoZSB1cGRhdGVUcmFuc2Zvcm1cbiAgICAgKiBtZXRob2RzIHdpbGwgc3RpbGwgYmUgY2FsbGVkLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKi9cbiAgICB0aGlzLnJlbmRlcmFibGUgPSB0cnVlO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGRpc3BsYXkgb2JqZWN0IGNvbnRhaW5lciB0aGF0IGNvbnRhaW5zIHRoaXMgZGlzcGxheSBvYmplY3QuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLkNvbnRhaW5lcn1cbiAgICAgKiBAcmVhZE9ubHlcbiAgICAgKi9cbiAgICB0aGlzLnBhcmVudCA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgbXVsdGlwbGllZCBhbHBoYSBvZiB0aGUgZGlzcGxheU9iamVjdFxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEByZWFkT25seVxuICAgICAqL1xuICAgIHRoaXMud29ybGRBbHBoYSA9IDE7XG5cbiAgICAvKipcbiAgICAgKiBDdXJyZW50IHRyYW5zZm9ybSBvZiB0aGUgb2JqZWN0IGJhc2VkIG9uIHdvcmxkIChwYXJlbnQpIGZhY3RvcnNcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuTWF0cml4fVxuICAgICAqIEByZWFkT25seVxuICAgICAqL1xuICAgIHRoaXMud29ybGRUcmFuc2Zvcm0gPSBuZXcgbWF0aC5NYXRyaXgoKTtcbiAgICB0aGlzLmxvY2FsVHJhbnNmb3JtID0gbmV3IG1hdGguTWF0cml4KCk7XG5cblxuICAgIC8qKlxuICAgICAqIFRoZSBhcmVhIHRoZSBmaWx0ZXIgaXMgYXBwbGllZCB0by4gVGhpcyBpcyB1c2VkIGFzIG1vcmUgb2YgYW4gb3B0aW1pc2F0aW9uXG4gICAgICogcmF0aGVyIHRoYW4gZmlndXJpbmcgb3V0IHRoZSBkaW1lbnNpb25zIG9mIHRoZSBkaXNwbGF5T2JqZWN0IGVhY2ggZnJhbWUgeW91IGNhbiBzZXQgdGhpcyByZWN0YW5nbGVcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuUmVjdGFuZ2xlfVxuICAgICAqL1xuICAgIHRoaXMuZmlsdGVyQXJlYSA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBjYWNoZWQgc2luIHJvdGF0aW9uXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9zciA9IDA7XG5cbiAgICAvKipcbiAgICAgKiBjYWNoZWQgY29zIHJvdGF0aW9uXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9jciA9IDE7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgb3JpZ2luYWwsIGNhY2hlZCBib3VuZHMgb2YgdGhlIG9iamVjdFxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5SZWN0YW5nbGV9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9ib3VuZHMgPSBuZXcgbWF0aC5SZWN0YW5nbGUoMCwgMCwgMSwgMSk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgbW9zdCB1cC10by1kYXRlIGJvdW5kcyBvZiB0aGUgb2JqZWN0XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlJlY3RhbmdsZX1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX2N1cnJlbnRCb3VuZHMgPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogVGhlIG9yaWdpbmFsLCBjYWNoZWQgbWFzayBvZiB0aGUgb2JqZWN0XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlJlY3RhbmdsZX1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX21hc2sgPSBudWxsO1xuXG4gICAgdGhpcy5kaXJ0eVRyYW5zZm9ybSA9IHRydWU7XG59XG5cbi8vIGNvbnN0cnVjdG9yXG5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoRXZlbnRFbWl0dGVyLnByb3RvdHlwZSk7XG5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IERpc3BsYXlPYmplY3Q7XG5tb2R1bGUuZXhwb3J0cyA9IERpc3BsYXlPYmplY3Q7XG5cbnZhciBDYWNoZVBvaW50ID0gZnVuY3Rpb24oZG9jKXtcbiAgICBcbiAgICB0aGlzLmRvYyA9IGRvYztcblxuICAgIHRoaXMueCA9IDA7XG4gICAgdGhpcy55ID0gMDtcbn1cblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoQ2FjaGVQb2ludC5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBUaGUgcG9zaXRpb24gb2YgdGhlIGRpc3BsYXlPYmplY3Qgb24gdGhlIHggYXhpcyByZWxhdGl2ZSB0byB0aGUgbG9jYWwgY29vcmRpbmF0ZXMgb2YgdGhlIHBhcmVudC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5EaXNwbGF5T2JqZWN0I1xuICAgICAqL1xuICAgIHg6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5kb2MucG9zaXRpb24ueDtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuZG9jLnBvc2l0aW9uLnggPSB2YWx1ZTtcbiAgICAgICAgICAgIHRoaXMuZG9jLmRpcnR5VHJhbnNmb3JtID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICB5OiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZG9jLnBvc2lpdG9uLnk7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmRvYy5wb3NpdGlvbi55ID0gdmFsdWU7XG4gICAgICAgICAgICB0aGlzLmRvYy5kaXJ0eVRyYW5zZm9ybSA9IHRydWU7XG4gICAgICAgIH1cbiAgICB9XG59KTtcblxuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhEaXNwbGF5T2JqZWN0LnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFRoZSBwb3NpdGlvbiBvZiB0aGUgZGlzcGxheU9iamVjdCBvbiB0aGUgeCBheGlzIHJlbGF0aXZlIHRvIHRoZSBsb2NhbCBjb29yZGluYXRlcyBvZiB0aGUgcGFyZW50LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLkRpc3BsYXlPYmplY3QjXG4gICAgICovXG4gICAgeDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnBvc2l0aW9uLng7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnBvc2l0aW9uLnggPSB2YWx1ZTtcbiAgICAgICAgICAgIHRoaXMuZGlydHlUcmFuc2Zvcm0gPSB0cnVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFRoZSBwb3NpdGlvbiBvZiB0aGUgZGlzcGxheU9iamVjdCBvbiB0aGUgeSBheGlzIHJlbGF0aXZlIHRvIHRoZSBsb2NhbCBjb29yZGluYXRlcyBvZiB0aGUgcGFyZW50LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLkRpc3BsYXlPYmplY3QjXG4gICAgICovXG4gICAgeToge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnBvc2l0aW9uLnk7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnBvc2l0aW9uLnkgPSB2YWx1ZTtcbiAgICAgICAgICAgIHRoaXMuZGlydHlUcmFuc2Zvcm0gPSB0cnVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIHNjYWxlWDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnNjYWxlLng7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnNjYWxlLnggPSB2YWx1ZTtcbiAgICAgICAgICAgIHRoaXMuZGlydHlUcmFuc2Zvcm0gPSB0cnVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFRoZSBwb3NpdGlvbiBvZiB0aGUgZGlzcGxheU9iamVjdCBvbiB0aGUgeSBheGlzIHJlbGF0aXZlIHRvIHRoZSBsb2NhbCBjb29yZGluYXRlcyBvZiB0aGUgcGFyZW50LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLkRpc3BsYXlPYmplY3QjXG4gICAgICovXG4gICAgc2NhbGVZOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuc2NhbGUueTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuc2NhbGUueSA9IHZhbHVlO1xuICAgICAgICAgICAgdGhpcy5kaXJ0eVRyYW5zZm9ybSA9IHRydWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgcm90YXRpb246IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fcm90YXRpb247XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLl9yb3RhdGlvbiA9IHZhbHVlO1xuICAgICAgICAgICAgdGhpcy5kaXJ0eVRyYW5zZm9ybSA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLl9zciA9IE1hdGguc2luKHZhbHVlKTtcbiAgICAgICAgICAgIHRoaXMuX2NyID0gTWF0aC5jb3ModmFsdWUpO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFRoZSBwb3NpdGlvbiBvZiB0aGUgZGlzcGxheU9iamVjdCBvbiB0aGUgeSBheGlzIHJlbGF0aXZlIHRvIHRoZSBsb2NhbCBjb29yZGluYXRlcyBvZiB0aGUgcGFyZW50LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLkRpc3BsYXlPYmplY3QjXG4gICAgICovXG4gICAgc2NhbGVZOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuc2NhbGUueTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuc2NhbGUueSA9IHZhbHVlO1xuICAgICAgICAgICAgdGhpcy5kaXJ0eVRyYW5zZm9ybSA9IHRydWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogSW5kaWNhdGVzIGlmIHRoZSBzcHJpdGUgaXMgZ2xvYmFsbHkgdmlzaWJsZS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICogQG1lbWJlcm9mIFBJWEkuRGlzcGxheU9iamVjdCNcbiAgICAgKiBAcmVhZG9ubHlcbiAgICAgKi9cbiAgICB3b3JsZFZpc2libGU6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICB2YXIgaXRlbSA9IHRoaXM7XG5cbiAgICAgICAgICAgIGRvIHtcbiAgICAgICAgICAgICAgICBpZiAoIWl0ZW0udmlzaWJsZSlcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpdGVtID0gaXRlbS5wYXJlbnQ7XG4gICAgICAgICAgICB9IHdoaWxlIChpdGVtKTtcblxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogU2V0cyBhIG1hc2sgZm9yIHRoZSBkaXNwbGF5T2JqZWN0LiBBIG1hc2sgaXMgYW4gb2JqZWN0IHRoYXQgbGltaXRzIHRoZSB2aXNpYmlsaXR5IG9mIGFuIG9iamVjdCB0byB0aGUgc2hhcGUgb2YgdGhlIG1hc2sgYXBwbGllZCB0byBpdC5cbiAgICAgKiBJbiBQSVhJIGEgcmVndWxhciBtYXNrIG11c3QgYmUgYSBQSVhJLkdyYXBoaWNzIG9yIGEgUElYSS5TcHJpdGUgb2JqZWN0LiBUaGlzIGFsbG93cyBmb3IgbXVjaCBmYXN0ZXIgbWFza2luZyBpbiBjYW52YXMgYXMgaXQgdXRpbGlzZXMgc2hhcGUgY2xpcHBpbmcuXG4gICAgICogVG8gcmVtb3ZlIGEgbWFzaywgc2V0IHRoaXMgcHJvcGVydHkgdG8gbnVsbC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuR3JhcGhpY3N8UElYSS5TcHJpdGV9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuRGlzcGxheU9iamVjdCNcbiAgICAgKi9cbiAgICBtYXNrOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX21hc2s7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICBpZiAodGhpcy5fbWFzaylcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9tYXNrLnJlbmRlcmFibGUgPSB0cnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLl9tYXNrID0gdmFsdWU7XG5cbiAgICAgICAgICAgIGlmICh0aGlzLl9tYXNrKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHRoaXMuX21hc2sucmVuZGVyYWJsZSA9IGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIGZpbHRlcnMgZm9yIHRoZSBkaXNwbGF5T2JqZWN0LlxuICAgICAqICogSU1QT1JUQU5UOiBUaGlzIGlzIGEgd2ViR0wgb25seSBmZWF0dXJlIGFuZCB3aWxsIGJlIGlnbm9yZWQgYnkgdGhlIGNhbnZhcyByZW5kZXJlci5cbiAgICAgKiBUbyByZW1vdmUgZmlsdGVycyBzaW1wbHkgc2V0IHRoaXMgcHJvcGVydHkgdG8gJ251bGwnXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLkFic3RyYWN0RmlsdGVyW119XG4gICAgICogQG1lbWJlcm9mIFBJWEkuRGlzcGxheU9iamVjdCNcbiAgICAgKi9cbiAgICBmaWx0ZXJzOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2ZpbHRlcnMgJiYgdGhpcy5fZmlsdGVycy5zbGljZSgpO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5fZmlsdGVycyA9IHZhbHVlICYmIHZhbHVlLnNsaWNlKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbn0pO1xuXG4vKlxuICogVXBkYXRlcyB0aGUgb2JqZWN0IHRyYW5zZm9ybSBmb3IgcmVuZGVyaW5nXG4gKlxuICogVE9ETyAtIE9wdGltaXphdGlvbiBwYXNzIVxuICovXG5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS51cGRhdGVUcmFuc2Zvcm0gPSBmdW5jdGlvbiAoKVxue1xuICAgIHZhciBwdCA9IHRoaXMucGFyZW50LndvcmxkVHJhbnNmb3JtO1xuICAgIHZhciB3dCA9IHRoaXMud29ybGRUcmFuc2Zvcm07XG4gICAgdmFyIGx0ID0gdGhpcy5sb2NhbFRyYW5zZm9ybTtcblxuICAgIGlmKHRoaXMuZGlydHlUcmFuc2Zvcm0pXG4gICAge1xuICAgICAgICAvLyBnZXQgdGhlIG1hdHJpeCB2YWx1ZXMgb2YgdGhlIGRpc3BsYXlvYmplY3QgYmFzZWQgb24gaXRzIHRyYW5zZm9ybSBwcm9wZXJ0aWVzLi5cbiAgICAgICAgbHQuYSAgPSAgdGhpcy5fY3IgKiB0aGlzLnNjYWxlLng7XG4gICAgICAgIGx0LmIgID0gIHRoaXMuX3NyICogdGhpcy5zY2FsZS54O1xuICAgICAgICBsdC5jICA9IC10aGlzLl9zciAqIHRoaXMuc2NhbGUueTtcbiAgICAgICAgbHQuZCAgPSAgdGhpcy5fY3IgKiB0aGlzLnNjYWxlLnk7XG4gICAgICAgIGx0LnR4ID0gIHRoaXMucG9zaXRpb24ueCAtICh0aGlzLnBpdm90LnggKiBsdC5hICsgdGhpcy5waXZvdC55ICogbHQuYyk7XG4gICAgICAgIGx0LnR5ID0gIHRoaXMucG9zaXRpb24ueSAtICh0aGlzLnBpdm90LnggKiBsdC5iICsgdGhpcy5waXZvdC55ICogbHQuZCk7XG4gICAgfVxuXG4gICAgaWYodGhpcy5kaXJ0eVRyYW5zZm9ybSB8fCB0aGlzLnBhcmVudC5kaXJ0eVRyYW5zZm9ybSlcbiAgICB7ICAgICAgXG4gICAgICAgIC8vIGNvbmNhdCB0aGUgcGFyZW50IG1hdHJpeCB3aXRoIHRoZSBvYmplY3RzIHRyYW5zZm9ybS5cbiAgICAgICAgd3QuYSAgPSBsdC5hICAqIHB0LmEgKyBsdC5iICAqIHB0LmM7XG4gICAgICAgIHd0LmIgID0gbHQuYSAgKiBwdC5iICsgbHQuYiAgKiBwdC5kO1xuICAgICAgICB3dC5jICA9IGx0LmMgICogcHQuYSArIGx0LmQgICogcHQuYztcbiAgICAgICAgd3QuZCAgPSBsdC5jICAqIHB0LmIgKyBsdC5kICAqIHB0LmQ7XG4gICAgICAgIHd0LnR4ID0gbHQudHggKiBwdC5hICsgbHQudHkgKiBwdC5jICsgcHQudHg7XG4gICAgICAgIHd0LnR5ID0gbHQudHggKiBwdC5iICsgbHQudHkgKiBwdC5kICsgcHQudHk7ICAgICAgIFxuICAgIFxuICAgICAgICB0aGlzLl9jdXJyZW50Qm91bmRzID0gbnVsbDtcbiAgICB9XG5cbiAgICAvLyBtdWx0aXBseSB0aGUgYWxwaGFzLi5cbiAgICB0aGlzLndvcmxkQWxwaGEgPSB0aGlzLmFscGhhICogdGhpcy5wYXJlbnQud29ybGRBbHBoYTtcblxuICAgIC8vIHJlc2V0IHRoZSBib3VuZHMgZWFjaCB0aW1lIHRoaXMgaXMgY2FsbGVkIVxuICAgIFxufTtcblxuLy8gcGVyZm9ybWFuY2UgaW5jcmVhc2UgdG8gYXZvaWQgdXNpbmcgY2FsbC4uICgxMHggZmFzdGVyKVxuRGlzcGxheU9iamVjdC5wcm90b3R5cGUuZGlzcGxheU9iamVjdFVwZGF0ZVRyYW5zZm9ybSA9IERpc3BsYXlPYmplY3QucHJvdG90eXBlLnVwZGF0ZVRyYW5zZm9ybTtcblxuLyoqXG4gKlxuICpcbiAqIFJldHJpZXZlcyB0aGUgYm91bmRzIG9mIHRoZSBkaXNwbGF5T2JqZWN0IGFzIGEgcmVjdGFuZ2xlIG9iamVjdFxuICpcbiAqIEBwYXJhbSBtYXRyaXgge1BJWEkuTWF0cml4fVxuICogQHJldHVybiB7UElYSS5SZWN0YW5nbGV9IHRoZSByZWN0YW5ndWxhciBib3VuZGluZyBhcmVhXG4gKi9cbkRpc3BsYXlPYmplY3QucHJvdG90eXBlLmdldEJvdW5kcyA9IGZ1bmN0aW9uIChtYXRyaXgpIC8vIGpzaGludCB1bnVzZWQ6ZmFsc2VcbntcbiAgICByZXR1cm4gbWF0aC5SZWN0YW5nbGUuRU1QVFk7XG59O1xuXG4vKipcbiAqIFJldHJpZXZlcyB0aGUgbG9jYWwgYm91bmRzIG9mIHRoZSBkaXNwbGF5T2JqZWN0IGFzIGEgcmVjdGFuZ2xlIG9iamVjdFxuICpcbiAqIEByZXR1cm4ge1BJWEkuUmVjdGFuZ2xlfSB0aGUgcmVjdGFuZ3VsYXIgYm91bmRpbmcgYXJlYVxuICovXG5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS5nZXRMb2NhbEJvdW5kcyA9IGZ1bmN0aW9uICgpXG57XG4gICAgcmV0dXJuIHRoaXMuZ2V0Qm91bmRzKG1hdGguTWF0cml4LklERU5USVRZKTtcbn07XG5cbi8qKlxuICogQ2FsY3VsYXRlcyB0aGUgZ2xvYmFsIHBvc2l0aW9uIG9mIHRoZSBkaXNwbGF5IG9iamVjdFxuICpcbiAqIEBwYXJhbSBwb3NpdGlvbiB7UElYSS5Qb2ludH0gVGhlIHdvcmxkIG9yaWdpbiB0byBjYWxjdWxhdGUgZnJvbVxuICogQHJldHVybiB7UElYSS5Qb2ludH0gQSBwb2ludCBvYmplY3QgcmVwcmVzZW50aW5nIHRoZSBwb3NpdGlvbiBvZiB0aGlzIG9iamVjdFxuICovXG5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS50b0dsb2JhbCA9IGZ1bmN0aW9uIChwb3NpdGlvbilcbntcbiAgICAvLyB0aGlzIHBhcmVudCBjaGVjayBpcyBmb3IganVzdCBpbiBjYXNlIHRoZSBpdGVtIGlzIGEgcm9vdCBvYmplY3QuXG4gICAgLy8gSWYgaXQgaXMgd2UgbmVlZCB0byBnaXZlIGl0IGEgdGVtcG9yYXJ5IHBhcmVudCBzbyB0aGF0IGRpc3BsYXlPYmplY3RVcGRhdGVUcmFuc2Zvcm0gd29ya3MgY29ycmVjdGx5XG4gICAgLy8gdGhpcyBpcyBtYWlubHkgdG8gYXZvaWQgYSBwYXJlbnQgY2hlY2sgaW4gdGhlIG1haW4gbG9vcC4gRXZlcnkgbGl0dGxlIGhlbHBzIGZvciBwZXJmb3JtYW5jZSA6KVxuICAgIGlmKCF0aGlzLnBhcmVudClcbiAgICB7XG4gICAgICAgIHRoaXMucGFyZW50ID0gX3RlbXBEaXNwbGF5T2JqZWN0UGFyZW50O1xuICAgICAgICB0aGlzLmRpc3BsYXlPYmplY3RVcGRhdGVUcmFuc2Zvcm0oKTtcbiAgICAgICAgdGhpcy5wYXJlbnQgPSBudWxsO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICB0aGlzLmRpc3BsYXlPYmplY3RVcGRhdGVUcmFuc2Zvcm0oKTtcbiAgICB9XG5cbiAgICAvLyBkb24ndCBuZWVkIHRvIHVwZGF0ZSB0aGUgbG90XG4gICAgcmV0dXJuIHRoaXMud29ybGRUcmFuc2Zvcm0uYXBwbHkocG9zaXRpb24pO1xufTtcblxuLyoqXG4gKiBDYWxjdWxhdGVzIHRoZSBsb2NhbCBwb3NpdGlvbiBvZiB0aGUgZGlzcGxheSBvYmplY3QgcmVsYXRpdmUgdG8gYW5vdGhlciBwb2ludFxuICpcbiAqIEBwYXJhbSBwb3NpdGlvbiB7UElYSS5Qb2ludH0gVGhlIHdvcmxkIG9yaWdpbiB0byBjYWxjdWxhdGUgZnJvbVxuICogQHBhcmFtIFtmcm9tXSB7UElYSS5EaXNwbGF5T2JqZWN0fSBUaGUgRGlzcGxheU9iamVjdCB0byBjYWxjdWxhdGUgdGhlIGdsb2JhbCBwb3NpdGlvbiBmcm9tXG4gKiBAcGFyYW0gW3BvaW50XSB7UElYSS5Qb2ludH0gQSBQb2ludCBvYmplY3QgaW4gd2hpY2ggdG8gc3RvcmUgdGhlIHZhbHVlLCBvcHRpb25hbCAob3RoZXJ3aXNlIHdpbGwgY3JlYXRlIGEgbmV3IFBvaW50KVxuICogQHJldHVybiB7UElYSS5Qb2ludH0gQSBwb2ludCBvYmplY3QgcmVwcmVzZW50aW5nIHRoZSBwb3NpdGlvbiBvZiB0aGlzIG9iamVjdFxuICovXG5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS50b0xvY2FsID0gZnVuY3Rpb24gKHBvc2l0aW9uLCBmcm9tLCBwb2ludClcbntcbiAgICBpZiAoZnJvbSlcbiAgICB7XG4gICAgICAgIHBvc2l0aW9uID0gZnJvbS50b0dsb2JhbChwb3NpdGlvbik7XG4gICAgfVxuXG4gICAgLy8gdGhpcyBwYXJlbnQgY2hlY2sgaXMgZm9yIGp1c3QgaW4gY2FzZSB0aGUgaXRlbSBpcyBhIHJvb3Qgb2JqZWN0LlxuICAgIC8vIElmIGl0IGlzIHdlIG5lZWQgdG8gZ2l2ZSBpdCBhIHRlbXBvcmFyeSBwYXJlbnQgc28gdGhhdCBkaXNwbGF5T2JqZWN0VXBkYXRlVHJhbnNmb3JtIHdvcmtzIGNvcnJlY3RseVxuICAgIC8vIHRoaXMgaXMgbWFpbmx5IHRvIGF2b2lkIGEgcGFyZW50IGNoZWNrIGluIHRoZSBtYWluIGxvb3AuIEV2ZXJ5IGxpdHRsZSBoZWxwcyBmb3IgcGVyZm9ybWFuY2UgOilcbiAgICBpZighdGhpcy5wYXJlbnQpXG4gICAge1xuICAgICAgICB0aGlzLnBhcmVudCA9IF90ZW1wRGlzcGxheU9iamVjdFBhcmVudDtcbiAgICAgICAgdGhpcy5kaXNwbGF5T2JqZWN0VXBkYXRlVHJhbnNmb3JtKCk7XG4gICAgICAgIHRoaXMucGFyZW50ID0gbnVsbDtcbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgdGhpcy5kaXNwbGF5T2JqZWN0VXBkYXRlVHJhbnNmb3JtKCk7XG4gICAgfVxuXG4gICAgLy8gc2ltcGx5IGFwcGx5IHRoZSBtYXRyaXguLlxuICAgIHJldHVybiB0aGlzLndvcmxkVHJhbnNmb3JtLmFwcGx5SW52ZXJzZShwb3NpdGlvbiwgcG9pbnQpO1xufTtcblxuLyoqXG4gKiBSZW5kZXJzIHRoZSBvYmplY3QgdXNpbmcgdGhlIFdlYkdMIHJlbmRlcmVyXG4gKlxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLldlYkdMUmVuZGVyZXJ9IFRoZSByZW5kZXJlclxuICogQHByaXZhdGVcbiAqL1xuRGlzcGxheU9iamVjdC5wcm90b3R5cGUucmVuZGVyV2ViR0wgPSBmdW5jdGlvbiAocmVuZGVyZXIpIC8vIGpzaGludCB1bnVzZWQ6ZmFsc2VcbntcbiAgICAvLyBPVkVSV1JJVEU7XG59O1xuXG4vKipcbiAqIFJlbmRlcnMgdGhlIG9iamVjdCB1c2luZyB0aGUgQ2FudmFzIHJlbmRlcmVyXG4gKlxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLkNhbnZhc1JlbmRlcmVyfSBUaGUgcmVuZGVyZXJcbiAqIEBwcml2YXRlXG4gKi9cbkRpc3BsYXlPYmplY3QucHJvdG90eXBlLnJlbmRlckNhbnZhcyA9IGZ1bmN0aW9uIChyZW5kZXJlcikgLy8ganNoaW50IHVudXNlZDpmYWxzZVxue1xuICAgIC8vIE9WRVJXUklURTtcbn07XG4vKipcbiAqIFVzZWZ1bCBmdW5jdGlvbiB0aGF0IHJldHVybnMgYSB0ZXh0dXJlIG9mIHRoZSBkaXNwbGF5IG9iamVjdCB0aGF0IGNhbiB0aGVuIGJlIHVzZWQgdG8gY3JlYXRlIHNwcml0ZXNcbiAqIFRoaXMgY2FuIGJlIHF1aXRlIHVzZWZ1bCBpZiB5b3VyIGRpc3BsYXlPYmplY3QgaXMgc3RhdGljIC8gY29tcGxpY2F0ZWQgYW5kIG5lZWRzIHRvIGJlIHJldXNlZCBtdWx0aXBsZSB0aW1lcy5cbiAqXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuQ2FudmFzUmVuZGVyZXJ8UElYSS5XZWJHTFJlbmRlcmVyfSBUaGUgcmVuZGVyZXIgdXNlZCB0byBnZW5lcmF0ZSB0aGUgdGV4dHVyZS5cbiAqIEBwYXJhbSBzY2FsZU1vZGUge251bWJlcn0gU2VlIHtAbGluayBQSVhJLlNDQUxFX01PREVTfSBmb3IgcG9zc2libGUgdmFsdWVzXG4gKiBAcGFyYW0gcmVzb2x1dGlvbiB7bnVtYmVyfSBUaGUgcmVzb2x1dGlvbiBvZiB0aGUgdGV4dHVyZSBiZWluZyBnZW5lcmF0ZWRcbiAqIEByZXR1cm4ge1BJWEkuVGV4dHVyZX0gYSB0ZXh0dXJlIG9mIHRoZSBkaXNwbGF5IG9iamVjdFxuICovXG5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS5nZW5lcmF0ZVRleHR1cmUgPSBmdW5jdGlvbiAocmVuZGVyZXIsIHNjYWxlTW9kZSwgcmVzb2x1dGlvbilcbntcbiAgICB2YXIgYm91bmRzID0gdGhpcy5nZXRMb2NhbEJvdW5kcygpO1xuXG4gICAgdmFyIHJlbmRlclRleHR1cmUgPSBuZXcgUmVuZGVyVGV4dHVyZShyZW5kZXJlciwgYm91bmRzLndpZHRoIHwgMCwgYm91bmRzLmhlaWdodCB8IDAsIHNjYWxlTW9kZSwgcmVzb2x1dGlvbik7XG5cbiAgICBfdGVtcE1hdHJpeC50eCA9IC1ib3VuZHMueDtcbiAgICBfdGVtcE1hdHJpeC50eSA9IC1ib3VuZHMueTtcblxuICAgIHJlbmRlclRleHR1cmUucmVuZGVyKHRoaXMsIF90ZW1wTWF0cml4KTtcblxuICAgIHJldHVybiByZW5kZXJUZXh0dXJlO1xufTtcblxuLyoqXG4gKiBTZXQgdGhlIHBhcmVudCBDb250YWluZXIgb2YgdGhpcyBEaXNwbGF5T2JqZWN0XG4gKlxuICogQHBhcmFtIGNvbnRhaW5lciB7Q29udGFpbmVyfSBUaGUgQ29udGFpbmVyIHRvIGFkZCB0aGlzIERpc3BsYXlPYmplY3QgdG9cbiAqIEByZXR1cm4ge0NvbnRhaW5lcn0gVGhlIENvbnRhaW5lciB0aGF0IHRoaXMgRGlzcGxheU9iamVjdCB3YXMgYWRkZWQgdG9cbiAqL1xuRGlzcGxheU9iamVjdC5wcm90b3R5cGUuc2V0UGFyZW50ID0gZnVuY3Rpb24gKGNvbnRhaW5lcilcbntcbiAgICBpZiAoIWNvbnRhaW5lciB8fCAhY29udGFpbmVyLmFkZENoaWxkKVxuICAgIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdzZXRQYXJlbnQ6IEFyZ3VtZW50IG11c3QgYmUgYSBDb250YWluZXInKTtcbiAgICB9XG5cbiAgICBjb250YWluZXIuYWRkQ2hpbGQodGhpcyk7XG4gICAgcmV0dXJuIGNvbnRhaW5lcjtcbn07XG5cbi8qKlxuICogQ29udmVuaWVuY2UgZnVuY3Rpb24gdG8gc2V0IHRoZSBwb3N0aW9uLCBzY2FsZSwgc2tldyBhbmQgcGl2b3QgYXQgb25jZS5cbiAqXG4gKiBAcGFyYW0gW3g9MF0ge251bWJlcn0gVGhlIFggcG9zaXRpb25cbiAqIEBwYXJhbSBbeT0wXSB7bnVtYmVyfSBUaGUgWSBwb3NpdGlvblxuICogQHBhcmFtIFtzY2FsZVg9MV0ge251bWJlcn0gVGhlIFggc2NhbGUgdmFsdWVcbiAqIEBwYXJhbSBbc2NhbGVZPTFdIHtudW1iZXJ9IFRoZSBZIHNjYWxlIHZhbHVlXG4gKiBAcGFyYW0gW3JvdGF0aW9uPTBdIHtudW1iZXJ9IFRoZSByb3RhdGlvblxuICogQHBhcmFtIFtza2V3WD0wXSB7bnVtYmVyfSBUaGUgWCBza2V3IHZhbHVlXG4gKiBAcGFyYW0gW3NrZXdZPTBdIHtudW1iZXJ9IFRoZSBZIHNrZXcgdmFsdWVcbiAqIEBwYXJhbSBbcGl2b3RYPTBdIHtudW1iZXJ9IFRoZSBYIHBpdm90IHZhbHVlXG4gKiBAcGFyYW0gW3Bpdm90WT0wXSB7bnVtYmVyfSBUaGUgWSBwaXZvdCB2YWx1ZVxuICogQHJldHVybiB7UElYSS5EaXNwbGF5T2JqZWN0fVxuICovXG5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS5zZXRUcmFuc2Zvcm0gPSBmdW5jdGlvbih4LCB5LCBzY2FsZVgsIHNjYWxlWSwgcm90YXRpb24sIHNrZXdYLCBza2V3WSwgcGl2b3RYLCBwaXZvdFkpIC8vanNoaW50IGlnbm9yZTpsaW5lXG57XG4gICAgdGhpcy5wb3NpdGlvbi54ID0geCB8fCAwO1xuICAgIHRoaXMucG9zaXRpb24ueSA9IHkgfHwgMDtcbiAgICB0aGlzLnNjYWxlLnggPSAhc2NhbGVYID8gMSA6IHNjYWxlWDtcbiAgICB0aGlzLnNjYWxlLnkgPSAhc2NhbGVZID8gMSA6IHNjYWxlWTtcbiAgICB0aGlzLnJvdGF0aW9uID0gcm90YXRpb24gfHwgMDtcbiAgICB0aGlzLnNrZXcueCA9IHNrZXdYIHx8IDA7XG4gICAgdGhpcy5za2V3LnkgPSBza2V3WSB8fCAwO1xuICAgIHRoaXMucGl2b3QueCA9IHBpdm90WCB8fCAwO1xuICAgIHRoaXMucGl2b3QueSA9IHBpdm90WSB8fCAwO1xuICAgIHRoaXMuZGlydHlUcmFuc2Zvcm0gPSB0cnVlO1xuICAgIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBCYXNlIGRlc3Ryb3kgbWV0aG9kIGZvciBnZW5lcmljIGRpc3BsYXkgb2JqZWN0c1xuICpcbiAqL1xuRGlzcGxheU9iamVjdC5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uICgpXG57XG5cbiAgICB0aGlzLnBvc2l0aW9uID0gbnVsbDtcbiAgICB0aGlzLnNjYWxlID0gbnVsbDtcbiAgICB0aGlzLnBpdm90ID0gbnVsbDtcbiAgICB0aGlzLnNrZXcgPSBudWxsO1xuXG4gICAgdGhpcy5wYXJlbnQgPSBudWxsO1xuXG4gICAgdGhpcy5fYm91bmRzID0gbnVsbDtcbiAgICB0aGlzLl9jdXJyZW50Qm91bmRzID0gbnVsbDtcbiAgICB0aGlzLl9tYXNrID0gbnVsbDtcblxuICAgIHRoaXMud29ybGRUcmFuc2Zvcm0gPSBudWxsO1xuICAgIHRoaXMuZmlsdGVyQXJlYSA9IG51bGw7XG59O1xuIiwidmFyIENvbnRhaW5lciA9IHJlcXVpcmUoJy4uL2Rpc3BsYXkvQ29udGFpbmVyJyksXG4gICAgVGV4dHVyZSA9IHJlcXVpcmUoJy4uL3RleHR1cmVzL1RleHR1cmUnKSxcbiAgICBDYW52YXNCdWZmZXIgPSByZXF1aXJlKCcuLi9yZW5kZXJlcnMvY2FudmFzL3V0aWxzL0NhbnZhc0J1ZmZlcicpLFxuICAgIENhbnZhc0dyYXBoaWNzID0gcmVxdWlyZSgnLi4vcmVuZGVyZXJzL2NhbnZhcy91dGlscy9DYW52YXNHcmFwaGljcycpLFxuICAgIEdyYXBoaWNzRGF0YSA9IHJlcXVpcmUoJy4vR3JhcGhpY3NEYXRhJyksXG4gICAgbWF0aCA9IHJlcXVpcmUoJy4uL21hdGgnKSxcbiAgICBDT05TVCA9IHJlcXVpcmUoJy4uL2NvbnN0JyksXG4gICAgdGVtcFBvaW50ID0gbmV3IG1hdGguUG9pbnQoKTtcblxuLyoqXG4gKiBUaGUgR3JhcGhpY3MgY2xhc3MgY29udGFpbnMgbWV0aG9kcyB1c2VkIHRvIGRyYXcgcHJpbWl0aXZlIHNoYXBlcyBzdWNoIGFzIGxpbmVzLCBjaXJjbGVzIGFuZFxuICogcmVjdGFuZ2xlcyB0byB0aGUgZGlzcGxheSwgYW5kIHRvIGNvbG9yIGFuZCBmaWxsIHRoZW0uXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLkNvbnRhaW5lclxuICogQG1lbWJlcm9mIFBJWElcbiAqL1xuZnVuY3Rpb24gR3JhcGhpY3MoKVxue1xuICAgIENvbnRhaW5lci5jYWxsKHRoaXMpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGFscGhhIHZhbHVlIHVzZWQgd2hlbiBmaWxsaW5nIHRoZSBHcmFwaGljcyBvYmplY3QuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMVxuICAgICAqL1xuICAgIHRoaXMuZmlsbEFscGhhID0gMTtcblxuICAgIC8qKlxuICAgICAqIFRoZSB3aWR0aCAodGhpY2tuZXNzKSBvZiBhbnkgbGluZXMgZHJhd24uXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMFxuICAgICAqL1xuICAgIHRoaXMubGluZVdpZHRoID0gMDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBjb2xvciBvZiBhbnkgbGluZXMgZHJhd24uXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtzdHJpbmd9XG4gICAgICogQGRlZmF1bHQgMFxuICAgICAqL1xuICAgIHRoaXMubGluZUNvbG9yID0gMDtcblxuICAgIC8qKlxuICAgICAqIEdyYXBoaWNzIGRhdGFcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuR3JhcGhpY3NEYXRhW119XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLmdyYXBoaWNzRGF0YSA9IFtdO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHRpbnQgYXBwbGllZCB0byB0aGUgZ3JhcGhpYyBzaGFwZS4gVGhpcyBpcyBhIGhleCB2YWx1ZS4gQXBwbHkgYSB2YWx1ZSBvZiAweEZGRkZGRiB0byByZXNldCB0aGUgdGludC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAweEZGRkZGRlxuICAgICAqL1xuICAgIHRoaXMudGludCA9IDB4RkZGRkZGO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHByZXZpb3VzIHRpbnQgYXBwbGllZCB0byB0aGUgZ3JhcGhpYyBzaGFwZS4gVXNlZCB0byBjb21wYXJlIHRvIHRoZSBjdXJyZW50IHRpbnQgYW5kIGNoZWNrIGlmIHRoZXJlcyBjaGFuZ2UuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAZGVmYXVsdCAweEZGRkZGRlxuICAgICAqL1xuICAgIHRoaXMuX3ByZXZUaW50ID0gMHhGRkZGRkY7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYmxlbmQgbW9kZSB0byBiZSBhcHBsaWVkIHRvIHRoZSBncmFwaGljIHNoYXBlLiBBcHBseSBhIHZhbHVlIG9mIGBQSVhJLkJMRU5EX01PREVTLk5PUk1BTGAgdG8gcmVzZXQgdGhlIGJsZW5kIG1vZGUuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgUElYSS5CTEVORF9NT0RFUy5OT1JNQUw7XG4gICAgICogQHNlZSBQSVhJLkJMRU5EX01PREVTXG4gICAgICovXG4gICAgdGhpcy5ibGVuZE1vZGUgPSBDT05TVC5CTEVORF9NT0RFUy5OT1JNQUw7XG5cbiAgICAvKipcbiAgICAgKiBDdXJyZW50IHBhdGhcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuR3JhcGhpY3NEYXRhfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5jdXJyZW50UGF0aCA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBBcnJheSBjb250YWluaW5nIHNvbWUgV2ViR0wtcmVsYXRlZCBwcm9wZXJ0aWVzIHVzZWQgYnkgdGhlIFdlYkdMIHJlbmRlcmVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7b2JqZWN0PG51bWJlciwgb2JqZWN0Pn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIC8vIFRPRE8gLSBfd2ViZ2wgc2hvdWxkIHVzZSBhIHByb3RvdHlwZSBvYmplY3QsIG5vdCBhIHJhbmRvbSB1bmRvY3VtZW50ZWQgb2JqZWN0Li4uXG4gICAgdGhpcy5fd2ViR0wgPSB7fTtcblxuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgdGhpcyBzaGFwZSBpcyBiZWluZyB1c2VkIGFzIGEgbWFzay5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICovXG4gICAgdGhpcy5pc01hc2sgPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBib3VuZHMnIHBhZGRpbmcgdXNlZCBmb3IgYm91bmRzIGNhbGN1bGF0aW9uLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMuYm91bmRzUGFkZGluZyA9IDA7XG5cbiAgICAvKipcbiAgICAgKiBBIGNhY2hlIG9mIHRoZSBsb2NhbCBib3VuZHMgdG8gcHJldmVudCByZWNhbGN1bGF0aW9uLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5SZWN0YW5nbGV9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9sb2NhbEJvdW5kcyA9IG5ldyBtYXRoLlJlY3RhbmdsZSgwLDAsMSwxKTtcblxuICAgIC8qKlxuICAgICAqIFVzZWQgdG8gZGV0ZWN0IGlmIHRoZSBncmFwaGljcyBvYmplY3QgaGFzIGNoYW5nZWQuIElmIHRoaXMgaXMgc2V0IHRvIHRydWUgdGhlbiB0aGUgZ3JhcGhpY3NcbiAgICAgKiBvYmplY3Qgd2lsbCBiZSByZWNhbGN1bGF0ZWQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5kaXJ0eSA9IHRydWU7XG5cbiAgICAvKipcbiAgICAgKiBVc2VkIHRvIGRldGVjdCBpZiB0aGUgV2ViR0wgZ3JhcGhpY3Mgb2JqZWN0IGhhcyBjaGFuZ2VkLiBJZiB0aGlzIGlzIHNldCB0byB0cnVlIHRoZW4gdGhlXG4gICAgICogZ3JhcGhpY3Mgb2JqZWN0IHdpbGwgYmUgcmVjYWxjdWxhdGVkLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuZ2xEaXJ0eSA9IGZhbHNlO1xuXG4gICAgdGhpcy5ib3VuZHNEaXJ0eSA9IHRydWU7XG5cbiAgICAvKipcbiAgICAgKiBVc2VkIHRvIGRldGVjdCBpZiB0aGUgY2FjaGVkIHNwcml0ZSBvYmplY3QgbmVlZHMgdG8gYmUgdXBkYXRlZC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLmNhY2hlZFNwcml0ZURpcnR5ID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBXaGVuIGNhY2hlQXNCaXRtYXAgaXMgc2V0IHRvIHRydWUgdGhlIGdyYXBoaWNzIG9iamVjdCB3aWxsIGJlIHJlbmRlcmVkIGFzIGlmIGl0IHdhcyBhIHNwcml0ZS5cbiAgICAgKiBUaGlzIGlzIHVzZWZ1bCBpZiB5b3VyIGdyYXBoaWNzIGVsZW1lbnQgZG9lcyBub3QgY2hhbmdlIG9mdGVuLCBhcyBpdCB3aWxsIHNwZWVkIHVwIHRoZSByZW5kZXJpbmdcbiAgICAgKiBvZiB0aGUgb2JqZWN0IGluIGV4Y2hhbmdlIGZvciB0YWtpbmcgdXAgdGV4dHVyZSBtZW1vcnkuIEl0IGlzIGFsc28gdXNlZnVsIGlmIHlvdSBuZWVkIHRoZSBncmFwaGljc1xuICAgICAqIG9iamVjdCB0byBiZSBhbnRpLWFsaWFzZWQsIGJlY2F1c2UgaXQgd2lsbCBiZSByZW5kZXJlZCB1c2luZyBjYW52YXMuIFRoaXMgaXMgbm90IHJlY29tbWVuZGVkIGlmXG4gICAgICogeW91IGFyZSBjb25zdGFudGx5IHJlZHJhd2luZyB0aGUgZ3JhcGhpY3MgZWxlbWVudC5cbiAgICAgKlxuICAgICAqIEBuYW1lIGNhY2hlQXNCaXRtYXBcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLkdyYXBoaWNzI1xuICAgICAqIEBkZWZhdWx0IGZhbHNlXG4gICAgICovXG59XG5cbi8vIGNvbnN0cnVjdG9yXG5HcmFwaGljcy5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKENvbnRhaW5lci5wcm90b3R5cGUpO1xuR3JhcGhpY3MucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gR3JhcGhpY3M7XG5tb2R1bGUuZXhwb3J0cyA9IEdyYXBoaWNzO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBuZXcgR3JhcGhpY3Mgb2JqZWN0IHdpdGggdGhlIHNhbWUgdmFsdWVzIGFzIHRoaXMgb25lLlxuICogTm90ZSB0aGF0IHRoZSBvbmx5IHRoZSBwcm9wZXJ0aWVzIG9mIHRoZSBvYmplY3QgYXJlIGNsb25lZCwgbm90IGl0cyB0cmFuc2Zvcm0gKHBvc2l0aW9uLHNjYWxlLGV0YylcbiAqXG4gKiBAcmV0dXJuIHtQSVhJLkdyYXBoaWNzfVxuICovXG5HcmFwaGljcy5wcm90b3R5cGUuY2xvbmUgPSBmdW5jdGlvbiAoKVxue1xuICAgIHZhciBjbG9uZSA9IG5ldyBHcmFwaGljcygpO1xuXG4gICAgY2xvbmUucmVuZGVyYWJsZSAgICA9IHRoaXMucmVuZGVyYWJsZTtcbiAgICBjbG9uZS5maWxsQWxwaGEgICAgID0gdGhpcy5maWxsQWxwaGE7XG4gICAgY2xvbmUubGluZVdpZHRoICAgICA9IHRoaXMubGluZVdpZHRoO1xuICAgIGNsb25lLmxpbmVDb2xvciAgICAgPSB0aGlzLmxpbmVDb2xvcjtcbiAgICBjbG9uZS50aW50ICAgICAgICAgID0gdGhpcy50aW50O1xuICAgIGNsb25lLmJsZW5kTW9kZSAgICAgPSB0aGlzLmJsZW5kTW9kZTtcbiAgICBjbG9uZS5pc01hc2sgICAgICAgID0gdGhpcy5pc01hc2s7XG4gICAgY2xvbmUuYm91bmRzUGFkZGluZyA9IHRoaXMuYm91bmRzUGFkZGluZztcbiAgICBjbG9uZS5kaXJ0eSAgICAgICAgID0gdHJ1ZTtcbiAgICBjbG9uZS5nbERpcnR5ICAgICAgID0gdHJ1ZTtcbiAgICBjbG9uZS5jYWNoZWRTcHJpdGVEaXJ0eSA9IHRoaXMuY2FjaGVkU3ByaXRlRGlydHk7XG5cbiAgICAvLyBjb3B5IGdyYXBoaWNzIGRhdGFcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuZ3JhcGhpY3NEYXRhLmxlbmd0aDsgKytpKVxuICAgIHtcbiAgICAgICAgY2xvbmUuZ3JhcGhpY3NEYXRhLnB1c2godGhpcy5ncmFwaGljc0RhdGFbaV0uY2xvbmUoKSk7XG4gICAgfVxuXG4gICAgY2xvbmUuY3VycmVudFBhdGggPSBjbG9uZS5ncmFwaGljc0RhdGFbY2xvbmUuZ3JhcGhpY3NEYXRhLmxlbmd0aCAtIDFdO1xuXG4gICAgY2xvbmUudXBkYXRlTG9jYWxCb3VuZHMoKTtcblxuICAgIHJldHVybiBjbG9uZTtcbn07XG5cbi8qKlxuICogU3BlY2lmaWVzIHRoZSBsaW5lIHN0eWxlIHVzZWQgZm9yIHN1YnNlcXVlbnQgY2FsbHMgdG8gR3JhcGhpY3MgbWV0aG9kcyBzdWNoIGFzIHRoZSBsaW5lVG8oKSBtZXRob2Qgb3IgdGhlIGRyYXdDaXJjbGUoKSBtZXRob2QuXG4gKlxuICogQHBhcmFtIGxpbmVXaWR0aCB7bnVtYmVyfSB3aWR0aCBvZiB0aGUgbGluZSB0byBkcmF3LCB3aWxsIHVwZGF0ZSB0aGUgb2JqZWN0cyBzdG9yZWQgc3R5bGVcbiAqIEBwYXJhbSBjb2xvciB7bnVtYmVyfSBjb2xvciBvZiB0aGUgbGluZSB0byBkcmF3LCB3aWxsIHVwZGF0ZSB0aGUgb2JqZWN0cyBzdG9yZWQgc3R5bGVcbiAqIEBwYXJhbSBhbHBoYSB7bnVtYmVyfSBhbHBoYSBvZiB0aGUgbGluZSB0byBkcmF3LCB3aWxsIHVwZGF0ZSB0aGUgb2JqZWN0cyBzdG9yZWQgc3R5bGVcbiAqIEByZXR1cm4ge1BJWEkuR3JhcGhpY3N9XG4gKi9cbkdyYXBoaWNzLnByb3RvdHlwZS5saW5lU3R5bGUgPSBmdW5jdGlvbiAobGluZVdpZHRoLCBjb2xvciwgYWxwaGEpXG57XG4gICAgdGhpcy5saW5lV2lkdGggPSBsaW5lV2lkdGggfHwgMDtcbiAgICB0aGlzLmxpbmVDb2xvciA9IGNvbG9yIHx8IDA7XG4gICAgdGhpcy5saW5lQWxwaGEgPSAoYWxwaGEgPT09IHVuZGVmaW5lZCkgPyAxIDogYWxwaGE7XG5cbiAgICBpZiAodGhpcy5jdXJyZW50UGF0aClcbiAgICB7XG4gICAgICAgIGlmICh0aGlzLmN1cnJlbnRQYXRoLnNoYXBlLnBvaW50cy5sZW5ndGgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIC8vIGhhbGZ3YXkgdGhyb3VnaCBhIGxpbmU/IHN0YXJ0IGEgbmV3IG9uZSFcbiAgICAgICAgICAgIHZhciBzaGFwZSA9IG5ldyBtYXRoLlBvbHlnb24odGhpcy5jdXJyZW50UGF0aC5zaGFwZS5wb2ludHMuc2xpY2UoLTIpKTtcbiAgICAgICAgICAgIHNoYXBlLmNsb3NlZCA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5kcmF3U2hhcGUoc2hhcGUpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2VcbiAgICAgICAge1xuICAgICAgICAgICAgLy8gb3RoZXJ3aXNlIGl0cyBlbXB0eSBzbyBsZXRzIGp1c3Qgc2V0IHRoZSBsaW5lIHByb3BlcnRpZXNcbiAgICAgICAgICAgIHRoaXMuY3VycmVudFBhdGgubGluZVdpZHRoID0gdGhpcy5saW5lV2lkdGg7XG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRQYXRoLmxpbmVDb2xvciA9IHRoaXMubGluZUNvbG9yO1xuICAgICAgICAgICAgdGhpcy5jdXJyZW50UGF0aC5saW5lQWxwaGEgPSB0aGlzLmxpbmVBbHBoYTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBNb3ZlcyB0aGUgY3VycmVudCBkcmF3aW5nIHBvc2l0aW9uIHRvIHgsIHkuXG4gKlxuICogQHBhcmFtIHgge251bWJlcn0gdGhlIFggY29vcmRpbmF0ZSB0byBtb3ZlIHRvXG4gKiBAcGFyYW0geSB7bnVtYmVyfSB0aGUgWSBjb29yZGluYXRlIHRvIG1vdmUgdG9cbiAqIEByZXR1cm4ge1BJWEkuR3JhcGhpY3N9XG4gICovXG5HcmFwaGljcy5wcm90b3R5cGUubW92ZVRvID0gZnVuY3Rpb24gKHgsIHkpXG57XG4gICAgdmFyIHNoYXBlID0gbmV3IG1hdGguUG9seWdvbihbeCx5XSk7XG4gICAgc2hhcGUuY2xvc2VkID0gZmFsc2U7XG4gICAgdGhpcy5kcmF3U2hhcGUoc2hhcGUpO1xuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIERyYXdzIGEgbGluZSB1c2luZyB0aGUgY3VycmVudCBsaW5lIHN0eWxlIGZyb20gdGhlIGN1cnJlbnQgZHJhd2luZyBwb3NpdGlvbiB0byAoeCwgeSk7XG4gKiBUaGUgY3VycmVudCBkcmF3aW5nIHBvc2l0aW9uIGlzIHRoZW4gc2V0IHRvICh4LCB5KS5cbiAqXG4gKiBAcGFyYW0geCB7bnVtYmVyfSB0aGUgWCBjb29yZGluYXRlIHRvIGRyYXcgdG9cbiAqIEBwYXJhbSB5IHtudW1iZXJ9IHRoZSBZIGNvb3JkaW5hdGUgdG8gZHJhdyB0b1xuICogQHJldHVybiB7UElYSS5HcmFwaGljc31cbiAqL1xuR3JhcGhpY3MucHJvdG90eXBlLmxpbmVUbyA9IGZ1bmN0aW9uICh4LCB5KVxue1xuICAgIHRoaXMuY3VycmVudFBhdGguc2hhcGUucG9pbnRzLnB1c2goeCwgeSk7XG4gICAgdGhpcy5kaXJ0eSA9IHRydWU7XG5cbiAgICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogQ2FsY3VsYXRlIHRoZSBwb2ludHMgZm9yIGEgcXVhZHJhdGljIGJlemllciBjdXJ2ZSBhbmQgdGhlbiBkcmF3cyBpdC5cbiAqIEJhc2VkIG9uOiBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy83ODUwOTcvaG93LWRvLWktaW1wbGVtZW50LWEtYmV6aWVyLWN1cnZlLWluLWNcbiAqXG4gKiBAcGFyYW0gY3BYIHtudW1iZXJ9IENvbnRyb2wgcG9pbnQgeFxuICogQHBhcmFtIGNwWSB7bnVtYmVyfSBDb250cm9sIHBvaW50IHlcbiAqIEBwYXJhbSB0b1gge251bWJlcn0gRGVzdGluYXRpb24gcG9pbnQgeFxuICogQHBhcmFtIHRvWSB7bnVtYmVyfSBEZXN0aW5hdGlvbiBwb2ludCB5XG4gKiBAcmV0dXJuIHtQSVhJLkdyYXBoaWNzfVxuICovXG5HcmFwaGljcy5wcm90b3R5cGUucXVhZHJhdGljQ3VydmVUbyA9IGZ1bmN0aW9uIChjcFgsIGNwWSwgdG9YLCB0b1kpXG57XG4gICAgaWYgKHRoaXMuY3VycmVudFBhdGgpXG4gICAge1xuICAgICAgICBpZiAodGhpcy5jdXJyZW50UGF0aC5zaGFwZS5wb2ludHMubGVuZ3RoID09PSAwKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRQYXRoLnNoYXBlLnBvaW50cyA9IFswLCAwXTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICB0aGlzLm1vdmVUbygwLDApO1xuICAgIH1cblxuICAgIHZhciB4YSxcbiAgICAgICAgeWEsXG4gICAgICAgIG4gPSAyMCxcbiAgICAgICAgcG9pbnRzID0gdGhpcy5jdXJyZW50UGF0aC5zaGFwZS5wb2ludHM7XG5cbiAgICBpZiAocG9pbnRzLmxlbmd0aCA9PT0gMClcbiAgICB7XG4gICAgICAgIHRoaXMubW92ZVRvKDAsIDApO1xuICAgIH1cblxuICAgIHZhciBmcm9tWCA9IHBvaW50c1twb2ludHMubGVuZ3RoLTJdO1xuICAgIHZhciBmcm9tWSA9IHBvaW50c1twb2ludHMubGVuZ3RoLTFdO1xuXG4gICAgdmFyIGogPSAwO1xuICAgIGZvciAodmFyIGkgPSAxOyBpIDw9IG47ICsraSlcbiAgICB7XG4gICAgICAgIGogPSBpIC8gbjtcblxuICAgICAgICB4YSA9IGZyb21YICsgKCAoY3BYIC0gZnJvbVgpICogaiApO1xuICAgICAgICB5YSA9IGZyb21ZICsgKCAoY3BZIC0gZnJvbVkpICogaiApO1xuXG4gICAgICAgIHBvaW50cy5wdXNoKCB4YSArICggKChjcFggKyAoICh0b1ggLSBjcFgpICogaiApKSAtIHhhKSAqIGogKSxcbiAgICAgICAgICAgICAgICAgICAgIHlhICsgKCAoKGNwWSArICggKHRvWSAtIGNwWSkgKiBqICkpIC0geWEpICogaiApICk7XG4gICAgfVxuXG4gICAgdGhpcy5kaXJ0eSA9IHRoaXMuYm91bmRzRGlydHkgPSB0cnVlO1xuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIENhbGN1bGF0ZSB0aGUgcG9pbnRzIGZvciBhIGJlemllciBjdXJ2ZSBhbmQgdGhlbiBkcmF3cyBpdC5cbiAqXG4gKiBAcGFyYW0gY3BYIHtudW1iZXJ9IENvbnRyb2wgcG9pbnQgeFxuICogQHBhcmFtIGNwWSB7bnVtYmVyfSBDb250cm9sIHBvaW50IHlcbiAqIEBwYXJhbSBjcFgyIHtudW1iZXJ9IFNlY29uZCBDb250cm9sIHBvaW50IHhcbiAqIEBwYXJhbSBjcFkyIHtudW1iZXJ9IFNlY29uZCBDb250cm9sIHBvaW50IHlcbiAqIEBwYXJhbSB0b1gge251bWJlcn0gRGVzdGluYXRpb24gcG9pbnQgeFxuICogQHBhcmFtIHRvWSB7bnVtYmVyfSBEZXN0aW5hdGlvbiBwb2ludCB5XG4gKiBAcmV0dXJuIHtQSVhJLkdyYXBoaWNzfVxuICovXG5HcmFwaGljcy5wcm90b3R5cGUuYmV6aWVyQ3VydmVUbyA9IGZ1bmN0aW9uIChjcFgsIGNwWSwgY3BYMiwgY3BZMiwgdG9YLCB0b1kpXG57XG4gICAgaWYgKHRoaXMuY3VycmVudFBhdGgpXG4gICAge1xuICAgICAgICBpZiAodGhpcy5jdXJyZW50UGF0aC5zaGFwZS5wb2ludHMubGVuZ3RoID09PSAwKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRQYXRoLnNoYXBlLnBvaW50cyA9IFswLCAwXTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICB0aGlzLm1vdmVUbygwLDApO1xuICAgIH1cblxuICAgIHZhciBuID0gMjAsXG4gICAgICAgIGR0LFxuICAgICAgICBkdDIsXG4gICAgICAgIGR0MyxcbiAgICAgICAgdDIsXG4gICAgICAgIHQzLFxuICAgICAgICBwb2ludHMgPSB0aGlzLmN1cnJlbnRQYXRoLnNoYXBlLnBvaW50cztcblxuICAgIHZhciBmcm9tWCA9IHBvaW50c1twb2ludHMubGVuZ3RoLTJdO1xuICAgIHZhciBmcm9tWSA9IHBvaW50c1twb2ludHMubGVuZ3RoLTFdO1xuXG4gICAgdmFyIGogPSAwO1xuXG4gICAgZm9yICh2YXIgaSA9IDE7IGkgPD0gbjsgKytpKVxuICAgIHtcbiAgICAgICAgaiA9IGkgLyBuO1xuXG4gICAgICAgIGR0ID0gKDEgLSBqKTtcbiAgICAgICAgZHQyID0gZHQgKiBkdDtcbiAgICAgICAgZHQzID0gZHQyICogZHQ7XG5cbiAgICAgICAgdDIgPSBqICogajtcbiAgICAgICAgdDMgPSB0MiAqIGo7XG5cbiAgICAgICAgcG9pbnRzLnB1c2goIGR0MyAqIGZyb21YICsgMyAqIGR0MiAqIGogKiBjcFggKyAzICogZHQgKiB0MiAqIGNwWDIgKyB0MyAqIHRvWCxcbiAgICAgICAgICAgICAgICAgICAgIGR0MyAqIGZyb21ZICsgMyAqIGR0MiAqIGogKiBjcFkgKyAzICogZHQgKiB0MiAqIGNwWTIgKyB0MyAqIHRvWSk7XG4gICAgfVxuXG4gICAgdGhpcy5kaXJ0eSA9IHRoaXMuYm91bmRzRGlydHkgPSB0cnVlO1xuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIFRoZSBhcmNUbygpIG1ldGhvZCBjcmVhdGVzIGFuIGFyYy9jdXJ2ZSBiZXR3ZWVuIHR3byB0YW5nZW50cyBvbiB0aGUgY2FudmFzLlxuICpcbiAqIFwiYm9ycm93ZWRcIiBmcm9tIGh0dHBzOi8vY29kZS5nb29nbGUuY29tL3AvZnhjYW52YXMvIC0gdGhhbmtzIGdvb2dsZSFcbiAqXG4gKiBAcGFyYW0geDEge251bWJlcn0gVGhlIHgtY29vcmRpbmF0ZSBvZiB0aGUgYmVnaW5uaW5nIG9mIHRoZSBhcmNcbiAqIEBwYXJhbSB5MSB7bnVtYmVyfSBUaGUgeS1jb29yZGluYXRlIG9mIHRoZSBiZWdpbm5pbmcgb2YgdGhlIGFyY1xuICogQHBhcmFtIHgyIHtudW1iZXJ9IFRoZSB4LWNvb3JkaW5hdGUgb2YgdGhlIGVuZCBvZiB0aGUgYXJjXG4gKiBAcGFyYW0geTIge251bWJlcn0gVGhlIHktY29vcmRpbmF0ZSBvZiB0aGUgZW5kIG9mIHRoZSBhcmNcbiAqIEBwYXJhbSByYWRpdXMge251bWJlcn0gVGhlIHJhZGl1cyBvZiB0aGUgYXJjXG4gKiBAcmV0dXJuIHtQSVhJLkdyYXBoaWNzfVxuICovXG5HcmFwaGljcy5wcm90b3R5cGUuYXJjVG8gPSBmdW5jdGlvbiAoeDEsIHkxLCB4MiwgeTIsIHJhZGl1cylcbntcbiAgICBpZiAodGhpcy5jdXJyZW50UGF0aClcbiAgICB7XG4gICAgICAgIGlmICh0aGlzLmN1cnJlbnRQYXRoLnNoYXBlLnBvaW50cy5sZW5ndGggPT09IDApXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuY3VycmVudFBhdGguc2hhcGUucG9pbnRzLnB1c2goeDEsIHkxKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICB0aGlzLm1vdmVUbyh4MSwgeTEpO1xuICAgIH1cblxuICAgIHZhciBwb2ludHMgPSB0aGlzLmN1cnJlbnRQYXRoLnNoYXBlLnBvaW50cyxcbiAgICAgICAgZnJvbVggPSBwb2ludHNbcG9pbnRzLmxlbmd0aC0yXSxcbiAgICAgICAgZnJvbVkgPSBwb2ludHNbcG9pbnRzLmxlbmd0aC0xXSxcbiAgICAgICAgYTEgPSBmcm9tWSAtIHkxLFxuICAgICAgICBiMSA9IGZyb21YIC0geDEsXG4gICAgICAgIGEyID0geTIgICAtIHkxLFxuICAgICAgICBiMiA9IHgyICAgLSB4MSxcbiAgICAgICAgbW0gPSBNYXRoLmFicyhhMSAqIGIyIC0gYjEgKiBhMik7XG5cbiAgICBpZiAobW0gPCAxLjBlLTggfHwgcmFkaXVzID09PSAwKVxuICAgIHtcbiAgICAgICAgaWYgKHBvaW50c1twb2ludHMubGVuZ3RoLTJdICE9PSB4MSB8fCBwb2ludHNbcG9pbnRzLmxlbmd0aC0xXSAhPT0geTEpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHBvaW50cy5wdXNoKHgxLCB5MSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgdmFyIGRkID0gYTEgKiBhMSArIGIxICogYjEsXG4gICAgICAgICAgICBjYyA9IGEyICogYTIgKyBiMiAqIGIyLFxuICAgICAgICAgICAgdHQgPSBhMSAqIGEyICsgYjEgKiBiMixcbiAgICAgICAgICAgIGsxID0gcmFkaXVzICogTWF0aC5zcXJ0KGRkKSAvIG1tLFxuICAgICAgICAgICAgazIgPSByYWRpdXMgKiBNYXRoLnNxcnQoY2MpIC8gbW0sXG4gICAgICAgICAgICBqMSA9IGsxICogdHQgLyBkZCxcbiAgICAgICAgICAgIGoyID0gazIgKiB0dCAvIGNjLFxuICAgICAgICAgICAgY3ggPSBrMSAqIGIyICsgazIgKiBiMSxcbiAgICAgICAgICAgIGN5ID0gazEgKiBhMiArIGsyICogYTEsXG4gICAgICAgICAgICBweCA9IGIxICogKGsyICsgajEpLFxuICAgICAgICAgICAgcHkgPSBhMSAqIChrMiArIGoxKSxcbiAgICAgICAgICAgIHF4ID0gYjIgKiAoazEgKyBqMiksXG4gICAgICAgICAgICBxeSA9IGEyICogKGsxICsgajIpLFxuICAgICAgICAgICAgc3RhcnRBbmdsZSA9IE1hdGguYXRhbjIocHkgLSBjeSwgcHggLSBjeCksXG4gICAgICAgICAgICBlbmRBbmdsZSAgID0gTWF0aC5hdGFuMihxeSAtIGN5LCBxeCAtIGN4KTtcblxuICAgICAgICB0aGlzLmFyYyhjeCArIHgxLCBjeSArIHkxLCByYWRpdXMsIHN0YXJ0QW5nbGUsIGVuZEFuZ2xlLCBiMSAqIGEyID4gYjIgKiBhMSk7XG4gICAgfVxuXG4gICAgdGhpcy5kaXJ0eSA9IHRoaXMuYm91bmRzRGlydHkgPSB0cnVlO1xuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIFRoZSBhcmMgbWV0aG9kIGNyZWF0ZXMgYW4gYXJjL2N1cnZlICh1c2VkIHRvIGNyZWF0ZSBjaXJjbGVzLCBvciBwYXJ0cyBvZiBjaXJjbGVzKS5cbiAqXG4gKiBAcGFyYW0gY3gge251bWJlcn0gVGhlIHgtY29vcmRpbmF0ZSBvZiB0aGUgY2VudGVyIG9mIHRoZSBjaXJjbGVcbiAqIEBwYXJhbSBjeSB7bnVtYmVyfSBUaGUgeS1jb29yZGluYXRlIG9mIHRoZSBjZW50ZXIgb2YgdGhlIGNpcmNsZVxuICogQHBhcmFtIHJhZGl1cyB7bnVtYmVyfSBUaGUgcmFkaXVzIG9mIHRoZSBjaXJjbGVcbiAqIEBwYXJhbSBzdGFydEFuZ2xlIHtudW1iZXJ9IFRoZSBzdGFydGluZyBhbmdsZSwgaW4gcmFkaWFucyAoMCBpcyBhdCB0aGUgMyBvJ2Nsb2NrIHBvc2l0aW9uIG9mIHRoZSBhcmMncyBjaXJjbGUpXG4gKiBAcGFyYW0gZW5kQW5nbGUge251bWJlcn0gVGhlIGVuZGluZyBhbmdsZSwgaW4gcmFkaWFuc1xuICogQHBhcmFtIGFudGljbG9ja3dpc2Uge2Jvb2xlYW59IE9wdGlvbmFsLiBTcGVjaWZpZXMgd2hldGhlciB0aGUgZHJhd2luZyBzaG91bGQgYmUgY291bnRlcmNsb2Nrd2lzZSBvciBjbG9ja3dpc2UuIEZhbHNlIGlzIGRlZmF1bHQsIGFuZCBpbmRpY2F0ZXMgY2xvY2t3aXNlLCB3aGlsZSB0cnVlIGluZGljYXRlcyBjb3VudGVyLWNsb2Nrd2lzZS5cbiAqIEByZXR1cm4ge1BJWEkuR3JhcGhpY3N9XG4gKi9cbkdyYXBoaWNzLnByb3RvdHlwZS5hcmMgPSBmdW5jdGlvbihjeCwgY3ksIHJhZGl1cywgc3RhcnRBbmdsZSwgZW5kQW5nbGUsIGFudGljbG9ja3dpc2UpXG57XG4gICAgYW50aWNsb2Nrd2lzZSA9IGFudGljbG9ja3dpc2UgfHwgZmFsc2U7XG5cbiAgICBpZiAoc3RhcnRBbmdsZSA9PT0gZW5kQW5nbGUpXG4gICAge1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBpZiggIWFudGljbG9ja3dpc2UgJiYgZW5kQW5nbGUgPD0gc3RhcnRBbmdsZSApXG4gICAge1xuICAgICAgICBlbmRBbmdsZSArPSBNYXRoLlBJICogMjtcbiAgICB9XG4gICAgZWxzZSBpZiggYW50aWNsb2Nrd2lzZSAmJiBzdGFydEFuZ2xlIDw9IGVuZEFuZ2xlIClcbiAgICB7XG4gICAgICAgIHN0YXJ0QW5nbGUgKz0gTWF0aC5QSSAqIDI7XG4gICAgfVxuXG4gICAgdmFyIHN3ZWVwID0gYW50aWNsb2Nrd2lzZSA/IChzdGFydEFuZ2xlIC0gZW5kQW5nbGUpICogLTEgOiAoZW5kQW5nbGUgLSBzdGFydEFuZ2xlKTtcbiAgICB2YXIgc2VncyA9ICBNYXRoLmNlaWwoTWF0aC5hYnMoc3dlZXApIC8gKE1hdGguUEkgKiAyKSkgKiA0MDtcblxuICAgIGlmKHN3ZWVwID09PSAwKVxuICAgIHtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgdmFyIHN0YXJ0WCA9IGN4ICsgTWF0aC5jb3Moc3RhcnRBbmdsZSkgKiByYWRpdXM7XG4gICAgdmFyIHN0YXJ0WSA9IGN5ICsgTWF0aC5zaW4oc3RhcnRBbmdsZSkgKiByYWRpdXM7XG5cbiAgICBpZiAodGhpcy5jdXJyZW50UGF0aClcbiAgICB7XG4gICAgICAgIHRoaXMuY3VycmVudFBhdGguc2hhcGUucG9pbnRzLnB1c2goc3RhcnRYLCBzdGFydFkpO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICB0aGlzLm1vdmVUbyhzdGFydFgsIHN0YXJ0WSk7XG4gICAgfVxuXG4gICAgdmFyIHBvaW50cyA9IHRoaXMuY3VycmVudFBhdGguc2hhcGUucG9pbnRzO1xuXG4gICAgdmFyIHRoZXRhID0gc3dlZXAvKHNlZ3MqMik7XG4gICAgdmFyIHRoZXRhMiA9IHRoZXRhKjI7XG5cbiAgICB2YXIgY1RoZXRhID0gTWF0aC5jb3ModGhldGEpO1xuICAgIHZhciBzVGhldGEgPSBNYXRoLnNpbih0aGV0YSk7XG5cbiAgICB2YXIgc2VnTWludXMgPSBzZWdzIC0gMTtcblxuICAgIHZhciByZW1haW5kZXIgPSAoIHNlZ01pbnVzICUgMSApIC8gc2VnTWludXM7XG5cbiAgICBmb3IodmFyIGk9MDsgaTw9c2VnTWludXM7IGkrKylcbiAgICB7XG4gICAgICAgIHZhciByZWFsID0gIGkgKyByZW1haW5kZXIgKiBpO1xuXG5cbiAgICAgICAgdmFyIGFuZ2xlID0gKCh0aGV0YSkgKyBzdGFydEFuZ2xlICsgKHRoZXRhMiAqIHJlYWwpKTtcblxuICAgICAgICB2YXIgYyA9IE1hdGguY29zKGFuZ2xlKTtcbiAgICAgICAgdmFyIHMgPSAtTWF0aC5zaW4oYW5nbGUpO1xuXG4gICAgICAgIHBvaW50cy5wdXNoKCggKGNUaGV0YSAqICBjKSArIChzVGhldGEgKiBzKSApICogcmFkaXVzICsgY3gsXG4gICAgICAgICAgICAgICAgICAgICggKGNUaGV0YSAqIC1zKSArIChzVGhldGEgKiBjKSApICogcmFkaXVzICsgY3kpO1xuICAgIH1cblxuICAgIHRoaXMuZGlydHkgPSB0aGlzLmJvdW5kc0RpcnR5ID0gdHJ1ZTtcblxuICAgIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBTcGVjaWZpZXMgYSBzaW1wbGUgb25lLWNvbG9yIGZpbGwgdGhhdCBzdWJzZXF1ZW50IGNhbGxzIHRvIG90aGVyIEdyYXBoaWNzIG1ldGhvZHNcbiAqIChzdWNoIGFzIGxpbmVUbygpIG9yIGRyYXdDaXJjbGUoKSkgdXNlIHdoZW4gZHJhd2luZy5cbiAqXG4gKiBAcGFyYW0gY29sb3Ige251bWJlcn0gdGhlIGNvbG9yIG9mIHRoZSBmaWxsXG4gKiBAcGFyYW0gYWxwaGEge251bWJlcn0gdGhlIGFscGhhIG9mIHRoZSBmaWxsXG4gKiBAcmV0dXJuIHtQSVhJLkdyYXBoaWNzfVxuICovXG5HcmFwaGljcy5wcm90b3R5cGUuYmVnaW5GaWxsID0gZnVuY3Rpb24gKGNvbG9yLCBhbHBoYSlcbntcbiAgICB0aGlzLmZpbGxpbmcgPSB0cnVlO1xuICAgIHRoaXMuZmlsbENvbG9yID0gY29sb3IgfHwgMDtcbiAgICB0aGlzLmZpbGxBbHBoYSA9IChhbHBoYSA9PT0gdW5kZWZpbmVkKSA/IDEgOiBhbHBoYTtcblxuICAgIGlmICh0aGlzLmN1cnJlbnRQYXRoKVxuICAgIHtcbiAgICAgICAgaWYgKHRoaXMuY3VycmVudFBhdGguc2hhcGUucG9pbnRzLmxlbmd0aCA8PSAyKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRQYXRoLmZpbGwgPSB0aGlzLmZpbGxpbmc7XG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRQYXRoLmZpbGxDb2xvciA9IHRoaXMuZmlsbENvbG9yO1xuICAgICAgICAgICAgdGhpcy5jdXJyZW50UGF0aC5maWxsQWxwaGEgPSB0aGlzLmZpbGxBbHBoYTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogQXBwbGllcyBhIGZpbGwgdG8gdGhlIGxpbmVzIGFuZCBzaGFwZXMgdGhhdCB3ZXJlIGFkZGVkIHNpbmNlIHRoZSBsYXN0IGNhbGwgdG8gdGhlIGJlZ2luRmlsbCgpIG1ldGhvZC5cbiAqXG4gKiBAcmV0dXJuIHtHcmFwaGljc31cbiAqL1xuR3JhcGhpY3MucHJvdG90eXBlLmVuZEZpbGwgPSBmdW5jdGlvbiAoKVxue1xuICAgIHRoaXMuZmlsbGluZyA9IGZhbHNlO1xuICAgIHRoaXMuZmlsbENvbG9yID0gbnVsbDtcbiAgICB0aGlzLmZpbGxBbHBoYSA9IDE7XG5cbiAgICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICpcbiAqIEBwYXJhbSB4IHtudW1iZXJ9IFRoZSBYIGNvb3JkIG9mIHRoZSB0b3AtbGVmdCBvZiB0aGUgcmVjdGFuZ2xlXG4gKiBAcGFyYW0geSB7bnVtYmVyfSBUaGUgWSBjb29yZCBvZiB0aGUgdG9wLWxlZnQgb2YgdGhlIHJlY3RhbmdsZVxuICogQHBhcmFtIHdpZHRoIHtudW1iZXJ9IFRoZSB3aWR0aCBvZiB0aGUgcmVjdGFuZ2xlXG4gKiBAcGFyYW0gaGVpZ2h0IHtudW1iZXJ9IFRoZSBoZWlnaHQgb2YgdGhlIHJlY3RhbmdsZVxuICogQHJldHVybiB7UElYSS5HcmFwaGljc31cbiAqL1xuR3JhcGhpY3MucHJvdG90eXBlLmRyYXdSZWN0ID0gZnVuY3Rpb24gKCB4LCB5LCB3aWR0aCwgaGVpZ2h0IClcbntcbiAgICB0aGlzLmRyYXdTaGFwZShuZXcgbWF0aC5SZWN0YW5nbGUoeCx5LCB3aWR0aCwgaGVpZ2h0KSk7XG5cbiAgICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICpcbiAqIEBwYXJhbSB4IHtudW1iZXJ9IFRoZSBYIGNvb3JkIG9mIHRoZSB0b3AtbGVmdCBvZiB0aGUgcmVjdGFuZ2xlXG4gKiBAcGFyYW0geSB7bnVtYmVyfSBUaGUgWSBjb29yZCBvZiB0aGUgdG9wLWxlZnQgb2YgdGhlIHJlY3RhbmdsZVxuICogQHBhcmFtIHdpZHRoIHtudW1iZXJ9IFRoZSB3aWR0aCBvZiB0aGUgcmVjdGFuZ2xlXG4gKiBAcGFyYW0gaGVpZ2h0IHtudW1iZXJ9IFRoZSBoZWlnaHQgb2YgdGhlIHJlY3RhbmdsZVxuICogQHBhcmFtIHJhZGl1cyB7bnVtYmVyfSBSYWRpdXMgb2YgdGhlIHJlY3RhbmdsZSBjb3JuZXJzXG4gKiBAcmV0dXJuIHtQSVhJLkdyYXBoaWNzfVxuICovXG5HcmFwaGljcy5wcm90b3R5cGUuZHJhd1JvdW5kZWRSZWN0ID0gZnVuY3Rpb24gKCB4LCB5LCB3aWR0aCwgaGVpZ2h0LCByYWRpdXMgKVxue1xuICAgIHRoaXMuZHJhd1NoYXBlKG5ldyBtYXRoLlJvdW5kZWRSZWN0YW5nbGUoeCwgeSwgd2lkdGgsIGhlaWdodCwgcmFkaXVzKSk7XG5cbiAgICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogRHJhd3MgYSBjaXJjbGUuXG4gKlxuICogQHBhcmFtIHgge251bWJlcn0gVGhlIFggY29vcmRpbmF0ZSBvZiB0aGUgY2VudGVyIG9mIHRoZSBjaXJjbGVcbiAqIEBwYXJhbSB5IHtudW1iZXJ9IFRoZSBZIGNvb3JkaW5hdGUgb2YgdGhlIGNlbnRlciBvZiB0aGUgY2lyY2xlXG4gKiBAcGFyYW0gcmFkaXVzIHtudW1iZXJ9IFRoZSByYWRpdXMgb2YgdGhlIGNpcmNsZVxuICogQHJldHVybiB7UElYSS5HcmFwaGljc31cbiAqL1xuR3JhcGhpY3MucHJvdG90eXBlLmRyYXdDaXJjbGUgPSBmdW5jdGlvbiAoeCwgeSwgcmFkaXVzKVxue1xuICAgIHRoaXMuZHJhd1NoYXBlKG5ldyBtYXRoLkNpcmNsZSh4LHksIHJhZGl1cykpO1xuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIERyYXdzIGFuIGVsbGlwc2UuXG4gKlxuICogQHBhcmFtIHgge251bWJlcn0gVGhlIFggY29vcmRpbmF0ZSBvZiB0aGUgY2VudGVyIG9mIHRoZSBlbGxpcHNlXG4gKiBAcGFyYW0geSB7bnVtYmVyfSBUaGUgWSBjb29yZGluYXRlIG9mIHRoZSBjZW50ZXIgb2YgdGhlIGVsbGlwc2VcbiAqIEBwYXJhbSB3aWR0aCB7bnVtYmVyfSBUaGUgaGFsZiB3aWR0aCBvZiB0aGUgZWxsaXBzZVxuICogQHBhcmFtIGhlaWdodCB7bnVtYmVyfSBUaGUgaGFsZiBoZWlnaHQgb2YgdGhlIGVsbGlwc2VcbiAqIEByZXR1cm4ge1BJWEkuR3JhcGhpY3N9XG4gKi9cbkdyYXBoaWNzLnByb3RvdHlwZS5kcmF3RWxsaXBzZSA9IGZ1bmN0aW9uICh4LCB5LCB3aWR0aCwgaGVpZ2h0KVxue1xuICAgIHRoaXMuZHJhd1NoYXBlKG5ldyBtYXRoLkVsbGlwc2UoeCwgeSwgd2lkdGgsIGhlaWdodCkpO1xuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIERyYXdzIGEgcG9seWdvbiB1c2luZyB0aGUgZ2l2ZW4gcGF0aC5cbiAqXG4gKiBAcGFyYW0gcGF0aCB7bnVtYmVyW118UElYSS5Qb2ludFtdfSBUaGUgcGF0aCBkYXRhIHVzZWQgdG8gY29uc3RydWN0IHRoZSBwb2x5Z29uLlxuICogQHJldHVybiB7UElYSS5HcmFwaGljc31cbiAqL1xuR3JhcGhpY3MucHJvdG90eXBlLmRyYXdQb2x5Z29uID0gZnVuY3Rpb24gKHBhdGgpXG57XG4gICAgLy8gcHJldmVudHMgYW4gYXJndW1lbnQgYXNzaWdubWVudCBkZW9wdFxuICAgIC8vIHNlZSBzZWN0aW9uIDMuMTogaHR0cHM6Ly9naXRodWIuY29tL3BldGthYW50b25vdi9ibHVlYmlyZC93aWtpL09wdGltaXphdGlvbi1raWxsZXJzIzMtbWFuYWdpbmctYXJndW1lbnRzXG4gICAgdmFyIHBvaW50cyA9IHBhdGg7XG5cbiAgICB2YXIgY2xvc2VkID0gdHJ1ZTtcblxuICAgIGlmIChwb2ludHMgaW5zdGFuY2VvZiBtYXRoLlBvbHlnb24pXG4gICAge1xuICAgICAgICBjbG9zZWQgPSBwb2ludHMuY2xvc2VkO1xuICAgICAgICBwb2ludHMgPSBwb2ludHMucG9pbnRzO1xuICAgIH1cblxuICAgIGlmICghQXJyYXkuaXNBcnJheShwb2ludHMpKVxuICAgIHtcbiAgICAgICAgLy8gcHJldmVudHMgYW4gYXJndW1lbnQgbGVhayBkZW9wdFxuICAgICAgICAvLyBzZWUgc2VjdGlvbiAzLjI6IGh0dHBzOi8vZ2l0aHViLmNvbS9wZXRrYWFudG9ub3YvYmx1ZWJpcmQvd2lraS9PcHRpbWl6YXRpb24ta2lsbGVycyMzLW1hbmFnaW5nLWFyZ3VtZW50c1xuICAgICAgICBwb2ludHMgPSBuZXcgQXJyYXkoYXJndW1lbnRzLmxlbmd0aCk7XG5cbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwb2ludHMubGVuZ3RoOyArK2kpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHBvaW50c1tpXSA9IGFyZ3VtZW50c1tpXTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHZhciBzaGFwZSA9IG5ldyBtYXRoLlBvbHlnb24ocG9pbnRzKTtcbiAgICBzaGFwZS5jbG9zZWQgPSBjbG9zZWQ7XG5cbiAgICB0aGlzLmRyYXdTaGFwZShzaGFwZSk7XG5cbiAgICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogQ2xlYXJzIHRoZSBncmFwaGljcyB0aGF0IHdlcmUgZHJhd24gdG8gdGhpcyBHcmFwaGljcyBvYmplY3QsIGFuZCByZXNldHMgZmlsbCBhbmQgbGluZSBzdHlsZSBzZXR0aW5ncy5cbiAqXG4gKiBAcmV0dXJuIHtQSVhJLkdyYXBoaWNzfVxuICovXG5HcmFwaGljcy5wcm90b3R5cGUuY2xlYXIgPSBmdW5jdGlvbiAoKVxue1xuICAgIHRoaXMubGluZVdpZHRoID0gMDtcbiAgICB0aGlzLmZpbGxpbmcgPSBmYWxzZTtcblxuICAgIHRoaXMuZGlydHkgPSB0cnVlO1xuICAgIHRoaXMuY2xlYXJEaXJ0eSA9IHRydWU7XG4gICAgdGhpcy5ncmFwaGljc0RhdGEgPSBbXTtcblxuICAgIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBVc2VmdWwgZnVuY3Rpb24gdGhhdCByZXR1cm5zIGEgdGV4dHVyZSBvZiB0aGUgZ3JhcGhpY3Mgb2JqZWN0IHRoYXQgY2FuIHRoZW4gYmUgdXNlZCB0byBjcmVhdGUgc3ByaXRlc1xuICogVGhpcyBjYW4gYmUgcXVpdGUgdXNlZnVsIGlmIHlvdXIgZ2VvbWV0cnkgaXMgY29tcGxpY2F0ZWQgYW5kIG5lZWRzIHRvIGJlIHJldXNlZCBtdWx0aXBsZSB0aW1lcy5cbiAqXG4gKiBAcGFyYW0gcmVzb2x1dGlvbiB7bnVtYmVyfSBUaGUgcmVzb2x1dGlvbiBvZiB0aGUgdGV4dHVyZSBiZWluZyBnZW5lcmF0ZWRcbiAqIEBwYXJhbSBzY2FsZU1vZGUge251bWJlcn0gU2hvdWxkIGJlIG9uZSBvZiB0aGUgc2NhbGVNb2RlIGNvbnN0c1xuICogQHJldHVybiB7UElYSS5UZXh0dXJlfSBhIHRleHR1cmUgb2YgdGhlIGdyYXBoaWNzIG9iamVjdFxuICovXG5HcmFwaGljcy5wcm90b3R5cGUuZ2VuZXJhdGVUZXh0dXJlID0gZnVuY3Rpb24gKHJlbmRlcmVyLCByZXNvbHV0aW9uLCBzY2FsZU1vZGUpXG57XG5cbiAgICByZXNvbHV0aW9uID0gcmVzb2x1dGlvbiB8fCAxO1xuXG4gICAgdmFyIGJvdW5kcyA9IHRoaXMuZ2V0TG9jYWxCb3VuZHMoKTtcblxuICAgIHZhciBjYW52YXNCdWZmZXIgPSBuZXcgQ2FudmFzQnVmZmVyKGJvdW5kcy53aWR0aCAqIHJlc29sdXRpb24sIGJvdW5kcy5oZWlnaHQgKiByZXNvbHV0aW9uKTtcblxuICAgIHZhciB0ZXh0dXJlID0gVGV4dHVyZS5mcm9tQ2FudmFzKGNhbnZhc0J1ZmZlci5jYW52YXMsIHNjYWxlTW9kZSk7XG4gICAgdGV4dHVyZS5iYXNlVGV4dHVyZS5yZXNvbHV0aW9uID0gcmVzb2x1dGlvbjtcblxuICAgIGNhbnZhc0J1ZmZlci5jb250ZXh0LnNjYWxlKHJlc29sdXRpb24sIHJlc29sdXRpb24pO1xuXG4gICAgY2FudmFzQnVmZmVyLmNvbnRleHQudHJhbnNsYXRlKC1ib3VuZHMueCwtYm91bmRzLnkpO1xuXG4gICAgQ2FudmFzR3JhcGhpY3MucmVuZGVyR3JhcGhpY3ModGhpcywgY2FudmFzQnVmZmVyLmNvbnRleHQpO1xuXG4gICAgcmV0dXJuIHRleHR1cmU7XG59O1xuXG4vKipcbiAqIFJlbmRlcnMgdGhlIG9iamVjdCB1c2luZyB0aGUgV2ViR0wgcmVuZGVyZXJcbiAqXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcn1cbiAqIEBwcml2YXRlXG4gKi9cbkdyYXBoaWNzLnByb3RvdHlwZS5fcmVuZGVyV2ViR0wgPSBmdW5jdGlvbiAocmVuZGVyZXIpXG57XG4gICAgLy8gaWYgdGhlIHNwcml0ZSBpcyBub3QgdmlzaWJsZSBvciB0aGUgYWxwaGEgaXMgMCB0aGVuIG5vIG5lZWQgdG8gcmVuZGVyIHRoaXMgZWxlbWVudFxuXG4gICAgaWYgKHRoaXMuZ2xEaXJ0eSlcbiAgICB7XG4gICAgICAgIHRoaXMuZGlydHkgPSB0cnVlO1xuICAgICAgICB0aGlzLmdsRGlydHkgPSBmYWxzZTtcbiAgICB9XG5cbiAgICByZW5kZXJlci5zZXRPYmplY3RSZW5kZXJlcihyZW5kZXJlci5wbHVnaW5zLmdyYXBoaWNzKTtcbiAgICByZW5kZXJlci5wbHVnaW5zLmdyYXBoaWNzLnJlbmRlcih0aGlzKTtcblxufTtcblxuLyoqXG4gKiBSZW5kZXJzIHRoZSBvYmplY3QgdXNpbmcgdGhlIENhbnZhcyByZW5kZXJlclxuICpcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5DYW52YXNSZW5kZXJlcn1cbiAqIEBwcml2YXRlXG4gKi9cbkdyYXBoaWNzLnByb3RvdHlwZS5fcmVuZGVyQ2FudmFzID0gZnVuY3Rpb24gKHJlbmRlcmVyKVxue1xuICAgIGlmICh0aGlzLmlzTWFzayA9PT0gdHJ1ZSlcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBpZiB0aGUgdGludCBoYXMgY2hhbmdlZCwgc2V0IHRoZSBncmFwaGljcyBvYmplY3QgdG8gZGlydHkuXG4gICAgaWYgKHRoaXMuX3ByZXZUaW50ICE9PSB0aGlzLnRpbnQpIHtcbiAgICAgICAgdGhpcy5kaXJ0eSA9IHRydWU7XG4gICAgfVxuXG4gICAgLy8gdGhpcyBjb2RlIG1heSBzdGlsbCBiZSBuZWVkZWQgc28gbGVhdmluZyBmb3Igbm93Li5cbiAgICAvL1xuICAgIC8qXG4gICAgaWYgKHRoaXMuX2NhY2hlQXNCaXRtYXApXG4gICAge1xuICAgICAgICBpZiAodGhpcy5kaXJ0eSB8fCB0aGlzLmNhY2hlZFNwcml0ZURpcnR5KVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLl9nZW5lcmF0ZUNhY2hlZFNwcml0ZSgpO1xuXG4gICAgICAgICAgICAvLyB3ZSB3aWxsIGFsc28gbmVlZCB0byB1cGRhdGUgdGhlIHRleHR1cmVcbiAgICAgICAgICAgIHRoaXMudXBkYXRlQ2FjaGVkU3ByaXRlVGV4dHVyZSgpO1xuXG4gICAgICAgICAgICB0aGlzLmNhY2hlZFNwcml0ZURpcnR5ID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLmRpcnR5ID0gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9jYWNoZWRTcHJpdGUuYWxwaGEgPSB0aGlzLmFscGhhO1xuXG4gICAgICAgIFNwcml0ZS5wcm90b3R5cGUuX3JlbmRlckNhbnZhcy5jYWxsKHRoaXMuX2NhY2hlZFNwcml0ZSwgcmVuZGVyZXIpO1xuXG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgKi9cbiAgICB2YXIgY29udGV4dCA9IHJlbmRlcmVyLmNvbnRleHQ7XG4gICAgdmFyIHRyYW5zZm9ybSA9IHRoaXMud29ybGRUcmFuc2Zvcm07XG5cbiAgICB2YXIgY29tcG9zaXRlT3BlcmF0aW9uID0gcmVuZGVyZXIuYmxlbmRNb2Rlc1t0aGlzLmJsZW5kTW9kZV07XG4gICAgaWYgKGNvbXBvc2l0ZU9wZXJhdGlvbiAhPT0gY29udGV4dC5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb24pXG4gICAge1xuICAgICAgICBjb250ZXh0Lmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbiA9IGNvbXBvc2l0ZU9wZXJhdGlvbjtcbiAgICB9XG5cbiAgICB2YXIgcmVzb2x1dGlvbiA9IHJlbmRlcmVyLnJlc29sdXRpb247XG4gICAgY29udGV4dC5zZXRUcmFuc2Zvcm0oXG4gICAgICAgIHRyYW5zZm9ybS5hICogcmVzb2x1dGlvbixcbiAgICAgICAgdHJhbnNmb3JtLmIgKiByZXNvbHV0aW9uLFxuICAgICAgICB0cmFuc2Zvcm0uYyAqIHJlc29sdXRpb24sXG4gICAgICAgIHRyYW5zZm9ybS5kICogcmVzb2x1dGlvbixcbiAgICAgICAgdHJhbnNmb3JtLnR4ICogcmVzb2x1dGlvbixcbiAgICAgICAgdHJhbnNmb3JtLnR5ICogcmVzb2x1dGlvblxuICAgICk7XG5cbiAgICBDYW52YXNHcmFwaGljcy5yZW5kZXJHcmFwaGljcyh0aGlzLCBjb250ZXh0KTtcbn07XG5cbi8qKlxuICogUmV0cmlldmVzIHRoZSBib3VuZHMgb2YgdGhlIGdyYXBoaWMgc2hhcGUgYXMgYSByZWN0YW5nbGUgb2JqZWN0XG4gKlxuICogQHBhcmFtIFttYXRyaXhdIHtQSVhJLk1hdHJpeH0gVGhlIHdvcmxkIHRyYW5zZm9ybSBtYXRyaXggdG8gdXNlLCBkZWZhdWx0cyB0byB0aGlzXG4gKiAgb2JqZWN0J3Mgd29ybGRUcmFuc2Zvcm0uXG4gKiBAcmV0dXJuIHtQSVhJLlJlY3RhbmdsZX0gdGhlIHJlY3Rhbmd1bGFyIGJvdW5kaW5nIGFyZWFcbiAqL1xuR3JhcGhpY3MucHJvdG90eXBlLmdldEJvdW5kcyA9IGZ1bmN0aW9uIChtYXRyaXgpXG57XG4gICAgaWYoIXRoaXMuX2N1cnJlbnRCb3VuZHMpXG4gICAge1xuXG4gICAgICAgIC8vIHJldHVybiBhbiBlbXB0eSBvYmplY3QgaWYgdGhlIGl0ZW0gaXMgYSBtYXNrIVxuICAgICAgICBpZiAoIXRoaXMucmVuZGVyYWJsZSlcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIG1hdGguUmVjdGFuZ2xlLkVNUFRZO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuYm91bmRzRGlydHkpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlTG9jYWxCb3VuZHMoKTtcblxuICAgICAgICAgICAgdGhpcy5nbERpcnR5ID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMuY2FjaGVkU3ByaXRlRGlydHkgPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy5ib3VuZHNEaXJ0eSA9IGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGJvdW5kcyA9IHRoaXMuX2xvY2FsQm91bmRzO1xuXG4gICAgICAgIHZhciB3MCA9IGJvdW5kcy54O1xuICAgICAgICB2YXIgdzEgPSBib3VuZHMud2lkdGggKyBib3VuZHMueDtcblxuICAgICAgICB2YXIgaDAgPSBib3VuZHMueTtcbiAgICAgICAgdmFyIGgxID0gYm91bmRzLmhlaWdodCArIGJvdW5kcy55O1xuXG4gICAgICAgIHZhciB3b3JsZFRyYW5zZm9ybSA9IG1hdHJpeCB8fCB0aGlzLndvcmxkVHJhbnNmb3JtO1xuXG4gICAgICAgIHZhciBhID0gd29ybGRUcmFuc2Zvcm0uYTtcbiAgICAgICAgdmFyIGIgPSB3b3JsZFRyYW5zZm9ybS5iO1xuICAgICAgICB2YXIgYyA9IHdvcmxkVHJhbnNmb3JtLmM7XG4gICAgICAgIHZhciBkID0gd29ybGRUcmFuc2Zvcm0uZDtcbiAgICAgICAgdmFyIHR4ID0gd29ybGRUcmFuc2Zvcm0udHg7XG4gICAgICAgIHZhciB0eSA9IHdvcmxkVHJhbnNmb3JtLnR5O1xuXG4gICAgICAgIHZhciB4MSA9IGEgKiB3MSArIGMgKiBoMSArIHR4O1xuICAgICAgICB2YXIgeTEgPSBkICogaDEgKyBiICogdzEgKyB0eTtcblxuICAgICAgICB2YXIgeDIgPSBhICogdzAgKyBjICogaDEgKyB0eDtcbiAgICAgICAgdmFyIHkyID0gZCAqIGgxICsgYiAqIHcwICsgdHk7XG5cbiAgICAgICAgdmFyIHgzID0gYSAqIHcwICsgYyAqIGgwICsgdHg7XG4gICAgICAgIHZhciB5MyA9IGQgKiBoMCArIGIgKiB3MCArIHR5O1xuXG4gICAgICAgIHZhciB4NCA9ICBhICogdzEgKyBjICogaDAgKyB0eDtcbiAgICAgICAgdmFyIHk0ID0gIGQgKiBoMCArIGIgKiB3MSArIHR5O1xuXG4gICAgICAgIHZhciBtYXhYID0geDE7XG4gICAgICAgIHZhciBtYXhZID0geTE7XG5cbiAgICAgICAgdmFyIG1pblggPSB4MTtcbiAgICAgICAgdmFyIG1pblkgPSB5MTtcblxuICAgICAgICBtaW5YID0geDIgPCBtaW5YID8geDIgOiBtaW5YO1xuICAgICAgICBtaW5YID0geDMgPCBtaW5YID8geDMgOiBtaW5YO1xuICAgICAgICBtaW5YID0geDQgPCBtaW5YID8geDQgOiBtaW5YO1xuXG4gICAgICAgIG1pblkgPSB5MiA8IG1pblkgPyB5MiA6IG1pblk7XG4gICAgICAgIG1pblkgPSB5MyA8IG1pblkgPyB5MyA6IG1pblk7XG4gICAgICAgIG1pblkgPSB5NCA8IG1pblkgPyB5NCA6IG1pblk7XG5cbiAgICAgICAgbWF4WCA9IHgyID4gbWF4WCA/IHgyIDogbWF4WDtcbiAgICAgICAgbWF4WCA9IHgzID4gbWF4WCA/IHgzIDogbWF4WDtcbiAgICAgICAgbWF4WCA9IHg0ID4gbWF4WCA/IHg0IDogbWF4WDtcblxuICAgICAgICBtYXhZID0geTIgPiBtYXhZID8geTIgOiBtYXhZO1xuICAgICAgICBtYXhZID0geTMgPiBtYXhZID8geTMgOiBtYXhZO1xuICAgICAgICBtYXhZID0geTQgPiBtYXhZID8geTQgOiBtYXhZO1xuXG4gICAgICAgIHRoaXMuX2JvdW5kcy54ID0gbWluWDtcbiAgICAgICAgdGhpcy5fYm91bmRzLndpZHRoID0gbWF4WCAtIG1pblg7XG5cbiAgICAgICAgdGhpcy5fYm91bmRzLnkgPSBtaW5ZO1xuICAgICAgICB0aGlzLl9ib3VuZHMuaGVpZ2h0ID0gbWF4WSAtIG1pblk7XG5cbiAgICAgICAgdGhpcy5fY3VycmVudEJvdW5kcyA9IHRoaXMuX2JvdW5kcztcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5fY3VycmVudEJvdW5kcztcbn07XG5cbi8qKlxuKiBUZXN0cyBpZiBhIHBvaW50IGlzIGluc2lkZSB0aGlzIGdyYXBoaWNzIG9iamVjdFxuKlxuKiBAcGFyYW0gcG9pbnQge1BJWEkuUG9pbnR9IHRoZSBwb2ludCB0byB0ZXN0XG4qIEByZXR1cm4ge2Jvb2xlYW59IHRoZSByZXN1bHQgb2YgdGhlIHRlc3RcbiovXG5HcmFwaGljcy5wcm90b3R5cGUuY29udGFpbnNQb2ludCA9IGZ1bmN0aW9uKCBwb2ludCApXG57XG4gICAgdGhpcy53b3JsZFRyYW5zZm9ybS5hcHBseUludmVyc2UocG9pbnQsICB0ZW1wUG9pbnQpO1xuXG4gICAgdmFyIGdyYXBoaWNzRGF0YSA9IHRoaXMuZ3JhcGhpY3NEYXRhO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBncmFwaGljc0RhdGEubGVuZ3RoOyBpKyspXG4gICAge1xuICAgICAgICB2YXIgZGF0YSA9IGdyYXBoaWNzRGF0YVtpXTtcblxuICAgICAgICBpZiAoIWRhdGEuZmlsbClcbiAgICAgICAge1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBvbmx5IGRlYWwgd2l0aCBmaWxscy4uXG4gICAgICAgIGlmIChkYXRhLnNoYXBlKVxuICAgICAgICB7XG4gICAgICAgICAgICBpZiAoIGRhdGEuc2hhcGUuY29udGFpbnMoIHRlbXBQb2ludC54LCB0ZW1wUG9pbnQueSApIClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBmYWxzZTtcbn07XG5cbi8qKlxuICogVXBkYXRlIHRoZSBib3VuZHMgb2YgdGhlIG9iamVjdFxuICpcbiAqL1xuR3JhcGhpY3MucHJvdG90eXBlLnVwZGF0ZUxvY2FsQm91bmRzID0gZnVuY3Rpb24gKClcbntcbiAgICB2YXIgbWluWCA9IEluZmluaXR5O1xuICAgIHZhciBtYXhYID0gLUluZmluaXR5O1xuXG4gICAgdmFyIG1pblkgPSBJbmZpbml0eTtcbiAgICB2YXIgbWF4WSA9IC1JbmZpbml0eTtcblxuICAgIGlmICh0aGlzLmdyYXBoaWNzRGF0YS5sZW5ndGgpXG4gICAge1xuICAgICAgICB2YXIgc2hhcGUsIHBvaW50cywgeCwgeSwgdywgaDtcblxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuZ3JhcGhpY3NEYXRhLmxlbmd0aDsgaSsrKVxuICAgICAgICB7XG4gICAgICAgICAgICB2YXIgZGF0YSA9IHRoaXMuZ3JhcGhpY3NEYXRhW2ldO1xuICAgICAgICAgICAgdmFyIHR5cGUgPSBkYXRhLnR5cGU7XG4gICAgICAgICAgICB2YXIgbGluZVdpZHRoID0gZGF0YS5saW5lV2lkdGg7XG4gICAgICAgICAgICBzaGFwZSA9IGRhdGEuc2hhcGU7XG5cbiAgICAgICAgICAgIGlmICh0eXBlID09PSBDT05TVC5TSEFQRVMuUkVDVCB8fCB0eXBlID09PSBDT05TVC5TSEFQRVMuUlJFQylcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB4ID0gc2hhcGUueCAtIGxpbmVXaWR0aC8yO1xuICAgICAgICAgICAgICAgIHkgPSBzaGFwZS55IC0gbGluZVdpZHRoLzI7XG4gICAgICAgICAgICAgICAgdyA9IHNoYXBlLndpZHRoICsgbGluZVdpZHRoO1xuICAgICAgICAgICAgICAgIGggPSBzaGFwZS5oZWlnaHQgKyBsaW5lV2lkdGg7XG5cbiAgICAgICAgICAgICAgICBtaW5YID0geCA8IG1pblggPyB4IDogbWluWDtcbiAgICAgICAgICAgICAgICBtYXhYID0geCArIHcgPiBtYXhYID8geCArIHcgOiBtYXhYO1xuXG4gICAgICAgICAgICAgICAgbWluWSA9IHkgPCBtaW5ZID8geSA6IG1pblk7XG4gICAgICAgICAgICAgICAgbWF4WSA9IHkgKyBoID4gbWF4WSA/IHkgKyBoIDogbWF4WTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKHR5cGUgPT09IENPTlNULlNIQVBFUy5DSVJDKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHggPSBzaGFwZS54O1xuICAgICAgICAgICAgICAgIHkgPSBzaGFwZS55O1xuICAgICAgICAgICAgICAgIHcgPSBzaGFwZS5yYWRpdXMgKyBsaW5lV2lkdGgvMjtcbiAgICAgICAgICAgICAgICBoID0gc2hhcGUucmFkaXVzICsgbGluZVdpZHRoLzI7XG5cbiAgICAgICAgICAgICAgICBtaW5YID0geCAtIHcgPCBtaW5YID8geCAtIHcgOiBtaW5YO1xuICAgICAgICAgICAgICAgIG1heFggPSB4ICsgdyA+IG1heFggPyB4ICsgdyA6IG1heFg7XG5cbiAgICAgICAgICAgICAgICBtaW5ZID0geSAtIGggPCBtaW5ZID8geSAtIGggOiBtaW5ZO1xuICAgICAgICAgICAgICAgIG1heFkgPSB5ICsgaCA+IG1heFkgPyB5ICsgaCA6IG1heFk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmICh0eXBlID09PSBDT05TVC5TSEFQRVMuRUxJUClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB4ID0gc2hhcGUueDtcbiAgICAgICAgICAgICAgICB5ID0gc2hhcGUueTtcbiAgICAgICAgICAgICAgICB3ID0gc2hhcGUud2lkdGggKyBsaW5lV2lkdGgvMjtcbiAgICAgICAgICAgICAgICBoID0gc2hhcGUuaGVpZ2h0ICsgbGluZVdpZHRoLzI7XG5cbiAgICAgICAgICAgICAgICBtaW5YID0geCAtIHcgPCBtaW5YID8geCAtIHcgOiBtaW5YO1xuICAgICAgICAgICAgICAgIG1heFggPSB4ICsgdyA+IG1heFggPyB4ICsgdyA6IG1heFg7XG5cbiAgICAgICAgICAgICAgICBtaW5ZID0geSAtIGggPCBtaW5ZID8geSAtIGggOiBtaW5ZO1xuICAgICAgICAgICAgICAgIG1heFkgPSB5ICsgaCA+IG1heFkgPyB5ICsgaCA6IG1heFk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgLy8gUE9MWVxuICAgICAgICAgICAgICAgIHBvaW50cyA9IHNoYXBlLnBvaW50cztcblxuICAgICAgICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgcG9pbnRzLmxlbmd0aDsgaiArPSAyKVxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgeCA9IHBvaW50c1tqXTtcbiAgICAgICAgICAgICAgICAgICAgeSA9IHBvaW50c1tqKzFdO1xuXG4gICAgICAgICAgICAgICAgICAgIG1pblggPSB4LWxpbmVXaWR0aCA8IG1pblggPyB4LWxpbmVXaWR0aCA6IG1pblg7XG4gICAgICAgICAgICAgICAgICAgIG1heFggPSB4K2xpbmVXaWR0aCA+IG1heFggPyB4K2xpbmVXaWR0aCA6IG1heFg7XG5cbiAgICAgICAgICAgICAgICAgICAgbWluWSA9IHktbGluZVdpZHRoIDwgbWluWSA/IHktbGluZVdpZHRoIDogbWluWTtcbiAgICAgICAgICAgICAgICAgICAgbWF4WSA9IHkrbGluZVdpZHRoID4gbWF4WSA/IHkrbGluZVdpZHRoIDogbWF4WTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgbWluWCA9IDA7XG4gICAgICAgIG1heFggPSAwO1xuICAgICAgICBtaW5ZID0gMDtcbiAgICAgICAgbWF4WSA9IDA7XG4gICAgfVxuXG4gICAgdmFyIHBhZGRpbmcgPSB0aGlzLmJvdW5kc1BhZGRpbmc7XG5cbiAgICB0aGlzLl9sb2NhbEJvdW5kcy54ID0gbWluWCAtIHBhZGRpbmc7XG4gICAgdGhpcy5fbG9jYWxCb3VuZHMud2lkdGggPSAobWF4WCAtIG1pblgpICsgcGFkZGluZyAqIDI7XG5cbiAgICB0aGlzLl9sb2NhbEJvdW5kcy55ID0gbWluWSAtIHBhZGRpbmc7XG4gICAgdGhpcy5fbG9jYWxCb3VuZHMuaGVpZ2h0ID0gKG1heFkgLSBtaW5ZKSArIHBhZGRpbmcgKiAyO1xufTtcblxuLyoqXG4gKiBHZW5lcmF0ZXMgdGhlIGNhY2hlZCBzcHJpdGUgd2hlbiB0aGUgc3ByaXRlIGhhcyBjYWNoZUFzQml0bWFwID0gdHJ1ZVxuICpcbiAqIEBwcml2YXRlXG4gKi9cbi8qXG5HcmFwaGljcy5wcm90b3R5cGUuX2dlbmVyYXRlQ2FjaGVkU3ByaXRlID0gZnVuY3Rpb24gKClcbntcbiAgICB2YXIgYm91bmRzID0gdGhpcy5nZXRMb2NhbEJvdW5kcygpO1xuXG4gICAgaWYgKCF0aGlzLl9jYWNoZWRTcHJpdGUpXG4gICAge1xuICAgICAgICB2YXIgY2FudmFzQnVmZmVyID0gbmV3IENhbnZhc0J1ZmZlcihib3VuZHMud2lkdGgsIGJvdW5kcy5oZWlnaHQpO1xuICAgICAgICB2YXIgdGV4dHVyZSA9IFRleHR1cmUuZnJvbUNhbnZhcyhjYW52YXNCdWZmZXIuY2FudmFzKTtcblxuICAgICAgICB0aGlzLl9jYWNoZWRTcHJpdGUgPSBuZXcgU3ByaXRlKHRleHR1cmUpO1xuICAgICAgICB0aGlzLl9jYWNoZWRTcHJpdGUuYnVmZmVyID0gY2FudmFzQnVmZmVyO1xuXG4gICAgICAgIHRoaXMuX2NhY2hlZFNwcml0ZS53b3JsZFRyYW5zZm9ybSA9IHRoaXMud29ybGRUcmFuc2Zvcm07XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHRoaXMuX2NhY2hlZFNwcml0ZS5idWZmZXIucmVzaXplKGJvdW5kcy53aWR0aCwgYm91bmRzLmhlaWdodCk7XG4gICAgfVxuXG4gICAgLy8gbGV2ZXJhZ2UgdGhlIGFuY2hvciB0byBhY2NvdW50IGZvciB0aGUgb2Zmc2V0IG9mIHRoZSBlbGVtZW50XG4gICAgdGhpcy5fY2FjaGVkU3ByaXRlLmFuY2hvci54ID0gLSggYm91bmRzLnggLyBib3VuZHMud2lkdGggKTtcbiAgICB0aGlzLl9jYWNoZWRTcHJpdGUuYW5jaG9yLnkgPSAtKCBib3VuZHMueSAvIGJvdW5kcy5oZWlnaHQgKTtcblxuICAgIC8vIHRoaXMuX2NhY2hlZFNwcml0ZS5idWZmZXIuY29udGV4dC5zYXZlKCk7XG4gICAgdGhpcy5fY2FjaGVkU3ByaXRlLmJ1ZmZlci5jb250ZXh0LnRyYW5zbGF0ZSgtYm91bmRzLngsLWJvdW5kcy55KTtcblxuICAgIC8vIG1ha2Ugc3VyZSB3ZSBzZXQgdGhlIGFscGhhIG9mIHRoZSBncmFwaGljcyB0byAxIGZvciB0aGUgcmVuZGVyLi5cbiAgICB0aGlzLndvcmxkQWxwaGEgPSAxO1xuXG4gICAgLy8gbm93IHJlbmRlciB0aGUgZ3JhcGhpYy4uXG4gICAgQ2FudmFzR3JhcGhpY3MucmVuZGVyR3JhcGhpY3ModGhpcywgdGhpcy5fY2FjaGVkU3ByaXRlLmJ1ZmZlci5jb250ZXh0KTtcblxuICAgIHRoaXMuX2NhY2hlZFNwcml0ZS5hbHBoYSA9IHRoaXMuYWxwaGE7XG59O1xuKi9cbi8qKlxuICogVXBkYXRlcyB0ZXh0dXJlIHNpemUgYmFzZWQgb24gY2FudmFzIHNpemVcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG4vKlxuR3JhcGhpY3MucHJvdG90eXBlLnVwZGF0ZUNhY2hlZFNwcml0ZVRleHR1cmUgPSBmdW5jdGlvbiAoKVxue1xuICAgIHZhciBjYWNoZWRTcHJpdGUgPSB0aGlzLl9jYWNoZWRTcHJpdGU7XG4gICAgdmFyIHRleHR1cmUgPSBjYWNoZWRTcHJpdGUudGV4dHVyZTtcbiAgICB2YXIgY2FudmFzID0gY2FjaGVkU3ByaXRlLmJ1ZmZlci5jYW52YXM7XG5cbiAgICB0ZXh0dXJlLmJhc2VUZXh0dXJlLndpZHRoID0gY2FudmFzLndpZHRoO1xuICAgIHRleHR1cmUuYmFzZVRleHR1cmUuaGVpZ2h0ID0gY2FudmFzLmhlaWdodDtcbiAgICB0ZXh0dXJlLmNyb3Aud2lkdGggPSB0ZXh0dXJlLmZyYW1lLndpZHRoID0gY2FudmFzLndpZHRoO1xuICAgIHRleHR1cmUuY3JvcC5oZWlnaHQgPSB0ZXh0dXJlLmZyYW1lLmhlaWdodCA9IGNhbnZhcy5oZWlnaHQ7XG5cbiAgICBjYWNoZWRTcHJpdGUuX3dpZHRoID0gY2FudmFzLndpZHRoO1xuICAgIGNhY2hlZFNwcml0ZS5faGVpZ2h0ID0gY2FudmFzLmhlaWdodDtcblxuICAgIC8vIHVwZGF0ZSB0aGUgZGlydHkgYmFzZSB0ZXh0dXJlc1xuICAgIHRleHR1cmUuYmFzZVRleHR1cmUuZGlydHkoKTtcbn07Ki9cblxuLyoqXG4gKiBEZXN0cm95cyBhIHByZXZpb3VzIGNhY2hlZCBzcHJpdGUuXG4gKlxuICovXG4vKlxuR3JhcGhpY3MucHJvdG90eXBlLmRlc3Ryb3lDYWNoZWRTcHJpdGUgPSBmdW5jdGlvbiAoKVxue1xuICAgIHRoaXMuX2NhY2hlZFNwcml0ZS50ZXh0dXJlLmRlc3Ryb3kodHJ1ZSk7XG5cbiAgICAvLyBsZXQgdGhlIGdjIGNvbGxlY3QgdGhlIHVudXNlZCBzcHJpdGVcbiAgICAvLyBUT0RPIGNvdWxkIGJlIG9iamVjdCBwb29sZWQhXG4gICAgdGhpcy5fY2FjaGVkU3ByaXRlID0gbnVsbDtcbn07Ki9cblxuLyoqXG4gKiBEcmF3cyB0aGUgZ2l2ZW4gc2hhcGUgdG8gdGhpcyBHcmFwaGljcyBvYmplY3QuIENhbiBiZSBhbnkgb2YgQ2lyY2xlLCBSZWN0YW5nbGUsIEVsbGlwc2UsIExpbmUgb3IgUG9seWdvbi5cbiAqXG4gKiBAcGFyYW0gc2hhcGUge1BJWEkuQ2lyY2xlfFBJWEkuUmVjdGFuZ2xlfFBJWEkuRWxsaXBzZXxQSVhJLkxpbmV8UElYSS5Qb2x5Z29ufSBUaGUgc2hhcGUgb2JqZWN0IHRvIGRyYXcuXG4gKiBAcmV0dXJuIHtQSVhJLkdyYXBoaWNzRGF0YX0gVGhlIGdlbmVyYXRlZCBHcmFwaGljc0RhdGEgb2JqZWN0LlxuICovXG5HcmFwaGljcy5wcm90b3R5cGUuZHJhd1NoYXBlID0gZnVuY3Rpb24gKHNoYXBlKVxue1xuICAgIGlmICh0aGlzLmN1cnJlbnRQYXRoKVxuICAgIHtcbiAgICAgICAgLy8gY2hlY2sgY3VycmVudCBwYXRoIVxuICAgICAgICBpZiAodGhpcy5jdXJyZW50UGF0aC5zaGFwZS5wb2ludHMubGVuZ3RoIDw9IDIpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuZ3JhcGhpY3NEYXRhLnBvcCgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5jdXJyZW50UGF0aCA9IG51bGw7XG5cbiAgICB2YXIgZGF0YSA9IG5ldyBHcmFwaGljc0RhdGEodGhpcy5saW5lV2lkdGgsIHRoaXMubGluZUNvbG9yLCB0aGlzLmxpbmVBbHBoYSwgdGhpcy5maWxsQ29sb3IsIHRoaXMuZmlsbEFscGhhLCB0aGlzLmZpbGxpbmcsIHNoYXBlKTtcblxuICAgIHRoaXMuZ3JhcGhpY3NEYXRhLnB1c2goZGF0YSk7XG5cbiAgICBpZiAoZGF0YS50eXBlID09PSBDT05TVC5TSEFQRVMuUE9MWSlcbiAgICB7XG4gICAgICAgIGRhdGEuc2hhcGUuY2xvc2VkID0gZGF0YS5zaGFwZS5jbG9zZWQgfHwgdGhpcy5maWxsaW5nO1xuICAgICAgICB0aGlzLmN1cnJlbnRQYXRoID0gZGF0YTtcbiAgICB9XG5cbiAgICB0aGlzLmRpcnR5ID0gdGhpcy5ib3VuZHNEaXJ0eSA9IHRydWU7XG5cbiAgICByZXR1cm4gZGF0YTtcbn07XG5cbi8qKlxuICogRGVzdHJveXMgdGhlIEdyYXBoaWNzIG9iamVjdC5cbiAqL1xuR3JhcGhpY3MucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoKSB7XG4gICAgQ29udGFpbmVyLnByb3RvdHlwZS5kZXN0cm95LmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG5cbiAgICAvLyBkZXN0cm95IGVhY2ggb2YgdGhlIEdyYXBoaWNzRGF0YSBvYmplY3RzXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmdyYXBoaWNzRGF0YS5sZW5ndGg7ICsraSkge1xuICAgICAgICB0aGlzLmdyYXBoaWNzRGF0YVtpXS5kZXN0cm95KCk7XG4gICAgfVxuXG4gICAgLy8gZm9yIGVhY2ggd2ViZ2wgZGF0YSBlbnRyeSwgZGVzdHJveSB0aGUgV2ViR0xHcmFwaGljc0RhdGFcbiAgICBmb3IgKHZhciBpZCBpbiB0aGlzLl93ZWJnbCkge1xuICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IHRoaXMuX3dlYmdsW2lkXS5kYXRhLmxlbmd0aDsgKytqKSB7XG4gICAgICAgICAgICB0aGlzLl93ZWJnbFtpZF0uZGF0YVtqXS5kZXN0cm95KCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLmdyYXBoaWNzRGF0YSA9IG51bGw7XG5cbiAgICB0aGlzLmN1cnJlbnRQYXRoID0gbnVsbDtcbiAgICB0aGlzLl93ZWJnbCA9IG51bGw7XG4gICAgdGhpcy5fbG9jYWxCb3VuZHMgPSBudWxsO1xufTtcbiIsIi8qKlxuICogQSBHcmFwaGljc0RhdGEgb2JqZWN0LlxuICpcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqIEBwYXJhbSBsaW5lV2lkdGgge251bWJlcn0gdGhlIHdpZHRoIG9mIHRoZSBsaW5lIHRvIGRyYXdcbiAqIEBwYXJhbSBsaW5lQ29sb3Ige251bWJlcn0gdGhlIGNvbG9yIG9mIHRoZSBsaW5lIHRvIGRyYXdcbiAqIEBwYXJhbSBsaW5lQWxwaGEge251bWJlcn0gdGhlIGFscGhhIG9mIHRoZSBsaW5lIHRvIGRyYXdcbiAqIEBwYXJhbSBmaWxsQ29sb3Ige251bWJlcn0gdGhlIGNvbG9yIG9mIHRoZSBmaWxsXG4gKiBAcGFyYW0gZmlsbEFscGhhIHtudW1iZXJ9IHRoZSBhbHBoYSBvZiB0aGUgZmlsbFxuICogQHBhcmFtIGZpbGwgICAgICB7Ym9vbGVhbn0gd2hldGhlciBvciBub3QgdGhlIHNoYXBlIGlzIGZpbGxlZCB3aXRoIGEgY29sb3VyXG4gKiBAcGFyYW0gc2hhcGUgICAgIHtDaXJjbGV8UmVjdGFuZ2xlfEVsbGlwc2V8TGluZXxQb2x5Z29ufSBUaGUgc2hhcGUgb2JqZWN0IHRvIGRyYXcuXG4gKi9cbmZ1bmN0aW9uIEdyYXBoaWNzRGF0YShsaW5lV2lkdGgsIGxpbmVDb2xvciwgbGluZUFscGhhLCBmaWxsQ29sb3IsIGZpbGxBbHBoYSwgZmlsbCwgc2hhcGUpXG57XG4gICAgLypcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9IHRoZSB3aWR0aCBvZiB0aGUgbGluZSB0byBkcmF3XG4gICAgICovXG4gICAgdGhpcy5saW5lV2lkdGggPSBsaW5lV2lkdGg7XG5cbiAgICAvKlxuICAgICAqIEBtZW1iZXIge251bWJlcn0gdGhlIGNvbG9yIG9mIHRoZSBsaW5lIHRvIGRyYXdcbiAgICAgKi9cbiAgICB0aGlzLmxpbmVDb2xvciA9IGxpbmVDb2xvcjtcbiAgICAvKlxuICAgICAqIEBtZW1iZXIge251bWJlcn0gdGhlIGFscGhhIG9mIHRoZSBsaW5lIHRvIGRyYXdcbiAgICAgKi9cbiAgICB0aGlzLmxpbmVBbHBoYSA9IGxpbmVBbHBoYTtcbiAgICAvKlxuICAgICAqIEBtZW1iZXIge251bWJlcn0gY2FjaGVkIHRpbnQgb2YgdGhlIGxpbmUgdG8gZHJhd1xuICAgICAqL1xuICAgIHRoaXMuX2xpbmVUaW50ID0gbGluZUNvbG9yO1xuXG4gICAgLypcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9IHRoZSBjb2xvciBvZiB0aGUgZmlsbFxuICAgICAqL1xuICAgIHRoaXMuZmlsbENvbG9yID0gZmlsbENvbG9yO1xuXG4gICAgLypcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9IHRoZSBhbHBoYSBvZiB0aGUgZmlsbFxuICAgICAqL1xuICAgIHRoaXMuZmlsbEFscGhhID0gZmlsbEFscGhhO1xuXG4gICAgLypcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9IGNhY2hlZCB0aW50IG9mIHRoZSBmaWxsXG4gICAgICovXG4gICAgdGhpcy5fZmlsbFRpbnQgPSBmaWxsQ29sb3I7XG5cbiAgICAvKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59IHdoZXRoZXIgb3Igbm90IHRoZSBzaGFwZSBpcyBmaWxsZWQgd2l0aCBhIGNvbG91clxuICAgICAqL1xuICAgIHRoaXMuZmlsbCA9IGZpbGw7XG5cbiAgICAvKlxuICAgICAqIEBtZW1iZXIge1BJWEkuQ2lyY2xlfFBJWEkuUmVjdGFuZ2xlfFBJWEkuRWxsaXBzZXxQSVhJLkxpbmV8UElYSS5Qb2x5Z29ufSBUaGUgc2hhcGUgb2JqZWN0IHRvIGRyYXcuXG4gICAgICovXG4gICAgdGhpcy5zaGFwZSA9IHNoYXBlO1xuXG4gICAgLypcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9IFRoZSB0eXBlIG9mIHRoZSBzaGFwZSwgc2VlIHRoZSBDb25zdC5TaGFwZXMgZmlsZSBmb3IgYWxsIHRoZSBleGlzdGluZyB0eXBlcyxcbiAgICAgKi9cbiAgICB0aGlzLnR5cGUgPSBzaGFwZS50eXBlO1xufVxuXG5HcmFwaGljc0RhdGEucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gR3JhcGhpY3NEYXRhO1xubW9kdWxlLmV4cG9ydHMgPSBHcmFwaGljc0RhdGE7XG5cbi8qKlxuICogQ3JlYXRlcyBhIG5ldyBHcmFwaGljc0RhdGEgb2JqZWN0IHdpdGggdGhlIHNhbWUgdmFsdWVzIGFzIHRoaXMgb25lLlxuICpcbiAqIEByZXR1cm4ge1BJWEkuR3JhcGhpY3NEYXRhfVxuICovXG5HcmFwaGljc0RhdGEucHJvdG90eXBlLmNsb25lID0gZnVuY3Rpb24gKClcbntcbiAgICByZXR1cm4gbmV3IEdyYXBoaWNzRGF0YShcbiAgICAgICAgdGhpcy5saW5lV2lkdGgsXG4gICAgICAgIHRoaXMubGluZUNvbG9yLFxuICAgICAgICB0aGlzLmxpbmVBbHBoYSxcbiAgICAgICAgdGhpcy5maWxsQ29sb3IsXG4gICAgICAgIHRoaXMuZmlsbEFscGhhLFxuICAgICAgICB0aGlzLmZpbGwsXG4gICAgICAgIHRoaXMuc2hhcGVcbiAgICApO1xufTtcblxuLyoqXG4gKiBEZXN0cm95cyB0aGUgR3JhcGhpY3MgZGF0YS5cbiAqL1xuR3JhcGhpY3NEYXRhLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKCkge1xuICAgIHRoaXMuc2hhcGUgPSBudWxsO1xufTtcbiIsInZhciB1dGlscyA9IHJlcXVpcmUoJy4uLy4uL3V0aWxzJyksXG4gICAgbWF0aCA9IHJlcXVpcmUoJy4uLy4uL21hdGgnKSxcbiAgICBDT05TVCA9IHJlcXVpcmUoJy4uLy4uL2NvbnN0JyksXG4gICAgT2JqZWN0UmVuZGVyZXIgPSByZXF1aXJlKCcuLi8uLi9yZW5kZXJlcnMvd2ViZ2wvdXRpbHMvT2JqZWN0UmVuZGVyZXInKSxcbiAgICBXZWJHTFJlbmRlcmVyID0gcmVxdWlyZSgnLi4vLi4vcmVuZGVyZXJzL3dlYmdsL1dlYkdMUmVuZGVyZXInKSxcbiAgICBXZWJHTEdyYXBoaWNzRGF0YSA9IHJlcXVpcmUoJy4vV2ViR0xHcmFwaGljc0RhdGEnKSxcbiAgICBQcmltaXRpdmVTaGFkZXIgPSByZXF1aXJlKCcuL1ByaW1pdGl2ZVNoYWRlcicpLFxuXG4gICAgLy8gc29tZSBkcmF3aW5nIGZ1bmN0aW9ucy4uXG4gICAgYnVpbGRMaW5lID0gcmVxdWlyZSgnLi9idWlsZExpbmUnKTtcbiAgICBidWlsZFBvbHkgPSByZXF1aXJlKCcuL2J1aWxkUG9seScpO1xuICAgIGJ1aWxkQ29tcGxleFBvbHkgPSByZXF1aXJlKCcuL2J1aWxkQ29tcGxleFBvbHknKTtcbiAgICBidWlsZFJlY3RhbmdsZSA9IHJlcXVpcmUoJy4vYnVpbGRSZWN0YW5nbGUnKTtcbiAgICBidWlsZFJvdW5kZWRSZWN0YW5nbGUgPSByZXF1aXJlKCcuL2J1aWxkUm91bmRlZFJlY3RhbmdsZScpO1xuICAgIGJ1aWxkQ2lyY2xlID0gcmVxdWlyZSgnLi9idWlsZENpcmNsZScpO1xuXG4gICAgZWFyY3V0ID0gcmVxdWlyZSgnZWFyY3V0Jyk7XG5cbi8qKlxuICogUmVuZGVycyB0aGUgZ3JhcGhpY3Mgb2JqZWN0LlxuICpcbiAqIEBjbGFzc1xuICogQHByaXZhdGVcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAZXh0ZW5kcyBQSVhJLk9iamVjdFJlbmRlcmVyXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcn0gVGhlIHJlbmRlcmVyIHRoaXMgb2JqZWN0IHJlbmRlcmVyIHdvcmtzIGZvci5cbiAqL1xuZnVuY3Rpb24gR3JhcGhpY3NSZW5kZXJlcihyZW5kZXJlcilcbntcbiAgICBPYmplY3RSZW5kZXJlci5jYWxsKHRoaXMsIHJlbmRlcmVyKTtcblxuICAgIHRoaXMuZ3JhcGhpY3NEYXRhUG9vbCA9IFtdO1xuXG4gICAgdGhpcy5wcmltaXRpdmVTaGFkZXIgPSBudWxsO1xuICAgIHRoaXMuY29tcGxleFByaW1pdGl2ZVNoYWRlciA9IG51bGw7XG5cbiAgICB0aGlzLmdsID0gcmVuZGVyZXIuZ2w7XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIGlzIHRoZSBtYXhpbXVtIG51bWJlciBvZiBwb2ludHMgYSBwb2x5IGNhbiBjb250YWluIGJlZm9yZSBpdCBpcyByZW5kZXJlZCBhcyBhIGNvbXBsZXggcG9seWdvbiAodXNpbmcgdGhlIHN0ZW5jaWwgYnVmZmVyKVxuICAgICAqIEB0eXBlIHtOdW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy5tYXhpbXVtU2ltcGxlUG9seVNpemUgPSAyMDA7XG59XG5cbkdyYXBoaWNzUmVuZGVyZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShPYmplY3RSZW5kZXJlci5wcm90b3R5cGUpO1xuR3JhcGhpY3NSZW5kZXJlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBHcmFwaGljc1JlbmRlcmVyO1xubW9kdWxlLmV4cG9ydHMgPSBHcmFwaGljc1JlbmRlcmVyO1xuXG5XZWJHTFJlbmRlcmVyLnJlZ2lzdGVyUGx1Z2luKCdncmFwaGljcycsIEdyYXBoaWNzUmVuZGVyZXIpO1xuXG4vKipcbiAqIENhbGxlZCB3aGVuIHRoZXJlIGlzIGEgV2ViR0wgY29udGV4dCBjaGFuZ2VcbiAqXG4gKiBAcHJpdmF0ZVxuICpcbiAqL1xuR3JhcGhpY3NSZW5kZXJlci5wcm90b3R5cGUub25Db250ZXh0Q2hhbmdlID0gZnVuY3Rpb24oKVxue1xuICAgIHRoaXMuZ2wgPSB0aGlzLnJlbmRlcmVyLmdsO1xuICAgIHRoaXMucHJpbWl0aXZlU2hhZGVyID0gbmV3IFByaW1pdGl2ZVNoYWRlcih0aGlzLmdsKVxufTtcblxuLyoqXG4gKiBEZXN0cm95cyB0aGlzIHJlbmRlcmVyLlxuICpcbiAqL1xuR3JhcGhpY3NSZW5kZXJlci5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uICgpIHtcbiAgICBPYmplY3RSZW5kZXJlci5wcm90b3R5cGUuZGVzdHJveS5jYWxsKHRoaXMpO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmdyYXBoaWNzRGF0YVBvb2wubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgdGhpcy5ncmFwaGljc0RhdGFQb29sW2ldLmRlc3Ryb3koKTtcbiAgICB9XG5cbiAgICB0aGlzLmdyYXBoaWNzRGF0YVBvb2wgPSBudWxsO1xufTtcblxuLyoqXG4gKiBSZW5kZXJzIGEgZ3JhcGhpY3Mgb2JqZWN0LlxuICpcbiAqIEBwYXJhbSBncmFwaGljcyB7UElYSS5HcmFwaGljc30gVGhlIGdyYXBoaWNzIG9iamVjdCB0byByZW5kZXIuXG4gKi9cbkdyYXBoaWNzUmVuZGVyZXIucHJvdG90eXBlLnJlbmRlciA9IGZ1bmN0aW9uKGdyYXBoaWNzKVxue1xuICAgIHZhciByZW5kZXJlciA9IHRoaXMucmVuZGVyZXI7XG4gICAgdmFyIGdsID0gcmVuZGVyZXIuZ2w7XG5cbiAgICB2YXIgd2ViR0xEYXRhO1xuICAvLyAgY29uc29sZS5sb2coZ3JhcGhpY3MpXG4gICAgaWYgKGdyYXBoaWNzLmRpcnR5IHx8ICFncmFwaGljcy5fd2ViR0xbZ2wuaWRdKVxuICAgIHtcbiAgICAgICAgdGhpcy51cGRhdGVHcmFwaGljcyhncmFwaGljcyk7XG4gICAgfVxuXG4gICAgdmFyIHdlYkdMID0gZ3JhcGhpY3MuX3dlYkdMW2dsLmlkXTtcblxuICAgIC8vIFRoaXMgIGNvdWxkIGJlIHNwZWVkZWQgdXAgZm9yIHN1cmUhXG5cbiAgICByZW5kZXJlci5ibGVuZE1vZGVNYW5hZ2VyLnNldEJsZW5kTW9kZSggZ3JhcGhpY3MuYmxlbmRNb2RlICk7XG5cbi8vICAgIHZhciBtYXRyaXggPSAgZ3JhcGhpY3Mud29ybGRUcmFuc2Zvcm0uY2xvbmUoKTtcbi8vICAgIHZhciBtYXRyaXggPSAgcmVuZGVyZXIuY3VycmVudFJlbmRlclRhcmdldC5wcm9qZWN0aW9uTWF0cml4LmNsb25lKCk7XG4vLyAgICBtYXRyaXguYXBwZW5kKGdyYXBoaWNzLndvcmxkVHJhbnNmb3JtKTtcblxuICAgIGZvciAodmFyIGkgPSAwLCBuID0gd2ViR0wuZGF0YS5sZW5ndGg7IGkgPCBuOyBpKyspXG4gICAge1xuICAgICAgICB3ZWJHTERhdGEgPSB3ZWJHTC5kYXRhW2ldO1xuXG4gICAgICAgIGlmICh3ZWJHTC5kYXRhW2ldLm1vZGUgPT09IDEpXG4gICAgICAgIHtcbiAgICAgICAgICAgIC8vVE9ETyBmaXggdGhpcyBvbmUhXG4gICAgICAgICAgICBcbiAgICAgICAgICAgIC8qXG4gICAgICAgICAgICByZW5kZXJlci5zdGVuY2lsTWFuYWdlci5wdXNoU3RlbmNpbChncmFwaGljcywgd2ViR0xEYXRhKTtcblxuICAgICAgICAgICAgZ2wudW5pZm9ybTFmKHJlbmRlcmVyLnNoYWRlck1hbmFnZXIuY29tcGxleFByaW1pdGl2ZVNoYWRlci51bmlmb3Jtcy5hbHBoYS5fbG9jYXRpb24sIGdyYXBoaWNzLndvcmxkQWxwaGEgKiB3ZWJHTERhdGEuYWxwaGEpO1xuXG4gICAgICAgICAgICAvLyByZW5kZXIgcXVhZC4uXG4gICAgICAgICAgICBnbC5kcmF3RWxlbWVudHMoZ2wuVFJJQU5HTEVfRkFOLCA0LCBnbC5VTlNJR05FRF9TSE9SVCwgKCB3ZWJHTERhdGEuaW5kaWNlcy5sZW5ndGggLSA0ICkgKiAyICk7XG5cbiAgICAgICAgICAgIHJlbmRlcmVyLnN0ZW5jaWxNYW5hZ2VyLnBvcFN0ZW5jaWwoZ3JhcGhpY3MsIHdlYkdMRGF0YSk7XG4gICAgICAgICAgICAqL1xuICAgICAgICB9XG4gICAgICAgIGVsc2VcbiAgICAgICAge1xuXG4gICAgICAgICAgICBzaGFkZXIgPSB0aGlzLnByaW1pdGl2ZVNoYWRlcjtcblxuICAgICAgICAgICAgcmVuZGVyZXIuYmluZFNoYWRlcihzaGFkZXIpXG5cbiAgICAgICAgICAgIHNoYWRlci51bmlmb3Jtcy50cmFuc2xhdGlvbk1hdHJpeCA9IGdyYXBoaWNzLndvcmxkVHJhbnNmb3JtLnRvQXJyYXkodHJ1ZSk7XG4gICAgICAgICAgICBzaGFkZXIudW5pZm9ybXMudGludCA9IHV0aWxzLmhleDJyZ2IoZ3JhcGhpY3MudGludCk7XG4gICAgICAgICAgICBzaGFkZXIudW5pZm9ybXMuYWxwaGEgPSBncmFwaGljcy53b3JsZEFscGhhO1xuXG5cbiAgICAgICAgICAgIGdsLmJpbmRCdWZmZXIoZ2wuQVJSQVlfQlVGRkVSLCB3ZWJHTERhdGEuYnVmZmVyKTtcblxuICAgICAgICAgICAgc2hhZGVyID0gdGhpcy5wcmltaXRpdmVTaGFkZXI7XG5cbiAgICAgICAgICAgIHNoYWRlci5hdHRyaWJ1dGVzLmFWZXJ0ZXhQb3NpdGlvbi5wb2ludGVyKGdsLkZMT0FULCBmYWxzZSwgNCAqIDYsIDApO1xuICAgICAgICAgICAgc2hhZGVyLmF0dHJpYnV0ZXMuYUNvbG9yLnBvaW50ZXIoZ2wuRkxPQVQsIGZhbHNlLCA0ICogNiwgMiAqIDQpO1xuXG4gICAgICAgICAgICBnbC5lbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShzaGFkZXIuYXR0cmlidXRlcy5hVmVydGV4UG9zaXRpb24ubG9jYXRpb24pO1xuICAgICAgICAgICAgZ2wuZW5hYmxlVmVydGV4QXR0cmliQXJyYXkoc2hhZGVyLmF0dHJpYnV0ZXMuYUNvbG9yLmxvY2F0aW9uKTtcblxuICAgICAgICAgICAgLy8gc2V0IHRoZSBpbmRleCBidWZmZXIhXG4gICAgICAgICAgICBnbC5iaW5kQnVmZmVyKGdsLkVMRU1FTlRfQVJSQVlfQlVGRkVSLCB3ZWJHTERhdGEuaW5kZXhCdWZmZXIpO1xuICAgICAgICAgICAgZ2wuZHJhd0VsZW1lbnRzKGdsLlRSSUFOR0xFX1NUUklQLCAgd2ViR0xEYXRhLmluZGljZXMubGVuZ3RoLCBnbC5VTlNJR05FRF9TSE9SVCwgMCApO1xuICAgICAgICB9XG5cbiAgICAgICAgcmVuZGVyZXIuZHJhd0NvdW50Kys7XG4gICAgfVxufTtcblxuLyoqXG4gKiBVcGRhdGVzIHRoZSBncmFwaGljcyBvYmplY3RcbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIGdyYXBoaWNzIHtQSVhJLkdyYXBoaWNzfSBUaGUgZ3JhcGhpY3Mgb2JqZWN0IHRvIHVwZGF0ZVxuICovXG5HcmFwaGljc1JlbmRlcmVyLnByb3RvdHlwZS51cGRhdGVHcmFwaGljcyA9IGZ1bmN0aW9uKGdyYXBoaWNzKVxue1xuICAgIHZhciBnbCA9IHRoaXMucmVuZGVyZXIuZ2w7XG5cbiAgICAgLy8gZ2V0IHRoZSBjb250ZXh0cyBncmFwaGljcyBvYmplY3RcbiAgICB2YXIgd2ViR0wgPSBncmFwaGljcy5fd2ViR0xbZ2wuaWRdO1xuXG4gICAgLy8gaWYgdGhlIGdyYXBoaWNzIG9iamVjdCBkb2VzIG5vdCBleGlzdCBpbiB0aGUgd2ViR0wgY29udGV4dCB0aW1lIHRvIGNyZWF0ZSBpdCFcbiAgICBpZiAoIXdlYkdMKVxuICAgIHtcbiAgICAgICAgd2ViR0wgPSBncmFwaGljcy5fd2ViR0xbZ2wuaWRdID0ge2xhc3RJbmRleDowLCBkYXRhOltdLCBnbDpnbH07XG4gICAgfVxuXG4gICBcbiAgICAvLyBmbGFnIHRoZSBncmFwaGljcyBhcyBub3QgZGlydHkgYXMgd2UgYXJlIGFib3V0IHRvIHVwZGF0ZSBpdC4uLlxuICAgIGdyYXBoaWNzLmRpcnR5ID0gZmFsc2U7XG5cbiAgICB2YXIgaTtcblxuICAgIC8vIGlmIHRoZSB1c2VyIGNsZWFyZWQgdGhlIGdyYXBoaWNzIG9iamVjdCB3ZSB3aWxsIG5lZWQgdG8gY2xlYXIgZXZlcnkgb2JqZWN0XG4gICAgaWYgKGdyYXBoaWNzLmNsZWFyRGlydHkpXG4gICAge1xuICAgICAgICBncmFwaGljcy5jbGVhckRpcnR5ID0gZmFsc2U7XG5cbiAgICAgICAgLy8gbG9vcCB0aHJvdWdoIGFuZCByZXR1cm4gYWxsIHRoZSB3ZWJHTERhdGFzIHRvIHRoZSBvYmplY3QgcG9vbCBzbyB0aGFuIGNhbiBiZSByZXVzZWQgbGF0ZXIgb25cbiAgICAgICAgZm9yIChpID0gMDsgaSA8IHdlYkdMLmRhdGEubGVuZ3RoOyBpKyspXG4gICAgICAgIHtcbiAgICAgICAgICAgIHZhciBncmFwaGljc0RhdGEgPSB3ZWJHTC5kYXRhW2ldO1xuICAgICAgICAgICAgZ3JhcGhpY3NEYXRhLnJlc2V0KCk7XG4gICAgICAgICAgICB0aGlzLmdyYXBoaWNzRGF0YVBvb2wucHVzaCggZ3JhcGhpY3NEYXRhICk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBjbGVhciB0aGUgYXJyYXkgYW5kIHJlc2V0IHRoZSBpbmRleC4uXG4gICAgICAgIHdlYkdMLmRhdGEgPSBbXTtcbiAgICAgICAgd2ViR0wubGFzdEluZGV4ID0gMDtcbiAgICB9XG5cbiAgICB2YXIgd2ViR0xEYXRhO1xuXG4gICAgLy8gbG9vcCB0aHJvdWdoIHRoZSBncmFwaGljcyBkYXRhcyBhbmQgY29uc3RydWN0IGVhY2ggb25lLi5cbiAgICAvLyBpZiB0aGUgb2JqZWN0IGlzIGEgY29tcGxleCBmaWxsIHRoZW4gdGhlIG5ldyBzdGVuY2lsIGJ1ZmZlciB0ZWNobmlxdWUgd2lsbCBiZSB1c2VkXG4gICAgLy8gb3RoZXIgd2lzZSBncmFwaGljcyBvYmplY3RzIHdpbGwgYmUgcHVzaGVkIGludG8gYSBiYXRjaC4uXG4gICAgZm9yIChpID0gd2ViR0wubGFzdEluZGV4OyBpIDwgZ3JhcGhpY3MuZ3JhcGhpY3NEYXRhLmxlbmd0aDsgaSsrKVxuICAgIHtcbiAgICAgICAgdmFyIGRhdGEgPSBncmFwaGljcy5ncmFwaGljc0RhdGFbaV07XG5cbiAgICAgICAgaWYgKGRhdGEudHlwZSA9PT0gQ09OU1QuU0hBUEVTLlBPTFkpXG4gICAgICAgIHtcbiAgICAgICAgICAgIC8vIG5lZWQgdG8gYWRkIHRoZSBwb2ludHMgdGhlIHRoZSBncmFwaGljcyBvYmplY3QuLlxuICAgICAgICAgICAgZGF0YS5wb2ludHMgPSBkYXRhLnNoYXBlLnBvaW50cy5zbGljZSgpO1xuICAgICAgICAgICAgaWYgKGRhdGEuc2hhcGUuY2xvc2VkKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIC8vIGNsb3NlIHRoZSBwb2x5IGlmIHRoZSB2YWx1ZSBpcyB0cnVlIVxuICAgICAgICAgICAgICAgIGlmIChkYXRhLnBvaW50c1swXSAhPT0gZGF0YS5wb2ludHNbZGF0YS5wb2ludHMubGVuZ3RoLTJdIHx8IGRhdGEucG9pbnRzWzFdICE9PSBkYXRhLnBvaW50c1tkYXRhLnBvaW50cy5sZW5ndGgtMV0pXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBkYXRhLnBvaW50cy5wdXNoKGRhdGEucG9pbnRzWzBdLCBkYXRhLnBvaW50c1sxXSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBNQUtFIFNVUkUgV0UgSEFWRSBUSEUgQ09SUkVDVCBUWVBFLi5cbiAgICAgICAgICAgIGlmIChkYXRhLmZpbGwpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgaWYgKGRhdGEucG9pbnRzLmxlbmd0aCA+PSA2KVxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGRhdGEucG9pbnRzLmxlbmd0aCA8IHRoaXMubWF4aW11bVNpbXBsZVBvbHlTaXplICogMilcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgd2ViR0xEYXRhID0gdGhpcy5zd2l0Y2hNb2RlKHdlYkdMLCAwKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNhbkRyYXdVc2luZ1NpbXBsZSA9IGJ1aWxkUG9seShkYXRhLCB3ZWJHTERhdGEpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWNhbkRyYXdVc2luZ1NpbXBsZSlcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3ZWJHTERhdGEgPSB0aGlzLnN3aXRjaE1vZGUod2ViR0wsIDEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1aWxkQ29tcGxleFBvbHkoZGF0YSwgd2ViR0xEYXRhKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgd2ViR0xEYXRhID0gdGhpcy5zd2l0Y2hNb2RlKHdlYkdMLCAxKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJ1aWxkQ29tcGxleFBvbHkoZGF0YSwgd2ViR0xEYXRhKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGRhdGEubGluZVdpZHRoID4gMClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB3ZWJHTERhdGEgPSB0aGlzLnN3aXRjaE1vZGUod2ViR0wsIDApO1xuICAgICAgICAgICAgICAgIGJ1aWxkTGluZShkYXRhLCB3ZWJHTERhdGEpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2VcbiAgICAgICAge1xuICAgICAgICAgICAgd2ViR0xEYXRhID0gdGhpcy5zd2l0Y2hNb2RlKHdlYkdMLCAwKTtcblxuICAgICAgICAgICAgaWYgKGRhdGEudHlwZSA9PT0gQ09OU1QuU0hBUEVTLlJFQ1QpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgYnVpbGRSZWN0YW5nbGUoZGF0YSwgd2ViR0xEYXRhKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGRhdGEudHlwZSA9PT0gQ09OU1QuU0hBUEVTLkNJUkMgfHwgZGF0YS50eXBlID09PSBDT05TVC5TSEFQRVMuRUxJUClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBidWlsZENpcmNsZShkYXRhLCB3ZWJHTERhdGEpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoZGF0YS50eXBlID09PSBDT05TVC5TSEFQRVMuUlJFQylcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBidWlsZFJvdW5kZWRSZWN0YW5nbGUoZGF0YSwgd2ViR0xEYXRhKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHdlYkdMLmxhc3RJbmRleCsrO1xuICAgIH1cblxuICAgIC8vIHVwbG9hZCBhbGwgdGhlIGRpcnR5IGRhdGEuLi5cbiAgICBmb3IgKGkgPSAwOyBpIDwgd2ViR0wuZGF0YS5sZW5ndGg7IGkrKylcbiAgICB7XG4gICAgICAgIHdlYkdMRGF0YSA9IHdlYkdMLmRhdGFbaV07XG5cbiAgICAgICAgaWYgKHdlYkdMRGF0YS5kaXJ0eSlcbiAgICAgICAge1xuICAgICAgICAgICAgd2ViR0xEYXRhLnVwbG9hZCgpO1xuICAgICAgICB9XG4gICAgfVxufTtcblxuLyoqXG4gKlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0gd2ViR0wge1dlYkdMUmVuZGVyaW5nQ29udGV4dH0gdGhlIGN1cnJlbnQgV2ViR0wgZHJhd2luZyBjb250ZXh0XG4gKiBAcGFyYW0gdHlwZSB7bnVtYmVyfSBUT0RPIEBBbHZpblxuICovXG5HcmFwaGljc1JlbmRlcmVyLnByb3RvdHlwZS5zd2l0Y2hNb2RlID0gZnVuY3Rpb24gKHdlYkdMLCB0eXBlKVxue1xuICAgIHZhciB3ZWJHTERhdGE7XG5cbiAgICBpZiAoIXdlYkdMLmRhdGEubGVuZ3RoKVxuICAgIHtcbiAgICAgICAgd2ViR0xEYXRhID0gdGhpcy5ncmFwaGljc0RhdGFQb29sLnBvcCgpIHx8IG5ldyBXZWJHTEdyYXBoaWNzRGF0YSh3ZWJHTC5nbCk7XG4gICAgICAgIHdlYkdMRGF0YS5tb2RlID0gdHlwZTtcbiAgICAgICAgd2ViR0wuZGF0YS5wdXNoKHdlYkdMRGF0YSk7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHdlYkdMRGF0YSA9IHdlYkdMLmRhdGFbd2ViR0wuZGF0YS5sZW5ndGgtMV07XG5cbiAgICAgICAgaWYgKCh3ZWJHTERhdGEucG9pbnRzLmxlbmd0aCA+IDMyMDAwMCkgfHwgd2ViR0xEYXRhLm1vZGUgIT09IHR5cGUgfHwgdHlwZSA9PT0gMSlcbiAgICAgICAge1xuICAgICAgICAgICAgd2ViR0xEYXRhID0gdGhpcy5ncmFwaGljc0RhdGFQb29sLnBvcCgpIHx8IG5ldyBXZWJHTEdyYXBoaWNzRGF0YSh3ZWJHTC5nbCk7XG4gICAgICAgICAgICB3ZWJHTERhdGEubW9kZSA9IHR5cGU7XG4gICAgICAgICAgICB3ZWJHTC5kYXRhLnB1c2god2ViR0xEYXRhKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHdlYkdMRGF0YS5kaXJ0eSA9IHRydWU7XG5cbiAgICByZXR1cm4gd2ViR0xEYXRhO1xufTtcblxuIiwidmFyIFNoYWRlciA9IHJlcXVpcmUoJ3BpeGktZ2wtY29yZScpLkdMU2hhZGVyO1xuXG4vKipcbiAqIFRoaXMgc2hhZGVyIGlzIHVzZWQgdG8gZHJhdyBzaW1wbGUgcHJpbWl0aXZlIHNoYXBlcyBmb3Ige0BsaW5rIFBJWEkuR3JhcGhpY3N9LlxuICpcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqIEBleHRlbmRzIFBJWEkuU2hhZGVyXG4gKiBAcGFyYW0gc2hhZGVyTWFuYWdlciB7U2hhZGVyTWFuYWdlcn0gVGhlIHdlYmdsIHNoYWRlciBtYW5hZ2VyIHRoaXMgc2hhZGVyIHdvcmtzIGZvci5cbiAqL1xuZnVuY3Rpb24gUHJpbWl0aXZlU2hhZGVyKGdsKVxue1xuICAgIFNoYWRlci5jYWxsKHRoaXMsXG4gICAgICAgIGdsLFxuICAgICAgICAvLyB2ZXJ0ZXggc2hhZGVyXG4gICAgICAgIFtcbiAgICAgICAgICAgICdhdHRyaWJ1dGUgdmVjMiBhVmVydGV4UG9zaXRpb247JyxcbiAgICAgICAgICAgICdhdHRyaWJ1dGUgdmVjNCBhQ29sb3I7JyxcblxuICAgICAgICAgICAgJ3VuaWZvcm0gbWF0MyB0cmFuc2xhdGlvbk1hdHJpeDsnLFxuICAgICAgICAgICAgJ3VuaWZvcm0gbWF0MyBwcm9qZWN0aW9uTWF0cml4OycsXG5cbiAgICAgICAgICAgICd1bmlmb3JtIGZsb2F0IGFscGhhOycsXG4gICAgICAgICAgICAndW5pZm9ybSBmbG9hdCBmbGlwWTsnLFxuICAgICAgICAgICAgJ3VuaWZvcm0gdmVjMyB0aW50OycsXG5cbiAgICAgICAgICAgICd2YXJ5aW5nIHZlYzQgdkNvbG9yOycsXG5cbiAgICAgICAgICAgICd2b2lkIG1haW4odm9pZCl7JyxcbiAgICAgICAgICAgICcgICBnbF9Qb3NpdGlvbiA9IHZlYzQoKHByb2plY3Rpb25NYXRyaXggKiB0cmFuc2xhdGlvbk1hdHJpeCAqIHZlYzMoYVZlcnRleFBvc2l0aW9uLCAxLjApKS54eSwgMC4wLCAxLjApOycsXG4gICAgICAgICAgICAnICAgdkNvbG9yID0gYUNvbG9yICogdmVjNCh0aW50ICogYWxwaGEsIGFscGhhKTsnLFxuICAgICAgICAgICAgJ30nXG4gICAgICAgIF0uam9pbignXFxuJyksXG4gICAgICAgIC8vIGZyYWdtZW50IHNoYWRlclxuICAgICAgICBbXG4gICAgICAgICAgICAncHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7JyxcblxuICAgICAgICAgICAgJ3ZhcnlpbmcgdmVjNCB2Q29sb3I7JyxcblxuICAgICAgICAgICAgJ3ZvaWQgbWFpbih2b2lkKXsnLFxuICAgICAgICAgICAgJyAgIGdsX0ZyYWdDb2xvciA9IHZDb2xvcjsnLFxuICAgICAgICAgICAgJ30nXG4gICAgICAgIF0uam9pbignXFxuJylcbiAgICApO1xufVxuXG5QcmltaXRpdmVTaGFkZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShTaGFkZXIucHJvdG90eXBlKTtcblByaW1pdGl2ZVNoYWRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBQcmltaXRpdmVTaGFkZXI7XG5cbm1vZHVsZS5leHBvcnRzID0gUHJpbWl0aXZlU2hhZGVyO1xuIiwiLyoqXG4gKiBBbiBvYmplY3QgY29udGFpbmluZyBXZWJHTCBzcGVjaWZpYyBwcm9wZXJ0aWVzIHRvIGJlIHVzZWQgYnkgdGhlIFdlYkdMIHJlbmRlcmVyXG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIGdsIHtXZWJHTFJlbmRlcmluZ0NvbnRleHR9IHRoZSBjdXJyZW50IFdlYkdMIGRyYXdpbmcgY29udGV4dFxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gV2ViR0xHcmFwaGljc0RhdGEoZ2wpIHtcblxuICAgIC8qKlxuICAgICAqIFRoZSBjdXJyZW50IFdlYkdMIGRyYXdpbmcgY29udGV4dFxuICAgICAqXG4gICAgICogQG1lbWJlciB7V2ViR0xSZW5kZXJpbmdDb250ZXh0fVxuICAgICAqL1xuICAgIHRoaXMuZ2wgPSBnbDtcblxuICAgIC8vVE9ETyBkb2VzIHRoaXMgbmVlZCB0byBiZSBzcGxpdCBiZWZvcmUgdXBsb2Rpbmc/P1xuICAgIC8qKlxuICAgICAqIEFuIGFycmF5IG9mIGNvbG9yIGNvbXBvbmVudHMgKHIsZyxiKVxuICAgICAqIEBtZW1iZXIge251bWJlcltdfVxuICAgICAqL1xuICAgIHRoaXMuY29sb3IgPSBbMCwwLDBdOyAvLyBjb2xvciBzcGxpdCFcblxuICAgIC8qKlxuICAgICAqIEFuIGFycmF5IG9mIHBvaW50cyB0byBkcmF3XG4gICAgICogQG1lbWJlciB7UElYSS5Qb2ludFtdfVxuICAgICAqL1xuICAgIHRoaXMucG9pbnRzID0gW107XG5cbiAgICAvKipcbiAgICAgKiBUaGUgaW5kaWNlcyBvZiB0aGUgdmVydGljZXNcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJbXX1cbiAgICAgKi9cbiAgICB0aGlzLmluZGljZXMgPSBbXTtcbiAgICAvKipcbiAgICAgKiBUaGUgbWFpbiBidWZmZXJcbiAgICAgKiBAbWVtYmVyIHtXZWJHTEJ1ZmZlcn1cbiAgICAgKi9cbiAgICB0aGlzLmJ1ZmZlciA9IGdsLmNyZWF0ZUJ1ZmZlcigpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGluZGV4IGJ1ZmZlclxuICAgICAqIEBtZW1iZXIge1dlYkdMQnVmZmVyfVxuICAgICAqL1xuICAgIHRoaXMuaW5kZXhCdWZmZXIgPSBnbC5jcmVhdGVCdWZmZXIoKTtcblxuICAgIC8qKlxuICAgICAqIHRvZG8gQGFsdmluXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMubW9kZSA9IDE7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYWxwaGEgb2YgdGhlIGdyYXBoaWNzXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMuYWxwaGEgPSAxO1xuXG4gICAgLyoqXG4gICAgICogV2hldGhlciB0aGlzIGdyYXBoaWNzIGlzIGRpcnR5IG9yIG5vdFxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICovXG4gICAgdGhpcy5kaXJ0eSA9IHRydWU7XG5cbiAgICB0aGlzLmdsUG9pbnRzID0gbnVsbDtcbiAgICB0aGlzLmdsSW5kaWNlcyA9IG51bGw7XG59XG5cbldlYkdMR3JhcGhpY3NEYXRhLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFdlYkdMR3JhcGhpY3NEYXRhO1xubW9kdWxlLmV4cG9ydHMgPSBXZWJHTEdyYXBoaWNzRGF0YTtcblxuLyoqXG4gKiBSZXNldHMgdGhlIHZlcnRpY2VzIGFuZCB0aGUgaW5kaWNlc1xuICovXG5XZWJHTEdyYXBoaWNzRGF0YS5wcm90b3R5cGUucmVzZXQgPSBmdW5jdGlvbiAoKSB7XG4gICAgdGhpcy5wb2ludHMubGVuZ3RoID0gMDtcbiAgICB0aGlzLmluZGljZXMubGVuZ3RoID0gMDtcbn07XG5cbi8qKlxuICogQmluZHMgdGhlIGJ1ZmZlcnMgYW5kIHVwbG9hZHMgdGhlIGRhdGFcbiAqL1xuV2ViR0xHcmFwaGljc0RhdGEucHJvdG90eXBlLnVwbG9hZCA9IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgZ2wgPSB0aGlzLmdsO1xuXG4vLyAgICB0aGlzLmxhc3RJbmRleCA9IGdyYXBoaWNzLmdyYXBoaWNzRGF0YS5sZW5ndGg7XG4gICAgdGhpcy5nbFBvaW50cyA9IG5ldyBGbG9hdDMyQXJyYXkodGhpcy5wb2ludHMpO1xuXG4gICAgZ2wuYmluZEJ1ZmZlcihnbC5BUlJBWV9CVUZGRVIsIHRoaXMuYnVmZmVyKTtcbiAgICBnbC5idWZmZXJEYXRhKGdsLkFSUkFZX0JVRkZFUiwgdGhpcy5nbFBvaW50cywgZ2wuU1RBVElDX0RSQVcpO1xuXG4gICAgdGhpcy5nbEluZGljZXMgPSBuZXcgVWludDE2QXJyYXkodGhpcy5pbmRpY2VzKTtcblxuICAgIGdsLmJpbmRCdWZmZXIoZ2wuRUxFTUVOVF9BUlJBWV9CVUZGRVIsIHRoaXMuaW5kZXhCdWZmZXIpO1xuICAgIGdsLmJ1ZmZlckRhdGEoZ2wuRUxFTUVOVF9BUlJBWV9CVUZGRVIsIHRoaXMuZ2xJbmRpY2VzLCBnbC5TVEFUSUNfRFJBVyk7XG5cbiAgICB0aGlzLmRpcnR5ID0gZmFsc2U7XG59O1xuXG5XZWJHTEdyYXBoaWNzRGF0YS5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uICgpIHtcbiAgICB0aGlzLmNvbG9yID0gbnVsbDtcbiAgICB0aGlzLnBvaW50cyA9IG51bGw7XG4gICAgdGhpcy5pbmRpY2VzID0gbnVsbDtcblxuICAgIHRoaXMuZ2wuZGVsZXRlQnVmZmVyKHRoaXMuYnVmZmVyKTtcbiAgICB0aGlzLmdsLmRlbGV0ZUJ1ZmZlcih0aGlzLmluZGV4QnVmZmVyKTtcbiAgICBcbiAgICB0aGlzLmdsID0gbnVsbDtcblxuICAgIHRoaXMuYnVmZmVyID0gbnVsbDtcbiAgICB0aGlzLmluZGV4QnVmZmVyID0gbnVsbDtcblxuICAgIHRoaXMuZ2xQb2ludHMgPSBudWxsO1xuICAgIHRoaXMuZ2xJbmRpY2VzID0gbnVsbDtcbn07XG4iLCJ2YXIgYnVpbGRMaW5lID0gcmVxdWlyZSgnLi9idWlsZExpbmUnKSxcbiAgICB1dGlscyA9IHJlcXVpcmUoJy4uLy4uL3V0aWxzJyk7XG5cbi8qKlxuICogQnVpbGRzIGEgY2lyY2xlIHRvIGRyYXdcbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIGdyYXBoaWNzRGF0YSB7UElYSS5HcmFwaGljc30gVGhlIGdyYXBoaWNzIG9iamVjdCB0byBkcmF3XG4gKiBAcGFyYW0gd2ViR0xEYXRhIHtvYmplY3R9IGFuIG9iamVjdCBjb250YWluaW5nIGFsbCB0aGUgd2ViR0wtc3BlY2lmaWMgaW5mb3JtYXRpb24gdG8gY3JlYXRlIHRoaXMgc2hhcGVcbiAqL1xudmFyIGJ1aWxkQ2lyY2xlID0gZnVuY3Rpb24gKGdyYXBoaWNzRGF0YSwgd2ViR0xEYXRhKVxue1xuICAgIC8vIG5lZWQgdG8gY29udmVydCBwb2ludHMgdG8gYSBuaWNlIHJlZ3VsYXIgZGF0YVxuICAgIHZhciBjaXJjbGVEYXRhID0gZ3JhcGhpY3NEYXRhLnNoYXBlO1xuICAgIHZhciB4ID0gY2lyY2xlRGF0YS54O1xuICAgIHZhciB5ID0gY2lyY2xlRGF0YS55O1xuICAgIHZhciB3aWR0aDtcbiAgICB2YXIgaGVpZ2h0O1xuXG4gICAgLy8gVE9ETyAtIGJpdCBoYWNreT8/XG4gICAgaWYgKGdyYXBoaWNzRGF0YS50eXBlID09PSBDT05TVC5TSEFQRVMuQ0lSQylcbiAgICB7XG4gICAgICAgIHdpZHRoID0gY2lyY2xlRGF0YS5yYWRpdXM7XG4gICAgICAgIGhlaWdodCA9IGNpcmNsZURhdGEucmFkaXVzO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICB3aWR0aCA9IGNpcmNsZURhdGEud2lkdGg7XG4gICAgICAgIGhlaWdodCA9IGNpcmNsZURhdGEuaGVpZ2h0O1xuICAgIH1cblxuICAgIHZhciB0b3RhbFNlZ3MgPSBNYXRoLmZsb29yKDMwICogTWF0aC5zcXJ0KGNpcmNsZURhdGEucmFkaXVzKSkgfHwgTWF0aC5mbG9vcigxNSAqIE1hdGguc3FydChjaXJjbGVEYXRhLndpZHRoICsgY2lyY2xlRGF0YS5oZWlnaHQpKTtcbiAgICB2YXIgc2VnID0gKE1hdGguUEkgKiAyKSAvIHRvdGFsU2VncyA7XG5cbiAgICB2YXIgaSA9IDA7XG5cbiAgICBpZiAoZ3JhcGhpY3NEYXRhLmZpbGwpXG4gICAge1xuICAgICAgICB2YXIgY29sb3IgPSB1dGlscy5oZXgycmdiKGdyYXBoaWNzRGF0YS5maWxsQ29sb3IpO1xuICAgICAgICB2YXIgYWxwaGEgPSBncmFwaGljc0RhdGEuZmlsbEFscGhhO1xuXG4gICAgICAgIHZhciByID0gY29sb3JbMF0gKiBhbHBoYTtcbiAgICAgICAgdmFyIGcgPSBjb2xvclsxXSAqIGFscGhhO1xuICAgICAgICB2YXIgYiA9IGNvbG9yWzJdICogYWxwaGE7XG5cbiAgICAgICAgdmFyIHZlcnRzID0gd2ViR0xEYXRhLnBvaW50cztcbiAgICAgICAgdmFyIGluZGljZXMgPSB3ZWJHTERhdGEuaW5kaWNlcztcblxuICAgICAgICB2YXIgdmVjUG9zID0gdmVydHMubGVuZ3RoLzY7XG5cbiAgICAgICAgaW5kaWNlcy5wdXNoKHZlY1Bvcyk7XG5cbiAgICAgICAgZm9yIChpID0gMDsgaSA8IHRvdGFsU2VncyArIDEgOyBpKyspXG4gICAgICAgIHtcbiAgICAgICAgICAgIHZlcnRzLnB1c2goeCx5LCByLCBnLCBiLCBhbHBoYSk7XG5cbiAgICAgICAgICAgIHZlcnRzLnB1c2goeCArIE1hdGguc2luKHNlZyAqIGkpICogd2lkdGgsXG4gICAgICAgICAgICAgICAgICAgICAgIHkgKyBNYXRoLmNvcyhzZWcgKiBpKSAqIGhlaWdodCxcbiAgICAgICAgICAgICAgICAgICAgICAgciwgZywgYiwgYWxwaGEpO1xuXG4gICAgICAgICAgICBpbmRpY2VzLnB1c2godmVjUG9zKyssIHZlY1BvcysrKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGluZGljZXMucHVzaCh2ZWNQb3MtMSk7XG4gICAgfVxuXG4gICAgaWYgKGdyYXBoaWNzRGF0YS5saW5lV2lkdGgpXG4gICAge1xuICAgICAgICB2YXIgdGVtcFBvaW50cyA9IGdyYXBoaWNzRGF0YS5wb2ludHM7XG5cbiAgICAgICAgZ3JhcGhpY3NEYXRhLnBvaW50cyA9IFtdO1xuXG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCB0b3RhbFNlZ3MgKyAxOyBpKyspXG4gICAgICAgIHtcbiAgICAgICAgICAgIGdyYXBoaWNzRGF0YS5wb2ludHMucHVzaCh4ICsgTWF0aC5zaW4oc2VnICogaSkgKiB3aWR0aCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB5ICsgTWF0aC5jb3Moc2VnICogaSkgKiBoZWlnaHQpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5idWlsZExpbmUoZ3JhcGhpY3NEYXRhLCB3ZWJHTERhdGEpO1xuXG4gICAgICAgIGdyYXBoaWNzRGF0YS5wb2ludHMgPSB0ZW1wUG9pbnRzO1xuICAgIH1cbn07XG5cblxubW9kdWxlLmV4cG9ydHMgPSBidWlsZENpcmNsZTsiLCJ2YXIgYnVpbGRMaW5lID0gcmVxdWlyZSgnLi9idWlsZExpbmUnKSxcbiAgICB1dGlscyA9IHJlcXVpcmUoJy4uLy4uL3V0aWxzJyk7XG4gICAgXG5cblxuLyoqXG4gKiBCdWlsZHMgYSBjb21wbGV4IHBvbHlnb24gdG8gZHJhd1xuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0gZ3JhcGhpY3NEYXRhIHtQSVhJLkdyYXBoaWNzfSBUaGUgZ3JhcGhpY3Mgb2JqZWN0IGNvbnRhaW5pbmcgYWxsIHRoZSBuZWNlc3NhcnkgcHJvcGVydGllc1xuICogQHBhcmFtIHdlYkdMRGF0YSB7b2JqZWN0fSBhbiBvYmplY3QgY29udGFpbmluZyBhbGwgdGhlIHdlYkdMLXNwZWNpZmljIGluZm9ybWF0aW9uIHRvIGNyZWF0ZSB0aGlzIHNoYXBlXG4gKi9cbnZhciBidWlsZENvbXBsZXhQb2x5ID0gZnVuY3Rpb24gKGdyYXBoaWNzRGF0YSwgd2ViR0xEYXRhKVxue1xuICAgIC8vVE9ETyAtIG5vIG5lZWQgdG8gY29weSB0aGlzIGFzIGl0IGdldHMgdHVybmVkIGludG8gYSBGTG9hdDMyQXJyYXkgYW55d2F5cy4uXG4gICAgdmFyIHBvaW50cyA9IGdyYXBoaWNzRGF0YS5wb2ludHMuc2xpY2UoKTtcblxuICAgIGlmIChwb2ludHMubGVuZ3RoIDwgNilcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBnZXQgZmlyc3QgYW5kIGxhc3QgcG9pbnQuLiBmaWd1cmUgb3V0IHRoZSBtaWRkbGUhXG4gICAgdmFyIGluZGljZXMgPSB3ZWJHTERhdGEuaW5kaWNlcztcbiAgICB3ZWJHTERhdGEucG9pbnRzID0gcG9pbnRzO1xuICAgIHdlYkdMRGF0YS5hbHBoYSA9IGdyYXBoaWNzRGF0YS5maWxsQWxwaGE7XG4gICAgd2ViR0xEYXRhLmNvbG9yID0gdXRpbHMuaGV4MnJnYihncmFwaGljc0RhdGEuZmlsbENvbG9yKTtcblxuICAgIC8vIGNhbGNsYXRlIHRoZSBib3VuZHMuLlxuICAgIHZhciBtaW5YID0gSW5maW5pdHk7XG4gICAgdmFyIG1heFggPSAtSW5maW5pdHk7XG5cbiAgICB2YXIgbWluWSA9IEluZmluaXR5O1xuICAgIHZhciBtYXhZID0gLUluZmluaXR5O1xuXG4gICAgdmFyIHgseTtcblxuICAgIC8vIGdldCBzaXplLi5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHBvaW50cy5sZW5ndGg7IGkrPTIpXG4gICAge1xuICAgICAgICB4ID0gcG9pbnRzW2ldO1xuICAgICAgICB5ID0gcG9pbnRzW2krMV07XG5cbiAgICAgICAgbWluWCA9IHggPCBtaW5YID8geCA6IG1pblg7XG4gICAgICAgIG1heFggPSB4ID4gbWF4WCA/IHggOiBtYXhYO1xuXG4gICAgICAgIG1pblkgPSB5IDwgbWluWSA/IHkgOiBtaW5ZO1xuICAgICAgICBtYXhZID0geSA+IG1heFkgPyB5IDogbWF4WTtcbiAgICB9XG5cbiAgICAvLyBhZGQgYSBxdWFkIHRvIHRoZSBlbmQgY29zIHRoZXJlIGlzIG5vIHBvaW50IG1ha2luZyBhbm90aGVyIGJ1ZmZlciFcbiAgICBwb2ludHMucHVzaChtaW5YLCBtaW5ZLFxuICAgICAgICAgICAgICAgIG1heFgsIG1pblksXG4gICAgICAgICAgICAgICAgbWF4WCwgbWF4WSxcbiAgICAgICAgICAgICAgICBtaW5YLCBtYXhZKTtcblxuICAgIC8vIHB1c2ggYSBxdWFkIG9udG8gdGhlIGVuZC4uXG5cbiAgICAvL1RPRE8gLSB0aGlzIGFpbnQgbmVlZGVkIVxuICAgIHZhciBsZW5ndGggPSBwb2ludHMubGVuZ3RoIC8gMjtcbiAgICBmb3IgKGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspXG4gICAge1xuICAgICAgICBpbmRpY2VzLnB1c2goIGkgKTtcbiAgICB9XG5cbn07XG5cblxuXG5tb2R1bGUuZXhwb3J0cyA9IGJ1aWxkQ29tcGxleFBvbHk7IiwidmFyIG1hdGggPSByZXF1aXJlKCcuLi8uLi9tYXRoJyksXG4gICAgdXRpbHMgPSByZXF1aXJlKCcuLi8uLi91dGlscycpO1xuXG4vKipcbiAqIEJ1aWxkcyBhIGxpbmUgdG8gZHJhd1xuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0gZ3JhcGhpY3NEYXRhIHtQSVhJLkdyYXBoaWNzfSBUaGUgZ3JhcGhpY3Mgb2JqZWN0IGNvbnRhaW5pbmcgYWxsIHRoZSBuZWNlc3NhcnkgcHJvcGVydGllc1xuICogQHBhcmFtIHdlYkdMRGF0YSB7b2JqZWN0fSBhbiBvYmplY3QgY29udGFpbmluZyBhbGwgdGhlIHdlYkdMLXNwZWNpZmljIGluZm9ybWF0aW9uIHRvIGNyZWF0ZSB0aGlzIHNoYXBlXG4gKi9cbnZhciBidWlsZExpbmUgPSBmdW5jdGlvbiAoZ3JhcGhpY3NEYXRhLCB3ZWJHTERhdGEpXG57XG4gICAgLy8gVE9ETyBPUFRJTUlTRSFcbiAgICB2YXIgaSA9IDA7XG4gICAgdmFyIHBvaW50cyA9IGdyYXBoaWNzRGF0YS5wb2ludHM7XG5cbiAgICBpZiAocG9pbnRzLmxlbmd0aCA9PT0gMClcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgLy8gaWYgdGhlIGxpbmUgd2lkdGggaXMgYW4gb2RkIG51bWJlciBhZGQgMC41IHRvIGFsaWduIHRvIGEgd2hvbGUgcGl4ZWxcbiAgICAvLyBjb21tZW50aW5nIHRoaXMgb3V0IGZpeGVzICM3MTEgYW5kICMxNjIwXG4gICAgLy8gaWYgKGdyYXBoaWNzRGF0YS5saW5lV2lkdGglMilcbiAgICAvLyB7XG4gICAgLy8gICAgIGZvciAoaSA9IDA7IGkgPCBwb2ludHMubGVuZ3RoOyBpKyspXG4gICAgLy8gICAgIHtcbiAgICAvLyAgICAgICAgIHBvaW50c1tpXSArPSAwLjU7XG4gICAgLy8gICAgIH1cbiAgICAvLyB9XG5cbiAgICAvLyBnZXQgZmlyc3QgYW5kIGxhc3QgcG9pbnQuLiBmaWd1cmUgb3V0IHRoZSBtaWRkbGUhXG4gICAgdmFyIGZpcnN0UG9pbnQgPSBuZXcgbWF0aC5Qb2ludChwb2ludHNbMF0sIHBvaW50c1sxXSk7XG4gICAgdmFyIGxhc3RQb2ludCA9IG5ldyBtYXRoLlBvaW50KHBvaW50c1twb2ludHMubGVuZ3RoIC0gMl0sIHBvaW50c1twb2ludHMubGVuZ3RoIC0gMV0pO1xuXG4gICAgLy8gaWYgdGhlIGZpcnN0IHBvaW50IGlzIHRoZSBsYXN0IHBvaW50IC0gZ29ubmEgaGF2ZSBpc3N1ZXMgOilcbiAgICBpZiAoZmlyc3RQb2ludC54ID09PSBsYXN0UG9pbnQueCAmJiBmaXJzdFBvaW50LnkgPT09IGxhc3RQb2ludC55KVxuICAgIHtcbiAgICAgICAgLy8gbmVlZCB0byBjbG9uZSBhcyB3ZSBhcmUgZ29pbmcgdG8gc2xpZ2h0bHkgbW9kaWZ5IHRoZSBzaGFwZS4uXG4gICAgICAgIHBvaW50cyA9IHBvaW50cy5zbGljZSgpO1xuXG4gICAgICAgIHBvaW50cy5wb3AoKTtcbiAgICAgICAgcG9pbnRzLnBvcCgpO1xuXG4gICAgICAgIGxhc3RQb2ludCA9IG5ldyBtYXRoLlBvaW50KHBvaW50c1twb2ludHMubGVuZ3RoIC0gMl0sIHBvaW50c1twb2ludHMubGVuZ3RoIC0gMV0pO1xuXG4gICAgICAgIHZhciBtaWRQb2ludFggPSBsYXN0UG9pbnQueCArIChmaXJzdFBvaW50LnggLSBsYXN0UG9pbnQueCkgKjAuNTtcbiAgICAgICAgdmFyIG1pZFBvaW50WSA9IGxhc3RQb2ludC55ICsgKGZpcnN0UG9pbnQueSAtIGxhc3RQb2ludC55KSAqMC41O1xuXG4gICAgICAgIHBvaW50cy51bnNoaWZ0KG1pZFBvaW50WCwgbWlkUG9pbnRZKTtcbiAgICAgICAgcG9pbnRzLnB1c2gobWlkUG9pbnRYLCBtaWRQb2ludFkpO1xuICAgIH1cblxuICAgIHZhciB2ZXJ0cyA9IHdlYkdMRGF0YS5wb2ludHM7XG4gICAgdmFyIGluZGljZXMgPSB3ZWJHTERhdGEuaW5kaWNlcztcbiAgICB2YXIgbGVuZ3RoID0gcG9pbnRzLmxlbmd0aCAvIDI7XG4gICAgdmFyIGluZGV4Q291bnQgPSBwb2ludHMubGVuZ3RoO1xuICAgIHZhciBpbmRleFN0YXJ0ID0gdmVydHMubGVuZ3RoLzY7XG5cbiAgICAvLyBEUkFXIHRoZSBMaW5lXG4gICAgdmFyIHdpZHRoID0gZ3JhcGhpY3NEYXRhLmxpbmVXaWR0aCAvIDI7XG5cbiAgICAvLyBzb3J0IGNvbG9yXG4gICAgdmFyIGNvbG9yID0gdXRpbHMuaGV4MnJnYihncmFwaGljc0RhdGEubGluZUNvbG9yKTtcbiAgICB2YXIgYWxwaGEgPSBncmFwaGljc0RhdGEubGluZUFscGhhO1xuICAgIHZhciByID0gY29sb3JbMF0gKiBhbHBoYTtcbiAgICB2YXIgZyA9IGNvbG9yWzFdICogYWxwaGE7XG4gICAgdmFyIGIgPSBjb2xvclsyXSAqIGFscGhhO1xuXG4gICAgdmFyIHB4LCBweSwgcDF4LCBwMXksIHAyeCwgcDJ5LCBwM3gsIHAzeTtcbiAgICB2YXIgcGVycHgsIHBlcnB5LCBwZXJwMngsIHBlcnAyeSwgcGVycDN4LCBwZXJwM3k7XG4gICAgdmFyIGExLCBiMSwgYzEsIGEyLCBiMiwgYzI7XG4gICAgdmFyIGRlbm9tLCBwZGlzdCwgZGlzdDtcblxuICAgIHAxeCA9IHBvaW50c1swXTtcbiAgICBwMXkgPSBwb2ludHNbMV07XG5cbiAgICBwMnggPSBwb2ludHNbMl07XG4gICAgcDJ5ID0gcG9pbnRzWzNdO1xuXG4gICAgcGVycHggPSAtKHAxeSAtIHAyeSk7XG4gICAgcGVycHkgPSAgcDF4IC0gcDJ4O1xuXG4gICAgZGlzdCA9IE1hdGguc3FydChwZXJweCpwZXJweCArIHBlcnB5KnBlcnB5KTtcblxuICAgIHBlcnB4IC89IGRpc3Q7XG4gICAgcGVycHkgLz0gZGlzdDtcbiAgICBwZXJweCAqPSB3aWR0aDtcbiAgICBwZXJweSAqPSB3aWR0aDtcblxuICAgIC8vIHN0YXJ0XG4gICAgdmVydHMucHVzaChwMXggLSBwZXJweCAsIHAxeSAtIHBlcnB5LFxuICAgICAgICAgICAgICAgIHIsIGcsIGIsIGFscGhhKTtcblxuICAgIHZlcnRzLnB1c2gocDF4ICsgcGVycHggLCBwMXkgKyBwZXJweSxcbiAgICAgICAgICAgICAgICByLCBnLCBiLCBhbHBoYSk7XG5cbiAgICBmb3IgKGkgPSAxOyBpIDwgbGVuZ3RoLTE7IGkrKylcbiAgICB7XG4gICAgICAgIHAxeCA9IHBvaW50c1soaS0xKSoyXTtcbiAgICAgICAgcDF5ID0gcG9pbnRzWyhpLTEpKjIgKyAxXTtcblxuICAgICAgICBwMnggPSBwb2ludHNbKGkpKjJdO1xuICAgICAgICBwMnkgPSBwb2ludHNbKGkpKjIgKyAxXTtcblxuICAgICAgICBwM3ggPSBwb2ludHNbKGkrMSkqMl07XG4gICAgICAgIHAzeSA9IHBvaW50c1soaSsxKSoyICsgMV07XG5cbiAgICAgICAgcGVycHggPSAtKHAxeSAtIHAyeSk7XG4gICAgICAgIHBlcnB5ID0gcDF4IC0gcDJ4O1xuXG4gICAgICAgIGRpc3QgPSBNYXRoLnNxcnQocGVycHgqcGVycHggKyBwZXJweSpwZXJweSk7XG4gICAgICAgIHBlcnB4IC89IGRpc3Q7XG4gICAgICAgIHBlcnB5IC89IGRpc3Q7XG4gICAgICAgIHBlcnB4ICo9IHdpZHRoO1xuICAgICAgICBwZXJweSAqPSB3aWR0aDtcblxuICAgICAgICBwZXJwMnggPSAtKHAyeSAtIHAzeSk7XG4gICAgICAgIHBlcnAyeSA9IHAyeCAtIHAzeDtcblxuICAgICAgICBkaXN0ID0gTWF0aC5zcXJ0KHBlcnAyeCpwZXJwMnggKyBwZXJwMnkqcGVycDJ5KTtcbiAgICAgICAgcGVycDJ4IC89IGRpc3Q7XG4gICAgICAgIHBlcnAyeSAvPSBkaXN0O1xuICAgICAgICBwZXJwMnggKj0gd2lkdGg7XG4gICAgICAgIHBlcnAyeSAqPSB3aWR0aDtcblxuICAgICAgICBhMSA9ICgtcGVycHkgKyBwMXkpIC0gKC1wZXJweSArIHAyeSk7XG4gICAgICAgIGIxID0gKC1wZXJweCArIHAyeCkgLSAoLXBlcnB4ICsgcDF4KTtcbiAgICAgICAgYzEgPSAoLXBlcnB4ICsgcDF4KSAqICgtcGVycHkgKyBwMnkpIC0gKC1wZXJweCArIHAyeCkgKiAoLXBlcnB5ICsgcDF5KTtcbiAgICAgICAgYTIgPSAoLXBlcnAyeSArIHAzeSkgLSAoLXBlcnAyeSArIHAyeSk7XG4gICAgICAgIGIyID0gKC1wZXJwMnggKyBwMngpIC0gKC1wZXJwMnggKyBwM3gpO1xuICAgICAgICBjMiA9ICgtcGVycDJ4ICsgcDN4KSAqICgtcGVycDJ5ICsgcDJ5KSAtICgtcGVycDJ4ICsgcDJ4KSAqICgtcGVycDJ5ICsgcDN5KTtcblxuICAgICAgICBkZW5vbSA9IGExKmIyIC0gYTIqYjE7XG5cbiAgICAgICAgaWYgKE1hdGguYWJzKGRlbm9tKSA8IDAuMSApXG4gICAgICAgIHtcblxuICAgICAgICAgICAgZGVub20rPTEwLjE7XG4gICAgICAgICAgICB2ZXJ0cy5wdXNoKHAyeCAtIHBlcnB4ICwgcDJ5IC0gcGVycHksXG4gICAgICAgICAgICAgICAgciwgZywgYiwgYWxwaGEpO1xuXG4gICAgICAgICAgICB2ZXJ0cy5wdXNoKHAyeCArIHBlcnB4ICwgcDJ5ICsgcGVycHksXG4gICAgICAgICAgICAgICAgciwgZywgYiwgYWxwaGEpO1xuXG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHB4ID0gKGIxKmMyIC0gYjIqYzEpL2Rlbm9tO1xuICAgICAgICBweSA9IChhMipjMSAtIGExKmMyKS9kZW5vbTtcblxuXG4gICAgICAgIHBkaXN0ID0gKHB4IC1wMngpICogKHB4IC1wMngpICsgKHB5IC1wMnkpICogKHB5IC1wMnkpO1xuXG5cbiAgICAgICAgaWYgKHBkaXN0ID4gMTQwICogMTQwKVxuICAgICAgICB7XG4gICAgICAgICAgICBwZXJwM3ggPSBwZXJweCAtIHBlcnAyeDtcbiAgICAgICAgICAgIHBlcnAzeSA9IHBlcnB5IC0gcGVycDJ5O1xuXG4gICAgICAgICAgICBkaXN0ID0gTWF0aC5zcXJ0KHBlcnAzeCpwZXJwM3ggKyBwZXJwM3kqcGVycDN5KTtcbiAgICAgICAgICAgIHBlcnAzeCAvPSBkaXN0O1xuICAgICAgICAgICAgcGVycDN5IC89IGRpc3Q7XG4gICAgICAgICAgICBwZXJwM3ggKj0gd2lkdGg7XG4gICAgICAgICAgICBwZXJwM3kgKj0gd2lkdGg7XG5cbiAgICAgICAgICAgIHZlcnRzLnB1c2gocDJ4IC0gcGVycDN4LCBwMnkgLXBlcnAzeSk7XG4gICAgICAgICAgICB2ZXJ0cy5wdXNoKHIsIGcsIGIsIGFscGhhKTtcblxuICAgICAgICAgICAgdmVydHMucHVzaChwMnggKyBwZXJwM3gsIHAyeSArcGVycDN5KTtcbiAgICAgICAgICAgIHZlcnRzLnB1c2gociwgZywgYiwgYWxwaGEpO1xuXG4gICAgICAgICAgICB2ZXJ0cy5wdXNoKHAyeCAtIHBlcnAzeCwgcDJ5IC1wZXJwM3kpO1xuICAgICAgICAgICAgdmVydHMucHVzaChyLCBnLCBiLCBhbHBoYSk7XG5cbiAgICAgICAgICAgIGluZGV4Q291bnQrKztcbiAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgIHtcblxuICAgICAgICAgICAgdmVydHMucHVzaChweCAsIHB5KTtcbiAgICAgICAgICAgIHZlcnRzLnB1c2gociwgZywgYiwgYWxwaGEpO1xuXG4gICAgICAgICAgICB2ZXJ0cy5wdXNoKHAyeCAtIChweC1wMngpLCBwMnkgLSAocHkgLSBwMnkpKTtcbiAgICAgICAgICAgIHZlcnRzLnB1c2gociwgZywgYiwgYWxwaGEpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcDF4ID0gcG9pbnRzWyhsZW5ndGgtMikqMl07XG4gICAgcDF5ID0gcG9pbnRzWyhsZW5ndGgtMikqMiArIDFdO1xuXG4gICAgcDJ4ID0gcG9pbnRzWyhsZW5ndGgtMSkqMl07XG4gICAgcDJ5ID0gcG9pbnRzWyhsZW5ndGgtMSkqMiArIDFdO1xuXG4gICAgcGVycHggPSAtKHAxeSAtIHAyeSk7XG4gICAgcGVycHkgPSBwMXggLSBwMng7XG5cbiAgICBkaXN0ID0gTWF0aC5zcXJ0KHBlcnB4KnBlcnB4ICsgcGVycHkqcGVycHkpO1xuICAgIHBlcnB4IC89IGRpc3Q7XG4gICAgcGVycHkgLz0gZGlzdDtcbiAgICBwZXJweCAqPSB3aWR0aDtcbiAgICBwZXJweSAqPSB3aWR0aDtcblxuICAgIHZlcnRzLnB1c2gocDJ4IC0gcGVycHggLCBwMnkgLSBwZXJweSk7XG4gICAgdmVydHMucHVzaChyLCBnLCBiLCBhbHBoYSk7XG5cbiAgICB2ZXJ0cy5wdXNoKHAyeCArIHBlcnB4ICwgcDJ5ICsgcGVycHkpO1xuICAgIHZlcnRzLnB1c2gociwgZywgYiwgYWxwaGEpO1xuXG4gICAgaW5kaWNlcy5wdXNoKGluZGV4U3RhcnQpO1xuXG4gICAgZm9yIChpID0gMDsgaSA8IGluZGV4Q291bnQ7IGkrKylcbiAgICB7XG4gICAgICAgIGluZGljZXMucHVzaChpbmRleFN0YXJ0KyspO1xuICAgIH1cblxuICAgIGluZGljZXMucHVzaChpbmRleFN0YXJ0LTEpO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBidWlsZExpbmU7IiwidmFyIHV0aWxzID0gcmVxdWlyZSgnLi4vLi4vdXRpbHMnKTtcblxuLyoqXG4gKiBCdWlsZHMgYSBwb2x5Z29uIHRvIGRyYXdcbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIGdyYXBoaWNzRGF0YSB7UElYSS5XZWJHTEdyYXBoaWNzRGF0YX0gVGhlIGdyYXBoaWNzIG9iamVjdCBjb250YWluaW5nIGFsbCB0aGUgbmVjZXNzYXJ5IHByb3BlcnRpZXNcbiAqIEBwYXJhbSB3ZWJHTERhdGEge29iamVjdH0gYW4gb2JqZWN0IGNvbnRhaW5pbmcgYWxsIHRoZSB3ZWJHTC1zcGVjaWZpYyBpbmZvcm1hdGlvbiB0byBjcmVhdGUgdGhpcyBzaGFwZVxuICovXG52YXIgYnVpbGRQb2x5ID0gZnVuY3Rpb24gKGdyYXBoaWNzRGF0YSwgd2ViR0xEYXRhKVxue1xuICAgIHZhciBwb2ludHMgPSBncmFwaGljc0RhdGEucG9pbnRzO1xuXG4gICAgaWYgKHBvaW50cy5sZW5ndGggPCA2KVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIGdldCBmaXJzdCBhbmQgbGFzdCBwb2ludC4uIGZpZ3VyZSBvdXQgdGhlIG1pZGRsZSFcbiAgICB2YXIgdmVydHMgPSB3ZWJHTERhdGEucG9pbnRzO1xuICAgIHZhciBpbmRpY2VzID0gd2ViR0xEYXRhLmluZGljZXM7XG5cbiAgICB2YXIgbGVuZ3RoID0gcG9pbnRzLmxlbmd0aCAvIDI7XG5cbiAgICAvLyBzb3J0IGNvbG9yXG4gICAgdmFyIGNvbG9yID0gdXRpbHMuaGV4MnJnYihncmFwaGljc0RhdGEuZmlsbENvbG9yKTtcbiAgICB2YXIgYWxwaGEgPSBncmFwaGljc0RhdGEuZmlsbEFscGhhO1xuICAgIHZhciByID0gY29sb3JbMF0gKiBhbHBoYTtcbiAgICB2YXIgZyA9IGNvbG9yWzFdICogYWxwaGE7XG4gICAgdmFyIGIgPSBjb2xvclsyXSAqIGFscGhhO1xuXG4gICAgdmFyIHRyaWFuZ2xlcyA9IGVhcmN1dChwb2ludHMsIG51bGwsIDIpO1xuXG4gICAgaWYgKCF0cmlhbmdsZXMpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHZhciB2ZXJ0UG9zID0gdmVydHMubGVuZ3RoIC8gNjtcblxuICAgIHZhciBpID0gMDtcblxuICAgIGZvciAoaSA9IDA7IGkgPCB0cmlhbmdsZXMubGVuZ3RoOyBpKz0zKVxuICAgIHtcbiAgICAgICAgaW5kaWNlcy5wdXNoKHRyaWFuZ2xlc1tpXSArIHZlcnRQb3MpO1xuICAgICAgICBpbmRpY2VzLnB1c2godHJpYW5nbGVzW2ldICsgdmVydFBvcyk7XG4gICAgICAgIGluZGljZXMucHVzaCh0cmlhbmdsZXNbaSsxXSArIHZlcnRQb3MpO1xuICAgICAgICBpbmRpY2VzLnB1c2godHJpYW5nbGVzW2krMl0gK3ZlcnRQb3MpO1xuICAgICAgICBpbmRpY2VzLnB1c2godHJpYW5nbGVzW2krMl0gKyB2ZXJ0UG9zKTtcbiAgICB9XG5cbiAgICBmb3IgKGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspXG4gICAge1xuICAgICAgICB2ZXJ0cy5wdXNoKHBvaW50c1tpICogMl0sIHBvaW50c1tpICogMiArIDFdLFxuICAgICAgICAgICAgICAgICAgIHIsIGcsIGIsIGFscGhhKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdHJ1ZTtcbn07XG5cblxubW9kdWxlLmV4cG9ydHMgPSBidWlsZFBvbHk7XG4iLCJ2YXIgYnVpbGRMaW5lID0gcmVxdWlyZSgnLi9idWlsZExpbmUnKSxcbiAgICB1dGlscyA9IHJlcXVpcmUoJy4uLy4uL3V0aWxzJyk7XG5cbi8qKlxuICogQnVpbGRzIGEgcmVjdGFuZ2xlIHRvIGRyYXdcbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIGdyYXBoaWNzRGF0YSB7UElYSS5HcmFwaGljc30gVGhlIGdyYXBoaWNzIG9iamVjdCBjb250YWluaW5nIGFsbCB0aGUgbmVjZXNzYXJ5IHByb3BlcnRpZXNcbiAqIEBwYXJhbSB3ZWJHTERhdGEge29iamVjdH0gYW4gb2JqZWN0IGNvbnRhaW5pbmcgYWxsIHRoZSB3ZWJHTC1zcGVjaWZpYyBpbmZvcm1hdGlvbiB0byBjcmVhdGUgdGhpcyBzaGFwZVxuICovXG52YXIgYnVpbGRSZWN0YW5nbGUgPSBmdW5jdGlvbiAoZ3JhcGhpY3NEYXRhLCB3ZWJHTERhdGEpXG57XG4gICAgLy8gLS0tIC8vXG4gICAgLy8gbmVlZCB0byBjb252ZXJ0IHBvaW50cyB0byBhIG5pY2UgcmVndWxhciBkYXRhXG4gICAgLy9cbiAgICB2YXIgcmVjdERhdGEgPSBncmFwaGljc0RhdGEuc2hhcGU7XG4gICAgdmFyIHggPSByZWN0RGF0YS54O1xuICAgIHZhciB5ID0gcmVjdERhdGEueTtcbiAgICB2YXIgd2lkdGggPSByZWN0RGF0YS53aWR0aDtcbiAgICB2YXIgaGVpZ2h0ID0gcmVjdERhdGEuaGVpZ2h0O1xuXG4gICAgaWYgKGdyYXBoaWNzRGF0YS5maWxsKVxuICAgIHtcbiAgICAgICAgdmFyIGNvbG9yID0gdXRpbHMuaGV4MnJnYihncmFwaGljc0RhdGEuZmlsbENvbG9yKTtcbiAgICAgICAgdmFyIGFscGhhID0gZ3JhcGhpY3NEYXRhLmZpbGxBbHBoYTtcblxuICAgICAgICB2YXIgciA9IGNvbG9yWzBdICogYWxwaGE7XG4gICAgICAgIHZhciBnID0gY29sb3JbMV0gKiBhbHBoYTtcbiAgICAgICAgdmFyIGIgPSBjb2xvclsyXSAqIGFscGhhO1xuXG4gICAgICAgIHZhciB2ZXJ0cyA9IHdlYkdMRGF0YS5wb2ludHM7XG4gICAgICAgIHZhciBpbmRpY2VzID0gd2ViR0xEYXRhLmluZGljZXM7XG5cbiAgICAgICAgdmFyIHZlcnRQb3MgPSB2ZXJ0cy5sZW5ndGgvNjtcblxuICAgICAgICAvLyBzdGFydFxuICAgICAgICB2ZXJ0cy5wdXNoKHgsIHkpO1xuICAgICAgICB2ZXJ0cy5wdXNoKHIsIGcsIGIsIGFscGhhKTtcblxuICAgICAgICB2ZXJ0cy5wdXNoKHggKyB3aWR0aCwgeSk7XG4gICAgICAgIHZlcnRzLnB1c2gociwgZywgYiwgYWxwaGEpO1xuXG4gICAgICAgIHZlcnRzLnB1c2goeCAsIHkgKyBoZWlnaHQpO1xuICAgICAgICB2ZXJ0cy5wdXNoKHIsIGcsIGIsIGFscGhhKTtcblxuICAgICAgICB2ZXJ0cy5wdXNoKHggKyB3aWR0aCwgeSArIGhlaWdodCk7XG4gICAgICAgIHZlcnRzLnB1c2gociwgZywgYiwgYWxwaGEpO1xuXG4gICAgICAgIC8vIGluc2VydCAyIGRlYWQgdHJpYW5nbGVzLi5cbiAgICAgICAgaW5kaWNlcy5wdXNoKHZlcnRQb3MsIHZlcnRQb3MsIHZlcnRQb3MrMSwgdmVydFBvcysyLCB2ZXJ0UG9zKzMsIHZlcnRQb3MrMyk7XG4gICAgfVxuXG4gICAgaWYgKGdyYXBoaWNzRGF0YS5saW5lV2lkdGgpXG4gICAge1xuICAgICAgICB2YXIgdGVtcFBvaW50cyA9IGdyYXBoaWNzRGF0YS5wb2ludHM7XG5cbiAgICAgICAgZ3JhcGhpY3NEYXRhLnBvaW50cyA9IFt4LCB5LFxuICAgICAgICAgICAgICAgICAgeCArIHdpZHRoLCB5LFxuICAgICAgICAgICAgICAgICAgeCArIHdpZHRoLCB5ICsgaGVpZ2h0LFxuICAgICAgICAgICAgICAgICAgeCwgeSArIGhlaWdodCxcbiAgICAgICAgICAgICAgICAgIHgsIHldO1xuXG5cbiAgICAgICAgYnVpbGRMaW5lKGdyYXBoaWNzRGF0YSwgd2ViR0xEYXRhKTtcblxuICAgICAgICBncmFwaGljc0RhdGEucG9pbnRzID0gdGVtcFBvaW50cztcbiAgICB9XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGJ1aWxkUmVjdGFuZ2xlOyIsInZhciBidWlsZExpbmUgPSByZXF1aXJlKCcuL2J1aWxkTGluZScpLFxuICAgIHV0aWxzID0gcmVxdWlyZSgnLi4vLi4vdXRpbHMnKTtcbiAgICBcbi8qKlxuICogQnVpbGRzIGEgcm91bmRlZCByZWN0YW5nbGUgdG8gZHJhd1xuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0gZ3JhcGhpY3NEYXRhIHtQSVhJLkdyYXBoaWNzfSBUaGUgZ3JhcGhpY3Mgb2JqZWN0IGNvbnRhaW5pbmcgYWxsIHRoZSBuZWNlc3NhcnkgcHJvcGVydGllc1xuICogQHBhcmFtIHdlYkdMRGF0YSB7b2JqZWN0fSBhbiBvYmplY3QgY29udGFpbmluZyBhbGwgdGhlIHdlYkdMLXNwZWNpZmljIGluZm9ybWF0aW9uIHRvIGNyZWF0ZSB0aGlzIHNoYXBlXG4gKi9cbmJ1aWxkUm91bmRlZFJlY3RhbmdsZSA9IGZ1bmN0aW9uIChncmFwaGljc0RhdGEsIHdlYkdMRGF0YSlcbntcbiAgICB2YXIgcnJlY3REYXRhID0gZ3JhcGhpY3NEYXRhLnNoYXBlO1xuICAgIHZhciB4ID0gcnJlY3REYXRhLng7XG4gICAgdmFyIHkgPSBycmVjdERhdGEueTtcbiAgICB2YXIgd2lkdGggPSBycmVjdERhdGEud2lkdGg7XG4gICAgdmFyIGhlaWdodCA9IHJyZWN0RGF0YS5oZWlnaHQ7XG5cbiAgICB2YXIgcmFkaXVzID0gcnJlY3REYXRhLnJhZGl1cztcblxuICAgIHZhciByZWNQb2ludHMgPSBbXTtcbiAgICByZWNQb2ludHMucHVzaCh4LCB5ICsgcmFkaXVzKTtcbiAgICB0aGlzLnF1YWRyYXRpY0JlemllckN1cnZlKHgsIHkgKyBoZWlnaHQgLSByYWRpdXMsIHgsIHkgKyBoZWlnaHQsIHggKyByYWRpdXMsIHkgKyBoZWlnaHQsIHJlY1BvaW50cyk7XG4gICAgdGhpcy5xdWFkcmF0aWNCZXppZXJDdXJ2ZSh4ICsgd2lkdGggLSByYWRpdXMsIHkgKyBoZWlnaHQsIHggKyB3aWR0aCwgeSArIGhlaWdodCwgeCArIHdpZHRoLCB5ICsgaGVpZ2h0IC0gcmFkaXVzLCByZWNQb2ludHMpO1xuICAgIHRoaXMucXVhZHJhdGljQmV6aWVyQ3VydmUoeCArIHdpZHRoLCB5ICsgcmFkaXVzLCB4ICsgd2lkdGgsIHksIHggKyB3aWR0aCAtIHJhZGl1cywgeSwgcmVjUG9pbnRzKTtcbiAgICB0aGlzLnF1YWRyYXRpY0JlemllckN1cnZlKHggKyByYWRpdXMsIHksIHgsIHksIHgsIHkgKyByYWRpdXMgKyAwLjAwMDAwMDAwMDEsIHJlY1BvaW50cyk7XG5cbiAgICAvLyB0aGlzIHRpbnkgbnVtYmVyIGRlYWxzIHdpdGggdGhlIGlzc3VlIHRoYXQgb2NjdXJzIHdoZW4gcG9pbnRzIG92ZXJsYXAgYW5kIGVhcmN1dCBmYWlscyB0byB0cmlhbmd1bGF0ZSB0aGUgaXRlbS5cbiAgICAvLyBUT0RPIC0gZml4IHRoaXMgcHJvcGVybHksIHRoaXMgaXMgbm90IHZlcnkgZWxlZ2FudC4uIGJ1dCBpdCB3b3JrcyBmb3Igbm93LlxuXG4gICAgaWYgKGdyYXBoaWNzRGF0YS5maWxsKVxuICAgIHtcbiAgICAgICAgdmFyIGNvbG9yID0gdXRpbHMuaGV4MnJnYihncmFwaGljc0RhdGEuZmlsbENvbG9yKTtcbiAgICAgICAgdmFyIGFscGhhID0gZ3JhcGhpY3NEYXRhLmZpbGxBbHBoYTtcblxuICAgICAgICB2YXIgciA9IGNvbG9yWzBdICogYWxwaGE7XG4gICAgICAgIHZhciBnID0gY29sb3JbMV0gKiBhbHBoYTtcbiAgICAgICAgdmFyIGIgPSBjb2xvclsyXSAqIGFscGhhO1xuXG4gICAgICAgIHZhciB2ZXJ0cyA9IHdlYkdMRGF0YS5wb2ludHM7XG4gICAgICAgIHZhciBpbmRpY2VzID0gd2ViR0xEYXRhLmluZGljZXM7XG5cbiAgICAgICAgdmFyIHZlY1BvcyA9IHZlcnRzLmxlbmd0aC82O1xuXG4gICAgICAgIHZhciB0cmlhbmdsZXMgPSBlYXJjdXQocmVjUG9pbnRzLCBudWxsLCAyKTtcblxuICAgICAgICB2YXIgaSA9IDA7XG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCB0cmlhbmdsZXMubGVuZ3RoOyBpKz0zKVxuICAgICAgICB7XG4gICAgICAgICAgICBpbmRpY2VzLnB1c2godHJpYW5nbGVzW2ldICsgdmVjUG9zKTtcbiAgICAgICAgICAgIGluZGljZXMucHVzaCh0cmlhbmdsZXNbaV0gKyB2ZWNQb3MpO1xuICAgICAgICAgICAgaW5kaWNlcy5wdXNoKHRyaWFuZ2xlc1tpKzFdICsgdmVjUG9zKTtcbiAgICAgICAgICAgIGluZGljZXMucHVzaCh0cmlhbmdsZXNbaSsyXSArIHZlY1Bvcyk7XG4gICAgICAgICAgICBpbmRpY2VzLnB1c2godHJpYW5nbGVzW2krMl0gKyB2ZWNQb3MpO1xuICAgICAgICB9XG5cbiAgICAgICAgZm9yIChpID0gMDsgaSA8IHJlY1BvaW50cy5sZW5ndGg7IGkrKylcbiAgICAgICAge1xuICAgICAgICAgICAgdmVydHMucHVzaChyZWNQb2ludHNbaV0sIHJlY1BvaW50c1srK2ldLCByLCBnLCBiLCBhbHBoYSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoZ3JhcGhpY3NEYXRhLmxpbmVXaWR0aClcbiAgICB7XG4gICAgICAgIHZhciB0ZW1wUG9pbnRzID0gZ3JhcGhpY3NEYXRhLnBvaW50cztcblxuICAgICAgICBncmFwaGljc0RhdGEucG9pbnRzID0gcmVjUG9pbnRzO1xuXG4gICAgICAgIHRoaXMuYnVpbGRMaW5lKGdyYXBoaWNzRGF0YSwgd2ViR0xEYXRhKTtcblxuICAgICAgICBncmFwaGljc0RhdGEucG9pbnRzID0gdGVtcFBvaW50cztcbiAgICB9XG59O1xuXG4vKipcbiAqIENhbGN1bGF0ZSB0aGUgcG9pbnRzIGZvciBhIHF1YWRyYXRpYyBiZXppZXIgY3VydmUuIChoZWxwZXIgZnVuY3Rpb24uLilcbiAqIEJhc2VkIG9uOiBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy83ODUwOTcvaG93LWRvLWktaW1wbGVtZW50LWEtYmV6aWVyLWN1cnZlLWluLWNcbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIGZyb21YIHtudW1iZXJ9IE9yaWdpbiBwb2ludCB4XG4gKiBAcGFyYW0gZnJvbVkge251bWJlcn0gT3JpZ2luIHBvaW50IHhcbiAqIEBwYXJhbSBjcFgge251bWJlcn0gQ29udHJvbCBwb2ludCB4XG4gKiBAcGFyYW0gY3BZIHtudW1iZXJ9IENvbnRyb2wgcG9pbnQgeVxuICogQHBhcmFtIHRvWCB7bnVtYmVyfSBEZXN0aW5hdGlvbiBwb2ludCB4XG4gKiBAcGFyYW0gdG9ZIHtudW1iZXJ9IERlc3RpbmF0aW9uIHBvaW50IHlcbiAqIEBwYXJhbSBbb3V0XSB7bnVtYmVyW119IFRoZSBvdXRwdXQgYXJyYXkgdG8gYWRkIHBvaW50cyBpbnRvLiBJZiBub3QgcGFzc2VkLCBhIG5ldyBhcnJheSBpcyBjcmVhdGVkLlxuICogQHJldHVybiB7bnVtYmVyW119IGFuIGFycmF5IG9mIHBvaW50c1xuICovXG5xdWFkcmF0aWNCZXppZXJDdXJ2ZSA9IGZ1bmN0aW9uIChmcm9tWCwgZnJvbVksIGNwWCwgY3BZLCB0b1gsIHRvWSwgb3V0KVxue1xuICAgIHZhciB4YSxcbiAgICAgICAgeWEsXG4gICAgICAgIHhiLFxuICAgICAgICB5YixcbiAgICAgICAgeCxcbiAgICAgICAgeSxcbiAgICAgICAgbiA9IDIwLFxuICAgICAgICBwb2ludHMgPSBvdXQgfHwgW107XG5cbiAgICBmdW5jdGlvbiBnZXRQdChuMSAsIG4yLCBwZXJjKSB7XG4gICAgICAgIHZhciBkaWZmID0gbjIgLSBuMTtcblxuICAgICAgICByZXR1cm4gbjEgKyAoIGRpZmYgKiBwZXJjICk7XG4gICAgfVxuXG4gICAgdmFyIGogPSAwO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDw9IG47IGkrKyApIHtcbiAgICAgICAgaiA9IGkgLyBuO1xuXG4gICAgICAgIC8vIFRoZSBHcmVlbiBMaW5lXG4gICAgICAgIHhhID0gZ2V0UHQoIGZyb21YICwgY3BYICwgaiApO1xuICAgICAgICB5YSA9IGdldFB0KCBmcm9tWSAsIGNwWSAsIGogKTtcbiAgICAgICAgeGIgPSBnZXRQdCggY3BYICwgdG9YICwgaiApO1xuICAgICAgICB5YiA9IGdldFB0KCBjcFkgLCB0b1kgLCBqICk7XG5cbiAgICAgICAgLy8gVGhlIEJsYWNrIERvdFxuICAgICAgICB4ID0gZ2V0UHQoIHhhICwgeGIgLCBqICk7XG4gICAgICAgIHkgPSBnZXRQdCggeWEgLCB5YiAsIGogKTtcblxuICAgICAgICBwb2ludHMucHVzaCh4LCB5KTtcbiAgICB9XG5cbiAgICByZXR1cm4gcG9pbnRzO1xufTtcblxuXG5tb2R1bGUuZXhwb3J0cyA9IGJ1aWxkUm91bmRlZFJlY3RhbmdsZTsiLCIvKipcbiAqIEBmaWxlICAgICAgICBNYWluIGV4cG9ydCBvZiB0aGUgUElYSSBjb3JlIGxpYnJhcnlcbiAqIEBhdXRob3IgICAgICBNYXQgR3JvdmVzIDxtYXRAZ29vZGJveWRpZ2l0YWwuY29tPlxuICogQGNvcHlyaWdodCAgIDIwMTMtMjAxNSBHb29kQm95RGlnaXRhbFxuICogQGxpY2Vuc2UgICAgIHtAbGluayBodHRwczovL2dpdGh1Yi5jb20vcGl4aWpzL3BpeGkuanMvYmxvYi9tYXN0ZXIvTElDRU5TRXxNSVQgTGljZW5zZX1cbiAqL1xuXG4vKipcbiAqIEBuYW1lc3BhY2UgUElYSVxuICovXG4vLyBleHBvcnQgY29yZSBhbmQgY29uc3QuIFdlIGFzc2lnbiBjb3JlIHRvIGNvbnN0IHNvIHRoYXQgdGhlIG5vbi1yZWZlcmVuY2UgdHlwZXMgaW4gY29uc3QgcmVtYWluIGluLXRhY3RcbnZhciBjb3JlID0gbW9kdWxlLmV4cG9ydHMgPSBPYmplY3QuYXNzaWduKHJlcXVpcmUoJy4vY29uc3QnKSwgcmVxdWlyZSgnLi9tYXRoJyksIHtcbiAgICAvLyB1dGlsc1xuICAgIHV0aWxzOiByZXF1aXJlKCcuL3V0aWxzJyksXG4gICAgdGlja2VyOiByZXF1aXJlKCcuL3RpY2tlcicpLFxuXG4gICAgLy8gZGlzcGxheVxuICAgIERpc3BsYXlPYmplY3Q6ICAgICAgICAgIHJlcXVpcmUoJy4vZGlzcGxheS9EaXNwbGF5T2JqZWN0JyksXG4gICAgQ29udGFpbmVyOiAgICAgICAgICAgICAgcmVxdWlyZSgnLi9kaXNwbGF5L0NvbnRhaW5lcicpLFxuXG4gICAgLy8gc3ByaXRlc1xuICAgIFNwcml0ZTogICAgICAgICAgICAgICAgIHJlcXVpcmUoJy4vc3ByaXRlcy9TcHJpdGUnKSxcbiAgICBQYXJ0aWNsZUNvbnRhaW5lcjogICAgICByZXF1aXJlKCcuL3BhcnRpY2xlcy9QYXJ0aWNsZUNvbnRhaW5lcicpLFxuICAgIFNwcml0ZVJlbmRlcmVyOiAgICAgICAgIHJlcXVpcmUoJy4vc3ByaXRlcy93ZWJnbC9TcHJpdGVSZW5kZXJlcicpLFxuICAgIFBhcnRpY2xlUmVuZGVyZXI6ICAgICAgIHJlcXVpcmUoJy4vcGFydGljbGVzL3dlYmdsL1BhcnRpY2xlUmVuZGVyZXInKSxcblxuICAgIC8vIHRleHRcbiAgICBUZXh0OiAgICAgICAgICAgICAgICAgICByZXF1aXJlKCcuL3RleHQvVGV4dCcpLFxuXG4gICAgLy8gcHJpbWl0aXZlc1xuICAgIEdyYXBoaWNzOiAgICAgICAgICAgICAgIHJlcXVpcmUoJy4vZ3JhcGhpY3MvR3JhcGhpY3MnKSxcbiAgICBHcmFwaGljc0RhdGE6ICAgICAgICAgICByZXF1aXJlKCcuL2dyYXBoaWNzL0dyYXBoaWNzRGF0YScpLFxuICAgIEdyYXBoaWNzUmVuZGVyZXI6ICAgICAgIHJlcXVpcmUoJy4vZ3JhcGhpY3Mvd2ViZ2wvR3JhcGhpY3NSZW5kZXJlcicpLFxuXG4gICAgLy8gdGV4dHVyZXNcbiAgICBUZXh0dXJlOiAgICAgICAgICAgICAgICByZXF1aXJlKCcuL3RleHR1cmVzL1RleHR1cmUnKSxcbiAgICBCYXNlVGV4dHVyZTogICAgICAgICAgICByZXF1aXJlKCcuL3RleHR1cmVzL0Jhc2VUZXh0dXJlJyksXG4gICAgUmVuZGVyVGV4dHVyZTogICAgICAgICAgcmVxdWlyZSgnLi90ZXh0dXJlcy9SZW5kZXJUZXh0dXJlJyksXG4gICAgVmlkZW9CYXNlVGV4dHVyZTogICAgICAgcmVxdWlyZSgnLi90ZXh0dXJlcy9WaWRlb0Jhc2VUZXh0dXJlJyksXG4gICAgVGV4dHVyZVV2czogICAgICAgICAgICAgcmVxdWlyZSgnLi90ZXh0dXJlcy9UZXh0dXJlVXZzJyksXG5cbiAgICAvLyByZW5kZXJlcnMgLSBjYW52YXNcbiAgICBDYW52YXNSZW5kZXJlcjogICAgICAgICByZXF1aXJlKCcuL3JlbmRlcmVycy9jYW52YXMvQ2FudmFzUmVuZGVyZXInKSxcbiAgICBDYW52YXNHcmFwaGljczogICAgICAgICByZXF1aXJlKCcuL3JlbmRlcmVycy9jYW52YXMvdXRpbHMvQ2FudmFzR3JhcGhpY3MnKSxcbiAgICBDYW52YXNCdWZmZXI6ICAgICAgICAgICByZXF1aXJlKCcuL3JlbmRlcmVycy9jYW52YXMvdXRpbHMvQ2FudmFzQnVmZmVyJyksXG5cbiAgICAvLyByZW5kZXJlcnMgLSB3ZWJnbFxuICAgIFdlYkdMUmVuZGVyZXI6ICAgICAgICAgIHJlcXVpcmUoJy4vcmVuZGVyZXJzL3dlYmdsL1dlYkdMUmVuZGVyZXInKSxcbiAgICBXZWJHTE1hbmFnZXI6ICAgICAgICAgIHJlcXVpcmUoJy4vcmVuZGVyZXJzL3dlYmdsL21hbmFnZXJzL1dlYkdMTWFuYWdlcicpLFxuICAgIFNoYWRlck1hbmFnZXI6ICAgICAgICAgIHJlcXVpcmUoJy4vcmVuZGVyZXJzL3dlYmdsL21hbmFnZXJzL1NoYWRlck1hbmFnZXInKSxcbiAgICBTaGFkZXI6ICAgICAgICAgICAgICAgICByZXF1aXJlKCcuL3JlbmRlcmVycy93ZWJnbC9zaGFkZXJzL1NoYWRlcicpLFxuICAgIE9iamVjdFJlbmRlcmVyOiAgICAgICAgIHJlcXVpcmUoJy4vcmVuZGVyZXJzL3dlYmdsL3V0aWxzL09iamVjdFJlbmRlcmVyJyksXG4gICAgUmVuZGVyVGFyZ2V0OiAgICAgICAgICAgcmVxdWlyZSgnLi9yZW5kZXJlcnMvd2ViZ2wvdXRpbHMvUmVuZGVyVGFyZ2V0JyksXG5cbiAgICAvLyBmaWx0ZXJzIC0gd2ViZ2xcbiAgICBBYnN0cmFjdEZpbHRlcjogICAgICAgICByZXF1aXJlKCcuL3JlbmRlcmVycy93ZWJnbC9maWx0ZXJzL0Fic3RyYWN0RmlsdGVyJyksXG4gICAgRlhBQUZpbHRlcjogICAgICAgICAgICAgcmVxdWlyZSgnLi9yZW5kZXJlcnMvd2ViZ2wvZmlsdGVycy9GWEFBRmlsdGVyJyksXG4gICAgU3ByaXRlTWFza0ZpbHRlcjogICAgICAgcmVxdWlyZSgnLi9yZW5kZXJlcnMvd2ViZ2wvZmlsdGVycy9TcHJpdGVNYXNrRmlsdGVyJyksXG5cbiAgICBnbENvcmU6ICAgICAgICAgICAgICAgICAgIHJlcXVpcmUoJ3BpeGktZ2wtY29yZScpLFxuXG4gICAgLyoqXG4gICAgICogVGhpcyBoZWxwZXIgZnVuY3Rpb24gd2lsbCBhdXRvbWF0aWNhbGx5IGRldGVjdCB3aGljaCByZW5kZXJlciB5b3Ugc2hvdWxkIGJlIHVzaW5nLlxuICAgICAqIFdlYkdMIGlzIHRoZSBwcmVmZXJyZWQgcmVuZGVyZXIgYXMgaXQgaXMgYSBsb3QgZmFzdGVyLiBJZiB3ZWJHTCBpcyBub3Qgc3VwcG9ydGVkIGJ5XG4gICAgICogdGhlIGJyb3dzZXIgdGhlbiB0aGlzIGZ1bmN0aW9uIHdpbGwgcmV0dXJuIGEgY2FudmFzIHJlbmRlcmVyXG4gICAgICpcbiAgICAgKiBAbWVtYmVyb2YgUElYSVxuICAgICAqIEBwYXJhbSB3aWR0aD04MDAge251bWJlcn0gdGhlIHdpZHRoIG9mIHRoZSByZW5kZXJlcnMgdmlld1xuICAgICAqIEBwYXJhbSBoZWlnaHQ9NjAwIHtudW1iZXJ9IHRoZSBoZWlnaHQgb2YgdGhlIHJlbmRlcmVycyB2aWV3XG4gICAgICogQHBhcmFtIFtvcHRpb25zXSB7b2JqZWN0fSBUaGUgb3B0aW9uYWwgcmVuZGVyZXIgcGFyYW1ldGVyc1xuICAgICAqIEBwYXJhbSBbb3B0aW9ucy52aWV3XSB7SFRNTENhbnZhc0VsZW1lbnR9IHRoZSBjYW52YXMgdG8gdXNlIGFzIGEgdmlldywgb3B0aW9uYWxcbiAgICAgKiBAcGFyYW0gW29wdGlvbnMudHJhbnNwYXJlbnQ9ZmFsc2VdIHtib29sZWFufSBJZiB0aGUgcmVuZGVyIHZpZXcgaXMgdHJhbnNwYXJlbnQsIGRlZmF1bHQgZmFsc2VcbiAgICAgKiBAcGFyYW0gW29wdGlvbnMuYW50aWFsaWFzPWZhbHNlXSB7Ym9vbGVhbn0gc2V0cyBhbnRpYWxpYXMgKG9ubHkgYXBwbGljYWJsZSBpbiBjaHJvbWUgYXQgdGhlIG1vbWVudClcbiAgICAgKiBAcGFyYW0gW29wdGlvbnMucHJlc2VydmVEcmF3aW5nQnVmZmVyPWZhbHNlXSB7Ym9vbGVhbn0gZW5hYmxlcyBkcmF3aW5nIGJ1ZmZlciBwcmVzZXJ2YXRpb24sIGVuYWJsZSB0aGlzIGlmIHlvdVxuICAgICAqICAgICAgbmVlZCB0byBjYWxsIHRvRGF0YVVybCBvbiB0aGUgd2ViZ2wgY29udGV4dFxuICAgICAqIEBwYXJhbSBbb3B0aW9ucy5yZXNvbHV0aW9uPTFdIHtudW1iZXJ9IHRoZSByZXNvbHV0aW9uIG9mIHRoZSByZW5kZXJlciwgcmV0aW5hIHdvdWxkIGJlIDJcbiAgICAgKiBAcGFyYW0gW25vV2ViR0w9ZmFsc2VdIHtib29sZWFufSBwcmV2ZW50cyBzZWxlY3Rpb24gb2YgV2ViR0wgcmVuZGVyZXIsIGV2ZW4gaWYgc3VjaCBpcyBwcmVzZW50XG4gICAgICpcbiAgICAgKiBAcmV0dXJuIHtXZWJHTFJlbmRlcmVyfENhbnZhc1JlbmRlcmVyfSBSZXR1cm5zIFdlYkdMIHJlbmRlcmVyIGlmIGF2YWlsYWJsZSwgb3RoZXJ3aXNlIENhbnZhc1JlbmRlcmVyXG4gICAgICovXG4gICAgYXV0b0RldGVjdFJlbmRlcmVyOiBmdW5jdGlvbiAod2lkdGgsIGhlaWdodCwgb3B0aW9ucywgbm9XZWJHTClcbiAgICB7XG4gICAgICAgIHdpZHRoID0gd2lkdGggfHwgODAwO1xuICAgICAgICBoZWlnaHQgPSBoZWlnaHQgfHwgNjAwO1xuXG4gICAgICAgIGlmICghbm9XZWJHTCAmJiBjb3JlLnV0aWxzLmlzV2ViR0xTdXBwb3J0ZWQoKSlcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBjb3JlLldlYkdMUmVuZGVyZXIod2lkdGgsIGhlaWdodCwgb3B0aW9ucyk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbmV3IGNvcmUuQ2FudmFzUmVuZGVyZXIod2lkdGgsIGhlaWdodCwgb3B0aW9ucyk7XG4gICAgfVxufSk7XG4iLCIvLyBAdG9kbyAtIGlnbm9yZSB0aGUgdG9vIG1hbnkgcGFyYW1ldGVycyB3YXJuaW5nIGZvciBub3dcbi8vIHNob3VsZCBlaXRoZXIgZml4IGl0IG9yIGNoYW5nZSB0aGUganNoaW50IGNvbmZpZ1xuLy8ganNoaW50IC1XMDcyXG5cbnZhciBQb2ludCA9IHJlcXVpcmUoJy4vUG9pbnQnKTtcblxuLyoqXG4gKiBUaGUgcGl4aSBNYXRyaXggY2xhc3MgYXMgYW4gb2JqZWN0LCB3aGljaCBtYWtlcyBpdCBhIGxvdCBmYXN0ZXIsXG4gKiBoZXJlIGlzIGEgcmVwcmVzZW50YXRpb24gb2YgaXQgOlxuICogfCBhIHwgYiB8IHR4fFxuICogfCBjIHwgZCB8IHR5fFxuICogfCAwIHwgMCB8IDEgfFxuICpcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqL1xuZnVuY3Rpb24gTWF0cml4KClcbntcbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMVxuICAgICAqL1xuICAgIHRoaXMuYSA9IDE7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMFxuICAgICAqL1xuICAgIHRoaXMuYiA9IDA7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMFxuICAgICAqL1xuICAgIHRoaXMuYyA9IDA7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMVxuICAgICAqL1xuICAgIHRoaXMuZCA9IDE7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMFxuICAgICAqL1xuICAgIHRoaXMudHggPSAwO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDBcbiAgICAgKi9cbiAgICB0aGlzLnR5ID0gMDtcbn1cblxuTWF0cml4LnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IE1hdHJpeDtcbm1vZHVsZS5leHBvcnRzID0gTWF0cml4O1xuXG4vKipcbiAqIENyZWF0ZXMgYSBNYXRyaXggb2JqZWN0IGJhc2VkIG9uIHRoZSBnaXZlbiBhcnJheS4gVGhlIEVsZW1lbnQgdG8gTWF0cml4IG1hcHBpbmcgb3JkZXIgaXMgYXMgZm9sbG93czpcbiAqXG4gKiBhID0gYXJyYXlbMF1cbiAqIGIgPSBhcnJheVsxXVxuICogYyA9IGFycmF5WzNdXG4gKiBkID0gYXJyYXlbNF1cbiAqIHR4ID0gYXJyYXlbMl1cbiAqIHR5ID0gYXJyYXlbNV1cbiAqXG4gKiBAcGFyYW0gYXJyYXkge251bWJlcltdfSBUaGUgYXJyYXkgdGhhdCB0aGUgbWF0cml4IHdpbGwgYmUgcG9wdWxhdGVkIGZyb20uXG4gKi9cbk1hdHJpeC5wcm90b3R5cGUuZnJvbUFycmF5ID0gZnVuY3Rpb24gKGFycmF5KVxue1xuICAgIHRoaXMuYSA9IGFycmF5WzBdO1xuICAgIHRoaXMuYiA9IGFycmF5WzFdO1xuICAgIHRoaXMuYyA9IGFycmF5WzNdO1xuICAgIHRoaXMuZCA9IGFycmF5WzRdO1xuICAgIHRoaXMudHggPSBhcnJheVsyXTtcbiAgICB0aGlzLnR5ID0gYXJyYXlbNV07XG59O1xuXG5cbi8qKlxuICogc2V0cyB0aGUgbWF0cml4IHByb3BlcnRpZXNcbiAqXG4gKiBAcGFyYW0ge251bWJlcn0gYVxuICogQHBhcmFtIHtudW1iZXJ9IGJcbiAqIEBwYXJhbSB7bnVtYmVyfSBjXG4gKiBAcGFyYW0ge251bWJlcn0gZFxuICogQHBhcmFtIHtudW1iZXJ9IHR4XG4gKiBAcGFyYW0ge251bWJlcn0gdHlcbiAqXG4gKiBAcmV0dXJuIHtQSVhJLk1hdHJpeH0gVGhpcyBtYXRyaXguIEdvb2QgZm9yIGNoYWluaW5nIG1ldGhvZCBjYWxscy5cbiAqL1xuTWF0cml4LnByb3RvdHlwZS5zZXQgPSBmdW5jdGlvbiAoYSwgYiwgYywgZCwgdHgsIHR5KVxue1xuICAgIHRoaXMuYSA9IGE7XG4gICAgdGhpcy5iID0gYjtcbiAgICB0aGlzLmMgPSBjO1xuICAgIHRoaXMuZCA9IGQ7XG4gICAgdGhpcy50eCA9IHR4O1xuICAgIHRoaXMudHkgPSB0eTtcblxuICAgIHJldHVybiB0aGlzO1xufTtcblxuXG4vKipcbiAqIENyZWF0ZXMgYW4gYXJyYXkgZnJvbSB0aGUgY3VycmVudCBNYXRyaXggb2JqZWN0LlxuICpcbiAqIEBwYXJhbSB0cmFuc3Bvc2Uge2Jvb2xlYW59IFdoZXRoZXIgd2UgbmVlZCB0byB0cmFuc3Bvc2UgdGhlIG1hdHJpeCBvciBub3RcbiAqIEBwYXJhbSBbb3V0XSB7QXJyYXl9IElmIHByb3ZpZGVkIHRoZSBhcnJheSB3aWxsIGJlIGFzc2lnbmVkIHRvIG91dFxuICogQHJldHVybiB7bnVtYmVyW119IHRoZSBuZXdseSBjcmVhdGVkIGFycmF5IHdoaWNoIGNvbnRhaW5zIHRoZSBtYXRyaXhcbiAqL1xuTWF0cml4LnByb3RvdHlwZS50b0FycmF5ID0gZnVuY3Rpb24gKHRyYW5zcG9zZSwgb3V0KVxue1xuICAgIGlmICghdGhpcy5hcnJheSlcbiAgICB7XG4gICAgICAgIHRoaXMuYXJyYXkgPSBuZXcgRmxvYXQzMkFycmF5KDkpO1xuICAgIH1cblxuICAgIHZhciBhcnJheSA9IG91dCB8fCB0aGlzLmFycmF5O1xuXG4gICAgaWYgKHRyYW5zcG9zZSlcbiAgICB7XG4gICAgICAgIGFycmF5WzBdID0gdGhpcy5hO1xuICAgICAgICBhcnJheVsxXSA9IHRoaXMuYjtcbiAgICAgICAgYXJyYXlbMl0gPSAwO1xuICAgICAgICBhcnJheVszXSA9IHRoaXMuYztcbiAgICAgICAgYXJyYXlbNF0gPSB0aGlzLmQ7XG4gICAgICAgIGFycmF5WzVdID0gMDtcbiAgICAgICAgYXJyYXlbNl0gPSB0aGlzLnR4O1xuICAgICAgICBhcnJheVs3XSA9IHRoaXMudHk7XG4gICAgICAgIGFycmF5WzhdID0gMTtcbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgYXJyYXlbMF0gPSB0aGlzLmE7XG4gICAgICAgIGFycmF5WzFdID0gdGhpcy5jO1xuICAgICAgICBhcnJheVsyXSA9IHRoaXMudHg7XG4gICAgICAgIGFycmF5WzNdID0gdGhpcy5iO1xuICAgICAgICBhcnJheVs0XSA9IHRoaXMuZDtcbiAgICAgICAgYXJyYXlbNV0gPSB0aGlzLnR5O1xuICAgICAgICBhcnJheVs2XSA9IDA7XG4gICAgICAgIGFycmF5WzddID0gMDtcbiAgICAgICAgYXJyYXlbOF0gPSAxO1xuICAgIH1cblxuICAgIHJldHVybiBhcnJheTtcbn07XG5cbi8qKlxuICogR2V0IGEgbmV3IHBvc2l0aW9uIHdpdGggdGhlIGN1cnJlbnQgdHJhbnNmb3JtYXRpb24gYXBwbGllZC5cbiAqIENhbiBiZSB1c2VkIHRvIGdvIGZyb20gYSBjaGlsZCdzIGNvb3JkaW5hdGUgc3BhY2UgdG8gdGhlIHdvcmxkIGNvb3JkaW5hdGUgc3BhY2UuIChlLmcuIHJlbmRlcmluZylcbiAqXG4gKiBAcGFyYW0gcG9zIHtQSVhJLlBvaW50fSBUaGUgb3JpZ2luXG4gKiBAcGFyYW0gW25ld1Bvc10ge1BJWEkuUG9pbnR9IFRoZSBwb2ludCB0aGF0IHRoZSBuZXcgcG9zaXRpb24gaXMgYXNzaWduZWQgdG8gKGFsbG93ZWQgdG8gYmUgc2FtZSBhcyBpbnB1dClcbiAqIEByZXR1cm4ge1BJWEkuUG9pbnR9IFRoZSBuZXcgcG9pbnQsIHRyYW5zZm9ybWVkIHRocm91Z2ggdGhpcyBtYXRyaXhcbiAqL1xuTWF0cml4LnByb3RvdHlwZS5hcHBseSA9IGZ1bmN0aW9uIChwb3MsIG5ld1BvcylcbntcbiAgICBuZXdQb3MgPSBuZXdQb3MgfHwgbmV3IFBvaW50KCk7XG5cbiAgICB2YXIgeCA9IHBvcy54O1xuICAgIHZhciB5ID0gcG9zLnk7XG5cbiAgICBuZXdQb3MueCA9IHRoaXMuYSAqIHggKyB0aGlzLmMgKiB5ICsgdGhpcy50eDtcbiAgICBuZXdQb3MueSA9IHRoaXMuYiAqIHggKyB0aGlzLmQgKiB5ICsgdGhpcy50eTtcblxuICAgIHJldHVybiBuZXdQb3M7XG59O1xuXG4vKipcbiAqIEdldCBhIG5ldyBwb3NpdGlvbiB3aXRoIHRoZSBpbnZlcnNlIG9mIHRoZSBjdXJyZW50IHRyYW5zZm9ybWF0aW9uIGFwcGxpZWQuXG4gKiBDYW4gYmUgdXNlZCB0byBnbyBmcm9tIHRoZSB3b3JsZCBjb29yZGluYXRlIHNwYWNlIHRvIGEgY2hpbGQncyBjb29yZGluYXRlIHNwYWNlLiAoZS5nLiBpbnB1dClcbiAqXG4gKiBAcGFyYW0gcG9zIHtQSVhJLlBvaW50fSBUaGUgb3JpZ2luXG4gKiBAcGFyYW0gW25ld1Bvc10ge1BJWEkuUG9pbnR9IFRoZSBwb2ludCB0aGF0IHRoZSBuZXcgcG9zaXRpb24gaXMgYXNzaWduZWQgdG8gKGFsbG93ZWQgdG8gYmUgc2FtZSBhcyBpbnB1dClcbiAqIEByZXR1cm4ge1BJWEkuUG9pbnR9IFRoZSBuZXcgcG9pbnQsIGludmVyc2UtdHJhbnNmb3JtZWQgdGhyb3VnaCB0aGlzIG1hdHJpeFxuICovXG5NYXRyaXgucHJvdG90eXBlLmFwcGx5SW52ZXJzZSA9IGZ1bmN0aW9uIChwb3MsIG5ld1BvcylcbntcbiAgICBuZXdQb3MgPSBuZXdQb3MgfHwgbmV3IFBvaW50KCk7XG5cbiAgICB2YXIgaWQgPSAxIC8gKHRoaXMuYSAqIHRoaXMuZCArIHRoaXMuYyAqIC10aGlzLmIpO1xuXG4gICAgdmFyIHggPSBwb3MueDtcbiAgICB2YXIgeSA9IHBvcy55O1xuXG4gICAgbmV3UG9zLnggPSB0aGlzLmQgKiBpZCAqIHggKyAtdGhpcy5jICogaWQgKiB5ICsgKHRoaXMudHkgKiB0aGlzLmMgLSB0aGlzLnR4ICogdGhpcy5kKSAqIGlkO1xuICAgIG5ld1Bvcy55ID0gdGhpcy5hICogaWQgKiB5ICsgLXRoaXMuYiAqIGlkICogeCArICgtdGhpcy50eSAqIHRoaXMuYSArIHRoaXMudHggKiB0aGlzLmIpICogaWQ7XG5cbiAgICByZXR1cm4gbmV3UG9zO1xufTtcblxuLyoqXG4gKiBUcmFuc2xhdGVzIHRoZSBtYXRyaXggb24gdGhlIHggYW5kIHkuXG4gKlxuICogQHBhcmFtIHtudW1iZXJ9IHhcbiAqIEBwYXJhbSB7bnVtYmVyfSB5XG4gKiBAcmV0dXJuIHtQSVhJLk1hdHJpeH0gVGhpcyBtYXRyaXguIEdvb2QgZm9yIGNoYWluaW5nIG1ldGhvZCBjYWxscy5cbiAqL1xuTWF0cml4LnByb3RvdHlwZS50cmFuc2xhdGUgPSBmdW5jdGlvbiAoeCwgeSlcbntcbiAgICB0aGlzLnR4ICs9IHg7XG4gICAgdGhpcy50eSArPSB5O1xuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIEFwcGxpZXMgYSBzY2FsZSB0cmFuc2Zvcm1hdGlvbiB0byB0aGUgbWF0cml4LlxuICpcbiAqIEBwYXJhbSB7bnVtYmVyfSB4IFRoZSBhbW91bnQgdG8gc2NhbGUgaG9yaXpvbnRhbGx5XG4gKiBAcGFyYW0ge251bWJlcn0geSBUaGUgYW1vdW50IHRvIHNjYWxlIHZlcnRpY2FsbHlcbiAqIEByZXR1cm4ge1BJWEkuTWF0cml4fSBUaGlzIG1hdHJpeC4gR29vZCBmb3IgY2hhaW5pbmcgbWV0aG9kIGNhbGxzLlxuICovXG5NYXRyaXgucHJvdG90eXBlLnNjYWxlID0gZnVuY3Rpb24gKHgsIHkpXG57XG4gICAgdGhpcy5hICo9IHg7XG4gICAgdGhpcy5kICo9IHk7XG4gICAgdGhpcy5jICo9IHg7XG4gICAgdGhpcy5iICo9IHk7XG4gICAgdGhpcy50eCAqPSB4O1xuICAgIHRoaXMudHkgKj0geTtcblxuICAgIHJldHVybiB0aGlzO1xufTtcblxuXG4vKipcbiAqIEFwcGxpZXMgYSByb3RhdGlvbiB0cmFuc2Zvcm1hdGlvbiB0byB0aGUgbWF0cml4LlxuICpcbiAqIEBwYXJhbSB7bnVtYmVyfSBhbmdsZSAtIFRoZSBhbmdsZSBpbiByYWRpYW5zLlxuICogQHJldHVybiB7UElYSS5NYXRyaXh9IFRoaXMgbWF0cml4LiBHb29kIGZvciBjaGFpbmluZyBtZXRob2QgY2FsbHMuXG4gKi9cbk1hdHJpeC5wcm90b3R5cGUucm90YXRlID0gZnVuY3Rpb24gKGFuZ2xlKVxue1xuICAgIHZhciBjb3MgPSBNYXRoLmNvcyggYW5nbGUgKTtcbiAgICB2YXIgc2luID0gTWF0aC5zaW4oIGFuZ2xlICk7XG5cbiAgICB2YXIgYTEgPSB0aGlzLmE7XG4gICAgdmFyIGMxID0gdGhpcy5jO1xuICAgIHZhciB0eDEgPSB0aGlzLnR4O1xuXG4gICAgdGhpcy5hID0gYTEgKiBjb3MtdGhpcy5iICogc2luO1xuICAgIHRoaXMuYiA9IGExICogc2luK3RoaXMuYiAqIGNvcztcbiAgICB0aGlzLmMgPSBjMSAqIGNvcy10aGlzLmQgKiBzaW47XG4gICAgdGhpcy5kID0gYzEgKiBzaW4rdGhpcy5kICogY29zO1xuICAgIHRoaXMudHggPSB0eDEgKiBjb3MgLSB0aGlzLnR5ICogc2luO1xuICAgIHRoaXMudHkgPSB0eDEgKiBzaW4gKyB0aGlzLnR5ICogY29zO1xuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIEFwcGVuZHMgdGhlIGdpdmVuIE1hdHJpeCB0byB0aGlzIE1hdHJpeC5cbiAqXG4gKiBAcGFyYW0ge1BJWEkuTWF0cml4fSBtYXRyaXhcbiAqIEByZXR1cm4ge1BJWEkuTWF0cml4fSBUaGlzIG1hdHJpeC4gR29vZCBmb3IgY2hhaW5pbmcgbWV0aG9kIGNhbGxzLlxuICovXG5NYXRyaXgucHJvdG90eXBlLmFwcGVuZCA9IGZ1bmN0aW9uIChtYXRyaXgpXG57XG4gICAgdmFyIGExID0gdGhpcy5hO1xuICAgIHZhciBiMSA9IHRoaXMuYjtcbiAgICB2YXIgYzEgPSB0aGlzLmM7XG4gICAgdmFyIGQxID0gdGhpcy5kO1xuXG4gICAgdGhpcy5hICA9IG1hdHJpeC5hICogYTEgKyBtYXRyaXguYiAqIGMxO1xuICAgIHRoaXMuYiAgPSBtYXRyaXguYSAqIGIxICsgbWF0cml4LmIgKiBkMTtcbiAgICB0aGlzLmMgID0gbWF0cml4LmMgKiBhMSArIG1hdHJpeC5kICogYzE7XG4gICAgdGhpcy5kICA9IG1hdHJpeC5jICogYjEgKyBtYXRyaXguZCAqIGQxO1xuXG4gICAgdGhpcy50eCA9IG1hdHJpeC50eCAqIGExICsgbWF0cml4LnR5ICogYzEgKyB0aGlzLnR4O1xuICAgIHRoaXMudHkgPSBtYXRyaXgudHggKiBiMSArIG1hdHJpeC50eSAqIGQxICsgdGhpcy50eTtcblxuICAgIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBTZXRzIHRoZSBtYXRyaXggYmFzZWQgb24gYWxsIHRoZSBhdmFpbGFibGUgcHJvcGVydGllc1xuICpcbiAqIEBwYXJhbSB7bnVtYmVyfSB4XG4gKiBAcGFyYW0ge251bWJlcn0geVxuICogQHBhcmFtIHtudW1iZXJ9IHBpdm90WFxuICogQHBhcmFtIHtudW1iZXJ9IHBpdm90WVxuICogQHBhcmFtIHtudW1iZXJ9IHNjYWxlWFxuICogQHBhcmFtIHtudW1iZXJ9IHNjYWxlWVxuICogQHBhcmFtIHtudW1iZXJ9IHJvdGF0aW9uXG4gKiBAcGFyYW0ge251bWJlcn0gc2tld1hcbiAqIEBwYXJhbSB7bnVtYmVyfSBza2V3WVxuICpcbiAqIEByZXR1cm4ge1BJWEkuTWF0cml4fSBUaGlzIG1hdHJpeC4gR29vZCBmb3IgY2hhaW5pbmcgbWV0aG9kIGNhbGxzLlxuICovXG5NYXRyaXgucHJvdG90eXBlLnNldFRyYW5zZm9ybSA9IGZ1bmN0aW9uICh4LCB5LCBwaXZvdFgsIHBpdm90WSwgc2NhbGVYLCBzY2FsZVksIHJvdGF0aW9uLCBza2V3WCwgc2tld1kpXG57XG4gICAgdmFyIGEsIGIsIGMsIGQsIHNyLCBjciwgY3ksIHN5LCBuc3gsIGN4O1xuXG4gICAgc3IgID0gTWF0aC5zaW4ocm90YXRpb24pO1xuICAgIGNyICA9IE1hdGguY29zKHJvdGF0aW9uKTtcbiAgICBjeSAgPSBNYXRoLmNvcyhza2V3WSk7XG4gICAgc3kgID0gTWF0aC5zaW4oc2tld1kpO1xuICAgIG5zeCA9IC1NYXRoLnNpbihza2V3WCk7XG4gICAgY3ggID0gIE1hdGguY29zKHNrZXdYKTtcblxuICAgIGEgID0gIGNyICogc2NhbGVYO1xuICAgIGIgID0gIHNyICogc2NhbGVYO1xuICAgIGMgID0gLXNyICogc2NhbGVZO1xuICAgIGQgID0gIGNyICogc2NhbGVZO1xuXG4gICAgdGhpcy5hICA9IGN5ICogYSArIHN5ICogYztcbiAgICB0aGlzLmIgID0gY3kgKiBiICsgc3kgKiBkO1xuICAgIHRoaXMuYyAgPSBuc3ggKiBhICsgY3ggKiBjO1xuICAgIHRoaXMuZCAgPSBuc3ggKiBiICsgY3ggKiBkO1xuXG4gICAgdGhpcy50eCA9IHggKyAoIHBpdm90WCAqIGEgKyBwaXZvdFkgKiBjICk7XG4gICAgdGhpcy50eSA9IHkgKyAoIHBpdm90WCAqIGIgKyBwaXZvdFkgKiBkICk7XG5cbiAgICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogUHJlcGVuZHMgdGhlIGdpdmVuIE1hdHJpeCB0byB0aGlzIE1hdHJpeC5cbiAqXG4gKiBAcGFyYW0ge1BJWEkuTWF0cml4fSBtYXRyaXhcbiAqIEByZXR1cm4ge1BJWEkuTWF0cml4fSBUaGlzIG1hdHJpeC4gR29vZCBmb3IgY2hhaW5pbmcgbWV0aG9kIGNhbGxzLlxuICovXG5NYXRyaXgucHJvdG90eXBlLnByZXBlbmQgPSBmdW5jdGlvbihtYXRyaXgpXG57XG4gICAgdmFyIHR4MSA9IHRoaXMudHg7XG5cbiAgICBpZiAobWF0cml4LmEgIT09IDEgfHwgbWF0cml4LmIgIT09IDAgfHwgbWF0cml4LmMgIT09IDAgfHwgbWF0cml4LmQgIT09IDEpXG4gICAge1xuICAgICAgICB2YXIgYTEgPSB0aGlzLmE7XG4gICAgICAgIHZhciBjMSA9IHRoaXMuYztcbiAgICAgICAgdGhpcy5hICA9IGExKm1hdHJpeC5hK3RoaXMuYiptYXRyaXguYztcbiAgICAgICAgdGhpcy5iICA9IGExKm1hdHJpeC5iK3RoaXMuYiptYXRyaXguZDtcbiAgICAgICAgdGhpcy5jICA9IGMxKm1hdHJpeC5hK3RoaXMuZCptYXRyaXguYztcbiAgICAgICAgdGhpcy5kICA9IGMxKm1hdHJpeC5iK3RoaXMuZCptYXRyaXguZDtcbiAgICB9XG5cbiAgICB0aGlzLnR4ID0gdHgxKm1hdHJpeC5hK3RoaXMudHkqbWF0cml4LmMrbWF0cml4LnR4O1xuICAgIHRoaXMudHkgPSB0eDEqbWF0cml4LmIrdGhpcy50eSptYXRyaXguZCttYXRyaXgudHk7XG5cbiAgICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogSW52ZXJ0cyB0aGlzIG1hdHJpeFxuICpcbiAqIEByZXR1cm4ge1BJWEkuTWF0cml4fSBUaGlzIG1hdHJpeC4gR29vZCBmb3IgY2hhaW5pbmcgbWV0aG9kIGNhbGxzLlxuICovXG5NYXRyaXgucHJvdG90eXBlLmludmVydCA9IGZ1bmN0aW9uKClcbntcbiAgICB2YXIgYTEgPSB0aGlzLmE7XG4gICAgdmFyIGIxID0gdGhpcy5iO1xuICAgIHZhciBjMSA9IHRoaXMuYztcbiAgICB2YXIgZDEgPSB0aGlzLmQ7XG4gICAgdmFyIHR4MSA9IHRoaXMudHg7XG4gICAgdmFyIG4gPSBhMSpkMS1iMSpjMTtcblxuICAgIHRoaXMuYSA9IGQxL247XG4gICAgdGhpcy5iID0gLWIxL247XG4gICAgdGhpcy5jID0gLWMxL247XG4gICAgdGhpcy5kID0gYTEvbjtcbiAgICB0aGlzLnR4ID0gKGMxKnRoaXMudHktZDEqdHgxKS9uO1xuICAgIHRoaXMudHkgPSAtKGExKnRoaXMudHktYjEqdHgxKS9uO1xuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG5cbi8qKlxuICogUmVzZXRzIHRoaXMgTWF0aXggdG8gYW4gaWRlbnRpdHkgKGRlZmF1bHQpIG1hdHJpeC5cbiAqXG4gKiBAcmV0dXJuIHtQSVhJLk1hdHJpeH0gVGhpcyBtYXRyaXguIEdvb2QgZm9yIGNoYWluaW5nIG1ldGhvZCBjYWxscy5cbiAqL1xuTWF0cml4LnByb3RvdHlwZS5pZGVudGl0eSA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy5hID0gMTtcbiAgICB0aGlzLmIgPSAwO1xuICAgIHRoaXMuYyA9IDA7XG4gICAgdGhpcy5kID0gMTtcbiAgICB0aGlzLnR4ID0gMDtcbiAgICB0aGlzLnR5ID0gMDtcblxuICAgIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBDcmVhdGVzIGEgbmV3IE1hdHJpeCBvYmplY3Qgd2l0aCB0aGUgc2FtZSB2YWx1ZXMgYXMgdGhpcyBvbmUuXG4gKlxuICogQHJldHVybiB7UElYSS5NYXRyaXh9IEEgY29weSBvZiB0aGlzIG1hdHJpeC4gR29vZCBmb3IgY2hhaW5pbmcgbWV0aG9kIGNhbGxzLlxuICovXG5NYXRyaXgucHJvdG90eXBlLmNsb25lID0gZnVuY3Rpb24gKClcbntcbiAgICB2YXIgbWF0cml4ID0gbmV3IE1hdHJpeCgpO1xuICAgIG1hdHJpeC5hID0gdGhpcy5hO1xuICAgIG1hdHJpeC5iID0gdGhpcy5iO1xuICAgIG1hdHJpeC5jID0gdGhpcy5jO1xuICAgIG1hdHJpeC5kID0gdGhpcy5kO1xuICAgIG1hdHJpeC50eCA9IHRoaXMudHg7XG4gICAgbWF0cml4LnR5ID0gdGhpcy50eTtcblxuICAgIHJldHVybiBtYXRyaXg7XG59O1xuXG4vKipcbiAqIENoYW5nZXMgdGhlIHZhbHVlcyBvZiB0aGUgZ2l2ZW4gbWF0cml4IHRvIGJlIHRoZSBzYW1lIGFzIHRoZSBvbmVzIGluIHRoaXMgbWF0cml4XG4gKlxuICogQHJldHVybiB7UElYSS5NYXRyaXh9IFRoZSBtYXRyaXggZ2l2ZW4gaW4gcGFyYW1ldGVyIHdpdGggaXRzIHZhbHVlcyB1cGRhdGVkLlxuICovXG5NYXRyaXgucHJvdG90eXBlLmNvcHkgPSBmdW5jdGlvbiAobWF0cml4KVxue1xuICAgIG1hdHJpeC5hID0gdGhpcy5hO1xuICAgIG1hdHJpeC5iID0gdGhpcy5iO1xuICAgIG1hdHJpeC5jID0gdGhpcy5jO1xuICAgIG1hdHJpeC5kID0gdGhpcy5kO1xuICAgIG1hdHJpeC50eCA9IHRoaXMudHg7XG4gICAgbWF0cml4LnR5ID0gdGhpcy50eTtcblxuICAgIHJldHVybiBtYXRyaXg7XG59O1xuXG4vKipcbiAqIEEgZGVmYXVsdCAoaWRlbnRpdHkpIG1hdHJpeFxuICpcbiAqIEBzdGF0aWNcbiAqIEBjb25zdFxuICovXG5NYXRyaXguSURFTlRJVFkgPSBuZXcgTWF0cml4KCk7XG5cbi8qKlxuICogQSB0ZW1wIG1hdHJpeFxuICpcbiAqIEBzdGF0aWNcbiAqIEBjb25zdFxuICovXG5NYXRyaXguVEVNUF9NQVRSSVggPSBuZXcgTWF0cml4KCk7XG4iLCIvKipcbiAqIFRoZSBQb2ludCBvYmplY3QgcmVwcmVzZW50cyBhIGxvY2F0aW9uIGluIGEgdHdvLWRpbWVuc2lvbmFsIGNvb3JkaW5hdGUgc3lzdGVtLCB3aGVyZSB4IHJlcHJlc2VudHNcbiAqIHRoZSBob3Jpem9udGFsIGF4aXMgYW5kIHkgcmVwcmVzZW50cyB0aGUgdmVydGljYWwgYXhpcy5cbiAqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gW3g9MF0ge251bWJlcn0gcG9zaXRpb24gb2YgdGhlIHBvaW50IG9uIHRoZSB4IGF4aXNcbiAqIEBwYXJhbSBbeT0wXSB7bnVtYmVyfSBwb3NpdGlvbiBvZiB0aGUgcG9pbnQgb24gdGhlIHkgYXhpc1xuICovXG5mdW5jdGlvbiBQb2ludCh4LCB5KVxue1xuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAwXG4gICAgICovXG4gICAgdGhpcy54ID0geCB8fCAwO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDBcbiAgICAgKi9cbiAgICB0aGlzLnkgPSB5IHx8IDA7XG59XG5cblBvaW50LnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFBvaW50O1xubW9kdWxlLmV4cG9ydHMgPSBQb2ludDtcblxuLyoqXG4gKiBDcmVhdGVzIGEgY2xvbmUgb2YgdGhpcyBwb2ludFxuICpcbiAqIEByZXR1cm4ge1BJWEkuUG9pbnR9IGEgY29weSBvZiB0aGUgcG9pbnRcbiAqL1xuUG9pbnQucHJvdG90eXBlLmNsb25lID0gZnVuY3Rpb24gKClcbntcbiAgICByZXR1cm4gbmV3IFBvaW50KHRoaXMueCwgdGhpcy55KTtcbn07XG5cbi8qKlxuICogQ29waWVzIHggYW5kIHkgZnJvbSB0aGUgZ2l2ZW4gcG9pbnRcbiAqXG4gKiBAcGFyYW0gcCB7UElYSS5Qb2ludH1cbiAqL1xuUG9pbnQucHJvdG90eXBlLmNvcHkgPSBmdW5jdGlvbiAocCkge1xuICAgIHRoaXMuc2V0KHAueCwgcC55KTtcbn07XG5cbi8qKlxuICogUmV0dXJucyB0cnVlIGlmIHRoZSBnaXZlbiBwb2ludCBpcyBlcXVhbCB0byB0aGlzIHBvaW50XG4gKlxuICogQHBhcmFtIHAge1BJWEkuUG9pbnR9XG4gKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAqL1xuUG9pbnQucHJvdG90eXBlLmVxdWFscyA9IGZ1bmN0aW9uIChwKSB7XG4gICAgcmV0dXJuIChwLnggPT09IHRoaXMueCkgJiYgKHAueSA9PT0gdGhpcy55KTtcbn07XG5cbi8qKlxuICogU2V0cyB0aGUgcG9pbnQgdG8gYSBuZXcgeCBhbmQgeSBwb3NpdGlvbi5cbiAqIElmIHkgaXMgb21pdHRlZCwgYm90aCB4IGFuZCB5IHdpbGwgYmUgc2V0IHRvIHguXG4gKlxuICogQHBhcmFtIFt4PTBdIHtudW1iZXJ9IHBvc2l0aW9uIG9mIHRoZSBwb2ludCBvbiB0aGUgeCBheGlzXG4gKiBAcGFyYW0gW3k9MF0ge251bWJlcn0gcG9zaXRpb24gb2YgdGhlIHBvaW50IG9uIHRoZSB5IGF4aXNcbiAqL1xuUG9pbnQucHJvdG90eXBlLnNldCA9IGZ1bmN0aW9uICh4LCB5KVxue1xuICAgIHRoaXMueCA9IHggfHwgMDtcbiAgICB0aGlzLnkgPSB5IHx8ICggKHkgIT09IDApID8gdGhpcy54IDogMCApIDtcbn07XG4iLCIvKipcbiAqIE1hdGggY2xhc3NlcyBhbmQgdXRpbGl0aWVzIG1peGVkIGludG8gUElYSSBuYW1lc3BhY2UuXG4gKlxuICogQGxlbmRzIFBJWElcbiAqL1xubW9kdWxlLmV4cG9ydHMgPSB7XG4gICAgLy8gVGhlc2Ugd2lsbCBiZSBtaXhlZCB0byBiZSBtYWRlIHB1YmxpY2x5IGF2YWlsYWJsZSxcbiAgICAvLyB3aGlsZSB0aGlzIG1vZHVsZSBpcyB1c2VkIGludGVybmFsbHkgaW4gY29yZVxuICAgIC8vIHRvIGF2b2lkIGNpcmN1bGFyIGRlcGVuZGVuY2llcyBhbmQgY3V0IGRvd24gb25cbiAgICAvLyBpbnRlcm5hbCBtb2R1bGUgcmVxdWlyZXMuXG5cbiAgICBQb2ludDogICAgICByZXF1aXJlKCcuL1BvaW50JyksXG4gICAgTWF0cml4OiAgICAgcmVxdWlyZSgnLi9NYXRyaXgnKSxcblxuICAgIENpcmNsZTogICAgIHJlcXVpcmUoJy4vc2hhcGVzL0NpcmNsZScpLFxuICAgIEVsbGlwc2U6ICAgIHJlcXVpcmUoJy4vc2hhcGVzL0VsbGlwc2UnKSxcbiAgICBQb2x5Z29uOiAgICByZXF1aXJlKCcuL3NoYXBlcy9Qb2x5Z29uJyksXG4gICAgUmVjdGFuZ2xlOiAgcmVxdWlyZSgnLi9zaGFwZXMvUmVjdGFuZ2xlJyksXG4gICAgUm91bmRlZFJlY3RhbmdsZTogcmVxdWlyZSgnLi9zaGFwZXMvUm91bmRlZFJlY3RhbmdsZScpXG59O1xuIiwidmFyIFJlY3RhbmdsZSA9IHJlcXVpcmUoJy4vUmVjdGFuZ2xlJyksXG4gICAgQ09OU1QgPSByZXF1aXJlKCcuLi8uLi9jb25zdCcpO1xuXG4vKipcbiAqIFRoZSBDaXJjbGUgb2JqZWN0IGNhbiBiZSB1c2VkIHRvIHNwZWNpZnkgYSBoaXQgYXJlYSBmb3IgZGlzcGxheU9iamVjdHNcbiAqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0geCB7bnVtYmVyfSBUaGUgWCBjb29yZGluYXRlIG9mIHRoZSBjZW50ZXIgb2YgdGhpcyBjaXJjbGVcbiAqIEBwYXJhbSB5IHtudW1iZXJ9IFRoZSBZIGNvb3JkaW5hdGUgb2YgdGhlIGNlbnRlciBvZiB0aGlzIGNpcmNsZVxuICogQHBhcmFtIHJhZGl1cyB7bnVtYmVyfSBUaGUgcmFkaXVzIG9mIHRoZSBjaXJjbGVcbiAqL1xuZnVuY3Rpb24gQ2lyY2xlKHgsIHksIHJhZGl1cylcbntcbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMFxuICAgICAqL1xuICAgIHRoaXMueCA9IHggfHwgMDtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAwXG4gICAgICovXG4gICAgdGhpcy55ID0geSB8fCAwO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDBcbiAgICAgKi9cbiAgICB0aGlzLnJhZGl1cyA9IHJhZGl1cyB8fCAwO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHR5cGUgb2YgdGhlIG9iamVjdCwgbWFpbmx5IHVzZWQgdG8gYXZvaWQgYGluc3RhbmNlb2ZgIGNoZWNrc1xuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMudHlwZSA9IENPTlNULlNIQVBFUy5DSVJDO1xufVxuXG5DaXJjbGUucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gQ2lyY2xlO1xubW9kdWxlLmV4cG9ydHMgPSBDaXJjbGU7XG5cbi8qKlxuICogQ3JlYXRlcyBhIGNsb25lIG9mIHRoaXMgQ2lyY2xlIGluc3RhbmNlXG4gKlxuICogQHJldHVybiB7UElYSS5DaXJjbGV9IGEgY29weSBvZiB0aGUgQ2lyY2xlXG4gKi9cbkNpcmNsZS5wcm90b3R5cGUuY2xvbmUgPSBmdW5jdGlvbiAoKVxue1xuICAgIHJldHVybiBuZXcgQ2lyY2xlKHRoaXMueCwgdGhpcy55LCB0aGlzLnJhZGl1cyk7XG59O1xuXG4vKipcbiAqIENoZWNrcyB3aGV0aGVyIHRoZSB4IGFuZCB5IGNvb3JkaW5hdGVzIGdpdmVuIGFyZSBjb250YWluZWQgd2l0aGluIHRoaXMgY2lyY2xlXG4gKlxuICogQHBhcmFtIHgge251bWJlcn0gVGhlIFggY29vcmRpbmF0ZSBvZiB0aGUgcG9pbnQgdG8gdGVzdFxuICogQHBhcmFtIHkge251bWJlcn0gVGhlIFkgY29vcmRpbmF0ZSBvZiB0aGUgcG9pbnQgdG8gdGVzdFxuICogQHJldHVybiB7Ym9vbGVhbn0gV2hldGhlciB0aGUgeC95IGNvb3JkaW5hdGVzIGFyZSB3aXRoaW4gdGhpcyBDaXJjbGVcbiAqL1xuQ2lyY2xlLnByb3RvdHlwZS5jb250YWlucyA9IGZ1bmN0aW9uICh4LCB5KVxue1xuICAgIGlmICh0aGlzLnJhZGl1cyA8PSAwKVxuICAgIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHZhciBkeCA9ICh0aGlzLnggLSB4KSxcbiAgICAgICAgZHkgPSAodGhpcy55IC0geSksXG4gICAgICAgIHIyID0gdGhpcy5yYWRpdXMgKiB0aGlzLnJhZGl1cztcblxuICAgIGR4ICo9IGR4O1xuICAgIGR5ICo9IGR5O1xuXG4gICAgcmV0dXJuIChkeCArIGR5IDw9IHIyKTtcbn07XG5cbi8qKlxuKiBSZXR1cm5zIHRoZSBmcmFtaW5nIHJlY3RhbmdsZSBvZiB0aGUgY2lyY2xlIGFzIGEgUmVjdGFuZ2xlIG9iamVjdFxuKlxuKiBAcmV0dXJuIHtQSVhJLlJlY3RhbmdsZX0gdGhlIGZyYW1pbmcgcmVjdGFuZ2xlXG4qL1xuQ2lyY2xlLnByb3RvdHlwZS5nZXRCb3VuZHMgPSBmdW5jdGlvbiAoKVxue1xuICAgIHJldHVybiBuZXcgUmVjdGFuZ2xlKHRoaXMueCAtIHRoaXMucmFkaXVzLCB0aGlzLnkgLSB0aGlzLnJhZGl1cywgdGhpcy5yYWRpdXMgKiAyLCB0aGlzLnJhZGl1cyAqIDIpO1xufTtcbiIsInZhciBSZWN0YW5nbGUgPSByZXF1aXJlKCcuL1JlY3RhbmdsZScpLFxuICAgIENPTlNUID0gcmVxdWlyZSgnLi4vLi4vY29uc3QnKTtcblxuLyoqXG4gKiBUaGUgRWxsaXBzZSBvYmplY3QgY2FuIGJlIHVzZWQgdG8gc3BlY2lmeSBhIGhpdCBhcmVhIGZvciBkaXNwbGF5T2JqZWN0c1xuICpcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqIEBwYXJhbSB4IHtudW1iZXJ9IFRoZSBYIGNvb3JkaW5hdGUgb2YgdGhlIGNlbnRlciBvZiB0aGUgZWxsaXBzZVxuICogQHBhcmFtIHkge251bWJlcn0gVGhlIFkgY29vcmRpbmF0ZSBvZiB0aGUgY2VudGVyIG9mIHRoZSBlbGxpcHNlXG4gKiBAcGFyYW0gd2lkdGgge251bWJlcn0gVGhlIGhhbGYgd2lkdGggb2YgdGhpcyBlbGxpcHNlXG4gKiBAcGFyYW0gaGVpZ2h0IHtudW1iZXJ9IFRoZSBoYWxmIGhlaWdodCBvZiB0aGlzIGVsbGlwc2VcbiAqL1xuZnVuY3Rpb24gRWxsaXBzZSh4LCB5LCB3aWR0aCwgaGVpZ2h0KVxue1xuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAwXG4gICAgICovXG4gICAgdGhpcy54ID0geCB8fCAwO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDBcbiAgICAgKi9cbiAgICB0aGlzLnkgPSB5IHx8IDA7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMFxuICAgICAqL1xuICAgIHRoaXMud2lkdGggPSB3aWR0aCB8fCAwO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDBcbiAgICAgKi9cbiAgICB0aGlzLmhlaWdodCA9IGhlaWdodCB8fCAwO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHR5cGUgb2YgdGhlIG9iamVjdCwgbWFpbmx5IHVzZWQgdG8gYXZvaWQgYGluc3RhbmNlb2ZgIGNoZWNrc1xuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMudHlwZSA9IENPTlNULlNIQVBFUy5FTElQO1xufVxuXG5FbGxpcHNlLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IEVsbGlwc2U7XG5tb2R1bGUuZXhwb3J0cyA9IEVsbGlwc2U7XG5cbi8qKlxuICogQ3JlYXRlcyBhIGNsb25lIG9mIHRoaXMgRWxsaXBzZSBpbnN0YW5jZVxuICpcbiAqIEByZXR1cm4ge1BJWEkuRWxsaXBzZX0gYSBjb3B5IG9mIHRoZSBlbGxpcHNlXG4gKi9cbkVsbGlwc2UucHJvdG90eXBlLmNsb25lID0gZnVuY3Rpb24gKClcbntcbiAgICByZXR1cm4gbmV3IEVsbGlwc2UodGhpcy54LCB0aGlzLnksIHRoaXMud2lkdGgsIHRoaXMuaGVpZ2h0KTtcbn07XG5cbi8qKlxuICogQ2hlY2tzIHdoZXRoZXIgdGhlIHggYW5kIHkgY29vcmRpbmF0ZXMgZ2l2ZW4gYXJlIGNvbnRhaW5lZCB3aXRoaW4gdGhpcyBlbGxpcHNlXG4gKlxuICogQHBhcmFtIHgge251bWJlcn0gVGhlIFggY29vcmRpbmF0ZSBvZiB0aGUgcG9pbnQgdG8gdGVzdFxuICogQHBhcmFtIHkge251bWJlcn0gVGhlIFkgY29vcmRpbmF0ZSBvZiB0aGUgcG9pbnQgdG8gdGVzdFxuICogQHJldHVybiB7Ym9vbGVhbn0gV2hldGhlciB0aGUgeC95IGNvb3JkcyBhcmUgd2l0aGluIHRoaXMgZWxsaXBzZVxuICovXG5FbGxpcHNlLnByb3RvdHlwZS5jb250YWlucyA9IGZ1bmN0aW9uICh4LCB5KVxue1xuICAgIGlmICh0aGlzLndpZHRoIDw9IDAgfHwgdGhpcy5oZWlnaHQgPD0gMClcbiAgICB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICAvL25vcm1hbGl6ZSB0aGUgY29vcmRzIHRvIGFuIGVsbGlwc2Ugd2l0aCBjZW50ZXIgMCwwXG4gICAgdmFyIG5vcm14ID0gKCh4IC0gdGhpcy54KSAvIHRoaXMud2lkdGgpLFxuICAgICAgICBub3JteSA9ICgoeSAtIHRoaXMueSkgLyB0aGlzLmhlaWdodCk7XG5cbiAgICBub3JteCAqPSBub3JteDtcbiAgICBub3JteSAqPSBub3JteTtcblxuICAgIHJldHVybiAobm9ybXggKyBub3JteSA8PSAxKTtcbn07XG5cbi8qKlxuICogUmV0dXJucyB0aGUgZnJhbWluZyByZWN0YW5nbGUgb2YgdGhlIGVsbGlwc2UgYXMgYSBSZWN0YW5nbGUgb2JqZWN0XG4gKlxuICogQHJldHVybiB7UElYSS5SZWN0YW5nbGV9IHRoZSBmcmFtaW5nIHJlY3RhbmdsZVxuICovXG5FbGxpcHNlLnByb3RvdHlwZS5nZXRCb3VuZHMgPSBmdW5jdGlvbiAoKVxue1xuICAgIHJldHVybiBuZXcgUmVjdGFuZ2xlKHRoaXMueCAtIHRoaXMud2lkdGgsIHRoaXMueSAtIHRoaXMuaGVpZ2h0LCB0aGlzLndpZHRoLCB0aGlzLmhlaWdodCk7XG59O1xuIiwidmFyIFBvaW50ID0gcmVxdWlyZSgnLi4vUG9pbnQnKSxcbiAgICBDT05TVCA9IHJlcXVpcmUoJy4uLy4uL2NvbnN0Jyk7XG5cbi8qKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIHBvaW50cyB7UElYSS5Qb2ludFtdfG51bWJlcltdfC4uLlBJWEkuUG9pbnR8Li4ubnVtYmVyfSBUaGlzIGNhbiBiZSBhbiBhcnJheSBvZiBQb2ludHMgdGhhdCBmb3JtIHRoZSBwb2x5Z29uLFxuICogICAgICBhIGZsYXQgYXJyYXkgb2YgbnVtYmVycyB0aGF0IHdpbGwgYmUgaW50ZXJwcmV0ZWQgYXMgW3gseSwgeCx5LCAuLi5dLCBvciB0aGUgYXJndW1lbnRzIHBhc3NlZCBjYW4gYmVcbiAqICAgICAgYWxsIHRoZSBwb2ludHMgb2YgdGhlIHBvbHlnb24gZS5nLiBgbmV3IFBJWEkuUG9seWdvbihuZXcgUElYSS5Qb2ludCgpLCBuZXcgUElYSS5Qb2ludCgpLCAuLi4pYCwgb3IgdGhlXG4gKiAgICAgIGFyZ3VtZW50cyBwYXNzZWQgY2FuIGJlIGZsYXQgeCx5IHZhbHVlcyBlLmcuIGBuZXcgUG9seWdvbih4LHksIHgseSwgeCx5LCAuLi4pYCB3aGVyZSBgeGAgYW5kIGB5YCBhcmVcbiAqICAgICAgTnVtYmVycy5cbiAqL1xuZnVuY3Rpb24gUG9seWdvbihwb2ludHNfKVxue1xuICAgIC8vIHByZXZlbnRzIGFuIGFyZ3VtZW50IGFzc2lnbm1lbnQgZGVvcHRcbiAgICAvLyBzZWUgc2VjdGlvbiAzLjE6IGh0dHBzOi8vZ2l0aHViLmNvbS9wZXRrYWFudG9ub3YvYmx1ZWJpcmQvd2lraS9PcHRpbWl6YXRpb24ta2lsbGVycyMzLW1hbmFnaW5nLWFyZ3VtZW50c1xuICAgIHZhciBwb2ludHMgPSBwb2ludHNfO1xuXG4gICAgLy9pZiBwb2ludHMgaXNuJ3QgYW4gYXJyYXksIHVzZSBhcmd1bWVudHMgYXMgdGhlIGFycmF5XG4gICAgaWYgKCFBcnJheS5pc0FycmF5KHBvaW50cykpXG4gICAge1xuICAgICAgICAvLyBwcmV2ZW50cyBhbiBhcmd1bWVudCBsZWFrIGRlb3B0XG4gICAgICAgIC8vIHNlZSBzZWN0aW9uIDMuMjogaHR0cHM6Ly9naXRodWIuY29tL3BldGthYW50b25vdi9ibHVlYmlyZC93aWtpL09wdGltaXphdGlvbi1raWxsZXJzIzMtbWFuYWdpbmctYXJndW1lbnRzXG4gICAgICAgIHBvaW50cyA9IG5ldyBBcnJheShhcmd1bWVudHMubGVuZ3RoKTtcblxuICAgICAgICBmb3IgKHZhciBhID0gMDsgYSA8IHBvaW50cy5sZW5ndGg7ICsrYSkge1xuICAgICAgICAgICAgcG9pbnRzW2FdID0gYXJndW1lbnRzW2FdO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gaWYgdGhpcyBpcyBhbiBhcnJheSBvZiBwb2ludHMsIGNvbnZlcnQgaXQgdG8gYSBmbGF0IGFycmF5IG9mIG51bWJlcnNcbiAgICBpZiAocG9pbnRzWzBdIGluc3RhbmNlb2YgUG9pbnQpXG4gICAge1xuICAgICAgICB2YXIgcCA9IFtdO1xuICAgICAgICBmb3IgKHZhciBpID0gMCwgaWwgPSBwb2ludHMubGVuZ3RoOyBpIDwgaWw7IGkrKylcbiAgICAgICAge1xuICAgICAgICAgICAgcC5wdXNoKHBvaW50c1tpXS54LCBwb2ludHNbaV0ueSk7XG4gICAgICAgIH1cblxuICAgICAgICBwb2ludHMgPSBwO1xuICAgIH1cblxuICAgIHRoaXMuY2xvc2VkID0gdHJ1ZTtcblxuICAgIC8qKlxuICAgICAqIEFuIGFycmF5IG9mIHRoZSBwb2ludHMgb2YgdGhpcyBwb2x5Z29uXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJbXX1cbiAgICAgKi9cbiAgICB0aGlzLnBvaW50cyA9IHBvaW50cztcblxuICAgIC8qKlxuICAgICAqIFRoZSB0eXBlIG9mIHRoZSBvYmplY3QsIG1haW5seSB1c2VkIHRvIGF2b2lkIGBpbnN0YW5jZW9mYCBjaGVja3NcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLnR5cGUgPSBDT05TVC5TSEFQRVMuUE9MWTtcbn1cblxuUG9seWdvbi5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBQb2x5Z29uO1xubW9kdWxlLmV4cG9ydHMgPSBQb2x5Z29uO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBjbG9uZSBvZiB0aGlzIHBvbHlnb25cbiAqXG4gKiBAcmV0dXJuIHtQSVhJLlBvbHlnb259IGEgY29weSBvZiB0aGUgcG9seWdvblxuICovXG5Qb2x5Z29uLnByb3RvdHlwZS5jbG9uZSA9IGZ1bmN0aW9uICgpXG57XG4gICAgcmV0dXJuIG5ldyBQb2x5Z29uKHRoaXMucG9pbnRzLnNsaWNlKCkpO1xufTtcblxuLyoqXG4gKiBDaGVja3Mgd2hldGhlciB0aGUgeCBhbmQgeSBjb29yZGluYXRlcyBwYXNzZWQgdG8gdGhpcyBmdW5jdGlvbiBhcmUgY29udGFpbmVkIHdpdGhpbiB0aGlzIHBvbHlnb25cbiAqXG4gKiBAcGFyYW0geCB7bnVtYmVyfSBUaGUgWCBjb29yZGluYXRlIG9mIHRoZSBwb2ludCB0byB0ZXN0XG4gKiBAcGFyYW0geSB7bnVtYmVyfSBUaGUgWSBjb29yZGluYXRlIG9mIHRoZSBwb2ludCB0byB0ZXN0XG4gKiBAcmV0dXJuIHtib29sZWFufSBXaGV0aGVyIHRoZSB4L3kgY29vcmRpbmF0ZXMgYXJlIHdpdGhpbiB0aGlzIHBvbHlnb25cbiAqL1xuUG9seWdvbi5wcm90b3R5cGUuY29udGFpbnMgPSBmdW5jdGlvbiAoeCwgeSlcbntcbiAgICB2YXIgaW5zaWRlID0gZmFsc2U7XG5cbiAgICAvLyB1c2Ugc29tZSByYXljYXN0aW5nIHRvIHRlc3QgaGl0c1xuICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9zdWJzdGFjay9wb2ludC1pbi1wb2x5Z29uL2Jsb2IvbWFzdGVyL2luZGV4LmpzXG4gICAgdmFyIGxlbmd0aCA9IHRoaXMucG9pbnRzLmxlbmd0aCAvIDI7XG5cbiAgICBmb3IgKHZhciBpID0gMCwgaiA9IGxlbmd0aCAtIDE7IGkgPCBsZW5ndGg7IGogPSBpKyspXG4gICAge1xuICAgICAgICB2YXIgeGkgPSB0aGlzLnBvaW50c1tpICogMl0sIHlpID0gdGhpcy5wb2ludHNbaSAqIDIgKyAxXSxcbiAgICAgICAgICAgIHhqID0gdGhpcy5wb2ludHNbaiAqIDJdLCB5aiA9IHRoaXMucG9pbnRzW2ogKiAyICsgMV0sXG4gICAgICAgICAgICBpbnRlcnNlY3QgPSAoKHlpID4geSkgIT09ICh5aiA+IHkpKSAmJiAoeCA8ICh4aiAtIHhpKSAqICh5IC0geWkpIC8gKHlqIC0geWkpICsgeGkpO1xuXG4gICAgICAgIGlmIChpbnRlcnNlY3QpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGluc2lkZSA9ICFpbnNpZGU7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gaW5zaWRlO1xufTtcbiIsInZhciBDT05TVCA9IHJlcXVpcmUoJy4uLy4uL2NvbnN0Jyk7XG5cbi8qKlxuICogdGhlIFJlY3RhbmdsZSBvYmplY3QgaXMgYW4gYXJlYSBkZWZpbmVkIGJ5IGl0cyBwb3NpdGlvbiwgYXMgaW5kaWNhdGVkIGJ5IGl0cyB0b3AtbGVmdCBjb3JuZXIgcG9pbnQgKHgsIHkpIGFuZCBieSBpdHMgd2lkdGggYW5kIGl0cyBoZWlnaHQuXG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIHgge251bWJlcn0gVGhlIFggY29vcmRpbmF0ZSBvZiB0aGUgdXBwZXItbGVmdCBjb3JuZXIgb2YgdGhlIHJlY3RhbmdsZVxuICogQHBhcmFtIHkge251bWJlcn0gVGhlIFkgY29vcmRpbmF0ZSBvZiB0aGUgdXBwZXItbGVmdCBjb3JuZXIgb2YgdGhlIHJlY3RhbmdsZVxuICogQHBhcmFtIHdpZHRoIHtudW1iZXJ9IFRoZSBvdmVyYWxsIHdpZHRoIG9mIHRoaXMgcmVjdGFuZ2xlXG4gKiBAcGFyYW0gaGVpZ2h0IHtudW1iZXJ9IFRoZSBvdmVyYWxsIGhlaWdodCBvZiB0aGlzIHJlY3RhbmdsZVxuICovXG5mdW5jdGlvbiBSZWN0YW5nbGUoeCwgeSwgd2lkdGgsIGhlaWdodClcbntcbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMFxuICAgICAqL1xuICAgIHRoaXMueCA9IHggfHwgMDtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAwXG4gICAgICovXG4gICAgdGhpcy55ID0geSB8fCAwO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDBcbiAgICAgKi9cbiAgICB0aGlzLndpZHRoID0gd2lkdGggfHwgMDtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAwXG4gICAgICovXG4gICAgdGhpcy5oZWlnaHQgPSBoZWlnaHQgfHwgMDtcblxuICAgIC8qKlxuICAgICAqIFRoZSB0eXBlIG9mIHRoZSBvYmplY3QsIG1haW5seSB1c2VkIHRvIGF2b2lkIGBpbnN0YW5jZW9mYCBjaGVja3NcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLnR5cGUgPSBDT05TVC5TSEFQRVMuUkVDVDtcbn1cblxuUmVjdGFuZ2xlLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFJlY3RhbmdsZTtcbm1vZHVsZS5leHBvcnRzID0gUmVjdGFuZ2xlO1xuXG4vKipcbiAqIEEgY29uc3RhbnQgZW1wdHkgcmVjdGFuZ2xlLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBjb25zdGFudFxuICovXG5SZWN0YW5nbGUuRU1QVFkgPSBuZXcgUmVjdGFuZ2xlKDAsIDAsIDAsIDApO1xuXG5cbi8qKlxuICogQ3JlYXRlcyBhIGNsb25lIG9mIHRoaXMgUmVjdGFuZ2xlXG4gKlxuICogQHJldHVybiB7UElYSS5SZWN0YW5nbGV9IGEgY29weSBvZiB0aGUgcmVjdGFuZ2xlXG4gKi9cblJlY3RhbmdsZS5wcm90b3R5cGUuY2xvbmUgPSBmdW5jdGlvbiAoKVxue1xuICAgIHJldHVybiBuZXcgUmVjdGFuZ2xlKHRoaXMueCwgdGhpcy55LCB0aGlzLndpZHRoLCB0aGlzLmhlaWdodCk7XG59O1xuXG4vKipcbiAqIENoZWNrcyB3aGV0aGVyIHRoZSB4IGFuZCB5IGNvb3JkaW5hdGVzIGdpdmVuIGFyZSBjb250YWluZWQgd2l0aGluIHRoaXMgUmVjdGFuZ2xlXG4gKlxuICogQHBhcmFtIHgge251bWJlcn0gVGhlIFggY29vcmRpbmF0ZSBvZiB0aGUgcG9pbnQgdG8gdGVzdFxuICogQHBhcmFtIHkge251bWJlcn0gVGhlIFkgY29vcmRpbmF0ZSBvZiB0aGUgcG9pbnQgdG8gdGVzdFxuICogQHJldHVybiB7Ym9vbGVhbn0gV2hldGhlciB0aGUgeC95IGNvb3JkaW5hdGVzIGFyZSB3aXRoaW4gdGhpcyBSZWN0YW5nbGVcbiAqL1xuUmVjdGFuZ2xlLnByb3RvdHlwZS5jb250YWlucyA9IGZ1bmN0aW9uICh4LCB5KVxue1xuICAgIGlmICh0aGlzLndpZHRoIDw9IDAgfHwgdGhpcy5oZWlnaHQgPD0gMClcbiAgICB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBpZiAoeCA+PSB0aGlzLnggJiYgeCA8IHRoaXMueCArIHRoaXMud2lkdGgpXG4gICAge1xuICAgICAgICBpZiAoeSA+PSB0aGlzLnkgJiYgeSA8IHRoaXMueSArIHRoaXMuaGVpZ2h0KVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBmYWxzZTtcbn07XG4iLCJ2YXIgQ09OU1QgPSByZXF1aXJlKCcuLi8uLi9jb25zdCcpO1xuXG4vKipcbiAqIFRoZSBSb3VuZGVkIFJlY3RhbmdsZSBvYmplY3QgaXMgYW4gYXJlYSB0aGF0IGhhcyBuaWNlIHJvdW5kZWQgY29ybmVycywgYXMgaW5kaWNhdGVkIGJ5IGl0cyB0b3AtbGVmdCBjb3JuZXIgcG9pbnQgKHgsIHkpIGFuZCBieSBpdHMgd2lkdGggYW5kIGl0cyBoZWlnaHQgYW5kIGl0cyByYWRpdXMuXG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIHgge251bWJlcn0gVGhlIFggY29vcmRpbmF0ZSBvZiB0aGUgdXBwZXItbGVmdCBjb3JuZXIgb2YgdGhlIHJvdW5kZWQgcmVjdGFuZ2xlXG4gKiBAcGFyYW0geSB7bnVtYmVyfSBUaGUgWSBjb29yZGluYXRlIG9mIHRoZSB1cHBlci1sZWZ0IGNvcm5lciBvZiB0aGUgcm91bmRlZCByZWN0YW5nbGVcbiAqIEBwYXJhbSB3aWR0aCB7bnVtYmVyfSBUaGUgb3ZlcmFsbCB3aWR0aCBvZiB0aGlzIHJvdW5kZWQgcmVjdGFuZ2xlXG4gKiBAcGFyYW0gaGVpZ2h0IHtudW1iZXJ9IFRoZSBvdmVyYWxsIGhlaWdodCBvZiB0aGlzIHJvdW5kZWQgcmVjdGFuZ2xlXG4gKiBAcGFyYW0gcmFkaXVzIHtudW1iZXJ9IENvbnRyb2xzIHRoZSByYWRpdXMgb2YgdGhlIHJvdW5kZWQgY29ybmVyc1xuICovXG5mdW5jdGlvbiBSb3VuZGVkUmVjdGFuZ2xlKHgsIHksIHdpZHRoLCBoZWlnaHQsIHJhZGl1cylcbntcbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMFxuICAgICAqL1xuICAgIHRoaXMueCA9IHggfHwgMDtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAwXG4gICAgICovXG4gICAgdGhpcy55ID0geSB8fCAwO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDBcbiAgICAgKi9cbiAgICB0aGlzLndpZHRoID0gd2lkdGggfHwgMDtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAwXG4gICAgICovXG4gICAgdGhpcy5oZWlnaHQgPSBoZWlnaHQgfHwgMDtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAyMFxuICAgICAqL1xuICAgIHRoaXMucmFkaXVzID0gcmFkaXVzIHx8IDIwO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHR5cGUgb2YgdGhlIG9iamVjdCwgbWFpbmx5IHVzZWQgdG8gYXZvaWQgYGluc3RhbmNlb2ZgIGNoZWNrc1xuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMudHlwZSA9IENPTlNULlNIQVBFUy5SUkVDO1xufVxuXG5Sb3VuZGVkUmVjdGFuZ2xlLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFJvdW5kZWRSZWN0YW5nbGU7XG5tb2R1bGUuZXhwb3J0cyA9IFJvdW5kZWRSZWN0YW5nbGU7XG5cbi8qKlxuICogQ3JlYXRlcyBhIGNsb25lIG9mIHRoaXMgUm91bmRlZCBSZWN0YW5nbGVcbiAqXG4gKiBAcmV0dXJuIHtQSVhJLlJvdW5kZWRSZWN0YW5nbGV9IGEgY29weSBvZiB0aGUgcm91bmRlZCByZWN0YW5nbGVcbiAqL1xuUm91bmRlZFJlY3RhbmdsZS5wcm90b3R5cGUuY2xvbmUgPSBmdW5jdGlvbiAoKVxue1xuICAgIHJldHVybiBuZXcgUm91bmRlZFJlY3RhbmdsZSh0aGlzLngsIHRoaXMueSwgdGhpcy53aWR0aCwgdGhpcy5oZWlnaHQsIHRoaXMucmFkaXVzKTtcbn07XG5cbi8qKlxuICogQ2hlY2tzIHdoZXRoZXIgdGhlIHggYW5kIHkgY29vcmRpbmF0ZXMgZ2l2ZW4gYXJlIGNvbnRhaW5lZCB3aXRoaW4gdGhpcyBSb3VuZGVkIFJlY3RhbmdsZVxuICpcbiAqIEBwYXJhbSB4IHtudW1iZXJ9IFRoZSBYIGNvb3JkaW5hdGUgb2YgdGhlIHBvaW50IHRvIHRlc3RcbiAqIEBwYXJhbSB5IHtudW1iZXJ9IFRoZSBZIGNvb3JkaW5hdGUgb2YgdGhlIHBvaW50IHRvIHRlc3RcbiAqIEByZXR1cm4ge2Jvb2xlYW59IFdoZXRoZXIgdGhlIHgveSBjb29yZGluYXRlcyBhcmUgd2l0aGluIHRoaXMgUm91bmRlZCBSZWN0YW5nbGVcbiAqL1xuUm91bmRlZFJlY3RhbmdsZS5wcm90b3R5cGUuY29udGFpbnMgPSBmdW5jdGlvbiAoeCwgeSlcbntcbiAgICBpZiAodGhpcy53aWR0aCA8PSAwIHx8IHRoaXMuaGVpZ2h0IDw9IDApXG4gICAge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgaWYgKHggPj0gdGhpcy54ICYmIHggPD0gdGhpcy54ICsgdGhpcy53aWR0aClcbiAgICB7XG4gICAgICAgIGlmICh5ID49IHRoaXMueSAmJiB5IDw9IHRoaXMueSArIHRoaXMuaGVpZ2h0KVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBmYWxzZTtcbn07XG4iLCJ2YXIgQ29udGFpbmVyID0gcmVxdWlyZSgnLi4vZGlzcGxheS9Db250YWluZXInKSxcbiAgICBDT05TVCA9IHJlcXVpcmUoJy4uL2NvbnN0Jyk7XG5cbi8qKlxuICogVGhlIFBhcnRpY2xlQ29udGFpbmVyIGNsYXNzIGlzIGEgcmVhbGx5IGZhc3QgdmVyc2lvbiBvZiB0aGUgQ29udGFpbmVyIGJ1aWx0IHNvbGVseSBmb3Igc3BlZWQsXG4gKiBzbyB1c2Ugd2hlbiB5b3UgbmVlZCBhIGxvdCBvZiBzcHJpdGVzIG9yIHBhcnRpY2xlcy4gVGhlIHRyYWRlb2ZmIG9mIHRoZSBQYXJ0aWNsZUNvbnRhaW5lciBpcyB0aGF0IGFkdmFuY2VkXG4gKiBmdW5jdGlvbmFsaXR5IHdpbGwgbm90IHdvcmsuIFBhcnRpY2xlQ29udGFpbmVyIGltcGxlbWVudHMgb25seSB0aGUgYmFzaWMgb2JqZWN0IHRyYW5zZm9ybSAocG9zaXRpb24sIHNjYWxlLCByb3RhdGlvbikuXG4gKiBBbnkgb3RoZXIgZnVuY3Rpb25hbGl0eSBsaWtlIHRpbnRpbmcsIG1hc2tpbmcsIGV0YyB3aWxsIG5vdCB3b3JrIG9uIHNwcml0ZXMgaW4gdGhpcyBiYXRjaC5cbiAqXG4gKiBJdCdzIGV4dHJlbWVseSBlYXN5IHRvIHVzZSA6XG4gKlxuICogYGBganNcbiAqIHZhciBjb250YWluZXIgPSBuZXcgUGFydGljbGVDb250YWluZXIoKTtcbiAqXG4gKiBmb3IgKHZhciBpID0gMDsgaSA8IDEwMDsgKytpKVxuICoge1xuICogICAgIHZhciBzcHJpdGUgPSBuZXcgUElYSS5TcHJpdGUuZnJvbUltYWdlKFwibXlJbWFnZS5wbmdcIik7XG4gKiAgICAgY29udGFpbmVyLmFkZENoaWxkKHNwcml0ZSk7XG4gKiB9XG4gKiBgYGBcbiAqXG4gKiBBbmQgaGVyZSB5b3UgaGF2ZSBhIGh1bmRyZWQgc3ByaXRlcyB0aGF0IHdpbGwgYmUgcmVuZGVyZXIgYXQgdGhlIHNwZWVkIG9mIGxpZ2h0LlxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5Db250YWluZXJcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gW21heFNpemU9MTUwMDBdIHtudW1iZXJ9IFRoZSBtYXhpbXVtIG51bWJlciBvZiBwYXJ0aWNsZXMgdGhhdCBjYW4gYmUgcmVuZGVyZXIgYnkgdGhlIGNvbnRhaW5lci5cbiAqIEBwYXJhbSBbcHJvcGVydGllc10ge29iamVjdH0gVGhlIHByb3BlcnRpZXMgb2YgY2hpbGRyZW4gdGhhdCBzaG91bGQgYmUgdXBsb2FkZWQgdG8gdGhlIGdwdSBhbmQgYXBwbGllZC5cbiAqIEBwYXJhbSBbcHJvcGVydGllcy5zY2FsZT1mYWxzZV0ge2Jvb2xlYW59IFdoZW4gdHJ1ZSwgc2NhbGUgYmUgdXBsb2FkZWQgYW5kIGFwcGxpZWQuXG4gKiBAcGFyYW0gW3Byb3BlcnRpZXMucG9zaXRpb249dHJ1ZV0ge2Jvb2xlYW59IFdoZW4gdHJ1ZSwgcG9zaXRpb24gYmUgdXBsb2FkZWQgYW5kIGFwcGxpZWQuXG4gKiBAcGFyYW0gW3Byb3BlcnRpZXMucm90YXRpb249ZmFsc2VdIHtib29sZWFufSBXaGVuIHRydWUsIHJvdGF0aW9uIGJlIHVwbG9hZGVkIGFuZCBhcHBsaWVkLlxuICogQHBhcmFtIFtwcm9wZXJ0aWVzLnV2cz1mYWxzZV0ge2Jvb2xlYW59IFdoZW4gdHJ1ZSwgdXZzIGJlIHVwbG9hZGVkIGFuZCBhcHBsaWVkLlxuICogQHBhcmFtIFtwcm9wZXJ0aWVzLmFscGhhPWZhbHNlXSB7Ym9vbGVhbn0gV2hlbiB0cnVlLCBhbHBoYSBiZSB1cGxvYWRlZCBhbmQgYXBwbGllZC5cbiAqIEBwYXJhbSBbYmF0Y2hTaXplPTE1MDAwXSB7bnVtYmVyfSBOdW1iZXIgb2YgcGFydGljbGVzIHBlciBiYXRjaC5cbiAqL1xuZnVuY3Rpb24gUGFydGljbGVDb250YWluZXIobWF4U2l6ZSwgcHJvcGVydGllcywgYmF0Y2hTaXplKVxue1xuICAgIENvbnRhaW5lci5jYWxsKHRoaXMpO1xuXG4gICAgYmF0Y2hTaXplID0gYmF0Y2hTaXplIHx8IDE1MDAwOyAvL0NPTlNULlNQUklURV9CQVRDSF9TSVpFOyAvLyAyMDAwIGlzIGEgbmljZSBiYWxhbmNlIGJldHdlZW4gbW9iaWxlIC8gZGVza3RvcFxuICAgIG1heFNpemUgPSBtYXhTaXplIHx8IDE1MDAwO1xuXG4gICAgLy8gTWFraW5nIHN1cmUgdGhlIGJhdGNoIHNpemUgaXMgdmFsaWRcbiAgICAvLyA2NTUzNSBpcyBtYXggdmVydGV4IGluZGV4IGluIHRoZSBpbmRleCBidWZmZXIgKHNlZSBQYXJ0aWNsZVJlbmRlcmVyKVxuICAgIC8vIHNvIG1heCBudW1iZXIgb2YgcGFydGljbGVzIGlzIDY1NTM2IC8gNCA9IDE2Mzg0XG4gICAgdmFyIG1heEJhdGNoU2l6ZSA9IDE2Mzg0O1xuICAgIGlmIChiYXRjaFNpemUgPiBtYXhCYXRjaFNpemUpIHtcbiAgICAgICAgYmF0Y2hTaXplID0gbWF4QmF0Y2hTaXplO1xuICAgIH1cblxuICAgIGlmIChiYXRjaFNpemUgPiBtYXhTaXplKSB7XG4gICAgICAgIGJhdGNoU2l6ZSA9IG1heFNpemU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2V0IHByb3BlcnRpZXMgdG8gYmUgZHluYW1pYyAodHJ1ZSkgLyBzdGF0aWMgKGZhbHNlKVxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbltdfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fcHJvcGVydGllcyA9IFtmYWxzZSwgdHJ1ZSwgZmFsc2UsIGZhbHNlLCBmYWxzZV07XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9tYXhTaXplID0gbWF4U2l6ZTtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX2JhdGNoU2l6ZSA9IGJhdGNoU2l6ZTtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge1dlYkdMQnVmZmVyfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fYnVmZmVycyA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9idWZmZXJUb1VwZGF0ZSA9IDA7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqXG4gICAgICovXG4gICAgdGhpcy5pbnRlcmFjdGl2ZUNoaWxkcmVuID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYmxlbmQgbW9kZSB0byBiZSBhcHBsaWVkIHRvIHRoZSBzcHJpdGUuIEFwcGx5IGEgdmFsdWUgb2YgYFBJWEkuQkxFTkRfTU9ERVMuTk9STUFMYCB0byByZXNldCB0aGUgYmxlbmQgbW9kZS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCBQSVhJLkJMRU5EX01PREVTLk5PUk1BTFxuICAgICAqIEBzZWUgUElYSS5CTEVORF9NT0RFU1xuICAgICAqL1xuICAgIHRoaXMuYmxlbmRNb2RlID0gQ09OU1QuQkxFTkRfTU9ERVMuTk9STUFMO1xuXG4gICAgLyoqXG4gICAgICogVXNlZCBmb3IgY2FudmFzIHJlbmRlcmVyaW5nLiBJZiB0cnVlIHRoZW4gdGhlIGVsZW1lbnRzIHdpbGwgYmUgcG9zaXRpb25lZCBhdCB0aGUgbmVhcmVzdCBwaXhlbC4gVGhpcyBwcm92aWRlcyBhIG5pY2Ugc3BlZWQgYm9vc3QuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqIEBkZWZhdWx0IHRydWU7XG4gICAgICovXG4gICAgdGhpcy5yb3VuZFBpeGVscyA9IHRydWU7XG5cbiAgICB0aGlzLnNldFByb3BlcnRpZXMocHJvcGVydGllcyk7XG59XG5cblBhcnRpY2xlQ29udGFpbmVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoQ29udGFpbmVyLnByb3RvdHlwZSk7XG5QYXJ0aWNsZUNvbnRhaW5lci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBQYXJ0aWNsZUNvbnRhaW5lcjtcbm1vZHVsZS5leHBvcnRzID0gUGFydGljbGVDb250YWluZXI7XG5cbi8qKlxuICogU2V0cyB0aGUgcHJpdmF0ZSBwcm9wZXJ0aWVzIGFycmF5IHRvIGR5bmFtaWMgLyBzdGF0aWMgYmFzZWQgb24gdGhlIHBhc3NlZCBwcm9wZXJ0aWVzIG9iamVjdFxuICpcbiAqIEBwYXJhbSBwcm9wZXJ0aWVzIHtvYmplY3R9IFRoZSBwcm9wZXJ0aWVzIHRvIGJlIHVwbG9hZGVkXG4gKi9cblBhcnRpY2xlQ29udGFpbmVyLnByb3RvdHlwZS5zZXRQcm9wZXJ0aWVzID0gZnVuY3Rpb24ocHJvcGVydGllcylcbntcbiAgICBpZiAoIHByb3BlcnRpZXMgKSB7XG4gICAgICAgIHRoaXMuX3Byb3BlcnRpZXNbMF0gPSAnc2NhbGUnIGluIHByb3BlcnRpZXMgPyAhIXByb3BlcnRpZXMuc2NhbGUgOiB0aGlzLl9wcm9wZXJ0aWVzWzBdO1xuICAgICAgICB0aGlzLl9wcm9wZXJ0aWVzWzFdID0gJ3Bvc2l0aW9uJyBpbiBwcm9wZXJ0aWVzID8gISFwcm9wZXJ0aWVzLnBvc2l0aW9uIDogdGhpcy5fcHJvcGVydGllc1sxXTtcbiAgICAgICAgdGhpcy5fcHJvcGVydGllc1syXSA9ICdyb3RhdGlvbicgaW4gcHJvcGVydGllcyA/ICEhcHJvcGVydGllcy5yb3RhdGlvbiA6IHRoaXMuX3Byb3BlcnRpZXNbMl07XG4gICAgICAgIHRoaXMuX3Byb3BlcnRpZXNbM10gPSAndXZzJyBpbiBwcm9wZXJ0aWVzID8gISFwcm9wZXJ0aWVzLnV2cyA6IHRoaXMuX3Byb3BlcnRpZXNbM107XG4gICAgICAgIHRoaXMuX3Byb3BlcnRpZXNbNF0gPSAnYWxwaGEnIGluIHByb3BlcnRpZXMgPyAhIXByb3BlcnRpZXMuYWxwaGEgOiB0aGlzLl9wcm9wZXJ0aWVzWzRdO1xuICAgIH1cbn07XG5cbi8qKlxuICogVXBkYXRlcyB0aGUgb2JqZWN0IHRyYW5zZm9ybSBmb3IgcmVuZGVyaW5nXG4gKlxuICogQHByaXZhdGVcbiAqL1xuUGFydGljbGVDb250YWluZXIucHJvdG90eXBlLnVwZGF0ZVRyYW5zZm9ybSA9IGZ1bmN0aW9uICgpXG57XG5cbiAgICAvLyBUT0RPIGRvbid0IG5lZWQgdG8hXG4gICAgdGhpcy5kaXNwbGF5T2JqZWN0VXBkYXRlVHJhbnNmb3JtKCk7XG4gICAgLy8gIFBJWEkuQ29udGFpbmVyLnByb3RvdHlwZS51cGRhdGVUcmFuc2Zvcm0uY2FsbCggdGhpcyApO1xufTtcblxuLyoqXG4gKiBSZW5kZXJzIHRoZSBjb250YWluZXIgdXNpbmcgdGhlIFdlYkdMIHJlbmRlcmVyXG4gKlxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLldlYkdMUmVuZGVyZXJ9IFRoZSB3ZWJnbCByZW5kZXJlclxuICogQHByaXZhdGVcbiAqL1xuUGFydGljbGVDb250YWluZXIucHJvdG90eXBlLnJlbmRlcldlYkdMID0gZnVuY3Rpb24gKHJlbmRlcmVyKVxue1xuICAgIGlmICghdGhpcy52aXNpYmxlIHx8IHRoaXMud29ybGRBbHBoYSA8PSAwIHx8ICF0aGlzLmNoaWxkcmVuLmxlbmd0aCB8fCAhdGhpcy5yZW5kZXJhYmxlKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHJlbmRlcmVyLnNldE9iamVjdFJlbmRlcmVyKCByZW5kZXJlci5wbHVnaW5zLnBhcnRpY2xlICk7XG4gICAgcmVuZGVyZXIucGx1Z2lucy5wYXJ0aWNsZS5yZW5kZXIoIHRoaXMgKTtcbn07XG5cbi8qKlxuICogU2V0IHRoZSBmbGFnIHRoYXQgc3RhdGljIGRhdGEgc2hvdWxkIGJlIHVwZGF0ZWQgdG8gdHJ1ZVxuICpcbiAqIEBwcml2YXRlXG4gKi9cblBhcnRpY2xlQ29udGFpbmVyLnByb3RvdHlwZS5vbkNoaWxkcmVuQ2hhbmdlID0gZnVuY3Rpb24gKHNtYWxsZXN0Q2hpbGRJbmRleClcbntcbiAgICB2YXIgYnVmZmVySW5kZXggPSBNYXRoLmZsb29yKHNtYWxsZXN0Q2hpbGRJbmRleCAvIHRoaXMuX2JhdGNoU2l6ZSk7XG4gICAgaWYgKGJ1ZmZlckluZGV4IDwgdGhpcy5fYnVmZmVyVG9VcGRhdGUpIHtcbiAgICAgICAgdGhpcy5fYnVmZmVyVG9VcGRhdGUgPSBidWZmZXJJbmRleDtcbiAgICB9XG59O1xuXG4vKipcbiAqIFJlbmRlcnMgdGhlIG9iamVjdCB1c2luZyB0aGUgQ2FudmFzIHJlbmRlcmVyXG4gKlxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLkNhbnZhc1JlbmRlcmVyfSBUaGUgY2FudmFzIHJlbmRlcmVyXG4gKiBAcHJpdmF0ZVxuICovXG5QYXJ0aWNsZUNvbnRhaW5lci5wcm90b3R5cGUucmVuZGVyQ2FudmFzID0gZnVuY3Rpb24gKHJlbmRlcmVyKVxue1xuICAgIGlmICghdGhpcy52aXNpYmxlIHx8IHRoaXMud29ybGRBbHBoYSA8PSAwIHx8ICF0aGlzLmNoaWxkcmVuLmxlbmd0aCB8fCAhdGhpcy5yZW5kZXJhYmxlKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHZhciBjb250ZXh0ID0gcmVuZGVyZXIuY29udGV4dDtcbiAgICB2YXIgdHJhbnNmb3JtID0gdGhpcy53b3JsZFRyYW5zZm9ybTtcbiAgICB2YXIgaXNSb3RhdGVkID0gdHJ1ZTtcblxuICAgIHZhciBwb3NpdGlvblggPSAwO1xuICAgIHZhciBwb3NpdGlvblkgPSAwO1xuXG4gICAgdmFyIGZpbmFsV2lkdGggPSAwO1xuICAgIHZhciBmaW5hbEhlaWdodCA9IDA7XG5cbiAgICB2YXIgY29tcG9zaXRlT3BlcmF0aW9uID0gcmVuZGVyZXIuYmxlbmRNb2Rlc1t0aGlzLmJsZW5kTW9kZV07XG4gICAgaWYgKGNvbXBvc2l0ZU9wZXJhdGlvbiAhPT0gY29udGV4dC5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb24pXG4gICAge1xuICAgICAgICBjb250ZXh0Lmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbiA9IGNvbXBvc2l0ZU9wZXJhdGlvbjtcbiAgICB9XG5cbiAgICBjb250ZXh0Lmdsb2JhbEFscGhhID0gdGhpcy53b3JsZEFscGhhO1xuXG4gICAgdGhpcy5kaXNwbGF5T2JqZWN0VXBkYXRlVHJhbnNmb3JtKCk7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuY2hpbGRyZW4ubGVuZ3RoOyArK2kpXG4gICAge1xuICAgICAgICB2YXIgY2hpbGQgPSB0aGlzLmNoaWxkcmVuW2ldO1xuXG4gICAgICAgIGlmICghY2hpbGQudmlzaWJsZSlcbiAgICAgICAge1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgZnJhbWUgPSBjaGlsZC50ZXh0dXJlLmZyYW1lO1xuXG4gICAgICAgIGNvbnRleHQuZ2xvYmFsQWxwaGEgPSB0aGlzLndvcmxkQWxwaGEgKiBjaGlsZC5hbHBoYTtcblxuICAgICAgICBpZiAoY2hpbGQucm90YXRpb24gJSAoTWF0aC5QSSAqIDIpID09PSAwKVxuICAgICAgICB7XG4gICAgICAgICAgICAvLyB0aGlzIGlzIHRoZSBmYXN0ZXN0ICB3YXkgdG8gb3B0aW1pc2UhIC0gaWYgcm90YXRpb24gaXMgMCB0aGVuIHdlIGNhbiBhdm9pZCBhbnkga2luZCBvZiBzZXRUcmFuc2Zvcm0gY2FsbFxuICAgICAgICAgICAgaWYgKGlzUm90YXRlZClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb250ZXh0LnNldFRyYW5zZm9ybShcbiAgICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtLmEsXG4gICAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybS5iLFxuICAgICAgICAgICAgICAgICAgICB0cmFuc2Zvcm0uYyxcbiAgICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtLmQsXG4gICAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybS50eCxcbiAgICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtLnR5XG4gICAgICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgICAgIGlzUm90YXRlZCA9IGZhbHNlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBwb3NpdGlvblggPSAoKGNoaWxkLmFuY2hvci54KSAqICgtZnJhbWUud2lkdGggKiBjaGlsZC5zY2FsZS54KSArIGNoaWxkLnBvc2l0aW9uLnggICsgMC41KTtcbiAgICAgICAgICAgIHBvc2l0aW9uWSA9ICgoY2hpbGQuYW5jaG9yLnkpICogKC1mcmFtZS5oZWlnaHQgKiBjaGlsZC5zY2FsZS55KSArIGNoaWxkLnBvc2l0aW9uLnkgICsgMC41KTtcblxuICAgICAgICAgICAgZmluYWxXaWR0aCA9IGZyYW1lLndpZHRoICogY2hpbGQuc2NhbGUueDtcbiAgICAgICAgICAgIGZpbmFsSGVpZ2h0ID0gZnJhbWUuaGVpZ2h0ICogY2hpbGQuc2NhbGUueTtcblxuICAgICAgICB9XG4gICAgICAgIGVsc2VcbiAgICAgICAge1xuICAgICAgICAgICAgaWYgKCFpc1JvdGF0ZWQpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgaXNSb3RhdGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY2hpbGQuZGlzcGxheU9iamVjdFVwZGF0ZVRyYW5zZm9ybSgpO1xuXG4gICAgICAgICAgICB2YXIgY2hpbGRUcmFuc2Zvcm0gPSBjaGlsZC53b3JsZFRyYW5zZm9ybTtcblxuICAgICAgICAgICAgaWYgKHJlbmRlcmVyLnJvdW5kUGl4ZWxzKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGNvbnRleHQuc2V0VHJhbnNmb3JtKFxuICAgICAgICAgICAgICAgICAgICBjaGlsZFRyYW5zZm9ybS5hLFxuICAgICAgICAgICAgICAgICAgICBjaGlsZFRyYW5zZm9ybS5iLFxuICAgICAgICAgICAgICAgICAgICBjaGlsZFRyYW5zZm9ybS5jLFxuICAgICAgICAgICAgICAgICAgICBjaGlsZFRyYW5zZm9ybS5kLFxuICAgICAgICAgICAgICAgICAgICBjaGlsZFRyYW5zZm9ybS50eCB8IDAsXG4gICAgICAgICAgICAgICAgICAgIGNoaWxkVHJhbnNmb3JtLnR5IHwgMFxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29udGV4dC5zZXRUcmFuc2Zvcm0oXG4gICAgICAgICAgICAgICAgICAgIGNoaWxkVHJhbnNmb3JtLmEsXG4gICAgICAgICAgICAgICAgICAgIGNoaWxkVHJhbnNmb3JtLmIsXG4gICAgICAgICAgICAgICAgICAgIGNoaWxkVHJhbnNmb3JtLmMsXG4gICAgICAgICAgICAgICAgICAgIGNoaWxkVHJhbnNmb3JtLmQsXG4gICAgICAgICAgICAgICAgICAgIGNoaWxkVHJhbnNmb3JtLnR4LFxuICAgICAgICAgICAgICAgICAgICBjaGlsZFRyYW5zZm9ybS50eVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHBvc2l0aW9uWCA9ICgoY2hpbGQuYW5jaG9yLngpICogKC1mcmFtZS53aWR0aCkgKyAwLjUpO1xuICAgICAgICAgICAgcG9zaXRpb25ZID0gKChjaGlsZC5hbmNob3IueSkgKiAoLWZyYW1lLmhlaWdodCkgKyAwLjUpO1xuXG4gICAgICAgICAgICBmaW5hbFdpZHRoID0gZnJhbWUud2lkdGg7XG4gICAgICAgICAgICBmaW5hbEhlaWdodCA9IGZyYW1lLmhlaWdodDtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnRleHQuZHJhd0ltYWdlKFxuICAgICAgICAgICAgY2hpbGQudGV4dHVyZS5iYXNlVGV4dHVyZS5zb3VyY2UsXG4gICAgICAgICAgICBmcmFtZS54LFxuICAgICAgICAgICAgZnJhbWUueSxcbiAgICAgICAgICAgIGZyYW1lLndpZHRoLFxuICAgICAgICAgICAgZnJhbWUuaGVpZ2h0LFxuICAgICAgICAgICAgcG9zaXRpb25YLFxuICAgICAgICAgICAgcG9zaXRpb25ZLFxuICAgICAgICAgICAgZmluYWxXaWR0aCxcbiAgICAgICAgICAgIGZpbmFsSGVpZ2h0XG4gICAgICAgICk7XG4gICAgfVxufTtcblxuLyoqXG4gKiBEZXN0cm95cyB0aGUgY29udGFpbmVyXG4gKlxuICogQHBhcmFtIFtkZXN0cm95Q2hpbGRyZW49ZmFsc2VdIHtib29sZWFufSBpZiBzZXQgdG8gdHJ1ZSwgYWxsIHRoZSBjaGlsZHJlbiB3aWxsIGhhdmUgdGhlaXIgZGVzdHJveSBtZXRob2QgY2FsbGVkIGFzIHdlbGxcbiAqL1xuUGFydGljbGVDb250YWluZXIucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoKSB7XG4gICAgQ29udGFpbmVyLnByb3RvdHlwZS5kZXN0cm95LmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG5cbiAgICBpZiAodGhpcy5fYnVmZmVycykge1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuX2J1ZmZlcnMubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgICAgIHRoaXMuX2J1ZmZlcnNbaV0uZGVzdHJveSgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5fcHJvcGVydGllcyA9IG51bGw7XG4gICAgdGhpcy5fYnVmZmVycyA9IG51bGw7XG59O1xuIiwiXG4vKipcbiAqIEBhdXRob3IgTWF0IEdyb3Zlc1xuICpcbiAqIEJpZyB0aGFua3MgdG8gdGhlIHZlcnkgY2xldmVyIE1hdHQgRGVzTGF1cmllcnMgPG1hdHRkZXNsPiBodHRwczovL2dpdGh1Yi5jb20vbWF0dGRlc2wvXG4gKiBmb3IgY3JlYXRpbmcgdGhlIG9yaWdpbmFsIHBpeGkgdmVyc2lvbiFcbiAqIEFsc28gYSB0aGFua3MgdG8gaHR0cHM6Ly9naXRodWIuY29tL2JjaGV2YWxpZXIgZm9yIHR3ZWFraW5nIHRoZSB0aW50IGFuZCBhbHBoYSBzbyB0aGF0IHRoZXkgbm93IHNoYXJlIDQgYnl0ZXMgb24gdGhlIHZlcnRleCBidWZmZXJcbiAqXG4gKiBIZWF2aWx5IGluc3BpcmVkIGJ5IExpYkdEWCdzIFBhcnRpY2xlQnVmZmVyOlxuICogaHR0cHM6Ly9naXRodWIuY29tL2xpYmdkeC9saWJnZHgvYmxvYi9tYXN0ZXIvZ2R4L3NyYy9jb20vYmFkbG9naWMvZ2R4L2dyYXBoaWNzL2cyZC9QYXJ0aWNsZUJ1ZmZlci5qYXZhXG4gKi9cblxuLyoqXG4gKiBUaGUgcGFydGljbGUgYnVmZmVyIG1hbmFnZXMgdGhlIHN0YXRpYyBhbmQgZHluYW1pYyBidWZmZXJzIGZvciBhIHBhcnRpY2xlIGNvbnRhaW5lci5cbiAqXG4gKiBAY2xhc3NcbiAqIEBwcml2YXRlXG4gKiBAbWVtYmVyb2YgUElYSVxuICovXG5mdW5jdGlvbiBQYXJ0aWNsZUJ1ZmZlcihnbCwgcHJvcGVydGllcywgZHluYW1pY1Byb3BlcnR5RmxhZ3MsIHNpemUpXG57XG4gICAgLyoqXG4gICAgICogVGhlIGN1cnJlbnQgV2ViR0wgZHJhd2luZyBjb250ZXh0LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7V2ViR0xSZW5kZXJpbmdDb250ZXh0fVxuICAgICAqL1xuICAgIHRoaXMuZ2wgPSBnbDtcblxuICAgIC8qKlxuICAgICAqIFNpemUgb2YgYSBzaW5nbGUgdmVydGV4LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMudmVydFNpemUgPSAyO1xuXG4gICAgLyoqXG4gICAgICogU2l6ZSBvZiBhIHNpbmdsZSB2ZXJ0ZXggaW4gYnl0ZXMuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy52ZXJ0Qnl0ZVNpemUgPSB0aGlzLnZlcnRTaXplICogNDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBudW1iZXIgb2YgcGFydGljbGVzIHRoZSBidWZmZXIgY2FuIGhvbGRcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLnNpemUgPSBzaXplO1xuXG4gICAgLyoqXG4gICAgICogQSBsaXN0IG9mIHRoZSBwcm9wZXJ0aWVzIHRoYXQgYXJlIGR5bmFtaWMuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtvYmplY3RbXX1cbiAgICAgKi9cbiAgICB0aGlzLmR5bmFtaWNQcm9wZXJ0aWVzID0gW107XG5cbiAgICAvKipcbiAgICAgKiBBIGxpc3Qgb2YgdGhlIHByb3BlcnRpZXMgdGhhdCBhcmUgc3RhdGljLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7b2JqZWN0W119XG4gICAgICovXG4gICAgdGhpcy5zdGF0aWNQcm9wZXJ0aWVzID0gW107XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BlcnRpZXMubGVuZ3RoOyBpKyspXG4gICAge1xuICAgICAgICB2YXIgcHJvcGVydHkgPSBwcm9wZXJ0aWVzW2ldO1xuXG4gICAgICAgIGlmKGR5bmFtaWNQcm9wZXJ0eUZsYWdzW2ldKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmR5bmFtaWNQcm9wZXJ0aWVzLnB1c2gocHJvcGVydHkpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2VcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5zdGF0aWNQcm9wZXJ0aWVzLnB1c2gocHJvcGVydHkpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5zdGF0aWNTdHJpZGUgPSAwO1xuICAgIHRoaXMuc3RhdGljQnVmZmVyID0gbnVsbDtcbiAgICB0aGlzLnN0YXRpY0RhdGEgPSBudWxsO1xuXG4gICAgdGhpcy5keW5hbWljU3RyaWRlID0gMDtcbiAgICB0aGlzLmR5bmFtaWNCdWZmZXIgPSBudWxsO1xuICAgIHRoaXMuZHluYW1pY0RhdGEgPSBudWxsO1xuXG4gICAgdGhpcy5pbml0QnVmZmVycygpO1xuXG59XG5cblBhcnRpY2xlQnVmZmVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFBhcnRpY2xlQnVmZmVyO1xubW9kdWxlLmV4cG9ydHMgPSBQYXJ0aWNsZUJ1ZmZlcjtcblxuLyoqXG4gKiBTZXRzIHVwIHRoZSByZW5kZXJlciBjb250ZXh0IGFuZCBuZWNlc3NhcnkgYnVmZmVycy5cbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5QYXJ0aWNsZUJ1ZmZlci5wcm90b3R5cGUuaW5pdEJ1ZmZlcnMgPSBmdW5jdGlvbiAoKVxue1xuICAgIHZhciBnbCA9IHRoaXMuZ2w7XG4gICAgdmFyIGk7XG4gICAgdmFyIHByb3BlcnR5O1xuXG4gICAgdmFyIGR5bmFtaWNPZmZzZXQgPSAwO1xuICAgIHRoaXMuZHluYW1pY1N0cmlkZSA9IDA7XG5cbiAgICBmb3IgKGkgPSAwOyBpIDwgdGhpcy5keW5hbWljUHJvcGVydGllcy5sZW5ndGg7IGkrKylcbiAgICB7XG4gICAgICAgIHByb3BlcnR5ID0gdGhpcy5keW5hbWljUHJvcGVydGllc1tpXTtcblxuICAgICAgICBwcm9wZXJ0eS5vZmZzZXQgPSBkeW5hbWljT2Zmc2V0O1xuICAgICAgICBkeW5hbWljT2Zmc2V0ICs9IHByb3BlcnR5LnNpemU7XG4gICAgICAgIHRoaXMuZHluYW1pY1N0cmlkZSArPSBwcm9wZXJ0eS5zaXplO1xuICAgIH1cblxuICAgIHRoaXMuZHluYW1pY0RhdGEgPSBuZXcgRmxvYXQzMkFycmF5KCB0aGlzLnNpemUgKiB0aGlzLmR5bmFtaWNTdHJpZGUgKiA0KTtcbiAgICB0aGlzLmR5bmFtaWNCdWZmZXIgPSBnbC5jcmVhdGVCdWZmZXIoKTtcblxuICAgIGdsLmJpbmRCdWZmZXIoZ2wuQVJSQVlfQlVGRkVSLCB0aGlzLmR5bmFtaWNCdWZmZXIpO1xuICAgIGdsLmJ1ZmZlckRhdGEoZ2wuQVJSQVlfQlVGRkVSLCB0aGlzLmR5bmFtaWNEYXRhLCBnbC5EWU5BTUlDX0RSQVcpO1xuXG5cbiAgICAvLyBzdGF0aWMgLy9cbiAgICB2YXIgc3RhdGljT2Zmc2V0ID0gMDtcbiAgICB0aGlzLnN0YXRpY1N0cmlkZSA9IDA7XG5cbiAgICBmb3IgKGkgPSAwOyBpIDwgdGhpcy5zdGF0aWNQcm9wZXJ0aWVzLmxlbmd0aDsgaSsrKVxuICAgIHtcbiAgICAgICAgcHJvcGVydHkgPSB0aGlzLnN0YXRpY1Byb3BlcnRpZXNbaV07XG5cbiAgICAgICAgcHJvcGVydHkub2Zmc2V0ID0gc3RhdGljT2Zmc2V0O1xuICAgICAgICBzdGF0aWNPZmZzZXQgKz0gcHJvcGVydHkuc2l6ZTtcbiAgICAgICAgdGhpcy5zdGF0aWNTdHJpZGUgKz0gcHJvcGVydHkuc2l6ZTtcbiAgICB9XG5cbiAgICB0aGlzLnN0YXRpY0RhdGEgPSBuZXcgRmxvYXQzMkFycmF5KCB0aGlzLnNpemUgKiB0aGlzLnN0YXRpY1N0cmlkZSAqIDQpO1xuICAgIHRoaXMuc3RhdGljQnVmZmVyID0gZ2wuY3JlYXRlQnVmZmVyKCk7XG5cbiAgICBnbC5iaW5kQnVmZmVyKGdsLkFSUkFZX0JVRkZFUiwgdGhpcy5zdGF0aWNCdWZmZXIpO1xuICAgIGdsLmJ1ZmZlckRhdGEoZ2wuQVJSQVlfQlVGRkVSLCB0aGlzLnN0YXRpY0RhdGEsIGdsLkRZTkFNSUNfRFJBVyk7XG59O1xuXG4vKipcbiAqIFVwbG9hZHMgdGhlIGR5bmFtaWMgcHJvcGVydGllcy5cbiAqXG4gKi9cblBhcnRpY2xlQnVmZmVyLnByb3RvdHlwZS51cGxvYWREeW5hbWljID0gZnVuY3Rpb24oY2hpbGRyZW4sIHN0YXJ0SW5kZXgsIGFtb3VudClcbntcbiAgICB2YXIgZ2wgPSB0aGlzLmdsO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmR5bmFtaWNQcm9wZXJ0aWVzLmxlbmd0aDsgaSsrKVxuICAgIHtcbiAgICAgICAgdmFyIHByb3BlcnR5ID0gdGhpcy5keW5hbWljUHJvcGVydGllc1tpXTtcbiAgICAgICAgcHJvcGVydHkudXBsb2FkRnVuY3Rpb24oY2hpbGRyZW4sIHN0YXJ0SW5kZXgsIGFtb3VudCwgdGhpcy5keW5hbWljRGF0YSwgdGhpcy5keW5hbWljU3RyaWRlLCBwcm9wZXJ0eS5vZmZzZXQpO1xuICAgIH1cblxuICAgIGdsLmJpbmRCdWZmZXIoZ2wuQVJSQVlfQlVGRkVSLCB0aGlzLmR5bmFtaWNCdWZmZXIpO1xuICAgIGdsLmJ1ZmZlclN1YkRhdGEoZ2wuQVJSQVlfQlVGRkVSLCAwLCB0aGlzLmR5bmFtaWNEYXRhKTtcbn07XG5cbi8qKlxuICogVXBsb2FkcyB0aGUgc3RhdGljIHByb3BlcnRpZXMuXG4gKlxuICovXG5QYXJ0aWNsZUJ1ZmZlci5wcm90b3R5cGUudXBsb2FkU3RhdGljID0gZnVuY3Rpb24oY2hpbGRyZW4sIHN0YXJ0SW5kZXgsIGFtb3VudClcbntcbiAgICB2YXIgZ2wgPSB0aGlzLmdsO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLnN0YXRpY1Byb3BlcnRpZXMubGVuZ3RoOyBpKyspXG4gICAge1xuICAgICAgICB2YXIgcHJvcGVydHkgPSB0aGlzLnN0YXRpY1Byb3BlcnRpZXNbaV07XG4gICAgICAgIHByb3BlcnR5LnVwbG9hZEZ1bmN0aW9uKGNoaWxkcmVuLCBzdGFydEluZGV4LCBhbW91bnQsIHRoaXMuc3RhdGljRGF0YSwgdGhpcy5zdGF0aWNTdHJpZGUsIHByb3BlcnR5Lm9mZnNldCk7XG4gICAgfVxuXG4gICAgZ2wuYmluZEJ1ZmZlcihnbC5BUlJBWV9CVUZGRVIsIHRoaXMuc3RhdGljQnVmZmVyKTtcbiAgICBnbC5idWZmZXJTdWJEYXRhKGdsLkFSUkFZX0JVRkZFUiwgMCwgdGhpcy5zdGF0aWNEYXRhKTtcbn07XG5cbi8qKlxuICogQmluZHMgdGhlIGJ1ZmZlcnMgdG8gdGhlIEdQVVxuICpcbiAqL1xuUGFydGljbGVCdWZmZXIucHJvdG90eXBlLmJpbmQgPSBmdW5jdGlvbiAoKVxue1xuICAgIHZhciBnbCA9IHRoaXMuZ2w7XG4gICAgdmFyIGksIHByb3BlcnR5O1xuXG4gICAgZ2wuYmluZEJ1ZmZlcihnbC5BUlJBWV9CVUZGRVIsIHRoaXMuZHluYW1pY0J1ZmZlcik7XG5cbiAgICBmb3IgKGkgPSAwOyBpIDwgdGhpcy5keW5hbWljUHJvcGVydGllcy5sZW5ndGg7IGkrKylcbiAgICB7XG4gICAgICAgIHByb3BlcnR5ID0gdGhpcy5keW5hbWljUHJvcGVydGllc1tpXTtcbiAgICAgICAgZ2wudmVydGV4QXR0cmliUG9pbnRlcihwcm9wZXJ0eS5hdHRyaWJ1dGUsIHByb3BlcnR5LnNpemUsIGdsLkZMT0FULCBmYWxzZSwgdGhpcy5keW5hbWljU3RyaWRlICogNCwgcHJvcGVydHkub2Zmc2V0ICogNCk7XG4gICAgfVxuXG4gICAgZ2wuYmluZEJ1ZmZlcihnbC5BUlJBWV9CVUZGRVIsIHRoaXMuc3RhdGljQnVmZmVyKTtcblxuICAgIGZvciAoaSA9IDA7IGkgPCB0aGlzLnN0YXRpY1Byb3BlcnRpZXMubGVuZ3RoOyBpKyspXG4gICAge1xuICAgICAgICBwcm9wZXJ0eSA9IHRoaXMuc3RhdGljUHJvcGVydGllc1tpXTtcbiAgICAgICAgZ2wudmVydGV4QXR0cmliUG9pbnRlcihwcm9wZXJ0eS5hdHRyaWJ1dGUsIHByb3BlcnR5LnNpemUsIGdsLkZMT0FULCBmYWxzZSwgdGhpcy5zdGF0aWNTdHJpZGUgKiA0LCBwcm9wZXJ0eS5vZmZzZXQgKiA0KTtcbiAgICB9XG59O1xuXG4vKipcbiAqIERlc3Ryb3lzIHRoZSBQYXJ0aWNsZUJ1ZmZlci5cbiAqXG4gKi9cblBhcnRpY2xlQnVmZmVyLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLmR5bmFtaWNQcm9wZXJ0aWVzID0gbnVsbDtcbiAgICB0aGlzLmR5bmFtaWNEYXRhID0gbnVsbDtcbiAgICB0aGlzLmdsLmRlbGV0ZUJ1ZmZlcih0aGlzLmR5bmFtaWNCdWZmZXIpO1xuXG4gICAgdGhpcy5zdGF0aWNQcm9wZXJ0aWVzID0gbnVsbDtcbiAgICB0aGlzLnN0YXRpY0RhdGEgPSBudWxsO1xuICAgIHRoaXMuZ2wuZGVsZXRlQnVmZmVyKHRoaXMuc3RhdGljQnVmZmVyKTtcbn07XG4iLCJ2YXIgT2JqZWN0UmVuZGVyZXIgPSByZXF1aXJlKCcuLi8uLi9yZW5kZXJlcnMvd2ViZ2wvdXRpbHMvT2JqZWN0UmVuZGVyZXInKSxcbiAgICBXZWJHTFJlbmRlcmVyID0gcmVxdWlyZSgnLi4vLi4vcmVuZGVyZXJzL3dlYmdsL1dlYkdMUmVuZGVyZXInKSxcbiAgICBQYXJ0aWNsZVNoYWRlciA9IHJlcXVpcmUoJy4vUGFydGljbGVTaGFkZXInKSxcbiAgICBQYXJ0aWNsZUJ1ZmZlciA9IHJlcXVpcmUoJy4vUGFydGljbGVCdWZmZXInKSxcbiAgICBtYXRoICAgICAgICAgICAgPSByZXF1aXJlKCcuLi8uLi9tYXRoJyk7XG5cbi8qKlxuICogQGF1dGhvciBNYXQgR3JvdmVzXG4gKlxuICogQmlnIHRoYW5rcyB0byB0aGUgdmVyeSBjbGV2ZXIgTWF0dCBEZXNMYXVyaWVycyA8bWF0dGRlc2w+IGh0dHBzOi8vZ2l0aHViLmNvbS9tYXR0ZGVzbC9cbiAqIGZvciBjcmVhdGluZyB0aGUgb3JpZ2luYWwgcGl4aSB2ZXJzaW9uIVxuICogQWxzbyBhIHRoYW5rcyB0byBodHRwczovL2dpdGh1Yi5jb20vYmNoZXZhbGllciBmb3IgdHdlYWtpbmcgdGhlIHRpbnQgYW5kIGFscGhhIHNvIHRoYXQgdGhleSBub3cgc2hhcmUgNCBieXRlcyBvbiB0aGUgdmVydGV4IGJ1ZmZlclxuICpcbiAqIEhlYXZpbHkgaW5zcGlyZWQgYnkgTGliR0RYJ3MgUGFydGljbGVSZW5kZXJlcjpcbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS9saWJnZHgvbGliZ2R4L2Jsb2IvbWFzdGVyL2dkeC9zcmMvY29tL2JhZGxvZ2ljL2dkeC9ncmFwaGljcy9nMmQvUGFydGljbGVSZW5kZXJlci5qYXZhXG4gKi9cblxuLyoqXG4gKlxuICogQGNsYXNzXG4gKiBAcHJpdmF0ZVxuICogQG1lbWJlcm9mIFBJWElcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5XZWJHTFJlbmRlcmVyfSBUaGUgcmVuZGVyZXIgdGhpcyBzcHJpdGUgYmF0Y2ggd29ya3MgZm9yLlxuICovXG5mdW5jdGlvbiBQYXJ0aWNsZVJlbmRlcmVyKHJlbmRlcmVyKVxue1xuICAgIE9iamVjdFJlbmRlcmVyLmNhbGwodGhpcywgcmVuZGVyZXIpO1xuXG4gICAgLy8gNjU1MzUgaXMgbWF4IHZlcnRleCBpbmRleCBpbiB0aGUgaW5kZXggYnVmZmVyIChzZWUgUGFydGljbGVSZW5kZXJlcilcbiAgICAvLyBzbyBtYXggbnVtYmVyIG9mIHBhcnRpY2xlcyBpcyA2NTUzNiAvIDQgPSAxNjM4NFxuICAgIC8vIGFuZCBtYXggbnVtYmVyIG9mIGVsZW1lbnQgaW4gdGhlIGluZGV4IGJ1ZmZlciBpcyAxNjM4NCAqIDYgPSA5ODMwNFxuICAgIC8vIENyZWF0aW5nIGEgZnVsbCBpbmRleCBidWZmZXIsIG92ZXJoZWFkIGlzIDk4MzA0ICogMiA9IDE5NktvXG4gICAgdmFyIG51bUluZGljZXMgPSA5ODMwNDtcblxuICAgIC8qKlxuICAgICAqIEhvbGRzIHRoZSBpbmRpY2VzXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtVaW50MTZBcnJheX1cbiAgICAgKi9cbiAgICB0aGlzLmluZGljZXMgPSBuZXcgVWludDE2QXJyYXkobnVtSW5kaWNlcyk7XG5cbiAgICBmb3IgKHZhciBpPTAsIGo9MDsgaSA8IG51bUluZGljZXM7IGkgKz0gNiwgaiArPSA0KVxuICAgIHtcbiAgICAgICAgdGhpcy5pbmRpY2VzW2kgKyAwXSA9IGogKyAwO1xuICAgICAgICB0aGlzLmluZGljZXNbaSArIDFdID0gaiArIDE7XG4gICAgICAgIHRoaXMuaW5kaWNlc1tpICsgMl0gPSBqICsgMjtcbiAgICAgICAgdGhpcy5pbmRpY2VzW2kgKyAzXSA9IGogKyAwO1xuICAgICAgICB0aGlzLmluZGljZXNbaSArIDRdID0gaiArIDI7XG4gICAgICAgIHRoaXMuaW5kaWNlc1tpICsgNV0gPSBqICsgMztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGUgZGVmYXVsdCBzaGFkZXIgdGhhdCBpcyB1c2VkIGlmIGEgc3ByaXRlIGRvZXNuJ3QgaGF2ZSBhIG1vcmUgc3BlY2lmaWMgb25lLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5TaGFkZXJ9XG4gICAgICovXG4gICAgdGhpcy5zaGFkZXIgPSBudWxsO1xuXG4gICAgdGhpcy5pbmRleEJ1ZmZlciA9IG51bGw7XG5cbiAgICB0aGlzLnByb3BlcnRpZXMgPSBudWxsO1xuXG4gICAgdGhpcy50ZW1wTWF0cml4ID0gbmV3IG1hdGguTWF0cml4KCk7XG59XG5cblBhcnRpY2xlUmVuZGVyZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShPYmplY3RSZW5kZXJlci5wcm90b3R5cGUpO1xuUGFydGljbGVSZW5kZXJlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBQYXJ0aWNsZVJlbmRlcmVyO1xubW9kdWxlLmV4cG9ydHMgPSBQYXJ0aWNsZVJlbmRlcmVyO1xuXG5XZWJHTFJlbmRlcmVyLnJlZ2lzdGVyUGx1Z2luKCdwYXJ0aWNsZScsIFBhcnRpY2xlUmVuZGVyZXIpO1xuXG4vKipcbiAqIFdoZW4gdGhlcmUgaXMgYSBXZWJHTCBjb250ZXh0IGNoYW5nZVxuICpcbiAqIEBwcml2YXRlXG4gKi9cblBhcnRpY2xlUmVuZGVyZXIucHJvdG90eXBlLm9uQ29udGV4dENoYW5nZSA9IGZ1bmN0aW9uICgpXG57XG4gICAgdmFyIGdsID0gdGhpcy5yZW5kZXJlci5nbDtcblxuICAgIC8vIHNldHVwIGRlZmF1bHQgc2hhZGVyXG4gICAgdGhpcy5zaGFkZXIgPSBuZXcgUGFydGljbGVTaGFkZXIodGhpcy5yZW5kZXJlci5zaGFkZXJNYW5hZ2VyKTtcblxuICAgIHRoaXMuaW5kZXhCdWZmZXIgPSBnbC5jcmVhdGVCdWZmZXIoKTtcblxuICAgIC8vIDY1NTM1IGlzIG1heCBpbmRleCwgc28gNjU1MzUgLyA2ID0gMTA5MjIuXG5cbiAgICAvL3VwbG9hZCB0aGUgaW5kZXggZGF0YVxuICAgIGdsLmJpbmRCdWZmZXIoZ2wuRUxFTUVOVF9BUlJBWV9CVUZGRVIsIHRoaXMuaW5kZXhCdWZmZXIpO1xuICAgIGdsLmJ1ZmZlckRhdGEoZ2wuRUxFTUVOVF9BUlJBWV9CVUZGRVIsIHRoaXMuaW5kaWNlcywgZ2wuU1RBVElDX0RSQVcpO1xuXG4gICAgdGhpcy5wcm9wZXJ0aWVzID0gW1xuICAgICAgICAvLyB2ZXJ0aWNlc0RhdGFcbiAgICAgICAge1xuICAgICAgICAgICAgYXR0cmlidXRlOnRoaXMuc2hhZGVyLmF0dHJpYnV0ZXMuYVZlcnRleFBvc2l0aW9uLFxuICAgICAgICAgICAgc2l6ZToyLFxuICAgICAgICAgICAgdXBsb2FkRnVuY3Rpb246dGhpcy51cGxvYWRWZXJ0aWNlcyxcbiAgICAgICAgICAgIG9mZnNldDowXG4gICAgICAgIH0sXG4gICAgICAgIC8vIHBvc2l0aW9uRGF0YVxuICAgICAgICB7XG4gICAgICAgICAgICBhdHRyaWJ1dGU6dGhpcy5zaGFkZXIuYXR0cmlidXRlcy5hUG9zaXRpb25Db29yZCxcbiAgICAgICAgICAgIHNpemU6MixcbiAgICAgICAgICAgIHVwbG9hZEZ1bmN0aW9uOnRoaXMudXBsb2FkUG9zaXRpb24sXG4gICAgICAgICAgICBvZmZzZXQ6MFxuICAgICAgICB9LFxuICAgICAgICAvLyByb3RhdGlvbkRhdGFcbiAgICAgICAge1xuICAgICAgICAgICAgYXR0cmlidXRlOnRoaXMuc2hhZGVyLmF0dHJpYnV0ZXMuYVJvdGF0aW9uLFxuICAgICAgICAgICAgc2l6ZToxLFxuICAgICAgICAgICAgdXBsb2FkRnVuY3Rpb246dGhpcy51cGxvYWRSb3RhdGlvbixcbiAgICAgICAgICAgIG9mZnNldDowXG4gICAgICAgIH0sXG4gICAgICAgIC8vIHV2c0RhdGFcbiAgICAgICAge1xuICAgICAgICAgICAgYXR0cmlidXRlOnRoaXMuc2hhZGVyLmF0dHJpYnV0ZXMuYVRleHR1cmVDb29yZCxcbiAgICAgICAgICAgIHNpemU6MixcbiAgICAgICAgICAgIHVwbG9hZEZ1bmN0aW9uOnRoaXMudXBsb2FkVXZzLFxuICAgICAgICAgICAgb2Zmc2V0OjBcbiAgICAgICAgfSxcbiAgICAgICAgLy8gYWxwaGFEYXRhXG4gICAgICAgIHtcbiAgICAgICAgICAgIGF0dHJpYnV0ZTp0aGlzLnNoYWRlci5hdHRyaWJ1dGVzLmFDb2xvcixcbiAgICAgICAgICAgIHNpemU6MSxcbiAgICAgICAgICAgIHVwbG9hZEZ1bmN0aW9uOnRoaXMudXBsb2FkQWxwaGEsXG4gICAgICAgICAgICBvZmZzZXQ6MFxuICAgICAgICB9XG4gICAgXTtcbn07XG5cbi8qKlxuICogU3RhcnRzIGEgbmV3IHBhcnRpY2xlIGJhdGNoLlxuICpcbiAqL1xuUGFydGljbGVSZW5kZXJlci5wcm90b3R5cGUuc3RhcnQgPSBmdW5jdGlvbiAoKVxue1xuICAgIHZhciBnbCA9IHRoaXMucmVuZGVyZXIuZ2w7XG5cbiAgICAvLyBiaW5kIHRoZSBtYWluIHRleHR1cmVcbiAgICBnbC5hY3RpdmVUZXh0dXJlKGdsLlRFWFRVUkUwKTtcblxuICAgIC8vIGJpbmQgdGhlIGJ1ZmZlcnNcblxuICAgIGdsLmJpbmRCdWZmZXIoZ2wuRUxFTUVOVF9BUlJBWV9CVUZGRVIsIHRoaXMuaW5kZXhCdWZmZXIpO1xuXG4gICAgdmFyIHNoYWRlciA9IHRoaXMuc2hhZGVyO1xuXG4gICAgdGhpcy5yZW5kZXJlci5zaGFkZXJNYW5hZ2VyLnNldFNoYWRlcihzaGFkZXIpO1xufTtcblxuXG4vKipcbiAqIFJlbmRlcnMgdGhlIHBhcnRpY2xlIGNvbnRhaW5lciBvYmplY3QuXG4gKlxuICogQHBhcmFtIGNvbnRhaW5lciB7UElYSS5QYXJ0aWNsZUNvbnRhaW5lcn0gVGhlIGNvbnRhaW5lciB0byByZW5kZXIgdXNpbmcgdGhpcyBQYXJ0aWNsZVJlbmRlcmVyXG4gKi9cblBhcnRpY2xlUmVuZGVyZXIucHJvdG90eXBlLnJlbmRlciA9IGZ1bmN0aW9uIChjb250YWluZXIpXG57XG4gICAgdmFyIGNoaWxkcmVuID0gY29udGFpbmVyLmNoaWxkcmVuLFxuICAgICAgICB0b3RhbENoaWxkcmVuID0gY2hpbGRyZW4ubGVuZ3RoLFxuICAgICAgICBtYXhTaXplID0gY29udGFpbmVyLl9tYXhTaXplLFxuICAgICAgICBiYXRjaFNpemUgPSBjb250YWluZXIuX2JhdGNoU2l6ZTtcblxuICAgIGlmKHRvdGFsQ2hpbGRyZW4gPT09IDApXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIGVsc2UgaWYodG90YWxDaGlsZHJlbiA+IG1heFNpemUpXG4gICAge1xuICAgICAgICB0b3RhbENoaWxkcmVuID0gbWF4U2l6ZTtcbiAgICB9XG5cbiAgICBpZighY29udGFpbmVyLl9idWZmZXJzKVxuICAgIHtcbiAgICAgICAgY29udGFpbmVyLl9idWZmZXJzID0gdGhpcy5nZW5lcmF0ZUJ1ZmZlcnMoIGNvbnRhaW5lciApO1xuICAgIH1cblxuICAgIC8vIGlmIHRoZSB1dnMgaGF2ZSBub3QgdXBkYXRlZCB0aGVuIG5vIHBvaW50IHJlbmRlcmluZyBqdXN0IHlldCFcbiAgICB0aGlzLnJlbmRlcmVyLmJsZW5kTW9kZU1hbmFnZXIuc2V0QmxlbmRNb2RlKGNvbnRhaW5lci5ibGVuZE1vZGUpO1xuXG4gICAgdmFyIGdsID0gdGhpcy5yZW5kZXJlci5nbDtcblxuICAgIHZhciBtID0gIGNvbnRhaW5lci53b3JsZFRyYW5zZm9ybS5jb3B5KCB0aGlzLnRlbXBNYXRyaXggKTtcbiAgICBtLnByZXBlbmQoIHRoaXMucmVuZGVyZXIuY3VycmVudFJlbmRlclRhcmdldC5wcm9qZWN0aW9uTWF0cml4ICk7XG4gICAgZ2wudW5pZm9ybU1hdHJpeDNmdih0aGlzLnNoYWRlci51bmlmb3Jtcy5wcm9qZWN0aW9uTWF0cml4Ll9sb2NhdGlvbiwgZmFsc2UsIG0udG9BcnJheSh0cnVlKSk7XG4gICAgZ2wudW5pZm9ybTFmKHRoaXMuc2hhZGVyLnVuaWZvcm1zLnVBbHBoYS5fbG9jYXRpb24sIGNvbnRhaW5lci53b3JsZEFscGhhKTtcblxuXG4gICAgLy8gbWFrZSBzdXJlIHRoZSB0ZXh0dXJlIGlzIGJvdW5kLi5cbiAgICB2YXIgYmFzZVRleHR1cmUgPSBjaGlsZHJlblswXS5fdGV4dHVyZS5iYXNlVGV4dHVyZTtcblxuICAgIGlmICghYmFzZVRleHR1cmUuX2dsVGV4dHVyZXNbZ2wuaWRdKVxuICAgIHtcbiAgICAgICAgLy8gaWYgdGhlIHRleHR1cmUgaGFzIG5vdCB1cGRhdGVkIHRoZW4gbGV0cyBub3QgdXBsb2FkIGFueSBzdGF0aWMgcHJvcGVydGllc1xuICAgICAgICBpZighdGhpcy5yZW5kZXJlci51cGRhdGVUZXh0dXJlKGJhc2VUZXh0dXJlKSlcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYoIWNvbnRhaW5lci5fcHJvcGVydGllc1swXSB8fCAhY29udGFpbmVyLl9wcm9wZXJ0aWVzWzNdKVxuICAgICAgICB7XG4gICAgICAgICAgICBjb250YWluZXIuX2J1ZmZlclRvVXBkYXRlID0gMDtcbiAgICAgICAgfVxuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICBnbC5iaW5kVGV4dHVyZShnbC5URVhUVVJFXzJELCBiYXNlVGV4dHVyZS5fZ2xUZXh0dXJlc1tnbC5pZF0pO1xuICAgIH1cblxuICAgIC8vIG5vdyBsZXRzIHVwbG9hZCBhbmQgcmVuZGVyIHRoZSBidWZmZXJzLi5cbiAgICBmb3IgKHZhciBpID0gMCwgaiA9IDA7IGkgPCB0b3RhbENoaWxkcmVuOyBpICs9IGJhdGNoU2l6ZSwgaiArPSAxKVxuICAgIHtcbiAgICAgICAgdmFyIGFtb3VudCA9ICggdG90YWxDaGlsZHJlbiAtIGkpO1xuICAgICAgICBpZihhbW91bnQgPiBiYXRjaFNpemUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGFtb3VudCA9IGJhdGNoU2l6ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBidWZmZXIgPSBjb250YWluZXIuX2J1ZmZlcnNbal07XG5cbiAgICAgICAgLy8gd2UgYWx3YXlzIHVwbG9hZCB0aGUgZHluYW1pY1xuICAgICAgICBidWZmZXIudXBsb2FkRHluYW1pYyhjaGlsZHJlbiwgaSwgYW1vdW50KTtcblxuICAgICAgICAvLyB3ZSBvbmx5IHVwbG9hZCB0aGUgc3RhdGljIGNvbnRlbnQgd2hlbiB3ZSBoYXZlIHRvIVxuICAgICAgICBpZihjb250YWluZXIuX2J1ZmZlclRvVXBkYXRlID09PSBqKVxuICAgICAgICB7XG4gICAgICAgICAgICBidWZmZXIudXBsb2FkU3RhdGljKGNoaWxkcmVuLCBpLCBhbW91bnQpO1xuICAgICAgICAgICAgY29udGFpbmVyLl9idWZmZXJUb1VwZGF0ZSA9IGogKyAxO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gYmluZCB0aGUgYnVmZmVyXG4gICAgICAgIGJ1ZmZlci5iaW5kKCB0aGlzLnNoYWRlciApO1xuXG4gICAgICAgICAvLyBub3cgZHJhdyB0aG9zZSBzdWNrYXMhXG4gICAgICAgIGdsLmRyYXdFbGVtZW50cyhnbC5UUklBTkdMRVMsIGFtb3VudCAqIDYsIGdsLlVOU0lHTkVEX1NIT1JULCAwKTtcbiAgICAgICAgdGhpcy5yZW5kZXJlci5kcmF3Q291bnQrKztcbiAgICB9XG59O1xuXG4vKipcbiAqIENyZWF0ZXMgb25lIHBhcnRpY2xlIGJ1ZmZlciBmb3IgZWFjaCBjaGlsZCBpbiB0aGUgY29udGFpbmVyIHdlIHdhbnQgdG8gcmVuZGVyIGFuZCB1cGRhdGVzIGludGVybmFsIHByb3BlcnRpZXNcbiAqXG4gKiBAcGFyYW0gY29udGFpbmVyIHtQSVhJLlBhcnRpY2xlQ29udGFpbmVyfSBUaGUgY29udGFpbmVyIHRvIHJlbmRlciB1c2luZyB0aGlzIFBhcnRpY2xlUmVuZGVyZXJcbiAqL1xuUGFydGljbGVSZW5kZXJlci5wcm90b3R5cGUuZ2VuZXJhdGVCdWZmZXJzID0gZnVuY3Rpb24gKGNvbnRhaW5lcilcbntcbiAgICB2YXIgZ2wgPSB0aGlzLnJlbmRlcmVyLmdsLFxuICAgICAgICBidWZmZXJzID0gW10sXG4gICAgICAgIHNpemUgPSBjb250YWluZXIuX21heFNpemUsXG4gICAgICAgIGJhdGNoU2l6ZSA9IGNvbnRhaW5lci5fYmF0Y2hTaXplLFxuICAgICAgICBkeW5hbWljUHJvcGVydHlGbGFncyA9IGNvbnRhaW5lci5fcHJvcGVydGllcyxcbiAgICAgICAgaTtcblxuICAgIGZvciAoaSA9IDA7IGkgPCBzaXplOyBpICs9IGJhdGNoU2l6ZSlcbiAgICB7XG4gICAgICAgIGJ1ZmZlcnMucHVzaChuZXcgUGFydGljbGVCdWZmZXIoZ2wsIHRoaXMucHJvcGVydGllcywgZHluYW1pY1Byb3BlcnR5RmxhZ3MsIGJhdGNoU2l6ZSkpO1xuICAgIH1cblxuICAgIHJldHVybiBidWZmZXJzO1xufTtcblxuLyoqXG4gKiBVcGxvYWRzIHRoZSB2ZXJ0aWNpZXMuXG4gKlxuICogQHBhcmFtIGNoaWxkcmVuIHtQSVhJLkRpc3BsYXlPYmplY3RbXX0gdGhlIGFycmF5IG9mIGRpc3BsYXkgb2JqZWN0cyB0byByZW5kZXJcbiAqIEBwYXJhbSBzdGFydEluZGV4IHtudW1iZXJ9IHRoZSBpbmRleCB0byBzdGFydCBmcm9tIGluIHRoZSBjaGlsZHJlbiBhcnJheVxuICogQHBhcmFtIGFtb3VudCB7bnVtYmVyfSB0aGUgYW1vdW50IG9mIGNoaWxkcmVuIHRoYXQgd2lsbCBoYXZlIHRoZWlyIHZlcnRpY2VzIHVwbG9hZGVkXG4gKiBAcGFyYW0gYXJyYXkge251bWJlcltdfVxuICogQHBhcmFtIHN0cmlkZSB7bnVtYmVyfVxuICogQHBhcmFtIG9mZnNldCB7bnVtYmVyfVxuICovXG5QYXJ0aWNsZVJlbmRlcmVyLnByb3RvdHlwZS51cGxvYWRWZXJ0aWNlcyA9IGZ1bmN0aW9uIChjaGlsZHJlbiwgc3RhcnRJbmRleCwgYW1vdW50LCBhcnJheSwgc3RyaWRlLCBvZmZzZXQpXG57XG4gICAgdmFyIHNwcml0ZSxcbiAgICAgICAgdGV4dHVyZSxcbiAgICAgICAgdHJpbSxcbiAgICAgICAgc3gsXG4gICAgICAgIHN5LFxuICAgICAgICB3MCwgdzEsIGgwLCBoMTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYW1vdW50OyBpKyspIHtcblxuICAgICAgICBzcHJpdGUgPSBjaGlsZHJlbltzdGFydEluZGV4ICsgaV07XG4gICAgICAgIHRleHR1cmUgPSBzcHJpdGUuX3RleHR1cmU7XG4gICAgICAgIHN4ID0gc3ByaXRlLnNjYWxlLng7XG4gICAgICAgIHN5ID0gc3ByaXRlLnNjYWxlLnk7XG5cbiAgICAgICAgaWYgKHRleHR1cmUudHJpbSlcbiAgICAgICAge1xuICAgICAgICAgICAgLy8gaWYgdGhlIHNwcml0ZSBpcyB0cmltbWVkIHRoZW4gd2UgbmVlZCB0byBhZGQgdGhlIGV4dHJhIHNwYWNlIGJlZm9yZSB0cmFuc2Zvcm1pbmcgdGhlIHNwcml0ZSBjb29yZHMuLlxuICAgICAgICAgICAgdHJpbSA9IHRleHR1cmUudHJpbTtcblxuICAgICAgICAgICAgdzEgPSB0cmltLnggLSBzcHJpdGUuYW5jaG9yLnggKiB0cmltLndpZHRoO1xuICAgICAgICAgICAgdzAgPSB3MSArIHRleHR1cmUuY3JvcC53aWR0aDtcblxuICAgICAgICAgICAgaDEgPSB0cmltLnkgLSBzcHJpdGUuYW5jaG9yLnkgKiB0cmltLmhlaWdodDtcbiAgICAgICAgICAgIGgwID0gaDEgKyB0ZXh0dXJlLmNyb3AuaGVpZ2h0O1xuICAgICAgICB9XG4gICAgICAgIGVsc2VcbiAgICAgICAge1xuICAgICAgICAgICAgdzAgPSAodGV4dHVyZS5fZnJhbWUud2lkdGggKSAqICgxLXNwcml0ZS5hbmNob3IueCk7XG4gICAgICAgICAgICB3MSA9ICh0ZXh0dXJlLl9mcmFtZS53aWR0aCApICogLXNwcml0ZS5hbmNob3IueDtcblxuICAgICAgICAgICAgaDAgPSB0ZXh0dXJlLl9mcmFtZS5oZWlnaHQgKiAoMS1zcHJpdGUuYW5jaG9yLnkpO1xuICAgICAgICAgICAgaDEgPSB0ZXh0dXJlLl9mcmFtZS5oZWlnaHQgKiAtc3ByaXRlLmFuY2hvci55O1xuICAgICAgICB9XG5cbiAgICAgICAgYXJyYXlbb2Zmc2V0XSA9IHcxICogc3g7XG4gICAgICAgIGFycmF5W29mZnNldCArIDFdID0gaDEgKiBzeTtcblxuICAgICAgICBhcnJheVtvZmZzZXQgKyBzdHJpZGVdID0gdzAgKiBzeDtcbiAgICAgICAgYXJyYXlbb2Zmc2V0ICsgc3RyaWRlICsgMV0gPSBoMSAqIHN5O1xuXG4gICAgICAgIGFycmF5W29mZnNldCArIHN0cmlkZSAqIDJdID0gdzAgKiBzeDtcbiAgICAgICAgYXJyYXlbb2Zmc2V0ICsgc3RyaWRlICogMiArIDFdID0gaDAgKiBzeTtcblxuICAgICAgICBhcnJheVtvZmZzZXQgKyBzdHJpZGUgKiAzXSA9IHcxICogc3g7XG4gICAgICAgIGFycmF5W29mZnNldCArIHN0cmlkZSAqIDMgKyAxXSA9IGgwICogc3k7XG5cbiAgICAgICAgb2Zmc2V0ICs9IHN0cmlkZSAqIDQ7XG4gICAgfVxuXG59O1xuXG4vKipcbiAqXG4gKiBAcGFyYW0gY2hpbGRyZW4ge1BJWEkuRGlzcGxheU9iamVjdFtdfSB0aGUgYXJyYXkgb2YgZGlzcGxheSBvYmplY3RzIHRvIHJlbmRlclxuICogQHBhcmFtIHN0YXJ0SW5kZXgge251bWJlcn0gdGhlIGluZGV4IHRvIHN0YXJ0IGZyb20gaW4gdGhlIGNoaWxkcmVuIGFycmF5XG4gKiBAcGFyYW0gYW1vdW50IHtudW1iZXJ9IHRoZSBhbW91bnQgb2YgY2hpbGRyZW4gdGhhdCB3aWxsIGhhdmUgdGhlaXIgcG9zaXRpb25zIHVwbG9hZGVkXG4gKiBAcGFyYW0gYXJyYXkge251bWJlcltdfVxuICogQHBhcmFtIHN0cmlkZSB7bnVtYmVyfVxuICogQHBhcmFtIG9mZnNldCB7bnVtYmVyfVxuICovXG5QYXJ0aWNsZVJlbmRlcmVyLnByb3RvdHlwZS51cGxvYWRQb3NpdGlvbiA9IGZ1bmN0aW9uIChjaGlsZHJlbixzdGFydEluZGV4LCBhbW91bnQsIGFycmF5LCBzdHJpZGUsIG9mZnNldClcbntcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFtb3VudDsgaSsrKVxuICAgIHtcbiAgICAgICAgdmFyIHNwcml0ZVBvc2l0aW9uID0gY2hpbGRyZW5bc3RhcnRJbmRleCArIGldLnBvc2l0aW9uO1xuXG4gICAgICAgIGFycmF5W29mZnNldF0gPSBzcHJpdGVQb3NpdGlvbi54O1xuICAgICAgICBhcnJheVtvZmZzZXQgKyAxXSA9IHNwcml0ZVBvc2l0aW9uLnk7XG5cbiAgICAgICAgYXJyYXlbb2Zmc2V0ICsgc3RyaWRlXSA9IHNwcml0ZVBvc2l0aW9uLng7XG4gICAgICAgIGFycmF5W29mZnNldCArIHN0cmlkZSArIDFdID0gc3ByaXRlUG9zaXRpb24ueTtcblxuICAgICAgICBhcnJheVtvZmZzZXQgKyBzdHJpZGUgKiAyXSA9IHNwcml0ZVBvc2l0aW9uLng7XG4gICAgICAgIGFycmF5W29mZnNldCArIHN0cmlkZSAqIDIgKyAxXSA9IHNwcml0ZVBvc2l0aW9uLnk7XG5cbiAgICAgICAgYXJyYXlbb2Zmc2V0ICsgc3RyaWRlICogM10gPSBzcHJpdGVQb3NpdGlvbi54O1xuICAgICAgICBhcnJheVtvZmZzZXQgKyBzdHJpZGUgKiAzICsgMV0gPSBzcHJpdGVQb3NpdGlvbi55O1xuXG4gICAgICAgIG9mZnNldCArPSBzdHJpZGUgKiA0O1xuICAgIH1cblxufTtcblxuLyoqXG4gKlxuICogQHBhcmFtIGNoaWxkcmVuIHtQSVhJLkRpc3BsYXlPYmplY3RbXX0gdGhlIGFycmF5IG9mIGRpc3BsYXkgb2JqZWN0cyB0byByZW5kZXJcbiAqIEBwYXJhbSBzdGFydEluZGV4IHtudW1iZXJ9IHRoZSBpbmRleCB0byBzdGFydCBmcm9tIGluIHRoZSBjaGlsZHJlbiBhcnJheVxuICogQHBhcmFtIGFtb3VudCB7bnVtYmVyfSB0aGUgYW1vdW50IG9mIGNoaWxkcmVuIHRoYXQgd2lsbCBoYXZlIHRoZWlyIHJvdGF0aW9uIHVwbG9hZGVkXG4gKiBAcGFyYW0gYXJyYXkge251bWJlcltdfVxuICogQHBhcmFtIHN0cmlkZSB7bnVtYmVyfVxuICogQHBhcmFtIG9mZnNldCB7bnVtYmVyfVxuICovXG5QYXJ0aWNsZVJlbmRlcmVyLnByb3RvdHlwZS51cGxvYWRSb3RhdGlvbiA9IGZ1bmN0aW9uIChjaGlsZHJlbixzdGFydEluZGV4LCBhbW91bnQsIGFycmF5LCBzdHJpZGUsIG9mZnNldClcbntcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFtb3VudDsgaSsrKVxuICAgIHtcbiAgICAgICAgdmFyIHNwcml0ZVJvdGF0aW9uID0gY2hpbGRyZW5bc3RhcnRJbmRleCArIGldLnJvdGF0aW9uO1xuXG5cbiAgICAgICAgYXJyYXlbb2Zmc2V0XSA9IHNwcml0ZVJvdGF0aW9uO1xuICAgICAgICBhcnJheVtvZmZzZXQgKyBzdHJpZGVdID0gc3ByaXRlUm90YXRpb247XG4gICAgICAgIGFycmF5W29mZnNldCArIHN0cmlkZSAqIDJdID0gc3ByaXRlUm90YXRpb247XG4gICAgICAgIGFycmF5W29mZnNldCArIHN0cmlkZSAqIDNdID0gc3ByaXRlUm90YXRpb247XG5cbiAgICAgICAgb2Zmc2V0ICs9IHN0cmlkZSAqIDQ7XG4gICAgfVxufTtcblxuLyoqXG4gKlxuICogQHBhcmFtIGNoaWxkcmVuIHtQSVhJLkRpc3BsYXlPYmplY3RbXX0gdGhlIGFycmF5IG9mIGRpc3BsYXkgb2JqZWN0cyB0byByZW5kZXJcbiAqIEBwYXJhbSBzdGFydEluZGV4IHtudW1iZXJ9IHRoZSBpbmRleCB0byBzdGFydCBmcm9tIGluIHRoZSBjaGlsZHJlbiBhcnJheVxuICogQHBhcmFtIGFtb3VudCB7bnVtYmVyfSB0aGUgYW1vdW50IG9mIGNoaWxkcmVuIHRoYXQgd2lsbCBoYXZlIHRoZWlyIFV2cyB1cGxvYWRlZFxuICogQHBhcmFtIGFycmF5IHtudW1iZXJbXX1cbiAqIEBwYXJhbSBzdHJpZGUge251bWJlcn1cbiAqIEBwYXJhbSBvZmZzZXQge251bWJlcn1cbiAqL1xuUGFydGljbGVSZW5kZXJlci5wcm90b3R5cGUudXBsb2FkVXZzID0gZnVuY3Rpb24gKGNoaWxkcmVuLHN0YXJ0SW5kZXgsIGFtb3VudCwgYXJyYXksIHN0cmlkZSwgb2Zmc2V0KVxue1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYW1vdW50OyBpKyspXG4gICAge1xuICAgICAgICB2YXIgdGV4dHVyZVV2cyA9IGNoaWxkcmVuW3N0YXJ0SW5kZXggKyBpXS5fdGV4dHVyZS5fdXZzO1xuXG4gICAgICAgIGlmICh0ZXh0dXJlVXZzKVxuICAgICAgICB7XG4gICAgICAgICAgICBhcnJheVtvZmZzZXRdID0gdGV4dHVyZVV2cy54MDtcbiAgICAgICAgICAgIGFycmF5W29mZnNldCArIDFdID0gdGV4dHVyZVV2cy55MDtcblxuICAgICAgICAgICAgYXJyYXlbb2Zmc2V0ICsgc3RyaWRlXSA9IHRleHR1cmVVdnMueDE7XG4gICAgICAgICAgICBhcnJheVtvZmZzZXQgKyBzdHJpZGUgKyAxXSA9IHRleHR1cmVVdnMueTE7XG5cbiAgICAgICAgICAgIGFycmF5W29mZnNldCArIHN0cmlkZSAqIDJdID0gdGV4dHVyZVV2cy54MjtcbiAgICAgICAgICAgIGFycmF5W29mZnNldCArIHN0cmlkZSAqIDIgKyAxXSA9IHRleHR1cmVVdnMueTI7XG5cbiAgICAgICAgICAgIGFycmF5W29mZnNldCArIHN0cmlkZSAqIDNdID0gdGV4dHVyZVV2cy54MztcbiAgICAgICAgICAgIGFycmF5W29mZnNldCArIHN0cmlkZSAqIDMgKyAxXSA9IHRleHR1cmVVdnMueTM7XG5cbiAgICAgICAgICAgIG9mZnNldCArPSBzdHJpZGUgKiA0O1xuICAgICAgICB9XG4gICAgICAgIGVsc2VcbiAgICAgICAge1xuICAgICAgICAgICAgLy9UT0RPIHlvdSBrbm93IHRoaXMgY2FuIGJlIGVhc2llciFcbiAgICAgICAgICAgIGFycmF5W29mZnNldF0gPSAwO1xuICAgICAgICAgICAgYXJyYXlbb2Zmc2V0ICsgMV0gPSAwO1xuXG4gICAgICAgICAgICBhcnJheVtvZmZzZXQgKyBzdHJpZGVdID0gMDtcbiAgICAgICAgICAgIGFycmF5W29mZnNldCArIHN0cmlkZSArIDFdID0gMDtcblxuICAgICAgICAgICAgYXJyYXlbb2Zmc2V0ICsgc3RyaWRlICogMl0gPSAwO1xuICAgICAgICAgICAgYXJyYXlbb2Zmc2V0ICsgc3RyaWRlICogMiArIDFdID0gMDtcblxuICAgICAgICAgICAgYXJyYXlbb2Zmc2V0ICsgc3RyaWRlICogM10gPSAwO1xuICAgICAgICAgICAgYXJyYXlbb2Zmc2V0ICsgc3RyaWRlICogMyArIDFdID0gMDtcblxuICAgICAgICAgICAgb2Zmc2V0ICs9IHN0cmlkZSAqIDQ7XG4gICAgICAgIH1cbiAgICB9XG59O1xuXG4vKipcbiAqXG4gKiBAcGFyYW0gY2hpbGRyZW4ge1BJWEkuRGlzcGxheU9iamVjdFtdfSB0aGUgYXJyYXkgb2YgZGlzcGxheSBvYmplY3RzIHRvIHJlbmRlclxuICogQHBhcmFtIHN0YXJ0SW5kZXgge251bWJlcn0gdGhlIGluZGV4IHRvIHN0YXJ0IGZyb20gaW4gdGhlIGNoaWxkcmVuIGFycmF5XG4gKiBAcGFyYW0gYW1vdW50IHtudW1iZXJ9IHRoZSBhbW91bnQgb2YgY2hpbGRyZW4gdGhhdCB3aWxsIGhhdmUgdGhlaXIgYWxwaGEgdXBsb2FkZWRcbiAqIEBwYXJhbSBhcnJheSB7bnVtYmVyW119XG4gKiBAcGFyYW0gc3RyaWRlIHtudW1iZXJ9XG4gKiBAcGFyYW0gb2Zmc2V0IHtudW1iZXJ9XG4gKi9cblBhcnRpY2xlUmVuZGVyZXIucHJvdG90eXBlLnVwbG9hZEFscGhhID0gZnVuY3Rpb24gKGNoaWxkcmVuLHN0YXJ0SW5kZXgsIGFtb3VudCwgYXJyYXksIHN0cmlkZSwgb2Zmc2V0KVxue1xuICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFtb3VudDsgaSsrKVxuICAgICB7XG4gICAgICAgIHZhciBzcHJpdGVBbHBoYSA9IGNoaWxkcmVuW3N0YXJ0SW5kZXggKyBpXS5hbHBoYTtcblxuICAgICAgICBhcnJheVtvZmZzZXRdID0gc3ByaXRlQWxwaGE7XG4gICAgICAgIGFycmF5W29mZnNldCArIHN0cmlkZV0gPSBzcHJpdGVBbHBoYTtcbiAgICAgICAgYXJyYXlbb2Zmc2V0ICsgc3RyaWRlICogMl0gPSBzcHJpdGVBbHBoYTtcbiAgICAgICAgYXJyYXlbb2Zmc2V0ICsgc3RyaWRlICogM10gPSBzcHJpdGVBbHBoYTtcblxuICAgICAgICBvZmZzZXQgKz0gc3RyaWRlICogNDtcbiAgICB9XG59O1xuXG5cbi8qKlxuICogRGVzdHJveXMgdGhlIFBhcnRpY2xlUmVuZGVyZXIuXG4gKlxuICovXG5QYXJ0aWNsZVJlbmRlcmVyLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKClcbntcbiAgICBpZiAodGhpcy5yZW5kZXJlci5nbCkge1xuICAgICAgICB0aGlzLnJlbmRlcmVyLmdsLmRlbGV0ZUJ1ZmZlcih0aGlzLmluZGV4QnVmZmVyKTtcbiAgICB9XG5cbiAgICBPYmplY3RSZW5kZXJlci5wcm90b3R5cGUuZGVzdHJveS5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuXG4gICAgdGhpcy5zaGFkZXIuZGVzdHJveSgpO1xuXG4gICAgdGhpcy5pbmRpY2VzID0gbnVsbDtcbiAgICB0aGlzLnRlbXBNYXRyaXggPSBudWxsO1xufTtcbiIsInZhciBUZXh0dXJlU2hhZGVyID0gcmVxdWlyZSgnLi4vLi4vcmVuZGVyZXJzL3dlYmdsL3NoYWRlcnMvVGV4dHVyZVNoYWRlcicpO1xuXG4vKipcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5UZXh0dXJlU2hhZGVyXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIHNoYWRlck1hbmFnZXIge1NoYWRlck1hbmFnZXJ9IFRoZSB3ZWJnbCBzaGFkZXIgbWFuYWdlciB0aGlzIHNoYWRlciB3b3JrcyBmb3IuXG4gKi9cbmZ1bmN0aW9uIFBhcnRpY2xlU2hhZGVyKHNoYWRlck1hbmFnZXIpXG57XG4gICAgVGV4dHVyZVNoYWRlci5jYWxsKHRoaXMsXG4gICAgICAgIHNoYWRlck1hbmFnZXIsXG4gICAgICAgIC8vIHZlcnRleCBzaGFkZXJcbiAgICAgICAgW1xuICAgICAgICAgICAgJ2F0dHJpYnV0ZSB2ZWMyIGFWZXJ0ZXhQb3NpdGlvbjsnLFxuICAgICAgICAgICAgJ2F0dHJpYnV0ZSB2ZWMyIGFUZXh0dXJlQ29vcmQ7JyxcbiAgICAgICAgICAgICdhdHRyaWJ1dGUgZmxvYXQgYUNvbG9yOycsXG5cbiAgICAgICAgICAgICdhdHRyaWJ1dGUgdmVjMiBhUG9zaXRpb25Db29yZDsnLFxuICAgICAgICAgICAgJ2F0dHJpYnV0ZSB2ZWMyIGFTY2FsZTsnLFxuICAgICAgICAgICAgJ2F0dHJpYnV0ZSBmbG9hdCBhUm90YXRpb247JyxcblxuICAgICAgICAgICAgJ3VuaWZvcm0gbWF0MyBwcm9qZWN0aW9uTWF0cml4OycsXG5cbiAgICAgICAgICAgICd2YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDsnLFxuICAgICAgICAgICAgJ3ZhcnlpbmcgZmxvYXQgdkNvbG9yOycsXG5cbiAgICAgICAgICAgICd2b2lkIG1haW4odm9pZCl7JyxcbiAgICAgICAgICAgICcgICB2ZWMyIHYgPSBhVmVydGV4UG9zaXRpb247JyxcblxuICAgICAgICAgICAgJyAgIHYueCA9IChhVmVydGV4UG9zaXRpb24ueCkgKiBjb3MoYVJvdGF0aW9uKSAtIChhVmVydGV4UG9zaXRpb24ueSkgKiBzaW4oYVJvdGF0aW9uKTsnLFxuICAgICAgICAgICAgJyAgIHYueSA9IChhVmVydGV4UG9zaXRpb24ueCkgKiBzaW4oYVJvdGF0aW9uKSArIChhVmVydGV4UG9zaXRpb24ueSkgKiBjb3MoYVJvdGF0aW9uKTsnLFxuICAgICAgICAgICAgJyAgIHYgPSB2ICsgYVBvc2l0aW9uQ29vcmQ7JyxcblxuICAgICAgICAgICAgJyAgIGdsX1Bvc2l0aW9uID0gdmVjNCgocHJvamVjdGlvbk1hdHJpeCAqIHZlYzModiwgMS4wKSkueHksIDAuMCwgMS4wKTsnLFxuXG4gICAgICAgICAgICAnICAgdlRleHR1cmVDb29yZCA9IGFUZXh0dXJlQ29vcmQ7JyxcbiAgICAgICAgICAgICcgICB2Q29sb3IgPSBhQ29sb3I7JyxcbiAgICAgICAgICAgICd9J1xuICAgICAgICBdLmpvaW4oJ1xcbicpLFxuICAgICAgICAvLyBoZWxsb1xuICAgICAgICAgW1xuICAgICAgICAgICAgJ3ByZWNpc2lvbiBsb3dwIGZsb2F0OycsXG5cbiAgICAgICAgICAgICd2YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDsnLFxuICAgICAgICAgICAgJ3ZhcnlpbmcgZmxvYXQgdkNvbG9yOycsXG5cbiAgICAgICAgICAgICd1bmlmb3JtIHNhbXBsZXIyRCB1U2FtcGxlcjsnLFxuICAgICAgICAgICAgJ3VuaWZvcm0gZmxvYXQgdUFscGhhOycsXG5cbiAgICAgICAgICAgICd2b2lkIG1haW4odm9pZCl7JyxcbiAgICAgICAgICAgICcgIHZlYzQgY29sb3IgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZUZXh0dXJlQ29vcmQpICogdkNvbG9yICogdUFscGhhOycsXG4gICAgICAgICAgICAnICBpZiAoY29sb3IuYSA9PSAwLjApIGRpc2NhcmQ7JyxcbiAgICAgICAgICAgICcgIGdsX0ZyYWdDb2xvciA9IGNvbG9yOycsXG4gICAgICAgICAgICAnfSdcbiAgICAgICAgXS5qb2luKCdcXG4nKSxcbiAgICAgICAgLy8gY3VzdG9tIHVuaWZvcm1zXG4gICAgICAgIHtcbiAgICAgICAgICAgIHVBbHBoYTogIHsgdHlwZTogJzFmJywgdmFsdWU6IDEgfVxuICAgICAgICB9LFxuICAgICAgICAvLyBjdXN0b20gYXR0cmlidXRlc1xuICAgICAgICB7XG4gICAgICAgICAgICBhUG9zaXRpb25Db29yZDogMCxcbiAgICAgICAgICAgLy8gYVNjYWxlOiAgICAgICAgIDAsXG4gICAgICAgICAgICBhUm90YXRpb246ICAgICAgMFxuICAgICAgICB9XG4gICAgKTtcblxuICAgIC8vIFRFTVAgSEFDS1xuXG59XG5cblBhcnRpY2xlU2hhZGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoVGV4dHVyZVNoYWRlci5wcm90b3R5cGUpO1xuUGFydGljbGVTaGFkZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gUGFydGljbGVTaGFkZXI7XG5cbm1vZHVsZS5leHBvcnRzID0gUGFydGljbGVTaGFkZXI7XG4iLCJ2YXIgdXRpbHMgPSByZXF1aXJlKCcuLi91dGlscycpLFxuICAgIG1hdGggPSByZXF1aXJlKCcuLi9tYXRoJyksXG4gICAgQ09OU1QgPSByZXF1aXJlKCcuLi9jb25zdCcpLFxuICAgIEV2ZW50RW1pdHRlciA9IHJlcXVpcmUoJ2V2ZW50ZW1pdHRlcjMnKTtcblxuLyoqXG4gKiBUaGUgQ2FudmFzUmVuZGVyZXIgZHJhd3MgdGhlIHNjZW5lIGFuZCBhbGwgaXRzIGNvbnRlbnQgb250byBhIDJkIGNhbnZhcy4gVGhpcyByZW5kZXJlciBzaG91bGQgYmUgdXNlZCBmb3IgYnJvd3NlcnMgdGhhdCBkbyBub3Qgc3VwcG9ydCB3ZWJHTC5cbiAqIERvbid0IGZvcmdldCB0byBhZGQgdGhlIENhbnZhc1JlbmRlcmVyLnZpZXcgdG8geW91ciBET00gb3IgeW91IHdpbGwgbm90IHNlZSBhbnl0aGluZyA6KVxuICpcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqIEBwYXJhbSBzeXN0ZW0ge3N0cmluZ30gVGhlIG5hbWUgb2YgdGhlIHN5c3RlbSB0aGlzIHJlbmRlcmVyIGlzIGZvci5cbiAqIEBwYXJhbSBbd2lkdGg9ODAwXSB7bnVtYmVyfSB0aGUgd2lkdGggb2YgdGhlIGNhbnZhcyB2aWV3XG4gKiBAcGFyYW0gW2hlaWdodD02MDBdIHtudW1iZXJ9IHRoZSBoZWlnaHQgb2YgdGhlIGNhbnZhcyB2aWV3XG4gKiBAcGFyYW0gW29wdGlvbnNdIHtvYmplY3R9IFRoZSBvcHRpb25hbCByZW5kZXJlciBwYXJhbWV0ZXJzXG4gKiBAcGFyYW0gW29wdGlvbnMudmlld10ge0hUTUxDYW52YXNFbGVtZW50fSB0aGUgY2FudmFzIHRvIHVzZSBhcyBhIHZpZXcsIG9wdGlvbmFsXG4gKiBAcGFyYW0gW29wdGlvbnMudHJhbnNwYXJlbnQ9ZmFsc2VdIHtib29sZWFufSBJZiB0aGUgcmVuZGVyIHZpZXcgaXMgdHJhbnNwYXJlbnQsIGRlZmF1bHQgZmFsc2VcbiAqIEBwYXJhbSBbb3B0aW9ucy5hdXRvUmVzaXplPWZhbHNlXSB7Ym9vbGVhbn0gSWYgdGhlIHJlbmRlciB2aWV3IGlzIGF1dG9tYXRpY2FsbHkgcmVzaXplZCwgZGVmYXVsdCBmYWxzZVxuICogQHBhcmFtIFtvcHRpb25zLmFudGlhbGlhcz1mYWxzZV0ge2Jvb2xlYW59IHNldHMgYW50aWFsaWFzIChvbmx5IGFwcGxpY2FibGUgaW4gY2hyb21lIGF0IHRoZSBtb21lbnQpXG4gKiBAcGFyYW0gW29wdGlvbnMucmVzb2x1dGlvbj0xXSB7bnVtYmVyfSB0aGUgcmVzb2x1dGlvbiBvZiB0aGUgcmVuZGVyZXIgcmV0aW5hIHdvdWxkIGJlIDJcbiAqIEBwYXJhbSBbb3B0aW9ucy5jbGVhckJlZm9yZVJlbmRlcj10cnVlXSB7Ym9vbGVhbn0gVGhpcyBzZXRzIGlmIHRoZSBDYW52YXNSZW5kZXJlciB3aWxsIGNsZWFyIHRoZSBjYW52YXMgb3JcbiAqICAgICAgbm90IGJlZm9yZSB0aGUgbmV3IHJlbmRlciBwYXNzLlxuICogQHBhcmFtIFtvcHRpb25zLmJhY2tncm91bmRDb2xvcj0weDAwMDAwMF0ge251bWJlcn0gVGhlIGJhY2tncm91bmQgY29sb3Igb2YgdGhlIHJlbmRlcmVkIGFyZWEgKHNob3duIGlmIG5vdCB0cmFuc3BhcmVudCkuXG4gKiBAcGFyYW0gW29wdGlvbnMucm91bmRQaXhlbHM9ZmFsc2VdIHtib29sZWFufSBJZiB0cnVlIFBpeGkgd2lsbCBNYXRoLmZsb29yKCkgeC95IHZhbHVlcyB3aGVuIHJlbmRlcmluZywgc3RvcHBpbmcgcGl4ZWwgaW50ZXJwb2xhdGlvbi5cbiAqL1xuZnVuY3Rpb24gU3lzdGVtUmVuZGVyZXIoc3lzdGVtLCB3aWR0aCwgaGVpZ2h0LCBvcHRpb25zKVxue1xuICAgIEV2ZW50RW1pdHRlci5jYWxsKHRoaXMpO1xuXG4gICAgdXRpbHMuc2F5SGVsbG8oc3lzdGVtKTtcblxuICAgIC8vIHByZXBhcmUgb3B0aW9uc1xuICAgIGlmIChvcHRpb25zKVxuICAgIHtcbiAgICAgICAgZm9yICh2YXIgaSBpbiBDT05TVC5ERUZBVUxUX1JFTkRFUl9PUFRJT05TKVxuICAgICAgICB7XG4gICAgICAgICAgICBpZiAodHlwZW9mIG9wdGlvbnNbaV0gPT09ICd1bmRlZmluZWQnKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIG9wdGlvbnNbaV0gPSBDT05TVC5ERUZBVUxUX1JFTkRFUl9PUFRJT05TW2ldO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIG9wdGlvbnMgPSBDT05TVC5ERUZBVUxUX1JFTkRFUl9PUFRJT05TO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoZSB0eXBlIG9mIHRoZSByZW5kZXJlci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCBQSVhJLlJFTkRFUkVSX1RZUEUuVU5LTk9XTlxuICAgICAqIEBzZWUgUElYSS5SRU5ERVJFUl9UWVBFXG4gICAgICovXG4gICAgdGhpcy50eXBlID0gQ09OU1QuUkVOREVSRVJfVFlQRS5VTktOT1dOO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHdpZHRoIG9mIHRoZSBjYW52YXMgdmlld1xuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDgwMFxuICAgICAqL1xuICAgIHRoaXMud2lkdGggPSB3aWR0aCB8fCA4MDA7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgaGVpZ2h0IG9mIHRoZSBjYW52YXMgdmlld1xuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDYwMFxuICAgICAqL1xuICAgIHRoaXMuaGVpZ2h0ID0gaGVpZ2h0IHx8IDYwMDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBjYW52YXMgZWxlbWVudCB0aGF0IGV2ZXJ5dGhpbmcgaXMgZHJhd24gdG9cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge0hUTUxDYW52YXNFbGVtZW50fVxuICAgICAqL1xuICAgIHRoaXMudmlldyA9IG9wdGlvbnMudmlldyB8fCBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdjYW52YXMnKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSByZXNvbHV0aW9uIG9mIHRoZSByZW5kZXJlclxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDFcbiAgICAgKi9cbiAgICB0aGlzLnJlc29sdXRpb24gPSBvcHRpb25zLnJlc29sdXRpb247XG5cbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIHRoZSByZW5kZXIgdmlldyBpcyB0cmFuc3BhcmVudFxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKi9cbiAgICB0aGlzLnRyYW5zcGFyZW50ID0gb3B0aW9ucy50cmFuc3BhcmVudDtcblxuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgdGhlIHJlbmRlciB2aWV3IHNob3VsZCBiZSByZXNpemVkIGF1dG9tYXRpY2FsbHlcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICovXG4gICAgdGhpcy5hdXRvUmVzaXplID0gb3B0aW9ucy5hdXRvUmVzaXplIHx8IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogVHJhY2tzIHRoZSBibGVuZCBtb2RlcyB1c2VmdWwgZm9yIHRoaXMgcmVuZGVyZXIuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtvYmplY3Q8c3RyaW5nLCBtaXhlZD59XG4gICAgICovXG4gICAgdGhpcy5ibGVuZE1vZGVzID0gbnVsbDtcblxuICAgIC8qKlxuICAgICAqIFRoZSB2YWx1ZSBvZiB0aGUgcHJlc2VydmVEcmF3aW5nQnVmZmVyIGZsYWcgYWZmZWN0cyB3aGV0aGVyIG9yIG5vdCB0aGUgY29udGVudHMgb2YgdGhlIHN0ZW5jaWwgYnVmZmVyIGlzIHJldGFpbmVkIGFmdGVyIHJlbmRlcmluZy5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICovXG4gICAgdGhpcy5wcmVzZXJ2ZURyYXdpbmdCdWZmZXIgPSBvcHRpb25zLnByZXNlcnZlRHJhd2luZ0J1ZmZlcjtcblxuICAgIC8qKlxuICAgICAqIFRoaXMgc2V0cyBpZiB0aGUgQ2FudmFzUmVuZGVyZXIgd2lsbCBjbGVhciB0aGUgY2FudmFzIG9yIG5vdCBiZWZvcmUgdGhlIG5ldyByZW5kZXIgcGFzcy5cbiAgICAgKiBJZiB0aGUgc2NlbmUgaXMgTk9UIHRyYW5zcGFyZW50IFBpeGkgd2lsbCB1c2UgYSBjYW52YXMgc2l6ZWQgZmlsbFJlY3Qgb3BlcmF0aW9uIGV2ZXJ5IGZyYW1lIHRvIHNldCB0aGUgY2FudmFzIGJhY2tncm91bmQgY29sb3IuXG4gICAgICogSWYgdGhlIHNjZW5lIGlzIHRyYW5zcGFyZW50IFBpeGkgd2lsbCB1c2UgY2xlYXJSZWN0IHRvIGNsZWFyIHRoZSBjYW52YXMgZXZlcnkgZnJhbWUuXG4gICAgICogRGlzYWJsZSB0aGlzIGJ5IHNldHRpbmcgdGhpcyB0byBmYWxzZS4gRm9yIGV4YW1wbGUgaWYgeW91ciBnYW1lIGhhcyBhIGNhbnZhcyBmaWxsaW5nIGJhY2tncm91bmQgaW1hZ2UgeW91IG9mdGVuIGRvbid0IG5lZWQgdGhpcyBzZXQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqIEBkZWZhdWx0XG4gICAgICovXG4gICAgdGhpcy5jbGVhckJlZm9yZVJlbmRlciA9IG9wdGlvbnMuY2xlYXJCZWZvcmVSZW5kZXI7XG5cbiAgICAvKipcbiAgICAgKiBJZiB0cnVlIFBpeGkgd2lsbCBNYXRoLmZsb29yKCkgeC95IHZhbHVlcyB3aGVuIHJlbmRlcmluZywgc3RvcHBpbmcgcGl4ZWwgaW50ZXJwb2xhdGlvbi5cbiAgICAgKiBIYW5keSBmb3IgY3Jpc3AgcGl4ZWwgYXJ0IGFuZCBzcGVlZCBvbiBsZWdhY3kgZGV2aWNlcy5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICovXG4gICAgdGhpcy5yb3VuZFBpeGVscyA9IG9wdGlvbnMucm91bmRQaXhlbHM7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYmFja2dyb3VuZCBjb2xvciBhcyBhIG51bWJlci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX2JhY2tncm91bmRDb2xvciA9IDB4MDAwMDAwO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGJhY2tncm91bmQgY29sb3IgYXMgYW4gW1IsIEcsIEJdIGFycmF5LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyW119XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9iYWNrZ3JvdW5kQ29sb3JSZ2JhID0gWzAsIDAsIDAsIDBdO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGJhY2tncm91bmQgY29sb3IgYXMgYSBzdHJpbmcuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtzdHJpbmd9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9iYWNrZ3JvdW5kQ29sb3JTdHJpbmcgPSAnIzAwMDAwMCc7XG5cbiAgICB0aGlzLmJhY2tncm91bmRDb2xvciA9IG9wdGlvbnMuYmFja2dyb3VuZENvbG9yIHx8IHRoaXMuX2JhY2tncm91bmRDb2xvcjsgLy8gcnVuIGJnIGNvbG9yIHNldHRlclxuXG4gICAgLyoqXG4gICAgICogVGhpcyB0ZW1wb3JhcnkgZGlzcGxheSBvYmplY3QgdXNlZCBhcyB0aGUgcGFyZW50IG9mIHRoZSBjdXJyZW50bHkgYmVpbmcgcmVuZGVyZWQgaXRlbVxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5EaXNwbGF5T2JqZWN0fVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fdGVtcERpc3BsYXlPYmplY3RQYXJlbnQgPSB7d29ybGRUcmFuc2Zvcm06bmV3IG1hdGguTWF0cml4KCksIHdvcmxkQWxwaGE6MSwgY2hpbGRyZW46W119O1xuXG4gICAgLyoqXG4gICAgICogVGhlIGxhc3Qgcm9vdCBvYmplY3QgdGhhdCB0aGUgcmVuZGVyZXIgdHJpZWQgdG8gcmVuZGVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5EaXNwbGF5T2JqZWN0fVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fbGFzdE9iamVjdFJlbmRlcmVkID0gdGhpcy5fdGVtcERpc3BsYXlPYmplY3RQYXJlbnQ7XG59XG5cbi8vIGNvbnN0cnVjdG9yXG5TeXN0ZW1SZW5kZXJlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKEV2ZW50RW1pdHRlci5wcm90b3R5cGUpO1xuU3lzdGVtUmVuZGVyZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gU3lzdGVtUmVuZGVyZXI7XG5tb2R1bGUuZXhwb3J0cyA9IFN5c3RlbVJlbmRlcmVyO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhTeXN0ZW1SZW5kZXJlci5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBUaGUgYmFja2dyb3VuZCBjb2xvciB0byBmaWxsIGlmIG5vdCB0cmFuc3BhcmVudFxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLlN5c3RlbVJlbmRlcmVyI1xuICAgICAqL1xuICAgIGJhY2tncm91bmRDb2xvcjpcbiAgICB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2JhY2tncm91bmRDb2xvcjtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLl9iYWNrZ3JvdW5kQ29sb3IgPSB2YWw7XG4gICAgICAgICAgICB0aGlzLl9iYWNrZ3JvdW5kQ29sb3JTdHJpbmcgPSB1dGlscy5oZXgyc3RyaW5nKHZhbCk7XG4gICAgICAgICAgICB1dGlscy5oZXgycmdiKHZhbCwgdGhpcy5fYmFja2dyb3VuZENvbG9yUmdiYSk7XG4gICAgICAgIH1cbiAgICB9XG59KTtcblxuLyoqXG4gKiBSZXNpemVzIHRoZSBjYW52YXMgdmlldyB0byB0aGUgc3BlY2lmaWVkIHdpZHRoIGFuZCBoZWlnaHRcbiAqXG4gKiBAcGFyYW0gd2lkdGgge251bWJlcn0gdGhlIG5ldyB3aWR0aCBvZiB0aGUgY2FudmFzIHZpZXdcbiAqIEBwYXJhbSBoZWlnaHQge251bWJlcn0gdGhlIG5ldyBoZWlnaHQgb2YgdGhlIGNhbnZhcyB2aWV3XG4gKi9cblN5c3RlbVJlbmRlcmVyLnByb3RvdHlwZS5yZXNpemUgPSBmdW5jdGlvbiAod2lkdGgsIGhlaWdodCkge1xuICAgIHRoaXMud2lkdGggPSB3aWR0aCAqIHRoaXMucmVzb2x1dGlvbjtcbiAgICB0aGlzLmhlaWdodCA9IGhlaWdodCAqIHRoaXMucmVzb2x1dGlvbjtcblxuICAgIHRoaXMudmlldy53aWR0aCA9IHRoaXMud2lkdGg7XG4gICAgdGhpcy52aWV3LmhlaWdodCA9IHRoaXMuaGVpZ2h0O1xuXG4gICAgaWYgKHRoaXMuYXV0b1Jlc2l6ZSlcbiAgICB7XG4gICAgICAgIHRoaXMudmlldy5zdHlsZS53aWR0aCA9IHRoaXMud2lkdGggLyB0aGlzLnJlc29sdXRpb24gKyAncHgnO1xuICAgICAgICB0aGlzLnZpZXcuc3R5bGUuaGVpZ2h0ID0gdGhpcy5oZWlnaHQgLyB0aGlzLnJlc29sdXRpb24gKyAncHgnO1xuICAgIH1cbn07XG5cbi8qKlxuICogUmVtb3ZlcyBldmVyeXRoaW5nIGZyb20gdGhlIHJlbmRlcmVyIGFuZCBvcHRpb25hbGx5IHJlbW92ZXMgdGhlIENhbnZhcyBET00gZWxlbWVudC5cbiAqXG4gKiBAcGFyYW0gW3JlbW92ZVZpZXc9ZmFsc2VdIHtib29sZWFufSBSZW1vdmVzIHRoZSBDYW52YXMgZWxlbWVudCBmcm9tIHRoZSBET00uXG4gKi9cblN5c3RlbVJlbmRlcmVyLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKHJlbW92ZVZpZXcpIHtcbiAgICBpZiAocmVtb3ZlVmlldyAmJiB0aGlzLnZpZXcucGFyZW50Tm9kZSlcbiAgICB7XG4gICAgICAgIHRoaXMudmlldy5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHRoaXMudmlldyk7XG4gICAgfVxuXG4gICAgdGhpcy50eXBlID0gQ09OU1QuUkVOREVSRVJfVFlQRS5VTktOT1dOO1xuXG4gICAgdGhpcy53aWR0aCA9IDA7XG4gICAgdGhpcy5oZWlnaHQgPSAwO1xuXG4gICAgdGhpcy52aWV3ID0gbnVsbDtcblxuICAgIHRoaXMucmVzb2x1dGlvbiA9IDA7XG5cbiAgICB0aGlzLnRyYW5zcGFyZW50ID0gZmFsc2U7XG5cbiAgICB0aGlzLmF1dG9SZXNpemUgPSBmYWxzZTtcblxuICAgIHRoaXMuYmxlbmRNb2RlcyA9IG51bGw7XG5cbiAgICB0aGlzLnByZXNlcnZlRHJhd2luZ0J1ZmZlciA9IGZhbHNlO1xuICAgIHRoaXMuY2xlYXJCZWZvcmVSZW5kZXIgPSBmYWxzZTtcblxuICAgIHRoaXMucm91bmRQaXhlbHMgPSBmYWxzZTtcblxuICAgIHRoaXMuX2JhY2tncm91bmRDb2xvciA9IDA7XG4gICAgdGhpcy5fYmFja2dyb3VuZENvbG9yUmdiYSA9IG51bGw7XG4gICAgdGhpcy5fYmFja2dyb3VuZENvbG9yU3RyaW5nID0gbnVsbDtcbn07XG4iLCJ2YXIgU3lzdGVtUmVuZGVyZXIgPSByZXF1aXJlKCcuLi9TeXN0ZW1SZW5kZXJlcicpLFxuICAgIENhbnZhc01hc2tNYW5hZ2VyID0gcmVxdWlyZSgnLi91dGlscy9DYW52YXNNYXNrTWFuYWdlcicpLFxuICAgIHV0aWxzID0gcmVxdWlyZSgnLi4vLi4vdXRpbHMnKSxcbiAgICBtYXRoID0gcmVxdWlyZSgnLi4vLi4vbWF0aCcpLFxuICAgIENPTlNUID0gcmVxdWlyZSgnLi4vLi4vY29uc3QnKTtcblxuLyoqXG4gKiBUaGUgQ2FudmFzUmVuZGVyZXIgZHJhd3MgdGhlIHNjZW5lIGFuZCBhbGwgaXRzIGNvbnRlbnQgb250byBhIDJkIGNhbnZhcy4gVGhpcyByZW5kZXJlciBzaG91bGQgYmUgdXNlZCBmb3IgYnJvd3NlcnMgdGhhdCBkbyBub3Qgc3VwcG9ydCB3ZWJHTC5cbiAqIERvbid0IGZvcmdldCB0byBhZGQgdGhlIENhbnZhc1JlbmRlcmVyLnZpZXcgdG8geW91ciBET00gb3IgeW91IHdpbGwgbm90IHNlZSBhbnl0aGluZyA6KVxuICpcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqIEBleHRlbmRzIFBJWEkuU3lzdGVtUmVuZGVyZXJcbiAqIEBwYXJhbSBbd2lkdGg9ODAwXSB7bnVtYmVyfSB0aGUgd2lkdGggb2YgdGhlIGNhbnZhcyB2aWV3XG4gKiBAcGFyYW0gW2hlaWdodD02MDBdIHtudW1iZXJ9IHRoZSBoZWlnaHQgb2YgdGhlIGNhbnZhcyB2aWV3XG4gKiBAcGFyYW0gW29wdGlvbnNdIHtvYmplY3R9IFRoZSBvcHRpb25hbCByZW5kZXJlciBwYXJhbWV0ZXJzXG4gKiBAcGFyYW0gW29wdGlvbnMudmlld10ge0hUTUxDYW52YXNFbGVtZW50fSB0aGUgY2FudmFzIHRvIHVzZSBhcyBhIHZpZXcsIG9wdGlvbmFsXG4gKiBAcGFyYW0gW29wdGlvbnMudHJhbnNwYXJlbnQ9ZmFsc2VdIHtib29sZWFufSBJZiB0aGUgcmVuZGVyIHZpZXcgaXMgdHJhbnNwYXJlbnQsIGRlZmF1bHQgZmFsc2VcbiAqIEBwYXJhbSBbb3B0aW9ucy5hdXRvUmVzaXplPWZhbHNlXSB7Ym9vbGVhbn0gSWYgdGhlIHJlbmRlciB2aWV3IGlzIGF1dG9tYXRpY2FsbHkgcmVzaXplZCwgZGVmYXVsdCBmYWxzZVxuICogQHBhcmFtIFtvcHRpb25zLmFudGlhbGlhcz1mYWxzZV0ge2Jvb2xlYW59IHNldHMgYW50aWFsaWFzIChvbmx5IGFwcGxpY2FibGUgaW4gY2hyb21lIGF0IHRoZSBtb21lbnQpXG4gKiBAcGFyYW0gW29wdGlvbnMucmVzb2x1dGlvbj0xXSB7bnVtYmVyfSB0aGUgcmVzb2x1dGlvbiBvZiB0aGUgcmVuZGVyZXIgcmV0aW5hIHdvdWxkIGJlIDJcbiAqIEBwYXJhbSBbb3B0aW9ucy5jbGVhckJlZm9yZVJlbmRlcj10cnVlXSB7Ym9vbGVhbn0gVGhpcyBzZXRzIGlmIHRoZSBDYW52YXNSZW5kZXJlciB3aWxsIGNsZWFyIHRoZSBjYW52YXMgb3JcbiAqICAgICAgbm90IGJlZm9yZSB0aGUgbmV3IHJlbmRlciBwYXNzLlxuICogQHBhcmFtIFtvcHRpb25zLnJvdW5kUGl4ZWxzPWZhbHNlXSB7Ym9vbGVhbn0gSWYgdHJ1ZSBQaXhpIHdpbGwgTWF0aC5mbG9vcigpIHgveSB2YWx1ZXMgd2hlbiByZW5kZXJpbmcsIHN0b3BwaW5nIHBpeGVsIGludGVycG9sYXRpb24uXG4gKi9cbmZ1bmN0aW9uIENhbnZhc1JlbmRlcmVyKHdpZHRoLCBoZWlnaHQsIG9wdGlvbnMpXG57XG4gICAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG5cbiAgICBTeXN0ZW1SZW5kZXJlci5jYWxsKHRoaXMsICdDYW52YXMnLCB3aWR0aCwgaGVpZ2h0LCBvcHRpb25zKTtcblxuICAgIHRoaXMudHlwZSA9IENPTlNULlJFTkRFUkVSX1RZUEUuQ0FOVkFTO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGNhbnZhcyAyZCBjb250ZXh0IHRoYXQgZXZlcnl0aGluZyBpcyBkcmF3biB3aXRoLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEfVxuICAgICAqL1xuICAgIHRoaXMuY29udGV4dCA9IHRoaXMudmlldy5nZXRDb250ZXh0KCcyZCcsIHsgYWxwaGE6IHRoaXMudHJhbnNwYXJlbnQgfSk7XG5cbiAgICAvKipcbiAgICAgKiBCb29sZWFuIGZsYWcgY29udHJvbGxpbmcgY2FudmFzIHJlZnJlc2guXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqL1xuICAgIHRoaXMucmVmcmVzaCA9IHRydWU7XG5cbiAgICAvKipcbiAgICAgKiBJbnN0YW5jZSBvZiBhIENhbnZhc01hc2tNYW5hZ2VyLCBoYW5kbGVzIG1hc2tpbmcgd2hlbiB1c2luZyB0aGUgY2FudmFzIHJlbmRlcmVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5DYW52YXNNYXNrTWFuYWdlcn1cbiAgICAgKi9cbiAgICB0aGlzLm1hc2tNYW5hZ2VyID0gbmV3IENhbnZhc01hc2tNYW5hZ2VyKCk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgY2FudmFzIHByb3BlcnR5IHVzZWQgdG8gc2V0IHRoZSBjYW52YXMgc21vb3RoaW5nIHByb3BlcnR5LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7c3RyaW5nfVxuICAgICAqL1xuICAgIHRoaXMuc21vb3RoUHJvcGVydHkgPSAnaW1hZ2VTbW9vdGhpbmdFbmFibGVkJztcblxuICAgIGlmICghdGhpcy5jb250ZXh0LmltYWdlU21vb3RoaW5nRW5hYmxlZClcbiAgICB7XG4gICAgICAgIGlmICh0aGlzLmNvbnRleHQud2Via2l0SW1hZ2VTbW9vdGhpbmdFbmFibGVkKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnNtb290aFByb3BlcnR5ID0gJ3dlYmtpdEltYWdlU21vb3RoaW5nRW5hYmxlZCc7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodGhpcy5jb250ZXh0Lm1vekltYWdlU21vb3RoaW5nRW5hYmxlZClcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5zbW9vdGhQcm9wZXJ0eSA9ICdtb3pJbWFnZVNtb290aGluZ0VuYWJsZWQnO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHRoaXMuY29udGV4dC5vSW1hZ2VTbW9vdGhpbmdFbmFibGVkKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnNtb290aFByb3BlcnR5ID0gJ29JbWFnZVNtb290aGluZ0VuYWJsZWQnO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHRoaXMuY29udGV4dC5tc0ltYWdlU21vb3RoaW5nRW5hYmxlZClcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5zbW9vdGhQcm9wZXJ0eSA9ICdtc0ltYWdlU21vb3RoaW5nRW5hYmxlZCc7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLmluaXRQbHVnaW5zKCk7XG5cbiAgICB0aGlzLl9tYXBCbGVuZE1vZGVzKCk7XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIHRlbXBvcmFyeSBkaXNwbGF5IG9iamVjdCB1c2VkIGFzIHRoZSBwYXJlbnQgb2YgdGhlIGN1cnJlbnRseSBiZWluZyByZW5kZXJlZCBpdGVtXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLkRpc3BsYXlPYmplY3R9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl90ZW1wRGlzcGxheU9iamVjdFBhcmVudCA9IHtcbiAgICAgICAgd29ybGRUcmFuc2Zvcm06IG5ldyBtYXRoLk1hdHJpeCgpLFxuICAgICAgICB3b3JsZEFscGhhOiAxXG4gICAgfTtcblxuXG4gICAgdGhpcy5yZXNpemUod2lkdGgsIGhlaWdodCk7XG59XG5cbi8vIGNvbnN0cnVjdG9yXG5DYW52YXNSZW5kZXJlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFN5c3RlbVJlbmRlcmVyLnByb3RvdHlwZSk7XG5DYW52YXNSZW5kZXJlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBDYW52YXNSZW5kZXJlcjtcbm1vZHVsZS5leHBvcnRzID0gQ2FudmFzUmVuZGVyZXI7XG51dGlscy5wbHVnaW5UYXJnZXQubWl4aW4oQ2FudmFzUmVuZGVyZXIpO1xuXG4vKipcbiAqIFJlbmRlcnMgdGhlIG9iamVjdCB0byB0aGlzIGNhbnZhcyB2aWV3XG4gKlxuICogQHBhcmFtIG9iamVjdCB7UElYSS5EaXNwbGF5T2JqZWN0fSB0aGUgb2JqZWN0IHRvIGJlIHJlbmRlcmVkXG4gKi9cbkNhbnZhc1JlbmRlcmVyLnByb3RvdHlwZS5yZW5kZXIgPSBmdW5jdGlvbiAob2JqZWN0KVxue1xuICAgIHRoaXMuZW1pdCgncHJlcmVuZGVyJyk7XG5cbiAgICB2YXIgY2FjaGVQYXJlbnQgPSBvYmplY3QucGFyZW50O1xuXG4gICAgdGhpcy5fbGFzdE9iamVjdFJlbmRlcmVkID0gb2JqZWN0O1xuXG4gICAgb2JqZWN0LnBhcmVudCA9IHRoaXMuX3RlbXBEaXNwbGF5T2JqZWN0UGFyZW50O1xuXG4gICAgLy8gdXBkYXRlIHRoZSBzY2VuZSBncmFwaFxuICAgIG9iamVjdC51cGRhdGVUcmFuc2Zvcm0oKTtcblxuICAgIG9iamVjdC5wYXJlbnQgPSBjYWNoZVBhcmVudDtcblxuICAgIHRoaXMuY29udGV4dC5zZXRUcmFuc2Zvcm0oMSwgMCwgMCwgMSwgMCwgMCk7XG5cbiAgICB0aGlzLmNvbnRleHQuZ2xvYmFsQWxwaGEgPSAxO1xuXG4gICAgdGhpcy5jb250ZXh0Lmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbiA9IHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5OT1JNQUxdO1xuXG4gICAgaWYgKG5hdmlnYXRvci5pc0NvY29vbkpTICYmIHRoaXMudmlldy5zY3JlZW5jYW52YXMpXG4gICAge1xuICAgICAgICB0aGlzLmNvbnRleHQuZmlsbFN0eWxlID0gJ2JsYWNrJztcbiAgICAgICAgdGhpcy5jb250ZXh0LmNsZWFyKCk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuY2xlYXJCZWZvcmVSZW5kZXIpXG4gICAge1xuICAgICAgICBpZiAodGhpcy50cmFuc3BhcmVudClcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5jb250ZXh0LmNsZWFyUmVjdCgwLCAwLCB0aGlzLndpZHRoLCB0aGlzLmhlaWdodCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmNvbnRleHQuZmlsbFN0eWxlID0gdGhpcy5fYmFja2dyb3VuZENvbG9yU3RyaW5nO1xuICAgICAgICAgICAgdGhpcy5jb250ZXh0LmZpbGxSZWN0KDAsIDAsIHRoaXMud2lkdGggLCB0aGlzLmhlaWdodCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLnJlbmRlckRpc3BsYXlPYmplY3Qob2JqZWN0LCB0aGlzLmNvbnRleHQpO1xuXG4gICAgdGhpcy5lbWl0KCdwb3N0cmVuZGVyJyk7XG59O1xuXG4vKipcbiAqIFJlbW92ZXMgZXZlcnl0aGluZyBmcm9tIHRoZSByZW5kZXJlciBhbmQgb3B0aW9uYWxseSByZW1vdmVzIHRoZSBDYW52YXMgRE9NIGVsZW1lbnQuXG4gKlxuICogQHBhcmFtIFtyZW1vdmVWaWV3PWZhbHNlXSB7Ym9vbGVhbn0gUmVtb3ZlcyB0aGUgQ2FudmFzIGVsZW1lbnQgZnJvbSB0aGUgRE9NLlxuICovXG5DYW52YXNSZW5kZXJlci5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uIChyZW1vdmVWaWV3KVxue1xuICAgIHRoaXMuZGVzdHJveVBsdWdpbnMoKTtcblxuICAgIC8vIGNhbGwgdGhlIGJhc2UgZGVzdHJveVxuICAgIFN5c3RlbVJlbmRlcmVyLnByb3RvdHlwZS5kZXN0cm95LmNhbGwodGhpcywgcmVtb3ZlVmlldyk7XG5cbiAgICB0aGlzLmNvbnRleHQgPSBudWxsO1xuXG4gICAgdGhpcy5yZWZyZXNoID0gdHJ1ZTtcblxuICAgIHRoaXMubWFza01hbmFnZXIuZGVzdHJveSgpO1xuICAgIHRoaXMubWFza01hbmFnZXIgPSBudWxsO1xuXG4gICAgdGhpcy5zbW9vdGhQcm9wZXJ0eSA9IG51bGw7XG59O1xuXG4vKipcbiAqIFJlbmRlcnMgYSBkaXNwbGF5IG9iamVjdFxuICpcbiAqIEBwYXJhbSBkaXNwbGF5T2JqZWN0IHtQSVhJLkRpc3BsYXlPYmplY3R9IFRoZSBkaXNwbGF5T2JqZWN0IHRvIHJlbmRlclxuICogQHByaXZhdGVcbiAqL1xuQ2FudmFzUmVuZGVyZXIucHJvdG90eXBlLnJlbmRlckRpc3BsYXlPYmplY3QgPSBmdW5jdGlvbiAoZGlzcGxheU9iamVjdCwgY29udGV4dClcbntcbiAgICB2YXIgdGVtcENvbnRleHQgPSB0aGlzLmNvbnRleHQ7XG5cbiAgICB0aGlzLmNvbnRleHQgPSBjb250ZXh0O1xuICAgIGRpc3BsYXlPYmplY3QucmVuZGVyQ2FudmFzKHRoaXMpO1xuICAgIHRoaXMuY29udGV4dCA9IHRlbXBDb250ZXh0O1xufTtcblxuLyoqXG4gKiBAZXh0ZW5kcyBQSVhJLlN5c3RlbVJlbmRlcmVyI3Jlc2l6ZVxuICpcbiAqIEBwYXJhbSB7bnVtYmVyfSB3XG4gKiBAcGFyYW0ge251bWJlcn0gaFxuICovXG5DYW52YXNSZW5kZXJlci5wcm90b3R5cGUucmVzaXplID0gZnVuY3Rpb24gKHcsIGgpXG57XG4gICAgU3lzdGVtUmVuZGVyZXIucHJvdG90eXBlLnJlc2l6ZS5jYWxsKHRoaXMsIHcsIGgpO1xuXG4gICAgLy9yZXNldCB0aGUgc2NhbGUgbW9kZS4uIG9kZGx5IHRoaXMgc2VlbXMgdG8gYmUgcmVzZXQgd2hlbiB0aGUgY2FudmFzIGlzIHJlc2l6ZWQuXG4gICAgLy9zdXJlbHkgYSBicm93c2VyIGJ1Zz8/IExldCBwaXhpIGZpeCB0aGF0IGZvciB5b3UuLlxuICAgIGlmKHRoaXMuc21vb3RoUHJvcGVydHkpXG4gICAge1xuICAgICAgICB0aGlzLmNvbnRleHRbdGhpcy5zbW9vdGhQcm9wZXJ0eV0gPSAoQ09OU1QuU0NBTEVfTU9ERVMuREVGQVVMVCA9PT0gQ09OU1QuU0NBTEVfTU9ERVMuTElORUFSKTtcbiAgICB9XG5cbn07XG5cbi8qKlxuICogTWFwcyBQaXhpIGJsZW5kIG1vZGVzIHRvIGNhbnZhcyBibGVuZCBtb2Rlcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5DYW52YXNSZW5kZXJlci5wcm90b3R5cGUuX21hcEJsZW5kTW9kZXMgPSBmdW5jdGlvbiAoKVxue1xuICAgIGlmICghdGhpcy5ibGVuZE1vZGVzKVxuICAgIHtcbiAgICAgICAgdGhpcy5ibGVuZE1vZGVzID0ge307XG5cbiAgICAgICAgaWYgKHV0aWxzLmNhblVzZU5ld0NhbnZhc0JsZW5kTW9kZXMoKSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5ibGVuZE1vZGVzW0NPTlNULkJMRU5EX01PREVTLk5PUk1BTF0gICAgICAgID0gJ3NvdXJjZS1vdmVyJztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5BRERdICAgICAgICAgICA9ICdsaWdodGVyJzsgLy9JUyBUSElTIE9LPz8/XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuTVVMVElQTFldICAgICAgPSAnbXVsdGlwbHknO1xuICAgICAgICAgICAgdGhpcy5ibGVuZE1vZGVzW0NPTlNULkJMRU5EX01PREVTLlNDUkVFTl0gICAgICAgID0gJ3NjcmVlbic7XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuT1ZFUkxBWV0gICAgICAgPSAnb3ZlcmxheSc7XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuREFSS0VOXSAgICAgICAgPSAnZGFya2VuJztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5MSUdIVEVOXSAgICAgICA9ICdsaWdodGVuJztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5DT0xPUl9ET0RHRV0gICA9ICdjb2xvci1kb2RnZSc7XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuQ09MT1JfQlVSTl0gICAgPSAnY29sb3ItYnVybic7XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuSEFSRF9MSUdIVF0gICAgPSAnaGFyZC1saWdodCc7XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuU09GVF9MSUdIVF0gICAgPSAnc29mdC1saWdodCc7XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuRElGRkVSRU5DRV0gICAgPSAnZGlmZmVyZW5jZSc7XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuRVhDTFVTSU9OXSAgICAgPSAnZXhjbHVzaW9uJztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5IVUVdICAgICAgICAgICA9ICdodWUnO1xuICAgICAgICAgICAgdGhpcy5ibGVuZE1vZGVzW0NPTlNULkJMRU5EX01PREVTLlNBVFVSQVRJT05dICAgID0gJ3NhdHVyYXRlJztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5DT0xPUl0gICAgICAgICA9ICdjb2xvcic7XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuTFVNSU5PU0lUWV0gICAgPSAnbHVtaW5vc2l0eSc7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgICAvLyB0aGlzIG1lYW5zIHRoYXQgdGhlIGJyb3dzZXIgZG9lcyBub3Qgc3VwcG9ydCB0aGUgY29vbCBuZXcgYmxlbmQgbW9kZXMgaW4gY2FudmFzICdjb3VnaCcgaWUgJ2NvdWdoJ1xuICAgICAgICAgICAgdGhpcy5ibGVuZE1vZGVzW0NPTlNULkJMRU5EX01PREVTLk5PUk1BTF0gICAgICAgID0gJ3NvdXJjZS1vdmVyJztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5BRERdICAgICAgICAgICA9ICdsaWdodGVyJzsgLy9JUyBUSElTIE9LPz8/XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuTVVMVElQTFldICAgICAgPSAnc291cmNlLW92ZXInO1xuICAgICAgICAgICAgdGhpcy5ibGVuZE1vZGVzW0NPTlNULkJMRU5EX01PREVTLlNDUkVFTl0gICAgICAgID0gJ3NvdXJjZS1vdmVyJztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5PVkVSTEFZXSAgICAgICA9ICdzb3VyY2Utb3Zlcic7XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuREFSS0VOXSAgICAgICAgPSAnc291cmNlLW92ZXInO1xuICAgICAgICAgICAgdGhpcy5ibGVuZE1vZGVzW0NPTlNULkJMRU5EX01PREVTLkxJR0hURU5dICAgICAgID0gJ3NvdXJjZS1vdmVyJztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5DT0xPUl9ET0RHRV0gICA9ICdzb3VyY2Utb3Zlcic7XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuQ09MT1JfQlVSTl0gICAgPSAnc291cmNlLW92ZXInO1xuICAgICAgICAgICAgdGhpcy5ibGVuZE1vZGVzW0NPTlNULkJMRU5EX01PREVTLkhBUkRfTElHSFRdICAgID0gJ3NvdXJjZS1vdmVyJztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5TT0ZUX0xJR0hUXSAgICA9ICdzb3VyY2Utb3Zlcic7XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuRElGRkVSRU5DRV0gICAgPSAnc291cmNlLW92ZXInO1xuICAgICAgICAgICAgdGhpcy5ibGVuZE1vZGVzW0NPTlNULkJMRU5EX01PREVTLkVYQ0xVU0lPTl0gICAgID0gJ3NvdXJjZS1vdmVyJztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5IVUVdICAgICAgICAgICA9ICdzb3VyY2Utb3Zlcic7XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuU0FUVVJBVElPTl0gICAgPSAnc291cmNlLW92ZXInO1xuICAgICAgICAgICAgdGhpcy5ibGVuZE1vZGVzW0NPTlNULkJMRU5EX01PREVTLkNPTE9SXSAgICAgICAgID0gJ3NvdXJjZS1vdmVyJztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5MVU1JTk9TSVRZXSAgICA9ICdzb3VyY2Utb3Zlcic7XG4gICAgICAgIH1cbiAgICB9XG59O1xuIiwiLyoqXG4gKiBDcmVhdGVzIGEgQ2FudmFzIGVsZW1lbnQgb2YgdGhlIGdpdmVuIHNpemUuXG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIHdpZHRoIHtudW1iZXJ9IHRoZSB3aWR0aCBmb3IgdGhlIG5ld2x5IGNyZWF0ZWQgY2FudmFzXG4gKiBAcGFyYW0gaGVpZ2h0IHtudW1iZXJ9IHRoZSBoZWlnaHQgZm9yIHRoZSBuZXdseSBjcmVhdGVkIGNhbnZhc1xuICovXG5mdW5jdGlvbiBDYW52YXNCdWZmZXIod2lkdGgsIGhlaWdodClcbntcbiAgICAvKipcbiAgICAgKiBUaGUgQ2FudmFzIG9iamVjdCB0aGF0IGJlbG9uZ3MgdG8gdGhpcyBDYW52YXNCdWZmZXIuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtIVE1MQ2FudmFzRWxlbWVudH1cbiAgICAgKi9cbiAgICB0aGlzLmNhbnZhcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NhbnZhcycpO1xuXG4gICAgLyoqXG4gICAgICogQSBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQgb2JqZWN0IHJlcHJlc2VudGluZyBhIHR3by1kaW1lbnNpb25hbCByZW5kZXJpbmcgY29udGV4dC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRH1cbiAgICAgKi9cbiAgICB0aGlzLmNvbnRleHQgPSB0aGlzLmNhbnZhcy5nZXRDb250ZXh0KCcyZCcpO1xuXG4gICAgdGhpcy5jYW52YXMud2lkdGggPSB3aWR0aDtcbiAgICB0aGlzLmNhbnZhcy5oZWlnaHQgPSBoZWlnaHQ7XG59XG5cbkNhbnZhc0J1ZmZlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBDYW52YXNCdWZmZXI7XG5tb2R1bGUuZXhwb3J0cyA9IENhbnZhc0J1ZmZlcjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoQ2FudmFzQnVmZmVyLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFRoZSB3aWR0aCBvZiB0aGUgY2FudmFzIGJ1ZmZlciBpbiBwaXhlbHMuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuQ2FudmFzQnVmZmVyI1xuICAgICAqL1xuICAgIHdpZHRoOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY2FudmFzLndpZHRoO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWwpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuY2FudmFzLndpZHRoID0gdmFsO1xuICAgICAgICB9XG4gICAgfSxcbiAgICAvKipcbiAgICAgKiBUaGUgaGVpZ2h0IG9mIHRoZSBjYW52YXMgYnVmZmVyIGluIHBpeGVscy5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5DYW52YXNCdWZmZXIjXG4gICAgICovXG4gICAgaGVpZ2h0OiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY2FudmFzLmhlaWdodDtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmNhbnZhcy5oZWlnaHQgPSB2YWw7XG4gICAgICAgIH1cbiAgICB9XG59KTtcblxuLyoqXG4gKiBDbGVhcnMgdGhlIGNhbnZhcyB0aGF0IHdhcyBjcmVhdGVkIGJ5IHRoZSBDYW52YXNCdWZmZXIgY2xhc3MuXG4gKlxuICogQHByaXZhdGVcbiAqL1xuQ2FudmFzQnVmZmVyLnByb3RvdHlwZS5jbGVhciA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy5jb250ZXh0LnNldFRyYW5zZm9ybSgxLCAwLCAwLCAxLCAwLCAwKTtcbiAgICB0aGlzLmNvbnRleHQuY2xlYXJSZWN0KDAsMCwgdGhpcy5jYW52YXMud2lkdGgsIHRoaXMuY2FudmFzLmhlaWdodCk7XG59O1xuXG4vKipcbiAqIFJlc2l6ZXMgdGhlIGNhbnZhcyB0byB0aGUgc3BlY2lmaWVkIHdpZHRoIGFuZCBoZWlnaHQuXG4gKlxuICogQHBhcmFtIHdpZHRoIHtudW1iZXJ9IHRoZSBuZXcgd2lkdGggb2YgdGhlIGNhbnZhc1xuICogQHBhcmFtIGhlaWdodCB7bnVtYmVyfSB0aGUgbmV3IGhlaWdodCBvZiB0aGUgY2FudmFzXG4gKi9cbkNhbnZhc0J1ZmZlci5wcm90b3R5cGUucmVzaXplID0gZnVuY3Rpb24gKHdpZHRoLCBoZWlnaHQpXG57XG4gICAgdGhpcy5jYW52YXMud2lkdGggPSB3aWR0aDtcbiAgICB0aGlzLmNhbnZhcy5oZWlnaHQgPSBoZWlnaHQ7XG59O1xuXG4vKipcbiAqIERlc3Ryb3lzIHRoaXMgY2FudmFzLlxuICpcbiAqL1xuQ2FudmFzQnVmZmVyLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLmNvbnRleHQgPSBudWxsO1xuICAgIHRoaXMuY2FudmFzID0gbnVsbDtcbn07XG4iLCJ2YXIgQ09OU1QgPSByZXF1aXJlKCcuLi8uLi8uLi9jb25zdCcpO1xuXG4vKipcbiAqIEEgc2V0IG9mIGZ1bmN0aW9ucyB1c2VkIGJ5IHRoZSBjYW52YXMgcmVuZGVyZXIgdG8gZHJhdyB0aGUgcHJpbWl0aXZlIGdyYXBoaWNzIGRhdGEuXG4gKiBAc3RhdGljXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKi9cbnZhciBDYW52YXNHcmFwaGljcyA9IHt9O1xubW9kdWxlLmV4cG9ydHMgPSBDYW52YXNHcmFwaGljcztcblxuLypcbiAqIFJlbmRlcnMgYSBHcmFwaGljcyBvYmplY3QgdG8gYSBjYW52YXMuXG4gKlxuICogQHBhcmFtIGdyYXBoaWNzIHtQSVhJLkdyYXBoaWNzfSB0aGUgYWN0dWFsIGdyYXBoaWNzIG9iamVjdCB0byByZW5kZXJcbiAqIEBwYXJhbSBjb250ZXh0IHtDYW52YXNSZW5kZXJpbmdDb250ZXh0MkR9IHRoZSAyZCBkcmF3aW5nIG1ldGhvZCBvZiB0aGUgY2FudmFzXG4gKi9cbkNhbnZhc0dyYXBoaWNzLnJlbmRlckdyYXBoaWNzID0gZnVuY3Rpb24gKGdyYXBoaWNzLCBjb250ZXh0KVxue1xuICAgIHZhciB3b3JsZEFscGhhID0gZ3JhcGhpY3Mud29ybGRBbHBoYTtcblxuICAgIGlmIChncmFwaGljcy5kaXJ0eSlcbiAgICB7XG4gICAgICAgIHRoaXMudXBkYXRlR3JhcGhpY3NUaW50KGdyYXBoaWNzKTtcbiAgICAgICAgZ3JhcGhpY3MuZGlydHkgPSBmYWxzZTtcbiAgICB9XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGdyYXBoaWNzLmdyYXBoaWNzRGF0YS5sZW5ndGg7IGkrKylcbiAgICB7XG4gICAgICAgIHZhciBkYXRhID0gZ3JhcGhpY3MuZ3JhcGhpY3NEYXRhW2ldO1xuICAgICAgICB2YXIgc2hhcGUgPSBkYXRhLnNoYXBlO1xuXG4gICAgICAgIHZhciBmaWxsQ29sb3IgPSBkYXRhLl9maWxsVGludDtcbiAgICAgICAgdmFyIGxpbmVDb2xvciA9IGRhdGEuX2xpbmVUaW50O1xuXG4gICAgICAgIGNvbnRleHQubGluZVdpZHRoID0gZGF0YS5saW5lV2lkdGg7XG5cbiAgICAgICAgaWYgKGRhdGEudHlwZSA9PT0gQ09OU1QuU0hBUEVTLlBPTFkpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNvbnRleHQuYmVnaW5QYXRoKCk7XG5cbiAgICAgICAgICAgIHZhciBwb2ludHMgPSBzaGFwZS5wb2ludHM7XG5cbiAgICAgICAgICAgIGNvbnRleHQubW92ZVRvKHBvaW50c1swXSwgcG9pbnRzWzFdKTtcblxuICAgICAgICAgICAgZm9yICh2YXIgaj0xOyBqIDwgcG9pbnRzLmxlbmd0aC8yOyBqKyspXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29udGV4dC5saW5lVG8ocG9pbnRzW2ogKiAyXSwgcG9pbnRzW2ogKiAyICsgMV0pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoc2hhcGUuY2xvc2VkKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGNvbnRleHQubGluZVRvKHBvaW50c1swXSwgcG9pbnRzWzFdKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gaWYgdGhlIGZpcnN0IGFuZCBsYXN0IHBvaW50IGFyZSB0aGUgc2FtZSBjbG9zZSB0aGUgcGF0aCAtIG11Y2ggbmVhdGVyIDopXG4gICAgICAgICAgICBpZiAocG9pbnRzWzBdID09PSBwb2ludHNbcG9pbnRzLmxlbmd0aC0yXSAmJiBwb2ludHNbMV0gPT09IHBvaW50c1twb2ludHMubGVuZ3RoLTFdKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGNvbnRleHQuY2xvc2VQYXRoKCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChkYXRhLmZpbGwpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29udGV4dC5nbG9iYWxBbHBoYSA9IGRhdGEuZmlsbEFscGhhICogd29ybGRBbHBoYTtcbiAgICAgICAgICAgICAgICBjb250ZXh0LmZpbGxTdHlsZSA9ICcjJyArICgnMDAwMDAnICsgKCBmaWxsQ29sb3IgfCAwKS50b1N0cmluZygxNikpLnN1YnN0cigtNik7XG4gICAgICAgICAgICAgICAgY29udGV4dC5maWxsKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZGF0YS5saW5lV2lkdGgpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29udGV4dC5nbG9iYWxBbHBoYSA9IGRhdGEubGluZUFscGhhICogd29ybGRBbHBoYTtcbiAgICAgICAgICAgICAgICBjb250ZXh0LnN0cm9rZVN0eWxlID0gJyMnICsgKCcwMDAwMCcgKyAoIGxpbmVDb2xvciB8IDApLnRvU3RyaW5nKDE2KSkuc3Vic3RyKC02KTtcbiAgICAgICAgICAgICAgICBjb250ZXh0LnN0cm9rZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGRhdGEudHlwZSA9PT0gQ09OU1QuU0hBUEVTLlJFQ1QpXG4gICAgICAgIHtcblxuICAgICAgICAgICAgaWYgKGRhdGEuZmlsbENvbG9yIHx8IGRhdGEuZmlsbENvbG9yID09PSAwKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGNvbnRleHQuZ2xvYmFsQWxwaGEgPSBkYXRhLmZpbGxBbHBoYSAqIHdvcmxkQWxwaGE7XG4gICAgICAgICAgICAgICAgY29udGV4dC5maWxsU3R5bGUgPSAnIycgKyAoJzAwMDAwJyArICggZmlsbENvbG9yIHwgMCkudG9TdHJpbmcoMTYpKS5zdWJzdHIoLTYpO1xuICAgICAgICAgICAgICAgIGNvbnRleHQuZmlsbFJlY3Qoc2hhcGUueCwgc2hhcGUueSwgc2hhcGUud2lkdGgsIHNoYXBlLmhlaWdodCk7XG5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChkYXRhLmxpbmVXaWR0aClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb250ZXh0Lmdsb2JhbEFscGhhID0gZGF0YS5saW5lQWxwaGEgKiB3b3JsZEFscGhhO1xuICAgICAgICAgICAgICAgIGNvbnRleHQuc3Ryb2tlU3R5bGUgPSAnIycgKyAoJzAwMDAwJyArICggbGluZUNvbG9yIHwgMCkudG9TdHJpbmcoMTYpKS5zdWJzdHIoLTYpO1xuICAgICAgICAgICAgICAgIGNvbnRleHQuc3Ryb2tlUmVjdChzaGFwZS54LCBzaGFwZS55LCBzaGFwZS53aWR0aCwgc2hhcGUuaGVpZ2h0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChkYXRhLnR5cGUgPT09IENPTlNULlNIQVBFUy5DSVJDKVxuICAgICAgICB7XG4gICAgICAgICAgICAvLyBUT0RPIC0gbmVlZCB0byBiZSBVbmRlZmluZWQhXG4gICAgICAgICAgICBjb250ZXh0LmJlZ2luUGF0aCgpO1xuICAgICAgICAgICAgY29udGV4dC5hcmMoc2hhcGUueCwgc2hhcGUueSwgc2hhcGUucmFkaXVzLDAsMipNYXRoLlBJKTtcbiAgICAgICAgICAgIGNvbnRleHQuY2xvc2VQYXRoKCk7XG5cbiAgICAgICAgICAgIGlmIChkYXRhLmZpbGwpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29udGV4dC5nbG9iYWxBbHBoYSA9IGRhdGEuZmlsbEFscGhhICogd29ybGRBbHBoYTtcbiAgICAgICAgICAgICAgICBjb250ZXh0LmZpbGxTdHlsZSA9ICcjJyArICgnMDAwMDAnICsgKCBmaWxsQ29sb3IgfCAwKS50b1N0cmluZygxNikpLnN1YnN0cigtNik7XG4gICAgICAgICAgICAgICAgY29udGV4dC5maWxsKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZGF0YS5saW5lV2lkdGgpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29udGV4dC5nbG9iYWxBbHBoYSA9IGRhdGEubGluZUFscGhhICogd29ybGRBbHBoYTtcbiAgICAgICAgICAgICAgICBjb250ZXh0LnN0cm9rZVN0eWxlID0gJyMnICsgKCcwMDAwMCcgKyAoIGxpbmVDb2xvciB8IDApLnRvU3RyaW5nKDE2KSkuc3Vic3RyKC02KTtcbiAgICAgICAgICAgICAgICBjb250ZXh0LnN0cm9rZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGRhdGEudHlwZSA9PT0gQ09OU1QuU0hBUEVTLkVMSVApXG4gICAgICAgIHtcbiAgICAgICAgICAgIC8vIGVsbGlwc2UgY29kZSB0YWtlbiBmcm9tOiBodHRwOi8vc3RhY2tvdmVyZmxvdy5jb20vcXVlc3Rpb25zLzIxNzI3OTgvaG93LXRvLWRyYXctYW4tb3ZhbC1pbi1odG1sNS1jYW52YXNcblxuICAgICAgICAgICAgdmFyIHcgPSBzaGFwZS53aWR0aCAqIDI7XG4gICAgICAgICAgICB2YXIgaCA9IHNoYXBlLmhlaWdodCAqIDI7XG5cbiAgICAgICAgICAgIHZhciB4ID0gc2hhcGUueCAtIHcvMjtcbiAgICAgICAgICAgIHZhciB5ID0gc2hhcGUueSAtIGgvMjtcblxuICAgICAgICAgICAgY29udGV4dC5iZWdpblBhdGgoKTtcblxuICAgICAgICAgICAgdmFyIGthcHBhID0gMC41NTIyODQ4LFxuICAgICAgICAgICAgICAgIG94ID0gKHcgLyAyKSAqIGthcHBhLCAvLyBjb250cm9sIHBvaW50IG9mZnNldCBob3Jpem9udGFsXG4gICAgICAgICAgICAgICAgb3kgPSAoaCAvIDIpICoga2FwcGEsIC8vIGNvbnRyb2wgcG9pbnQgb2Zmc2V0IHZlcnRpY2FsXG4gICAgICAgICAgICAgICAgeGUgPSB4ICsgdywgICAgICAgICAgIC8vIHgtZW5kXG4gICAgICAgICAgICAgICAgeWUgPSB5ICsgaCwgICAgICAgICAgIC8vIHktZW5kXG4gICAgICAgICAgICAgICAgeG0gPSB4ICsgdyAvIDIsICAgICAgIC8vIHgtbWlkZGxlXG4gICAgICAgICAgICAgICAgeW0gPSB5ICsgaCAvIDI7ICAgICAgIC8vIHktbWlkZGxlXG5cbiAgICAgICAgICAgIGNvbnRleHQubW92ZVRvKHgsIHltKTtcbiAgICAgICAgICAgIGNvbnRleHQuYmV6aWVyQ3VydmVUbyh4LCB5bSAtIG95LCB4bSAtIG94LCB5LCB4bSwgeSk7XG4gICAgICAgICAgICBjb250ZXh0LmJlemllckN1cnZlVG8oeG0gKyBveCwgeSwgeGUsIHltIC0gb3ksIHhlLCB5bSk7XG4gICAgICAgICAgICBjb250ZXh0LmJlemllckN1cnZlVG8oeGUsIHltICsgb3ksIHhtICsgb3gsIHllLCB4bSwgeWUpO1xuICAgICAgICAgICAgY29udGV4dC5iZXppZXJDdXJ2ZVRvKHhtIC0gb3gsIHllLCB4LCB5bSArIG95LCB4LCB5bSk7XG5cbiAgICAgICAgICAgIGNvbnRleHQuY2xvc2VQYXRoKCk7XG5cbiAgICAgICAgICAgIGlmIChkYXRhLmZpbGwpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29udGV4dC5nbG9iYWxBbHBoYSA9IGRhdGEuZmlsbEFscGhhICogd29ybGRBbHBoYTtcbiAgICAgICAgICAgICAgICBjb250ZXh0LmZpbGxTdHlsZSA9ICcjJyArICgnMDAwMDAnICsgKCBmaWxsQ29sb3IgfCAwKS50b1N0cmluZygxNikpLnN1YnN0cigtNik7XG4gICAgICAgICAgICAgICAgY29udGV4dC5maWxsKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZGF0YS5saW5lV2lkdGgpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29udGV4dC5nbG9iYWxBbHBoYSA9IGRhdGEubGluZUFscGhhICogd29ybGRBbHBoYTtcbiAgICAgICAgICAgICAgICBjb250ZXh0LnN0cm9rZVN0eWxlID0gJyMnICsgKCcwMDAwMCcgKyAoIGxpbmVDb2xvciB8IDApLnRvU3RyaW5nKDE2KSkuc3Vic3RyKC02KTtcbiAgICAgICAgICAgICAgICBjb250ZXh0LnN0cm9rZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGRhdGEudHlwZSA9PT0gQ09OU1QuU0hBUEVTLlJSRUMpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHZhciByeCA9IHNoYXBlLng7XG4gICAgICAgICAgICB2YXIgcnkgPSBzaGFwZS55O1xuICAgICAgICAgICAgdmFyIHdpZHRoID0gc2hhcGUud2lkdGg7XG4gICAgICAgICAgICB2YXIgaGVpZ2h0ID0gc2hhcGUuaGVpZ2h0O1xuICAgICAgICAgICAgdmFyIHJhZGl1cyA9IHNoYXBlLnJhZGl1cztcblxuICAgICAgICAgICAgdmFyIG1heFJhZGl1cyA9IE1hdGgubWluKHdpZHRoLCBoZWlnaHQpIC8gMiB8IDA7XG4gICAgICAgICAgICByYWRpdXMgPSByYWRpdXMgPiBtYXhSYWRpdXMgPyBtYXhSYWRpdXMgOiByYWRpdXM7XG5cbiAgICAgICAgICAgIGNvbnRleHQuYmVnaW5QYXRoKCk7XG4gICAgICAgICAgICBjb250ZXh0Lm1vdmVUbyhyeCwgcnkgKyByYWRpdXMpO1xuICAgICAgICAgICAgY29udGV4dC5saW5lVG8ocngsIHJ5ICsgaGVpZ2h0IC0gcmFkaXVzKTtcbiAgICAgICAgICAgIGNvbnRleHQucXVhZHJhdGljQ3VydmVUbyhyeCwgcnkgKyBoZWlnaHQsIHJ4ICsgcmFkaXVzLCByeSArIGhlaWdodCk7XG4gICAgICAgICAgICBjb250ZXh0LmxpbmVUbyhyeCArIHdpZHRoIC0gcmFkaXVzLCByeSArIGhlaWdodCk7XG4gICAgICAgICAgICBjb250ZXh0LnF1YWRyYXRpY0N1cnZlVG8ocnggKyB3aWR0aCwgcnkgKyBoZWlnaHQsIHJ4ICsgd2lkdGgsIHJ5ICsgaGVpZ2h0IC0gcmFkaXVzKTtcbiAgICAgICAgICAgIGNvbnRleHQubGluZVRvKHJ4ICsgd2lkdGgsIHJ5ICsgcmFkaXVzKTtcbiAgICAgICAgICAgIGNvbnRleHQucXVhZHJhdGljQ3VydmVUbyhyeCArIHdpZHRoLCByeSwgcnggKyB3aWR0aCAtIHJhZGl1cywgcnkpO1xuICAgICAgICAgICAgY29udGV4dC5saW5lVG8ocnggKyByYWRpdXMsIHJ5KTtcbiAgICAgICAgICAgIGNvbnRleHQucXVhZHJhdGljQ3VydmVUbyhyeCwgcnksIHJ4LCByeSArIHJhZGl1cyk7XG4gICAgICAgICAgICBjb250ZXh0LmNsb3NlUGF0aCgpO1xuXG4gICAgICAgICAgICBpZiAoZGF0YS5maWxsQ29sb3IgfHwgZGF0YS5maWxsQ29sb3IgPT09IDApXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29udGV4dC5nbG9iYWxBbHBoYSA9IGRhdGEuZmlsbEFscGhhICogd29ybGRBbHBoYTtcbiAgICAgICAgICAgICAgICBjb250ZXh0LmZpbGxTdHlsZSA9ICcjJyArICgnMDAwMDAnICsgKCBmaWxsQ29sb3IgfCAwKS50b1N0cmluZygxNikpLnN1YnN0cigtNik7XG4gICAgICAgICAgICAgICAgY29udGV4dC5maWxsKCk7XG5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChkYXRhLmxpbmVXaWR0aClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb250ZXh0Lmdsb2JhbEFscGhhID0gZGF0YS5saW5lQWxwaGEgKiB3b3JsZEFscGhhO1xuICAgICAgICAgICAgICAgIGNvbnRleHQuc3Ryb2tlU3R5bGUgPSAnIycgKyAoJzAwMDAwJyArICggbGluZUNvbG9yIHwgMCkudG9TdHJpbmcoMTYpKS5zdWJzdHIoLTYpO1xuICAgICAgICAgICAgICAgIGNvbnRleHQuc3Ryb2tlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG59O1xuXG4vKlxuICogUmVuZGVycyBhIGdyYXBoaWNzIG1hc2tcbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIGdyYXBoaWNzIHtQSVhJLkdyYXBoaWNzfSB0aGUgZ3JhcGhpY3Mgd2hpY2ggd2lsbCBiZSB1c2VkIGFzIGEgbWFza1xuICogQHBhcmFtIGNvbnRleHQge0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRH0gdGhlIGNvbnRleHQgMmQgbWV0aG9kIG9mIHRoZSBjYW52YXNcbiAqL1xuQ2FudmFzR3JhcGhpY3MucmVuZGVyR3JhcGhpY3NNYXNrID0gZnVuY3Rpb24gKGdyYXBoaWNzLCBjb250ZXh0KVxue1xuICAgIHZhciBsZW4gPSBncmFwaGljcy5ncmFwaGljc0RhdGEubGVuZ3RoO1xuXG4gICAgaWYgKGxlbiA9PT0gMClcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb250ZXh0LmJlZ2luUGF0aCgpO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47IGkrKylcbiAgICB7XG4gICAgICAgIHZhciBkYXRhID0gZ3JhcGhpY3MuZ3JhcGhpY3NEYXRhW2ldO1xuICAgICAgICB2YXIgc2hhcGUgPSBkYXRhLnNoYXBlO1xuXG4gICAgICAgIGlmIChkYXRhLnR5cGUgPT09IENPTlNULlNIQVBFUy5QT0xZKVxuICAgICAgICB7XG5cbiAgICAgICAgICAgIHZhciBwb2ludHMgPSBzaGFwZS5wb2ludHM7XG5cbiAgICAgICAgICAgIGNvbnRleHQubW92ZVRvKHBvaW50c1swXSwgcG9pbnRzWzFdKTtcblxuICAgICAgICAgICAgZm9yICh2YXIgaj0xOyBqIDwgcG9pbnRzLmxlbmd0aC8yOyBqKyspXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29udGV4dC5saW5lVG8ocG9pbnRzW2ogKiAyXSwgcG9pbnRzW2ogKiAyICsgMV0pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBpZiB0aGUgZmlyc3QgYW5kIGxhc3QgcG9pbnQgYXJlIHRoZSBzYW1lIGNsb3NlIHRoZSBwYXRoIC0gbXVjaCBuZWF0ZXIgOilcbiAgICAgICAgICAgIGlmIChwb2ludHNbMF0gPT09IHBvaW50c1twb2ludHMubGVuZ3RoLTJdICYmIHBvaW50c1sxXSA9PT0gcG9pbnRzW3BvaW50cy5sZW5ndGgtMV0pXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29udGV4dC5jbG9zZVBhdGgoKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGRhdGEudHlwZSA9PT0gQ09OU1QuU0hBUEVTLlJFQ1QpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNvbnRleHQucmVjdChzaGFwZS54LCBzaGFwZS55LCBzaGFwZS53aWR0aCwgc2hhcGUuaGVpZ2h0KTtcbiAgICAgICAgICAgIGNvbnRleHQuY2xvc2VQYXRoKCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoZGF0YS50eXBlID09PSBDT05TVC5TSEFQRVMuQ0lSQylcbiAgICAgICAge1xuICAgICAgICAgICAgLy8gVE9ETyAtIG5lZWQgdG8gYmUgVW5kZWZpbmVkIVxuICAgICAgICAgICAgY29udGV4dC5hcmMoc2hhcGUueCwgc2hhcGUueSwgc2hhcGUucmFkaXVzLCAwLCAyICogTWF0aC5QSSk7XG4gICAgICAgICAgICBjb250ZXh0LmNsb3NlUGF0aCgpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGRhdGEudHlwZSA9PT0gQ09OU1QuU0hBUEVTLkVMSVApXG4gICAgICAgIHtcblxuICAgICAgICAgICAgLy8gZWxsaXBzZSBjb2RlIHRha2VuIGZyb206IGh0dHA6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvMjE3Mjc5OC9ob3ctdG8tZHJhdy1hbi1vdmFsLWluLWh0bWw1LWNhbnZhc1xuXG4gICAgICAgICAgICB2YXIgdyA9IHNoYXBlLndpZHRoICogMjtcbiAgICAgICAgICAgIHZhciBoID0gc2hhcGUuaGVpZ2h0ICogMjtcblxuICAgICAgICAgICAgdmFyIHggPSBzaGFwZS54IC0gdy8yO1xuICAgICAgICAgICAgdmFyIHkgPSBzaGFwZS55IC0gaC8yO1xuXG4gICAgICAgICAgICB2YXIga2FwcGEgPSAwLjU1MjI4NDgsXG4gICAgICAgICAgICAgICAgb3ggPSAodyAvIDIpICoga2FwcGEsIC8vIGNvbnRyb2wgcG9pbnQgb2Zmc2V0IGhvcml6b250YWxcbiAgICAgICAgICAgICAgICBveSA9IChoIC8gMikgKiBrYXBwYSwgLy8gY29udHJvbCBwb2ludCBvZmZzZXQgdmVydGljYWxcbiAgICAgICAgICAgICAgICB4ZSA9IHggKyB3LCAgICAgICAgICAgLy8geC1lbmRcbiAgICAgICAgICAgICAgICB5ZSA9IHkgKyBoLCAgICAgICAgICAgLy8geS1lbmRcbiAgICAgICAgICAgICAgICB4bSA9IHggKyB3IC8gMiwgICAgICAgLy8geC1taWRkbGVcbiAgICAgICAgICAgICAgICB5bSA9IHkgKyBoIC8gMjsgICAgICAgLy8geS1taWRkbGVcblxuICAgICAgICAgICAgY29udGV4dC5tb3ZlVG8oeCwgeW0pO1xuICAgICAgICAgICAgY29udGV4dC5iZXppZXJDdXJ2ZVRvKHgsIHltIC0gb3ksIHhtIC0gb3gsIHksIHhtLCB5KTtcbiAgICAgICAgICAgIGNvbnRleHQuYmV6aWVyQ3VydmVUbyh4bSArIG94LCB5LCB4ZSwgeW0gLSBveSwgeGUsIHltKTtcbiAgICAgICAgICAgIGNvbnRleHQuYmV6aWVyQ3VydmVUbyh4ZSwgeW0gKyBveSwgeG0gKyBveCwgeWUsIHhtLCB5ZSk7XG4gICAgICAgICAgICBjb250ZXh0LmJlemllckN1cnZlVG8oeG0gLSBveCwgeWUsIHgsIHltICsgb3ksIHgsIHltKTtcbiAgICAgICAgICAgIGNvbnRleHQuY2xvc2VQYXRoKCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoZGF0YS50eXBlID09PSBDT05TVC5TSEFQRVMuUlJFQylcbiAgICAgICAge1xuXG4gICAgICAgICAgICB2YXIgcnggPSBzaGFwZS54O1xuICAgICAgICAgICAgdmFyIHJ5ID0gc2hhcGUueTtcbiAgICAgICAgICAgIHZhciB3aWR0aCA9IHNoYXBlLndpZHRoO1xuICAgICAgICAgICAgdmFyIGhlaWdodCA9IHNoYXBlLmhlaWdodDtcbiAgICAgICAgICAgIHZhciByYWRpdXMgPSBzaGFwZS5yYWRpdXM7XG5cbiAgICAgICAgICAgIHZhciBtYXhSYWRpdXMgPSBNYXRoLm1pbih3aWR0aCwgaGVpZ2h0KSAvIDIgfCAwO1xuICAgICAgICAgICAgcmFkaXVzID0gcmFkaXVzID4gbWF4UmFkaXVzID8gbWF4UmFkaXVzIDogcmFkaXVzO1xuXG4gICAgICAgICAgICBjb250ZXh0Lm1vdmVUbyhyeCwgcnkgKyByYWRpdXMpO1xuICAgICAgICAgICAgY29udGV4dC5saW5lVG8ocngsIHJ5ICsgaGVpZ2h0IC0gcmFkaXVzKTtcbiAgICAgICAgICAgIGNvbnRleHQucXVhZHJhdGljQ3VydmVUbyhyeCwgcnkgKyBoZWlnaHQsIHJ4ICsgcmFkaXVzLCByeSArIGhlaWdodCk7XG4gICAgICAgICAgICBjb250ZXh0LmxpbmVUbyhyeCArIHdpZHRoIC0gcmFkaXVzLCByeSArIGhlaWdodCk7XG4gICAgICAgICAgICBjb250ZXh0LnF1YWRyYXRpY0N1cnZlVG8ocnggKyB3aWR0aCwgcnkgKyBoZWlnaHQsIHJ4ICsgd2lkdGgsIHJ5ICsgaGVpZ2h0IC0gcmFkaXVzKTtcbiAgICAgICAgICAgIGNvbnRleHQubGluZVRvKHJ4ICsgd2lkdGgsIHJ5ICsgcmFkaXVzKTtcbiAgICAgICAgICAgIGNvbnRleHQucXVhZHJhdGljQ3VydmVUbyhyeCArIHdpZHRoLCByeSwgcnggKyB3aWR0aCAtIHJhZGl1cywgcnkpO1xuICAgICAgICAgICAgY29udGV4dC5saW5lVG8ocnggKyByYWRpdXMsIHJ5KTtcbiAgICAgICAgICAgIGNvbnRleHQucXVhZHJhdGljQ3VydmVUbyhyeCwgcnksIHJ4LCByeSArIHJhZGl1cyk7XG4gICAgICAgICAgICBjb250ZXh0LmNsb3NlUGF0aCgpO1xuICAgICAgICB9XG4gICAgfVxufTtcblxuLypcbiAqIFVwZGF0ZXMgdGhlIHRpbnQgb2YgYSBncmFwaGljcyBvYmplY3RcbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIGdyYXBoaWNzIHtQSVhJLkdyYXBoaWNzfSB0aGUgZ3JhcGhpY3MgdGhhdCB3aWxsIGhhdmUgaXRzIHRpbnQgdXBkYXRlZFxuICpcbiAqL1xuQ2FudmFzR3JhcGhpY3MudXBkYXRlR3JhcGhpY3NUaW50ID0gZnVuY3Rpb24gKGdyYXBoaWNzKVxue1xuICAgIGlmIChncmFwaGljcy50aW50ID09PSAweEZGRkZGRiAmJiBncmFwaGljcy5fcHJldlRpbnQgPT09IGdyYXBoaWNzLnRpbnQpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIGdyYXBoaWNzLl9wcmV2VGludCA9IGdyYXBoaWNzLnRpbnQ7XG5cbiAgICB2YXIgdGludFIgPSAoZ3JhcGhpY3MudGludCA+PiAxNiAmIDB4RkYpIC8gMjU1O1xuICAgIHZhciB0aW50RyA9IChncmFwaGljcy50aW50ID4+IDggJiAweEZGKSAvIDI1NTtcbiAgICB2YXIgdGludEIgPSAoZ3JhcGhpY3MudGludCAmIDB4RkYpLyAyNTU7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGdyYXBoaWNzLmdyYXBoaWNzRGF0YS5sZW5ndGg7IGkrKylcbiAgICB7XG4gICAgICAgIHZhciBkYXRhID0gZ3JhcGhpY3MuZ3JhcGhpY3NEYXRhW2ldO1xuXG4gICAgICAgIHZhciBmaWxsQ29sb3IgPSBkYXRhLmZpbGxDb2xvciB8IDA7XG4gICAgICAgIHZhciBsaW5lQ29sb3IgPSBkYXRhLmxpbmVDb2xvciB8IDA7XG5cbiAgICAgICAgLypcbiAgICAgICAgdmFyIGNvbG9yUiA9IChmaWxsQ29sb3IgPj4gMTYgJiAweEZGKSAvIDI1NTtcbiAgICAgICAgdmFyIGNvbG9yRyA9IChmaWxsQ29sb3IgPj4gOCAmIDB4RkYpIC8gMjU1O1xuICAgICAgICB2YXIgY29sb3JCID0gKGZpbGxDb2xvciAmIDB4RkYpIC8gMjU1O1xuXG4gICAgICAgIGNvbG9yUiAqPSB0aW50UjtcbiAgICAgICAgY29sb3JHICo9IHRpbnRHO1xuICAgICAgICBjb2xvckIgKj0gdGludEI7XG5cbiAgICAgICAgZmlsbENvbG9yID0gKChjb2xvclIqMjU1IDw8IDE2KSArIChjb2xvckcqMjU1IDw8IDgpICsgY29sb3JCKjI1NSk7XG5cbiAgICAgICAgY29sb3JSID0gKGxpbmVDb2xvciA+PiAxNiAmIDB4RkYpIC8gMjU1O1xuICAgICAgICBjb2xvckcgPSAobGluZUNvbG9yID4+IDggJiAweEZGKSAvIDI1NTtcbiAgICAgICAgY29sb3JCID0gKGxpbmVDb2xvciAmIDB4RkYpIC8gMjU1O1xuXG4gICAgICAgIGNvbG9yUiAqPSB0aW50UjtcbiAgICAgICAgY29sb3JHICo9IHRpbnRHO1xuICAgICAgICBjb2xvckIgKj0gdGludEI7XG5cbiAgICAgICAgbGluZUNvbG9yID0gKChjb2xvclIqMjU1IDw8IDE2KSArIChjb2xvckcqMjU1IDw8IDgpICsgY29sb3JCKjI1NSk7XG4gICAgICAgICovXG5cbiAgICAgICAgLy8gc3VwZXIgaW5saW5lIGNvcyBpbSBhbiBvcHRpbWl6YXRpb24gTkFaSSA6KVxuICAgICAgICBkYXRhLl9maWxsVGludCA9ICgoKGZpbGxDb2xvciA+PiAxNiAmIDB4RkYpIC8gMjU1ICogdGludFIqMjU1IDw8IDE2KSArICgoZmlsbENvbG9yID4+IDggJiAweEZGKSAvIDI1NSAqIHRpbnRHKjI1NSA8PCA4KSArICAoZmlsbENvbG9yICYgMHhGRikgLyAyNTUgKiB0aW50QioyNTUpO1xuICAgICAgICBkYXRhLl9saW5lVGludCA9ICgoKGxpbmVDb2xvciA+PiAxNiAmIDB4RkYpIC8gMjU1ICogdGludFIqMjU1IDw8IDE2KSArICgobGluZUNvbG9yID4+IDggJiAweEZGKSAvIDI1NSAqIHRpbnRHKjI1NSA8PCA4KSArICAobGluZUNvbG9yICYgMHhGRikgLyAyNTUgKiB0aW50QioyNTUpO1xuXG4gICAgfVxufTtcblxuIiwidmFyIENhbnZhc0dyYXBoaWNzID0gcmVxdWlyZSgnLi9DYW52YXNHcmFwaGljcycpO1xuXG4vKipcbiAqIEEgc2V0IG9mIGZ1bmN0aW9ucyB1c2VkIHRvIGhhbmRsZSBtYXNraW5nLlxuICpcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqL1xuZnVuY3Rpb24gQ2FudmFzTWFza01hbmFnZXIoKVxue31cblxuQ2FudmFzTWFza01hbmFnZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gQ2FudmFzTWFza01hbmFnZXI7XG5tb2R1bGUuZXhwb3J0cyA9IENhbnZhc01hc2tNYW5hZ2VyO1xuXG4vKipcbiAqIFRoaXMgbWV0aG9kIGFkZHMgaXQgdG8gdGhlIGN1cnJlbnQgc3RhY2sgb2YgbWFza3MuXG4gKlxuICogQHBhcmFtIG1hc2tEYXRhIHtvYmplY3R9IHRoZSBtYXNrRGF0YSB0aGF0IHdpbGwgYmUgcHVzaGVkXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcnxQSVhJLkNhbnZhc1JlbmRlcmVyfSBUaGUgcmVuZGVyZXIgY29udGV4dCB0byB1c2UuXG4gKi9cbkNhbnZhc01hc2tNYW5hZ2VyLnByb3RvdHlwZS5wdXNoTWFzayA9IGZ1bmN0aW9uIChtYXNrRGF0YSwgcmVuZGVyZXIpXG57XG5cbiAgICByZW5kZXJlci5jb250ZXh0LnNhdmUoKTtcblxuICAgIHZhciBjYWNoZUFscGhhID0gbWFza0RhdGEuYWxwaGE7XG4gICAgdmFyIHRyYW5zZm9ybSA9IG1hc2tEYXRhLndvcmxkVHJhbnNmb3JtO1xuICAgIHZhciByZXNvbHV0aW9uID0gcmVuZGVyZXIucmVzb2x1dGlvbjtcblxuICAgIHJlbmRlcmVyLmNvbnRleHQuc2V0VHJhbnNmb3JtKFxuICAgICAgICB0cmFuc2Zvcm0uYSAqIHJlc29sdXRpb24sXG4gICAgICAgIHRyYW5zZm9ybS5iICogcmVzb2x1dGlvbixcbiAgICAgICAgdHJhbnNmb3JtLmMgKiByZXNvbHV0aW9uLFxuICAgICAgICB0cmFuc2Zvcm0uZCAqIHJlc29sdXRpb24sXG4gICAgICAgIHRyYW5zZm9ybS50eCAqIHJlc29sdXRpb24sXG4gICAgICAgIHRyYW5zZm9ybS50eSAqIHJlc29sdXRpb25cbiAgICApO1xuXG4gICAgLy9UT0RPIHN1cG9ydCBzcHJpdGUgYWxwaGEgbWFza3M/P1xuICAgIC8vbG90cyBvZiBlZmZvcnQgcmVxdWlyZWQuIElmIGRlbWFuZCBpcyBncmVhdCBlbm91Z2guLlxuICAgIGlmKCFtYXNrRGF0YS50ZXh0dXJlKVxuICAgIHtcbiAgICAgICAgQ2FudmFzR3JhcGhpY3MucmVuZGVyR3JhcGhpY3NNYXNrKG1hc2tEYXRhLCByZW5kZXJlci5jb250ZXh0KTtcbiAgICAgICAgcmVuZGVyZXIuY29udGV4dC5jbGlwKCk7XG4gICAgfVxuXG4gICAgbWFza0RhdGEud29ybGRBbHBoYSA9IGNhY2hlQWxwaGE7XG59O1xuXG4vKipcbiAqIFJlc3RvcmVzIHRoZSBjdXJyZW50IGRyYXdpbmcgY29udGV4dCB0byB0aGUgc3RhdGUgaXQgd2FzIGJlZm9yZSB0aGUgbWFzayB3YXMgYXBwbGllZC5cbiAqXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcnxQSVhJLkNhbnZhc1JlbmRlcmVyfSBUaGUgcmVuZGVyZXIgY29udGV4dCB0byB1c2UuXG4gKi9cbkNhbnZhc01hc2tNYW5hZ2VyLnByb3RvdHlwZS5wb3BNYXNrID0gZnVuY3Rpb24gKHJlbmRlcmVyKVxue1xuICAgIHJlbmRlcmVyLmNvbnRleHQucmVzdG9yZSgpO1xufTtcblxuQ2FudmFzTWFza01hbmFnZXIucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoKSB7fTtcbiIsInZhciB1dGlscyA9IHJlcXVpcmUoJy4uLy4uLy4uL3V0aWxzJyk7XG5cbi8qKlxuICogVXRpbGl0eSBtZXRob2RzIGZvciBTcHJpdGUvVGV4dHVyZSB0aW50aW5nLlxuICogQHN0YXRpY1xuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICovXG52YXIgQ2FudmFzVGludGVyID0ge307XG5tb2R1bGUuZXhwb3J0cyA9IENhbnZhc1RpbnRlcjtcblxuLyoqXG4gKiBCYXNpY2FsbHkgdGhpcyBtZXRob2QganVzdCBuZWVkcyBhIHNwcml0ZSBhbmQgYSBjb2xvciBhbmQgdGludHMgdGhlIHNwcml0ZSB3aXRoIHRoZSBnaXZlbiBjb2xvci5cbiAqXG4gKiBAcGFyYW0gc3ByaXRlIHtQSVhJLlNwcml0ZX0gdGhlIHNwcml0ZSB0byB0aW50XG4gKiBAcGFyYW0gY29sb3Ige251bWJlcn0gdGhlIGNvbG9yIHRvIHVzZSB0byB0aW50IHRoZSBzcHJpdGUgd2l0aFxuICogQHJldHVybiB7SFRNTENhbnZhc0VsZW1lbnR9IFRoZSB0aW50ZWQgY2FudmFzXG4gKi9cbkNhbnZhc1RpbnRlci5nZXRUaW50ZWRUZXh0dXJlID0gZnVuY3Rpb24gKHNwcml0ZSwgY29sb3IpXG57XG4gICAgdmFyIHRleHR1cmUgPSBzcHJpdGUudGV4dHVyZTtcblxuICAgIGNvbG9yID0gQ2FudmFzVGludGVyLnJvdW5kQ29sb3IoY29sb3IpO1xuXG4gICAgdmFyIHN0cmluZ0NvbG9yID0gJyMnICsgKCcwMDAwMCcgKyAoIGNvbG9yIHwgMCkudG9TdHJpbmcoMTYpKS5zdWJzdHIoLTYpO1xuXG4gICAgdGV4dHVyZS50aW50Q2FjaGUgPSB0ZXh0dXJlLnRpbnRDYWNoZSB8fCB7fTtcblxuICAgIGlmICh0ZXh0dXJlLnRpbnRDYWNoZVtzdHJpbmdDb2xvcl0pXG4gICAge1xuICAgICAgICByZXR1cm4gdGV4dHVyZS50aW50Q2FjaGVbc3RyaW5nQ29sb3JdO1xuICAgIH1cblxuICAgICAvLyBjbG9uZSB0ZXh0dXJlLi5cbiAgICB2YXIgY2FudmFzID0gQ2FudmFzVGludGVyLmNhbnZhcyB8fCBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdjYW52YXMnKTtcblxuICAgIC8vQ2FudmFzVGludGVyLnRpbnRXaXRoUGVyUGl4ZWwodGV4dHVyZSwgc3RyaW5nQ29sb3IsIGNhbnZhcyk7XG4gICAgQ2FudmFzVGludGVyLnRpbnRNZXRob2QodGV4dHVyZSwgY29sb3IsIGNhbnZhcyk7XG5cbiAgICBpZiAoQ2FudmFzVGludGVyLmNvbnZlcnRUaW50VG9JbWFnZSlcbiAgICB7XG4gICAgICAgIC8vIGlzIHRoaXMgYmV0dGVyP1xuICAgICAgICB2YXIgdGludEltYWdlID0gbmV3IEltYWdlKCk7XG4gICAgICAgIHRpbnRJbWFnZS5zcmMgPSBjYW52YXMudG9EYXRhVVJMKCk7XG5cbiAgICAgICAgdGV4dHVyZS50aW50Q2FjaGVbc3RyaW5nQ29sb3JdID0gdGludEltYWdlO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICB0ZXh0dXJlLnRpbnRDYWNoZVtzdHJpbmdDb2xvcl0gPSBjYW52YXM7XG4gICAgICAgIC8vIGlmIHdlIGFyZSBub3QgY29udmVydGluZyB0aGUgdGV4dHVyZSB0byBhbiBpbWFnZSB0aGVuIHdlIG5lZWQgdG8gbG9zZSB0aGUgcmVmZXJlbmNlIHRvIHRoZSBjYW52YXNcbiAgICAgICAgQ2FudmFzVGludGVyLmNhbnZhcyA9IG51bGw7XG4gICAgfVxuXG4gICAgcmV0dXJuIGNhbnZhcztcbn07XG5cbi8qKlxuICogVGludCBhIHRleHR1cmUgdXNpbmcgdGhlICdtdWx0aXBseScgb3BlcmF0aW9uLlxuICpcbiAqIEBwYXJhbSB0ZXh0dXJlIHtQSVhJLlRleHR1cmV9IHRoZSB0ZXh0dXJlIHRvIHRpbnRcbiAqIEBwYXJhbSBjb2xvciB7bnVtYmVyfSB0aGUgY29sb3IgdG8gdXNlIHRvIHRpbnQgdGhlIHNwcml0ZSB3aXRoXG4gKiBAcGFyYW0gY2FudmFzIHtIVE1MQ2FudmFzRWxlbWVudH0gdGhlIGN1cnJlbnQgY2FudmFzXG4gKi9cbkNhbnZhc1RpbnRlci50aW50V2l0aE11bHRpcGx5ID0gZnVuY3Rpb24gKHRleHR1cmUsIGNvbG9yLCBjYW52YXMpXG57XG4gICAgdmFyIGNvbnRleHQgPSBjYW52YXMuZ2V0Q29udGV4dCggJzJkJyApO1xuXG4gICAgdmFyIHJlc29sdXRpb24gPSB0ZXh0dXJlLmJhc2VUZXh0dXJlLnJlc29sdXRpb247XG5cbiAgICB2YXIgY3JvcCA9IHRleHR1cmUuY3JvcC5jbG9uZSgpO1xuICAgIGNyb3AueCAqPSByZXNvbHV0aW9uO1xuICAgIGNyb3AueSAqPSByZXNvbHV0aW9uO1xuICAgIGNyb3Aud2lkdGggKj0gcmVzb2x1dGlvbjtcbiAgICBjcm9wLmhlaWdodCAqPSByZXNvbHV0aW9uO1xuXG4gICAgY2FudmFzLndpZHRoID0gY3JvcC53aWR0aDtcbiAgICBjYW52YXMuaGVpZ2h0ID0gY3JvcC5oZWlnaHQ7XG5cbiAgICBjb250ZXh0LmZpbGxTdHlsZSA9ICcjJyArICgnMDAwMDAnICsgKCBjb2xvciB8IDApLnRvU3RyaW5nKDE2KSkuc3Vic3RyKC02KTtcblxuICAgIGNvbnRleHQuZmlsbFJlY3QoMCwgMCwgY3JvcC53aWR0aCwgY3JvcC5oZWlnaHQpO1xuXG4gICAgY29udGV4dC5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb24gPSAnbXVsdGlwbHknO1xuXG4gICAgY29udGV4dC5kcmF3SW1hZ2UoXG4gICAgICAgIHRleHR1cmUuYmFzZVRleHR1cmUuc291cmNlLFxuICAgICAgICBjcm9wLngsXG4gICAgICAgIGNyb3AueSxcbiAgICAgICAgY3JvcC53aWR0aCxcbiAgICAgICAgY3JvcC5oZWlnaHQsXG4gICAgICAgIDAsXG4gICAgICAgIDAsXG4gICAgICAgIGNyb3Aud2lkdGgsXG4gICAgICAgIGNyb3AuaGVpZ2h0XG4gICAgKTtcblxuICAgIGNvbnRleHQuZ2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uID0gJ2Rlc3RpbmF0aW9uLWF0b3AnO1xuXG4gICAgY29udGV4dC5kcmF3SW1hZ2UoXG4gICAgICAgIHRleHR1cmUuYmFzZVRleHR1cmUuc291cmNlLFxuICAgICAgICBjcm9wLngsXG4gICAgICAgIGNyb3AueSxcbiAgICAgICAgY3JvcC53aWR0aCxcbiAgICAgICAgY3JvcC5oZWlnaHQsXG4gICAgICAgIDAsXG4gICAgICAgIDAsXG4gICAgICAgIGNyb3Aud2lkdGgsXG4gICAgICAgIGNyb3AuaGVpZ2h0XG4gICAgKTtcbn07XG5cbi8qKlxuICogVGludCBhIHRleHR1cmUgdXNpbmcgdGhlICdvdmVybGF5JyBvcGVyYXRpb24uXG4gKlxuICogQHBhcmFtIHRleHR1cmUge1BJWEkuVGV4dHVyZX0gdGhlIHRleHR1cmUgdG8gdGludFxuICogQHBhcmFtIGNvbG9yIHtudW1iZXJ9IHRoZSBjb2xvciB0byB1c2UgdG8gdGludCB0aGUgc3ByaXRlIHdpdGhcbiAqIEBwYXJhbSBjYW52YXMge0hUTUxDYW52YXNFbGVtZW50fSB0aGUgY3VycmVudCBjYW52YXNcbiAqL1xuQ2FudmFzVGludGVyLnRpbnRXaXRoT3ZlcmxheSA9IGZ1bmN0aW9uICh0ZXh0dXJlLCBjb2xvciwgY2FudmFzKVxue1xuICAgIHZhciBjb250ZXh0ID0gY2FudmFzLmdldENvbnRleHQoICcyZCcgKTtcblxuICAgIHZhciByZXNvbHV0aW9uID0gdGV4dHVyZS5iYXNlVGV4dHVyZS5yZXNvbHV0aW9uO1xuXG4gICAgdmFyIGNyb3AgPSB0ZXh0dXJlLmNyb3AuY2xvbmUoKTtcbiAgICBjcm9wLnggKj0gcmVzb2x1dGlvbjtcbiAgICBjcm9wLnkgKj0gcmVzb2x1dGlvbjtcbiAgICBjcm9wLndpZHRoICo9IHJlc29sdXRpb247XG4gICAgY3JvcC5oZWlnaHQgKj0gcmVzb2x1dGlvbjtcblxuICAgIGNhbnZhcy53aWR0aCA9IGNyb3Aud2lkdGg7XG4gICAgY2FudmFzLmhlaWdodCA9IGNyb3AuaGVpZ2h0O1xuXG4gICAgY29udGV4dC5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb24gPSAnY29weSc7XG4gICAgY29udGV4dC5maWxsU3R5bGUgPSAnIycgKyAoJzAwMDAwJyArICggY29sb3IgfCAwKS50b1N0cmluZygxNikpLnN1YnN0cigtNik7XG4gICAgY29udGV4dC5maWxsUmVjdCgwLCAwLCBjcm9wLndpZHRoLCBjcm9wLmhlaWdodCk7XG5cbiAgICBjb250ZXh0Lmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbiA9ICdkZXN0aW5hdGlvbi1hdG9wJztcbiAgICBjb250ZXh0LmRyYXdJbWFnZShcbiAgICAgICAgdGV4dHVyZS5iYXNlVGV4dHVyZS5zb3VyY2UsXG4gICAgICAgIGNyb3AueCxcbiAgICAgICAgY3JvcC55LFxuICAgICAgICBjcm9wLndpZHRoLFxuICAgICAgICBjcm9wLmhlaWdodCxcbiAgICAgICAgMCxcbiAgICAgICAgMCxcbiAgICAgICAgY3JvcC53aWR0aCxcbiAgICAgICAgY3JvcC5oZWlnaHRcbiAgICApO1xuXG4gICAgLy8gY29udGV4dC5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb24gPSAnY29weSc7XG59O1xuXG4vKipcbiAqIFRpbnQgYSB0ZXh0dXJlIHBpeGVsIHBlciBwaXhlbC5cbiAqXG4gKiBAcGFyYW0gdGV4dHVyZSB7UElYSS5UZXh0dXJlfSB0aGUgdGV4dHVyZSB0byB0aW50XG4gKiBAcGFyYW0gY29sb3Ige251bWJlcn0gdGhlIGNvbG9yIHRvIHVzZSB0byB0aW50IHRoZSBzcHJpdGUgd2l0aFxuICogQHBhcmFtIGNhbnZhcyB7SFRNTENhbnZhc0VsZW1lbnR9IHRoZSBjdXJyZW50IGNhbnZhc1xuICovXG5DYW52YXNUaW50ZXIudGludFdpdGhQZXJQaXhlbCA9IGZ1bmN0aW9uICh0ZXh0dXJlLCBjb2xvciwgY2FudmFzKVxue1xuICAgIHZhciBjb250ZXh0ID0gY2FudmFzLmdldENvbnRleHQoICcyZCcgKTtcblxuICAgIHZhciByZXNvbHV0aW9uID0gdGV4dHVyZS5iYXNlVGV4dHVyZS5yZXNvbHV0aW9uO1xuXG4gICAgdmFyIGNyb3AgPSB0ZXh0dXJlLmNyb3AuY2xvbmUoKTtcbiAgICBjcm9wLnggKj0gcmVzb2x1dGlvbjtcbiAgICBjcm9wLnkgKj0gcmVzb2x1dGlvbjtcbiAgICBjcm9wLndpZHRoICo9IHJlc29sdXRpb247XG4gICAgY3JvcC5oZWlnaHQgKj0gcmVzb2x1dGlvbjtcblxuICAgIGNhbnZhcy53aWR0aCA9IGNyb3Aud2lkdGg7XG4gICAgY2FudmFzLmhlaWdodCA9IGNyb3AuaGVpZ2h0O1xuXG4gICAgY29udGV4dC5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb24gPSAnY29weSc7XG4gICAgY29udGV4dC5kcmF3SW1hZ2UoXG4gICAgICAgIHRleHR1cmUuYmFzZVRleHR1cmUuc291cmNlLFxuICAgICAgICBjcm9wLngsXG4gICAgICAgIGNyb3AueSxcbiAgICAgICAgY3JvcC53aWR0aCxcbiAgICAgICAgY3JvcC5oZWlnaHQsXG4gICAgICAgIDAsXG4gICAgICAgIDAsXG4gICAgICAgIGNyb3Aud2lkdGgsXG4gICAgICAgIGNyb3AuaGVpZ2h0XG4gICAgKTtcblxuICAgIHZhciByZ2JWYWx1ZXMgPSB1dGlscy5oZXgycmdiKGNvbG9yKTtcbiAgICB2YXIgciA9IHJnYlZhbHVlc1swXSwgZyA9IHJnYlZhbHVlc1sxXSwgYiA9IHJnYlZhbHVlc1syXTtcblxuICAgIHZhciBwaXhlbERhdGEgPSBjb250ZXh0LmdldEltYWdlRGF0YSgwLCAwLCBjcm9wLndpZHRoLCBjcm9wLmhlaWdodCk7XG5cbiAgICB2YXIgcGl4ZWxzID0gcGl4ZWxEYXRhLmRhdGE7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHBpeGVscy5sZW5ndGg7IGkgKz0gNClcbiAgICB7XG4gICAgICAgIHBpeGVsc1tpKzBdICo9IHI7XG4gICAgICAgIHBpeGVsc1tpKzFdICo9IGc7XG4gICAgICAgIHBpeGVsc1tpKzJdICo9IGI7XG4gICAgfVxuXG4gICAgY29udGV4dC5wdXRJbWFnZURhdGEocGl4ZWxEYXRhLCAwLCAwKTtcbn07XG5cbi8qKlxuICogUm91bmRzIHRoZSBzcGVjaWZpZWQgY29sb3IgYWNjb3JkaW5nIHRvIHRoZSBDYW52YXNUaW50ZXIuY2FjaGVTdGVwc1BlckNvbG9yQ2hhbm5lbC5cbiAqXG4gKiBAcGFyYW0gY29sb3Ige251bWJlcn0gdGhlIGNvbG9yIHRvIHJvdW5kLCBzaG91bGQgYmUgYSBoZXggY29sb3JcbiAqL1xuQ2FudmFzVGludGVyLnJvdW5kQ29sb3IgPSBmdW5jdGlvbiAoY29sb3IpXG57XG4gICAgdmFyIHN0ZXAgPSBDYW52YXNUaW50ZXIuY2FjaGVTdGVwc1BlckNvbG9yQ2hhbm5lbDtcblxuICAgIHZhciByZ2JWYWx1ZXMgPSB1dGlscy5oZXgycmdiKGNvbG9yKTtcblxuICAgIHJnYlZhbHVlc1swXSA9IE1hdGgubWluKDI1NSwgKHJnYlZhbHVlc1swXSAvIHN0ZXApICogc3RlcCk7XG4gICAgcmdiVmFsdWVzWzFdID0gTWF0aC5taW4oMjU1LCAocmdiVmFsdWVzWzFdIC8gc3RlcCkgKiBzdGVwKTtcbiAgICByZ2JWYWx1ZXNbMl0gPSBNYXRoLm1pbigyNTUsIChyZ2JWYWx1ZXNbMl0gLyBzdGVwKSAqIHN0ZXApO1xuXG4gICAgcmV0dXJuIHV0aWxzLnJnYjJoZXgocmdiVmFsdWVzKTtcbn07XG5cbi8qKlxuICogTnVtYmVyIG9mIHN0ZXBzIHdoaWNoIHdpbGwgYmUgdXNlZCBhcyBhIGNhcCB3aGVuIHJvdW5kaW5nIGNvbG9ycy5cbiAqXG4gKiBAbWVtYmVyXG4gKi9cbkNhbnZhc1RpbnRlci5jYWNoZVN0ZXBzUGVyQ29sb3JDaGFubmVsID0gODtcblxuLyoqXG4gKiBUaW50IGNhY2hlIGJvb2xlYW4gZmxhZy5cbiAqXG4gKiBAbWVtYmVyXG4gKi9cbkNhbnZhc1RpbnRlci5jb252ZXJ0VGludFRvSW1hZ2UgPSBmYWxzZTtcblxuLyoqXG4gKiBXaGV0aGVyIG9yIG5vdCB0aGUgQ2FudmFzIEJsZW5kTW9kZXMgYXJlIHN1cHBvcnRlZCwgY29uc2VxdWVudGx5IHRoZSBhYmlsaXR5IHRvIHRpbnQgdXNpbmcgdGhlIG11bHRpcGx5IG1ldGhvZC5cbiAqXG4gKiBAbWVtYmVyXG4gKi9cbkNhbnZhc1RpbnRlci5jYW5Vc2VNdWx0aXBseSA9IHV0aWxzLmNhblVzZU5ld0NhbnZhc0JsZW5kTW9kZXMoKTtcblxuLyoqXG4gKiBUaGUgdGludGluZyBtZXRob2QgdGhhdCB3aWxsIGJlIHVzZWQuXG4gKlxuICovXG5DYW52YXNUaW50ZXIudGludE1ldGhvZCA9IENhbnZhc1RpbnRlci5jYW5Vc2VNdWx0aXBseSA/IENhbnZhc1RpbnRlci50aW50V2l0aE11bHRpcGx5IDogIENhbnZhc1RpbnRlci50aW50V2l0aFBlclBpeGVsO1xuIiwidmFyIEdMVGV4dHVyZSA9IHJlcXVpcmUoJ3BpeGktZ2wtY29yZScpLkdMVGV4dHVyZSxcblx0dXRpbHMgPSByZXF1aXJlKCcuLi8uLi91dGlscycpO1xuXG4vKipcbiAqIEhlbHBlciBjbGFzcyB0byBjcmVhdGUgYSB3ZWJHTCBUZXh0dXJlXG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIGdsIHtXZWJHTFJlbmRlcmluZ0NvbnRleHR9XG4gKi9cblxudmFyIFRleHR1cmVNYW5hZ2VyID0gZnVuY3Rpb24oZ2wpXG57XG5cdHRoaXMuZ2wgPSBnbDtcblxuXHQvLyB0cmFjayB0ZXh0dXJlcyBpbiB0aGUgcmVuZGVyZXIgc28gd2UgY2FuIG5vIGxvbmdlciBsaXN0ZW4gdG8gdGhlbSBvbiBkZXN0cnVjdGlvbi5cblx0dGhpcy5fbWFuYWdlZFRleHR1cmVzID0gW107XG4gICAgdGhpcy5nbFRleHR1cmVzID0ge307XG5cbn1cblxuVGV4dHVyZU1hbmFnZXIucHJvdG90eXBlLmJpbmRUZXh0dXJlID0gZnVuY3Rpb24odGV4dHVyZSlcbntcblxufVxuXG5cblRleHR1cmVNYW5hZ2VyLnByb3RvdHlwZS5nZXRUZXh0dXJlID0gZnVuY3Rpb24odGV4dHVyZSlcbntcblxufVxuXG4vKipcbiAqIFVwZGF0ZXMgYW5kL29yIENyZWF0ZXMgYSBXZWJHTCB0ZXh0dXJlIGZvciB0aGUgcmVuZGVyZXIncyBjb250ZXh0LlxuICpcbiAqIEBwYXJhbSB0ZXh0dXJlIHtQSVhJLkJhc2VUZXh0dXJlfFBJWEkuVGV4dHVyZX0gdGhlIHRleHR1cmUgdG8gdXBkYXRlXG4gKi9cblRleHR1cmVNYW5hZ2VyLnByb3RvdHlwZS51cGRhdGVUZXh0dXJlID0gZnVuY3Rpb24odGV4dHVyZSlcbntcblx0dGV4dHVyZSA9IHRleHR1cmUuYmFzZVRleHR1cmUgfHwgdGV4dHVyZTtcblxuXHRpZiAoIXRleHR1cmUuaGFzTG9hZGVkKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIFxuICAgIHZhciBnbCA9IHRoaXMuZ2w7XG4gICAgdmFyIGdsVGV4dHVyZSA9IHRoaXMuZ2xUZXh0dXJlc1t0ZXh0dXJlLnVpZF0vL3RleHR1cmUuX2dsVGV4dHVyZXNbZ2wuaWRdO1xuXG4gICAgaWYgKCFnbFRleHR1cmUpXG4gICAge1xuICAgICAgICBnbFRleHR1cmUgPSBuZXcgR0xUZXh0dXJlKGdsKTtcbiAgICAgICAgZ2xUZXh0dXJlLnByZW11bHRpcGx5QWxwaGEgPSB0cnVlXG4gICAgICAgIHRleHR1cmUuX2dsVGV4dHVyZXNbZ2wuaWRdID0gZ2xUZXh0dXJlO1xuXG4gICAgICAgLy8gdGhpcy5nbFRleHR1cmVzW3RleHR1cmUudWlkXSA9IGdsVGV4dHVyZTtcblxuICAgICAgICB0ZXh0dXJlLm9uKCd1cGRhdGUnLCB0aGlzLnVwZGF0ZVRleHR1cmUsIHRoaXMpO1xuICAgICAgICB0ZXh0dXJlLm9uKCdkaXNwb3NlJywgdGhpcy5kZXN0cm95VGV4dHVyZSwgdGhpcyk7XG4gICAgICAgIFxuICAgICAgICB0aGlzLl9tYW5hZ2VkVGV4dHVyZXMucHVzaCh0ZXh0dXJlKTtcbiAgICB9XG5cbiAgICBnbFRleHR1cmUudXBsb2FkKHRleHR1cmUuc291cmNlKTtcbiAgICBcbiAgICAvL1RPRE8gY2hlY2sgaXMgcG93ZXIgb2YgdHdvLi5cbiAgICBnbFRleHR1cmUuZW5hYmxlV3JhcENsYW1wKCk7XG5cblxuICAgIC8vIFRPRE8gY2hlY2sgZm9yIHNjYWxpbmcgdHlwZVxuICAgIGdsVGV4dHVyZS5lbmFibGVMaW5lYXJTY2FsaW5nKCk7XG5cbiAgICByZXR1cm4gIHRleHR1cmUuX2dsVGV4dHVyZXNbZ2wuaWRdO1xufVxuXG4vKipcbiAqIERlbGV0ZXMgdGhlIHRleHR1cmUgZnJvbSBXZWJHTFxuICpcbiAqIEBwYXJhbSB0ZXh0dXJlIHtQSVhJLkJhc2VUZXh0dXJlfFBJWEkuVGV4dHVyZX0gdGhlIHRleHR1cmUgdG8gZGVzdHJveVxuICovXG5UZXh0dXJlTWFuYWdlci5wcm90b3R5cGUuZGVzdHJveVRleHR1cmUgPSBmdW5jdGlvbih0ZXh0dXJlLCBfc2tpcFJlbW92ZSlcbntcblx0dGV4dHVyZSA9IHRleHR1cmUuYmFzZVRleHR1cmUgfHwgdGV4dHVyZTtcblxuICAgIGlmICghdGV4dHVyZS5oYXNMb2FkZWQpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHRleHR1cmUuX2dsVGV4dHVyZXNbdGhpcy5nbC5pZF0pXG4gICAge1xuICAgICAgICB0ZXh0dXJlLl9nbFRleHR1cmVzW3RoaXMuZ2wuaWRdLmRlc3Ryb3koKTtcbiAgICAgICAgdGV4dHVyZS5vZmYoJ3VwZGF0ZScsIHRoaXMudXBkYXRlVGV4dHVyZSwgdGhpcyk7XG4gICAgICAgIHRleHR1cmUub2ZmKCdkaXNwb3NlJywgdGhpcy5kZXN0cm95VGV4dHVyZSwgdGhpcyk7XG5cblxuICAgICAgICBkZWxldGUgdGV4dHVyZS5fZ2xUZXh0dXJlc1t0aGlzLmdsLmlkXTtcblxuICAgICAgICBpZiAoIV9za2lwUmVtb3ZlKVxuICAgICAgICB7XG4gICAgICAgICAgICB2YXIgaSA9IHRoaXMuX21hbmFnZWRUZXh0dXJlcy5pbmRleE9mKHRleHR1cmUpO1xuICAgICAgICAgICAgaWYgKGkgIT09IC0xKSB7XG4gICAgICAgICAgICAgICAgdXRpbHMucmVtb3ZlSXRlbXModGhpcy5fbWFuYWdlZFRleHR1cmVzLCBpLCAxKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn1cblxuVGV4dHVyZU1hbmFnZXIucHJvdG90eXBlLnJlbW92ZUFsbCA9IGZ1bmN0aW9uKClcbntcblx0Ly8gZW1wdHkgYWxsIHRoZSBvbGQgZ2wgdGV4dHVyZXMgYXMgdGhleSBhcmUgdXNlbGVzcyBub3dcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuX21hbmFnZWRUZXh0dXJlcy5sZW5ndGg7ICsraSlcbiAgICB7XG4gICAgICAgIHZhciB0ZXh0dXJlID0gdGhpcy5fbWFuYWdlZFRleHR1cmVzW2ldO1xuICAgICAgICBpZiAodGV4dHVyZS5fZ2xUZXh0dXJlc1t0aGlzLmdsLmlkXSlcbiAgICAgICAge1xuICAgICAgICAgICAgZGVsZXRlIHRleHR1cmUuX2dsVGV4dHVyZXNbdGhpcy5nbC5pZF07XG4gICAgICAgIH1cbiAgICB9XG59XG5cblRleHR1cmVNYW5hZ2VyLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24oKVxue1xuICAgIC8vIGRlc3Ryb3kgbWFuYWdlZCB0ZXh0dXJlc1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5fbWFuYWdlZFRleHR1cmVzLmxlbmd0aDsgKytpKVxuICAgIHtcbiAgICAgICAgdmFyIHRleHR1cmUgPSB0aGlzLl9tYW5hZ2VkVGV4dHVyZXNbaV07XG4gICAgICAgIHRoaXMuZGVzdHJveVRleHR1cmUodGV4dHVyZSwgdHJ1ZSk7XG4gICAgICAgIHRleHR1cmUub2ZmKCd1cGRhdGUnLCB0aGlzLnVwZGF0ZVRleHR1cmUsIHRoaXMpO1xuICAgICAgICB0ZXh0dXJlLm9mZignZGlzcG9zZScsIHRoaXMuZGVzdHJveVRleHR1cmUsIHRoaXMpO1xuICAgIH1cblxuICAgIHRoaXMuX21hbmFnZWRUZXh0dXJlcyA9IG51bGw7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gVGV4dHVyZU1hbmFnZXI7XG5cbiIsInZhciBTeXN0ZW1SZW5kZXJlciA9IHJlcXVpcmUoJy4uL1N5c3RlbVJlbmRlcmVyJyksXG4gICAgU2hhZGVyTWFuYWdlciA9IHJlcXVpcmUoJy4vbWFuYWdlcnMvU2hhZGVyTWFuYWdlcicpLFxuICAgIE1hc2tNYW5hZ2VyID0gcmVxdWlyZSgnLi9tYW5hZ2Vycy9NYXNrTWFuYWdlcicpLFxuICAgIFN0ZW5jaWxNYW5hZ2VyID0gcmVxdWlyZSgnLi9tYW5hZ2Vycy9TdGVuY2lsTWFuYWdlcicpLFxuICAgIEZpbHRlck1hbmFnZXIgPSByZXF1aXJlKCcuL21hbmFnZXJzL0ZpbHRlck1hbmFnZXInKSxcbiAgICBCbGVuZE1vZGVNYW5hZ2VyID0gcmVxdWlyZSgnLi9tYW5hZ2Vycy9CbGVuZE1vZGVNYW5hZ2VyJyksXG4gICAgUmVuZGVyVGFyZ2V0ID0gcmVxdWlyZSgnLi91dGlscy9SZW5kZXJUYXJnZXQnKSxcbiAgICBPYmplY3RSZW5kZXJlciA9IHJlcXVpcmUoJy4vdXRpbHMvT2JqZWN0UmVuZGVyZXInKSxcbiAgICBGWEFBRmlsdGVyID0gcmVxdWlyZSgnLi9maWx0ZXJzL0ZYQUFGaWx0ZXInKSxcbiAgICBUZXh0dXJlTWFuYWdlciA9IHJlcXVpcmUoJy4vVGV4dHVyZU1hbmFnZXInKSxcbiAgICBjcmVhdGVDb250ZXh0ID0gcmVxdWlyZSgncGl4aS1nbC1jb3JlJykuY3JlYXRlQ29udGV4dCxcbiAgICBtYXBXZWJHTEJsZW5kTW9kZXNUb1BpeGkgPSByZXF1aXJlKCcuL3V0aWxzL21hcFdlYkdMQmxlbmRNb2Rlc1RvUGl4aScpLFxuICAgIG1hcFdlYkdMRHJhd01vZGVzVG9QaXhpID0gcmVxdWlyZSgnLi91dGlscy9tYXBXZWJHTERyYXdNb2Rlc1RvUGl4aScpLFxuICAgIHV0aWxzID0gcmVxdWlyZSgnLi4vLi4vdXRpbHMnKSxcbiAgICBDT05TVCA9IHJlcXVpcmUoJy4uLy4uL2NvbnN0Jyk7XG5cbi8qKlxuICogVGhlIFdlYkdMUmVuZGVyZXIgZHJhd3MgdGhlIHNjZW5lIGFuZCBhbGwgaXRzIGNvbnRlbnQgb250byBhIHdlYkdMIGVuYWJsZWQgY2FudmFzLiBUaGlzIHJlbmRlcmVyXG4gKiBzaG91bGQgYmUgdXNlZCBmb3IgYnJvd3NlcnMgdGhhdCBzdXBwb3J0IHdlYkdMLiBUaGlzIFJlbmRlciB3b3JrcyBieSBhdXRvbWF0aWNhbGx5IG1hbmFnaW5nIHdlYkdMQmF0Y2hzLlxuICogU28gbm8gbmVlZCBmb3IgU3ByaXRlIEJhdGNoZXMgb3IgU3ByaXRlIENsb3Vkcy5cbiAqIERvbid0IGZvcmdldCB0byBhZGQgdGhlIHZpZXcgdG8geW91ciBET00gb3IgeW91IHdpbGwgbm90IHNlZSBhbnl0aGluZyA6KVxuICpcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqIEBleHRlbmRzIFBJWEkuU3lzdGVtUmVuZGVyZXJcbiAqIEBwYXJhbSBbd2lkdGg9MF0ge251bWJlcn0gdGhlIHdpZHRoIG9mIHRoZSBjYW52YXMgdmlld1xuICogQHBhcmFtIFtoZWlnaHQ9MF0ge251bWJlcn0gdGhlIGhlaWdodCBvZiB0aGUgY2FudmFzIHZpZXdcbiAqIEBwYXJhbSBbb3B0aW9uc10ge29iamVjdH0gVGhlIG9wdGlvbmFsIHJlbmRlcmVyIHBhcmFtZXRlcnNcbiAqIEBwYXJhbSBbb3B0aW9ucy52aWV3XSB7SFRNTENhbnZhc0VsZW1lbnR9IHRoZSBjYW52YXMgdG8gdXNlIGFzIGEgdmlldywgb3B0aW9uYWxcbiAqIEBwYXJhbSBbb3B0aW9ucy50cmFuc3BhcmVudD1mYWxzZV0ge2Jvb2xlYW59IElmIHRoZSByZW5kZXIgdmlldyBpcyB0cmFuc3BhcmVudCwgZGVmYXVsdCBmYWxzZVxuICogQHBhcmFtIFtvcHRpb25zLmF1dG9SZXNpemU9ZmFsc2VdIHtib29sZWFufSBJZiB0aGUgcmVuZGVyIHZpZXcgaXMgYXV0b21hdGljYWxseSByZXNpemVkLCBkZWZhdWx0IGZhbHNlXG4gKiBAcGFyYW0gW29wdGlvbnMuYW50aWFsaWFzPWZhbHNlXSB7Ym9vbGVhbn0gc2V0cyBhbnRpYWxpYXMuIElmIG5vdCBhdmFpbGFibGUgbmF0aXZlbHkgdGhlbiBGWEFBIGFudGlhbGlhc2luZyBpcyB1c2VkXG4gKiBAcGFyYW0gW29wdGlvbnMuZm9yY2VGWEFBPWZhbHNlXSB7Ym9vbGVhbn0gZm9yY2VzIEZYQUEgYW50aWFsaWFzaW5nIHRvIGJlIHVzZWQgb3ZlciBuYXRpdmUuIEZYQUEgaXMgZmFzdGVyLCBidXQgbWF5IG5vdCBhbHdheXMgbG9vayBhcyBncmVhdFxuICogQHBhcmFtIFtvcHRpb25zLnJlc29sdXRpb249MV0ge251bWJlcn0gdGhlIHJlc29sdXRpb24gb2YgdGhlIHJlbmRlcmVyIHJldGluYSB3b3VsZCBiZSAyXG4gKiBAcGFyYW0gW29wdGlvbnMuY2xlYXJCZWZvcmVSZW5kZXI9dHJ1ZV0ge2Jvb2xlYW59IFRoaXMgc2V0cyBpZiB0aGUgQ2FudmFzUmVuZGVyZXIgd2lsbCBjbGVhciB0aGUgY2FudmFzIG9yXG4gKiAgICAgIG5vdCBiZWZvcmUgdGhlIG5ldyByZW5kZXIgcGFzcy4gSWYgeW91IHdpc2ggdG8gc2V0IHRoaXMgdG8gZmFsc2UsIHlvdSAqbXVzdCogc2V0IHByZXNlcnZlRHJhd2luZ0J1ZmZlciB0byBgdHJ1ZWAuXG4gKiBAcGFyYW0gW29wdGlvbnMucHJlc2VydmVEcmF3aW5nQnVmZmVyPWZhbHNlXSB7Ym9vbGVhbn0gZW5hYmxlcyBkcmF3aW5nIGJ1ZmZlciBwcmVzZXJ2YXRpb24sIGVuYWJsZSB0aGlzIGlmXG4gKiAgICAgIHlvdSBuZWVkIHRvIGNhbGwgdG9EYXRhVXJsIG9uIHRoZSB3ZWJnbCBjb250ZXh0LlxuICogQHBhcmFtIFtvcHRpb25zLnJvdW5kUGl4ZWxzPWZhbHNlXSB7Ym9vbGVhbn0gSWYgdHJ1ZSBQaXhpIHdpbGwgTWF0aC5mbG9vcigpIHgveSB2YWx1ZXMgd2hlbiByZW5kZXJpbmcsIHN0b3BwaW5nIHBpeGVsIGludGVycG9sYXRpb24uXG4gKi9cbmZ1bmN0aW9uIFdlYkdMUmVuZGVyZXIod2lkdGgsIGhlaWdodCwgb3B0aW9ucylcbntcbiAgICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcblxuICAgIFN5c3RlbVJlbmRlcmVyLmNhbGwodGhpcywgJ1dlYkdMJywgd2lkdGgsIGhlaWdodCwgb3B0aW9ucyk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgdHlwZSBvZiB0aGlzIHJlbmRlcmVyIGFzIGEgc3RhbmRhcmRpc2VkIGNvbnN0XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9Ly9cbiAgICAgKlxuICAgICAqL1xuICAgIHRoaXMudHlwZSA9IENPTlNULlJFTkRFUkVSX1RZUEUuV0VCR0w7XG5cbiAgICB0aGlzLmhhbmRsZUNvbnRleHRMb3N0ID0gdGhpcy5oYW5kbGVDb250ZXh0TG9zdC5iaW5kKHRoaXMpO1xuICAgIHRoaXMuaGFuZGxlQ29udGV4dFJlc3RvcmVkID0gdGhpcy5oYW5kbGVDb250ZXh0UmVzdG9yZWQuYmluZCh0aGlzKTtcblxuICAgIHRoaXMudmlldy5hZGRFdmVudExpc3RlbmVyKCd3ZWJnbGNvbnRleHRsb3N0JywgdGhpcy5oYW5kbGVDb250ZXh0TG9zdCwgZmFsc2UpO1xuICAgIHRoaXMudmlldy5hZGRFdmVudExpc3RlbmVyKCd3ZWJnbGNvbnRleHRyZXN0b3JlZCcsIHRoaXMuaGFuZGxlQ29udGV4dFJlc3RvcmVkLCBmYWxzZSk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgb3B0aW9ucyBwYXNzZWQgaW4gdG8gY3JlYXRlIGEgbmV3IHdlYmdsIGNvbnRleHQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtvYmplY3R9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9jb250ZXh0T3B0aW9ucyA9IHtcbiAgICAgICAgYWxwaGE6IHRoaXMudHJhbnNwYXJlbnQsXG4gICAgICAgIGFudGlhbGlhczogb3B0aW9ucy5hbnRpYWxpYXMsXG4gICAgICAgIHByZW11bHRpcGxpZWRBbHBoYTogdGhpcy50cmFuc3BhcmVudCAmJiB0aGlzLnRyYW5zcGFyZW50ICE9PSAnbm90TXVsdGlwbGllZCcsXG4gICAgICAgIHN0ZW5jaWw6IHRydWUsXG4gICAgICAgIHByZXNlcnZlRHJhd2luZ0J1ZmZlcjogb3B0aW9ucy5wcmVzZXJ2ZURyYXdpbmdCdWZmZXJcbiAgICB9O1xuXG4gICAgdGhpcy5fYmFja2dyb3VuZENvbG9yUmdiYVszXSA9IHRoaXMudHJhbnNwYXJlbnQgPyAwIDogMTtcblxuICAgIC8qKlxuICAgICAqIERlYWxzIHdpdGggbWFuYWdpbmcgdGhlIHNoYWRlciBwcm9ncmFtcyBhbmQgdGhlaXIgYXR0cmlicy5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuU2hhZGVyTWFuYWdlcn1cbiAgICAgKi9cbiAgICB0aGlzLnNoYWRlck1hbmFnZXIgPSBuZXcgU2hhZGVyTWFuYWdlcih0aGlzKTtcblxuICAgIC8qKlxuICAgICAqIE1hbmFnZXMgdGhlIG1hc2tzIHVzaW5nIHRoZSBzdGVuY2lsIGJ1ZmZlci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuTWFza01hbmFnZXJ9XG4gICAgICovXG4gICAgdGhpcy5tYXNrTWFuYWdlciA9IG5ldyBNYXNrTWFuYWdlcih0aGlzKTtcblxuICAgIC8qKlxuICAgICAqIE1hbmFnZXMgdGhlIHN0ZW5jaWwgYnVmZmVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5TdGVuY2lsTWFuYWdlcn1cbiAgICAgKi9cbiAgICB0aGlzLnN0ZW5jaWxNYW5hZ2VyID0gbmV3IFN0ZW5jaWxNYW5hZ2VyKHRoaXMpO1xuXG4gICAgLyoqXG4gICAgICogTWFuYWdlcyB0aGUgZmlsdGVycy5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuRmlsdGVyTWFuYWdlcn1cbiAgICAgKi9cbiAgICB0aGlzLmZpbHRlck1hbmFnZXIgPSBuZXcgRmlsdGVyTWFuYWdlcih0aGlzKTtcblxuICAgIC8qKlxuICAgICAqIE1hbmFnZXMgdGhlIGJsZW5kTW9kZXNcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuQmxlbmRNb2RlTWFuYWdlcn1cbiAgICAgKi9cbiAgICB0aGlzLmJsZW5kTW9kZU1hbmFnZXIgPSBuZXcgQmxlbmRNb2RlTWFuYWdlcih0aGlzKTtcblxuICAgIFxuICAgIC8qKlxuICAgICAqIFRoZSBjdXJyZW50bHkgYWN0aXZlIE9iamVjdFJlbmRlcmVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5PYmplY3RSZW5kZXJlcn1cbiAgICAgKi9cbiAgICB0aGlzLmN1cnJlbnRSZW5kZXJlciA9IG5ldyBPYmplY3RSZW5kZXJlcih0aGlzKTtcblxuICAgIHRoaXMuaW5pdFBsdWdpbnMoKTtcblxuICAgIC8vIGluaXRpYWxpemUgdGhlIGNvbnRleHQgc28gaXQgaXMgcmVhZHkgZm9yIHRoZSBtYW5hZ2Vycy5cbiAgICB0aGlzLmdsID0gY3JlYXRlQ29udGV4dCh0aGlzLnZpZXcsIHRoaXMuX2NvbnRleHRPcHRpb25zKTtcblxuICAgIHRoaXMuX2luaXRDb250ZXh0KCk7XG5cbiAgICAvLyBtYXAgc29tZSB3ZWJHTCBibGVuZCBhbmQgZHJhd21vZGVzLi5cbiAgICB0aGlzLmJsZW5kTW9kZXMgPSBtYXBXZWJHTEJsZW5kTW9kZXNUb1BpeGkoZ2wpO1xuICAgIHRoaXMuZHJhd01vZGVzID0gbWFwV2ViR0xEcmF3TW9kZXNUb1BpeGkoZ2wpXG5cbiAgICB0aGlzLl9hY3RpdmVTaGFkZXIgPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogSG9sZHMgdGhlIGN1cnJlbnQgcmVuZGVyIHRhcmdldFxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5SZW5kZXJUYXJnZXR9XG4gICAgICovXG4gICAgdGhpcy5fYWN0aXZlUmVuZGVyVGFyZ2V0ID0gbnVsbDtcbiAgICB0aGlzLl9hY3RpdmVUZXh0dXJlTG9jYXRpb24gPSBudWxsO1xuICAgIHRoaXMuX2FjdGl2ZVRleHR1cmUgPSBudWxsO1xufVxuXG4vLyBjb25zdHJ1Y3RvclxuV2ViR0xSZW5kZXJlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFN5c3RlbVJlbmRlcmVyLnByb3RvdHlwZSk7XG5XZWJHTFJlbmRlcmVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFdlYkdMUmVuZGVyZXI7XG5tb2R1bGUuZXhwb3J0cyA9IFdlYkdMUmVuZGVyZXI7XG51dGlscy5wbHVnaW5UYXJnZXQubWl4aW4oV2ViR0xSZW5kZXJlcik7XG5cbi8qKlxuICogQ3JlYXRlcyB0aGUgV2ViR0wgY29udGV4dFxuICpcbiAqIEBwcml2YXRlXG4gKi9cbldlYkdMUmVuZGVyZXIucHJvdG90eXBlLl9pbml0Q29udGV4dCA9IGZ1bmN0aW9uICgpXG57XG4gICAgdmFyIGdsID0gdGhpcy5nbDtcblxuICAgIC8vIGNyZWF0ZSBhIHRleHR1cmUgbWFuYWdlci4uLlxuICAgIHRoaXMudGV4dHVyZU1hbmFnZXIgPSBuZXcgVGV4dHVyZU1hbmFnZXIoZ2wpO1xuXG4gICAgLy8gc2V0IHVwIHRoZSBkZWZhdWx0IHBpeGkgc2V0dGluZ3MuLlxuICAgIGdsLmRpc2FibGUoZ2wuREVQVEhfVEVTVCk7XG4gICAgZ2wuZGlzYWJsZShnbC5DVUxMX0ZBQ0UpO1xuICAgIGdsLmVuYWJsZShnbC5CTEVORCk7XG5cblxuICAgIHRoaXMucm9vdFJlbmRlclRhcmdldCA9IG5ldyBSZW5kZXJUYXJnZXQoZ2wsIHRoaXMud2lkdGgsIHRoaXMuaGVpZ2h0LCBudWxsLCB0aGlzLnJlc29sdXRpb24sIHRydWUpO1xuICAgIHRoaXMucm9vdFJlbmRlclRhcmdldC5jbGVhckNvbG9yID0gdGhpcy5fYmFja2dyb3VuZENvbG9yUmdiYTtcbiAgICBcbiAgICB0aGlzLmJpbmRSZW5kZXJUYXJnZXQodGhpcy5yb290UmVuZGVyVGFyZ2V0KTtcblxuICAgIHRoaXMuZW1pdCgnY29udGV4dCcsIGdsKTtcblxuICAgIC8vIHNldHVwIHRoZSB3aWR0aC9oZWlnaHQgcHJvcGVydGllcyBhbmQgZ2wgdmlld3BvcnRcbiAgICB0aGlzLnJlc2l6ZSh0aGlzLndpZHRoLCB0aGlzLmhlaWdodCk7ICAgIFxufTtcblxuLyoqXG4gKiBSZW5kZXJzIHRoZSBvYmplY3QgdG8gaXRzIHdlYkdMIHZpZXdcbiAqXG4gKiBAcGFyYW0gb2JqZWN0IHtQSVhJLkRpc3BsYXlPYmplY3R9IHRoZSBvYmplY3QgdG8gYmUgcmVuZGVyZWRcbiAqL1xuV2ViR0xSZW5kZXJlci5wcm90b3R5cGUucmVuZGVyID0gZnVuY3Rpb24gKGRpc3BsYXlPYmplY3QpXG57XG4gICAgdGhpcy5lbWl0KCdwcmVyZW5kZXInKTtcblxuICAgIC8vIG5vIHBvaW50IHJlbmRlcmluZyBpZiBvdXIgY29udGV4dCBoYXMgYmVlbiBibG93biB1cCFcbiAgICBpZiAodGhpcy5nbC5pc0NvbnRleHRMb3N0KCkpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5fbGFzdE9iamVjdFJlbmRlcmVkID0gZGlzcGxheU9iamVjdDtcblxuICAgIHZhciBjYWNoZVBhcmVudCA9IGRpc3BsYXlPYmplY3QucGFyZW50O1xuICAgIGRpc3BsYXlPYmplY3QucGFyZW50ID0gdGhpcy5fdGVtcERpc3BsYXlPYmplY3RQYXJlbnQ7XG4gICAgLy8gdXBkYXRlIHRoZSBzY2VuZSBncmFwaFxuICAgIGRpc3BsYXlPYmplY3QudXBkYXRlVHJhbnNmb3JtKCk7XG4gICAgZGlzcGxheU9iamVjdC5wYXJlbnQgPSBjYWNoZVBhcmVudDtcblxuICAgIHRoaXMucmVuZGVyRGlzcGxheU9iamVjdChkaXNwbGF5T2JqZWN0LCB0aGlzLnJvb3RSZW5kZXJUYXJnZXQsIHRoaXMuY2xlYXJCZWZvcmVSZW5kZXIpOy8vdGhpcy5wcm9qZWN0aW9uKTtcblxuICAgIHRoaXMuZW1pdCgncG9zdHJlbmRlcicpO1xufTtcblxuLyoqXG4gKiBSZW5kZXJzIGEgRGlzcGxheSBPYmplY3QuXG4gKlxuICogQHBhcmFtIGRpc3BsYXlPYmplY3Qge1BJWEkuRGlzcGxheU9iamVjdH0gVGhlIERpc3BsYXlPYmplY3QgdG8gcmVuZGVyXG4gKiBAcGFyYW0gcmVuZGVyVGFyZ2V0IHtQSVhJLlJlbmRlclRhcmdldH0gVGhlIHJlbmRlciB0YXJnZXQgdG8gdXNlIHRvIHJlbmRlciB0aGlzIGRpc3BsYXkgb2JqZWN0XG4gKlxuICovXG5XZWJHTFJlbmRlcmVyLnByb3RvdHlwZS5yZW5kZXJEaXNwbGF5T2JqZWN0ID0gZnVuY3Rpb24gKGRpc3BsYXlPYmplY3QsIHJlbmRlclRhcmdldCwgY2xlYXIpLy9wcm9qZWN0aW9uLCBidWZmZXIpXG57XG4gICAgdGhpcy5iaW5kUmVuZGVyVGFyZ2V0KHJlbmRlclRhcmdldCk7XG5cbiAgICBpZihjbGVhcilcbiAgICB7XG4gICAgICAgIHJlbmRlclRhcmdldC5jbGVhcigpO1xuICAgIH1cblxuICAgIC8vIHN0YXJ0IHRoZSBmaWx0ZXIgbWFuYWdlclxuICAgIHRoaXMuZmlsdGVyTWFuYWdlci5zZXRGaWx0ZXJTdGFjayggcmVuZGVyVGFyZ2V0LmZpbHRlclN0YWNrICk7XG5cbiAgICAvLyByZW5kZXIgdGhlIHNjZW5lIVxuICAgIGRpc3BsYXlPYmplY3QucmVuZGVyV2ViR0wodGhpcyk7XG5cbiAgICAvLyBmaW5pc2ggdGhlIGN1cnJlbnQgcmVuZGVyZXIuLlxuICAgIHRoaXMuY3VycmVudFJlbmRlcmVyLmZsdXNoKCk7XG59O1xuXG4vKipcbiAqIENoYW5nZXMgdGhlIGN1cnJlbnQgcmVuZGVyZXIgdG8gdGhlIG9uZSBnaXZlbiBpbiBwYXJhbWV0ZXJcbiAqXG4gKiBAcGFyYW0gb2JqZWN0UmVuZGVyZXIge1BJWEkuT2JqZWN0UmVuZGVyZXJ9IFRoZSBvYmplY3QgcmVuZGVyZXIgdG8gdXNlLlxuICovXG5XZWJHTFJlbmRlcmVyLnByb3RvdHlwZS5zZXRPYmplY3RSZW5kZXJlciA9IGZ1bmN0aW9uIChvYmplY3RSZW5kZXJlcilcbntcbiAgICBpZiAodGhpcy5jdXJyZW50UmVuZGVyZXIgPT09IG9iamVjdFJlbmRlcmVyKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuY3VycmVudFJlbmRlcmVyLnN0b3AoKTtcbiAgICB0aGlzLmN1cnJlbnRSZW5kZXJlciA9IG9iamVjdFJlbmRlcmVyO1xuICAgIHRoaXMuY3VycmVudFJlbmRlcmVyLnN0YXJ0KCk7XG59O1xuXG4vKipcbiAqIFJlc2l6ZXMgdGhlIHdlYkdMIHZpZXcgdG8gdGhlIHNwZWNpZmllZCB3aWR0aCBhbmQgaGVpZ2h0LlxuICpcbiAqIEBwYXJhbSB3aWR0aCB7bnVtYmVyfSB0aGUgbmV3IHdpZHRoIG9mIHRoZSB3ZWJHTCB2aWV3XG4gKiBAcGFyYW0gaGVpZ2h0IHtudW1iZXJ9IHRoZSBuZXcgaGVpZ2h0IG9mIHRoZSB3ZWJHTCB2aWV3XG4gKi9cbldlYkdMUmVuZGVyZXIucHJvdG90eXBlLnJlc2l6ZSA9IGZ1bmN0aW9uICh3aWR0aCwgaGVpZ2h0KVxue1xuICAgIFN5c3RlbVJlbmRlcmVyLnByb3RvdHlwZS5yZXNpemUuY2FsbCh0aGlzLCB3aWR0aCwgaGVpZ2h0KTtcblxuICAgIHRoaXMuZmlsdGVyTWFuYWdlci5yZXNpemUod2lkdGgsIGhlaWdodCk7XG4gICAgdGhpcy5yb290UmVuZGVyVGFyZ2V0LnJlc2l6ZSh3aWR0aCwgaGVpZ2h0KTtcblxuICAgIGlmKHRoaXMuY3VycmVudFJlbmRlclRhcmdldCA9PT0gdGhpcy5yZW5kZXJUYXJnZXQpXG4gICAge1xuICAgICAgICB0aGlzLnJvb3RSZW5kZXJUYXJnZXQuYWN0aXZhdGUoKTtcbiAgICB9XG59O1xuXG4vKipcbiAqIENoYW5nZXMgdGhlIGN1cnJlbnQgcmVuZGVyIHRhcmdldCB0byB0aGUgb25lIGdpdmVuIGluIHBhcmFtZXRlclxuICpcbiAqIEBwYXJhbSByZW5kZXJUYXJnZXQge1BJWEkuUmVuZGVyVGFyZ2V0fSB0aGUgbmV3IHJlbmRlciB0YXJnZXRcbiAqL1xuV2ViR0xSZW5kZXJlci5wcm90b3R5cGUuYmluZFJlbmRlclRhcmdldCA9IGZ1bmN0aW9uIChyZW5kZXJUYXJnZXQpLy9wcm9qZWN0aW9uLCBidWZmZXIpXG57XG4gICAgaWYocmVuZGVyVGFyZ2V0ICE9PSB0aGlzLl9hY3RpdmVSZW5kZXJUYXJnZXQpXG4gICAge1xuICAgICAgICB0aGlzLl9hY3RpdmVSZW5kZXJUYXJnZXQgPSByZW5kZXJUYXJnZXQ7XG5cbiAgICAgICAgaWYodGhpcy5fYWN0aXZlU2hhZGVyKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLl9hY3RpdmVTaGFkZXIudW5pZm9ybXMucHJvamVjdGlvbk1hdHJpeCA9IHJlbmRlclRhcmdldC5wcm9qZWN0aW9uTWF0cml4LnRvQXJyYXkodHJ1ZSk7XG4gICAgICAgIH1cblxuICAgICAgICByZW5kZXJUYXJnZXQuYWN0aXZhdGUoKTtcblxuICAgICAgICB0aGlzLnN0ZW5jaWxNYW5hZ2VyLnNldE1hc2tTdGFjayggcmVuZGVyVGFyZ2V0LnN0ZW5jaWxNYXNrU3RhY2sgKTtcbiAgICB9XG59XG5cbldlYkdMUmVuZGVyZXIucHJvdG90eXBlLmJpbmRTaGFkZXIgPSBmdW5jdGlvbiAoc2hhZGVyKS8vcHJvamVjdGlvbiwgYnVmZmVyKVxue1xuICAgIC8vVE9ETyBjYWNoZVxuICAgIGlmKHRoaXMuX2FjdGl2ZVNoYWRlciAhPT0gc2hhZGVyKVxuICAgIHtcbiAgICAgICAgdGhpcy5fYWN0aXZlU2hhZGVyID0gc2hhZGVyO1xuICAgICAgICBzaGFkZXIuYmluZCgpO1xuXG4gICAgICAgIC8vIGF1dG9tYXRpY2FsbHkgc2V0IHRoZSBwcm9qZWN0aW9uIG1hdHJpeFxuICAgICAgICBzaGFkZXIudW5pZm9ybXMucHJvamVjdGlvbk1hdHJpeCA9IHRoaXMuX2FjdGl2ZVJlbmRlclRhcmdldC5wcm9qZWN0aW9uTWF0cml4LnRvQXJyYXkodHJ1ZSk7XG4gICAgfVxufVxuXG5cbldlYkdMUmVuZGVyZXIucHJvdG90eXBlLmJpbmRUZXh0dXJlID0gZnVuY3Rpb24gKHRleHR1cmUsIGxvY2F0aW9uKVxue1xuICAgIHZhciBnbCA9IHRoaXMuZ2w7XG5cbiAgICAvL1RPRE8gdGVzdCBwZXJmIG9mIGNhY2hlP1xuICAgIGxvY2F0aW9uID0gbG9jYXRpb24gfHwgMDtcblxuICAgIGlmKHRoaXMuX2FjdGl2ZVRleHR1cmVMb2NhdGlvbiAhPT0gbG9jYXRpb24pLy9cbiAgICB7XG4gICAgICAgIHRoaXMuX2FjdGl2ZVRleHR1cmVMb2NhdGlvbiA9IGxvY2F0aW9uXG4gICAgICAgIGdsLmFjdGl2ZVRleHR1cmUoZ2wuVEVYVFVSRTAgKyBsb2NhdGlvbiApO1xuICAgIH1cblxuICAgIC8vVE9ETyAtIGNhbiB3ZSBjYWNoZSB0aGlzIHRleHR1cmUgdG9vP1xuICAgIHRoaXMuX2FjdGl2ZVRleHR1cmUgPSB0ZXh0dXJlOyAgICAgIFxuICAgIFxuICAgIGlmICghdGV4dHVyZS5fZ2xUZXh0dXJlc1tnbC5pZF0pXG4gICAge1xuICAgICAgICAvLyB0aGlzIHdpbGwgYWxzbyBiaW5kIHRoZSB0ZXh0dXJlLi5cbiAgICAgICAgdGhpcy50ZXh0dXJlTWFuYWdlci51cGRhdGVUZXh0dXJlKHRleHR1cmUpO1xuICAgIH1cbiAgICBlbHNlXG4gICAgeyAgIFxuICAgICAgICAvLyBiaW5kIHRoZSBjdXJyZW50IHRleHR1cmVcbiAgICAgICAgdGV4dHVyZS5fZ2xUZXh0dXJlc1tnbC5pZF0uYmluZCgpO1xuICAgIH1cbn1cblxuXG4vKipcbiAqIEhhbmRsZXMgYSBsb3N0IHdlYmdsIGNvbnRleHRcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5XZWJHTFJlbmRlcmVyLnByb3RvdHlwZS5oYW5kbGVDb250ZXh0TG9zdCA9IGZ1bmN0aW9uIChldmVudClcbntcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xufTtcblxuLyoqXG4gKiBIYW5kbGVzIGEgcmVzdG9yZWQgd2ViZ2wgY29udGV4dFxuICpcbiAqIEBwcml2YXRlXG4gKi9cbldlYkdMUmVuZGVyZXIucHJvdG90eXBlLmhhbmRsZUNvbnRleHRSZXN0b3JlZCA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy5faW5pdENvbnRleHQoKTtcbiAgICB0aGlzLnRleHR1cmVNYW5hZ2VyLnJlbW92ZUFsbCgpO1xufTtcblxuLyoqXG4gKiBSZW1vdmVzIGV2ZXJ5dGhpbmcgZnJvbSB0aGUgcmVuZGVyZXIgKGV2ZW50IGxpc3RlbmVycywgc3ByaXRlYmF0Y2gsIGV0Yy4uLilcbiAqXG4gKiBAcGFyYW0gW3JlbW92ZVZpZXc9ZmFsc2VdIHtib29sZWFufSBSZW1vdmVzIHRoZSBDYW52YXMgZWxlbWVudCBmcm9tIHRoZSBET00uXG4gKi9cbldlYkdMUmVuZGVyZXIucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAocmVtb3ZlVmlldylcbntcbiAgICB0aGlzLmRlc3Ryb3lQbHVnaW5zKCk7XG5cbiAgICAvLyByZW1vdmUgbGlzdGVuZXJzXG4gICAgdGhpcy52aWV3LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3dlYmdsY29udGV4dGxvc3QnLCB0aGlzLmhhbmRsZUNvbnRleHRMb3N0KTtcbiAgICB0aGlzLnZpZXcucmVtb3ZlRXZlbnRMaXN0ZW5lcignd2ViZ2xjb250ZXh0cmVzdG9yZWQnLCB0aGlzLmhhbmRsZUNvbnRleHRSZXN0b3JlZCk7XG5cbiAgICB0aGlzLnRleHR1cmVNYW5hZ2VyLmRlc3Ryb3lBbGwoKTtcblxuICAgIC8vIGNhbGwgYmFzZSBkZXN0cm95XG4gICAgU3lzdGVtUmVuZGVyZXIucHJvdG90eXBlLmRlc3Ryb3kuY2FsbCh0aGlzLCByZW1vdmVWaWV3KTtcblxuICAgIHRoaXMudWlkID0gMDtcblxuICAgIC8vIGRlc3Ryb3kgdGhlIG1hbmFnZXJzXG4gICAgdGhpcy5zaGFkZXJNYW5hZ2VyLmRlc3Ryb3koKTtcbiAgICB0aGlzLm1hc2tNYW5hZ2VyLmRlc3Ryb3koKTtcbiAgICB0aGlzLnN0ZW5jaWxNYW5hZ2VyLmRlc3Ryb3koKTtcbiAgICB0aGlzLmZpbHRlck1hbmFnZXIuZGVzdHJveSgpO1xuICAgIHRoaXMuYmxlbmRNb2RlTWFuYWdlci5kZXN0cm95KCk7XG5cbiAgICB0aGlzLnNoYWRlck1hbmFnZXIgPSBudWxsO1xuICAgIHRoaXMubWFza01hbmFnZXIgPSBudWxsO1xuICAgIHRoaXMuZmlsdGVyTWFuYWdlciA9IG51bGw7XG4gICAgdGhpcy5ibGVuZE1vZGVNYW5hZ2VyID0gbnVsbDtcbiAgICB0aGlzLmN1cnJlbnRSZW5kZXJlciA9IG51bGw7XG5cbiAgICB0aGlzLmhhbmRsZUNvbnRleHRMb3N0ID0gbnVsbDtcbiAgICB0aGlzLmhhbmRsZUNvbnRleHRSZXN0b3JlZCA9IG51bGw7XG5cbiAgICB0aGlzLl9jb250ZXh0T3B0aW9ucyA9IG51bGw7XG5cbiAgICB0aGlzLmdsLnVzZVByb2dyYW0obnVsbCk7XG4gICAgdGhpcy5nbCA9IG51bGw7XG59O1xuXG4iLCJ2YXIgRGVmYXVsdFNoYWRlciA9IHJlcXVpcmUoJy4uL3NoYWRlcnMvVGV4dHVyZVNoYWRlcicpO1xuXG4vKipcbiAqIFRoaXMgaXMgdGhlIGJhc2UgY2xhc3MgZm9yIGNyZWF0aW5nIGEgUElYSSBmaWx0ZXIuIEN1cnJlbnRseSBvbmx5IFdlYkdMIHN1cHBvcnRzIGZpbHRlcnMuXG4gKiBJZiB5b3Ugd2FudCB0byBtYWtlIGEgY3VzdG9tIGZpbHRlciB0aGlzIHNob3VsZCBiZSB5b3VyIGJhc2UgY2xhc3MuXG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIHZlcnRleFNyYyB7c3RyaW5nfHN0cmluZ1tdfSBUaGUgdmVydGV4IHNoYWRlciBzb3VyY2UgYXMgYW4gYXJyYXkgb2Ygc3RyaW5ncy5cbiAqIEBwYXJhbSBmcmFnbWVudFNyYyB7c3RyaW5nfHN0cmluZ1tdfSBUaGUgZnJhZ21lbnQgc2hhZGVyIHNvdXJjZSBhcyBhbiBhcnJheSBvZiBzdHJpbmdzLlxuICogQHBhcmFtIHVuaWZvcm1zIHtvYmplY3R9IEFuIG9iamVjdCBjb250YWluaW5nIHRoZSB1bmlmb3JtcyBmb3IgdGhpcyBmaWx0ZXIuXG4gKi9cbmZ1bmN0aW9uIEFic3RyYWN0RmlsdGVyKHZlcnRleFNyYywgZnJhZ21lbnRTcmMsIHVuaWZvcm1zKVxue1xuXG4gICAgLyoqXG4gICAgICogQW4gYXJyYXkgb2Ygc2hhZGVyc1xuICAgICAqIEBtZW1iZXIge1BJWEkuU2hhZGVyW119XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLnNoYWRlcnMgPSBbXTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBleHRyYSBwYWRkaW5nIHRoYXQgdGhlIGZpbHRlciBtaWdodCBuZWVkXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMucGFkZGluZyA9IDA7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgdW5pZm9ybXMgYXMgYW4gb2JqZWN0XG4gICAgICogQG1lbWJlciB7b2JqZWN0fVxuICAgICAqL1xuICAgIHRoaXMudW5pZm9ybXMgPSB1bmlmb3JtcyB8fCB7fTtcblxuXG4gICAgLyoqXG4gICAgICogVGhlIGNvZGUgb2YgdGhlIHZlcnRleCBzaGFkZXJcbiAgICAgKiBAbWVtYmVyIHtzdHJpbmdbXX1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMudmVydGV4U3JjID0gdmVydGV4U3JjIHx8IERlZmF1bHRTaGFkZXIuZGVmYXVsdFZlcnRleFNyYztcblxuICAgIC8qKlxuICAgICAqIFRoZSBjb2RlIG9mIHRoZSBmcmFtZW50IHNoYWRlclxuICAgICAqIEBtZW1iZXIge3N0cmluZ1tdfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5mcmFnbWVudFNyYyA9IGZyYWdtZW50U3JjIHx8IERlZmF1bHRTaGFkZXIuZGVmYXVsdEZyYWdtZW50U3JjO1xuXG4gICAgLy9UT0RPIGEgcmVtaW5kZXIgLSB3b3VsZCBiZSBjb29sIHRvIGhhdmUgbG93ZXIgcmVzIGZpbHRlcnMgYXMgdGhpcyB3b3VsZCBnaXZlIGJldHRlciBwZXJmb3JtYW5jZS5cblxuICAgIC8vdHlwZW9mIGZyYWdtZW50U3JjID09PSAnc3RyaW5nJyA/IGZyYWdtZW50U3JjLnNwbGl0KCcnKSA6IChmcmFnbWVudFNyYyB8fCBbXSk7XG5cbn1cblxuQWJzdHJhY3RGaWx0ZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gQWJzdHJhY3RGaWx0ZXI7XG5tb2R1bGUuZXhwb3J0cyA9IEFic3RyYWN0RmlsdGVyO1xuXG4vKipcbiAqIEdyYWJzIGEgc2hhZGVyIGZyb20gdGhlIGN1cnJlbnQgcmVuZGVyZXJcbiAqXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcn0gVGhlIHJlbmRlcmVyIHRvIHJldHJpZXZlIHRoZSBzaGFkZXIgZnJvbVxuICovXG5BYnN0cmFjdEZpbHRlci5wcm90b3R5cGUuZ2V0U2hhZGVyID0gZnVuY3Rpb24gKHJlbmRlcmVyKVxue1xuICAgIHZhciBnbCA9IHJlbmRlcmVyLmdsO1xuXG4gICAgdmFyIHNoYWRlciA9IHRoaXMuc2hhZGVyc1tnbC5pZF07XG5cbiAgICBpZiAoIXNoYWRlcilcbiAgICB7XG4gICAgICAgIHNoYWRlciA9IG5ldyBEZWZhdWx0U2hhZGVyKHJlbmRlcmVyLnNoYWRlck1hbmFnZXIsXG4gICAgICAgICAgICB0aGlzLnZlcnRleFNyYyxcbiAgICAgICAgICAgIHRoaXMuZnJhZ21lbnRTcmMsXG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLFxuICAgICAgICAgICAgdGhpcy5hdHRyaWJ1dGVzXG4gICAgICAgICk7XG5cbiAgICAgICAgdGhpcy5zaGFkZXJzW2dsLmlkXSA9IHNoYWRlcjtcbiAgICB9XG5cbiAgICByZXR1cm4gc2hhZGVyO1xufTtcblxuLyoqXG4gKiBBcHBsaWVzIHRoZSBmaWx0ZXJcbiAqXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcn0gVGhlIHJlbmRlcmVyIHRvIHJldHJpZXZlIHRoZSBmaWx0ZXIgZnJvbVxuICogQHBhcmFtIGlucHV0IHtQSVhJLlJlbmRlclRhcmdldH1cbiAqIEBwYXJhbSBvdXRwdXQge1BJWEkuUmVuZGVyVGFyZ2V0fVxuICogQHBhcmFtIGNsZWFyIHtib29sZWFufSBXaGV0aGVyIG9yIG5vdCB3ZSB3YW50IHRvIGNsZWFyIHRoZSBvdXRwdXRUYXJnZXRcbiAqL1xuQWJzdHJhY3RGaWx0ZXIucHJvdG90eXBlLmFwcGx5RmlsdGVyID0gZnVuY3Rpb24gKHJlbmRlcmVyLCBpbnB1dCwgb3V0cHV0LCBjbGVhcilcbntcbiAgICB2YXIgc2hhZGVyID0gdGhpcy5nZXRTaGFkZXIocmVuZGVyZXIpO1xuXG4gICAgcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5hcHBseUZpbHRlcihzaGFkZXIsIGlucHV0LCBvdXRwdXQsIGNsZWFyKTtcbn07XG5cbi8qKlxuICogU3luY3MgYSB1bmlmb3JtIGJldHdlZW4gdGhlIGNsYXNzIG9iamVjdCBhbmQgdGhlIHNoYWRlcnMuXG4gKlxuICovXG5BYnN0cmFjdEZpbHRlci5wcm90b3R5cGUuc3luY1VuaWZvcm0gPSBmdW5jdGlvbiAodW5pZm9ybSlcbntcbiAgICBmb3IgKHZhciBpID0gMCwgaiA9IHRoaXMuc2hhZGVycy5sZW5ndGg7IGkgPCBqOyArK2kpXG4gICAge1xuICAgICAgICB0aGlzLnNoYWRlcnNbaV0uc3luY1VuaWZvcm0odW5pZm9ybSk7XG4gICAgfVxufTtcbiIsInZhciBBYnN0cmFjdEZpbHRlciA9IHJlcXVpcmUoJy4vQWJzdHJhY3RGaWx0ZXInKTtcbi8vIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL3N1YnN0YWNrL2JyZnMvaXNzdWVzLzI1XG5cblxuLyoqXG4gKlxuICogQmFzaWMgRlhBQSBpbXBsZW1lbnRhdGlvbiBiYXNlZCBvbiB0aGUgY29kZSBvbiBnZWVrczNkLmNvbSB3aXRoIHRoZVxuICogbW9kaWZpY2F0aW9uIHRoYXQgdGhlIHRleHR1cmUyRExvZCBzdHVmZiB3YXMgcmVtb3ZlZCBzaW5jZSBpdCdzXG4gKiB1bnN1cHBvcnRlZCBieSBXZWJHTC5cbiAqXG4gKiAtLVxuICogRnJvbTpcbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS9taXRzdWhpa28vd2ViZ2wtbWVpbmNyYWZ0XG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLkFic3RyYWN0RmlsdGVyXG4gKiBAbWVtYmVyb2YgUElYSVxuICpcbiAqL1xuZnVuY3Rpb24gRlhBQUZpbHRlcigpXG57XG4gICAgQWJzdHJhY3RGaWx0ZXIuY2FsbCh0aGlzLFxuICAgICAgICAvLyB2ZXJ0ZXggc2hhZGVyXG4gICAgICAgIFwiXFxucHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XFxuXFxuYXR0cmlidXRlIHZlYzIgYVZlcnRleFBvc2l0aW9uO1xcbmF0dHJpYnV0ZSB2ZWMyIGFUZXh0dXJlQ29vcmQ7XFxuYXR0cmlidXRlIHZlYzQgYUNvbG9yO1xcblxcbnVuaWZvcm0gbWF0MyBwcm9qZWN0aW9uTWF0cml4O1xcbnVuaWZvcm0gdmVjMiByZXNvbHV0aW9uO1xcblxcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xcbnZhcnlpbmcgdmVjNCB2Q29sb3I7XFxuXFxudmFyeWluZyB2ZWMyIHZSZXNvbHV0aW9uO1xcblxcbi8vdGV4Y29vcmRzIGNvbXB1dGVkIGluIHZlcnRleCBzdGVwXFxuLy90byBhdm9pZCBkZXBlbmRlbnQgdGV4dHVyZSByZWFkc1xcbnZhcnlpbmcgdmVjMiB2X3JnYk5XO1xcbnZhcnlpbmcgdmVjMiB2X3JnYk5FO1xcbnZhcnlpbmcgdmVjMiB2X3JnYlNXO1xcbnZhcnlpbmcgdmVjMiB2X3JnYlNFO1xcbnZhcnlpbmcgdmVjMiB2X3JnYk07XFxuXFxuXFxudm9pZCB0ZXhjb29yZHModmVjMiBmcmFnQ29vcmQsIHZlYzIgcmVzb2x1dGlvbixcXG4gICAgICAgICAgICBvdXQgdmVjMiB2X3JnYk5XLCBvdXQgdmVjMiB2X3JnYk5FLFxcbiAgICAgICAgICAgIG91dCB2ZWMyIHZfcmdiU1csIG91dCB2ZWMyIHZfcmdiU0UsXFxuICAgICAgICAgICAgb3V0IHZlYzIgdl9yZ2JNKSB7XFxuICAgIHZlYzIgaW52ZXJzZVZQID0gMS4wIC8gcmVzb2x1dGlvbi54eTtcXG4gICAgdl9yZ2JOVyA9IChmcmFnQ29vcmQgKyB2ZWMyKC0xLjAsIC0xLjApKSAqIGludmVyc2VWUDtcXG4gICAgdl9yZ2JORSA9IChmcmFnQ29vcmQgKyB2ZWMyKDEuMCwgLTEuMCkpICogaW52ZXJzZVZQO1xcbiAgICB2X3JnYlNXID0gKGZyYWdDb29yZCArIHZlYzIoLTEuMCwgMS4wKSkgKiBpbnZlcnNlVlA7XFxuICAgIHZfcmdiU0UgPSAoZnJhZ0Nvb3JkICsgdmVjMigxLjAsIDEuMCkpICogaW52ZXJzZVZQO1xcbiAgICB2X3JnYk0gPSB2ZWMyKGZyYWdDb29yZCAqIGludmVyc2VWUCk7XFxufVxcblxcbnZvaWQgbWFpbih2b2lkKXtcXG4gICBnbF9Qb3NpdGlvbiA9IHZlYzQoKHByb2plY3Rpb25NYXRyaXggKiB2ZWMzKGFWZXJ0ZXhQb3NpdGlvbiwgMS4wKSkueHksIDAuMCwgMS4wKTtcXG4gICB2VGV4dHVyZUNvb3JkID0gYVRleHR1cmVDb29yZDtcXG4gICB2Q29sb3IgPSB2ZWM0KGFDb2xvci5yZ2IgKiBhQ29sb3IuYSwgYUNvbG9yLmEpO1xcbiAgIHZSZXNvbHV0aW9uID0gcmVzb2x1dGlvbjtcXG5cXG4gICAvL2NvbXB1dGUgdGhlIHRleHR1cmUgY29vcmRzIGFuZCBzZW5kIHRoZW0gdG8gdmFyeWluZ3NcXG4gICB0ZXhjb29yZHMoYVRleHR1cmVDb29yZCAqIHJlc29sdXRpb24sIHJlc29sdXRpb24sIHZfcmdiTlcsIHZfcmdiTkUsIHZfcmdiU1csIHZfcmdiU0UsIHZfcmdiTSk7XFxufVxcblwiLFxuICAgICAgICAvLyBmcmFnbWVudCBzaGFkZXJcbiAgICAgICAgXCJwcmVjaXNpb24gbG93cCBmbG9hdDtcXG5cXG5cXG4vKipcXG5CYXNpYyBGWEFBIGltcGxlbWVudGF0aW9uIGJhc2VkIG9uIHRoZSBjb2RlIG9uIGdlZWtzM2QuY29tIHdpdGggdGhlXFxubW9kaWZpY2F0aW9uIHRoYXQgdGhlIHRleHR1cmUyRExvZCBzdHVmZiB3YXMgcmVtb3ZlZCBzaW5jZSBpdCdzXFxudW5zdXBwb3J0ZWQgYnkgV2ViR0wuXFxuXFxuLS1cXG5cXG5Gcm9tOlxcbmh0dHBzOi8vZ2l0aHViLmNvbS9taXRzdWhpa28vd2ViZ2wtbWVpbmNyYWZ0XFxuXFxuQ29weXJpZ2h0IChjKSAyMDExIGJ5IEFybWluIFJvbmFjaGVyLlxcblxcblNvbWUgcmlnaHRzIHJlc2VydmVkLlxcblxcblJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dFxcbm1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmVcXG5tZXQ6XFxuXFxuICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHRcXG4gICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuXFxuXFxuICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZVxcbiAgICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nXFxuICAgICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkXFxuICAgICAgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLlxcblxcbiAgICAqIFRoZSBuYW1lcyBvZiB0aGUgY29udHJpYnV0b3JzIG1heSBub3QgYmUgdXNlZCB0byBlbmRvcnNlIG9yXFxuICAgICAgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljXFxuICAgICAgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLlxcblxcblRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlNcXG5cXFwiQVMgSVNcXFwiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVFxcbkxJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUlxcbkEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUXFxuT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsXFxuU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVFxcbkxJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLFxcbkRBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWVxcblRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlRcXG4oSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0VcXG5PRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLlxcbiovXFxuXFxuI2lmbmRlZiBGWEFBX1JFRFVDRV9NSU5cXG4gICAgI2RlZmluZSBGWEFBX1JFRFVDRV9NSU4gICAoMS4wLyAxMjguMClcXG4jZW5kaWZcXG4jaWZuZGVmIEZYQUFfUkVEVUNFX01VTFxcbiAgICAjZGVmaW5lIEZYQUFfUkVEVUNFX01VTCAgICgxLjAgLyA4LjApXFxuI2VuZGlmXFxuI2lmbmRlZiBGWEFBX1NQQU5fTUFYXFxuICAgICNkZWZpbmUgRlhBQV9TUEFOX01BWCAgICAgOC4wXFxuI2VuZGlmXFxuXFxuLy9vcHRpbWl6ZWQgdmVyc2lvbiBmb3IgbW9iaWxlLCB3aGVyZSBkZXBlbmRlbnRcXG4vL3RleHR1cmUgcmVhZHMgY2FuIGJlIGEgYm90dGxlbmVja1xcbnZlYzQgZnhhYShzYW1wbGVyMkQgdGV4LCB2ZWMyIGZyYWdDb29yZCwgdmVjMiByZXNvbHV0aW9uLFxcbiAgICAgICAgICAgIHZlYzIgdl9yZ2JOVywgdmVjMiB2X3JnYk5FLFxcbiAgICAgICAgICAgIHZlYzIgdl9yZ2JTVywgdmVjMiB2X3JnYlNFLFxcbiAgICAgICAgICAgIHZlYzIgdl9yZ2JNKSB7XFxuICAgIHZlYzQgY29sb3I7XFxuICAgIG1lZGl1bXAgdmVjMiBpbnZlcnNlVlAgPSB2ZWMyKDEuMCAvIHJlc29sdXRpb24ueCwgMS4wIC8gcmVzb2x1dGlvbi55KTtcXG4gICAgdmVjMyByZ2JOVyA9IHRleHR1cmUyRCh0ZXgsIHZfcmdiTlcpLnh5ejtcXG4gICAgdmVjMyByZ2JORSA9IHRleHR1cmUyRCh0ZXgsIHZfcmdiTkUpLnh5ejtcXG4gICAgdmVjMyByZ2JTVyA9IHRleHR1cmUyRCh0ZXgsIHZfcmdiU1cpLnh5ejtcXG4gICAgdmVjMyByZ2JTRSA9IHRleHR1cmUyRCh0ZXgsIHZfcmdiU0UpLnh5ejtcXG4gICAgdmVjNCB0ZXhDb2xvciA9IHRleHR1cmUyRCh0ZXgsIHZfcmdiTSk7XFxuICAgIHZlYzMgcmdiTSAgPSB0ZXhDb2xvci54eXo7XFxuICAgIHZlYzMgbHVtYSA9IHZlYzMoMC4yOTksIDAuNTg3LCAwLjExNCk7XFxuICAgIGZsb2F0IGx1bWFOVyA9IGRvdChyZ2JOVywgbHVtYSk7XFxuICAgIGZsb2F0IGx1bWFORSA9IGRvdChyZ2JORSwgbHVtYSk7XFxuICAgIGZsb2F0IGx1bWFTVyA9IGRvdChyZ2JTVywgbHVtYSk7XFxuICAgIGZsb2F0IGx1bWFTRSA9IGRvdChyZ2JTRSwgbHVtYSk7XFxuICAgIGZsb2F0IGx1bWFNICA9IGRvdChyZ2JNLCAgbHVtYSk7XFxuICAgIGZsb2F0IGx1bWFNaW4gPSBtaW4obHVtYU0sIG1pbihtaW4obHVtYU5XLCBsdW1hTkUpLCBtaW4obHVtYVNXLCBsdW1hU0UpKSk7XFxuICAgIGZsb2F0IGx1bWFNYXggPSBtYXgobHVtYU0sIG1heChtYXgobHVtYU5XLCBsdW1hTkUpLCBtYXgobHVtYVNXLCBsdW1hU0UpKSk7XFxuXFxuICAgIG1lZGl1bXAgdmVjMiBkaXI7XFxuICAgIGRpci54ID0gLSgobHVtYU5XICsgbHVtYU5FKSAtIChsdW1hU1cgKyBsdW1hU0UpKTtcXG4gICAgZGlyLnkgPSAgKChsdW1hTlcgKyBsdW1hU1cpIC0gKGx1bWFORSArIGx1bWFTRSkpO1xcblxcbiAgICBmbG9hdCBkaXJSZWR1Y2UgPSBtYXgoKGx1bWFOVyArIGx1bWFORSArIGx1bWFTVyArIGx1bWFTRSkgKlxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKDAuMjUgKiBGWEFBX1JFRFVDRV9NVUwpLCBGWEFBX1JFRFVDRV9NSU4pO1xcblxcbiAgICBmbG9hdCByY3BEaXJNaW4gPSAxLjAgLyAobWluKGFicyhkaXIueCksIGFicyhkaXIueSkpICsgZGlyUmVkdWNlKTtcXG4gICAgZGlyID0gbWluKHZlYzIoRlhBQV9TUEFOX01BWCwgRlhBQV9TUEFOX01BWCksXFxuICAgICAgICAgICAgICBtYXgodmVjMigtRlhBQV9TUEFOX01BWCwgLUZYQUFfU1BBTl9NQVgpLFxcbiAgICAgICAgICAgICAgZGlyICogcmNwRGlyTWluKSkgKiBpbnZlcnNlVlA7XFxuXFxuICAgIHZlYzMgcmdiQSA9IDAuNSAqIChcXG4gICAgICAgIHRleHR1cmUyRCh0ZXgsIGZyYWdDb29yZCAqIGludmVyc2VWUCArIGRpciAqICgxLjAgLyAzLjAgLSAwLjUpKS54eXogK1xcbiAgICAgICAgdGV4dHVyZTJEKHRleCwgZnJhZ0Nvb3JkICogaW52ZXJzZVZQICsgZGlyICogKDIuMCAvIDMuMCAtIDAuNSkpLnh5eik7XFxuICAgIHZlYzMgcmdiQiA9IHJnYkEgKiAwLjUgKyAwLjI1ICogKFxcbiAgICAgICAgdGV4dHVyZTJEKHRleCwgZnJhZ0Nvb3JkICogaW52ZXJzZVZQICsgZGlyICogLTAuNSkueHl6ICtcXG4gICAgICAgIHRleHR1cmUyRCh0ZXgsIGZyYWdDb29yZCAqIGludmVyc2VWUCArIGRpciAqIDAuNSkueHl6KTtcXG5cXG4gICAgZmxvYXQgbHVtYUIgPSBkb3QocmdiQiwgbHVtYSk7XFxuICAgIGlmICgobHVtYUIgPCBsdW1hTWluKSB8fCAobHVtYUIgPiBsdW1hTWF4KSlcXG4gICAgICAgIGNvbG9yID0gdmVjNChyZ2JBLCB0ZXhDb2xvci5hKTtcXG4gICAgZWxzZVxcbiAgICAgICAgY29sb3IgPSB2ZWM0KHJnYkIsIHRleENvbG9yLmEpO1xcbiAgICByZXR1cm4gY29sb3I7XFxufVxcblxcblxcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xcbnZhcnlpbmcgdmVjNCB2Q29sb3I7XFxudmFyeWluZyB2ZWMyIHZSZXNvbHV0aW9uO1xcblxcbi8vdGV4Y29vcmRzIGNvbXB1dGVkIGluIHZlcnRleCBzdGVwXFxuLy90byBhdm9pZCBkZXBlbmRlbnQgdGV4dHVyZSByZWFkc1xcbnZhcnlpbmcgdmVjMiB2X3JnYk5XO1xcbnZhcnlpbmcgdmVjMiB2X3JnYk5FO1xcbnZhcnlpbmcgdmVjMiB2X3JnYlNXO1xcbnZhcnlpbmcgdmVjMiB2X3JnYlNFO1xcbnZhcnlpbmcgdmVjMiB2X3JnYk07XFxuXFxudW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXI7XFxuXFxuXFxudm9pZCBtYWluKHZvaWQpe1xcblxcbiAgICBnbF9GcmFnQ29sb3IgPSBmeGFhKHVTYW1wbGVyLCB2VGV4dHVyZUNvb3JkICogdlJlc29sdXRpb24sIHZSZXNvbHV0aW9uLCB2X3JnYk5XLCB2X3JnYk5FLCB2X3JnYlNXLCB2X3JnYlNFLCB2X3JnYk0pO1xcblxcbn1cXG5cIixcbiAgICAgICAgLy8gdW5pZm9ybXNcbiAgICAgICAge1xuICAgICAgICAgICAgcmVzb2x1dGlvbjogeyB0eXBlOiAndjInLCB2YWx1ZTogeyB4OiAxLCB5OiAxIH0gfVxuICAgICAgICB9XG4gICAgKTtcblxufVxuXG5GWEFBRmlsdGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoQWJzdHJhY3RGaWx0ZXIucHJvdG90eXBlKTtcbkZYQUFGaWx0ZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gRlhBQUZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gRlhBQUZpbHRlcjtcblxuLyoqXG4gKiBBcHBsaWVzIHRoZSBmaWx0ZXJcbiAqXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcn0gVGhlIHJlbmRlcmVyIHRvIHJldHJpZXZlIHRoZSBmaWx0ZXIgZnJvbVxuICogQHBhcmFtIGlucHV0IHtQSVhJLlJlbmRlclRhcmdldH1cbiAqIEBwYXJhbSBvdXRwdXQge1BJWEkuUmVuZGVyVGFyZ2V0fVxuICovXG5GWEFBRmlsdGVyLnByb3RvdHlwZS5hcHBseUZpbHRlciA9IGZ1bmN0aW9uIChyZW5kZXJlciwgaW5wdXQsIG91dHB1dClcbntcbiAgICB2YXIgZmlsdGVyTWFuYWdlciA9IHJlbmRlcmVyLmZpbHRlck1hbmFnZXI7XG5cbiAgICB2YXIgc2hhZGVyID0gdGhpcy5nZXRTaGFkZXIoIHJlbmRlcmVyICk7XG4gICAgIC8vIGRyYXcgdGhlIGZpbHRlci4uLlxuICAgIGZpbHRlck1hbmFnZXIuYXBwbHlGaWx0ZXIoc2hhZGVyLCBpbnB1dCwgb3V0cHV0KTtcbn07XG4iLCJ2YXIgQWJzdHJhY3RGaWx0ZXIgPSByZXF1aXJlKCcuL0Fic3RyYWN0RmlsdGVyJyksXG4gICAgbWF0aCA9ICByZXF1aXJlKCcuLi8uLi8uLi9tYXRoJyk7XG5cbi8vIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL3N1YnN0YWNrL2JyZnMvaXNzdWVzLzI1XG5cblxuLyoqXG4gKiBUaGUgU3ByaXRlTWFza0ZpbHRlciBjbGFzc1xuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5BYnN0cmFjdEZpbHRlclxuICogQG1lbWJlcm9mIFBJWElcbiAqIEBwYXJhbSBzcHJpdGUge1BJWEkuU3ByaXRlfSB0aGUgdGFyZ2V0IHNwcml0ZVxuICovXG5mdW5jdGlvbiBTcHJpdGVNYXNrRmlsdGVyKHNwcml0ZSlcbntcbiAgICB2YXIgbWFza01hdHJpeCA9IG5ldyBtYXRoLk1hdHJpeCgpO1xuXG4gICAgQWJzdHJhY3RGaWx0ZXIuY2FsbCh0aGlzLFxuICAgICAgICBcImF0dHJpYnV0ZSB2ZWMyIGFWZXJ0ZXhQb3NpdGlvbjtcXG5hdHRyaWJ1dGUgdmVjMiBhVGV4dHVyZUNvb3JkO1xcbmF0dHJpYnV0ZSB2ZWM0IGFDb2xvcjtcXG5cXG51bmlmb3JtIG1hdDMgcHJvamVjdGlvbk1hdHJpeDtcXG51bmlmb3JtIG1hdDMgb3RoZXJNYXRyaXg7XFxuXFxudmFyeWluZyB2ZWMyIHZNYXNrQ29vcmQ7XFxudmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7XFxudmFyeWluZyB2ZWM0IHZDb2xvcjtcXG5cXG52b2lkIG1haW4odm9pZClcXG57XFxuICAgIGdsX1Bvc2l0aW9uID0gdmVjNCgocHJvamVjdGlvbk1hdHJpeCAqIHZlYzMoYVZlcnRleFBvc2l0aW9uLCAxLjApKS54eSwgMC4wLCAxLjApO1xcbiAgICB2VGV4dHVyZUNvb3JkID0gYVRleHR1cmVDb29yZDtcXG4gICAgdk1hc2tDb29yZCA9ICggb3RoZXJNYXRyaXggKiB2ZWMzKCBhVGV4dHVyZUNvb3JkLCAxLjApICApLnh5O1xcbiAgICB2Q29sb3IgPSB2ZWM0KGFDb2xvci5yZ2IgKiBhQ29sb3IuYSwgYUNvbG9yLmEpO1xcbn1cXG5cIixcbiAgICAgICAgXCJwcmVjaXNpb24gbG93cCBmbG9hdDtcXG5cXG52YXJ5aW5nIHZlYzIgdk1hc2tDb29yZDtcXG52YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDtcXG52YXJ5aW5nIHZlYzQgdkNvbG9yO1xcblxcbnVuaWZvcm0gc2FtcGxlcjJEIHVTYW1wbGVyO1xcbnVuaWZvcm0gZmxvYXQgYWxwaGE7XFxudW5pZm9ybSBzYW1wbGVyMkQgbWFzaztcXG5cXG52b2lkIG1haW4odm9pZClcXG57XFxuICAgIC8vIGNoZWNrIGNsaXAhIHRoaXMgd2lsbCBzdG9wIHRoZSBtYXNrIGJsZWVkaW5nIG91dCBmcm9tIHRoZSBlZGdlc1xcbiAgICB2ZWMyIHRleHQgPSBhYnMoIHZNYXNrQ29vcmQgLSAwLjUgKTtcXG4gICAgdGV4dCA9IHN0ZXAoMC41LCB0ZXh0KTtcXG4gICAgZmxvYXQgY2xpcCA9IDEuMCAtIG1heCh0ZXh0LnksIHRleHQueCk7XFxuICAgIHZlYzQgb3JpZ2luYWwgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZUZXh0dXJlQ29vcmQpO1xcbiAgICB2ZWM0IG1hc2t5ID0gdGV4dHVyZTJEKG1hc2ssIHZNYXNrQ29vcmQpO1xcbiAgICBvcmlnaW5hbCAqPSAobWFza3kuciAqIG1hc2t5LmEgKiBhbHBoYSAqIGNsaXApO1xcbiAgICBnbF9GcmFnQ29sb3IgPSBvcmlnaW5hbDtcXG59XFxuXCIsXG4gICAgICAgIHtcbiAgICAgICAgICAgIG1hc2s6ICAgICAgICAgICB7IHR5cGU6ICdzYW1wbGVyMkQnLCB2YWx1ZTogc3ByaXRlLl90ZXh0dXJlIH0sXG4gICAgICAgICAgICBhbHBoYTogICAgICAgICAgeyB0eXBlOiAnZicsIHZhbHVlOiAxfSxcbiAgICAgICAgICAgIG90aGVyTWF0cml4OiAgICB7IHR5cGU6ICdtYXQzJywgdmFsdWU6IG1hc2tNYXRyaXgudG9BcnJheSh0cnVlKSB9XG4gICAgICAgIH1cbiAgICApO1xuXG4gICAgdGhpcy5tYXNrU3ByaXRlID0gc3ByaXRlO1xuICAgIHRoaXMubWFza01hdHJpeCA9IG1hc2tNYXRyaXg7XG59XG5cblNwcml0ZU1hc2tGaWx0ZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShBYnN0cmFjdEZpbHRlci5wcm90b3R5cGUpO1xuU3ByaXRlTWFza0ZpbHRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBTcHJpdGVNYXNrRmlsdGVyO1xubW9kdWxlLmV4cG9ydHMgPSBTcHJpdGVNYXNrRmlsdGVyO1xuXG4vKipcbiAqIEFwcGxpZXMgdGhlIGZpbHRlclxuICpcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5XZWJHTFJlbmRlcmVyfSBUaGUgcmVuZGVyZXIgdG8gcmV0cmlldmUgdGhlIGZpbHRlciBmcm9tXG4gKiBAcGFyYW0gaW5wdXQge1BJWEkuUmVuZGVyVGFyZ2V0fVxuICogQHBhcmFtIG91dHB1dCB7UElYSS5SZW5kZXJUYXJnZXR9XG4gKi9cblNwcml0ZU1hc2tGaWx0ZXIucHJvdG90eXBlLmFwcGx5RmlsdGVyID0gZnVuY3Rpb24gKHJlbmRlcmVyLCBpbnB1dCwgb3V0cHV0KVxue1xuICAgIHZhciBmaWx0ZXJNYW5hZ2VyID0gcmVuZGVyZXIuZmlsdGVyTWFuYWdlcjtcblxuICAgIHRoaXMudW5pZm9ybXMubWFzay52YWx1ZSA9IHRoaXMubWFza1Nwcml0ZS5fdGV4dHVyZTtcblxuICAgIGZpbHRlck1hbmFnZXIuY2FsY3VsYXRlTWFwcGVkTWF0cml4KGlucHV0LmZyYW1lLCB0aGlzLm1hc2tTcHJpdGUsIHRoaXMubWFza01hdHJpeCk7XG5cbiAgICB0aGlzLnVuaWZvcm1zLm90aGVyTWF0cml4LnZhbHVlID0gdGhpcy5tYXNrTWF0cml4LnRvQXJyYXkodHJ1ZSk7XG4gICAgdGhpcy51bmlmb3Jtcy5hbHBoYS52YWx1ZSA9IHRoaXMubWFza1Nwcml0ZS53b3JsZEFscGhhO1xuXG4gICAgdmFyIHNoYWRlciA9IHRoaXMuZ2V0U2hhZGVyKHJlbmRlcmVyKTtcbiAgICAgLy8gZHJhdyB0aGUgZmlsdGVyLi4uXG4gICAgZmlsdGVyTWFuYWdlci5hcHBseUZpbHRlcihzaGFkZXIsIGlucHV0LCBvdXRwdXQpO1xufTtcblxuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhTcHJpdGVNYXNrRmlsdGVyLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFRoZSB0ZXh0dXJlIHVzZWQgZm9yIHRoZSBkaXNwbGFjZW1lbnQgbWFwLiBNdXN0IGJlIHBvd2VyIG9mIDIgc2l6ZWQgdGV4dHVyZS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuVGV4dHVyZX1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5TcHJpdGVNYXNrRmlsdGVyI1xuICAgICAqL1xuICAgIG1hcDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVuaWZvcm1zLm1hc2sudmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLm1hc2sudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBUaGUgb2Zmc2V0IHVzZWQgdG8gbW92ZSB0aGUgZGlzcGxhY2VtZW50IG1hcC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuUG9pbnR9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuU3ByaXRlTWFza0ZpbHRlciNcbiAgICAgKi9cbiAgICBvZmZzZXQ6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbigpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVuaWZvcm1zLm9mZnNldC52YWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbih2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy5vZmZzZXQudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuIiwidmFyIFdlYkdMTWFuYWdlciA9IHJlcXVpcmUoJy4vV2ViR0xNYW5hZ2VyJyk7XG5cbi8qKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQGV4dGVuZHMgUElYSS5XZWJHbE1hbmFnZXJcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5XZWJHTFJlbmRlcmVyfSBUaGUgcmVuZGVyZXIgdGhpcyBtYW5hZ2VyIHdvcmtzIGZvci5cbiAqL1xuZnVuY3Rpb24gQmxlbmRNb2RlTWFuYWdlcihyZW5kZXJlcilcbntcbiAgICBXZWJHTE1hbmFnZXIuY2FsbCh0aGlzLCByZW5kZXJlcik7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy5jdXJyZW50QmxlbmRNb2RlID0gOTk5OTk7XG59XG5cbkJsZW5kTW9kZU1hbmFnZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShXZWJHTE1hbmFnZXIucHJvdG90eXBlKTtcbkJsZW5kTW9kZU1hbmFnZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gQmxlbmRNb2RlTWFuYWdlcjtcbm1vZHVsZS5leHBvcnRzID0gQmxlbmRNb2RlTWFuYWdlcjtcblxuLyoqXG4gKiBTZXRzLXVwIHRoZSBnaXZlbiBibGVuZE1vZGUgZnJvbSBXZWJHTCdzIHBvaW50IG9mIHZpZXcuXG4gKlxuICogQHBhcmFtIGJsZW5kTW9kZSB7bnVtYmVyfSB0aGUgYmxlbmRNb2RlLCBzaG91bGQgYmUgYSBQaXhpIGNvbnN0LCBzdWNoIGFzIGBQSVhJLkJMRU5EX01PREVTLkFERGAuIFNlZVxuICogIHtAbGluayBQSVhJLkJMRU5EX01PREVTfSBmb3IgcG9zc2libGUgdmFsdWVzLlxuICovXG5CbGVuZE1vZGVNYW5hZ2VyLnByb3RvdHlwZS5zZXRCbGVuZE1vZGUgPSBmdW5jdGlvbiAoYmxlbmRNb2RlKVxue1xuICAgIGlmICh0aGlzLmN1cnJlbnRCbGVuZE1vZGUgPT09IGJsZW5kTW9kZSlcbiAgICB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICB0aGlzLmN1cnJlbnRCbGVuZE1vZGUgPSBibGVuZE1vZGU7XG5cbiAgICB2YXIgbW9kZSA9IHRoaXMucmVuZGVyZXIuYmxlbmRNb2Rlc1t0aGlzLmN1cnJlbnRCbGVuZE1vZGVdO1xuICAgIHRoaXMucmVuZGVyZXIuZ2wuYmxlbmRGdW5jKG1vZGVbMF0sIG1vZGVbMV0pO1xuXG4gICAgcmV0dXJuIHRydWU7XG59O1xuIiwidmFyIFdlYkdMTWFuYWdlciA9IHJlcXVpcmUoJy4vV2ViR0xNYW5hZ2VyJyksXG4gICAgUmVuZGVyVGFyZ2V0ID0gcmVxdWlyZSgnLi4vdXRpbHMvUmVuZGVyVGFyZ2V0JyksXG4gICAgQ09OU1QgPSByZXF1aXJlKCcuLi8uLi8uLi9jb25zdCcpLFxuICAgIFF1YWQgPSByZXF1aXJlKCcuLi91dGlscy9RdWFkJyksXG4gICAgbWF0aCA9ICByZXF1aXJlKCcuLi8uLi8uLi9tYXRoJyk7XG5cbi8qKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQGV4dGVuZHMgUElYSS5XZWJHTE1hbmFnZXJcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5XZWJHTFJlbmRlcmVyfSBUaGUgcmVuZGVyZXIgdGhpcyBtYW5hZ2VyIHdvcmtzIGZvci5cbiAqL1xuZnVuY3Rpb24gRmlsdGVyTWFuYWdlcihyZW5kZXJlcilcbntcbiAgICBXZWJHTE1hbmFnZXIuY2FsbCh0aGlzLCByZW5kZXJlcik7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtvYmplY3RbXX1cbiAgICAgKi9cbiAgICB0aGlzLmZpbHRlclN0YWNrID0gW107XG5cbiAgICB0aGlzLmZpbHRlclN0YWNrLnB1c2goe1xuICAgICAgICByZW5kZXJUYXJnZXQ6cmVuZGVyZXIuY3VycmVudFJlbmRlclRhcmdldCxcbiAgICAgICAgZmlsdGVyOltdLFxuICAgICAgICBib3VuZHM6bnVsbFxuICAgIH0pO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7UElYSS5SZW5kZXJUYXJnZXRbXX1cbiAgICAgKi9cbiAgICB0aGlzLnRleHR1cmVQb29sID0gW107XG5cbiAgICAvKipcbiAgICAgKiBUaGUgc2l6ZSBvZiB0aGUgdGV4dHVyZVxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5SZWN0YW5nbGV9XG4gICAgICovXG4gICAgLy8gbGlzdGVuIGZvciBjb250ZXh0IGFuZCB1cGRhdGUgbmVjZXNzYXJ5IGJ1ZmZlcnNcbiAgICAvL1RPRE8gbWFrZSB0aGlzIGR5bmFtaWMhXG4gICAgLy9UT0RPIHRlc3QgdGhpcyBvdXQgYnkgZm9yY2VzIHBvd2VyIG9mIHR3bz9cbiAgICB0aGlzLnRleHR1cmVTaXplID0gbmV3IG1hdGguUmVjdGFuZ2xlKDAsIDAsIHJlbmRlcmVyLndpZHRoLCByZW5kZXJlci5oZWlnaHQpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGN1cnJlbnQgZnJhbWVcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuUmVjdGFuZ2xlfVxuICAgICAqL1xuICAgIHRoaXMuY3VycmVudEZyYW1lID0gbnVsbDtcbn1cblxuRmlsdGVyTWFuYWdlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFdlYkdMTWFuYWdlci5wcm90b3R5cGUpO1xuRmlsdGVyTWFuYWdlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBGaWx0ZXJNYW5hZ2VyO1xubW9kdWxlLmV4cG9ydHMgPSBGaWx0ZXJNYW5hZ2VyO1xuXG5cbi8qKlxuICogQ2FsbGVkIHdoZW4gdGhlcmUgaXMgYSBXZWJHTCBjb250ZXh0IGNoYW5nZS5cbiAqXG4gKi9cbkZpbHRlck1hbmFnZXIucHJvdG90eXBlLm9uQ29udGV4dENoYW5nZSA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy50ZXh0dXJlUG9vbC5sZW5ndGggPSAwO1xuXG4gICAgdmFyIGdsID0gdGhpcy5yZW5kZXJlci5nbDtcbiAgICB0aGlzLnF1YWQgPSBuZXcgUXVhZChnbCk7XG59O1xuXG4vKipcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5XZWJHTFJlbmRlcmVyfVxuICogQHBhcmFtIGJ1ZmZlciB7QXJyYXlCdWZmZXJ9XG4gKi9cbkZpbHRlck1hbmFnZXIucHJvdG90eXBlLnNldEZpbHRlclN0YWNrID0gZnVuY3Rpb24gKCBmaWx0ZXJTdGFjayApXG57XG4gICAgdGhpcy5maWx0ZXJTdGFjayA9IGZpbHRlclN0YWNrO1xufTtcblxuLyoqXG4gKiBBcHBsaWVzIHRoZSBmaWx0ZXIgYW5kIGFkZHMgaXQgdG8gdGhlIGN1cnJlbnQgZmlsdGVyIHN0YWNrLlxuICpcbiAqIEBwYXJhbSB0YXJnZXQge1BJWEkuRGlzcGxheU9iamVjdH1cbiAqIEBwYXJhbSBmaWx0ZXJzIHtQSVhJLkFic3RyYWN0RmlsZXJbXX0gdGhlIGZpbHRlcnMgdGhhdCB3aWxsIGJlIHB1c2hlZCB0byB0aGUgY3VycmVudCBmaWx0ZXIgc3RhY2tcbiAqL1xuRmlsdGVyTWFuYWdlci5wcm90b3R5cGUucHVzaEZpbHRlciA9IGZ1bmN0aW9uICh0YXJnZXQsIGZpbHRlcnMpXG57XG4gICAgLy8gZ2V0IHRoZSBib3VuZHMgb2YgdGhlIG9iamVjdC4uXG4gICAgLy8gVE9ETyByZXBsYWNlIGNsb25lIHdpdGggYSBjb3B5IHRvIHNhdmUgb2JqZWN0IGNyZWF0aW9uXG4gICAgdmFyIGJvdW5kcyA9IHRhcmdldC5maWx0ZXJBcmVhID8gdGFyZ2V0LmZpbHRlckFyZWEuY2xvbmUoKSA6IHRhcmdldC5nZXRCb3VuZHMoKTtcblxuICAgIC8vYm91bmRzID0gYm91bmRzLmNsb25lKCk7XG5cbiAgICAvLyByb3VuZCBvZmYgdGhlIHJlY3RhbmdsZSB0byBnZXQgYSBuaWNlIHNtb29vb29vb3RoIGZpbHRlciA6KVxuICAgIGJvdW5kcy54ID0gYm91bmRzLnggfCAwO1xuICAgIGJvdW5kcy55ID0gYm91bmRzLnkgfCAwO1xuICAgIGJvdW5kcy53aWR0aCA9IGJvdW5kcy53aWR0aCB8IDA7XG4gICAgYm91bmRzLmhlaWdodCA9IGJvdW5kcy5oZWlnaHQgfCAwO1xuXG5cbiAgICAvLyBwYWRkaW5nIVxuICAgIHZhciBwYWRkaW5nID0gZmlsdGVyc1swXS5wYWRkaW5nIHwgMDtcbiAgICBib3VuZHMueCAtPSBwYWRkaW5nO1xuICAgIGJvdW5kcy55IC09IHBhZGRpbmc7XG4gICAgYm91bmRzLndpZHRoICs9IHBhZGRpbmcgKiAyO1xuICAgIGJvdW5kcy5oZWlnaHQgKz0gcGFkZGluZyAqIDI7XG5cblxuICAgIGlmKHRoaXMucmVuZGVyZXIuY3VycmVudFJlbmRlclRhcmdldC50cmFuc2Zvcm0pXG4gICAge1xuICAgICAgICAvL1RPRE8gdGhpcyB3aWxsIGJyZWFrIGlmIHRoZSByZW5kZXJUZXh0dXJlIHRyYW5zZm9ybSBpcyBhbnl0aGluZyBvdGhlciB0aGFuIGEgdHJhbnNsYXRpb24uXG4gICAgICAgIC8vV2lsbCBuZWVkIHRvIHRha2UgdGhlIGZ1bGwgbWF0cml4IHRyYW5zZm9ybSBpbnRvIGFjb3VudC4uXG4gICAgICAgIHZhciB0cmFuc2Zvcm0gPSB0aGlzLnJlbmRlcmVyLmN1cnJlbnRSZW5kZXJUYXJnZXQudHJhbnNmb3JtO1xuXG4gICAgICAgIGJvdW5kcy54ICs9IHRyYW5zZm9ybS50eDtcbiAgICAgICAgYm91bmRzLnkgKz0gdHJhbnNmb3JtLnR5O1xuXG4gICAgICAgIHRoaXMuY2FwRmlsdGVyQXJlYSggYm91bmRzICk7XG5cbiAgICAgICAgYm91bmRzLnggLT0gdHJhbnNmb3JtLnR4O1xuICAgICAgICBib3VuZHMueSAtPSB0cmFuc2Zvcm0udHk7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgICB0aGlzLmNhcEZpbHRlckFyZWEoIGJvdW5kcyApO1xuICAgIH1cblxuICAgIGlmKGJvdW5kcy53aWR0aCA+IDAgJiYgYm91bmRzLmhlaWdodCA+IDApXG4gICAge1xuICAgICAgICB0aGlzLmN1cnJlbnRGcmFtZSA9IGJvdW5kcztcblxuICAgICAgICB2YXIgdGV4dHVyZSA9IHRoaXMuZ2V0UmVuZGVyVGFyZ2V0KCk7XG5cbiAgICAgICAgdGhpcy5yZW5kZXJlci5zZXRSZW5kZXJUYXJnZXQodGV4dHVyZSk7XG5cbiAgICAgICAgLy8gY2xlYXIgdGhlIHRleHR1cmUuLlxuICAgICAgICB0ZXh0dXJlLmNsZWFyKCk7XG5cbiAgICAgICAgLy8gVE9ETyBnZXQgcmlkIG9mIG9iamVjdCBjcmVhdGlvbiFcbiAgICAgICAgdGhpcy5maWx0ZXJTdGFjay5wdXNoKHtcbiAgICAgICAgICAgIHJlbmRlclRhcmdldDogdGV4dHVyZSxcbiAgICAgICAgICAgIGZpbHRlcjogZmlsdGVyc1xuICAgICAgICB9KTtcblxuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICAvLyBwdXNoIHNvbXRoaW5nIG9uIHRvIHRoZSBzdGFjayB0aGF0IGlzIGVtcHR5XG4gICAgICAgIHRoaXMuZmlsdGVyU3RhY2sucHVzaCh7XG4gICAgICAgICAgICByZW5kZXJUYXJnZXQ6IG51bGwsXG4gICAgICAgICAgICBmaWx0ZXI6IGZpbHRlcnNcbiAgICAgICAgfSk7XG4gICAgfVxufTtcblxuXG4vKipcbiAqIFJlbW92ZXMgdGhlIGxhc3QgZmlsdGVyIGZyb20gdGhlIGZpbHRlciBzdGFjayBhbmQgcmV0dXJucyBpdC5cbiAqXG4gKi9cbkZpbHRlck1hbmFnZXIucHJvdG90eXBlLnBvcEZpbHRlciA9IGZ1bmN0aW9uICgpXG57XG4gICAgdmFyIGZpbHRlckRhdGEgPSB0aGlzLmZpbHRlclN0YWNrLnBvcCgpO1xuICAgIHZhciBwcmV2aW91c0ZpbHRlckRhdGEgPSB0aGlzLmZpbHRlclN0YWNrW3RoaXMuZmlsdGVyU3RhY2subGVuZ3RoLTFdO1xuXG4gICAgdmFyIGlucHV0ID0gZmlsdGVyRGF0YS5yZW5kZXJUYXJnZXQ7XG5cbiAgICAvLyBpZiB0aGUgcmVuZGVyVGFyZ2V0IGlzIG51bGwgdGhlbiB3ZSBkb24ndCBhcHBseSB0aGUgZmlsdGVyIGFzIGl0cyBvZmZzY3JlZW5cbiAgICBpZighZmlsdGVyRGF0YS5yZW5kZXJUYXJnZXQpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFyIG91dHB1dCA9IHByZXZpb3VzRmlsdGVyRGF0YS5yZW5kZXJUYXJnZXQ7XG5cbiAgICAvLyB1c2UgcHJvZ3JhbVxuICAgIHZhciBnbCA9IHRoaXMucmVuZGVyZXIuZ2w7XG5cblxuICAgIHRoaXMuY3VycmVudEZyYW1lID0gaW5wdXQuZnJhbWU7XG5cbiAgICB0aGlzLnF1YWQubWFwKHRoaXMudGV4dHVyZVNpemUsIGlucHV0LmZyYW1lKTtcblxuXG4gICAgLy8gVE9ETy4uIHRoaXMgcHJvYmFibHkgb25seSBuZWVkcyB0byBiZSBkb25lIG9uY2UhXG4gICAgZ2wuYmluZEJ1ZmZlcihnbC5BUlJBWV9CVUZGRVIsIHRoaXMucXVhZC52ZXJ0ZXhCdWZmZXIpO1xuICAgIGdsLmJpbmRCdWZmZXIoZ2wuRUxFTUVOVF9BUlJBWV9CVUZGRVIsIHRoaXMucXVhZC5pbmRleEJ1ZmZlcik7XG5cbiAgICB2YXIgZmlsdGVycyA9IGZpbHRlckRhdGEuZmlsdGVyO1xuXG4gICAgLy8gYXNzdW1pbmcgYWxsIGZpbHRlcnMgZm9sbG93IHRoZSBjb3JyZWN0IGZvcm1hdD8/XG4gICAgZ2wudmVydGV4QXR0cmliUG9pbnRlcih0aGlzLnJlbmRlcmVyLnNoYWRlck1hbmFnZXIuZGVmYXVsdFNoYWRlci5hdHRyaWJ1dGVzLmFWZXJ0ZXhQb3NpdGlvbiwgMiwgZ2wuRkxPQVQsIGZhbHNlLCAwLCAwKTtcbiAgICBnbC52ZXJ0ZXhBdHRyaWJQb2ludGVyKHRoaXMucmVuZGVyZXIuc2hhZGVyTWFuYWdlci5kZWZhdWx0U2hhZGVyLmF0dHJpYnV0ZXMuYVRleHR1cmVDb29yZCwgMiwgZ2wuRkxPQVQsIGZhbHNlLCAwLCAyICogNCAqIDQpO1xuICAgIGdsLnZlcnRleEF0dHJpYlBvaW50ZXIodGhpcy5yZW5kZXJlci5zaGFkZXJNYW5hZ2VyLmRlZmF1bHRTaGFkZXIuYXR0cmlidXRlcy5hQ29sb3IsIDQsIGdsLkZMT0FULCBmYWxzZSwgMCwgNCAqIDQgKiA0KTtcblxuICAgIC8vIHJlc3RvcmUgdGhlIG5vcm1hbCBibGVuZG1vZGUhXG4gICAgdGhpcy5yZW5kZXJlci5ibGVuZE1vZGVNYW5hZ2VyLnNldEJsZW5kTW9kZShDT05TVC5CTEVORF9NT0RFUy5OT1JNQUwpO1xuXG4gICAgaWYgKGZpbHRlcnMubGVuZ3RoID09PSAxKVxuICAgIHtcbiAgICAgICAgLy8gVE9ETyAoY2VuZ2xlcikgLSBUaGVyZSBoYXMgdG8gYmUgYSBiZXR0ZXIgd2F5IHRoZW4gc2V0dGluZyB0aGlzIGVhY2ggdGltZT9cbiAgICAgICAgaWYgKGZpbHRlcnNbMF0udW5pZm9ybXMuZGltZW5zaW9ucylcbiAgICAgICAge1xuICAgICAgICAgICAgZmlsdGVyc1swXS51bmlmb3Jtcy5kaW1lbnNpb25zLnZhbHVlWzBdID0gdGhpcy5yZW5kZXJlci53aWR0aDtcbiAgICAgICAgICAgIGZpbHRlcnNbMF0udW5pZm9ybXMuZGltZW5zaW9ucy52YWx1ZVsxXSA9IHRoaXMucmVuZGVyZXIuaGVpZ2h0O1xuICAgICAgICAgICAgZmlsdGVyc1swXS51bmlmb3Jtcy5kaW1lbnNpb25zLnZhbHVlWzJdID0gdGhpcy5xdWFkLnZlcnRpY2VzWzBdO1xuICAgICAgICAgICAgZmlsdGVyc1swXS51bmlmb3Jtcy5kaW1lbnNpb25zLnZhbHVlWzNdID0gdGhpcy5xdWFkLnZlcnRpY2VzWzVdO1xuICAgICAgICB9XG5cbiAgICAgICAgZmlsdGVyc1swXS5hcHBseUZpbHRlciggdGhpcy5yZW5kZXJlciwgaW5wdXQsIG91dHB1dCApO1xuICAgICAgICB0aGlzLnJldHVyblJlbmRlclRhcmdldCggaW5wdXQgKTtcblxuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICB2YXIgZmxpcFRleHR1cmUgPSBpbnB1dDtcbiAgICAgICAgdmFyIGZsb3BUZXh0dXJlID0gdGhpcy5nZXRSZW5kZXJUYXJnZXQodHJ1ZSk7XG5cbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBmaWx0ZXJzLmxlbmd0aC0xOyBpKyspXG4gICAgICAgIHtcbiAgICAgICAgICAgIHZhciBmaWx0ZXIgPSBmaWx0ZXJzW2ldO1xuXG4gICAgICAgICAgICAvLyBUT0RPIChjZW5nbGVyKSAtIFRoZXJlIGhhcyB0byBiZSBhIGJldHRlciB3YXkgdGhlbiBzZXR0aW5nIHRoaXMgZWFjaCB0aW1lP1xuICAgICAgICAgICAgaWYgKGZpbHRlci51bmlmb3Jtcy5kaW1lbnNpb25zKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGZpbHRlci51bmlmb3Jtcy5kaW1lbnNpb25zLnZhbHVlWzBdID0gdGhpcy5yZW5kZXJlci53aWR0aDtcbiAgICAgICAgICAgICAgICBmaWx0ZXIudW5pZm9ybXMuZGltZW5zaW9ucy52YWx1ZVsxXSA9IHRoaXMucmVuZGVyZXIuaGVpZ2h0O1xuICAgICAgICAgICAgICAgIGZpbHRlci51bmlmb3Jtcy5kaW1lbnNpb25zLnZhbHVlWzJdID0gdGhpcy5xdWFkLnZlcnRpY2VzWzBdO1xuICAgICAgICAgICAgICAgIGZpbHRlci51bmlmb3Jtcy5kaW1lbnNpb25zLnZhbHVlWzNdID0gdGhpcy5xdWFkLnZlcnRpY2VzWzVdO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBmaWx0ZXIuYXBwbHlGaWx0ZXIoIHRoaXMucmVuZGVyZXIsIGZsaXBUZXh0dXJlLCBmbG9wVGV4dHVyZSApO1xuXG4gICAgICAgICAgICB2YXIgdGVtcCA9IGZsaXBUZXh0dXJlO1xuICAgICAgICAgICAgZmxpcFRleHR1cmUgPSBmbG9wVGV4dHVyZTtcbiAgICAgICAgICAgIGZsb3BUZXh0dXJlID0gdGVtcDtcbiAgICAgICAgfVxuXG4gICAgICAgIGZpbHRlcnNbZmlsdGVycy5sZW5ndGgtMV0uYXBwbHlGaWx0ZXIoIHRoaXMucmVuZGVyZXIsIGZsaXBUZXh0dXJlLCBvdXRwdXQgKTtcblxuICAgICAgICB0aGlzLnJldHVyblJlbmRlclRhcmdldCggZmxpcFRleHR1cmUgKTtcbiAgICAgICAgdGhpcy5yZXR1cm5SZW5kZXJUYXJnZXQoIGZsb3BUZXh0dXJlICk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZpbHRlckRhdGEuZmlsdGVyO1xufTtcblxuLyoqXG4gKiBHcmFicyBhbiByZW5kZXIgdGFyZ2V0IGZyb20gdGhlIGludGVybmFsIHBvb2xcbiAqXG4gKiBAcGFyYW0gY2xlYXIge2Jvb2xlYW59IFdoZXRoZXIgb3Igbm90IHdlIG5lZWQgdG8gY2xlYXIgdGhlIFJlbmRlclRhcmdldFxuICogQHJldHVybiB7UmVuZGVyVGFyZ2V0fVxuICovXG5GaWx0ZXJNYW5hZ2VyLnByb3RvdHlwZS5nZXRSZW5kZXJUYXJnZXQgPSBmdW5jdGlvbiAoIGNsZWFyIClcbntcbiAgICB2YXIgcmVuZGVyVGFyZ2V0ID0gdGhpcy50ZXh0dXJlUG9vbC5wb3AoKSB8fCBuZXcgUmVuZGVyVGFyZ2V0KHRoaXMucmVuZGVyZXIuZ2wsIHRoaXMudGV4dHVyZVNpemUud2lkdGgsIHRoaXMudGV4dHVyZVNpemUuaGVpZ2h0LCBDT05TVC5TQ0FMRV9NT0RFUy5MSU5FQVIsIHRoaXMucmVuZGVyZXIucmVzb2x1dGlvbiAqIENPTlNULkZJTFRFUl9SRVNPTFVUSU9OKTtcbiAgICByZW5kZXJUYXJnZXQuZnJhbWUgPSB0aGlzLmN1cnJlbnRGcmFtZTtcblxuICAgIGlmIChjbGVhcilcbiAgICB7XG4gICAgICAgIHJlbmRlclRhcmdldC5jbGVhcih0cnVlKTtcbiAgICB9XG5cbiAgICByZXR1cm4gcmVuZGVyVGFyZ2V0O1xufTtcblxuLypcbiAqIFJldHVybnMgYSBSZW5kZXJUYXJnZXQgdG8gdGhlIGludGVybmFsIHBvb2xcbiAqIEBwYXJhbSByZW5kZXJUYXJnZXQge1JlbmRlclRhcmdldH0gVGhlIFJlbmRlclRhcmdldCB3ZSB3YW50IHRvIHJldHVybiB0byB0aGUgcG9vbFxuICovXG5GaWx0ZXJNYW5hZ2VyLnByb3RvdHlwZS5yZXR1cm5SZW5kZXJUYXJnZXQgPSBmdW5jdGlvbiAocmVuZGVyVGFyZ2V0KVxue1xuICAgIHRoaXMudGV4dHVyZVBvb2wucHVzaCggcmVuZGVyVGFyZ2V0ICk7XG59O1xuXG4vKlxuICogQXBwbGllcyB0aGUgZmlsdGVyXG4gKiBAcGFyYW0gc2hhZGVyIHtTaGFkZXJ9IFRoZSBzaGFkZXIgdG8gdXBsb2FkXG4gKiBAcGFyYW0gaW5wdXRUYXJnZXQge1JlbmRlclRhcmdldH1cbiAqIEBwYXJhbSBvdXRwdXRUYXJnZXQge1JlbmRlclRhcmdldH1cbiAqIEBwYXJhbSBjbGVhciB7Ym9vbGVhbn0gV2hldGhlciBvciBub3Qgd2Ugd2FudCB0byBjbGVhciB0aGUgb3V0cHV0VGFyZ2V0XG4gKi9cbkZpbHRlck1hbmFnZXIucHJvdG90eXBlLmFwcGx5RmlsdGVyID0gZnVuY3Rpb24gKHNoYWRlciwgaW5wdXRUYXJnZXQsIG91dHB1dFRhcmdldCwgY2xlYXIpXG57XG4gICAgdmFyIGdsID0gdGhpcy5yZW5kZXJlci5nbDtcblxuICAgIHRoaXMucmVuZGVyZXIuc2V0UmVuZGVyVGFyZ2V0KG91dHB1dFRhcmdldCk7XG5cbiAgICBpZiAoY2xlYXIpXG4gICAge1xuICAgICAgICBvdXRwdXRUYXJnZXQuY2xlYXIoKTtcbiAgICB9XG5cbiAgICAvLyBzZXQgdGhlIHNoYWRlclxuICAgIHRoaXMucmVuZGVyZXIuc2hhZGVyTWFuYWdlci5zZXRTaGFkZXIoc2hhZGVyKTtcblxuICAgIC8vIFRPRE8gKGNlbmdsZXIpIC0gQ2FuIHRoaXMgYmUgY2FjaGVkIGFuZCBub3QgYHRvQXJyYXlgZWQgZWFjaCBmcmFtZT9cbiAgICBzaGFkZXIudW5pZm9ybXMucHJvamVjdGlvbk1hdHJpeC52YWx1ZSA9IHRoaXMucmVuZGVyZXIuY3VycmVudFJlbmRlclRhcmdldC5wcm9qZWN0aW9uTWF0cml4LnRvQXJyYXkodHJ1ZSk7XG5cbiAgICAvL1RPRE8gY2FuIHRoaXMgYmUgb3B0aW1pc2VkP1xuICAgIHNoYWRlci5zeW5jVW5pZm9ybXMoKTtcbi8qXG4gICAgZ2wudmVydGV4QXR0cmliUG9pbnRlcihzaGFkZXIuYXR0cmlidXRlcy5hVmVydGV4UG9zaXRpb24sIDIsIGdsLkZMT0FULCBmYWxzZSwgMCwgMCk7XG4gICAgZ2wudmVydGV4QXR0cmliUG9pbnRlcihzaGFkZXIuYXR0cmlidXRlcy5hVGV4dHVyZUNvb3JkLCAyLCBnbC5GTE9BVCwgZmFsc2UsIDAsIDIgKiA0ICogNCk7XG4gICAgZ2wudmVydGV4QXR0cmliUG9pbnRlcihzaGFkZXIuYXR0cmlidXRlcy5hQ29sb3IsIDQsIGdsLkZMT0FULCBmYWxzZSwgMCwgNCAqIDQgKiA0KTtcbiovXG5cbiAgICBnbC5hY3RpdmVUZXh0dXJlKGdsLlRFWFRVUkUwKTtcbiAgICBnbC5iaW5kVGV4dHVyZShnbC5URVhUVVJFXzJELCBpbnB1dFRhcmdldC50ZXh0dXJlKTtcblxuICAgIGdsLmRyYXdFbGVtZW50cyhnbC5UUklBTkdMRVMsIDYsIGdsLlVOU0lHTkVEX1NIT1JULCAwICk7XG4gICAgdGhpcy5yZW5kZXJlci5kcmF3Q291bnQrKztcbn07XG5cbi8qXG4gKiBDYWxjdWxhdGVzIHRoZSBtYXBwZWQgbWF0cml4XG4gKiBAcGFyYW0gZmlsdGVyQXJlYSB7UmVjdGFuZ2xlfSBUaGUgZmlsdGVyIGFyZWFcbiAqIEBwYXJhbSBzcHJpdGUge1Nwcml0ZX0gdGhlIHRhcmdldCBzcHJpdGVcbiAqIEBwYXJhbSBvdXRwdXRNYXRyaXgge01hdHJpeH0gQGFsdmluXG4gKi9cbi8vIFRPRE8gcGxheWluZyBhcm91bmQgaGVyZS4uIHRoaXMgaXMgdGVtcG9yYXJ5IC0gKHdpbGwgZW5kIHVwIGluIHRoZSBzaGFkZXIpXG5GaWx0ZXJNYW5hZ2VyLnByb3RvdHlwZS5jYWxjdWxhdGVNYXBwZWRNYXRyaXggPSBmdW5jdGlvbiAoZmlsdGVyQXJlYSwgc3ByaXRlLCBvdXRwdXRNYXRyaXgpXG57XG4gICAgdmFyIHdvcmxkVHJhbnNmb3JtID0gc3ByaXRlLndvcmxkVHJhbnNmb3JtLmNvcHkobWF0aC5NYXRyaXguVEVNUF9NQVRSSVgpLFxuICAgIHRleHR1cmUgPSBzcHJpdGUuX3RleHR1cmUuYmFzZVRleHR1cmU7XG5cbiAgICB2YXIgbWFwcGVkTWF0cml4ID0gb3V0cHV0TWF0cml4LmlkZW50aXR5KCk7XG5cbiAgICAvLyBzY2FsZS4uXG4gICAgdmFyIHJhdGlvID0gdGhpcy50ZXh0dXJlU2l6ZS5oZWlnaHQgLyB0aGlzLnRleHR1cmVTaXplLndpZHRoO1xuXG4gICAgbWFwcGVkTWF0cml4LnRyYW5zbGF0ZShmaWx0ZXJBcmVhLnggLyB0aGlzLnRleHR1cmVTaXplLndpZHRoLCBmaWx0ZXJBcmVhLnkgLyB0aGlzLnRleHR1cmVTaXplLmhlaWdodCApO1xuXG4gICAgbWFwcGVkTWF0cml4LnNjYWxlKDEgLCByYXRpbyk7XG5cbiAgICB2YXIgdHJhbnNsYXRlU2NhbGVYID0gKHRoaXMudGV4dHVyZVNpemUud2lkdGggLyB0ZXh0dXJlLndpZHRoKTtcbiAgICB2YXIgdHJhbnNsYXRlU2NhbGVZID0gKHRoaXMudGV4dHVyZVNpemUuaGVpZ2h0IC8gdGV4dHVyZS5oZWlnaHQpO1xuXG4gICAgd29ybGRUcmFuc2Zvcm0udHggLz0gdGV4dHVyZS53aWR0aCAqIHRyYW5zbGF0ZVNjYWxlWDtcbiAgICB3b3JsZFRyYW5zZm9ybS50eSAvPSB0ZXh0dXJlLndpZHRoICogdHJhbnNsYXRlU2NhbGVYO1xuXG4gICAgd29ybGRUcmFuc2Zvcm0uaW52ZXJ0KCk7XG5cbiAgICBtYXBwZWRNYXRyaXgucHJlcGVuZCh3b3JsZFRyYW5zZm9ybSk7XG5cbiAgICAvLyBhcHBseSBpbnZlcnNlIHNjYWxlLi5cbiAgICBtYXBwZWRNYXRyaXguc2NhbGUoMSAsIDEvcmF0aW8pO1xuXG4gICAgbWFwcGVkTWF0cml4LnNjYWxlKCB0cmFuc2xhdGVTY2FsZVggLCB0cmFuc2xhdGVTY2FsZVkgKTtcblxuICAgIG1hcHBlZE1hdHJpeC50cmFuc2xhdGUoc3ByaXRlLmFuY2hvci54LCBzcHJpdGUuYW5jaG9yLnkpO1xuXG4gICAgcmV0dXJuIG1hcHBlZE1hdHJpeDtcblxuICAgIC8vIEtlZXBpbmcgdGhlIG9yZ2luYWwgYXMgYSByZW1pbmRlciB0byBtZSBvbiBob3cgdGhpcyB3b3JrcyFcbiAgICAvL1xuICAgIC8vIHZhciBtID0gbmV3IG1hdGguTWF0cml4KCk7XG5cbiAgICAvLyAvLyBzY2FsZS4uXG4gICAgLy8gdmFyIHJhdGlvID0gdGhpcy50ZXh0dXJlU2l6ZS5oZWlnaHQgLyB0aGlzLnRleHR1cmVTaXplLndpZHRoO1xuXG4gICAgLy8gbS50cmFuc2xhdGUoZmlsdGVyQXJlYS54IC8gdGhpcy50ZXh0dXJlU2l6ZS53aWR0aCwgZmlsdGVyQXJlYS55IC8gdGhpcy50ZXh0dXJlU2l6ZS5oZWlnaHQpO1xuXG5cbiAgICAvLyBtLnNjYWxlKDEgLCByYXRpbyk7XG5cblxuICAgIC8vIHZhciB0cmFuc2Zvcm0gPSB3dC5jbG9uZSgpO1xuXG4gICAgLy8gdmFyIHRyYW5zbGF0ZVNjYWxlWCA9ICh0aGlzLnRleHR1cmVTaXplLndpZHRoIC8gNjIwKTtcbiAgICAvLyB2YXIgdHJhbnNsYXRlU2NhbGVZID0gKHRoaXMudGV4dHVyZVNpemUuaGVpZ2h0IC8gMzgwKTtcblxuICAgIC8vIHRyYW5zZm9ybS50eCAvPSA2MjAgKiB0cmFuc2xhdGVTY2FsZVg7XG4gICAgLy8gdHJhbnNmb3JtLnR5IC89IDYyMCAqIHRyYW5zbGF0ZVNjYWxlWDtcblxuICAgIC8vIHRyYW5zZm9ybS5pbnZlcnQoKTtcblxuICAgIC8vIHRyYW5zZm9ybS5hcHBlbmQobSk7XG5cbiAgICAvLyAvLyBhcHBseSBpbnZlcnNlIHNjYWxlLi5cbiAgICAvLyB0cmFuc2Zvcm0uc2NhbGUoMSAsIDEvcmF0aW8pO1xuXG4gICAgLy8gdHJhbnNmb3JtLnNjYWxlKCB0cmFuc2xhdGVTY2FsZVggLCB0cmFuc2xhdGVTY2FsZVkgKTtcblxuICAgIC8vIHJldHVybiB0cmFuc2Zvcm07XG59O1xuXG4vKlxuICogQ29uc3RyYWlucyB0aGUgZmlsdGVyIGFyZWEgdG8gdGhlIHRleHR1cmUgc2l6ZVxuICogQHBhcmFtIGZpbHRlckFyZWEge1JlY3RhbmdsZX0gVGhlIGZpbHRlciBhcmVhIHdlIHdhbnQgdG8gY2FwXG4gKi9cbkZpbHRlck1hbmFnZXIucHJvdG90eXBlLmNhcEZpbHRlckFyZWEgPSBmdW5jdGlvbiAoZmlsdGVyQXJlYSlcbntcbiAgICBpZiAoZmlsdGVyQXJlYS54IDwgMClcbiAgICB7XG4gICAgICAgIGZpbHRlckFyZWEud2lkdGggKz0gZmlsdGVyQXJlYS54O1xuICAgICAgICBmaWx0ZXJBcmVhLnggPSAwO1xuICAgIH1cblxuICAgIGlmIChmaWx0ZXJBcmVhLnkgPCAwKVxuICAgIHtcbiAgICAgICAgZmlsdGVyQXJlYS5oZWlnaHQgKz0gZmlsdGVyQXJlYS55O1xuICAgICAgICBmaWx0ZXJBcmVhLnkgPSAwO1xuICAgIH1cblxuICAgIGlmICggZmlsdGVyQXJlYS54ICsgZmlsdGVyQXJlYS53aWR0aCA+IHRoaXMudGV4dHVyZVNpemUud2lkdGggKVxuICAgIHtcbiAgICAgICAgZmlsdGVyQXJlYS53aWR0aCA9IHRoaXMudGV4dHVyZVNpemUud2lkdGggLSBmaWx0ZXJBcmVhLng7XG4gICAgfVxuXG4gICAgaWYgKCBmaWx0ZXJBcmVhLnkgKyBmaWx0ZXJBcmVhLmhlaWdodCA+IHRoaXMudGV4dHVyZVNpemUuaGVpZ2h0IClcbiAgICB7XG4gICAgICAgIGZpbHRlckFyZWEuaGVpZ2h0ID0gdGhpcy50ZXh0dXJlU2l6ZS5oZWlnaHQgLSBmaWx0ZXJBcmVhLnk7XG4gICAgfVxufTtcblxuLypcbiAqIFJlc2l6ZXMgYWxsIHRoZSByZW5kZXIgdGFyZ2V0cyBpbiB0aGUgcG9vbFxuICogQHBhcmFtIHdpZHRoIHtudW1iZXJ9IHRoZSBuZXcgd2lkdGhcbiAqIEBwYXJhbSBoZWlnaHQge251bWJlcn0gdGhlIG5ldyBoZWlnaHRcbiAqL1xuRmlsdGVyTWFuYWdlci5wcm90b3R5cGUucmVzaXplID0gZnVuY3Rpb24gKCB3aWR0aCwgaGVpZ2h0IClcbntcbiAgICB0aGlzLnRleHR1cmVTaXplLndpZHRoID0gd2lkdGg7XG4gICAgdGhpcy50ZXh0dXJlU2l6ZS5oZWlnaHQgPSBoZWlnaHQ7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMudGV4dHVyZVBvb2wubGVuZ3RoOyBpKyspXG4gICAge1xuICAgICAgICB0aGlzLnRleHR1cmVQb29sW2ldLnJlc2l6ZSggd2lkdGgsIGhlaWdodCApO1xuICAgIH1cbn07XG5cbi8qKlxuICogRGVzdHJveXMgdGhlIGZpbHRlciBhbmQgcmVtb3ZlcyBpdCBmcm9tIHRoZSBmaWx0ZXIgc3RhY2suXG4gKlxuICovXG5GaWx0ZXJNYW5hZ2VyLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLnF1YWQuZGVzdHJveSgpO1xuICAgIFxuICAgIFdlYkdMTWFuYWdlci5wcm90b3R5cGUuZGVzdHJveS5jYWxsKHRoaXMpO1xuICAgIFxuICAgIHRoaXMuZmlsdGVyU3RhY2sgPSBudWxsO1xuICAgIHRoaXMub2Zmc2V0WSA9IDA7XG5cbiAgICAvLyBkZXN0cm95IHRleHR1cmVzXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLnRleHR1cmVQb29sLmxlbmd0aDsgaSsrKVxuICAgIHtcbiAgICAgICAgdGhpcy50ZXh0dXJlUG9vbFtpXS5kZXN0cm95KCk7XG4gICAgfVxuXG4gICAgdGhpcy50ZXh0dXJlUG9vbCA9IG51bGw7XG59O1xuIiwidmFyIFdlYkdMTWFuYWdlciA9IHJlcXVpcmUoJy4vV2ViR0xNYW5hZ2VyJyksXG4gICAgQWxwaGFNYXNrRmlsdGVyID0gcmVxdWlyZSgnLi4vZmlsdGVycy9TcHJpdGVNYXNrRmlsdGVyJyk7XG5cbi8qKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLldlYkdMUmVuZGVyZXJ9IFRoZSByZW5kZXJlciB0aGlzIG1hbmFnZXIgd29ya3MgZm9yLlxuICovXG5mdW5jdGlvbiBNYXNrTWFuYWdlcihyZW5kZXJlcilcbntcbiAgICBXZWJHTE1hbmFnZXIuY2FsbCh0aGlzLCByZW5kZXJlcik7XG5cbiAgICB0aGlzLnN0ZW5jaWxTdGFjayA9IFtdO1xuICAgIHRoaXMucmV2ZXJzZSA9IHRydWU7XG4gICAgdGhpcy5jb3VudCA9IDA7XG5cbiAgICB0aGlzLmFscGhhTWFza1Bvb2wgPSBbXTtcbn1cblxuTWFza01hbmFnZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShXZWJHTE1hbmFnZXIucHJvdG90eXBlKTtcbk1hc2tNYW5hZ2VyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IE1hc2tNYW5hZ2VyO1xubW9kdWxlLmV4cG9ydHMgPSBNYXNrTWFuYWdlcjtcblxuLyoqXG4gKiBBcHBsaWVzIHRoZSBNYXNrIGFuZCBhZGRzIGl0IHRvIHRoZSBjdXJyZW50IGZpbHRlciBzdGFjay5cbiAqXG4gKiBAcGFyYW0gZ3JhcGhpY3Mge1BJWEkuR3JhcGhpY3N9XG4gKiBAcGFyYW0gd2ViR0xEYXRhIHthbnlbXX1cbiAqL1xuTWFza01hbmFnZXIucHJvdG90eXBlLnB1c2hNYXNrID0gZnVuY3Rpb24gKHRhcmdldCwgbWFza0RhdGEpXG57XG4gICAgaWYgKG1hc2tEYXRhLnRleHR1cmUpXG4gICAge1xuICAgICAgICB0aGlzLnB1c2hTcHJpdGVNYXNrKHRhcmdldCwgbWFza0RhdGEpO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICB0aGlzLnB1c2hTdGVuY2lsTWFzayh0YXJnZXQsIG1hc2tEYXRhKTtcbiAgICB9XG5cbn07XG5cbi8qKlxuICogUmVtb3ZlcyB0aGUgbGFzdCBtYXNrIGZyb20gdGhlIG1hc2sgc3RhY2sgYW5kIGRvZXNuJ3QgcmV0dXJuIGl0LlxuICpcbiAqIEBwYXJhbSB0YXJnZXQge1BJWEkuUmVuZGVyVGFyZ2V0fVxuICogQHBhcmFtIG1hc2tEYXRhIHthbnlbXX1cbiAqL1xuTWFza01hbmFnZXIucHJvdG90eXBlLnBvcE1hc2sgPSBmdW5jdGlvbiAodGFyZ2V0LCBtYXNrRGF0YSlcbntcbiAgICBpZiAobWFza0RhdGEudGV4dHVyZSlcbiAgICB7XG4gICAgICAgIHRoaXMucG9wU3ByaXRlTWFzayh0YXJnZXQsIG1hc2tEYXRhKTtcbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgdGhpcy5wb3BTdGVuY2lsTWFzayh0YXJnZXQsIG1hc2tEYXRhKTtcbiAgICB9XG59O1xuXG4vKipcbiAqIEFwcGxpZXMgdGhlIE1hc2sgYW5kIGFkZHMgaXQgdG8gdGhlIGN1cnJlbnQgZmlsdGVyIHN0YWNrLlxuICpcbiAqIEBwYXJhbSB0YXJnZXQge1BJWEkuUmVuZGVyVGFyZ2V0fVxuICogQHBhcmFtIG1hc2tEYXRhIHthbnlbXX1cbiAqL1xuTWFza01hbmFnZXIucHJvdG90eXBlLnB1c2hTcHJpdGVNYXNrID0gZnVuY3Rpb24gKHRhcmdldCwgbWFza0RhdGEpXG57XG4gICAgdmFyIGFscGhhTWFza0ZpbHRlciA9IHRoaXMuYWxwaGFNYXNrUG9vbC5wb3AoKTtcblxuICAgIGlmICghYWxwaGFNYXNrRmlsdGVyKVxuICAgIHtcbiAgICAgICAgYWxwaGFNYXNrRmlsdGVyID0gW25ldyBBbHBoYU1hc2tGaWx0ZXIobWFza0RhdGEpXTtcbiAgICB9XG5cbiAgICBhbHBoYU1hc2tGaWx0ZXJbMF0ubWFza1Nwcml0ZSA9IG1hc2tEYXRhO1xuICAgIHRoaXMucmVuZGVyZXIuZmlsdGVyTWFuYWdlci5wdXNoRmlsdGVyKHRhcmdldCwgYWxwaGFNYXNrRmlsdGVyKTtcbn07XG5cbi8qKlxuICogUmVtb3ZlcyB0aGUgbGFzdCBmaWx0ZXIgZnJvbSB0aGUgZmlsdGVyIHN0YWNrIGFuZCBkb2Vzbid0IHJldHVybiBpdC5cbiAqXG4gKi9cbk1hc2tNYW5hZ2VyLnByb3RvdHlwZS5wb3BTcHJpdGVNYXNrID0gZnVuY3Rpb24gKClcbntcbiAgICB2YXIgZmlsdGVycyA9IHRoaXMucmVuZGVyZXIuZmlsdGVyTWFuYWdlci5wb3BGaWx0ZXIoKTtcblxuICAgIHRoaXMuYWxwaGFNYXNrUG9vbC5wdXNoKGZpbHRlcnMpO1xufTtcblxuXG4vKipcbiAqIEFwcGxpZXMgdGhlIE1hc2sgYW5kIGFkZHMgaXQgdG8gdGhlIGN1cnJlbnQgZmlsdGVyIHN0YWNrLlxuICpcbiAqIEBwYXJhbSB0YXJnZXQge1BJWEkuUmVuZGVyVGFyZ2V0fVxuICogQHBhcmFtIG1hc2tEYXRhIHthbnlbXX1cbiAqL1xuTWFza01hbmFnZXIucHJvdG90eXBlLnB1c2hTdGVuY2lsTWFzayA9IGZ1bmN0aW9uICh0YXJnZXQsIG1hc2tEYXRhKVxue1xuICAgIHRoaXMucmVuZGVyZXIuc3RlbmNpbE1hbmFnZXIucHVzaE1hc2sobWFza0RhdGEpO1xufTtcblxuLyoqXG4gKiBSZW1vdmVzIHRoZSBsYXN0IGZpbHRlciBmcm9tIHRoZSBmaWx0ZXIgc3RhY2sgYW5kIGRvZXNuJ3QgcmV0dXJuIGl0LlxuICpcbiAqIEBwYXJhbSB0YXJnZXQge1BJWEkuUmVuZGVyVGFyZ2V0fVxuICogQHBhcmFtIG1hc2tEYXRhIHthbnlbXX1cbiAqL1xuTWFza01hbmFnZXIucHJvdG90eXBlLnBvcFN0ZW5jaWxNYXNrID0gZnVuY3Rpb24gKHRhcmdldCwgbWFza0RhdGEpXG57XG4gICAgdGhpcy5yZW5kZXJlci5zdGVuY2lsTWFuYWdlci5wb3BNYXNrKG1hc2tEYXRhKTtcbn07XG5cbiIsInZhciBXZWJHTE1hbmFnZXIgPSByZXF1aXJlKCcuL1dlYkdMTWFuYWdlcicpLFxuICAgIFRleHR1cmVTaGFkZXIgPSByZXF1aXJlKCcuLi9zaGFkZXJzL1RleHR1cmVTaGFkZXInKSxcbiAgICBDb21wbGV4UHJpbWl0aXZlU2hhZGVyID0gcmVxdWlyZSgnLi4vc2hhZGVycy9Db21wbGV4UHJpbWl0aXZlU2hhZGVyJyksXG4gICAgUHJpbWl0aXZlU2hhZGVyID0gcmVxdWlyZSgnLi4vc2hhZGVycy9QcmltaXRpdmVTaGFkZXInKSxcbiAgICB1dGlscyA9IHJlcXVpcmUoJy4uLy4uLy4uL3V0aWxzJyk7XG5cbi8qKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQGV4dGVuZHMgUElYSS5XZWJHTE1hbmFnZXJcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5XZWJHTFJlbmRlcmVyfSBUaGUgcmVuZGVyZXIgdGhpcyBtYW5hZ2VyIHdvcmtzIGZvci5cbiAqL1xuZnVuY3Rpb24gU2hhZGVyTWFuYWdlcihyZW5kZXJlcilcbntcbiAgICBXZWJHTE1hbmFnZXIuY2FsbCh0aGlzLCByZW5kZXJlcik7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy5tYXhBdHRpYnMgPSAxMDtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge2FueVtdfVxuICAgICAqL1xuICAgIHRoaXMuYXR0cmliU3RhdGUgPSBbXTtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge2FueVtdfVxuICAgICAqL1xuICAgIHRoaXMudGVtcEF0dHJpYlN0YXRlID0gW107XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMubWF4QXR0aWJzOyBpKyspXG4gICAge1xuICAgICAgICB0aGlzLmF0dHJpYlN0YXRlW2ldID0gZmFsc2U7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7YW55W119XG4gICAgICovXG4gICAgdGhpcy5zdGFjayA9IFtdO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fY3VycmVudElkID0gLTE7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlNoYWRlcn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuY3VycmVudFNoYWRlciA9IG51bGw7XG5cbi8vICAgIHRoaXMuaW5pdFBsdWdpbnMoKTtcbn1cblxuU2hhZGVyTWFuYWdlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFdlYkdMTWFuYWdlci5wcm90b3R5cGUpO1xuU2hhZGVyTWFuYWdlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBTaGFkZXJNYW5hZ2VyO1xudXRpbHMucGx1Z2luVGFyZ2V0Lm1peGluKFNoYWRlck1hbmFnZXIpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IFNoYWRlck1hbmFnZXI7XG5cbi8qKlxuICogQ2FsbGVkIHdoZW4gdGhlcmUgaXMgYSBXZWJHTCBjb250ZXh0IGNoYW5nZS5cbiAqXG4gKi9cblNoYWRlck1hbmFnZXIucHJvdG90eXBlLm9uQ29udGV4dENoYW5nZSA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy5pbml0UGx1Z2lucygpO1xuXG4gICAgdmFyIGdsID0gdGhpcy5yZW5kZXJlci5nbDtcblxuICAgIC8vIGdldCB0aGUgbWF4aW11bSBudW1iZXIgb2YgYXR0cmlidXRlIGNvcnJlY3RseSBhcyB0aGlzIHRlbmRzIHRvIHZhcnlcbiAgICB0aGlzLm1heEF0dGlicyA9IGdsLmdldFBhcmFtZXRlcihnbC5NQVhfVkVSVEVYX0FUVFJJQlMpO1xuXG4gICAgdGhpcy5hdHRyaWJTdGF0ZSA9IFtdO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLm1heEF0dGliczsgaSsrKVxuICAgIHtcbiAgICAgICAgdGhpcy5hdHRyaWJTdGF0ZVtpXSA9IGZhbHNlO1xuICAgIH1cblxuICAgIC8vIFRPRE8gLSBXaHkgYXJlIHRoZXNlIG5vdCBwbHVnaW5zPyBXZSBjYW4ndCBkZWNvdXBsZSBwcmltaXRpdmVzIHVubGVzcyB0aGV5IGFyZS4uLi5cbiAgICB0aGlzLmRlZmF1bHRTaGFkZXIgPSBuZXcgVGV4dHVyZVNoYWRlcih0aGlzKTtcbiAgICB0aGlzLnByaW1pdGl2ZVNoYWRlciA9IG5ldyBQcmltaXRpdmVTaGFkZXIodGhpcyk7XG4gICAgdGhpcy5jb21wbGV4UHJpbWl0aXZlU2hhZGVyID0gbmV3IENvbXBsZXhQcmltaXRpdmVTaGFkZXIodGhpcyk7XG59O1xuXG4vKipcbiAqIFRha2VzIHRoZSBhdHRyaWJ1dGVzIGdpdmVuIGluIHBhcmFtZXRlcnMgYW5kIHVwbG9hZHMgdGhlbS5cbiAqXG4gKiBAcGFyYW0gYXR0cmlicyB7YW55W119IGF0dHJpYnNcbiAqL1xuU2hhZGVyTWFuYWdlci5wcm90b3R5cGUuc2V0QXR0cmlicyA9IGZ1bmN0aW9uIChhdHRyaWJzKVxue1xuICAgIC8vIHJlc2V0IHRlbXAgc3RhdGVcbiAgICB2YXIgaTtcblxuICAgIGZvciAoaSA9IDA7IGkgPCB0aGlzLnRlbXBBdHRyaWJTdGF0ZS5sZW5ndGg7IGkrKylcbiAgICB7XG4gICAgICAgIHRoaXMudGVtcEF0dHJpYlN0YXRlW2ldID0gZmFsc2U7XG4gICAgfVxuXG4gICAgLy8gc2V0IHRoZSBuZXcgYXR0cmlic1xuICAgIGZvciAodmFyIGEgaW4gYXR0cmlicylcbiAgICB7XG4gICAgICAgIHRoaXMudGVtcEF0dHJpYlN0YXRlW2F0dHJpYnNbYV1dID0gdHJ1ZTtcbiAgICB9XG5cbiAgICB2YXIgZ2wgPSB0aGlzLnJlbmRlcmVyLmdsO1xuXG4gICAgZm9yIChpID0gMDsgaSA8IHRoaXMuYXR0cmliU3RhdGUubGVuZ3RoOyBpKyspXG4gICAge1xuICAgICAgICBpZiAodGhpcy5hdHRyaWJTdGF0ZVtpXSAhPT0gdGhpcy50ZW1wQXR0cmliU3RhdGVbaV0pXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuYXR0cmliU3RhdGVbaV0gPSB0aGlzLnRlbXBBdHRyaWJTdGF0ZVtpXTtcblxuICAgICAgICAgICAgaWYgKHRoaXMuYXR0cmliU3RhdGVbaV0pXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgZ2wuZW5hYmxlVmVydGV4QXR0cmliQXJyYXkoaSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgZ2wuZGlzYWJsZVZlcnRleEF0dHJpYkFycmF5KGkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxufTtcblxuLyoqXG4gKiBTZXRzIHRoZSBjdXJyZW50IHNoYWRlci5cbiAqXG4gKiBAcGFyYW0gc2hhZGVyIHtQSVhJLlNoYWRlcn0gdGhlIHNoYWRlciB0byB1cGxvYWRcbiAqL1xuU2hhZGVyTWFuYWdlci5wcm90b3R5cGUuc2V0U2hhZGVyID0gZnVuY3Rpb24gKHNoYWRlcilcbntcbiAgICByZXR1cm47XG4gICAgaWYgKHRoaXMuX2N1cnJlbnRJZCA9PT0gc2hhZGVyLnVpZClcbiAgICB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICB0aGlzLl9jdXJyZW50SWQgPSBzaGFkZXIudWlkO1xuXG4gICAgdGhpcy5jdXJyZW50U2hhZGVyID0gc2hhZGVyO1xuXG4gICAgdGhpcy5yZW5kZXJlci5nbC51c2VQcm9ncmFtKHNoYWRlci5wcm9ncmFtKTtcbiAgICB0aGlzLnNldEF0dHJpYnMoc2hhZGVyLmF0dHJpYnV0ZXMpO1xuXG4gICAgcmV0dXJuIHRydWU7XG59O1xuXG4vKipcbiAqIERlc3Ryb3lzIHRoaXMgb2JqZWN0LlxuICpcbiAqL1xuU2hhZGVyTWFuYWdlci5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy5wcmltaXRpdmVTaGFkZXIuZGVzdHJveSgpO1xuICAgIHRoaXMuY29tcGxleFByaW1pdGl2ZVNoYWRlci5kZXN0cm95KCk7XG4gICAgV2ViR0xNYW5hZ2VyLnByb3RvdHlwZS5kZXN0cm95LmNhbGwodGhpcyk7XG5cbiAgICB0aGlzLmRlc3Ryb3lQbHVnaW5zKCk7XG5cbiAgICB0aGlzLmF0dHJpYlN0YXRlID0gbnVsbDtcblxuICAgIHRoaXMudGVtcEF0dHJpYlN0YXRlID0gbnVsbDtcbn07XG4iLCJ2YXIgV2ViR0xNYW5hZ2VyID0gcmVxdWlyZSgnLi9XZWJHTE1hbmFnZXInKSxcbiAgICB1dGlscyA9IHJlcXVpcmUoJy4uLy4uLy4uL3V0aWxzJyk7XG5cbi8qKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLldlYkdMUmVuZGVyZXJ9IFRoZSByZW5kZXJlciB0aGlzIG1hbmFnZXIgd29ya3MgZm9yLlxuICovXG5mdW5jdGlvbiBXZWJHTE1hc2tNYW5hZ2VyKHJlbmRlcmVyKVxue1xuICAgIFdlYkdMTWFuYWdlci5jYWxsKHRoaXMsIHJlbmRlcmVyKTtcbiAgICB0aGlzLnN0ZW5jaWxNYXNrU3RhY2sgPSBudWxsO1xufVxuXG5XZWJHTE1hc2tNYW5hZ2VyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoV2ViR0xNYW5hZ2VyLnByb3RvdHlwZSk7XG5XZWJHTE1hc2tNYW5hZ2VyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFdlYkdMTWFza01hbmFnZXI7XG5tb2R1bGUuZXhwb3J0cyA9IFdlYkdMTWFza01hbmFnZXI7XG5cbi8qKlxuICogQ2hhbmdlcyB0aGUgbWFzayBzdGFjayB0aGF0IGlzIHVzZWQgYnkgdGhpcyBtYW5hZ2VyLlxuICpcbiAqIEBwYXJhbSBzdGVuY2lsTWFza1N0YWNrIHtQSVhJLlN0ZW5jaWxNYXNrU3RhY2t9IFRoZSBtYXNrIHN0YWNrXG4gKi9cbldlYkdMTWFza01hbmFnZXIucHJvdG90eXBlLnNldE1hc2tTdGFjayA9IGZ1bmN0aW9uICggc3RlbmNpbE1hc2tTdGFjayApXG57XG4gICAgdGhpcy5zdGVuY2lsTWFza1N0YWNrID0gc3RlbmNpbE1hc2tTdGFjaztcblxuICAgIHZhciBnbCA9IHRoaXMucmVuZGVyZXIuZ2w7XG5cbiAgICBpZiAoc3RlbmNpbE1hc2tTdGFjay5zdGVuY2lsU3RhY2subGVuZ3RoID09PSAwKVxuICAgIHtcbiAgICAgICAgZ2wuZGlzYWJsZShnbC5TVEVOQ0lMX1RFU1QpO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICBnbC5lbmFibGUoZ2wuU1RFTkNJTF9URVNUKTtcbiAgICB9XG59O1xuXG4vKipcbiAqIEFwcGxpZXMgdGhlIE1hc2sgYW5kIGFkZHMgaXQgdG8gdGhlIGN1cnJlbnQgZmlsdGVyIHN0YWNrLiBAYWx2aW5cbiAqXG4gKiBAcGFyYW0gZ3JhcGhpY3Mge1BJWEkuR3JhcGhpY3N9XG4gKiBAcGFyYW0gd2ViR0xEYXRhIHthbnlbXX1cbiAqL1xuV2ViR0xNYXNrTWFuYWdlci5wcm90b3R5cGUucHVzaFN0ZW5jaWwgPSBmdW5jdGlvbiAoZ3JhcGhpY3MsIHdlYkdMRGF0YSlcbntcbiAgICB0aGlzLnJlbmRlcmVyLl9hY3RpdmVSZW5kZXJUYXJnZXQuYXR0YWNoU3RlbmNpbEJ1ZmZlcigpO1xuXG4gICAgdmFyIGdsID0gdGhpcy5yZW5kZXJlci5nbCxcbiAgICAgICAgc21zID0gdGhpcy5zdGVuY2lsTWFza1N0YWNrO1xuXG4gICAgdGhpcy5iaW5kR3JhcGhpY3MoZ3JhcGhpY3MsIHdlYkdMRGF0YSk7XG5cbiAgICBpZiAoc21zLnN0ZW5jaWxTdGFjay5sZW5ndGggPT09IDApXG4gICAge1xuICAgICAgICBnbC5lbmFibGUoZ2wuU1RFTkNJTF9URVNUKTtcbiAgICAgICAgZ2wuY2xlYXIoZ2wuU1RFTkNJTF9CVUZGRVJfQklUKTtcbiAgICAgICAgc21zLnJldmVyc2UgPSB0cnVlO1xuICAgICAgICBzbXMuY291bnQgPSAwO1xuICAgIH1cblxuICAgIHNtcy5zdGVuY2lsU3RhY2sucHVzaCh3ZWJHTERhdGEpO1xuXG4gICAgdmFyIGxldmVsID0gc21zLmNvdW50O1xuXG4gICAgZ2wuY29sb3JNYXNrKGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlKTtcblxuICAgIGdsLnN0ZW5jaWxGdW5jKGdsLkFMV0FZUywwLDB4RkYpO1xuICAgIGdsLnN0ZW5jaWxPcChnbC5LRUVQLGdsLktFRVAsZ2wuSU5WRVJUKTtcblxuICAgIC8vIGRyYXcgdGhlIHRyaWFuZ2xlIHN0cmlwIVxuXG4gICAgaWYgKHdlYkdMRGF0YS5tb2RlID09PSAxKVxuICAgIHtcbiAgICAgICAgZ2wuZHJhd0VsZW1lbnRzKGdsLlRSSUFOR0xFX0ZBTiwgIHdlYkdMRGF0YS5pbmRpY2VzLmxlbmd0aCAtIDQsIGdsLlVOU0lHTkVEX1NIT1JULCAwICk7XG5cbiAgICAgICAgaWYgKHNtcy5yZXZlcnNlKVxuICAgICAgICB7XG4gICAgICAgICAgICBnbC5zdGVuY2lsRnVuYyhnbC5FUVVBTCwgMHhGRiAtIGxldmVsLCAweEZGKTtcbiAgICAgICAgICAgIGdsLnN0ZW5jaWxPcChnbC5LRUVQLGdsLktFRVAsZ2wuREVDUik7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgICBnbC5zdGVuY2lsRnVuYyhnbC5FUVVBTCxsZXZlbCwgMHhGRik7XG4gICAgICAgICAgICBnbC5zdGVuY2lsT3AoZ2wuS0VFUCxnbC5LRUVQLGdsLklOQ1IpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gZHJhdyBhIHF1YWQgdG8gaW5jcmVtZW50Li5cbiAgICAgICAgZ2wuZHJhd0VsZW1lbnRzKGdsLlRSSUFOR0xFX0ZBTiwgNCwgZ2wuVU5TSUdORURfU0hPUlQsICggd2ViR0xEYXRhLmluZGljZXMubGVuZ3RoIC0gNCApICogMiApO1xuXG4gICAgICAgIGlmIChzbXMucmV2ZXJzZSlcbiAgICAgICAge1xuICAgICAgICAgICAgZ2wuc3RlbmNpbEZ1bmMoZ2wuRVFVQUwsMHhGRi0obGV2ZWwrMSksIDB4RkYpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2VcbiAgICAgICAge1xuICAgICAgICAgICAgZ2wuc3RlbmNpbEZ1bmMoZ2wuRVFVQUwsbGV2ZWwrMSwgMHhGRik7XG4gICAgICAgIH1cblxuICAgICAgICBzbXMucmV2ZXJzZSA9ICFzbXMucmV2ZXJzZTtcbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgaWYgKCFzbXMucmV2ZXJzZSlcbiAgICAgICAge1xuICAgICAgICAgICAgZ2wuc3RlbmNpbEZ1bmMoZ2wuRVFVQUwsIDB4RkYgLSBsZXZlbCwgMHhGRik7XG4gICAgICAgICAgICBnbC5zdGVuY2lsT3AoZ2wuS0VFUCxnbC5LRUVQLGdsLkRFQ1IpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2VcbiAgICAgICAge1xuICAgICAgICAgICAgZ2wuc3RlbmNpbEZ1bmMoZ2wuRVFVQUwsbGV2ZWwsIDB4RkYpO1xuICAgICAgICAgICAgZ2wuc3RlbmNpbE9wKGdsLktFRVAsZ2wuS0VFUCxnbC5JTkNSKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGdsLmRyYXdFbGVtZW50cyhnbC5UUklBTkdMRV9TVFJJUCwgIHdlYkdMRGF0YS5pbmRpY2VzLmxlbmd0aCwgZ2wuVU5TSUdORURfU0hPUlQsIDAgKTtcblxuICAgICAgICBpZiAoIXNtcy5yZXZlcnNlKVxuICAgICAgICB7XG4gICAgICAgICAgICBnbC5zdGVuY2lsRnVuYyhnbC5FUVVBTCwweEZGLShsZXZlbCsxKSwgMHhGRik7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgICBnbC5zdGVuY2lsRnVuYyhnbC5FUVVBTCxsZXZlbCsxLCAweEZGKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGdsLmNvbG9yTWFzayh0cnVlLCB0cnVlLCB0cnVlLCB0cnVlKTtcbiAgICBnbC5zdGVuY2lsT3AoZ2wuS0VFUCxnbC5LRUVQLGdsLktFRVApO1xuXG4gICAgc21zLmNvdW50Kys7XG59O1xuXG4vKipcbiAqIFRPRE8gdGhpcyBkb2VzIG5vdCBiZWxvbmcgaGVyZSFcbiAqXG4gKiBAcGFyYW0gZ3JhcGhpY3Mge1BJWEkuR3JhcGhpY3N9XG4gKiBAcGFyYW0gd2ViR0xEYXRhIHthbnlbXX1cbiAqL1xuV2ViR0xNYXNrTWFuYWdlci5wcm90b3R5cGUuYmluZEdyYXBoaWNzID0gZnVuY3Rpb24gKGdyYXBoaWNzLCB3ZWJHTERhdGEpXG57XG4gICAgLy9pZiAodGhpcy5fY3VycmVudEdyYXBoaWNzID09PSBncmFwaGljcylyZXR1cm47XG4gICAgdmFyIGdsID0gdGhpcy5yZW5kZXJlci5nbDtcblxuICAgICAvLyBiaW5kIHRoZSBncmFwaGljcyBvYmplY3QuLlxuICAgIHZhciBzaGFkZXIgPSB0aGlzLnJlbmRlcmVyLnBsdWdpbnMuZ3JhcGhpY3MucHJpbWl0aXZlU2hhZGVyO1xuXG4gICAgaWYgKHdlYkdMRGF0YS5tb2RlID09PSAxKVxuICAgIHtcbiAgICAgICAgLypcbiAgICAgICAgc2hhZGVyID0gdGhpcy5yZW5kZXJlci5zaGFkZXJNYW5hZ2VyLmNvbXBsZXhQcmltaXRpdmVTaGFkZXI7XG5cbiAgICAgICAgdGhpcy5yZW5kZXJlci5zaGFkZXJNYW5hZ2VyLnNldFNoYWRlcihzaGFkZXIpO1xuXG4gICAgICAgIGdsLnVuaWZvcm1NYXRyaXgzZnYoc2hhZGVyLnVuaWZvcm1zLnRyYW5zbGF0aW9uTWF0cml4Ll9sb2NhdGlvbiwgZmFsc2UsIGdyYXBoaWNzLndvcmxkVHJhbnNmb3JtLnRvQXJyYXkodHJ1ZSkpO1xuXG4gICAgICAgIGdsLnVuaWZvcm1NYXRyaXgzZnYoc2hhZGVyLnVuaWZvcm1zLnByb2plY3Rpb25NYXRyaXguX2xvY2F0aW9uLCBmYWxzZSwgdGhpcy5yZW5kZXJlci5jdXJyZW50UmVuZGVyVGFyZ2V0LnByb2plY3Rpb25NYXRyaXgudG9BcnJheSh0cnVlKSk7XG5cbiAgICAgICAgZ2wudW5pZm9ybTNmdihzaGFkZXIudW5pZm9ybXMudGludC5fbG9jYXRpb24sIHV0aWxzLmhleDJyZ2IoZ3JhcGhpY3MudGludCkpO1xuXG4gICAgICAgIGdsLnVuaWZvcm0zZnYoc2hhZGVyLnVuaWZvcm1zLmNvbG9yLl9sb2NhdGlvbiwgd2ViR0xEYXRhLmNvbG9yKTtcblxuICAgICAgICBnbC51bmlmb3JtMWYoc2hhZGVyLnVuaWZvcm1zLmFscGhhLl9sb2NhdGlvbiwgZ3JhcGhpY3Mud29ybGRBbHBoYSk7XG5cbiAgICAgICAgZ2wuYmluZEJ1ZmZlcihnbC5BUlJBWV9CVUZGRVIsIHdlYkdMRGF0YS5idWZmZXIpO1xuXG4gICAgICAgIGdsLnZlcnRleEF0dHJpYlBvaW50ZXIoc2hhZGVyLmF0dHJpYnV0ZXMuYVZlcnRleFBvc2l0aW9uLCAyLCBnbC5GTE9BVCwgZmFsc2UsIDQgKiAyLCAwKTtcblxuICAgICAgICAvLyBub3cgZG8gdGhlIHJlc3QuLlxuICAgICAgICAvLyBzZXQgdGhlIGluZGV4IGJ1ZmZlciFcbiAgICAgICAgZ2wuYmluZEJ1ZmZlcihnbC5FTEVNRU5UX0FSUkFZX0JVRkZFUiwgd2ViR0xEYXRhLmluZGV4QnVmZmVyKTtcbiAgICAqL1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICAvL3RoaXMucmVuZGVyZXIuc2hhZGVyTWFuYWdlci5hY3RpdmF0ZVByaW1pdGl2ZVNoYWRlcigpO1xuLy8gICAgICAgIHNoYWRlciA9IHRoaXMucmVuZGVyZXIuc2hhZGVyTWFuYWdlci5wcmltaXRpdmVTaGFkZXI7XG4gICAgICAgXG4gICAgICAgIHRoaXMucmVuZGVyZXIuYmluZFNoYWRlcihzaGFkZXIpXG5cbiAgICAgICAgc2hhZGVyLnVuaWZvcm1zLnRyYW5zbGF0aW9uTWF0cml4ID0gZ3JhcGhpY3Mud29ybGRUcmFuc2Zvcm0udG9BcnJheSh0cnVlKTtcbiAgICAgICAgc2hhZGVyLnVuaWZvcm1zLnRpbnQgPSB1dGlscy5oZXgycmdiKGdyYXBoaWNzLnRpbnQpO1xuICAgICAgICBzaGFkZXIudW5pZm9ybXMuYWxwaGEgPSBncmFwaGljcy53b3JsZEFscGhhO1xuXG5cbiAgICAgICAgZ2wuYmluZEJ1ZmZlcihnbC5BUlJBWV9CVUZGRVIsIHdlYkdMRGF0YS5idWZmZXIpO1xuXG5cbiAgICAgICAgc2hhZGVyLmF0dHJpYnV0ZXMuYVZlcnRleFBvc2l0aW9uLnBvaW50ZXIoZ2wuRkxPQVQsIGZhbHNlLCA0ICogNiwgMCk7XG4gICAgICAgIHNoYWRlci5hdHRyaWJ1dGVzLmFDb2xvci5wb2ludGVyKGdsLkZMT0FULCBmYWxzZSwgNCAqIDYsIDIgKiA0KTtcblxuICAgICAgICBnbC5lbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShzaGFkZXIuYXR0cmlidXRlcy5hVmVydGV4UG9zaXRpb24ubG9jYXRpb24pO1xuICAgICAgICBnbC5lbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShzaGFkZXIuYXR0cmlidXRlcy5hQ29sb3IubG9jYXRpb24pO1xuXG4gICAgICAgIC8vIHNldCB0aGUgaW5kZXggYnVmZmVyIVxuICAgICAgICBnbC5iaW5kQnVmZmVyKGdsLkVMRU1FTlRfQVJSQVlfQlVGRkVSLCB3ZWJHTERhdGEuaW5kZXhCdWZmZXIpO1xuLy8gICAgICAgIGdsLmRyYXdFbGVtZW50cyhnbC5UUklBTkdMRV9TVFJJUCwgIHdlYkdMRGF0YS5pbmRpY2VzLmxlbmd0aCwgZ2wuVU5TSUdORURfU0hPUlQsIDAgKTtcblxuXG4gICAgICAvKiAgdGhpcy5yZW5kZXJlci5zaGFkZXJNYW5hZ2VyLnNldFNoYWRlcihzaGFkZXIpO1xuXG4gICAgICAgIGdsLnVuaWZvcm1NYXRyaXgzZnYoc2hhZGVyLnVuaWZvcm1zLnRyYW5zbGF0aW9uTWF0cml4Ll9sb2NhdGlvbiwgZmFsc2UsIGdyYXBoaWNzLndvcmxkVHJhbnNmb3JtLnRvQXJyYXkodHJ1ZSkpO1xuXG4gICAgICAgIGdsLnVuaWZvcm1NYXRyaXgzZnYoc2hhZGVyLnVuaWZvcm1zLnByb2plY3Rpb25NYXRyaXguX2xvY2F0aW9uLCBmYWxzZSwgdGhpcy5yZW5kZXJlci5jdXJyZW50UmVuZGVyVGFyZ2V0LnByb2plY3Rpb25NYXRyaXgudG9BcnJheSh0cnVlKSk7XG5cbiAgICAgICAgZ2wudW5pZm9ybTNmdihzaGFkZXIudW5pZm9ybXMudGludC5fbG9jYXRpb24sIHV0aWxzLmhleDJyZ2IoZ3JhcGhpY3MudGludCkpO1xuXG4gICAgICAgIGdsLnVuaWZvcm0xZihzaGFkZXIudW5pZm9ybXMuYWxwaGEuX2xvY2F0aW9uLCBncmFwaGljcy53b3JsZEFscGhhKTtcblxuICAgICAgICBnbC5iaW5kQnVmZmVyKGdsLkFSUkFZX0JVRkZFUiwgd2ViR0xEYXRhLmJ1ZmZlcik7XG5cbiAgICAgICAgZ2wudmVydGV4QXR0cmliUG9pbnRlcihzaGFkZXIuYXR0cmlidXRlcy5hVmVydGV4UG9zaXRpb24sIDIsIGdsLkZMT0FULCBmYWxzZSwgNCAqIDYsIDApO1xuICAgICAgICBnbC52ZXJ0ZXhBdHRyaWJQb2ludGVyKHNoYWRlci5hdHRyaWJ1dGVzLmFDb2xvciwgNCwgZ2wuRkxPQVQsIGZhbHNlLDQgKiA2LCAyICogNCk7XG5cbiAgICAgICAgLy8gc2V0IHRoZSBpbmRleCBidWZmZXIhXG4gICAgICAgIGdsLmJpbmRCdWZmZXIoZ2wuRUxFTUVOVF9BUlJBWV9CVUZGRVIsIHdlYkdMRGF0YS5pbmRleEJ1ZmZlcik7Ki9cbiAgICB9XG59O1xuXG4vKipcbiAqIFRPRE8gQGFsdmluXG4gKiBAcGFyYW0gZ3JhcGhpY3Mge1BJWEkuR3JhcGhpY3N9XG4gKiBAcGFyYW0gd2ViR0xEYXRhIHthbnlbXX1cbiAqL1xuV2ViR0xNYXNrTWFuYWdlci5wcm90b3R5cGUucG9wU3RlbmNpbCA9IGZ1bmN0aW9uIChncmFwaGljcywgd2ViR0xEYXRhKVxue1xuICAgIHZhciBnbCA9IHRoaXMucmVuZGVyZXIuZ2wsXG4gICAgICAgIHNtcyA9IHRoaXMuc3RlbmNpbE1hc2tTdGFjaztcblxuICAgIHNtcy5zdGVuY2lsU3RhY2sucG9wKCk7XG5cbiAgICBzbXMuY291bnQtLTtcblxuICAgIGlmIChzbXMuc3RlbmNpbFN0YWNrLmxlbmd0aCA9PT0gMClcbiAgICB7XG4gICAgICAgIC8vIHRoZSBzdGFjayBpcyBlbXB0eSFcbiAgICAgICAgZ2wuZGlzYWJsZShnbC5TVEVOQ0lMX1RFU1QpO1xuXG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG5cbiAgICAgICAgdmFyIGxldmVsID0gc21zLmNvdW50O1xuXG4gICAgICAgIHRoaXMuYmluZEdyYXBoaWNzKGdyYXBoaWNzLCB3ZWJHTERhdGEpO1xuXG4gICAgICAgIGdsLmNvbG9yTWFzayhmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSk7XG5cbiAgICAgICAgaWYgKHdlYkdMRGF0YS5tb2RlID09PSAxKVxuICAgICAgICB7XG4gICAgICAgICAgICBzbXMucmV2ZXJzZSA9ICFzbXMucmV2ZXJzZTtcblxuICAgICAgICAgICAgaWYgKHNtcy5yZXZlcnNlKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGdsLnN0ZW5jaWxGdW5jKGdsLkVRVUFMLCAweEZGIC0gKGxldmVsKzEpLCAweEZGKTtcbiAgICAgICAgICAgICAgICBnbC5zdGVuY2lsT3AoZ2wuS0VFUCxnbC5LRUVQLGdsLklOQ1IpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGdsLnN0ZW5jaWxGdW5jKGdsLkVRVUFMLGxldmVsKzEsIDB4RkYpO1xuICAgICAgICAgICAgICAgIGdsLnN0ZW5jaWxPcChnbC5LRUVQLGdsLktFRVAsZ2wuREVDUik7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIGRyYXcgYSBxdWFkIHRvIGluY3JlbWVudC4uXG4gICAgICAgICAgICBnbC5kcmF3RWxlbWVudHMoZ2wuVFJJQU5HTEVfRkFOLCA0LCBnbC5VTlNJR05FRF9TSE9SVCwgKCB3ZWJHTERhdGEuaW5kaWNlcy5sZW5ndGggLSA0ICkgKiAyICk7XG5cbiAgICAgICAgICAgIGdsLnN0ZW5jaWxGdW5jKGdsLkFMV0FZUywwLDB4RkYpO1xuICAgICAgICAgICAgZ2wuc3RlbmNpbE9wKGdsLktFRVAsZ2wuS0VFUCxnbC5JTlZFUlQpO1xuXG4gICAgICAgICAgICAvLyBkcmF3IHRoZSB0cmlhbmdsZSBzdHJpcCFcbiAgICAgICAgICAgIGdsLmRyYXdFbGVtZW50cyhnbC5UUklBTkdMRV9GQU4sICB3ZWJHTERhdGEuaW5kaWNlcy5sZW5ndGggLSA0LCBnbC5VTlNJR05FRF9TSE9SVCwgMCApO1xuXG4gICAgICAgICAgICB0aGlzLnJlbmRlcmVyLmRyYXdDb3VudCArPSAyO1xuXG4gICAgICAgICAgICBpZiAoIXNtcy5yZXZlcnNlKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGdsLnN0ZW5jaWxGdW5jKGdsLkVRVUFMLDB4RkYtKGxldmVsKSwgMHhGRik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgZ2wuc3RlbmNpbEZ1bmMoZ2wuRVFVQUwsbGV2ZWwsIDB4RkYpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgLy8gIGNvbnNvbGUubG9nKFwiPDw+PlwiKVxuICAgICAgICAgICAgaWYgKCFzbXMucmV2ZXJzZSlcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBnbC5zdGVuY2lsRnVuYyhnbC5FUVVBTCwgMHhGRiAtIChsZXZlbCsxKSwgMHhGRik7XG4gICAgICAgICAgICAgICAgZ2wuc3RlbmNpbE9wKGdsLktFRVAsZ2wuS0VFUCxnbC5JTkNSKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBnbC5zdGVuY2lsRnVuYyhnbC5FUVVBTCxsZXZlbCsxLCAweEZGKTtcbiAgICAgICAgICAgICAgICBnbC5zdGVuY2lsT3AoZ2wuS0VFUCxnbC5LRUVQLGdsLkRFQ1IpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBnbC5kcmF3RWxlbWVudHMoZ2wuVFJJQU5HTEVfU1RSSVAsICB3ZWJHTERhdGEuaW5kaWNlcy5sZW5ndGgsIGdsLlVOU0lHTkVEX1NIT1JULCAwICk7XG5cbiAgICAgICAgICAgIHRoaXMucmVuZGVyZXIuZHJhd0NvdW50Kys7XG5cbiAgICAgICAgICAgIGlmICghc21zLnJldmVyc2UpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgZ2wuc3RlbmNpbEZ1bmMoZ2wuRVFVQUwsMHhGRi0obGV2ZWwpLCAweEZGKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBnbC5zdGVuY2lsRnVuYyhnbC5FUVVBTCxsZXZlbCwgMHhGRik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBnbC5jb2xvck1hc2sodHJ1ZSwgdHJ1ZSwgdHJ1ZSwgdHJ1ZSk7XG4gICAgICAgIGdsLnN0ZW5jaWxPcChnbC5LRUVQLGdsLktFRVAsZ2wuS0VFUCk7XG5cblxuICAgIH1cbn07XG5cbi8qKlxuICogRGVzdHJveXMgdGhlIG1hc2sgc3RhY2suXG4gKlxuICovXG5XZWJHTE1hc2tNYW5hZ2VyLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKClcbntcbiAgICBXZWJHTE1hbmFnZXIucHJvdG90eXBlLmRlc3Ryb3kuY2FsbCh0aGlzKTtcblxuICAgIHRoaXMuc3RlbmNpbE1hc2tTdGFjay5zdGVuY2lsU3RhY2sgPSBudWxsO1xufTtcblxuLyoqXG4gKiBBcHBsaWVzIHRoZSBNYXNrIGFuZCBhZGRzIGl0IHRvIHRoZSBjdXJyZW50IGZpbHRlciBzdGFjay5cbiAqXG4gKiBAcGFyYW0gbWFza0RhdGEge2FueVtdfSBUaGUgbWFzayBkYXRhIHN0cnVjdHVyZSB0byB1c2VcbiAqL1xuV2ViR0xNYXNrTWFuYWdlci5wcm90b3R5cGUucHVzaE1hc2sgPSBmdW5jdGlvbiAobWFza0RhdGEpXG57XG4gICAgdGhpcy5yZW5kZXJlci5zZXRPYmplY3RSZW5kZXJlcih0aGlzLnJlbmRlcmVyLnBsdWdpbnMuZ3JhcGhpY3MpO1xuICAgIFxuICAgIC8vVE9ETyBGSVhcbiAgICBpZiAobWFza0RhdGEuZGlydHkpXG4gICAge1xuICAgICAgICB0aGlzLnJlbmRlcmVyLnBsdWdpbnMuZ3JhcGhpY3MudXBkYXRlR3JhcGhpY3MobWFza0RhdGEsIHRoaXMucmVuZGVyZXIuZ2wpO1xuICAgIH1cblxuICAgIGlmICghbWFza0RhdGEuX3dlYkdMW3RoaXMucmVuZGVyZXIuZ2wuaWRdLmRhdGEubGVuZ3RoKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMucHVzaFN0ZW5jaWwobWFza0RhdGEsIG1hc2tEYXRhLl93ZWJHTFt0aGlzLnJlbmRlcmVyLmdsLmlkXS5kYXRhWzBdKTtcbn07XG5cbi8qKlxuICogUmVtb3ZlcyB0aGUgbGFzdCBmaWx0ZXIgZnJvbSB0aGUgZmlsdGVyIHN0YWNrIGFuZCBkb2Vzbid0IHJldHVybiBpdC5cbiAqXG4gKiBAcGFyYW0gbWFza0RhdGEge2FueVtdfVxuICovXG5XZWJHTE1hc2tNYW5hZ2VyLnByb3RvdHlwZS5wb3BNYXNrID0gZnVuY3Rpb24gKG1hc2tEYXRhKVxue1xuICAgIHRoaXMucmVuZGVyZXIuc2V0T2JqZWN0UmVuZGVyZXIodGhpcy5yZW5kZXJlci5wbHVnaW5zLmdyYXBoaWNzKTtcblxuICAgIHRoaXMucG9wU3RlbmNpbChtYXNrRGF0YSwgbWFza0RhdGEuX3dlYkdMW3RoaXMucmVuZGVyZXIuZ2wuaWRdLmRhdGFbMF0pO1xufTtcblxuIiwiLyoqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcn0gVGhlIHJlbmRlcmVyIHRoaXMgbWFuYWdlciB3b3JrcyBmb3IuXG4gKi9cbmZ1bmN0aW9uIFdlYkdMTWFuYWdlcihyZW5kZXJlcilcbntcbiAgICAvKipcbiAgICAgKiBUaGUgcmVuZGVyZXIgdGhpcyBtYW5hZ2VyIHdvcmtzIGZvci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuV2ViR0xSZW5kZXJlcn1cbiAgICAgKi9cbiAgICB0aGlzLnJlbmRlcmVyID0gcmVuZGVyZXI7XG5cbiAgICB0aGlzLnJlbmRlcmVyLm9uKCdjb250ZXh0JywgdGhpcy5vbkNvbnRleHRDaGFuZ2UsIHRoaXMpO1xufVxuXG5XZWJHTE1hbmFnZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gV2ViR0xNYW5hZ2VyO1xubW9kdWxlLmV4cG9ydHMgPSBXZWJHTE1hbmFnZXI7XG5cbi8qKlxuICogR2VuZXJpYyBtZXRob2QgY2FsbGVkIHdoZW4gdGhlcmUgaXMgYSBXZWJHTCBjb250ZXh0IGNoYW5nZS5cbiAqXG4gKi9cbldlYkdMTWFuYWdlci5wcm90b3R5cGUub25Db250ZXh0Q2hhbmdlID0gZnVuY3Rpb24gKClcbntcblx0Ly8gZG8gc29tZSBjb2RlcyBpbml0IVxufTtcblxuLyoqXG4gKiBHZW5lcmljIGRlc3Ryb3kgbWV0aG9kcyB0byBiZSBvdmVycmlkZGVuIGJ5IHRoZSBzdWJjbGFzc1xuICpcbiAqL1xuV2ViR0xNYW5hZ2VyLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLnJlbmRlcmVyLm9mZignY29udGV4dCcsIHRoaXMub25Db250ZXh0Q2hhbmdlLCB0aGlzKTtcblxuICAgIHRoaXMucmVuZGVyZXIgPSBudWxsO1xufTtcbiIsInZhciBTaGFkZXIgPSByZXF1aXJlKCcuL1NoYWRlcicpO1xuXG4vKipcbiAqIFRoaXMgc2hhZGVyIGlzIHVzZWQgdG8gZHJhdyBjb21wbGV4IHByaW1pdGl2ZSBzaGFwZXMgZm9yIHtAbGluayBQSVhJLkdyYXBoaWNzfS5cbiAqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAZXh0ZW5kcyBQSVhJLlNoYWRlclxuICogQHBhcmFtIHNoYWRlck1hbmFnZXIge1BJWEkuU2hhZGVyTWFuYWdlcn0gVGhlIHdlYmdsIHNoYWRlciBtYW5hZ2VyIHRoaXMgc2hhZGVyIHdvcmtzIGZvci5cbiAqL1xuZnVuY3Rpb24gQ29tcGxleFByaW1pdGl2ZVNoYWRlcihzaGFkZXJNYW5hZ2VyKVxue1xuICAgIFNoYWRlci5jYWxsKHRoaXMsXG4gICAgICAgIHNoYWRlck1hbmFnZXIsXG4gICAgICAgIC8vIHZlcnRleCBzaGFkZXJcbiAgICAgICAgW1xuICAgICAgICAgICAgJ2F0dHJpYnV0ZSB2ZWMyIGFWZXJ0ZXhQb3NpdGlvbjsnLFxuXG4gICAgICAgICAgICAndW5pZm9ybSBtYXQzIHRyYW5zbGF0aW9uTWF0cml4OycsXG4gICAgICAgICAgICAndW5pZm9ybSBtYXQzIHByb2plY3Rpb25NYXRyaXg7JyxcblxuICAgICAgICAgICAgJ3VuaWZvcm0gdmVjMyB0aW50OycsXG4gICAgICAgICAgICAndW5pZm9ybSBmbG9hdCBhbHBoYTsnLFxuICAgICAgICAgICAgJ3VuaWZvcm0gdmVjMyBjb2xvcjsnLFxuXG4gICAgICAgICAgICAndmFyeWluZyB2ZWM0IHZDb2xvcjsnLFxuXG4gICAgICAgICAgICAndm9pZCBtYWluKHZvaWQpeycsXG4gICAgICAgICAgICAnICAgZ2xfUG9zaXRpb24gPSB2ZWM0KChwcm9qZWN0aW9uTWF0cml4ICogdHJhbnNsYXRpb25NYXRyaXggKiB2ZWMzKGFWZXJ0ZXhQb3NpdGlvbiwgMS4wKSkueHksIDAuMCwgMS4wKTsnLFxuICAgICAgICAgICAgJyAgIHZDb2xvciA9IHZlYzQoY29sb3IgKiBhbHBoYSAqIHRpbnQsIGFscGhhKTsnLC8vXCIgKiB2ZWM0KHRpbnQgKiBhbHBoYSwgYWxwaGEpOycsXG4gICAgICAgICAgICAnfSdcbiAgICAgICAgXS5qb2luKCdcXG4nKSxcbiAgICAgICAgLy8gZnJhZ21lbnQgc2hhZGVyXG4gICAgICAgIFtcbiAgICAgICAgICAgICdwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDsnLFxuXG4gICAgICAgICAgICAndmFyeWluZyB2ZWM0IHZDb2xvcjsnLFxuXG4gICAgICAgICAgICAndm9pZCBtYWluKHZvaWQpeycsXG4gICAgICAgICAgICAnICAgZ2xfRnJhZ0NvbG9yID0gdkNvbG9yOycsXG4gICAgICAgICAgICAnfSdcbiAgICAgICAgXS5qb2luKCdcXG4nKSxcbiAgICAgICAgLy8gY3VzdG9tIHVuaWZvcm1zXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRpbnQ6ICAgeyB0eXBlOiAnM2YnLCB2YWx1ZTogWzAsIDAsIDBdIH0sXG4gICAgICAgICAgICBhbHBoYTogIHsgdHlwZTogJzFmJywgdmFsdWU6IDAgfSxcbiAgICAgICAgICAgIGNvbG9yOiAgeyB0eXBlOiAnM2YnLCB2YWx1ZTogWzAsMCwwXSB9LFxuICAgICAgICAgICAgdHJhbnNsYXRpb25NYXRyaXg6IHsgdHlwZTogJ21hdDMnLCB2YWx1ZTogbmV3IEZsb2F0MzJBcnJheSg5KSB9LFxuICAgICAgICAgICAgcHJvamVjdGlvbk1hdHJpeDogeyB0eXBlOiAnbWF0MycsIHZhbHVlOiBuZXcgRmxvYXQzMkFycmF5KDkpIH1cbiAgICAgICAgfSxcbiAgICAgICAgLy8gYXR0cmlidXRlc1xuICAgICAgICB7XG4gICAgICAgICAgICBhVmVydGV4UG9zaXRpb246MFxuICAgICAgICB9XG4gICAgKTtcbn1cblxuQ29tcGxleFByaW1pdGl2ZVNoYWRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFNoYWRlci5wcm90b3R5cGUpO1xuQ29tcGxleFByaW1pdGl2ZVNoYWRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBDb21wbGV4UHJpbWl0aXZlU2hhZGVyO1xubW9kdWxlLmV4cG9ydHMgPSBDb21wbGV4UHJpbWl0aXZlU2hhZGVyO1xuIiwidmFyIFNoYWRlciA9IHJlcXVpcmUoJy4vU2hhZGVyJyk7XG5cbi8qKlxuICogVGhpcyBzaGFkZXIgaXMgdXNlZCB0byBkcmF3IHNpbXBsZSBwcmltaXRpdmUgc2hhcGVzIGZvciB7QGxpbmsgUElYSS5HcmFwaGljc30uXG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQGV4dGVuZHMgUElYSS5TaGFkZXJcbiAqIEBwYXJhbSBzaGFkZXJNYW5hZ2VyIHtTaGFkZXJNYW5hZ2VyfSBUaGUgd2ViZ2wgc2hhZGVyIG1hbmFnZXIgdGhpcyBzaGFkZXIgd29ya3MgZm9yLlxuICovXG5mdW5jdGlvbiBQcmltaXRpdmVTaGFkZXIoc2hhZGVyTWFuYWdlcilcbntcbiAgICBTaGFkZXIuY2FsbCh0aGlzLFxuICAgICAgICBzaGFkZXJNYW5hZ2VyLFxuICAgICAgICAvLyB2ZXJ0ZXggc2hhZGVyXG4gICAgICAgIFtcbiAgICAgICAgICAgICdhdHRyaWJ1dGUgdmVjMiBhVmVydGV4UG9zaXRpb247JyxcbiAgICAgICAgICAgICdhdHRyaWJ1dGUgdmVjNCBhQ29sb3I7JyxcblxuICAgICAgICAgICAgJ3VuaWZvcm0gbWF0MyB0cmFuc2xhdGlvbk1hdHJpeDsnLFxuICAgICAgICAgICAgJ3VuaWZvcm0gbWF0MyBwcm9qZWN0aW9uTWF0cml4OycsXG5cbiAgICAgICAgICAgICd1bmlmb3JtIGZsb2F0IGFscGhhOycsXG4gICAgICAgICAgICAndW5pZm9ybSBmbG9hdCBmbGlwWTsnLFxuICAgICAgICAgICAgJ3VuaWZvcm0gdmVjMyB0aW50OycsXG5cbiAgICAgICAgICAgICd2YXJ5aW5nIHZlYzQgdkNvbG9yOycsXG5cbiAgICAgICAgICAgICd2b2lkIG1haW4odm9pZCl7JyxcbiAgICAgICAgICAgICcgICBnbF9Qb3NpdGlvbiA9IHZlYzQoKHByb2plY3Rpb25NYXRyaXggKiB0cmFuc2xhdGlvbk1hdHJpeCAqIHZlYzMoYVZlcnRleFBvc2l0aW9uLCAxLjApKS54eSwgMC4wLCAxLjApOycsXG4gICAgICAgICAgICAnICAgdkNvbG9yID0gYUNvbG9yICogdmVjNCh0aW50ICogYWxwaGEsIGFscGhhKTsnLFxuICAgICAgICAgICAgJ30nXG4gICAgICAgIF0uam9pbignXFxuJyksXG4gICAgICAgIC8vIGZyYWdtZW50IHNoYWRlclxuICAgICAgICBbXG4gICAgICAgICAgICAncHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7JyxcblxuICAgICAgICAgICAgJ3ZhcnlpbmcgdmVjNCB2Q29sb3I7JyxcblxuICAgICAgICAgICAgJ3ZvaWQgbWFpbih2b2lkKXsnLFxuICAgICAgICAgICAgJyAgIGdsX0ZyYWdDb2xvciA9IHZDb2xvcjsnLFxuICAgICAgICAgICAgJ30nXG4gICAgICAgIF0uam9pbignXFxuJyksXG4gICAgICAgIC8vIGN1c3RvbSB1bmlmb3Jtc1xuICAgICAgICB7XG4gICAgICAgICAgICB0aW50OiAgIHsgdHlwZTogJzNmJywgdmFsdWU6IFswLCAwLCAwXSB9LFxuICAgICAgICAgICAgYWxwaGE6ICB7IHR5cGU6ICcxZicsIHZhbHVlOiAwIH0sXG4gICAgICAgICAgICB0cmFuc2xhdGlvbk1hdHJpeDogeyB0eXBlOiAnbWF0MycsIHZhbHVlOiBuZXcgRmxvYXQzMkFycmF5KDkpIH0sXG4gICAgICAgICAgICBwcm9qZWN0aW9uTWF0cml4OiB7IHR5cGU6ICdtYXQzJywgdmFsdWU6IG5ldyBGbG9hdDMyQXJyYXkoOSkgfVxuICAgICAgICB9LFxuICAgICAgICAvLyBjdXN0b20gYXR0cmlidXRlc1xuICAgICAgICB7XG4gICAgICAgICAgICBhVmVydGV4UG9zaXRpb246MCxcbiAgICAgICAgICAgIGFDb2xvcjowXG4gICAgICAgIH1cbiAgICApO1xufVxuXG5QcmltaXRpdmVTaGFkZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShTaGFkZXIucHJvdG90eXBlKTtcblByaW1pdGl2ZVNoYWRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBQcmltaXRpdmVTaGFkZXI7XG5tb2R1bGUuZXhwb3J0cyA9IFByaW1pdGl2ZVNoYWRlcjtcbiIsIi8qZ2xvYmFsIGNvbnNvbGUgKi9cbnZhciB1dGlscyA9IHJlcXVpcmUoJy4uLy4uLy4uL3V0aWxzJyk7XG5cbi8qKlxuICogQmFzZSBzaGFkZXIgY2xhc3MgZm9yIFBJWEkgbWFuYWdlZCBzaGFkZXJzLlxuICpcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqIEBwYXJhbSBzaGFkZXJNYW5hZ2VyIHtQSVhJLlNoYWRlck1hbmFnZXJ9IFRoZSB3ZWJnbCBzaGFkZXIgbWFuYWdlciB0aGlzIHNoYWRlciB3b3JrcyBmb3IuXG4gKiBAcGFyYW0gW3ZlcnRleFNyY10ge3N0cmluZ30gVGhlIHNvdXJjZSBvZiB0aGUgdmVydGV4IHNoYWRlci5cbiAqIEBwYXJhbSBbZnJhZ21lbnRTcmNdIHtzdHJpbmd9IFRoZSBzb3VyY2Ugb2YgdGhlIGZyYWdtZW50IHNoYWRlci5cbiAqIEBwYXJhbSBbdW5pZm9ybXNdIHtvYmplY3R9IFVuaWZvcm1zIGZvciB0aGlzIHNoYWRlci5cbiAqIEBwYXJhbSBbYXR0cmlidXRlc10ge29iamVjdH0gQXR0cmlidXRlcyBmb3IgdGhpcyBzaGFkZXIuXG4gKi9cbmZ1bmN0aW9uIFNoYWRlcihzaGFkZXJNYW5hZ2VyLCB2ZXJ0ZXhTcmMsIGZyYWdtZW50U3JjLCB1bmlmb3JtcywgYXR0cmlidXRlcylcbntcbiAgICBpZiAoIXZlcnRleFNyYyB8fCAhZnJhZ21lbnRTcmMpXG4gICAge1xuICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdQaXhpLmpzIEVycm9yLiBTaGFkZXIgcmVxdWlyZXMgdmVydGV4U3JjIGFuZCBmcmFnbWVudFNyYycpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEEgdW5pcXVlIGlkXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEByZWFkb25seVxuICAgICAqL1xuICAgIHRoaXMudWlkID0gdXRpbHMudWlkKCk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgY3VycmVudCBXZWJHTCBkcmF3aW5nIGNvbnRleHRcbiAgICAgKiBAbWVtYmVyIHtXZWJHTFJlbmRlcmluZ0NvbnRleHR9XG4gICAgICogQHJlYWRvbmx5XG4gICAgICovXG4gICAgdGhpcy5nbCA9IHNoYWRlck1hbmFnZXIucmVuZGVyZXIuZ2w7XG5cbiAgICAvL1RPRE8gbWF5YmUgd2Ugc2hvdWxkIHBhc3MgcmVuZGVyZXIgcmF0aGVyIHRoYW4gc2hhZGVyIG1hbmdlcj8/IGZvb2QgZm9yIHRob3VnaHQuLlxuICAgIHRoaXMuc2hhZGVyTWFuYWdlciA9IHNoYWRlck1hbmFnZXI7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgV2ViR0wgcHJvZ3JhbS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1dlYkdMUHJvZ3JhbX1cbiAgICAgKiBAcmVhZG9ubHlcbiAgICAgKi9cbiAgICB0aGlzLnByb2dyYW0gPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHVuaWZvcm1zIGFzIGFuIG9iamVjdFxuICAgICAqIEBtZW1iZXIge29iamVjdH1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMudW5pZm9ybXMgPSB1bmlmb3JtcyB8fCB7fTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBhdHRyaWJ1dGVzIGFzIGFuIG9iamVjdFxuICAgICAqIEBtZW1iZXIge29iamVjdH1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuYXR0cmlidXRlcyA9IGF0dHJpYnV0ZXMgfHwge307XG5cbiAgICAvKipcbiAgICAgKiBJbnRlcm5hbCB0ZXh0dXJlIGNvdW50ZXJcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLnRleHR1cmVDb3VudCA9IDE7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgdmVydGV4IHNoYWRlciBhcyBhbiBhcnJheSBvZiBzdHJpbmdzXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtzdHJpbmd9XG4gICAgICovXG4gICAgdGhpcy52ZXJ0ZXhTcmMgPSB2ZXJ0ZXhTcmM7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgZnJhZ21lbnQgc2hhZGVyIGFzIGFuIGFycmF5IG9mIHN0cmluZ3NcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge3N0cmluZ31cbiAgICAgKi9cbiAgICB0aGlzLmZyYWdtZW50U3JjID0gZnJhZ21lbnRTcmM7XG5cbiAgICB0aGlzLmluaXQoKTtcbn1cblxuU2hhZGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFNoYWRlcjtcbm1vZHVsZS5leHBvcnRzID0gU2hhZGVyO1xuXG4vKipcbiAqIENyZWF0ZXMgdGhlIHNoYWRlciBhbmQgdXNlcyBpdFxuICpcbiAqL1xuU2hhZGVyLnByb3RvdHlwZS5pbml0ID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLmNvbXBpbGUoKTtcblxuICAgIHRoaXMuZ2wudXNlUHJvZ3JhbSh0aGlzLnByb2dyYW0pO1xuXG4gICAgdGhpcy5jYWNoZVVuaWZvcm1Mb2NhdGlvbnMoT2JqZWN0LmtleXModGhpcy51bmlmb3JtcykpO1xuICAgIHRoaXMuY2FjaGVBdHRyaWJ1dGVMb2NhdGlvbnMoT2JqZWN0LmtleXModGhpcy5hdHRyaWJ1dGVzKSk7XG59O1xuXG4vKipcbiAqIENhY2hlcyB0aGUgbG9jYXRpb25zIG9mIHRoZSB1bmlmb3JtIGZvciByZXVzZS5cbiAqXG4gKiBAcGFyYW0ga2V5cyB7c3RyaW5nfSB0aGUgdW5pZm9ybXMgdG8gY2FjaGVcbiAqL1xuU2hhZGVyLnByb3RvdHlwZS5jYWNoZVVuaWZvcm1Mb2NhdGlvbnMgPSBmdW5jdGlvbiAoa2V5cylcbntcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyArK2kpXG4gICAge1xuICAgICAgICB0aGlzLnVuaWZvcm1zW2tleXNbaV1dLl9sb2NhdGlvbiA9IHRoaXMuZ2wuZ2V0VW5pZm9ybUxvY2F0aW9uKHRoaXMucHJvZ3JhbSwga2V5c1tpXSk7XG4gICAgfVxufTtcblxuLyoqXG4gKiBDYWNoZXMgdGhlIGxvY2F0aW9ucyBvZiB0aGUgYXR0cmlidXRlIGZvciByZXVzZS5cbiAqXG4gKiBAcGFyYW0ga2V5cyB7c3RyaW5nfSB0aGUgYXR0cmlidXRlcyB0byBjYWNoZVxuICovXG5TaGFkZXIucHJvdG90eXBlLmNhY2hlQXR0cmlidXRlTG9jYXRpb25zID0gZnVuY3Rpb24gKGtleXMpXG57XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgKytpKVxuICAgIHtcbiAgICAgICAgdGhpcy5hdHRyaWJ1dGVzW2tleXNbaV1dID0gdGhpcy5nbC5nZXRBdHRyaWJMb2NhdGlvbih0aGlzLnByb2dyYW0sIGtleXNbaV0pO1xuICAgIH1cblxuICAgIC8vIFRPRE86IENoZWNrIGlmIHRoaXMgaXMgbmVlZGVkIGFueW1vcmUuLi5cblxuICAgIC8vIEJlZ2luIHdvcnN0IGhhY2sgZXZhIC8vXG5cbiAgICAvLyBXSFk/Pz8gT05MWSBvbiBteSBjaHJvbWUgcGl4ZWwgdGhlIGxpbmUgYWJvdmUgcmV0dXJucyAtMSB3aGVuIHVzaW5nIGZpbHRlcnM/XG4gICAgLy8gbWF5YmUgaXRzIHNvbWV0aGluZyB0byBkbyB3aXRoIHRoZSBjdXJyZW50IHN0YXRlIG9mIHRoZSBnbCBjb250ZXh0LlxuICAgIC8vIEknbSBjb252aW5jZWQgdGhpcyBpcyBhIGJ1ZyBpbiB0aGUgY2hyb21lIGJyb3dzZXIgYXMgdGhlcmUgaXMgTk8gcmVhc29uIHdoeSB0aGlzIHNob3VsZCBiZSByZXR1cm5pbmcgLTEgZXNwZWNpYWxseSBhcyBpdCBvbmx5IG1hbmlmZXN0cyBvbiBteSBjaHJvbWUgcGl4ZWxcbiAgICAvLyBJZiB0aGVyZXMgYW55IHdlYkdMIHBlb3BsZSB0aGF0IGtub3cgd2h5IGNvdWxkIGhhcHBlbiBwbGVhc2UgaGVscCA6KVxuICAgIC8vIGlmICh0aGlzLmF0dHJpYnV0ZXMuYUNvbG9yID09PSAtMSl7XG4gICAgLy8gICAgIHRoaXMuYXR0cmlidXRlcy5hQ29sb3IgPSAyO1xuICAgIC8vIH1cblxuICAgIC8vIEVuZCB3b3JzdCBoYWNrIGV2YSAvL1xufTtcblxuLyoqXG4gKiBBdHRhY2hlcyB0aGUgc2hhZGVycyBhbmQgY3JlYXRlcyB0aGUgcHJvZ3JhbS5cbiAqXG4gKiBAcmV0dXJuIHtXZWJHTFByb2dyYW19XG4gKi9cblNoYWRlci5wcm90b3R5cGUuY29tcGlsZSA9IGZ1bmN0aW9uICgpXG57XG4gICAgdmFyIGdsID0gdGhpcy5nbDtcblxuICAgIHZhciBnbFZlcnRTaGFkZXIgPSB0aGlzLl9nbENvbXBpbGUoZ2wuVkVSVEVYX1NIQURFUiwgdGhpcy52ZXJ0ZXhTcmMpO1xuICAgIHZhciBnbEZyYWdTaGFkZXIgPSB0aGlzLl9nbENvbXBpbGUoZ2wuRlJBR01FTlRfU0hBREVSLCB0aGlzLmZyYWdtZW50U3JjKTtcblxuICAgIHZhciBwcm9ncmFtID0gZ2wuY3JlYXRlUHJvZ3JhbSgpO1xuXG4gICAgZ2wuYXR0YWNoU2hhZGVyKHByb2dyYW0sIGdsVmVydFNoYWRlcik7XG4gICAgZ2wuYXR0YWNoU2hhZGVyKHByb2dyYW0sIGdsRnJhZ1NoYWRlcik7XG4gICAgZ2wubGlua1Byb2dyYW0ocHJvZ3JhbSk7XG5cbiAgICAvLyBpZiBsaW5raW5nIGZhaWxzLCB0aGVuIGxvZyBhbmQgY2xlYW51cFxuICAgIGlmICghZ2wuZ2V0UHJvZ3JhbVBhcmFtZXRlcihwcm9ncmFtLCBnbC5MSU5LX1NUQVRVUykpXG4gICAge1xuICAgICAgICBjb25zb2xlLmVycm9yKCdQaXhpLmpzIEVycm9yOiBDb3VsZCBub3QgaW5pdGlhbGl6ZSBzaGFkZXIuJyk7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ2dsLlZBTElEQVRFX1NUQVRVUycsIGdsLmdldFByb2dyYW1QYXJhbWV0ZXIocHJvZ3JhbSwgZ2wuVkFMSURBVEVfU1RBVFVTKSk7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ2dsLmdldEVycm9yKCknLCBnbC5nZXRFcnJvcigpKTtcblxuICAgICAgICAvLyBpZiB0aGVyZSBpcyBhIHByb2dyYW0gaW5mbyBsb2csIGxvZyBpdFxuICAgICAgICBpZiAoZ2wuZ2V0UHJvZ3JhbUluZm9Mb2cocHJvZ3JhbSkgIT09ICcnKVxuICAgICAgICB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ1BpeGkuanMgV2FybmluZzogZ2wuZ2V0UHJvZ3JhbUluZm9Mb2coKScsIGdsLmdldFByb2dyYW1JbmZvTG9nKHByb2dyYW0pKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGdsLmRlbGV0ZVByb2dyYW0ocHJvZ3JhbSk7XG4gICAgICAgIHByb2dyYW0gPSBudWxsO1xuICAgIH1cblxuICAgIC8vIGNsZWFuIHVwIHNvbWUgc2hhZGVyc1xuICAgIGdsLmRlbGV0ZVNoYWRlcihnbFZlcnRTaGFkZXIpO1xuICAgIGdsLmRlbGV0ZVNoYWRlcihnbEZyYWdTaGFkZXIpO1xuXG4gICAgcmV0dXJuICh0aGlzLnByb2dyYW0gPSBwcm9ncmFtKTtcbn07XG5cbi8qKlxuKiBBZGRzIGEgbmV3IHVuaWZvcm1cbipcbiogQHBhcmFtIHVuaWZvcm0ge29iamVjdH0gdGhlIG5ldyB1bmlmb3JtIHRvIGF0dGFjaFxuKi9cblNoYWRlci5wcm90b3R5cGUuc3luY1VuaWZvcm0gPSBmdW5jdGlvbiAodW5pZm9ybSlcbntcbiAgICB2YXIgbG9jYXRpb24gPSB1bmlmb3JtLl9sb2NhdGlvbixcbiAgICAgICAgdmFsdWUgPSB1bmlmb3JtLnZhbHVlLFxuICAgICAgICBnbCA9IHRoaXMuZ2wsXG4gICAgICAgIGksIGlsO1xuXG4gICAgc3dpdGNoICh1bmlmb3JtLnR5cGUpXG4gICAge1xuICAgICAgICBjYXNlICdiJzpcbiAgICAgICAgY2FzZSAnYm9vbCc6XG4gICAgICAgIGNhc2UgJ2Jvb2xlYW4nOlxuICAgICAgICAgICAgZ2wudW5pZm9ybTFpKGxvY2F0aW9uLCB2YWx1ZSA/IDEgOiAwKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIC8vIHNpbmdsZSBpbnQgdmFsdWVcbiAgICAgICAgY2FzZSAnaSc6XG4gICAgICAgIGNhc2UgJzFpJzpcbiAgICAgICAgICAgIGdsLnVuaWZvcm0xaShsb2NhdGlvbiwgdmFsdWUpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLy8gc2luZ2xlIGZsb2F0IHZhbHVlXG4gICAgICAgIGNhc2UgJ2YnOlxuICAgICAgICBjYXNlICcxZic6XG4gICAgICAgICAgICBnbC51bmlmb3JtMWYobG9jYXRpb24sIHZhbHVlKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIC8vIEZsb2F0MzJBcnJheSgyKSBvciBKUyBBcnJyYXlcbiAgICAgICAgY2FzZSAnMmYnOlxuICAgICAgICAgICAgZ2wudW5pZm9ybTJmKGxvY2F0aW9uLCB2YWx1ZVswXSwgdmFsdWVbMV0pO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLy8gRmxvYXQzMkFycmF5KDMpIG9yIEpTIEFycnJheVxuICAgICAgICBjYXNlICczZic6XG4gICAgICAgICAgICBnbC51bmlmb3JtM2YobG9jYXRpb24sIHZhbHVlWzBdLCB2YWx1ZVsxXSwgdmFsdWVbMl0pO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLy8gRmxvYXQzMkFycmF5KDQpIG9yIEpTIEFycnJheVxuICAgICAgICBjYXNlICc0Zic6XG4gICAgICAgICAgICBnbC51bmlmb3JtNGYobG9jYXRpb24sIHZhbHVlWzBdLCB2YWx1ZVsxXSwgdmFsdWVbMl0sIHZhbHVlWzNdKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIC8vIGEgMkQgUG9pbnQgb2JqZWN0XG4gICAgICAgIGNhc2UgJ3YyJzpcbiAgICAgICAgICAgIGdsLnVuaWZvcm0yZihsb2NhdGlvbiwgdmFsdWUueCwgdmFsdWUueSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAvLyBhIDNEIFBvaW50IG9iamVjdFxuICAgICAgICBjYXNlICd2Myc6XG4gICAgICAgICAgICBnbC51bmlmb3JtM2YobG9jYXRpb24sIHZhbHVlLngsIHZhbHVlLnksIHZhbHVlLnopO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLy8gYSA0RCBQb2ludCBvYmplY3RcbiAgICAgICAgY2FzZSAndjQnOlxuICAgICAgICAgICAgZ2wudW5pZm9ybTRmKGxvY2F0aW9uLCB2YWx1ZS54LCB2YWx1ZS55LCB2YWx1ZS56LCB2YWx1ZS53KTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIC8vIEludDMyQXJyYXkgb3IgSlMgQXJyYXlcbiAgICAgICAgY2FzZSAnMWl2JzpcbiAgICAgICAgICAgIGdsLnVuaWZvcm0xaXYobG9jYXRpb24sIHZhbHVlKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIC8vIEludDMyQXJyYXkgb3IgSlMgQXJyYXlcbiAgICAgICAgY2FzZSAnMml2JzpcbiAgICAgICAgICAgIGdsLnVuaWZvcm0yaXYobG9jYXRpb24sIHZhbHVlKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIC8vIEludDMyQXJyYXkgb3IgSlMgQXJyYXlcbiAgICAgICAgY2FzZSAnM2l2JzpcbiAgICAgICAgICAgIGdsLnVuaWZvcm0zaXYobG9jYXRpb24sIHZhbHVlKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIC8vIEludDMyQXJyYXkgb3IgSlMgQXJyYXlcbiAgICAgICAgY2FzZSAnNGl2JzpcbiAgICAgICAgICAgIGdsLnVuaWZvcm00aXYobG9jYXRpb24sIHZhbHVlKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIC8vIEZsb2F0MzJBcnJheSBvciBKUyBBcnJheVxuICAgICAgICBjYXNlICcxZnYnOlxuICAgICAgICAgICAgZ2wudW5pZm9ybTFmdihsb2NhdGlvbiwgdmFsdWUpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLy8gRmxvYXQzMkFycmF5IG9yIEpTIEFycmF5XG4gICAgICAgIGNhc2UgJzJmdic6XG4gICAgICAgICAgICBnbC51bmlmb3JtMmZ2KGxvY2F0aW9uLCB2YWx1ZSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAvLyBGbG9hdDMyQXJyYXkgb3IgSlMgQXJyYXlcbiAgICAgICAgY2FzZSAnM2Z2JzpcbiAgICAgICAgICAgIGdsLnVuaWZvcm0zZnYobG9jYXRpb24sIHZhbHVlKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIC8vIEZsb2F0MzJBcnJheSBvciBKUyBBcnJheVxuICAgICAgICBjYXNlICc0ZnYnOlxuICAgICAgICAgICAgZ2wudW5pZm9ybTRmdihsb2NhdGlvbiwgdmFsdWUpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLy8gRmxvYXQzMkFycmF5IG9yIEpTIEFycmF5XG4gICAgICAgIGNhc2UgJ20yJzpcbiAgICAgICAgY2FzZSAnbWF0Mic6XG4gICAgICAgIGNhc2UgJ01hdHJpeDJmdic6XG4gICAgICAgICAgICBnbC51bmlmb3JtTWF0cml4MmZ2KGxvY2F0aW9uLCB1bmlmb3JtLnRyYW5zcG9zZSwgdmFsdWUpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLy8gRmxvYXQzMkFycmF5IG9yIEpTIEFycmF5XG4gICAgICAgIGNhc2UgJ20zJzpcbiAgICAgICAgY2FzZSAnbWF0Myc6XG4gICAgICAgIGNhc2UgJ01hdHJpeDNmdic6XG5cbiAgICAgICAgICAgIGdsLnVuaWZvcm1NYXRyaXgzZnYobG9jYXRpb24sIHVuaWZvcm0udHJhbnNwb3NlLCB2YWx1ZSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAvLyBGbG9hdDMyQXJyYXkgb3IgSlMgQXJyYXlcbiAgICAgICAgY2FzZSAnbTQnOlxuICAgICAgICBjYXNlICdtYXQ0JzpcbiAgICAgICAgY2FzZSAnTWF0cml4NGZ2JzpcbiAgICAgICAgICAgIGdsLnVuaWZvcm1NYXRyaXg0ZnYobG9jYXRpb24sIHVuaWZvcm0udHJhbnNwb3NlLCB2YWx1ZSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAvLyBhIENvbG9yIFZhbHVlXG4gICAgICAgIGNhc2UgJ2MnOlxuICAgICAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdmFsdWUgPSB1dGlscy5oZXgycmdiKHZhbHVlKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZ2wudW5pZm9ybTNmKGxvY2F0aW9uLCB2YWx1ZVswXSwgdmFsdWVbMV0sIHZhbHVlWzJdKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIC8vIGZsYXQgYXJyYXkgb2YgaW50ZWdlcnMgKEpTIG9yIHR5cGVkIGFycmF5KVxuICAgICAgICBjYXNlICdpdjEnOlxuICAgICAgICAgICAgZ2wudW5pZm9ybTFpdihsb2NhdGlvbiwgdmFsdWUpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLy8gZmxhdCBhcnJheSBvZiBpbnRlZ2VycyB3aXRoIDMgeCBOIHNpemUgKEpTIG9yIHR5cGVkIGFycmF5KVxuICAgICAgICBjYXNlICdpdic6XG4gICAgICAgICAgICBnbC51bmlmb3JtM2l2KGxvY2F0aW9uLCB2YWx1ZSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAvLyBmbGF0IGFycmF5IG9mIGZsb2F0cyAoSlMgb3IgdHlwZWQgYXJyYXkpXG4gICAgICAgIGNhc2UgJ2Z2MSc6XG4gICAgICAgICAgICBnbC51bmlmb3JtMWZ2KGxvY2F0aW9uLCB2YWx1ZSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAvLyBmbGF0IGFycmF5IG9mIGZsb2F0cyB3aXRoIDMgeCBOIHNpemUgKEpTIG9yIHR5cGVkIGFycmF5KVxuICAgICAgICBjYXNlICdmdic6XG4gICAgICAgICAgICBnbC51bmlmb3JtM2Z2KGxvY2F0aW9uLCB2YWx1ZSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAvLyBhcnJheSBvZiAyRCBQb2ludCBvYmplY3RzXG4gICAgICAgIGNhc2UgJ3Yydic6XG4gICAgICAgICAgICBpZiAoIXVuaWZvcm0uX2FycmF5KVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHVuaWZvcm0uX2FycmF5ID0gbmV3IEZsb2F0MzJBcnJheSgyICogdmFsdWUubGVuZ3RoKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZm9yIChpID0gMCwgaWwgPSB2YWx1ZS5sZW5ndGg7IGkgPCBpbDsgKytpKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHVuaWZvcm0uX2FycmF5W2kgKiAyXSAgICAgICA9IHZhbHVlW2ldLng7XG4gICAgICAgICAgICAgICAgdW5pZm9ybS5fYXJyYXlbaSAqIDIgKyAxXSAgID0gdmFsdWVbaV0ueTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZ2wudW5pZm9ybTJmdihsb2NhdGlvbiwgdW5pZm9ybS5fYXJyYXkpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLy8gYXJyYXkgb2YgM0QgUG9pbnQgb2JqZWN0c1xuICAgICAgICBjYXNlICd2M3YnOlxuICAgICAgICAgICAgaWYgKCF1bmlmb3JtLl9hcnJheSlcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB1bmlmb3JtLl9hcnJheSA9IG5ldyBGbG9hdDMyQXJyYXkoMyAqIHZhbHVlLmxlbmd0aCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGZvciAoaSA9IDAsIGlsID0gdmFsdWUubGVuZ3RoOyBpIDwgaWw7ICsraSlcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB1bmlmb3JtLl9hcnJheVtpICogM10gICAgICAgPSB2YWx1ZVtpXS54O1xuICAgICAgICAgICAgICAgIHVuaWZvcm0uX2FycmF5W2kgKiAzICsgMV0gICA9IHZhbHVlW2ldLnk7XG4gICAgICAgICAgICAgICAgdW5pZm9ybS5fYXJyYXlbaSAqIDMgKyAyXSAgID0gdmFsdWVbaV0uejtcblxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBnbC51bmlmb3JtM2Z2KGxvY2F0aW9uLCB1bmlmb3JtLl9hcnJheSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAvLyBhcnJheSBvZiA0RCBQb2ludCBvYmplY3RzXG4gICAgICAgIGNhc2UgJ3Y0dic6XG4gICAgICAgICAgICBpZiAoIXVuaWZvcm0uX2FycmF5KVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHVuaWZvcm0uX2FycmF5ID0gbmV3IEZsb2F0MzJBcnJheSg0ICogdmFsdWUubGVuZ3RoKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZm9yIChpID0gMCwgaWwgPSB2YWx1ZS5sZW5ndGg7IGkgPCBpbDsgKytpKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHVuaWZvcm0uX2FycmF5W2kgKiA0XSAgICAgICA9IHZhbHVlW2ldLng7XG4gICAgICAgICAgICAgICAgdW5pZm9ybS5fYXJyYXlbaSAqIDQgKyAxXSAgID0gdmFsdWVbaV0ueTtcbiAgICAgICAgICAgICAgICB1bmlmb3JtLl9hcnJheVtpICogNCArIDJdICAgPSB2YWx1ZVtpXS56O1xuICAgICAgICAgICAgICAgIHVuaWZvcm0uX2FycmF5W2kgKiA0ICsgM10gICA9IHZhbHVlW2ldLnc7XG5cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZ2wudW5pZm9ybTRmdihsb2NhdGlvbiwgdW5pZm9ybS5fYXJyYXkpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLy8gUElYSS5UZXh0dXJlXG4gICAgICAgIGNhc2UgJ3QnOlxuICAgICAgICBjYXNlICdzYW1wbGVyMkQnOlxuXG4gICAgICAgICAgICBpZiAoIXVuaWZvcm0udmFsdWUgfHwgIXVuaWZvcm0udmFsdWUuYmFzZVRleHR1cmUuaGFzTG9hZGVkKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBhY3RpdmF0ZSB0aGlzIHRleHR1cmVcbiAgICAgICAgICAgIGdsLmFjdGl2ZVRleHR1cmUoZ2xbJ1RFWFRVUkUnICsgdGhpcy50ZXh0dXJlQ291bnRdKTtcblxuICAgICAgICAgICAgdmFyIHRleHR1cmUgPSB1bmlmb3JtLnZhbHVlLmJhc2VUZXh0dXJlLl9nbFRleHR1cmVzW2dsLmlkXTtcblxuICAgICAgICAgICAgaWYgKCF0ZXh0dXJlKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHRoaXMuaW5pdFNhbXBsZXIyRCh1bmlmb3JtKTtcblxuICAgICAgICAgICAgICAgIC8vIHNldCB0aGUgdGV4dHVyIHRvIHRoZSBuZXdseSBjcmVhdGVkIG9uZS4uXG4gICAgICAgICAgICAgICAgdGV4dHVyZSA9IHVuaWZvcm0udmFsdWUuYmFzZVRleHR1cmUuX2dsVGV4dHVyZXNbZ2wuaWRdO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBiaW5kIHRoZSB0ZXh0dXJlXG4gICAgICAgICAgICBnbC5iaW5kVGV4dHVyZShnbC5URVhUVVJFXzJELCB0ZXh0dXJlKTtcblxuICAgICAgICAgICAgLy8gc2V0IHVuaWZvcm0gdG8gdGV4dHVyZSBpbmRleFxuICAgICAgICAgICAgZ2wudW5pZm9ybTFpKHVuaWZvcm0uX2xvY2F0aW9uLCB0aGlzLnRleHR1cmVDb3VudCk7XG5cbiAgICAgICAgICAgIC8vIGluY3JlbWVudCBuZXh0IHRleHR1cmUgaWRcbiAgICAgICAgICAgIHRoaXMudGV4dHVyZUNvdW50Kys7XG5cbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ1BpeGkuanMgU2hhZGVyIFdhcm5pbmc6IFVua25vd24gdW5pZm9ybSB0eXBlOiAnICsgdW5pZm9ybS50eXBlKTtcbiAgICB9XG59O1xuXG4vKipcbiAqIFVwZGF0ZXMgdGhlIHNoYWRlciB1bmlmb3JtIHZhbHVlcy5cbiAqXG4gKi9cblNoYWRlci5wcm90b3R5cGUuc3luY1VuaWZvcm1zID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLnRleHR1cmVDb3VudCA9IDE7XG5cbiAgICBmb3IgKHZhciBrZXkgaW4gdGhpcy51bmlmb3JtcylcbiAgICB7XG4gICAgICAgIHRoaXMuc3luY1VuaWZvcm0odGhpcy51bmlmb3Jtc1trZXldKTtcbiAgICB9XG59O1xuXG5cbi8qKlxuICogSW5pdGlhbGlzZXMgYSBTYW1wbGVyMkQgdW5pZm9ybSAod2hpY2ggbWF5IG9ubHkgYmUgYXZhaWxhYmxlIGxhdGVyIG9uIGFmdGVyIGluaXRVbmlmb3JtcyBvbmNlIHRoZSB0ZXh0dXJlIGhhcyBsb2FkZWQpXG4gKlxuICovXG5TaGFkZXIucHJvdG90eXBlLmluaXRTYW1wbGVyMkQgPSBmdW5jdGlvbiAodW5pZm9ybSlcbntcbiAgICB2YXIgZ2wgPSB0aGlzLmdsO1xuXG4gICAgdmFyIHRleHR1cmUgPSB1bmlmb3JtLnZhbHVlLmJhc2VUZXh0dXJlO1xuXG4gICAgaWYoIXRleHR1cmUuaGFzTG9hZGVkKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuXG5cbiAgICBpZiAodW5pZm9ybS50ZXh0dXJlRGF0YSlcbiAgICB7XG5cbiAgICAgICAgLy9UT0RPIG1vdmUgdGhpcy4uLlxuICAgICAgICB2YXIgZGF0YSA9IHVuaWZvcm0udGV4dHVyZURhdGE7XG5cbiAgICAgICAgdGV4dHVyZS5fZ2xUZXh0dXJlc1tnbC5pZF0gPSBnbC5jcmVhdGVUZXh0dXJlKCk7XG5cbiAgICAgICAgZ2wuYmluZFRleHR1cmUoZ2wuVEVYVFVSRV8yRCwgdGV4dHVyZS5fZ2xUZXh0dXJlc1tnbC5pZF0pO1xuXG4gICAgICAgIGdsLnBpeGVsU3RvcmVpKGdsLlVOUEFDS19QUkVNVUxUSVBMWV9BTFBIQV9XRUJHTCwgdGV4dHVyZS5wcmVtdWx0aXBsaWVkQWxwaGEpO1xuICAgICAgICAvLyBHTFRleHR1cmUgPSBtYWcgbGluZWFyLCBtaW4gbGluZWFyX21pcG1hcF9saW5lYXIsIHdyYXAgcmVwZWF0ICsgZ2wuZ2VuZXJhdGVNaXBtYXAoZ2wuVEVYVFVSRV8yRCk7XG4gICAgICAgIC8vIEdMVGV4dHVyZUxpbmVhciA9IG1hZy9taW4gbGluZWFyLCB3cmFwIGNsYW1wXG4gICAgICAgIC8vIEdMVGV4dHVyZU5lYXJlc3RSZXBlYXQgPSBtYWcvbWluIE5FQVJFU1QsIHdyYXAgcmVwZWF0XG4gICAgICAgIC8vIEdMVGV4dHVyZU5lYXJlc3QgPSBtYWcvbWluIG5lYXJlc3QsIHdyYXAgY2xhbXBcbiAgICAgICAgLy8gQXVkaW9UZXh0dXJlID0gd2hhdGV2ZXIgKyBsdW1pbmFuY2UgKyB3aWR0aCA1MTIsIGhlaWdodCAyLCBib3JkZXIgMFxuICAgICAgICAvLyBLZXlUZXh0dXJlID0gd2hhdGV2ZXIgKyBsdW1pbmFuY2UgKyB3aWR0aCAyNTYsIGhlaWdodCAyLCBib3JkZXIgMFxuXG4gICAgICAgIC8vICBtYWdGaWx0ZXIgY2FuIGJlOiBnbC5MSU5FQVIsIGdsLkxJTkVBUl9NSVBNQVBfTElORUFSIG9yIGdsLk5FQVJFU1RcbiAgICAgICAgLy8gIHdyYXBTL1QgY2FuIGJlOiBnbC5DTEFNUF9UT19FREdFIG9yIGdsLlJFUEVBVFxuXG4gICAgICAgIGdsLnRleEltYWdlMkQoZ2wuVEVYVFVSRV8yRCwgMCwgZGF0YS5sdW1pbmFuY2UgPyBnbC5MVU1JTkFOQ0UgOiBnbC5SR0JBLCBnbC5SR0JBLCBnbC5VTlNJR05FRF9CWVRFLCB0ZXh0dXJlLnNvdXJjZSk7XG5cbiAgICAgICAgZ2wudGV4UGFyYW1ldGVyaShnbC5URVhUVVJFXzJELCBnbC5URVhUVVJFX01BR19GSUxURVIsIGRhdGEubWFnRmlsdGVyID8gZGF0YS5tYWdGaWx0ZXIgOiBnbC5MSU5FQVIgKTtcbiAgICAgICAgZ2wudGV4UGFyYW1ldGVyaShnbC5URVhUVVJFXzJELCBnbC5URVhUVVJFX01JTl9GSUxURVIsIGRhdGEud3JhcFMgPyBkYXRhLndyYXBTIDogZ2wuQ0xBTVBfVE9fRURHRSApO1xuXG4gICAgICAgIGdsLnRleFBhcmFtZXRlcmkoZ2wuVEVYVFVSRV8yRCwgZ2wuVEVYVFVSRV9XUkFQX1QsIGRhdGEud3JhcFMgPyBkYXRhLndyYXBTIDogZ2wuQ0xBTVBfVE9fRURHRSk7XG4gICAgICAgIGdsLnRleFBhcmFtZXRlcmkoZ2wuVEVYVFVSRV8yRCwgZ2wuVEVYVFVSRV9XUkFQX1MsIGRhdGEud3JhcFQgPyBkYXRhLndyYXBUIDogZ2wuQ0xBTVBfVE9fRURHRSk7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHRoaXMuc2hhZGVyTWFuYWdlci5yZW5kZXJlci51cGRhdGVUZXh0dXJlKHRleHR1cmUpO1xuICAgIH1cbn07XG5cbi8qKlxuICogRGVzdHJveXMgdGhlIHNoYWRlci5cbiAqXG4gKi9cblNoYWRlci5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy5nbC5kZWxldGVQcm9ncmFtKHRoaXMucHJvZ3JhbSk7XG5cbiAgICB0aGlzLmdsID0gbnVsbDtcbiAgICB0aGlzLnVuaWZvcm1zID0gbnVsbDtcbiAgICB0aGlzLmF0dHJpYnV0ZXMgPSBudWxsO1xuXG4gICAgdGhpcy52ZXJ0ZXhTcmMgPSBudWxsO1xuICAgIHRoaXMuZnJhZ21lbnRTcmMgPSBudWxsO1xufTtcblxuU2hhZGVyLnByb3RvdHlwZS5fZ2xDb21waWxlID0gZnVuY3Rpb24gKHR5cGUsIHNyYylcbntcbiAgICB2YXIgc2hhZGVyID0gdGhpcy5nbC5jcmVhdGVTaGFkZXIodHlwZSk7XG5cbiAgICB0aGlzLmdsLnNoYWRlclNvdXJjZShzaGFkZXIsIHNyYyk7XG4gICAgdGhpcy5nbC5jb21waWxlU2hhZGVyKHNoYWRlcik7XG5cbiAgICBpZiAoIXRoaXMuZ2wuZ2V0U2hhZGVyUGFyYW1ldGVyKHNoYWRlciwgdGhpcy5nbC5DT01QSUxFX1NUQVRVUykpXG4gICAge1xuICAgICAgICBjb25zb2xlLmxvZyh0aGlzLmdsLmdldFNoYWRlckluZm9Mb2coc2hhZGVyKSk7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHJldHVybiBzaGFkZXI7XG59O1xuIiwidmFyIFNoYWRlciA9IHJlcXVpcmUoJy4vU2hhZGVyJyk7XG5cbi8qKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQGV4dGVuZHMgUElYSS5TaGFkZXJcbiAqIEBwYXJhbSBzaGFkZXJNYW5hZ2VyIHtQSVhJLlNoYWRlck1hbmFnZXJ9IFRoZSB3ZWJnbCBzaGFkZXIgbWFuYWdlciB0aGlzIHNoYWRlciB3b3JrcyBmb3IuXG4gKiBAcGFyYW0gW3ZlcnRleFNyY10ge3N0cmluZ30gVGhlIHNvdXJjZSBvZiB0aGUgdmVydGV4IHNoYWRlci5cbiAqIEBwYXJhbSBbZnJhZ21lbnRTcmNdIHtzdHJpbmd9IFRoZSBzb3VyY2Ugb2YgdGhlIGZyYWdtZW50IHNoYWRlci5cbiAqIEBwYXJhbSBbY3VzdG9tVW5pZm9ybXNdIHtvYmplY3R9IEN1c3RvbSB1bmlmb3JtcyB0byB1c2UgdG8gYXVnbWVudCB0aGUgYnVpbHQtaW4gb25lcy5cbiAqIEBwYXJhbSBbZnJhZ21lbnRTcmNdIHtzdHJpbmd9IFRoZSBzb3VyY2Ugb2YgdGhlIGZyYWdtZW50IHNoYWRlci5cbiAqL1xuZnVuY3Rpb24gVGV4dHVyZVNoYWRlcihzaGFkZXJNYW5hZ2VyLCB2ZXJ0ZXhTcmMsIGZyYWdtZW50U3JjLCBjdXN0b21Vbmlmb3JtcywgY3VzdG9tQXR0cmlidXRlcylcbntcbiAgICB2YXIgdW5pZm9ybXMgPSB7XG5cbiAgICAgICAgdVNhbXBsZXI6ICAgICAgICAgICB7IHR5cGU6ICdzYW1wbGVyMkQnLCB2YWx1ZTogMCB9LFxuICAgICAgICBwcm9qZWN0aW9uTWF0cml4OiAgIHsgdHlwZTogJ21hdDMnLCB2YWx1ZTogbmV3IEZsb2F0MzJBcnJheShbMSwgMCwgMCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsIDEsIDAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLCAwLCAxXSkgfVxuICAgIH07XG5cbiAgICBpZiAoY3VzdG9tVW5pZm9ybXMpXG4gICAge1xuICAgICAgICBmb3IgKHZhciB1IGluIGN1c3RvbVVuaWZvcm1zKVxuICAgICAgICB7XG4gICAgICAgICAgICB1bmlmb3Jtc1t1XSA9IGN1c3RvbVVuaWZvcm1zW3VdO1xuICAgICAgICB9XG4gICAgfVxuXG5cbiAgICB2YXIgYXR0cmlidXRlcyA9IHtcbiAgICAgICAgYVZlcnRleFBvc2l0aW9uOiAgICAwLFxuICAgICAgICBhVGV4dHVyZUNvb3JkOiAgICAgIDAsXG4gICAgICAgIGFDb2xvcjogICAgICAgICAgICAgMFxuICAgIH07XG5cbiAgICBpZiAoY3VzdG9tQXR0cmlidXRlcylcbiAgICB7XG4gICAgICAgIGZvciAodmFyIGEgaW4gY3VzdG9tQXR0cmlidXRlcylcbiAgICAgICAge1xuICAgICAgICAgICAgYXR0cmlidXRlc1thXSA9IGN1c3RvbUF0dHJpYnV0ZXNbYV07XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGUgdmVydGV4IHNoYWRlci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge3N0cmluZ31cbiAgICAgKi9cbiAgICB2ZXJ0ZXhTcmMgPSB2ZXJ0ZXhTcmMgfHwgVGV4dHVyZVNoYWRlci5kZWZhdWx0VmVydGV4U3JjO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGZyYWdtZW50IHNoYWRlci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge3N0cmluZ31cbiAgICAgKi9cbiAgICBmcmFnbWVudFNyYyA9IGZyYWdtZW50U3JjIHx8IFRleHR1cmVTaGFkZXIuZGVmYXVsdEZyYWdtZW50U3JjO1xuXG4gICAgU2hhZGVyLmNhbGwodGhpcywgc2hhZGVyTWFuYWdlciwgdmVydGV4U3JjLCBmcmFnbWVudFNyYywgdW5pZm9ybXMsIGF0dHJpYnV0ZXMpO1xufVxuXG4vLyBjb25zdHJ1Y3RvclxuVGV4dHVyZVNoYWRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFNoYWRlci5wcm90b3R5cGUpO1xuVGV4dHVyZVNoYWRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBUZXh0dXJlU2hhZGVyO1xubW9kdWxlLmV4cG9ydHMgPSBUZXh0dXJlU2hhZGVyO1xuXG4vKipcbiAqIFRoZSBkZWZhdWx0IHZlcnRleCBzaGFkZXIgc291cmNlXG4gKlxuICogQHN0YXRpY1xuICogQGNvbnN0YW50XG4gKi9cblRleHR1cmVTaGFkZXIuZGVmYXVsdFZlcnRleFNyYyA9IFtcbiAgICAncHJlY2lzaW9uIGxvd3AgZmxvYXQ7JyxcbiAgICAnYXR0cmlidXRlIHZlYzIgYVZlcnRleFBvc2l0aW9uOycsXG4gICAgJ2F0dHJpYnV0ZSB2ZWMyIGFUZXh0dXJlQ29vcmQ7JyxcbiAgICAnYXR0cmlidXRlIHZlYzQgYUNvbG9yOycsXG5cbiAgICAndW5pZm9ybSBtYXQzIHByb2plY3Rpb25NYXRyaXg7JyxcblxuICAgICd2YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDsnLFxuICAgICd2YXJ5aW5nIHZlYzQgdkNvbG9yOycsXG5cbiAgICAndm9pZCBtYWluKHZvaWQpeycsXG4gICAgJyAgIGdsX1Bvc2l0aW9uID0gdmVjNCgocHJvamVjdGlvbk1hdHJpeCAqIHZlYzMoYVZlcnRleFBvc2l0aW9uLCAxLjApKS54eSwgMC4wLCAxLjApOycsXG4gICAgJyAgIHZUZXh0dXJlQ29vcmQgPSBhVGV4dHVyZUNvb3JkOycsXG4gICAgJyAgIHZDb2xvciA9IHZlYzQoYUNvbG9yLnJnYiAqIGFDb2xvci5hLCBhQ29sb3IuYSk7JyxcbiAgICAnfSdcbl0uam9pbignXFxuJyk7XG5cbi8qKlxuICogVGhlIGRlZmF1bHQgZnJhZ21lbnQgc2hhZGVyIHNvdXJjZVxuICpcbiAqIEBzdGF0aWNcbiAqIEBjb25zdGFudFxuICovXG5UZXh0dXJlU2hhZGVyLmRlZmF1bHRGcmFnbWVudFNyYyA9IFtcbiAgICAncHJlY2lzaW9uIGxvd3AgZmxvYXQ7JyxcblxuICAgICd2YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDsnLFxuICAgICd2YXJ5aW5nIHZlYzQgdkNvbG9yOycsXG5cbiAgICAndW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXI7JyxcblxuICAgICd2b2lkIG1haW4odm9pZCl7JyxcbiAgICAnICAgZ2xfRnJhZ0NvbG9yID0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2VGV4dHVyZUNvb3JkKSAqIHZDb2xvciA7JyxcbiAgICAnfSdcbl0uam9pbignXFxuJyk7XG4iLCJ2YXIgU2hhZGVyID0gcmVxdWlyZSgncGl4aS1nbC1jb3JlJykuR0xTaGFkZXI7XG5cbi8qKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQGV4dGVuZHMgUElYSS5TaGFkZXJcbiAqIEBwYXJhbSBzaGFkZXJNYW5hZ2VyIHtQSVhJLlNoYWRlck1hbmFnZXJ9IFRoZSB3ZWJnbCBzaGFkZXIgbWFuYWdlciB0aGlzIHNoYWRlciB3b3JrcyBmb3IuXG4gKiBAcGFyYW0gW3ZlcnRleFNyY10ge3N0cmluZ30gVGhlIHNvdXJjZSBvZiB0aGUgdmVydGV4IHNoYWRlci5cbiAqIEBwYXJhbSBbZnJhZ21lbnRTcmNdIHtzdHJpbmd9IFRoZSBzb3VyY2Ugb2YgdGhlIGZyYWdtZW50IHNoYWRlci5cbiAqIEBwYXJhbSBbY3VzdG9tVW5pZm9ybXNdIHtvYmplY3R9IEN1c3RvbSB1bmlmb3JtcyB0byB1c2UgdG8gYXVnbWVudCB0aGUgYnVpbHQtaW4gb25lcy5cbiAqIEBwYXJhbSBbZnJhZ21lbnRTcmNdIHtzdHJpbmd9IFRoZSBzb3VyY2Ugb2YgdGhlIGZyYWdtZW50IHNoYWRlci5cbiAqL1xuZnVuY3Rpb24gVGV4dHVyZVNoYWRlcihnbClcbntcbiAgICAvKipcbiAgICAgKiBUaGUgdmVydGV4IHNoYWRlci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge3N0cmluZ31cbiAgICAgKi9cbiAgICB2ZXJ0ZXhTcmMgPSBUZXh0dXJlU2hhZGVyLmRlZmF1bHRWZXJ0ZXhTcmM7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgZnJhZ21lbnQgc2hhZGVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7c3RyaW5nfVxuICAgICAqL1xuICAgIGZyYWdtZW50U3JjID0gVGV4dHVyZVNoYWRlci5kZWZhdWx0RnJhZ21lbnRTcmM7XG5cbiAgICBTaGFkZXIuY2FsbCh0aGlzLCBnbCwgdmVydGV4U3JjLCBmcmFnbWVudFNyYyk7Ly8sIHVuaWZvcm1zLCBhdHRyaWJ1dGVzKTtcblxufVxuXG4vLyBjb25zdHJ1Y3RvclxuVGV4dHVyZVNoYWRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFNoYWRlci5wcm90b3R5cGUpO1xuVGV4dHVyZVNoYWRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBUZXh0dXJlU2hhZGVyO1xubW9kdWxlLmV4cG9ydHMgPSBUZXh0dXJlU2hhZGVyO1xuXG4vKipcbiAqIFRoZSBkZWZhdWx0IHZlcnRleCBzaGFkZXIgc291cmNlXG4gKlxuICogQHN0YXRpY1xuICogQGNvbnN0YW50XG4gKi9cblRleHR1cmVTaGFkZXIuZGVmYXVsdFZlcnRleFNyYyA9IFtcbiAgICAncHJlY2lzaW9uIGxvd3AgZmxvYXQ7JyxcbiAgICAnYXR0cmlidXRlIHZlYzIgYVZlcnRleFBvc2l0aW9uOycsXG4gICAgJ2F0dHJpYnV0ZSB2ZWMyIGFUZXh0dXJlQ29vcmQ7JyxcbiAgICAnYXR0cmlidXRlIHZlYzQgYUNvbG9yOycsXG5cbiAgICAndW5pZm9ybSBtYXQzIHByb2plY3Rpb25NYXRyaXg7JyxcblxuICAgICd2YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDsnLFxuICAgICd2YXJ5aW5nIHZlYzQgdkNvbG9yOycsXG5cbiAgICAndm9pZCBtYWluKHZvaWQpeycsXG4gICAgJyAgIGdsX1Bvc2l0aW9uID0gdmVjNCgocHJvamVjdGlvbk1hdHJpeCAqIHZlYzMoYVZlcnRleFBvc2l0aW9uLCAxLjApKS54eSwgMC4wLCAxLjApOycsXG4gICAgJyAgIHZUZXh0dXJlQ29vcmQgPSBhVGV4dHVyZUNvb3JkOycsXG4gICAgJyAgIHZDb2xvciA9IHZlYzQoYUNvbG9yLnJnYiAqIGFDb2xvci5hLCBhQ29sb3IuYSk7JyxcbiAgICAnfSdcbl0uam9pbignXFxuJyk7XG5cbi8qKlxuICogVGhlIGRlZmF1bHQgZnJhZ21lbnQgc2hhZGVyIHNvdXJjZVxuICpcbiAqIEBzdGF0aWNcbiAqIEBjb25zdGFudFxuICovXG5UZXh0dXJlU2hhZGVyLmRlZmF1bHRGcmFnbWVudFNyYyA9IFtcbiAgICAncHJlY2lzaW9uIGxvd3AgZmxvYXQ7JyxcblxuICAgICd2YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDsnLFxuICAgICd2YXJ5aW5nIHZlYzQgdkNvbG9yOycsXG5cbiAgICAndW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXI7JyxcblxuICAgICd2b2lkIG1haW4odm9pZCl7JyxcbiAgICAnICAgZ2xfRnJhZ0NvbG9yID0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2VGV4dHVyZUNvb3JkKSAqIHZDb2xvciA7JyxcbiAgICAnfSdcbl0uam9pbignXFxuJyk7XG4iLCJ2YXIgV2ViR0xNYW5hZ2VyID0gcmVxdWlyZSgnLi4vbWFuYWdlcnMvV2ViR0xNYW5hZ2VyJyk7XG5cbi8qKlxuICogQmFzZSBmb3IgYSBjb21tb24gb2JqZWN0IHJlbmRlcmVyIHRoYXQgY2FuIGJlIHVzZWQgYXMgYSBzeXN0ZW0gcmVuZGVyZXIgcGx1Z2luLlxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5XZWJHTE1hbmFnZXJcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcn0gVGhlIHJlbmRlcmVyIHRoaXMgb2JqZWN0IHJlbmRlcmVyIHdvcmtzIGZvci5cbiAqL1xuZnVuY3Rpb24gT2JqZWN0UmVuZGVyZXIocmVuZGVyZXIpXG57XG4gICAgV2ViR0xNYW5hZ2VyLmNhbGwodGhpcywgcmVuZGVyZXIpO1xufVxuXG5cbk9iamVjdFJlbmRlcmVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoV2ViR0xNYW5hZ2VyLnByb3RvdHlwZSk7XG5PYmplY3RSZW5kZXJlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBPYmplY3RSZW5kZXJlcjtcbm1vZHVsZS5leHBvcnRzID0gT2JqZWN0UmVuZGVyZXI7XG5cbi8qKlxuICogU3RhcnRzIHRoZSByZW5kZXJlciBhbmQgc2V0cyB0aGUgc2hhZGVyXG4gKlxuICovXG5PYmplY3RSZW5kZXJlci5wcm90b3R5cGUuc3RhcnQgPSBmdW5jdGlvbiAoKVxue1xuICAgIC8vIHNldCB0aGUgc2hhZGVyLi5cbn07XG5cbi8qKlxuICogU3RvcHMgdGhlIHJlbmRlcmVyXG4gKlxuICovXG5PYmplY3RSZW5kZXJlci5wcm90b3R5cGUuc3RvcCA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy5mbHVzaCgpO1xufTtcblxuLyoqXG4gKiBmbHVzaGVzXG4gKlxuICovXG5PYmplY3RSZW5kZXJlci5wcm90b3R5cGUuZmx1c2ggPSBmdW5jdGlvbiAoKVxue1xuICAgIC8vIGZsdXNoIVxufTtcblxuLyoqXG4gKiBSZW5kZXJzIGFuIG9iamVjdFxuICpcbiAqIEBwYXJhbSBvYmplY3Qge1BJWEkuRGlzcGxheU9iamVjdH0gVGhlIG9iamVjdCB0byByZW5kZXIuXG4gKi9cbk9iamVjdFJlbmRlcmVyLnByb3RvdHlwZS5yZW5kZXIgPSBmdW5jdGlvbiAob2JqZWN0KSAvLyBqc2hpbnQgdW51c2VkOmZhbHNlXG57XG4gICAgLy8gcmVuZGVyIHRoZSBvYmplY3Rcbn07XG4iLCIvKipcbiAqIEhlbHBlciBjbGFzcyB0byBjcmVhdGUgYSBxdWFkXG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIGdsIHtXZWJHTFJlbmRlcmluZ0NvbnRleHR9IFRoZSBnbCBjb250ZXh0IGZvciB0aGlzIHF1YWQgdG8gdXNlLlxuICovXG5mdW5jdGlvbiBRdWFkKGdsKVxue1xuICAgIC8qXG4gICAgICogdGhlIGN1cnJlbnQgV2ViR0wgZHJhd2luZyBjb250ZXh0XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtXZWJHTFJlbmRlcmluZ0NvbnRleHR9XG4gICAgICovXG4gICAgdGhpcy5nbCA9IGdsO1xuXG4vLyAgICB0aGlzLnRleHR1cmVzID0gbmV3IFRleHR1cmVVdnMoKTtcblxuICAgIC8qKlxuICAgICAqIEFuIGFycmF5IG9mIHZlcnRpY2VzXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtGbG9hdDMyQXJyYXl9XG4gICAgICovXG4gICAgdGhpcy52ZXJ0aWNlcyA9IG5ldyBGbG9hdDMyQXJyYXkoW1xuICAgICAgICAwLDAsXG4gICAgICAgIDIwMCwwLFxuICAgICAgICAyMDAsMjAwLFxuICAgICAgICAwLDIwMFxuICAgIF0pO1xuXG4gICAgLyoqXG4gICAgICogVGhlIFV2cyBvZiB0aGUgcXVhZFxuICAgICAqXG4gICAgICogQG1lbWJlciB7RmxvYXQzMkFycmF5fVxuICAgICAqL1xuICAgIHRoaXMudXZzID0gbmV3IEZsb2F0MzJBcnJheShbXG4gICAgICAgIDAsMCxcbiAgICAgICAgMSwwLFxuICAgICAgICAxLDEsXG4gICAgICAgIDAsMVxuICAgIF0pO1xuXG4vLyAgICB2YXIgd2hpdGUgPSAoMHhGRkZGRkYgPj4gMTYpICsgKDB4RkZGRkZGICYgMHhmZjAwKSArICgoMHhGRkZGRkYgJiAweGZmKSA8PCAxNikgKyAoMSAqIDI1NSA8PCAyNCk7XG4gICAgLy9UT0RPIGNvbnZlcnQgdGhpcyB0byBhIDMyIHVuc2lnbmVkIGludCBhcnJheVxuICAgIC8qKlxuICAgICAqIFRoZSBjb2xvciBjb21wb25lbnRzIG9mIHRoZSB0cmlhbmdsZXNcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge0Zsb2F0MzJBcnJheX1cbiAgICAgKi9cbiAgICB0aGlzLmNvbG9ycyA9IG5ldyBGbG9hdDMyQXJyYXkoW1xuICAgICAgICAxLDEsMSwxLFxuICAgICAgICAxLDEsMSwxLFxuICAgICAgICAxLDEsMSwxLFxuICAgICAgICAxLDEsMSwxXG4gICAgXSk7XG5cbiAgICAvKlxuICAgICAqIEBtZW1iZXIge1VpbnQxNkFycmF5fSBBbiBhcnJheSBjb250YWluaW5nIHRoZSBpbmRpY2VzIG9mIHRoZSB2ZXJ0aWNlc1xuICAgICAqL1xuICAgIHRoaXMuaW5kaWNlcyA9IG5ldyBVaW50MTZBcnJheShbXG4gICAgICAgIDAsIDEsIDIsIDAsIDMsIDJcbiAgICBdKTtcblxuICAgIC8qXG4gICAgICogQG1lbWJlciB7V2ViR0xCdWZmZXJ9IFRoZSB2ZXJ0ZXggYnVmZmVyXG4gICAgICovXG4gICAgdGhpcy52ZXJ0ZXhCdWZmZXIgPSBnbC5jcmVhdGVCdWZmZXIoKTtcblxuICAgIC8qXG4gICAgICogQG1lbWJlciB7V2ViR0xCdWZmZXJ9IFRoZSBpbmRleCBidWZmZXJcbiAgICAgKi9cbiAgICB0aGlzLmluZGV4QnVmZmVyID0gZ2wuY3JlYXRlQnVmZmVyKCk7XG5cbiAgICBnbC5iaW5kQnVmZmVyKGdsLkFSUkFZX0JVRkZFUiwgdGhpcy52ZXJ0ZXhCdWZmZXIpO1xuICAgIGdsLmJ1ZmZlckRhdGEoZ2wuQVJSQVlfQlVGRkVSLCAoOCArIDggKyAxNikgKiA0LCBnbC5EWU5BTUlDX0RSQVcpO1xuXG4gICAgZ2wuYmluZEJ1ZmZlcihnbC5FTEVNRU5UX0FSUkFZX0JVRkZFUiwgdGhpcy5pbmRleEJ1ZmZlcik7XG4gICAgZ2wuYnVmZmVyRGF0YShnbC5FTEVNRU5UX0FSUkFZX0JVRkZFUiwgdGhpcy5pbmRpY2VzLCBnbC5TVEFUSUNfRFJBVyk7XG5cbiAgICB0aGlzLnVwbG9hZCgpO1xufVxuXG5RdWFkLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFF1YWQ7XG5cbi8qKlxuICogTWFwcyB0d28gUmVjdGFuZ2xlIHRvIHRoZSBxdWFkXG4gKiBAcGFyYW0gcmVjdCB7UElYSS5SZWN0YW5nbGV9IHRoZSBmaXJzdCByZWN0YW5nbGVcbiAqIEBwYXJhbSByZWN0MiB7UElYSS5SZWN0YW5nbGV9IHRoZSBzZWNvbmQgcmVjdGFuZ2xlXG4gKi9cblF1YWQucHJvdG90eXBlLm1hcCA9IGZ1bmN0aW9uKHJlY3QsIHJlY3QyKVxue1xuICAgIHZhciB4ID0gMDsgLy9yZWN0Mi54IC8gcmVjdC53aWR0aDtcbiAgICB2YXIgeSA9IDA7IC8vcmVjdDIueSAvIHJlY3QuaGVpZ2h0O1xuXG4gICAgdGhpcy51dnNbMF0gPSB4O1xuICAgIHRoaXMudXZzWzFdID0geTtcblxuICAgIHRoaXMudXZzWzJdID0geCArIHJlY3QyLndpZHRoIC8gcmVjdC53aWR0aDtcbiAgICB0aGlzLnV2c1szXSA9IHk7XG5cbiAgICB0aGlzLnV2c1s0XSA9IHggKyByZWN0Mi53aWR0aCAvIHJlY3Qud2lkdGg7XG4gICAgdGhpcy51dnNbNV0gPSB5ICsgcmVjdDIuaGVpZ2h0IC8gcmVjdC5oZWlnaHQ7XG5cbiAgICB0aGlzLnV2c1s2XSA9IHg7XG4gICAgdGhpcy51dnNbN10gPSB5ICsgcmVjdDIuaGVpZ2h0IC8gcmVjdC5oZWlnaHQ7XG5cbiAgICAvLy8gLS0tLS1cbiAgICB4ID0gcmVjdDIueDtcbiAgICB5ID0gcmVjdDIueTtcblxuICAgIHRoaXMudmVydGljZXNbMF0gPSB4O1xuICAgIHRoaXMudmVydGljZXNbMV0gPSB5O1xuXG4gICAgdGhpcy52ZXJ0aWNlc1syXSA9IHggKyByZWN0Mi53aWR0aDtcbiAgICB0aGlzLnZlcnRpY2VzWzNdID0geTtcblxuICAgIHRoaXMudmVydGljZXNbNF0gPSB4ICsgcmVjdDIud2lkdGg7XG4gICAgdGhpcy52ZXJ0aWNlc1s1XSA9IHkgKyByZWN0Mi5oZWlnaHQ7XG5cbiAgICB0aGlzLnZlcnRpY2VzWzZdID0geDtcbiAgICB0aGlzLnZlcnRpY2VzWzddID0geSArIHJlY3QyLmhlaWdodDtcblxuICAgIHRoaXMudXBsb2FkKCk7XG59O1xuXG4vKipcbiAqIEJpbmRzIHRoZSBidWZmZXIgYW5kIHVwbG9hZHMgdGhlIGRhdGFcbiAqL1xuUXVhZC5wcm90b3R5cGUudXBsb2FkID0gZnVuY3Rpb24oKVxue1xuICAgIHZhciBnbCA9IHRoaXMuZ2w7XG5cbiAgICAvLyBUT0RPIGNvdWxkIHByb2JhYmx5IGJlIHB1c2hlZCBpbnRvIG9uZSB1cGxvYWQhXG4gICAgZ2wuYmluZEJ1ZmZlciggZ2wuQVJSQVlfQlVGRkVSLCB0aGlzLnZlcnRleEJ1ZmZlciApO1xuXG4gICAgZ2wuYnVmZmVyU3ViRGF0YShnbC5BUlJBWV9CVUZGRVIsIDAsIHRoaXMudmVydGljZXMpO1xuXG4gICAgZ2wuYnVmZmVyU3ViRGF0YShnbC5BUlJBWV9CVUZGRVIsIDggKiA0LCB0aGlzLnV2cyk7XG5cbiAgICBnbC5idWZmZXJTdWJEYXRhKGdsLkFSUkFZX0JVRkZFUiwgKDggKyA4KSAqIDQsIHRoaXMuY29sb3JzKTtcbn07XG5cblF1YWQucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbigpXG57XG4gICAgdmFyIGdsID0gdGhpcy5nbDtcbiAgICBcbiAgICAgZ2wuZGVsZXRlQnVmZmVyKHRoaXMudmVydGV4QnVmZmVyKTtcbiAgICAgZ2wuZGVsZXRlQnVmZmVyKHRoaXMuaW5kZXhCdWZmZXIpO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBRdWFkO1xuXG5cbiIsInZhciBtYXRoID0gcmVxdWlyZSgnLi4vLi4vLi4vbWF0aCcpLFxuICAgIHV0aWxzID0gcmVxdWlyZSgnLi4vLi4vLi4vdXRpbHMnKSxcbiAgICBDT05TVCA9IHJlcXVpcmUoJy4uLy4uLy4uL2NvbnN0JyksXG4gICAgICAgIFxuICAgIEdMVGV4dHVyZSA9IHJlcXVpcmUoJ3BpeGktZ2wtY29yZScpLkdMVGV4dHVyZSxcbiAgICBHTEZyYW1lYnVmZmVyID0gcmVxdWlyZSgncGl4aS1nbC1jb3JlJykuR0xGcmFtZWJ1ZmZlcixcbiAgICBcbiAgICBTdGVuY2lsTWFza1N0YWNrID0gcmVxdWlyZSgnLi9TdGVuY2lsTWFza1N0YWNrJyk7XG5cbi8qKlxuICogQGF1dGhvciBNYXQgR3JvdmVzIGh0dHA6Ly9tYXRncm92ZXMuY29tLyBARG9vcm1hdDIzXG4gKi9cblxuLyoqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gZ2wge1dlYkdMUmVuZGVyaW5nQ29udGV4dH0gdGhlIGN1cnJlbnQgV2ViR0wgZHJhd2luZyBjb250ZXh0XG4gKiBAcGFyYW0gd2lkdGgge251bWJlcn0gdGhlIGhvcml6b250YWwgcmFuZ2Ugb2YgdGhlIGZpbHRlclxuICogQHBhcmFtIGhlaWdodCB7bnVtYmVyfSB0aGUgdmVydGljYWwgcmFuZ2Ugb2YgdGhlIGZpbHRlclxuICogQHBhcmFtIHNjYWxlTW9kZSB7bnVtYmVyfSBTZWUge0BsaW5rIFBJWEkuU0NBTEVfTU9ERVN9IGZvciBwb3NzaWJsZSB2YWx1ZXNcbiAqIEBwYXJhbSByZXNvbHV0aW9uIHtudW1iZXJ9IHRoZSBjdXJyZW50IHJlc29sdXRpb25cbiAqIEBwYXJhbSByb290IHtib29sZWFufSBXaGV0aGVyIHRoaXMgb2JqZWN0IGlzIHRoZSByb290IGVsZW1lbnQgb3Igbm90XG4gKi9cbnZhciBSZW5kZXJUYXJnZXQgPSBmdW5jdGlvbihnbCwgd2lkdGgsIGhlaWdodCwgc2NhbGVNb2RlLCByZXNvbHV0aW9uLCByb290KVxue1xuICAgIC8vVE9ETyBSZXNvbHV0aW9uIGNvdWxkIGdvIGhlcmUgKCBlZyBsb3cgcmVzIGJsdXJzIClcblxuICAgIC8qKlxuICAgICAqIFRoZSBjdXJyZW50IFdlYkdMIGRyYXdpbmcgY29udGV4dC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1dlYkdMUmVuZGVyaW5nQ29udGV4dH1cbiAgICAgKi9cbiAgICB0aGlzLmdsID0gZ2w7XG5cbiAgICAvLyBuZXh0IHRpbWUgdG8gY3JlYXRlIGEgZnJhbWUgYnVmZmVyIGFuZCB0ZXh0dXJlXG5cbiAgICAvKipcbiAgICAgKiBBIGZyYW1lIGJ1ZmZlclxuICAgICAqXG4gICAgICogQG1lbWJlciB7V2ViR0xGcmFtZUJ1ZmZlcn1cbiAgICAgKi9cbiAgICB0aGlzLmZyYW1lQnVmZmVyID0gbnVsbDtcblxuICAgIC8qKlxuICAgICAqIFRoZSB0ZXh0dXJlXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlRleHR1cmV9XG4gICAgICovXG4gICAgdGhpcy50ZXh0dXJlID0gbnVsbDtcblxuICAgIHRoaXMuY2xlYXJDb2xvciA9IFswLCAwLCAwLCAwXTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBzaXplIG9mIHRoZSBvYmplY3QgYXMgYSByZWN0YW5nbGVcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuUmVjdGFuZ2xlfVxuICAgICAqL1xuICAgIHRoaXMuc2l6ZSA9IG5ldyBtYXRoLlJlY3RhbmdsZSgwLCAwLCAxLCAxKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBjdXJyZW50IHJlc29sdXRpb25cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLnJlc29sdXRpb24gPSByZXNvbHV0aW9uIHx8IENPTlNULlJFU09MVVRJT047XG5cbiAgICAvKipcbiAgICAgKiBUaGUgcHJvamVjdGlvbiBtYXRyaXhcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuTWF0cml4fVxuICAgICAqL1xuICAgIHRoaXMucHJvamVjdGlvbk1hdHJpeCA9IG5ldyBtYXRoLk1hdHJpeCgpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIG9iamVjdCdzIHRyYW5zZm9ybVxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5NYXRyaXh9XG4gICAgICovXG4gICAgdGhpcy50cmFuc2Zvcm0gPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGZyYW1lLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5SZWN0YW5nbGV9XG4gICAgICovXG4gICAgdGhpcy5mcmFtZSA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgc3RlbmNpbCBidWZmZXIgc3RvcmVzIG1hc2tpbmcgZGF0YSBmb3IgdGhlIHJlbmRlciB0YXJnZXRcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1dlYkdMUmVuZGVyQnVmZmVyfVxuICAgICAqL1xuICAgIHRoaXMuc3RlbmNpbEJ1ZmZlciA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgZGF0YSBzdHJ1Y3R1cmUgZm9yIHRoZSBzdGVuY2lsIG1hc2tzXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlN0ZW5jaWxNYXNrU3RhY2t9XG4gICAgICovXG4gICAgdGhpcy5zdGVuY2lsTWFza1N0YWNrID0gbmV3IFN0ZW5jaWxNYXNrU3RhY2soKTtcblxuICAgIC8qKlxuICAgICAqIFN0b3JlcyBmaWx0ZXIgZGF0YSBmb3IgdGhlIHJlbmRlciB0YXJnZXRcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge29iamVjdFtdfVxuICAgICAqL1xuICAgIHRoaXMuZmlsdGVyU3RhY2sgPSBbXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJlbmRlclRhcmdldDp0aGlzLFxuICAgICAgICAgICAgZmlsdGVyOltdLFxuICAgICAgICAgICAgYm91bmRzOnRoaXMuc2l6ZVxuICAgICAgICB9XG4gICAgXTtcblxuXG4gICAgLyoqXG4gICAgICogVGhlIHNjYWxlIG1vZGUuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgUElYSS5TQ0FMRV9NT0RFUy5ERUZBVUxUXG4gICAgICogQHNlZSBQSVhJLlNDQUxFX01PREVTXG4gICAgICovXG4gICAgdGhpcy5zY2FsZU1vZGUgPSBzY2FsZU1vZGUgfHwgQ09OU1QuU0NBTEVfTU9ERVMuREVGQVVMVDtcblxuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgdGhpcyBvYmplY3QgaXMgdGhlIHJvb3QgZWxlbWVudCBvciBub3RcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICovXG4gICAgdGhpcy5yb290ID0gcm9vdDtcblxuICAgIHRoaXMuZnJhbWVCdWZmZXIgPSBHTEZyYW1lYnVmZmVyLmNyZWF0ZVJHQkEoZ2wsIDEwMCwgMTAwKTtcbiAgICBpZih0aGlzLmZyYW1lQnVmZmVyKXRoaXMuZnJhbWVCdWZmZXIudW5iaW5kKCk7XG5cbiAgIC8vIHRoaXMuZnJhbWVCdWZmZXIgPSB7ZnJhbWVidWZmZXI6bnVsbCwgYmluZDpmdW5jdGlvbigpe30sIGNsZWFyOmZ1bmN0aW9uKCl7fSwgcmVzaXplOmZ1bmN0aW9uKCl7fX0vL25ldyBHTEZyYW1lYnVmZmVyLmNyZWF0ZVJHQkEoZ2wsIDEwMCwgMTAwKTtcblxuXG5cbiAgICBpZiAoIXRoaXMucm9vdClcbiAgICB7XG4gICAgICAgIC8qXG4gICAgICAgICAgICBBIGZyYW1lIGJ1ZmZlciBuZWVkcyBhIHRhcmdldCB0byByZW5kZXIgdG8uLlxuICAgICAgICAgICAgY3JlYXRlIGEgdGV4dHVyZSBhbmQgYmluZCBpdCBhdHRhY2ggaXQgdG8gdGhlIGZyYW1lYnVmZmVyLi5cbiAgICAgICAgICovXG4gICAgICAgIFxuICAgICAgICAvLyBjcmVhdGUgYSB0ZXh0dXJlIHRvIGJpbmQgYXR0YWNoIHRvIHRoZSBmcmFtZUJ1ZmZlci4uXG4gICAgICAgIHZhciB0ZXh0dXJlID0gbmV3IEdMVGV4dHVyZShnbCk7XG5cbiAgICAgICAgdGV4dHVyZS5lbmFibGVMaW5lYXJTY2FsaW5nKClcbiAgICAgICAgdGV4dHVyZS5lbmFibGVXcmFwQ2xhbXAoKVxuXG4gICAgICAgIHRoaXMuZnJhbWVCdWZmZXIuZW5hYmxlVGV4dHVyZSh0ZXh0dXJlKTtcblxuICAgICAgICAvLyBUT0RPIGNoYW5nZSFcbiAgICAgICAgLy8gdGhpcyBpcyB1c2VkIGJ5IHRoZSBiYXNlIHRleHR1cmVcbiAgICAgICAgdGhpcy50ZXh0dXJlID0gdGV4dHVyZS50ZXh0dXJlO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICAvLyBtYWtlIGl0IGEgbnVsbCBmcmFtZWJ1ZmZlci4uXG4gICAgICAgIHRoaXMuZnJhbWVCdWZmZXIuZnJhbWVidWZmZXIgPSBudWxsO1xuICAgIH1cblxuICAgIHRoaXMucmVzaXplKHdpZHRoLCBoZWlnaHQpO1xufTtcblxuUmVuZGVyVGFyZ2V0LnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFJlbmRlclRhcmdldDtcbm1vZHVsZS5leHBvcnRzID0gUmVuZGVyVGFyZ2V0O1xuXG4vKipcbiAqIENsZWFycyB0aGUgZmlsdGVyIHRleHR1cmUuXG4gKlxuICogQHBhcmFtIFtiaW5kPWZhbHNlXSB7Ym9vbGVhbn0gU2hvdWxkIHdlIGJpbmQgb3VyIGZyYW1lYnVmZmVyIGJlZm9yZSBjbGVhcmluZz9cbiAqL1xuUmVuZGVyVGFyZ2V0LnByb3RvdHlwZS5jbGVhciA9IGZ1bmN0aW9uKGNsZWFyQ29sb3IpXG57XG4gICAgdmFyIGNjID0gY2xlYXJDb2xvciB8fCB0aGlzLmNsZWFyQ29sb3JcbiAgICB0aGlzLmZyYW1lQnVmZmVyLmNsZWFyKGNjWzBdLGNjWzFdLGNjWzJdLGNjWzNdKS8vcixnLGIsYSk7XG59O1xuXG4vKipcbiAqIEJpbmRzIHRoZSBzdGVuY2lsIGJ1ZmZlci5cbiAqXG4gKi9cblJlbmRlclRhcmdldC5wcm90b3R5cGUuYXR0YWNoU3RlbmNpbEJ1ZmZlciA9IGZ1bmN0aW9uKClcbntcbiAgICAvL1RPRE8gY2hlY2sgaWYgc3RlbmNpbCBpcyBkb25lP1xuICAgIC8qKlxuICAgICAqIFRoZSBzdGVuY2lsIGJ1ZmZlciBpcyB1c2VkIGZvciBtYXNraW5nIGluIHBpeGlcbiAgICAgKiBsZXRzIGNyZWF0ZSBvbmUgYW5kIHRoZW4gYWRkIGF0dGFjaCBpdCB0byB0aGUgZnJhbWVidWZmZXIuLlxuICAgICAqL1xuICAgIGlmICghdGhpcy5yb290KVxuICAgIHtcbiAgICAgICAgdGhpcy5mcmFtZUJ1ZmZlci5lbmFibGVTdGVuY2lsKCk7XG4gICAgfVxufTtcblxuLyoqXG4gKiBCaW5kcyB0aGUgYnVmZmVycyBhbmQgaW5pdGlhbGlzZXMgdGhlIHZpZXdwb3J0LlxuICpcbiAqL1xuUmVuZGVyVGFyZ2V0LnByb3RvdHlwZS5hY3RpdmF0ZSA9IGZ1bmN0aW9uKClcbntcbiAgICAvL1RPT0QgcmVmYWN0b3IgdXNhZ2Ugb2YgZnJhbWUuLlxuICAgIHZhciBnbCA9IHRoaXMuZ2w7XG5cbiAgICB0aGlzLmZyYW1lQnVmZmVyLmJpbmQoKTtcblxuXG4gICAgdmFyIHByb2plY3Rpb25GcmFtZSA9IHRoaXMuZnJhbWUgfHwgdGhpcy5zaXplO1xuXG4gICAgLy8gVE9ETyBhZGQgYSBkaXJ0eSBmbGFnIHRvIHRoaXMgb2YgYSBzZXR0ZXIgZm9yIHRoZSBmcmFtZT9cbiAgICB0aGlzLmNhbGN1bGF0ZVByb2plY3Rpb24oIHByb2plY3Rpb25GcmFtZSApO1xuXG4gICAgaWYodGhpcy50cmFuc2Zvcm0pXG4gICAge1xuICAgICAgICB0aGlzLnByb2plY3Rpb25NYXRyaXguYXBwZW5kKHRoaXMudHJhbnNmb3JtKTtcbiAgICB9XG5cbiAgICBnbC52aWV3cG9ydCgwLDAsIHByb2plY3Rpb25GcmFtZS53aWR0aCAqIHRoaXMucmVzb2x1dGlvbiwgcHJvamVjdGlvbkZyYW1lLmhlaWdodCAqIHRoaXMucmVzb2x1dGlvbik7XG59O1xuXG4vKipcbiAqIFVwZGF0ZXMgdGhlIHByb2plY3Rpb24gbWF0cml4IGJhc2VkIG9uIGEgcHJvamVjdGlvbiBmcmFtZSAod2hpY2ggaXMgYSByZWN0YW5nbGUpXG4gKlxuICovXG5SZW5kZXJUYXJnZXQucHJvdG90eXBlLmNhbGN1bGF0ZVByb2plY3Rpb24gPSBmdW5jdGlvbiAocHJvamVjdGlvbkZyYW1lKVxue1xuICAgIHZhciBwbSA9IHRoaXMucHJvamVjdGlvbk1hdHJpeDtcblxuICAgIHBtLmlkZW50aXR5KCk7XG5cbiAgICBpZiAoIXRoaXMucm9vdClcbiAgICB7XG4gICAgICAgIHBtLmEgPSAxIC8gcHJvamVjdGlvbkZyYW1lLndpZHRoKjI7XG4gICAgICAgIHBtLmQgPSAxIC8gcHJvamVjdGlvbkZyYW1lLmhlaWdodCoyO1xuXG4gICAgICAgIHBtLnR4ID0gLTEgLSBwcm9qZWN0aW9uRnJhbWUueCAqIHBtLmE7XG4gICAgICAgIHBtLnR5ID0gLTEgLSBwcm9qZWN0aW9uRnJhbWUueSAqIHBtLmQ7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHBtLmEgPSAxIC8gcHJvamVjdGlvbkZyYW1lLndpZHRoKjI7XG4gICAgICAgIHBtLmQgPSAtMSAvIHByb2plY3Rpb25GcmFtZS5oZWlnaHQqMjtcblxuICAgICAgICBwbS50eCA9IC0xIC0gcHJvamVjdGlvbkZyYW1lLnggKiBwbS5hO1xuICAgICAgICBwbS50eSA9IDEgLSBwcm9qZWN0aW9uRnJhbWUueSAqIHBtLmQ7XG4gICAgfVxufTtcblxuLyoqXG4gKiBSZXNpemVzIHRoZSB0ZXh0dXJlIHRvIHRoZSBzcGVjaWZpZWQgd2lkdGggYW5kIGhlaWdodFxuICpcbiAqIEBwYXJhbSB3aWR0aCB7TnVtYmVyfSB0aGUgbmV3IHdpZHRoIG9mIHRoZSB0ZXh0dXJlXG4gKiBAcGFyYW0gaGVpZ2h0IHtOdW1iZXJ9IHRoZSBuZXcgaGVpZ2h0IG9mIHRoZSB0ZXh0dXJlXG4gKi9cblJlbmRlclRhcmdldC5wcm90b3R5cGUucmVzaXplID0gZnVuY3Rpb24gKHdpZHRoLCBoZWlnaHQpXG57XG4gICAgd2lkdGggPSB3aWR0aCB8IDA7XG4gICAgaGVpZ2h0ID0gaGVpZ2h0IHwgMDtcblxuICAgIGlmICh0aGlzLnNpemUud2lkdGggPT09IHdpZHRoICYmIHRoaXMuc2l6ZS5oZWlnaHQgPT09IGhlaWdodCkgXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5zaXplLndpZHRoID0gd2lkdGg7XG4gICAgdGhpcy5zaXplLmhlaWdodCA9IGhlaWdodDtcblxuICAgIHRoaXMuZnJhbWVCdWZmZXIucmVzaXplKHdpZHRoICogdGhpcy5yZXNvbHV0aW9uLCBoZWlnaHQgKiB0aGlzLnJlc29sdXRpb24pO1xuICAgIFxuICAgIHZhciBwcm9qZWN0aW9uRnJhbWUgPSB0aGlzLmZyYW1lIHx8IHRoaXMuc2l6ZTtcblxuICAgIHRoaXMuY2FsY3VsYXRlUHJvamVjdGlvbiggcHJvamVjdGlvbkZyYW1lICk7XG59O1xuXG4vKipcbiAqIERlc3Ryb3lzIHRoZSByZW5kZXIgdGFyZ2V0LlxuICpcbiAqL1xuUmVuZGVyVGFyZ2V0LnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKClcbntcbiAgICB2YXIgZ2wgPSB0aGlzLmdsO1xuICAgIFxuICAgIHRoaXMuZnJhbWVCdWZmZXIuZGVzdHJveSgpO1xuXG4gICAgdGhpcy5mcmFtZUJ1ZmZlciA9IG51bGw7XG4gICAgdGhpcy50ZXh0dXJlID0gbnVsbDtcbn07XG4iLCIvKipcbiAqIEdlbmVyaWMgTWFzayBTdGFjayBkYXRhIHN0cnVjdHVyZVxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICovXG5mdW5jdGlvbiBTdGVuY2lsTWFza1N0YWNrKClcbntcblx0LyoqXG4gICAgICogVGhlIGFjdHVhbCBzdGFja1xuICAgICAqXG4gICAgICogQG1lbWJlciB7YW55W119XG4gICAgICovXG4gICAgdGhpcy5zdGVuY2lsU3RhY2sgPSBbXTtcblxuICAgIC8qKlxuICAgICAqIFRPRE8gQGFsdmluXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqL1xuICAgIHRoaXMucmV2ZXJzZSA9IHRydWU7XG5cbiAgICAvKipcbiAgICAgKiBJbnRlcm5hbCBjb3VudFxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMuY291bnQgPSAwO1xufVxuXG5TdGVuY2lsTWFza1N0YWNrLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFN0ZW5jaWxNYXNrU3RhY2s7XG5tb2R1bGUuZXhwb3J0cyA9IFN0ZW5jaWxNYXNrU3RhY2s7XG4iLCJDT05TVCA9IHJlcXVpcmUoJy4uLy4uLy4uL2NvbnN0Jyk7XG5cbi8qKlxuICogTWFwcyBnbCBibGVuZCBjb21iaW5hdGlvbnMgdG8gV2ViR0xcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqL1xuZnVuY3Rpb24gbWFwV2ViR0xCbGVuZE1vZGVzVG9QaXhpKGdsLCBvYmplY3QpXG57XG4gICAgb2JqZWN0ID0gb2JqZWN0IHx8IHt9O1xuXG4gICAgLy9UT0RPIC0gcHJlbXVsdGlwbHkgYWxwaGEgd291bGQgYmUgZGlmZmVyZW50LlxuICAgIC8vYWRkIGEgYm9vbGVhbiBmb3IgdGhhdCFcbiAgICBvYmplY3RbQ09OU1QuQkxFTkRfTU9ERVMuTk9STUFMXSAgICAgICAgPSBbZ2wuT05FLCAgICAgICBnbC5PTkVfTUlOVVNfU1JDX0FMUEhBXTtcbiAgICBvYmplY3RbQ09OU1QuQkxFTkRfTU9ERVMuQUREXSAgICAgICAgICAgPSBbZ2wuU1JDX0FMUEhBLCBnbC5EU1RfQUxQSEFdO1xuICAgIG9iamVjdFtDT05TVC5CTEVORF9NT0RFUy5NVUxUSVBMWV0gICAgICA9IFtnbC5EU1RfQ09MT1IsIGdsLk9ORV9NSU5VU19TUkNfQUxQSEFdO1xuICAgIG9iamVjdFtDT05TVC5CTEVORF9NT0RFUy5TQ1JFRU5dICAgICAgICA9IFtnbC5TUkNfQUxQSEEsIGdsLk9ORV07XG4gICAgb2JqZWN0W0NPTlNULkJMRU5EX01PREVTLk9WRVJMQVldICAgICAgID0gW2dsLk9ORSwgICAgICAgZ2wuT05FX01JTlVTX1NSQ19BTFBIQV07XG4gICAgb2JqZWN0W0NPTlNULkJMRU5EX01PREVTLkRBUktFTl0gICAgICAgID0gW2dsLk9ORSwgICAgICAgZ2wuT05FX01JTlVTX1NSQ19BTFBIQV07XG4gICAgb2JqZWN0W0NPTlNULkJMRU5EX01PREVTLkxJR0hURU5dICAgICAgID0gW2dsLk9ORSwgICAgICAgZ2wuT05FX01JTlVTX1NSQ19BTFBIQV07XG4gICAgb2JqZWN0W0NPTlNULkJMRU5EX01PREVTLkNPTE9SX0RPREdFXSAgID0gW2dsLk9ORSwgICAgICAgZ2wuT05FX01JTlVTX1NSQ19BTFBIQV07XG4gICAgb2JqZWN0W0NPTlNULkJMRU5EX01PREVTLkNPTE9SX0JVUk5dICAgID0gW2dsLk9ORSwgICAgICAgZ2wuT05FX01JTlVTX1NSQ19BTFBIQV07XG4gICAgb2JqZWN0W0NPTlNULkJMRU5EX01PREVTLkhBUkRfTElHSFRdICAgID0gW2dsLk9ORSwgICAgICAgZ2wuT05FX01JTlVTX1NSQ19BTFBIQV07XG4gICAgb2JqZWN0W0NPTlNULkJMRU5EX01PREVTLlNPRlRfTElHSFRdICAgID0gW2dsLk9ORSwgICAgICAgZ2wuT05FX01JTlVTX1NSQ19BTFBIQV07XG4gICAgb2JqZWN0W0NPTlNULkJMRU5EX01PREVTLkRJRkZFUkVOQ0VdICAgID0gW2dsLk9ORSwgICAgICAgZ2wuT05FX01JTlVTX1NSQ19BTFBIQV07XG4gICAgb2JqZWN0W0NPTlNULkJMRU5EX01PREVTLkVYQ0xVU0lPTl0gICAgID0gW2dsLk9ORSwgICAgICAgZ2wuT05FX01JTlVTX1NSQ19BTFBIQV07XG4gICAgb2JqZWN0W0NPTlNULkJMRU5EX01PREVTLkhVRV0gICAgICAgICAgID0gW2dsLk9ORSwgICAgICAgZ2wuT05FX01JTlVTX1NSQ19BTFBIQV07XG4gICAgb2JqZWN0W0NPTlNULkJMRU5EX01PREVTLlNBVFVSQVRJT05dICAgID0gW2dsLk9ORSwgICAgICAgZ2wuT05FX01JTlVTX1NSQ19BTFBIQV07XG4gICAgb2JqZWN0W0NPTlNULkJMRU5EX01PREVTLkNPTE9SXSAgICAgICAgID0gW2dsLk9ORSwgICAgICAgZ2wuT05FX01JTlVTX1NSQ19BTFBIQV07XG4gICAgb2JqZWN0W0NPTlNULkJMRU5EX01PREVTLkxVTUlOT1NJVFldICAgID0gW2dsLk9ORSwgICAgICAgZ2wuT05FX01JTlVTX1NSQ19BTFBIQV07XG5cbiAgICByZXR1cm4gb2JqZWN0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IG1hcFdlYkdMQmxlbmRNb2Rlc1RvUGl4aTtcbiIsIkNPTlNUID0gcmVxdWlyZSgnLi4vLi4vLi4vY29uc3QnKTtcblxuLyoqXG4gKiBHZW5lcmljIE1hc2sgU3RhY2sgZGF0YSBzdHJ1Y3R1cmVcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqL1xuZnVuY3Rpb24gbWFwV2ViR0xEcmF3TW9kZXNUb1BpeGkoZ2wsIG9iamVjdClcbntcblx0b2JqZWN0PSBvYmplY3QgfHwge307XG5cbiAgICBvYmplY3RbQ09OU1QuRFJBV19NT0RFUy5QT0lOVFNdICAgICAgICAgPSBnbC5QT0lOVFM7XG4gICAgb2JqZWN0W0NPTlNULkRSQVdfTU9ERVMuTElORVNdICAgICAgICAgID0gZ2wuTElORVM7XG4gICAgb2JqZWN0W0NPTlNULkRSQVdfTU9ERVMuTElORV9MT09QXSAgICAgID0gZ2wuTElORV9MT09QO1xuICAgIG9iamVjdFtDT05TVC5EUkFXX01PREVTLkxJTkVfU1RSSVBdICAgICA9IGdsLkxJTkVfU1RSSVA7XG4gICAgb2JqZWN0W0NPTlNULkRSQVdfTU9ERVMuVFJJQU5HTEVTXSAgICAgID0gZ2wuVFJJQU5HTEVTO1xuICAgIG9iamVjdFtDT05TVC5EUkFXX01PREVTLlRSSUFOR0xFX1NUUklQXSA9IGdsLlRSSUFOR0xFX1NUUklQO1xuICAgIG9iamVjdFtDT05TVC5EUkFXX01PREVTLlRSSUFOR0xFX0ZBTl0gICA9IGdsLlRSSUFOR0xFX0ZBTjtcblxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IG1hcFdlYkdMRHJhd01vZGVzVG9QaXhpO1xuIiwidmFyIG1hdGggPSByZXF1aXJlKCcuLi9tYXRoJyksXG4gICAgVGV4dHVyZSA9IHJlcXVpcmUoJy4uL3RleHR1cmVzL1RleHR1cmUnKSxcbiAgICBDb250YWluZXIgPSByZXF1aXJlKCcuLi9kaXNwbGF5L0NvbnRhaW5lcicpLFxuICAgIENhbnZhc1RpbnRlciA9IHJlcXVpcmUoJy4uL3JlbmRlcmVycy9jYW52YXMvdXRpbHMvQ2FudmFzVGludGVyJyksXG4gICAgdXRpbHMgPSByZXF1aXJlKCcuLi91dGlscycpLFxuICAgIENPTlNUID0gcmVxdWlyZSgnLi4vY29uc3QnKSxcbiAgICB0ZW1wUG9pbnQgPSBuZXcgbWF0aC5Qb2ludCgpO1xuXG4vKipcbiAqIFRoZSBTcHJpdGUgb2JqZWN0IGlzIHRoZSBiYXNlIGZvciBhbGwgdGV4dHVyZWQgb2JqZWN0cyB0aGF0IGFyZSByZW5kZXJlZCB0byB0aGUgc2NyZWVuXG4gKlxuICogQSBzcHJpdGUgY2FuIGJlIGNyZWF0ZWQgZGlyZWN0bHkgZnJvbSBhbiBpbWFnZSBsaWtlIHRoaXM6XG4gKlxuICogYGBganNcbiAqIHZhciBzcHJpdGUgPSBuZXcgUElYSS5TcHJpdGUuZnJvbUltYWdlKCdhc3NldHMvaW1hZ2UucG5nJyk7XG4gKiBgYGBcbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQ29udGFpbmVyXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIHRleHR1cmUge1BJWEkuVGV4dHVyZX0gVGhlIHRleHR1cmUgZm9yIHRoaXMgc3ByaXRlXG4gKi9cbmZ1bmN0aW9uIFNwcml0ZSh0ZXh0dXJlKVxue1xuICAgIENvbnRhaW5lci5jYWxsKHRoaXMpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGFuY2hvciBzZXRzIHRoZSBvcmlnaW4gcG9pbnQgb2YgdGhlIHRleHR1cmUuXG4gICAgICogVGhlIGRlZmF1bHQgaXMgMCwwIHRoaXMgbWVhbnMgdGhlIHRleHR1cmUncyBvcmlnaW4gaXMgdGhlIHRvcCBsZWZ0XG4gICAgICogU2V0dGluZyB0aGUgYW5jaG9yIHRvIDAuNSwwLjUgbWVhbnMgdGhlIHRleHR1cmUncyBvcmlnaW4gaXMgY2VudGVyZWRcbiAgICAgKiBTZXR0aW5nIHRoZSBhbmNob3IgdG8gMSwxIHdvdWxkIG1lYW4gdGhlIHRleHR1cmUncyBvcmlnaW4gcG9pbnQgd2lsbCBiZSB0aGUgYm90dG9tIHJpZ2h0IGNvcm5lclxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5Qb2ludH1cbiAgICAgKi9cbiAgICB0aGlzLmFuY2hvciA9IG5ldyBtYXRoLlBvaW50KCk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgdGV4dHVyZSB0aGF0IHRoZSBzcHJpdGUgaXMgdXNpbmdcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuVGV4dHVyZX1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX3RleHR1cmUgPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHdpZHRoIG9mIHRoZSBzcHJpdGUgKHRoaXMgaXMgaW5pdGlhbGx5IHNldCBieSB0aGUgdGV4dHVyZSlcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX3dpZHRoID0gMDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBoZWlnaHQgb2YgdGhlIHNwcml0ZSAodGhpcyBpcyBpbml0aWFsbHkgc2V0IGJ5IHRoZSB0ZXh0dXJlKVxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5faGVpZ2h0ID0gMDtcblxuICAgIC8qKlxuICAgICAqIFRoZSB0aW50IGFwcGxpZWQgdG8gdGhlIHNwcml0ZS4gVGhpcyBpcyBhIGhleCB2YWx1ZS4gQSB2YWx1ZSBvZiAweEZGRkZGRiB3aWxsIHJlbW92ZSBhbnkgdGludCBlZmZlY3QuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMHhGRkZGRkZcbiAgICAgKi9cbiAgICB0aGlzLnRpbnQgPSAweEZGRkZGRjtcblxuICAgIC8qKlxuICAgICAqIFRoZSBibGVuZCBtb2RlIHRvIGJlIGFwcGxpZWQgdG8gdGhlIHNwcml0ZS4gQXBwbHkgYSB2YWx1ZSBvZiBgUElYSS5CTEVORF9NT0RFUy5OT1JNQUxgIHRvIHJlc2V0IHRoZSBibGVuZCBtb2RlLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IFBJWEkuQkxFTkRfTU9ERVMuTk9STUFMXG4gICAgICogQHNlZSBQSVhJLkJMRU5EX01PREVTXG4gICAgICovXG4gICAgdGhpcy5ibGVuZE1vZGUgPSBDT05TVC5CTEVORF9NT0RFUy5OT1JNQUw7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgc2hhZGVyIHRoYXQgd2lsbCBiZSB1c2VkIHRvIHJlbmRlciB0aGUgc3ByaXRlLiBTZXQgdG8gbnVsbCB0byByZW1vdmUgYSBjdXJyZW50IHNoYWRlci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuQWJzdHJhY3RGaWx0ZXJ8UElYSS5TaGFkZXJ9XG4gICAgICovXG4gICAgdGhpcy5zaGFkZXIgPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogQW4gaW50ZXJuYWwgY2FjaGVkIHZhbHVlIG9mIHRoZSB0aW50LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDB4RkZGRkZGXG4gICAgICovXG4gICAgdGhpcy5jYWNoZWRUaW50ID0gMHhGRkZGRkY7XG5cbiAgICAvLyBjYWxsIHRleHR1cmUgc2V0dGVyXG4gICAgdGhpcy50ZXh0dXJlID0gdGV4dHVyZSB8fCBUZXh0dXJlLkVNUFRZO1xuICAgIHRoaXMudGV4dHVyZURpcnR5ID0gdHJ1ZVxuICAgIHRoaXMudmVydGV4RGlydHkgPSB0cnVlO1xuICAgIHRoaXMudmVydGV4RGF0YSA9IG5ldyBGbG9hdDMyQXJyYXkoOCk7XG59XG5cbi8vIGNvbnN0cnVjdG9yXG5TcHJpdGUucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShDb250YWluZXIucHJvdG90eXBlKTtcblNwcml0ZS5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBTcHJpdGU7XG5tb2R1bGUuZXhwb3J0cyA9IFNwcml0ZTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoU3ByaXRlLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFRoZSB3aWR0aCBvZiB0aGUgc3ByaXRlLCBzZXR0aW5nIHRoaXMgd2lsbCBhY3R1YWxseSBtb2RpZnkgdGhlIHNjYWxlIHRvIGFjaGlldmUgdGhlIHZhbHVlIHNldFxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLlNwcml0ZSNcbiAgICAgKi9cbiAgICB3aWR0aDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiBNYXRoLmFicyh0aGlzLnNjYWxlLngpICogdGhpcy50ZXh0dXJlLl9mcmFtZS53aWR0aDtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHZhciBzaWduID0gdXRpbHMuc2lnbih0aGlzLnNjYWxlLngpIHx8IDE7XG4gICAgICAgICAgICB0aGlzLnNjYWxlLnggPSBzaWduICogdmFsdWUgLyB0aGlzLnRleHR1cmUuX2ZyYW1lLndpZHRoO1xuICAgICAgICAgICAgdGhpcy5fd2lkdGggPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBUaGUgaGVpZ2h0IG9mIHRoZSBzcHJpdGUsIHNldHRpbmcgdGhpcyB3aWxsIGFjdHVhbGx5IG1vZGlmeSB0aGUgc2NhbGUgdG8gYWNoaWV2ZSB0aGUgdmFsdWUgc2V0XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuU3ByaXRlI1xuICAgICAqL1xuICAgIGhlaWdodDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiAgTWF0aC5hYnModGhpcy5zY2FsZS55KSAqIHRoaXMudGV4dHVyZS5fZnJhbWUuaGVpZ2h0O1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdmFyIHNpZ24gPSB1dGlscy5zaWduKHRoaXMuc2NhbGUueSkgfHwgMTtcbiAgICAgICAgICAgIHRoaXMuc2NhbGUueSA9IHNpZ24gKiB2YWx1ZSAvIHRoaXMudGV4dHVyZS5fZnJhbWUuaGVpZ2h0O1xuICAgICAgICAgICAgdGhpcy5faGVpZ2h0ID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVGhlIHRleHR1cmUgdGhhdCB0aGUgc3ByaXRlIGlzIHVzaW5nXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlRleHR1cmV9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuU3ByaXRlI1xuICAgICAqL1xuICAgIHRleHR1cmU6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gIHRoaXMuX3RleHR1cmU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICBpZiAodGhpcy5fdGV4dHVyZSA9PT0gdmFsdWUpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLl90ZXh0dXJlID0gdmFsdWU7XG4gICAgICAgICAgICB0aGlzLmNhY2hlZFRpbnQgPSAweEZGRkZGRjtcblxuICAgICAgICAgICAgdGhpcy50ZXh0dXJlRGlydHkgPSB0cnVlO1xuXG4gICAgICAgICAgICBpZiAodmFsdWUpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgLy8gd2FpdCBmb3IgdGhlIHRleHR1cmUgdG8gbG9hZFxuICAgICAgICAgICAgICAgIGlmICh2YWx1ZS5iYXNlVGV4dHVyZS5oYXNMb2FkZWQpXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9vblRleHR1cmVVcGRhdGUoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgdmFsdWUub25jZSgndXBkYXRlJywgdGhpcy5fb25UZXh0dXJlVXBkYXRlLCB0aGlzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG59KTtcblxuLyoqXG4gKiBXaGVuIHRoZSB0ZXh0dXJlIGlzIHVwZGF0ZWQsIHRoaXMgZXZlbnQgd2lsbCBmaXJlIHRvIHVwZGF0ZSB0aGUgc2NhbGUgYW5kIGZyYW1lXG4gKlxuICogQHByaXZhdGVcbiAqL1xuU3ByaXRlLnByb3RvdHlwZS5fb25UZXh0dXJlVXBkYXRlID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLnRleHR1cmVEaXJ0eSA9IHRydWU7XG5cbiAgICAvLyBzbyBpZiBfd2lkdGggaXMgMCB0aGVuIHdpZHRoIHdhcyBub3Qgc2V0Li5cbiAgICBpZiAodGhpcy5fd2lkdGgpXG4gICAge1xuICAgICAgICB0aGlzLnNjYWxlLnggPSB1dGlscy5zaWduKHRoaXMuc2NhbGUueCkgKiB0aGlzLl93aWR0aCAvIHRoaXMudGV4dHVyZS5mcmFtZS53aWR0aDtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5faGVpZ2h0KVxuICAgIHtcbiAgICAgICAgdGhpcy5zY2FsZS55ID0gdXRpbHMuc2lnbih0aGlzLnNjYWxlLnkpICogdGhpcy5faGVpZ2h0IC8gdGhpcy50ZXh0dXJlLmZyYW1lLmhlaWdodDtcbiAgICB9XG59O1xuXG5TcHJpdGUucHJvdG90eXBlLmNhY2x1bGF0ZVZlcnRpY2VzID0gZnVuY3Rpb24gKClcbntcblxuICAgIHZhciB0ZXh0dXJlID0gdGhpcy5fdGV4dHVyZSxcbiAgICAgICAgd3QgPSB0aGlzLndvcmxkVHJhbnNmb3JtLFxuICAgICAgICBhID0gd3QuYSwgYiA9IHd0LmIsIGMgPSB3dC5jLCBkID0gd3QuZCwgdHggPSB3dC50eCwgdHkgPSB3dC50eSxcbiAgICAgICAgdmVydGV4RGF0YSA9IHRoaXMudmVydGV4RGF0YSxcbiAgICAgICAgdzAsIHcxLCBoMCwgaDEsXG4gICAgICAgIHRyaW0gPSB0ZXh0dXJlLnRyaW07XG4gICAgXG4gICAgaWYgKHRyaW0pXG4gICAge1xuICAgICAgICAvLyBpZiB0aGUgc3ByaXRlIGlzIHRyaW1tZWQgYW5kIGlzIG5vdCBhIHRpbGluZ3Nwcml0ZSB0aGVuIHdlIG5lZWQgdG8gYWRkIHRoZSBleHRyYSBzcGFjZSBiZWZvcmUgdHJhbnNmb3JtaW5nIHRoZSBzcHJpdGUgY29vcmRzLi5cbiAgICAgICAgdzEgPSB0cmltLnggLSB0aGlzLmFuY2hvci54ICogdHJpbS53aWR0aDtcbiAgICAgICAgdzAgPSB3MSArIHRleHR1cmUuY3JvcC53aWR0aDtcblxuICAgICAgICBoMSA9IHRyaW0ueSAtIHRoaXMuYW5jaG9yLnkgKiB0cmltLmhlaWdodDtcbiAgICAgICAgaDAgPSBoMSArIHRleHR1cmUuY3JvcC5oZWlnaHQ7XG5cbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgdzAgPSAodGV4dHVyZS5fZnJhbWUud2lkdGggKSAqICgxLXRoaXMuYW5jaG9yLngpO1xuICAgICAgICB3MSA9ICh0ZXh0dXJlLl9mcmFtZS53aWR0aCApICogLXRoaXMuYW5jaG9yLng7XG5cbiAgICAgICAgaDAgPSB0ZXh0dXJlLl9mcmFtZS5oZWlnaHQgKiAoMS10aGlzLmFuY2hvci55KTtcbiAgICAgICAgaDEgPSB0ZXh0dXJlLl9mcmFtZS5oZWlnaHQgKiAtdGhpcy5hbmNob3IueTtcbiAgICB9XG5cbiAgICAvLyB4eVxuICAgIHZlcnRleERhdGFbMF0gPSBhICogdzEgKyBjICogaDEgKyB0eDtcbiAgICB2ZXJ0ZXhEYXRhWzFdID0gZCAqIGgxICsgYiAqIHcxICsgdHk7XG5cbiAgICAvLyB4eVxuICAgIHZlcnRleERhdGFbMl0gPSBhICogdzAgKyBjICogaDEgKyB0eDtcbiAgICB2ZXJ0ZXhEYXRhWzNdID0gZCAqIGgxICsgYiAqIHcwICsgdHk7XG5cbiAgICAgLy8geHlcbiAgICB2ZXJ0ZXhEYXRhWzRdID0gYSAqIHcwICsgYyAqIGgwICsgdHg7XG4gICAgdmVydGV4RGF0YVs1XSA9IGQgKiBoMCArIGIgKiB3MCArIHR5O1xuXG4gICAgLy8geHlcbiAgICB2ZXJ0ZXhEYXRhWzZdID0gYSAqIHcxICsgYyAqIGgwICsgdHg7XG4gICAgdmVydGV4RGF0YVs3XSA9IGQgKiBoMCArIGIgKiB3MSArIHR5O1xuXG5cbn1cblxuLyoqXG4qXG4qIFJlbmRlcnMgdGhlIG9iamVjdCB1c2luZyB0aGUgV2ViR0wgcmVuZGVyZXJcbipcbiogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLldlYkdMUmVuZGVyZXJ9XG4qIEBwcml2YXRlXG4qL1xuU3ByaXRlLnByb3RvdHlwZS5fcmVuZGVyV2ViR0wgPSBmdW5jdGlvbiAocmVuZGVyZXIpXG57XG4gICAgaWYodGhpcy50ZXh0dXJlRGlydHkpXG4gICAge1xuICAgICAgICB0aGlzLnRleHR1cmVEaXJ0eSA9IGZhbHNlO1xuXG4gICAgICAgIHRoaXMuX29uVGV4dHVyZVVwZGF0ZSgpO1xuICAgICAgICBcbiAgICAgICAgdGhpcy52ZXJ0ZXhEaXJ0eSA9IHRydWU7XG4gICAgfVxuXG4gICAgaWYodGhpcy52ZXJ0ZXhEaXJ0eSlcbiAgICB7XG4gICAgICAgIHRoaXMudmVydGV4RGlydHkgPSBmYWxzZTtcblxuICAgICAgICAvLyBzZXQgdGhlIHZlcnRleCBkYXRhXG4gICAgICAgIHRoaXMuY2FjbHVsYXRlVmVydGljZXMoKTtcblxuICAgIH1cbiAgICBcbiAgICByZW5kZXJlci5zZXRPYmplY3RSZW5kZXJlcihyZW5kZXJlci5wbHVnaW5zLnNwcml0ZSk7XG4gICAgcmVuZGVyZXIucGx1Z2lucy5zcHJpdGUucmVuZGVyKHRoaXMpO1xufTtcblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBib3VuZHMgb2YgdGhlIFNwcml0ZSBhcyBhIHJlY3RhbmdsZS4gVGhlIGJvdW5kcyBjYWxjdWxhdGlvbiB0YWtlcyB0aGUgd29ybGRUcmFuc2Zvcm0gaW50byBhY2NvdW50LlxuICpcbiAqIEBwYXJhbSBtYXRyaXgge1BJWEkuTWF0cml4fSB0aGUgdHJhbnNmb3JtYXRpb24gbWF0cml4IG9mIHRoZSBzcHJpdGVcbiAqIEByZXR1cm4ge1BJWEkuUmVjdGFuZ2xlfSB0aGUgZnJhbWluZyByZWN0YW5nbGVcbiAqL1xuU3ByaXRlLnByb3RvdHlwZS5nZXRCb3VuZHMgPSBmdW5jdGlvbiAobWF0cml4KVxue1xuICAgIGlmKCF0aGlzLl9jdXJyZW50Qm91bmRzKVxuICAgIHtcbiAgICAgICAgaWYodGhpcy52ZXJ0ZXhEaXJ0eSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy52ZXJ0ZXhEaXJ0eSA9IGZhbHNlO1xuXG4gICAgICAgICAgICAvLyBzZXQgdGhlIHZlcnRleCBkYXRhXG4gICAgICAgICAgICB0aGlzLmNhY2x1bGF0ZVZlcnRpY2VzKCk7XG5cbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBtaW5YLFxuICAgICAgICAgICAgbWF4WCxcbiAgICAgICAgICAgIG1pblksXG4gICAgICAgICAgICBtYXhZLFxuICAgICAgICAgICAgdmVydGV4RGF0YSA9IHRoaXMudmVydGV4RGF0YTtcblxuICAgICAgICB2YXIgeDEgPSB2ZXJ0ZXhEYXRhWzBdXG4gICAgICAgIHZhciB5MSA9IHZlcnRleERhdGFbMV1cblxuICAgICAgICB2YXIgeDIgPSB2ZXJ0ZXhEYXRhWzJdXG4gICAgICAgIHZhciB5MiA9IHZlcnRleERhdGFbM11cblxuICAgICAgICB2YXIgeDMgPSB2ZXJ0ZXhEYXRhWzRdXG4gICAgICAgIHZhciB5MyA9IHZlcnRleERhdGFbNV1cblxuICAgICAgICB2YXIgeDQgPSB2ZXJ0ZXhEYXRhWzZdXG4gICAgICAgIHZhciB5NCA9IHZlcnRleERhdGFbN11cblxuICAgICAgICBtaW5YID0geDE7XG4gICAgICAgIG1pblggPSB4MiA8IG1pblggPyB4MiA6IG1pblg7XG4gICAgICAgIG1pblggPSB4MyA8IG1pblggPyB4MyA6IG1pblg7XG4gICAgICAgIG1pblggPSB4NCA8IG1pblggPyB4NCA6IG1pblg7XG5cbiAgICAgICAgbWluWSA9IHkxO1xuICAgICAgICBtaW5ZID0geTIgPCBtaW5ZID8geTIgOiBtaW5ZO1xuICAgICAgICBtaW5ZID0geTMgPCBtaW5ZID8geTMgOiBtaW5ZO1xuICAgICAgICBtaW5ZID0geTQgPCBtaW5ZID8geTQgOiBtaW5ZO1xuXG4gICAgICAgIG1heFggPSB4MTtcbiAgICAgICAgbWF4WCA9IHgyID4gbWF4WCA/IHgyIDogbWF4WDtcbiAgICAgICAgbWF4WCA9IHgzID4gbWF4WCA/IHgzIDogbWF4WDtcbiAgICAgICAgbWF4WCA9IHg0ID4gbWF4WCA/IHg0IDogbWF4WDtcblxuICAgICAgICBtYXhZID0geTE7XG4gICAgICAgIG1heFkgPSB5MiA+IG1heFkgPyB5MiA6IG1heFk7XG4gICAgICAgIG1heFkgPSB5MyA+IG1heFkgPyB5MyA6IG1heFk7XG4gICAgICAgIG1heFkgPSB5NCA+IG1heFkgPyB5NCA6IG1heFk7XG5cbiAgICAgICAgLy8gY2hlY2sgZm9yIGNoaWxkcmVuXG4gICAgICAgIGlmKHRoaXMuY2hpbGRyZW4ubGVuZ3RoKVxuICAgICAgICB7XG4gICAgICAgICAgICB2YXIgY2hpbGRCb3VuZHMgPSB0aGlzLmNvbnRhaW5lckdldEJvdW5kcygpO1xuXG4gICAgICAgICAgICB3MCA9IGNoaWxkQm91bmRzLng7XG4gICAgICAgICAgICB3MSA9IGNoaWxkQm91bmRzLnggKyBjaGlsZEJvdW5kcy53aWR0aDtcbiAgICAgICAgICAgIGgwID0gY2hpbGRCb3VuZHMueTtcbiAgICAgICAgICAgIGgxID0gY2hpbGRCb3VuZHMueSArIGNoaWxkQm91bmRzLmhlaWdodDtcblxuICAgICAgICAgICAgbWluWCA9IChtaW5YIDwgdzApID8gbWluWCA6IHcwO1xuICAgICAgICAgICAgbWluWSA9IChtaW5ZIDwgaDApID8gbWluWSA6IGgwO1xuXG4gICAgICAgICAgICBtYXhYID0gKG1heFggPiB3MSkgPyBtYXhYIDogdzE7XG4gICAgICAgICAgICBtYXhZID0gKG1heFkgPiBoMSkgPyBtYXhZIDogaDE7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgYm91bmRzID0gdGhpcy5fYm91bmRzO1xuXG4gICAgICAgIGJvdW5kcy54ID0gbWluWDtcbiAgICAgICAgYm91bmRzLndpZHRoID0gbWF4WCAtIG1pblg7XG5cbiAgICAgICAgYm91bmRzLnkgPSBtaW5ZO1xuICAgICAgICBib3VuZHMuaGVpZ2h0ID0gbWF4WSAtIG1pblk7XG5cbiAgICAgICAgLy8gc3RvcmUgYSByZWZlcmVuY2Ugc28gdGhhdCBpZiB0aGlzIGZ1bmN0aW9uIGdldHMgY2FsbGVkIGFnYWluIGluIHRoZSByZW5kZXIgY3ljbGUgd2UgZG8gbm90IGhhdmUgdG8gcmVjYWxjdWxhdGVcbiAgICAgICAgdGhpcy5fY3VycmVudEJvdW5kcyA9IGJvdW5kcztcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5fY3VycmVudEJvdW5kcztcbn07XG5cbi8qKlxuICogR2V0cyB0aGUgbG9jYWwgYm91bmRzIG9mIHRoZSBzcHJpdGUgb2JqZWN0LlxuICpcbiAqL1xuU3ByaXRlLnByb3RvdHlwZS5nZXRMb2NhbEJvdW5kcyA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy5fYm91bmRzLnggPSAtdGhpcy5fdGV4dHVyZS5fZnJhbWUud2lkdGggKiB0aGlzLmFuY2hvci54O1xuICAgIHRoaXMuX2JvdW5kcy55ID0gLXRoaXMuX3RleHR1cmUuX2ZyYW1lLmhlaWdodCAqIHRoaXMuYW5jaG9yLnk7XG4gICAgdGhpcy5fYm91bmRzLndpZHRoID0gdGhpcy5fdGV4dHVyZS5fZnJhbWUud2lkdGg7XG4gICAgdGhpcy5fYm91bmRzLmhlaWdodCA9IHRoaXMuX3RleHR1cmUuX2ZyYW1lLmhlaWdodDtcbiAgICByZXR1cm4gdGhpcy5fYm91bmRzO1xufTtcblxuLyoqXG4qIFRlc3RzIGlmIGEgcG9pbnQgaXMgaW5zaWRlIHRoaXMgc3ByaXRlXG4qXG4qIEBwYXJhbSBwb2ludCB7UElYSS5Qb2ludH0gdGhlIHBvaW50IHRvIHRlc3RcbiogQHJldHVybiB7Ym9vbGVhbn0gdGhlIHJlc3VsdCBvZiB0aGUgdGVzdFxuKi9cblNwcml0ZS5wcm90b3R5cGUuY29udGFpbnNQb2ludCA9IGZ1bmN0aW9uKCBwb2ludCApXG57XG4gICAgdGhpcy53b3JsZFRyYW5zZm9ybS5hcHBseUludmVyc2UocG9pbnQsICB0ZW1wUG9pbnQpO1xuXG4gICAgdmFyIHdpZHRoID0gdGhpcy5fdGV4dHVyZS5fZnJhbWUud2lkdGg7XG4gICAgdmFyIGhlaWdodCA9IHRoaXMuX3RleHR1cmUuX2ZyYW1lLmhlaWdodDtcbiAgICB2YXIgeDEgPSAtd2lkdGggKiB0aGlzLmFuY2hvci54O1xuICAgIHZhciB5MTtcblxuICAgIGlmICggdGVtcFBvaW50LnggPiB4MSAmJiB0ZW1wUG9pbnQueCA8IHgxICsgd2lkdGggKVxuICAgIHtcbiAgICAgICAgeTEgPSAtaGVpZ2h0ICogdGhpcy5hbmNob3IueTtcblxuICAgICAgICBpZiAoIHRlbXBQb2ludC55ID4geTEgJiYgdGVtcFBvaW50LnkgPCB5MSArIGhlaWdodCApXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xufTtcblxuLyoqXG4qIFJlbmRlcnMgdGhlIG9iamVjdCB1c2luZyB0aGUgQ2FudmFzIHJlbmRlcmVyXG4qXG4qIEBwYXJhbSByZW5kZXJlciB7UElYSS5DYW52YXNSZW5kZXJlcn0gVGhlIHJlbmRlcmVyXG4qIEBwcml2YXRlXG4qL1xuU3ByaXRlLnByb3RvdHlwZS5fcmVuZGVyQ2FudmFzID0gZnVuY3Rpb24gKHJlbmRlcmVyKVxue1xuICAgIGlmICh0aGlzLnRleHR1cmUuY3JvcC53aWR0aCA8PSAwIHx8IHRoaXMudGV4dHVyZS5jcm9wLmhlaWdodCA8PSAwKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHZhciBjb21wb3NpdGVPcGVyYXRpb24gPSByZW5kZXJlci5ibGVuZE1vZGVzW3RoaXMuYmxlbmRNb2RlXTtcbiAgICBpZiAoY29tcG9zaXRlT3BlcmF0aW9uICE9PSByZW5kZXJlci5jb250ZXh0Lmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbilcbiAgICB7XG4gICAgICAgIHJlbmRlcmVyLmNvbnRleHQuZ2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uID0gY29tcG9zaXRlT3BlcmF0aW9uO1xuICAgIH1cblxuICAgIC8vICBJZ25vcmUgbnVsbCBzb3VyY2VzXG4gICAgaWYgKHRoaXMudGV4dHVyZS52YWxpZClcbiAgICB7XG4gICAgICAgIHZhciB0ZXh0dXJlID0gdGhpcy5fdGV4dHVyZSxcbiAgICAgICAgICAgIHd0ID0gdGhpcy53b3JsZFRyYW5zZm9ybSxcbiAgICAgICAgICAgIGR4LFxuICAgICAgICAgICAgZHksXG4gICAgICAgICAgICB3aWR0aCxcbiAgICAgICAgICAgIGhlaWdodDtcblxuICAgICAgICByZW5kZXJlci5jb250ZXh0Lmdsb2JhbEFscGhhID0gdGhpcy53b3JsZEFscGhhO1xuXG4gICAgICAgIC8vIElmIHNtb290aGluZ0VuYWJsZWQgaXMgc3VwcG9ydGVkIGFuZCB3ZSBuZWVkIHRvIGNoYW5nZSB0aGUgc21vb3RoaW5nIHByb3BlcnR5IGZvciB0aGlzIHRleHR1cmVcbiAgICAgICAgdmFyIHNtb290aGluZ0VuYWJsZWQgPSB0ZXh0dXJlLmJhc2VUZXh0dXJlLnNjYWxlTW9kZSA9PT0gQ09OU1QuU0NBTEVfTU9ERVMuTElORUFSO1xuICAgICAgICBpZiAocmVuZGVyZXIuc21vb3RoUHJvcGVydHkgJiYgcmVuZGVyZXIuY29udGV4dFtyZW5kZXJlci5zbW9vdGhQcm9wZXJ0eV0gIT09IHNtb290aGluZ0VuYWJsZWQpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJlbmRlcmVyLmNvbnRleHRbcmVuZGVyZXIuc21vb3RoUHJvcGVydHldID0gc21vb3RoaW5nRW5hYmxlZDtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIElmIHRoZSB0ZXh0dXJlIGlzIHRyaW1tZWQgd2Ugb2Zmc2V0IGJ5IHRoZSB0cmltIHgveSwgb3RoZXJ3aXNlIHdlIHVzZSB0aGUgZnJhbWUgZGltZW5zaW9uc1xuXG4gICAgICAgIGlmKHRleHR1cmUucm90YXRlKVxuICAgICAgICB7XG4gICAgICAgICAgICB3aWR0aCA9IHRleHR1cmUuY3JvcC5oZWlnaHQ7XG4gICAgICAgICAgICBoZWlnaHQgPSB0ZXh0dXJlLmNyb3Aud2lkdGg7XG5cbiAgICAgICAgICAgIGR4ID0gKHRleHR1cmUudHJpbSkgPyB0ZXh0dXJlLnRyaW0ueSAtIHRoaXMuYW5jaG9yLnkgKiB0ZXh0dXJlLnRyaW0uaGVpZ2h0IDogdGhpcy5hbmNob3IueSAqIC10ZXh0dXJlLl9mcmFtZS5oZWlnaHQ7XG4gICAgICAgICAgICBkeSA9ICh0ZXh0dXJlLnRyaW0pID8gdGV4dHVyZS50cmltLnggLSB0aGlzLmFuY2hvci54ICogdGV4dHVyZS50cmltLndpZHRoIDogdGhpcy5hbmNob3IueCAqIC10ZXh0dXJlLl9mcmFtZS53aWR0aDtcbiAgICAgICBcbiAgICAgICAgICAgIGR4ICs9IHdpZHRoO1xuXG4gICAgICAgICAgICB3dC50eCA9IGR5ICogd3QuYSArIGR4ICogd3QuYyArIHd0LnR4O1xuICAgICAgICAgICAgd3QudHkgPSBkeSAqIHd0LmIgKyBkeCAqIHd0LmQgKyB3dC50eTtcblxuICAgICAgICAgICAgdmFyIHRlbXAgPSB3dC5hO1xuICAgICAgICAgICAgd3QuYSAgPSAtd3QuYztcbiAgICAgICAgICAgIHd0LmMgID0gIHRlbXA7XG5cbiAgICAgICAgICAgIHRlbXAgPSB3dC5iO1xuICAgICAgICAgICAgd3QuYiAgPSAtd3QuZDtcbiAgICAgICAgICAgIHd0LmQgID0gIHRlbXA7XG5cbiAgICAgICAgICAgIC8vIHRoZSBhbmNob3IgaGFzIGFscmVhZHkgYmVlbiBhcHBsaWVkIGFib3ZlLCBzbyBsZXRzIHNldCBpdCB0byB6ZXJvXG4gICAgICAgICAgICBkeCA9IDA7XG4gICAgICAgICAgICBkeSA9IDA7XG5cbiAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgIHtcbiAgICAgICAgICAgIHdpZHRoID0gdGV4dHVyZS5jcm9wLndpZHRoO1xuICAgICAgICAgICAgaGVpZ2h0ID0gdGV4dHVyZS5jcm9wLmhlaWdodDtcblxuICAgICAgICAgICAgZHggPSAodGV4dHVyZS50cmltKSA/IHRleHR1cmUudHJpbS54IC0gdGhpcy5hbmNob3IueCAqIHRleHR1cmUudHJpbS53aWR0aCA6IHRoaXMuYW5jaG9yLnggKiAtdGV4dHVyZS5fZnJhbWUud2lkdGg7XG4gICAgICAgICAgICBkeSA9ICh0ZXh0dXJlLnRyaW0pID8gdGV4dHVyZS50cmltLnkgLSB0aGlzLmFuY2hvci55ICogdGV4dHVyZS50cmltLmhlaWdodCA6IHRoaXMuYW5jaG9yLnkgKiAtdGV4dHVyZS5fZnJhbWUuaGVpZ2h0O1xuICAgICAgICB9XG5cblxuXG4gICAgICAgIC8vIEFsbG93IGZvciBwaXhlbCByb3VuZGluZ1xuICAgICAgICBpZiAocmVuZGVyZXIucm91bmRQaXhlbHMpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJlbmRlcmVyLmNvbnRleHQuc2V0VHJhbnNmb3JtKFxuICAgICAgICAgICAgICAgIHd0LmEsXG4gICAgICAgICAgICAgICAgd3QuYixcbiAgICAgICAgICAgICAgICB3dC5jLFxuICAgICAgICAgICAgICAgIHd0LmQsXG4gICAgICAgICAgICAgICAgKHd0LnR4ICogcmVuZGVyZXIucmVzb2x1dGlvbikgfCAwLFxuICAgICAgICAgICAgICAgICh3dC50eSAqIHJlbmRlcmVyLnJlc29sdXRpb24pIHwgMFxuICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgZHggPSBkeCB8IDA7XG4gICAgICAgICAgICBkeSA9IGR5IHwgMDtcbiAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgIHtcblxuICAgICAgICAgICAgcmVuZGVyZXIuY29udGV4dC5zZXRUcmFuc2Zvcm0oXG4gICAgICAgICAgICAgICAgd3QuYSxcbiAgICAgICAgICAgICAgICB3dC5iLFxuICAgICAgICAgICAgICAgIHd0LmMsXG4gICAgICAgICAgICAgICAgd3QuZCxcbiAgICAgICAgICAgICAgICB3dC50eCAqIHJlbmRlcmVyLnJlc29sdXRpb24sXG4gICAgICAgICAgICAgICAgd3QudHkgKiByZW5kZXJlci5yZXNvbHV0aW9uXG4gICAgICAgICAgICApO1xuXG5cbiAgICAgICAgfVxuXG4gICAgICAgIHZhciByZXNvbHV0aW9uID0gdGV4dHVyZS5iYXNlVGV4dHVyZS5yZXNvbHV0aW9uO1xuXG4gICAgICAgIGlmICh0aGlzLnRpbnQgIT09IDB4RkZGRkZGKVxuICAgICAgICB7XG4gICAgICAgICAgICBpZiAodGhpcy5jYWNoZWRUaW50ICE9PSB0aGlzLnRpbnQpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdGhpcy5jYWNoZWRUaW50ID0gdGhpcy50aW50O1xuXG4gICAgICAgICAgICAgICAgLy8gVE9ETyBjbGVhbiB1cCBjYWNoaW5nIC0gaG93IHRvIGNsZWFuIHVwIHRoZSBjYWNoZXM/XG4gICAgICAgICAgICAgICAgdGhpcy50aW50ZWRUZXh0dXJlID0gQ2FudmFzVGludGVyLmdldFRpbnRlZFRleHR1cmUodGhpcywgdGhpcy50aW50KTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmVuZGVyZXIuY29udGV4dC5kcmF3SW1hZ2UoXG4gICAgICAgICAgICAgICAgdGhpcy50aW50ZWRUZXh0dXJlLFxuICAgICAgICAgICAgICAgIDAsXG4gICAgICAgICAgICAgICAgMCxcbiAgICAgICAgICAgICAgICB3aWR0aCAqIHJlc29sdXRpb24sXG4gICAgICAgICAgICAgICAgaGVpZ2h0ICogcmVzb2x1dGlvbixcbiAgICAgICAgICAgICAgICBkeCAqIHJlbmRlcmVyLnJlc29sdXRpb24sXG4gICAgICAgICAgICAgICAgZHkgKiByZW5kZXJlci5yZXNvbHV0aW9uLFxuICAgICAgICAgICAgICAgIHdpZHRoICogcmVuZGVyZXIucmVzb2x1dGlvbixcbiAgICAgICAgICAgICAgICBoZWlnaHQgKiByZW5kZXJlci5yZXNvbHV0aW9uXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIGVsc2VcbiAgICAgICAge1xuICAgICAgICAgICAgcmVuZGVyZXIuY29udGV4dC5kcmF3SW1hZ2UoXG4gICAgICAgICAgICAgICAgdGV4dHVyZS5iYXNlVGV4dHVyZS5zb3VyY2UsXG4gICAgICAgICAgICAgICAgdGV4dHVyZS5jcm9wLnggKiByZXNvbHV0aW9uLFxuICAgICAgICAgICAgICAgIHRleHR1cmUuY3JvcC55ICogcmVzb2x1dGlvbixcbiAgICAgICAgICAgICAgICB3aWR0aCAqIHJlc29sdXRpb24sXG4gICAgICAgICAgICAgICAgaGVpZ2h0ICogcmVzb2x1dGlvbixcbiAgICAgICAgICAgICAgICBkeCAgKiByZW5kZXJlci5yZXNvbHV0aW9uLFxuICAgICAgICAgICAgICAgIGR5ICAqIHJlbmRlcmVyLnJlc29sdXRpb24sXG4gICAgICAgICAgICAgICAgd2lkdGggKiByZW5kZXJlci5yZXNvbHV0aW9uLFxuICAgICAgICAgICAgICAgIGhlaWdodCAqIHJlbmRlcmVyLnJlc29sdXRpb25cbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICB9XG59O1xuXG4vKipcbiAqIERlc3Ryb3lzIHRoaXMgc3ByaXRlIGFuZCBvcHRpb25hbGx5IGl0cyB0ZXh0dXJlXG4gKlxuICogQHBhcmFtIFtkZXN0cm95VGV4dHVyZT1mYWxzZV0ge2Jvb2xlYW59IFNob3VsZCBpdCBkZXN0cm95IHRoZSBjdXJyZW50IHRleHR1cmUgb2YgdGhlIHNwcml0ZSBhcyB3ZWxsXG4gKiBAcGFyYW0gW2Rlc3Ryb3lCYXNlVGV4dHVyZT1mYWxzZV0ge2Jvb2xlYW59IFNob3VsZCBpdCBkZXN0cm95IHRoZSBiYXNlIHRleHR1cmUgb2YgdGhlIHNwcml0ZSBhcyB3ZWxsXG4gKi9cblNwcml0ZS5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uIChkZXN0cm95VGV4dHVyZSwgZGVzdHJveUJhc2VUZXh0dXJlKVxue1xuICAgIENvbnRhaW5lci5wcm90b3R5cGUuZGVzdHJveS5jYWxsKHRoaXMpO1xuXG4gICAgdGhpcy5hbmNob3IgPSBudWxsO1xuXG4gICAgaWYgKGRlc3Ryb3lUZXh0dXJlKVxuICAgIHtcbiAgICAgICAgdGhpcy5fdGV4dHVyZS5kZXN0cm95KGRlc3Ryb3lCYXNlVGV4dHVyZSk7XG4gICAgfVxuXG4gICAgdGhpcy5fdGV4dHVyZSA9IG51bGw7XG4gICAgdGhpcy5zaGFkZXIgPSBudWxsO1xufTtcblxuLy8gc29tZSBoZWxwZXIgZnVuY3Rpb25zLi5cblxuLyoqXG4gKiBIZWxwZXIgZnVuY3Rpb24gdGhhdCBjcmVhdGVzIGEgc3ByaXRlIHRoYXQgd2lsbCBjb250YWluIGEgdGV4dHVyZSBmcm9tIHRoZSBUZXh0dXJlQ2FjaGUgYmFzZWQgb24gdGhlIGZyYW1lSWRcbiAqIFRoZSBmcmFtZSBpZHMgYXJlIGNyZWF0ZWQgd2hlbiBhIFRleHR1cmUgcGFja2VyIGZpbGUgaGFzIGJlZW4gbG9hZGVkXG4gKlxuICogQHN0YXRpY1xuICogQHBhcmFtIGZyYW1lSWQge3N0cmluZ30gVGhlIGZyYW1lIElkIG9mIHRoZSB0ZXh0dXJlIGluIHRoZSBjYWNoZVxuICogQHBhcmFtIFtjcm9zc29yaWdpbj0oYXV0byldIHtib29sZWFufSBpZiB5b3Ugd2FudCB0byBzcGVjaWZ5IHRoZSBjcm9zcy1vcmlnaW4gcGFyYW1ldGVyXG4gKiBAcGFyYW0gW3NjYWxlTW9kZT1QSVhJLlNDQUxFX01PREVTLkRFRkFVTFRdIHtudW1iZXJ9IGlmIHlvdSB3YW50IHRvIHNwZWNpZnkgdGhlIHNjYWxlIG1vZGUsIHNlZSB7QGxpbmsgUElYSS5TQ0FMRV9NT0RFU30gZm9yIHBvc3NpYmxlIHZhbHVlc1xuICogQHJldHVybiB7UElYSS5TcHJpdGV9IEEgbmV3IFNwcml0ZSB1c2luZyBhIHRleHR1cmUgZnJvbSB0aGUgdGV4dHVyZSBjYWNoZSBtYXRjaGluZyB0aGUgZnJhbWVJZFxuICovXG5TcHJpdGUuZnJvbUZyYW1lID0gZnVuY3Rpb24gKGZyYW1lSWQpXG57XG4gICAgdmFyIHRleHR1cmUgPSB1dGlscy5UZXh0dXJlQ2FjaGVbZnJhbWVJZF07XG5cbiAgICBpZiAoIXRleHR1cmUpXG4gICAge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RoZSBmcmFtZUlkIFwiJyArIGZyYW1lSWQgKyAnXCIgZG9lcyBub3QgZXhpc3QgaW4gdGhlIHRleHR1cmUgY2FjaGUnKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IFNwcml0ZSh0ZXh0dXJlKTtcbn07XG5cbi8qKlxuICogSGVscGVyIGZ1bmN0aW9uIHRoYXQgY3JlYXRlcyBhIHNwcml0ZSB0aGF0IHdpbGwgY29udGFpbiBhIHRleHR1cmUgYmFzZWQgb24gYW4gaW1hZ2UgdXJsXG4gKiBJZiB0aGUgaW1hZ2UgaXMgbm90IGluIHRoZSB0ZXh0dXJlIGNhY2hlIGl0IHdpbGwgYmUgbG9hZGVkXG4gKlxuICogQHN0YXRpY1xuICogQHBhcmFtIGltYWdlSWQge3N0cmluZ30gVGhlIGltYWdlIHVybCBvZiB0aGUgdGV4dHVyZVxuICogQHJldHVybiB7UElYSS5TcHJpdGV9IEEgbmV3IFNwcml0ZSB1c2luZyBhIHRleHR1cmUgZnJvbSB0aGUgdGV4dHVyZSBjYWNoZSBtYXRjaGluZyB0aGUgaW1hZ2UgaWRcbiAqL1xuU3ByaXRlLmZyb21JbWFnZSA9IGZ1bmN0aW9uIChpbWFnZUlkLCBjcm9zc29yaWdpbiwgc2NhbGVNb2RlKVxue1xuICAgIHJldHVybiBuZXcgU3ByaXRlKFRleHR1cmUuZnJvbUltYWdlKGltYWdlSWQsIGNyb3Nzb3JpZ2luLCBzY2FsZU1vZGUpKTtcbn07XG4iLCJ2YXIgT2JqZWN0UmVuZGVyZXIgPSByZXF1aXJlKCcuLi8uLi9yZW5kZXJlcnMvd2ViZ2wvdXRpbHMvT2JqZWN0UmVuZGVyZXInKSxcbiAgICBXZWJHTFJlbmRlcmVyID0gcmVxdWlyZSgnLi4vLi4vcmVuZGVyZXJzL3dlYmdsL1dlYkdMUmVuZGVyZXInKSxcbiAgICBUZXh0dXJlU2hhZGVyID0gcmVxdWlyZSgnLi4vLi4vcmVuZGVyZXJzL3dlYmdsL3NoYWRlcnMvX1RleHR1cmVTaGFkZXInKSxcbiAgICBjcmVhdGVJbmRpY2VzRm9yUXVhZHMgPSByZXF1aXJlKCcuLi8uLi91dGlscy9jcmVhdGVJbmRpY2VzRm9yUXVhZHMnKSxcbiAgICBnZW5lcmF0ZU11bHRpVGV4dHVyZVNoYWRlciA9IHJlcXVpcmUoJy4vZ2VuZXJhdGVNdWx0aVRleHR1cmVTaGFkZXInKSxcbiAgICBDT05TVCA9IHJlcXVpcmUoJy4uLy4uL2NvbnN0JyksXG4gICAgZ2xDb3JlID0gcmVxdWlyZSgncGl4aS1nbC1jb3JlJyk7XG5cbi8qKlxuICogQGF1dGhvciBNYXQgR3JvdmVzXG4gKlxuICogQmlnIHRoYW5rcyB0byB0aGUgdmVyeSBjbGV2ZXIgTWF0dCBEZXNMYXVyaWVycyA8bWF0dGRlc2w+IGh0dHBzOi8vZ2l0aHViLmNvbS9tYXR0ZGVzbC9cbiAqIGZvciBjcmVhdGluZyB0aGUgb3JpZ2luYWwgcGl4aSB2ZXJzaW9uIVxuICogQWxzbyBhIHRoYW5rcyB0byBodHRwczovL2dpdGh1Yi5jb20vYmNoZXZhbGllciBmb3IgdHdlYWtpbmcgdGhlIHRpbnQgYW5kIGFscGhhIHNvIHRoYXQgdGhleSBub3cgc2hhcmUgNCBieXRlcyBvbiB0aGUgdmVydGV4IGJ1ZmZlclxuICpcbiAqIEhlYXZpbHkgaW5zcGlyZWQgYnkgTGliR0RYJ3MgU3ByaXRlUmVuZGVyZXI6XG4gKiBodHRwczovL2dpdGh1Yi5jb20vbGliZ2R4L2xpYmdkeC9ibG9iL21hc3Rlci9nZHgvc3JjL2NvbS9iYWRsb2dpYy9nZHgvZ3JhcGhpY3MvZzJkL1Nwcml0ZVJlbmRlcmVyLmphdmFcbiAqL1xuXG4vKipcbiAqIFJlbmRlcmVyIGRlZGljYXRlZCB0byBkcmF3aW5nIGFuZCBiYXRjaGluZyBzcHJpdGVzLlxuICpcbiAqIEBjbGFzc1xuICogQHByaXZhdGVcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAZXh0ZW5kcyBQSVhJLk9iamVjdFJlbmRlcmVyXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcn0gVGhlIHJlbmRlcmVyIHRoaXMgc3ByaXRlIGJhdGNoIHdvcmtzIGZvci5cbiAqL1xuZnVuY3Rpb24gU3ByaXRlUmVuZGVyZXIocmVuZGVyZXIpXG57XG4gICAgT2JqZWN0UmVuZGVyZXIuY2FsbCh0aGlzLCByZW5kZXJlcik7XG5cbiAgICAvKipcbiAgICAgKiBOdW1iZXIgb2YgdmFsdWVzIHNlbnQgaW4gdGhlIHZlcnRleCBidWZmZXIuXG4gICAgICogcG9zaXRpb25YLCBwb3NpdGlvblksIGNvbG9yUiwgY29sb3JHLCBjb2xvckIgPSA1XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy52ZXJ0U2l6ZSA9IDU7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgc2l6ZSBvZiB0aGUgdmVydGV4IGluZm9ybWF0aW9uIGluIGJ5dGVzLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMudmVydEJ5dGVTaXplID0gdGhpcy52ZXJ0U2l6ZSAqIDQ7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgbnVtYmVyIG9mIGltYWdlcyBpbiB0aGUgU3ByaXRlQmF0Y2ggYmVmb3JlIGl0IGZsdXNoZXMuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy5zaXplID0gQ09OU1QuU1BSSVRFX0JBVENIX1NJWkU7IC8vIDIwMDAgaXMgYSBuaWNlIGJhbGFuY2UgYmV0d2VlbiBtb2JpbGUgLyBkZXNrdG9wXG5cbiAgICAvLyB0aGUgdG90YWwgbnVtYmVyIG9mIGJ5dGVzIGluIG91ciBiYXRjaFxuICAgIHZhciBudW1WZXJ0cyA9ICh0aGlzLnNpemUgKiA0KSAqIHRoaXMudmVydEJ5dGVTaXplO1xuXG4gICAgLy8gdGhlIHRvdGFsIG51bWJlciBvZiBpbmRpY2VzIGluIG91ciBiYXRjaCwgdGhlcmUgYXJlIDYgcG9pbnRzIHBlciBxdWFkLlxuICAgIHZhciBudW1JbmRpY2VzID0gdGhpcy5zaXplICogNjtcblxuICAgIC8qKlxuICAgICAqIEhvbGRzIHRoZSB2ZXJ0ZXggZGF0YSB0aGF0IHdpbGwgYmUgc2VudCB0byB0aGUgdmVydGV4IHNoYWRlci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge0FycmF5QnVmZmVyfVxuICAgICAqL1xuICAgIHRoaXMudmVydGljZXMgPSBuZXcgQXJyYXlCdWZmZXIobnVtVmVydHMpO1xuXG4gICAgLyoqXG4gICAgICogVmlldyBvbiB0aGUgdmVydGljZXMgYXMgYSBGbG9hdDMyQXJyYXkgZm9yIHBvc2l0aW9uc1xuICAgICAqXG4gICAgICogQG1lbWJlciB7RmxvYXQzMkFycmF5fVxuICAgICAqL1xuICAgIHRoaXMucG9zaXRpb25zID0gbmV3IEZsb2F0MzJBcnJheSh0aGlzLnZlcnRpY2VzKTtcbiAgICBcbiAgICAvKipcbiAgICAgKiBWaWV3IG9uIHRoZSB2ZXJ0aWNlcyBhcyBhIFVpbnQzMkFycmF5IGZvciB1dnNcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge0Zsb2F0MzJBcnJheX1cbiAgICAgKi9cbiAgICB0aGlzLnV2cyA9IG5ldyBVaW50MzJBcnJheSh0aGlzLnZlcnRpY2VzKTtcblxuICAgIC8qKlxuICAgICAqIFZpZXcgb24gdGhlIHZlcnRpY2VzIGFzIGEgVWludDMyQXJyYXkgZm9yIGNvbG9yc1xuICAgICAqXG4gICAgICogQG1lbWJlciB7VWludDMyQXJyYXl9XG4gICAgICovXG4gICAgdGhpcy5jb2xvcnMgPSBuZXcgVWludDMyQXJyYXkodGhpcy52ZXJ0aWNlcyk7XG5cbiAgICAvKipcbiAgICAgKiBIb2xkcyB0aGUgaW5kaWNlcyBvZiB0aGUgZ2VvbWV0cnkgKHF1YWRzKSB0byBkcmF3XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtVaW50MTZBcnJheX1cbiAgICAgKi9cbiAgICB0aGlzLmluZGljZXMgPSBjcmVhdGVJbmRpY2VzRm9yUXVhZHModGhpcy5zaXplKVxuXG4gICAgLyoqXG4gICAgICogVGhlIGRlZmF1bHQgc2hhZGVyIHRoYXQgaXMgdXNlZCBpZiBhIHNwcml0ZSBkb2Vzbid0IGhhdmUgYSBtb3JlIHNwZWNpZmljIG9uZS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuU2hhZGVyfVxuICAgICAqL1xuICAgIHRoaXMuc2hhZGVyID0gbnVsbDtcblxuICAgIHRoaXMudGV4dHVyZUNvdW50ID0gMDtcbiAgICB0aGlzLmN1cnJlbnRJbmRleCA9IDA7XG4gIFxuICAgIHRoaXMuZ3JvdXBDb3VudCA9IDA7XG4gICAgdGhpcy5ncm91cHMgPSBbXTtcbiAgICBcbiAgICAvL1RPRE8gLSAzMDAgaXMgYSBiaXQgbWFnaWMsIGZpZ3VyZSBvdXQgYSBuaWNlciBhbW91bnQhXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLnNpemU7IGkrKykgXG4gICAge1xuICAgICAgICB0aGlzLmdyb3Vwc1tpXSA9IHt0ZXh0dXJlczpbXSwgdGV4dHVyZUNvdW50OjAsIGlkczpbXSwgc2l6ZTowLCBzdGFydDowLCBibGVuZDowfTsgXG4gICAgfTtcbiAgICBcbiAgICB0aGlzLmN1cnJlbnRHcm91cCA9IHRoaXMuZ3JvdXBzW3RoaXMuZ3JvdXBDb3VudCsrXTtcblxuICAgIHRoaXMuY3VycmVudFRleHR1cmUgPSBudWxsOyAgICBcbn1cblxuXG5TcHJpdGVSZW5kZXJlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKE9iamVjdFJlbmRlcmVyLnByb3RvdHlwZSk7XG5TcHJpdGVSZW5kZXJlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBTcHJpdGVSZW5kZXJlcjtcbm1vZHVsZS5leHBvcnRzID0gU3ByaXRlUmVuZGVyZXI7XG5cbldlYkdMUmVuZGVyZXIucmVnaXN0ZXJQbHVnaW4oJ3Nwcml0ZScsIFNwcml0ZVJlbmRlcmVyKTtcblxuLyoqXG4gKiBTZXRzIHVwIHRoZSByZW5kZXJlciBjb250ZXh0IGFuZCBuZWNlc3NhcnkgYnVmZmVycy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIGdsIHtXZWJHTFJlbmRlcmluZ0NvbnRleHR9IHRoZSBjdXJyZW50IFdlYkdMIGRyYXdpbmcgY29udGV4dFxuICovXG5TcHJpdGVSZW5kZXJlci5wcm90b3R5cGUub25Db250ZXh0Q2hhbmdlID0gZnVuY3Rpb24gKClcbntcbiAgICB2YXIgZ2wgPSB0aGlzLnJlbmRlcmVyLmdsO1xuXG4gICAgdGhpcy5NQVhfVEVYVFVFUyA9IGdsLmdldFBhcmFtZXRlcihnbC5NQVhfVEVYVFVSRV9JTUFHRV9VTklUUyk7XG5cbiAgICB0aGlzLl9zaGFkZXIgPSBnZW5lcmF0ZU11bHRpVGV4dHVyZVNoYWRlcihnbCwgdGhpcy5NQVhfVEVYVFVFUykvL25ldyBUZXh0dXJlU2hhZGVyKGdsKTtcblxuICAgIC8vIHNldHVwIGRlZmF1bHQgc2hhZGVyXG4gICAgdGhpcy5zaGFkZXIgPSB0aGlzLnJlbmRlcmVyLnNoYWRlck1hbmFnZXIuZGVmYXVsdFNoYWRlcjtcblxuICAgIC8vIGNyZWF0ZSBhIGNvdXBsZSBvZiBidWZmZXJzXG4gICAgdGhpcy52ZXJ0ZXhCdWZmZXIgPSBnbENvcmUuR0xCdWZmZXIuY3JlYXRlVmVydGV4QnVmZmVyKGdsLCBudWxsLCBnbC5EWU5BTUlDX0RSQVcpO1xuICAgIHRoaXMuaW5kZXhCdWZmZXIgPSBnbENvcmUuR0xCdWZmZXIuY3JlYXRlSW5kZXhCdWZmZXIoZ2wsIHRoaXMuaW5kaWNlcywgZ2wuU1RBVElDX0RSQVcpO1xuXG4gICAgLy8gYnVpbGQgdGhlIHZhbyBvYmplY3QgdGhhdCB3aWxsIHJlbmRlci4uXG4gICAgdGhpcy52YW8gPSBuZXcgZ2xDb3JlLlZlcnRleEFycmF5T2JqZWN0KGdsKTtcblxuICAgIHRoaXMudmFvLmFkZEluZGV4KHRoaXMuaW5kZXhCdWZmZXIpO1xuICAgIHRoaXMudmFvLmFkZEF0dHJpYnV0ZSh0aGlzLnZlcnRleEJ1ZmZlciwgdGhpcy5fc2hhZGVyLmF0dHJpYnV0ZXMuYVZlcnRleFBvc2l0aW9uLCBnbC5GTE9BVCwgZmFsc2UsIHRoaXMudmVydEJ5dGVTaXplLCAwKTtcbiAgICB0aGlzLnZhby5hZGRBdHRyaWJ1dGUodGhpcy52ZXJ0ZXhCdWZmZXIsIHRoaXMuX3NoYWRlci5hdHRyaWJ1dGVzLmFUZXh0dXJlQ29vcmQsIGdsLlVOU0lHTkVEX1NIT1JULCB0cnVlLCB0aGlzLnZlcnRCeXRlU2l6ZSwgMiAqIDQpO1xuICAgIHRoaXMudmFvLmFkZEF0dHJpYnV0ZSh0aGlzLnZlcnRleEJ1ZmZlciwgdGhpcy5fc2hhZGVyLmF0dHJpYnV0ZXMuYUNvbG9yLCBnbC5VTlNJR05FRF9CWVRFLCB0cnVlLCB0aGlzLnZlcnRCeXRlU2l6ZSwgMyAqIDQpO1xuICAgIHRoaXMudmFvLmFkZEF0dHJpYnV0ZSh0aGlzLnZlcnRleEJ1ZmZlciwgdGhpcy5fc2hhZGVyLmF0dHJpYnV0ZXMuYVRleHR1cmVJZCwgZ2wuRkxPQVQsIGZhbHNlLCB0aGlzLnZlcnRCeXRlU2l6ZSwgNCAqIDQpO1xuXG4gICAgdGhpcy5jdXJyZW50QmxlbmRNb2RlID0gOTk5OTk7XG59O1xuXG4vKipcbiAqIFJlbmRlcnMgdGhlIHNwcml0ZSBvYmplY3QuXG4gKlxuICogQHBhcmFtIHNwcml0ZSB7UElYSS5TcHJpdGV9IHRoZSBzcHJpdGUgdG8gcmVuZGVyIHdoZW4gdXNpbmcgdGhpcyBzcHJpdGViYXRjaFxuICovXG5TcHJpdGVSZW5kZXJlci5wcm90b3R5cGUucmVuZGVyID0gZnVuY3Rpb24gKHNwcml0ZSlcbntcbiAgICAvL1RPRE8gc2V0IGJsZW5kIG1vZGVzLi5cbiAgICAvLyBjaGVjayB0ZXh0dXJlLi5cbiAgICBpZiAodGhpcy5jdXJyZW50SW5kZXggPj0gdGhpcy5zaXplKVxuICAgIHtcbiAgICAgICAgdGhpcy5mbHVzaCgpO1xuICAgIH1cblxuICBcbiAgICAvLyBnZXQgdGhlIHV2cyBmb3IgdGhlIHRleHR1cmVcbiAgIFxuXG4gICAgLy8gaWYgdGhlIHV2cyBoYXZlIG5vdCB1cGRhdGVkIHRoZW4gbm8gcG9pbnQgcmVuZGVyaW5nIGp1c3QgeWV0IVxuICAgIGlmICghc3ByaXRlLnRleHR1cmUuX3V2cylcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAgLy8gcHVzaCBhIHRleHR1cmUuXG4gICAgLy8gaW5jcmVtZW50IHRoZSBiYXRjaHNpemVcbiAgICB2YXIgbmV4dFRleHR1cmUgPSAgc3ByaXRlLnRleHR1cmUuYmFzZVRleHR1cmU7XG4gICAgdmFyIGN1cnJlbnRHcm91cCA9IHRoaXMuY3VycmVudEdyb3VwO1xuICAgIHZhciBpO1xuXG4gICAgaWYodGhpcy5jdXJyZW50VGV4dHVyZSAhPT0gbmV4dFRleHR1cmUpXG4gICAge1xuICAgICAgICB0aGlzLmN1cnJlbnRUZXh0dXJlID0gbmV4dFRleHR1cmU7XG4gICAgICAgIFxuICAgICAgICBpZighbmV4dFRleHR1cmUuX2VuYWJsZWQpXG4gICAgICAgIHtcbiAgICAgICAgICAgIG5leHRUZXh0dXJlLl9lbmFibGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIG5leHRUZXh0dXJlLl9pZCA9IHRoaXMudGV4dHVyZUNvdW50O1xuICAgICAgICAgICAgXG4gICAgICAgICAgICBpZih0aGlzLnRleHR1cmVDb3VudCA9PT0gdGhpcy5NQVhfVEVYVFVFUylcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBmb3IgKCBpID0gMDsgaSA8IGN1cnJlbnRHcm91cC50ZXh0dXJlQ291bnQ7IGkrKykgXG4gICAgICAgICAgICAgICAgeyAgICAgXG4gICAgICAgICAgICAgICAgICAgIGN1cnJlbnRHcm91cC50ZXh0dXJlc1tpXS5fZW5hYmxlZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICB0aGlzLnRleHR1cmVDb3VudCA9IDA7XG5cbiAgICAgICAgICAgICAgICBjdXJyZW50R3JvdXAuc2l6ZSA9IHRoaXMuY3VycmVudEluZGV4IC0gY3VycmVudEdyb3VwLnN0YXJ0O1xuICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgY3VycmVudEdyb3VwID0gdGhpcy5jdXJyZW50R3JvdXAgPSB0aGlzLmdyb3Vwc1t0aGlzLmdyb3VwQ291bnQrK107XG4gICAgICAgICAgICAgICAgY3VycmVudEdyb3VwLnRleHR1cmVDb3VudCA9IDA7XG4gICAgICAgICAgICAgICAgY3VycmVudEdyb3VwLnN0YXJ0ID0gdGhpcy5jdXJyZW50SW5kZXg7XG4gICAgICAgICAgICAgICAgXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGN1cnJlbnRHcm91cC50ZXh0dXJlc1tjdXJyZW50R3JvdXAudGV4dHVyZUNvdW50KytdID0gbmV4dFRleHR1cmU7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnRleHR1cmVDb3VudCsrO1xuICAgIH1cblxuICAgIC8vIFRPRE8gdHJpbT8/XG4gICAgdmFyIGluZGV4ID0gdGhpcy5jdXJyZW50SW5kZXggKiB0aGlzLnZlcnRCeXRlU2l6ZTtcblxuICAgIHRoaXMuY3VycmVudEluZGV4Kys7XG5cbiAgICAvLyB1cGxvYWQgdGhlIHNwcml0ZSBlbGVtZXRucy4uLlxuICAgIC8vIHRoZXkgaGF2ZSBhbGwgcmVhZHkgYmVlbiBjYWxjdWxhdGVkIHNvIHdlIGp1c3QgbmVlZCB0byBwdXNoIHRoZW0gaW50byB0aGUgYnVmZmVyLlxuICAgIHZhciBjb2xvcnMgPSB0aGlzLmNvbG9ycztcbiAgICB2YXIgcG9zaXRpb25zID0gdGhpcy5wb3NpdGlvbnM7XG4gICAgdmFyIHZlcnRleERhdGEgPSBzcHJpdGUudmVydGV4RGF0YVxuICAgIHZhciB0aW50ID0gKHNwcml0ZS50aW50ID4+IDE2KSArIChzcHJpdGUudGludCAmIDB4ZmYwMCkgKyAoKHNwcml0ZS50aW50ICYgMHhmZikgPDwgMTYpICsgKHNwcml0ZS53b3JsZEFscGhhICogMjU1IDw8IDI0KTtcbiAgICB2YXIgdXZzID0gc3ByaXRlLnRleHR1cmUuX3V2cy51dnNfdWludDMyO1xuICAgIC8veHlcbiAgICBwb3NpdGlvbnNbaW5kZXgrK10gPSB2ZXJ0ZXhEYXRhWzBdO1xuICAgIHBvc2l0aW9uc1tpbmRleCsrXSA9IHZlcnRleERhdGFbMV07XG4gICAgdGhpcy51dnNbaW5kZXgrK10gPSB1dnNbMF07XG4gICAgY29sb3JzW2luZGV4KytdID0gdGludDtcbiAgICBwb3NpdGlvbnNbaW5kZXgrK10gPSBuZXh0VGV4dHVyZS5faWQ7IFxuICAgIFxuICAgIC8vIHh5XG4gICAgcG9zaXRpb25zW2luZGV4KytdID0gdmVydGV4RGF0YVsyXTtcbiAgICBwb3NpdGlvbnNbaW5kZXgrK10gPSB2ZXJ0ZXhEYXRhWzNdO1xuICAgIHRoaXMudXZzW2luZGV4KytdID0gdXZzWzFdO1xuICAgIGNvbG9yc1tpbmRleCsrXSA9IHRpbnQ7XG4gICAgcG9zaXRpb25zW2luZGV4KytdID0gbmV4dFRleHR1cmUuX2lkO1xuXG4gICAgIC8vIHh5XG4gICAgcG9zaXRpb25zW2luZGV4KytdID0gdmVydGV4RGF0YVs0XTtcbiAgICBwb3NpdGlvbnNbaW5kZXgrK10gPSB2ZXJ0ZXhEYXRhWzVdO1xuICAgIHRoaXMudXZzW2luZGV4KytdID0gdXZzWzJdO1xuICAgIGNvbG9yc1tpbmRleCsrXSA9IHRpbnQ7XG4gICAgcG9zaXRpb25zW2luZGV4KytdID0gbmV4dFRleHR1cmUuX2lkO1xuXG4gICAgLy8geHlcbiAgICBwb3NpdGlvbnNbaW5kZXgrK10gPSB2ZXJ0ZXhEYXRhWzZdO1xuICAgIHBvc2l0aW9uc1tpbmRleCsrXSA9IHZlcnRleERhdGFbN107XG4gICAgdGhpcy51dnNbaW5kZXgrK10gPSB1dnNbM107XG4gICAgY29sb3JzW2luZGV4KytdID0gdGludDtcbiAgICBwb3NpdGlvbnNbaW5kZXgrK10gPSBuZXh0VGV4dHVyZS5faWQ7XG59O1xuXG4vKipcbiAqIFJlbmRlcnMgdGhlIGNvbnRlbnQgYW5kIGVtcHRpZXMgdGhlIGN1cnJlbnQgYmF0Y2guXG4gKlxuICovXG5TcHJpdGVSZW5kZXJlci5wcm90b3R5cGUuZmx1c2ggPSBmdW5jdGlvbiAoKVxue1xuICAgIGlmICh0aGlzLmN1cnJlbnRJbmRleCA9PT0gMClyZXR1cm47XG5cbiAgICB2YXIgZ2wgPSB0aGlzLnJlbmRlcmVyLmdsO1xuXG5cbiAgICB0aGlzLmN1cnJlbnRHcm91cC5zaXplID0gdGhpcy5jdXJyZW50SW5kZXggLSB0aGlzLmN1cnJlbnRHcm91cC5zdGFydDtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuY3VycmVudEdyb3VwLnRleHR1cmVDb3VudDsgaSsrKSBcbiAgICB7ICAgICBcbiAgICAgICAgdGhpcy5jdXJyZW50R3JvdXAudGV4dHVyZXNbaV0uX2VuYWJsZWQgPSBmYWxzZTtcbiAgICB9O1xuICAgXG4gICAgLy8gZG8gc29tZSBzbWFydCBhcnJheSBzdHVmZi4uXG4gICAgLy8gZG91YmxlIHNpemUgc28gd2UgZG9udCBhbHdheSBzdWJhcnJheSB0aGUgZWxlbWVudHMuLlxuICAgIC8vIHVwbG9hZCB0aGUgdmVydHMgdG8gdGhlIGJ1ZmZlclxuICAgIGlmICh0aGlzLmN1cnJlbnRCYXRjaFNpemUgPiAoIHRoaXMuc2l6ZSAqIDAuNSApIClcbiAgICB7XG4gICAgICAgIHRoaXMudmVydGV4QnVmZmVyLnVwbG9hZCh0aGlzLnZlcnRpY2VzLCAwLCB0cnVlKTtcbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgLy8gbyBrIC4uIHN1YiBhcnJheSBpcyBTTE9XPj9cbiAgICAgICAgdmFyIHZpZXcgPSB0aGlzLnBvc2l0aW9ucy5zdWJhcnJheSgwLCB0aGlzLmN1cnJlbnRJbmRleCAqIHRoaXMudmVydEJ5dGVTaXplKTtcbiAgICAgICAgdGhpcy52ZXJ0ZXhCdWZmZXIudXBsb2FkKHZpZXcsIDAsIHRydWUpO1xuICAgIH1cblxuICAgIC8vIGJpbmQgc2hhZGVyLi5cbiAgICB0aGlzLnJlbmRlcmVyLmJpbmRTaGFkZXIodGhpcy5fc2hhZGVyKTtcbiAgICB0aGlzLnJlbmRlcmVyLmJsZW5kTW9kZU1hbmFnZXIuc2V0QmxlbmRNb2RlKCAwICk7XG5cbiAgICAvLy8gcmVuZGVyIHRoZSBncm91cHMuLlxuICAgIGZvciAoaSA9IDA7IGkgPCB0aGlzLmdyb3VwQ291bnQ7IGkrKykge1xuICAgICAgICBcbiAgICAgICAgdmFyIGdyb3VwID0gdGhpcy5ncm91cHNbaV07XG5cbiAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBncm91cC50ZXh0dXJlQ291bnQ7IGorKykge1xuICAgICAgICAgICAgdGhpcy5yZW5kZXJlci5iaW5kVGV4dHVyZShncm91cC50ZXh0dXJlc1tqXSwgaik7XG4gICAgICAgIH07XG5cbiAgICAgICAgZ2wuZHJhd0VsZW1lbnRzKGdsLlRSSUFOR0xFUywgZ3JvdXAuc2l6ZSAqIDYsIGdsLlVOU0lHTkVEX1NIT1JULCBncm91cC5zdGFydCAqIDYgKiAyKTtcbiAgICB9O1xuXG4gICAgLy8gcmVzZXQgZWxlbWVudHMgZm9yIHRoZSBuZXh0IGZsdXNoXG4gICAgdGhpcy5jdXJyZW50VGV4dHVyZSA9IG51bGw7XG4gICAgdGhpcy5jdXJyZW50SW5kZXggPSAwO1xuICAgIHRoaXMudGV4dHVyZUNvdW50ID0gMDtcbiAgICB0aGlzLmdyb3VwQ291bnQgPSAwO1xuICAgIFxuICAgIHRoaXMuY3VycmVudEdyb3VwID0gdGhpcy5ncm91cHNbdGhpcy5ncm91cENvdW50KytdO1xuICAgIHRoaXMuY3VycmVudEdyb3VwLnRleHR1cmVDb3VudCA9IDA7XG59O1xuXG4vKipcbiAqIFN0YXJ0cyBhIG5ldyBzcHJpdGUgYmF0Y2guXG4gKlxuICovXG5TcHJpdGVSZW5kZXJlci5wcm90b3R5cGUuc3RhcnQgPSBmdW5jdGlvbiAoKVxue1xuICAgIHRoaXMudmFvLmJpbmQoKTtcbn07XG5cblNwcml0ZVJlbmRlcmVyLnByb3RvdHlwZS5zdG9wID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLmZsdXNoKCk7XG4gICAgdGhpcy52YW8udW5iaW5kKCk7XG59O1xuLyoqXG4gKiBEZXN0cm95cyB0aGUgU3ByaXRlQmF0Y2guXG4gKlxuICovXG5TcHJpdGVSZW5kZXJlci5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy52ZXJ0ZXhCdWZmZXIuZGVzdHJveSgpO1xuICAgIHRoaXMuaW5kZXhCdWZmZXIuZGVzdHJveSgpO1xuXG4gICAgT2JqZWN0UmVuZGVyZXIucHJvdG90eXBlLmRlc3Ryb3kuY2FsbCh0aGlzKTtcblxuICAgIHRoaXMuc2hhZGVyLmRlc3Ryb3koKTtcblxuICAgIHRoaXMucmVuZGVyZXIgPSBudWxsO1xuXG4gICAgdGhpcy52ZXJ0aWNlcyA9IG51bGw7XG4gICAgdGhpcy5wb3NpdGlvbnMgPSBudWxsO1xuICAgIHRoaXMuY29sb3JzID0gbnVsbDtcbiAgICB0aGlzLmluZGljZXMgPSBudWxsO1xuXG4gICAgdGhpcy52ZXJ0ZXhCdWZmZXIgPSBudWxsO1xuICAgIHRoaXMuaW5kZXhCdWZmZXIgPSBudWxsO1xuXG4gICAgdGhpcy5zcHJpdGVzID0gbnVsbDtcbiAgICB0aGlzLnNoYWRlciA9IG51bGw7XG59O1xuIiwidmFyIFNoYWRlciA9IHJlcXVpcmUoJ3BpeGktZ2wtY29yZScpLkdMU2hhZGVyO1xuXG5cbmZ1bmN0aW9uIGdlbmVyYXRlTXVsdGlUZXh0dXJlU2hhZGVyKGdsLCBtYXhUZXh0dXJlcylcbntcbiAgICB2YXIgdmVydGV4U3JjID0gXCJwcmVjaXNpb24gbG93cCBmbG9hdDtcXG5hdHRyaWJ1dGUgdmVjMiBhVmVydGV4UG9zaXRpb247XFxuYXR0cmlidXRlIHZlYzIgYVRleHR1cmVDb29yZDtcXG5hdHRyaWJ1dGUgdmVjNCBhQ29sb3I7XFxuYXR0cmlidXRlIGZsb2F0IGFUZXh0dXJlSWQ7XFxuXFxudW5pZm9ybSBtYXQzIHByb2plY3Rpb25NYXRyaXg7XFxuXFxudmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7XFxudmFyeWluZyB2ZWM0IHZDb2xvcjtcXG52YXJ5aW5nIGZsb2F0IHZUZXh0dXJlSWQ7XFxuXFxudm9pZCBtYWluKHZvaWQpe1xcbiAgIGdsX1Bvc2l0aW9uID0gdmVjNCgocHJvamVjdGlvbk1hdHJpeCAqIHZlYzMoYVZlcnRleFBvc2l0aW9uLCAxLjApKS54eSwgMC4wLCAxLjApO1xcbiAgIHZUZXh0dXJlQ29vcmQgPSBhVGV4dHVyZUNvb3JkO1xcbiAgIHZUZXh0dXJlSWQgPSBhVGV4dHVyZUlkO1xcbiAgIHZDb2xvciA9IHZlYzQoYUNvbG9yLnJnYiAqIGFDb2xvci5hLCBhQ29sb3IuYSk7XFxufVwiO1xuICAgIHZhciBmcmFnbWVudFNyYyA9ICdwcmVjaXNpb24gbG93cCBmbG9hdDtcXG5cXG4nICsgZ2VuZXJhdGVTYW1wbGVTcmMobWF4VGV4dHVyZXMpICsgXCJcXG5cXG5cIiArIGZyYWdUZW1wbGF0ZVxuXG4gICAgZnJhZ21lbnRTcmMgPSBmcmFnbWVudFNyYy5yZXBsYWNlKC9cXCVcXCUvZ2ksICcxNicpO1xuXG4gICAgdmFyIHNoYWRlciA9IG5ldyBTaGFkZXIoZ2wsIHZlcnRleFNyYywgZnJhZ21lbnRTcmMpO1xuXG5cbiAgICB2YXIgc2FtcGxlVmFsdWVzID0gW107XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBtYXhUZXh0dXJlczsgaSsrKSB7XG4gICAgICAgIHNhbXBsZVZhbHVlc1tpXSA9IGk7XG4gICAgfTtcblxuICAgIHNoYWRlci5iaW5kKCk7XG4gICAgc2hhZGVyLnVuaWZvcm1zLnVTYW1wbGVycyA9IHNhbXBsZVZhbHVlcztcblxuICAgIHJldHVybiBzaGFkZXI7XG59XG5cbmZ1bmN0aW9uIGdlbmVyYXRlU2FtcGxlU3JjKG1heFRleHR1cmVzKVxue1xuICAgIHZhciBzcmMgPSAndmVjNCBnZXRTYW1wbGVGcm9tQXJyYXkoc2FtcGxlcjJEIHRleHR1cmVzWyUlXSwgaW50IG5keCwgdmVjMiB1dikge1xcblxcbnZlYzQgY29sb3I7J1xuXG4gICAgc3JjICs9ICdcXG4nO1xuICAgIHNyYyArPSAnXFxuJztcbiAgICBcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG1heFRleHR1cmVzOyBpKyspIFxuICAgIHtcbiAgICAgICAgaWYoaSA+IDApc3JjICs9ICdcXG5lbHNlICc7XG4gICAgICAgIGlmKGkgPCBtYXhUZXh0dXJlcy0xKXNyYyArPSAnaWYobmR4ID09ICcgKyBpICsgJyknO1xuICAgICAgICBzcmMgKz0gJ1xcbnsnO1xuICAgICAgICBzcmMgKz0gJ1xcblxcdGNvbG9yID0gdGV4dHVyZTJEKHRleHR1cmVzWycraSsnXSwgdXYpOyc7XG4gICAgICAgIHNyYyArPSAnXFxufSc7XG4gICAgfTtcblxuICAgIHNyYyArPSAnXFxuJztcbiAgICBzcmMgKz0gJ1xcbic7XG4gICAgc3JjICs9ICdyZXR1cm4gY29sb3I7JztcbiAgICBzcmMgKz0gJ1xcbn0nO1xuXG4gICAgcmV0dXJuIHNyYztcbn1cblxudmFyIGZyYWdUZW1wbGF0ZSA9IFtcblxuICAgICd2YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDsnLFxuICAgICd2YXJ5aW5nIHZlYzQgdkNvbG9yOycsXG4gICAgJ3ZhcnlpbmcgZmxvYXQgdlRleHR1cmVJZDsnLFxuICAgICd1bmlmb3JtIHNhbXBsZXIyRCB1U2FtcGxlcnNbJSVdOycsXG5cbiAgICAndm9pZCBtYWluKHZvaWQpeycsXG4gICAgICAgICdnbF9GcmFnQ29sb3IgPSBnZXRTYW1wbGVGcm9tQXJyYXkodVNhbXBsZXJzLCBpbnQodlRleHR1cmVJZCksIHZUZXh0dXJlQ29vcmQpICogdkNvbG9yOycsXG4gICAgJ30nXG5dLmpvaW4oJ1xcbicpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGdlbmVyYXRlTXVsdGlUZXh0dXJlU2hhZGVyO1xuIiwidmFyIFNwcml0ZSA9IHJlcXVpcmUoJy4uL3Nwcml0ZXMvU3ByaXRlJyksXG4gICAgVGV4dHVyZSA9IHJlcXVpcmUoJy4uL3RleHR1cmVzL1RleHR1cmUnKSxcbiAgICBtYXRoID0gcmVxdWlyZSgnLi4vbWF0aCcpLFxuICAgIHV0aWxzID0gcmVxdWlyZSgnLi4vdXRpbHMnKSxcbiAgICBDT05TVCA9IHJlcXVpcmUoJy4uL2NvbnN0Jyk7XG5cbi8qKlxuICogQSBUZXh0IE9iamVjdCB3aWxsIGNyZWF0ZSBhIGxpbmUgb3IgbXVsdGlwbGUgbGluZXMgb2YgdGV4dC4gVG8gc3BsaXQgYSBsaW5lIHlvdSBjYW4gdXNlICdcXG4nIGluIHlvdXIgdGV4dCBzdHJpbmcsXG4gKiBvciBhZGQgYSB3b3JkV3JhcCBwcm9wZXJ0eSBzZXQgdG8gdHJ1ZSBhbmQgYW5kIHdvcmRXcmFwV2lkdGggcHJvcGVydHkgd2l0aCBhIHZhbHVlIGluIHRoZSBzdHlsZSBvYmplY3QuXG4gKlxuICogQSBUZXh0IGNhbiBiZSBjcmVhdGVkIGRpcmVjdGx5IGZyb20gYSBzdHJpbmcgYW5kIGEgc3R5bGUgb2JqZWN0XG4gKlxuICogYGBganNcbiAqIHZhciB0ZXh0ID0gbmV3IFBJWEkuVGV4dCgnVGhpcyBpcyBhIHBpeGkgdGV4dCcse2ZvbnQgOiAnMjRweCBBcmlhbCcsIGZpbGwgOiAweGZmMTAxMCwgYWxpZ24gOiAnY2VudGVyJ30pO1xuICogYGBgXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLlNwcml0ZVxuICogQG1lbWJlcm9mIFBJWElcbiAqIEBwYXJhbSB0ZXh0IHtzdHJpbmd9IFRoZSBjb3B5IHRoYXQgeW91IHdvdWxkIGxpa2UgdGhlIHRleHQgdG8gZGlzcGxheVxuICogQHBhcmFtIFtzdHlsZV0ge29iamVjdH0gVGhlIHN0eWxlIHBhcmFtZXRlcnNcbiAqIEBwYXJhbSBbc3R5bGUuZm9udF0ge3N0cmluZ30gZGVmYXVsdCAnYm9sZCAyMHB4IEFyaWFsJyBUaGUgc3R5bGUgYW5kIHNpemUgb2YgdGhlIGZvbnRcbiAqIEBwYXJhbSBbc3R5bGUuZmlsbD0nYmxhY2snXSB7U3RyaW5nfE51bWJlcn0gQSBjYW52YXMgZmlsbHN0eWxlIHRoYXQgd2lsbCBiZSB1c2VkIG9uIHRoZSB0ZXh0IGUuZyAncmVkJywgJyMwMEZGMDAnXG4gKiBAcGFyYW0gW3N0eWxlLmFsaWduPSdsZWZ0J10ge3N0cmluZ30gQWxpZ25tZW50IGZvciBtdWx0aWxpbmUgdGV4dCAoJ2xlZnQnLCAnY2VudGVyJyBvciAncmlnaHQnKSwgZG9lcyBub3QgYWZmZWN0IHNpbmdsZSBsaW5lIHRleHRcbiAqIEBwYXJhbSBbc3R5bGUuc3Ryb2tlXSB7U3RyaW5nfE51bWJlcn0gQSBjYW52YXMgZmlsbHN0eWxlIHRoYXQgd2lsbCBiZSB1c2VkIG9uIHRoZSB0ZXh0IHN0cm9rZSBlLmcgJ2JsdWUnLCAnI0ZDRkYwMCdcbiAqIEBwYXJhbSBbc3R5bGUuc3Ryb2tlVGhpY2tuZXNzPTBdIHtudW1iZXJ9IEEgbnVtYmVyIHRoYXQgcmVwcmVzZW50cyB0aGUgdGhpY2tuZXNzIG9mIHRoZSBzdHJva2UuIERlZmF1bHQgaXMgMCAobm8gc3Ryb2tlKVxuICogQHBhcmFtIFtzdHlsZS53b3JkV3JhcD1mYWxzZV0ge2Jvb2xlYW59IEluZGljYXRlcyBpZiB3b3JkIHdyYXAgc2hvdWxkIGJlIHVzZWRcbiAqIEBwYXJhbSBbc3R5bGUud29yZFdyYXBXaWR0aD0xMDBdIHtudW1iZXJ9IFRoZSB3aWR0aCBhdCB3aGljaCB0ZXh0IHdpbGwgd3JhcCwgaXQgbmVlZHMgd29yZFdyYXAgdG8gYmUgc2V0IHRvIHRydWVcbiAqIEBwYXJhbSBbc3R5bGUubGluZUhlaWdodF0ge251bWJlcn0gVGhlIGxpbmUgaGVpZ2h0LCBhIG51bWJlciB0aGF0IHJlcHJlc2VudHMgdGhlIHZlcnRpY2FsIHNwYWNlIHRoYXQgYSBsZXR0ZXIgdXNlc1xuICogQHBhcmFtIFtzdHlsZS5kcm9wU2hhZG93PWZhbHNlXSB7Ym9vbGVhbn0gU2V0IGEgZHJvcCBzaGFkb3cgZm9yIHRoZSB0ZXh0XG4gKiBAcGFyYW0gW3N0eWxlLmRyb3BTaGFkb3dDb2xvcj0nIzAwMDAwMCddIHtzdHJpbmd9IEEgZmlsbCBzdHlsZSB0byBiZSB1c2VkIG9uIHRoZSBkcm9wc2hhZG93IGUuZyAncmVkJywgJyMwMEZGMDAnXG4gKiBAcGFyYW0gW3N0eWxlLmRyb3BTaGFkb3dBbmdsZT1NYXRoLlBJLzRdIHtudW1iZXJ9IFNldCBhIGFuZ2xlIG9mIHRoZSBkcm9wIHNoYWRvd1xuICogQHBhcmFtIFtzdHlsZS5kcm9wU2hhZG93RGlzdGFuY2U9NV0ge251bWJlcn0gU2V0IGEgZGlzdGFuY2Ugb2YgdGhlIGRyb3Agc2hhZG93XG4gKiBAcGFyYW0gW3N0eWxlLmRyb3BTaGFkb3dCbHVyPTBdIHtudW1iZXJ9IFNldCBhIHNoYWRvdyBibHVyIHJhZGl1c1xuICogQHBhcmFtIFtzdHlsZS5wYWRkaW5nPTBdIHtudW1iZXJ9IE9jY2FzaW9uYWxseSBzb21lIGZvbnRzIGFyZSBjcm9wcGVkIG9uIHRvcCBvciBib3R0b20uIEFkZGluZyBzb21lIHBhZGRpbmcgd2lsbFxuICogICAgICBwcmV2ZW50IHRoaXMgZnJvbSBoYXBwZW5pbmcgYnkgYWRkaW5nIHBhZGRpbmcgdG8gdGhlIHRvcCBhbmQgYm90dG9tIG9mIHRleHQgaGVpZ2h0LlxuICogQHBhcmFtIFtzdHlsZS50ZXh0QmFzZWxpbmU9J2FscGhhYmV0aWMnXSB7c3RyaW5nfSBUaGUgYmFzZWxpbmUgb2YgdGhlIHRleHQgdGhhdCBpcyByZW5kZXJlZC5cbiAqIEBwYXJhbSBbc3R5bGUubGluZUpvaW49J21pdGVyJ10ge3N0cmluZ30gVGhlIGxpbmVKb2luIHByb3BlcnR5IHNldHMgdGhlIHR5cGUgb2YgY29ybmVyIGNyZWF0ZWQsIGl0IGNhbiByZXNvbHZlXG4gKiAgICAgIHNwaWtlZCB0ZXh0IGlzc3Vlcy4gRGVmYXVsdCBpcyAnbWl0ZXInIChjcmVhdGVzIGEgc2hhcnAgY29ybmVyKS5cbiAqIEBwYXJhbSBbc3R5bGUubWl0ZXJMaW1pdD0xMF0ge251bWJlcn0gVGhlIG1pdGVyIGxpbWl0IHRvIHVzZSB3aGVuIHVzaW5nIHRoZSAnbWl0ZXInIGxpbmVKb2luIG1vZGUuIFRoaXMgY2FuIHJlZHVjZVxuICogICAgICBvciBpbmNyZWFzZSB0aGUgc3Bpa2luZXNzIG9mIHJlbmRlcmVkIHRleHQuXG4gKi9cbmZ1bmN0aW9uIFRleHQodGV4dCwgc3R5bGUsIHJlc29sdXRpb24pXG57XG4gICAgLyoqXG4gICAgICogVGhlIGNhbnZhcyBlbGVtZW50IHRoYXQgZXZlcnl0aGluZyBpcyBkcmF3biB0b1xuICAgICAqXG4gICAgICogQG1lbWJlciB7SFRNTENhbnZhc0VsZW1lbnR9XG4gICAgICovXG4gICAgdGhpcy5jYW52YXMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdjYW52YXMnKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBjYW52YXMgMmQgY29udGV4dCB0aGF0IGV2ZXJ5dGhpbmcgaXMgZHJhd24gd2l0aFxuICAgICAqIEBtZW1iZXIge0hUTUxDYW52YXNFbGVtZW50fVxuICAgICAqL1xuICAgIHRoaXMuY29udGV4dCA9IHRoaXMuY2FudmFzLmdldENvbnRleHQoJzJkJyk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgcmVzb2x1dGlvbiBvZiB0aGUgY2FudmFzLlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLnJlc29sdXRpb24gPSByZXNvbHV0aW9uIHx8IENPTlNULlJFU09MVVRJT047XG5cbiAgICAvKipcbiAgICAgKiBQcml2YXRlIHRyYWNrZXIgZm9yIHRoZSBjdXJyZW50IHRleHQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtzdHJpbmd9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl90ZXh0ID0gbnVsbDtcblxuICAgIC8qKlxuICAgICAqIFByaXZhdGUgdHJhY2tlciBmb3IgdGhlIGN1cnJlbnQgc3R5bGUuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtvYmplY3R9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9zdHlsZSA9IG51bGw7XG5cbiAgICB2YXIgdGV4dHVyZSA9IFRleHR1cmUuZnJvbUNhbnZhcyh0aGlzLmNhbnZhcyk7XG4gICAgdGV4dHVyZS50cmltID0gbmV3IG1hdGguUmVjdGFuZ2xlKCk7XG4gICAgU3ByaXRlLmNhbGwodGhpcywgdGV4dHVyZSk7XG5cbiAgICB0aGlzLnRleHQgPSB0ZXh0O1xuICAgIHRoaXMuc3R5bGUgPSBzdHlsZTtcbn1cblxuLy8gY29uc3RydWN0b3JcblRleHQucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShTcHJpdGUucHJvdG90eXBlKTtcblRleHQucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gVGV4dDtcbm1vZHVsZS5leHBvcnRzID0gVGV4dDtcblxuVGV4dC5mb250UHJvcGVydGllc0NhY2hlID0ge307XG5UZXh0LmZvbnRQcm9wZXJ0aWVzQ2FudmFzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnY2FudmFzJyk7XG5UZXh0LmZvbnRQcm9wZXJ0aWVzQ29udGV4dCA9IFRleHQuZm9udFByb3BlcnRpZXNDYW52YXMuZ2V0Q29udGV4dCgnMmQnKTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoVGV4dC5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBUaGUgd2lkdGggb2YgdGhlIFRleHQsIHNldHRpbmcgdGhpcyB3aWxsIGFjdHVhbGx5IG1vZGlmeSB0aGUgc2NhbGUgdG8gYWNoaWV2ZSB0aGUgdmFsdWUgc2V0XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuVGV4dCNcbiAgICAgKi9cbiAgICB3aWR0aDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmRpcnR5KVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlVGV4dCgpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5zY2FsZS54ICogdGhpcy5fdGV4dHVyZS5fZnJhbWUud2lkdGg7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnNjYWxlLnggPSB2YWx1ZSAvIHRoaXMuX3RleHR1cmUuX2ZyYW1lLndpZHRoO1xuICAgICAgICAgICAgdGhpcy5fd2lkdGggPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBUaGUgaGVpZ2h0IG9mIHRoZSBUZXh0LCBzZXR0aW5nIHRoaXMgd2lsbCBhY3R1YWxseSBtb2RpZnkgdGhlIHNjYWxlIHRvIGFjaGlldmUgdGhlIHZhbHVlIHNldFxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLlRleHQjXG4gICAgICovXG4gICAgaGVpZ2h0OiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgaWYgKHRoaXMuZGlydHkpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdGhpcy51cGRhdGVUZXh0KCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiAgdGhpcy5zY2FsZS55ICogdGhpcy5fdGV4dHVyZS5fZnJhbWUuaGVpZ2h0O1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5zY2FsZS55ID0gdmFsdWUgLyB0aGlzLl90ZXh0dXJlLl9mcmFtZS5oZWlnaHQ7XG4gICAgICAgICAgICB0aGlzLl9oZWlnaHQgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBTZXQgdGhlIHN0eWxlIG9mIHRoZSB0ZXh0XG4gICAgICpcbiAgICAgKiBAcGFyYW0gW3N0eWxlXSB7b2JqZWN0fSBUaGUgc3R5bGUgcGFyYW1ldGVyc1xuICAgICAqIEBwYXJhbSBbc3R5bGUuZm9udD0nYm9sZCAyMHB0IEFyaWFsJ10ge3N0cmluZ30gVGhlIHN0eWxlIGFuZCBzaXplIG9mIHRoZSBmb250XG4gICAgICogQHBhcmFtIFtzdHlsZS5maWxsPSdibGFjayddIHtzdHJpbmd8bnVtYmVyfSBBIGNhbnZhcyBmaWxsc3R5bGUgdGhhdCB3aWxsIGJlIHVzZWQgb24gdGhlIHRleHQgZWcgJ3JlZCcsICcjMDBGRjAwJ1xuICAgICAqIEBwYXJhbSBbc3R5bGUuYWxpZ249J2xlZnQnXSB7c3RyaW5nfSBBbGlnbm1lbnQgZm9yIG11bHRpbGluZSB0ZXh0ICgnbGVmdCcsICdjZW50ZXInIG9yICdyaWdodCcpLCBkb2VzIG5vdCBhZmZlY3Qgc2luZ2xlIGxpbmUgdGV4dFxuICAgICAqIEBwYXJhbSBbc3R5bGUuc3Ryb2tlPSdibGFjayddIHtzdHJpbmd8bnVtYmVyfSBBIGNhbnZhcyBmaWxsc3R5bGUgdGhhdCB3aWxsIGJlIHVzZWQgb24gdGhlIHRleHQgc3Ryb2tlIGVnICdibHVlJywgJyNGQ0ZGMDAnXG4gICAgICogQHBhcmFtIFtzdHlsZS5zdHJva2VUaGlja25lc3M9MF0ge251bWJlcn0gQSBudW1iZXIgdGhhdCByZXByZXNlbnRzIHRoZSB0aGlja25lc3Mgb2YgdGhlIHN0cm9rZS4gRGVmYXVsdCBpcyAwIChubyBzdHJva2UpXG4gICAgICogQHBhcmFtIFtzdHlsZS53b3JkV3JhcD1mYWxzZV0ge2Jvb2xlYW59IEluZGljYXRlcyBpZiB3b3JkIHdyYXAgc2hvdWxkIGJlIHVzZWRcbiAgICAgKiBAcGFyYW0gW3N0eWxlLndvcmRXcmFwV2lkdGg9MTAwXSB7bnVtYmVyfSBUaGUgd2lkdGggYXQgd2hpY2ggdGV4dCB3aWxsIHdyYXBcbiAgICAgKiBAcGFyYW0gW3N0eWxlLmxpbmVIZWlnaHRdIHtudW1iZXJ9IFRoZSBsaW5lIGhlaWdodCwgYSBudW1iZXIgdGhhdCByZXByZXNlbnRzIHRoZSB2ZXJ0aWNhbCBzcGFjZSB0aGF0IGEgbGV0dGVyIHVzZXNcbiAgICAgKiBAcGFyYW0gW3N0eWxlLmRyb3BTaGFkb3c9ZmFsc2VdIHtib29sZWFufSBTZXQgYSBkcm9wIHNoYWRvdyBmb3IgdGhlIHRleHRcbiAgICAgKiBAcGFyYW0gW3N0eWxlLmRyb3BTaGFkb3dDb2xvcj0nIzAwMDAwMCddIHtzdHJpbmd8bnVtYmVyfSBBIGZpbGwgc3R5bGUgdG8gYmUgdXNlZCBvbiB0aGUgZHJvcHNoYWRvdyBlLmcgJ3JlZCcsICcjMDBGRjAwJ1xuICAgICAqIEBwYXJhbSBbc3R5bGUuZHJvcFNoYWRvd0FuZ2xlPU1hdGguUEkvNl0ge251bWJlcn0gU2V0IGEgYW5nbGUgb2YgdGhlIGRyb3Agc2hhZG93XG4gICAgICogQHBhcmFtIFtzdHlsZS5kcm9wU2hhZG93RGlzdGFuY2U9NV0ge251bWJlcn0gU2V0IGEgZGlzdGFuY2Ugb2YgdGhlIGRyb3Agc2hhZG93XG4gICAgICogQHBhcmFtIFtzdHlsZS5kcm9wU2hhZG93Qmx1cj0wXSB7bnVtYmVyfSBTZXQgYSBzaGFkb3cgYmx1ciByYWRpdXNcbiAgICAgKiBAcGFyYW0gW3N0eWxlLnBhZGRpbmc9MF0ge251bWJlcn0gT2NjYXNpb25hbGx5IHNvbWUgZm9udHMgYXJlIGNyb3BwZWQgb24gdG9wIG9yIGJvdHRvbS4gQWRkaW5nIHNvbWUgcGFkZGluZyB3aWxsXG4gICAgICogICAgICBwcmV2ZW50IHRoaXMgZnJvbSBoYXBwZW5pbmcgYnkgYWRkaW5nIHBhZGRpbmcgdG8gdGhlIHRvcCBhbmQgYm90dG9tIG9mIHRleHQgaGVpZ2h0LlxuICAgICAqIEBwYXJhbSBbc3R5bGUudGV4dEJhc2VsaW5lPSdhbHBoYWJldGljJ10ge3N0cmluZ30gVGhlIGJhc2VsaW5lIG9mIHRoZSB0ZXh0IHRoYXQgaXMgcmVuZGVyZWQuXG4gICAgICogQHBhcmFtIFtzdHlsZS5saW5lSm9pbj0nbWl0ZXInXSB7c3RyaW5nfSBUaGUgbGluZUpvaW4gcHJvcGVydHkgc2V0cyB0aGUgdHlwZSBvZiBjb3JuZXIgY3JlYXRlZCwgaXQgY2FuIHJlc29sdmVcbiAgICAgKiAgICAgIHNwaWtlZCB0ZXh0IGlzc3Vlcy4gRGVmYXVsdCBpcyAnbWl0ZXInIChjcmVhdGVzIGEgc2hhcnAgY29ybmVyKS5cbiAgICAgKiBAcGFyYW0gW3N0eWxlLm1pdGVyTGltaXQ9MTBdIHtudW1iZXJ9IFRoZSBtaXRlciBsaW1pdCB0byB1c2Ugd2hlbiB1c2luZyB0aGUgJ21pdGVyJyBsaW5lSm9pbiBtb2RlLiBUaGlzIGNhbiByZWR1Y2VcbiAgICAgKiAgICAgIG9yIGluY3JlYXNlIHRoZSBzcGlraW5lc3Mgb2YgcmVuZGVyZWQgdGV4dC5cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5UZXh0I1xuICAgICAqL1xuICAgIHN0eWxlOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3N0eWxlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uIChzdHlsZSlcbiAgICAgICAge1xuICAgICAgICAgICAgc3R5bGUgPSBzdHlsZSB8fCB7fTtcblxuICAgICAgICAgICAgaWYgKHR5cGVvZiBzdHlsZS5maWxsID09PSAnbnVtYmVyJykge1xuICAgICAgICAgICAgICAgIHN0eWxlLmZpbGwgPSB1dGlscy5oZXgyc3RyaW5nKHN0eWxlLmZpbGwpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAodHlwZW9mIHN0eWxlLnN0cm9rZSA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgICAgICAgICBzdHlsZS5zdHJva2UgPSB1dGlscy5oZXgyc3RyaW5nKHN0eWxlLnN0cm9rZSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICh0eXBlb2Ygc3R5bGUuZHJvcFNoYWRvd0NvbG9yID09PSAnbnVtYmVyJykge1xuICAgICAgICAgICAgICAgIHN0eWxlLmRyb3BTaGFkb3dDb2xvciA9IHV0aWxzLmhleDJzdHJpbmcoc3R5bGUuZHJvcFNoYWRvd0NvbG9yKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgc3R5bGUuZm9udCA9IHN0eWxlLmZvbnQgfHwgJ2JvbGQgMjBwdCBBcmlhbCc7XG4gICAgICAgICAgICBzdHlsZS5maWxsID0gc3R5bGUuZmlsbCB8fCAnYmxhY2snO1xuICAgICAgICAgICAgc3R5bGUuYWxpZ24gPSBzdHlsZS5hbGlnbiB8fCAnbGVmdCc7XG4gICAgICAgICAgICBzdHlsZS5zdHJva2UgPSBzdHlsZS5zdHJva2UgfHwgJ2JsYWNrJzsgLy9wcm92aWRlIGEgZGVmYXVsdCwgc2VlOiBodHRwczovL2dpdGh1Yi5jb20vcGl4aWpzL3BpeGkuanMvaXNzdWVzLzEzNlxuICAgICAgICAgICAgc3R5bGUuc3Ryb2tlVGhpY2tuZXNzID0gc3R5bGUuc3Ryb2tlVGhpY2tuZXNzIHx8IDA7XG4gICAgICAgICAgICBzdHlsZS53b3JkV3JhcCA9IHN0eWxlLndvcmRXcmFwIHx8IGZhbHNlO1xuICAgICAgICAgICAgc3R5bGUud29yZFdyYXBXaWR0aCA9IHN0eWxlLndvcmRXcmFwV2lkdGggfHwgMTAwO1xuXG4gICAgICAgICAgICBzdHlsZS5kcm9wU2hhZG93ID0gc3R5bGUuZHJvcFNoYWRvdyB8fCBmYWxzZTtcbiAgICAgICAgICAgIHN0eWxlLmRyb3BTaGFkb3dDb2xvciA9IHN0eWxlLmRyb3BTaGFkb3dDb2xvciB8fCAnIzAwMDAwMCc7XG4gICAgICAgICAgICBzdHlsZS5kcm9wU2hhZG93QW5nbGUgPSBzdHlsZS5kcm9wU2hhZG93QW5nbGUgIT09IHVuZGVmaW5lZCA/IHN0eWxlLmRyb3BTaGFkb3dBbmdsZSA6IE1hdGguUEkgLyA2O1xuICAgICAgICAgICAgc3R5bGUuZHJvcFNoYWRvd0Rpc3RhbmNlID0gc3R5bGUuZHJvcFNoYWRvd0Rpc3RhbmNlICE9PSB1bmRlZmluZWQgPyBzdHlsZS5kcm9wU2hhZG93RGlzdGFuY2UgOiA1O1xuICAgICAgICAgICAgc3R5bGUuZHJvcFNoYWRvd0JsdXIgPSBzdHlsZS5kcm9wU2hhZG93Qmx1ciAhPT0gdW5kZWZpbmVkID8gc3R5bGUuZHJvcFNoYWRvd0JsdXIgOiAwOyAvL3NoYWRvd0JsdXIgaXMgJzAnIGJ5IGRlZmF1bHQgYWNjb3JkaW5nIHRvIEhUTUxcblxuICAgICAgICAgICAgc3R5bGUucGFkZGluZyA9IHN0eWxlLnBhZGRpbmcgfHwgMDtcblxuICAgICAgICAgICAgc3R5bGUudGV4dEJhc2VsaW5lID0gc3R5bGUudGV4dEJhc2VsaW5lIHx8ICdhbHBoYWJldGljJztcblxuICAgICAgICAgICAgc3R5bGUubGluZUpvaW4gPSBzdHlsZS5saW5lSm9pbiB8fCAnbWl0ZXInO1xuICAgICAgICAgICAgc3R5bGUubWl0ZXJMaW1pdCA9IHN0eWxlLm1pdGVyTGltaXQgfHwgMTA7XG5cbiAgICAgICAgICAgIHRoaXMuX3N0eWxlID0gc3R5bGU7XG4gICAgICAgICAgICB0aGlzLmRpcnR5ID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBTZXQgdGhlIGNvcHkgZm9yIHRoZSB0ZXh0IG9iamVjdC4gVG8gc3BsaXQgYSBsaW5lIHlvdSBjYW4gdXNlICdcXG4nLlxuICAgICAqXG4gICAgICogQHBhcmFtIHRleHQge3N0cmluZ30gVGhlIGNvcHkgdGhhdCB5b3Ugd291bGQgbGlrZSB0aGUgdGV4dCB0byBkaXNwbGF5XG4gICAgICogQG1lbWJlcm9mIFBJWEkuVGV4dCNcbiAgICAgKi9cbiAgICB0ZXh0OiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24oKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fdGV4dDtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodGV4dCl7XG4gICAgICAgICAgICB0ZXh0ID0gdGV4dC50b1N0cmluZygpIHx8ICcgJztcbiAgICAgICAgICAgIGlmICh0aGlzLl90ZXh0ID09PSB0ZXh0KVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuX3RleHQgPSB0ZXh0O1xuICAgICAgICAgICAgdGhpcy5kaXJ0eSA9IHRydWU7XG4gICAgICAgIH1cbiAgICB9XG59KTtcblxuLyoqXG4gKiBSZW5kZXJzIHRleHQgYW5kIHVwZGF0ZXMgaXQgd2hlbiBuZWVkZWRcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5UZXh0LnByb3RvdHlwZS51cGRhdGVUZXh0ID0gZnVuY3Rpb24gKClcbntcbiAgICB2YXIgc3R5bGUgPSB0aGlzLl9zdHlsZTtcbiAgICB0aGlzLmNvbnRleHQuZm9udCA9IHN0eWxlLmZvbnQ7XG5cbiAgICAvLyB3b3JkIHdyYXBcbiAgICAvLyBwcmVzZXJ2ZSBvcmlnaW5hbCB0ZXh0XG4gICAgdmFyIG91dHB1dFRleHQgPSBzdHlsZS53b3JkV3JhcCA/IHRoaXMud29yZFdyYXAodGhpcy5fdGV4dCkgOiB0aGlzLl90ZXh0O1xuXG4gICAgLy8gc3BsaXQgdGV4dCBpbnRvIGxpbmVzXG4gICAgdmFyIGxpbmVzID0gb3V0cHV0VGV4dC5zcGxpdCgvKD86XFxyXFxufFxccnxcXG4pLyk7XG5cbiAgICAvLyBjYWxjdWxhdGUgdGV4dCB3aWR0aFxuICAgIHZhciBsaW5lV2lkdGhzID0gbmV3IEFycmF5KGxpbmVzLmxlbmd0aCk7XG4gICAgdmFyIG1heExpbmVXaWR0aCA9IDA7XG4gICAgdmFyIGZvbnRQcm9wZXJ0aWVzID0gdGhpcy5kZXRlcm1pbmVGb250UHJvcGVydGllcyhzdHlsZS5mb250KTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxpbmVzLmxlbmd0aDsgaSsrKVxuICAgIHtcbiAgICAgICAgdmFyIGxpbmVXaWR0aCA9IHRoaXMuY29udGV4dC5tZWFzdXJlVGV4dChsaW5lc1tpXSkud2lkdGg7XG4gICAgICAgIGxpbmVXaWR0aHNbaV0gPSBsaW5lV2lkdGg7XG4gICAgICAgIG1heExpbmVXaWR0aCA9IE1hdGgubWF4KG1heExpbmVXaWR0aCwgbGluZVdpZHRoKTtcbiAgICB9XG5cbiAgICB2YXIgd2lkdGggPSBtYXhMaW5lV2lkdGggKyBzdHlsZS5zdHJva2VUaGlja25lc3M7XG4gICAgaWYgKHN0eWxlLmRyb3BTaGFkb3cpXG4gICAge1xuICAgICAgICB3aWR0aCArPSBzdHlsZS5kcm9wU2hhZG93RGlzdGFuY2U7XG4gICAgfVxuXG4gICAgdGhpcy5jYW52YXMud2lkdGggPSAoIHdpZHRoICsgdGhpcy5jb250ZXh0LmxpbmVXaWR0aCApICogdGhpcy5yZXNvbHV0aW9uO1xuXG4gICAgLy8gY2FsY3VsYXRlIHRleHQgaGVpZ2h0XG4gICAgdmFyIGxpbmVIZWlnaHQgPSB0aGlzLnN0eWxlLmxpbmVIZWlnaHQgfHwgZm9udFByb3BlcnRpZXMuZm9udFNpemUgKyBzdHlsZS5zdHJva2VUaGlja25lc3M7XG5cbiAgICB2YXIgaGVpZ2h0ID0gbGluZUhlaWdodCAqIGxpbmVzLmxlbmd0aDtcbiAgICBpZiAoc3R5bGUuZHJvcFNoYWRvdylcbiAgICB7XG4gICAgICAgIGhlaWdodCArPSBzdHlsZS5kcm9wU2hhZG93RGlzdGFuY2U7XG4gICAgfVxuXG4gICAgdGhpcy5jYW52YXMuaGVpZ2h0ID0gKCBoZWlnaHQgKyB0aGlzLl9zdHlsZS5wYWRkaW5nICogMiApICogdGhpcy5yZXNvbHV0aW9uO1xuXG4gICAgdGhpcy5jb250ZXh0LnNjYWxlKCB0aGlzLnJlc29sdXRpb24sIHRoaXMucmVzb2x1dGlvbik7XG5cbiAgICBpZiAobmF2aWdhdG9yLmlzQ29jb29uSlMpXG4gICAge1xuICAgICAgICB0aGlzLmNvbnRleHQuY2xlYXJSZWN0KDAsIDAsIHRoaXMuY2FudmFzLndpZHRoLCB0aGlzLmNhbnZhcy5oZWlnaHQpO1xuXG4gICAgfVxuXG4gICAgLy90aGlzLmNvbnRleHQuZmlsbFN0eWxlPVwiI0ZGMDAwMFwiO1xuICAgIC8vdGhpcy5jb250ZXh0LmZpbGxSZWN0KDAsIDAsIHRoaXMuY2FudmFzLndpZHRoLCB0aGlzLmNhbnZhcy5oZWlnaHQpO1xuXG4gICAgdGhpcy5jb250ZXh0LmZvbnQgPSBzdHlsZS5mb250O1xuICAgIHRoaXMuY29udGV4dC5zdHJva2VTdHlsZSA9IHN0eWxlLnN0cm9rZTtcbiAgICB0aGlzLmNvbnRleHQubGluZVdpZHRoID0gc3R5bGUuc3Ryb2tlVGhpY2tuZXNzO1xuICAgIHRoaXMuY29udGV4dC50ZXh0QmFzZWxpbmUgPSBzdHlsZS50ZXh0QmFzZWxpbmU7XG4gICAgdGhpcy5jb250ZXh0LmxpbmVKb2luID0gc3R5bGUubGluZUpvaW47XG4gICAgdGhpcy5jb250ZXh0Lm1pdGVyTGltaXQgPSBzdHlsZS5taXRlckxpbWl0O1xuXG4gICAgdmFyIGxpbmVQb3NpdGlvblg7XG4gICAgdmFyIGxpbmVQb3NpdGlvblk7XG5cbiAgICBpZiAoc3R5bGUuZHJvcFNoYWRvdylcbiAgICB7XG4gICAgICAgIGlmIChzdHlsZS5kcm9wU2hhZG93Qmx1ciA+IDApIHtcbiAgICAgICAgICAgIHRoaXMuY29udGV4dC5zaGFkb3dDb2xvciA9IHN0eWxlLmRyb3BTaGFkb3dDb2xvcjtcbiAgICAgICAgICAgIHRoaXMuY29udGV4dC5zaGFkb3dCbHVyID0gc3R5bGUuZHJvcFNoYWRvd0JsdXI7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmNvbnRleHQuZmlsbFN0eWxlID0gc3R5bGUuZHJvcFNoYWRvd0NvbG9yO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIHhTaGFkb3dPZmZzZXQgPSBNYXRoLmNvcyhzdHlsZS5kcm9wU2hhZG93QW5nbGUpICogc3R5bGUuZHJvcFNoYWRvd0Rpc3RhbmNlO1xuICAgICAgICB2YXIgeVNoYWRvd09mZnNldCA9IE1hdGguc2luKHN0eWxlLmRyb3BTaGFkb3dBbmdsZSkgKiBzdHlsZS5kcm9wU2hhZG93RGlzdGFuY2U7XG5cbiAgICAgICAgZm9yIChpID0gMDsgaSA8IGxpbmVzLmxlbmd0aDsgaSsrKVxuICAgICAgICB7XG4gICAgICAgICAgICBsaW5lUG9zaXRpb25YID0gc3R5bGUuc3Ryb2tlVGhpY2tuZXNzIC8gMjtcbiAgICAgICAgICAgIGxpbmVQb3NpdGlvblkgPSAoc3R5bGUuc3Ryb2tlVGhpY2tuZXNzIC8gMiArIGkgKiBsaW5lSGVpZ2h0KSArIGZvbnRQcm9wZXJ0aWVzLmFzY2VudDtcblxuICAgICAgICAgICAgaWYgKHN0eWxlLmFsaWduID09PSAncmlnaHQnKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGxpbmVQb3NpdGlvblggKz0gbWF4TGluZVdpZHRoIC0gbGluZVdpZHRoc1tpXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKHN0eWxlLmFsaWduID09PSAnY2VudGVyJylcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBsaW5lUG9zaXRpb25YICs9IChtYXhMaW5lV2lkdGggLSBsaW5lV2lkdGhzW2ldKSAvIDI7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChzdHlsZS5maWxsKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHRoaXMuY29udGV4dC5maWxsVGV4dChsaW5lc1tpXSwgbGluZVBvc2l0aW9uWCArIHhTaGFkb3dPZmZzZXQsIGxpbmVQb3NpdGlvblkgKyB5U2hhZG93T2Zmc2V0ICsgdGhpcy5fc3R5bGUucGFkZGluZyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvL3NldCBjYW52YXMgdGV4dCBzdHlsZXNcbiAgICB0aGlzLmNvbnRleHQuZmlsbFN0eWxlID0gc3R5bGUuZmlsbDtcblxuICAgIC8vZHJhdyBsaW5lcyBsaW5lIGJ5IGxpbmVcbiAgICBmb3IgKGkgPSAwOyBpIDwgbGluZXMubGVuZ3RoOyBpKyspXG4gICAge1xuICAgICAgICBsaW5lUG9zaXRpb25YID0gc3R5bGUuc3Ryb2tlVGhpY2tuZXNzIC8gMjtcbiAgICAgICAgbGluZVBvc2l0aW9uWSA9IChzdHlsZS5zdHJva2VUaGlja25lc3MgLyAyICsgaSAqIGxpbmVIZWlnaHQpICsgZm9udFByb3BlcnRpZXMuYXNjZW50O1xuXG4gICAgICAgIGlmIChzdHlsZS5hbGlnbiA9PT0gJ3JpZ2h0JylcbiAgICAgICAge1xuICAgICAgICAgICAgbGluZVBvc2l0aW9uWCArPSBtYXhMaW5lV2lkdGggLSBsaW5lV2lkdGhzW2ldO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHN0eWxlLmFsaWduID09PSAnY2VudGVyJylcbiAgICAgICAge1xuICAgICAgICAgICAgbGluZVBvc2l0aW9uWCArPSAobWF4TGluZVdpZHRoIC0gbGluZVdpZHRoc1tpXSkgLyAyO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHN0eWxlLnN0cm9rZSAmJiBzdHlsZS5zdHJva2VUaGlja25lc3MpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuY29udGV4dC5zdHJva2VUZXh0KGxpbmVzW2ldLCBsaW5lUG9zaXRpb25YLCBsaW5lUG9zaXRpb25ZICsgdGhpcy5fc3R5bGUucGFkZGluZyk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoc3R5bGUuZmlsbClcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5jb250ZXh0LmZpbGxUZXh0KGxpbmVzW2ldLCBsaW5lUG9zaXRpb25YLCBsaW5lUG9zaXRpb25ZICsgdGhpcy5fc3R5bGUucGFkZGluZyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLnVwZGF0ZVRleHR1cmUoKTtcbn07XG5cbi8qKlxuICogVXBkYXRlcyB0ZXh0dXJlIHNpemUgYmFzZWQgb24gY2FudmFzIHNpemVcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5UZXh0LnByb3RvdHlwZS51cGRhdGVUZXh0dXJlID0gZnVuY3Rpb24gKClcbntcbiAgICB2YXIgdGV4dHVyZSA9IHRoaXMuX3RleHR1cmU7XG5cbiAgICB0ZXh0dXJlLmJhc2VUZXh0dXJlLmhhc0xvYWRlZCA9IHRydWU7XG4gICAgdGV4dHVyZS5iYXNlVGV4dHVyZS5yZXNvbHV0aW9uID0gdGhpcy5yZXNvbHV0aW9uO1xuXG4gICAgdGV4dHVyZS5iYXNlVGV4dHVyZS53aWR0aCA9IHRoaXMuY2FudmFzLndpZHRoIC8gdGhpcy5yZXNvbHV0aW9uO1xuICAgIHRleHR1cmUuYmFzZVRleHR1cmUuaGVpZ2h0ID0gdGhpcy5jYW52YXMuaGVpZ2h0IC8gdGhpcy5yZXNvbHV0aW9uO1xuICAgIHRleHR1cmUuY3JvcC53aWR0aCA9IHRleHR1cmUuX2ZyYW1lLndpZHRoID0gdGhpcy5jYW52YXMud2lkdGggLyB0aGlzLnJlc29sdXRpb247XG4gICAgdGV4dHVyZS5jcm9wLmhlaWdodCA9IHRleHR1cmUuX2ZyYW1lLmhlaWdodCA9IHRoaXMuY2FudmFzLmhlaWdodCAvIHRoaXMucmVzb2x1dGlvbjtcblxuICAgIHRleHR1cmUudHJpbS54ID0gMDtcbiAgICB0ZXh0dXJlLnRyaW0ueSA9IC10aGlzLl9zdHlsZS5wYWRkaW5nO1xuXG4gICAgdGV4dHVyZS50cmltLndpZHRoID0gdGV4dHVyZS5fZnJhbWUud2lkdGg7XG4gICAgdGV4dHVyZS50cmltLmhlaWdodCA9IHRleHR1cmUuX2ZyYW1lLmhlaWdodCAtIHRoaXMuX3N0eWxlLnBhZGRpbmcqMjtcblxuICAgIHRoaXMuX3dpZHRoID0gdGhpcy5jYW52YXMud2lkdGggLyB0aGlzLnJlc29sdXRpb247XG4gICAgdGhpcy5faGVpZ2h0ID0gdGhpcy5jYW52YXMuaGVpZ2h0IC8gdGhpcy5yZXNvbHV0aW9uO1xuXG4gICAgdGV4dHVyZS5iYXNlVGV4dHVyZS5lbWl0KCd1cGRhdGUnLCAgdGV4dHVyZS5iYXNlVGV4dHVyZSk7XG5cbiAgICB0aGlzLmRpcnR5ID0gZmFsc2U7XG59O1xuXG4vKipcbiAqIFJlbmRlcnMgdGhlIG9iamVjdCB1c2luZyB0aGUgV2ViR0wgcmVuZGVyZXJcbiAqXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcn1cbiAqL1xuVGV4dC5wcm90b3R5cGUucmVuZGVyV2ViR0wgPSBmdW5jdGlvbiAocmVuZGVyZXIpXG57XG4gICAgaWYgKHRoaXMuZGlydHkpXG4gICAge1xuICAgICAgICAvL3RoaXMucmVzb2x1dGlvbiA9IDEvL3JlbmRlcmVyLnJlc29sdXRpb247XG5cbiAgICAgICAgdGhpcy51cGRhdGVUZXh0KCk7XG4gICAgfVxuXG4gICAgU3ByaXRlLnByb3RvdHlwZS5yZW5kZXJXZWJHTC5jYWxsKHRoaXMsIHJlbmRlcmVyKTtcbn07XG5cbi8qKlxuICogUmVuZGVycyB0aGUgb2JqZWN0IHVzaW5nIHRoZSBDYW52YXMgcmVuZGVyZXJcbiAqXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuQ2FudmFzUmVuZGVyZXJ9XG4gKiBAcHJpdmF0ZVxuICovXG5UZXh0LnByb3RvdHlwZS5fcmVuZGVyQ2FudmFzID0gZnVuY3Rpb24gKHJlbmRlcmVyKVxue1xuICAgIGlmICh0aGlzLmRpcnR5KVxuICAgIHtcbiAgICAgLy8gICB0aGlzLnJlc29sdXRpb24gPSAxLy9yZW5kZXJlci5yZXNvbHV0aW9uO1xuXG4gICAgICAgIHRoaXMudXBkYXRlVGV4dCgpO1xuICAgIH1cblxuICAgIFNwcml0ZS5wcm90b3R5cGUuX3JlbmRlckNhbnZhcy5jYWxsKHRoaXMsIHJlbmRlcmVyKTtcbn07XG5cbi8qKlxuICogQ2FsY3VsYXRlcyB0aGUgYXNjZW50LCBkZXNjZW50IGFuZCBmb250U2l6ZSBvZiBhIGdpdmVuIGZvbnRTdHlsZVxuICpcbiAqIEBwYXJhbSBmb250U3R5bGUge29iamVjdH1cbiAqIEBwcml2YXRlXG4gKi9cblRleHQucHJvdG90eXBlLmRldGVybWluZUZvbnRQcm9wZXJ0aWVzID0gZnVuY3Rpb24gKGZvbnRTdHlsZSlcbntcbiAgICB2YXIgcHJvcGVydGllcyA9IFRleHQuZm9udFByb3BlcnRpZXNDYWNoZVtmb250U3R5bGVdO1xuXG4gICAgaWYgKCFwcm9wZXJ0aWVzKVxuICAgIHtcbiAgICAgICAgcHJvcGVydGllcyA9IHt9O1xuXG4gICAgICAgIHZhciBjYW52YXMgPSBUZXh0LmZvbnRQcm9wZXJ0aWVzQ2FudmFzO1xuICAgICAgICB2YXIgY29udGV4dCA9IFRleHQuZm9udFByb3BlcnRpZXNDb250ZXh0O1xuXG4gICAgICAgIGNvbnRleHQuZm9udCA9IGZvbnRTdHlsZTtcblxuICAgICAgICB2YXIgd2lkdGggPSBNYXRoLmNlaWwoY29udGV4dC5tZWFzdXJlVGV4dCgnfE3DiXEnKS53aWR0aCk7XG4gICAgICAgIHZhciBiYXNlbGluZSA9IE1hdGguY2VpbChjb250ZXh0Lm1lYXN1cmVUZXh0KCdNJykud2lkdGgpO1xuICAgICAgICB2YXIgaGVpZ2h0ID0gMiAqIGJhc2VsaW5lO1xuXG4gICAgICAgIGJhc2VsaW5lID0gYmFzZWxpbmUgKiAxLjQgfCAwO1xuXG4gICAgICAgIGNhbnZhcy53aWR0aCA9IHdpZHRoO1xuICAgICAgICBjYW52YXMuaGVpZ2h0ID0gaGVpZ2h0O1xuXG4gICAgICAgIGNvbnRleHQuZmlsbFN0eWxlID0gJyNmMDAnO1xuICAgICAgICBjb250ZXh0LmZpbGxSZWN0KDAsIDAsIHdpZHRoLCBoZWlnaHQpO1xuXG4gICAgICAgIGNvbnRleHQuZm9udCA9IGZvbnRTdHlsZTtcblxuICAgICAgICBjb250ZXh0LnRleHRCYXNlbGluZSA9ICdhbHBoYWJldGljJztcbiAgICAgICAgY29udGV4dC5maWxsU3R5bGUgPSAnIzAwMCc7XG4gICAgICAgIGNvbnRleHQuZmlsbFRleHQoJ3xNw4lxJywgMCwgYmFzZWxpbmUpO1xuXG4gICAgICAgIHZhciBpbWFnZWRhdGEgPSBjb250ZXh0LmdldEltYWdlRGF0YSgwLCAwLCB3aWR0aCwgaGVpZ2h0KS5kYXRhO1xuICAgICAgICB2YXIgcGl4ZWxzID0gaW1hZ2VkYXRhLmxlbmd0aDtcbiAgICAgICAgdmFyIGxpbmUgPSB3aWR0aCAqIDQ7XG5cbiAgICAgICAgdmFyIGksIGo7XG5cbiAgICAgICAgdmFyIGlkeCA9IDA7XG4gICAgICAgIHZhciBzdG9wID0gZmFsc2U7XG5cbiAgICAgICAgLy8gYXNjZW50LiBzY2FuIGZyb20gdG9wIHRvIGJvdHRvbSB1bnRpbCB3ZSBmaW5kIGEgbm9uIHJlZCBwaXhlbFxuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgYmFzZWxpbmU7IGkrKylcbiAgICAgICAge1xuICAgICAgICAgICAgZm9yIChqID0gMDsgaiA8IGxpbmU7IGogKz0gNClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBpZiAoaW1hZ2VkYXRhW2lkeCArIGpdICE9PSAyNTUpXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBzdG9wID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCFzdG9wKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGlkeCArPSBsaW5lO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcHJvcGVydGllcy5hc2NlbnQgPSBiYXNlbGluZSAtIGk7XG5cbiAgICAgICAgaWR4ID0gcGl4ZWxzIC0gbGluZTtcbiAgICAgICAgc3RvcCA9IGZhbHNlO1xuXG4gICAgICAgIC8vIGRlc2NlbnQuIHNjYW4gZnJvbSBib3R0b20gdG8gdG9wIHVudGlsIHdlIGZpbmQgYSBub24gcmVkIHBpeGVsXG4gICAgICAgIGZvciAoaSA9IGhlaWdodDsgaSA+IGJhc2VsaW5lOyBpLS0pXG4gICAgICAgIHtcbiAgICAgICAgICAgIGZvciAoaiA9IDA7IGogPCBsaW5lOyBqICs9IDQpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgaWYgKGltYWdlZGF0YVtpZHggKyBqXSAhPT0gMjU1KVxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgc3RvcCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghc3RvcClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBpZHggLT0gbGluZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHByb3BlcnRpZXMuZGVzY2VudCA9IGkgLSBiYXNlbGluZTtcbiAgICAgICAgcHJvcGVydGllcy5mb250U2l6ZSA9IHByb3BlcnRpZXMuYXNjZW50ICsgcHJvcGVydGllcy5kZXNjZW50O1xuXG4gICAgICAgIFRleHQuZm9udFByb3BlcnRpZXNDYWNoZVtmb250U3R5bGVdID0gcHJvcGVydGllcztcbiAgICB9XG5cbiAgICByZXR1cm4gcHJvcGVydGllcztcbn07XG5cbi8qKlxuICogQXBwbGllcyBuZXdsaW5lcyB0byBhIHN0cmluZyB0byBoYXZlIGl0IG9wdGltYWxseSBmaXQgaW50byB0aGUgaG9yaXpvbnRhbFxuICogYm91bmRzIHNldCBieSB0aGUgVGV4dCBvYmplY3QncyB3b3JkV3JhcFdpZHRoIHByb3BlcnR5LlxuICpcbiAqIEBwYXJhbSB0ZXh0IHtzdHJpbmd9XG4gKiBAcHJpdmF0ZVxuICovXG5UZXh0LnByb3RvdHlwZS53b3JkV3JhcCA9IGZ1bmN0aW9uICh0ZXh0KVxue1xuICAgIC8vIEdyZWVkeSB3cmFwcGluZyBhbGdvcml0aG0gdGhhdCB3aWxsIHdyYXAgd29yZHMgYXMgdGhlIGxpbmUgZ3Jvd3MgbG9uZ2VyXG4gICAgLy8gdGhhbiBpdHMgaG9yaXpvbnRhbCBib3VuZHMuXG4gICAgdmFyIHJlc3VsdCA9ICcnO1xuICAgIHZhciBsaW5lcyA9IHRleHQuc3BsaXQoJ1xcbicpO1xuICAgIHZhciB3b3JkV3JhcFdpZHRoID0gdGhpcy5fc3R5bGUud29yZFdyYXBXaWR0aDtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxpbmVzLmxlbmd0aDsgaSsrKVxuICAgIHtcbiAgICAgICAgdmFyIHNwYWNlTGVmdCA9IHdvcmRXcmFwV2lkdGg7XG4gICAgICAgIHZhciB3b3JkcyA9IGxpbmVzW2ldLnNwbGl0KCcgJyk7XG4gICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgd29yZHMubGVuZ3RoOyBqKyspXG4gICAgICAgIHtcbiAgICAgICAgICAgIHZhciB3b3JkV2lkdGggPSB0aGlzLmNvbnRleHQubWVhc3VyZVRleHQod29yZHNbal0pLndpZHRoO1xuICAgICAgICAgICAgdmFyIHdvcmRXaWR0aFdpdGhTcGFjZSA9IHdvcmRXaWR0aCArIHRoaXMuY29udGV4dC5tZWFzdXJlVGV4dCgnICcpLndpZHRoO1xuICAgICAgICAgICAgaWYgKGogPT09IDAgfHwgd29yZFdpZHRoV2l0aFNwYWNlID4gc3BhY2VMZWZ0KVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIC8vIFNraXAgcHJpbnRpbmcgdGhlIG5ld2xpbmUgaWYgaXQncyB0aGUgZmlyc3Qgd29yZCBvZiB0aGUgbGluZSB0aGF0IGlzXG4gICAgICAgICAgICAgICAgLy8gZ3JlYXRlciB0aGFuIHRoZSB3b3JkIHdyYXAgd2lkdGguXG4gICAgICAgICAgICAgICAgaWYgKGogPiAwKVxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0ICs9ICdcXG4nO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXN1bHQgKz0gd29yZHNbal07XG4gICAgICAgICAgICAgICAgc3BhY2VMZWZ0ID0gd29yZFdyYXBXaWR0aCAtIHdvcmRXaWR0aDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBzcGFjZUxlZnQgLT0gd29yZFdpZHRoV2l0aFNwYWNlO1xuICAgICAgICAgICAgICAgIHJlc3VsdCArPSAnICcgKyB3b3Jkc1tqXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChpIDwgbGluZXMubGVuZ3RoLTEpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJlc3VsdCArPSAnXFxuJztcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xufTtcblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBib3VuZHMgb2YgdGhlIFRleHQgYXMgYSByZWN0YW5nbGUuIFRoZSBib3VuZHMgY2FsY3VsYXRpb24gdGFrZXMgdGhlIHdvcmxkVHJhbnNmb3JtIGludG8gYWNjb3VudC5cbiAqXG4gKiBAcGFyYW0gbWF0cml4IHtQSVhJLk1hdHJpeH0gdGhlIHRyYW5zZm9ybWF0aW9uIG1hdHJpeCBvZiB0aGUgVGV4dFxuICogQHJldHVybiB7UElYSS5SZWN0YW5nbGV9IHRoZSBmcmFtaW5nIHJlY3RhbmdsZVxuICovXG5UZXh0LnByb3RvdHlwZS5nZXRCb3VuZHMgPSBmdW5jdGlvbiAobWF0cml4KVxue1xuICAgIGlmICh0aGlzLmRpcnR5KVxuICAgIHtcbiAgICAgICAgdGhpcy51cGRhdGVUZXh0KCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIFNwcml0ZS5wcm90b3R5cGUuZ2V0Qm91bmRzLmNhbGwodGhpcywgbWF0cml4KTtcbn07XG5cbi8qKlxuICogRGVzdHJveXMgdGhpcyB0ZXh0IG9iamVjdC5cbiAqXG4gKiBAcGFyYW0gW2Rlc3Ryb3lCYXNlVGV4dHVyZT10cnVlXSB7Ym9vbGVhbn0gd2hldGhlciB0byBkZXN0cm95IHRoZSBiYXNlIHRleHR1cmUgYXMgd2VsbFxuICovXG5UZXh0LnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKGRlc3Ryb3lCYXNlVGV4dHVyZSlcbntcbiAgICAvLyBtYWtlIHN1cmUgdG8gcmVzZXQgdGhlIHRoZSBjb250ZXh0IGFuZCBjYW52YXMuLiBkb250IHdhbnQgdGhpcyBoYW5naW5nIGFyb3VuZCBpbiBtZW1vcnkhXG4gICAgdGhpcy5jb250ZXh0ID0gbnVsbDtcbiAgICB0aGlzLmNhbnZhcyA9IG51bGw7XG5cbiAgICB0aGlzLl9zdHlsZSA9IG51bGw7XG5cbiAgICB0aGlzLl90ZXh0dXJlLmRlc3Ryb3koZGVzdHJveUJhc2VUZXh0dXJlID09PSB1bmRlZmluZWQgPyB0cnVlIDogZGVzdHJveUJhc2VUZXh0dXJlKTtcbn07XG4iLCJ2YXIgdXRpbHMgPSByZXF1aXJlKCcuLi91dGlscycpLFxuICAgIENPTlNUID0gcmVxdWlyZSgnLi4vY29uc3QnKSxcbiAgICBFdmVudEVtaXR0ZXIgPSByZXF1aXJlKCdldmVudGVtaXR0ZXIzJyk7XG5cbi8qKlxuICogQSB0ZXh0dXJlIHN0b3JlcyB0aGUgaW5mb3JtYXRpb24gdGhhdCByZXByZXNlbnRzIGFuIGltYWdlLiBBbGwgdGV4dHVyZXMgaGF2ZSBhIGJhc2UgdGV4dHVyZS5cbiAqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gc291cmNlIHtJbWFnZXxDYW52YXN9IHRoZSBzb3VyY2Ugb2JqZWN0IG9mIHRoZSB0ZXh0dXJlLlxuICogQHBhcmFtIFtzY2FsZU1vZGU9UElYSS5TQ0FMRV9NT0RFUy5ERUZBVUxUXSB7bnVtYmVyfSBTZWUge0BsaW5rIFBJWEkuU0NBTEVfTU9ERVN9IGZvciBwb3NzaWJsZSB2YWx1ZXNcbiAqIEBwYXJhbSByZXNvbHV0aW9uIHtudW1iZXJ9IHRoZSByZXNvbHV0aW9uIG9mIHRoZSB0ZXh0dXJlIGZvciBkZXZpY2VzIHdpdGggZGlmZmVyZW50IHBpeGVsIHJhdGlvc1xuICovXG5mdW5jdGlvbiBCYXNlVGV4dHVyZShzb3VyY2UsIHNjYWxlTW9kZSwgcmVzb2x1dGlvbilcbntcbiAgICBFdmVudEVtaXR0ZXIuY2FsbCh0aGlzKTtcblxuICAgIHRoaXMudWlkID0gdXRpbHMudWlkKCk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgUmVzb2x1dGlvbiBvZiB0aGUgdGV4dHVyZS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLnJlc29sdXRpb24gPSByZXNvbHV0aW9uIHx8IDE7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgd2lkdGggb2YgdGhlIGJhc2UgdGV4dHVyZSBzZXQgd2hlbiB0aGUgaW1hZ2UgaGFzIGxvYWRlZFxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEByZWFkT25seVxuICAgICAqL1xuICAgIHRoaXMud2lkdGggPSAxMDA7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgaGVpZ2h0IG9mIHRoZSBiYXNlIHRleHR1cmUgc2V0IHdoZW4gdGhlIGltYWdlIGhhcyBsb2FkZWRcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAcmVhZE9ubHlcbiAgICAgKi9cbiAgICB0aGlzLmhlaWdodCA9IDEwMDtcblxuICAgIC8vIFRPRE8gZG9jc1xuICAgIC8vIHVzZWQgdG8gc3RvcmUgdGhlIGFjdHVhbCBkaW1lbnNpb25zIG9mIHRoZSBzb3VyY2VcbiAgICAvKipcbiAgICAgKiBVc2VkIHRvIHN0b3JlIHRoZSBhY3R1YWwgd2lkdGggb2YgdGhlIHNvdXJjZSBvZiB0aGlzIHRleHR1cmVcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAcmVhZE9ubHlcbiAgICAgKi9cbiAgICB0aGlzLnJlYWxXaWR0aCA9IDEwMDtcbiAgICAvKipcbiAgICAgKiBVc2VkIHRvIHN0b3JlIHRoZSBhY3R1YWwgaGVpZ2h0IG9mIHRoZSBzb3VyY2Ugb2YgdGhpcyB0ZXh0dXJlXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQHJlYWRPbmx5XG4gICAgICovXG4gICAgdGhpcy5yZWFsSGVpZ2h0ID0gMTAwO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHNjYWxlIG1vZGUgdG8gYXBwbHkgd2hlbiBzY2FsaW5nIHRoaXMgdGV4dHVyZVxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IFBJWEkuU0NBTEVfTU9ERVMuTElORUFSXG4gICAgICogQHNlZSBQSVhJLlNDQUxFX01PREVTXG4gICAgICovXG4gICAgdGhpcy5zY2FsZU1vZGUgPSBzY2FsZU1vZGUgfHwgQ09OU1QuU0NBTEVfTU9ERVMuREVGQVVMVDtcblxuICAgIC8qKlxuICAgICAqIFNldCB0byB0cnVlIG9uY2UgdGhlIGJhc2UgdGV4dHVyZSBoYXMgc3VjY2Vzc2Z1bGx5IGxvYWRlZC5cbiAgICAgKlxuICAgICAqIFRoaXMgaXMgbmV2ZXIgdHJ1ZSBpZiB0aGUgdW5kZXJseWluZyBzb3VyY2UgZmFpbHMgdG8gbG9hZCBvciBoYXMgbm8gdGV4dHVyZSBkYXRhLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKiBAcmVhZE9ubHlcbiAgICAgKi9cbiAgICB0aGlzLmhhc0xvYWRlZCA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogU2V0IHRvIHRydWUgaWYgdGhlIHNvdXJjZSBpcyBjdXJyZW50bHkgbG9hZGluZy5cbiAgICAgKlxuICAgICAqIElmIGFuIEltYWdlIHNvdXJjZSBpcyBsb2FkaW5nIHRoZSAnbG9hZGVkJyBvciAnZXJyb3InIGV2ZW50IHdpbGwgYmVcbiAgICAgKiBkaXNwYXRjaGVkIHdoZW4gdGhlIG9wZXJhdGlvbiBlbmRzLiBBbiB1bmRlcnlsaW5nIHNvdXJjZSB0aGF0IGlzXG4gICAgICogaW1tZWRpYXRlbHktYXZhaWxhYmxlIGJ5cGFzc2VzIGxvYWRpbmcgZW50aXJlbHkuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqIEByZWFkb25seVxuICAgICAqL1xuICAgIHRoaXMuaXNMb2FkaW5nID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgaW1hZ2Ugc291cmNlIHRoYXQgaXMgdXNlZCB0byBjcmVhdGUgdGhlIHRleHR1cmUuXG4gICAgICpcbiAgICAgKiBUT0RPOiBNYWtlIHRoaXMgYSBzZXR0ZXIgdGhhdCBjYWxscyBsb2FkU291cmNlKCk7XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtJbWFnZXxDYW52YXN9XG4gICAgICogQHJlYWRvbmx5XG4gICAgICovXG4gICAgdGhpcy5zb3VyY2UgPSBudWxsOyAvLyBzZXQgaW4gbG9hZFNvdXJjZSwgaWYgYXQgYWxsXG5cbiAgICAvKipcbiAgICAgKiBDb250cm9scyBpZiBSR0IgY2hhbm5lbHMgc2hvdWxkIGJlIHByZS1tdWx0aXBsaWVkIGJ5IEFscGhhICAoV2ViR0wgb25seSlcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICogQGRlZmF1bHQgdHJ1ZVxuICAgICAqL1xuICAgIHRoaXMucHJlbXVsdGlwbGllZEFscGhhID0gdHJ1ZTtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge3N0cmluZ31cbiAgICAgKi9cbiAgICB0aGlzLmltYWdlVXJsID0gbnVsbDtcblxuICAgIC8qKlxuICAgICAqIFdldGhlciBvciBub3QgdGhlIHRleHR1cmUgaXMgYSBwb3dlciBvZiB0d28sIHRyeSB0byB1c2UgcG93ZXIgb2YgdHdvIHRleHR1cmVzIGFzIG11Y2ggYXMgeW91IGNhblxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLmlzUG93ZXJPZlR3byA9IGZhbHNlO1xuXG4gICAgLy8gdXNlZCBmb3Igd2ViR0xcblxuICAgIC8qKlxuICAgICAqXG4gICAgICogU2V0IHRoaXMgdG8gdHJ1ZSBpZiBhIG1pcG1hcCBvZiB0aGlzIHRleHR1cmUgbmVlZHMgdG8gYmUgZ2VuZXJhdGVkLiBUaGlzIHZhbHVlIG5lZWRzIHRvIGJlIHNldCBiZWZvcmUgdGhlIHRleHR1cmUgaXMgdXNlZFxuICAgICAqIEFsc28gdGhlIHRleHR1cmUgbXVzdCBiZSBhIHBvd2VyIG9mIHR3byBzaXplIHRvIHdvcmtcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICovXG4gICAgdGhpcy5taXBtYXAgPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIEEgbWFwIG9mIHJlbmRlcmVyIElEcyB0byB3ZWJnbCB0ZXh0dXJlc1xuICAgICAqXG4gICAgICogQG1lbWJlciB7b2JqZWN0PG51bWJlciwgV2ViR0xUZXh0dXJlPn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX2dsVGV4dHVyZXMgPSB7fTtcbiAgICB0aGlzLl9hY3RpdmUgPSBmYWxzZTtcbiAgICB0aGlzLl9pZCA9IDA7XG4gICAgXG4gICAgLy8gaWYgbm8gc291cmNlIHBhc3NlZCBkb24ndCB0cnkgdG8gbG9hZFxuICAgIGlmIChzb3VyY2UpXG4gICAge1xuICAgICAgICB0aGlzLmxvYWRTb3VyY2Uoc291cmNlKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBGaXJlZCB3aGVuIGEgbm90LWltbWVkaWF0ZWx5LWF2YWlsYWJsZSBzb3VyY2UgZmluaXNoZXMgbG9hZGluZy5cbiAgICAgKlxuICAgICAqIEBldmVudCBsb2FkZWRcbiAgICAgKiBAbWVtYmVyb2YgUElYSS5CYXNlVGV4dHVyZSNcbiAgICAgKiBAcHJvdGVjdGVkXG4gICAgICovXG5cbiAgICAvKipcbiAgICAgKiBGaXJlZCB3aGVuIGEgbm90LWltbWVkaWF0ZWx5LWF2YWlsYWJsZSBzb3VyY2UgZmFpbHMgdG8gbG9hZC5cbiAgICAgKlxuICAgICAqIEBldmVudCBlcnJvclxuICAgICAqIEBtZW1iZXJvZiBQSVhJLkJhc2VUZXh0dXJlI1xuICAgICAqIEBwcm90ZWN0ZWRcbiAgICAgKi9cbn1cblxuQmFzZVRleHR1cmUucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShFdmVudEVtaXR0ZXIucHJvdG90eXBlKTtcbkJhc2VUZXh0dXJlLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IEJhc2VUZXh0dXJlO1xubW9kdWxlLmV4cG9ydHMgPSBCYXNlVGV4dHVyZTtcblxuLyoqXG4gKiBVcGRhdGVzIHRoZSB0ZXh0dXJlIG9uIGFsbCB0aGUgd2ViZ2wgcmVuZGVyZXJzLCB0aGlzIGFsc28gYXNzdW1lcyB0aGUgc3JjIGhhcyBjaGFuZ2VkLlxuICpcbiAqIEBmaXJlcyB1cGRhdGVcbiAqL1xuQmFzZVRleHR1cmUucHJvdG90eXBlLnVwZGF0ZSA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy5yZWFsV2lkdGggPSB0aGlzLnNvdXJjZS5uYXR1cmFsV2lkdGggfHwgdGhpcy5zb3VyY2Uud2lkdGg7XG4gICAgdGhpcy5yZWFsSGVpZ2h0ID0gdGhpcy5zb3VyY2UubmF0dXJhbEhlaWdodCB8fCB0aGlzLnNvdXJjZS5oZWlnaHQ7XG5cbiAgICB0aGlzLndpZHRoID0gdGhpcy5yZWFsV2lkdGggLyB0aGlzLnJlc29sdXRpb247XG4gICAgdGhpcy5oZWlnaHQgPSB0aGlzLnJlYWxIZWlnaHQgLyB0aGlzLnJlc29sdXRpb247XG5cbiAgICB0aGlzLmlzUG93ZXJPZlR3byA9IHV0aWxzLmlzUG93ZXJPZlR3byh0aGlzLnJlYWxXaWR0aCwgdGhpcy5yZWFsSGVpZ2h0KTtcblxuICAgIHRoaXMuZW1pdCgndXBkYXRlJywgdGhpcyk7XG59O1xuXG4vKipcbiAqIExvYWQgYSBzb3VyY2UuXG4gKlxuICogSWYgdGhlIHNvdXJjZSBpcyBub3QtaW1tZWRpYXRlbHktYXZhaWxhYmxlLCBzdWNoIGFzIGFuIGltYWdlIHRoYXQgbmVlZHMgdG8gYmVcbiAqIGRvd25sb2FkZWQsIHRoZW4gdGhlICdsb2FkZWQnIG9yICdlcnJvcicgZXZlbnQgd2lsbCBiZSBkaXNwYXRjaGVkIGluIHRoZSBmdXR1cmVcbiAqIGFuZCBgaGFzTG9hZGVkYCB3aWxsIHJlbWFpbiBmYWxzZSBhZnRlciB0aGlzIGNhbGwuXG4gKlxuICogVGhlIGxvZ2ljIHN0YXRlIGFmdGVyIGNhbGxpbmcgYGxvYWRTb3VyY2VgIGRpcmVjdGx5IG9yIGluZGlyZWN0bHkgKGVnLiBgZnJvbUltYWdlYCwgYG5ldyBCYXNlVGV4dHVyZWApIGlzOlxuICpcbiAqICAgICBpZiAodGV4dHVyZS5oYXNMb2FkZWQpXG4ge1xuICogICAgICAgIC8vIHRleHR1cmUgcmVhZHkgZm9yIHVzZVxuICogICAgIH0gZWxzZSBpZiAodGV4dHVyZS5pc0xvYWRpbmcpXG4ge1xuICogICAgICAgIC8vIGxpc3RlbiB0byAnbG9hZGVkJyBhbmQvb3IgJ2Vycm9yJyBldmVudHMgb24gdGV4dHVyZVxuICogICAgIH0gZWxzZSB7XG4gKiAgICAgICAgLy8gbm90IGxvYWRpbmcsIG5vdCBnb2luZyB0byBsb2FkIFVOTEVTUyB0aGUgc291cmNlIGlzIHJlbG9hZGVkXG4gKiAgICAgICAgLy8gKGl0IG1heSBzdGlsbCBtYWtlIHNlbnNlIHRvIGxpc3RlbiB0byB0aGUgZXZlbnRzKVxuICogICAgIH1cbiAqXG4gKiBAcHJvdGVjdGVkXG4gKiBAcGFyYW0gc291cmNlIHtJbWFnZXxDYW52YXN9IHRoZSBzb3VyY2Ugb2JqZWN0IG9mIHRoZSB0ZXh0dXJlLlxuICovXG5CYXNlVGV4dHVyZS5wcm90b3R5cGUubG9hZFNvdXJjZSA9IGZ1bmN0aW9uIChzb3VyY2UpXG57XG4gICAgdmFyIHdhc0xvYWRpbmcgPSB0aGlzLmlzTG9hZGluZztcbiAgICB0aGlzLmhhc0xvYWRlZCA9IGZhbHNlO1xuICAgIHRoaXMuaXNMb2FkaW5nID0gZmFsc2U7XG5cbiAgICBpZiAod2FzTG9hZGluZyAmJiB0aGlzLnNvdXJjZSlcbiAgICB7XG4gICAgICAgIHRoaXMuc291cmNlLm9ubG9hZCA9IG51bGw7XG4gICAgICAgIHRoaXMuc291cmNlLm9uZXJyb3IgPSBudWxsO1xuICAgIH1cblxuICAgIHRoaXMuc291cmNlID0gc291cmNlO1xuXG4gICAgLy8gQXBwbHkgc291cmNlIGlmIGxvYWRlZC4gT3RoZXJ3aXNlIHNldHVwIGFwcHJvcHJpYXRlIGxvYWRpbmcgbW9uaXRvcnMuXG4gICAgaWYgKCh0aGlzLnNvdXJjZS5jb21wbGV0ZSB8fCB0aGlzLnNvdXJjZS5nZXRDb250ZXh0KSAmJiB0aGlzLnNvdXJjZS53aWR0aCAmJiB0aGlzLnNvdXJjZS5oZWlnaHQpXG4gICAge1xuICAgICAgICB0aGlzLl9zb3VyY2VMb2FkZWQoKTtcbiAgICB9XG4gICAgZWxzZSBpZiAoIXNvdXJjZS5nZXRDb250ZXh0KVxuICAgIHtcblxuICAgICAgICAvLyBJbWFnZSBmYWlsIC8gbm90IHJlYWR5XG4gICAgICAgIHRoaXMuaXNMb2FkaW5nID0gdHJ1ZTtcblxuICAgICAgICB2YXIgc2NvcGUgPSB0aGlzO1xuXG4gICAgICAgIHNvdXJjZS5vbmxvYWQgPSBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICBzb3VyY2Uub25sb2FkID0gbnVsbDtcbiAgICAgICAgICAgIHNvdXJjZS5vbmVycm9yID0gbnVsbDtcblxuICAgICAgICAgICAgaWYgKCFzY29wZS5pc0xvYWRpbmcpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBzY29wZS5pc0xvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgICAgIHNjb3BlLl9zb3VyY2VMb2FkZWQoKTtcblxuICAgICAgICAgICAgc2NvcGUuZW1pdCgnbG9hZGVkJywgc2NvcGUpO1xuICAgICAgICB9O1xuXG4gICAgICAgIHNvdXJjZS5vbmVycm9yID0gZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgc291cmNlLm9ubG9hZCA9IG51bGw7XG4gICAgICAgICAgICBzb3VyY2Uub25lcnJvciA9IG51bGw7XG5cbiAgICAgICAgICAgIGlmICghc2NvcGUuaXNMb2FkaW5nKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgc2NvcGUuaXNMb2FkaW5nID0gZmFsc2U7XG4gICAgICAgICAgICBzY29wZS5lbWl0KCdlcnJvcicsIHNjb3BlKTtcbiAgICAgICAgfTtcblxuICAgICAgICAvLyBQZXIgaHR0cDovL3d3dy53My5vcmcvVFIvaHRtbDUvZW1iZWRkZWQtY29udGVudC0wLmh0bWwjdGhlLWltZy1lbGVtZW50XG4gICAgICAgIC8vICAgXCJUaGUgdmFsdWUgb2YgYGNvbXBsZXRlYCBjYW4gdGh1cyBjaGFuZ2Ugd2hpbGUgYSBzY3JpcHQgaXMgZXhlY3V0aW5nLlwiXG4gICAgICAgIC8vIFNvIGNvbXBsZXRlIG5lZWRzIHRvIGJlIHJlLWNoZWNrZWQgYWZ0ZXIgdGhlIGNhbGxiYWNrcyBoYXZlIGJlZW4gYWRkZWQuLlxuICAgICAgICAvLyBOT1RFOiBjb21wbGV0ZSB3aWxsIGJlIHRydWUgaWYgdGhlIGltYWdlIGhhcyBubyBzcmMgc28gYmVzdCB0byBjaGVjayBpZiB0aGUgc3JjIGlzIHNldC5cbiAgICAgICAgaWYgKHNvdXJjZS5jb21wbGV0ZSAmJiBzb3VyY2Uuc3JjKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmlzTG9hZGluZyA9IGZhbHNlO1xuXG4gICAgICAgICAgICAvLyAuLmFuZCBpZiB3ZSdyZSBjb21wbGV0ZSBub3csIG5vIG5lZWQgZm9yIGNhbGxiYWNrc1xuICAgICAgICAgICAgc291cmNlLm9ubG9hZCA9IG51bGw7XG4gICAgICAgICAgICBzb3VyY2Uub25lcnJvciA9IG51bGw7XG5cbiAgICAgICAgICAgIGlmIChzb3VyY2Uud2lkdGggJiYgc291cmNlLmhlaWdodClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9zb3VyY2VMb2FkZWQoKTtcblxuICAgICAgICAgICAgICAgIC8vIElmIGFueSBwcmV2aW91cyBzdWJzY3JpYmVycyBwb3NzaWJsZVxuICAgICAgICAgICAgICAgIGlmICh3YXNMb2FkaW5nKVxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5lbWl0KCdsb2FkZWQnLCB0aGlzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgLy8gSWYgYW55IHByZXZpb3VzIHN1YnNjcmliZXJzIHBvc3NpYmxlXG4gICAgICAgICAgICAgICAgaWYgKHdhc0xvYWRpbmcpXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmVtaXQoJ2Vycm9yJywgdGhpcyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxufTtcblxuLyoqXG4gKiBVc2VkIGludGVybmFsbHkgdG8gdXBkYXRlIHRoZSB3aWR0aCwgaGVpZ2h0LCBhbmQgc29tZSBvdGhlciB0cmFja2luZyB2YXJzIG9uY2VcbiAqIGEgc291cmNlIGhhcyBzdWNjZXNzZnVsbHkgbG9hZGVkLlxuICpcbiAqIEBwcml2YXRlXG4gKi9cbkJhc2VUZXh0dXJlLnByb3RvdHlwZS5fc291cmNlTG9hZGVkID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLmhhc0xvYWRlZCA9IHRydWU7XG4gICAgdGhpcy51cGRhdGUoKTtcbn07XG5cbi8qKlxuICogRGVzdHJveXMgdGhpcyBiYXNlIHRleHR1cmVcbiAqXG4gKi9cbkJhc2VUZXh0dXJlLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKClcbntcbiAgICBpZiAodGhpcy5pbWFnZVVybClcbiAgICB7XG4gICAgICAgIGRlbGV0ZSB1dGlscy5CYXNlVGV4dHVyZUNhY2hlW3RoaXMuaW1hZ2VVcmxdO1xuICAgICAgICBkZWxldGUgdXRpbHMuVGV4dHVyZUNhY2hlW3RoaXMuaW1hZ2VVcmxdO1xuXG4gICAgICAgIHRoaXMuaW1hZ2VVcmwgPSBudWxsO1xuXG4gICAgICAgIGlmICghbmF2aWdhdG9yLmlzQ29jb29uSlMpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuc291cmNlLnNyYyA9ICcnO1xuICAgICAgICB9XG4gICAgfVxuICAgIGVsc2UgaWYgKHRoaXMuc291cmNlICYmIHRoaXMuc291cmNlLl9waXhpSWQpXG4gICAge1xuICAgICAgICBkZWxldGUgdXRpbHMuQmFzZVRleHR1cmVDYWNoZVt0aGlzLnNvdXJjZS5fcGl4aUlkXTtcbiAgICB9XG5cbiAgICB0aGlzLnNvdXJjZSA9IG51bGw7XG5cbiAgICB0aGlzLmRpc3Bvc2UoKTtcbn07XG5cbi8qKlxuICogRnJlZXMgdGhlIHRleHR1cmUgZnJvbSBXZWJHTCBtZW1vcnkgd2l0aG91dCBkZXN0cm95aW5nIHRoaXMgdGV4dHVyZSBvYmplY3QuXG4gKiBUaGlzIG1lYW5zIHlvdSBjYW4gc3RpbGwgdXNlIHRoZSB0ZXh0dXJlIGxhdGVyIHdoaWNoIHdpbGwgdXBsb2FkIGl0IHRvIEdQVVxuICogbWVtb3J5IGFnYWluLlxuICpcbiAqL1xuQmFzZVRleHR1cmUucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKVxue1xuICAgIHRoaXMuZW1pdCgnZGlzcG9zZScsIHRoaXMpO1xuXG4gICAgLy8gdGhpcyBzaG91bGQgbm8gbG9uZ2VyIGJlIG5lZWRlZCwgdGhlIHJlbmRlcmVycyBzaG91bGQgY2xlYW51cCBhbGwgdGhlIGdsIHRleHR1cmVzLlxuICAgIC8vIHRoaXMuX2dsVGV4dHVyZXMgPSB7fTtcbn07XG5cbi8qKlxuICogQ2hhbmdlcyB0aGUgc291cmNlIGltYWdlIG9mIHRoZSB0ZXh0dXJlLlxuICogVGhlIG9yaWdpbmFsIHNvdXJjZSBtdXN0IGJlIGFuIEltYWdlIGVsZW1lbnQuXG4gKlxuICogQHBhcmFtIG5ld1NyYyB7c3RyaW5nfSB0aGUgcGF0aCBvZiB0aGUgaW1hZ2VcbiAqL1xuQmFzZVRleHR1cmUucHJvdG90eXBlLnVwZGF0ZVNvdXJjZUltYWdlID0gZnVuY3Rpb24gKG5ld1NyYylcbntcbiAgICB0aGlzLnNvdXJjZS5zcmMgPSBuZXdTcmM7XG5cbiAgICB0aGlzLmxvYWRTb3VyY2UodGhpcy5zb3VyY2UpO1xufTtcblxuLyoqXG4gKiBIZWxwZXIgZnVuY3Rpb24gdGhhdCBjcmVhdGVzIGEgYmFzZSB0ZXh0dXJlIGZyb20gdGhlIGdpdmVuIGltYWdlIHVybC5cbiAqIElmIHRoZSBpbWFnZSBpcyBub3QgaW4gdGhlIGJhc2UgdGV4dHVyZSBjYWNoZSBpdCB3aWxsIGJlIGNyZWF0ZWQgYW5kIGxvYWRlZC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAcGFyYW0gaW1hZ2VVcmwge3N0cmluZ30gVGhlIGltYWdlIHVybCBvZiB0aGUgdGV4dHVyZVxuICogQHBhcmFtIFtjcm9zc29yaWdpbj0oYXV0byldIHtib29sZWFufSBTaG91bGQgdXNlIGFub255bW91cyBDT1JTPyBEZWZhdWx0cyB0byB0cnVlIGlmIHRoZSBVUkwgaXMgbm90IGEgZGF0YS1VUkkuXG4gKiBAcGFyYW0gW3NjYWxlTW9kZT1QSVhJLlNDQUxFX01PREVTLkRFRkFVTFRdIHtudW1iZXJ9IFNlZSB7QGxpbmsgUElYSS5TQ0FMRV9NT0RFU30gZm9yIHBvc3NpYmxlIHZhbHVlc1xuICogQHJldHVybiBQSVhJLkJhc2VUZXh0dXJlXG4gKi9cbkJhc2VUZXh0dXJlLmZyb21JbWFnZSA9IGZ1bmN0aW9uIChpbWFnZVVybCwgY3Jvc3NvcmlnaW4sIHNjYWxlTW9kZSlcbntcbiAgICB2YXIgYmFzZVRleHR1cmUgPSB1dGlscy5CYXNlVGV4dHVyZUNhY2hlW2ltYWdlVXJsXTtcblxuICAgIGlmIChjcm9zc29yaWdpbiA9PT0gdW5kZWZpbmVkICYmIGltYWdlVXJsLmluZGV4T2YoJ2RhdGE6JykgIT09IDApXG4gICAge1xuICAgICAgICBjcm9zc29yaWdpbiA9IHRydWU7XG4gICAgfVxuXG4gICAgaWYgKCFiYXNlVGV4dHVyZSlcbiAgICB7XG4gICAgICAgIC8vIG5ldyBJbWFnZSgpIGJyZWFrcyB0ZXggbG9hZGluZyBpbiBzb21lIHZlcnNpb25zIG9mIENocm9tZS5cbiAgICAgICAgLy8gU2VlIGh0dHBzOi8vY29kZS5nb29nbGUuY29tL3AvY2hyb21pdW0vaXNzdWVzL2RldGFpbD9pZD0yMzgwNzFcbiAgICAgICAgdmFyIGltYWdlID0gbmV3IEltYWdlKCk7Ly9kb2N1bWVudC5jcmVhdGVFbGVtZW50KCdpbWcnKTtcbiAgICAgICAgaWYgKGNyb3Nzb3JpZ2luKVxuICAgICAgICB7XG4gICAgICAgICAgICBpbWFnZS5jcm9zc09yaWdpbiA9ICcnO1xuICAgICAgICB9XG5cbiAgICAgICAgYmFzZVRleHR1cmUgPSBuZXcgQmFzZVRleHR1cmUoaW1hZ2UsIHNjYWxlTW9kZSk7XG4gICAgICAgIGJhc2VUZXh0dXJlLmltYWdlVXJsID0gaW1hZ2VVcmw7XG5cbiAgICAgICAgaW1hZ2Uuc3JjID0gaW1hZ2VVcmw7XG5cbiAgICAgICAgdXRpbHMuQmFzZVRleHR1cmVDYWNoZVtpbWFnZVVybF0gPSBiYXNlVGV4dHVyZTtcblxuICAgICAgICAvLyBpZiB0aGVyZSBpcyBhbiBAMnggYXQgdGhlIGVuZCBvZiB0aGUgdXJsIHdlIGFyZSBnb2luZyB0byBhc3N1bWUgaXRzIGEgaGlnaHJlcyBpbWFnZVxuICAgICAgICBiYXNlVGV4dHVyZS5yZXNvbHV0aW9uID0gdXRpbHMuZ2V0UmVzb2x1dGlvbk9mVXJsKGltYWdlVXJsKTtcbiAgICB9XG5cbiAgICByZXR1cm4gYmFzZVRleHR1cmU7XG59O1xuXG4vKipcbiAqIEhlbHBlciBmdW5jdGlvbiB0aGF0IGNyZWF0ZXMgYSBiYXNlIHRleHR1cmUgZnJvbSB0aGUgZ2l2ZW4gY2FudmFzIGVsZW1lbnQuXG4gKlxuICogQHN0YXRpY1xuICogQHBhcmFtIGNhbnZhcyB7Q2FudmFzfSBUaGUgY2FudmFzIGVsZW1lbnQgc291cmNlIG9mIHRoZSB0ZXh0dXJlXG4gKiBAcGFyYW0gc2NhbGVNb2RlIHtudW1iZXJ9IFNlZSB7QGxpbmsgUElYSS5TQ0FMRV9NT0RFU30gZm9yIHBvc3NpYmxlIHZhbHVlc1xuICogQHJldHVybiBQSVhJLkJhc2VUZXh0dXJlXG4gKi9cbkJhc2VUZXh0dXJlLmZyb21DYW52YXMgPSBmdW5jdGlvbiAoY2FudmFzLCBzY2FsZU1vZGUpXG57XG4gICAgaWYgKCFjYW52YXMuX3BpeGlJZClcbiAgICB7XG4gICAgICAgIGNhbnZhcy5fcGl4aUlkID0gJ2NhbnZhc18nICsgdXRpbHMudWlkKCk7XG4gICAgfVxuXG4gICAgdmFyIGJhc2VUZXh0dXJlID0gdXRpbHMuQmFzZVRleHR1cmVDYWNoZVtjYW52YXMuX3BpeGlJZF07XG5cbiAgICBpZiAoIWJhc2VUZXh0dXJlKVxuICAgIHtcbiAgICAgICAgYmFzZVRleHR1cmUgPSBuZXcgQmFzZVRleHR1cmUoY2FudmFzLCBzY2FsZU1vZGUpO1xuICAgICAgICB1dGlscy5CYXNlVGV4dHVyZUNhY2hlW2NhbnZhcy5fcGl4aUlkXSA9IGJhc2VUZXh0dXJlO1xuICAgIH1cblxuICAgIHJldHVybiBiYXNlVGV4dHVyZTtcbn07XG4iLCJ2YXIgQmFzZVRleHR1cmUgPSByZXF1aXJlKCcuL0Jhc2VUZXh0dXJlJyksXG4gICAgVGV4dHVyZSA9IHJlcXVpcmUoJy4vVGV4dHVyZScpLFxuICAgIFJlbmRlclRhcmdldCA9IHJlcXVpcmUoJy4uL3JlbmRlcmVycy93ZWJnbC91dGlscy9SZW5kZXJUYXJnZXQnKSxcbiAgICBGaWx0ZXJNYW5hZ2VyID0gcmVxdWlyZSgnLi4vcmVuZGVyZXJzL3dlYmdsL21hbmFnZXJzL0ZpbHRlck1hbmFnZXInKSxcbiAgICBDYW52YXNCdWZmZXIgPSByZXF1aXJlKCcuLi9yZW5kZXJlcnMvY2FudmFzL3V0aWxzL0NhbnZhc0J1ZmZlcicpLFxuICAgIG1hdGggPSByZXF1aXJlKCcuLi9tYXRoJyksXG4gICAgQ09OU1QgPSByZXF1aXJlKCcuLi9jb25zdCcpLFxuICAgIHRlbXBNYXRyaXggPSBuZXcgbWF0aC5NYXRyaXgoKTtcblxuLyoqXG4gKiBBIFJlbmRlclRleHR1cmUgaXMgYSBzcGVjaWFsIHRleHR1cmUgdGhhdCBhbGxvd3MgYW55IFBpeGkgZGlzcGxheSBvYmplY3QgdG8gYmUgcmVuZGVyZWQgdG8gaXQuXG4gKlxuICogX19IaW50X186IEFsbCBEaXNwbGF5T2JqZWN0cyAoaS5lLiBTcHJpdGVzKSB0aGF0IHJlbmRlciB0byBhIFJlbmRlclRleHR1cmUgc2hvdWxkIGJlIHByZWxvYWRlZFxuICogb3RoZXJ3aXNlIGJsYWNrIHJlY3RhbmdsZXMgd2lsbCBiZSBkcmF3biBpbnN0ZWFkLlxuICpcbiAqIEEgUmVuZGVyVGV4dHVyZSB0YWtlcyBhIHNuYXBzaG90IG9mIGFueSBEaXNwbGF5IE9iamVjdCBnaXZlbiB0byBpdHMgcmVuZGVyIG1ldGhvZC4gVGhlIHBvc2l0aW9uXG4gKiBhbmQgcm90YXRpb24gb2YgdGhlIGdpdmVuIERpc3BsYXkgT2JqZWN0cyBpcyBpZ25vcmVkLiBGb3IgZXhhbXBsZTpcbiAqXG4gKiBgYGBqc1xuICogdmFyIHJlbmRlcmVyID0gUElYSS5hdXRvRGV0ZWN0UmVuZGVyZXIoMTAyNCwgMTAyNCwgeyB2aWV3OiBjYW52YXMsIHJhdGlvOiAxIH0pO1xuICogdmFyIHJlbmRlclRleHR1cmUgPSBuZXcgUElYSS5SZW5kZXJUZXh0dXJlKHJlbmRlcmVyLCA4MDAsIDYwMCk7XG4gKiB2YXIgc3ByaXRlID0gUElYSS5TcHJpdGUuZnJvbUltYWdlKFwic3Bpbk9ial8wMS5wbmdcIik7XG4gKlxuICogc3ByaXRlLnBvc2l0aW9uLnggPSA4MDAvMjtcbiAqIHNwcml0ZS5wb3NpdGlvbi55ID0gNjAwLzI7XG4gKiBzcHJpdGUuYW5jaG9yLnggPSAwLjU7XG4gKiBzcHJpdGUuYW5jaG9yLnkgPSAwLjU7XG4gKlxuICogcmVuZGVyVGV4dHVyZS5yZW5kZXIoc3ByaXRlKTtcbiAqIGBgYFxuICpcbiAqIFRoZSBTcHJpdGUgaW4gdGhpcyBjYXNlIHdpbGwgYmUgcmVuZGVyZWQgdG8gYSBwb3NpdGlvbiBvZiAwLDAuIFRvIHJlbmRlciB0aGlzIHNwcml0ZSBhdCBpdHMgYWN0dWFsXG4gKiBwb3NpdGlvbiBhIENvbnRhaW5lciBzaG91bGQgYmUgdXNlZDpcbiAqXG4gKiBgYGBqc1xuICogdmFyIGRvYyA9IG5ldyBQSVhJLkNvbnRhaW5lcigpO1xuICpcbiAqIGRvYy5hZGRDaGlsZChzcHJpdGUpO1xuICpcbiAqIHJlbmRlclRleHR1cmUucmVuZGVyKGRvYyk7ICAvLyBSZW5kZXJzIHRvIGNlbnRlciBvZiByZW5kZXJUZXh0dXJlXG4gKiBgYGBcbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuVGV4dHVyZVxuICogQG1lbWJlcm9mIFBJWElcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5DYW52YXNSZW5kZXJlcnxQSVhJLldlYkdMUmVuZGVyZXJ9IFRoZSByZW5kZXJlciB1c2VkIGZvciB0aGlzIFJlbmRlclRleHR1cmVcbiAqIEBwYXJhbSBbd2lkdGg9MTAwXSB7bnVtYmVyfSBUaGUgd2lkdGggb2YgdGhlIHJlbmRlciB0ZXh0dXJlXG4gKiBAcGFyYW0gW2hlaWdodD0xMDBdIHtudW1iZXJ9IFRoZSBoZWlnaHQgb2YgdGhlIHJlbmRlciB0ZXh0dXJlXG4gKiBAcGFyYW0gW3NjYWxlTW9kZV0ge251bWJlcn0gU2VlIHtAbGluayBQSVhJLlNDQUxFX01PREVTfSBmb3IgcG9zc2libGUgdmFsdWVzXG4gKiBAcGFyYW0gW3Jlc29sdXRpb249MV0ge251bWJlcn0gVGhlIHJlc29sdXRpb24gb2YgdGhlIHRleHR1cmUgYmVpbmcgZ2VuZXJhdGVkXG4gKi9cbmZ1bmN0aW9uIFJlbmRlclRleHR1cmUocmVuZGVyZXIsIHdpZHRoLCBoZWlnaHQsIHNjYWxlTW9kZSwgcmVzb2x1dGlvbilcbntcbiAgICBpZiAoIXJlbmRlcmVyKVxuICAgIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdVbmFibGUgdG8gY3JlYXRlIFJlbmRlclRleHR1cmUsIHlvdSBtdXN0IHBhc3MgYSByZW5kZXJlciBpbnRvIHRoZSBjb25zdHJ1Y3Rvci4nKTtcbiAgICB9XG5cbiAgICB3aWR0aCA9IHdpZHRoIHx8IDEwMDtcbiAgICBoZWlnaHQgPSBoZWlnaHQgfHwgMTAwO1xuICAgIHJlc29sdXRpb24gPSByZXNvbHV0aW9uIHx8IENPTlNULlJFU09MVVRJT047XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYmFzZSB0ZXh0dXJlIG9iamVjdCB0aGF0IHRoaXMgdGV4dHVyZSB1c2VzXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtCYXNlVGV4dHVyZX1cbiAgICAgKi9cbiAgICB2YXIgYmFzZVRleHR1cmUgPSBuZXcgQmFzZVRleHR1cmUoKTtcbiAgICBiYXNlVGV4dHVyZS53aWR0aCA9IHdpZHRoO1xuICAgIGJhc2VUZXh0dXJlLmhlaWdodCA9IGhlaWdodDtcbiAgICBiYXNlVGV4dHVyZS5yZXNvbHV0aW9uID0gcmVzb2x1dGlvbjtcbiAgICBiYXNlVGV4dHVyZS5zY2FsZU1vZGUgPSBzY2FsZU1vZGUgfHwgQ09OU1QuU0NBTEVfTU9ERVMuREVGQVVMVDtcbiAgICBiYXNlVGV4dHVyZS5oYXNMb2FkZWQgPSB0cnVlO1xuXG5cbiAgICBUZXh0dXJlLmNhbGwodGhpcyxcbiAgICAgICAgYmFzZVRleHR1cmUsXG4gICAgICAgIG5ldyBtYXRoLlJlY3RhbmdsZSgwLCAwLCB3aWR0aCwgaGVpZ2h0KVxuICAgICk7XG5cblxuICAgIC8qKlxuICAgICAqIFRoZSB3aXRoIG9mIHRoZSByZW5kZXIgdGV4dHVyZVxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMud2lkdGggPSB3aWR0aDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBoZWlnaHQgb2YgdGhlIHJlbmRlciB0ZXh0dXJlXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy5oZWlnaHQgPSBoZWlnaHQ7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgUmVzb2x1dGlvbiBvZiB0aGUgdGV4dHVyZS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLnJlc29sdXRpb24gPSByZXNvbHV0aW9uO1xuXG4gICAgLyoqXG4gICAgICogRHJhdy9yZW5kZXIgdGhlIGdpdmVuIERpc3BsYXlPYmplY3Qgb250byB0aGUgdGV4dHVyZS5cbiAgICAgKlxuICAgICAqIFRoZSBkaXNwbGF5T2JqZWN0IGFuZCBkZXNjZW5kZW50cyBhcmUgdHJhbnNmb3JtZWQgZHVyaW5nIHRoaXMgb3BlcmF0aW9uLlxuICAgICAqIElmIGB1cGRhdGVUcmFuc2Zvcm1gIGlzIHRydWUgdGhlbiB0aGUgdHJhbnNmb3JtYXRpb25zIHdpbGwgYmUgcmVzdG9yZWQgYmVmb3JlIHRoZVxuICAgICAqIG1ldGhvZCByZXR1cm5zLiBPdGhlcndpc2UgaXQgaXMgdXAgdG8gdGhlIGNhbGxpbmcgY29kZSB0byBjb3JyZWN0bHkgdXNlIG9yIHJlc2V0XG4gICAgICogdGhlIHRyYW5zZm9ybWVkIGRpc3BsYXkgb2JqZWN0cy5cbiAgICAgKlxuICAgICAqIFRoZSBkaXNwbGF5IG9iamVjdCBpcyBhbHdheXMgcmVuZGVyZWQgd2l0aCBhIHdvcmxkQWxwaGEgdmFsdWUgb2YgMS5cbiAgICAgKlxuICAgICAqIEBtZXRob2RcbiAgICAgKiBAcGFyYW0gZGlzcGxheU9iamVjdCB7UElYSS5EaXNwbGF5T2JqZWN0fSBUaGUgZGlzcGxheSBvYmplY3QgdG8gcmVuZGVyIHRoaXMgdGV4dHVyZSBvblxuICAgICAqIEBwYXJhbSBbbWF0cml4XSB7UElYSS5NYXRyaXh9IE9wdGlvbmFsIG1hdHJpeCB0byBhcHBseSB0byB0aGUgZGlzcGxheSBvYmplY3QgYmVmb3JlIHJlbmRlcmluZy5cbiAgICAgKiBAcGFyYW0gW2NsZWFyPWZhbHNlXSB7Ym9vbGVhbn0gSWYgdHJ1ZSB0aGUgdGV4dHVyZSB3aWxsIGJlIGNsZWFyZWQgYmVmb3JlIHRoZSBkaXNwbGF5T2JqZWN0IGlzIGRyYXduXG4gICAgICogQHBhcmFtIFt1cGRhdGVUcmFuc2Zvcm09dHJ1ZV0ge2Jvb2xlYW59IElmIHRydWUgdGhlIGRpc3BsYXlPYmplY3QncyB3b3JsZFRyYW5zZm9ybS93b3JsZEFscGhhIGFuZCBhbGwgY2hpbGRyZW5cbiAgICAgKiAgdHJhbnNmb3JtYXRpb25zIHdpbGwgYmUgcmVzdG9yZWQuIE5vdCByZXN0b3JpbmcgdGhpcyBpbmZvcm1hdGlvbiB3aWxsIGJlIGEgbGl0dGxlIGZhc3Rlci5cbiAgICAgKi9cbiAgICB0aGlzLnJlbmRlciA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgcmVuZGVyZXIgdGhpcyBSZW5kZXJUZXh0dXJlIHVzZXMuIEEgUmVuZGVyVGV4dHVyZSBjYW4gb25seSBiZWxvbmcgdG8gb25lIHJlbmRlcmVyIGF0IHRoZSBtb21lbnQgaWYgaXRzIHdlYkdMLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5DYW52YXNSZW5kZXJlcnxQSVhJLldlYkdMUmVuZGVyZXJ9XG4gICAgICovXG4gICAgdGhpcy5yZW5kZXJlciA9IHJlbmRlcmVyO1xuXG4gICAgaWYgKHRoaXMucmVuZGVyZXIudHlwZSA9PT0gQ09OU1QuUkVOREVSRVJfVFlQRS5XRUJHTClcbiAgICB7XG4gICAgICAgIHZhciBnbCA9IHRoaXMucmVuZGVyZXIuZ2w7XG5cbiAgICAgICAgdGhpcy50ZXh0dXJlQnVmZmVyID0gbmV3IFJlbmRlclRhcmdldChnbCwgdGhpcy53aWR0aCwgdGhpcy5oZWlnaHQsIGJhc2VUZXh0dXJlLnNjYWxlTW9kZSwgdGhpcy5yZXNvbHV0aW9uKTsvLywgdGhpcy5iYXNlVGV4dHVyZS5zY2FsZU1vZGUpO1xuICAgICAgICB0aGlzLmJhc2VUZXh0dXJlLl9nbFRleHR1cmVzW2dsLmlkXSA9IHRoaXMudGV4dHVyZUJ1ZmZlci50ZXh0dXJlO1xuXG4gICAgICAgIC8vVE9ETyByZWZhY3RvciBmaWx0ZXIgbWFuYWdlci4uIGFzIHJlYWxseSBpdHMgbm8gbG9uZ2VyIGEgbWFuYWdlciBpZiB3ZSB1c2UgaXQgaGVyZS4uXG4gICAgICAgIHRoaXMuZmlsdGVyTWFuYWdlciA9IG5ldyBGaWx0ZXJNYW5hZ2VyKHRoaXMucmVuZGVyZXIpO1xuICAgICAgICB0aGlzLmZpbHRlck1hbmFnZXIub25Db250ZXh0Q2hhbmdlKCk7XG4gICAgICAgIHRoaXMuZmlsdGVyTWFuYWdlci5yZXNpemUod2lkdGgsIGhlaWdodCk7XG4gICAgICAgIHRoaXMucmVuZGVyID0gdGhpcy5yZW5kZXJXZWJHTDtcblxuICAgICAgICAvLyB0aGUgY3JlYXRpb24gb2YgYSBmaWx0ZXIgbWFuYWdlciB1bmJpbmRzIHRoZSBidWZmZXJzLi5cbiAgICAgICAgdGhpcy5yZW5kZXJlci5jdXJyZW50UmVuZGVyZXIuc3RhcnQoKTtcbiAgICAgICAgdGhpcy5yZW5kZXJlci5jdXJyZW50UmVuZGVyVGFyZ2V0LmFjdGl2YXRlKCk7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG5cbiAgICAgICAgdGhpcy5yZW5kZXIgPSB0aGlzLnJlbmRlckNhbnZhcztcbiAgICAgICAgdGhpcy50ZXh0dXJlQnVmZmVyID0gbmV3IENhbnZhc0J1ZmZlcih0aGlzLndpZHRoKiB0aGlzLnJlc29sdXRpb24sIHRoaXMuaGVpZ2h0KiB0aGlzLnJlc29sdXRpb24pO1xuICAgICAgICB0aGlzLmJhc2VUZXh0dXJlLnNvdXJjZSA9IHRoaXMudGV4dHVyZUJ1ZmZlci5jYW52YXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKi9cbiAgICB0aGlzLnZhbGlkID0gdHJ1ZTtcblxuICAgIHRoaXMuX3VwZGF0ZVV2cygpO1xufVxuXG5SZW5kZXJUZXh0dXJlLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoVGV4dHVyZS5wcm90b3R5cGUpO1xuUmVuZGVyVGV4dHVyZS5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBSZW5kZXJUZXh0dXJlO1xubW9kdWxlLmV4cG9ydHMgPSBSZW5kZXJUZXh0dXJlO1xuXG4vKipcbiAqIFJlc2l6ZXMgdGhlIFJlbmRlclRleHR1cmUuXG4gKlxuICogQHBhcmFtIHdpZHRoIHtudW1iZXJ9IFRoZSB3aWR0aCB0byByZXNpemUgdG8uXG4gKiBAcGFyYW0gaGVpZ2h0IHtudW1iZXJ9IFRoZSBoZWlnaHQgdG8gcmVzaXplIHRvLlxuICogQHBhcmFtIHVwZGF0ZUJhc2Uge2Jvb2xlYW59IFNob3VsZCB0aGUgYmFzZVRleHR1cmUud2lkdGggYW5kIGhlaWdodCB2YWx1ZXMgYmUgcmVzaXplZCBhcyB3ZWxsP1xuICovXG5SZW5kZXJUZXh0dXJlLnByb3RvdHlwZS5yZXNpemUgPSBmdW5jdGlvbiAod2lkdGgsIGhlaWdodCwgdXBkYXRlQmFzZSlcbntcbiAgICBpZiAod2lkdGggPT09IHRoaXMud2lkdGggJiYgaGVpZ2h0ID09PSB0aGlzLmhlaWdodClcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLnZhbGlkID0gKHdpZHRoID4gMCAmJiBoZWlnaHQgPiAwKTtcblxuICAgIHRoaXMud2lkdGggPSB0aGlzLl9mcmFtZS53aWR0aCA9IHRoaXMuY3JvcC53aWR0aCA9IHdpZHRoO1xuICAgIHRoaXMuaGVpZ2h0ID0gIHRoaXMuX2ZyYW1lLmhlaWdodCA9IHRoaXMuY3JvcC5oZWlnaHQgPSBoZWlnaHQ7XG5cbiAgICBpZiAodXBkYXRlQmFzZSlcbiAgICB7XG4gICAgICAgIHRoaXMuYmFzZVRleHR1cmUud2lkdGggPSB0aGlzLndpZHRoO1xuICAgICAgICB0aGlzLmJhc2VUZXh0dXJlLmhlaWdodCA9IHRoaXMuaGVpZ2h0O1xuICAgIH1cblxuICAgIGlmICghdGhpcy52YWxpZClcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLnRleHR1cmVCdWZmZXIucmVzaXplKHRoaXMud2lkdGgsIHRoaXMuaGVpZ2h0KTtcblxuICAgIGlmKHRoaXMuZmlsdGVyTWFuYWdlcilcbiAgICB7XG4gICAgICAgIHRoaXMuZmlsdGVyTWFuYWdlci5yZXNpemUodGhpcy53aWR0aCwgdGhpcy5oZWlnaHQpO1xuICAgIH1cbn07XG5cbi8qKlxuICogQ2xlYXJzIHRoZSBSZW5kZXJUZXh0dXJlLlxuICpcbiAqL1xuUmVuZGVyVGV4dHVyZS5wcm90b3R5cGUuY2xlYXIgPSBmdW5jdGlvbiAoKVxue1xuICAgIGlmICghdGhpcy52YWxpZClcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5yZW5kZXJlci50eXBlID09PSBDT05TVC5SRU5ERVJFUl9UWVBFLldFQkdMKVxuICAgIHtcbiAgICAgICAgdGhpcy5yZW5kZXJlci5nbC5iaW5kRnJhbWVidWZmZXIodGhpcy5yZW5kZXJlci5nbC5GUkFNRUJVRkZFUiwgdGhpcy50ZXh0dXJlQnVmZmVyLmZyYW1lQnVmZmVyKTtcbiAgICB9XG5cbiAgICB0aGlzLnRleHR1cmVCdWZmZXIuY2xlYXIoKTtcbn07XG5cbi8qKlxuICogSW50ZXJuYWwgbWV0aG9kIGFzc2lnbmVkIHRvIHRoZSBgcmVuZGVyYCBwcm9wZXJ0eSBpZiB1c2luZyBhIENhbnZhc1JlbmRlcmVyLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0gZGlzcGxheU9iamVjdCB7UElYSS5EaXNwbGF5T2JqZWN0fSBUaGUgZGlzcGxheSBvYmplY3QgdG8gcmVuZGVyIHRoaXMgdGV4dHVyZSBvblxuICogQHBhcmFtIFttYXRyaXhdIHtQSVhJLk1hdHJpeH0gT3B0aW9uYWwgbWF0cml4IHRvIGFwcGx5IHRvIHRoZSBkaXNwbGF5IG9iamVjdCBiZWZvcmUgcmVuZGVyaW5nLlxuICogQHBhcmFtIFtjbGVhcj1mYWxzZV0ge2Jvb2xlYW59IElmIHRydWUgdGhlIHRleHR1cmUgd2lsbCBiZSBjbGVhcmVkIGJlZm9yZSB0aGUgZGlzcGxheU9iamVjdCBpcyBkcmF3blxuICogQHBhcmFtIFt1cGRhdGVUcmFuc2Zvcm09dHJ1ZV0ge2Jvb2xlYW59IElmIHRydWUgdGhlIGRpc3BsYXlPYmplY3QncyB3b3JsZFRyYW5zZm9ybS93b3JsZEFscGhhIGFuZCBhbGwgY2hpbGRyZW5cbiAqICB0cmFuc2Zvcm1hdGlvbnMgd2lsbCBiZSByZXN0b3JlZC4gTm90IHJlc3RvcmluZyB0aGlzIGluZm9ybWF0aW9uIHdpbGwgYmUgYSBsaXR0bGUgZmFzdGVyLlxuICovXG5SZW5kZXJUZXh0dXJlLnByb3RvdHlwZS5yZW5kZXJXZWJHTCA9IGZ1bmN0aW9uIChkaXNwbGF5T2JqZWN0LCBtYXRyaXgsIGNsZWFyLCB1cGRhdGVUcmFuc2Zvcm0pXG57XG4gICAgaWYgKCF0aGlzLnZhbGlkKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuXG4gICAgdXBkYXRlVHJhbnNmb3JtID0gKHVwZGF0ZVRyYW5zZm9ybSAhPT0gdW5kZWZpbmVkKSA/IHVwZGF0ZVRyYW5zZm9ybSA6IHRydWU7Ly8hdXBkYXRlVHJhbnNmb3JtO1xuXG4gICAgdGhpcy50ZXh0dXJlQnVmZmVyLnRyYW5zZm9ybSA9IG1hdHJpeDtcblxuICAgIC8vVE9ETyBub3QgYSBmYW4gdGhhdCB0aGlzIGlzIGhlcmUuLi4gaXQgd2lsbCBtb3ZlIVxuICAgIHRoaXMudGV4dHVyZUJ1ZmZlci5hY3RpdmF0ZSgpO1xuXG4gICAgLy8gc2V0V29ybGQgQWxwaGEgdG8gZW5zdXJlIHRoYXQgdGhlIG9iamVjdCBpcyByZW5kZXJlciBhdCBmdWxsIG9wYWNpdHlcbiAgICBkaXNwbGF5T2JqZWN0LndvcmxkQWxwaGEgPSAxO1xuXG4gICAgaWYgKHVwZGF0ZVRyYW5zZm9ybSlcbiAgICB7XG5cbiAgICAgICAgLy8gcmVzZXQgdGhlIG1hdHJpeCBvZiB0aGUgZGlzcGxhdHlPYmplY3QuLlxuICAgICAgICBkaXNwbGF5T2JqZWN0LndvcmxkVHJhbnNmb3JtLmlkZW50aXR5KCk7XG5cbiAgICAgICAgZGlzcGxheU9iamVjdC5jdXJyZW50Qm91bmRzID0gbnVsbDtcblxuICAgICAgICAvLyBUaW1lIHRvIHVwZGF0ZSBhbGwgdGhlIGNoaWxkcmVuIG9mIHRoZSBkaXNwbGF5T2JqZWN0IHdpdGggdGhlIG5ldyBtYXRyaXguLlxuICAgICAgICB2YXIgY2hpbGRyZW4gPSBkaXNwbGF5T2JqZWN0LmNoaWxkcmVuO1xuICAgICAgICB2YXIgaSwgajtcblxuICAgICAgICBmb3IgKGkgPSAwLCBqID0gY2hpbGRyZW4ubGVuZ3RoOyBpIDwgajsgKytpKVxuICAgICAgICB7XG4gICAgICAgICAgICBjaGlsZHJlbltpXS51cGRhdGVUcmFuc2Zvcm0oKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vVE9ETyByZW5hbWUgdGV4dHVyZUJ1ZmZlciB0byByZW5kZXJUYXJnZXQuLlxuICAgIHZhciB0ZW1wID0gIHRoaXMucmVuZGVyZXIuZmlsdGVyTWFuYWdlcjtcblxuICAgIHRoaXMucmVuZGVyZXIuZmlsdGVyTWFuYWdlciA9IHRoaXMuZmlsdGVyTWFuYWdlcjtcbiAgICB0aGlzLnJlbmRlcmVyLnJlbmRlckRpc3BsYXlPYmplY3QoZGlzcGxheU9iamVjdCwgdGhpcy50ZXh0dXJlQnVmZmVyLCBjbGVhcik7XG5cbiAgICB0aGlzLnJlbmRlcmVyLmZpbHRlck1hbmFnZXIgPSB0ZW1wO1xufTtcblxuXG4vKipcbiAqIEludGVybmFsIG1ldGhvZCBhc3NpZ25lZCB0byB0aGUgYHJlbmRlcmAgcHJvcGVydHkgaWYgdXNpbmcgYSBDYW52YXNSZW5kZXJlci5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIGRpc3BsYXlPYmplY3Qge1BJWEkuRGlzcGxheU9iamVjdH0gVGhlIGRpc3BsYXkgb2JqZWN0IHRvIHJlbmRlciB0aGlzIHRleHR1cmUgb25cbiAqIEBwYXJhbSBbbWF0cml4XSB7UElYSS5NYXRyaXh9IE9wdGlvbmFsIG1hdHJpeCB0byBhcHBseSB0byB0aGUgZGlzcGxheSBvYmplY3QgYmVmb3JlIHJlbmRlcmluZy5cbiAqIEBwYXJhbSBbY2xlYXJdIHtib29sZWFufSBJZiB0cnVlIHRoZSB0ZXh0dXJlIHdpbGwgYmUgY2xlYXJlZCBiZWZvcmUgdGhlIGRpc3BsYXlPYmplY3QgaXMgZHJhd25cbiAqL1xuUmVuZGVyVGV4dHVyZS5wcm90b3R5cGUucmVuZGVyQ2FudmFzID0gZnVuY3Rpb24gKGRpc3BsYXlPYmplY3QsIG1hdHJpeCwgY2xlYXIsIHVwZGF0ZVRyYW5zZm9ybSlcbntcbiAgICBpZiAoIXRoaXMudmFsaWQpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdXBkYXRlVHJhbnNmb3JtID0gISF1cGRhdGVUcmFuc2Zvcm07XG5cbiAgICB2YXIgd3QgPSB0ZW1wTWF0cml4O1xuXG4gICAgd3QuaWRlbnRpdHkoKTtcblxuICAgIGlmIChtYXRyaXgpXG4gICAge1xuICAgICAgICB3dC5hcHBlbmQobWF0cml4KTtcbiAgICB9XG5cbiAgICB2YXIgY2FjaGVkV3QgPSBkaXNwbGF5T2JqZWN0LndvcmxkVHJhbnNmb3JtO1xuICAgIGRpc3BsYXlPYmplY3Qud29ybGRUcmFuc2Zvcm0gPSB3dDtcblxuICAgIC8vIHNldFdvcmxkIEFscGhhIHRvIGVuc3VyZSB0aGF0IHRoZSBvYmplY3QgaXMgcmVuZGVyZXIgYXQgZnVsbCBvcGFjaXR5XG4gICAgZGlzcGxheU9iamVjdC53b3JsZEFscGhhID0gMTtcblxuICAgIC8vIFRpbWUgdG8gdXBkYXRlIGFsbCB0aGUgY2hpbGRyZW4gb2YgdGhlIGRpc3BsYXlPYmplY3Qgd2l0aCB0aGUgbmV3IG1hdHJpeC4uXG4gICAgdmFyIGNoaWxkcmVuID0gZGlzcGxheU9iamVjdC5jaGlsZHJlbjtcbiAgICB2YXIgaSwgajtcblxuICAgIGZvciAoaSA9IDAsIGogPSBjaGlsZHJlbi5sZW5ndGg7IGkgPCBqOyArK2kpXG4gICAge1xuICAgICAgICBjaGlsZHJlbltpXS51cGRhdGVUcmFuc2Zvcm0oKTtcbiAgICB9XG5cbiAgICBpZiAoY2xlYXIpXG4gICAge1xuICAgICAgICB0aGlzLnRleHR1cmVCdWZmZXIuY2xlYXIoKTtcbiAgICB9XG5cblxuLy8gICAgdGhpcy50ZXh0dXJlQnVmZmVyLlxuICAgIHZhciBjb250ZXh0ID0gdGhpcy50ZXh0dXJlQnVmZmVyLmNvbnRleHQ7XG5cbiAgICB2YXIgcmVhbFJlc29sdXRpb24gPSB0aGlzLnJlbmRlcmVyLnJlc29sdXRpb247XG5cbiAgICB0aGlzLnJlbmRlcmVyLnJlc29sdXRpb24gPSB0aGlzLnJlc29sdXRpb247XG5cbiAgICB0aGlzLnJlbmRlcmVyLnJlbmRlckRpc3BsYXlPYmplY3QoZGlzcGxheU9iamVjdCwgY29udGV4dCk7XG5cbiAgICB0aGlzLnJlbmRlcmVyLnJlc29sdXRpb24gPSByZWFsUmVzb2x1dGlvbjtcblxuICAgIGlmKGRpc3BsYXlPYmplY3Qud29ybGRUcmFuc2Zvcm0gPT09IHd0KVxuICAgIHtcbiAgICAgICAgLy8gZml4ZXMgY2FjaGVBc0JpdG1hcCBIYXBwZW5pbmcgZHVyaW5nIHRoZSBhYm92ZS4uXG4gICAgICAgIGRpc3BsYXlPYmplY3Qud29ybGRUcmFuc2Zvcm0gPSBjYWNoZWRXdDtcbiAgICB9XG5cbn07XG5cbi8qKlxuICogRGVzdHJveXMgdGhpcyB0ZXh0dXJlXG4gKlxuICogQHBhcmFtIGRlc3Ryb3lCYXNlIHtib29sZWFufSBXaGV0aGVyIHRvIGRlc3Ryb3kgdGhlIGJhc2UgdGV4dHVyZSBhcyB3ZWxsXG4gKi9cblJlbmRlclRleHR1cmUucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoKVxue1xuICAgIFRleHR1cmUucHJvdG90eXBlLmRlc3Ryb3kuY2FsbCh0aGlzLCB0cnVlKTtcblxuICAgIHRoaXMudGV4dHVyZUJ1ZmZlci5kZXN0cm95KCk7XG5cbiAgICAvLyBkZXN0cm95IHRoZSBmaWx0ZXJtYW5hZ2VyLi5cbiAgICBpZih0aGlzLmZpbHRlck1hbmFnZXIpXG4gICAge1xuICAgICAgICB0aGlzLmZpbHRlck1hbmFnZXIuZGVzdHJveSgpO1xuICAgIH1cblxuICAgIHRoaXMucmVuZGVyZXIgPSBudWxsO1xufTtcblxuLyoqXG4gKiBXaWxsIHJldHVybiBhIEhUTUwgSW1hZ2Ugb2YgdGhlIHRleHR1cmVcbiAqXG4gKiBAcmV0dXJuIHtJbWFnZX1cbiAqL1xuUmVuZGVyVGV4dHVyZS5wcm90b3R5cGUuZ2V0SW1hZ2UgPSBmdW5jdGlvbiAoKVxue1xuICAgIHZhciBpbWFnZSA9IG5ldyBJbWFnZSgpO1xuICAgIGltYWdlLnNyYyA9IHRoaXMuZ2V0QmFzZTY0KCk7XG4gICAgcmV0dXJuIGltYWdlO1xufTtcblxuLyoqXG4gKiBXaWxsIHJldHVybiBhIGEgYmFzZTY0IGVuY29kZWQgc3RyaW5nIG9mIHRoaXMgdGV4dHVyZS4gSXQgd29ya3MgYnkgY2FsbGluZyBSZW5kZXJUZXh0dXJlLmdldENhbnZhcyBhbmQgdGhlbiBydW5uaW5nIHRvRGF0YVVSTCBvbiB0aGF0LlxuICpcbiAqIEByZXR1cm4ge3N0cmluZ30gQSBiYXNlNjQgZW5jb2RlZCBzdHJpbmcgb2YgdGhlIHRleHR1cmUuXG4gKi9cblJlbmRlclRleHR1cmUucHJvdG90eXBlLmdldEJhc2U2NCA9IGZ1bmN0aW9uICgpXG57XG4gICAgcmV0dXJuIHRoaXMuZ2V0Q2FudmFzKCkudG9EYXRhVVJMKCk7XG59O1xuXG4vKipcbiAqIENyZWF0ZXMgYSBDYW52YXMgZWxlbWVudCwgcmVuZGVycyB0aGlzIFJlbmRlclRleHR1cmUgdG8gaXQgYW5kIHRoZW4gcmV0dXJucyBpdC5cbiAqXG4gKiBAcmV0dXJuIHtIVE1MQ2FudmFzRWxlbWVudH0gQSBDYW52YXMgZWxlbWVudCB3aXRoIHRoZSB0ZXh0dXJlIHJlbmRlcmVkIG9uLlxuICovXG5SZW5kZXJUZXh0dXJlLnByb3RvdHlwZS5nZXRDYW52YXMgPSBmdW5jdGlvbiAoKVxue1xuICAgIGlmICh0aGlzLnJlbmRlcmVyLnR5cGUgPT09IENPTlNULlJFTkRFUkVSX1RZUEUuV0VCR0wpXG4gICAge1xuICAgICAgICB2YXIgZ2wgPSB0aGlzLnJlbmRlcmVyLmdsO1xuICAgICAgICB2YXIgd2lkdGggPSB0aGlzLnRleHR1cmVCdWZmZXIuc2l6ZS53aWR0aDtcbiAgICAgICAgdmFyIGhlaWdodCA9IHRoaXMudGV4dHVyZUJ1ZmZlci5zaXplLmhlaWdodDtcblxuICAgICAgICB2YXIgd2ViR0xQaXhlbHMgPSBuZXcgVWludDhBcnJheSg0ICogd2lkdGggKiBoZWlnaHQpO1xuXG4gICAgICAgIGdsLmJpbmRGcmFtZWJ1ZmZlcihnbC5GUkFNRUJVRkZFUiwgdGhpcy50ZXh0dXJlQnVmZmVyLmZyYW1lQnVmZmVyKTtcbiAgICAgICAgZ2wucmVhZFBpeGVscygwLCAwLCB3aWR0aCwgaGVpZ2h0LCBnbC5SR0JBLCBnbC5VTlNJR05FRF9CWVRFLCB3ZWJHTFBpeGVscyk7XG4gICAgICAgIGdsLmJpbmRGcmFtZWJ1ZmZlcihnbC5GUkFNRUJVRkZFUiwgbnVsbCk7XG5cbiAgICAgICAgdmFyIHRlbXBDYW52YXMgPSBuZXcgQ2FudmFzQnVmZmVyKHdpZHRoLCBoZWlnaHQpO1xuICAgICAgICB2YXIgY2FudmFzRGF0YSA9IHRlbXBDYW52YXMuY29udGV4dC5nZXRJbWFnZURhdGEoMCwgMCwgd2lkdGgsIGhlaWdodCk7XG4gICAgICAgIGNhbnZhc0RhdGEuZGF0YS5zZXQod2ViR0xQaXhlbHMpO1xuXG4gICAgICAgIHRlbXBDYW52YXMuY29udGV4dC5wdXRJbWFnZURhdGEoY2FudmFzRGF0YSwgMCwgMCk7XG5cbiAgICAgICAgcmV0dXJuIHRlbXBDYW52YXMuY2FudmFzO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICByZXR1cm4gdGhpcy50ZXh0dXJlQnVmZmVyLmNhbnZhcztcbiAgICB9XG59O1xuXG4vKipcbiAqIFdpbGwgcmV0dXJuIGEgb25lLWRpbWVuc2lvbmFsIGFycmF5IGNvbnRhaW5pbmcgdGhlIHBpeGVsIGRhdGEgb2YgdGhlIGVudGlyZSB0ZXh0dXJlIGluIFJHQkEgb3JkZXIsIHdpdGggaW50ZWdlciB2YWx1ZXMgYmV0d2VlbiAwIGFuZCAyNTUgKGluY2x1ZGVkKS5cbiAqXG4gKiBAcmV0dXJuIHtVaW50OENsYW1wZWRBcnJheX1cbiAqL1xuUmVuZGVyVGV4dHVyZS5wcm90b3R5cGUuZ2V0UGl4ZWxzID0gZnVuY3Rpb24gKClcbntcbiAgICB2YXIgd2lkdGgsIGhlaWdodDtcblxuICAgIGlmICh0aGlzLnJlbmRlcmVyLnR5cGUgPT09IENPTlNULlJFTkRFUkVSX1RZUEUuV0VCR0wpXG4gICAge1xuICAgICAgICB2YXIgZ2wgPSB0aGlzLnJlbmRlcmVyLmdsO1xuICAgICAgICB3aWR0aCA9IHRoaXMudGV4dHVyZUJ1ZmZlci5zaXplLndpZHRoO1xuICAgICAgICBoZWlnaHQgPSB0aGlzLnRleHR1cmVCdWZmZXIuc2l6ZS5oZWlnaHQ7XG5cbiAgICAgICAgdmFyIHdlYkdMUGl4ZWxzID0gbmV3IFVpbnQ4QXJyYXkoNCAqIHdpZHRoICogaGVpZ2h0KTtcblxuICAgICAgICBnbC5iaW5kRnJhbWVidWZmZXIoZ2wuRlJBTUVCVUZGRVIsIHRoaXMudGV4dHVyZUJ1ZmZlci5mcmFtZUJ1ZmZlcik7XG4gICAgICAgIGdsLnJlYWRQaXhlbHMoMCwgMCwgd2lkdGgsIGhlaWdodCwgZ2wuUkdCQSwgZ2wuVU5TSUdORURfQllURSwgd2ViR0xQaXhlbHMpO1xuICAgICAgICBnbC5iaW5kRnJhbWVidWZmZXIoZ2wuRlJBTUVCVUZGRVIsIG51bGwpO1xuXG4gICAgICAgIHJldHVybiB3ZWJHTFBpeGVscztcbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgd2lkdGggPSB0aGlzLnRleHR1cmVCdWZmZXIuY2FudmFzLndpZHRoO1xuICAgICAgICBoZWlnaHQgPSB0aGlzLnRleHR1cmVCdWZmZXIuY2FudmFzLmhlaWdodDtcblxuICAgICAgICByZXR1cm4gdGhpcy50ZXh0dXJlQnVmZmVyLmNhbnZhcy5nZXRDb250ZXh0KCcyZCcpLmdldEltYWdlRGF0YSgwLCAwLCB3aWR0aCwgaGVpZ2h0KS5kYXRhO1xuICAgIH1cbn07XG5cbi8qKlxuICogV2lsbCByZXR1cm4gYSBvbmUtZGltZW5zaW9uYWwgYXJyYXkgY29udGFpbmluZyB0aGUgcGl4ZWwgZGF0YSBvZiBhIHBpeGVsIHdpdGhpbiB0aGUgdGV4dHVyZSBpbiBSR0JBIG9yZGVyLCB3aXRoIGludGVnZXIgdmFsdWVzIGJldHdlZW4gMCBhbmQgMjU1IChpbmNsdWRlZCkuXG4gKlxuICogQHBhcmFtIHgge251bWJlcn0gVGhlIHggY29vcmRpbmF0ZSBvZiB0aGUgcGl4ZWwgdG8gcmV0cmlldmUuXG4gKiBAcGFyYW0geSB7bnVtYmVyfSBUaGUgeSBjb29yZGluYXRlIG9mIHRoZSBwaXhlbCB0byByZXRyaWV2ZS5cbiAqIEByZXR1cm4ge1VpbnQ4Q2xhbXBlZEFycmF5fVxuICovXG5SZW5kZXJUZXh0dXJlLnByb3RvdHlwZS5nZXRQaXhlbCA9IGZ1bmN0aW9uICh4LCB5KVxue1xuICAgIGlmICh0aGlzLnJlbmRlcmVyLnR5cGUgPT09IENPTlNULlJFTkRFUkVSX1RZUEUuV0VCR0wpXG4gICAge1xuICAgICAgICB2YXIgZ2wgPSB0aGlzLnJlbmRlcmVyLmdsO1xuXG4gICAgICAgIHZhciB3ZWJHTFBpeGVscyA9IG5ldyBVaW50OEFycmF5KDQpO1xuXG4gICAgICAgIGdsLmJpbmRGcmFtZWJ1ZmZlcihnbC5GUkFNRUJVRkZFUiwgdGhpcy50ZXh0dXJlQnVmZmVyLmZyYW1lQnVmZmVyKTtcbiAgICAgICAgZ2wucmVhZFBpeGVscyh4LCB5LCAxLCAxLCBnbC5SR0JBLCBnbC5VTlNJR05FRF9CWVRFLCB3ZWJHTFBpeGVscyk7XG4gICAgICAgIGdsLmJpbmRGcmFtZWJ1ZmZlcihnbC5GUkFNRUJVRkZFUiwgbnVsbCk7XG5cbiAgICAgICAgcmV0dXJuIHdlYkdMUGl4ZWxzO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICByZXR1cm4gdGhpcy50ZXh0dXJlQnVmZmVyLmNhbnZhcy5nZXRDb250ZXh0KCcyZCcpLmdldEltYWdlRGF0YSh4LCB5LCAxLCAxKS5kYXRhO1xuICAgIH1cbn07XG4iLCJ2YXIgQmFzZVRleHR1cmUgPSByZXF1aXJlKCcuL0Jhc2VUZXh0dXJlJyksXG4gICAgVmlkZW9CYXNlVGV4dHVyZSA9IHJlcXVpcmUoJy4vVmlkZW9CYXNlVGV4dHVyZScpLFxuICAgIFRleHR1cmVVdnMgPSByZXF1aXJlKCcuL1RleHR1cmVVdnMnKSxcbiAgICBFdmVudEVtaXR0ZXIgPSByZXF1aXJlKCdldmVudGVtaXR0ZXIzJyksXG4gICAgbWF0aCA9IHJlcXVpcmUoJy4uL21hdGgnKSxcbiAgICB1dGlscyA9IHJlcXVpcmUoJy4uL3V0aWxzJyk7XG5cbi8qKlxuICogQSB0ZXh0dXJlIHN0b3JlcyB0aGUgaW5mb3JtYXRpb24gdGhhdCByZXByZXNlbnRzIGFuIGltYWdlIG9yIHBhcnQgb2YgYW4gaW1hZ2UuIEl0IGNhbm5vdCBiZSBhZGRlZFxuICogdG8gdGhlIGRpc3BsYXkgbGlzdCBkaXJlY3RseS4gSW5zdGVhZCB1c2UgaXQgYXMgdGhlIHRleHR1cmUgZm9yIGEgU3ByaXRlLiBJZiBubyBmcmFtZSBpcyBwcm92aWRlZCB0aGVuIHRoZSB3aG9sZSBpbWFnZSBpcyB1c2VkLlxuICpcbiAqIFlvdSBjYW4gZGlyZWN0bHkgY3JlYXRlIGEgdGV4dHVyZSBmcm9tIGFuIGltYWdlIGFuZCB0aGVuIHJldXNlIGl0IG11bHRpcGxlIHRpbWVzIGxpa2UgdGhpcyA6XG4gKlxuICogYGBganNcbiAqIHZhciB0ZXh0dXJlID0gUElYSS5UZXh0dXJlLmZyb21JbWFnZSgnYXNzZXRzL2ltYWdlLnBuZycpO1xuICogdmFyIHNwcml0ZTEgPSBuZXcgUElYSS5TcHJpdGUodGV4dHVyZSk7XG4gKiB2YXIgc3ByaXRlMiA9IG5ldyBQSVhJLlNwcml0ZSh0ZXh0dXJlKTtcbiAqIGBgYFxuICpcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqIEBwYXJhbSBiYXNlVGV4dHVyZSB7UElYSS5CYXNlVGV4dHVyZX0gVGhlIGJhc2UgdGV4dHVyZSBzb3VyY2UgdG8gY3JlYXRlIHRoZSB0ZXh0dXJlIGZyb21cbiAqIEBwYXJhbSBbZnJhbWVdIHtQSVhJLlJlY3RhbmdsZX0gVGhlIHJlY3RhbmdsZSBmcmFtZSBvZiB0aGUgdGV4dHVyZSB0byBzaG93XG4gKiBAcGFyYW0gW2Nyb3BdIHtQSVhJLlJlY3RhbmdsZX0gVGhlIGFyZWEgb2Ygb3JpZ2luYWwgdGV4dHVyZVxuICogQHBhcmFtIFt0cmltXSB7UElYSS5SZWN0YW5nbGV9IFRyaW1tZWQgdGV4dHVyZSByZWN0YW5nbGVcbiAqIEBwYXJhbSBbcm90YXRlXSB7Ym9vbGVhbn0gaW5kaWNhdGVzIHdoZXRoZXIgdGhlIHRleHR1cmUgc2hvdWxkIGJlIHJvdGF0ZWQgYnkgOTAgZGVncmVlcyAoIHVzZWQgYnkgdGV4dHVyZSBwYWNrZXIgKVxuICovXG5mdW5jdGlvbiBUZXh0dXJlKGJhc2VUZXh0dXJlLCBmcmFtZSwgY3JvcCwgdHJpbSwgcm90YXRlKVxue1xuICAgIEV2ZW50RW1pdHRlci5jYWxsKHRoaXMpO1xuXG4gICAgLyoqXG4gICAgICogRG9lcyB0aGlzIFRleHR1cmUgaGF2ZSBhbnkgZnJhbWUgZGF0YSBhc3NpZ25lZCB0byBpdD9cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICovXG4gICAgdGhpcy5ub0ZyYW1lID0gZmFsc2U7XG5cbiAgICBpZiAoIWZyYW1lKVxuICAgIHtcbiAgICAgICAgdGhpcy5ub0ZyYW1lID0gdHJ1ZTtcbiAgICAgICAgZnJhbWUgPSBuZXcgbWF0aC5SZWN0YW5nbGUoMCwgMCwgMSwgMSk7XG4gICAgfVxuXG4gICAgaWYgKGJhc2VUZXh0dXJlIGluc3RhbmNlb2YgVGV4dHVyZSlcbiAgICB7XG4gICAgICAgIGJhc2VUZXh0dXJlID0gYmFzZVRleHR1cmUuYmFzZVRleHR1cmU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhlIGJhc2UgdGV4dHVyZSB0aGF0IHRoaXMgdGV4dHVyZSB1c2VzLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5CYXNlVGV4dHVyZX1cbiAgICAgKi9cbiAgICB0aGlzLmJhc2VUZXh0dXJlID0gYmFzZVRleHR1cmU7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgZnJhbWUgc3BlY2lmaWVzIHRoZSByZWdpb24gb2YgdGhlIGJhc2UgdGV4dHVyZSB0aGF0IHRoaXMgdGV4dHVyZSB1c2VzXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlJlY3RhbmdsZX1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX2ZyYW1lID0gZnJhbWU7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgdGV4dHVyZSB0cmltIGRhdGEuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlJlY3RhbmdsZX1cbiAgICAgKi9cbiAgICB0aGlzLnRyaW0gPSB0cmltO1xuXG4gICAgLyoqXG4gICAgICogVGhpcyB3aWxsIGxldCB0aGUgcmVuZGVyZXIga25vdyBpZiB0aGUgdGV4dHVyZSBpcyB2YWxpZC4gSWYgaXQncyBub3QgdGhlbiBpdCBjYW5ub3QgYmUgcmVuZGVyZWQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqL1xuICAgIHRoaXMudmFsaWQgPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIFRoaXMgd2lsbCBsZXQgYSByZW5kZXJlciBrbm93IHRoYXQgYSB0ZXh0dXJlIGhhcyBiZWVuIHVwZGF0ZWQgKHVzZWQgbWFpbmx5IGZvciB3ZWJHTCB1diB1cGRhdGVzKVxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKi9cbiAgICB0aGlzLnJlcXVpcmVzVXBkYXRlID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgV2ViR0wgVVYgZGF0YSBjYWNoZS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuVGV4dHVyZVV2c31cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX3V2cyA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgd2lkdGggb2YgdGhlIFRleHR1cmUgaW4gcGl4ZWxzLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMud2lkdGggPSAwO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGhlaWdodCBvZiB0aGUgVGV4dHVyZSBpbiBwaXhlbHMuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy5oZWlnaHQgPSAwO1xuXG4gICAgLyoqXG4gICAgICogVGhpcyBpcyB0aGUgYXJlYSBvZiB0aGUgQmFzZVRleHR1cmUgaW1hZ2UgdG8gYWN0dWFsbHkgY29weSB0byB0aGUgQ2FudmFzIC8gV2ViR0wgd2hlbiByZW5kZXJpbmcsXG4gICAgICogaXJyZXNwZWN0aXZlIG9mIHRoZSBhY3R1YWwgZnJhbWUgc2l6ZSBvciBwbGFjZW1lbnQgKHdoaWNoIGNhbiBiZSBpbmZsdWVuY2VkIGJ5IHRyaW1tZWQgdGV4dHVyZSBhdGxhc2VzKVxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5SZWN0YW5nbGV9XG4gICAgICovXG4gICAgdGhpcy5jcm9wID0gY3JvcCB8fCBmcmFtZTsvL25ldyBtYXRoLlJlY3RhbmdsZSgwLCAwLCAxLCAxKTtcblxuICAgIC8qKlxuICAgICAqIEluZGljYXRlcyB3aGV0aGVyIHRoZSB0ZXh0dXJlIHNob3VsZCBiZSByb3RhdGVkIGJ5IDkwIGRlZ3JlZXNcbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKi9cbiAgICB0aGlzLnJvdGF0ZSA9ICEhcm90YXRlO1xuXG4gICAgaWYgKGJhc2VUZXh0dXJlLmhhc0xvYWRlZClcbiAgICB7XG4gICAgICAgIGlmICh0aGlzLm5vRnJhbWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGZyYW1lID0gbmV3IG1hdGguUmVjdGFuZ2xlKDAsIDAsIGJhc2VUZXh0dXJlLndpZHRoLCBiYXNlVGV4dHVyZS5oZWlnaHQpO1xuXG4gICAgICAgICAgICAvLyBpZiB0aGVyZSBpcyBubyBmcmFtZSB3ZSBzaG91bGQgbW9uaXRvciBmb3IgYW55IGJhc2UgdGV4dHVyZSBjaGFuZ2VzLi5cbiAgICAgICAgICAgIGJhc2VUZXh0dXJlLm9uKCd1cGRhdGUnLCB0aGlzLm9uQmFzZVRleHR1cmVVcGRhdGVkLCB0aGlzKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmZyYW1lID0gZnJhbWU7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIGJhc2VUZXh0dXJlLm9uY2UoJ2xvYWRlZCcsIHRoaXMub25CYXNlVGV4dHVyZUxvYWRlZCwgdGhpcyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRmlyZWQgd2hlbiB0aGUgdGV4dHVyZSBpcyB1cGRhdGVkLiBUaGlzIGhhcHBlbnMgaWYgdGhlIGZyYW1lIG9yIHRoZSBiYXNlVGV4dHVyZSBpcyB1cGRhdGVkLlxuICAgICAqXG4gICAgICogQGV2ZW50IHVwZGF0ZVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLlRleHR1cmUjXG4gICAgICogQHByb3RlY3RlZFxuICAgICAqL1xufVxuXG5UZXh0dXJlLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoRXZlbnRFbWl0dGVyLnByb3RvdHlwZSk7XG5UZXh0dXJlLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFRleHR1cmU7XG5tb2R1bGUuZXhwb3J0cyA9IFRleHR1cmU7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKFRleHR1cmUucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogVGhlIGZyYW1lIHNwZWNpZmllcyB0aGUgcmVnaW9uIG9mIHRoZSBiYXNlIHRleHR1cmUgdGhhdCB0aGlzIHRleHR1cmUgdXNlcy5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuUmVjdGFuZ2xlfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLlRleHR1cmUjXG4gICAgICovXG4gICAgZnJhbWU6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fZnJhbWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKGZyYW1lKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLl9mcmFtZSA9IGZyYW1lO1xuXG4gICAgICAgICAgICB0aGlzLm5vRnJhbWUgPSBmYWxzZTtcblxuICAgICAgICAgICAgdGhpcy53aWR0aCA9IGZyYW1lLndpZHRoO1xuICAgICAgICAgICAgdGhpcy5oZWlnaHQgPSBmcmFtZS5oZWlnaHQ7XG5cbiAgICAgICAgICAgIGlmICghdGhpcy50cmltICYmICF0aGlzLnJvdGF0ZSAmJiAoZnJhbWUueCArIGZyYW1lLndpZHRoID4gdGhpcy5iYXNlVGV4dHVyZS53aWR0aCB8fCBmcmFtZS55ICsgZnJhbWUuaGVpZ2h0ID4gdGhpcy5iYXNlVGV4dHVyZS5oZWlnaHQpKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignVGV4dHVyZSBFcnJvcjogZnJhbWUgZG9lcyBub3QgZml0IGluc2lkZSB0aGUgYmFzZSBUZXh0dXJlIGRpbWVuc2lvbnMgJyArIHRoaXMpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvL3RoaXMudmFsaWQgPSBmcmFtZSAmJiBmcmFtZS53aWR0aCAmJiBmcmFtZS5oZWlnaHQgJiYgdGhpcy5iYXNlVGV4dHVyZS5zb3VyY2UgJiYgdGhpcy5iYXNlVGV4dHVyZS5oYXNMb2FkZWQ7XG4gICAgICAgICAgICB0aGlzLnZhbGlkID0gZnJhbWUgJiYgZnJhbWUud2lkdGggJiYgZnJhbWUuaGVpZ2h0ICYmIHRoaXMuYmFzZVRleHR1cmUuaGFzTG9hZGVkO1xuXG4gICAgICAgICAgICBpZiAodGhpcy50cmltKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHRoaXMud2lkdGggPSB0aGlzLnRyaW0ud2lkdGg7XG4gICAgICAgICAgICAgICAgdGhpcy5oZWlnaHQgPSB0aGlzLnRyaW0uaGVpZ2h0O1xuICAgICAgICAgICAgICAgIHRoaXMuX2ZyYW1lLndpZHRoID0gdGhpcy50cmltLndpZHRoO1xuICAgICAgICAgICAgICAgIHRoaXMuX2ZyYW1lLmhlaWdodCA9IHRoaXMudHJpbS5oZWlnaHQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdGhpcy5jcm9wID0gZnJhbWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICh0aGlzLnZhbGlkKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHRoaXMuX3VwZGF0ZVV2cygpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxufSk7XG5cbi8qKlxuICogVXBkYXRlcyB0aGlzIHRleHR1cmUgb24gdGhlIGdwdS5cbiAqXG4gKi9cblRleHR1cmUucHJvdG90eXBlLnVwZGF0ZSA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy5iYXNlVGV4dHVyZS51cGRhdGUoKTtcbn07XG5cbi8qKlxuICogQ2FsbGVkIHdoZW4gdGhlIGJhc2UgdGV4dHVyZSBpcyBsb2FkZWRcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5UZXh0dXJlLnByb3RvdHlwZS5vbkJhc2VUZXh0dXJlTG9hZGVkID0gZnVuY3Rpb24gKGJhc2VUZXh0dXJlKVxue1xuICAgIC8vIFRPRE8gdGhpcyBjb2RlIGxvb2tzIGNvbmZ1c2luZy4uIGJvbyB0byBhYnVzaW5nIGdldHRlcnMgYW5kIHNldHRlcnNzIVxuICAgIGlmICh0aGlzLm5vRnJhbWUpXG4gICAge1xuICAgICAgICB0aGlzLmZyYW1lID0gbmV3IG1hdGguUmVjdGFuZ2xlKDAsIDAsIGJhc2VUZXh0dXJlLndpZHRoLCBiYXNlVGV4dHVyZS5oZWlnaHQpO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICB0aGlzLmZyYW1lID0gdGhpcy5fZnJhbWU7XG4gICAgfVxuXG4gICAgdGhpcy5lbWl0KCd1cGRhdGUnLCB0aGlzKTtcbn07XG5cbi8qKlxuICogQ2FsbGVkIHdoZW4gdGhlIGJhc2UgdGV4dHVyZSBpcyB1cGRhdGVkXG4gKlxuICogQHByaXZhdGVcbiAqL1xuVGV4dHVyZS5wcm90b3R5cGUub25CYXNlVGV4dHVyZVVwZGF0ZWQgPSBmdW5jdGlvbiAoYmFzZVRleHR1cmUpXG57XG4gICAgdGhpcy5fZnJhbWUud2lkdGggPSBiYXNlVGV4dHVyZS53aWR0aDtcbiAgICB0aGlzLl9mcmFtZS5oZWlnaHQgPSBiYXNlVGV4dHVyZS5oZWlnaHQ7XG5cbiAgICB0aGlzLmVtaXQoJ3VwZGF0ZScsIHRoaXMpO1xufTtcblxuLyoqXG4gKiBEZXN0cm95cyB0aGlzIHRleHR1cmVcbiAqXG4gKiBAcGFyYW0gW2Rlc3Ryb3lCYXNlPWZhbHNlXSB7Ym9vbGVhbn0gV2hldGhlciB0byBkZXN0cm95IHRoZSBiYXNlIHRleHR1cmUgYXMgd2VsbFxuICovXG5UZXh0dXJlLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKGRlc3Ryb3lCYXNlKVxue1xuICAgIGlmICh0aGlzLmJhc2VUZXh0dXJlKVxuICAgIHtcbiAgICAgICAgaWYgKGRlc3Ryb3lCYXNlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmJhc2VUZXh0dXJlLmRlc3Ryb3koKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuYmFzZVRleHR1cmUub2ZmKCd1cGRhdGUnLCB0aGlzLm9uQmFzZVRleHR1cmVVcGRhdGVkLCB0aGlzKTtcbiAgICAgICAgdGhpcy5iYXNlVGV4dHVyZS5vZmYoJ2xvYWRlZCcsIHRoaXMub25CYXNlVGV4dHVyZUxvYWRlZCwgdGhpcyk7XG5cbiAgICAgICAgdGhpcy5iYXNlVGV4dHVyZSA9IG51bGw7XG4gICAgfVxuXG4gICAgdGhpcy5fZnJhbWUgPSBudWxsO1xuICAgIHRoaXMuX3V2cyA9IG51bGw7XG4gICAgdGhpcy50cmltID0gbnVsbDtcbiAgICB0aGlzLmNyb3AgPSBudWxsO1xuXG4gICAgdGhpcy52YWxpZCA9IGZhbHNlO1xuXG4gICAgdGhpcy5vZmYoJ2Rpc3Bvc2UnLCB0aGlzLmRpc3Bvc2UsIHRoaXMpO1xuICAgIHRoaXMub2ZmKCd1cGRhdGUnLCB0aGlzLnVwZGF0ZSwgdGhpcyk7XG59O1xuXG4vKipcbiAqIENyZWF0ZXMgYSBuZXcgdGV4dHVyZSBvYmplY3QgdGhhdCBhY3RzIHRoZSBzYW1lIGFzIHRoaXMgb25lLlxuICpcbiAqIEByZXR1cm4ge1BJWEkuVGV4dHVyZX1cbiAqL1xuVGV4dHVyZS5wcm90b3R5cGUuY2xvbmUgPSBmdW5jdGlvbiAoKVxue1xuICAgIHJldHVybiBuZXcgVGV4dHVyZSh0aGlzLmJhc2VUZXh0dXJlLCB0aGlzLmZyYW1lLCB0aGlzLmNyb3AsIHRoaXMudHJpbSwgdGhpcy5yb3RhdGUpO1xufTtcblxuLyoqXG4gKiBVcGRhdGVzIHRoZSBpbnRlcm5hbCBXZWJHTCBVViBjYWNoZS5cbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5UZXh0dXJlLnByb3RvdHlwZS5fdXBkYXRlVXZzID0gZnVuY3Rpb24gKClcbntcbiAgICBpZiAoIXRoaXMuX3V2cylcbiAgICB7XG4gICAgICAgIHRoaXMuX3V2cyA9IG5ldyBUZXh0dXJlVXZzKCk7XG4gICAgfVxuXG4gICAgdGhpcy5fdXZzLnNldCh0aGlzLmNyb3AsIHRoaXMuYmFzZVRleHR1cmUsIHRoaXMucm90YXRlKTtcbn07XG5cbi8qKlxuICogSGVscGVyIGZ1bmN0aW9uIHRoYXQgY3JlYXRlcyBhIFRleHR1cmUgb2JqZWN0IGZyb20gdGhlIGdpdmVuIGltYWdlIHVybC5cbiAqIElmIHRoZSBpbWFnZSBpcyBub3QgaW4gdGhlIHRleHR1cmUgY2FjaGUgaXQgd2lsbCBiZSAgY3JlYXRlZCBhbmQgbG9hZGVkLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBwYXJhbSBpbWFnZVVybCB7c3RyaW5nfSBUaGUgaW1hZ2UgdXJsIG9mIHRoZSB0ZXh0dXJlXG4gKiBAcGFyYW0gY3Jvc3NvcmlnaW4ge2Jvb2xlYW59IFdoZXRoZXIgcmVxdWVzdHMgc2hvdWxkIGJlIHRyZWF0ZWQgYXMgY3Jvc3NvcmlnaW5cbiAqIEBwYXJhbSBzY2FsZU1vZGUge251bWJlcn0gU2VlIHtAbGluayBQSVhJLlNDQUxFX01PREVTfSBmb3IgcG9zc2libGUgdmFsdWVzXG4gKiBAcmV0dXJuIHtQSVhJLlRleHR1cmV9IFRoZSBuZXdseSBjcmVhdGVkIHRleHR1cmVcbiAqL1xuVGV4dHVyZS5mcm9tSW1hZ2UgPSBmdW5jdGlvbiAoaW1hZ2VVcmwsIGNyb3Nzb3JpZ2luLCBzY2FsZU1vZGUpXG57XG4gICAgdmFyIHRleHR1cmUgPSB1dGlscy5UZXh0dXJlQ2FjaGVbaW1hZ2VVcmxdO1xuXG4gICAgaWYgKCF0ZXh0dXJlKVxuICAgIHtcbiAgICAgICAgdGV4dHVyZSA9IG5ldyBUZXh0dXJlKEJhc2VUZXh0dXJlLmZyb21JbWFnZShpbWFnZVVybCwgY3Jvc3NvcmlnaW4sIHNjYWxlTW9kZSkpO1xuICAgICAgICB1dGlscy5UZXh0dXJlQ2FjaGVbaW1hZ2VVcmxdID0gdGV4dHVyZTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGV4dHVyZTtcbn07XG5cbi8qKlxuICogSGVscGVyIGZ1bmN0aW9uIHRoYXQgY3JlYXRlcyBhIHNwcml0ZSB0aGF0IHdpbGwgY29udGFpbiBhIHRleHR1cmUgZnJvbSB0aGUgVGV4dHVyZUNhY2hlIGJhc2VkIG9uIHRoZSBmcmFtZUlkXG4gKiBUaGUgZnJhbWUgaWRzIGFyZSBjcmVhdGVkIHdoZW4gYSBUZXh0dXJlIHBhY2tlciBmaWxlIGhhcyBiZWVuIGxvYWRlZFxuICpcbiAqIEBzdGF0aWNcbiAqIEBwYXJhbSBmcmFtZUlkIHtzdHJpbmd9IFRoZSBmcmFtZSBJZCBvZiB0aGUgdGV4dHVyZSBpbiB0aGUgY2FjaGVcbiAqIEByZXR1cm4ge1BJWEkuVGV4dHVyZX0gVGhlIG5ld2x5IGNyZWF0ZWQgdGV4dHVyZVxuICovXG5UZXh0dXJlLmZyb21GcmFtZSA9IGZ1bmN0aW9uIChmcmFtZUlkKVxue1xuICAgIHZhciB0ZXh0dXJlID0gdXRpbHMuVGV4dHVyZUNhY2hlW2ZyYW1lSWRdO1xuXG4gICAgaWYgKCF0ZXh0dXJlKVxuICAgIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdUaGUgZnJhbWVJZCBcIicgKyBmcmFtZUlkICsgJ1wiIGRvZXMgbm90IGV4aXN0IGluIHRoZSB0ZXh0dXJlIGNhY2hlJyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRleHR1cmU7XG59O1xuXG4vKipcbiAqIEhlbHBlciBmdW5jdGlvbiB0aGF0IGNyZWF0ZXMgYSBuZXcgVGV4dHVyZSBiYXNlZCBvbiB0aGUgZ2l2ZW4gY2FudmFzIGVsZW1lbnQuXG4gKlxuICogQHN0YXRpY1xuICogQHBhcmFtIGNhbnZhcyB7Q2FudmFzfSBUaGUgY2FudmFzIGVsZW1lbnQgc291cmNlIG9mIHRoZSB0ZXh0dXJlXG4gKiBAcGFyYW0gc2NhbGVNb2RlIHtudW1iZXJ9IFNlZSB7QGxpbmsgUElYSS5TQ0FMRV9NT0RFU30gZm9yIHBvc3NpYmxlIHZhbHVlc1xuICogQHJldHVybiB7UElYSS5UZXh0dXJlfVxuICovXG5UZXh0dXJlLmZyb21DYW52YXMgPSBmdW5jdGlvbiAoY2FudmFzLCBzY2FsZU1vZGUpXG57XG4gICAgcmV0dXJuIG5ldyBUZXh0dXJlKEJhc2VUZXh0dXJlLmZyb21DYW52YXMoY2FudmFzLCBzY2FsZU1vZGUpKTtcbn07XG5cbi8qKlxuICogSGVscGVyIGZ1bmN0aW9uIHRoYXQgY3JlYXRlcyBhIG5ldyBUZXh0dXJlIGJhc2VkIG9uIHRoZSBnaXZlbiB2aWRlbyBlbGVtZW50LlxuICpcbiAqIEBzdGF0aWNcbiAqIEBwYXJhbSB2aWRlbyB7SFRNTFZpZGVvRWxlbWVudH1cbiAqIEBwYXJhbSBzY2FsZU1vZGUge251bWJlcn0gU2VlIHtAbGluayBQSVhJLlNDQUxFX01PREVTfSBmb3IgcG9zc2libGUgdmFsdWVzXG4gKiBAcmV0dXJuIHtQSVhJLlRleHR1cmV9IEEgVGV4dHVyZVxuICovXG5UZXh0dXJlLmZyb21WaWRlbyA9IGZ1bmN0aW9uICh2aWRlbywgc2NhbGVNb2RlKVxue1xuICAgIGlmICh0eXBlb2YgdmlkZW8gPT09ICdzdHJpbmcnKVxuICAgIHtcbiAgICAgICAgcmV0dXJuIFRleHR1cmUuZnJvbVZpZGVvVXJsKHZpZGVvLCBzY2FsZU1vZGUpO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICByZXR1cm4gbmV3IFRleHR1cmUoVmlkZW9CYXNlVGV4dHVyZS5mcm9tVmlkZW8odmlkZW8sIHNjYWxlTW9kZSkpO1xuICAgIH1cbn07XG5cbi8qKlxuICogSGVscGVyIGZ1bmN0aW9uIHRoYXQgY3JlYXRlcyBhIG5ldyBUZXh0dXJlIGJhc2VkIG9uIHRoZSB2aWRlbyB1cmwuXG4gKlxuICogQHN0YXRpY1xuICogQHBhcmFtIHZpZGVvVXJsIHtzdHJpbmd9XG4gKiBAcGFyYW0gc2NhbGVNb2RlIHtudW1iZXJ9IFNlZSB7QGxpbmsgUElYSS5TQ0FMRV9NT0RFU30gZm9yIHBvc3NpYmxlIHZhbHVlc1xuICogQHJldHVybiB7UElYSS5UZXh0dXJlfSBBIFRleHR1cmVcbiAqL1xuVGV4dHVyZS5mcm9tVmlkZW9VcmwgPSBmdW5jdGlvbiAodmlkZW9VcmwsIHNjYWxlTW9kZSlcbntcbiAgICByZXR1cm4gbmV3IFRleHR1cmUoVmlkZW9CYXNlVGV4dHVyZS5mcm9tVXJsKHZpZGVvVXJsLCBzY2FsZU1vZGUpKTtcbn07XG5cbi8qKlxuICogQWRkcyBhIHRleHR1cmUgdG8gdGhlIGdsb2JhbCB1dGlscy5UZXh0dXJlQ2FjaGUuIFRoaXMgY2FjaGUgaXMgc2hhcmVkIGFjcm9zcyB0aGUgd2hvbGUgUElYSSBvYmplY3QuXG4gKlxuICogQHN0YXRpY1xuICogQHBhcmFtIHRleHR1cmUge1BJWEkuVGV4dHVyZX0gVGhlIFRleHR1cmUgdG8gYWRkIHRvIHRoZSBjYWNoZS5cbiAqIEBwYXJhbSBpZCB7c3RyaW5nfSBUaGUgaWQgdGhhdCB0aGUgdGV4dHVyZSB3aWxsIGJlIHN0b3JlZCBhZ2FpbnN0LlxuICovXG5UZXh0dXJlLmFkZFRleHR1cmVUb0NhY2hlID0gZnVuY3Rpb24gKHRleHR1cmUsIGlkKVxue1xuICAgIHV0aWxzLlRleHR1cmVDYWNoZVtpZF0gPSB0ZXh0dXJlO1xufTtcblxuLyoqXG4gKiBSZW1vdmUgYSB0ZXh0dXJlIGZyb20gdGhlIGdsb2JhbCB1dGlscy5UZXh0dXJlQ2FjaGUuXG4gKlxuICogQHN0YXRpY1xuICogQHBhcmFtIGlkIHtzdHJpbmd9IFRoZSBpZCBvZiB0aGUgdGV4dHVyZSB0byBiZSByZW1vdmVkXG4gKiBAcmV0dXJuIHtQSVhJLlRleHR1cmV9IFRoZSB0ZXh0dXJlIHRoYXQgd2FzIHJlbW92ZWRcbiAqL1xuVGV4dHVyZS5yZW1vdmVUZXh0dXJlRnJvbUNhY2hlID0gZnVuY3Rpb24gKGlkKVxue1xuICAgIHZhciB0ZXh0dXJlID0gdXRpbHMuVGV4dHVyZUNhY2hlW2lkXTtcblxuICAgIGRlbGV0ZSB1dGlscy5UZXh0dXJlQ2FjaGVbaWRdO1xuICAgIGRlbGV0ZSB1dGlscy5CYXNlVGV4dHVyZUNhY2hlW2lkXTtcblxuICAgIHJldHVybiB0ZXh0dXJlO1xufTtcblxuLyoqXG4gKiBBbiBlbXB0eSB0ZXh0dXJlLCB1c2VkIG9mdGVuIHRvIG5vdCBoYXZlIHRvIGNyZWF0ZSBtdWx0aXBsZSBlbXB0eSB0ZXh0dXJlcy5cbiAqXG4gKiBAc3RhdGljXG4gKiBAY29uc3RhbnRcbiAqL1xuVGV4dHVyZS5FTVBUWSA9IG5ldyBUZXh0dXJlKG5ldyBCYXNlVGV4dHVyZSgpKTtcbiIsIlxuLyoqXG4gKiBBIHN0YW5kYXJkIG9iamVjdCB0byBzdG9yZSB0aGUgVXZzIG9mIGEgdGV4dHVyZVxuICpcbiAqIEBjbGFzc1xuICogQHByaXZhdGVcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKi9cbmZ1bmN0aW9uIFRleHR1cmVVdnMoKVxue1xuICAgIHRoaXMueDAgPSAwO1xuICAgIHRoaXMueTAgPSAwO1xuXG4gICAgdGhpcy54MSA9IDE7XG4gICAgdGhpcy55MSA9IDA7XG5cbiAgICB0aGlzLngyID0gMTtcbiAgICB0aGlzLnkyID0gMTtcblxuICAgIHRoaXMueDMgPSAwO1xuICAgIHRoaXMueTMgPSAxO1xuXG4gICAgdGhpcy54eTBfdWludDMyID0gMDtcbiAgICB0aGlzLnh5MV91aW50MzIgPSAwO1xuICAgIHRoaXMueHkyX3VpbnQzMiA9IDA7XG4gICAgdGhpcy54eTNfdWludDMyID0gMDtcblxuICAgIHRoaXMudXZzX3VpbnQzMiA9IG5ldyBVaW50MzJBcnJheSg0KVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IFRleHR1cmVVdnM7XG5cbi8qKlxuICogU2V0cyB0aGUgdGV4dHVyZSBVdnMgYmFzZWQgb24gdGhlIGdpdmVuIGZyYW1lIGluZm9ybWF0aW9uXG4gKiBAcGFyYW0gZnJhbWUge1BJWEkuUmVjdGFuZ2xlfVxuICogQHBhcmFtIGJhc2VGcmFtZSB7UElYSS5SZWN0YW5nbGV9XG4gKiBAcGFyYW0gcm90YXRlIHtib29sZWFufSBXaGV0aGVyIG9yIG5vdCB0aGUgZnJhbWUgaXMgcm90YXRlZFxuICogQHByaXZhdGVcbiAqL1xuVGV4dHVyZVV2cy5wcm90b3R5cGUuc2V0ID0gZnVuY3Rpb24gKGZyYW1lLCBiYXNlRnJhbWUsIHJvdGF0ZSlcbntcbiAgICB2YXIgdHcgPSBiYXNlRnJhbWUud2lkdGg7XG4gICAgdmFyIHRoID0gYmFzZUZyYW1lLmhlaWdodDtcblxuICAgIGlmKHJvdGF0ZSlcbiAgICB7XG4gICAgICAgIHRoaXMueDAgPSAoZnJhbWUueCArIGZyYW1lLmhlaWdodCkgLyB0dztcbiAgICAgICAgdGhpcy55MCA9IGZyYW1lLnkgLyB0aDtcblxuICAgICAgICB0aGlzLngxID0gKGZyYW1lLnggKyBmcmFtZS5oZWlnaHQpIC8gdHc7XG4gICAgICAgIHRoaXMueTEgPSAoZnJhbWUueSArIGZyYW1lLndpZHRoKSAvIHRoO1xuXG4gICAgICAgIHRoaXMueDIgPSBmcmFtZS54IC8gdHc7XG4gICAgICAgIHRoaXMueTIgPSAoZnJhbWUueSArIGZyYW1lLndpZHRoKSAvIHRoO1xuXG4gICAgICAgIHRoaXMueDMgPSBmcmFtZS54IC8gdHc7XG4gICAgICAgIHRoaXMueTMgPSBmcmFtZS55IC8gdGg7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG5cbiAgICAgICAgdGhpcy54MCA9IGZyYW1lLnggLyB0dztcbiAgICAgICAgdGhpcy55MCA9IGZyYW1lLnkgLyB0aDtcblxuICAgICAgICB0aGlzLngxID0gKGZyYW1lLnggKyBmcmFtZS53aWR0aCkgLyB0dztcbiAgICAgICAgdGhpcy55MSA9IGZyYW1lLnkgLyB0aDtcblxuICAgICAgICB0aGlzLngyID0gKGZyYW1lLnggKyBmcmFtZS53aWR0aCkgLyB0dztcbiAgICAgICAgdGhpcy55MiA9IChmcmFtZS55ICsgZnJhbWUuaGVpZ2h0KSAvIHRoO1xuXG4gICAgICAgIHRoaXMueDMgPSBmcmFtZS54IC8gdHc7XG4gICAgICAgIHRoaXMueTMgPSAoZnJhbWUueSArIGZyYW1lLmhlaWdodCkgLyB0aDtcbiAgICB9XG5cbiAgICB0aGlzLnV2c191aW50MzJbMF0gPSAoKCh0aGlzLnkwICogNjU1MzUpICYgMHhGRkZGKSA8PCAxNikgfCAoKHRoaXMueDAgKiA2NTUzNSkgJiAweEZGRkYpO1xuICAgIHRoaXMudXZzX3VpbnQzMlsxXSA9ICgoKHRoaXMueTEgKiA2NTUzNSkgJiAweEZGRkYpIDw8IDE2KSB8ICgodGhpcy54MSAqIDY1NTM1KSAmIDB4RkZGRik7XG4gICAgdGhpcy51dnNfdWludDMyWzJdID0gKCgodGhpcy55MiAqIDY1NTM1KSAmIDB4RkZGRikgPDwgMTYpIHwgKCh0aGlzLngyICogNjU1MzUpICYgMHhGRkZGKTtcbiAgICB0aGlzLnV2c191aW50MzJbM10gPSAoKCh0aGlzLnkzICogNjU1MzUpICYgMHhGRkZGKSA8PCAxNikgfCAoKHRoaXMueDMgKiA2NTUzNSkgJiAweEZGRkYpO1xufTtcbiIsInZhciBCYXNlVGV4dHVyZSA9IHJlcXVpcmUoJy4vQmFzZVRleHR1cmUnKSxcbiAgICB1dGlscyA9IHJlcXVpcmUoJy4uL3V0aWxzJyk7XG5cbi8qKlxuICogQSB0ZXh0dXJlIG9mIGEgW3BsYXlpbmddIFZpZGVvLlxuICpcbiAqIFZpZGVvIGJhc2UgdGV4dHVyZXMgbWltaWMgUGl4aSBCYXNlVGV4dHVyZS5mcm9tLi4uLiBtZXRob2QgaW4gdGhlaXIgY3JlYXRpb24gcHJvY2Vzcy5cbiAqXG4gKiBUaGlzIGNhbiBiZSB1c2VkIGluIHNldmVyYWwgd2F5cywgc3VjaCBhczpcbiAqXG4gKiBgYGBqc1xuICogdmFyIHRleHR1cmUgPSBQSVhJLlZpZGVvQmFzZVRleHR1cmUuZnJvbVVybCgnaHR0cDovL215ZG9tYWluLmNvbS92aWRlby5tcDQnKTtcbiAqXG4gKiB2YXIgdGV4dHVyZSA9IFBJWEkuVmlkZW9CYXNlVGV4dHVyZS5mcm9tVXJsKHsgc3JjOiAnaHR0cDovL215ZG9tYWluLmNvbS92aWRlby5tcDQnLCBtaW1lOiAndmlkZW8vbXA0JyB9KTtcbiAqXG4gKiB2YXIgdGV4dHVyZSA9IFBJWEkuVmlkZW9CYXNlVGV4dHVyZS5mcm9tVXJscyhbJy92aWRlby53ZWJtJywgJy92aWRlby5tcDQnXSk7XG4gKlxuICogdmFyIHRleHR1cmUgPSBQSVhJLlZpZGVvQmFzZVRleHR1cmUuZnJvbVVybHMoW1xuICogICAgIHsgc3JjOiAnL3ZpZGVvLndlYm0nLCBtaW1lOiAndmlkZW8vd2VibScgfSxcbiAqICAgICB7IHNyYzogJy92aWRlby5tcDQnLCBtaW1lOiAndmlkZW8vbXA0JyB9XG4gKiBdKTtcbiAqIGBgYFxuICpcbiAqIFNlZSB0aGUgW1wiZGV1c1wiIGRlbW9dKGh0dHA6Ly93d3cuZ29vZGJveWRpZ2l0YWwuY29tL3BpeGlqcy9leGFtcGxlcy9kZXVzLykuXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLkJhc2VUZXh0dXJlXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIHNvdXJjZSB7SFRNTFZpZGVvRWxlbWVudH1cbiAqIEBwYXJhbSBbc2NhbGVNb2RlXSB7bnVtYmVyfSBTZWUge0BsaW5rIFBJWEkuU0NBTEVfTU9ERVN9IGZvciBwb3NzaWJsZSB2YWx1ZXNcbiAqL1xuZnVuY3Rpb24gVmlkZW9CYXNlVGV4dHVyZShzb3VyY2UsIHNjYWxlTW9kZSlcbntcbiAgICBpZiAoIXNvdXJjZSlcbiAgICB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignTm8gdmlkZW8gc291cmNlIGVsZW1lbnQgc3BlY2lmaWVkLicpO1xuICAgIH1cblxuICAgIC8vIGhvb2sgaW4gaGVyZSB0byBjaGVjayBpZiB2aWRlbyBpcyBhbHJlYWR5IGF2YWlsYWJsZS5cbiAgICAvLyBCYXNlVGV4dHVyZSBsb29rcyBmb3IgYSBzb3VyY2UuY29tcGxldGUgYm9vbGVhbiwgcGx1cyB3aWR0aCAmIGhlaWdodC5cblxuICAgIGlmICgoc291cmNlLnJlYWR5U3RhdGUgPT09IHNvdXJjZS5IQVZFX0VOT1VHSF9EQVRBIHx8IHNvdXJjZS5yZWFkeVN0YXRlID09PSBzb3VyY2UuSEFWRV9GVVRVUkVfREFUQSkgJiYgc291cmNlLndpZHRoICYmIHNvdXJjZS5oZWlnaHQpXG4gICAge1xuICAgICAgICBzb3VyY2UuY29tcGxldGUgPSB0cnVlO1xuICAgIH1cblxuICAgIEJhc2VUZXh0dXJlLmNhbGwodGhpcywgc291cmNlLCBzY2FsZU1vZGUpO1xuXG4gICAgLyoqXG4gICAgICogU2hvdWxkIHRoZSBiYXNlIHRleHR1cmUgYXV0b21hdGljYWxseSB1cGRhdGUgaXRzZWxmLCBzZXQgdG8gdHJ1ZSBieSBkZWZhdWx0XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqIEBkZWZhdWx0IHRydWVcbiAgICAgKi9cbiAgICB0aGlzLmF1dG9VcGRhdGUgPSBmYWxzZTtcblxuICAgIHRoaXMuX29uVXBkYXRlID0gdGhpcy5fb25VcGRhdGUuYmluZCh0aGlzKTtcbiAgICB0aGlzLl9vbkNhblBsYXkgPSB0aGlzLl9vbkNhblBsYXkuYmluZCh0aGlzKTtcblxuICAgIGlmICghc291cmNlLmNvbXBsZXRlKVxuICAgIHtcbiAgICAgICAgc291cmNlLmFkZEV2ZW50TGlzdGVuZXIoJ2NhbnBsYXknLCB0aGlzLl9vbkNhblBsYXkpO1xuICAgICAgICBzb3VyY2UuYWRkRXZlbnRMaXN0ZW5lcignY2FucGxheXRocm91Z2gnLCB0aGlzLl9vbkNhblBsYXkpO1xuXG4gICAgICAgIC8vIHN0YXJ0ZWQgcGxheWluZy4uXG4gICAgICAgIHNvdXJjZS5hZGRFdmVudExpc3RlbmVyKCdwbGF5JywgdGhpcy5fb25QbGF5U3RhcnQuYmluZCh0aGlzKSk7XG4gICAgICAgIHNvdXJjZS5hZGRFdmVudExpc3RlbmVyKCdwYXVzZScsIHRoaXMuX29uUGxheVN0b3AuYmluZCh0aGlzKSk7XG4gICAgfVxuXG4gICAgdGhpcy5fX2xvYWRlZCA9IGZhbHNlO1xufVxuXG5WaWRlb0Jhc2VUZXh0dXJlLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoQmFzZVRleHR1cmUucHJvdG90eXBlKTtcblZpZGVvQmFzZVRleHR1cmUucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gVmlkZW9CYXNlVGV4dHVyZTtcbm1vZHVsZS5leHBvcnRzID0gVmlkZW9CYXNlVGV4dHVyZTtcblxuLyoqXG4gKiBUaGUgaW50ZXJuYWwgdXBkYXRlIGxvb3Agb2YgdGhlIHZpZGVvIGJhc2UgdGV4dHVyZSwgb25seSBydW5zIHdoZW4gYXV0b1VwZGF0ZSBpcyBzZXQgdG8gdHJ1ZVxuICpcbiAqIEBwcml2YXRlXG4gKi9cblZpZGVvQmFzZVRleHR1cmUucHJvdG90eXBlLl9vblVwZGF0ZSA9IGZ1bmN0aW9uICgpXG57XG4gICAgaWYgKHRoaXMuYXV0b1VwZGF0ZSlcbiAgICB7XG4gICAgICAgIHdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUodGhpcy5fb25VcGRhdGUpO1xuICAgICAgICB0aGlzLnVwZGF0ZSgpO1xuICAgIH1cbn07XG5cbi8qKlxuICogUnVucyB0aGUgdXBkYXRlIGxvb3Agd2hlbiB0aGUgdmlkZW8gaXMgcmVhZHkgdG8gcGxheVxuICpcbiAqIEBwcml2YXRlXG4gKi9cblZpZGVvQmFzZVRleHR1cmUucHJvdG90eXBlLl9vblBsYXlTdGFydCA9IGZ1bmN0aW9uICgpXG57XG4gICAgaWYgKCF0aGlzLmF1dG9VcGRhdGUpXG4gICAge1xuICAgICAgICB3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lKHRoaXMuX29uVXBkYXRlKTtcbiAgICAgICAgdGhpcy5hdXRvVXBkYXRlID0gdHJ1ZTtcbiAgICB9XG59O1xuXG4vKipcbiAqIEZpcmVkIHdoZW4gYSBwYXVzZSBldmVudCBpcyB0cmlnZ2VyZWQsIHN0b3BzIHRoZSB1cGRhdGUgbG9vcFxuICpcbiAqIEBwcml2YXRlXG4gKi9cblZpZGVvQmFzZVRleHR1cmUucHJvdG90eXBlLl9vblBsYXlTdG9wID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLmF1dG9VcGRhdGUgPSBmYWxzZTtcbn07XG5cbi8qKlxuICogRmlyZWQgd2hlbiB0aGUgdmlkZW8gaXMgbG9hZGVkIGFuZCByZWFkeSB0byBwbGF5XG4gKlxuICogQHByaXZhdGVcbiAqL1xuVmlkZW9CYXNlVGV4dHVyZS5wcm90b3R5cGUuX29uQ2FuUGxheSA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy5oYXNMb2FkZWQgPSB0cnVlO1xuXG4gICAgaWYgKHRoaXMuc291cmNlKVxuICAgIHtcbiAgICAgICAgdGhpcy5zb3VyY2UucmVtb3ZlRXZlbnRMaXN0ZW5lcignY2FucGxheScsIHRoaXMuX29uQ2FuUGxheSk7XG4gICAgICAgIHRoaXMuc291cmNlLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2NhbnBsYXl0aHJvdWdoJywgdGhpcy5fb25DYW5QbGF5KTtcblxuICAgICAgICB0aGlzLndpZHRoID0gdGhpcy5zb3VyY2UudmlkZW9XaWR0aDtcbiAgICAgICAgdGhpcy5oZWlnaHQgPSB0aGlzLnNvdXJjZS52aWRlb0hlaWdodDtcblxuICAgICAgICB0aGlzLnNvdXJjZS5wbGF5KCk7XG5cbiAgICAgICAgLy8gcHJldmVudCBtdWx0aXBsZSBsb2FkZWQgZGlzcGF0Y2hlcy4uXG4gICAgICAgIGlmICghdGhpcy5fX2xvYWRlZClcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5fX2xvYWRlZCA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLmVtaXQoJ2xvYWRlZCcsIHRoaXMpO1xuICAgICAgICB9XG4gICAgfVxufTtcblxuLyoqXG4gKiBEZXN0cm95cyB0aGlzIHRleHR1cmVcbiAqXG4gKi9cblZpZGVvQmFzZVRleHR1cmUucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoKVxue1xuICAgIGlmICh0aGlzLnNvdXJjZSAmJiB0aGlzLnNvdXJjZS5fcGl4aUlkKVxuICAgIHtcbiAgICAgICAgZGVsZXRlIHV0aWxzLkJhc2VUZXh0dXJlQ2FjaGVbIHRoaXMuc291cmNlLl9waXhpSWQgXTtcbiAgICAgICAgZGVsZXRlIHRoaXMuc291cmNlLl9waXhpSWQ7XG4gICAgfVxuXG4gICAgQmFzZVRleHR1cmUucHJvdG90eXBlLmRlc3Ryb3kuY2FsbCh0aGlzKTtcbn07XG5cbi8qKlxuICogTWltaWMgUGl4aSBCYXNlVGV4dHVyZS5mcm9tLi4uLiBtZXRob2QuXG4gKlxuICogQHN0YXRpY1xuICogQHBhcmFtIHZpZGVvIHtIVE1MVmlkZW9FbGVtZW50fVxuICogQHBhcmFtIHNjYWxlTW9kZSB7bnVtYmVyfSBTZWUge0BsaW5rIFBJWEkuU0NBTEVfTU9ERVN9IGZvciBwb3NzaWJsZSB2YWx1ZXNcbiAqIEByZXR1cm4ge1BJWEkuVmlkZW9CYXNlVGV4dHVyZX1cbiAqL1xuVmlkZW9CYXNlVGV4dHVyZS5mcm9tVmlkZW8gPSBmdW5jdGlvbiAodmlkZW8sIHNjYWxlTW9kZSlcbntcbiAgICBpZiAoIXZpZGVvLl9waXhpSWQpXG4gICAge1xuICAgICAgICB2aWRlby5fcGl4aUlkID0gJ3ZpZGVvXycgKyB1dGlscy51aWQoKTtcbiAgICB9XG5cbiAgICB2YXIgYmFzZVRleHR1cmUgPSB1dGlscy5CYXNlVGV4dHVyZUNhY2hlW3ZpZGVvLl9waXhpSWRdO1xuXG4gICAgaWYgKCFiYXNlVGV4dHVyZSlcbiAgICB7XG4gICAgICAgIGJhc2VUZXh0dXJlID0gbmV3IFZpZGVvQmFzZVRleHR1cmUodmlkZW8sIHNjYWxlTW9kZSk7XG4gICAgICAgIHV0aWxzLkJhc2VUZXh0dXJlQ2FjaGVbIHZpZGVvLl9waXhpSWQgXSA9IGJhc2VUZXh0dXJlO1xuICAgIH1cblxuICAgIHJldHVybiBiYXNlVGV4dHVyZTtcbn07XG5cbi8qKlxuICogSGVscGVyIGZ1bmN0aW9uIHRoYXQgY3JlYXRlcyBhIG5ldyBCYXNlVGV4dHVyZSBiYXNlZCBvbiB0aGUgZ2l2ZW4gdmlkZW8gZWxlbWVudC5cbiAqIFRoaXMgQmFzZVRleHR1cmUgY2FuIHRoZW4gYmUgdXNlZCB0byBjcmVhdGUgYSB0ZXh0dXJlXG4gKlxuICogQHN0YXRpY1xuICogQHBhcmFtIHZpZGVvU3JjIHtzdHJpbmd8b2JqZWN0fHN0cmluZ1tdfG9iamVjdFtdfSBUaGUgVVJMKHMpIGZvciB0aGUgdmlkZW8uXG4gKiBAcGFyYW0gW3ZpZGVvU3JjLnNyY10ge3N0cmluZ30gT25lIG9mIHRoZSBzb3VyY2UgdXJscyBmb3IgdGhlIHZpZGVvXG4gKiBAcGFyYW0gW3ZpZGVvU3JjLm1pbWVdIHtzdHJpbmd9IFRoZSBtaW1ldHlwZSBvZiB0aGUgdmlkZW8gKGUuZy4gJ3ZpZGVvL21wNCcpLiBJZiBub3Qgc3BlY2lmaWVkXG4gKiAgdGhlIHVybCdzIGV4dGVuc2lvbiB3aWxsIGJlIHVzZWQgYXMgdGhlIHNlY29uZCBwYXJ0IG9mIHRoZSBtaW1lIHR5cGUuXG4gKiBAcGFyYW0gc2NhbGVNb2RlIHtudW1iZXJ9IFNlZSB7QGxpbmsgUElYSS5TQ0FMRV9NT0RFU30gZm9yIHBvc3NpYmxlIHZhbHVlc1xuICogQHJldHVybiB7UElYSS5WaWRlb0Jhc2VUZXh0dXJlfVxuICovXG5WaWRlb0Jhc2VUZXh0dXJlLmZyb21VcmwgPSBmdW5jdGlvbiAodmlkZW9TcmMsIHNjYWxlTW9kZSlcbntcbiAgICB2YXIgdmlkZW8gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd2aWRlbycpO1xuXG4gICAgLy8gYXJyYXkgb2Ygb2JqZWN0cyBvciBzdHJpbmdzXG4gICAgaWYgKEFycmF5LmlzQXJyYXkodmlkZW9TcmMpKVxuICAgIHtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB2aWRlb1NyYy5sZW5ndGg7ICsraSlcbiAgICAgICAge1xuICAgICAgICAgICAgdmlkZW8uYXBwZW5kQ2hpbGQoY3JlYXRlU291cmNlKHZpZGVvU3JjW2ldLnNyYyB8fCB2aWRlb1NyY1tpXSwgdmlkZW9TcmNbaV0ubWltZSkpO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8vIHNpbmdsZSBvYmplY3Qgb3Igc3RyaW5nXG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgdmlkZW8uYXBwZW5kQ2hpbGQoY3JlYXRlU291cmNlKHZpZGVvU3JjLnNyYyB8fCB2aWRlb1NyYywgdmlkZW9TcmMubWltZSkpO1xuICAgIH1cblxuICAgIHZpZGVvLmxvYWQoKTtcbiAgICB2aWRlby5wbGF5KCk7XG5cbiAgICByZXR1cm4gVmlkZW9CYXNlVGV4dHVyZS5mcm9tVmlkZW8odmlkZW8sIHNjYWxlTW9kZSk7XG59O1xuXG5WaWRlb0Jhc2VUZXh0dXJlLmZyb21VcmxzID0gVmlkZW9CYXNlVGV4dHVyZS5mcm9tVXJsO1xuXG5mdW5jdGlvbiBjcmVhdGVTb3VyY2UocGF0aCwgdHlwZSlcbntcbiAgICBpZiAoIXR5cGUpXG4gICAge1xuICAgICAgICB0eXBlID0gJ3ZpZGVvLycgKyBwYXRoLnN1YnN0cihwYXRoLmxhc3RJbmRleE9mKCcuJykgKyAxKTtcbiAgICB9XG5cbiAgICB2YXIgc291cmNlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc291cmNlJyk7XG5cbiAgICBzb3VyY2Uuc3JjID0gcGF0aDtcbiAgICBzb3VyY2UudHlwZSA9IHR5cGU7XG5cbiAgICByZXR1cm4gc291cmNlO1xufVxuIiwidmFyIENPTlNUID0gcmVxdWlyZSgnLi4vY29uc3QnKSxcbiAgICBFdmVudEVtaXR0ZXIgPSByZXF1aXJlKCdldmVudGVtaXR0ZXIzJyksXG4gICAgLy8gSW50ZXJuYWwgZXZlbnQgdXNlZCBieSBjb21wb3NlZCBlbWl0dGVyXG4gICAgVElDSyA9ICd0aWNrJztcblxuLyoqXG4gKiBBIFRpY2tlciBjbGFzcyB0aGF0IHJ1bnMgYW4gdXBkYXRlIGxvb3AgdGhhdCBvdGhlciBvYmplY3RzIGxpc3RlbiB0by5cbiAqIFRoaXMgY2xhc3MgaXMgY29tcG9zZWQgYXJvdW5kIGFuIEV2ZW50RW1pdHRlciBvYmplY3QgdG8gYWRkIGxpc3RlbmVyc1xuICogbWVhbnQgZm9yIGV4ZWN1dGlvbiBvbiB0aGUgbmV4dCByZXF1ZXN0ZWQgYW5pbWF0aW9uIGZyYW1lLlxuICogQW5pbWF0aW9uIGZyYW1lcyBhcmUgcmVxdWVzdGVkIG9ubHkgd2hlbiBuZWNlc3NhcnksXG4gKiBlLmcuIFdoZW4gdGhlIHRpY2tlciBpcyBzdGFydGVkIGFuZCB0aGUgZW1pdHRlciBoYXMgbGlzdGVuZXJzLlxuICpcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWEkudGlja2VyXG4gKi9cbmZ1bmN0aW9uIFRpY2tlcigpXG57XG4gICAgdmFyIF90aGlzID0gdGhpcztcblxuICAgIC8qKlxuICAgICAqIEludGVybmFsIHRpY2sgbWV0aG9kIGJvdW5kIHRvIHRpY2tlciBpbnN0YW5jZS5cbiAgICAgKiBUaGlzIGlzIGJlY2F1c2UgaW4gZWFybHkgMjAxNSwgRnVuY3Rpb24uYmluZFxuICAgICAqIGlzIHN0aWxsIDYwJSBzbG93ZXIgaW4gaGlnaCBwZXJmb3JtYW5jZSBzY2VuYXJpb3MuXG4gICAgICogQWxzbyBzZXBhcmF0aW5nIGZyYW1lIHJlcXVlc3RzIGZyb20gdXBkYXRlIG1ldGhvZFxuICAgICAqIHNvIGxpc3RlbmVycyBtYXkgYmUgY2FsbGVkIGF0IGFueSB0aW1lIGFuZCB3aXRoXG4gICAgICogYW55IGFuaW1hdGlvbiBBUEksIGp1c3QgaW52b2tlIHRpY2tlci51cGRhdGUodGltZSkuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX3RpY2sgPSBmdW5jdGlvbiBfdGljayh0aW1lKSB7XG5cbiAgICAgICAgX3RoaXMuX3JlcXVlc3RJZCA9IG51bGw7XG5cbiAgICAgICAgaWYgKF90aGlzLnN0YXJ0ZWQpXG4gICAgICAgIHtcbiAgICAgICAgICAgIC8vIEludm9rZSBsaXN0ZW5lcnMgbm93XG4gICAgICAgICAgICBfdGhpcy51cGRhdGUodGltZSk7XG4gICAgICAgICAgICAvLyBMaXN0ZW5lciBzaWRlIGVmZmVjdHMgbWF5IGhhdmUgbW9kaWZpZWQgdGlja2VyIHN0YXRlLlxuICAgICAgICAgICAgaWYgKF90aGlzLnN0YXJ0ZWQgJiYgX3RoaXMuX3JlcXVlc3RJZCA9PT0gbnVsbCAmJiBfdGhpcy5fZW1pdHRlci5saXN0ZW5lcnMoVElDSywgdHJ1ZSkpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgX3RoaXMuX3JlcXVlc3RJZCA9IHJlcXVlc3RBbmltYXRpb25GcmFtZShfdGhpcy5fdGljayk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgLyoqXG4gICAgICogSW50ZXJuYWwgZW1pdHRlciB1c2VkIHRvIGZpcmUgJ3RpY2snIGV2ZW50XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9lbWl0dGVyID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gICAgLyoqXG4gICAgICogSW50ZXJuYWwgY3VycmVudCBmcmFtZSByZXF1ZXN0IElEXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9yZXF1ZXN0SWQgPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogSW50ZXJuYWwgdmFsdWUgbWFuYWdlZCBieSBtaW5GUFMgcHJvcGVydHkgc2V0dGVyIGFuZCBnZXR0ZXIuXG4gICAgICogVGhpcyBpcyB0aGUgbWF4aW11bSBhbGxvd2VkIG1pbGxpc2Vjb25kcyBiZXR3ZWVuIHVwZGF0ZXMuXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9tYXhFbGFwc2VkTVMgPSAxMDA7XG5cbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIG9yIG5vdCB0aGlzIHRpY2tlciBzaG91bGQgaW52b2tlIHRoZSBtZXRob2RcbiAgICAgKiB7QGxpbmsgUElYSS50aWNrZXIuVGlja2VyI3N0YXJ0fSBhdXRvbWF0aWNhbGx5XG4gICAgICogd2hlbiBhIGxpc3RlbmVyIGlzIGFkZGVkLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgICAqL1xuICAgIHRoaXMuYXV0b1N0YXJ0ID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBTY2FsYXIgdGltZSB2YWx1ZSBmcm9tIGxhc3QgZnJhbWUgdG8gdGhpcyBmcmFtZS5cbiAgICAgKiBUaGlzIHZhbHVlIGlzIGNhcHBlZCBieSBzZXR0aW5nIHtAbGluayBQSVhJLnRpY2tlci5UaWNrZXIjbWluRlBTfVxuICAgICAqIGFuZCBpcyBzY2FsZWQgd2l0aCB7QGxpbmsgUElYSS50aWNrZXIuVGlja2VyI3NwZWVkfS5cbiAgICAgKiAqKk5vdGU6KiogVGhlIGNhcCBtYXkgYmUgZXhjZWVkZWQgYnkgc2NhbGluZy5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAxXG4gICAgICovXG4gICAgdGhpcy5kZWx0YVRpbWUgPSAxO1xuXG4gICAgLyoqXG4gICAgICogVGltZSBlbGFwc2VkIGluIG1pbGxpc2Vjb25kcyBmcm9tIGxhc3QgZnJhbWUgdG8gdGhpcyBmcmFtZS5cbiAgICAgKiBPcHBvc2VkIHRvIHdoYXQgdGhlIHNjYWxhciB7QGxpbmsgUElYSS50aWNrZXIuVGlja2VyI2RlbHRhVGltZX1cbiAgICAgKiBpcyBiYXNlZCwgdGhpcyB2YWx1ZSBpcyBuZWl0aGVyIGNhcHBlZCBub3Igc2NhbGVkLlxuICAgICAqIElmIHRoZSBwbGF0Zm9ybSBzdXBwb3J0cyBET01IaWdoUmVzVGltZVN0YW1wLFxuICAgICAqIHRoaXMgdmFsdWUgd2lsbCBoYXZlIGEgcHJlY2lzaW9uIG9mIDEgwrVzLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7RE9NSGlnaFJlc1RpbWVTdGFtcHxudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMSAvIFRBUkdFVF9GUE1TXG4gICAgICovXG4gICAgdGhpcy5lbGFwc2VkTVMgPSAxIC8gQ09OU1QuVEFSR0VUX0ZQTVM7IC8vIGRlZmF1bHQgdG8gdGFyZ2V0IGZyYW1lIHRpbWVcblxuICAgIC8qKlxuICAgICAqIFRoZSBsYXN0IHRpbWUge0BsaW5rIFBJWEkudGlja2VyLlRpY2tlciN1cGRhdGV9IHdhcyBpbnZva2VkLlxuICAgICAqIFRoaXMgdmFsdWUgaXMgYWxzbyByZXNldCBpbnRlcm5hbGx5IG91dHNpZGUgb2YgaW52b2tpbmdcbiAgICAgKiB1cGRhdGUsIGJ1dCBvbmx5IHdoZW4gYSBuZXcgYW5pbWF0aW9uIGZyYW1lIGlzIHJlcXVlc3RlZC5cbiAgICAgKiBJZiB0aGUgcGxhdGZvcm0gc3VwcG9ydHMgRE9NSGlnaFJlc1RpbWVTdGFtcCxcbiAgICAgKiB0aGlzIHZhbHVlIHdpbGwgaGF2ZSBhIHByZWNpc2lvbiBvZiAxIMK1cy5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge0RPTUhpZ2hSZXNUaW1lU3RhbXB8bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDBcbiAgICAgKi9cbiAgICB0aGlzLmxhc3RUaW1lID0gMDtcblxuICAgIC8qKlxuICAgICAqIEZhY3RvciBvZiBjdXJyZW50IHtAbGluayBQSVhJLnRpY2tlci5UaWNrZXIjZGVsdGFUaW1lfS5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIC8vIFNjYWxlcyB0aWNrZXIuZGVsdGFUaW1lIHRvIHdoYXQgd291bGQgYmVcbiAgICAgKiAvLyB0aGUgZXF1aXZhbGVudCBvZiBhcHByb3hpbWF0ZWx5IDEyMCBGUFNcbiAgICAgKiB0aWNrZXIuc3BlZWQgPSAyO1xuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDFcbiAgICAgKi9cbiAgICB0aGlzLnNwZWVkID0gMTtcblxuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgb3Igbm90IHRoaXMgdGlja2VyIGhhcyBiZWVuIHN0YXJ0ZWQuXG4gICAgICogYHRydWVgIGlmIHtAbGluayBQSVhJLnRpY2tlci5UaWNrZXIjc3RhcnR9IGhhcyBiZWVuIGNhbGxlZC5cbiAgICAgKiBgZmFsc2VgIGlmIHtAbGluayBQSVhJLnRpY2tlci5UaWNrZXIjc3RvcH0gaGFzIGJlZW4gY2FsbGVkLlxuICAgICAqIFdoaWxlIGBmYWxzZWAsIHRoaXMgdmFsdWUgbWF5IGNoYW5nZSB0byBgdHJ1ZWAgaW4gdGhlXG4gICAgICogZXZlbnQgb2Yge0BsaW5rIFBJWEkudGlja2VyLlRpY2tlciNhdXRvU3RhcnR9IGJlaW5nIGB0cnVlYFxuICAgICAqIGFuZCBhIGxpc3RlbmVyIGlzIGFkZGVkLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgICAqL1xuICAgIHRoaXMuc3RhcnRlZCA9IGZhbHNlO1xufVxuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhUaWNrZXIucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogVGhlIGZyYW1lcyBwZXIgc2Vjb25kIGF0IHdoaWNoIHRoaXMgdGlja2VyIGlzIHJ1bm5pbmcuXG4gICAgICogVGhlIGRlZmF1bHQgaXMgYXBwcm94aW1hdGVseSA2MCBpbiBtb3N0IG1vZGVybiBicm93c2Vycy5cbiAgICAgKiAqKk5vdGU6KiogVGhpcyBkb2VzIG5vdCBmYWN0b3IgaW4gdGhlIHZhbHVlIG9mXG4gICAgICoge0BsaW5rIFBJWEkudGlja2VyLlRpY2tlciNzcGVlZH0sIHdoaWNoIGlzIHNwZWNpZmljXG4gICAgICogdG8gc2NhbGluZyB7QGxpbmsgUElYSS50aWNrZXIuVGlja2VyI2RlbHRhVGltZX0uXG4gICAgICpcbiAgICAgKiBAbWVtYmVyXG4gICAgICogQG1lbWJlcm9mIFBJWEkudGlja2VyLlRpY2tlciNcbiAgICAgKiBAcmVhZG9ubHlcbiAgICAgKi9cbiAgICBGUFM6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbigpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiAxMDAwIC8gdGhpcy5lbGFwc2VkTVM7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogTWFuYWdlcyB0aGUgbWF4aW11bSBhbW91bnQgb2YgbWlsbGlzZWNvbmRzIGFsbG93ZWQgdG9cbiAgICAgKiBlbGFwc2UgYmV0d2VlbiBpbnZva2luZyB7QGxpbmsgUElYSS50aWNrZXIuVGlja2VyI3VwZGF0ZX0uXG4gICAgICogVGhpcyB2YWx1ZSBpcyB1c2VkIHRvIGNhcCB7QGxpbmsgUElYSS50aWNrZXIuVGlja2VyI2RlbHRhVGltZX0sXG4gICAgICogYnV0IGRvZXMgbm90IGVmZmVjdCB0aGUgbWVhc3VyZWQgdmFsdWUgb2Yge0BsaW5rIFBJWEkudGlja2VyLlRpY2tlciNGUFN9LlxuICAgICAqIFdoZW4gc2V0dGluZyB0aGlzIHByb3BlcnR5IGl0IGlzIGNsYW1wZWQgdG8gYSB2YWx1ZSBiZXR3ZWVuXG4gICAgICogYDBgIGFuZCBgUElYSS5UQVJHRVRfRlBNUyAqIDEwMDBgLlxuICAgICAqXG4gICAgICogQG1lbWJlclxuICAgICAqIEBtZW1iZXJvZiBQSVhJLnRpY2tlci5UaWNrZXIjXG4gICAgICogQGRlZmF1bHQgMTBcbiAgICAgKi9cbiAgICBtaW5GUFM6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbigpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiAxMDAwIC8gdGhpcy5fbWF4RWxhcHNlZE1TO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uKGZwcylcbiAgICAgICAge1xuICAgICAgICAgICAgLy8gQ2xhbXA6IDAgdG8gVEFSR0VUX0ZQTVNcbiAgICAgICAgICAgIHZhciBtaW5GUE1TID0gTWF0aC5taW4oTWF0aC5tYXgoMCwgZnBzKSAvIDEwMDAsIENPTlNULlRBUkdFVF9GUE1TKTtcbiAgICAgICAgICAgIHRoaXMuX21heEVsYXBzZWRNUyA9IDEgLyBtaW5GUE1TO1xuICAgICAgICB9XG4gICAgfVxufSk7XG5cbi8qKlxuICogQ29uZGl0aW9uYWxseSByZXF1ZXN0cyBhIG5ldyBhbmltYXRpb24gZnJhbWUuXG4gKiBJZiBhIGZyYW1lIGhhcyBub3QgYWxyZWFkeSBiZWVuIHJlcXVlc3RlZCwgYW5kIGlmIHRoZSBpbnRlcm5hbFxuICogZW1pdHRlciBoYXMgbGlzdGVuZXJzLCBhIG5ldyBmcmFtZSBpcyByZXF1ZXN0ZWQuXG4gKlxuICogQHByaXZhdGVcbiAqL1xuVGlja2VyLnByb3RvdHlwZS5fcmVxdWVzdElmTmVlZGVkID0gZnVuY3Rpb24gX3JlcXVlc3RJZk5lZWRlZCgpXG57XG4gICAgaWYgKHRoaXMuX3JlcXVlc3RJZCA9PT0gbnVsbCAmJiB0aGlzLl9lbWl0dGVyLmxpc3RlbmVycyhUSUNLLCB0cnVlKSlcbiAgICB7XG4gICAgICAgIC8vIGVuc3VyZSBjYWxsYmFja3MgZ2V0IGNvcnJlY3QgZGVsdGFcbiAgICAgICAgdGhpcy5sYXN0VGltZSA9IHBlcmZvcm1hbmNlLm5vdygpO1xuICAgICAgICB0aGlzLl9yZXF1ZXN0SWQgPSByZXF1ZXN0QW5pbWF0aW9uRnJhbWUodGhpcy5fdGljayk7XG4gICAgfVxufTtcblxuLyoqXG4gKiBDb25kaXRpb25hbGx5IGNhbmNlbHMgYSBwZW5kaW5nIGFuaW1hdGlvbiBmcmFtZS5cbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5UaWNrZXIucHJvdG90eXBlLl9jYW5jZWxJZk5lZWRlZCA9IGZ1bmN0aW9uIF9jYW5jZWxJZk5lZWRlZCgpXG57XG4gICAgaWYgKHRoaXMuX3JlcXVlc3RJZCAhPT0gbnVsbClcbiAgICB7XG4gICAgICAgIGNhbmNlbEFuaW1hdGlvbkZyYW1lKHRoaXMuX3JlcXVlc3RJZCk7XG4gICAgICAgIHRoaXMuX3JlcXVlc3RJZCA9IG51bGw7XG4gICAgfVxufTtcblxuLyoqXG4gKiBDb25kaXRpb25hbGx5IHJlcXVlc3RzIGEgbmV3IGFuaW1hdGlvbiBmcmFtZS5cbiAqIElmIHRoZSB0aWNrZXIgaGFzIGJlZW4gc3RhcnRlZCBpdCBjaGVja3MgaWYgYSBmcmFtZSBoYXMgbm90IGFscmVhZHlcbiAqIGJlZW4gcmVxdWVzdGVkLCBhbmQgaWYgdGhlIGludGVybmFsIGVtaXR0ZXIgaGFzIGxpc3RlbmVycy4gSWYgdGhlc2VcbiAqIGNvbmRpdGlvbnMgYXJlIG1ldCwgYSBuZXcgZnJhbWUgaXMgcmVxdWVzdGVkLiBJZiB0aGUgdGlja2VyIGhhcyBub3RcbiAqIGJlZW4gc3RhcnRlZCwgYnV0IGF1dG9TdGFydCBpcyBgdHJ1ZWAsIHRoZW4gdGhlIHRpY2tlciBzdGFydHMgbm93LFxuICogYW5kIGNvbnRpbnVlcyB3aXRoIHRoZSBwcmV2aW91cyBjb25kaXRpb25zIHRvIHJlcXVlc3QgYSBuZXcgZnJhbWUuXG4gKlxuICogQHByaXZhdGVcbiAqL1xuVGlja2VyLnByb3RvdHlwZS5fc3RhcnRJZlBvc3NpYmxlID0gZnVuY3Rpb24gX3N0YXJ0SWZQb3NzaWJsZSgpXG57XG4gICAgaWYgKHRoaXMuc3RhcnRlZClcbiAgICB7XG4gICAgICAgIHRoaXMuX3JlcXVlc3RJZk5lZWRlZCgpO1xuICAgIH1cbiAgICBlbHNlIGlmICh0aGlzLmF1dG9TdGFydClcbiAgICB7XG4gICAgICAgIHRoaXMuc3RhcnQoKTtcbiAgICB9XG59O1xuXG4vKipcbiAqIENhbGxzIHtAbGluayBtb2R1bGU6ZXZlbnRlbWl0dGVyMy5FdmVudEVtaXR0ZXIjb259IGludGVybmFsbHkgZm9yIHRoZVxuICogaW50ZXJuYWwgJ3RpY2snIGV2ZW50LiBJdCBjaGVja3MgaWYgdGhlIGVtaXR0ZXIgaGFzIGxpc3RlbmVycyxcbiAqIGFuZCBpZiBzbyBpdCByZXF1ZXN0cyBhIG5ldyBhbmltYXRpb24gZnJhbWUgYXQgdGhpcyBwb2ludC5cbiAqXG4gKiBAcGFyYW0gZm4ge0Z1bmN0aW9ufSBUaGUgbGlzdGVuZXIgZnVuY3Rpb24gdG8gYmUgYWRkZWQgZm9yIHVwZGF0ZXNcbiAqIEBwYXJhbSBbY29udGV4dF0ge0Z1bmN0aW9ufSBUaGUgbGlzdGVuZXIgY29udGV4dFxuICogQHJldHVybnMge1BJWEkudGlja2VyLlRpY2tlcn0gdGhpc1xuICovXG5UaWNrZXIucHJvdG90eXBlLmFkZCA9IGZ1bmN0aW9uIGFkZChmbiwgY29udGV4dClcbntcbiAgICB0aGlzLl9lbWl0dGVyLm9uKFRJQ0ssIGZuLCBjb250ZXh0KTtcblxuICAgIHRoaXMuX3N0YXJ0SWZQb3NzaWJsZSgpO1xuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIENhbGxzIHtAbGluayBtb2R1bGU6ZXZlbnRlbWl0dGVyMy5FdmVudEVtaXR0ZXIjb25jZX0gaW50ZXJuYWxseSBmb3IgdGhlXG4gKiBpbnRlcm5hbCAndGljaycgZXZlbnQuIEl0IGNoZWNrcyBpZiB0aGUgZW1pdHRlciBoYXMgbGlzdGVuZXJzLFxuICogYW5kIGlmIHNvIGl0IHJlcXVlc3RzIGEgbmV3IGFuaW1hdGlvbiBmcmFtZSBhdCB0aGlzIHBvaW50LlxuICpcbiAqIEBwYXJhbSBmbiB7RnVuY3Rpb259IFRoZSBsaXN0ZW5lciBmdW5jdGlvbiB0byBiZSBhZGRlZCBmb3Igb25lIHVwZGF0ZVxuICogQHBhcmFtIFtjb250ZXh0XSB7RnVuY3Rpb259IFRoZSBsaXN0ZW5lciBjb250ZXh0XG4gKiBAcmV0dXJucyB7UElYSS50aWNrZXIuVGlja2VyfSB0aGlzXG4gKi9cblRpY2tlci5wcm90b3R5cGUuYWRkT25jZSA9IGZ1bmN0aW9uIGFkZE9uY2UoZm4sIGNvbnRleHQpXG57XG4gICAgdGhpcy5fZW1pdHRlci5vbmNlKFRJQ0ssIGZuLCBjb250ZXh0KTtcblxuICAgIHRoaXMuX3N0YXJ0SWZQb3NzaWJsZSgpO1xuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIENhbGxzIHtAbGluayBtb2R1bGU6ZXZlbnRlbWl0dGVyMy5FdmVudEVtaXR0ZXIjb2ZmfSBpbnRlcm5hbGx5IGZvciAndGljaycgZXZlbnQuXG4gKiBJdCBjaGVja3MgaWYgdGhlIGVtaXR0ZXIgaGFzIGxpc3RlbmVycyBmb3IgJ3RpY2snIGV2ZW50LlxuICogSWYgaXQgZG9lcywgdGhlbiBpdCBjYW5jZWxzIHRoZSBhbmltYXRpb24gZnJhbWUuXG4gKlxuICogQHBhcmFtIFtmbl0ge0Z1bmN0aW9ufSBUaGUgbGlzdGVuZXIgZnVuY3Rpb24gdG8gYmUgcmVtb3ZlZFxuICogQHBhcmFtIFtjb250ZXh0XSB7RnVuY3Rpb259IFRoZSBsaXN0ZW5lciBjb250ZXh0IHRvIGJlIHJlbW92ZWRcbiAqIEByZXR1cm5zIHtQSVhJLnRpY2tlci5UaWNrZXJ9IHRoaXNcbiAqL1xuVGlja2VyLnByb3RvdHlwZS5yZW1vdmUgPSBmdW5jdGlvbiByZW1vdmUoZm4sIGNvbnRleHQpXG57XG4gICAgdGhpcy5fZW1pdHRlci5vZmYoVElDSywgZm4sIGNvbnRleHQpO1xuXG4gICAgaWYgKCF0aGlzLl9lbWl0dGVyLmxpc3RlbmVycyhUSUNLLCB0cnVlKSlcbiAgICB7XG4gICAgICAgIHRoaXMuX2NhbmNlbElmTmVlZGVkKCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIFN0YXJ0cyB0aGUgdGlja2VyLiBJZiB0aGUgdGlja2VyIGhhcyBsaXN0ZW5lcnNcbiAqIGEgbmV3IGFuaW1hdGlvbiBmcmFtZSBpcyByZXF1ZXN0ZWQgYXQgdGhpcyBwb2ludC5cbiAqL1xuVGlja2VyLnByb3RvdHlwZS5zdGFydCA9IGZ1bmN0aW9uIHN0YXJ0KClcbntcbiAgICBpZiAoIXRoaXMuc3RhcnRlZClcbiAgICB7XG4gICAgICAgIHRoaXMuc3RhcnRlZCA9IHRydWU7XG4gICAgICAgIHRoaXMuX3JlcXVlc3RJZk5lZWRlZCgpO1xuICAgIH1cbn07XG5cbi8qKlxuICogU3RvcHMgdGhlIHRpY2tlci4gSWYgdGhlIHRpY2tlciBoYXMgcmVxdWVzdGVkXG4gKiBhbiBhbmltYXRpb24gZnJhbWUgaXQgaXMgY2FuY2VsZWQgYXQgdGhpcyBwb2ludC5cbiAqL1xuVGlja2VyLnByb3RvdHlwZS5zdG9wID0gZnVuY3Rpb24gc3RvcCgpXG57XG4gICAgaWYgKHRoaXMuc3RhcnRlZClcbiAgICB7XG4gICAgICAgIHRoaXMuc3RhcnRlZCA9IGZhbHNlO1xuICAgICAgICB0aGlzLl9jYW5jZWxJZk5lZWRlZCgpO1xuICAgIH1cbn07XG5cbi8qKlxuICogVHJpZ2dlcnMgYW4gdXBkYXRlLiBBbiB1cGRhdGUgZW50YWlscyBzZXR0aW5nIHRoZVxuICogY3VycmVudCB7QGxpbmsgUElYSS50aWNrZXIuVGlja2VyI2VsYXBzZWRNU30sXG4gKiB0aGUgY3VycmVudCB7QGxpbmsgUElYSS50aWNrZXIuVGlja2VyI2RlbHRhVGltZX0sXG4gKiBpbnZva2luZyBhbGwgbGlzdGVuZXJzIHdpdGggY3VycmVudCBkZWx0YVRpbWUsXG4gKiBhbmQgdGhlbiBmaW5hbGx5IHNldHRpbmcge0BsaW5rIFBJWEkudGlja2VyLlRpY2tlciNsYXN0VGltZX1cbiAqIHdpdGggdGhlIHZhbHVlIG9mIGN1cnJlbnRUaW1lIHRoYXQgd2FzIHByb3ZpZGVkLlxuICogVGhpcyBtZXRob2Qgd2lsbCBiZSBjYWxsZWQgYXV0b21hdGljYWxseSBieSBhbmltYXRpb25cbiAqIGZyYW1lIGNhbGxiYWNrcyBpZiB0aGUgdGlja2VyIGluc3RhbmNlIGhhcyBiZWVuIHN0YXJ0ZWRcbiAqIGFuZCBsaXN0ZW5lcnMgYXJlIGFkZGVkLlxuICpcbiAqIEBwYXJhbSBbY3VycmVudFRpbWU9cGVyZm9ybWFuY2Uubm93KCldIHtET01IaWdoUmVzVGltZVN0YW1wfG51bWJlcn0gdGhlIGN1cnJlbnQgdGltZSBvZiBleGVjdXRpb25cbiAqL1xuVGlja2VyLnByb3RvdHlwZS51cGRhdGUgPSBmdW5jdGlvbiB1cGRhdGUoY3VycmVudFRpbWUpXG57XG4gICAgdmFyIGVsYXBzZWRNUztcblxuICAgIC8vIEFsbG93IGNhbGxpbmcgdXBkYXRlIGRpcmVjdGx5IHdpdGggZGVmYXVsdCBjdXJyZW50VGltZS5cbiAgICBjdXJyZW50VGltZSA9IGN1cnJlbnRUaW1lIHx8IHBlcmZvcm1hbmNlLm5vdygpO1xuICAgIC8vIFNhdmUgdW5jYXBwZWQgZWxhcHNlZE1TIGZvciBtZWFzdXJlbWVudFxuICAgIGVsYXBzZWRNUyA9IHRoaXMuZWxhcHNlZE1TID0gY3VycmVudFRpbWUgLSB0aGlzLmxhc3RUaW1lO1xuXG4gICAgLy8gY2FwIHRoZSBtaWxsaXNlY29uZHMgZWxhcHNlZCB1c2VkIGZvciBkZWx0YVRpbWVcbiAgICBpZiAoZWxhcHNlZE1TID4gdGhpcy5fbWF4RWxhcHNlZE1TKVxuICAgIHtcbiAgICAgICAgZWxhcHNlZE1TID0gdGhpcy5fbWF4RWxhcHNlZE1TO1xuICAgIH1cblxuICAgIHRoaXMuZGVsdGFUaW1lID0gZWxhcHNlZE1TICogQ09OU1QuVEFSR0VUX0ZQTVMgKiB0aGlzLnNwZWVkO1xuXG4gICAgLy8gSW52b2tlIGxpc3RlbmVycyBhZGRlZCB0byBpbnRlcm5hbCBlbWl0dGVyXG4gICAgdGhpcy5fZW1pdHRlci5lbWl0KFRJQ0ssIHRoaXMuZGVsdGFUaW1lKTtcblxuICAgIHRoaXMubGFzdFRpbWUgPSBjdXJyZW50VGltZTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gVGlja2VyO1xuIiwidmFyIFRpY2tlciA9IHJlcXVpcmUoJy4vVGlja2VyJyk7XG5cbi8qKlxuICogVGhlIHNoYXJlZCB0aWNrZXIgaW5zdGFuY2UgdXNlZCBieSB7QGxpbmsgUElYSS5leHRyYXMuTW92aWVDbGlwfS5cbiAqIGFuZCBieSB7QGxpbmsgUElYSS5pbnRlcmFjdGlvbi5JbnRlcmFjdGlvbk1hbmFnZXJ9LlxuICogVGhlIHByb3BlcnR5IHtAbGluayBQSVhJLnRpY2tlci5UaWNrZXIjYXV0b1N0YXJ0fSBpcyBzZXQgdG8gYHRydWVgXG4gKiBmb3IgdGhpcyBpbnN0YW5jZS4gUGxlYXNlIGZvbGxvdyB0aGUgZXhhbXBsZXMgZm9yIHVzYWdlLCBpbmNsdWRpbmdcbiAqIGhvdyB0byBvcHQtb3V0IG9mIGF1dG8tc3RhcnRpbmcgdGhlIHNoYXJlZCB0aWNrZXIuXG4gKlxuICogQGV4YW1wbGVcbiAqIHZhciB0aWNrZXIgPSBQSVhJLnRpY2tlci5zaGFyZWQ7XG4gKiAvLyBTZXQgdGhpcyB0byBwcmV2ZW50IHN0YXJ0aW5nIHRoaXMgdGlja2VyIHdoZW4gbGlzdGVuZXJzIGFyZSBhZGRlZC5cbiAqIC8vIEJ5IGRlZmF1bHQgdGhpcyBpcyB0cnVlIG9ubHkgZm9yIHRoZSBQSVhJLnRpY2tlci5zaGFyZWQgaW5zdGFuY2UuXG4gKiB0aWNrZXIuYXV0b1N0YXJ0ID0gZmFsc2U7XG4gKiAvLyBGWUksIGNhbGwgdGhpcyB0byBlbnN1cmUgdGhlIHRpY2tlciBpcyBzdG9wcGVkLiBJdCBzaG91bGQgYmUgc3RvcHBlZFxuICogLy8gaWYgeW91IGhhdmUgbm90IGF0dGVtcHRlZCB0byByZW5kZXIgYW55dGhpbmcgeWV0LlxuICogdGlja2VyLnN0b3AoKTtcbiAqIC8vIENhbGwgdGhpcyB3aGVuIHlvdSBhcmUgcmVhZHkgZm9yIGEgcnVubmluZyBzaGFyZWQgdGlja2VyLlxuICogdGlja2VyLnN0YXJ0KCk7XG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIFlvdSBtYXkgdXNlIHRoZSBzaGFyZWQgdGlja2VyIHRvIHJlbmRlci4uLlxuICogdmFyIHJlbmRlcmVyID0gUElYSS5hdXRvRGV0ZWN0UmVuZGVyZXIoODAwLCA2MDApO1xuICogdmFyIHN0YWdlID0gbmV3IFBJWEkuQ29udGFpbmVyKCk7XG4gKiB2YXIgaW50ZXJhY3Rpb25NYW5hZ2VyID0gUElYSS5pbnRlcmFjdGlvbi5JbnRlcmFjdGlvbk1hbmFnZXIocmVuZGVyZXIpO1xuICogZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChyZW5kZXJlci52aWV3KTtcbiAqIHRpY2tlci5hZGQoZnVuY3Rpb24gKHRpbWUpIHtcbiAqICAgICByZW5kZXJlci5yZW5kZXIoc3RhZ2UpO1xuICogfSk7XG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIE9yIHlvdSBjYW4ganVzdCB1cGRhdGUgaXQgbWFudWFsbHkuXG4gKiB0aWNrZXIuYXV0b1N0YXJ0ID0gZmFsc2U7XG4gKiB0aWNrZXIuc3RvcCgpO1xuICogZnVuY3Rpb24gYW5pbWF0ZSh0aW1lKSB7XG4gKiAgICAgdGlja2VyLnVwZGF0ZSh0aW1lKTtcbiAqICAgICByZW5kZXJlci5yZW5kZXIoc3RhZ2UpO1xuICogICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZShhbmltYXRlKTtcbiAqIH1cbiAqIGFuaW1hdGUocGVyZm9ybWFuY2Uubm93KCkpO1xuICpcbiAqIEB0eXBlIHtQSVhJLnRpY2tlci5UaWNrZXJ9XG4gKiBAbWVtYmVyb2YgUElYSS50aWNrZXJcbiAqL1xudmFyIHNoYXJlZCA9IG5ldyBUaWNrZXIoKTtcbnNoYXJlZC5hdXRvU3RhcnQgPSB0cnVlO1xuXG4vKipcbiAqIEBuYW1lc3BhY2UgUElYSS50aWNrZXJcbiAqL1xubW9kdWxlLmV4cG9ydHMgPSB7XG4gICAgc2hhcmVkOiBzaGFyZWQsXG4gICAgVGlja2VyOiBUaWNrZXJcbn07XG4iLCIvKipcbiAqIEdlbmVyaWMgTWFzayBTdGFjayBkYXRhIHN0cnVjdHVyZVxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICovXG5cbnZhciBHTF9NQVAgPSB7fTtcblxuXG52YXIgY3JlYXRlSW5kaWNlc0ZvclF1YWRzID0gZnVuY3Rpb24gKHNpemUpXG57XG4gICAgLy8gdGhlIHRvdGFsIG51bWJlciBvZiBpbmRpY2VzIGluIG91ciBhcnJheSwgdGhlcmUgYXJlIDYgcG9pbnRzIHBlciBxdWFkLlxuICAgXG4gICAgdmFyIHRvdGFsSW5kaWNlcyA9IHNpemUgKiA2O1xuXG4gICAgdmFyIGluZGljZXMgPSBuZXcgVWludDE2QXJyYXkodG90YWxJbmRpY2VzKTtcblxuXHQvLyBmaWxsIHRoZSBpbmRpY2VzIHdpdGggdGhlIHF1YWRzIHRvIGRyYXdcbiAgICBmb3IgKHZhciBpPTAsIGo9MDsgaSA8IHRvdGFsSW5kaWNlczsgaSArPSA2LCBqICs9IDQpXG4gICAge1xuICAgICAgICBpbmRpY2VzW2kgKyAwXSA9IGogKyAwO1xuICAgICAgICBpbmRpY2VzW2kgKyAxXSA9IGogKyAxO1xuICAgICAgICBpbmRpY2VzW2kgKyAyXSA9IGogKyAyO1xuICAgICAgICBpbmRpY2VzW2kgKyAzXSA9IGogKyAwO1xuICAgICAgICBpbmRpY2VzW2kgKyA0XSA9IGogKyAyO1xuICAgICAgICBpbmRpY2VzW2kgKyA1XSA9IGogKyAzO1xuICAgIH1cblxuICAgIHJldHVybiBpbmRpY2VzO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBjcmVhdGVJbmRpY2VzRm9yUXVhZHM7IiwidmFyIENPTlNUID0gcmVxdWlyZSgnLi4vY29uc3QnKTtcblxuLyoqXG4gKiBAbmFtZXNwYWNlIFBJWEkudXRpbHNcbiAqL1xudmFyIHV0aWxzID0gbW9kdWxlLmV4cG9ydHMgPSB7XG4gICAgX3VpZDogMCxcbiAgICBfc2FpZEhlbGxvOiBmYWxzZSxcblxuICAgIEV2ZW50RW1pdHRlcjogICByZXF1aXJlKCdldmVudGVtaXR0ZXIzJyksXG4gICAgcGx1Z2luVGFyZ2V0OiAgIHJlcXVpcmUoJy4vcGx1Z2luVGFyZ2V0JyksXG4gICAgYXN5bmM6ICAgICAgICAgIHJlcXVpcmUoJ2FzeW5jJyksXG5cbiAgICAvKipcbiAgICAgKiBHZXRzIHRoZSBuZXh0IHVuaXF1ZSBpZGVudGlmaWVyXG4gICAgICpcbiAgICAgKiBAcmV0dXJuIHtudW1iZXJ9IFRoZSBuZXh0IHVuaXF1ZSBpZGVudGlmaWVyIHRvIHVzZS5cbiAgICAgKi9cbiAgICB1aWQ6IGZ1bmN0aW9uICgpXG4gICAge1xuICAgICAgICByZXR1cm4gKyt1dGlscy5fdWlkO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBDb252ZXJ0cyBhIGhleCBjb2xvciBudW1iZXIgdG8gYW4gW1IsIEcsIEJdIGFycmF5XG4gICAgICpcbiAgICAgKiBAcGFyYW0gaGV4IHtudW1iZXJ9XG4gICAgICogQHBhcmFtICB7bnVtYmVyW119IFtvdXQ9W11dXG4gICAgICogQHJldHVybiB7bnVtYmVyW119IEFuIGFycmF5IHJlcHJlc2VudGluZyB0aGUgW1IsIEcsIEJdIG9mIHRoZSBjb2xvci5cbiAgICAgKi9cbiAgICBoZXgycmdiOiBmdW5jdGlvbiAoaGV4LCBvdXQpXG4gICAge1xuICAgICAgICBvdXQgPSBvdXQgfHwgW107XG5cbiAgICAgICAgb3V0WzBdID0gKGhleCA+PiAxNiAmIDB4RkYpIC8gMjU1O1xuICAgICAgICBvdXRbMV0gPSAoaGV4ID4+IDggJiAweEZGKSAvIDI1NTtcbiAgICAgICAgb3V0WzJdID0gKGhleCAmIDB4RkYpIC8gMjU1O1xuXG4gICAgICAgIHJldHVybiBvdXQ7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIENvbnZlcnRzIGEgaGV4IGNvbG9yIG51bWJlciB0byBhIHN0cmluZy5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBoZXgge251bWJlcn1cbiAgICAgKiBAcmV0dXJuIHtzdHJpbmd9IFRoZSBzdHJpbmcgY29sb3IuXG4gICAgICovXG4gICAgaGV4MnN0cmluZzogZnVuY3Rpb24gKGhleClcbiAgICB7XG4gICAgICAgIGhleCA9IGhleC50b1N0cmluZygxNik7XG4gICAgICAgIGhleCA9ICcwMDAwMDAnLnN1YnN0cigwLCA2IC0gaGV4Lmxlbmd0aCkgKyBoZXg7XG5cbiAgICAgICAgcmV0dXJuICcjJyArIGhleDtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQ29udmVydHMgYSBjb2xvciBhcyBhbiBbUiwgRywgQl0gYXJyYXkgdG8gYSBoZXggbnVtYmVyXG4gICAgICpcbiAgICAgKiBAcGFyYW0gcmdiIHtudW1iZXJbXX1cbiAgICAgKiBAcmV0dXJuIHtudW1iZXJ9IFRoZSBjb2xvciBudW1iZXJcbiAgICAgKi9cbiAgICByZ2IyaGV4OiBmdW5jdGlvbiAocmdiKVxuICAgIHtcbiAgICAgICAgcmV0dXJuICgocmdiWzBdKjI1NSA8PCAxNikgKyAocmdiWzFdKjI1NSA8PCA4KSArIHJnYlsyXSoyNTUpO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBDaGVja3Mgd2hldGhlciB0aGUgQ2FudmFzIEJsZW5kTW9kZXMgYXJlIHN1cHBvcnRlZCBieSB0aGUgY3VycmVudCBicm93c2VyXG4gICAgICpcbiAgICAgKiBAcmV0dXJuIHtib29sZWFufSB3aGV0aGVyIHRoZXkgYXJlIHN1cHBvcnRlZFxuICAgICAqL1xuICAgIGNhblVzZU5ld0NhbnZhc0JsZW5kTW9kZXM6IGZ1bmN0aW9uICgpXG4gICAge1xuICAgICAgICBpZiAodHlwZW9mIGRvY3VtZW50ID09PSAndW5kZWZpbmVkJylcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIHBuZ0hlYWQgPSAnZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFBUUFBQUFCQVFNQUFBREQ4cDJPQUFBQUExQk1WRVgvJztcbiAgICAgICAgdmFyIHBuZ0VuZCA9ICdBQUFBQ2tsRVFWUUkxMk5nQUFBQUFnQUI0aUc4TXdBQUFBQkpSVTVFcmtKZ2dnPT0nO1xuXG4gICAgICAgIHZhciBtYWdlbnRhID0gbmV3IEltYWdlKCk7XG4gICAgICAgIG1hZ2VudGEuc3JjID0gcG5nSGVhZCArICdBUDgwNE9hNicgKyBwbmdFbmQ7XG5cbiAgICAgICAgdmFyIHllbGxvdyA9IG5ldyBJbWFnZSgpO1xuICAgICAgICB5ZWxsb3cuc3JjID0gcG5nSGVhZCArICcvd0NLeHZSRicgKyBwbmdFbmQ7XG5cbiAgICAgICAgdmFyIGNhbnZhcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NhbnZhcycpO1xuICAgICAgICBjYW52YXMud2lkdGggPSA2O1xuICAgICAgICBjYW52YXMuaGVpZ2h0ID0gMTtcblxuICAgICAgICB2YXIgY29udGV4dCA9IGNhbnZhcy5nZXRDb250ZXh0KCcyZCcpO1xuICAgICAgICBjb250ZXh0Lmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbiA9ICdtdWx0aXBseSc7XG4gICAgICAgIGNvbnRleHQuZHJhd0ltYWdlKG1hZ2VudGEsIDAsIDApO1xuICAgICAgICBjb250ZXh0LmRyYXdJbWFnZSh5ZWxsb3csIDIsIDApO1xuXG4gICAgICAgIHZhciBkYXRhID0gY29udGV4dC5nZXRJbWFnZURhdGEoMiwwLDEsMSkuZGF0YTtcblxuICAgICAgICByZXR1cm4gKGRhdGFbMF0gPT09IDI1NSAmJiBkYXRhWzFdID09PSAwICYmIGRhdGFbMl0gPT09IDApO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBHaXZlbiBhIG51bWJlciwgdGhpcyBmdW5jdGlvbiByZXR1cm5zIHRoZSBjbG9zZXN0IG51bWJlciB0aGF0IGlzIGEgcG93ZXIgb2YgdHdvXG4gICAgICogdGhpcyBmdW5jdGlvbiBpcyB0YWtlbiBmcm9tIFN0YXJsaW5nIEZyYW1ld29yayBhcyBpdHMgcHJldHR5IG5lYXQgOylcbiAgICAgKlxuICAgICAqIEBwYXJhbSBudW1iZXIge251bWJlcn1cbiAgICAgKiBAcmV0dXJuIHtudW1iZXJ9IHRoZSBjbG9zZXN0IG51bWJlciB0aGF0IGlzIGEgcG93ZXIgb2YgdHdvXG4gICAgICovXG4gICAgZ2V0TmV4dFBvd2VyT2ZUd286IGZ1bmN0aW9uIChudW1iZXIpXG4gICAge1xuICAgICAgICAvLyBzZWU6IGh0dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvUG93ZXJfb2ZfdHdvI0Zhc3RfYWxnb3JpdGhtX3RvX2NoZWNrX2lmX2FfcG9zaXRpdmVfbnVtYmVyX2lzX2FfcG93ZXJfb2ZfdHdvXG4gICAgICAgIGlmIChudW1iZXIgPiAwICYmIChudW1iZXIgJiAobnVtYmVyIC0gMSkpID09PSAwKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gbnVtYmVyO1xuICAgICAgICB9XG4gICAgICAgIGVsc2VcbiAgICAgICAge1xuICAgICAgICAgICAgdmFyIHJlc3VsdCA9IDE7XG5cbiAgICAgICAgICAgIHdoaWxlIChyZXN1bHQgPCBudW1iZXIpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgcmVzdWx0IDw8PSAxO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIGNoZWNrcyBpZiB0aGUgZ2l2ZW4gd2lkdGggYW5kIGhlaWdodCBtYWtlIGEgcG93ZXIgb2YgdHdvIHJlY3RhbmdsZVxuICAgICAqXG4gICAgICogQHBhcmFtIHdpZHRoIHtudW1iZXJ9XG4gICAgICogQHBhcmFtIGhlaWdodCB7bnVtYmVyfVxuICAgICAqIEByZXR1cm4ge2Jvb2xlYW59XG4gICAgICovXG4gICAgaXNQb3dlck9mVHdvOiBmdW5jdGlvbiAod2lkdGgsIGhlaWdodClcbiAgICB7XG4gICAgICAgIHJldHVybiAod2lkdGggPiAwICYmICh3aWR0aCAmICh3aWR0aCAtIDEpKSA9PT0gMCAmJiBoZWlnaHQgPiAwICYmIChoZWlnaHQgJiAoaGVpZ2h0IC0gMSkpID09PSAwKTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogZ2V0IHRoZSByZXNvbHV0aW9uIG9mIGFuIGFzc2V0IGJ5IGxvb2tpbmcgZm9yIHRoZSBwcmVmaXhcbiAgICAgKiB1c2VkIGJ5IHNwcml0ZXNoZWV0cyBhbmQgaW1hZ2UgdXJsc1xuICAgICAqXG4gICAgICogQHBhcmFtIHVybCB7c3RyaW5nfSB0aGUgaW1hZ2UgcGF0aFxuICAgICAqIEByZXR1cm4ge251bWJlcn1cbiAgICAgKi9cbiAgICBnZXRSZXNvbHV0aW9uT2ZVcmw6IGZ1bmN0aW9uICh1cmwpXG4gICAge1xuICAgICAgICB2YXIgcmVzb2x1dGlvbiA9IENPTlNULlJFVElOQV9QUkVGSVguZXhlYyh1cmwpO1xuXG4gICAgICAgIGlmIChyZXNvbHV0aW9uKVxuICAgICAgICB7XG4gICAgICAgICAgIHJldHVybiBwYXJzZUZsb2F0KHJlc29sdXRpb25bMV0pO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIDE7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIExvZ3Mgb3V0IHRoZSB2ZXJzaW9uIGFuZCByZW5kZXJlciBpbmZvcm1hdGlvbiBmb3IgdGhpcyBydW5uaW5nIGluc3RhbmNlIG9mIFBJWEkuXG4gICAgICogSWYgeW91IGRvbid0IHdhbnQgdG8gc2VlIHRoaXMgbWVzc2FnZSB5b3UgY2FuIHNldCBgUElYSS51dGlscy5fc2FpZEhlbGxvID0gdHJ1ZTtgXG4gICAgICogc28gdGhlIGxpYnJhcnkgdGhpbmtzIGl0IGFscmVhZHkgc2FpZCBpdC4gS2VlcCBpbiBtaW5kIHRoYXQgZG9pbmcgdGhhdCB3aWxsIGZvcmV2ZXJcbiAgICAgKiBtYWtlcyB5b3UgYSBqZXJrIGZhY2UuXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gdHlwZSAtIFRoZSBzdHJpbmcgcmVuZGVyZXIgdHlwZSB0byBsb2cuXG4gICAgICogQGNvbnN0YW50XG4gICAgICogQHN0YXRpY1xuICAgICAqL1xuICAgIHNheUhlbGxvOiBmdW5jdGlvbiAodHlwZSlcbiAgICB7XG4gICAgICAgIGlmICh1dGlscy5fc2FpZEhlbGxvKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAobmF2aWdhdG9yLnVzZXJBZ2VudC50b0xvd2VyQ2FzZSgpLmluZGV4T2YoJ2Nocm9tZScpID4gLTEpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHZhciBhcmdzID0gW1xuICAgICAgICAgICAgICAgICdcXG4gJWMgJWMgJWMgUGl4aS5qcyAnICsgQ09OU1QuVkVSU0lPTiArICcgLSDinLAgJyArIHR5cGUgKyAnIOKcsCAgJWMgJyArICcgJWMgJyArICcgaHR0cDovL3d3dy5waXhpanMuY29tLyAgJWMgJWMg4pmlJWPimaUlY+KZpSBcXG5cXG4nLFxuICAgICAgICAgICAgICAgICdiYWNrZ3JvdW5kOiAjZmY2NmE1OyBwYWRkaW5nOjVweCAwOycsXG4gICAgICAgICAgICAgICAgJ2JhY2tncm91bmQ6ICNmZjY2YTU7IHBhZGRpbmc6NXB4IDA7JyxcbiAgICAgICAgICAgICAgICAnY29sb3I6ICNmZjY2YTU7IGJhY2tncm91bmQ6ICMwMzAzMDc7IHBhZGRpbmc6NXB4IDA7JyxcbiAgICAgICAgICAgICAgICAnYmFja2dyb3VuZDogI2ZmNjZhNTsgcGFkZGluZzo1cHggMDsnLFxuICAgICAgICAgICAgICAgICdiYWNrZ3JvdW5kOiAjZmZjM2RjOyBwYWRkaW5nOjVweCAwOycsXG4gICAgICAgICAgICAgICAgJ2JhY2tncm91bmQ6ICNmZjY2YTU7IHBhZGRpbmc6NXB4IDA7JyxcbiAgICAgICAgICAgICAgICAnY29sb3I6ICNmZjI0MjQ7IGJhY2tncm91bmQ6ICNmZmY7IHBhZGRpbmc6NXB4IDA7JyxcbiAgICAgICAgICAgICAgICAnY29sb3I6ICNmZjI0MjQ7IGJhY2tncm91bmQ6ICNmZmY7IHBhZGRpbmc6NXB4IDA7JyxcbiAgICAgICAgICAgICAgICAnY29sb3I6ICNmZjI0MjQ7IGJhY2tncm91bmQ6ICNmZmY7IHBhZGRpbmc6NXB4IDA7J1xuICAgICAgICAgICAgXTtcblxuICAgICAgICAgICAgd2luZG93LmNvbnNvbGUubG9nLmFwcGx5KGNvbnNvbGUsIGFyZ3MpOyAvL2pzaGludCBpZ25vcmU6bGluZVxuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHdpbmRvdy5jb25zb2xlKVxuICAgICAgICB7XG4gICAgICAgICAgICB3aW5kb3cuY29uc29sZS5sb2coJ1BpeGkuanMgJyArIENPTlNULlZFUlNJT04gKyAnIC0gJyArIHR5cGUgKyAnIC0gaHR0cDovL3d3dy5waXhpanMuY29tLycpOyAvL2pzaGludCBpZ25vcmU6bGluZVxuICAgICAgICB9XG5cbiAgICAgICAgdXRpbHMuX3NhaWRIZWxsbyA9IHRydWU7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIEhlbHBlciBmb3IgY2hlY2tpbmcgZm9yIHdlYmdsIHN1cHBvcnRcbiAgICAgKlxuICAgICAqIEByZXR1cm4ge2Jvb2xlYW59XG4gICAgICovXG4gICAgaXNXZWJHTFN1cHBvcnRlZDogZnVuY3Rpb24gKClcbiAgICB7XG4gICAgICAgIHZhciBjb250ZXh0T3B0aW9ucyA9IHsgc3RlbmNpbDogdHJ1ZSB9O1xuICAgICAgICB0cnlcbiAgICAgICAge1xuICAgICAgICAgICAgaWYgKCF3aW5kb3cuV2ViR0xSZW5kZXJpbmdDb250ZXh0KVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdmFyIGNhbnZhcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NhbnZhcycpLFxuICAgICAgICAgICAgICAgIGdsID0gY2FudmFzLmdldENvbnRleHQoJ3dlYmdsJywgY29udGV4dE9wdGlvbnMpIHx8IGNhbnZhcy5nZXRDb250ZXh0KCdleHBlcmltZW50YWwtd2ViZ2wnLCBjb250ZXh0T3B0aW9ucyk7XG5cbiAgICAgICAgICAgIHJldHVybiAhIShnbCAmJiBnbC5nZXRDb250ZXh0QXR0cmlidXRlcygpLnN0ZW5jaWwpO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyBzaWduIG9mIG51bWJlclxuICAgICAqXG4gICAgICogQHBhcmFtIG4ge251bWJlcn1cbiAgICAgKiBAcmV0dXJucyB7bnVtYmVyfSAwIGlmIG4gaXMgMCwgLTEgaWYgbiBpcyBuZWdhdGl2ZSwgMSBpZiBuIGkgcG9zaXRpdmVcbiAgICAgKi9cbiAgICBzaWduOiBmdW5jdGlvbiAobilcbiAgICB7XG4gICAgICAgIHJldHVybiBuID8gKG4gPCAwID8gLTEgOiAxKSA6IDA7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIHJlbW92ZUl0ZW1zXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge2FycmF5fSBhcnIgVGhlIHRhcmdldCBhcnJheVxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBzdGFydElkeCBUaGUgaW5kZXggdG8gYmVnaW4gcmVtb3ZpbmcgZnJvbSAoaW5jbHVzaXZlKVxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSByZW1vdmVDb3VudCBIb3cgbWFueSBpdGVtcyB0byByZW1vdmVcbiAgICAgKi9cbiAgICByZW1vdmVJdGVtczogZnVuY3Rpb24gKGFyciwgc3RhcnRJZHgsIHJlbW92ZUNvdW50KVxuICAgIHtcbiAgICAgICAgdmFyIGxlbmd0aCA9IGFyci5sZW5ndGg7XG5cbiAgICAgICAgaWYgKHN0YXJ0SWR4ID49IGxlbmd0aCB8fCByZW1vdmVDb3VudCA9PT0gMClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgcmVtb3ZlQ291bnQgPSAoc3RhcnRJZHgrcmVtb3ZlQ291bnQgPiBsZW5ndGggPyBsZW5ndGgtc3RhcnRJZHggOiByZW1vdmVDb3VudCk7XG4gICAgICAgIGZvciAodmFyIGkgPSBzdGFydElkeCwgbGVuID0gbGVuZ3RoLXJlbW92ZUNvdW50OyBpIDwgbGVuOyArK2kpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGFycltpXSA9IGFycltpICsgcmVtb3ZlQ291bnRdO1xuICAgICAgICB9XG5cbiAgICAgICAgYXJyLmxlbmd0aCA9IGxlbjtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQHRvZG8gRGVzY3JpYmUgcHJvcGVydHkgdXNhZ2VcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIFRleHR1cmVDYWNoZToge30sXG5cbiAgICAvKipcbiAgICAgKiBAdG9kbyBEZXNjcmliZSBwcm9wZXJ0eSB1c2FnZVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgQmFzZVRleHR1cmVDYWNoZToge31cbn07XG4iLCIvKipcbiAqIE1peGlucyBmdW5jdGlvbmFsaXR5IHRvIG1ha2UgYW4gb2JqZWN0IGhhdmUgXCJwbHVnaW5zXCIuXG4gKlxuICogQG1peGluXG4gKiBAbWVtYmVyb2YgUElYSS51dGlsc1xuICogQHBhcmFtIG9iaiB7b2JqZWN0fSBUaGUgb2JqZWN0IHRvIG1peCBpbnRvLlxuICogQGV4YW1wbGVcbiAqICAgICAgZnVuY3Rpb24gTXlPYmplY3QoKSB7fVxuICpcbiAqICAgICAgcGx1Z2luVGFyZ2V0Lm1peGluKE15T2JqZWN0KTtcbiAqL1xuZnVuY3Rpb24gcGx1Z2luVGFyZ2V0KG9iailcbntcbiAgICBvYmouX19wbHVnaW5zID0ge307XG5cbiAgICAvKipcbiAgICAgKiBBZGRzIGEgcGx1Z2luIHRvIGFuIG9iamVjdFxuICAgICAqXG4gICAgICogQHBhcmFtIHBsdWdpbk5hbWUge3N0cmluZ30gVGhlIGV2ZW50cyB0aGF0IHNob3VsZCBiZSBsaXN0ZWQuXG4gICAgICogQHBhcmFtIGN0b3Ige0Z1bmN0aW9ufSBUaGUgY29uc3RydWN0b3IgZnVuY3Rpb24gZm9yIHRoZSBwbHVnaW4uXG4gICAgICovXG4gICAgb2JqLnJlZ2lzdGVyUGx1Z2luID0gZnVuY3Rpb24gKHBsdWdpbk5hbWUsIGN0b3IpXG4gICAge1xuICAgICAgICBvYmouX19wbHVnaW5zW3BsdWdpbk5hbWVdID0gY3RvcjtcbiAgICB9O1xuXG4gICAgLyoqXG4gICAgICogSW5zdGFudGlhdGVzIGFsbCB0aGUgcGx1Z2lucyBvZiB0aGlzIG9iamVjdFxuICAgICAqXG4gICAgICovXG4gICAgb2JqLnByb3RvdHlwZS5pbml0UGx1Z2lucyA9IGZ1bmN0aW9uICgpXG4gICAge1xuICAgICAgICB0aGlzLnBsdWdpbnMgPSB0aGlzLnBsdWdpbnMgfHwge307XG5cbiAgICAgICAgZm9yICh2YXIgbyBpbiBvYmouX19wbHVnaW5zKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnBsdWdpbnNbb10gPSBuZXcgKG9iai5fX3BsdWdpbnNbb10pKHRoaXMpO1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIC8qKlxuICAgICAqIFJlbW92ZXMgYWxsIHRoZSBwbHVnaW5zIG9mIHRoaXMgb2JqZWN0XG4gICAgICpcbiAgICAgKi9cbiAgICBvYmoucHJvdG90eXBlLmRlc3Ryb3lQbHVnaW5zID0gZnVuY3Rpb24gKClcbiAgICB7XG4gICAgICAgIGZvciAodmFyIG8gaW4gdGhpcy5wbHVnaW5zKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnBsdWdpbnNbb10uZGVzdHJveSgpO1xuICAgICAgICAgICAgdGhpcy5wbHVnaW5zW29dID0gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMucGx1Z2lucyA9IG51bGw7XG4gICAgfTtcbn1cblxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgICAvKipcbiAgICAgKiBNaXhlcyBpbiB0aGUgcHJvcGVydGllcyBvZiB0aGUgcGx1Z2luVGFyZ2V0IGludG8gYW5vdGhlciBvYmplY3RcbiAgICAgKlxuICAgICAqIEBwYXJhbSBvYmplY3Qge29iamVjdH0gVGhlIG9iaiB0byBtaXggaW50b1xuICAgICAqL1xuICAgIG1peGluOiBmdW5jdGlvbiBtaXhpbihvYmopXG4gICAge1xuICAgICAgICBwbHVnaW5UYXJnZXQob2JqKTtcbiAgICB9XG59O1xuIiwiLypnbG9iYWwgY29uc29sZSAqL1xudmFyIGNvcmUgPSByZXF1aXJlKCcuL2NvcmUnKSxcbiAgICBtZXNoID0gcmVxdWlyZSgnLi9tZXNoJyksXG4gICAgZXh0cmFzID0gcmVxdWlyZSgnLi9leHRyYXMnKSxcbiAgICBmaWx0ZXJzID0gcmVxdWlyZSgnLi9maWx0ZXJzJyk7XG5cbi8qKlxuICogQGNsYXNzXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgU3ByaXRlQmF0Y2hcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAc2VlIFBJWEkuUGFydGljbGVDb250YWluZXJcbiAqIEB0aHJvd3Mge1JlZmVyZW5jZUVycm9yfSBTcHJpdGVCYXRjaCBkb2VzIG5vdCBleGlzdCBhbnkgbW9yZSwgcGxlYXNlIHVzZSB0aGUgbmV3IFBhcnRpY2xlQ29udGFpbmVyIGluc3RlYWQuXG4gKiBAZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDMuMC4wXG4gKi9cbmNvcmUuU3ByaXRlQmF0Y2ggPSBmdW5jdGlvbigpXG57XG4gICAgdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKCdTcHJpdGVCYXRjaCBkb2VzIG5vdCBleGlzdCBhbnkgbW9yZSwgcGxlYXNlIHVzZSB0aGUgbmV3IFBhcnRpY2xlQ29udGFpbmVyIGluc3RlYWQuJyk7XG59O1xuXG4vKipcbiAqIEBjbGFzc1xuICogQHByaXZhdGVcbiAqIEBuYW1lIEFzc2V0TG9hZGVyXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHNlZSBQSVhJLmxvYWRlcnMuTG9hZGVyXG4gKiBAdGhyb3dzIHtSZWZlcmVuY2VFcnJvcn0gVGhlIGxvYWRlciBzeXN0ZW0gd2FzIG92ZXJoYXVsZWQgaW4gcGl4aSB2MywgcGxlYXNlIHNlZSB0aGUgbmV3IFBJWEkubG9hZGVycy5Mb2FkZXIgY2xhc3MuXG4gKiBAZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDMuMC4wXG4gKi9cbmNvcmUuQXNzZXRMb2FkZXIgPSBmdW5jdGlvbigpXG57XG4gICAgdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKCdUaGUgbG9hZGVyIHN5c3RlbSB3YXMgb3ZlcmhhdWxlZCBpbiBwaXhpIHYzLCBwbGVhc2Ugc2VlIHRoZSBuZXcgUElYSS5sb2FkZXJzLkxvYWRlciBjbGFzcy4nKTtcbn07XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGNvcmUsIHtcblxuICAgIC8qKlxuICAgICAqIEBjbGFzc1xuICAgICAqIEBwcml2YXRlXG4gICAgICogQG5hbWUgU3RhZ2VcbiAgICAgKiBAbWVtYmVyb2YgUElYSVxuICAgICAqIEBzZWUgUElYSS5Db250YWluZXJcbiAgICAgKiBAZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDMuMC4wXG4gICAgICovXG4gICAgU3RhZ2U6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbigpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignWW91IGRvIG5vdCBuZWVkIHRvIHVzZSBhIFBJWEkgU3RhZ2UgYW55IG1vcmUsIHlvdSBjYW4gc2ltcGx5IHJlbmRlciBhbnkgY29udGFpbmVyLicpO1xuICAgICAgICAgICAgcmV0dXJuIGNvcmUuQ29udGFpbmVyO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIEBjbGFzc1xuICAgICAqIEBwcml2YXRlXG4gICAgICogQG5hbWUgRGlzcGxheU9iamVjdENvbnRhaW5lclxuICAgICAqIEBtZW1iZXJvZiBQSVhJXG4gICAgICogQHNlZSBQSVhJLkNvbnRhaW5lclxuICAgICAqIEBkZXByZWNhdGVkIHNpbmNlIHZlcnNpb24gMy4wLjBcbiAgICAgKi9cbiAgICBEaXNwbGF5T2JqZWN0Q29udGFpbmVyOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24oKVxuICAgICAgICB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ0Rpc3BsYXlPYmplY3RDb250YWluZXIgaGFzIGJlZW4gc2hvcnRlbmVkIHRvIENvbnRhaW5lciwgcGxlYXNlIHVzZSBDb250YWluZXIgZnJvbSBub3cgb24uJyk7XG4gICAgICAgICAgICByZXR1cm4gY29yZS5Db250YWluZXI7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQGNsYXNzXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAbmFtZSBTdHJpcFxuICAgICAqIEBtZW1iZXJvZiBQSVhJXG4gICAgICogQHNlZSBQSVhJLm1lc2guTWVzaFxuICAgICAqIEBkZXByZWNhdGVkIHNpbmNlIHZlcnNpb24gMy4wLjBcbiAgICAgKi9cbiAgICBTdHJpcDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uKClcbiAgICAgICAge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKCdUaGUgU3RyaXAgY2xhc3MgaGFzIGJlZW4gcmVuYW1lZCB0byBNZXNoIGFuZCBtb3ZlZCB0byBtZXNoLk1lc2gsIHBsZWFzZSB1c2UgbWVzaC5NZXNoIGZyb20gbm93IG9uLicpO1xuICAgICAgICAgICAgcmV0dXJuIG1lc2guTWVzaDtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBAY2xhc3NcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBuYW1lIFJvcGVcbiAgICAgKiBAbWVtYmVyb2YgUElYSVxuICAgICAqIEBzZWUgUElYSS5tZXNoLlJvcGVcbiAgICAgKiBAZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDMuMC4wXG4gICAgICovXG4gICAgUm9wZToge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uKClcbiAgICAgICAge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKCdUaGUgUm9wZSBjbGFzcyBoYXMgYmVlbiBtb3ZlZCB0byBtZXNoLlJvcGUsIHBsZWFzZSB1c2UgbWVzaC5Sb3BlIGZyb20gbm93IG9uLicpO1xuICAgICAgICAgICAgcmV0dXJuIG1lc2guUm9wZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBAY2xhc3NcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBuYW1lIE1vdmllQ2xpcFxuICAgICAqIEBtZW1iZXJvZiBQSVhJXG4gICAgICogQHNlZSBQSVhJLmV4dHJhcy5Nb3ZpZUNsaXBcbiAgICAgKiBAZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDMuMC4wXG4gICAgICovXG4gICAgTW92aWVDbGlwOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24oKVxuICAgICAgICB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ1RoZSBNb3ZpZUNsaXAgY2xhc3MgaGFzIGJlZW4gbW92ZWQgdG8gZXh0cmFzLk1vdmllQ2xpcCwgcGxlYXNlIHVzZSBleHRyYXMuTW92aWVDbGlwIGZyb20gbm93IG9uLicpO1xuICAgICAgICAgICAgcmV0dXJuIGV4dHJhcy5Nb3ZpZUNsaXA7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQGNsYXNzXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAbmFtZSBUaWxpbmdTcHJpdGVcbiAgICAgKiBAbWVtYmVyb2YgUElYSVxuICAgICAqIEBzZWUgUElYSS5leHRyYXMuVGlsaW5nU3ByaXRlXG4gICAgICogQGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiAzLjAuMFxuICAgICAqL1xuICAgIFRpbGluZ1Nwcml0ZToge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uKClcbiAgICAgICAge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKCdUaGUgVGlsaW5nU3ByaXRlIGNsYXNzIGhhcyBiZWVuIG1vdmVkIHRvIGV4dHJhcy5UaWxpbmdTcHJpdGUsIHBsZWFzZSB1c2UgZXh0cmFzLlRpbGluZ1Nwcml0ZSBmcm9tIG5vdyBvbi4nKTtcbiAgICAgICAgICAgIHJldHVybiBleHRyYXMuVGlsaW5nU3ByaXRlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIEBjbGFzc1xuICAgICAqIEBwcml2YXRlXG4gICAgICogQG5hbWUgQml0bWFwVGV4dFxuICAgICAqIEBtZW1iZXJvZiBQSVhJXG4gICAgICogQHNlZSBQSVhJLmV4dHJhcy5CaXRtYXBUZXh0XG4gICAgICogQGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiAzLjAuMFxuICAgICAqL1xuICAgIEJpdG1hcFRleHQ6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbigpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignVGhlIEJpdG1hcFRleHQgY2xhc3MgaGFzIGJlZW4gbW92ZWQgdG8gZXh0cmFzLkJpdG1hcFRleHQsIHBsZWFzZSB1c2UgZXh0cmFzLkJpdG1hcFRleHQgZnJvbSBub3cgb24uJyk7XG4gICAgICAgICAgICByZXR1cm4gZXh0cmFzLkJpdG1hcFRleHQ7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQGNsYXNzXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAbmFtZSBibGVuZE1vZGVzXG4gICAgICogQG1lbWJlcm9mIFBJWElcbiAgICAgKiBAc2VlIFBJWEkuQkxFTkRfTU9ERVNcbiAgICAgKiBAZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDMuMC4wXG4gICAgICovXG4gICAgYmxlbmRNb2Rlczoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uKClcbiAgICAgICAge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKCdUaGUgYmxlbmRNb2RlcyBoYXMgYmVlbiBtb3ZlZCB0byBCTEVORF9NT0RFUywgcGxlYXNlIHVzZSBCTEVORF9NT0RFUyBmcm9tIG5vdyBvbi4nKTtcbiAgICAgICAgICAgIHJldHVybiBjb3JlLkJMRU5EX01PREVTO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIEBjbGFzc1xuICAgICAqIEBwcml2YXRlXG4gICAgICogQG5hbWUgc2NhbGVNb2Rlc1xuICAgICAqIEBtZW1iZXJvZiBQSVhJXG4gICAgICogQHNlZSBQSVhJLlNDQUxFX01PREVTXG4gICAgICogQGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiAzLjAuMFxuICAgICAqL1xuICAgIHNjYWxlTW9kZXM6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbigpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignVGhlIHNjYWxlTW9kZXMgaGFzIGJlZW4gbW92ZWQgdG8gU0NBTEVfTU9ERVMsIHBsZWFzZSB1c2UgU0NBTEVfTU9ERVMgZnJvbSBub3cgb24uJyk7XG4gICAgICAgICAgICByZXR1cm4gY29yZS5TQ0FMRV9NT0RFUztcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBAY2xhc3NcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBuYW1lIEJhc2VUZXh0dXJlQ2FjaGVcbiAgICAgKiBAbWVtYmVyb2YgUElYSVxuICAgICAqIEBzZWUgUElYSS51dGlscy5CYXNlVGV4dHVyZUNhY2hlXG4gICAgICogQGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiAzLjAuMFxuICAgICAqL1xuICAgIEJhc2VUZXh0dXJlQ2FjaGU6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ1RoZSBCYXNlVGV4dHVyZUNhY2hlIGNsYXNzIGhhcyBiZWVuIG1vdmVkIHRvIHV0aWxzLkJhc2VUZXh0dXJlQ2FjaGUsIHBsZWFzZSB1c2UgdXRpbHMuQmFzZVRleHR1cmVDYWNoZSBmcm9tIG5vdyBvbi4nKTtcbiAgICAgICAgICAgIHJldHVybiBjb3JlLnV0aWxzLkJhc2VUZXh0dXJlQ2FjaGU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQGNsYXNzXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAbmFtZSBUZXh0dXJlQ2FjaGVcbiAgICAgKiBAbWVtYmVyb2YgUElYSVxuICAgICAqIEBzZWUgUElYSS51dGlscy5UZXh0dXJlQ2FjaGVcbiAgICAgKiBAZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDMuMC4wXG4gICAgICovXG4gICAgVGV4dHVyZUNhY2hlOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKCdUaGUgVGV4dHVyZUNhY2hlIGNsYXNzIGhhcyBiZWVuIG1vdmVkIHRvIHV0aWxzLlRleHR1cmVDYWNoZSwgcGxlYXNlIHVzZSB1dGlscy5UZXh0dXJlQ2FjaGUgZnJvbSBub3cgb24uJyk7XG4gICAgICAgICAgICByZXR1cm4gY29yZS51dGlscy5UZXh0dXJlQ2FjaGU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQG5hbWVzcGFjZVxuICAgICAqIEBwcml2YXRlXG4gICAgICogQG5hbWUgbWF0aFxuICAgICAqIEBtZW1iZXJvZiBQSVhJXG4gICAgICogQHNlZSBQSVhJXG4gICAgICogQGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiAzLjAuNlxuICAgICAqL1xuICAgIG1hdGg6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ1RoZSBtYXRoIG5hbWVzcGFjZSBpcyBkZXByZWNhdGVkLCBwbGVhc2UgYWNjZXNzIG1lbWJlcnMgYWxyZWFkeSBhY2Nlc3NpYmxlIG9uIFBJWEkuJyk7XG4gICAgICAgICAgICByZXR1cm4gY29yZTtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuXG4vKipcbiAqIEBtZXRob2RcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBQSVhJLlNwcml0ZSNzZXRUZXh0dXJlXG4gKiBAc2VlIFBJWEkuU3ByaXRlI3RleHR1cmVcbiAqIEBkZXByZWNhdGVkIHNpbmNlIHZlcnNpb24gMy4wLjBcbiAqL1xuY29yZS5TcHJpdGUucHJvdG90eXBlLnNldFRleHR1cmUgPSBmdW5jdGlvbih0ZXh0dXJlKVxue1xuICAgIHRoaXMudGV4dHVyZSA9IHRleHR1cmU7XG4gICAgY29uc29sZS53YXJuKCdzZXRUZXh0dXJlIGlzIG5vdyBkZXByZWNhdGVkLCBwbGVhc2UgdXNlIHRoZSB0ZXh0dXJlIHByb3BlcnR5LCBlLmcgOiBzcHJpdGUudGV4dHVyZSA9IHRleHR1cmU7Jyk7XG59O1xuXG4vKipcbiAqIEBtZXRob2RcbiAqIEBuYW1lIFBJWEkuZXh0cmFzLkJpdG1hcFRleHQjc2V0VGV4dFxuICogQHNlZSBQSVhJLmV4dHJhcy5CaXRtYXBUZXh0I3RleHRcbiAqIEBkZXByZWNhdGVkIHNpbmNlIHZlcnNpb24gMy4wLjBcbiAqL1xuZXh0cmFzLkJpdG1hcFRleHQucHJvdG90eXBlLnNldFRleHQgPSBmdW5jdGlvbih0ZXh0KVxue1xuICAgIHRoaXMudGV4dCA9IHRleHQ7XG4gICAgY29uc29sZS53YXJuKCdzZXRUZXh0IGlzIG5vdyBkZXByZWNhdGVkLCBwbGVhc2UgdXNlIHRoZSB0ZXh0IHByb3BlcnR5LCBlLmcgOiBteUJpdG1hcFRleHQudGV4dCA9IFxcJ215IHRleHRcXCc7Jyk7XG59O1xuXG4vKipcbiAqIEBtZXRob2RcbiAqIEBuYW1lIFBJWEkuVGV4dCNzZXRUZXh0XG4gKiBAc2VlIFBJWEkuVGV4dCN0ZXh0XG4gKiBAZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDMuMC4wXG4gKi9cbmNvcmUuVGV4dC5wcm90b3R5cGUuc2V0VGV4dCA9IGZ1bmN0aW9uKHRleHQpXG57XG4gICAgdGhpcy50ZXh0ID0gdGV4dDtcbiAgICBjb25zb2xlLndhcm4oJ3NldFRleHQgaXMgbm93IGRlcHJlY2F0ZWQsIHBsZWFzZSB1c2UgdGhlIHRleHQgcHJvcGVydHksIGUuZyA6IG15VGV4dC50ZXh0ID0gXFwnbXkgdGV4dFxcJzsnKTtcbn07XG5cbi8qKlxuICogQG1ldGhvZFxuICogQG5hbWUgUElYSS5UZXh0I3NldFN0eWxlXG4gKiBAc2VlIFBJWEkuVGV4dCNzdHlsZVxuICogQGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiAzLjAuMFxuICovXG5jb3JlLlRleHQucHJvdG90eXBlLnNldFN0eWxlID0gZnVuY3Rpb24oc3R5bGUpXG57XG4gICAgdGhpcy5zdHlsZSA9IHN0eWxlO1xuICAgIGNvbnNvbGUud2Fybignc2V0U3R5bGUgaXMgbm93IGRlcHJlY2F0ZWQsIHBsZWFzZSB1c2UgdGhlIHN0eWxlIHByb3BlcnR5LCBlLmcgOiBteVRleHQuc3R5bGUgPSBzdHlsZTsnKTtcbn07XG5cbi8qKlxuICogQG1ldGhvZFxuICogQG5hbWUgUElYSS5UZXh0dXJlI3NldEZyYW1lXG4gKiBAc2VlIFBJWEkuVGV4dHVyZSNzZXRGcmFtZVxuICogQGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiAzLjAuMFxuICovXG5jb3JlLlRleHR1cmUucHJvdG90eXBlLnNldEZyYW1lID0gZnVuY3Rpb24oZnJhbWUpXG57XG4gICAgdGhpcy5mcmFtZSA9IGZyYW1lO1xuICAgIGNvbnNvbGUud2Fybignc2V0RnJhbWUgaXMgbm93IGRlcHJlY2F0ZWQsIHBsZWFzZSB1c2UgdGhlIGZyYW1lIHByb3BlcnR5LCBlLmcgOiBteVRleHR1cmUuZnJhbWUgPSBmcmFtZTsnKTtcbn07XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGZpbHRlcnMsIHtcblxuICAgIC8qKlxuICAgICAqIEBjbGFzc1xuICAgICAqIEBwcml2YXRlXG4gICAgICogQG5hbWUgUElYSS5maWx0ZXJzLkFic3RyYWN0RmlsdGVyXG4gICAgICogQHNlZSBQSVhJLkFic3RyYWN0RmlsdGVyXG4gICAgICogQGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiAzLjAuNlxuICAgICAqL1xuICAgIEFic3RyYWN0RmlsdGVyOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24oKVxuICAgICAgICB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ2ZpbHRlcnMuQWJzdHJhY3RGaWx0ZXIgaXMgYW4gdW5kb2N1bWVudGVkIGFsaWFzLCBwbGVhc2UgdXNlIEFic3RyYWN0RmlsdGVyIGZyb20gbm93IG9uLicpO1xuICAgICAgICAgICAgcmV0dXJuIGNvcmUuQWJzdHJhY3RGaWx0ZXI7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQGNsYXNzXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAbmFtZSBQSVhJLmZpbHRlcnMuRlhBQUZpbHRlclxuICAgICAqIEBzZWUgUElYSS5GWEFBRmlsdGVyXG4gICAgICogQGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiAzLjAuNlxuICAgICAqL1xuICAgIEZYQUFGaWx0ZXI6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbigpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignZmlsdGVycy5GWEFBRmlsdGVyIGlzIGFuIHVuZG9jdW1lbnRlZCBhbGlhcywgcGxlYXNlIHVzZSBGWEFBRmlsdGVyIGZyb20gbm93IG9uLicpO1xuICAgICAgICAgICAgcmV0dXJuIGNvcmUuRlhBQUZpbHRlcjtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBAY2xhc3NcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBuYW1lIFBJWEkuZmlsdGVycy5TcHJpdGVNYXNrRmlsdGVyXG4gICAgICogQHNlZSBQSVhJLlNwcml0ZU1hc2tGaWx0ZXJcbiAgICAgKiBAZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDMuMC42XG4gICAgICovXG4gICAgU3ByaXRlTWFza0ZpbHRlcjoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uKClcbiAgICAgICAge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKCdmaWx0ZXJzLlNwcml0ZU1hc2tGaWx0ZXIgaXMgYW4gdW5kb2N1bWVudGVkIGFsaWFzLCBwbGVhc2UgdXNlIFNwcml0ZU1hc2tGaWx0ZXIgZnJvbSBub3cgb24uJyk7XG4gICAgICAgICAgICByZXR1cm4gY29yZS5TcHJpdGVNYXNrRmlsdGVyO1xuICAgICAgICB9XG4gICAgfVxufSk7XG5cbi8qKlxuICogQG1ldGhvZFxuICogQG5hbWUgUElYSS51dGlscy51dWlkXG4gKiBAc2VlIFBJWEkudXRpbHMudWlkXG4gKiBAZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDMuMC42XG4gKi9cbmNvcmUudXRpbHMudXVpZCA9IGZ1bmN0aW9uICgpXG57XG4gICAgY29uc29sZS53YXJuKCd1dGlscy51dWlkKCkgaXMgZGVwcmVjYXRlZCwgcGxlYXNlIHVzZSB1dGlscy51aWQoKSBmcm9tIG5vdyBvbi4nKTtcbiAgICByZXR1cm4gY29yZS51dGlscy51aWQoKTtcbn07XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uL2NvcmUnKTtcblxuLyoqXG4gKiBBIEJpdG1hcFRleHQgb2JqZWN0IHdpbGwgY3JlYXRlIGEgbGluZSBvciBtdWx0aXBsZSBsaW5lcyBvZiB0ZXh0IHVzaW5nIGJpdG1hcCBmb250LiBUb1xuICogc3BsaXQgYSBsaW5lIHlvdSBjYW4gdXNlICdcXG4nLCAnXFxyJyBvciAnXFxyXFxuJyBpbiB5b3VyIHN0cmluZy4gWW91IGNhbiBnZW5lcmF0ZSB0aGUgZm50IGZpbGVzIHVzaW5nOlxuICpcbiAqIEEgQml0bWFwVGV4dCBjYW4gb25seSBiZSBjcmVhdGVkIHdoZW4gdGhlIGZvbnQgaXMgbG9hZGVkXG4gKlxuICogYGBganNcbiAqIC8vIGluIHRoaXMgY2FzZSB0aGUgZm9udCBpcyBpbiBhIGZpbGUgY2FsbGVkICdkZXN5cmVsLmZudCdcbiAqIHZhciBiaXRtYXBUZXh0ID0gbmV3IFBJWEkuZXh0cmFzLkJpdG1hcFRleHQoXCJ0ZXh0IHVzaW5nIGEgZmFuY3kgZm9udCFcIiwge2ZvbnQ6IFwiMzVweCBEZXN5cmVsXCIsIGFsaWduOiBcInJpZ2h0XCJ9KTtcbiAqIGBgYFxuICpcbiAqXG4gKiBodHRwOi8vd3d3LmFuZ2VsY29kZS5jb20vcHJvZHVjdHMvYm1mb250LyBmb3Igd2luZG93cyBvclxuICogaHR0cDovL3d3dy5ibWdseXBoLmNvbS8gZm9yIG1hYy5cbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQ29udGFpbmVyXG4gKiBAbWVtYmVyb2YgUElYSS5leHRyYXNcbiAqIEBwYXJhbSB0ZXh0IHtzdHJpbmd9IFRoZSBjb3B5IHRoYXQgeW91IHdvdWxkIGxpa2UgdGhlIHRleHQgdG8gZGlzcGxheVxuICogQHBhcmFtIHN0eWxlIHtvYmplY3R9IFRoZSBzdHlsZSBwYXJhbWV0ZXJzXG4gKiBAcGFyYW0gc3R5bGUuZm9udCB7c3RyaW5nfG9iamVjdH0gVGhlIGZvbnQgZGVzY3JpcHRvciBmb3IgdGhlIG9iamVjdCwgY2FuIGJlIHBhc3NlZCBhcyBhIHN0cmluZyBvZiBmb3JtXG4gKiAgICAgIFwiMjRweCBGb250TmFtZVwiIG9yIFwiRm9udE5hbWVcIiBvciBhcyBhbiBvYmplY3Qgd2l0aCBleHBsaWNpdCBuYW1lL3NpemUgcHJvcGVydGllcy5cbiAqIEBwYXJhbSBbc3R5bGUuZm9udC5uYW1lXSB7c3RyaW5nfSBUaGUgYml0bWFwIGZvbnQgaWRcbiAqIEBwYXJhbSBbc3R5bGUuZm9udC5zaXplXSB7bnVtYmVyfSBUaGUgc2l6ZSBvZiB0aGUgZm9udCBpbiBwaXhlbHMsIGUuZy4gMjRcbiAqIEBwYXJhbSBbc3R5bGUuYWxpZ249J2xlZnQnXSB7c3RyaW5nfSBBbGlnbm1lbnQgZm9yIG11bHRpbGluZSB0ZXh0ICgnbGVmdCcsICdjZW50ZXInIG9yICdyaWdodCcpLCBkb2VzIG5vdCBhZmZlY3RcbiAqICAgICAgc2luZ2xlIGxpbmUgdGV4dFxuICogQHBhcmFtIFtzdHlsZS50aW50PTB4RkZGRkZGXSB7bnVtYmVyfSBUaGUgdGludCBjb2xvclxuICovXG5mdW5jdGlvbiBCaXRtYXBUZXh0KHRleHQsIHN0eWxlKVxue1xuICAgIGNvcmUuQ29udGFpbmVyLmNhbGwodGhpcyk7XG5cbiAgICBzdHlsZSA9IHN0eWxlIHx8IHt9O1xuXG4gICAgLyoqXG4gICAgICogVGhlIHdpZHRoIG9mIHRoZSBvdmVyYWxsIHRleHQsIGRpZmZlcmVudCBmcm9tIGZvbnRTaXplLFxuICAgICAqIHdoaWNoIGlzIGRlZmluZWQgaW4gdGhlIHN0eWxlIG9iamVjdFxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEByZWFkT25seVxuICAgICAqL1xuICAgIHRoaXMudGV4dFdpZHRoID0gMDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBoZWlnaHQgb2YgdGhlIG92ZXJhbGwgdGV4dCwgZGlmZmVyZW50IGZyb20gZm9udFNpemUsXG4gICAgICogd2hpY2ggaXMgZGVmaW5lZCBpbiB0aGUgc3R5bGUgb2JqZWN0XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQHJlYWRPbmx5XG4gICAgICovXG4gICAgdGhpcy50ZXh0SGVpZ2h0ID0gMDtcblxuICAgIC8qKlxuICAgICAqIFByaXZhdGUgdHJhY2tlciBmb3IgdGhlIGxldHRlciBzcHJpdGUgcG9vbC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuU3ByaXRlW119XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9nbHlwaHMgPSBbXTtcblxuICAgIC8qKlxuICAgICAqIFByaXZhdGUgdHJhY2tlciBmb3IgdGhlIGN1cnJlbnQgc3R5bGUuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtvYmplY3R9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9mb250ID0ge1xuICAgICAgICB0aW50OiBzdHlsZS50aW50ICE9PSB1bmRlZmluZWQgPyBzdHlsZS50aW50IDogMHhGRkZGRkYsXG4gICAgICAgIGFsaWduOiBzdHlsZS5hbGlnbiB8fCAnbGVmdCcsXG4gICAgICAgIG5hbWU6IG51bGwsXG4gICAgICAgIHNpemU6IDBcbiAgICB9O1xuXG4gICAgLyoqXG4gICAgICogUHJpdmF0ZSB0cmFja2VyIGZvciB0aGUgY3VycmVudCBmb250LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7b2JqZWN0fVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5mb250ID0gc3R5bGUuZm9udDsgLy8gcnVuIGZvbnQgc2V0dGVyXG5cbiAgICAvKipcbiAgICAgKiBQcml2YXRlIHRyYWNrZXIgZm9yIHRoZSBjdXJyZW50IHRleHQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtzdHJpbmd9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl90ZXh0ID0gdGV4dDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBtYXggd2lkdGggb2YgdGhpcyBiaXRtYXAgdGV4dCBpbiBwaXhlbHMuIElmIHRoZSB0ZXh0IHByb3ZpZGVkIGlzIGxvbmdlciB0aGFuIHRoZSB2YWx1ZSBwcm92aWRlZCwgbGluZSBicmVha3Mgd2lsbCBiZSBhdXRvbWF0aWNhbGx5IGluc2VydGVkIGluIHRoZSBsYXN0IHdoaXRlc3BhY2UuXG4gICAgICogRGlzYWJsZSBieSBzZXR0aW5nIHZhbHVlIHRvIDBcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLm1heFdpZHRoID0gMDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBtYXggbGluZSBoZWlnaHQuIFRoaXMgaXMgdXNlZnVsIHdoZW4gdHJ5aW5nIHRvIHVzZSB0aGUgdG90YWwgaGVpZ2h0IG9mIHRoZSBUZXh0LCBpZTogd2hlbiB0cnlpbmcgdG8gdmVydGljYWxseSBhbGlnbi5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLm1heExpbmVIZWlnaHQgPSAwO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGRpcnR5IHN0YXRlIG9mIHRoaXMgb2JqZWN0LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKi9cbiAgICB0aGlzLmRpcnR5ID0gZmFsc2U7XG5cbiAgICB0aGlzLnVwZGF0ZVRleHQoKTtcbn1cblxuLy8gY29uc3RydWN0b3JcbkJpdG1hcFRleHQucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShjb3JlLkNvbnRhaW5lci5wcm90b3R5cGUpO1xuQml0bWFwVGV4dC5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBCaXRtYXBUZXh0O1xubW9kdWxlLmV4cG9ydHMgPSBCaXRtYXBUZXh0O1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhCaXRtYXBUZXh0LnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFRoZSB0aW50IG9mIHRoZSBCaXRtYXBUZXh0IG9iamVjdFxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmV4dHJhcy5CaXRtYXBUZXh0I1xuICAgICAqL1xuICAgIHRpbnQ6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fZm9udC50aW50O1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5fZm9udC50aW50ID0gKHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicgJiYgdmFsdWUgPj0gMCkgPyB2YWx1ZSA6IDB4RkZGRkZGO1xuXG4gICAgICAgICAgICB0aGlzLmRpcnR5ID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBUaGUgYWxpZ25tZW50IG9mIHRoZSBCaXRtYXBUZXh0IG9iamVjdFxuICAgICAqXG4gICAgICogQG1lbWJlciB7c3RyaW5nfVxuICAgICAqIEBkZWZhdWx0ICdsZWZ0J1xuICAgICAqIEBtZW1iZXJvZiBQSVhJLmV4dHJhcy5CaXRtYXBUZXh0I1xuICAgICAqL1xuICAgIGFsaWduOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2ZvbnQuYWxpZ247XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLl9mb250LmFsaWduID0gdmFsdWUgfHwgJ2xlZnQnO1xuXG4gICAgICAgICAgICB0aGlzLmRpcnR5ID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBUaGUgZm9udCBkZXNjcmlwdG9yIG9mIHRoZSBCaXRtYXBUZXh0IG9iamVjdFxuICAgICAqXG4gICAgICogQG1lbWJlciB7Rm9udH1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5leHRyYXMuQml0bWFwVGV4dCNcbiAgICAgKi9cbiAgICBmb250OiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2ZvbnQ7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICBpZiAoIXZhbHVlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgICAgIHZhbHVlID0gdmFsdWUuc3BsaXQoJyAnKTtcblxuICAgICAgICAgICAgICAgIHRoaXMuX2ZvbnQubmFtZSA9IHZhbHVlLmxlbmd0aCA9PT0gMSA/IHZhbHVlWzBdIDogdmFsdWUuc2xpY2UoMSkuam9pbignICcpO1xuICAgICAgICAgICAgICAgIHRoaXMuX2ZvbnQuc2l6ZSA9IHZhbHVlLmxlbmd0aCA+PSAyID8gcGFyc2VJbnQodmFsdWVbMF0sIDEwKSA6IEJpdG1hcFRleHQuZm9udHNbdGhpcy5fZm9udC5uYW1lXS5zaXplO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fZm9udC5uYW1lID0gdmFsdWUubmFtZTtcbiAgICAgICAgICAgICAgICB0aGlzLl9mb250LnNpemUgPSB0eXBlb2YgdmFsdWUuc2l6ZSA9PT0gJ251bWJlcicgPyB2YWx1ZS5zaXplIDogcGFyc2VJbnQodmFsdWUuc2l6ZSwgMTApO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLmRpcnR5ID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBUaGUgdGV4dCBvZiB0aGUgQml0bWFwVGV4dCBvYmplY3RcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge3N0cmluZ31cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5leHRyYXMuQml0bWFwVGV4dCNcbiAgICAgKi9cbiAgICB0ZXh0OiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3RleHQ7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB2YWx1ZSA9IHZhbHVlLnRvU3RyaW5nKCkgfHwgJyAnO1xuICAgICAgICAgICAgaWYgKHRoaXMuX3RleHQgPT09IHZhbHVlKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuX3RleHQgPSB2YWx1ZTtcbiAgICAgICAgICAgIHRoaXMuZGlydHkgPSB0cnVlO1xuICAgICAgICB9XG4gICAgfVxufSk7XG5cbi8qKlxuICogUmVuZGVycyB0ZXh0IGFuZCB1cGRhdGVzIGl0IHdoZW4gbmVlZGVkXG4gKlxuICogQHByaXZhdGVcbiAqL1xuQml0bWFwVGV4dC5wcm90b3R5cGUudXBkYXRlVGV4dCA9IGZ1bmN0aW9uICgpXG57XG4gICAgdmFyIGRhdGEgPSBCaXRtYXBUZXh0LmZvbnRzW3RoaXMuX2ZvbnQubmFtZV07XG4gICAgdmFyIHBvcyA9IG5ldyBjb3JlLlBvaW50KCk7XG4gICAgdmFyIHByZXZDaGFyQ29kZSA9IG51bGw7XG4gICAgdmFyIGNoYXJzID0gW107XG4gICAgdmFyIGxhc3RMaW5lV2lkdGggPSAwO1xuICAgIHZhciBtYXhMaW5lV2lkdGggPSAwO1xuICAgIHZhciBsaW5lV2lkdGhzID0gW107XG4gICAgdmFyIGxpbmUgPSAwO1xuICAgIHZhciBzY2FsZSA9IHRoaXMuX2ZvbnQuc2l6ZSAvIGRhdGEuc2l6ZTtcbiAgICB2YXIgbGFzdFNwYWNlID0gLTE7XG4gICAgdmFyIG1heExpbmVIZWlnaHQgPSAwO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLnRleHQubGVuZ3RoOyBpKyspXG4gICAge1xuICAgICAgICB2YXIgY2hhckNvZGUgPSB0aGlzLnRleHQuY2hhckNvZGVBdChpKTtcbiAgICAgICAgbGFzdFNwYWNlID0gLyhcXHMpLy50ZXN0KHRoaXMudGV4dC5jaGFyQXQoaSkpID8gaSA6IGxhc3RTcGFjZTtcblxuICAgICAgICBpZiAoLyg/OlxcclxcbnxcXHJ8XFxuKS8udGVzdCh0aGlzLnRleHQuY2hhckF0KGkpKSlcbiAgICAgICAge1xuICAgICAgICAgICAgbGluZVdpZHRocy5wdXNoKGxhc3RMaW5lV2lkdGgpO1xuICAgICAgICAgICAgbWF4TGluZVdpZHRoID0gTWF0aC5tYXgobWF4TGluZVdpZHRoLCBsYXN0TGluZVdpZHRoKTtcbiAgICAgICAgICAgIGxpbmUrKztcblxuICAgICAgICAgICAgcG9zLnggPSAwO1xuICAgICAgICAgICAgcG9zLnkgKz0gZGF0YS5saW5lSGVpZ2h0O1xuICAgICAgICAgICAgcHJldkNoYXJDb2RlID0gbnVsbDtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGxhc3RTcGFjZSAhPT0gLTEgJiYgdGhpcy5tYXhXaWR0aCA+IDAgJiYgcG9zLnggKiBzY2FsZSA+IHRoaXMubWF4V2lkdGgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNvcmUudXRpbHMucmVtb3ZlSXRlbXMoY2hhcnMsIGxhc3RTcGFjZSwgaSAtIGxhc3RTcGFjZSk7XG4gICAgICAgICAgICBpID0gbGFzdFNwYWNlO1xuICAgICAgICAgICAgbGFzdFNwYWNlID0gLTE7XG5cbiAgICAgICAgICAgIGxpbmVXaWR0aHMucHVzaChsYXN0TGluZVdpZHRoKTtcbiAgICAgICAgICAgIG1heExpbmVXaWR0aCA9IE1hdGgubWF4KG1heExpbmVXaWR0aCwgbGFzdExpbmVXaWR0aCk7XG4gICAgICAgICAgICBsaW5lKys7XG5cbiAgICAgICAgICAgIHBvcy54ID0gMDtcbiAgICAgICAgICAgIHBvcy55ICs9IGRhdGEubGluZUhlaWdodDtcbiAgICAgICAgICAgIHByZXZDaGFyQ29kZSA9IG51bGw7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBjaGFyRGF0YSA9IGRhdGEuY2hhcnNbY2hhckNvZGVdO1xuXG4gICAgICAgIGlmICghY2hhckRhdGEpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHByZXZDaGFyQ29kZSAmJiBjaGFyRGF0YS5rZXJuaW5nW3ByZXZDaGFyQ29kZV0pXG4gICAgICAgIHtcbiAgICAgICAgICAgIHBvcy54ICs9IGNoYXJEYXRhLmtlcm5pbmdbcHJldkNoYXJDb2RlXTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNoYXJzLnB1c2goe3RleHR1cmU6Y2hhckRhdGEudGV4dHVyZSwgbGluZTogbGluZSwgY2hhckNvZGU6IGNoYXJDb2RlLCBwb3NpdGlvbjogbmV3IGNvcmUuUG9pbnQocG9zLnggKyBjaGFyRGF0YS54T2Zmc2V0LCBwb3MueSArIGNoYXJEYXRhLnlPZmZzZXQpfSk7XG4gICAgICAgIGxhc3RMaW5lV2lkdGggPSBwb3MueCArIChjaGFyRGF0YS50ZXh0dXJlLndpZHRoICsgY2hhckRhdGEueE9mZnNldCk7XG4gICAgICAgIHBvcy54ICs9IGNoYXJEYXRhLnhBZHZhbmNlO1xuICAgICAgICBtYXhMaW5lSGVpZ2h0ID0gTWF0aC5tYXgobWF4TGluZUhlaWdodCwgKGNoYXJEYXRhLnlPZmZzZXQgKyBjaGFyRGF0YS50ZXh0dXJlLmhlaWdodCkpO1xuICAgICAgICBwcmV2Q2hhckNvZGUgPSBjaGFyQ29kZTtcbiAgICB9XG5cbiAgICBsaW5lV2lkdGhzLnB1c2gobGFzdExpbmVXaWR0aCk7XG4gICAgbWF4TGluZVdpZHRoID0gTWF0aC5tYXgobWF4TGluZVdpZHRoLCBsYXN0TGluZVdpZHRoKTtcblxuICAgIHZhciBsaW5lQWxpZ25PZmZzZXRzID0gW107XG5cbiAgICBmb3IgKGkgPSAwOyBpIDw9IGxpbmU7IGkrKylcbiAgICB7XG4gICAgICAgIHZhciBhbGlnbk9mZnNldCA9IDA7XG5cbiAgICAgICAgaWYgKHRoaXMuX2ZvbnQuYWxpZ24gPT09ICdyaWdodCcpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGFsaWduT2Zmc2V0ID0gbWF4TGluZVdpZHRoIC0gbGluZVdpZHRoc1tpXTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh0aGlzLl9mb250LmFsaWduID09PSAnY2VudGVyJylcbiAgICAgICAge1xuICAgICAgICAgICAgYWxpZ25PZmZzZXQgPSAobWF4TGluZVdpZHRoIC0gbGluZVdpZHRoc1tpXSkgLyAyO1xuICAgICAgICB9XG5cbiAgICAgICAgbGluZUFsaWduT2Zmc2V0cy5wdXNoKGFsaWduT2Zmc2V0KTtcbiAgICB9XG5cbiAgICB2YXIgbGVuQ2hhcnMgPSBjaGFycy5sZW5ndGg7XG4gICAgdmFyIHRpbnQgPSB0aGlzLnRpbnQ7XG5cbiAgICBmb3IgKGkgPSAwOyBpIDwgbGVuQ2hhcnM7IGkrKylcbiAgICB7XG4gICAgICAgIHZhciBjID0gdGhpcy5fZ2x5cGhzW2ldOyAvLyBnZXQgdGhlIG5leHQgZ2x5cGggc3ByaXRlXG5cbiAgICAgICAgaWYgKGMpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGMudGV4dHVyZSA9IGNoYXJzW2ldLnRleHR1cmU7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgICBjID0gbmV3IGNvcmUuU3ByaXRlKGNoYXJzW2ldLnRleHR1cmUpO1xuICAgICAgICAgICAgdGhpcy5fZ2x5cGhzLnB1c2goYyk7XG4gICAgICAgIH1cblxuICAgICAgICBjLnBvc2l0aW9uLnggPSAoY2hhcnNbaV0ucG9zaXRpb24ueCArIGxpbmVBbGlnbk9mZnNldHNbY2hhcnNbaV0ubGluZV0pICogc2NhbGU7XG4gICAgICAgIGMucG9zaXRpb24ueSA9IGNoYXJzW2ldLnBvc2l0aW9uLnkgKiBzY2FsZTtcbiAgICAgICAgYy5zY2FsZS54ID0gYy5zY2FsZS55ID0gc2NhbGU7XG4gICAgICAgIGMudGludCA9IHRpbnQ7XG5cbiAgICAgICAgaWYgKCFjLnBhcmVudClcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5hZGRDaGlsZChjKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIHJlbW92ZSB1bm5lY2Vzc2FyeSBjaGlsZHJlbi5cbiAgICBmb3IgKGkgPSBsZW5DaGFyczsgaSA8IHRoaXMuX2dseXBocy5sZW5ndGg7ICsraSlcbiAgICB7XG4gICAgICAgIHRoaXMucmVtb3ZlQ2hpbGQodGhpcy5fZ2x5cGhzW2ldKTtcbiAgICB9XG5cbiAgICB0aGlzLnRleHRXaWR0aCA9IG1heExpbmVXaWR0aCAqIHNjYWxlO1xuICAgIHRoaXMudGV4dEhlaWdodCA9IChwb3MueSArIGRhdGEubGluZUhlaWdodCkgKiBzY2FsZTtcbiAgICB0aGlzLm1heExpbmVIZWlnaHQgPSBtYXhMaW5lSGVpZ2h0ICogc2NhbGU7XG59O1xuXG4vKipcbiAqIFVwZGF0ZXMgdGhlIHRyYW5zZm9ybSBvZiB0aGlzIG9iamVjdFxuICpcbiAqIEBwcml2YXRlXG4gKi9cbkJpdG1hcFRleHQucHJvdG90eXBlLnVwZGF0ZVRyYW5zZm9ybSA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy52YWxpZGF0ZSgpO1xuICAgIHRoaXMuY29udGFpbmVyVXBkYXRlVHJhbnNmb3JtKCk7XG59O1xuXG4vKipcbiAqIFZhbGlkYXRlcyB0ZXh0IGJlZm9yZSBjYWxsaW5nIHBhcmVudCdzIGdldExvY2FsQm91bmRzXG4gKlxuICogQHJldHVybiB7UElYSS5SZWN0YW5nbGV9IFRoZSByZWN0YW5ndWxhciBib3VuZGluZyBhcmVhXG4gKi9cblxuQml0bWFwVGV4dC5wcm90b3R5cGUuZ2V0TG9jYWxCb3VuZHMgPSBmdW5jdGlvbigpXG57XG4gICAgdGhpcy52YWxpZGF0ZSgpO1xuICAgIHJldHVybiBjb3JlLkNvbnRhaW5lci5wcm90b3R5cGUuZ2V0TG9jYWxCb3VuZHMuY2FsbCh0aGlzKTtcbn07XG5cbi8qKlxuICogVXBkYXRlcyB0ZXh0IHdoZW4gbmVlZGVkXG4gKlxuICogQHByaXZhdGVcbiAqL1xuQml0bWFwVGV4dC5wcm90b3R5cGUudmFsaWRhdGUgPSBmdW5jdGlvbigpXG57XG4gICAgaWYgKHRoaXMuZGlydHkpXG4gICAge1xuICAgICAgICB0aGlzLnVwZGF0ZVRleHQoKTtcbiAgICAgICAgdGhpcy5kaXJ0eSA9IGZhbHNlO1xuICAgIH1cbn07XG5cbkJpdG1hcFRleHQuZm9udHMgPSB7fTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vY29yZScpO1xuXG4vKipcbiAqIEEgTW92aWVDbGlwIGlzIGEgc2ltcGxlIHdheSB0byBkaXNwbGF5IGFuIGFuaW1hdGlvbiBkZXBpY3RlZCBieSBhIGxpc3Qgb2YgdGV4dHVyZXMuXG4gKlxuICogYGBganNcbiAqIHZhciBhbGllbkltYWdlcyA9IFtcImltYWdlX3NlcXVlbmNlXzAxLnBuZ1wiLFwiaW1hZ2Vfc2VxdWVuY2VfMDIucG5nXCIsXCJpbWFnZV9zZXF1ZW5jZV8wMy5wbmdcIixcImltYWdlX3NlcXVlbmNlXzA0LnBuZ1wiXTtcbiAqIHZhciB0ZXh0dXJlQXJyYXkgPSBbXTtcbiAqXG4gKiBmb3IgKHZhciBpPTA7IGkgPCA0OyBpKyspXG4gKiB7XG4gKiAgICAgIHZhciB0ZXh0dXJlID0gUElYSS5UZXh0dXJlLmZyb21JbWFnZShhbGllbkltYWdlc1tpXSk7XG4gKiAgICAgIHRleHR1cmVBcnJheS5wdXNoKHRleHR1cmUpO1xuICogfTtcbiAqXG4gKiB2YXIgbWMgPSBuZXcgUElYSS5Nb3ZpZUNsaXAodGV4dHVyZUFycmF5KTtcbiAqIGBgYFxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5TcHJpdGVcbiAqIEBtZW1iZXJvZiBQSVhJLmV4dHJhc1xuICogQHBhcmFtIHRleHR1cmVzIHtQSVhJLlRleHR1cmVbXXxPYmplY3RbXX0gYW4gYXJyYXkgb2Yge0BsaW5rIFBJWEkuVGV4dHVyZX0gb3IgZnJhbWUgb2JqZWN0cyB0aGF0IG1ha2UgdXAgdGhlIGFuaW1hdGlvblxuICogQHBhcmFtIHRleHR1cmVzW10udGV4dHVyZSB7UElYSS5UZXh0dXJlfSB0aGUge0BsaW5rIFBJWEkuVGV4dHVyZX0gb2YgdGhlIGZyYW1lXG4gKiBAcGFyYW0gdGV4dHVyZXNbXS50aW1lIHtudW1iZXJ9IHRoZSBkdXJhdGlvbiBvZiB0aGUgZnJhbWUgaW4gbXNcbiAqL1xuZnVuY3Rpb24gTW92aWVDbGlwKHRleHR1cmVzKVxue1xuICAgIGNvcmUuU3ByaXRlLmNhbGwodGhpcywgdGV4dHVyZXNbMF0gaW5zdGFuY2VvZiBjb3JlLlRleHR1cmUgPyB0ZXh0dXJlc1swXSA6IHRleHR1cmVzWzBdLnRleHR1cmUpO1xuXG4gICAgLyoqXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl90ZXh0dXJlcyA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX2R1cmF0aW9ucyA9IG51bGw7XG5cbiAgICB0aGlzLnRleHR1cmVzID0gdGV4dHVyZXM7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgc3BlZWQgdGhhdCB0aGUgTW92aWVDbGlwIHdpbGwgcGxheSBhdC4gSGlnaGVyIGlzIGZhc3RlciwgbG93ZXIgaXMgc2xvd2VyXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMVxuICAgICAqL1xuICAgIHRoaXMuYW5pbWF0aW9uU3BlZWQgPSAxO1xuXG4gICAgLyoqXG4gICAgICogV2hldGhlciBvciBub3QgdGhlIG1vdmllIGNsaXAgcmVwZWF0cyBhZnRlciBwbGF5aW5nLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKiBAZGVmYXVsdCB0cnVlXG4gICAgICovXG4gICAgdGhpcy5sb29wID0gdHJ1ZTtcblxuICAgIC8qKlxuICAgICAqIEZ1bmN0aW9uIHRvIGNhbGwgd2hlbiBhIE1vdmllQ2xpcCBmaW5pc2hlcyBwbGF5aW5nXG4gICAgICpcbiAgICAgKiBAbWV0aG9kXG4gICAgICogQG1lbWJlcm9mIFBJWEkuZXh0cmFzLk1vdmllQ2xpcCNcbiAgICAgKi9cbiAgICB0aGlzLm9uQ29tcGxldGUgPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogRWxhcHNlZCB0aW1lIHNpbmNlIGFuaW1hdGlvbiBoYXMgYmVlbiBzdGFydGVkLCB1c2VkIGludGVybmFsbHkgdG8gZGlzcGxheSBjdXJyZW50IHRleHR1cmVcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX2N1cnJlbnRUaW1lID0gMDtcblxuICAgIC8qKlxuICAgICAqIEluZGljYXRlcyBpZiB0aGUgTW92aWVDbGlwIGlzIGN1cnJlbnRseSBwbGF5aW5nXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqIEByZWFkb25seVxuICAgICAqL1xuICAgIHRoaXMucGxheWluZyA9IGZhbHNlO1xufVxuXG4vLyBjb25zdHJ1Y3RvclxuTW92aWVDbGlwLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoY29yZS5TcHJpdGUucHJvdG90eXBlKTtcbk1vdmllQ2xpcC5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBNb3ZpZUNsaXA7XG5tb2R1bGUuZXhwb3J0cyA9IE1vdmllQ2xpcDtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoTW92aWVDbGlwLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIHRvdGFsRnJhbWVzIGlzIHRoZSB0b3RhbCBudW1iZXIgb2YgZnJhbWVzIGluIHRoZSBNb3ZpZUNsaXAuIFRoaXMgaXMgdGhlIHNhbWUgYXMgbnVtYmVyIG9mIHRleHR1cmVzXG4gICAgICogYXNzaWduZWQgdG8gdGhlIE1vdmllQ2xpcC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5leHRyYXMuTW92aWVDbGlwI1xuICAgICAqIEBkZWZhdWx0IDBcbiAgICAgKiBAcmVhZG9ubHlcbiAgICAgKi9cbiAgICB0b3RhbEZyYW1lczoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3RleHR1cmVzLmxlbmd0aDtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBUaGUgYXJyYXkgb2YgdGV4dHVyZXMgdXNlZCBmb3IgdGhpcyBNb3ZpZUNsaXBcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuVGV4dHVyZVtdfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmV4dHJhcy5Nb3ZpZUNsaXAjXG4gICAgICpcbiAgICAgKi9cbiAgICB0ZXh0dXJlczoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl90ZXh0dXJlcztcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGlmKHZhbHVlWzBdIGluc3RhbmNlb2YgY29yZS5UZXh0dXJlKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHRoaXMuX3RleHR1cmVzID0gdmFsdWU7XG4gICAgICAgICAgICAgICAgdGhpcy5fZHVyYXRpb25zID0gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB0aGlzLl90ZXh0dXJlcyA9IFtdO1xuICAgICAgICAgICAgICAgIHRoaXMuX2R1cmF0aW9ucyA9IFtdO1xuICAgICAgICAgICAgICAgIGZvcih2YXIgaSA9IDA7IGkgPCB2YWx1ZS5sZW5ndGg7IGkrKylcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3RleHR1cmVzLnB1c2godmFsdWVbaV0udGV4dHVyZSk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2R1cmF0aW9ucy5wdXNoKHZhbHVlW2ldLnRpbWUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAqIFRoZSBNb3ZpZUNsaXBzIGN1cnJlbnQgZnJhbWUgaW5kZXhcbiAgICAqXG4gICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgKiBAbWVtYmVyb2YgUElYSS5leHRyYXMuTW92aWVDbGlwI1xuICAgICogQHJlYWRvbmx5XG4gICAgKi9cbiAgICBjdXJyZW50RnJhbWU6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICB2YXIgY3VycmVudEZyYW1lID0gTWF0aC5mbG9vcih0aGlzLl9jdXJyZW50VGltZSkgJSB0aGlzLl90ZXh0dXJlcy5sZW5ndGg7XG4gICAgICAgICAgICBpZiAoY3VycmVudEZyYW1lIDwgMClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjdXJyZW50RnJhbWUgKz0gdGhpcy5fdGV4dHVyZXMubGVuZ3RoO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGN1cnJlbnRGcmFtZTtcbiAgICAgICAgfVxuICAgIH1cblxufSk7XG5cbi8qKlxuICogU3RvcHMgdGhlIE1vdmllQ2xpcFxuICpcbiAqL1xuTW92aWVDbGlwLnByb3RvdHlwZS5zdG9wID0gZnVuY3Rpb24gKClcbntcbiAgICBpZighdGhpcy5wbGF5aW5nKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMucGxheWluZyA9IGZhbHNlO1xuICAgIGNvcmUudGlja2VyLnNoYXJlZC5yZW1vdmUodGhpcy51cGRhdGUsIHRoaXMpO1xufTtcblxuLyoqXG4gKiBQbGF5cyB0aGUgTW92aWVDbGlwXG4gKlxuICovXG5Nb3ZpZUNsaXAucHJvdG90eXBlLnBsYXkgPSBmdW5jdGlvbiAoKVxue1xuICAgIGlmKHRoaXMucGxheWluZylcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLnBsYXlpbmcgPSB0cnVlO1xuICAgIGNvcmUudGlja2VyLnNoYXJlZC5hZGQodGhpcy51cGRhdGUsIHRoaXMpO1xufTtcblxuLyoqXG4gKiBTdG9wcyB0aGUgTW92aWVDbGlwIGFuZCBnb2VzIHRvIGEgc3BlY2lmaWMgZnJhbWVcbiAqXG4gKiBAcGFyYW0gZnJhbWVOdW1iZXIge251bWJlcn0gZnJhbWUgaW5kZXggdG8gc3RvcCBhdFxuICovXG5Nb3ZpZUNsaXAucHJvdG90eXBlLmdvdG9BbmRTdG9wID0gZnVuY3Rpb24gKGZyYW1lTnVtYmVyKVxue1xuICAgIHRoaXMuc3RvcCgpO1xuXG4gICAgdGhpcy5fY3VycmVudFRpbWUgPSBmcmFtZU51bWJlcjtcblxuICAgIHRoaXMuX3RleHR1cmUgPSB0aGlzLl90ZXh0dXJlc1t0aGlzLmN1cnJlbnRGcmFtZV07XG59O1xuXG4vKipcbiAqIEdvZXMgdG8gYSBzcGVjaWZpYyBmcmFtZSBhbmQgYmVnaW5zIHBsYXlpbmcgdGhlIE1vdmllQ2xpcFxuICpcbiAqIEBwYXJhbSBmcmFtZU51bWJlciB7bnVtYmVyfSBmcmFtZSBpbmRleCB0byBzdGFydCBhdFxuICovXG5Nb3ZpZUNsaXAucHJvdG90eXBlLmdvdG9BbmRQbGF5ID0gZnVuY3Rpb24gKGZyYW1lTnVtYmVyKVxue1xuICAgIHRoaXMuX2N1cnJlbnRUaW1lID0gZnJhbWVOdW1iZXI7XG5cbiAgICB0aGlzLnBsYXkoKTtcbn07XG5cbi8qXG4gKiBVcGRhdGVzIHRoZSBvYmplY3QgdHJhbnNmb3JtIGZvciByZW5kZXJpbmdcbiAqIEBwcml2YXRlXG4gKi9cbk1vdmllQ2xpcC5wcm90b3R5cGUudXBkYXRlID0gZnVuY3Rpb24gKGRlbHRhVGltZSlcbntcbiAgICB2YXIgZWxhcHNlZCA9IHRoaXMuYW5pbWF0aW9uU3BlZWQgKiBkZWx0YVRpbWU7XG5cbiAgICBpZiAodGhpcy5fZHVyYXRpb25zICE9PSBudWxsKVxuICAgIHtcbiAgICAgICAgdmFyIGxhZyA9IHRoaXMuX2N1cnJlbnRUaW1lICUgMSAqIHRoaXMuX2R1cmF0aW9uc1t0aGlzLmN1cnJlbnRGcmFtZV07XG5cbiAgICAgICAgbGFnICs9IGVsYXBzZWQgLyA2MCAqIDEwMDA7XG5cbiAgICAgICAgd2hpbGUgKGxhZyA8IDApXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuX2N1cnJlbnRUaW1lLS07XG4gICAgICAgICAgICBsYWcgKz0gdGhpcy5fZHVyYXRpb25zW3RoaXMuY3VycmVudEZyYW1lXTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBzaWduID0gTWF0aC5zaWduKHRoaXMuYW5pbWF0aW9uU3BlZWQgKiBkZWx0YVRpbWUpO1xuICAgICAgICB0aGlzLl9jdXJyZW50VGltZSA9IE1hdGguZmxvb3IodGhpcy5fY3VycmVudFRpbWUpO1xuXG4gICAgICAgIHdoaWxlIChsYWcgPj0gdGhpcy5fZHVyYXRpb25zW3RoaXMuY3VycmVudEZyYW1lXSlcbiAgICAgICAge1xuICAgICAgICAgICAgbGFnIC09IHRoaXMuX2R1cmF0aW9uc1t0aGlzLmN1cnJlbnRGcmFtZV0gKiBzaWduO1xuICAgICAgICAgICAgdGhpcy5fY3VycmVudFRpbWUgKz0gc2lnbjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX2N1cnJlbnRUaW1lICs9IGxhZyAvIHRoaXMuX2R1cmF0aW9uc1t0aGlzLmN1cnJlbnRGcmFtZV07XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHRoaXMuX2N1cnJlbnRUaW1lICs9IGVsYXBzZWQ7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX2N1cnJlbnRUaW1lIDwgMCAmJiAhdGhpcy5sb29wKVxuICAgIHtcbiAgICAgICAgdGhpcy5nb3RvQW5kU3RvcCgwKTtcblxuICAgICAgICBpZiAodGhpcy5vbkNvbXBsZXRlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLm9uQ29tcGxldGUoKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBlbHNlIGlmICh0aGlzLl9jdXJyZW50VGltZSA+PSB0aGlzLl90ZXh0dXJlcy5sZW5ndGggJiYgIXRoaXMubG9vcClcbiAgICB7XG4gICAgICAgIHRoaXMuZ290b0FuZFN0b3AodGhpcy5fdGV4dHVyZXMubGVuZ3RoIC0gMSk7XG5cbiAgICAgICAgaWYgKHRoaXMub25Db21wbGV0ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5vbkNvbXBsZXRlKCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgdGhpcy5fdGV4dHVyZSA9IHRoaXMuX3RleHR1cmVzW3RoaXMuY3VycmVudEZyYW1lXTtcbiAgICB9XG5cbn07XG5cbi8qXG4gKiBTdG9wcyB0aGUgTW92aWVDbGlwIGFuZCBkZXN0cm95cyBpdFxuICpcbiAqL1xuTW92aWVDbGlwLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKCApXG57XG4gICAgdGhpcy5zdG9wKCk7XG4gICAgY29yZS5TcHJpdGUucHJvdG90eXBlLmRlc3Ryb3kuY2FsbCh0aGlzKTtcbn07XG5cbi8qKlxuICogQSBzaG9ydCBoYW5kIHdheSBvZiBjcmVhdGluZyBhIG1vdmllY2xpcCBmcm9tIGFuIGFycmF5IG9mIGZyYW1lIGlkc1xuICpcbiAqIEBzdGF0aWNcbiAqIEBwYXJhbSBmcmFtZXMge3N0cmluZ1tdfSB0aGUgYXJyYXkgb2YgZnJhbWVzIGlkcyB0aGUgbW92aWVjbGlwIHdpbGwgdXNlIGFzIGl0cyB0ZXh0dXJlIGZyYW1lc1xuICovXG5Nb3ZpZUNsaXAuZnJvbUZyYW1lcyA9IGZ1bmN0aW9uIChmcmFtZXMpXG57XG4gICAgdmFyIHRleHR1cmVzID0gW107XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGZyYW1lcy5sZW5ndGg7ICsraSlcbiAgICB7XG4gICAgICAgIHRleHR1cmVzLnB1c2gobmV3IGNvcmUuVGV4dHVyZS5mcm9tRnJhbWUoZnJhbWVzW2ldKSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBNb3ZpZUNsaXAodGV4dHVyZXMpO1xufTtcblxuLyoqXG4gKiBBIHNob3J0IGhhbmQgd2F5IG9mIGNyZWF0aW5nIGEgbW92aWVjbGlwIGZyb20gYW4gYXJyYXkgb2YgaW1hZ2UgaWRzXG4gKlxuICogQHN0YXRpY1xuICogQHBhcmFtIGltYWdlcyB7c3RyaW5nW119IHRoZSBhcnJheSBvZiBpbWFnZSB1cmxzIHRoZSBtb3ZpZWNsaXAgd2lsbCB1c2UgYXMgaXRzIHRleHR1cmUgZnJhbWVzXG4gKi9cbk1vdmllQ2xpcC5mcm9tSW1hZ2VzID0gZnVuY3Rpb24gKGltYWdlcylcbntcbiAgICB2YXIgdGV4dHVyZXMgPSBbXTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgaW1hZ2VzLmxlbmd0aDsgKytpKVxuICAgIHtcbiAgICAgICAgdGV4dHVyZXMucHVzaChuZXcgY29yZS5UZXh0dXJlLmZyb21JbWFnZShpbWFnZXNbaV0pKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IE1vdmllQ2xpcCh0ZXh0dXJlcyk7XG59OyIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vY29yZScpLFxuICAgIC8vIGEgc3ByaXRlIHVzZSBkZm9yIHJlbmRlcmluZyB0ZXh0dXJlcy4uXG4gICAgdGVtcFBvaW50ID0gbmV3IGNvcmUuUG9pbnQoKSxcbiAgICBDYW52YXNUaW50ZXIgPSByZXF1aXJlKCcuLi9jb3JlL3JlbmRlcmVycy9jYW52YXMvdXRpbHMvQ2FudmFzVGludGVyJyk7XG5cbi8qKlxuICogQSB0aWxpbmcgc3ByaXRlIGlzIGEgZmFzdCB3YXkgb2YgcmVuZGVyaW5nIGEgdGlsaW5nIGltYWdlXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLlNwcml0ZVxuICogQG1lbWJlcm9mIFBJWEkuZXh0cmFzXG4gKiBAcGFyYW0gdGV4dHVyZSB7VGV4dHVyZX0gdGhlIHRleHR1cmUgb2YgdGhlIHRpbGluZyBzcHJpdGVcbiAqIEBwYXJhbSB3aWR0aCB7bnVtYmVyfSAgdGhlIHdpZHRoIG9mIHRoZSB0aWxpbmcgc3ByaXRlXG4gKiBAcGFyYW0gaGVpZ2h0IHtudW1iZXJ9IHRoZSBoZWlnaHQgb2YgdGhlIHRpbGluZyBzcHJpdGVcbiAqL1xuZnVuY3Rpb24gVGlsaW5nU3ByaXRlKHRleHR1cmUsIHdpZHRoLCBoZWlnaHQpXG57XG4gICAgY29yZS5TcHJpdGUuY2FsbCh0aGlzLCB0ZXh0dXJlKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBzY2FsaW5nIG9mIHRoZSBpbWFnZSB0aGF0IGlzIGJlaW5nIHRpbGVkXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlBvaW50fVxuICAgICAqL1xuICAgIHRoaXMudGlsZVNjYWxlID0gbmV3IGNvcmUuUG9pbnQoMSwxKTtcblxuXG4gICAgLyoqXG4gICAgICogVGhlIG9mZnNldCBwb3NpdGlvbiBvZiB0aGUgaW1hZ2UgdGhhdCBpcyBiZWluZyB0aWxlZFxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5Qb2ludH1cbiAgICAgKi9cbiAgICB0aGlzLnRpbGVQb3NpdGlvbiA9IG5ldyBjb3JlLlBvaW50KDAsMCk7XG5cbiAgICAvLy8vLyBwcml2YXRlXG5cbiAgICAvKipcbiAgICAgKiBUaGUgd2l0aCBvZiB0aGUgdGlsaW5nIHNwcml0ZVxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fd2lkdGggPSB3aWR0aCB8fCAxMDA7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgaGVpZ2h0IG9mIHRoZSB0aWxpbmcgc3ByaXRlXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9oZWlnaHQgPSBoZWlnaHQgfHwgMTAwO1xuXG4gICAgLyoqXG4gICAgICogQW4gaW50ZXJuYWwgV2ViR0wgVVYgY2FjaGUuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlRleHR1cmVVdnN9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl91dnMgPSBuZXcgY29yZS5UZXh0dXJlVXZzKCk7XG5cbiAgICB0aGlzLl9jYW52YXNQYXR0ZXJuID0gbnVsbDtcblxuICAgIC8vVE9ETyBtb3ZlLi5cbiAgICB0aGlzLnNoYWRlciA9IG5ldyBjb3JlLkFic3RyYWN0RmlsdGVyKFxuXG4gICAgICBbXG4gICAgICAgICdwcmVjaXNpb24gbG93cCBmbG9hdDsnLFxuICAgICAgICAnYXR0cmlidXRlIHZlYzIgYVZlcnRleFBvc2l0aW9uOycsXG4gICAgICAgICdhdHRyaWJ1dGUgdmVjMiBhVGV4dHVyZUNvb3JkOycsXG4gICAgICAgICdhdHRyaWJ1dGUgdmVjNCBhQ29sb3I7JyxcblxuICAgICAgICAndW5pZm9ybSBtYXQzIHByb2plY3Rpb25NYXRyaXg7JyxcblxuICAgICAgICAndW5pZm9ybSB2ZWM0IHVGcmFtZTsnLFxuICAgICAgICAndW5pZm9ybSB2ZWM0IHVUcmFuc2Zvcm07JyxcblxuICAgICAgICAndmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7JyxcbiAgICAgICAgJ3ZhcnlpbmcgdmVjNCB2Q29sb3I7JyxcblxuICAgICAgICAndm9pZCBtYWluKHZvaWQpeycsXG4gICAgICAgICcgICBnbF9Qb3NpdGlvbiA9IHZlYzQoKHByb2plY3Rpb25NYXRyaXggKiB2ZWMzKGFWZXJ0ZXhQb3NpdGlvbiwgMS4wKSkueHksIDAuMCwgMS4wKTsnLFxuXG4gICAgICAgICcgICB2ZWMyIGNvb3JkID0gYVRleHR1cmVDb29yZDsnLFxuICAgICAgICAnICAgY29vcmQgLT0gdVRyYW5zZm9ybS54eTsnLFxuICAgICAgICAnICAgY29vcmQgLz0gdVRyYW5zZm9ybS56dzsnLFxuICAgICAgICAnICAgdlRleHR1cmVDb29yZCA9IGNvb3JkOycsXG5cbiAgICAgICAgJyAgIHZDb2xvciA9IHZlYzQoYUNvbG9yLnJnYiAqIGFDb2xvci5hLCBhQ29sb3IuYSk7JyxcbiAgICAgICAgJ30nXG4gICAgICBdLmpvaW4oJ1xcbicpLFxuICAgICAgW1xuICAgICAgICAncHJlY2lzaW9uIGxvd3AgZmxvYXQ7JyxcblxuICAgICAgICAndmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7JyxcbiAgICAgICAgJ3ZhcnlpbmcgdmVjNCB2Q29sb3I7JyxcblxuICAgICAgICAndW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXI7JyxcbiAgICAgICAgJ3VuaWZvcm0gdmVjNCB1RnJhbWU7JyxcbiAgICAgICAgJ3VuaWZvcm0gdmVjMiB1UGl4ZWxTaXplOycsXG5cbiAgICAgICAgJ3ZvaWQgbWFpbih2b2lkKXsnLFxuXG4gICAgICAgICcgICB2ZWMyIGNvb3JkID0gbW9kKHZUZXh0dXJlQ29vcmQsIHVGcmFtZS56dyk7JyxcbiAgICAgICAgJyAgIGNvb3JkID0gY2xhbXAoY29vcmQsIHVQaXhlbFNpemUsIHVGcmFtZS56dyAtIHVQaXhlbFNpemUpOycsXG4gICAgICAgICcgICBjb29yZCArPSB1RnJhbWUueHk7JyxcblxuICAgICAgICAnICAgZ2xfRnJhZ0NvbG9yID0gIHRleHR1cmUyRCh1U2FtcGxlciwgY29vcmQpICogdkNvbG9yIDsnLFxuICAgICAgICAnfSdcbiAgICAgIF0uam9pbignXFxuJyksXG5cbiAgICAgICAgICAgIC8vIHNldCB0aGUgdW5pZm9ybXNcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB1RnJhbWU6IHsgdHlwZTogJzRmdicsIHZhbHVlOiBbMCwwLDEsMV0gfSxcbiAgICAgICAgICAgICAgICB1VHJhbnNmb3JtOiB7IHR5cGU6ICc0ZnYnLCB2YWx1ZTogWzAsMCwxLDFdIH0sXG4gICAgICAgICAgICAgICAgdVBpeGVsU2l6ZSA6IHsgdHlwZSA6ICcyZnYnLCB2YWx1ZTogWzEsIDFdfVxuICAgICAgICAgICAgfVxuICAgICAgKTtcbn1cblxuVGlsaW5nU3ByaXRlLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoY29yZS5TcHJpdGUucHJvdG90eXBlKTtcblRpbGluZ1Nwcml0ZS5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBUaWxpbmdTcHJpdGU7XG5tb2R1bGUuZXhwb3J0cyA9IFRpbGluZ1Nwcml0ZTtcblxuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhUaWxpbmdTcHJpdGUucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogVGhlIHdpZHRoIG9mIHRoZSBzcHJpdGUsIHNldHRpbmcgdGhpcyB3aWxsIGFjdHVhbGx5IG1vZGlmeSB0aGUgc2NhbGUgdG8gYWNoaWV2ZSB0aGUgdmFsdWUgc2V0XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZXh0cmFzLlRpbGluZ1Nwcml0ZSNcbiAgICAgKi9cbiAgICB3aWR0aDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl93aWR0aDtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuX3dpZHRoID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVGhlIGhlaWdodCBvZiB0aGUgVGlsaW5nU3ByaXRlLCBzZXR0aW5nIHRoaXMgd2lsbCBhY3R1YWxseSBtb2RpZnkgdGhlIHNjYWxlIHRvIGFjaGlldmUgdGhlIHZhbHVlIHNldFxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmV4dHJhcy5UaWxpbmdTcHJpdGUjXG4gICAgICovXG4gICAgaGVpZ2h0OiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2hlaWdodDtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuX2hlaWdodCA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfVxufSk7XG5cblRpbGluZ1Nwcml0ZS5wcm90b3R5cGUuX29uVGV4dHVyZVVwZGF0ZSA9IGZ1bmN0aW9uICgpXG57XG4gICAgcmV0dXJuO1xufTtcblxuXG4vKipcbiAqIFJlbmRlcnMgdGhlIG9iamVjdCB1c2luZyB0aGUgV2ViR0wgcmVuZGVyZXJcbiAqXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcn1cbiAqIEBwcml2YXRlXG4gKi9cblRpbGluZ1Nwcml0ZS5wcm90b3R5cGUuX3JlbmRlcldlYkdMID0gZnVuY3Rpb24gKHJlbmRlcmVyKVxue1xuICAgIC8vIHR3ZWFrIG91ciB0ZXh0dXJlIHRlbXBvcmFyaWx5Li5cbiAgICB2YXIgdGV4dHVyZSA9IHRoaXMuX3RleHR1cmU7XG5cbiAgICBpZighdGV4dHVyZSB8fCAhdGV4dHVyZS5fdXZzKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHZhciB0ZW1wVXZzID0gdGV4dHVyZS5fdXZzLFxuICAgICAgICB0ZW1wV2lkdGggPSB0ZXh0dXJlLl9mcmFtZS53aWR0aCxcbiAgICAgICAgdGVtcEhlaWdodCA9IHRleHR1cmUuX2ZyYW1lLmhlaWdodCxcbiAgICAgICAgdHcgPSB0ZXh0dXJlLmJhc2VUZXh0dXJlLndpZHRoLFxuICAgICAgICB0aCA9IHRleHR1cmUuYmFzZVRleHR1cmUuaGVpZ2h0O1xuXG4gICAgdGV4dHVyZS5fdXZzID0gdGhpcy5fdXZzO1xuICAgIHRleHR1cmUuX2ZyYW1lLndpZHRoID0gdGhpcy53aWR0aDtcbiAgICB0ZXh0dXJlLl9mcmFtZS5oZWlnaHQgPSB0aGlzLmhlaWdodDtcblxuICAgIHRoaXMuc2hhZGVyLnVuaWZvcm1zLnVQaXhlbFNpemUudmFsdWVbMF0gPSAxLjAvdHc7XG4gICAgdGhpcy5zaGFkZXIudW5pZm9ybXMudVBpeGVsU2l6ZS52YWx1ZVsxXSA9IDEuMC90aDtcblxuICAgIHRoaXMuc2hhZGVyLnVuaWZvcm1zLnVGcmFtZS52YWx1ZVswXSA9IHRlbXBVdnMueDA7XG4gICAgdGhpcy5zaGFkZXIudW5pZm9ybXMudUZyYW1lLnZhbHVlWzFdID0gdGVtcFV2cy55MDtcbiAgICB0aGlzLnNoYWRlci51bmlmb3Jtcy51RnJhbWUudmFsdWVbMl0gPSB0ZW1wVXZzLngxIC0gdGVtcFV2cy54MDtcbiAgICB0aGlzLnNoYWRlci51bmlmb3Jtcy51RnJhbWUudmFsdWVbM10gPSB0ZW1wVXZzLnkyIC0gdGVtcFV2cy55MDtcblxuICAgIHRoaXMuc2hhZGVyLnVuaWZvcm1zLnVUcmFuc2Zvcm0udmFsdWVbMF0gPSAodGhpcy50aWxlUG9zaXRpb24ueCAlICh0ZW1wV2lkdGggKiB0aGlzLnRpbGVTY2FsZS54KSkgLyB0aGlzLl93aWR0aDtcbiAgICB0aGlzLnNoYWRlci51bmlmb3Jtcy51VHJhbnNmb3JtLnZhbHVlWzFdID0gKHRoaXMudGlsZVBvc2l0aW9uLnkgJSAodGVtcEhlaWdodCAqIHRoaXMudGlsZVNjYWxlLnkpKSAvIHRoaXMuX2hlaWdodDtcbiAgICB0aGlzLnNoYWRlci51bmlmb3Jtcy51VHJhbnNmb3JtLnZhbHVlWzJdID0gKCB0dyAvIHRoaXMuX3dpZHRoICkgKiB0aGlzLnRpbGVTY2FsZS54O1xuICAgIHRoaXMuc2hhZGVyLnVuaWZvcm1zLnVUcmFuc2Zvcm0udmFsdWVbM10gPSAoIHRoIC8gdGhpcy5faGVpZ2h0ICkgKiB0aGlzLnRpbGVTY2FsZS55O1xuXG4gICAgcmVuZGVyZXIuc2V0T2JqZWN0UmVuZGVyZXIocmVuZGVyZXIucGx1Z2lucy5zcHJpdGUpO1xuICAgIHJlbmRlcmVyLnBsdWdpbnMuc3ByaXRlLnJlbmRlcih0aGlzKTtcblxuICAgIHRleHR1cmUuX3V2cyA9IHRlbXBVdnM7XG4gICAgdGV4dHVyZS5fZnJhbWUud2lkdGggPSB0ZW1wV2lkdGg7XG4gICAgdGV4dHVyZS5fZnJhbWUuaGVpZ2h0ID0gdGVtcEhlaWdodDtcbn07XG5cbi8qKlxuICogUmVuZGVycyB0aGUgb2JqZWN0IHVzaW5nIHRoZSBDYW52YXMgcmVuZGVyZXJcbiAqXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuQ2FudmFzUmVuZGVyZXJ9IGEgcmVmZXJlbmNlIHRvIHRoZSBjYW52YXMgcmVuZGVyZXJcbiAqIEBwcml2YXRlXG4gKi9cblRpbGluZ1Nwcml0ZS5wcm90b3R5cGUuX3JlbmRlckNhbnZhcyA9IGZ1bmN0aW9uIChyZW5kZXJlcilcbntcbiAgICB2YXIgdGV4dHVyZSA9IHRoaXMuX3RleHR1cmU7XG5cbiAgICBpZiAoIXRleHR1cmUuYmFzZVRleHR1cmUuaGFzTG9hZGVkKVxuICAgIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB2YXIgY29udGV4dCA9IHJlbmRlcmVyLmNvbnRleHQsXG4gICAgICAgIHRyYW5zZm9ybSA9IHRoaXMud29ybGRUcmFuc2Zvcm0sXG4gICAgICAgIHJlc29sdXRpb24gPSByZW5kZXJlci5yZXNvbHV0aW9uLFxuICAgICAgICBiYXNlVGV4dHVyZSA9IHRleHR1cmUuYmFzZVRleHR1cmUsXG4gICAgICAgIG1vZFggPSAodGhpcy50aWxlUG9zaXRpb24ueCAvIHRoaXMudGlsZVNjYWxlLngpICUgdGV4dHVyZS5fZnJhbWUud2lkdGgsXG4gICAgICAgIG1vZFkgPSAodGhpcy50aWxlUG9zaXRpb24ueSAvIHRoaXMudGlsZVNjYWxlLnkpICUgdGV4dHVyZS5fZnJhbWUuaGVpZ2h0O1xuXG4gICAgLy8gY3JlYXRlIGEgbmljZSBzaGlueSBwYXR0ZXJuIVxuICAgIC8vIFRPRE8gdGhpcyBuZWVkcyB0byBiZSByZWZyZXNoZWQgaWYgdGV4dHVyZSBjaGFuZ2VzLi5cbiAgICBpZighdGhpcy5fY2FudmFzUGF0dGVybilcbiAgICB7XG4gICAgICAgIC8vIGN1dCBhbiBvYmplY3QgZnJvbSBhIHNwcml0ZXNoZWV0Li5cbiAgICAgICAgdmFyIHRlbXBDYW52YXMgPSBuZXcgY29yZS5DYW52YXNCdWZmZXIodGV4dHVyZS5fZnJhbWUud2lkdGgsIHRleHR1cmUuX2ZyYW1lLmhlaWdodCk7XG5cbiAgICAgICAgLy8gVGludCB0aGUgdGlsaW5nIHNwcml0ZVxuICAgICAgICBpZiAodGhpcy50aW50ICE9PSAweEZGRkZGRilcbiAgICAgICAge1xuICAgICAgICAgICAgaWYgKHRoaXMuY2FjaGVkVGludCAhPT0gdGhpcy50aW50KVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHRoaXMuY2FjaGVkVGludCA9IHRoaXMudGludDtcblxuICAgICAgICAgICAgICAgIHRoaXMudGludGVkVGV4dHVyZSA9IENhbnZhc1RpbnRlci5nZXRUaW50ZWRUZXh0dXJlKHRoaXMsIHRoaXMudGludCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0ZW1wQ2FudmFzLmNvbnRleHQuZHJhd0ltYWdlKHRoaXMudGludGVkVGV4dHVyZSwgMCwgMCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgICB0ZW1wQ2FudmFzLmNvbnRleHQuZHJhd0ltYWdlKGJhc2VUZXh0dXJlLnNvdXJjZSwgLXRleHR1cmUuX2ZyYW1lLngsIC10ZXh0dXJlLl9mcmFtZS55KTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9jYW52YXNQYXR0ZXJuID0gdGVtcENhbnZhcy5jb250ZXh0LmNyZWF0ZVBhdHRlcm4oIHRlbXBDYW52YXMuY2FudmFzLCAncmVwZWF0JyApO1xuICAgIH1cblxuICAgIC8vIHNldCBjb250ZXh0IHN0YXRlLi5cbiAgICBjb250ZXh0Lmdsb2JhbEFscGhhID0gdGhpcy53b3JsZEFscGhhO1xuICAgIGNvbnRleHQuc2V0VHJhbnNmb3JtKHRyYW5zZm9ybS5hICogcmVzb2x1dGlvbixcbiAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtLmIgKiByZXNvbHV0aW9uLFxuICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2Zvcm0uYyAqIHJlc29sdXRpb24sXG4gICAgICAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybS5kICogcmVzb2x1dGlvbixcbiAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtLnR4ICogcmVzb2x1dGlvbixcbiAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtLnR5ICogcmVzb2x1dGlvbik7XG5cbiAgICAvLyBUT0RPIC0gdGhpcyBzaG91bGQgYmUgcm9sbGVkIGludG8gdGhlIHNldFRyYW5zZm9ybSBhYm92ZS4uXG4gICAgY29udGV4dC5zY2FsZSh0aGlzLnRpbGVTY2FsZS54LHRoaXMudGlsZVNjYWxlLnkpO1xuXG4gICAgY29udGV4dC50cmFuc2xhdGUobW9kWCArICh0aGlzLmFuY2hvci54ICogLXRoaXMuX3dpZHRoICksXG4gICAgICAgICAgICAgICAgICAgICAgbW9kWSArICh0aGlzLmFuY2hvci55ICogLXRoaXMuX2hlaWdodCkpO1xuXG4gICAgLy8gY2hlY2sgYmxlbmQgbW9kZVxuICAgIHZhciBjb21wb3NpdGVPcGVyYXRpb24gPSByZW5kZXJlci5ibGVuZE1vZGVzW3RoaXMuYmxlbmRNb2RlXTtcbiAgICBpZiAoY29tcG9zaXRlT3BlcmF0aW9uICE9PSByZW5kZXJlci5jb250ZXh0Lmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbilcbiAgICB7XG4gICAgICAgIGNvbnRleHQuZ2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uID0gY29tcG9zaXRlT3BlcmF0aW9uO1xuICAgIH1cblxuICAgIC8vIGZpbGwgdGhlIHBhdHRlcm4hXG4gICAgY29udGV4dC5maWxsU3R5bGUgPSB0aGlzLl9jYW52YXNQYXR0ZXJuO1xuICAgIGNvbnRleHQuZmlsbFJlY3QoLW1vZFgsXG4gICAgICAgICAgICAgICAgICAgICAtbW9kWSxcbiAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3dpZHRoIC8gdGhpcy50aWxlU2NhbGUueCxcbiAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2hlaWdodCAvIHRoaXMudGlsZVNjYWxlLnkpO1xuXG5cbiAgICAvL1RPRE8gLSBwcmV0dHkgc3VyZSB0aGlzIGNhbiBiZSBkZWxldGVkLi4uXG4gICAgLy9jb250ZXh0LnRyYW5zbGF0ZSgtdGhpcy50aWxlUG9zaXRpb24ueCArICh0aGlzLmFuY2hvci54ICogdGhpcy5fd2lkdGgpLCAtdGhpcy50aWxlUG9zaXRpb24ueSArICh0aGlzLmFuY2hvci55ICogdGhpcy5faGVpZ2h0KSk7XG4gICAgLy9jb250ZXh0LnNjYWxlKDEgLyB0aGlzLnRpbGVTY2FsZS54LCAxIC8gdGhpcy50aWxlU2NhbGUueSk7XG59O1xuXG5cbi8qKlxuICogUmV0dXJucyB0aGUgZnJhbWluZyByZWN0YW5nbGUgb2YgdGhlIHNwcml0ZSBhcyBhIFJlY3RhbmdsZSBvYmplY3RcbipcbiAqIEByZXR1cm4ge1BJWEkuUmVjdGFuZ2xlfSB0aGUgZnJhbWluZyByZWN0YW5nbGVcbiAqL1xuVGlsaW5nU3ByaXRlLnByb3RvdHlwZS5nZXRCb3VuZHMgPSBmdW5jdGlvbiAoKVxue1xuICAgIHZhciB3aWR0aCA9IHRoaXMuX3dpZHRoO1xuICAgIHZhciBoZWlnaHQgPSB0aGlzLl9oZWlnaHQ7XG5cbiAgICB2YXIgdzAgPSB3aWR0aCAqICgxLXRoaXMuYW5jaG9yLngpO1xuICAgIHZhciB3MSA9IHdpZHRoICogLXRoaXMuYW5jaG9yLng7XG5cbiAgICB2YXIgaDAgPSBoZWlnaHQgKiAoMS10aGlzLmFuY2hvci55KTtcbiAgICB2YXIgaDEgPSBoZWlnaHQgKiAtdGhpcy5hbmNob3IueTtcblxuICAgIHZhciB3b3JsZFRyYW5zZm9ybSA9IHRoaXMud29ybGRUcmFuc2Zvcm07XG5cbiAgICB2YXIgYSA9IHdvcmxkVHJhbnNmb3JtLmE7XG4gICAgdmFyIGIgPSB3b3JsZFRyYW5zZm9ybS5iO1xuICAgIHZhciBjID0gd29ybGRUcmFuc2Zvcm0uYztcbiAgICB2YXIgZCA9IHdvcmxkVHJhbnNmb3JtLmQ7XG4gICAgdmFyIHR4ID0gd29ybGRUcmFuc2Zvcm0udHg7XG4gICAgdmFyIHR5ID0gd29ybGRUcmFuc2Zvcm0udHk7XG5cbiAgICB2YXIgeDEgPSBhICogdzEgKyBjICogaDEgKyB0eDtcbiAgICB2YXIgeTEgPSBkICogaDEgKyBiICogdzEgKyB0eTtcblxuICAgIHZhciB4MiA9IGEgKiB3MCArIGMgKiBoMSArIHR4O1xuICAgIHZhciB5MiA9IGQgKiBoMSArIGIgKiB3MCArIHR5O1xuXG4gICAgdmFyIHgzID0gYSAqIHcwICsgYyAqIGgwICsgdHg7XG4gICAgdmFyIHkzID0gZCAqIGgwICsgYiAqIHcwICsgdHk7XG5cbiAgICB2YXIgeDQgPSAgYSAqIHcxICsgYyAqIGgwICsgdHg7XG4gICAgdmFyIHk0ID0gIGQgKiBoMCArIGIgKiB3MSArIHR5O1xuXG4gICAgdmFyIG1pblgsXG4gICAgICAgIG1heFgsXG4gICAgICAgIG1pblksXG4gICAgICAgIG1heFk7XG5cbiAgICBtaW5YID0geDE7XG4gICAgbWluWCA9IHgyIDwgbWluWCA/IHgyIDogbWluWDtcbiAgICBtaW5YID0geDMgPCBtaW5YID8geDMgOiBtaW5YO1xuICAgIG1pblggPSB4NCA8IG1pblggPyB4NCA6IG1pblg7XG5cbiAgICBtaW5ZID0geTE7XG4gICAgbWluWSA9IHkyIDwgbWluWSA/IHkyIDogbWluWTtcbiAgICBtaW5ZID0geTMgPCBtaW5ZID8geTMgOiBtaW5ZO1xuICAgIG1pblkgPSB5NCA8IG1pblkgPyB5NCA6IG1pblk7XG5cbiAgICBtYXhYID0geDE7XG4gICAgbWF4WCA9IHgyID4gbWF4WCA/IHgyIDogbWF4WDtcbiAgICBtYXhYID0geDMgPiBtYXhYID8geDMgOiBtYXhYO1xuICAgIG1heFggPSB4NCA+IG1heFggPyB4NCA6IG1heFg7XG5cbiAgICBtYXhZID0geTE7XG4gICAgbWF4WSA9IHkyID4gbWF4WSA/IHkyIDogbWF4WTtcbiAgICBtYXhZID0geTMgPiBtYXhZID8geTMgOiBtYXhZO1xuICAgIG1heFkgPSB5NCA+IG1heFkgPyB5NCA6IG1heFk7XG5cbiAgICB2YXIgYm91bmRzID0gdGhpcy5fYm91bmRzO1xuXG4gICAgYm91bmRzLnggPSBtaW5YO1xuICAgIGJvdW5kcy53aWR0aCA9IG1heFggLSBtaW5YO1xuXG4gICAgYm91bmRzLnkgPSBtaW5ZO1xuICAgIGJvdW5kcy5oZWlnaHQgPSBtYXhZIC0gbWluWTtcblxuICAgIC8vIHN0b3JlIGEgcmVmZXJlbmNlIHNvIHRoYXQgaWYgdGhpcyBmdW5jdGlvbiBnZXRzIGNhbGxlZCBhZ2FpbiBpbiB0aGUgcmVuZGVyIGN5Y2xlIHdlIGRvIG5vdCBoYXZlIHRvIHJlY2FsY3VsYXRlXG4gICAgdGhpcy5fY3VycmVudEJvdW5kcyA9IGJvdW5kcztcblxuICAgIHJldHVybiBib3VuZHM7XG59O1xuXG4vKipcbiAqIENoZWNrcyBpZiBhIHBvaW50IGlzIGluc2lkZSB0aGlzIHRpbGluZyBzcHJpdGVcbiAqIEBwYXJhbSBwb2ludCB7UElYSS5Qb2ludH0gdGhlIHBvaW50IHRvIGNoZWNrXG4gKi9cblRpbGluZ1Nwcml0ZS5wcm90b3R5cGUuY29udGFpbnNQb2ludCA9IGZ1bmN0aW9uKCBwb2ludCApXG57XG4gICAgdGhpcy53b3JsZFRyYW5zZm9ybS5hcHBseUludmVyc2UocG9pbnQsICB0ZW1wUG9pbnQpO1xuXG4gICAgdmFyIHdpZHRoID0gdGhpcy5fd2lkdGg7XG4gICAgdmFyIGhlaWdodCA9IHRoaXMuX2hlaWdodDtcbiAgICB2YXIgeDEgPSAtd2lkdGggKiB0aGlzLmFuY2hvci54O1xuICAgIHZhciB5MTtcblxuICAgIGlmICggdGVtcFBvaW50LnggPiB4MSAmJiB0ZW1wUG9pbnQueCA8IHgxICsgd2lkdGggKVxuICAgIHtcbiAgICAgICAgeTEgPSAtaGVpZ2h0ICogdGhpcy5hbmNob3IueTtcblxuICAgICAgICBpZiAoIHRlbXBQb2ludC55ID4geTEgJiYgdGVtcFBvaW50LnkgPCB5MSArIGhlaWdodCApXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xufTtcblxuLyoqXG4gKiBEZXN0cm95cyB0aGlzIHRpbGluZyBzcHJpdGVcbiAqXG4gKi9cblRpbGluZ1Nwcml0ZS5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uICgpIHtcbiAgICBjb3JlLlNwcml0ZS5wcm90b3R5cGUuZGVzdHJveS5jYWxsKHRoaXMpO1xuXG4gICAgdGhpcy50aWxlU2NhbGUgPSBudWxsO1xuICAgIHRoaXMuX3RpbGVTY2FsZU9mZnNldCA9IG51bGw7XG4gICAgdGhpcy50aWxlUG9zaXRpb24gPSBudWxsO1xuXG4gICAgdGhpcy5fdXZzID0gbnVsbDtcbn07XG5cbi8qKlxuICogSGVscGVyIGZ1bmN0aW9uIHRoYXQgY3JlYXRlcyBhIHRpbGluZyBzcHJpdGUgdGhhdCB3aWxsIHVzZSBhIHRleHR1cmUgZnJvbSB0aGUgVGV4dHVyZUNhY2hlIGJhc2VkIG9uIHRoZSBmcmFtZUlkXG4gKiBUaGUgZnJhbWUgaWRzIGFyZSBjcmVhdGVkIHdoZW4gYSBUZXh0dXJlIHBhY2tlciBmaWxlIGhhcyBiZWVuIGxvYWRlZFxuICpcbiAqIEBzdGF0aWNcbiAqIEBwYXJhbSBmcmFtZUlkIHtzdHJpbmd9IFRoZSBmcmFtZSBJZCBvZiB0aGUgdGV4dHVyZSBpbiB0aGUgY2FjaGVcbiAqIEByZXR1cm4ge1BJWEkuZXh0cmFzLlRpbGluZ1Nwcml0ZX0gQSBuZXcgVGlsaW5nU3ByaXRlIHVzaW5nIGEgdGV4dHVyZSBmcm9tIHRoZSB0ZXh0dXJlIGNhY2hlIG1hdGNoaW5nIHRoZSBmcmFtZUlkXG4gKiBAcGFyYW0gd2lkdGgge251bWJlcn0gIHRoZSB3aWR0aCBvZiB0aGUgdGlsaW5nIHNwcml0ZVxuICogQHBhcmFtIGhlaWdodCB7bnVtYmVyfSB0aGUgaGVpZ2h0IG9mIHRoZSB0aWxpbmcgc3ByaXRlXG4gKi9cblRpbGluZ1Nwcml0ZS5mcm9tRnJhbWUgPSBmdW5jdGlvbiAoZnJhbWVJZCx3aWR0aCxoZWlnaHQpXG57XG4gICAgdmFyIHRleHR1cmUgPSBjb3JlLnV0aWxzLlRleHR1cmVDYWNoZVtmcmFtZUlkXTtcblxuICAgIGlmICghdGV4dHVyZSlcbiAgICB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignVGhlIGZyYW1lSWQgXCInICsgZnJhbWVJZCArICdcIiBkb2VzIG5vdCBleGlzdCBpbiB0aGUgdGV4dHVyZSBjYWNoZSAnICsgdGhpcyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBUaWxpbmdTcHJpdGUodGV4dHVyZSx3aWR0aCxoZWlnaHQpO1xufTtcblxuLyoqXG4gKiBIZWxwZXIgZnVuY3Rpb24gdGhhdCBjcmVhdGVzIGEgc3ByaXRlIHRoYXQgd2lsbCBjb250YWluIGEgdGV4dHVyZSBiYXNlZCBvbiBhbiBpbWFnZSB1cmxcbiAqIElmIHRoZSBpbWFnZSBpcyBub3QgaW4gdGhlIHRleHR1cmUgY2FjaGUgaXQgd2lsbCBiZSBsb2FkZWRcbiAqXG4gKiBAc3RhdGljXG4gKiBAcGFyYW0gaW1hZ2VJZCB7c3RyaW5nfSBUaGUgaW1hZ2UgdXJsIG9mIHRoZSB0ZXh0dXJlXG4gKiBAcGFyYW0gd2lkdGgge251bWJlcn0gIHRoZSB3aWR0aCBvZiB0aGUgdGlsaW5nIHNwcml0ZVxuICogQHBhcmFtIGhlaWdodCB7bnVtYmVyfSB0aGUgaGVpZ2h0IG9mIHRoZSB0aWxpbmcgc3ByaXRlXG4gKiBAcGFyYW0gW2Nyb3Nzb3JpZ2luPShhdXRvKV0ge2Jvb2xlYW59IGlmIHlvdSB3YW50IHRvIHNwZWNpZnkgdGhlIGNyb3NzLW9yaWdpbiBwYXJhbWV0ZXJcbiAqIEBwYXJhbSBbc2NhbGVNb2RlPVBJWEkuU0NBTEVfTU9ERVMuREVGQVVMVF0ge251bWJlcn0gaWYgeW91IHdhbnQgdG8gc3BlY2lmeSB0aGUgc2NhbGUgbW9kZSwgc2VlIHtAbGluayBQSVhJLlNDQUxFX01PREVTfSBmb3IgcG9zc2libGUgdmFsdWVzXG4gKiBAcmV0dXJuIHtQSVhJLmV4dHJhcy5UaWxpbmdTcHJpdGV9IEEgbmV3IFRpbGluZ1Nwcml0ZSB1c2luZyBhIHRleHR1cmUgZnJvbSB0aGUgdGV4dHVyZSBjYWNoZSBtYXRjaGluZyB0aGUgaW1hZ2UgaWRcbiAqL1xuVGlsaW5nU3ByaXRlLmZyb21JbWFnZSA9IGZ1bmN0aW9uIChpbWFnZUlkLCB3aWR0aCwgaGVpZ2h0LCBjcm9zc29yaWdpbiwgc2NhbGVNb2RlKVxue1xuICAgIHJldHVybiBuZXcgVGlsaW5nU3ByaXRlKGNvcmUuVGV4dHVyZS5mcm9tSW1hZ2UoaW1hZ2VJZCwgY3Jvc3NvcmlnaW4sIHNjYWxlTW9kZSksd2lkdGgsaGVpZ2h0KTtcbn07XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uL2NvcmUnKSxcbiAgICBEaXNwbGF5T2JqZWN0ID0gY29yZS5EaXNwbGF5T2JqZWN0LFxuICAgIF90ZW1wTWF0cml4ID0gbmV3IGNvcmUuTWF0cml4KCk7XG5cbkRpc3BsYXlPYmplY3QucHJvdG90eXBlLl9jYWNoZUFzQml0bWFwID0gZmFsc2U7XG5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS5fb3JpZ2luYWxSZW5kZXJXZWJHTCA9IG51bGw7XG5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS5fb3JpZ2luYWxSZW5kZXJDYW52YXMgPSBudWxsO1xuXG5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS5fb3JpZ2luYWxVcGRhdGVUcmFuc2Zvcm0gPSBudWxsO1xuRGlzcGxheU9iamVjdC5wcm90b3R5cGUuX29yaWdpbmFsSGl0VGVzdCA9IG51bGw7XG5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS5fb3JpZ2luYWxEZXN0cm95ID0gbnVsbDtcbkRpc3BsYXlPYmplY3QucHJvdG90eXBlLl9jYWNoZWRTcHJpdGUgPSBudWxsO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhEaXNwbGF5T2JqZWN0LnByb3RvdHlwZSwge1xuXG4gICAgLyoqXG4gICAgICogU2V0IHRoaXMgdG8gdHJ1ZSBpZiB5b3Ugd2FudCB0aGlzIGRpc3BsYXkgb2JqZWN0IHRvIGJlIGNhY2hlZCBhcyBhIGJpdG1hcC5cbiAgICAgKiBUaGlzIGJhc2ljYWxseSB0YWtlcyBhIHNuYXAgc2hvdCBvZiB0aGUgZGlzcGxheSBvYmplY3QgYXMgaXQgaXMgYXQgdGhhdCBtb21lbnQuIEl0IGNhbiBwcm92aWRlIGEgcGVyZm9ybWFuY2UgYmVuZWZpdCBmb3IgY29tcGxleCBzdGF0aWMgZGlzcGxheU9iamVjdHMuXG4gICAgICogVG8gcmVtb3ZlIHNpbXBseSBzZXQgdGhpcyBwcm9wZXJ0eSB0byAnZmFsc2UnXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLkRpc3BsYXlPYmplY3QjXG4gICAgICovXG4gICAgY2FjaGVBc0JpdG1hcDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9jYWNoZUFzQml0bWFwO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgaWYgKHRoaXMuX2NhY2hlQXNCaXRtYXAgPT09IHZhbHVlKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5fY2FjaGVBc0JpdG1hcCA9IHZhbHVlO1xuXG4gICAgICAgICAgICBpZiAodmFsdWUpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdGhpcy5fb3JpZ2luYWxSZW5kZXJXZWJHTCA9IHRoaXMucmVuZGVyV2ViR0w7XG4gICAgICAgICAgICAgICAgdGhpcy5fb3JpZ2luYWxSZW5kZXJDYW52YXMgPSB0aGlzLnJlbmRlckNhbnZhcztcblxuICAgICAgICAgICAgICAgIHRoaXMuX29yaWdpbmFsVXBkYXRlVHJhbnNmb3JtID0gdGhpcy51cGRhdGVUcmFuc2Zvcm07XG4gICAgICAgICAgICAgICAgdGhpcy5fb3JpZ2luYWxHZXRCb3VuZHMgPSB0aGlzLmdldEJvdW5kcztcblxuICAgICAgICAgICAgICAgIHRoaXMuX29yaWdpbmFsRGVzdHJveSA9IHRoaXMuZGVzdHJveTtcblxuICAgICAgICAgICAgICAgIHRoaXMuX29yaWdpbmFsQ29udGFpbnNQb2ludCA9IHRoaXMuY29udGFpbnNQb2ludDtcblxuICAgICAgICAgICAgICAgIHRoaXMucmVuZGVyV2ViR0wgPSB0aGlzLl9yZW5kZXJDYWNoZWRXZWJHTDtcbiAgICAgICAgICAgICAgICB0aGlzLnJlbmRlckNhbnZhcyA9IHRoaXMuX3JlbmRlckNhY2hlZENhbnZhcztcblxuICAgICAgICAgICAgICAgIHRoaXMuZGVzdHJveSA9IHRoaXMuX2NhY2hlQXNCaXRtYXBEZXN0cm95O1xuXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuX2NhY2hlZFNwcml0ZSlcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2Rlc3Ryb3lDYWNoZWREaXNwbGF5T2JqZWN0KCk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgdGhpcy5yZW5kZXJXZWJHTCA9IHRoaXMuX29yaWdpbmFsUmVuZGVyV2ViR0w7XG4gICAgICAgICAgICAgICAgdGhpcy5yZW5kZXJDYW52YXMgPSB0aGlzLl9vcmlnaW5hbFJlbmRlckNhbnZhcztcbiAgICAgICAgICAgICAgICB0aGlzLmdldEJvdW5kcyA9IHRoaXMuX29yaWdpbmFsR2V0Qm91bmRzO1xuXG4gICAgICAgICAgICAgICAgdGhpcy5kZXN0cm95ID0gdGhpcy5fb3JpZ2luYWxEZXN0cm95O1xuXG4gICAgICAgICAgICAgICAgdGhpcy51cGRhdGVUcmFuc2Zvcm0gPSB0aGlzLl9vcmlnaW5hbFVwZGF0ZVRyYW5zZm9ybTtcbiAgICAgICAgICAgICAgICB0aGlzLmNvbnRhaW5zUG9pbnQgPSB0aGlzLl9vcmlnaW5hbENvbnRhaW5zUG9pbnQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG59KTtcbi8qKlxuKiBSZW5kZXJzIGEgY2FjaGVkIHZlcnNpb24gb2YgdGhlIHNwcml0ZSB3aXRoIFdlYkdMXG4qXG4qIEBwYXJhbSByZW5kZXJlciB7UElYSS5XZWJHTFJlbmRlcmVyfSB0aGUgV2ViR0wgcmVuZGVyZXJcbiogQHByaXZhdGVcbiovXG5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS5fcmVuZGVyQ2FjaGVkV2ViR0wgPSBmdW5jdGlvbiAocmVuZGVyZXIpXG57XG4gICAgaWYgKCF0aGlzLnZpc2libGUgfHwgdGhpcy53b3JsZEFscGhhIDw9IDAgfHwgIXRoaXMucmVuZGVyYWJsZSlcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLl9pbml0Q2FjaGVkRGlzcGxheU9iamVjdCggcmVuZGVyZXIgKTtcblxuICAgIHRoaXMuX2NhY2hlZFNwcml0ZS53b3JsZEFscGhhID0gdGhpcy53b3JsZEFscGhhO1xuXG4gICAgcmVuZGVyZXIuc2V0T2JqZWN0UmVuZGVyZXIocmVuZGVyZXIucGx1Z2lucy5zcHJpdGUpO1xuICAgIHJlbmRlcmVyLnBsdWdpbnMuc3ByaXRlLnJlbmRlciggdGhpcy5fY2FjaGVkU3ByaXRlICk7XG59O1xuXG4vKipcbiogUHJlcGFyZXMgdGhlIFdlYkdMIHJlbmRlcmVyIHRvIGNhY2hlIHRoZSBzcHJpdGVcbipcbiogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLldlYkdMUmVuZGVyZXJ9IHRoZSBXZWJHTCByZW5kZXJlclxuKiBAcHJpdmF0ZVxuKi9cbkRpc3BsYXlPYmplY3QucHJvdG90eXBlLl9pbml0Q2FjaGVkRGlzcGxheU9iamVjdCA9IGZ1bmN0aW9uIChyZW5kZXJlcilcbntcbiAgICBpZih0aGlzLl9jYWNoZWRTcHJpdGUpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gZmlyc3Qgd2UgZmx1c2ggYW55dGhpbmcgbGVmdCBpbiB0aGUgcmVuZGVyZXIgKG90aGVyd2lzZSBpdCB3b3VsZCBnZXQgcmVuZGVyZWQgdG8gdGhlIGNhY2hlZCB0ZXh0dXJlKVxuICAgIHJlbmRlcmVyLmN1cnJlbnRSZW5kZXJlci5mbHVzaCgpO1xuICAgIC8vdGhpcy5maWx0ZXJzPSBbXTtcbiAgICAvLyBuZXh0IHdlIGZpbmQgdGhlIGRpbWVuc2lvbnMgb2YgdGhlIHVudHJhbnNmb3JtZWQgb2JqZWN0XG4gICAgLy8gdGhpcyBmdW5jdGlvbiBhbHNvIGNhbGxzIHVwZGF0ZXRyYW5zZm9ybSBvbiBhbGwgaXRzIGNoaWxkcmVuIGFzIHBhcnQgb2YgdGhlIG1lYXN1cmluZy4gVGhpcyBtZWFucyB3ZSBkb24ndCBuZWVkIHRvIHVwZGF0ZSB0aGUgdHJhbnNmb3JtIGFnYWluIGluIHRoaXMgZnVuY3Rpb25cbiAgICAvLyBUT0RPIHBhc3MgYW4gb2JqZWN0IHRvIGNsb25lIHRvbz8gc2F2ZXMgaGF2aW5nIHRvIGNyZWF0ZSBhIG5ldyBvbmUgZWFjaCB0aW1lIVxuICAgIHZhciBib3VuZHMgPSB0aGlzLmdldExvY2FsQm91bmRzKCkuY2xvbmUoKTtcblxuICAgIC8vIGFkZCBzb21lIHBhZGRpbmchXG4gICAgaWYodGhpcy5fZmlsdGVycylcbiAgICB7XG4gICAgICAgIHZhciBwYWRkaW5nID0gdGhpcy5fZmlsdGVyc1swXS5wYWRkaW5nO1xuICAgICAgICBib3VuZHMueCAtPSBwYWRkaW5nO1xuICAgICAgICBib3VuZHMueSAtPSBwYWRkaW5nO1xuXG4gICAgICAgIGJvdW5kcy53aWR0aCArPSBwYWRkaW5nICogMjtcbiAgICAgICAgYm91bmRzLmhlaWdodCArPSBwYWRkaW5nICogMjtcbiAgICB9XG5cbiAgICAvLyBmb3Igbm93IHdlIGNhY2hlIHRoZSBjdXJyZW50IHJlbmRlclRhcmdldCB0aGF0IHRoZSB3ZWJHTCByZW5kZXJlciBpcyBjdXJyZW50bHkgdXNpbmcuXG4gICAgLy8gdGhpcyBjb3VsZCBiZSBtb3JlIGVsZWdlbnQuLlxuICAgIHZhciBjYWNoZWRSZW5kZXJUYXJnZXQgPSByZW5kZXJlci5jdXJyZW50UmVuZGVyVGFyZ2V0O1xuICAgIC8vIFdlIGFsc28gc3RvcmUgdGhlIGZpbHRlciBzdGFjayAtIEkgd2lsbCBkZWZpbml0ZWx5IGxvb2sgdG8gY2hhbmdlIGhvdyB0aGlzIHdvcmtzIGEgbGl0dGxlIGxhdGVyIGRvd24gdGhlIGxpbmUuXG4gICAgdmFyIHN0YWNrID0gcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5maWx0ZXJTdGFjaztcblxuICAgIC8vIHRoaXMgcmVuZGVyVGV4dHVyZSB3aWxsIGJlIHVzZWQgdG8gc3RvcmUgdGhlIGNhY2hlZCBEaXNwbGF5T2JqZWN0XG4gICAgdmFyIHJlbmRlclRleHR1cmUgPSBuZXcgY29yZS5SZW5kZXJUZXh0dXJlKHJlbmRlcmVyLCBib3VuZHMud2lkdGggfCAwLCBib3VuZHMuaGVpZ2h0IHwgMCk7XG5cbiAgICAvLyBuZWVkIHRvIHNldCAvL1xuICAgIHZhciBtID0gX3RlbXBNYXRyaXg7XG5cbiAgICBtLnR4ID0gLWJvdW5kcy54O1xuICAgIG0udHkgPSAtYm91bmRzLnk7XG5cblxuXG4gICAgLy8gc2V0IGFsbCBwcm9wZXJ0aWVzIHRvIHRoZXJlIG9yaWdpbmFsIHNvIHdlIGNhbiByZW5kZXIgdG8gYSB0ZXh0dXJlXG4gICAgdGhpcy5yZW5kZXJXZWJHTCA9IHRoaXMuX29yaWdpbmFsUmVuZGVyV2ViR0w7XG5cbiAgICByZW5kZXJUZXh0dXJlLnJlbmRlcih0aGlzLCBtLCB0cnVlLCB0cnVlKTtcblxuICAgIC8vIG5vdyByZXN0b3JlIHRoZSBzdGF0ZSBiZSBzZXR0aW5nIHRoZSBuZXcgcHJvcGVydGllc1xuICAgIHJlbmRlcmVyLnNldFJlbmRlclRhcmdldChjYWNoZWRSZW5kZXJUYXJnZXQpO1xuICAgIHJlbmRlcmVyLmZpbHRlck1hbmFnZXIuZmlsdGVyU3RhY2sgPSBzdGFjaztcblxuICAgIHRoaXMucmVuZGVyV2ViR0wgICAgID0gdGhpcy5fcmVuZGVyQ2FjaGVkV2ViR0w7XG4gICAgdGhpcy51cGRhdGVUcmFuc2Zvcm0gPSB0aGlzLmRpc3BsYXlPYmplY3RVcGRhdGVUcmFuc2Zvcm07XG4gICAgdGhpcy5nZXRCb3VuZHMgICAgICAgPSB0aGlzLl9nZXRDYWNoZWRCb3VuZHM7XG5cblxuICAgIC8vIGNyZWF0ZSBvdXIgY2FjaGVkIHNwcml0ZVxuICAgIHRoaXMuX2NhY2hlZFNwcml0ZSA9IG5ldyBjb3JlLlNwcml0ZShyZW5kZXJUZXh0dXJlKTtcbiAgICB0aGlzLl9jYWNoZWRTcHJpdGUud29ybGRUcmFuc2Zvcm0gPSB0aGlzLndvcmxkVHJhbnNmb3JtO1xuICAgIHRoaXMuX2NhY2hlZFNwcml0ZS5hbmNob3IueCA9IC0oIGJvdW5kcy54IC8gYm91bmRzLndpZHRoICk7XG4gICAgdGhpcy5fY2FjaGVkU3ByaXRlLmFuY2hvci55ID0gLSggYm91bmRzLnkgLyBib3VuZHMuaGVpZ2h0ICk7XG5cbiAgICAvLyByZXN0b3JlIHRoZSB0cmFuc2Zvcm0gb2YgdGhlIGNhY2hlZCBzcHJpdGUgdG8gYXZvaWQgdGhlIG5hc3R5IGZsaWNrZXIuLlxuICAgIHRoaXMudXBkYXRlVHJhbnNmb3JtKCk7XG5cbiAgICAvLyBtYXAgdGhlIGhpdCB0ZXN0Li5cbiAgICB0aGlzLmNvbnRhaW5zUG9pbnQgPSB0aGlzLl9jYWNoZWRTcHJpdGUuY29udGFpbnNQb2ludC5iaW5kKHRoaXMuX2NhY2hlZFNwcml0ZSk7XG59O1xuXG4vKipcbiogUmVuZGVycyBhIGNhY2hlZCB2ZXJzaW9uIG9mIHRoZSBzcHJpdGUgd2l0aCBjYW52YXNcbipcbiogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLkNhbnZhc1JlbmRlcmVyfSB0aGUgQ2FudmFzIHJlbmRlcmVyXG4qIEBwcml2YXRlXG4qL1xuRGlzcGxheU9iamVjdC5wcm90b3R5cGUuX3JlbmRlckNhY2hlZENhbnZhcyA9IGZ1bmN0aW9uIChyZW5kZXJlcilcbntcbiAgICBpZiAoIXRoaXMudmlzaWJsZSB8fCB0aGlzLndvcmxkQWxwaGEgPD0gMCB8fCAhdGhpcy5yZW5kZXJhYmxlKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuX2luaXRDYWNoZWREaXNwbGF5T2JqZWN0Q2FudmFzKCByZW5kZXJlciApO1xuXG4gICAgdGhpcy5fY2FjaGVkU3ByaXRlLndvcmxkQWxwaGEgPSB0aGlzLndvcmxkQWxwaGE7XG5cbiAgICB0aGlzLl9jYWNoZWRTcHJpdGUucmVuZGVyQ2FudmFzKHJlbmRlcmVyKTtcbn07XG5cbi8vVE9ETyB0aGlzIGNhbiBiZSB0aGUgc2FtZSBhcyB0aGUgd2ViR0wgdmVyaXNvbi4uIHdpbGwgbmVlZCB0byBkbyBhIGxpdHRsZSB0d2Vha2luZyBmaXJzdCB0aG91Z2guLlxuLyoqXG4qIFByZXBhcmVzIHRoZSBDYW52YXMgcmVuZGVyZXIgdG8gY2FjaGUgdGhlIHNwcml0ZVxuKlxuKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuQ2FudmFzUmVuZGVyZXJ9IHRoZSBDYW52YXMgcmVuZGVyZXJcbiogQHByaXZhdGVcbiovXG5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS5faW5pdENhY2hlZERpc3BsYXlPYmplY3RDYW52YXMgPSBmdW5jdGlvbiAocmVuZGVyZXIpXG57XG4gICAgaWYodGhpcy5fY2FjaGVkU3ByaXRlKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vZ2V0IGJvdW5kcyBhY3R1YWxseSB0cmFuc2Zvcm1zIHRoZSBvYmplY3QgZm9yIHVzIGFscmVhZHkhXG4gICAgdmFyIGJvdW5kcyA9IHRoaXMuZ2V0TG9jYWxCb3VuZHMoKTtcblxuICAgIHZhciBjYWNoZWRSZW5kZXJUYXJnZXQgPSByZW5kZXJlci5jb250ZXh0O1xuXG4gICAgdmFyIHJlbmRlclRleHR1cmUgPSBuZXcgY29yZS5SZW5kZXJUZXh0dXJlKHJlbmRlcmVyLCBib3VuZHMud2lkdGggfCAwLCBib3VuZHMuaGVpZ2h0IHwgMCk7XG5cbiAgICAvLyBuZWVkIHRvIHNldCAvL1xuICAgIHZhciBtID0gX3RlbXBNYXRyaXg7XG5cbiAgICBtLnR4ID0gLWJvdW5kcy54O1xuICAgIG0udHkgPSAtYm91bmRzLnk7XG5cbiAgICAvLyBzZXQgYWxsIHByb3BlcnRpZXMgdG8gdGhlcmUgb3JpZ2luYWwgc28gd2UgY2FuIHJlbmRlciB0byBhIHRleHR1cmVcbiAgICB0aGlzLnJlbmRlckNhbnZhcyA9IHRoaXMuX29yaWdpbmFsUmVuZGVyQ2FudmFzO1xuXG4gICAgcmVuZGVyVGV4dHVyZS5yZW5kZXIodGhpcywgbSwgdHJ1ZSk7XG5cbiAgICAvLyBub3cgcmVzdG9yZSB0aGUgc3RhdGUgYmUgc2V0dGluZyB0aGUgbmV3IHByb3BlcnRpZXNcbiAgICByZW5kZXJlci5jb250ZXh0ID0gY2FjaGVkUmVuZGVyVGFyZ2V0O1xuXG4gICAgdGhpcy5yZW5kZXJDYW52YXMgPSB0aGlzLl9yZW5kZXJDYWNoZWRDYW52YXM7XG4gICAgdGhpcy51cGRhdGVUcmFuc2Zvcm0gPSB0aGlzLmRpc3BsYXlPYmplY3RVcGRhdGVUcmFuc2Zvcm07XG4gICAgdGhpcy5nZXRCb3VuZHMgID0gdGhpcy5fZ2V0Q2FjaGVkQm91bmRzO1xuXG5cbiAgICAvLyBjcmVhdGUgb3VyIGNhY2hlZCBzcHJpdGVcbiAgICB0aGlzLl9jYWNoZWRTcHJpdGUgPSBuZXcgY29yZS5TcHJpdGUocmVuZGVyVGV4dHVyZSk7XG4gICAgdGhpcy5fY2FjaGVkU3ByaXRlLndvcmxkVHJhbnNmb3JtID0gdGhpcy53b3JsZFRyYW5zZm9ybTtcbiAgICB0aGlzLl9jYWNoZWRTcHJpdGUuYW5jaG9yLnggPSAtKCBib3VuZHMueCAvIGJvdW5kcy53aWR0aCApO1xuICAgIHRoaXMuX2NhY2hlZFNwcml0ZS5hbmNob3IueSA9IC0oIGJvdW5kcy55IC8gYm91bmRzLmhlaWdodCApO1xuXG4gICAgdGhpcy51cGRhdGVUcmFuc2Zvcm0oKTtcblxuICAgIHRoaXMuY29udGFpbnNQb2ludCA9IHRoaXMuX2NhY2hlZFNwcml0ZS5jb250YWluc1BvaW50LmJpbmQodGhpcy5fY2FjaGVkU3ByaXRlKTtcbn07XG5cbi8qKlxuKiBDYWxjdWxhdGVzIHRoZSBib3VuZHMgb2YgdGhlIGNhY2hlZCBzcHJpdGVcbipcbiogQHByaXZhdGVcbiovXG5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS5fZ2V0Q2FjaGVkQm91bmRzID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLl9jYWNoZWRTcHJpdGUuX2N1cnJlbnRCb3VuZHMgPSBudWxsO1xuXG4gICAgcmV0dXJuIHRoaXMuX2NhY2hlZFNwcml0ZS5nZXRCb3VuZHMoKTtcbn07XG5cbi8qKlxuKiBEZXN0cm95cyB0aGUgY2FjaGVkIHNwcml0ZS5cbipcbiogQHByaXZhdGVcbiovXG5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS5fZGVzdHJveUNhY2hlZERpc3BsYXlPYmplY3QgPSBmdW5jdGlvbiAoKVxue1xuICAgIHRoaXMuX2NhY2hlZFNwcml0ZS5fdGV4dHVyZS5kZXN0cm95KCk7XG4gICAgdGhpcy5fY2FjaGVkU3ByaXRlID0gbnVsbDtcbn07XG5cbkRpc3BsYXlPYmplY3QucHJvdG90eXBlLl9jYWNoZUFzQml0bWFwRGVzdHJveSA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy5jYWNoZUFzQml0bWFwID0gZmFsc2U7XG4gICAgdGhpcy5fb3JpZ2luYWxEZXN0cm95KCk7XG59O1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi9jb3JlJyk7XG5cbi8qKlxuICogVGhlIGluc3RhbmNlIG5hbWUgb2YgdGhlIG9iamVjdC5cbiAqXG4gKiBAbWVtYmVyb2YgUElYSS5EaXNwbGF5T2JqZWN0I1xuICogQG1lbWJlciB7c3RyaW5nfVxuICovXG5jb3JlLkRpc3BsYXlPYmplY3QucHJvdG90eXBlLm5hbWUgPSBudWxsO1xuXG4vKipcbiogUmV0dXJucyB0aGUgZGlzcGxheSBvYmplY3QgaW4gdGhlIGNvbnRhaW5lclxuKlxuKiBAbWVtYmVyb2YgUElYSS5Db250YWluZXIjXG4qIEBwYXJhbSBuYW1lIHtzdHJpbmd9IGluc3RhbmNlIG5hbWVcbiogQHJldHVybiB7UElYSS5EaXNwbGF5T2JqZWN0fVxuKi9cbmNvcmUuQ29udGFpbmVyLnByb3RvdHlwZS5nZXRDaGlsZEJ5TmFtZSA9IGZ1bmN0aW9uIChuYW1lKVxue1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5jaGlsZHJlbi5sZW5ndGg7IGkrKylcbiAgICB7XG4gICAgICAgIGlmICh0aGlzLmNoaWxkcmVuW2ldLm5hbWUgPT09IG5hbWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmNoaWxkcmVuW2ldO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xufTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vY29yZScpO1xuXG4vKipcbiogUmV0dXJucyB0aGUgZ2xvYmFsIHBvc2l0aW9uIG9mIHRoZSBkaXNwbGF5T2JqZWN0XG4qXG4qIEBtZW1iZXJvZiBQSVhJLkRpc3BsYXlPYmplY3QjXG4qIEBwYXJhbSBwb2ludCB7UG9pbnR9IHRoZSBwb2ludCB0byB3cml0ZSB0aGUgZ2xvYmFsIHZhbHVlIHRvLiBJZiBudWxsIGEgbmV3IHBvaW50IHdpbGwgYmUgcmV0dXJuZWRcbiogQHJldHVybiB7UG9pbnR9XG4qL1xuY29yZS5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS5nZXRHbG9iYWxQb3NpdGlvbiA9IGZ1bmN0aW9uIChwb2ludClcbntcbiAgICBwb2ludCA9IHBvaW50IHx8IG5ldyBjb3JlLlBvaW50KCk7XG5cbiAgICBpZih0aGlzLnBhcmVudClcbiAgICB7XG4gICAgICAgIHRoaXMuZGlzcGxheU9iamVjdFVwZGF0ZVRyYW5zZm9ybSgpO1xuXG4gICAgICAgIHBvaW50LnggPSB0aGlzLndvcmxkVHJhbnNmb3JtLnR4O1xuICAgICAgICBwb2ludC55ID0gdGhpcy53b3JsZFRyYW5zZm9ybS50eTtcbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgcG9pbnQueCA9IHRoaXMucG9zaXRpb24ueDtcbiAgICAgICAgcG9pbnQueSA9IHRoaXMucG9zaXRpb24ueTtcbiAgICB9XG5cbiAgICByZXR1cm4gcG9pbnQ7XG59O1xuIiwiLyoqXG4gKiBAZmlsZSAgICAgICAgTWFpbiBleHBvcnQgb2YgdGhlIFBJWEkgZXh0cmFzIGxpYnJhcnlcbiAqIEBhdXRob3IgICAgICBNYXQgR3JvdmVzIDxtYXRAZ29vZGJveWRpZ2l0YWwuY29tPlxuICogQGNvcHlyaWdodCAgIDIwMTMtMjAxNSBHb29kQm95RGlnaXRhbFxuICogQGxpY2Vuc2UgICAgIHtAbGluayBodHRwczovL2dpdGh1Yi5jb20vcGl4aWpzL3BpeGkuanMvYmxvYi9tYXN0ZXIvTElDRU5TRXxNSVQgTGljZW5zZX1cbiAqL1xuXG5yZXF1aXJlKCcuL2NhY2hlQXNCaXRtYXAnKTtcbnJlcXVpcmUoJy4vZ2V0Q2hpbGRCeU5hbWUnKTtcbnJlcXVpcmUoJy4vZ2V0R2xvYmFsUG9zaXRpb24nKTtcblxuLyoqXG4gKiBAbmFtZXNwYWNlIFBJWEkuZXh0cmFzXG4gKi9cbm1vZHVsZS5leHBvcnRzID0ge1xuICAgIE1vdmllQ2xpcDogICAgICByZXF1aXJlKCcuL01vdmllQ2xpcCcpLFxuICAgIFRpbGluZ1Nwcml0ZTogICByZXF1aXJlKCcuL1RpbGluZ1Nwcml0ZScpLFxuICAgIEJpdG1hcFRleHQ6ICAgICByZXF1aXJlKCcuL0JpdG1hcFRleHQnKVxufTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vLi4vY29yZScpO1xuLy8gQHNlZSBodHRwczovL2dpdGh1Yi5jb20vc3Vic3RhY2svYnJmcy9pc3N1ZXMvMjVcblxuXG4vLyBUT0RPIChjZW5nbGVyKSAtIFRoZSBZIGlzIGZsaXBwZWQgaW4gdGhpcyBzaGFkZXIgZm9yIHNvbWUgcmVhc29uLlxuXG4vKipcbiAqIEBhdXRob3IgVmljbyBAdmljb2NvdGVhXG4gKiBvcmlnaW5hbCBzaGFkZXIgOiBodHRwczovL3d3dy5zaGFkZXJ0b3kuY29tL3ZpZXcvbHNzR0RqIGJ5IEBtb3ZBWDEzaFxuICovXG5cbi8qKlxuICogQW4gQVNDSUkgZmlsdGVyLlxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5BYnN0cmFjdEZpbHRlclxuICogQG1lbWJlcm9mIFBJWEkuZmlsdGVyc1xuICovXG5mdW5jdGlvbiBBc2NpaUZpbHRlcigpXG57XG4gICAgY29yZS5BYnN0cmFjdEZpbHRlci5jYWxsKHRoaXMsXG4gICAgICAgIC8vIHZlcnRleCBzaGFkZXJcbiAgICAgICAgbnVsbCxcbiAgICAgICAgLy8gZnJhZ21lbnQgc2hhZGVyXG4gICAgICAgIFwicHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XFxuXFxudW5pZm9ybSB2ZWM0IGRpbWVuc2lvbnM7XFxudW5pZm9ybSBmbG9hdCBwaXhlbFNpemU7XFxudW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXI7XFxuXFxuZmxvYXQgY2hhcmFjdGVyKGZsb2F0IG4sIHZlYzIgcClcXG57XFxuICAgIHAgPSBmbG9vcihwKnZlYzIoNC4wLCAtNC4wKSArIDIuNSk7XFxuICAgIGlmIChjbGFtcChwLngsIDAuMCwgNC4wKSA9PSBwLnggJiYgY2xhbXAocC55LCAwLjAsIDQuMCkgPT0gcC55KVxcbiAgICB7XFxuICAgICAgICBpZiAoaW50KG1vZChuL2V4cDIocC54ICsgNS4wKnAueSksIDIuMCkpID09IDEpIHJldHVybiAxLjA7XFxuICAgIH1cXG4gICAgcmV0dXJuIDAuMDtcXG59XFxuXFxudm9pZCBtYWluKClcXG57XFxuICAgIHZlYzIgdXYgPSBnbF9GcmFnQ29vcmQueHk7XFxuXFxuICAgIHZlYzMgY29sID0gdGV4dHVyZTJEKHVTYW1wbGVyLCBmbG9vciggdXYgLyBwaXhlbFNpemUgKSAqIHBpeGVsU2l6ZSAvIGRpbWVuc2lvbnMueHkpLnJnYjtcXG5cXG4gICAgZmxvYXQgZ3JheSA9IChjb2wuciArIGNvbC5nICsgY29sLmIpIC8gMy4wO1xcblxcbiAgICBmbG9hdCBuID0gIDY1NTM2LjA7ICAgICAgICAgICAgIC8vIC5cXG4gICAgaWYgKGdyYXkgPiAwLjIpIG4gPSA2NTYwMC4wOyAgICAvLyA6XFxuICAgIGlmIChncmF5ID4gMC4zKSBuID0gMzMyNzcyLjA7ICAgLy8gKlxcbiAgICBpZiAoZ3JheSA+IDAuNCkgbiA9IDE1MjU1MDg2LjA7IC8vIG9cXG4gICAgaWYgKGdyYXkgPiAwLjUpIG4gPSAyMzM4NTE2NC4wOyAvLyAmXFxuICAgIGlmIChncmF5ID4gMC42KSBuID0gMTUyNTIwMTQuMDsgLy8gOFxcbiAgICBpZiAoZ3JheSA+IDAuNykgbiA9IDEzMTk5NDUyLjA7IC8vIEBcXG4gICAgaWYgKGdyYXkgPiAwLjgpIG4gPSAxMTUxMjgxMC4wOyAvLyAjXFxuXFxuICAgIHZlYzIgcCA9IG1vZCggdXYgLyAoIHBpeGVsU2l6ZSAqIDAuNSApLCAyLjApIC0gdmVjMigxLjApO1xcbiAgICBjb2wgPSBjb2wgKiBjaGFyYWN0ZXIobiwgcCk7XFxuXFxuICAgIGdsX0ZyYWdDb2xvciA9IHZlYzQoY29sLCAxLjApO1xcbn1cXG5cIixcbiAgICAgICAgLy8gY3VzdG9tIHVuaWZvcm1zXG4gICAgICAgIHtcbiAgICAgICAgICAgIGRpbWVuc2lvbnM6IHsgdHlwZTogJzRmdicsIHZhbHVlOiBuZXcgRmxvYXQzMkFycmF5KFswLCAwLCAwLCAwXSkgfSxcbiAgICAgICAgICAgIHBpeGVsU2l6ZTogIHsgdHlwZTogJzFmJywgdmFsdWU6IDggfVxuICAgICAgICB9XG4gICAgKTtcbn1cblxuQXNjaWlGaWx0ZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShjb3JlLkFic3RyYWN0RmlsdGVyLnByb3RvdHlwZSk7XG5Bc2NpaUZpbHRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBBc2NpaUZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gQXNjaWlGaWx0ZXI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKEFzY2lpRmlsdGVyLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFRoZSBwaXhlbCBzaXplIHVzZWQgYnkgdGhlIGZpbHRlci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLkFzY2lpRmlsdGVyI1xuICAgICAqL1xuICAgIHNpemU6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy51bmlmb3Jtcy5waXhlbFNpemUudmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLnBpeGVsU2l6ZS52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfVxufSk7XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uLy4uL2NvcmUnKSxcbiAgICBCbHVyWEZpbHRlciA9IHJlcXVpcmUoJy4uL2JsdXIvQmx1clhGaWx0ZXInKSxcbiAgICBCbHVyWUZpbHRlciA9IHJlcXVpcmUoJy4uL2JsdXIvQmx1cllGaWx0ZXInKTtcblxuLyoqXG4gKiBUaGUgQmxvb21GaWx0ZXIgYXBwbGllcyBhIEdhdXNzaWFuIGJsdXIgdG8gYW4gb2JqZWN0LlxuICogVGhlIHN0cmVuZ3RoIG9mIHRoZSBibHVyIGNhbiBiZSBzZXQgZm9yIHgtIGFuZCB5LWF4aXMgc2VwYXJhdGVseS5cbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQWJzdHJhY3RGaWx0ZXJcbiAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnNcbiAqL1xuZnVuY3Rpb24gQmxvb21GaWx0ZXIoKVxue1xuICAgIGNvcmUuQWJzdHJhY3RGaWx0ZXIuY2FsbCh0aGlzKTtcblxuICAgIHRoaXMuYmx1clhGaWx0ZXIgPSBuZXcgQmx1clhGaWx0ZXIoKTtcbiAgICB0aGlzLmJsdXJZRmlsdGVyID0gbmV3IEJsdXJZRmlsdGVyKCk7XG5cbiAgICB0aGlzLmRlZmF1bHRGaWx0ZXIgPSBuZXcgY29yZS5BYnN0cmFjdEZpbHRlcigpO1xufVxuXG5CbG9vbUZpbHRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuQWJzdHJhY3RGaWx0ZXIucHJvdG90eXBlKTtcbkJsb29tRmlsdGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IEJsb29tRmlsdGVyO1xubW9kdWxlLmV4cG9ydHMgPSBCbG9vbUZpbHRlcjtcblxuQmxvb21GaWx0ZXIucHJvdG90eXBlLmFwcGx5RmlsdGVyID0gZnVuY3Rpb24gKHJlbmRlcmVyLCBpbnB1dCwgb3V0cHV0KVxue1xuICAgIHZhciByZW5kZXJUYXJnZXQgPSByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLmdldFJlbmRlclRhcmdldCh0cnVlKTtcblxuICAgIC8vVE9ETyAtIGNvcHlUZXhTdWJJbWFnZTJEIGNvdWxkIGJlIHVzZWQgaGVyZT9cbiAgICB0aGlzLmRlZmF1bHRGaWx0ZXIuYXBwbHlGaWx0ZXIocmVuZGVyZXIsIGlucHV0LCBvdXRwdXQpO1xuXG4gICAgdGhpcy5ibHVyWEZpbHRlci5hcHBseUZpbHRlcihyZW5kZXJlciwgaW5wdXQsIHJlbmRlclRhcmdldCk7XG5cbiAgICByZW5kZXJlci5ibGVuZE1vZGVNYW5hZ2VyLnNldEJsZW5kTW9kZShjb3JlLkJMRU5EX01PREVTLlNDUkVFTik7XG5cbiAgICB0aGlzLmJsdXJZRmlsdGVyLmFwcGx5RmlsdGVyKHJlbmRlcmVyLCByZW5kZXJUYXJnZXQsIG91dHB1dCk7XG5cbiAgICByZW5kZXJlci5ibGVuZE1vZGVNYW5hZ2VyLnNldEJsZW5kTW9kZShjb3JlLkJMRU5EX01PREVTLk5PUk1BTCk7XG5cbiAgICByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLnJldHVyblJlbmRlclRhcmdldChyZW5kZXJUYXJnZXQpO1xufTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoQmxvb21GaWx0ZXIucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgc3RyZW5ndGggb2YgYm90aCB0aGUgYmx1clggYW5kIGJsdXJZIHByb3BlcnRpZXMgc2ltdWx0YW5lb3VzbHlcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyT2YgUElYSS5maWx0ZXJzLkJsb29tRmlsdGVyI1xuICAgICAqIEBkZWZhdWx0IDJcbiAgICAgKi9cbiAgICBibHVyOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuYmx1clhGaWx0ZXIuYmx1cjtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuYmx1clhGaWx0ZXIuYmx1ciA9IHRoaXMuYmx1cllGaWx0ZXIuYmx1ciA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIHN0cmVuZ3RoIG9mIHRoZSBibHVyWCBwcm9wZXJ0eVxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJPZiBQSVhJLmZpbHRlcnMuQmxvb21GaWx0ZXIjXG4gICAgICogQGRlZmF1bHQgMlxuICAgICAqL1xuICAgIGJsdXJYOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuYmx1clhGaWx0ZXIuYmx1cjtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuYmx1clhGaWx0ZXIuYmx1ciA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIHN0cmVuZ3RoIG9mIHRoZSBibHVyWSBwcm9wZXJ0eVxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJPZiBQSVhJLmZpbHRlcnMuQmxvb21GaWx0ZXIjXG4gICAgICogQGRlZmF1bHQgMlxuICAgICAqL1xuICAgIGJsdXJZOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuYmx1cllGaWx0ZXIuYmx1cjtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuYmx1cllGaWx0ZXIuYmx1ciA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfVxufSk7XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uLy4uL2NvcmUnKTtcblxuXG4vKipcbiAqIFRoZSBCbHVyRGlyRmlsdGVyIGFwcGxpZXMgYSBHYXVzc2lhbiBibHVyIHRvd2FyZCBhIGRpcmVjdGlvbiB0byBhbiBvYmplY3QuXG4gKlxuICogQGNsYXNzXG4gKiBAcGFyYW0ge251bWJlcn0gZGlyWFxuICogQHBhcmFtIHtudW1iZXJ9IGRpcllcbiAqIEBleHRlbmRzIFBJWEkuQWJzdHJhY3RGaWx0ZXJcbiAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnNcbiAqL1xuZnVuY3Rpb24gQmx1ckRpckZpbHRlcihkaXJYLCBkaXJZKVxue1xuICAgIGNvcmUuQWJzdHJhY3RGaWx0ZXIuY2FsbCh0aGlzLFxuICAgICAgICAvLyB2ZXJ0ZXggc2hhZGVyXG4gICAgICAgIFwiYXR0cmlidXRlIHZlYzIgYVZlcnRleFBvc2l0aW9uO1xcbmF0dHJpYnV0ZSB2ZWMyIGFUZXh0dXJlQ29vcmQ7XFxuYXR0cmlidXRlIHZlYzQgYUNvbG9yO1xcblxcbnVuaWZvcm0gZmxvYXQgc3RyZW5ndGg7XFxudW5pZm9ybSBmbG9hdCBkaXJYO1xcbnVuaWZvcm0gZmxvYXQgZGlyWTtcXG51bmlmb3JtIG1hdDMgcHJvamVjdGlvbk1hdHJpeDtcXG5cXG52YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDtcXG52YXJ5aW5nIHZlYzQgdkNvbG9yO1xcbnZhcnlpbmcgdmVjMiB2Qmx1clRleENvb3Jkc1szXTtcXG5cXG52b2lkIG1haW4odm9pZClcXG57XFxuICAgIGdsX1Bvc2l0aW9uID0gdmVjNCgocHJvamVjdGlvbk1hdHJpeCAqIHZlYzMoKGFWZXJ0ZXhQb3NpdGlvbiksIDEuMCkpLnh5LCAwLjAsIDEuMCk7XFxuICAgIHZUZXh0dXJlQ29vcmQgPSBhVGV4dHVyZUNvb3JkO1xcblxcbiAgICB2Qmx1clRleENvb3Jkc1swXSA9IGFUZXh0dXJlQ29vcmQgKyB2ZWMyKCAoMC4wMDQgKiBzdHJlbmd0aCkgKiBkaXJYLCAoMC4wMDQgKiBzdHJlbmd0aCkgKiBkaXJZICk7XFxuICAgIHZCbHVyVGV4Q29vcmRzWzFdID0gYVRleHR1cmVDb29yZCArIHZlYzIoICgwLjAwOCAqIHN0cmVuZ3RoKSAqIGRpclgsICgwLjAwOCAqIHN0cmVuZ3RoKSAqIGRpclkgKTtcXG4gICAgdkJsdXJUZXhDb29yZHNbMl0gPSBhVGV4dHVyZUNvb3JkICsgdmVjMiggKDAuMDEyICogc3RyZW5ndGgpICogZGlyWCwgKDAuMDEyICogc3RyZW5ndGgpICogZGlyWSApO1xcblxcbiAgICB2Q29sb3IgPSB2ZWM0KGFDb2xvci5yZ2IgKiBhQ29sb3IuYSwgYUNvbG9yLmEpO1xcbn1cXG5cIixcbiAgICAgICAgLy8gZnJhZ21lbnQgc2hhZGVyXG4gICAgICAgIFwicHJlY2lzaW9uIGxvd3AgZmxvYXQ7XFxuXFxudmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7XFxudmFyeWluZyB2ZWMyIHZCbHVyVGV4Q29vcmRzWzNdO1xcbnZhcnlpbmcgdmVjNCB2Q29sb3I7XFxuXFxudW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXI7XFxuXFxudm9pZCBtYWluKHZvaWQpXFxue1xcbiAgICBnbF9GcmFnQ29sb3IgPSB2ZWM0KDAuMCk7XFxuXFxuICAgIGdsX0ZyYWdDb2xvciArPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZUZXh0dXJlQ29vcmQgICAgICkgKiAwLjM5ODk0MjI4MDQwMTQzMjc7XFxuICAgIGdsX0ZyYWdDb2xvciArPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZCbHVyVGV4Q29vcmRzWyAwXSkgKiAwLjI0MTk3MDcyNDUxOTE0NTQ7XFxuICAgIGdsX0ZyYWdDb2xvciArPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZCbHVyVGV4Q29vcmRzWyAxXSkgKiAwLjA1Mzk5MDk2NjUxMzE4OTg1O1xcbiAgICBnbF9GcmFnQ29sb3IgKz0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2Qmx1clRleENvb3Jkc1sgMl0pICogMC4wMDQ0MzE4NDg0MTE5MzgzNDE7XFxufVxcblwiLFxuICAgICAgICAvLyBzZXQgdGhlIHVuaWZvcm1zXG4gICAgICAgIHtcbiAgICAgICAgICAgIHN0cmVuZ3RoOiB7IHR5cGU6ICcxZicsIHZhbHVlOiAxIH0sXG4gICAgICAgICAgICBkaXJYOiB7IHR5cGU6ICcxZicsIHZhbHVlOiBkaXJYIHx8IDAgfSxcbiAgICAgICAgICAgIGRpclk6IHsgdHlwZTogJzFmJywgdmFsdWU6IGRpclkgfHwgMCB9XG4gICAgICAgIH1cbiAgICApO1xuXG4gICAgdGhpcy5kZWZhdWx0RmlsdGVyID0gbmV3IGNvcmUuQWJzdHJhY3RGaWx0ZXIoKTtcblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIG51bWJlciBvZiBwYXNzZXMgZm9yIGJsdXIuIE1vcmUgcGFzc2VzIG1lYW5zIGhpZ2hlciBxdWFpbGl0eSBibHVyaW5nLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDFcbiAgICAgKi9cbiAgICB0aGlzLnBhc3NlcyA9IDE7XG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBYIGRpcmVjdGlvbiBvZiB0aGUgYmx1clxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDBcbiAgICAgKi9cbiAgICB0aGlzLmRpclggPSBkaXJYIHx8IDA7XG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBZIGRpcmVjdGlvbiBvZiB0aGUgYmx1clxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDBcbiAgICAgKi9cbiAgICB0aGlzLmRpclkgPSBkaXJZIHx8IDA7XG5cbiAgICB0aGlzLnN0cmVuZ3RoID0gNDtcbn1cblxuQmx1ckRpckZpbHRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuQWJzdHJhY3RGaWx0ZXIucHJvdG90eXBlKTtcbkJsdXJEaXJGaWx0ZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gQmx1ckRpckZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gQmx1ckRpckZpbHRlcjtcblxuQmx1ckRpckZpbHRlci5wcm90b3R5cGUuYXBwbHlGaWx0ZXIgPSBmdW5jdGlvbiAocmVuZGVyZXIsIGlucHV0LCBvdXRwdXQsIGNsZWFyKSB7XG5cbiAgICB2YXIgc2hhZGVyID0gdGhpcy5nZXRTaGFkZXIocmVuZGVyZXIpO1xuXG4gICAgdGhpcy51bmlmb3Jtcy5zdHJlbmd0aC52YWx1ZSA9IHRoaXMuc3RyZW5ndGggLyA0IC8gdGhpcy5wYXNzZXMgKiAoaW5wdXQuZnJhbWUud2lkdGggLyBpbnB1dC5zaXplLndpZHRoKTtcblxuICAgIGlmICh0aGlzLnBhc3NlcyA9PT0gMSkge1xuICAgICAgICByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLmFwcGx5RmlsdGVyKHNoYWRlciwgaW5wdXQsIG91dHB1dCwgY2xlYXIpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHZhciByZW5kZXJUYXJnZXQgPSByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLmdldFJlbmRlclRhcmdldCh0cnVlKTtcblxuICAgICAgICByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLmFwcGx5RmlsdGVyKHNoYWRlciwgaW5wdXQsIHJlbmRlclRhcmdldCwgY2xlYXIpO1xuXG4gICAgICAgIGZvcih2YXIgaSA9IDA7IGkgPCB0aGlzLnBhc3Nlcy0yOyBpKyspXG4gICAgICAgIHtcbiAgICAgICAgICAgIC8vdGhpcy51bmlmb3Jtcy5zdHJlbmd0aC52YWx1ZSA9IHRoaXMuc3RyZW5ndGggLyA0IC8gKHRoaXMucGFzc2VzKyhpKjIpKSAqIChpbnB1dC5mcmFtZS53aWR0aCAvIGlucHV0LnNpemUud2lkdGgpO1xuICAgICAgICAgICAgcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5hcHBseUZpbHRlcihzaGFkZXIsIHJlbmRlclRhcmdldCwgcmVuZGVyVGFyZ2V0LCBjbGVhcik7XG4gICAgICAgIH1cblxuICAgICAgICByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLmFwcGx5RmlsdGVyKHNoYWRlciwgcmVuZGVyVGFyZ2V0LCBvdXRwdXQsIGNsZWFyKTtcblxuICAgICAgICByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLnJldHVyblJlbmRlclRhcmdldChyZW5kZXJUYXJnZXQpO1xuICAgIH1cbn07XG5cblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoQmx1ckRpckZpbHRlci5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBzdHJlbmd0aCBvZiBib3RoIHRoZSBibHVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuQmx1ckRpckZpbHRlciNcbiAgICAgKiBAZGVmYXVsdCAyXG4gICAgICovXG4gICAgYmx1cjoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnN0cmVuZ3RoO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5wYWRkaW5nID0gdmFsdWUgKiAwLjU7XG4gICAgICAgICAgICB0aGlzLnN0cmVuZ3RoID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9LFxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIFggZGlyZWN0aW9uIG9mIHRoZSBibHVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuQmx1cllGaWx0ZXIjXG4gICAgICogQGRlZmF1bHQgMFxuICAgICAqL1xuICAgIGRpclg6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5kaXJYO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy5kaXJYLnZhbHVlID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9LFxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIFkgZGlyZWN0aW9uIG9mIHRoZSBibHVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuQmx1ckRpckZpbHRlciNcbiAgICAgKiBAZGVmYXVsdCAwXG4gICAgICovXG4gICAgZGlyWToge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmRpclk7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLmRpclkudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi8uLi9jb3JlJyksXG4gICAgQmx1clhGaWx0ZXIgPSByZXF1aXJlKCcuL0JsdXJYRmlsdGVyJyksXG4gICAgQmx1cllGaWx0ZXIgPSByZXF1aXJlKCcuL0JsdXJZRmlsdGVyJyk7XG5cbi8qKlxuICogVGhlIEJsdXJGaWx0ZXIgYXBwbGllcyBhIEdhdXNzaWFuIGJsdXIgdG8gYW4gb2JqZWN0LlxuICogVGhlIHN0cmVuZ3RoIG9mIHRoZSBibHVyIGNhbiBiZSBzZXQgZm9yIHgtIGFuZCB5LWF4aXMgc2VwYXJhdGVseS5cbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQWJzdHJhY3RGaWx0ZXJcbiAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnNcbiAqL1xuZnVuY3Rpb24gQmx1ckZpbHRlcigpXG57XG4gICAgY29yZS5BYnN0cmFjdEZpbHRlci5jYWxsKHRoaXMpO1xuXG4gICAgdGhpcy5ibHVyWEZpbHRlciA9IG5ldyBCbHVyWEZpbHRlcigpO1xuICAgIHRoaXMuYmx1cllGaWx0ZXIgPSBuZXcgQmx1cllGaWx0ZXIoKTtcbn1cblxuQmx1ckZpbHRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuQWJzdHJhY3RGaWx0ZXIucHJvdG90eXBlKTtcbkJsdXJGaWx0ZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gQmx1ckZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gQmx1ckZpbHRlcjtcblxuQmx1ckZpbHRlci5wcm90b3R5cGUuYXBwbHlGaWx0ZXIgPSBmdW5jdGlvbiAocmVuZGVyZXIsIGlucHV0LCBvdXRwdXQpXG57XG4gICAgdmFyIHJlbmRlclRhcmdldCA9IHJlbmRlcmVyLmZpbHRlck1hbmFnZXIuZ2V0UmVuZGVyVGFyZ2V0KHRydWUpO1xuXG4gICAgdGhpcy5ibHVyWEZpbHRlci5hcHBseUZpbHRlcihyZW5kZXJlciwgaW5wdXQsIHJlbmRlclRhcmdldCk7XG4gICAgdGhpcy5ibHVyWUZpbHRlci5hcHBseUZpbHRlcihyZW5kZXJlciwgcmVuZGVyVGFyZ2V0LCBvdXRwdXQpO1xuXG4gICAgcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5yZXR1cm5SZW5kZXJUYXJnZXQocmVuZGVyVGFyZ2V0KTtcbn07XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKEJsdXJGaWx0ZXIucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgc3RyZW5ndGggb2YgYm90aCB0aGUgYmx1clggYW5kIGJsdXJZIHByb3BlcnRpZXMgc2ltdWx0YW5lb3VzbHlcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyT2YgUElYSS5maWx0ZXJzLkJsdXJGaWx0ZXIjXG4gICAgICogQGRlZmF1bHQgMlxuICAgICAqL1xuICAgIGJsdXI6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5ibHVyWEZpbHRlci5ibHVyO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5wYWRkaW5nID0gTWF0aC5hYnModmFsdWUpICogMC41O1xuICAgICAgICAgICAgdGhpcy5ibHVyWEZpbHRlci5ibHVyID0gdGhpcy5ibHVyWUZpbHRlci5ibHVyID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgbnVtYmVyIG9mIHBhc3NlcyBmb3IgYmx1ci4gTW9yZSBwYXNzZXMgbWVhbnMgaGlnaGVyIHF1YWlsaXR5IGJsdXJpbmcuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5CbHVyWUZpbHRlciNcbiAgICAgKiBAZGVmYXVsdCAxXG4gICAgICovXG4gICAgcGFzc2VzOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuICB0aGlzLmJsdXJYRmlsdGVyLnBhc3NlcztcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuYmx1clhGaWx0ZXIucGFzc2VzID0gdGhpcy5ibHVyWUZpbHRlci5wYXNzZXMgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBzdHJlbmd0aCBvZiB0aGUgYmx1clggcHJvcGVydHlcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyT2YgUElYSS5maWx0ZXJzLkJsdXJGaWx0ZXIjXG4gICAgICogQGRlZmF1bHQgMlxuICAgICAqL1xuICAgIGJsdXJYOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuYmx1clhGaWx0ZXIuYmx1cjtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuYmx1clhGaWx0ZXIuYmx1ciA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIHN0cmVuZ3RoIG9mIHRoZSBibHVyWSBwcm9wZXJ0eVxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJPZiBQSVhJLmZpbHRlcnMuQmx1ckZpbHRlciNcbiAgICAgKiBAZGVmYXVsdCAyXG4gICAgICovXG4gICAgYmx1clk6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5ibHVyWUZpbHRlci5ibHVyO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5ibHVyWUZpbHRlci5ibHVyID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG59KTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vLi4vY29yZScpO1xuLy8gQHNlZSBodHRwczovL2dpdGh1Yi5jb20vc3Vic3RhY2svYnJmcy9pc3N1ZXMvMjVcblxuXG4vKipcbiAqIFRoZSBCbHVyWEZpbHRlciBhcHBsaWVzIGEgaG9yaXpvbnRhbCBHYXVzc2lhbiBibHVyIHRvIGFuIG9iamVjdC5cbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQWJzdHJhY3RGaWx0ZXJcbiAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnNcbiAqL1xuZnVuY3Rpb24gQmx1clhGaWx0ZXIoKVxue1xuICAgIGNvcmUuQWJzdHJhY3RGaWx0ZXIuY2FsbCh0aGlzLFxuICAgICAgICAvLyB2ZXJ0ZXggc2hhZGVyXG4gICAgICAgIFwiYXR0cmlidXRlIHZlYzIgYVZlcnRleFBvc2l0aW9uO1xcbmF0dHJpYnV0ZSB2ZWMyIGFUZXh0dXJlQ29vcmQ7XFxuYXR0cmlidXRlIHZlYzQgYUNvbG9yO1xcblxcbnVuaWZvcm0gZmxvYXQgc3RyZW5ndGg7XFxudW5pZm9ybSBtYXQzIHByb2plY3Rpb25NYXRyaXg7XFxuXFxudmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7XFxudmFyeWluZyB2ZWM0IHZDb2xvcjtcXG52YXJ5aW5nIHZlYzIgdkJsdXJUZXhDb29yZHNbNl07XFxuXFxudm9pZCBtYWluKHZvaWQpXFxue1xcbiAgICBnbF9Qb3NpdGlvbiA9IHZlYzQoKHByb2plY3Rpb25NYXRyaXggKiB2ZWMzKChhVmVydGV4UG9zaXRpb24pLCAxLjApKS54eSwgMC4wLCAxLjApO1xcbiAgICB2VGV4dHVyZUNvb3JkID0gYVRleHR1cmVDb29yZDtcXG5cXG4gICAgdkJsdXJUZXhDb29yZHNbIDBdID0gYVRleHR1cmVDb29yZCArIHZlYzIoLTAuMDEyICogc3RyZW5ndGgsIDAuMCk7XFxuICAgIHZCbHVyVGV4Q29vcmRzWyAxXSA9IGFUZXh0dXJlQ29vcmQgKyB2ZWMyKC0wLjAwOCAqIHN0cmVuZ3RoLCAwLjApO1xcbiAgICB2Qmx1clRleENvb3Jkc1sgMl0gPSBhVGV4dHVyZUNvb3JkICsgdmVjMigtMC4wMDQgKiBzdHJlbmd0aCwgMC4wKTtcXG4gICAgdkJsdXJUZXhDb29yZHNbIDNdID0gYVRleHR1cmVDb29yZCArIHZlYzIoIDAuMDA0ICogc3RyZW5ndGgsIDAuMCk7XFxuICAgIHZCbHVyVGV4Q29vcmRzWyA0XSA9IGFUZXh0dXJlQ29vcmQgKyB2ZWMyKCAwLjAwOCAqIHN0cmVuZ3RoLCAwLjApO1xcbiAgICB2Qmx1clRleENvb3Jkc1sgNV0gPSBhVGV4dHVyZUNvb3JkICsgdmVjMiggMC4wMTIgKiBzdHJlbmd0aCwgMC4wKTtcXG5cXG4gICAgdkNvbG9yID0gdmVjNChhQ29sb3IucmdiICogYUNvbG9yLmEsIGFDb2xvci5hKTtcXG59XFxuXCIsXG4gICAgICAgIC8vIGZyYWdtZW50IHNoYWRlclxuICAgICAgICBcInByZWNpc2lvbiBsb3dwIGZsb2F0O1xcblxcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xcbnZhcnlpbmcgdmVjMiB2Qmx1clRleENvb3Jkc1s2XTtcXG52YXJ5aW5nIHZlYzQgdkNvbG9yO1xcblxcbnVuaWZvcm0gc2FtcGxlcjJEIHVTYW1wbGVyO1xcblxcbnZvaWQgbWFpbih2b2lkKVxcbntcXG4gICAgZ2xfRnJhZ0NvbG9yID0gdmVjNCgwLjApO1xcblxcbiAgICBnbF9GcmFnQ29sb3IgKz0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2Qmx1clRleENvb3Jkc1sgMF0pKjAuMDA0NDMxODQ4NDExOTM4MzQxO1xcbiAgICBnbF9GcmFnQ29sb3IgKz0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2Qmx1clRleENvb3Jkc1sgMV0pKjAuMDUzOTkwOTY2NTEzMTg5ODU7XFxuICAgIGdsX0ZyYWdDb2xvciArPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZCbHVyVGV4Q29vcmRzWyAyXSkqMC4yNDE5NzA3MjQ1MTkxNDU0O1xcbiAgICBnbF9GcmFnQ29sb3IgKz0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2VGV4dHVyZUNvb3JkICAgICApKjAuMzk4OTQyMjgwNDAxNDMyNztcXG4gICAgZ2xfRnJhZ0NvbG9yICs9IHRleHR1cmUyRCh1U2FtcGxlciwgdkJsdXJUZXhDb29yZHNbIDNdKSowLjI0MTk3MDcyNDUxOTE0NTQ7XFxuICAgIGdsX0ZyYWdDb2xvciArPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZCbHVyVGV4Q29vcmRzWyA0XSkqMC4wNTM5OTA5NjY1MTMxODk4NTtcXG4gICAgZ2xfRnJhZ0NvbG9yICs9IHRleHR1cmUyRCh1U2FtcGxlciwgdkJsdXJUZXhDb29yZHNbIDVdKSowLjAwNDQzMTg0ODQxMTkzODM0MTtcXG59XFxuXCIsXG4gICAgICAgIC8vIHNldCB0aGUgdW5pZm9ybXNcbiAgICAgICAge1xuICAgICAgICAgICAgc3RyZW5ndGg6IHsgdHlwZTogJzFmJywgdmFsdWU6IDEgfVxuICAgICAgICB9XG4gICAgKTtcblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIG51bWJlciBvZiBwYXNzZXMgZm9yIGJsdXIuIE1vcmUgcGFzc2VzIG1lYW5zIGhpZ2hlciBxdWFpbGl0eSBibHVyaW5nLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDFcbiAgICAgKi9cbiAgICB0aGlzLnBhc3NlcyA9IDE7XG5cbiAgICB0aGlzLnN0cmVuZ3RoID0gNDtcbn1cblxuQmx1clhGaWx0ZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShjb3JlLkFic3RyYWN0RmlsdGVyLnByb3RvdHlwZSk7XG5CbHVyWEZpbHRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBCbHVyWEZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gQmx1clhGaWx0ZXI7XG5cbkJsdXJYRmlsdGVyLnByb3RvdHlwZS5hcHBseUZpbHRlciA9IGZ1bmN0aW9uIChyZW5kZXJlciwgaW5wdXQsIG91dHB1dCwgY2xlYXIpXG57XG4gICAgdmFyIHNoYWRlciA9IHRoaXMuZ2V0U2hhZGVyKHJlbmRlcmVyKTtcblxuICAgIHRoaXMudW5pZm9ybXMuc3RyZW5ndGgudmFsdWUgPSB0aGlzLnN0cmVuZ3RoIC8gNCAvIHRoaXMucGFzc2VzICogKGlucHV0LmZyYW1lLndpZHRoIC8gaW5wdXQuc2l6ZS53aWR0aCk7XG5cbiAgICBpZih0aGlzLnBhc3NlcyA9PT0gMSlcbiAgICB7XG4gICAgICAgIHJlbmRlcmVyLmZpbHRlck1hbmFnZXIuYXBwbHlGaWx0ZXIoc2hhZGVyLCBpbnB1dCwgb3V0cHV0LCBjbGVhcik7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHZhciByZW5kZXJUYXJnZXQgPSByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLmdldFJlbmRlclRhcmdldCh0cnVlKTtcbiAgICAgICAgdmFyIGZsaXAgPSBpbnB1dDtcbiAgICAgICAgdmFyIGZsb3AgPSByZW5kZXJUYXJnZXQ7XG5cbiAgICAgICAgZm9yKHZhciBpID0gMDsgaSA8IHRoaXMucGFzc2VzLTE7IGkrKylcbiAgICAgICAge1xuICAgICAgICAgICAgcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5hcHBseUZpbHRlcihzaGFkZXIsIGZsaXAsIGZsb3AsIHRydWUpO1xuXG4gICAgICAgICAgIHZhciB0ZW1wID0gZmxvcDtcbiAgICAgICAgICAgZmxvcCA9IGZsaXA7XG4gICAgICAgICAgIGZsaXAgPSB0ZW1wO1xuICAgICAgICB9XG5cbiAgICAgICAgcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5hcHBseUZpbHRlcihzaGFkZXIsIGZsaXAsIG91dHB1dCwgY2xlYXIpO1xuXG4gICAgICAgIHJlbmRlcmVyLmZpbHRlck1hbmFnZXIucmV0dXJuUmVuZGVyVGFyZ2V0KHJlbmRlclRhcmdldCk7XG4gICAgfVxufTtcblxuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhCbHVyWEZpbHRlci5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBzdHJlbmd0aCBvZiBib3RoIHRoZSBibHVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuQmx1clhGaWx0ZXIjXG4gICAgICogQGRlZmF1bHQgMlxuICAgICAqL1xuICAgIGJsdXI6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gIHRoaXMuc3RyZW5ndGg7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnBhZGRpbmcgPSAgTWF0aC5hYnModmFsdWUpICogMC41O1xuICAgICAgICAgICAgdGhpcy5zdHJlbmd0aCA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfVxufSk7XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uLy4uL2NvcmUnKTtcbi8vIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL3N1YnN0YWNrL2JyZnMvaXNzdWVzLzI1XG5cblxuLyoqXG4gKiBUaGUgQmx1cllGaWx0ZXIgYXBwbGllcyBhIGhvcml6b250YWwgR2F1c3NpYW4gYmx1ciB0byBhbiBvYmplY3QuXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLkFic3RyYWN0RmlsdGVyXG4gKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzXG4gKi9cbmZ1bmN0aW9uIEJsdXJZRmlsdGVyKClcbntcbiAgICBjb3JlLkFic3RyYWN0RmlsdGVyLmNhbGwodGhpcyxcbiAgICAgICAgLy8gdmVydGV4IHNoYWRlclxuICAgICAgICBcImF0dHJpYnV0ZSB2ZWMyIGFWZXJ0ZXhQb3NpdGlvbjtcXG5hdHRyaWJ1dGUgdmVjMiBhVGV4dHVyZUNvb3JkO1xcbmF0dHJpYnV0ZSB2ZWM0IGFDb2xvcjtcXG5cXG51bmlmb3JtIGZsb2F0IHN0cmVuZ3RoO1xcbnVuaWZvcm0gbWF0MyBwcm9qZWN0aW9uTWF0cml4O1xcblxcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xcbnZhcnlpbmcgdmVjNCB2Q29sb3I7XFxudmFyeWluZyB2ZWMyIHZCbHVyVGV4Q29vcmRzWzZdO1xcblxcbnZvaWQgbWFpbih2b2lkKVxcbntcXG4gICAgZ2xfUG9zaXRpb24gPSB2ZWM0KChwcm9qZWN0aW9uTWF0cml4ICogdmVjMygoYVZlcnRleFBvc2l0aW9uKSwgMS4wKSkueHksIDAuMCwgMS4wKTtcXG4gICAgdlRleHR1cmVDb29yZCA9IGFUZXh0dXJlQ29vcmQ7XFxuXFxuICAgIHZCbHVyVGV4Q29vcmRzWyAwXSA9IGFUZXh0dXJlQ29vcmQgKyB2ZWMyKDAuMCwgLTAuMDEyICogc3RyZW5ndGgpO1xcbiAgICB2Qmx1clRleENvb3Jkc1sgMV0gPSBhVGV4dHVyZUNvb3JkICsgdmVjMigwLjAsIC0wLjAwOCAqIHN0cmVuZ3RoKTtcXG4gICAgdkJsdXJUZXhDb29yZHNbIDJdID0gYVRleHR1cmVDb29yZCArIHZlYzIoMC4wLCAtMC4wMDQgKiBzdHJlbmd0aCk7XFxuICAgIHZCbHVyVGV4Q29vcmRzWyAzXSA9IGFUZXh0dXJlQ29vcmQgKyB2ZWMyKDAuMCwgIDAuMDA0ICogc3RyZW5ndGgpO1xcbiAgICB2Qmx1clRleENvb3Jkc1sgNF0gPSBhVGV4dHVyZUNvb3JkICsgdmVjMigwLjAsICAwLjAwOCAqIHN0cmVuZ3RoKTtcXG4gICAgdkJsdXJUZXhDb29yZHNbIDVdID0gYVRleHR1cmVDb29yZCArIHZlYzIoMC4wLCAgMC4wMTIgKiBzdHJlbmd0aCk7XFxuXFxuICAgdkNvbG9yID0gdmVjNChhQ29sb3IucmdiICogYUNvbG9yLmEsIGFDb2xvci5hKTtcXG59XFxuXCIsXG4gICAgICAgIC8vIGZyYWdtZW50IHNoYWRlclxuICAgICAgICBcInByZWNpc2lvbiBsb3dwIGZsb2F0O1xcblxcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xcbnZhcnlpbmcgdmVjMiB2Qmx1clRleENvb3Jkc1s2XTtcXG52YXJ5aW5nIHZlYzQgdkNvbG9yO1xcblxcbnVuaWZvcm0gc2FtcGxlcjJEIHVTYW1wbGVyO1xcblxcbnZvaWQgbWFpbih2b2lkKVxcbntcXG4gICAgZ2xfRnJhZ0NvbG9yID0gdmVjNCgwLjApO1xcblxcbiAgICBnbF9GcmFnQ29sb3IgKz0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2Qmx1clRleENvb3Jkc1sgMF0pKjAuMDA0NDMxODQ4NDExOTM4MzQxO1xcbiAgICBnbF9GcmFnQ29sb3IgKz0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2Qmx1clRleENvb3Jkc1sgMV0pKjAuMDUzOTkwOTY2NTEzMTg5ODU7XFxuICAgIGdsX0ZyYWdDb2xvciArPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZCbHVyVGV4Q29vcmRzWyAyXSkqMC4yNDE5NzA3MjQ1MTkxNDU0O1xcbiAgICBnbF9GcmFnQ29sb3IgKz0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2VGV4dHVyZUNvb3JkICAgICApKjAuMzk4OTQyMjgwNDAxNDMyNztcXG4gICAgZ2xfRnJhZ0NvbG9yICs9IHRleHR1cmUyRCh1U2FtcGxlciwgdkJsdXJUZXhDb29yZHNbIDNdKSowLjI0MTk3MDcyNDUxOTE0NTQ7XFxuICAgIGdsX0ZyYWdDb2xvciArPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZCbHVyVGV4Q29vcmRzWyA0XSkqMC4wNTM5OTA5NjY1MTMxODk4NTtcXG4gICAgZ2xfRnJhZ0NvbG9yICs9IHRleHR1cmUyRCh1U2FtcGxlciwgdkJsdXJUZXhDb29yZHNbIDVdKSowLjAwNDQzMTg0ODQxMTkzODM0MTtcXG59XFxuXCIsXG4gICAgICAgIC8vIHNldCB0aGUgdW5pZm9ybXNcbiAgICAgICAge1xuICAgICAgICAgICAgc3RyZW5ndGg6IHsgdHlwZTogJzFmJywgdmFsdWU6IDEgfVxuICAgICAgICB9XG4gICAgKTtcblxuICAgIHRoaXMucGFzc2VzID0gMTtcbiAgICB0aGlzLnN0cmVuZ3RoID0gNDtcbn1cblxuQmx1cllGaWx0ZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShjb3JlLkFic3RyYWN0RmlsdGVyLnByb3RvdHlwZSk7XG5CbHVyWUZpbHRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBCbHVyWUZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gQmx1cllGaWx0ZXI7XG5cbkJsdXJZRmlsdGVyLnByb3RvdHlwZS5hcHBseUZpbHRlciA9IGZ1bmN0aW9uIChyZW5kZXJlciwgaW5wdXQsIG91dHB1dCwgY2xlYXIpXG57XG4gICAgdmFyIHNoYWRlciA9IHRoaXMuZ2V0U2hhZGVyKHJlbmRlcmVyKTtcblxuICAgIHRoaXMudW5pZm9ybXMuc3RyZW5ndGgudmFsdWUgPSBNYXRoLmFicyh0aGlzLnN0cmVuZ3RoKSAvIDQgLyB0aGlzLnBhc3NlcyAqIChpbnB1dC5mcmFtZS5oZWlnaHQgLyBpbnB1dC5zaXplLmhlaWdodCk7XG5cbiAgICBpZih0aGlzLnBhc3NlcyA9PT0gMSlcbiAgICB7XG4gICAgICAgIHJlbmRlcmVyLmZpbHRlck1hbmFnZXIuYXBwbHlGaWx0ZXIoc2hhZGVyLCBpbnB1dCwgb3V0cHV0LCBjbGVhcik7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHZhciByZW5kZXJUYXJnZXQgPSByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLmdldFJlbmRlclRhcmdldCh0cnVlKTtcbiAgICAgICAgdmFyIGZsaXAgPSBpbnB1dDtcbiAgICAgICAgdmFyIGZsb3AgPSByZW5kZXJUYXJnZXQ7XG5cbiAgICAgICAgZm9yKHZhciBpID0gMDsgaSA8IHRoaXMucGFzc2VzLTE7IGkrKylcbiAgICAgICAge1xuICAgICAgICAgICAgcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5hcHBseUZpbHRlcihzaGFkZXIsIGZsaXAsIGZsb3AsIHRydWUpO1xuXG4gICAgICAgICAgIHZhciB0ZW1wID0gZmxvcDtcbiAgICAgICAgICAgZmxvcCA9IGZsaXA7XG4gICAgICAgICAgIGZsaXAgPSB0ZW1wO1xuICAgICAgICB9XG5cbiAgICAgICAgcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5hcHBseUZpbHRlcihzaGFkZXIsIGZsaXAsIG91dHB1dCwgY2xlYXIpO1xuXG4gICAgICAgIHJlbmRlcmVyLmZpbHRlck1hbmFnZXIucmV0dXJuUmVuZGVyVGFyZ2V0KHJlbmRlclRhcmdldCk7XG4gICAgfVxufTtcblxuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhCbHVyWUZpbHRlci5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBzdHJlbmd0aCBvZiBib3RoIHRoZSBibHVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuQmx1cllGaWx0ZXIjXG4gICAgICogQGRlZmF1bHQgMlxuICAgICAqL1xuICAgIGJsdXI6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gIHRoaXMuc3RyZW5ndGg7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnBhZGRpbmcgPSBNYXRoLmFicyh2YWx1ZSkgKiAwLjU7XG4gICAgICAgICAgICB0aGlzLnN0cmVuZ3RoID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG59KTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vLi4vY29yZScpO1xuLy8gQHNlZSBodHRwczovL2dpdGh1Yi5jb20vc3Vic3RhY2svYnJmcy9pc3N1ZXMvMjVcblxuXG4vKipcbiAqIEEgU21hcnQgQmx1ciBGaWx0ZXIuXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLkFic3RyYWN0RmlsdGVyXG4gKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzXG4gKi9cbmZ1bmN0aW9uIFNtYXJ0Qmx1ckZpbHRlcigpXG57XG4gICAgY29yZS5BYnN0cmFjdEZpbHRlci5jYWxsKHRoaXMsXG4gICAgICAgIC8vIHZlcnRleCBzaGFkZXJcbiAgICAgICAgbnVsbCxcbiAgICAgICAgLy8gZnJhZ21lbnQgc2hhZGVyXG4gICAgICAgIFwicHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XFxuXFxudmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7XFxuXFxudW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXI7XFxudW5pZm9ybSB2ZWMyIGRlbHRhO1xcblxcbmZsb2F0IHJhbmRvbSh2ZWMzIHNjYWxlLCBmbG9hdCBzZWVkKVxcbntcXG4gICAgcmV0dXJuIGZyYWN0KHNpbihkb3QoZ2xfRnJhZ0Nvb3JkLnh5eiArIHNlZWQsIHNjYWxlKSkgKiA0Mzc1OC41NDUzICsgc2VlZCk7XFxufVxcblxcbnZvaWQgbWFpbih2b2lkKVxcbntcXG4gICAgdmVjNCBjb2xvciA9IHZlYzQoMC4wKTtcXG4gICAgZmxvYXQgdG90YWwgPSAwLjA7XFxuXFxuICAgIGZsb2F0IG9mZnNldCA9IHJhbmRvbSh2ZWMzKDEyLjk4OTgsIDc4LjIzMywgMTUxLjcxODIpLCAwLjApO1xcblxcbiAgICBmb3IgKGZsb2F0IHQgPSAtMzAuMDsgdCA8PSAzMC4wOyB0KyspXFxuICAgIHtcXG4gICAgICAgIGZsb2F0IHBlcmNlbnQgPSAodCArIG9mZnNldCAtIDAuNSkgLyAzMC4wO1xcbiAgICAgICAgZmxvYXQgd2VpZ2h0ID0gMS4wIC0gYWJzKHBlcmNlbnQpO1xcbiAgICAgICAgdmVjNCBzYW1wbGUgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZUZXh0dXJlQ29vcmQgKyBkZWx0YSAqIHBlcmNlbnQpO1xcbiAgICAgICAgc2FtcGxlLnJnYiAqPSBzYW1wbGUuYTtcXG4gICAgICAgIGNvbG9yICs9IHNhbXBsZSAqIHdlaWdodDtcXG4gICAgICAgIHRvdGFsICs9IHdlaWdodDtcXG4gICAgfVxcblxcbiAgICBnbF9GcmFnQ29sb3IgPSBjb2xvciAvIHRvdGFsO1xcbiAgICBnbF9GcmFnQ29sb3IucmdiIC89IGdsX0ZyYWdDb2xvci5hICsgMC4wMDAwMTtcXG59XFxuXCIsXG4gICAgICAgIC8vIHVuaWZvcm1zXG4gICAgICAgIHtcbiAgICAgICAgICBkZWx0YTogeyB0eXBlOiAndjInLCB2YWx1ZTogeyB4OiAwLjEsIHk6IDAuMCB9IH1cbiAgICAgICAgfVxuICAgICk7XG59XG5cblNtYXJ0Qmx1ckZpbHRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuQWJzdHJhY3RGaWx0ZXIucHJvdG90eXBlKTtcblNtYXJ0Qmx1ckZpbHRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBTbWFydEJsdXJGaWx0ZXI7XG5tb2R1bGUuZXhwb3J0cyA9IFNtYXJ0Qmx1ckZpbHRlcjtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vLi4vY29yZScpO1xuLy8gQHNlZSBodHRwczovL2dpdGh1Yi5jb20vc3Vic3RhY2svYnJmcy9pc3N1ZXMvMjVcblxuXG4vKipcbiAqIFRoZSBDb2xvck1hdHJpeEZpbHRlciBjbGFzcyBsZXRzIHlvdSBhcHBseSBhIDV4NCBtYXRyaXggdHJhbnNmb3JtYXRpb24gb24gdGhlIFJHQkFcbiAqIGNvbG9yIGFuZCBhbHBoYSB2YWx1ZXMgb2YgZXZlcnkgcGl4ZWwgb24geW91ciBkaXNwbGF5T2JqZWN0IHRvIHByb2R1Y2UgYSByZXN1bHRcbiAqIHdpdGggYSBuZXcgc2V0IG9mIFJHQkEgY29sb3IgYW5kIGFscGhhIHZhbHVlcy4gSXQncyBwcmV0dHkgcG93ZXJmdWwhXG4gKlxuICogYGBganNcbiAqICB2YXIgY29sb3JNYXRyaXggPSBuZXcgUElYSS5Db2xvck1hdHJpeEZpbHRlcigpO1xuICogIGNvbnRhaW5lci5maWx0ZXJzID0gW2NvbG9yTWF0cml4XTtcbiAqICBjb2xvck1hdHJpeC5jb250cmFzdCgyKTtcbiAqIGBgYFxuICogQGF1dGhvciBDbMOpbWVudCBDaGVuZWJhdWx0IDxjbGVtZW50QGdvb2Rib3lkaWdpdGFsLmNvbT5cbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5BYnN0cmFjdEZpbHRlclxuICogQG1lbWJlcm9mIFBJWEkuZmlsdGVyc1xuICovXG5mdW5jdGlvbiBDb2xvck1hdHJpeEZpbHRlcigpXG57XG4gICAgY29yZS5BYnN0cmFjdEZpbHRlci5jYWxsKHRoaXMsXG4gICAgICAgIC8vIHZlcnRleCBzaGFkZXJcbiAgICAgICAgbnVsbCxcbiAgICAgICAgLy8gZnJhZ21lbnQgc2hhZGVyXG4gICAgICAgIFwicHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XFxuXFxudmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7XFxudW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXI7XFxudW5pZm9ybSBmbG9hdCBtWzI1XTtcXG5cXG52b2lkIG1haW4odm9pZClcXG57XFxuXFxuICAgIHZlYzQgYyA9IHRleHR1cmUyRCh1U2FtcGxlciwgdlRleHR1cmVDb29yZCk7XFxuXFxuICAgIGdsX0ZyYWdDb2xvci5yID0gKG1bMF0gKiBjLnIpO1xcbiAgICAgICAgZ2xfRnJhZ0NvbG9yLnIgKz0gKG1bMV0gKiBjLmcpO1xcbiAgICAgICAgZ2xfRnJhZ0NvbG9yLnIgKz0gKG1bMl0gKiBjLmIpO1xcbiAgICAgICAgZ2xfRnJhZ0NvbG9yLnIgKz0gKG1bM10gKiBjLmEpO1xcbiAgICAgICAgZ2xfRnJhZ0NvbG9yLnIgKz0gbVs0XTtcXG5cXG4gICAgZ2xfRnJhZ0NvbG9yLmcgPSAobVs1XSAqIGMucik7XFxuICAgICAgICBnbF9GcmFnQ29sb3IuZyArPSAobVs2XSAqIGMuZyk7XFxuICAgICAgICBnbF9GcmFnQ29sb3IuZyArPSAobVs3XSAqIGMuYik7XFxuICAgICAgICBnbF9GcmFnQ29sb3IuZyArPSAobVs4XSAqIGMuYSk7XFxuICAgICAgICBnbF9GcmFnQ29sb3IuZyArPSBtWzldO1xcblxcbiAgICAgZ2xfRnJhZ0NvbG9yLmIgPSAobVsxMF0gKiBjLnIpO1xcbiAgICAgICAgZ2xfRnJhZ0NvbG9yLmIgKz0gKG1bMTFdICogYy5nKTtcXG4gICAgICAgIGdsX0ZyYWdDb2xvci5iICs9IChtWzEyXSAqIGMuYik7XFxuICAgICAgICBnbF9GcmFnQ29sb3IuYiArPSAobVsxM10gKiBjLmEpO1xcbiAgICAgICAgZ2xfRnJhZ0NvbG9yLmIgKz0gbVsxNF07XFxuXFxuICAgICBnbF9GcmFnQ29sb3IuYSA9IChtWzE1XSAqIGMucik7XFxuICAgICAgICBnbF9GcmFnQ29sb3IuYSArPSAobVsxNl0gKiBjLmcpO1xcbiAgICAgICAgZ2xfRnJhZ0NvbG9yLmEgKz0gKG1bMTddICogYy5iKTtcXG4gICAgICAgIGdsX0ZyYWdDb2xvci5hICs9IChtWzE4XSAqIGMuYSk7XFxuICAgICAgICBnbF9GcmFnQ29sb3IuYSArPSBtWzE5XTtcXG5cXG59XFxuXCIsXG4gICAgICAgIC8vIGN1c3RvbSB1bmlmb3Jtc1xuICAgICAgICB7XG4gICAgICAgICAgICBtOiB7XG4gICAgICAgICAgICAgICAgdHlwZTogJzFmdicsIHZhbHVlOiBbXG4gICAgICAgICAgICAgICAgICAgIDEsIDAsIDAsIDAsIDAsXG4gICAgICAgICAgICAgICAgICAgIDAsIDEsIDAsIDAsIDAsXG4gICAgICAgICAgICAgICAgICAgIDAsIDAsIDEsIDAsIDAsXG4gICAgICAgICAgICAgICAgICAgIDAsIDAsIDAsIDEsIDBcbiAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICApO1xufVxuXG5Db2xvck1hdHJpeEZpbHRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuQWJzdHJhY3RGaWx0ZXIucHJvdG90eXBlKTtcbkNvbG9yTWF0cml4RmlsdGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IENvbG9yTWF0cml4RmlsdGVyO1xubW9kdWxlLmV4cG9ydHMgPSBDb2xvck1hdHJpeEZpbHRlcjtcblxuXG4vKipcbiAqIFRyYW5zZm9ybXMgY3VycmVudCBtYXRyaXggYW5kIHNldCB0aGUgbmV3IG9uZVxuICpcbiAqIEBwYXJhbSBtYXRyaXgge251bWJlcltdfSAobWF0IDV4NClcbiAqIEBwYXJhbSBtdWx0aXBseSB7Ym9vbGVhbn0gaWYgdHJ1ZSwgY3VycmVudCBtYXRyaXggYW5kIG1hdHJpeCBhcmUgbXVsdGlwbGllZC4gSWYgZmFsc2UsIGp1c3Qgc2V0IHRoZSBjdXJyZW50IG1hdHJpeCB3aXRoIEBwYXJhbSBtYXRyaXhcbiAqL1xuQ29sb3JNYXRyaXhGaWx0ZXIucHJvdG90eXBlLl9sb2FkTWF0cml4ID0gZnVuY3Rpb24gKG1hdHJpeCwgbXVsdGlwbHkpXG57XG4gICAgbXVsdGlwbHkgPSAhIW11bHRpcGx5O1xuXG4gICAgdmFyIG5ld01hdHJpeCA9IG1hdHJpeDtcblxuICAgIGlmIChtdWx0aXBseSkge1xuICAgICAgICB0aGlzLl9tdWx0aXBseShuZXdNYXRyaXgsIHRoaXMudW5pZm9ybXMubS52YWx1ZSwgbWF0cml4KTtcbiAgICAgICAgbmV3TWF0cml4ID0gdGhpcy5fY29sb3JNYXRyaXgobmV3TWF0cml4KTtcbiAgICB9XG5cbiAgICAvLyBzZXQgdGhlIG5ldyBtYXRyaXhcbiAgICB0aGlzLnVuaWZvcm1zLm0udmFsdWUgPSBuZXdNYXRyaXg7XG59O1xuXG4vKipcbiAqIE11bHRpcGxpZXMgdHdvIG1hdDUnc1xuICpcbiAqIEBwYXJhbSBvdXQge251bWJlcltdfSAobWF0IDV4NCkgdGhlIHJlY2VpdmluZyBtYXRyaXhcbiAqIEBwYXJhbSBhIHtudW1iZXJbXX0gKG1hdCA1eDQpIHRoZSBmaXJzdCBvcGVyYW5kXG4gKiBAcGFyYW0gYiB7bnVtYmVyW119IChtYXQgNXg0KSB0aGUgc2Vjb25kIG9wZXJhbmRcbiAqIEByZXR1cm5zIG91dCB7bnVtYmVyW119IChtYXQgNXg0KVxuICovXG5Db2xvck1hdHJpeEZpbHRlci5wcm90b3R5cGUuX211bHRpcGx5ID0gZnVuY3Rpb24gKG91dCwgYSwgYilcbntcblxuICAgIC8vIFJlZCBDaGFubmVsXG4gICAgb3V0WzBdID0gKGFbMF0gKiBiWzBdKSArIChhWzFdICogYls1XSkgKyAoYVsyXSAqIGJbMTBdKSArIChhWzNdICogYlsxNV0pO1xuICAgIG91dFsxXSA9IChhWzBdICogYlsxXSkgKyAoYVsxXSAqIGJbNl0pICsgKGFbMl0gKiBiWzExXSkgKyAoYVszXSAqIGJbMTZdKTtcbiAgICBvdXRbMl0gPSAoYVswXSAqIGJbMl0pICsgKGFbMV0gKiBiWzddKSArIChhWzJdICogYlsxMl0pICsgKGFbM10gKiBiWzE3XSk7XG4gICAgb3V0WzNdID0gKGFbMF0gKiBiWzNdKSArIChhWzFdICogYls4XSkgKyAoYVsyXSAqIGJbMTNdKSArIChhWzNdICogYlsxOF0pO1xuICAgIG91dFs0XSA9IChhWzBdICogYls0XSkgKyAoYVsxXSAqIGJbOV0pICsgKGFbMl0gKiBiWzE0XSkgKyAoYVszXSAqIGJbMTldKTtcblxuICAgIC8vIEdyZWVuIENoYW5uZWxcbiAgICBvdXRbNV0gPSAoYVs1XSAqIGJbMF0pICsgKGFbNl0gKiBiWzVdKSArIChhWzddICogYlsxMF0pICsgKGFbOF0gKiBiWzE1XSk7XG4gICAgb3V0WzZdID0gKGFbNV0gKiBiWzFdKSArIChhWzZdICogYls2XSkgKyAoYVs3XSAqIGJbMTFdKSArIChhWzhdICogYlsxNl0pO1xuICAgIG91dFs3XSA9IChhWzVdICogYlsyXSkgKyAoYVs2XSAqIGJbN10pICsgKGFbN10gKiBiWzEyXSkgKyAoYVs4XSAqIGJbMTddKTtcbiAgICBvdXRbOF0gPSAoYVs1XSAqIGJbM10pICsgKGFbNl0gKiBiWzhdKSArIChhWzddICogYlsxM10pICsgKGFbOF0gKiBiWzE4XSk7XG4gICAgb3V0WzldID0gKGFbNV0gKiBiWzRdKSArIChhWzZdICogYls5XSkgKyAoYVs3XSAqIGJbMTRdKSArIChhWzhdICogYlsxOV0pO1xuXG4gICAgLy8gQmx1ZSBDaGFubmVsXG4gICAgb3V0WzEwXSA9IChhWzEwXSAqIGJbMF0pICsgKGFbMTFdICogYls1XSkgKyAoYVsxMl0gKiBiWzEwXSkgKyAoYVsxM10gKiBiWzE1XSk7XG4gICAgb3V0WzExXSA9IChhWzEwXSAqIGJbMV0pICsgKGFbMTFdICogYls2XSkgKyAoYVsxMl0gKiBiWzExXSkgKyAoYVsxM10gKiBiWzE2XSk7XG4gICAgb3V0WzEyXSA9IChhWzEwXSAqIGJbMl0pICsgKGFbMTFdICogYls3XSkgKyAoYVsxMl0gKiBiWzEyXSkgKyAoYVsxM10gKiBiWzE3XSk7XG4gICAgb3V0WzEzXSA9IChhWzEwXSAqIGJbM10pICsgKGFbMTFdICogYls4XSkgKyAoYVsxMl0gKiBiWzEzXSkgKyAoYVsxM10gKiBiWzE4XSk7XG4gICAgb3V0WzE0XSA9IChhWzEwXSAqIGJbNF0pICsgKGFbMTFdICogYls5XSkgKyAoYVsxMl0gKiBiWzE0XSkgKyAoYVsxM10gKiBiWzE5XSk7XG5cbiAgICAvLyBBbHBoYSBDaGFubmVsXG4gICAgb3V0WzE1XSA9IChhWzE1XSAqIGJbMF0pICsgKGFbMTZdICogYls1XSkgKyAoYVsxN10gKiBiWzEwXSkgKyAoYVsxOF0gKiBiWzE1XSk7XG4gICAgb3V0WzE2XSA9IChhWzE1XSAqIGJbMV0pICsgKGFbMTZdICogYls2XSkgKyAoYVsxN10gKiBiWzExXSkgKyAoYVsxOF0gKiBiWzE2XSk7XG4gICAgb3V0WzE3XSA9IChhWzE1XSAqIGJbMl0pICsgKGFbMTZdICogYls3XSkgKyAoYVsxN10gKiBiWzEyXSkgKyAoYVsxOF0gKiBiWzE3XSk7XG4gICAgb3V0WzE4XSA9IChhWzE1XSAqIGJbM10pICsgKGFbMTZdICogYls4XSkgKyAoYVsxN10gKiBiWzEzXSkgKyAoYVsxOF0gKiBiWzE4XSk7XG4gICAgb3V0WzE5XSA9IChhWzE1XSAqIGJbNF0pICsgKGFbMTZdICogYls5XSkgKyAoYVsxN10gKiBiWzE0XSkgKyAoYVsxOF0gKiBiWzE5XSk7XG5cbiAgICByZXR1cm4gb3V0O1xufTtcblxuLyoqXG4gKiBDcmVhdGUgYSBGbG9hdDMyIEFycmF5IGFuZCBub3JtYWxpemUgdGhlIG9mZnNldCBjb21wb25lbnQgdG8gMC0xXG4gKlxuICogQHBhcmFtIG1hdHJpeCB7bnVtYmVyW119IChtYXQgNXg0KVxuICogQHJldHVybiBtIHtudW1iZXJbXX0gKG1hdCA1eDQpIHdpdGggYWxsIHZhbHVlcyBiZXR3ZWVuIDAtMVxuICovXG5Db2xvck1hdHJpeEZpbHRlci5wcm90b3R5cGUuX2NvbG9yTWF0cml4ID0gZnVuY3Rpb24gKG1hdHJpeClcbntcbiAgICAvLyBDcmVhdGUgYSBGbG9hdDMyIEFycmF5IGFuZCBub3JtYWxpemUgdGhlIG9mZnNldCBjb21wb25lbnQgdG8gMC0xXG4gICAgdmFyIG0gPSBuZXcgRmxvYXQzMkFycmF5KG1hdHJpeCk7XG4gICAgbVs0XSAvPSAyNTU7XG4gICAgbVs5XSAvPSAyNTU7XG4gICAgbVsxNF0gLz0gMjU1O1xuICAgIG1bMTldIC89IDI1NTtcblxuICAgIHJldHVybiBtO1xufTtcblxuLyoqXG4gKiBBZGp1c3RzIGJyaWdodG5lc3NcbiAqXG4gKiBAcGFyYW0gYiB7bnVtYmVyfSB2YWx1ZSBvZiB0aGUgYnJpZ3RobmVzcyAoMCBpcyBibGFjaylcbiAqIEBwYXJhbSBtdWx0aXBseSB7Ym9vbGVhbn0gcmVmZXIgdG8gLl9sb2FkTWF0cml4KCkgbWV0aG9kXG4gKi9cbkNvbG9yTWF0cml4RmlsdGVyLnByb3RvdHlwZS5icmlnaHRuZXNzID0gZnVuY3Rpb24gKGIsIG11bHRpcGx5KVxue1xuICAgIHZhciBtYXRyaXggPSBbXG4gICAgICAgIGIsIDAsIDAsIDAsIDAsXG4gICAgICAgIDAsIGIsIDAsIDAsIDAsXG4gICAgICAgIDAsIDAsIGIsIDAsIDAsXG4gICAgICAgIDAsIDAsIDAsIDEsIDBcbiAgICBdO1xuXG4gICAgdGhpcy5fbG9hZE1hdHJpeChtYXRyaXgsIG11bHRpcGx5KTtcbn07XG5cbi8qKlxuICogU2V0IHRoZSBtYXRyaWNlcyBpbiBncmV5IHNjYWxlc1xuICpcbiAqIEBwYXJhbSBzY2FsZSB7bnVtYmVyfSB2YWx1ZSBvZiB0aGUgZ3JleSAoMCBpcyBibGFjaylcbiAqIEBwYXJhbSBtdWx0aXBseSB7Ym9vbGVhbn0gcmVmZXIgdG8gLl9sb2FkTWF0cml4KCkgbWV0aG9kXG4gKi9cbkNvbG9yTWF0cml4RmlsdGVyLnByb3RvdHlwZS5ncmV5c2NhbGUgPSBmdW5jdGlvbiAoc2NhbGUsIG11bHRpcGx5KVxue1xuICAgIHZhciBtYXRyaXggPSBbXG4gICAgICAgIHNjYWxlLCBzY2FsZSwgc2NhbGUsIDAsIDAsXG4gICAgICAgIHNjYWxlLCBzY2FsZSwgc2NhbGUsIDAsIDAsXG4gICAgICAgIHNjYWxlLCBzY2FsZSwgc2NhbGUsIDAsIDAsXG4gICAgICAgIDAsIDAsIDAsIDEsIDBcbiAgICBdO1xuXG4gICAgdGhpcy5fbG9hZE1hdHJpeChtYXRyaXgsIG11bHRpcGx5KTtcbn07XG4vL0FtZXJpY2FuaXplZCBhbGlhc1xuQ29sb3JNYXRyaXhGaWx0ZXIucHJvdG90eXBlLmdyYXlzY2FsZSA9IENvbG9yTWF0cml4RmlsdGVyLnByb3RvdHlwZS5ncmV5c2NhbGU7XG5cbi8qKlxuICogU2V0IHRoZSBibGFjayBhbmQgd2hpdGUgbWF0cmljZVxuICogTXVsdGlwbHkgdGhlIGN1cnJlbnQgbWF0cml4XG4gKlxuICogQHBhcmFtIG11bHRpcGx5IHtib29sZWFufSByZWZlciB0byAuX2xvYWRNYXRyaXgoKSBtZXRob2RcbiAqL1xuQ29sb3JNYXRyaXhGaWx0ZXIucHJvdG90eXBlLmJsYWNrQW5kV2hpdGUgPSBmdW5jdGlvbiAobXVsdGlwbHkpXG57XG4gICAgdmFyIG1hdHJpeCA9IFtcbiAgICAgICAgMC4zLCAwLjYsIDAuMSwgMCwgMCxcbiAgICAgICAgMC4zLCAwLjYsIDAuMSwgMCwgMCxcbiAgICAgICAgMC4zLCAwLjYsIDAuMSwgMCwgMCxcbiAgICAgICAgMCwgMCwgMCwgMSwgMFxuICAgIF07XG5cbiAgICB0aGlzLl9sb2FkTWF0cml4KG1hdHJpeCwgbXVsdGlwbHkpO1xufTtcblxuLyoqXG4gKiBTZXQgdGhlIGh1ZSBwcm9wZXJ0eSBvZiB0aGUgY29sb3JcbiAqXG4gKiBAcGFyYW0gcm90YXRpb24ge251bWJlcn0gaW4gZGVncmVlc1xuICogQHBhcmFtIG11bHRpcGx5IHtib29sZWFufSByZWZlciB0byAuX2xvYWRNYXRyaXgoKSBtZXRob2RcbiAqL1xuQ29sb3JNYXRyaXhGaWx0ZXIucHJvdG90eXBlLmh1ZSA9IGZ1bmN0aW9uIChyb3RhdGlvbiwgbXVsdGlwbHkpXG57XG4gICAgcm90YXRpb24gPSAocm90YXRpb24gfHwgMCkgLyAxODAgKiBNYXRoLlBJO1xuICAgIHZhciBjb3MgPSBNYXRoLmNvcyhyb3RhdGlvbiksXG4gICAgICAgIHNpbiA9IE1hdGguc2luKHJvdGF0aW9uKTtcblxuICAgIC8vIGx1bWluYW5jZVJlZCwgbHVtaW5hbmNlR3JlZW4sIGx1bWluYW5jZUJsdWVcbiAgICB2YXIgbHVtUiA9IDAuMjEzLCAvLyBvciAwLjMwODZcbiAgICAgICAgbHVtRyA9IDAuNzE1LCAvLyBvciAwLjYwOTRcbiAgICAgICAgbHVtQiA9IDAuMDcyOyAvLyBvciAwLjA4MjBcblxuICAgIHZhciBtYXRyaXggPSBbXG4gICAgICAgIGx1bVIgKyBjb3MgKiAoMSAtIGx1bVIpICsgc2luICogKC1sdW1SKSwgbHVtRyArIGNvcyAqICgtbHVtRykgKyBzaW4gKiAoLWx1bUcpLCBsdW1CICsgY29zICogKC1sdW1CKSArIHNpbiAqICgxIC0gbHVtQiksIDAsIDAsXG4gICAgICAgIGx1bVIgKyBjb3MgKiAoLWx1bVIpICsgc2luICogKDAuMTQzKSwgbHVtRyArIGNvcyAqICgxIC0gbHVtRykgKyBzaW4gKiAoMC4xNDApLCBsdW1CICsgY29zICogKC1sdW1CKSArIHNpbiAqICgtMC4yODMpLCAwLCAwLFxuICAgICAgICBsdW1SICsgY29zICogKC1sdW1SKSArIHNpbiAqICgtKDEgLSBsdW1SKSksIGx1bUcgKyBjb3MgKiAoLWx1bUcpICsgc2luICogKGx1bUcpLCBsdW1CICsgY29zICogKDEgLSBsdW1CKSArIHNpbiAqIChsdW1CKSwgMCwgMCxcbiAgICAgICAgMCwgMCwgMCwgMSwgMFxuICAgIF07XG5cbiAgICB0aGlzLl9sb2FkTWF0cml4KG1hdHJpeCwgbXVsdGlwbHkpO1xufTtcblxuXG4vKipcbiAqIFNldCB0aGUgY29udHJhc3QgbWF0cml4LCBpbmNyZWFzZSB0aGUgc2VwYXJhdGlvbiBiZXR3ZWVuIGRhcmsgYW5kIGJyaWdodFxuICogSW5jcmVhc2UgY29udHJhc3QgOiBzaGFkb3dzIGRhcmtlciBhbmQgaGlnaGxpZ2h0cyBicmlnaHRlclxuICogRGVjcmVhc2UgY29udHJhc3QgOiBicmluZyB0aGUgc2hhZG93cyB1cCBhbmQgdGhlIGhpZ2hsaWdodHMgZG93blxuICpcbiAqIEBwYXJhbSBhbW91bnQge251bWJlcn0gdmFsdWUgb2YgdGhlIGNvbnRyYXN0XG4gKiBAcGFyYW0gbXVsdGlwbHkge2Jvb2xlYW59IHJlZmVyIHRvIC5fbG9hZE1hdHJpeCgpIG1ldGhvZFxuICovXG5Db2xvck1hdHJpeEZpbHRlci5wcm90b3R5cGUuY29udHJhc3QgPSBmdW5jdGlvbiAoYW1vdW50LCBtdWx0aXBseSlcbntcbiAgICB2YXIgdiA9IChhbW91bnQgfHwgMCkgKyAxO1xuICAgIHZhciBvID0gLTEyOCAqICh2IC0gMSk7XG5cbiAgICB2YXIgbWF0cml4ID0gW1xuICAgICAgICB2LCAwLCAwLCAwLCBvLFxuICAgICAgICAwLCB2LCAwLCAwLCBvLFxuICAgICAgICAwLCAwLCB2LCAwLCBvLFxuICAgICAgICAwLCAwLCAwLCAxLCAwXG4gICAgXTtcblxuICAgIHRoaXMuX2xvYWRNYXRyaXgobWF0cml4LCBtdWx0aXBseSk7XG59O1xuXG4vKipcbiAqIFNldCB0aGUgc2F0dXJhdGlvbiBtYXRyaXgsIGluY3JlYXNlIHRoZSBzZXBhcmF0aW9uIGJldHdlZW4gY29sb3JzXG4gKiBJbmNyZWFzZSBzYXR1cmF0aW9uIDogaW5jcmVhc2UgY29udHJhc3QsIGJyaWdodG5lc3MsIGFuZCBzaGFycG5lc3NcbiAqXG4gKiBAcGFyYW0gYW1vdW50IHtudW1iZXJ9XG4gKiBAcGFyYW0gbXVsdGlwbHkge2Jvb2xlYW59IHJlZmVyIHRvIC5fbG9hZE1hdHJpeCgpIG1ldGhvZFxuICovXG5Db2xvck1hdHJpeEZpbHRlci5wcm90b3R5cGUuc2F0dXJhdGUgPSBmdW5jdGlvbiAoYW1vdW50LCBtdWx0aXBseSlcbntcbiAgICB2YXIgeCA9IChhbW91bnQgfHwgMCkgKiAyIC8gMyArIDE7XG4gICAgdmFyIHkgPSAoKHggLSAxKSAqIC0wLjUpO1xuXG4gICAgdmFyIG1hdHJpeCA9IFtcbiAgICAgICAgeCwgeSwgeSwgMCwgMCxcbiAgICAgICAgeSwgeCwgeSwgMCwgMCxcbiAgICAgICAgeSwgeSwgeCwgMCwgMCxcbiAgICAgICAgMCwgMCwgMCwgMSwgMFxuICAgIF07XG5cbiAgICB0aGlzLl9sb2FkTWF0cml4KG1hdHJpeCwgbXVsdGlwbHkpO1xufTtcblxuLyoqXG4gKiBEZXNhdHVyYXRlIGltYWdlIChyZW1vdmUgY29sb3IpXG4gKlxuICogQ2FsbCB0aGUgc2F0dXJhdGUgZnVuY3Rpb25cbiAqXG4gKiBAcGFyYW0gbXVsdGlwbHkge2Jvb2xlYW59IHJlZmVyIHRvIC5fbG9hZE1hdHJpeCgpIG1ldGhvZFxuICovXG5Db2xvck1hdHJpeEZpbHRlci5wcm90b3R5cGUuZGVzYXR1cmF0ZSA9IGZ1bmN0aW9uIChtdWx0aXBseSkgLy8ganNoaW50IHVudXNlZDpmYWxzZVxue1xuICAgIHRoaXMuc2F0dXJhdGUoLTEpO1xufTtcblxuLyoqXG4gKiBOZWdhdGl2ZSBpbWFnZSAoaW52ZXJzZSBvZiBjbGFzc2ljIHJnYiBtYXRyaXgpXG4gKlxuICogQHBhcmFtIG11bHRpcGx5IHtib29sZWFufSByZWZlciB0byAuX2xvYWRNYXRyaXgoKSBtZXRob2RcbiAqL1xuQ29sb3JNYXRyaXhGaWx0ZXIucHJvdG90eXBlLm5lZ2F0aXZlID0gZnVuY3Rpb24gKG11bHRpcGx5KVxue1xuICAgIHZhciBtYXRyaXggPSBbXG4gICAgICAgIDAsIDEsIDEsIDAsIDAsXG4gICAgICAgIDEsIDAsIDEsIDAsIDAsXG4gICAgICAgIDEsIDEsIDAsIDAsIDAsXG4gICAgICAgIDAsIDAsIDAsIDEsIDBcbiAgICBdO1xuXG4gICAgdGhpcy5fbG9hZE1hdHJpeChtYXRyaXgsIG11bHRpcGx5KTtcbn07XG5cbi8qKlxuICogU2VwaWEgaW1hZ2VcbiAqXG4gKiBAcGFyYW0gbXVsdGlwbHkge2Jvb2xlYW59IHJlZmVyIHRvIC5fbG9hZE1hdHJpeCgpIG1ldGhvZFxuICovXG5Db2xvck1hdHJpeEZpbHRlci5wcm90b3R5cGUuc2VwaWEgPSBmdW5jdGlvbiAobXVsdGlwbHkpXG57XG4gICAgdmFyIG1hdHJpeCA9IFtcbiAgICAgICAgMC4zOTMsIDAuNzY4OTk5OSwgMC4xODg5OTk5OSwgMCwgMCxcbiAgICAgICAgMC4zNDksIDAuNjg1OTk5OSwgMC4xNjc5OTk5OSwgMCwgMCxcbiAgICAgICAgMC4yNzIsIDAuNTMzOTk5OSwgMC4xMzA5OTk5OSwgMCwgMCxcbiAgICAgICAgMCwgMCwgMCwgMSwgMFxuICAgIF07XG5cbiAgICB0aGlzLl9sb2FkTWF0cml4KG1hdHJpeCwgbXVsdGlwbHkpO1xufTtcblxuLyoqXG4gKiBDb2xvciBtb3Rpb24gcGljdHVyZSBwcm9jZXNzIGludmVudGVkIGluIDE5MTYgKHRoYW5rcyBEb21pbmljIFN6YWJsZXdza2kpXG4gKlxuICogQHBhcmFtIG11bHRpcGx5IHtib29sZWFufSByZWZlciB0byAuX2xvYWRNYXRyaXgoKSBtZXRob2RcbiAqL1xuQ29sb3JNYXRyaXhGaWx0ZXIucHJvdG90eXBlLnRlY2huaWNvbG9yID0gZnVuY3Rpb24gKG11bHRpcGx5KVxue1xuICAgIHZhciBtYXRyaXggPSBbXG4gICAgICAgIDEuOTEyNTI3Nzg5MTQ1NjA4MywgLTAuODU0NTM0NDk3Njk1MTY0NSwgLTAuMDkxNTU1MDg0ODI3NTU1ODUsIDAsIDExLjc5MzYwMzQzNDM3NzMzNyxcbiAgICAgICAgLTAuMzA4NzgzMzM4NTkyODA5NywgMS43NjU4OTA4NTU1NDU4NDI4LCAtMC4xMDYwMTc0MzA3NDcyMjI0NSwgMCwgLTcwLjM1MjA1MTYxNDYxMzk4LFxuICAgICAgICAtMC4yMzExMDMzNzc1NDg2MTYsIC0wLjc1MDE4OTkxOTc0NDAyMTIsIDEuODQ3NTk3ODE2MTA4MTg5LCAwLCAzMC45NTA5NDA4Njk0OTExMzgsXG4gICAgICAgIDAsIDAsIDAsIDEsIDBcbiAgICBdO1xuXG4gICAgdGhpcy5fbG9hZE1hdHJpeChtYXRyaXgsIG11bHRpcGx5KTtcbn07XG5cbi8qKlxuICogUG9sYXJvaWQgZmlsdGVyXG4gKlxuICogQHBhcmFtIG11bHRpcGx5IHtib29sZWFufSByZWZlciB0byAuX2xvYWRNYXRyaXgoKSBtZXRob2RcbiAqL1xuQ29sb3JNYXRyaXhGaWx0ZXIucHJvdG90eXBlLnBvbGFyb2lkID0gZnVuY3Rpb24gKG11bHRpcGx5KVxue1xuICAgIHZhciBtYXRyaXggPSBbXG4gICAgICAgIDEuNDM4LCAtMC4wNjIsIC0wLjA2MiwgMCwgMCxcbiAgICAgICAgLTAuMTIyLCAxLjM3OCwgLTAuMTIyLCAwLCAwLFxuICAgICAgICAtMC4wMTYsIC0wLjAxNiwgMS40ODMsIDAsIDAsXG4gICAgICAgIDAsIDAsIDAsIDEsIDBcbiAgICBdO1xuXG4gICAgdGhpcy5fbG9hZE1hdHJpeChtYXRyaXgsIG11bHRpcGx5KTtcbn07XG5cbi8qKlxuICogRmlsdGVyIHdobyB0cmFuc2Zvcm1zIDogUmVkIC0+IEJsdWUgYW5kIEJsdWUgLT4gUmVkXG4gKlxuICogQHBhcmFtIG11bHRpcGx5IHtib29sZWFufSByZWZlciB0byAuX2xvYWRNYXRyaXgoKSBtZXRob2RcbiAqL1xuQ29sb3JNYXRyaXhGaWx0ZXIucHJvdG90eXBlLnRvQkdSID0gZnVuY3Rpb24gKG11bHRpcGx5KVxue1xuICAgIHZhciBtYXRyaXggPSBbXG4gICAgICAgIDAsIDAsIDEsIDAsIDAsXG4gICAgICAgIDAsIDEsIDAsIDAsIDAsXG4gICAgICAgIDEsIDAsIDAsIDAsIDAsXG4gICAgICAgIDAsIDAsIDAsIDEsIDBcbiAgICBdO1xuXG4gICAgdGhpcy5fbG9hZE1hdHJpeChtYXRyaXgsIG11bHRpcGx5KTtcbn07XG5cbi8qKlxuICogQ29sb3IgcmV2ZXJzYWwgZmlsbSBpbnRyb2R1Y2VkIGJ5IEVhc3RtYW4gS29kYWsgaW4gMTkzNS4gKHRoYW5rcyBEb21pbmljIFN6YWJsZXdza2kpXG4gKlxuICogQHBhcmFtIG11bHRpcGx5IHtib29sZWFufSByZWZlciB0byAuX2xvYWRNYXRyaXgoKSBtZXRob2RcbiAqL1xuQ29sb3JNYXRyaXhGaWx0ZXIucHJvdG90eXBlLmtvZGFjaHJvbWUgPSBmdW5jdGlvbiAobXVsdGlwbHkpXG57XG4gICAgdmFyIG1hdHJpeCA9IFtcbiAgICAgICAgMS4xMjg1NTgyMzk2NTkzNTI1LCAtMC4zOTY3MzgyMjgzNjAxMzQ4LCAtMC4wMzk5MjU1OTE3MjkyMTc5MywgMCwgNjMuNzI5NTg3NjIxOTY1MDIsXG4gICAgICAgIC0wLjE2NDA0MzM5OTYyMjQ0NjE2LCAxLjA4MzUyNTE1NjYyOTEzMDQsIC0wLjA1NDk4ODA1MTE1NjMzMTMyLCAwLCAyNC43MzI0MDc4OTY3MDYyMDMsXG4gICAgICAgIC0wLjE2Nzg2MDEwNzA2MTU1NzYzLCAtMC41NjAzNDE2Mjc3Njk1MjQ4LCAxLjYwMTQ4NTA3NjE5NjQ5NDMsIDAsIDM1LjYyOTgyODA3NDYwOTQ2LFxuICAgICAgICAwLCAwLCAwLCAxLCAwXG4gICAgXTtcblxuICAgIHRoaXMuX2xvYWRNYXRyaXgobWF0cml4LCBtdWx0aXBseSk7XG59O1xuXG4vKipcbiAqIEJyb3duIGRlbGljaW91cyBicm93bmkgZmlsdGVyICh0aGFua3MgRG9taW5pYyBTemFibGV3c2tpKVxuICpcbiAqIEBwYXJhbSBtdWx0aXBseSB7Ym9vbGVhbn0gcmVmZXIgdG8gLl9sb2FkTWF0cml4KCkgbWV0aG9kXG4gKi9cbkNvbG9yTWF0cml4RmlsdGVyLnByb3RvdHlwZS5icm93bmkgPSBmdW5jdGlvbiAobXVsdGlwbHkpXG57XG4gICAgdmFyIG1hdHJpeCA9IFtcbiAgICAgICAgMC41OTk3MDIzNDk4MTU5NzE1LCAwLjM0NTUzMjQzMDQ4MzkxMjYzLCAtMC4yNzA4Mjk4Njc0NTM4MDQyLCAwLCA0Ny40MzE5Mjg1NTYwMDg3MyxcbiAgICAgICAgLTAuMDM3NzAzMjQ5ODM3NzgzMTU3LCAwLjg2MDk1Nzc1ODc5OTI2NDEsIDAuMTUwNTk1NTIzODg0NTk5MTMsIDAsIC0zNi45Njg0MTQ5ODMxOTEyNyxcbiAgICAgICAgMC4yNDExMzYzNTEyODE1MzMzNSwgLTAuMDc0NDEwMzc5MDg0MjI0OTIsIDAuNDQ5NzIxODIwNjQ4NzcxNTMsIDAsIC03LjU2MjA3NTI3NzU5MTI4MyxcbiAgICAgICAgMCwgMCwgMCwgMSwgMFxuICAgIF07XG5cbiAgICB0aGlzLl9sb2FkTWF0cml4KG1hdHJpeCwgbXVsdGlwbHkpO1xufTtcblxuLypcbiAqIFZpbnRhZ2UgZmlsdGVyICh0aGFua3MgRG9taW5pYyBTemFibGV3c2tpKVxuICpcbiAqIEBwYXJhbSBtdWx0aXBseSB7Ym9vbGVhbn0gcmVmZXIgdG8gLl9sb2FkTWF0cml4KCkgbWV0aG9kXG4gKi9cbkNvbG9yTWF0cml4RmlsdGVyLnByb3RvdHlwZS52aW50YWdlID0gZnVuY3Rpb24gKG11bHRpcGx5KVxue1xuICAgIHZhciBtYXRyaXggPSBbXG4gICAgICAgIDAuNjI3OTM0NTYzNTYwNTk5NCwgMC4zMjAyMTgzNDIwODE5MzY3LCAtMC4wMzk2NTQwODIxMTMxMjQ1MywgMCwgOS42NTEyODU4MzUyOTQxMjMsXG4gICAgICAgIDAuMDI1NzgzOTc3MDQ4MDg4NjgsIDAuNjQ0MTE4ODY0NDM3NDc3MSwgMC4wMzI1OTEyNzYxNjE0OTI5NCwgMCwgNy40NjI4MjkxNzY0NzA1OTEsXG4gICAgICAgIDAuMDQ2NjA1NTU1Njc4MjcxOSwgLTAuMDg1MTIzMjk4NzI0Nzg5MSwgMC41MjQxNjQ4MDE4NzAwNDY1LCAwLCA1LjE1OTE5MDU4ODIzNTI5NixcbiAgICAgICAgMCwgMCwgMCwgMSwgMFxuICAgIF07XG5cbiAgICB0aGlzLl9sb2FkTWF0cml4KG1hdHJpeCwgbXVsdGlwbHkpO1xufTtcblxuLypcbiAqIFdlIGRvbid0IGtub3cgZXhhY3RseSB3aGF0IGl0IGRvZXMsIGtpbmQgb2YgZ3JhZGllbnQgbWFwLCBidXQgZnVubnkgdG8gcGxheSB3aXRoIVxuICpcbiAqIEBwYXJhbSBkZXNhdHVyYXRpb24ge251bWJlcn1cbiAqIEBwYXJhbSB0b25lZCB7bnVtYmVyfVxuICogQHBhcmFtIGxpZ2h0Q29sb3Ige3N0cmluZ30gKGV4YW1wbGUgOiBcIjB4RkZFNTgwXCIpXG4gKiBAcGFyYW0gZGFya0NvbG9yIHtzdHJpbmd9ICAoZXhhbXBsZSA6IFwiMHhGRkU1ODBcIilcbiAqXG4gKiBAcGFyYW0gbXVsdGlwbHkge2Jvb2xlYW59IHJlZmVyIHRvIC5fbG9hZE1hdHJpeCgpIG1ldGhvZFxuICovXG5Db2xvck1hdHJpeEZpbHRlci5wcm90b3R5cGUuY29sb3JUb25lID0gZnVuY3Rpb24gKGRlc2F0dXJhdGlvbiwgdG9uZWQsIGxpZ2h0Q29sb3IsIGRhcmtDb2xvciwgbXVsdGlwbHkpXG57XG4gICAgZGVzYXR1cmF0aW9uID0gZGVzYXR1cmF0aW9uIHx8IDAuMjtcbiAgICB0b25lZCA9IHRvbmVkIHx8IDAuMTU7XG4gICAgbGlnaHRDb2xvciA9IGxpZ2h0Q29sb3IgfHwgMHhGRkU1ODA7XG4gICAgZGFya0NvbG9yID0gZGFya0NvbG9yIHx8IDB4MzM4MDAwO1xuXG4gICAgdmFyIGxSID0gKChsaWdodENvbG9yID4+IDE2KSAmIDB4RkYpIC8gMjU1O1xuICAgIHZhciBsRyA9ICgobGlnaHRDb2xvciA+PiA4KSAmIDB4RkYpIC8gMjU1O1xuICAgIHZhciBsQiA9IChsaWdodENvbG9yICYgMHhGRikgLyAyNTU7XG5cbiAgICB2YXIgZFIgPSAoKGRhcmtDb2xvciA+PiAxNikgJiAweEZGKSAvIDI1NTtcbiAgICB2YXIgZEcgPSAoKGRhcmtDb2xvciA+PiA4KSAmIDB4RkYpIC8gMjU1O1xuICAgIHZhciBkQiA9IChkYXJrQ29sb3IgJiAweEZGKSAvIDI1NTtcblxuICAgIHZhciBtYXRyaXggPSBbXG4gICAgICAgIDAuMywgMC41OSwgMC4xMSwgMCwgMCxcbiAgICAgICAgbFIsIGxHLCBsQiwgZGVzYXR1cmF0aW9uLCAwLFxuICAgICAgICBkUiwgZEcsIGRCLCB0b25lZCwgMCxcbiAgICAgICAgbFIgLSBkUiwgbEcgLSBkRywgbEIgLSBkQiwgMCwgMFxuICAgIF07XG5cbiAgICB0aGlzLl9sb2FkTWF0cml4KG1hdHJpeCwgbXVsdGlwbHkpO1xufTtcblxuLypcbiAqIE5pZ2h0IGVmZmVjdFxuICpcbiAqIEBwYXJhbSBpbnRlbnNpdHkge251bWJlcn1cbiAqIEBwYXJhbSBtdWx0aXBseSB7Ym9vbGVhbn0gcmVmZXIgdG8gLl9sb2FkTWF0cml4KCkgbWV0aG9kXG4gKi9cbkNvbG9yTWF0cml4RmlsdGVyLnByb3RvdHlwZS5uaWdodCA9IGZ1bmN0aW9uIChpbnRlbnNpdHksIG11bHRpcGx5KVxue1xuICAgIGludGVuc2l0eSA9IGludGVuc2l0eSB8fCAwLjE7XG4gICAgdmFyIG1hdHJpeCA9IFtcbiAgICAgICAgaW50ZW5zaXR5ICogKCAtMi4wKSwgLWludGVuc2l0eSwgMCwgMCwgMCxcbiAgICAgICAgLWludGVuc2l0eSwgMCwgaW50ZW5zaXR5LCAwLCAwLFxuICAgICAgICAwLCBpbnRlbnNpdHksIGludGVuc2l0eSAqIDIuMCwgMCwgMCxcbiAgICAgICAgMCwgMCwgMCwgMSwgMFxuICAgIF07XG5cbiAgICB0aGlzLl9sb2FkTWF0cml4KG1hdHJpeCwgbXVsdGlwbHkpO1xufTtcblxuXG4vKlxuICogUHJlZGF0b3IgZWZmZWN0XG4gKlxuICogRXJhc2UgdGhlIGN1cnJlbnQgbWF0cml4IGJ5IHNldHRpbmcgYSBuZXcgaW5kZXBlbnQgb25lXG4gKlxuICogQHBhcmFtIGFtb3VudCB7bnVtYmVyfSBob3cgbXVjaCB0aGUgcHJlZGF0b3IgZmVlbHMgaGlzIGZ1dHVyZSB2aWN0aW1cbiAqIEBwYXJhbSBtdWx0aXBseSB7Ym9vbGVhbn0gcmVmZXIgdG8gLl9sb2FkTWF0cml4KCkgbWV0aG9kXG4gKi9cbkNvbG9yTWF0cml4RmlsdGVyLnByb3RvdHlwZS5wcmVkYXRvciA9IGZ1bmN0aW9uIChhbW91bnQsIG11bHRpcGx5KVxue1xuICAgIHZhciBtYXRyaXggPSBbXG4gICAgICAgIDExLjIyNDEzMDYzMDQ5MzE2NCAqIGFtb3VudCwgLTQuNzk0NDg2OTk5NTExNzE5ICogYW1vdW50LCAtMi44NzQ2MTE4NTQ1NTMyMjI3ICogYW1vdW50LCAwICogYW1vdW50LCAwLjQwMzQyNDM4MjIwOTc3NzgzICogYW1vdW50LFxuICAgICAgICAtMy42MzMwNjk3NTM2NDY4NTA2ICogYW1vdW50LCA5LjE5MzE1NzE5NjA0NDkyMiAqIGFtb3VudCwgLTIuOTUxODEwODM2NzkxOTkyICogYW1vdW50LCAwICogYW1vdW50LCAtMS4zMTYxMzUwNDg4NjYyNzIgKiBhbW91bnQsXG4gICAgICAgIC0zLjIxODQxOTc5MDI2Nzk0NDMgKiBhbW91bnQsIC00LjIzNzUwMzA1MTc1NzgxMjUgKiBhbW91bnQsIDcuNDc2NDQ4MDU5MDgyMDMxICogYW1vdW50LCAwICogYW1vdW50LCAwLjgwNDQ0NTkyMjM3NDcyNTMgKiBhbW91bnQsXG4gICAgICAgIDAsIDAsIDAsIDEsIDBcbiAgICBdO1xuXG4gICAgdGhpcy5fbG9hZE1hdHJpeChtYXRyaXgsIG11bHRpcGx5KTtcbn07XG5cbi8qXG4gKiBMU0QgZWZmZWN0XG4gKlxuICogTXVsdGlwbHkgdGhlIGN1cnJlbnQgbWF0cml4XG4gKlxuICogQHBhcmFtIGFtb3VudCB7bnVtYmVyfSBIb3cgY3JhenkgaXMgeW91ciBlZmZlY3RcbiAqIEBwYXJhbSBtdWx0aXBseSB7Ym9vbGVhbn0gcmVmZXIgdG8gLl9sb2FkTWF0cml4KCkgbWV0aG9kXG4gKi9cbkNvbG9yTWF0cml4RmlsdGVyLnByb3RvdHlwZS5sc2QgPSBmdW5jdGlvbiAobXVsdGlwbHkpXG57XG4gICAgdmFyIG1hdHJpeCA9IFtcbiAgICAgICAgMiwgLTAuNCwgMC41LCAwLCAwLFxuICAgICAgICAtMC41LCAyLCAtMC40LCAwLCAwLFxuICAgICAgICAtMC40LCAtMC41LCAzLCAwLCAwLFxuICAgICAgICAwLCAwLCAwLCAxLCAwXG4gICAgXTtcblxuICAgIHRoaXMuX2xvYWRNYXRyaXgobWF0cml4LCBtdWx0aXBseSk7XG59O1xuXG4vKlxuICogRXJhc2UgdGhlIGN1cnJlbnQgbWF0cml4IGJ5IHNldHRpbmcgdGhlIGRlZmF1bHQgb25lXG4gKlxuICovXG5Db2xvck1hdHJpeEZpbHRlci5wcm90b3R5cGUucmVzZXQgPSBmdW5jdGlvbiAoKVxue1xuICAgIHZhciBtYXRyaXggPSBbXG4gICAgICAgIDEsIDAsIDAsIDAsIDAsXG4gICAgICAgIDAsIDEsIDAsIDAsIDAsXG4gICAgICAgIDAsIDAsIDEsIDAsIDAsXG4gICAgICAgIDAsIDAsIDAsIDEsIDBcbiAgICBdO1xuXG4gICAgdGhpcy5fbG9hZE1hdHJpeChtYXRyaXgsIGZhbHNlKTtcbn07XG5cblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoQ29sb3JNYXRyaXhGaWx0ZXIucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgbWF0cml4IG9mIHRoZSBjb2xvciBtYXRyaXggZmlsdGVyXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJbXX1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLkNvbG9yTWF0cml4RmlsdGVyI1xuICAgICAqIEBkZWZhdWx0IFsxLCAwLCAwLCAwLCAwLCAwLCAxLCAwLCAwLCAwLCAwLCAwLCAxLCAwLCAwLCAwLCAwLCAwLCAxLCAwXVxuICAgICAqL1xuICAgIG1hdHJpeDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVuaWZvcm1zLm0udmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLm0udmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi8uLi9jb3JlJyk7XG4vLyBAc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9zdWJzdGFjay9icmZzL2lzc3Vlcy8yNVxuXG5cbi8qKlxuICogVGhpcyBsb3dlcnMgdGhlIGNvbG9yIGRlcHRoIG9mIHlvdXIgaW1hZ2UgYnkgdGhlIGdpdmVuIGFtb3VudCwgcHJvZHVjaW5nIGFuIGltYWdlIHdpdGggYSBzbWFsbGVyIHBhbGV0dGUuXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLkFic3RyYWN0RmlsdGVyXG4gKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzXG4gKi9cbmZ1bmN0aW9uIENvbG9yU3RlcEZpbHRlcigpXG57XG4gICAgY29yZS5BYnN0cmFjdEZpbHRlci5jYWxsKHRoaXMsXG4gICAgICAgIC8vIHZlcnRleCBzaGFkZXJcbiAgICAgICAgbnVsbCxcbiAgICAgICAgLy8gZnJhZ21lbnQgc2hhZGVyXG4gICAgICAgIFwicHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XFxuXFxudmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7XFxuXFxudW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXI7XFxudW5pZm9ybSBmbG9hdCBzdGVwO1xcblxcbnZvaWQgbWFpbih2b2lkKVxcbntcXG4gICAgdmVjNCBjb2xvciA9IHRleHR1cmUyRCh1U2FtcGxlciwgdlRleHR1cmVDb29yZCk7XFxuXFxuICAgIGNvbG9yID0gZmxvb3IoY29sb3IgKiBzdGVwKSAvIHN0ZXA7XFxuXFxuICAgIGdsX0ZyYWdDb2xvciA9IGNvbG9yO1xcbn1cXG5cIixcbiAgICAgICAgLy8gY3VzdG9tIHVuaWZvcm1zXG4gICAgICAgIHtcbiAgICAgICAgICAgIHN0ZXA6IHsgdHlwZTogJzFmJywgdmFsdWU6IDUgfVxuICAgICAgICB9XG4gICAgKTtcbn1cblxuQ29sb3JTdGVwRmlsdGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoY29yZS5BYnN0cmFjdEZpbHRlci5wcm90b3R5cGUpO1xuQ29sb3JTdGVwRmlsdGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IENvbG9yU3RlcEZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gQ29sb3JTdGVwRmlsdGVyO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhDb2xvclN0ZXBGaWx0ZXIucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogVGhlIG51bWJlciBvZiBzdGVwcyB0byByZWR1Y2UgdGhlIHBhbGV0dGUgYnkuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5Db2xvclN0ZXBGaWx0ZXIjXG4gICAgICovXG4gICAgc3RlcDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVuaWZvcm1zLnN0ZXAudmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLnN0ZXAudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi8uLi9jb3JlJyk7XG4vLyBAc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9zdWJzdGFjay9icmZzL2lzc3Vlcy8yNVxuXG5cbi8qKlxuICogVGhlIENvbnZvbHV0aW9uRmlsdGVyIGNsYXNzIGFwcGxpZXMgYSBtYXRyaXggY29udm9sdXRpb24gZmlsdGVyIGVmZmVjdC5cbiAqIEEgY29udm9sdXRpb24gY29tYmluZXMgcGl4ZWxzIGluIHRoZSBpbnB1dCBpbWFnZSB3aXRoIG5laWdoYm9yaW5nIHBpeGVscyB0byBwcm9kdWNlIGEgbmV3IGltYWdlLlxuICogQSB3aWRlIHZhcmlldHkgb2YgaW1hZ2UgZWZmZWN0cyBjYW4gYmUgYWNoaWV2ZWQgdGhyb3VnaCBjb252b2x1dGlvbnMsIGluY2x1ZGluZyBibHVycmluZywgZWRnZVxuICogZGV0ZWN0aW9uLCBzaGFycGVuaW5nLCBlbWJvc3NpbmcsIGFuZCBiZXZlbGluZy4gVGhlIG1hdHJpeCBzaG91bGQgYmUgc3BlY2lmaWVkIGFzIGEgOSBwb2ludCBBcnJheS5cbiAqIFNlZSBodHRwOi8vZG9jcy5naW1wLm9yZy9lbi9wbHVnLWluLWNvbnZtYXRyaXguaHRtbCBmb3IgbW9yZSBpbmZvLlxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5BYnN0cmFjdEZpbHRlclxuICogQG1lbWJlcm9mIFBJWEkuZmlsdGVyc1xuICogQHBhcmFtIG1hdHJpeCB7bnVtYmVyW119IEFuIGFycmF5IG9mIHZhbHVlcyB1c2VkIGZvciBtYXRyaXggdHJhbnNmb3JtYXRpb24uIFNwZWNpZmllZCBhcyBhIDkgcG9pbnQgQXJyYXkuXG4gKiBAcGFyYW0gd2lkdGgge251bWJlcn0gV2lkdGggb2YgdGhlIG9iamVjdCB5b3UgYXJlIHRyYW5zZm9ybWluZ1xuICogQHBhcmFtIGhlaWdodCB7bnVtYmVyfSBIZWlnaHQgb2YgdGhlIG9iamVjdCB5b3UgYXJlIHRyYW5zZm9ybWluZ1xuICovXG5mdW5jdGlvbiBDb252b2x1dGlvbkZpbHRlcihtYXRyaXgsIHdpZHRoLCBoZWlnaHQpXG57XG4gICAgY29yZS5BYnN0cmFjdEZpbHRlci5jYWxsKHRoaXMsXG4gICAgICAgIC8vIHZlcnRleCBzaGFkZXJcbiAgICAgICAgbnVsbCxcbiAgICAgICAgLy8gZnJhZ21lbnQgc2hhZGVyXG4gICAgICAgIFwicHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XFxuXFxudmFyeWluZyBtZWRpdW1wIHZlYzIgdlRleHR1cmVDb29yZDtcXG5cXG51bmlmb3JtIHNhbXBsZXIyRCB1U2FtcGxlcjtcXG51bmlmb3JtIHZlYzIgdGV4ZWxTaXplO1xcbnVuaWZvcm0gZmxvYXQgbWF0cml4WzldO1xcblxcbnZvaWQgbWFpbih2b2lkKVxcbntcXG4gICB2ZWM0IGMxMSA9IHRleHR1cmUyRCh1U2FtcGxlciwgdlRleHR1cmVDb29yZCAtIHRleGVsU2l6ZSk7IC8vIHRvcCBsZWZ0XFxuICAgdmVjNCBjMTIgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZlYzIodlRleHR1cmVDb29yZC54LCB2VGV4dHVyZUNvb3JkLnkgLSB0ZXhlbFNpemUueSkpOyAvLyB0b3AgY2VudGVyXFxuICAgdmVjNCBjMTMgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZlYzIodlRleHR1cmVDb29yZC54ICsgdGV4ZWxTaXplLngsIHZUZXh0dXJlQ29vcmQueSAtIHRleGVsU2l6ZS55KSk7IC8vIHRvcCByaWdodFxcblxcbiAgIHZlYzQgYzIxID0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2ZWMyKHZUZXh0dXJlQ29vcmQueCAtIHRleGVsU2l6ZS54LCB2VGV4dHVyZUNvb3JkLnkpKTsgLy8gbWlkIGxlZnRcXG4gICB2ZWM0IGMyMiA9IHRleHR1cmUyRCh1U2FtcGxlciwgdlRleHR1cmVDb29yZCk7IC8vIG1pZCBjZW50ZXJcXG4gICB2ZWM0IGMyMyA9IHRleHR1cmUyRCh1U2FtcGxlciwgdmVjMih2VGV4dHVyZUNvb3JkLnggKyB0ZXhlbFNpemUueCwgdlRleHR1cmVDb29yZC55KSk7IC8vIG1pZCByaWdodFxcblxcbiAgIHZlYzQgYzMxID0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2ZWMyKHZUZXh0dXJlQ29vcmQueCAtIHRleGVsU2l6ZS54LCB2VGV4dHVyZUNvb3JkLnkgKyB0ZXhlbFNpemUueSkpOyAvLyBib3R0b20gbGVmdFxcbiAgIHZlYzQgYzMyID0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2ZWMyKHZUZXh0dXJlQ29vcmQueCwgdlRleHR1cmVDb29yZC55ICsgdGV4ZWxTaXplLnkpKTsgLy8gYm90dG9tIGNlbnRlclxcbiAgIHZlYzQgYzMzID0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2VGV4dHVyZUNvb3JkICsgdGV4ZWxTaXplKTsgLy8gYm90dG9tIHJpZ2h0XFxuXFxuICAgZ2xfRnJhZ0NvbG9yID1cXG4gICAgICAgYzExICogbWF0cml4WzBdICsgYzEyICogbWF0cml4WzFdICsgYzEzICogbWF0cml4WzJdICtcXG4gICAgICAgYzIxICogbWF0cml4WzNdICsgYzIyICogbWF0cml4WzRdICsgYzIzICogbWF0cml4WzVdICtcXG4gICAgICAgYzMxICogbWF0cml4WzZdICsgYzMyICogbWF0cml4WzddICsgYzMzICogbWF0cml4WzhdO1xcblxcbiAgIGdsX0ZyYWdDb2xvci5hID0gYzIyLmE7XFxufVxcblwiLFxuICAgICAgICAvLyBjdXN0b20gdW5pZm9ybXNcbiAgICAgICAge1xuICAgICAgICAgICAgbWF0cml4OiAgICAgeyB0eXBlOiAnMWZ2JywgdmFsdWU6IG5ldyBGbG9hdDMyQXJyYXkobWF0cml4KSB9LFxuICAgICAgICAgICAgdGV4ZWxTaXplOiAgeyB0eXBlOiAndjInLCB2YWx1ZTogeyB4OiAxIC8gd2lkdGgsIHk6IDEgLyBoZWlnaHQgfSB9XG4gICAgICAgIH1cbiAgICApO1xufVxuXG5Db252b2x1dGlvbkZpbHRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuQWJzdHJhY3RGaWx0ZXIucHJvdG90eXBlKTtcbkNvbnZvbHV0aW9uRmlsdGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IENvbnZvbHV0aW9uRmlsdGVyO1xubW9kdWxlLmV4cG9ydHMgPSBDb252b2x1dGlvbkZpbHRlcjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoQ29udm9sdXRpb25GaWx0ZXIucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogQW4gYXJyYXkgb2YgdmFsdWVzIHVzZWQgZm9yIG1hdHJpeCB0cmFuc2Zvcm1hdGlvbi4gU3BlY2lmaWVkIGFzIGEgOSBwb2ludCBBcnJheS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcltdfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuQ29udm9sdXRpb25GaWx0ZXIjXG4gICAgICovXG4gICAgbWF0cml4OiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudW5pZm9ybXMubWF0cml4LnZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy5tYXRyaXgudmFsdWUgPSBuZXcgRmxvYXQzMkFycmF5KHZhbHVlKTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBXaWR0aCBvZiB0aGUgb2JqZWN0IHlvdSBhcmUgdHJhbnNmb3JtaW5nXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5Db252b2x1dGlvbkZpbHRlciNcbiAgICAgKi9cbiAgICB3aWR0aDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiAxL3RoaXMudW5pZm9ybXMudGV4ZWxTaXplLnZhbHVlLng7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLnRleGVsU2l6ZS52YWx1ZS54ID0gMS92YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBIZWlnaHQgb2YgdGhlIG9iamVjdCB5b3UgYXJlIHRyYW5zZm9ybWluZ1xuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuQ29udm9sdXRpb25GaWx0ZXIjXG4gICAgICovXG4gICAgaGVpZ2h0OiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIDEvdGhpcy51bmlmb3Jtcy50ZXhlbFNpemUudmFsdWUueTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudW5pZm9ybXMudGV4ZWxTaXplLnZhbHVlLnkgPSAxL3ZhbHVlO1xuICAgICAgICB9XG4gICAgfVxufSk7XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uLy4uL2NvcmUnKTtcbi8vIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL3N1YnN0YWNrL2JyZnMvaXNzdWVzLzI1XG5cblxuLyoqXG4gKiBBIENyb3NzIEhhdGNoIGVmZmVjdCBmaWx0ZXIuXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLkFic3RyYWN0RmlsdGVyXG4gKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzXG4gKi9cbmZ1bmN0aW9uIENyb3NzSGF0Y2hGaWx0ZXIoKVxue1xuICAgIGNvcmUuQWJzdHJhY3RGaWx0ZXIuY2FsbCh0aGlzLFxuICAgICAgICAvLyB2ZXJ0ZXggc2hhZGVyXG4gICAgICAgIG51bGwsXG4gICAgICAgIC8vIGZyYWdtZW50IHNoYWRlclxuICAgICAgICBcInByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xcblxcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xcblxcbnVuaWZvcm0gc2FtcGxlcjJEIHVTYW1wbGVyO1xcblxcbnZvaWQgbWFpbih2b2lkKVxcbntcXG4gICAgZmxvYXQgbHVtID0gbGVuZ3RoKHRleHR1cmUyRCh1U2FtcGxlciwgdlRleHR1cmVDb29yZC54eSkucmdiKTtcXG5cXG4gICAgZ2xfRnJhZ0NvbG9yID0gdmVjNCgxLjAsIDEuMCwgMS4wLCAxLjApO1xcblxcbiAgICBpZiAobHVtIDwgMS4wMClcXG4gICAge1xcbiAgICAgICAgaWYgKG1vZChnbF9GcmFnQ29vcmQueCArIGdsX0ZyYWdDb29yZC55LCAxMC4wKSA9PSAwLjApXFxuICAgICAgICB7XFxuICAgICAgICAgICAgZ2xfRnJhZ0NvbG9yID0gdmVjNCgwLjAsIDAuMCwgMC4wLCAxLjApO1xcbiAgICAgICAgfVxcbiAgICB9XFxuXFxuICAgIGlmIChsdW0gPCAwLjc1KVxcbiAgICB7XFxuICAgICAgICBpZiAobW9kKGdsX0ZyYWdDb29yZC54IC0gZ2xfRnJhZ0Nvb3JkLnksIDEwLjApID09IDAuMClcXG4gICAgICAgIHtcXG4gICAgICAgICAgICBnbF9GcmFnQ29sb3IgPSB2ZWM0KDAuMCwgMC4wLCAwLjAsIDEuMCk7XFxuICAgICAgICB9XFxuICAgIH1cXG5cXG4gICAgaWYgKGx1bSA8IDAuNTApXFxuICAgIHtcXG4gICAgICAgIGlmIChtb2QoZ2xfRnJhZ0Nvb3JkLnggKyBnbF9GcmFnQ29vcmQueSAtIDUuMCwgMTAuMCkgPT0gMC4wKVxcbiAgICAgICAge1xcbiAgICAgICAgICAgIGdsX0ZyYWdDb2xvciA9IHZlYzQoMC4wLCAwLjAsIDAuMCwgMS4wKTtcXG4gICAgICAgIH1cXG4gICAgfVxcblxcbiAgICBpZiAobHVtIDwgMC4zKVxcbiAgICB7XFxuICAgICAgICBpZiAobW9kKGdsX0ZyYWdDb29yZC54IC0gZ2xfRnJhZ0Nvb3JkLnkgLSA1LjAsIDEwLjApID09IDAuMClcXG4gICAgICAgIHtcXG4gICAgICAgICAgICBnbF9GcmFnQ29sb3IgPSB2ZWM0KDAuMCwgMC4wLCAwLjAsIDEuMCk7XFxuICAgICAgICB9XFxuICAgIH1cXG59XFxuXCJcbiAgICApO1xufVxuXG5Dcm9zc0hhdGNoRmlsdGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoY29yZS5BYnN0cmFjdEZpbHRlci5wcm90b3R5cGUpO1xuQ3Jvc3NIYXRjaEZpbHRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBDcm9zc0hhdGNoRmlsdGVyO1xubW9kdWxlLmV4cG9ydHMgPSBDcm9zc0hhdGNoRmlsdGVyO1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi8uLi9jb3JlJyk7XG4vLyBAc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9zdWJzdGFjay9icmZzL2lzc3Vlcy8yNVxuXG5cbi8qKlxuICogVGhlIERpc3BsYWNlbWVudEZpbHRlciBjbGFzcyB1c2VzIHRoZSBwaXhlbCB2YWx1ZXMgZnJvbSB0aGUgc3BlY2lmaWVkIHRleHR1cmUgKGNhbGxlZCB0aGUgZGlzcGxhY2VtZW50IG1hcCkgdG8gcGVyZm9ybSBhIGRpc3BsYWNlbWVudCBvZiBhbiBvYmplY3QuXG4gKiBZb3UgY2FuIHVzZSB0aGlzIGZpbHRlciB0byBhcHBseSBhbGwgbWFub3Igb2YgY3Jhenkgd2FycGluZyBlZmZlY3RzXG4gKiBDdXJyZW50bHkgdGhlIHIgcHJvcGVydHkgb2YgdGhlIHRleHR1cmUgaXMgdXNlZCB0byBvZmZzZXQgdGhlIHggYW5kIHRoZSBnIHByb3BlcnR5IG9mIHRoZSB0ZXh0dXJlIGlzIHVzZWQgdG8gb2Zmc2V0IHRoZSB5LlxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5BYnN0cmFjdEZpbHRlclxuICogQG1lbWJlcm9mIFBJWEkuZmlsdGVyc1xuICogQHBhcmFtIHNwcml0ZSB7UElYSS5TcHJpdGV9IHRoZSBzcHJpdGUgdXNlZCBmb3IgdGhlIGRpc3BsYWNlbWVudCBtYXAuIChtYWtlIHN1cmUgaXRzIGFkZGVkIHRvIHRoZSBzY2VuZSEpXG4gKi9cbmZ1bmN0aW9uIERpc3BsYWNlbWVudEZpbHRlcihzcHJpdGUsIHNjYWxlKVxue1xuICAgIHZhciBtYXNrTWF0cml4ID0gbmV3IGNvcmUuTWF0cml4KCk7XG4gICAgc3ByaXRlLnJlbmRlcmFibGUgPSBmYWxzZTtcblxuICAgIGNvcmUuQWJzdHJhY3RGaWx0ZXIuY2FsbCh0aGlzLFxuICAgICAgICAvLyB2ZXJ0ZXggc2hhZGVyXG4gICAgICAgIFwiYXR0cmlidXRlIHZlYzIgYVZlcnRleFBvc2l0aW9uO1xcbmF0dHJpYnV0ZSB2ZWMyIGFUZXh0dXJlQ29vcmQ7XFxuYXR0cmlidXRlIHZlYzQgYUNvbG9yO1xcblxcbnVuaWZvcm0gbWF0MyBwcm9qZWN0aW9uTWF0cml4O1xcbnVuaWZvcm0gbWF0MyBvdGhlck1hdHJpeDtcXG5cXG52YXJ5aW5nIHZlYzIgdk1hcENvb3JkO1xcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xcbnZhcnlpbmcgdmVjNCB2Q29sb3I7XFxuXFxudm9pZCBtYWluKHZvaWQpXFxue1xcbiAgIGdsX1Bvc2l0aW9uID0gdmVjNCgocHJvamVjdGlvbk1hdHJpeCAqIHZlYzMoYVZlcnRleFBvc2l0aW9uLCAxLjApKS54eSwgMC4wLCAxLjApO1xcbiAgIHZUZXh0dXJlQ29vcmQgPSBhVGV4dHVyZUNvb3JkO1xcbiAgIHZNYXBDb29yZCA9ICggb3RoZXJNYXRyaXggKiB2ZWMzKCBhVGV4dHVyZUNvb3JkLCAxLjApICApLnh5O1xcbiAgIHZDb2xvciA9IHZlYzQoYUNvbG9yLnJnYiAqIGFDb2xvci5hLCBhQ29sb3IuYSk7XFxufVxcblwiLFxuICAgICAgICAvLyBmcmFnbWVudCBzaGFkZXJcbiAgICAgICAgXCJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcXG5cXG52YXJ5aW5nIHZlYzIgdk1hcENvb3JkO1xcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xcbnZhcnlpbmcgdmVjNCB2Q29sb3I7XFxuXFxudW5pZm9ybSB2ZWMyIHNjYWxlO1xcblxcbnVuaWZvcm0gc2FtcGxlcjJEIHVTYW1wbGVyO1xcbnVuaWZvcm0gc2FtcGxlcjJEIG1hcFNhbXBsZXI7XFxuXFxudm9pZCBtYWluKHZvaWQpXFxue1xcbiAgIHZlYzQgbWFwID0gIHRleHR1cmUyRChtYXBTYW1wbGVyLCB2TWFwQ29vcmQpO1xcblxcbiAgIG1hcCAtPSAwLjU7XFxuICAgbWFwLnh5ICo9IHNjYWxlO1xcblxcbiAgIGdsX0ZyYWdDb2xvciA9IHRleHR1cmUyRCh1U2FtcGxlciwgdmVjMih2VGV4dHVyZUNvb3JkLnggKyBtYXAueCwgdlRleHR1cmVDb29yZC55ICsgbWFwLnkpKTtcXG59XFxuXCIsXG4gICAgICAgIC8vIHVuaWZvcm1zXG4gICAgICAgIHtcbiAgICAgICAgICAgIG1hcFNhbXBsZXI6ICAgICB7IHR5cGU6ICdzYW1wbGVyMkQnLCB2YWx1ZTogc3ByaXRlLnRleHR1cmUgfSxcbiAgICAgICAgICAgIG90aGVyTWF0cml4OiAgICB7IHR5cGU6ICdtYXQzJywgdmFsdWU6IG1hc2tNYXRyaXgudG9BcnJheSh0cnVlKSB9LFxuICAgICAgICAgICAgc2NhbGU6ICAgICAgICAgIHsgdHlwZTogJ3YyJywgdmFsdWU6IHsgeDogMSwgeTogMSB9IH1cbiAgICAgICAgfVxuICAgICk7XG5cbiAgICB0aGlzLm1hc2tTcHJpdGUgPSBzcHJpdGU7XG4gICAgdGhpcy5tYXNrTWF0cml4ID0gbWFza01hdHJpeDtcblxuICAgIGlmIChzY2FsZSA9PT0gbnVsbCB8fCBzY2FsZSA9PT0gdW5kZWZpbmVkKVxuICAgIHtcbiAgICAgICAgc2NhbGUgPSAyMDtcbiAgICB9XG5cbiAgICB0aGlzLnNjYWxlID0gbmV3IGNvcmUuUG9pbnQoc2NhbGUsIHNjYWxlKTtcbn1cblxuRGlzcGxhY2VtZW50RmlsdGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoY29yZS5BYnN0cmFjdEZpbHRlci5wcm90b3R5cGUpO1xuRGlzcGxhY2VtZW50RmlsdGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IERpc3BsYWNlbWVudEZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gRGlzcGxhY2VtZW50RmlsdGVyO1xuXG5EaXNwbGFjZW1lbnRGaWx0ZXIucHJvdG90eXBlLmFwcGx5RmlsdGVyID0gZnVuY3Rpb24gKHJlbmRlcmVyLCBpbnB1dCwgb3V0cHV0KVxue1xuICAgIHZhciBmaWx0ZXJNYW5hZ2VyID0gcmVuZGVyZXIuZmlsdGVyTWFuYWdlcjtcblxuICAgIGZpbHRlck1hbmFnZXIuY2FsY3VsYXRlTWFwcGVkTWF0cml4KGlucHV0LmZyYW1lLCB0aGlzLm1hc2tTcHJpdGUsIHRoaXMubWFza01hdHJpeCk7XG5cbiAgICB0aGlzLnVuaWZvcm1zLm90aGVyTWF0cml4LnZhbHVlID0gdGhpcy5tYXNrTWF0cml4LnRvQXJyYXkodHJ1ZSk7XG4gICAgdGhpcy51bmlmb3Jtcy5zY2FsZS52YWx1ZS54ID0gdGhpcy5zY2FsZS54ICogKDEvaW5wdXQuZnJhbWUud2lkdGgpO1xuICAgIHRoaXMudW5pZm9ybXMuc2NhbGUudmFsdWUueSA9IHRoaXMuc2NhbGUueSAqICgxL2lucHV0LmZyYW1lLmhlaWdodCk7XG5cbiAgICB2YXIgc2hhZGVyID0gdGhpcy5nZXRTaGFkZXIocmVuZGVyZXIpO1xuICAgICAvLyBkcmF3IHRoZSBmaWx0ZXIuLi5cbiAgICBmaWx0ZXJNYW5hZ2VyLmFwcGx5RmlsdGVyKHNoYWRlciwgaW5wdXQsIG91dHB1dCk7XG59O1xuXG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKERpc3BsYWNlbWVudEZpbHRlci5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBUaGUgdGV4dHVyZSB1c2VkIGZvciB0aGUgZGlzcGxhY2VtZW50IG1hcC4gTXVzdCBiZSBwb3dlciBvZiAyIHNpemVkIHRleHR1cmUuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlRleHR1cmV9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5EaXNwbGFjZW1lbnRGaWx0ZXIjXG4gICAgICovXG4gICAgbWFwOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudW5pZm9ybXMubWFwU2FtcGxlci52YWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudW5pZm9ybXMubWFwU2FtcGxlci52YWx1ZSA9IHZhbHVlO1xuXG4gICAgICAgIH1cbiAgICB9XG59KTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vLi4vY29yZScpO1xuLy8gQHNlZSBodHRwczovL2dpdGh1Yi5jb20vc3Vic3RhY2svYnJmcy9pc3N1ZXMvMjVcblxuXG4vKipcbiAqIEBhdXRob3IgTWF0IEdyb3ZlcyBodHRwOi8vbWF0Z3JvdmVzLmNvbS8gQERvb3JtYXQyM1xuICogb3JpZ2luYWwgZmlsdGVyOiBodHRwczovL2dpdGh1Yi5jb20vZXZhbncvZ2xmeC5qcy9ibG9iL21hc3Rlci9zcmMvZmlsdGVycy9mdW4vZG90c2NyZWVuLmpzXG4gKi9cblxuLyoqXG4gKiBUaGlzIGZpbHRlciBhcHBsaWVzIGEgZG90c2NyZWVuIGVmZmVjdCBtYWtpbmcgZGlzcGxheSBvYmplY3RzIGFwcGVhciB0byBiZSBtYWRlIG91dCBvZlxuICogYmxhY2sgYW5kIHdoaXRlIGhhbGZ0b25lIGRvdHMgbGlrZSBhbiBvbGQgcHJpbnRlci5cbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQWJzdHJhY3RGaWx0ZXJcbiAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnNcbiAqL1xuZnVuY3Rpb24gRG90U2NyZWVuRmlsdGVyKClcbntcbiAgICBjb3JlLkFic3RyYWN0RmlsdGVyLmNhbGwodGhpcyxcbiAgICAgICAgLy8gdmVydGV4IHNoYWRlclxuICAgICAgICBudWxsLFxuICAgICAgICAvLyBmcmFnbWVudCBzaGFkZXJcbiAgICAgICAgXCJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcXG5cXG52YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDtcXG52YXJ5aW5nIHZlYzQgdkNvbG9yO1xcblxcbnVuaWZvcm0gdmVjNCBkaW1lbnNpb25zO1xcbnVuaWZvcm0gc2FtcGxlcjJEIHVTYW1wbGVyO1xcblxcbnVuaWZvcm0gZmxvYXQgYW5nbGU7XFxudW5pZm9ybSBmbG9hdCBzY2FsZTtcXG5cXG5mbG9hdCBwYXR0ZXJuKClcXG57XFxuICAgZmxvYXQgcyA9IHNpbihhbmdsZSksIGMgPSBjb3MoYW5nbGUpO1xcbiAgIHZlYzIgdGV4ID0gdlRleHR1cmVDb29yZCAqIGRpbWVuc2lvbnMueHk7XFxuICAgdmVjMiBwb2ludCA9IHZlYzIoXFxuICAgICAgIGMgKiB0ZXgueCAtIHMgKiB0ZXgueSxcXG4gICAgICAgcyAqIHRleC54ICsgYyAqIHRleC55XFxuICAgKSAqIHNjYWxlO1xcbiAgIHJldHVybiAoc2luKHBvaW50LngpICogc2luKHBvaW50LnkpKSAqIDQuMDtcXG59XFxuXFxudm9pZCBtYWluKClcXG57XFxuICAgdmVjNCBjb2xvciA9IHRleHR1cmUyRCh1U2FtcGxlciwgdlRleHR1cmVDb29yZCk7XFxuICAgZmxvYXQgYXZlcmFnZSA9IChjb2xvci5yICsgY29sb3IuZyArIGNvbG9yLmIpIC8gMy4wO1xcbiAgIGdsX0ZyYWdDb2xvciA9IHZlYzQodmVjMyhhdmVyYWdlICogMTAuMCAtIDUuMCArIHBhdHRlcm4oKSksIGNvbG9yLmEpO1xcbn1cXG5cIixcbiAgICAgICAgLy8gY3VzdG9tIHVuaWZvcm1zXG4gICAgICAgIHtcbiAgICAgICAgICAgIHNjYWxlOiAgICAgIHsgdHlwZTogJzFmJywgdmFsdWU6IDEgfSxcbiAgICAgICAgICAgIGFuZ2xlOiAgICAgIHsgdHlwZTogJzFmJywgdmFsdWU6IDUgfSxcbiAgICAgICAgICAgIGRpbWVuc2lvbnM6IHsgdHlwZTogJzRmdicsIHZhbHVlOiBbMCwgMCwgMCwgMF0gfVxuICAgICAgICB9XG4gICAgKTtcbn1cblxuRG90U2NyZWVuRmlsdGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoY29yZS5BYnN0cmFjdEZpbHRlci5wcm90b3R5cGUpO1xuRG90U2NyZWVuRmlsdGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IERvdFNjcmVlbkZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gRG90U2NyZWVuRmlsdGVyO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhEb3RTY3JlZW5GaWx0ZXIucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogVGhlIHNjYWxlIG9mIHRoZSBlZmZlY3QuXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuRG90U2NyZWVuRmlsdGVyI1xuICAgICAqL1xuICAgIHNjYWxlOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudW5pZm9ybXMuc2NhbGUudmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLnNjYWxlLnZhbHVlID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVGhlIHJhZGl1cyBvZiB0aGUgZWZmZWN0LlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLkRvdFNjcmVlbkZpbHRlciNcbiAgICAgKi9cbiAgICBhbmdsZToge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVuaWZvcm1zLmFuZ2xlLnZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy5hbmdsZS52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfVxufSk7XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uLy4uL2NvcmUnKTtcblxuLy8gQHNlZSBodHRwczovL2dpdGh1Yi5jb20vc3Vic3RhY2svYnJmcy9pc3N1ZXMvMjVcblxuXG4vKipcbiAqIFRoZSBCbHVyWVRpbnRGaWx0ZXIgYXBwbGllcyBhIHZlcnRpY2FsIEdhdXNzaWFuIGJsdXIgdG8gYW4gb2JqZWN0LlxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5BYnN0cmFjdEZpbHRlclxuICogQG1lbWJlcm9mIFBJWEkuZmlsdGVyc1xuICovXG5mdW5jdGlvbiBCbHVyWVRpbnRGaWx0ZXIoKVxue1xuICAgIGNvcmUuQWJzdHJhY3RGaWx0ZXIuY2FsbCh0aGlzLFxuICAgICAgICAvLyB2ZXJ0ZXggc2hhZGVyXG4gICAgICAgIFwiYXR0cmlidXRlIHZlYzIgYVZlcnRleFBvc2l0aW9uO1xcbmF0dHJpYnV0ZSB2ZWMyIGFUZXh0dXJlQ29vcmQ7XFxuYXR0cmlidXRlIHZlYzQgYUNvbG9yO1xcblxcbnVuaWZvcm0gZmxvYXQgc3RyZW5ndGg7XFxudW5pZm9ybSB2ZWMyIG9mZnNldDtcXG5cXG51bmlmb3JtIG1hdDMgcHJvamVjdGlvbk1hdHJpeDtcXG5cXG52YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDtcXG52YXJ5aW5nIHZlYzQgdkNvbG9yO1xcbnZhcnlpbmcgdmVjMiB2Qmx1clRleENvb3Jkc1s2XTtcXG5cXG52b2lkIG1haW4odm9pZClcXG57XFxuICAgIGdsX1Bvc2l0aW9uID0gdmVjNCgocHJvamVjdGlvbk1hdHJpeCAqIHZlYzMoKGFWZXJ0ZXhQb3NpdGlvbitvZmZzZXQpLCAxLjApKS54eSwgMC4wLCAxLjApO1xcbiAgICB2VGV4dHVyZUNvb3JkID0gYVRleHR1cmVDb29yZDtcXG5cXG4gICAgdkJsdXJUZXhDb29yZHNbIDBdID0gYVRleHR1cmVDb29yZCArIHZlYzIoMC4wLCAtMC4wMTIgKiBzdHJlbmd0aCk7XFxuICAgIHZCbHVyVGV4Q29vcmRzWyAxXSA9IGFUZXh0dXJlQ29vcmQgKyB2ZWMyKDAuMCwgLTAuMDA4ICogc3RyZW5ndGgpO1xcbiAgICB2Qmx1clRleENvb3Jkc1sgMl0gPSBhVGV4dHVyZUNvb3JkICsgdmVjMigwLjAsIC0wLjAwNCAqIHN0cmVuZ3RoKTtcXG4gICAgdkJsdXJUZXhDb29yZHNbIDNdID0gYVRleHR1cmVDb29yZCArIHZlYzIoMC4wLCAgMC4wMDQgKiBzdHJlbmd0aCk7XFxuICAgIHZCbHVyVGV4Q29vcmRzWyA0XSA9IGFUZXh0dXJlQ29vcmQgKyB2ZWMyKDAuMCwgIDAuMDA4ICogc3RyZW5ndGgpO1xcbiAgICB2Qmx1clRleENvb3Jkc1sgNV0gPSBhVGV4dHVyZUNvb3JkICsgdmVjMigwLjAsICAwLjAxMiAqIHN0cmVuZ3RoKTtcXG5cXG4gICB2Q29sb3IgPSB2ZWM0KGFDb2xvci5yZ2IgKiBhQ29sb3IuYSwgYUNvbG9yLmEpO1xcbn1cXG5cIixcbiAgICAgICAgLy8gZnJhZ21lbnQgc2hhZGVyXG4gICAgICAgIFwicHJlY2lzaW9uIGxvd3AgZmxvYXQ7XFxuXFxudmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7XFxudmFyeWluZyB2ZWMyIHZCbHVyVGV4Q29vcmRzWzZdO1xcbnZhcnlpbmcgdmVjNCB2Q29sb3I7XFxuXFxudW5pZm9ybSB2ZWMzIGNvbG9yO1xcbnVuaWZvcm0gZmxvYXQgYWxwaGE7XFxuXFxudW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXI7XFxuXFxudm9pZCBtYWluKHZvaWQpXFxue1xcbiAgICB2ZWM0IHN1bSA9IHZlYzQoMC4wKTtcXG5cXG4gICAgc3VtICs9IHRleHR1cmUyRCh1U2FtcGxlciwgdkJsdXJUZXhDb29yZHNbIDBdKSowLjAwNDQzMTg0ODQxMTkzODM0MTtcXG4gICAgc3VtICs9IHRleHR1cmUyRCh1U2FtcGxlciwgdkJsdXJUZXhDb29yZHNbIDFdKSowLjA1Mzk5MDk2NjUxMzE4OTg1O1xcbiAgICBzdW0gKz0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2Qmx1clRleENvb3Jkc1sgMl0pKjAuMjQxOTcwNzI0NTE5MTQ1NDtcXG4gICAgc3VtICs9IHRleHR1cmUyRCh1U2FtcGxlciwgdlRleHR1cmVDb29yZCAgICAgKSowLjM5ODk0MjI4MDQwMTQzMjc7XFxuICAgIHN1bSArPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZCbHVyVGV4Q29vcmRzWyAzXSkqMC4yNDE5NzA3MjQ1MTkxNDU0O1xcbiAgICBzdW0gKz0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2Qmx1clRleENvb3Jkc1sgNF0pKjAuMDUzOTkwOTY2NTEzMTg5ODU7XFxuICAgIHN1bSArPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZCbHVyVGV4Q29vcmRzWyA1XSkqMC4wMDQ0MzE4NDg0MTE5MzgzNDE7XFxuXFxuICAgIGdsX0ZyYWdDb2xvciA9IHZlYzQoIGNvbG9yLnJnYiAqIHN1bS5hICogYWxwaGEsIHN1bS5hICogYWxwaGEgKTtcXG59XFxuXCIsXG4gICAgICAgIC8vIHNldCB0aGUgdW5pZm9ybXNcbiAgICAgICAge1xuICAgICAgICAgICAgYmx1cjogeyB0eXBlOiAnMWYnLCB2YWx1ZTogMSAvIDUxMiB9LFxuICAgICAgICAgICAgY29sb3I6IHsgdHlwZTogJ2MnLCB2YWx1ZTogWzAsMCwwXX0sXG4gICAgICAgICAgICBhbHBoYTogeyB0eXBlOiAnMWYnLCB2YWx1ZTogMC43IH0sXG4gICAgICAgICAgICBvZmZzZXQ6IHsgdHlwZTogJzJmJywgdmFsdWU6WzUsIDVdfSxcbiAgICAgICAgICAgIHN0cmVuZ3RoOiB7IHR5cGU6ICcxZicsIHZhbHVlOjF9XG4gICAgICAgIH1cbiAgICApO1xuXG4gICAgdGhpcy5wYXNzZXMgPSAxO1xuICAgIHRoaXMuc3RyZW5ndGggPSA0O1xufVxuXG5CbHVyWVRpbnRGaWx0ZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShjb3JlLkFic3RyYWN0RmlsdGVyLnByb3RvdHlwZSk7XG5CbHVyWVRpbnRGaWx0ZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gQmx1cllUaW50RmlsdGVyO1xubW9kdWxlLmV4cG9ydHMgPSBCbHVyWVRpbnRGaWx0ZXI7XG5cbkJsdXJZVGludEZpbHRlci5wcm90b3R5cGUuYXBwbHlGaWx0ZXIgPSBmdW5jdGlvbiAocmVuZGVyZXIsIGlucHV0LCBvdXRwdXQsIGNsZWFyKVxue1xuICAgIHZhciBzaGFkZXIgPSB0aGlzLmdldFNoYWRlcihyZW5kZXJlcik7XG5cbiAgICB0aGlzLnVuaWZvcm1zLnN0cmVuZ3RoLnZhbHVlID0gdGhpcy5zdHJlbmd0aCAvIDQgLyB0aGlzLnBhc3NlcyAqIChpbnB1dC5mcmFtZS5oZWlnaHQgLyBpbnB1dC5zaXplLmhlaWdodCk7XG5cbiAgICBpZih0aGlzLnBhc3NlcyA9PT0gMSlcbiAgICB7XG4gICAgICAgIHJlbmRlcmVyLmZpbHRlck1hbmFnZXIuYXBwbHlGaWx0ZXIoc2hhZGVyLCBpbnB1dCwgb3V0cHV0LCBjbGVhcik7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHZhciByZW5kZXJUYXJnZXQgPSByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLmdldFJlbmRlclRhcmdldCh0cnVlKTtcbiAgICAgICAgdmFyIGZsaXAgPSBpbnB1dDtcbiAgICAgICAgdmFyIGZsb3AgPSByZW5kZXJUYXJnZXQ7XG5cbiAgICAgICAgZm9yKHZhciBpID0gMDsgaSA8IHRoaXMucGFzc2VzLTE7IGkrKylcbiAgICAgICAge1xuICAgICAgICAgICAgcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5hcHBseUZpbHRlcihzaGFkZXIsIGZsaXAsIGZsb3AsIGNsZWFyKTtcblxuICAgICAgICAgICB2YXIgdGVtcCA9IGZsb3A7XG4gICAgICAgICAgIGZsb3AgPSBmbGlwO1xuICAgICAgICAgICBmbGlwID0gdGVtcDtcbiAgICAgICAgfVxuXG4gICAgICAgIHJlbmRlcmVyLmZpbHRlck1hbmFnZXIuYXBwbHlGaWx0ZXIoc2hhZGVyLCBmbGlwLCBvdXRwdXQsIGNsZWFyKTtcblxuICAgICAgICByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLnJldHVyblJlbmRlclRhcmdldChyZW5kZXJUYXJnZXQpO1xuICAgIH1cbn07XG5cblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoQmx1cllUaW50RmlsdGVyLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIHN0cmVuZ3RoIG9mIGJvdGggdGhlIGJsdXIuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5CbHVyWVRpbnRGaWx0ZXIjXG4gICAgICogQGRlZmF1bHQgMlxuICAgICAqL1xuICAgIGJsdXI6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gIHRoaXMuc3RyZW5ndGg7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnBhZGRpbmcgPSB2YWx1ZSAqIDAuNTtcbiAgICAgICAgICAgIHRoaXMuc3RyZW5ndGggPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi8uLi9jb3JlJyksXG4gICAgQmx1clhGaWx0ZXIgPSByZXF1aXJlKCcuLi9ibHVyL0JsdXJYRmlsdGVyJyksXG4gICAgQmx1cllUaW50RmlsdGVyID0gcmVxdWlyZSgnLi9CbHVyWVRpbnRGaWx0ZXInKTtcblxuLyoqXG4gKiBUaGUgRHJvcFNoYWRvd0ZpbHRlciBhcHBsaWVzIGEgR2F1c3NpYW4gYmx1ciB0byBhbiBvYmplY3QuXG4gKiBUaGUgc3RyZW5ndGggb2YgdGhlIGJsdXIgY2FuIGJlIHNldCBmb3IgeC0gYW5kIHktYXhpcyBzZXBhcmF0ZWx5LlxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5BYnN0cmFjdEZpbHRlclxuICogQG1lbWJlcm9mIFBJWEkuZmlsdGVyc1xuICovXG5mdW5jdGlvbiBEcm9wU2hhZG93RmlsdGVyKClcbntcbiAgICBjb3JlLkFic3RyYWN0RmlsdGVyLmNhbGwodGhpcyk7XG5cbiAgICB0aGlzLmJsdXJYRmlsdGVyID0gbmV3IEJsdXJYRmlsdGVyKCk7XG4gICAgdGhpcy5ibHVyWVRpbnRGaWx0ZXIgPSBuZXcgQmx1cllUaW50RmlsdGVyKCk7XG5cbiAgICB0aGlzLmRlZmF1bHRGaWx0ZXIgPSBuZXcgY29yZS5BYnN0cmFjdEZpbHRlcigpO1xuXG4gICAgdGhpcy5wYWRkaW5nID0gMzA7XG5cbiAgICB0aGlzLl9kaXJ0eVBvc2l0aW9uID0gdHJ1ZTtcbiAgICB0aGlzLl9hbmdsZSA9IDQ1ICogTWF0aC5QSSAvIDE4MDtcbiAgICB0aGlzLl9kaXN0YW5jZSA9IDEwO1xuICAgIHRoaXMuYWxwaGEgPSAwLjc1O1xuICAgIHRoaXMuaGlkZU9iamVjdCA9IGZhbHNlO1xuICAgIHRoaXMuYmxlbmRNb2RlID0gY29yZS5CTEVORF9NT0RFUy5NVUxUSVBMWTtcbn1cblxuRHJvcFNoYWRvd0ZpbHRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuQWJzdHJhY3RGaWx0ZXIucHJvdG90eXBlKTtcbkRyb3BTaGFkb3dGaWx0ZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gRHJvcFNoYWRvd0ZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gRHJvcFNoYWRvd0ZpbHRlcjtcblxuRHJvcFNoYWRvd0ZpbHRlci5wcm90b3R5cGUuYXBwbHlGaWx0ZXIgPSBmdW5jdGlvbiAocmVuZGVyZXIsIGlucHV0LCBvdXRwdXQpXG57XG4gICAgdmFyIHJlbmRlclRhcmdldCA9IHJlbmRlcmVyLmZpbHRlck1hbmFnZXIuZ2V0UmVuZGVyVGFyZ2V0KHRydWUpO1xuXG4gICAgLy9UT0RPIC0gY29weVRleFN1YkltYWdlMkQgY291bGQgYmUgdXNlZCBoZXJlP1xuICAgIGlmKHRoaXMuX2RpcnR5UG9zaXRpb24pXG4gICAge1xuICAgICAgICB0aGlzLl9kaXJ0eVBvc2l0aW9uID0gZmFsc2U7XG5cbiAgICAgICAgdGhpcy5ibHVyWVRpbnRGaWx0ZXIudW5pZm9ybXMub2Zmc2V0LnZhbHVlWzBdID0gTWF0aC5zaW4odGhpcy5fYW5nbGUpICogdGhpcy5fZGlzdGFuY2U7XG4gICAgICAgIHRoaXMuYmx1cllUaW50RmlsdGVyLnVuaWZvcm1zLm9mZnNldC52YWx1ZVsxXSA9IE1hdGguY29zKHRoaXMuX2FuZ2xlKSAqIHRoaXMuX2Rpc3RhbmNlO1xuICAgIH1cblxuICAgIHRoaXMuYmx1clhGaWx0ZXIuYXBwbHlGaWx0ZXIocmVuZGVyZXIsIGlucHV0LCByZW5kZXJUYXJnZXQpO1xuXG4gICAgcmVuZGVyZXIuYmxlbmRNb2RlTWFuYWdlci5zZXRCbGVuZE1vZGUodGhpcy5ibGVuZE1vZGUpO1xuXG4gICAgdGhpcy5ibHVyWVRpbnRGaWx0ZXIuYXBwbHlGaWx0ZXIocmVuZGVyZXIsIHJlbmRlclRhcmdldCwgb3V0cHV0KTtcblxuICAgIHJlbmRlcmVyLmJsZW5kTW9kZU1hbmFnZXIuc2V0QmxlbmRNb2RlKGNvcmUuQkxFTkRfTU9ERVMuTk9STUFMKTtcblxuICAgIGlmKCF0aGlzLmhpZGVPYmplY3QpXG4gICAge1xuXG4gICAgICAgIHRoaXMuZGVmYXVsdEZpbHRlci5hcHBseUZpbHRlcihyZW5kZXJlciwgaW5wdXQsIG91dHB1dCk7XG4gICAgfVxuXG5cbiAgICByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLnJldHVyblJlbmRlclRhcmdldChyZW5kZXJUYXJnZXQpO1xufTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoRHJvcFNoYWRvd0ZpbHRlci5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBzdHJlbmd0aCBvZiBib3RoIHRoZSBibHVyWCBhbmQgYmx1clkgcHJvcGVydGllcyBzaW11bHRhbmVvdXNseVxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJPZiBQSVhJLmZpbHRlcnMuRHJvcFNoYWRvd0ZpbHRlciNcbiAgICAgKiBAZGVmYXVsdCAyXG4gICAgICovXG4gICAgYmx1cjoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmJsdXJYRmlsdGVyLmJsdXI7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmJsdXJYRmlsdGVyLmJsdXIgPSB0aGlzLmJsdXJZVGludEZpbHRlci5ibHVyID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgc3RyZW5ndGggb2YgdGhlIGJsdXJYIHByb3BlcnR5XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlck9mIFBJWEkuZmlsdGVycy5Ecm9wU2hhZG93RmlsdGVyI1xuICAgICAqIEBkZWZhdWx0IDJcbiAgICAgKi9cbiAgICBibHVyWDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmJsdXJYRmlsdGVyLmJsdXI7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmJsdXJYRmlsdGVyLmJsdXIgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBzdHJlbmd0aCBvZiB0aGUgYmx1clkgcHJvcGVydHlcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyT2YgUElYSS5maWx0ZXJzLkRyb3BTaGFkb3dGaWx0ZXIjXG4gICAgICogQGRlZmF1bHQgMlxuICAgICAqL1xuICAgIGJsdXJZOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuYmx1cllUaW50RmlsdGVyLmJsdXI7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmJsdXJZVGludEZpbHRlci5ibHVyID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgY29sb3Igb2YgdGhlIHNoYWRvd1xuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJPZiBQSVhJLmZpbHRlcnMuRHJvcFNoYWRvd0ZpbHRlciNcbiAgICAgKi9cbiAgICBjb2xvcjoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiAgY29yZS51dGlscy5yZ2IyaGV4KCB0aGlzLmJsdXJZVGludEZpbHRlci51bmlmb3Jtcy5jb2xvci52YWx1ZSApO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5ibHVyWVRpbnRGaWx0ZXIudW5pZm9ybXMuY29sb3IudmFsdWUgPSBjb3JlLnV0aWxzLmhleDJyZ2IodmFsdWUpO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIGFscGhhIG9mIHRoZSBzaGFkb3dcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyT2YgUElYSS5maWx0ZXJzLkRyb3BTaGFkb3dGaWx0ZXIjXG4gICAgICovXG4gICAgYWxwaGE6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gIHRoaXMuYmx1cllUaW50RmlsdGVyLnVuaWZvcm1zLmFscGhhLnZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5ibHVyWVRpbnRGaWx0ZXIudW5pZm9ybXMuYWxwaGEudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBkaXN0YW5jZSBvZiB0aGUgc2hhZG93XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlck9mIFBJWEkuZmlsdGVycy5Ecm9wU2hhZG93RmlsdGVyI1xuICAgICAqL1xuICAgIGRpc3RhbmNlOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuICB0aGlzLl9kaXN0YW5jZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuX2RpcnR5UG9zaXRpb24gPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy5fZGlzdGFuY2UgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBhbmdsZSBvZiB0aGUgc2hhZG93XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlck9mIFBJWEkuZmlsdGVycy5Ecm9wU2hhZG93RmlsdGVyI1xuICAgICAqL1xuICAgIGFuZ2xlOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuICB0aGlzLl9hbmdsZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuX2RpcnR5UG9zaXRpb24gPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy5fYW5nbGUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi8uLi9jb3JlJyk7XG4vLyBAc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9zdWJzdGFjay9icmZzL2lzc3Vlcy8yNVxuXG5cbi8qKlxuICogVGhpcyBncmV5c2NhbGVzIHRoZSBwYWxldHRlIG9mIHlvdXIgRGlzcGxheSBPYmplY3RzLlxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5BYnN0cmFjdEZpbHRlclxuICogQG1lbWJlcm9mIFBJWEkuZmlsdGVyc1xuICovXG5mdW5jdGlvbiBHcmF5RmlsdGVyKClcbntcbiAgICBjb3JlLkFic3RyYWN0RmlsdGVyLmNhbGwodGhpcyxcbiAgICAgICAgLy8gdmVydGV4IHNoYWRlclxuICAgICAgICBudWxsLFxuICAgICAgICAvLyBmcmFnbWVudCBzaGFkZXJcbiAgICAgICAgXCJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcXG5cXG52YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDtcXG52YXJ5aW5nIHZlYzQgdkNvbG9yO1xcblxcbnVuaWZvcm0gc2FtcGxlcjJEIHVTYW1wbGVyO1xcbnVuaWZvcm0gZmxvYXQgZ3JheTtcXG5cXG52b2lkIG1haW4odm9pZClcXG57XFxuICAgZ2xfRnJhZ0NvbG9yID0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2VGV4dHVyZUNvb3JkKTtcXG4gICBnbF9GcmFnQ29sb3IucmdiID0gbWl4KGdsX0ZyYWdDb2xvci5yZ2IsIHZlYzMoMC4yMTI2KmdsX0ZyYWdDb2xvci5yICsgMC43MTUyKmdsX0ZyYWdDb2xvci5nICsgMC4wNzIyKmdsX0ZyYWdDb2xvci5iKSwgZ3JheSk7XFxufVxcblwiLFxuICAgICAgICAvLyBzZXQgdGhlIHVuaWZvcm1zXG4gICAgICAgIHtcbiAgICAgICAgICAgIGdyYXk6IHsgdHlwZTogJzFmJywgdmFsdWU6IDEgfVxuICAgICAgICB9XG4gICAgKTtcbn1cblxuR3JheUZpbHRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuQWJzdHJhY3RGaWx0ZXIucHJvdG90eXBlKTtcbkdyYXlGaWx0ZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gR3JheUZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gR3JheUZpbHRlcjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoR3JheUZpbHRlci5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBUaGUgc3RyZW5ndGggb2YgdGhlIGdyYXkuIDEgd2lsbCBtYWtlIHRoZSBvYmplY3QgYmxhY2sgYW5kIHdoaXRlLCAwIHdpbGwgbWFrZSB0aGUgb2JqZWN0IGl0cyBub3JtYWwgY29sb3IuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5HcmF5RmlsdGVyI1xuICAgICAqL1xuICAgIGdyYXk6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy51bmlmb3Jtcy5ncmF5LnZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy5ncmF5LnZhbHVlID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG59KTtcbiIsIi8qKlxuICogQGZpbGUgICAgICAgIE1haW4gZXhwb3J0IG9mIHRoZSBQSVhJIGZpbHRlcnMgbGlicmFyeVxuICogQGF1dGhvciAgICAgIE1hdCBHcm92ZXMgPG1hdEBnb29kYm95ZGlnaXRhbC5jb20+XG4gKiBAY29weXJpZ2h0ICAgMjAxMy0yMDE1IEdvb2RCb3lEaWdpdGFsXG4gKiBAbGljZW5zZSAgICAge0BsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9waXhpanMvcGl4aS5qcy9ibG9iL21hc3Rlci9MSUNFTlNFfE1JVCBMaWNlbnNlfVxuICovXG5cbi8qKlxuICogQG5hbWVzcGFjZSBQSVhJLmZpbHRlcnNcbiAqL1xubW9kdWxlLmV4cG9ydHMgPSB7XG4gICAgQXNjaWlGaWx0ZXI6ICAgICAgICByZXF1aXJlKCcuL2FzY2lpL0FzY2lpRmlsdGVyJyksXG4gICAgQmxvb21GaWx0ZXI6ICAgICAgICByZXF1aXJlKCcuL2Jsb29tL0Jsb29tRmlsdGVyJyksXG4gICAgQmx1ckZpbHRlcjogICAgICAgICByZXF1aXJlKCcuL2JsdXIvQmx1ckZpbHRlcicpLFxuICAgIEJsdXJYRmlsdGVyOiAgICAgICAgcmVxdWlyZSgnLi9ibHVyL0JsdXJYRmlsdGVyJyksXG4gICAgQmx1cllGaWx0ZXI6ICAgICAgICByZXF1aXJlKCcuL2JsdXIvQmx1cllGaWx0ZXInKSxcbiAgICBCbHVyRGlyRmlsdGVyOiAgICAgIHJlcXVpcmUoJy4vYmx1ci9CbHVyRGlyRmlsdGVyJyksXG4gICAgQ29sb3JNYXRyaXhGaWx0ZXI6ICByZXF1aXJlKCcuL2NvbG9yL0NvbG9yTWF0cml4RmlsdGVyJyksXG4gICAgQ29sb3JTdGVwRmlsdGVyOiAgICByZXF1aXJlKCcuL2NvbG9yL0NvbG9yU3RlcEZpbHRlcicpLFxuICAgIENvbnZvbHV0aW9uRmlsdGVyOiAgcmVxdWlyZSgnLi9jb252b2x1dGlvbi9Db252b2x1dGlvbkZpbHRlcicpLFxuICAgIENyb3NzSGF0Y2hGaWx0ZXI6ICAgcmVxdWlyZSgnLi9jcm9zc2hhdGNoL0Nyb3NzSGF0Y2hGaWx0ZXInKSxcbiAgICBEaXNwbGFjZW1lbnRGaWx0ZXI6IHJlcXVpcmUoJy4vZGlzcGxhY2VtZW50L0Rpc3BsYWNlbWVudEZpbHRlcicpLFxuICAgIERvdFNjcmVlbkZpbHRlcjogICAgcmVxdWlyZSgnLi9kb3QvRG90U2NyZWVuRmlsdGVyJyksXG4gICAgR3JheUZpbHRlcjogICAgICAgICByZXF1aXJlKCcuL2dyYXkvR3JheUZpbHRlcicpLFxuICAgIERyb3BTaGFkb3dGaWx0ZXI6ICAgcmVxdWlyZSgnLi9kcm9wc2hhZG93L0Ryb3BTaGFkb3dGaWx0ZXInKSxcbiAgICBJbnZlcnRGaWx0ZXI6ICAgICAgIHJlcXVpcmUoJy4vaW52ZXJ0L0ludmVydEZpbHRlcicpLFxuICAgIE5vaXNlRmlsdGVyOiAgICAgICAgcmVxdWlyZSgnLi9ub2lzZS9Ob2lzZUZpbHRlcicpLFxuICAgIFBpeGVsYXRlRmlsdGVyOiAgICAgcmVxdWlyZSgnLi9waXhlbGF0ZS9QaXhlbGF0ZUZpbHRlcicpLFxuICAgIFJHQlNwbGl0RmlsdGVyOiAgICAgcmVxdWlyZSgnLi9yZ2IvUkdCU3BsaXRGaWx0ZXInKSxcbiAgICBTaG9ja3dhdmVGaWx0ZXI6ICAgIHJlcXVpcmUoJy4vc2hvY2t3YXZlL1Nob2Nrd2F2ZUZpbHRlcicpLFxuICAgIFNlcGlhRmlsdGVyOiAgICAgICAgcmVxdWlyZSgnLi9zZXBpYS9TZXBpYUZpbHRlcicpLFxuICAgIFNtYXJ0Qmx1ckZpbHRlcjogICAgcmVxdWlyZSgnLi9ibHVyL1NtYXJ0Qmx1ckZpbHRlcicpLFxuICAgIFRpbHRTaGlmdEZpbHRlcjogICAgcmVxdWlyZSgnLi90aWx0c2hpZnQvVGlsdFNoaWZ0RmlsdGVyJyksXG4gICAgVGlsdFNoaWZ0WEZpbHRlcjogICByZXF1aXJlKCcuL3RpbHRzaGlmdC9UaWx0U2hpZnRYRmlsdGVyJyksXG4gICAgVGlsdFNoaWZ0WUZpbHRlcjogICByZXF1aXJlKCcuL3RpbHRzaGlmdC9UaWx0U2hpZnRZRmlsdGVyJyksXG4gICAgVHdpc3RGaWx0ZXI6ICAgICAgICByZXF1aXJlKCcuL3R3aXN0L1R3aXN0RmlsdGVyJylcbn07XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uLy4uL2NvcmUnKTtcbi8vIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL3N1YnN0YWNrL2JyZnMvaXNzdWVzLzI1XG5cblxuLyoqXG4gKiBUaGlzIGludmVydHMgeW91ciBEaXNwbGF5IE9iamVjdHMgY29sb3JzLlxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5BYnN0cmFjdEZpbHRlclxuICogQG1lbWJlcm9mIFBJWEkuZmlsdGVyc1xuICovXG5mdW5jdGlvbiBJbnZlcnRGaWx0ZXIoKVxue1xuICAgIGNvcmUuQWJzdHJhY3RGaWx0ZXIuY2FsbCh0aGlzLFxuICAgICAgICAvLyB2ZXJ0ZXggc2hhZGVyXG4gICAgICAgIG51bGwsXG4gICAgICAgIC8vIGZyYWdtZW50IHNoYWRlclxuICAgICAgICBcInByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xcblxcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xcblxcbnVuaWZvcm0gZmxvYXQgaW52ZXJ0O1xcbnVuaWZvcm0gc2FtcGxlcjJEIHVTYW1wbGVyO1xcblxcbnZvaWQgbWFpbih2b2lkKVxcbntcXG4gICAgZ2xfRnJhZ0NvbG9yID0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2VGV4dHVyZUNvb3JkKTtcXG5cXG4gICAgZ2xfRnJhZ0NvbG9yLnJnYiA9IG1peCggKHZlYzMoMSktZ2xfRnJhZ0NvbG9yLnJnYikgKiBnbF9GcmFnQ29sb3IuYSwgZ2xfRnJhZ0NvbG9yLnJnYiwgMS4wIC0gaW52ZXJ0KTtcXG59XFxuXCIsXG4gICAgICAgIC8vIGN1c3RvbSB1bmlmb3Jtc1xuICAgICAgICB7XG4gICAgICAgICAgICBpbnZlcnQ6IHsgdHlwZTogJzFmJywgdmFsdWU6IDEgfVxuICAgICAgICB9XG4gICAgKTtcbn1cblxuSW52ZXJ0RmlsdGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoY29yZS5BYnN0cmFjdEZpbHRlci5wcm90b3R5cGUpO1xuSW52ZXJ0RmlsdGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IEludmVydEZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gSW52ZXJ0RmlsdGVyO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhJbnZlcnRGaWx0ZXIucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogVGhlIHN0cmVuZ3RoIG9mIHRoZSBpbnZlcnQuIGAxYCB3aWxsIGZ1bGx5IGludmVydCB0aGUgY29sb3JzLCBhbmRcbiAgICAgKiBgMGAgd2lsbCBtYWtlIHRoZSBvYmplY3QgaXRzIG5vcm1hbCBjb2xvci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLkludmVydEZpbHRlciNcbiAgICAgKi9cbiAgICBpbnZlcnQ6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy51bmlmb3Jtcy5pbnZlcnQudmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLmludmVydC52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfVxufSk7XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uLy4uL2NvcmUnKTtcbi8vIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL3N1YnN0YWNrL2JyZnMvaXNzdWVzLzI1XG5cblxuLyoqXG4gKiBAYXV0aG9yIFZpY28gQHZpY29jb3RlYVxuICogb3JpZ2luYWwgZmlsdGVyOiBodHRwczovL2dpdGh1Yi5jb20vZXZhbncvZ2xmeC5qcy9ibG9iL21hc3Rlci9zcmMvZmlsdGVycy9hZGp1c3Qvbm9pc2UuanNcbiAqL1xuXG4vKipcbiAqIEEgTm9pc2UgZWZmZWN0IGZpbHRlci5cbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQWJzdHJhY3RGaWx0ZXJcbiAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnNcbiAqL1xuZnVuY3Rpb24gTm9pc2VGaWx0ZXIoKVxue1xuICAgIGNvcmUuQWJzdHJhY3RGaWx0ZXIuY2FsbCh0aGlzLFxuICAgICAgICAvLyB2ZXJ0ZXggc2hhZGVyXG4gICAgICAgIG51bGwsXG4gICAgICAgIC8vIGZyYWdtZW50IHNoYWRlclxuICAgICAgICBcInByZWNpc2lvbiBoaWdocCBmbG9hdDtcXG5cXG52YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDtcXG52YXJ5aW5nIHZlYzQgdkNvbG9yO1xcblxcbnVuaWZvcm0gZmxvYXQgbm9pc2U7XFxudW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXI7XFxuXFxuZmxvYXQgcmFuZCh2ZWMyIGNvKVxcbntcXG4gICAgcmV0dXJuIGZyYWN0KHNpbihkb3QoY28ueHksIHZlYzIoMTIuOTg5OCwgNzguMjMzKSkpICogNDM3NTguNTQ1Myk7XFxufVxcblxcbnZvaWQgbWFpbigpXFxue1xcbiAgICB2ZWM0IGNvbG9yID0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2VGV4dHVyZUNvb3JkKTtcXG5cXG4gICAgZmxvYXQgZGlmZiA9IChyYW5kKHZUZXh0dXJlQ29vcmQpIC0gMC41KSAqIG5vaXNlO1xcblxcbiAgICBjb2xvci5yICs9IGRpZmY7XFxuICAgIGNvbG9yLmcgKz0gZGlmZjtcXG4gICAgY29sb3IuYiArPSBkaWZmO1xcblxcbiAgICBnbF9GcmFnQ29sb3IgPSBjb2xvcjtcXG59XFxuXCIsXG4gICAgICAgIC8vIGN1c3RvbSB1bmlmb3Jtc1xuICAgICAgICB7XG4gICAgICAgICAgICBub2lzZTogeyB0eXBlOiAnMWYnLCB2YWx1ZTogMC41IH1cbiAgICAgICAgfVxuICAgICk7XG59XG5cbk5vaXNlRmlsdGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoY29yZS5BYnN0cmFjdEZpbHRlci5wcm90b3R5cGUpO1xuTm9pc2VGaWx0ZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gTm9pc2VGaWx0ZXI7XG5tb2R1bGUuZXhwb3J0cyA9IE5vaXNlRmlsdGVyO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhOb2lzZUZpbHRlci5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBUaGUgYW1vdW50IG9mIG5vaXNlIHRvIGFwcGx5LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuTm9pc2VGaWx0ZXIjXG4gICAgICogQGRlZmF1bHQgMC41XG4gICAgICovXG4gICAgbm9pc2U6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy51bmlmb3Jtcy5ub2lzZS52YWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudW5pZm9ybXMubm9pc2UudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi8uLi9jb3JlJyk7XG4vLyBAc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9zdWJzdGFjay9icmZzL2lzc3Vlcy8yNVxuXG5cbi8qKlxuICogVGhpcyBmaWx0ZXIgYXBwbGllcyBhIHBpeGVsYXRlIGVmZmVjdCBtYWtpbmcgZGlzcGxheSBvYmplY3RzIGFwcGVhciAnYmxvY2t5Jy5cbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQWJzdHJhY3RGaWx0ZXJcbiAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnNcbiAqL1xuZnVuY3Rpb24gUGl4ZWxhdGVGaWx0ZXIoKVxue1xuICAgIGNvcmUuQWJzdHJhY3RGaWx0ZXIuY2FsbCh0aGlzLFxuICAgICAgICAvLyB2ZXJ0ZXggc2hhZGVyXG4gICAgICAgIG51bGwsXG4gICAgICAgIC8vIGZyYWdtZW50IHNoYWRlclxuICAgICAgICBcInByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xcblxcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xcblxcbnVuaWZvcm0gdmVjNCBkaW1lbnNpb25zO1xcbnVuaWZvcm0gdmVjMiBwaXhlbFNpemU7XFxudW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXI7XFxuXFxudm9pZCBtYWluKHZvaWQpXFxue1xcbiAgICB2ZWMyIGNvb3JkID0gdlRleHR1cmVDb29yZDtcXG5cXG4gICAgdmVjMiBzaXplID0gZGltZW5zaW9ucy54eSAvIHBpeGVsU2l6ZTtcXG5cXG4gICAgdmVjMiBjb2xvciA9IGZsb29yKCAoIHZUZXh0dXJlQ29vcmQgKiBzaXplICkgKSAvIHNpemUgKyBwaXhlbFNpemUvZGltZW5zaW9ucy54eSAqIDAuNTtcXG5cXG4gICAgZ2xfRnJhZ0NvbG9yID0gdGV4dHVyZTJEKHVTYW1wbGVyLCBjb2xvcik7XFxufVxcblwiLFxuICAgICAgICAvLyBjdXN0b20gdW5pZm9ybXNcbiAgICAgICAge1xuICAgICAgICAgICAgZGltZW5zaW9uczogeyB0eXBlOiAnNGZ2JywgIHZhbHVlOiBuZXcgRmxvYXQzMkFycmF5KFswLCAwLCAwLCAwXSkgfSxcbiAgICAgICAgICAgIHBpeGVsU2l6ZTogIHsgdHlwZTogJ3YyJywgICB2YWx1ZTogeyB4OiAxMCwgeTogMTAgfSB9XG4gICAgICAgIH1cbiAgICApO1xufVxuXG5QaXhlbGF0ZUZpbHRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuQWJzdHJhY3RGaWx0ZXIucHJvdG90eXBlKTtcblBpeGVsYXRlRmlsdGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFBpeGVsYXRlRmlsdGVyO1xubW9kdWxlLmV4cG9ydHMgPSBQaXhlbGF0ZUZpbHRlcjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoUGl4ZWxhdGVGaWx0ZXIucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogVGhpcyBhIHBvaW50IHRoYXQgZGVzY3JpYmVzIHRoZSBzaXplIG9mIHRoZSBibG9ja3MuXG4gICAgICogeCBpcyB0aGUgd2lkdGggb2YgdGhlIGJsb2NrIGFuZCB5IGlzIHRoZSBoZWlnaHQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlBvaW50fVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuUGl4ZWxhdGVGaWx0ZXIjXG4gICAgICovXG4gICAgc2l6ZToge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVuaWZvcm1zLnBpeGVsU2l6ZS52YWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudW5pZm9ybXMucGl4ZWxTaXplLnZhbHVlID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG59KTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vLi4vY29yZScpO1xuLy8gQHNlZSBodHRwczovL2dpdGh1Yi5jb20vc3Vic3RhY2svYnJmcy9pc3N1ZXMvMjVcblxuXG4vKipcbiAqIEFuIFJHQiBTcGxpdCBGaWx0ZXIuXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLkFic3RyYWN0RmlsdGVyXG4gKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzXG4gKi9cbmZ1bmN0aW9uIFJHQlNwbGl0RmlsdGVyKClcbntcbiAgICBjb3JlLkFic3RyYWN0RmlsdGVyLmNhbGwodGhpcyxcbiAgICAgICAgLy8gdmVydGV4IHNoYWRlclxuICAgICAgICBudWxsLFxuICAgICAgICAvLyBmcmFnbWVudCBzaGFkZXJcbiAgICAgICAgXCJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcXG5cXG52YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDtcXG5cXG51bmlmb3JtIHNhbXBsZXIyRCB1U2FtcGxlcjtcXG51bmlmb3JtIHZlYzQgZGltZW5zaW9ucztcXG51bmlmb3JtIHZlYzIgcmVkO1xcbnVuaWZvcm0gdmVjMiBncmVlbjtcXG51bmlmb3JtIHZlYzIgYmx1ZTtcXG5cXG52b2lkIG1haW4odm9pZClcXG57XFxuICAgZ2xfRnJhZ0NvbG9yLnIgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZUZXh0dXJlQ29vcmQgKyByZWQvZGltZW5zaW9ucy54eSkucjtcXG4gICBnbF9GcmFnQ29sb3IuZyA9IHRleHR1cmUyRCh1U2FtcGxlciwgdlRleHR1cmVDb29yZCArIGdyZWVuL2RpbWVuc2lvbnMueHkpLmc7XFxuICAgZ2xfRnJhZ0NvbG9yLmIgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZUZXh0dXJlQ29vcmQgKyBibHVlL2RpbWVuc2lvbnMueHkpLmI7XFxuICAgZ2xfRnJhZ0NvbG9yLmEgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZUZXh0dXJlQ29vcmQpLmE7XFxufVxcblwiLFxuICAgICAgICAvLyBjdXN0b20gdW5pZm9ybXNcbiAgICAgICAge1xuICAgICAgICAgICAgcmVkOiAgICAgICAgeyB0eXBlOiAndjInLCB2YWx1ZTogeyB4OiAyMCwgeTogMjAgfSB9LFxuICAgICAgICAgICAgZ3JlZW46ICAgICAgeyB0eXBlOiAndjInLCB2YWx1ZTogeyB4OiAtMjAsIHk6IDIwIH0gfSxcbiAgICAgICAgICAgIGJsdWU6ICAgICAgIHsgdHlwZTogJ3YyJywgdmFsdWU6IHsgeDogMjAsIHk6IC0yMCB9IH0sXG4gICAgICAgICAgICBkaW1lbnNpb25zOiB7IHR5cGU6ICc0ZnYnLCB2YWx1ZTogWzAsIDAsIDAsIDBdIH1cbiAgICAgICAgfVxuICAgICk7XG59XG5cblJHQlNwbGl0RmlsdGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoY29yZS5BYnN0cmFjdEZpbHRlci5wcm90b3R5cGUpO1xuUkdCU3BsaXRGaWx0ZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gUkdCU3BsaXRGaWx0ZXI7XG5tb2R1bGUuZXhwb3J0cyA9IFJHQlNwbGl0RmlsdGVyO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhSR0JTcGxpdEZpbHRlci5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBSZWQgY2hhbm5lbCBvZmZzZXQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlBvaW50fVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuUkdCU3BsaXRGaWx0ZXIjXG4gICAgICovXG4gICAgcmVkOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudW5pZm9ybXMucmVkLnZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy5yZWQudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBHcmVlbiBjaGFubmVsIG9mZnNldC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuUG9pbnR9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5SR0JTcGxpdEZpbHRlciNcbiAgICAgKi9cbiAgICBncmVlbjoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVuaWZvcm1zLmdyZWVuLnZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy5ncmVlbi52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIEJsdWUgb2Zmc2V0LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5Qb2ludH1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLlJHQlNwbGl0RmlsdGVyI1xuICAgICAqL1xuICAgIGJsdWU6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy51bmlmb3Jtcy5ibHVlLnZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy5ibHVlLnZhbHVlID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG59KTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vLi4vY29yZScpO1xuLy8gQHNlZSBodHRwczovL2dpdGh1Yi5jb20vc3Vic3RhY2svYnJmcy9pc3N1ZXMvMjVcblxuXG4vKipcbiAqIFRoaXMgYXBwbGllcyBhIHNlcGlhIGVmZmVjdCB0byB5b3VyIERpc3BsYXkgT2JqZWN0cy5cbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQWJzdHJhY3RGaWx0ZXJcbiAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnNcbiAqL1xuZnVuY3Rpb24gU2VwaWFGaWx0ZXIoKVxue1xuICAgIGNvcmUuQWJzdHJhY3RGaWx0ZXIuY2FsbCh0aGlzLFxuICAgICAgICAvLyB2ZXJ0ZXggc2hhZGVyXG4gICAgICAgIG51bGwsXG4gICAgICAgIC8vIGZyYWdtZW50IHNoYWRlclxuICAgICAgICBcInByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xcblxcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xcblxcbnVuaWZvcm0gc2FtcGxlcjJEIHVTYW1wbGVyO1xcbnVuaWZvcm0gZmxvYXQgc2VwaWE7XFxuXFxuY29uc3QgbWF0MyBzZXBpYU1hdHJpeCA9IG1hdDMoMC4zNTg4LCAwLjcwNDQsIDAuMTM2OCwgMC4yOTkwLCAwLjU4NzAsIDAuMTE0MCwgMC4yMzkyLCAwLjQ2OTYsIDAuMDkxMik7XFxuXFxudm9pZCBtYWluKHZvaWQpXFxue1xcbiAgIGdsX0ZyYWdDb2xvciA9IHRleHR1cmUyRCh1U2FtcGxlciwgdlRleHR1cmVDb29yZCk7XFxuICAgZ2xfRnJhZ0NvbG9yLnJnYiA9IG1peCggZ2xfRnJhZ0NvbG9yLnJnYiwgZ2xfRnJhZ0NvbG9yLnJnYiAqIHNlcGlhTWF0cml4LCBzZXBpYSk7XFxufVxcblwiLFxuICAgICAgICAvLyBjdXN0b20gdW5pZm9ybXNcbiAgICAgICAge1xuICAgICAgICAgICAgc2VwaWE6IHsgdHlwZTogJzFmJywgdmFsdWU6IDEgfVxuICAgICAgICB9XG4gICAgKTtcbn1cblxuU2VwaWFGaWx0ZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShjb3JlLkFic3RyYWN0RmlsdGVyLnByb3RvdHlwZSk7XG5TZXBpYUZpbHRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBTZXBpYUZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gU2VwaWFGaWx0ZXI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKFNlcGlhRmlsdGVyLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFRoZSBzdHJlbmd0aCBvZiB0aGUgc2VwaWEuIGAxYCB3aWxsIGFwcGx5IHRoZSBmdWxsIHNlcGlhIGVmZmVjdCwgYW5kXG4gICAgICogYDBgIHdpbGwgbWFrZSB0aGUgb2JqZWN0IGl0cyBub3JtYWwgY29sb3IuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5TZXBpYUZpbHRlciNcbiAgICAgKi9cbiAgICBzZXBpYToge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVuaWZvcm1zLnNlcGlhLnZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy5zZXBpYS52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfVxufSk7XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uLy4uL2NvcmUnKTtcbi8vIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL3N1YnN0YWNrL2JyZnMvaXNzdWVzLzI1XG5cblxuLyoqXG4gKiBUaGUgQ29sb3JNYXRyaXhGaWx0ZXIgY2xhc3MgbGV0cyB5b3UgYXBwbHkgYSA0eDQgbWF0cml4IHRyYW5zZm9ybWF0aW9uIG9uIHRoZSBSR0JBXG4gKiBjb2xvciBhbmQgYWxwaGEgdmFsdWVzIG9mIGV2ZXJ5IHBpeGVsIG9uIHlvdXIgZGlzcGxheU9iamVjdCB0byBwcm9kdWNlIGEgcmVzdWx0XG4gKiB3aXRoIGEgbmV3IHNldCBvZiBSR0JBIGNvbG9yIGFuZCBhbHBoYSB2YWx1ZXMuIEl0J3MgcHJldHR5IHBvd2VyZnVsIVxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5BYnN0cmFjdEZpbHRlclxuICogQG1lbWJlcm9mIFBJWEkuZmlsdGVyc1xuICovXG5mdW5jdGlvbiBTaG9ja3dhdmVGaWx0ZXIoKVxue1xuICAgIGNvcmUuQWJzdHJhY3RGaWx0ZXIuY2FsbCh0aGlzLFxuICAgICAgICAvLyB2ZXJ0ZXggc2hhZGVyXG4gICAgICAgIG51bGwsXG4gICAgICAgIC8vIGZyYWdtZW50IHNoYWRlclxuICAgICAgICBcInByZWNpc2lvbiBsb3dwIGZsb2F0O1xcblxcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xcblxcbnVuaWZvcm0gc2FtcGxlcjJEIHVTYW1wbGVyO1xcblxcbnVuaWZvcm0gdmVjMiBjZW50ZXI7XFxudW5pZm9ybSB2ZWMzIHBhcmFtczsgLy8gMTAuMCwgMC44LCAwLjFcXG51bmlmb3JtIGZsb2F0IHRpbWU7XFxuXFxudm9pZCBtYWluKClcXG57XFxuICAgIHZlYzIgdXYgPSB2VGV4dHVyZUNvb3JkO1xcbiAgICB2ZWMyIHRleENvb3JkID0gdXY7XFxuXFxuICAgIGZsb2F0IGRpc3QgPSBkaXN0YW5jZSh1diwgY2VudGVyKTtcXG5cXG4gICAgaWYgKCAoZGlzdCA8PSAodGltZSArIHBhcmFtcy56KSkgJiYgKGRpc3QgPj0gKHRpbWUgLSBwYXJhbXMueikpIClcXG4gICAge1xcbiAgICAgICAgZmxvYXQgZGlmZiA9IChkaXN0IC0gdGltZSk7XFxuICAgICAgICBmbG9hdCBwb3dEaWZmID0gMS4wIC0gcG93KGFicyhkaWZmKnBhcmFtcy54KSwgcGFyYW1zLnkpO1xcblxcbiAgICAgICAgZmxvYXQgZGlmZlRpbWUgPSBkaWZmICAqIHBvd0RpZmY7XFxuICAgICAgICB2ZWMyIGRpZmZVViA9IG5vcm1hbGl6ZSh1diAtIGNlbnRlcik7XFxuICAgICAgICB0ZXhDb29yZCA9IHV2ICsgKGRpZmZVViAqIGRpZmZUaW1lKTtcXG4gICAgfVxcblxcbiAgICBnbF9GcmFnQ29sb3IgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHRleENvb3JkKTtcXG59XFxuXCIsXG4gICAgICAgIC8vIGN1c3RvbSB1bmlmb3Jtc1xuICAgICAgICB7XG4gICAgICAgICAgICBjZW50ZXI6IHsgdHlwZTogJ3YyJywgdmFsdWU6IHsgeDogMC41LCB5OiAwLjUgfSB9LFxuICAgICAgICAgICAgcGFyYW1zOiB7IHR5cGU6ICd2MycsIHZhbHVlOiB7IHg6IDEwLCB5OiAwLjgsIHo6IDAuMSB9IH0sXG4gICAgICAgICAgICB0aW1lOiB7IHR5cGU6ICcxZicsIHZhbHVlOiAwIH1cbiAgICAgICAgfVxuICAgICk7XG59XG5cblNob2Nrd2F2ZUZpbHRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuQWJzdHJhY3RGaWx0ZXIucHJvdG90eXBlKTtcblNob2Nrd2F2ZUZpbHRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBTaG9ja3dhdmVGaWx0ZXI7XG5tb2R1bGUuZXhwb3J0cyA9IFNob2Nrd2F2ZUZpbHRlcjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoU2hvY2t3YXZlRmlsdGVyLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIGNlbnRlciBvZiB0aGUgc2hvY2t3YXZlIGluIG5vcm1hbGl6ZWQgc2NyZWVuIGNvb3Jkcy4gVGhhdCBpc1xuICAgICAqICgwLDApIGlzIHRoZSB0b3AtbGVmdCBhbmQgKDEsMSkgaXMgdGhlIGJvdHRvbSByaWdodC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge29iamVjdDxzdHJpbmcsIG51bWJlcj59XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5TaG9ja3dhdmVGaWx0ZXIjXG4gICAgICovXG4gICAgY2VudGVyOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudW5pZm9ybXMuY2VudGVyLnZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy5jZW50ZXIudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgcGFyYW1zIG9mIHRoZSBzaG9ja3dhdmUuIFRoZXNlIG1vZGlmeSB0aGUgbG9vayBhbmQgYmVoYXZpb3Igb2ZcbiAgICAgKiB0aGUgc2hvY2t3YXZlIGFzIGl0IHJpcHBsZXMgb3V0LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7b2JqZWN0PHN0cmluZywgbnVtYmVyPn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLlNob2Nrd2F2ZUZpbHRlciNcbiAgICAgKi9cbiAgICBwYXJhbXM6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy51bmlmb3Jtcy5wYXJhbXMudmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLnBhcmFtcy52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfSxcbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBlbGFwc2VkIHRpbWUgb2YgdGhlIHNob2Nrd2F2ZS4gVGhpcyBjb250cm9scyB0aGUgc3BlZWQgYXQgd2hpY2hcbiAgICAgKiB0aGUgc2hvY2t3YXZlIHJpcHBsZXMgb3V0LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuU2hvY2t3YXZlRmlsdGVyI1xuICAgICAqL1xuICAgIHRpbWU6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy51bmlmb3Jtcy50aW1lLnZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy50aW1lLnZhbHVlID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG59KTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vLi4vY29yZScpO1xuLy8gQHNlZSBodHRwczovL2dpdGh1Yi5jb20vc3Vic3RhY2svYnJmcy9pc3N1ZXMvMjVcblxuXG4vKipcbiAqIEBhdXRob3IgVmljbyBAdmljb2NvdGVhXG4gKiBvcmlnaW5hbCBmaWx0ZXIgaHR0cHM6Ly9naXRodWIuY29tL2V2YW53L2dsZnguanMvYmxvYi9tYXN0ZXIvc3JjL2ZpbHRlcnMvYmx1ci90aWx0c2hpZnQuanMgYnkgRXZhbiBXYWxsYWNlIDogaHR0cDovL21hZGVieWV2YW4uY29tL1xuICovXG5cbi8qKlxuICogQSBUaWx0U2hpZnRBeGlzRmlsdGVyLlxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5BYnN0cmFjdEZpbHRlclxuICogQG1lbWJlcm9mIFBJWEkuZmlsdGVyc1xuICovXG5mdW5jdGlvbiBUaWx0U2hpZnRBeGlzRmlsdGVyKClcbntcbiAgICBjb3JlLkFic3RyYWN0RmlsdGVyLmNhbGwodGhpcyxcbiAgICAgICAgLy8gdmVydGV4IHNoYWRlclxuICAgICAgICBudWxsLFxuICAgICAgICAvLyBmcmFnbWVudCBzaGFkZXJcbiAgICAgICAgXCJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcXG5cXG52YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDtcXG5cXG51bmlmb3JtIHNhbXBsZXIyRCB1U2FtcGxlcjtcXG51bmlmb3JtIGZsb2F0IGJsdXI7XFxudW5pZm9ybSBmbG9hdCBncmFkaWVudEJsdXI7XFxudW5pZm9ybSB2ZWMyIHN0YXJ0O1xcbnVuaWZvcm0gdmVjMiBlbmQ7XFxudW5pZm9ybSB2ZWMyIGRlbHRhO1xcbnVuaWZvcm0gdmVjMiB0ZXhTaXplO1xcblxcbmZsb2F0IHJhbmRvbSh2ZWMzIHNjYWxlLCBmbG9hdCBzZWVkKVxcbntcXG4gICAgcmV0dXJuIGZyYWN0KHNpbihkb3QoZ2xfRnJhZ0Nvb3JkLnh5eiArIHNlZWQsIHNjYWxlKSkgKiA0Mzc1OC41NDUzICsgc2VlZCk7XFxufVxcblxcbnZvaWQgbWFpbih2b2lkKVxcbntcXG4gICAgdmVjNCBjb2xvciA9IHZlYzQoMC4wKTtcXG4gICAgZmxvYXQgdG90YWwgPSAwLjA7XFxuXFxuICAgIGZsb2F0IG9mZnNldCA9IHJhbmRvbSh2ZWMzKDEyLjk4OTgsIDc4LjIzMywgMTUxLjcxODIpLCAwLjApO1xcbiAgICB2ZWMyIG5vcm1hbCA9IG5vcm1hbGl6ZSh2ZWMyKHN0YXJ0LnkgLSBlbmQueSwgZW5kLnggLSBzdGFydC54KSk7XFxuICAgIGZsb2F0IHJhZGl1cyA9IHNtb290aHN0ZXAoMC4wLCAxLjAsIGFicyhkb3QodlRleHR1cmVDb29yZCAqIHRleFNpemUgLSBzdGFydCwgbm9ybWFsKSkgLyBncmFkaWVudEJsdXIpICogYmx1cjtcXG5cXG4gICAgZm9yIChmbG9hdCB0ID0gLTMwLjA7IHQgPD0gMzAuMDsgdCsrKVxcbiAgICB7XFxuICAgICAgICBmbG9hdCBwZXJjZW50ID0gKHQgKyBvZmZzZXQgLSAwLjUpIC8gMzAuMDtcXG4gICAgICAgIGZsb2F0IHdlaWdodCA9IDEuMCAtIGFicyhwZXJjZW50KTtcXG4gICAgICAgIHZlYzQgc2FtcGxlID0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2VGV4dHVyZUNvb3JkICsgZGVsdGEgLyB0ZXhTaXplICogcGVyY2VudCAqIHJhZGl1cyk7XFxuICAgICAgICBzYW1wbGUucmdiICo9IHNhbXBsZS5hO1xcbiAgICAgICAgY29sb3IgKz0gc2FtcGxlICogd2VpZ2h0O1xcbiAgICAgICAgdG90YWwgKz0gd2VpZ2h0O1xcbiAgICB9XFxuXFxuICAgIGdsX0ZyYWdDb2xvciA9IGNvbG9yIC8gdG90YWw7XFxuICAgIGdsX0ZyYWdDb2xvci5yZ2IgLz0gZ2xfRnJhZ0NvbG9yLmEgKyAwLjAwMDAxO1xcbn1cXG5cIixcbiAgICAgICAgLy8gY3VzdG9tIHVuaWZvcm1zXG4gICAgICAgIHtcbiAgICAgICAgICAgIGJsdXI6ICAgICAgICAgICB7IHR5cGU6ICcxZicsIHZhbHVlOiAxMDAgfSxcbiAgICAgICAgICAgIGdyYWRpZW50Qmx1cjogICB7IHR5cGU6ICcxZicsIHZhbHVlOiA2MDAgfSxcbiAgICAgICAgICAgIHN0YXJ0OiAgICAgICAgICB7IHR5cGU6ICd2MicsIHZhbHVlOiB7IHg6IDAsICAgIHk6IHdpbmRvdy5pbm5lckhlaWdodCAvIDIgfSB9LFxuICAgICAgICAgICAgZW5kOiAgICAgICAgICAgIHsgdHlwZTogJ3YyJywgdmFsdWU6IHsgeDogNjAwLCAgeTogd2luZG93LmlubmVySGVpZ2h0IC8gMiB9IH0sXG4gICAgICAgICAgICBkZWx0YTogICAgICAgICAgeyB0eXBlOiAndjInLCB2YWx1ZTogeyB4OiAzMCwgICB5OiAzMCB9IH0sXG4gICAgICAgICAgICB0ZXhTaXplOiAgICAgICAgeyB0eXBlOiAndjInLCB2YWx1ZTogeyB4OiB3aW5kb3cuaW5uZXJXaWR0aCwgeTogd2luZG93LmlubmVySGVpZ2h0IH0gfVxuICAgICAgICB9XG4gICAgKTtcblxuICAgIHRoaXMudXBkYXRlRGVsdGEoKTtcbn1cblxuVGlsdFNoaWZ0QXhpc0ZpbHRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuQWJzdHJhY3RGaWx0ZXIucHJvdG90eXBlKTtcblRpbHRTaGlmdEF4aXNGaWx0ZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gVGlsdFNoaWZ0QXhpc0ZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gVGlsdFNoaWZ0QXhpc0ZpbHRlcjtcblxuLyoqXG4gKiBVcGRhdGVzIHRoZSBmaWx0ZXIgZGVsdGEgdmFsdWVzLlxuICogVGhpcyBpcyBvdmVycmlkZGVuIGluIHRoZSBYIGFuZCBZIGZpbHRlcnMsIGRvZXMgbm90aGluZyBmb3IgdGhpcyBjbGFzcy5cbiAqXG4gKi9cblRpbHRTaGlmdEF4aXNGaWx0ZXIucHJvdG90eXBlLnVwZGF0ZURlbHRhID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLnVuaWZvcm1zLmRlbHRhLnZhbHVlLnggPSAwO1xuICAgIHRoaXMudW5pZm9ybXMuZGVsdGEudmFsdWUueSA9IDA7XG59O1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhUaWx0U2hpZnRBeGlzRmlsdGVyLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFRoZSBzdHJlbmd0aCBvZiB0aGUgYmx1ci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLlRpbHRTaGlmdEF4aXNGaWx0ZXIjXG4gICAgICovXG4gICAgYmx1cjoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVuaWZvcm1zLmJsdXIudmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLmJsdXIudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBUaGUgc3RyZW5ndGggb2YgdGhlIGdyYWRpZW50IGJsdXIuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5UaWx0U2hpZnRBeGlzRmlsdGVyI1xuICAgICAqL1xuICAgIGdyYWRpZW50Qmx1cjoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVuaWZvcm1zLmdyYWRpZW50Qmx1ci52YWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudW5pZm9ybXMuZ3JhZGllbnRCbHVyLnZhbHVlID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVGhlIFggdmFsdWUgdG8gc3RhcnQgdGhlIGVmZmVjdCBhdC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuUG9pbnR9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5UaWx0U2hpZnRBeGlzRmlsdGVyI1xuICAgICAqL1xuICAgIHN0YXJ0OiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudW5pZm9ybXMuc3RhcnQudmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLnN0YXJ0LnZhbHVlID0gdmFsdWU7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZURlbHRhKCk7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVGhlIFggdmFsdWUgdG8gZW5kIHRoZSBlZmZlY3QgYXQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlBvaW50fVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuVGlsdFNoaWZ0QXhpc0ZpbHRlciNcbiAgICAgKi9cbiAgICBlbmQ6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy51bmlmb3Jtcy5lbmQudmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLmVuZC52YWx1ZSA9IHZhbHVlO1xuICAgICAgICAgICAgdGhpcy51cGRhdGVEZWx0YSgpO1xuICAgICAgICB9XG4gICAgfVxufSk7XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uLy4uL2NvcmUnKSxcbiAgICBUaWx0U2hpZnRYRmlsdGVyID0gcmVxdWlyZSgnLi9UaWx0U2hpZnRYRmlsdGVyJyksXG4gICAgVGlsdFNoaWZ0WUZpbHRlciA9IHJlcXVpcmUoJy4vVGlsdFNoaWZ0WUZpbHRlcicpO1xuXG4vKipcbiAqIEBhdXRob3IgVmljbyBAdmljb2NvdGVhXG4gKiBvcmlnaW5hbCBmaWx0ZXIgaHR0cHM6Ly9naXRodWIuY29tL2V2YW53L2dsZnguanMvYmxvYi9tYXN0ZXIvc3JjL2ZpbHRlcnMvYmx1ci90aWx0c2hpZnQuanMgYnkgRXZhbiBXYWxsYWNlIDogaHR0cDovL21hZGVieWV2YW4uY29tL1xuICovXG5cbi8qKlxuICogQSBUaWx0U2hpZnQgRmlsdGVyLiBNYW5hZ2VzIHRoZSBwYXNzIG9mIGJvdGggYSBUaWx0U2hpZnRYRmlsdGVyIGFuZCBUaWx0U2hpZnRZRmlsdGVyLlxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5BYnN0cmFjdEZpbHRlclxuICogQG1lbWJlcm9mIFBJWEkuZmlsdGVyc1xuICovXG5mdW5jdGlvbiBUaWx0U2hpZnRGaWx0ZXIoKVxue1xuICAgIGNvcmUuQWJzdHJhY3RGaWx0ZXIuY2FsbCh0aGlzKTtcblxuICAgIHRoaXMudGlsdFNoaWZ0WEZpbHRlciA9IG5ldyBUaWx0U2hpZnRYRmlsdGVyKCk7XG4gICAgdGhpcy50aWx0U2hpZnRZRmlsdGVyID0gbmV3IFRpbHRTaGlmdFlGaWx0ZXIoKTtcbn1cblxuVGlsdFNoaWZ0RmlsdGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoY29yZS5BYnN0cmFjdEZpbHRlci5wcm90b3R5cGUpO1xuVGlsdFNoaWZ0RmlsdGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFRpbHRTaGlmdEZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gVGlsdFNoaWZ0RmlsdGVyO1xuXG5UaWx0U2hpZnRGaWx0ZXIucHJvdG90eXBlLmFwcGx5RmlsdGVyID0gZnVuY3Rpb24gKHJlbmRlcmVyLCBpbnB1dCwgb3V0cHV0KVxue1xuICAgIHZhciByZW5kZXJUYXJnZXQgPSByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLmdldFJlbmRlclRhcmdldCh0cnVlKTtcblxuICAgIHRoaXMudGlsdFNoaWZ0WEZpbHRlci5hcHBseUZpbHRlcihyZW5kZXJlciwgaW5wdXQsIHJlbmRlclRhcmdldCk7XG5cbiAgICB0aGlzLnRpbHRTaGlmdFlGaWx0ZXIuYXBwbHlGaWx0ZXIocmVuZGVyZXIsIHJlbmRlclRhcmdldCwgb3V0cHV0KTtcblxuICAgIHJlbmRlcmVyLmZpbHRlck1hbmFnZXIucmV0dXJuUmVuZGVyVGFyZ2V0KHJlbmRlclRhcmdldCk7XG59O1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhUaWx0U2hpZnRGaWx0ZXIucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogVGhlIHN0cmVuZ3RoIG9mIHRoZSBibHVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuVGlsdFNoaWZ0RmlsdGVyI1xuICAgICAqL1xuICAgIGJsdXI6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy50aWx0U2hpZnRYRmlsdGVyLmJsdXI7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnRpbHRTaGlmdFhGaWx0ZXIuYmx1ciA9IHRoaXMudGlsdFNoaWZ0WUZpbHRlci5ibHVyID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVGhlIHN0cmVuZ3RoIG9mIHRoZSBncmFkaWVudCBibHVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuVGlsdFNoaWZ0RmlsdGVyI1xuICAgICAqL1xuICAgIGdyYWRpZW50Qmx1cjoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnRpbHRTaGlmdFhGaWx0ZXIuZ3JhZGllbnRCbHVyO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy50aWx0U2hpZnRYRmlsdGVyLmdyYWRpZW50Qmx1ciA9IHRoaXMudGlsdFNoaWZ0WUZpbHRlci5ncmFkaWVudEJsdXIgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBUaGUgWSB2YWx1ZSB0byBzdGFydCB0aGUgZWZmZWN0IGF0LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuVGlsdFNoaWZ0RmlsdGVyI1xuICAgICAqL1xuICAgIHN0YXJ0OiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudGlsdFNoaWZ0WEZpbHRlci5zdGFydDtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudGlsdFNoaWZ0WEZpbHRlci5zdGFydCA9IHRoaXMudGlsdFNoaWZ0WUZpbHRlci5zdGFydCA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFRoZSBZIHZhbHVlIHRvIGVuZCB0aGUgZWZmZWN0IGF0LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuVGlsdFNoaWZ0RmlsdGVyI1xuICAgICAqL1xuICAgIGVuZDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnRpbHRTaGlmdFhGaWx0ZXIuZW5kO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy50aWx0U2hpZnRYRmlsdGVyLmVuZCA9IHRoaXMudGlsdFNoaWZ0WUZpbHRlci5lbmQgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuIiwidmFyIFRpbHRTaGlmdEF4aXNGaWx0ZXIgPSByZXF1aXJlKCcuL1RpbHRTaGlmdEF4aXNGaWx0ZXInKTtcblxuLyoqXG4gKiBAYXV0aG9yIFZpY28gQHZpY29jb3RlYVxuICogb3JpZ2luYWwgZmlsdGVyIGh0dHBzOi8vZ2l0aHViLmNvbS9ldmFudy9nbGZ4LmpzL2Jsb2IvbWFzdGVyL3NyYy9maWx0ZXJzL2JsdXIvdGlsdHNoaWZ0LmpzIGJ5IEV2YW4gV2FsbGFjZSA6IGh0dHA6Ly9tYWRlYnlldmFuLmNvbS9cbiAqL1xuXG4vKipcbiAqIEEgVGlsdFNoaWZ0WEZpbHRlci5cbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuVGlsdFNoaWZ0QXhpc0ZpbHRlclxuICogQG1lbWJlcm9mIFBJWEkuZmlsdGVyc1xuICovXG5mdW5jdGlvbiBUaWx0U2hpZnRYRmlsdGVyKClcbntcbiAgICBUaWx0U2hpZnRBeGlzRmlsdGVyLmNhbGwodGhpcyk7XG59XG5cblRpbHRTaGlmdFhGaWx0ZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShUaWx0U2hpZnRBeGlzRmlsdGVyLnByb3RvdHlwZSk7XG5UaWx0U2hpZnRYRmlsdGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFRpbHRTaGlmdFhGaWx0ZXI7XG5tb2R1bGUuZXhwb3J0cyA9IFRpbHRTaGlmdFhGaWx0ZXI7XG5cbi8qKlxuICogVXBkYXRlcyB0aGUgZmlsdGVyIGRlbHRhIHZhbHVlcy5cbiAqXG4gKi9cblRpbHRTaGlmdFhGaWx0ZXIucHJvdG90eXBlLnVwZGF0ZURlbHRhID0gZnVuY3Rpb24gKClcbntcbiAgICB2YXIgZHggPSB0aGlzLnVuaWZvcm1zLmVuZC52YWx1ZS54IC0gdGhpcy51bmlmb3Jtcy5zdGFydC52YWx1ZS54O1xuICAgIHZhciBkeSA9IHRoaXMudW5pZm9ybXMuZW5kLnZhbHVlLnkgLSB0aGlzLnVuaWZvcm1zLnN0YXJ0LnZhbHVlLnk7XG4gICAgdmFyIGQgPSBNYXRoLnNxcnQoZHggKiBkeCArIGR5ICogZHkpO1xuXG4gICAgdGhpcy51bmlmb3Jtcy5kZWx0YS52YWx1ZS54ID0gZHggLyBkO1xuICAgIHRoaXMudW5pZm9ybXMuZGVsdGEudmFsdWUueSA9IGR5IC8gZDtcbn07XG4iLCJ2YXIgVGlsdFNoaWZ0QXhpc0ZpbHRlciA9IHJlcXVpcmUoJy4vVGlsdFNoaWZ0QXhpc0ZpbHRlcicpO1xuXG4vKipcbiAqIEBhdXRob3IgVmljbyBAdmljb2NvdGVhXG4gKiBvcmlnaW5hbCBmaWx0ZXIgaHR0cHM6Ly9naXRodWIuY29tL2V2YW53L2dsZnguanMvYmxvYi9tYXN0ZXIvc3JjL2ZpbHRlcnMvYmx1ci90aWx0c2hpZnQuanMgYnkgRXZhbiBXYWxsYWNlIDogaHR0cDovL21hZGVieWV2YW4uY29tL1xuICovXG5cbi8qKlxuICogQSBUaWx0U2hpZnRZRmlsdGVyLlxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5UaWx0U2hpZnRBeGlzRmlsdGVyXG4gKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzXG4gKi9cbmZ1bmN0aW9uIFRpbHRTaGlmdFlGaWx0ZXIoKVxue1xuICAgIFRpbHRTaGlmdEF4aXNGaWx0ZXIuY2FsbCh0aGlzKTtcbn1cblxuVGlsdFNoaWZ0WUZpbHRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFRpbHRTaGlmdEF4aXNGaWx0ZXIucHJvdG90eXBlKTtcblRpbHRTaGlmdFlGaWx0ZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gVGlsdFNoaWZ0WUZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gVGlsdFNoaWZ0WUZpbHRlcjtcblxuLyoqXG4gKiBVcGRhdGVzIHRoZSBmaWx0ZXIgZGVsdGEgdmFsdWVzLlxuICpcbiAqL1xuVGlsdFNoaWZ0WUZpbHRlci5wcm90b3R5cGUudXBkYXRlRGVsdGEgPSBmdW5jdGlvbiAoKVxue1xuICAgIHZhciBkeCA9IHRoaXMudW5pZm9ybXMuZW5kLnZhbHVlLnggLSB0aGlzLnVuaWZvcm1zLnN0YXJ0LnZhbHVlLng7XG4gICAgdmFyIGR5ID0gdGhpcy51bmlmb3Jtcy5lbmQudmFsdWUueSAtIHRoaXMudW5pZm9ybXMuc3RhcnQudmFsdWUueTtcbiAgICB2YXIgZCA9IE1hdGguc3FydChkeCAqIGR4ICsgZHkgKiBkeSk7XG5cbiAgICB0aGlzLnVuaWZvcm1zLmRlbHRhLnZhbHVlLnggPSAtZHkgLyBkO1xuICAgIHRoaXMudW5pZm9ybXMuZGVsdGEudmFsdWUueSA9IGR4IC8gZDtcbn07XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uLy4uL2NvcmUnKTtcbi8vIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL3N1YnN0YWNrL2JyZnMvaXNzdWVzLzI1XG5cblxuLyoqXG4gKiBUaGlzIGZpbHRlciBhcHBsaWVzIGEgdHdpc3QgZWZmZWN0IG1ha2luZyBkaXNwbGF5IG9iamVjdHMgYXBwZWFyIHR3aXN0ZWQgaW4gdGhlIGdpdmVuIGRpcmVjdGlvbi5cbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQWJzdHJhY3RGaWx0ZXJcbiAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnNcbiAqL1xuZnVuY3Rpb24gVHdpc3RGaWx0ZXIoKVxue1xuICAgIGNvcmUuQWJzdHJhY3RGaWx0ZXIuY2FsbCh0aGlzLFxuICAgICAgICAvLyB2ZXJ0ZXggc2hhZGVyXG4gICAgICAgIG51bGwsXG4gICAgICAgIC8vIGZyYWdtZW50IHNoYWRlclxuICAgICAgICBcInByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xcblxcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xcblxcbnVuaWZvcm0gc2FtcGxlcjJEIHVTYW1wbGVyO1xcbnVuaWZvcm0gZmxvYXQgcmFkaXVzO1xcbnVuaWZvcm0gZmxvYXQgYW5nbGU7XFxudW5pZm9ybSB2ZWMyIG9mZnNldDtcXG5cXG52b2lkIG1haW4odm9pZClcXG57XFxuICAgdmVjMiBjb29yZCA9IHZUZXh0dXJlQ29vcmQgLSBvZmZzZXQ7XFxuICAgZmxvYXQgZGlzdCA9IGxlbmd0aChjb29yZCk7XFxuXFxuICAgaWYgKGRpc3QgPCByYWRpdXMpXFxuICAge1xcbiAgICAgICBmbG9hdCByYXRpbyA9IChyYWRpdXMgLSBkaXN0KSAvIHJhZGl1cztcXG4gICAgICAgZmxvYXQgYW5nbGVNb2QgPSByYXRpbyAqIHJhdGlvICogYW5nbGU7XFxuICAgICAgIGZsb2F0IHMgPSBzaW4oYW5nbGVNb2QpO1xcbiAgICAgICBmbG9hdCBjID0gY29zKGFuZ2xlTW9kKTtcXG4gICAgICAgY29vcmQgPSB2ZWMyKGNvb3JkLnggKiBjIC0gY29vcmQueSAqIHMsIGNvb3JkLnggKiBzICsgY29vcmQueSAqIGMpO1xcbiAgIH1cXG5cXG4gICBnbF9GcmFnQ29sb3IgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIGNvb3JkK29mZnNldCk7XFxufVxcblwiLFxuICAgICAgICAvLyBjdXN0b20gdW5pZm9ybXNcbiAgICAgICAge1xuICAgICAgICAgICAgcmFkaXVzOiAgICAgeyB0eXBlOiAnMWYnLCB2YWx1ZTogMC41IH0sXG4gICAgICAgICAgICBhbmdsZTogICAgICB7IHR5cGU6ICcxZicsIHZhbHVlOiA1IH0sXG4gICAgICAgICAgICBvZmZzZXQ6ICAgICB7IHR5cGU6ICd2MicsIHZhbHVlOiB7IHg6IDAuNSwgeTogMC41IH0gfVxuICAgICAgICB9XG4gICAgKTtcbn1cblxuVHdpc3RGaWx0ZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShjb3JlLkFic3RyYWN0RmlsdGVyLnByb3RvdHlwZSk7XG5Ud2lzdEZpbHRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBUd2lzdEZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gVHdpc3RGaWx0ZXI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKFR3aXN0RmlsdGVyLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFRoaXMgcG9pbnQgZGVzY3JpYmVzIHRoZSB0aGUgb2Zmc2V0IG9mIHRoZSB0d2lzdC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuUG9pbnR9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5Ud2lzdEZpbHRlciNcbiAgICAgKi9cbiAgICBvZmZzZXQ6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy51bmlmb3Jtcy5vZmZzZXQudmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLm9mZnNldC52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFRoaXMgcmFkaXVzIG9mIHRoZSB0d2lzdC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLlR3aXN0RmlsdGVyI1xuICAgICAqL1xuICAgIHJhZGl1czoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVuaWZvcm1zLnJhZGl1cy52YWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudW5pZm9ybXMucmFkaXVzLnZhbHVlID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVGhpcyBhbmdsZSBvZiB0aGUgdHdpc3QuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5Ud2lzdEZpbHRlciNcbiAgICAgKi9cbiAgICBhbmdsZToge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVuaWZvcm1zLmFuZ2xlLnZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy5hbmdsZS52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfVxufSk7XG4iLCIvLyBydW4gdGhlIHBvbHlmaWxsc1xucmVxdWlyZSgnLi9wb2x5ZmlsbCcpO1xuXG52YXIgY29yZSA9IG1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9jb3JlJyk7XG5cbi8vIGFkZCBjb3JlIHBsdWdpbnMuXG5jb3JlLmV4dHJhcyAgICAgICAgID0gcmVxdWlyZSgnLi9leHRyYXMnKTtcbmNvcmUuZmlsdGVycyAgICAgICAgPSByZXF1aXJlKCcuL2ZpbHRlcnMnKTtcbmNvcmUuaW50ZXJhY3Rpb24gICAgPSByZXF1aXJlKCcuL2ludGVyYWN0aW9uJyk7XG5jb3JlLmxvYWRlcnMgICAgICAgID0gcmVxdWlyZSgnLi9sb2FkZXJzJyk7XG5jb3JlLm1lc2ggICAgICAgICAgID0gcmVxdWlyZSgnLi9tZXNoJyk7XG5jb3JlLmFjY2Vzc2liaWxpdHkgID0gcmVxdWlyZSgnLi9hY2Nlc3NpYmlsaXR5Jyk7XG5cbi8vIGV4cG9ydCBhIHByZW1hZGUgbG9hZGVyIGluc3RhbmNlXG4vKipcbiAqIEEgcHJlbWFkZSBpbnN0YW5jZSBvZiB0aGUgbG9hZGVyIHRoYXQgY2FuIGJlIHVzZWQgdG8gbG9hZGVyIHJlc291cmNlcy5cbiAqXG4gKiBAbmFtZSBsb2FkZXJcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcHJvcGVydHkge1BJWEkubG9hZGVycy5Mb2FkZXJ9XG4gKi9cbmNvcmUubG9hZGVyID0gbmV3IGNvcmUubG9hZGVycy5Mb2FkZXIoKTtcblxuLy8gbWl4aW4gdGhlIGRlcHJlY2F0aW9uIGZlYXR1cmVzLlxuT2JqZWN0LmFzc2lnbihjb3JlLCByZXF1aXJlKCcuL2RlcHJlY2F0aW9uJykpO1xuXG4vLyBBbHdheXMgZXhwb3J0IHBpeGkgZ2xvYmFsbHkuXG5nbG9iYWwuUElYSSA9IGNvcmU7XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uL2NvcmUnKTtcblxuLyoqXG4gKiBIb2xkcyBhbGwgaW5mb3JtYXRpb24gcmVsYXRlZCB0byBhbiBJbnRlcmFjdGlvbiBldmVudFxuICpcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWEkuaW50ZXJhY3Rpb25cbiAqL1xuZnVuY3Rpb24gSW50ZXJhY3Rpb25EYXRhKClcbntcbiAgICAvKipcbiAgICAgKiBUaGlzIHBvaW50IHN0b3JlcyB0aGUgZ2xvYmFsIGNvb3JkcyBvZiB3aGVyZSB0aGUgdG91Y2gvbW91c2UgZXZlbnQgaGFwcGVuZWRcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuUG9pbnR9XG4gICAgICovXG4gICAgdGhpcy5nbG9iYWwgPSBuZXcgY29yZS5Qb2ludCgpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHRhcmdldCBTcHJpdGUgdGhhdCB3YXMgaW50ZXJhY3RlZCB3aXRoXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlNwcml0ZX1cbiAgICAgKi9cbiAgICB0aGlzLnRhcmdldCA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBXaGVuIHBhc3NlZCB0byBhbiBldmVudCBoYW5kbGVyLCB0aGlzIHdpbGwgYmUgdGhlIG9yaWdpbmFsIERPTSBFdmVudCB0aGF0IHdhcyBjYXB0dXJlZFxuICAgICAqXG4gICAgICogQG1lbWJlciB7RXZlbnR9XG4gICAgICovXG4gICAgdGhpcy5vcmlnaW5hbEV2ZW50ID0gbnVsbDtcbn1cblxuSW50ZXJhY3Rpb25EYXRhLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IEludGVyYWN0aW9uRGF0YTtcbm1vZHVsZS5leHBvcnRzID0gSW50ZXJhY3Rpb25EYXRhO1xuXG4vKipcbiAqIFRoaXMgd2lsbCByZXR1cm4gdGhlIGxvY2FsIGNvb3JkaW5hdGVzIG9mIHRoZSBzcGVjaWZpZWQgZGlzcGxheU9iamVjdCBmb3IgdGhpcyBJbnRlcmFjdGlvbkRhdGFcbiAqXG4gKiBAcGFyYW0gZGlzcGxheU9iamVjdCB7UElYSS5EaXNwbGF5T2JqZWN0fSBUaGUgRGlzcGxheU9iamVjdCB0aGF0IHlvdSB3b3VsZCBsaWtlIHRoZSBsb2NhbCBjb29yZHMgb2ZmXG4gKiBAcGFyYW0gW3BvaW50XSB7UElYSS5Qb2ludH0gQSBQb2ludCBvYmplY3QgaW4gd2hpY2ggdG8gc3RvcmUgdGhlIHZhbHVlLCBvcHRpb25hbCAob3RoZXJ3aXNlIHdpbGwgY3JlYXRlIGEgbmV3IHBvaW50KVxuICogQHBhcmFtIFtnbG9iYWxQb3NdIHtQSVhJLlBvaW50fSBBIFBvaW50IG9iamVjdCBjb250YWluaW5nIHlvdXIgY3VzdG9tIGdsb2JhbCBjb29yZHMsIG9wdGlvbmFsIChvdGhlcndpc2Ugd2lsbCB1c2UgdGhlIGN1cnJlbnQgZ2xvYmFsIGNvb3JkcylcbiAqIEByZXR1cm4ge1BJWEkuUG9pbnR9IEEgcG9pbnQgY29udGFpbmluZyB0aGUgY29vcmRpbmF0ZXMgb2YgdGhlIEludGVyYWN0aW9uRGF0YSBwb3NpdGlvbiByZWxhdGl2ZSB0byB0aGUgRGlzcGxheU9iamVjdFxuICovXG5JbnRlcmFjdGlvbkRhdGEucHJvdG90eXBlLmdldExvY2FsUG9zaXRpb24gPSBmdW5jdGlvbiAoZGlzcGxheU9iamVjdCwgcG9pbnQsIGdsb2JhbFBvcylcbntcbiAgICByZXR1cm4gZGlzcGxheU9iamVjdC53b3JsZFRyYW5zZm9ybS5hcHBseUludmVyc2UoZ2xvYmFsUG9zIHx8IHRoaXMuZ2xvYmFsLCBwb2ludCk7XG59O1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi9jb3JlJyksXG4gICAgSW50ZXJhY3Rpb25EYXRhID0gcmVxdWlyZSgnLi9JbnRlcmFjdGlvbkRhdGEnKTtcblxuLy8gTWl4IGludGVyYWN0aXZlVGFyZ2V0IGludG8gY29yZS5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZVxuT2JqZWN0LmFzc2lnbihcbiAgICBjb3JlLkRpc3BsYXlPYmplY3QucHJvdG90eXBlLFxuICAgIHJlcXVpcmUoJy4vaW50ZXJhY3RpdmVUYXJnZXQnKVxuKTtcblxuLyoqXG4gKiBUaGUgaW50ZXJhY3Rpb24gbWFuYWdlciBkZWFscyB3aXRoIG1vdXNlIGFuZCB0b3VjaCBldmVudHMuIEFueSBEaXNwbGF5T2JqZWN0IGNhbiBiZSBpbnRlcmFjdGl2ZVxuICogaWYgaXRzIGludGVyYWN0aXZlIHBhcmFtZXRlciBpcyBzZXQgdG8gdHJ1ZVxuICogVGhpcyBtYW5hZ2VyIGFsc28gc3VwcG9ydHMgbXVsdGl0b3VjaC5cbiAqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJLmludGVyYWN0aW9uXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuQ2FudmFzUmVuZGVyZXJ8UElYSS5XZWJHTFJlbmRlcmVyfSBBIHJlZmVyZW5jZSB0byB0aGUgY3VycmVudCByZW5kZXJlclxuICogQHBhcmFtIFtvcHRpb25zXSB7b2JqZWN0fVxuICogQHBhcmFtIFtvcHRpb25zLmF1dG9QcmV2ZW50RGVmYXVsdD10cnVlXSB7Ym9vbGVhbn0gU2hvdWxkIHRoZSBtYW5hZ2VyIGF1dG9tYXRpY2FsbHkgcHJldmVudCBkZWZhdWx0IGJyb3dzZXIgYWN0aW9ucy5cbiAqIEBwYXJhbSBbb3B0aW9ucy5pbnRlcmFjdGlvbkZyZXF1ZW5jeT0xMF0ge251bWJlcn0gRnJlcXVlbmN5IGluY3JlYXNlcyB0aGUgaW50ZXJhY3Rpb24gZXZlbnRzIHdpbGwgYmUgY2hlY2tlZC5cbiAqL1xuZnVuY3Rpb24gSW50ZXJhY3Rpb25NYW5hZ2VyKHJlbmRlcmVyLCBvcHRpb25zKVxue1xuICAgIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuXG4gICAgLyoqXG4gICAgICogVGhlIHJlbmRlcmVyIHRoaXMgaW50ZXJhY3Rpb24gbWFuYWdlciB3b3JrcyBmb3IuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlN5c3RlbVJlbmRlcmVyfVxuICAgICAqL1xuICAgIHRoaXMucmVuZGVyZXIgPSByZW5kZXJlcjtcblxuICAgIC8qKlxuICAgICAqIFNob3VsZCBkZWZhdWx0IGJyb3dzZXIgYWN0aW9ucyBhdXRvbWF0aWNhbGx5IGJlIHByZXZlbnRlZC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICogQGRlZmF1bHQgdHJ1ZVxuICAgICAqL1xuICAgIHRoaXMuYXV0b1ByZXZlbnREZWZhdWx0ID0gb3B0aW9ucy5hdXRvUHJldmVudERlZmF1bHQgIT09IHVuZGVmaW5lZCA/IG9wdGlvbnMuYXV0b1ByZXZlbnREZWZhdWx0IDogdHJ1ZTtcblxuICAgIC8qKlxuICAgICAqIEFzIHRoaXMgZnJlcXVlbmN5IGluY3JlYXNlcyB0aGUgaW50ZXJhY3Rpb24gZXZlbnRzIHdpbGwgYmUgY2hlY2tlZCBtb3JlIG9mdGVuLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDEwXG4gICAgICovXG4gICAgdGhpcy5pbnRlcmFjdGlvbkZyZXF1ZW5jeSA9IG9wdGlvbnMuaW50ZXJhY3Rpb25GcmVxdWVuY3kgfHwgMTA7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgbW91c2UgZGF0YVxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5pbnRlcmFjdGlvbi5JbnRlcmFjdGlvbkRhdGF9XG4gICAgICovXG4gICAgdGhpcy5tb3VzZSA9IG5ldyBJbnRlcmFjdGlvbkRhdGEoKTtcblxuICAgIC8qKlxuICAgICAqIEFuIGV2ZW50IGRhdGEgb2JqZWN0IHRvIGhhbmRsZSBhbGwgdGhlIGV2ZW50IHRyYWNraW5nL2Rpc3BhdGNoaW5nXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtvYmplY3R9XG4gICAgICovXG4gICAgdGhpcy5ldmVudERhdGEgPSB7XG4gICAgICAgIHN0b3BwZWQ6IGZhbHNlLFxuICAgICAgICB0YXJnZXQ6IG51bGwsXG4gICAgICAgIHR5cGU6IG51bGwsXG4gICAgICAgIGRhdGE6IHRoaXMubW91c2UsXG4gICAgICAgIHN0b3BQcm9wYWdhdGlvbjpmdW5jdGlvbigpe1xuICAgICAgICAgICAgdGhpcy5zdG9wcGVkID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH07XG5cbiAgICAvKipcbiAgICAgKiBUaW55IGxpdHRsZSBpbnRlcmFjdGl2ZURhdGEgcG9vbCAhXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLmludGVyYWN0aW9uLkludGVyYWN0aW9uRGF0YVtdfVxuICAgICAqL1xuICAgIHRoaXMuaW50ZXJhY3RpdmVEYXRhUG9vbCA9IFtdO1xuXG4gICAgLyoqXG4gICAgICogVGhlIERPTSBlbGVtZW50IHRvIGJpbmQgdG8uXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtIVE1MRWxlbWVudH1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuaW50ZXJhY3Rpb25ET01FbGVtZW50ID0gbnVsbDtcblxuICAgIC8qKlxuICAgICAqIEhhdmUgZXZlbnRzIGJlZW4gYXR0YWNoZWQgdG8gdGhlIGRvbSBlbGVtZW50P1xuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuZXZlbnRzQWRkZWQgPSBmYWxzZTtcblxuICAgIC8vdGhpcyB3aWxsIG1ha2UgaXQgc28gdGhhdCB5b3UgZG9uJ3QgaGF2ZSB0byBjYWxsIGJpbmQgYWxsIHRoZSB0aW1lXG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtGdW5jdGlvbn1cbiAgICAgKi9cbiAgICB0aGlzLm9uTW91c2VVcCA9IHRoaXMub25Nb3VzZVVwLmJpbmQodGhpcyk7XG4gICAgdGhpcy5wcm9jZXNzTW91c2VVcCA9IHRoaXMucHJvY2Vzc01vdXNlVXAuYmluZCggdGhpcyApO1xuXG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtGdW5jdGlvbn1cbiAgICAgKi9cbiAgICB0aGlzLm9uTW91c2VEb3duID0gdGhpcy5vbk1vdXNlRG93bi5iaW5kKHRoaXMpO1xuICAgIHRoaXMucHJvY2Vzc01vdXNlRG93biA9IHRoaXMucHJvY2Vzc01vdXNlRG93bi5iaW5kKCB0aGlzICk7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtGdW5jdGlvbn1cbiAgICAgKi9cbiAgICB0aGlzLm9uTW91c2VNb3ZlID0gdGhpcy5vbk1vdXNlTW92ZS5iaW5kKCB0aGlzICk7XG4gICAgdGhpcy5wcm9jZXNzTW91c2VNb3ZlID0gdGhpcy5wcm9jZXNzTW91c2VNb3ZlLmJpbmQoIHRoaXMgKTtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge0Z1bmN0aW9ufVxuICAgICAqL1xuICAgIHRoaXMub25Nb3VzZU91dCA9IHRoaXMub25Nb3VzZU91dC5iaW5kKHRoaXMpO1xuICAgIHRoaXMucHJvY2Vzc01vdXNlT3Zlck91dCA9IHRoaXMucHJvY2Vzc01vdXNlT3Zlck91dC5iaW5kKCB0aGlzICk7XG5cblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge0Z1bmN0aW9ufVxuICAgICAqL1xuICAgIHRoaXMub25Ub3VjaFN0YXJ0ID0gdGhpcy5vblRvdWNoU3RhcnQuYmluZCh0aGlzKTtcbiAgICB0aGlzLnByb2Nlc3NUb3VjaFN0YXJ0ID0gdGhpcy5wcm9jZXNzVG91Y2hTdGFydC5iaW5kKHRoaXMpO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7RnVuY3Rpb259XG4gICAgICovXG4gICAgdGhpcy5vblRvdWNoRW5kID0gdGhpcy5vblRvdWNoRW5kLmJpbmQodGhpcyk7XG4gICAgdGhpcy5wcm9jZXNzVG91Y2hFbmQgPSB0aGlzLnByb2Nlc3NUb3VjaEVuZC5iaW5kKHRoaXMpO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7RnVuY3Rpb259XG4gICAgICovXG4gICAgdGhpcy5vblRvdWNoTW92ZSA9IHRoaXMub25Ub3VjaE1vdmUuYmluZCh0aGlzKTtcbiAgICB0aGlzLnByb2Nlc3NUb3VjaE1vdmUgPSB0aGlzLnByb2Nlc3NUb3VjaE1vdmUuYmluZCh0aGlzKTtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLmxhc3QgPSAwO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGNzcyBzdHlsZSBvZiB0aGUgY3Vyc29yIHRoYXQgaXMgYmVpbmcgdXNlZFxuICAgICAqIEBtZW1iZXIge3N0cmluZ31cbiAgICAgKi9cbiAgICB0aGlzLmN1cnJlbnRDdXJzb3JTdHlsZSA9ICdpbmhlcml0JztcblxuICAgIC8qKlxuICAgICAqIEludGVybmFsIGNhY2hlZCB2YXJcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlBvaW50fVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fdGVtcFBvaW50ID0gbmV3IGNvcmUuUG9pbnQoKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBjdXJyZW50IHJlc29sdXRpb25cbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy5yZXNvbHV0aW9uID0gMTtcblxuICAgIHRoaXMuc2V0VGFyZ2V0RWxlbWVudCh0aGlzLnJlbmRlcmVyLnZpZXcsIHRoaXMucmVuZGVyZXIucmVzb2x1dGlvbik7XG59XG5cbkludGVyYWN0aW9uTWFuYWdlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBJbnRlcmFjdGlvbk1hbmFnZXI7XG5tb2R1bGUuZXhwb3J0cyA9IEludGVyYWN0aW9uTWFuYWdlcjtcblxuLyoqXG4gKiBTZXRzIHRoZSBET00gZWxlbWVudCB3aGljaCB3aWxsIHJlY2VpdmUgbW91c2UvdG91Y2ggZXZlbnRzLiBUaGlzIGlzIHVzZWZ1bCBmb3Igd2hlbiB5b3UgaGF2ZVxuICogb3RoZXIgRE9NIGVsZW1lbnRzIG9uIHRvcCBvZiB0aGUgcmVuZGVyZXJzIENhbnZhcyBlbGVtZW50LiBXaXRoIHRoaXMgeW91J2xsIGJlIGJhbGUgdG8gZGVsZXRlZ2F0ZVxuICogYW5vdGhlciBET00gZWxlbWVudCB0byByZWNlaXZlIHRob3NlIGV2ZW50cy5cbiAqXG4gKiBAcGFyYW0gZWxlbWVudCB7SFRNTEVsZW1lbnR9IHRoZSBET00gZWxlbWVudCB3aGljaCB3aWxsIHJlY2VpdmUgbW91c2UgYW5kIHRvdWNoIGV2ZW50cy5cbiAqIEBwYXJhbSBbcmVzb2x1dGlvbj0xXSB7bnVtYmVyfSBUSGUgcmVzb2x1dGlvbiBvZiB0aGUgbmV3IGVsZW1lbnQgKHJlbGF0aXZlIHRvIHRoZSBjYW52YXMpLlxuICogQHByaXZhdGVcbiAqL1xuSW50ZXJhY3Rpb25NYW5hZ2VyLnByb3RvdHlwZS5zZXRUYXJnZXRFbGVtZW50ID0gZnVuY3Rpb24gKGVsZW1lbnQsIHJlc29sdXRpb24pXG57XG4gICAgdGhpcy5yZW1vdmVFdmVudHMoKTtcblxuICAgIHRoaXMuaW50ZXJhY3Rpb25ET01FbGVtZW50ID0gZWxlbWVudDtcblxuICAgIHRoaXMucmVzb2x1dGlvbiA9IHJlc29sdXRpb24gfHwgMTtcblxuICAgIHRoaXMuYWRkRXZlbnRzKCk7XG59O1xuXG4vKipcbiAqIFJlZ2lzdGVycyBhbGwgdGhlIERPTSBldmVudHNcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5JbnRlcmFjdGlvbk1hbmFnZXIucHJvdG90eXBlLmFkZEV2ZW50cyA9IGZ1bmN0aW9uICgpXG57XG4gICAgaWYgKCF0aGlzLmludGVyYWN0aW9uRE9NRWxlbWVudClcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb3JlLnRpY2tlci5zaGFyZWQuYWRkKHRoaXMudXBkYXRlLCB0aGlzKTtcblxuICAgIGlmICh3aW5kb3cubmF2aWdhdG9yLm1zUG9pbnRlckVuYWJsZWQpXG4gICAge1xuICAgICAgICB0aGlzLmludGVyYWN0aW9uRE9NRWxlbWVudC5zdHlsZVsnLW1zLWNvbnRlbnQtem9vbWluZyddID0gJ25vbmUnO1xuICAgICAgICB0aGlzLmludGVyYWN0aW9uRE9NRWxlbWVudC5zdHlsZVsnLW1zLXRvdWNoLWFjdGlvbiddID0gJ25vbmUnO1xuICAgIH1cblxuICAgIHdpbmRvdy5kb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdtb3VzZW1vdmUnLCAgICB0aGlzLm9uTW91c2VNb3ZlLCB0cnVlKTtcbiAgICB0aGlzLmludGVyYWN0aW9uRE9NRWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCdtb3VzZWRvd24nLCAgICB0aGlzLm9uTW91c2VEb3duLCB0cnVlKTtcbiAgICB0aGlzLmludGVyYWN0aW9uRE9NRWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCdtb3VzZW91dCcsICAgICB0aGlzLm9uTW91c2VPdXQsIHRydWUpO1xuXG4gICAgdGhpcy5pbnRlcmFjdGlvbkRPTUVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigndG91Y2hzdGFydCcsICAgdGhpcy5vblRvdWNoU3RhcnQsIHRydWUpO1xuICAgIHRoaXMuaW50ZXJhY3Rpb25ET01FbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ3RvdWNoZW5kJywgICAgIHRoaXMub25Ub3VjaEVuZCwgdHJ1ZSk7XG4gICAgdGhpcy5pbnRlcmFjdGlvbkRPTUVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigndG91Y2htb3ZlJywgICAgdGhpcy5vblRvdWNoTW92ZSwgdHJ1ZSk7XG5cbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignbW91c2V1cCcsICB0aGlzLm9uTW91c2VVcCwgdHJ1ZSk7XG5cbiAgICB0aGlzLmV2ZW50c0FkZGVkID0gdHJ1ZTtcbn07XG5cbi8qKlxuICogUmVtb3ZlcyBhbGwgdGhlIERPTSBldmVudHMgdGhhdCB3ZXJlIHByZXZpb3VzbHkgcmVnaXN0ZXJlZFxuICpcbiAqIEBwcml2YXRlXG4gKi9cbkludGVyYWN0aW9uTWFuYWdlci5wcm90b3R5cGUucmVtb3ZlRXZlbnRzID0gZnVuY3Rpb24gKClcbntcbiAgICBpZiAoIXRoaXMuaW50ZXJhY3Rpb25ET01FbGVtZW50KVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvcmUudGlja2VyLnNoYXJlZC5yZW1vdmUodGhpcy51cGRhdGUpO1xuXG4gICAgaWYgKHdpbmRvdy5uYXZpZ2F0b3IubXNQb2ludGVyRW5hYmxlZClcbiAgICB7XG4gICAgICAgIHRoaXMuaW50ZXJhY3Rpb25ET01FbGVtZW50LnN0eWxlWyctbXMtY29udGVudC16b29taW5nJ10gPSAnJztcbiAgICAgICAgdGhpcy5pbnRlcmFjdGlvbkRPTUVsZW1lbnQuc3R5bGVbJy1tcy10b3VjaC1hY3Rpb24nXSA9ICcnO1xuICAgIH1cblxuICAgIHdpbmRvdy5kb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdtb3VzZW1vdmUnLCB0aGlzLm9uTW91c2VNb3ZlLCB0cnVlKTtcbiAgICB0aGlzLmludGVyYWN0aW9uRE9NRWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdtb3VzZWRvd24nLCB0aGlzLm9uTW91c2VEb3duLCB0cnVlKTtcbiAgICB0aGlzLmludGVyYWN0aW9uRE9NRWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdtb3VzZW91dCcsICB0aGlzLm9uTW91c2VPdXQsIHRydWUpO1xuXG4gICAgdGhpcy5pbnRlcmFjdGlvbkRPTUVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigndG91Y2hzdGFydCcsIHRoaXMub25Ub3VjaFN0YXJ0LCB0cnVlKTtcbiAgICB0aGlzLmludGVyYWN0aW9uRE9NRWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCd0b3VjaGVuZCcsICB0aGlzLm9uVG91Y2hFbmQsIHRydWUpO1xuICAgIHRoaXMuaW50ZXJhY3Rpb25ET01FbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3RvdWNobW92ZScsIHRoaXMub25Ub3VjaE1vdmUsIHRydWUpO1xuXG4gICAgdGhpcy5pbnRlcmFjdGlvbkRPTUVsZW1lbnQgPSBudWxsO1xuXG4gICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21vdXNldXAnLCAgdGhpcy5vbk1vdXNlVXAsIHRydWUpO1xuXG4gICAgdGhpcy5ldmVudHNBZGRlZCA9IGZhbHNlO1xufTtcblxuLyoqXG4gKiBVcGRhdGVzIHRoZSBzdGF0ZSBvZiBpbnRlcmFjdGl2ZSBvYmplY3RzLlxuICogSW52b2tlZCBieSBhIHRocm90dGxlZCB0aWNrZXIgdXBkYXRlIGZyb21cbiAqIHtAbGluayBQSVhJLnRpY2tlci5zaGFyZWR9LlxuICpcbiAqIEBwYXJhbSBkZWx0YVRpbWUge251bWJlcn1cbiAqL1xuSW50ZXJhY3Rpb25NYW5hZ2VyLnByb3RvdHlwZS51cGRhdGUgPSBmdW5jdGlvbiAoZGVsdGFUaW1lKVxue1xuICAgIHRoaXMuX2RlbHRhVGltZSArPSBkZWx0YVRpbWU7XG5cbiAgICBpZiAodGhpcy5fZGVsdGFUaW1lIDwgdGhpcy5pbnRlcmFjdGlvbkZyZXF1ZW5jeSlcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLl9kZWx0YVRpbWUgPSAwO1xuXG4gICAgaWYgKCF0aGlzLmludGVyYWN0aW9uRE9NRWxlbWVudClcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBpZiB0aGUgdXNlciBtb3ZlIHRoZSBtb3VzZSB0aGlzIGNoZWNrIGhhcyBhbHJlYWR5IGJlZW4gZGZvbmUgdXNpbmcgdGhlIG1vdXNlIG1vdmUhXG4gICAgaWYodGhpcy5kaWRNb3ZlKVxuICAgIHtcbiAgICAgICAgdGhpcy5kaWRNb3ZlID0gZmFsc2U7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLmN1cnNvciA9ICdpbmhlcml0JztcblxuICAgIHRoaXMucHJvY2Vzc0ludGVyYWN0aXZlKHRoaXMubW91c2UuZ2xvYmFsLCB0aGlzLnJlbmRlcmVyLl9sYXN0T2JqZWN0UmVuZGVyZWQsIHRoaXMucHJvY2Vzc01vdXNlT3Zlck91dCwgdHJ1ZSApO1xuXG4gICAgaWYgKHRoaXMuY3VycmVudEN1cnNvclN0eWxlICE9PSB0aGlzLmN1cnNvcilcbiAgICB7XG4gICAgICAgIHRoaXMuY3VycmVudEN1cnNvclN0eWxlID0gdGhpcy5jdXJzb3I7XG4gICAgICAgIHRoaXMuaW50ZXJhY3Rpb25ET01FbGVtZW50LnN0eWxlLmN1cnNvciA9IHRoaXMuY3Vyc29yO1xuICAgIH1cblxuICAgIC8vVE9ET1xufTtcblxuLyoqXG4gKiBEaXNwYXRjaGVzIGFuIGV2ZW50IG9uIHRoZSBkaXNwbGF5IG9iamVjdCB0aGF0IHdhcyBpbnRlcmFjdGVkIHdpdGhcbiAqXG4gKiBAcGFyYW0gZGlzcGxheU9iamVjdCB7UElYSS5Db250YWluZXJ8UElYSS5TcHJpdGV8UElYSS5leHRyYXMuVGlsaW5nU3ByaXRlfSB0aGUgZGlzcGxheSBvYmplY3QgaW4gcXVlc3Rpb25cbiAqIEBwYXJhbSBldmVudFN0cmluZyB7c3RyaW5nfSB0aGUgbmFtZSBvZiB0aGUgZXZlbnQgKGUuZywgbW91c2Vkb3duKVxuICogQHBhcmFtIGV2ZW50RGF0YSB7b2JqZWN0fSB0aGUgZXZlbnQgZGF0YSBvYmplY3RcbiAqIEBwcml2YXRlXG4gKi9cbkludGVyYWN0aW9uTWFuYWdlci5wcm90b3R5cGUuZGlzcGF0Y2hFdmVudCA9IGZ1bmN0aW9uICggZGlzcGxheU9iamVjdCwgZXZlbnRTdHJpbmcsIGV2ZW50RGF0YSApXG57XG4gICAgaWYoIWV2ZW50RGF0YS5zdG9wcGVkKVxuICAgIHtcbiAgICAgICAgZXZlbnREYXRhLnRhcmdldCA9IGRpc3BsYXlPYmplY3Q7XG4gICAgICAgIGV2ZW50RGF0YS50eXBlID0gZXZlbnRTdHJpbmc7XG5cbiAgICAgICAgZGlzcGxheU9iamVjdC5lbWl0KCBldmVudFN0cmluZywgZXZlbnREYXRhICk7XG5cbiAgICAgICAgaWYoIGRpc3BsYXlPYmplY3RbZXZlbnRTdHJpbmddIClcbiAgICAgICAge1xuICAgICAgICAgICAgZGlzcGxheU9iamVjdFtldmVudFN0cmluZ10oIGV2ZW50RGF0YSApO1xuICAgICAgICB9XG4gICAgfVxufTtcblxuLyoqXG4gKiBNYXBzIHggYW5kIHkgY29vcmRzIGZyb20gYSBET00gb2JqZWN0IGFuZCBtYXBzIHRoZW0gY29ycmVjdGx5IHRvIHRoZSBwaXhpIHZpZXcuIFRoZSByZXN1bHRpbmcgdmFsdWUgaXMgc3RvcmVkIGluIHRoZSBwb2ludC5cbiAqIFRoaXMgdGFrZXMgaW50byBhY2NvdW50IHRoZSBmYWN0IHRoYXQgdGhlIERPTSBlbGVtZW50IGNvdWxkIGJlIHNjYWxlZCBhbmQgcG9zaXRpb25lZCBhbnl3aGVyZSBvbiB0aGUgc2NyZWVuLlxuICpcbiAqIEBwYXJhbSAge1BJWEkuUG9pbnR9IHBvaW50IHRoZSBwb2ludCB0aGF0IHRoZSByZXN1bHQgd2lsbCBiZSBzdG9yZWQgaW5cbiAqIEBwYXJhbSAge251bWJlcn0geCAgICAgdGhlIHggY29vcmQgb2YgdGhlIHBvc2l0aW9uIHRvIG1hcFxuICogQHBhcmFtICB7bnVtYmVyfSB5ICAgICB0aGUgeSBjb29yZCBvZiB0aGUgcG9zaXRpb24gdG8gbWFwXG4gKi9cbkludGVyYWN0aW9uTWFuYWdlci5wcm90b3R5cGUubWFwUG9zaXRpb25Ub1BvaW50ID0gZnVuY3Rpb24gKCBwb2ludCwgeCwgeSApXG57XG4gICAgdmFyIHJlY3QgPSB0aGlzLmludGVyYWN0aW9uRE9NRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICBwb2ludC54ID0gKCAoIHggLSByZWN0LmxlZnQgKSAqICh0aGlzLmludGVyYWN0aW9uRE9NRWxlbWVudC53aWR0aCAgLyByZWN0LndpZHRoICApICkgLyB0aGlzLnJlc29sdXRpb247XG4gICAgcG9pbnQueSA9ICggKCB5IC0gcmVjdC50b3AgICkgKiAodGhpcy5pbnRlcmFjdGlvbkRPTUVsZW1lbnQuaGVpZ2h0IC8gcmVjdC5oZWlnaHQgKSApIC8gdGhpcy5yZXNvbHV0aW9uO1xufTtcblxuLyoqXG4gKiBUaGlzIGZ1bmN0aW9uIGlzIHByb3ZpZGVzIGEgbmVhdCB3YXkgb2YgY3Jhd2xpbmcgdGhyb3VnaCB0aGUgc2NlbmUgZ3JhcGggYW5kIHJ1bm5pbmcgYSBzcGVjaWZpZWQgZnVuY3Rpb24gb24gYWxsIGludGVyYWN0aXZlIG9iamVjdHMgaXQgZmluZHMuXG4gKiBJdCB3aWxsIGFsc28gdGFrZSBjYXJlIG9mIGhpdCB0ZXN0aW5nIHRoZSBpbnRlcmFjdGl2ZSBvYmplY3RzIGFuZCBwYXNzZXMgdGhlIGhpdCBhY3Jvc3MgaW4gdGhlIGZ1bmN0aW9uLlxuICpcbiAqIEBwYXJhbSAge1BJWEkuUG9pbnR9IHBvaW50IHRoZSBwb2ludCB0aGF0IGlzIHRlc3RlZCBmb3IgY29sbGlzaW9uXG4gKiBAcGFyYW0gIHtQSVhJLkNvbnRhaW5lcnxQSVhJLlNwcml0ZXxQSVhJLmV4dHJhcy5UaWxpbmdTcHJpdGV9IGRpc3BsYXlPYmplY3QgdGhlIGRpc3BsYXlPYmplY3QgdGhhdCB3aWxsIGJlIGhpdCB0ZXN0IChyZWN1cmNzaXZseSBjcmF3bHMgaXRzIGNoaWxkcmVuKVxuICogQHBhcmFtICB7RnVuY3Rpb259IGZ1bmMgdGhlIGZ1bmN0aW9uIHRoYXQgd2lsbCBiZSBjYWxsZWQgb24gZWFjaCBpbnRlcmFjdGl2ZSBvYmplY3QuIFRoZSBkaXNwbGF5T2JqZWN0IGFuZCBoaXQgd2lsbCBiZSBwYXNzZWQgdG8gdGhlIGZ1bmN0aW9uXG4gKiBAcGFyYW0gIHtib29sZWFufSBoaXRUZXN0IHRoaXMgaW5kaWNhdGVzIGlmIHRoZSBvYmplY3RzIGluc2lkZSBzaG91bGQgYmUgaGl0IHRlc3QgYWdhaW5zdCB0aGUgcG9pbnRcbiAqIEByZXR1cm4ge2Jvb2xlYW59IHJldHVybnMgdHJ1ZSBpZiB0aGUgZGlzcGxheU9iamVjdCBoaXQgdGhlIHBvaW50XG4gKi9cbkludGVyYWN0aW9uTWFuYWdlci5wcm90b3R5cGUucHJvY2Vzc0ludGVyYWN0aXZlID0gZnVuY3Rpb24gKHBvaW50LCBkaXNwbGF5T2JqZWN0LCBmdW5jLCBoaXRUZXN0LCBpbnRlcmFjdGl2ZSlcbntcbiAgICBpZighZGlzcGxheU9iamVjdCB8fCAhZGlzcGxheU9iamVjdC52aXNpYmxlKVxuICAgIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIC8vIFRvb2sgYSBsaXR0bGUgd2hpbGUgdG8gcmV3b3JrIHRoaXMgZnVuY3Rpb24gY29ycmVjdGx5ISBCdXQgbm93IGl0IGlzIGRvbmUgYW5kIG5pY2UgYW5kIG9wdGltaXNlZC4gXl9eXG4gICAgLy8gXG4gICAgLy8gVGhpcyBmdW5jdGlvbiB3aWxsIG5vdyBsb29wIHRocm91Z2ggYWxsIG9iamVjdHMgYW5kIHRoZW4gb25seSBoaXQgdGVzdCB0aGUgb2JqZWN0cyBpdCBIQVMgdG8sIG5vdCBhbGwgb2YgdGhlbS4gTVVDSCBmYXN0ZXIuLlxuICAgIC8vIEFuIG9iamVjdCB3aWxsIGJlIGhpdCB0ZXN0IGlmIHRoZSBmb2xsb3dpbmcgaXMgdHJ1ZTpcbiAgICAvLyBcbiAgICAvLyAxOiBJdCBpcyBpbnRlcmFjdGl2ZS5cbiAgICAvLyAyOiBJdCBiZWxvbmdzIHRvIGEgcGFyZW50IHRoYXQgaXMgaW50ZXJhY3RpdmUgQU5EIG9uZSBvZiB0aGUgcGFyZW50cyBjaGlsZHJlbiBoYXZlIG5vdCBhbHJlYWR5IGJlZW4gaGl0LlxuICAgIC8vIFxuICAgIC8vIEFzIGFub3RoZXIgbGl0dGxlIG9wdGltaXNhdGlvbiBvbmNlIGFuIGludGVyYWN0aXZlIG9iamVjdCBoYXMgYmVlbiBoaXQgd2UgY2FuIGNhcnJ5IG9uIHRocm91Z2ggdGhlIHNjZW5lZ3JhcGgsIGJ1dCB3ZSBrbm93IHRoYXQgdGhlcmUgd2lsbCBiZSBubyBtb3JlIGhpdHMhIFNvIHdlIGNhbiBhdm9pZCBleHRyYSBoaXQgdGVzdHNcbiAgICAvLyBBIGZpbmFsIG9wdGltaXNhdGlvbiBpcyB0aGF0IGFuIG9iamVjdCBpcyBub3QgaGl0IHRlc3QgZGlyZWN0bHkgaWYgYSBjaGlsZCBoYXMgYWxyZWFkeSBiZWVuIGhpdC5cbiAgICBcbiAgICB2YXIgaGl0ID0gZmFsc2UsXG4gICAgICAgIGludGVyYWN0aXZlUGFyZW50ID0gaW50ZXJhY3RpdmUgPSBkaXNwbGF5T2JqZWN0LmludGVyYWN0aXZlIHx8IGludGVyYWN0aXZlO1xuXG4gICAgLy8gaWYgdGhlIGRpc3BsYXlvYmplY3QgaGFzIGEgaGl0QXJlYSwgdGhlbiBpdCBkb2VzIG5vdCBuZWVkIHRvIGhpdFRlc3QgY2hpbGRyZW4uXG4gICAgaWYoZGlzcGxheU9iamVjdC5oaXRBcmVhKVxuICAgIHtcbiAgICAgICAgaW50ZXJhY3RpdmVQYXJlbnQgPSBmYWxzZTtcbiAgICB9XG5cbiAgICAvLyAqKiBGUkVFIFRJUCAqKiEgSWYgYW4gb2JqZWN0IGlzIG5vdCBpbnRlcmFjdHRpdmUgb3IgaGFzIG5vIGJ1dHRvbnMgaW4gaXQgKHN1Y2ggYXMgYSBnYW1lIHNjZW5lISkgc2V0IGludGVyYWN0aXZlQ2hpbGRyZW4gdG8gZmFsc2UgZm9yIHRoYXQgZGlzcGxheU9iamVjdC5cbiAgICAvLyBUaGlzIHdpbGwgYWxsb3cgcGl4aSB0byBjb21wbGV0bHkgaWdub3JlIGFuZCBieXBhc3MgY2hlY2tpbmcgdGhlIGRpc3BsYXlPYmplY3RzIGNoaWxkcmVuLlxuICAgIGlmKGRpc3BsYXlPYmplY3QuaW50ZXJhY3RpdmVDaGlsZHJlbilcbiAgICB7ICAgICAgIFxuICAgICAgICB2YXIgY2hpbGRyZW4gPSBkaXNwbGF5T2JqZWN0LmNoaWxkcmVuO1xuICAgICAgICBcbiAgICAgICAgZm9yICh2YXIgaSA9IGNoaWxkcmVuLmxlbmd0aC0xOyBpID49IDA7IGktLSlcbiAgICAgICAge1xuICAgICAgICAgICAgLy8gdGltZSB0byBnZXQgcmVjdXJzaXZlLi4gaWYgdGhpcyBmdW5jdGlvbiB3aWxsIHJldHVybiBpZiBzb210aGluZyBpcyBoaXQuLlxuICAgICAgICAgICAgaWYoIHRoaXMucHJvY2Vzc0ludGVyYWN0aXZlKHBvaW50LCBjaGlsZHJlbltpXSwgZnVuYywgaGl0VGVzdCwgaW50ZXJhY3RpdmVQYXJlbnQpIClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBoaXQgPSB0cnVlO1xuXG4gICAgICAgICAgICAgICAgLy8gd2Ugbm8gbG9uZ2VyIG5lZWQgdG8gaGl0IHRlc3QgYW55IG1vcmUgb2JqZWN0cyBpbiB0aGlzIGNvbnRhaW5lciBhcyB3ZSB3ZSBub3cga25vdyB0aGUgcGFyZW50IGhhcyBiZWVuIGhpdFxuICAgICAgICAgICAgICAgIGludGVyYWN0aXZlUGFyZW50ID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgLy8gSWYgdGhlIGNoaWxkIGlzIGludGVyYWN0aXZlICwgdGhhdCBtZWFucyB0aGF0IHRoZSBvYmplY3QgaGl0IHdhcyBhY3R1YWxseSBpbnRlcmFjdGl2ZSBhbmQgbm90IGp1c3QgdGhlIGNoaWxkIG9mIGFuIGludGVyYWN0aXZlIG9iamVjdC4gXG4gICAgICAgICAgICAgICAgLy8gVGhpcyBtZWFucyB3ZSBubyBsb25nZXIgbmVlZCB0byBoaXQgdGVzdCBhbnl0aGluZyBlbHNlLiBXZSBzdGlsbCBuZWVkIHRvIHJ1biB0aHJvdWdoIGFsbCBvYmplY3RzLCBidXQgd2UgZG9uJ3QgbmVlZCB0byBwZXJmb3JtIGFueSBoaXQgdGVzdHMuXG4gICAgICAgICAgICAgICAgaWYoY2hpbGRyZW5baV0uaW50ZXJhY3RpdmUpXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBoaXRUZXN0ID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gbm8gcG9pbnQgcnVubmluZyB0aGlzIGlmIHRoZSBpdGVtIGlzIG5vdCBpbnRlcmFjdGl2ZSBvciBkb2VzIG5vdCBoYXZlIGFuIGludGVyYWN0aXZlIHBhcmVudC5cbiAgICBpZihpbnRlcmFjdGl2ZSlcbiAgICB7XG4gICAgICAgIC8vIGlmIHdlIGFyZSBoaXQgdGVzdGluZyAoYXMgaW4gd2UgaGF2ZSBubyBoaXQgYW55IG9iamVjdHMgeWV0KVxuICAgICAgICAvLyBXZSBhbHNvIGRvbid0IG5lZWQgdG8gd29ycnkgYWJvdXQgaGl0IHRlc3RpbmcgaWYgb25jZSBvZiB0aGUgZGlzcGxheU9iamVjdHMgY2hpbGRyZW4gaGFzIGFscmVhZHkgYmVlbiBoaXQhXG4gICAgICAgIGlmKGhpdFRlc3QgJiYgIWhpdClcbiAgICAgICAgeyAgXG4gICAgICAgICAgICBpZihkaXNwbGF5T2JqZWN0LmhpdEFyZWEpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgZGlzcGxheU9iamVjdC53b3JsZFRyYW5zZm9ybS5hcHBseUludmVyc2UocG9pbnQsICB0aGlzLl90ZW1wUG9pbnQpO1xuICAgICAgICAgICAgICAgIGhpdCA9IGRpc3BsYXlPYmplY3QuaGl0QXJlYS5jb250YWlucyggdGhpcy5fdGVtcFBvaW50LngsIHRoaXMuX3RlbXBQb2ludC55ICk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmKGRpc3BsYXlPYmplY3QuY29udGFpbnNQb2ludClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBoaXQgPSBkaXNwbGF5T2JqZWN0LmNvbnRhaW5zUG9pbnQocG9pbnQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYoZGlzcGxheU9iamVjdC5pbnRlcmFjdGl2ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgZnVuYyhkaXNwbGF5T2JqZWN0LCBoaXQpOyBcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBoaXQ7XG4gIFxufTtcblxuXG4vKipcbiAqIElzIGNhbGxlZCB3aGVuIHRoZSBtb3VzZSBidXR0b24gaXMgcHJlc3NlZCBkb3duIG9uIHRoZSByZW5kZXJlciBlbGVtZW50XG4gKlxuICogQHBhcmFtIGV2ZW50IHtFdmVudH0gVGhlIERPTSBldmVudCBvZiBhIG1vdXNlIGJ1dHRvbiBiZWluZyBwcmVzc2VkIGRvd25cbiAqIEBwcml2YXRlXG4gKi9cbkludGVyYWN0aW9uTWFuYWdlci5wcm90b3R5cGUub25Nb3VzZURvd24gPSBmdW5jdGlvbiAoZXZlbnQpXG57XG4gICAgdGhpcy5tb3VzZS5vcmlnaW5hbEV2ZW50ID0gZXZlbnQ7XG4gICAgdGhpcy5ldmVudERhdGEuZGF0YSA9IHRoaXMubW91c2U7XG4gICAgdGhpcy5ldmVudERhdGEuc3RvcHBlZCA9IGZhbHNlO1xuXG4gICAgLy8gVXBkYXRlIGludGVybmFsIG1vdXNlIHJlZmVyZW5jZVxuICAgIHRoaXMubWFwUG9zaXRpb25Ub1BvaW50KCB0aGlzLm1vdXNlLmdsb2JhbCwgZXZlbnQuY2xpZW50WCwgZXZlbnQuY2xpZW50WSk7XG5cbiAgICBpZiAodGhpcy5hdXRvUHJldmVudERlZmF1bHQpXG4gICAge1xuICAgICAgICB0aGlzLm1vdXNlLm9yaWdpbmFsRXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICB9XG5cbiAgICB0aGlzLnByb2Nlc3NJbnRlcmFjdGl2ZSh0aGlzLm1vdXNlLmdsb2JhbCwgdGhpcy5yZW5kZXJlci5fbGFzdE9iamVjdFJlbmRlcmVkLCB0aGlzLnByb2Nlc3NNb3VzZURvd24sIHRydWUgKTtcbn07XG5cbi8qKlxuICogUHJvY2Vzc2VzIHRoZSByZXN1bHQgb2YgdGhlIG1vdXNlIGRvd24gY2hlY2sgYW5kIGRpc3BhdGNoZXMgdGhlIGV2ZW50IGlmIG5lZWQgYmVcbiAqXG4gKiBAcGFyYW0gZGlzcGxheU9iamVjdCB7UElYSS5Db250YWluZXJ8UElYSS5TcHJpdGV8UElYSS5leHRyYXMuVGlsaW5nU3ByaXRlfSBUaGUgZGlzcGxheSBvYmplY3QgdGhhdCB3YXMgdGVzdGVkXG4gKiBAcGFyYW0gaGl0IHtib29sZWFufSB0aGUgcmVzdWx0IG9mIHRoZSBoaXQgdGVzdCBvbiB0aGUgZGlzcGF5IG9iamVjdFxuICogQHByaXZhdGVcbiAqL1xuSW50ZXJhY3Rpb25NYW5hZ2VyLnByb3RvdHlwZS5wcm9jZXNzTW91c2VEb3duID0gZnVuY3Rpb24gKCBkaXNwbGF5T2JqZWN0LCBoaXQgKVxue1xuICAgIHZhciBlID0gdGhpcy5tb3VzZS5vcmlnaW5hbEV2ZW50O1xuICAgIFxuICAgIHZhciBpc1JpZ2h0QnV0dG9uID0gZS5idXR0b24gPT09IDIgfHwgZS53aGljaCA9PT0gMztcblxuICAgIGlmKGhpdClcbiAgICB7XG4gICAgICAgIGRpc3BsYXlPYmplY3RbIGlzUmlnaHRCdXR0b24gPyAnX2lzUmlnaHREb3duJyA6ICdfaXNMZWZ0RG93bicgXSA9IHRydWU7XG4gICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudCggZGlzcGxheU9iamVjdCwgaXNSaWdodEJ1dHRvbiA/ICdyaWdodGRvd24nIDogJ21vdXNlZG93bicsIHRoaXMuZXZlbnREYXRhICk7XG4gICAgfVxufTtcblxuXG5cbi8qKlxuICogSXMgY2FsbGVkIHdoZW4gdGhlIG1vdXNlIGJ1dHRvbiBpcyByZWxlYXNlZCBvbiB0aGUgcmVuZGVyZXIgZWxlbWVudFxuICpcbiAqIEBwYXJhbSBldmVudCB7RXZlbnR9IFRoZSBET00gZXZlbnQgb2YgYSBtb3VzZSBidXR0b24gYmVpbmcgcmVsZWFzZWRcbiAqIEBwcml2YXRlXG4gKi9cbkludGVyYWN0aW9uTWFuYWdlci5wcm90b3R5cGUub25Nb3VzZVVwID0gZnVuY3Rpb24gKGV2ZW50KVxue1xuICAgIHRoaXMubW91c2Uub3JpZ2luYWxFdmVudCA9IGV2ZW50O1xuICAgIHRoaXMuZXZlbnREYXRhLmRhdGEgPSB0aGlzLm1vdXNlO1xuICAgIHRoaXMuZXZlbnREYXRhLnN0b3BwZWQgPSBmYWxzZTtcblxuICAgIC8vIFVwZGF0ZSBpbnRlcm5hbCBtb3VzZSByZWZlcmVuY2VcbiAgICB0aGlzLm1hcFBvc2l0aW9uVG9Qb2ludCggdGhpcy5tb3VzZS5nbG9iYWwsIGV2ZW50LmNsaWVudFgsIGV2ZW50LmNsaWVudFkpO1xuXG4gICAgdGhpcy5wcm9jZXNzSW50ZXJhY3RpdmUodGhpcy5tb3VzZS5nbG9iYWwsIHRoaXMucmVuZGVyZXIuX2xhc3RPYmplY3RSZW5kZXJlZCwgdGhpcy5wcm9jZXNzTW91c2VVcCwgdHJ1ZSApO1xufTtcblxuLyoqXG4gKiBQcm9jZXNzZXMgdGhlIHJlc3VsdCBvZiB0aGUgbW91c2UgdXAgY2hlY2sgYW5kIGRpc3BhdGNoZXMgdGhlIGV2ZW50IGlmIG5lZWQgYmVcbiAqXG4gKiBAcGFyYW0gZGlzcGxheU9iamVjdCB7UElYSS5Db250YWluZXJ8UElYSS5TcHJpdGV8UElYSS5leHRyYXMuVGlsaW5nU3ByaXRlfSBUaGUgZGlzcGxheSBvYmplY3QgdGhhdCB3YXMgdGVzdGVkXG4gKiBAcGFyYW0gaGl0IHtib29sZWFufSB0aGUgcmVzdWx0IG9mIHRoZSBoaXQgdGVzdCBvbiB0aGUgZGlzcGxheSBvYmplY3RcbiAqIEBwcml2YXRlXG4gKi9cbkludGVyYWN0aW9uTWFuYWdlci5wcm90b3R5cGUucHJvY2Vzc01vdXNlVXAgPSBmdW5jdGlvbiAoIGRpc3BsYXlPYmplY3QsIGhpdCApXG57XG4gICAgdmFyIGUgPSB0aGlzLm1vdXNlLm9yaWdpbmFsRXZlbnQ7XG5cbiAgICB2YXIgaXNSaWdodEJ1dHRvbiA9IGUuYnV0dG9uID09PSAyIHx8IGUud2hpY2ggPT09IDM7XG4gICAgdmFyIGlzRG93biA9ICBpc1JpZ2h0QnV0dG9uID8gJ19pc1JpZ2h0RG93bicgOiAnX2lzTGVmdERvd24nO1xuXG4gICAgaWYoaGl0KVxuICAgIHtcbiAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50KCBkaXNwbGF5T2JqZWN0LCBpc1JpZ2h0QnV0dG9uID8gJ3JpZ2h0dXAnIDogJ21vdXNldXAnLCB0aGlzLmV2ZW50RGF0YSApO1xuXG4gICAgICAgIGlmKCBkaXNwbGF5T2JqZWN0WyBpc0Rvd24gXSApXG4gICAgICAgIHtcbiAgICAgICAgICAgIGRpc3BsYXlPYmplY3RbIGlzRG93biBdID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLmRpc3BhdGNoRXZlbnQoIGRpc3BsYXlPYmplY3QsIGlzUmlnaHRCdXR0b24gPyAncmlnaHRjbGljaycgOiAnY2xpY2snLCB0aGlzLmV2ZW50RGF0YSApO1xuICAgICAgICB9XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIGlmKCBkaXNwbGF5T2JqZWN0WyBpc0Rvd24gXSApXG4gICAgICAgIHtcbiAgICAgICAgICAgIGRpc3BsYXlPYmplY3RbIGlzRG93biBdID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLmRpc3BhdGNoRXZlbnQoIGRpc3BsYXlPYmplY3QsIGlzUmlnaHRCdXR0b24gPyAncmlnaHR1cG91dHNpZGUnIDogJ21vdXNldXBvdXRzaWRlJywgdGhpcy5ldmVudERhdGEgKTtcbiAgICAgICAgfVxuICAgIH1cbn07XG5cblxuLyoqXG4gKiBJcyBjYWxsZWQgd2hlbiB0aGUgbW91c2UgbW92ZXMgYWNyb3NzIHRoZSByZW5kZXJlciBlbGVtZW50XG4gKlxuICogQHBhcmFtIGV2ZW50IHtFdmVudH0gVGhlIERPTSBldmVudCBvZiB0aGUgbW91c2UgbW92aW5nXG4gKiBAcHJpdmF0ZVxuICovXG5JbnRlcmFjdGlvbk1hbmFnZXIucHJvdG90eXBlLm9uTW91c2VNb3ZlID0gZnVuY3Rpb24gKGV2ZW50KVxue1xuICAgIHRoaXMubW91c2Uub3JpZ2luYWxFdmVudCA9IGV2ZW50O1xuICAgIHRoaXMuZXZlbnREYXRhLmRhdGEgPSB0aGlzLm1vdXNlO1xuICAgIHRoaXMuZXZlbnREYXRhLnN0b3BwZWQgPSBmYWxzZTtcblxuICAgIHRoaXMubWFwUG9zaXRpb25Ub1BvaW50KCB0aGlzLm1vdXNlLmdsb2JhbCwgZXZlbnQuY2xpZW50WCwgZXZlbnQuY2xpZW50WSk7XG5cbiAgICB0aGlzLmRpZE1vdmUgPSB0cnVlO1xuXG4gICAgdGhpcy5jdXJzb3IgPSAnaW5oZXJpdCc7XG5cbiAgICB0aGlzLnByb2Nlc3NJbnRlcmFjdGl2ZSh0aGlzLm1vdXNlLmdsb2JhbCwgdGhpcy5yZW5kZXJlci5fbGFzdE9iamVjdFJlbmRlcmVkLCB0aGlzLnByb2Nlc3NNb3VzZU1vdmUsIHRydWUgKTtcblxuICAgIGlmICh0aGlzLmN1cnJlbnRDdXJzb3JTdHlsZSAhPT0gdGhpcy5jdXJzb3IpXG4gICAge1xuICAgICAgICB0aGlzLmN1cnJlbnRDdXJzb3JTdHlsZSA9IHRoaXMuY3Vyc29yO1xuICAgICAgICB0aGlzLmludGVyYWN0aW9uRE9NRWxlbWVudC5zdHlsZS5jdXJzb3IgPSB0aGlzLmN1cnNvcjtcbiAgICB9XG5cbiAgICAvL1RPRE8gQlVHIGZvciBwYXJlbnRzIGluZXJhY3RpdmUgb2JqZWN0IChib3JkZXIgb3JkZXIgaXNzdWUpXG59O1xuXG4vKipcbiAqIFByb2Nlc3NlcyB0aGUgcmVzdWx0IG9mIHRoZSBtb3VzZSBtb3ZlIGNoZWNrIGFuZCBkaXNwYXRjaGVzIHRoZSBldmVudCBpZiBuZWVkIGJlXG4gKlxuICogQHBhcmFtIGRpc3BsYXlPYmplY3Qge1BJWEkuQ29udGFpbmVyfFBJWEkuU3ByaXRlfFBJWEkuZXh0cmFzLlRpbGluZ1Nwcml0ZX0gVGhlIGRpc3BsYXkgb2JqZWN0IHRoYXQgd2FzIHRlc3RlZFxuICogQHBhcmFtIGhpdCB7Ym9vbGVhbn0gdGhlIHJlc3VsdCBvZiB0aGUgaGl0IHRlc3Qgb24gdGhlIGRpc3BsYXkgb2JqZWN0XG4gKiBAcHJpdmF0ZVxuICovXG5JbnRlcmFjdGlvbk1hbmFnZXIucHJvdG90eXBlLnByb2Nlc3NNb3VzZU1vdmUgPSBmdW5jdGlvbiAoIGRpc3BsYXlPYmplY3QsIGhpdCApXG57XG4gICAgdGhpcy5kaXNwYXRjaEV2ZW50KCBkaXNwbGF5T2JqZWN0LCAnbW91c2Vtb3ZlJywgdGhpcy5ldmVudERhdGEpO1xuICAgIHRoaXMucHJvY2Vzc01vdXNlT3Zlck91dChkaXNwbGF5T2JqZWN0LCBoaXQpO1xufTtcblxuXG4vKipcbiAqIElzIGNhbGxlZCB3aGVuIHRoZSBtb3VzZSBpcyBtb3ZlZCBvdXQgb2YgdGhlIHJlbmRlcmVyIGVsZW1lbnRcbiAqXG4gKiBAcGFyYW0gZXZlbnQge0V2ZW50fSBUaGUgRE9NIGV2ZW50IG9mIGEgbW91c2UgYmVpbmcgbW92ZWQgb3V0XG4gKiBAcHJpdmF0ZVxuICovXG5JbnRlcmFjdGlvbk1hbmFnZXIucHJvdG90eXBlLm9uTW91c2VPdXQgPSBmdW5jdGlvbiAoZXZlbnQpXG57XG4gICAgdGhpcy5tb3VzZS5vcmlnaW5hbEV2ZW50ID0gZXZlbnQ7XG4gICAgdGhpcy5ldmVudERhdGEuc3RvcHBlZCA9IGZhbHNlO1xuXG4gICAgLy8gVXBkYXRlIGludGVybmFsIG1vdXNlIHJlZmVyZW5jZVxuICAgIHRoaXMubWFwUG9zaXRpb25Ub1BvaW50KCB0aGlzLm1vdXNlLmdsb2JhbCwgZXZlbnQuY2xpZW50WCwgZXZlbnQuY2xpZW50WSk7XG5cbiAgICB0aGlzLmludGVyYWN0aW9uRE9NRWxlbWVudC5zdHlsZS5jdXJzb3IgPSAnaW5oZXJpdCc7XG5cbiAgICAvLyBUT0RPIG9wdGltaXplIGJ5IG5vdCBjaGVjayBFVkVSWSBUSU1FISBtYXliZSBoYWxmIGFzIG9mdGVuPyAvL1xuICAgIHRoaXMubWFwUG9zaXRpb25Ub1BvaW50KCB0aGlzLm1vdXNlLmdsb2JhbCwgZXZlbnQuY2xpZW50WCwgZXZlbnQuY2xpZW50WSApO1xuXG4gICAgdGhpcy5wcm9jZXNzSW50ZXJhY3RpdmUoIHRoaXMubW91c2UuZ2xvYmFsLCB0aGlzLnJlbmRlcmVyLl9sYXN0T2JqZWN0UmVuZGVyZWQsIHRoaXMucHJvY2Vzc01vdXNlT3Zlck91dCwgZmFsc2UgKTtcbn07XG5cbi8qKlxuICogUHJvY2Vzc2VzIHRoZSByZXN1bHQgb2YgdGhlIG1vdXNlIG92ZXIvb3V0IGNoZWNrIGFuZCBkaXNwYXRjaGVzIHRoZSBldmVudCBpZiBuZWVkIGJlXG4gKlxuICogQHBhcmFtIGRpc3BsYXlPYmplY3Qge1BJWEkuQ29udGFpbmVyfFBJWEkuU3ByaXRlfFBJWEkuZXh0cmFzLlRpbGluZ1Nwcml0ZX0gVGhlIGRpc3BsYXkgb2JqZWN0IHRoYXQgd2FzIHRlc3RlZFxuICogQHBhcmFtIGhpdCB7Ym9vbGVhbn0gdGhlIHJlc3VsdCBvZiB0aGUgaGl0IHRlc3Qgb24gdGhlIGRpc3BsYXkgb2JqZWN0XG4gKiBAcHJpdmF0ZVxuICovXG5JbnRlcmFjdGlvbk1hbmFnZXIucHJvdG90eXBlLnByb2Nlc3NNb3VzZU92ZXJPdXQgPSBmdW5jdGlvbiAoIGRpc3BsYXlPYmplY3QsIGhpdCApXG57XG4gICAgaWYoaGl0KVxuICAgIHtcbiAgICAgICAgaWYoIWRpc3BsYXlPYmplY3QuX292ZXIpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGRpc3BsYXlPYmplY3QuX292ZXIgPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50KCBkaXNwbGF5T2JqZWN0LCAnbW91c2VvdmVyJywgdGhpcy5ldmVudERhdGEgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChkaXNwbGF5T2JqZWN0LmJ1dHRvbk1vZGUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuY3Vyc29yID0gZGlzcGxheU9iamVjdC5kZWZhdWx0Q3Vyc29yO1xuICAgICAgICB9XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIGlmKGRpc3BsYXlPYmplY3QuX292ZXIpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGRpc3BsYXlPYmplY3QuX292ZXIgPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudCggZGlzcGxheU9iamVjdCwgJ21vdXNlb3V0JywgdGhpcy5ldmVudERhdGEpO1xuICAgICAgICB9XG4gICAgfVxufTtcblxuXG4vKipcbiAqIElzIGNhbGxlZCB3aGVuIGEgdG91Y2ggaXMgc3RhcnRlZCBvbiB0aGUgcmVuZGVyZXIgZWxlbWVudFxuICpcbiAqIEBwYXJhbSBldmVudCB7RXZlbnR9IFRoZSBET00gZXZlbnQgb2YgYSB0b3VjaCBzdGFydGluZyBvbiB0aGUgcmVuZGVyZXIgdmlld1xuICogQHByaXZhdGVcbiAqL1xuSW50ZXJhY3Rpb25NYW5hZ2VyLnByb3RvdHlwZS5vblRvdWNoU3RhcnQgPSBmdW5jdGlvbiAoZXZlbnQpXG57XG4gICAgaWYgKHRoaXMuYXV0b1ByZXZlbnREZWZhdWx0KVxuICAgIHtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICB9XG5cbiAgICB2YXIgY2hhbmdlZFRvdWNoZXMgPSBldmVudC5jaGFuZ2VkVG91Y2hlcztcbiAgICB2YXIgY0xlbmd0aCA9IGNoYW5nZWRUb3VjaGVzLmxlbmd0aDtcblxuICAgIGZvciAodmFyIGk9MDsgaSA8IGNMZW5ndGg7IGkrKylcbiAgICB7XG4gICAgICAgIHZhciB0b3VjaEV2ZW50ID0gY2hhbmdlZFRvdWNoZXNbaV07XG4gICAgICAgIC8vVE9ETyBQT09MXG4gICAgICAgIHZhciB0b3VjaERhdGEgPSB0aGlzLmdldFRvdWNoRGF0YSggdG91Y2hFdmVudCApO1xuXG4gICAgICAgIHRvdWNoRGF0YS5vcmlnaW5hbEV2ZW50ID0gZXZlbnQ7XG5cbiAgICAgICAgdGhpcy5ldmVudERhdGEuZGF0YSA9IHRvdWNoRGF0YTtcbiAgICAgICAgdGhpcy5ldmVudERhdGEuc3RvcHBlZCA9IGZhbHNlO1xuXG4gICAgICAgIHRoaXMucHJvY2Vzc0ludGVyYWN0aXZlKCB0b3VjaERhdGEuZ2xvYmFsLCB0aGlzLnJlbmRlcmVyLl9sYXN0T2JqZWN0UmVuZGVyZWQsIHRoaXMucHJvY2Vzc1RvdWNoU3RhcnQsIHRydWUgKTtcblxuICAgICAgICB0aGlzLnJldHVyblRvdWNoRGF0YSggdG91Y2hEYXRhICk7XG4gICAgfVxufTtcblxuLyoqXG4gKiBQcm9jZXNzZXMgdGhlIHJlc3VsdCBvZiBhIHRvdWNoIGNoZWNrIGFuZCBkaXNwYXRjaGVzIHRoZSBldmVudCBpZiBuZWVkIGJlXG4gKlxuICogQHBhcmFtIGRpc3BsYXlPYmplY3Qge1BJWEkuQ29udGFpbmVyfFBJWEkuU3ByaXRlfFBJWEkuZXh0cmFzLlRpbGluZ1Nwcml0ZX0gVGhlIGRpc3BsYXkgb2JqZWN0IHRoYXQgd2FzIHRlc3RlZFxuICogQHBhcmFtIGhpdCB7Ym9vbGVhbn0gdGhlIHJlc3VsdCBvZiB0aGUgaGl0IHRlc3Qgb24gdGhlIGRpc3BsYXkgb2JqZWN0XG4gKiBAcHJpdmF0ZVxuICovXG5JbnRlcmFjdGlvbk1hbmFnZXIucHJvdG90eXBlLnByb2Nlc3NUb3VjaFN0YXJ0ID0gZnVuY3Rpb24gKCBkaXNwbGF5T2JqZWN0LCBoaXQgKVxue1xuICAgIGlmKGhpdClcbiAgICB7XG4gICAgICAgIGRpc3BsYXlPYmplY3QuX3RvdWNoRG93biA9IHRydWU7XG4gICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudCggZGlzcGxheU9iamVjdCwgJ3RvdWNoc3RhcnQnLCB0aGlzLmV2ZW50RGF0YSApO1xuICAgIH1cbn07XG5cblxuLyoqXG4gKiBJcyBjYWxsZWQgd2hlbiBhIHRvdWNoIGVuZHMgb24gdGhlIHJlbmRlcmVyIGVsZW1lbnRcbiAqXG4gKiBAcGFyYW0gZXZlbnQge0V2ZW50fSBUaGUgRE9NIGV2ZW50IG9mIGEgdG91Y2ggZW5kaW5nIG9uIHRoZSByZW5kZXJlciB2aWV3XG4gKi9cbkludGVyYWN0aW9uTWFuYWdlci5wcm90b3R5cGUub25Ub3VjaEVuZCA9IGZ1bmN0aW9uIChldmVudClcbntcbiAgICBpZiAodGhpcy5hdXRvUHJldmVudERlZmF1bHQpXG4gICAge1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIH1cblxuICAgIHZhciBjaGFuZ2VkVG91Y2hlcyA9IGV2ZW50LmNoYW5nZWRUb3VjaGVzO1xuICAgIHZhciBjTGVuZ3RoID0gY2hhbmdlZFRvdWNoZXMubGVuZ3RoO1xuXG4gICAgZm9yICh2YXIgaT0wOyBpIDwgY0xlbmd0aDsgaSsrKVxuICAgIHtcbiAgICAgICAgdmFyIHRvdWNoRXZlbnQgPSBjaGFuZ2VkVG91Y2hlc1tpXTtcblxuICAgICAgICB2YXIgdG91Y2hEYXRhID0gdGhpcy5nZXRUb3VjaERhdGEoIHRvdWNoRXZlbnQgKTtcblxuICAgICAgICB0b3VjaERhdGEub3JpZ2luYWxFdmVudCA9IGV2ZW50O1xuXG4gICAgICAgIC8vVE9ETyB0aGlzIHNob3VsZCBiZSBwYXNzZWQgYWxvbmcuLiBubyBzZXRcbiAgICAgICAgdGhpcy5ldmVudERhdGEuZGF0YSA9IHRvdWNoRGF0YTtcbiAgICAgICAgdGhpcy5ldmVudERhdGEuc3RvcHBlZCA9IGZhbHNlO1xuXG5cbiAgICAgICAgdGhpcy5wcm9jZXNzSW50ZXJhY3RpdmUoIHRvdWNoRGF0YS5nbG9iYWwsIHRoaXMucmVuZGVyZXIuX2xhc3RPYmplY3RSZW5kZXJlZCwgdGhpcy5wcm9jZXNzVG91Y2hFbmQsIHRydWUgKTtcblxuICAgICAgICB0aGlzLnJldHVyblRvdWNoRGF0YSggdG91Y2hEYXRhICk7XG4gICAgfVxufTtcblxuLyoqXG4gKiBQcm9jZXNzZXMgdGhlIHJlc3VsdCBvZiB0aGUgZW5kIG9mIGEgdG91Y2ggYW5kIGRpc3BhdGNoZXMgdGhlIGV2ZW50IGlmIG5lZWQgYmVcbiAqXG4gKiBAcGFyYW0gZGlzcGxheU9iamVjdCB7UElYSS5Db250YWluZXJ8UElYSS5TcHJpdGV8UElYSS5leHRyYXMuVGlsaW5nU3ByaXRlfSBUaGUgZGlzcGxheSBvYmplY3QgdGhhdCB3YXMgdGVzdGVkXG4gKiBAcGFyYW0gaGl0IHtib29sZWFufSB0aGUgcmVzdWx0IG9mIHRoZSBoaXQgdGVzdCBvbiB0aGUgZGlzcGxheSBvYmplY3RcbiAqIEBwcml2YXRlXG4gKi9cbkludGVyYWN0aW9uTWFuYWdlci5wcm90b3R5cGUucHJvY2Vzc1RvdWNoRW5kID0gZnVuY3Rpb24gKCBkaXNwbGF5T2JqZWN0LCBoaXQgKVxue1xuICAgIGlmKGhpdClcbiAgICB7XG4gICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudCggZGlzcGxheU9iamVjdCwgJ3RvdWNoZW5kJywgdGhpcy5ldmVudERhdGEgKTtcblxuICAgICAgICBpZiggZGlzcGxheU9iamVjdC5fdG91Y2hEb3duIClcbiAgICAgICAge1xuICAgICAgICAgICAgZGlzcGxheU9iamVjdC5fdG91Y2hEb3duID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLmRpc3BhdGNoRXZlbnQoIGRpc3BsYXlPYmplY3QsICd0YXAnLCB0aGlzLmV2ZW50RGF0YSApO1xuICAgICAgICB9XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIGlmKCBkaXNwbGF5T2JqZWN0Ll90b3VjaERvd24gKVxuICAgICAgICB7XG4gICAgICAgICAgICBkaXNwbGF5T2JqZWN0Ll90b3VjaERvd24gPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudCggZGlzcGxheU9iamVjdCwgJ3RvdWNoZW5kb3V0c2lkZScsIHRoaXMuZXZlbnREYXRhICk7XG4gICAgICAgIH1cbiAgICB9XG59O1xuXG4vKipcbiAqIElzIGNhbGxlZCB3aGVuIGEgdG91Y2ggaXMgbW92ZWQgYWNyb3NzIHRoZSByZW5kZXJlciBlbGVtZW50XG4gKlxuICogQHBhcmFtIGV2ZW50IHtFdmVudH0gVGhlIERPTSBldmVudCBvZiBhIHRvdWNoIG1vdmluZyBhY3Jvc3MgdGhlIHJlbmRlcmVyIHZpZXdcbiAqIEBwcml2YXRlXG4gKi9cbkludGVyYWN0aW9uTWFuYWdlci5wcm90b3R5cGUub25Ub3VjaE1vdmUgPSBmdW5jdGlvbiAoZXZlbnQpXG57XG4gICAgaWYgKHRoaXMuYXV0b1ByZXZlbnREZWZhdWx0KVxuICAgIHtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICB9XG5cbiAgICB2YXIgY2hhbmdlZFRvdWNoZXMgPSBldmVudC5jaGFuZ2VkVG91Y2hlcztcbiAgICB2YXIgY0xlbmd0aCA9IGNoYW5nZWRUb3VjaGVzLmxlbmd0aDtcblxuICAgIGZvciAodmFyIGk9MDsgaSA8IGNMZW5ndGg7IGkrKylcbiAgICB7XG4gICAgICAgIHZhciB0b3VjaEV2ZW50ID0gY2hhbmdlZFRvdWNoZXNbaV07XG5cbiAgICAgICAgdmFyIHRvdWNoRGF0YSA9IHRoaXMuZ2V0VG91Y2hEYXRhKCB0b3VjaEV2ZW50ICk7XG5cbiAgICAgICAgdG91Y2hEYXRhLm9yaWdpbmFsRXZlbnQgPSBldmVudDtcblxuICAgICAgICB0aGlzLmV2ZW50RGF0YS5kYXRhID0gdG91Y2hEYXRhO1xuICAgICAgICB0aGlzLmV2ZW50RGF0YS5zdG9wcGVkID0gZmFsc2U7XG5cbiAgICAgICAgdGhpcy5wcm9jZXNzSW50ZXJhY3RpdmUoIHRvdWNoRGF0YS5nbG9iYWwsIHRoaXMucmVuZGVyZXIuX2xhc3RPYmplY3RSZW5kZXJlZCwgdGhpcy5wcm9jZXNzVG91Y2hNb3ZlLCB0cnVlICk7XG5cbiAgICAgICAgdGhpcy5yZXR1cm5Ub3VjaERhdGEoIHRvdWNoRGF0YSApO1xuICAgIH1cbn07XG5cbi8qKlxuICogUHJvY2Vzc2VzIHRoZSByZXN1bHQgb2YgYSB0b3VjaCBtb3ZlIGNoZWNrIGFuZCBkaXNwYXRjaGVzIHRoZSBldmVudCBpZiBuZWVkIGJlXG4gKlxuICogQHBhcmFtIGRpc3BsYXlPYmplY3Qge1BJWEkuQ29udGFpbmVyfFBJWEkuU3ByaXRlfFBJWEkuZXh0cmFzLlRpbGluZ1Nwcml0ZX0gVGhlIGRpc3BsYXkgb2JqZWN0IHRoYXQgd2FzIHRlc3RlZFxuICogQHBhcmFtIGhpdCB7Ym9vbGVhbn0gdGhlIHJlc3VsdCBvZiB0aGUgaGl0IHRlc3Qgb24gdGhlIGRpc3BsYXkgb2JqZWN0XG4gKiBAcHJpdmF0ZVxuICovXG5JbnRlcmFjdGlvbk1hbmFnZXIucHJvdG90eXBlLnByb2Nlc3NUb3VjaE1vdmUgPSBmdW5jdGlvbiAoIGRpc3BsYXlPYmplY3QsIGhpdCApXG57XG4gICAgaGl0ID0gaGl0O1xuICAgIHRoaXMuZGlzcGF0Y2hFdmVudCggZGlzcGxheU9iamVjdCwgJ3RvdWNobW92ZScsIHRoaXMuZXZlbnREYXRhKTtcbn07XG5cbi8qKlxuICogR3JhYnMgYW4gaW50ZXJhY3Rpb24gZGF0YSBvYmplY3QgZnJvbSB0aGUgaW50ZXJuYWwgcG9vbFxuICpcbiAqIEBwYXJhbSB0b3VjaEV2ZW50IHtFdmVudERhdGF9IFRoZSB0b3VjaCBldmVudCB3ZSBuZWVkIHRvIHBhaXIgd2l0aCBhbiBpbnRlcmFjdGlvbkRhdGEgb2JqZWN0XG4gKlxuICogQHByaXZhdGVcbiAqL1xuSW50ZXJhY3Rpb25NYW5hZ2VyLnByb3RvdHlwZS5nZXRUb3VjaERhdGEgPSBmdW5jdGlvbiAodG91Y2hFdmVudClcbntcbiAgICB2YXIgdG91Y2hEYXRhID0gdGhpcy5pbnRlcmFjdGl2ZURhdGFQb29sLnBvcCgpO1xuXG4gICAgaWYoIXRvdWNoRGF0YSlcbiAgICB7XG4gICAgICAgIHRvdWNoRGF0YSA9IG5ldyBJbnRlcmFjdGlvbkRhdGEoKTtcbiAgICB9XG5cbiAgICB0b3VjaERhdGEuaWRlbnRpZmllciA9IHRvdWNoRXZlbnQuaWRlbnRpZmllcjtcbiAgICB0aGlzLm1hcFBvc2l0aW9uVG9Qb2ludCggdG91Y2hEYXRhLmdsb2JhbCwgdG91Y2hFdmVudC5jbGllbnRYLCB0b3VjaEV2ZW50LmNsaWVudFkgKTtcblxuICAgIGlmKG5hdmlnYXRvci5pc0NvY29vbkpTKVxuICAgIHtcbiAgICAgICAgdG91Y2hEYXRhLmdsb2JhbC54ID0gdG91Y2hEYXRhLmdsb2JhbC54IC8gdGhpcy5yZXNvbHV0aW9uO1xuICAgICAgICB0b3VjaERhdGEuZ2xvYmFsLnkgPSB0b3VjaERhdGEuZ2xvYmFsLnkgLyB0aGlzLnJlc29sdXRpb247XG4gICAgfVxuXG4gICAgdG91Y2hFdmVudC5nbG9iYWxYID0gdG91Y2hEYXRhLmdsb2JhbC54O1xuICAgIHRvdWNoRXZlbnQuZ2xvYmFsWSA9IHRvdWNoRGF0YS5nbG9iYWwueTtcblxuICAgIHJldHVybiB0b3VjaERhdGE7XG59O1xuXG4vKipcbiAqIFJldHVybnMgYW4gaW50ZXJhY3Rpb24gZGF0YSBvYmplY3QgdG8gdGhlIGludGVybmFsIHBvb2xcbiAqXG4gKiBAcGFyYW0gdG91Y2hEYXRhIHtQSVhJLmludGVyYWN0aW9uLkludGVyYWN0aW9uRGF0YX0gVGhlIHRvdWNoIGRhdGEgb2JqZWN0IHdlIHdhbnQgdG8gcmV0dXJuIHRvIHRoZSBwb29sXG4gKlxuICogQHByaXZhdGVcbiAqL1xuSW50ZXJhY3Rpb25NYW5hZ2VyLnByb3RvdHlwZS5yZXR1cm5Ub3VjaERhdGEgPSBmdW5jdGlvbiAoIHRvdWNoRGF0YSApXG57XG4gICAgdGhpcy5pbnRlcmFjdGl2ZURhdGFQb29sLnB1c2goIHRvdWNoRGF0YSApO1xufTtcblxuLyoqXG4gKiBEZXN0cm95cyB0aGUgaW50ZXJhY3Rpb24gbWFuYWdlclxuICpcbiAqL1xuSW50ZXJhY3Rpb25NYW5hZ2VyLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKCkge1xuICAgIHRoaXMucmVtb3ZlRXZlbnRzKCk7XG5cbiAgICB0aGlzLnJlbmRlcmVyID0gbnVsbDtcblxuICAgIHRoaXMubW91c2UgPSBudWxsO1xuXG4gICAgdGhpcy5ldmVudERhdGEgPSBudWxsO1xuXG4gICAgdGhpcy5pbnRlcmFjdGl2ZURhdGFQb29sID0gbnVsbDtcblxuICAgIHRoaXMuaW50ZXJhY3Rpb25ET01FbGVtZW50ID0gbnVsbDtcblxuICAgIHRoaXMub25Nb3VzZVVwID0gbnVsbDtcbiAgICB0aGlzLnByb2Nlc3NNb3VzZVVwID0gbnVsbDtcblxuXG4gICAgdGhpcy5vbk1vdXNlRG93biA9IG51bGw7XG4gICAgdGhpcy5wcm9jZXNzTW91c2VEb3duID0gbnVsbDtcblxuICAgIHRoaXMub25Nb3VzZU1vdmUgPSBudWxsO1xuICAgIHRoaXMucHJvY2Vzc01vdXNlTW92ZSA9IG51bGw7XG5cbiAgICB0aGlzLm9uTW91c2VPdXQgPSBudWxsO1xuICAgIHRoaXMucHJvY2Vzc01vdXNlT3Zlck91dCA9IG51bGw7XG5cblxuICAgIHRoaXMub25Ub3VjaFN0YXJ0ID0gbnVsbDtcbiAgICB0aGlzLnByb2Nlc3NUb3VjaFN0YXJ0ID0gbnVsbDtcblxuICAgIHRoaXMub25Ub3VjaEVuZCA9IG51bGw7XG4gICAgdGhpcy5wcm9jZXNzVG91Y2hFbmQgPSBudWxsO1xuXG4gICAgdGhpcy5vblRvdWNoTW92ZSA9IG51bGw7XG4gICAgdGhpcy5wcm9jZXNzVG91Y2hNb3ZlID0gbnVsbDtcblxuICAgIHRoaXMuX3RlbXBQb2ludCA9IG51bGw7XG59O1xuXG5jb3JlLldlYkdMUmVuZGVyZXIucmVnaXN0ZXJQbHVnaW4oJ2ludGVyYWN0aW9uJywgSW50ZXJhY3Rpb25NYW5hZ2VyKTtcbmNvcmUuQ2FudmFzUmVuZGVyZXIucmVnaXN0ZXJQbHVnaW4oJ2ludGVyYWN0aW9uJywgSW50ZXJhY3Rpb25NYW5hZ2VyKTtcbiIsIi8qKlxuICogQGZpbGUgICAgICAgIE1haW4gZXhwb3J0IG9mIHRoZSBQSVhJIGludGVyYWN0aW9ucyBsaWJyYXJ5XG4gKiBAYXV0aG9yICAgICAgTWF0IEdyb3ZlcyA8bWF0QGdvb2Rib3lkaWdpdGFsLmNvbT5cbiAqIEBjb3B5cmlnaHQgICAyMDEzLTIwMTUgR29vZEJveURpZ2l0YWxcbiAqIEBsaWNlbnNlICAgICB7QGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL3BpeGlqcy9waXhpLmpzL2Jsb2IvbWFzdGVyL0xJQ0VOU0V8TUlUIExpY2Vuc2V9XG4gKi9cblxuLyoqXG4gKiBAbmFtZXNwYWNlIFBJWEkuaW50ZXJhY3Rpb25cbiAqL1xubW9kdWxlLmV4cG9ydHMgPSB7XG4gICAgSW50ZXJhY3Rpb25EYXRhOiAgICByZXF1aXJlKCcuL0ludGVyYWN0aW9uRGF0YScpLFxuICAgIEludGVyYWN0aW9uTWFuYWdlcjogcmVxdWlyZSgnLi9JbnRlcmFjdGlvbk1hbmFnZXInKSxcbiAgICBpbnRlcmFjdGl2ZVRhcmdldDogIHJlcXVpcmUoJy4vaW50ZXJhY3RpdmVUYXJnZXQnKVxufTtcbiIsIi8qKlxuICogRGVmYXVsdCBwcm9wZXJ0eSB2YWx1ZXMgb2YgaW50ZXJhY3RpdmUgb2JqZWN0c1xuICogdXNlZCBieSB7QGxpbmsgUElYSS5pbnRlcmFjdGlvbi5JbnRlcmFjdGlvbk1hbmFnZXJ9LlxuICpcbiAqIEBtaXhpblxuICogQG1lbWJlcm9mIFBJWEkuaW50ZXJhY3Rpb25cbiAqIEBleGFtcGxlXG4gKiAgICAgIGZ1bmN0aW9uIE15T2JqZWN0KCkge31cbiAqXG4gKiAgICAgIE9iamVjdC5hc3NpZ24oXG4gKiAgICAgICAgICBNeU9iamVjdC5wcm90b3R5cGUsXG4gKiAgICAgICAgICBQSVhJLmludGVyYWN0aW9uLmludGVyYWN0aXZlVGFyZ2V0XG4gKiAgICAgICk7XG4gKi9cbnZhciBpbnRlcmFjdGl2ZVRhcmdldCA9IHtcbiAgICAvKipcbiAgICAgKiBAdG9kbyBOZWVkcyBkb2NzLlxuICAgICAqL1xuICAgIGludGVyYWN0aXZlOiBmYWxzZSxcbiAgICAvKipcbiAgICAgKiBAdG9kbyBOZWVkcyBkb2NzLlxuICAgICAqL1xuICAgIGJ1dHRvbk1vZGU6IGZhbHNlLFxuICAgIC8qKlxuICAgICAqIEB0b2RvIE5lZWRzIGRvY3MuXG4gICAgICovXG4gICAgaW50ZXJhY3RpdmVDaGlsZHJlbjogdHJ1ZSxcbiAgICAvKipcbiAgICAgKiBAdG9kbyBOZWVkcyBkb2NzLlxuICAgICAqL1xuICAgIGRlZmF1bHRDdXJzb3I6ICdwb2ludGVyJyxcblxuICAgIC8vIHNvbWUgaW50ZXJuYWwgY2hlY2tzLi5cblxuICAgIC8qKlxuICAgICAqIEB0b2RvIE5lZWRzIGRvY3MuXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICBfb3ZlcjogZmFsc2UsXG4gICAgLyoqXG4gICAgICogQHRvZG8gTmVlZHMgZG9jcy5cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIF90b3VjaERvd246IGZhbHNlXG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGludGVyYWN0aXZlVGFyZ2V0O1xuIiwidmFyIFJlc291cmNlID0gcmVxdWlyZSgncmVzb3VyY2UtbG9hZGVyJykuUmVzb3VyY2UsXG4gICAgY29yZSA9IHJlcXVpcmUoJy4uL2NvcmUnKSxcbiAgICBleHRyYXMgPSByZXF1aXJlKCcuLi9leHRyYXMnKSxcbiAgICBwYXRoID0gcmVxdWlyZSgncGF0aCcpO1xuXG5cbmZ1bmN0aW9uIHBhcnNlKHJlc291cmNlLCB0ZXh0dXJlKSB7XG4gICAgdmFyIGRhdGEgPSB7fTtcbiAgICB2YXIgaW5mbyA9IHJlc291cmNlLmRhdGEuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2luZm8nKVswXTtcbiAgICB2YXIgY29tbW9uID0gcmVzb3VyY2UuZGF0YS5nZXRFbGVtZW50c0J5VGFnTmFtZSgnY29tbW9uJylbMF07XG5cbiAgICBkYXRhLmZvbnQgPSBpbmZvLmdldEF0dHJpYnV0ZSgnZmFjZScpO1xuICAgIGRhdGEuc2l6ZSA9IHBhcnNlSW50KGluZm8uZ2V0QXR0cmlidXRlKCdzaXplJyksIDEwKTtcbiAgICBkYXRhLmxpbmVIZWlnaHQgPSBwYXJzZUludChjb21tb24uZ2V0QXR0cmlidXRlKCdsaW5lSGVpZ2h0JyksIDEwKTtcbiAgICBkYXRhLmNoYXJzID0ge307XG5cbiAgICAvL3BhcnNlIGxldHRlcnNcbiAgICB2YXIgbGV0dGVycyA9IHJlc291cmNlLmRhdGEuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2NoYXInKTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGV0dGVycy5sZW5ndGg7IGkrKylcbiAgICB7XG4gICAgICAgIHZhciBjaGFyQ29kZSA9IHBhcnNlSW50KGxldHRlcnNbaV0uZ2V0QXR0cmlidXRlKCdpZCcpLCAxMCk7XG5cbiAgICAgICAgdmFyIHRleHR1cmVSZWN0ID0gbmV3IGNvcmUuUmVjdGFuZ2xlKFxuICAgICAgICAgICAgcGFyc2VJbnQobGV0dGVyc1tpXS5nZXRBdHRyaWJ1dGUoJ3gnKSwgMTApICsgdGV4dHVyZS5mcmFtZS54LFxuICAgICAgICAgICAgcGFyc2VJbnQobGV0dGVyc1tpXS5nZXRBdHRyaWJ1dGUoJ3knKSwgMTApICsgdGV4dHVyZS5mcmFtZS55LFxuICAgICAgICAgICAgcGFyc2VJbnQobGV0dGVyc1tpXS5nZXRBdHRyaWJ1dGUoJ3dpZHRoJyksIDEwKSxcbiAgICAgICAgICAgIHBhcnNlSW50KGxldHRlcnNbaV0uZ2V0QXR0cmlidXRlKCdoZWlnaHQnKSwgMTApXG4gICAgICAgICk7XG5cbiAgICAgICAgZGF0YS5jaGFyc1tjaGFyQ29kZV0gPSB7XG4gICAgICAgICAgICB4T2Zmc2V0OiBwYXJzZUludChsZXR0ZXJzW2ldLmdldEF0dHJpYnV0ZSgneG9mZnNldCcpLCAxMCksXG4gICAgICAgICAgICB5T2Zmc2V0OiBwYXJzZUludChsZXR0ZXJzW2ldLmdldEF0dHJpYnV0ZSgneW9mZnNldCcpLCAxMCksXG4gICAgICAgICAgICB4QWR2YW5jZTogcGFyc2VJbnQobGV0dGVyc1tpXS5nZXRBdHRyaWJ1dGUoJ3hhZHZhbmNlJyksIDEwKSxcbiAgICAgICAgICAgIGtlcm5pbmc6IHt9LFxuICAgICAgICAgICAgdGV4dHVyZTogbmV3IGNvcmUuVGV4dHVyZSh0ZXh0dXJlLmJhc2VUZXh0dXJlLCB0ZXh0dXJlUmVjdClcblxuICAgICAgICB9O1xuICAgIH1cblxuICAgIC8vcGFyc2Uga2VybmluZ3NcbiAgICB2YXIga2VybmluZ3MgPSByZXNvdXJjZS5kYXRhLmdldEVsZW1lbnRzQnlUYWdOYW1lKCdrZXJuaW5nJyk7XG4gICAgZm9yIChpID0gMDsgaSA8IGtlcm5pbmdzLmxlbmd0aDsgaSsrKVxuICAgIHtcbiAgICAgICAgdmFyIGZpcnN0ID0gcGFyc2VJbnQoa2VybmluZ3NbaV0uZ2V0QXR0cmlidXRlKCdmaXJzdCcpLCAxMCk7XG4gICAgICAgIHZhciBzZWNvbmQgPSBwYXJzZUludChrZXJuaW5nc1tpXS5nZXRBdHRyaWJ1dGUoJ3NlY29uZCcpLCAxMCk7XG4gICAgICAgIHZhciBhbW91bnQgPSBwYXJzZUludChrZXJuaW5nc1tpXS5nZXRBdHRyaWJ1dGUoJ2Ftb3VudCcpLCAxMCk7XG5cbiAgICAgICAgZGF0YS5jaGFyc1tzZWNvbmRdLmtlcm5pbmdbZmlyc3RdID0gYW1vdW50O1xuICAgIH1cblxuICAgIHJlc291cmNlLmJpdG1hcEZvbnQgPSBkYXRhO1xuXG4gICAgLy8gSSdtIGxlYXZpbmcgdGhpcyBhcyBhIHRlbXBvcmFyeSBmaXggc28gd2UgY2FuIHRlc3QgdGhlIGJpdG1hcCBmb250cyBpbiB2M1xuICAgIC8vIGJ1dCBpdCdzIHZlcnkgbGlrZWx5IHRvIGNoYW5nZVxuICAgIGV4dHJhcy5CaXRtYXBUZXh0LmZvbnRzW2RhdGEuZm9udF0gPSBkYXRhO1xufVxuXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKClcbntcbiAgICByZXR1cm4gZnVuY3Rpb24gKHJlc291cmNlLCBuZXh0KVxuICAgIHtcbiAgICAgICAgLy8gc2tpcCBpZiBubyBkYXRhIG9yIG5vdCB4bWwgZGF0YVxuICAgICAgICBpZiAoIXJlc291cmNlLmRhdGEgfHwgIXJlc291cmNlLmlzWG1sKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gbmV4dCgpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gc2tpcCBpZiBub3QgYml0bWFwIGZvbnQgZGF0YSwgdXNpbmcgc29tZSBzaWxseSBkdWNrLXR5cGluZ1xuICAgICAgICBpZiAoXG4gICAgICAgICAgICByZXNvdXJjZS5kYXRhLmdldEVsZW1lbnRzQnlUYWdOYW1lKCdwYWdlJykubGVuZ3RoID09PSAwIHx8XG4gICAgICAgICAgICByZXNvdXJjZS5kYXRhLmdldEVsZW1lbnRzQnlUYWdOYW1lKCdpbmZvJykubGVuZ3RoID09PSAwIHx8XG4gICAgICAgICAgICByZXNvdXJjZS5kYXRhLmdldEVsZW1lbnRzQnlUYWdOYW1lKCdpbmZvJylbMF0uZ2V0QXR0cmlidXRlKCdmYWNlJykgPT09IG51bGxcbiAgICAgICAgICAgIClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIG5leHQoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciB4bWxVcmwgPSBwYXRoLmRpcm5hbWUocmVzb3VyY2UudXJsKTtcblxuICAgICAgICBpZiAoeG1sVXJsID09PSAnLicpIHtcbiAgICAgICAgICAgIHhtbFVybCA9ICcnO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuYmFzZVVybCAmJiB4bWxVcmwpIHtcbiAgICAgICAgICAgIC8vIGlmIGJhc2V1cmwgaGFzIGEgdHJhaWxpbmcgc2xhc2ggdGhlbiBhZGQgb25lIHRvIHhtbFVybCBzbyB0aGUgcmVwbGFjZSB3b3JrcyBiZWxvd1xuICAgICAgICAgICAgaWYgKHRoaXMuYmFzZVVybC5jaGFyQXQodGhpcy5iYXNlVXJsLmxlbmd0aCAtIDEpID09PSAnLycpIHtcbiAgICAgICAgICAgICAgICB4bWxVcmwgKz0gJy8nO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyByZW1vdmUgYmFzZVVybCBmcm9tIHhtbFVybFxuICAgICAgICAgICAgeG1sVXJsID0geG1sVXJsLnJlcGxhY2UodGhpcy5iYXNlVXJsLCAnJyk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBpZiB0aGVyZSBpcyBhbiB4bWxVcmwgbm93LCBpdCBuZWVkcyBhIHRyYWlsaW5nIHNsYXNoLiBFbnN1cmUgdGhhdCBpdCBkb2VzIGlmIHRoZSBzdHJpbmcgaXNuJ3QgZW1wdHkuXG4gICAgICAgIGlmICh4bWxVcmwgJiYgeG1sVXJsLmNoYXJBdCh4bWxVcmwubGVuZ3RoIC0gMSkgIT09ICcvJykge1xuICAgICAgICAgICAgeG1sVXJsICs9ICcvJztcbiAgICAgICAgfVxuICAgICAgICB2YXIgdGV4dHVyZVVybCA9IHhtbFVybCArIHJlc291cmNlLmRhdGEuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ3BhZ2UnKVswXS5nZXRBdHRyaWJ1dGUoJ2ZpbGUnKTtcbiAgICAgICAgaWYgKGNvcmUudXRpbHMuVGV4dHVyZUNhY2hlW3RleHR1cmVVcmxdKSB7XG4gICAgICAgICAgICAvL3JldXNlIGV4aXN0aW5nIHRleHR1cmVcbiAgICAgICAgICAgIHBhcnNlKHJlc291cmNlLCBjb3JlLnV0aWxzLlRleHR1cmVDYWNoZVt0ZXh0dXJlVXJsXSk7XG4gICAgICAgICAgICBuZXh0KCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB2YXIgbG9hZE9wdGlvbnMgPSB7XG4gICAgICAgICAgICAgICAgY3Jvc3NPcmlnaW46IHJlc291cmNlLmNyb3NzT3JpZ2luLFxuICAgICAgICAgICAgICAgIGxvYWRUeXBlOiBSZXNvdXJjZS5MT0FEX1RZUEUuSU1BR0UsXG4gICAgICAgICAgICAgICAgbWV0YWRhdGE6IHJlc291cmNlLm1ldGFkYXRhLmltYWdlTWV0YWRhdGFcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICAvLyBsb2FkIHRoZSB0ZXh0dXJlIGZvciB0aGUgZm9udFxuICAgICAgICAgICAgdGhpcy5hZGQocmVzb3VyY2UubmFtZSArICdfaW1hZ2UnLCB0ZXh0dXJlVXJsLCBsb2FkT3B0aW9ucywgZnVuY3Rpb24gKHJlcykge1xuICAgICAgICAgICAgICAgIHBhcnNlKHJlc291cmNlLCByZXMudGV4dHVyZSk7XG4gICAgICAgICAgICAgICAgbmV4dCgpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9O1xufTtcbiIsIi8qKlxuICogQGZpbGUgICAgICAgIE1haW4gZXhwb3J0IG9mIHRoZSBQSVhJIGxvYWRlcnMgbGlicmFyeVxuICogQGF1dGhvciAgICAgIE1hdCBHcm92ZXMgPG1hdEBnb29kYm95ZGlnaXRhbC5jb20+XG4gKiBAY29weXJpZ2h0ICAgMjAxMy0yMDE1IEdvb2RCb3lEaWdpdGFsXG4gKiBAbGljZW5zZSAgICAge0BsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9waXhpanMvcGl4aS5qcy9ibG9iL21hc3Rlci9MSUNFTlNFfE1JVCBMaWNlbnNlfVxuICovXG5cbi8qKlxuICogQG5hbWVzcGFjZSBQSVhJLmxvYWRlcnNcbiAqL1xubW9kdWxlLmV4cG9ydHMgPSB7XG4gICAgTG9hZGVyOiAgICAgICAgICAgICByZXF1aXJlKCcuL2xvYWRlcicpLFxuXG4gICAgLy8gcGFyc2Vyc1xuICAgIGJpdG1hcEZvbnRQYXJzZXI6ICAgcmVxdWlyZSgnLi9iaXRtYXBGb250UGFyc2VyJyksXG4gICAgc3ByaXRlc2hlZXRQYXJzZXI6ICByZXF1aXJlKCcuL3Nwcml0ZXNoZWV0UGFyc2VyJyksXG4gICAgdGV4dHVyZVBhcnNlcjogICAgICByZXF1aXJlKCcuL3RleHR1cmVQYXJzZXInKSxcbiAgICBSZXNvdXJjZTogICAgICAgICAgIHJlcXVpcmUoJ3Jlc291cmNlLWxvYWRlcicpLlJlc291cmNlXG59O1xuIiwidmFyIFJlc291cmNlTG9hZGVyID0gcmVxdWlyZSgncmVzb3VyY2UtbG9hZGVyJyksXG4gICAgdGV4dHVyZVBhcnNlciA9IHJlcXVpcmUoJy4vdGV4dHVyZVBhcnNlcicpLFxuICAgIHNwcml0ZXNoZWV0UGFyc2VyID0gcmVxdWlyZSgnLi9zcHJpdGVzaGVldFBhcnNlcicpLFxuICAgIGJpdG1hcEZvbnRQYXJzZXIgPSByZXF1aXJlKCcuL2JpdG1hcEZvbnRQYXJzZXInKTtcblxuLyoqXG4gKlxuICogVGhlIG5ldyBsb2FkZXIsIGV4dGVuZHMgUmVzb3VyY2UgTG9hZGVyIGJ5IENoYWQgRW5nbGVyIDogaHR0cHM6Ly9naXRodWIuY29tL2VuZ2xlcmNqL3Jlc291cmNlLWxvYWRlclxuICpcbiAqIGBgYGpzXG4gKiB2YXIgbG9hZGVyID0gUElYSS5sb2FkZXI7IC8vIHBpeGkgZXhwb3NlcyBhIHByZW1hZGUgaW5zdGFuY2UgZm9yIHlvdSB0byB1c2UuXG4gKiAvL29yXG4gKiB2YXIgbG9hZGVyID0gbmV3IFBJWEkubG9hZGVycy5Mb2FkZXIoKTsgLy8geW91IGNhbiBhbHNvIGNyZWF0ZSB5b3VyIG93biBpZiB5b3Ugd2FudFxuICpcbiAqIGxvYWRlci5hZGQoJ2J1bm55JyxcImRhdGEvYnVubnkucG5nXCIpO1xuICpcbiAqIGxvYWRlci5vbmNlKCdjb21wbGV0ZScsb25Bc3NldHNMb2FkZWQpO1xuICpcbiAqIGxvYWRlci5sb2FkKCk7XG4gKiBgYGBcbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuUmVzb3VyY2VMb2FkZXJcbiAqIEBtZW1iZXJvZiBQSVhJLmxvYWRlcnNcbiAqIEBwYXJhbSBbYmFzZVVybD0nJ10ge3N0cmluZ30gVGhlIGJhc2UgdXJsIGZvciBhbGwgcmVzb3VyY2VzIGxvYWRlZCBieSB0aGlzIGxvYWRlci5cbiAqIEBwYXJhbSBbY29uY3VycmVuY3k9MTBdIHtudW1iZXJ9IFRoZSBudW1iZXIgb2YgcmVzb3VyY2VzIHRvIGxvYWQgY29uY3VycmVudGx5LlxuICovXG5mdW5jdGlvbiBMb2FkZXIoYmFzZVVybCwgY29uY3VycmVuY3kpXG57XG4gICAgUmVzb3VyY2VMb2FkZXIuY2FsbCh0aGlzLCBiYXNlVXJsLCBjb25jdXJyZW5jeSk7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IExvYWRlci5fcGl4aU1pZGRsZXdhcmUubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgdGhpcy51c2UoTG9hZGVyLl9waXhpTWlkZGxld2FyZVtpXSgpKTtcbiAgICB9XG59XG5cbkxvYWRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFJlc291cmNlTG9hZGVyLnByb3RvdHlwZSk7XG5Mb2FkZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gTG9hZGVyO1xuXG5tb2R1bGUuZXhwb3J0cyA9IExvYWRlcjtcblxuTG9hZGVyLl9waXhpTWlkZGxld2FyZSA9IFtcbiAgICAvLyBwYXJzZSBhbnkgYmxvYiBpbnRvIG1vcmUgdXNhYmxlIG9iamVjdHMgKGUuZy4gSW1hZ2UpXG4gICAgUmVzb3VyY2VMb2FkZXIubWlkZGxld2FyZS5wYXJzaW5nLmJsb2IsXG4gICAgLy8gcGFyc2UgYW55IEltYWdlIG9iamVjdHMgaW50byB0ZXh0dXJlc1xuICAgIHRleHR1cmVQYXJzZXIsXG4gICAgLy8gcGFyc2UgYW55IHNwcml0ZXNoZWV0IGRhdGEgaW50byBtdWx0aXBsZSB0ZXh0dXJlc1xuICAgIHNwcml0ZXNoZWV0UGFyc2VyLFxuICAgIC8vIHBhcnNlIGFueSBzcHJpdGVzaGVldCBkYXRhIGludG8gbXVsdGlwbGUgdGV4dHVyZXNcbiAgICBiaXRtYXBGb250UGFyc2VyXG5dO1xuXG5Mb2FkZXIuYWRkUGl4aU1pZGRsZXdhcmUgPSBmdW5jdGlvbiAoZm4pIHtcbiAgICBMb2FkZXIuX3BpeGlNaWRkbGV3YXJlLnB1c2goZm4pO1xufTtcblxuLy8gQWRkIGN1c3RvbSBleHRlbnRpb25zXG52YXIgUmVzb3VyY2UgPSBSZXNvdXJjZUxvYWRlci5SZXNvdXJjZTtcblxuUmVzb3VyY2Uuc2V0RXh0ZW5zaW9uWGhyVHlwZSgnZm50JywgUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuRE9DVU1FTlQpO1xuIiwidmFyIFJlc291cmNlID0gcmVxdWlyZSgncmVzb3VyY2UtbG9hZGVyJykuUmVzb3VyY2UsXG4gICAgcGF0aCA9IHJlcXVpcmUoJ3BhdGgnKSxcbiAgICBjb3JlID0gcmVxdWlyZSgnLi4vY29yZScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICgpXG57XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChyZXNvdXJjZSwgbmV4dClcbiAgICB7XG4gICAgICAgIC8vIHNraXAgaWYgbm8gZGF0YSwgaXRzIG5vdCBqc29uLCBvciBpdCBpc24ndCBzcHJpdGVzaGVldCBkYXRhXG4gICAgICAgIGlmICghcmVzb3VyY2UuZGF0YSB8fCAhcmVzb3VyY2UuaXNKc29uIHx8ICFyZXNvdXJjZS5kYXRhLmZyYW1lcylcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIG5leHQoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBsb2FkT3B0aW9ucyA9IHtcbiAgICAgICAgICAgIGNyb3NzT3JpZ2luOiByZXNvdXJjZS5jcm9zc09yaWdpbixcbiAgICAgICAgICAgIGxvYWRUeXBlOiBSZXNvdXJjZS5MT0FEX1RZUEUuSU1BR0UsXG4gICAgICAgICAgICBtZXRhZGF0YTogcmVzb3VyY2UubWV0YWRhdGEuaW1hZ2VNZXRhZGF0YVxuICAgICAgICB9O1xuXG4gICAgICAgIHZhciByb3V0ZSA9IHBhdGguZGlybmFtZShyZXNvdXJjZS51cmwucmVwbGFjZSh0aGlzLmJhc2VVcmwsICcnKSk7XG5cbiAgICAgICAgdmFyIHJlc29sdXRpb24gPSBjb3JlLnV0aWxzLmdldFJlc29sdXRpb25PZlVybCggcmVzb3VyY2UudXJsICk7XG5cbiAgICAgICAgLy8gbG9hZCB0aGUgaW1hZ2UgZm9yIHRoaXMgc2hlZXRcbiAgICAgICAgdGhpcy5hZGQocmVzb3VyY2UubmFtZSArICdfaW1hZ2UnLCByb3V0ZSArICcvJyArIHJlc291cmNlLmRhdGEubWV0YS5pbWFnZSwgbG9hZE9wdGlvbnMsIGZ1bmN0aW9uIChyZXMpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJlc291cmNlLnRleHR1cmVzID0ge307XG5cbiAgICAgICAgICAgIHZhciBmcmFtZXMgPSByZXNvdXJjZS5kYXRhLmZyYW1lcztcblxuICAgICAgICAgICAgZm9yICh2YXIgaSBpbiBmcmFtZXMpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdmFyIHJlY3QgPSBmcmFtZXNbaV0uZnJhbWU7XG5cbiAgICAgICAgICAgICAgICBpZiAocmVjdClcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBzaXplID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHRyaW0gPSBudWxsO1xuXG4gICAgICAgICAgICAgICAgICAgIGlmIChmcmFtZXNbaV0ucm90YXRlZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZSA9IG5ldyBjb3JlLlJlY3RhbmdsZShyZWN0LngsIHJlY3QueSwgcmVjdC5oLCByZWN0LncpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZSA9IG5ldyBjb3JlLlJlY3RhbmdsZShyZWN0LngsIHJlY3QueSwgcmVjdC53LCByZWN0LmgpO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgLy8gIENoZWNrIHRvIHNlZSBpZiB0aGUgc3ByaXRlIGlzIHRyaW1tZWRcbiAgICAgICAgICAgICAgICAgICAgaWYgKGZyYW1lc1tpXS50cmltbWVkKVxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0cmltID0gbmV3IGNvcmUuUmVjdGFuZ2xlKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyYW1lc1tpXS5zcHJpdGVTb3VyY2VTaXplLnggLyByZXNvbHV0aW9uLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyYW1lc1tpXS5zcHJpdGVTb3VyY2VTaXplLnkgLyByZXNvbHV0aW9uLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyYW1lc1tpXS5zb3VyY2VTaXplLncgLyByZXNvbHV0aW9uLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyYW1lc1tpXS5zb3VyY2VTaXplLmggLyByZXNvbHV0aW9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIC8vIGZsaXAgdGhlIHdpZHRoIGFuZCBoZWlnaHQhXG4gICAgICAgICAgICAgICAgICAgIGlmIChmcmFtZXNbaV0ucm90YXRlZClcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHRlbXAgPSBzaXplLndpZHRoO1xuICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZS53aWR0aCA9IHNpemUuaGVpZ2h0O1xuICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZS5oZWlnaHQgPSB0ZW1wO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgc2l6ZS54IC89IHJlc29sdXRpb247XG4gICAgICAgICAgICAgICAgICAgIHNpemUueSAvPSByZXNvbHV0aW9uO1xuICAgICAgICAgICAgICAgICAgICBzaXplLndpZHRoIC89IHJlc29sdXRpb247XG4gICAgICAgICAgICAgICAgICAgIHNpemUuaGVpZ2h0IC89IHJlc29sdXRpb247XG5cbiAgICAgICAgICAgICAgICAgICAgcmVzb3VyY2UudGV4dHVyZXNbaV0gPSBuZXcgY29yZS5UZXh0dXJlKHJlcy50ZXh0dXJlLmJhc2VUZXh0dXJlLCBzaXplLCBzaXplLmNsb25lKCksIHRyaW0sIGZyYW1lc1tpXS5yb3RhdGVkKTtcblxuICAgICAgICAgICAgICAgICAgICAvLyBsZXRzIGFsc28gYWRkIHRoZSBmcmFtZSB0byBwaXhpJ3MgZ2xvYmFsIGNhY2hlIGZvciBmcm9tRnJhbWUgYW5kIGZyb21JbWFnZSBmdW5jdGlvbnNcbiAgICAgICAgICAgICAgICAgICAgY29yZS51dGlscy5UZXh0dXJlQ2FjaGVbaV0gPSByZXNvdXJjZS50ZXh0dXJlc1tpXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIG5leHQoKTtcbiAgICAgICAgfSk7XG4gICAgfTtcbn07XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uL2NvcmUnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoKVxue1xuICAgIHJldHVybiBmdW5jdGlvbiAocmVzb3VyY2UsIG5leHQpXG4gICAge1xuICAgICAgICAvLyBjcmVhdGUgYSBuZXcgdGV4dHVyZSBpZiB0aGUgZGF0YSBpcyBhbiBJbWFnZSBvYmplY3RcbiAgICAgICAgaWYgKHJlc291cmNlLmRhdGEgJiYgcmVzb3VyY2UuaXNJbWFnZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdmFyIGJhc2VUZXh0dXJlID0gbmV3IGNvcmUuQmFzZVRleHR1cmUocmVzb3VyY2UuZGF0YSwgbnVsbCwgY29yZS51dGlscy5nZXRSZXNvbHV0aW9uT2ZVcmwocmVzb3VyY2UudXJsKSk7XG4gICAgICAgICAgICBiYXNlVGV4dHVyZS5pbWFnZVVybCA9IHJlc291cmNlLnVybDtcbiAgICAgICAgICAgIHJlc291cmNlLnRleHR1cmUgPSBuZXcgY29yZS5UZXh0dXJlKGJhc2VUZXh0dXJlKTtcbiAgICAgICAgICAgIC8vIGxldHMgYWxzbyBhZGQgdGhlIGZyYW1lIHRvIHBpeGkncyBnbG9iYWwgY2FjaGUgZm9yIGZyb21GcmFtZSBhbmQgZnJvbUltYWdlIGZ1Y250aW9uc1xuICAgICAgICAgICAgY29yZS51dGlscy5CYXNlVGV4dHVyZUNhY2hlW3Jlc291cmNlLnVybF0gPSBiYXNlVGV4dHVyZTtcbiAgICAgICAgICAgIGNvcmUudXRpbHMuVGV4dHVyZUNhY2hlW3Jlc291cmNlLnVybF0gPSByZXNvdXJjZS50ZXh0dXJlO1xuICAgICAgICB9XG5cbiAgICAgICAgbmV4dCgpO1xuICAgIH07XG59O1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi9jb3JlJyksXG4gICAgdGVtcFBvaW50ID0gbmV3IGNvcmUuUG9pbnQoKSxcbiAgICB0ZW1wUG9seWdvbiA9IG5ldyBjb3JlLlBvbHlnb24oKTtcblxuLyoqXG4gKiBCYXNlIG1lc2ggY2xhc3NcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5Db250YWluZXJcbiAqIEBtZW1iZXJvZiBQSVhJLm1lc2hcbiAqIEBwYXJhbSB0ZXh0dXJlIHtQSVhJLlRleHR1cmV9IFRoZSB0ZXh0dXJlIHRvIHVzZVxuICogQHBhcmFtIFt2ZXJ0aWNlc10ge0Zsb2F0MzJBcnJheX0gaWYgeW91IHdhbnQgdG8gc3BlY2lmeSB0aGUgdmVydGljZXNcbiAqIEBwYXJhbSBbdXZzXSB7RmxvYXQzMkFycmF5fSBpZiB5b3Ugd2FudCB0byBzcGVjaWZ5IHRoZSB1dnNcbiAqIEBwYXJhbSBbaW5kaWNlc10ge1VpbnQxNkFycmF5fSBpZiB5b3Ugd2FudCB0byBzcGVjaWZ5IHRoZSBpbmRpY2VzXG4gKiBAcGFyYW0gW2RyYXdNb2RlXSB7bnVtYmVyfSB0aGUgZHJhd01vZGUsIGNhbiBiZSBhbnkgb2YgdGhlIE1lc2guRFJBV19NT0RFUyBjb25zdHNcbiAqL1xuZnVuY3Rpb24gTWVzaCh0ZXh0dXJlLCB2ZXJ0aWNlcywgdXZzLCBpbmRpY2VzLCBkcmF3TW9kZSlcbntcbiAgICBjb3JlLkNvbnRhaW5lci5jYWxsKHRoaXMpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHRleHR1cmUgb2YgdGhlIE1lc2hcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuVGV4dHVyZX1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX3RleHR1cmUgPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogVGhlIFV2cyBvZiB0aGUgTWVzaFxuICAgICAqXG4gICAgICogQG1lbWJlciB7RmxvYXQzMkFycmF5fVxuICAgICAqL1xuICAgIHRoaXMudXZzID0gdXZzIHx8IG5ldyBGbG9hdDMyQXJyYXkoWzAsIDAsXG4gICAgICAgIDEsIDAsXG4gICAgICAgIDEsIDEsXG4gICAgICAgIDAsIDFdKTtcblxuICAgIC8qKlxuICAgICAqIEFuIGFycmF5IG9mIHZlcnRpY2VzXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtGbG9hdDMyQXJyYXl9XG4gICAgICovXG4gICAgdGhpcy52ZXJ0aWNlcyA9IHZlcnRpY2VzIHx8IG5ldyBGbG9hdDMyQXJyYXkoWzAsIDAsXG4gICAgICAgIDEwMCwgMCxcbiAgICAgICAgMTAwLCAxMDAsXG4gICAgICAgIDAsIDEwMF0pO1xuXG4gICAgLypcbiAgICAgKiBAbWVtYmVyIHtVaW50MTZBcnJheX0gQW4gYXJyYXkgY29udGFpbmluZyB0aGUgaW5kaWNlcyBvZiB0aGUgdmVydGljZXNcbiAgICAgKi9cbiAgICAvLyAgVE9ETyBhdXRvIGdlbmVyYXRlIHRoaXMgYmFzZWQgb24gZHJhdyBtb2RlIVxuICAgIHRoaXMuaW5kaWNlcyA9IGluZGljZXMgfHwgbmV3IFVpbnQxNkFycmF5KFswLCAxLCAzLCAyXSk7XG5cbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIHRoZSBNZXNoIGlzIGRpcnR5IG9yIG5vdFxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKi9cbiAgICB0aGlzLmRpcnR5ID0gdHJ1ZTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBibGVuZCBtb2RlIHRvIGJlIGFwcGxpZWQgdG8gdGhlIHNwcml0ZS4gU2V0IHRvIGBQSVhJLkJMRU5EX01PREVTLk5PUk1BTGAgdG8gcmVtb3ZlIGFueSBibGVuZCBtb2RlLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IFBJWEkuQkxFTkRfTU9ERVMuTk9STUFMXG4gICAgICogQHNlZSBQSVhJLkJMRU5EX01PREVTXG4gICAgICovXG4gICAgdGhpcy5ibGVuZE1vZGUgPSBjb3JlLkJMRU5EX01PREVTLk5PUk1BTDtcblxuICAgIC8qKlxuICAgICAqIFRyaWFuZ2xlcyBpbiBjYW52YXMgbW9kZSBhcmUgYXV0b21hdGljYWxseSBhbnRpYWxpYXNlZCwgdXNlIHRoaXMgdmFsdWUgdG8gZm9yY2UgdHJpYW5nbGVzIHRvIG92ZXJsYXAgYSBiaXQgd2l0aCBlYWNoIG90aGVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMuY2FudmFzUGFkZGluZyA9IDA7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgd2F5IHRoZSBNZXNoIHNob3VsZCBiZSBkcmF3biwgY2FuIGJlIGFueSBvZiB0aGUge0BsaW5rIFBJWEkubWVzaC5NZXNoLkRSQVdfTU9ERVN9IGNvbnN0c1xuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBzZWUgUElYSS5tZXNoLk1lc2guRFJBV19NT0RFU1xuICAgICAqL1xuICAgIHRoaXMuZHJhd01vZGUgPSBkcmF3TW9kZSB8fCBNZXNoLkRSQVdfTU9ERVMuVFJJQU5HTEVfTUVTSDtcblxuICAgIC8vIHJ1biB0ZXh0dXJlIHNldHRlcjtcbiAgICB0aGlzLnRleHR1cmUgPSB0ZXh0dXJlO1xuXG4gICAgIC8qKlxuICAgICAqIFRoZSBkZWZhdWx0IHNoYWRlciB0aGF0IGlzIHVzZWQgaWYgYSBtZXNoIGRvZXNuJ3QgaGF2ZSBhIG1vcmUgc3BlY2lmaWMgb25lLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5TaGFkZXJ9XG4gICAgICovXG4gICAgdGhpcy5zaGFkZXIgPSBudWxsO1xufVxuXG4vLyBjb25zdHJ1Y3RvclxuTWVzaC5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuQ29udGFpbmVyLnByb3RvdHlwZSk7XG5NZXNoLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IE1lc2g7XG5tb2R1bGUuZXhwb3J0cyA9IE1lc2g7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKE1lc2gucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogVGhlIHRleHR1cmUgdGhhdCB0aGUgc3ByaXRlIGlzIHVzaW5nXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlRleHR1cmV9XG4gICAgICogQG1lbWJlcm9mIFBJWEkubWVzaC5NZXNoI1xuICAgICAqL1xuICAgIHRleHR1cmU6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gIHRoaXMuX3RleHR1cmU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICBpZiAodGhpcy5fdGV4dHVyZSA9PT0gdmFsdWUpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLl90ZXh0dXJlID0gdmFsdWU7XG5cbiAgICAgICAgICAgIGlmICh2YWx1ZSlcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAvLyB3YWl0IGZvciB0aGUgdGV4dHVyZSB0byBsb2FkXG4gICAgICAgICAgICAgICAgaWYgKHZhbHVlLmJhc2VUZXh0dXJlLmhhc0xvYWRlZClcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX29uVGV4dHVyZVVwZGF0ZSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICB2YWx1ZS5vbmNlKCd1cGRhdGUnLCB0aGlzLl9vblRleHR1cmVVcGRhdGUsIHRoaXMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn0pO1xuXG4vKipcbiAqIFJlbmRlcnMgdGhlIG9iamVjdCB1c2luZyB0aGUgV2ViR0wgcmVuZGVyZXJcbiAqXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcn0gYSByZWZlcmVuY2UgdG8gdGhlIFdlYkdMIHJlbmRlcmVyXG4gKiBAcHJpdmF0ZVxuICovXG5NZXNoLnByb3RvdHlwZS5fcmVuZGVyV2ViR0wgPSBmdW5jdGlvbiAocmVuZGVyZXIpXG57XG4gICAgcmVuZGVyZXIuc2V0T2JqZWN0UmVuZGVyZXIocmVuZGVyZXIucGx1Z2lucy5tZXNoKTtcbiAgICByZW5kZXJlci5wbHVnaW5zLm1lc2gucmVuZGVyKHRoaXMpO1xufTtcblxuLyoqXG4gKiBSZW5kZXJzIHRoZSBvYmplY3QgdXNpbmcgdGhlIENhbnZhcyByZW5kZXJlclxuICpcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5DYW52YXNSZW5kZXJlcn1cbiAqIEBwcml2YXRlXG4gKi9cbk1lc2gucHJvdG90eXBlLl9yZW5kZXJDYW52YXMgPSBmdW5jdGlvbiAocmVuZGVyZXIpXG57XG4gICAgdmFyIGNvbnRleHQgPSByZW5kZXJlci5jb250ZXh0O1xuXG4gICAgdmFyIHRyYW5zZm9ybSA9IHRoaXMud29ybGRUcmFuc2Zvcm07XG5cbiAgICBpZiAocmVuZGVyZXIucm91bmRQaXhlbHMpXG4gICAge1xuICAgICAgICBjb250ZXh0LnNldFRyYW5zZm9ybSh0cmFuc2Zvcm0uYSwgdHJhbnNmb3JtLmIsIHRyYW5zZm9ybS5jLCB0cmFuc2Zvcm0uZCwgdHJhbnNmb3JtLnR4IHwgMCwgdHJhbnNmb3JtLnR5IHwgMCk7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIGNvbnRleHQuc2V0VHJhbnNmb3JtKHRyYW5zZm9ybS5hLCB0cmFuc2Zvcm0uYiwgdHJhbnNmb3JtLmMsIHRyYW5zZm9ybS5kLCB0cmFuc2Zvcm0udHgsIHRyYW5zZm9ybS50eSk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuZHJhd01vZGUgPT09IE1lc2guRFJBV19NT0RFUy5UUklBTkdMRV9NRVNIKVxuICAgIHtcbiAgICAgICAgdGhpcy5fcmVuZGVyQ2FudmFzVHJpYW5nbGVNZXNoKGNvbnRleHQpO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICB0aGlzLl9yZW5kZXJDYW52YXNUcmlhbmdsZXMoY29udGV4dCk7XG4gICAgfVxufTtcblxuLyoqXG4gKiBEcmF3cyB0aGUgb2JqZWN0IGluIFRyaWFuZ2xlIE1lc2ggbW9kZSB1c2luZyBjYW52YXNcbiAqXG4gKiBAcGFyYW0gY29udGV4dCB7Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEfSB0aGUgY3VycmVudCBkcmF3aW5nIGNvbnRleHRcbiAqIEBwcml2YXRlXG4gKi9cbk1lc2gucHJvdG90eXBlLl9yZW5kZXJDYW52YXNUcmlhbmdsZU1lc2ggPSBmdW5jdGlvbiAoY29udGV4dClcbntcbiAgICAvLyBkcmF3IHRyaWFuZ2xlcyEhXG4gICAgdmFyIHZlcnRpY2VzID0gdGhpcy52ZXJ0aWNlcztcbiAgICB2YXIgdXZzID0gdGhpcy51dnM7XG5cbiAgICB2YXIgbGVuZ3RoID0gdmVydGljZXMubGVuZ3RoIC8gMjtcbiAgICAvLyB0aGlzLmNvdW50Kys7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aCAtIDI7IGkrKylcbiAgICB7XG4gICAgICAgIC8vIGRyYXcgc29tZSB0cmlhbmdsZXMhXG4gICAgICAgIHZhciBpbmRleCA9IGkgKiAyO1xuICAgICAgICB0aGlzLl9yZW5kZXJDYW52YXNEcmF3VHJpYW5nbGUoY29udGV4dCwgdmVydGljZXMsIHV2cywgaW5kZXgsIChpbmRleCArIDIpLCAoaW5kZXggKyA0KSk7XG4gICAgfVxufTtcblxuLyoqXG4gKiBEcmF3cyB0aGUgb2JqZWN0IGluIHRyaWFuZ2xlIG1vZGUgdXNpbmcgY2FudmFzXG4gKlxuICogQHBhcmFtIGNvbnRleHQge0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRH0gdGhlIGN1cnJlbnQgZHJhd2luZyBjb250ZXh0XG4gKiBAcHJpdmF0ZVxuICovXG5NZXNoLnByb3RvdHlwZS5fcmVuZGVyQ2FudmFzVHJpYW5nbGVzID0gZnVuY3Rpb24gKGNvbnRleHQpXG57XG4gICAgLy8gZHJhdyB0cmlhbmdsZXMhIVxuICAgIHZhciB2ZXJ0aWNlcyA9IHRoaXMudmVydGljZXM7XG4gICAgdmFyIHV2cyA9IHRoaXMudXZzO1xuICAgIHZhciBpbmRpY2VzID0gdGhpcy5pbmRpY2VzO1xuXG4gICAgdmFyIGxlbmd0aCA9IGluZGljZXMubGVuZ3RoO1xuICAgIC8vIHRoaXMuY291bnQrKztcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyBpICs9IDMpXG4gICAge1xuICAgICAgICAvLyBkcmF3IHNvbWUgdHJpYW5nbGVzIVxuICAgICAgICB2YXIgaW5kZXgwID0gaW5kaWNlc1tpXSAqIDIsIGluZGV4MSA9IGluZGljZXNbaSArIDFdICogMiwgaW5kZXgyID0gaW5kaWNlc1tpICsgMl0gKiAyO1xuICAgICAgICB0aGlzLl9yZW5kZXJDYW52YXNEcmF3VHJpYW5nbGUoY29udGV4dCwgdmVydGljZXMsIHV2cywgaW5kZXgwLCBpbmRleDEsIGluZGV4Mik7XG4gICAgfVxufTtcblxuLyoqXG4gKiBEcmF3cyBvbmUgb2YgdGhlIHRyaWFuZ2xlcyB0aGF0IGZvcm0gdGhpcyBNZXNoXG4gKlxuICogQHBhcmFtIGNvbnRleHQge0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRH0gdGhlIGN1cnJlbnQgZHJhd2luZyBjb250ZXh0XG4gKiBAcGFyYW0gdmVydGljZXMge0Zsb2F0MzJBcnJheX0gYSByZWZlcmVuY2UgdG8gdGhlIHZlcnRpY2VzIG9mIHRoZSBNZXNoXG4gKiBAcGFyYW0gdXZzIHtGbG9hdDMyQXJyYXl9IGEgcmVmZXJlbmNlIHRvIHRoZSB1dnMgb2YgdGhlIE1lc2hcbiAqIEBwYXJhbSBpbmRleDAge251bWJlcn0gdGhlIGluZGV4IG9mIHRoZSBmaXJzdCB2ZXJ0ZXhcbiAqIEBwYXJhbSBpbmRleDEge251bWJlcn0gdGhlIGluZGV4IG9mIHRoZSBzZWNvbmQgdmVydGV4XG4gKiBAcGFyYW0gaW5kZXgyIHtudW1iZXJ9IHRoZSBpbmRleCBvZiB0aGUgdGhpcmQgdmVydGV4XG4gKiBAcHJpdmF0ZVxuICovXG5NZXNoLnByb3RvdHlwZS5fcmVuZGVyQ2FudmFzRHJhd1RyaWFuZ2xlID0gZnVuY3Rpb24gKGNvbnRleHQsIHZlcnRpY2VzLCB1dnMsIGluZGV4MCwgaW5kZXgxLCBpbmRleDIpXG57XG4gICAgdmFyIHRleHR1cmVTb3VyY2UgPSB0aGlzLl90ZXh0dXJlLmJhc2VUZXh0dXJlLnNvdXJjZTtcbiAgICB2YXIgdGV4dHVyZVdpZHRoID0gdGhpcy5fdGV4dHVyZS5iYXNlVGV4dHVyZS53aWR0aDtcbiAgICB2YXIgdGV4dHVyZUhlaWdodCA9IHRoaXMuX3RleHR1cmUuYmFzZVRleHR1cmUuaGVpZ2h0O1xuXG4gICAgdmFyIHgwID0gdmVydGljZXNbaW5kZXgwXSwgeDEgPSB2ZXJ0aWNlc1tpbmRleDFdLCB4MiA9IHZlcnRpY2VzW2luZGV4Ml07XG4gICAgdmFyIHkwID0gdmVydGljZXNbaW5kZXgwICsgMV0sIHkxID0gdmVydGljZXNbaW5kZXgxICsgMV0sIHkyID0gdmVydGljZXNbaW5kZXgyICsgMV07XG5cbiAgICB2YXIgdTAgPSB1dnNbaW5kZXgwXSAqIHRleHR1cmVXaWR0aCwgdTEgPSB1dnNbaW5kZXgxXSAqIHRleHR1cmVXaWR0aCwgdTIgPSB1dnNbaW5kZXgyXSAqIHRleHR1cmVXaWR0aDtcbiAgICB2YXIgdjAgPSB1dnNbaW5kZXgwICsgMV0gKiB0ZXh0dXJlSGVpZ2h0LCB2MSA9IHV2c1tpbmRleDEgKyAxXSAqIHRleHR1cmVIZWlnaHQsIHYyID0gdXZzW2luZGV4MiArIDFdICogdGV4dHVyZUhlaWdodDtcblxuICAgIGlmICh0aGlzLmNhbnZhc1BhZGRpbmcgPiAwKVxuICAgIHtcbiAgICAgICAgdmFyIHBhZGRpbmdYID0gdGhpcy5jYW52YXNQYWRkaW5nIC8gdGhpcy53b3JsZFRyYW5zZm9ybS5hO1xuICAgICAgICB2YXIgcGFkZGluZ1kgPSB0aGlzLmNhbnZhc1BhZGRpbmcgLyB0aGlzLndvcmxkVHJhbnNmb3JtLmQ7XG4gICAgICAgIHZhciBjZW50ZXJYID0gKHgwICsgeDEgKyB4MikgLyAzO1xuICAgICAgICB2YXIgY2VudGVyWSA9ICh5MCArIHkxICsgeTIpIC8gMztcblxuICAgICAgICB2YXIgbm9ybVggPSB4MCAtIGNlbnRlclg7XG4gICAgICAgIHZhciBub3JtWSA9IHkwIC0gY2VudGVyWTtcblxuICAgICAgICB2YXIgZGlzdCA9IE1hdGguc3FydChub3JtWCAqIG5vcm1YICsgbm9ybVkgKiBub3JtWSk7XG4gICAgICAgIHgwID0gY2VudGVyWCArIChub3JtWCAvIGRpc3QpICogKGRpc3QgKyBwYWRkaW5nWCk7XG4gICAgICAgIHkwID0gY2VudGVyWSArIChub3JtWSAvIGRpc3QpICogKGRpc3QgKyBwYWRkaW5nWSk7XG5cbiAgICAgICAgLy9cblxuICAgICAgICBub3JtWCA9IHgxIC0gY2VudGVyWDtcbiAgICAgICAgbm9ybVkgPSB5MSAtIGNlbnRlclk7XG5cbiAgICAgICAgZGlzdCA9IE1hdGguc3FydChub3JtWCAqIG5vcm1YICsgbm9ybVkgKiBub3JtWSk7XG4gICAgICAgIHgxID0gY2VudGVyWCArIChub3JtWCAvIGRpc3QpICogKGRpc3QgKyBwYWRkaW5nWCk7XG4gICAgICAgIHkxID0gY2VudGVyWSArIChub3JtWSAvIGRpc3QpICogKGRpc3QgKyBwYWRkaW5nWSk7XG5cbiAgICAgICAgbm9ybVggPSB4MiAtIGNlbnRlclg7XG4gICAgICAgIG5vcm1ZID0geTIgLSBjZW50ZXJZO1xuXG4gICAgICAgIGRpc3QgPSBNYXRoLnNxcnQobm9ybVggKiBub3JtWCArIG5vcm1ZICogbm9ybVkpO1xuICAgICAgICB4MiA9IGNlbnRlclggKyAobm9ybVggLyBkaXN0KSAqIChkaXN0ICsgcGFkZGluZ1gpO1xuICAgICAgICB5MiA9IGNlbnRlclkgKyAobm9ybVkgLyBkaXN0KSAqIChkaXN0ICsgcGFkZGluZ1kpO1xuICAgIH1cblxuICAgIGNvbnRleHQuc2F2ZSgpO1xuICAgIGNvbnRleHQuYmVnaW5QYXRoKCk7XG5cblxuICAgIGNvbnRleHQubW92ZVRvKHgwLCB5MCk7XG4gICAgY29udGV4dC5saW5lVG8oeDEsIHkxKTtcbiAgICBjb250ZXh0LmxpbmVUbyh4MiwgeTIpO1xuXG4gICAgY29udGV4dC5jbG9zZVBhdGgoKTtcblxuICAgIGNvbnRleHQuY2xpcCgpO1xuXG4gICAgLy8gQ29tcHV0ZSBtYXRyaXggdHJhbnNmb3JtXG4gICAgdmFyIGRlbHRhID0gICh1MCAqIHYxKSAgICAgICsgKHYwICogdTIpICAgICAgKyAodTEgKiB2MikgICAgICAtICh2MSAqIHUyKSAgICAgIC0gKHYwICogdTEpICAgICAgLSAodTAgKiB2Mik7XG4gICAgdmFyIGRlbHRhQSA9ICh4MCAqIHYxKSAgICAgICsgKHYwICogeDIpICAgICAgKyAoeDEgKiB2MikgICAgICAtICh2MSAqIHgyKSAgICAgIC0gKHYwICogeDEpICAgICAgLSAoeDAgKiB2Mik7XG4gICAgdmFyIGRlbHRhQiA9ICh1MCAqIHgxKSAgICAgICsgKHgwICogdTIpICAgICAgKyAodTEgKiB4MikgICAgICAtICh4MSAqIHUyKSAgICAgIC0gKHgwICogdTEpICAgICAgLSAodTAgKiB4Mik7XG4gICAgdmFyIGRlbHRhQyA9ICh1MCAqIHYxICogeDIpICsgKHYwICogeDEgKiB1MikgKyAoeDAgKiB1MSAqIHYyKSAtICh4MCAqIHYxICogdTIpIC0gKHYwICogdTEgKiB4MikgLSAodTAgKiB4MSAqIHYyKTtcbiAgICB2YXIgZGVsdGFEID0gKHkwICogdjEpICAgICAgKyAodjAgKiB5MikgICAgICArICh5MSAqIHYyKSAgICAgIC0gKHYxICogeTIpICAgICAgLSAodjAgKiB5MSkgICAgICAtICh5MCAqIHYyKTtcbiAgICB2YXIgZGVsdGFFID0gKHUwICogeTEpICAgICAgKyAoeTAgKiB1MikgICAgICArICh1MSAqIHkyKSAgICAgIC0gKHkxICogdTIpICAgICAgLSAoeTAgKiB1MSkgICAgICAtICh1MCAqIHkyKTtcbiAgICB2YXIgZGVsdGFGID0gKHUwICogdjEgKiB5MikgKyAodjAgKiB5MSAqIHUyKSArICh5MCAqIHUxICogdjIpIC0gKHkwICogdjEgKiB1MikgLSAodjAgKiB1MSAqIHkyKSAtICh1MCAqIHkxICogdjIpO1xuXG4gICAgY29udGV4dC50cmFuc2Zvcm0oZGVsdGFBIC8gZGVsdGEsIGRlbHRhRCAvIGRlbHRhLFxuICAgICAgICBkZWx0YUIgLyBkZWx0YSwgZGVsdGFFIC8gZGVsdGEsXG4gICAgICAgIGRlbHRhQyAvIGRlbHRhLCBkZWx0YUYgLyBkZWx0YSk7XG5cbiAgICBjb250ZXh0LmRyYXdJbWFnZSh0ZXh0dXJlU291cmNlLCAwLCAwKTtcbiAgICBjb250ZXh0LnJlc3RvcmUoKTtcbn07XG5cblxuXG4vKipcbiAqIFJlbmRlcnMgYSBmbGF0IE1lc2hcbiAqXG4gKiBAcGFyYW0gTWVzaCB7UElYSS5tZXNoLk1lc2h9IFRoZSBNZXNoIHRvIHJlbmRlclxuICogQHByaXZhdGVcbiAqL1xuTWVzaC5wcm90b3R5cGUucmVuZGVyTWVzaEZsYXQgPSBmdW5jdGlvbiAoTWVzaClcbntcbiAgICB2YXIgY29udGV4dCA9IHRoaXMuY29udGV4dDtcbiAgICB2YXIgdmVydGljZXMgPSBNZXNoLnZlcnRpY2VzO1xuXG4gICAgdmFyIGxlbmd0aCA9IHZlcnRpY2VzLmxlbmd0aC8yO1xuICAgIC8vIHRoaXMuY291bnQrKztcblxuICAgIGNvbnRleHQuYmVnaW5QYXRoKCk7XG4gICAgZm9yICh2YXIgaT0xOyBpIDwgbGVuZ3RoLTI7IGkrKylcbiAgICB7XG4gICAgICAgIC8vIGRyYXcgc29tZSB0cmlhbmdsZXMhXG4gICAgICAgIHZhciBpbmRleCA9IGkqMjtcblxuICAgICAgICB2YXIgeDAgPSB2ZXJ0aWNlc1tpbmRleF0sICAgeDEgPSB2ZXJ0aWNlc1tpbmRleCsyXSwgeDIgPSB2ZXJ0aWNlc1tpbmRleCs0XTtcbiAgICAgICAgdmFyIHkwID0gdmVydGljZXNbaW5kZXgrMV0sIHkxID0gdmVydGljZXNbaW5kZXgrM10sIHkyID0gdmVydGljZXNbaW5kZXgrNV07XG5cbiAgICAgICAgY29udGV4dC5tb3ZlVG8oeDAsIHkwKTtcbiAgICAgICAgY29udGV4dC5saW5lVG8oeDEsIHkxKTtcbiAgICAgICAgY29udGV4dC5saW5lVG8oeDIsIHkyKTtcbiAgICB9XG5cbiAgICBjb250ZXh0LmZpbGxTdHlsZSA9ICcjRkYwMDAwJztcbiAgICBjb250ZXh0LmZpbGwoKTtcbiAgICBjb250ZXh0LmNsb3NlUGF0aCgpO1xufTtcblxuLyoqXG4gKiBXaGVuIHRoZSB0ZXh0dXJlIGlzIHVwZGF0ZWQsIHRoaXMgZXZlbnQgd2lsbCBmaXJlIHRvIHVwZGF0ZSB0aGUgc2NhbGUgYW5kIGZyYW1lXG4gKlxuICogQHBhcmFtIGV2ZW50XG4gKiBAcHJpdmF0ZVxuICovXG5NZXNoLnByb3RvdHlwZS5fb25UZXh0dXJlVXBkYXRlID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLnVwZGF0ZUZyYW1lID0gdHJ1ZTtcbn07XG5cbi8qKlxuICogUmV0dXJucyB0aGUgYm91bmRzIG9mIHRoZSBtZXNoIGFzIGEgcmVjdGFuZ2xlLiBUaGUgYm91bmRzIGNhbGN1bGF0aW9uIHRha2VzIHRoZSB3b3JsZFRyYW5zZm9ybSBpbnRvIGFjY291bnQuXG4gKlxuICogQHBhcmFtIG1hdHJpeCB7UElYSS5NYXRyaXh9IHRoZSB0cmFuc2Zvcm1hdGlvbiBtYXRyaXggb2YgdGhlIHNwcml0ZVxuICogQHJldHVybiB7UElYSS5SZWN0YW5nbGV9IHRoZSBmcmFtaW5nIHJlY3RhbmdsZVxuICovXG5NZXNoLnByb3RvdHlwZS5nZXRCb3VuZHMgPSBmdW5jdGlvbiAobWF0cml4KVxue1xuICAgIGlmICghdGhpcy5fY3VycmVudEJvdW5kcykge1xuICAgICAgICB2YXIgd29ybGRUcmFuc2Zvcm0gPSBtYXRyaXggfHwgdGhpcy53b3JsZFRyYW5zZm9ybTtcblxuICAgICAgICB2YXIgYSA9IHdvcmxkVHJhbnNmb3JtLmE7XG4gICAgICAgIHZhciBiID0gd29ybGRUcmFuc2Zvcm0uYjtcbiAgICAgICAgdmFyIGMgPSB3b3JsZFRyYW5zZm9ybS5jO1xuICAgICAgICB2YXIgZCA9IHdvcmxkVHJhbnNmb3JtLmQ7XG4gICAgICAgIHZhciB0eCA9IHdvcmxkVHJhbnNmb3JtLnR4O1xuICAgICAgICB2YXIgdHkgPSB3b3JsZFRyYW5zZm9ybS50eTtcblxuICAgICAgICB2YXIgbWF4WCA9IC1JbmZpbml0eTtcbiAgICAgICAgdmFyIG1heFkgPSAtSW5maW5pdHk7XG5cbiAgICAgICAgdmFyIG1pblggPSBJbmZpbml0eTtcbiAgICAgICAgdmFyIG1pblkgPSBJbmZpbml0eTtcblxuICAgICAgICB2YXIgdmVydGljZXMgPSB0aGlzLnZlcnRpY2VzO1xuICAgICAgICBmb3IgKHZhciBpID0gMCwgbiA9IHZlcnRpY2VzLmxlbmd0aDsgaSA8IG47IGkgKz0gMikge1xuICAgICAgICAgICAgdmFyIHJhd1ggPSB2ZXJ0aWNlc1tpXSwgcmF3WSA9IHZlcnRpY2VzW2kgKyAxXTtcbiAgICAgICAgICAgIHZhciB4ID0gKGEgKiByYXdYKSArIChjICogcmF3WSkgKyB0eDtcbiAgICAgICAgICAgIHZhciB5ID0gKGQgKiByYXdZKSArIChiICogcmF3WCkgKyB0eTtcblxuICAgICAgICAgICAgbWluWCA9IHggPCBtaW5YID8geCA6IG1pblg7XG4gICAgICAgICAgICBtaW5ZID0geSA8IG1pblkgPyB5IDogbWluWTtcblxuICAgICAgICAgICAgbWF4WCA9IHggPiBtYXhYID8geCA6IG1heFg7XG4gICAgICAgICAgICBtYXhZID0geSA+IG1heFkgPyB5IDogbWF4WTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChtaW5YID09PSAtSW5maW5pdHkgfHwgbWF4WSA9PT0gSW5maW5pdHkpIHtcbiAgICAgICAgICAgIHJldHVybiBjb3JlLlJlY3RhbmdsZS5FTVBUWTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBib3VuZHMgPSB0aGlzLl9ib3VuZHM7XG5cbiAgICAgICAgYm91bmRzLnggPSBtaW5YO1xuICAgICAgICBib3VuZHMud2lkdGggPSBtYXhYIC0gbWluWDtcblxuICAgICAgICBib3VuZHMueSA9IG1pblk7XG4gICAgICAgIGJvdW5kcy5oZWlnaHQgPSBtYXhZIC0gbWluWTtcblxuICAgICAgICAvLyBzdG9yZSBhIHJlZmVyZW5jZSBzbyB0aGF0IGlmIHRoaXMgZnVuY3Rpb24gZ2V0cyBjYWxsZWQgYWdhaW4gaW4gdGhlIHJlbmRlciBjeWNsZSB3ZSBkbyBub3QgaGF2ZSB0byByZWNhbGN1bGF0ZVxuICAgICAgICB0aGlzLl9jdXJyZW50Qm91bmRzID0gYm91bmRzO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLl9jdXJyZW50Qm91bmRzO1xufTtcblxuLyoqXG4gKiBUZXN0cyBpZiBhIHBvaW50IGlzIGluc2lkZSB0aGlzIG1lc2guIFdvcmtzIG9ubHkgZm9yIFRSSUFOR0xFX01FU0hcbiAqXG4gKiBAcGFyYW0gcG9pbnQge1BJWEkuUG9pbnR9IHRoZSBwb2ludCB0byB0ZXN0XG4gKiBAcmV0dXJuIHtib29sZWFufSB0aGUgcmVzdWx0IG9mIHRoZSB0ZXN0XG4gKi9cbk1lc2gucHJvdG90eXBlLmNvbnRhaW5zUG9pbnQgPSBmdW5jdGlvbiggcG9pbnQgKSB7XG4gICAgaWYgKCF0aGlzLmdldEJvdW5kcygpLmNvbnRhaW5zKHBvaW50LngsIHBvaW50LnkpKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgdGhpcy53b3JsZFRyYW5zZm9ybS5hcHBseUludmVyc2UocG9pbnQsICB0ZW1wUG9pbnQpO1xuXG4gICAgdmFyIHZlcnRpY2VzID0gdGhpcy52ZXJ0aWNlcztcbiAgICB2YXIgcG9pbnRzID0gdGVtcFBvbHlnb24ucG9pbnRzO1xuICAgIHZhciBpLCBsZW47XG5cbiAgICBpZiAodGhpcy5kcmF3TW9kZSA9PT0gTWVzaC5EUkFXX01PREVTLlRSSUFOR0xFUykge1xuICAgICAgICB2YXIgaW5kaWNlcyA9IHRoaXMuaW5kaWNlcztcbiAgICAgICAgbGVuID0gdGhpcy5pbmRpY2VzLmxlbmd0aDtcbiAgICAgICAgLy9UT0RPOiBpbmxpbmUgdGhpcy5cbiAgICAgICAgZm9yIChpPTA7aTxsZW47aSs9Mykge1xuICAgICAgICAgICAgdmFyIGluZDAgPSBpbmRpY2VzW2ldKjIsIGluZDEgPSBpbmRpY2VzW2krMV0qMiwgaW5kMiA9IGluZGljZXNbaSsyXSoyO1xuICAgICAgICAgICAgcG9pbnRzWzBdID0gdmVydGljZXNbaW5kMF07XG4gICAgICAgICAgICBwb2ludHNbMV0gPSB2ZXJ0aWNlc1tpbmQwKzFdO1xuICAgICAgICAgICAgcG9pbnRzWzJdID0gdmVydGljZXNbaW5kMV07XG4gICAgICAgICAgICBwb2ludHNbM10gPSB2ZXJ0aWNlc1tpbmQxKzFdO1xuICAgICAgICAgICAgcG9pbnRzWzRdID0gdmVydGljZXNbaW5kMl07XG4gICAgICAgICAgICBwb2ludHNbNV0gPSB2ZXJ0aWNlc1tpbmQyKzFdO1xuICAgICAgICAgICAgaWYgKHRlbXBQb2x5Z29uLmNvbnRhaW5zKHRlbXBQb2ludC54LCB0ZW1wUG9pbnQueSkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAgIGxlbiA9IHZlcnRpY2VzLmxlbmd0aDtcbiAgICAgICAgZm9yIChpPTA7aTxsZW47aSs9Nikge1xuICAgICAgICAgICAgcG9pbnRzWzBdID0gdmVydGljZXNbaV07XG4gICAgICAgICAgICBwb2ludHNbMV0gPSB2ZXJ0aWNlc1tpKzFdO1xuICAgICAgICAgICAgcG9pbnRzWzJdID0gdmVydGljZXNbaSsyXTtcbiAgICAgICAgICAgIHBvaW50c1szXSA9IHZlcnRpY2VzW2krM107XG4gICAgICAgICAgICBwb2ludHNbNF0gPSB2ZXJ0aWNlc1tpKzRdO1xuICAgICAgICAgICAgcG9pbnRzWzVdID0gdmVydGljZXNbaSs1XTtcbiAgICAgICAgICAgIGlmICh0ZW1wUG9seWdvbi5jb250YWlucyh0ZW1wUG9pbnQueCwgdGVtcFBvaW50LnkpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xufTtcblxuLyoqXG4gKiBEaWZmZXJlbnQgZHJhd2luZyBidWZmZXIgbW9kZXMgc3VwcG9ydGVkXG4gKlxuICogQHN0YXRpY1xuICogQGNvbnN0YW50XG4gKiBAcHJvcGVydHkge29iamVjdH0gRFJBV19NT0RFU1xuICogQHByb3BlcnR5IHtudW1iZXJ9IERSQVdfTU9ERVMuVFJJQU5HTEVfTUVTSFxuICogQHByb3BlcnR5IHtudW1iZXJ9IERSQVdfTU9ERVMuVFJJQU5HTEVTXG4gKi9cbk1lc2guRFJBV19NT0RFUyA9IHtcbiAgICBUUklBTkdMRV9NRVNIOiAwLFxuICAgIFRSSUFOR0xFUzogMVxufTtcbiIsInZhciBNZXNoID0gcmVxdWlyZSgnLi9NZXNoJyk7XG5cbi8qKlxuICogVGhlIFBsYW5lIGFsbG93cyB5b3UgdG8gZHJhdyBhIHRleHR1cmUgYWNyb3NzIHNldmVyYWwgcG9pbnRzIGFuZCB0aGVtIG1hbmlwdWxhdGUgdGhlc2UgcG9pbnRzXG4gKlxuICpgYGBqc1xuICogZm9yICh2YXIgaSA9IDA7IGkgPCAyMDsgaSsrKSB7XG4gKiAgICAgcG9pbnRzLnB1c2gobmV3IFBJWEkuUG9pbnQoaSAqIDUwLCAwKSk7XG4gKiB9O1xuICogdmFyIFBsYW5lID0gbmV3IFBJWEkuUGxhbmUoUElYSS5UZXh0dXJlLmZyb21JbWFnZShcInNuYWtlLnBuZ1wiKSwgcG9pbnRzKTtcbiAqICBgYGBcbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkubWVzaC5NZXNoXG4gKiBAbWVtYmVyb2YgUElYSS5tZXNoXG4gKiBAcGFyYW0ge1BJWEkuVGV4dHVyZX0gdGV4dHVyZSAtIFRoZSB0ZXh0dXJlIHRvIHVzZSBvbiB0aGUgUGxhbmUuXG4gKiBAcGFyYW0ge2ludH0gc2VnbWVudHNYIC0gVGhlIG51bWJlciBveCB4IHNlZ21lbnRzXG4gKiBAcGFyYW0ge2ludH0gc2VnbWVudHNZIC0gVGhlIG51bWJlciBvZiB5IHNlZ21lbnRzXG4gKlxuICovXG5mdW5jdGlvbiBQbGFuZSh0ZXh0dXJlLCBzZWdtZW50c1gsIHNlZ21lbnRzWSlcbntcbiAgICBNZXNoLmNhbGwodGhpcywgdGV4dHVyZSk7XG5cbiAgICAvKipcbiAgICAgKiBUcmFja2VyIGZvciBpZiB0aGUgUGxhbmUgaXMgcmVhZHkgdG8gYmUgZHJhd24uIE5lZWRlZCBiZWNhdXNlIE1lc2ggY3RvciBjYW5cbiAgICAgKiBjYWxsIF9vblRleHR1cmVVcGRhdGVkIHdoaWNoIGNvdWxkIGNhbGwgcmVmcmVzaCB0b28gZWFybHkuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fcmVhZHkgPSB0cnVlO1xuXG4gICAgdGhpcy5zZWdtZW50c1ggPSAgc2VnbWVudHNYIHx8IDEwO1xuICAgIHRoaXMuc2VnbWVudHNZID0gc2VnbWVudHNZIHx8IDEwO1xuXG4gICAgdGhpcy5kcmF3TW9kZSA9IE1lc2guRFJBV19NT0RFUy5UUklBTkdMRVM7XG4gICAgdGhpcy5yZWZyZXNoKCk7XG5cbn1cblxuXG4vLyBjb25zdHJ1Y3RvclxuUGxhbmUucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZSggTWVzaC5wcm90b3R5cGUgKTtcblBsYW5lLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFBsYW5lO1xubW9kdWxlLmV4cG9ydHMgPSBQbGFuZTtcblxuLyoqXG4gKiBSZWZyZXNoZXNcbiAqXG4gKi9cblBsYW5lLnByb3RvdHlwZS5yZWZyZXNoID0gZnVuY3Rpb24oKVxue1xuICAgIHZhciB0b3RhbCA9IHRoaXMuc2VnbWVudHNYICogdGhpcy5zZWdtZW50c1k7XG4gICAgdmFyIHZlcnRzID0gW107XG4gICAgdmFyIGNvbG9ycyA9IFtdO1xuICAgIHZhciB1dnMgPSBbXTtcbiAgICB2YXIgaW5kaWNlcyA9IFtdO1xuICAgIHZhciB0ZXh0dXJlID0gdGhpcy50ZXh0dXJlO1xuXG4gIC8vICB0ZXh0dXJlLndpZHRoID0gODAwIHRleHR1cmUud2lkdGggfHwgODAwO1xuIC8vICAgdGV4dHVyZS5oZWlnaHQgPSA4MDAvL3RleHR1cmUuaGVpZ2h0IHx8IDgwMDtcblxuICAgIHZhciBzZWdtZW50c1hTdWIgPSB0aGlzLnNlZ21lbnRzWCAtIDE7XG4gICAgdmFyIHNlZ21lbnRzWVN1YiA9IHRoaXMuc2VnbWVudHNZIC0gMTtcbiAgICB2YXIgaSA9IDA7XG5cbiAgICB2YXIgc2l6ZVggPSB0ZXh0dXJlLndpZHRoIC8gc2VnbWVudHNYU3ViO1xuICAgIHZhciBzaXplWSA9IHRleHR1cmUuaGVpZ2h0IC8gc2VnbWVudHNZU3ViO1xuXG4gICAgZm9yIChpID0gMDsgaSA8IHRvdGFsOyBpKyspIHtcblxuICAgICAgICB2YXIgeCA9IChpICUgdGhpcy5zZWdtZW50c1gpO1xuICAgICAgICB2YXIgeSA9ICggKGkgLyB0aGlzLnNlZ21lbnRzWCApIHwgMCApO1xuXG5cbiAgICAgICAgdmVydHMucHVzaCgoeCAqIHNpemVYKSxcbiAgICAgICAgICAgICAgICAgICAoeSAqIHNpemVZKSk7XG5cbiAgICAgICAgLy8gdGhpcyB3b3JrcyBmb3IgcmVjdGFuZ3VsYXIgdGV4dHVyZXMuIFxuICAgICAgICB1dnMucHVzaCh0ZXh0dXJlLl91dnMueDAgKyAodGV4dHVyZS5fdXZzLngxIC0gdGV4dHVyZS5fdXZzLngwKSAqICh4IC8gKHRoaXMuc2VnbWVudHNYLTEpKSwgdGV4dHVyZS5fdXZzLnkwICsgKHRleHR1cmUuX3V2cy55My10ZXh0dXJlLl91dnMueTApICogKHkvICh0aGlzLnNlZ21lbnRzWS0xKSkpO1xuICAgICAgfVxuXG4gICAgLy8gIGNvbnNcblxuICAgIHZhciB0b3RhbFN1YiA9IHNlZ21lbnRzWFN1YiAqIHNlZ21lbnRzWVN1YjtcblxuICAgIGZvciAoaSA9IDA7IGkgPCB0b3RhbFN1YjsgaSsrKSB7XG5cbiAgICAgICAgdmFyIHhwb3MgPSBpICUgc2VnbWVudHNYU3ViO1xuICAgICAgICB2YXIgeXBvcyA9IChpIC8gc2VnbWVudHNYU3ViICkgfCAwO1xuXG5cbiAgICAgICAgdmFyICB2YWx1ZSA9ICh5cG9zICogdGhpcy5zZWdtZW50c1gpICsgeHBvcztcbiAgICAgICAgdmFyICB2YWx1ZTIgPSAoeXBvcyAqIHRoaXMuc2VnbWVudHNYKSArIHhwb3MgKyAxO1xuICAgICAgICB2YXIgIHZhbHVlMyA9ICgoeXBvcysxKSAqIHRoaXMuc2VnbWVudHNYKSArIHhwb3M7XG4gICAgICAgIHZhciAgdmFsdWU0ID0gKCh5cG9zKzEpICogdGhpcy5zZWdtZW50c1gpICsgeHBvcyArIDE7XG5cbiAgICAgICAgaW5kaWNlcy5wdXNoKHZhbHVlLCB2YWx1ZTIsIHZhbHVlMyk7XG4gICAgICAgIGluZGljZXMucHVzaCh2YWx1ZTIsIHZhbHVlNCwgdmFsdWUzKTtcbiAgICB9XG5cblxuICAgIC8vY29uc29sZS5sb2coaW5kaWNlcylcbiAgICB0aGlzLnZlcnRpY2VzID0gbmV3IEZsb2F0MzJBcnJheSh2ZXJ0cyk7XG4gICAgdGhpcy51dnMgPSBuZXcgRmxvYXQzMkFycmF5KHV2cyk7XG4gICAgdGhpcy5jb2xvcnMgPSBuZXcgRmxvYXQzMkFycmF5KGNvbG9ycyk7XG4gICAgdGhpcy5pbmRpY2VzID0gbmV3IFVpbnQxNkFycmF5KGluZGljZXMpO1xufTtcblxuLyoqXG4gKiBDbGVhciB0ZXh0dXJlIFVWcyB3aGVuIG5ldyB0ZXh0dXJlIGlzIHNldFxuICpcbiAqIEBwcml2YXRlXG4gKi9cblBsYW5lLnByb3RvdHlwZS5fb25UZXh0dXJlVXBkYXRlID0gZnVuY3Rpb24gKClcbntcbiAgICBNZXNoLnByb3RvdHlwZS5fb25UZXh0dXJlVXBkYXRlLmNhbGwodGhpcyk7XG5cbiAgICAvLyB3YWl0IGZvciB0aGUgUGxhbmUgY3RvciB0byBmaW5pc2ggYmVmb3JlIGNhbGxpbmcgcmVmcmVzaFxuICAgIGlmICh0aGlzLl9yZWFkeSkge1xuICAgICAgICB0aGlzLnJlZnJlc2goKTtcbiAgICB9XG59O1xuIiwidmFyIE1lc2ggPSByZXF1aXJlKCcuL01lc2gnKTtcbnZhciBjb3JlID0gcmVxdWlyZSgnLi4vY29yZScpO1xuXG4vKipcbiAqIFRoZSByb3BlIGFsbG93cyB5b3UgdG8gZHJhdyBhIHRleHR1cmUgYWNyb3NzIHNldmVyYWwgcG9pbnRzIGFuZCB0aGVtIG1hbmlwdWxhdGUgdGhlc2UgcG9pbnRzXG4gKlxuICpgYGBqc1xuICogZm9yICh2YXIgaSA9IDA7IGkgPCAyMDsgaSsrKSB7XG4gKiAgICAgcG9pbnRzLnB1c2gobmV3IFBJWEkuUG9pbnQoaSAqIDUwLCAwKSk7XG4gKiB9O1xuICogdmFyIHJvcGUgPSBuZXcgUElYSS5Sb3BlKFBJWEkuVGV4dHVyZS5mcm9tSW1hZ2UoXCJzbmFrZS5wbmdcIiksIHBvaW50cyk7XG4gKiAgYGBgXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLm1lc2guTWVzaFxuICogQG1lbWJlcm9mIFBJWEkubWVzaFxuICogQHBhcmFtIHtQSVhJLlRleHR1cmV9IHRleHR1cmUgLSBUaGUgdGV4dHVyZSB0byB1c2Ugb24gdGhlIHJvcGUuXG4gKiBAcGFyYW0ge1BJWEkuUG9pbnRbXX0gcG9pbnRzIC0gQW4gYXJyYXkgb2Yge0BsaW5rIFBJWEkuUG9pbnR9IG9iamVjdHMgdG8gY29uc3RydWN0IHRoaXMgcm9wZS5cbiAqXG4gKi9cbmZ1bmN0aW9uIFJvcGUodGV4dHVyZSwgcG9pbnRzKVxue1xuICAgIE1lc2guY2FsbCh0aGlzLCB0ZXh0dXJlKTtcblxuICAgIC8qXG4gICAgICogQG1lbWJlciB7UElYSS5Qb2ludFtdfSBBbiBhcnJheSBvZiBwb2ludHMgdGhhdCBkZXRlcm1pbmUgdGhlIHJvcGVcbiAgICAgKi9cbiAgICB0aGlzLnBvaW50cyA9IHBvaW50cztcblxuICAgIC8qXG4gICAgICogQG1lbWJlciB7RmxvYXQzMkFycmF5fSBBbiBhcnJheSBvZiB2ZXJ0aWNlcyB1c2VkIHRvIGNvbnN0cnVjdCB0aGlzIHJvcGUuXG4gICAgICovXG4gICAgdGhpcy52ZXJ0aWNlcyA9IG5ldyBGbG9hdDMyQXJyYXkocG9pbnRzLmxlbmd0aCAqIDQpO1xuXG4gICAgLypcbiAgICAgKiBAbWVtYmVyIHtGbG9hdDMyQXJyYXl9IFRoZSBXZWJHTCBVdnMgb2YgdGhlIHJvcGUuXG4gICAgICovXG4gICAgdGhpcy51dnMgPSBuZXcgRmxvYXQzMkFycmF5KHBvaW50cy5sZW5ndGggKiA0KTtcblxuICAgIC8qXG4gICAgICogQG1lbWJlciB7RmxvYXQzMkFycmF5fSBBbiBhcnJheSBjb250YWluaW5nIHRoZSBjb2xvciBjb21wb25lbnRzXG4gICAgICovXG4gICAgdGhpcy5jb2xvcnMgPSBuZXcgRmxvYXQzMkFycmF5KHBvaW50cy5sZW5ndGggKiAyKTtcblxuICAgIC8qXG4gICAgICogQG1lbWJlciB7VWludDE2QXJyYXl9IEFuIGFycmF5IGNvbnRhaW5pbmcgdGhlIGluZGljZXMgb2YgdGhlIHZlcnRpY2VzXG4gICAgICovXG4gICAgdGhpcy5pbmRpY2VzID0gbmV3IFVpbnQxNkFycmF5KHBvaW50cy5sZW5ndGggKiAyKTtcblxuICAgIC8qKlxuICAgICAqIFRyYWNrZXIgZm9yIGlmIHRoZSByb3BlIGlzIHJlYWR5IHRvIGJlIGRyYXduLiBOZWVkZWQgYmVjYXVzZSBNZXNoIGN0b3IgY2FuXG4gICAgICogY2FsbCBfb25UZXh0dXJlVXBkYXRlZCB3aGljaCBjb3VsZCBjYWxsIHJlZnJlc2ggdG9vIGVhcmx5LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgICB0aGlzLl9yZWFkeSA9IHRydWU7XG5cbiAgICAgdGhpcy5yZWZyZXNoKCk7XG59XG5cblxuLy8gY29uc3RydWN0b3JcblJvcGUucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShNZXNoLnByb3RvdHlwZSk7XG5Sb3BlLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFJvcGU7XG5tb2R1bGUuZXhwb3J0cyA9IFJvcGU7XG5cbi8qKlxuICogUmVmcmVzaGVzXG4gKlxuICovXG5Sb3BlLnByb3RvdHlwZS5yZWZyZXNoID0gZnVuY3Rpb24gKClcbntcbiAgICB2YXIgcG9pbnRzID0gdGhpcy5wb2ludHM7XG5cbiAgICAvLyBpZiB0b28gbGl0dGxlIHBvaW50cywgb3IgdGV4dHVyZSBoYXNuJ3QgZ290IFVWcyBzZXQgeWV0IGp1c3QgbW92ZSBvbi5cbiAgICBpZiAocG9pbnRzLmxlbmd0aCA8IDEgfHwgIXRoaXMuX3RleHR1cmUuX3V2cylcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB2YXIgdXZzID0gdGhpcy51dnM7XG5cbiAgICB2YXIgaW5kaWNlcyA9IHRoaXMuaW5kaWNlcztcbiAgICB2YXIgY29sb3JzID0gdGhpcy5jb2xvcnM7XG5cbiAgICB2YXIgdGV4dHVyZVV2cyA9IHRoaXMuX3RleHR1cmUuX3V2cztcbiAgICB2YXIgb2Zmc2V0ID0gbmV3IGNvcmUuUG9pbnQodGV4dHVyZVV2cy54MCwgdGV4dHVyZVV2cy55MCk7XG4gICAgdmFyIGZhY3RvciA9IG5ldyBjb3JlLlBvaW50KHRleHR1cmVVdnMueDIgLSB0ZXh0dXJlVXZzLngwLCB0ZXh0dXJlVXZzLnkyIC0gdGV4dHVyZVV2cy55MCk7XG5cbiAgICB1dnNbMF0gPSAwICsgb2Zmc2V0Lng7XG4gICAgdXZzWzFdID0gMCArIG9mZnNldC55O1xuICAgIHV2c1syXSA9IDAgKyBvZmZzZXQueDtcbiAgICB1dnNbM10gPSAxICogZmFjdG9yLnkgKyBvZmZzZXQueTtcblxuICAgIGNvbG9yc1swXSA9IDE7XG4gICAgY29sb3JzWzFdID0gMTtcblxuICAgIGluZGljZXNbMF0gPSAwO1xuICAgIGluZGljZXNbMV0gPSAxO1xuXG4gICAgdmFyIHRvdGFsID0gcG9pbnRzLmxlbmd0aCxcbiAgICAgICAgcG9pbnQsIGluZGV4LCBhbW91bnQ7XG5cbiAgICBmb3IgKHZhciBpID0gMTsgaSA8IHRvdGFsOyBpKyspXG4gICAge1xuICAgICAgICBwb2ludCA9IHBvaW50c1tpXTtcbiAgICAgICAgaW5kZXggPSBpICogNDtcbiAgICAgICAgLy8gdGltZSB0byBkbyBzb21lIHNtYXJ0IGRyYXdpbmchXG4gICAgICAgIGFtb3VudCA9IGkgLyAodG90YWwtMSk7XG5cbiAgICAgICAgdXZzW2luZGV4XSA9IGFtb3VudCAqIGZhY3Rvci54ICsgb2Zmc2V0Lng7XG4gICAgICAgIHV2c1tpbmRleCsxXSA9IDAgKyBvZmZzZXQueTtcblxuICAgICAgICB1dnNbaW5kZXgrMl0gPSBhbW91bnQgKiBmYWN0b3IueCArIG9mZnNldC54O1xuICAgICAgICB1dnNbaW5kZXgrM10gPSAxICogZmFjdG9yLnkgKyBvZmZzZXQueTtcblxuICAgICAgICBpbmRleCA9IGkgKiAyO1xuICAgICAgICBjb2xvcnNbaW5kZXhdID0gMTtcbiAgICAgICAgY29sb3JzW2luZGV4KzFdID0gMTtcblxuICAgICAgICBpbmRleCA9IGkgKiAyO1xuICAgICAgICBpbmRpY2VzW2luZGV4XSA9IGluZGV4O1xuICAgICAgICBpbmRpY2VzW2luZGV4ICsgMV0gPSBpbmRleCArIDE7XG4gICAgfVxuXG4gICAgdGhpcy5kaXJ0eSA9IHRydWU7XG59O1xuXG4vKipcbiAqIENsZWFyIHRleHR1cmUgVVZzIHdoZW4gbmV3IHRleHR1cmUgaXMgc2V0XG4gKlxuICogQHByaXZhdGVcbiAqL1xuUm9wZS5wcm90b3R5cGUuX29uVGV4dHVyZVVwZGF0ZSA9IGZ1bmN0aW9uICgpXG57XG4gICAgTWVzaC5wcm90b3R5cGUuX29uVGV4dHVyZVVwZGF0ZS5jYWxsKHRoaXMpO1xuXG4gICAgLy8gd2FpdCBmb3IgdGhlIFJvcGUgY3RvciB0byBmaW5pc2ggYmVmb3JlIGNhbGxpbmcgcmVmcmVzaFxuICAgIGlmICh0aGlzLl9yZWFkeSkge1xuICAgICAgICB0aGlzLnJlZnJlc2goKTtcbiAgICB9XG59O1xuXG4vKipcbiAqIFVwZGF0ZXMgdGhlIG9iamVjdCB0cmFuc2Zvcm0gZm9yIHJlbmRlcmluZ1xuICpcbiAqIEBwcml2YXRlXG4gKi9cblJvcGUucHJvdG90eXBlLnVwZGF0ZVRyYW5zZm9ybSA9IGZ1bmN0aW9uICgpXG57XG4gICAgdmFyIHBvaW50cyA9IHRoaXMucG9pbnRzO1xuXG4gICAgaWYgKHBvaW50cy5sZW5ndGggPCAxKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHZhciBsYXN0UG9pbnQgPSBwb2ludHNbMF07XG4gICAgdmFyIG5leHRQb2ludDtcbiAgICB2YXIgcGVycFggPSAwO1xuICAgIHZhciBwZXJwWSA9IDA7XG5cbiAgICAvLyB0aGlzLmNvdW50IC09IDAuMjtcblxuICAgIHZhciB2ZXJ0aWNlcyA9IHRoaXMudmVydGljZXM7XG4gICAgdmFyIHRvdGFsID0gcG9pbnRzLmxlbmd0aCxcbiAgICAgICAgcG9pbnQsIGluZGV4LCByYXRpbywgcGVycExlbmd0aCwgbnVtO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0b3RhbDsgaSsrKVxuICAgIHtcbiAgICAgICAgcG9pbnQgPSBwb2ludHNbaV07XG4gICAgICAgIGluZGV4ID0gaSAqIDQ7XG5cbiAgICAgICAgaWYgKGkgPCBwb2ludHMubGVuZ3RoLTEpXG4gICAgICAgIHtcbiAgICAgICAgICAgIG5leHRQb2ludCA9IHBvaW50c1tpKzFdO1xuICAgICAgICB9XG4gICAgICAgIGVsc2VcbiAgICAgICAge1xuICAgICAgICAgICAgbmV4dFBvaW50ID0gcG9pbnQ7XG4gICAgICAgIH1cblxuICAgICAgICBwZXJwWSA9IC0obmV4dFBvaW50LnggLSBsYXN0UG9pbnQueCk7XG4gICAgICAgIHBlcnBYID0gbmV4dFBvaW50LnkgLSBsYXN0UG9pbnQueTtcblxuICAgICAgICByYXRpbyA9ICgxIC0gKGkgLyAodG90YWwtMSkpKSAqIDEwO1xuXG4gICAgICAgIGlmIChyYXRpbyA+IDEpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJhdGlvID0gMTtcbiAgICAgICAgfVxuXG4gICAgICAgIHBlcnBMZW5ndGggPSBNYXRoLnNxcnQocGVycFggKiBwZXJwWCArIHBlcnBZICogcGVycFkpO1xuICAgICAgICBudW0gPSB0aGlzLl90ZXh0dXJlLmhlaWdodCAvIDI7IC8vKDIwICsgTWF0aC5hYnMoTWF0aC5zaW4oKGkgKyB0aGlzLmNvdW50KSAqIDAuMykgKiA1MCkgKSogcmF0aW87XG4gICAgICAgIHBlcnBYIC89IHBlcnBMZW5ndGg7XG4gICAgICAgIHBlcnBZIC89IHBlcnBMZW5ndGg7XG5cbiAgICAgICAgcGVycFggKj0gbnVtO1xuICAgICAgICBwZXJwWSAqPSBudW07XG5cbiAgICAgICAgdmVydGljZXNbaW5kZXhdID0gcG9pbnQueCArIHBlcnBYO1xuICAgICAgICB2ZXJ0aWNlc1tpbmRleCsxXSA9IHBvaW50LnkgKyBwZXJwWTtcbiAgICAgICAgdmVydGljZXNbaW5kZXgrMl0gPSBwb2ludC54IC0gcGVycFg7XG4gICAgICAgIHZlcnRpY2VzW2luZGV4KzNdID0gcG9pbnQueSAtIHBlcnBZO1xuXG4gICAgICAgIGxhc3RQb2ludCA9IHBvaW50O1xuICAgIH1cblxuICAgIHRoaXMuY29udGFpbmVyVXBkYXRlVHJhbnNmb3JtKCk7XG59O1xuIiwiLyoqXG4gKiBAZmlsZSAgICAgICAgTWFpbiBleHBvcnQgb2YgdGhlIFBJWEkgZXh0cmFzIGxpYnJhcnlcbiAqIEBhdXRob3IgICAgICBNYXQgR3JvdmVzIDxtYXRAZ29vZGJveWRpZ2l0YWwuY29tPlxuICogQGNvcHlyaWdodCAgIDIwMTMtMjAxNSBHb29kQm95RGlnaXRhbFxuICogQGxpY2Vuc2UgICAgIHtAbGluayBodHRwczovL2dpdGh1Yi5jb20vcGl4aWpzL3BpeGkuanMvYmxvYi9tYXN0ZXIvTElDRU5TRXxNSVQgTGljZW5zZX1cbiAqL1xuXG4vKipcbiAqIEBuYW1lc3BhY2UgUElYSS5tZXNoXG4gKi9cbm1vZHVsZS5leHBvcnRzID0ge1xuICAgIE1lc2g6ICAgICAgICAgICByZXF1aXJlKCcuL01lc2gnKSxcbiAgICBQbGFuZTogICAgICAgICAgIHJlcXVpcmUoJy4vUGxhbmUnKSxcbiAgICBSb3BlOiAgICAgICAgICAgcmVxdWlyZSgnLi9Sb3BlJyksXG4gICAgTWVzaFJlbmRlcmVyOiAgIHJlcXVpcmUoJy4vd2ViZ2wvTWVzaFJlbmRlcmVyJyksXG4gICAgTWVzaFNoYWRlcjogICAgIHJlcXVpcmUoJy4vd2ViZ2wvTWVzaFNoYWRlcicpXG59O1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi8uLi9jb3JlJyksXG4gICAgTWVzaCA9IHJlcXVpcmUoJy4uL01lc2gnKTtcblxuLyoqXG4gKiBAYXV0aG9yIE1hdCBHcm92ZXNcbiAqXG4gKiBCaWcgdGhhbmtzIHRvIHRoZSB2ZXJ5IGNsZXZlciBNYXR0IERlc0xhdXJpZXJzIDxtYXR0ZGVzbD4gaHR0cHM6Ly9naXRodWIuY29tL21hdHRkZXNsL1xuICogZm9yIGNyZWF0aW5nIHRoZSBvcmlnaW5hbCBwaXhpIHZlcnNpb24hXG4gKiBBbHNvIGEgdGhhbmtzIHRvIGh0dHBzOi8vZ2l0aHViLmNvbS9iY2hldmFsaWVyIGZvciB0d2Vha2luZyB0aGUgdGludCBhbmQgYWxwaGEgc28gdGhhdCB0aGV5IG5vdyBzaGFyZSA0IGJ5dGVzIG9uIHRoZSB2ZXJ0ZXggYnVmZmVyXG4gKlxuICogSGVhdmlseSBpbnNwaXJlZCBieSBMaWJHRFgncyBNZXNoUmVuZGVyZXI6XG4gKiBodHRwczovL2dpdGh1Yi5jb20vbGliZ2R4L2xpYmdkeC9ibG9iL21hc3Rlci9nZHgvc3JjL2NvbS9iYWRsb2dpYy9nZHgvZ3JhcGhpY3MvZzJkL01lc2hSZW5kZXJlci5qYXZhXG4gKi9cblxuLyoqXG4gKlxuICogQGNsYXNzXG4gKiBAcHJpdmF0ZVxuICogQG1lbWJlcm9mIFBJWEkubWVzaFxuICogQGV4dGVuZHMgUElYSS5PYmplY3RSZW5kZXJlclxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLldlYkdMUmVuZGVyZXJ9IFRoZSByZW5kZXJlciB0aGlzIHNwcml0ZSBiYXRjaCB3b3JrcyBmb3IuXG4gKi9cbmZ1bmN0aW9uIE1lc2hSZW5kZXJlcihyZW5kZXJlcilcbntcbiAgICBjb3JlLk9iamVjdFJlbmRlcmVyLmNhbGwodGhpcywgcmVuZGVyZXIpO1xuXG5cbiAgICAvKipcbiAgICAgKiBIb2xkcyB0aGUgaW5kaWNlc1xuICAgICAqXG4gICAgICogQG1lbWJlciB7VWludDE2QXJyYXl9XG4gICAgICovXG4gICAgXG4gICAgdGhpcy5pbmRpY2VzID0gbmV3IFVpbnQxNkFycmF5KDE1MDAwKTtcblxuICAgIC8vVE9ETyB0aGlzIGNvdWxkIGJlIGEgc2luZ2xlIGJ1ZmZlciBzaGFyZWQgYW1vbmdzdCBhbGwgcmVuZGVyZXJzIGFzIHdlIHJldXNlIHRoaXMgc2V0IHVwIGluIG1vc3QgcmVuZGVyZXJzXG4gICAgZm9yICh2YXIgaT0wLCBqPTA7IGkgPCAxNTAwMDsgaSArPSA2LCBqICs9IDQpXG4gICAge1xuICAgICAgICB0aGlzLmluZGljZXNbaSArIDBdID0gaiArIDA7XG4gICAgICAgIHRoaXMuaW5kaWNlc1tpICsgMV0gPSBqICsgMTtcbiAgICAgICAgdGhpcy5pbmRpY2VzW2kgKyAyXSA9IGogKyAyO1xuICAgICAgICB0aGlzLmluZGljZXNbaSArIDNdID0gaiArIDA7XG4gICAgICAgIHRoaXMuaW5kaWNlc1tpICsgNF0gPSBqICsgMjtcbiAgICAgICAgdGhpcy5pbmRpY2VzW2kgKyA1XSA9IGogKyAzO1xuICAgIH1cblxuICAgIHRoaXMuY3VycmVudFNoYWRlciA9IG51bGw7XG59XG5cbk1lc2hSZW5kZXJlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuT2JqZWN0UmVuZGVyZXIucHJvdG90eXBlKTtcbk1lc2hSZW5kZXJlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBNZXNoUmVuZGVyZXI7XG5tb2R1bGUuZXhwb3J0cyA9IE1lc2hSZW5kZXJlcjtcblxuY29yZS5XZWJHTFJlbmRlcmVyLnJlZ2lzdGVyUGx1Z2luKCdtZXNoJywgTWVzaFJlbmRlcmVyKTtcblxuLyoqXG4gKiBTZXRzIHVwIHRoZSByZW5kZXJlciBjb250ZXh0IGFuZCBuZWNlc3NhcnkgYnVmZmVycy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIGdsIHtXZWJHTFJlbmRlcmluZ0NvbnRleHR9IHRoZSBjdXJyZW50IFdlYkdMIGRyYXdpbmcgY29udGV4dFxuICovXG5NZXNoUmVuZGVyZXIucHJvdG90eXBlLm9uQ29udGV4dENoYW5nZSA9IGZ1bmN0aW9uICgpXG57XG5cbn07XG5cbi8qKlxuICogUmVuZGVycyB0aGUgc3ByaXRlIG9iamVjdC5cbiAqXG4gKiBAcGFyYW0gbWVzaCB7UElYSS5tZXNoLk1lc2h9IHRoZSBtZXNoIHRvIHJlbmRlclxuICovXG5NZXNoUmVuZGVyZXIucHJvdG90eXBlLnJlbmRlciA9IGZ1bmN0aW9uIChtZXNoKVxue1xuICAgIGlmKCFtZXNoLl92ZXJ0ZXhCdWZmZXIpXG4gICAge1xuICAgICAgICB0aGlzLl9pbml0V2ViR0wobWVzaCk7XG4gICAgfVxuXG4gICAgdmFyIHJlbmRlcmVyID0gdGhpcy5yZW5kZXJlcixcbiAgICAgICAgZ2wgPSByZW5kZXJlci5nbCxcbiAgICAgICAgdGV4dHVyZSA9IG1lc2guX3RleHR1cmUuYmFzZVRleHR1cmUsXG4gICAgICAgIHNoYWRlciA9IG1lc2guc2hhZGVyOy8vIHx8IHJlbmRlcmVyLnNoYWRlck1hbmFnZXIucGx1Z2lucy5tZXNoU2hhZGVyO1xuXG4gICAgdmFyIGRyYXdNb2RlID0gbWVzaC5kcmF3TW9kZSA9PT0gTWVzaC5EUkFXX01PREVTLlRSSUFOR0xFX01FU0ggPyBnbC5UUklBTkdMRV9TVFJJUCA6IGdsLlRSSUFOR0xFUztcblxuICAgIHJlbmRlcmVyLmJsZW5kTW9kZU1hbmFnZXIuc2V0QmxlbmRNb2RlKG1lc2guYmxlbmRNb2RlKTtcblxuICAgIC8vVE9ETyBjYWNoZSBjdXN0b20gc3RhdGUuLlxuICAgIGlmICghc2hhZGVyKVxuICAgIHtcbiAgICAgICAgc2hhZGVyID0gcmVuZGVyZXIuc2hhZGVyTWFuYWdlci5wbHVnaW5zLm1lc2hTaGFkZXI7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHNoYWRlciA9IHNoYWRlci5zaGFkZXJzW2dsLmlkXSB8fCBzaGFkZXIuZ2V0U2hhZGVyKHJlbmRlcmVyKTsvLyA6IHNoYWRlcjtcbiAgICB9XG5cbiAgICB0aGlzLnJlbmRlcmVyLnNoYWRlck1hbmFnZXIuc2V0U2hhZGVyKHNoYWRlcik7XG5cbiAgICBzaGFkZXIudW5pZm9ybXMudHJhbnNsYXRpb25NYXRyaXgudmFsdWUgPSBtZXNoLndvcmxkVHJhbnNmb3JtLnRvQXJyYXkodHJ1ZSk7XG4gICAgc2hhZGVyLnVuaWZvcm1zLnByb2plY3Rpb25NYXRyaXgudmFsdWUgPSByZW5kZXJlci5jdXJyZW50UmVuZGVyVGFyZ2V0LnByb2plY3Rpb25NYXRyaXgudG9BcnJheSh0cnVlKTtcbiAgICBzaGFkZXIudW5pZm9ybXMuYWxwaGEudmFsdWUgPSBtZXNoLndvcmxkQWxwaGE7XG5cbiAgICBzaGFkZXIuc3luY1VuaWZvcm1zKCk7XG5cbiAgICBpZiAoIW1lc2guZGlydHkpXG4gICAge1xuXG4gICAgICAgIGdsLmJpbmRCdWZmZXIoZ2wuQVJSQVlfQlVGRkVSLCBtZXNoLl92ZXJ0ZXhCdWZmZXIpO1xuICAgICAgICBnbC5idWZmZXJTdWJEYXRhKGdsLkFSUkFZX0JVRkZFUiwgMCwgbWVzaC52ZXJ0aWNlcyk7XG4gICAgICAgIGdsLnZlcnRleEF0dHJpYlBvaW50ZXIoc2hhZGVyLmF0dHJpYnV0ZXMuYVZlcnRleFBvc2l0aW9uLCAyLCBnbC5GTE9BVCwgZmFsc2UsIDAsIDApO1xuXG4gICAgICAgIC8vIHVwZGF0ZSB0aGUgdXZzXG4gICAgICAgIGdsLmJpbmRCdWZmZXIoZ2wuQVJSQVlfQlVGRkVSLCBtZXNoLl91dkJ1ZmZlcik7XG4gICAgICAgIGdsLnZlcnRleEF0dHJpYlBvaW50ZXIoc2hhZGVyLmF0dHJpYnV0ZXMuYVRleHR1cmVDb29yZCwgMiwgZ2wuRkxPQVQsIGZhbHNlLCAwLCAwKTtcblxuXG4gICAgICAgIGdsLmFjdGl2ZVRleHR1cmUoZ2wuVEVYVFVSRTApO1xuXG4gICAgICAgaWYgKCF0ZXh0dXJlLl9nbFRleHR1cmVzW2dsLmlkXSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5yZW5kZXJlci51cGRhdGVUZXh0dXJlKHRleHR1cmUpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2VcbiAgICAgICAge1xuICAgICAgICAgICAgLy8gYmluZCB0aGUgY3VycmVudCB0ZXh0dXJlXG4gICAgICAgICAgICBnbC5iaW5kVGV4dHVyZShnbC5URVhUVVJFXzJELCB0ZXh0dXJlLl9nbFRleHR1cmVzW2dsLmlkXSk7XG4gICAgICAgIH1cblxuICAgICAgICBnbC5iaW5kQnVmZmVyKGdsLkVMRU1FTlRfQVJSQVlfQlVGRkVSLCBtZXNoLl9pbmRleEJ1ZmZlcik7XG4gICAgICAgIGdsLmJ1ZmZlclN1YkRhdGEoZ2wuRUxFTUVOVF9BUlJBWV9CVUZGRVIsIDAsIG1lc2guaW5kaWNlcyk7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG5cbiAgICAgICAgbWVzaC5kaXJ0eSA9IGZhbHNlO1xuICAgICAgICBnbC5iaW5kQnVmZmVyKGdsLkFSUkFZX0JVRkZFUiwgbWVzaC5fdmVydGV4QnVmZmVyKTtcbiAgICAgICAgZ2wuYnVmZmVyRGF0YShnbC5BUlJBWV9CVUZGRVIsIG1lc2gudmVydGljZXMsIGdsLlNUQVRJQ19EUkFXKTtcbiAgICAgICAgZ2wudmVydGV4QXR0cmliUG9pbnRlcihzaGFkZXIuYXR0cmlidXRlcy5hVmVydGV4UG9zaXRpb24sIDIsIGdsLkZMT0FULCBmYWxzZSwgMCwgMCk7XG5cbiAgICAgICAgLy8gdXBkYXRlIHRoZSB1dnNcbiAgICAgICAgZ2wuYmluZEJ1ZmZlcihnbC5BUlJBWV9CVUZGRVIsIG1lc2guX3V2QnVmZmVyKTtcbiAgICAgICAgZ2wuYnVmZmVyRGF0YShnbC5BUlJBWV9CVUZGRVIsIG1lc2gudXZzLCBnbC5TVEFUSUNfRFJBVyk7XG4gICAgICAgIGdsLnZlcnRleEF0dHJpYlBvaW50ZXIoc2hhZGVyLmF0dHJpYnV0ZXMuYVRleHR1cmVDb29yZCwgMiwgZ2wuRkxPQVQsIGZhbHNlLCAwLCAwKTtcblxuICAgICAgICAgZ2wuYWN0aXZlVGV4dHVyZShnbC5URVhUVVJFMCk7XG5cbiAgICAgICAgaWYgKCF0ZXh0dXJlLl9nbFRleHR1cmVzW2dsLmlkXSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5yZW5kZXJlci51cGRhdGVUZXh0dXJlKHRleHR1cmUpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2VcbiAgICAgICAge1xuICAgICAgICAgICAgLy8gYmluZCB0aGUgY3VycmVudCB0ZXh0dXJlXG4gICAgICAgICAgICBnbC5iaW5kVGV4dHVyZShnbC5URVhUVVJFXzJELCB0ZXh0dXJlLl9nbFRleHR1cmVzW2dsLmlkXSk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBkb250IG5lZWQgdG8gdXBsb2FkIVxuICAgICAgICBnbC5iaW5kQnVmZmVyKGdsLkVMRU1FTlRfQVJSQVlfQlVGRkVSLCBtZXNoLl9pbmRleEJ1ZmZlcik7XG4gICAgICAgIGdsLmJ1ZmZlckRhdGEoZ2wuRUxFTUVOVF9BUlJBWV9CVUZGRVIsIG1lc2guaW5kaWNlcywgZ2wuU1RBVElDX0RSQVcpO1xuXG4gICAgfVxuXG4gICAgZ2wuZHJhd0VsZW1lbnRzKGRyYXdNb2RlLCBtZXNoLmluZGljZXMubGVuZ3RoLCBnbC5VTlNJR05FRF9TSE9SVCwgMCk7XG5cbn07XG5cbi8qKlxuICogUHJlcGFyZXMgYWxsIHRoZSBidWZmZXJzIHRvIHJlbmRlciB0aGlzIG1lc2hcbiAqIEBwYXJhbSBtZXNoIHtQSVhJLm1lc2guTWVzaH0gdGhlIG1lc2ggdG8gcmVuZGVyXG4gKi9cbk1lc2hSZW5kZXJlci5wcm90b3R5cGUuX2luaXRXZWJHTCA9IGZ1bmN0aW9uIChtZXNoKVxue1xuICAgIC8vIGJ1aWxkIHRoZSBzdHJpcCFcbiAgICB2YXIgZ2wgPSB0aGlzLnJlbmRlcmVyLmdsO1xuXG4gICAgbWVzaC5fdmVydGV4QnVmZmVyID0gZ2wuY3JlYXRlQnVmZmVyKCk7XG4gICAgbWVzaC5faW5kZXhCdWZmZXIgPSBnbC5jcmVhdGVCdWZmZXIoKTtcbiAgICBtZXNoLl91dkJ1ZmZlciA9IGdsLmNyZWF0ZUJ1ZmZlcigpO1xuXG5cblxuICAgIGdsLmJpbmRCdWZmZXIoZ2wuQVJSQVlfQlVGRkVSLCBtZXNoLl92ZXJ0ZXhCdWZmZXIpO1xuICAgIGdsLmJ1ZmZlckRhdGEoZ2wuQVJSQVlfQlVGRkVSLCBtZXNoLnZlcnRpY2VzLCBnbC5EWU5BTUlDX0RSQVcpO1xuXG4gICAgZ2wuYmluZEJ1ZmZlcihnbC5BUlJBWV9CVUZGRVIsIG1lc2guX3V2QnVmZmVyKTtcbiAgICBnbC5idWZmZXJEYXRhKGdsLkFSUkFZX0JVRkZFUiwgIG1lc2gudXZzLCBnbC5TVEFUSUNfRFJBVyk7XG5cbiAgICBpZihtZXNoLmNvbG9ycyl7XG4gICAgICAgIG1lc2guX2NvbG9yQnVmZmVyID0gZ2wuY3JlYXRlQnVmZmVyKCk7XG4gICAgICAgIGdsLmJpbmRCdWZmZXIoZ2wuQVJSQVlfQlVGRkVSLCBtZXNoLl9jb2xvckJ1ZmZlcik7XG4gICAgICAgIGdsLmJ1ZmZlckRhdGEoZ2wuQVJSQVlfQlVGRkVSLCBtZXNoLmNvbG9ycywgZ2wuU1RBVElDX0RSQVcpO1xuICAgIH1cblxuICAgIGdsLmJpbmRCdWZmZXIoZ2wuRUxFTUVOVF9BUlJBWV9CVUZGRVIsIG1lc2guX2luZGV4QnVmZmVyKTtcbiAgICBnbC5idWZmZXJEYXRhKGdsLkVMRU1FTlRfQVJSQVlfQlVGRkVSLCBtZXNoLmluZGljZXMsIGdsLlNUQVRJQ19EUkFXKTtcbn07XG5cblxuLyoqXG4gKiBFbXB0aWVzIHRoZSBjdXJyZW50IGJhdGNoLlxuICpcbiAqL1xuTWVzaFJlbmRlcmVyLnByb3RvdHlwZS5mbHVzaCA9IGZ1bmN0aW9uICgpXG57XG5cbn07XG5cbi8qKlxuICogU3RhcnRzIGEgbmV3IG1lc2ggcmVuZGVyZXIuXG4gKlxuICovXG5NZXNoUmVuZGVyZXIucHJvdG90eXBlLnN0YXJ0ID0gZnVuY3Rpb24gKClcbntcbiAgICBcblxuICAgIHRoaXMuY3VycmVudFNoYWRlciA9IG51bGw7XG59O1xuXG4vKipcbiAqIERlc3Ryb3lzIHRoZSBNZXNoIHJlbmRlcmVyXG4gKlxuICovXG5NZXNoUmVuZGVyZXIucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoKVxue1xuICAgIGNvcmUuT2JqZWN0UmVuZGVyZXIucHJvdG90eXBlLmRlc3Ryb3kuY2FsbCh0aGlzKTtcbn07XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uLy4uL2NvcmUnKTtcblxuLyoqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuU2hhZGVyXG4gKiBAbWVtYmVyb2YgUElYSS5tZXNoXG4gKiBAcGFyYW0gc2hhZGVyTWFuYWdlciB7UElYSS5TaGFkZXJNYW5hZ2VyfSBUaGUgV2ViR0wgc2hhZGVyIG1hbmFnZXIgdGhpcyBzaGFkZXIgd29ya3MgZm9yLlxuICovXG5mdW5jdGlvbiBNZXNoU2hhZGVyKHNoYWRlck1hbmFnZXIpXG57XG4gICAgY29yZS5TaGFkZXIuY2FsbCh0aGlzLFxuICAgICAgICBzaGFkZXJNYW5hZ2VyLFxuICAgICAgICAvLyB2ZXJ0ZXggc2hhZGVyXG4gICAgICAgIFtcbiAgICAgICAgICAgICdwcmVjaXNpb24gbG93cCBmbG9hdDsnLFxuICAgICAgICAgICAgJ2F0dHJpYnV0ZSB2ZWMyIGFWZXJ0ZXhQb3NpdGlvbjsnLFxuICAgICAgICAgICAgJ2F0dHJpYnV0ZSB2ZWMyIGFUZXh0dXJlQ29vcmQ7JyxcblxuICAgICAgICAgICAgJ3VuaWZvcm0gbWF0MyB0cmFuc2xhdGlvbk1hdHJpeDsnLFxuICAgICAgICAgICAgJ3VuaWZvcm0gbWF0MyBwcm9qZWN0aW9uTWF0cml4OycsXG5cbiAgICAgICAgICAgICd2YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDsnLFxuXG4gICAgICAgICAgICAndm9pZCBtYWluKHZvaWQpeycsXG4gICAgICAgICAgICAnICAgZ2xfUG9zaXRpb24gPSB2ZWM0KChwcm9qZWN0aW9uTWF0cml4ICogdHJhbnNsYXRpb25NYXRyaXggKiB2ZWMzKGFWZXJ0ZXhQb3NpdGlvbiwgMS4wKSkueHksIDAuMCwgMS4wKTsnLFxuICAgICAgICAgICAgJyAgIHZUZXh0dXJlQ29vcmQgPSBhVGV4dHVyZUNvb3JkOycsXG4gICAgICAgICAgICAnfSdcbiAgICAgICAgXS5qb2luKCdcXG4nKSxcbiAgICAgICAgW1xuICAgICAgICAgICAgJ3ByZWNpc2lvbiBsb3dwIGZsb2F0OycsXG5cbiAgICAgICAgICAgICd2YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDsnLFxuICAgICAgICAgICAgJ3VuaWZvcm0gZmxvYXQgYWxwaGE7JyxcblxuICAgICAgICAgICAgJ3VuaWZvcm0gc2FtcGxlcjJEIHVTYW1wbGVyOycsXG5cbiAgICAgICAgICAgICd2b2lkIG1haW4odm9pZCl7JyxcbiAgICAgICAgICAgICcgICBnbF9GcmFnQ29sb3IgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZUZXh0dXJlQ29vcmQpICogYWxwaGEgOycsXG4gICAgICAgICAgICAnfSdcbiAgICAgICAgXS5qb2luKCdcXG4nKSxcbiAgICAgICAgLy8gY3VzdG9tIHVuaWZvcm1zXG4gICAgICAgIHtcbiAgICAgICAgICAgIGFscGhhOiAgeyB0eXBlOiAnMWYnLCB2YWx1ZTogMCB9LFxuICAgICAgICAgICAgdHJhbnNsYXRpb25NYXRyaXg6IHsgdHlwZTogJ21hdDMnLCB2YWx1ZTogbmV3IEZsb2F0MzJBcnJheSg5KSB9LFxuICAgICAgICAgICAgcHJvamVjdGlvbk1hdHJpeDogeyB0eXBlOiAnbWF0MycsIHZhbHVlOiBuZXcgRmxvYXQzMkFycmF5KDkpIH1cbiAgICAgICAgfSxcbiAgICAgICAgLy8gY3VzdG9tIGF0dHJpYnV0ZXNcbiAgICAgICAge1xuICAgICAgICAgICAgYVZlcnRleFBvc2l0aW9uOjAsXG4gICAgICAgICAgICBhVGV4dHVyZUNvb3JkOjBcbiAgICAgICAgfVxuICAgICk7XG59XG5cbk1lc2hTaGFkZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShjb3JlLlNoYWRlci5wcm90b3R5cGUpO1xuTWVzaFNoYWRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBNZXNoU2hhZGVyO1xubW9kdWxlLmV4cG9ydHMgPSBNZXNoU2hhZGVyO1xuXG5jb3JlLlNoYWRlck1hbmFnZXIucmVnaXN0ZXJQbHVnaW4oJ21lc2hTaGFkZXInLCBNZXNoU2hhZGVyKTtcbiIsIi8vIFJlZmVyZW5jZXM6XG4vLyBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9KYXZhU2NyaXB0L1JlZmVyZW5jZS9HbG9iYWxfT2JqZWN0cy9NYXRoL3NpZ25cblxuaWYgKCFNYXRoLnNpZ24pXG57XG4gICAgTWF0aC5zaWduID0gZnVuY3Rpb24gKHgpIHtcbiAgICAgICAgeCA9ICt4O1xuICAgICAgICBpZiAoeCA9PT0gMCB8fCBpc05hTih4KSlcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHg7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHggPiAwID8gMSA6IC0xO1xuICAgIH07XG59XG4iLCIvLyBSZWZlcmVuY2VzOlxuLy8gaHR0cHM6Ly9naXRodWIuY29tL3NpbmRyZXNvcmh1cy9vYmplY3QtYXNzaWduXG4vLyBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9KYXZhU2NyaXB0L1JlZmVyZW5jZS9HbG9iYWxfT2JqZWN0cy9PYmplY3QvYXNzaWduXG5cbmlmICghT2JqZWN0LmFzc2lnbilcbntcbiAgICBPYmplY3QuYXNzaWduID0gcmVxdWlyZSgnb2JqZWN0LWFzc2lnbicpO1xufVxuIiwicmVxdWlyZSgnLi9PYmplY3QuYXNzaWduJyk7XG5yZXF1aXJlKCcuL3JlcXVlc3RBbmltYXRpb25GcmFtZScpO1xucmVxdWlyZSgnLi9NYXRoLnNpZ24nKTtcbiIsIi8vIFJlZmVyZW5jZXM6XG4vLyBodHRwOi8vcGF1bGlyaXNoLmNvbS8yMDExL3JlcXVlc3RhbmltYXRpb25mcmFtZS1mb3Itc21hcnQtYW5pbWF0aW5nL1xuLy8gaHR0cHM6Ly9naXN0LmdpdGh1Yi5jb20vMTU3OTY3MVxuLy8gaHR0cDovL3VwZGF0ZXMuaHRtbDVyb2Nrcy5jb20vMjAxMi8wNS9yZXF1ZXN0QW5pbWF0aW9uRnJhbWUtQVBJLW5vdy13aXRoLXN1Yi1taWxsaXNlY29uZC1wcmVjaXNpb25cbi8vIGh0dHBzOi8vZ2lzdC5naXRodWIuY29tL3RpbWhhbGwvNDA3ODYxNFxuLy8gaHR0cHM6Ly9naXRodWIuY29tL0ZpbmFuY2lhbC1UaW1lcy9wb2x5ZmlsbC1zZXJ2aWNlL3RyZWUvbWFzdGVyL3BvbHlmaWxscy9yZXF1ZXN0QW5pbWF0aW9uRnJhbWVcblxuLy8gRXhwZWN0ZWQgdG8gYmUgdXNlZCB3aXRoIEJyb3dzZXJmaXlcbi8vIEJyb3dzZXJpZnkgYXV0b21hdGljYWxseSBkZXRlY3RzIHRoZSB1c2Ugb2YgYGdsb2JhbGAgYW5kIHBhc3NlcyB0aGVcbi8vIGNvcnJlY3QgcmVmZXJlbmNlIG9mIGBnbG9iYWxgLCBgc2VsZmAsIGFuZCBmaW5hbGx5IGB3aW5kb3dgXG5cbi8vIERhdGUubm93XG5pZiAoIShEYXRlLm5vdyAmJiBEYXRlLnByb3RvdHlwZS5nZXRUaW1lKSkge1xuICAgIERhdGUubm93ID0gZnVuY3Rpb24gbm93KCkge1xuICAgICAgICByZXR1cm4gbmV3IERhdGUoKS5nZXRUaW1lKCk7XG4gICAgfTtcbn1cblxuLy8gcGVyZm9ybWFuY2Uubm93XG5pZiAoIShnbG9iYWwucGVyZm9ybWFuY2UgJiYgZ2xvYmFsLnBlcmZvcm1hbmNlLm5vdykpIHtcbiAgICB2YXIgc3RhcnRUaW1lID0gRGF0ZS5ub3coKTtcbiAgICBpZiAoIWdsb2JhbC5wZXJmb3JtYW5jZSkge1xuICAgICAgICBnbG9iYWwucGVyZm9ybWFuY2UgPSB7fTtcbiAgICB9XG4gICAgZ2xvYmFsLnBlcmZvcm1hbmNlLm5vdyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIERhdGUubm93KCkgLSBzdGFydFRpbWU7XG4gICAgfTtcbn1cblxuLy8gcmVxdWVzdEFuaW1hdGlvbkZyYW1lXG52YXIgbGFzdFRpbWUgPSBEYXRlLm5vdygpO1xudmFyIHZlbmRvcnMgPSBbJ21zJywgJ21veicsICd3ZWJraXQnLCAnbyddO1xuXG5mb3IodmFyIHggPSAwOyB4IDwgdmVuZG9ycy5sZW5ndGggJiYgIWdsb2JhbC5yZXF1ZXN0QW5pbWF0aW9uRnJhbWU7ICsreCkge1xuICAgIGdsb2JhbC5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUgPSBnbG9iYWxbdmVuZG9yc1t4XSArICdSZXF1ZXN0QW5pbWF0aW9uRnJhbWUnXTtcbiAgICBnbG9iYWwuY2FuY2VsQW5pbWF0aW9uRnJhbWUgPSBnbG9iYWxbdmVuZG9yc1t4XSArICdDYW5jZWxBbmltYXRpb25GcmFtZSddIHx8XG4gICAgICAgIGdsb2JhbFt2ZW5kb3JzW3hdICsgJ0NhbmNlbFJlcXVlc3RBbmltYXRpb25GcmFtZSddO1xufVxuXG5pZiAoIWdsb2JhbC5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUpIHtcbiAgICBnbG9iYWwucmVxdWVzdEFuaW1hdGlvbkZyYW1lID0gZnVuY3Rpb24gKGNhbGxiYWNrKSB7XG4gICAgICAgIGlmICh0eXBlb2YgY2FsbGJhY2sgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoY2FsbGJhY2sgKyAnaXMgbm90IGEgZnVuY3Rpb24nKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBjdXJyZW50VGltZSA9IERhdGUubm93KCksXG4gICAgICAgICAgICBkZWxheSA9IDE2ICsgbGFzdFRpbWUgLSBjdXJyZW50VGltZTtcblxuICAgICAgICBpZiAoZGVsYXkgPCAwKSB7XG4gICAgICAgICAgICBkZWxheSA9IDA7XG4gICAgICAgIH1cblxuICAgICAgICBsYXN0VGltZSA9IGN1cnJlbnRUaW1lO1xuXG4gICAgICAgIHJldHVybiBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGxhc3RUaW1lID0gRGF0ZS5ub3coKTtcbiAgICAgICAgICAgIGNhbGxiYWNrKHBlcmZvcm1hbmNlLm5vdygpKTtcbiAgICAgICAgfSwgZGVsYXkpO1xuICAgIH07XG59XG5cbmlmICghZ2xvYmFsLmNhbmNlbEFuaW1hdGlvbkZyYW1lKSB7XG4gICAgZ2xvYmFsLmNhbmNlbEFuaW1hdGlvbkZyYW1lID0gZnVuY3Rpb24oaWQpIHtcbiAgICAgICAgY2xlYXJUaW1lb3V0KGlkKTtcbiAgICB9O1xufVxuIl19 +//# sourceMappingURL=data:application/json;charset:utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIm5vZGVfbW9kdWxlcy9icm93c2VyaWZ5L25vZGVfbW9kdWxlcy9icm93c2VyLXBhY2svX3ByZWx1ZGUuanMiLCIuLi9waXhpLWdsLWNvcmUvaW5kZXguanMiLCIuLi9waXhpLWdsLWNvcmUvbGliL0dMQnVmZmVyLmpzIiwiLi4vcGl4aS1nbC1jb3JlL2xpYi9HTEZyYW1lYnVmZmVyLmpzIiwiLi4vcGl4aS1nbC1jb3JlL2xpYi9HTFNoYWRlci5qcyIsIi4uL3BpeGktZ2wtY29yZS9saWIvR0xUZXh0dXJlLmpzIiwiLi4vcGl4aS1nbC1jb3JlL2xpYi9WZXJ0ZXhBcnJheU9iamVjdC5qcyIsIi4uL3BpeGktZ2wtY29yZS9saWIvY3JlYXRlQ29udGV4dC5qcyIsIi4uL3BpeGktZ2wtY29yZS9saWIvc2V0VmVydGV4QXR0cmliQXJyYXlzLmpzIiwiLi4vcGl4aS1nbC1jb3JlL2xpYi9zaGFkZXIvY29tcGlsZVByb2dyYW0uanMiLCIuLi9waXhpLWdsLWNvcmUvbGliL3NoYWRlci9kZWZhdWx0VmFsdWUuanMiLCIuLi9waXhpLWdsLWNvcmUvbGliL3NoYWRlci9leHRyYWN0QXR0cmlidXRlcy5qcyIsIi4uL3BpeGktZ2wtY29yZS9saWIvc2hhZGVyL2V4dHJhY3RVbmlmb3Jtcy5qcyIsIi4uL3BpeGktZ2wtY29yZS9saWIvc2hhZGVyL2dlbmVyYXRlVW5pZm9ybUFjY2Vzc09iamVjdC5qcyIsIi4uL3BpeGktZ2wtY29yZS9saWIvc2hhZGVyL21hcFNpemUuanMiLCIuLi9waXhpLWdsLWNvcmUvbGliL3NoYWRlci9tYXBUeXBlLmpzIiwibm9kZV9tb2R1bGVzL2FzeW5jL2xpYi9hc3luYy5qcyIsIm5vZGVfbW9kdWxlcy9icm93c2VyaWZ5L25vZGVfbW9kdWxlcy9wYXRoLWJyb3dzZXJpZnkvaW5kZXguanMiLCJub2RlX21vZHVsZXMvYnJvd3NlcmlmeS9ub2RlX21vZHVsZXMvcHJvY2Vzcy9icm93c2VyLmpzIiwibm9kZV9tb2R1bGVzL2Jyb3dzZXJpZnkvbm9kZV9tb2R1bGVzL3B1bnljb2RlL3B1bnljb2RlLmpzIiwibm9kZV9tb2R1bGVzL2Jyb3dzZXJpZnkvbm9kZV9tb2R1bGVzL3F1ZXJ5c3RyaW5nLWVzMy9kZWNvZGUuanMiLCJub2RlX21vZHVsZXMvYnJvd3NlcmlmeS9ub2RlX21vZHVsZXMvcXVlcnlzdHJpbmctZXMzL2VuY29kZS5qcyIsIm5vZGVfbW9kdWxlcy9icm93c2VyaWZ5L25vZGVfbW9kdWxlcy9xdWVyeXN0cmluZy1lczMvaW5kZXguanMiLCJub2RlX21vZHVsZXMvYnJvd3NlcmlmeS9ub2RlX21vZHVsZXMvdXJsL3VybC5qcyIsIm5vZGVfbW9kdWxlcy9lYXJjdXQvc3JjL2VhcmN1dC5qcyIsIm5vZGVfbW9kdWxlcy9ldmVudGVtaXR0ZXIzL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL29iamVjdC1hc3NpZ24vaW5kZXguanMiLCJub2RlX21vZHVsZXMvcmVzb3VyY2UtbG9hZGVyL25vZGVfbW9kdWxlcy9hc3luYy9saWIvYXN5bmMuanMiLCJub2RlX21vZHVsZXMvcmVzb3VyY2UtbG9hZGVyL3NyYy9Mb2FkZXIuanMiLCJub2RlX21vZHVsZXMvcmVzb3VyY2UtbG9hZGVyL3NyYy9SZXNvdXJjZS5qcyIsIm5vZGVfbW9kdWxlcy9yZXNvdXJjZS1sb2FkZXIvc3JjL2I2NC5qcyIsIm5vZGVfbW9kdWxlcy9yZXNvdXJjZS1sb2FkZXIvc3JjL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL3Jlc291cmNlLWxvYWRlci9zcmMvbWlkZGxld2FyZXMvY2FjaGluZy9tZW1vcnkuanMiLCJub2RlX21vZHVsZXMvcmVzb3VyY2UtbG9hZGVyL3NyYy9taWRkbGV3YXJlcy9wYXJzaW5nL2Jsb2IuanMiLCJwYWNrYWdlLmpzb24iLCJzcmMvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5TWFuYWdlci5qcyIsInNyYy9hY2Nlc3NpYmlsaXR5L2FjY2Vzc2libGVUYXJnZXQuanMiLCJzcmMvYWNjZXNzaWJpbGl0eS9pbmRleC5qcyIsInNyYy9jb3JlL2NvbnN0LmpzIiwic3JjL2NvcmUvZGlzcGxheS9Db250YWluZXIuanMiLCJzcmMvY29yZS9kaXNwbGF5L0Rpc3BsYXlPYmplY3QuanMiLCJzcmMvY29yZS9ncmFwaGljcy9HcmFwaGljcy5qcyIsInNyYy9jb3JlL2dyYXBoaWNzL0dyYXBoaWNzRGF0YS5qcyIsInNyYy9jb3JlL2dyYXBoaWNzL3dlYmdsL0dyYXBoaWNzUmVuZGVyZXIuanMiLCJzcmMvY29yZS9ncmFwaGljcy93ZWJnbC9XZWJHTEdyYXBoaWNzRGF0YS5qcyIsInNyYy9jb3JlL2dyYXBoaWNzL3dlYmdsL3NoYWRlcnMvUHJpbWl0aXZlU2hhZGVyLmpzIiwic3JjL2NvcmUvZ3JhcGhpY3Mvd2ViZ2wvdXRpbHMvYnVpbGRDaXJjbGUuanMiLCJzcmMvY29yZS9ncmFwaGljcy93ZWJnbC91dGlscy9idWlsZENvbXBsZXhQb2x5LmpzIiwic3JjL2NvcmUvZ3JhcGhpY3Mvd2ViZ2wvdXRpbHMvYnVpbGRMaW5lLmpzIiwic3JjL2NvcmUvZ3JhcGhpY3Mvd2ViZ2wvdXRpbHMvYnVpbGRQb2x5LmpzIiwic3JjL2NvcmUvZ3JhcGhpY3Mvd2ViZ2wvdXRpbHMvYnVpbGRSZWN0YW5nbGUuanMiLCJzcmMvY29yZS9ncmFwaGljcy93ZWJnbC91dGlscy9idWlsZFJvdW5kZWRSZWN0YW5nbGUuanMiLCJzcmMvY29yZS9pbmRleC5qcyIsInNyYy9jb3JlL21hdGgvTWF0cml4LmpzIiwic3JjL2NvcmUvbWF0aC9Qb2ludC5qcyIsInNyYy9jb3JlL21hdGgvaW5kZXguanMiLCJzcmMvY29yZS9tYXRoL3NoYXBlcy9DaXJjbGUuanMiLCJzcmMvY29yZS9tYXRoL3NoYXBlcy9FbGxpcHNlLmpzIiwic3JjL2NvcmUvbWF0aC9zaGFwZXMvUG9seWdvbi5qcyIsInNyYy9jb3JlL21hdGgvc2hhcGVzL1JlY3RhbmdsZS5qcyIsInNyYy9jb3JlL21hdGgvc2hhcGVzL1JvdW5kZWRSZWN0YW5nbGUuanMiLCJzcmMvY29yZS9wYXJ0aWNsZXMvUGFydGljbGVDb250YWluZXIuanMiLCJzcmMvY29yZS9wYXJ0aWNsZXMvd2ViZ2wvUGFydGljbGVCdWZmZXIuanMiLCJzcmMvY29yZS9wYXJ0aWNsZXMvd2ViZ2wvUGFydGljbGVSZW5kZXJlci5qcyIsInNyYy9jb3JlL3BhcnRpY2xlcy93ZWJnbC9QYXJ0aWNsZVNoYWRlci5qcyIsInNyYy9jb3JlL3JlbmRlcmVycy9TeXN0ZW1SZW5kZXJlci5qcyIsInNyYy9jb3JlL3JlbmRlcmVycy9jYW52YXMvQ2FudmFzUmVuZGVyZXIuanMiLCJzcmMvY29yZS9yZW5kZXJlcnMvY2FudmFzL3V0aWxzL0NhbnZhc0J1ZmZlci5qcyIsInNyYy9jb3JlL3JlbmRlcmVycy9jYW52YXMvdXRpbHMvQ2FudmFzR3JhcGhpY3MuanMiLCJzcmMvY29yZS9yZW5kZXJlcnMvY2FudmFzL3V0aWxzL0NhbnZhc01hc2tNYW5hZ2VyLmpzIiwic3JjL2NvcmUvcmVuZGVyZXJzL2NhbnZhcy91dGlscy9DYW52YXNUaW50ZXIuanMiLCJzcmMvY29yZS9yZW5kZXJlcnMvd2ViZ2wvVGV4dHVyZU1hbmFnZXIuanMiLCJzcmMvY29yZS9yZW5kZXJlcnMvd2ViZ2wvV2ViR0xSZW5kZXJlci5qcyIsInNyYy9jb3JlL3JlbmRlcmVycy93ZWJnbC9maWx0ZXJzL0Fic3RyYWN0RmlsdGVyLmpzIiwic3JjL2NvcmUvcmVuZGVyZXJzL3dlYmdsL2ZpbHRlcnMvRlhBQUZpbHRlci5qcyIsInNyYy9jb3JlL3JlbmRlcmVycy93ZWJnbC9maWx0ZXJzL1Nwcml0ZU1hc2tGaWx0ZXIuanMiLCJzcmMvY29yZS9yZW5kZXJlcnMvd2ViZ2wvbWFuYWdlcnMvQmxlbmRNb2RlTWFuYWdlci5qcyIsInNyYy9jb3JlL3JlbmRlcmVycy93ZWJnbC9tYW5hZ2Vycy9GaWx0ZXJNYW5hZ2VyLmpzIiwic3JjL2NvcmUvcmVuZGVyZXJzL3dlYmdsL21hbmFnZXJzL01hc2tNYW5hZ2VyLmpzIiwic3JjL2NvcmUvcmVuZGVyZXJzL3dlYmdsL21hbmFnZXJzL1NoYWRlck1hbmFnZXIuanMiLCJzcmMvY29yZS9yZW5kZXJlcnMvd2ViZ2wvbWFuYWdlcnMvU3RlbmNpbE1hbmFnZXIuanMiLCJzcmMvY29yZS9yZW5kZXJlcnMvd2ViZ2wvbWFuYWdlcnMvV2ViR0xNYW5hZ2VyLmpzIiwic3JjL2NvcmUvcmVuZGVyZXJzL3dlYmdsL3NoYWRlcnMvQ29tcGxleFByaW1pdGl2ZVNoYWRlci5qcyIsInNyYy9jb3JlL3JlbmRlcmVycy93ZWJnbC9zaGFkZXJzL1ByaW1pdGl2ZVNoYWRlci5qcyIsInNyYy9jb3JlL3JlbmRlcmVycy93ZWJnbC9zaGFkZXJzL1NoYWRlci5qcyIsInNyYy9jb3JlL3JlbmRlcmVycy93ZWJnbC9zaGFkZXJzL1RleHR1cmVTaGFkZXIuanMiLCJzcmMvY29yZS9yZW5kZXJlcnMvd2ViZ2wvc2hhZGVycy9fVGV4dHVyZVNoYWRlci5qcyIsInNyYy9jb3JlL3JlbmRlcmVycy93ZWJnbC91dGlscy9PYmplY3RSZW5kZXJlci5qcyIsInNyYy9jb3JlL3JlbmRlcmVycy93ZWJnbC91dGlscy9RdWFkLmpzIiwic3JjL2NvcmUvcmVuZGVyZXJzL3dlYmdsL3V0aWxzL1JlbmRlclRhcmdldC5qcyIsInNyYy9jb3JlL3JlbmRlcmVycy93ZWJnbC91dGlscy9TdGVuY2lsTWFza1N0YWNrLmpzIiwic3JjL2NvcmUvcmVuZGVyZXJzL3dlYmdsL3V0aWxzL21hcFdlYkdMQmxlbmRNb2Rlc1RvUGl4aS5qcyIsInNyYy9jb3JlL3JlbmRlcmVycy93ZWJnbC91dGlscy9tYXBXZWJHTERyYXdNb2Rlc1RvUGl4aS5qcyIsInNyYy9jb3JlL3Nwcml0ZXMvU3ByaXRlLmpzIiwic3JjL2NvcmUvc3ByaXRlcy93ZWJnbC9TcHJpdGVSZW5kZXJlci5qcyIsInNyYy9jb3JlL3Nwcml0ZXMvd2ViZ2wvZ2VuZXJhdGVNdWx0aVRleHR1cmVTaGFkZXIuanMiLCJzcmMvY29yZS90ZXh0L1RleHQuanMiLCJzcmMvY29yZS90ZXh0dXJlcy9CYXNlVGV4dHVyZS5qcyIsInNyYy9jb3JlL3RleHR1cmVzL1JlbmRlclRleHR1cmUuanMiLCJzcmMvY29yZS90ZXh0dXJlcy9UZXh0dXJlLmpzIiwic3JjL2NvcmUvdGV4dHVyZXMvVGV4dHVyZVV2cy5qcyIsInNyYy9jb3JlL3RleHR1cmVzL1ZpZGVvQmFzZVRleHR1cmUuanMiLCJzcmMvY29yZS90aWNrZXIvVGlja2VyLmpzIiwic3JjL2NvcmUvdGlja2VyL2luZGV4LmpzIiwic3JjL2NvcmUvdXRpbHMvY3JlYXRlSW5kaWNlc0ZvclF1YWRzLmpzIiwic3JjL2NvcmUvdXRpbHMvaW5kZXguanMiLCJzcmMvY29yZS91dGlscy9wbHVnaW5UYXJnZXQuanMiLCJzcmMvZGVwcmVjYXRpb24uanMiLCJzcmMvZXh0cmFzL0JpdG1hcFRleHQuanMiLCJzcmMvZXh0cmFzL01vdmllQ2xpcC5qcyIsInNyYy9leHRyYXMvVGlsaW5nU3ByaXRlLmpzIiwic3JjL2V4dHJhcy9jYWNoZUFzQml0bWFwLmpzIiwic3JjL2V4dHJhcy9nZXRDaGlsZEJ5TmFtZS5qcyIsInNyYy9leHRyYXMvZ2V0R2xvYmFsUG9zaXRpb24uanMiLCJzcmMvZXh0cmFzL2luZGV4LmpzIiwic3JjL2ZpbHRlcnMvYXNjaWkvQXNjaWlGaWx0ZXIuanMiLCJzcmMvZmlsdGVycy9ibG9vbS9CbG9vbUZpbHRlci5qcyIsInNyYy9maWx0ZXJzL2JsdXIvQmx1ckRpckZpbHRlci5qcyIsInNyYy9maWx0ZXJzL2JsdXIvQmx1ckZpbHRlci5qcyIsInNyYy9maWx0ZXJzL2JsdXIvQmx1clhGaWx0ZXIuanMiLCJzcmMvZmlsdGVycy9ibHVyL0JsdXJZRmlsdGVyLmpzIiwic3JjL2ZpbHRlcnMvYmx1ci9TbWFydEJsdXJGaWx0ZXIuanMiLCJzcmMvZmlsdGVycy9jb2xvci9Db2xvck1hdHJpeEZpbHRlci5qcyIsInNyYy9maWx0ZXJzL2NvbG9yL0NvbG9yU3RlcEZpbHRlci5qcyIsInNyYy9maWx0ZXJzL2NvbnZvbHV0aW9uL0NvbnZvbHV0aW9uRmlsdGVyLmpzIiwic3JjL2ZpbHRlcnMvY3Jvc3NoYXRjaC9Dcm9zc0hhdGNoRmlsdGVyLmpzIiwic3JjL2ZpbHRlcnMvZGlzcGxhY2VtZW50L0Rpc3BsYWNlbWVudEZpbHRlci5qcyIsInNyYy9maWx0ZXJzL2RvdC9Eb3RTY3JlZW5GaWx0ZXIuanMiLCJzcmMvZmlsdGVycy9kcm9wc2hhZG93L0JsdXJZVGludEZpbHRlci5qcyIsInNyYy9maWx0ZXJzL2Ryb3BzaGFkb3cvRHJvcFNoYWRvd0ZpbHRlci5qcyIsInNyYy9maWx0ZXJzL2dyYXkvR3JheUZpbHRlci5qcyIsInNyYy9maWx0ZXJzL2luZGV4LmpzIiwic3JjL2ZpbHRlcnMvaW52ZXJ0L0ludmVydEZpbHRlci5qcyIsInNyYy9maWx0ZXJzL25vaXNlL05vaXNlRmlsdGVyLmpzIiwic3JjL2ZpbHRlcnMvcGl4ZWxhdGUvUGl4ZWxhdGVGaWx0ZXIuanMiLCJzcmMvZmlsdGVycy9yZ2IvUkdCU3BsaXRGaWx0ZXIuanMiLCJzcmMvZmlsdGVycy9zZXBpYS9TZXBpYUZpbHRlci5qcyIsInNyYy9maWx0ZXJzL3Nob2Nrd2F2ZS9TaG9ja3dhdmVGaWx0ZXIuanMiLCJzcmMvZmlsdGVycy90aWx0c2hpZnQvVGlsdFNoaWZ0QXhpc0ZpbHRlci5qcyIsInNyYy9maWx0ZXJzL3RpbHRzaGlmdC9UaWx0U2hpZnRGaWx0ZXIuanMiLCJzcmMvZmlsdGVycy90aWx0c2hpZnQvVGlsdFNoaWZ0WEZpbHRlci5qcyIsInNyYy9maWx0ZXJzL3RpbHRzaGlmdC9UaWx0U2hpZnRZRmlsdGVyLmpzIiwic3JjL2ZpbHRlcnMvdHdpc3QvVHdpc3RGaWx0ZXIuanMiLCJzcmMvc3JjL2luZGV4LmpzIiwic3JjL2ludGVyYWN0aW9uL0ludGVyYWN0aW9uRGF0YS5qcyIsInNyYy9pbnRlcmFjdGlvbi9JbnRlcmFjdGlvbk1hbmFnZXIuanMiLCJzcmMvaW50ZXJhY3Rpb24vaW5kZXguanMiLCJzcmMvaW50ZXJhY3Rpb24vaW50ZXJhY3RpdmVUYXJnZXQuanMiLCJzcmMvbG9hZGVycy9iaXRtYXBGb250UGFyc2VyLmpzIiwic3JjL2xvYWRlcnMvaW5kZXguanMiLCJzcmMvbG9hZGVycy9sb2FkZXIuanMiLCJzcmMvbG9hZGVycy9zcHJpdGVzaGVldFBhcnNlci5qcyIsInNyYy9sb2FkZXJzL3RleHR1cmVQYXJzZXIuanMiLCJzcmMvbWVzaC9NZXNoLmpzIiwic3JjL21lc2gvUGxhbmUuanMiLCJzcmMvbWVzaC9Sb3BlLmpzIiwic3JjL21lc2gvaW5kZXguanMiLCJzcmMvbWVzaC93ZWJnbC9NZXNoUmVuZGVyZXIuanMiLCJzcmMvbWVzaC93ZWJnbC9NZXNoU2hhZGVyLmpzIiwic3JjL3BvbHlmaWxsL01hdGguc2lnbi5qcyIsInNyYy9wb2x5ZmlsbC9PYmplY3QuYXNzaWduLmpzIiwic3JjL3BvbHlmaWxsL2luZGV4LmpzIiwic3JjL3BvbHlmaWxsL3JlcXVlc3RBbmltYXRpb25GcmFtZS5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQ0FBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDMUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN4Q0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN2TUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2pIQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM5QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdERBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3pEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDMUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbENBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM3QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3RJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDaENBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQzlDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7QUM1dUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7OztBQ2hPQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUMzRkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7O0FDcmhCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNwRkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNyRkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNKQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbnNCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0a0JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdFFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUN2Q0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7OztBQ25tQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDeGNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNoeUJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDaEVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ1pBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNwQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMxREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ25aQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDN05BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3JvQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdm1CQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0b0NBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDM0ZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzlUQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDcEhBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNsREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNyRkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDckVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMxTkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM3REE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDckVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzlIQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM3RkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdGJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNwRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3BCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdEZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzdGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDckdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM1RkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDMUZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM3VEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzFOQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMxZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM1RUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuUUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzFRQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbEdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDaFdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzVEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzFQQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMxSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzNZQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDOUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNyREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQy9GQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMxQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbGNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNqSEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDeEtBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM3V0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdkNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzVEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzdEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzlnQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM3R0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMvRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3hEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN6SkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNqU0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMvQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ25DQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3RCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDem1CQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdldBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDN0RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDM21CQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuYkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDN2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDeGFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDL0VBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDM09BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNqV0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdERBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDL0JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuUkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3BFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzdWQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbFlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzlUQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNsY0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDOVFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNUJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNUJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbkJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdkRBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ25HQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzVHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzNGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNwRkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM1QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdGhCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDL0NBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN6RkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDeEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbEZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdEVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN6RkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQy9MQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDL0NBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDckNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2hEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDckRBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDakRBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3BGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNoREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3RGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMzSEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3BDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNwQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUNuRkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7OztBQzVCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDL0NBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDMTJCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNmQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDL0NBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN2SEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNURBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbEZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNwQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDMWRBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNUhBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbk5BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNqQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ25PQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDM0RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDUkE7QUFDQTtBQUNBO0FBQ0E7OztBQ0hBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6ImdlbmVyYXRlZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzQ29udGVudCI6WyIoZnVuY3Rpb24gZSh0LG4scil7ZnVuY3Rpb24gcyhvLHUpe2lmKCFuW29dKXtpZighdFtvXSl7dmFyIGE9dHlwZW9mIHJlcXVpcmU9PVwiZnVuY3Rpb25cIiYmcmVxdWlyZTtpZighdSYmYSlyZXR1cm4gYShvLCEwKTtpZihpKXJldHVybiBpKG8sITApO3ZhciBmPW5ldyBFcnJvcihcIkNhbm5vdCBmaW5kIG1vZHVsZSAnXCIrbytcIidcIik7dGhyb3cgZi5jb2RlPVwiTU9EVUxFX05PVF9GT1VORFwiLGZ9dmFyIGw9bltvXT17ZXhwb3J0czp7fX07dFtvXVswXS5jYWxsKGwuZXhwb3J0cyxmdW5jdGlvbihlKXt2YXIgbj10W29dWzFdW2VdO3JldHVybiBzKG4/bjplKX0sbCxsLmV4cG9ydHMsZSx0LG4scil9cmV0dXJuIG5bb10uZXhwb3J0c312YXIgaT10eXBlb2YgcmVxdWlyZT09XCJmdW5jdGlvblwiJiZyZXF1aXJlO2Zvcih2YXIgbz0wO288ci5sZW5ndGg7bysrKXMocltvXSk7cmV0dXJuIHN9KSIsIlxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcblxuICAgIGNyZWF0ZUNvbnRleHQ6IFx0XHRcdHJlcXVpcmUoJy4vbGliL2NyZWF0ZUNvbnRleHQnKSxcbiAgICBzZXRWZXJ0ZXhBdHRyaWJBcnJheXM6IFx0cmVxdWlyZSgnLi9saWIvc2V0VmVydGV4QXR0cmliQXJyYXlzJyksXG4gICAgXG4gICAgR0xCdWZmZXI6IFx0XHRcdFx0cmVxdWlyZSgnLi9saWIvR0xCdWZmZXInKSxcbiAgICBHTEZyYW1lYnVmZmVyOiBcdFx0XHRyZXF1aXJlKCcuL2xpYi9HTEZyYW1lYnVmZmVyJyksXG4gICAgR0xTaGFkZXI6IFx0XHRcdFx0cmVxdWlyZSgnLi9saWIvR0xTaGFkZXInKSxcbiAgICBHTFRleHR1cmU6IFx0XHRcdFx0cmVxdWlyZSgnLi9saWIvR0xUZXh0dXJlJyksXG4gICAgXG4gICAgVmVydGV4QXJyYXlPYmplY3Q6IFx0XHRyZXF1aXJlKCcuL2xpYi9WZXJ0ZXhBcnJheU9iamVjdCcpXG5cbn07IiwiXG4vKipcbiAqIEhlbHBlciBjbGFzcyB0byBjcmVhdGUgYSB3ZWJHTCBidWZmZXJcbiAqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gZ2wge1dlYkdMUmVuZGVyaW5nQ29udGV4dH1cbiAqL1xuXG52YXIgRU1QVFlfQVJSQVlfQlVGRkVSID0gbmV3IEFycmF5QnVmZmVyKDApO1xuXG52YXIgQnVmZmVyID0gZnVuY3Rpb24oZ2wsIHR5cGUsIGRhdGEsIGRyYXdUeXBlKVxue1xuXHR0aGlzLmdsID0gZ2w7XG5cblx0dGhpcy5idWZmZXIgPSBnbC5jcmVhdGVCdWZmZXIoKTtcblx0dGhpcy50eXBlID0gdHlwZSB8fCBnbC5BUlJBWV9CVUZGRVI7XG5cdHRoaXMuZHJhd1R5cGUgPSBkcmF3VHlwZSB8fCBnbC5TVEFUSUNfRFJBVztcblx0dGhpcy5kYXRhID0gRU1QVFlfQVJSQVlfQlVGRkVSO1xuXG5cdGlmKGRhdGEpXG5cdHtcblx0XHR0aGlzLnVwbG9hZChkYXRhKTtcblx0fVxufVxuXG5CdWZmZXIucHJvdG90eXBlLnVwbG9hZCA9IGZ1bmN0aW9uKGRhdGEsIG9mZnNldCwgZG9udEJpbmQpXG57XG5cdC8vIHRvZG8gLSBuZWVkZWQ/XG5cdC8vaWYoIWRvbnRCaW5kKVxuXHR0aGlzLmJpbmQoKTtcblxuXHR2YXIgZ2wgPSB0aGlzLmdsO1xuXHRcblx0ZGF0YSA9IGRhdGEgfHwgdGhpcy5kYXRhO1xuXHRvZmZzZXQgPSBvZmZzZXQgfHwgMDtcblxuXHRpZih0aGlzLmRhdGEuYnl0ZUxlbmd0aCA+PSBkYXRhLmJ5dGVMZW5ndGgpXG5cdHtcdFxuXHRcdGdsLmJ1ZmZlclN1YkRhdGEodGhpcy50eXBlLCBvZmZzZXQsIGRhdGEpO1xuXHR9XG5cdGVsc2Vcblx0e1xuXHRcdGdsLmJ1ZmZlckRhdGEodGhpcy50eXBlLCBkYXRhLCB0aGlzLmRyYXdUeXBlKTtcblx0fVxuXG5cdHRoaXMuZGF0YSA9IGRhdGE7XG59XG5cbkJ1ZmZlci5wcm90b3R5cGUuYmluZCA9IGZ1bmN0aW9uKClcbntcblx0dmFyIGdsID0gdGhpcy5nbDtcblx0Z2wuYmluZEJ1ZmZlcih0aGlzLnR5cGUsIHRoaXMuYnVmZmVyKTtcbn1cblxuQnVmZmVyLmNyZWF0ZVZlcnRleEJ1ZmZlciA9IGZ1bmN0aW9uKGdsLCBkYXRhLCBkcmF3VHlwZSlcbntcblx0cmV0dXJuIG5ldyBCdWZmZXIoZ2wsIGdsLkFSUkFZX0JVRkZFUiwgZGF0YSwgZHJhd1R5cGUpO1xufVxuXG5CdWZmZXIuY3JlYXRlSW5kZXhCdWZmZXIgPSBmdW5jdGlvbihnbCwgZGF0YSwgZHJhd1R5cGUpXG57XG5cdHJldHVybiBuZXcgQnVmZmVyKGdsLCBnbC5FTEVNRU5UX0FSUkFZX0JVRkZFUiwgZGF0YSwgZHJhd1R5cGUpO1xufVxuXG5CdWZmZXIuY3JlYXRlID0gZnVuY3Rpb24oZ2wsIHR5cGUsIGRhdGEsIGRyYXdUeXBlKVxue1xuXHRyZXR1cm4gbmV3IEJ1ZmZlcihnbCwgdHlwZSwgZHJhd1R5cGUpO1xufVxuXG4vL1RPRE8gRGVzdHJveS4uXG5cbm1vZHVsZS5leHBvcnRzID0gQnVmZmVyO1xuXG4iLCJcbnZhciBUZXh0dXJlID0gcmVxdWlyZSgnLi9HTFRleHR1cmUnKTtcblxuLyoqXG4gKiBIZWxwZXIgY2xhc3MgdG8gY3JlYXRlIGEgd2ViR0wgRnJhbWVidWZmZXJcbiAqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gZ2wge1dlYkdMUmVuZGVyaW5nQ29udGV4dH1cbiAqL1xuXG52YXIgRnJhbWVidWZmZXIgPSBmdW5jdGlvbihnbCwgd2lkdGgsIGhlaWdodClcbntcblx0dGhpcy5nbCA9IGdsO1xuXG5cdHRoaXMuZnJhbWVidWZmZXIgPSBnbC5jcmVhdGVGcmFtZWJ1ZmZlcigpO1xuXHRcblx0dGhpcy5zdGVuY2lsID0gbnVsbDtcblx0dGhpcy50ZXh0dXJlID0gbnVsbDtcblxuXHR0aGlzLndpZHRoID0gd2lkdGggfHwgMTAwO1xuXHR0aGlzLmhlaWdodCA9IGhlaWdodCB8fCAxMDA7XG59XG5cbkZyYW1lYnVmZmVyLnByb3RvdHlwZS5lbmFibGVUZXh0dXJlID0gZnVuY3Rpb24odGV4dHVyZSlcbntcblx0dmFyIGdsID0gdGhpcy5nbDtcblxuXHR0aGlzLnRleHR1cmUgPSB0ZXh0dXJlIHx8IG5ldyBUZXh0dXJlKGdsKTtcblxuXHR0aGlzLnRleHR1cmUuYmluZCgpO1xuXG5cdC8vZ2wudGV4SW1hZ2UyRChnbC5URVhUVVJFXzJELCAwLCBnbC5SR0JBLCAgdGhpcy53aWR0aCwgdGhpcy5oZWlnaHQsIDAsIGdsLlJHQkEsIGdsLlVOU0lHTkVEX0JZVEUsIG51bGwpO1xuXG5cdHRoaXMuYmluZCgpO1xuXG5cdGdsLmZyYW1lYnVmZmVyVGV4dHVyZTJEKGdsLkZSQU1FQlVGRkVSLCBnbC5DT0xPUl9BVFRBQ0hNRU5UMCwgZ2wuVEVYVFVSRV8yRCwgdGhpcy50ZXh0dXJlLnRleHR1cmUsIDApO1xufVxuXG5GcmFtZWJ1ZmZlci5wcm90b3R5cGUuZW5hYmxlU3RlbmNpbCA9IGZ1bmN0aW9uKClcbntcblx0aWYodGhpcy5zdGVuY2lsKXJldHVybjtcblxuXHR2YXIgZ2wgPSB0aGlzLmdsO1xuXG5cdHRoaXMuc3RlbmNpbCA9IGdsLmNyZWF0ZVJlbmRlcmJ1ZmZlcigpO1xuICAgIFxuICAgIGdsLmJpbmRSZW5kZXJidWZmZXIoZ2wuUkVOREVSQlVGRkVSLCB0aGlzLnN0ZW5jaWwpO1xuICAgIFxuICAgIC8vIFRPRE8uLiB0aGlzIGlzIGRlcHRoIEFORCBzdGVuY2lsP1xuICAgIGdsLmZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyKGdsLkZSQU1FQlVGRkVSLCBnbC5ERVBUSF9TVEVOQ0lMX0FUVEFDSE1FTlQsIGdsLlJFTkRFUkJVRkZFUiwgdGhpcy5zdGVuY2lsKTtcbiAgICBnbC5yZW5kZXJidWZmZXJTdG9yYWdlKGdsLlJFTkRFUkJVRkZFUiwgZ2wuREVQVEhfU1RFTkNJTCwgIHRoaXMud2lkdGggICwgdGhpcy5oZWlnaHQgKTtcbn1cblxuRnJhbWVidWZmZXIucHJvdG90eXBlLmNsZWFyID0gZnVuY3Rpb24oIHIsIGcsIGIsIGEgKVxue1xuXHR0aGlzLmJpbmQoKTtcblxuXHR2YXIgZ2wgPSB0aGlzLmdsO1xuICAgIFxuICAgIGdsLmNsZWFyQ29sb3IociwgZywgYiwgYSk7XG4gICAgZ2wuY2xlYXIoZ2wuQ09MT1JfQlVGRkVSX0JJVCk7XG59XG5cbkZyYW1lYnVmZmVyLnByb3RvdHlwZS5iaW5kID0gZnVuY3Rpb24oKVxue1xuXHR2YXIgZ2wgPSB0aGlzLmdsO1xuXHRnbC5iaW5kRnJhbWVidWZmZXIoZ2wuRlJBTUVCVUZGRVIsIHRoaXMuZnJhbWVidWZmZXIgKTtcdFxufVxuXG5GcmFtZWJ1ZmZlci5wcm90b3R5cGUudW5iaW5kID0gZnVuY3Rpb24oKVxue1xuXHRnbC5iaW5kRnJhbWVidWZmZXIoZ2wuRlJBTUVCVUZGRVIsIG51bGwgKTtcdFxufVxuXG5GcmFtZWJ1ZmZlci5wcm90b3R5cGUucmVzaXplID0gZnVuY3Rpb24od2lkdGgsIGhlaWdodClcbntcblx0dmFyIGdsID0gdGhpcy5nbDtcblxuXHR0aGlzLndpZHRoID0gd2lkdGg7XG5cdHRoaXMuaGVpZ2h0ID0gaGVpZ2h0O1xuXG5cdGlmICggdGhpcy50ZXh0dXJlIClcbiAgICB7XG4gICAgXHR0aGlzLnRleHR1cmUudXBsb2FkRGF0YShudWxsLCB3aWR0aCwgaGVpZ2h0KTtcblx0fVxuXG5cdGlmICggdGhpcy5zdGVuY2lsIClcbiAgICB7XG4gICAgICAgIC8vIHVwZGF0ZSB0aGUgc3RlbmNpbCBidWZmZXIgd2lkdGggYW5kIGhlaWdodFxuICAgICAgICBnbC5iaW5kUmVuZGVyYnVmZmVyKGdsLlJFTkRFUkJVRkZFUiwgdGhpcy5zdGVuY2lsKTtcbiAgICAgICAgZ2wucmVuZGVyYnVmZmVyU3RvcmFnZShnbC5SRU5ERVJCVUZGRVIsIGdsLkRFUFRIX1NURU5DSUwsIHdpZHRoLCBoZWlnaHQpO1xuICAgIH1cbn1cblxuRnJhbWVidWZmZXIucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbigpXG57XG5cdHZhciBnbCA9IHRoaXMuZ2w7XG5cdC8vVE9ET1xuXHRnbC5kZWxldGVGcmFtZWJ1ZmZlcih0aGlzLmZyYW1lYnVmZmVyKTtcbn1cblxuRnJhbWVidWZmZXIuY3JlYXRlUkdCQSA9IGZ1bmN0aW9uKGdsLCB3aWR0aCwgaGVpZ2h0LCBkYXRhKVxue1xuXHR2YXIgdGV4dHVyZSA9IFRleHR1cmUuZnJvbURhdGEoZ2wsIG51bGwsIHdpZHRoLCBoZWlnaHQpO1xuXHR0ZXh0dXJlLmVuYWJsZU5lYXJlc3RTY2FsaW5nKCk7XG4gICAgdGV4dHVyZS5lbmFibGVXcmFwQ2xhbXAoKTtcblxuICAgIC8vbm93IGNyZWF0ZSB0aGUgZnJhbWVidWZmZXIgb2JqZWN0IGFuZCBhdHRhY2ggdGhlIHRleHR1cmUgdG8gaXQuXG4gICAgdmFyIGZibyA9IG5ldyBGcmFtZWJ1ZmZlcihnbCwgd2lkdGgsIGhlaWdodCk7XG4gICAgZmJvLmVuYWJsZVRleHR1cmUodGV4dHVyZSk7XG5cbiAgICByZXR1cm4gZmJvO1xufVxuXG5GcmFtZWJ1ZmZlci5jcmVhdGVGbG9hdDMyID0gZnVuY3Rpb24oZ2wsIHdpZHRoLCBoZWlnaHQsIGRhdGEpXG57XG5cdC8vIGNyZWF0ZSBhIG5ldyB0ZXh0dXJlLi5cbiAgICB2YXIgdGV4dHVyZSA9IG5ldyBUZXh0dXJlLmZyb21EYXRhKGdsLCBkYXRhLCB3aWR0aCwgaGVpZ2h0KTtcbiAgICB0ZXh0dXJlLmVuYWJsZU5lYXJlc3RTY2FsaW5nKCk7XG4gICAgdGV4dHVyZS5lbmFibGVXcmFwQ2xhbXAoKTtcblxuICAgIC8vbm93IGNyZWF0ZSB0aGUgZnJhbWVidWZmZXIgb2JqZWN0IGFuZCBhdHRhY2ggdGhlIHRleHR1cmUgdG8gaXQuXG4gICAgdmFyIGZibyA9IG5ldyBGcmFtZWJ1ZmZlcihnbCwgd2lkdGgsIGhlaWdodCk7XG4gICAgZmJvLmVuYWJsZVRleHR1cmUodGV4dHVyZSlcblxuICAgIHJldHVybiBmYm87XG59XG5cbm1vZHVsZS5leHBvcnRzID0gRnJhbWVidWZmZXI7XG5cbiIsIlxudmFyIGNvbXBpbGVQcm9ncmFtID0gcmVxdWlyZSgnLi9zaGFkZXIvY29tcGlsZVByb2dyYW0nKSxcblx0ZXh0cmFjdEF0dHJpYnV0ZXMgPSByZXF1aXJlKCcuL3NoYWRlci9leHRyYWN0QXR0cmlidXRlcycpLFxuXHRleHRyYWN0VW5pZm9ybXMgPSByZXF1aXJlKCcuL3NoYWRlci9leHRyYWN0VW5pZm9ybXMnKSxcblx0Z2VuZXJhdGVVbmlmb3JtQWNjZXNzT2JqZWN0ID0gcmVxdWlyZSgnLi9zaGFkZXIvZ2VuZXJhdGVVbmlmb3JtQWNjZXNzT2JqZWN0Jyk7XG5cbi8qKlxuICogSGVscGVyIGNsYXNzIHRvIGNyZWF0ZSBhIHdlYkdMIFNoYWRlclxuICpcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqIEBwYXJhbSBnbCB7V2ViR0xSZW5kZXJpbmdDb250ZXh0fVxuICovXG52YXIgU2hhZGVyID0gZnVuY3Rpb24oZ2wsIHZlcnRleFNyYywgZnJhZ21lbnRTcmMpXG57XG5cdHRoaXMuZ2wgPSBnbDtcblxuXHQvLyBGaXJzdCBjb21waWxlIHRoZSBwcm9ncmFtLi5cblx0dGhpcy5wcm9ncmFtID0gY29tcGlsZVByb2dyYW0oZ2wsIHZlcnRleFNyYywgZnJhZ21lbnRTcmMpO1xuXG5cdC8vIG5leHQgZXh0cmFjdCB0aGUgYXR0cmlidXRlc1xuXHR0aGlzLmF0dHJpYnV0ZXMgPSBleHRyYWN0QXR0cmlidXRlcyhnbCwgdGhpcy5wcm9ncmFtKTsgXG5cbiAgICB2YXIgdW5pZm9ybURhdGEgPSBleHRyYWN0VW5pZm9ybXMoZ2wsIHRoaXMucHJvZ3JhbSk7XG5cbiAgICB0aGlzLnVuaWZvcm1zID0gZ2VuZXJhdGVVbmlmb3JtQWNjZXNzT2JqZWN0KCBnbCwgdW5pZm9ybURhdGEgKTtcbn1cblxuU2hhZGVyLnByb3RvdHlwZS5iaW5kID0gZnVuY3Rpb24oKVxue1xuXHR0aGlzLmdsLnVzZVByb2dyYW0odGhpcy5wcm9ncmFtKTtcbn1cblxuU2hhZGVyLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24oKVxue1xuXHR2YXIgZ2wgPSB0aGlzLmdsO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IFNoYWRlcjtcblxuIiwiXG4vKipcbiAqIEhlbHBlciBjbGFzcyB0byBjcmVhdGUgYSB3ZWJHTCBUZXh0dXJlXG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIGdsIHtXZWJHTFJlbmRlcmluZ0NvbnRleHR9IGEgV2ViR0wgY29udGV4dFxuICogQHBhcmFtIHdpZHRoIHtudW1iZXJ9IHRoZSB3aWR0aCBvZiB0aGUgdGV4dHVyZSBcbiAqIEBwYXJhbSBoZWlnaHQge251bWJlcn0gdGhlIGhlaWdodCBvZiB0aGUgdGV4dHVyZSBcbiAqIEBwYXJhbSBmb3JtYXQge251bWJlcn0gdGhlIHBpeGVsIGZvcm1hdCBvZiB0aGUgdGV4dHVyZS4gZGVmYXVsdHMgdG8gZ2wuUkdCQVxuICogQHBhcmFtIHR5cGUge251bWJlcn0gdGhlIGdsIHR5cGUgb2YgdGhlIHRleHR1cmUuIGRlZmF1bHRzIHRvIGdsLlVOU0lHTkVEX0JZVEVcbiAqL1xudmFyIFRleHR1cmUgPSBmdW5jdGlvbihnbCwgd2lkdGgsIGhlaWdodCwgZm9ybWF0LCB0eXBlKVxue1xuXHR0aGlzLmdsID0gZ2w7XG5cblx0dGhpcy50ZXh0dXJlID0gZ2wuY3JlYXRlVGV4dHVyZSgpO1xuXG5cdC8vIHNvbWUgc2V0dGluZ3MuLlxuXHR0aGlzLm1pcG1hcCA9IGZhbHNlO1xuXG5cdHRoaXMucHJlbXVsdGlwbHlBbHBoYSA9IGZhbHNlO1xuXG5cdHRoaXMud2lkdGggPSB3aWR0aCB8fCAwO1xuXHR0aGlzLmhlaWdodCA9IGhlaWdodCB8fCAwO1xuXG5cdHRoaXMuZm9ybWF0ID0gZm9ybWF0IHx8IGdsLlJHQkE7XG5cdHRoaXMudHlwZSA9IHR5cGUgfHwgZ2wuVU5TSUdORURfQllURTtcblxuXG59XG5cbi8qKlxuICogQHBhcmFtIHtQSVhJLmdsQ29yZS5UZXh0dXJlfSBbdmFybmFtZV0gW2Rlc2NyaXB0aW9uXVxuICovXG5UZXh0dXJlLnByb3RvdHlwZS51cGxvYWQgPSBmdW5jdGlvbihzb3VyY2UpXG57XG5cdHRoaXMuYmluZCgpO1xuXG5cdHZhciBnbCA9IHRoaXMuZ2w7XG5cblx0dGhpcy53aWR0aCA9IHNvdXJjZS53aWR0aDtcblx0dGhpcy5oZWlnaHQgPSBzb3VyY2UuaGVpZ2h0O1xuXG5cdGdsLnBpeGVsU3RvcmVpKGdsLlVOUEFDS19QUkVNVUxUSVBMWV9BTFBIQV9XRUJHTCwgdGhpcy5wcmVtdWx0aXBseUFscGhhKTtcbiAgICBnbC50ZXhJbWFnZTJEKGdsLlRFWFRVUkVfMkQsIDAsIHRoaXMuZm9ybWF0LCB0aGlzLmZvcm1hdCwgdGhpcy50eXBlLCBzb3VyY2UpO1xufVxuXG52YXIgRkxPQVRJTkdfUE9JTlRfQVZBSUxBQkxFID0gZmFsc2U7XG5cblRleHR1cmUucHJvdG90eXBlLnVwbG9hZERhdGEgPSBmdW5jdGlvbihkYXRhLCB3aWR0aCwgaGVpZ2h0KVxue1xuXHR0aGlzLmJpbmQoKTtcblx0XG5cdHRoaXMud2lkdGggPSB3aWR0aCB8fCB0aGlzLndpZHRoO1xuXHR0aGlzLmhlaWdodCA9IGhlaWdodCB8fCB0aGlzLmhlaWdodDtcblxuXHRpZihkYXRhIGluc3RhbmNlb2YgRmxvYXQzMkFycmF5KVxuXHR7XG5cdFx0aWYoIUZMT0FUSU5HX1BPSU5UX0FWQUlMQUJMRSlcblx0XHR7XG5cdFx0XHR2YXIgZXh0ID0gZ2wuZ2V0RXh0ZW5zaW9uKFwiT0VTX3RleHR1cmVfZmxvYXRcIik7XG5cdFx0XHRcblx0XHRcdGlmKGV4dClcblx0XHRcdHtcblx0XHRcdFx0RkxPQVRJTkdfUE9JTlRfQVZBSUxBQkxFID0gdHJ1ZTtcblx0XHRcdH1cblx0XHRcdGVsc2Vcblx0XHRcdHtcblx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKCdmbG9hdGluZyBwb2ludCB0ZXh0dXJlcyBub3QgYXZhaWxhYmxlJyk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0dGhpcy50eXBlID0gZ2wuRkxPQVQ7XG5cdH1cblx0ZWxzZVxuXHR7XG5cdFx0Ly8gVE9ETyBzdXBwb3J0IGZvciBvdGhlciB0eXBlc1xuXHRcdHRoaXMudHlwZSA9IGdsLlVOU0lHTkVEX0JZVEU7XG5cdH1cblxuXHQvLyB3aGF0IHR5cGUgb2YgZGF0YT9cblx0Z2wucGl4ZWxTdG9yZWkoZ2wuVU5QQUNLX1BSRU1VTFRJUExZX0FMUEhBX1dFQkdMLCB0aGlzLnByZW11bHRpcGx5QWxwaGEpO1xuXHRnbC50ZXhJbWFnZTJEKGdsLlRFWFRVUkVfMkQsIDAsIHRoaXMuZm9ybWF0LCAgdGhpcy53aWR0aCwgdGhpcy5oZWlnaHQsIDAsIHRoaXMuZm9ybWF0LCB0aGlzLnR5cGUsIGRhdGEgfHwgbnVsbCk7XG5cbn1cblxuVGV4dHVyZS5wcm90b3R5cGUuYmluZCA9IGZ1bmN0aW9uKGxvY2F0aW9uKVxue1xuXHR2YXIgZ2wgPSB0aGlzLmdsO1xuXG5cdGlmKGxvY2F0aW9uICE9PSB1bmRlZmluZWQpXG5cdHtcblx0XHRnbC5hY3RpdmVUZXh0dXJlKGdsLlRFWFRVUkUwICsgbG9jYXRpb24pO1xuXHR9XG5cblx0Z2wuYmluZFRleHR1cmUoZ2wuVEVYVFVSRV8yRCwgdGhpcy50ZXh0dXJlKTtcbn1cblxuVGV4dHVyZS5wcm90b3R5cGUudW5iaW5kID0gZnVuY3Rpb24oKVxue1xuXHR2YXIgZ2wgPSB0aGlzLmdsO1xuXHRnbC5iaW5kVGV4dHVyZShnbC5URVhUVVJFXzJELCBudWxsKTtcbn1cblxuVGV4dHVyZS5wcm90b3R5cGUubWluRmlsdGVyID0gZnVuY3Rpb24oIGxpbmVhciApXG57XG5cdHZhciBnbCA9IHRoaXMuZ2w7XG5cblx0dGhpcy5iaW5kKCk7XG5cblx0aWYodGhpcy5taXBtYXApXG5cdHtcblx0XHRnbC50ZXhQYXJhbWV0ZXJpKGdsLlRFWFRVUkVfMkQsIGdsLlRFWFRVUkVfTUlOX0ZJTFRFUiwgbGluZWFyID8gZ2wuTElORUFSX01JUE1BUF9MSU5FQVIgOiBnbC5ORUFSRVNUX01JUE1BUF9ORUFSRVNUKTtcblx0fVxuXHRlbHNlXG5cdHtcblx0XHRnbC50ZXhQYXJhbWV0ZXJpKGdsLlRFWFRVUkVfMkQsIGdsLlRFWFRVUkVfTUlOX0ZJTFRFUiwgbGluZWFyID8gZ2wuTElORUFSIDogZ2wuTkVBUkVTVCk7XG5cdH1cdFxufVxuXG5UZXh0dXJlLnByb3RvdHlwZS5tYWdGaWx0ZXIgPSBmdW5jdGlvbiggbGluZWFyIClcbntcblx0dmFyIGdsID0gdGhpcy5nbDtcblxuXHR0aGlzLmJpbmQoKTtcblxuXHRnbC50ZXhQYXJhbWV0ZXJpKGdsLlRFWFRVUkVfMkQsIGdsLlRFWFRVUkVfTUFHX0ZJTFRFUiwgbGluZWFyID8gZ2wuTElORUFSIDogZ2wuTkVBUkVTVCk7XG59XG5cblRleHR1cmUucHJvdG90eXBlLmVuYWJsZU1pcG1hcCA9IGZ1bmN0aW9uKClcbntcblx0dGhpcy5iaW5kKCk7XG5cblx0dGhpcy5taXBtYXAgPSB0cnVlO1xuXHRnbC5nZW5lcmF0ZU1pcG1hcChnbC5URVhUVVJFXzJEKTtcbn1cblxuVGV4dHVyZS5wcm90b3R5cGUuZW5hYmxlTGluZWFyU2NhbGluZyA9IGZ1bmN0aW9uKClcbntcblx0dGhpcy5taW5GaWx0ZXIodHJ1ZSk7XG5cdHRoaXMubWFnRmlsdGVyKHRydWUpO1xufVxuXG5UZXh0dXJlLnByb3RvdHlwZS5lbmFibGVOZWFyZXN0U2NhbGluZyA9IGZ1bmN0aW9uKClcbntcblx0dGhpcy5taW5GaWx0ZXIoZmFsc2UpO1xuXHR0aGlzLm1hZ0ZpbHRlcihmYWxzZSk7XG59XG5cblRleHR1cmUucHJvdG90eXBlLmVuYWJsZVdyYXBDbGFtcCA9IGZ1bmN0aW9uKClcbntcblx0dmFyIGdsID0gdGhpcy5nbDtcblxuXHR0aGlzLmJpbmQoKTtcblxuXHRnbC50ZXhQYXJhbWV0ZXJpKGdsLlRFWFRVUkVfMkQsIGdsLlRFWFRVUkVfV1JBUF9TLCBnbC5DTEFNUF9UT19FREdFKTtcbiAgICBnbC50ZXhQYXJhbWV0ZXJpKGdsLlRFWFRVUkVfMkQsIGdsLlRFWFRVUkVfV1JBUF9ULCBnbC5DTEFNUF9UT19FREdFKTtcbn1cblxuVGV4dHVyZS5wcm90b3R5cGUuZW5hYmxlV3JhcFJlcGVhdCA9IGZ1bmN0aW9uKClcbntcblx0dmFyIGdsID0gdGhpcy5nbDtcblxuXHR0aGlzLmJpbmQoKTtcblx0XG5cdGdsLnRleFBhcmFtZXRlcmkoZ2wuVEVYVFVSRV8yRCwgZ2wuVEVYVFVSRV9XUkFQX1MsIGdsLlJFUEVBVCk7XG4gICAgZ2wudGV4UGFyYW1ldGVyaShnbC5URVhUVVJFXzJELCBnbC5URVhUVVJFX1dSQVBfVCwgZ2wuUkVQRUFUKTtcbn1cblxuVGV4dHVyZS5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uKClcbntcblx0dmFyIGdsID0gdGhpcy5nbDtcblx0Ly9UT0RPXG5cdGdsLmRlbGV0ZVRleHR1cmUodGhpcy50ZXh0dXJlKTtcbn1cblxuLy9UZXh0dXJlLlxuVGV4dHVyZS5mcm9tU291cmNlID0gZnVuY3Rpb24oZ2wsIHNvdXJjZSwgcHJlbXVsdGlwbHlBbHBoYSlcbntcblx0dmFyIHRleHR1cmUgPSBuZXcgVGV4dHVyZShnbCk7XG5cdHRleHR1cmUucHJlbXVsdGlwbHlBbHBoYSA9IHByZW11bHRpcGx5QWxwaGEgfHwgZmFsc2U7XG5cdHRleHR1cmUudXBsb2FkKHNvdXJjZSk7XG5cblx0cmV0dXJuIHRleHR1cmU7XG59XG5cblRleHR1cmUuZnJvbURhdGEgPSBmdW5jdGlvbihnbCwgZGF0YSwgd2lkdGgsIGhlaWdodClcbntcblx0Ly9jb25zb2xlLmxvZyhkYXRhLCB3aWR0aCwgaGVpZ2h0KTtcblx0dmFyIHRleHR1cmUgPSBuZXcgVGV4dHVyZShnbCk7XG5cdHRleHR1cmUudXBsb2FkRGF0YShkYXRhLCB3aWR0aCwgaGVpZ2h0KTtcblxuXHRyZXR1cm4gdGV4dHVyZTtcbn1cblxuXG5tb2R1bGUuZXhwb3J0cyA9IFRleHR1cmU7XG5cbiIsIlxuLyoqXG4gKiBHZW5lcmljIE1hc2sgU3RhY2sgZGF0YSBzdHJ1Y3R1cmVcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqL1xuXG4vLyBzdGF0ZSBvYmplY3QvL1xuXG5cbmZ1bmN0aW9uIFZlcnRleEFycmF5T2JqZWN0KGdsKVxue1xuXHRcblx0dGhpcy5uYXRpdmVWYW9FeHRlbnNpb24gPSAoXG4gICAgICBnbC5nZXRFeHRlbnNpb24oJ09FU192ZXJ0ZXhfYXJyYXlfb2JqZWN0JykgfHxcbiAgICAgIGdsLmdldEV4dGVuc2lvbignTU9aX09FU192ZXJ0ZXhfYXJyYXlfb2JqZWN0JykgfHxcbiAgICAgIGdsLmdldEV4dGVuc2lvbignV0VCS0lUX09FU192ZXJ0ZXhfYXJyYXlfb2JqZWN0JylcbiAgICApO1xuXG4vL1x0dGhpcy5uYXRpdmVWYW9FeHRlbnNpb24gPSBudWxsO1xuXG5cdGlmKHRoaXMubmF0aXZlVmFvRXh0ZW5zaW9uKVxuXHR7XG5cdFx0dGhpcy5uYXRpdmVWYW8gPSB0aGlzLm5hdGl2ZVZhb0V4dGVuc2lvbi5jcmVhdGVWZXJ0ZXhBcnJheU9FUygpOyAgXG5cdH1cblxuXHR0aGlzLmdsID0gZ2w7XG5cblx0dGhpcy5hdHRyaWJ1dGVzID0gW107XG5cblx0dGhpcy5pbmRleEJ1ZmZlciA9IG51bGw7XG5cblx0dGhpcy5kaXJ0eSA9IGZhbHNlO1xuXG5cdFxufVxuXG5WZXJ0ZXhBcnJheU9iamVjdC5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBWZXJ0ZXhBcnJheU9iamVjdDtcbm1vZHVsZS5leHBvcnRzID0gVmVydGV4QXJyYXlPYmplY3Q7XG5cblZlcnRleEFycmF5T2JqZWN0LnByb3RvdHlwZS5iaW5kID0gZnVuY3Rpb24oKVxue1xuXHRpZih0aGlzLm5hdGl2ZVZhbylcblx0e1xuXHRcdHRoaXMubmF0aXZlVmFvRXh0ZW5zaW9uLmJpbmRWZXJ0ZXhBcnJheU9FUyh0aGlzLm5hdGl2ZVZhbyk7ICBcblxuXHRcdGlmKHRoaXMuZGlydHkpXG5cdFx0e1xuXHRcdFx0dGhpcy5kaXJ0eSA9IGZhbHNlO1xuXHRcdFx0dGhpcy5hY3RpdmF0ZSgpO1xuXHRcdH1cblx0fVxuXHRlbHNlXG5cdHtcblx0XHR0aGlzLmFjdGl2YXRlKCk7XG5cdH1cbn1cblxuVmVydGV4QXJyYXlPYmplY3QucHJvdG90eXBlLnVuYmluZCA9IGZ1bmN0aW9uKClcbntcblx0aWYodGhpcy5uYXRpdmVWYW8pXG5cdHtcblx0XHR0aGlzLm5hdGl2ZVZhb0V4dGVuc2lvbi5iaW5kVmVydGV4QXJyYXlPRVMobnVsbCk7XG5cdH1cbn1cblxuVmVydGV4QXJyYXlPYmplY3QucHJvdG90eXBlLmFjdGl2YXRlID0gZnVuY3Rpb24oKVxue1xuXHR2YXIgZ2wgPSB0aGlzLmdsO1xuXG5cdGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5hdHRyaWJ1dGVzLmxlbmd0aDsgaSsrKSBcblx0e1xuXHRcdHZhciBhdHRyaWIgPSB0aGlzLmF0dHJpYnV0ZXNbaV07XG5cdFx0YXR0cmliLmJ1ZmZlci5iaW5kKCk7XHRcblxuXHRcdGF0dHJpYi5hdHRyaWJ1dGUucG9pbnRlcihhdHRyaWIudHlwZSwgYXR0cmliLm5vcm1hbGl6ZWQsIGF0dHJpYi5zdHJpZGUsIGF0dHJpYi5zdGFydCk7IFxuXHRcdFxuXHRcdGdsLmVuYWJsZVZlcnRleEF0dHJpYkFycmF5KGF0dHJpYi5hdHRyaWJ1dGUubG9jYXRpb24pO1xuXHR9O1xuXG5cdHRoaXMuaW5kZXhCdWZmZXIuYmluZCgpO1xufVxuXG5WZXJ0ZXhBcnJheU9iamVjdC5wcm90b3R5cGUuYWRkQXR0cmlidXRlID0gZnVuY3Rpb24oYnVmZmVyLCBhdHRyaWJ1dGUsIHR5cGUsIG5vcm1hbGl6ZWQsIHN0cmlkZSwgc3RhcnQpXG57XG4gICAgdGhpcy5hdHRyaWJ1dGVzLnB1c2goe1xuICAgIFx0YnVmZmVyOiBcdGJ1ZmZlcixcbiAgICBcdGF0dHJpYnV0ZTogXHRhdHRyaWJ1dGUsXG5cbiAgICBcdGxvY2F0aW9uOiBcdGF0dHJpYnV0ZS5sb2NhdGlvbixcblx0IFx0dHlwZTogXHRcdHR5cGUgfHwgdGhpcy5nbC5GTE9BVCxcblx0IFx0bm9ybWFsaXplZDogbm9ybWFsaXplZCB8fCBmYWxzZSxcblx0IFx0c3RyaWRlOiBcdHN0cmlkZSB8fCAwLFxuXHQgXHRzdGFydDogXHRcdHN0YXJ0IHx8IDBcblx0fSlcblxuXHR0aGlzLmRpcnR5ID0gdHJ1ZTtcbn1cblxuXG5WZXJ0ZXhBcnJheU9iamVjdC5wcm90b3R5cGUuYWRkSW5kZXggPSBmdW5jdGlvbihidWZmZXIsIG9wdGlvbnMpXG57XG4gICAgdGhpcy5pbmRleEJ1ZmZlciA9IGJ1ZmZlcjtcblxuICAgIHRoaXMuZGlydHkgPSB0cnVlO1xufVxuXG5WZXJ0ZXhBcnJheU9iamVjdC5wcm90b3R5cGUuZHJhdyA9IGZ1bmN0aW9uKHR5cGUsIHNpemUsIHN0YXJ0KVxue1xuXHR2YXIgZ2wgPSB0aGlzLmdsO1xuXHRnbC5kcmF3RWxlbWVudHModHlwZSwgc2l6ZSwgZ2wuVU5TSUdORURfU0hPUlQsIHN0YXJ0KTtcbn1cblxuIiwiXG4vKipcbiAqIEhlbHBlciBjbGFzcyB0byBjcmVhdGUgYSB3ZWJHTCBDb250ZXh0XG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIGdsIHtXZWJHTFJlbmRlcmluZ0NvbnRleHR9XG4gKi9cblxudmFyIENPTlRFWFRfVUlEID0gMDtcblxudmFyIGNyZWF0ZUNvbnRleHQgPSBmdW5jdGlvbihjYW52YXMsIG9wdGlvbnMpXG57XG4gICAgZ2wgPSBjYW52YXMuZ2V0Q29udGV4dCgnd2ViZ2wnLCBvcHRpb25zKSB8fCBcbiAgICBcdCBjYW52YXMuZ2V0Q29udGV4dCgnZXhwZXJpbWVudGFsLXdlYmdsJywgb3B0aW9ucyk7XG5cbiAgICBpZiAoIWdsKVxuICAgIHtcbiAgICAgICAgLy8gZmFpbCwgbm90IGFibGUgdG8gZ2V0IGEgY29udGV4dFxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RoaXMgYnJvd3NlciBkb2VzIG5vdCBzdXBwb3J0IHdlYkdMLiBUcnkgdXNpbmcgdGhlIGNhbnZhcyByZW5kZXJlcicpO1xuICAgIH1cblxuICAgIC8vIG1pZ2h0IHdhbnQgdG8gcGhhc2UgdGhpcyBvdXQ/XG4gICAgZ2wuaWQgPSBDT05URVhUX1VJRCsrO1xuXG4gICAgcmV0dXJuIGdsO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGNyZWF0ZUNvbnRleHQ7XG5cbiIsIi8qKlxuICogR2VuZXJpYyBNYXNrIFN0YWNrIGRhdGEgc3RydWN0dXJlXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKi9cblxudmFyIEdMX01BUCA9IHt9O1xuXG5cbnZhciBzZXRWZXJ0ZXhBdHRyaWJBcnJheXMgPSBmdW5jdGlvbiAoZ2wsIGF0dHJpYnMpXG57XHRcbiAgIC8vIGNvbnNvbGUubG9nKGdsLmlkKVxuICAgIHZhciBkYXRhID0gR0xfTUFQW2dsLmlkXTtcblxuICAgIGlmKCFkYXRhKVxuICAgIHtcblx0ICAgdmFyIG1heEF0dHJpYnMgPSBnbC5nZXRQYXJhbWV0ZXIoZ2wuTUFYX1ZFUlRFWF9BVFRSSUJTKTtcblx0XHRkYXRhID0gR0xfTUFQW2dsLmlkXSA9IHt0ZW1wQXR0cmliU3RhdGU6bmV3IEFycmF5KG1heEF0dHJpYnMpXG5cdFx0XHRcdCBcdCBcdFx0ICAgLGF0dHJpYlN0YXRlOm5ldyBBcnJheShtYXhBdHRyaWJzKX07XG5cdH1cblx0XG4gICAgdmFyIGksXG4gICAgXHR0ZW1wQXR0cmliU3RhdGUgPSBkYXRhLnRlbXBBdHRyaWJTdGF0ZSxcbiAgICBcdGF0dHJpYlN0YXRlID0gZGF0YS5hdHRyaWJTdGF0ZTtcblxuICAgIGZvciAoaSA9IDA7IGkgPCB0ZW1wQXR0cmliU3RhdGUubGVuZ3RoOyBpKyspXG4gICAge1xuICAgICAgICB0ZW1wQXR0cmliU3RhdGVbaV0gPSBmYWxzZTtcbiAgICB9XG5cbiAgICAvLyBzZXQgdGhlIG5ldyBhdHRyaWJzXG4gICAgZm9yIChpIGluIGF0dHJpYnMpXG4gICAge1xuICAgICAgICB0ZW1wQXR0cmliU3RhdGVbYXR0cmlic1tpXS5sb2NhdGlvbl0gPSB0cnVlO1xuICAgIH1cblxuICAgIGZvciAoaSA9IDE7IGkgPCBhdHRyaWJTdGF0ZS5sZW5ndGg7IGkrKylcbiAgICB7XG4gICAgICAgIGlmIChhdHRyaWJTdGF0ZVtpXSAhPT0gdGVtcEF0dHJpYlN0YXRlW2ldKVxuICAgICAgICB7XG4gICAgICAgICAgICBhdHRyaWJTdGF0ZVtpXSA9IHRlbXBBdHRyaWJTdGF0ZVtpXTtcblxuICAgICAgICAgICAgaWYgKGRhdGEuYXR0cmliU3RhdGVbaV0pXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgZ2wuZW5hYmxlVmVydGV4QXR0cmliQXJyYXkoaSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgZ2wuZGlzYWJsZVZlcnRleEF0dHJpYkFycmF5KGkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxufTtcblxubW9kdWxlLmV4cG9ydHMgPSBzZXRWZXJ0ZXhBdHRyaWJBcnJheXM7IiwiXG5cblxuXG5jb21waWxlUHJvZ3JhbSA9IGZ1bmN0aW9uKGdsLCB2ZXJ0ZXhTcmMsIGZyYWdtZW50U3JjKVxue1xuICAgIHZhciBnbFZlcnRTaGFkZXIgPSBjb21waWxlU2hhZGVyKGdsLCBnbC5WRVJURVhfU0hBREVSLCB2ZXJ0ZXhTcmMpO1xuICAgIHZhciBnbEZyYWdTaGFkZXIgPSBjb21waWxlU2hhZGVyKGdsLCBnbC5GUkFHTUVOVF9TSEFERVIsIGZyYWdtZW50U3JjKTtcblxuICAgIHZhciBwcm9ncmFtID0gZ2wuY3JlYXRlUHJvZ3JhbSgpO1xuXG4gICAgZ2wuYXR0YWNoU2hhZGVyKHByb2dyYW0sIGdsVmVydFNoYWRlcik7XG4gICAgZ2wuYXR0YWNoU2hhZGVyKHByb2dyYW0sIGdsRnJhZ1NoYWRlcik7XG4gICAgZ2wubGlua1Byb2dyYW0ocHJvZ3JhbSk7XG5cbiAgICAvLyBpZiBsaW5raW5nIGZhaWxzLCB0aGVuIGxvZyBhbmQgY2xlYW51cFxuICAgIGlmICghZ2wuZ2V0UHJvZ3JhbVBhcmFtZXRlcihwcm9ncmFtLCBnbC5MSU5LX1NUQVRVUykpXG4gICAge1xuICAgICAgICBjb25zb2xlLmVycm9yKCdQaXhpLmpzIEVycm9yOiBDb3VsZCBub3QgaW5pdGlhbGl6ZSBzaGFkZXIuJyk7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ2dsLlZBTElEQVRFX1NUQVRVUycsIGdsLmdldFByb2dyYW1QYXJhbWV0ZXIocHJvZ3JhbSwgZ2wuVkFMSURBVEVfU1RBVFVTKSk7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ2dsLmdldEVycm9yKCknLCBnbC5nZXRFcnJvcigpKTtcblxuICAgICAgICAvLyBpZiB0aGVyZSBpcyBhIHByb2dyYW0gaW5mbyBsb2csIGxvZyBpdFxuICAgICAgICBpZiAoZ2wuZ2V0UHJvZ3JhbUluZm9Mb2cocHJvZ3JhbSkgIT09ICcnKVxuICAgICAgICB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ1BpeGkuanMgV2FybmluZzogZ2wuZ2V0UHJvZ3JhbUluZm9Mb2coKScsIGdsLmdldFByb2dyYW1JbmZvTG9nKHByb2dyYW0pKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGdsLmRlbGV0ZVByb2dyYW0ocHJvZ3JhbSk7XG4gICAgICAgIHByb2dyYW0gPSBudWxsO1xuICAgIH1cblxuICAgIC8vIGNsZWFuIHVwIHNvbWUgc2hhZGVyc1xuICAgIGdsLmRlbGV0ZVNoYWRlcihnbFZlcnRTaGFkZXIpO1xuICAgIGdsLmRlbGV0ZVNoYWRlcihnbEZyYWdTaGFkZXIpO1xuXG4gICAgcmV0dXJuIHByb2dyYW07XG59XG5cbnZhciBjb21waWxlU2hhZGVyID0gZnVuY3Rpb24gKGdsLCB0eXBlLCBzcmMpXG57XG4gICAgdmFyIHNoYWRlciA9IGdsLmNyZWF0ZVNoYWRlcih0eXBlKTtcblxuICAgIGdsLnNoYWRlclNvdXJjZShzaGFkZXIsIHNyYyk7XG4gICAgZ2wuY29tcGlsZVNoYWRlcihzaGFkZXIpO1xuXG4gICAgaWYgKCFnbC5nZXRTaGFkZXJQYXJhbWV0ZXIoc2hhZGVyLCBnbC5DT01QSUxFX1NUQVRVUykpXG4gICAge1xuICAgICAgICBjb25zb2xlLmxvZyhnbC5nZXRTaGFkZXJJbmZvTG9nKHNoYWRlcikpO1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICByZXR1cm4gc2hhZGVyO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBjb21waWxlUHJvZ3JhbTtcblxuIiwiXG5cbnZhciBkZWZhdWx0VmFsdWUgPSBmdW5jdGlvbih0eXBlLCBzaXplKSBcbntcbiAgICBzd2l0Y2ggKHR5cGUpXG4gICAge1xuICAgICAgICBjYXNlICdmbG9hdCc6XG4gICAgICAgICAgICByZXR1cm4gMDtcblxuICAgICAgICBjYXNlICd2ZWMyJzogXG4gICAgICAgICAgICByZXR1cm4gbmV3IEZsb2F0MzJBcnJheSgyICogc2l6ZSk7XG5cbiAgICAgICAgY2FzZSAndmVjMyc6XG4gICAgICAgICAgICByZXR1cm4gbmV3IEZsb2F0MzJBcnJheSgzICogc2l6ZSk7XG5cbiAgICAgICAgY2FzZSAndmVjNCc6ICAgICBcbiAgICAgICAgICAgIHJldHVybiBuZXcgRmxvYXQzMkFycmF5KDQgKiBzaXplKTtcbiAgICAgICAgICAgIFxuICAgICAgICBjYXNlICdpbnQnOlxuICAgICAgICBjYXNlICdzYW1wbGVyMkQnOlxuICAgICAgICAgICAgcmV0dXJuIDA7XG5cbiAgICAgICAgY2FzZSAnaXZlYzInOiAgIFxuICAgICAgICAgICAgcmV0dXJuIG5ldyBJbnQzMkFycmF5KDIgKiBzaXplKTtcblxuICAgICAgICBjYXNlICdpdmVjMyc6XG4gICAgICAgICAgICByZXR1cm4gbmV3IEludDMyQXJyYXkoMyAqIHNpemUpO1xuXG4gICAgICAgIGNhc2UgJ2l2ZWM0JzogXG4gICAgICAgICAgICByZXR1cm4gbmV3IEludDMyQXJyYXkoNCAqIHNpemUpO1xuXG4gICAgICAgIGNhc2UgJ2Jvb2wnOiAgICAgXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG5cbiAgICAgICAgY2FzZSAnYnZlYzInOlxuXG4gICAgICAgICAgICByZXR1cm4gYm9vbGVhbkFycmF5KCAyICogc2l6ZSk7XG5cbiAgICAgICAgY2FzZSAnYnZlYzMnOlxuICAgICAgICAgICAgcmV0dXJuIGJvb2xlYW5BcnJheSgzICogc2l6ZSk7XG5cbiAgICAgICAgY2FzZSAnYnZlYzQnOlxuICAgICAgICAgICAgcmV0dXJuIGJvb2xlYW5BcnJheSg0ICogc2l6ZSk7XG5cbiAgICAgICAgY2FzZSAnbWF0Mic6XG4gICAgICAgICAgICByZXR1cm4gbmV3IEZsb2F0MzJBcnJheShbMSwgMFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLDAsIDFdKTtcblxuICAgICAgICBjYXNlICdtYXQzJzogXG4gICAgICAgICAgICByZXR1cm4gbmV3IEZsb2F0MzJBcnJheShbMSwgMCwgMFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLDAsIDEsIDBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwwLCAwLCAxXSk7XG5cbiAgICAgICAgY2FzZSAnbWF0NCc6XG4gICAgICAgICAgICByZXR1cm4gbmV3IEZsb2F0MzJBcnJheShbMSwgMCwgMCwgMFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLDAsIDEsIDAsIDBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwwLCAwLCAxLCAwXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsMCwgMCwgMCwgMV0pO1xuICAgIH1cbn1cblxudmFyIGJvb2xlYW5BcnJheSA9IGZ1bmN0aW9uKHNpemUpXG57XG4gICAgdmFyIGFycmF5ID0gbmV3IEFycmF5KHNpemUpO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcnJheS5sZW5ndGg7IGkrKykgXG4gICAge1xuICAgICAgICBhcnJheVtpXSA9IGZhbHNlO1xuICAgIH07XG5cbiAgICByZXR1cm4gYXJyYXk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZGVmYXVsdFZhbHVlO1xuIiwiXG52YXIgbWFwVHlwZSA9IHJlcXVpcmUoJy4vbWFwVHlwZScpO1xudmFyIG1hcFNpemUgPSByZXF1aXJlKCcuL21hcFNpemUnKTtcblxudmFyIGV4dHJhY3RBdHRyaWJ1dGVzID0gZnVuY3Rpb24oZ2wsIHByb2dyYW0pXG57XG4gICAgdmFyIGF0dHJpYnV0ZXMgPSB7fTtcblxuICAgIHZhciB0b3RhbEF0dHJpYnV0ZXMgPSBnbC5nZXRQcm9ncmFtUGFyYW1ldGVyKHByb2dyYW0sIGdsLkFDVElWRV9BVFRSSUJVVEVTKVxuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0b3RhbEF0dHJpYnV0ZXM7IGkrKykgXG4gICAge1xuICAgICAgICB2YXIgYXR0cmliRGF0YSA9IGdsLmdldEFjdGl2ZUF0dHJpYihwcm9ncmFtLCBpKTtcbiAgICAgICAgdmFyIHR5cGUgPSBtYXBUeXBlKGdsLCBhdHRyaWJEYXRhLnR5cGUpO1xuXG4gICAgICAgIGF0dHJpYnV0ZXNbYXR0cmliRGF0YS5uYW1lXSA9IHtcbiAgICAgICAgICAgIHR5cGU6dHlwZSxcbiAgICAgICAgICAgIHNpemU6bWFwU2l6ZSh0eXBlKSxcbiAgICAgICAgICAgIGxvY2F0aW9uOmdsLmdldEF0dHJpYkxvY2F0aW9uKHByb2dyYW0sIGF0dHJpYkRhdGEubmFtZSksXG4gICAgICAgICAgICAvL1RPRE8gLSBtYWtlIGFuIGF0dHJpYnV0ZSBvYmplY3RcbiAgICAgICAgICAgIHBvaW50ZXI6ZnVuY3Rpb24odHlwZSwgbm9ybWFsaXplZCwgc3RyaWRlLCBzdGFydCl7XG5cbiAgICAgICAgICAgICAvLyAgIGNvbnNvbGUubG9nKHRoaXMubG9jYXRpb24pXG4gICAgICAgICAgICAgICAgZ2wudmVydGV4QXR0cmliUG9pbnRlcih0aGlzLmxvY2F0aW9uLHRoaXMuc2l6ZSwgdHlwZSB8fCBnbC5GTE9BVCwgbm9ybWFsaXplZCB8fCBmYWxzZSwgc3RyaWRlIHx8IDAsIHN0YXJ0IHx8IDApOyBcblxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfTtcblxuICAgIHJldHVybiBhdHRyaWJ1dGVzOyAgXG59XG5cbm1vZHVsZS5leHBvcnRzID0gZXh0cmFjdEF0dHJpYnV0ZXM7XG5cbiIsInZhciBtYXBUeXBlID0gcmVxdWlyZSgnLi9tYXBUeXBlJyk7XG52YXIgZGVmYXVsdFZhbHVlID0gcmVxdWlyZSgnLi9kZWZhdWx0VmFsdWUnKTtcblxuXG52YXIgZXh0cmFjdFVuaWZvcm1zID0gZnVuY3Rpb24oZ2wsIHByb2dyYW0pXG57XG5cdHZhciB1bmlmb3JtcyA9IHt9O1xuXHRcbiAgICB2YXIgdG90YWxVbmlmb3JtcyA9IGdsLmdldFByb2dyYW1QYXJhbWV0ZXIocHJvZ3JhbSwgZ2wuQUNUSVZFX1VOSUZPUk1TKVxuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0b3RhbFVuaWZvcm1zOyBpKyspIFxuICAgIHtcbiAgICBcdHZhciB1bmlmb3JtRGF0YSA9IGdsLmdldEFjdGl2ZVVuaWZvcm0ocHJvZ3JhbSwgaSk7XG4gICAgXHR2YXIgbmFtZSA9IHVuaWZvcm1EYXRhLm5hbWUucmVwbGFjZSgvXFxbLio/XFxdLywgXCJcIik7XG4gICAgICAgIHZhciB0eXBlID0gbWFwVHlwZShnbCwgdW5pZm9ybURhdGEudHlwZSApO1xuXG4gICAgXHR1bmlmb3Jtc1tuYW1lXSA9IHtcbiAgICBcdFx0dHlwZTp0eXBlLFxuICAgIFx0XHRzaXplOnVuaWZvcm1EYXRhLnNpemUsXG4gICAgXHRcdGxvY2F0aW9uOmdsLmdldFVuaWZvcm1Mb2NhdGlvbihwcm9ncmFtLCBuYW1lKSxcbiAgICBcdFx0dmFsdWU6ZGVmYXVsdFZhbHVlKHR5cGUsIHVuaWZvcm1EYXRhLnNpemUpXG4gICAgXHR9XG4gICAgfTtcblx0XG5cdHJldHVybiB1bmlmb3JtcztcdFxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGV4dHJhY3RVbmlmb3JtcztcblxuIiwiXG52YXIgZ2VuZXJhdGVVbmlmb3JtQWNjZXNzT2JqZWN0ID0gZnVuY3Rpb24oZ2wsIHVuaWZvcm1EYXRhKVxue1xuICAgIC8vIHRoaXMgaXMgdGhlIG9iamVjdCB3ZSB3aWxsIGJlIHNlbmRpbmcgYmFjay5cbiAgICAvLyBhbiBvYmplY3QgaGllcmFjaHkgd2lsbCBiZSBjcmVhdGVkIGZvciBzdHJ1Y3RzXG4gICAgdmFyIHVuaWZvcm1zID0ge2RhdGE6e319O1xuXG4gICAgdW5pZm9ybXMuZ2wgPSBnbDtcbiAgICBcbiAgICB2YXIgdW5pZm9ybUtleXM9IE9iamVjdC5rZXlzKHVuaWZvcm1EYXRhKTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdW5pZm9ybUtleXMubGVuZ3RoOyBpKyspIFxuICAgIHtcbiAgICAgICAgdmFyIGZ1bGxOYW1lID0gdW5pZm9ybUtleXNbaV1cblxuICAgICAgICB2YXIgbmFtZVRva2VucyA9IGZ1bGxOYW1lLnNwbGl0KCcuJyk7XG4gICAgICAgIHZhciBuYW1lID0gbmFtZVRva2Vuc1tuYW1lVG9rZW5zLmxlbmd0aCAtIDFdO1xuXG4gICAgICAgIHZhciB1bmlmb3JtR3JvdXAgPSBnZXRVbmlmb3JtR3JvdXAobmFtZVRva2VucywgdW5pZm9ybXMpO1xuXG4gICAgICAgIHZhciB1bmlmb3JtID0gIHVuaWZvcm1EYXRhW2Z1bGxOYW1lXTtcbiAgICAgICAgdW5pZm9ybUdyb3VwLmRhdGFbbmFtZV0gPSB1bmlmb3JtO1xuXG4gICAgICAgIHVuaWZvcm1Hcm91cC5nbCA9IGdsO1xuXG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh1bmlmb3JtR3JvdXAsIG5hbWUsIHtcbiAgICAgICAgICAgIGdldDogZ2VuZXJhdGVHZXR0ZXIobmFtZSksXG4gICAgICAgICAgICBzZXQ6IGdlbmVyYXRlU2V0dGVyKG5hbWUsIHVuaWZvcm0pXG4gICAgICAgIH0pXG4gICAgfTtcblxuICAgIHJldHVybiB1bmlmb3Jtcztcbn1cblxudmFyIGdlbmVyYXRlR2V0dGVyID0gZnVuY3Rpb24obmFtZSlcbntcblx0dmFyIHRlbXBsYXRlID0gZ2V0dGVyVGVtcGxhdGUucmVwbGFjZSgnJSUnLCBuYW1lKTtcblx0cmV0dXJuIG5ldyBGdW5jdGlvbih0ZW1wbGF0ZSk7XG59XG5cbnZhciBnZW5lcmF0ZVNldHRlciA9IGZ1bmN0aW9uKG5hbWUsIHVuaWZvcm0pXG57XG4gICAgdmFyIHRlbXBsYXRlID0gc2V0dGVyVGVtcGxhdGUucmVwbGFjZSgvJSUvZywgbmFtZSk7XG4gICAgdmFyIHNldFRlbXBsYXRlXG4gICAgXG4gICAgaWYodW5pZm9ybS5zaXplID09PSAxKVxuICAgIHtcbiAgICAgICAgc2V0VGVtcGxhdGUgPSBHTFNMX1RPX1NJTkdMRV9TRVRURVJTW3VuaWZvcm0udHlwZV07XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHNldFRlbXBsYXRlID0gR0xTTF9UT19BUlJBWV9TRVRURVJTW3VuaWZvcm0udHlwZV07XG4gICAgfVxuXG4gICAgaWYoc2V0VGVtcGxhdGUpXG4gICAge1xuICAgICAgICB0ZW1wbGF0ZSArPSBcIlxcbnRoaXMuZ2wuXCIgKyBzZXRUZW1wbGF0ZSArIFwiO1wiO1xuICAgIH1cblxuICBcdHJldHVybiBuZXcgRnVuY3Rpb24oJ3ZhbHVlJywgdGVtcGxhdGUpO1xufVxuXG52YXIgZ2V0VW5pZm9ybUdyb3VwID0gZnVuY3Rpb24obmFtZVRva2VucywgdW5pZm9ybSlcbntcbiAgICB2YXIgY3VyID0gdW5pZm9ybTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbmFtZVRva2Vucy5sZW5ndGggLSAxOyBpKyspIFxuICAgIHtcbiAgICAgICAgdmFyIG8gPSBjdXJbbmFtZVRva2Vuc1tpXV0gfHwge2RhdGE6e319O1xuICAgICAgICBjdXJbbmFtZVRva2Vuc1tpXV0gPSBvO1xuICAgICAgICBjdXIgPSBvO1xuICAgIH07XG5cbiAgICByZXR1cm4gY3VyXG59XG5cbnZhciBnZXR0ZXJUZW1wbGF0ZSA9IFtcbiAgICAncmV0dXJuIHRoaXMuZGF0YS4lJS52YWx1ZTsnLFxuXS5qb2luKCdcXG4nKTtcblxudmFyIHNldHRlclRlbXBsYXRlID0gW1xuICAgICd0aGlzLmRhdGEuJSUudmFsdWUgPSB2YWx1ZTsnLFxuICAgICd2YXIgbG9jYXRpb24gPSB0aGlzLmRhdGEuJSUubG9jYXRpb247J1xuXS5qb2luKCdcXG4nKTtcblxuXG52YXIgR0xTTF9UT19TSU5HTEVfU0VUVEVSUyA9IHtcblxuICAgICdmbG9hdCc6ICAgICd1bmlmb3JtMWYobG9jYXRpb24sIHZhbHVlKScsXG5cbiAgICAndmVjMic6ICAgICAndW5pZm9ybTJmKGxvY2F0aW9uLCB2YWx1ZVswXSwgdmFsdWVbMV0pJyxcbiAgICAndmVjMyc6ICAgICAndW5pZm9ybTNmKGxvY2F0aW9uLCB2YWx1ZVswXSwgdmFsdWVbMV0sIHZhbHVlWzJdKScsXG4gICAgJ3ZlYzQnOiAgICAgJ3VuaWZvcm00Zihsb2NhdGlvbiwgdmFsdWVbMF0sIHZhbHVlWzFdLCB2YWx1ZVsyXSwgdmFsdWVbM10pJyxcbiAgICBcdFxuICAgICdpbnQnOiAgICAgICd1bmlmb3JtMWkobG9jYXRpb24sIHZhbHVlKScsXG4gICAgJ2l2ZWMyJzogICAgJ3VuaWZvcm0yaShsb2NhdGlvbiwgdmFsdWVbMF0sIHZhbHVlWzFdKScsXG4gICAgJ2l2ZWMzJzogICAgJ3VuaWZvcm0zaShsb2NhdGlvbiwgdmFsdWVbMF0sIHZhbHVlWzFdLCB2YWx1ZVsyXSknLFxuICAgICdpdmVjNCc6ICAgICd1bmlmb3JtNGkobG9jYXRpb24sIHZhbHVlWzBdLCB2YWx1ZVsxXSwgdmFsdWVbMl0sIHZhbHVlWzNdKScsXG5cbiAgICAnYm9vbCc6ICAgICAndW5pZm9ybTFpKGxvY2F0aW9uLCB2YWx1ZSknLFxuICAgICdidmVjMic6ICAgICd1bmlmb3JtMmkobG9jYXRpb24sIHZhbHVlWzBdLCB2YWx1ZVsxXSknLFxuICAgICdidmVjMyc6ICAgICd1bmlmb3JtM2kobG9jYXRpb24sIHZhbHVlWzBdLCB2YWx1ZVsxXSwgdmFsdWVbMl0pJyxcbiAgICAnYnZlYzQnOiAgICAndW5pZm9ybTRpKGxvY2F0aW9uLCB2YWx1ZVswXSwgdmFsdWVbMV0sIHZhbHVlWzJdLCB2YWx1ZVszXSknLFxuXG4gICAgJ21hdDInOiAgICAgJ3VuaWZvcm1NYXRyaXgyZnYobG9jYXRpb24sIGZhbHNlLCB2YWx1ZSknLFxuICAgICdtYXQzJzogICAgICd1bmlmb3JtTWF0cml4M2Z2KGxvY2F0aW9uLCBmYWxzZSwgdmFsdWUpJyxcbiAgICAnbWF0NCc6ICAgICAndW5pZm9ybU1hdHJpeDRmdihsb2NhdGlvbiwgZmFsc2UsIHZhbHVlKScsXG5cbiAgICAnc2FtcGxlcjJEJzondW5pZm9ybTFpKGxvY2F0aW9uLCB2YWx1ZSknXG59XG5cbnZhciBHTFNMX1RPX0FSUkFZX1NFVFRFUlMgPSB7XG5cbiAgICAnZmxvYXQnOiAgICAndW5pZm9ybTFmdihsb2NhdGlvbiwgdmFsdWUpJyxcblxuICAgICd2ZWMyJzogICAgICd1bmlmb3JtMmZ2KGxvY2F0aW9uLCB2YWx1ZSknLFxuICAgICd2ZWMzJzogICAgICd1bmlmb3JtM2Z2KGxvY2F0aW9uLCB2YWx1ZSknLFxuICAgICd2ZWM0JzogICAgICd1bmlmb3JtNGZ2KGxvY2F0aW9uLCB2YWx1ZSknLFxuICAgIFx0XG4gICAgJ2ludCc6ICAgICAgJ3VuaWZvcm0xaXYobG9jYXRpb24sIHZhbHVlKScsXG4gICAgJ2l2ZWMyJzogICAgJ3VuaWZvcm0yaXYobG9jYXRpb24sIHZhbHVlKScsXG4gICAgJ2l2ZWMzJzogICAgJ3VuaWZvcm0zaXYobG9jYXRpb24sIHZhbHVlKScsXG4gICAgJ2l2ZWM0JzogICAgJ3VuaWZvcm00aXYobG9jYXRpb24sIHZhbHVlKScsXG5cbiAgICAnYm9vbCc6ICAgICAndW5pZm9ybTFpdihsb2NhdGlvbiwgdmFsdWUpJyxcbiAgICAnYnZlYzInOiAgICAndW5pZm9ybTJpdihsb2NhdGlvbiwgdmFsdWUpJyxcbiAgICAnYnZlYzMnOiAgICAndW5pZm9ybTNpdihsb2NhdGlvbiwgdmFsdWUpJyxcbiAgICAnYnZlYzQnOiAgICAndW5pZm9ybTRpdihsb2NhdGlvbiwgdmFsdWUpJyxcbiAgIFxuICAgICdzYW1wbGVyMkQnOid1bmlmb3JtMWl2KGxvY2F0aW9uLCB2YWx1ZSknXG59XG5cbm1vZHVsZS5leHBvcnRzID0gZ2VuZXJhdGVVbmlmb3JtQWNjZXNzT2JqZWN0O1xuXG4iLCJcblxudmFyIG1hcFNpemUgPSBmdW5jdGlvbih0eXBlKSBcbnsgXG4gICAgcmV0dXJuIEdMU0xfVE9fU0laRVt0eXBlXTtcbn1cblxuXG52YXIgR0xTTF9UT19TSVpFID0ge1xuICAgICdmbG9hdCc6ICAgIDEsXG4gICAgJ3ZlYzInOiAgICAgMixcbiAgICAndmVjMyc6ICAgICAzLFxuICAgICd2ZWM0JzogICAgIDQsXG5cbiAgICAnaW50JzogICAgICAxLFxuICAgICdpdmVjMic6ICAgIDIsXG4gICAgJ2l2ZWMzJzogICAgMyxcbiAgICAnaXZlYzQnOiAgICA0LFxuXG4gICAgJ2Jvb2wnOiAgICAgMSxcbiAgICAnYnZlYzInOiAgICAyLFxuICAgICdidmVjMyc6ICAgIDMsXG4gICAgJ2J2ZWM0JzogICAgNCxcblxuICAgICdtYXQyJzogICAgIDQsXG4gICAgJ21hdDMnOiAgICAgOSxcbiAgICAnbWF0NCc6ICAgICAxNixcblxuICAgICdzYW1wbGVyMkQnOiAgMVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IG1hcFNpemU7XG4iLCJcblxudmFyIG1hcFNpemUgPSBmdW5jdGlvbihnbCwgdHlwZSkgXG57XG4gICAgaWYoIUdMX1RBQkxFKSBcbiAgICB7XG4gICAgICAgIHZhciB0eXBlTmFtZXMgPSBPYmplY3Qua2V5cyhHTF9UT19HTFNMX1RZUEVTKTtcblxuICAgICAgICBHTF9UQUJMRSA9IHt9O1xuXG4gICAgICAgIGZvcih2YXIgaSA9IDA7IGkgPCB0eXBlTmFtZXMubGVuZ3RoOyArK2kpIFxuICAgICAgICB7XG4gICAgICAgICAgICB2YXIgdG4gPSB0eXBlTmFtZXNbaV07XG4gICAgICAgICAgICBHTF9UQUJMRVsgZ2xbdG5dIF0gPSBHTF9UT19HTFNMX1RZUEVTW3RuXTtcbiAgICAgICAgfVxuICAgIH1cblxuICByZXR1cm4gR0xfVEFCTEVbdHlwZV07XG59XG5cbnZhciBHTF9UQUJMRSA9IG51bGw7XG5cbnZhciBHTF9UT19HTFNMX1RZUEVTID0ge1xuICAnRkxPQVQnOiAgICAgICAnZmxvYXQnLFxuICAnRkxPQVRfVkVDMic6ICAndmVjMicsXG4gICdGTE9BVF9WRUMzJzogICd2ZWMzJyxcbiAgJ0ZMT0FUX1ZFQzQnOiAgJ3ZlYzQnLFxuXG4gICdJTlQnOiAgICAgICAgICdpbnQnLFxuICAnSU5UX1ZFQzInOiAgICAnaXZlYzInLFxuICAnSU5UX1ZFQzMnOiAgICAnaXZlYzMnLFxuICAnSU5UX1ZFQzQnOiAgICAnaXZlYzQnLFxuICBcbiAgJ0JPT0wnOiAgICAgICAgJ2Jvb2wnLFxuICAnQk9PTF9WRUMyJzogICAnYnZlYzInLFxuICAnQk9PTF9WRUMzJzogICAnYnZlYzMnLFxuICAnQk9PTF9WRUM0JzogICAnYnZlYzQnLFxuICBcbiAgJ0ZMT0FUX01BVDInOiAgJ21hdDInLFxuICAnRkxPQVRfTUFUMyc6ICAnbWF0MycsXG4gICdGTE9BVF9NQVQ0JzogICdtYXQ0JyxcbiAgXG4gICdTQU1QTEVSXzJEJzogICdzYW1wbGVyMkQnICBcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBtYXBTaXplO1xuIiwiLyohXG4gKiBhc3luY1xuICogaHR0cHM6Ly9naXRodWIuY29tL2Nhb2xhbi9hc3luY1xuICpcbiAqIENvcHlyaWdodCAyMDEwLTIwMTQgQ2FvbGFuIE1jTWFob25cbiAqIFJlbGVhc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZVxuICovXG4oZnVuY3Rpb24gKCkge1xuXG4gICAgdmFyIGFzeW5jID0ge307XG4gICAgZnVuY3Rpb24gbm9vcCgpIHt9XG4gICAgZnVuY3Rpb24gaWRlbnRpdHkodikge1xuICAgICAgICByZXR1cm4gdjtcbiAgICB9XG4gICAgZnVuY3Rpb24gdG9Cb29sKHYpIHtcbiAgICAgICAgcmV0dXJuICEhdjtcbiAgICB9XG4gICAgZnVuY3Rpb24gbm90SWQodikge1xuICAgICAgICByZXR1cm4gIXY7XG4gICAgfVxuXG4gICAgLy8gZ2xvYmFsIG9uIHRoZSBzZXJ2ZXIsIHdpbmRvdyBpbiB0aGUgYnJvd3NlclxuICAgIHZhciBwcmV2aW91c19hc3luYztcblxuICAgIC8vIEVzdGFibGlzaCB0aGUgcm9vdCBvYmplY3QsIGB3aW5kb3dgIChgc2VsZmApIGluIHRoZSBicm93c2VyLCBgZ2xvYmFsYFxuICAgIC8vIG9uIHRoZSBzZXJ2ZXIsIG9yIGB0aGlzYCBpbiBzb21lIHZpcnR1YWwgbWFjaGluZXMuIFdlIHVzZSBgc2VsZmBcbiAgICAvLyBpbnN0ZWFkIG9mIGB3aW5kb3dgIGZvciBgV2ViV29ya2VyYCBzdXBwb3J0LlxuICAgIHZhciByb290ID0gdHlwZW9mIHNlbGYgPT09ICdvYmplY3QnICYmIHNlbGYuc2VsZiA9PT0gc2VsZiAmJiBzZWxmIHx8XG4gICAgICAgICAgICB0eXBlb2YgZ2xvYmFsID09PSAnb2JqZWN0JyAmJiBnbG9iYWwuZ2xvYmFsID09PSBnbG9iYWwgJiYgZ2xvYmFsIHx8XG4gICAgICAgICAgICB0aGlzO1xuXG4gICAgaWYgKHJvb3QgIT0gbnVsbCkge1xuICAgICAgICBwcmV2aW91c19hc3luYyA9IHJvb3QuYXN5bmM7XG4gICAgfVxuXG4gICAgYXN5bmMubm9Db25mbGljdCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcm9vdC5hc3luYyA9IHByZXZpb3VzX2FzeW5jO1xuICAgICAgICByZXR1cm4gYXN5bmM7XG4gICAgfTtcblxuICAgIGZ1bmN0aW9uIG9ubHlfb25jZShmbikge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICBpZiAoZm4gPT09IG51bGwpIHRocm93IG5ldyBFcnJvcihcIkNhbGxiYWNrIHdhcyBhbHJlYWR5IGNhbGxlZC5cIik7XG4gICAgICAgICAgICBmbi5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgICAgICAgICAgZm4gPSBudWxsO1xuICAgICAgICB9O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIF9vbmNlKGZuKSB7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIGlmIChmbiA9PT0gbnVsbCkgcmV0dXJuO1xuICAgICAgICAgICAgZm4uYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICAgICAgICAgIGZuID0gbnVsbDtcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICAvLy8vIGNyb3NzLWJyb3dzZXIgY29tcGF0aWJsaXR5IGZ1bmN0aW9ucyAvLy8vXG5cbiAgICB2YXIgX3RvU3RyaW5nID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZztcblxuICAgIHZhciBfaXNBcnJheSA9IEFycmF5LmlzQXJyYXkgfHwgZnVuY3Rpb24gKG9iaikge1xuICAgICAgICByZXR1cm4gX3RvU3RyaW5nLmNhbGwob2JqKSA9PT0gJ1tvYmplY3QgQXJyYXldJztcbiAgICB9O1xuXG4gICAgLy8gUG9ydGVkIGZyb20gdW5kZXJzY29yZS5qcyBpc09iamVjdFxuICAgIHZhciBfaXNPYmplY3QgPSBmdW5jdGlvbihvYmopIHtcbiAgICAgICAgdmFyIHR5cGUgPSB0eXBlb2Ygb2JqO1xuICAgICAgICByZXR1cm4gdHlwZSA9PT0gJ2Z1bmN0aW9uJyB8fCB0eXBlID09PSAnb2JqZWN0JyAmJiAhIW9iajtcbiAgICB9O1xuXG4gICAgZnVuY3Rpb24gX2lzQXJyYXlMaWtlKGFycikge1xuICAgICAgICByZXR1cm4gX2lzQXJyYXkoYXJyKSB8fCAoXG4gICAgICAgICAgICAvLyBoYXMgYSBwb3NpdGl2ZSBpbnRlZ2VyIGxlbmd0aCBwcm9wZXJ0eVxuICAgICAgICAgICAgdHlwZW9mIGFyci5sZW5ndGggPT09IFwibnVtYmVyXCIgJiZcbiAgICAgICAgICAgIGFyci5sZW5ndGggPj0gMCAmJlxuICAgICAgICAgICAgYXJyLmxlbmd0aCAlIDEgPT09IDBcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBfYXJyYXlFYWNoKGFyciwgaXRlcmF0b3IpIHtcbiAgICAgICAgdmFyIGluZGV4ID0gLTEsXG4gICAgICAgICAgICBsZW5ndGggPSBhcnIubGVuZ3RoO1xuXG4gICAgICAgIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgICAgICAgICBpdGVyYXRvcihhcnJbaW5kZXhdLCBpbmRleCwgYXJyKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIF9tYXAoYXJyLCBpdGVyYXRvcikge1xuICAgICAgICB2YXIgaW5kZXggPSAtMSxcbiAgICAgICAgICAgIGxlbmd0aCA9IGFyci5sZW5ndGgsXG4gICAgICAgICAgICByZXN1bHQgPSBBcnJheShsZW5ndGgpO1xuXG4gICAgICAgIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgICAgICAgICByZXN1bHRbaW5kZXhdID0gaXRlcmF0b3IoYXJyW2luZGV4XSwgaW5kZXgsIGFycik7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBfcmFuZ2UoY291bnQpIHtcbiAgICAgICAgcmV0dXJuIF9tYXAoQXJyYXkoY291bnQpLCBmdW5jdGlvbiAodiwgaSkgeyByZXR1cm4gaTsgfSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gX3JlZHVjZShhcnIsIGl0ZXJhdG9yLCBtZW1vKSB7XG4gICAgICAgIF9hcnJheUVhY2goYXJyLCBmdW5jdGlvbiAoeCwgaSwgYSkge1xuICAgICAgICAgICAgbWVtbyA9IGl0ZXJhdG9yKG1lbW8sIHgsIGksIGEpO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIG1lbW87XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gX2ZvckVhY2hPZihvYmplY3QsIGl0ZXJhdG9yKSB7XG4gICAgICAgIF9hcnJheUVhY2goX2tleXMob2JqZWN0KSwgZnVuY3Rpb24gKGtleSkge1xuICAgICAgICAgICAgaXRlcmF0b3Iob2JqZWN0W2tleV0sIGtleSk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIF9pbmRleE9mKGFyciwgaXRlbSkge1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFyci5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgaWYgKGFycltpXSA9PT0gaXRlbSkgcmV0dXJuIGk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIC0xO1xuICAgIH1cblxuICAgIHZhciBfa2V5cyA9IE9iamVjdC5rZXlzIHx8IGZ1bmN0aW9uIChvYmopIHtcbiAgICAgICAgdmFyIGtleXMgPSBbXTtcbiAgICAgICAgZm9yICh2YXIgayBpbiBvYmopIHtcbiAgICAgICAgICAgIGlmIChvYmouaGFzT3duUHJvcGVydHkoaykpIHtcbiAgICAgICAgICAgICAgICBrZXlzLnB1c2goayk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGtleXM7XG4gICAgfTtcblxuICAgIGZ1bmN0aW9uIF9rZXlJdGVyYXRvcihjb2xsKSB7XG4gICAgICAgIHZhciBpID0gLTE7XG4gICAgICAgIHZhciBsZW47XG4gICAgICAgIHZhciBrZXlzO1xuICAgICAgICBpZiAoX2lzQXJyYXlMaWtlKGNvbGwpKSB7XG4gICAgICAgICAgICBsZW4gPSBjb2xsLmxlbmd0aDtcbiAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbiBuZXh0KCkge1xuICAgICAgICAgICAgICAgIGkrKztcbiAgICAgICAgICAgICAgICByZXR1cm4gaSA8IGxlbiA/IGkgOiBudWxsO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGtleXMgPSBfa2V5cyhjb2xsKTtcbiAgICAgICAgICAgIGxlbiA9IGtleXMubGVuZ3RoO1xuICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIG5leHQoKSB7XG4gICAgICAgICAgICAgICAgaSsrO1xuICAgICAgICAgICAgICAgIHJldHVybiBpIDwgbGVuID8ga2V5c1tpXSA6IG51bGw7XG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gU2ltaWxhciB0byBFUzYncyByZXN0IHBhcmFtIChodHRwOi8vYXJpeWEub2ZpbGFicy5jb20vMjAxMy8wMy9lczYtYW5kLXJlc3QtcGFyYW1ldGVyLmh0bWwpXG4gICAgLy8gVGhpcyBhY2N1bXVsYXRlcyB0aGUgYXJndW1lbnRzIHBhc3NlZCBpbnRvIGFuIGFycmF5LCBhZnRlciBhIGdpdmVuIGluZGV4LlxuICAgIC8vIEZyb20gdW5kZXJzY29yZS5qcyAoaHR0cHM6Ly9naXRodWIuY29tL2phc2hrZW5hcy91bmRlcnNjb3JlL3B1bGwvMjE0MCkuXG4gICAgZnVuY3Rpb24gX3Jlc3RQYXJhbShmdW5jLCBzdGFydEluZGV4KSB7XG4gICAgICAgIHN0YXJ0SW5kZXggPSBzdGFydEluZGV4ID09IG51bGwgPyBmdW5jLmxlbmd0aCAtIDEgOiArc3RhcnRJbmRleDtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgdmFyIGxlbmd0aCA9IE1hdGgubWF4KGFyZ3VtZW50cy5sZW5ndGggLSBzdGFydEluZGV4LCAwKTtcbiAgICAgICAgICAgIHZhciByZXN0ID0gQXJyYXkobGVuZ3RoKTtcbiAgICAgICAgICAgIGZvciAodmFyIGluZGV4ID0gMDsgaW5kZXggPCBsZW5ndGg7IGluZGV4KyspIHtcbiAgICAgICAgICAgICAgICByZXN0W2luZGV4XSA9IGFyZ3VtZW50c1tpbmRleCArIHN0YXJ0SW5kZXhdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgc3dpdGNoIChzdGFydEluZGV4KSB7XG4gICAgICAgICAgICAgICAgY2FzZSAwOiByZXR1cm4gZnVuYy5jYWxsKHRoaXMsIHJlc3QpO1xuICAgICAgICAgICAgICAgIGNhc2UgMTogcmV0dXJuIGZ1bmMuY2FsbCh0aGlzLCBhcmd1bWVudHNbMF0sIHJlc3QpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gQ3VycmVudGx5IHVudXNlZCBidXQgaGFuZGxlIGNhc2VzIG91dHNpZGUgb2YgdGhlIHN3aXRjaCBzdGF0ZW1lbnQ6XG4gICAgICAgICAgICAvLyB2YXIgYXJncyA9IEFycmF5KHN0YXJ0SW5kZXggKyAxKTtcbiAgICAgICAgICAgIC8vIGZvciAoaW5kZXggPSAwOyBpbmRleCA8IHN0YXJ0SW5kZXg7IGluZGV4KyspIHtcbiAgICAgICAgICAgIC8vICAgICBhcmdzW2luZGV4XSA9IGFyZ3VtZW50c1tpbmRleF07XG4gICAgICAgICAgICAvLyB9XG4gICAgICAgICAgICAvLyBhcmdzW3N0YXJ0SW5kZXhdID0gcmVzdDtcbiAgICAgICAgICAgIC8vIHJldHVybiBmdW5jLmFwcGx5KHRoaXMsIGFyZ3MpO1xuICAgICAgICB9O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIF93aXRob3V0SW5kZXgoaXRlcmF0b3IpIHtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICh2YWx1ZSwgaW5kZXgsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICByZXR1cm4gaXRlcmF0b3IodmFsdWUsIGNhbGxiYWNrKTtcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICAvLy8vIGV4cG9ydGVkIGFzeW5jIG1vZHVsZSBmdW5jdGlvbnMgLy8vL1xuXG4gICAgLy8vLyBuZXh0VGljayBpbXBsZW1lbnRhdGlvbiB3aXRoIGJyb3dzZXItY29tcGF0aWJsZSBmYWxsYmFjayAvLy8vXG5cbiAgICAvLyBjYXB0dXJlIHRoZSBnbG9iYWwgcmVmZXJlbmNlIHRvIGd1YXJkIGFnYWluc3QgZmFrZVRpbWVyIG1vY2tzXG4gICAgdmFyIF9zZXRJbW1lZGlhdGUgPSB0eXBlb2Ygc2V0SW1tZWRpYXRlID09PSAnZnVuY3Rpb24nICYmIHNldEltbWVkaWF0ZTtcblxuICAgIHZhciBfZGVsYXkgPSBfc2V0SW1tZWRpYXRlID8gZnVuY3Rpb24oZm4pIHtcbiAgICAgICAgLy8gbm90IGEgZGlyZWN0IGFsaWFzIGZvciBJRTEwIGNvbXBhdGliaWxpdHlcbiAgICAgICAgX3NldEltbWVkaWF0ZShmbik7XG4gICAgfSA6IGZ1bmN0aW9uKGZuKSB7XG4gICAgICAgIHNldFRpbWVvdXQoZm4sIDApO1xuICAgIH07XG5cbiAgICBpZiAodHlwZW9mIHByb2Nlc3MgPT09ICdvYmplY3QnICYmIHR5cGVvZiBwcm9jZXNzLm5leHRUaWNrID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIGFzeW5jLm5leHRUaWNrID0gcHJvY2Vzcy5uZXh0VGljaztcbiAgICB9IGVsc2Uge1xuICAgICAgICBhc3luYy5uZXh0VGljayA9IF9kZWxheTtcbiAgICB9XG4gICAgYXN5bmMuc2V0SW1tZWRpYXRlID0gX3NldEltbWVkaWF0ZSA/IF9kZWxheSA6IGFzeW5jLm5leHRUaWNrO1xuXG5cbiAgICBhc3luYy5mb3JFYWNoID1cbiAgICBhc3luYy5lYWNoID0gZnVuY3Rpb24gKGFyciwgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgIHJldHVybiBhc3luYy5lYWNoT2YoYXJyLCBfd2l0aG91dEluZGV4KGl0ZXJhdG9yKSwgY2FsbGJhY2spO1xuICAgIH07XG5cbiAgICBhc3luYy5mb3JFYWNoU2VyaWVzID1cbiAgICBhc3luYy5lYWNoU2VyaWVzID0gZnVuY3Rpb24gKGFyciwgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgIHJldHVybiBhc3luYy5lYWNoT2ZTZXJpZXMoYXJyLCBfd2l0aG91dEluZGV4KGl0ZXJhdG9yKSwgY2FsbGJhY2spO1xuICAgIH07XG5cblxuICAgIGFzeW5jLmZvckVhY2hMaW1pdCA9XG4gICAgYXN5bmMuZWFjaExpbWl0ID0gZnVuY3Rpb24gKGFyciwgbGltaXQsIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICByZXR1cm4gX2VhY2hPZkxpbWl0KGxpbWl0KShhcnIsIF93aXRob3V0SW5kZXgoaXRlcmF0b3IpLCBjYWxsYmFjayk7XG4gICAgfTtcblxuICAgIGFzeW5jLmZvckVhY2hPZiA9XG4gICAgYXN5bmMuZWFjaE9mID0gZnVuY3Rpb24gKG9iamVjdCwgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgIGNhbGxiYWNrID0gX29uY2UoY2FsbGJhY2sgfHwgbm9vcCk7XG4gICAgICAgIG9iamVjdCA9IG9iamVjdCB8fCBbXTtcblxuICAgICAgICB2YXIgaXRlciA9IF9rZXlJdGVyYXRvcihvYmplY3QpO1xuICAgICAgICB2YXIga2V5LCBjb21wbGV0ZWQgPSAwO1xuXG4gICAgICAgIHdoaWxlICgoa2V5ID0gaXRlcigpKSAhPSBudWxsKSB7XG4gICAgICAgICAgICBjb21wbGV0ZWQgKz0gMTtcbiAgICAgICAgICAgIGl0ZXJhdG9yKG9iamVjdFtrZXldLCBrZXksIG9ubHlfb25jZShkb25lKSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoY29tcGxldGVkID09PSAwKSBjYWxsYmFjayhudWxsKTtcblxuICAgICAgICBmdW5jdGlvbiBkb25lKGVycikge1xuICAgICAgICAgICAgY29tcGxldGVkLS07XG4gICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIENoZWNrIGtleSBpcyBudWxsIGluIGNhc2UgaXRlcmF0b3IgaXNuJ3QgZXhoYXVzdGVkXG4gICAgICAgICAgICAvLyBhbmQgZG9uZSByZXNvbHZlZCBzeW5jaHJvbm91c2x5LlxuICAgICAgICAgICAgZWxzZSBpZiAoa2V5ID09PSBudWxsICYmIGNvbXBsZXRlZCA8PSAwKSB7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2sobnVsbCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgYXN5bmMuZm9yRWFjaE9mU2VyaWVzID1cbiAgICBhc3luYy5lYWNoT2ZTZXJpZXMgPSBmdW5jdGlvbiAob2JqLCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgY2FsbGJhY2sgPSBfb25jZShjYWxsYmFjayB8fCBub29wKTtcbiAgICAgICAgb2JqID0gb2JqIHx8IFtdO1xuICAgICAgICB2YXIgbmV4dEtleSA9IF9rZXlJdGVyYXRvcihvYmopO1xuICAgICAgICB2YXIga2V5ID0gbmV4dEtleSgpO1xuICAgICAgICBmdW5jdGlvbiBpdGVyYXRlKCkge1xuICAgICAgICAgICAgdmFyIHN5bmMgPSB0cnVlO1xuICAgICAgICAgICAgaWYgKGtleSA9PT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBjYWxsYmFjayhudWxsKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGl0ZXJhdG9yKG9ialtrZXldLCBrZXksIG9ubHlfb25jZShmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAga2V5ID0gbmV4dEtleSgpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoa2V5ID09PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gY2FsbGJhY2sobnVsbCk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3luYykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFzeW5jLnNldEltbWVkaWF0ZShpdGVyYXRlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlcmF0ZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSkpO1xuICAgICAgICAgICAgc3luYyA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGl0ZXJhdGUoKTtcbiAgICB9O1xuXG5cblxuICAgIGFzeW5jLmZvckVhY2hPZkxpbWl0ID1cbiAgICBhc3luYy5lYWNoT2ZMaW1pdCA9IGZ1bmN0aW9uIChvYmosIGxpbWl0LCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgX2VhY2hPZkxpbWl0KGxpbWl0KShvYmosIGl0ZXJhdG9yLCBjYWxsYmFjayk7XG4gICAgfTtcblxuICAgIGZ1bmN0aW9uIF9lYWNoT2ZMaW1pdChsaW1pdCkge1xuXG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAob2JqLCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIGNhbGxiYWNrID0gX29uY2UoY2FsbGJhY2sgfHwgbm9vcCk7XG4gICAgICAgICAgICBvYmogPSBvYmogfHwgW107XG4gICAgICAgICAgICB2YXIgbmV4dEtleSA9IF9rZXlJdGVyYXRvcihvYmopO1xuICAgICAgICAgICAgaWYgKGxpbWl0IDw9IDApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gY2FsbGJhY2sobnVsbCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB2YXIgZG9uZSA9IGZhbHNlO1xuICAgICAgICAgICAgdmFyIHJ1bm5pbmcgPSAwO1xuICAgICAgICAgICAgdmFyIGVycm9yZWQgPSBmYWxzZTtcblxuICAgICAgICAgICAgKGZ1bmN0aW9uIHJlcGxlbmlzaCAoKSB7XG4gICAgICAgICAgICAgICAgaWYgKGRvbmUgJiYgcnVubmluZyA8PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBjYWxsYmFjayhudWxsKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB3aGlsZSAocnVubmluZyA8IGxpbWl0ICYmICFlcnJvcmVkKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBrZXkgPSBuZXh0S2V5KCk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChrZXkgPT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRvbmUgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJ1bm5pbmcgPD0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKG51bGwpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJ1bm5pbmcgKz0gMTtcbiAgICAgICAgICAgICAgICAgICAgaXRlcmF0b3Iob2JqW2tleV0sIGtleSwgb25seV9vbmNlKGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJ1bm5pbmcgLT0gMTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVwbGVuaXNoKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KSgpO1xuICAgICAgICB9O1xuICAgIH1cblxuXG4gICAgZnVuY3Rpb24gZG9QYXJhbGxlbChmbikge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKG9iaiwgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICByZXR1cm4gZm4oYXN5bmMuZWFjaE9mLCBvYmosIGl0ZXJhdG9yLCBjYWxsYmFjayk7XG4gICAgICAgIH07XG4gICAgfVxuICAgIGZ1bmN0aW9uIGRvUGFyYWxsZWxMaW1pdChmbikge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKG9iaiwgbGltaXQsIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICAgICAgcmV0dXJuIGZuKF9lYWNoT2ZMaW1pdChsaW1pdCksIG9iaiwgaXRlcmF0b3IsIGNhbGxiYWNrKTtcbiAgICAgICAgfTtcbiAgICB9XG4gICAgZnVuY3Rpb24gZG9TZXJpZXMoZm4pIHtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChvYmosIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICAgICAgcmV0dXJuIGZuKGFzeW5jLmVhY2hPZlNlcmllcywgb2JqLCBpdGVyYXRvciwgY2FsbGJhY2spO1xuICAgICAgICB9O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIF9hc3luY01hcChlYWNoZm4sIGFyciwgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgIGNhbGxiYWNrID0gX29uY2UoY2FsbGJhY2sgfHwgbm9vcCk7XG4gICAgICAgIGFyciA9IGFyciB8fCBbXTtcbiAgICAgICAgdmFyIHJlc3VsdHMgPSBfaXNBcnJheUxpa2UoYXJyKSA/IFtdIDoge307XG4gICAgICAgIGVhY2hmbihhcnIsIGZ1bmN0aW9uICh2YWx1ZSwgaW5kZXgsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICBpdGVyYXRvcih2YWx1ZSwgZnVuY3Rpb24gKGVyciwgdikge1xuICAgICAgICAgICAgICAgIHJlc3VsdHNbaW5kZXhdID0gdjtcbiAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgIGNhbGxiYWNrKGVyciwgcmVzdWx0cyk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGFzeW5jLm1hcCA9IGRvUGFyYWxsZWwoX2FzeW5jTWFwKTtcbiAgICBhc3luYy5tYXBTZXJpZXMgPSBkb1NlcmllcyhfYXN5bmNNYXApO1xuICAgIGFzeW5jLm1hcExpbWl0ID0gZG9QYXJhbGxlbExpbWl0KF9hc3luY01hcCk7XG5cbiAgICAvLyByZWR1Y2Ugb25seSBoYXMgYSBzZXJpZXMgdmVyc2lvbiwgYXMgZG9pbmcgcmVkdWNlIGluIHBhcmFsbGVsIHdvbid0XG4gICAgLy8gd29yayBpbiBtYW55IHNpdHVhdGlvbnMuXG4gICAgYXN5bmMuaW5qZWN0ID1cbiAgICBhc3luYy5mb2xkbCA9XG4gICAgYXN5bmMucmVkdWNlID0gZnVuY3Rpb24gKGFyciwgbWVtbywgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgIGFzeW5jLmVhY2hPZlNlcmllcyhhcnIsIGZ1bmN0aW9uICh4LCBpLCBjYWxsYmFjaykge1xuICAgICAgICAgICAgaXRlcmF0b3IobWVtbywgeCwgZnVuY3Rpb24gKGVyciwgdikge1xuICAgICAgICAgICAgICAgIG1lbW8gPSB2O1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSwgZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgY2FsbGJhY2soZXJyLCBtZW1vKTtcbiAgICAgICAgfSk7XG4gICAgfTtcblxuICAgIGFzeW5jLmZvbGRyID1cbiAgICBhc3luYy5yZWR1Y2VSaWdodCA9IGZ1bmN0aW9uIChhcnIsIG1lbW8sIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICB2YXIgcmV2ZXJzZWQgPSBfbWFwKGFyciwgaWRlbnRpdHkpLnJldmVyc2UoKTtcbiAgICAgICAgYXN5bmMucmVkdWNlKHJldmVyc2VkLCBtZW1vLCBpdGVyYXRvciwgY2FsbGJhY2spO1xuICAgIH07XG5cbiAgICBhc3luYy50cmFuc2Zvcm0gPSBmdW5jdGlvbiAoYXJyLCBtZW1vLCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDMpIHtcbiAgICAgICAgICAgIGNhbGxiYWNrID0gaXRlcmF0b3I7XG4gICAgICAgICAgICBpdGVyYXRvciA9IG1lbW87XG4gICAgICAgICAgICBtZW1vID0gX2lzQXJyYXkoYXJyKSA/IFtdIDoge307XG4gICAgICAgIH1cblxuICAgICAgICBhc3luYy5lYWNoT2YoYXJyLCBmdW5jdGlvbih2LCBrLCBjYikge1xuICAgICAgICAgICAgaXRlcmF0b3IobWVtbywgdiwgaywgY2IpO1xuICAgICAgICB9LCBmdW5jdGlvbihlcnIpIHtcbiAgICAgICAgICAgIGNhbGxiYWNrKGVyciwgbWVtbyk7XG4gICAgICAgIH0pO1xuICAgIH07XG5cbiAgICBmdW5jdGlvbiBfZmlsdGVyKGVhY2hmbiwgYXJyLCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgdmFyIHJlc3VsdHMgPSBbXTtcbiAgICAgICAgZWFjaGZuKGFyciwgZnVuY3Rpb24gKHgsIGluZGV4LCBjYWxsYmFjaykge1xuICAgICAgICAgICAgaXRlcmF0b3IoeCwgZnVuY3Rpb24gKHYpIHtcbiAgICAgICAgICAgICAgICBpZiAodikge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHRzLnB1c2goe2luZGV4OiBpbmRleCwgdmFsdWU6IHh9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2FsbGJhY2soKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBjYWxsYmFjayhfbWFwKHJlc3VsdHMuc29ydChmdW5jdGlvbiAoYSwgYikge1xuICAgICAgICAgICAgICAgIHJldHVybiBhLmluZGV4IC0gYi5pbmRleDtcbiAgICAgICAgICAgIH0pLCBmdW5jdGlvbiAoeCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB4LnZhbHVlO1xuICAgICAgICAgICAgfSkpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBhc3luYy5zZWxlY3QgPVxuICAgIGFzeW5jLmZpbHRlciA9IGRvUGFyYWxsZWwoX2ZpbHRlcik7XG5cbiAgICBhc3luYy5zZWxlY3RMaW1pdCA9XG4gICAgYXN5bmMuZmlsdGVyTGltaXQgPSBkb1BhcmFsbGVsTGltaXQoX2ZpbHRlcik7XG5cbiAgICBhc3luYy5zZWxlY3RTZXJpZXMgPVxuICAgIGFzeW5jLmZpbHRlclNlcmllcyA9IGRvU2VyaWVzKF9maWx0ZXIpO1xuXG4gICAgZnVuY3Rpb24gX3JlamVjdChlYWNoZm4sIGFyciwgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgIF9maWx0ZXIoZWFjaGZuLCBhcnIsIGZ1bmN0aW9uKHZhbHVlLCBjYikge1xuICAgICAgICAgICAgaXRlcmF0b3IodmFsdWUsIGZ1bmN0aW9uKHYpIHtcbiAgICAgICAgICAgICAgICBjYighdik7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSwgY2FsbGJhY2spO1xuICAgIH1cbiAgICBhc3luYy5yZWplY3QgPSBkb1BhcmFsbGVsKF9yZWplY3QpO1xuICAgIGFzeW5jLnJlamVjdExpbWl0ID0gZG9QYXJhbGxlbExpbWl0KF9yZWplY3QpO1xuICAgIGFzeW5jLnJlamVjdFNlcmllcyA9IGRvU2VyaWVzKF9yZWplY3QpO1xuXG4gICAgZnVuY3Rpb24gX2NyZWF0ZVRlc3RlcihlYWNoZm4sIGNoZWNrLCBnZXRSZXN1bHQpIHtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKGFyciwgbGltaXQsIGl0ZXJhdG9yLCBjYikge1xuICAgICAgICAgICAgZnVuY3Rpb24gZG9uZSgpIHtcbiAgICAgICAgICAgICAgICBpZiAoY2IpIGNiKGdldFJlc3VsdChmYWxzZSwgdm9pZCAwKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmdW5jdGlvbiBpdGVyYXRlZSh4LCBfLCBjYWxsYmFjaykge1xuICAgICAgICAgICAgICAgIGlmICghY2IpIHJldHVybiBjYWxsYmFjaygpO1xuICAgICAgICAgICAgICAgIGl0ZXJhdG9yKHgsIGZ1bmN0aW9uICh2KSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChjYiAmJiBjaGVjayh2KSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY2IoZ2V0UmVzdWx0KHRydWUsIHgpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNiID0gaXRlcmF0b3IgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPiAzKSB7XG4gICAgICAgICAgICAgICAgZWFjaGZuKGFyciwgbGltaXQsIGl0ZXJhdGVlLCBkb25lKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgY2IgPSBpdGVyYXRvcjtcbiAgICAgICAgICAgICAgICBpdGVyYXRvciA9IGxpbWl0O1xuICAgICAgICAgICAgICAgIGVhY2hmbihhcnIsIGl0ZXJhdGVlLCBkb25lKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBhc3luYy5hbnkgPVxuICAgIGFzeW5jLnNvbWUgPSBfY3JlYXRlVGVzdGVyKGFzeW5jLmVhY2hPZiwgdG9Cb29sLCBpZGVudGl0eSk7XG5cbiAgICBhc3luYy5zb21lTGltaXQgPSBfY3JlYXRlVGVzdGVyKGFzeW5jLmVhY2hPZkxpbWl0LCB0b0Jvb2wsIGlkZW50aXR5KTtcblxuICAgIGFzeW5jLmFsbCA9XG4gICAgYXN5bmMuZXZlcnkgPSBfY3JlYXRlVGVzdGVyKGFzeW5jLmVhY2hPZiwgbm90SWQsIG5vdElkKTtcblxuICAgIGFzeW5jLmV2ZXJ5TGltaXQgPSBfY3JlYXRlVGVzdGVyKGFzeW5jLmVhY2hPZkxpbWl0LCBub3RJZCwgbm90SWQpO1xuXG4gICAgZnVuY3Rpb24gX2ZpbmRHZXRSZXN1bHQodiwgeCkge1xuICAgICAgICByZXR1cm4geDtcbiAgICB9XG4gICAgYXN5bmMuZGV0ZWN0ID0gX2NyZWF0ZVRlc3Rlcihhc3luYy5lYWNoT2YsIGlkZW50aXR5LCBfZmluZEdldFJlc3VsdCk7XG4gICAgYXN5bmMuZGV0ZWN0U2VyaWVzID0gX2NyZWF0ZVRlc3Rlcihhc3luYy5lYWNoT2ZTZXJpZXMsIGlkZW50aXR5LCBfZmluZEdldFJlc3VsdCk7XG4gICAgYXN5bmMuZGV0ZWN0TGltaXQgPSBfY3JlYXRlVGVzdGVyKGFzeW5jLmVhY2hPZkxpbWl0LCBpZGVudGl0eSwgX2ZpbmRHZXRSZXN1bHQpO1xuXG4gICAgYXN5bmMuc29ydEJ5ID0gZnVuY3Rpb24gKGFyciwgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgIGFzeW5jLm1hcChhcnIsIGZ1bmN0aW9uICh4LCBjYWxsYmFjaykge1xuICAgICAgICAgICAgaXRlcmF0b3IoeCwgZnVuY3Rpb24gKGVyciwgY3JpdGVyaWEpIHtcbiAgICAgICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhudWxsLCB7dmFsdWU6IHgsIGNyaXRlcmlhOiBjcml0ZXJpYX0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LCBmdW5jdGlvbiAoZXJyLCByZXN1bHRzKSB7XG4gICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBjYWxsYmFjayhudWxsLCBfbWFwKHJlc3VsdHMuc29ydChjb21wYXJhdG9yKSwgZnVuY3Rpb24gKHgpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHgudmFsdWU7XG4gICAgICAgICAgICAgICAgfSkpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGZ1bmN0aW9uIGNvbXBhcmF0b3IobGVmdCwgcmlnaHQpIHtcbiAgICAgICAgICAgIHZhciBhID0gbGVmdC5jcml0ZXJpYSwgYiA9IHJpZ2h0LmNyaXRlcmlhO1xuICAgICAgICAgICAgcmV0dXJuIGEgPCBiID8gLTEgOiBhID4gYiA/IDEgOiAwO1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIGFzeW5jLmF1dG8gPSBmdW5jdGlvbiAodGFza3MsIGNvbmN1cnJlbmN5LCBjYWxsYmFjaykge1xuICAgICAgICBpZiAoIWNhbGxiYWNrKSB7XG4gICAgICAgICAgICAvLyBjb25jdXJyZW5jeSBpcyBvcHRpb25hbCwgc2hpZnQgdGhlIGFyZ3MuXG4gICAgICAgICAgICBjYWxsYmFjayA9IGNvbmN1cnJlbmN5O1xuICAgICAgICAgICAgY29uY3VycmVuY3kgPSBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGNhbGxiYWNrID0gX29uY2UoY2FsbGJhY2sgfHwgbm9vcCk7XG4gICAgICAgIHZhciBrZXlzID0gX2tleXModGFza3MpO1xuICAgICAgICB2YXIgcmVtYWluaW5nVGFza3MgPSBrZXlzLmxlbmd0aDtcbiAgICAgICAgaWYgKCFyZW1haW5pbmdUYXNrcykge1xuICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKG51bGwpO1xuICAgICAgICB9XG4gICAgICAgIGlmICghY29uY3VycmVuY3kpIHtcbiAgICAgICAgICAgIGNvbmN1cnJlbmN5ID0gcmVtYWluaW5nVGFza3M7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgcmVzdWx0cyA9IHt9O1xuICAgICAgICB2YXIgcnVubmluZ1Rhc2tzID0gMDtcblxuICAgICAgICB2YXIgbGlzdGVuZXJzID0gW107XG4gICAgICAgIGZ1bmN0aW9uIGFkZExpc3RlbmVyKGZuKSB7XG4gICAgICAgICAgICBsaXN0ZW5lcnMudW5zaGlmdChmbik7XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gcmVtb3ZlTGlzdGVuZXIoZm4pIHtcbiAgICAgICAgICAgIHZhciBpZHggPSBfaW5kZXhPZihsaXN0ZW5lcnMsIGZuKTtcbiAgICAgICAgICAgIGlmIChpZHggPj0gMCkgbGlzdGVuZXJzLnNwbGljZShpZHgsIDEpO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIHRhc2tDb21wbGV0ZSgpIHtcbiAgICAgICAgICAgIHJlbWFpbmluZ1Rhc2tzLS07XG4gICAgICAgICAgICBfYXJyYXlFYWNoKGxpc3RlbmVycy5zbGljZSgwKSwgZnVuY3Rpb24gKGZuKSB7XG4gICAgICAgICAgICAgICAgZm4oKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgYWRkTGlzdGVuZXIoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgaWYgKCFyZW1haW5pbmdUYXNrcykge1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrKG51bGwsIHJlc3VsdHMpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICBfYXJyYXlFYWNoKGtleXMsIGZ1bmN0aW9uIChrKSB7XG4gICAgICAgICAgICB2YXIgdGFzayA9IF9pc0FycmF5KHRhc2tzW2tdKSA/IHRhc2tzW2tdOiBbdGFza3Nba11dO1xuICAgICAgICAgICAgdmFyIHRhc2tDYWxsYmFjayA9IF9yZXN0UGFyYW0oZnVuY3Rpb24oZXJyLCBhcmdzKSB7XG4gICAgICAgICAgICAgICAgcnVubmluZ1Rhc2tzLS07XG4gICAgICAgICAgICAgICAgaWYgKGFyZ3MubGVuZ3RoIDw9IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgYXJncyA9IGFyZ3NbMF07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHNhZmVSZXN1bHRzID0ge307XG4gICAgICAgICAgICAgICAgICAgIF9mb3JFYWNoT2YocmVzdWx0cywgZnVuY3Rpb24odmFsLCBya2V5KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzYWZlUmVzdWx0c1tya2V5XSA9IHZhbDtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIHNhZmVSZXN1bHRzW2tdID0gYXJncztcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soZXJyLCBzYWZlUmVzdWx0cyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHRzW2tdID0gYXJncztcbiAgICAgICAgICAgICAgICAgICAgYXN5bmMuc2V0SW1tZWRpYXRlKHRhc2tDb21wbGV0ZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB2YXIgcmVxdWlyZXMgPSB0YXNrLnNsaWNlKDAsIHRhc2subGVuZ3RoIC0gMSk7XG4gICAgICAgICAgICAvLyBwcmV2ZW50IGRlYWQtbG9ja3NcbiAgICAgICAgICAgIHZhciBsZW4gPSByZXF1aXJlcy5sZW5ndGg7XG4gICAgICAgICAgICB2YXIgZGVwO1xuICAgICAgICAgICAgd2hpbGUgKGxlbi0tKSB7XG4gICAgICAgICAgICAgICAgaWYgKCEoZGVwID0gdGFza3NbcmVxdWlyZXNbbGVuXV0pKSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignSGFzIGluZXhpc3RhbnQgZGVwZW5kZW5jeScpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoX2lzQXJyYXkoZGVwKSAmJiBfaW5kZXhPZihkZXAsIGspID49IDApIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdIYXMgY3ljbGljIGRlcGVuZGVuY2llcycpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZ1bmN0aW9uIHJlYWR5KCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBydW5uaW5nVGFza3MgPCBjb25jdXJyZW5jeSAmJiBfcmVkdWNlKHJlcXVpcmVzLCBmdW5jdGlvbiAoYSwgeCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gKGEgJiYgcmVzdWx0cy5oYXNPd25Qcm9wZXJ0eSh4KSk7XG4gICAgICAgICAgICAgICAgfSwgdHJ1ZSkgJiYgIXJlc3VsdHMuaGFzT3duUHJvcGVydHkoayk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAocmVhZHkoKSkge1xuICAgICAgICAgICAgICAgIHJ1bm5pbmdUYXNrcysrO1xuICAgICAgICAgICAgICAgIHRhc2tbdGFzay5sZW5ndGggLSAxXSh0YXNrQ2FsbGJhY2ssIHJlc3VsdHMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgYWRkTGlzdGVuZXIobGlzdGVuZXIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZnVuY3Rpb24gbGlzdGVuZXIoKSB7XG4gICAgICAgICAgICAgICAgaWYgKHJlYWR5KCkpIHtcbiAgICAgICAgICAgICAgICAgICAgcnVubmluZ1Rhc2tzKys7XG4gICAgICAgICAgICAgICAgICAgIHJlbW92ZUxpc3RlbmVyKGxpc3RlbmVyKTtcbiAgICAgICAgICAgICAgICAgICAgdGFza1t0YXNrLmxlbmd0aCAtIDFdKHRhc2tDYWxsYmFjaywgcmVzdWx0cyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9O1xuXG5cblxuICAgIGFzeW5jLnJldHJ5ID0gZnVuY3Rpb24odGltZXMsIHRhc2ssIGNhbGxiYWNrKSB7XG4gICAgICAgIHZhciBERUZBVUxUX1RJTUVTID0gNTtcbiAgICAgICAgdmFyIERFRkFVTFRfSU5URVJWQUwgPSAwO1xuXG4gICAgICAgIHZhciBhdHRlbXB0cyA9IFtdO1xuXG4gICAgICAgIHZhciBvcHRzID0ge1xuICAgICAgICAgICAgdGltZXM6IERFRkFVTFRfVElNRVMsXG4gICAgICAgICAgICBpbnRlcnZhbDogREVGQVVMVF9JTlRFUlZBTFxuICAgICAgICB9O1xuXG4gICAgICAgIGZ1bmN0aW9uIHBhcnNlVGltZXMoYWNjLCB0KXtcbiAgICAgICAgICAgIGlmKHR5cGVvZiB0ID09PSAnbnVtYmVyJyl7XG4gICAgICAgICAgICAgICAgYWNjLnRpbWVzID0gcGFyc2VJbnQodCwgMTApIHx8IERFRkFVTFRfVElNRVM7XG4gICAgICAgICAgICB9IGVsc2UgaWYodHlwZW9mIHQgPT09ICdvYmplY3QnKXtcbiAgICAgICAgICAgICAgICBhY2MudGltZXMgPSBwYXJzZUludCh0LnRpbWVzLCAxMCkgfHwgREVGQVVMVF9USU1FUztcbiAgICAgICAgICAgICAgICBhY2MuaW50ZXJ2YWwgPSBwYXJzZUludCh0LmludGVydmFsLCAxMCkgfHwgREVGQVVMVF9JTlRFUlZBTDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdVbnN1cHBvcnRlZCBhcmd1bWVudCB0eXBlIGZvciBcXCd0aW1lc1xcJzogJyArIHR5cGVvZiB0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBsZW5ndGggPSBhcmd1bWVudHMubGVuZ3RoO1xuICAgICAgICBpZiAobGVuZ3RoIDwgMSB8fCBsZW5ndGggPiAzKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgYXJndW1lbnRzIC0gbXVzdCBiZSBlaXRoZXIgKHRhc2spLCAodGFzaywgY2FsbGJhY2spLCAodGltZXMsIHRhc2spIG9yICh0aW1lcywgdGFzaywgY2FsbGJhY2spJyk7XG4gICAgICAgIH0gZWxzZSBpZiAobGVuZ3RoIDw9IDIgJiYgdHlwZW9mIHRpbWVzID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICBjYWxsYmFjayA9IHRhc2s7XG4gICAgICAgICAgICB0YXNrID0gdGltZXM7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHR5cGVvZiB0aW1lcyAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgcGFyc2VUaW1lcyhvcHRzLCB0aW1lcyk7XG4gICAgICAgIH1cbiAgICAgICAgb3B0cy5jYWxsYmFjayA9IGNhbGxiYWNrO1xuICAgICAgICBvcHRzLnRhc2sgPSB0YXNrO1xuXG4gICAgICAgIGZ1bmN0aW9uIHdyYXBwZWRUYXNrKHdyYXBwZWRDYWxsYmFjaywgd3JhcHBlZFJlc3VsdHMpIHtcbiAgICAgICAgICAgIGZ1bmN0aW9uIHJldHJ5QXR0ZW1wdCh0YXNrLCBmaW5hbEF0dGVtcHQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24oc2VyaWVzQ2FsbGJhY2spIHtcbiAgICAgICAgICAgICAgICAgICAgdGFzayhmdW5jdGlvbihlcnIsIHJlc3VsdCl7XG4gICAgICAgICAgICAgICAgICAgICAgICBzZXJpZXNDYWxsYmFjayghZXJyIHx8IGZpbmFsQXR0ZW1wdCwge2VycjogZXJyLCByZXN1bHQ6IHJlc3VsdH0pO1xuICAgICAgICAgICAgICAgICAgICB9LCB3cmFwcGVkUmVzdWx0cyk7XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZnVuY3Rpb24gcmV0cnlJbnRlcnZhbChpbnRlcnZhbCl7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKHNlcmllc0NhbGxiYWNrKXtcbiAgICAgICAgICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpe1xuICAgICAgICAgICAgICAgICAgICAgICAgc2VyaWVzQ2FsbGJhY2sobnVsbCk7XG4gICAgICAgICAgICAgICAgICAgIH0sIGludGVydmFsKTtcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB3aGlsZSAob3B0cy50aW1lcykge1xuXG4gICAgICAgICAgICAgICAgdmFyIGZpbmFsQXR0ZW1wdCA9ICEob3B0cy50aW1lcy09MSk7XG4gICAgICAgICAgICAgICAgYXR0ZW1wdHMucHVzaChyZXRyeUF0dGVtcHQob3B0cy50YXNrLCBmaW5hbEF0dGVtcHQpKTtcbiAgICAgICAgICAgICAgICBpZighZmluYWxBdHRlbXB0ICYmIG9wdHMuaW50ZXJ2YWwgPiAwKXtcbiAgICAgICAgICAgICAgICAgICAgYXR0ZW1wdHMucHVzaChyZXRyeUludGVydmFsKG9wdHMuaW50ZXJ2YWwpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGFzeW5jLnNlcmllcyhhdHRlbXB0cywgZnVuY3Rpb24oZG9uZSwgZGF0YSl7XG4gICAgICAgICAgICAgICAgZGF0YSA9IGRhdGFbZGF0YS5sZW5ndGggLSAxXTtcbiAgICAgICAgICAgICAgICAod3JhcHBlZENhbGxiYWNrIHx8IG9wdHMuY2FsbGJhY2spKGRhdGEuZXJyLCBkYXRhLnJlc3VsdCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIElmIGEgY2FsbGJhY2sgaXMgcGFzc2VkLCBydW4gdGhpcyBhcyBhIGNvbnRyb2xsIGZsb3dcbiAgICAgICAgcmV0dXJuIG9wdHMuY2FsbGJhY2sgPyB3cmFwcGVkVGFzaygpIDogd3JhcHBlZFRhc2s7XG4gICAgfTtcblxuICAgIGFzeW5jLndhdGVyZmFsbCA9IGZ1bmN0aW9uICh0YXNrcywgY2FsbGJhY2spIHtcbiAgICAgICAgY2FsbGJhY2sgPSBfb25jZShjYWxsYmFjayB8fCBub29wKTtcbiAgICAgICAgaWYgKCFfaXNBcnJheSh0YXNrcykpIHtcbiAgICAgICAgICAgIHZhciBlcnIgPSBuZXcgRXJyb3IoJ0ZpcnN0IGFyZ3VtZW50IHRvIHdhdGVyZmFsbCBtdXN0IGJlIGFuIGFycmF5IG9mIGZ1bmN0aW9ucycpO1xuICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKGVycik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCF0YXNrcy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHJldHVybiBjYWxsYmFjaygpO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIHdyYXBJdGVyYXRvcihpdGVyYXRvcikge1xuICAgICAgICAgICAgcmV0dXJuIF9yZXN0UGFyYW0oZnVuY3Rpb24gKGVyciwgYXJncykge1xuICAgICAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2suYXBwbHkobnVsbCwgW2Vycl0uY29uY2F0KGFyZ3MpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBuZXh0ID0gaXRlcmF0b3IubmV4dCgpO1xuICAgICAgICAgICAgICAgICAgICBpZiAobmV4dCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgYXJncy5wdXNoKHdyYXBJdGVyYXRvcihuZXh0KSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhcmdzLnB1c2goY2FsbGJhY2spO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVuc3VyZUFzeW5jKGl0ZXJhdG9yKS5hcHBseShudWxsLCBhcmdzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICB3cmFwSXRlcmF0b3IoYXN5bmMuaXRlcmF0b3IodGFza3MpKSgpO1xuICAgIH07XG5cbiAgICBmdW5jdGlvbiBfcGFyYWxsZWwoZWFjaGZuLCB0YXNrcywgY2FsbGJhY2spIHtcbiAgICAgICAgY2FsbGJhY2sgPSBjYWxsYmFjayB8fCBub29wO1xuICAgICAgICB2YXIgcmVzdWx0cyA9IF9pc0FycmF5TGlrZSh0YXNrcykgPyBbXSA6IHt9O1xuXG4gICAgICAgIGVhY2hmbih0YXNrcywgZnVuY3Rpb24gKHRhc2ssIGtleSwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIHRhc2soX3Jlc3RQYXJhbShmdW5jdGlvbiAoZXJyLCBhcmdzKSB7XG4gICAgICAgICAgICAgICAgaWYgKGFyZ3MubGVuZ3RoIDw9IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgYXJncyA9IGFyZ3NbMF07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJlc3VsdHNba2V5XSA9IGFyZ3M7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgfSwgZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgY2FsbGJhY2soZXJyLCByZXN1bHRzKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgYXN5bmMucGFyYWxsZWwgPSBmdW5jdGlvbiAodGFza3MsIGNhbGxiYWNrKSB7XG4gICAgICAgIF9wYXJhbGxlbChhc3luYy5lYWNoT2YsIHRhc2tzLCBjYWxsYmFjayk7XG4gICAgfTtcblxuICAgIGFzeW5jLnBhcmFsbGVsTGltaXQgPSBmdW5jdGlvbih0YXNrcywgbGltaXQsIGNhbGxiYWNrKSB7XG4gICAgICAgIF9wYXJhbGxlbChfZWFjaE9mTGltaXQobGltaXQpLCB0YXNrcywgY2FsbGJhY2spO1xuICAgIH07XG5cbiAgICBhc3luYy5zZXJpZXMgPSBmdW5jdGlvbih0YXNrcywgY2FsbGJhY2spIHtcbiAgICAgICAgX3BhcmFsbGVsKGFzeW5jLmVhY2hPZlNlcmllcywgdGFza3MsIGNhbGxiYWNrKTtcbiAgICB9O1xuXG4gICAgYXN5bmMuaXRlcmF0b3IgPSBmdW5jdGlvbiAodGFza3MpIHtcbiAgICAgICAgZnVuY3Rpb24gbWFrZUNhbGxiYWNrKGluZGV4KSB7XG4gICAgICAgICAgICBmdW5jdGlvbiBmbigpIHtcbiAgICAgICAgICAgICAgICBpZiAodGFza3MubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgIHRhc2tzW2luZGV4XS5hcHBseShudWxsLCBhcmd1bWVudHMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gZm4ubmV4dCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZm4ubmV4dCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gKGluZGV4IDwgdGFza3MubGVuZ3RoIC0gMSkgPyBtYWtlQ2FsbGJhY2soaW5kZXggKyAxKTogbnVsbDtcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICByZXR1cm4gZm47XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG1ha2VDYWxsYmFjaygwKTtcbiAgICB9O1xuXG4gICAgYXN5bmMuYXBwbHkgPSBfcmVzdFBhcmFtKGZ1bmN0aW9uIChmbiwgYXJncykge1xuICAgICAgICByZXR1cm4gX3Jlc3RQYXJhbShmdW5jdGlvbiAoY2FsbEFyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybiBmbi5hcHBseShcbiAgICAgICAgICAgICAgICBudWxsLCBhcmdzLmNvbmNhdChjYWxsQXJncylcbiAgICAgICAgICAgICk7XG4gICAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgZnVuY3Rpb24gX2NvbmNhdChlYWNoZm4sIGFyciwgZm4sIGNhbGxiYWNrKSB7XG4gICAgICAgIHZhciByZXN1bHQgPSBbXTtcbiAgICAgICAgZWFjaGZuKGFyciwgZnVuY3Rpb24gKHgsIGluZGV4LCBjYikge1xuICAgICAgICAgICAgZm4oeCwgZnVuY3Rpb24gKGVyciwgeSkge1xuICAgICAgICAgICAgICAgIHJlc3VsdCA9IHJlc3VsdC5jb25jYXQoeSB8fCBbXSk7XG4gICAgICAgICAgICAgICAgY2IoZXJyKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICBjYWxsYmFjayhlcnIsIHJlc3VsdCk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBhc3luYy5jb25jYXQgPSBkb1BhcmFsbGVsKF9jb25jYXQpO1xuICAgIGFzeW5jLmNvbmNhdFNlcmllcyA9IGRvU2VyaWVzKF9jb25jYXQpO1xuXG4gICAgYXN5bmMud2hpbHN0ID0gZnVuY3Rpb24gKHRlc3QsIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICBjYWxsYmFjayA9IGNhbGxiYWNrIHx8IG5vb3A7XG4gICAgICAgIGlmICh0ZXN0KCkpIHtcbiAgICAgICAgICAgIHZhciBuZXh0ID0gX3Jlc3RQYXJhbShmdW5jdGlvbihlcnIsIGFyZ3MpIHtcbiAgICAgICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0ZXN0LmFwcGx5KHRoaXMsIGFyZ3MpKSB7XG4gICAgICAgICAgICAgICAgICAgIGl0ZXJhdG9yKG5leHQpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKG51bGwpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgaXRlcmF0b3IobmV4dCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjYWxsYmFjayhudWxsKTtcbiAgICAgICAgfVxuICAgIH07XG5cbiAgICBhc3luYy5kb1doaWxzdCA9IGZ1bmN0aW9uIChpdGVyYXRvciwgdGVzdCwgY2FsbGJhY2spIHtcbiAgICAgICAgdmFyIGNhbGxzID0gMDtcbiAgICAgICAgcmV0dXJuIGFzeW5jLndoaWxzdChmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIHJldHVybiArK2NhbGxzIDw9IDEgfHwgdGVzdC5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgICAgICB9LCBpdGVyYXRvciwgY2FsbGJhY2spO1xuICAgIH07XG5cbiAgICBhc3luYy51bnRpbCA9IGZ1bmN0aW9uICh0ZXN0LCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgcmV0dXJuIGFzeW5jLndoaWxzdChmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIHJldHVybiAhdGVzdC5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgICAgICB9LCBpdGVyYXRvciwgY2FsbGJhY2spO1xuICAgIH07XG5cbiAgICBhc3luYy5kb1VudGlsID0gZnVuY3Rpb24gKGl0ZXJhdG9yLCB0ZXN0LCBjYWxsYmFjaykge1xuICAgICAgICByZXR1cm4gYXN5bmMuZG9XaGlsc3QoaXRlcmF0b3IsIGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgcmV0dXJuICF0ZXN0LmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgICAgIH0sIGNhbGxiYWNrKTtcbiAgICB9O1xuXG4gICAgYXN5bmMuZHVyaW5nID0gZnVuY3Rpb24gKHRlc3QsIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICBjYWxsYmFjayA9IGNhbGxiYWNrIHx8IG5vb3A7XG5cbiAgICAgICAgdmFyIG5leHQgPSBfcmVzdFBhcmFtKGZ1bmN0aW9uKGVyciwgYXJncykge1xuICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGFyZ3MucHVzaChjaGVjayk7XG4gICAgICAgICAgICAgICAgdGVzdC5hcHBseSh0aGlzLCBhcmdzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgdmFyIGNoZWNrID0gZnVuY3Rpb24oZXJyLCB0cnV0aCkge1xuICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHRydXRoKSB7XG4gICAgICAgICAgICAgICAgaXRlcmF0b3IobmV4dCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrKG51bGwpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuXG4gICAgICAgIHRlc3QoY2hlY2spO1xuICAgIH07XG5cbiAgICBhc3luYy5kb0R1cmluZyA9IGZ1bmN0aW9uIChpdGVyYXRvciwgdGVzdCwgY2FsbGJhY2spIHtcbiAgICAgICAgdmFyIGNhbGxzID0gMDtcbiAgICAgICAgYXN5bmMuZHVyaW5nKGZ1bmN0aW9uKG5leHQpIHtcbiAgICAgICAgICAgIGlmIChjYWxscysrIDwgMSkge1xuICAgICAgICAgICAgICAgIG5leHQobnVsbCwgdHJ1ZSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRlc3QuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSwgaXRlcmF0b3IsIGNhbGxiYWNrKTtcbiAgICB9O1xuXG4gICAgZnVuY3Rpb24gX3F1ZXVlKHdvcmtlciwgY29uY3VycmVuY3ksIHBheWxvYWQpIHtcbiAgICAgICAgaWYgKGNvbmN1cnJlbmN5ID09IG51bGwpIHtcbiAgICAgICAgICAgIGNvbmN1cnJlbmN5ID0gMTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmKGNvbmN1cnJlbmN5ID09PSAwKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0NvbmN1cnJlbmN5IG11c3Qgbm90IGJlIHplcm8nKTtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBfaW5zZXJ0KHEsIGRhdGEsIHBvcywgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIGlmIChjYWxsYmFjayAhPSBudWxsICYmIHR5cGVvZiBjYWxsYmFjayAhPT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwidGFzayBjYWxsYmFjayBtdXN0IGJlIGEgZnVuY3Rpb25cIik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBxLnN0YXJ0ZWQgPSB0cnVlO1xuICAgICAgICAgICAgaWYgKCFfaXNBcnJheShkYXRhKSkge1xuICAgICAgICAgICAgICAgIGRhdGEgPSBbZGF0YV07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZihkYXRhLmxlbmd0aCA9PT0gMCAmJiBxLmlkbGUoKSkge1xuICAgICAgICAgICAgICAgIC8vIGNhbGwgZHJhaW4gaW1tZWRpYXRlbHkgaWYgdGhlcmUgYXJlIG5vIHRhc2tzXG4gICAgICAgICAgICAgICAgcmV0dXJuIGFzeW5jLnNldEltbWVkaWF0ZShmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgICAgcS5kcmFpbigpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgX2FycmF5RWFjaChkYXRhLCBmdW5jdGlvbih0YXNrKSB7XG4gICAgICAgICAgICAgICAgdmFyIGl0ZW0gPSB7XG4gICAgICAgICAgICAgICAgICAgIGRhdGE6IHRhc2ssXG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrOiBjYWxsYmFjayB8fCBub29wXG4gICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgIGlmIChwb3MpIHtcbiAgICAgICAgICAgICAgICAgICAgcS50YXNrcy51bnNoaWZ0KGl0ZW0pO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHEudGFza3MucHVzaChpdGVtKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAocS50YXNrcy5sZW5ndGggPT09IHEuY29uY3VycmVuY3kpIHtcbiAgICAgICAgICAgICAgICAgICAgcS5zYXR1cmF0ZWQoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGFzeW5jLnNldEltbWVkaWF0ZShxLnByb2Nlc3MpO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIF9uZXh0KHEsIHRhc2tzKSB7XG4gICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24oKXtcbiAgICAgICAgICAgICAgICB3b3JrZXJzIC09IDE7XG5cbiAgICAgICAgICAgICAgICB2YXIgcmVtb3ZlZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHZhciBhcmdzID0gYXJndW1lbnRzO1xuICAgICAgICAgICAgICAgIF9hcnJheUVhY2godGFza3MsIGZ1bmN0aW9uICh0YXNrKSB7XG4gICAgICAgICAgICAgICAgICAgIF9hcnJheUVhY2god29ya2Vyc0xpc3QsIGZ1bmN0aW9uICh3b3JrZXIsIGluZGV4KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAod29ya2VyID09PSB0YXNrICYmICFyZW1vdmVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd29ya2Vyc0xpc3Quc3BsaWNlKGluZGV4LCAxKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZW1vdmVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICAgICAgdGFzay5jYWxsYmFjay5hcHBseSh0YXNrLCBhcmdzKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBpZiAocS50YXNrcy5sZW5ndGggKyB3b3JrZXJzID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIHEuZHJhaW4oKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcS5wcm9jZXNzKCk7XG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIHdvcmtlcnMgPSAwO1xuICAgICAgICB2YXIgd29ya2Vyc0xpc3QgPSBbXTtcbiAgICAgICAgdmFyIHEgPSB7XG4gICAgICAgICAgICB0YXNrczogW10sXG4gICAgICAgICAgICBjb25jdXJyZW5jeTogY29uY3VycmVuY3ksXG4gICAgICAgICAgICBwYXlsb2FkOiBwYXlsb2FkLFxuICAgICAgICAgICAgc2F0dXJhdGVkOiBub29wLFxuICAgICAgICAgICAgZW1wdHk6IG5vb3AsXG4gICAgICAgICAgICBkcmFpbjogbm9vcCxcbiAgICAgICAgICAgIHN0YXJ0ZWQ6IGZhbHNlLFxuICAgICAgICAgICAgcGF1c2VkOiBmYWxzZSxcbiAgICAgICAgICAgIHB1c2g6IGZ1bmN0aW9uIChkYXRhLCBjYWxsYmFjaykge1xuICAgICAgICAgICAgICAgIF9pbnNlcnQocSwgZGF0YSwgZmFsc2UsIGNhbGxiYWNrKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBraWxsOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgcS5kcmFpbiA9IG5vb3A7XG4gICAgICAgICAgICAgICAgcS50YXNrcyA9IFtdO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHVuc2hpZnQ6IGZ1bmN0aW9uIChkYXRhLCBjYWxsYmFjaykge1xuICAgICAgICAgICAgICAgIF9pbnNlcnQocSwgZGF0YSwgdHJ1ZSwgY2FsbGJhY2spO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHByb2Nlc3M6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBpZiAoIXEucGF1c2VkICYmIHdvcmtlcnMgPCBxLmNvbmN1cnJlbmN5ICYmIHEudGFza3MubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgIHdoaWxlKHdvcmtlcnMgPCBxLmNvbmN1cnJlbmN5ICYmIHEudGFza3MubGVuZ3RoKXtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0YXNrcyA9IHEucGF5bG9hZCA/XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcS50YXNrcy5zcGxpY2UoMCwgcS5wYXlsb2FkKSA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcS50YXNrcy5zcGxpY2UoMCwgcS50YXNrcy5sZW5ndGgpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgZGF0YSA9IF9tYXAodGFza3MsIGZ1bmN0aW9uICh0YXNrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRhc2suZGF0YTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocS50YXNrcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBxLmVtcHR5KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB3b3JrZXJzICs9IDE7XG4gICAgICAgICAgICAgICAgICAgICAgICB3b3JrZXJzTGlzdC5wdXNoKHRhc2tzWzBdKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjYiA9IG9ubHlfb25jZShfbmV4dChxLCB0YXNrcykpO1xuICAgICAgICAgICAgICAgICAgICAgICAgd29ya2VyKGRhdGEsIGNiKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBsZW5ndGg6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcS50YXNrcy5sZW5ndGg7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcnVubmluZzogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB3b3JrZXJzO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHdvcmtlcnNMaXN0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHdvcmtlcnNMaXN0O1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGlkbGU6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBxLnRhc2tzLmxlbmd0aCArIHdvcmtlcnMgPT09IDA7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcGF1c2U6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBxLnBhdXNlZCA9IHRydWU7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcmVzdW1lOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgaWYgKHEucGF1c2VkID09PSBmYWxzZSkgeyByZXR1cm47IH1cbiAgICAgICAgICAgICAgICBxLnBhdXNlZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHZhciByZXN1bWVDb3VudCA9IE1hdGgubWluKHEuY29uY3VycmVuY3ksIHEudGFza3MubGVuZ3RoKTtcbiAgICAgICAgICAgICAgICAvLyBOZWVkIHRvIGNhbGwgcS5wcm9jZXNzIG9uY2UgcGVyIGNvbmN1cnJlbnRcbiAgICAgICAgICAgICAgICAvLyB3b3JrZXIgdG8gcHJlc2VydmUgZnVsbCBjb25jdXJyZW5jeSBhZnRlciBwYXVzZVxuICAgICAgICAgICAgICAgIGZvciAodmFyIHcgPSAxOyB3IDw9IHJlc3VtZUNvdW50OyB3KyspIHtcbiAgICAgICAgICAgICAgICAgICAgYXN5bmMuc2V0SW1tZWRpYXRlKHEucHJvY2Vzcyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gcTtcbiAgICB9XG5cbiAgICBhc3luYy5xdWV1ZSA9IGZ1bmN0aW9uICh3b3JrZXIsIGNvbmN1cnJlbmN5KSB7XG4gICAgICAgIHZhciBxID0gX3F1ZXVlKGZ1bmN0aW9uIChpdGVtcywgY2IpIHtcbiAgICAgICAgICAgIHdvcmtlcihpdGVtc1swXSwgY2IpO1xuICAgICAgICB9LCBjb25jdXJyZW5jeSwgMSk7XG5cbiAgICAgICAgcmV0dXJuIHE7XG4gICAgfTtcblxuICAgIGFzeW5jLnByaW9yaXR5UXVldWUgPSBmdW5jdGlvbiAod29ya2VyLCBjb25jdXJyZW5jeSkge1xuXG4gICAgICAgIGZ1bmN0aW9uIF9jb21wYXJlVGFza3MoYSwgYil7XG4gICAgICAgICAgICByZXR1cm4gYS5wcmlvcml0eSAtIGIucHJpb3JpdHk7XG4gICAgICAgIH1cblxuICAgICAgICBmdW5jdGlvbiBfYmluYXJ5U2VhcmNoKHNlcXVlbmNlLCBpdGVtLCBjb21wYXJlKSB7XG4gICAgICAgICAgICB2YXIgYmVnID0gLTEsXG4gICAgICAgICAgICAgICAgZW5kID0gc2VxdWVuY2UubGVuZ3RoIC0gMTtcbiAgICAgICAgICAgIHdoaWxlIChiZWcgPCBlbmQpIHtcbiAgICAgICAgICAgICAgICB2YXIgbWlkID0gYmVnICsgKChlbmQgLSBiZWcgKyAxKSA+Pj4gMSk7XG4gICAgICAgICAgICAgICAgaWYgKGNvbXBhcmUoaXRlbSwgc2VxdWVuY2VbbWlkXSkgPj0gMCkge1xuICAgICAgICAgICAgICAgICAgICBiZWcgPSBtaWQ7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgZW5kID0gbWlkIC0gMTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gYmVnO1xuICAgICAgICB9XG5cbiAgICAgICAgZnVuY3Rpb24gX2luc2VydChxLCBkYXRhLCBwcmlvcml0eSwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIGlmIChjYWxsYmFjayAhPSBudWxsICYmIHR5cGVvZiBjYWxsYmFjayAhPT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwidGFzayBjYWxsYmFjayBtdXN0IGJlIGEgZnVuY3Rpb25cIik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBxLnN0YXJ0ZWQgPSB0cnVlO1xuICAgICAgICAgICAgaWYgKCFfaXNBcnJheShkYXRhKSkge1xuICAgICAgICAgICAgICAgIGRhdGEgPSBbZGF0YV07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZihkYXRhLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICAgIC8vIGNhbGwgZHJhaW4gaW1tZWRpYXRlbHkgaWYgdGhlcmUgYXJlIG5vIHRhc2tzXG4gICAgICAgICAgICAgICAgcmV0dXJuIGFzeW5jLnNldEltbWVkaWF0ZShmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgICAgcS5kcmFpbigpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgX2FycmF5RWFjaChkYXRhLCBmdW5jdGlvbih0YXNrKSB7XG4gICAgICAgICAgICAgICAgdmFyIGl0ZW0gPSB7XG4gICAgICAgICAgICAgICAgICAgIGRhdGE6IHRhc2ssXG4gICAgICAgICAgICAgICAgICAgIHByaW9yaXR5OiBwcmlvcml0eSxcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2s6IHR5cGVvZiBjYWxsYmFjayA9PT0gJ2Z1bmN0aW9uJyA/IGNhbGxiYWNrIDogbm9vcFxuICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICBxLnRhc2tzLnNwbGljZShfYmluYXJ5U2VhcmNoKHEudGFza3MsIGl0ZW0sIF9jb21wYXJlVGFza3MpICsgMSwgMCwgaXRlbSk7XG5cbiAgICAgICAgICAgICAgICBpZiAocS50YXNrcy5sZW5ndGggPT09IHEuY29uY3VycmVuY3kpIHtcbiAgICAgICAgICAgICAgICAgICAgcS5zYXR1cmF0ZWQoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYXN5bmMuc2V0SW1tZWRpYXRlKHEucHJvY2Vzcyk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFN0YXJ0IHdpdGggYSBub3JtYWwgcXVldWVcbiAgICAgICAgdmFyIHEgPSBhc3luYy5xdWV1ZSh3b3JrZXIsIGNvbmN1cnJlbmN5KTtcblxuICAgICAgICAvLyBPdmVycmlkZSBwdXNoIHRvIGFjY2VwdCBzZWNvbmQgcGFyYW1ldGVyIHJlcHJlc2VudGluZyBwcmlvcml0eVxuICAgICAgICBxLnB1c2ggPSBmdW5jdGlvbiAoZGF0YSwgcHJpb3JpdHksIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICBfaW5zZXJ0KHEsIGRhdGEsIHByaW9yaXR5LCBjYWxsYmFjayk7XG4gICAgICAgIH07XG5cbiAgICAgICAgLy8gUmVtb3ZlIHVuc2hpZnQgZnVuY3Rpb25cbiAgICAgICAgZGVsZXRlIHEudW5zaGlmdDtcblxuICAgICAgICByZXR1cm4gcTtcbiAgICB9O1xuXG4gICAgYXN5bmMuY2FyZ28gPSBmdW5jdGlvbiAod29ya2VyLCBwYXlsb2FkKSB7XG4gICAgICAgIHJldHVybiBfcXVldWUod29ya2VyLCAxLCBwYXlsb2FkKTtcbiAgICB9O1xuXG4gICAgZnVuY3Rpb24gX2NvbnNvbGVfZm4obmFtZSkge1xuICAgICAgICByZXR1cm4gX3Jlc3RQYXJhbShmdW5jdGlvbiAoZm4sIGFyZ3MpIHtcbiAgICAgICAgICAgIGZuLmFwcGx5KG51bGwsIGFyZ3MuY29uY2F0KFtfcmVzdFBhcmFtKGZ1bmN0aW9uIChlcnIsIGFyZ3MpIHtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGNvbnNvbGUgPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb25zb2xlLmVycm9yKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihlcnIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKGNvbnNvbGVbbmFtZV0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIF9hcnJheUVhY2goYXJncywgZnVuY3Rpb24gKHgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlW25hbWVdKHgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KV0pKTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGFzeW5jLmxvZyA9IF9jb25zb2xlX2ZuKCdsb2cnKTtcbiAgICBhc3luYy5kaXIgPSBfY29uc29sZV9mbignZGlyJyk7XG4gICAgLyphc3luYy5pbmZvID0gX2NvbnNvbGVfZm4oJ2luZm8nKTtcbiAgICBhc3luYy53YXJuID0gX2NvbnNvbGVfZm4oJ3dhcm4nKTtcbiAgICBhc3luYy5lcnJvciA9IF9jb25zb2xlX2ZuKCdlcnJvcicpOyovXG5cbiAgICBhc3luYy5tZW1vaXplID0gZnVuY3Rpb24gKGZuLCBoYXNoZXIpIHtcbiAgICAgICAgdmFyIG1lbW8gPSB7fTtcbiAgICAgICAgdmFyIHF1ZXVlcyA9IHt9O1xuICAgICAgICBoYXNoZXIgPSBoYXNoZXIgfHwgaWRlbnRpdHk7XG4gICAgICAgIHZhciBtZW1vaXplZCA9IF9yZXN0UGFyYW0oZnVuY3Rpb24gbWVtb2l6ZWQoYXJncykge1xuICAgICAgICAgICAgdmFyIGNhbGxiYWNrID0gYXJncy5wb3AoKTtcbiAgICAgICAgICAgIHZhciBrZXkgPSBoYXNoZXIuYXBwbHkobnVsbCwgYXJncyk7XG4gICAgICAgICAgICBpZiAoa2V5IGluIG1lbW8pIHtcbiAgICAgICAgICAgICAgICBhc3luYy5zZXRJbW1lZGlhdGUoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjay5hcHBseShudWxsLCBtZW1vW2tleV0pO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoa2V5IGluIHF1ZXVlcykge1xuICAgICAgICAgICAgICAgIHF1ZXVlc1trZXldLnB1c2goY2FsbGJhY2spO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgcXVldWVzW2tleV0gPSBbY2FsbGJhY2tdO1xuICAgICAgICAgICAgICAgIGZuLmFwcGx5KG51bGwsIGFyZ3MuY29uY2F0KFtfcmVzdFBhcmFtKGZ1bmN0aW9uIChhcmdzKSB7XG4gICAgICAgICAgICAgICAgICAgIG1lbW9ba2V5XSA9IGFyZ3M7XG4gICAgICAgICAgICAgICAgICAgIHZhciBxID0gcXVldWVzW2tleV07XG4gICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBxdWV1ZXNba2V5XTtcbiAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDAsIGwgPSBxLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgcVtpXS5hcHBseShudWxsLCBhcmdzKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pXSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgbWVtb2l6ZWQubWVtbyA9IG1lbW87XG4gICAgICAgIG1lbW9pemVkLnVubWVtb2l6ZWQgPSBmbjtcbiAgICAgICAgcmV0dXJuIG1lbW9pemVkO1xuICAgIH07XG5cbiAgICBhc3luYy51bm1lbW9pemUgPSBmdW5jdGlvbiAoZm4pIHtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiAoZm4udW5tZW1vaXplZCB8fCBmbikuYXBwbHkobnVsbCwgYXJndW1lbnRzKTtcbiAgICAgICAgfTtcbiAgICB9O1xuXG4gICAgZnVuY3Rpb24gX3RpbWVzKG1hcHBlcikge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKGNvdW50LCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIG1hcHBlcihfcmFuZ2UoY291bnQpLCBpdGVyYXRvciwgY2FsbGJhY2spO1xuICAgICAgICB9O1xuICAgIH1cblxuICAgIGFzeW5jLnRpbWVzID0gX3RpbWVzKGFzeW5jLm1hcCk7XG4gICAgYXN5bmMudGltZXNTZXJpZXMgPSBfdGltZXMoYXN5bmMubWFwU2VyaWVzKTtcbiAgICBhc3luYy50aW1lc0xpbWl0ID0gZnVuY3Rpb24gKGNvdW50LCBsaW1pdCwgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgIHJldHVybiBhc3luYy5tYXBMaW1pdChfcmFuZ2UoY291bnQpLCBsaW1pdCwgaXRlcmF0b3IsIGNhbGxiYWNrKTtcbiAgICB9O1xuXG4gICAgYXN5bmMuc2VxID0gZnVuY3Rpb24gKC8qIGZ1bmN0aW9ucy4uLiAqLykge1xuICAgICAgICB2YXIgZm5zID0gYXJndW1lbnRzO1xuICAgICAgICByZXR1cm4gX3Jlc3RQYXJhbShmdW5jdGlvbiAoYXJncykge1xuICAgICAgICAgICAgdmFyIHRoYXQgPSB0aGlzO1xuXG4gICAgICAgICAgICB2YXIgY2FsbGJhY2sgPSBhcmdzW2FyZ3MubGVuZ3RoIC0gMV07XG4gICAgICAgICAgICBpZiAodHlwZW9mIGNhbGxiYWNrID09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICBhcmdzLnBvcCgpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBjYWxsYmFjayA9IG5vb3A7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGFzeW5jLnJlZHVjZShmbnMsIGFyZ3MsIGZ1bmN0aW9uIChuZXdhcmdzLCBmbiwgY2IpIHtcbiAgICAgICAgICAgICAgICBmbi5hcHBseSh0aGF0LCBuZXdhcmdzLmNvbmNhdChbX3Jlc3RQYXJhbShmdW5jdGlvbiAoZXJyLCBuZXh0YXJncykge1xuICAgICAgICAgICAgICAgICAgICBjYihlcnIsIG5leHRhcmdzKTtcbiAgICAgICAgICAgICAgICB9KV0pKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBmdW5jdGlvbiAoZXJyLCByZXN1bHRzKSB7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2suYXBwbHkodGhhdCwgW2Vycl0uY29uY2F0KHJlc3VsdHMpKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9O1xuXG4gICAgYXN5bmMuY29tcG9zZSA9IGZ1bmN0aW9uICgvKiBmdW5jdGlvbnMuLi4gKi8pIHtcbiAgICAgICAgcmV0dXJuIGFzeW5jLnNlcS5hcHBseShudWxsLCBBcnJheS5wcm90b3R5cGUucmV2ZXJzZS5jYWxsKGFyZ3VtZW50cykpO1xuICAgIH07XG5cblxuICAgIGZ1bmN0aW9uIF9hcHBseUVhY2goZWFjaGZuKSB7XG4gICAgICAgIHJldHVybiBfcmVzdFBhcmFtKGZ1bmN0aW9uKGZucywgYXJncykge1xuICAgICAgICAgICAgdmFyIGdvID0gX3Jlc3RQYXJhbShmdW5jdGlvbihhcmdzKSB7XG4gICAgICAgICAgICAgICAgdmFyIHRoYXQgPSB0aGlzO1xuICAgICAgICAgICAgICAgIHZhciBjYWxsYmFjayA9IGFyZ3MucG9wKCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGVhY2hmbihmbnMsIGZ1bmN0aW9uIChmbiwgXywgY2IpIHtcbiAgICAgICAgICAgICAgICAgICAgZm4uYXBwbHkodGhhdCwgYXJncy5jb25jYXQoW2NiXSkpO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgY2FsbGJhY2spO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBpZiAoYXJncy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZ28uYXBwbHkodGhpcywgYXJncyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZ287XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGFzeW5jLmFwcGx5RWFjaCA9IF9hcHBseUVhY2goYXN5bmMuZWFjaE9mKTtcbiAgICBhc3luYy5hcHBseUVhY2hTZXJpZXMgPSBfYXBwbHlFYWNoKGFzeW5jLmVhY2hPZlNlcmllcyk7XG5cblxuICAgIGFzeW5jLmZvcmV2ZXIgPSBmdW5jdGlvbiAoZm4sIGNhbGxiYWNrKSB7XG4gICAgICAgIHZhciBkb25lID0gb25seV9vbmNlKGNhbGxiYWNrIHx8IG5vb3ApO1xuICAgICAgICB2YXIgdGFzayA9IGVuc3VyZUFzeW5jKGZuKTtcbiAgICAgICAgZnVuY3Rpb24gbmV4dChlcnIpIHtcbiAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZG9uZShlcnIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGFzayhuZXh0KTtcbiAgICAgICAgfVxuICAgICAgICBuZXh0KCk7XG4gICAgfTtcblxuICAgIGZ1bmN0aW9uIGVuc3VyZUFzeW5jKGZuKSB7XG4gICAgICAgIHJldHVybiBfcmVzdFBhcmFtKGZ1bmN0aW9uIChhcmdzKSB7XG4gICAgICAgICAgICB2YXIgY2FsbGJhY2sgPSBhcmdzLnBvcCgpO1xuICAgICAgICAgICAgYXJncy5wdXNoKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICB2YXIgaW5uZXJBcmdzID0gYXJndW1lbnRzO1xuICAgICAgICAgICAgICAgIGlmIChzeW5jKSB7XG4gICAgICAgICAgICAgICAgICAgIGFzeW5jLnNldEltbWVkaWF0ZShmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjYWxsYmFjay5hcHBseShudWxsLCBpbm5lckFyZ3MpO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjay5hcHBseShudWxsLCBpbm5lckFyZ3MpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdmFyIHN5bmMgPSB0cnVlO1xuICAgICAgICAgICAgZm4uYXBwbHkodGhpcywgYXJncyk7XG4gICAgICAgICAgICBzeW5jID0gZmFsc2U7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGFzeW5jLmVuc3VyZUFzeW5jID0gZW5zdXJlQXN5bmM7XG5cbiAgICBhc3luYy5jb25zdGFudCA9IF9yZXN0UGFyYW0oZnVuY3Rpb24odmFsdWVzKSB7XG4gICAgICAgIHZhciBhcmdzID0gW251bGxdLmNvbmNhdCh2YWx1ZXMpO1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKGNhbGxiYWNrKSB7XG4gICAgICAgICAgICByZXR1cm4gY2FsbGJhY2suYXBwbHkodGhpcywgYXJncyk7XG4gICAgICAgIH07XG4gICAgfSk7XG5cbiAgICBhc3luYy53cmFwU3luYyA9XG4gICAgYXN5bmMuYXN5bmNpZnkgPSBmdW5jdGlvbiBhc3luY2lmeShmdW5jKSB7XG4gICAgICAgIHJldHVybiBfcmVzdFBhcmFtKGZ1bmN0aW9uIChhcmdzKSB7XG4gICAgICAgICAgICB2YXIgY2FsbGJhY2sgPSBhcmdzLnBvcCgpO1xuICAgICAgICAgICAgdmFyIHJlc3VsdDtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0ID0gZnVuYy5hcHBseSh0aGlzLCBhcmdzKTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gY2FsbGJhY2soZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBpZiByZXN1bHQgaXMgUHJvbWlzZSBvYmplY3RcbiAgICAgICAgICAgIGlmIChfaXNPYmplY3QocmVzdWx0KSAmJiB0eXBlb2YgcmVzdWx0LnRoZW4gPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICAgICAgICAgIHJlc3VsdC50aGVuKGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKG51bGwsIHZhbHVlKTtcbiAgICAgICAgICAgICAgICB9KVtcImNhdGNoXCJdKGZ1bmN0aW9uKGVycikge1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnIubWVzc2FnZSA/IGVyciA6IG5ldyBFcnJvcihlcnIpKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2sobnVsbCwgcmVzdWx0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfTtcblxuICAgIC8vIE5vZGUuanNcbiAgICBpZiAodHlwZW9mIG1vZHVsZSA9PT0gJ29iamVjdCcgJiYgbW9kdWxlLmV4cG9ydHMpIHtcbiAgICAgICAgbW9kdWxlLmV4cG9ydHMgPSBhc3luYztcbiAgICB9XG4gICAgLy8gQU1EIC8gUmVxdWlyZUpTXG4gICAgZWxzZSBpZiAodHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kKSB7XG4gICAgICAgIGRlZmluZShbXSwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIGFzeW5jO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgLy8gaW5jbHVkZWQgZGlyZWN0bHkgdmlhIDxzY3JpcHQ+IHRhZ1xuICAgIGVsc2Uge1xuICAgICAgICByb290LmFzeW5jID0gYXN5bmM7XG4gICAgfVxuXG59KCkpO1xuIiwiLy8gQ29weXJpZ2h0IEpveWVudCwgSW5jLiBhbmQgb3RoZXIgTm9kZSBjb250cmlidXRvcnMuXG4vL1xuLy8gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGFcbi8vIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGVcbi8vIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZ1xuLy8gd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLFxuLy8gZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdFxuLy8gcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlXG4vLyBmb2xsb3dpbmcgY29uZGl0aW9uczpcbi8vXG4vLyBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZFxuLy8gaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4vL1xuLy8gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTU1xuLy8gT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRlxuLy8gTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTlxuLy8gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sXG4vLyBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1Jcbi8vIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEVcbi8vIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG5cbi8vIHJlc29sdmVzIC4gYW5kIC4uIGVsZW1lbnRzIGluIGEgcGF0aCBhcnJheSB3aXRoIGRpcmVjdG9yeSBuYW1lcyB0aGVyZVxuLy8gbXVzdCBiZSBubyBzbGFzaGVzLCBlbXB0eSBlbGVtZW50cywgb3IgZGV2aWNlIG5hbWVzIChjOlxcKSBpbiB0aGUgYXJyYXlcbi8vIChzbyBhbHNvIG5vIGxlYWRpbmcgYW5kIHRyYWlsaW5nIHNsYXNoZXMgLSBpdCBkb2VzIG5vdCBkaXN0aW5ndWlzaFxuLy8gcmVsYXRpdmUgYW5kIGFic29sdXRlIHBhdGhzKVxuZnVuY3Rpb24gbm9ybWFsaXplQXJyYXkocGFydHMsIGFsbG93QWJvdmVSb290KSB7XG4gIC8vIGlmIHRoZSBwYXRoIHRyaWVzIHRvIGdvIGFib3ZlIHRoZSByb290LCBgdXBgIGVuZHMgdXAgPiAwXG4gIHZhciB1cCA9IDA7XG4gIGZvciAodmFyIGkgPSBwYXJ0cy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgIHZhciBsYXN0ID0gcGFydHNbaV07XG4gICAgaWYgKGxhc3QgPT09ICcuJykge1xuICAgICAgcGFydHMuc3BsaWNlKGksIDEpO1xuICAgIH0gZWxzZSBpZiAobGFzdCA9PT0gJy4uJykge1xuICAgICAgcGFydHMuc3BsaWNlKGksIDEpO1xuICAgICAgdXArKztcbiAgICB9IGVsc2UgaWYgKHVwKSB7XG4gICAgICBwYXJ0cy5zcGxpY2UoaSwgMSk7XG4gICAgICB1cC0tO1xuICAgIH1cbiAgfVxuXG4gIC8vIGlmIHRoZSBwYXRoIGlzIGFsbG93ZWQgdG8gZ28gYWJvdmUgdGhlIHJvb3QsIHJlc3RvcmUgbGVhZGluZyAuLnNcbiAgaWYgKGFsbG93QWJvdmVSb290KSB7XG4gICAgZm9yICg7IHVwLS07IHVwKSB7XG4gICAgICBwYXJ0cy51bnNoaWZ0KCcuLicpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBwYXJ0cztcbn1cblxuLy8gU3BsaXQgYSBmaWxlbmFtZSBpbnRvIFtyb290LCBkaXIsIGJhc2VuYW1lLCBleHRdLCB1bml4IHZlcnNpb25cbi8vICdyb290JyBpcyBqdXN0IGEgc2xhc2gsIG9yIG5vdGhpbmcuXG52YXIgc3BsaXRQYXRoUmUgPVxuICAgIC9eKFxcLz98KShbXFxzXFxTXSo/KSgoPzpcXC57MSwyfXxbXlxcL10rP3wpKFxcLlteLlxcL10qfCkpKD86W1xcL10qKSQvO1xudmFyIHNwbGl0UGF0aCA9IGZ1bmN0aW9uKGZpbGVuYW1lKSB7XG4gIHJldHVybiBzcGxpdFBhdGhSZS5leGVjKGZpbGVuYW1lKS5zbGljZSgxKTtcbn07XG5cbi8vIHBhdGgucmVzb2x2ZShbZnJvbSAuLi5dLCB0bylcbi8vIHBvc2l4IHZlcnNpb25cbmV4cG9ydHMucmVzb2x2ZSA9IGZ1bmN0aW9uKCkge1xuICB2YXIgcmVzb2x2ZWRQYXRoID0gJycsXG4gICAgICByZXNvbHZlZEFic29sdXRlID0gZmFsc2U7XG5cbiAgZm9yICh2YXIgaSA9IGFyZ3VtZW50cy5sZW5ndGggLSAxOyBpID49IC0xICYmICFyZXNvbHZlZEFic29sdXRlOyBpLS0pIHtcbiAgICB2YXIgcGF0aCA9IChpID49IDApID8gYXJndW1lbnRzW2ldIDogcHJvY2Vzcy5jd2QoKTtcblxuICAgIC8vIFNraXAgZW1wdHkgYW5kIGludmFsaWQgZW50cmllc1xuICAgIGlmICh0eXBlb2YgcGF0aCAhPT0gJ3N0cmluZycpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0FyZ3VtZW50cyB0byBwYXRoLnJlc29sdmUgbXVzdCBiZSBzdHJpbmdzJyk7XG4gICAgfSBlbHNlIGlmICghcGF0aCkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgcmVzb2x2ZWRQYXRoID0gcGF0aCArICcvJyArIHJlc29sdmVkUGF0aDtcbiAgICByZXNvbHZlZEFic29sdXRlID0gcGF0aC5jaGFyQXQoMCkgPT09ICcvJztcbiAgfVxuXG4gIC8vIEF0IHRoaXMgcG9pbnQgdGhlIHBhdGggc2hvdWxkIGJlIHJlc29sdmVkIHRvIGEgZnVsbCBhYnNvbHV0ZSBwYXRoLCBidXRcbiAgLy8gaGFuZGxlIHJlbGF0aXZlIHBhdGhzIHRvIGJlIHNhZmUgKG1pZ2h0IGhhcHBlbiB3aGVuIHByb2Nlc3MuY3dkKCkgZmFpbHMpXG5cbiAgLy8gTm9ybWFsaXplIHRoZSBwYXRoXG4gIHJlc29sdmVkUGF0aCA9IG5vcm1hbGl6ZUFycmF5KGZpbHRlcihyZXNvbHZlZFBhdGguc3BsaXQoJy8nKSwgZnVuY3Rpb24ocCkge1xuICAgIHJldHVybiAhIXA7XG4gIH0pLCAhcmVzb2x2ZWRBYnNvbHV0ZSkuam9pbignLycpO1xuXG4gIHJldHVybiAoKHJlc29sdmVkQWJzb2x1dGUgPyAnLycgOiAnJykgKyByZXNvbHZlZFBhdGgpIHx8ICcuJztcbn07XG5cbi8vIHBhdGgubm9ybWFsaXplKHBhdGgpXG4vLyBwb3NpeCB2ZXJzaW9uXG5leHBvcnRzLm5vcm1hbGl6ZSA9IGZ1bmN0aW9uKHBhdGgpIHtcbiAgdmFyIGlzQWJzb2x1dGUgPSBleHBvcnRzLmlzQWJzb2x1dGUocGF0aCksXG4gICAgICB0cmFpbGluZ1NsYXNoID0gc3Vic3RyKHBhdGgsIC0xKSA9PT0gJy8nO1xuXG4gIC8vIE5vcm1hbGl6ZSB0aGUgcGF0aFxuICBwYXRoID0gbm9ybWFsaXplQXJyYXkoZmlsdGVyKHBhdGguc3BsaXQoJy8nKSwgZnVuY3Rpb24ocCkge1xuICAgIHJldHVybiAhIXA7XG4gIH0pLCAhaXNBYnNvbHV0ZSkuam9pbignLycpO1xuXG4gIGlmICghcGF0aCAmJiAhaXNBYnNvbHV0ZSkge1xuICAgIHBhdGggPSAnLic7XG4gIH1cbiAgaWYgKHBhdGggJiYgdHJhaWxpbmdTbGFzaCkge1xuICAgIHBhdGggKz0gJy8nO1xuICB9XG5cbiAgcmV0dXJuIChpc0Fic29sdXRlID8gJy8nIDogJycpICsgcGF0aDtcbn07XG5cbi8vIHBvc2l4IHZlcnNpb25cbmV4cG9ydHMuaXNBYnNvbHV0ZSA9IGZ1bmN0aW9uKHBhdGgpIHtcbiAgcmV0dXJuIHBhdGguY2hhckF0KDApID09PSAnLyc7XG59O1xuXG4vLyBwb3NpeCB2ZXJzaW9uXG5leHBvcnRzLmpvaW4gPSBmdW5jdGlvbigpIHtcbiAgdmFyIHBhdGhzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAwKTtcbiAgcmV0dXJuIGV4cG9ydHMubm9ybWFsaXplKGZpbHRlcihwYXRocywgZnVuY3Rpb24ocCwgaW5kZXgpIHtcbiAgICBpZiAodHlwZW9mIHAgIT09ICdzdHJpbmcnKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdBcmd1bWVudHMgdG8gcGF0aC5qb2luIG11c3QgYmUgc3RyaW5ncycpO1xuICAgIH1cbiAgICByZXR1cm4gcDtcbiAgfSkuam9pbignLycpKTtcbn07XG5cblxuLy8gcGF0aC5yZWxhdGl2ZShmcm9tLCB0bylcbi8vIHBvc2l4IHZlcnNpb25cbmV4cG9ydHMucmVsYXRpdmUgPSBmdW5jdGlvbihmcm9tLCB0bykge1xuICBmcm9tID0gZXhwb3J0cy5yZXNvbHZlKGZyb20pLnN1YnN0cigxKTtcbiAgdG8gPSBleHBvcnRzLnJlc29sdmUodG8pLnN1YnN0cigxKTtcblxuICBmdW5jdGlvbiB0cmltKGFycikge1xuICAgIHZhciBzdGFydCA9IDA7XG4gICAgZm9yICg7IHN0YXJ0IDwgYXJyLmxlbmd0aDsgc3RhcnQrKykge1xuICAgICAgaWYgKGFycltzdGFydF0gIT09ICcnKSBicmVhaztcbiAgICB9XG5cbiAgICB2YXIgZW5kID0gYXJyLmxlbmd0aCAtIDE7XG4gICAgZm9yICg7IGVuZCA+PSAwOyBlbmQtLSkge1xuICAgICAgaWYgKGFycltlbmRdICE9PSAnJykgYnJlYWs7XG4gICAgfVxuXG4gICAgaWYgKHN0YXJ0ID4gZW5kKSByZXR1cm4gW107XG4gICAgcmV0dXJuIGFyci5zbGljZShzdGFydCwgZW5kIC0gc3RhcnQgKyAxKTtcbiAgfVxuXG4gIHZhciBmcm9tUGFydHMgPSB0cmltKGZyb20uc3BsaXQoJy8nKSk7XG4gIHZhciB0b1BhcnRzID0gdHJpbSh0by5zcGxpdCgnLycpKTtcblxuICB2YXIgbGVuZ3RoID0gTWF0aC5taW4oZnJvbVBhcnRzLmxlbmd0aCwgdG9QYXJ0cy5sZW5ndGgpO1xuICB2YXIgc2FtZVBhcnRzTGVuZ3RoID0gbGVuZ3RoO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgaWYgKGZyb21QYXJ0c1tpXSAhPT0gdG9QYXJ0c1tpXSkge1xuICAgICAgc2FtZVBhcnRzTGVuZ3RoID0gaTtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuXG4gIHZhciBvdXRwdXRQYXJ0cyA9IFtdO1xuICBmb3IgKHZhciBpID0gc2FtZVBhcnRzTGVuZ3RoOyBpIDwgZnJvbVBhcnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgb3V0cHV0UGFydHMucHVzaCgnLi4nKTtcbiAgfVxuXG4gIG91dHB1dFBhcnRzID0gb3V0cHV0UGFydHMuY29uY2F0KHRvUGFydHMuc2xpY2Uoc2FtZVBhcnRzTGVuZ3RoKSk7XG5cbiAgcmV0dXJuIG91dHB1dFBhcnRzLmpvaW4oJy8nKTtcbn07XG5cbmV4cG9ydHMuc2VwID0gJy8nO1xuZXhwb3J0cy5kZWxpbWl0ZXIgPSAnOic7XG5cbmV4cG9ydHMuZGlybmFtZSA9IGZ1bmN0aW9uKHBhdGgpIHtcbiAgdmFyIHJlc3VsdCA9IHNwbGl0UGF0aChwYXRoKSxcbiAgICAgIHJvb3QgPSByZXN1bHRbMF0sXG4gICAgICBkaXIgPSByZXN1bHRbMV07XG5cbiAgaWYgKCFyb290ICYmICFkaXIpIHtcbiAgICAvLyBObyBkaXJuYW1lIHdoYXRzb2V2ZXJcbiAgICByZXR1cm4gJy4nO1xuICB9XG5cbiAgaWYgKGRpcikge1xuICAgIC8vIEl0IGhhcyBhIGRpcm5hbWUsIHN0cmlwIHRyYWlsaW5nIHNsYXNoXG4gICAgZGlyID0gZGlyLnN1YnN0cigwLCBkaXIubGVuZ3RoIC0gMSk7XG4gIH1cblxuICByZXR1cm4gcm9vdCArIGRpcjtcbn07XG5cblxuZXhwb3J0cy5iYXNlbmFtZSA9IGZ1bmN0aW9uKHBhdGgsIGV4dCkge1xuICB2YXIgZiA9IHNwbGl0UGF0aChwYXRoKVsyXTtcbiAgLy8gVE9ETzogbWFrZSB0aGlzIGNvbXBhcmlzb24gY2FzZS1pbnNlbnNpdGl2ZSBvbiB3aW5kb3dzP1xuICBpZiAoZXh0ICYmIGYuc3Vic3RyKC0xICogZXh0Lmxlbmd0aCkgPT09IGV4dCkge1xuICAgIGYgPSBmLnN1YnN0cigwLCBmLmxlbmd0aCAtIGV4dC5sZW5ndGgpO1xuICB9XG4gIHJldHVybiBmO1xufTtcblxuXG5leHBvcnRzLmV4dG5hbWUgPSBmdW5jdGlvbihwYXRoKSB7XG4gIHJldHVybiBzcGxpdFBhdGgocGF0aClbM107XG59O1xuXG5mdW5jdGlvbiBmaWx0ZXIgKHhzLCBmKSB7XG4gICAgaWYgKHhzLmZpbHRlcikgcmV0dXJuIHhzLmZpbHRlcihmKTtcbiAgICB2YXIgcmVzID0gW107XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB4cy5sZW5ndGg7IGkrKykge1xuICAgICAgICBpZiAoZih4c1tpXSwgaSwgeHMpKSByZXMucHVzaCh4c1tpXSk7XG4gICAgfVxuICAgIHJldHVybiByZXM7XG59XG5cbi8vIFN0cmluZy5wcm90b3R5cGUuc3Vic3RyIC0gbmVnYXRpdmUgaW5kZXggZG9uJ3Qgd29yayBpbiBJRThcbnZhciBzdWJzdHIgPSAnYWInLnN1YnN0cigtMSkgPT09ICdiJ1xuICAgID8gZnVuY3Rpb24gKHN0ciwgc3RhcnQsIGxlbikgeyByZXR1cm4gc3RyLnN1YnN0cihzdGFydCwgbGVuKSB9XG4gICAgOiBmdW5jdGlvbiAoc3RyLCBzdGFydCwgbGVuKSB7XG4gICAgICAgIGlmIChzdGFydCA8IDApIHN0YXJ0ID0gc3RyLmxlbmd0aCArIHN0YXJ0O1xuICAgICAgICByZXR1cm4gc3RyLnN1YnN0cihzdGFydCwgbGVuKTtcbiAgICB9XG47XG4iLCIvLyBzaGltIGZvciB1c2luZyBwcm9jZXNzIGluIGJyb3dzZXJcblxudmFyIHByb2Nlc3MgPSBtb2R1bGUuZXhwb3J0cyA9IHt9O1xudmFyIHF1ZXVlID0gW107XG52YXIgZHJhaW5pbmcgPSBmYWxzZTtcbnZhciBjdXJyZW50UXVldWU7XG52YXIgcXVldWVJbmRleCA9IC0xO1xuXG5mdW5jdGlvbiBjbGVhblVwTmV4dFRpY2soKSB7XG4gICAgZHJhaW5pbmcgPSBmYWxzZTtcbiAgICBpZiAoY3VycmVudFF1ZXVlLmxlbmd0aCkge1xuICAgICAgICBxdWV1ZSA9IGN1cnJlbnRRdWV1ZS5jb25jYXQocXVldWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHF1ZXVlSW5kZXggPSAtMTtcbiAgICB9XG4gICAgaWYgKHF1ZXVlLmxlbmd0aCkge1xuICAgICAgICBkcmFpblF1ZXVlKCk7XG4gICAgfVxufVxuXG5mdW5jdGlvbiBkcmFpblF1ZXVlKCkge1xuICAgIGlmIChkcmFpbmluZykge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIHZhciB0aW1lb3V0ID0gc2V0VGltZW91dChjbGVhblVwTmV4dFRpY2spO1xuICAgIGRyYWluaW5nID0gdHJ1ZTtcblxuICAgIHZhciBsZW4gPSBxdWV1ZS5sZW5ndGg7XG4gICAgd2hpbGUobGVuKSB7XG4gICAgICAgIGN1cnJlbnRRdWV1ZSA9IHF1ZXVlO1xuICAgICAgICBxdWV1ZSA9IFtdO1xuICAgICAgICB3aGlsZSAoKytxdWV1ZUluZGV4IDwgbGVuKSB7XG4gICAgICAgICAgICBpZiAoY3VycmVudFF1ZXVlKSB7XG4gICAgICAgICAgICAgICAgY3VycmVudFF1ZXVlW3F1ZXVlSW5kZXhdLnJ1bigpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHF1ZXVlSW5kZXggPSAtMTtcbiAgICAgICAgbGVuID0gcXVldWUubGVuZ3RoO1xuICAgIH1cbiAgICBjdXJyZW50UXVldWUgPSBudWxsO1xuICAgIGRyYWluaW5nID0gZmFsc2U7XG4gICAgY2xlYXJUaW1lb3V0KHRpbWVvdXQpO1xufVxuXG5wcm9jZXNzLm5leHRUaWNrID0gZnVuY3Rpb24gKGZ1bikge1xuICAgIHZhciBhcmdzID0gbmV3IEFycmF5KGFyZ3VtZW50cy5sZW5ndGggLSAxKTtcbiAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGFyZ3NbaSAtIDFdID0gYXJndW1lbnRzW2ldO1xuICAgICAgICB9XG4gICAgfVxuICAgIHF1ZXVlLnB1c2gobmV3IEl0ZW0oZnVuLCBhcmdzKSk7XG4gICAgaWYgKHF1ZXVlLmxlbmd0aCA9PT0gMSAmJiAhZHJhaW5pbmcpIHtcbiAgICAgICAgc2V0VGltZW91dChkcmFpblF1ZXVlLCAwKTtcbiAgICB9XG59O1xuXG4vLyB2OCBsaWtlcyBwcmVkaWN0aWJsZSBvYmplY3RzXG5mdW5jdGlvbiBJdGVtKGZ1biwgYXJyYXkpIHtcbiAgICB0aGlzLmZ1biA9IGZ1bjtcbiAgICB0aGlzLmFycmF5ID0gYXJyYXk7XG59XG5JdGVtLnByb3RvdHlwZS5ydW4gPSBmdW5jdGlvbiAoKSB7XG4gICAgdGhpcy5mdW4uYXBwbHkobnVsbCwgdGhpcy5hcnJheSk7XG59O1xucHJvY2Vzcy50aXRsZSA9ICdicm93c2VyJztcbnByb2Nlc3MuYnJvd3NlciA9IHRydWU7XG5wcm9jZXNzLmVudiA9IHt9O1xucHJvY2Vzcy5hcmd2ID0gW107XG5wcm9jZXNzLnZlcnNpb24gPSAnJzsgLy8gZW1wdHkgc3RyaW5nIHRvIGF2b2lkIHJlZ2V4cCBpc3N1ZXNcbnByb2Nlc3MudmVyc2lvbnMgPSB7fTtcblxuZnVuY3Rpb24gbm9vcCgpIHt9XG5cbnByb2Nlc3Mub24gPSBub29wO1xucHJvY2Vzcy5hZGRMaXN0ZW5lciA9IG5vb3A7XG5wcm9jZXNzLm9uY2UgPSBub29wO1xucHJvY2Vzcy5vZmYgPSBub29wO1xucHJvY2Vzcy5yZW1vdmVMaXN0ZW5lciA9IG5vb3A7XG5wcm9jZXNzLnJlbW92ZUFsbExpc3RlbmVycyA9IG5vb3A7XG5wcm9jZXNzLmVtaXQgPSBub29wO1xuXG5wcm9jZXNzLmJpbmRpbmcgPSBmdW5jdGlvbiAobmFtZSkge1xuICAgIHRocm93IG5ldyBFcnJvcigncHJvY2Vzcy5iaW5kaW5nIGlzIG5vdCBzdXBwb3J0ZWQnKTtcbn07XG5cbnByb2Nlc3MuY3dkID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gJy8nIH07XG5wcm9jZXNzLmNoZGlyID0gZnVuY3Rpb24gKGRpcikge1xuICAgIHRocm93IG5ldyBFcnJvcigncHJvY2Vzcy5jaGRpciBpcyBub3Qgc3VwcG9ydGVkJyk7XG59O1xucHJvY2Vzcy51bWFzayA9IGZ1bmN0aW9uKCkgeyByZXR1cm4gMDsgfTtcbiIsIi8qISBodHRwczovL210aHMuYmUvcHVueWNvZGUgdjEuNC4wIGJ5IEBtYXRoaWFzICovXG47KGZ1bmN0aW9uKHJvb3QpIHtcblxuXHQvKiogRGV0ZWN0IGZyZWUgdmFyaWFibGVzICovXG5cdHZhciBmcmVlRXhwb3J0cyA9IHR5cGVvZiBleHBvcnRzID09ICdvYmplY3QnICYmIGV4cG9ydHMgJiZcblx0XHQhZXhwb3J0cy5ub2RlVHlwZSAmJiBleHBvcnRzO1xuXHR2YXIgZnJlZU1vZHVsZSA9IHR5cGVvZiBtb2R1bGUgPT0gJ29iamVjdCcgJiYgbW9kdWxlICYmXG5cdFx0IW1vZHVsZS5ub2RlVHlwZSAmJiBtb2R1bGU7XG5cdHZhciBmcmVlR2xvYmFsID0gdHlwZW9mIGdsb2JhbCA9PSAnb2JqZWN0JyAmJiBnbG9iYWw7XG5cdGlmIChcblx0XHRmcmVlR2xvYmFsLmdsb2JhbCA9PT0gZnJlZUdsb2JhbCB8fFxuXHRcdGZyZWVHbG9iYWwud2luZG93ID09PSBmcmVlR2xvYmFsIHx8XG5cdFx0ZnJlZUdsb2JhbC5zZWxmID09PSBmcmVlR2xvYmFsXG5cdCkge1xuXHRcdHJvb3QgPSBmcmVlR2xvYmFsO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoZSBgcHVueWNvZGVgIG9iamVjdC5cblx0ICogQG5hbWUgcHVueWNvZGVcblx0ICogQHR5cGUgT2JqZWN0XG5cdCAqL1xuXHR2YXIgcHVueWNvZGUsXG5cblx0LyoqIEhpZ2hlc3QgcG9zaXRpdmUgc2lnbmVkIDMyLWJpdCBmbG9hdCB2YWx1ZSAqL1xuXHRtYXhJbnQgPSAyMTQ3NDgzNjQ3LCAvLyBha2EuIDB4N0ZGRkZGRkYgb3IgMl4zMS0xXG5cblx0LyoqIEJvb3RzdHJpbmcgcGFyYW1ldGVycyAqL1xuXHRiYXNlID0gMzYsXG5cdHRNaW4gPSAxLFxuXHR0TWF4ID0gMjYsXG5cdHNrZXcgPSAzOCxcblx0ZGFtcCA9IDcwMCxcblx0aW5pdGlhbEJpYXMgPSA3Mixcblx0aW5pdGlhbE4gPSAxMjgsIC8vIDB4ODBcblx0ZGVsaW1pdGVyID0gJy0nLCAvLyAnXFx4MkQnXG5cblx0LyoqIFJlZ3VsYXIgZXhwcmVzc2lvbnMgKi9cblx0cmVnZXhQdW55Y29kZSA9IC9eeG4tLS8sXG5cdHJlZ2V4Tm9uQVNDSUkgPSAvW15cXHgyMC1cXHg3RV0vLCAvLyB1bnByaW50YWJsZSBBU0NJSSBjaGFycyArIG5vbi1BU0NJSSBjaGFyc1xuXHRyZWdleFNlcGFyYXRvcnMgPSAvW1xceDJFXFx1MzAwMlxcdUZGMEVcXHVGRjYxXS9nLCAvLyBSRkMgMzQ5MCBzZXBhcmF0b3JzXG5cblx0LyoqIEVycm9yIG1lc3NhZ2VzICovXG5cdGVycm9ycyA9IHtcblx0XHQnb3ZlcmZsb3cnOiAnT3ZlcmZsb3c6IGlucHV0IG5lZWRzIHdpZGVyIGludGVnZXJzIHRvIHByb2Nlc3MnLFxuXHRcdCdub3QtYmFzaWMnOiAnSWxsZWdhbCBpbnB1dCA+PSAweDgwIChub3QgYSBiYXNpYyBjb2RlIHBvaW50KScsXG5cdFx0J2ludmFsaWQtaW5wdXQnOiAnSW52YWxpZCBpbnB1dCdcblx0fSxcblxuXHQvKiogQ29udmVuaWVuY2Ugc2hvcnRjdXRzICovXG5cdGJhc2VNaW51c1RNaW4gPSBiYXNlIC0gdE1pbixcblx0Zmxvb3IgPSBNYXRoLmZsb29yLFxuXHRzdHJpbmdGcm9tQ2hhckNvZGUgPSBTdHJpbmcuZnJvbUNoYXJDb2RlLFxuXG5cdC8qKiBUZW1wb3JhcnkgdmFyaWFibGUgKi9cblx0a2V5O1xuXG5cdC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuXG5cdC8qKlxuXHQgKiBBIGdlbmVyaWMgZXJyb3IgdXRpbGl0eSBmdW5jdGlvbi5cblx0ICogQHByaXZhdGVcblx0ICogQHBhcmFtIHtTdHJpbmd9IHR5cGUgVGhlIGVycm9yIHR5cGUuXG5cdCAqIEByZXR1cm5zIHtFcnJvcn0gVGhyb3dzIGEgYFJhbmdlRXJyb3JgIHdpdGggdGhlIGFwcGxpY2FibGUgZXJyb3IgbWVzc2FnZS5cblx0ICovXG5cdGZ1bmN0aW9uIGVycm9yKHR5cGUpIHtcblx0XHR0aHJvdyBuZXcgUmFuZ2VFcnJvcihlcnJvcnNbdHlwZV0pO1xuXHR9XG5cblx0LyoqXG5cdCAqIEEgZ2VuZXJpYyBgQXJyYXkjbWFwYCB1dGlsaXR5IGZ1bmN0aW9uLlxuXHQgKiBAcHJpdmF0ZVxuXHQgKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gaXRlcmF0ZSBvdmVyLlxuXHQgKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFjayBUaGUgZnVuY3Rpb24gdGhhdCBnZXRzIGNhbGxlZCBmb3IgZXZlcnkgYXJyYXlcblx0ICogaXRlbS5cblx0ICogQHJldHVybnMge0FycmF5fSBBIG5ldyBhcnJheSBvZiB2YWx1ZXMgcmV0dXJuZWQgYnkgdGhlIGNhbGxiYWNrIGZ1bmN0aW9uLlxuXHQgKi9cblx0ZnVuY3Rpb24gbWFwKGFycmF5LCBmbikge1xuXHRcdHZhciBsZW5ndGggPSBhcnJheS5sZW5ndGg7XG5cdFx0dmFyIHJlc3VsdCA9IFtdO1xuXHRcdHdoaWxlIChsZW5ndGgtLSkge1xuXHRcdFx0cmVzdWx0W2xlbmd0aF0gPSBmbihhcnJheVtsZW5ndGhdKTtcblx0XHR9XG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fVxuXG5cdC8qKlxuXHQgKiBBIHNpbXBsZSBgQXJyYXkjbWFwYC1saWtlIHdyYXBwZXIgdG8gd29yayB3aXRoIGRvbWFpbiBuYW1lIHN0cmluZ3Mgb3IgZW1haWxcblx0ICogYWRkcmVzc2VzLlxuXHQgKiBAcHJpdmF0ZVxuXHQgKiBAcGFyYW0ge1N0cmluZ30gZG9tYWluIFRoZSBkb21haW4gbmFtZSBvciBlbWFpbCBhZGRyZXNzLlxuXHQgKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFjayBUaGUgZnVuY3Rpb24gdGhhdCBnZXRzIGNhbGxlZCBmb3IgZXZlcnlcblx0ICogY2hhcmFjdGVyLlxuXHQgKiBAcmV0dXJucyB7QXJyYXl9IEEgbmV3IHN0cmluZyBvZiBjaGFyYWN0ZXJzIHJldHVybmVkIGJ5IHRoZSBjYWxsYmFja1xuXHQgKiBmdW5jdGlvbi5cblx0ICovXG5cdGZ1bmN0aW9uIG1hcERvbWFpbihzdHJpbmcsIGZuKSB7XG5cdFx0dmFyIHBhcnRzID0gc3RyaW5nLnNwbGl0KCdAJyk7XG5cdFx0dmFyIHJlc3VsdCA9ICcnO1xuXHRcdGlmIChwYXJ0cy5sZW5ndGggPiAxKSB7XG5cdFx0XHQvLyBJbiBlbWFpbCBhZGRyZXNzZXMsIG9ubHkgdGhlIGRvbWFpbiBuYW1lIHNob3VsZCBiZSBwdW55Y29kZWQuIExlYXZlXG5cdFx0XHQvLyB0aGUgbG9jYWwgcGFydCAoaS5lLiBldmVyeXRoaW5nIHVwIHRvIGBAYCkgaW50YWN0LlxuXHRcdFx0cmVzdWx0ID0gcGFydHNbMF0gKyAnQCc7XG5cdFx0XHRzdHJpbmcgPSBwYXJ0c1sxXTtcblx0XHR9XG5cdFx0Ly8gQXZvaWQgYHNwbGl0KHJlZ2V4KWAgZm9yIElFOCBjb21wYXRpYmlsaXR5LiBTZWUgIzE3LlxuXHRcdHN0cmluZyA9IHN0cmluZy5yZXBsYWNlKHJlZ2V4U2VwYXJhdG9ycywgJ1xceDJFJyk7XG5cdFx0dmFyIGxhYmVscyA9IHN0cmluZy5zcGxpdCgnLicpO1xuXHRcdHZhciBlbmNvZGVkID0gbWFwKGxhYmVscywgZm4pLmpvaW4oJy4nKTtcblx0XHRyZXR1cm4gcmVzdWx0ICsgZW5jb2RlZDtcblx0fVxuXG5cdC8qKlxuXHQgKiBDcmVhdGVzIGFuIGFycmF5IGNvbnRhaW5pbmcgdGhlIG51bWVyaWMgY29kZSBwb2ludHMgb2YgZWFjaCBVbmljb2RlXG5cdCAqIGNoYXJhY3RlciBpbiB0aGUgc3RyaW5nLiBXaGlsZSBKYXZhU2NyaXB0IHVzZXMgVUNTLTIgaW50ZXJuYWxseSxcblx0ICogdGhpcyBmdW5jdGlvbiB3aWxsIGNvbnZlcnQgYSBwYWlyIG9mIHN1cnJvZ2F0ZSBoYWx2ZXMgKGVhY2ggb2Ygd2hpY2hcblx0ICogVUNTLTIgZXhwb3NlcyBhcyBzZXBhcmF0ZSBjaGFyYWN0ZXJzKSBpbnRvIGEgc2luZ2xlIGNvZGUgcG9pbnQsXG5cdCAqIG1hdGNoaW5nIFVURi0xNi5cblx0ICogQHNlZSBgcHVueWNvZGUudWNzMi5lbmNvZGVgXG5cdCAqIEBzZWUgPGh0dHBzOi8vbWF0aGlhc2J5bmVucy5iZS9ub3Rlcy9qYXZhc2NyaXB0LWVuY29kaW5nPlxuXHQgKiBAbWVtYmVyT2YgcHVueWNvZGUudWNzMlxuXHQgKiBAbmFtZSBkZWNvZGVcblx0ICogQHBhcmFtIHtTdHJpbmd9IHN0cmluZyBUaGUgVW5pY29kZSBpbnB1dCBzdHJpbmcgKFVDUy0yKS5cblx0ICogQHJldHVybnMge0FycmF5fSBUaGUgbmV3IGFycmF5IG9mIGNvZGUgcG9pbnRzLlxuXHQgKi9cblx0ZnVuY3Rpb24gdWNzMmRlY29kZShzdHJpbmcpIHtcblx0XHR2YXIgb3V0cHV0ID0gW10sXG5cdFx0ICAgIGNvdW50ZXIgPSAwLFxuXHRcdCAgICBsZW5ndGggPSBzdHJpbmcubGVuZ3RoLFxuXHRcdCAgICB2YWx1ZSxcblx0XHQgICAgZXh0cmE7XG5cdFx0d2hpbGUgKGNvdW50ZXIgPCBsZW5ndGgpIHtcblx0XHRcdHZhbHVlID0gc3RyaW5nLmNoYXJDb2RlQXQoY291bnRlcisrKTtcblx0XHRcdGlmICh2YWx1ZSA+PSAweEQ4MDAgJiYgdmFsdWUgPD0gMHhEQkZGICYmIGNvdW50ZXIgPCBsZW5ndGgpIHtcblx0XHRcdFx0Ly8gaGlnaCBzdXJyb2dhdGUsIGFuZCB0aGVyZSBpcyBhIG5leHQgY2hhcmFjdGVyXG5cdFx0XHRcdGV4dHJhID0gc3RyaW5nLmNoYXJDb2RlQXQoY291bnRlcisrKTtcblx0XHRcdFx0aWYgKChleHRyYSAmIDB4RkMwMCkgPT0gMHhEQzAwKSB7IC8vIGxvdyBzdXJyb2dhdGVcblx0XHRcdFx0XHRvdXRwdXQucHVzaCgoKHZhbHVlICYgMHgzRkYpIDw8IDEwKSArIChleHRyYSAmIDB4M0ZGKSArIDB4MTAwMDApO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdC8vIHVubWF0Y2hlZCBzdXJyb2dhdGU7IG9ubHkgYXBwZW5kIHRoaXMgY29kZSB1bml0LCBpbiBjYXNlIHRoZSBuZXh0XG5cdFx0XHRcdFx0Ly8gY29kZSB1bml0IGlzIHRoZSBoaWdoIHN1cnJvZ2F0ZSBvZiBhIHN1cnJvZ2F0ZSBwYWlyXG5cdFx0XHRcdFx0b3V0cHV0LnB1c2godmFsdWUpO1xuXHRcdFx0XHRcdGNvdW50ZXItLTtcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0b3V0cHV0LnB1c2godmFsdWUpO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gb3V0cHV0O1xuXHR9XG5cblx0LyoqXG5cdCAqIENyZWF0ZXMgYSBzdHJpbmcgYmFzZWQgb24gYW4gYXJyYXkgb2YgbnVtZXJpYyBjb2RlIHBvaW50cy5cblx0ICogQHNlZSBgcHVueWNvZGUudWNzMi5kZWNvZGVgXG5cdCAqIEBtZW1iZXJPZiBwdW55Y29kZS51Y3MyXG5cdCAqIEBuYW1lIGVuY29kZVxuXHQgKiBAcGFyYW0ge0FycmF5fSBjb2RlUG9pbnRzIFRoZSBhcnJheSBvZiBudW1lcmljIGNvZGUgcG9pbnRzLlxuXHQgKiBAcmV0dXJucyB7U3RyaW5nfSBUaGUgbmV3IFVuaWNvZGUgc3RyaW5nIChVQ1MtMikuXG5cdCAqL1xuXHRmdW5jdGlvbiB1Y3MyZW5jb2RlKGFycmF5KSB7XG5cdFx0cmV0dXJuIG1hcChhcnJheSwgZnVuY3Rpb24odmFsdWUpIHtcblx0XHRcdHZhciBvdXRwdXQgPSAnJztcblx0XHRcdGlmICh2YWx1ZSA+IDB4RkZGRikge1xuXHRcdFx0XHR2YWx1ZSAtPSAweDEwMDAwO1xuXHRcdFx0XHRvdXRwdXQgKz0gc3RyaW5nRnJvbUNoYXJDb2RlKHZhbHVlID4+PiAxMCAmIDB4M0ZGIHwgMHhEODAwKTtcblx0XHRcdFx0dmFsdWUgPSAweERDMDAgfCB2YWx1ZSAmIDB4M0ZGO1xuXHRcdFx0fVxuXHRcdFx0b3V0cHV0ICs9IHN0cmluZ0Zyb21DaGFyQ29kZSh2YWx1ZSk7XG5cdFx0XHRyZXR1cm4gb3V0cHV0O1xuXHRcdH0pLmpvaW4oJycpO1xuXHR9XG5cblx0LyoqXG5cdCAqIENvbnZlcnRzIGEgYmFzaWMgY29kZSBwb2ludCBpbnRvIGEgZGlnaXQvaW50ZWdlci5cblx0ICogQHNlZSBgZGlnaXRUb0Jhc2ljKClgXG5cdCAqIEBwcml2YXRlXG5cdCAqIEBwYXJhbSB7TnVtYmVyfSBjb2RlUG9pbnQgVGhlIGJhc2ljIG51bWVyaWMgY29kZSBwb2ludCB2YWx1ZS5cblx0ICogQHJldHVybnMge051bWJlcn0gVGhlIG51bWVyaWMgdmFsdWUgb2YgYSBiYXNpYyBjb2RlIHBvaW50IChmb3IgdXNlIGluXG5cdCAqIHJlcHJlc2VudGluZyBpbnRlZ2VycykgaW4gdGhlIHJhbmdlIGAwYCB0byBgYmFzZSAtIDFgLCBvciBgYmFzZWAgaWZcblx0ICogdGhlIGNvZGUgcG9pbnQgZG9lcyBub3QgcmVwcmVzZW50IGEgdmFsdWUuXG5cdCAqL1xuXHRmdW5jdGlvbiBiYXNpY1RvRGlnaXQoY29kZVBvaW50KSB7XG5cdFx0aWYgKGNvZGVQb2ludCAtIDQ4IDwgMTApIHtcblx0XHRcdHJldHVybiBjb2RlUG9pbnQgLSAyMjtcblx0XHR9XG5cdFx0aWYgKGNvZGVQb2ludCAtIDY1IDwgMjYpIHtcblx0XHRcdHJldHVybiBjb2RlUG9pbnQgLSA2NTtcblx0XHR9XG5cdFx0aWYgKGNvZGVQb2ludCAtIDk3IDwgMjYpIHtcblx0XHRcdHJldHVybiBjb2RlUG9pbnQgLSA5Nztcblx0XHR9XG5cdFx0cmV0dXJuIGJhc2U7XG5cdH1cblxuXHQvKipcblx0ICogQ29udmVydHMgYSBkaWdpdC9pbnRlZ2VyIGludG8gYSBiYXNpYyBjb2RlIHBvaW50LlxuXHQgKiBAc2VlIGBiYXNpY1RvRGlnaXQoKWBcblx0ICogQHByaXZhdGVcblx0ICogQHBhcmFtIHtOdW1iZXJ9IGRpZ2l0IFRoZSBudW1lcmljIHZhbHVlIG9mIGEgYmFzaWMgY29kZSBwb2ludC5cblx0ICogQHJldHVybnMge051bWJlcn0gVGhlIGJhc2ljIGNvZGUgcG9pbnQgd2hvc2UgdmFsdWUgKHdoZW4gdXNlZCBmb3Jcblx0ICogcmVwcmVzZW50aW5nIGludGVnZXJzKSBpcyBgZGlnaXRgLCB3aGljaCBuZWVkcyB0byBiZSBpbiB0aGUgcmFuZ2Vcblx0ICogYDBgIHRvIGBiYXNlIC0gMWAuIElmIGBmbGFnYCBpcyBub24temVybywgdGhlIHVwcGVyY2FzZSBmb3JtIGlzXG5cdCAqIHVzZWQ7IGVsc2UsIHRoZSBsb3dlcmNhc2UgZm9ybSBpcyB1c2VkLiBUaGUgYmVoYXZpb3IgaXMgdW5kZWZpbmVkXG5cdCAqIGlmIGBmbGFnYCBpcyBub24temVybyBhbmQgYGRpZ2l0YCBoYXMgbm8gdXBwZXJjYXNlIGZvcm0uXG5cdCAqL1xuXHRmdW5jdGlvbiBkaWdpdFRvQmFzaWMoZGlnaXQsIGZsYWcpIHtcblx0XHQvLyAgMC4uMjUgbWFwIHRvIEFTQ0lJIGEuLnogb3IgQS4uWlxuXHRcdC8vIDI2Li4zNSBtYXAgdG8gQVNDSUkgMC4uOVxuXHRcdHJldHVybiBkaWdpdCArIDIyICsgNzUgKiAoZGlnaXQgPCAyNikgLSAoKGZsYWcgIT0gMCkgPDwgNSk7XG5cdH1cblxuXHQvKipcblx0ICogQmlhcyBhZGFwdGF0aW9uIGZ1bmN0aW9uIGFzIHBlciBzZWN0aW9uIDMuNCBvZiBSRkMgMzQ5Mi5cblx0ICogaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzM0OTIjc2VjdGlvbi0zLjRcblx0ICogQHByaXZhdGVcblx0ICovXG5cdGZ1bmN0aW9uIGFkYXB0KGRlbHRhLCBudW1Qb2ludHMsIGZpcnN0VGltZSkge1xuXHRcdHZhciBrID0gMDtcblx0XHRkZWx0YSA9IGZpcnN0VGltZSA/IGZsb29yKGRlbHRhIC8gZGFtcCkgOiBkZWx0YSA+PiAxO1xuXHRcdGRlbHRhICs9IGZsb29yKGRlbHRhIC8gbnVtUG9pbnRzKTtcblx0XHRmb3IgKC8qIG5vIGluaXRpYWxpemF0aW9uICovOyBkZWx0YSA+IGJhc2VNaW51c1RNaW4gKiB0TWF4ID4+IDE7IGsgKz0gYmFzZSkge1xuXHRcdFx0ZGVsdGEgPSBmbG9vcihkZWx0YSAvIGJhc2VNaW51c1RNaW4pO1xuXHRcdH1cblx0XHRyZXR1cm4gZmxvb3IoayArIChiYXNlTWludXNUTWluICsgMSkgKiBkZWx0YSAvIChkZWx0YSArIHNrZXcpKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBDb252ZXJ0cyBhIFB1bnljb2RlIHN0cmluZyBvZiBBU0NJSS1vbmx5IHN5bWJvbHMgdG8gYSBzdHJpbmcgb2YgVW5pY29kZVxuXHQgKiBzeW1ib2xzLlxuXHQgKiBAbWVtYmVyT2YgcHVueWNvZGVcblx0ICogQHBhcmFtIHtTdHJpbmd9IGlucHV0IFRoZSBQdW55Y29kZSBzdHJpbmcgb2YgQVNDSUktb25seSBzeW1ib2xzLlxuXHQgKiBAcmV0dXJucyB7U3RyaW5nfSBUaGUgcmVzdWx0aW5nIHN0cmluZyBvZiBVbmljb2RlIHN5bWJvbHMuXG5cdCAqL1xuXHRmdW5jdGlvbiBkZWNvZGUoaW5wdXQpIHtcblx0XHQvLyBEb24ndCB1c2UgVUNTLTJcblx0XHR2YXIgb3V0cHV0ID0gW10sXG5cdFx0ICAgIGlucHV0TGVuZ3RoID0gaW5wdXQubGVuZ3RoLFxuXHRcdCAgICBvdXQsXG5cdFx0ICAgIGkgPSAwLFxuXHRcdCAgICBuID0gaW5pdGlhbE4sXG5cdFx0ICAgIGJpYXMgPSBpbml0aWFsQmlhcyxcblx0XHQgICAgYmFzaWMsXG5cdFx0ICAgIGosXG5cdFx0ICAgIGluZGV4LFxuXHRcdCAgICBvbGRpLFxuXHRcdCAgICB3LFxuXHRcdCAgICBrLFxuXHRcdCAgICBkaWdpdCxcblx0XHQgICAgdCxcblx0XHQgICAgLyoqIENhY2hlZCBjYWxjdWxhdGlvbiByZXN1bHRzICovXG5cdFx0ICAgIGJhc2VNaW51c1Q7XG5cblx0XHQvLyBIYW5kbGUgdGhlIGJhc2ljIGNvZGUgcG9pbnRzOiBsZXQgYGJhc2ljYCBiZSB0aGUgbnVtYmVyIG9mIGlucHV0IGNvZGVcblx0XHQvLyBwb2ludHMgYmVmb3JlIHRoZSBsYXN0IGRlbGltaXRlciwgb3IgYDBgIGlmIHRoZXJlIGlzIG5vbmUsIHRoZW4gY29weVxuXHRcdC8vIHRoZSBmaXJzdCBiYXNpYyBjb2RlIHBvaW50cyB0byB0aGUgb3V0cHV0LlxuXG5cdFx0YmFzaWMgPSBpbnB1dC5sYXN0SW5kZXhPZihkZWxpbWl0ZXIpO1xuXHRcdGlmIChiYXNpYyA8IDApIHtcblx0XHRcdGJhc2ljID0gMDtcblx0XHR9XG5cblx0XHRmb3IgKGogPSAwOyBqIDwgYmFzaWM7ICsraikge1xuXHRcdFx0Ly8gaWYgaXQncyBub3QgYSBiYXNpYyBjb2RlIHBvaW50XG5cdFx0XHRpZiAoaW5wdXQuY2hhckNvZGVBdChqKSA+PSAweDgwKSB7XG5cdFx0XHRcdGVycm9yKCdub3QtYmFzaWMnKTtcblx0XHRcdH1cblx0XHRcdG91dHB1dC5wdXNoKGlucHV0LmNoYXJDb2RlQXQoaikpO1xuXHRcdH1cblxuXHRcdC8vIE1haW4gZGVjb2RpbmcgbG9vcDogc3RhcnQganVzdCBhZnRlciB0aGUgbGFzdCBkZWxpbWl0ZXIgaWYgYW55IGJhc2ljIGNvZGVcblx0XHQvLyBwb2ludHMgd2VyZSBjb3BpZWQ7IHN0YXJ0IGF0IHRoZSBiZWdpbm5pbmcgb3RoZXJ3aXNlLlxuXG5cdFx0Zm9yIChpbmRleCA9IGJhc2ljID4gMCA/IGJhc2ljICsgMSA6IDA7IGluZGV4IDwgaW5wdXRMZW5ndGg7IC8qIG5vIGZpbmFsIGV4cHJlc3Npb24gKi8pIHtcblxuXHRcdFx0Ly8gYGluZGV4YCBpcyB0aGUgaW5kZXggb2YgdGhlIG5leHQgY2hhcmFjdGVyIHRvIGJlIGNvbnN1bWVkLlxuXHRcdFx0Ly8gRGVjb2RlIGEgZ2VuZXJhbGl6ZWQgdmFyaWFibGUtbGVuZ3RoIGludGVnZXIgaW50byBgZGVsdGFgLFxuXHRcdFx0Ly8gd2hpY2ggZ2V0cyBhZGRlZCB0byBgaWAuIFRoZSBvdmVyZmxvdyBjaGVja2luZyBpcyBlYXNpZXJcblx0XHRcdC8vIGlmIHdlIGluY3JlYXNlIGBpYCBhcyB3ZSBnbywgdGhlbiBzdWJ0cmFjdCBvZmYgaXRzIHN0YXJ0aW5nXG5cdFx0XHQvLyB2YWx1ZSBhdCB0aGUgZW5kIHRvIG9idGFpbiBgZGVsdGFgLlxuXHRcdFx0Zm9yIChvbGRpID0gaSwgdyA9IDEsIGsgPSBiYXNlOyAvKiBubyBjb25kaXRpb24gKi87IGsgKz0gYmFzZSkge1xuXG5cdFx0XHRcdGlmIChpbmRleCA+PSBpbnB1dExlbmd0aCkge1xuXHRcdFx0XHRcdGVycm9yKCdpbnZhbGlkLWlucHV0Jyk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRkaWdpdCA9IGJhc2ljVG9EaWdpdChpbnB1dC5jaGFyQ29kZUF0KGluZGV4KyspKTtcblxuXHRcdFx0XHRpZiAoZGlnaXQgPj0gYmFzZSB8fCBkaWdpdCA+IGZsb29yKChtYXhJbnQgLSBpKSAvIHcpKSB7XG5cdFx0XHRcdFx0ZXJyb3IoJ292ZXJmbG93Jyk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpICs9IGRpZ2l0ICogdztcblx0XHRcdFx0dCA9IGsgPD0gYmlhcyA/IHRNaW4gOiAoayA+PSBiaWFzICsgdE1heCA/IHRNYXggOiBrIC0gYmlhcyk7XG5cblx0XHRcdFx0aWYgKGRpZ2l0IDwgdCkge1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0YmFzZU1pbnVzVCA9IGJhc2UgLSB0O1xuXHRcdFx0XHRpZiAodyA+IGZsb29yKG1heEludCAvIGJhc2VNaW51c1QpKSB7XG5cdFx0XHRcdFx0ZXJyb3IoJ292ZXJmbG93Jyk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHR3ICo9IGJhc2VNaW51c1Q7XG5cblx0XHRcdH1cblxuXHRcdFx0b3V0ID0gb3V0cHV0Lmxlbmd0aCArIDE7XG5cdFx0XHRiaWFzID0gYWRhcHQoaSAtIG9sZGksIG91dCwgb2xkaSA9PSAwKTtcblxuXHRcdFx0Ly8gYGlgIHdhcyBzdXBwb3NlZCB0byB3cmFwIGFyb3VuZCBmcm9tIGBvdXRgIHRvIGAwYCxcblx0XHRcdC8vIGluY3JlbWVudGluZyBgbmAgZWFjaCB0aW1lLCBzbyB3ZSdsbCBmaXggdGhhdCBub3c6XG5cdFx0XHRpZiAoZmxvb3IoaSAvIG91dCkgPiBtYXhJbnQgLSBuKSB7XG5cdFx0XHRcdGVycm9yKCdvdmVyZmxvdycpO1xuXHRcdFx0fVxuXG5cdFx0XHRuICs9IGZsb29yKGkgLyBvdXQpO1xuXHRcdFx0aSAlPSBvdXQ7XG5cblx0XHRcdC8vIEluc2VydCBgbmAgYXQgcG9zaXRpb24gYGlgIG9mIHRoZSBvdXRwdXRcblx0XHRcdG91dHB1dC5zcGxpY2UoaSsrLCAwLCBuKTtcblxuXHRcdH1cblxuXHRcdHJldHVybiB1Y3MyZW5jb2RlKG91dHB1dCk7XG5cdH1cblxuXHQvKipcblx0ICogQ29udmVydHMgYSBzdHJpbmcgb2YgVW5pY29kZSBzeW1ib2xzIChlLmcuIGEgZG9tYWluIG5hbWUgbGFiZWwpIHRvIGFcblx0ICogUHVueWNvZGUgc3RyaW5nIG9mIEFTQ0lJLW9ubHkgc3ltYm9scy5cblx0ICogQG1lbWJlck9mIHB1bnljb2RlXG5cdCAqIEBwYXJhbSB7U3RyaW5nfSBpbnB1dCBUaGUgc3RyaW5nIG9mIFVuaWNvZGUgc3ltYm9scy5cblx0ICogQHJldHVybnMge1N0cmluZ30gVGhlIHJlc3VsdGluZyBQdW55Y29kZSBzdHJpbmcgb2YgQVNDSUktb25seSBzeW1ib2xzLlxuXHQgKi9cblx0ZnVuY3Rpb24gZW5jb2RlKGlucHV0KSB7XG5cdFx0dmFyIG4sXG5cdFx0ICAgIGRlbHRhLFxuXHRcdCAgICBoYW5kbGVkQ1BDb3VudCxcblx0XHQgICAgYmFzaWNMZW5ndGgsXG5cdFx0ICAgIGJpYXMsXG5cdFx0ICAgIGosXG5cdFx0ICAgIG0sXG5cdFx0ICAgIHEsXG5cdFx0ICAgIGssXG5cdFx0ICAgIHQsXG5cdFx0ICAgIGN1cnJlbnRWYWx1ZSxcblx0XHQgICAgb3V0cHV0ID0gW10sXG5cdFx0ICAgIC8qKiBgaW5wdXRMZW5ndGhgIHdpbGwgaG9sZCB0aGUgbnVtYmVyIG9mIGNvZGUgcG9pbnRzIGluIGBpbnB1dGAuICovXG5cdFx0ICAgIGlucHV0TGVuZ3RoLFxuXHRcdCAgICAvKiogQ2FjaGVkIGNhbGN1bGF0aW9uIHJlc3VsdHMgKi9cblx0XHQgICAgaGFuZGxlZENQQ291bnRQbHVzT25lLFxuXHRcdCAgICBiYXNlTWludXNULFxuXHRcdCAgICBxTWludXNUO1xuXG5cdFx0Ly8gQ29udmVydCB0aGUgaW5wdXQgaW4gVUNTLTIgdG8gVW5pY29kZVxuXHRcdGlucHV0ID0gdWNzMmRlY29kZShpbnB1dCk7XG5cblx0XHQvLyBDYWNoZSB0aGUgbGVuZ3RoXG5cdFx0aW5wdXRMZW5ndGggPSBpbnB1dC5sZW5ndGg7XG5cblx0XHQvLyBJbml0aWFsaXplIHRoZSBzdGF0ZVxuXHRcdG4gPSBpbml0aWFsTjtcblx0XHRkZWx0YSA9IDA7XG5cdFx0YmlhcyA9IGluaXRpYWxCaWFzO1xuXG5cdFx0Ly8gSGFuZGxlIHRoZSBiYXNpYyBjb2RlIHBvaW50c1xuXHRcdGZvciAoaiA9IDA7IGogPCBpbnB1dExlbmd0aDsgKytqKSB7XG5cdFx0XHRjdXJyZW50VmFsdWUgPSBpbnB1dFtqXTtcblx0XHRcdGlmIChjdXJyZW50VmFsdWUgPCAweDgwKSB7XG5cdFx0XHRcdG91dHB1dC5wdXNoKHN0cmluZ0Zyb21DaGFyQ29kZShjdXJyZW50VmFsdWUpKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRoYW5kbGVkQ1BDb3VudCA9IGJhc2ljTGVuZ3RoID0gb3V0cHV0Lmxlbmd0aDtcblxuXHRcdC8vIGBoYW5kbGVkQ1BDb3VudGAgaXMgdGhlIG51bWJlciBvZiBjb2RlIHBvaW50cyB0aGF0IGhhdmUgYmVlbiBoYW5kbGVkO1xuXHRcdC8vIGBiYXNpY0xlbmd0aGAgaXMgdGhlIG51bWJlciBvZiBiYXNpYyBjb2RlIHBvaW50cy5cblxuXHRcdC8vIEZpbmlzaCB0aGUgYmFzaWMgc3RyaW5nIC0gaWYgaXQgaXMgbm90IGVtcHR5IC0gd2l0aCBhIGRlbGltaXRlclxuXHRcdGlmIChiYXNpY0xlbmd0aCkge1xuXHRcdFx0b3V0cHV0LnB1c2goZGVsaW1pdGVyKTtcblx0XHR9XG5cblx0XHQvLyBNYWluIGVuY29kaW5nIGxvb3A6XG5cdFx0d2hpbGUgKGhhbmRsZWRDUENvdW50IDwgaW5wdXRMZW5ndGgpIHtcblxuXHRcdFx0Ly8gQWxsIG5vbi1iYXNpYyBjb2RlIHBvaW50cyA8IG4gaGF2ZSBiZWVuIGhhbmRsZWQgYWxyZWFkeS4gRmluZCB0aGUgbmV4dFxuXHRcdFx0Ly8gbGFyZ2VyIG9uZTpcblx0XHRcdGZvciAobSA9IG1heEludCwgaiA9IDA7IGogPCBpbnB1dExlbmd0aDsgKytqKSB7XG5cdFx0XHRcdGN1cnJlbnRWYWx1ZSA9IGlucHV0W2pdO1xuXHRcdFx0XHRpZiAoY3VycmVudFZhbHVlID49IG4gJiYgY3VycmVudFZhbHVlIDwgbSkge1xuXHRcdFx0XHRcdG0gPSBjdXJyZW50VmFsdWU7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0Ly8gSW5jcmVhc2UgYGRlbHRhYCBlbm91Z2ggdG8gYWR2YW5jZSB0aGUgZGVjb2RlcidzIDxuLGk+IHN0YXRlIHRvIDxtLDA+LFxuXHRcdFx0Ly8gYnV0IGd1YXJkIGFnYWluc3Qgb3ZlcmZsb3dcblx0XHRcdGhhbmRsZWRDUENvdW50UGx1c09uZSA9IGhhbmRsZWRDUENvdW50ICsgMTtcblx0XHRcdGlmIChtIC0gbiA+IGZsb29yKChtYXhJbnQgLSBkZWx0YSkgLyBoYW5kbGVkQ1BDb3VudFBsdXNPbmUpKSB7XG5cdFx0XHRcdGVycm9yKCdvdmVyZmxvdycpO1xuXHRcdFx0fVxuXG5cdFx0XHRkZWx0YSArPSAobSAtIG4pICogaGFuZGxlZENQQ291bnRQbHVzT25lO1xuXHRcdFx0biA9IG07XG5cblx0XHRcdGZvciAoaiA9IDA7IGogPCBpbnB1dExlbmd0aDsgKytqKSB7XG5cdFx0XHRcdGN1cnJlbnRWYWx1ZSA9IGlucHV0W2pdO1xuXG5cdFx0XHRcdGlmIChjdXJyZW50VmFsdWUgPCBuICYmICsrZGVsdGEgPiBtYXhJbnQpIHtcblx0XHRcdFx0XHRlcnJvcignb3ZlcmZsb3cnKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGlmIChjdXJyZW50VmFsdWUgPT0gbikge1xuXHRcdFx0XHRcdC8vIFJlcHJlc2VudCBkZWx0YSBhcyBhIGdlbmVyYWxpemVkIHZhcmlhYmxlLWxlbmd0aCBpbnRlZ2VyXG5cdFx0XHRcdFx0Zm9yIChxID0gZGVsdGEsIGsgPSBiYXNlOyAvKiBubyBjb25kaXRpb24gKi87IGsgKz0gYmFzZSkge1xuXHRcdFx0XHRcdFx0dCA9IGsgPD0gYmlhcyA/IHRNaW4gOiAoayA+PSBiaWFzICsgdE1heCA/IHRNYXggOiBrIC0gYmlhcyk7XG5cdFx0XHRcdFx0XHRpZiAocSA8IHQpIHtcblx0XHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRxTWludXNUID0gcSAtIHQ7XG5cdFx0XHRcdFx0XHRiYXNlTWludXNUID0gYmFzZSAtIHQ7XG5cdFx0XHRcdFx0XHRvdXRwdXQucHVzaChcblx0XHRcdFx0XHRcdFx0c3RyaW5nRnJvbUNoYXJDb2RlKGRpZ2l0VG9CYXNpYyh0ICsgcU1pbnVzVCAlIGJhc2VNaW51c1QsIDApKVxuXHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdHEgPSBmbG9vcihxTWludXNUIC8gYmFzZU1pbnVzVCk7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0b3V0cHV0LnB1c2goc3RyaW5nRnJvbUNoYXJDb2RlKGRpZ2l0VG9CYXNpYyhxLCAwKSkpO1xuXHRcdFx0XHRcdGJpYXMgPSBhZGFwdChkZWx0YSwgaGFuZGxlZENQQ291bnRQbHVzT25lLCBoYW5kbGVkQ1BDb3VudCA9PSBiYXNpY0xlbmd0aCk7XG5cdFx0XHRcdFx0ZGVsdGEgPSAwO1xuXHRcdFx0XHRcdCsraGFuZGxlZENQQ291bnQ7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0KytkZWx0YTtcblx0XHRcdCsrbjtcblxuXHRcdH1cblx0XHRyZXR1cm4gb3V0cHV0LmpvaW4oJycpO1xuXHR9XG5cblx0LyoqXG5cdCAqIENvbnZlcnRzIGEgUHVueWNvZGUgc3RyaW5nIHJlcHJlc2VudGluZyBhIGRvbWFpbiBuYW1lIG9yIGFuIGVtYWlsIGFkZHJlc3Ncblx0ICogdG8gVW5pY29kZS4gT25seSB0aGUgUHVueWNvZGVkIHBhcnRzIG9mIHRoZSBpbnB1dCB3aWxsIGJlIGNvbnZlcnRlZCwgaS5lLlxuXHQgKiBpdCBkb2Vzbid0IG1hdHRlciBpZiB5b3UgY2FsbCBpdCBvbiBhIHN0cmluZyB0aGF0IGhhcyBhbHJlYWR5IGJlZW5cblx0ICogY29udmVydGVkIHRvIFVuaWNvZGUuXG5cdCAqIEBtZW1iZXJPZiBwdW55Y29kZVxuXHQgKiBAcGFyYW0ge1N0cmluZ30gaW5wdXQgVGhlIFB1bnljb2RlZCBkb21haW4gbmFtZSBvciBlbWFpbCBhZGRyZXNzIHRvXG5cdCAqIGNvbnZlcnQgdG8gVW5pY29kZS5cblx0ICogQHJldHVybnMge1N0cmluZ30gVGhlIFVuaWNvZGUgcmVwcmVzZW50YXRpb24gb2YgdGhlIGdpdmVuIFB1bnljb2RlXG5cdCAqIHN0cmluZy5cblx0ICovXG5cdGZ1bmN0aW9uIHRvVW5pY29kZShpbnB1dCkge1xuXHRcdHJldHVybiBtYXBEb21haW4oaW5wdXQsIGZ1bmN0aW9uKHN0cmluZykge1xuXHRcdFx0cmV0dXJuIHJlZ2V4UHVueWNvZGUudGVzdChzdHJpbmcpXG5cdFx0XHRcdD8gZGVjb2RlKHN0cmluZy5zbGljZSg0KS50b0xvd2VyQ2FzZSgpKVxuXHRcdFx0XHQ6IHN0cmluZztcblx0XHR9KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBDb252ZXJ0cyBhIFVuaWNvZGUgc3RyaW5nIHJlcHJlc2VudGluZyBhIGRvbWFpbiBuYW1lIG9yIGFuIGVtYWlsIGFkZHJlc3MgdG9cblx0ICogUHVueWNvZGUuIE9ubHkgdGhlIG5vbi1BU0NJSSBwYXJ0cyBvZiB0aGUgZG9tYWluIG5hbWUgd2lsbCBiZSBjb252ZXJ0ZWQsXG5cdCAqIGkuZS4gaXQgZG9lc24ndCBtYXR0ZXIgaWYgeW91IGNhbGwgaXQgd2l0aCBhIGRvbWFpbiB0aGF0J3MgYWxyZWFkeSBpblxuXHQgKiBBU0NJSS5cblx0ICogQG1lbWJlck9mIHB1bnljb2RlXG5cdCAqIEBwYXJhbSB7U3RyaW5nfSBpbnB1dCBUaGUgZG9tYWluIG5hbWUgb3IgZW1haWwgYWRkcmVzcyB0byBjb252ZXJ0LCBhcyBhXG5cdCAqIFVuaWNvZGUgc3RyaW5nLlxuXHQgKiBAcmV0dXJucyB7U3RyaW5nfSBUaGUgUHVueWNvZGUgcmVwcmVzZW50YXRpb24gb2YgdGhlIGdpdmVuIGRvbWFpbiBuYW1lIG9yXG5cdCAqIGVtYWlsIGFkZHJlc3MuXG5cdCAqL1xuXHRmdW5jdGlvbiB0b0FTQ0lJKGlucHV0KSB7XG5cdFx0cmV0dXJuIG1hcERvbWFpbihpbnB1dCwgZnVuY3Rpb24oc3RyaW5nKSB7XG5cdFx0XHRyZXR1cm4gcmVnZXhOb25BU0NJSS50ZXN0KHN0cmluZylcblx0XHRcdFx0PyAneG4tLScgKyBlbmNvZGUoc3RyaW5nKVxuXHRcdFx0XHQ6IHN0cmluZztcblx0XHR9KTtcblx0fVxuXG5cdC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuXG5cdC8qKiBEZWZpbmUgdGhlIHB1YmxpYyBBUEkgKi9cblx0cHVueWNvZGUgPSB7XG5cdFx0LyoqXG5cdFx0ICogQSBzdHJpbmcgcmVwcmVzZW50aW5nIHRoZSBjdXJyZW50IFB1bnljb2RlLmpzIHZlcnNpb24gbnVtYmVyLlxuXHRcdCAqIEBtZW1iZXJPZiBwdW55Y29kZVxuXHRcdCAqIEB0eXBlIFN0cmluZ1xuXHRcdCAqL1xuXHRcdCd2ZXJzaW9uJzogJzEuMy4yJyxcblx0XHQvKipcblx0XHQgKiBBbiBvYmplY3Qgb2YgbWV0aG9kcyB0byBjb252ZXJ0IGZyb20gSmF2YVNjcmlwdCdzIGludGVybmFsIGNoYXJhY3RlclxuXHRcdCAqIHJlcHJlc2VudGF0aW9uIChVQ1MtMikgdG8gVW5pY29kZSBjb2RlIHBvaW50cywgYW5kIGJhY2suXG5cdFx0ICogQHNlZSA8aHR0cHM6Ly9tYXRoaWFzYnluZW5zLmJlL25vdGVzL2phdmFzY3JpcHQtZW5jb2Rpbmc+XG5cdFx0ICogQG1lbWJlck9mIHB1bnljb2RlXG5cdFx0ICogQHR5cGUgT2JqZWN0XG5cdFx0ICovXG5cdFx0J3VjczInOiB7XG5cdFx0XHQnZGVjb2RlJzogdWNzMmRlY29kZSxcblx0XHRcdCdlbmNvZGUnOiB1Y3MyZW5jb2RlXG5cdFx0fSxcblx0XHQnZGVjb2RlJzogZGVjb2RlLFxuXHRcdCdlbmNvZGUnOiBlbmNvZGUsXG5cdFx0J3RvQVNDSUknOiB0b0FTQ0lJLFxuXHRcdCd0b1VuaWNvZGUnOiB0b1VuaWNvZGVcblx0fTtcblxuXHQvKiogRXhwb3NlIGBwdW55Y29kZWAgKi9cblx0Ly8gU29tZSBBTUQgYnVpbGQgb3B0aW1pemVycywgbGlrZSByLmpzLCBjaGVjayBmb3Igc3BlY2lmaWMgY29uZGl0aW9uIHBhdHRlcm5zXG5cdC8vIGxpa2UgdGhlIGZvbGxvd2luZzpcblx0aWYgKFxuXHRcdHR5cGVvZiBkZWZpbmUgPT0gJ2Z1bmN0aW9uJyAmJlxuXHRcdHR5cGVvZiBkZWZpbmUuYW1kID09ICdvYmplY3QnICYmXG5cdFx0ZGVmaW5lLmFtZFxuXHQpIHtcblx0XHRkZWZpbmUoJ3B1bnljb2RlJywgZnVuY3Rpb24oKSB7XG5cdFx0XHRyZXR1cm4gcHVueWNvZGU7XG5cdFx0fSk7XG5cdH0gZWxzZSBpZiAoZnJlZUV4cG9ydHMgJiYgZnJlZU1vZHVsZSkge1xuXHRcdGlmIChtb2R1bGUuZXhwb3J0cyA9PSBmcmVlRXhwb3J0cykge1xuXHRcdFx0Ly8gaW4gTm9kZS5qcywgaW8uanMsIG9yIFJpbmdvSlMgdjAuOC4wK1xuXHRcdFx0ZnJlZU1vZHVsZS5leHBvcnRzID0gcHVueWNvZGU7XG5cdFx0fSBlbHNlIHtcblx0XHRcdC8vIGluIE5hcndoYWwgb3IgUmluZ29KUyB2MC43LjAtXG5cdFx0XHRmb3IgKGtleSBpbiBwdW55Y29kZSkge1xuXHRcdFx0XHRwdW55Y29kZS5oYXNPd25Qcm9wZXJ0eShrZXkpICYmIChmcmVlRXhwb3J0c1trZXldID0gcHVueWNvZGVba2V5XSk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9IGVsc2Uge1xuXHRcdC8vIGluIFJoaW5vIG9yIGEgd2ViIGJyb3dzZXJcblx0XHRyb290LnB1bnljb2RlID0gcHVueWNvZGU7XG5cdH1cblxufSh0aGlzKSk7XG4iLCIvLyBDb3B5cmlnaHQgSm95ZW50LCBJbmMuIGFuZCBvdGhlciBOb2RlIGNvbnRyaWJ1dG9ycy5cbi8vXG4vLyBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYVxuLy8gY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZVxuLy8gXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nXG4vLyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsXG4vLyBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0XG4vLyBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGVcbi8vIGZvbGxvd2luZyBjb25kaXRpb25zOlxuLy9cbi8vIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkXG4vLyBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbi8vXG4vLyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTXG4vLyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GXG4vLyBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOXG4vLyBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSxcbi8vIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUlxuLy8gT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRVxuLy8gVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cblxuJ3VzZSBzdHJpY3QnO1xuXG4vLyBJZiBvYmouaGFzT3duUHJvcGVydHkgaGFzIGJlZW4gb3ZlcnJpZGRlbiwgdGhlbiBjYWxsaW5nXG4vLyBvYmouaGFzT3duUHJvcGVydHkocHJvcCkgd2lsbCBicmVhay5cbi8vIFNlZTogaHR0cHM6Ly9naXRodWIuY29tL2pveWVudC9ub2RlL2lzc3Vlcy8xNzA3XG5mdW5jdGlvbiBoYXNPd25Qcm9wZXJ0eShvYmosIHByb3ApIHtcbiAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmosIHByb3ApO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKHFzLCBzZXAsIGVxLCBvcHRpb25zKSB7XG4gIHNlcCA9IHNlcCB8fCAnJic7XG4gIGVxID0gZXEgfHwgJz0nO1xuICB2YXIgb2JqID0ge307XG5cbiAgaWYgKHR5cGVvZiBxcyAhPT0gJ3N0cmluZycgfHwgcXMubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIG9iajtcbiAgfVxuXG4gIHZhciByZWdleHAgPSAvXFwrL2c7XG4gIHFzID0gcXMuc3BsaXQoc2VwKTtcblxuICB2YXIgbWF4S2V5cyA9IDEwMDA7XG4gIGlmIChvcHRpb25zICYmIHR5cGVvZiBvcHRpb25zLm1heEtleXMgPT09ICdudW1iZXInKSB7XG4gICAgbWF4S2V5cyA9IG9wdGlvbnMubWF4S2V5cztcbiAgfVxuXG4gIHZhciBsZW4gPSBxcy5sZW5ndGg7XG4gIC8vIG1heEtleXMgPD0gMCBtZWFucyB0aGF0IHdlIHNob3VsZCBub3QgbGltaXQga2V5cyBjb3VudFxuICBpZiAobWF4S2V5cyA+IDAgJiYgbGVuID4gbWF4S2V5cykge1xuICAgIGxlbiA9IG1heEtleXM7XG4gIH1cblxuICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgKytpKSB7XG4gICAgdmFyIHggPSBxc1tpXS5yZXBsYWNlKHJlZ2V4cCwgJyUyMCcpLFxuICAgICAgICBpZHggPSB4LmluZGV4T2YoZXEpLFxuICAgICAgICBrc3RyLCB2c3RyLCBrLCB2O1xuXG4gICAgaWYgKGlkeCA+PSAwKSB7XG4gICAgICBrc3RyID0geC5zdWJzdHIoMCwgaWR4KTtcbiAgICAgIHZzdHIgPSB4LnN1YnN0cihpZHggKyAxKTtcbiAgICB9IGVsc2Uge1xuICAgICAga3N0ciA9IHg7XG4gICAgICB2c3RyID0gJyc7XG4gICAgfVxuXG4gICAgayA9IGRlY29kZVVSSUNvbXBvbmVudChrc3RyKTtcbiAgICB2ID0gZGVjb2RlVVJJQ29tcG9uZW50KHZzdHIpO1xuXG4gICAgaWYgKCFoYXNPd25Qcm9wZXJ0eShvYmosIGspKSB7XG4gICAgICBvYmpba10gPSB2O1xuICAgIH0gZWxzZSBpZiAoaXNBcnJheShvYmpba10pKSB7XG4gICAgICBvYmpba10ucHVzaCh2KTtcbiAgICB9IGVsc2Uge1xuICAgICAgb2JqW2tdID0gW29ialtrXSwgdl07XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG9iajtcbn07XG5cbnZhciBpc0FycmF5ID0gQXJyYXkuaXNBcnJheSB8fCBmdW5jdGlvbiAoeHMpIHtcbiAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh4cykgPT09ICdbb2JqZWN0IEFycmF5XSc7XG59O1xuIiwiLy8gQ29weXJpZ2h0IEpveWVudCwgSW5jLiBhbmQgb3RoZXIgTm9kZSBjb250cmlidXRvcnMuXG4vL1xuLy8gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGFcbi8vIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGVcbi8vIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZ1xuLy8gd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLFxuLy8gZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdFxuLy8gcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlXG4vLyBmb2xsb3dpbmcgY29uZGl0aW9uczpcbi8vXG4vLyBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZFxuLy8gaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4vL1xuLy8gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTU1xuLy8gT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRlxuLy8gTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTlxuLy8gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sXG4vLyBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1Jcbi8vIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEVcbi8vIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG5cbid1c2Ugc3RyaWN0JztcblxudmFyIHN0cmluZ2lmeVByaW1pdGl2ZSA9IGZ1bmN0aW9uKHYpIHtcbiAgc3dpdGNoICh0eXBlb2Ygdikge1xuICAgIGNhc2UgJ3N0cmluZyc6XG4gICAgICByZXR1cm4gdjtcblxuICAgIGNhc2UgJ2Jvb2xlYW4nOlxuICAgICAgcmV0dXJuIHYgPyAndHJ1ZScgOiAnZmFsc2UnO1xuXG4gICAgY2FzZSAnbnVtYmVyJzpcbiAgICAgIHJldHVybiBpc0Zpbml0ZSh2KSA/IHYgOiAnJztcblxuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gJyc7XG4gIH1cbn07XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24ob2JqLCBzZXAsIGVxLCBuYW1lKSB7XG4gIHNlcCA9IHNlcCB8fCAnJic7XG4gIGVxID0gZXEgfHwgJz0nO1xuICBpZiAob2JqID09PSBudWxsKSB7XG4gICAgb2JqID0gdW5kZWZpbmVkO1xuICB9XG5cbiAgaWYgKHR5cGVvZiBvYmogPT09ICdvYmplY3QnKSB7XG4gICAgcmV0dXJuIG1hcChvYmplY3RLZXlzKG9iaiksIGZ1bmN0aW9uKGspIHtcbiAgICAgIHZhciBrcyA9IGVuY29kZVVSSUNvbXBvbmVudChzdHJpbmdpZnlQcmltaXRpdmUoaykpICsgZXE7XG4gICAgICBpZiAoaXNBcnJheShvYmpba10pKSB7XG4gICAgICAgIHJldHVybiBtYXAob2JqW2tdLCBmdW5jdGlvbih2KSB7XG4gICAgICAgICAgcmV0dXJuIGtzICsgZW5jb2RlVVJJQ29tcG9uZW50KHN0cmluZ2lmeVByaW1pdGl2ZSh2KSk7XG4gICAgICAgIH0pLmpvaW4oc2VwKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBrcyArIGVuY29kZVVSSUNvbXBvbmVudChzdHJpbmdpZnlQcmltaXRpdmUob2JqW2tdKSk7XG4gICAgICB9XG4gICAgfSkuam9pbihzZXApO1xuXG4gIH1cblxuICBpZiAoIW5hbWUpIHJldHVybiAnJztcbiAgcmV0dXJuIGVuY29kZVVSSUNvbXBvbmVudChzdHJpbmdpZnlQcmltaXRpdmUobmFtZSkpICsgZXEgK1xuICAgICAgICAgZW5jb2RlVVJJQ29tcG9uZW50KHN0cmluZ2lmeVByaW1pdGl2ZShvYmopKTtcbn07XG5cbnZhciBpc0FycmF5ID0gQXJyYXkuaXNBcnJheSB8fCBmdW5jdGlvbiAoeHMpIHtcbiAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh4cykgPT09ICdbb2JqZWN0IEFycmF5XSc7XG59O1xuXG5mdW5jdGlvbiBtYXAgKHhzLCBmKSB7XG4gIGlmICh4cy5tYXApIHJldHVybiB4cy5tYXAoZik7XG4gIHZhciByZXMgPSBbXTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCB4cy5sZW5ndGg7IGkrKykge1xuICAgIHJlcy5wdXNoKGYoeHNbaV0sIGkpKTtcbiAgfVxuICByZXR1cm4gcmVzO1xufVxuXG52YXIgb2JqZWN0S2V5cyA9IE9iamVjdC5rZXlzIHx8IGZ1bmN0aW9uIChvYmopIHtcbiAgdmFyIHJlcyA9IFtdO1xuICBmb3IgKHZhciBrZXkgaW4gb2JqKSB7XG4gICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmosIGtleSkpIHJlcy5wdXNoKGtleSk7XG4gIH1cbiAgcmV0dXJuIHJlcztcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbmV4cG9ydHMuZGVjb2RlID0gZXhwb3J0cy5wYXJzZSA9IHJlcXVpcmUoJy4vZGVjb2RlJyk7XG5leHBvcnRzLmVuY29kZSA9IGV4cG9ydHMuc3RyaW5naWZ5ID0gcmVxdWlyZSgnLi9lbmNvZGUnKTtcbiIsIi8vIENvcHlyaWdodCBKb3llbnQsIEluYy4gYW5kIG90aGVyIE5vZGUgY29udHJpYnV0b3JzLlxuLy9cbi8vIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhXG4vLyBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlXG4vLyBcIlNvZnR3YXJlXCIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmdcbi8vIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCxcbi8vIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXRcbi8vIHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZVxuLy8gZm9sbG93aW5nIGNvbmRpdGlvbnM6XG4vL1xuLy8gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWRcbi8vIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuLy9cbi8vIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1Ncbi8vIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0Zcbi8vIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU5cbi8vIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLFxuLy8gREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SXG4vLyBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFXG4vLyBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLlxuXG52YXIgcHVueWNvZGUgPSByZXF1aXJlKCdwdW55Y29kZScpO1xuXG5leHBvcnRzLnBhcnNlID0gdXJsUGFyc2U7XG5leHBvcnRzLnJlc29sdmUgPSB1cmxSZXNvbHZlO1xuZXhwb3J0cy5yZXNvbHZlT2JqZWN0ID0gdXJsUmVzb2x2ZU9iamVjdDtcbmV4cG9ydHMuZm9ybWF0ID0gdXJsRm9ybWF0O1xuXG5leHBvcnRzLlVybCA9IFVybDtcblxuZnVuY3Rpb24gVXJsKCkge1xuICB0aGlzLnByb3RvY29sID0gbnVsbDtcbiAgdGhpcy5zbGFzaGVzID0gbnVsbDtcbiAgdGhpcy5hdXRoID0gbnVsbDtcbiAgdGhpcy5ob3N0ID0gbnVsbDtcbiAgdGhpcy5wb3J0ID0gbnVsbDtcbiAgdGhpcy5ob3N0bmFtZSA9IG51bGw7XG4gIHRoaXMuaGFzaCA9IG51bGw7XG4gIHRoaXMuc2VhcmNoID0gbnVsbDtcbiAgdGhpcy5xdWVyeSA9IG51bGw7XG4gIHRoaXMucGF0aG5hbWUgPSBudWxsO1xuICB0aGlzLnBhdGggPSBudWxsO1xuICB0aGlzLmhyZWYgPSBudWxsO1xufVxuXG4vLyBSZWZlcmVuY2U6IFJGQyAzOTg2LCBSRkMgMTgwOCwgUkZDIDIzOTZcblxuLy8gZGVmaW5lIHRoZXNlIGhlcmUgc28gYXQgbGVhc3QgdGhleSBvbmx5IGhhdmUgdG8gYmVcbi8vIGNvbXBpbGVkIG9uY2Ugb24gdGhlIGZpcnN0IG1vZHVsZSBsb2FkLlxudmFyIHByb3RvY29sUGF0dGVybiA9IC9eKFthLXowLTkuKy1dKzopL2ksXG4gICAgcG9ydFBhdHRlcm4gPSAvOlswLTldKiQvLFxuXG4gICAgLy8gUkZDIDIzOTY6IGNoYXJhY3RlcnMgcmVzZXJ2ZWQgZm9yIGRlbGltaXRpbmcgVVJMcy5cbiAgICAvLyBXZSBhY3R1YWxseSBqdXN0IGF1dG8tZXNjYXBlIHRoZXNlLlxuICAgIGRlbGltcyA9IFsnPCcsICc+JywgJ1wiJywgJ2AnLCAnICcsICdcXHInLCAnXFxuJywgJ1xcdCddLFxuXG4gICAgLy8gUkZDIDIzOTY6IGNoYXJhY3RlcnMgbm90IGFsbG93ZWQgZm9yIHZhcmlvdXMgcmVhc29ucy5cbiAgICB1bndpc2UgPSBbJ3snLCAnfScsICd8JywgJ1xcXFwnLCAnXicsICdgJ10uY29uY2F0KGRlbGltcyksXG5cbiAgICAvLyBBbGxvd2VkIGJ5IFJGQ3MsIGJ1dCBjYXVzZSBvZiBYU1MgYXR0YWNrcy4gIEFsd2F5cyBlc2NhcGUgdGhlc2UuXG4gICAgYXV0b0VzY2FwZSA9IFsnXFwnJ10uY29uY2F0KHVud2lzZSksXG4gICAgLy8gQ2hhcmFjdGVycyB0aGF0IGFyZSBuZXZlciBldmVyIGFsbG93ZWQgaW4gYSBob3N0bmFtZS5cbiAgICAvLyBOb3RlIHRoYXQgYW55IGludmFsaWQgY2hhcnMgYXJlIGFsc28gaGFuZGxlZCwgYnV0IHRoZXNlXG4gICAgLy8gYXJlIHRoZSBvbmVzIHRoYXQgYXJlICpleHBlY3RlZCogdG8gYmUgc2Vlbiwgc28gd2UgZmFzdC1wYXRoXG4gICAgLy8gdGhlbS5cbiAgICBub25Ib3N0Q2hhcnMgPSBbJyUnLCAnLycsICc/JywgJzsnLCAnIyddLmNvbmNhdChhdXRvRXNjYXBlKSxcbiAgICBob3N0RW5kaW5nQ2hhcnMgPSBbJy8nLCAnPycsICcjJ10sXG4gICAgaG9zdG5hbWVNYXhMZW4gPSAyNTUsXG4gICAgaG9zdG5hbWVQYXJ0UGF0dGVybiA9IC9eW2EtejAtOUEtWl8tXXswLDYzfSQvLFxuICAgIGhvc3RuYW1lUGFydFN0YXJ0ID0gL14oW2EtejAtOUEtWl8tXXswLDYzfSkoLiopJC8sXG4gICAgLy8gcHJvdG9jb2xzIHRoYXQgY2FuIGFsbG93IFwidW5zYWZlXCIgYW5kIFwidW53aXNlXCIgY2hhcnMuXG4gICAgdW5zYWZlUHJvdG9jb2wgPSB7XG4gICAgICAnamF2YXNjcmlwdCc6IHRydWUsXG4gICAgICAnamF2YXNjcmlwdDonOiB0cnVlXG4gICAgfSxcbiAgICAvLyBwcm90b2NvbHMgdGhhdCBuZXZlciBoYXZlIGEgaG9zdG5hbWUuXG4gICAgaG9zdGxlc3NQcm90b2NvbCA9IHtcbiAgICAgICdqYXZhc2NyaXB0JzogdHJ1ZSxcbiAgICAgICdqYXZhc2NyaXB0Oic6IHRydWVcbiAgICB9LFxuICAgIC8vIHByb3RvY29scyB0aGF0IGFsd2F5cyBjb250YWluIGEgLy8gYml0LlxuICAgIHNsYXNoZWRQcm90b2NvbCA9IHtcbiAgICAgICdodHRwJzogdHJ1ZSxcbiAgICAgICdodHRwcyc6IHRydWUsXG4gICAgICAnZnRwJzogdHJ1ZSxcbiAgICAgICdnb3BoZXInOiB0cnVlLFxuICAgICAgJ2ZpbGUnOiB0cnVlLFxuICAgICAgJ2h0dHA6JzogdHJ1ZSxcbiAgICAgICdodHRwczonOiB0cnVlLFxuICAgICAgJ2Z0cDonOiB0cnVlLFxuICAgICAgJ2dvcGhlcjonOiB0cnVlLFxuICAgICAgJ2ZpbGU6JzogdHJ1ZVxuICAgIH0sXG4gICAgcXVlcnlzdHJpbmcgPSByZXF1aXJlKCdxdWVyeXN0cmluZycpO1xuXG5mdW5jdGlvbiB1cmxQYXJzZSh1cmwsIHBhcnNlUXVlcnlTdHJpbmcsIHNsYXNoZXNEZW5vdGVIb3N0KSB7XG4gIGlmICh1cmwgJiYgaXNPYmplY3QodXJsKSAmJiB1cmwgaW5zdGFuY2VvZiBVcmwpIHJldHVybiB1cmw7XG5cbiAgdmFyIHUgPSBuZXcgVXJsO1xuICB1LnBhcnNlKHVybCwgcGFyc2VRdWVyeVN0cmluZywgc2xhc2hlc0Rlbm90ZUhvc3QpO1xuICByZXR1cm4gdTtcbn1cblxuVXJsLnByb3RvdHlwZS5wYXJzZSA9IGZ1bmN0aW9uKHVybCwgcGFyc2VRdWVyeVN0cmluZywgc2xhc2hlc0Rlbm90ZUhvc3QpIHtcbiAgaWYgKCFpc1N0cmluZyh1cmwpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlBhcmFtZXRlciAndXJsJyBtdXN0IGJlIGEgc3RyaW5nLCBub3QgXCIgKyB0eXBlb2YgdXJsKTtcbiAgfVxuXG4gIHZhciByZXN0ID0gdXJsO1xuXG4gIC8vIHRyaW0gYmVmb3JlIHByb2NlZWRpbmcuXG4gIC8vIFRoaXMgaXMgdG8gc3VwcG9ydCBwYXJzZSBzdHVmZiBsaWtlIFwiICBodHRwOi8vZm9vLmNvbSAgXFxuXCJcbiAgcmVzdCA9IHJlc3QudHJpbSgpO1xuXG4gIHZhciBwcm90byA9IHByb3RvY29sUGF0dGVybi5leGVjKHJlc3QpO1xuICBpZiAocHJvdG8pIHtcbiAgICBwcm90byA9IHByb3RvWzBdO1xuICAgIHZhciBsb3dlclByb3RvID0gcHJvdG8udG9Mb3dlckNhc2UoKTtcbiAgICB0aGlzLnByb3RvY29sID0gbG93ZXJQcm90bztcbiAgICByZXN0ID0gcmVzdC5zdWJzdHIocHJvdG8ubGVuZ3RoKTtcbiAgfVxuXG4gIC8vIGZpZ3VyZSBvdXQgaWYgaXQncyBnb3QgYSBob3N0XG4gIC8vIHVzZXJAc2VydmVyIGlzICphbHdheXMqIGludGVycHJldGVkIGFzIGEgaG9zdG5hbWUsIGFuZCB1cmxcbiAgLy8gcmVzb2x1dGlvbiB3aWxsIHRyZWF0IC8vZm9vL2JhciBhcyBob3N0PWZvbyxwYXRoPWJhciBiZWNhdXNlIHRoYXQnc1xuICAvLyBob3cgdGhlIGJyb3dzZXIgcmVzb2x2ZXMgcmVsYXRpdmUgVVJMcy5cbiAgaWYgKHNsYXNoZXNEZW5vdGVIb3N0IHx8IHByb3RvIHx8IHJlc3QubWF0Y2goL15cXC9cXC9bXkBcXC9dK0BbXkBcXC9dKy8pKSB7XG4gICAgdmFyIHNsYXNoZXMgPSByZXN0LnN1YnN0cigwLCAyKSA9PT0gJy8vJztcbiAgICBpZiAoc2xhc2hlcyAmJiAhKHByb3RvICYmIGhvc3RsZXNzUHJvdG9jb2xbcHJvdG9dKSkge1xuICAgICAgcmVzdCA9IHJlc3Quc3Vic3RyKDIpO1xuICAgICAgdGhpcy5zbGFzaGVzID0gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICBpZiAoIWhvc3RsZXNzUHJvdG9jb2xbcHJvdG9dICYmXG4gICAgICAoc2xhc2hlcyB8fCAocHJvdG8gJiYgIXNsYXNoZWRQcm90b2NvbFtwcm90b10pKSkge1xuXG4gICAgLy8gdGhlcmUncyBhIGhvc3RuYW1lLlxuICAgIC8vIHRoZSBmaXJzdCBpbnN0YW5jZSBvZiAvLCA/LCA7LCBvciAjIGVuZHMgdGhlIGhvc3QuXG4gICAgLy9cbiAgICAvLyBJZiB0aGVyZSBpcyBhbiBAIGluIHRoZSBob3N0bmFtZSwgdGhlbiBub24taG9zdCBjaGFycyAqYXJlKiBhbGxvd2VkXG4gICAgLy8gdG8gdGhlIGxlZnQgb2YgdGhlIGxhc3QgQCBzaWduLCB1bmxlc3Mgc29tZSBob3N0LWVuZGluZyBjaGFyYWN0ZXJcbiAgICAvLyBjb21lcyAqYmVmb3JlKiB0aGUgQC1zaWduLlxuICAgIC8vIFVSTHMgYXJlIG9ibm94aW91cy5cbiAgICAvL1xuICAgIC8vIGV4OlxuICAgIC8vIGh0dHA6Ly9hQGJAYy8gPT4gdXNlcjphQGIgaG9zdDpjXG4gICAgLy8gaHR0cDovL2FAYj9AYyA9PiB1c2VyOmEgaG9zdDpjIHBhdGg6Lz9AY1xuXG4gICAgLy8gdjAuMTIgVE9ETyhpc2FhY3MpOiBUaGlzIGlzIG5vdCBxdWl0ZSBob3cgQ2hyb21lIGRvZXMgdGhpbmdzLlxuICAgIC8vIFJldmlldyBvdXIgdGVzdCBjYXNlIGFnYWluc3QgYnJvd3NlcnMgbW9yZSBjb21wcmVoZW5zaXZlbHkuXG5cbiAgICAvLyBmaW5kIHRoZSBmaXJzdCBpbnN0YW5jZSBvZiBhbnkgaG9zdEVuZGluZ0NoYXJzXG4gICAgdmFyIGhvc3RFbmQgPSAtMTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGhvc3RFbmRpbmdDaGFycy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGhlYyA9IHJlc3QuaW5kZXhPZihob3N0RW5kaW5nQ2hhcnNbaV0pO1xuICAgICAgaWYgKGhlYyAhPT0gLTEgJiYgKGhvc3RFbmQgPT09IC0xIHx8IGhlYyA8IGhvc3RFbmQpKVxuICAgICAgICBob3N0RW5kID0gaGVjO1xuICAgIH1cblxuICAgIC8vIGF0IHRoaXMgcG9pbnQsIGVpdGhlciB3ZSBoYXZlIGFuIGV4cGxpY2l0IHBvaW50IHdoZXJlIHRoZVxuICAgIC8vIGF1dGggcG9ydGlvbiBjYW5ub3QgZ28gcGFzdCwgb3IgdGhlIGxhc3QgQCBjaGFyIGlzIHRoZSBkZWNpZGVyLlxuICAgIHZhciBhdXRoLCBhdFNpZ247XG4gICAgaWYgKGhvc3RFbmQgPT09IC0xKSB7XG4gICAgICAvLyBhdFNpZ24gY2FuIGJlIGFueXdoZXJlLlxuICAgICAgYXRTaWduID0gcmVzdC5sYXN0SW5kZXhPZignQCcpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBhdFNpZ24gbXVzdCBiZSBpbiBhdXRoIHBvcnRpb24uXG4gICAgICAvLyBodHRwOi8vYUBiL2NAZCA9PiBob3N0OmIgYXV0aDphIHBhdGg6L2NAZFxuICAgICAgYXRTaWduID0gcmVzdC5sYXN0SW5kZXhPZignQCcsIGhvc3RFbmQpO1xuICAgIH1cblxuICAgIC8vIE5vdyB3ZSBoYXZlIGEgcG9ydGlvbiB3aGljaCBpcyBkZWZpbml0ZWx5IHRoZSBhdXRoLlxuICAgIC8vIFB1bGwgdGhhdCBvZmYuXG4gICAgaWYgKGF0U2lnbiAhPT0gLTEpIHtcbiAgICAgIGF1dGggPSByZXN0LnNsaWNlKDAsIGF0U2lnbik7XG4gICAgICByZXN0ID0gcmVzdC5zbGljZShhdFNpZ24gKyAxKTtcbiAgICAgIHRoaXMuYXV0aCA9IGRlY29kZVVSSUNvbXBvbmVudChhdXRoKTtcbiAgICB9XG5cbiAgICAvLyB0aGUgaG9zdCBpcyB0aGUgcmVtYWluaW5nIHRvIHRoZSBsZWZ0IG9mIHRoZSBmaXJzdCBub24taG9zdCBjaGFyXG4gICAgaG9zdEVuZCA9IC0xO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbm9uSG9zdENoYXJzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgaGVjID0gcmVzdC5pbmRleE9mKG5vbkhvc3RDaGFyc1tpXSk7XG4gICAgICBpZiAoaGVjICE9PSAtMSAmJiAoaG9zdEVuZCA9PT0gLTEgfHwgaGVjIDwgaG9zdEVuZCkpXG4gICAgICAgIGhvc3RFbmQgPSBoZWM7XG4gICAgfVxuICAgIC8vIGlmIHdlIHN0aWxsIGhhdmUgbm90IGhpdCBpdCwgdGhlbiB0aGUgZW50aXJlIHRoaW5nIGlzIGEgaG9zdC5cbiAgICBpZiAoaG9zdEVuZCA9PT0gLTEpXG4gICAgICBob3N0RW5kID0gcmVzdC5sZW5ndGg7XG5cbiAgICB0aGlzLmhvc3QgPSByZXN0LnNsaWNlKDAsIGhvc3RFbmQpO1xuICAgIHJlc3QgPSByZXN0LnNsaWNlKGhvc3RFbmQpO1xuXG4gICAgLy8gcHVsbCBvdXQgcG9ydC5cbiAgICB0aGlzLnBhcnNlSG9zdCgpO1xuXG4gICAgLy8gd2UndmUgaW5kaWNhdGVkIHRoYXQgdGhlcmUgaXMgYSBob3N0bmFtZSxcbiAgICAvLyBzbyBldmVuIGlmIGl0J3MgZW1wdHksIGl0IGhhcyB0byBiZSBwcmVzZW50LlxuICAgIHRoaXMuaG9zdG5hbWUgPSB0aGlzLmhvc3RuYW1lIHx8ICcnO1xuXG4gICAgLy8gaWYgaG9zdG5hbWUgYmVnaW5zIHdpdGggWyBhbmQgZW5kcyB3aXRoIF1cbiAgICAvLyBhc3N1bWUgdGhhdCBpdCdzIGFuIElQdjYgYWRkcmVzcy5cbiAgICB2YXIgaXB2Nkhvc3RuYW1lID0gdGhpcy5ob3N0bmFtZVswXSA9PT0gJ1snICYmXG4gICAgICAgIHRoaXMuaG9zdG5hbWVbdGhpcy5ob3N0bmFtZS5sZW5ndGggLSAxXSA9PT0gJ10nO1xuXG4gICAgLy8gdmFsaWRhdGUgYSBsaXR0bGUuXG4gICAgaWYgKCFpcHY2SG9zdG5hbWUpIHtcbiAgICAgIHZhciBob3N0cGFydHMgPSB0aGlzLmhvc3RuYW1lLnNwbGl0KC9cXC4vKTtcbiAgICAgIGZvciAodmFyIGkgPSAwLCBsID0gaG9zdHBhcnRzLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgICAgICB2YXIgcGFydCA9IGhvc3RwYXJ0c1tpXTtcbiAgICAgICAgaWYgKCFwYXJ0KSBjb250aW51ZTtcbiAgICAgICAgaWYgKCFwYXJ0Lm1hdGNoKGhvc3RuYW1lUGFydFBhdHRlcm4pKSB7XG4gICAgICAgICAgdmFyIG5ld3BhcnQgPSAnJztcbiAgICAgICAgICBmb3IgKHZhciBqID0gMCwgayA9IHBhcnQubGVuZ3RoOyBqIDwgazsgaisrKSB7XG4gICAgICAgICAgICBpZiAocGFydC5jaGFyQ29kZUF0KGopID4gMTI3KSB7XG4gICAgICAgICAgICAgIC8vIHdlIHJlcGxhY2Ugbm9uLUFTQ0lJIGNoYXIgd2l0aCBhIHRlbXBvcmFyeSBwbGFjZWhvbGRlclxuICAgICAgICAgICAgICAvLyB3ZSBuZWVkIHRoaXMgdG8gbWFrZSBzdXJlIHNpemUgb2YgaG9zdG5hbWUgaXMgbm90XG4gICAgICAgICAgICAgIC8vIGJyb2tlbiBieSByZXBsYWNpbmcgbm9uLUFTQ0lJIGJ5IG5vdGhpbmdcbiAgICAgICAgICAgICAgbmV3cGFydCArPSAneCc7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBuZXdwYXJ0ICs9IHBhcnRbal07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIC8vIHdlIHRlc3QgYWdhaW4gd2l0aCBBU0NJSSBjaGFyIG9ubHlcbiAgICAgICAgICBpZiAoIW5ld3BhcnQubWF0Y2goaG9zdG5hbWVQYXJ0UGF0dGVybikpIHtcbiAgICAgICAgICAgIHZhciB2YWxpZFBhcnRzID0gaG9zdHBhcnRzLnNsaWNlKDAsIGkpO1xuICAgICAgICAgICAgdmFyIG5vdEhvc3QgPSBob3N0cGFydHMuc2xpY2UoaSArIDEpO1xuICAgICAgICAgICAgdmFyIGJpdCA9IHBhcnQubWF0Y2goaG9zdG5hbWVQYXJ0U3RhcnQpO1xuICAgICAgICAgICAgaWYgKGJpdCkge1xuICAgICAgICAgICAgICB2YWxpZFBhcnRzLnB1c2goYml0WzFdKTtcbiAgICAgICAgICAgICAgbm90SG9zdC51bnNoaWZ0KGJpdFsyXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAobm90SG9zdC5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgcmVzdCA9ICcvJyArIG5vdEhvc3Quam9pbignLicpICsgcmVzdDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuaG9zdG5hbWUgPSB2YWxpZFBhcnRzLmpvaW4oJy4nKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0aGlzLmhvc3RuYW1lLmxlbmd0aCA+IGhvc3RuYW1lTWF4TGVuKSB7XG4gICAgICB0aGlzLmhvc3RuYW1lID0gJyc7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIGhvc3RuYW1lcyBhcmUgYWx3YXlzIGxvd2VyIGNhc2UuXG4gICAgICB0aGlzLmhvc3RuYW1lID0gdGhpcy5ob3N0bmFtZS50b0xvd2VyQ2FzZSgpO1xuICAgIH1cblxuICAgIGlmICghaXB2Nkhvc3RuYW1lKSB7XG4gICAgICAvLyBJRE5BIFN1cHBvcnQ6IFJldHVybnMgYSBwdW55IGNvZGVkIHJlcHJlc2VudGF0aW9uIG9mIFwiZG9tYWluXCIuXG4gICAgICAvLyBJdCBvbmx5IGNvbnZlcnRzIHRoZSBwYXJ0IG9mIHRoZSBkb21haW4gbmFtZSB0aGF0XG4gICAgICAvLyBoYXMgbm9uIEFTQ0lJIGNoYXJhY3RlcnMuIEkuZS4gaXQgZG9zZW50IG1hdHRlciBpZlxuICAgICAgLy8geW91IGNhbGwgaXQgd2l0aCBhIGRvbWFpbiB0aGF0IGFscmVhZHkgaXMgaW4gQVNDSUkuXG4gICAgICB2YXIgZG9tYWluQXJyYXkgPSB0aGlzLmhvc3RuYW1lLnNwbGl0KCcuJyk7XG4gICAgICB2YXIgbmV3T3V0ID0gW107XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGRvbWFpbkFycmF5Lmxlbmd0aDsgKytpKSB7XG4gICAgICAgIHZhciBzID0gZG9tYWluQXJyYXlbaV07XG4gICAgICAgIG5ld091dC5wdXNoKHMubWF0Y2goL1teQS1aYS16MC05Xy1dLykgP1xuICAgICAgICAgICAgJ3huLS0nICsgcHVueWNvZGUuZW5jb2RlKHMpIDogcyk7XG4gICAgICB9XG4gICAgICB0aGlzLmhvc3RuYW1lID0gbmV3T3V0LmpvaW4oJy4nKTtcbiAgICB9XG5cbiAgICB2YXIgcCA9IHRoaXMucG9ydCA/ICc6JyArIHRoaXMucG9ydCA6ICcnO1xuICAgIHZhciBoID0gdGhpcy5ob3N0bmFtZSB8fCAnJztcbiAgICB0aGlzLmhvc3QgPSBoICsgcDtcbiAgICB0aGlzLmhyZWYgKz0gdGhpcy5ob3N0O1xuXG4gICAgLy8gc3RyaXAgWyBhbmQgXSBmcm9tIHRoZSBob3N0bmFtZVxuICAgIC8vIHRoZSBob3N0IGZpZWxkIHN0aWxsIHJldGFpbnMgdGhlbSwgdGhvdWdoXG4gICAgaWYgKGlwdjZIb3N0bmFtZSkge1xuICAgICAgdGhpcy5ob3N0bmFtZSA9IHRoaXMuaG9zdG5hbWUuc3Vic3RyKDEsIHRoaXMuaG9zdG5hbWUubGVuZ3RoIC0gMik7XG4gICAgICBpZiAocmVzdFswXSAhPT0gJy8nKSB7XG4gICAgICAgIHJlc3QgPSAnLycgKyByZXN0O1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIG5vdyByZXN0IGlzIHNldCB0byB0aGUgcG9zdC1ob3N0IHN0dWZmLlxuICAvLyBjaG9wIG9mZiBhbnkgZGVsaW0gY2hhcnMuXG4gIGlmICghdW5zYWZlUHJvdG9jb2xbbG93ZXJQcm90b10pIHtcblxuICAgIC8vIEZpcnN0LCBtYWtlIDEwMCUgc3VyZSB0aGF0IGFueSBcImF1dG9Fc2NhcGVcIiBjaGFycyBnZXRcbiAgICAvLyBlc2NhcGVkLCBldmVuIGlmIGVuY29kZVVSSUNvbXBvbmVudCBkb2Vzbid0IHRoaW5rIHRoZXlcbiAgICAvLyBuZWVkIHRvIGJlLlxuICAgIGZvciAodmFyIGkgPSAwLCBsID0gYXV0b0VzY2FwZS5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICAgIHZhciBhZSA9IGF1dG9Fc2NhcGVbaV07XG4gICAgICB2YXIgZXNjID0gZW5jb2RlVVJJQ29tcG9uZW50KGFlKTtcbiAgICAgIGlmIChlc2MgPT09IGFlKSB7XG4gICAgICAgIGVzYyA9IGVzY2FwZShhZSk7XG4gICAgICB9XG4gICAgICByZXN0ID0gcmVzdC5zcGxpdChhZSkuam9pbihlc2MpO1xuICAgIH1cbiAgfVxuXG5cbiAgLy8gY2hvcCBvZmYgZnJvbSB0aGUgdGFpbCBmaXJzdC5cbiAgdmFyIGhhc2ggPSByZXN0LmluZGV4T2YoJyMnKTtcbiAgaWYgKGhhc2ggIT09IC0xKSB7XG4gICAgLy8gZ290IGEgZnJhZ21lbnQgc3RyaW5nLlxuICAgIHRoaXMuaGFzaCA9IHJlc3Quc3Vic3RyKGhhc2gpO1xuICAgIHJlc3QgPSByZXN0LnNsaWNlKDAsIGhhc2gpO1xuICB9XG4gIHZhciBxbSA9IHJlc3QuaW5kZXhPZignPycpO1xuICBpZiAocW0gIT09IC0xKSB7XG4gICAgdGhpcy5zZWFyY2ggPSByZXN0LnN1YnN0cihxbSk7XG4gICAgdGhpcy5xdWVyeSA9IHJlc3Quc3Vic3RyKHFtICsgMSk7XG4gICAgaWYgKHBhcnNlUXVlcnlTdHJpbmcpIHtcbiAgICAgIHRoaXMucXVlcnkgPSBxdWVyeXN0cmluZy5wYXJzZSh0aGlzLnF1ZXJ5KTtcbiAgICB9XG4gICAgcmVzdCA9IHJlc3Quc2xpY2UoMCwgcW0pO1xuICB9IGVsc2UgaWYgKHBhcnNlUXVlcnlTdHJpbmcpIHtcbiAgICAvLyBubyBxdWVyeSBzdHJpbmcsIGJ1dCBwYXJzZVF1ZXJ5U3RyaW5nIHN0aWxsIHJlcXVlc3RlZFxuICAgIHRoaXMuc2VhcmNoID0gJyc7XG4gICAgdGhpcy5xdWVyeSA9IHt9O1xuICB9XG4gIGlmIChyZXN0KSB0aGlzLnBhdGhuYW1lID0gcmVzdDtcbiAgaWYgKHNsYXNoZWRQcm90b2NvbFtsb3dlclByb3RvXSAmJlxuICAgICAgdGhpcy5ob3N0bmFtZSAmJiAhdGhpcy5wYXRobmFtZSkge1xuICAgIHRoaXMucGF0aG5hbWUgPSAnLyc7XG4gIH1cblxuICAvL3RvIHN1cHBvcnQgaHR0cC5yZXF1ZXN0XG4gIGlmICh0aGlzLnBhdGhuYW1lIHx8IHRoaXMuc2VhcmNoKSB7XG4gICAgdmFyIHAgPSB0aGlzLnBhdGhuYW1lIHx8ICcnO1xuICAgIHZhciBzID0gdGhpcy5zZWFyY2ggfHwgJyc7XG4gICAgdGhpcy5wYXRoID0gcCArIHM7XG4gIH1cblxuICAvLyBmaW5hbGx5LCByZWNvbnN0cnVjdCB0aGUgaHJlZiBiYXNlZCBvbiB3aGF0IGhhcyBiZWVuIHZhbGlkYXRlZC5cbiAgdGhpcy5ocmVmID0gdGhpcy5mb3JtYXQoKTtcbiAgcmV0dXJuIHRoaXM7XG59O1xuXG4vLyBmb3JtYXQgYSBwYXJzZWQgb2JqZWN0IGludG8gYSB1cmwgc3RyaW5nXG5mdW5jdGlvbiB1cmxGb3JtYXQob2JqKSB7XG4gIC8vIGVuc3VyZSBpdCdzIGFuIG9iamVjdCwgYW5kIG5vdCBhIHN0cmluZyB1cmwuXG4gIC8vIElmIGl0J3MgYW4gb2JqLCB0aGlzIGlzIGEgbm8tb3AuXG4gIC8vIHRoaXMgd2F5LCB5b3UgY2FuIGNhbGwgdXJsX2Zvcm1hdCgpIG9uIHN0cmluZ3NcbiAgLy8gdG8gY2xlYW4gdXAgcG90ZW50aWFsbHkgd29ua3kgdXJscy5cbiAgaWYgKGlzU3RyaW5nKG9iaikpIG9iaiA9IHVybFBhcnNlKG9iaik7XG4gIGlmICghKG9iaiBpbnN0YW5jZW9mIFVybCkpIHJldHVybiBVcmwucHJvdG90eXBlLmZvcm1hdC5jYWxsKG9iaik7XG4gIHJldHVybiBvYmouZm9ybWF0KCk7XG59XG5cblVybC5wcm90b3R5cGUuZm9ybWF0ID0gZnVuY3Rpb24oKSB7XG4gIHZhciBhdXRoID0gdGhpcy5hdXRoIHx8ICcnO1xuICBpZiAoYXV0aCkge1xuICAgIGF1dGggPSBlbmNvZGVVUklDb21wb25lbnQoYXV0aCk7XG4gICAgYXV0aCA9IGF1dGgucmVwbGFjZSgvJTNBL2ksICc6Jyk7XG4gICAgYXV0aCArPSAnQCc7XG4gIH1cblxuICB2YXIgcHJvdG9jb2wgPSB0aGlzLnByb3RvY29sIHx8ICcnLFxuICAgICAgcGF0aG5hbWUgPSB0aGlzLnBhdGhuYW1lIHx8ICcnLFxuICAgICAgaGFzaCA9IHRoaXMuaGFzaCB8fCAnJyxcbiAgICAgIGhvc3QgPSBmYWxzZSxcbiAgICAgIHF1ZXJ5ID0gJyc7XG5cbiAgaWYgKHRoaXMuaG9zdCkge1xuICAgIGhvc3QgPSBhdXRoICsgdGhpcy5ob3N0O1xuICB9IGVsc2UgaWYgKHRoaXMuaG9zdG5hbWUpIHtcbiAgICBob3N0ID0gYXV0aCArICh0aGlzLmhvc3RuYW1lLmluZGV4T2YoJzonKSA9PT0gLTEgP1xuICAgICAgICB0aGlzLmhvc3RuYW1lIDpcbiAgICAgICAgJ1snICsgdGhpcy5ob3N0bmFtZSArICddJyk7XG4gICAgaWYgKHRoaXMucG9ydCkge1xuICAgICAgaG9zdCArPSAnOicgKyB0aGlzLnBvcnQ7XG4gICAgfVxuICB9XG5cbiAgaWYgKHRoaXMucXVlcnkgJiZcbiAgICAgIGlzT2JqZWN0KHRoaXMucXVlcnkpICYmXG4gICAgICBPYmplY3Qua2V5cyh0aGlzLnF1ZXJ5KS5sZW5ndGgpIHtcbiAgICBxdWVyeSA9IHF1ZXJ5c3RyaW5nLnN0cmluZ2lmeSh0aGlzLnF1ZXJ5KTtcbiAgfVxuXG4gIHZhciBzZWFyY2ggPSB0aGlzLnNlYXJjaCB8fCAocXVlcnkgJiYgKCc/JyArIHF1ZXJ5KSkgfHwgJyc7XG5cbiAgaWYgKHByb3RvY29sICYmIHByb3RvY29sLnN1YnN0cigtMSkgIT09ICc6JykgcHJvdG9jb2wgKz0gJzonO1xuXG4gIC8vIG9ubHkgdGhlIHNsYXNoZWRQcm90b2NvbHMgZ2V0IHRoZSAvLy4gIE5vdCBtYWlsdG86LCB4bXBwOiwgZXRjLlxuICAvLyB1bmxlc3MgdGhleSBoYWQgdGhlbSB0byBiZWdpbiB3aXRoLlxuICBpZiAodGhpcy5zbGFzaGVzIHx8XG4gICAgICAoIXByb3RvY29sIHx8IHNsYXNoZWRQcm90b2NvbFtwcm90b2NvbF0pICYmIGhvc3QgIT09IGZhbHNlKSB7XG4gICAgaG9zdCA9ICcvLycgKyAoaG9zdCB8fCAnJyk7XG4gICAgaWYgKHBhdGhuYW1lICYmIHBhdGhuYW1lLmNoYXJBdCgwKSAhPT0gJy8nKSBwYXRobmFtZSA9ICcvJyArIHBhdGhuYW1lO1xuICB9IGVsc2UgaWYgKCFob3N0KSB7XG4gICAgaG9zdCA9ICcnO1xuICB9XG5cbiAgaWYgKGhhc2ggJiYgaGFzaC5jaGFyQXQoMCkgIT09ICcjJykgaGFzaCA9ICcjJyArIGhhc2g7XG4gIGlmIChzZWFyY2ggJiYgc2VhcmNoLmNoYXJBdCgwKSAhPT0gJz8nKSBzZWFyY2ggPSAnPycgKyBzZWFyY2g7XG5cbiAgcGF0aG5hbWUgPSBwYXRobmFtZS5yZXBsYWNlKC9bPyNdL2csIGZ1bmN0aW9uKG1hdGNoKSB7XG4gICAgcmV0dXJuIGVuY29kZVVSSUNvbXBvbmVudChtYXRjaCk7XG4gIH0pO1xuICBzZWFyY2ggPSBzZWFyY2gucmVwbGFjZSgnIycsICclMjMnKTtcblxuICByZXR1cm4gcHJvdG9jb2wgKyBob3N0ICsgcGF0aG5hbWUgKyBzZWFyY2ggKyBoYXNoO1xufTtcblxuZnVuY3Rpb24gdXJsUmVzb2x2ZShzb3VyY2UsIHJlbGF0aXZlKSB7XG4gIHJldHVybiB1cmxQYXJzZShzb3VyY2UsIGZhbHNlLCB0cnVlKS5yZXNvbHZlKHJlbGF0aXZlKTtcbn1cblxuVXJsLnByb3RvdHlwZS5yZXNvbHZlID0gZnVuY3Rpb24ocmVsYXRpdmUpIHtcbiAgcmV0dXJuIHRoaXMucmVzb2x2ZU9iamVjdCh1cmxQYXJzZShyZWxhdGl2ZSwgZmFsc2UsIHRydWUpKS5mb3JtYXQoKTtcbn07XG5cbmZ1bmN0aW9uIHVybFJlc29sdmVPYmplY3Qoc291cmNlLCByZWxhdGl2ZSkge1xuICBpZiAoIXNvdXJjZSkgcmV0dXJuIHJlbGF0aXZlO1xuICByZXR1cm4gdXJsUGFyc2Uoc291cmNlLCBmYWxzZSwgdHJ1ZSkucmVzb2x2ZU9iamVjdChyZWxhdGl2ZSk7XG59XG5cblVybC5wcm90b3R5cGUucmVzb2x2ZU9iamVjdCA9IGZ1bmN0aW9uKHJlbGF0aXZlKSB7XG4gIGlmIChpc1N0cmluZyhyZWxhdGl2ZSkpIHtcbiAgICB2YXIgcmVsID0gbmV3IFVybCgpO1xuICAgIHJlbC5wYXJzZShyZWxhdGl2ZSwgZmFsc2UsIHRydWUpO1xuICAgIHJlbGF0aXZlID0gcmVsO1xuICB9XG5cbiAgdmFyIHJlc3VsdCA9IG5ldyBVcmwoKTtcbiAgT2JqZWN0LmtleXModGhpcykuZm9yRWFjaChmdW5jdGlvbihrKSB7XG4gICAgcmVzdWx0W2tdID0gdGhpc1trXTtcbiAgfSwgdGhpcyk7XG5cbiAgLy8gaGFzaCBpcyBhbHdheXMgb3ZlcnJpZGRlbiwgbm8gbWF0dGVyIHdoYXQuXG4gIC8vIGV2ZW4gaHJlZj1cIlwiIHdpbGwgcmVtb3ZlIGl0LlxuICByZXN1bHQuaGFzaCA9IHJlbGF0aXZlLmhhc2g7XG5cbiAgLy8gaWYgdGhlIHJlbGF0aXZlIHVybCBpcyBlbXB0eSwgdGhlbiB0aGVyZSdzIG5vdGhpbmcgbGVmdCB0byBkbyBoZXJlLlxuICBpZiAocmVsYXRpdmUuaHJlZiA9PT0gJycpIHtcbiAgICByZXN1bHQuaHJlZiA9IHJlc3VsdC5mb3JtYXQoKTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgLy8gaHJlZnMgbGlrZSAvL2Zvby9iYXIgYWx3YXlzIGN1dCB0byB0aGUgcHJvdG9jb2wuXG4gIGlmIChyZWxhdGl2ZS5zbGFzaGVzICYmICFyZWxhdGl2ZS5wcm90b2NvbCkge1xuICAgIC8vIHRha2UgZXZlcnl0aGluZyBleGNlcHQgdGhlIHByb3RvY29sIGZyb20gcmVsYXRpdmVcbiAgICBPYmplY3Qua2V5cyhyZWxhdGl2ZSkuZm9yRWFjaChmdW5jdGlvbihrKSB7XG4gICAgICBpZiAoayAhPT0gJ3Byb3RvY29sJylcbiAgICAgICAgcmVzdWx0W2tdID0gcmVsYXRpdmVba107XG4gICAgfSk7XG5cbiAgICAvL3VybFBhcnNlIGFwcGVuZHMgdHJhaWxpbmcgLyB0byB1cmxzIGxpa2UgaHR0cDovL3d3dy5leGFtcGxlLmNvbVxuICAgIGlmIChzbGFzaGVkUHJvdG9jb2xbcmVzdWx0LnByb3RvY29sXSAmJlxuICAgICAgICByZXN1bHQuaG9zdG5hbWUgJiYgIXJlc3VsdC5wYXRobmFtZSkge1xuICAgICAgcmVzdWx0LnBhdGggPSByZXN1bHQucGF0aG5hbWUgPSAnLyc7XG4gICAgfVxuXG4gICAgcmVzdWx0LmhyZWYgPSByZXN1bHQuZm9ybWF0KCk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIGlmIChyZWxhdGl2ZS5wcm90b2NvbCAmJiByZWxhdGl2ZS5wcm90b2NvbCAhPT0gcmVzdWx0LnByb3RvY29sKSB7XG4gICAgLy8gaWYgaXQncyBhIGtub3duIHVybCBwcm90b2NvbCwgdGhlbiBjaGFuZ2luZ1xuICAgIC8vIHRoZSBwcm90b2NvbCBkb2VzIHdlaXJkIHRoaW5nc1xuICAgIC8vIGZpcnN0LCBpZiBpdCdzIG5vdCBmaWxlOiwgdGhlbiB3ZSBNVVNUIGhhdmUgYSBob3N0LFxuICAgIC8vIGFuZCBpZiB0aGVyZSB3YXMgYSBwYXRoXG4gICAgLy8gdG8gYmVnaW4gd2l0aCwgdGhlbiB3ZSBNVVNUIGhhdmUgYSBwYXRoLlxuICAgIC8vIGlmIGl0IGlzIGZpbGU6LCB0aGVuIHRoZSBob3N0IGlzIGRyb3BwZWQsXG4gICAgLy8gYmVjYXVzZSB0aGF0J3Mga25vd24gdG8gYmUgaG9zdGxlc3MuXG4gICAgLy8gYW55dGhpbmcgZWxzZSBpcyBhc3N1bWVkIHRvIGJlIGFic29sdXRlLlxuICAgIGlmICghc2xhc2hlZFByb3RvY29sW3JlbGF0aXZlLnByb3RvY29sXSkge1xuICAgICAgT2JqZWN0LmtleXMocmVsYXRpdmUpLmZvckVhY2goZnVuY3Rpb24oaykge1xuICAgICAgICByZXN1bHRba10gPSByZWxhdGl2ZVtrXTtcbiAgICAgIH0pO1xuICAgICAgcmVzdWx0LmhyZWYgPSByZXN1bHQuZm9ybWF0KCk7XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIHJlc3VsdC5wcm90b2NvbCA9IHJlbGF0aXZlLnByb3RvY29sO1xuICAgIGlmICghcmVsYXRpdmUuaG9zdCAmJiAhaG9zdGxlc3NQcm90b2NvbFtyZWxhdGl2ZS5wcm90b2NvbF0pIHtcbiAgICAgIHZhciByZWxQYXRoID0gKHJlbGF0aXZlLnBhdGhuYW1lIHx8ICcnKS5zcGxpdCgnLycpO1xuICAgICAgd2hpbGUgKHJlbFBhdGgubGVuZ3RoICYmICEocmVsYXRpdmUuaG9zdCA9IHJlbFBhdGguc2hpZnQoKSkpO1xuICAgICAgaWYgKCFyZWxhdGl2ZS5ob3N0KSByZWxhdGl2ZS5ob3N0ID0gJyc7XG4gICAgICBpZiAoIXJlbGF0aXZlLmhvc3RuYW1lKSByZWxhdGl2ZS5ob3N0bmFtZSA9ICcnO1xuICAgICAgaWYgKHJlbFBhdGhbMF0gIT09ICcnKSByZWxQYXRoLnVuc2hpZnQoJycpO1xuICAgICAgaWYgKHJlbFBhdGgubGVuZ3RoIDwgMikgcmVsUGF0aC51bnNoaWZ0KCcnKTtcbiAgICAgIHJlc3VsdC5wYXRobmFtZSA9IHJlbFBhdGguam9pbignLycpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXN1bHQucGF0aG5hbWUgPSByZWxhdGl2ZS5wYXRobmFtZTtcbiAgICB9XG4gICAgcmVzdWx0LnNlYXJjaCA9IHJlbGF0aXZlLnNlYXJjaDtcbiAgICByZXN1bHQucXVlcnkgPSByZWxhdGl2ZS5xdWVyeTtcbiAgICByZXN1bHQuaG9zdCA9IHJlbGF0aXZlLmhvc3QgfHwgJyc7XG4gICAgcmVzdWx0LmF1dGggPSByZWxhdGl2ZS5hdXRoO1xuICAgIHJlc3VsdC5ob3N0bmFtZSA9IHJlbGF0aXZlLmhvc3RuYW1lIHx8IHJlbGF0aXZlLmhvc3Q7XG4gICAgcmVzdWx0LnBvcnQgPSByZWxhdGl2ZS5wb3J0O1xuICAgIC8vIHRvIHN1cHBvcnQgaHR0cC5yZXF1ZXN0XG4gICAgaWYgKHJlc3VsdC5wYXRobmFtZSB8fCByZXN1bHQuc2VhcmNoKSB7XG4gICAgICB2YXIgcCA9IHJlc3VsdC5wYXRobmFtZSB8fCAnJztcbiAgICAgIHZhciBzID0gcmVzdWx0LnNlYXJjaCB8fCAnJztcbiAgICAgIHJlc3VsdC5wYXRoID0gcCArIHM7XG4gICAgfVxuICAgIHJlc3VsdC5zbGFzaGVzID0gcmVzdWx0LnNsYXNoZXMgfHwgcmVsYXRpdmUuc2xhc2hlcztcbiAgICByZXN1bHQuaHJlZiA9IHJlc3VsdC5mb3JtYXQoKTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgdmFyIGlzU291cmNlQWJzID0gKHJlc3VsdC5wYXRobmFtZSAmJiByZXN1bHQucGF0aG5hbWUuY2hhckF0KDApID09PSAnLycpLFxuICAgICAgaXNSZWxBYnMgPSAoXG4gICAgICAgICAgcmVsYXRpdmUuaG9zdCB8fFxuICAgICAgICAgIHJlbGF0aXZlLnBhdGhuYW1lICYmIHJlbGF0aXZlLnBhdGhuYW1lLmNoYXJBdCgwKSA9PT0gJy8nXG4gICAgICApLFxuICAgICAgbXVzdEVuZEFicyA9IChpc1JlbEFicyB8fCBpc1NvdXJjZUFicyB8fFxuICAgICAgICAgICAgICAgICAgICAocmVzdWx0Lmhvc3QgJiYgcmVsYXRpdmUucGF0aG5hbWUpKSxcbiAgICAgIHJlbW92ZUFsbERvdHMgPSBtdXN0RW5kQWJzLFxuICAgICAgc3JjUGF0aCA9IHJlc3VsdC5wYXRobmFtZSAmJiByZXN1bHQucGF0aG5hbWUuc3BsaXQoJy8nKSB8fCBbXSxcbiAgICAgIHJlbFBhdGggPSByZWxhdGl2ZS5wYXRobmFtZSAmJiByZWxhdGl2ZS5wYXRobmFtZS5zcGxpdCgnLycpIHx8IFtdLFxuICAgICAgcHN5Y2hvdGljID0gcmVzdWx0LnByb3RvY29sICYmICFzbGFzaGVkUHJvdG9jb2xbcmVzdWx0LnByb3RvY29sXTtcblxuICAvLyBpZiB0aGUgdXJsIGlzIGEgbm9uLXNsYXNoZWQgdXJsLCB0aGVuIHJlbGF0aXZlXG4gIC8vIGxpbmtzIGxpa2UgLi4vLi4gc2hvdWxkIGJlIGFibGVcbiAgLy8gdG8gY3Jhd2wgdXAgdG8gdGhlIGhvc3RuYW1lLCBhcyB3ZWxsLiAgVGhpcyBpcyBzdHJhbmdlLlxuICAvLyByZXN1bHQucHJvdG9jb2wgaGFzIGFscmVhZHkgYmVlbiBzZXQgYnkgbm93LlxuICAvLyBMYXRlciBvbiwgcHV0IHRoZSBmaXJzdCBwYXRoIHBhcnQgaW50byB0aGUgaG9zdCBmaWVsZC5cbiAgaWYgKHBzeWNob3RpYykge1xuICAgIHJlc3VsdC5ob3N0bmFtZSA9ICcnO1xuICAgIHJlc3VsdC5wb3J0ID0gbnVsbDtcbiAgICBpZiAocmVzdWx0Lmhvc3QpIHtcbiAgICAgIGlmIChzcmNQYXRoWzBdID09PSAnJykgc3JjUGF0aFswXSA9IHJlc3VsdC5ob3N0O1xuICAgICAgZWxzZSBzcmNQYXRoLnVuc2hpZnQocmVzdWx0Lmhvc3QpO1xuICAgIH1cbiAgICByZXN1bHQuaG9zdCA9ICcnO1xuICAgIGlmIChyZWxhdGl2ZS5wcm90b2NvbCkge1xuICAgICAgcmVsYXRpdmUuaG9zdG5hbWUgPSBudWxsO1xuICAgICAgcmVsYXRpdmUucG9ydCA9IG51bGw7XG4gICAgICBpZiAocmVsYXRpdmUuaG9zdCkge1xuICAgICAgICBpZiAocmVsUGF0aFswXSA9PT0gJycpIHJlbFBhdGhbMF0gPSByZWxhdGl2ZS5ob3N0O1xuICAgICAgICBlbHNlIHJlbFBhdGgudW5zaGlmdChyZWxhdGl2ZS5ob3N0KTtcbiAgICAgIH1cbiAgICAgIHJlbGF0aXZlLmhvc3QgPSBudWxsO1xuICAgIH1cbiAgICBtdXN0RW5kQWJzID0gbXVzdEVuZEFicyAmJiAocmVsUGF0aFswXSA9PT0gJycgfHwgc3JjUGF0aFswXSA9PT0gJycpO1xuICB9XG5cbiAgaWYgKGlzUmVsQWJzKSB7XG4gICAgLy8gaXQncyBhYnNvbHV0ZS5cbiAgICByZXN1bHQuaG9zdCA9IChyZWxhdGl2ZS5ob3N0IHx8IHJlbGF0aXZlLmhvc3QgPT09ICcnKSA/XG4gICAgICAgICAgICAgICAgICByZWxhdGl2ZS5ob3N0IDogcmVzdWx0Lmhvc3Q7XG4gICAgcmVzdWx0Lmhvc3RuYW1lID0gKHJlbGF0aXZlLmhvc3RuYW1lIHx8IHJlbGF0aXZlLmhvc3RuYW1lID09PSAnJykgP1xuICAgICAgICAgICAgICAgICAgICAgIHJlbGF0aXZlLmhvc3RuYW1lIDogcmVzdWx0Lmhvc3RuYW1lO1xuICAgIHJlc3VsdC5zZWFyY2ggPSByZWxhdGl2ZS5zZWFyY2g7XG4gICAgcmVzdWx0LnF1ZXJ5ID0gcmVsYXRpdmUucXVlcnk7XG4gICAgc3JjUGF0aCA9IHJlbFBhdGg7XG4gICAgLy8gZmFsbCB0aHJvdWdoIHRvIHRoZSBkb3QtaGFuZGxpbmcgYmVsb3cuXG4gIH0gZWxzZSBpZiAocmVsUGF0aC5sZW5ndGgpIHtcbiAgICAvLyBpdCdzIHJlbGF0aXZlXG4gICAgLy8gdGhyb3cgYXdheSB0aGUgZXhpc3RpbmcgZmlsZSwgYW5kIHRha2UgdGhlIG5ldyBwYXRoIGluc3RlYWQuXG4gICAgaWYgKCFzcmNQYXRoKSBzcmNQYXRoID0gW107XG4gICAgc3JjUGF0aC5wb3AoKTtcbiAgICBzcmNQYXRoID0gc3JjUGF0aC5jb25jYXQocmVsUGF0aCk7XG4gICAgcmVzdWx0LnNlYXJjaCA9IHJlbGF0aXZlLnNlYXJjaDtcbiAgICByZXN1bHQucXVlcnkgPSByZWxhdGl2ZS5xdWVyeTtcbiAgfSBlbHNlIGlmICghaXNOdWxsT3JVbmRlZmluZWQocmVsYXRpdmUuc2VhcmNoKSkge1xuICAgIC8vIGp1c3QgcHVsbCBvdXQgdGhlIHNlYXJjaC5cbiAgICAvLyBsaWtlIGhyZWY9Jz9mb28nLlxuICAgIC8vIFB1dCB0aGlzIGFmdGVyIHRoZSBvdGhlciB0d28gY2FzZXMgYmVjYXVzZSBpdCBzaW1wbGlmaWVzIHRoZSBib29sZWFuc1xuICAgIGlmIChwc3ljaG90aWMpIHtcbiAgICAgIHJlc3VsdC5ob3N0bmFtZSA9IHJlc3VsdC5ob3N0ID0gc3JjUGF0aC5zaGlmdCgpO1xuICAgICAgLy9vY2NhdGlvbmFseSB0aGUgYXV0aCBjYW4gZ2V0IHN0dWNrIG9ubHkgaW4gaG9zdFxuICAgICAgLy90aGlzIGVzcGVjaWFseSBoYXBwZW5zIGluIGNhc2VzIGxpa2VcbiAgICAgIC8vdXJsLnJlc29sdmVPYmplY3QoJ21haWx0bzpsb2NhbDFAZG9tYWluMScsICdsb2NhbDJAZG9tYWluMicpXG4gICAgICB2YXIgYXV0aEluSG9zdCA9IHJlc3VsdC5ob3N0ICYmIHJlc3VsdC5ob3N0LmluZGV4T2YoJ0AnKSA+IDAgP1xuICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQuaG9zdC5zcGxpdCgnQCcpIDogZmFsc2U7XG4gICAgICBpZiAoYXV0aEluSG9zdCkge1xuICAgICAgICByZXN1bHQuYXV0aCA9IGF1dGhJbkhvc3Quc2hpZnQoKTtcbiAgICAgICAgcmVzdWx0Lmhvc3QgPSByZXN1bHQuaG9zdG5hbWUgPSBhdXRoSW5Ib3N0LnNoaWZ0KCk7XG4gICAgICB9XG4gICAgfVxuICAgIHJlc3VsdC5zZWFyY2ggPSByZWxhdGl2ZS5zZWFyY2g7XG4gICAgcmVzdWx0LnF1ZXJ5ID0gcmVsYXRpdmUucXVlcnk7XG4gICAgLy90byBzdXBwb3J0IGh0dHAucmVxdWVzdFxuICAgIGlmICghaXNOdWxsKHJlc3VsdC5wYXRobmFtZSkgfHwgIWlzTnVsbChyZXN1bHQuc2VhcmNoKSkge1xuICAgICAgcmVzdWx0LnBhdGggPSAocmVzdWx0LnBhdGhuYW1lID8gcmVzdWx0LnBhdGhuYW1lIDogJycpICtcbiAgICAgICAgICAgICAgICAgICAgKHJlc3VsdC5zZWFyY2ggPyByZXN1bHQuc2VhcmNoIDogJycpO1xuICAgIH1cbiAgICByZXN1bHQuaHJlZiA9IHJlc3VsdC5mb3JtYXQoKTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgaWYgKCFzcmNQYXRoLmxlbmd0aCkge1xuICAgIC8vIG5vIHBhdGggYXQgYWxsLiAgZWFzeS5cbiAgICAvLyB3ZSd2ZSBhbHJlYWR5IGhhbmRsZWQgdGhlIG90aGVyIHN0dWZmIGFib3ZlLlxuICAgIHJlc3VsdC5wYXRobmFtZSA9IG51bGw7XG4gICAgLy90byBzdXBwb3J0IGh0dHAucmVxdWVzdFxuICAgIGlmIChyZXN1bHQuc2VhcmNoKSB7XG4gICAgICByZXN1bHQucGF0aCA9ICcvJyArIHJlc3VsdC5zZWFyY2g7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJlc3VsdC5wYXRoID0gbnVsbDtcbiAgICB9XG4gICAgcmVzdWx0LmhyZWYgPSByZXN1bHQuZm9ybWF0KCk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIC8vIGlmIGEgdXJsIEVORHMgaW4gLiBvciAuLiwgdGhlbiBpdCBtdXN0IGdldCBhIHRyYWlsaW5nIHNsYXNoLlxuICAvLyBob3dldmVyLCBpZiBpdCBlbmRzIGluIGFueXRoaW5nIGVsc2Ugbm9uLXNsYXNoeSxcbiAgLy8gdGhlbiBpdCBtdXN0IE5PVCBnZXQgYSB0cmFpbGluZyBzbGFzaC5cbiAgdmFyIGxhc3QgPSBzcmNQYXRoLnNsaWNlKC0xKVswXTtcbiAgdmFyIGhhc1RyYWlsaW5nU2xhc2ggPSAoXG4gICAgICAocmVzdWx0Lmhvc3QgfHwgcmVsYXRpdmUuaG9zdCkgJiYgKGxhc3QgPT09ICcuJyB8fCBsYXN0ID09PSAnLi4nKSB8fFxuICAgICAgbGFzdCA9PT0gJycpO1xuXG4gIC8vIHN0cmlwIHNpbmdsZSBkb3RzLCByZXNvbHZlIGRvdWJsZSBkb3RzIHRvIHBhcmVudCBkaXJcbiAgLy8gaWYgdGhlIHBhdGggdHJpZXMgdG8gZ28gYWJvdmUgdGhlIHJvb3QsIGB1cGAgZW5kcyB1cCA+IDBcbiAgdmFyIHVwID0gMDtcbiAgZm9yICh2YXIgaSA9IHNyY1BhdGgubGVuZ3RoOyBpID49IDA7IGktLSkge1xuICAgIGxhc3QgPSBzcmNQYXRoW2ldO1xuICAgIGlmIChsYXN0ID09ICcuJykge1xuICAgICAgc3JjUGF0aC5zcGxpY2UoaSwgMSk7XG4gICAgfSBlbHNlIGlmIChsYXN0ID09PSAnLi4nKSB7XG4gICAgICBzcmNQYXRoLnNwbGljZShpLCAxKTtcbiAgICAgIHVwKys7XG4gICAgfSBlbHNlIGlmICh1cCkge1xuICAgICAgc3JjUGF0aC5zcGxpY2UoaSwgMSk7XG4gICAgICB1cC0tO1xuICAgIH1cbiAgfVxuXG4gIC8vIGlmIHRoZSBwYXRoIGlzIGFsbG93ZWQgdG8gZ28gYWJvdmUgdGhlIHJvb3QsIHJlc3RvcmUgbGVhZGluZyAuLnNcbiAgaWYgKCFtdXN0RW5kQWJzICYmICFyZW1vdmVBbGxEb3RzKSB7XG4gICAgZm9yICg7IHVwLS07IHVwKSB7XG4gICAgICBzcmNQYXRoLnVuc2hpZnQoJy4uJyk7XG4gICAgfVxuICB9XG5cbiAgaWYgKG11c3RFbmRBYnMgJiYgc3JjUGF0aFswXSAhPT0gJycgJiZcbiAgICAgICghc3JjUGF0aFswXSB8fCBzcmNQYXRoWzBdLmNoYXJBdCgwKSAhPT0gJy8nKSkge1xuICAgIHNyY1BhdGgudW5zaGlmdCgnJyk7XG4gIH1cblxuICBpZiAoaGFzVHJhaWxpbmdTbGFzaCAmJiAoc3JjUGF0aC5qb2luKCcvJykuc3Vic3RyKC0xKSAhPT0gJy8nKSkge1xuICAgIHNyY1BhdGgucHVzaCgnJyk7XG4gIH1cblxuICB2YXIgaXNBYnNvbHV0ZSA9IHNyY1BhdGhbMF0gPT09ICcnIHx8XG4gICAgICAoc3JjUGF0aFswXSAmJiBzcmNQYXRoWzBdLmNoYXJBdCgwKSA9PT0gJy8nKTtcblxuICAvLyBwdXQgdGhlIGhvc3QgYmFja1xuICBpZiAocHN5Y2hvdGljKSB7XG4gICAgcmVzdWx0Lmhvc3RuYW1lID0gcmVzdWx0Lmhvc3QgPSBpc0Fic29sdXRlID8gJycgOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjUGF0aC5sZW5ndGggPyBzcmNQYXRoLnNoaWZ0KCkgOiAnJztcbiAgICAvL29jY2F0aW9uYWx5IHRoZSBhdXRoIGNhbiBnZXQgc3R1Y2sgb25seSBpbiBob3N0XG4gICAgLy90aGlzIGVzcGVjaWFseSBoYXBwZW5zIGluIGNhc2VzIGxpa2VcbiAgICAvL3VybC5yZXNvbHZlT2JqZWN0KCdtYWlsdG86bG9jYWwxQGRvbWFpbjEnLCAnbG9jYWwyQGRvbWFpbjInKVxuICAgIHZhciBhdXRoSW5Ib3N0ID0gcmVzdWx0Lmhvc3QgJiYgcmVzdWx0Lmhvc3QuaW5kZXhPZignQCcpID4gMCA/XG4gICAgICAgICAgICAgICAgICAgICByZXN1bHQuaG9zdC5zcGxpdCgnQCcpIDogZmFsc2U7XG4gICAgaWYgKGF1dGhJbkhvc3QpIHtcbiAgICAgIHJlc3VsdC5hdXRoID0gYXV0aEluSG9zdC5zaGlmdCgpO1xuICAgICAgcmVzdWx0Lmhvc3QgPSByZXN1bHQuaG9zdG5hbWUgPSBhdXRoSW5Ib3N0LnNoaWZ0KCk7XG4gICAgfVxuICB9XG5cbiAgbXVzdEVuZEFicyA9IG11c3RFbmRBYnMgfHwgKHJlc3VsdC5ob3N0ICYmIHNyY1BhdGgubGVuZ3RoKTtcblxuICBpZiAobXVzdEVuZEFicyAmJiAhaXNBYnNvbHV0ZSkge1xuICAgIHNyY1BhdGgudW5zaGlmdCgnJyk7XG4gIH1cblxuICBpZiAoIXNyY1BhdGgubGVuZ3RoKSB7XG4gICAgcmVzdWx0LnBhdGhuYW1lID0gbnVsbDtcbiAgICByZXN1bHQucGF0aCA9IG51bGw7XG4gIH0gZWxzZSB7XG4gICAgcmVzdWx0LnBhdGhuYW1lID0gc3JjUGF0aC5qb2luKCcvJyk7XG4gIH1cblxuICAvL3RvIHN1cHBvcnQgcmVxdWVzdC5odHRwXG4gIGlmICghaXNOdWxsKHJlc3VsdC5wYXRobmFtZSkgfHwgIWlzTnVsbChyZXN1bHQuc2VhcmNoKSkge1xuICAgIHJlc3VsdC5wYXRoID0gKHJlc3VsdC5wYXRobmFtZSA/IHJlc3VsdC5wYXRobmFtZSA6ICcnKSArXG4gICAgICAgICAgICAgICAgICAocmVzdWx0LnNlYXJjaCA/IHJlc3VsdC5zZWFyY2ggOiAnJyk7XG4gIH1cbiAgcmVzdWx0LmF1dGggPSByZWxhdGl2ZS5hdXRoIHx8IHJlc3VsdC5hdXRoO1xuICByZXN1bHQuc2xhc2hlcyA9IHJlc3VsdC5zbGFzaGVzIHx8IHJlbGF0aXZlLnNsYXNoZXM7XG4gIHJlc3VsdC5ocmVmID0gcmVzdWx0LmZvcm1hdCgpO1xuICByZXR1cm4gcmVzdWx0O1xufTtcblxuVXJsLnByb3RvdHlwZS5wYXJzZUhvc3QgPSBmdW5jdGlvbigpIHtcbiAgdmFyIGhvc3QgPSB0aGlzLmhvc3Q7XG4gIHZhciBwb3J0ID0gcG9ydFBhdHRlcm4uZXhlYyhob3N0KTtcbiAgaWYgKHBvcnQpIHtcbiAgICBwb3J0ID0gcG9ydFswXTtcbiAgICBpZiAocG9ydCAhPT0gJzonKSB7XG4gICAgICB0aGlzLnBvcnQgPSBwb3J0LnN1YnN0cigxKTtcbiAgICB9XG4gICAgaG9zdCA9IGhvc3Quc3Vic3RyKDAsIGhvc3QubGVuZ3RoIC0gcG9ydC5sZW5ndGgpO1xuICB9XG4gIGlmIChob3N0KSB0aGlzLmhvc3RuYW1lID0gaG9zdDtcbn07XG5cbmZ1bmN0aW9uIGlzU3RyaW5nKGFyZykge1xuICByZXR1cm4gdHlwZW9mIGFyZyA9PT0gXCJzdHJpbmdcIjtcbn1cblxuZnVuY3Rpb24gaXNPYmplY3QoYXJnKSB7XG4gIHJldHVybiB0eXBlb2YgYXJnID09PSAnb2JqZWN0JyAmJiBhcmcgIT09IG51bGw7XG59XG5cbmZ1bmN0aW9uIGlzTnVsbChhcmcpIHtcbiAgcmV0dXJuIGFyZyA9PT0gbnVsbDtcbn1cbmZ1bmN0aW9uIGlzTnVsbE9yVW5kZWZpbmVkKGFyZykge1xuICByZXR1cm4gIGFyZyA9PSBudWxsO1xufVxuIiwiJ3VzZSBzdHJpY3QnO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGVhcmN1dDtcblxuZnVuY3Rpb24gZWFyY3V0KGRhdGEsIGhvbGVJbmRpY2VzLCBkaW0pIHtcblxuICAgIGRpbSA9IGRpbSB8fCAyO1xuXG4gICAgdmFyIGhhc0hvbGVzID0gaG9sZUluZGljZXMgJiYgaG9sZUluZGljZXMubGVuZ3RoLFxuICAgICAgICBvdXRlckxlbiA9IGhhc0hvbGVzID8gaG9sZUluZGljZXNbMF0gKiBkaW0gOiBkYXRhLmxlbmd0aCxcbiAgICAgICAgb3V0ZXJOb2RlID0gbGlua2VkTGlzdChkYXRhLCAwLCBvdXRlckxlbiwgZGltLCB0cnVlKSxcbiAgICAgICAgdHJpYW5nbGVzID0gW107XG5cbiAgICBpZiAoIW91dGVyTm9kZSkgcmV0dXJuIHRyaWFuZ2xlcztcblxuICAgIHZhciBtaW5YLCBtaW5ZLCBtYXhYLCBtYXhZLCB4LCB5LCBzaXplO1xuXG4gICAgaWYgKGhhc0hvbGVzKSBvdXRlck5vZGUgPSBlbGltaW5hdGVIb2xlcyhkYXRhLCBob2xlSW5kaWNlcywgb3V0ZXJOb2RlLCBkaW0pO1xuXG4gICAgLy8gaWYgdGhlIHNoYXBlIGlzIG5vdCB0b28gc2ltcGxlLCB3ZSdsbCB1c2Ugei1vcmRlciBjdXJ2ZSBoYXNoIGxhdGVyOyBjYWxjdWxhdGUgcG9seWdvbiBiYm94XG4gICAgaWYgKGRhdGEubGVuZ3RoID4gODAgKiBkaW0pIHtcbiAgICAgICAgbWluWCA9IG1heFggPSBkYXRhWzBdO1xuICAgICAgICBtaW5ZID0gbWF4WSA9IGRhdGFbMV07XG5cbiAgICAgICAgZm9yICh2YXIgaSA9IGRpbTsgaSA8IG91dGVyTGVuOyBpICs9IGRpbSkge1xuICAgICAgICAgICAgeCA9IGRhdGFbaV07XG4gICAgICAgICAgICB5ID0gZGF0YVtpICsgMV07XG4gICAgICAgICAgICBpZiAoeCA8IG1pblgpIG1pblggPSB4O1xuICAgICAgICAgICAgaWYgKHkgPCBtaW5ZKSBtaW5ZID0geTtcbiAgICAgICAgICAgIGlmICh4ID4gbWF4WCkgbWF4WCA9IHg7XG4gICAgICAgICAgICBpZiAoeSA+IG1heFkpIG1heFkgPSB5O1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gbWluWCwgbWluWSBhbmQgc2l6ZSBhcmUgbGF0ZXIgdXNlZCB0byB0cmFuc2Zvcm0gY29vcmRzIGludG8gaW50ZWdlcnMgZm9yIHotb3JkZXIgY2FsY3VsYXRpb25cbiAgICAgICAgc2l6ZSA9IE1hdGgubWF4KG1heFggLSBtaW5YLCBtYXhZIC0gbWluWSk7XG4gICAgfVxuXG4gICAgZWFyY3V0TGlua2VkKG91dGVyTm9kZSwgdHJpYW5nbGVzLCBkaW0sIG1pblgsIG1pblksIHNpemUpO1xuXG4gICAgcmV0dXJuIHRyaWFuZ2xlcztcbn1cblxuLy8gY3JlYXRlIGEgY2lyY3VsYXIgZG91Ymx5IGxpbmtlZCBsaXN0IGZyb20gcG9seWdvbiBwb2ludHMgaW4gdGhlIHNwZWNpZmllZCB3aW5kaW5nIG9yZGVyXG5mdW5jdGlvbiBsaW5rZWRMaXN0KGRhdGEsIHN0YXJ0LCBlbmQsIGRpbSwgY2xvY2t3aXNlKSB7XG4gICAgdmFyIHN1bSA9IDAsXG4gICAgICAgIGksIGosIGxhc3Q7XG5cbiAgICAvLyBjYWxjdWxhdGUgb3JpZ2luYWwgd2luZGluZyBvcmRlciBvZiBhIHBvbHlnb24gcmluZ1xuICAgIGZvciAoaSA9IHN0YXJ0LCBqID0gZW5kIC0gZGltOyBpIDwgZW5kOyBpICs9IGRpbSkge1xuICAgICAgICBzdW0gKz0gKGRhdGFbal0gLSBkYXRhW2ldKSAqIChkYXRhW2kgKyAxXSArIGRhdGFbaiArIDFdKTtcbiAgICAgICAgaiA9IGk7XG4gICAgfVxuXG4gICAgLy8gbGluayBwb2ludHMgaW50byBjaXJjdWxhciBkb3VibHktbGlua2VkIGxpc3QgaW4gdGhlIHNwZWNpZmllZCB3aW5kaW5nIG9yZGVyXG4gICAgaWYgKGNsb2Nrd2lzZSA9PT0gKHN1bSA+IDApKSB7XG4gICAgICAgIGZvciAoaSA9IHN0YXJ0OyBpIDwgZW5kOyBpICs9IGRpbSkgbGFzdCA9IGluc2VydE5vZGUoaSwgZGF0YVtpXSwgZGF0YVtpICsgMV0sIGxhc3QpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIGZvciAoaSA9IGVuZCAtIGRpbTsgaSA+PSBzdGFydDsgaSAtPSBkaW0pIGxhc3QgPSBpbnNlcnROb2RlKGksIGRhdGFbaV0sIGRhdGFbaSArIDFdLCBsYXN0KTtcbiAgICB9XG5cbiAgICByZXR1cm4gbGFzdDtcbn1cblxuLy8gZWxpbWluYXRlIGNvbGluZWFyIG9yIGR1cGxpY2F0ZSBwb2ludHNcbmZ1bmN0aW9uIGZpbHRlclBvaW50cyhzdGFydCwgZW5kKSB7XG4gICAgaWYgKCFzdGFydCkgcmV0dXJuIHN0YXJ0O1xuICAgIGlmICghZW5kKSBlbmQgPSBzdGFydDtcblxuICAgIHZhciBwID0gc3RhcnQsXG4gICAgICAgIGFnYWluO1xuICAgIGRvIHtcbiAgICAgICAgYWdhaW4gPSBmYWxzZTtcblxuICAgICAgICBpZiAoIXAuc3RlaW5lciAmJiAoZXF1YWxzKHAsIHAubmV4dCkgfHwgYXJlYShwLnByZXYsIHAsIHAubmV4dCkgPT09IDApKSB7XG4gICAgICAgICAgICByZW1vdmVOb2RlKHApO1xuICAgICAgICAgICAgcCA9IGVuZCA9IHAucHJldjtcbiAgICAgICAgICAgIGlmIChwID09PSBwLm5leHQpIHJldHVybiBudWxsO1xuICAgICAgICAgICAgYWdhaW4gPSB0cnVlO1xuXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBwID0gcC5uZXh0O1xuICAgICAgICB9XG4gICAgfSB3aGlsZSAoYWdhaW4gfHwgcCAhPT0gZW5kKTtcblxuICAgIHJldHVybiBlbmQ7XG59XG5cbi8vIG1haW4gZWFyIHNsaWNpbmcgbG9vcCB3aGljaCB0cmlhbmd1bGF0ZXMgYSBwb2x5Z29uIChnaXZlbiBhcyBhIGxpbmtlZCBsaXN0KVxuZnVuY3Rpb24gZWFyY3V0TGlua2VkKGVhciwgdHJpYW5nbGVzLCBkaW0sIG1pblgsIG1pblksIHNpemUsIHBhc3MpIHtcbiAgICBpZiAoIWVhcikgcmV0dXJuO1xuXG4gICAgLy8gaW50ZXJsaW5rIHBvbHlnb24gbm9kZXMgaW4gei1vcmRlclxuICAgIGlmICghcGFzcyAmJiBzaXplKSBpbmRleEN1cnZlKGVhciwgbWluWCwgbWluWSwgc2l6ZSk7XG5cbiAgICB2YXIgc3RvcCA9IGVhcixcbiAgICAgICAgcHJldiwgbmV4dDtcblxuICAgIC8vIGl0ZXJhdGUgdGhyb3VnaCBlYXJzLCBzbGljaW5nIHRoZW0gb25lIGJ5IG9uZVxuICAgIHdoaWxlIChlYXIucHJldiAhPT0gZWFyLm5leHQpIHtcbiAgICAgICAgcHJldiA9IGVhci5wcmV2O1xuICAgICAgICBuZXh0ID0gZWFyLm5leHQ7XG5cbiAgICAgICAgaWYgKHNpemUgPyBpc0Vhckhhc2hlZChlYXIsIG1pblgsIG1pblksIHNpemUpIDogaXNFYXIoZWFyKSkge1xuICAgICAgICAgICAgLy8gY3V0IG9mZiB0aGUgdHJpYW5nbGVcbiAgICAgICAgICAgIHRyaWFuZ2xlcy5wdXNoKHByZXYuaSAvIGRpbSk7XG4gICAgICAgICAgICB0cmlhbmdsZXMucHVzaChlYXIuaSAvIGRpbSk7XG4gICAgICAgICAgICB0cmlhbmdsZXMucHVzaChuZXh0LmkgLyBkaW0pO1xuXG4gICAgICAgICAgICByZW1vdmVOb2RlKGVhcik7XG5cbiAgICAgICAgICAgIC8vIHNraXBwaW5nIHRoZSBuZXh0IHZlcnRpY2UgbGVhZHMgdG8gbGVzcyBzbGl2ZXIgdHJpYW5nbGVzXG4gICAgICAgICAgICBlYXIgPSBuZXh0Lm5leHQ7XG4gICAgICAgICAgICBzdG9wID0gbmV4dC5uZXh0O1xuXG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGVhciA9IG5leHQ7XG5cbiAgICAgICAgLy8gaWYgd2UgbG9vcGVkIHRocm91Z2ggdGhlIHdob2xlIHJlbWFpbmluZyBwb2x5Z29uIGFuZCBjYW4ndCBmaW5kIGFueSBtb3JlIGVhcnNcbiAgICAgICAgaWYgKGVhciA9PT0gc3RvcCkge1xuICAgICAgICAgICAgLy8gdHJ5IGZpbHRlcmluZyBwb2ludHMgYW5kIHNsaWNpbmcgYWdhaW5cbiAgICAgICAgICAgIGlmICghcGFzcykge1xuICAgICAgICAgICAgICAgIGVhcmN1dExpbmtlZChmaWx0ZXJQb2ludHMoZWFyKSwgdHJpYW5nbGVzLCBkaW0sIG1pblgsIG1pblksIHNpemUsIDEpO1xuXG4gICAgICAgICAgICAvLyBpZiB0aGlzIGRpZG4ndCB3b3JrLCB0cnkgY3VyaW5nIGFsbCBzbWFsbCBzZWxmLWludGVyc2VjdGlvbnMgbG9jYWxseVxuICAgICAgICAgICAgfSBlbHNlIGlmIChwYXNzID09PSAxKSB7XG4gICAgICAgICAgICAgICAgZWFyID0gY3VyZUxvY2FsSW50ZXJzZWN0aW9ucyhlYXIsIHRyaWFuZ2xlcywgZGltKTtcbiAgICAgICAgICAgICAgICBlYXJjdXRMaW5rZWQoZWFyLCB0cmlhbmdsZXMsIGRpbSwgbWluWCwgbWluWSwgc2l6ZSwgMik7XG5cbiAgICAgICAgICAgIC8vIGFzIGEgbGFzdCByZXNvcnQsIHRyeSBzcGxpdHRpbmcgdGhlIHJlbWFpbmluZyBwb2x5Z29uIGludG8gdHdvXG4gICAgICAgICAgICB9IGVsc2UgaWYgKHBhc3MgPT09IDIpIHtcbiAgICAgICAgICAgICAgICBzcGxpdEVhcmN1dChlYXIsIHRyaWFuZ2xlcywgZGltLCBtaW5YLCBtaW5ZLCBzaXplKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbi8vIGNoZWNrIHdoZXRoZXIgYSBwb2x5Z29uIG5vZGUgZm9ybXMgYSB2YWxpZCBlYXIgd2l0aCBhZGphY2VudCBub2Rlc1xuZnVuY3Rpb24gaXNFYXIoZWFyKSB7XG4gICAgdmFyIGEgPSBlYXIucHJldixcbiAgICAgICAgYiA9IGVhcixcbiAgICAgICAgYyA9IGVhci5uZXh0O1xuXG4gICAgaWYgKGFyZWEoYSwgYiwgYykgPj0gMCkgcmV0dXJuIGZhbHNlOyAvLyByZWZsZXgsIGNhbid0IGJlIGFuIGVhclxuXG4gICAgLy8gbm93IG1ha2Ugc3VyZSB3ZSBkb24ndCBoYXZlIG90aGVyIHBvaW50cyBpbnNpZGUgdGhlIHBvdGVudGlhbCBlYXJcbiAgICB2YXIgcCA9IGVhci5uZXh0Lm5leHQ7XG5cbiAgICB3aGlsZSAocCAhPT0gZWFyLnByZXYpIHtcbiAgICAgICAgaWYgKHBvaW50SW5UcmlhbmdsZShhLngsIGEueSwgYi54LCBiLnksIGMueCwgYy55LCBwLngsIHAueSkgJiZcbiAgICAgICAgICAgIGFyZWEocC5wcmV2LCBwLCBwLm5leHQpID49IDApIHJldHVybiBmYWxzZTtcbiAgICAgICAgcCA9IHAubmV4dDtcbiAgICB9XG5cbiAgICByZXR1cm4gdHJ1ZTtcbn1cblxuZnVuY3Rpb24gaXNFYXJIYXNoZWQoZWFyLCBtaW5YLCBtaW5ZLCBzaXplKSB7XG4gICAgdmFyIGEgPSBlYXIucHJldixcbiAgICAgICAgYiA9IGVhcixcbiAgICAgICAgYyA9IGVhci5uZXh0O1xuXG4gICAgaWYgKGFyZWEoYSwgYiwgYykgPj0gMCkgcmV0dXJuIGZhbHNlOyAvLyByZWZsZXgsIGNhbid0IGJlIGFuIGVhclxuXG4gICAgLy8gdHJpYW5nbGUgYmJveDsgbWluICYgbWF4IGFyZSBjYWxjdWxhdGVkIGxpa2UgdGhpcyBmb3Igc3BlZWRcbiAgICB2YXIgbWluVFggPSBhLnggPCBiLnggPyAoYS54IDwgYy54ID8gYS54IDogYy54KSA6IChiLnggPCBjLnggPyBiLnggOiBjLngpLFxuICAgICAgICBtaW5UWSA9IGEueSA8IGIueSA/IChhLnkgPCBjLnkgPyBhLnkgOiBjLnkpIDogKGIueSA8IGMueSA/IGIueSA6IGMueSksXG4gICAgICAgIG1heFRYID0gYS54ID4gYi54ID8gKGEueCA+IGMueCA/IGEueCA6IGMueCkgOiAoYi54ID4gYy54ID8gYi54IDogYy54KSxcbiAgICAgICAgbWF4VFkgPSBhLnkgPiBiLnkgPyAoYS55ID4gYy55ID8gYS55IDogYy55KSA6IChiLnkgPiBjLnkgPyBiLnkgOiBjLnkpO1xuXG4gICAgLy8gei1vcmRlciByYW5nZSBmb3IgdGhlIGN1cnJlbnQgdHJpYW5nbGUgYmJveDtcbiAgICB2YXIgbWluWiA9IHpPcmRlcihtaW5UWCwgbWluVFksIG1pblgsIG1pblksIHNpemUpLFxuICAgICAgICBtYXhaID0gek9yZGVyKG1heFRYLCBtYXhUWSwgbWluWCwgbWluWSwgc2l6ZSk7XG5cbiAgICAvLyBmaXJzdCBsb29rIGZvciBwb2ludHMgaW5zaWRlIHRoZSB0cmlhbmdsZSBpbiBpbmNyZWFzaW5nIHotb3JkZXJcbiAgICB2YXIgcCA9IGVhci5uZXh0WjtcblxuICAgIHdoaWxlIChwICYmIHAueiA8PSBtYXhaKSB7XG4gICAgICAgIGlmIChwICE9PSBlYXIucHJldiAmJiBwICE9PSBlYXIubmV4dCAmJlxuICAgICAgICAgICAgcG9pbnRJblRyaWFuZ2xlKGEueCwgYS55LCBiLngsIGIueSwgYy54LCBjLnksIHAueCwgcC55KSAmJlxuICAgICAgICAgICAgYXJlYShwLnByZXYsIHAsIHAubmV4dCkgPj0gMCkgcmV0dXJuIGZhbHNlO1xuICAgICAgICBwID0gcC5uZXh0WjtcbiAgICB9XG5cbiAgICAvLyB0aGVuIGxvb2sgZm9yIHBvaW50cyBpbiBkZWNyZWFzaW5nIHotb3JkZXJcbiAgICBwID0gZWFyLnByZXZaO1xuXG4gICAgd2hpbGUgKHAgJiYgcC56ID49IG1pblopIHtcbiAgICAgICAgaWYgKHAgIT09IGVhci5wcmV2ICYmIHAgIT09IGVhci5uZXh0ICYmXG4gICAgICAgICAgICBwb2ludEluVHJpYW5nbGUoYS54LCBhLnksIGIueCwgYi55LCBjLngsIGMueSwgcC54LCBwLnkpICYmXG4gICAgICAgICAgICBhcmVhKHAucHJldiwgcCwgcC5uZXh0KSA+PSAwKSByZXR1cm4gZmFsc2U7XG4gICAgICAgIHAgPSBwLnByZXZaO1xuICAgIH1cblxuICAgIHJldHVybiB0cnVlO1xufVxuXG4vLyBnbyB0aHJvdWdoIGFsbCBwb2x5Z29uIG5vZGVzIGFuZCBjdXJlIHNtYWxsIGxvY2FsIHNlbGYtaW50ZXJzZWN0aW9uc1xuZnVuY3Rpb24gY3VyZUxvY2FsSW50ZXJzZWN0aW9ucyhzdGFydCwgdHJpYW5nbGVzLCBkaW0pIHtcbiAgICB2YXIgcCA9IHN0YXJ0O1xuICAgIGRvIHtcbiAgICAgICAgdmFyIGEgPSBwLnByZXYsXG4gICAgICAgICAgICBiID0gcC5uZXh0Lm5leHQ7XG5cbiAgICAgICAgLy8gYSBzZWxmLWludGVyc2VjdGlvbiB3aGVyZSBlZGdlICh2W2ktMV0sdltpXSkgaW50ZXJzZWN0cyAodltpKzFdLHZbaSsyXSlcbiAgICAgICAgaWYgKGludGVyc2VjdHMoYSwgcCwgcC5uZXh0LCBiKSAmJiBsb2NhbGx5SW5zaWRlKGEsIGIpICYmIGxvY2FsbHlJbnNpZGUoYiwgYSkpIHtcblxuICAgICAgICAgICAgdHJpYW5nbGVzLnB1c2goYS5pIC8gZGltKTtcbiAgICAgICAgICAgIHRyaWFuZ2xlcy5wdXNoKHAuaSAvIGRpbSk7XG4gICAgICAgICAgICB0cmlhbmdsZXMucHVzaChiLmkgLyBkaW0pO1xuXG4gICAgICAgICAgICAvLyByZW1vdmUgdHdvIG5vZGVzIGludm9sdmVkXG4gICAgICAgICAgICByZW1vdmVOb2RlKHApO1xuICAgICAgICAgICAgcmVtb3ZlTm9kZShwLm5leHQpO1xuXG4gICAgICAgICAgICBwID0gc3RhcnQgPSBiO1xuICAgICAgICB9XG4gICAgICAgIHAgPSBwLm5leHQ7XG4gICAgfSB3aGlsZSAocCAhPT0gc3RhcnQpO1xuXG4gICAgcmV0dXJuIHA7XG59XG5cbi8vIHRyeSBzcGxpdHRpbmcgcG9seWdvbiBpbnRvIHR3byBhbmQgdHJpYW5ndWxhdGUgdGhlbSBpbmRlcGVuZGVudGx5XG5mdW5jdGlvbiBzcGxpdEVhcmN1dChzdGFydCwgdHJpYW5nbGVzLCBkaW0sIG1pblgsIG1pblksIHNpemUpIHtcbiAgICAvLyBsb29rIGZvciBhIHZhbGlkIGRpYWdvbmFsIHRoYXQgZGl2aWRlcyB0aGUgcG9seWdvbiBpbnRvIHR3b1xuICAgIHZhciBhID0gc3RhcnQ7XG4gICAgZG8ge1xuICAgICAgICB2YXIgYiA9IGEubmV4dC5uZXh0O1xuICAgICAgICB3aGlsZSAoYiAhPT0gYS5wcmV2KSB7XG4gICAgICAgICAgICBpZiAoYS5pICE9PSBiLmkgJiYgaXNWYWxpZERpYWdvbmFsKGEsIGIpKSB7XG4gICAgICAgICAgICAgICAgLy8gc3BsaXQgdGhlIHBvbHlnb24gaW4gdHdvIGJ5IHRoZSBkaWFnb25hbFxuICAgICAgICAgICAgICAgIHZhciBjID0gc3BsaXRQb2x5Z29uKGEsIGIpO1xuXG4gICAgICAgICAgICAgICAgLy8gZmlsdGVyIGNvbGluZWFyIHBvaW50cyBhcm91bmQgdGhlIGN1dHNcbiAgICAgICAgICAgICAgICBhID0gZmlsdGVyUG9pbnRzKGEsIGEubmV4dCk7XG4gICAgICAgICAgICAgICAgYyA9IGZpbHRlclBvaW50cyhjLCBjLm5leHQpO1xuXG4gICAgICAgICAgICAgICAgLy8gcnVuIGVhcmN1dCBvbiBlYWNoIGhhbGZcbiAgICAgICAgICAgICAgICBlYXJjdXRMaW5rZWQoYSwgdHJpYW5nbGVzLCBkaW0sIG1pblgsIG1pblksIHNpemUpO1xuICAgICAgICAgICAgICAgIGVhcmN1dExpbmtlZChjLCB0cmlhbmdsZXMsIGRpbSwgbWluWCwgbWluWSwgc2l6ZSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYiA9IGIubmV4dDtcbiAgICAgICAgfVxuICAgICAgICBhID0gYS5uZXh0O1xuICAgIH0gd2hpbGUgKGEgIT09IHN0YXJ0KTtcbn1cblxuLy8gbGluayBldmVyeSBob2xlIGludG8gdGhlIG91dGVyIGxvb3AsIHByb2R1Y2luZyBhIHNpbmdsZS1yaW5nIHBvbHlnb24gd2l0aG91dCBob2xlc1xuZnVuY3Rpb24gZWxpbWluYXRlSG9sZXMoZGF0YSwgaG9sZUluZGljZXMsIG91dGVyTm9kZSwgZGltKSB7XG4gICAgdmFyIHF1ZXVlID0gW10sXG4gICAgICAgIGksIGxlbiwgc3RhcnQsIGVuZCwgbGlzdDtcblxuICAgIGZvciAoaSA9IDAsIGxlbiA9IGhvbGVJbmRpY2VzLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICAgIHN0YXJ0ID0gaG9sZUluZGljZXNbaV0gKiBkaW07XG4gICAgICAgIGVuZCA9IGkgPCBsZW4gLSAxID8gaG9sZUluZGljZXNbaSArIDFdICogZGltIDogZGF0YS5sZW5ndGg7XG4gICAgICAgIGxpc3QgPSBsaW5rZWRMaXN0KGRhdGEsIHN0YXJ0LCBlbmQsIGRpbSwgZmFsc2UpO1xuICAgICAgICBpZiAobGlzdCA9PT0gbGlzdC5uZXh0KSBsaXN0LnN0ZWluZXIgPSB0cnVlO1xuICAgICAgICBxdWV1ZS5wdXNoKGdldExlZnRtb3N0KGxpc3QpKTtcbiAgICB9XG5cbiAgICBxdWV1ZS5zb3J0KGNvbXBhcmVYKTtcblxuICAgIC8vIHByb2Nlc3MgaG9sZXMgZnJvbSBsZWZ0IHRvIHJpZ2h0XG4gICAgZm9yIChpID0gMDsgaSA8IHF1ZXVlLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGVsaW1pbmF0ZUhvbGUocXVldWVbaV0sIG91dGVyTm9kZSk7XG4gICAgICAgIG91dGVyTm9kZSA9IGZpbHRlclBvaW50cyhvdXRlck5vZGUsIG91dGVyTm9kZS5uZXh0KTtcbiAgICB9XG5cbiAgICByZXR1cm4gb3V0ZXJOb2RlO1xufVxuXG5mdW5jdGlvbiBjb21wYXJlWChhLCBiKSB7XG4gICAgcmV0dXJuIGEueCAtIGIueDtcbn1cblxuLy8gZmluZCBhIGJyaWRnZSBiZXR3ZWVuIHZlcnRpY2VzIHRoYXQgY29ubmVjdHMgaG9sZSB3aXRoIGFuIG91dGVyIHJpbmcgYW5kIGFuZCBsaW5rIGl0XG5mdW5jdGlvbiBlbGltaW5hdGVIb2xlKGhvbGUsIG91dGVyTm9kZSkge1xuICAgIG91dGVyTm9kZSA9IGZpbmRIb2xlQnJpZGdlKGhvbGUsIG91dGVyTm9kZSk7XG4gICAgaWYgKG91dGVyTm9kZSkge1xuICAgICAgICB2YXIgYiA9IHNwbGl0UG9seWdvbihvdXRlck5vZGUsIGhvbGUpO1xuICAgICAgICBmaWx0ZXJQb2ludHMoYiwgYi5uZXh0KTtcbiAgICB9XG59XG5cbi8vIERhdmlkIEViZXJseSdzIGFsZ29yaXRobSBmb3IgZmluZGluZyBhIGJyaWRnZSBiZXR3ZWVuIGhvbGUgYW5kIG91dGVyIHBvbHlnb25cbmZ1bmN0aW9uIGZpbmRIb2xlQnJpZGdlKGhvbGUsIG91dGVyTm9kZSkge1xuICAgIHZhciBwID0gb3V0ZXJOb2RlLFxuICAgICAgICBoeCA9IGhvbGUueCxcbiAgICAgICAgaHkgPSBob2xlLnksXG4gICAgICAgIHF4ID0gLUluZmluaXR5LFxuICAgICAgICBtO1xuXG4gICAgLy8gZmluZCBhIHNlZ21lbnQgaW50ZXJzZWN0ZWQgYnkgYSByYXkgZnJvbSB0aGUgaG9sZSdzIGxlZnRtb3N0IHBvaW50IHRvIHRoZSBsZWZ0O1xuICAgIC8vIHNlZ21lbnQncyBlbmRwb2ludCB3aXRoIGxlc3NlciB4IHdpbGwgYmUgcG90ZW50aWFsIGNvbm5lY3Rpb24gcG9pbnRcbiAgICBkbyB7XG4gICAgICAgIGlmIChoeSA8PSBwLnkgJiYgaHkgPj0gcC5uZXh0LnkpIHtcbiAgICAgICAgICAgIHZhciB4ID0gcC54ICsgKGh5IC0gcC55KSAqIChwLm5leHQueCAtIHAueCkgLyAocC5uZXh0LnkgLSBwLnkpO1xuICAgICAgICAgICAgaWYgKHggPD0gaHggJiYgeCA+IHF4KSB7XG4gICAgICAgICAgICAgICAgcXggPSB4O1xuICAgICAgICAgICAgICAgIG0gPSBwLnggPCBwLm5leHQueCA/IHAgOiBwLm5leHQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcCA9IHAubmV4dDtcbiAgICB9IHdoaWxlIChwICE9PSBvdXRlck5vZGUpO1xuXG4gICAgaWYgKCFtKSByZXR1cm4gbnVsbDtcblxuICAgIC8vIGxvb2sgZm9yIHBvaW50cyBpbnNpZGUgdGhlIHRyaWFuZ2xlIG9mIGhvbGUgcG9pbnQsIHNlZ21lbnQgaW50ZXJzZWN0aW9uIGFuZCBlbmRwb2ludDtcbiAgICAvLyBpZiB0aGVyZSBhcmUgbm8gcG9pbnRzIGZvdW5kLCB3ZSBoYXZlIGEgdmFsaWQgY29ubmVjdGlvbjtcbiAgICAvLyBvdGhlcndpc2UgY2hvb3NlIHRoZSBwb2ludCBvZiB0aGUgbWluaW11bSBhbmdsZSB3aXRoIHRoZSByYXkgYXMgY29ubmVjdGlvbiBwb2ludFxuXG4gICAgdmFyIHN0b3AgPSBtLFxuICAgICAgICB0YW5NaW4gPSBJbmZpbml0eSxcbiAgICAgICAgdGFuO1xuXG4gICAgcCA9IG0ubmV4dDtcblxuICAgIHdoaWxlIChwICE9PSBzdG9wKSB7XG4gICAgICAgIGlmIChoeCA+PSBwLnggJiYgcC54ID49IG0ueCAmJlxuICAgICAgICAgICAgICAgIHBvaW50SW5UcmlhbmdsZShoeSA8IG0ueSA/IGh4IDogcXgsIGh5LCBtLngsIG0ueSwgaHkgPCBtLnkgPyBxeCA6IGh4LCBoeSwgcC54LCBwLnkpKSB7XG5cbiAgICAgICAgICAgIHRhbiA9IE1hdGguYWJzKGh5IC0gcC55KSAvIChoeCAtIHAueCk7IC8vIHRhbmdlbnRpYWxcblxuICAgICAgICAgICAgaWYgKCh0YW4gPCB0YW5NaW4gfHwgKHRhbiA9PT0gdGFuTWluICYmIHAueCA+IG0ueCkpICYmIGxvY2FsbHlJbnNpZGUocCwgaG9sZSkpIHtcbiAgICAgICAgICAgICAgICBtID0gcDtcbiAgICAgICAgICAgICAgICB0YW5NaW4gPSB0YW47XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBwID0gcC5uZXh0O1xuICAgIH1cblxuICAgIHJldHVybiBtO1xufVxuXG4vLyBpbnRlcmxpbmsgcG9seWdvbiBub2RlcyBpbiB6LW9yZGVyXG5mdW5jdGlvbiBpbmRleEN1cnZlKHN0YXJ0LCBtaW5YLCBtaW5ZLCBzaXplKSB7XG4gICAgdmFyIHAgPSBzdGFydDtcbiAgICBkbyB7XG4gICAgICAgIGlmIChwLnogPT09IG51bGwpIHAueiA9IHpPcmRlcihwLngsIHAueSwgbWluWCwgbWluWSwgc2l6ZSk7XG4gICAgICAgIHAucHJldlogPSBwLnByZXY7XG4gICAgICAgIHAubmV4dFogPSBwLm5leHQ7XG4gICAgICAgIHAgPSBwLm5leHQ7XG4gICAgfSB3aGlsZSAocCAhPT0gc3RhcnQpO1xuXG4gICAgcC5wcmV2Wi5uZXh0WiA9IG51bGw7XG4gICAgcC5wcmV2WiA9IG51bGw7XG5cbiAgICBzb3J0TGlua2VkKHApO1xufVxuXG4vLyBTaW1vbiBUYXRoYW0ncyBsaW5rZWQgbGlzdCBtZXJnZSBzb3J0IGFsZ29yaXRobVxuLy8gaHR0cDovL3d3dy5jaGlhcmsuZ3JlZW5lbmQub3JnLnVrL35zZ3RhdGhhbS9hbGdvcml0aG1zL2xpc3Rzb3J0Lmh0bWxcbmZ1bmN0aW9uIHNvcnRMaW5rZWQobGlzdCkge1xuICAgIHZhciBpLCBwLCBxLCBlLCB0YWlsLCBudW1NZXJnZXMsIHBTaXplLCBxU2l6ZSxcbiAgICAgICAgaW5TaXplID0gMTtcblxuICAgIGRvIHtcbiAgICAgICAgcCA9IGxpc3Q7XG4gICAgICAgIGxpc3QgPSBudWxsO1xuICAgICAgICB0YWlsID0gbnVsbDtcbiAgICAgICAgbnVtTWVyZ2VzID0gMDtcblxuICAgICAgICB3aGlsZSAocCkge1xuICAgICAgICAgICAgbnVtTWVyZ2VzKys7XG4gICAgICAgICAgICBxID0gcDtcbiAgICAgICAgICAgIHBTaXplID0gMDtcbiAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBpblNpemU7IGkrKykge1xuICAgICAgICAgICAgICAgIHBTaXplKys7XG4gICAgICAgICAgICAgICAgcSA9IHEubmV4dFo7XG4gICAgICAgICAgICAgICAgaWYgKCFxKSBicmVhaztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcVNpemUgPSBpblNpemU7XG5cbiAgICAgICAgICAgIHdoaWxlIChwU2l6ZSA+IDAgfHwgKHFTaXplID4gMCAmJiBxKSkge1xuXG4gICAgICAgICAgICAgICAgaWYgKHBTaXplID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIGUgPSBxO1xuICAgICAgICAgICAgICAgICAgICBxID0gcS5uZXh0WjtcbiAgICAgICAgICAgICAgICAgICAgcVNpemUtLTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHFTaXplID09PSAwIHx8ICFxKSB7XG4gICAgICAgICAgICAgICAgICAgIGUgPSBwO1xuICAgICAgICAgICAgICAgICAgICBwID0gcC5uZXh0WjtcbiAgICAgICAgICAgICAgICAgICAgcFNpemUtLTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHAueiA8PSBxLnopIHtcbiAgICAgICAgICAgICAgICAgICAgZSA9IHA7XG4gICAgICAgICAgICAgICAgICAgIHAgPSBwLm5leHRaO1xuICAgICAgICAgICAgICAgICAgICBwU2l6ZS0tO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGUgPSBxO1xuICAgICAgICAgICAgICAgICAgICBxID0gcS5uZXh0WjtcbiAgICAgICAgICAgICAgICAgICAgcVNpemUtLTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAodGFpbCkgdGFpbC5uZXh0WiA9IGU7XG4gICAgICAgICAgICAgICAgZWxzZSBsaXN0ID0gZTtcblxuICAgICAgICAgICAgICAgIGUucHJldlogPSB0YWlsO1xuICAgICAgICAgICAgICAgIHRhaWwgPSBlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBwID0gcTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRhaWwubmV4dFogPSBudWxsO1xuICAgICAgICBpblNpemUgKj0gMjtcblxuICAgIH0gd2hpbGUgKG51bU1lcmdlcyA+IDEpO1xuXG4gICAgcmV0dXJuIGxpc3Q7XG59XG5cbi8vIHotb3JkZXIgb2YgYSBwb2ludCBnaXZlbiBjb29yZHMgYW5kIHNpemUgb2YgdGhlIGRhdGEgYm91bmRpbmcgYm94XG5mdW5jdGlvbiB6T3JkZXIoeCwgeSwgbWluWCwgbWluWSwgc2l6ZSkge1xuICAgIC8vIGNvb3JkcyBhcmUgdHJhbnNmb3JtZWQgaW50byBub24tbmVnYXRpdmUgMTUtYml0IGludGVnZXIgcmFuZ2VcbiAgICB4ID0gMzI3NjcgKiAoeCAtIG1pblgpIC8gc2l6ZTtcbiAgICB5ID0gMzI3NjcgKiAoeSAtIG1pblkpIC8gc2l6ZTtcblxuICAgIHggPSAoeCB8ICh4IDw8IDgpKSAmIDB4MDBGRjAwRkY7XG4gICAgeCA9ICh4IHwgKHggPDwgNCkpICYgMHgwRjBGMEYwRjtcbiAgICB4ID0gKHggfCAoeCA8PCAyKSkgJiAweDMzMzMzMzMzO1xuICAgIHggPSAoeCB8ICh4IDw8IDEpKSAmIDB4NTU1NTU1NTU7XG5cbiAgICB5ID0gKHkgfCAoeSA8PCA4KSkgJiAweDAwRkYwMEZGO1xuICAgIHkgPSAoeSB8ICh5IDw8IDQpKSAmIDB4MEYwRjBGMEY7XG4gICAgeSA9ICh5IHwgKHkgPDwgMikpICYgMHgzMzMzMzMzMztcbiAgICB5ID0gKHkgfCAoeSA8PCAxKSkgJiAweDU1NTU1NTU1O1xuXG4gICAgcmV0dXJuIHggfCAoeSA8PCAxKTtcbn1cblxuLy8gZmluZCB0aGUgbGVmdG1vc3Qgbm9kZSBvZiBhIHBvbHlnb24gcmluZ1xuZnVuY3Rpb24gZ2V0TGVmdG1vc3Qoc3RhcnQpIHtcbiAgICB2YXIgcCA9IHN0YXJ0LFxuICAgICAgICBsZWZ0bW9zdCA9IHN0YXJ0O1xuICAgIGRvIHtcbiAgICAgICAgaWYgKHAueCA8IGxlZnRtb3N0LngpIGxlZnRtb3N0ID0gcDtcbiAgICAgICAgcCA9IHAubmV4dDtcbiAgICB9IHdoaWxlIChwICE9PSBzdGFydCk7XG5cbiAgICByZXR1cm4gbGVmdG1vc3Q7XG59XG5cbi8vIGNoZWNrIGlmIGEgcG9pbnQgbGllcyB3aXRoaW4gYSBjb252ZXggdHJpYW5nbGVcbmZ1bmN0aW9uIHBvaW50SW5UcmlhbmdsZShheCwgYXksIGJ4LCBieSwgY3gsIGN5LCBweCwgcHkpIHtcbiAgICByZXR1cm4gKGN4IC0gcHgpICogKGF5IC0gcHkpIC0gKGF4IC0gcHgpICogKGN5IC0gcHkpID49IDAgJiZcbiAgICAgICAgICAgKGF4IC0gcHgpICogKGJ5IC0gcHkpIC0gKGJ4IC0gcHgpICogKGF5IC0gcHkpID49IDAgJiZcbiAgICAgICAgICAgKGJ4IC0gcHgpICogKGN5IC0gcHkpIC0gKGN4IC0gcHgpICogKGJ5IC0gcHkpID49IDA7XG59XG5cbi8vIGNoZWNrIGlmIGEgZGlhZ29uYWwgYmV0d2VlbiB0d28gcG9seWdvbiBub2RlcyBpcyB2YWxpZCAobGllcyBpbiBwb2x5Z29uIGludGVyaW9yKVxuZnVuY3Rpb24gaXNWYWxpZERpYWdvbmFsKGEsIGIpIHtcbiAgICByZXR1cm4gZXF1YWxzKGEsIGIpIHx8IGEubmV4dC5pICE9PSBiLmkgJiYgYS5wcmV2LmkgIT09IGIuaSAmJiAhaW50ZXJzZWN0c1BvbHlnb24oYSwgYikgJiZcbiAgICAgICAgICAgbG9jYWxseUluc2lkZShhLCBiKSAmJiBsb2NhbGx5SW5zaWRlKGIsIGEpICYmIG1pZGRsZUluc2lkZShhLCBiKTtcbn1cblxuLy8gc2lnbmVkIGFyZWEgb2YgYSB0cmlhbmdsZVxuZnVuY3Rpb24gYXJlYShwLCBxLCByKSB7XG4gICAgcmV0dXJuIChxLnkgLSBwLnkpICogKHIueCAtIHEueCkgLSAocS54IC0gcC54KSAqIChyLnkgLSBxLnkpO1xufVxuXG4vLyBjaGVjayBpZiB0d28gcG9pbnRzIGFyZSBlcXVhbFxuZnVuY3Rpb24gZXF1YWxzKHAxLCBwMikge1xuICAgIHJldHVybiBwMS54ID09PSBwMi54ICYmIHAxLnkgPT09IHAyLnk7XG59XG5cbi8vIGNoZWNrIGlmIHR3byBzZWdtZW50cyBpbnRlcnNlY3RcbmZ1bmN0aW9uIGludGVyc2VjdHMocDEsIHExLCBwMiwgcTIpIHtcbiAgICByZXR1cm4gYXJlYShwMSwgcTEsIHAyKSA+IDAgIT09IGFyZWEocDEsIHExLCBxMikgPiAwICYmXG4gICAgICAgICAgIGFyZWEocDIsIHEyLCBwMSkgPiAwICE9PSBhcmVhKHAyLCBxMiwgcTEpID4gMDtcbn1cblxuLy8gY2hlY2sgaWYgYSBwb2x5Z29uIGRpYWdvbmFsIGludGVyc2VjdHMgYW55IHBvbHlnb24gc2VnbWVudHNcbmZ1bmN0aW9uIGludGVyc2VjdHNQb2x5Z29uKGEsIGIpIHtcbiAgICB2YXIgcCA9IGE7XG4gICAgZG8ge1xuICAgICAgICBpZiAocC5pICE9PSBhLmkgJiYgcC5uZXh0LmkgIT09IGEuaSAmJiBwLmkgIT09IGIuaSAmJiBwLm5leHQuaSAhPT0gYi5pICYmXG4gICAgICAgICAgICAgICAgaW50ZXJzZWN0cyhwLCBwLm5leHQsIGEsIGIpKSByZXR1cm4gdHJ1ZTtcbiAgICAgICAgcCA9IHAubmV4dDtcbiAgICB9IHdoaWxlIChwICE9PSBhKTtcblxuICAgIHJldHVybiBmYWxzZTtcbn1cblxuLy8gY2hlY2sgaWYgYSBwb2x5Z29uIGRpYWdvbmFsIGlzIGxvY2FsbHkgaW5zaWRlIHRoZSBwb2x5Z29uXG5mdW5jdGlvbiBsb2NhbGx5SW5zaWRlKGEsIGIpIHtcbiAgICByZXR1cm4gYXJlYShhLnByZXYsIGEsIGEubmV4dCkgPCAwID9cbiAgICAgICAgYXJlYShhLCBiLCBhLm5leHQpID49IDAgJiYgYXJlYShhLCBhLnByZXYsIGIpID49IDAgOlxuICAgICAgICBhcmVhKGEsIGIsIGEucHJldikgPCAwIHx8IGFyZWEoYSwgYS5uZXh0LCBiKSA8IDA7XG59XG5cbi8vIGNoZWNrIGlmIHRoZSBtaWRkbGUgcG9pbnQgb2YgYSBwb2x5Z29uIGRpYWdvbmFsIGlzIGluc2lkZSB0aGUgcG9seWdvblxuZnVuY3Rpb24gbWlkZGxlSW5zaWRlKGEsIGIpIHtcbiAgICB2YXIgcCA9IGEsXG4gICAgICAgIGluc2lkZSA9IGZhbHNlLFxuICAgICAgICBweCA9IChhLnggKyBiLngpIC8gMixcbiAgICAgICAgcHkgPSAoYS55ICsgYi55KSAvIDI7XG4gICAgZG8ge1xuICAgICAgICBpZiAoKChwLnkgPiBweSkgIT09IChwLm5leHQueSA+IHB5KSkgJiYgKHB4IDwgKHAubmV4dC54IC0gcC54KSAqIChweSAtIHAueSkgLyAocC5uZXh0LnkgLSBwLnkpICsgcC54KSlcbiAgICAgICAgICAgIGluc2lkZSA9ICFpbnNpZGU7XG4gICAgICAgIHAgPSBwLm5leHQ7XG4gICAgfSB3aGlsZSAocCAhPT0gYSk7XG5cbiAgICByZXR1cm4gaW5zaWRlO1xufVxuXG4vLyBsaW5rIHR3byBwb2x5Z29uIHZlcnRpY2VzIHdpdGggYSBicmlkZ2U7IGlmIHRoZSB2ZXJ0aWNlcyBiZWxvbmcgdG8gdGhlIHNhbWUgcmluZywgaXQgc3BsaXRzIHBvbHlnb24gaW50byB0d287XG4vLyBpZiBvbmUgYmVsb25ncyB0byB0aGUgb3V0ZXIgcmluZyBhbmQgYW5vdGhlciB0byBhIGhvbGUsIGl0IG1lcmdlcyBpdCBpbnRvIGEgc2luZ2xlIHJpbmdcbmZ1bmN0aW9uIHNwbGl0UG9seWdvbihhLCBiKSB7XG4gICAgdmFyIGEyID0gbmV3IE5vZGUoYS5pLCBhLngsIGEueSksXG4gICAgICAgIGIyID0gbmV3IE5vZGUoYi5pLCBiLngsIGIueSksXG4gICAgICAgIGFuID0gYS5uZXh0LFxuICAgICAgICBicCA9IGIucHJldjtcblxuICAgIGEubmV4dCA9IGI7XG4gICAgYi5wcmV2ID0gYTtcblxuICAgIGEyLm5leHQgPSBhbjtcbiAgICBhbi5wcmV2ID0gYTI7XG5cbiAgICBiMi5uZXh0ID0gYTI7XG4gICAgYTIucHJldiA9IGIyO1xuXG4gICAgYnAubmV4dCA9IGIyO1xuICAgIGIyLnByZXYgPSBicDtcblxuICAgIHJldHVybiBiMjtcbn1cblxuLy8gY3JlYXRlIGEgbm9kZSBhbmQgb3B0aW9uYWxseSBsaW5rIGl0IHdpdGggcHJldmlvdXMgb25lIChpbiBhIGNpcmN1bGFyIGRvdWJseSBsaW5rZWQgbGlzdClcbmZ1bmN0aW9uIGluc2VydE5vZGUoaSwgeCwgeSwgbGFzdCkge1xuICAgIHZhciBwID0gbmV3IE5vZGUoaSwgeCwgeSk7XG5cbiAgICBpZiAoIWxhc3QpIHtcbiAgICAgICAgcC5wcmV2ID0gcDtcbiAgICAgICAgcC5uZXh0ID0gcDtcblxuICAgIH0gZWxzZSB7XG4gICAgICAgIHAubmV4dCA9IGxhc3QubmV4dDtcbiAgICAgICAgcC5wcmV2ID0gbGFzdDtcbiAgICAgICAgbGFzdC5uZXh0LnByZXYgPSBwO1xuICAgICAgICBsYXN0Lm5leHQgPSBwO1xuICAgIH1cbiAgICByZXR1cm4gcDtcbn1cblxuZnVuY3Rpb24gcmVtb3ZlTm9kZShwKSB7XG4gICAgcC5uZXh0LnByZXYgPSBwLnByZXY7XG4gICAgcC5wcmV2Lm5leHQgPSBwLm5leHQ7XG5cbiAgICBpZiAocC5wcmV2WikgcC5wcmV2Wi5uZXh0WiA9IHAubmV4dFo7XG4gICAgaWYgKHAubmV4dFopIHAubmV4dFoucHJldlogPSBwLnByZXZaO1xufVxuXG5mdW5jdGlvbiBOb2RlKGksIHgsIHkpIHtcbiAgICAvLyB2ZXJ0aWNlIGluZGV4IGluIGNvb3JkaW5hdGVzIGFycmF5XG4gICAgdGhpcy5pID0gaTtcblxuICAgIC8vIHZlcnRleCBjb29yZGluYXRlc1xuICAgIHRoaXMueCA9IHg7XG4gICAgdGhpcy55ID0geTtcblxuICAgIC8vIHByZXZpb3VzIGFuZCBuZXh0IHZlcnRpY2Ugbm9kZXMgaW4gYSBwb2x5Z29uIHJpbmdcbiAgICB0aGlzLnByZXYgPSBudWxsO1xuICAgIHRoaXMubmV4dCA9IG51bGw7XG5cbiAgICAvLyB6LW9yZGVyIGN1cnZlIHZhbHVlXG4gICAgdGhpcy56ID0gbnVsbDtcblxuICAgIC8vIHByZXZpb3VzIGFuZCBuZXh0IG5vZGVzIGluIHotb3JkZXJcbiAgICB0aGlzLnByZXZaID0gbnVsbDtcbiAgICB0aGlzLm5leHRaID0gbnVsbDtcblxuICAgIC8vIGluZGljYXRlcyB3aGV0aGVyIHRoaXMgaXMgYSBzdGVpbmVyIHBvaW50XG4gICAgdGhpcy5zdGVpbmVyID0gZmFsc2U7XG59XG4iLCIndXNlIHN0cmljdCc7XG5cbi8vXG4vLyBXZSBzdG9yZSBvdXIgRUUgb2JqZWN0cyBpbiBhIHBsYWluIG9iamVjdCB3aG9zZSBwcm9wZXJ0aWVzIGFyZSBldmVudCBuYW1lcy5cbi8vIElmIGBPYmplY3QuY3JlYXRlKG51bGwpYCBpcyBub3Qgc3VwcG9ydGVkIHdlIHByZWZpeCB0aGUgZXZlbnQgbmFtZXMgd2l0aCBhXG4vLyBgfmAgdG8gbWFrZSBzdXJlIHRoYXQgdGhlIGJ1aWx0LWluIG9iamVjdCBwcm9wZXJ0aWVzIGFyZSBub3Qgb3ZlcnJpZGRlbiBvclxuLy8gdXNlZCBhcyBhbiBhdHRhY2sgdmVjdG9yLlxuLy8gV2UgYWxzbyBhc3N1bWUgdGhhdCBgT2JqZWN0LmNyZWF0ZShudWxsKWAgaXMgYXZhaWxhYmxlIHdoZW4gdGhlIGV2ZW50IG5hbWVcbi8vIGlzIGFuIEVTNiBTeW1ib2wuXG4vL1xudmFyIHByZWZpeCA9IHR5cGVvZiBPYmplY3QuY3JlYXRlICE9PSAnZnVuY3Rpb24nID8gJ34nIDogZmFsc2U7XG5cbi8qKlxuICogUmVwcmVzZW50YXRpb24gb2YgYSBzaW5nbGUgRXZlbnRFbWl0dGVyIGZ1bmN0aW9uLlxuICpcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZuIEV2ZW50IGhhbmRsZXIgdG8gYmUgY2FsbGVkLlxuICogQHBhcmFtIHtNaXhlZH0gY29udGV4dCBDb250ZXh0IGZvciBmdW5jdGlvbiBleGVjdXRpb24uXG4gKiBAcGFyYW0ge0Jvb2xlYW59IG9uY2UgT25seSBlbWl0IG9uY2VcbiAqIEBhcGkgcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBFRShmbiwgY29udGV4dCwgb25jZSkge1xuICB0aGlzLmZuID0gZm47XG4gIHRoaXMuY29udGV4dCA9IGNvbnRleHQ7XG4gIHRoaXMub25jZSA9IG9uY2UgfHwgZmFsc2U7XG59XG5cbi8qKlxuICogTWluaW1hbCBFdmVudEVtaXR0ZXIgaW50ZXJmYWNlIHRoYXQgaXMgbW9sZGVkIGFnYWluc3QgdGhlIE5vZGUuanNcbiAqIEV2ZW50RW1pdHRlciBpbnRlcmZhY2UuXG4gKlxuICogQGNvbnN0cnVjdG9yXG4gKiBAYXBpIHB1YmxpY1xuICovXG5mdW5jdGlvbiBFdmVudEVtaXR0ZXIoKSB7IC8qIE5vdGhpbmcgdG8gc2V0ICovIH1cblxuLyoqXG4gKiBIb2xkcyB0aGUgYXNzaWduZWQgRXZlbnRFbWl0dGVycyBieSBuYW1lLlxuICpcbiAqIEB0eXBlIHtPYmplY3R9XG4gKiBAcHJpdmF0ZVxuICovXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLl9ldmVudHMgPSB1bmRlZmluZWQ7XG5cbi8qKlxuICogUmV0dXJuIGEgbGlzdCBvZiBhc3NpZ25lZCBldmVudCBsaXN0ZW5lcnMuXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IGV2ZW50IFRoZSBldmVudHMgdGhhdCBzaG91bGQgYmUgbGlzdGVkLlxuICogQHBhcmFtIHtCb29sZWFufSBleGlzdHMgV2Ugb25seSBuZWVkIHRvIGtub3cgaWYgdGhlcmUgYXJlIGxpc3RlbmVycy5cbiAqIEByZXR1cm5zIHtBcnJheXxCb29sZWFufVxuICogQGFwaSBwdWJsaWNcbiAqL1xuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5saXN0ZW5lcnMgPSBmdW5jdGlvbiBsaXN0ZW5lcnMoZXZlbnQsIGV4aXN0cykge1xuICB2YXIgZXZ0ID0gcHJlZml4ID8gcHJlZml4ICsgZXZlbnQgOiBldmVudFxuICAgICwgYXZhaWxhYmxlID0gdGhpcy5fZXZlbnRzICYmIHRoaXMuX2V2ZW50c1tldnRdO1xuXG4gIGlmIChleGlzdHMpIHJldHVybiAhIWF2YWlsYWJsZTtcbiAgaWYgKCFhdmFpbGFibGUpIHJldHVybiBbXTtcbiAgaWYgKGF2YWlsYWJsZS5mbikgcmV0dXJuIFthdmFpbGFibGUuZm5dO1xuXG4gIGZvciAodmFyIGkgPSAwLCBsID0gYXZhaWxhYmxlLmxlbmd0aCwgZWUgPSBuZXcgQXJyYXkobCk7IGkgPCBsOyBpKyspIHtcbiAgICBlZVtpXSA9IGF2YWlsYWJsZVtpXS5mbjtcbiAgfVxuXG4gIHJldHVybiBlZTtcbn07XG5cbi8qKlxuICogRW1pdCBhbiBldmVudCB0byBhbGwgcmVnaXN0ZXJlZCBldmVudCBsaXN0ZW5lcnMuXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IGV2ZW50IFRoZSBuYW1lIG9mIHRoZSBldmVudC5cbiAqIEByZXR1cm5zIHtCb29sZWFufSBJbmRpY2F0aW9uIGlmIHdlJ3ZlIGVtaXR0ZWQgYW4gZXZlbnQuXG4gKiBAYXBpIHB1YmxpY1xuICovXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLmVtaXQgPSBmdW5jdGlvbiBlbWl0KGV2ZW50LCBhMSwgYTIsIGEzLCBhNCwgYTUpIHtcbiAgdmFyIGV2dCA9IHByZWZpeCA/IHByZWZpeCArIGV2ZW50IDogZXZlbnQ7XG5cbiAgaWYgKCF0aGlzLl9ldmVudHMgfHwgIXRoaXMuX2V2ZW50c1tldnRdKSByZXR1cm4gZmFsc2U7XG5cbiAgdmFyIGxpc3RlbmVycyA9IHRoaXMuX2V2ZW50c1tldnRdXG4gICAgLCBsZW4gPSBhcmd1bWVudHMubGVuZ3RoXG4gICAgLCBhcmdzXG4gICAgLCBpO1xuXG4gIGlmICgnZnVuY3Rpb24nID09PSB0eXBlb2YgbGlzdGVuZXJzLmZuKSB7XG4gICAgaWYgKGxpc3RlbmVycy5vbmNlKSB0aGlzLnJlbW92ZUxpc3RlbmVyKGV2ZW50LCBsaXN0ZW5lcnMuZm4sIHVuZGVmaW5lZCwgdHJ1ZSk7XG5cbiAgICBzd2l0Y2ggKGxlbikge1xuICAgICAgY2FzZSAxOiByZXR1cm4gbGlzdGVuZXJzLmZuLmNhbGwobGlzdGVuZXJzLmNvbnRleHQpLCB0cnVlO1xuICAgICAgY2FzZSAyOiByZXR1cm4gbGlzdGVuZXJzLmZuLmNhbGwobGlzdGVuZXJzLmNvbnRleHQsIGExKSwgdHJ1ZTtcbiAgICAgIGNhc2UgMzogcmV0dXJuIGxpc3RlbmVycy5mbi5jYWxsKGxpc3RlbmVycy5jb250ZXh0LCBhMSwgYTIpLCB0cnVlO1xuICAgICAgY2FzZSA0OiByZXR1cm4gbGlzdGVuZXJzLmZuLmNhbGwobGlzdGVuZXJzLmNvbnRleHQsIGExLCBhMiwgYTMpLCB0cnVlO1xuICAgICAgY2FzZSA1OiByZXR1cm4gbGlzdGVuZXJzLmZuLmNhbGwobGlzdGVuZXJzLmNvbnRleHQsIGExLCBhMiwgYTMsIGE0KSwgdHJ1ZTtcbiAgICAgIGNhc2UgNjogcmV0dXJuIGxpc3RlbmVycy5mbi5jYWxsKGxpc3RlbmVycy5jb250ZXh0LCBhMSwgYTIsIGEzLCBhNCwgYTUpLCB0cnVlO1xuICAgIH1cblxuICAgIGZvciAoaSA9IDEsIGFyZ3MgPSBuZXcgQXJyYXkobGVuIC0xKTsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICBhcmdzW2kgLSAxXSA9IGFyZ3VtZW50c1tpXTtcbiAgICB9XG5cbiAgICBsaXN0ZW5lcnMuZm4uYXBwbHkobGlzdGVuZXJzLmNvbnRleHQsIGFyZ3MpO1xuICB9IGVsc2Uge1xuICAgIHZhciBsZW5ndGggPSBsaXN0ZW5lcnMubGVuZ3RoXG4gICAgICAsIGo7XG5cbiAgICBmb3IgKGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmIChsaXN0ZW5lcnNbaV0ub25jZSkgdGhpcy5yZW1vdmVMaXN0ZW5lcihldmVudCwgbGlzdGVuZXJzW2ldLmZuLCB1bmRlZmluZWQsIHRydWUpO1xuXG4gICAgICBzd2l0Y2ggKGxlbikge1xuICAgICAgICBjYXNlIDE6IGxpc3RlbmVyc1tpXS5mbi5jYWxsKGxpc3RlbmVyc1tpXS5jb250ZXh0KTsgYnJlYWs7XG4gICAgICAgIGNhc2UgMjogbGlzdGVuZXJzW2ldLmZuLmNhbGwobGlzdGVuZXJzW2ldLmNvbnRleHQsIGExKTsgYnJlYWs7XG4gICAgICAgIGNhc2UgMzogbGlzdGVuZXJzW2ldLmZuLmNhbGwobGlzdGVuZXJzW2ldLmNvbnRleHQsIGExLCBhMik7IGJyZWFrO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIGlmICghYXJncykgZm9yIChqID0gMSwgYXJncyA9IG5ldyBBcnJheShsZW4gLTEpOyBqIDwgbGVuOyBqKyspIHtcbiAgICAgICAgICAgIGFyZ3NbaiAtIDFdID0gYXJndW1lbnRzW2pdO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGxpc3RlbmVyc1tpXS5mbi5hcHBseShsaXN0ZW5lcnNbaV0uY29udGV4dCwgYXJncyk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHRydWU7XG59O1xuXG4vKipcbiAqIFJlZ2lzdGVyIGEgbmV3IEV2ZW50TGlzdGVuZXIgZm9yIHRoZSBnaXZlbiBldmVudC5cbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gZXZlbnQgTmFtZSBvZiB0aGUgZXZlbnQuXG4gKiBAcGFyYW0ge0Z1bmN0b259IGZuIENhbGxiYWNrIGZ1bmN0aW9uLlxuICogQHBhcmFtIHtNaXhlZH0gY29udGV4dCBUaGUgY29udGV4dCBvZiB0aGUgZnVuY3Rpb24uXG4gKiBAYXBpIHB1YmxpY1xuICovXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLm9uID0gZnVuY3Rpb24gb24oZXZlbnQsIGZuLCBjb250ZXh0KSB7XG4gIHZhciBsaXN0ZW5lciA9IG5ldyBFRShmbiwgY29udGV4dCB8fCB0aGlzKVxuICAgICwgZXZ0ID0gcHJlZml4ID8gcHJlZml4ICsgZXZlbnQgOiBldmVudDtcblxuICBpZiAoIXRoaXMuX2V2ZW50cykgdGhpcy5fZXZlbnRzID0gcHJlZml4ID8ge30gOiBPYmplY3QuY3JlYXRlKG51bGwpO1xuICBpZiAoIXRoaXMuX2V2ZW50c1tldnRdKSB0aGlzLl9ldmVudHNbZXZ0XSA9IGxpc3RlbmVyO1xuICBlbHNlIHtcbiAgICBpZiAoIXRoaXMuX2V2ZW50c1tldnRdLmZuKSB0aGlzLl9ldmVudHNbZXZ0XS5wdXNoKGxpc3RlbmVyKTtcbiAgICBlbHNlIHRoaXMuX2V2ZW50c1tldnRdID0gW1xuICAgICAgdGhpcy5fZXZlbnRzW2V2dF0sIGxpc3RlbmVyXG4gICAgXTtcbiAgfVxuXG4gIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBBZGQgYW4gRXZlbnRMaXN0ZW5lciB0aGF0J3Mgb25seSBjYWxsZWQgb25jZS5cbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gZXZlbnQgTmFtZSBvZiB0aGUgZXZlbnQuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmbiBDYWxsYmFjayBmdW5jdGlvbi5cbiAqIEBwYXJhbSB7TWl4ZWR9IGNvbnRleHQgVGhlIGNvbnRleHQgb2YgdGhlIGZ1bmN0aW9uLlxuICogQGFwaSBwdWJsaWNcbiAqL1xuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5vbmNlID0gZnVuY3Rpb24gb25jZShldmVudCwgZm4sIGNvbnRleHQpIHtcbiAgdmFyIGxpc3RlbmVyID0gbmV3IEVFKGZuLCBjb250ZXh0IHx8IHRoaXMsIHRydWUpXG4gICAgLCBldnQgPSBwcmVmaXggPyBwcmVmaXggKyBldmVudCA6IGV2ZW50O1xuXG4gIGlmICghdGhpcy5fZXZlbnRzKSB0aGlzLl9ldmVudHMgPSBwcmVmaXggPyB7fSA6IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gIGlmICghdGhpcy5fZXZlbnRzW2V2dF0pIHRoaXMuX2V2ZW50c1tldnRdID0gbGlzdGVuZXI7XG4gIGVsc2Uge1xuICAgIGlmICghdGhpcy5fZXZlbnRzW2V2dF0uZm4pIHRoaXMuX2V2ZW50c1tldnRdLnB1c2gobGlzdGVuZXIpO1xuICAgIGVsc2UgdGhpcy5fZXZlbnRzW2V2dF0gPSBbXG4gICAgICB0aGlzLl9ldmVudHNbZXZ0XSwgbGlzdGVuZXJcbiAgICBdO1xuICB9XG5cbiAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIFJlbW92ZSBldmVudCBsaXN0ZW5lcnMuXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IGV2ZW50IFRoZSBldmVudCB3ZSB3YW50IHRvIHJlbW92ZS5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZuIFRoZSBsaXN0ZW5lciB0aGF0IHdlIG5lZWQgdG8gZmluZC5cbiAqIEBwYXJhbSB7TWl4ZWR9IGNvbnRleHQgT25seSByZW1vdmUgbGlzdGVuZXJzIG1hdGNoaW5nIHRoaXMgY29udGV4dC5cbiAqIEBwYXJhbSB7Qm9vbGVhbn0gb25jZSBPbmx5IHJlbW92ZSBvbmNlIGxpc3RlbmVycy5cbiAqIEBhcGkgcHVibGljXG4gKi9cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUucmVtb3ZlTGlzdGVuZXIgPSBmdW5jdGlvbiByZW1vdmVMaXN0ZW5lcihldmVudCwgZm4sIGNvbnRleHQsIG9uY2UpIHtcbiAgdmFyIGV2dCA9IHByZWZpeCA/IHByZWZpeCArIGV2ZW50IDogZXZlbnQ7XG5cbiAgaWYgKCF0aGlzLl9ldmVudHMgfHwgIXRoaXMuX2V2ZW50c1tldnRdKSByZXR1cm4gdGhpcztcblxuICB2YXIgbGlzdGVuZXJzID0gdGhpcy5fZXZlbnRzW2V2dF1cbiAgICAsIGV2ZW50cyA9IFtdO1xuXG4gIGlmIChmbikge1xuICAgIGlmIChsaXN0ZW5lcnMuZm4pIHtcbiAgICAgIGlmIChcbiAgICAgICAgICAgbGlzdGVuZXJzLmZuICE9PSBmblxuICAgICAgICB8fCAob25jZSAmJiAhbGlzdGVuZXJzLm9uY2UpXG4gICAgICAgIHx8IChjb250ZXh0ICYmIGxpc3RlbmVycy5jb250ZXh0ICE9PSBjb250ZXh0KVxuICAgICAgKSB7XG4gICAgICAgIGV2ZW50cy5wdXNoKGxpc3RlbmVycyk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGZvciAodmFyIGkgPSAwLCBsZW5ndGggPSBsaXN0ZW5lcnMubGVuZ3RoOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgIGxpc3RlbmVyc1tpXS5mbiAhPT0gZm5cbiAgICAgICAgICB8fCAob25jZSAmJiAhbGlzdGVuZXJzW2ldLm9uY2UpXG4gICAgICAgICAgfHwgKGNvbnRleHQgJiYgbGlzdGVuZXJzW2ldLmNvbnRleHQgIT09IGNvbnRleHQpXG4gICAgICAgICkge1xuICAgICAgICAgIGV2ZW50cy5wdXNoKGxpc3RlbmVyc1tpXSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvL1xuICAvLyBSZXNldCB0aGUgYXJyYXksIG9yIHJlbW92ZSBpdCBjb21wbGV0ZWx5IGlmIHdlIGhhdmUgbm8gbW9yZSBsaXN0ZW5lcnMuXG4gIC8vXG4gIGlmIChldmVudHMubGVuZ3RoKSB7XG4gICAgdGhpcy5fZXZlbnRzW2V2dF0gPSBldmVudHMubGVuZ3RoID09PSAxID8gZXZlbnRzWzBdIDogZXZlbnRzO1xuICB9IGVsc2Uge1xuICAgIGRlbGV0ZSB0aGlzLl9ldmVudHNbZXZ0XTtcbiAgfVxuXG4gIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBSZW1vdmUgYWxsIGxpc3RlbmVycyBvciBvbmx5IHRoZSBsaXN0ZW5lcnMgZm9yIHRoZSBzcGVjaWZpZWQgZXZlbnQuXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IGV2ZW50IFRoZSBldmVudCB3YW50IHRvIHJlbW92ZSBhbGwgbGlzdGVuZXJzIGZvci5cbiAqIEBhcGkgcHVibGljXG4gKi9cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUucmVtb3ZlQWxsTGlzdGVuZXJzID0gZnVuY3Rpb24gcmVtb3ZlQWxsTGlzdGVuZXJzKGV2ZW50KSB7XG4gIGlmICghdGhpcy5fZXZlbnRzKSByZXR1cm4gdGhpcztcblxuICBpZiAoZXZlbnQpIGRlbGV0ZSB0aGlzLl9ldmVudHNbcHJlZml4ID8gcHJlZml4ICsgZXZlbnQgOiBldmVudF07XG4gIGVsc2UgdGhpcy5fZXZlbnRzID0gcHJlZml4ID8ge30gOiBPYmplY3QuY3JlYXRlKG51bGwpO1xuXG4gIHJldHVybiB0aGlzO1xufTtcblxuLy9cbi8vIEFsaWFzIG1ldGhvZHMgbmFtZXMgYmVjYXVzZSBwZW9wbGUgcm9sbCBsaWtlIHRoYXQuXG4vL1xuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5vZmYgPSBFdmVudEVtaXR0ZXIucHJvdG90eXBlLnJlbW92ZUxpc3RlbmVyO1xuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5hZGRMaXN0ZW5lciA9IEV2ZW50RW1pdHRlci5wcm90b3R5cGUub247XG5cbi8vXG4vLyBUaGlzIGZ1bmN0aW9uIGRvZXNuJ3QgYXBwbHkgYW55bW9yZS5cbi8vXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLnNldE1heExpc3RlbmVycyA9IGZ1bmN0aW9uIHNldE1heExpc3RlbmVycygpIHtcbiAgcmV0dXJuIHRoaXM7XG59O1xuXG4vL1xuLy8gRXhwb3NlIHRoZSBwcmVmaXguXG4vL1xuRXZlbnRFbWl0dGVyLnByZWZpeGVkID0gcHJlZml4O1xuXG4vL1xuLy8gRXhwb3NlIHRoZSBtb2R1bGUuXG4vL1xuaWYgKCd1bmRlZmluZWQnICE9PSB0eXBlb2YgbW9kdWxlKSB7XG4gIG1vZHVsZS5leHBvcnRzID0gRXZlbnRFbWl0dGVyO1xufVxuIiwiLyogZXNsaW50LWRpc2FibGUgbm8tdW51c2VkLXZhcnMgKi9cbid1c2Ugc3RyaWN0JztcbnZhciBoYXNPd25Qcm9wZXJ0eSA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7XG52YXIgcHJvcElzRW51bWVyYWJsZSA9IE9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGU7XG5cbmZ1bmN0aW9uIHRvT2JqZWN0KHZhbCkge1xuXHRpZiAodmFsID09PSBudWxsIHx8IHZhbCA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0dGhyb3cgbmV3IFR5cGVFcnJvcignT2JqZWN0LmFzc2lnbiBjYW5ub3QgYmUgY2FsbGVkIHdpdGggbnVsbCBvciB1bmRlZmluZWQnKTtcblx0fVxuXG5cdHJldHVybiBPYmplY3QodmFsKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQsIHNvdXJjZSkge1xuXHR2YXIgZnJvbTtcblx0dmFyIHRvID0gdG9PYmplY3QodGFyZ2V0KTtcblx0dmFyIHN5bWJvbHM7XG5cblx0Zm9yICh2YXIgcyA9IDE7IHMgPCBhcmd1bWVudHMubGVuZ3RoOyBzKyspIHtcblx0XHRmcm9tID0gT2JqZWN0KGFyZ3VtZW50c1tzXSk7XG5cblx0XHRmb3IgKHZhciBrZXkgaW4gZnJvbSkge1xuXHRcdFx0aWYgKGhhc093blByb3BlcnR5LmNhbGwoZnJvbSwga2V5KSkge1xuXHRcdFx0XHR0b1trZXldID0gZnJvbVtrZXldO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7XG5cdFx0XHRzeW1ib2xzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhmcm9tKTtcblx0XHRcdGZvciAodmFyIGkgPSAwOyBpIDwgc3ltYm9scy5sZW5ndGg7IGkrKykge1xuXHRcdFx0XHRpZiAocHJvcElzRW51bWVyYWJsZS5jYWxsKGZyb20sIHN5bWJvbHNbaV0pKSB7XG5cdFx0XHRcdFx0dG9bc3ltYm9sc1tpXV0gPSBmcm9tW3N5bWJvbHNbaV1dO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIHRvO1xufTtcbiIsIi8qIVxuICogYXN5bmNcbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS9jYW9sYW4vYXN5bmNcbiAqXG4gKiBDb3B5cmlnaHQgMjAxMC0yMDE0IENhb2xhbiBNY01haG9uXG4gKiBSZWxlYXNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2VcbiAqL1xuLypqc2hpbnQgb25ldmFyOiBmYWxzZSwgaW5kZW50OjQgKi9cbi8qZ2xvYmFsIHNldEltbWVkaWF0ZTogZmFsc2UsIHNldFRpbWVvdXQ6IGZhbHNlLCBjb25zb2xlOiBmYWxzZSAqL1xuKGZ1bmN0aW9uICgpIHtcblxuICAgIHZhciBhc3luYyA9IHt9O1xuXG4gICAgLy8gZ2xvYmFsIG9uIHRoZSBzZXJ2ZXIsIHdpbmRvdyBpbiB0aGUgYnJvd3NlclxuICAgIHZhciByb290LCBwcmV2aW91c19hc3luYztcblxuICAgIHJvb3QgPSB0aGlzO1xuICAgIGlmIChyb290ICE9IG51bGwpIHtcbiAgICAgIHByZXZpb3VzX2FzeW5jID0gcm9vdC5hc3luYztcbiAgICB9XG5cbiAgICBhc3luYy5ub0NvbmZsaWN0ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByb290LmFzeW5jID0gcHJldmlvdXNfYXN5bmM7XG4gICAgICAgIHJldHVybiBhc3luYztcbiAgICB9O1xuXG4gICAgZnVuY3Rpb24gb25seV9vbmNlKGZuKSB7XG4gICAgICAgIHZhciBjYWxsZWQgPSBmYWxzZTtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgaWYgKGNhbGxlZCkgdGhyb3cgbmV3IEVycm9yKFwiQ2FsbGJhY2sgd2FzIGFscmVhZHkgY2FsbGVkLlwiKTtcbiAgICAgICAgICAgIGNhbGxlZCA9IHRydWU7XG4gICAgICAgICAgICBmbi5hcHBseShyb290LCBhcmd1bWVudHMpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8vLyBjcm9zcy1icm93c2VyIGNvbXBhdGlibGl0eSBmdW5jdGlvbnMgLy8vL1xuXG4gICAgdmFyIF90b1N0cmluZyA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7XG5cbiAgICB2YXIgX2lzQXJyYXkgPSBBcnJheS5pc0FycmF5IHx8IGZ1bmN0aW9uIChvYmopIHtcbiAgICAgICAgcmV0dXJuIF90b1N0cmluZy5jYWxsKG9iaikgPT09ICdbb2JqZWN0IEFycmF5XSc7XG4gICAgfTtcblxuICAgIHZhciBfZWFjaCA9IGZ1bmN0aW9uIChhcnIsIGl0ZXJhdG9yKSB7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXJyLmxlbmd0aDsgaSArPSAxKSB7XG4gICAgICAgICAgICBpdGVyYXRvcihhcnJbaV0sIGksIGFycik7XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgdmFyIF9tYXAgPSBmdW5jdGlvbiAoYXJyLCBpdGVyYXRvcikge1xuICAgICAgICBpZiAoYXJyLm1hcCkge1xuICAgICAgICAgICAgcmV0dXJuIGFyci5tYXAoaXRlcmF0b3IpO1xuICAgICAgICB9XG4gICAgICAgIHZhciByZXN1bHRzID0gW107XG4gICAgICAgIF9lYWNoKGFyciwgZnVuY3Rpb24gKHgsIGksIGEpIHtcbiAgICAgICAgICAgIHJlc3VsdHMucHVzaChpdGVyYXRvcih4LCBpLCBhKSk7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gcmVzdWx0cztcbiAgICB9O1xuXG4gICAgdmFyIF9yZWR1Y2UgPSBmdW5jdGlvbiAoYXJyLCBpdGVyYXRvciwgbWVtbykge1xuICAgICAgICBpZiAoYXJyLnJlZHVjZSkge1xuICAgICAgICAgICAgcmV0dXJuIGFyci5yZWR1Y2UoaXRlcmF0b3IsIG1lbW8pO1xuICAgICAgICB9XG4gICAgICAgIF9lYWNoKGFyciwgZnVuY3Rpb24gKHgsIGksIGEpIHtcbiAgICAgICAgICAgIG1lbW8gPSBpdGVyYXRvcihtZW1vLCB4LCBpLCBhKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBtZW1vO1xuICAgIH07XG5cbiAgICB2YXIgX2tleXMgPSBmdW5jdGlvbiAob2JqKSB7XG4gICAgICAgIGlmIChPYmplY3Qua2V5cykge1xuICAgICAgICAgICAgcmV0dXJuIE9iamVjdC5rZXlzKG9iaik7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIGtleXMgPSBbXTtcbiAgICAgICAgZm9yICh2YXIgayBpbiBvYmopIHtcbiAgICAgICAgICAgIGlmIChvYmouaGFzT3duUHJvcGVydHkoaykpIHtcbiAgICAgICAgICAgICAgICBrZXlzLnB1c2goayk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGtleXM7XG4gICAgfTtcblxuICAgIC8vLy8gZXhwb3J0ZWQgYXN5bmMgbW9kdWxlIGZ1bmN0aW9ucyAvLy8vXG5cbiAgICAvLy8vIG5leHRUaWNrIGltcGxlbWVudGF0aW9uIHdpdGggYnJvd3Nlci1jb21wYXRpYmxlIGZhbGxiYWNrIC8vLy9cbiAgICBpZiAodHlwZW9mIHByb2Nlc3MgPT09ICd1bmRlZmluZWQnIHx8ICEocHJvY2Vzcy5uZXh0VGljaykpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBzZXRJbW1lZGlhdGUgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIGFzeW5jLm5leHRUaWNrID0gZnVuY3Rpb24gKGZuKSB7XG4gICAgICAgICAgICAgICAgLy8gbm90IGEgZGlyZWN0IGFsaWFzIGZvciBJRTEwIGNvbXBhdGliaWxpdHlcbiAgICAgICAgICAgICAgICBzZXRJbW1lZGlhdGUoZm4pO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGFzeW5jLnNldEltbWVkaWF0ZSA9IGFzeW5jLm5leHRUaWNrO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgYXN5bmMubmV4dFRpY2sgPSBmdW5jdGlvbiAoZm4pIHtcbiAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KGZuLCAwKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBhc3luYy5zZXRJbW1lZGlhdGUgPSBhc3luYy5uZXh0VGljaztcbiAgICAgICAgfVxuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgYXN5bmMubmV4dFRpY2sgPSBwcm9jZXNzLm5leHRUaWNrO1xuICAgICAgICBpZiAodHlwZW9mIHNldEltbWVkaWF0ZSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgIGFzeW5jLnNldEltbWVkaWF0ZSA9IGZ1bmN0aW9uIChmbikge1xuICAgICAgICAgICAgICAvLyBub3QgYSBkaXJlY3QgYWxpYXMgZm9yIElFMTAgY29tcGF0aWJpbGl0eVxuICAgICAgICAgICAgICBzZXRJbW1lZGlhdGUoZm4pO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGFzeW5jLnNldEltbWVkaWF0ZSA9IGFzeW5jLm5leHRUaWNrO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgYXN5bmMuZWFjaCA9IGZ1bmN0aW9uIChhcnIsIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICBjYWxsYmFjayA9IGNhbGxiYWNrIHx8IGZ1bmN0aW9uICgpIHt9O1xuICAgICAgICBpZiAoIWFyci5sZW5ndGgpIHtcbiAgICAgICAgICAgIHJldHVybiBjYWxsYmFjaygpO1xuICAgICAgICB9XG4gICAgICAgIHZhciBjb21wbGV0ZWQgPSAwO1xuICAgICAgICBfZWFjaChhcnIsIGZ1bmN0aW9uICh4KSB7XG4gICAgICAgICAgICBpdGVyYXRvcih4LCBvbmx5X29uY2UoZG9uZSkgKTtcbiAgICAgICAgfSk7XG4gICAgICAgIGZ1bmN0aW9uIGRvbmUoZXJyKSB7XG4gICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgICBjYWxsYmFjayA9IGZ1bmN0aW9uICgpIHt9O1xuICAgICAgICAgIH1cbiAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgY29tcGxldGVkICs9IDE7XG4gICAgICAgICAgICAgIGlmIChjb21wbGV0ZWQgPj0gYXJyLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgY2FsbGJhY2soKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH07XG4gICAgYXN5bmMuZm9yRWFjaCA9IGFzeW5jLmVhY2g7XG5cbiAgICBhc3luYy5lYWNoU2VyaWVzID0gZnVuY3Rpb24gKGFyciwgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgIGNhbGxiYWNrID0gY2FsbGJhY2sgfHwgZnVuY3Rpb24gKCkge307XG4gICAgICAgIGlmICghYXJyLmxlbmd0aCkge1xuICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKCk7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIGNvbXBsZXRlZCA9IDA7XG4gICAgICAgIHZhciBpdGVyYXRlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgaXRlcmF0b3IoYXJyW2NvbXBsZXRlZF0sIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrID0gZnVuY3Rpb24gKCkge307XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBjb21wbGV0ZWQgKz0gMTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNvbXBsZXRlZCA+PSBhcnIubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgaXRlcmF0ZSgpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH07XG4gICAgICAgIGl0ZXJhdGUoKTtcbiAgICB9O1xuICAgIGFzeW5jLmZvckVhY2hTZXJpZXMgPSBhc3luYy5lYWNoU2VyaWVzO1xuXG4gICAgYXN5bmMuZWFjaExpbWl0ID0gZnVuY3Rpb24gKGFyciwgbGltaXQsIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICB2YXIgZm4gPSBfZWFjaExpbWl0KGxpbWl0KTtcbiAgICAgICAgZm4uYXBwbHkobnVsbCwgW2FyciwgaXRlcmF0b3IsIGNhbGxiYWNrXSk7XG4gICAgfTtcbiAgICBhc3luYy5mb3JFYWNoTGltaXQgPSBhc3luYy5lYWNoTGltaXQ7XG5cbiAgICB2YXIgX2VhY2hMaW1pdCA9IGZ1bmN0aW9uIChsaW1pdCkge1xuXG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAoYXJyLCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIGNhbGxiYWNrID0gY2FsbGJhY2sgfHwgZnVuY3Rpb24gKCkge307XG4gICAgICAgICAgICBpZiAoIWFyci5sZW5ndGggfHwgbGltaXQgPD0gMCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBjYWxsYmFjaygpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdmFyIGNvbXBsZXRlZCA9IDA7XG4gICAgICAgICAgICB2YXIgc3RhcnRlZCA9IDA7XG4gICAgICAgICAgICB2YXIgcnVubmluZyA9IDA7XG5cbiAgICAgICAgICAgIChmdW5jdGlvbiByZXBsZW5pc2ggKCkge1xuICAgICAgICAgICAgICAgIGlmIChjb21wbGV0ZWQgPj0gYXJyLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gY2FsbGJhY2soKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB3aGlsZSAocnVubmluZyA8IGxpbWl0ICYmIHN0YXJ0ZWQgPCBhcnIubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgIHN0YXJ0ZWQgKz0gMTtcbiAgICAgICAgICAgICAgICAgICAgcnVubmluZyArPSAxO1xuICAgICAgICAgICAgICAgICAgICBpdGVyYXRvcihhcnJbc3RhcnRlZCAtIDFdLCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayA9IGZ1bmN0aW9uICgpIHt9O1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcGxldGVkICs9IDE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcnVubmluZyAtPSAxO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb21wbGV0ZWQgPj0gYXJyLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVwbGVuaXNoKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KSgpO1xuICAgICAgICB9O1xuICAgIH07XG5cblxuICAgIHZhciBkb1BhcmFsbGVsID0gZnVuY3Rpb24gKGZuKSB7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7XG4gICAgICAgICAgICByZXR1cm4gZm4uYXBwbHkobnVsbCwgW2FzeW5jLmVhY2hdLmNvbmNhdChhcmdzKSk7XG4gICAgICAgIH07XG4gICAgfTtcbiAgICB2YXIgZG9QYXJhbGxlbExpbWl0ID0gZnVuY3Rpb24obGltaXQsIGZuKSB7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7XG4gICAgICAgICAgICByZXR1cm4gZm4uYXBwbHkobnVsbCwgW19lYWNoTGltaXQobGltaXQpXS5jb25jYXQoYXJncykpO1xuICAgICAgICB9O1xuICAgIH07XG4gICAgdmFyIGRvU2VyaWVzID0gZnVuY3Rpb24gKGZuKSB7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7XG4gICAgICAgICAgICByZXR1cm4gZm4uYXBwbHkobnVsbCwgW2FzeW5jLmVhY2hTZXJpZXNdLmNvbmNhdChhcmdzKSk7XG4gICAgICAgIH07XG4gICAgfTtcblxuXG4gICAgdmFyIF9hc3luY01hcCA9IGZ1bmN0aW9uIChlYWNoZm4sIGFyciwgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgIGFyciA9IF9tYXAoYXJyLCBmdW5jdGlvbiAoeCwgaSkge1xuICAgICAgICAgICAgcmV0dXJuIHtpbmRleDogaSwgdmFsdWU6IHh9O1xuICAgICAgICB9KTtcbiAgICAgICAgaWYgKCFjYWxsYmFjaykge1xuICAgICAgICAgICAgZWFjaGZuKGFyciwgZnVuY3Rpb24gKHgsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICAgICAgaXRlcmF0b3IoeC52YWx1ZSwgZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB2YXIgcmVzdWx0cyA9IFtdO1xuICAgICAgICAgICAgZWFjaGZuKGFyciwgZnVuY3Rpb24gKHgsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICAgICAgaXRlcmF0b3IoeC52YWx1ZSwgZnVuY3Rpb24gKGVyciwgdikge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHRzW3guaW5kZXhdID0gdjtcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0sIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnIsIHJlc3VsdHMpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIGFzeW5jLm1hcCA9IGRvUGFyYWxsZWwoX2FzeW5jTWFwKTtcbiAgICBhc3luYy5tYXBTZXJpZXMgPSBkb1NlcmllcyhfYXN5bmNNYXApO1xuICAgIGFzeW5jLm1hcExpbWl0ID0gZnVuY3Rpb24gKGFyciwgbGltaXQsIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICByZXR1cm4gX21hcExpbWl0KGxpbWl0KShhcnIsIGl0ZXJhdG9yLCBjYWxsYmFjayk7XG4gICAgfTtcblxuICAgIHZhciBfbWFwTGltaXQgPSBmdW5jdGlvbihsaW1pdCkge1xuICAgICAgICByZXR1cm4gZG9QYXJhbGxlbExpbWl0KGxpbWl0LCBfYXN5bmNNYXApO1xuICAgIH07XG5cbiAgICAvLyByZWR1Y2Ugb25seSBoYXMgYSBzZXJpZXMgdmVyc2lvbiwgYXMgZG9pbmcgcmVkdWNlIGluIHBhcmFsbGVsIHdvbid0XG4gICAgLy8gd29yayBpbiBtYW55IHNpdHVhdGlvbnMuXG4gICAgYXN5bmMucmVkdWNlID0gZnVuY3Rpb24gKGFyciwgbWVtbywgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgIGFzeW5jLmVhY2hTZXJpZXMoYXJyLCBmdW5jdGlvbiAoeCwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIGl0ZXJhdG9yKG1lbW8sIHgsIGZ1bmN0aW9uIChlcnIsIHYpIHtcbiAgICAgICAgICAgICAgICBtZW1vID0gdjtcbiAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgIGNhbGxiYWNrKGVyciwgbWVtbyk7XG4gICAgICAgIH0pO1xuICAgIH07XG4gICAgLy8gaW5qZWN0IGFsaWFzXG4gICAgYXN5bmMuaW5qZWN0ID0gYXN5bmMucmVkdWNlO1xuICAgIC8vIGZvbGRsIGFsaWFzXG4gICAgYXN5bmMuZm9sZGwgPSBhc3luYy5yZWR1Y2U7XG5cbiAgICBhc3luYy5yZWR1Y2VSaWdodCA9IGZ1bmN0aW9uIChhcnIsIG1lbW8sIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICB2YXIgcmV2ZXJzZWQgPSBfbWFwKGFyciwgZnVuY3Rpb24gKHgpIHtcbiAgICAgICAgICAgIHJldHVybiB4O1xuICAgICAgICB9KS5yZXZlcnNlKCk7XG4gICAgICAgIGFzeW5jLnJlZHVjZShyZXZlcnNlZCwgbWVtbywgaXRlcmF0b3IsIGNhbGxiYWNrKTtcbiAgICB9O1xuICAgIC8vIGZvbGRyIGFsaWFzXG4gICAgYXN5bmMuZm9sZHIgPSBhc3luYy5yZWR1Y2VSaWdodDtcblxuICAgIHZhciBfZmlsdGVyID0gZnVuY3Rpb24gKGVhY2hmbiwgYXJyLCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgdmFyIHJlc3VsdHMgPSBbXTtcbiAgICAgICAgYXJyID0gX21hcChhcnIsIGZ1bmN0aW9uICh4LCBpKSB7XG4gICAgICAgICAgICByZXR1cm4ge2luZGV4OiBpLCB2YWx1ZTogeH07XG4gICAgICAgIH0pO1xuICAgICAgICBlYWNoZm4oYXJyLCBmdW5jdGlvbiAoeCwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIGl0ZXJhdG9yKHgudmFsdWUsIGZ1bmN0aW9uICh2KSB7XG4gICAgICAgICAgICAgICAgaWYgKHYpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0cy5wdXNoKHgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgIGNhbGxiYWNrKF9tYXAocmVzdWx0cy5zb3J0KGZ1bmN0aW9uIChhLCBiKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGEuaW5kZXggLSBiLmluZGV4O1xuICAgICAgICAgICAgfSksIGZ1bmN0aW9uICh4KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHgudmFsdWU7XG4gICAgICAgICAgICB9KSk7XG4gICAgICAgIH0pO1xuICAgIH07XG4gICAgYXN5bmMuZmlsdGVyID0gZG9QYXJhbGxlbChfZmlsdGVyKTtcbiAgICBhc3luYy5maWx0ZXJTZXJpZXMgPSBkb1NlcmllcyhfZmlsdGVyKTtcbiAgICAvLyBzZWxlY3QgYWxpYXNcbiAgICBhc3luYy5zZWxlY3QgPSBhc3luYy5maWx0ZXI7XG4gICAgYXN5bmMuc2VsZWN0U2VyaWVzID0gYXN5bmMuZmlsdGVyU2VyaWVzO1xuXG4gICAgdmFyIF9yZWplY3QgPSBmdW5jdGlvbiAoZWFjaGZuLCBhcnIsIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICB2YXIgcmVzdWx0cyA9IFtdO1xuICAgICAgICBhcnIgPSBfbWFwKGFyciwgZnVuY3Rpb24gKHgsIGkpIHtcbiAgICAgICAgICAgIHJldHVybiB7aW5kZXg6IGksIHZhbHVlOiB4fTtcbiAgICAgICAgfSk7XG4gICAgICAgIGVhY2hmbihhcnIsIGZ1bmN0aW9uICh4LCBjYWxsYmFjaykge1xuICAgICAgICAgICAgaXRlcmF0b3IoeC52YWx1ZSwgZnVuY3Rpb24gKHYpIHtcbiAgICAgICAgICAgICAgICBpZiAoIXYpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0cy5wdXNoKHgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgIGNhbGxiYWNrKF9tYXAocmVzdWx0cy5zb3J0KGZ1bmN0aW9uIChhLCBiKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGEuaW5kZXggLSBiLmluZGV4O1xuICAgICAgICAgICAgfSksIGZ1bmN0aW9uICh4KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHgudmFsdWU7XG4gICAgICAgICAgICB9KSk7XG4gICAgICAgIH0pO1xuICAgIH07XG4gICAgYXN5bmMucmVqZWN0ID0gZG9QYXJhbGxlbChfcmVqZWN0KTtcbiAgICBhc3luYy5yZWplY3RTZXJpZXMgPSBkb1NlcmllcyhfcmVqZWN0KTtcblxuICAgIHZhciBfZGV0ZWN0ID0gZnVuY3Rpb24gKGVhY2hmbiwgYXJyLCBpdGVyYXRvciwgbWFpbl9jYWxsYmFjaykge1xuICAgICAgICBlYWNoZm4oYXJyLCBmdW5jdGlvbiAoeCwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIGl0ZXJhdG9yKHgsIGZ1bmN0aW9uIChyZXN1bHQpIHtcbiAgICAgICAgICAgICAgICBpZiAocmVzdWx0KSB7XG4gICAgICAgICAgICAgICAgICAgIG1haW5fY2FsbGJhY2soeCk7XG4gICAgICAgICAgICAgICAgICAgIG1haW5fY2FsbGJhY2sgPSBmdW5jdGlvbiAoKSB7fTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgIG1haW5fY2FsbGJhY2soKTtcbiAgICAgICAgfSk7XG4gICAgfTtcbiAgICBhc3luYy5kZXRlY3QgPSBkb1BhcmFsbGVsKF9kZXRlY3QpO1xuICAgIGFzeW5jLmRldGVjdFNlcmllcyA9IGRvU2VyaWVzKF9kZXRlY3QpO1xuXG4gICAgYXN5bmMuc29tZSA9IGZ1bmN0aW9uIChhcnIsIGl0ZXJhdG9yLCBtYWluX2NhbGxiYWNrKSB7XG4gICAgICAgIGFzeW5jLmVhY2goYXJyLCBmdW5jdGlvbiAoeCwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIGl0ZXJhdG9yKHgsIGZ1bmN0aW9uICh2KSB7XG4gICAgICAgICAgICAgICAgaWYgKHYpIHtcbiAgICAgICAgICAgICAgICAgICAgbWFpbl9jYWxsYmFjayh0cnVlKTtcbiAgICAgICAgICAgICAgICAgICAgbWFpbl9jYWxsYmFjayA9IGZ1bmN0aW9uICgpIHt9O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgIG1haW5fY2FsbGJhY2soZmFsc2UpO1xuICAgICAgICB9KTtcbiAgICB9O1xuICAgIC8vIGFueSBhbGlhc1xuICAgIGFzeW5jLmFueSA9IGFzeW5jLnNvbWU7XG5cbiAgICBhc3luYy5ldmVyeSA9IGZ1bmN0aW9uIChhcnIsIGl0ZXJhdG9yLCBtYWluX2NhbGxiYWNrKSB7XG4gICAgICAgIGFzeW5jLmVhY2goYXJyLCBmdW5jdGlvbiAoeCwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIGl0ZXJhdG9yKHgsIGZ1bmN0aW9uICh2KSB7XG4gICAgICAgICAgICAgICAgaWYgKCF2KSB7XG4gICAgICAgICAgICAgICAgICAgIG1haW5fY2FsbGJhY2soZmFsc2UpO1xuICAgICAgICAgICAgICAgICAgICBtYWluX2NhbGxiYWNrID0gZnVuY3Rpb24gKCkge307XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhbGxiYWNrKCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSwgZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgbWFpbl9jYWxsYmFjayh0cnVlKTtcbiAgICAgICAgfSk7XG4gICAgfTtcbiAgICAvLyBhbGwgYWxpYXNcbiAgICBhc3luYy5hbGwgPSBhc3luYy5ldmVyeTtcblxuICAgIGFzeW5jLnNvcnRCeSA9IGZ1bmN0aW9uIChhcnIsIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICBhc3luYy5tYXAoYXJyLCBmdW5jdGlvbiAoeCwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIGl0ZXJhdG9yKHgsIGZ1bmN0aW9uIChlcnIsIGNyaXRlcmlhKSB7XG4gICAgICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2sobnVsbCwge3ZhbHVlOiB4LCBjcml0ZXJpYTogY3JpdGVyaWF9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSwgZnVuY3Rpb24gKGVyciwgcmVzdWx0cykge1xuICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAgIHJldHVybiBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgdmFyIGZuID0gZnVuY3Rpb24gKGxlZnQsIHJpZ2h0KSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBhID0gbGVmdC5jcml0ZXJpYSwgYiA9IHJpZ2h0LmNyaXRlcmlhO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYSA8IGIgPyAtMSA6IGEgPiBiID8gMSA6IDA7XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICBjYWxsYmFjayhudWxsLCBfbWFwKHJlc3VsdHMuc29ydChmbiksIGZ1bmN0aW9uICh4KSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB4LnZhbHVlO1xuICAgICAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfTtcblxuICAgIGFzeW5jLmF1dG8gPSBmdW5jdGlvbiAodGFza3MsIGNhbGxiYWNrKSB7XG4gICAgICAgIGNhbGxiYWNrID0gY2FsbGJhY2sgfHwgZnVuY3Rpb24gKCkge307XG4gICAgICAgIHZhciBrZXlzID0gX2tleXModGFza3MpO1xuICAgICAgICB2YXIgcmVtYWluaW5nVGFza3MgPSBrZXlzLmxlbmd0aFxuICAgICAgICBpZiAoIXJlbWFpbmluZ1Rhc2tzKSB7XG4gICAgICAgICAgICByZXR1cm4gY2FsbGJhY2soKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciByZXN1bHRzID0ge307XG5cbiAgICAgICAgdmFyIGxpc3RlbmVycyA9IFtdO1xuICAgICAgICB2YXIgYWRkTGlzdGVuZXIgPSBmdW5jdGlvbiAoZm4pIHtcbiAgICAgICAgICAgIGxpc3RlbmVycy51bnNoaWZ0KGZuKTtcbiAgICAgICAgfTtcbiAgICAgICAgdmFyIHJlbW92ZUxpc3RlbmVyID0gZnVuY3Rpb24gKGZuKSB7XG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxpc3RlbmVycy5sZW5ndGg7IGkgKz0gMSkge1xuICAgICAgICAgICAgICAgIGlmIChsaXN0ZW5lcnNbaV0gPT09IGZuKSB7XG4gICAgICAgICAgICAgICAgICAgIGxpc3RlbmVycy5zcGxpY2UoaSwgMSk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIHZhciB0YXNrQ29tcGxldGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZW1haW5pbmdUYXNrcy0tXG4gICAgICAgICAgICBfZWFjaChsaXN0ZW5lcnMuc2xpY2UoMCksIGZ1bmN0aW9uIChmbikge1xuICAgICAgICAgICAgICAgIGZuKCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfTtcblxuICAgICAgICBhZGRMaXN0ZW5lcihmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBpZiAoIXJlbWFpbmluZ1Rhc2tzKSB7XG4gICAgICAgICAgICAgICAgdmFyIHRoZUNhbGxiYWNrID0gY2FsbGJhY2s7XG4gICAgICAgICAgICAgICAgLy8gcHJldmVudCBmaW5hbCBjYWxsYmFjayBmcm9tIGNhbGxpbmcgaXRzZWxmIGlmIGl0IGVycm9yc1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrID0gZnVuY3Rpb24gKCkge307XG5cbiAgICAgICAgICAgICAgICB0aGVDYWxsYmFjayhudWxsLCByZXN1bHRzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgX2VhY2goa2V5cywgZnVuY3Rpb24gKGspIHtcbiAgICAgICAgICAgIHZhciB0YXNrID0gX2lzQXJyYXkodGFza3Nba10pID8gdGFza3Nba106IFt0YXNrc1trXV07XG4gICAgICAgICAgICB2YXIgdGFza0NhbGxiYWNrID0gZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgICAgIHZhciBhcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKTtcbiAgICAgICAgICAgICAgICBpZiAoYXJncy5sZW5ndGggPD0gMSkge1xuICAgICAgICAgICAgICAgICAgICBhcmdzID0gYXJnc1swXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAgICAgICB2YXIgc2FmZVJlc3VsdHMgPSB7fTtcbiAgICAgICAgICAgICAgICAgICAgX2VhY2goX2tleXMocmVzdWx0cyksIGZ1bmN0aW9uKHJrZXkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNhZmVSZXN1bHRzW3JrZXldID0gcmVzdWx0c1tya2V5XTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIHNhZmVSZXN1bHRzW2tdID0gYXJncztcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soZXJyLCBzYWZlUmVzdWx0cyk7XG4gICAgICAgICAgICAgICAgICAgIC8vIHN0b3Agc3Vic2VxdWVudCBlcnJvcnMgaGl0dGluZyBjYWxsYmFjayBtdWx0aXBsZSB0aW1lc1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayA9IGZ1bmN0aW9uICgpIHt9O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0c1trXSA9IGFyZ3M7XG4gICAgICAgICAgICAgICAgICAgIGFzeW5jLnNldEltbWVkaWF0ZSh0YXNrQ29tcGxldGUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICB2YXIgcmVxdWlyZXMgPSB0YXNrLnNsaWNlKDAsIE1hdGguYWJzKHRhc2subGVuZ3RoIC0gMSkpIHx8IFtdO1xuICAgICAgICAgICAgdmFyIHJlYWR5ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBfcmVkdWNlKHJlcXVpcmVzLCBmdW5jdGlvbiAoYSwgeCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gKGEgJiYgcmVzdWx0cy5oYXNPd25Qcm9wZXJ0eSh4KSk7XG4gICAgICAgICAgICAgICAgfSwgdHJ1ZSkgJiYgIXJlc3VsdHMuaGFzT3duUHJvcGVydHkoayk7XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgaWYgKHJlYWR5KCkpIHtcbiAgICAgICAgICAgICAgICB0YXNrW3Rhc2subGVuZ3RoIC0gMV0odGFza0NhbGxiYWNrLCByZXN1bHRzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHZhciBsaXN0ZW5lciA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlYWR5KCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlbW92ZUxpc3RlbmVyKGxpc3RlbmVyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRhc2tbdGFzay5sZW5ndGggLSAxXSh0YXNrQ2FsbGJhY2ssIHJlc3VsdHMpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICBhZGRMaXN0ZW5lcihsaXN0ZW5lcik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH07XG5cbiAgICBhc3luYy5yZXRyeSA9IGZ1bmN0aW9uKHRpbWVzLCB0YXNrLCBjYWxsYmFjaykge1xuICAgICAgICB2YXIgREVGQVVMVF9USU1FUyA9IDU7XG4gICAgICAgIHZhciBhdHRlbXB0cyA9IFtdO1xuICAgICAgICAvLyBVc2UgZGVmYXVsdHMgaWYgdGltZXMgbm90IHBhc3NlZFxuICAgICAgICBpZiAodHlwZW9mIHRpbWVzID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICBjYWxsYmFjayA9IHRhc2s7XG4gICAgICAgICAgICB0YXNrID0gdGltZXM7XG4gICAgICAgICAgICB0aW1lcyA9IERFRkFVTFRfVElNRVM7XG4gICAgICAgIH1cbiAgICAgICAgLy8gTWFrZSBzdXJlIHRpbWVzIGlzIGEgbnVtYmVyXG4gICAgICAgIHRpbWVzID0gcGFyc2VJbnQodGltZXMsIDEwKSB8fCBERUZBVUxUX1RJTUVTO1xuICAgICAgICB2YXIgd3JhcHBlZFRhc2sgPSBmdW5jdGlvbih3cmFwcGVkQ2FsbGJhY2ssIHdyYXBwZWRSZXN1bHRzKSB7XG4gICAgICAgICAgICB2YXIgcmV0cnlBdHRlbXB0ID0gZnVuY3Rpb24odGFzaywgZmluYWxBdHRlbXB0KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKHNlcmllc0NhbGxiYWNrKSB7XG4gICAgICAgICAgICAgICAgICAgIHRhc2soZnVuY3Rpb24oZXJyLCByZXN1bHQpe1xuICAgICAgICAgICAgICAgICAgICAgICAgc2VyaWVzQ2FsbGJhY2soIWVyciB8fCBmaW5hbEF0dGVtcHQsIHtlcnI6IGVyciwgcmVzdWx0OiByZXN1bHR9KTtcbiAgICAgICAgICAgICAgICAgICAgfSwgd3JhcHBlZFJlc3VsdHMpO1xuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgd2hpbGUgKHRpbWVzKSB7XG4gICAgICAgICAgICAgICAgYXR0ZW1wdHMucHVzaChyZXRyeUF0dGVtcHQodGFzaywgISh0aW1lcy09MSkpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGFzeW5jLnNlcmllcyhhdHRlbXB0cywgZnVuY3Rpb24oZG9uZSwgZGF0YSl7XG4gICAgICAgICAgICAgICAgZGF0YSA9IGRhdGFbZGF0YS5sZW5ndGggLSAxXTtcbiAgICAgICAgICAgICAgICAod3JhcHBlZENhbGxiYWNrIHx8IGNhbGxiYWNrKShkYXRhLmVyciwgZGF0YS5yZXN1bHQpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gSWYgYSBjYWxsYmFjayBpcyBwYXNzZWQsIHJ1biB0aGlzIGFzIGEgY29udHJvbGwgZmxvd1xuICAgICAgICByZXR1cm4gY2FsbGJhY2sgPyB3cmFwcGVkVGFzaygpIDogd3JhcHBlZFRhc2tcbiAgICB9O1xuXG4gICAgYXN5bmMud2F0ZXJmYWxsID0gZnVuY3Rpb24gKHRhc2tzLCBjYWxsYmFjaykge1xuICAgICAgICBjYWxsYmFjayA9IGNhbGxiYWNrIHx8IGZ1bmN0aW9uICgpIHt9O1xuICAgICAgICBpZiAoIV9pc0FycmF5KHRhc2tzKSkge1xuICAgICAgICAgIHZhciBlcnIgPSBuZXcgRXJyb3IoJ0ZpcnN0IGFyZ3VtZW50IHRvIHdhdGVyZmFsbCBtdXN0IGJlIGFuIGFycmF5IG9mIGZ1bmN0aW9ucycpO1xuICAgICAgICAgIHJldHVybiBjYWxsYmFjayhlcnIpO1xuICAgICAgICB9XG4gICAgICAgIGlmICghdGFza3MubGVuZ3RoKSB7XG4gICAgICAgICAgICByZXR1cm4gY2FsbGJhY2soKTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgd3JhcEl0ZXJhdG9yID0gZnVuY3Rpb24gKGl0ZXJhdG9yKSB7XG4gICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2suYXBwbHkobnVsbCwgYXJndW1lbnRzKTtcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2sgPSBmdW5jdGlvbiAoKSB7fTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBhcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKTtcbiAgICAgICAgICAgICAgICAgICAgdmFyIG5leHQgPSBpdGVyYXRvci5uZXh0KCk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChuZXh0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhcmdzLnB1c2god3JhcEl0ZXJhdG9yKG5leHQpKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3MucHVzaChjYWxsYmFjayk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgYXN5bmMuc2V0SW1tZWRpYXRlKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGl0ZXJhdG9yLmFwcGx5KG51bGwsIGFyZ3MpO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9O1xuICAgICAgICB9O1xuICAgICAgICB3cmFwSXRlcmF0b3IoYXN5bmMuaXRlcmF0b3IodGFza3MpKSgpO1xuICAgIH07XG5cbiAgICB2YXIgX3BhcmFsbGVsID0gZnVuY3Rpb24oZWFjaGZuLCB0YXNrcywgY2FsbGJhY2spIHtcbiAgICAgICAgY2FsbGJhY2sgPSBjYWxsYmFjayB8fCBmdW5jdGlvbiAoKSB7fTtcbiAgICAgICAgaWYgKF9pc0FycmF5KHRhc2tzKSkge1xuICAgICAgICAgICAgZWFjaGZuLm1hcCh0YXNrcywgZnVuY3Rpb24gKGZuLCBjYWxsYmFjaykge1xuICAgICAgICAgICAgICAgIGlmIChmbikge1xuICAgICAgICAgICAgICAgICAgICBmbihmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoYXJncy5sZW5ndGggPD0gMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3MgPSBhcmdzWzBdO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2suY2FsbChudWxsLCBlcnIsIGFyZ3MpO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LCBjYWxsYmFjayk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB2YXIgcmVzdWx0cyA9IHt9O1xuICAgICAgICAgICAgZWFjaGZuLmVhY2goX2tleXModGFza3MpLCBmdW5jdGlvbiAoaywgY2FsbGJhY2spIHtcbiAgICAgICAgICAgICAgICB0YXNrc1trXShmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBhcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGFyZ3MubGVuZ3RoIDw9IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3MgPSBhcmdzWzBdO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdHNba10gPSBhcmdzO1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSwgZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrKGVyciwgcmVzdWx0cyk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH07XG5cbiAgICBhc3luYy5wYXJhbGxlbCA9IGZ1bmN0aW9uICh0YXNrcywgY2FsbGJhY2spIHtcbiAgICAgICAgX3BhcmFsbGVsKHsgbWFwOiBhc3luYy5tYXAsIGVhY2g6IGFzeW5jLmVhY2ggfSwgdGFza3MsIGNhbGxiYWNrKTtcbiAgICB9O1xuXG4gICAgYXN5bmMucGFyYWxsZWxMaW1pdCA9IGZ1bmN0aW9uKHRhc2tzLCBsaW1pdCwgY2FsbGJhY2spIHtcbiAgICAgICAgX3BhcmFsbGVsKHsgbWFwOiBfbWFwTGltaXQobGltaXQpLCBlYWNoOiBfZWFjaExpbWl0KGxpbWl0KSB9LCB0YXNrcywgY2FsbGJhY2spO1xuICAgIH07XG5cbiAgICBhc3luYy5zZXJpZXMgPSBmdW5jdGlvbiAodGFza3MsIGNhbGxiYWNrKSB7XG4gICAgICAgIGNhbGxiYWNrID0gY2FsbGJhY2sgfHwgZnVuY3Rpb24gKCkge307XG4gICAgICAgIGlmIChfaXNBcnJheSh0YXNrcykpIHtcbiAgICAgICAgICAgIGFzeW5jLm1hcFNlcmllcyh0YXNrcywgZnVuY3Rpb24gKGZuLCBjYWxsYmFjaykge1xuICAgICAgICAgICAgICAgIGlmIChmbikge1xuICAgICAgICAgICAgICAgICAgICBmbihmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoYXJncy5sZW5ndGggPD0gMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3MgPSBhcmdzWzBdO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2suY2FsbChudWxsLCBlcnIsIGFyZ3MpO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LCBjYWxsYmFjayk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB2YXIgcmVzdWx0cyA9IHt9O1xuICAgICAgICAgICAgYXN5bmMuZWFjaFNlcmllcyhfa2V5cyh0YXNrcyksIGZ1bmN0aW9uIChrLCBjYWxsYmFjaykge1xuICAgICAgICAgICAgICAgIHRhc2tzW2tdKGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGFyZ3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsIDEpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoYXJncy5sZW5ndGggPD0gMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgYXJncyA9IGFyZ3NbMF07XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0c1trXSA9IGFyZ3M7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9LCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2soZXJyLCByZXN1bHRzKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIGFzeW5jLml0ZXJhdG9yID0gZnVuY3Rpb24gKHRhc2tzKSB7XG4gICAgICAgIHZhciBtYWtlQ2FsbGJhY2sgPSBmdW5jdGlvbiAoaW5kZXgpIHtcbiAgICAgICAgICAgIHZhciBmbiA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBpZiAodGFza3MubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgIHRhc2tzW2luZGV4XS5hcHBseShudWxsLCBhcmd1bWVudHMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gZm4ubmV4dCgpO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGZuLm5leHQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIChpbmRleCA8IHRhc2tzLmxlbmd0aCAtIDEpID8gbWFrZUNhbGxiYWNrKGluZGV4ICsgMSk6IG51bGw7XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgcmV0dXJuIGZuO1xuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gbWFrZUNhbGxiYWNrKDApO1xuICAgIH07XG5cbiAgICBhc3luYy5hcHBseSA9IGZ1bmN0aW9uIChmbikge1xuICAgICAgICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMSk7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gZm4uYXBwbHkoXG4gICAgICAgICAgICAgICAgbnVsbCwgYXJncy5jb25jYXQoQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKSlcbiAgICAgICAgICAgICk7XG4gICAgICAgIH07XG4gICAgfTtcblxuICAgIHZhciBfY29uY2F0ID0gZnVuY3Rpb24gKGVhY2hmbiwgYXJyLCBmbiwgY2FsbGJhY2spIHtcbiAgICAgICAgdmFyIHIgPSBbXTtcbiAgICAgICAgZWFjaGZuKGFyciwgZnVuY3Rpb24gKHgsIGNiKSB7XG4gICAgICAgICAgICBmbih4LCBmdW5jdGlvbiAoZXJyLCB5KSB7XG4gICAgICAgICAgICAgICAgciA9IHIuY29uY2F0KHkgfHwgW10pO1xuICAgICAgICAgICAgICAgIGNiKGVycik7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSwgZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgY2FsbGJhY2soZXJyLCByKTtcbiAgICAgICAgfSk7XG4gICAgfTtcbiAgICBhc3luYy5jb25jYXQgPSBkb1BhcmFsbGVsKF9jb25jYXQpO1xuICAgIGFzeW5jLmNvbmNhdFNlcmllcyA9IGRvU2VyaWVzKF9jb25jYXQpO1xuXG4gICAgYXN5bmMud2hpbHN0ID0gZnVuY3Rpb24gKHRlc3QsIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICBpZiAodGVzdCgpKSB7XG4gICAgICAgICAgICBpdGVyYXRvcihmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYXN5bmMud2hpbHN0KHRlc3QsIGl0ZXJhdG9yLCBjYWxsYmFjayk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGNhbGxiYWNrKCk7XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgYXN5bmMuZG9XaGlsc3QgPSBmdW5jdGlvbiAoaXRlcmF0b3IsIHRlc3QsIGNhbGxiYWNrKSB7XG4gICAgICAgIGl0ZXJhdG9yKGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHZhciBhcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKTtcbiAgICAgICAgICAgIGlmICh0ZXN0LmFwcGx5KG51bGwsIGFyZ3MpKSB7XG4gICAgICAgICAgICAgICAgYXN5bmMuZG9XaGlsc3QoaXRlcmF0b3IsIHRlc3QsIGNhbGxiYWNrKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH07XG5cbiAgICBhc3luYy51bnRpbCA9IGZ1bmN0aW9uICh0ZXN0LCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgaWYgKCF0ZXN0KCkpIHtcbiAgICAgICAgICAgIGl0ZXJhdG9yKGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBhc3luYy51bnRpbCh0ZXN0LCBpdGVyYXRvciwgY2FsbGJhY2spO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIGFzeW5jLmRvVW50aWwgPSBmdW5jdGlvbiAoaXRlcmF0b3IsIHRlc3QsIGNhbGxiYWNrKSB7XG4gICAgICAgIGl0ZXJhdG9yKGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHZhciBhcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKTtcbiAgICAgICAgICAgIGlmICghdGVzdC5hcHBseShudWxsLCBhcmdzKSkge1xuICAgICAgICAgICAgICAgIGFzeW5jLmRvVW50aWwoaXRlcmF0b3IsIHRlc3QsIGNhbGxiYWNrKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH07XG5cbiAgICBhc3luYy5xdWV1ZSA9IGZ1bmN0aW9uICh3b3JrZXIsIGNvbmN1cnJlbmN5KSB7XG4gICAgICAgIGlmIChjb25jdXJyZW5jeSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBjb25jdXJyZW5jeSA9IDE7XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gX2luc2VydChxLCBkYXRhLCBwb3MsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgaWYgKCFxLnN0YXJ0ZWQpe1xuICAgICAgICAgICAgcS5zdGFydGVkID0gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKCFfaXNBcnJheShkYXRhKSkge1xuICAgICAgICAgICAgICBkYXRhID0gW2RhdGFdO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZihkYXRhLmxlbmd0aCA9PSAwKSB7XG4gICAgICAgICAgICAgLy8gY2FsbCBkcmFpbiBpbW1lZGlhdGVseSBpZiB0aGVyZSBhcmUgbm8gdGFza3NcbiAgICAgICAgICAgICByZXR1cm4gYXN5bmMuc2V0SW1tZWRpYXRlKGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgICBpZiAocS5kcmFpbikge1xuICAgICAgICAgICAgICAgICAgICAgcS5kcmFpbigpO1xuICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIF9lYWNoKGRhdGEsIGZ1bmN0aW9uKHRhc2spIHtcbiAgICAgICAgICAgICAgdmFyIGl0ZW0gPSB7XG4gICAgICAgICAgICAgICAgICBkYXRhOiB0YXNrLFxuICAgICAgICAgICAgICAgICAgY2FsbGJhY2s6IHR5cGVvZiBjYWxsYmFjayA9PT0gJ2Z1bmN0aW9uJyA/IGNhbGxiYWNrIDogbnVsbFxuICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgIGlmIChwb3MpIHtcbiAgICAgICAgICAgICAgICBxLnRhc2tzLnVuc2hpZnQoaXRlbSk7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcS50YXNrcy5wdXNoKGl0ZW0pO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgaWYgKHEuc2F0dXJhdGVkICYmIHEudGFza3MubGVuZ3RoID09PSBxLmNvbmN1cnJlbmN5KSB7XG4gICAgICAgICAgICAgICAgICBxLnNhdHVyYXRlZCgpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGFzeW5jLnNldEltbWVkaWF0ZShxLnByb2Nlc3MpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIHdvcmtlcnMgPSAwO1xuICAgICAgICB2YXIgcSA9IHtcbiAgICAgICAgICAgIHRhc2tzOiBbXSxcbiAgICAgICAgICAgIGNvbmN1cnJlbmN5OiBjb25jdXJyZW5jeSxcbiAgICAgICAgICAgIHNhdHVyYXRlZDogbnVsbCxcbiAgICAgICAgICAgIGVtcHR5OiBudWxsLFxuICAgICAgICAgICAgZHJhaW46IG51bGwsXG4gICAgICAgICAgICBzdGFydGVkOiBmYWxzZSxcbiAgICAgICAgICAgIHBhdXNlZDogZmFsc2UsXG4gICAgICAgICAgICBwdXNoOiBmdW5jdGlvbiAoZGF0YSwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgICAgX2luc2VydChxLCBkYXRhLCBmYWxzZSwgY2FsbGJhY2spO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGtpbGw6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgcS5kcmFpbiA9IG51bGw7XG4gICAgICAgICAgICAgIHEudGFza3MgPSBbXTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB1bnNoaWZ0OiBmdW5jdGlvbiAoZGF0YSwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgICAgX2luc2VydChxLCBkYXRhLCB0cnVlLCBjYWxsYmFjayk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcHJvY2VzczogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGlmICghcS5wYXVzZWQgJiYgd29ya2VycyA8IHEuY29uY3VycmVuY3kgJiYgcS50YXNrcy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHRhc2sgPSBxLnRhc2tzLnNoaWZ0KCk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChxLmVtcHR5ICYmIHEudGFza3MubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBxLmVtcHR5KCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgd29ya2VycyArPSAxO1xuICAgICAgICAgICAgICAgICAgICB2YXIgbmV4dCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHdvcmtlcnMgLT0gMTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0YXNrLmNhbGxiYWNrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFzay5jYWxsYmFjay5hcHBseSh0YXNrLCBhcmd1bWVudHMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHEuZHJhaW4gJiYgcS50YXNrcy5sZW5ndGggKyB3b3JrZXJzID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcS5kcmFpbigpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgcS5wcm9jZXNzKCk7XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIHZhciBjYiA9IG9ubHlfb25jZShuZXh0KTtcbiAgICAgICAgICAgICAgICAgICAgd29ya2VyKHRhc2suZGF0YSwgY2IpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBsZW5ndGg6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcS50YXNrcy5sZW5ndGg7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcnVubmluZzogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB3b3JrZXJzO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGlkbGU6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBxLnRhc2tzLmxlbmd0aCArIHdvcmtlcnMgPT09IDA7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcGF1c2U6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBpZiAocS5wYXVzZWQgPT09IHRydWUpIHsgcmV0dXJuOyB9XG4gICAgICAgICAgICAgICAgcS5wYXVzZWQgPSB0cnVlO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHJlc3VtZTogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGlmIChxLnBhdXNlZCA9PT0gZmFsc2UpIHsgcmV0dXJuOyB9XG4gICAgICAgICAgICAgICAgcS5wYXVzZWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAvLyBOZWVkIHRvIGNhbGwgcS5wcm9jZXNzIG9uY2UgcGVyIGNvbmN1cnJlbnRcbiAgICAgICAgICAgICAgICAvLyB3b3JrZXIgdG8gcHJlc2VydmUgZnVsbCBjb25jdXJyZW5jeSBhZnRlciBwYXVzZVxuICAgICAgICAgICAgICAgIGZvciAodmFyIHcgPSAxOyB3IDw9IHEuY29uY3VycmVuY3k7IHcrKykge1xuICAgICAgICAgICAgICAgICAgICBhc3luYy5zZXRJbW1lZGlhdGUocS5wcm9jZXNzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiBxO1xuICAgIH07XG5cbiAgICBhc3luYy5wcmlvcml0eVF1ZXVlID0gZnVuY3Rpb24gKHdvcmtlciwgY29uY3VycmVuY3kpIHtcblxuICAgICAgICBmdW5jdGlvbiBfY29tcGFyZVRhc2tzKGEsIGIpe1xuICAgICAgICAgIHJldHVybiBhLnByaW9yaXR5IC0gYi5wcmlvcml0eTtcbiAgICAgICAgfTtcblxuICAgICAgICBmdW5jdGlvbiBfYmluYXJ5U2VhcmNoKHNlcXVlbmNlLCBpdGVtLCBjb21wYXJlKSB7XG4gICAgICAgICAgdmFyIGJlZyA9IC0xLFxuICAgICAgICAgICAgICBlbmQgPSBzZXF1ZW5jZS5sZW5ndGggLSAxO1xuICAgICAgICAgIHdoaWxlIChiZWcgPCBlbmQpIHtcbiAgICAgICAgICAgIHZhciBtaWQgPSBiZWcgKyAoKGVuZCAtIGJlZyArIDEpID4+PiAxKTtcbiAgICAgICAgICAgIGlmIChjb21wYXJlKGl0ZW0sIHNlcXVlbmNlW21pZF0pID49IDApIHtcbiAgICAgICAgICAgICAgYmVnID0gbWlkO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgZW5kID0gbWlkIC0gMTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIGJlZztcbiAgICAgICAgfVxuXG4gICAgICAgIGZ1bmN0aW9uIF9pbnNlcnQocSwgZGF0YSwgcHJpb3JpdHksIGNhbGxiYWNrKSB7XG4gICAgICAgICAgaWYgKCFxLnN0YXJ0ZWQpe1xuICAgICAgICAgICAgcS5zdGFydGVkID0gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKCFfaXNBcnJheShkYXRhKSkge1xuICAgICAgICAgICAgICBkYXRhID0gW2RhdGFdO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZihkYXRhLmxlbmd0aCA9PSAwKSB7XG4gICAgICAgICAgICAgLy8gY2FsbCBkcmFpbiBpbW1lZGlhdGVseSBpZiB0aGVyZSBhcmUgbm8gdGFza3NcbiAgICAgICAgICAgICByZXR1cm4gYXN5bmMuc2V0SW1tZWRpYXRlKGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgICBpZiAocS5kcmFpbikge1xuICAgICAgICAgICAgICAgICAgICAgcS5kcmFpbigpO1xuICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIF9lYWNoKGRhdGEsIGZ1bmN0aW9uKHRhc2spIHtcbiAgICAgICAgICAgICAgdmFyIGl0ZW0gPSB7XG4gICAgICAgICAgICAgICAgICBkYXRhOiB0YXNrLFxuICAgICAgICAgICAgICAgICAgcHJpb3JpdHk6IHByaW9yaXR5LFxuICAgICAgICAgICAgICAgICAgY2FsbGJhY2s6IHR5cGVvZiBjYWxsYmFjayA9PT0gJ2Z1bmN0aW9uJyA/IGNhbGxiYWNrIDogbnVsbFxuICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgIHEudGFza3Muc3BsaWNlKF9iaW5hcnlTZWFyY2gocS50YXNrcywgaXRlbSwgX2NvbXBhcmVUYXNrcykgKyAxLCAwLCBpdGVtKTtcblxuICAgICAgICAgICAgICBpZiAocS5zYXR1cmF0ZWQgJiYgcS50YXNrcy5sZW5ndGggPT09IHEuY29uY3VycmVuY3kpIHtcbiAgICAgICAgICAgICAgICAgIHEuc2F0dXJhdGVkKCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgYXN5bmMuc2V0SW1tZWRpYXRlKHEucHJvY2Vzcyk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBTdGFydCB3aXRoIGEgbm9ybWFsIHF1ZXVlXG4gICAgICAgIHZhciBxID0gYXN5bmMucXVldWUod29ya2VyLCBjb25jdXJyZW5jeSk7XG5cbiAgICAgICAgLy8gT3ZlcnJpZGUgcHVzaCB0byBhY2NlcHQgc2Vjb25kIHBhcmFtZXRlciByZXByZXNlbnRpbmcgcHJpb3JpdHlcbiAgICAgICAgcS5wdXNoID0gZnVuY3Rpb24gKGRhdGEsIHByaW9yaXR5LCBjYWxsYmFjaykge1xuICAgICAgICAgIF9pbnNlcnQocSwgZGF0YSwgcHJpb3JpdHksIGNhbGxiYWNrKTtcbiAgICAgICAgfTtcblxuICAgICAgICAvLyBSZW1vdmUgdW5zaGlmdCBmdW5jdGlvblxuICAgICAgICBkZWxldGUgcS51bnNoaWZ0O1xuXG4gICAgICAgIHJldHVybiBxO1xuICAgIH07XG5cbiAgICBhc3luYy5jYXJnbyA9IGZ1bmN0aW9uICh3b3JrZXIsIHBheWxvYWQpIHtcbiAgICAgICAgdmFyIHdvcmtpbmcgICAgID0gZmFsc2UsXG4gICAgICAgICAgICB0YXNrcyAgICAgICA9IFtdO1xuXG4gICAgICAgIHZhciBjYXJnbyA9IHtcbiAgICAgICAgICAgIHRhc2tzOiB0YXNrcyxcbiAgICAgICAgICAgIHBheWxvYWQ6IHBheWxvYWQsXG4gICAgICAgICAgICBzYXR1cmF0ZWQ6IG51bGwsXG4gICAgICAgICAgICBlbXB0eTogbnVsbCxcbiAgICAgICAgICAgIGRyYWluOiBudWxsLFxuICAgICAgICAgICAgZHJhaW5lZDogdHJ1ZSxcbiAgICAgICAgICAgIHB1c2g6IGZ1bmN0aW9uIChkYXRhLCBjYWxsYmFjaykge1xuICAgICAgICAgICAgICAgIGlmICghX2lzQXJyYXkoZGF0YSkpIHtcbiAgICAgICAgICAgICAgICAgICAgZGF0YSA9IFtkYXRhXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgX2VhY2goZGF0YSwgZnVuY3Rpb24odGFzaykge1xuICAgICAgICAgICAgICAgICAgICB0YXNrcy5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGE6IHRhc2ssXG4gICAgICAgICAgICAgICAgICAgICAgICBjYWxsYmFjazogdHlwZW9mIGNhbGxiYWNrID09PSAnZnVuY3Rpb24nID8gY2FsbGJhY2sgOiBudWxsXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICBjYXJnby5kcmFpbmVkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIGlmIChjYXJnby5zYXR1cmF0ZWQgJiYgdGFza3MubGVuZ3RoID09PSBwYXlsb2FkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjYXJnby5zYXR1cmF0ZWQoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGFzeW5jLnNldEltbWVkaWF0ZShjYXJnby5wcm9jZXNzKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBwcm9jZXNzOiBmdW5jdGlvbiBwcm9jZXNzKCkge1xuICAgICAgICAgICAgICAgIGlmICh3b3JraW5nKSByZXR1cm47XG4gICAgICAgICAgICAgICAgaWYgKHRhc2tzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICBpZihjYXJnby5kcmFpbiAmJiAhY2FyZ28uZHJhaW5lZCkgY2FyZ28uZHJhaW4oKTtcbiAgICAgICAgICAgICAgICAgICAgY2FyZ28uZHJhaW5lZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB2YXIgdHMgPSB0eXBlb2YgcGF5bG9hZCA9PT0gJ251bWJlcidcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IHRhc2tzLnNwbGljZSgwLCBwYXlsb2FkKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogdGFza3Muc3BsaWNlKDAsIHRhc2tzLmxlbmd0aCk7XG5cbiAgICAgICAgICAgICAgICB2YXIgZHMgPSBfbWFwKHRzLCBmdW5jdGlvbiAodGFzaykge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGFzay5kYXRhO1xuICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgaWYoY2FyZ28uZW1wdHkpIGNhcmdvLmVtcHR5KCk7XG4gICAgICAgICAgICAgICAgd29ya2luZyA9IHRydWU7XG4gICAgICAgICAgICAgICAgd29ya2VyKGRzLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIHdvcmtpbmcgPSBmYWxzZTtcblxuICAgICAgICAgICAgICAgICAgICB2YXIgYXJncyA9IGFyZ3VtZW50cztcbiAgICAgICAgICAgICAgICAgICAgX2VhY2godHMsIGZ1bmN0aW9uIChkYXRhKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZGF0YS5jYWxsYmFjaykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEuY2FsbGJhY2suYXBwbHkobnVsbCwgYXJncyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgICAgIHByb2Nlc3MoKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBsZW5ndGg6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGFza3MubGVuZ3RoO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHJ1bm5pbmc6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gd29ya2luZztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIGNhcmdvO1xuICAgIH07XG5cbiAgICB2YXIgX2NvbnNvbGVfZm4gPSBmdW5jdGlvbiAobmFtZSkge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKGZuKSB7XG4gICAgICAgICAgICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMSk7XG4gICAgICAgICAgICBmbi5hcHBseShudWxsLCBhcmdzLmNvbmNhdChbZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgICAgIHZhciBhcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKTtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGNvbnNvbGUgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb25zb2xlLmVycm9yKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihlcnIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKGNvbnNvbGVbbmFtZV0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIF9lYWNoKGFyZ3MsIGZ1bmN0aW9uICh4KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZVtuYW1lXSh4KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfV0pKTtcbiAgICAgICAgfTtcbiAgICB9O1xuICAgIGFzeW5jLmxvZyA9IF9jb25zb2xlX2ZuKCdsb2cnKTtcbiAgICBhc3luYy5kaXIgPSBfY29uc29sZV9mbignZGlyJyk7XG4gICAgLyphc3luYy5pbmZvID0gX2NvbnNvbGVfZm4oJ2luZm8nKTtcbiAgICBhc3luYy53YXJuID0gX2NvbnNvbGVfZm4oJ3dhcm4nKTtcbiAgICBhc3luYy5lcnJvciA9IF9jb25zb2xlX2ZuKCdlcnJvcicpOyovXG5cbiAgICBhc3luYy5tZW1vaXplID0gZnVuY3Rpb24gKGZuLCBoYXNoZXIpIHtcbiAgICAgICAgdmFyIG1lbW8gPSB7fTtcbiAgICAgICAgdmFyIHF1ZXVlcyA9IHt9O1xuICAgICAgICBoYXNoZXIgPSBoYXNoZXIgfHwgZnVuY3Rpb24gKHgpIHtcbiAgICAgICAgICAgIHJldHVybiB4O1xuICAgICAgICB9O1xuICAgICAgICB2YXIgbWVtb2l6ZWQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7XG4gICAgICAgICAgICB2YXIgY2FsbGJhY2sgPSBhcmdzLnBvcCgpO1xuICAgICAgICAgICAgdmFyIGtleSA9IGhhc2hlci5hcHBseShudWxsLCBhcmdzKTtcbiAgICAgICAgICAgIGlmIChrZXkgaW4gbWVtbykge1xuICAgICAgICAgICAgICAgIGFzeW5jLm5leHRUaWNrKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2suYXBwbHkobnVsbCwgbWVtb1trZXldKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGtleSBpbiBxdWV1ZXMpIHtcbiAgICAgICAgICAgICAgICBxdWV1ZXNba2V5XS5wdXNoKGNhbGxiYWNrKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHF1ZXVlc1trZXldID0gW2NhbGxiYWNrXTtcbiAgICAgICAgICAgICAgICBmbi5hcHBseShudWxsLCBhcmdzLmNvbmNhdChbZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICBtZW1vW2tleV0gPSBhcmd1bWVudHM7XG4gICAgICAgICAgICAgICAgICAgIHZhciBxID0gcXVldWVzW2tleV07XG4gICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBxdWV1ZXNba2V5XTtcbiAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDAsIGwgPSBxLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICAgIHFbaV0uYXBwbHkobnVsbCwgYXJndW1lbnRzKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1dKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIG1lbW9pemVkLm1lbW8gPSBtZW1vO1xuICAgICAgICBtZW1vaXplZC51bm1lbW9pemVkID0gZm47XG4gICAgICAgIHJldHVybiBtZW1vaXplZDtcbiAgICB9O1xuXG4gICAgYXN5bmMudW5tZW1vaXplID0gZnVuY3Rpb24gKGZuKSB7XG4gICAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gKGZuLnVubWVtb2l6ZWQgfHwgZm4pLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7XG4gICAgICB9O1xuICAgIH07XG5cbiAgICBhc3luYy50aW1lcyA9IGZ1bmN0aW9uIChjb3VudCwgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgIHZhciBjb3VudGVyID0gW107XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY291bnQ7IGkrKykge1xuICAgICAgICAgICAgY291bnRlci5wdXNoKGkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBhc3luYy5tYXAoY291bnRlciwgaXRlcmF0b3IsIGNhbGxiYWNrKTtcbiAgICB9O1xuXG4gICAgYXN5bmMudGltZXNTZXJpZXMgPSBmdW5jdGlvbiAoY291bnQsIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICB2YXIgY291bnRlciA9IFtdO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNvdW50OyBpKyspIHtcbiAgICAgICAgICAgIGNvdW50ZXIucHVzaChpKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYXN5bmMubWFwU2VyaWVzKGNvdW50ZXIsIGl0ZXJhdG9yLCBjYWxsYmFjayk7XG4gICAgfTtcblxuICAgIGFzeW5jLnNlcSA9IGZ1bmN0aW9uICgvKiBmdW5jdGlvbnMuLi4gKi8pIHtcbiAgICAgICAgdmFyIGZucyA9IGFyZ3VtZW50cztcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHZhciB0aGF0ID0gdGhpcztcbiAgICAgICAgICAgIHZhciBhcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKTtcbiAgICAgICAgICAgIHZhciBjYWxsYmFjayA9IGFyZ3MucG9wKCk7XG4gICAgICAgICAgICBhc3luYy5yZWR1Y2UoZm5zLCBhcmdzLCBmdW5jdGlvbiAobmV3YXJncywgZm4sIGNiKSB7XG4gICAgICAgICAgICAgICAgZm4uYXBwbHkodGhhdCwgbmV3YXJncy5jb25jYXQoW2Z1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGVyciA9IGFyZ3VtZW50c1swXTtcbiAgICAgICAgICAgICAgICAgICAgdmFyIG5leHRhcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKTtcbiAgICAgICAgICAgICAgICAgICAgY2IoZXJyLCBuZXh0YXJncyk7XG4gICAgICAgICAgICAgICAgfV0pKVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGZ1bmN0aW9uIChlcnIsIHJlc3VsdHMpIHtcbiAgICAgICAgICAgICAgICBjYWxsYmFjay5hcHBseSh0aGF0LCBbZXJyXS5jb25jYXQocmVzdWx0cykpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH07XG4gICAgfTtcblxuICAgIGFzeW5jLmNvbXBvc2UgPSBmdW5jdGlvbiAoLyogZnVuY3Rpb25zLi4uICovKSB7XG4gICAgICByZXR1cm4gYXN5bmMuc2VxLmFwcGx5KG51bGwsIEFycmF5LnByb3RvdHlwZS5yZXZlcnNlLmNhbGwoYXJndW1lbnRzKSk7XG4gICAgfTtcblxuICAgIHZhciBfYXBwbHlFYWNoID0gZnVuY3Rpb24gKGVhY2hmbiwgZm5zIC8qYXJncy4uLiovKSB7XG4gICAgICAgIHZhciBnbyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHZhciB0aGF0ID0gdGhpcztcbiAgICAgICAgICAgIHZhciBhcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKTtcbiAgICAgICAgICAgIHZhciBjYWxsYmFjayA9IGFyZ3MucG9wKCk7XG4gICAgICAgICAgICByZXR1cm4gZWFjaGZuKGZucywgZnVuY3Rpb24gKGZuLCBjYikge1xuICAgICAgICAgICAgICAgIGZuLmFwcGx5KHRoYXQsIGFyZ3MuY29uY2F0KFtjYl0pKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjYWxsYmFjayk7XG4gICAgICAgIH07XG4gICAgICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID4gMikge1xuICAgICAgICAgICAgdmFyIGFyZ3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsIDIpO1xuICAgICAgICAgICAgcmV0dXJuIGdvLmFwcGx5KHRoaXMsIGFyZ3MpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIGdvO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBhc3luYy5hcHBseUVhY2ggPSBkb1BhcmFsbGVsKF9hcHBseUVhY2gpO1xuICAgIGFzeW5jLmFwcGx5RWFjaFNlcmllcyA9IGRvU2VyaWVzKF9hcHBseUVhY2gpO1xuXG4gICAgYXN5bmMuZm9yZXZlciA9IGZ1bmN0aW9uIChmbiwgY2FsbGJhY2spIHtcbiAgICAgICAgZnVuY3Rpb24gbmV4dChlcnIpIHtcbiAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICBpZiAoY2FsbGJhY2spIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRocm93IGVycjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZuKG5leHQpO1xuICAgICAgICB9XG4gICAgICAgIG5leHQoKTtcbiAgICB9O1xuXG4gICAgLy8gTm9kZS5qc1xuICAgIGlmICh0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJyAmJiBtb2R1bGUuZXhwb3J0cykge1xuICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IGFzeW5jO1xuICAgIH1cbiAgICAvLyBBTUQgLyBSZXF1aXJlSlNcbiAgICBlbHNlIGlmICh0eXBlb2YgZGVmaW5lICE9PSAndW5kZWZpbmVkJyAmJiBkZWZpbmUuYW1kKSB7XG4gICAgICAgIGRlZmluZShbXSwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIGFzeW5jO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgLy8gaW5jbHVkZWQgZGlyZWN0bHkgdmlhIDxzY3JpcHQ+IHRhZ1xuICAgIGVsc2Uge1xuICAgICAgICByb290LmFzeW5jID0gYXN5bmM7XG4gICAgfVxuXG59KCkpO1xuIiwidmFyIGFzeW5jICAgICAgID0gcmVxdWlyZSgnYXN5bmMnKSxcbiAgICB1cmxQYXJzZXIgICA9IHJlcXVpcmUoJ3VybCcpLFxuICAgIFJlc291cmNlICAgID0gcmVxdWlyZSgnLi9SZXNvdXJjZScpLFxuICAgIEV2ZW50RW1pdHRlciA9IHJlcXVpcmUoJ2V2ZW50ZW1pdHRlcjMnKTtcblxuLyoqXG4gKiBNYW5hZ2VzIHRoZSBzdGF0ZSBhbmQgbG9hZGluZyBvZiBtdWx0aXBsZSByZXNvdXJjZXMgdG8gbG9hZC5cbiAqXG4gKiBAY2xhc3NcbiAqIEBwYXJhbSBbYmFzZVVybD0nJ10ge3N0cmluZ30gVGhlIGJhc2UgdXJsIGZvciBhbGwgcmVzb3VyY2VzIGxvYWRlZCBieSB0aGlzIGxvYWRlci5cbiAqIEBwYXJhbSBbY29uY3VycmVuY3k9MTBdIHtudW1iZXJ9IFRoZSBudW1iZXIgb2YgcmVzb3VyY2VzIHRvIGxvYWQgY29uY3VycmVudGx5LlxuICovXG5mdW5jdGlvbiBMb2FkZXIoYmFzZVVybCwgY29uY3VycmVuY3kpIHtcbiAgICBFdmVudEVtaXR0ZXIuY2FsbCh0aGlzKTtcblxuICAgIGNvbmN1cnJlbmN5ID0gY29uY3VycmVuY3kgfHwgMTA7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYmFzZSB1cmwgZm9yIGFsbCByZXNvdXJjZXMgbG9hZGVkIGJ5IHRoaXMgbG9hZGVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7c3RyaW5nfVxuICAgICAqL1xuICAgIHRoaXMuYmFzZVVybCA9IGJhc2VVcmwgfHwgJyc7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgcHJvZ3Jlc3MgcGVyY2VudCBvZiB0aGUgbG9hZGVyIGdvaW5nIHRocm91Z2ggdGhlIHF1ZXVlLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMucHJvZ3Jlc3MgPSAwO1xuXG4gICAgLyoqXG4gICAgICogTG9hZGluZyBzdGF0ZSBvZiB0aGUgbG9hZGVyLCB0cnVlIGlmIGl0IGlzIGN1cnJlbnRseSBsb2FkaW5nIHJlc291cmNlcy5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICovXG4gICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgcGVyY2VudGFnZSBvZiB0b3RhbCBwcm9ncmVzcyB0aGF0IGEgc2luZ2xlIHJlc291cmNlIHJlcHJlc2VudHMuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy5fcHJvZ3Jlc3NDaHVuayA9IDA7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgbWlkZGxld2FyZSB0byBydW4gYmVmb3JlIGxvYWRpbmcgZWFjaCByZXNvdXJjZS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Z1bmN0aW9uW119XG4gICAgICovXG4gICAgdGhpcy5fYmVmb3JlTWlkZGxld2FyZSA9IFtdO1xuXG4gICAgLyoqXG4gICAgICogVGhlIG1pZGRsZXdhcmUgdG8gcnVuIGFmdGVyIGxvYWRpbmcgZWFjaCByZXNvdXJjZS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Z1bmN0aW9uW119XG4gICAgICovXG4gICAgdGhpcy5fYWZ0ZXJNaWRkbGV3YXJlID0gW107XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYF9sb2FkUmVzb3VyY2VgIGZ1bmN0aW9uIGJvdW5kIHdpdGggdGhpcyBvYmplY3QgY29udGV4dC5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQG1lbWJlciB7ZnVuY3Rpb259XG4gICAgICovXG4gICAgdGhpcy5fYm91bmRMb2FkUmVzb3VyY2UgPSB0aGlzLl9sb2FkUmVzb3VyY2UuYmluZCh0aGlzKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBgX29uTG9hZGAgZnVuY3Rpb24gYm91bmQgd2l0aCB0aGlzIG9iamVjdCBjb250ZXh0LlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAbWVtYmVyIHtmdW5jdGlvbn1cbiAgICAgKi9cbiAgICB0aGlzLl9ib3VuZE9uTG9hZCA9IHRoaXMuX29uTG9hZC5iaW5kKHRoaXMpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHJlc291cmNlIGJ1ZmZlciB0aGF0IGZpbGxzIHVudGlsIGBsb2FkYCBpcyBjYWxsZWQgdG8gc3RhcnQgbG9hZGluZyByZXNvdXJjZXMuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBtZW1iZXIge1Jlc291cmNlW119XG4gICAgICovXG4gICAgdGhpcy5fYnVmZmVyID0gW107XG5cbiAgICAvKipcbiAgICAgKiBVc2VkIHRvIHRyYWNrIGxvYWQgY29tcGxldGlvbi5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMuX251bVRvTG9hZCA9IDA7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgcmVzb3VyY2VzIHdhaXRpbmcgdG8gYmUgbG9hZGVkLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAbWVtYmVyIHtSZXNvdXJjZVtdfVxuICAgICAqL1xuICAgIHRoaXMuX3F1ZXVlID0gYXN5bmMucXVldWUodGhpcy5fYm91bmRMb2FkUmVzb3VyY2UsIGNvbmN1cnJlbmN5KTtcblxuICAgIC8qKlxuICAgICAqIEFsbCB0aGUgcmVzb3VyY2VzIGZvciB0aGlzIGxvYWRlciBrZXllZCBieSBuYW1lLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7b2JqZWN0PHN0cmluZywgUmVzb3VyY2U+fVxuICAgICAqL1xuICAgIHRoaXMucmVzb3VyY2VzID0ge307XG5cbiAgICAvKipcbiAgICAgKiBFbWl0dGVkIG9uY2UgcGVyIGxvYWRlZCBvciBlcnJvcmVkIHJlc291cmNlLlxuICAgICAqXG4gICAgICogQGV2ZW50IHByb2dyZXNzXG4gICAgICogQG1lbWJlcm9mIExvYWRlciNcbiAgICAgKi9cblxuICAgIC8qKlxuICAgICAqIEVtaXR0ZWQgb25jZSBwZXIgZXJyb3JlZCByZXNvdXJjZS5cbiAgICAgKlxuICAgICAqIEBldmVudCBlcnJvclxuICAgICAqIEBtZW1iZXJvZiBMb2FkZXIjXG4gICAgICovXG5cbiAgICAvKipcbiAgICAgKiBFbWl0dGVkIG9uY2UgcGVyIGxvYWRlZCByZXNvdXJjZS5cbiAgICAgKlxuICAgICAqIEBldmVudCBsb2FkXG4gICAgICogQG1lbWJlcm9mIExvYWRlciNcbiAgICAgKi9cblxuICAgIC8qKlxuICAgICAqIEVtaXR0ZWQgd2hlbiB0aGUgbG9hZGVyIGJlZ2lucyB0byBwcm9jZXNzIHRoZSBxdWV1ZS5cbiAgICAgKlxuICAgICAqIEBldmVudCBzdGFydFxuICAgICAqIEBtZW1iZXJvZiBMb2FkZXIjXG4gICAgICovXG5cbiAgICAvKipcbiAgICAgKiBFbWl0dGVkIHdoZW4gdGhlIHF1ZXVlZCByZXNvdXJjZXMgYWxsIGxvYWQuXG4gICAgICpcbiAgICAgKiBAZXZlbnQgY29tcGxldGVcbiAgICAgKiBAbWVtYmVyb2YgTG9hZGVyI1xuICAgICAqL1xufVxuXG5Mb2FkZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShFdmVudEVtaXR0ZXIucHJvdG90eXBlKTtcbkxvYWRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBMb2FkZXI7XG5tb2R1bGUuZXhwb3J0cyA9IExvYWRlcjtcblxuLyoqXG4gKiBBZGRzIGEgcmVzb3VyY2UgKG9yIG11bHRpcGxlIHJlc291cmNlcykgdG8gdGhlIGxvYWRlciBxdWV1ZS5cbiAqXG4gKiBUaGlzIGZ1bmN0aW9uIGNhbiB0YWtlIGEgd2lkZSB2YXJpZXR5IG9mIGRpZmZlcmVudCBwYXJhbWV0ZXJzLiBUaGUgb25seSB0aGluZyB0aGF0IGlzIGFsd2F5c1xuICogcmVxdWlyZWQgdGhlIHVybCB0byBsb2FkLiBBbGwgdGhlIGZvbGxvd2luZyB3aWxsIHdvcms6XG4gKlxuICogYGBganNcbiAqIGxvYWRlclxuICogICAgIC8vIG5vcm1hbCBwYXJhbSBzeW50YXhcbiAqICAgICAuYWRkKCdrZXknLCAnaHR0cDovLy4uLicsIGZ1bmN0aW9uICgpIHt9KVxuICogICAgIC5hZGQoJ2h0dHA6Ly8uLi4nLCBmdW5jdGlvbiAoKSB7fSlcbiAqICAgICAuYWRkKCdodHRwOi8vLi4uJylcbiAqXG4gKiAgICAgLy8gb2JqZWN0IHN5bnRheFxuICogICAgIC5hZGQoe1xuICogICAgICAgICBuYW1lOiAna2V5MicsXG4gKiAgICAgICAgIHVybDogJ2h0dHA6Ly8uLi4nXG4gKiAgICAgfSwgZnVuY3Rpb24gKCkge30pXG4gKiAgICAgLmFkZCh7XG4gKiAgICAgICAgIHVybDogJ2h0dHA6Ly8uLi4nXG4gKiAgICAgfSwgZnVuY3Rpb24gKCkge30pXG4gKiAgICAgLmFkZCh7XG4gKiAgICAgICAgIG5hbWU6ICdrZXkzJyxcbiAqICAgICAgICAgdXJsOiAnaHR0cDovLy4uLidcbiAqICAgICAgICAgb25Db21wbGV0ZTogZnVuY3Rpb24gKCkge31cbiAqICAgICB9KVxuICogICAgIC5hZGQoe1xuICogICAgICAgICB1cmw6ICdodHRwczovLy4uLicsXG4gKiAgICAgICAgIG9uQ29tcGxldGU6IGZ1bmN0aW9uICgpIHt9LFxuICogICAgICAgICBjcm9zc09yaWdpbjogdHJ1ZVxuICogICAgIH0pXG4gKlxuICogICAgIC8vIHlvdSBjYW4gYWxzbyBwYXNzIGFuIGFycmF5IG9mIG9iamVjdHMgb3IgdXJscyBvciBib3RoXG4gKiAgICAgLmFkZChbXG4gKiAgICAgICAgIHsgbmFtZTogJ2tleTQnLCB1cmw6ICdodHRwOi8vLi4uJywgb25Db21wbGV0ZTogZnVuY3Rpb24gKCkge30gfSxcbiAqICAgICAgICAgeyB1cmw6ICdodHRwOi8vLi4uJywgb25Db21wbGV0ZTogZnVuY3Rpb24gKCkge30gfSxcbiAqICAgICAgICAgJ2h0dHA6Ly8uLi4nXG4gKiAgICAgXSk7XG4gKiBgYGBcbiAqXG4gKiBAYWxpYXMgZW5xdWV1ZVxuICogQHBhcmFtIFtuYW1lXSB7c3RyaW5nfSBUaGUgbmFtZSBvZiB0aGUgcmVzb3VyY2UgdG8gbG9hZCwgaWYgbm90IHBhc3NlZCB0aGUgdXJsIGlzIHVzZWQuXG4gKiBAcGFyYW0gdXJsIHtzdHJpbmd9IFRoZSB1cmwgZm9yIHRoaXMgcmVzb3VyY2UsIHJlbGF0aXZlIHRvIHRoZSBiYXNlVXJsIG9mIHRoaXMgbG9hZGVyLlxuICogQHBhcmFtIFtvcHRpb25zXSB7b2JqZWN0fSBUaGUgb3B0aW9ucyBmb3IgdGhlIGxvYWQuXG4gKiBAcGFyYW0gW29wdGlvbnMuY3Jvc3NPcmlnaW5dIHtib29sZWFufSBJcyB0aGlzIHJlcXVlc3QgY3Jvc3Mtb3JpZ2luPyBEZWZhdWx0IGlzIHRvIGRldGVybWluZSBhdXRvbWF0aWNhbGx5LlxuICogQHBhcmFtIFtvcHRpb25zLmxvYWRUeXBlPVJlc291cmNlLkxPQURfVFlQRS5YSFJdIHtSZXNvdXJjZS5YSFJfTE9BRF9UWVBFfSBIb3cgc2hvdWxkIHRoaXMgcmVzb3VyY2UgYmUgbG9hZGVkP1xuICogQHBhcmFtIFtvcHRpb25zLnhoclR5cGU9UmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuREVGQVVMVF0ge1Jlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFfSBIb3cgc2hvdWxkIHRoZSBkYXRhIGJlaW5nXG4gKiAgICAgIGxvYWRlZCBiZSBpbnRlcnByZXRlZCB3aGVuIHVzaW5nIFhIUj9cbiAqIEBwYXJhbSBbY2FsbGJhY2tdIHtmdW5jdGlvbn0gRnVuY3Rpb24gdG8gY2FsbCB3aGVuIHRoaXMgc3BlY2lmaWMgcmVzb3VyY2UgY29tcGxldGVzIGxvYWRpbmcuXG4gKiBAcmV0dXJuIHtMb2FkZXJ9XG4gKi9cbkxvYWRlci5wcm90b3R5cGUuYWRkID0gTG9hZGVyLnByb3RvdHlwZS5lbnF1ZXVlID0gZnVuY3Rpb24gKG5hbWUsIHVybCwgb3B0aW9ucywgY2IpIHtcbiAgICAvLyBzcGVjaWFsIGNhc2Ugb2YgYW4gYXJyYXkgb2Ygb2JqZWN0cyBvciB1cmxzXG4gICAgaWYgKEFycmF5LmlzQXJyYXkobmFtZSkpIHtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBuYW1lLmxlbmd0aDsgKytpKSB7XG4gICAgICAgICAgICB0aGlzLmFkZChuYW1lW2ldKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIC8vIGlmIGFuIG9iamVjdCBpcyBwYXNzZWQgaW5zdGVhZCBvZiBwYXJhbXNcbiAgICBpZiAodHlwZW9mIG5hbWUgPT09ICdvYmplY3QnKSB7XG4gICAgICAgIGNiID0gdXJsIHx8IG5hbWUuY2FsbGJhY2sgfHwgbmFtZS5vbkNvbXBsZXRlO1xuICAgICAgICBvcHRpb25zID0gbmFtZTtcbiAgICAgICAgdXJsID0gbmFtZS51cmw7XG4gICAgICAgIG5hbWUgPSBuYW1lLm5hbWUgfHwgbmFtZS5rZXkgfHwgbmFtZS51cmw7XG4gICAgfVxuXG4gICAgLy8gY2FzZSB3aGVyZSBubyBuYW1lIGlzIHBhc3NlZCBzaGlmdCBhbGwgYXJncyBvdmVyIGJ5IG9uZS5cbiAgICBpZiAodHlwZW9mIHVybCAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgY2IgPSBvcHRpb25zO1xuICAgICAgICBvcHRpb25zID0gdXJsO1xuICAgICAgICB1cmwgPSBuYW1lO1xuICAgIH1cblxuICAgIC8vIG5vdyB0aGF0IHdlIHNoaWZ0ZWQgbWFrZSBzdXJlIHdlIGhhdmUgYSBwcm9wZXIgdXJsLlxuICAgIGlmICh0eXBlb2YgdXJsICE9PSAnc3RyaW5nJykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ05vIHVybCBwYXNzZWQgdG8gYWRkIHJlc291cmNlIHRvIGxvYWRlci4nKTtcbiAgICB9XG5cbiAgICAvLyBvcHRpb25zIGFyZSBvcHRpb25hbCBzbyBwZW9wbGUgbWlnaHQgcGFzcyBhIGZ1bmN0aW9uIGFuZCBubyBvcHRpb25zXG4gICAgaWYgKHR5cGVvZiBvcHRpb25zID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIGNiID0gb3B0aW9ucztcbiAgICAgICAgb3B0aW9ucyA9IG51bGw7XG4gICAgfVxuXG4gICAgLy8gY2hlY2sgaWYgcmVzb3VyY2UgYWxyZWFkeSBleGlzdHMuXG4gICAgaWYgKHRoaXMucmVzb3VyY2VzW25hbWVdKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignUmVzb3VyY2Ugd2l0aCBuYW1lIFwiJyArIG5hbWUgKyAnXCIgYWxyZWFkeSBleGlzdHMuJyk7XG4gICAgfVxuXG4gICAgLy8gYWRkIGJhc2UgdXJsIGlmIHRoaXMgaXNuJ3QgYW4gYWJzb2x1dGUgdXJsXG4gICAgdXJsID0gdGhpcy5faGFuZGxlQmFzZVVybCh1cmwpO1xuXG4gICAgLy8gY3JlYXRlIHRoZSBzdG9yZSB0aGUgcmVzb3VyY2VcbiAgICB0aGlzLnJlc291cmNlc1tuYW1lXSA9IG5ldyBSZXNvdXJjZShuYW1lLCB1cmwsIG9wdGlvbnMpO1xuXG4gICAgaWYgKHR5cGVvZiBjYiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB0aGlzLnJlc291cmNlc1tuYW1lXS5vbmNlKCdhZnRlck1pZGRsZXdhcmUnLCBjYik7XG4gICAgfVxuXG4gICAgdGhpcy5fbnVtVG9Mb2FkKys7XG5cbiAgICAvLyBpZiBhbHJlYWR5IGxvYWRpbmcgYWRkIGl0IHRvIHRoZSB3b3JrZXIgcXVldWVcbiAgICBpZiAodGhpcy5fcXVldWUuc3RhcnRlZCkge1xuICAgICAgICB0aGlzLl9xdWV1ZS5wdXNoKHRoaXMucmVzb3VyY2VzW25hbWVdKTtcbiAgICAgICAgdGhpcy5fcHJvZ3Jlc3NDaHVuayA9ICgxMDAgLSB0aGlzLnByb2dyZXNzKSAvICh0aGlzLl9xdWV1ZS5sZW5ndGgoKSArIHRoaXMuX3F1ZXVlLnJ1bm5pbmcoKSk7XG4gICAgfVxuICAgIC8vIG90aGVyd2lzZSBidWZmZXIgaXQgdG8gYmUgYWRkZWQgdG8gdGhlIHF1ZXVlIGxhdGVyXG4gICAgZWxzZSB7XG4gICAgICAgIHRoaXMuX2J1ZmZlci5wdXNoKHRoaXMucmVzb3VyY2VzW25hbWVdKTtcbiAgICAgICAgdGhpcy5fcHJvZ3Jlc3NDaHVuayA9IDEwMCAvIHRoaXMuX2J1ZmZlci5sZW5ndGg7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG5Mb2FkZXIucHJvdG90eXBlLl9oYW5kbGVCYXNlVXJsID0gZnVuY3Rpb24gKHVybCkge1xuICAgIHZhciBwYXJzZWRVcmwgPSB1cmxQYXJzZXIucGFyc2UodXJsKTtcblxuICAgIC8vIGFic29sdXRlIHVybCwganVzdCB1c2UgaXQgYXMgaXMuXG4gICAgaWYgKHBhcnNlZFVybC5wcm90b2NvbCB8fCBwYXJzZWRVcmwucGF0aG5hbWUuaW5kZXhPZignLy8nKSA9PT0gMCkge1xuICAgICAgICByZXR1cm4gdXJsO1xuICAgIH1cblxuICAgIC8vIGlmIGJhc2VVcmwgZG9lc24ndCBlbmQgaW4gc2xhc2ggYW5kIHVybCBkb2Vzbid0IHN0YXJ0IHdpdGggc2xhc2gsIHRoZW4gYWRkIGEgc2xhc2ggaW5iZXR3ZWVuXG4gICAgaWYgKFxuICAgICAgICB0aGlzLmJhc2VVcmwubGVuZ3RoICYmXG4gICAgICAgIHRoaXMuYmFzZVVybC5sYXN0SW5kZXhPZignLycpICE9PSB0aGlzLmJhc2VVcmwubGVuZ3RoIC0gMSAmJlxuICAgICAgICB1cmwuY2hhckF0KDApICE9PSAnLydcbiAgICApIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYmFzZVVybCArICcvJyArIHVybDtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHJldHVybiB0aGlzLmJhc2VVcmwgKyB1cmw7XG4gICAgfVxufTtcblxuXG4vKipcbiAqIFNldHMgdXAgYSBtaWRkbGV3YXJlIGZ1bmN0aW9uIHRoYXQgd2lsbCBydW4gKmJlZm9yZSogdGhlXG4gKiByZXNvdXJjZSBpcyBsb2FkZWQuXG4gKlxuICogQGFsaWFzIHByZVxuICogQHBhcmFtIG1pZGRsZXdhcmUge2Z1bmN0aW9ufSBUaGUgbWlkZGxld2FyZSBmdW5jdGlvbiB0byByZWdpc3Rlci5cbiAqIEByZXR1cm4ge0xvYWRlcn1cbiAqL1xuTG9hZGVyLnByb3RvdHlwZS5iZWZvcmUgPSBMb2FkZXIucHJvdG90eXBlLnByZSA9IGZ1bmN0aW9uIChmbikge1xuICAgIHRoaXMuX2JlZm9yZU1pZGRsZXdhcmUucHVzaChmbik7XG5cbiAgICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogU2V0cyB1cCBhIG1pZGRsZXdhcmUgZnVuY3Rpb24gdGhhdCB3aWxsIHJ1biAqYWZ0ZXIqIHRoZVxuICogcmVzb3VyY2UgaXMgbG9hZGVkLlxuICpcbiAqIEBhbGlhcyB1c2VcbiAqIEBwYXJhbSBtaWRkbGV3YXJlIHtmdW5jdGlvbn0gVGhlIG1pZGRsZXdhcmUgZnVuY3Rpb24gdG8gcmVnaXN0ZXIuXG4gKiBAcmV0dXJuIHtMb2FkZXJ9XG4gKi9cbkxvYWRlci5wcm90b3R5cGUuYWZ0ZXIgPSBMb2FkZXIucHJvdG90eXBlLnVzZSA9IGZ1bmN0aW9uIChmbikge1xuICAgIHRoaXMuX2FmdGVyTWlkZGxld2FyZS5wdXNoKGZuKTtcblxuICAgIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBSZXNldHMgdGhlIHF1ZXVlIG9mIHRoZSBsb2FkZXIgdG8gcHJlcGFyZSBmb3IgYSBuZXcgbG9hZC5cbiAqXG4gKiBAcmV0dXJuIHtMb2FkZXJ9XG4gKi9cbkxvYWRlci5wcm90b3R5cGUucmVzZXQgPSBmdW5jdGlvbiAoKSB7XG4gICAgLy8gdGhpcy5iYXNlVXJsID0gYmFzZVVybCB8fCAnJztcblxuICAgIHRoaXMucHJvZ3Jlc3MgPSAwO1xuXG4gICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XG5cbiAgICB0aGlzLl9wcm9ncmVzc0NodW5rID0gMDtcblxuICAgIC8vIHRoaXMuX2JlZm9yZU1pZGRsZXdhcmUubGVuZ3RoID0gMDtcbiAgICAvLyB0aGlzLl9hZnRlck1pZGRsZXdhcmUubGVuZ3RoID0gMDtcblxuICAgIHRoaXMuX2J1ZmZlci5sZW5ndGggPSAwO1xuXG4gICAgdGhpcy5fbnVtVG9Mb2FkID0gMDtcblxuICAgIHRoaXMuX3F1ZXVlLmtpbGwoKTtcbiAgICB0aGlzLl9xdWV1ZS5zdGFydGVkID0gZmFsc2U7XG5cbiAgICB0aGlzLnJlc291cmNlcyA9IHt9O1xufTtcblxuLyoqXG4gKiBTdGFydHMgbG9hZGluZyB0aGUgcXVldWVkIHJlc291cmNlcy5cbiAqXG4gKiBAZmlyZXMgc3RhcnRcbiAqIEBwYXJhbSBbY2FsbGJhY2tdIHtmdW5jdGlvbn0gT3B0aW9uYWwgY2FsbGJhY2sgdGhhdCB3aWxsIGJlIGJvdW5kIHRvIHRoZSBgY29tcGxldGVgIGV2ZW50LlxuICogQHJldHVybiB7TG9hZGVyfVxuICovXG5Mb2FkZXIucHJvdG90eXBlLmxvYWQgPSBmdW5jdGlvbiAoY2IpIHtcbiAgICAvLyByZWdpc3RlciBjb21wbGV0ZSBjYWxsYmFjayBpZiB0aGV5IHBhc3Mgb25lXG4gICAgaWYgKHR5cGVvZiBjYiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB0aGlzLm9uY2UoJ2NvbXBsZXRlJywgY2IpO1xuICAgIH1cblxuICAgIC8vIGlmIHRoZSBxdWV1ZSBoYXMgYWxyZWFkeSBzdGFydGVkIHdlIGFyZSBkb25lIGhlcmVcbiAgICBpZiAodGhpcy5fcXVldWUuc3RhcnRlZCkge1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICAvLyBub3RpZnkgb2Ygc3RhcnRcbiAgICB0aGlzLmVtaXQoJ3N0YXJ0JywgdGhpcyk7XG5cbiAgICAvLyBzdGFydCB0aGUgaW50ZXJuYWwgcXVldWVcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuX2J1ZmZlci5sZW5ndGg7ICsraSkge1xuICAgICAgICB0aGlzLl9xdWV1ZS5wdXNoKHRoaXMuX2J1ZmZlcltpXSk7XG4gICAgfVxuXG4gICAgLy8gZW1wdHkgdGhlIGJ1ZmZlclxuICAgIHRoaXMuX2J1ZmZlci5sZW5ndGggPSAwO1xuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIExvYWRzIGEgc2luZ2xlIHJlc291cmNlLlxuICpcbiAqIEBmaXJlcyBwcm9ncmVzc1xuICogQHByaXZhdGVcbiAqL1xuTG9hZGVyLnByb3RvdHlwZS5fbG9hZFJlc291cmNlID0gZnVuY3Rpb24gKHJlc291cmNlLCBkZXF1ZXVlKSB7XG4gICAgdmFyIHNlbGYgPSB0aGlzO1xuXG4gICAgcmVzb3VyY2UuX2RlcXVldWUgPSBkZXF1ZXVlO1xuXG4gICAgdGhpcy5fcnVuTWlkZGxld2FyZShyZXNvdXJjZSwgdGhpcy5fYmVmb3JlTWlkZGxld2FyZSwgZnVuY3Rpb24gKCkge1xuICAgICAgICAvLyByZXNvdXJjZS5vbigncHJvZ3Jlc3MnLCBzZWxmLmVtaXQuYmluZChzZWxmLCAncHJvZ3Jlc3MnKSk7XG5cbiAgICAgICAgcmVzb3VyY2UubG9hZChzZWxmLl9ib3VuZE9uTG9hZCk7XG4gICAgfSk7XG59O1xuXG4vKipcbiAqIENhbGxlZCBvbmNlIGVhY2ggcmVzb3VyY2UgaGFzIGxvYWRlZC5cbiAqXG4gKiBAZmlyZXMgY29tcGxldGVcbiAqIEBwcml2YXRlXG4gKi9cbkxvYWRlci5wcm90b3R5cGUuX29uQ29tcGxldGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgdGhpcy5lbWl0KCdjb21wbGV0ZScsIHRoaXMsIHRoaXMucmVzb3VyY2VzKTtcbn07XG5cbi8qKlxuICogQ2FsbGVkIGVhY2ggdGltZSBhIHJlc291cmNlcyBpcyBsb2FkZWQuXG4gKlxuICogQGZpcmVzIHByb2dyZXNzXG4gKiBAZmlyZXMgZXJyb3JcbiAqIEBmaXJlcyBsb2FkXG4gKiBAcHJpdmF0ZVxuICovXG5Mb2FkZXIucHJvdG90eXBlLl9vbkxvYWQgPSBmdW5jdGlvbiAocmVzb3VyY2UpIHtcbiAgICB0aGlzLnByb2dyZXNzICs9IHRoaXMuX3Byb2dyZXNzQ2h1bms7XG5cbiAgICB0aGlzLmVtaXQoJ3Byb2dyZXNzJywgdGhpcywgcmVzb3VyY2UpO1xuXG4gICAgLy8gcnVuIG1pZGRsZXdhcmUsIHRoaXMgKm11c3QqIGhhcHBlbiBiZWZvcmUgZGVxdWV1ZSBzbyBzdWItYXNzZXRzIGdldCBhZGRlZCBwcm9wZXJseVxuICAgIHRoaXMuX3J1bk1pZGRsZXdhcmUocmVzb3VyY2UsIHRoaXMuX2FmdGVyTWlkZGxld2FyZSwgZnVuY3Rpb24gKCkge1xuICAgICAgICByZXNvdXJjZS5lbWl0KCdhZnRlck1pZGRsZXdhcmUnLCByZXNvdXJjZSk7XG5cbiAgICAgICAgdGhpcy5fbnVtVG9Mb2FkLS07XG5cbiAgICAgICAgLy8gZG8gY29tcGxldGlvbiBjaGVja1xuICAgICAgICBpZiAodGhpcy5fbnVtVG9Mb2FkID09PSAwKSB7XG4gICAgICAgICAgICB0aGlzLnByb2dyZXNzID0gMTAwO1xuICAgICAgICAgICAgdGhpcy5fb25Db21wbGV0ZSgpO1xuICAgICAgICB9XG4gICAgICAgIFxuICAgICAgICBpZiAocmVzb3VyY2UuZXJyb3IpIHtcbiAgICAgICAgICAgIHRoaXMuZW1pdCgnZXJyb3InLCByZXNvdXJjZS5lcnJvciwgdGhpcywgcmVzb3VyY2UpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5lbWl0KCdsb2FkJywgdGhpcywgcmVzb3VyY2UpO1xuICAgICAgICB9XG4gICAgfSk7XG4gICAgXG5cblxuICAgIC8vIHJlbW92ZSB0aGlzIHJlc291cmNlIGZyb20gdGhlIGFzeW5jIHF1ZXVlXG4gICAgcmVzb3VyY2UuX2RlcXVldWUoKTtcbn07XG5cbi8qKlxuICogUnVuIG1pZGRsZXdhcmUgZnVuY3Rpb25zIG9uIGEgcmVzb3VyY2UuXG4gKlxuICogQHByaXZhdGVcbiAqL1xuTG9hZGVyLnByb3RvdHlwZS5fcnVuTWlkZGxld2FyZSA9IGZ1bmN0aW9uIChyZXNvdXJjZSwgZm5zLCBjYikge1xuICAgIHZhciBzZWxmID0gdGhpcztcblxuICAgIGFzeW5jLmVhY2hTZXJpZXMoZm5zLCBmdW5jdGlvbiAoZm4sIG5leHQpIHtcbiAgICAgICAgZm4uY2FsbChzZWxmLCByZXNvdXJjZSwgbmV4dCk7XG4gICAgfSwgY2IuYmluZCh0aGlzLCByZXNvdXJjZSkpO1xufTtcblxuTG9hZGVyLkxPQURfVFlQRSA9IFJlc291cmNlLkxPQURfVFlQRTtcbkxvYWRlci5YSFJfUkVBRFlfU1RBVEUgPSBSZXNvdXJjZS5YSFJfUkVBRFlfU1RBVEU7XG5Mb2FkZXIuWEhSX1JFU1BPTlNFX1RZUEUgPSBSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRTtcbiIsInZhciBFdmVudEVtaXR0ZXIgPSByZXF1aXJlKCdldmVudGVtaXR0ZXIzJyksXG4gICAgX3VybCA9IHJlcXVpcmUoJ3VybCcpLFxuICAgIC8vIHRlc3RzIGlzIENPUlMgaXMgc3VwcG9ydGVkIGluIFhIUiwgaWYgbm90IHdlIG5lZWQgdG8gdXNlIFhEUlxuICAgIHVzZVhkciA9ICEhKHdpbmRvdy5YRG9tYWluUmVxdWVzdCAmJiAhKCd3aXRoQ3JlZGVudGlhbHMnIGluIChuZXcgWE1MSHR0cFJlcXVlc3QoKSkpKSxcbiAgICB0ZW1wQW5jaG9yID0gbnVsbDtcblxuLyoqXG4gKiBNYW5hZ2VzIHRoZSBzdGF0ZSBhbmQgbG9hZGluZyBvZiBhIHNpbmdsZSByZXNvdXJjZSByZXByZXNlbnRlZCBieVxuICogYSBzaW5nbGUgVVJMLlxuICpcbiAqIEBjbGFzc1xuICogQHBhcmFtIG5hbWUge3N0cmluZ30gVGhlIG5hbWUgb2YgdGhlIHJlc291cmNlIHRvIGxvYWQuXG4gKiBAcGFyYW0gdXJsIHtzdHJpbmd8c3RyaW5nW119IFRoZSB1cmwgZm9yIHRoaXMgcmVzb3VyY2UsIGZvciBhdWRpby92aWRlbyBsb2FkcyB5b3UgY2FuIHBhc3MgYW4gYXJyYXkgb2Ygc291cmNlcy5cbiAqIEBwYXJhbSBbb3B0aW9uc10ge29iamVjdH0gVGhlIG9wdGlvbnMgZm9yIHRoZSBsb2FkLlxuICogQHBhcmFtIFtvcHRpb25zLmNyb3NzT3JpZ2luXSB7c3RyaW5nfGJvb2xlYW59IElzIHRoaXMgcmVxdWVzdCBjcm9zcy1vcmlnaW4/IERlZmF1bHQgaXMgdG8gZGV0ZXJtaW5lIGF1dG9tYXRpY2FsbHkuXG4gKiBAcGFyYW0gW29wdGlvbnMubG9hZFR5cGU9UmVzb3VyY2UuTE9BRF9UWVBFLlhIUl0ge1Jlc291cmNlLkxPQURfVFlQRX0gSG93IHNob3VsZCB0aGlzIHJlc291cmNlIGJlIGxvYWRlZD9cbiAqIEBwYXJhbSBbb3B0aW9ucy54aHJUeXBlPVJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkRFRkFVTFRdIHtSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRX0gSG93IHNob3VsZCB0aGUgZGF0YSBiZWluZ1xuICogICAgICBsb2FkZWQgYmUgaW50ZXJwcmV0ZWQgd2hlbiB1c2luZyBYSFI/XG4gKiBAcGFyYW0gW29wdGlvbnMubWV0YWRhdGFdIHtvYmplY3R9IEV4dHJhIGluZm8gZm9yIG1pZGRsZXdhcmUuXG4gKi9cbmZ1bmN0aW9uIFJlc291cmNlKG5hbWUsIHVybCwgb3B0aW9ucykge1xuICAgIEV2ZW50RW1pdHRlci5jYWxsKHRoaXMpO1xuXG4gICAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG5cbiAgICBpZiAodHlwZW9mIG5hbWUgIT09ICdzdHJpbmcnIHx8IHR5cGVvZiB1cmwgIT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignQm90aCBuYW1lIGFuZCB1cmwgYXJlIHJlcXVpcmVkIGZvciBjb25zdHJ1Y3RpbmcgYSByZXNvdXJjZS4nKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGUgbmFtZSBvZiB0aGlzIHJlc291cmNlLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7c3RyaW5nfVxuICAgICAqIEByZWFkb25seVxuICAgICAqL1xuICAgIHRoaXMubmFtZSA9IG5hbWU7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgdXJsIHVzZWQgdG8gbG9hZCB0aGlzIHJlc291cmNlLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7c3RyaW5nfVxuICAgICAqIEByZWFkb25seVxuICAgICAqL1xuICAgIHRoaXMudXJsID0gdXJsO1xuXG4gICAgLyoqXG4gICAgICogU3RvcmVzIHdoZXRoZXIgb3Igbm90IHRoaXMgdXJsIGlzIGEgZGF0YSB1cmwuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqIEByZWFkb25seVxuICAgICAqL1xuICAgIHRoaXMuaXNEYXRhVXJsID0gdGhpcy51cmwuaW5kZXhPZignZGF0YTonKSA9PT0gMDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBkYXRhIHRoYXQgd2FzIGxvYWRlZCBieSB0aGUgcmVzb3VyY2UuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHthbnl9XG4gICAgICovXG4gICAgdGhpcy5kYXRhID0gbnVsbDtcblxuICAgIC8qKlxuICAgICAqIElzIHRoaXMgcmVxdWVzdCBjcm9zcy1vcmlnaW4/IElmIHVuc2V0LCBkZXRlcm1pbmVkIGF1dG9tYXRpY2FsbHkuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtzdHJpbmd9XG4gICAgICovXG4gICAgdGhpcy5jcm9zc09yaWdpbiA9IG9wdGlvbnMuY3Jvc3NPcmlnaW4gPT09IHRydWUgPyAnYW5vbnltb3VzJyA6IG9wdGlvbnMuY3Jvc3NPcmlnaW47XG5cbiAgICAvKipcbiAgICAgKiBUaGUgbWV0aG9kIG9mIGxvYWRpbmcgdG8gdXNlIGZvciB0aGlzIHJlc291cmNlLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UmVzb3VyY2UuTE9BRF9UWVBFfVxuICAgICAqL1xuICAgIHRoaXMubG9hZFR5cGUgPSBvcHRpb25zLmxvYWRUeXBlIHx8IHRoaXMuX2RldGVybWluZUxvYWRUeXBlKCk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgdHlwZSB1c2VkIHRvIGxvYWQgdGhlIHJlc291cmNlIHZpYSBYSFIuIElmIHVuc2V0LCBkZXRlcm1pbmVkIGF1dG9tYXRpY2FsbHkuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtzdHJpbmd9XG4gICAgICovXG4gICAgdGhpcy54aHJUeXBlID0gb3B0aW9ucy54aHJUeXBlO1xuXG4gICAgLyoqXG4gICAgICogRXh0cmEgaW5mbyBmb3IgbWlkZGxld2FyZVxuICAgICAqXG4gICAgICogQG1lbWJlciB7b2JqZWN0fVxuICAgICAqL1xuICAgIHRoaXMubWV0YWRhdGEgPSBvcHRpb25zLm1ldGFkYXRhIHx8IHt9O1xuXG4gICAgLyoqXG4gICAgICogVGhlIGVycm9yIHRoYXQgb2NjdXJyZWQgd2hpbGUgbG9hZGluZyAoaWYgYW55KS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge0Vycm9yfVxuICAgICAqIEByZWFkb25seVxuICAgICAqL1xuICAgIHRoaXMuZXJyb3IgPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogVGhlIFhIUiBvYmplY3QgdGhhdCB3YXMgdXNlZCB0byBsb2FkIHRoaXMgcmVzb3VyY2UuIFRoaXMgaXMgb25seSBzZXRcbiAgICAgKiB3aGVuIGBsb2FkVHlwZWAgaXMgYFJlc291cmNlLkxPQURfVFlQRS5YSFJgLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7WE1MSHR0cFJlcXVlc3R9XG4gICAgICovXG4gICAgdGhpcy54aHIgPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogRGVzY3JpYmVzIGlmIHRoaXMgcmVzb3VyY2Ugd2FzIGxvYWRlZCBhcyBqc29uLiBPbmx5IHZhbGlkIGFmdGVyIHRoZSByZXNvdXJjZVxuICAgICAqIGhhcyBjb21wbGV0ZWx5IGxvYWRlZC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICovXG4gICAgdGhpcy5pc0pzb24gPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIERlc2NyaWJlcyBpZiB0aGlzIHJlc291cmNlIHdhcyBsb2FkZWQgYXMgeG1sLiBPbmx5IHZhbGlkIGFmdGVyIHRoZSByZXNvdXJjZVxuICAgICAqIGhhcyBjb21wbGV0ZWx5IGxvYWRlZC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICovXG4gICAgdGhpcy5pc1htbCA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogRGVzY3JpYmVzIGlmIHRoaXMgcmVzb3VyY2Ugd2FzIGxvYWRlZCBhcyBhbiBpbWFnZSB0YWcuIE9ubHkgdmFsaWQgYWZ0ZXIgdGhlIHJlc291cmNlXG4gICAgICogaGFzIGNvbXBsZXRlbHkgbG9hZGVkLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKi9cbiAgICB0aGlzLmlzSW1hZ2UgPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIERlc2NyaWJlcyBpZiB0aGlzIHJlc291cmNlIHdhcyBsb2FkZWQgYXMgYW4gYXVkaW8gdGFnLiBPbmx5IHZhbGlkIGFmdGVyIHRoZSByZXNvdXJjZVxuICAgICAqIGhhcyBjb21wbGV0ZWx5IGxvYWRlZC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICovXG4gICAgdGhpcy5pc0F1ZGlvID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBEZXNjcmliZXMgaWYgdGhpcyByZXNvdXJjZSB3YXMgbG9hZGVkIGFzIGEgdmlkZW8gdGFnLiBPbmx5IHZhbGlkIGFmdGVyIHRoZSByZXNvdXJjZVxuICAgICAqIGhhcyBjb21wbGV0ZWx5IGxvYWRlZC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICovXG4gICAgdGhpcy5pc1ZpZGVvID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYGRlcXVldWVgIG1ldGhvZCB0aGF0IHdpbGwgYmUgdXNlZCBhIHN0b3JhZ2UgcGxhY2UgZm9yIHRoZSBhc3luYyBxdWV1ZSBkZXF1ZXVlIG1ldGhvZFxuICAgICAqIHVzZWQgcHJpdmF0ZWx5IGJ5IHRoZSBsb2FkZXIuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtmdW5jdGlvbn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX2RlcXVldWUgPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGBjb21wbGV0ZWAgZnVuY3Rpb24gYm91bmQgdG8gdGhpcyByZXNvdXJjZSdzIGNvbnRleHQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtmdW5jdGlvbn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX2JvdW5kQ29tcGxldGUgPSB0aGlzLmNvbXBsZXRlLmJpbmQodGhpcyk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYF9vbkVycm9yYCBmdW5jdGlvbiBib3VuZCB0byB0aGlzIHJlc291cmNlJ3MgY29udGV4dC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Z1bmN0aW9ufVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fYm91bmRPbkVycm9yID0gdGhpcy5fb25FcnJvci5iaW5kKHRoaXMpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGBfb25Qcm9ncmVzc2AgZnVuY3Rpb24gYm91bmQgdG8gdGhpcyByZXNvdXJjZSdzIGNvbnRleHQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtmdW5jdGlvbn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX2JvdW5kT25Qcm9ncmVzcyA9IHRoaXMuX29uUHJvZ3Jlc3MuYmluZCh0aGlzKTtcblxuICAgIC8vIHhociBjYWxsYmFja3NcbiAgICB0aGlzLl9ib3VuZFhock9uRXJyb3IgPSB0aGlzLl94aHJPbkVycm9yLmJpbmQodGhpcyk7XG4gICAgdGhpcy5fYm91bmRYaHJPbkFib3J0ID0gdGhpcy5feGhyT25BYm9ydC5iaW5kKHRoaXMpO1xuICAgIHRoaXMuX2JvdW5kWGhyT25Mb2FkID0gdGhpcy5feGhyT25Mb2FkLmJpbmQodGhpcyk7XG4gICAgdGhpcy5fYm91bmRYZHJPblRpbWVvdXQgPSB0aGlzLl94ZHJPblRpbWVvdXQuYmluZCh0aGlzKTtcblxuICAgIC8qKlxuICAgICAqIEVtaXR0ZWQgd2hlbiB0aGUgcmVzb3VyY2UgYmVpbmdzIHRvIGxvYWQuXG4gICAgICpcbiAgICAgKiBAZXZlbnQgc3RhcnRcbiAgICAgKiBAbWVtYmVyb2YgUmVzb3VyY2UjXG4gICAgICovXG5cbiAgICAvKipcbiAgICAgKiBFbWl0dGVkIGVhY2ggdGltZSBwcm9ncmVzcyBvZiB0aGlzIHJlc291cmNlIGxvYWQgdXBkYXRlcy5cbiAgICAgKiBOb3QgYWxsIHJlc291cmNlcyB0eXBlcyBhbmQgbG9hZGVyIHN5c3RlbXMgY2FuIHN1cHBvcnQgdGhpcyBldmVudFxuICAgICAqIHNvIHNvbWV0aW1lcyBpdCBtYXkgbm90IGJlIGF2YWlsYWJsZS4gSWYgdGhlIHJlc291cmNlXG4gICAgICogaXMgYmVpbmcgbG9hZGVkIG9uIGEgbW9kZXJuIGJyb3dzZXIsIHVzaW5nIFhIUiwgYW5kIHRoZSByZW1vdGUgc2VydmVyXG4gICAgICogcHJvcGVybHkgc2V0cyBDb250ZW50LUxlbmd0aCBoZWFkZXJzLCB0aGVuIHRoaXMgd2lsbCBiZSBhdmFpbGFibGUuXG4gICAgICpcbiAgICAgKiBAZXZlbnQgcHJvZ3Jlc3NcbiAgICAgKiBAbWVtYmVyb2YgUmVzb3VyY2UjXG4gICAgICovXG5cbiAgICAvKipcbiAgICAgKiBFbWl0dGVkIG9uY2UgdGhpcyByZXNvdXJjZSBoYXMgbG9hZGVkLCBpZiB0aGVyZSB3YXMgYW4gZXJyb3IgaXQgd2lsbFxuICAgICAqIGJlIGluIHRoZSBgZXJyb3JgIHByb3BlcnR5LlxuICAgICAqXG4gICAgICogQGV2ZW50IGNvbXBsZXRlXG4gICAgICogQG1lbWJlcm9mIFJlc291cmNlI1xuICAgICAqL1xufVxuXG5SZXNvdXJjZS5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKEV2ZW50RW1pdHRlci5wcm90b3R5cGUpO1xuUmVzb3VyY2UucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gUmVzb3VyY2U7XG5tb2R1bGUuZXhwb3J0cyA9IFJlc291cmNlO1xuXG4vKipcbiAqIE1hcmtzIHRoZSByZXNvdXJjZSBhcyBjb21wbGV0ZS5cbiAqXG4gKiBAZmlyZXMgY29tcGxldGVcbiAqL1xuUmVzb3VyY2UucHJvdG90eXBlLmNvbXBsZXRlID0gZnVuY3Rpb24gKCkge1xuICAgIC8vIFRPRE86IENsZWFuIHRoaXMgdXAgaW4gYSB3cmFwcGVyIG9yIHNvbWV0aGluZy4uLmdyb3NzLi4uLlxuICAgIGlmICh0aGlzLmRhdGEgJiYgdGhpcy5kYXRhLnJlbW92ZUV2ZW50TGlzdGVuZXIpIHtcbiAgICAgICAgdGhpcy5kYXRhLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2Vycm9yJywgdGhpcy5fYm91bmRPbkVycm9yKTtcbiAgICAgICAgdGhpcy5kYXRhLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2xvYWQnLCB0aGlzLl9ib3VuZENvbXBsZXRlKTtcbiAgICAgICAgdGhpcy5kYXRhLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3Byb2dyZXNzJywgdGhpcy5fYm91bmRPblByb2dyZXNzKTtcbiAgICAgICAgdGhpcy5kYXRhLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2NhbnBsYXl0aHJvdWdoJywgdGhpcy5fYm91bmRDb21wbGV0ZSk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMueGhyKSB7XG4gICAgICAgIGlmICh0aGlzLnhoci5yZW1vdmVFdmVudExpc3RlbmVyKSB7XG4gICAgICAgICAgICB0aGlzLnhoci5yZW1vdmVFdmVudExpc3RlbmVyKCdlcnJvcicsIHRoaXMuX2JvdW5kWGhyT25FcnJvcik7XG4gICAgICAgICAgICB0aGlzLnhoci5yZW1vdmVFdmVudExpc3RlbmVyKCdhYm9ydCcsIHRoaXMuX2JvdW5kWGhyT25BYm9ydCk7XG4gICAgICAgICAgICB0aGlzLnhoci5yZW1vdmVFdmVudExpc3RlbmVyKCdwcm9ncmVzcycsIHRoaXMuX2JvdW5kT25Qcm9ncmVzcyk7XG4gICAgICAgICAgICB0aGlzLnhoci5yZW1vdmVFdmVudExpc3RlbmVyKCdsb2FkJywgdGhpcy5fYm91bmRYaHJPbkxvYWQpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy54aHIub25lcnJvciA9IG51bGw7XG4gICAgICAgICAgICB0aGlzLnhoci5vbnRpbWVvdXQgPSBudWxsO1xuICAgICAgICAgICAgdGhpcy54aHIub25wcm9ncmVzcyA9IG51bGw7XG4gICAgICAgICAgICB0aGlzLnhoci5vbmxvYWQgPSBudWxsO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5lbWl0KCdjb21wbGV0ZScsIHRoaXMpO1xufTtcblxuLyoqXG4gKiBLaWNrcyBvZmYgbG9hZGluZyBvZiB0aGlzIHJlc291cmNlLlxuICpcbiAqIEBmaXJlcyBzdGFydFxuICogQHBhcmFtIFtjYWxsYmFja10ge2Z1bmN0aW9ufSBPcHRpb25hbCBjYWxsYmFjayB0byBjYWxsIG9uY2UgdGhlIHJlc291cmNlIGlzIGxvYWRlZC5cbiAqL1xuUmVzb3VyY2UucHJvdG90eXBlLmxvYWQgPSBmdW5jdGlvbiAoY2IpIHtcbiAgICB0aGlzLmVtaXQoJ3N0YXJ0JywgdGhpcyk7XG5cbiAgICAvLyBpZiBhIGNhbGxiYWNrIGlzIHNldCwgbGlzdGVuIGZvciBjb21wbGV0ZSBldmVudFxuICAgIGlmIChjYikge1xuICAgICAgICB0aGlzLm9uY2UoJ2NvbXBsZXRlJywgY2IpO1xuICAgIH1cblxuICAgIC8vIGlmIHVuc2V0LCBkZXRlcm1pbmUgdGhlIHZhbHVlXG4gICAgaWYgKHRoaXMuY3Jvc3NPcmlnaW4gPT09IGZhbHNlIHx8IHR5cGVvZiB0aGlzLmNyb3NzT3JpZ2luICE9PSAnc3RyaW5nJykge1xuICAgICAgICB0aGlzLmNyb3NzT3JpZ2luID0gdGhpcy5fZGV0ZXJtaW5lQ3Jvc3NPcmlnaW4odGhpcy51cmwpO1xuICAgIH1cblxuICAgIHN3aXRjaCh0aGlzLmxvYWRUeXBlKSB7XG4gICAgICAgIGNhc2UgUmVzb3VyY2UuTE9BRF9UWVBFLklNQUdFOlxuICAgICAgICAgICAgdGhpcy5fbG9hZEltYWdlKCk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIFJlc291cmNlLkxPQURfVFlQRS5BVURJTzpcbiAgICAgICAgICAgIHRoaXMuX2xvYWRFbGVtZW50KCdhdWRpbycpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSBSZXNvdXJjZS5MT0FEX1RZUEUuVklERU86XG4gICAgICAgICAgICB0aGlzLl9sb2FkRWxlbWVudCgndmlkZW8nKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgUmVzb3VyY2UuTE9BRF9UWVBFLlhIUjpcbiAgICAgICAgICAgIC8qIGZhbGxzIHRocm91Z2ggKi9cbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIGlmICh1c2VYZHIgJiYgdGhpcy5jcm9zc09yaWdpbikge1xuICAgICAgICAgICAgICAgIHRoaXMuX2xvYWRYZHIoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuX2xvYWRYaHIoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGJyZWFrO1xuICAgIH1cbn07XG5cbi8qKlxuICogTG9hZHMgdGhpcyByZXNvdXJjZXMgdXNpbmcgYW4gSW1hZ2Ugb2JqZWN0LlxuICpcbiAqIEBwcml2YXRlXG4gKi9cblJlc291cmNlLnByb3RvdHlwZS5fbG9hZEltYWdlID0gZnVuY3Rpb24gKCkge1xuICAgIHRoaXMuZGF0YSA9IG5ldyBJbWFnZSgpO1xuXG4gICAgaWYgKHRoaXMuY3Jvc3NPcmlnaW4pIHtcbiAgICAgICAgdGhpcy5kYXRhLmNyb3NzT3JpZ2luID0gdGhpcy5jcm9zc09yaWdpbjtcbiAgICB9XG5cbiAgICB0aGlzLmRhdGEuc3JjID0gdGhpcy51cmw7XG5cbiAgICB0aGlzLmlzSW1hZ2UgPSB0cnVlO1xuXG4gICAgdGhpcy5kYXRhLmFkZEV2ZW50TGlzdGVuZXIoJ2Vycm9yJywgdGhpcy5fYm91bmRPbkVycm9yLCBmYWxzZSk7XG4gICAgdGhpcy5kYXRhLmFkZEV2ZW50TGlzdGVuZXIoJ2xvYWQnLCB0aGlzLl9ib3VuZENvbXBsZXRlLCBmYWxzZSk7XG4gICAgdGhpcy5kYXRhLmFkZEV2ZW50TGlzdGVuZXIoJ3Byb2dyZXNzJywgdGhpcy5fYm91bmRPblByb2dyZXNzLCBmYWxzZSk7XG59O1xuXG4vKipcbiAqIExvYWRzIHRoaXMgcmVzb3VyY2VzIHVzaW5nIGFuIEhUTUxBdWRpb0VsZW1lbnQgb3IgSFRNTFZpZGVvRWxlbWVudC5cbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5SZXNvdXJjZS5wcm90b3R5cGUuX2xvYWRFbGVtZW50ID0gZnVuY3Rpb24gKHR5cGUpIHtcbiAgICBpZiAodHlwZSA9PT0gJ2F1ZGlvJyAmJiB0eXBlb2YgQXVkaW8gIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIHRoaXMuZGF0YSA9IG5ldyBBdWRpbygpO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgdGhpcy5kYXRhID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCh0eXBlKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5kYXRhID09PSBudWxsKSB7XG4gICAgICAgIHRoaXMuZXJyb3IgPSBuZXcgRXJyb3IoJ1Vuc3VwcG9ydGVkIGVsZW1lbnQgJyArIHR5cGUpO1xuICAgICAgICB0aGlzLmNvbXBsZXRlKCk7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBzdXBwb3J0IGZvciBDb2Nvb25KUyBDYW52YXMrIHJ1bnRpbWUsIGxhY2tzIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NvdXJjZScpXG4gICAgaWYgKG5hdmlnYXRvci5pc0NvY29vbkpTKSB7XG4gICAgICAgIHRoaXMuZGF0YS5zcmMgPSBBcnJheS5pc0FycmF5KHRoaXMudXJsKSA/IHRoaXMudXJsWzBdIDogdGhpcy51cmw7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSh0aGlzLnVybCkpIHtcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy51cmwubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmRhdGEuYXBwZW5kQ2hpbGQodGhpcy5fY3JlYXRlU291cmNlKHR5cGUsIHRoaXMudXJsW2ldKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmRhdGEuYXBwZW5kQ2hpbGQodGhpcy5fY3JlYXRlU291cmNlKHR5cGUsIHRoaXMudXJsKSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzWydpcycgKyB0eXBlWzBdLnRvVXBwZXJDYXNlKCkgKyB0eXBlLnN1YnN0cmluZygxKV0gPSB0cnVlO1xuXG4gICAgdGhpcy5kYXRhLmFkZEV2ZW50TGlzdGVuZXIoJ2Vycm9yJywgdGhpcy5fYm91bmRPbkVycm9yLCBmYWxzZSk7XG4gICAgdGhpcy5kYXRhLmFkZEV2ZW50TGlzdGVuZXIoJ2xvYWQnLCB0aGlzLl9ib3VuZENvbXBsZXRlLCBmYWxzZSk7XG4gICAgdGhpcy5kYXRhLmFkZEV2ZW50TGlzdGVuZXIoJ3Byb2dyZXNzJywgdGhpcy5fYm91bmRPblByb2dyZXNzLCBmYWxzZSk7XG4gICAgdGhpcy5kYXRhLmFkZEV2ZW50TGlzdGVuZXIoJ2NhbnBsYXl0aHJvdWdoJywgdGhpcy5fYm91bmRDb21wbGV0ZSwgZmFsc2UpO1xuXG4gICAgdGhpcy5kYXRhLmxvYWQoKTtcbn07XG5cbi8qKlxuICogTG9hZHMgdGhpcyByZXNvdXJjZXMgdXNpbmcgYW4gWE1MSHR0cFJlcXVlc3QuXG4gKlxuICogQHByaXZhdGVcbiAqL1xuUmVzb3VyY2UucHJvdG90eXBlLl9sb2FkWGhyID0gZnVuY3Rpb24gKCkge1xuICAgIC8vIGlmIHVuc2V0LCBkZXRlcm1pbmUgdGhlIHZhbHVlXG4gICAgaWYgKHR5cGVvZiB0aGlzLnhoclR5cGUgIT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHRoaXMueGhyVHlwZSA9IHRoaXMuX2RldGVybWluZVhoclR5cGUoKTtcbiAgICB9XG5cbiAgICB2YXIgeGhyID0gdGhpcy54aHIgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTtcblxuICAgIC8vIHNldCB0aGUgcmVxdWVzdCB0eXBlIGFuZCB1cmxcbiAgICB4aHIub3BlbignR0VUJywgdGhpcy51cmwsIHRydWUpO1xuXG4gICAgLy8gbG9hZCBqc29uIGFzIHRleHQgYW5kIHBhcnNlIGl0IG91cnNlbHZlcy4gV2UgZG8gdGhpcyBiZWNhdXNlIHNvbWUgYnJvd3NlcnNcbiAgICAvLyAqY291Z2gqIHNhZmFyaSAqY291Z2gqIGNhbid0IGRlYWwgd2l0aCBpdC5cbiAgICBpZiAodGhpcy54aHJUeXBlID09PSBSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRS5KU09OIHx8IHRoaXMueGhyVHlwZSA9PT0gUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuRE9DVU1FTlQpIHtcbiAgICAgICAgeGhyLnJlc3BvbnNlVHlwZSA9IFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLlRFWFQ7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICB4aHIucmVzcG9uc2VUeXBlID0gdGhpcy54aHJUeXBlO1xuICAgIH1cblxuICAgIHhoci5hZGRFdmVudExpc3RlbmVyKCdlcnJvcicsIHRoaXMuX2JvdW5kWGhyT25FcnJvciwgZmFsc2UpO1xuICAgIHhoci5hZGRFdmVudExpc3RlbmVyKCdhYm9ydCcsIHRoaXMuX2JvdW5kWGhyT25BYm9ydCwgZmFsc2UpO1xuICAgIHhoci5hZGRFdmVudExpc3RlbmVyKCdwcm9ncmVzcycsIHRoaXMuX2JvdW5kT25Qcm9ncmVzcywgZmFsc2UpO1xuICAgIHhoci5hZGRFdmVudExpc3RlbmVyKCdsb2FkJywgdGhpcy5fYm91bmRYaHJPbkxvYWQsIGZhbHNlKTtcblxuICAgIHhoci5zZW5kKCk7XG59O1xuXG4vKipcbiAqIExvYWRzIHRoaXMgcmVzb3VyY2VzIHVzaW5nIGFuIFhEb21haW5SZXF1ZXN0LiBUaGlzIGlzIGhlcmUgYmVjYXVzZSB3ZSBuZWVkIHRvIHN1cHBvcnQgSUU5IChncm9zcykuXG4gKlxuICogQHByaXZhdGVcbiAqL1xuUmVzb3VyY2UucHJvdG90eXBlLl9sb2FkWGRyID0gZnVuY3Rpb24gKCkge1xuICAgIC8vIGlmIHVuc2V0LCBkZXRlcm1pbmUgdGhlIHZhbHVlXG4gICAgaWYgKHR5cGVvZiB0aGlzLnhoclR5cGUgIT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHRoaXMueGhyVHlwZSA9IHRoaXMuX2RldGVybWluZVhoclR5cGUoKTtcbiAgICB9XG5cbiAgICB2YXIgeGRyID0gdGhpcy54aHIgPSBuZXcgWERvbWFpblJlcXVlc3QoKTtcblxuICAgIC8vIFhEb21haW5SZXF1ZXN0IGhhcyBhIGZldyBxdWlya3MuIE9jY2FzaW9uYWxseSBpdCB3aWxsIGFib3J0IHJlcXVlc3RzXG4gICAgLy8gQSB3YXkgdG8gYXZvaWQgdGhpcyBpcyB0byBtYWtlIHN1cmUgQUxMIGNhbGxiYWNrcyBhcmUgc2V0IGV2ZW4gaWYgbm90IHVzZWRcbiAgICAvLyBNb3JlIGluZm8gaGVyZTogaHR0cDovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy8xNTc4Njk2Ni94ZG9tYWlucmVxdWVzdC1hYm9ydHMtcG9zdC1vbi1pZS05XG4gICAgeGRyLnRpbWVvdXQgPSA1MDAwO1xuXG4gICAgeGRyLm9uZXJyb3IgPSB0aGlzLl9ib3VuZFhock9uRXJyb3I7XG4gICAgeGRyLm9udGltZW91dCA9IHRoaXMuX2JvdW5kWGRyT25UaW1lb3V0O1xuICAgIHhkci5vbnByb2dyZXNzID0gdGhpcy5fYm91bmRPblByb2dyZXNzO1xuICAgIHhkci5vbmxvYWQgPSB0aGlzLl9ib3VuZFhock9uTG9hZDtcblxuICAgIHhkci5vcGVuKCdHRVQnLCB0aGlzLnVybCwgdHJ1ZSk7XG5cbiAgICAvLyAgTm90ZTogVGhlIHhkci5zZW5kKCkgY2FsbCBpcyB3cmFwcGVkIGluIGEgdGltZW91dCB0byBwcmV2ZW50IGFuIGlzc3VlIHdpdGggdGhlIGludGVyZmFjZSB3aGVyZSBzb21lIHJlcXVlc3RzIGFyZSBsb3N0XG4gICAgLy8gIGlmIG11bHRpcGxlIFhEb21haW5SZXF1ZXN0cyBhcmUgYmVpbmcgc2VudCBhdCB0aGUgc2FtZSB0aW1lLlxuICAgIC8vIFNvbWUgaW5mbyBoZXJlOiBodHRwczovL2dpdGh1Yi5jb20vcGhvdG9uc3Rvcm0vcGhhc2VyL2lzc3Vlcy8xMjQ4XG4gICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICAgIHhkci5zZW5kKCk7XG4gICAgfSwgMCk7XG59O1xuXG4vKipcbiAqIENyZWF0ZXMgYSBzb3VyY2UgdXNlZCBpbiBsb2FkaW5nIHZpYSBhbiBlbGVtZW50LlxuICpcbiAqIEBwYXJhbSB0eXBlIHtzdHJpbmd9IFRoZSBlbGVtZW50IHR5cGUgKHZpZGVvIG9yIGF1ZGlvKS5cbiAqIEBwYXJhbSB1cmwge3N0cmluZ30gVGhlIHNvdXJjZSBVUkwgdG8gbG9hZCBmcm9tLlxuICogQHBhcmFtIFttaW1lXSB7c3RyaW5nfSBUaGUgbWltZSB0eXBlIG9mIHRoZSB2aWRlb1xuICogQHByaXZhdGVcbiAqL1xuUmVzb3VyY2UucHJvdG90eXBlLl9jcmVhdGVTb3VyY2UgPSBmdW5jdGlvbiAodHlwZSwgdXJsLCBtaW1lKSB7XG4gICAgaWYgKCFtaW1lKSB7XG4gICAgICAgIG1pbWUgPSB0eXBlICsgJy8nICsgdXJsLnN1YnN0cih1cmwubGFzdEluZGV4T2YoJy4nKSArIDEpO1xuICAgIH1cblxuICAgIHZhciBzb3VyY2UgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzb3VyY2UnKTtcblxuICAgIHNvdXJjZS5zcmMgPSB1cmw7XG4gICAgc291cmNlLnR5cGUgPSBtaW1lO1xuXG4gICAgcmV0dXJuIHNvdXJjZTtcbn07XG5cbi8qKlxuICogQ2FsbGVkIGlmIGEgbG9hZCBlcnJvcnMgb3V0LlxuICpcbiAqIEBwYXJhbSBldmVudCB7RXZlbnR9IFRoZSBlcnJvciBldmVudCBmcm9tIHRoZSBlbGVtZW50IHRoYXQgZW1pdHMgaXQuXG4gKiBAcHJpdmF0ZVxuICovXG5SZXNvdXJjZS5wcm90b3R5cGUuX29uRXJyb3IgPSBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICB0aGlzLmVycm9yID0gbmV3IEVycm9yKCdGYWlsZWQgdG8gbG9hZCBlbGVtZW50IHVzaW5nICcgKyBldmVudC50YXJnZXQubm9kZU5hbWUpO1xuICAgIHRoaXMuY29tcGxldGUoKTtcbn07XG5cbi8qKlxuICogQ2FsbGVkIGlmIGEgbG9hZCBwcm9ncmVzcyBldmVudCBmaXJlcyBmb3IgeGhyL3hkci5cbiAqXG4gKiBAZmlyZXMgcHJvZ3Jlc3NcbiAqIEBwYXJhbSBldmVudCB7WE1MSHR0cFJlcXVlc3RQcm9ncmVzc0V2ZW50fEV2ZW50fVxuICogQHByaXZhdGVcbiAqL1xuUmVzb3VyY2UucHJvdG90eXBlLl9vblByb2dyZXNzID0gIGZ1bmN0aW9uIChldmVudCkge1xuICAgIGlmIChldmVudCAmJiBldmVudC5sZW5ndGhDb21wdXRhYmxlKSB7XG4gICAgICAgIHRoaXMuZW1pdCgncHJvZ3Jlc3MnLCB0aGlzLCBldmVudC5sb2FkZWQgLyBldmVudC50b3RhbCk7XG4gICAgfVxufTtcblxuLyoqXG4gKiBDYWxsZWQgaWYgYW4gZXJyb3IgZXZlbnQgZmlyZXMgZm9yIHhoci94ZHIuXG4gKlxuICogQHBhcmFtIGV2ZW50IHtYTUxIdHRwUmVxdWVzdEVycm9yRXZlbnR8RXZlbnR9XG4gKiBAcHJpdmF0ZVxuICovXG5SZXNvdXJjZS5wcm90b3R5cGUuX3hock9uRXJyb3IgPSBmdW5jdGlvbiAoKSB7XG4gICAgdGhpcy5lcnJvciA9IG5ldyBFcnJvcihcbiAgICAgICAgcmVxVHlwZSh0aGlzLnhocikgKyAnIFJlcXVlc3QgZmFpbGVkLiAnICtcbiAgICAgICAgJ1N0YXR1czogJyArIHRoaXMueGhyLnN0YXR1cyArICcsIHRleHQ6IFwiJyArIHRoaXMueGhyLnN0YXR1c1RleHQgKyAnXCInXG4gICAgKTtcblxuICAgIHRoaXMuY29tcGxldGUoKTtcbn07XG5cbi8qKlxuICogQ2FsbGVkIGlmIGFuIGFib3J0IGV2ZW50IGZpcmVzIGZvciB4aHIuXG4gKlxuICogQHBhcmFtIGV2ZW50IHtYTUxIdHRwUmVxdWVzdEFib3J0RXZlbnR9XG4gKiBAcHJpdmF0ZVxuICovXG5SZXNvdXJjZS5wcm90b3R5cGUuX3hock9uQWJvcnQgPSBmdW5jdGlvbiAoKSB7XG4gICAgdGhpcy5lcnJvciA9IG5ldyBFcnJvcihyZXFUeXBlKHRoaXMueGhyKSArICcgUmVxdWVzdCB3YXMgYWJvcnRlZCBieSB0aGUgdXNlci4nKTtcbiAgICB0aGlzLmNvbXBsZXRlKCk7XG59O1xuXG4vKipcbiAqIENhbGxlZCBpZiBhIHRpbWVvdXQgZXZlbnQgZmlyZXMgZm9yIHhkci5cbiAqXG4gKiBAcGFyYW0gZXZlbnQge0V2ZW50fVxuICogQHByaXZhdGVcbiAqL1xuUmVzb3VyY2UucHJvdG90eXBlLl94ZHJPblRpbWVvdXQgPSBmdW5jdGlvbiAoKSB7XG4gICAgdGhpcy5lcnJvciA9IG5ldyBFcnJvcihyZXFUeXBlKHRoaXMueGhyKSArICcgUmVxdWVzdCB0aW1lZCBvdXQuJyk7XG4gICAgdGhpcy5jb21wbGV0ZSgpO1xufTtcblxuLyoqXG4gKiBDYWxsZWQgd2hlbiBkYXRhIHN1Y2Nlc3NmdWxseSBsb2FkcyBmcm9tIGFuIHhoci94ZHIgcmVxdWVzdC5cbiAqXG4gKiBAcGFyYW0gZXZlbnQge1hNTEh0dHBSZXF1ZXN0TG9hZEV2ZW50fEV2ZW50fVxuICogQHByaXZhdGVcbiAqL1xuUmVzb3VyY2UucHJvdG90eXBlLl94aHJPbkxvYWQgPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHhociA9IHRoaXMueGhyLFxuICAgICAgICBzdGF0dXMgPSB4aHIuc3RhdHVzICE9PSB1bmRlZmluZWQgPyB4aHIuc3RhdHVzIDogMjAwOyAvL1hEUiBoYXMgbm8gYC5zdGF0dXNgLCBhc3N1bWUgMjAwLlxuXG4gICAgLy8gc3RhdHVzIGNhbiBiZSAwIHdoZW4gdXNpbmcgdGhlIGZpbGU6Ly8gcHJvdG9jb2wsIGFsc28gY2hlY2sgaWYgYSByZXNwb25zZSB3YXMgZm91bmRcbiAgICBpZiAoc3RhdHVzID09PSAyMDAgfHwgc3RhdHVzID09PSAyMDQgfHwgKHN0YXR1cyA9PT0gMCAmJiB4aHIucmVzcG9uc2VUZXh0Lmxlbmd0aCA+IDApKSB7XG4gICAgICAgIC8vIGlmIHRleHQsIGp1c3QgcmV0dXJuIGl0XG4gICAgICAgIGlmICh0aGlzLnhoclR5cGUgPT09IFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLlRFWFQpIHtcbiAgICAgICAgICAgIHRoaXMuZGF0YSA9IHhoci5yZXNwb25zZVRleHQ7XG4gICAgICAgIH1cbiAgICAgICAgLy8gaWYganNvbiwgcGFyc2UgaW50byBqc29uIG9iamVjdFxuICAgICAgICBlbHNlIGlmICh0aGlzLnhoclR5cGUgPT09IFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkpTT04pIHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgdGhpcy5kYXRhID0gSlNPTi5wYXJzZSh4aHIucmVzcG9uc2VUZXh0KTtcbiAgICAgICAgICAgICAgICB0aGlzLmlzSnNvbiA9IHRydWU7XG4gICAgICAgICAgICB9IGNhdGNoKGUpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmVycm9yID0gbmV3IEVycm9yKCdFcnJvciB0cnlpbmcgdG8gcGFyc2UgbG9hZGVkIGpzb246JywgZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8gaWYgeG1sLCBwYXJzZSBpbnRvIGFuIHhtbCBkb2N1bWVudCBvciBkaXYgZWxlbWVudFxuICAgICAgICBlbHNlIGlmICh0aGlzLnhoclR5cGUgPT09IFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkRPQ1VNRU5UKSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGlmICh3aW5kb3cuRE9NUGFyc2VyKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBkb21wYXJzZXIgPSBuZXcgRE9NUGFyc2VyKCk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGF0YSA9IGRvbXBhcnNlci5wYXJzZUZyb21TdHJpbmcoeGhyLnJlc3BvbnNlVGV4dCwgJ3RleHQveG1sJyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB2YXIgZGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgICAgICAgICAgICAgIGRpdi5pbm5lckhUTUwgPSB4aHIucmVzcG9uc2VUZXh0O1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmRhdGEgPSBkaXY7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXMuaXNYbWwgPSB0cnVlO1xuICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgIHRoaXMuZXJyb3IgPSBuZXcgRXJyb3IoJ0Vycm9yIHRyeWluZyB0byBwYXJzZSBsb2FkZWQgeG1sOicsIGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIG90aGVyIHR5cGVzIGp1c3QgcmV0dXJuIHRoZSByZXNwb25zZVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuZGF0YSA9IHhoci5yZXNwb25zZSB8fCB4aHIucmVzcG9uc2VUZXh0O1xuICAgICAgICB9XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICB0aGlzLmVycm9yID0gbmV3IEVycm9yKCdbJyArIHhoci5zdGF0dXMgKyAnXScgKyB4aHIuc3RhdHVzVGV4dCArICc6JyArIHhoci5yZXNwb25zZVVSTCk7XG4gICAgfVxuXG4gICAgdGhpcy5jb21wbGV0ZSgpO1xufTtcblxuZnVuY3Rpb24gcmVxVHlwZSh4aHIpIHtcbiAgICByZXR1cm4geGhyLnRvU3RyaW5nKCkucmVwbGFjZSgnb2JqZWN0ICcsICcnKTtcbn1cblxuLyoqXG4gKiBTZXRzIHRoZSBgY3Jvc3NPcmlnaW5gIHByb3BlcnR5IGZvciB0aGlzIHJlc291cmNlIGJhc2VkIG9uIGlmIHRoZSB1cmxcbiAqIGZvciB0aGlzIHJlc291cmNlIGlzIGNyb3NzLW9yaWdpbi4gSWYgY3Jvc3NPcmlnaW4gd2FzIG1hbnVhbGx5IHNldCwgdGhpc1xuICogZnVuY3Rpb24gZG9lcyBub3RoaW5nLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0gdXJsIHtzdHJpbmd9IFRoZSB1cmwgdG8gdGVzdC5cbiAqIEBwYXJhbSBbbG9jYXRpb249d2luZG93LmxvY2F0aW9uXSB7b2JqZWN0fSBUaGUgbG9jYXRpb24gb2JqZWN0IHRvIHRlc3QgYWdhaW5zdC5cbiAqIEByZXR1cm4ge3N0cmluZ30gVGhlIGNyb3NzT3JpZ2luIHZhbHVlIHRvIHVzZSAob3IgZW1wdHkgc3RyaW5nIGZvciBub25lKS5cbiAqL1xuUmVzb3VyY2UucHJvdG90eXBlLl9kZXRlcm1pbmVDcm9zc09yaWdpbiA9IGZ1bmN0aW9uICh1cmwsIGxvYykge1xuICAgIC8vIGRhdGE6IGFuZCBqYXZhc2NyaXB0OiB1cmxzIGFyZSBjb25zaWRlcmVkIHNhbWUtb3JpZ2luXG4gICAgaWYgKHVybC5pbmRleE9mKCdkYXRhOicpID09PSAwKSB7XG4gICAgICAgIHJldHVybiAnJztcbiAgICB9XG5cbiAgICAvLyBkZWZhdWx0IGlzIHdpbmRvdy5sb2NhdGlvblxuICAgIGxvYyA9IGxvYyB8fCB3aW5kb3cubG9jYXRpb247XG5cbiAgICBpZiAoIXRlbXBBbmNob3IpIHtcbiAgICAgICAgdGVtcEFuY2hvciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2EnKTtcbiAgICB9XG5cbiAgICAvLyBsZXQgdGhlIGJyb3dzZXIgZGV0ZXJtaW5lIHRoZSBmdWxsIGhyZWYgZm9yIHRoZSB1cmwgb2YgdGhpcyByZXNvdXJjZSBhbmQgdGhlblxuICAgIC8vIHBhcnNlIHdpdGggdGhlIG5vZGUgdXJsIGxpYiwgd2UgY2FuJ3QgdXNlIHRoZSBwcm9wZXJ0aWVzIG9mIHRoZSBhbmNob3IgZWxlbWVudFxuICAgIC8vIGJlY2F1c2UgdGhleSBkb24ndCB3b3JrIGluIElFOSA6KFxuICAgIHRlbXBBbmNob3IuaHJlZiA9IHVybDtcbiAgICB1cmwgPSBfdXJsLnBhcnNlKHRlbXBBbmNob3IuaHJlZik7XG5cbiAgICB2YXIgc2FtZVBvcnQgPSAoIXVybC5wb3J0ICYmIGxvYy5wb3J0ID09PSAnJykgfHwgKHVybC5wb3J0ID09PSBsb2MucG9ydCk7XG5cbiAgICAvLyBpZiBjcm9zcyBvcmlnaW5cbiAgICBpZiAodXJsLmhvc3RuYW1lICE9PSBsb2MuaG9zdG5hbWUgfHwgIXNhbWVQb3J0IHx8IHVybC5wcm90b2NvbCAhPT0gbG9jLnByb3RvY29sKSB7XG4gICAgICAgIHJldHVybiAnYW5vbnltb3VzJztcbiAgICB9XG5cbiAgICByZXR1cm4gJyc7XG59O1xuXG4vKipcbiAqIERldGVybWluZXMgdGhlIHJlc3BvbnNlVHlwZSBvZiBhbiBYSFIgcmVxdWVzdCBiYXNlZCBvbiB0aGUgZXh0ZW5zaW9uIG9mIHRoZVxuICogcmVzb3VyY2UgYmVpbmcgbG9hZGVkLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcmV0dXJuIHtSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRX0gVGhlIHJlc3BvbnNlVHlwZSB0byB1c2UuXG4gKi9cblJlc291cmNlLnByb3RvdHlwZS5fZGV0ZXJtaW5lWGhyVHlwZSA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gUmVzb3VyY2UuX3hoclR5cGVNYXBbdGhpcy5fZ2V0RXh0ZW5zaW9uKCldIHx8IFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLlRFWFQ7XG59O1xuXG5SZXNvdXJjZS5wcm90b3R5cGUuX2RldGVybWluZUxvYWRUeXBlID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBSZXNvdXJjZS5fbG9hZFR5cGVNYXBbdGhpcy5fZ2V0RXh0ZW5zaW9uKCldIHx8IFJlc291cmNlLkxPQURfVFlQRS5YSFI7XG59O1xuXG5SZXNvdXJjZS5wcm90b3R5cGUuX2dldEV4dGVuc2lvbiA9IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgdXJsID0gdGhpcy51cmwsXG4gICAgICAgIGV4dDtcblxuICAgIGlmICh0aGlzLmlzRGF0YVVybCkge1xuICAgICAgICB2YXIgc2xhc2hJbmRleCA9IHVybC5pbmRleE9mKCcvJyk7XG4gICAgICAgIGV4dCA9IHVybC5zdWJzdHJpbmcoc2xhc2hJbmRleCArIDEsIHVybC5pbmRleE9mKCc7Jywgc2xhc2hJbmRleCkpO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgdmFyIHF1ZXJ5U3RhcnQgPSB1cmwuaW5kZXhPZignPycpO1xuICAgICAgICBpZiAocXVlcnlTdGFydCAhPT0gLTEpIHtcbiAgICAgICAgICAgIHVybCA9IHVybC5zdWJzdHJpbmcoMCwgcXVlcnlTdGFydCk7XG4gICAgICAgIH1cblxuICAgICAgICBleHQgPSB1cmwuc3Vic3RyaW5nKHVybC5sYXN0SW5kZXhPZignLicpICsgMSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGV4dDtcbn07XG5cbi8qKlxuICogRGV0ZXJtaW5lcyB0aGUgbWltZSB0eXBlIG9mIGFuIFhIUiByZXF1ZXN0IGJhc2VkIG9uIHRoZSByZXNwb25zZVR5cGUgb2ZcbiAqIHJlc291cmNlIGJlaW5nIGxvYWRlZC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHJldHVybiB7c3RyaW5nfSBUaGUgbWltZSB0eXBlIHRvIHVzZS5cbiAqL1xuUmVzb3VyY2UucHJvdG90eXBlLl9nZXRNaW1lRnJvbVhoclR5cGUgPSBmdW5jdGlvbiAodHlwZSkge1xuICAgIHN3aXRjaCh0eXBlKSB7XG4gICAgICAgIGNhc2UgUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuQlVGRkVSOlxuICAgICAgICAgICAgcmV0dXJuICdhcHBsaWNhdGlvbi9vY3RldC1iaW5hcnknO1xuXG4gICAgICAgIGNhc2UgUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuQkxPQjpcbiAgICAgICAgICAgIHJldHVybiAnYXBwbGljYXRpb24vYmxvYic7XG5cbiAgICAgICAgY2FzZSBSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRS5ET0NVTUVOVDpcbiAgICAgICAgICAgIHJldHVybiAnYXBwbGljYXRpb24veG1sJztcblxuICAgICAgICBjYXNlIFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkpTT046XG4gICAgICAgICAgICByZXR1cm4gJ2FwcGxpY2F0aW9uL2pzb24nO1xuXG4gICAgICAgIGNhc2UgUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuREVGQVVMVDpcbiAgICAgICAgY2FzZSBSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRS5URVhUOlxuICAgICAgICAgICAgLyogZmFsbHMgdGhyb3VnaCAqL1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgcmV0dXJuICd0ZXh0L3BsYWluJztcblxuICAgIH1cbn07XG5cbi8qKlxuICogVGhlIHR5cGVzIG9mIGxvYWRpbmcgYSByZXNvdXJjZSBjYW4gdXNlLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBjb25zdGFudFxuICogQHByb3BlcnR5IHtvYmplY3R9IExPQURfVFlQRVxuICogQHByb3BlcnR5IHtudW1iZXJ9IExPQURfVFlQRS5YSFIgLSBVc2VzIFhNTEh0dHBSZXF1ZXN0IHRvIGxvYWQgdGhlIHJlc291cmNlLlxuICogQHByb3BlcnR5IHtudW1iZXJ9IExPQURfVFlQRS5JTUFHRSAtIFVzZXMgYW4gYEltYWdlYCBvYmplY3QgdG8gbG9hZCB0aGUgcmVzb3VyY2UuXG4gKiBAcHJvcGVydHkge251bWJlcn0gTE9BRF9UWVBFLkFVRElPIC0gVXNlcyBhbiBgQXVkaW9gIG9iamVjdCB0byBsb2FkIHRoZSByZXNvdXJjZS5cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBMT0FEX1RZUEUuVklERU8gLSBVc2VzIGEgYFZpZGVvYCBvYmplY3QgdG8gbG9hZCB0aGUgcmVzb3VyY2UuXG4gKi9cblJlc291cmNlLkxPQURfVFlQRSA9IHtcbiAgICBYSFI6ICAgIDEsXG4gICAgSU1BR0U6ICAyLFxuICAgIEFVRElPOiAgMyxcbiAgICBWSURFTzogIDRcbn07XG5cbi8qKlxuICogVGhlIFhIUiByZWFkeSBzdGF0ZXMsIHVzZWQgaW50ZXJuYWxseS5cbiAqXG4gKiBAc3RhdGljXG4gKiBAY29uc3RhbnRcbiAqIEBwcm9wZXJ0eSB7b2JqZWN0fSBYSFJfUkVBRFlfU1RBVEVcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBYSFJfUkVBRFlfU1RBVEUuVU5TRU5UIC0gb3BlbigpaGFzIG5vdCBiZWVuIGNhbGxlZCB5ZXQuXG4gKiBAcHJvcGVydHkge251bWJlcn0gWEhSX1JFQURZX1NUQVRFLk9QRU5FRCAtIHNlbmQoKWhhcyBub3QgYmVlbiBjYWxsZWQgeWV0LlxuICogQHByb3BlcnR5IHtudW1iZXJ9IFhIUl9SRUFEWV9TVEFURS5IRUFERVJTX1JFQ0VJVkVEIC0gc2VuZCgpIGhhcyBiZWVuIGNhbGxlZCwgYW5kIGhlYWRlcnMgYW5kIHN0YXR1cyBhcmUgYXZhaWxhYmxlLlxuICogQHByb3BlcnR5IHtudW1iZXJ9IFhIUl9SRUFEWV9TVEFURS5MT0FESU5HIC0gRG93bmxvYWRpbmc7IHJlc3BvbnNlVGV4dCBob2xkcyBwYXJ0aWFsIGRhdGEuXG4gKiBAcHJvcGVydHkge251bWJlcn0gWEhSX1JFQURZX1NUQVRFLkRPTkUgLSBUaGUgb3BlcmF0aW9uIGlzIGNvbXBsZXRlLlxuICovXG5SZXNvdXJjZS5YSFJfUkVBRFlfU1RBVEUgPSB7XG4gICAgVU5TRU5UOiAwLFxuICAgIE9QRU5FRDogMSxcbiAgICBIRUFERVJTX1JFQ0VJVkVEOiAyLFxuICAgIExPQURJTkc6IDMsXG4gICAgRE9ORTogNFxufTtcblxuLyoqXG4gKiBUaGUgWEhSIHJlYWR5IHN0YXRlcywgdXNlZCBpbnRlcm5hbGx5LlxuICpcbiAqIEBzdGF0aWNcbiAqIEBjb25zdGFudFxuICogQHByb3BlcnR5IHtvYmplY3R9IFhIUl9SRVNQT05TRV9UWVBFXG4gKiBAcHJvcGVydHkge3N0cmluZ30gWEhSX1JFU1BPTlNFX1RZUEUuREVGQVVMVCAtIGRlZmF1bHRzIHRvIHRleHRcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBYSFJfUkVTUE9OU0VfVFlQRS5CVUZGRVIgLSBBcnJheUJ1ZmZlclxuICogQHByb3BlcnR5IHtzdHJpbmd9IFhIUl9SRVNQT05TRV9UWVBFLkJMT0IgLSBCbG9iXG4gKiBAcHJvcGVydHkge3N0cmluZ30gWEhSX1JFU1BPTlNFX1RZUEUuRE9DVU1FTlQgLSBEb2N1bWVudFxuICogQHByb3BlcnR5IHtzdHJpbmd9IFhIUl9SRVNQT05TRV9UWVBFLkpTT04gLSBPYmplY3RcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBYSFJfUkVTUE9OU0VfVFlQRS5URVhUIC0gU3RyaW5nXG4gKi9cblJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFID0ge1xuICAgIERFRkFVTFQ6ICAgICd0ZXh0JyxcbiAgICBCVUZGRVI6ICAgICAnYXJyYXlidWZmZXInLFxuICAgIEJMT0I6ICAgICAgICdibG9iJyxcbiAgICBET0NVTUVOVDogICAnZG9jdW1lbnQnLFxuICAgIEpTT046ICAgICAgICdqc29uJyxcbiAgICBURVhUOiAgICAgICAndGV4dCdcbn07XG5cblJlc291cmNlLl9sb2FkVHlwZU1hcCA9IHtcbiAgICAnZ2lmJzogICAgICBSZXNvdXJjZS5MT0FEX1RZUEUuSU1BR0UsXG4gICAgJ3BuZyc6ICAgICAgUmVzb3VyY2UuTE9BRF9UWVBFLklNQUdFLFxuICAgICdibXAnOiAgICAgIFJlc291cmNlLkxPQURfVFlQRS5JTUFHRSxcbiAgICAnanBnJzogICAgICBSZXNvdXJjZS5MT0FEX1RZUEUuSU1BR0UsXG4gICAgJ2pwZWcnOiAgICAgUmVzb3VyY2UuTE9BRF9UWVBFLklNQUdFLFxuICAgICd0aWYnOiAgICAgIFJlc291cmNlLkxPQURfVFlQRS5JTUFHRSxcbiAgICAndGlmZic6ICAgICBSZXNvdXJjZS5MT0FEX1RZUEUuSU1BR0UsXG4gICAgJ3dlYnAnOiAgICAgUmVzb3VyY2UuTE9BRF9UWVBFLklNQUdFLFxuICAgICd0Z2EnOiAgICAgIFJlc291cmNlLkxPQURfVFlQRS5JTUFHRVxufTtcblxuUmVzb3VyY2UuX3hoclR5cGVNYXAgPSB7XG4gICAgLy8geG1sXG4gICAgJ3hodG1sJzogICAgUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuRE9DVU1FTlQsXG4gICAgJ2h0bWwnOiAgICAgUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuRE9DVU1FTlQsXG4gICAgJ2h0bSc6ICAgICAgUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuRE9DVU1FTlQsXG4gICAgJ3htbCc6ICAgICAgUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuRE9DVU1FTlQsXG4gICAgJ3RteCc6ICAgICAgUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuRE9DVU1FTlQsXG4gICAgJ3RzeCc6ICAgICAgUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuRE9DVU1FTlQsXG4gICAgJ3N2Zyc6ICAgICAgUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuRE9DVU1FTlQsXG5cbiAgICAvLyBpbWFnZXNcbiAgICAnZ2lmJzogICAgICBSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRS5CTE9CLFxuICAgICdwbmcnOiAgICAgIFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkJMT0IsXG4gICAgJ2JtcCc6ICAgICAgUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuQkxPQixcbiAgICAnanBnJzogICAgICBSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRS5CTE9CLFxuICAgICdqcGVnJzogICAgIFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkJMT0IsXG4gICAgJ3RpZic6ICAgICAgUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuQkxPQixcbiAgICAndGlmZic6ICAgICBSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRS5CTE9CLFxuICAgICd3ZWJwJzogICAgIFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkJMT0IsXG4gICAgJ3RnYSc6ICAgICAgUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuQkxPQixcblxuICAgIC8vIGpzb25cbiAgICAnanNvbic6ICAgICBSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRS5KU09OLFxuXG4gICAgLy8gdGV4dFxuICAgICd0ZXh0JzogICAgIFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLlRFWFQsXG4gICAgJ3R4dCc6ICAgICAgUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuVEVYVFxufTtcblxuLyoqXG4gKiBTZXRzIHRoZSBsb2FkIHR5cGUgdG8gYmUgdXNlZCBmb3IgYSBzcGVjaWZpYyBleHRlbnNpb24uXG4gKlxuICogQHN0YXRpY1xuICogQHBhcmFtIGV4dG5hbWUge3N0cmluZ30gVGhlIGV4dGVuc2lvbiB0byBzZXQgdGhlIHR5cGUgZm9yLCBlLmcuIFwicG5nXCIgb3IgXCJmbnRcIlxuICogQHBhcmFtIGxvYWRUeXBlIHtSZXNvdXJjZS5MT0FEX1RZUEV9IFRoZSBsb2FkIHR5cGUgdG8gc2V0IGl0IHRvLlxuICovXG5SZXNvdXJjZS5zZXRFeHRlbnNpb25Mb2FkVHlwZSA9IGZ1bmN0aW9uIChleHRuYW1lLCBsb2FkVHlwZSkge1xuICAgIHNldEV4dE1hcChSZXNvdXJjZS5fbG9hZFR5cGVNYXAsIGV4dG5hbWUsIGxvYWRUeXBlKTtcbn07XG5cbi8qKlxuICogU2V0cyB0aGUgbG9hZCB0eXBlIHRvIGJlIHVzZWQgZm9yIGEgc3BlY2lmaWMgZXh0ZW5zaW9uLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBwYXJhbSBleHRuYW1lIHtzdHJpbmd9IFRoZSBleHRlbnNpb24gdG8gc2V0IHRoZSB0eXBlIGZvciwgZS5nLiBcInBuZ1wiIG9yIFwiZm50XCJcbiAqIEBwYXJhbSB4aHJUeXBlIHtSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRX0gVGhlIHhociB0eXBlIHRvIHNldCBpdCB0by5cbiAqL1xuUmVzb3VyY2Uuc2V0RXh0ZW5zaW9uWGhyVHlwZSA9IGZ1bmN0aW9uIChleHRuYW1lLCB4aHJUeXBlKSB7XG4gICAgc2V0RXh0TWFwKFJlc291cmNlLl94aHJUeXBlTWFwLCBleHRuYW1lLCB4aHJUeXBlKTtcbn07XG5cbmZ1bmN0aW9uIHNldEV4dE1hcChtYXAsIGV4dG5hbWUsIHZhbCkge1xuICAgIGlmIChleHRuYW1lICYmIGV4dG5hbWUuaW5kZXhPZignLicpID09PSAwKSB7XG4gICAgICAgIGV4dG5hbWUgPSBleHRuYW1lLnN1YnN0cmluZygxKTtcbiAgICB9XG5cbiAgICBpZiAoIWV4dG5hbWUpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIG1hcFtleHRuYW1lXSA9IHZhbDtcbn1cbiIsIm1vZHVsZS5leHBvcnRzID0ge1xuXG4gICAgLy8gcHJpdmF0ZSBwcm9wZXJ0eVxuICAgIF9rZXlTdHI6IFwiQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkrLz1cIixcblxuICAgIGVuY29kZUJpbmFyeTogZnVuY3Rpb24gKGlucHV0KSB7XG4gICAgICAgIHZhciBvdXRwdXQgPSBcIlwiO1xuICAgICAgICB2YXIgYnl0ZWJ1ZmZlcjtcbiAgICAgICAgdmFyIGVuY29kZWRDaGFySW5kZXhlcyA9IG5ldyBBcnJheSg0KTtcbiAgICAgICAgdmFyIGlueCA9IDA7XG4gICAgICAgIHZhciBqbnggPSAwO1xuICAgICAgICB2YXIgcGFkZGluZ0J5dGVzID0gMDtcblxuICAgICAgICB3aGlsZSAoaW54IDwgaW5wdXQubGVuZ3RoKSB7XG4gICAgICAgICAgICAvLyBGaWxsIGJ5dGUgYnVmZmVyIGFycmF5XG4gICAgICAgICAgICBieXRlYnVmZmVyID0gbmV3IEFycmF5KDMpO1xuICAgICAgICAgICAgZm9yIChqbnggPSAwOyBqbnggPCBieXRlYnVmZmVyLmxlbmd0aDsgam54KyspIHtcbiAgICAgICAgICAgICAgICBpZiAoaW54IDwgaW5wdXQubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIHRocm93IGF3YXkgaGlnaC1vcmRlciBieXRlLCBhcyBkb2N1bWVudGVkIGF0OlxuICAgICAgICAgICAgICAgICAgICAvLyBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9Fbi9Vc2luZ19YTUxIdHRwUmVxdWVzdCNIYW5kbGluZ19iaW5hcnlfZGF0YVxuICAgICAgICAgICAgICAgICAgICBieXRlYnVmZmVyW2pueF0gPSBpbnB1dC5jaGFyQ29kZUF0KGlueCsrKSAmIDB4ZmY7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBieXRlYnVmZmVyW2pueF0gPSAwO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gR2V0IGVhY2ggZW5jb2RlZCBjaGFyYWN0ZXIsIDYgYml0cyBhdCBhIHRpbWVcbiAgICAgICAgICAgIC8vIGluZGV4IDE6IGZpcnN0IDYgYml0c1xuICAgICAgICAgICAgZW5jb2RlZENoYXJJbmRleGVzWzBdID0gYnl0ZWJ1ZmZlclswXSA+PiAyO1xuICAgICAgICAgICAgLy8gaW5kZXggMjogc2Vjb25kIDYgYml0cyAoMiBsZWFzdCBzaWduaWZpY2FudCBiaXRzIGZyb20gaW5wdXQgYnl0ZSAxICsgNCBtb3N0IHNpZ25pZmljYW50IGJpdHMgZnJvbSBieXRlIDIpXG4gICAgICAgICAgICBlbmNvZGVkQ2hhckluZGV4ZXNbMV0gPSAoKGJ5dGVidWZmZXJbMF0gJiAweDMpIDw8IDQpIHwgKGJ5dGVidWZmZXJbMV0gPj4gNCk7XG4gICAgICAgICAgICAvLyBpbmRleCAzOiB0aGlyZCA2IGJpdHMgKDQgbGVhc3Qgc2lnbmlmaWNhbnQgYml0cyBmcm9tIGlucHV0IGJ5dGUgMiArIDIgbW9zdCBzaWduaWZpY2FudCBiaXRzIGZyb20gYnl0ZSAzKVxuICAgICAgICAgICAgZW5jb2RlZENoYXJJbmRleGVzWzJdID0gKChieXRlYnVmZmVyWzFdICYgMHgwZikgPDwgMikgfCAoYnl0ZWJ1ZmZlclsyXSA+PiA2KTtcbiAgICAgICAgICAgIC8vIGluZGV4IDM6IGZvcnRoIDYgYml0cyAoNiBsZWFzdCBzaWduaWZpY2FudCBiaXRzIGZyb20gaW5wdXQgYnl0ZSAzKVxuICAgICAgICAgICAgZW5jb2RlZENoYXJJbmRleGVzWzNdID0gYnl0ZWJ1ZmZlclsyXSAmIDB4M2Y7XG5cbiAgICAgICAgICAgIC8vIERldGVybWluZSB3aGV0aGVyIHBhZGRpbmcgaGFwcGVuZWQsIGFuZCBhZGp1c3QgYWNjb3JkaW5nbHlcbiAgICAgICAgICAgIHBhZGRpbmdCeXRlcyA9IGlueCAtIChpbnB1dC5sZW5ndGggLSAxKTtcbiAgICAgICAgICAgIHN3aXRjaCAocGFkZGluZ0J5dGVzKSB7XG4gICAgICAgICAgICAgICAgY2FzZSAyOlxuICAgICAgICAgICAgICAgICAgICAvLyBTZXQgbGFzdCAyIGNoYXJhY3RlcnMgdG8gcGFkZGluZyBjaGFyXG4gICAgICAgICAgICAgICAgICAgIGVuY29kZWRDaGFySW5kZXhlc1szXSA9IDY0O1xuICAgICAgICAgICAgICAgICAgICBlbmNvZGVkQ2hhckluZGV4ZXNbMl0gPSA2NDtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICAgICAgICAgIC8vIFNldCBsYXN0IGNoYXJhY3RlciB0byBwYWRkaW5nIGNoYXJcbiAgICAgICAgICAgICAgICAgICAgZW5jb2RlZENoYXJJbmRleGVzWzNdID0gNjQ7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7IC8vIE5vIHBhZGRpbmcgLSBwcm9jZWVkXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIE5vdyB3ZSB3aWxsIGdyYWIgZWFjaCBhcHByb3ByaWF0ZSBjaGFyYWN0ZXIgb3V0IG9mIG91ciBrZXlzdHJpbmdcbiAgICAgICAgICAgIC8vIGJhc2VkIG9uIG91ciBpbmRleCBhcnJheSBhbmQgYXBwZW5kIGl0IHRvIHRoZSBvdXRwdXQgc3RyaW5nXG4gICAgICAgICAgICBmb3IgKGpueCA9IDA7IGpueCA8IGVuY29kZWRDaGFySW5kZXhlcy5sZW5ndGg7IGpueCsrKSB7XG4gICAgICAgICAgICAgICAgb3V0cHV0ICs9IHRoaXMuX2tleVN0ci5jaGFyQXQoZW5jb2RlZENoYXJJbmRleGVzW2pueF0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBvdXRwdXQ7XG4gICAgfVxufTtcbiIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9Mb2FkZXInKTtcblxubW9kdWxlLmV4cG9ydHMuUmVzb3VyY2UgPSByZXF1aXJlKCcuL1Jlc291cmNlJyk7XG5cbm1vZHVsZS5leHBvcnRzLm1pZGRsZXdhcmUgPSB7XG4gICAgY2FjaGluZzoge1xuICAgICAgICBtZW1vcnk6IHJlcXVpcmUoJy4vbWlkZGxld2FyZXMvY2FjaGluZy9tZW1vcnknKVxuICAgIH0sXG4gICAgcGFyc2luZzoge1xuICAgICAgICBibG9iOiByZXF1aXJlKCcuL21pZGRsZXdhcmVzL3BhcnNpbmcvYmxvYicpXG4gICAgfVxufTtcbiIsIi8vIGEgc2ltcGxlIGluLW1lbW9yeSBjYWNoZSBmb3IgcmVzb3VyY2VzXG52YXIgY2FjaGUgPSB7fTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChyZXNvdXJjZSwgbmV4dCkge1xuICAgICAgICAvLyBpZiBjYWNoZWQsIHRoZW4gc2V0IGRhdGEgYW5kIGNvbXBsZXRlIHRoZSByZXNvdXJjZVxuICAgICAgICBpZiAoY2FjaGVbcmVzb3VyY2UudXJsXSkge1xuICAgICAgICAgICAgcmVzb3VyY2UuZGF0YSA9IGNhY2hlW3Jlc291cmNlLnVybF07XG4gICAgICAgICAgICByZXNvdXJjZS5jb21wbGV0ZSgpO1xuICAgICAgICB9XG4gICAgICAgIC8vIGlmIG5vdCBjYWNoZWQsIHdhaXQgZm9yIGNvbXBsZXRlIGFuZCBzdG9yZSBpdCBpbiB0aGUgY2FjaGUuXG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcmVzb3VyY2Uub25jZSgnY29tcGxldGUnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICBjYWNoZVt0aGlzLnVybF0gPSB0aGlzLmRhdGE7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBcbiAgICAgICAgbmV4dCgpO1xuICAgIH07XG59O1xuIiwidmFyIFJlc291cmNlID0gcmVxdWlyZSgnLi4vLi4vUmVzb3VyY2UnKSxcbiAgICBiNjQgPSByZXF1aXJlKCcuLi8uLi9iNjQnKTtcblxud2luZG93LlVSTCA9IHdpbmRvdy5VUkwgfHwgd2luZG93LndlYmtpdFVSTDtcblxuLy8gYSBtaWRkbGV3YXJlIGZvciB0cmFuc2Zvcm1pbmcgWEhSIGxvYWRlZCBCbG9icyBpbnRvIG1vcmUgdXNlZnVsIG9iamVjdHNcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChyZXNvdXJjZSwgbmV4dCkge1xuICAgICAgICBpZiAoIXJlc291cmNlLmRhdGEpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXh0KCk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBpZiB0aGlzIHdhcyBhbiBYSFIgbG9hZCBvZiBhIGJsb2JcbiAgICAgICAgaWYgKHJlc291cmNlLnhociAmJiByZXNvdXJjZS54aHJUeXBlID09PSBSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRS5CTE9CKSB7XG4gICAgICAgICAgICAvLyBpZiB0aGVyZSBpcyBubyBibG9iIHN1cHBvcnQgd2UgcHJvYmFibHkgZ290IGEgYmluYXJ5IHN0cmluZyBiYWNrXG4gICAgICAgICAgICBpZiAoIXdpbmRvdy5CbG9iIHx8IHR5cGVvZiByZXNvdXJjZS5kYXRhID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgICAgIHZhciB0eXBlID0gcmVzb3VyY2UueGhyLmdldFJlc3BvbnNlSGVhZGVyKCdjb250ZW50LXR5cGUnKTtcblxuICAgICAgICAgICAgICAgIC8vIHRoaXMgaXMgYW4gaW1hZ2UsIGNvbnZlcnQgdGhlIGJpbmFyeSBzdHJpbmcgaW50byBhIGRhdGEgdXJsXG4gICAgICAgICAgICAgICAgaWYgKHR5cGUgJiYgdHlwZS5pbmRleE9mKCdpbWFnZScpID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc291cmNlLmRhdGEgPSBuZXcgSW1hZ2UoKTtcbiAgICAgICAgICAgICAgICAgICAgcmVzb3VyY2UuZGF0YS5zcmMgPSAnZGF0YTonICsgdHlwZSArICc7YmFzZTY0LCcgKyBiNjQuZW5jb2RlQmluYXJ5KHJlc291cmNlLnhoci5yZXNwb25zZVRleHQpO1xuXG4gICAgICAgICAgICAgICAgICAgIHJlc291cmNlLmlzSW1hZ2UgPSB0cnVlO1xuXG4gICAgICAgICAgICAgICAgICAgIC8vIHdhaXQgdW50aWwgdGhlIGltYWdlIGxvYWRzIGFuZCB0aGVuIGNhbGxiYWNrXG4gICAgICAgICAgICAgICAgICAgIHJlc291cmNlLmRhdGEub25sb2FkID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVzb3VyY2UuZGF0YS5vbmxvYWQgPSBudWxsO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBuZXh0KCk7XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gaWYgY29udGVudCB0eXBlIHNheXMgdGhpcyBpcyBhbiBpbWFnZSwgdGhlbiB3ZSBzaG91bGQgdHJhbnNmb3JtIHRoZSBibG9iIGludG8gYW4gSW1hZ2Ugb2JqZWN0XG4gICAgICAgICAgICBlbHNlIGlmIChyZXNvdXJjZS5kYXRhLnR5cGUuaW5kZXhPZignaW1hZ2UnKSA9PT0gMCkge1xuICAgICAgICAgICAgICAgIHZhciBzcmMgPSBVUkwuY3JlYXRlT2JqZWN0VVJMKHJlc291cmNlLmRhdGEpO1xuXG4gICAgICAgICAgICAgICAgcmVzb3VyY2UuYmxvYiA9IHJlc291cmNlLmRhdGE7XG4gICAgICAgICAgICAgICAgcmVzb3VyY2UuZGF0YSA9IG5ldyBJbWFnZSgpO1xuICAgICAgICAgICAgICAgIHJlc291cmNlLmRhdGEuc3JjID0gc3JjO1xuXG4gICAgICAgICAgICAgICAgcmVzb3VyY2UuaXNJbWFnZSA9IHRydWU7XG5cbiAgICAgICAgICAgICAgICAvLyBjbGVhbnVwIHRoZSBubyBsb25nZXIgdXNlZCBibG9iIGFmdGVyIHRoZSBpbWFnZSBsb2Fkc1xuICAgICAgICAgICAgICAgIHJlc291cmNlLmRhdGEub25sb2FkID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICBVUkwucmV2b2tlT2JqZWN0VVJMKHNyYyk7XG4gICAgICAgICAgICAgICAgICAgIHJlc291cmNlLmRhdGEub25sb2FkID0gbnVsbDtcblxuICAgICAgICAgICAgICAgICAgICBuZXh0KCk7XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIG5leHQoKTtcbiAgICAgICAgfVxuICAgIH07XG59O1xuIiwibW9kdWxlLmV4cG9ydHM9e1xuICBcIm5hbWVcIjogXCJwaXhpLmpzXCIsXG4gIFwidmVyc2lvblwiOiBcIjMuMC4xMC1kZXZcIixcbiAgXCJkZXNjcmlwdGlvblwiOiBcIlBpeGkuanMgaXMgYSBmYXN0IGxpZ2h0d2VpZ2h0IDJEIGxpYnJhcnkgdGhhdCB3b3JrcyBhY3Jvc3MgYWxsIGRldmljZXMuXCIsXG4gIFwiYXV0aG9yXCI6IFwiTWF0IEdyb3Zlc1wiLFxuICBcImNvbnRyaWJ1dG9yc1wiOiBbXG4gICAgXCJDaGFkIEVuZ2xlciA8Y2hhZEBwYW50aGVyZGV2LmNvbT5cIixcbiAgICBcIlJpY2hhcmQgRGF2ZXkgPHJkYXZleUBnbWFpbC5jb20+XCJcbiAgXSxcbiAgXCJtYWluXCI6IFwiLi9zcmMvaW5kZXguanNcIixcbiAgXCJob21lcGFnZVwiOiBcImh0dHA6Ly9nb29kYm95ZGlnaXRhbC5jb20vXCIsXG4gIFwiYnVnc1wiOiBcImh0dHBzOi8vZ2l0aHViLmNvbS9waXhpanMvcGl4aS5qcy9pc3N1ZXNcIixcbiAgXCJsaWNlbnNlXCI6IFwiTUlUXCIsXG4gIFwicmVwb3NpdG9yeVwiOiB7XG4gICAgXCJ0eXBlXCI6IFwiZ2l0XCIsXG4gICAgXCJ1cmxcIjogXCJodHRwczovL2dpdGh1Yi5jb20vcGl4aWpzL3BpeGkuanMuZ2l0XCJcbiAgfSxcbiAgXCJzY3JpcHRzXCI6IHtcbiAgICBcInN0YXJ0XCI6IFwiZ3VscCAmJiBndWxwIHdhdGNoXCIsXG4gICAgXCJ0ZXN0XCI6IFwiZ3VscCAmJiB0ZXN0ZW0gY2lcIixcbiAgICBcImJ1aWxkXCI6IFwiZ3VscFwiLFxuICAgIFwiZG9jc1wiOiBcImpzZG9jIC1jIC4vZ3VscC91dGlsL2pzZG9jLmNvbmYuanNvbiAtUiBSRUFETUUubWRcIlxuICB9LFxuICBcImZpbGVzXCI6IFtcbiAgICBcImJpbi9cIixcbiAgICBcInNyYy9cIixcbiAgICBcIkNPTlRSSUJVVElORy5tZFwiLFxuICAgIFwiTElDRU5TRVwiLFxuICAgIFwicGFja2FnZS5qc29uXCIsXG4gICAgXCJSRUFETUUubWRcIlxuICBdLFxuICBcImRlcGVuZGVuY2llc1wiOiB7XG4gICAgXCJhc3luY1wiOiBcIl4xLjUuMFwiLFxuICAgIFwiYnJmc1wiOiBcIl4xLjQuMVwiLFxuICAgIFwiZWFyY3V0XCI6IFwiXjIuMC43XCIsXG4gICAgXCJldmVudGVtaXR0ZXIzXCI6IFwiXjEuMS4xXCIsXG4gICAgXCJvYmplY3QtYXNzaWduXCI6IFwiXjQuMC4xXCIsXG4gICAgXCJwaXhpLWdsLWNvcmVcIjogXCJnaXQraHR0cHM6Ly9naXRodWIuY29tL0dvb2RCb3lEaWdpdGFsL3BpeGktZ2wtY29yZS5naXRcIixcbiAgICBcInJlc291cmNlLWxvYWRlclwiOiBcIl4xLjYuNFwiXG4gIH0sXG4gIFwiZGV2RGVwZW5kZW5jaWVzXCI6IHtcbiAgICBcImJyb3dzZXJpZnlcIjogXCJeMTEuMS4wXCIsXG4gICAgXCJjaGFpXCI6IFwiXjMuMi4wXCIsXG4gICAgXCJkZWxcIjogXCJeMi4wLjJcIixcbiAgICBcImd1bHBcIjogXCJeMy45LjBcIixcbiAgICBcImd1bHAtY2FjaGVkXCI6IFwiXjEuMS4wXCIsXG4gICAgXCJndWxwLWNvbmNhdFwiOiBcIl4yLjYuMFwiLFxuICAgIFwiZ3VscC1kZWJ1Z1wiOiBcIl4yLjEuMFwiLFxuICAgIFwiZ3VscC1oZWFkZXJcIjogXCJeMS43LjFcIixcbiAgICBcImd1bHAtanNoaW50XCI6IFwiXjEuMTEuMlwiLFxuICAgIFwiZ3VscC1taXJyb3JcIjogXCJeMC40LjBcIixcbiAgICBcImd1bHAtcGx1bWJlclwiOiBcIl4xLjAuMVwiLFxuICAgIFwiZ3VscC1yZW5hbWVcIjogXCJeMS4yLjJcIixcbiAgICBcImd1bHAtc291cmNlbWFwc1wiOiBcIl4xLjUuMlwiLFxuICAgIFwiZ3VscC11Z2xpZnlcIjogXCJeMS40LjFcIixcbiAgICBcImd1bHAtdXRpbFwiOiBcIl4zLjAuNlwiLFxuICAgIFwiamFndWFyanMtanNkb2NcIjogXCJnaXQraHR0cHM6Ly9naXRodWIuY29tL2Rhdmlkc2hpbWpzL2phZ3VhcmpzLWpzZG9jLmdpdFwiLFxuICAgIFwianNkb2NcIjogXCJeMy4zLjJcIixcbiAgICBcImpzaGludC1zdW1tYXJ5XCI6IFwiXjAuNC4wXCIsXG4gICAgXCJtaW5pbWlzdFwiOiBcIl4xLjIuMFwiLFxuICAgIFwibW9jaGFcIjogXCJeMi4zLjJcIixcbiAgICBcInJlcXVpcmUtZGlyXCI6IFwiXjAuMy4wXCIsXG4gICAgXCJydW4tc2VxdWVuY2VcIjogXCJeMS4xLjJcIixcbiAgICBcInRlc3RlbVwiOiBcIl4wLjkuNFwiLFxuICAgIFwidmlueWwtYnVmZmVyXCI6IFwiXjEuMC4wXCIsXG4gICAgXCJ2aW55bC1zb3VyY2Utc3RyZWFtXCI6IFwiXjEuMS4wXCIsXG4gICAgXCJ3YXRjaGlmeVwiOiBcIl4zLjQuMFwiXG4gIH0sXG4gIFwiYnJvd3NlcmlmeVwiOiB7XG4gICAgXCJ0cmFuc2Zvcm1cIjogW1xuICAgICAgXCJicmZzXCJcbiAgICBdXG4gIH1cbn1cbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vY29yZScpO1xuXG4vLyBhZGQgc29tZSBleHRyYSB2YXJpYWJsZXMgdG8gdGhlIGNvbnRhaW5lci4uXG5PYmplY3QuYXNzaWduKFxuICAgIGNvcmUuRGlzcGxheU9iamVjdC5wcm90b3R5cGUsXG4gICAgcmVxdWlyZSgnLi9hY2Nlc3NpYmxlVGFyZ2V0Jylcbik7XG5cblxuLyoqXG4gKiBUaGUgQWNjZXNzaWJpbGl0eSBtYW5hZ2VyIHJlYWNyZWF0ZXMgdGhlIGFiaWxpdHkgdG8gdGFiIGFuZCBhbmQgaGF2ZSBjb250ZW50IHJlYWQgYnkgc2NyZWVuIHJlYWRlcnMuIFRoaXMgaXMgdmVyeSBpbXBvcnRhbnQgYXMgaXQgY2FuIHBvc3NpYmx5IGhlbHAgcGVvcGxlIHdpdGggZGlzYWJpbGl0aWVzIGFjY2VzcyBwaXhpIGNvbnRlbnQuXG4gKiBNdWNoIGxpa2UgaW50ZXJhY3Rpb24gYW55IERpc3BsYXlPYmplY3QgY2FuIGJlIG1hZGUgYWNjZXNzaWJsZS4gVGhpcyBtYW5hZ2VyIHdpbGwgbWFwIHRoZSBldmVudHMgYXMgaWYgdGhlIG1vdXNlIHdhcyBiZWluZyB1c2VkLCBtaW5pbWl6aW5nIHRoZSBlZmZlcm90IHJlcXVpcmVkIHRvIGltcGxlbWVudC5cbiAqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuQ2FudmFzUmVuZGVyZXJ8UElYSS5XZWJHTFJlbmRlcmVyfSBBIHJlZmVyZW5jZSB0byB0aGUgY3VycmVudCByZW5kZXJlclxuICovXG5mdW5jdGlvbiBBY2Nlc3NpYmlsaXR5TWFuYWdlcihyZW5kZXJlcilcbntcblx0Ly8gZmlyc3Qgd2UgY3JlYXRlIGEgZGl2IHRoYXQgd2lsbCBzaXQgb3ZlciB0aGUgcGl4aSBlbGVtZW50LiBUaGlzIGlzIHdoZXJlIHRoZSBkaXYgb3ZlcmxheXMgd2lsbCBnby5cbiAgICB2YXIgZGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgXG4gICAgZGl2LnN0eWxlLndpZHRoID0gMTAwICsgJ3B4JztcbiAgICBkaXYuc3R5bGUuaGVpZ2h0ID0gMTAwICsgJ3B4JztcbiAgICBkaXYuc3R5bGUucG9zaXRpb24gPSAnYWJzb2x1dGUnO1xuICAgIGRpdi5zdHlsZS50b3AgPSAwO1xuICAgIGRpdi5zdHlsZS5sZWZ0ID0gMDtcbiAgIC8vXG4gICAgZGl2LnN0eWxlLnpJbmRleCA9IDI7XG4gICBcdFxuICAgXHQvKipcbiAgIFx0ICogVGhpcyBpcyB0aGUgZG9tIGVsZW1lbnQgdGhhdCB3aWxsIHNpdCBvdmVyIHRoZSBwaXhpIGVsZW1lbnQuIFRoaXMgaXMgd2hlcmUgdGhlIGRpdiBvdmVybGF5cyB3aWxsIGdvLlxuICAgXHQgKiBcbiAgIFx0ICogQHR5cGUge0hUTUxFbGVtZW50fVxuICAgXHQgKiBAcHJpdmF0ZVxuICAgXHQgKi9cbiAgIFx0dGhpcy5kaXYgPSBkaXY7XG5cbiAgIFx0LyoqXG4gICBcdCAqIEEgc2ltcGxlIHBvb2wgZm9yIHN0b3JpbmcgZGl2cy5cbiAgIFx0ICogXG4gICBcdCAqIEB0eXBlIHtBcnJheX1cbiAgIFx0ICogQHByaXZhdGVcbiAgIFx0ICovXG4gXHR0aGlzLnBvb2wgPSBbXTtcblxuIFx0LyoqXG4gXHQgKiBUaGlzIGlzIGEgdGljayB1c2VkIHRvIGNoZWNrIGlmIGFuIG9iamVjdCBpcyBubyBsb25nZXIgYmVpbmcgcmVuZGVyZWQuXG4gXHQgKiBcbiBcdCAqIEB0eXBlIHtOdW1iZXJ9XG4gXHQgKiBAcHJpdmF0ZVxuIFx0ICovXG4gICBcdHRoaXMucmVuZGVySWQgPSAwO1xuXG4gICBcdC8qKlxuICAgXHQgKiBTZXR0aW5nIHRoaXMgdG8gdHJ1ZSB3aWxsIHZpc3VhbGx5IHNob3cgdGhlIGRpdnNcbiAgIFx0ICogXG4gICBcdCAqIEB0eXBlIHtCb29sZWFufVxuICAgXHQgKi9cbiAgIFx0dGhpcy5kZWJ1ZyA9IGZhbHNlO1xuXG4gIFx0LyoqXG4gICAgICogVGhlIHJlbmRlcmVyIHRoaXMgYWNjZXNzaWJpbGl0eSBtYW5hZ2VyIHdvcmtzIGZvci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuU3lzdGVtUmVuZGVyZXJ9XG4gICAgICovXG4gICBcdHRoaXMucmVuZGVyZXIgPSByZW5kZXJlcjtcblxuICAgXHQvKipcbiAgICAgKiBUaGUgYXJyYXkgb2YgY3VycmVudGx5IGFjdGl2ZSBhY2Nlc3NpYmxlIGl0ZW1zLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7QXJyYXl9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgIFx0dGhpcy5jaGlsZHJlbiA9IFtdO1xuICAgXHRcbiAgIFx0LyoqXG4gICAgICogcHJlIGJpbmQgdGhlIGZ1bmN0aW9ucy4uXG4gICAgICovXG4gICBcdHRoaXMuX29uS2V5RG93biA9IHRoaXMuX29uS2V5RG93bi5iaW5kKHRoaXMpO1xuICAgXHR0aGlzLl9vbk1vdXNlTW92ZSA9IHRoaXMuX29uTW91c2VNb3ZlLmJpbmQodGhpcyk7XG4gICBcdFxuICAgXHQvKipcbiAgICAgKiBzdG9yZXMgdGhlIHN0YXRlIG9mIHRoZSBtYW5hZ2VyLiBJZiB0aGVyZSBhcmUgbm8gYWNjZXNzaWJsZSBvYmplY3RzIG9yIHRoZSBtb3VzZSBpcyBtb3ZpbmcgdGhlIHdpbGwgYmUgZmFsc2UuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtBcnJheX1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgXHR0aGlzLmlzQWN0aXZlID0gZmFsc2U7XG5cblxuICAgXHQvLyBsZXQgbGlzdGVuIGZvciB0YWIuLiBvbmNlIHByZXNzZWQgd2UgY2FuIGZpcmUgdXAgYW5kIHNob3cgdGhlIGFjY2Vzc2liaWxpdHkgbGF5ZXJcbiAgIFx0d2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLCB0aGlzLl9vbktleURvd24sIGZhbHNlKTtcbn1cblxuXG5BY2Nlc3NpYmlsaXR5TWFuYWdlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBBY2Nlc3NpYmlsaXR5TWFuYWdlcjtcbm1vZHVsZS5leHBvcnRzID0gQWNjZXNzaWJpbGl0eU1hbmFnZXI7XG5cbi8qKlxuICogQWN0aXZhdGluZyB3aWxsIGNhdXNlIHRoZSBBY2Nlc3NpYmlsaXR5IGxheWVyIHRvIGJlIHNob3duLiBUaGlzIGlzIGNhbGxlZCB3aGVuIGEgdXNlciBwcmVzZXMgdGhlIHRhYiBrZXlcbiAqIEBwcml2YXRlXG4gKi9cbkFjY2Vzc2liaWxpdHlNYW5hZ2VyLnByb3RvdHlwZS5hY3RpdmF0ZSA9IGZ1bmN0aW9uKClcbntcblx0aWYodGhpcy5pc0FjdGl2ZSlcblx0e1xuXHRcdHJldHVybjtcblx0fVxuXG5cdHRoaXMuaXNBY3RpdmUgPSB0cnVlO1xuXG5cdHdpbmRvdy5kb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdtb3VzZW1vdmUnLCB0aGlzLl9vbk1vdXNlTW92ZSwgdHJ1ZSk7XG5cdHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdrZXlkb3duJywgdGhpcy5fb25LZXlEb3duLCBmYWxzZSk7XG5cblx0dGhpcy5yZW5kZXJlci5vbigncG9zdHJlbmRlcicsIHRoaXMudXBkYXRlLCB0aGlzKTtcblxuXHR0aGlzLnJlbmRlcmVyLnZpZXcucGFyZW50Tm9kZS5hcHBlbmRDaGlsZCh0aGlzLmRpdik7XHRcbn07XG5cbi8qKlxuICogRGVhY3RpdmF0aW5nIHdpbGwgY2F1c2UgdGhlIEFjY2Vzc2liaWxpdHkgbGF5ZXIgdG8gYmUgaGlkZGVuLiBUaGlzIGlzIGNhbGxlZCB3aGVuIGEgdXNlciBtb3ZlcyB0aGUgbW91c2VcbiAqIEBwcml2YXRlXG4gKi9cbkFjY2Vzc2liaWxpdHlNYW5hZ2VyLnByb3RvdHlwZS5kZWFjdGl2YXRlID0gZnVuY3Rpb24oKVxue1xuXHRpZighdGhpcy5pc0FjdGl2ZSlcblx0e1xuXHRcdHJldHVybjtcblx0fVxuXG5cdHRoaXMuaXNBY3RpdmUgPSBmYWxzZTtcblxuXHR3aW5kb3cuZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignbW91c2Vtb3ZlJywgdGhpcy5fb25Nb3VzZU1vdmUpO1xuXHR3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsIHRoaXMuX29uS2V5RG93biwgZmFsc2UpO1xuXG5cdHRoaXMucmVuZGVyZXIub2ZmKCdwb3N0cmVuZGVyJywgdGhpcy51cGRhdGUpO1xuXG5cdHRoaXMuZGl2LnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodGhpcy5kaXYpO1xuXG59O1xuXG4vKipcbiAqIFRoaXMgcmVjdXJzaXZlIGZ1bmN0aW9uIHdpbGwgcnVuIHRocm91Z2h0IGhlIHNjZW5lIGdyYXBoIGFuZCBhZGQgYW55IG5ldyBhY2Nlc3NpYmxlIG9iamVjdHMgdG8gdGhlIERPTSBsYXllci5cbiAqIEBwYXJhbSBlbGVtZW50IHtQSVhJLkNvbnRhaW5lcnxQSVhJLlNwcml0ZXxQSVhJLmV4dHJhcy5UaWxpbmdTcHJpdGV9IHRoZSBEaXNwbGF5T2JqZWN0IHRvIGNoZWNrLlxuICogQHByaXZhdGVcbiAqL1xuQWNjZXNzaWJpbGl0eU1hbmFnZXIucHJvdG90eXBlLnVwZGF0ZUFjY2Vzc2libGVPYmplY3RzID0gZnVuY3Rpb24oZGlzcGxheU9iamVjdClcbntcblx0aWYoIWRpc3BsYXlPYmplY3QudmlzaWJsZSlcblx0e1xuXHRcdHJldHVybjtcblx0fVxuXG5cdGlmKGRpc3BsYXlPYmplY3QuYWNjZXNzaWJsZSAmJiBkaXNwbGF5T2JqZWN0LmludGVyYWN0aXZlKVxuXHR7XG5cdFx0aWYoIWRpc3BsYXlPYmplY3QuX2FjY2Vzc2libGVBY3RpdmUpXG5cdFx0e1xuXHRcdFx0dGhpcy5hZGRDaGlsZChkaXNwbGF5T2JqZWN0KTtcblx0XHR9XG5cdCAgIFx0XG5cdCAgIFx0ZGlzcGxheU9iamVjdC5yZW5kZXJJZCA9IHRoaXMucmVuZGVySWQ7XG5cdH1cblxuXHR2YXIgY2hpbGRyZW4gPSBkaXNwbGF5T2JqZWN0LmNoaWxkcmVuO1xuXG5cdGZvciAodmFyIGkgPSBjaGlsZHJlbi5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuXHRcdFxuXHRcdHRoaXMudXBkYXRlQWNjZXNzaWJsZU9iamVjdHMoY2hpbGRyZW5baV0pO1xuXHR9XG59O1xuXG5cbi8qKlxuICogQmVmb3JlIGVhY2ggcmVuZGVyIHRoaXMgZnVuY3Rpb24gd2lsbCBlbnN1cmUgdGhhdCBhbGwgZGl2cyBhcmUgbWFwcGVkIGNvcnJlY3RseSB0byB0aGVpciBEaXNwbGF5T2JqZWN0c1xuICogQHByaXZhdGVcbiAqL1xuQWNjZXNzaWJpbGl0eU1hbmFnZXIucHJvdG90eXBlLnVwZGF0ZSA9IGZ1bmN0aW9uKClcbntcblxuXHQvLyB1cGRhdGUgY2hpbGRyZW4uLi5cblx0dGhpcy51cGRhdGVBY2Nlc3NpYmxlT2JqZWN0cyh0aGlzLnJlbmRlcmVyLl9sYXN0T2JqZWN0UmVuZGVyZWQpO1xuXG5cdHZhciByZWN0ID0gdGhpcy5yZW5kZXJlci52aWV3LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuXHR2YXIgc3ggPSByZWN0LndpZHRoICAvIHRoaXMucmVuZGVyZXIud2lkdGg7XG5cdHZhciBzeSA9IHJlY3QuaGVpZ2h0IC8gdGhpcy5yZW5kZXJlci5oZWlnaHQ7XG5cblx0dmFyIGRpdiA9IHRoaXMuZGl2O1xuXG5cdGRpdi5zdHlsZS5sZWZ0ID0gcmVjdC5sZWZ0ICsgJ3B4Jztcblx0ZGl2LnN0eWxlLnRvcCA9IHJlY3QudG9wICsgJ3B4Jztcblx0ZGl2LnN0eWxlLndpZHRoID0gdGhpcy5yZW5kZXJlci53aWR0aCArICdweCc7XG5cdGRpdi5zdHlsZS5oZWlnaHQgPSB0aGlzLnJlbmRlcmVyLmhlaWdodCArICdweCc7XG5cblx0Zm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmNoaWxkcmVuLmxlbmd0aDsgaSsrKVxuXHR7XG5cblx0XHR2YXIgY2hpbGQgPSB0aGlzLmNoaWxkcmVuW2ldO1xuXG5cdFx0aWYoY2hpbGQucmVuZGVySWQgIT09IHRoaXMucmVuZGVySWQpXG5cdFx0e1xuXHRcdFx0Y2hpbGQuX2FjY2Vzc2libGVBY3RpdmUgPSBmYWxzZTtcblxuICAgICAgICAgICAgY29yZS51dGlscy5yZW1vdmVJdGVtcyh0aGlzLmNoaWxkcmVuLCBpLCAxKTtcblx0XHRcdHRoaXMuZGl2LnJlbW92ZUNoaWxkKCBjaGlsZC5fYWNjZXNzaWJsZURpdiApO1xuXHRcdFx0dGhpcy5wb29sLnB1c2goY2hpbGQuX2FjY2Vzc2libGVEaXYpO1xuXHRcdFx0Y2hpbGQuX2FjY2Vzc2libGVEaXYgPSBudWxsO1xuXG5cdFx0XHRpLS07XG5cblx0XHRcdGlmKHRoaXMuY2hpbGRyZW4ubGVuZ3RoID09PSAwKVxuXHRcdFx0e1xuXHRcdFx0XHR0aGlzLmRlYWN0aXZhdGUoKTtcblx0XHRcdH1cblx0XHR9XG5cdFx0ZWxzZVxuXHRcdHtcblx0XHRcdC8vIG1hcCBkaXYgdG8gZGlzcGxheS4uXG5cdFx0XHRkaXYgPSBjaGlsZC5fYWNjZXNzaWJsZURpdjtcblx0XHRcdHZhciBoaXRBcmVhID0gY2hpbGQuaGl0QXJlYTtcblx0XHRcdHZhciB3dCA9IGNoaWxkLndvcmxkVHJhbnNmb3JtO1xuXG5cdFx0XHRpZihjaGlsZC5oaXRBcmVhKVxuXHRcdFx0e1xuXHRcdFx0XHRkaXYuc3R5bGUubGVmdCA9ICgod3QudHggKyAoaGl0QXJlYS54ICogd3QuYSkpICogc3gpICsgJ3B4Jztcblx0XHRcdFx0ZGl2LnN0eWxlLnRvcCA9ICAoKHd0LnR5ICsgKGhpdEFyZWEueSAqIHd0LmQpKSAqIHN5KSArICAncHgnO1xuXG5cdFx0XHRcdGRpdi5zdHlsZS53aWR0aCA9IChoaXRBcmVhLndpZHRoICogd3QuYSAqIHN4KSArICdweCc7XG5cdFx0XHRcdGRpdi5zdHlsZS5oZWlnaHQgPSAoaGl0QXJlYS5oZWlnaHQgKiB3dC5kICogc3kpICsgJ3B4Jztcblx0XHRcdFxuXHRcdFx0fVxuXHRcdFx0ZWxzZVxuXHRcdFx0e1xuXHRcdFx0XHRoaXRBcmVhID0gY2hpbGQuZ2V0Qm91bmRzKCk7XG5cblx0XHRcdFx0dGhpcy5jYXBIaXRBcmVhKGhpdEFyZWEpO1xuXG5cdFx0XHRcdGRpdi5zdHlsZS5sZWZ0ID0gKGhpdEFyZWEueCAqIHN4KSArICdweCc7XG5cdFx0XHRcdGRpdi5zdHlsZS50b3AgPSAgKGhpdEFyZWEueSAqIHN5KSArICAncHgnO1xuXG5cdFx0XHRcdGRpdi5zdHlsZS53aWR0aCA9IChoaXRBcmVhLndpZHRoICogc3gpICsgJ3B4Jztcblx0XHRcdFx0ZGl2LnN0eWxlLmhlaWdodCA9IChoaXRBcmVhLmhlaWdodCAqIHN5KSArICdweCc7XG5cdFx0XHR9XHRcdFxuXHRcdH1cblx0fVxuXG5cdC8vIGluY3JlbWVudCB0aGUgcmVuZGVyIGlkLi5cblx0dGhpcy5yZW5kZXJJZCsrO1xufTtcblxuQWNjZXNzaWJpbGl0eU1hbmFnZXIucHJvdG90eXBlLmNhcEhpdEFyZWEgPSBmdW5jdGlvbiAoaGl0QXJlYSlcbntcbiAgICBpZiAoaGl0QXJlYS54IDwgMClcbiAgICB7XG4gICAgICAgIGhpdEFyZWEud2lkdGggKz0gaGl0QXJlYS54O1xuICAgICAgICBoaXRBcmVhLnggPSAwO1xuICAgIH1cblxuICAgIGlmIChoaXRBcmVhLnkgPCAwKVxuICAgIHtcbiAgICAgICAgaGl0QXJlYS5oZWlnaHQgKz0gaGl0QXJlYS55O1xuICAgICAgICBoaXRBcmVhLnkgPSAwO1xuICAgIH1cblxuICAgIGlmICggaGl0QXJlYS54ICsgaGl0QXJlYS53aWR0aCA+IHRoaXMucmVuZGVyZXIud2lkdGggKVxuICAgIHtcbiAgICAgICAgaGl0QXJlYS53aWR0aCA9IHRoaXMucmVuZGVyZXIud2lkdGggLSBoaXRBcmVhLng7XG4gICAgfVxuXG4gICAgaWYgKCBoaXRBcmVhLnkgKyBoaXRBcmVhLmhlaWdodCA+IHRoaXMucmVuZGVyZXIuaGVpZ2h0IClcbiAgICB7XG4gICAgICAgIGhpdEFyZWEuaGVpZ2h0ID0gdGhpcy5yZW5kZXJlci5oZWlnaHQgLSBoaXRBcmVhLnk7XG4gICAgfVxufTtcblxuXG4vKipcbiAqIEFkZHMgYSBEaXNwbGF5T2JqZWN0IHRvIHRoZSBhY2Nlc3NpYmlsaXR5IG1hbmFnZXJcbiAqIEBwcml2YXRlXG4gKi9cbkFjY2Vzc2liaWxpdHlNYW5hZ2VyLnByb3RvdHlwZS5hZGRDaGlsZCA9IGZ1bmN0aW9uKGRpc3BsYXlPYmplY3QpXG57XG4vL1x0dGhpcy5hY3RpdmF0ZSgpO1xuXHRcblx0dmFyIGRpdiA9IHRoaXMucG9vbC5wb3AoKTtcblxuXHRpZighZGl2KVxuXHR7XG5cdFx0ZGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYnV0dG9uJyk7IFxuXG5cdCAgICBkaXYuc3R5bGUud2lkdGggPSAxMDAgKyAncHgnO1xuXHQgICAgZGl2LnN0eWxlLmhlaWdodCA9IDEwMCArICdweCc7XG5cdCAgICBkaXYuc3R5bGUuYmFja2dyb3VuZENvbG9yID0gdGhpcy5kZWJ1ZyA/ICdyZ2JhKDI1NSwwLDAsMC41KScgOiAndHJhbnNwYXJlbnQnO1xuXHQgICAgZGl2LnN0eWxlLnBvc2l0aW9uID0gJ2Fic29sdXRlJztcblx0ICAgIGRpdi5zdHlsZS56SW5kZXggPSAyO1xuXHQgICAgZGl2LnN0eWxlLmJvcmRlclN0eWxlID0gJ25vbmUnO1xuXG5cdCAgICBcblx0ICAgIGRpdi5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIHRoaXMuX29uQ2xpY2suYmluZCh0aGlzKSk7XG5cdCAgICBkaXYuYWRkRXZlbnRMaXN0ZW5lcignZm9jdXMnLCB0aGlzLl9vbkZvY3VzLmJpbmQodGhpcykpO1xuXHQgICAgZGl2LmFkZEV2ZW50TGlzdGVuZXIoJ2ZvY3Vzb3V0JywgdGhpcy5fb25Gb2N1c091dC5iaW5kKHRoaXMpKTtcblx0fVxuXHQgICBcdFxuXG5cblxuXHRkaXYudGl0bGUgPSBkaXNwbGF5T2JqZWN0LmFjY2Vzc2libGVUaXRsZSB8fCAnZGlzcGxheU9iamVjdCAnICsgdGhpcy50YWJJbmRleDtcblxuXHQvL1xuXHRcblx0ZGlzcGxheU9iamVjdC5fYWNjZXNzaWJsZUFjdGl2ZSA9IHRydWU7XG5cdGRpc3BsYXlPYmplY3QuX2FjY2Vzc2libGVEaXYgPSBkaXY7XG5cdGRpdi5kaXNwbGF5T2JqZWN0ID0gZGlzcGxheU9iamVjdDtcblxuXG5cdHRoaXMuY2hpbGRyZW4ucHVzaChkaXNwbGF5T2JqZWN0KTtcblx0dGhpcy5kaXYuYXBwZW5kQ2hpbGQoIGRpc3BsYXlPYmplY3QuX2FjY2Vzc2libGVEaXYgKTtcblx0ZGlzcGxheU9iamVjdC5fYWNjZXNzaWJsZURpdi50YWJJbmRleCA9IGRpc3BsYXlPYmplY3QudGFiSW5kZXg7XG59O1xuXG5cbi8qKlxuICogTWFwcyB0aGUgZGl2IGJ1dHRvbiBwcmVzcyB0byBwaXhpJ3MgSW50ZXJhY3Rpb25NYW5hZ2VyIChjbGljaylcbiAqIEBwcml2YXRlXG4gKi9cbkFjY2Vzc2liaWxpdHlNYW5hZ2VyLnByb3RvdHlwZS5fb25DbGljayA9IGZ1bmN0aW9uKGUpXG57XG5cdHZhciBpbnRlcmFjdGlvbk1hbmFnZXIgPSB0aGlzLnJlbmRlcmVyLnBsdWdpbnMuaW50ZXJhY3Rpb247XG5cdGludGVyYWN0aW9uTWFuYWdlci5kaXNwYXRjaEV2ZW50KGUudGFyZ2V0LmRpc3BsYXlPYmplY3QsICdjbGljaycsIGludGVyYWN0aW9uTWFuYWdlci5ldmVudERhdGEpO1xufTtcblxuLyoqXG4gKiBNYXBzIHRoZSBkaXYgZm9jdXMgZXZlbnRzIHRvIHBpeGlzIEludGVyYWN0aW9uTWFuYWdlciAobW91c2VvdmVyKVxuICogQHByaXZhdGVcbiAqL1xuQWNjZXNzaWJpbGl0eU1hbmFnZXIucHJvdG90eXBlLl9vbkZvY3VzID0gZnVuY3Rpb24oZSlcbntcblx0dmFyIGludGVyYWN0aW9uTWFuYWdlciA9IHRoaXMucmVuZGVyZXIucGx1Z2lucy5pbnRlcmFjdGlvbjtcblx0aW50ZXJhY3Rpb25NYW5hZ2VyLmRpc3BhdGNoRXZlbnQoZS50YXJnZXQuZGlzcGxheU9iamVjdCwgJ21vdXNlb3ZlcicsIGludGVyYWN0aW9uTWFuYWdlci5ldmVudERhdGEpO1xufTtcblxuLyoqXG4gKiBNYXBzIHRoZSBkaXYgZm9jdXMgZXZlbnRzIHRvIHBpeGlzIEludGVyYWN0aW9uTWFuYWdlciAobW91c2VvdXQpXG4gKiBAcHJpdmF0ZVxuICovXG5BY2Nlc3NpYmlsaXR5TWFuYWdlci5wcm90b3R5cGUuX29uRm9jdXNPdXQgPSBmdW5jdGlvbihlKVxue1xuXHR2YXIgaW50ZXJhY3Rpb25NYW5hZ2VyID0gdGhpcy5yZW5kZXJlci5wbHVnaW5zLmludGVyYWN0aW9uO1xuXHRpbnRlcmFjdGlvbk1hbmFnZXIuZGlzcGF0Y2hFdmVudChlLnRhcmdldC5kaXNwbGF5T2JqZWN0LCAnbW91c2VvdXQnLCBpbnRlcmFjdGlvbk1hbmFnZXIuZXZlbnREYXRhKTtcbn07XG5cbi8qKlxuICogSXMgY2FsbGVkIHdoZW4gYSBrZXkgaXMgcHJlc3NlZFxuICpcbiAqIEBwcml2YXRlXG4gKi9cbkFjY2Vzc2liaWxpdHlNYW5hZ2VyLnByb3RvdHlwZS5fb25LZXlEb3duID0gZnVuY3Rpb24oZSlcbntcblx0aWYoZS5rZXlDb2RlICE9PSA5KVxuXHR7XG5cdFx0cmV0dXJuO1xuXHR9XG5cblx0dGhpcy5hY3RpdmF0ZSgpO1xufTtcblxuLyoqXG4gKiBJcyBjYWxsZWQgd2hlbiB0aGUgbW91c2UgbW92ZXMgYWNyb3NzIHRoZSByZW5kZXJlciBlbGVtZW50XG4gKlxuICogQHByaXZhdGVcbiAqL1xuQWNjZXNzaWJpbGl0eU1hbmFnZXIucHJvdG90eXBlLl9vbk1vdXNlTW92ZSA9IGZ1bmN0aW9uKClcbntcblx0dGhpcy5kZWFjdGl2YXRlKCk7XG59O1xuXG5cbi8qKlxuICogRGVzdHJveXMgdGhlIGFjY2Vzc2liaWxpdHkgbWFuYWdlclxuICpcbiAqL1xuQWNjZXNzaWJpbGl0eU1hbmFnZXIucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoKSBcbntcblx0dGhpcy5kaXYgPSBudWxsO1xuXG5cdGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5jaGlsZHJlbi5sZW5ndGg7IGkrKylcblx0e1xuXHRcdHRoaXMuY2hpbGRyZW5baV0uZGl2ID0gbnVsbDtcblx0fVxuXG5cdFxuXHR3aW5kb3cuZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignbW91c2Vtb3ZlJywgdGhpcy5fb25Nb3VzZU1vdmUpO1xuXHR3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsIHRoaXMuX29uS2V5RG93bik7XG5cdFx0XG5cdHRoaXMucG9vbCA9IG51bGw7XG5cdHRoaXMuY2hpbGRyZW4gPSBudWxsO1xuXHR0aGlzLnJlbmRlcmVyID0gbnVsbDtcblxufTtcblxuY29yZS5XZWJHTFJlbmRlcmVyLnJlZ2lzdGVyUGx1Z2luKCdhY2Nlc3NpYmlsaXR5JywgQWNjZXNzaWJpbGl0eU1hbmFnZXIpO1xuY29yZS5DYW52YXNSZW5kZXJlci5yZWdpc3RlclBsdWdpbignYWNjZXNzaWJpbGl0eScsIEFjY2Vzc2liaWxpdHlNYW5hZ2VyKTtcblxuIiwiLyoqXG4gKiBEZWZhdWx0IHByb3BlcnR5IHZhbHVlcyBvZiBhY2Nlc3NpYmxlIG9iamVjdHNcbiAqIHVzZWQgYnkge0BsaW5rIFBJWEkuYWNjZXNzaWJpbGl0eS5BY2Nlc3NpYmlsaXR5TWFuYWdlcn0uXG4gKlxuICogQG1peGluXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQGV4YW1wbGVcbiAqICAgICAgZnVuY3Rpb24gTXlPYmplY3QoKSB7fVxuICpcbiAqICAgICAgT2JqZWN0LmFzc2lnbihcbiAqICAgICAgICAgIE15T2JqZWN0LnByb3RvdHlwZSxcbiAqICAgICAgICAgIFBJWEkuYWNjZXNzaWJpbGl0eS5hY2Nlc3NpYmxlVGFyZ2V0XG4gKiAgICAgICk7XG4gKi9cbnZhciBhY2Nlc3NpYmxlVGFyZ2V0ID0ge1xuICAgIFxuICAgIC8qKlxuICAgICAqIEB0b2RvIE5lZWRzIGRvY3MuXG4gICAgICovXG4gICAgYWNjZXNzaWJsZTpmYWxzZSxcblxuICAgIC8qKlxuICAgICAqIEB0b2RvIE5lZWRzIGRvY3MuXG4gICAgICovXG4gICAgYWNjZXNzaWJsZVRpdGxlOm51bGwsXG5cbiAgICAvKipcbiAgICAgKiBAdG9kbyBOZWVkcyBkb2NzLlxuICAgICAqL1xuICAgIHRhYkluZGV4OjAsXG5cbiAgICAvKipcbiAgICAgKiBAdG9kbyBOZWVkcyBkb2NzLlxuICAgICAqL1xuICAgIF9hY2Nlc3NpYmxlQWN0aXZlOmZhbHNlLFxuXG4gICAgLyoqXG4gICAgICogQHRvZG8gTmVlZHMgZG9jcy5cbiAgICAgKi9cbiAgICBfYWNjZXNzaWJsZURpdjpmYWxzZVxuXG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGFjY2Vzc2libGVUYXJnZXQ7XG4iLCIvKipcbiAqIEBmaWxlICAgICAgICBNYWluIGV4cG9ydCBvZiB0aGUgUElYSSBhY2Nlc3NpYmlsaXR5IGxpYnJhcnlcbiAqIEBhdXRob3IgICAgICBNYXQgR3JvdmVzIDxtYXRAZ29vZGJveWRpZ2l0YWwuY29tPlxuICogQGNvcHlyaWdodCAgIDIwMTMtMjAxNSBHb29kQm95RGlnaXRhbFxuICogQGxpY2Vuc2UgICAgIHtAbGluayBodHRwczovL2dpdGh1Yi5jb20vcGl4aWpzL3BpeGkuanMvYmxvYi9tYXN0ZXIvTElDRU5TRXxNSVQgTGljZW5zZX1cbiAqL1xuXG4vKipcbiAqIEBuYW1lc3BhY2UgUElYSS5pbnRlcmFjdGlvblxuICovXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgICBhY2Nlc3NpYmxlVGFyZ2V0OiAgICAgcmVxdWlyZSgnLi9hY2Nlc3NpYmxlVGFyZ2V0JyksXG4gICAgQWNjZXNzaWJpbGl0eU1hbmFnZXI6IHJlcXVpcmUoJy4vQWNjZXNzaWJpbGl0eU1hbmFnZXInKVxufTtcbiIsIi8qKlxuICogQ29uc3RhbnQgdmFsdWVzIHVzZWQgaW4gcGl4aVxuICpcbiAqIEBsZW5kcyBQSVhJXG4gKi9cbnZhciBDT05TVCA9IHtcbiAgICAvKipcbiAgICAgKiBTdHJpbmcgb2YgdGhlIGN1cnJlbnQgUElYSSB2ZXJzaW9uXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQGNvbnN0YW50XG4gICAgICogQHByb3BlcnR5IHtzdHJpbmd9IFZFUlNJT05cbiAgICAgKi9cbiAgICBWRVJTSU9OOiByZXF1aXJlKCcuLi8uLi9wYWNrYWdlLmpzb24nKS52ZXJzaW9uLFxuXG4gICAgLyoqXG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IFBJXzIgLSBUd28gUGlcbiAgICAgKiBAY29uc3RhbnRcbiAgICAgKiBAc3RhdGljXG4gICAgICovXG4gICAgUElfMjogTWF0aC5QSSAqIDIsXG5cbiAgICAvKipcbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gUkFEX1RPX0RFRyAtIENvbnN0YW50IGNvbnZlcnNpb24gZmFjdG9yIGZvciBjb252ZXJ0aW5nIHJhZGlhbnMgdG8gZGVncmVlc1xuICAgICAqIEBjb25zdGFudFxuICAgICAqIEBzdGF0aWNcbiAgICAgKi9cbiAgICBSQURfVE9fREVHOiAxODAgLyBNYXRoLlBJLFxuXG4gICAgLyoqXG4gICAgICogQHByb3BlcnR5IHtOdW1iZXJ9IERFR19UT19SQUQgLSBDb25zdGFudCBjb252ZXJzaW9uIGZhY3RvciBmb3IgY29udmVydGluZyBkZWdyZWVzIHRvIHJhZGlhbnNcbiAgICAgKiBAY29uc3RhbnRcbiAgICAgKiBAc3RhdGljXG4gICAgICovXG4gICAgREVHX1RPX1JBRDogTWF0aC5QSSAvIDE4MCxcblxuICAgIC8qKlxuICAgICAqIFRhcmdldCBmcmFtZXMgcGVyIG1pbGxpc2Vjb25kLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBjb25zdGFudFxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBUQVJHRVRfRlBNUz0wLjA2XG4gICAgICovXG4gICAgVEFSR0VUX0ZQTVM6IDAuMDYsXG5cbiAgICAvKipcbiAgICAgKiBDb25zdGFudCB0byBpZGVudGlmeSB0aGUgUmVuZGVyZXIgVHlwZS5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAY29uc3RhbnRcbiAgICAgKiBAcHJvcGVydHkge29iamVjdH0gUkVOREVSRVJfVFlQRVxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBSRU5ERVJFUl9UWVBFLlVOS05PV05cbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gUkVOREVSRVJfVFlQRS5XRUJHTFxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBSRU5ERVJFUl9UWVBFLkNBTlZBU1xuICAgICAqL1xuICAgIFJFTkRFUkVSX1RZUEU6IHtcbiAgICAgICAgVU5LTk9XTjogICAgMCxcbiAgICAgICAgV0VCR0w6ICAgICAgMSxcbiAgICAgICAgQ0FOVkFTOiAgICAgMlxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBWYXJpb3VzIGJsZW5kIG1vZGVzIHN1cHBvcnRlZCBieSBQSVhJLiBJTVBPUlRBTlQgLSBUaGUgV2ViR0wgcmVuZGVyZXIgb25seSBzdXBwb3J0c1xuICAgICAqIHRoZSBOT1JNQUwsIEFERCwgTVVMVElQTFkgYW5kIFNDUkVFTiBibGVuZCBtb2Rlcy4gQW55dGhpbmcgZWxzZSB3aWxsIHNpbGVudGx5IGFjdCBsaWtlXG4gICAgICogTk9STUFMLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBjb25zdGFudFxuICAgICAqIEBwcm9wZXJ0eSB7b2JqZWN0fSBCTEVORF9NT0RFU1xuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBCTEVORF9NT0RFUy5OT1JNQUxcbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gQkxFTkRfTU9ERVMuQUREXG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IEJMRU5EX01PREVTLk1VTFRJUExZXG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IEJMRU5EX01PREVTLlNDUkVFTlxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBCTEVORF9NT0RFUy5PVkVSTEFZXG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IEJMRU5EX01PREVTLkRBUktFTlxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBCTEVORF9NT0RFUy5MSUdIVEVOXG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IEJMRU5EX01PREVTLkNPTE9SX0RPREdFXG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IEJMRU5EX01PREVTLkNPTE9SX0JVUk5cbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gQkxFTkRfTU9ERVMuSEFSRF9MSUdIVFxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBCTEVORF9NT0RFUy5TT0ZUX0xJR0hUXG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IEJMRU5EX01PREVTLkRJRkZFUkVOQ0VcbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gQkxFTkRfTU9ERVMuRVhDTFVTSU9OXG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IEJMRU5EX01PREVTLkhVRVxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBCTEVORF9NT0RFUy5TQVRVUkFUSU9OXG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IEJMRU5EX01PREVTLkNPTE9SXG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IEJMRU5EX01PREVTLkxVTUlOT1NJVFlcbiAgICAgKi9cbiAgICBCTEVORF9NT0RFUzoge1xuICAgICAgICBOT1JNQUw6ICAgICAgICAgMCxcbiAgICAgICAgQUREOiAgICAgICAgICAgIDEsXG4gICAgICAgIE1VTFRJUExZOiAgICAgICAyLFxuICAgICAgICBTQ1JFRU46ICAgICAgICAgMyxcbiAgICAgICAgT1ZFUkxBWTogICAgICAgIDQsXG4gICAgICAgIERBUktFTjogICAgICAgICA1LFxuICAgICAgICBMSUdIVEVOOiAgICAgICAgNixcbiAgICAgICAgQ09MT1JfRE9ER0U6ICAgIDcsXG4gICAgICAgIENPTE9SX0JVUk46ICAgICA4LFxuICAgICAgICBIQVJEX0xJR0hUOiAgICAgOSxcbiAgICAgICAgU09GVF9MSUdIVDogICAgIDEwLFxuICAgICAgICBESUZGRVJFTkNFOiAgICAgMTEsXG4gICAgICAgIEVYQ0xVU0lPTjogICAgICAxMixcbiAgICAgICAgSFVFOiAgICAgICAgICAgIDEzLFxuICAgICAgICBTQVRVUkFUSU9OOiAgICAgMTQsXG4gICAgICAgIENPTE9SOiAgICAgICAgICAxNSxcbiAgICAgICAgTFVNSU5PU0lUWTogICAgIDE2XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFZhcmlvdXMgd2ViZ2wgZHJhdyBtb2Rlcy4gVGhlc2UgY2FuIGJlIHVzZWQgdG8gc3BlY2lmeSB3aGljaCBHTCBkcmF3TW9kZSB0byB1c2VcbiAgICAgKiB1bmRlciBjZXJ0YWluIHNpdHVhdGlvbnMgYW5kIHJlbmRlcmVycy5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAY29uc3RhbnRcbiAgICAgKiBAcHJvcGVydHkge29iamVjdH0gRFJBV19NT0RFU1xuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBEUkFXX01PREVTLlBPSU5UU1xuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBEUkFXX01PREVTLkxJTkVTXG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IERSQVdfTU9ERVMuTElORV9MT09QXG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IERSQVdfTU9ERVMuTElORV9TVFJJUFxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBEUkFXX01PREVTLlRSSUFOR0xFU1xuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBEUkFXX01PREVTLlRSSUFOR0xFX1NUUklQXG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IERSQVdfTU9ERVMuVFJJQU5HTEVfRkFOXG4gICAgICovXG4gICAgRFJBV19NT0RFUzoge1xuICAgICAgICBQT0lOVFM6ICAgICAgICAgMCxcbiAgICAgICAgTElORVM6ICAgICAgICAgIDEsXG4gICAgICAgIExJTkVfTE9PUDogICAgICAyLFxuICAgICAgICBMSU5FX1NUUklQOiAgICAgMyxcbiAgICAgICAgVFJJQU5HTEVTOiAgICAgIDQsXG4gICAgICAgIFRSSUFOR0xFX1NUUklQOiA1LFxuICAgICAgICBUUklBTkdMRV9GQU46ICAgNlxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBUaGUgc2NhbGUgbW9kZXMgdGhhdCBhcmUgc3VwcG9ydGVkIGJ5IHBpeGkuXG4gICAgICpcbiAgICAgKiBUaGUgREVGQVVMVCBzY2FsZSBtb2RlIGFmZmVjdHMgdGhlIGRlZmF1bHQgc2NhbGluZyBtb2RlIG9mIGZ1dHVyZSBvcGVyYXRpb25zLlxuICAgICAqIEl0IGNhbiBiZSByZS1hc3NpZ25lZCB0byBlaXRoZXIgTElORUFSIG9yIE5FQVJFU1QsIGRlcGVuZGluZyB1cG9uIHN1aXRhYmlsaXR5LlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBjb25zdGFudFxuICAgICAqIEBwcm9wZXJ0eSB7b2JqZWN0fSBTQ0FMRV9NT0RFU1xuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBTQ0FMRV9NT0RFUy5ERUZBVUxUPUxJTkVBUlxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBTQ0FMRV9NT0RFUy5MSU5FQVIgU21vb3RoIHNjYWxpbmdcbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gU0NBTEVfTU9ERVMuTkVBUkVTVCBQaXhlbGF0aW5nIHNjYWxpbmdcbiAgICAgKi9cbiAgICBTQ0FMRV9NT0RFUzoge1xuICAgICAgICBERUZBVUxUOiAgICAwLFxuICAgICAgICBMSU5FQVI6ICAgICAwLFxuICAgICAgICBORUFSRVNUOiAgICAxXG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFRoZSBwcmVmaXggdGhhdCBkZW5vdGVzIGEgVVJMIGlzIGZvciBhIHJldGluYSBhc3NldFxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBjb25zdGFudFxuICAgICAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBSRVRJTkFfUFJFRklYXG4gICAgICovXG4gICAgLy9leGFtcGxlOiAnQDJ4JyxcbiAgICBSRVRJTkFfUFJFRklYOiAvQCguKyl4LyxcblxuICAgIFJFU09MVVRJT046MSxcblxuICAgIEZJTFRFUl9SRVNPTFVUSU9OOjEsXG5cbiAgICAvKipcbiAgICAgKiBUaGUgZGVmYXVsdCByZW5kZXIgb3B0aW9ucyBpZiBub25lIGFyZSBzdXBwbGllZCB0byB7QGxpbmsgUElYSS5XZWJHTFJlbmRlcmVyfVxuICAgICAqIG9yIHtAbGluayBQSVhJLkNhbnZhc1JlbmRlcmVyfS5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAY29uc3RhbnRcbiAgICAgKiBAcHJvcGVydHkge29iamVjdH0gREVGQVVMVF9SRU5ERVJfT1BUSU9OU1xuICAgICAqIEBwcm9wZXJ0eSB7SFRNTENhbnZhc0VsZW1lbnR9IERFRkFVTFRfUkVOREVSX09QVElPTlMudmlldz1udWxsXG4gICAgICogQHByb3BlcnR5IHtib29sZWFufSBERUZBVUxUX1JFTkRFUl9PUFRJT05TLnRyYW5zcGFyZW50PWZhbHNlXG4gICAgICogQHByb3BlcnR5IHtib29sZWFufSBERUZBVUxUX1JFTkRFUl9PUFRJT05TLmFudGlhbGlhcz1mYWxzZVxuICAgICAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gREVGQVVMVF9SRU5ERVJfT1BUSU9OUy5mb3JjZUZYQUE9ZmFsc2VcbiAgICAgKiBAcHJvcGVydHkge2Jvb2xlYW59IERFRkFVTFRfUkVOREVSX09QVElPTlMucHJlc2VydmVEcmF3aW5nQnVmZmVyPWZhbHNlXG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IERFRkFVTFRfUkVOREVSX09QVElPTlMucmVzb2x1dGlvbj0xXG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IERFRkFVTFRfUkVOREVSX09QVElPTlMuYmFja2dyb3VuZENvbG9yPTB4MDAwMDAwXG4gICAgICogQHByb3BlcnR5IHtib29sZWFufSBERUZBVUxUX1JFTkRFUl9PUFRJT05TLmNsZWFyQmVmb3JlUmVuZGVyPXRydWVcbiAgICAgKiBAcHJvcGVydHkge2Jvb2xlYW59IERFRkFVTFRfUkVOREVSX09QVElPTlMuYXV0b1Jlc2l6ZT1mYWxzZVxuICAgICAqL1xuICAgIERFRkFVTFRfUkVOREVSX09QVElPTlM6IHtcbiAgICAgICAgdmlldzogbnVsbCxcbiAgICAgICAgcmVzb2x1dGlvbjogMSxcbiAgICAgICAgYW50aWFsaWFzOiBmYWxzZSxcbiAgICAgICAgZm9yY2VGWEFBOiBmYWxzZSxcbiAgICAgICAgYXV0b1Jlc2l6ZTogZmFsc2UsXG4gICAgICAgIHRyYW5zcGFyZW50OiBmYWxzZSxcbiAgICAgICAgYmFja2dyb3VuZENvbG9yOiAweDAwMDAwMCxcbiAgICAgICAgY2xlYXJCZWZvcmVSZW5kZXI6IHRydWUsXG4gICAgICAgIHByZXNlcnZlRHJhd2luZ0J1ZmZlcjogZmFsc2UsXG4gICAgICAgIHJvdW5kUGl4ZWxzOiBmYWxzZVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBDb25zdGFudHMgdGhhdCBpZGVudGlmeSBzaGFwZXMsIG1haW5seSB0byBwcmV2ZW50IGBpbnN0YW5jZW9mYCBjYWxscy5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAY29uc3RhbnRcbiAgICAgKiBAcHJvcGVydHkge29iamVjdH0gU0hBUEVTXG4gICAgICogQHByb3BlcnR5IHtvYmplY3R9IFNIQVBFUy5QT0xZPTBcbiAgICAgKiBAcHJvcGVydHkge29iamVjdH0gU0hBUEVTLlJFQ1Q9MVxuICAgICAqIEBwcm9wZXJ0eSB7b2JqZWN0fSBTSEFQRVMuQ0lSQz0yXG4gICAgICogQHByb3BlcnR5IHtvYmplY3R9IFNIQVBFUy5FTElQPTNcbiAgICAgKiBAcHJvcGVydHkge29iamVjdH0gU0hBUEVTLlJSRUM9NFxuICAgICAqL1xuICAgIFNIQVBFUzoge1xuICAgICAgICBQT0xZOiAwLFxuICAgICAgICBSRUNUOiAxLFxuICAgICAgICBDSVJDOiAyLFxuICAgICAgICBFTElQOiAzLFxuICAgICAgICBSUkVDOiA0XG4gICAgfSxcblxuICAgIC8vIFRPRE86IG1heWJlIGNoYW5nZSB0byBTUFJJVEUuQkFUQ0hfU0laRTogMjAwMFxuICAgIC8vIFRPRE86IG1heWJlIGFkZCBQQVJUSUNMRS5CQVRDSF9TSVpFOiAxNTAwMFxuICAgIFNQUklURV9CQVRDSF9TSVpFOiAyMDAwIC8vbmljZSBiYWxhbmNlIGJldHdlZW4gbW9iaWxlIGFuZCBkZXNrdG9wIG1hY2hpbmVzXG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IENPTlNUO1xuIiwidmFyIG1hdGggPSByZXF1aXJlKCcuLi9tYXRoJyksXG4gICAgdXRpbHMgPSByZXF1aXJlKCcuLi91dGlscycpLFxuICAgIERpc3BsYXlPYmplY3QgPSByZXF1aXJlKCcuL0Rpc3BsYXlPYmplY3QnKSxcbiAgICBSZW5kZXJUZXh0dXJlID0gcmVxdWlyZSgnLi4vdGV4dHVyZXMvUmVuZGVyVGV4dHVyZScpLFxuICAgIF90ZW1wTWF0cml4ID0gbmV3IG1hdGguTWF0cml4KCk7XG5cbi8qKlxuICogQSBDb250YWluZXIgcmVwcmVzZW50cyBhIGNvbGxlY3Rpb24gb2YgZGlzcGxheSBvYmplY3RzLlxuICogSXQgaXMgdGhlIGJhc2UgY2xhc3Mgb2YgYWxsIGRpc3BsYXkgb2JqZWN0cyB0aGF0IGFjdCBhcyBhIGNvbnRhaW5lciBmb3Igb3RoZXIgb2JqZWN0cy5cbiAqXG4gKmBgYGpzXG4gKiB2YXIgY29udGFpbmVyID0gbmV3IFBJWEkuQ29udGFpbmVyKCk7XG4gKiBjb250YWluZXIuYWRkQ2hpbGQoc3ByaXRlKTtcbiAqIGBgYFxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLkRpc3BsYXlPYmplY3RcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKi9cbmZ1bmN0aW9uIENvbnRhaW5lcigpXG57XG4gICAgRGlzcGxheU9iamVjdC5jYWxsKHRoaXMpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGFycmF5IG9mIGNoaWxkcmVuIG9mIHRoaXMgY29udGFpbmVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5EaXNwbGF5T2JqZWN0W119XG4gICAgICogQHJlYWRvbmx5XG4gICAgICovXG4gICAgdGhpcy5jaGlsZHJlbiA9IFtdO1xufVxuXG4vLyBjb25zdHJ1Y3RvclxuQ29udGFpbmVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoRGlzcGxheU9iamVjdC5wcm90b3R5cGUpO1xuQ29udGFpbmVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IENvbnRhaW5lcjtcbm1vZHVsZS5leHBvcnRzID0gQ29udGFpbmVyO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhDb250YWluZXIucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogVGhlIHdpZHRoIG9mIHRoZSBDb250YWluZXIsIHNldHRpbmcgdGhpcyB3aWxsIGFjdHVhbGx5IG1vZGlmeSB0aGUgc2NhbGUgdG8gYWNoaWV2ZSB0aGUgdmFsdWUgc2V0XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuQ29udGFpbmVyI1xuICAgICAqL1xuICAgIHdpZHRoOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuc2NhbGUueCAqIHRoaXMuZ2V0TG9jYWxCb3VuZHMoKS53aWR0aDtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcblxuICAgICAgICAgICAgdmFyIHdpZHRoID0gdGhpcy5nZXRMb2NhbEJvdW5kcygpLndpZHRoO1xuXG4gICAgICAgICAgICBpZiAod2lkdGggIT09IDApXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdGhpcy5zY2FsZS54ID0gdmFsdWUgLyB3aWR0aDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNjYWxlLnggPSAxO1xuICAgICAgICAgICAgfVxuXG5cbiAgICAgICAgICAgIHRoaXMuX3dpZHRoID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVGhlIGhlaWdodCBvZiB0aGUgQ29udGFpbmVyLCBzZXR0aW5nIHRoaXMgd2lsbCBhY3R1YWxseSBtb2RpZnkgdGhlIHNjYWxlIHRvIGFjaGlldmUgdGhlIHZhbHVlIHNldFxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLkNvbnRhaW5lciNcbiAgICAgKi9cbiAgICBoZWlnaHQ6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gIHRoaXMuc2NhbGUueSAqIHRoaXMuZ2V0TG9jYWxCb3VuZHMoKS5oZWlnaHQ7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG5cbiAgICAgICAgICAgIHZhciBoZWlnaHQgPSB0aGlzLmdldExvY2FsQm91bmRzKCkuaGVpZ2h0O1xuXG4gICAgICAgICAgICBpZiAoaGVpZ2h0ICE9PSAwKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHRoaXMuc2NhbGUueSA9IHZhbHVlIC8gaGVpZ2h0IDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNjYWxlLnkgPSAxO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLl9oZWlnaHQgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuXG4vKipcbiAqIE92ZXJyaWRhYmxlIG1ldGhvZCB0aGF0IGNhbiBiZSB1c2VkIGJ5IENvbnRhaW5lciBzdWJjbGFzc2VzIHdoZW5ldmVyIHRoZSBjaGlsZHJlbiBhcnJheSBpcyBtb2RpZmllZFxuICpcbiAqIEBwcml2YXRlXG4gKi9cbkNvbnRhaW5lci5wcm90b3R5cGUub25DaGlsZHJlbkNoYW5nZSA9IGZ1bmN0aW9uICgpIHt9O1xuXG4vKipcbiAqIEFkZHMgYSBjaGlsZCB0byB0aGUgY29udGFpbmVyLlxuICogXG4gKiBZb3UgY2FuIGFsc28gYWRkIG11bHRwbGUgaXRlbXMgbGlrZSBzbzogbXlDb250YWluZXIuYWRkQ2hpbGQodGhpbmtPbmUsIHRoaW5nVHdvLCB0aGluZ1RocmVlKVxuICogQHBhcmFtIGNoaWxkIHtQSVhJLkRpc3BsYXlPYmplY3R9IFRoZSBEaXNwbGF5T2JqZWN0IHRvIGFkZCB0byB0aGUgY29udGFpbmVyXG4gKiBAcmV0dXJuIHtQSVhJLkRpc3BsYXlPYmplY3R9IFRoZSBjaGlsZCB0aGF0IHdhcyBhZGRlZC5cbiAqL1xuQ29udGFpbmVyLnByb3RvdHlwZS5hZGRDaGlsZCA9IGZ1bmN0aW9uIChjaGlsZClcbnsgXG4gICAgdmFyIGFyZ3VtZW50c0xlbmd0aCA9IGFyZ3VtZW50cy5sZW5ndGg7XG5cbiAgICAvLyBpZiB0aGVyZSBpcyBvbmx5IG9uZSBhcmd1bWVudCB3ZSBjYW4gYnlwYXNzIGxvb3BpbmcgdGhyb3VnaCB0aGUgdGhlbVxuICAgIGlmKGFyZ3VtZW50c0xlbmd0aCA+IDEpXG4gICAge1xuICAgICAgICAvLyBsb29wIHRocm91Z2ggdGhlIGFyZ3VtZW50cyBwcm9wZXJ0eSBhbmQgYWRkIGFsbCBjaGlsZHJlblxuICAgICAgICAvLyB1c2UgaXQgdGhlIHJpZ2h0IHdheSAoLmxlbmd0aCBhbmQgW2ldKSBzbyB0aGF0IHRoaXMgZnVuY3Rpb24gY2FuIHN0aWxsIGJlIG9wdGltaXNlZCBieSBKUyBydW50aW1lc1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFyZ3VtZW50c0xlbmd0aDsgaSsrKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmFkZENoaWxkKCBhcmd1bWVudHNbaV0gKTtcbiAgICAgICAgfVxuICAgIH0gICAgIFxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIC8vIGlmIHRoZSBjaGlsZCBoYXMgYSBwYXJlbnQgdGhlbiBsZXRzIHJlbW92ZSBpdCBhcyBQaXhpIG9iamVjdHMgY2FuIG9ubHkgZXhpc3QgaW4gb25lIHBsYWNlXG4gICAgICAgIGlmIChjaGlsZC5wYXJlbnQpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNoaWxkLnBhcmVudC5yZW1vdmVDaGlsZChjaGlsZCk7XG4gICAgICAgIH1cblxuICAgICAgICBjaGlsZC5wYXJlbnQgPSB0aGlzO1xuICAgICAgICBcbiAgICAgICAgdGhpcy5jaGlsZHJlbi5wdXNoKGNoaWxkKTtcblxuICAgICAgICAvLyBUT0RPIC0gbGV0cyBlaXRoZXIgZG8gYWxsIGNhbGxiYWNrcyBvciBhbGwgZXZlbnRzLi4gbm90IGJvdGghXG4gICAgICAgIHRoaXMub25DaGlsZHJlbkNoYW5nZSh0aGlzLmNoaWxkcmVuLmxlbmd0aC0xKTtcbiAgICAgICAgY2hpbGQuZW1pdCgnYWRkZWQnLCB0aGlzKTtcbiAgICB9XG5cbiAgICByZXR1cm4gY2hpbGQ7XG59O1xuXG4vKipcbiAqIEFkZHMgYSBjaGlsZCB0byB0aGUgY29udGFpbmVyIGF0IGEgc3BlY2lmaWVkIGluZGV4LiBJZiB0aGUgaW5kZXggaXMgb3V0IG9mIGJvdW5kcyBhbiBlcnJvciB3aWxsIGJlIHRocm93blxuICpcbiAqIEBwYXJhbSBjaGlsZCB7UElYSS5EaXNwbGF5T2JqZWN0fSBUaGUgY2hpbGQgdG8gYWRkXG4gKiBAcGFyYW0gaW5kZXgge251bWJlcn0gVGhlIGluZGV4IHRvIHBsYWNlIHRoZSBjaGlsZCBpblxuICogQHJldHVybiB7UElYSS5EaXNwbGF5T2JqZWN0fSBUaGUgY2hpbGQgdGhhdCB3YXMgYWRkZWQuXG4gKi9cbkNvbnRhaW5lci5wcm90b3R5cGUuYWRkQ2hpbGRBdCA9IGZ1bmN0aW9uIChjaGlsZCwgaW5kZXgpXG57XG4gICAgaWYgKGluZGV4ID49IDAgJiYgaW5kZXggPD0gdGhpcy5jaGlsZHJlbi5sZW5ndGgpXG4gICAge1xuICAgICAgICBpZiAoY2hpbGQucGFyZW50KVxuICAgICAgICB7XG4gICAgICAgICAgICBjaGlsZC5wYXJlbnQucmVtb3ZlQ2hpbGQoY2hpbGQpO1xuICAgICAgICB9XG5cbiAgICAgICAgY2hpbGQucGFyZW50ID0gdGhpcztcblxuICAgICAgICB0aGlzLmNoaWxkcmVuLnNwbGljZShpbmRleCwgMCwgY2hpbGQpO1xuXG4gICAgICAgIC8vIFRPRE8gLSBsZXRzIGVpdGhlciBkbyBhbGwgY2FsbGJhY2tzIG9yIGFsbCBldmVudHMuLiBub3QgYm90aCFcbiAgICAgICAgdGhpcy5vbkNoaWxkcmVuQ2hhbmdlKGluZGV4KTtcbiAgICAgICAgY2hpbGQuZW1pdCgnYWRkZWQnLCB0aGlzKTtcblxuICAgICAgICByZXR1cm4gY2hpbGQ7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihjaGlsZCArICdhZGRDaGlsZEF0OiBUaGUgaW5kZXggJysgaW5kZXggKycgc3VwcGxpZWQgaXMgb3V0IG9mIGJvdW5kcyAnICsgdGhpcy5jaGlsZHJlbi5sZW5ndGgpO1xuICAgIH1cbn07XG5cbi8qKlxuICogU3dhcHMgdGhlIHBvc2l0aW9uIG9mIDIgRGlzcGxheSBPYmplY3RzIHdpdGhpbiB0aGlzIGNvbnRhaW5lci5cbiAqXG4gKiBAcGFyYW0gY2hpbGQge1BJWEkuRGlzcGxheU9iamVjdH1cbiAqIEBwYXJhbSBjaGlsZDIge1BJWEkuRGlzcGxheU9iamVjdH1cbiAqL1xuQ29udGFpbmVyLnByb3RvdHlwZS5zd2FwQ2hpbGRyZW4gPSBmdW5jdGlvbiAoY2hpbGQsIGNoaWxkMilcbntcbiAgICBpZiAoY2hpbGQgPT09IGNoaWxkMilcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB2YXIgaW5kZXgxID0gdGhpcy5nZXRDaGlsZEluZGV4KGNoaWxkKTtcbiAgICB2YXIgaW5kZXgyID0gdGhpcy5nZXRDaGlsZEluZGV4KGNoaWxkMik7XG5cbiAgICBpZiAoaW5kZXgxIDwgMCB8fCBpbmRleDIgPCAwKVxuICAgIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdzd2FwQ2hpbGRyZW46IEJvdGggdGhlIHN1cHBsaWVkIERpc3BsYXlPYmplY3RzIG11c3QgYmUgY2hpbGRyZW4gb2YgdGhlIGNhbGxlci4nKTtcbiAgICB9XG5cbiAgICB0aGlzLmNoaWxkcmVuW2luZGV4MV0gPSBjaGlsZDI7XG4gICAgdGhpcy5jaGlsZHJlbltpbmRleDJdID0gY2hpbGQ7XG4gICAgdGhpcy5vbkNoaWxkcmVuQ2hhbmdlKGluZGV4MSA8IGluZGV4MiA/IGluZGV4MSA6IGluZGV4Mik7XG59O1xuXG4vKipcbiAqIFJldHVybnMgdGhlIGluZGV4IHBvc2l0aW9uIG9mIGEgY2hpbGQgRGlzcGxheU9iamVjdCBpbnN0YW5jZVxuICpcbiAqIEBwYXJhbSBjaGlsZCB7UElYSS5EaXNwbGF5T2JqZWN0fSBUaGUgRGlzcGxheU9iamVjdCBpbnN0YW5jZSB0byBpZGVudGlmeVxuICogQHJldHVybiB7bnVtYmVyfSBUaGUgaW5kZXggcG9zaXRpb24gb2YgdGhlIGNoaWxkIGRpc3BsYXkgb2JqZWN0IHRvIGlkZW50aWZ5XG4gKi9cbkNvbnRhaW5lci5wcm90b3R5cGUuZ2V0Q2hpbGRJbmRleCA9IGZ1bmN0aW9uIChjaGlsZClcbntcbiAgICB2YXIgaW5kZXggPSB0aGlzLmNoaWxkcmVuLmluZGV4T2YoY2hpbGQpO1xuXG4gICAgaWYgKGluZGV4ID09PSAtMSlcbiAgICB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignVGhlIHN1cHBsaWVkIERpc3BsYXlPYmplY3QgbXVzdCBiZSBhIGNoaWxkIG9mIHRoZSBjYWxsZXInKTtcbiAgICB9XG5cbiAgICByZXR1cm4gaW5kZXg7XG59O1xuXG4vKipcbiAqIENoYW5nZXMgdGhlIHBvc2l0aW9uIG9mIGFuIGV4aXN0aW5nIGNoaWxkIGluIHRoZSBkaXNwbGF5IG9iamVjdCBjb250YWluZXJcbiAqXG4gKiBAcGFyYW0gY2hpbGQge1BJWEkuRGlzcGxheU9iamVjdH0gVGhlIGNoaWxkIERpc3BsYXlPYmplY3QgaW5zdGFuY2UgZm9yIHdoaWNoIHlvdSB3YW50IHRvIGNoYW5nZSB0aGUgaW5kZXggbnVtYmVyXG4gKiBAcGFyYW0gaW5kZXgge251bWJlcn0gVGhlIHJlc3VsdGluZyBpbmRleCBudW1iZXIgZm9yIHRoZSBjaGlsZCBkaXNwbGF5IG9iamVjdFxuICovXG5Db250YWluZXIucHJvdG90eXBlLnNldENoaWxkSW5kZXggPSBmdW5jdGlvbiAoY2hpbGQsIGluZGV4KVxue1xuICAgIGlmIChpbmRleCA8IDAgfHwgaW5kZXggPj0gdGhpcy5jaGlsZHJlbi5sZW5ndGgpXG4gICAge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RoZSBzdXBwbGllZCBpbmRleCBpcyBvdXQgb2YgYm91bmRzJyk7XG4gICAgfVxuXG4gICAgdmFyIGN1cnJlbnRJbmRleCA9IHRoaXMuZ2V0Q2hpbGRJbmRleChjaGlsZCk7XG5cbiAgICB1dGlscy5yZW1vdmVJdGVtcyh0aGlzLmNoaWxkcmVuLCBjdXJyZW50SW5kZXgsIDEpOyAvLyByZW1vdmUgZnJvbSBvbGQgcG9zaXRpb25cbiAgICB0aGlzLmNoaWxkcmVuLnNwbGljZShpbmRleCwgMCwgY2hpbGQpOyAvL2FkZCBhdCBuZXcgcG9zaXRpb25cbiAgICB0aGlzLm9uQ2hpbGRyZW5DaGFuZ2UoaW5kZXgpO1xufTtcblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBjaGlsZCBhdCB0aGUgc3BlY2lmaWVkIGluZGV4XG4gKlxuICogQHBhcmFtIGluZGV4IHtudW1iZXJ9IFRoZSBpbmRleCB0byBnZXQgdGhlIGNoaWxkIGF0XG4gKiBAcmV0dXJuIHtQSVhJLkRpc3BsYXlPYmplY3R9IFRoZSBjaGlsZCBhdCB0aGUgZ2l2ZW4gaW5kZXgsIGlmIGFueS5cbiAqL1xuQ29udGFpbmVyLnByb3RvdHlwZS5nZXRDaGlsZEF0ID0gZnVuY3Rpb24gKGluZGV4KVxue1xuICAgIGlmIChpbmRleCA8IDAgfHwgaW5kZXggPj0gdGhpcy5jaGlsZHJlbi5sZW5ndGgpXG4gICAge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2dldENoaWxkQXQ6IFN1cHBsaWVkIGluZGV4ICcgKyBpbmRleCArICcgZG9lcyBub3QgZXhpc3QgaW4gdGhlIGNoaWxkIGxpc3QsIG9yIHRoZSBzdXBwbGllZCBEaXNwbGF5T2JqZWN0IGlzIG5vdCBhIGNoaWxkIG9mIHRoZSBjYWxsZXInKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5jaGlsZHJlbltpbmRleF07XG59O1xuXG4vKipcbiAqIFJlbW92ZXMgYSBjaGlsZCBmcm9tIHRoZSBjb250YWluZXIuXG4gKlxuICogQHBhcmFtIGNoaWxkIHtQSVhJLkRpc3BsYXlPYmplY3R9IFRoZSBEaXNwbGF5T2JqZWN0IHRvIHJlbW92ZVxuICogQHJldHVybiB7UElYSS5EaXNwbGF5T2JqZWN0fSBUaGUgY2hpbGQgdGhhdCB3YXMgcmVtb3ZlZC5cbiAqL1xuQ29udGFpbmVyLnByb3RvdHlwZS5yZW1vdmVDaGlsZCA9IGZ1bmN0aW9uIChjaGlsZClcbntcbiAgICB2YXIgYXJndW1lbnRzTGVuZ3RoID0gYXJndW1lbnRzLmxlbmd0aDtcblxuICAgIC8vIGlmIHRoZXJlIGlzIG9ubHkgb25lIGFyZ3VtZW50IHdlIGNhbiBieXBhc3MgbG9vcGluZyB0aHJvdWdoIHRoZSB0aGVtXG4gICAgaWYoYXJndW1lbnRzTGVuZ3RoID4gMSlcbiAgICB7XG4gICAgICAgIC8vIGxvb3AgdGhyb3VnaCB0aGUgYXJndW1lbnRzIHByb3BlcnR5IGFuZCBhZGQgYWxsIGNoaWxkcmVuXG4gICAgICAgIC8vIHVzZSBpdCB0aGUgcmlnaHQgd2F5ICgubGVuZ3RoIGFuZCBbaV0pIHNvIHRoYXQgdGhpcyBmdW5jdGlvbiBjYW4gc3RpbGwgYmUgb3B0aW1pc2VkIGJ5IEpTIHJ1bnRpbWVzXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXJndW1lbnRzTGVuZ3RoOyBpKyspXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMucmVtb3ZlQ2hpbGQoIGFyZ3VtZW50c1tpXSApO1xuICAgICAgICB9XG4gICAgfSAgICAgXG4gICAgZWxzZVxuICAgIHsgICBcbiAgICAgICAgdmFyIGluZGV4ID0gdGhpcy5jaGlsZHJlbi5pbmRleE9mKGNoaWxkKTtcblxuICAgICAgICBpZiAoaW5kZXggPT09IC0xKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjaGlsZC5wYXJlbnQgPSBudWxsO1xuICAgICAgICB1dGlscy5yZW1vdmVJdGVtcyh0aGlzLmNoaWxkcmVuLCBpbmRleCwgMSk7XG5cbiAgICAgICAgLy8gVE9ETyAtIGxldHMgZWl0aGVyIGRvIGFsbCBjYWxsYmFja3Mgb3IgYWxsIGV2ZW50cy4uIG5vdCBib3RoIVxuICAgICAgICB0aGlzLm9uQ2hpbGRyZW5DaGFuZ2UoaW5kZXgpO1xuICAgICAgICBjaGlsZC5lbWl0KCdyZW1vdmVkJywgdGhpcyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGNoaWxkO1xufTtcblxuLyoqXG4gKiBSZW1vdmVzIGEgY2hpbGQgZnJvbSB0aGUgc3BlY2lmaWVkIGluZGV4IHBvc2l0aW9uLlxuICpcbiAqIEBwYXJhbSBpbmRleCB7bnVtYmVyfSBUaGUgaW5kZXggdG8gZ2V0IHRoZSBjaGlsZCBmcm9tXG4gKiBAcmV0dXJuIHtQSVhJLkRpc3BsYXlPYmplY3R9IFRoZSBjaGlsZCB0aGF0IHdhcyByZW1vdmVkLlxuICovXG5Db250YWluZXIucHJvdG90eXBlLnJlbW92ZUNoaWxkQXQgPSBmdW5jdGlvbiAoaW5kZXgpXG57XG4gICAgdmFyIGNoaWxkID0gdGhpcy5nZXRDaGlsZEF0KGluZGV4KTtcblxuICAgIGNoaWxkLnBhcmVudCA9IG51bGw7XG4gICAgdXRpbHMucmVtb3ZlSXRlbXModGhpcy5jaGlsZHJlbiwgaW5kZXgsIDEpO1xuXG4gICAgLy8gVE9ETyAtIGxldHMgZWl0aGVyIGRvIGFsbCBjYWxsYmFja3Mgb3IgYWxsIGV2ZW50cy4uIG5vdCBib3RoIVxuICAgIHRoaXMub25DaGlsZHJlbkNoYW5nZShpbmRleCk7XG4gICAgY2hpbGQuZW1pdCgncmVtb3ZlZCcsIHRoaXMpO1xuXG4gICAgcmV0dXJuIGNoaWxkO1xufTtcblxuLyoqXG4gKiBSZW1vdmVzIGFsbCBjaGlsZHJlbiBmcm9tIHRoaXMgY29udGFpbmVyIHRoYXQgYXJlIHdpdGhpbiB0aGUgYmVnaW4gYW5kIGVuZCBpbmRleGVzLlxuICpcbiAqIEBwYXJhbSBiZWdpbkluZGV4IHtudW1iZXJ9IFRoZSBiZWdpbm5pbmcgcG9zaXRpb24uIERlZmF1bHQgdmFsdWUgaXMgMC5cbiAqIEBwYXJhbSBlbmRJbmRleCB7bnVtYmVyfSBUaGUgZW5kaW5nIHBvc2l0aW9uLiBEZWZhdWx0IHZhbHVlIGlzIHNpemUgb2YgdGhlIGNvbnRhaW5lci5cbiAqL1xuQ29udGFpbmVyLnByb3RvdHlwZS5yZW1vdmVDaGlsZHJlbiA9IGZ1bmN0aW9uIChiZWdpbkluZGV4LCBlbmRJbmRleClcbntcbiAgICB2YXIgYmVnaW4gPSBiZWdpbkluZGV4IHx8IDA7XG4gICAgdmFyIGVuZCA9IHR5cGVvZiBlbmRJbmRleCA9PT0gJ251bWJlcicgPyBlbmRJbmRleCA6IHRoaXMuY2hpbGRyZW4ubGVuZ3RoO1xuICAgIHZhciByYW5nZSA9IGVuZCAtIGJlZ2luO1xuICAgIHZhciByZW1vdmVkLCBpO1xuXG4gICAgaWYgKHJhbmdlID4gMCAmJiByYW5nZSA8PSBlbmQpXG4gICAge1xuICAgICAgICByZW1vdmVkID0gdGhpcy5jaGlsZHJlbi5zcGxpY2UoYmVnaW4sIHJhbmdlKTtcblxuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgcmVtb3ZlZC5sZW5ndGg7ICsraSlcbiAgICAgICAge1xuICAgICAgICAgICAgcmVtb3ZlZFtpXS5wYXJlbnQgPSBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5vbkNoaWxkcmVuQ2hhbmdlKGJlZ2luSW5kZXgpO1xuXG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCByZW1vdmVkLmxlbmd0aDsgKytpKVxuICAgICAgICB7XG4gICAgICAgICAgICByZW1vdmVkW2ldLmVtaXQoJ3JlbW92ZWQnLCB0aGlzKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiByZW1vdmVkO1xuICAgIH1cbiAgICBlbHNlIGlmIChyYW5nZSA9PT0gMCAmJiB0aGlzLmNoaWxkcmVuLmxlbmd0aCA9PT0gMClcbiAgICB7XG4gICAgICAgIHJldHVybiBbXTtcbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ3JlbW92ZUNoaWxkcmVuOiBudW1lcmljIHZhbHVlcyBhcmUgb3V0c2lkZSB0aGUgYWNjZXB0YWJsZSByYW5nZS4nKTtcbiAgICB9XG59O1xuXG4vKipcbiAqIFVzZWZ1bCBmdW5jdGlvbiB0aGF0IHJldHVybnMgYSB0ZXh0dXJlIG9mIHRoZSBkaXNwbGF5IG9iamVjdCB0aGF0IGNhbiB0aGVuIGJlIHVzZWQgdG8gY3JlYXRlIHNwcml0ZXNcbiAqIFRoaXMgY2FuIGJlIHF1aXRlIHVzZWZ1bCBpZiB5b3VyIGRpc3BsYXlPYmplY3QgaXMgc3RhdGljIC8gY29tcGxpY2F0ZWQgYW5kIG5lZWRzIHRvIGJlIHJldXNlZCBtdWx0aXBsZSB0aW1lcy5cbiAqXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuQ2FudmFzUmVuZGVyZXJ8UElYSS5XZWJHTFJlbmRlcmVyfSBUaGUgcmVuZGVyZXIgdXNlZCB0byBnZW5lcmF0ZSB0aGUgdGV4dHVyZS5cbiAqIEBwYXJhbSByZXNvbHV0aW9uIHtudW1iZXJ9IFRoZSByZXNvbHV0aW9uIG9mIHRoZSB0ZXh0dXJlIGJlaW5nIGdlbmVyYXRlZFxuICogQHBhcmFtIHNjYWxlTW9kZSB7bnVtYmVyfSBTZWUge0BsaW5rIFBJWEkuU0NBTEVfTU9ERVN9IGZvciBwb3NzaWJsZSB2YWx1ZXNcbiAqIEByZXR1cm4ge1BJWEkuVGV4dHVyZX0gYSB0ZXh0dXJlIG9mIHRoZSBkaXNwbGF5IG9iamVjdFxuICovXG5Db250YWluZXIucHJvdG90eXBlLmdlbmVyYXRlVGV4dHVyZSA9IGZ1bmN0aW9uIChyZW5kZXJlciwgcmVzb2x1dGlvbiwgc2NhbGVNb2RlKVxue1xuICAgIHZhciBib3VuZHMgPSB0aGlzLmdldExvY2FsQm91bmRzKCk7XG5cbiAgICB2YXIgcmVuZGVyVGV4dHVyZSA9IG5ldyBSZW5kZXJUZXh0dXJlKHJlbmRlcmVyLCBib3VuZHMud2lkdGggfCAwLCBib3VuZHMuaGVpZ2h0IHwgMCwgc2NhbGVNb2RlLCByZXNvbHV0aW9uKTtcblxuICAgIF90ZW1wTWF0cml4LnR4ID0gLWJvdW5kcy54O1xuICAgIF90ZW1wTWF0cml4LnR5ID0gLWJvdW5kcy55O1xuXG4gICAgcmVuZGVyVGV4dHVyZS5yZW5kZXIodGhpcywgX3RlbXBNYXRyaXgpO1xuXG4gICAgcmV0dXJuIHJlbmRlclRleHR1cmU7XG59O1xuXG4vKlxuICogVXBkYXRlcyB0aGUgdHJhbnNmb3JtIG9uIGFsbCBjaGlsZHJlbiBvZiB0aGlzIGNvbnRhaW5lciBmb3IgcmVuZGVyaW5nXG4gKlxuICogQHByaXZhdGVcbiAqL1xuQ29udGFpbmVyLnByb3RvdHlwZS51cGRhdGVUcmFuc2Zvcm0gPSBmdW5jdGlvbiAoKVxue1xuICAgIGlmICghdGhpcy52aXNpYmxlKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuZGlzcGxheU9iamVjdFVwZGF0ZVRyYW5zZm9ybSgpO1xuXG4gICAgZm9yICh2YXIgaSA9IDAsIGogPSB0aGlzLmNoaWxkcmVuLmxlbmd0aDsgaSA8IGo7ICsraSlcbiAgICB7XG4gICAgICAgIHRoaXMuY2hpbGRyZW5baV0udXBkYXRlVHJhbnNmb3JtKCk7XG4gICAgfVxuXG4gICAgdGhpcy5kaXJ0eVRyYW5zZm9ybSA9IGZhbHNlO1xufTtcblxuLy8gcGVyZm9ybWFuY2UgaW5jcmVhc2UgdG8gYXZvaWQgdXNpbmcgY2FsbC4uICgxMHggZmFzdGVyKVxuQ29udGFpbmVyLnByb3RvdHlwZS5jb250YWluZXJVcGRhdGVUcmFuc2Zvcm0gPSBDb250YWluZXIucHJvdG90eXBlLnVwZGF0ZVRyYW5zZm9ybTtcblxuLyoqXG4gKiBSZXRyaWV2ZXMgdGhlIGJvdW5kcyBvZiB0aGUgQ29udGFpbmVyIGFzIGEgcmVjdGFuZ2xlLiBUaGUgYm91bmRzIGNhbGN1bGF0aW9uIHRha2VzIGFsbCB2aXNpYmxlIGNoaWxkcmVuIGludG8gY29uc2lkZXJhdGlvbi5cbiAqXG4gKiBAcmV0dXJuIHtQSVhJLlJlY3RhbmdsZX0gVGhlIHJlY3Rhbmd1bGFyIGJvdW5kaW5nIGFyZWFcbiAqL1xuQ29udGFpbmVyLnByb3RvdHlwZS5nZXRCb3VuZHMgPSBmdW5jdGlvbiAoKVxue1xuICAgIGlmKCF0aGlzLl9jdXJyZW50Qm91bmRzKVxuICAgIHtcblxuICAgICAgICBpZiAodGhpcy5jaGlsZHJlbi5sZW5ndGggPT09IDApXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiBtYXRoLlJlY3RhbmdsZS5FTVBUWTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFRPRE8gdGhlIGJvdW5kcyBoYXZlIGFscmVhZHkgYmVlbiBjYWxjdWxhdGVkIHRoaXMgcmVuZGVyIHNlc3Npb24gc28gcmV0dXJuIHdoYXQgd2UgaGF2ZVxuXG4gICAgICAgIHZhciBtaW5YID0gSW5maW5pdHk7XG4gICAgICAgIHZhciBtaW5ZID0gSW5maW5pdHk7XG5cbiAgICAgICAgdmFyIG1heFggPSAtSW5maW5pdHk7XG4gICAgICAgIHZhciBtYXhZID0gLUluZmluaXR5O1xuXG4gICAgICAgIHZhciBjaGlsZEJvdW5kcztcbiAgICAgICAgdmFyIGNoaWxkTWF4WDtcbiAgICAgICAgdmFyIGNoaWxkTWF4WTtcblxuICAgICAgICB2YXIgY2hpbGRWaXNpYmxlID0gZmFsc2U7XG5cbiAgICAgICAgZm9yICh2YXIgaSA9IDAsIGogPSB0aGlzLmNoaWxkcmVuLmxlbmd0aDsgaSA8IGo7ICsraSlcbiAgICAgICAge1xuICAgICAgICAgICAgdmFyIGNoaWxkID0gdGhpcy5jaGlsZHJlbltpXTtcblxuICAgICAgICAgICAgaWYgKCFjaGlsZC52aXNpYmxlKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjaGlsZFZpc2libGUgPSB0cnVlO1xuXG4gICAgICAgICAgICBjaGlsZEJvdW5kcyA9IHRoaXMuY2hpbGRyZW5baV0uZ2V0Qm91bmRzKCk7XG5cbiAgICAgICAgICAgIG1pblggPSBtaW5YIDwgY2hpbGRCb3VuZHMueCA/IG1pblggOiBjaGlsZEJvdW5kcy54O1xuICAgICAgICAgICAgbWluWSA9IG1pblkgPCBjaGlsZEJvdW5kcy55ID8gbWluWSA6IGNoaWxkQm91bmRzLnk7XG5cbiAgICAgICAgICAgIGNoaWxkTWF4WCA9IGNoaWxkQm91bmRzLndpZHRoICsgY2hpbGRCb3VuZHMueDtcbiAgICAgICAgICAgIGNoaWxkTWF4WSA9IGNoaWxkQm91bmRzLmhlaWdodCArIGNoaWxkQm91bmRzLnk7XG5cbiAgICAgICAgICAgIG1heFggPSBtYXhYID4gY2hpbGRNYXhYID8gbWF4WCA6IGNoaWxkTWF4WDtcbiAgICAgICAgICAgIG1heFkgPSBtYXhZID4gY2hpbGRNYXhZID8gbWF4WSA6IGNoaWxkTWF4WTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghY2hpbGRWaXNpYmxlKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gbWF0aC5SZWN0YW5nbGUuRU1QVFk7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgYm91bmRzID0gdGhpcy5fYm91bmRzO1xuXG4gICAgICAgIGJvdW5kcy54ID0gbWluWDtcbiAgICAgICAgYm91bmRzLnkgPSBtaW5ZO1xuICAgICAgICBib3VuZHMud2lkdGggPSBtYXhYIC0gbWluWDtcbiAgICAgICAgYm91bmRzLmhlaWdodCA9IG1heFkgLSBtaW5ZO1xuXG4gICAgICAgIHRoaXMuX2N1cnJlbnRCb3VuZHMgPSBib3VuZHM7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuX2N1cnJlbnRCb3VuZHM7XG59O1xuXG5Db250YWluZXIucHJvdG90eXBlLmNvbnRhaW5lckdldEJvdW5kcyA9IENvbnRhaW5lci5wcm90b3R5cGUuZ2V0Qm91bmRzO1xuXG4vKipcbiAqIFJldHJpZXZlcyB0aGUgbm9uLWdsb2JhbCBsb2NhbCBib3VuZHMgb2YgdGhlIENvbnRhaW5lciBhcyBhIHJlY3RhbmdsZS5cbiAqIFRoZSBjYWxjdWxhdGlvbiB0YWtlcyBhbGwgdmlzaWJsZSBjaGlsZHJlbiBpbnRvIGNvbnNpZGVyYXRpb24uXG4gKlxuICogQHJldHVybiB7UElYSS5SZWN0YW5nbGV9IFRoZSByZWN0YW5ndWxhciBib3VuZGluZyBhcmVhXG4gKi9cbkNvbnRhaW5lci5wcm90b3R5cGUuZ2V0TG9jYWxCb3VuZHMgPSBmdW5jdGlvbiAoKVxue1xuICAgIHZhciBtYXRyaXhDYWNoZSA9IHRoaXMud29ybGRUcmFuc2Zvcm07XG5cbiAgICB0aGlzLndvcmxkVHJhbnNmb3JtID0gbWF0aC5NYXRyaXguSURFTlRJVFk7XG5cbiAgICBmb3IgKHZhciBpID0gMCwgaiA9IHRoaXMuY2hpbGRyZW4ubGVuZ3RoOyBpIDwgajsgKytpKVxuICAgIHtcbiAgICAgICAgdGhpcy5jaGlsZHJlbltpXS51cGRhdGVUcmFuc2Zvcm0oKTtcbiAgICB9XG5cbiAgICB0aGlzLndvcmxkVHJhbnNmb3JtID0gbWF0cml4Q2FjaGU7XG5cbiAgICB0aGlzLl9jdXJyZW50Qm91bmRzID0gbnVsbDtcblxuICAgIHJldHVybiB0aGlzLmdldEJvdW5kcyggbWF0aC5NYXRyaXguSURFTlRJVFkgKTtcbn07XG5cbi8qKlxuICogUmVuZGVycyB0aGUgb2JqZWN0IHVzaW5nIHRoZSBXZWJHTCByZW5kZXJlclxuICpcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5XZWJHTFJlbmRlcmVyfSBUaGUgcmVuZGVyZXJcbiAqL1xuQ29udGFpbmVyLnByb3RvdHlwZS5yZW5kZXJXZWJHTCA9IGZ1bmN0aW9uIChyZW5kZXJlcilcbntcblxuICAgIC8vIGlmIHRoZSBvYmplY3QgaXMgbm90IHZpc2libGUgb3IgdGhlIGFscGhhIGlzIDAgdGhlbiBubyBuZWVkIHRvIHJlbmRlciB0aGlzIGVsZW1lbnRcbiAgICBpZiAoIXRoaXMudmlzaWJsZSB8fCB0aGlzLndvcmxkQWxwaGEgPD0gMCB8fCAhdGhpcy5yZW5kZXJhYmxlKVxuICAgIHtcbiAgICAgIFxuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFyIGksIGo7XG5cbiAgICAvLyBkbyBhIHF1aWNrIGNoZWNrIHRvIHNlZSBpZiB0aGlzIGVsZW1lbnQgaGFzIGEgbWFzayBvciBhIGZpbHRlci5cbiAgICBpZiAodGhpcy5fbWFzayB8fCB0aGlzLl9maWx0ZXJzKVxuICAgIHtcbiAgICAgICAgcmVuZGVyZXIuY3VycmVudFJlbmRlcmVyLmZsdXNoKCk7XG5cbiAgICAgICAgLy8gcHVzaCBmaWx0ZXIgZmlyc3QgYXMgd2UgbmVlZCB0byBlbnN1cmUgdGhlIHN0ZW5jaWwgYnVmZmVyIGlzIGNvcnJlY3QgZm9yIGFueSBtYXNraW5nXG4gICAgICAgIGlmICh0aGlzLl9maWx0ZXJzICYmIHRoaXMuX2ZpbHRlcnMubGVuZ3RoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLnB1c2hGaWx0ZXIodGhpcywgdGhpcy5fZmlsdGVycyk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5fbWFzaylcbiAgICAgICAge1xuICAgICAgICAgICAgcmVuZGVyZXIubWFza01hbmFnZXIucHVzaE1hc2sodGhpcywgdGhpcy5fbWFzayk7XG4gICAgICAgIH1cblxuICAgICAgICByZW5kZXJlci5jdXJyZW50UmVuZGVyZXIuc3RhcnQoKTtcblxuICAgICAgICAvLyBhZGQgdGhpcyBvYmplY3QgdG8gdGhlIGJhdGNoLCBvbmx5IHJlbmRlcmVkIGlmIGl0IGhhcyBhIHRleHR1cmUuXG4gICAgICAgIHRoaXMuX3JlbmRlcldlYkdMKHJlbmRlcmVyKTtcblxuICAgICAgICAvLyBub3cgbG9vcCB0aHJvdWdoIHRoZSBjaGlsZHJlbiBhbmQgbWFrZSBzdXJlIHRoZXkgZ2V0IHJlbmRlcmVkXG4gICAgICAgIGZvciAoaSA9IDAsIGogPSB0aGlzLmNoaWxkcmVuLmxlbmd0aDsgaSA8IGo7IGkrKylcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5jaGlsZHJlbltpXS5yZW5kZXJXZWJHTChyZW5kZXJlcik7XG4gICAgICAgIH1cblxuICAgICAgICByZW5kZXJlci5jdXJyZW50UmVuZGVyZXIuZmx1c2goKTtcblxuICAgICAgICBpZiAodGhpcy5fbWFzaylcbiAgICAgICAge1xuICAgICAgICAgICAgcmVuZGVyZXIubWFza01hbmFnZXIucG9wTWFzayh0aGlzLCB0aGlzLl9tYXNrKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLl9maWx0ZXJzKVxuICAgICAgICB7XG4gICAgICAgICAgICByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLnBvcEZpbHRlcigpO1xuXG4gICAgICAgIH1cbiAgICAgICAgcmVuZGVyZXIuY3VycmVudFJlbmRlcmVyLnN0YXJ0KCk7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHRoaXMuX3JlbmRlcldlYkdMKHJlbmRlcmVyKTtcblxuICAgICAgICAvLyBzaW1wbGUgcmVuZGVyIGNoaWxkcmVuIVxuICAgICAgICBmb3IgKGkgPSAwLCBqID0gdGhpcy5jaGlsZHJlbi5sZW5ndGg7IGkgPCBqOyArK2kpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuY2hpbGRyZW5baV0ucmVuZGVyV2ViR0wocmVuZGVyZXIpO1xuICAgICAgICB9XG4gICAgfVxufTtcblxuLyoqXG4gKiBUbyBiZSBvdmVycmlkZGVuIGJ5IHRoZSBzdWJjbGFzc1xuICpcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5XZWJHTFJlbmRlcmVyfSBUaGUgcmVuZGVyZXJcbiAqIEBwcml2YXRlXG4gKi9cbkNvbnRhaW5lci5wcm90b3R5cGUuX3JlbmRlcldlYkdMID0gZnVuY3Rpb24gKHJlbmRlcmVyKSAvLyBqc2hpbnQgdW51c2VkOmZhbHNlXG57XG4gICAgLy8gdGhpcyBpcyB3aGVyZSBjb250ZW50IGl0c2VsZiBnZXRzIHJlbmRlcmVkLi4uXG59O1xuXG4vKipcbiAqIFRvIGJlIG92ZXJyaWRkZW4gYnkgdGhlIHN1YmNsYXNzXG4gKlxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLkNhbnZhc1JlbmRlcmVyfSBUaGUgcmVuZGVyZXJcbiAqIEBwcml2YXRlXG4gKi9cbkNvbnRhaW5lci5wcm90b3R5cGUuX3JlbmRlckNhbnZhcyA9IGZ1bmN0aW9uIChyZW5kZXJlcikgLy8ganNoaW50IHVudXNlZDpmYWxzZVxue1xuICAgIC8vIHRoaXMgaXMgd2hlcmUgY29udGVudCBpdHNlbGYgZ2V0cyByZW5kZXJlZC4uLlxufTtcblxuXG4vKipcbiAqIFJlbmRlcnMgdGhlIG9iamVjdCB1c2luZyB0aGUgQ2FudmFzIHJlbmRlcmVyXG4gKlxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLkNhbnZhc1JlbmRlcmVyfSBUaGUgcmVuZGVyZXJcbiAqL1xuQ29udGFpbmVyLnByb3RvdHlwZS5yZW5kZXJDYW52YXMgPSBmdW5jdGlvbiAocmVuZGVyZXIpXG57XG4gICAgLy8gaWYgbm90IHZpc2libGUgb3IgdGhlIGFscGhhIGlzIDAgdGhlbiBubyBuZWVkIHRvIHJlbmRlciB0aGlzXG4gICAgaWYgKCF0aGlzLnZpc2libGUgfHwgdGhpcy5hbHBoYSA8PSAwIHx8ICF0aGlzLnJlbmRlcmFibGUpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX21hc2spXG4gICAge1xuICAgICAgICByZW5kZXJlci5tYXNrTWFuYWdlci5wdXNoTWFzayh0aGlzLl9tYXNrLCByZW5kZXJlcik7XG4gICAgfVxuXG4gICAgdGhpcy5fcmVuZGVyQ2FudmFzKHJlbmRlcmVyKTtcbiAgICBmb3IgKHZhciBpID0gMCwgaiA9IHRoaXMuY2hpbGRyZW4ubGVuZ3RoOyBpIDwgajsgKytpKVxuICAgIHtcbiAgICAgICAgdGhpcy5jaGlsZHJlbltpXS5yZW5kZXJDYW52YXMocmVuZGVyZXIpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLl9tYXNrKVxuICAgIHtcbiAgICAgICAgcmVuZGVyZXIubWFza01hbmFnZXIucG9wTWFzayhyZW5kZXJlcik7XG4gICAgfVxufTtcblxuLyoqXG4gKiBEZXN0cm95cyB0aGUgY29udGFpbmVyXG4gKiBAcGFyYW0gW2Rlc3Ryb3lDaGlsZHJlbj1mYWxzZV0ge2Jvb2xlYW59IGlmIHNldCB0byB0cnVlLCBhbGwgdGhlIGNoaWxkcmVuIHdpbGwgaGF2ZSB0aGVpciBkZXN0cm95IG1ldGhvZCBjYWxsZWQgYXMgd2VsbFxuICovXG5Db250YWluZXIucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoZGVzdHJveUNoaWxkcmVuKVxue1xuICAgIERpc3BsYXlPYmplY3QucHJvdG90eXBlLmRlc3Ryb3kuY2FsbCh0aGlzKTtcblxuICAgIGlmIChkZXN0cm95Q2hpbGRyZW4pXG4gICAge1xuICAgICAgICBmb3IgKHZhciBpID0gMCwgaiA9IHRoaXMuY2hpbGRyZW4ubGVuZ3RoOyBpIDwgajsgKytpKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmNoaWxkcmVuW2ldLmRlc3Ryb3koZGVzdHJveUNoaWxkcmVuKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMucmVtb3ZlQ2hpbGRyZW4oKTtcblxuICAgIHRoaXMuY2hpbGRyZW4gPSBudWxsO1xufTtcbiIsInZhciBtYXRoID0gcmVxdWlyZSgnLi4vbWF0aCcpLFxuICAgIFJlbmRlclRleHR1cmUgPSByZXF1aXJlKCcuLi90ZXh0dXJlcy9SZW5kZXJUZXh0dXJlJyksXG4gICAgRXZlbnRFbWl0dGVyID0gcmVxdWlyZSgnZXZlbnRlbWl0dGVyMycpLFxuICAgIENPTlNUID0gcmVxdWlyZSgnLi4vY29uc3QnKSxcbiAgICBfdGVtcE1hdHJpeCA9IG5ldyBtYXRoLk1hdHJpeCgpLFxuICAgIF90ZW1wRGlzcGxheU9iamVjdFBhcmVudCA9IHt3b3JsZFRyYW5zZm9ybTpuZXcgbWF0aC5NYXRyaXgoKSwgd29ybGRBbHBoYToxLCBjaGlsZHJlbjpbXX07XG5cblxuLyoqXG4gKiBUaGUgYmFzZSBjbGFzcyBmb3IgYWxsIG9iamVjdHMgdGhhdCBhcmUgcmVuZGVyZWQgb24gdGhlIHNjcmVlbi5cbiAqIFRoaXMgaXMgYW4gYWJzdHJhY3QgY2xhc3MgYW5kIHNob3VsZCBub3QgYmUgdXNlZCBvbiBpdHMgb3duIHJhdGhlciBpdCBzaG91bGQgYmUgZXh0ZW5kZWQuXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBFdmVudEVtaXR0ZXJcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKi9cbmZ1bmN0aW9uIERpc3BsYXlPYmplY3QoKVxue1xuICAgIEV2ZW50RW1pdHRlci5jYWxsKHRoaXMpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGNvb3JkaW5hdGUgb2YgdGhlIG9iamVjdCByZWxhdGl2ZSB0byB0aGUgbG9jYWwgY29vcmRpbmF0ZXMgb2YgdGhlIHBhcmVudC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuUG9pbnR9XG4gICAgICovXG4gICAgdGhpcy5wb3NpdGlvbiA9IG5ldyBtYXRoLlBvaW50KCk7XG4gICAgdGhpcy5fcG9zaXRpb24gPSBuZXcgQ2FjaGVQb2ludCh0aGlzKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBzY2FsZSBmYWN0b3Igb2YgdGhlIG9iamVjdC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuUG9pbnR9XG4gICAgICovXG4gICAgdGhpcy5zY2FsZSA9IG5ldyBtYXRoLlBvaW50KDEsIDEpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHBpdm90IHBvaW50IG9mIHRoZSBkaXNwbGF5T2JqZWN0IHRoYXQgaXQgcm90YXRlcyBhcm91bmRcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuUG9pbnR9XG4gICAgICovXG4gICAgdGhpcy5waXZvdCA9IG5ldyBtYXRoLlBvaW50KDAsIDApO1xuXG5cbiAgICAvKipcbiAgICAgKiBUaGUgc2tldyBmYWN0b3IgZm9yIHRoZSBvYmplY3QgaW4gcmFkaWFucy5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuUG9pbnR9XG4gICAgICovXG4gICAgdGhpcy5za2V3ID0gbmV3IG1hdGguUG9pbnQoMCwgMCk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgcm90YXRpb24gb2YgdGhlIG9iamVjdCBpbiByYWRpYW5zLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMuX3JvdGF0aW9uID0gMDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBvcGFjaXR5IG9mIHRoZSBvYmplY3QuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy5hbHBoYSA9IDE7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgdmlzaWJpbGl0eSBvZiB0aGUgb2JqZWN0LiBJZiBmYWxzZSB0aGUgb2JqZWN0IHdpbGwgbm90IGJlIGRyYXduLCBhbmRcbiAgICAgKiB0aGUgdXBkYXRlVHJhbnNmb3JtIGZ1bmN0aW9uIHdpbGwgbm90IGJlIGNhbGxlZC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICovXG4gICAgdGhpcy52aXNpYmxlID0gdHJ1ZTtcblxuICAgIC8qKlxuICAgICAqIENhbiB0aGlzIG9iamVjdCBiZSByZW5kZXJlZCwgaWYgZmFsc2UgdGhlIG9iamVjdCB3aWxsIG5vdCBiZSBkcmF3biBidXQgdGhlIHVwZGF0ZVRyYW5zZm9ybVxuICAgICAqIG1ldGhvZHMgd2lsbCBzdGlsbCBiZSBjYWxsZWQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqL1xuICAgIHRoaXMucmVuZGVyYWJsZSA9IHRydWU7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgZGlzcGxheSBvYmplY3QgY29udGFpbmVyIHRoYXQgY29udGFpbnMgdGhpcyBkaXNwbGF5IG9iamVjdC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuQ29udGFpbmVyfVxuICAgICAqIEByZWFkT25seVxuICAgICAqL1xuICAgIHRoaXMucGFyZW50ID0gbnVsbDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBtdWx0aXBsaWVkIGFscGhhIG9mIHRoZSBkaXNwbGF5T2JqZWN0XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQHJlYWRPbmx5XG4gICAgICovXG4gICAgdGhpcy53b3JsZEFscGhhID0gMTtcblxuICAgIC8qKlxuICAgICAqIEN1cnJlbnQgdHJhbnNmb3JtIG9mIHRoZSBvYmplY3QgYmFzZWQgb24gd29ybGQgKHBhcmVudCkgZmFjdG9yc1xuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5NYXRyaXh9XG4gICAgICogQHJlYWRPbmx5XG4gICAgICovXG4gICAgdGhpcy53b3JsZFRyYW5zZm9ybSA9IG5ldyBtYXRoLk1hdHJpeCgpO1xuICAgIHRoaXMubG9jYWxUcmFuc2Zvcm0gPSBuZXcgbWF0aC5NYXRyaXgoKTtcblxuXG4gICAgLyoqXG4gICAgICogVGhlIGFyZWEgdGhlIGZpbHRlciBpcyBhcHBsaWVkIHRvLiBUaGlzIGlzIHVzZWQgYXMgbW9yZSBvZiBhbiBvcHRpbWlzYXRpb25cbiAgICAgKiByYXRoZXIgdGhhbiBmaWd1cmluZyBvdXQgdGhlIGRpbWVuc2lvbnMgb2YgdGhlIGRpc3BsYXlPYmplY3QgZWFjaCBmcmFtZSB5b3UgY2FuIHNldCB0aGlzIHJlY3RhbmdsZVxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5SZWN0YW5nbGV9XG4gICAgICovXG4gICAgdGhpcy5maWx0ZXJBcmVhID0gbnVsbDtcblxuICAgIC8qKlxuICAgICAqIGNhY2hlZCBzaW4gcm90YXRpb25cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX3NyID0gMDtcblxuICAgIC8qKlxuICAgICAqIGNhY2hlZCBjb3Mgcm90YXRpb25cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX2NyID0gMTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBvcmlnaW5hbCwgY2FjaGVkIGJvdW5kcyBvZiB0aGUgb2JqZWN0XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlJlY3RhbmdsZX1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX2JvdW5kcyA9IG5ldyBtYXRoLlJlY3RhbmdsZSgwLCAwLCAxLCAxKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBtb3N0IHVwLXRvLWRhdGUgYm91bmRzIG9mIHRoZSBvYmplY3RcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuUmVjdGFuZ2xlfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fY3VycmVudEJvdW5kcyA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgb3JpZ2luYWwsIGNhY2hlZCBtYXNrIG9mIHRoZSBvYmplY3RcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuUmVjdGFuZ2xlfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fbWFzayA9IG51bGw7XG5cbiAgICB0aGlzLmRpcnR5VHJhbnNmb3JtID0gdHJ1ZTtcbn1cblxuLy8gY29uc3RydWN0b3JcbkRpc3BsYXlPYmplY3QucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShFdmVudEVtaXR0ZXIucHJvdG90eXBlKTtcbkRpc3BsYXlPYmplY3QucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gRGlzcGxheU9iamVjdDtcbm1vZHVsZS5leHBvcnRzID0gRGlzcGxheU9iamVjdDtcblxudmFyIENhY2hlUG9pbnQgPSBmdW5jdGlvbihkb2Mpe1xuICAgIFxuICAgIHRoaXMuZG9jID0gZG9jO1xuXG4gICAgdGhpcy54ID0gMDtcbiAgICB0aGlzLnkgPSAwO1xufVxuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhDYWNoZVBvaW50LnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFRoZSBwb3NpdGlvbiBvZiB0aGUgZGlzcGxheU9iamVjdCBvbiB0aGUgeCBheGlzIHJlbGF0aXZlIHRvIHRoZSBsb2NhbCBjb29yZGluYXRlcyBvZiB0aGUgcGFyZW50LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLkRpc3BsYXlPYmplY3QjXG4gICAgICovXG4gICAgeDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmRvYy5wb3NpdGlvbi54O1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5kb2MucG9zaXRpb24ueCA9IHZhbHVlO1xuICAgICAgICAgICAgdGhpcy5kb2MuZGlydHlUcmFuc2Zvcm0gPSB0cnVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIHk6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5kb2MucG9zaWl0b24ueTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuZG9jLnBvc2l0aW9uLnkgPSB2YWx1ZTtcbiAgICAgICAgICAgIHRoaXMuZG9jLmRpcnR5VHJhbnNmb3JtID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuXG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKERpc3BsYXlPYmplY3QucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogVGhlIHBvc2l0aW9uIG9mIHRoZSBkaXNwbGF5T2JqZWN0IG9uIHRoZSB4IGF4aXMgcmVsYXRpdmUgdG8gdGhlIGxvY2FsIGNvb3JkaW5hdGVzIG9mIHRoZSBwYXJlbnQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuRGlzcGxheU9iamVjdCNcbiAgICAgKi9cbiAgICB4OiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMucG9zaXRpb24ueDtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMucG9zaXRpb24ueCA9IHZhbHVlO1xuICAgICAgICAgICAgdGhpcy5kaXJ0eVRyYW5zZm9ybSA9IHRydWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVGhlIHBvc2l0aW9uIG9mIHRoZSBkaXNwbGF5T2JqZWN0IG9uIHRoZSB5IGF4aXMgcmVsYXRpdmUgdG8gdGhlIGxvY2FsIGNvb3JkaW5hdGVzIG9mIHRoZSBwYXJlbnQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuRGlzcGxheU9iamVjdCNcbiAgICAgKi9cbiAgICB5OiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMucG9zaXRpb24ueTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMucG9zaXRpb24ueSA9IHZhbHVlO1xuICAgICAgICAgICAgdGhpcy5kaXJ0eVRyYW5zZm9ybSA9IHRydWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgc2NhbGVYOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuc2NhbGUueDtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuc2NhbGUueCA9IHZhbHVlO1xuICAgICAgICAgICAgdGhpcy5kaXJ0eVRyYW5zZm9ybSA9IHRydWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVGhlIHBvc2l0aW9uIG9mIHRoZSBkaXNwbGF5T2JqZWN0IG9uIHRoZSB5IGF4aXMgcmVsYXRpdmUgdG8gdGhlIGxvY2FsIGNvb3JkaW5hdGVzIG9mIHRoZSBwYXJlbnQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuRGlzcGxheU9iamVjdCNcbiAgICAgKi9cbiAgICBzY2FsZVk6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5zY2FsZS55O1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5zY2FsZS55ID0gdmFsdWU7XG4gICAgICAgICAgICB0aGlzLmRpcnR5VHJhbnNmb3JtID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICByb3RhdGlvbjoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9yb3RhdGlvbjtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuX3JvdGF0aW9uID0gdmFsdWU7XG4gICAgICAgICAgICB0aGlzLmRpcnR5VHJhbnNmb3JtID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMuX3NyID0gTWF0aC5zaW4odmFsdWUpO1xuICAgICAgICAgICAgdGhpcy5fY3IgPSBNYXRoLmNvcyh2YWx1ZSk7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVGhlIHBvc2l0aW9uIG9mIHRoZSBkaXNwbGF5T2JqZWN0IG9uIHRoZSB5IGF4aXMgcmVsYXRpdmUgdG8gdGhlIGxvY2FsIGNvb3JkaW5hdGVzIG9mIHRoZSBwYXJlbnQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuRGlzcGxheU9iamVjdCNcbiAgICAgKi9cbiAgICBzY2FsZVk6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5zY2FsZS55O1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5zY2FsZS55ID0gdmFsdWU7XG4gICAgICAgICAgICB0aGlzLmRpcnR5VHJhbnNmb3JtID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBJbmRpY2F0ZXMgaWYgdGhlIHNwcml0ZSBpcyBnbG9iYWxseSB2aXNpYmxlLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5EaXNwbGF5T2JqZWN0I1xuICAgICAqIEByZWFkb25seVxuICAgICAqL1xuICAgIHdvcmxkVmlzaWJsZToge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHZhciBpdGVtID0gdGhpcztcblxuICAgICAgICAgICAgZG8ge1xuICAgICAgICAgICAgICAgIGlmICghaXRlbS52aXNpYmxlKVxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGl0ZW0gPSBpdGVtLnBhcmVudDtcbiAgICAgICAgICAgIH0gd2hpbGUgKGl0ZW0pO1xuXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBTZXRzIGEgbWFzayBmb3IgdGhlIGRpc3BsYXlPYmplY3QuIEEgbWFzayBpcyBhbiBvYmplY3QgdGhhdCBsaW1pdHMgdGhlIHZpc2liaWxpdHkgb2YgYW4gb2JqZWN0IHRvIHRoZSBzaGFwZSBvZiB0aGUgbWFzayBhcHBsaWVkIHRvIGl0LlxuICAgICAqIEluIFBJWEkgYSByZWd1bGFyIG1hc2sgbXVzdCBiZSBhIFBJWEkuR3JhcGhpY3Mgb3IgYSBQSVhJLlNwcml0ZSBvYmplY3QuIFRoaXMgYWxsb3dzIGZvciBtdWNoIGZhc3RlciBtYXNraW5nIGluIGNhbnZhcyBhcyBpdCB1dGlsaXNlcyBzaGFwZSBjbGlwcGluZy5cbiAgICAgKiBUbyByZW1vdmUgYSBtYXNrLCBzZXQgdGhpcyBwcm9wZXJ0eSB0byBudWxsLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5HcmFwaGljc3xQSVhJLlNwcml0ZX1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5EaXNwbGF5T2JqZWN0I1xuICAgICAqL1xuICAgIG1hc2s6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fbWFzaztcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGlmICh0aGlzLl9tYXNrKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHRoaXMuX21hc2sucmVuZGVyYWJsZSA9IHRydWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuX21hc2sgPSB2YWx1ZTtcblxuICAgICAgICAgICAgaWYgKHRoaXMuX21hc2spXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdGhpcy5fbWFzay5yZW5kZXJhYmxlID0gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgZmlsdGVycyBmb3IgdGhlIGRpc3BsYXlPYmplY3QuXG4gICAgICogKiBJTVBPUlRBTlQ6IFRoaXMgaXMgYSB3ZWJHTCBvbmx5IGZlYXR1cmUgYW5kIHdpbGwgYmUgaWdub3JlZCBieSB0aGUgY2FudmFzIHJlbmRlcmVyLlxuICAgICAqIFRvIHJlbW92ZSBmaWx0ZXJzIHNpbXBseSBzZXQgdGhpcyBwcm9wZXJ0eSB0byAnbnVsbCdcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuQWJzdHJhY3RGaWx0ZXJbXX1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5EaXNwbGF5T2JqZWN0I1xuICAgICAqL1xuICAgIGZpbHRlcnM6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fZmlsdGVycyAmJiB0aGlzLl9maWx0ZXJzLnNsaWNlKCk7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLl9maWx0ZXJzID0gdmFsdWUgJiYgdmFsdWUuc2xpY2UoKTtcbiAgICAgICAgfVxuICAgIH1cblxufSk7XG5cbi8qXG4gKiBVcGRhdGVzIHRoZSBvYmplY3QgdHJhbnNmb3JtIGZvciByZW5kZXJpbmdcbiAqXG4gKiBUT0RPIC0gT3B0aW1pemF0aW9uIHBhc3MhXG4gKi9cbkRpc3BsYXlPYmplY3QucHJvdG90eXBlLnVwZGF0ZVRyYW5zZm9ybSA9IGZ1bmN0aW9uICgpXG57XG4gICAgdmFyIHB0ID0gdGhpcy5wYXJlbnQud29ybGRUcmFuc2Zvcm07XG4gICAgdmFyIHd0ID0gdGhpcy53b3JsZFRyYW5zZm9ybTtcbiAgICB2YXIgbHQgPSB0aGlzLmxvY2FsVHJhbnNmb3JtO1xuXG4gICAgaWYodGhpcy5kaXJ0eVRyYW5zZm9ybSlcbiAgICB7XG4gICAgICAgIC8vIGdldCB0aGUgbWF0cml4IHZhbHVlcyBvZiB0aGUgZGlzcGxheW9iamVjdCBiYXNlZCBvbiBpdHMgdHJhbnNmb3JtIHByb3BlcnRpZXMuLlxuICAgICAgICBsdC5hICA9ICB0aGlzLl9jciAqIHRoaXMuc2NhbGUueDtcbiAgICAgICAgbHQuYiAgPSAgdGhpcy5fc3IgKiB0aGlzLnNjYWxlLng7XG4gICAgICAgIGx0LmMgID0gLXRoaXMuX3NyICogdGhpcy5zY2FsZS55O1xuICAgICAgICBsdC5kICA9ICB0aGlzLl9jciAqIHRoaXMuc2NhbGUueTtcbiAgICAgICAgbHQudHggPSAgdGhpcy5wb3NpdGlvbi54IC0gKHRoaXMucGl2b3QueCAqIGx0LmEgKyB0aGlzLnBpdm90LnkgKiBsdC5jKTtcbiAgICAgICAgbHQudHkgPSAgdGhpcy5wb3NpdGlvbi55IC0gKHRoaXMucGl2b3QueCAqIGx0LmIgKyB0aGlzLnBpdm90LnkgKiBsdC5kKTtcbiAgICB9XG5cbiAgICBpZih0aGlzLmRpcnR5VHJhbnNmb3JtIHx8IHRoaXMucGFyZW50LmRpcnR5VHJhbnNmb3JtKVxuICAgIHsgICAgICBcbiAgICAgICAgLy8gY29uY2F0IHRoZSBwYXJlbnQgbWF0cml4IHdpdGggdGhlIG9iamVjdHMgdHJhbnNmb3JtLlxuICAgICAgICB3dC5hICA9IGx0LmEgICogcHQuYSArIGx0LmIgICogcHQuYztcbiAgICAgICAgd3QuYiAgPSBsdC5hICAqIHB0LmIgKyBsdC5iICAqIHB0LmQ7XG4gICAgICAgIHd0LmMgID0gbHQuYyAgKiBwdC5hICsgbHQuZCAgKiBwdC5jO1xuICAgICAgICB3dC5kICA9IGx0LmMgICogcHQuYiArIGx0LmQgICogcHQuZDtcbiAgICAgICAgd3QudHggPSBsdC50eCAqIHB0LmEgKyBsdC50eSAqIHB0LmMgKyBwdC50eDtcbiAgICAgICAgd3QudHkgPSBsdC50eCAqIHB0LmIgKyBsdC50eSAqIHB0LmQgKyBwdC50eTsgICAgICAgXG4gICAgXG4gICAgICAgIHRoaXMuX2N1cnJlbnRCb3VuZHMgPSBudWxsO1xuICAgIH1cblxuICAgIC8vIG11bHRpcGx5IHRoZSBhbHBoYXMuLlxuICAgIHRoaXMud29ybGRBbHBoYSA9IHRoaXMuYWxwaGEgKiB0aGlzLnBhcmVudC53b3JsZEFscGhhO1xuXG4gICAgLy8gcmVzZXQgdGhlIGJvdW5kcyBlYWNoIHRpbWUgdGhpcyBpcyBjYWxsZWQhXG4gICAgXG59O1xuXG4vLyBwZXJmb3JtYW5jZSBpbmNyZWFzZSB0byBhdm9pZCB1c2luZyBjYWxsLi4gKDEweCBmYXN0ZXIpXG5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS5kaXNwbGF5T2JqZWN0VXBkYXRlVHJhbnNmb3JtID0gRGlzcGxheU9iamVjdC5wcm90b3R5cGUudXBkYXRlVHJhbnNmb3JtO1xuXG4vKipcbiAqXG4gKlxuICogUmV0cmlldmVzIHRoZSBib3VuZHMgb2YgdGhlIGRpc3BsYXlPYmplY3QgYXMgYSByZWN0YW5nbGUgb2JqZWN0XG4gKlxuICogQHBhcmFtIG1hdHJpeCB7UElYSS5NYXRyaXh9XG4gKiBAcmV0dXJuIHtQSVhJLlJlY3RhbmdsZX0gdGhlIHJlY3Rhbmd1bGFyIGJvdW5kaW5nIGFyZWFcbiAqL1xuRGlzcGxheU9iamVjdC5wcm90b3R5cGUuZ2V0Qm91bmRzID0gZnVuY3Rpb24gKG1hdHJpeCkgLy8ganNoaW50IHVudXNlZDpmYWxzZVxue1xuICAgIHJldHVybiBtYXRoLlJlY3RhbmdsZS5FTVBUWTtcbn07XG5cbi8qKlxuICogUmV0cmlldmVzIHRoZSBsb2NhbCBib3VuZHMgb2YgdGhlIGRpc3BsYXlPYmplY3QgYXMgYSByZWN0YW5nbGUgb2JqZWN0XG4gKlxuICogQHJldHVybiB7UElYSS5SZWN0YW5nbGV9IHRoZSByZWN0YW5ndWxhciBib3VuZGluZyBhcmVhXG4gKi9cbkRpc3BsYXlPYmplY3QucHJvdG90eXBlLmdldExvY2FsQm91bmRzID0gZnVuY3Rpb24gKClcbntcbiAgICByZXR1cm4gdGhpcy5nZXRCb3VuZHMobWF0aC5NYXRyaXguSURFTlRJVFkpO1xufTtcblxuLyoqXG4gKiBDYWxjdWxhdGVzIHRoZSBnbG9iYWwgcG9zaXRpb24gb2YgdGhlIGRpc3BsYXkgb2JqZWN0XG4gKlxuICogQHBhcmFtIHBvc2l0aW9uIHtQSVhJLlBvaW50fSBUaGUgd29ybGQgb3JpZ2luIHRvIGNhbGN1bGF0ZSBmcm9tXG4gKiBAcmV0dXJuIHtQSVhJLlBvaW50fSBBIHBvaW50IG9iamVjdCByZXByZXNlbnRpbmcgdGhlIHBvc2l0aW9uIG9mIHRoaXMgb2JqZWN0XG4gKi9cbkRpc3BsYXlPYmplY3QucHJvdG90eXBlLnRvR2xvYmFsID0gZnVuY3Rpb24gKHBvc2l0aW9uKVxue1xuICAgIC8vIHRoaXMgcGFyZW50IGNoZWNrIGlzIGZvciBqdXN0IGluIGNhc2UgdGhlIGl0ZW0gaXMgYSByb290IG9iamVjdC5cbiAgICAvLyBJZiBpdCBpcyB3ZSBuZWVkIHRvIGdpdmUgaXQgYSB0ZW1wb3JhcnkgcGFyZW50IHNvIHRoYXQgZGlzcGxheU9iamVjdFVwZGF0ZVRyYW5zZm9ybSB3b3JrcyBjb3JyZWN0bHlcbiAgICAvLyB0aGlzIGlzIG1haW5seSB0byBhdm9pZCBhIHBhcmVudCBjaGVjayBpbiB0aGUgbWFpbiBsb29wLiBFdmVyeSBsaXR0bGUgaGVscHMgZm9yIHBlcmZvcm1hbmNlIDopXG4gICAgaWYoIXRoaXMucGFyZW50KVxuICAgIHtcbiAgICAgICAgdGhpcy5wYXJlbnQgPSBfdGVtcERpc3BsYXlPYmplY3RQYXJlbnQ7XG4gICAgICAgIHRoaXMuZGlzcGxheU9iamVjdFVwZGF0ZVRyYW5zZm9ybSgpO1xuICAgICAgICB0aGlzLnBhcmVudCA9IG51bGw7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHRoaXMuZGlzcGxheU9iamVjdFVwZGF0ZVRyYW5zZm9ybSgpO1xuICAgIH1cblxuICAgIC8vIGRvbid0IG5lZWQgdG8gdXBkYXRlIHRoZSBsb3RcbiAgICByZXR1cm4gdGhpcy53b3JsZFRyYW5zZm9ybS5hcHBseShwb3NpdGlvbik7XG59O1xuXG4vKipcbiAqIENhbGN1bGF0ZXMgdGhlIGxvY2FsIHBvc2l0aW9uIG9mIHRoZSBkaXNwbGF5IG9iamVjdCByZWxhdGl2ZSB0byBhbm90aGVyIHBvaW50XG4gKlxuICogQHBhcmFtIHBvc2l0aW9uIHtQSVhJLlBvaW50fSBUaGUgd29ybGQgb3JpZ2luIHRvIGNhbGN1bGF0ZSBmcm9tXG4gKiBAcGFyYW0gW2Zyb21dIHtQSVhJLkRpc3BsYXlPYmplY3R9IFRoZSBEaXNwbGF5T2JqZWN0IHRvIGNhbGN1bGF0ZSB0aGUgZ2xvYmFsIHBvc2l0aW9uIGZyb21cbiAqIEBwYXJhbSBbcG9pbnRdIHtQSVhJLlBvaW50fSBBIFBvaW50IG9iamVjdCBpbiB3aGljaCB0byBzdG9yZSB0aGUgdmFsdWUsIG9wdGlvbmFsIChvdGhlcndpc2Ugd2lsbCBjcmVhdGUgYSBuZXcgUG9pbnQpXG4gKiBAcmV0dXJuIHtQSVhJLlBvaW50fSBBIHBvaW50IG9iamVjdCByZXByZXNlbnRpbmcgdGhlIHBvc2l0aW9uIG9mIHRoaXMgb2JqZWN0XG4gKi9cbkRpc3BsYXlPYmplY3QucHJvdG90eXBlLnRvTG9jYWwgPSBmdW5jdGlvbiAocG9zaXRpb24sIGZyb20sIHBvaW50KVxue1xuICAgIGlmIChmcm9tKVxuICAgIHtcbiAgICAgICAgcG9zaXRpb24gPSBmcm9tLnRvR2xvYmFsKHBvc2l0aW9uKTtcbiAgICB9XG5cbiAgICAvLyB0aGlzIHBhcmVudCBjaGVjayBpcyBmb3IganVzdCBpbiBjYXNlIHRoZSBpdGVtIGlzIGEgcm9vdCBvYmplY3QuXG4gICAgLy8gSWYgaXQgaXMgd2UgbmVlZCB0byBnaXZlIGl0IGEgdGVtcG9yYXJ5IHBhcmVudCBzbyB0aGF0IGRpc3BsYXlPYmplY3RVcGRhdGVUcmFuc2Zvcm0gd29ya3MgY29ycmVjdGx5XG4gICAgLy8gdGhpcyBpcyBtYWlubHkgdG8gYXZvaWQgYSBwYXJlbnQgY2hlY2sgaW4gdGhlIG1haW4gbG9vcC4gRXZlcnkgbGl0dGxlIGhlbHBzIGZvciBwZXJmb3JtYW5jZSA6KVxuICAgIGlmKCF0aGlzLnBhcmVudClcbiAgICB7XG4gICAgICAgIHRoaXMucGFyZW50ID0gX3RlbXBEaXNwbGF5T2JqZWN0UGFyZW50O1xuICAgICAgICB0aGlzLmRpc3BsYXlPYmplY3RVcGRhdGVUcmFuc2Zvcm0oKTtcbiAgICAgICAgdGhpcy5wYXJlbnQgPSBudWxsO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICB0aGlzLmRpc3BsYXlPYmplY3RVcGRhdGVUcmFuc2Zvcm0oKTtcbiAgICB9XG5cbiAgICAvLyBzaW1wbHkgYXBwbHkgdGhlIG1hdHJpeC4uXG4gICAgcmV0dXJuIHRoaXMud29ybGRUcmFuc2Zvcm0uYXBwbHlJbnZlcnNlKHBvc2l0aW9uLCBwb2ludCk7XG59O1xuXG4vKipcbiAqIFJlbmRlcnMgdGhlIG9iamVjdCB1c2luZyB0aGUgV2ViR0wgcmVuZGVyZXJcbiAqXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcn0gVGhlIHJlbmRlcmVyXG4gKiBAcHJpdmF0ZVxuICovXG5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS5yZW5kZXJXZWJHTCA9IGZ1bmN0aW9uIChyZW5kZXJlcikgLy8ganNoaW50IHVudXNlZDpmYWxzZVxue1xuICAgIC8vIE9WRVJXUklURTtcbn07XG5cbi8qKlxuICogUmVuZGVycyB0aGUgb2JqZWN0IHVzaW5nIHRoZSBDYW52YXMgcmVuZGVyZXJcbiAqXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuQ2FudmFzUmVuZGVyZXJ9IFRoZSByZW5kZXJlclxuICogQHByaXZhdGVcbiAqL1xuRGlzcGxheU9iamVjdC5wcm90b3R5cGUucmVuZGVyQ2FudmFzID0gZnVuY3Rpb24gKHJlbmRlcmVyKSAvLyBqc2hpbnQgdW51c2VkOmZhbHNlXG57XG4gICAgLy8gT1ZFUldSSVRFO1xufTtcbi8qKlxuICogVXNlZnVsIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyBhIHRleHR1cmUgb2YgdGhlIGRpc3BsYXkgb2JqZWN0IHRoYXQgY2FuIHRoZW4gYmUgdXNlZCB0byBjcmVhdGUgc3ByaXRlc1xuICogVGhpcyBjYW4gYmUgcXVpdGUgdXNlZnVsIGlmIHlvdXIgZGlzcGxheU9iamVjdCBpcyBzdGF0aWMgLyBjb21wbGljYXRlZCBhbmQgbmVlZHMgdG8gYmUgcmV1c2VkIG11bHRpcGxlIHRpbWVzLlxuICpcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5DYW52YXNSZW5kZXJlcnxQSVhJLldlYkdMUmVuZGVyZXJ9IFRoZSByZW5kZXJlciB1c2VkIHRvIGdlbmVyYXRlIHRoZSB0ZXh0dXJlLlxuICogQHBhcmFtIHNjYWxlTW9kZSB7bnVtYmVyfSBTZWUge0BsaW5rIFBJWEkuU0NBTEVfTU9ERVN9IGZvciBwb3NzaWJsZSB2YWx1ZXNcbiAqIEBwYXJhbSByZXNvbHV0aW9uIHtudW1iZXJ9IFRoZSByZXNvbHV0aW9uIG9mIHRoZSB0ZXh0dXJlIGJlaW5nIGdlbmVyYXRlZFxuICogQHJldHVybiB7UElYSS5UZXh0dXJlfSBhIHRleHR1cmUgb2YgdGhlIGRpc3BsYXkgb2JqZWN0XG4gKi9cbkRpc3BsYXlPYmplY3QucHJvdG90eXBlLmdlbmVyYXRlVGV4dHVyZSA9IGZ1bmN0aW9uIChyZW5kZXJlciwgc2NhbGVNb2RlLCByZXNvbHV0aW9uKVxue1xuICAgIHZhciBib3VuZHMgPSB0aGlzLmdldExvY2FsQm91bmRzKCk7XG5cbiAgICB2YXIgcmVuZGVyVGV4dHVyZSA9IG5ldyBSZW5kZXJUZXh0dXJlKHJlbmRlcmVyLCBib3VuZHMud2lkdGggfCAwLCBib3VuZHMuaGVpZ2h0IHwgMCwgc2NhbGVNb2RlLCByZXNvbHV0aW9uKTtcblxuICAgIF90ZW1wTWF0cml4LnR4ID0gLWJvdW5kcy54O1xuICAgIF90ZW1wTWF0cml4LnR5ID0gLWJvdW5kcy55O1xuXG4gICAgcmVuZGVyVGV4dHVyZS5yZW5kZXIodGhpcywgX3RlbXBNYXRyaXgpO1xuXG4gICAgcmV0dXJuIHJlbmRlclRleHR1cmU7XG59O1xuXG4vKipcbiAqIFNldCB0aGUgcGFyZW50IENvbnRhaW5lciBvZiB0aGlzIERpc3BsYXlPYmplY3RcbiAqXG4gKiBAcGFyYW0gY29udGFpbmVyIHtDb250YWluZXJ9IFRoZSBDb250YWluZXIgdG8gYWRkIHRoaXMgRGlzcGxheU9iamVjdCB0b1xuICogQHJldHVybiB7Q29udGFpbmVyfSBUaGUgQ29udGFpbmVyIHRoYXQgdGhpcyBEaXNwbGF5T2JqZWN0IHdhcyBhZGRlZCB0b1xuICovXG5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS5zZXRQYXJlbnQgPSBmdW5jdGlvbiAoY29udGFpbmVyKVxue1xuICAgIGlmICghY29udGFpbmVyIHx8ICFjb250YWluZXIuYWRkQ2hpbGQpXG4gICAge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3NldFBhcmVudDogQXJndW1lbnQgbXVzdCBiZSBhIENvbnRhaW5lcicpO1xuICAgIH1cblxuICAgIGNvbnRhaW5lci5hZGRDaGlsZCh0aGlzKTtcbiAgICByZXR1cm4gY29udGFpbmVyO1xufTtcblxuLyoqXG4gKiBDb252ZW5pZW5jZSBmdW5jdGlvbiB0byBzZXQgdGhlIHBvc3Rpb24sIHNjYWxlLCBza2V3IGFuZCBwaXZvdCBhdCBvbmNlLlxuICpcbiAqIEBwYXJhbSBbeD0wXSB7bnVtYmVyfSBUaGUgWCBwb3NpdGlvblxuICogQHBhcmFtIFt5PTBdIHtudW1iZXJ9IFRoZSBZIHBvc2l0aW9uXG4gKiBAcGFyYW0gW3NjYWxlWD0xXSB7bnVtYmVyfSBUaGUgWCBzY2FsZSB2YWx1ZVxuICogQHBhcmFtIFtzY2FsZVk9MV0ge251bWJlcn0gVGhlIFkgc2NhbGUgdmFsdWVcbiAqIEBwYXJhbSBbcm90YXRpb249MF0ge251bWJlcn0gVGhlIHJvdGF0aW9uXG4gKiBAcGFyYW0gW3NrZXdYPTBdIHtudW1iZXJ9IFRoZSBYIHNrZXcgdmFsdWVcbiAqIEBwYXJhbSBbc2tld1k9MF0ge251bWJlcn0gVGhlIFkgc2tldyB2YWx1ZVxuICogQHBhcmFtIFtwaXZvdFg9MF0ge251bWJlcn0gVGhlIFggcGl2b3QgdmFsdWVcbiAqIEBwYXJhbSBbcGl2b3RZPTBdIHtudW1iZXJ9IFRoZSBZIHBpdm90IHZhbHVlXG4gKiBAcmV0dXJuIHtQSVhJLkRpc3BsYXlPYmplY3R9XG4gKi9cbkRpc3BsYXlPYmplY3QucHJvdG90eXBlLnNldFRyYW5zZm9ybSA9IGZ1bmN0aW9uKHgsIHksIHNjYWxlWCwgc2NhbGVZLCByb3RhdGlvbiwgc2tld1gsIHNrZXdZLCBwaXZvdFgsIHBpdm90WSkgLy9qc2hpbnQgaWdub3JlOmxpbmVcbntcbiAgICB0aGlzLnBvc2l0aW9uLnggPSB4IHx8IDA7XG4gICAgdGhpcy5wb3NpdGlvbi55ID0geSB8fCAwO1xuICAgIHRoaXMuc2NhbGUueCA9ICFzY2FsZVggPyAxIDogc2NhbGVYO1xuICAgIHRoaXMuc2NhbGUueSA9ICFzY2FsZVkgPyAxIDogc2NhbGVZO1xuICAgIHRoaXMucm90YXRpb24gPSByb3RhdGlvbiB8fCAwO1xuICAgIHRoaXMuc2tldy54ID0gc2tld1ggfHwgMDtcbiAgICB0aGlzLnNrZXcueSA9IHNrZXdZIHx8IDA7XG4gICAgdGhpcy5waXZvdC54ID0gcGl2b3RYIHx8IDA7XG4gICAgdGhpcy5waXZvdC55ID0gcGl2b3RZIHx8IDA7XG4gICAgdGhpcy5kaXJ0eVRyYW5zZm9ybSA9IHRydWU7XG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIEJhc2UgZGVzdHJveSBtZXRob2QgZm9yIGdlbmVyaWMgZGlzcGxheSBvYmplY3RzXG4gKlxuICovXG5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKClcbntcblxuICAgIHRoaXMucG9zaXRpb24gPSBudWxsO1xuICAgIHRoaXMuc2NhbGUgPSBudWxsO1xuICAgIHRoaXMucGl2b3QgPSBudWxsO1xuICAgIHRoaXMuc2tldyA9IG51bGw7XG5cbiAgICB0aGlzLnBhcmVudCA9IG51bGw7XG5cbiAgICB0aGlzLl9ib3VuZHMgPSBudWxsO1xuICAgIHRoaXMuX2N1cnJlbnRCb3VuZHMgPSBudWxsO1xuICAgIHRoaXMuX21hc2sgPSBudWxsO1xuXG4gICAgdGhpcy53b3JsZFRyYW5zZm9ybSA9IG51bGw7XG4gICAgdGhpcy5maWx0ZXJBcmVhID0gbnVsbDtcbn07XG4iLCJ2YXIgQ29udGFpbmVyID0gcmVxdWlyZSgnLi4vZGlzcGxheS9Db250YWluZXInKSxcbiAgICBUZXh0dXJlID0gcmVxdWlyZSgnLi4vdGV4dHVyZXMvVGV4dHVyZScpLFxuICAgIENhbnZhc0J1ZmZlciA9IHJlcXVpcmUoJy4uL3JlbmRlcmVycy9jYW52YXMvdXRpbHMvQ2FudmFzQnVmZmVyJyksXG4gICAgQ2FudmFzR3JhcGhpY3MgPSByZXF1aXJlKCcuLi9yZW5kZXJlcnMvY2FudmFzL3V0aWxzL0NhbnZhc0dyYXBoaWNzJyksXG4gICAgR3JhcGhpY3NEYXRhID0gcmVxdWlyZSgnLi9HcmFwaGljc0RhdGEnKSxcbiAgICBtYXRoID0gcmVxdWlyZSgnLi4vbWF0aCcpLFxuICAgIENPTlNUID0gcmVxdWlyZSgnLi4vY29uc3QnKSxcbiAgICB0ZW1wUG9pbnQgPSBuZXcgbWF0aC5Qb2ludCgpO1xuXG4vKipcbiAqIFRoZSBHcmFwaGljcyBjbGFzcyBjb250YWlucyBtZXRob2RzIHVzZWQgdG8gZHJhdyBwcmltaXRpdmUgc2hhcGVzIHN1Y2ggYXMgbGluZXMsIGNpcmNsZXMgYW5kXG4gKiByZWN0YW5nbGVzIHRvIHRoZSBkaXNwbGF5LCBhbmQgdG8gY29sb3IgYW5kIGZpbGwgdGhlbS5cbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQ29udGFpbmVyXG4gKiBAbWVtYmVyb2YgUElYSVxuICovXG5mdW5jdGlvbiBHcmFwaGljcygpXG57XG4gICAgQ29udGFpbmVyLmNhbGwodGhpcyk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYWxwaGEgdmFsdWUgdXNlZCB3aGVuIGZpbGxpbmcgdGhlIEdyYXBoaWNzIG9iamVjdC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAxXG4gICAgICovXG4gICAgdGhpcy5maWxsQWxwaGEgPSAxO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHdpZHRoICh0aGlja25lc3MpIG9mIGFueSBsaW5lcyBkcmF3bi5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAwXG4gICAgICovXG4gICAgdGhpcy5saW5lV2lkdGggPSAwO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGNvbG9yIG9mIGFueSBsaW5lcyBkcmF3bi5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge3N0cmluZ31cbiAgICAgKiBAZGVmYXVsdCAwXG4gICAgICovXG4gICAgdGhpcy5saW5lQ29sb3IgPSAwO1xuXG4gICAgLyoqXG4gICAgICogR3JhcGhpY3MgZGF0YVxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5HcmFwaGljc0RhdGFbXX1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuZ3JhcGhpY3NEYXRhID0gW107XG5cbiAgICAvKipcbiAgICAgKiBUaGUgdGludCBhcHBsaWVkIHRvIHRoZSBncmFwaGljIHNoYXBlLiBUaGlzIGlzIGEgaGV4IHZhbHVlLiBBcHBseSBhIHZhbHVlIG9mIDB4RkZGRkZGIHRvIHJlc2V0IHRoZSB0aW50LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDB4RkZGRkZGXG4gICAgICovXG4gICAgdGhpcy50aW50ID0gMHhGRkZGRkY7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgcHJldmlvdXMgdGludCBhcHBsaWVkIHRvIHRoZSBncmFwaGljIHNoYXBlLiBVc2VkIHRvIGNvbXBhcmUgdG8gdGhlIGN1cnJlbnQgdGludCBhbmQgY2hlY2sgaWYgdGhlcmVzIGNoYW5nZS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBkZWZhdWx0IDB4RkZGRkZGXG4gICAgICovXG4gICAgdGhpcy5fcHJldlRpbnQgPSAweEZGRkZGRjtcblxuICAgIC8qKlxuICAgICAqIFRoZSBibGVuZCBtb2RlIHRvIGJlIGFwcGxpZWQgdG8gdGhlIGdyYXBoaWMgc2hhcGUuIEFwcGx5IGEgdmFsdWUgb2YgYFBJWEkuQkxFTkRfTU9ERVMuTk9STUFMYCB0byByZXNldCB0aGUgYmxlbmQgbW9kZS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCBQSVhJLkJMRU5EX01PREVTLk5PUk1BTDtcbiAgICAgKiBAc2VlIFBJWEkuQkxFTkRfTU9ERVNcbiAgICAgKi9cbiAgICB0aGlzLmJsZW5kTW9kZSA9IENPTlNULkJMRU5EX01PREVTLk5PUk1BTDtcblxuICAgIC8qKlxuICAgICAqIEN1cnJlbnQgcGF0aFxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5HcmFwaGljc0RhdGF9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLmN1cnJlbnRQYXRoID0gbnVsbDtcblxuICAgIC8qKlxuICAgICAqIEFycmF5IGNvbnRhaW5pbmcgc29tZSBXZWJHTC1yZWxhdGVkIHByb3BlcnRpZXMgdXNlZCBieSB0aGUgV2ViR0wgcmVuZGVyZXIuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtvYmplY3Q8bnVtYmVyLCBvYmplY3Q+fVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgLy8gVE9ETyAtIF93ZWJnbCBzaG91bGQgdXNlIGEgcHJvdG90eXBlIG9iamVjdCwgbm90IGEgcmFuZG9tIHVuZG9jdW1lbnRlZCBvYmplY3QuLi5cbiAgICB0aGlzLl93ZWJHTCA9IHt9O1xuXG4gICAgLyoqXG4gICAgICogV2hldGhlciB0aGlzIHNoYXBlIGlzIGJlaW5nIHVzZWQgYXMgYSBtYXNrLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKi9cbiAgICB0aGlzLmlzTWFzayA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGJvdW5kcycgcGFkZGluZyB1c2VkIGZvciBib3VuZHMgY2FsY3VsYXRpb24uXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy5ib3VuZHNQYWRkaW5nID0gMDtcblxuICAgIC8qKlxuICAgICAqIEEgY2FjaGUgb2YgdGhlIGxvY2FsIGJvdW5kcyB0byBwcmV2ZW50IHJlY2FsY3VsYXRpb24uXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlJlY3RhbmdsZX1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX2xvY2FsQm91bmRzID0gbmV3IG1hdGguUmVjdGFuZ2xlKDAsMCwxLDEpO1xuXG4gICAgLyoqXG4gICAgICogVXNlZCB0byBkZXRlY3QgaWYgdGhlIGdyYXBoaWNzIG9iamVjdCBoYXMgY2hhbmdlZC4gSWYgdGhpcyBpcyBzZXQgdG8gdHJ1ZSB0aGVuIHRoZSBncmFwaGljc1xuICAgICAqIG9iamVjdCB3aWxsIGJlIHJlY2FsY3VsYXRlZC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLmRpcnR5ID0gdHJ1ZTtcblxuICAgIC8qKlxuICAgICAqIFVzZWQgdG8gZGV0ZWN0IGlmIHRoZSBXZWJHTCBncmFwaGljcyBvYmplY3QgaGFzIGNoYW5nZWQuIElmIHRoaXMgaXMgc2V0IHRvIHRydWUgdGhlbiB0aGVcbiAgICAgKiBncmFwaGljcyBvYmplY3Qgd2lsbCBiZSByZWNhbGN1bGF0ZWQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5nbERpcnR5ID0gZmFsc2U7XG5cbiAgICB0aGlzLmJvdW5kc0RpcnR5ID0gdHJ1ZTtcblxuICAgIC8qKlxuICAgICAqIFVzZWQgdG8gZGV0ZWN0IGlmIHRoZSBjYWNoZWQgc3ByaXRlIG9iamVjdCBuZWVkcyB0byBiZSB1cGRhdGVkLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuY2FjaGVkU3ByaXRlRGlydHkgPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIFdoZW4gY2FjaGVBc0JpdG1hcCBpcyBzZXQgdG8gdHJ1ZSB0aGUgZ3JhcGhpY3Mgb2JqZWN0IHdpbGwgYmUgcmVuZGVyZWQgYXMgaWYgaXQgd2FzIGEgc3ByaXRlLlxuICAgICAqIFRoaXMgaXMgdXNlZnVsIGlmIHlvdXIgZ3JhcGhpY3MgZWxlbWVudCBkb2VzIG5vdCBjaGFuZ2Ugb2Z0ZW4sIGFzIGl0IHdpbGwgc3BlZWQgdXAgdGhlIHJlbmRlcmluZ1xuICAgICAqIG9mIHRoZSBvYmplY3QgaW4gZXhjaGFuZ2UgZm9yIHRha2luZyB1cCB0ZXh0dXJlIG1lbW9yeS4gSXQgaXMgYWxzbyB1c2VmdWwgaWYgeW91IG5lZWQgdGhlIGdyYXBoaWNzXG4gICAgICogb2JqZWN0IHRvIGJlIGFudGktYWxpYXNlZCwgYmVjYXVzZSBpdCB3aWxsIGJlIHJlbmRlcmVkIHVzaW5nIGNhbnZhcy4gVGhpcyBpcyBub3QgcmVjb21tZW5kZWQgaWZcbiAgICAgKiB5b3UgYXJlIGNvbnN0YW50bHkgcmVkcmF3aW5nIHRoZSBncmFwaGljcyBlbGVtZW50LlxuICAgICAqXG4gICAgICogQG5hbWUgY2FjaGVBc0JpdG1hcFxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICogQG1lbWJlcm9mIFBJWEkuR3JhcGhpY3MjXG4gICAgICogQGRlZmF1bHQgZmFsc2VcbiAgICAgKi9cbn1cblxuLy8gY29uc3RydWN0b3JcbkdyYXBoaWNzLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoQ29udGFpbmVyLnByb3RvdHlwZSk7XG5HcmFwaGljcy5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBHcmFwaGljcztcbm1vZHVsZS5leHBvcnRzID0gR3JhcGhpY3M7XG5cbi8qKlxuICogQ3JlYXRlcyBhIG5ldyBHcmFwaGljcyBvYmplY3Qgd2l0aCB0aGUgc2FtZSB2YWx1ZXMgYXMgdGhpcyBvbmUuXG4gKiBOb3RlIHRoYXQgdGhlIG9ubHkgdGhlIHByb3BlcnRpZXMgb2YgdGhlIG9iamVjdCBhcmUgY2xvbmVkLCBub3QgaXRzIHRyYW5zZm9ybSAocG9zaXRpb24sc2NhbGUsZXRjKVxuICpcbiAqIEByZXR1cm4ge1BJWEkuR3JhcGhpY3N9XG4gKi9cbkdyYXBoaWNzLnByb3RvdHlwZS5jbG9uZSA9IGZ1bmN0aW9uICgpXG57XG4gICAgdmFyIGNsb25lID0gbmV3IEdyYXBoaWNzKCk7XG5cbiAgICBjbG9uZS5yZW5kZXJhYmxlICAgID0gdGhpcy5yZW5kZXJhYmxlO1xuICAgIGNsb25lLmZpbGxBbHBoYSAgICAgPSB0aGlzLmZpbGxBbHBoYTtcbiAgICBjbG9uZS5saW5lV2lkdGggICAgID0gdGhpcy5saW5lV2lkdGg7XG4gICAgY2xvbmUubGluZUNvbG9yICAgICA9IHRoaXMubGluZUNvbG9yO1xuICAgIGNsb25lLnRpbnQgICAgICAgICAgPSB0aGlzLnRpbnQ7XG4gICAgY2xvbmUuYmxlbmRNb2RlICAgICA9IHRoaXMuYmxlbmRNb2RlO1xuICAgIGNsb25lLmlzTWFzayAgICAgICAgPSB0aGlzLmlzTWFzaztcbiAgICBjbG9uZS5ib3VuZHNQYWRkaW5nID0gdGhpcy5ib3VuZHNQYWRkaW5nO1xuICAgIGNsb25lLmRpcnR5ICAgICAgICAgPSB0cnVlO1xuICAgIGNsb25lLmdsRGlydHkgICAgICAgPSB0cnVlO1xuICAgIGNsb25lLmNhY2hlZFNwcml0ZURpcnR5ID0gdGhpcy5jYWNoZWRTcHJpdGVEaXJ0eTtcblxuICAgIC8vIGNvcHkgZ3JhcGhpY3MgZGF0YVxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5ncmFwaGljc0RhdGEubGVuZ3RoOyArK2kpXG4gICAge1xuICAgICAgICBjbG9uZS5ncmFwaGljc0RhdGEucHVzaCh0aGlzLmdyYXBoaWNzRGF0YVtpXS5jbG9uZSgpKTtcbiAgICB9XG5cbiAgICBjbG9uZS5jdXJyZW50UGF0aCA9IGNsb25lLmdyYXBoaWNzRGF0YVtjbG9uZS5ncmFwaGljc0RhdGEubGVuZ3RoIC0gMV07XG5cbiAgICBjbG9uZS51cGRhdGVMb2NhbEJvdW5kcygpO1xuXG4gICAgcmV0dXJuIGNsb25lO1xufTtcblxuLyoqXG4gKiBTcGVjaWZpZXMgdGhlIGxpbmUgc3R5bGUgdXNlZCBmb3Igc3Vic2VxdWVudCBjYWxscyB0byBHcmFwaGljcyBtZXRob2RzIHN1Y2ggYXMgdGhlIGxpbmVUbygpIG1ldGhvZCBvciB0aGUgZHJhd0NpcmNsZSgpIG1ldGhvZC5cbiAqXG4gKiBAcGFyYW0gbGluZVdpZHRoIHtudW1iZXJ9IHdpZHRoIG9mIHRoZSBsaW5lIHRvIGRyYXcsIHdpbGwgdXBkYXRlIHRoZSBvYmplY3RzIHN0b3JlZCBzdHlsZVxuICogQHBhcmFtIGNvbG9yIHtudW1iZXJ9IGNvbG9yIG9mIHRoZSBsaW5lIHRvIGRyYXcsIHdpbGwgdXBkYXRlIHRoZSBvYmplY3RzIHN0b3JlZCBzdHlsZVxuICogQHBhcmFtIGFscGhhIHtudW1iZXJ9IGFscGhhIG9mIHRoZSBsaW5lIHRvIGRyYXcsIHdpbGwgdXBkYXRlIHRoZSBvYmplY3RzIHN0b3JlZCBzdHlsZVxuICogQHJldHVybiB7UElYSS5HcmFwaGljc31cbiAqL1xuR3JhcGhpY3MucHJvdG90eXBlLmxpbmVTdHlsZSA9IGZ1bmN0aW9uIChsaW5lV2lkdGgsIGNvbG9yLCBhbHBoYSlcbntcbiAgICB0aGlzLmxpbmVXaWR0aCA9IGxpbmVXaWR0aCB8fCAwO1xuICAgIHRoaXMubGluZUNvbG9yID0gY29sb3IgfHwgMDtcbiAgICB0aGlzLmxpbmVBbHBoYSA9IChhbHBoYSA9PT0gdW5kZWZpbmVkKSA/IDEgOiBhbHBoYTtcblxuICAgIGlmICh0aGlzLmN1cnJlbnRQYXRoKVxuICAgIHtcbiAgICAgICAgaWYgKHRoaXMuY3VycmVudFBhdGguc2hhcGUucG9pbnRzLmxlbmd0aClcbiAgICAgICAge1xuICAgICAgICAgICAgLy8gaGFsZndheSB0aHJvdWdoIGEgbGluZT8gc3RhcnQgYSBuZXcgb25lIVxuICAgICAgICAgICAgdmFyIHNoYXBlID0gbmV3IG1hdGguUG9seWdvbih0aGlzLmN1cnJlbnRQYXRoLnNoYXBlLnBvaW50cy5zbGljZSgtMikpO1xuICAgICAgICAgICAgc2hhcGUuY2xvc2VkID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLmRyYXdTaGFwZShzaGFwZSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgICAvLyBvdGhlcndpc2UgaXRzIGVtcHR5IHNvIGxldHMganVzdCBzZXQgdGhlIGxpbmUgcHJvcGVydGllc1xuICAgICAgICAgICAgdGhpcy5jdXJyZW50UGF0aC5saW5lV2lkdGggPSB0aGlzLmxpbmVXaWR0aDtcbiAgICAgICAgICAgIHRoaXMuY3VycmVudFBhdGgubGluZUNvbG9yID0gdGhpcy5saW5lQ29sb3I7XG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRQYXRoLmxpbmVBbHBoYSA9IHRoaXMubGluZUFscGhhO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIE1vdmVzIHRoZSBjdXJyZW50IGRyYXdpbmcgcG9zaXRpb24gdG8geCwgeS5cbiAqXG4gKiBAcGFyYW0geCB7bnVtYmVyfSB0aGUgWCBjb29yZGluYXRlIHRvIG1vdmUgdG9cbiAqIEBwYXJhbSB5IHtudW1iZXJ9IHRoZSBZIGNvb3JkaW5hdGUgdG8gbW92ZSB0b1xuICogQHJldHVybiB7UElYSS5HcmFwaGljc31cbiAgKi9cbkdyYXBoaWNzLnByb3RvdHlwZS5tb3ZlVG8gPSBmdW5jdGlvbiAoeCwgeSlcbntcbiAgICB2YXIgc2hhcGUgPSBuZXcgbWF0aC5Qb2x5Z29uKFt4LHldKTtcbiAgICBzaGFwZS5jbG9zZWQgPSBmYWxzZTtcbiAgICB0aGlzLmRyYXdTaGFwZShzaGFwZSk7XG5cbiAgICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogRHJhd3MgYSBsaW5lIHVzaW5nIHRoZSBjdXJyZW50IGxpbmUgc3R5bGUgZnJvbSB0aGUgY3VycmVudCBkcmF3aW5nIHBvc2l0aW9uIHRvICh4LCB5KTtcbiAqIFRoZSBjdXJyZW50IGRyYXdpbmcgcG9zaXRpb24gaXMgdGhlbiBzZXQgdG8gKHgsIHkpLlxuICpcbiAqIEBwYXJhbSB4IHtudW1iZXJ9IHRoZSBYIGNvb3JkaW5hdGUgdG8gZHJhdyB0b1xuICogQHBhcmFtIHkge251bWJlcn0gdGhlIFkgY29vcmRpbmF0ZSB0byBkcmF3IHRvXG4gKiBAcmV0dXJuIHtQSVhJLkdyYXBoaWNzfVxuICovXG5HcmFwaGljcy5wcm90b3R5cGUubGluZVRvID0gZnVuY3Rpb24gKHgsIHkpXG57XG4gICAgdGhpcy5jdXJyZW50UGF0aC5zaGFwZS5wb2ludHMucHVzaCh4LCB5KTtcbiAgICB0aGlzLmRpcnR5ID0gdHJ1ZTtcblxuICAgIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBDYWxjdWxhdGUgdGhlIHBvaW50cyBmb3IgYSBxdWFkcmF0aWMgYmV6aWVyIGN1cnZlIGFuZCB0aGVuIGRyYXdzIGl0LlxuICogQmFzZWQgb246IGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vcXVlc3Rpb25zLzc4NTA5Ny9ob3ctZG8taS1pbXBsZW1lbnQtYS1iZXppZXItY3VydmUtaW4tY1xuICpcbiAqIEBwYXJhbSBjcFgge251bWJlcn0gQ29udHJvbCBwb2ludCB4XG4gKiBAcGFyYW0gY3BZIHtudW1iZXJ9IENvbnRyb2wgcG9pbnQgeVxuICogQHBhcmFtIHRvWCB7bnVtYmVyfSBEZXN0aW5hdGlvbiBwb2ludCB4XG4gKiBAcGFyYW0gdG9ZIHtudW1iZXJ9IERlc3RpbmF0aW9uIHBvaW50IHlcbiAqIEByZXR1cm4ge1BJWEkuR3JhcGhpY3N9XG4gKi9cbkdyYXBoaWNzLnByb3RvdHlwZS5xdWFkcmF0aWNDdXJ2ZVRvID0gZnVuY3Rpb24gKGNwWCwgY3BZLCB0b1gsIHRvWSlcbntcbiAgICBpZiAodGhpcy5jdXJyZW50UGF0aClcbiAgICB7XG4gICAgICAgIGlmICh0aGlzLmN1cnJlbnRQYXRoLnNoYXBlLnBvaW50cy5sZW5ndGggPT09IDApXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuY3VycmVudFBhdGguc2hhcGUucG9pbnRzID0gWzAsIDBdO1xuICAgICAgICB9XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHRoaXMubW92ZVRvKDAsMCk7XG4gICAgfVxuXG4gICAgdmFyIHhhLFxuICAgICAgICB5YSxcbiAgICAgICAgbiA9IDIwLFxuICAgICAgICBwb2ludHMgPSB0aGlzLmN1cnJlbnRQYXRoLnNoYXBlLnBvaW50cztcblxuICAgIGlmIChwb2ludHMubGVuZ3RoID09PSAwKVxuICAgIHtcbiAgICAgICAgdGhpcy5tb3ZlVG8oMCwgMCk7XG4gICAgfVxuXG4gICAgdmFyIGZyb21YID0gcG9pbnRzW3BvaW50cy5sZW5ndGgtMl07XG4gICAgdmFyIGZyb21ZID0gcG9pbnRzW3BvaW50cy5sZW5ndGgtMV07XG5cbiAgICB2YXIgaiA9IDA7XG4gICAgZm9yICh2YXIgaSA9IDE7IGkgPD0gbjsgKytpKVxuICAgIHtcbiAgICAgICAgaiA9IGkgLyBuO1xuXG4gICAgICAgIHhhID0gZnJvbVggKyAoIChjcFggLSBmcm9tWCkgKiBqICk7XG4gICAgICAgIHlhID0gZnJvbVkgKyAoIChjcFkgLSBmcm9tWSkgKiBqICk7XG5cbiAgICAgICAgcG9pbnRzLnB1c2goIHhhICsgKCAoKGNwWCArICggKHRvWCAtIGNwWCkgKiBqICkpIC0geGEpICogaiApLFxuICAgICAgICAgICAgICAgICAgICAgeWEgKyAoICgoY3BZICsgKCAodG9ZIC0gY3BZKSAqIGogKSkgLSB5YSkgKiBqICkgKTtcbiAgICB9XG5cbiAgICB0aGlzLmRpcnR5ID0gdGhpcy5ib3VuZHNEaXJ0eSA9IHRydWU7XG5cbiAgICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogQ2FsY3VsYXRlIHRoZSBwb2ludHMgZm9yIGEgYmV6aWVyIGN1cnZlIGFuZCB0aGVuIGRyYXdzIGl0LlxuICpcbiAqIEBwYXJhbSBjcFgge251bWJlcn0gQ29udHJvbCBwb2ludCB4XG4gKiBAcGFyYW0gY3BZIHtudW1iZXJ9IENvbnRyb2wgcG9pbnQgeVxuICogQHBhcmFtIGNwWDIge251bWJlcn0gU2Vjb25kIENvbnRyb2wgcG9pbnQgeFxuICogQHBhcmFtIGNwWTIge251bWJlcn0gU2Vjb25kIENvbnRyb2wgcG9pbnQgeVxuICogQHBhcmFtIHRvWCB7bnVtYmVyfSBEZXN0aW5hdGlvbiBwb2ludCB4XG4gKiBAcGFyYW0gdG9ZIHtudW1iZXJ9IERlc3RpbmF0aW9uIHBvaW50IHlcbiAqIEByZXR1cm4ge1BJWEkuR3JhcGhpY3N9XG4gKi9cbkdyYXBoaWNzLnByb3RvdHlwZS5iZXppZXJDdXJ2ZVRvID0gZnVuY3Rpb24gKGNwWCwgY3BZLCBjcFgyLCBjcFkyLCB0b1gsIHRvWSlcbntcbiAgICBpZiAodGhpcy5jdXJyZW50UGF0aClcbiAgICB7XG4gICAgICAgIGlmICh0aGlzLmN1cnJlbnRQYXRoLnNoYXBlLnBvaW50cy5sZW5ndGggPT09IDApXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuY3VycmVudFBhdGguc2hhcGUucG9pbnRzID0gWzAsIDBdO1xuICAgICAgICB9XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHRoaXMubW92ZVRvKDAsMCk7XG4gICAgfVxuXG4gICAgdmFyIG4gPSAyMCxcbiAgICAgICAgZHQsXG4gICAgICAgIGR0MixcbiAgICAgICAgZHQzLFxuICAgICAgICB0MixcbiAgICAgICAgdDMsXG4gICAgICAgIHBvaW50cyA9IHRoaXMuY3VycmVudFBhdGguc2hhcGUucG9pbnRzO1xuXG4gICAgdmFyIGZyb21YID0gcG9pbnRzW3BvaW50cy5sZW5ndGgtMl07XG4gICAgdmFyIGZyb21ZID0gcG9pbnRzW3BvaW50cy5sZW5ndGgtMV07XG5cbiAgICB2YXIgaiA9IDA7XG5cbiAgICBmb3IgKHZhciBpID0gMTsgaSA8PSBuOyArK2kpXG4gICAge1xuICAgICAgICBqID0gaSAvIG47XG5cbiAgICAgICAgZHQgPSAoMSAtIGopO1xuICAgICAgICBkdDIgPSBkdCAqIGR0O1xuICAgICAgICBkdDMgPSBkdDIgKiBkdDtcblxuICAgICAgICB0MiA9IGogKiBqO1xuICAgICAgICB0MyA9IHQyICogajtcblxuICAgICAgICBwb2ludHMucHVzaCggZHQzICogZnJvbVggKyAzICogZHQyICogaiAqIGNwWCArIDMgKiBkdCAqIHQyICogY3BYMiArIHQzICogdG9YLFxuICAgICAgICAgICAgICAgICAgICAgZHQzICogZnJvbVkgKyAzICogZHQyICogaiAqIGNwWSArIDMgKiBkdCAqIHQyICogY3BZMiArIHQzICogdG9ZKTtcbiAgICB9XG5cbiAgICB0aGlzLmRpcnR5ID0gdGhpcy5ib3VuZHNEaXJ0eSA9IHRydWU7XG5cbiAgICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogVGhlIGFyY1RvKCkgbWV0aG9kIGNyZWF0ZXMgYW4gYXJjL2N1cnZlIGJldHdlZW4gdHdvIHRhbmdlbnRzIG9uIHRoZSBjYW52YXMuXG4gKlxuICogXCJib3Jyb3dlZFwiIGZyb20gaHR0cHM6Ly9jb2RlLmdvb2dsZS5jb20vcC9meGNhbnZhcy8gLSB0aGFua3MgZ29vZ2xlIVxuICpcbiAqIEBwYXJhbSB4MSB7bnVtYmVyfSBUaGUgeC1jb29yZGluYXRlIG9mIHRoZSBiZWdpbm5pbmcgb2YgdGhlIGFyY1xuICogQHBhcmFtIHkxIHtudW1iZXJ9IFRoZSB5LWNvb3JkaW5hdGUgb2YgdGhlIGJlZ2lubmluZyBvZiB0aGUgYXJjXG4gKiBAcGFyYW0geDIge251bWJlcn0gVGhlIHgtY29vcmRpbmF0ZSBvZiB0aGUgZW5kIG9mIHRoZSBhcmNcbiAqIEBwYXJhbSB5MiB7bnVtYmVyfSBUaGUgeS1jb29yZGluYXRlIG9mIHRoZSBlbmQgb2YgdGhlIGFyY1xuICogQHBhcmFtIHJhZGl1cyB7bnVtYmVyfSBUaGUgcmFkaXVzIG9mIHRoZSBhcmNcbiAqIEByZXR1cm4ge1BJWEkuR3JhcGhpY3N9XG4gKi9cbkdyYXBoaWNzLnByb3RvdHlwZS5hcmNUbyA9IGZ1bmN0aW9uICh4MSwgeTEsIHgyLCB5MiwgcmFkaXVzKVxue1xuICAgIGlmICh0aGlzLmN1cnJlbnRQYXRoKVxuICAgIHtcbiAgICAgICAgaWYgKHRoaXMuY3VycmVudFBhdGguc2hhcGUucG9pbnRzLmxlbmd0aCA9PT0gMClcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5jdXJyZW50UGF0aC5zaGFwZS5wb2ludHMucHVzaCh4MSwgeTEpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHRoaXMubW92ZVRvKHgxLCB5MSk7XG4gICAgfVxuXG4gICAgdmFyIHBvaW50cyA9IHRoaXMuY3VycmVudFBhdGguc2hhcGUucG9pbnRzLFxuICAgICAgICBmcm9tWCA9IHBvaW50c1twb2ludHMubGVuZ3RoLTJdLFxuICAgICAgICBmcm9tWSA9IHBvaW50c1twb2ludHMubGVuZ3RoLTFdLFxuICAgICAgICBhMSA9IGZyb21ZIC0geTEsXG4gICAgICAgIGIxID0gZnJvbVggLSB4MSxcbiAgICAgICAgYTIgPSB5MiAgIC0geTEsXG4gICAgICAgIGIyID0geDIgICAtIHgxLFxuICAgICAgICBtbSA9IE1hdGguYWJzKGExICogYjIgLSBiMSAqIGEyKTtcblxuICAgIGlmIChtbSA8IDEuMGUtOCB8fCByYWRpdXMgPT09IDApXG4gICAge1xuICAgICAgICBpZiAocG9pbnRzW3BvaW50cy5sZW5ndGgtMl0gIT09IHgxIHx8IHBvaW50c1twb2ludHMubGVuZ3RoLTFdICE9PSB5MSlcbiAgICAgICAge1xuICAgICAgICAgICAgcG9pbnRzLnB1c2goeDEsIHkxKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICB2YXIgZGQgPSBhMSAqIGExICsgYjEgKiBiMSxcbiAgICAgICAgICAgIGNjID0gYTIgKiBhMiArIGIyICogYjIsXG4gICAgICAgICAgICB0dCA9IGExICogYTIgKyBiMSAqIGIyLFxuICAgICAgICAgICAgazEgPSByYWRpdXMgKiBNYXRoLnNxcnQoZGQpIC8gbW0sXG4gICAgICAgICAgICBrMiA9IHJhZGl1cyAqIE1hdGguc3FydChjYykgLyBtbSxcbiAgICAgICAgICAgIGoxID0gazEgKiB0dCAvIGRkLFxuICAgICAgICAgICAgajIgPSBrMiAqIHR0IC8gY2MsXG4gICAgICAgICAgICBjeCA9IGsxICogYjIgKyBrMiAqIGIxLFxuICAgICAgICAgICAgY3kgPSBrMSAqIGEyICsgazIgKiBhMSxcbiAgICAgICAgICAgIHB4ID0gYjEgKiAoazIgKyBqMSksXG4gICAgICAgICAgICBweSA9IGExICogKGsyICsgajEpLFxuICAgICAgICAgICAgcXggPSBiMiAqIChrMSArIGoyKSxcbiAgICAgICAgICAgIHF5ID0gYTIgKiAoazEgKyBqMiksXG4gICAgICAgICAgICBzdGFydEFuZ2xlID0gTWF0aC5hdGFuMihweSAtIGN5LCBweCAtIGN4KSxcbiAgICAgICAgICAgIGVuZEFuZ2xlICAgPSBNYXRoLmF0YW4yKHF5IC0gY3ksIHF4IC0gY3gpO1xuXG4gICAgICAgIHRoaXMuYXJjKGN4ICsgeDEsIGN5ICsgeTEsIHJhZGl1cywgc3RhcnRBbmdsZSwgZW5kQW5nbGUsIGIxICogYTIgPiBiMiAqIGExKTtcbiAgICB9XG5cbiAgICB0aGlzLmRpcnR5ID0gdGhpcy5ib3VuZHNEaXJ0eSA9IHRydWU7XG5cbiAgICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogVGhlIGFyYyBtZXRob2QgY3JlYXRlcyBhbiBhcmMvY3VydmUgKHVzZWQgdG8gY3JlYXRlIGNpcmNsZXMsIG9yIHBhcnRzIG9mIGNpcmNsZXMpLlxuICpcbiAqIEBwYXJhbSBjeCB7bnVtYmVyfSBUaGUgeC1jb29yZGluYXRlIG9mIHRoZSBjZW50ZXIgb2YgdGhlIGNpcmNsZVxuICogQHBhcmFtIGN5IHtudW1iZXJ9IFRoZSB5LWNvb3JkaW5hdGUgb2YgdGhlIGNlbnRlciBvZiB0aGUgY2lyY2xlXG4gKiBAcGFyYW0gcmFkaXVzIHtudW1iZXJ9IFRoZSByYWRpdXMgb2YgdGhlIGNpcmNsZVxuICogQHBhcmFtIHN0YXJ0QW5nbGUge251bWJlcn0gVGhlIHN0YXJ0aW5nIGFuZ2xlLCBpbiByYWRpYW5zICgwIGlzIGF0IHRoZSAzIG8nY2xvY2sgcG9zaXRpb24gb2YgdGhlIGFyYydzIGNpcmNsZSlcbiAqIEBwYXJhbSBlbmRBbmdsZSB7bnVtYmVyfSBUaGUgZW5kaW5nIGFuZ2xlLCBpbiByYWRpYW5zXG4gKiBAcGFyYW0gYW50aWNsb2Nrd2lzZSB7Ym9vbGVhbn0gT3B0aW9uYWwuIFNwZWNpZmllcyB3aGV0aGVyIHRoZSBkcmF3aW5nIHNob3VsZCBiZSBjb3VudGVyY2xvY2t3aXNlIG9yIGNsb2Nrd2lzZS4gRmFsc2UgaXMgZGVmYXVsdCwgYW5kIGluZGljYXRlcyBjbG9ja3dpc2UsIHdoaWxlIHRydWUgaW5kaWNhdGVzIGNvdW50ZXItY2xvY2t3aXNlLlxuICogQHJldHVybiB7UElYSS5HcmFwaGljc31cbiAqL1xuR3JhcGhpY3MucHJvdG90eXBlLmFyYyA9IGZ1bmN0aW9uKGN4LCBjeSwgcmFkaXVzLCBzdGFydEFuZ2xlLCBlbmRBbmdsZSwgYW50aWNsb2Nrd2lzZSlcbntcbiAgICBhbnRpY2xvY2t3aXNlID0gYW50aWNsb2Nrd2lzZSB8fCBmYWxzZTtcblxuICAgIGlmIChzdGFydEFuZ2xlID09PSBlbmRBbmdsZSlcbiAgICB7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIGlmKCAhYW50aWNsb2Nrd2lzZSAmJiBlbmRBbmdsZSA8PSBzdGFydEFuZ2xlIClcbiAgICB7XG4gICAgICAgIGVuZEFuZ2xlICs9IE1hdGguUEkgKiAyO1xuICAgIH1cbiAgICBlbHNlIGlmKCBhbnRpY2xvY2t3aXNlICYmIHN0YXJ0QW5nbGUgPD0gZW5kQW5nbGUgKVxuICAgIHtcbiAgICAgICAgc3RhcnRBbmdsZSArPSBNYXRoLlBJICogMjtcbiAgICB9XG5cbiAgICB2YXIgc3dlZXAgPSBhbnRpY2xvY2t3aXNlID8gKHN0YXJ0QW5nbGUgLSBlbmRBbmdsZSkgKiAtMSA6IChlbmRBbmdsZSAtIHN0YXJ0QW5nbGUpO1xuICAgIHZhciBzZWdzID0gIE1hdGguY2VpbChNYXRoLmFicyhzd2VlcCkgLyAoTWF0aC5QSSAqIDIpKSAqIDQwO1xuXG4gICAgaWYoc3dlZXAgPT09IDApXG4gICAge1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICB2YXIgc3RhcnRYID0gY3ggKyBNYXRoLmNvcyhzdGFydEFuZ2xlKSAqIHJhZGl1cztcbiAgICB2YXIgc3RhcnRZID0gY3kgKyBNYXRoLnNpbihzdGFydEFuZ2xlKSAqIHJhZGl1cztcblxuICAgIGlmICh0aGlzLmN1cnJlbnRQYXRoKVxuICAgIHtcbiAgICAgICAgdGhpcy5jdXJyZW50UGF0aC5zaGFwZS5wb2ludHMucHVzaChzdGFydFgsIHN0YXJ0WSk7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHRoaXMubW92ZVRvKHN0YXJ0WCwgc3RhcnRZKTtcbiAgICB9XG5cbiAgICB2YXIgcG9pbnRzID0gdGhpcy5jdXJyZW50UGF0aC5zaGFwZS5wb2ludHM7XG5cbiAgICB2YXIgdGhldGEgPSBzd2VlcC8oc2VncyoyKTtcbiAgICB2YXIgdGhldGEyID0gdGhldGEqMjtcblxuICAgIHZhciBjVGhldGEgPSBNYXRoLmNvcyh0aGV0YSk7XG4gICAgdmFyIHNUaGV0YSA9IE1hdGguc2luKHRoZXRhKTtcblxuICAgIHZhciBzZWdNaW51cyA9IHNlZ3MgLSAxO1xuXG4gICAgdmFyIHJlbWFpbmRlciA9ICggc2VnTWludXMgJSAxICkgLyBzZWdNaW51cztcblxuICAgIGZvcih2YXIgaT0wOyBpPD1zZWdNaW51czsgaSsrKVxuICAgIHtcbiAgICAgICAgdmFyIHJlYWwgPSAgaSArIHJlbWFpbmRlciAqIGk7XG5cblxuICAgICAgICB2YXIgYW5nbGUgPSAoKHRoZXRhKSArIHN0YXJ0QW5nbGUgKyAodGhldGEyICogcmVhbCkpO1xuXG4gICAgICAgIHZhciBjID0gTWF0aC5jb3MoYW5nbGUpO1xuICAgICAgICB2YXIgcyA9IC1NYXRoLnNpbihhbmdsZSk7XG5cbiAgICAgICAgcG9pbnRzLnB1c2goKCAoY1RoZXRhICogIGMpICsgKHNUaGV0YSAqIHMpICkgKiByYWRpdXMgKyBjeCxcbiAgICAgICAgICAgICAgICAgICAgKCAoY1RoZXRhICogLXMpICsgKHNUaGV0YSAqIGMpICkgKiByYWRpdXMgKyBjeSk7XG4gICAgfVxuXG4gICAgdGhpcy5kaXJ0eSA9IHRoaXMuYm91bmRzRGlydHkgPSB0cnVlO1xuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIFNwZWNpZmllcyBhIHNpbXBsZSBvbmUtY29sb3IgZmlsbCB0aGF0IHN1YnNlcXVlbnQgY2FsbHMgdG8gb3RoZXIgR3JhcGhpY3MgbWV0aG9kc1xuICogKHN1Y2ggYXMgbGluZVRvKCkgb3IgZHJhd0NpcmNsZSgpKSB1c2Ugd2hlbiBkcmF3aW5nLlxuICpcbiAqIEBwYXJhbSBjb2xvciB7bnVtYmVyfSB0aGUgY29sb3Igb2YgdGhlIGZpbGxcbiAqIEBwYXJhbSBhbHBoYSB7bnVtYmVyfSB0aGUgYWxwaGEgb2YgdGhlIGZpbGxcbiAqIEByZXR1cm4ge1BJWEkuR3JhcGhpY3N9XG4gKi9cbkdyYXBoaWNzLnByb3RvdHlwZS5iZWdpbkZpbGwgPSBmdW5jdGlvbiAoY29sb3IsIGFscGhhKVxue1xuICAgIHRoaXMuZmlsbGluZyA9IHRydWU7XG4gICAgdGhpcy5maWxsQ29sb3IgPSBjb2xvciB8fCAwO1xuICAgIHRoaXMuZmlsbEFscGhhID0gKGFscGhhID09PSB1bmRlZmluZWQpID8gMSA6IGFscGhhO1xuXG4gICAgaWYgKHRoaXMuY3VycmVudFBhdGgpXG4gICAge1xuICAgICAgICBpZiAodGhpcy5jdXJyZW50UGF0aC5zaGFwZS5wb2ludHMubGVuZ3RoIDw9IDIpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuY3VycmVudFBhdGguZmlsbCA9IHRoaXMuZmlsbGluZztcbiAgICAgICAgICAgIHRoaXMuY3VycmVudFBhdGguZmlsbENvbG9yID0gdGhpcy5maWxsQ29sb3I7XG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRQYXRoLmZpbGxBbHBoYSA9IHRoaXMuZmlsbEFscGhhO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBBcHBsaWVzIGEgZmlsbCB0byB0aGUgbGluZXMgYW5kIHNoYXBlcyB0aGF0IHdlcmUgYWRkZWQgc2luY2UgdGhlIGxhc3QgY2FsbCB0byB0aGUgYmVnaW5GaWxsKCkgbWV0aG9kLlxuICpcbiAqIEByZXR1cm4ge0dyYXBoaWNzfVxuICovXG5HcmFwaGljcy5wcm90b3R5cGUuZW5kRmlsbCA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy5maWxsaW5nID0gZmFsc2U7XG4gICAgdGhpcy5maWxsQ29sb3IgPSBudWxsO1xuICAgIHRoaXMuZmlsbEFscGhhID0gMTtcblxuICAgIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKlxuICogQHBhcmFtIHgge251bWJlcn0gVGhlIFggY29vcmQgb2YgdGhlIHRvcC1sZWZ0IG9mIHRoZSByZWN0YW5nbGVcbiAqIEBwYXJhbSB5IHtudW1iZXJ9IFRoZSBZIGNvb3JkIG9mIHRoZSB0b3AtbGVmdCBvZiB0aGUgcmVjdGFuZ2xlXG4gKiBAcGFyYW0gd2lkdGgge251bWJlcn0gVGhlIHdpZHRoIG9mIHRoZSByZWN0YW5nbGVcbiAqIEBwYXJhbSBoZWlnaHQge251bWJlcn0gVGhlIGhlaWdodCBvZiB0aGUgcmVjdGFuZ2xlXG4gKiBAcmV0dXJuIHtQSVhJLkdyYXBoaWNzfVxuICovXG5HcmFwaGljcy5wcm90b3R5cGUuZHJhd1JlY3QgPSBmdW5jdGlvbiAoIHgsIHksIHdpZHRoLCBoZWlnaHQgKVxue1xuICAgIHRoaXMuZHJhd1NoYXBlKG5ldyBtYXRoLlJlY3RhbmdsZSh4LHksIHdpZHRoLCBoZWlnaHQpKTtcblxuICAgIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKlxuICogQHBhcmFtIHgge251bWJlcn0gVGhlIFggY29vcmQgb2YgdGhlIHRvcC1sZWZ0IG9mIHRoZSByZWN0YW5nbGVcbiAqIEBwYXJhbSB5IHtudW1iZXJ9IFRoZSBZIGNvb3JkIG9mIHRoZSB0b3AtbGVmdCBvZiB0aGUgcmVjdGFuZ2xlXG4gKiBAcGFyYW0gd2lkdGgge251bWJlcn0gVGhlIHdpZHRoIG9mIHRoZSByZWN0YW5nbGVcbiAqIEBwYXJhbSBoZWlnaHQge251bWJlcn0gVGhlIGhlaWdodCBvZiB0aGUgcmVjdGFuZ2xlXG4gKiBAcGFyYW0gcmFkaXVzIHtudW1iZXJ9IFJhZGl1cyBvZiB0aGUgcmVjdGFuZ2xlIGNvcm5lcnNcbiAqIEByZXR1cm4ge1BJWEkuR3JhcGhpY3N9XG4gKi9cbkdyYXBoaWNzLnByb3RvdHlwZS5kcmF3Um91bmRlZFJlY3QgPSBmdW5jdGlvbiAoIHgsIHksIHdpZHRoLCBoZWlnaHQsIHJhZGl1cyApXG57XG4gICAgdGhpcy5kcmF3U2hhcGUobmV3IG1hdGguUm91bmRlZFJlY3RhbmdsZSh4LCB5LCB3aWR0aCwgaGVpZ2h0LCByYWRpdXMpKTtcblxuICAgIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBEcmF3cyBhIGNpcmNsZS5cbiAqXG4gKiBAcGFyYW0geCB7bnVtYmVyfSBUaGUgWCBjb29yZGluYXRlIG9mIHRoZSBjZW50ZXIgb2YgdGhlIGNpcmNsZVxuICogQHBhcmFtIHkge251bWJlcn0gVGhlIFkgY29vcmRpbmF0ZSBvZiB0aGUgY2VudGVyIG9mIHRoZSBjaXJjbGVcbiAqIEBwYXJhbSByYWRpdXMge251bWJlcn0gVGhlIHJhZGl1cyBvZiB0aGUgY2lyY2xlXG4gKiBAcmV0dXJuIHtQSVhJLkdyYXBoaWNzfVxuICovXG5HcmFwaGljcy5wcm90b3R5cGUuZHJhd0NpcmNsZSA9IGZ1bmN0aW9uICh4LCB5LCByYWRpdXMpXG57XG4gICAgdGhpcy5kcmF3U2hhcGUobmV3IG1hdGguQ2lyY2xlKHgseSwgcmFkaXVzKSk7XG5cbiAgICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogRHJhd3MgYW4gZWxsaXBzZS5cbiAqXG4gKiBAcGFyYW0geCB7bnVtYmVyfSBUaGUgWCBjb29yZGluYXRlIG9mIHRoZSBjZW50ZXIgb2YgdGhlIGVsbGlwc2VcbiAqIEBwYXJhbSB5IHtudW1iZXJ9IFRoZSBZIGNvb3JkaW5hdGUgb2YgdGhlIGNlbnRlciBvZiB0aGUgZWxsaXBzZVxuICogQHBhcmFtIHdpZHRoIHtudW1iZXJ9IFRoZSBoYWxmIHdpZHRoIG9mIHRoZSBlbGxpcHNlXG4gKiBAcGFyYW0gaGVpZ2h0IHtudW1iZXJ9IFRoZSBoYWxmIGhlaWdodCBvZiB0aGUgZWxsaXBzZVxuICogQHJldHVybiB7UElYSS5HcmFwaGljc31cbiAqL1xuR3JhcGhpY3MucHJvdG90eXBlLmRyYXdFbGxpcHNlID0gZnVuY3Rpb24gKHgsIHksIHdpZHRoLCBoZWlnaHQpXG57XG4gICAgdGhpcy5kcmF3U2hhcGUobmV3IG1hdGguRWxsaXBzZSh4LCB5LCB3aWR0aCwgaGVpZ2h0KSk7XG5cbiAgICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogRHJhd3MgYSBwb2x5Z29uIHVzaW5nIHRoZSBnaXZlbiBwYXRoLlxuICpcbiAqIEBwYXJhbSBwYXRoIHtudW1iZXJbXXxQSVhJLlBvaW50W119IFRoZSBwYXRoIGRhdGEgdXNlZCB0byBjb25zdHJ1Y3QgdGhlIHBvbHlnb24uXG4gKiBAcmV0dXJuIHtQSVhJLkdyYXBoaWNzfVxuICovXG5HcmFwaGljcy5wcm90b3R5cGUuZHJhd1BvbHlnb24gPSBmdW5jdGlvbiAocGF0aClcbntcbiAgICAvLyBwcmV2ZW50cyBhbiBhcmd1bWVudCBhc3NpZ25tZW50IGRlb3B0XG4gICAgLy8gc2VlIHNlY3Rpb24gMy4xOiBodHRwczovL2dpdGh1Yi5jb20vcGV0a2FhbnRvbm92L2JsdWViaXJkL3dpa2kvT3B0aW1pemF0aW9uLWtpbGxlcnMjMy1tYW5hZ2luZy1hcmd1bWVudHNcbiAgICB2YXIgcG9pbnRzID0gcGF0aDtcblxuICAgIHZhciBjbG9zZWQgPSB0cnVlO1xuXG4gICAgaWYgKHBvaW50cyBpbnN0YW5jZW9mIG1hdGguUG9seWdvbilcbiAgICB7XG4gICAgICAgIGNsb3NlZCA9IHBvaW50cy5jbG9zZWQ7XG4gICAgICAgIHBvaW50cyA9IHBvaW50cy5wb2ludHM7XG4gICAgfVxuXG4gICAgaWYgKCFBcnJheS5pc0FycmF5KHBvaW50cykpXG4gICAge1xuICAgICAgICAvLyBwcmV2ZW50cyBhbiBhcmd1bWVudCBsZWFrIGRlb3B0XG4gICAgICAgIC8vIHNlZSBzZWN0aW9uIDMuMjogaHR0cHM6Ly9naXRodWIuY29tL3BldGthYW50b25vdi9ibHVlYmlyZC93aWtpL09wdGltaXphdGlvbi1raWxsZXJzIzMtbWFuYWdpbmctYXJndW1lbnRzXG4gICAgICAgIHBvaW50cyA9IG5ldyBBcnJheShhcmd1bWVudHMubGVuZ3RoKTtcblxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHBvaW50cy5sZW5ndGg7ICsraSlcbiAgICAgICAge1xuICAgICAgICAgICAgcG9pbnRzW2ldID0gYXJndW1lbnRzW2ldO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgdmFyIHNoYXBlID0gbmV3IG1hdGguUG9seWdvbihwb2ludHMpO1xuICAgIHNoYXBlLmNsb3NlZCA9IGNsb3NlZDtcblxuICAgIHRoaXMuZHJhd1NoYXBlKHNoYXBlKTtcblxuICAgIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBDbGVhcnMgdGhlIGdyYXBoaWNzIHRoYXQgd2VyZSBkcmF3biB0byB0aGlzIEdyYXBoaWNzIG9iamVjdCwgYW5kIHJlc2V0cyBmaWxsIGFuZCBsaW5lIHN0eWxlIHNldHRpbmdzLlxuICpcbiAqIEByZXR1cm4ge1BJWEkuR3JhcGhpY3N9XG4gKi9cbkdyYXBoaWNzLnByb3RvdHlwZS5jbGVhciA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy5saW5lV2lkdGggPSAwO1xuICAgIHRoaXMuZmlsbGluZyA9IGZhbHNlO1xuXG4gICAgdGhpcy5kaXJ0eSA9IHRydWU7XG4gICAgdGhpcy5jbGVhckRpcnR5ID0gdHJ1ZTtcbiAgICB0aGlzLmdyYXBoaWNzRGF0YSA9IFtdO1xuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIFVzZWZ1bCBmdW5jdGlvbiB0aGF0IHJldHVybnMgYSB0ZXh0dXJlIG9mIHRoZSBncmFwaGljcyBvYmplY3QgdGhhdCBjYW4gdGhlbiBiZSB1c2VkIHRvIGNyZWF0ZSBzcHJpdGVzXG4gKiBUaGlzIGNhbiBiZSBxdWl0ZSB1c2VmdWwgaWYgeW91ciBnZW9tZXRyeSBpcyBjb21wbGljYXRlZCBhbmQgbmVlZHMgdG8gYmUgcmV1c2VkIG11bHRpcGxlIHRpbWVzLlxuICpcbiAqIEBwYXJhbSByZXNvbHV0aW9uIHtudW1iZXJ9IFRoZSByZXNvbHV0aW9uIG9mIHRoZSB0ZXh0dXJlIGJlaW5nIGdlbmVyYXRlZFxuICogQHBhcmFtIHNjYWxlTW9kZSB7bnVtYmVyfSBTaG91bGQgYmUgb25lIG9mIHRoZSBzY2FsZU1vZGUgY29uc3RzXG4gKiBAcmV0dXJuIHtQSVhJLlRleHR1cmV9IGEgdGV4dHVyZSBvZiB0aGUgZ3JhcGhpY3Mgb2JqZWN0XG4gKi9cbkdyYXBoaWNzLnByb3RvdHlwZS5nZW5lcmF0ZVRleHR1cmUgPSBmdW5jdGlvbiAocmVuZGVyZXIsIHJlc29sdXRpb24sIHNjYWxlTW9kZSlcbntcblxuICAgIHJlc29sdXRpb24gPSByZXNvbHV0aW9uIHx8IDE7XG5cbiAgICB2YXIgYm91bmRzID0gdGhpcy5nZXRMb2NhbEJvdW5kcygpO1xuXG4gICAgdmFyIGNhbnZhc0J1ZmZlciA9IG5ldyBDYW52YXNCdWZmZXIoYm91bmRzLndpZHRoICogcmVzb2x1dGlvbiwgYm91bmRzLmhlaWdodCAqIHJlc29sdXRpb24pO1xuXG4gICAgdmFyIHRleHR1cmUgPSBUZXh0dXJlLmZyb21DYW52YXMoY2FudmFzQnVmZmVyLmNhbnZhcywgc2NhbGVNb2RlKTtcbiAgICB0ZXh0dXJlLmJhc2VUZXh0dXJlLnJlc29sdXRpb24gPSByZXNvbHV0aW9uO1xuXG4gICAgY2FudmFzQnVmZmVyLmNvbnRleHQuc2NhbGUocmVzb2x1dGlvbiwgcmVzb2x1dGlvbik7XG5cbiAgICBjYW52YXNCdWZmZXIuY29udGV4dC50cmFuc2xhdGUoLWJvdW5kcy54LC1ib3VuZHMueSk7XG5cbiAgICBDYW52YXNHcmFwaGljcy5yZW5kZXJHcmFwaGljcyh0aGlzLCBjYW52YXNCdWZmZXIuY29udGV4dCk7XG5cbiAgICByZXR1cm4gdGV4dHVyZTtcbn07XG5cbi8qKlxuICogUmVuZGVycyB0aGUgb2JqZWN0IHVzaW5nIHRoZSBXZWJHTCByZW5kZXJlclxuICpcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5XZWJHTFJlbmRlcmVyfVxuICogQHByaXZhdGVcbiAqL1xuR3JhcGhpY3MucHJvdG90eXBlLl9yZW5kZXJXZWJHTCA9IGZ1bmN0aW9uIChyZW5kZXJlcilcbntcbiAgICAvLyBpZiB0aGUgc3ByaXRlIGlzIG5vdCB2aXNpYmxlIG9yIHRoZSBhbHBoYSBpcyAwIHRoZW4gbm8gbmVlZCB0byByZW5kZXIgdGhpcyBlbGVtZW50XG5cbiAgICBpZiAodGhpcy5nbERpcnR5KVxuICAgIHtcbiAgICAgICAgdGhpcy5kaXJ0eSA9IHRydWU7XG4gICAgICAgIHRoaXMuZ2xEaXJ0eSA9IGZhbHNlO1xuICAgIH1cblxuICAgIHJlbmRlcmVyLnNldE9iamVjdFJlbmRlcmVyKHJlbmRlcmVyLnBsdWdpbnMuZ3JhcGhpY3MpO1xuICAgIHJlbmRlcmVyLnBsdWdpbnMuZ3JhcGhpY3MucmVuZGVyKHRoaXMpO1xuXG59O1xuXG4vKipcbiAqIFJlbmRlcnMgdGhlIG9iamVjdCB1c2luZyB0aGUgQ2FudmFzIHJlbmRlcmVyXG4gKlxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLkNhbnZhc1JlbmRlcmVyfVxuICogQHByaXZhdGVcbiAqL1xuR3JhcGhpY3MucHJvdG90eXBlLl9yZW5kZXJDYW52YXMgPSBmdW5jdGlvbiAocmVuZGVyZXIpXG57XG4gICAgaWYgKHRoaXMuaXNNYXNrID09PSB0cnVlKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIGlmIHRoZSB0aW50IGhhcyBjaGFuZ2VkLCBzZXQgdGhlIGdyYXBoaWNzIG9iamVjdCB0byBkaXJ0eS5cbiAgICBpZiAodGhpcy5fcHJldlRpbnQgIT09IHRoaXMudGludCkge1xuICAgICAgICB0aGlzLmRpcnR5ID0gdHJ1ZTtcbiAgICB9XG5cbiAgICAvLyB0aGlzIGNvZGUgbWF5IHN0aWxsIGJlIG5lZWRlZCBzbyBsZWF2aW5nIGZvciBub3cuLlxuICAgIC8vXG4gICAgLypcbiAgICBpZiAodGhpcy5fY2FjaGVBc0JpdG1hcClcbiAgICB7XG4gICAgICAgIGlmICh0aGlzLmRpcnR5IHx8IHRoaXMuY2FjaGVkU3ByaXRlRGlydHkpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuX2dlbmVyYXRlQ2FjaGVkU3ByaXRlKCk7XG5cbiAgICAgICAgICAgIC8vIHdlIHdpbGwgYWxzbyBuZWVkIHRvIHVwZGF0ZSB0aGUgdGV4dHVyZVxuICAgICAgICAgICAgdGhpcy51cGRhdGVDYWNoZWRTcHJpdGVUZXh0dXJlKCk7XG5cbiAgICAgICAgICAgIHRoaXMuY2FjaGVkU3ByaXRlRGlydHkgPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMuZGlydHkgPSBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX2NhY2hlZFNwcml0ZS5hbHBoYSA9IHRoaXMuYWxwaGE7XG5cbiAgICAgICAgU3ByaXRlLnByb3RvdHlwZS5fcmVuZGVyQ2FudmFzLmNhbGwodGhpcy5fY2FjaGVkU3ByaXRlLCByZW5kZXJlcik7XG5cbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICAqL1xuICAgIHZhciBjb250ZXh0ID0gcmVuZGVyZXIuY29udGV4dDtcbiAgICB2YXIgdHJhbnNmb3JtID0gdGhpcy53b3JsZFRyYW5zZm9ybTtcblxuICAgIHZhciBjb21wb3NpdGVPcGVyYXRpb24gPSByZW5kZXJlci5ibGVuZE1vZGVzW3RoaXMuYmxlbmRNb2RlXTtcbiAgICBpZiAoY29tcG9zaXRlT3BlcmF0aW9uICE9PSBjb250ZXh0Lmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbilcbiAgICB7XG4gICAgICAgIGNvbnRleHQuZ2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uID0gY29tcG9zaXRlT3BlcmF0aW9uO1xuICAgIH1cblxuICAgIHZhciByZXNvbHV0aW9uID0gcmVuZGVyZXIucmVzb2x1dGlvbjtcbiAgICBjb250ZXh0LnNldFRyYW5zZm9ybShcbiAgICAgICAgdHJhbnNmb3JtLmEgKiByZXNvbHV0aW9uLFxuICAgICAgICB0cmFuc2Zvcm0uYiAqIHJlc29sdXRpb24sXG4gICAgICAgIHRyYW5zZm9ybS5jICogcmVzb2x1dGlvbixcbiAgICAgICAgdHJhbnNmb3JtLmQgKiByZXNvbHV0aW9uLFxuICAgICAgICB0cmFuc2Zvcm0udHggKiByZXNvbHV0aW9uLFxuICAgICAgICB0cmFuc2Zvcm0udHkgKiByZXNvbHV0aW9uXG4gICAgKTtcblxuICAgIENhbnZhc0dyYXBoaWNzLnJlbmRlckdyYXBoaWNzKHRoaXMsIGNvbnRleHQpO1xufTtcblxuLyoqXG4gKiBSZXRyaWV2ZXMgdGhlIGJvdW5kcyBvZiB0aGUgZ3JhcGhpYyBzaGFwZSBhcyBhIHJlY3RhbmdsZSBvYmplY3RcbiAqXG4gKiBAcGFyYW0gW21hdHJpeF0ge1BJWEkuTWF0cml4fSBUaGUgd29ybGQgdHJhbnNmb3JtIG1hdHJpeCB0byB1c2UsIGRlZmF1bHRzIHRvIHRoaXNcbiAqICBvYmplY3QncyB3b3JsZFRyYW5zZm9ybS5cbiAqIEByZXR1cm4ge1BJWEkuUmVjdGFuZ2xlfSB0aGUgcmVjdGFuZ3VsYXIgYm91bmRpbmcgYXJlYVxuICovXG5HcmFwaGljcy5wcm90b3R5cGUuZ2V0Qm91bmRzID0gZnVuY3Rpb24gKG1hdHJpeClcbntcbiAgICBpZighdGhpcy5fY3VycmVudEJvdW5kcylcbiAgICB7XG5cbiAgICAgICAgLy8gcmV0dXJuIGFuIGVtcHR5IG9iamVjdCBpZiB0aGUgaXRlbSBpcyBhIG1hc2shXG4gICAgICAgIGlmICghdGhpcy5yZW5kZXJhYmxlKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gbWF0aC5SZWN0YW5nbGUuRU1QVFk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5ib3VuZHNEaXJ0eSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51cGRhdGVMb2NhbEJvdW5kcygpO1xuXG4gICAgICAgICAgICB0aGlzLmdsRGlydHkgPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy5jYWNoZWRTcHJpdGVEaXJ0eSA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLmJvdW5kc0RpcnR5ID0gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgYm91bmRzID0gdGhpcy5fbG9jYWxCb3VuZHM7XG5cbiAgICAgICAgdmFyIHcwID0gYm91bmRzLng7XG4gICAgICAgIHZhciB3MSA9IGJvdW5kcy53aWR0aCArIGJvdW5kcy54O1xuXG4gICAgICAgIHZhciBoMCA9IGJvdW5kcy55O1xuICAgICAgICB2YXIgaDEgPSBib3VuZHMuaGVpZ2h0ICsgYm91bmRzLnk7XG5cbiAgICAgICAgdmFyIHdvcmxkVHJhbnNmb3JtID0gbWF0cml4IHx8IHRoaXMud29ybGRUcmFuc2Zvcm07XG5cbiAgICAgICAgdmFyIGEgPSB3b3JsZFRyYW5zZm9ybS5hO1xuICAgICAgICB2YXIgYiA9IHdvcmxkVHJhbnNmb3JtLmI7XG4gICAgICAgIHZhciBjID0gd29ybGRUcmFuc2Zvcm0uYztcbiAgICAgICAgdmFyIGQgPSB3b3JsZFRyYW5zZm9ybS5kO1xuICAgICAgICB2YXIgdHggPSB3b3JsZFRyYW5zZm9ybS50eDtcbiAgICAgICAgdmFyIHR5ID0gd29ybGRUcmFuc2Zvcm0udHk7XG5cbiAgICAgICAgdmFyIHgxID0gYSAqIHcxICsgYyAqIGgxICsgdHg7XG4gICAgICAgIHZhciB5MSA9IGQgKiBoMSArIGIgKiB3MSArIHR5O1xuXG4gICAgICAgIHZhciB4MiA9IGEgKiB3MCArIGMgKiBoMSArIHR4O1xuICAgICAgICB2YXIgeTIgPSBkICogaDEgKyBiICogdzAgKyB0eTtcblxuICAgICAgICB2YXIgeDMgPSBhICogdzAgKyBjICogaDAgKyB0eDtcbiAgICAgICAgdmFyIHkzID0gZCAqIGgwICsgYiAqIHcwICsgdHk7XG5cbiAgICAgICAgdmFyIHg0ID0gIGEgKiB3MSArIGMgKiBoMCArIHR4O1xuICAgICAgICB2YXIgeTQgPSAgZCAqIGgwICsgYiAqIHcxICsgdHk7XG5cbiAgICAgICAgdmFyIG1heFggPSB4MTtcbiAgICAgICAgdmFyIG1heFkgPSB5MTtcblxuICAgICAgICB2YXIgbWluWCA9IHgxO1xuICAgICAgICB2YXIgbWluWSA9IHkxO1xuXG4gICAgICAgIG1pblggPSB4MiA8IG1pblggPyB4MiA6IG1pblg7XG4gICAgICAgIG1pblggPSB4MyA8IG1pblggPyB4MyA6IG1pblg7XG4gICAgICAgIG1pblggPSB4NCA8IG1pblggPyB4NCA6IG1pblg7XG5cbiAgICAgICAgbWluWSA9IHkyIDwgbWluWSA/IHkyIDogbWluWTtcbiAgICAgICAgbWluWSA9IHkzIDwgbWluWSA/IHkzIDogbWluWTtcbiAgICAgICAgbWluWSA9IHk0IDwgbWluWSA/IHk0IDogbWluWTtcblxuICAgICAgICBtYXhYID0geDIgPiBtYXhYID8geDIgOiBtYXhYO1xuICAgICAgICBtYXhYID0geDMgPiBtYXhYID8geDMgOiBtYXhYO1xuICAgICAgICBtYXhYID0geDQgPiBtYXhYID8geDQgOiBtYXhYO1xuXG4gICAgICAgIG1heFkgPSB5MiA+IG1heFkgPyB5MiA6IG1heFk7XG4gICAgICAgIG1heFkgPSB5MyA+IG1heFkgPyB5MyA6IG1heFk7XG4gICAgICAgIG1heFkgPSB5NCA+IG1heFkgPyB5NCA6IG1heFk7XG5cbiAgICAgICAgdGhpcy5fYm91bmRzLnggPSBtaW5YO1xuICAgICAgICB0aGlzLl9ib3VuZHMud2lkdGggPSBtYXhYIC0gbWluWDtcblxuICAgICAgICB0aGlzLl9ib3VuZHMueSA9IG1pblk7XG4gICAgICAgIHRoaXMuX2JvdW5kcy5oZWlnaHQgPSBtYXhZIC0gbWluWTtcblxuICAgICAgICB0aGlzLl9jdXJyZW50Qm91bmRzID0gdGhpcy5fYm91bmRzO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLl9jdXJyZW50Qm91bmRzO1xufTtcblxuLyoqXG4qIFRlc3RzIGlmIGEgcG9pbnQgaXMgaW5zaWRlIHRoaXMgZ3JhcGhpY3Mgb2JqZWN0XG4qXG4qIEBwYXJhbSBwb2ludCB7UElYSS5Qb2ludH0gdGhlIHBvaW50IHRvIHRlc3RcbiogQHJldHVybiB7Ym9vbGVhbn0gdGhlIHJlc3VsdCBvZiB0aGUgdGVzdFxuKi9cbkdyYXBoaWNzLnByb3RvdHlwZS5jb250YWluc1BvaW50ID0gZnVuY3Rpb24oIHBvaW50IClcbntcbiAgICB0aGlzLndvcmxkVHJhbnNmb3JtLmFwcGx5SW52ZXJzZShwb2ludCwgIHRlbXBQb2ludCk7XG5cbiAgICB2YXIgZ3JhcGhpY3NEYXRhID0gdGhpcy5ncmFwaGljc0RhdGE7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGdyYXBoaWNzRGF0YS5sZW5ndGg7IGkrKylcbiAgICB7XG4gICAgICAgIHZhciBkYXRhID0gZ3JhcGhpY3NEYXRhW2ldO1xuXG4gICAgICAgIGlmICghZGF0YS5maWxsKVxuICAgICAgICB7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIG9ubHkgZGVhbCB3aXRoIGZpbGxzLi5cbiAgICAgICAgaWYgKGRhdGEuc2hhcGUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGlmICggZGF0YS5zaGFwZS5jb250YWlucyggdGVtcFBvaW50LngsIHRlbXBQb2ludC55ICkgKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xufTtcblxuLyoqXG4gKiBVcGRhdGUgdGhlIGJvdW5kcyBvZiB0aGUgb2JqZWN0XG4gKlxuICovXG5HcmFwaGljcy5wcm90b3R5cGUudXBkYXRlTG9jYWxCb3VuZHMgPSBmdW5jdGlvbiAoKVxue1xuICAgIHZhciBtaW5YID0gSW5maW5pdHk7XG4gICAgdmFyIG1heFggPSAtSW5maW5pdHk7XG5cbiAgICB2YXIgbWluWSA9IEluZmluaXR5O1xuICAgIHZhciBtYXhZID0gLUluZmluaXR5O1xuXG4gICAgaWYgKHRoaXMuZ3JhcGhpY3NEYXRhLmxlbmd0aClcbiAgICB7XG4gICAgICAgIHZhciBzaGFwZSwgcG9pbnRzLCB4LCB5LCB3LCBoO1xuXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5ncmFwaGljc0RhdGEubGVuZ3RoOyBpKyspXG4gICAgICAgIHtcbiAgICAgICAgICAgIHZhciBkYXRhID0gdGhpcy5ncmFwaGljc0RhdGFbaV07XG4gICAgICAgICAgICB2YXIgdHlwZSA9IGRhdGEudHlwZTtcbiAgICAgICAgICAgIHZhciBsaW5lV2lkdGggPSBkYXRhLmxpbmVXaWR0aDtcbiAgICAgICAgICAgIHNoYXBlID0gZGF0YS5zaGFwZTtcblxuICAgICAgICAgICAgaWYgKHR5cGUgPT09IENPTlNULlNIQVBFUy5SRUNUIHx8IHR5cGUgPT09IENPTlNULlNIQVBFUy5SUkVDKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHggPSBzaGFwZS54IC0gbGluZVdpZHRoLzI7XG4gICAgICAgICAgICAgICAgeSA9IHNoYXBlLnkgLSBsaW5lV2lkdGgvMjtcbiAgICAgICAgICAgICAgICB3ID0gc2hhcGUud2lkdGggKyBsaW5lV2lkdGg7XG4gICAgICAgICAgICAgICAgaCA9IHNoYXBlLmhlaWdodCArIGxpbmVXaWR0aDtcblxuICAgICAgICAgICAgICAgIG1pblggPSB4IDwgbWluWCA/IHggOiBtaW5YO1xuICAgICAgICAgICAgICAgIG1heFggPSB4ICsgdyA+IG1heFggPyB4ICsgdyA6IG1heFg7XG5cbiAgICAgICAgICAgICAgICBtaW5ZID0geSA8IG1pblkgPyB5IDogbWluWTtcbiAgICAgICAgICAgICAgICBtYXhZID0geSArIGggPiBtYXhZID8geSArIGggOiBtYXhZO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAodHlwZSA9PT0gQ09OU1QuU0hBUEVTLkNJUkMpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgeCA9IHNoYXBlLng7XG4gICAgICAgICAgICAgICAgeSA9IHNoYXBlLnk7XG4gICAgICAgICAgICAgICAgdyA9IHNoYXBlLnJhZGl1cyArIGxpbmVXaWR0aC8yO1xuICAgICAgICAgICAgICAgIGggPSBzaGFwZS5yYWRpdXMgKyBsaW5lV2lkdGgvMjtcblxuICAgICAgICAgICAgICAgIG1pblggPSB4IC0gdyA8IG1pblggPyB4IC0gdyA6IG1pblg7XG4gICAgICAgICAgICAgICAgbWF4WCA9IHggKyB3ID4gbWF4WCA/IHggKyB3IDogbWF4WDtcblxuICAgICAgICAgICAgICAgIG1pblkgPSB5IC0gaCA8IG1pblkgPyB5IC0gaCA6IG1pblk7XG4gICAgICAgICAgICAgICAgbWF4WSA9IHkgKyBoID4gbWF4WSA/IHkgKyBoIDogbWF4WTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKHR5cGUgPT09IENPTlNULlNIQVBFUy5FTElQKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHggPSBzaGFwZS54O1xuICAgICAgICAgICAgICAgIHkgPSBzaGFwZS55O1xuICAgICAgICAgICAgICAgIHcgPSBzaGFwZS53aWR0aCArIGxpbmVXaWR0aC8yO1xuICAgICAgICAgICAgICAgIGggPSBzaGFwZS5oZWlnaHQgKyBsaW5lV2lkdGgvMjtcblxuICAgICAgICAgICAgICAgIG1pblggPSB4IC0gdyA8IG1pblggPyB4IC0gdyA6IG1pblg7XG4gICAgICAgICAgICAgICAgbWF4WCA9IHggKyB3ID4gbWF4WCA/IHggKyB3IDogbWF4WDtcblxuICAgICAgICAgICAgICAgIG1pblkgPSB5IC0gaCA8IG1pblkgPyB5IC0gaCA6IG1pblk7XG4gICAgICAgICAgICAgICAgbWF4WSA9IHkgKyBoID4gbWF4WSA/IHkgKyBoIDogbWF4WTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAvLyBQT0xZXG4gICAgICAgICAgICAgICAgcG9pbnRzID0gc2hhcGUucG9pbnRzO1xuXG4gICAgICAgICAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBwb2ludHMubGVuZ3RoOyBqICs9IDIpXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICB4ID0gcG9pbnRzW2pdO1xuICAgICAgICAgICAgICAgICAgICB5ID0gcG9pbnRzW2orMV07XG5cbiAgICAgICAgICAgICAgICAgICAgbWluWCA9IHgtbGluZVdpZHRoIDwgbWluWCA/IHgtbGluZVdpZHRoIDogbWluWDtcbiAgICAgICAgICAgICAgICAgICAgbWF4WCA9IHgrbGluZVdpZHRoID4gbWF4WCA/IHgrbGluZVdpZHRoIDogbWF4WDtcblxuICAgICAgICAgICAgICAgICAgICBtaW5ZID0geS1saW5lV2lkdGggPCBtaW5ZID8geS1saW5lV2lkdGggOiBtaW5ZO1xuICAgICAgICAgICAgICAgICAgICBtYXhZID0geStsaW5lV2lkdGggPiBtYXhZID8geStsaW5lV2lkdGggOiBtYXhZO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICBtaW5YID0gMDtcbiAgICAgICAgbWF4WCA9IDA7XG4gICAgICAgIG1pblkgPSAwO1xuICAgICAgICBtYXhZID0gMDtcbiAgICB9XG5cbiAgICB2YXIgcGFkZGluZyA9IHRoaXMuYm91bmRzUGFkZGluZztcblxuICAgIHRoaXMuX2xvY2FsQm91bmRzLnggPSBtaW5YIC0gcGFkZGluZztcbiAgICB0aGlzLl9sb2NhbEJvdW5kcy53aWR0aCA9IChtYXhYIC0gbWluWCkgKyBwYWRkaW5nICogMjtcblxuICAgIHRoaXMuX2xvY2FsQm91bmRzLnkgPSBtaW5ZIC0gcGFkZGluZztcbiAgICB0aGlzLl9sb2NhbEJvdW5kcy5oZWlnaHQgPSAobWF4WSAtIG1pblkpICsgcGFkZGluZyAqIDI7XG59O1xuXG4vKipcbiAqIEdlbmVyYXRlcyB0aGUgY2FjaGVkIHNwcml0ZSB3aGVuIHRoZSBzcHJpdGUgaGFzIGNhY2hlQXNCaXRtYXAgPSB0cnVlXG4gKlxuICogQHByaXZhdGVcbiAqL1xuLypcbkdyYXBoaWNzLnByb3RvdHlwZS5fZ2VuZXJhdGVDYWNoZWRTcHJpdGUgPSBmdW5jdGlvbiAoKVxue1xuICAgIHZhciBib3VuZHMgPSB0aGlzLmdldExvY2FsQm91bmRzKCk7XG5cbiAgICBpZiAoIXRoaXMuX2NhY2hlZFNwcml0ZSlcbiAgICB7XG4gICAgICAgIHZhciBjYW52YXNCdWZmZXIgPSBuZXcgQ2FudmFzQnVmZmVyKGJvdW5kcy53aWR0aCwgYm91bmRzLmhlaWdodCk7XG4gICAgICAgIHZhciB0ZXh0dXJlID0gVGV4dHVyZS5mcm9tQ2FudmFzKGNhbnZhc0J1ZmZlci5jYW52YXMpO1xuXG4gICAgICAgIHRoaXMuX2NhY2hlZFNwcml0ZSA9IG5ldyBTcHJpdGUodGV4dHVyZSk7XG4gICAgICAgIHRoaXMuX2NhY2hlZFNwcml0ZS5idWZmZXIgPSBjYW52YXNCdWZmZXI7XG5cbiAgICAgICAgdGhpcy5fY2FjaGVkU3ByaXRlLndvcmxkVHJhbnNmb3JtID0gdGhpcy53b3JsZFRyYW5zZm9ybTtcbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgdGhpcy5fY2FjaGVkU3ByaXRlLmJ1ZmZlci5yZXNpemUoYm91bmRzLndpZHRoLCBib3VuZHMuaGVpZ2h0KTtcbiAgICB9XG5cbiAgICAvLyBsZXZlcmFnZSB0aGUgYW5jaG9yIHRvIGFjY291bnQgZm9yIHRoZSBvZmZzZXQgb2YgdGhlIGVsZW1lbnRcbiAgICB0aGlzLl9jYWNoZWRTcHJpdGUuYW5jaG9yLnggPSAtKCBib3VuZHMueCAvIGJvdW5kcy53aWR0aCApO1xuICAgIHRoaXMuX2NhY2hlZFNwcml0ZS5hbmNob3IueSA9IC0oIGJvdW5kcy55IC8gYm91bmRzLmhlaWdodCApO1xuXG4gICAgLy8gdGhpcy5fY2FjaGVkU3ByaXRlLmJ1ZmZlci5jb250ZXh0LnNhdmUoKTtcbiAgICB0aGlzLl9jYWNoZWRTcHJpdGUuYnVmZmVyLmNvbnRleHQudHJhbnNsYXRlKC1ib3VuZHMueCwtYm91bmRzLnkpO1xuXG4gICAgLy8gbWFrZSBzdXJlIHdlIHNldCB0aGUgYWxwaGEgb2YgdGhlIGdyYXBoaWNzIHRvIDEgZm9yIHRoZSByZW5kZXIuLlxuICAgIHRoaXMud29ybGRBbHBoYSA9IDE7XG5cbiAgICAvLyBub3cgcmVuZGVyIHRoZSBncmFwaGljLi5cbiAgICBDYW52YXNHcmFwaGljcy5yZW5kZXJHcmFwaGljcyh0aGlzLCB0aGlzLl9jYWNoZWRTcHJpdGUuYnVmZmVyLmNvbnRleHQpO1xuXG4gICAgdGhpcy5fY2FjaGVkU3ByaXRlLmFscGhhID0gdGhpcy5hbHBoYTtcbn07XG4qL1xuLyoqXG4gKiBVcGRhdGVzIHRleHR1cmUgc2l6ZSBiYXNlZCBvbiBjYW52YXMgc2l6ZVxuICpcbiAqIEBwcml2YXRlXG4gKi9cbi8qXG5HcmFwaGljcy5wcm90b3R5cGUudXBkYXRlQ2FjaGVkU3ByaXRlVGV4dHVyZSA9IGZ1bmN0aW9uICgpXG57XG4gICAgdmFyIGNhY2hlZFNwcml0ZSA9IHRoaXMuX2NhY2hlZFNwcml0ZTtcbiAgICB2YXIgdGV4dHVyZSA9IGNhY2hlZFNwcml0ZS50ZXh0dXJlO1xuICAgIHZhciBjYW52YXMgPSBjYWNoZWRTcHJpdGUuYnVmZmVyLmNhbnZhcztcblxuICAgIHRleHR1cmUuYmFzZVRleHR1cmUud2lkdGggPSBjYW52YXMud2lkdGg7XG4gICAgdGV4dHVyZS5iYXNlVGV4dHVyZS5oZWlnaHQgPSBjYW52YXMuaGVpZ2h0O1xuICAgIHRleHR1cmUuY3JvcC53aWR0aCA9IHRleHR1cmUuZnJhbWUud2lkdGggPSBjYW52YXMud2lkdGg7XG4gICAgdGV4dHVyZS5jcm9wLmhlaWdodCA9IHRleHR1cmUuZnJhbWUuaGVpZ2h0ID0gY2FudmFzLmhlaWdodDtcblxuICAgIGNhY2hlZFNwcml0ZS5fd2lkdGggPSBjYW52YXMud2lkdGg7XG4gICAgY2FjaGVkU3ByaXRlLl9oZWlnaHQgPSBjYW52YXMuaGVpZ2h0O1xuXG4gICAgLy8gdXBkYXRlIHRoZSBkaXJ0eSBiYXNlIHRleHR1cmVzXG4gICAgdGV4dHVyZS5iYXNlVGV4dHVyZS5kaXJ0eSgpO1xufTsqL1xuXG4vKipcbiAqIERlc3Ryb3lzIGEgcHJldmlvdXMgY2FjaGVkIHNwcml0ZS5cbiAqXG4gKi9cbi8qXG5HcmFwaGljcy5wcm90b3R5cGUuZGVzdHJveUNhY2hlZFNwcml0ZSA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy5fY2FjaGVkU3ByaXRlLnRleHR1cmUuZGVzdHJveSh0cnVlKTtcblxuICAgIC8vIGxldCB0aGUgZ2MgY29sbGVjdCB0aGUgdW51c2VkIHNwcml0ZVxuICAgIC8vIFRPRE8gY291bGQgYmUgb2JqZWN0IHBvb2xlZCFcbiAgICB0aGlzLl9jYWNoZWRTcHJpdGUgPSBudWxsO1xufTsqL1xuXG4vKipcbiAqIERyYXdzIHRoZSBnaXZlbiBzaGFwZSB0byB0aGlzIEdyYXBoaWNzIG9iamVjdC4gQ2FuIGJlIGFueSBvZiBDaXJjbGUsIFJlY3RhbmdsZSwgRWxsaXBzZSwgTGluZSBvciBQb2x5Z29uLlxuICpcbiAqIEBwYXJhbSBzaGFwZSB7UElYSS5DaXJjbGV8UElYSS5SZWN0YW5nbGV8UElYSS5FbGxpcHNlfFBJWEkuTGluZXxQSVhJLlBvbHlnb259IFRoZSBzaGFwZSBvYmplY3QgdG8gZHJhdy5cbiAqIEByZXR1cm4ge1BJWEkuR3JhcGhpY3NEYXRhfSBUaGUgZ2VuZXJhdGVkIEdyYXBoaWNzRGF0YSBvYmplY3QuXG4gKi9cbkdyYXBoaWNzLnByb3RvdHlwZS5kcmF3U2hhcGUgPSBmdW5jdGlvbiAoc2hhcGUpXG57XG4gICAgaWYgKHRoaXMuY3VycmVudFBhdGgpXG4gICAge1xuICAgICAgICAvLyBjaGVjayBjdXJyZW50IHBhdGghXG4gICAgICAgIGlmICh0aGlzLmN1cnJlbnRQYXRoLnNoYXBlLnBvaW50cy5sZW5ndGggPD0gMilcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5ncmFwaGljc0RhdGEucG9wKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLmN1cnJlbnRQYXRoID0gbnVsbDtcblxuICAgIHZhciBkYXRhID0gbmV3IEdyYXBoaWNzRGF0YSh0aGlzLmxpbmVXaWR0aCwgdGhpcy5saW5lQ29sb3IsIHRoaXMubGluZUFscGhhLCB0aGlzLmZpbGxDb2xvciwgdGhpcy5maWxsQWxwaGEsIHRoaXMuZmlsbGluZywgc2hhcGUpO1xuXG4gICAgdGhpcy5ncmFwaGljc0RhdGEucHVzaChkYXRhKTtcblxuICAgIGlmIChkYXRhLnR5cGUgPT09IENPTlNULlNIQVBFUy5QT0xZKVxuICAgIHtcbiAgICAgICAgZGF0YS5zaGFwZS5jbG9zZWQgPSBkYXRhLnNoYXBlLmNsb3NlZCB8fCB0aGlzLmZpbGxpbmc7XG4gICAgICAgIHRoaXMuY3VycmVudFBhdGggPSBkYXRhO1xuICAgIH1cblxuICAgIHRoaXMuZGlydHkgPSB0aGlzLmJvdW5kc0RpcnR5ID0gdHJ1ZTtcblxuICAgIHJldHVybiBkYXRhO1xufTtcblxuLyoqXG4gKiBEZXN0cm95cyB0aGUgR3JhcGhpY3Mgb2JqZWN0LlxuICovXG5HcmFwaGljcy5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uICgpIHtcbiAgICBDb250YWluZXIucHJvdG90eXBlLmRlc3Ryb3kuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcblxuICAgIC8vIGRlc3Ryb3kgZWFjaCBvZiB0aGUgR3JhcGhpY3NEYXRhIG9iamVjdHNcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuZ3JhcGhpY3NEYXRhLmxlbmd0aDsgKytpKSB7XG4gICAgICAgIHRoaXMuZ3JhcGhpY3NEYXRhW2ldLmRlc3Ryb3koKTtcbiAgICB9XG5cbiAgICAvLyBmb3IgZWFjaCB3ZWJnbCBkYXRhIGVudHJ5LCBkZXN0cm95IHRoZSBXZWJHTEdyYXBoaWNzRGF0YVxuICAgIGZvciAodmFyIGlkIGluIHRoaXMuX3dlYmdsKSB7XG4gICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgdGhpcy5fd2ViZ2xbaWRdLmRhdGEubGVuZ3RoOyArK2opIHtcbiAgICAgICAgICAgIHRoaXMuX3dlYmdsW2lkXS5kYXRhW2pdLmRlc3Ryb3koKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMuZ3JhcGhpY3NEYXRhID0gbnVsbDtcblxuICAgIHRoaXMuY3VycmVudFBhdGggPSBudWxsO1xuICAgIHRoaXMuX3dlYmdsID0gbnVsbDtcbiAgICB0aGlzLl9sb2NhbEJvdW5kcyA9IG51bGw7XG59O1xuIiwiLyoqXG4gKiBBIEdyYXBoaWNzRGF0YSBvYmplY3QuXG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIGxpbmVXaWR0aCB7bnVtYmVyfSB0aGUgd2lkdGggb2YgdGhlIGxpbmUgdG8gZHJhd1xuICogQHBhcmFtIGxpbmVDb2xvciB7bnVtYmVyfSB0aGUgY29sb3Igb2YgdGhlIGxpbmUgdG8gZHJhd1xuICogQHBhcmFtIGxpbmVBbHBoYSB7bnVtYmVyfSB0aGUgYWxwaGEgb2YgdGhlIGxpbmUgdG8gZHJhd1xuICogQHBhcmFtIGZpbGxDb2xvciB7bnVtYmVyfSB0aGUgY29sb3Igb2YgdGhlIGZpbGxcbiAqIEBwYXJhbSBmaWxsQWxwaGEge251bWJlcn0gdGhlIGFscGhhIG9mIHRoZSBmaWxsXG4gKiBAcGFyYW0gZmlsbCAgICAgIHtib29sZWFufSB3aGV0aGVyIG9yIG5vdCB0aGUgc2hhcGUgaXMgZmlsbGVkIHdpdGggYSBjb2xvdXJcbiAqIEBwYXJhbSBzaGFwZSAgICAge0NpcmNsZXxSZWN0YW5nbGV8RWxsaXBzZXxMaW5lfFBvbHlnb259IFRoZSBzaGFwZSBvYmplY3QgdG8gZHJhdy5cbiAqL1xuZnVuY3Rpb24gR3JhcGhpY3NEYXRhKGxpbmVXaWR0aCwgbGluZUNvbG9yLCBsaW5lQWxwaGEsIGZpbGxDb2xvciwgZmlsbEFscGhhLCBmaWxsLCBzaGFwZSlcbntcbiAgICAvKlxuICAgICAqIEBtZW1iZXIge251bWJlcn0gdGhlIHdpZHRoIG9mIHRoZSBsaW5lIHRvIGRyYXdcbiAgICAgKi9cbiAgICB0aGlzLmxpbmVXaWR0aCA9IGxpbmVXaWR0aDtcblxuICAgIC8qXG4gICAgICogQG1lbWJlciB7bnVtYmVyfSB0aGUgY29sb3Igb2YgdGhlIGxpbmUgdG8gZHJhd1xuICAgICAqL1xuICAgIHRoaXMubGluZUNvbG9yID0gbGluZUNvbG9yO1xuICAgIC8qXG4gICAgICogQG1lbWJlciB7bnVtYmVyfSB0aGUgYWxwaGEgb2YgdGhlIGxpbmUgdG8gZHJhd1xuICAgICAqL1xuICAgIHRoaXMubGluZUFscGhhID0gbGluZUFscGhhO1xuICAgIC8qXG4gICAgICogQG1lbWJlciB7bnVtYmVyfSBjYWNoZWQgdGludCBvZiB0aGUgbGluZSB0byBkcmF3XG4gICAgICovXG4gICAgdGhpcy5fbGluZVRpbnQgPSBsaW5lQ29sb3I7XG5cbiAgICAvKlxuICAgICAqIEBtZW1iZXIge251bWJlcn0gdGhlIGNvbG9yIG9mIHRoZSBmaWxsXG4gICAgICovXG4gICAgdGhpcy5maWxsQ29sb3IgPSBmaWxsQ29sb3I7XG5cbiAgICAvKlxuICAgICAqIEBtZW1iZXIge251bWJlcn0gdGhlIGFscGhhIG9mIHRoZSBmaWxsXG4gICAgICovXG4gICAgdGhpcy5maWxsQWxwaGEgPSBmaWxsQWxwaGE7XG5cbiAgICAvKlxuICAgICAqIEBtZW1iZXIge251bWJlcn0gY2FjaGVkIHRpbnQgb2YgdGhlIGZpbGxcbiAgICAgKi9cbiAgICB0aGlzLl9maWxsVGludCA9IGZpbGxDb2xvcjtcblxuICAgIC8qXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn0gd2hldGhlciBvciBub3QgdGhlIHNoYXBlIGlzIGZpbGxlZCB3aXRoIGEgY29sb3VyXG4gICAgICovXG4gICAgdGhpcy5maWxsID0gZmlsbDtcblxuICAgIC8qXG4gICAgICogQG1lbWJlciB7UElYSS5DaXJjbGV8UElYSS5SZWN0YW5nbGV8UElYSS5FbGxpcHNlfFBJWEkuTGluZXxQSVhJLlBvbHlnb259IFRoZSBzaGFwZSBvYmplY3QgdG8gZHJhdy5cbiAgICAgKi9cbiAgICB0aGlzLnNoYXBlID0gc2hhcGU7XG5cbiAgICAvKlxuICAgICAqIEBtZW1iZXIge251bWJlcn0gVGhlIHR5cGUgb2YgdGhlIHNoYXBlLCBzZWUgdGhlIENvbnN0LlNoYXBlcyBmaWxlIGZvciBhbGwgdGhlIGV4aXN0aW5nIHR5cGVzLFxuICAgICAqL1xuICAgIHRoaXMudHlwZSA9IHNoYXBlLnR5cGU7XG59XG5cbkdyYXBoaWNzRGF0YS5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBHcmFwaGljc0RhdGE7XG5tb2R1bGUuZXhwb3J0cyA9IEdyYXBoaWNzRGF0YTtcblxuLyoqXG4gKiBDcmVhdGVzIGEgbmV3IEdyYXBoaWNzRGF0YSBvYmplY3Qgd2l0aCB0aGUgc2FtZSB2YWx1ZXMgYXMgdGhpcyBvbmUuXG4gKlxuICogQHJldHVybiB7UElYSS5HcmFwaGljc0RhdGF9XG4gKi9cbkdyYXBoaWNzRGF0YS5wcm90b3R5cGUuY2xvbmUgPSBmdW5jdGlvbiAoKVxue1xuICAgIHJldHVybiBuZXcgR3JhcGhpY3NEYXRhKFxuICAgICAgICB0aGlzLmxpbmVXaWR0aCxcbiAgICAgICAgdGhpcy5saW5lQ29sb3IsXG4gICAgICAgIHRoaXMubGluZUFscGhhLFxuICAgICAgICB0aGlzLmZpbGxDb2xvcixcbiAgICAgICAgdGhpcy5maWxsQWxwaGEsXG4gICAgICAgIHRoaXMuZmlsbCxcbiAgICAgICAgdGhpcy5zaGFwZVxuICAgICk7XG59O1xuXG4vKipcbiAqIERlc3Ryb3lzIHRoZSBHcmFwaGljcyBkYXRhLlxuICovXG5HcmFwaGljc0RhdGEucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoKSB7XG4gICAgdGhpcy5zaGFwZSA9IG51bGw7XG59O1xuIiwidmFyIHV0aWxzID0gcmVxdWlyZSgnLi4vLi4vdXRpbHMnKSxcbiAgICBtYXRoID0gcmVxdWlyZSgnLi4vLi4vbWF0aCcpLFxuICAgIENPTlNUID0gcmVxdWlyZSgnLi4vLi4vY29uc3QnKSxcbiAgICBPYmplY3RSZW5kZXJlciA9IHJlcXVpcmUoJy4uLy4uL3JlbmRlcmVycy93ZWJnbC91dGlscy9PYmplY3RSZW5kZXJlcicpLFxuICAgIFdlYkdMUmVuZGVyZXIgPSByZXF1aXJlKCcuLi8uLi9yZW5kZXJlcnMvd2ViZ2wvV2ViR0xSZW5kZXJlcicpLFxuICAgIFdlYkdMR3JhcGhpY3NEYXRhID0gcmVxdWlyZSgnLi9XZWJHTEdyYXBoaWNzRGF0YScpLFxuICAgIFByaW1pdGl2ZVNoYWRlciA9IHJlcXVpcmUoJy4vc2hhZGVycy9QcmltaXRpdmVTaGFkZXInKSxcblxuICAgIC8vIHNvbWUgZHJhd2luZyBmdW5jdGlvbnMuLlxuICAgIGJ1aWxkTGluZSA9IHJlcXVpcmUoJy4vdXRpbHMvYnVpbGRMaW5lJyk7XG4gICAgYnVpbGRQb2x5ID0gcmVxdWlyZSgnLi91dGlscy9idWlsZFBvbHknKTtcbiAgICBidWlsZENvbXBsZXhQb2x5ID0gcmVxdWlyZSgnLi91dGlscy9idWlsZENvbXBsZXhQb2x5Jyk7XG4gICAgYnVpbGRSZWN0YW5nbGUgPSByZXF1aXJlKCcuL3V0aWxzL2J1aWxkUmVjdGFuZ2xlJyk7XG4gICAgYnVpbGRSb3VuZGVkUmVjdGFuZ2xlID0gcmVxdWlyZSgnLi91dGlscy9idWlsZFJvdW5kZWRSZWN0YW5nbGUnKTtcbiAgICBidWlsZENpcmNsZSA9IHJlcXVpcmUoJy4vdXRpbHMvYnVpbGRDaXJjbGUnKTtcblxuICAgIGVhcmN1dCA9IHJlcXVpcmUoJ2VhcmN1dCcpO1xuXG4vKipcbiAqIFJlbmRlcnMgdGhlIGdyYXBoaWNzIG9iamVjdC5cbiAqXG4gKiBAY2xhc3NcbiAqIEBwcml2YXRlXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQGV4dGVuZHMgUElYSS5PYmplY3RSZW5kZXJlclxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLldlYkdMUmVuZGVyZXJ9IFRoZSByZW5kZXJlciB0aGlzIG9iamVjdCByZW5kZXJlciB3b3JrcyBmb3IuXG4gKi9cbmZ1bmN0aW9uIEdyYXBoaWNzUmVuZGVyZXIocmVuZGVyZXIpXG57XG4gICAgT2JqZWN0UmVuZGVyZXIuY2FsbCh0aGlzLCByZW5kZXJlcik7XG5cbiAgICB0aGlzLmdyYXBoaWNzRGF0YVBvb2wgPSBbXTtcblxuICAgIHRoaXMucHJpbWl0aXZlU2hhZGVyID0gbnVsbDtcbiAgICB0aGlzLmNvbXBsZXhQcmltaXRpdmVTaGFkZXIgPSBudWxsO1xuXG4gICAgdGhpcy5nbCA9IHJlbmRlcmVyLmdsO1xuXG4gICAgLyoqXG4gICAgICogVGhpcyBpcyB0aGUgbWF4aW11bSBudW1iZXIgb2YgcG9pbnRzIGEgcG9seSBjYW4gY29udGFpbiBiZWZvcmUgaXQgaXMgcmVuZGVyZWQgYXMgYSBjb21wbGV4IHBvbHlnb24gKHVzaW5nIHRoZSBzdGVuY2lsIGJ1ZmZlcilcbiAgICAgKiBAdHlwZSB7TnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMubWF4aW11bVNpbXBsZVBvbHlTaXplID0gMjAwO1xufVxuXG5HcmFwaGljc1JlbmRlcmVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoT2JqZWN0UmVuZGVyZXIucHJvdG90eXBlKTtcbkdyYXBoaWNzUmVuZGVyZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gR3JhcGhpY3NSZW5kZXJlcjtcbm1vZHVsZS5leHBvcnRzID0gR3JhcGhpY3NSZW5kZXJlcjtcblxuV2ViR0xSZW5kZXJlci5yZWdpc3RlclBsdWdpbignZ3JhcGhpY3MnLCBHcmFwaGljc1JlbmRlcmVyKTtcblxuLyoqXG4gKiBDYWxsZWQgd2hlbiB0aGVyZSBpcyBhIFdlYkdMIGNvbnRleHQgY2hhbmdlXG4gKlxuICogQHByaXZhdGVcbiAqXG4gKi9cbkdyYXBoaWNzUmVuZGVyZXIucHJvdG90eXBlLm9uQ29udGV4dENoYW5nZSA9IGZ1bmN0aW9uKClcbntcbiAgICB0aGlzLmdsID0gdGhpcy5yZW5kZXJlci5nbDtcbiAgICB0aGlzLnByaW1pdGl2ZVNoYWRlciA9IG5ldyBQcmltaXRpdmVTaGFkZXIodGhpcy5nbClcbn07XG5cbi8qKlxuICogRGVzdHJveXMgdGhpcyByZW5kZXJlci5cbiAqXG4gKi9cbkdyYXBoaWNzUmVuZGVyZXIucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoKSB7XG4gICAgT2JqZWN0UmVuZGVyZXIucHJvdG90eXBlLmRlc3Ryb3kuY2FsbCh0aGlzKTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5ncmFwaGljc0RhdGFQb29sLmxlbmd0aDsgKytpKSB7XG4gICAgICAgIHRoaXMuZ3JhcGhpY3NEYXRhUG9vbFtpXS5kZXN0cm95KCk7XG4gICAgfVxuXG4gICAgdGhpcy5ncmFwaGljc0RhdGFQb29sID0gbnVsbDtcbn07XG5cbi8qKlxuICogUmVuZGVycyBhIGdyYXBoaWNzIG9iamVjdC5cbiAqXG4gKiBAcGFyYW0gZ3JhcGhpY3Mge1BJWEkuR3JhcGhpY3N9IFRoZSBncmFwaGljcyBvYmplY3QgdG8gcmVuZGVyLlxuICovXG5HcmFwaGljc1JlbmRlcmVyLnByb3RvdHlwZS5yZW5kZXIgPSBmdW5jdGlvbihncmFwaGljcylcbntcbiAgICB2YXIgcmVuZGVyZXIgPSB0aGlzLnJlbmRlcmVyO1xuICAgIHZhciBnbCA9IHJlbmRlcmVyLmdsO1xuXG4gICAgdmFyIHdlYkdMRGF0YTtcbiAgLy8gIGNvbnNvbGUubG9nKGdyYXBoaWNzKVxuICAgIGlmIChncmFwaGljcy5kaXJ0eSB8fCAhZ3JhcGhpY3MuX3dlYkdMW2dsLmlkXSlcbiAgICB7XG4gICAgICAgIHRoaXMudXBkYXRlR3JhcGhpY3MoZ3JhcGhpY3MpO1xuICAgIH1cblxuICAgIHZhciB3ZWJHTCA9IGdyYXBoaWNzLl93ZWJHTFtnbC5pZF07XG5cbiAgICAvLyBUaGlzICBjb3VsZCBiZSBzcGVlZGVkIHVwIGZvciBzdXJlIVxuXG4gICAgcmVuZGVyZXIuYmxlbmRNb2RlTWFuYWdlci5zZXRCbGVuZE1vZGUoIGdyYXBoaWNzLmJsZW5kTW9kZSApO1xuXG4vLyAgICB2YXIgbWF0cml4ID0gIGdyYXBoaWNzLndvcmxkVHJhbnNmb3JtLmNsb25lKCk7XG4vLyAgICB2YXIgbWF0cml4ID0gIHJlbmRlcmVyLmN1cnJlbnRSZW5kZXJUYXJnZXQucHJvamVjdGlvbk1hdHJpeC5jbG9uZSgpO1xuLy8gICAgbWF0cml4LmFwcGVuZChncmFwaGljcy53b3JsZFRyYW5zZm9ybSk7XG5cbiAgICBmb3IgKHZhciBpID0gMCwgbiA9IHdlYkdMLmRhdGEubGVuZ3RoOyBpIDwgbjsgaSsrKVxuICAgIHtcbiAgICAgICAgd2ViR0xEYXRhID0gd2ViR0wuZGF0YVtpXTtcblxuICAgICAgICBpZiAod2ViR0wuZGF0YVtpXS5tb2RlID09PSAxKVxuICAgICAgICB7XG4gICAgICAgICAgICAvL1RPRE8gZml4IHRoaXMgb25lIVxuICAgICAgICAgICAgXG4gICAgICAgICAgICAvKlxuICAgICAgICAgICAgcmVuZGVyZXIuc3RlbmNpbE1hbmFnZXIucHVzaFN0ZW5jaWwoZ3JhcGhpY3MsIHdlYkdMRGF0YSk7XG5cbiAgICAgICAgICAgIGdsLnVuaWZvcm0xZihyZW5kZXJlci5zaGFkZXJNYW5hZ2VyLmNvbXBsZXhQcmltaXRpdmVTaGFkZXIudW5pZm9ybXMuYWxwaGEuX2xvY2F0aW9uLCBncmFwaGljcy53b3JsZEFscGhhICogd2ViR0xEYXRhLmFscGhhKTtcblxuICAgICAgICAgICAgLy8gcmVuZGVyIHF1YWQuLlxuICAgICAgICAgICAgZ2wuZHJhd0VsZW1lbnRzKGdsLlRSSUFOR0xFX0ZBTiwgNCwgZ2wuVU5TSUdORURfU0hPUlQsICggd2ViR0xEYXRhLmluZGljZXMubGVuZ3RoIC0gNCApICogMiApO1xuXG4gICAgICAgICAgICByZW5kZXJlci5zdGVuY2lsTWFuYWdlci5wb3BTdGVuY2lsKGdyYXBoaWNzLCB3ZWJHTERhdGEpO1xuICAgICAgICAgICAgKi9cbiAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgIHtcblxuICAgICAgICAgICAgc2hhZGVyID0gdGhpcy5wcmltaXRpdmVTaGFkZXI7XG5cbiAgICAgICAgICAgIHJlbmRlcmVyLmJpbmRTaGFkZXIoc2hhZGVyKVxuXG4gICAgICAgICAgICBzaGFkZXIudW5pZm9ybXMudHJhbnNsYXRpb25NYXRyaXggPSBncmFwaGljcy53b3JsZFRyYW5zZm9ybS50b0FycmF5KHRydWUpO1xuICAgICAgICAgICAgc2hhZGVyLnVuaWZvcm1zLnRpbnQgPSB1dGlscy5oZXgycmdiKGdyYXBoaWNzLnRpbnQpO1xuICAgICAgICAgICAgc2hhZGVyLnVuaWZvcm1zLmFscGhhID0gZ3JhcGhpY3Mud29ybGRBbHBoYTtcblxuXG4gICAgICAgICAgICBnbC5iaW5kQnVmZmVyKGdsLkFSUkFZX0JVRkZFUiwgd2ViR0xEYXRhLmJ1ZmZlcik7XG5cbiAgICAgICAgICAgIHNoYWRlciA9IHRoaXMucHJpbWl0aXZlU2hhZGVyO1xuXG4gICAgICAgICAgICBzaGFkZXIuYXR0cmlidXRlcy5hVmVydGV4UG9zaXRpb24ucG9pbnRlcihnbC5GTE9BVCwgZmFsc2UsIDQgKiA2LCAwKTtcbiAgICAgICAgICAgIHNoYWRlci5hdHRyaWJ1dGVzLmFDb2xvci5wb2ludGVyKGdsLkZMT0FULCBmYWxzZSwgNCAqIDYsIDIgKiA0KTtcblxuICAgICAgICAgICAgZ2wuZW5hYmxlVmVydGV4QXR0cmliQXJyYXkoc2hhZGVyLmF0dHJpYnV0ZXMuYVZlcnRleFBvc2l0aW9uLmxvY2F0aW9uKTtcbiAgICAgICAgICAgIGdsLmVuYWJsZVZlcnRleEF0dHJpYkFycmF5KHNoYWRlci5hdHRyaWJ1dGVzLmFDb2xvci5sb2NhdGlvbik7XG5cbiAgICAgICAgICAgIC8vIHNldCB0aGUgaW5kZXggYnVmZmVyIVxuICAgICAgICAgICAgZ2wuYmluZEJ1ZmZlcihnbC5FTEVNRU5UX0FSUkFZX0JVRkZFUiwgd2ViR0xEYXRhLmluZGV4QnVmZmVyKTtcbiAgICAgICAgICAgIGdsLmRyYXdFbGVtZW50cyhnbC5UUklBTkdMRV9TVFJJUCwgIHdlYkdMRGF0YS5pbmRpY2VzLmxlbmd0aCwgZ2wuVU5TSUdORURfU0hPUlQsIDAgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJlbmRlcmVyLmRyYXdDb3VudCsrO1xuICAgIH1cbn07XG5cbi8qKlxuICogVXBkYXRlcyB0aGUgZ3JhcGhpY3Mgb2JqZWN0XG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSBncmFwaGljcyB7UElYSS5HcmFwaGljc30gVGhlIGdyYXBoaWNzIG9iamVjdCB0byB1cGRhdGVcbiAqL1xuR3JhcGhpY3NSZW5kZXJlci5wcm90b3R5cGUudXBkYXRlR3JhcGhpY3MgPSBmdW5jdGlvbihncmFwaGljcylcbntcbiAgICB2YXIgZ2wgPSB0aGlzLnJlbmRlcmVyLmdsO1xuXG4gICAgIC8vIGdldCB0aGUgY29udGV4dHMgZ3JhcGhpY3Mgb2JqZWN0XG4gICAgdmFyIHdlYkdMID0gZ3JhcGhpY3MuX3dlYkdMW2dsLmlkXTtcblxuICAgIC8vIGlmIHRoZSBncmFwaGljcyBvYmplY3QgZG9lcyBub3QgZXhpc3QgaW4gdGhlIHdlYkdMIGNvbnRleHQgdGltZSB0byBjcmVhdGUgaXQhXG4gICAgaWYgKCF3ZWJHTClcbiAgICB7XG4gICAgICAgIHdlYkdMID0gZ3JhcGhpY3MuX3dlYkdMW2dsLmlkXSA9IHtsYXN0SW5kZXg6MCwgZGF0YTpbXSwgZ2w6Z2x9O1xuICAgIH1cblxuICAgXG4gICAgLy8gZmxhZyB0aGUgZ3JhcGhpY3MgYXMgbm90IGRpcnR5IGFzIHdlIGFyZSBhYm91dCB0byB1cGRhdGUgaXQuLi5cbiAgICBncmFwaGljcy5kaXJ0eSA9IGZhbHNlO1xuXG4gICAgdmFyIGk7XG5cbiAgICAvLyBpZiB0aGUgdXNlciBjbGVhcmVkIHRoZSBncmFwaGljcyBvYmplY3Qgd2Ugd2lsbCBuZWVkIHRvIGNsZWFyIGV2ZXJ5IG9iamVjdFxuICAgIGlmIChncmFwaGljcy5jbGVhckRpcnR5KVxuICAgIHtcbiAgICAgICAgZ3JhcGhpY3MuY2xlYXJEaXJ0eSA9IGZhbHNlO1xuXG4gICAgICAgIC8vIGxvb3AgdGhyb3VnaCBhbmQgcmV0dXJuIGFsbCB0aGUgd2ViR0xEYXRhcyB0byB0aGUgb2JqZWN0IHBvb2wgc28gdGhhbiBjYW4gYmUgcmV1c2VkIGxhdGVyIG9uXG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCB3ZWJHTC5kYXRhLmxlbmd0aDsgaSsrKVxuICAgICAgICB7XG4gICAgICAgICAgICB2YXIgZ3JhcGhpY3NEYXRhID0gd2ViR0wuZGF0YVtpXTtcbiAgICAgICAgICAgIGdyYXBoaWNzRGF0YS5yZXNldCgpO1xuICAgICAgICAgICAgdGhpcy5ncmFwaGljc0RhdGFQb29sLnB1c2goIGdyYXBoaWNzRGF0YSApO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gY2xlYXIgdGhlIGFycmF5IGFuZCByZXNldCB0aGUgaW5kZXguLlxuICAgICAgICB3ZWJHTC5kYXRhID0gW107XG4gICAgICAgIHdlYkdMLmxhc3RJbmRleCA9IDA7XG4gICAgfVxuXG4gICAgdmFyIHdlYkdMRGF0YTtcblxuICAgIC8vIGxvb3AgdGhyb3VnaCB0aGUgZ3JhcGhpY3MgZGF0YXMgYW5kIGNvbnN0cnVjdCBlYWNoIG9uZS4uXG4gICAgLy8gaWYgdGhlIG9iamVjdCBpcyBhIGNvbXBsZXggZmlsbCB0aGVuIHRoZSBuZXcgc3RlbmNpbCBidWZmZXIgdGVjaG5pcXVlIHdpbGwgYmUgdXNlZFxuICAgIC8vIG90aGVyIHdpc2UgZ3JhcGhpY3Mgb2JqZWN0cyB3aWxsIGJlIHB1c2hlZCBpbnRvIGEgYmF0Y2guLlxuICAgIGZvciAoaSA9IHdlYkdMLmxhc3RJbmRleDsgaSA8IGdyYXBoaWNzLmdyYXBoaWNzRGF0YS5sZW5ndGg7IGkrKylcbiAgICB7XG4gICAgICAgIHZhciBkYXRhID0gZ3JhcGhpY3MuZ3JhcGhpY3NEYXRhW2ldO1xuXG4gICAgICAgIGlmIChkYXRhLnR5cGUgPT09IENPTlNULlNIQVBFUy5QT0xZKVxuICAgICAgICB7XG4gICAgICAgICAgICAvLyBuZWVkIHRvIGFkZCB0aGUgcG9pbnRzIHRoZSB0aGUgZ3JhcGhpY3Mgb2JqZWN0Li5cbiAgICAgICAgICAgIGRhdGEucG9pbnRzID0gZGF0YS5zaGFwZS5wb2ludHMuc2xpY2UoKTtcbiAgICAgICAgICAgIGlmIChkYXRhLnNoYXBlLmNsb3NlZClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAvLyBjbG9zZSB0aGUgcG9seSBpZiB0aGUgdmFsdWUgaXMgdHJ1ZSFcbiAgICAgICAgICAgICAgICBpZiAoZGF0YS5wb2ludHNbMF0gIT09IGRhdGEucG9pbnRzW2RhdGEucG9pbnRzLmxlbmd0aC0yXSB8fCBkYXRhLnBvaW50c1sxXSAhPT0gZGF0YS5wb2ludHNbZGF0YS5wb2ludHMubGVuZ3RoLTFdKVxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgZGF0YS5wb2ludHMucHVzaChkYXRhLnBvaW50c1swXSwgZGF0YS5wb2ludHNbMV0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gTUFLRSBTVVJFIFdFIEhBVkUgVEhFIENPUlJFQ1QgVFlQRS4uXG4gICAgICAgICAgICBpZiAoZGF0YS5maWxsKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGlmIChkYXRhLnBvaW50cy5sZW5ndGggPj0gNilcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChkYXRhLnBvaW50cy5sZW5ndGggPCB0aGlzLm1heGltdW1TaW1wbGVQb2x5U2l6ZSAqIDIpXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHdlYkdMRGF0YSA9IHRoaXMuc3dpdGNoTW9kZSh3ZWJHTCwgMCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjYW5EcmF3VXNpbmdTaW1wbGUgPSBidWlsZFBvbHkoZGF0YSwgd2ViR0xEYXRhKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFjYW5EcmF3VXNpbmdTaW1wbGUpXG4gICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd2ViR0xEYXRhID0gdGhpcy5zd2l0Y2hNb2RlKHdlYkdMLCAxKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWlsZENvbXBsZXhQb2x5KGRhdGEsIHdlYkdMRGF0YSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHdlYkdMRGF0YSA9IHRoaXMuc3dpdGNoTW9kZSh3ZWJHTCwgMSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBidWlsZENvbXBsZXhQb2x5KGRhdGEsIHdlYkdMRGF0YSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChkYXRhLmxpbmVXaWR0aCA+IDApXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgd2ViR0xEYXRhID0gdGhpcy5zd2l0Y2hNb2RlKHdlYkdMLCAwKTtcbiAgICAgICAgICAgICAgICBidWlsZExpbmUoZGF0YSwgd2ViR0xEYXRhKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgIHtcbiAgICAgICAgICAgIHdlYkdMRGF0YSA9IHRoaXMuc3dpdGNoTW9kZSh3ZWJHTCwgMCk7XG5cbiAgICAgICAgICAgIGlmIChkYXRhLnR5cGUgPT09IENPTlNULlNIQVBFUy5SRUNUKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGJ1aWxkUmVjdGFuZ2xlKGRhdGEsIHdlYkdMRGF0YSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChkYXRhLnR5cGUgPT09IENPTlNULlNIQVBFUy5DSVJDIHx8IGRhdGEudHlwZSA9PT0gQ09OU1QuU0hBUEVTLkVMSVApXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgYnVpbGRDaXJjbGUoZGF0YSwgd2ViR0xEYXRhKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGRhdGEudHlwZSA9PT0gQ09OU1QuU0hBUEVTLlJSRUMpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgYnVpbGRSb3VuZGVkUmVjdGFuZ2xlKGRhdGEsIHdlYkdMRGF0YSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICB3ZWJHTC5sYXN0SW5kZXgrKztcbiAgICB9XG5cbiAgICAvLyB1cGxvYWQgYWxsIHRoZSBkaXJ0eSBkYXRhLi4uXG4gICAgZm9yIChpID0gMDsgaSA8IHdlYkdMLmRhdGEubGVuZ3RoOyBpKyspXG4gICAge1xuICAgICAgICB3ZWJHTERhdGEgPSB3ZWJHTC5kYXRhW2ldO1xuXG4gICAgICAgIGlmICh3ZWJHTERhdGEuZGlydHkpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHdlYkdMRGF0YS51cGxvYWQoKTtcbiAgICAgICAgfVxuICAgIH1cbn07XG5cbi8qKlxuICpcbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHdlYkdMIHtXZWJHTFJlbmRlcmluZ0NvbnRleHR9IHRoZSBjdXJyZW50IFdlYkdMIGRyYXdpbmcgY29udGV4dFxuICogQHBhcmFtIHR5cGUge251bWJlcn0gVE9ETyBAQWx2aW5cbiAqL1xuR3JhcGhpY3NSZW5kZXJlci5wcm90b3R5cGUuc3dpdGNoTW9kZSA9IGZ1bmN0aW9uICh3ZWJHTCwgdHlwZSlcbntcbiAgICB2YXIgd2ViR0xEYXRhO1xuXG4gICAgaWYgKCF3ZWJHTC5kYXRhLmxlbmd0aClcbiAgICB7XG4gICAgICAgIHdlYkdMRGF0YSA9IHRoaXMuZ3JhcGhpY3NEYXRhUG9vbC5wb3AoKSB8fCBuZXcgV2ViR0xHcmFwaGljc0RhdGEod2ViR0wuZ2wpO1xuICAgICAgICB3ZWJHTERhdGEubW9kZSA9IHR5cGU7XG4gICAgICAgIHdlYkdMLmRhdGEucHVzaCh3ZWJHTERhdGEpO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICB3ZWJHTERhdGEgPSB3ZWJHTC5kYXRhW3dlYkdMLmRhdGEubGVuZ3RoLTFdO1xuXG4gICAgICAgIGlmICgod2ViR0xEYXRhLnBvaW50cy5sZW5ndGggPiAzMjAwMDApIHx8IHdlYkdMRGF0YS5tb2RlICE9PSB0eXBlIHx8IHR5cGUgPT09IDEpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHdlYkdMRGF0YSA9IHRoaXMuZ3JhcGhpY3NEYXRhUG9vbC5wb3AoKSB8fCBuZXcgV2ViR0xHcmFwaGljc0RhdGEod2ViR0wuZ2wpO1xuICAgICAgICAgICAgd2ViR0xEYXRhLm1vZGUgPSB0eXBlO1xuICAgICAgICAgICAgd2ViR0wuZGF0YS5wdXNoKHdlYkdMRGF0YSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB3ZWJHTERhdGEuZGlydHkgPSB0cnVlO1xuXG4gICAgcmV0dXJuIHdlYkdMRGF0YTtcbn07XG5cbiIsIi8qKlxuICogQW4gb2JqZWN0IGNvbnRhaW5pbmcgV2ViR0wgc3BlY2lmaWMgcHJvcGVydGllcyB0byBiZSB1c2VkIGJ5IHRoZSBXZWJHTCByZW5kZXJlclxuICpcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqIEBwYXJhbSBnbCB7V2ViR0xSZW5kZXJpbmdDb250ZXh0fSB0aGUgY3VycmVudCBXZWJHTCBkcmF3aW5nIGNvbnRleHRcbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIFdlYkdMR3JhcGhpY3NEYXRhKGdsKSB7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgY3VycmVudCBXZWJHTCBkcmF3aW5nIGNvbnRleHRcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1dlYkdMUmVuZGVyaW5nQ29udGV4dH1cbiAgICAgKi9cbiAgICB0aGlzLmdsID0gZ2w7XG5cbiAgICAvL1RPRE8gZG9lcyB0aGlzIG5lZWQgdG8gYmUgc3BsaXQgYmVmb3JlIHVwbG9kaW5nPz9cbiAgICAvKipcbiAgICAgKiBBbiBhcnJheSBvZiBjb2xvciBjb21wb25lbnRzIChyLGcsYilcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJbXX1cbiAgICAgKi9cbiAgICB0aGlzLmNvbG9yID0gWzAsMCwwXTsgLy8gY29sb3Igc3BsaXQhXG5cbiAgICAvKipcbiAgICAgKiBBbiBhcnJheSBvZiBwb2ludHMgdG8gZHJhd1xuICAgICAqIEBtZW1iZXIge1BJWEkuUG9pbnRbXX1cbiAgICAgKi9cbiAgICB0aGlzLnBvaW50cyA9IFtdO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGluZGljZXMgb2YgdGhlIHZlcnRpY2VzXG4gICAgICogQG1lbWJlciB7bnVtYmVyW119XG4gICAgICovXG4gICAgdGhpcy5pbmRpY2VzID0gW107XG4gICAgLyoqXG4gICAgICogVGhlIG1haW4gYnVmZmVyXG4gICAgICogQG1lbWJlciB7V2ViR0xCdWZmZXJ9XG4gICAgICovXG4gICAgdGhpcy5idWZmZXIgPSBnbC5jcmVhdGVCdWZmZXIoKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBpbmRleCBidWZmZXJcbiAgICAgKiBAbWVtYmVyIHtXZWJHTEJ1ZmZlcn1cbiAgICAgKi9cbiAgICB0aGlzLmluZGV4QnVmZmVyID0gZ2wuY3JlYXRlQnVmZmVyKCk7XG5cbiAgICAvKipcbiAgICAgKiB0b2RvIEBhbHZpblxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLm1vZGUgPSAxO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGFscGhhIG9mIHRoZSBncmFwaGljc1xuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLmFscGhhID0gMTtcblxuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgdGhpcyBncmFwaGljcyBpcyBkaXJ0eSBvciBub3RcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqL1xuICAgIHRoaXMuZGlydHkgPSB0cnVlO1xuXG4gICAgdGhpcy5nbFBvaW50cyA9IG51bGw7XG4gICAgdGhpcy5nbEluZGljZXMgPSBudWxsO1xufVxuXG5XZWJHTEdyYXBoaWNzRGF0YS5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBXZWJHTEdyYXBoaWNzRGF0YTtcbm1vZHVsZS5leHBvcnRzID0gV2ViR0xHcmFwaGljc0RhdGE7XG5cbi8qKlxuICogUmVzZXRzIHRoZSB2ZXJ0aWNlcyBhbmQgdGhlIGluZGljZXNcbiAqL1xuV2ViR0xHcmFwaGljc0RhdGEucHJvdG90eXBlLnJlc2V0ID0gZnVuY3Rpb24gKCkge1xuICAgIHRoaXMucG9pbnRzLmxlbmd0aCA9IDA7XG4gICAgdGhpcy5pbmRpY2VzLmxlbmd0aCA9IDA7XG59O1xuXG4vKipcbiAqIEJpbmRzIHRoZSBidWZmZXJzIGFuZCB1cGxvYWRzIHRoZSBkYXRhXG4gKi9cbldlYkdMR3JhcGhpY3NEYXRhLnByb3RvdHlwZS51cGxvYWQgPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGdsID0gdGhpcy5nbDtcblxuLy8gICAgdGhpcy5sYXN0SW5kZXggPSBncmFwaGljcy5ncmFwaGljc0RhdGEubGVuZ3RoO1xuICAgIHRoaXMuZ2xQb2ludHMgPSBuZXcgRmxvYXQzMkFycmF5KHRoaXMucG9pbnRzKTtcblxuICAgIGdsLmJpbmRCdWZmZXIoZ2wuQVJSQVlfQlVGRkVSLCB0aGlzLmJ1ZmZlcik7XG4gICAgZ2wuYnVmZmVyRGF0YShnbC5BUlJBWV9CVUZGRVIsIHRoaXMuZ2xQb2ludHMsIGdsLlNUQVRJQ19EUkFXKTtcblxuICAgIHRoaXMuZ2xJbmRpY2VzID0gbmV3IFVpbnQxNkFycmF5KHRoaXMuaW5kaWNlcyk7XG5cbiAgICBnbC5iaW5kQnVmZmVyKGdsLkVMRU1FTlRfQVJSQVlfQlVGRkVSLCB0aGlzLmluZGV4QnVmZmVyKTtcbiAgICBnbC5idWZmZXJEYXRhKGdsLkVMRU1FTlRfQVJSQVlfQlVGRkVSLCB0aGlzLmdsSW5kaWNlcywgZ2wuU1RBVElDX0RSQVcpO1xuXG4gICAgdGhpcy5kaXJ0eSA9IGZhbHNlO1xufTtcblxuV2ViR0xHcmFwaGljc0RhdGEucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoKSB7XG4gICAgdGhpcy5jb2xvciA9IG51bGw7XG4gICAgdGhpcy5wb2ludHMgPSBudWxsO1xuICAgIHRoaXMuaW5kaWNlcyA9IG51bGw7XG5cbiAgICB0aGlzLmdsLmRlbGV0ZUJ1ZmZlcih0aGlzLmJ1ZmZlcik7XG4gICAgdGhpcy5nbC5kZWxldGVCdWZmZXIodGhpcy5pbmRleEJ1ZmZlcik7XG4gICAgXG4gICAgdGhpcy5nbCA9IG51bGw7XG5cbiAgICB0aGlzLmJ1ZmZlciA9IG51bGw7XG4gICAgdGhpcy5pbmRleEJ1ZmZlciA9IG51bGw7XG5cbiAgICB0aGlzLmdsUG9pbnRzID0gbnVsbDtcbiAgICB0aGlzLmdsSW5kaWNlcyA9IG51bGw7XG59O1xuIiwidmFyIFNoYWRlciA9IHJlcXVpcmUoJ3BpeGktZ2wtY29yZScpLkdMU2hhZGVyO1xuXG4vKipcbiAqIFRoaXMgc2hhZGVyIGlzIHVzZWQgdG8gZHJhdyBzaW1wbGUgcHJpbWl0aXZlIHNoYXBlcyBmb3Ige0BsaW5rIFBJWEkuR3JhcGhpY3N9LlxuICpcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqIEBleHRlbmRzIFBJWEkuU2hhZGVyXG4gKiBAcGFyYW0gc2hhZGVyTWFuYWdlciB7U2hhZGVyTWFuYWdlcn0gVGhlIHdlYmdsIHNoYWRlciBtYW5hZ2VyIHRoaXMgc2hhZGVyIHdvcmtzIGZvci5cbiAqL1xuZnVuY3Rpb24gUHJpbWl0aXZlU2hhZGVyKGdsKVxue1xuICAgIFNoYWRlci5jYWxsKHRoaXMsXG4gICAgICAgIGdsLFxuICAgICAgICAvLyB2ZXJ0ZXggc2hhZGVyXG4gICAgICAgIFtcbiAgICAgICAgICAgICdhdHRyaWJ1dGUgdmVjMiBhVmVydGV4UG9zaXRpb247JyxcbiAgICAgICAgICAgICdhdHRyaWJ1dGUgdmVjNCBhQ29sb3I7JyxcblxuICAgICAgICAgICAgJ3VuaWZvcm0gbWF0MyB0cmFuc2xhdGlvbk1hdHJpeDsnLFxuICAgICAgICAgICAgJ3VuaWZvcm0gbWF0MyBwcm9qZWN0aW9uTWF0cml4OycsXG5cbiAgICAgICAgICAgICd1bmlmb3JtIGZsb2F0IGFscGhhOycsXG4gICAgICAgICAgICAndW5pZm9ybSBmbG9hdCBmbGlwWTsnLFxuICAgICAgICAgICAgJ3VuaWZvcm0gdmVjMyB0aW50OycsXG5cbiAgICAgICAgICAgICd2YXJ5aW5nIHZlYzQgdkNvbG9yOycsXG5cbiAgICAgICAgICAgICd2b2lkIG1haW4odm9pZCl7JyxcbiAgICAgICAgICAgICcgICBnbF9Qb3NpdGlvbiA9IHZlYzQoKHByb2plY3Rpb25NYXRyaXggKiB0cmFuc2xhdGlvbk1hdHJpeCAqIHZlYzMoYVZlcnRleFBvc2l0aW9uLCAxLjApKS54eSwgMC4wLCAxLjApOycsXG4gICAgICAgICAgICAnICAgdkNvbG9yID0gYUNvbG9yICogdmVjNCh0aW50ICogYWxwaGEsIGFscGhhKTsnLFxuICAgICAgICAgICAgJ30nXG4gICAgICAgIF0uam9pbignXFxuJyksXG4gICAgICAgIC8vIGZyYWdtZW50IHNoYWRlclxuICAgICAgICBbXG4gICAgICAgICAgICAncHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7JyxcblxuICAgICAgICAgICAgJ3ZhcnlpbmcgdmVjNCB2Q29sb3I7JyxcblxuICAgICAgICAgICAgJ3ZvaWQgbWFpbih2b2lkKXsnLFxuICAgICAgICAgICAgJyAgIGdsX0ZyYWdDb2xvciA9IHZDb2xvcjsnLFxuICAgICAgICAgICAgJ30nXG4gICAgICAgIF0uam9pbignXFxuJylcbiAgICApO1xufVxuXG5QcmltaXRpdmVTaGFkZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShTaGFkZXIucHJvdG90eXBlKTtcblByaW1pdGl2ZVNoYWRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBQcmltaXRpdmVTaGFkZXI7XG5cbm1vZHVsZS5leHBvcnRzID0gUHJpbWl0aXZlU2hhZGVyO1xuIiwidmFyIGJ1aWxkTGluZSA9IHJlcXVpcmUoJy4vYnVpbGRMaW5lJyksXG4gICAgdXRpbHMgPSByZXF1aXJlKCcuLi8uLi8uLi91dGlscycpO1xuXG4vKipcbiAqIEJ1aWxkcyBhIGNpcmNsZSB0byBkcmF3XG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSBncmFwaGljc0RhdGEge1BJWEkuR3JhcGhpY3N9IFRoZSBncmFwaGljcyBvYmplY3QgdG8gZHJhd1xuICogQHBhcmFtIHdlYkdMRGF0YSB7b2JqZWN0fSBhbiBvYmplY3QgY29udGFpbmluZyBhbGwgdGhlIHdlYkdMLXNwZWNpZmljIGluZm9ybWF0aW9uIHRvIGNyZWF0ZSB0aGlzIHNoYXBlXG4gKi9cbnZhciBidWlsZENpcmNsZSA9IGZ1bmN0aW9uIChncmFwaGljc0RhdGEsIHdlYkdMRGF0YSlcbntcbiAgICAvLyBuZWVkIHRvIGNvbnZlcnQgcG9pbnRzIHRvIGEgbmljZSByZWd1bGFyIGRhdGFcbiAgICB2YXIgY2lyY2xlRGF0YSA9IGdyYXBoaWNzRGF0YS5zaGFwZTtcbiAgICB2YXIgeCA9IGNpcmNsZURhdGEueDtcbiAgICB2YXIgeSA9IGNpcmNsZURhdGEueTtcbiAgICB2YXIgd2lkdGg7XG4gICAgdmFyIGhlaWdodDtcblxuICAgIC8vIFRPRE8gLSBiaXQgaGFja3k/P1xuICAgIGlmIChncmFwaGljc0RhdGEudHlwZSA9PT0gQ09OU1QuU0hBUEVTLkNJUkMpXG4gICAge1xuICAgICAgICB3aWR0aCA9IGNpcmNsZURhdGEucmFkaXVzO1xuICAgICAgICBoZWlnaHQgPSBjaXJjbGVEYXRhLnJhZGl1cztcbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgd2lkdGggPSBjaXJjbGVEYXRhLndpZHRoO1xuICAgICAgICBoZWlnaHQgPSBjaXJjbGVEYXRhLmhlaWdodDtcbiAgICB9XG5cbiAgICB2YXIgdG90YWxTZWdzID0gTWF0aC5mbG9vcigzMCAqIE1hdGguc3FydChjaXJjbGVEYXRhLnJhZGl1cykpIHx8IE1hdGguZmxvb3IoMTUgKiBNYXRoLnNxcnQoY2lyY2xlRGF0YS53aWR0aCArIGNpcmNsZURhdGEuaGVpZ2h0KSk7XG4gICAgdmFyIHNlZyA9IChNYXRoLlBJICogMikgLyB0b3RhbFNlZ3MgO1xuXG4gICAgdmFyIGkgPSAwO1xuXG4gICAgaWYgKGdyYXBoaWNzRGF0YS5maWxsKVxuICAgIHtcbiAgICAgICAgdmFyIGNvbG9yID0gdXRpbHMuaGV4MnJnYihncmFwaGljc0RhdGEuZmlsbENvbG9yKTtcbiAgICAgICAgdmFyIGFscGhhID0gZ3JhcGhpY3NEYXRhLmZpbGxBbHBoYTtcblxuICAgICAgICB2YXIgciA9IGNvbG9yWzBdICogYWxwaGE7XG4gICAgICAgIHZhciBnID0gY29sb3JbMV0gKiBhbHBoYTtcbiAgICAgICAgdmFyIGIgPSBjb2xvclsyXSAqIGFscGhhO1xuXG4gICAgICAgIHZhciB2ZXJ0cyA9IHdlYkdMRGF0YS5wb2ludHM7XG4gICAgICAgIHZhciBpbmRpY2VzID0gd2ViR0xEYXRhLmluZGljZXM7XG5cbiAgICAgICAgdmFyIHZlY1BvcyA9IHZlcnRzLmxlbmd0aC82O1xuXG4gICAgICAgIGluZGljZXMucHVzaCh2ZWNQb3MpO1xuXG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCB0b3RhbFNlZ3MgKyAxIDsgaSsrKVxuICAgICAgICB7XG4gICAgICAgICAgICB2ZXJ0cy5wdXNoKHgseSwgciwgZywgYiwgYWxwaGEpO1xuXG4gICAgICAgICAgICB2ZXJ0cy5wdXNoKHggKyBNYXRoLnNpbihzZWcgKiBpKSAqIHdpZHRoLFxuICAgICAgICAgICAgICAgICAgICAgICB5ICsgTWF0aC5jb3Moc2VnICogaSkgKiBoZWlnaHQsXG4gICAgICAgICAgICAgICAgICAgICAgIHIsIGcsIGIsIGFscGhhKTtcblxuICAgICAgICAgICAgaW5kaWNlcy5wdXNoKHZlY1BvcysrLCB2ZWNQb3MrKyk7XG4gICAgICAgIH1cblxuICAgICAgICBpbmRpY2VzLnB1c2godmVjUG9zLTEpO1xuICAgIH1cblxuICAgIGlmIChncmFwaGljc0RhdGEubGluZVdpZHRoKVxuICAgIHtcbiAgICAgICAgdmFyIHRlbXBQb2ludHMgPSBncmFwaGljc0RhdGEucG9pbnRzO1xuXG4gICAgICAgIGdyYXBoaWNzRGF0YS5wb2ludHMgPSBbXTtcblxuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgdG90YWxTZWdzICsgMTsgaSsrKVxuICAgICAgICB7XG4gICAgICAgICAgICBncmFwaGljc0RhdGEucG9pbnRzLnB1c2goeCArIE1hdGguc2luKHNlZyAqIGkpICogd2lkdGgsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeSArIE1hdGguY29zKHNlZyAqIGkpICogaGVpZ2h0KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGJ1aWxkTGluZShncmFwaGljc0RhdGEsIHdlYkdMRGF0YSk7XG5cbiAgICAgICAgZ3JhcGhpY3NEYXRhLnBvaW50cyA9IHRlbXBQb2ludHM7XG4gICAgfVxufTtcblxuXG5tb2R1bGUuZXhwb3J0cyA9IGJ1aWxkQ2lyY2xlOyIsInZhciBidWlsZExpbmUgPSByZXF1aXJlKCcuL2J1aWxkTGluZScpLFxuICAgIHV0aWxzID0gcmVxdWlyZSgnLi4vLi4vLi4vdXRpbHMnKTtcbiAgICBcblxuXG4vKipcbiAqIEJ1aWxkcyBhIGNvbXBsZXggcG9seWdvbiB0byBkcmF3XG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSBncmFwaGljc0RhdGEge1BJWEkuR3JhcGhpY3N9IFRoZSBncmFwaGljcyBvYmplY3QgY29udGFpbmluZyBhbGwgdGhlIG5lY2Vzc2FyeSBwcm9wZXJ0aWVzXG4gKiBAcGFyYW0gd2ViR0xEYXRhIHtvYmplY3R9IGFuIG9iamVjdCBjb250YWluaW5nIGFsbCB0aGUgd2ViR0wtc3BlY2lmaWMgaW5mb3JtYXRpb24gdG8gY3JlYXRlIHRoaXMgc2hhcGVcbiAqL1xudmFyIGJ1aWxkQ29tcGxleFBvbHkgPSBmdW5jdGlvbiAoZ3JhcGhpY3NEYXRhLCB3ZWJHTERhdGEpXG57XG4gICAgLy9UT0RPIC0gbm8gbmVlZCB0byBjb3B5IHRoaXMgYXMgaXQgZ2V0cyB0dXJuZWQgaW50byBhIEZMb2F0MzJBcnJheSBhbnl3YXlzLi5cbiAgICB2YXIgcG9pbnRzID0gZ3JhcGhpY3NEYXRhLnBvaW50cy5zbGljZSgpO1xuXG4gICAgaWYgKHBvaW50cy5sZW5ndGggPCA2KVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIGdldCBmaXJzdCBhbmQgbGFzdCBwb2ludC4uIGZpZ3VyZSBvdXQgdGhlIG1pZGRsZSFcbiAgICB2YXIgaW5kaWNlcyA9IHdlYkdMRGF0YS5pbmRpY2VzO1xuICAgIHdlYkdMRGF0YS5wb2ludHMgPSBwb2ludHM7XG4gICAgd2ViR0xEYXRhLmFscGhhID0gZ3JhcGhpY3NEYXRhLmZpbGxBbHBoYTtcbiAgICB3ZWJHTERhdGEuY29sb3IgPSB1dGlscy5oZXgycmdiKGdyYXBoaWNzRGF0YS5maWxsQ29sb3IpO1xuXG4gICAgLy8gY2FsY2xhdGUgdGhlIGJvdW5kcy4uXG4gICAgdmFyIG1pblggPSBJbmZpbml0eTtcbiAgICB2YXIgbWF4WCA9IC1JbmZpbml0eTtcblxuICAgIHZhciBtaW5ZID0gSW5maW5pdHk7XG4gICAgdmFyIG1heFkgPSAtSW5maW5pdHk7XG5cbiAgICB2YXIgeCx5O1xuXG4gICAgLy8gZ2V0IHNpemUuLlxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcG9pbnRzLmxlbmd0aDsgaSs9MilcbiAgICB7XG4gICAgICAgIHggPSBwb2ludHNbaV07XG4gICAgICAgIHkgPSBwb2ludHNbaSsxXTtcblxuICAgICAgICBtaW5YID0geCA8IG1pblggPyB4IDogbWluWDtcbiAgICAgICAgbWF4WCA9IHggPiBtYXhYID8geCA6IG1heFg7XG5cbiAgICAgICAgbWluWSA9IHkgPCBtaW5ZID8geSA6IG1pblk7XG4gICAgICAgIG1heFkgPSB5ID4gbWF4WSA/IHkgOiBtYXhZO1xuICAgIH1cblxuICAgIC8vIGFkZCBhIHF1YWQgdG8gdGhlIGVuZCBjb3MgdGhlcmUgaXMgbm8gcG9pbnQgbWFraW5nIGFub3RoZXIgYnVmZmVyIVxuICAgIHBvaW50cy5wdXNoKG1pblgsIG1pblksXG4gICAgICAgICAgICAgICAgbWF4WCwgbWluWSxcbiAgICAgICAgICAgICAgICBtYXhYLCBtYXhZLFxuICAgICAgICAgICAgICAgIG1pblgsIG1heFkpO1xuXG4gICAgLy8gcHVzaCBhIHF1YWQgb250byB0aGUgZW5kLi5cblxuICAgIC8vVE9ETyAtIHRoaXMgYWludCBuZWVkZWQhXG4gICAgdmFyIGxlbmd0aCA9IHBvaW50cy5sZW5ndGggLyAyO1xuICAgIGZvciAoaSA9IDA7IGkgPCBsZW5ndGg7IGkrKylcbiAgICB7XG4gICAgICAgIGluZGljZXMucHVzaCggaSApO1xuICAgIH1cblxufTtcblxuXG5cbm1vZHVsZS5leHBvcnRzID0gYnVpbGRDb21wbGV4UG9seTsiLCJ2YXIgbWF0aCA9IHJlcXVpcmUoJy4uLy4uLy4uL21hdGgnKSxcbiAgICB1dGlscyA9IHJlcXVpcmUoJy4uLy4uLy4uL3V0aWxzJyk7XG5cbi8qKlxuICogQnVpbGRzIGEgbGluZSB0byBkcmF3XG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSBncmFwaGljc0RhdGEge1BJWEkuR3JhcGhpY3N9IFRoZSBncmFwaGljcyBvYmplY3QgY29udGFpbmluZyBhbGwgdGhlIG5lY2Vzc2FyeSBwcm9wZXJ0aWVzXG4gKiBAcGFyYW0gd2ViR0xEYXRhIHtvYmplY3R9IGFuIG9iamVjdCBjb250YWluaW5nIGFsbCB0aGUgd2ViR0wtc3BlY2lmaWMgaW5mb3JtYXRpb24gdG8gY3JlYXRlIHRoaXMgc2hhcGVcbiAqL1xudmFyIGJ1aWxkTGluZSA9IGZ1bmN0aW9uIChncmFwaGljc0RhdGEsIHdlYkdMRGF0YSlcbntcbiAgICAvLyBUT0RPIE9QVElNSVNFIVxuICAgIHZhciBpID0gMDtcbiAgICB2YXIgcG9pbnRzID0gZ3JhcGhpY3NEYXRhLnBvaW50cztcblxuICAgIGlmIChwb2ludHMubGVuZ3RoID09PSAwKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICAvLyBpZiB0aGUgbGluZSB3aWR0aCBpcyBhbiBvZGQgbnVtYmVyIGFkZCAwLjUgdG8gYWxpZ24gdG8gYSB3aG9sZSBwaXhlbFxuICAgIC8vIGNvbW1lbnRpbmcgdGhpcyBvdXQgZml4ZXMgIzcxMSBhbmQgIzE2MjBcbiAgICAvLyBpZiAoZ3JhcGhpY3NEYXRhLmxpbmVXaWR0aCUyKVxuICAgIC8vIHtcbiAgICAvLyAgICAgZm9yIChpID0gMDsgaSA8IHBvaW50cy5sZW5ndGg7IGkrKylcbiAgICAvLyAgICAge1xuICAgIC8vICAgICAgICAgcG9pbnRzW2ldICs9IDAuNTtcbiAgICAvLyAgICAgfVxuICAgIC8vIH1cblxuICAgIC8vIGdldCBmaXJzdCBhbmQgbGFzdCBwb2ludC4uIGZpZ3VyZSBvdXQgdGhlIG1pZGRsZSFcbiAgICB2YXIgZmlyc3RQb2ludCA9IG5ldyBtYXRoLlBvaW50KHBvaW50c1swXSwgcG9pbnRzWzFdKTtcbiAgICB2YXIgbGFzdFBvaW50ID0gbmV3IG1hdGguUG9pbnQocG9pbnRzW3BvaW50cy5sZW5ndGggLSAyXSwgcG9pbnRzW3BvaW50cy5sZW5ndGggLSAxXSk7XG5cbiAgICAvLyBpZiB0aGUgZmlyc3QgcG9pbnQgaXMgdGhlIGxhc3QgcG9pbnQgLSBnb25uYSBoYXZlIGlzc3VlcyA6KVxuICAgIGlmIChmaXJzdFBvaW50LnggPT09IGxhc3RQb2ludC54ICYmIGZpcnN0UG9pbnQueSA9PT0gbGFzdFBvaW50LnkpXG4gICAge1xuICAgICAgICAvLyBuZWVkIHRvIGNsb25lIGFzIHdlIGFyZSBnb2luZyB0byBzbGlnaHRseSBtb2RpZnkgdGhlIHNoYXBlLi5cbiAgICAgICAgcG9pbnRzID0gcG9pbnRzLnNsaWNlKCk7XG5cbiAgICAgICAgcG9pbnRzLnBvcCgpO1xuICAgICAgICBwb2ludHMucG9wKCk7XG5cbiAgICAgICAgbGFzdFBvaW50ID0gbmV3IG1hdGguUG9pbnQocG9pbnRzW3BvaW50cy5sZW5ndGggLSAyXSwgcG9pbnRzW3BvaW50cy5sZW5ndGggLSAxXSk7XG5cbiAgICAgICAgdmFyIG1pZFBvaW50WCA9IGxhc3RQb2ludC54ICsgKGZpcnN0UG9pbnQueCAtIGxhc3RQb2ludC54KSAqMC41O1xuICAgICAgICB2YXIgbWlkUG9pbnRZID0gbGFzdFBvaW50LnkgKyAoZmlyc3RQb2ludC55IC0gbGFzdFBvaW50LnkpICowLjU7XG5cbiAgICAgICAgcG9pbnRzLnVuc2hpZnQobWlkUG9pbnRYLCBtaWRQb2ludFkpO1xuICAgICAgICBwb2ludHMucHVzaChtaWRQb2ludFgsIG1pZFBvaW50WSk7XG4gICAgfVxuXG4gICAgdmFyIHZlcnRzID0gd2ViR0xEYXRhLnBvaW50cztcbiAgICB2YXIgaW5kaWNlcyA9IHdlYkdMRGF0YS5pbmRpY2VzO1xuICAgIHZhciBsZW5ndGggPSBwb2ludHMubGVuZ3RoIC8gMjtcbiAgICB2YXIgaW5kZXhDb3VudCA9IHBvaW50cy5sZW5ndGg7XG4gICAgdmFyIGluZGV4U3RhcnQgPSB2ZXJ0cy5sZW5ndGgvNjtcblxuICAgIC8vIERSQVcgdGhlIExpbmVcbiAgICB2YXIgd2lkdGggPSBncmFwaGljc0RhdGEubGluZVdpZHRoIC8gMjtcblxuICAgIC8vIHNvcnQgY29sb3JcbiAgICB2YXIgY29sb3IgPSB1dGlscy5oZXgycmdiKGdyYXBoaWNzRGF0YS5saW5lQ29sb3IpO1xuICAgIHZhciBhbHBoYSA9IGdyYXBoaWNzRGF0YS5saW5lQWxwaGE7XG4gICAgdmFyIHIgPSBjb2xvclswXSAqIGFscGhhO1xuICAgIHZhciBnID0gY29sb3JbMV0gKiBhbHBoYTtcbiAgICB2YXIgYiA9IGNvbG9yWzJdICogYWxwaGE7XG5cbiAgICB2YXIgcHgsIHB5LCBwMXgsIHAxeSwgcDJ4LCBwMnksIHAzeCwgcDN5O1xuICAgIHZhciBwZXJweCwgcGVycHksIHBlcnAyeCwgcGVycDJ5LCBwZXJwM3gsIHBlcnAzeTtcbiAgICB2YXIgYTEsIGIxLCBjMSwgYTIsIGIyLCBjMjtcbiAgICB2YXIgZGVub20sIHBkaXN0LCBkaXN0O1xuXG4gICAgcDF4ID0gcG9pbnRzWzBdO1xuICAgIHAxeSA9IHBvaW50c1sxXTtcblxuICAgIHAyeCA9IHBvaW50c1syXTtcbiAgICBwMnkgPSBwb2ludHNbM107XG5cbiAgICBwZXJweCA9IC0ocDF5IC0gcDJ5KTtcbiAgICBwZXJweSA9ICBwMXggLSBwMng7XG5cbiAgICBkaXN0ID0gTWF0aC5zcXJ0KHBlcnB4KnBlcnB4ICsgcGVycHkqcGVycHkpO1xuXG4gICAgcGVycHggLz0gZGlzdDtcbiAgICBwZXJweSAvPSBkaXN0O1xuICAgIHBlcnB4ICo9IHdpZHRoO1xuICAgIHBlcnB5ICo9IHdpZHRoO1xuXG4gICAgLy8gc3RhcnRcbiAgICB2ZXJ0cy5wdXNoKHAxeCAtIHBlcnB4ICwgcDF5IC0gcGVycHksXG4gICAgICAgICAgICAgICAgciwgZywgYiwgYWxwaGEpO1xuXG4gICAgdmVydHMucHVzaChwMXggKyBwZXJweCAsIHAxeSArIHBlcnB5LFxuICAgICAgICAgICAgICAgIHIsIGcsIGIsIGFscGhhKTtcblxuICAgIGZvciAoaSA9IDE7IGkgPCBsZW5ndGgtMTsgaSsrKVxuICAgIHtcbiAgICAgICAgcDF4ID0gcG9pbnRzWyhpLTEpKjJdO1xuICAgICAgICBwMXkgPSBwb2ludHNbKGktMSkqMiArIDFdO1xuXG4gICAgICAgIHAyeCA9IHBvaW50c1soaSkqMl07XG4gICAgICAgIHAyeSA9IHBvaW50c1soaSkqMiArIDFdO1xuXG4gICAgICAgIHAzeCA9IHBvaW50c1soaSsxKSoyXTtcbiAgICAgICAgcDN5ID0gcG9pbnRzWyhpKzEpKjIgKyAxXTtcblxuICAgICAgICBwZXJweCA9IC0ocDF5IC0gcDJ5KTtcbiAgICAgICAgcGVycHkgPSBwMXggLSBwMng7XG5cbiAgICAgICAgZGlzdCA9IE1hdGguc3FydChwZXJweCpwZXJweCArIHBlcnB5KnBlcnB5KTtcbiAgICAgICAgcGVycHggLz0gZGlzdDtcbiAgICAgICAgcGVycHkgLz0gZGlzdDtcbiAgICAgICAgcGVycHggKj0gd2lkdGg7XG4gICAgICAgIHBlcnB5ICo9IHdpZHRoO1xuXG4gICAgICAgIHBlcnAyeCA9IC0ocDJ5IC0gcDN5KTtcbiAgICAgICAgcGVycDJ5ID0gcDJ4IC0gcDN4O1xuXG4gICAgICAgIGRpc3QgPSBNYXRoLnNxcnQocGVycDJ4KnBlcnAyeCArIHBlcnAyeSpwZXJwMnkpO1xuICAgICAgICBwZXJwMnggLz0gZGlzdDtcbiAgICAgICAgcGVycDJ5IC89IGRpc3Q7XG4gICAgICAgIHBlcnAyeCAqPSB3aWR0aDtcbiAgICAgICAgcGVycDJ5ICo9IHdpZHRoO1xuXG4gICAgICAgIGExID0gKC1wZXJweSArIHAxeSkgLSAoLXBlcnB5ICsgcDJ5KTtcbiAgICAgICAgYjEgPSAoLXBlcnB4ICsgcDJ4KSAtICgtcGVycHggKyBwMXgpO1xuICAgICAgICBjMSA9ICgtcGVycHggKyBwMXgpICogKC1wZXJweSArIHAyeSkgLSAoLXBlcnB4ICsgcDJ4KSAqICgtcGVycHkgKyBwMXkpO1xuICAgICAgICBhMiA9ICgtcGVycDJ5ICsgcDN5KSAtICgtcGVycDJ5ICsgcDJ5KTtcbiAgICAgICAgYjIgPSAoLXBlcnAyeCArIHAyeCkgLSAoLXBlcnAyeCArIHAzeCk7XG4gICAgICAgIGMyID0gKC1wZXJwMnggKyBwM3gpICogKC1wZXJwMnkgKyBwMnkpIC0gKC1wZXJwMnggKyBwMngpICogKC1wZXJwMnkgKyBwM3kpO1xuXG4gICAgICAgIGRlbm9tID0gYTEqYjIgLSBhMipiMTtcblxuICAgICAgICBpZiAoTWF0aC5hYnMoZGVub20pIDwgMC4xIClcbiAgICAgICAge1xuXG4gICAgICAgICAgICBkZW5vbSs9MTAuMTtcbiAgICAgICAgICAgIHZlcnRzLnB1c2gocDJ4IC0gcGVycHggLCBwMnkgLSBwZXJweSxcbiAgICAgICAgICAgICAgICByLCBnLCBiLCBhbHBoYSk7XG5cbiAgICAgICAgICAgIHZlcnRzLnB1c2gocDJ4ICsgcGVycHggLCBwMnkgKyBwZXJweSxcbiAgICAgICAgICAgICAgICByLCBnLCBiLCBhbHBoYSk7XG5cbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgcHggPSAoYjEqYzIgLSBiMipjMSkvZGVub207XG4gICAgICAgIHB5ID0gKGEyKmMxIC0gYTEqYzIpL2Rlbm9tO1xuXG5cbiAgICAgICAgcGRpc3QgPSAocHggLXAyeCkgKiAocHggLXAyeCkgKyAocHkgLXAyeSkgKiAocHkgLXAyeSk7XG5cblxuICAgICAgICBpZiAocGRpc3QgPiAxNDAgKiAxNDApXG4gICAgICAgIHtcbiAgICAgICAgICAgIHBlcnAzeCA9IHBlcnB4IC0gcGVycDJ4O1xuICAgICAgICAgICAgcGVycDN5ID0gcGVycHkgLSBwZXJwMnk7XG5cbiAgICAgICAgICAgIGRpc3QgPSBNYXRoLnNxcnQocGVycDN4KnBlcnAzeCArIHBlcnAzeSpwZXJwM3kpO1xuICAgICAgICAgICAgcGVycDN4IC89IGRpc3Q7XG4gICAgICAgICAgICBwZXJwM3kgLz0gZGlzdDtcbiAgICAgICAgICAgIHBlcnAzeCAqPSB3aWR0aDtcbiAgICAgICAgICAgIHBlcnAzeSAqPSB3aWR0aDtcblxuICAgICAgICAgICAgdmVydHMucHVzaChwMnggLSBwZXJwM3gsIHAyeSAtcGVycDN5KTtcbiAgICAgICAgICAgIHZlcnRzLnB1c2gociwgZywgYiwgYWxwaGEpO1xuXG4gICAgICAgICAgICB2ZXJ0cy5wdXNoKHAyeCArIHBlcnAzeCwgcDJ5ICtwZXJwM3kpO1xuICAgICAgICAgICAgdmVydHMucHVzaChyLCBnLCBiLCBhbHBoYSk7XG5cbiAgICAgICAgICAgIHZlcnRzLnB1c2gocDJ4IC0gcGVycDN4LCBwMnkgLXBlcnAzeSk7XG4gICAgICAgICAgICB2ZXJ0cy5wdXNoKHIsIGcsIGIsIGFscGhhKTtcblxuICAgICAgICAgICAgaW5kZXhDb3VudCsrO1xuICAgICAgICB9XG4gICAgICAgIGVsc2VcbiAgICAgICAge1xuXG4gICAgICAgICAgICB2ZXJ0cy5wdXNoKHB4ICwgcHkpO1xuICAgICAgICAgICAgdmVydHMucHVzaChyLCBnLCBiLCBhbHBoYSk7XG5cbiAgICAgICAgICAgIHZlcnRzLnB1c2gocDJ4IC0gKHB4LXAyeCksIHAyeSAtIChweSAtIHAyeSkpO1xuICAgICAgICAgICAgdmVydHMucHVzaChyLCBnLCBiLCBhbHBoYSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwMXggPSBwb2ludHNbKGxlbmd0aC0yKSoyXTtcbiAgICBwMXkgPSBwb2ludHNbKGxlbmd0aC0yKSoyICsgMV07XG5cbiAgICBwMnggPSBwb2ludHNbKGxlbmd0aC0xKSoyXTtcbiAgICBwMnkgPSBwb2ludHNbKGxlbmd0aC0xKSoyICsgMV07XG5cbiAgICBwZXJweCA9IC0ocDF5IC0gcDJ5KTtcbiAgICBwZXJweSA9IHAxeCAtIHAyeDtcblxuICAgIGRpc3QgPSBNYXRoLnNxcnQocGVycHgqcGVycHggKyBwZXJweSpwZXJweSk7XG4gICAgcGVycHggLz0gZGlzdDtcbiAgICBwZXJweSAvPSBkaXN0O1xuICAgIHBlcnB4ICo9IHdpZHRoO1xuICAgIHBlcnB5ICo9IHdpZHRoO1xuXG4gICAgdmVydHMucHVzaChwMnggLSBwZXJweCAsIHAyeSAtIHBlcnB5KTtcbiAgICB2ZXJ0cy5wdXNoKHIsIGcsIGIsIGFscGhhKTtcblxuICAgIHZlcnRzLnB1c2gocDJ4ICsgcGVycHggLCBwMnkgKyBwZXJweSk7XG4gICAgdmVydHMucHVzaChyLCBnLCBiLCBhbHBoYSk7XG5cbiAgICBpbmRpY2VzLnB1c2goaW5kZXhTdGFydCk7XG5cbiAgICBmb3IgKGkgPSAwOyBpIDwgaW5kZXhDb3VudDsgaSsrKVxuICAgIHtcbiAgICAgICAgaW5kaWNlcy5wdXNoKGluZGV4U3RhcnQrKyk7XG4gICAgfVxuXG4gICAgaW5kaWNlcy5wdXNoKGluZGV4U3RhcnQtMSk7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGJ1aWxkTGluZTsiLCJ2YXIgdXRpbHMgPSByZXF1aXJlKCcuLi8uLi8uLi91dGlscycpO1xuXG4vKipcbiAqIEJ1aWxkcyBhIHBvbHlnb24gdG8gZHJhd1xuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0gZ3JhcGhpY3NEYXRhIHtQSVhJLldlYkdMR3JhcGhpY3NEYXRhfSBUaGUgZ3JhcGhpY3Mgb2JqZWN0IGNvbnRhaW5pbmcgYWxsIHRoZSBuZWNlc3NhcnkgcHJvcGVydGllc1xuICogQHBhcmFtIHdlYkdMRGF0YSB7b2JqZWN0fSBhbiBvYmplY3QgY29udGFpbmluZyBhbGwgdGhlIHdlYkdMLXNwZWNpZmljIGluZm9ybWF0aW9uIHRvIGNyZWF0ZSB0aGlzIHNoYXBlXG4gKi9cbnZhciBidWlsZFBvbHkgPSBmdW5jdGlvbiAoZ3JhcGhpY3NEYXRhLCB3ZWJHTERhdGEpXG57XG4gICAgdmFyIHBvaW50cyA9IGdyYXBoaWNzRGF0YS5wb2ludHM7XG5cbiAgICBpZiAocG9pbnRzLmxlbmd0aCA8IDYpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gZ2V0IGZpcnN0IGFuZCBsYXN0IHBvaW50Li4gZmlndXJlIG91dCB0aGUgbWlkZGxlIVxuICAgIHZhciB2ZXJ0cyA9IHdlYkdMRGF0YS5wb2ludHM7XG4gICAgdmFyIGluZGljZXMgPSB3ZWJHTERhdGEuaW5kaWNlcztcblxuICAgIHZhciBsZW5ndGggPSBwb2ludHMubGVuZ3RoIC8gMjtcblxuICAgIC8vIHNvcnQgY29sb3JcbiAgICB2YXIgY29sb3IgPSB1dGlscy5oZXgycmdiKGdyYXBoaWNzRGF0YS5maWxsQ29sb3IpO1xuICAgIHZhciBhbHBoYSA9IGdyYXBoaWNzRGF0YS5maWxsQWxwaGE7XG4gICAgdmFyIHIgPSBjb2xvclswXSAqIGFscGhhO1xuICAgIHZhciBnID0gY29sb3JbMV0gKiBhbHBoYTtcbiAgICB2YXIgYiA9IGNvbG9yWzJdICogYWxwaGE7XG5cbiAgICB2YXIgdHJpYW5nbGVzID0gZWFyY3V0KHBvaW50cywgbnVsbCwgMik7XG5cbiAgICBpZiAoIXRyaWFuZ2xlcykge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgdmFyIHZlcnRQb3MgPSB2ZXJ0cy5sZW5ndGggLyA2O1xuXG4gICAgdmFyIGkgPSAwO1xuXG4gICAgZm9yIChpID0gMDsgaSA8IHRyaWFuZ2xlcy5sZW5ndGg7IGkrPTMpXG4gICAge1xuICAgICAgICBpbmRpY2VzLnB1c2godHJpYW5nbGVzW2ldICsgdmVydFBvcyk7XG4gICAgICAgIGluZGljZXMucHVzaCh0cmlhbmdsZXNbaV0gKyB2ZXJ0UG9zKTtcbiAgICAgICAgaW5kaWNlcy5wdXNoKHRyaWFuZ2xlc1tpKzFdICsgdmVydFBvcyk7XG4gICAgICAgIGluZGljZXMucHVzaCh0cmlhbmdsZXNbaSsyXSArdmVydFBvcyk7XG4gICAgICAgIGluZGljZXMucHVzaCh0cmlhbmdsZXNbaSsyXSArIHZlcnRQb3MpO1xuICAgIH1cblxuICAgIGZvciAoaSA9IDA7IGkgPCBsZW5ndGg7IGkrKylcbiAgICB7XG4gICAgICAgIHZlcnRzLnB1c2gocG9pbnRzW2kgKiAyXSwgcG9pbnRzW2kgKiAyICsgMV0sXG4gICAgICAgICAgICAgICAgICAgciwgZywgYiwgYWxwaGEpO1xuICAgIH1cblxuICAgIHJldHVybiB0cnVlO1xufTtcblxuXG5tb2R1bGUuZXhwb3J0cyA9IGJ1aWxkUG9seTtcbiIsInZhciBidWlsZExpbmUgPSByZXF1aXJlKCcuL2J1aWxkTGluZScpLFxuICAgIHV0aWxzID0gcmVxdWlyZSgnLi4vLi4vLi4vdXRpbHMnKTtcblxuLyoqXG4gKiBCdWlsZHMgYSByZWN0YW5nbGUgdG8gZHJhd1xuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0gZ3JhcGhpY3NEYXRhIHtQSVhJLkdyYXBoaWNzfSBUaGUgZ3JhcGhpY3Mgb2JqZWN0IGNvbnRhaW5pbmcgYWxsIHRoZSBuZWNlc3NhcnkgcHJvcGVydGllc1xuICogQHBhcmFtIHdlYkdMRGF0YSB7b2JqZWN0fSBhbiBvYmplY3QgY29udGFpbmluZyBhbGwgdGhlIHdlYkdMLXNwZWNpZmljIGluZm9ybWF0aW9uIHRvIGNyZWF0ZSB0aGlzIHNoYXBlXG4gKi9cbnZhciBidWlsZFJlY3RhbmdsZSA9IGZ1bmN0aW9uIChncmFwaGljc0RhdGEsIHdlYkdMRGF0YSlcbntcbiAgICAvLyAtLS0gLy9cbiAgICAvLyBuZWVkIHRvIGNvbnZlcnQgcG9pbnRzIHRvIGEgbmljZSByZWd1bGFyIGRhdGFcbiAgICAvL1xuICAgIHZhciByZWN0RGF0YSA9IGdyYXBoaWNzRGF0YS5zaGFwZTtcbiAgICB2YXIgeCA9IHJlY3REYXRhLng7XG4gICAgdmFyIHkgPSByZWN0RGF0YS55O1xuICAgIHZhciB3aWR0aCA9IHJlY3REYXRhLndpZHRoO1xuICAgIHZhciBoZWlnaHQgPSByZWN0RGF0YS5oZWlnaHQ7XG5cbiAgICBpZiAoZ3JhcGhpY3NEYXRhLmZpbGwpXG4gICAge1xuICAgICAgICB2YXIgY29sb3IgPSB1dGlscy5oZXgycmdiKGdyYXBoaWNzRGF0YS5maWxsQ29sb3IpO1xuICAgICAgICB2YXIgYWxwaGEgPSBncmFwaGljc0RhdGEuZmlsbEFscGhhO1xuXG4gICAgICAgIHZhciByID0gY29sb3JbMF0gKiBhbHBoYTtcbiAgICAgICAgdmFyIGcgPSBjb2xvclsxXSAqIGFscGhhO1xuICAgICAgICB2YXIgYiA9IGNvbG9yWzJdICogYWxwaGE7XG5cbiAgICAgICAgdmFyIHZlcnRzID0gd2ViR0xEYXRhLnBvaW50cztcbiAgICAgICAgdmFyIGluZGljZXMgPSB3ZWJHTERhdGEuaW5kaWNlcztcblxuICAgICAgICB2YXIgdmVydFBvcyA9IHZlcnRzLmxlbmd0aC82O1xuXG4gICAgICAgIC8vIHN0YXJ0XG4gICAgICAgIHZlcnRzLnB1c2goeCwgeSk7XG4gICAgICAgIHZlcnRzLnB1c2gociwgZywgYiwgYWxwaGEpO1xuXG4gICAgICAgIHZlcnRzLnB1c2goeCArIHdpZHRoLCB5KTtcbiAgICAgICAgdmVydHMucHVzaChyLCBnLCBiLCBhbHBoYSk7XG5cbiAgICAgICAgdmVydHMucHVzaCh4ICwgeSArIGhlaWdodCk7XG4gICAgICAgIHZlcnRzLnB1c2gociwgZywgYiwgYWxwaGEpO1xuXG4gICAgICAgIHZlcnRzLnB1c2goeCArIHdpZHRoLCB5ICsgaGVpZ2h0KTtcbiAgICAgICAgdmVydHMucHVzaChyLCBnLCBiLCBhbHBoYSk7XG5cbiAgICAgICAgLy8gaW5zZXJ0IDIgZGVhZCB0cmlhbmdsZXMuLlxuICAgICAgICBpbmRpY2VzLnB1c2godmVydFBvcywgdmVydFBvcywgdmVydFBvcysxLCB2ZXJ0UG9zKzIsIHZlcnRQb3MrMywgdmVydFBvcyszKTtcbiAgICB9XG5cbiAgICBpZiAoZ3JhcGhpY3NEYXRhLmxpbmVXaWR0aClcbiAgICB7XG4gICAgICAgIHZhciB0ZW1wUG9pbnRzID0gZ3JhcGhpY3NEYXRhLnBvaW50cztcblxuICAgICAgICBncmFwaGljc0RhdGEucG9pbnRzID0gW3gsIHksXG4gICAgICAgICAgICAgICAgICB4ICsgd2lkdGgsIHksXG4gICAgICAgICAgICAgICAgICB4ICsgd2lkdGgsIHkgKyBoZWlnaHQsXG4gICAgICAgICAgICAgICAgICB4LCB5ICsgaGVpZ2h0LFxuICAgICAgICAgICAgICAgICAgeCwgeV07XG5cblxuICAgICAgICBidWlsZExpbmUoZ3JhcGhpY3NEYXRhLCB3ZWJHTERhdGEpO1xuXG4gICAgICAgIGdyYXBoaWNzRGF0YS5wb2ludHMgPSB0ZW1wUG9pbnRzO1xuICAgIH1cbn07XG5cbm1vZHVsZS5leHBvcnRzID0gYnVpbGRSZWN0YW5nbGU7IiwidmFyIGJ1aWxkTGluZSA9IHJlcXVpcmUoJy4vYnVpbGRMaW5lJyksXG4gICAgdXRpbHMgPSByZXF1aXJlKCcuLi8uLi8uLi91dGlscycpO1xuICAgIFxuLyoqXG4gKiBCdWlsZHMgYSByb3VuZGVkIHJlY3RhbmdsZSB0byBkcmF3XG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSBncmFwaGljc0RhdGEge1BJWEkuR3JhcGhpY3N9IFRoZSBncmFwaGljcyBvYmplY3QgY29udGFpbmluZyBhbGwgdGhlIG5lY2Vzc2FyeSBwcm9wZXJ0aWVzXG4gKiBAcGFyYW0gd2ViR0xEYXRhIHtvYmplY3R9IGFuIG9iamVjdCBjb250YWluaW5nIGFsbCB0aGUgd2ViR0wtc3BlY2lmaWMgaW5mb3JtYXRpb24gdG8gY3JlYXRlIHRoaXMgc2hhcGVcbiAqL1xuYnVpbGRSb3VuZGVkUmVjdGFuZ2xlID0gZnVuY3Rpb24gKGdyYXBoaWNzRGF0YSwgd2ViR0xEYXRhKVxue1xuICAgIHZhciBycmVjdERhdGEgPSBncmFwaGljc0RhdGEuc2hhcGU7XG4gICAgdmFyIHggPSBycmVjdERhdGEueDtcbiAgICB2YXIgeSA9IHJyZWN0RGF0YS55O1xuICAgIHZhciB3aWR0aCA9IHJyZWN0RGF0YS53aWR0aDtcbiAgICB2YXIgaGVpZ2h0ID0gcnJlY3REYXRhLmhlaWdodDtcblxuICAgIHZhciByYWRpdXMgPSBycmVjdERhdGEucmFkaXVzO1xuXG4gICAgdmFyIHJlY1BvaW50cyA9IFtdO1xuICAgIHJlY1BvaW50cy5wdXNoKHgsIHkgKyByYWRpdXMpO1xuICAgIHRoaXMucXVhZHJhdGljQmV6aWVyQ3VydmUoeCwgeSArIGhlaWdodCAtIHJhZGl1cywgeCwgeSArIGhlaWdodCwgeCArIHJhZGl1cywgeSArIGhlaWdodCwgcmVjUG9pbnRzKTtcbiAgICB0aGlzLnF1YWRyYXRpY0JlemllckN1cnZlKHggKyB3aWR0aCAtIHJhZGl1cywgeSArIGhlaWdodCwgeCArIHdpZHRoLCB5ICsgaGVpZ2h0LCB4ICsgd2lkdGgsIHkgKyBoZWlnaHQgLSByYWRpdXMsIHJlY1BvaW50cyk7XG4gICAgdGhpcy5xdWFkcmF0aWNCZXppZXJDdXJ2ZSh4ICsgd2lkdGgsIHkgKyByYWRpdXMsIHggKyB3aWR0aCwgeSwgeCArIHdpZHRoIC0gcmFkaXVzLCB5LCByZWNQb2ludHMpO1xuICAgIHRoaXMucXVhZHJhdGljQmV6aWVyQ3VydmUoeCArIHJhZGl1cywgeSwgeCwgeSwgeCwgeSArIHJhZGl1cyArIDAuMDAwMDAwMDAwMSwgcmVjUG9pbnRzKTtcblxuICAgIC8vIHRoaXMgdGlueSBudW1iZXIgZGVhbHMgd2l0aCB0aGUgaXNzdWUgdGhhdCBvY2N1cnMgd2hlbiBwb2ludHMgb3ZlcmxhcCBhbmQgZWFyY3V0IGZhaWxzIHRvIHRyaWFuZ3VsYXRlIHRoZSBpdGVtLlxuICAgIC8vIFRPRE8gLSBmaXggdGhpcyBwcm9wZXJseSwgdGhpcyBpcyBub3QgdmVyeSBlbGVnYW50Li4gYnV0IGl0IHdvcmtzIGZvciBub3cuXG5cbiAgICBpZiAoZ3JhcGhpY3NEYXRhLmZpbGwpXG4gICAge1xuICAgICAgICB2YXIgY29sb3IgPSB1dGlscy5oZXgycmdiKGdyYXBoaWNzRGF0YS5maWxsQ29sb3IpO1xuICAgICAgICB2YXIgYWxwaGEgPSBncmFwaGljc0RhdGEuZmlsbEFscGhhO1xuXG4gICAgICAgIHZhciByID0gY29sb3JbMF0gKiBhbHBoYTtcbiAgICAgICAgdmFyIGcgPSBjb2xvclsxXSAqIGFscGhhO1xuICAgICAgICB2YXIgYiA9IGNvbG9yWzJdICogYWxwaGE7XG5cbiAgICAgICAgdmFyIHZlcnRzID0gd2ViR0xEYXRhLnBvaW50cztcbiAgICAgICAgdmFyIGluZGljZXMgPSB3ZWJHTERhdGEuaW5kaWNlcztcblxuICAgICAgICB2YXIgdmVjUG9zID0gdmVydHMubGVuZ3RoLzY7XG5cbiAgICAgICAgdmFyIHRyaWFuZ2xlcyA9IGVhcmN1dChyZWNQb2ludHMsIG51bGwsIDIpO1xuXG4gICAgICAgIHZhciBpID0gMDtcbiAgICAgICAgZm9yIChpID0gMDsgaSA8IHRyaWFuZ2xlcy5sZW5ndGg7IGkrPTMpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGluZGljZXMucHVzaCh0cmlhbmdsZXNbaV0gKyB2ZWNQb3MpO1xuICAgICAgICAgICAgaW5kaWNlcy5wdXNoKHRyaWFuZ2xlc1tpXSArIHZlY1Bvcyk7XG4gICAgICAgICAgICBpbmRpY2VzLnB1c2godHJpYW5nbGVzW2krMV0gKyB2ZWNQb3MpO1xuICAgICAgICAgICAgaW5kaWNlcy5wdXNoKHRyaWFuZ2xlc1tpKzJdICsgdmVjUG9zKTtcbiAgICAgICAgICAgIGluZGljZXMucHVzaCh0cmlhbmdsZXNbaSsyXSArIHZlY1Bvcyk7XG4gICAgICAgIH1cblxuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgcmVjUG9pbnRzLmxlbmd0aDsgaSsrKVxuICAgICAgICB7XG4gICAgICAgICAgICB2ZXJ0cy5wdXNoKHJlY1BvaW50c1tpXSwgcmVjUG9pbnRzWysraV0sIHIsIGcsIGIsIGFscGhhKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGlmIChncmFwaGljc0RhdGEubGluZVdpZHRoKVxuICAgIHtcbiAgICAgICAgdmFyIHRlbXBQb2ludHMgPSBncmFwaGljc0RhdGEucG9pbnRzO1xuXG4gICAgICAgIGdyYXBoaWNzRGF0YS5wb2ludHMgPSByZWNQb2ludHM7XG5cbiAgICAgICAgdGhpcy5idWlsZExpbmUoZ3JhcGhpY3NEYXRhLCB3ZWJHTERhdGEpO1xuXG4gICAgICAgIGdyYXBoaWNzRGF0YS5wb2ludHMgPSB0ZW1wUG9pbnRzO1xuICAgIH1cbn07XG5cbi8qKlxuICogQ2FsY3VsYXRlIHRoZSBwb2ludHMgZm9yIGEgcXVhZHJhdGljIGJlemllciBjdXJ2ZS4gKGhlbHBlciBmdW5jdGlvbi4uKVxuICogQmFzZWQgb246IGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vcXVlc3Rpb25zLzc4NTA5Ny9ob3ctZG8taS1pbXBsZW1lbnQtYS1iZXppZXItY3VydmUtaW4tY1xuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0gZnJvbVgge251bWJlcn0gT3JpZ2luIHBvaW50IHhcbiAqIEBwYXJhbSBmcm9tWSB7bnVtYmVyfSBPcmlnaW4gcG9pbnQgeFxuICogQHBhcmFtIGNwWCB7bnVtYmVyfSBDb250cm9sIHBvaW50IHhcbiAqIEBwYXJhbSBjcFkge251bWJlcn0gQ29udHJvbCBwb2ludCB5XG4gKiBAcGFyYW0gdG9YIHtudW1iZXJ9IERlc3RpbmF0aW9uIHBvaW50IHhcbiAqIEBwYXJhbSB0b1kge251bWJlcn0gRGVzdGluYXRpb24gcG9pbnQgeVxuICogQHBhcmFtIFtvdXRdIHtudW1iZXJbXX0gVGhlIG91dHB1dCBhcnJheSB0byBhZGQgcG9pbnRzIGludG8uIElmIG5vdCBwYXNzZWQsIGEgbmV3IGFycmF5IGlzIGNyZWF0ZWQuXG4gKiBAcmV0dXJuIHtudW1iZXJbXX0gYW4gYXJyYXkgb2YgcG9pbnRzXG4gKi9cbnF1YWRyYXRpY0JlemllckN1cnZlID0gZnVuY3Rpb24gKGZyb21YLCBmcm9tWSwgY3BYLCBjcFksIHRvWCwgdG9ZLCBvdXQpXG57XG4gICAgdmFyIHhhLFxuICAgICAgICB5YSxcbiAgICAgICAgeGIsXG4gICAgICAgIHliLFxuICAgICAgICB4LFxuICAgICAgICB5LFxuICAgICAgICBuID0gMjAsXG4gICAgICAgIHBvaW50cyA9IG91dCB8fCBbXTtcblxuICAgIGZ1bmN0aW9uIGdldFB0KG4xICwgbjIsIHBlcmMpIHtcbiAgICAgICAgdmFyIGRpZmYgPSBuMiAtIG4xO1xuXG4gICAgICAgIHJldHVybiBuMSArICggZGlmZiAqIHBlcmMgKTtcbiAgICB9XG5cbiAgICB2YXIgaiA9IDA7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPD0gbjsgaSsrICkge1xuICAgICAgICBqID0gaSAvIG47XG5cbiAgICAgICAgLy8gVGhlIEdyZWVuIExpbmVcbiAgICAgICAgeGEgPSBnZXRQdCggZnJvbVggLCBjcFggLCBqICk7XG4gICAgICAgIHlhID0gZ2V0UHQoIGZyb21ZICwgY3BZICwgaiApO1xuICAgICAgICB4YiA9IGdldFB0KCBjcFggLCB0b1ggLCBqICk7XG4gICAgICAgIHliID0gZ2V0UHQoIGNwWSAsIHRvWSAsIGogKTtcblxuICAgICAgICAvLyBUaGUgQmxhY2sgRG90XG4gICAgICAgIHggPSBnZXRQdCggeGEgLCB4YiAsIGogKTtcbiAgICAgICAgeSA9IGdldFB0KCB5YSAsIHliICwgaiApO1xuXG4gICAgICAgIHBvaW50cy5wdXNoKHgsIHkpO1xuICAgIH1cblxuICAgIHJldHVybiBwb2ludHM7XG59O1xuXG5cbm1vZHVsZS5leHBvcnRzID0gYnVpbGRSb3VuZGVkUmVjdGFuZ2xlOyIsIi8qKlxuICogQGZpbGUgICAgICAgIE1haW4gZXhwb3J0IG9mIHRoZSBQSVhJIGNvcmUgbGlicmFyeVxuICogQGF1dGhvciAgICAgIE1hdCBHcm92ZXMgPG1hdEBnb29kYm95ZGlnaXRhbC5jb20+XG4gKiBAY29weXJpZ2h0ICAgMjAxMy0yMDE1IEdvb2RCb3lEaWdpdGFsXG4gKiBAbGljZW5zZSAgICAge0BsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9waXhpanMvcGl4aS5qcy9ibG9iL21hc3Rlci9MSUNFTlNFfE1JVCBMaWNlbnNlfVxuICovXG5cbi8qKlxuICogQG5hbWVzcGFjZSBQSVhJXG4gKi9cbi8vIGV4cG9ydCBjb3JlIGFuZCBjb25zdC4gV2UgYXNzaWduIGNvcmUgdG8gY29uc3Qgc28gdGhhdCB0aGUgbm9uLXJlZmVyZW5jZSB0eXBlcyBpbiBjb25zdCByZW1haW4gaW4tdGFjdFxudmFyIGNvcmUgPSBtb2R1bGUuZXhwb3J0cyA9IE9iamVjdC5hc3NpZ24ocmVxdWlyZSgnLi9jb25zdCcpLCByZXF1aXJlKCcuL21hdGgnKSwge1xuICAgIC8vIHV0aWxzXG4gICAgdXRpbHM6IHJlcXVpcmUoJy4vdXRpbHMnKSxcbiAgICB0aWNrZXI6IHJlcXVpcmUoJy4vdGlja2VyJyksXG5cbiAgICAvLyBkaXNwbGF5XG4gICAgRGlzcGxheU9iamVjdDogICAgICAgICAgcmVxdWlyZSgnLi9kaXNwbGF5L0Rpc3BsYXlPYmplY3QnKSxcbiAgICBDb250YWluZXI6ICAgICAgICAgICAgICByZXF1aXJlKCcuL2Rpc3BsYXkvQ29udGFpbmVyJyksXG5cbiAgICAvLyBzcHJpdGVzXG4gICAgU3ByaXRlOiAgICAgICAgICAgICAgICAgcmVxdWlyZSgnLi9zcHJpdGVzL1Nwcml0ZScpLFxuICAgIFBhcnRpY2xlQ29udGFpbmVyOiAgICAgIHJlcXVpcmUoJy4vcGFydGljbGVzL1BhcnRpY2xlQ29udGFpbmVyJyksXG4gICAgU3ByaXRlUmVuZGVyZXI6ICAgICAgICAgcmVxdWlyZSgnLi9zcHJpdGVzL3dlYmdsL1Nwcml0ZVJlbmRlcmVyJyksXG4gICAgUGFydGljbGVSZW5kZXJlcjogICAgICAgcmVxdWlyZSgnLi9wYXJ0aWNsZXMvd2ViZ2wvUGFydGljbGVSZW5kZXJlcicpLFxuXG4gICAgLy8gdGV4dFxuICAgIFRleHQ6ICAgICAgICAgICAgICAgICAgIHJlcXVpcmUoJy4vdGV4dC9UZXh0JyksXG5cbiAgICAvLyBwcmltaXRpdmVzXG4gICAgR3JhcGhpY3M6ICAgICAgICAgICAgICAgcmVxdWlyZSgnLi9ncmFwaGljcy9HcmFwaGljcycpLFxuICAgIEdyYXBoaWNzRGF0YTogICAgICAgICAgIHJlcXVpcmUoJy4vZ3JhcGhpY3MvR3JhcGhpY3NEYXRhJyksXG4gICAgR3JhcGhpY3NSZW5kZXJlcjogICAgICAgcmVxdWlyZSgnLi9ncmFwaGljcy93ZWJnbC9HcmFwaGljc1JlbmRlcmVyJyksXG5cbiAgICAvLyB0ZXh0dXJlc1xuICAgIFRleHR1cmU6ICAgICAgICAgICAgICAgIHJlcXVpcmUoJy4vdGV4dHVyZXMvVGV4dHVyZScpLFxuICAgIEJhc2VUZXh0dXJlOiAgICAgICAgICAgIHJlcXVpcmUoJy4vdGV4dHVyZXMvQmFzZVRleHR1cmUnKSxcbiAgICBSZW5kZXJUZXh0dXJlOiAgICAgICAgICByZXF1aXJlKCcuL3RleHR1cmVzL1JlbmRlclRleHR1cmUnKSxcbiAgICBWaWRlb0Jhc2VUZXh0dXJlOiAgICAgICByZXF1aXJlKCcuL3RleHR1cmVzL1ZpZGVvQmFzZVRleHR1cmUnKSxcbiAgICBUZXh0dXJlVXZzOiAgICAgICAgICAgICByZXF1aXJlKCcuL3RleHR1cmVzL1RleHR1cmVVdnMnKSxcblxuICAgIC8vIHJlbmRlcmVycyAtIGNhbnZhc1xuICAgIENhbnZhc1JlbmRlcmVyOiAgICAgICAgIHJlcXVpcmUoJy4vcmVuZGVyZXJzL2NhbnZhcy9DYW52YXNSZW5kZXJlcicpLFxuICAgIENhbnZhc0dyYXBoaWNzOiAgICAgICAgIHJlcXVpcmUoJy4vcmVuZGVyZXJzL2NhbnZhcy91dGlscy9DYW52YXNHcmFwaGljcycpLFxuICAgIENhbnZhc0J1ZmZlcjogICAgICAgICAgIHJlcXVpcmUoJy4vcmVuZGVyZXJzL2NhbnZhcy91dGlscy9DYW52YXNCdWZmZXInKSxcblxuICAgIC8vIHJlbmRlcmVycyAtIHdlYmdsXG4gICAgV2ViR0xSZW5kZXJlcjogICAgICAgICAgcmVxdWlyZSgnLi9yZW5kZXJlcnMvd2ViZ2wvV2ViR0xSZW5kZXJlcicpLFxuICAgIFdlYkdMTWFuYWdlcjogICAgICAgICAgcmVxdWlyZSgnLi9yZW5kZXJlcnMvd2ViZ2wvbWFuYWdlcnMvV2ViR0xNYW5hZ2VyJyksXG4gICAgU2hhZGVyTWFuYWdlcjogICAgICAgICAgcmVxdWlyZSgnLi9yZW5kZXJlcnMvd2ViZ2wvbWFuYWdlcnMvU2hhZGVyTWFuYWdlcicpLFxuICAgIFNoYWRlcjogICAgICAgICAgICAgICAgIHJlcXVpcmUoJy4vcmVuZGVyZXJzL3dlYmdsL3NoYWRlcnMvU2hhZGVyJyksXG4gICAgT2JqZWN0UmVuZGVyZXI6ICAgICAgICAgcmVxdWlyZSgnLi9yZW5kZXJlcnMvd2ViZ2wvdXRpbHMvT2JqZWN0UmVuZGVyZXInKSxcbiAgICBSZW5kZXJUYXJnZXQ6ICAgICAgICAgICByZXF1aXJlKCcuL3JlbmRlcmVycy93ZWJnbC91dGlscy9SZW5kZXJUYXJnZXQnKSxcblxuICAgIC8vIGZpbHRlcnMgLSB3ZWJnbFxuICAgIEFic3RyYWN0RmlsdGVyOiAgICAgICAgIHJlcXVpcmUoJy4vcmVuZGVyZXJzL3dlYmdsL2ZpbHRlcnMvQWJzdHJhY3RGaWx0ZXInKSxcbiAgICBGWEFBRmlsdGVyOiAgICAgICAgICAgICByZXF1aXJlKCcuL3JlbmRlcmVycy93ZWJnbC9maWx0ZXJzL0ZYQUFGaWx0ZXInKSxcbiAgICBTcHJpdGVNYXNrRmlsdGVyOiAgICAgICByZXF1aXJlKCcuL3JlbmRlcmVycy93ZWJnbC9maWx0ZXJzL1Nwcml0ZU1hc2tGaWx0ZXInKSxcblxuICAgIGdsQ29yZTogICAgICAgICAgICAgICAgICAgcmVxdWlyZSgncGl4aS1nbC1jb3JlJyksXG5cbiAgICAvKipcbiAgICAgKiBUaGlzIGhlbHBlciBmdW5jdGlvbiB3aWxsIGF1dG9tYXRpY2FsbHkgZGV0ZWN0IHdoaWNoIHJlbmRlcmVyIHlvdSBzaG91bGQgYmUgdXNpbmcuXG4gICAgICogV2ViR0wgaXMgdGhlIHByZWZlcnJlZCByZW5kZXJlciBhcyBpdCBpcyBhIGxvdCBmYXN0ZXIuIElmIHdlYkdMIGlzIG5vdCBzdXBwb3J0ZWQgYnlcbiAgICAgKiB0aGUgYnJvd3NlciB0aGVuIHRoaXMgZnVuY3Rpb24gd2lsbCByZXR1cm4gYSBjYW52YXMgcmVuZGVyZXJcbiAgICAgKlxuICAgICAqIEBtZW1iZXJvZiBQSVhJXG4gICAgICogQHBhcmFtIHdpZHRoPTgwMCB7bnVtYmVyfSB0aGUgd2lkdGggb2YgdGhlIHJlbmRlcmVycyB2aWV3XG4gICAgICogQHBhcmFtIGhlaWdodD02MDAge251bWJlcn0gdGhlIGhlaWdodCBvZiB0aGUgcmVuZGVyZXJzIHZpZXdcbiAgICAgKiBAcGFyYW0gW29wdGlvbnNdIHtvYmplY3R9IFRoZSBvcHRpb25hbCByZW5kZXJlciBwYXJhbWV0ZXJzXG4gICAgICogQHBhcmFtIFtvcHRpb25zLnZpZXddIHtIVE1MQ2FudmFzRWxlbWVudH0gdGhlIGNhbnZhcyB0byB1c2UgYXMgYSB2aWV3LCBvcHRpb25hbFxuICAgICAqIEBwYXJhbSBbb3B0aW9ucy50cmFuc3BhcmVudD1mYWxzZV0ge2Jvb2xlYW59IElmIHRoZSByZW5kZXIgdmlldyBpcyB0cmFuc3BhcmVudCwgZGVmYXVsdCBmYWxzZVxuICAgICAqIEBwYXJhbSBbb3B0aW9ucy5hbnRpYWxpYXM9ZmFsc2VdIHtib29sZWFufSBzZXRzIGFudGlhbGlhcyAob25seSBhcHBsaWNhYmxlIGluIGNocm9tZSBhdCB0aGUgbW9tZW50KVxuICAgICAqIEBwYXJhbSBbb3B0aW9ucy5wcmVzZXJ2ZURyYXdpbmdCdWZmZXI9ZmFsc2VdIHtib29sZWFufSBlbmFibGVzIGRyYXdpbmcgYnVmZmVyIHByZXNlcnZhdGlvbiwgZW5hYmxlIHRoaXMgaWYgeW91XG4gICAgICogICAgICBuZWVkIHRvIGNhbGwgdG9EYXRhVXJsIG9uIHRoZSB3ZWJnbCBjb250ZXh0XG4gICAgICogQHBhcmFtIFtvcHRpb25zLnJlc29sdXRpb249MV0ge251bWJlcn0gdGhlIHJlc29sdXRpb24gb2YgdGhlIHJlbmRlcmVyLCByZXRpbmEgd291bGQgYmUgMlxuICAgICAqIEBwYXJhbSBbbm9XZWJHTD1mYWxzZV0ge2Jvb2xlYW59IHByZXZlbnRzIHNlbGVjdGlvbiBvZiBXZWJHTCByZW5kZXJlciwgZXZlbiBpZiBzdWNoIGlzIHByZXNlbnRcbiAgICAgKlxuICAgICAqIEByZXR1cm4ge1dlYkdMUmVuZGVyZXJ8Q2FudmFzUmVuZGVyZXJ9IFJldHVybnMgV2ViR0wgcmVuZGVyZXIgaWYgYXZhaWxhYmxlLCBvdGhlcndpc2UgQ2FudmFzUmVuZGVyZXJcbiAgICAgKi9cbiAgICBhdXRvRGV0ZWN0UmVuZGVyZXI6IGZ1bmN0aW9uICh3aWR0aCwgaGVpZ2h0LCBvcHRpb25zLCBub1dlYkdMKVxuICAgIHtcbiAgICAgICAgd2lkdGggPSB3aWR0aCB8fCA4MDA7XG4gICAgICAgIGhlaWdodCA9IGhlaWdodCB8fCA2MDA7XG5cbiAgICAgICAgaWYgKCFub1dlYkdMICYmIGNvcmUudXRpbHMuaXNXZWJHTFN1cHBvcnRlZCgpKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IGNvcmUuV2ViR0xSZW5kZXJlcih3aWR0aCwgaGVpZ2h0LCBvcHRpb25zKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBuZXcgY29yZS5DYW52YXNSZW5kZXJlcih3aWR0aCwgaGVpZ2h0LCBvcHRpb25zKTtcbiAgICB9XG59KTtcbiIsIi8vIEB0b2RvIC0gaWdub3JlIHRoZSB0b28gbWFueSBwYXJhbWV0ZXJzIHdhcm5pbmcgZm9yIG5vd1xuLy8gc2hvdWxkIGVpdGhlciBmaXggaXQgb3IgY2hhbmdlIHRoZSBqc2hpbnQgY29uZmlnXG4vLyBqc2hpbnQgLVcwNzJcblxudmFyIFBvaW50ID0gcmVxdWlyZSgnLi9Qb2ludCcpO1xuXG4vKipcbiAqIFRoZSBwaXhpIE1hdHJpeCBjbGFzcyBhcyBhbiBvYmplY3QsIHdoaWNoIG1ha2VzIGl0IGEgbG90IGZhc3RlcixcbiAqIGhlcmUgaXMgYSByZXByZXNlbnRhdGlvbiBvZiBpdCA6XG4gKiB8IGEgfCBiIHwgdHh8XG4gKiB8IGMgfCBkIHwgdHl8XG4gKiB8IDAgfCAwIHwgMSB8XG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICovXG5mdW5jdGlvbiBNYXRyaXgoKVxue1xuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAxXG4gICAgICovXG4gICAgdGhpcy5hID0gMTtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAwXG4gICAgICovXG4gICAgdGhpcy5iID0gMDtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAwXG4gICAgICovXG4gICAgdGhpcy5jID0gMDtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAxXG4gICAgICovXG4gICAgdGhpcy5kID0gMTtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAwXG4gICAgICovXG4gICAgdGhpcy50eCA9IDA7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMFxuICAgICAqL1xuICAgIHRoaXMudHkgPSAwO1xufVxuXG5NYXRyaXgucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gTWF0cml4O1xubW9kdWxlLmV4cG9ydHMgPSBNYXRyaXg7XG5cbi8qKlxuICogQ3JlYXRlcyBhIE1hdHJpeCBvYmplY3QgYmFzZWQgb24gdGhlIGdpdmVuIGFycmF5LiBUaGUgRWxlbWVudCB0byBNYXRyaXggbWFwcGluZyBvcmRlciBpcyBhcyBmb2xsb3dzOlxuICpcbiAqIGEgPSBhcnJheVswXVxuICogYiA9IGFycmF5WzFdXG4gKiBjID0gYXJyYXlbM11cbiAqIGQgPSBhcnJheVs0XVxuICogdHggPSBhcnJheVsyXVxuICogdHkgPSBhcnJheVs1XVxuICpcbiAqIEBwYXJhbSBhcnJheSB7bnVtYmVyW119IFRoZSBhcnJheSB0aGF0IHRoZSBtYXRyaXggd2lsbCBiZSBwb3B1bGF0ZWQgZnJvbS5cbiAqL1xuTWF0cml4LnByb3RvdHlwZS5mcm9tQXJyYXkgPSBmdW5jdGlvbiAoYXJyYXkpXG57XG4gICAgdGhpcy5hID0gYXJyYXlbMF07XG4gICAgdGhpcy5iID0gYXJyYXlbMV07XG4gICAgdGhpcy5jID0gYXJyYXlbM107XG4gICAgdGhpcy5kID0gYXJyYXlbNF07XG4gICAgdGhpcy50eCA9IGFycmF5WzJdO1xuICAgIHRoaXMudHkgPSBhcnJheVs1XTtcbn07XG5cblxuLyoqXG4gKiBzZXRzIHRoZSBtYXRyaXggcHJvcGVydGllc1xuICpcbiAqIEBwYXJhbSB7bnVtYmVyfSBhXG4gKiBAcGFyYW0ge251bWJlcn0gYlxuICogQHBhcmFtIHtudW1iZXJ9IGNcbiAqIEBwYXJhbSB7bnVtYmVyfSBkXG4gKiBAcGFyYW0ge251bWJlcn0gdHhcbiAqIEBwYXJhbSB7bnVtYmVyfSB0eVxuICpcbiAqIEByZXR1cm4ge1BJWEkuTWF0cml4fSBUaGlzIG1hdHJpeC4gR29vZCBmb3IgY2hhaW5pbmcgbWV0aG9kIGNhbGxzLlxuICovXG5NYXRyaXgucHJvdG90eXBlLnNldCA9IGZ1bmN0aW9uIChhLCBiLCBjLCBkLCB0eCwgdHkpXG57XG4gICAgdGhpcy5hID0gYTtcbiAgICB0aGlzLmIgPSBiO1xuICAgIHRoaXMuYyA9IGM7XG4gICAgdGhpcy5kID0gZDtcbiAgICB0aGlzLnR4ID0gdHg7XG4gICAgdGhpcy50eSA9IHR5O1xuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG5cbi8qKlxuICogQ3JlYXRlcyBhbiBhcnJheSBmcm9tIHRoZSBjdXJyZW50IE1hdHJpeCBvYmplY3QuXG4gKlxuICogQHBhcmFtIHRyYW5zcG9zZSB7Ym9vbGVhbn0gV2hldGhlciB3ZSBuZWVkIHRvIHRyYW5zcG9zZSB0aGUgbWF0cml4IG9yIG5vdFxuICogQHBhcmFtIFtvdXRdIHtBcnJheX0gSWYgcHJvdmlkZWQgdGhlIGFycmF5IHdpbGwgYmUgYXNzaWduZWQgdG8gb3V0XG4gKiBAcmV0dXJuIHtudW1iZXJbXX0gdGhlIG5ld2x5IGNyZWF0ZWQgYXJyYXkgd2hpY2ggY29udGFpbnMgdGhlIG1hdHJpeFxuICovXG5NYXRyaXgucHJvdG90eXBlLnRvQXJyYXkgPSBmdW5jdGlvbiAodHJhbnNwb3NlLCBvdXQpXG57XG4gICAgaWYgKCF0aGlzLmFycmF5KVxuICAgIHtcbiAgICAgICAgdGhpcy5hcnJheSA9IG5ldyBGbG9hdDMyQXJyYXkoOSk7XG4gICAgfVxuXG4gICAgdmFyIGFycmF5ID0gb3V0IHx8IHRoaXMuYXJyYXk7XG5cbiAgICBpZiAodHJhbnNwb3NlKVxuICAgIHtcbiAgICAgICAgYXJyYXlbMF0gPSB0aGlzLmE7XG4gICAgICAgIGFycmF5WzFdID0gdGhpcy5iO1xuICAgICAgICBhcnJheVsyXSA9IDA7XG4gICAgICAgIGFycmF5WzNdID0gdGhpcy5jO1xuICAgICAgICBhcnJheVs0XSA9IHRoaXMuZDtcbiAgICAgICAgYXJyYXlbNV0gPSAwO1xuICAgICAgICBhcnJheVs2XSA9IHRoaXMudHg7XG4gICAgICAgIGFycmF5WzddID0gdGhpcy50eTtcbiAgICAgICAgYXJyYXlbOF0gPSAxO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICBhcnJheVswXSA9IHRoaXMuYTtcbiAgICAgICAgYXJyYXlbMV0gPSB0aGlzLmM7XG4gICAgICAgIGFycmF5WzJdID0gdGhpcy50eDtcbiAgICAgICAgYXJyYXlbM10gPSB0aGlzLmI7XG4gICAgICAgIGFycmF5WzRdID0gdGhpcy5kO1xuICAgICAgICBhcnJheVs1XSA9IHRoaXMudHk7XG4gICAgICAgIGFycmF5WzZdID0gMDtcbiAgICAgICAgYXJyYXlbN10gPSAwO1xuICAgICAgICBhcnJheVs4XSA9IDE7XG4gICAgfVxuXG4gICAgcmV0dXJuIGFycmF5O1xufTtcblxuLyoqXG4gKiBHZXQgYSBuZXcgcG9zaXRpb24gd2l0aCB0aGUgY3VycmVudCB0cmFuc2Zvcm1hdGlvbiBhcHBsaWVkLlxuICogQ2FuIGJlIHVzZWQgdG8gZ28gZnJvbSBhIGNoaWxkJ3MgY29vcmRpbmF0ZSBzcGFjZSB0byB0aGUgd29ybGQgY29vcmRpbmF0ZSBzcGFjZS4gKGUuZy4gcmVuZGVyaW5nKVxuICpcbiAqIEBwYXJhbSBwb3Mge1BJWEkuUG9pbnR9IFRoZSBvcmlnaW5cbiAqIEBwYXJhbSBbbmV3UG9zXSB7UElYSS5Qb2ludH0gVGhlIHBvaW50IHRoYXQgdGhlIG5ldyBwb3NpdGlvbiBpcyBhc3NpZ25lZCB0byAoYWxsb3dlZCB0byBiZSBzYW1lIGFzIGlucHV0KVxuICogQHJldHVybiB7UElYSS5Qb2ludH0gVGhlIG5ldyBwb2ludCwgdHJhbnNmb3JtZWQgdGhyb3VnaCB0aGlzIG1hdHJpeFxuICovXG5NYXRyaXgucHJvdG90eXBlLmFwcGx5ID0gZnVuY3Rpb24gKHBvcywgbmV3UG9zKVxue1xuICAgIG5ld1BvcyA9IG5ld1BvcyB8fCBuZXcgUG9pbnQoKTtcblxuICAgIHZhciB4ID0gcG9zLng7XG4gICAgdmFyIHkgPSBwb3MueTtcblxuICAgIG5ld1Bvcy54ID0gdGhpcy5hICogeCArIHRoaXMuYyAqIHkgKyB0aGlzLnR4O1xuICAgIG5ld1Bvcy55ID0gdGhpcy5iICogeCArIHRoaXMuZCAqIHkgKyB0aGlzLnR5O1xuXG4gICAgcmV0dXJuIG5ld1Bvcztcbn07XG5cbi8qKlxuICogR2V0IGEgbmV3IHBvc2l0aW9uIHdpdGggdGhlIGludmVyc2Ugb2YgdGhlIGN1cnJlbnQgdHJhbnNmb3JtYXRpb24gYXBwbGllZC5cbiAqIENhbiBiZSB1c2VkIHRvIGdvIGZyb20gdGhlIHdvcmxkIGNvb3JkaW5hdGUgc3BhY2UgdG8gYSBjaGlsZCdzIGNvb3JkaW5hdGUgc3BhY2UuIChlLmcuIGlucHV0KVxuICpcbiAqIEBwYXJhbSBwb3Mge1BJWEkuUG9pbnR9IFRoZSBvcmlnaW5cbiAqIEBwYXJhbSBbbmV3UG9zXSB7UElYSS5Qb2ludH0gVGhlIHBvaW50IHRoYXQgdGhlIG5ldyBwb3NpdGlvbiBpcyBhc3NpZ25lZCB0byAoYWxsb3dlZCB0byBiZSBzYW1lIGFzIGlucHV0KVxuICogQHJldHVybiB7UElYSS5Qb2ludH0gVGhlIG5ldyBwb2ludCwgaW52ZXJzZS10cmFuc2Zvcm1lZCB0aHJvdWdoIHRoaXMgbWF0cml4XG4gKi9cbk1hdHJpeC5wcm90b3R5cGUuYXBwbHlJbnZlcnNlID0gZnVuY3Rpb24gKHBvcywgbmV3UG9zKVxue1xuICAgIG5ld1BvcyA9IG5ld1BvcyB8fCBuZXcgUG9pbnQoKTtcblxuICAgIHZhciBpZCA9IDEgLyAodGhpcy5hICogdGhpcy5kICsgdGhpcy5jICogLXRoaXMuYik7XG5cbiAgICB2YXIgeCA9IHBvcy54O1xuICAgIHZhciB5ID0gcG9zLnk7XG5cbiAgICBuZXdQb3MueCA9IHRoaXMuZCAqIGlkICogeCArIC10aGlzLmMgKiBpZCAqIHkgKyAodGhpcy50eSAqIHRoaXMuYyAtIHRoaXMudHggKiB0aGlzLmQpICogaWQ7XG4gICAgbmV3UG9zLnkgPSB0aGlzLmEgKiBpZCAqIHkgKyAtdGhpcy5iICogaWQgKiB4ICsgKC10aGlzLnR5ICogdGhpcy5hICsgdGhpcy50eCAqIHRoaXMuYikgKiBpZDtcblxuICAgIHJldHVybiBuZXdQb3M7XG59O1xuXG4vKipcbiAqIFRyYW5zbGF0ZXMgdGhlIG1hdHJpeCBvbiB0aGUgeCBhbmQgeS5cbiAqXG4gKiBAcGFyYW0ge251bWJlcn0geFxuICogQHBhcmFtIHtudW1iZXJ9IHlcbiAqIEByZXR1cm4ge1BJWEkuTWF0cml4fSBUaGlzIG1hdHJpeC4gR29vZCBmb3IgY2hhaW5pbmcgbWV0aG9kIGNhbGxzLlxuICovXG5NYXRyaXgucHJvdG90eXBlLnRyYW5zbGF0ZSA9IGZ1bmN0aW9uICh4LCB5KVxue1xuICAgIHRoaXMudHggKz0geDtcbiAgICB0aGlzLnR5ICs9IHk7XG5cbiAgICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogQXBwbGllcyBhIHNjYWxlIHRyYW5zZm9ybWF0aW9uIHRvIHRoZSBtYXRyaXguXG4gKlxuICogQHBhcmFtIHtudW1iZXJ9IHggVGhlIGFtb3VudCB0byBzY2FsZSBob3Jpem9udGFsbHlcbiAqIEBwYXJhbSB7bnVtYmVyfSB5IFRoZSBhbW91bnQgdG8gc2NhbGUgdmVydGljYWxseVxuICogQHJldHVybiB7UElYSS5NYXRyaXh9IFRoaXMgbWF0cml4LiBHb29kIGZvciBjaGFpbmluZyBtZXRob2QgY2FsbHMuXG4gKi9cbk1hdHJpeC5wcm90b3R5cGUuc2NhbGUgPSBmdW5jdGlvbiAoeCwgeSlcbntcbiAgICB0aGlzLmEgKj0geDtcbiAgICB0aGlzLmQgKj0geTtcbiAgICB0aGlzLmMgKj0geDtcbiAgICB0aGlzLmIgKj0geTtcbiAgICB0aGlzLnR4ICo9IHg7XG4gICAgdGhpcy50eSAqPSB5O1xuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG5cbi8qKlxuICogQXBwbGllcyBhIHJvdGF0aW9uIHRyYW5zZm9ybWF0aW9uIHRvIHRoZSBtYXRyaXguXG4gKlxuICogQHBhcmFtIHtudW1iZXJ9IGFuZ2xlIC0gVGhlIGFuZ2xlIGluIHJhZGlhbnMuXG4gKiBAcmV0dXJuIHtQSVhJLk1hdHJpeH0gVGhpcyBtYXRyaXguIEdvb2QgZm9yIGNoYWluaW5nIG1ldGhvZCBjYWxscy5cbiAqL1xuTWF0cml4LnByb3RvdHlwZS5yb3RhdGUgPSBmdW5jdGlvbiAoYW5nbGUpXG57XG4gICAgdmFyIGNvcyA9IE1hdGguY29zKCBhbmdsZSApO1xuICAgIHZhciBzaW4gPSBNYXRoLnNpbiggYW5nbGUgKTtcblxuICAgIHZhciBhMSA9IHRoaXMuYTtcbiAgICB2YXIgYzEgPSB0aGlzLmM7XG4gICAgdmFyIHR4MSA9IHRoaXMudHg7XG5cbiAgICB0aGlzLmEgPSBhMSAqIGNvcy10aGlzLmIgKiBzaW47XG4gICAgdGhpcy5iID0gYTEgKiBzaW4rdGhpcy5iICogY29zO1xuICAgIHRoaXMuYyA9IGMxICogY29zLXRoaXMuZCAqIHNpbjtcbiAgICB0aGlzLmQgPSBjMSAqIHNpbit0aGlzLmQgKiBjb3M7XG4gICAgdGhpcy50eCA9IHR4MSAqIGNvcyAtIHRoaXMudHkgKiBzaW47XG4gICAgdGhpcy50eSA9IHR4MSAqIHNpbiArIHRoaXMudHkgKiBjb3M7XG5cbiAgICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogQXBwZW5kcyB0aGUgZ2l2ZW4gTWF0cml4IHRvIHRoaXMgTWF0cml4LlxuICpcbiAqIEBwYXJhbSB7UElYSS5NYXRyaXh9IG1hdHJpeFxuICogQHJldHVybiB7UElYSS5NYXRyaXh9IFRoaXMgbWF0cml4LiBHb29kIGZvciBjaGFpbmluZyBtZXRob2QgY2FsbHMuXG4gKi9cbk1hdHJpeC5wcm90b3R5cGUuYXBwZW5kID0gZnVuY3Rpb24gKG1hdHJpeClcbntcbiAgICB2YXIgYTEgPSB0aGlzLmE7XG4gICAgdmFyIGIxID0gdGhpcy5iO1xuICAgIHZhciBjMSA9IHRoaXMuYztcbiAgICB2YXIgZDEgPSB0aGlzLmQ7XG5cbiAgICB0aGlzLmEgID0gbWF0cml4LmEgKiBhMSArIG1hdHJpeC5iICogYzE7XG4gICAgdGhpcy5iICA9IG1hdHJpeC5hICogYjEgKyBtYXRyaXguYiAqIGQxO1xuICAgIHRoaXMuYyAgPSBtYXRyaXguYyAqIGExICsgbWF0cml4LmQgKiBjMTtcbiAgICB0aGlzLmQgID0gbWF0cml4LmMgKiBiMSArIG1hdHJpeC5kICogZDE7XG5cbiAgICB0aGlzLnR4ID0gbWF0cml4LnR4ICogYTEgKyBtYXRyaXgudHkgKiBjMSArIHRoaXMudHg7XG4gICAgdGhpcy50eSA9IG1hdHJpeC50eCAqIGIxICsgbWF0cml4LnR5ICogZDEgKyB0aGlzLnR5O1xuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIFNldHMgdGhlIG1hdHJpeCBiYXNlZCBvbiBhbGwgdGhlIGF2YWlsYWJsZSBwcm9wZXJ0aWVzXG4gKlxuICogQHBhcmFtIHtudW1iZXJ9IHhcbiAqIEBwYXJhbSB7bnVtYmVyfSB5XG4gKiBAcGFyYW0ge251bWJlcn0gcGl2b3RYXG4gKiBAcGFyYW0ge251bWJlcn0gcGl2b3RZXG4gKiBAcGFyYW0ge251bWJlcn0gc2NhbGVYXG4gKiBAcGFyYW0ge251bWJlcn0gc2NhbGVZXG4gKiBAcGFyYW0ge251bWJlcn0gcm90YXRpb25cbiAqIEBwYXJhbSB7bnVtYmVyfSBza2V3WFxuICogQHBhcmFtIHtudW1iZXJ9IHNrZXdZXG4gKlxuICogQHJldHVybiB7UElYSS5NYXRyaXh9IFRoaXMgbWF0cml4LiBHb29kIGZvciBjaGFpbmluZyBtZXRob2QgY2FsbHMuXG4gKi9cbk1hdHJpeC5wcm90b3R5cGUuc2V0VHJhbnNmb3JtID0gZnVuY3Rpb24gKHgsIHksIHBpdm90WCwgcGl2b3RZLCBzY2FsZVgsIHNjYWxlWSwgcm90YXRpb24sIHNrZXdYLCBza2V3WSlcbntcbiAgICB2YXIgYSwgYiwgYywgZCwgc3IsIGNyLCBjeSwgc3ksIG5zeCwgY3g7XG5cbiAgICBzciAgPSBNYXRoLnNpbihyb3RhdGlvbik7XG4gICAgY3IgID0gTWF0aC5jb3Mocm90YXRpb24pO1xuICAgIGN5ICA9IE1hdGguY29zKHNrZXdZKTtcbiAgICBzeSAgPSBNYXRoLnNpbihza2V3WSk7XG4gICAgbnN4ID0gLU1hdGguc2luKHNrZXdYKTtcbiAgICBjeCAgPSAgTWF0aC5jb3Moc2tld1gpO1xuXG4gICAgYSAgPSAgY3IgKiBzY2FsZVg7XG4gICAgYiAgPSAgc3IgKiBzY2FsZVg7XG4gICAgYyAgPSAtc3IgKiBzY2FsZVk7XG4gICAgZCAgPSAgY3IgKiBzY2FsZVk7XG5cbiAgICB0aGlzLmEgID0gY3kgKiBhICsgc3kgKiBjO1xuICAgIHRoaXMuYiAgPSBjeSAqIGIgKyBzeSAqIGQ7XG4gICAgdGhpcy5jICA9IG5zeCAqIGEgKyBjeCAqIGM7XG4gICAgdGhpcy5kICA9IG5zeCAqIGIgKyBjeCAqIGQ7XG5cbiAgICB0aGlzLnR4ID0geCArICggcGl2b3RYICogYSArIHBpdm90WSAqIGMgKTtcbiAgICB0aGlzLnR5ID0geSArICggcGl2b3RYICogYiArIHBpdm90WSAqIGQgKTtcblxuICAgIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBQcmVwZW5kcyB0aGUgZ2l2ZW4gTWF0cml4IHRvIHRoaXMgTWF0cml4LlxuICpcbiAqIEBwYXJhbSB7UElYSS5NYXRyaXh9IG1hdHJpeFxuICogQHJldHVybiB7UElYSS5NYXRyaXh9IFRoaXMgbWF0cml4LiBHb29kIGZvciBjaGFpbmluZyBtZXRob2QgY2FsbHMuXG4gKi9cbk1hdHJpeC5wcm90b3R5cGUucHJlcGVuZCA9IGZ1bmN0aW9uKG1hdHJpeClcbntcbiAgICB2YXIgdHgxID0gdGhpcy50eDtcblxuICAgIGlmIChtYXRyaXguYSAhPT0gMSB8fCBtYXRyaXguYiAhPT0gMCB8fCBtYXRyaXguYyAhPT0gMCB8fCBtYXRyaXguZCAhPT0gMSlcbiAgICB7XG4gICAgICAgIHZhciBhMSA9IHRoaXMuYTtcbiAgICAgICAgdmFyIGMxID0gdGhpcy5jO1xuICAgICAgICB0aGlzLmEgID0gYTEqbWF0cml4LmErdGhpcy5iKm1hdHJpeC5jO1xuICAgICAgICB0aGlzLmIgID0gYTEqbWF0cml4LmIrdGhpcy5iKm1hdHJpeC5kO1xuICAgICAgICB0aGlzLmMgID0gYzEqbWF0cml4LmErdGhpcy5kKm1hdHJpeC5jO1xuICAgICAgICB0aGlzLmQgID0gYzEqbWF0cml4LmIrdGhpcy5kKm1hdHJpeC5kO1xuICAgIH1cblxuICAgIHRoaXMudHggPSB0eDEqbWF0cml4LmErdGhpcy50eSptYXRyaXguYyttYXRyaXgudHg7XG4gICAgdGhpcy50eSA9IHR4MSptYXRyaXguYit0aGlzLnR5Km1hdHJpeC5kK21hdHJpeC50eTtcblxuICAgIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBJbnZlcnRzIHRoaXMgbWF0cml4XG4gKlxuICogQHJldHVybiB7UElYSS5NYXRyaXh9IFRoaXMgbWF0cml4LiBHb29kIGZvciBjaGFpbmluZyBtZXRob2QgY2FsbHMuXG4gKi9cbk1hdHJpeC5wcm90b3R5cGUuaW52ZXJ0ID0gZnVuY3Rpb24oKVxue1xuICAgIHZhciBhMSA9IHRoaXMuYTtcbiAgICB2YXIgYjEgPSB0aGlzLmI7XG4gICAgdmFyIGMxID0gdGhpcy5jO1xuICAgIHZhciBkMSA9IHRoaXMuZDtcbiAgICB2YXIgdHgxID0gdGhpcy50eDtcbiAgICB2YXIgbiA9IGExKmQxLWIxKmMxO1xuXG4gICAgdGhpcy5hID0gZDEvbjtcbiAgICB0aGlzLmIgPSAtYjEvbjtcbiAgICB0aGlzLmMgPSAtYzEvbjtcbiAgICB0aGlzLmQgPSBhMS9uO1xuICAgIHRoaXMudHggPSAoYzEqdGhpcy50eS1kMSp0eDEpL247XG4gICAgdGhpcy50eSA9IC0oYTEqdGhpcy50eS1iMSp0eDEpL247XG5cbiAgICByZXR1cm4gdGhpcztcbn07XG5cblxuLyoqXG4gKiBSZXNldHMgdGhpcyBNYXRpeCB0byBhbiBpZGVudGl0eSAoZGVmYXVsdCkgbWF0cml4LlxuICpcbiAqIEByZXR1cm4ge1BJWEkuTWF0cml4fSBUaGlzIG1hdHJpeC4gR29vZCBmb3IgY2hhaW5pbmcgbWV0aG9kIGNhbGxzLlxuICovXG5NYXRyaXgucHJvdG90eXBlLmlkZW50aXR5ID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLmEgPSAxO1xuICAgIHRoaXMuYiA9IDA7XG4gICAgdGhpcy5jID0gMDtcbiAgICB0aGlzLmQgPSAxO1xuICAgIHRoaXMudHggPSAwO1xuICAgIHRoaXMudHkgPSAwO1xuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIENyZWF0ZXMgYSBuZXcgTWF0cml4IG9iamVjdCB3aXRoIHRoZSBzYW1lIHZhbHVlcyBhcyB0aGlzIG9uZS5cbiAqXG4gKiBAcmV0dXJuIHtQSVhJLk1hdHJpeH0gQSBjb3B5IG9mIHRoaXMgbWF0cml4LiBHb29kIGZvciBjaGFpbmluZyBtZXRob2QgY2FsbHMuXG4gKi9cbk1hdHJpeC5wcm90b3R5cGUuY2xvbmUgPSBmdW5jdGlvbiAoKVxue1xuICAgIHZhciBtYXRyaXggPSBuZXcgTWF0cml4KCk7XG4gICAgbWF0cml4LmEgPSB0aGlzLmE7XG4gICAgbWF0cml4LmIgPSB0aGlzLmI7XG4gICAgbWF0cml4LmMgPSB0aGlzLmM7XG4gICAgbWF0cml4LmQgPSB0aGlzLmQ7XG4gICAgbWF0cml4LnR4ID0gdGhpcy50eDtcbiAgICBtYXRyaXgudHkgPSB0aGlzLnR5O1xuXG4gICAgcmV0dXJuIG1hdHJpeDtcbn07XG5cbi8qKlxuICogQ2hhbmdlcyB0aGUgdmFsdWVzIG9mIHRoZSBnaXZlbiBtYXRyaXggdG8gYmUgdGhlIHNhbWUgYXMgdGhlIG9uZXMgaW4gdGhpcyBtYXRyaXhcbiAqXG4gKiBAcmV0dXJuIHtQSVhJLk1hdHJpeH0gVGhlIG1hdHJpeCBnaXZlbiBpbiBwYXJhbWV0ZXIgd2l0aCBpdHMgdmFsdWVzIHVwZGF0ZWQuXG4gKi9cbk1hdHJpeC5wcm90b3R5cGUuY29weSA9IGZ1bmN0aW9uIChtYXRyaXgpXG57XG4gICAgbWF0cml4LmEgPSB0aGlzLmE7XG4gICAgbWF0cml4LmIgPSB0aGlzLmI7XG4gICAgbWF0cml4LmMgPSB0aGlzLmM7XG4gICAgbWF0cml4LmQgPSB0aGlzLmQ7XG4gICAgbWF0cml4LnR4ID0gdGhpcy50eDtcbiAgICBtYXRyaXgudHkgPSB0aGlzLnR5O1xuXG4gICAgcmV0dXJuIG1hdHJpeDtcbn07XG5cbi8qKlxuICogQSBkZWZhdWx0IChpZGVudGl0eSkgbWF0cml4XG4gKlxuICogQHN0YXRpY1xuICogQGNvbnN0XG4gKi9cbk1hdHJpeC5JREVOVElUWSA9IG5ldyBNYXRyaXgoKTtcblxuLyoqXG4gKiBBIHRlbXAgbWF0cml4XG4gKlxuICogQHN0YXRpY1xuICogQGNvbnN0XG4gKi9cbk1hdHJpeC5URU1QX01BVFJJWCA9IG5ldyBNYXRyaXgoKTtcbiIsIi8qKlxuICogVGhlIFBvaW50IG9iamVjdCByZXByZXNlbnRzIGEgbG9jYXRpb24gaW4gYSB0d28tZGltZW5zaW9uYWwgY29vcmRpbmF0ZSBzeXN0ZW0sIHdoZXJlIHggcmVwcmVzZW50c1xuICogdGhlIGhvcml6b250YWwgYXhpcyBhbmQgeSByZXByZXNlbnRzIHRoZSB2ZXJ0aWNhbCBheGlzLlxuICpcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqIEBwYXJhbSBbeD0wXSB7bnVtYmVyfSBwb3NpdGlvbiBvZiB0aGUgcG9pbnQgb24gdGhlIHggYXhpc1xuICogQHBhcmFtIFt5PTBdIHtudW1iZXJ9IHBvc2l0aW9uIG9mIHRoZSBwb2ludCBvbiB0aGUgeSBheGlzXG4gKi9cbmZ1bmN0aW9uIFBvaW50KHgsIHkpXG57XG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDBcbiAgICAgKi9cbiAgICB0aGlzLnggPSB4IHx8IDA7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMFxuICAgICAqL1xuICAgIHRoaXMueSA9IHkgfHwgMDtcbn1cblxuUG9pbnQucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gUG9pbnQ7XG5tb2R1bGUuZXhwb3J0cyA9IFBvaW50O1xuXG4vKipcbiAqIENyZWF0ZXMgYSBjbG9uZSBvZiB0aGlzIHBvaW50XG4gKlxuICogQHJldHVybiB7UElYSS5Qb2ludH0gYSBjb3B5IG9mIHRoZSBwb2ludFxuICovXG5Qb2ludC5wcm90b3R5cGUuY2xvbmUgPSBmdW5jdGlvbiAoKVxue1xuICAgIHJldHVybiBuZXcgUG9pbnQodGhpcy54LCB0aGlzLnkpO1xufTtcblxuLyoqXG4gKiBDb3BpZXMgeCBhbmQgeSBmcm9tIHRoZSBnaXZlbiBwb2ludFxuICpcbiAqIEBwYXJhbSBwIHtQSVhJLlBvaW50fVxuICovXG5Qb2ludC5wcm90b3R5cGUuY29weSA9IGZ1bmN0aW9uIChwKSB7XG4gICAgdGhpcy5zZXQocC54LCBwLnkpO1xufTtcblxuLyoqXG4gKiBSZXR1cm5zIHRydWUgaWYgdGhlIGdpdmVuIHBvaW50IGlzIGVxdWFsIHRvIHRoaXMgcG9pbnRcbiAqXG4gKiBAcGFyYW0gcCB7UElYSS5Qb2ludH1cbiAqIEByZXR1cm5zIHtib29sZWFufVxuICovXG5Qb2ludC5wcm90b3R5cGUuZXF1YWxzID0gZnVuY3Rpb24gKHApIHtcbiAgICByZXR1cm4gKHAueCA9PT0gdGhpcy54KSAmJiAocC55ID09PSB0aGlzLnkpO1xufTtcblxuLyoqXG4gKiBTZXRzIHRoZSBwb2ludCB0byBhIG5ldyB4IGFuZCB5IHBvc2l0aW9uLlxuICogSWYgeSBpcyBvbWl0dGVkLCBib3RoIHggYW5kIHkgd2lsbCBiZSBzZXQgdG8geC5cbiAqXG4gKiBAcGFyYW0gW3g9MF0ge251bWJlcn0gcG9zaXRpb24gb2YgdGhlIHBvaW50IG9uIHRoZSB4IGF4aXNcbiAqIEBwYXJhbSBbeT0wXSB7bnVtYmVyfSBwb3NpdGlvbiBvZiB0aGUgcG9pbnQgb24gdGhlIHkgYXhpc1xuICovXG5Qb2ludC5wcm90b3R5cGUuc2V0ID0gZnVuY3Rpb24gKHgsIHkpXG57XG4gICAgdGhpcy54ID0geCB8fCAwO1xuICAgIHRoaXMueSA9IHkgfHwgKCAoeSAhPT0gMCkgPyB0aGlzLnggOiAwICkgO1xufTtcbiIsIi8qKlxuICogTWF0aCBjbGFzc2VzIGFuZCB1dGlsaXRpZXMgbWl4ZWQgaW50byBQSVhJIG5hbWVzcGFjZS5cbiAqXG4gKiBAbGVuZHMgUElYSVxuICovXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgICAvLyBUaGVzZSB3aWxsIGJlIG1peGVkIHRvIGJlIG1hZGUgcHVibGljbHkgYXZhaWxhYmxlLFxuICAgIC8vIHdoaWxlIHRoaXMgbW9kdWxlIGlzIHVzZWQgaW50ZXJuYWxseSBpbiBjb3JlXG4gICAgLy8gdG8gYXZvaWQgY2lyY3VsYXIgZGVwZW5kZW5jaWVzIGFuZCBjdXQgZG93biBvblxuICAgIC8vIGludGVybmFsIG1vZHVsZSByZXF1aXJlcy5cblxuICAgIFBvaW50OiAgICAgIHJlcXVpcmUoJy4vUG9pbnQnKSxcbiAgICBNYXRyaXg6ICAgICByZXF1aXJlKCcuL01hdHJpeCcpLFxuXG4gICAgQ2lyY2xlOiAgICAgcmVxdWlyZSgnLi9zaGFwZXMvQ2lyY2xlJyksXG4gICAgRWxsaXBzZTogICAgcmVxdWlyZSgnLi9zaGFwZXMvRWxsaXBzZScpLFxuICAgIFBvbHlnb246ICAgIHJlcXVpcmUoJy4vc2hhcGVzL1BvbHlnb24nKSxcbiAgICBSZWN0YW5nbGU6ICByZXF1aXJlKCcuL3NoYXBlcy9SZWN0YW5nbGUnKSxcbiAgICBSb3VuZGVkUmVjdGFuZ2xlOiByZXF1aXJlKCcuL3NoYXBlcy9Sb3VuZGVkUmVjdGFuZ2xlJylcbn07XG4iLCJ2YXIgUmVjdGFuZ2xlID0gcmVxdWlyZSgnLi9SZWN0YW5nbGUnKSxcbiAgICBDT05TVCA9IHJlcXVpcmUoJy4uLy4uL2NvbnN0Jyk7XG5cbi8qKlxuICogVGhlIENpcmNsZSBvYmplY3QgY2FuIGJlIHVzZWQgdG8gc3BlY2lmeSBhIGhpdCBhcmVhIGZvciBkaXNwbGF5T2JqZWN0c1xuICpcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqIEBwYXJhbSB4IHtudW1iZXJ9IFRoZSBYIGNvb3JkaW5hdGUgb2YgdGhlIGNlbnRlciBvZiB0aGlzIGNpcmNsZVxuICogQHBhcmFtIHkge251bWJlcn0gVGhlIFkgY29vcmRpbmF0ZSBvZiB0aGUgY2VudGVyIG9mIHRoaXMgY2lyY2xlXG4gKiBAcGFyYW0gcmFkaXVzIHtudW1iZXJ9IFRoZSByYWRpdXMgb2YgdGhlIGNpcmNsZVxuICovXG5mdW5jdGlvbiBDaXJjbGUoeCwgeSwgcmFkaXVzKVxue1xuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAwXG4gICAgICovXG4gICAgdGhpcy54ID0geCB8fCAwO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDBcbiAgICAgKi9cbiAgICB0aGlzLnkgPSB5IHx8IDA7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMFxuICAgICAqL1xuICAgIHRoaXMucmFkaXVzID0gcmFkaXVzIHx8IDA7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgdHlwZSBvZiB0aGUgb2JqZWN0LCBtYWlubHkgdXNlZCB0byBhdm9pZCBgaW5zdGFuY2VvZmAgY2hlY2tzXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy50eXBlID0gQ09OU1QuU0hBUEVTLkNJUkM7XG59XG5cbkNpcmNsZS5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBDaXJjbGU7XG5tb2R1bGUuZXhwb3J0cyA9IENpcmNsZTtcblxuLyoqXG4gKiBDcmVhdGVzIGEgY2xvbmUgb2YgdGhpcyBDaXJjbGUgaW5zdGFuY2VcbiAqXG4gKiBAcmV0dXJuIHtQSVhJLkNpcmNsZX0gYSBjb3B5IG9mIHRoZSBDaXJjbGVcbiAqL1xuQ2lyY2xlLnByb3RvdHlwZS5jbG9uZSA9IGZ1bmN0aW9uICgpXG57XG4gICAgcmV0dXJuIG5ldyBDaXJjbGUodGhpcy54LCB0aGlzLnksIHRoaXMucmFkaXVzKTtcbn07XG5cbi8qKlxuICogQ2hlY2tzIHdoZXRoZXIgdGhlIHggYW5kIHkgY29vcmRpbmF0ZXMgZ2l2ZW4gYXJlIGNvbnRhaW5lZCB3aXRoaW4gdGhpcyBjaXJjbGVcbiAqXG4gKiBAcGFyYW0geCB7bnVtYmVyfSBUaGUgWCBjb29yZGluYXRlIG9mIHRoZSBwb2ludCB0byB0ZXN0XG4gKiBAcGFyYW0geSB7bnVtYmVyfSBUaGUgWSBjb29yZGluYXRlIG9mIHRoZSBwb2ludCB0byB0ZXN0XG4gKiBAcmV0dXJuIHtib29sZWFufSBXaGV0aGVyIHRoZSB4L3kgY29vcmRpbmF0ZXMgYXJlIHdpdGhpbiB0aGlzIENpcmNsZVxuICovXG5DaXJjbGUucHJvdG90eXBlLmNvbnRhaW5zID0gZnVuY3Rpb24gKHgsIHkpXG57XG4gICAgaWYgKHRoaXMucmFkaXVzIDw9IDApXG4gICAge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgdmFyIGR4ID0gKHRoaXMueCAtIHgpLFxuICAgICAgICBkeSA9ICh0aGlzLnkgLSB5KSxcbiAgICAgICAgcjIgPSB0aGlzLnJhZGl1cyAqIHRoaXMucmFkaXVzO1xuXG4gICAgZHggKj0gZHg7XG4gICAgZHkgKj0gZHk7XG5cbiAgICByZXR1cm4gKGR4ICsgZHkgPD0gcjIpO1xufTtcblxuLyoqXG4qIFJldHVybnMgdGhlIGZyYW1pbmcgcmVjdGFuZ2xlIG9mIHRoZSBjaXJjbGUgYXMgYSBSZWN0YW5nbGUgb2JqZWN0XG4qXG4qIEByZXR1cm4ge1BJWEkuUmVjdGFuZ2xlfSB0aGUgZnJhbWluZyByZWN0YW5nbGVcbiovXG5DaXJjbGUucHJvdG90eXBlLmdldEJvdW5kcyA9IGZ1bmN0aW9uICgpXG57XG4gICAgcmV0dXJuIG5ldyBSZWN0YW5nbGUodGhpcy54IC0gdGhpcy5yYWRpdXMsIHRoaXMueSAtIHRoaXMucmFkaXVzLCB0aGlzLnJhZGl1cyAqIDIsIHRoaXMucmFkaXVzICogMik7XG59O1xuIiwidmFyIFJlY3RhbmdsZSA9IHJlcXVpcmUoJy4vUmVjdGFuZ2xlJyksXG4gICAgQ09OU1QgPSByZXF1aXJlKCcuLi8uLi9jb25zdCcpO1xuXG4vKipcbiAqIFRoZSBFbGxpcHNlIG9iamVjdCBjYW4gYmUgdXNlZCB0byBzcGVjaWZ5IGEgaGl0IGFyZWEgZm9yIGRpc3BsYXlPYmplY3RzXG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIHgge251bWJlcn0gVGhlIFggY29vcmRpbmF0ZSBvZiB0aGUgY2VudGVyIG9mIHRoZSBlbGxpcHNlXG4gKiBAcGFyYW0geSB7bnVtYmVyfSBUaGUgWSBjb29yZGluYXRlIG9mIHRoZSBjZW50ZXIgb2YgdGhlIGVsbGlwc2VcbiAqIEBwYXJhbSB3aWR0aCB7bnVtYmVyfSBUaGUgaGFsZiB3aWR0aCBvZiB0aGlzIGVsbGlwc2VcbiAqIEBwYXJhbSBoZWlnaHQge251bWJlcn0gVGhlIGhhbGYgaGVpZ2h0IG9mIHRoaXMgZWxsaXBzZVxuICovXG5mdW5jdGlvbiBFbGxpcHNlKHgsIHksIHdpZHRoLCBoZWlnaHQpXG57XG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDBcbiAgICAgKi9cbiAgICB0aGlzLnggPSB4IHx8IDA7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMFxuICAgICAqL1xuICAgIHRoaXMueSA9IHkgfHwgMDtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAwXG4gICAgICovXG4gICAgdGhpcy53aWR0aCA9IHdpZHRoIHx8IDA7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMFxuICAgICAqL1xuICAgIHRoaXMuaGVpZ2h0ID0gaGVpZ2h0IHx8IDA7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgdHlwZSBvZiB0aGUgb2JqZWN0LCBtYWlubHkgdXNlZCB0byBhdm9pZCBgaW5zdGFuY2VvZmAgY2hlY2tzXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy50eXBlID0gQ09OU1QuU0hBUEVTLkVMSVA7XG59XG5cbkVsbGlwc2UucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gRWxsaXBzZTtcbm1vZHVsZS5leHBvcnRzID0gRWxsaXBzZTtcblxuLyoqXG4gKiBDcmVhdGVzIGEgY2xvbmUgb2YgdGhpcyBFbGxpcHNlIGluc3RhbmNlXG4gKlxuICogQHJldHVybiB7UElYSS5FbGxpcHNlfSBhIGNvcHkgb2YgdGhlIGVsbGlwc2VcbiAqL1xuRWxsaXBzZS5wcm90b3R5cGUuY2xvbmUgPSBmdW5jdGlvbiAoKVxue1xuICAgIHJldHVybiBuZXcgRWxsaXBzZSh0aGlzLngsIHRoaXMueSwgdGhpcy53aWR0aCwgdGhpcy5oZWlnaHQpO1xufTtcblxuLyoqXG4gKiBDaGVja3Mgd2hldGhlciB0aGUgeCBhbmQgeSBjb29yZGluYXRlcyBnaXZlbiBhcmUgY29udGFpbmVkIHdpdGhpbiB0aGlzIGVsbGlwc2VcbiAqXG4gKiBAcGFyYW0geCB7bnVtYmVyfSBUaGUgWCBjb29yZGluYXRlIG9mIHRoZSBwb2ludCB0byB0ZXN0XG4gKiBAcGFyYW0geSB7bnVtYmVyfSBUaGUgWSBjb29yZGluYXRlIG9mIHRoZSBwb2ludCB0byB0ZXN0XG4gKiBAcmV0dXJuIHtib29sZWFufSBXaGV0aGVyIHRoZSB4L3kgY29vcmRzIGFyZSB3aXRoaW4gdGhpcyBlbGxpcHNlXG4gKi9cbkVsbGlwc2UucHJvdG90eXBlLmNvbnRhaW5zID0gZnVuY3Rpb24gKHgsIHkpXG57XG4gICAgaWYgKHRoaXMud2lkdGggPD0gMCB8fCB0aGlzLmhlaWdodCA8PSAwKVxuICAgIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIC8vbm9ybWFsaXplIHRoZSBjb29yZHMgdG8gYW4gZWxsaXBzZSB3aXRoIGNlbnRlciAwLDBcbiAgICB2YXIgbm9ybXggPSAoKHggLSB0aGlzLngpIC8gdGhpcy53aWR0aCksXG4gICAgICAgIG5vcm15ID0gKCh5IC0gdGhpcy55KSAvIHRoaXMuaGVpZ2h0KTtcblxuICAgIG5vcm14ICo9IG5vcm14O1xuICAgIG5vcm15ICo9IG5vcm15O1xuXG4gICAgcmV0dXJuIChub3JteCArIG5vcm15IDw9IDEpO1xufTtcblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBmcmFtaW5nIHJlY3RhbmdsZSBvZiB0aGUgZWxsaXBzZSBhcyBhIFJlY3RhbmdsZSBvYmplY3RcbiAqXG4gKiBAcmV0dXJuIHtQSVhJLlJlY3RhbmdsZX0gdGhlIGZyYW1pbmcgcmVjdGFuZ2xlXG4gKi9cbkVsbGlwc2UucHJvdG90eXBlLmdldEJvdW5kcyA9IGZ1bmN0aW9uICgpXG57XG4gICAgcmV0dXJuIG5ldyBSZWN0YW5nbGUodGhpcy54IC0gdGhpcy53aWR0aCwgdGhpcy55IC0gdGhpcy5oZWlnaHQsIHRoaXMud2lkdGgsIHRoaXMuaGVpZ2h0KTtcbn07XG4iLCJ2YXIgUG9pbnQgPSByZXF1aXJlKCcuLi9Qb2ludCcpLFxuICAgIENPTlNUID0gcmVxdWlyZSgnLi4vLi4vY29uc3QnKTtcblxuLyoqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gcG9pbnRzIHtQSVhJLlBvaW50W118bnVtYmVyW118Li4uUElYSS5Qb2ludHwuLi5udW1iZXJ9IFRoaXMgY2FuIGJlIGFuIGFycmF5IG9mIFBvaW50cyB0aGF0IGZvcm0gdGhlIHBvbHlnb24sXG4gKiAgICAgIGEgZmxhdCBhcnJheSBvZiBudW1iZXJzIHRoYXQgd2lsbCBiZSBpbnRlcnByZXRlZCBhcyBbeCx5LCB4LHksIC4uLl0sIG9yIHRoZSBhcmd1bWVudHMgcGFzc2VkIGNhbiBiZVxuICogICAgICBhbGwgdGhlIHBvaW50cyBvZiB0aGUgcG9seWdvbiBlLmcuIGBuZXcgUElYSS5Qb2x5Z29uKG5ldyBQSVhJLlBvaW50KCksIG5ldyBQSVhJLlBvaW50KCksIC4uLilgLCBvciB0aGVcbiAqICAgICAgYXJndW1lbnRzIHBhc3NlZCBjYW4gYmUgZmxhdCB4LHkgdmFsdWVzIGUuZy4gYG5ldyBQb2x5Z29uKHgseSwgeCx5LCB4LHksIC4uLilgIHdoZXJlIGB4YCBhbmQgYHlgIGFyZVxuICogICAgICBOdW1iZXJzLlxuICovXG5mdW5jdGlvbiBQb2x5Z29uKHBvaW50c18pXG57XG4gICAgLy8gcHJldmVudHMgYW4gYXJndW1lbnQgYXNzaWdubWVudCBkZW9wdFxuICAgIC8vIHNlZSBzZWN0aW9uIDMuMTogaHR0cHM6Ly9naXRodWIuY29tL3BldGthYW50b25vdi9ibHVlYmlyZC93aWtpL09wdGltaXphdGlvbi1raWxsZXJzIzMtbWFuYWdpbmctYXJndW1lbnRzXG4gICAgdmFyIHBvaW50cyA9IHBvaW50c187XG5cbiAgICAvL2lmIHBvaW50cyBpc24ndCBhbiBhcnJheSwgdXNlIGFyZ3VtZW50cyBhcyB0aGUgYXJyYXlcbiAgICBpZiAoIUFycmF5LmlzQXJyYXkocG9pbnRzKSlcbiAgICB7XG4gICAgICAgIC8vIHByZXZlbnRzIGFuIGFyZ3VtZW50IGxlYWsgZGVvcHRcbiAgICAgICAgLy8gc2VlIHNlY3Rpb24gMy4yOiBodHRwczovL2dpdGh1Yi5jb20vcGV0a2FhbnRvbm92L2JsdWViaXJkL3dpa2kvT3B0aW1pemF0aW9uLWtpbGxlcnMjMy1tYW5hZ2luZy1hcmd1bWVudHNcbiAgICAgICAgcG9pbnRzID0gbmV3IEFycmF5KGFyZ3VtZW50cy5sZW5ndGgpO1xuXG4gICAgICAgIGZvciAodmFyIGEgPSAwOyBhIDwgcG9pbnRzLmxlbmd0aDsgKythKSB7XG4gICAgICAgICAgICBwb2ludHNbYV0gPSBhcmd1bWVudHNbYV07XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBpZiB0aGlzIGlzIGFuIGFycmF5IG9mIHBvaW50cywgY29udmVydCBpdCB0byBhIGZsYXQgYXJyYXkgb2YgbnVtYmVyc1xuICAgIGlmIChwb2ludHNbMF0gaW5zdGFuY2VvZiBQb2ludClcbiAgICB7XG4gICAgICAgIHZhciBwID0gW107XG4gICAgICAgIGZvciAodmFyIGkgPSAwLCBpbCA9IHBvaW50cy5sZW5ndGg7IGkgPCBpbDsgaSsrKVxuICAgICAgICB7XG4gICAgICAgICAgICBwLnB1c2gocG9pbnRzW2ldLngsIHBvaW50c1tpXS55KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHBvaW50cyA9IHA7XG4gICAgfVxuXG4gICAgdGhpcy5jbG9zZWQgPSB0cnVlO1xuXG4gICAgLyoqXG4gICAgICogQW4gYXJyYXkgb2YgdGhlIHBvaW50cyBvZiB0aGlzIHBvbHlnb25cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcltdfVxuICAgICAqL1xuICAgIHRoaXMucG9pbnRzID0gcG9pbnRzO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHR5cGUgb2YgdGhlIG9iamVjdCwgbWFpbmx5IHVzZWQgdG8gYXZvaWQgYGluc3RhbmNlb2ZgIGNoZWNrc1xuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMudHlwZSA9IENPTlNULlNIQVBFUy5QT0xZO1xufVxuXG5Qb2x5Z29uLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFBvbHlnb247XG5tb2R1bGUuZXhwb3J0cyA9IFBvbHlnb247XG5cbi8qKlxuICogQ3JlYXRlcyBhIGNsb25lIG9mIHRoaXMgcG9seWdvblxuICpcbiAqIEByZXR1cm4ge1BJWEkuUG9seWdvbn0gYSBjb3B5IG9mIHRoZSBwb2x5Z29uXG4gKi9cblBvbHlnb24ucHJvdG90eXBlLmNsb25lID0gZnVuY3Rpb24gKClcbntcbiAgICByZXR1cm4gbmV3IFBvbHlnb24odGhpcy5wb2ludHMuc2xpY2UoKSk7XG59O1xuXG4vKipcbiAqIENoZWNrcyB3aGV0aGVyIHRoZSB4IGFuZCB5IGNvb3JkaW5hdGVzIHBhc3NlZCB0byB0aGlzIGZ1bmN0aW9uIGFyZSBjb250YWluZWQgd2l0aGluIHRoaXMgcG9seWdvblxuICpcbiAqIEBwYXJhbSB4IHtudW1iZXJ9IFRoZSBYIGNvb3JkaW5hdGUgb2YgdGhlIHBvaW50IHRvIHRlc3RcbiAqIEBwYXJhbSB5IHtudW1iZXJ9IFRoZSBZIGNvb3JkaW5hdGUgb2YgdGhlIHBvaW50IHRvIHRlc3RcbiAqIEByZXR1cm4ge2Jvb2xlYW59IFdoZXRoZXIgdGhlIHgveSBjb29yZGluYXRlcyBhcmUgd2l0aGluIHRoaXMgcG9seWdvblxuICovXG5Qb2x5Z29uLnByb3RvdHlwZS5jb250YWlucyA9IGZ1bmN0aW9uICh4LCB5KVxue1xuICAgIHZhciBpbnNpZGUgPSBmYWxzZTtcblxuICAgIC8vIHVzZSBzb21lIHJheWNhc3RpbmcgdG8gdGVzdCBoaXRzXG4gICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL3N1YnN0YWNrL3BvaW50LWluLXBvbHlnb24vYmxvYi9tYXN0ZXIvaW5kZXguanNcbiAgICB2YXIgbGVuZ3RoID0gdGhpcy5wb2ludHMubGVuZ3RoIC8gMjtcblxuICAgIGZvciAodmFyIGkgPSAwLCBqID0gbGVuZ3RoIC0gMTsgaSA8IGxlbmd0aDsgaiA9IGkrKylcbiAgICB7XG4gICAgICAgIHZhciB4aSA9IHRoaXMucG9pbnRzW2kgKiAyXSwgeWkgPSB0aGlzLnBvaW50c1tpICogMiArIDFdLFxuICAgICAgICAgICAgeGogPSB0aGlzLnBvaW50c1tqICogMl0sIHlqID0gdGhpcy5wb2ludHNbaiAqIDIgKyAxXSxcbiAgICAgICAgICAgIGludGVyc2VjdCA9ICgoeWkgPiB5KSAhPT0gKHlqID4geSkpICYmICh4IDwgKHhqIC0geGkpICogKHkgLSB5aSkgLyAoeWogLSB5aSkgKyB4aSk7XG5cbiAgICAgICAgaWYgKGludGVyc2VjdClcbiAgICAgICAge1xuICAgICAgICAgICAgaW5zaWRlID0gIWluc2lkZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBpbnNpZGU7XG59O1xuIiwidmFyIENPTlNUID0gcmVxdWlyZSgnLi4vLi4vY29uc3QnKTtcblxuLyoqXG4gKiB0aGUgUmVjdGFuZ2xlIG9iamVjdCBpcyBhbiBhcmVhIGRlZmluZWQgYnkgaXRzIHBvc2l0aW9uLCBhcyBpbmRpY2F0ZWQgYnkgaXRzIHRvcC1sZWZ0IGNvcm5lciBwb2ludCAoeCwgeSkgYW5kIGJ5IGl0cyB3aWR0aCBhbmQgaXRzIGhlaWdodC5cbiAqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0geCB7bnVtYmVyfSBUaGUgWCBjb29yZGluYXRlIG9mIHRoZSB1cHBlci1sZWZ0IGNvcm5lciBvZiB0aGUgcmVjdGFuZ2xlXG4gKiBAcGFyYW0geSB7bnVtYmVyfSBUaGUgWSBjb29yZGluYXRlIG9mIHRoZSB1cHBlci1sZWZ0IGNvcm5lciBvZiB0aGUgcmVjdGFuZ2xlXG4gKiBAcGFyYW0gd2lkdGgge251bWJlcn0gVGhlIG92ZXJhbGwgd2lkdGggb2YgdGhpcyByZWN0YW5nbGVcbiAqIEBwYXJhbSBoZWlnaHQge251bWJlcn0gVGhlIG92ZXJhbGwgaGVpZ2h0IG9mIHRoaXMgcmVjdGFuZ2xlXG4gKi9cbmZ1bmN0aW9uIFJlY3RhbmdsZSh4LCB5LCB3aWR0aCwgaGVpZ2h0KVxue1xuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAwXG4gICAgICovXG4gICAgdGhpcy54ID0geCB8fCAwO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDBcbiAgICAgKi9cbiAgICB0aGlzLnkgPSB5IHx8IDA7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMFxuICAgICAqL1xuICAgIHRoaXMud2lkdGggPSB3aWR0aCB8fCAwO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDBcbiAgICAgKi9cbiAgICB0aGlzLmhlaWdodCA9IGhlaWdodCB8fCAwO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHR5cGUgb2YgdGhlIG9iamVjdCwgbWFpbmx5IHVzZWQgdG8gYXZvaWQgYGluc3RhbmNlb2ZgIGNoZWNrc1xuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMudHlwZSA9IENPTlNULlNIQVBFUy5SRUNUO1xufVxuXG5SZWN0YW5nbGUucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gUmVjdGFuZ2xlO1xubW9kdWxlLmV4cG9ydHMgPSBSZWN0YW5nbGU7XG5cbi8qKlxuICogQSBjb25zdGFudCBlbXB0eSByZWN0YW5nbGUuXG4gKlxuICogQHN0YXRpY1xuICogQGNvbnN0YW50XG4gKi9cblJlY3RhbmdsZS5FTVBUWSA9IG5ldyBSZWN0YW5nbGUoMCwgMCwgMCwgMCk7XG5cblxuLyoqXG4gKiBDcmVhdGVzIGEgY2xvbmUgb2YgdGhpcyBSZWN0YW5nbGVcbiAqXG4gKiBAcmV0dXJuIHtQSVhJLlJlY3RhbmdsZX0gYSBjb3B5IG9mIHRoZSByZWN0YW5nbGVcbiAqL1xuUmVjdGFuZ2xlLnByb3RvdHlwZS5jbG9uZSA9IGZ1bmN0aW9uICgpXG57XG4gICAgcmV0dXJuIG5ldyBSZWN0YW5nbGUodGhpcy54LCB0aGlzLnksIHRoaXMud2lkdGgsIHRoaXMuaGVpZ2h0KTtcbn07XG5cbi8qKlxuICogQ2hlY2tzIHdoZXRoZXIgdGhlIHggYW5kIHkgY29vcmRpbmF0ZXMgZ2l2ZW4gYXJlIGNvbnRhaW5lZCB3aXRoaW4gdGhpcyBSZWN0YW5nbGVcbiAqXG4gKiBAcGFyYW0geCB7bnVtYmVyfSBUaGUgWCBjb29yZGluYXRlIG9mIHRoZSBwb2ludCB0byB0ZXN0XG4gKiBAcGFyYW0geSB7bnVtYmVyfSBUaGUgWSBjb29yZGluYXRlIG9mIHRoZSBwb2ludCB0byB0ZXN0XG4gKiBAcmV0dXJuIHtib29sZWFufSBXaGV0aGVyIHRoZSB4L3kgY29vcmRpbmF0ZXMgYXJlIHdpdGhpbiB0aGlzIFJlY3RhbmdsZVxuICovXG5SZWN0YW5nbGUucHJvdG90eXBlLmNvbnRhaW5zID0gZnVuY3Rpb24gKHgsIHkpXG57XG4gICAgaWYgKHRoaXMud2lkdGggPD0gMCB8fCB0aGlzLmhlaWdodCA8PSAwKVxuICAgIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGlmICh4ID49IHRoaXMueCAmJiB4IDwgdGhpcy54ICsgdGhpcy53aWR0aClcbiAgICB7XG4gICAgICAgIGlmICh5ID49IHRoaXMueSAmJiB5IDwgdGhpcy55ICsgdGhpcy5oZWlnaHQpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xufTtcbiIsInZhciBDT05TVCA9IHJlcXVpcmUoJy4uLy4uL2NvbnN0Jyk7XG5cbi8qKlxuICogVGhlIFJvdW5kZWQgUmVjdGFuZ2xlIG9iamVjdCBpcyBhbiBhcmVhIHRoYXQgaGFzIG5pY2Ugcm91bmRlZCBjb3JuZXJzLCBhcyBpbmRpY2F0ZWQgYnkgaXRzIHRvcC1sZWZ0IGNvcm5lciBwb2ludCAoeCwgeSkgYW5kIGJ5IGl0cyB3aWR0aCBhbmQgaXRzIGhlaWdodCBhbmQgaXRzIHJhZGl1cy5cbiAqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0geCB7bnVtYmVyfSBUaGUgWCBjb29yZGluYXRlIG9mIHRoZSB1cHBlci1sZWZ0IGNvcm5lciBvZiB0aGUgcm91bmRlZCByZWN0YW5nbGVcbiAqIEBwYXJhbSB5IHtudW1iZXJ9IFRoZSBZIGNvb3JkaW5hdGUgb2YgdGhlIHVwcGVyLWxlZnQgY29ybmVyIG9mIHRoZSByb3VuZGVkIHJlY3RhbmdsZVxuICogQHBhcmFtIHdpZHRoIHtudW1iZXJ9IFRoZSBvdmVyYWxsIHdpZHRoIG9mIHRoaXMgcm91bmRlZCByZWN0YW5nbGVcbiAqIEBwYXJhbSBoZWlnaHQge251bWJlcn0gVGhlIG92ZXJhbGwgaGVpZ2h0IG9mIHRoaXMgcm91bmRlZCByZWN0YW5nbGVcbiAqIEBwYXJhbSByYWRpdXMge251bWJlcn0gQ29udHJvbHMgdGhlIHJhZGl1cyBvZiB0aGUgcm91bmRlZCBjb3JuZXJzXG4gKi9cbmZ1bmN0aW9uIFJvdW5kZWRSZWN0YW5nbGUoeCwgeSwgd2lkdGgsIGhlaWdodCwgcmFkaXVzKVxue1xuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAwXG4gICAgICovXG4gICAgdGhpcy54ID0geCB8fCAwO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDBcbiAgICAgKi9cbiAgICB0aGlzLnkgPSB5IHx8IDA7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMFxuICAgICAqL1xuICAgIHRoaXMud2lkdGggPSB3aWR0aCB8fCAwO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDBcbiAgICAgKi9cbiAgICB0aGlzLmhlaWdodCA9IGhlaWdodCB8fCAwO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDIwXG4gICAgICovXG4gICAgdGhpcy5yYWRpdXMgPSByYWRpdXMgfHwgMjA7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgdHlwZSBvZiB0aGUgb2JqZWN0LCBtYWlubHkgdXNlZCB0byBhdm9pZCBgaW5zdGFuY2VvZmAgY2hlY2tzXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy50eXBlID0gQ09OU1QuU0hBUEVTLlJSRUM7XG59XG5cblJvdW5kZWRSZWN0YW5nbGUucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gUm91bmRlZFJlY3RhbmdsZTtcbm1vZHVsZS5leHBvcnRzID0gUm91bmRlZFJlY3RhbmdsZTtcblxuLyoqXG4gKiBDcmVhdGVzIGEgY2xvbmUgb2YgdGhpcyBSb3VuZGVkIFJlY3RhbmdsZVxuICpcbiAqIEByZXR1cm4ge1BJWEkuUm91bmRlZFJlY3RhbmdsZX0gYSBjb3B5IG9mIHRoZSByb3VuZGVkIHJlY3RhbmdsZVxuICovXG5Sb3VuZGVkUmVjdGFuZ2xlLnByb3RvdHlwZS5jbG9uZSA9IGZ1bmN0aW9uICgpXG57XG4gICAgcmV0dXJuIG5ldyBSb3VuZGVkUmVjdGFuZ2xlKHRoaXMueCwgdGhpcy55LCB0aGlzLndpZHRoLCB0aGlzLmhlaWdodCwgdGhpcy5yYWRpdXMpO1xufTtcblxuLyoqXG4gKiBDaGVja3Mgd2hldGhlciB0aGUgeCBhbmQgeSBjb29yZGluYXRlcyBnaXZlbiBhcmUgY29udGFpbmVkIHdpdGhpbiB0aGlzIFJvdW5kZWQgUmVjdGFuZ2xlXG4gKlxuICogQHBhcmFtIHgge251bWJlcn0gVGhlIFggY29vcmRpbmF0ZSBvZiB0aGUgcG9pbnQgdG8gdGVzdFxuICogQHBhcmFtIHkge251bWJlcn0gVGhlIFkgY29vcmRpbmF0ZSBvZiB0aGUgcG9pbnQgdG8gdGVzdFxuICogQHJldHVybiB7Ym9vbGVhbn0gV2hldGhlciB0aGUgeC95IGNvb3JkaW5hdGVzIGFyZSB3aXRoaW4gdGhpcyBSb3VuZGVkIFJlY3RhbmdsZVxuICovXG5Sb3VuZGVkUmVjdGFuZ2xlLnByb3RvdHlwZS5jb250YWlucyA9IGZ1bmN0aW9uICh4LCB5KVxue1xuICAgIGlmICh0aGlzLndpZHRoIDw9IDAgfHwgdGhpcy5oZWlnaHQgPD0gMClcbiAgICB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBpZiAoeCA+PSB0aGlzLnggJiYgeCA8PSB0aGlzLnggKyB0aGlzLndpZHRoKVxuICAgIHtcbiAgICAgICAgaWYgKHkgPj0gdGhpcy55ICYmIHkgPD0gdGhpcy55ICsgdGhpcy5oZWlnaHQpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xufTtcbiIsInZhciBDb250YWluZXIgPSByZXF1aXJlKCcuLi9kaXNwbGF5L0NvbnRhaW5lcicpLFxuICAgIENPTlNUID0gcmVxdWlyZSgnLi4vY29uc3QnKTtcblxuLyoqXG4gKiBUaGUgUGFydGljbGVDb250YWluZXIgY2xhc3MgaXMgYSByZWFsbHkgZmFzdCB2ZXJzaW9uIG9mIHRoZSBDb250YWluZXIgYnVpbHQgc29sZWx5IGZvciBzcGVlZCxcbiAqIHNvIHVzZSB3aGVuIHlvdSBuZWVkIGEgbG90IG9mIHNwcml0ZXMgb3IgcGFydGljbGVzLiBUaGUgdHJhZGVvZmYgb2YgdGhlIFBhcnRpY2xlQ29udGFpbmVyIGlzIHRoYXQgYWR2YW5jZWRcbiAqIGZ1bmN0aW9uYWxpdHkgd2lsbCBub3Qgd29yay4gUGFydGljbGVDb250YWluZXIgaW1wbGVtZW50cyBvbmx5IHRoZSBiYXNpYyBvYmplY3QgdHJhbnNmb3JtIChwb3NpdGlvbiwgc2NhbGUsIHJvdGF0aW9uKS5cbiAqIEFueSBvdGhlciBmdW5jdGlvbmFsaXR5IGxpa2UgdGludGluZywgbWFza2luZywgZXRjIHdpbGwgbm90IHdvcmsgb24gc3ByaXRlcyBpbiB0aGlzIGJhdGNoLlxuICpcbiAqIEl0J3MgZXh0cmVtZWx5IGVhc3kgdG8gdXNlIDpcbiAqXG4gKiBgYGBqc1xuICogdmFyIGNvbnRhaW5lciA9IG5ldyBQYXJ0aWNsZUNvbnRhaW5lcigpO1xuICpcbiAqIGZvciAodmFyIGkgPSAwOyBpIDwgMTAwOyArK2kpXG4gKiB7XG4gKiAgICAgdmFyIHNwcml0ZSA9IG5ldyBQSVhJLlNwcml0ZS5mcm9tSW1hZ2UoXCJteUltYWdlLnBuZ1wiKTtcbiAqICAgICBjb250YWluZXIuYWRkQ2hpbGQoc3ByaXRlKTtcbiAqIH1cbiAqIGBgYFxuICpcbiAqIEFuZCBoZXJlIHlvdSBoYXZlIGEgaHVuZHJlZCBzcHJpdGVzIHRoYXQgd2lsbCBiZSByZW5kZXJlciBhdCB0aGUgc3BlZWQgb2YgbGlnaHQuXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLkNvbnRhaW5lclxuICogQG1lbWJlcm9mIFBJWElcbiAqIEBwYXJhbSBbbWF4U2l6ZT0xNTAwMF0ge251bWJlcn0gVGhlIG1heGltdW0gbnVtYmVyIG9mIHBhcnRpY2xlcyB0aGF0IGNhbiBiZSByZW5kZXJlciBieSB0aGUgY29udGFpbmVyLlxuICogQHBhcmFtIFtwcm9wZXJ0aWVzXSB7b2JqZWN0fSBUaGUgcHJvcGVydGllcyBvZiBjaGlsZHJlbiB0aGF0IHNob3VsZCBiZSB1cGxvYWRlZCB0byB0aGUgZ3B1IGFuZCBhcHBsaWVkLlxuICogQHBhcmFtIFtwcm9wZXJ0aWVzLnNjYWxlPWZhbHNlXSB7Ym9vbGVhbn0gV2hlbiB0cnVlLCBzY2FsZSBiZSB1cGxvYWRlZCBhbmQgYXBwbGllZC5cbiAqIEBwYXJhbSBbcHJvcGVydGllcy5wb3NpdGlvbj10cnVlXSB7Ym9vbGVhbn0gV2hlbiB0cnVlLCBwb3NpdGlvbiBiZSB1cGxvYWRlZCBhbmQgYXBwbGllZC5cbiAqIEBwYXJhbSBbcHJvcGVydGllcy5yb3RhdGlvbj1mYWxzZV0ge2Jvb2xlYW59IFdoZW4gdHJ1ZSwgcm90YXRpb24gYmUgdXBsb2FkZWQgYW5kIGFwcGxpZWQuXG4gKiBAcGFyYW0gW3Byb3BlcnRpZXMudXZzPWZhbHNlXSB7Ym9vbGVhbn0gV2hlbiB0cnVlLCB1dnMgYmUgdXBsb2FkZWQgYW5kIGFwcGxpZWQuXG4gKiBAcGFyYW0gW3Byb3BlcnRpZXMuYWxwaGE9ZmFsc2VdIHtib29sZWFufSBXaGVuIHRydWUsIGFscGhhIGJlIHVwbG9hZGVkIGFuZCBhcHBsaWVkLlxuICogQHBhcmFtIFtiYXRjaFNpemU9MTUwMDBdIHtudW1iZXJ9IE51bWJlciBvZiBwYXJ0aWNsZXMgcGVyIGJhdGNoLlxuICovXG5mdW5jdGlvbiBQYXJ0aWNsZUNvbnRhaW5lcihtYXhTaXplLCBwcm9wZXJ0aWVzLCBiYXRjaFNpemUpXG57XG4gICAgQ29udGFpbmVyLmNhbGwodGhpcyk7XG5cbiAgICBiYXRjaFNpemUgPSBiYXRjaFNpemUgfHwgMTUwMDA7IC8vQ09OU1QuU1BSSVRFX0JBVENIX1NJWkU7IC8vIDIwMDAgaXMgYSBuaWNlIGJhbGFuY2UgYmV0d2VlbiBtb2JpbGUgLyBkZXNrdG9wXG4gICAgbWF4U2l6ZSA9IG1heFNpemUgfHwgMTUwMDA7XG5cbiAgICAvLyBNYWtpbmcgc3VyZSB0aGUgYmF0Y2ggc2l6ZSBpcyB2YWxpZFxuICAgIC8vIDY1NTM1IGlzIG1heCB2ZXJ0ZXggaW5kZXggaW4gdGhlIGluZGV4IGJ1ZmZlciAoc2VlIFBhcnRpY2xlUmVuZGVyZXIpXG4gICAgLy8gc28gbWF4IG51bWJlciBvZiBwYXJ0aWNsZXMgaXMgNjU1MzYgLyA0ID0gMTYzODRcbiAgICB2YXIgbWF4QmF0Y2hTaXplID0gMTYzODQ7XG4gICAgaWYgKGJhdGNoU2l6ZSA+IG1heEJhdGNoU2l6ZSkge1xuICAgICAgICBiYXRjaFNpemUgPSBtYXhCYXRjaFNpemU7XG4gICAgfVxuXG4gICAgaWYgKGJhdGNoU2l6ZSA+IG1heFNpemUpIHtcbiAgICAgICAgYmF0Y2hTaXplID0gbWF4U2l6ZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTZXQgcHJvcGVydGllcyB0byBiZSBkeW5hbWljICh0cnVlKSAvIHN0YXRpYyAoZmFsc2UpXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFuW119XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9wcm9wZXJ0aWVzID0gW2ZhbHNlLCB0cnVlLCBmYWxzZSwgZmFsc2UsIGZhbHNlXTtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX21heFNpemUgPSBtYXhTaXplO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fYmF0Y2hTaXplID0gYmF0Y2hTaXplO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7V2ViR0xCdWZmZXJ9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9idWZmZXJzID0gbnVsbDtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX2J1ZmZlclRvVXBkYXRlID0gMDtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICpcbiAgICAgKi9cbiAgICB0aGlzLmludGVyYWN0aXZlQ2hpbGRyZW4gPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBibGVuZCBtb2RlIHRvIGJlIGFwcGxpZWQgdG8gdGhlIHNwcml0ZS4gQXBwbHkgYSB2YWx1ZSBvZiBgUElYSS5CTEVORF9NT0RFUy5OT1JNQUxgIHRvIHJlc2V0IHRoZSBibGVuZCBtb2RlLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IFBJWEkuQkxFTkRfTU9ERVMuTk9STUFMXG4gICAgICogQHNlZSBQSVhJLkJMRU5EX01PREVTXG4gICAgICovXG4gICAgdGhpcy5ibGVuZE1vZGUgPSBDT05TVC5CTEVORF9NT0RFUy5OT1JNQUw7XG5cbiAgICAvKipcbiAgICAgKiBVc2VkIGZvciBjYW52YXMgcmVuZGVyZXJpbmcuIElmIHRydWUgdGhlbiB0aGUgZWxlbWVudHMgd2lsbCBiZSBwb3NpdGlvbmVkIGF0IHRoZSBuZWFyZXN0IHBpeGVsLiBUaGlzIHByb3ZpZGVzIGEgbmljZSBzcGVlZCBib29zdC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICogQGRlZmF1bHQgdHJ1ZTtcbiAgICAgKi9cbiAgICB0aGlzLnJvdW5kUGl4ZWxzID0gdHJ1ZTtcblxuICAgIHRoaXMuc2V0UHJvcGVydGllcyhwcm9wZXJ0aWVzKTtcbn1cblxuUGFydGljbGVDb250YWluZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShDb250YWluZXIucHJvdG90eXBlKTtcblBhcnRpY2xlQ29udGFpbmVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFBhcnRpY2xlQ29udGFpbmVyO1xubW9kdWxlLmV4cG9ydHMgPSBQYXJ0aWNsZUNvbnRhaW5lcjtcblxuLyoqXG4gKiBTZXRzIHRoZSBwcml2YXRlIHByb3BlcnRpZXMgYXJyYXkgdG8gZHluYW1pYyAvIHN0YXRpYyBiYXNlZCBvbiB0aGUgcGFzc2VkIHByb3BlcnRpZXMgb2JqZWN0XG4gKlxuICogQHBhcmFtIHByb3BlcnRpZXMge29iamVjdH0gVGhlIHByb3BlcnRpZXMgdG8gYmUgdXBsb2FkZWRcbiAqL1xuUGFydGljbGVDb250YWluZXIucHJvdG90eXBlLnNldFByb3BlcnRpZXMgPSBmdW5jdGlvbihwcm9wZXJ0aWVzKVxue1xuICAgIGlmICggcHJvcGVydGllcyApIHtcbiAgICAgICAgdGhpcy5fcHJvcGVydGllc1swXSA9ICdzY2FsZScgaW4gcHJvcGVydGllcyA/ICEhcHJvcGVydGllcy5zY2FsZSA6IHRoaXMuX3Byb3BlcnRpZXNbMF07XG4gICAgICAgIHRoaXMuX3Byb3BlcnRpZXNbMV0gPSAncG9zaXRpb24nIGluIHByb3BlcnRpZXMgPyAhIXByb3BlcnRpZXMucG9zaXRpb24gOiB0aGlzLl9wcm9wZXJ0aWVzWzFdO1xuICAgICAgICB0aGlzLl9wcm9wZXJ0aWVzWzJdID0gJ3JvdGF0aW9uJyBpbiBwcm9wZXJ0aWVzID8gISFwcm9wZXJ0aWVzLnJvdGF0aW9uIDogdGhpcy5fcHJvcGVydGllc1syXTtcbiAgICAgICAgdGhpcy5fcHJvcGVydGllc1szXSA9ICd1dnMnIGluIHByb3BlcnRpZXMgPyAhIXByb3BlcnRpZXMudXZzIDogdGhpcy5fcHJvcGVydGllc1szXTtcbiAgICAgICAgdGhpcy5fcHJvcGVydGllc1s0XSA9ICdhbHBoYScgaW4gcHJvcGVydGllcyA/ICEhcHJvcGVydGllcy5hbHBoYSA6IHRoaXMuX3Byb3BlcnRpZXNbNF07XG4gICAgfVxufTtcblxuLyoqXG4gKiBVcGRhdGVzIHRoZSBvYmplY3QgdHJhbnNmb3JtIGZvciByZW5kZXJpbmdcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5QYXJ0aWNsZUNvbnRhaW5lci5wcm90b3R5cGUudXBkYXRlVHJhbnNmb3JtID0gZnVuY3Rpb24gKClcbntcblxuICAgIC8vIFRPRE8gZG9uJ3QgbmVlZCB0byFcbiAgICB0aGlzLmRpc3BsYXlPYmplY3RVcGRhdGVUcmFuc2Zvcm0oKTtcbiAgICAvLyAgUElYSS5Db250YWluZXIucHJvdG90eXBlLnVwZGF0ZVRyYW5zZm9ybS5jYWxsKCB0aGlzICk7XG59O1xuXG4vKipcbiAqIFJlbmRlcnMgdGhlIGNvbnRhaW5lciB1c2luZyB0aGUgV2ViR0wgcmVuZGVyZXJcbiAqXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcn0gVGhlIHdlYmdsIHJlbmRlcmVyXG4gKiBAcHJpdmF0ZVxuICovXG5QYXJ0aWNsZUNvbnRhaW5lci5wcm90b3R5cGUucmVuZGVyV2ViR0wgPSBmdW5jdGlvbiAocmVuZGVyZXIpXG57XG4gICAgaWYgKCF0aGlzLnZpc2libGUgfHwgdGhpcy53b3JsZEFscGhhIDw9IDAgfHwgIXRoaXMuY2hpbGRyZW4ubGVuZ3RoIHx8ICF0aGlzLnJlbmRlcmFibGUpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgcmVuZGVyZXIuc2V0T2JqZWN0UmVuZGVyZXIoIHJlbmRlcmVyLnBsdWdpbnMucGFydGljbGUgKTtcbiAgICByZW5kZXJlci5wbHVnaW5zLnBhcnRpY2xlLnJlbmRlciggdGhpcyApO1xufTtcblxuLyoqXG4gKiBTZXQgdGhlIGZsYWcgdGhhdCBzdGF0aWMgZGF0YSBzaG91bGQgYmUgdXBkYXRlZCB0byB0cnVlXG4gKlxuICogQHByaXZhdGVcbiAqL1xuUGFydGljbGVDb250YWluZXIucHJvdG90eXBlLm9uQ2hpbGRyZW5DaGFuZ2UgPSBmdW5jdGlvbiAoc21hbGxlc3RDaGlsZEluZGV4KVxue1xuICAgIHZhciBidWZmZXJJbmRleCA9IE1hdGguZmxvb3Ioc21hbGxlc3RDaGlsZEluZGV4IC8gdGhpcy5fYmF0Y2hTaXplKTtcbiAgICBpZiAoYnVmZmVySW5kZXggPCB0aGlzLl9idWZmZXJUb1VwZGF0ZSkge1xuICAgICAgICB0aGlzLl9idWZmZXJUb1VwZGF0ZSA9IGJ1ZmZlckluZGV4O1xuICAgIH1cbn07XG5cbi8qKlxuICogUmVuZGVycyB0aGUgb2JqZWN0IHVzaW5nIHRoZSBDYW52YXMgcmVuZGVyZXJcbiAqXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuQ2FudmFzUmVuZGVyZXJ9IFRoZSBjYW52YXMgcmVuZGVyZXJcbiAqIEBwcml2YXRlXG4gKi9cblBhcnRpY2xlQ29udGFpbmVyLnByb3RvdHlwZS5yZW5kZXJDYW52YXMgPSBmdW5jdGlvbiAocmVuZGVyZXIpXG57XG4gICAgaWYgKCF0aGlzLnZpc2libGUgfHwgdGhpcy53b3JsZEFscGhhIDw9IDAgfHwgIXRoaXMuY2hpbGRyZW4ubGVuZ3RoIHx8ICF0aGlzLnJlbmRlcmFibGUpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFyIGNvbnRleHQgPSByZW5kZXJlci5jb250ZXh0O1xuICAgIHZhciB0cmFuc2Zvcm0gPSB0aGlzLndvcmxkVHJhbnNmb3JtO1xuICAgIHZhciBpc1JvdGF0ZWQgPSB0cnVlO1xuXG4gICAgdmFyIHBvc2l0aW9uWCA9IDA7XG4gICAgdmFyIHBvc2l0aW9uWSA9IDA7XG5cbiAgICB2YXIgZmluYWxXaWR0aCA9IDA7XG4gICAgdmFyIGZpbmFsSGVpZ2h0ID0gMDtcblxuICAgIHZhciBjb21wb3NpdGVPcGVyYXRpb24gPSByZW5kZXJlci5ibGVuZE1vZGVzW3RoaXMuYmxlbmRNb2RlXTtcbiAgICBpZiAoY29tcG9zaXRlT3BlcmF0aW9uICE9PSBjb250ZXh0Lmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbilcbiAgICB7XG4gICAgICAgIGNvbnRleHQuZ2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uID0gY29tcG9zaXRlT3BlcmF0aW9uO1xuICAgIH1cblxuICAgIGNvbnRleHQuZ2xvYmFsQWxwaGEgPSB0aGlzLndvcmxkQWxwaGE7XG5cbiAgICB0aGlzLmRpc3BsYXlPYmplY3RVcGRhdGVUcmFuc2Zvcm0oKTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5jaGlsZHJlbi5sZW5ndGg7ICsraSlcbiAgICB7XG4gICAgICAgIHZhciBjaGlsZCA9IHRoaXMuY2hpbGRyZW5baV07XG5cbiAgICAgICAgaWYgKCFjaGlsZC52aXNpYmxlKVxuICAgICAgICB7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBmcmFtZSA9IGNoaWxkLnRleHR1cmUuZnJhbWU7XG5cbiAgICAgICAgY29udGV4dC5nbG9iYWxBbHBoYSA9IHRoaXMud29ybGRBbHBoYSAqIGNoaWxkLmFscGhhO1xuXG4gICAgICAgIGlmIChjaGlsZC5yb3RhdGlvbiAlIChNYXRoLlBJICogMikgPT09IDApXG4gICAgICAgIHtcbiAgICAgICAgICAgIC8vIHRoaXMgaXMgdGhlIGZhc3Rlc3QgIHdheSB0byBvcHRpbWlzZSEgLSBpZiByb3RhdGlvbiBpcyAwIHRoZW4gd2UgY2FuIGF2b2lkIGFueSBraW5kIG9mIHNldFRyYW5zZm9ybSBjYWxsXG4gICAgICAgICAgICBpZiAoaXNSb3RhdGVkKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGNvbnRleHQuc2V0VHJhbnNmb3JtKFxuICAgICAgICAgICAgICAgICAgICB0cmFuc2Zvcm0uYSxcbiAgICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtLmIsXG4gICAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybS5jLFxuICAgICAgICAgICAgICAgICAgICB0cmFuc2Zvcm0uZCxcbiAgICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtLnR4LFxuICAgICAgICAgICAgICAgICAgICB0cmFuc2Zvcm0udHlcbiAgICAgICAgICAgICAgICApO1xuXG4gICAgICAgICAgICAgICAgaXNSb3RhdGVkID0gZmFsc2U7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHBvc2l0aW9uWCA9ICgoY2hpbGQuYW5jaG9yLngpICogKC1mcmFtZS53aWR0aCAqIGNoaWxkLnNjYWxlLngpICsgY2hpbGQucG9zaXRpb24ueCAgKyAwLjUpO1xuICAgICAgICAgICAgcG9zaXRpb25ZID0gKChjaGlsZC5hbmNob3IueSkgKiAoLWZyYW1lLmhlaWdodCAqIGNoaWxkLnNjYWxlLnkpICsgY2hpbGQucG9zaXRpb24ueSAgKyAwLjUpO1xuXG4gICAgICAgICAgICBmaW5hbFdpZHRoID0gZnJhbWUud2lkdGggKiBjaGlsZC5zY2FsZS54O1xuICAgICAgICAgICAgZmluYWxIZWlnaHQgPSBmcmFtZS5oZWlnaHQgKiBjaGlsZC5zY2FsZS55O1xuXG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgICBpZiAoIWlzUm90YXRlZClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBpc1JvdGF0ZWQgPSB0cnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjaGlsZC5kaXNwbGF5T2JqZWN0VXBkYXRlVHJhbnNmb3JtKCk7XG5cbiAgICAgICAgICAgIHZhciBjaGlsZFRyYW5zZm9ybSA9IGNoaWxkLndvcmxkVHJhbnNmb3JtO1xuXG4gICAgICAgICAgICBpZiAocmVuZGVyZXIucm91bmRQaXhlbHMpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29udGV4dC5zZXRUcmFuc2Zvcm0oXG4gICAgICAgICAgICAgICAgICAgIGNoaWxkVHJhbnNmb3JtLmEsXG4gICAgICAgICAgICAgICAgICAgIGNoaWxkVHJhbnNmb3JtLmIsXG4gICAgICAgICAgICAgICAgICAgIGNoaWxkVHJhbnNmb3JtLmMsXG4gICAgICAgICAgICAgICAgICAgIGNoaWxkVHJhbnNmb3JtLmQsXG4gICAgICAgICAgICAgICAgICAgIGNoaWxkVHJhbnNmb3JtLnR4IHwgMCxcbiAgICAgICAgICAgICAgICAgICAgY2hpbGRUcmFuc2Zvcm0udHkgfCAwXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb250ZXh0LnNldFRyYW5zZm9ybShcbiAgICAgICAgICAgICAgICAgICAgY2hpbGRUcmFuc2Zvcm0uYSxcbiAgICAgICAgICAgICAgICAgICAgY2hpbGRUcmFuc2Zvcm0uYixcbiAgICAgICAgICAgICAgICAgICAgY2hpbGRUcmFuc2Zvcm0uYyxcbiAgICAgICAgICAgICAgICAgICAgY2hpbGRUcmFuc2Zvcm0uZCxcbiAgICAgICAgICAgICAgICAgICAgY2hpbGRUcmFuc2Zvcm0udHgsXG4gICAgICAgICAgICAgICAgICAgIGNoaWxkVHJhbnNmb3JtLnR5XG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcG9zaXRpb25YID0gKChjaGlsZC5hbmNob3IueCkgKiAoLWZyYW1lLndpZHRoKSArIDAuNSk7XG4gICAgICAgICAgICBwb3NpdGlvblkgPSAoKGNoaWxkLmFuY2hvci55KSAqICgtZnJhbWUuaGVpZ2h0KSArIDAuNSk7XG5cbiAgICAgICAgICAgIGZpbmFsV2lkdGggPSBmcmFtZS53aWR0aDtcbiAgICAgICAgICAgIGZpbmFsSGVpZ2h0ID0gZnJhbWUuaGVpZ2h0O1xuICAgICAgICB9XG5cbiAgICAgICAgY29udGV4dC5kcmF3SW1hZ2UoXG4gICAgICAgICAgICBjaGlsZC50ZXh0dXJlLmJhc2VUZXh0dXJlLnNvdXJjZSxcbiAgICAgICAgICAgIGZyYW1lLngsXG4gICAgICAgICAgICBmcmFtZS55LFxuICAgICAgICAgICAgZnJhbWUud2lkdGgsXG4gICAgICAgICAgICBmcmFtZS5oZWlnaHQsXG4gICAgICAgICAgICBwb3NpdGlvblgsXG4gICAgICAgICAgICBwb3NpdGlvblksXG4gICAgICAgICAgICBmaW5hbFdpZHRoLFxuICAgICAgICAgICAgZmluYWxIZWlnaHRcbiAgICAgICAgKTtcbiAgICB9XG59O1xuXG4vKipcbiAqIERlc3Ryb3lzIHRoZSBjb250YWluZXJcbiAqXG4gKiBAcGFyYW0gW2Rlc3Ryb3lDaGlsZHJlbj1mYWxzZV0ge2Jvb2xlYW59IGlmIHNldCB0byB0cnVlLCBhbGwgdGhlIGNoaWxkcmVuIHdpbGwgaGF2ZSB0aGVpciBkZXN0cm95IG1ldGhvZCBjYWxsZWQgYXMgd2VsbFxuICovXG5QYXJ0aWNsZUNvbnRhaW5lci5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uICgpIHtcbiAgICBDb250YWluZXIucHJvdG90eXBlLmRlc3Ryb3kuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcblxuICAgIGlmICh0aGlzLl9idWZmZXJzKSB7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5fYnVmZmVycy5sZW5ndGg7ICsraSkge1xuICAgICAgICAgICAgdGhpcy5fYnVmZmVyc1tpXS5kZXN0cm95KCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLl9wcm9wZXJ0aWVzID0gbnVsbDtcbiAgICB0aGlzLl9idWZmZXJzID0gbnVsbDtcbn07XG4iLCJcbi8qKlxuICogQGF1dGhvciBNYXQgR3JvdmVzXG4gKlxuICogQmlnIHRoYW5rcyB0byB0aGUgdmVyeSBjbGV2ZXIgTWF0dCBEZXNMYXVyaWVycyA8bWF0dGRlc2w+IGh0dHBzOi8vZ2l0aHViLmNvbS9tYXR0ZGVzbC9cbiAqIGZvciBjcmVhdGluZyB0aGUgb3JpZ2luYWwgcGl4aSB2ZXJzaW9uIVxuICogQWxzbyBhIHRoYW5rcyB0byBodHRwczovL2dpdGh1Yi5jb20vYmNoZXZhbGllciBmb3IgdHdlYWtpbmcgdGhlIHRpbnQgYW5kIGFscGhhIHNvIHRoYXQgdGhleSBub3cgc2hhcmUgNCBieXRlcyBvbiB0aGUgdmVydGV4IGJ1ZmZlclxuICpcbiAqIEhlYXZpbHkgaW5zcGlyZWQgYnkgTGliR0RYJ3MgUGFydGljbGVCdWZmZXI6XG4gKiBodHRwczovL2dpdGh1Yi5jb20vbGliZ2R4L2xpYmdkeC9ibG9iL21hc3Rlci9nZHgvc3JjL2NvbS9iYWRsb2dpYy9nZHgvZ3JhcGhpY3MvZzJkL1BhcnRpY2xlQnVmZmVyLmphdmFcbiAqL1xuXG4vKipcbiAqIFRoZSBwYXJ0aWNsZSBidWZmZXIgbWFuYWdlcyB0aGUgc3RhdGljIGFuZCBkeW5hbWljIGJ1ZmZlcnMgZm9yIGEgcGFydGljbGUgY29udGFpbmVyLlxuICpcbiAqIEBjbGFzc1xuICogQHByaXZhdGVcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKi9cbmZ1bmN0aW9uIFBhcnRpY2xlQnVmZmVyKGdsLCBwcm9wZXJ0aWVzLCBkeW5hbWljUHJvcGVydHlGbGFncywgc2l6ZSlcbntcbiAgICAvKipcbiAgICAgKiBUaGUgY3VycmVudCBXZWJHTCBkcmF3aW5nIGNvbnRleHQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtXZWJHTFJlbmRlcmluZ0NvbnRleHR9XG4gICAgICovXG4gICAgdGhpcy5nbCA9IGdsO1xuXG4gICAgLyoqXG4gICAgICogU2l6ZSBvZiBhIHNpbmdsZSB2ZXJ0ZXguXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy52ZXJ0U2l6ZSA9IDI7XG5cbiAgICAvKipcbiAgICAgKiBTaXplIG9mIGEgc2luZ2xlIHZlcnRleCBpbiBieXRlcy5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLnZlcnRCeXRlU2l6ZSA9IHRoaXMudmVydFNpemUgKiA0O1xuXG4gICAgLyoqXG4gICAgICogVGhlIG51bWJlciBvZiBwYXJ0aWNsZXMgdGhlIGJ1ZmZlciBjYW4gaG9sZFxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMuc2l6ZSA9IHNpemU7XG5cbiAgICAvKipcbiAgICAgKiBBIGxpc3Qgb2YgdGhlIHByb3BlcnRpZXMgdGhhdCBhcmUgZHluYW1pYy5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge29iamVjdFtdfVxuICAgICAqL1xuICAgIHRoaXMuZHluYW1pY1Byb3BlcnRpZXMgPSBbXTtcblxuICAgIC8qKlxuICAgICAqIEEgbGlzdCBvZiB0aGUgcHJvcGVydGllcyB0aGF0IGFyZSBzdGF0aWMuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtvYmplY3RbXX1cbiAgICAgKi9cbiAgICB0aGlzLnN0YXRpY1Byb3BlcnRpZXMgPSBbXTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcGVydGllcy5sZW5ndGg7IGkrKylcbiAgICB7XG4gICAgICAgIHZhciBwcm9wZXJ0eSA9IHByb3BlcnRpZXNbaV07XG5cbiAgICAgICAgaWYoZHluYW1pY1Byb3BlcnR5RmxhZ3NbaV0pXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuZHluYW1pY1Byb3BlcnRpZXMucHVzaChwcm9wZXJ0eSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnN0YXRpY1Byb3BlcnRpZXMucHVzaChwcm9wZXJ0eSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLnN0YXRpY1N0cmlkZSA9IDA7XG4gICAgdGhpcy5zdGF0aWNCdWZmZXIgPSBudWxsO1xuICAgIHRoaXMuc3RhdGljRGF0YSA9IG51bGw7XG5cbiAgICB0aGlzLmR5bmFtaWNTdHJpZGUgPSAwO1xuICAgIHRoaXMuZHluYW1pY0J1ZmZlciA9IG51bGw7XG4gICAgdGhpcy5keW5hbWljRGF0YSA9IG51bGw7XG5cbiAgICB0aGlzLmluaXRCdWZmZXJzKCk7XG5cbn1cblxuUGFydGljbGVCdWZmZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gUGFydGljbGVCdWZmZXI7XG5tb2R1bGUuZXhwb3J0cyA9IFBhcnRpY2xlQnVmZmVyO1xuXG4vKipcbiAqIFNldHMgdXAgdGhlIHJlbmRlcmVyIGNvbnRleHQgYW5kIG5lY2Vzc2FyeSBidWZmZXJzLlxuICpcbiAqIEBwcml2YXRlXG4gKi9cblBhcnRpY2xlQnVmZmVyLnByb3RvdHlwZS5pbml0QnVmZmVycyA9IGZ1bmN0aW9uICgpXG57XG4gICAgdmFyIGdsID0gdGhpcy5nbDtcbiAgICB2YXIgaTtcbiAgICB2YXIgcHJvcGVydHk7XG5cbiAgICB2YXIgZHluYW1pY09mZnNldCA9IDA7XG4gICAgdGhpcy5keW5hbWljU3RyaWRlID0gMDtcblxuICAgIGZvciAoaSA9IDA7IGkgPCB0aGlzLmR5bmFtaWNQcm9wZXJ0aWVzLmxlbmd0aDsgaSsrKVxuICAgIHtcbiAgICAgICAgcHJvcGVydHkgPSB0aGlzLmR5bmFtaWNQcm9wZXJ0aWVzW2ldO1xuXG4gICAgICAgIHByb3BlcnR5Lm9mZnNldCA9IGR5bmFtaWNPZmZzZXQ7XG4gICAgICAgIGR5bmFtaWNPZmZzZXQgKz0gcHJvcGVydHkuc2l6ZTtcbiAgICAgICAgdGhpcy5keW5hbWljU3RyaWRlICs9IHByb3BlcnR5LnNpemU7XG4gICAgfVxuXG4gICAgdGhpcy5keW5hbWljRGF0YSA9IG5ldyBGbG9hdDMyQXJyYXkoIHRoaXMuc2l6ZSAqIHRoaXMuZHluYW1pY1N0cmlkZSAqIDQpO1xuICAgIHRoaXMuZHluYW1pY0J1ZmZlciA9IGdsLmNyZWF0ZUJ1ZmZlcigpO1xuXG4gICAgZ2wuYmluZEJ1ZmZlcihnbC5BUlJBWV9CVUZGRVIsIHRoaXMuZHluYW1pY0J1ZmZlcik7XG4gICAgZ2wuYnVmZmVyRGF0YShnbC5BUlJBWV9CVUZGRVIsIHRoaXMuZHluYW1pY0RhdGEsIGdsLkRZTkFNSUNfRFJBVyk7XG5cblxuICAgIC8vIHN0YXRpYyAvL1xuICAgIHZhciBzdGF0aWNPZmZzZXQgPSAwO1xuICAgIHRoaXMuc3RhdGljU3RyaWRlID0gMDtcblxuICAgIGZvciAoaSA9IDA7IGkgPCB0aGlzLnN0YXRpY1Byb3BlcnRpZXMubGVuZ3RoOyBpKyspXG4gICAge1xuICAgICAgICBwcm9wZXJ0eSA9IHRoaXMuc3RhdGljUHJvcGVydGllc1tpXTtcblxuICAgICAgICBwcm9wZXJ0eS5vZmZzZXQgPSBzdGF0aWNPZmZzZXQ7XG4gICAgICAgIHN0YXRpY09mZnNldCArPSBwcm9wZXJ0eS5zaXplO1xuICAgICAgICB0aGlzLnN0YXRpY1N0cmlkZSArPSBwcm9wZXJ0eS5zaXplO1xuICAgIH1cblxuICAgIHRoaXMuc3RhdGljRGF0YSA9IG5ldyBGbG9hdDMyQXJyYXkoIHRoaXMuc2l6ZSAqIHRoaXMuc3RhdGljU3RyaWRlICogNCk7XG4gICAgdGhpcy5zdGF0aWNCdWZmZXIgPSBnbC5jcmVhdGVCdWZmZXIoKTtcblxuICAgIGdsLmJpbmRCdWZmZXIoZ2wuQVJSQVlfQlVGRkVSLCB0aGlzLnN0YXRpY0J1ZmZlcik7XG4gICAgZ2wuYnVmZmVyRGF0YShnbC5BUlJBWV9CVUZGRVIsIHRoaXMuc3RhdGljRGF0YSwgZ2wuRFlOQU1JQ19EUkFXKTtcbn07XG5cbi8qKlxuICogVXBsb2FkcyB0aGUgZHluYW1pYyBwcm9wZXJ0aWVzLlxuICpcbiAqL1xuUGFydGljbGVCdWZmZXIucHJvdG90eXBlLnVwbG9hZER5bmFtaWMgPSBmdW5jdGlvbihjaGlsZHJlbiwgc3RhcnRJbmRleCwgYW1vdW50KVxue1xuICAgIHZhciBnbCA9IHRoaXMuZ2w7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuZHluYW1pY1Byb3BlcnRpZXMubGVuZ3RoOyBpKyspXG4gICAge1xuICAgICAgICB2YXIgcHJvcGVydHkgPSB0aGlzLmR5bmFtaWNQcm9wZXJ0aWVzW2ldO1xuICAgICAgICBwcm9wZXJ0eS51cGxvYWRGdW5jdGlvbihjaGlsZHJlbiwgc3RhcnRJbmRleCwgYW1vdW50LCB0aGlzLmR5bmFtaWNEYXRhLCB0aGlzLmR5bmFtaWNTdHJpZGUsIHByb3BlcnR5Lm9mZnNldCk7XG4gICAgfVxuXG4gICAgZ2wuYmluZEJ1ZmZlcihnbC5BUlJBWV9CVUZGRVIsIHRoaXMuZHluYW1pY0J1ZmZlcik7XG4gICAgZ2wuYnVmZmVyU3ViRGF0YShnbC5BUlJBWV9CVUZGRVIsIDAsIHRoaXMuZHluYW1pY0RhdGEpO1xufTtcblxuLyoqXG4gKiBVcGxvYWRzIHRoZSBzdGF0aWMgcHJvcGVydGllcy5cbiAqXG4gKi9cblBhcnRpY2xlQnVmZmVyLnByb3RvdHlwZS51cGxvYWRTdGF0aWMgPSBmdW5jdGlvbihjaGlsZHJlbiwgc3RhcnRJbmRleCwgYW1vdW50KVxue1xuICAgIHZhciBnbCA9IHRoaXMuZ2w7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuc3RhdGljUHJvcGVydGllcy5sZW5ndGg7IGkrKylcbiAgICB7XG4gICAgICAgIHZhciBwcm9wZXJ0eSA9IHRoaXMuc3RhdGljUHJvcGVydGllc1tpXTtcbiAgICAgICAgcHJvcGVydHkudXBsb2FkRnVuY3Rpb24oY2hpbGRyZW4sIHN0YXJ0SW5kZXgsIGFtb3VudCwgdGhpcy5zdGF0aWNEYXRhLCB0aGlzLnN0YXRpY1N0cmlkZSwgcHJvcGVydHkub2Zmc2V0KTtcbiAgICB9XG5cbiAgICBnbC5iaW5kQnVmZmVyKGdsLkFSUkFZX0JVRkZFUiwgdGhpcy5zdGF0aWNCdWZmZXIpO1xuICAgIGdsLmJ1ZmZlclN1YkRhdGEoZ2wuQVJSQVlfQlVGRkVSLCAwLCB0aGlzLnN0YXRpY0RhdGEpO1xufTtcblxuLyoqXG4gKiBCaW5kcyB0aGUgYnVmZmVycyB0byB0aGUgR1BVXG4gKlxuICovXG5QYXJ0aWNsZUJ1ZmZlci5wcm90b3R5cGUuYmluZCA9IGZ1bmN0aW9uICgpXG57XG4gICAgdmFyIGdsID0gdGhpcy5nbDtcbiAgICB2YXIgaSwgcHJvcGVydHk7XG5cbiAgICBnbC5iaW5kQnVmZmVyKGdsLkFSUkFZX0JVRkZFUiwgdGhpcy5keW5hbWljQnVmZmVyKTtcblxuICAgIGZvciAoaSA9IDA7IGkgPCB0aGlzLmR5bmFtaWNQcm9wZXJ0aWVzLmxlbmd0aDsgaSsrKVxuICAgIHtcbiAgICAgICAgcHJvcGVydHkgPSB0aGlzLmR5bmFtaWNQcm9wZXJ0aWVzW2ldO1xuICAgICAgICBnbC52ZXJ0ZXhBdHRyaWJQb2ludGVyKHByb3BlcnR5LmF0dHJpYnV0ZSwgcHJvcGVydHkuc2l6ZSwgZ2wuRkxPQVQsIGZhbHNlLCB0aGlzLmR5bmFtaWNTdHJpZGUgKiA0LCBwcm9wZXJ0eS5vZmZzZXQgKiA0KTtcbiAgICB9XG5cbiAgICBnbC5iaW5kQnVmZmVyKGdsLkFSUkFZX0JVRkZFUiwgdGhpcy5zdGF0aWNCdWZmZXIpO1xuXG4gICAgZm9yIChpID0gMDsgaSA8IHRoaXMuc3RhdGljUHJvcGVydGllcy5sZW5ndGg7IGkrKylcbiAgICB7XG4gICAgICAgIHByb3BlcnR5ID0gdGhpcy5zdGF0aWNQcm9wZXJ0aWVzW2ldO1xuICAgICAgICBnbC52ZXJ0ZXhBdHRyaWJQb2ludGVyKHByb3BlcnR5LmF0dHJpYnV0ZSwgcHJvcGVydHkuc2l6ZSwgZ2wuRkxPQVQsIGZhbHNlLCB0aGlzLnN0YXRpY1N0cmlkZSAqIDQsIHByb3BlcnR5Lm9mZnNldCAqIDQpO1xuICAgIH1cbn07XG5cbi8qKlxuICogRGVzdHJveXMgdGhlIFBhcnRpY2xlQnVmZmVyLlxuICpcbiAqL1xuUGFydGljbGVCdWZmZXIucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoKVxue1xuICAgIHRoaXMuZHluYW1pY1Byb3BlcnRpZXMgPSBudWxsO1xuICAgIHRoaXMuZHluYW1pY0RhdGEgPSBudWxsO1xuICAgIHRoaXMuZ2wuZGVsZXRlQnVmZmVyKHRoaXMuZHluYW1pY0J1ZmZlcik7XG5cbiAgICB0aGlzLnN0YXRpY1Byb3BlcnRpZXMgPSBudWxsO1xuICAgIHRoaXMuc3RhdGljRGF0YSA9IG51bGw7XG4gICAgdGhpcy5nbC5kZWxldGVCdWZmZXIodGhpcy5zdGF0aWNCdWZmZXIpO1xufTtcbiIsInZhciBPYmplY3RSZW5kZXJlciA9IHJlcXVpcmUoJy4uLy4uL3JlbmRlcmVycy93ZWJnbC91dGlscy9PYmplY3RSZW5kZXJlcicpLFxuICAgIFdlYkdMUmVuZGVyZXIgPSByZXF1aXJlKCcuLi8uLi9yZW5kZXJlcnMvd2ViZ2wvV2ViR0xSZW5kZXJlcicpLFxuICAgIFBhcnRpY2xlU2hhZGVyID0gcmVxdWlyZSgnLi9QYXJ0aWNsZVNoYWRlcicpLFxuICAgIFBhcnRpY2xlQnVmZmVyID0gcmVxdWlyZSgnLi9QYXJ0aWNsZUJ1ZmZlcicpLFxuICAgIG1hdGggICAgICAgICAgICA9IHJlcXVpcmUoJy4uLy4uL21hdGgnKTtcblxuLyoqXG4gKiBAYXV0aG9yIE1hdCBHcm92ZXNcbiAqXG4gKiBCaWcgdGhhbmtzIHRvIHRoZSB2ZXJ5IGNsZXZlciBNYXR0IERlc0xhdXJpZXJzIDxtYXR0ZGVzbD4gaHR0cHM6Ly9naXRodWIuY29tL21hdHRkZXNsL1xuICogZm9yIGNyZWF0aW5nIHRoZSBvcmlnaW5hbCBwaXhpIHZlcnNpb24hXG4gKiBBbHNvIGEgdGhhbmtzIHRvIGh0dHBzOi8vZ2l0aHViLmNvbS9iY2hldmFsaWVyIGZvciB0d2Vha2luZyB0aGUgdGludCBhbmQgYWxwaGEgc28gdGhhdCB0aGV5IG5vdyBzaGFyZSA0IGJ5dGVzIG9uIHRoZSB2ZXJ0ZXggYnVmZmVyXG4gKlxuICogSGVhdmlseSBpbnNwaXJlZCBieSBMaWJHRFgncyBQYXJ0aWNsZVJlbmRlcmVyOlxuICogaHR0cHM6Ly9naXRodWIuY29tL2xpYmdkeC9saWJnZHgvYmxvYi9tYXN0ZXIvZ2R4L3NyYy9jb20vYmFkbG9naWMvZ2R4L2dyYXBoaWNzL2cyZC9QYXJ0aWNsZVJlbmRlcmVyLmphdmFcbiAqL1xuXG4vKipcbiAqXG4gKiBAY2xhc3NcbiAqIEBwcml2YXRlXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLldlYkdMUmVuZGVyZXJ9IFRoZSByZW5kZXJlciB0aGlzIHNwcml0ZSBiYXRjaCB3b3JrcyBmb3IuXG4gKi9cbmZ1bmN0aW9uIFBhcnRpY2xlUmVuZGVyZXIocmVuZGVyZXIpXG57XG4gICAgT2JqZWN0UmVuZGVyZXIuY2FsbCh0aGlzLCByZW5kZXJlcik7XG5cbiAgICAvLyA2NTUzNSBpcyBtYXggdmVydGV4IGluZGV4IGluIHRoZSBpbmRleCBidWZmZXIgKHNlZSBQYXJ0aWNsZVJlbmRlcmVyKVxuICAgIC8vIHNvIG1heCBudW1iZXIgb2YgcGFydGljbGVzIGlzIDY1NTM2IC8gNCA9IDE2Mzg0XG4gICAgLy8gYW5kIG1heCBudW1iZXIgb2YgZWxlbWVudCBpbiB0aGUgaW5kZXggYnVmZmVyIGlzIDE2Mzg0ICogNiA9IDk4MzA0XG4gICAgLy8gQ3JlYXRpbmcgYSBmdWxsIGluZGV4IGJ1ZmZlciwgb3ZlcmhlYWQgaXMgOTgzMDQgKiAyID0gMTk2S29cbiAgICB2YXIgbnVtSW5kaWNlcyA9IDk4MzA0O1xuXG4gICAgLyoqXG4gICAgICogSG9sZHMgdGhlIGluZGljZXNcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1VpbnQxNkFycmF5fVxuICAgICAqL1xuICAgIHRoaXMuaW5kaWNlcyA9IG5ldyBVaW50MTZBcnJheShudW1JbmRpY2VzKTtcblxuICAgIGZvciAodmFyIGk9MCwgaj0wOyBpIDwgbnVtSW5kaWNlczsgaSArPSA2LCBqICs9IDQpXG4gICAge1xuICAgICAgICB0aGlzLmluZGljZXNbaSArIDBdID0gaiArIDA7XG4gICAgICAgIHRoaXMuaW5kaWNlc1tpICsgMV0gPSBqICsgMTtcbiAgICAgICAgdGhpcy5pbmRpY2VzW2kgKyAyXSA9IGogKyAyO1xuICAgICAgICB0aGlzLmluZGljZXNbaSArIDNdID0gaiArIDA7XG4gICAgICAgIHRoaXMuaW5kaWNlc1tpICsgNF0gPSBqICsgMjtcbiAgICAgICAgdGhpcy5pbmRpY2VzW2kgKyA1XSA9IGogKyAzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoZSBkZWZhdWx0IHNoYWRlciB0aGF0IGlzIHVzZWQgaWYgYSBzcHJpdGUgZG9lc24ndCBoYXZlIGEgbW9yZSBzcGVjaWZpYyBvbmUuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlNoYWRlcn1cbiAgICAgKi9cbiAgICB0aGlzLnNoYWRlciA9IG51bGw7XG5cbiAgICB0aGlzLmluZGV4QnVmZmVyID0gbnVsbDtcblxuICAgIHRoaXMucHJvcGVydGllcyA9IG51bGw7XG5cbiAgICB0aGlzLnRlbXBNYXRyaXggPSBuZXcgbWF0aC5NYXRyaXgoKTtcbn1cblxuUGFydGljbGVSZW5kZXJlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKE9iamVjdFJlbmRlcmVyLnByb3RvdHlwZSk7XG5QYXJ0aWNsZVJlbmRlcmVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFBhcnRpY2xlUmVuZGVyZXI7XG5tb2R1bGUuZXhwb3J0cyA9IFBhcnRpY2xlUmVuZGVyZXI7XG5cbldlYkdMUmVuZGVyZXIucmVnaXN0ZXJQbHVnaW4oJ3BhcnRpY2xlJywgUGFydGljbGVSZW5kZXJlcik7XG5cbi8qKlxuICogV2hlbiB0aGVyZSBpcyBhIFdlYkdMIGNvbnRleHQgY2hhbmdlXG4gKlxuICogQHByaXZhdGVcbiAqL1xuUGFydGljbGVSZW5kZXJlci5wcm90b3R5cGUub25Db250ZXh0Q2hhbmdlID0gZnVuY3Rpb24gKClcbntcbiAgICB2YXIgZ2wgPSB0aGlzLnJlbmRlcmVyLmdsO1xuXG4gICAgLy8gc2V0dXAgZGVmYXVsdCBzaGFkZXJcbiAgICB0aGlzLnNoYWRlciA9IG5ldyBQYXJ0aWNsZVNoYWRlcih0aGlzLnJlbmRlcmVyLnNoYWRlck1hbmFnZXIpO1xuXG4gICAgdGhpcy5pbmRleEJ1ZmZlciA9IGdsLmNyZWF0ZUJ1ZmZlcigpO1xuXG4gICAgLy8gNjU1MzUgaXMgbWF4IGluZGV4LCBzbyA2NTUzNSAvIDYgPSAxMDkyMi5cblxuICAgIC8vdXBsb2FkIHRoZSBpbmRleCBkYXRhXG4gICAgZ2wuYmluZEJ1ZmZlcihnbC5FTEVNRU5UX0FSUkFZX0JVRkZFUiwgdGhpcy5pbmRleEJ1ZmZlcik7XG4gICAgZ2wuYnVmZmVyRGF0YShnbC5FTEVNRU5UX0FSUkFZX0JVRkZFUiwgdGhpcy5pbmRpY2VzLCBnbC5TVEFUSUNfRFJBVyk7XG5cbiAgICB0aGlzLnByb3BlcnRpZXMgPSBbXG4gICAgICAgIC8vIHZlcnRpY2VzRGF0YVxuICAgICAgICB7XG4gICAgICAgICAgICBhdHRyaWJ1dGU6dGhpcy5zaGFkZXIuYXR0cmlidXRlcy5hVmVydGV4UG9zaXRpb24sXG4gICAgICAgICAgICBzaXplOjIsXG4gICAgICAgICAgICB1cGxvYWRGdW5jdGlvbjp0aGlzLnVwbG9hZFZlcnRpY2VzLFxuICAgICAgICAgICAgb2Zmc2V0OjBcbiAgICAgICAgfSxcbiAgICAgICAgLy8gcG9zaXRpb25EYXRhXG4gICAgICAgIHtcbiAgICAgICAgICAgIGF0dHJpYnV0ZTp0aGlzLnNoYWRlci5hdHRyaWJ1dGVzLmFQb3NpdGlvbkNvb3JkLFxuICAgICAgICAgICAgc2l6ZToyLFxuICAgICAgICAgICAgdXBsb2FkRnVuY3Rpb246dGhpcy51cGxvYWRQb3NpdGlvbixcbiAgICAgICAgICAgIG9mZnNldDowXG4gICAgICAgIH0sXG4gICAgICAgIC8vIHJvdGF0aW9uRGF0YVxuICAgICAgICB7XG4gICAgICAgICAgICBhdHRyaWJ1dGU6dGhpcy5zaGFkZXIuYXR0cmlidXRlcy5hUm90YXRpb24sXG4gICAgICAgICAgICBzaXplOjEsXG4gICAgICAgICAgICB1cGxvYWRGdW5jdGlvbjp0aGlzLnVwbG9hZFJvdGF0aW9uLFxuICAgICAgICAgICAgb2Zmc2V0OjBcbiAgICAgICAgfSxcbiAgICAgICAgLy8gdXZzRGF0YVxuICAgICAgICB7XG4gICAgICAgICAgICBhdHRyaWJ1dGU6dGhpcy5zaGFkZXIuYXR0cmlidXRlcy5hVGV4dHVyZUNvb3JkLFxuICAgICAgICAgICAgc2l6ZToyLFxuICAgICAgICAgICAgdXBsb2FkRnVuY3Rpb246dGhpcy51cGxvYWRVdnMsXG4gICAgICAgICAgICBvZmZzZXQ6MFxuICAgICAgICB9LFxuICAgICAgICAvLyBhbHBoYURhdGFcbiAgICAgICAge1xuICAgICAgICAgICAgYXR0cmlidXRlOnRoaXMuc2hhZGVyLmF0dHJpYnV0ZXMuYUNvbG9yLFxuICAgICAgICAgICAgc2l6ZToxLFxuICAgICAgICAgICAgdXBsb2FkRnVuY3Rpb246dGhpcy51cGxvYWRBbHBoYSxcbiAgICAgICAgICAgIG9mZnNldDowXG4gICAgICAgIH1cbiAgICBdO1xufTtcblxuLyoqXG4gKiBTdGFydHMgYSBuZXcgcGFydGljbGUgYmF0Y2guXG4gKlxuICovXG5QYXJ0aWNsZVJlbmRlcmVyLnByb3RvdHlwZS5zdGFydCA9IGZ1bmN0aW9uICgpXG57XG4gICAgdmFyIGdsID0gdGhpcy5yZW5kZXJlci5nbDtcblxuICAgIC8vIGJpbmQgdGhlIG1haW4gdGV4dHVyZVxuICAgIGdsLmFjdGl2ZVRleHR1cmUoZ2wuVEVYVFVSRTApO1xuXG4gICAgLy8gYmluZCB0aGUgYnVmZmVyc1xuXG4gICAgZ2wuYmluZEJ1ZmZlcihnbC5FTEVNRU5UX0FSUkFZX0JVRkZFUiwgdGhpcy5pbmRleEJ1ZmZlcik7XG5cbiAgICB2YXIgc2hhZGVyID0gdGhpcy5zaGFkZXI7XG5cbiAgICB0aGlzLnJlbmRlcmVyLnNoYWRlck1hbmFnZXIuc2V0U2hhZGVyKHNoYWRlcik7XG59O1xuXG5cbi8qKlxuICogUmVuZGVycyB0aGUgcGFydGljbGUgY29udGFpbmVyIG9iamVjdC5cbiAqXG4gKiBAcGFyYW0gY29udGFpbmVyIHtQSVhJLlBhcnRpY2xlQ29udGFpbmVyfSBUaGUgY29udGFpbmVyIHRvIHJlbmRlciB1c2luZyB0aGlzIFBhcnRpY2xlUmVuZGVyZXJcbiAqL1xuUGFydGljbGVSZW5kZXJlci5wcm90b3R5cGUucmVuZGVyID0gZnVuY3Rpb24gKGNvbnRhaW5lcilcbntcbiAgICB2YXIgY2hpbGRyZW4gPSBjb250YWluZXIuY2hpbGRyZW4sXG4gICAgICAgIHRvdGFsQ2hpbGRyZW4gPSBjaGlsZHJlbi5sZW5ndGgsXG4gICAgICAgIG1heFNpemUgPSBjb250YWluZXIuX21heFNpemUsXG4gICAgICAgIGJhdGNoU2l6ZSA9IGNvbnRhaW5lci5fYmF0Y2hTaXplO1xuXG4gICAgaWYodG90YWxDaGlsZHJlbiA9PT0gMClcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgZWxzZSBpZih0b3RhbENoaWxkcmVuID4gbWF4U2l6ZSlcbiAgICB7XG4gICAgICAgIHRvdGFsQ2hpbGRyZW4gPSBtYXhTaXplO1xuICAgIH1cblxuICAgIGlmKCFjb250YWluZXIuX2J1ZmZlcnMpXG4gICAge1xuICAgICAgICBjb250YWluZXIuX2J1ZmZlcnMgPSB0aGlzLmdlbmVyYXRlQnVmZmVycyggY29udGFpbmVyICk7XG4gICAgfVxuXG4gICAgLy8gaWYgdGhlIHV2cyBoYXZlIG5vdCB1cGRhdGVkIHRoZW4gbm8gcG9pbnQgcmVuZGVyaW5nIGp1c3QgeWV0IVxuICAgIHRoaXMucmVuZGVyZXIuYmxlbmRNb2RlTWFuYWdlci5zZXRCbGVuZE1vZGUoY29udGFpbmVyLmJsZW5kTW9kZSk7XG5cbiAgICB2YXIgZ2wgPSB0aGlzLnJlbmRlcmVyLmdsO1xuXG4gICAgdmFyIG0gPSAgY29udGFpbmVyLndvcmxkVHJhbnNmb3JtLmNvcHkoIHRoaXMudGVtcE1hdHJpeCApO1xuICAgIG0ucHJlcGVuZCggdGhpcy5yZW5kZXJlci5jdXJyZW50UmVuZGVyVGFyZ2V0LnByb2plY3Rpb25NYXRyaXggKTtcbiAgICBnbC51bmlmb3JtTWF0cml4M2Z2KHRoaXMuc2hhZGVyLnVuaWZvcm1zLnByb2plY3Rpb25NYXRyaXguX2xvY2F0aW9uLCBmYWxzZSwgbS50b0FycmF5KHRydWUpKTtcbiAgICBnbC51bmlmb3JtMWYodGhpcy5zaGFkZXIudW5pZm9ybXMudUFscGhhLl9sb2NhdGlvbiwgY29udGFpbmVyLndvcmxkQWxwaGEpO1xuXG5cbiAgICAvLyBtYWtlIHN1cmUgdGhlIHRleHR1cmUgaXMgYm91bmQuLlxuICAgIHZhciBiYXNlVGV4dHVyZSA9IGNoaWxkcmVuWzBdLl90ZXh0dXJlLmJhc2VUZXh0dXJlO1xuXG4gICAgaWYgKCFiYXNlVGV4dHVyZS5fZ2xUZXh0dXJlc1tnbC5pZF0pXG4gICAge1xuICAgICAgICAvLyBpZiB0aGUgdGV4dHVyZSBoYXMgbm90IHVwZGF0ZWQgdGhlbiBsZXRzIG5vdCB1cGxvYWQgYW55IHN0YXRpYyBwcm9wZXJ0aWVzXG4gICAgICAgIGlmKCF0aGlzLnJlbmRlcmVyLnVwZGF0ZVRleHR1cmUoYmFzZVRleHR1cmUpKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZighY29udGFpbmVyLl9wcm9wZXJ0aWVzWzBdIHx8ICFjb250YWluZXIuX3Byb3BlcnRpZXNbM10pXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNvbnRhaW5lci5fYnVmZmVyVG9VcGRhdGUgPSAwO1xuICAgICAgICB9XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIGdsLmJpbmRUZXh0dXJlKGdsLlRFWFRVUkVfMkQsIGJhc2VUZXh0dXJlLl9nbFRleHR1cmVzW2dsLmlkXSk7XG4gICAgfVxuXG4gICAgLy8gbm93IGxldHMgdXBsb2FkIGFuZCByZW5kZXIgdGhlIGJ1ZmZlcnMuLlxuICAgIGZvciAodmFyIGkgPSAwLCBqID0gMDsgaSA8IHRvdGFsQ2hpbGRyZW47IGkgKz0gYmF0Y2hTaXplLCBqICs9IDEpXG4gICAge1xuICAgICAgICB2YXIgYW1vdW50ID0gKCB0b3RhbENoaWxkcmVuIC0gaSk7XG4gICAgICAgIGlmKGFtb3VudCA+IGJhdGNoU2l6ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgYW1vdW50ID0gYmF0Y2hTaXplO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGJ1ZmZlciA9IGNvbnRhaW5lci5fYnVmZmVyc1tqXTtcblxuICAgICAgICAvLyB3ZSBhbHdheXMgdXBsb2FkIHRoZSBkeW5hbWljXG4gICAgICAgIGJ1ZmZlci51cGxvYWREeW5hbWljKGNoaWxkcmVuLCBpLCBhbW91bnQpO1xuXG4gICAgICAgIC8vIHdlIG9ubHkgdXBsb2FkIHRoZSBzdGF0aWMgY29udGVudCB3aGVuIHdlIGhhdmUgdG8hXG4gICAgICAgIGlmKGNvbnRhaW5lci5fYnVmZmVyVG9VcGRhdGUgPT09IGopXG4gICAgICAgIHtcbiAgICAgICAgICAgIGJ1ZmZlci51cGxvYWRTdGF0aWMoY2hpbGRyZW4sIGksIGFtb3VudCk7XG4gICAgICAgICAgICBjb250YWluZXIuX2J1ZmZlclRvVXBkYXRlID0gaiArIDE7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBiaW5kIHRoZSBidWZmZXJcbiAgICAgICAgYnVmZmVyLmJpbmQoIHRoaXMuc2hhZGVyICk7XG5cbiAgICAgICAgIC8vIG5vdyBkcmF3IHRob3NlIHN1Y2thcyFcbiAgICAgICAgZ2wuZHJhd0VsZW1lbnRzKGdsLlRSSUFOR0xFUywgYW1vdW50ICogNiwgZ2wuVU5TSUdORURfU0hPUlQsIDApO1xuICAgICAgICB0aGlzLnJlbmRlcmVyLmRyYXdDb3VudCsrO1xuICAgIH1cbn07XG5cbi8qKlxuICogQ3JlYXRlcyBvbmUgcGFydGljbGUgYnVmZmVyIGZvciBlYWNoIGNoaWxkIGluIHRoZSBjb250YWluZXIgd2Ugd2FudCB0byByZW5kZXIgYW5kIHVwZGF0ZXMgaW50ZXJuYWwgcHJvcGVydGllc1xuICpcbiAqIEBwYXJhbSBjb250YWluZXIge1BJWEkuUGFydGljbGVDb250YWluZXJ9IFRoZSBjb250YWluZXIgdG8gcmVuZGVyIHVzaW5nIHRoaXMgUGFydGljbGVSZW5kZXJlclxuICovXG5QYXJ0aWNsZVJlbmRlcmVyLnByb3RvdHlwZS5nZW5lcmF0ZUJ1ZmZlcnMgPSBmdW5jdGlvbiAoY29udGFpbmVyKVxue1xuICAgIHZhciBnbCA9IHRoaXMucmVuZGVyZXIuZ2wsXG4gICAgICAgIGJ1ZmZlcnMgPSBbXSxcbiAgICAgICAgc2l6ZSA9IGNvbnRhaW5lci5fbWF4U2l6ZSxcbiAgICAgICAgYmF0Y2hTaXplID0gY29udGFpbmVyLl9iYXRjaFNpemUsXG4gICAgICAgIGR5bmFtaWNQcm9wZXJ0eUZsYWdzID0gY29udGFpbmVyLl9wcm9wZXJ0aWVzLFxuICAgICAgICBpO1xuXG4gICAgZm9yIChpID0gMDsgaSA8IHNpemU7IGkgKz0gYmF0Y2hTaXplKVxuICAgIHtcbiAgICAgICAgYnVmZmVycy5wdXNoKG5ldyBQYXJ0aWNsZUJ1ZmZlcihnbCwgdGhpcy5wcm9wZXJ0aWVzLCBkeW5hbWljUHJvcGVydHlGbGFncywgYmF0Y2hTaXplKSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGJ1ZmZlcnM7XG59O1xuXG4vKipcbiAqIFVwbG9hZHMgdGhlIHZlcnRpY2llcy5cbiAqXG4gKiBAcGFyYW0gY2hpbGRyZW4ge1BJWEkuRGlzcGxheU9iamVjdFtdfSB0aGUgYXJyYXkgb2YgZGlzcGxheSBvYmplY3RzIHRvIHJlbmRlclxuICogQHBhcmFtIHN0YXJ0SW5kZXgge251bWJlcn0gdGhlIGluZGV4IHRvIHN0YXJ0IGZyb20gaW4gdGhlIGNoaWxkcmVuIGFycmF5XG4gKiBAcGFyYW0gYW1vdW50IHtudW1iZXJ9IHRoZSBhbW91bnQgb2YgY2hpbGRyZW4gdGhhdCB3aWxsIGhhdmUgdGhlaXIgdmVydGljZXMgdXBsb2FkZWRcbiAqIEBwYXJhbSBhcnJheSB7bnVtYmVyW119XG4gKiBAcGFyYW0gc3RyaWRlIHtudW1iZXJ9XG4gKiBAcGFyYW0gb2Zmc2V0IHtudW1iZXJ9XG4gKi9cblBhcnRpY2xlUmVuZGVyZXIucHJvdG90eXBlLnVwbG9hZFZlcnRpY2VzID0gZnVuY3Rpb24gKGNoaWxkcmVuLCBzdGFydEluZGV4LCBhbW91bnQsIGFycmF5LCBzdHJpZGUsIG9mZnNldClcbntcbiAgICB2YXIgc3ByaXRlLFxuICAgICAgICB0ZXh0dXJlLFxuICAgICAgICB0cmltLFxuICAgICAgICBzeCxcbiAgICAgICAgc3ksXG4gICAgICAgIHcwLCB3MSwgaDAsIGgxO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhbW91bnQ7IGkrKykge1xuXG4gICAgICAgIHNwcml0ZSA9IGNoaWxkcmVuW3N0YXJ0SW5kZXggKyBpXTtcbiAgICAgICAgdGV4dHVyZSA9IHNwcml0ZS5fdGV4dHVyZTtcbiAgICAgICAgc3ggPSBzcHJpdGUuc2NhbGUueDtcbiAgICAgICAgc3kgPSBzcHJpdGUuc2NhbGUueTtcblxuICAgICAgICBpZiAodGV4dHVyZS50cmltKVxuICAgICAgICB7XG4gICAgICAgICAgICAvLyBpZiB0aGUgc3ByaXRlIGlzIHRyaW1tZWQgdGhlbiB3ZSBuZWVkIHRvIGFkZCB0aGUgZXh0cmEgc3BhY2UgYmVmb3JlIHRyYW5zZm9ybWluZyB0aGUgc3ByaXRlIGNvb3Jkcy4uXG4gICAgICAgICAgICB0cmltID0gdGV4dHVyZS50cmltO1xuXG4gICAgICAgICAgICB3MSA9IHRyaW0ueCAtIHNwcml0ZS5hbmNob3IueCAqIHRyaW0ud2lkdGg7XG4gICAgICAgICAgICB3MCA9IHcxICsgdGV4dHVyZS5jcm9wLndpZHRoO1xuXG4gICAgICAgICAgICBoMSA9IHRyaW0ueSAtIHNwcml0ZS5hbmNob3IueSAqIHRyaW0uaGVpZ2h0O1xuICAgICAgICAgICAgaDAgPSBoMSArIHRleHR1cmUuY3JvcC5oZWlnaHQ7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgICB3MCA9ICh0ZXh0dXJlLl9mcmFtZS53aWR0aCApICogKDEtc3ByaXRlLmFuY2hvci54KTtcbiAgICAgICAgICAgIHcxID0gKHRleHR1cmUuX2ZyYW1lLndpZHRoICkgKiAtc3ByaXRlLmFuY2hvci54O1xuXG4gICAgICAgICAgICBoMCA9IHRleHR1cmUuX2ZyYW1lLmhlaWdodCAqICgxLXNwcml0ZS5hbmNob3IueSk7XG4gICAgICAgICAgICBoMSA9IHRleHR1cmUuX2ZyYW1lLmhlaWdodCAqIC1zcHJpdGUuYW5jaG9yLnk7XG4gICAgICAgIH1cblxuICAgICAgICBhcnJheVtvZmZzZXRdID0gdzEgKiBzeDtcbiAgICAgICAgYXJyYXlbb2Zmc2V0ICsgMV0gPSBoMSAqIHN5O1xuXG4gICAgICAgIGFycmF5W29mZnNldCArIHN0cmlkZV0gPSB3MCAqIHN4O1xuICAgICAgICBhcnJheVtvZmZzZXQgKyBzdHJpZGUgKyAxXSA9IGgxICogc3k7XG5cbiAgICAgICAgYXJyYXlbb2Zmc2V0ICsgc3RyaWRlICogMl0gPSB3MCAqIHN4O1xuICAgICAgICBhcnJheVtvZmZzZXQgKyBzdHJpZGUgKiAyICsgMV0gPSBoMCAqIHN5O1xuXG4gICAgICAgIGFycmF5W29mZnNldCArIHN0cmlkZSAqIDNdID0gdzEgKiBzeDtcbiAgICAgICAgYXJyYXlbb2Zmc2V0ICsgc3RyaWRlICogMyArIDFdID0gaDAgKiBzeTtcblxuICAgICAgICBvZmZzZXQgKz0gc3RyaWRlICogNDtcbiAgICB9XG5cbn07XG5cbi8qKlxuICpcbiAqIEBwYXJhbSBjaGlsZHJlbiB7UElYSS5EaXNwbGF5T2JqZWN0W119IHRoZSBhcnJheSBvZiBkaXNwbGF5IG9iamVjdHMgdG8gcmVuZGVyXG4gKiBAcGFyYW0gc3RhcnRJbmRleCB7bnVtYmVyfSB0aGUgaW5kZXggdG8gc3RhcnQgZnJvbSBpbiB0aGUgY2hpbGRyZW4gYXJyYXlcbiAqIEBwYXJhbSBhbW91bnQge251bWJlcn0gdGhlIGFtb3VudCBvZiBjaGlsZHJlbiB0aGF0IHdpbGwgaGF2ZSB0aGVpciBwb3NpdGlvbnMgdXBsb2FkZWRcbiAqIEBwYXJhbSBhcnJheSB7bnVtYmVyW119XG4gKiBAcGFyYW0gc3RyaWRlIHtudW1iZXJ9XG4gKiBAcGFyYW0gb2Zmc2V0IHtudW1iZXJ9XG4gKi9cblBhcnRpY2xlUmVuZGVyZXIucHJvdG90eXBlLnVwbG9hZFBvc2l0aW9uID0gZnVuY3Rpb24gKGNoaWxkcmVuLHN0YXJ0SW5kZXgsIGFtb3VudCwgYXJyYXksIHN0cmlkZSwgb2Zmc2V0KVxue1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYW1vdW50OyBpKyspXG4gICAge1xuICAgICAgICB2YXIgc3ByaXRlUG9zaXRpb24gPSBjaGlsZHJlbltzdGFydEluZGV4ICsgaV0ucG9zaXRpb247XG5cbiAgICAgICAgYXJyYXlbb2Zmc2V0XSA9IHNwcml0ZVBvc2l0aW9uLng7XG4gICAgICAgIGFycmF5W29mZnNldCArIDFdID0gc3ByaXRlUG9zaXRpb24ueTtcblxuICAgICAgICBhcnJheVtvZmZzZXQgKyBzdHJpZGVdID0gc3ByaXRlUG9zaXRpb24ueDtcbiAgICAgICAgYXJyYXlbb2Zmc2V0ICsgc3RyaWRlICsgMV0gPSBzcHJpdGVQb3NpdGlvbi55O1xuXG4gICAgICAgIGFycmF5W29mZnNldCArIHN0cmlkZSAqIDJdID0gc3ByaXRlUG9zaXRpb24ueDtcbiAgICAgICAgYXJyYXlbb2Zmc2V0ICsgc3RyaWRlICogMiArIDFdID0gc3ByaXRlUG9zaXRpb24ueTtcblxuICAgICAgICBhcnJheVtvZmZzZXQgKyBzdHJpZGUgKiAzXSA9IHNwcml0ZVBvc2l0aW9uLng7XG4gICAgICAgIGFycmF5W29mZnNldCArIHN0cmlkZSAqIDMgKyAxXSA9IHNwcml0ZVBvc2l0aW9uLnk7XG5cbiAgICAgICAgb2Zmc2V0ICs9IHN0cmlkZSAqIDQ7XG4gICAgfVxuXG59O1xuXG4vKipcbiAqXG4gKiBAcGFyYW0gY2hpbGRyZW4ge1BJWEkuRGlzcGxheU9iamVjdFtdfSB0aGUgYXJyYXkgb2YgZGlzcGxheSBvYmplY3RzIHRvIHJlbmRlclxuICogQHBhcmFtIHN0YXJ0SW5kZXgge251bWJlcn0gdGhlIGluZGV4IHRvIHN0YXJ0IGZyb20gaW4gdGhlIGNoaWxkcmVuIGFycmF5XG4gKiBAcGFyYW0gYW1vdW50IHtudW1iZXJ9IHRoZSBhbW91bnQgb2YgY2hpbGRyZW4gdGhhdCB3aWxsIGhhdmUgdGhlaXIgcm90YXRpb24gdXBsb2FkZWRcbiAqIEBwYXJhbSBhcnJheSB7bnVtYmVyW119XG4gKiBAcGFyYW0gc3RyaWRlIHtudW1iZXJ9XG4gKiBAcGFyYW0gb2Zmc2V0IHtudW1iZXJ9XG4gKi9cblBhcnRpY2xlUmVuZGVyZXIucHJvdG90eXBlLnVwbG9hZFJvdGF0aW9uID0gZnVuY3Rpb24gKGNoaWxkcmVuLHN0YXJ0SW5kZXgsIGFtb3VudCwgYXJyYXksIHN0cmlkZSwgb2Zmc2V0KVxue1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYW1vdW50OyBpKyspXG4gICAge1xuICAgICAgICB2YXIgc3ByaXRlUm90YXRpb24gPSBjaGlsZHJlbltzdGFydEluZGV4ICsgaV0ucm90YXRpb247XG5cblxuICAgICAgICBhcnJheVtvZmZzZXRdID0gc3ByaXRlUm90YXRpb247XG4gICAgICAgIGFycmF5W29mZnNldCArIHN0cmlkZV0gPSBzcHJpdGVSb3RhdGlvbjtcbiAgICAgICAgYXJyYXlbb2Zmc2V0ICsgc3RyaWRlICogMl0gPSBzcHJpdGVSb3RhdGlvbjtcbiAgICAgICAgYXJyYXlbb2Zmc2V0ICsgc3RyaWRlICogM10gPSBzcHJpdGVSb3RhdGlvbjtcblxuICAgICAgICBvZmZzZXQgKz0gc3RyaWRlICogNDtcbiAgICB9XG59O1xuXG4vKipcbiAqXG4gKiBAcGFyYW0gY2hpbGRyZW4ge1BJWEkuRGlzcGxheU9iamVjdFtdfSB0aGUgYXJyYXkgb2YgZGlzcGxheSBvYmplY3RzIHRvIHJlbmRlclxuICogQHBhcmFtIHN0YXJ0SW5kZXgge251bWJlcn0gdGhlIGluZGV4IHRvIHN0YXJ0IGZyb20gaW4gdGhlIGNoaWxkcmVuIGFycmF5XG4gKiBAcGFyYW0gYW1vdW50IHtudW1iZXJ9IHRoZSBhbW91bnQgb2YgY2hpbGRyZW4gdGhhdCB3aWxsIGhhdmUgdGhlaXIgVXZzIHVwbG9hZGVkXG4gKiBAcGFyYW0gYXJyYXkge251bWJlcltdfVxuICogQHBhcmFtIHN0cmlkZSB7bnVtYmVyfVxuICogQHBhcmFtIG9mZnNldCB7bnVtYmVyfVxuICovXG5QYXJ0aWNsZVJlbmRlcmVyLnByb3RvdHlwZS51cGxvYWRVdnMgPSBmdW5jdGlvbiAoY2hpbGRyZW4sc3RhcnRJbmRleCwgYW1vdW50LCBhcnJheSwgc3RyaWRlLCBvZmZzZXQpXG57XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhbW91bnQ7IGkrKylcbiAgICB7XG4gICAgICAgIHZhciB0ZXh0dXJlVXZzID0gY2hpbGRyZW5bc3RhcnRJbmRleCArIGldLl90ZXh0dXJlLl91dnM7XG5cbiAgICAgICAgaWYgKHRleHR1cmVVdnMpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGFycmF5W29mZnNldF0gPSB0ZXh0dXJlVXZzLngwO1xuICAgICAgICAgICAgYXJyYXlbb2Zmc2V0ICsgMV0gPSB0ZXh0dXJlVXZzLnkwO1xuXG4gICAgICAgICAgICBhcnJheVtvZmZzZXQgKyBzdHJpZGVdID0gdGV4dHVyZVV2cy54MTtcbiAgICAgICAgICAgIGFycmF5W29mZnNldCArIHN0cmlkZSArIDFdID0gdGV4dHVyZVV2cy55MTtcblxuICAgICAgICAgICAgYXJyYXlbb2Zmc2V0ICsgc3RyaWRlICogMl0gPSB0ZXh0dXJlVXZzLngyO1xuICAgICAgICAgICAgYXJyYXlbb2Zmc2V0ICsgc3RyaWRlICogMiArIDFdID0gdGV4dHVyZVV2cy55MjtcblxuICAgICAgICAgICAgYXJyYXlbb2Zmc2V0ICsgc3RyaWRlICogM10gPSB0ZXh0dXJlVXZzLngzO1xuICAgICAgICAgICAgYXJyYXlbb2Zmc2V0ICsgc3RyaWRlICogMyArIDFdID0gdGV4dHVyZVV2cy55MztcblxuICAgICAgICAgICAgb2Zmc2V0ICs9IHN0cmlkZSAqIDQ7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgICAvL1RPRE8geW91IGtub3cgdGhpcyBjYW4gYmUgZWFzaWVyIVxuICAgICAgICAgICAgYXJyYXlbb2Zmc2V0XSA9IDA7XG4gICAgICAgICAgICBhcnJheVtvZmZzZXQgKyAxXSA9IDA7XG5cbiAgICAgICAgICAgIGFycmF5W29mZnNldCArIHN0cmlkZV0gPSAwO1xuICAgICAgICAgICAgYXJyYXlbb2Zmc2V0ICsgc3RyaWRlICsgMV0gPSAwO1xuXG4gICAgICAgICAgICBhcnJheVtvZmZzZXQgKyBzdHJpZGUgKiAyXSA9IDA7XG4gICAgICAgICAgICBhcnJheVtvZmZzZXQgKyBzdHJpZGUgKiAyICsgMV0gPSAwO1xuXG4gICAgICAgICAgICBhcnJheVtvZmZzZXQgKyBzdHJpZGUgKiAzXSA9IDA7XG4gICAgICAgICAgICBhcnJheVtvZmZzZXQgKyBzdHJpZGUgKiAzICsgMV0gPSAwO1xuXG4gICAgICAgICAgICBvZmZzZXQgKz0gc3RyaWRlICogNDtcbiAgICAgICAgfVxuICAgIH1cbn07XG5cbi8qKlxuICpcbiAqIEBwYXJhbSBjaGlsZHJlbiB7UElYSS5EaXNwbGF5T2JqZWN0W119IHRoZSBhcnJheSBvZiBkaXNwbGF5IG9iamVjdHMgdG8gcmVuZGVyXG4gKiBAcGFyYW0gc3RhcnRJbmRleCB7bnVtYmVyfSB0aGUgaW5kZXggdG8gc3RhcnQgZnJvbSBpbiB0aGUgY2hpbGRyZW4gYXJyYXlcbiAqIEBwYXJhbSBhbW91bnQge251bWJlcn0gdGhlIGFtb3VudCBvZiBjaGlsZHJlbiB0aGF0IHdpbGwgaGF2ZSB0aGVpciBhbHBoYSB1cGxvYWRlZFxuICogQHBhcmFtIGFycmF5IHtudW1iZXJbXX1cbiAqIEBwYXJhbSBzdHJpZGUge251bWJlcn1cbiAqIEBwYXJhbSBvZmZzZXQge251bWJlcn1cbiAqL1xuUGFydGljbGVSZW5kZXJlci5wcm90b3R5cGUudXBsb2FkQWxwaGEgPSBmdW5jdGlvbiAoY2hpbGRyZW4sc3RhcnRJbmRleCwgYW1vdW50LCBhcnJheSwgc3RyaWRlLCBvZmZzZXQpXG57XG4gICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYW1vdW50OyBpKyspXG4gICAgIHtcbiAgICAgICAgdmFyIHNwcml0ZUFscGhhID0gY2hpbGRyZW5bc3RhcnRJbmRleCArIGldLmFscGhhO1xuXG4gICAgICAgIGFycmF5W29mZnNldF0gPSBzcHJpdGVBbHBoYTtcbiAgICAgICAgYXJyYXlbb2Zmc2V0ICsgc3RyaWRlXSA9IHNwcml0ZUFscGhhO1xuICAgICAgICBhcnJheVtvZmZzZXQgKyBzdHJpZGUgKiAyXSA9IHNwcml0ZUFscGhhO1xuICAgICAgICBhcnJheVtvZmZzZXQgKyBzdHJpZGUgKiAzXSA9IHNwcml0ZUFscGhhO1xuXG4gICAgICAgIG9mZnNldCArPSBzdHJpZGUgKiA0O1xuICAgIH1cbn07XG5cblxuLyoqXG4gKiBEZXN0cm95cyB0aGUgUGFydGljbGVSZW5kZXJlci5cbiAqXG4gKi9cblBhcnRpY2xlUmVuZGVyZXIucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoKVxue1xuICAgIGlmICh0aGlzLnJlbmRlcmVyLmdsKSB7XG4gICAgICAgIHRoaXMucmVuZGVyZXIuZ2wuZGVsZXRlQnVmZmVyKHRoaXMuaW5kZXhCdWZmZXIpO1xuICAgIH1cblxuICAgIE9iamVjdFJlbmRlcmVyLnByb3RvdHlwZS5kZXN0cm95LmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG5cbiAgICB0aGlzLnNoYWRlci5kZXN0cm95KCk7XG5cbiAgICB0aGlzLmluZGljZXMgPSBudWxsO1xuICAgIHRoaXMudGVtcE1hdHJpeCA9IG51bGw7XG59O1xuIiwidmFyIFRleHR1cmVTaGFkZXIgPSByZXF1aXJlKCcuLi8uLi9yZW5kZXJlcnMvd2ViZ2wvc2hhZGVycy9UZXh0dXJlU2hhZGVyJyk7XG5cbi8qKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLlRleHR1cmVTaGFkZXJcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gc2hhZGVyTWFuYWdlciB7U2hhZGVyTWFuYWdlcn0gVGhlIHdlYmdsIHNoYWRlciBtYW5hZ2VyIHRoaXMgc2hhZGVyIHdvcmtzIGZvci5cbiAqL1xuZnVuY3Rpb24gUGFydGljbGVTaGFkZXIoc2hhZGVyTWFuYWdlcilcbntcbiAgICBUZXh0dXJlU2hhZGVyLmNhbGwodGhpcyxcbiAgICAgICAgc2hhZGVyTWFuYWdlcixcbiAgICAgICAgLy8gdmVydGV4IHNoYWRlclxuICAgICAgICBbXG4gICAgICAgICAgICAnYXR0cmlidXRlIHZlYzIgYVZlcnRleFBvc2l0aW9uOycsXG4gICAgICAgICAgICAnYXR0cmlidXRlIHZlYzIgYVRleHR1cmVDb29yZDsnLFxuICAgICAgICAgICAgJ2F0dHJpYnV0ZSBmbG9hdCBhQ29sb3I7JyxcblxuICAgICAgICAgICAgJ2F0dHJpYnV0ZSB2ZWMyIGFQb3NpdGlvbkNvb3JkOycsXG4gICAgICAgICAgICAnYXR0cmlidXRlIHZlYzIgYVNjYWxlOycsXG4gICAgICAgICAgICAnYXR0cmlidXRlIGZsb2F0IGFSb3RhdGlvbjsnLFxuXG4gICAgICAgICAgICAndW5pZm9ybSBtYXQzIHByb2plY3Rpb25NYXRyaXg7JyxcblxuICAgICAgICAgICAgJ3ZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkOycsXG4gICAgICAgICAgICAndmFyeWluZyBmbG9hdCB2Q29sb3I7JyxcblxuICAgICAgICAgICAgJ3ZvaWQgbWFpbih2b2lkKXsnLFxuICAgICAgICAgICAgJyAgIHZlYzIgdiA9IGFWZXJ0ZXhQb3NpdGlvbjsnLFxuXG4gICAgICAgICAgICAnICAgdi54ID0gKGFWZXJ0ZXhQb3NpdGlvbi54KSAqIGNvcyhhUm90YXRpb24pIC0gKGFWZXJ0ZXhQb3NpdGlvbi55KSAqIHNpbihhUm90YXRpb24pOycsXG4gICAgICAgICAgICAnICAgdi55ID0gKGFWZXJ0ZXhQb3NpdGlvbi54KSAqIHNpbihhUm90YXRpb24pICsgKGFWZXJ0ZXhQb3NpdGlvbi55KSAqIGNvcyhhUm90YXRpb24pOycsXG4gICAgICAgICAgICAnICAgdiA9IHYgKyBhUG9zaXRpb25Db29yZDsnLFxuXG4gICAgICAgICAgICAnICAgZ2xfUG9zaXRpb24gPSB2ZWM0KChwcm9qZWN0aW9uTWF0cml4ICogdmVjMyh2LCAxLjApKS54eSwgMC4wLCAxLjApOycsXG5cbiAgICAgICAgICAgICcgICB2VGV4dHVyZUNvb3JkID0gYVRleHR1cmVDb29yZDsnLFxuICAgICAgICAgICAgJyAgIHZDb2xvciA9IGFDb2xvcjsnLFxuICAgICAgICAgICAgJ30nXG4gICAgICAgIF0uam9pbignXFxuJyksXG4gICAgICAgIC8vIGhlbGxvXG4gICAgICAgICBbXG4gICAgICAgICAgICAncHJlY2lzaW9uIGxvd3AgZmxvYXQ7JyxcblxuICAgICAgICAgICAgJ3ZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkOycsXG4gICAgICAgICAgICAndmFyeWluZyBmbG9hdCB2Q29sb3I7JyxcblxuICAgICAgICAgICAgJ3VuaWZvcm0gc2FtcGxlcjJEIHVTYW1wbGVyOycsXG4gICAgICAgICAgICAndW5pZm9ybSBmbG9hdCB1QWxwaGE7JyxcblxuICAgICAgICAgICAgJ3ZvaWQgbWFpbih2b2lkKXsnLFxuICAgICAgICAgICAgJyAgdmVjNCBjb2xvciA9IHRleHR1cmUyRCh1U2FtcGxlciwgdlRleHR1cmVDb29yZCkgKiB2Q29sb3IgKiB1QWxwaGE7JyxcbiAgICAgICAgICAgICcgIGlmIChjb2xvci5hID09IDAuMCkgZGlzY2FyZDsnLFxuICAgICAgICAgICAgJyAgZ2xfRnJhZ0NvbG9yID0gY29sb3I7JyxcbiAgICAgICAgICAgICd9J1xuICAgICAgICBdLmpvaW4oJ1xcbicpLFxuICAgICAgICAvLyBjdXN0b20gdW5pZm9ybXNcbiAgICAgICAge1xuICAgICAgICAgICAgdUFscGhhOiAgeyB0eXBlOiAnMWYnLCB2YWx1ZTogMSB9XG4gICAgICAgIH0sXG4gICAgICAgIC8vIGN1c3RvbSBhdHRyaWJ1dGVzXG4gICAgICAgIHtcbiAgICAgICAgICAgIGFQb3NpdGlvbkNvb3JkOiAwLFxuICAgICAgICAgICAvLyBhU2NhbGU6ICAgICAgICAgMCxcbiAgICAgICAgICAgIGFSb3RhdGlvbjogICAgICAwXG4gICAgICAgIH1cbiAgICApO1xuXG4gICAgLy8gVEVNUCBIQUNLXG5cbn1cblxuUGFydGljbGVTaGFkZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShUZXh0dXJlU2hhZGVyLnByb3RvdHlwZSk7XG5QYXJ0aWNsZVNoYWRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBQYXJ0aWNsZVNoYWRlcjtcblxubW9kdWxlLmV4cG9ydHMgPSBQYXJ0aWNsZVNoYWRlcjtcbiIsInZhciB1dGlscyA9IHJlcXVpcmUoJy4uL3V0aWxzJyksXG4gICAgbWF0aCA9IHJlcXVpcmUoJy4uL21hdGgnKSxcbiAgICBDT05TVCA9IHJlcXVpcmUoJy4uL2NvbnN0JyksXG4gICAgRXZlbnRFbWl0dGVyID0gcmVxdWlyZSgnZXZlbnRlbWl0dGVyMycpO1xuXG4vKipcbiAqIFRoZSBDYW52YXNSZW5kZXJlciBkcmF3cyB0aGUgc2NlbmUgYW5kIGFsbCBpdHMgY29udGVudCBvbnRvIGEgMmQgY2FudmFzLiBUaGlzIHJlbmRlcmVyIHNob3VsZCBiZSB1c2VkIGZvciBicm93c2VycyB0aGF0IGRvIG5vdCBzdXBwb3J0IHdlYkdMLlxuICogRG9uJ3QgZm9yZ2V0IHRvIGFkZCB0aGUgQ2FudmFzUmVuZGVyZXIudmlldyB0byB5b3VyIERPTSBvciB5b3Ugd2lsbCBub3Qgc2VlIGFueXRoaW5nIDopXG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIHN5c3RlbSB7c3RyaW5nfSBUaGUgbmFtZSBvZiB0aGUgc3lzdGVtIHRoaXMgcmVuZGVyZXIgaXMgZm9yLlxuICogQHBhcmFtIFt3aWR0aD04MDBdIHtudW1iZXJ9IHRoZSB3aWR0aCBvZiB0aGUgY2FudmFzIHZpZXdcbiAqIEBwYXJhbSBbaGVpZ2h0PTYwMF0ge251bWJlcn0gdGhlIGhlaWdodCBvZiB0aGUgY2FudmFzIHZpZXdcbiAqIEBwYXJhbSBbb3B0aW9uc10ge29iamVjdH0gVGhlIG9wdGlvbmFsIHJlbmRlcmVyIHBhcmFtZXRlcnNcbiAqIEBwYXJhbSBbb3B0aW9ucy52aWV3XSB7SFRNTENhbnZhc0VsZW1lbnR9IHRoZSBjYW52YXMgdG8gdXNlIGFzIGEgdmlldywgb3B0aW9uYWxcbiAqIEBwYXJhbSBbb3B0aW9ucy50cmFuc3BhcmVudD1mYWxzZV0ge2Jvb2xlYW59IElmIHRoZSByZW5kZXIgdmlldyBpcyB0cmFuc3BhcmVudCwgZGVmYXVsdCBmYWxzZVxuICogQHBhcmFtIFtvcHRpb25zLmF1dG9SZXNpemU9ZmFsc2VdIHtib29sZWFufSBJZiB0aGUgcmVuZGVyIHZpZXcgaXMgYXV0b21hdGljYWxseSByZXNpemVkLCBkZWZhdWx0IGZhbHNlXG4gKiBAcGFyYW0gW29wdGlvbnMuYW50aWFsaWFzPWZhbHNlXSB7Ym9vbGVhbn0gc2V0cyBhbnRpYWxpYXMgKG9ubHkgYXBwbGljYWJsZSBpbiBjaHJvbWUgYXQgdGhlIG1vbWVudClcbiAqIEBwYXJhbSBbb3B0aW9ucy5yZXNvbHV0aW9uPTFdIHtudW1iZXJ9IHRoZSByZXNvbHV0aW9uIG9mIHRoZSByZW5kZXJlciByZXRpbmEgd291bGQgYmUgMlxuICogQHBhcmFtIFtvcHRpb25zLmNsZWFyQmVmb3JlUmVuZGVyPXRydWVdIHtib29sZWFufSBUaGlzIHNldHMgaWYgdGhlIENhbnZhc1JlbmRlcmVyIHdpbGwgY2xlYXIgdGhlIGNhbnZhcyBvclxuICogICAgICBub3QgYmVmb3JlIHRoZSBuZXcgcmVuZGVyIHBhc3MuXG4gKiBAcGFyYW0gW29wdGlvbnMuYmFja2dyb3VuZENvbG9yPTB4MDAwMDAwXSB7bnVtYmVyfSBUaGUgYmFja2dyb3VuZCBjb2xvciBvZiB0aGUgcmVuZGVyZWQgYXJlYSAoc2hvd24gaWYgbm90IHRyYW5zcGFyZW50KS5cbiAqIEBwYXJhbSBbb3B0aW9ucy5yb3VuZFBpeGVscz1mYWxzZV0ge2Jvb2xlYW59IElmIHRydWUgUGl4aSB3aWxsIE1hdGguZmxvb3IoKSB4L3kgdmFsdWVzIHdoZW4gcmVuZGVyaW5nLCBzdG9wcGluZyBwaXhlbCBpbnRlcnBvbGF0aW9uLlxuICovXG5mdW5jdGlvbiBTeXN0ZW1SZW5kZXJlcihzeXN0ZW0sIHdpZHRoLCBoZWlnaHQsIG9wdGlvbnMpXG57XG4gICAgRXZlbnRFbWl0dGVyLmNhbGwodGhpcyk7XG5cbiAgICB1dGlscy5zYXlIZWxsbyhzeXN0ZW0pO1xuXG4gICAgLy8gcHJlcGFyZSBvcHRpb25zXG4gICAgaWYgKG9wdGlvbnMpXG4gICAge1xuICAgICAgICBmb3IgKHZhciBpIGluIENPTlNULkRFRkFVTFRfUkVOREVSX09QVElPTlMpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGlmICh0eXBlb2Ygb3B0aW9uc1tpXSA9PT0gJ3VuZGVmaW5lZCcpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgb3B0aW9uc1tpXSA9IENPTlNULkRFRkFVTFRfUkVOREVSX09QVElPTlNbaV07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgb3B0aW9ucyA9IENPTlNULkRFRkFVTFRfUkVOREVSX09QVElPTlM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhlIHR5cGUgb2YgdGhlIHJlbmRlcmVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IFBJWEkuUkVOREVSRVJfVFlQRS5VTktOT1dOXG4gICAgICogQHNlZSBQSVhJLlJFTkRFUkVSX1RZUEVcbiAgICAgKi9cbiAgICB0aGlzLnR5cGUgPSBDT05TVC5SRU5ERVJFUl9UWVBFLlVOS05PV047XG5cbiAgICAvKipcbiAgICAgKiBUaGUgd2lkdGggb2YgdGhlIGNhbnZhcyB2aWV3XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgODAwXG4gICAgICovXG4gICAgdGhpcy53aWR0aCA9IHdpZHRoIHx8IDgwMDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBoZWlnaHQgb2YgdGhlIGNhbnZhcyB2aWV3XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgNjAwXG4gICAgICovXG4gICAgdGhpcy5oZWlnaHQgPSBoZWlnaHQgfHwgNjAwO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGNhbnZhcyBlbGVtZW50IHRoYXQgZXZlcnl0aGluZyBpcyBkcmF3biB0b1xuICAgICAqXG4gICAgICogQG1lbWJlciB7SFRNTENhbnZhc0VsZW1lbnR9XG4gICAgICovXG4gICAgdGhpcy52aWV3ID0gb3B0aW9ucy52aWV3IHx8IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NhbnZhcycpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHJlc29sdXRpb24gb2YgdGhlIHJlbmRlcmVyXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMVxuICAgICAqL1xuICAgIHRoaXMucmVzb2x1dGlvbiA9IG9wdGlvbnMucmVzb2x1dGlvbjtcblxuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgdGhlIHJlbmRlciB2aWV3IGlzIHRyYW5zcGFyZW50XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqL1xuICAgIHRoaXMudHJhbnNwYXJlbnQgPSBvcHRpb25zLnRyYW5zcGFyZW50O1xuXG4gICAgLyoqXG4gICAgICogV2hldGhlciB0aGUgcmVuZGVyIHZpZXcgc2hvdWxkIGJlIHJlc2l6ZWQgYXV0b21hdGljYWxseVxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKi9cbiAgICB0aGlzLmF1dG9SZXNpemUgPSBvcHRpb25zLmF1dG9SZXNpemUgfHwgZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBUcmFja3MgdGhlIGJsZW5kIG1vZGVzIHVzZWZ1bCBmb3IgdGhpcyByZW5kZXJlci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge29iamVjdDxzdHJpbmcsIG1peGVkPn1cbiAgICAgKi9cbiAgICB0aGlzLmJsZW5kTW9kZXMgPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHZhbHVlIG9mIHRoZSBwcmVzZXJ2ZURyYXdpbmdCdWZmZXIgZmxhZyBhZmZlY3RzIHdoZXRoZXIgb3Igbm90IHRoZSBjb250ZW50cyBvZiB0aGUgc3RlbmNpbCBidWZmZXIgaXMgcmV0YWluZWQgYWZ0ZXIgcmVuZGVyaW5nLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKi9cbiAgICB0aGlzLnByZXNlcnZlRHJhd2luZ0J1ZmZlciA9IG9wdGlvbnMucHJlc2VydmVEcmF3aW5nQnVmZmVyO1xuXG4gICAgLyoqXG4gICAgICogVGhpcyBzZXRzIGlmIHRoZSBDYW52YXNSZW5kZXJlciB3aWxsIGNsZWFyIHRoZSBjYW52YXMgb3Igbm90IGJlZm9yZSB0aGUgbmV3IHJlbmRlciBwYXNzLlxuICAgICAqIElmIHRoZSBzY2VuZSBpcyBOT1QgdHJhbnNwYXJlbnQgUGl4aSB3aWxsIHVzZSBhIGNhbnZhcyBzaXplZCBmaWxsUmVjdCBvcGVyYXRpb24gZXZlcnkgZnJhbWUgdG8gc2V0IHRoZSBjYW52YXMgYmFja2dyb3VuZCBjb2xvci5cbiAgICAgKiBJZiB0aGUgc2NlbmUgaXMgdHJhbnNwYXJlbnQgUGl4aSB3aWxsIHVzZSBjbGVhclJlY3QgdG8gY2xlYXIgdGhlIGNhbnZhcyBldmVyeSBmcmFtZS5cbiAgICAgKiBEaXNhYmxlIHRoaXMgYnkgc2V0dGluZyB0aGlzIHRvIGZhbHNlLiBGb3IgZXhhbXBsZSBpZiB5b3VyIGdhbWUgaGFzIGEgY2FudmFzIGZpbGxpbmcgYmFja2dyb3VuZCBpbWFnZSB5b3Ugb2Z0ZW4gZG9uJ3QgbmVlZCB0aGlzIHNldC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICogQGRlZmF1bHRcbiAgICAgKi9cbiAgICB0aGlzLmNsZWFyQmVmb3JlUmVuZGVyID0gb3B0aW9ucy5jbGVhckJlZm9yZVJlbmRlcjtcblxuICAgIC8qKlxuICAgICAqIElmIHRydWUgUGl4aSB3aWxsIE1hdGguZmxvb3IoKSB4L3kgdmFsdWVzIHdoZW4gcmVuZGVyaW5nLCBzdG9wcGluZyBwaXhlbCBpbnRlcnBvbGF0aW9uLlxuICAgICAqIEhhbmR5IGZvciBjcmlzcCBwaXhlbCBhcnQgYW5kIHNwZWVkIG9uIGxlZ2FjeSBkZXZpY2VzLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKi9cbiAgICB0aGlzLnJvdW5kUGl4ZWxzID0gb3B0aW9ucy5yb3VuZFBpeGVscztcblxuICAgIC8qKlxuICAgICAqIFRoZSBiYWNrZ3JvdW5kIGNvbG9yIGFzIGEgbnVtYmVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fYmFja2dyb3VuZENvbG9yID0gMHgwMDAwMDA7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYmFja2dyb3VuZCBjb2xvciBhcyBhbiBbUiwgRywgQl0gYXJyYXkuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJbXX1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX2JhY2tncm91bmRDb2xvclJnYmEgPSBbMCwgMCwgMCwgMF07XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYmFja2dyb3VuZCBjb2xvciBhcyBhIHN0cmluZy5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge3N0cmluZ31cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX2JhY2tncm91bmRDb2xvclN0cmluZyA9ICcjMDAwMDAwJztcblxuICAgIHRoaXMuYmFja2dyb3VuZENvbG9yID0gb3B0aW9ucy5iYWNrZ3JvdW5kQ29sb3IgfHwgdGhpcy5fYmFja2dyb3VuZENvbG9yOyAvLyBydW4gYmcgY29sb3Igc2V0dGVyXG5cbiAgICAvKipcbiAgICAgKiBUaGlzIHRlbXBvcmFyeSBkaXNwbGF5IG9iamVjdCB1c2VkIGFzIHRoZSBwYXJlbnQgb2YgdGhlIGN1cnJlbnRseSBiZWluZyByZW5kZXJlZCBpdGVtXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLkRpc3BsYXlPYmplY3R9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl90ZW1wRGlzcGxheU9iamVjdFBhcmVudCA9IHt3b3JsZFRyYW5zZm9ybTpuZXcgbWF0aC5NYXRyaXgoKSwgd29ybGRBbHBoYToxLCBjaGlsZHJlbjpbXX07XG5cbiAgICAvKipcbiAgICAgKiBUaGUgbGFzdCByb290IG9iamVjdCB0aGF0IHRoZSByZW5kZXJlciB0cmllZCB0byByZW5kZXIuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLkRpc3BsYXlPYmplY3R9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9sYXN0T2JqZWN0UmVuZGVyZWQgPSB0aGlzLl90ZW1wRGlzcGxheU9iamVjdFBhcmVudDtcbn1cblxuLy8gY29uc3RydWN0b3JcblN5c3RlbVJlbmRlcmVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoRXZlbnRFbWl0dGVyLnByb3RvdHlwZSk7XG5TeXN0ZW1SZW5kZXJlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBTeXN0ZW1SZW5kZXJlcjtcbm1vZHVsZS5leHBvcnRzID0gU3lzdGVtUmVuZGVyZXI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKFN5c3RlbVJlbmRlcmVyLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFRoZSBiYWNrZ3JvdW5kIGNvbG9yIHRvIGZpbGwgaWYgbm90IHRyYW5zcGFyZW50XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuU3lzdGVtUmVuZGVyZXIjXG4gICAgICovXG4gICAgYmFja2dyb3VuZENvbG9yOlxuICAgIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fYmFja2dyb3VuZENvbG9yO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWwpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuX2JhY2tncm91bmRDb2xvciA9IHZhbDtcbiAgICAgICAgICAgIHRoaXMuX2JhY2tncm91bmRDb2xvclN0cmluZyA9IHV0aWxzLmhleDJzdHJpbmcodmFsKTtcbiAgICAgICAgICAgIHV0aWxzLmhleDJyZ2IodmFsLCB0aGlzLl9iYWNrZ3JvdW5kQ29sb3JSZ2JhKTtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuXG4vKipcbiAqIFJlc2l6ZXMgdGhlIGNhbnZhcyB2aWV3IHRvIHRoZSBzcGVjaWZpZWQgd2lkdGggYW5kIGhlaWdodFxuICpcbiAqIEBwYXJhbSB3aWR0aCB7bnVtYmVyfSB0aGUgbmV3IHdpZHRoIG9mIHRoZSBjYW52YXMgdmlld1xuICogQHBhcmFtIGhlaWdodCB7bnVtYmVyfSB0aGUgbmV3IGhlaWdodCBvZiB0aGUgY2FudmFzIHZpZXdcbiAqL1xuU3lzdGVtUmVuZGVyZXIucHJvdG90eXBlLnJlc2l6ZSA9IGZ1bmN0aW9uICh3aWR0aCwgaGVpZ2h0KSB7XG4gICAgdGhpcy53aWR0aCA9IHdpZHRoICogdGhpcy5yZXNvbHV0aW9uO1xuICAgIHRoaXMuaGVpZ2h0ID0gaGVpZ2h0ICogdGhpcy5yZXNvbHV0aW9uO1xuXG4gICAgdGhpcy52aWV3LndpZHRoID0gdGhpcy53aWR0aDtcbiAgICB0aGlzLnZpZXcuaGVpZ2h0ID0gdGhpcy5oZWlnaHQ7XG5cbiAgICBpZiAodGhpcy5hdXRvUmVzaXplKVxuICAgIHtcbiAgICAgICAgdGhpcy52aWV3LnN0eWxlLndpZHRoID0gdGhpcy53aWR0aCAvIHRoaXMucmVzb2x1dGlvbiArICdweCc7XG4gICAgICAgIHRoaXMudmlldy5zdHlsZS5oZWlnaHQgPSB0aGlzLmhlaWdodCAvIHRoaXMucmVzb2x1dGlvbiArICdweCc7XG4gICAgfVxufTtcblxuLyoqXG4gKiBSZW1vdmVzIGV2ZXJ5dGhpbmcgZnJvbSB0aGUgcmVuZGVyZXIgYW5kIG9wdGlvbmFsbHkgcmVtb3ZlcyB0aGUgQ2FudmFzIERPTSBlbGVtZW50LlxuICpcbiAqIEBwYXJhbSBbcmVtb3ZlVmlldz1mYWxzZV0ge2Jvb2xlYW59IFJlbW92ZXMgdGhlIENhbnZhcyBlbGVtZW50IGZyb20gdGhlIERPTS5cbiAqL1xuU3lzdGVtUmVuZGVyZXIucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAocmVtb3ZlVmlldykge1xuICAgIGlmIChyZW1vdmVWaWV3ICYmIHRoaXMudmlldy5wYXJlbnROb2RlKVxuICAgIHtcbiAgICAgICAgdGhpcy52aWV3LnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodGhpcy52aWV3KTtcbiAgICB9XG5cbiAgICB0aGlzLnR5cGUgPSBDT05TVC5SRU5ERVJFUl9UWVBFLlVOS05PV047XG5cbiAgICB0aGlzLndpZHRoID0gMDtcbiAgICB0aGlzLmhlaWdodCA9IDA7XG5cbiAgICB0aGlzLnZpZXcgPSBudWxsO1xuXG4gICAgdGhpcy5yZXNvbHV0aW9uID0gMDtcblxuICAgIHRoaXMudHJhbnNwYXJlbnQgPSBmYWxzZTtcblxuICAgIHRoaXMuYXV0b1Jlc2l6ZSA9IGZhbHNlO1xuXG4gICAgdGhpcy5ibGVuZE1vZGVzID0gbnVsbDtcblxuICAgIHRoaXMucHJlc2VydmVEcmF3aW5nQnVmZmVyID0gZmFsc2U7XG4gICAgdGhpcy5jbGVhckJlZm9yZVJlbmRlciA9IGZhbHNlO1xuXG4gICAgdGhpcy5yb3VuZFBpeGVscyA9IGZhbHNlO1xuXG4gICAgdGhpcy5fYmFja2dyb3VuZENvbG9yID0gMDtcbiAgICB0aGlzLl9iYWNrZ3JvdW5kQ29sb3JSZ2JhID0gbnVsbDtcbiAgICB0aGlzLl9iYWNrZ3JvdW5kQ29sb3JTdHJpbmcgPSBudWxsO1xufTtcbiIsInZhciBTeXN0ZW1SZW5kZXJlciA9IHJlcXVpcmUoJy4uL1N5c3RlbVJlbmRlcmVyJyksXG4gICAgQ2FudmFzTWFza01hbmFnZXIgPSByZXF1aXJlKCcuL3V0aWxzL0NhbnZhc01hc2tNYW5hZ2VyJyksXG4gICAgdXRpbHMgPSByZXF1aXJlKCcuLi8uLi91dGlscycpLFxuICAgIG1hdGggPSByZXF1aXJlKCcuLi8uLi9tYXRoJyksXG4gICAgQ09OU1QgPSByZXF1aXJlKCcuLi8uLi9jb25zdCcpO1xuXG4vKipcbiAqIFRoZSBDYW52YXNSZW5kZXJlciBkcmF3cyB0aGUgc2NlbmUgYW5kIGFsbCBpdHMgY29udGVudCBvbnRvIGEgMmQgY2FudmFzLiBUaGlzIHJlbmRlcmVyIHNob3VsZCBiZSB1c2VkIGZvciBicm93c2VycyB0aGF0IGRvIG5vdCBzdXBwb3J0IHdlYkdMLlxuICogRG9uJ3QgZm9yZ2V0IHRvIGFkZCB0aGUgQ2FudmFzUmVuZGVyZXIudmlldyB0byB5b3VyIERPTSBvciB5b3Ugd2lsbCBub3Qgc2VlIGFueXRoaW5nIDopXG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQGV4dGVuZHMgUElYSS5TeXN0ZW1SZW5kZXJlclxuICogQHBhcmFtIFt3aWR0aD04MDBdIHtudW1iZXJ9IHRoZSB3aWR0aCBvZiB0aGUgY2FudmFzIHZpZXdcbiAqIEBwYXJhbSBbaGVpZ2h0PTYwMF0ge251bWJlcn0gdGhlIGhlaWdodCBvZiB0aGUgY2FudmFzIHZpZXdcbiAqIEBwYXJhbSBbb3B0aW9uc10ge29iamVjdH0gVGhlIG9wdGlvbmFsIHJlbmRlcmVyIHBhcmFtZXRlcnNcbiAqIEBwYXJhbSBbb3B0aW9ucy52aWV3XSB7SFRNTENhbnZhc0VsZW1lbnR9IHRoZSBjYW52YXMgdG8gdXNlIGFzIGEgdmlldywgb3B0aW9uYWxcbiAqIEBwYXJhbSBbb3B0aW9ucy50cmFuc3BhcmVudD1mYWxzZV0ge2Jvb2xlYW59IElmIHRoZSByZW5kZXIgdmlldyBpcyB0cmFuc3BhcmVudCwgZGVmYXVsdCBmYWxzZVxuICogQHBhcmFtIFtvcHRpb25zLmF1dG9SZXNpemU9ZmFsc2VdIHtib29sZWFufSBJZiB0aGUgcmVuZGVyIHZpZXcgaXMgYXV0b21hdGljYWxseSByZXNpemVkLCBkZWZhdWx0IGZhbHNlXG4gKiBAcGFyYW0gW29wdGlvbnMuYW50aWFsaWFzPWZhbHNlXSB7Ym9vbGVhbn0gc2V0cyBhbnRpYWxpYXMgKG9ubHkgYXBwbGljYWJsZSBpbiBjaHJvbWUgYXQgdGhlIG1vbWVudClcbiAqIEBwYXJhbSBbb3B0aW9ucy5yZXNvbHV0aW9uPTFdIHtudW1iZXJ9IHRoZSByZXNvbHV0aW9uIG9mIHRoZSByZW5kZXJlciByZXRpbmEgd291bGQgYmUgMlxuICogQHBhcmFtIFtvcHRpb25zLmNsZWFyQmVmb3JlUmVuZGVyPXRydWVdIHtib29sZWFufSBUaGlzIHNldHMgaWYgdGhlIENhbnZhc1JlbmRlcmVyIHdpbGwgY2xlYXIgdGhlIGNhbnZhcyBvclxuICogICAgICBub3QgYmVmb3JlIHRoZSBuZXcgcmVuZGVyIHBhc3MuXG4gKiBAcGFyYW0gW29wdGlvbnMucm91bmRQaXhlbHM9ZmFsc2VdIHtib29sZWFufSBJZiB0cnVlIFBpeGkgd2lsbCBNYXRoLmZsb29yKCkgeC95IHZhbHVlcyB3aGVuIHJlbmRlcmluZywgc3RvcHBpbmcgcGl4ZWwgaW50ZXJwb2xhdGlvbi5cbiAqL1xuZnVuY3Rpb24gQ2FudmFzUmVuZGVyZXIod2lkdGgsIGhlaWdodCwgb3B0aW9ucylcbntcbiAgICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcblxuICAgIFN5c3RlbVJlbmRlcmVyLmNhbGwodGhpcywgJ0NhbnZhcycsIHdpZHRoLCBoZWlnaHQsIG9wdGlvbnMpO1xuXG4gICAgdGhpcy50eXBlID0gQ09OU1QuUkVOREVSRVJfVFlQRS5DQU5WQVM7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgY2FudmFzIDJkIGNvbnRleHQgdGhhdCBldmVyeXRoaW5nIGlzIGRyYXduIHdpdGguXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtDYW52YXNSZW5kZXJpbmdDb250ZXh0MkR9XG4gICAgICovXG4gICAgdGhpcy5jb250ZXh0ID0gdGhpcy52aWV3LmdldENvbnRleHQoJzJkJywgeyBhbHBoYTogdGhpcy50cmFuc3BhcmVudCB9KTtcblxuICAgIC8qKlxuICAgICAqIEJvb2xlYW4gZmxhZyBjb250cm9sbGluZyBjYW52YXMgcmVmcmVzaC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICovXG4gICAgdGhpcy5yZWZyZXNoID0gdHJ1ZTtcblxuICAgIC8qKlxuICAgICAqIEluc3RhbmNlIG9mIGEgQ2FudmFzTWFza01hbmFnZXIsIGhhbmRsZXMgbWFza2luZyB3aGVuIHVzaW5nIHRoZSBjYW52YXMgcmVuZGVyZXIuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLkNhbnZhc01hc2tNYW5hZ2VyfVxuICAgICAqL1xuICAgIHRoaXMubWFza01hbmFnZXIgPSBuZXcgQ2FudmFzTWFza01hbmFnZXIoKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBjYW52YXMgcHJvcGVydHkgdXNlZCB0byBzZXQgdGhlIGNhbnZhcyBzbW9vdGhpbmcgcHJvcGVydHkuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtzdHJpbmd9XG4gICAgICovXG4gICAgdGhpcy5zbW9vdGhQcm9wZXJ0eSA9ICdpbWFnZVNtb290aGluZ0VuYWJsZWQnO1xuXG4gICAgaWYgKCF0aGlzLmNvbnRleHQuaW1hZ2VTbW9vdGhpbmdFbmFibGVkKVxuICAgIHtcbiAgICAgICAgaWYgKHRoaXMuY29udGV4dC53ZWJraXRJbWFnZVNtb290aGluZ0VuYWJsZWQpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuc21vb3RoUHJvcGVydHkgPSAnd2Via2l0SW1hZ2VTbW9vdGhpbmdFbmFibGVkJztcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh0aGlzLmNvbnRleHQubW96SW1hZ2VTbW9vdGhpbmdFbmFibGVkKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnNtb290aFByb3BlcnR5ID0gJ21vekltYWdlU21vb3RoaW5nRW5hYmxlZCc7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodGhpcy5jb250ZXh0Lm9JbWFnZVNtb290aGluZ0VuYWJsZWQpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuc21vb3RoUHJvcGVydHkgPSAnb0ltYWdlU21vb3RoaW5nRW5hYmxlZCc7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodGhpcy5jb250ZXh0Lm1zSW1hZ2VTbW9vdGhpbmdFbmFibGVkKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnNtb290aFByb3BlcnR5ID0gJ21zSW1hZ2VTbW9vdGhpbmdFbmFibGVkJztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMuaW5pdFBsdWdpbnMoKTtcblxuICAgIHRoaXMuX21hcEJsZW5kTW9kZXMoKTtcblxuICAgIC8qKlxuICAgICAqIFRoaXMgdGVtcG9yYXJ5IGRpc3BsYXkgb2JqZWN0IHVzZWQgYXMgdGhlIHBhcmVudCBvZiB0aGUgY3VycmVudGx5IGJlaW5nIHJlbmRlcmVkIGl0ZW1cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuRGlzcGxheU9iamVjdH1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX3RlbXBEaXNwbGF5T2JqZWN0UGFyZW50ID0ge1xuICAgICAgICB3b3JsZFRyYW5zZm9ybTogbmV3IG1hdGguTWF0cml4KCksXG4gICAgICAgIHdvcmxkQWxwaGE6IDFcbiAgICB9O1xuXG5cbiAgICB0aGlzLnJlc2l6ZSh3aWR0aCwgaGVpZ2h0KTtcbn1cblxuLy8gY29uc3RydWN0b3JcbkNhbnZhc1JlbmRlcmVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoU3lzdGVtUmVuZGVyZXIucHJvdG90eXBlKTtcbkNhbnZhc1JlbmRlcmVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IENhbnZhc1JlbmRlcmVyO1xubW9kdWxlLmV4cG9ydHMgPSBDYW52YXNSZW5kZXJlcjtcbnV0aWxzLnBsdWdpblRhcmdldC5taXhpbihDYW52YXNSZW5kZXJlcik7XG5cbi8qKlxuICogUmVuZGVycyB0aGUgb2JqZWN0IHRvIHRoaXMgY2FudmFzIHZpZXdcbiAqXG4gKiBAcGFyYW0gb2JqZWN0IHtQSVhJLkRpc3BsYXlPYmplY3R9IHRoZSBvYmplY3QgdG8gYmUgcmVuZGVyZWRcbiAqL1xuQ2FudmFzUmVuZGVyZXIucHJvdG90eXBlLnJlbmRlciA9IGZ1bmN0aW9uIChvYmplY3QpXG57XG4gICAgdGhpcy5lbWl0KCdwcmVyZW5kZXInKTtcblxuICAgIHZhciBjYWNoZVBhcmVudCA9IG9iamVjdC5wYXJlbnQ7XG5cbiAgICB0aGlzLl9sYXN0T2JqZWN0UmVuZGVyZWQgPSBvYmplY3Q7XG5cbiAgICBvYmplY3QucGFyZW50ID0gdGhpcy5fdGVtcERpc3BsYXlPYmplY3RQYXJlbnQ7XG5cbiAgICAvLyB1cGRhdGUgdGhlIHNjZW5lIGdyYXBoXG4gICAgb2JqZWN0LnVwZGF0ZVRyYW5zZm9ybSgpO1xuXG4gICAgb2JqZWN0LnBhcmVudCA9IGNhY2hlUGFyZW50O1xuXG4gICAgdGhpcy5jb250ZXh0LnNldFRyYW5zZm9ybSgxLCAwLCAwLCAxLCAwLCAwKTtcblxuICAgIHRoaXMuY29udGV4dC5nbG9iYWxBbHBoYSA9IDE7XG5cbiAgICB0aGlzLmNvbnRleHQuZ2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uID0gdGhpcy5ibGVuZE1vZGVzW0NPTlNULkJMRU5EX01PREVTLk5PUk1BTF07XG5cbiAgICBpZiAobmF2aWdhdG9yLmlzQ29jb29uSlMgJiYgdGhpcy52aWV3LnNjcmVlbmNhbnZhcylcbiAgICB7XG4gICAgICAgIHRoaXMuY29udGV4dC5maWxsU3R5bGUgPSAnYmxhY2snO1xuICAgICAgICB0aGlzLmNvbnRleHQuY2xlYXIoKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5jbGVhckJlZm9yZVJlbmRlcilcbiAgICB7XG4gICAgICAgIGlmICh0aGlzLnRyYW5zcGFyZW50KVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmNvbnRleHQuY2xlYXJSZWN0KDAsIDAsIHRoaXMud2lkdGgsIHRoaXMuaGVpZ2h0KTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuY29udGV4dC5maWxsU3R5bGUgPSB0aGlzLl9iYWNrZ3JvdW5kQ29sb3JTdHJpbmc7XG4gICAgICAgICAgICB0aGlzLmNvbnRleHQuZmlsbFJlY3QoMCwgMCwgdGhpcy53aWR0aCAsIHRoaXMuaGVpZ2h0KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMucmVuZGVyRGlzcGxheU9iamVjdChvYmplY3QsIHRoaXMuY29udGV4dCk7XG5cbiAgICB0aGlzLmVtaXQoJ3Bvc3RyZW5kZXInKTtcbn07XG5cbi8qKlxuICogUmVtb3ZlcyBldmVyeXRoaW5nIGZyb20gdGhlIHJlbmRlcmVyIGFuZCBvcHRpb25hbGx5IHJlbW92ZXMgdGhlIENhbnZhcyBET00gZWxlbWVudC5cbiAqXG4gKiBAcGFyYW0gW3JlbW92ZVZpZXc9ZmFsc2VdIHtib29sZWFufSBSZW1vdmVzIHRoZSBDYW52YXMgZWxlbWVudCBmcm9tIHRoZSBET00uXG4gKi9cbkNhbnZhc1JlbmRlcmVyLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKHJlbW92ZVZpZXcpXG57XG4gICAgdGhpcy5kZXN0cm95UGx1Z2lucygpO1xuXG4gICAgLy8gY2FsbCB0aGUgYmFzZSBkZXN0cm95XG4gICAgU3lzdGVtUmVuZGVyZXIucHJvdG90eXBlLmRlc3Ryb3kuY2FsbCh0aGlzLCByZW1vdmVWaWV3KTtcblxuICAgIHRoaXMuY29udGV4dCA9IG51bGw7XG5cbiAgICB0aGlzLnJlZnJlc2ggPSB0cnVlO1xuXG4gICAgdGhpcy5tYXNrTWFuYWdlci5kZXN0cm95KCk7XG4gICAgdGhpcy5tYXNrTWFuYWdlciA9IG51bGw7XG5cbiAgICB0aGlzLnNtb290aFByb3BlcnR5ID0gbnVsbDtcbn07XG5cbi8qKlxuICogUmVuZGVycyBhIGRpc3BsYXkgb2JqZWN0XG4gKlxuICogQHBhcmFtIGRpc3BsYXlPYmplY3Qge1BJWEkuRGlzcGxheU9iamVjdH0gVGhlIGRpc3BsYXlPYmplY3QgdG8gcmVuZGVyXG4gKiBAcHJpdmF0ZVxuICovXG5DYW52YXNSZW5kZXJlci5wcm90b3R5cGUucmVuZGVyRGlzcGxheU9iamVjdCA9IGZ1bmN0aW9uIChkaXNwbGF5T2JqZWN0LCBjb250ZXh0KVxue1xuICAgIHZhciB0ZW1wQ29udGV4dCA9IHRoaXMuY29udGV4dDtcblxuICAgIHRoaXMuY29udGV4dCA9IGNvbnRleHQ7XG4gICAgZGlzcGxheU9iamVjdC5yZW5kZXJDYW52YXModGhpcyk7XG4gICAgdGhpcy5jb250ZXh0ID0gdGVtcENvbnRleHQ7XG59O1xuXG4vKipcbiAqIEBleHRlbmRzIFBJWEkuU3lzdGVtUmVuZGVyZXIjcmVzaXplXG4gKlxuICogQHBhcmFtIHtudW1iZXJ9IHdcbiAqIEBwYXJhbSB7bnVtYmVyfSBoXG4gKi9cbkNhbnZhc1JlbmRlcmVyLnByb3RvdHlwZS5yZXNpemUgPSBmdW5jdGlvbiAodywgaClcbntcbiAgICBTeXN0ZW1SZW5kZXJlci5wcm90b3R5cGUucmVzaXplLmNhbGwodGhpcywgdywgaCk7XG5cbiAgICAvL3Jlc2V0IHRoZSBzY2FsZSBtb2RlLi4gb2RkbHkgdGhpcyBzZWVtcyB0byBiZSByZXNldCB3aGVuIHRoZSBjYW52YXMgaXMgcmVzaXplZC5cbiAgICAvL3N1cmVseSBhIGJyb3dzZXIgYnVnPz8gTGV0IHBpeGkgZml4IHRoYXQgZm9yIHlvdS4uXG4gICAgaWYodGhpcy5zbW9vdGhQcm9wZXJ0eSlcbiAgICB7XG4gICAgICAgIHRoaXMuY29udGV4dFt0aGlzLnNtb290aFByb3BlcnR5XSA9IChDT05TVC5TQ0FMRV9NT0RFUy5ERUZBVUxUID09PSBDT05TVC5TQ0FMRV9NT0RFUy5MSU5FQVIpO1xuICAgIH1cblxufTtcblxuLyoqXG4gKiBNYXBzIFBpeGkgYmxlbmQgbW9kZXMgdG8gY2FudmFzIGJsZW5kIG1vZGVzLlxuICpcbiAqIEBwcml2YXRlXG4gKi9cbkNhbnZhc1JlbmRlcmVyLnByb3RvdHlwZS5fbWFwQmxlbmRNb2RlcyA9IGZ1bmN0aW9uICgpXG57XG4gICAgaWYgKCF0aGlzLmJsZW5kTW9kZXMpXG4gICAge1xuICAgICAgICB0aGlzLmJsZW5kTW9kZXMgPSB7fTtcblxuICAgICAgICBpZiAodXRpbHMuY2FuVXNlTmV3Q2FudmFzQmxlbmRNb2RlcygpKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuTk9STUFMXSAgICAgICAgPSAnc291cmNlLW92ZXInO1xuICAgICAgICAgICAgdGhpcy5ibGVuZE1vZGVzW0NPTlNULkJMRU5EX01PREVTLkFERF0gICAgICAgICAgID0gJ2xpZ2h0ZXInOyAvL0lTIFRISVMgT0s/Pz9cbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5NVUxUSVBMWV0gICAgICA9ICdtdWx0aXBseSc7XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuU0NSRUVOXSAgICAgICAgPSAnc2NyZWVuJztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5PVkVSTEFZXSAgICAgICA9ICdvdmVybGF5JztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5EQVJLRU5dICAgICAgICA9ICdkYXJrZW4nO1xuICAgICAgICAgICAgdGhpcy5ibGVuZE1vZGVzW0NPTlNULkJMRU5EX01PREVTLkxJR0hURU5dICAgICAgID0gJ2xpZ2h0ZW4nO1xuICAgICAgICAgICAgdGhpcy5ibGVuZE1vZGVzW0NPTlNULkJMRU5EX01PREVTLkNPTE9SX0RPREdFXSAgID0gJ2NvbG9yLWRvZGdlJztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5DT0xPUl9CVVJOXSAgICA9ICdjb2xvci1idXJuJztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5IQVJEX0xJR0hUXSAgICA9ICdoYXJkLWxpZ2h0JztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5TT0ZUX0xJR0hUXSAgICA9ICdzb2Z0LWxpZ2h0JztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5ESUZGRVJFTkNFXSAgICA9ICdkaWZmZXJlbmNlJztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5FWENMVVNJT05dICAgICA9ICdleGNsdXNpb24nO1xuICAgICAgICAgICAgdGhpcy5ibGVuZE1vZGVzW0NPTlNULkJMRU5EX01PREVTLkhVRV0gICAgICAgICAgID0gJ2h1ZSc7XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuU0FUVVJBVElPTl0gICAgPSAnc2F0dXJhdGUnO1xuICAgICAgICAgICAgdGhpcy5ibGVuZE1vZGVzW0NPTlNULkJMRU5EX01PREVTLkNPTE9SXSAgICAgICAgID0gJ2NvbG9yJztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5MVU1JTk9TSVRZXSAgICA9ICdsdW1pbm9zaXR5JztcbiAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgIHtcbiAgICAgICAgICAgIC8vIHRoaXMgbWVhbnMgdGhhdCB0aGUgYnJvd3NlciBkb2VzIG5vdCBzdXBwb3J0IHRoZSBjb29sIG5ldyBibGVuZCBtb2RlcyBpbiBjYW52YXMgJ2NvdWdoJyBpZSAnY291Z2gnXG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuTk9STUFMXSAgICAgICAgPSAnc291cmNlLW92ZXInO1xuICAgICAgICAgICAgdGhpcy5ibGVuZE1vZGVzW0NPTlNULkJMRU5EX01PREVTLkFERF0gICAgICAgICAgID0gJ2xpZ2h0ZXInOyAvL0lTIFRISVMgT0s/Pz9cbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5NVUxUSVBMWV0gICAgICA9ICdzb3VyY2Utb3Zlcic7XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuU0NSRUVOXSAgICAgICAgPSAnc291cmNlLW92ZXInO1xuICAgICAgICAgICAgdGhpcy5ibGVuZE1vZGVzW0NPTlNULkJMRU5EX01PREVTLk9WRVJMQVldICAgICAgID0gJ3NvdXJjZS1vdmVyJztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5EQVJLRU5dICAgICAgICA9ICdzb3VyY2Utb3Zlcic7XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuTElHSFRFTl0gICAgICAgPSAnc291cmNlLW92ZXInO1xuICAgICAgICAgICAgdGhpcy5ibGVuZE1vZGVzW0NPTlNULkJMRU5EX01PREVTLkNPTE9SX0RPREdFXSAgID0gJ3NvdXJjZS1vdmVyJztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5DT0xPUl9CVVJOXSAgICA9ICdzb3VyY2Utb3Zlcic7XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuSEFSRF9MSUdIVF0gICAgPSAnc291cmNlLW92ZXInO1xuICAgICAgICAgICAgdGhpcy5ibGVuZE1vZGVzW0NPTlNULkJMRU5EX01PREVTLlNPRlRfTElHSFRdICAgID0gJ3NvdXJjZS1vdmVyJztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5ESUZGRVJFTkNFXSAgICA9ICdzb3VyY2Utb3Zlcic7XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuRVhDTFVTSU9OXSAgICAgPSAnc291cmNlLW92ZXInO1xuICAgICAgICAgICAgdGhpcy5ibGVuZE1vZGVzW0NPTlNULkJMRU5EX01PREVTLkhVRV0gICAgICAgICAgID0gJ3NvdXJjZS1vdmVyJztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5TQVRVUkFUSU9OXSAgICA9ICdzb3VyY2Utb3Zlcic7XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuQ09MT1JdICAgICAgICAgPSAnc291cmNlLW92ZXInO1xuICAgICAgICAgICAgdGhpcy5ibGVuZE1vZGVzW0NPTlNULkJMRU5EX01PREVTLkxVTUlOT1NJVFldICAgID0gJ3NvdXJjZS1vdmVyJztcbiAgICAgICAgfVxuICAgIH1cbn07XG4iLCIvKipcbiAqIENyZWF0ZXMgYSBDYW52YXMgZWxlbWVudCBvZiB0aGUgZ2l2ZW4gc2l6ZS5cbiAqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gd2lkdGgge251bWJlcn0gdGhlIHdpZHRoIGZvciB0aGUgbmV3bHkgY3JlYXRlZCBjYW52YXNcbiAqIEBwYXJhbSBoZWlnaHQge251bWJlcn0gdGhlIGhlaWdodCBmb3IgdGhlIG5ld2x5IGNyZWF0ZWQgY2FudmFzXG4gKi9cbmZ1bmN0aW9uIENhbnZhc0J1ZmZlcih3aWR0aCwgaGVpZ2h0KVxue1xuICAgIC8qKlxuICAgICAqIFRoZSBDYW52YXMgb2JqZWN0IHRoYXQgYmVsb25ncyB0byB0aGlzIENhbnZhc0J1ZmZlci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge0hUTUxDYW52YXNFbGVtZW50fVxuICAgICAqL1xuICAgIHRoaXMuY2FudmFzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnY2FudmFzJyk7XG5cbiAgICAvKipcbiAgICAgKiBBIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRCBvYmplY3QgcmVwcmVzZW50aW5nIGEgdHdvLWRpbWVuc2lvbmFsIHJlbmRlcmluZyBjb250ZXh0LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEfVxuICAgICAqL1xuICAgIHRoaXMuY29udGV4dCA9IHRoaXMuY2FudmFzLmdldENvbnRleHQoJzJkJyk7XG5cbiAgICB0aGlzLmNhbnZhcy53aWR0aCA9IHdpZHRoO1xuICAgIHRoaXMuY2FudmFzLmhlaWdodCA9IGhlaWdodDtcbn1cblxuQ2FudmFzQnVmZmVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IENhbnZhc0J1ZmZlcjtcbm1vZHVsZS5leHBvcnRzID0gQ2FudmFzQnVmZmVyO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhDYW52YXNCdWZmZXIucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogVGhlIHdpZHRoIG9mIHRoZSBjYW52YXMgYnVmZmVyIGluIHBpeGVscy5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5DYW52YXNCdWZmZXIjXG4gICAgICovXG4gICAgd2lkdGg6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jYW52YXMud2lkdGg7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbClcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5jYW52YXMud2lkdGggPSB2YWw7XG4gICAgICAgIH1cbiAgICB9LFxuICAgIC8qKlxuICAgICAqIFRoZSBoZWlnaHQgb2YgdGhlIGNhbnZhcyBidWZmZXIgaW4gcGl4ZWxzLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLkNhbnZhc0J1ZmZlciNcbiAgICAgKi9cbiAgICBoZWlnaHQ6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jYW52YXMuaGVpZ2h0O1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWwpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuY2FudmFzLmhlaWdodCA9IHZhbDtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuXG4vKipcbiAqIENsZWFycyB0aGUgY2FudmFzIHRoYXQgd2FzIGNyZWF0ZWQgYnkgdGhlIENhbnZhc0J1ZmZlciBjbGFzcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5DYW52YXNCdWZmZXIucHJvdG90eXBlLmNsZWFyID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLmNvbnRleHQuc2V0VHJhbnNmb3JtKDEsIDAsIDAsIDEsIDAsIDApO1xuICAgIHRoaXMuY29udGV4dC5jbGVhclJlY3QoMCwwLCB0aGlzLmNhbnZhcy53aWR0aCwgdGhpcy5jYW52YXMuaGVpZ2h0KTtcbn07XG5cbi8qKlxuICogUmVzaXplcyB0aGUgY2FudmFzIHRvIHRoZSBzcGVjaWZpZWQgd2lkdGggYW5kIGhlaWdodC5cbiAqXG4gKiBAcGFyYW0gd2lkdGgge251bWJlcn0gdGhlIG5ldyB3aWR0aCBvZiB0aGUgY2FudmFzXG4gKiBAcGFyYW0gaGVpZ2h0IHtudW1iZXJ9IHRoZSBuZXcgaGVpZ2h0IG9mIHRoZSBjYW52YXNcbiAqL1xuQ2FudmFzQnVmZmVyLnByb3RvdHlwZS5yZXNpemUgPSBmdW5jdGlvbiAod2lkdGgsIGhlaWdodClcbntcbiAgICB0aGlzLmNhbnZhcy53aWR0aCA9IHdpZHRoO1xuICAgIHRoaXMuY2FudmFzLmhlaWdodCA9IGhlaWdodDtcbn07XG5cbi8qKlxuICogRGVzdHJveXMgdGhpcyBjYW52YXMuXG4gKlxuICovXG5DYW52YXNCdWZmZXIucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoKVxue1xuICAgIHRoaXMuY29udGV4dCA9IG51bGw7XG4gICAgdGhpcy5jYW52YXMgPSBudWxsO1xufTtcbiIsInZhciBDT05TVCA9IHJlcXVpcmUoJy4uLy4uLy4uL2NvbnN0Jyk7XG5cbi8qKlxuICogQSBzZXQgb2YgZnVuY3Rpb25zIHVzZWQgYnkgdGhlIGNhbnZhcyByZW5kZXJlciB0byBkcmF3IHRoZSBwcmltaXRpdmUgZ3JhcGhpY3MgZGF0YS5cbiAqIEBzdGF0aWNcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqL1xudmFyIENhbnZhc0dyYXBoaWNzID0ge307XG5tb2R1bGUuZXhwb3J0cyA9IENhbnZhc0dyYXBoaWNzO1xuXG4vKlxuICogUmVuZGVycyBhIEdyYXBoaWNzIG9iamVjdCB0byBhIGNhbnZhcy5cbiAqXG4gKiBAcGFyYW0gZ3JhcGhpY3Mge1BJWEkuR3JhcGhpY3N9IHRoZSBhY3R1YWwgZ3JhcGhpY3Mgb2JqZWN0IHRvIHJlbmRlclxuICogQHBhcmFtIGNvbnRleHQge0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRH0gdGhlIDJkIGRyYXdpbmcgbWV0aG9kIG9mIHRoZSBjYW52YXNcbiAqL1xuQ2FudmFzR3JhcGhpY3MucmVuZGVyR3JhcGhpY3MgPSBmdW5jdGlvbiAoZ3JhcGhpY3MsIGNvbnRleHQpXG57XG4gICAgdmFyIHdvcmxkQWxwaGEgPSBncmFwaGljcy53b3JsZEFscGhhO1xuXG4gICAgaWYgKGdyYXBoaWNzLmRpcnR5KVxuICAgIHtcbiAgICAgICAgdGhpcy51cGRhdGVHcmFwaGljc1RpbnQoZ3JhcGhpY3MpO1xuICAgICAgICBncmFwaGljcy5kaXJ0eSA9IGZhbHNlO1xuICAgIH1cblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZ3JhcGhpY3MuZ3JhcGhpY3NEYXRhLmxlbmd0aDsgaSsrKVxuICAgIHtcbiAgICAgICAgdmFyIGRhdGEgPSBncmFwaGljcy5ncmFwaGljc0RhdGFbaV07XG4gICAgICAgIHZhciBzaGFwZSA9IGRhdGEuc2hhcGU7XG5cbiAgICAgICAgdmFyIGZpbGxDb2xvciA9IGRhdGEuX2ZpbGxUaW50O1xuICAgICAgICB2YXIgbGluZUNvbG9yID0gZGF0YS5fbGluZVRpbnQ7XG5cbiAgICAgICAgY29udGV4dC5saW5lV2lkdGggPSBkYXRhLmxpbmVXaWR0aDtcblxuICAgICAgICBpZiAoZGF0YS50eXBlID09PSBDT05TVC5TSEFQRVMuUE9MWSlcbiAgICAgICAge1xuICAgICAgICAgICAgY29udGV4dC5iZWdpblBhdGgoKTtcblxuICAgICAgICAgICAgdmFyIHBvaW50cyA9IHNoYXBlLnBvaW50cztcblxuICAgICAgICAgICAgY29udGV4dC5tb3ZlVG8ocG9pbnRzWzBdLCBwb2ludHNbMV0pO1xuXG4gICAgICAgICAgICBmb3IgKHZhciBqPTE7IGogPCBwb2ludHMubGVuZ3RoLzI7IGorKylcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb250ZXh0LmxpbmVUbyhwb2ludHNbaiAqIDJdLCBwb2ludHNbaiAqIDIgKyAxXSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChzaGFwZS5jbG9zZWQpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29udGV4dC5saW5lVG8ocG9pbnRzWzBdLCBwb2ludHNbMV0pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBpZiB0aGUgZmlyc3QgYW5kIGxhc3QgcG9pbnQgYXJlIHRoZSBzYW1lIGNsb3NlIHRoZSBwYXRoIC0gbXVjaCBuZWF0ZXIgOilcbiAgICAgICAgICAgIGlmIChwb2ludHNbMF0gPT09IHBvaW50c1twb2ludHMubGVuZ3RoLTJdICYmIHBvaW50c1sxXSA9PT0gcG9pbnRzW3BvaW50cy5sZW5ndGgtMV0pXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29udGV4dC5jbG9zZVBhdGgoKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGRhdGEuZmlsbClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb250ZXh0Lmdsb2JhbEFscGhhID0gZGF0YS5maWxsQWxwaGEgKiB3b3JsZEFscGhhO1xuICAgICAgICAgICAgICAgIGNvbnRleHQuZmlsbFN0eWxlID0gJyMnICsgKCcwMDAwMCcgKyAoIGZpbGxDb2xvciB8IDApLnRvU3RyaW5nKDE2KSkuc3Vic3RyKC02KTtcbiAgICAgICAgICAgICAgICBjb250ZXh0LmZpbGwoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChkYXRhLmxpbmVXaWR0aClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb250ZXh0Lmdsb2JhbEFscGhhID0gZGF0YS5saW5lQWxwaGEgKiB3b3JsZEFscGhhO1xuICAgICAgICAgICAgICAgIGNvbnRleHQuc3Ryb2tlU3R5bGUgPSAnIycgKyAoJzAwMDAwJyArICggbGluZUNvbG9yIHwgMCkudG9TdHJpbmcoMTYpKS5zdWJzdHIoLTYpO1xuICAgICAgICAgICAgICAgIGNvbnRleHQuc3Ryb2tlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoZGF0YS50eXBlID09PSBDT05TVC5TSEFQRVMuUkVDVClcbiAgICAgICAge1xuXG4gICAgICAgICAgICBpZiAoZGF0YS5maWxsQ29sb3IgfHwgZGF0YS5maWxsQ29sb3IgPT09IDApXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29udGV4dC5nbG9iYWxBbHBoYSA9IGRhdGEuZmlsbEFscGhhICogd29ybGRBbHBoYTtcbiAgICAgICAgICAgICAgICBjb250ZXh0LmZpbGxTdHlsZSA9ICcjJyArICgnMDAwMDAnICsgKCBmaWxsQ29sb3IgfCAwKS50b1N0cmluZygxNikpLnN1YnN0cigtNik7XG4gICAgICAgICAgICAgICAgY29udGV4dC5maWxsUmVjdChzaGFwZS54LCBzaGFwZS55LCBzaGFwZS53aWR0aCwgc2hhcGUuaGVpZ2h0KTtcblxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGRhdGEubGluZVdpZHRoKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGNvbnRleHQuZ2xvYmFsQWxwaGEgPSBkYXRhLmxpbmVBbHBoYSAqIHdvcmxkQWxwaGE7XG4gICAgICAgICAgICAgICAgY29udGV4dC5zdHJva2VTdHlsZSA9ICcjJyArICgnMDAwMDAnICsgKCBsaW5lQ29sb3IgfCAwKS50b1N0cmluZygxNikpLnN1YnN0cigtNik7XG4gICAgICAgICAgICAgICAgY29udGV4dC5zdHJva2VSZWN0KHNoYXBlLngsIHNoYXBlLnksIHNoYXBlLndpZHRoLCBzaGFwZS5oZWlnaHQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGRhdGEudHlwZSA9PT0gQ09OU1QuU0hBUEVTLkNJUkMpXG4gICAgICAgIHtcbiAgICAgICAgICAgIC8vIFRPRE8gLSBuZWVkIHRvIGJlIFVuZGVmaW5lZCFcbiAgICAgICAgICAgIGNvbnRleHQuYmVnaW5QYXRoKCk7XG4gICAgICAgICAgICBjb250ZXh0LmFyYyhzaGFwZS54LCBzaGFwZS55LCBzaGFwZS5yYWRpdXMsMCwyKk1hdGguUEkpO1xuICAgICAgICAgICAgY29udGV4dC5jbG9zZVBhdGgoKTtcblxuICAgICAgICAgICAgaWYgKGRhdGEuZmlsbClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb250ZXh0Lmdsb2JhbEFscGhhID0gZGF0YS5maWxsQWxwaGEgKiB3b3JsZEFscGhhO1xuICAgICAgICAgICAgICAgIGNvbnRleHQuZmlsbFN0eWxlID0gJyMnICsgKCcwMDAwMCcgKyAoIGZpbGxDb2xvciB8IDApLnRvU3RyaW5nKDE2KSkuc3Vic3RyKC02KTtcbiAgICAgICAgICAgICAgICBjb250ZXh0LmZpbGwoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChkYXRhLmxpbmVXaWR0aClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb250ZXh0Lmdsb2JhbEFscGhhID0gZGF0YS5saW5lQWxwaGEgKiB3b3JsZEFscGhhO1xuICAgICAgICAgICAgICAgIGNvbnRleHQuc3Ryb2tlU3R5bGUgPSAnIycgKyAoJzAwMDAwJyArICggbGluZUNvbG9yIHwgMCkudG9TdHJpbmcoMTYpKS5zdWJzdHIoLTYpO1xuICAgICAgICAgICAgICAgIGNvbnRleHQuc3Ryb2tlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoZGF0YS50eXBlID09PSBDT05TVC5TSEFQRVMuRUxJUClcbiAgICAgICAge1xuICAgICAgICAgICAgLy8gZWxsaXBzZSBjb2RlIHRha2VuIGZyb206IGh0dHA6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvMjE3Mjc5OC9ob3ctdG8tZHJhdy1hbi1vdmFsLWluLWh0bWw1LWNhbnZhc1xuXG4gICAgICAgICAgICB2YXIgdyA9IHNoYXBlLndpZHRoICogMjtcbiAgICAgICAgICAgIHZhciBoID0gc2hhcGUuaGVpZ2h0ICogMjtcblxuICAgICAgICAgICAgdmFyIHggPSBzaGFwZS54IC0gdy8yO1xuICAgICAgICAgICAgdmFyIHkgPSBzaGFwZS55IC0gaC8yO1xuXG4gICAgICAgICAgICBjb250ZXh0LmJlZ2luUGF0aCgpO1xuXG4gICAgICAgICAgICB2YXIga2FwcGEgPSAwLjU1MjI4NDgsXG4gICAgICAgICAgICAgICAgb3ggPSAodyAvIDIpICoga2FwcGEsIC8vIGNvbnRyb2wgcG9pbnQgb2Zmc2V0IGhvcml6b250YWxcbiAgICAgICAgICAgICAgICBveSA9IChoIC8gMikgKiBrYXBwYSwgLy8gY29udHJvbCBwb2ludCBvZmZzZXQgdmVydGljYWxcbiAgICAgICAgICAgICAgICB4ZSA9IHggKyB3LCAgICAgICAgICAgLy8geC1lbmRcbiAgICAgICAgICAgICAgICB5ZSA9IHkgKyBoLCAgICAgICAgICAgLy8geS1lbmRcbiAgICAgICAgICAgICAgICB4bSA9IHggKyB3IC8gMiwgICAgICAgLy8geC1taWRkbGVcbiAgICAgICAgICAgICAgICB5bSA9IHkgKyBoIC8gMjsgICAgICAgLy8geS1taWRkbGVcblxuICAgICAgICAgICAgY29udGV4dC5tb3ZlVG8oeCwgeW0pO1xuICAgICAgICAgICAgY29udGV4dC5iZXppZXJDdXJ2ZVRvKHgsIHltIC0gb3ksIHhtIC0gb3gsIHksIHhtLCB5KTtcbiAgICAgICAgICAgIGNvbnRleHQuYmV6aWVyQ3VydmVUbyh4bSArIG94LCB5LCB4ZSwgeW0gLSBveSwgeGUsIHltKTtcbiAgICAgICAgICAgIGNvbnRleHQuYmV6aWVyQ3VydmVUbyh4ZSwgeW0gKyBveSwgeG0gKyBveCwgeWUsIHhtLCB5ZSk7XG4gICAgICAgICAgICBjb250ZXh0LmJlemllckN1cnZlVG8oeG0gLSBveCwgeWUsIHgsIHltICsgb3ksIHgsIHltKTtcblxuICAgICAgICAgICAgY29udGV4dC5jbG9zZVBhdGgoKTtcblxuICAgICAgICAgICAgaWYgKGRhdGEuZmlsbClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb250ZXh0Lmdsb2JhbEFscGhhID0gZGF0YS5maWxsQWxwaGEgKiB3b3JsZEFscGhhO1xuICAgICAgICAgICAgICAgIGNvbnRleHQuZmlsbFN0eWxlID0gJyMnICsgKCcwMDAwMCcgKyAoIGZpbGxDb2xvciB8IDApLnRvU3RyaW5nKDE2KSkuc3Vic3RyKC02KTtcbiAgICAgICAgICAgICAgICBjb250ZXh0LmZpbGwoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChkYXRhLmxpbmVXaWR0aClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb250ZXh0Lmdsb2JhbEFscGhhID0gZGF0YS5saW5lQWxwaGEgKiB3b3JsZEFscGhhO1xuICAgICAgICAgICAgICAgIGNvbnRleHQuc3Ryb2tlU3R5bGUgPSAnIycgKyAoJzAwMDAwJyArICggbGluZUNvbG9yIHwgMCkudG9TdHJpbmcoMTYpKS5zdWJzdHIoLTYpO1xuICAgICAgICAgICAgICAgIGNvbnRleHQuc3Ryb2tlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoZGF0YS50eXBlID09PSBDT05TVC5TSEFQRVMuUlJFQylcbiAgICAgICAge1xuICAgICAgICAgICAgdmFyIHJ4ID0gc2hhcGUueDtcbiAgICAgICAgICAgIHZhciByeSA9IHNoYXBlLnk7XG4gICAgICAgICAgICB2YXIgd2lkdGggPSBzaGFwZS53aWR0aDtcbiAgICAgICAgICAgIHZhciBoZWlnaHQgPSBzaGFwZS5oZWlnaHQ7XG4gICAgICAgICAgICB2YXIgcmFkaXVzID0gc2hhcGUucmFkaXVzO1xuXG4gICAgICAgICAgICB2YXIgbWF4UmFkaXVzID0gTWF0aC5taW4od2lkdGgsIGhlaWdodCkgLyAyIHwgMDtcbiAgICAgICAgICAgIHJhZGl1cyA9IHJhZGl1cyA+IG1heFJhZGl1cyA/IG1heFJhZGl1cyA6IHJhZGl1cztcblxuICAgICAgICAgICAgY29udGV4dC5iZWdpblBhdGgoKTtcbiAgICAgICAgICAgIGNvbnRleHQubW92ZVRvKHJ4LCByeSArIHJhZGl1cyk7XG4gICAgICAgICAgICBjb250ZXh0LmxpbmVUbyhyeCwgcnkgKyBoZWlnaHQgLSByYWRpdXMpO1xuICAgICAgICAgICAgY29udGV4dC5xdWFkcmF0aWNDdXJ2ZVRvKHJ4LCByeSArIGhlaWdodCwgcnggKyByYWRpdXMsIHJ5ICsgaGVpZ2h0KTtcbiAgICAgICAgICAgIGNvbnRleHQubGluZVRvKHJ4ICsgd2lkdGggLSByYWRpdXMsIHJ5ICsgaGVpZ2h0KTtcbiAgICAgICAgICAgIGNvbnRleHQucXVhZHJhdGljQ3VydmVUbyhyeCArIHdpZHRoLCByeSArIGhlaWdodCwgcnggKyB3aWR0aCwgcnkgKyBoZWlnaHQgLSByYWRpdXMpO1xuICAgICAgICAgICAgY29udGV4dC5saW5lVG8ocnggKyB3aWR0aCwgcnkgKyByYWRpdXMpO1xuICAgICAgICAgICAgY29udGV4dC5xdWFkcmF0aWNDdXJ2ZVRvKHJ4ICsgd2lkdGgsIHJ5LCByeCArIHdpZHRoIC0gcmFkaXVzLCByeSk7XG4gICAgICAgICAgICBjb250ZXh0LmxpbmVUbyhyeCArIHJhZGl1cywgcnkpO1xuICAgICAgICAgICAgY29udGV4dC5xdWFkcmF0aWNDdXJ2ZVRvKHJ4LCByeSwgcngsIHJ5ICsgcmFkaXVzKTtcbiAgICAgICAgICAgIGNvbnRleHQuY2xvc2VQYXRoKCk7XG5cbiAgICAgICAgICAgIGlmIChkYXRhLmZpbGxDb2xvciB8fCBkYXRhLmZpbGxDb2xvciA9PT0gMClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb250ZXh0Lmdsb2JhbEFscGhhID0gZGF0YS5maWxsQWxwaGEgKiB3b3JsZEFscGhhO1xuICAgICAgICAgICAgICAgIGNvbnRleHQuZmlsbFN0eWxlID0gJyMnICsgKCcwMDAwMCcgKyAoIGZpbGxDb2xvciB8IDApLnRvU3RyaW5nKDE2KSkuc3Vic3RyKC02KTtcbiAgICAgICAgICAgICAgICBjb250ZXh0LmZpbGwoKTtcblxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGRhdGEubGluZVdpZHRoKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGNvbnRleHQuZ2xvYmFsQWxwaGEgPSBkYXRhLmxpbmVBbHBoYSAqIHdvcmxkQWxwaGE7XG4gICAgICAgICAgICAgICAgY29udGV4dC5zdHJva2VTdHlsZSA9ICcjJyArICgnMDAwMDAnICsgKCBsaW5lQ29sb3IgfCAwKS50b1N0cmluZygxNikpLnN1YnN0cigtNik7XG4gICAgICAgICAgICAgICAgY29udGV4dC5zdHJva2UoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn07XG5cbi8qXG4gKiBSZW5kZXJzIGEgZ3JhcGhpY3MgbWFza1xuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0gZ3JhcGhpY3Mge1BJWEkuR3JhcGhpY3N9IHRoZSBncmFwaGljcyB3aGljaCB3aWxsIGJlIHVzZWQgYXMgYSBtYXNrXG4gKiBAcGFyYW0gY29udGV4dCB7Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEfSB0aGUgY29udGV4dCAyZCBtZXRob2Qgb2YgdGhlIGNhbnZhc1xuICovXG5DYW52YXNHcmFwaGljcy5yZW5kZXJHcmFwaGljc01hc2sgPSBmdW5jdGlvbiAoZ3JhcGhpY3MsIGNvbnRleHQpXG57XG4gICAgdmFyIGxlbiA9IGdyYXBoaWNzLmdyYXBoaWNzRGF0YS5sZW5ndGg7XG5cbiAgICBpZiAobGVuID09PSAwKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnRleHQuYmVnaW5QYXRoKCk7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgaSsrKVxuICAgIHtcbiAgICAgICAgdmFyIGRhdGEgPSBncmFwaGljcy5ncmFwaGljc0RhdGFbaV07XG4gICAgICAgIHZhciBzaGFwZSA9IGRhdGEuc2hhcGU7XG5cbiAgICAgICAgaWYgKGRhdGEudHlwZSA9PT0gQ09OU1QuU0hBUEVTLlBPTFkpXG4gICAgICAgIHtcblxuICAgICAgICAgICAgdmFyIHBvaW50cyA9IHNoYXBlLnBvaW50cztcblxuICAgICAgICAgICAgY29udGV4dC5tb3ZlVG8ocG9pbnRzWzBdLCBwb2ludHNbMV0pO1xuXG4gICAgICAgICAgICBmb3IgKHZhciBqPTE7IGogPCBwb2ludHMubGVuZ3RoLzI7IGorKylcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb250ZXh0LmxpbmVUbyhwb2ludHNbaiAqIDJdLCBwb2ludHNbaiAqIDIgKyAxXSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIGlmIHRoZSBmaXJzdCBhbmQgbGFzdCBwb2ludCBhcmUgdGhlIHNhbWUgY2xvc2UgdGhlIHBhdGggLSBtdWNoIG5lYXRlciA6KVxuICAgICAgICAgICAgaWYgKHBvaW50c1swXSA9PT0gcG9pbnRzW3BvaW50cy5sZW5ndGgtMl0gJiYgcG9pbnRzWzFdID09PSBwb2ludHNbcG9pbnRzLmxlbmd0aC0xXSlcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb250ZXh0LmNsb3NlUGF0aCgpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoZGF0YS50eXBlID09PSBDT05TVC5TSEFQRVMuUkVDVClcbiAgICAgICAge1xuICAgICAgICAgICAgY29udGV4dC5yZWN0KHNoYXBlLngsIHNoYXBlLnksIHNoYXBlLndpZHRoLCBzaGFwZS5oZWlnaHQpO1xuICAgICAgICAgICAgY29udGV4dC5jbG9zZVBhdGgoKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChkYXRhLnR5cGUgPT09IENPTlNULlNIQVBFUy5DSVJDKVxuICAgICAgICB7XG4gICAgICAgICAgICAvLyBUT0RPIC0gbmVlZCB0byBiZSBVbmRlZmluZWQhXG4gICAgICAgICAgICBjb250ZXh0LmFyYyhzaGFwZS54LCBzaGFwZS55LCBzaGFwZS5yYWRpdXMsIDAsIDIgKiBNYXRoLlBJKTtcbiAgICAgICAgICAgIGNvbnRleHQuY2xvc2VQYXRoKCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoZGF0YS50eXBlID09PSBDT05TVC5TSEFQRVMuRUxJUClcbiAgICAgICAge1xuXG4gICAgICAgICAgICAvLyBlbGxpcHNlIGNvZGUgdGFrZW4gZnJvbTogaHR0cDovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy8yMTcyNzk4L2hvdy10by1kcmF3LWFuLW92YWwtaW4taHRtbDUtY2FudmFzXG5cbiAgICAgICAgICAgIHZhciB3ID0gc2hhcGUud2lkdGggKiAyO1xuICAgICAgICAgICAgdmFyIGggPSBzaGFwZS5oZWlnaHQgKiAyO1xuXG4gICAgICAgICAgICB2YXIgeCA9IHNoYXBlLnggLSB3LzI7XG4gICAgICAgICAgICB2YXIgeSA9IHNoYXBlLnkgLSBoLzI7XG5cbiAgICAgICAgICAgIHZhciBrYXBwYSA9IDAuNTUyMjg0OCxcbiAgICAgICAgICAgICAgICBveCA9ICh3IC8gMikgKiBrYXBwYSwgLy8gY29udHJvbCBwb2ludCBvZmZzZXQgaG9yaXpvbnRhbFxuICAgICAgICAgICAgICAgIG95ID0gKGggLyAyKSAqIGthcHBhLCAvLyBjb250cm9sIHBvaW50IG9mZnNldCB2ZXJ0aWNhbFxuICAgICAgICAgICAgICAgIHhlID0geCArIHcsICAgICAgICAgICAvLyB4LWVuZFxuICAgICAgICAgICAgICAgIHllID0geSArIGgsICAgICAgICAgICAvLyB5LWVuZFxuICAgICAgICAgICAgICAgIHhtID0geCArIHcgLyAyLCAgICAgICAvLyB4LW1pZGRsZVxuICAgICAgICAgICAgICAgIHltID0geSArIGggLyAyOyAgICAgICAvLyB5LW1pZGRsZVxuXG4gICAgICAgICAgICBjb250ZXh0Lm1vdmVUbyh4LCB5bSk7XG4gICAgICAgICAgICBjb250ZXh0LmJlemllckN1cnZlVG8oeCwgeW0gLSBveSwgeG0gLSBveCwgeSwgeG0sIHkpO1xuICAgICAgICAgICAgY29udGV4dC5iZXppZXJDdXJ2ZVRvKHhtICsgb3gsIHksIHhlLCB5bSAtIG95LCB4ZSwgeW0pO1xuICAgICAgICAgICAgY29udGV4dC5iZXppZXJDdXJ2ZVRvKHhlLCB5bSArIG95LCB4bSArIG94LCB5ZSwgeG0sIHllKTtcbiAgICAgICAgICAgIGNvbnRleHQuYmV6aWVyQ3VydmVUbyh4bSAtIG94LCB5ZSwgeCwgeW0gKyBveSwgeCwgeW0pO1xuICAgICAgICAgICAgY29udGV4dC5jbG9zZVBhdGgoKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChkYXRhLnR5cGUgPT09IENPTlNULlNIQVBFUy5SUkVDKVxuICAgICAgICB7XG5cbiAgICAgICAgICAgIHZhciByeCA9IHNoYXBlLng7XG4gICAgICAgICAgICB2YXIgcnkgPSBzaGFwZS55O1xuICAgICAgICAgICAgdmFyIHdpZHRoID0gc2hhcGUud2lkdGg7XG4gICAgICAgICAgICB2YXIgaGVpZ2h0ID0gc2hhcGUuaGVpZ2h0O1xuICAgICAgICAgICAgdmFyIHJhZGl1cyA9IHNoYXBlLnJhZGl1cztcblxuICAgICAgICAgICAgdmFyIG1heFJhZGl1cyA9IE1hdGgubWluKHdpZHRoLCBoZWlnaHQpIC8gMiB8IDA7XG4gICAgICAgICAgICByYWRpdXMgPSByYWRpdXMgPiBtYXhSYWRpdXMgPyBtYXhSYWRpdXMgOiByYWRpdXM7XG5cbiAgICAgICAgICAgIGNvbnRleHQubW92ZVRvKHJ4LCByeSArIHJhZGl1cyk7XG4gICAgICAgICAgICBjb250ZXh0LmxpbmVUbyhyeCwgcnkgKyBoZWlnaHQgLSByYWRpdXMpO1xuICAgICAgICAgICAgY29udGV4dC5xdWFkcmF0aWNDdXJ2ZVRvKHJ4LCByeSArIGhlaWdodCwgcnggKyByYWRpdXMsIHJ5ICsgaGVpZ2h0KTtcbiAgICAgICAgICAgIGNvbnRleHQubGluZVRvKHJ4ICsgd2lkdGggLSByYWRpdXMsIHJ5ICsgaGVpZ2h0KTtcbiAgICAgICAgICAgIGNvbnRleHQucXVhZHJhdGljQ3VydmVUbyhyeCArIHdpZHRoLCByeSArIGhlaWdodCwgcnggKyB3aWR0aCwgcnkgKyBoZWlnaHQgLSByYWRpdXMpO1xuICAgICAgICAgICAgY29udGV4dC5saW5lVG8ocnggKyB3aWR0aCwgcnkgKyByYWRpdXMpO1xuICAgICAgICAgICAgY29udGV4dC5xdWFkcmF0aWNDdXJ2ZVRvKHJ4ICsgd2lkdGgsIHJ5LCByeCArIHdpZHRoIC0gcmFkaXVzLCByeSk7XG4gICAgICAgICAgICBjb250ZXh0LmxpbmVUbyhyeCArIHJhZGl1cywgcnkpO1xuICAgICAgICAgICAgY29udGV4dC5xdWFkcmF0aWNDdXJ2ZVRvKHJ4LCByeSwgcngsIHJ5ICsgcmFkaXVzKTtcbiAgICAgICAgICAgIGNvbnRleHQuY2xvc2VQYXRoKCk7XG4gICAgICAgIH1cbiAgICB9XG59O1xuXG4vKlxuICogVXBkYXRlcyB0aGUgdGludCBvZiBhIGdyYXBoaWNzIG9iamVjdFxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0gZ3JhcGhpY3Mge1BJWEkuR3JhcGhpY3N9IHRoZSBncmFwaGljcyB0aGF0IHdpbGwgaGF2ZSBpdHMgdGludCB1cGRhdGVkXG4gKlxuICovXG5DYW52YXNHcmFwaGljcy51cGRhdGVHcmFwaGljc1RpbnQgPSBmdW5jdGlvbiAoZ3JhcGhpY3MpXG57XG4gICAgaWYgKGdyYXBoaWNzLnRpbnQgPT09IDB4RkZGRkZGICYmIGdyYXBoaWNzLl9wcmV2VGludCA9PT0gZ3JhcGhpY3MudGludClcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgZ3JhcGhpY3MuX3ByZXZUaW50ID0gZ3JhcGhpY3MudGludDtcblxuICAgIHZhciB0aW50UiA9IChncmFwaGljcy50aW50ID4+IDE2ICYgMHhGRikgLyAyNTU7XG4gICAgdmFyIHRpbnRHID0gKGdyYXBoaWNzLnRpbnQgPj4gOCAmIDB4RkYpIC8gMjU1O1xuICAgIHZhciB0aW50QiA9IChncmFwaGljcy50aW50ICYgMHhGRikvIDI1NTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZ3JhcGhpY3MuZ3JhcGhpY3NEYXRhLmxlbmd0aDsgaSsrKVxuICAgIHtcbiAgICAgICAgdmFyIGRhdGEgPSBncmFwaGljcy5ncmFwaGljc0RhdGFbaV07XG5cbiAgICAgICAgdmFyIGZpbGxDb2xvciA9IGRhdGEuZmlsbENvbG9yIHwgMDtcbiAgICAgICAgdmFyIGxpbmVDb2xvciA9IGRhdGEubGluZUNvbG9yIHwgMDtcblxuICAgICAgICAvKlxuICAgICAgICB2YXIgY29sb3JSID0gKGZpbGxDb2xvciA+PiAxNiAmIDB4RkYpIC8gMjU1O1xuICAgICAgICB2YXIgY29sb3JHID0gKGZpbGxDb2xvciA+PiA4ICYgMHhGRikgLyAyNTU7XG4gICAgICAgIHZhciBjb2xvckIgPSAoZmlsbENvbG9yICYgMHhGRikgLyAyNTU7XG5cbiAgICAgICAgY29sb3JSICo9IHRpbnRSO1xuICAgICAgICBjb2xvckcgKj0gdGludEc7XG4gICAgICAgIGNvbG9yQiAqPSB0aW50QjtcblxuICAgICAgICBmaWxsQ29sb3IgPSAoKGNvbG9yUioyNTUgPDwgMTYpICsgKGNvbG9yRyoyNTUgPDwgOCkgKyBjb2xvckIqMjU1KTtcblxuICAgICAgICBjb2xvclIgPSAobGluZUNvbG9yID4+IDE2ICYgMHhGRikgLyAyNTU7XG4gICAgICAgIGNvbG9yRyA9IChsaW5lQ29sb3IgPj4gOCAmIDB4RkYpIC8gMjU1O1xuICAgICAgICBjb2xvckIgPSAobGluZUNvbG9yICYgMHhGRikgLyAyNTU7XG5cbiAgICAgICAgY29sb3JSICo9IHRpbnRSO1xuICAgICAgICBjb2xvckcgKj0gdGludEc7XG4gICAgICAgIGNvbG9yQiAqPSB0aW50QjtcblxuICAgICAgICBsaW5lQ29sb3IgPSAoKGNvbG9yUioyNTUgPDwgMTYpICsgKGNvbG9yRyoyNTUgPDwgOCkgKyBjb2xvckIqMjU1KTtcbiAgICAgICAgKi9cblxuICAgICAgICAvLyBzdXBlciBpbmxpbmUgY29zIGltIGFuIG9wdGltaXphdGlvbiBOQVpJIDopXG4gICAgICAgIGRhdGEuX2ZpbGxUaW50ID0gKCgoZmlsbENvbG9yID4+IDE2ICYgMHhGRikgLyAyNTUgKiB0aW50UioyNTUgPDwgMTYpICsgKChmaWxsQ29sb3IgPj4gOCAmIDB4RkYpIC8gMjU1ICogdGludEcqMjU1IDw8IDgpICsgIChmaWxsQ29sb3IgJiAweEZGKSAvIDI1NSAqIHRpbnRCKjI1NSk7XG4gICAgICAgIGRhdGEuX2xpbmVUaW50ID0gKCgobGluZUNvbG9yID4+IDE2ICYgMHhGRikgLyAyNTUgKiB0aW50UioyNTUgPDwgMTYpICsgKChsaW5lQ29sb3IgPj4gOCAmIDB4RkYpIC8gMjU1ICogdGludEcqMjU1IDw8IDgpICsgIChsaW5lQ29sb3IgJiAweEZGKSAvIDI1NSAqIHRpbnRCKjI1NSk7XG5cbiAgICB9XG59O1xuXG4iLCJ2YXIgQ2FudmFzR3JhcGhpY3MgPSByZXF1aXJlKCcuL0NhbnZhc0dyYXBoaWNzJyk7XG5cbi8qKlxuICogQSBzZXQgb2YgZnVuY3Rpb25zIHVzZWQgdG8gaGFuZGxlIG1hc2tpbmcuXG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICovXG5mdW5jdGlvbiBDYW52YXNNYXNrTWFuYWdlcigpXG57fVxuXG5DYW52YXNNYXNrTWFuYWdlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBDYW52YXNNYXNrTWFuYWdlcjtcbm1vZHVsZS5leHBvcnRzID0gQ2FudmFzTWFza01hbmFnZXI7XG5cbi8qKlxuICogVGhpcyBtZXRob2QgYWRkcyBpdCB0byB0aGUgY3VycmVudCBzdGFjayBvZiBtYXNrcy5cbiAqXG4gKiBAcGFyYW0gbWFza0RhdGEge29iamVjdH0gdGhlIG1hc2tEYXRhIHRoYXQgd2lsbCBiZSBwdXNoZWRcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5XZWJHTFJlbmRlcmVyfFBJWEkuQ2FudmFzUmVuZGVyZXJ9IFRoZSByZW5kZXJlciBjb250ZXh0IHRvIHVzZS5cbiAqL1xuQ2FudmFzTWFza01hbmFnZXIucHJvdG90eXBlLnB1c2hNYXNrID0gZnVuY3Rpb24gKG1hc2tEYXRhLCByZW5kZXJlcilcbntcblxuICAgIHJlbmRlcmVyLmNvbnRleHQuc2F2ZSgpO1xuXG4gICAgdmFyIGNhY2hlQWxwaGEgPSBtYXNrRGF0YS5hbHBoYTtcbiAgICB2YXIgdHJhbnNmb3JtID0gbWFza0RhdGEud29ybGRUcmFuc2Zvcm07XG4gICAgdmFyIHJlc29sdXRpb24gPSByZW5kZXJlci5yZXNvbHV0aW9uO1xuXG4gICAgcmVuZGVyZXIuY29udGV4dC5zZXRUcmFuc2Zvcm0oXG4gICAgICAgIHRyYW5zZm9ybS5hICogcmVzb2x1dGlvbixcbiAgICAgICAgdHJhbnNmb3JtLmIgKiByZXNvbHV0aW9uLFxuICAgICAgICB0cmFuc2Zvcm0uYyAqIHJlc29sdXRpb24sXG4gICAgICAgIHRyYW5zZm9ybS5kICogcmVzb2x1dGlvbixcbiAgICAgICAgdHJhbnNmb3JtLnR4ICogcmVzb2x1dGlvbixcbiAgICAgICAgdHJhbnNmb3JtLnR5ICogcmVzb2x1dGlvblxuICAgICk7XG5cbiAgICAvL1RPRE8gc3Vwb3J0IHNwcml0ZSBhbHBoYSBtYXNrcz8/XG4gICAgLy9sb3RzIG9mIGVmZm9ydCByZXF1aXJlZC4gSWYgZGVtYW5kIGlzIGdyZWF0IGVub3VnaC4uXG4gICAgaWYoIW1hc2tEYXRhLnRleHR1cmUpXG4gICAge1xuICAgICAgICBDYW52YXNHcmFwaGljcy5yZW5kZXJHcmFwaGljc01hc2sobWFza0RhdGEsIHJlbmRlcmVyLmNvbnRleHQpO1xuICAgICAgICByZW5kZXJlci5jb250ZXh0LmNsaXAoKTtcbiAgICB9XG5cbiAgICBtYXNrRGF0YS53b3JsZEFscGhhID0gY2FjaGVBbHBoYTtcbn07XG5cbi8qKlxuICogUmVzdG9yZXMgdGhlIGN1cnJlbnQgZHJhd2luZyBjb250ZXh0IHRvIHRoZSBzdGF0ZSBpdCB3YXMgYmVmb3JlIHRoZSBtYXNrIHdhcyBhcHBsaWVkLlxuICpcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5XZWJHTFJlbmRlcmVyfFBJWEkuQ2FudmFzUmVuZGVyZXJ9IFRoZSByZW5kZXJlciBjb250ZXh0IHRvIHVzZS5cbiAqL1xuQ2FudmFzTWFza01hbmFnZXIucHJvdG90eXBlLnBvcE1hc2sgPSBmdW5jdGlvbiAocmVuZGVyZXIpXG57XG4gICAgcmVuZGVyZXIuY29udGV4dC5yZXN0b3JlKCk7XG59O1xuXG5DYW52YXNNYXNrTWFuYWdlci5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uICgpIHt9O1xuIiwidmFyIHV0aWxzID0gcmVxdWlyZSgnLi4vLi4vLi4vdXRpbHMnKTtcblxuLyoqXG4gKiBVdGlsaXR5IG1ldGhvZHMgZm9yIFNwcml0ZS9UZXh0dXJlIHRpbnRpbmcuXG4gKiBAc3RhdGljXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKi9cbnZhciBDYW52YXNUaW50ZXIgPSB7fTtcbm1vZHVsZS5leHBvcnRzID0gQ2FudmFzVGludGVyO1xuXG4vKipcbiAqIEJhc2ljYWxseSB0aGlzIG1ldGhvZCBqdXN0IG5lZWRzIGEgc3ByaXRlIGFuZCBhIGNvbG9yIGFuZCB0aW50cyB0aGUgc3ByaXRlIHdpdGggdGhlIGdpdmVuIGNvbG9yLlxuICpcbiAqIEBwYXJhbSBzcHJpdGUge1BJWEkuU3ByaXRlfSB0aGUgc3ByaXRlIHRvIHRpbnRcbiAqIEBwYXJhbSBjb2xvciB7bnVtYmVyfSB0aGUgY29sb3IgdG8gdXNlIHRvIHRpbnQgdGhlIHNwcml0ZSB3aXRoXG4gKiBAcmV0dXJuIHtIVE1MQ2FudmFzRWxlbWVudH0gVGhlIHRpbnRlZCBjYW52YXNcbiAqL1xuQ2FudmFzVGludGVyLmdldFRpbnRlZFRleHR1cmUgPSBmdW5jdGlvbiAoc3ByaXRlLCBjb2xvcilcbntcbiAgICB2YXIgdGV4dHVyZSA9IHNwcml0ZS50ZXh0dXJlO1xuXG4gICAgY29sb3IgPSBDYW52YXNUaW50ZXIucm91bmRDb2xvcihjb2xvcik7XG5cbiAgICB2YXIgc3RyaW5nQ29sb3IgPSAnIycgKyAoJzAwMDAwJyArICggY29sb3IgfCAwKS50b1N0cmluZygxNikpLnN1YnN0cigtNik7XG5cbiAgICB0ZXh0dXJlLnRpbnRDYWNoZSA9IHRleHR1cmUudGludENhY2hlIHx8IHt9O1xuXG4gICAgaWYgKHRleHR1cmUudGludENhY2hlW3N0cmluZ0NvbG9yXSlcbiAgICB7XG4gICAgICAgIHJldHVybiB0ZXh0dXJlLnRpbnRDYWNoZVtzdHJpbmdDb2xvcl07XG4gICAgfVxuXG4gICAgIC8vIGNsb25lIHRleHR1cmUuLlxuICAgIHZhciBjYW52YXMgPSBDYW52YXNUaW50ZXIuY2FudmFzIHx8IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NhbnZhcycpO1xuXG4gICAgLy9DYW52YXNUaW50ZXIudGludFdpdGhQZXJQaXhlbCh0ZXh0dXJlLCBzdHJpbmdDb2xvciwgY2FudmFzKTtcbiAgICBDYW52YXNUaW50ZXIudGludE1ldGhvZCh0ZXh0dXJlLCBjb2xvciwgY2FudmFzKTtcblxuICAgIGlmIChDYW52YXNUaW50ZXIuY29udmVydFRpbnRUb0ltYWdlKVxuICAgIHtcbiAgICAgICAgLy8gaXMgdGhpcyBiZXR0ZXI/XG4gICAgICAgIHZhciB0aW50SW1hZ2UgPSBuZXcgSW1hZ2UoKTtcbiAgICAgICAgdGludEltYWdlLnNyYyA9IGNhbnZhcy50b0RhdGFVUkwoKTtcblxuICAgICAgICB0ZXh0dXJlLnRpbnRDYWNoZVtzdHJpbmdDb2xvcl0gPSB0aW50SW1hZ2U7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHRleHR1cmUudGludENhY2hlW3N0cmluZ0NvbG9yXSA9IGNhbnZhcztcbiAgICAgICAgLy8gaWYgd2UgYXJlIG5vdCBjb252ZXJ0aW5nIHRoZSB0ZXh0dXJlIHRvIGFuIGltYWdlIHRoZW4gd2UgbmVlZCB0byBsb3NlIHRoZSByZWZlcmVuY2UgdG8gdGhlIGNhbnZhc1xuICAgICAgICBDYW52YXNUaW50ZXIuY2FudmFzID0gbnVsbDtcbiAgICB9XG5cbiAgICByZXR1cm4gY2FudmFzO1xufTtcblxuLyoqXG4gKiBUaW50IGEgdGV4dHVyZSB1c2luZyB0aGUgJ211bHRpcGx5JyBvcGVyYXRpb24uXG4gKlxuICogQHBhcmFtIHRleHR1cmUge1BJWEkuVGV4dHVyZX0gdGhlIHRleHR1cmUgdG8gdGludFxuICogQHBhcmFtIGNvbG9yIHtudW1iZXJ9IHRoZSBjb2xvciB0byB1c2UgdG8gdGludCB0aGUgc3ByaXRlIHdpdGhcbiAqIEBwYXJhbSBjYW52YXMge0hUTUxDYW52YXNFbGVtZW50fSB0aGUgY3VycmVudCBjYW52YXNcbiAqL1xuQ2FudmFzVGludGVyLnRpbnRXaXRoTXVsdGlwbHkgPSBmdW5jdGlvbiAodGV4dHVyZSwgY29sb3IsIGNhbnZhcylcbntcbiAgICB2YXIgY29udGV4dCA9IGNhbnZhcy5nZXRDb250ZXh0KCAnMmQnICk7XG5cbiAgICB2YXIgcmVzb2x1dGlvbiA9IHRleHR1cmUuYmFzZVRleHR1cmUucmVzb2x1dGlvbjtcblxuICAgIHZhciBjcm9wID0gdGV4dHVyZS5jcm9wLmNsb25lKCk7XG4gICAgY3JvcC54ICo9IHJlc29sdXRpb247XG4gICAgY3JvcC55ICo9IHJlc29sdXRpb247XG4gICAgY3JvcC53aWR0aCAqPSByZXNvbHV0aW9uO1xuICAgIGNyb3AuaGVpZ2h0ICo9IHJlc29sdXRpb247XG5cbiAgICBjYW52YXMud2lkdGggPSBjcm9wLndpZHRoO1xuICAgIGNhbnZhcy5oZWlnaHQgPSBjcm9wLmhlaWdodDtcblxuICAgIGNvbnRleHQuZmlsbFN0eWxlID0gJyMnICsgKCcwMDAwMCcgKyAoIGNvbG9yIHwgMCkudG9TdHJpbmcoMTYpKS5zdWJzdHIoLTYpO1xuXG4gICAgY29udGV4dC5maWxsUmVjdCgwLCAwLCBjcm9wLndpZHRoLCBjcm9wLmhlaWdodCk7XG5cbiAgICBjb250ZXh0Lmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbiA9ICdtdWx0aXBseSc7XG5cbiAgICBjb250ZXh0LmRyYXdJbWFnZShcbiAgICAgICAgdGV4dHVyZS5iYXNlVGV4dHVyZS5zb3VyY2UsXG4gICAgICAgIGNyb3AueCxcbiAgICAgICAgY3JvcC55LFxuICAgICAgICBjcm9wLndpZHRoLFxuICAgICAgICBjcm9wLmhlaWdodCxcbiAgICAgICAgMCxcbiAgICAgICAgMCxcbiAgICAgICAgY3JvcC53aWR0aCxcbiAgICAgICAgY3JvcC5oZWlnaHRcbiAgICApO1xuXG4gICAgY29udGV4dC5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb24gPSAnZGVzdGluYXRpb24tYXRvcCc7XG5cbiAgICBjb250ZXh0LmRyYXdJbWFnZShcbiAgICAgICAgdGV4dHVyZS5iYXNlVGV4dHVyZS5zb3VyY2UsXG4gICAgICAgIGNyb3AueCxcbiAgICAgICAgY3JvcC55LFxuICAgICAgICBjcm9wLndpZHRoLFxuICAgICAgICBjcm9wLmhlaWdodCxcbiAgICAgICAgMCxcbiAgICAgICAgMCxcbiAgICAgICAgY3JvcC53aWR0aCxcbiAgICAgICAgY3JvcC5oZWlnaHRcbiAgICApO1xufTtcblxuLyoqXG4gKiBUaW50IGEgdGV4dHVyZSB1c2luZyB0aGUgJ292ZXJsYXknIG9wZXJhdGlvbi5cbiAqXG4gKiBAcGFyYW0gdGV4dHVyZSB7UElYSS5UZXh0dXJlfSB0aGUgdGV4dHVyZSB0byB0aW50XG4gKiBAcGFyYW0gY29sb3Ige251bWJlcn0gdGhlIGNvbG9yIHRvIHVzZSB0byB0aW50IHRoZSBzcHJpdGUgd2l0aFxuICogQHBhcmFtIGNhbnZhcyB7SFRNTENhbnZhc0VsZW1lbnR9IHRoZSBjdXJyZW50IGNhbnZhc1xuICovXG5DYW52YXNUaW50ZXIudGludFdpdGhPdmVybGF5ID0gZnVuY3Rpb24gKHRleHR1cmUsIGNvbG9yLCBjYW52YXMpXG57XG4gICAgdmFyIGNvbnRleHQgPSBjYW52YXMuZ2V0Q29udGV4dCggJzJkJyApO1xuXG4gICAgdmFyIHJlc29sdXRpb24gPSB0ZXh0dXJlLmJhc2VUZXh0dXJlLnJlc29sdXRpb247XG5cbiAgICB2YXIgY3JvcCA9IHRleHR1cmUuY3JvcC5jbG9uZSgpO1xuICAgIGNyb3AueCAqPSByZXNvbHV0aW9uO1xuICAgIGNyb3AueSAqPSByZXNvbHV0aW9uO1xuICAgIGNyb3Aud2lkdGggKj0gcmVzb2x1dGlvbjtcbiAgICBjcm9wLmhlaWdodCAqPSByZXNvbHV0aW9uO1xuXG4gICAgY2FudmFzLndpZHRoID0gY3JvcC53aWR0aDtcbiAgICBjYW52YXMuaGVpZ2h0ID0gY3JvcC5oZWlnaHQ7XG5cbiAgICBjb250ZXh0Lmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbiA9ICdjb3B5JztcbiAgICBjb250ZXh0LmZpbGxTdHlsZSA9ICcjJyArICgnMDAwMDAnICsgKCBjb2xvciB8IDApLnRvU3RyaW5nKDE2KSkuc3Vic3RyKC02KTtcbiAgICBjb250ZXh0LmZpbGxSZWN0KDAsIDAsIGNyb3Aud2lkdGgsIGNyb3AuaGVpZ2h0KTtcblxuICAgIGNvbnRleHQuZ2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uID0gJ2Rlc3RpbmF0aW9uLWF0b3AnO1xuICAgIGNvbnRleHQuZHJhd0ltYWdlKFxuICAgICAgICB0ZXh0dXJlLmJhc2VUZXh0dXJlLnNvdXJjZSxcbiAgICAgICAgY3JvcC54LFxuICAgICAgICBjcm9wLnksXG4gICAgICAgIGNyb3Aud2lkdGgsXG4gICAgICAgIGNyb3AuaGVpZ2h0LFxuICAgICAgICAwLFxuICAgICAgICAwLFxuICAgICAgICBjcm9wLndpZHRoLFxuICAgICAgICBjcm9wLmhlaWdodFxuICAgICk7XG5cbiAgICAvLyBjb250ZXh0Lmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbiA9ICdjb3B5Jztcbn07XG5cbi8qKlxuICogVGludCBhIHRleHR1cmUgcGl4ZWwgcGVyIHBpeGVsLlxuICpcbiAqIEBwYXJhbSB0ZXh0dXJlIHtQSVhJLlRleHR1cmV9IHRoZSB0ZXh0dXJlIHRvIHRpbnRcbiAqIEBwYXJhbSBjb2xvciB7bnVtYmVyfSB0aGUgY29sb3IgdG8gdXNlIHRvIHRpbnQgdGhlIHNwcml0ZSB3aXRoXG4gKiBAcGFyYW0gY2FudmFzIHtIVE1MQ2FudmFzRWxlbWVudH0gdGhlIGN1cnJlbnQgY2FudmFzXG4gKi9cbkNhbnZhc1RpbnRlci50aW50V2l0aFBlclBpeGVsID0gZnVuY3Rpb24gKHRleHR1cmUsIGNvbG9yLCBjYW52YXMpXG57XG4gICAgdmFyIGNvbnRleHQgPSBjYW52YXMuZ2V0Q29udGV4dCggJzJkJyApO1xuXG4gICAgdmFyIHJlc29sdXRpb24gPSB0ZXh0dXJlLmJhc2VUZXh0dXJlLnJlc29sdXRpb247XG5cbiAgICB2YXIgY3JvcCA9IHRleHR1cmUuY3JvcC5jbG9uZSgpO1xuICAgIGNyb3AueCAqPSByZXNvbHV0aW9uO1xuICAgIGNyb3AueSAqPSByZXNvbHV0aW9uO1xuICAgIGNyb3Aud2lkdGggKj0gcmVzb2x1dGlvbjtcbiAgICBjcm9wLmhlaWdodCAqPSByZXNvbHV0aW9uO1xuXG4gICAgY2FudmFzLndpZHRoID0gY3JvcC53aWR0aDtcbiAgICBjYW52YXMuaGVpZ2h0ID0gY3JvcC5oZWlnaHQ7XG5cbiAgICBjb250ZXh0Lmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbiA9ICdjb3B5JztcbiAgICBjb250ZXh0LmRyYXdJbWFnZShcbiAgICAgICAgdGV4dHVyZS5iYXNlVGV4dHVyZS5zb3VyY2UsXG4gICAgICAgIGNyb3AueCxcbiAgICAgICAgY3JvcC55LFxuICAgICAgICBjcm9wLndpZHRoLFxuICAgICAgICBjcm9wLmhlaWdodCxcbiAgICAgICAgMCxcbiAgICAgICAgMCxcbiAgICAgICAgY3JvcC53aWR0aCxcbiAgICAgICAgY3JvcC5oZWlnaHRcbiAgICApO1xuXG4gICAgdmFyIHJnYlZhbHVlcyA9IHV0aWxzLmhleDJyZ2IoY29sb3IpO1xuICAgIHZhciByID0gcmdiVmFsdWVzWzBdLCBnID0gcmdiVmFsdWVzWzFdLCBiID0gcmdiVmFsdWVzWzJdO1xuXG4gICAgdmFyIHBpeGVsRGF0YSA9IGNvbnRleHQuZ2V0SW1hZ2VEYXRhKDAsIDAsIGNyb3Aud2lkdGgsIGNyb3AuaGVpZ2h0KTtcblxuICAgIHZhciBwaXhlbHMgPSBwaXhlbERhdGEuZGF0YTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcGl4ZWxzLmxlbmd0aDsgaSArPSA0KVxuICAgIHtcbiAgICAgICAgcGl4ZWxzW2krMF0gKj0gcjtcbiAgICAgICAgcGl4ZWxzW2krMV0gKj0gZztcbiAgICAgICAgcGl4ZWxzW2krMl0gKj0gYjtcbiAgICB9XG5cbiAgICBjb250ZXh0LnB1dEltYWdlRGF0YShwaXhlbERhdGEsIDAsIDApO1xufTtcblxuLyoqXG4gKiBSb3VuZHMgdGhlIHNwZWNpZmllZCBjb2xvciBhY2NvcmRpbmcgdG8gdGhlIENhbnZhc1RpbnRlci5jYWNoZVN0ZXBzUGVyQ29sb3JDaGFubmVsLlxuICpcbiAqIEBwYXJhbSBjb2xvciB7bnVtYmVyfSB0aGUgY29sb3IgdG8gcm91bmQsIHNob3VsZCBiZSBhIGhleCBjb2xvclxuICovXG5DYW52YXNUaW50ZXIucm91bmRDb2xvciA9IGZ1bmN0aW9uIChjb2xvcilcbntcbiAgICB2YXIgc3RlcCA9IENhbnZhc1RpbnRlci5jYWNoZVN0ZXBzUGVyQ29sb3JDaGFubmVsO1xuXG4gICAgdmFyIHJnYlZhbHVlcyA9IHV0aWxzLmhleDJyZ2IoY29sb3IpO1xuXG4gICAgcmdiVmFsdWVzWzBdID0gTWF0aC5taW4oMjU1LCAocmdiVmFsdWVzWzBdIC8gc3RlcCkgKiBzdGVwKTtcbiAgICByZ2JWYWx1ZXNbMV0gPSBNYXRoLm1pbigyNTUsIChyZ2JWYWx1ZXNbMV0gLyBzdGVwKSAqIHN0ZXApO1xuICAgIHJnYlZhbHVlc1syXSA9IE1hdGgubWluKDI1NSwgKHJnYlZhbHVlc1syXSAvIHN0ZXApICogc3RlcCk7XG5cbiAgICByZXR1cm4gdXRpbHMucmdiMmhleChyZ2JWYWx1ZXMpO1xufTtcblxuLyoqXG4gKiBOdW1iZXIgb2Ygc3RlcHMgd2hpY2ggd2lsbCBiZSB1c2VkIGFzIGEgY2FwIHdoZW4gcm91bmRpbmcgY29sb3JzLlxuICpcbiAqIEBtZW1iZXJcbiAqL1xuQ2FudmFzVGludGVyLmNhY2hlU3RlcHNQZXJDb2xvckNoYW5uZWwgPSA4O1xuXG4vKipcbiAqIFRpbnQgY2FjaGUgYm9vbGVhbiBmbGFnLlxuICpcbiAqIEBtZW1iZXJcbiAqL1xuQ2FudmFzVGludGVyLmNvbnZlcnRUaW50VG9JbWFnZSA9IGZhbHNlO1xuXG4vKipcbiAqIFdoZXRoZXIgb3Igbm90IHRoZSBDYW52YXMgQmxlbmRNb2RlcyBhcmUgc3VwcG9ydGVkLCBjb25zZXF1ZW50bHkgdGhlIGFiaWxpdHkgdG8gdGludCB1c2luZyB0aGUgbXVsdGlwbHkgbWV0aG9kLlxuICpcbiAqIEBtZW1iZXJcbiAqL1xuQ2FudmFzVGludGVyLmNhblVzZU11bHRpcGx5ID0gdXRpbHMuY2FuVXNlTmV3Q2FudmFzQmxlbmRNb2RlcygpO1xuXG4vKipcbiAqIFRoZSB0aW50aW5nIG1ldGhvZCB0aGF0IHdpbGwgYmUgdXNlZC5cbiAqXG4gKi9cbkNhbnZhc1RpbnRlci50aW50TWV0aG9kID0gQ2FudmFzVGludGVyLmNhblVzZU11bHRpcGx5ID8gQ2FudmFzVGludGVyLnRpbnRXaXRoTXVsdGlwbHkgOiAgQ2FudmFzVGludGVyLnRpbnRXaXRoUGVyUGl4ZWw7XG4iLCJ2YXIgR0xUZXh0dXJlID0gcmVxdWlyZSgncGl4aS1nbC1jb3JlJykuR0xUZXh0dXJlLFxuXHR1dGlscyA9IHJlcXVpcmUoJy4uLy4uL3V0aWxzJyk7XG5cbi8qKlxuICogSGVscGVyIGNsYXNzIHRvIGNyZWF0ZSBhIHdlYkdMIFRleHR1cmVcbiAqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gZ2wge1dlYkdMUmVuZGVyaW5nQ29udGV4dH1cbiAqL1xuXG52YXIgVGV4dHVyZU1hbmFnZXIgPSBmdW5jdGlvbihnbClcbntcblx0dGhpcy5nbCA9IGdsO1xuXG5cdC8vIHRyYWNrIHRleHR1cmVzIGluIHRoZSByZW5kZXJlciBzbyB3ZSBjYW4gbm8gbG9uZ2VyIGxpc3RlbiB0byB0aGVtIG9uIGRlc3RydWN0aW9uLlxuXHR0aGlzLl9tYW5hZ2VkVGV4dHVyZXMgPSBbXTtcbiAgICB0aGlzLmdsVGV4dHVyZXMgPSB7fTtcblxufVxuXG5UZXh0dXJlTWFuYWdlci5wcm90b3R5cGUuYmluZFRleHR1cmUgPSBmdW5jdGlvbih0ZXh0dXJlKVxue1xuXG59XG5cblxuVGV4dHVyZU1hbmFnZXIucHJvdG90eXBlLmdldFRleHR1cmUgPSBmdW5jdGlvbih0ZXh0dXJlKVxue1xuXG59XG5cbi8qKlxuICogVXBkYXRlcyBhbmQvb3IgQ3JlYXRlcyBhIFdlYkdMIHRleHR1cmUgZm9yIHRoZSByZW5kZXJlcidzIGNvbnRleHQuXG4gKlxuICogQHBhcmFtIHRleHR1cmUge1BJWEkuQmFzZVRleHR1cmV8UElYSS5UZXh0dXJlfSB0aGUgdGV4dHVyZSB0byB1cGRhdGVcbiAqL1xuVGV4dHVyZU1hbmFnZXIucHJvdG90eXBlLnVwZGF0ZVRleHR1cmUgPSBmdW5jdGlvbih0ZXh0dXJlKVxue1xuXHR0ZXh0dXJlID0gdGV4dHVyZS5iYXNlVGV4dHVyZSB8fCB0ZXh0dXJlO1xuXG5cdGlmICghdGV4dHVyZS5oYXNMb2FkZWQpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgXG4gICAgdmFyIGdsID0gdGhpcy5nbDtcbiAgICB2YXIgZ2xUZXh0dXJlID0gdGhpcy5nbFRleHR1cmVzW3RleHR1cmUudWlkXS8vdGV4dHVyZS5fZ2xUZXh0dXJlc1tnbC5pZF07XG5cbiAgICBpZiAoIWdsVGV4dHVyZSlcbiAgICB7XG4gICAgICAgIGdsVGV4dHVyZSA9IG5ldyBHTFRleHR1cmUoZ2wpO1xuICAgICAgICBnbFRleHR1cmUucHJlbXVsdGlwbHlBbHBoYSA9IHRydWVcbiAgICAgICAgdGV4dHVyZS5fZ2xUZXh0dXJlc1tnbC5pZF0gPSBnbFRleHR1cmU7XG5cbiAgICAgICAvLyB0aGlzLmdsVGV4dHVyZXNbdGV4dHVyZS51aWRdID0gZ2xUZXh0dXJlO1xuXG4gICAgICAgIHRleHR1cmUub24oJ3VwZGF0ZScsIHRoaXMudXBkYXRlVGV4dHVyZSwgdGhpcyk7XG4gICAgICAgIHRleHR1cmUub24oJ2Rpc3Bvc2UnLCB0aGlzLmRlc3Ryb3lUZXh0dXJlLCB0aGlzKTtcbiAgICAgICAgXG4gICAgICAgIHRoaXMuX21hbmFnZWRUZXh0dXJlcy5wdXNoKHRleHR1cmUpO1xuICAgIH1cblxuICAgIGdsVGV4dHVyZS51cGxvYWQodGV4dHVyZS5zb3VyY2UpO1xuICAgIFxuICAgIC8vVE9ETyBjaGVjayBpcyBwb3dlciBvZiB0d28uLlxuICAgIGdsVGV4dHVyZS5lbmFibGVXcmFwQ2xhbXAoKTtcblxuXG4gICAgLy8gVE9ETyBjaGVjayBmb3Igc2NhbGluZyB0eXBlXG4gICAgZ2xUZXh0dXJlLmVuYWJsZUxpbmVhclNjYWxpbmcoKTtcblxuICAgIHJldHVybiAgdGV4dHVyZS5fZ2xUZXh0dXJlc1tnbC5pZF07XG59XG5cbi8qKlxuICogRGVsZXRlcyB0aGUgdGV4dHVyZSBmcm9tIFdlYkdMXG4gKlxuICogQHBhcmFtIHRleHR1cmUge1BJWEkuQmFzZVRleHR1cmV8UElYSS5UZXh0dXJlfSB0aGUgdGV4dHVyZSB0byBkZXN0cm95XG4gKi9cblRleHR1cmVNYW5hZ2VyLnByb3RvdHlwZS5kZXN0cm95VGV4dHVyZSA9IGZ1bmN0aW9uKHRleHR1cmUsIF9za2lwUmVtb3ZlKVxue1xuXHR0ZXh0dXJlID0gdGV4dHVyZS5iYXNlVGV4dHVyZSB8fCB0ZXh0dXJlO1xuXG4gICAgaWYgKCF0ZXh0dXJlLmhhc0xvYWRlZClcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAodGV4dHVyZS5fZ2xUZXh0dXJlc1t0aGlzLmdsLmlkXSlcbiAgICB7XG4gICAgICAgIHRleHR1cmUuX2dsVGV4dHVyZXNbdGhpcy5nbC5pZF0uZGVzdHJveSgpO1xuICAgICAgICB0ZXh0dXJlLm9mZigndXBkYXRlJywgdGhpcy51cGRhdGVUZXh0dXJlLCB0aGlzKTtcbiAgICAgICAgdGV4dHVyZS5vZmYoJ2Rpc3Bvc2UnLCB0aGlzLmRlc3Ryb3lUZXh0dXJlLCB0aGlzKTtcblxuXG4gICAgICAgIGRlbGV0ZSB0ZXh0dXJlLl9nbFRleHR1cmVzW3RoaXMuZ2wuaWRdO1xuXG4gICAgICAgIGlmICghX3NraXBSZW1vdmUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHZhciBpID0gdGhpcy5fbWFuYWdlZFRleHR1cmVzLmluZGV4T2YodGV4dHVyZSk7XG4gICAgICAgICAgICBpZiAoaSAhPT0gLTEpIHtcbiAgICAgICAgICAgICAgICB1dGlscy5yZW1vdmVJdGVtcyh0aGlzLl9tYW5hZ2VkVGV4dHVyZXMsIGksIDEpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxufVxuXG5UZXh0dXJlTWFuYWdlci5wcm90b3R5cGUucmVtb3ZlQWxsID0gZnVuY3Rpb24oKVxue1xuXHQvLyBlbXB0eSBhbGwgdGhlIG9sZCBnbCB0ZXh0dXJlcyBhcyB0aGV5IGFyZSB1c2VsZXNzIG5vd1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5fbWFuYWdlZFRleHR1cmVzLmxlbmd0aDsgKytpKVxuICAgIHtcbiAgICAgICAgdmFyIHRleHR1cmUgPSB0aGlzLl9tYW5hZ2VkVGV4dHVyZXNbaV07XG4gICAgICAgIGlmICh0ZXh0dXJlLl9nbFRleHR1cmVzW3RoaXMuZ2wuaWRdKVxuICAgICAgICB7XG4gICAgICAgICAgICBkZWxldGUgdGV4dHVyZS5fZ2xUZXh0dXJlc1t0aGlzLmdsLmlkXTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuVGV4dHVyZU1hbmFnZXIucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbigpXG57XG4gICAgLy8gZGVzdHJveSBtYW5hZ2VkIHRleHR1cmVzXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLl9tYW5hZ2VkVGV4dHVyZXMubGVuZ3RoOyArK2kpXG4gICAge1xuICAgICAgICB2YXIgdGV4dHVyZSA9IHRoaXMuX21hbmFnZWRUZXh0dXJlc1tpXTtcbiAgICAgICAgdGhpcy5kZXN0cm95VGV4dHVyZSh0ZXh0dXJlLCB0cnVlKTtcbiAgICAgICAgdGV4dHVyZS5vZmYoJ3VwZGF0ZScsIHRoaXMudXBkYXRlVGV4dHVyZSwgdGhpcyk7XG4gICAgICAgIHRleHR1cmUub2ZmKCdkaXNwb3NlJywgdGhpcy5kZXN0cm95VGV4dHVyZSwgdGhpcyk7XG4gICAgfVxuXG4gICAgdGhpcy5fbWFuYWdlZFRleHR1cmVzID0gbnVsbDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBUZXh0dXJlTWFuYWdlcjtcblxuIiwidmFyIFN5c3RlbVJlbmRlcmVyID0gcmVxdWlyZSgnLi4vU3lzdGVtUmVuZGVyZXInKSxcbiAgICBTaGFkZXJNYW5hZ2VyID0gcmVxdWlyZSgnLi9tYW5hZ2Vycy9TaGFkZXJNYW5hZ2VyJyksXG4gICAgTWFza01hbmFnZXIgPSByZXF1aXJlKCcuL21hbmFnZXJzL01hc2tNYW5hZ2VyJyksXG4gICAgU3RlbmNpbE1hbmFnZXIgPSByZXF1aXJlKCcuL21hbmFnZXJzL1N0ZW5jaWxNYW5hZ2VyJyksXG4gICAgRmlsdGVyTWFuYWdlciA9IHJlcXVpcmUoJy4vbWFuYWdlcnMvRmlsdGVyTWFuYWdlcicpLFxuICAgIEJsZW5kTW9kZU1hbmFnZXIgPSByZXF1aXJlKCcuL21hbmFnZXJzL0JsZW5kTW9kZU1hbmFnZXInKSxcbiAgICBSZW5kZXJUYXJnZXQgPSByZXF1aXJlKCcuL3V0aWxzL1JlbmRlclRhcmdldCcpLFxuICAgIE9iamVjdFJlbmRlcmVyID0gcmVxdWlyZSgnLi91dGlscy9PYmplY3RSZW5kZXJlcicpLFxuICAgIEZYQUFGaWx0ZXIgPSByZXF1aXJlKCcuL2ZpbHRlcnMvRlhBQUZpbHRlcicpLFxuICAgIFRleHR1cmVNYW5hZ2VyID0gcmVxdWlyZSgnLi9UZXh0dXJlTWFuYWdlcicpLFxuICAgIGNyZWF0ZUNvbnRleHQgPSByZXF1aXJlKCdwaXhpLWdsLWNvcmUnKS5jcmVhdGVDb250ZXh0LFxuICAgIG1hcFdlYkdMQmxlbmRNb2Rlc1RvUGl4aSA9IHJlcXVpcmUoJy4vdXRpbHMvbWFwV2ViR0xCbGVuZE1vZGVzVG9QaXhpJyksXG4gICAgbWFwV2ViR0xEcmF3TW9kZXNUb1BpeGkgPSByZXF1aXJlKCcuL3V0aWxzL21hcFdlYkdMRHJhd01vZGVzVG9QaXhpJyksXG4gICAgdXRpbHMgPSByZXF1aXJlKCcuLi8uLi91dGlscycpLFxuICAgIENPTlNUID0gcmVxdWlyZSgnLi4vLi4vY29uc3QnKTtcblxuLyoqXG4gKiBUaGUgV2ViR0xSZW5kZXJlciBkcmF3cyB0aGUgc2NlbmUgYW5kIGFsbCBpdHMgY29udGVudCBvbnRvIGEgd2ViR0wgZW5hYmxlZCBjYW52YXMuIFRoaXMgcmVuZGVyZXJcbiAqIHNob3VsZCBiZSB1c2VkIGZvciBicm93c2VycyB0aGF0IHN1cHBvcnQgd2ViR0wuIFRoaXMgUmVuZGVyIHdvcmtzIGJ5IGF1dG9tYXRpY2FsbHkgbWFuYWdpbmcgd2ViR0xCYXRjaHMuXG4gKiBTbyBubyBuZWVkIGZvciBTcHJpdGUgQmF0Y2hlcyBvciBTcHJpdGUgQ2xvdWRzLlxuICogRG9uJ3QgZm9yZ2V0IHRvIGFkZCB0aGUgdmlldyB0byB5b3VyIERPTSBvciB5b3Ugd2lsbCBub3Qgc2VlIGFueXRoaW5nIDopXG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQGV4dGVuZHMgUElYSS5TeXN0ZW1SZW5kZXJlclxuICogQHBhcmFtIFt3aWR0aD0wXSB7bnVtYmVyfSB0aGUgd2lkdGggb2YgdGhlIGNhbnZhcyB2aWV3XG4gKiBAcGFyYW0gW2hlaWdodD0wXSB7bnVtYmVyfSB0aGUgaGVpZ2h0IG9mIHRoZSBjYW52YXMgdmlld1xuICogQHBhcmFtIFtvcHRpb25zXSB7b2JqZWN0fSBUaGUgb3B0aW9uYWwgcmVuZGVyZXIgcGFyYW1ldGVyc1xuICogQHBhcmFtIFtvcHRpb25zLnZpZXddIHtIVE1MQ2FudmFzRWxlbWVudH0gdGhlIGNhbnZhcyB0byB1c2UgYXMgYSB2aWV3LCBvcHRpb25hbFxuICogQHBhcmFtIFtvcHRpb25zLnRyYW5zcGFyZW50PWZhbHNlXSB7Ym9vbGVhbn0gSWYgdGhlIHJlbmRlciB2aWV3IGlzIHRyYW5zcGFyZW50LCBkZWZhdWx0IGZhbHNlXG4gKiBAcGFyYW0gW29wdGlvbnMuYXV0b1Jlc2l6ZT1mYWxzZV0ge2Jvb2xlYW59IElmIHRoZSByZW5kZXIgdmlldyBpcyBhdXRvbWF0aWNhbGx5IHJlc2l6ZWQsIGRlZmF1bHQgZmFsc2VcbiAqIEBwYXJhbSBbb3B0aW9ucy5hbnRpYWxpYXM9ZmFsc2VdIHtib29sZWFufSBzZXRzIGFudGlhbGlhcy4gSWYgbm90IGF2YWlsYWJsZSBuYXRpdmVseSB0aGVuIEZYQUEgYW50aWFsaWFzaW5nIGlzIHVzZWRcbiAqIEBwYXJhbSBbb3B0aW9ucy5mb3JjZUZYQUE9ZmFsc2VdIHtib29sZWFufSBmb3JjZXMgRlhBQSBhbnRpYWxpYXNpbmcgdG8gYmUgdXNlZCBvdmVyIG5hdGl2ZS4gRlhBQSBpcyBmYXN0ZXIsIGJ1dCBtYXkgbm90IGFsd2F5cyBsb29rIGFzIGdyZWF0XG4gKiBAcGFyYW0gW29wdGlvbnMucmVzb2x1dGlvbj0xXSB7bnVtYmVyfSB0aGUgcmVzb2x1dGlvbiBvZiB0aGUgcmVuZGVyZXIgcmV0aW5hIHdvdWxkIGJlIDJcbiAqIEBwYXJhbSBbb3B0aW9ucy5jbGVhckJlZm9yZVJlbmRlcj10cnVlXSB7Ym9vbGVhbn0gVGhpcyBzZXRzIGlmIHRoZSBDYW52YXNSZW5kZXJlciB3aWxsIGNsZWFyIHRoZSBjYW52YXMgb3JcbiAqICAgICAgbm90IGJlZm9yZSB0aGUgbmV3IHJlbmRlciBwYXNzLiBJZiB5b3Ugd2lzaCB0byBzZXQgdGhpcyB0byBmYWxzZSwgeW91ICptdXN0KiBzZXQgcHJlc2VydmVEcmF3aW5nQnVmZmVyIHRvIGB0cnVlYC5cbiAqIEBwYXJhbSBbb3B0aW9ucy5wcmVzZXJ2ZURyYXdpbmdCdWZmZXI9ZmFsc2VdIHtib29sZWFufSBlbmFibGVzIGRyYXdpbmcgYnVmZmVyIHByZXNlcnZhdGlvbiwgZW5hYmxlIHRoaXMgaWZcbiAqICAgICAgeW91IG5lZWQgdG8gY2FsbCB0b0RhdGFVcmwgb24gdGhlIHdlYmdsIGNvbnRleHQuXG4gKiBAcGFyYW0gW29wdGlvbnMucm91bmRQaXhlbHM9ZmFsc2VdIHtib29sZWFufSBJZiB0cnVlIFBpeGkgd2lsbCBNYXRoLmZsb29yKCkgeC95IHZhbHVlcyB3aGVuIHJlbmRlcmluZywgc3RvcHBpbmcgcGl4ZWwgaW50ZXJwb2xhdGlvbi5cbiAqL1xuZnVuY3Rpb24gV2ViR0xSZW5kZXJlcih3aWR0aCwgaGVpZ2h0LCBvcHRpb25zKVxue1xuICAgIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuXG4gICAgU3lzdGVtUmVuZGVyZXIuY2FsbCh0aGlzLCAnV2ViR0wnLCB3aWR0aCwgaGVpZ2h0LCBvcHRpb25zKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSB0eXBlIG9mIHRoaXMgcmVuZGVyZXIgYXMgYSBzdGFuZGFyZGlzZWQgY29uc3RcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn0vL1xuICAgICAqXG4gICAgICovXG4gICAgdGhpcy50eXBlID0gQ09OU1QuUkVOREVSRVJfVFlQRS5XRUJHTDtcblxuICAgIHRoaXMuaGFuZGxlQ29udGV4dExvc3QgPSB0aGlzLmhhbmRsZUNvbnRleHRMb3N0LmJpbmQodGhpcyk7XG4gICAgdGhpcy5oYW5kbGVDb250ZXh0UmVzdG9yZWQgPSB0aGlzLmhhbmRsZUNvbnRleHRSZXN0b3JlZC5iaW5kKHRoaXMpO1xuXG4gICAgdGhpcy52aWV3LmFkZEV2ZW50TGlzdGVuZXIoJ3dlYmdsY29udGV4dGxvc3QnLCB0aGlzLmhhbmRsZUNvbnRleHRMb3N0LCBmYWxzZSk7XG4gICAgdGhpcy52aWV3LmFkZEV2ZW50TGlzdGVuZXIoJ3dlYmdsY29udGV4dHJlc3RvcmVkJywgdGhpcy5oYW5kbGVDb250ZXh0UmVzdG9yZWQsIGZhbHNlKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBvcHRpb25zIHBhc3NlZCBpbiB0byBjcmVhdGUgYSBuZXcgd2ViZ2wgY29udGV4dC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge29iamVjdH1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX2NvbnRleHRPcHRpb25zID0ge1xuICAgICAgICBhbHBoYTogdGhpcy50cmFuc3BhcmVudCxcbiAgICAgICAgYW50aWFsaWFzOiBvcHRpb25zLmFudGlhbGlhcyxcbiAgICAgICAgcHJlbXVsdGlwbGllZEFscGhhOiB0aGlzLnRyYW5zcGFyZW50ICYmIHRoaXMudHJhbnNwYXJlbnQgIT09ICdub3RNdWx0aXBsaWVkJyxcbiAgICAgICAgc3RlbmNpbDogdHJ1ZSxcbiAgICAgICAgcHJlc2VydmVEcmF3aW5nQnVmZmVyOiBvcHRpb25zLnByZXNlcnZlRHJhd2luZ0J1ZmZlclxuICAgIH07XG5cbiAgICB0aGlzLl9iYWNrZ3JvdW5kQ29sb3JSZ2JhWzNdID0gdGhpcy50cmFuc3BhcmVudCA/IDAgOiAxO1xuXG4gICAgLyoqXG4gICAgICogRGVhbHMgd2l0aCBtYW5hZ2luZyB0aGUgc2hhZGVyIHByb2dyYW1zIGFuZCB0aGVpciBhdHRyaWJzLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5TaGFkZXJNYW5hZ2VyfVxuICAgICAqL1xuICAgIHRoaXMuc2hhZGVyTWFuYWdlciA9IG5ldyBTaGFkZXJNYW5hZ2VyKHRoaXMpO1xuXG4gICAgLyoqXG4gICAgICogTWFuYWdlcyB0aGUgbWFza3MgdXNpbmcgdGhlIHN0ZW5jaWwgYnVmZmVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5NYXNrTWFuYWdlcn1cbiAgICAgKi9cbiAgICB0aGlzLm1hc2tNYW5hZ2VyID0gbmV3IE1hc2tNYW5hZ2VyKHRoaXMpO1xuXG4gICAgLyoqXG4gICAgICogTWFuYWdlcyB0aGUgc3RlbmNpbCBidWZmZXIuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlN0ZW5jaWxNYW5hZ2VyfVxuICAgICAqL1xuICAgIHRoaXMuc3RlbmNpbE1hbmFnZXIgPSBuZXcgU3RlbmNpbE1hbmFnZXIodGhpcyk7XG5cbiAgICAvKipcbiAgICAgKiBNYW5hZ2VzIHRoZSBmaWx0ZXJzLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5GaWx0ZXJNYW5hZ2VyfVxuICAgICAqL1xuICAgIHRoaXMuZmlsdGVyTWFuYWdlciA9IG5ldyBGaWx0ZXJNYW5hZ2VyKHRoaXMpO1xuXG4gICAgLyoqXG4gICAgICogTWFuYWdlcyB0aGUgYmxlbmRNb2Rlc1xuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5CbGVuZE1vZGVNYW5hZ2VyfVxuICAgICAqL1xuICAgIHRoaXMuYmxlbmRNb2RlTWFuYWdlciA9IG5ldyBCbGVuZE1vZGVNYW5hZ2VyKHRoaXMpO1xuXG4gICAgXG4gICAgLyoqXG4gICAgICogVGhlIGN1cnJlbnRseSBhY3RpdmUgT2JqZWN0UmVuZGVyZXIuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLk9iamVjdFJlbmRlcmVyfVxuICAgICAqL1xuICAgIHRoaXMuY3VycmVudFJlbmRlcmVyID0gbmV3IE9iamVjdFJlbmRlcmVyKHRoaXMpO1xuXG4gICAgdGhpcy5pbml0UGx1Z2lucygpO1xuXG4gICAgLy8gaW5pdGlhbGl6ZSB0aGUgY29udGV4dCBzbyBpdCBpcyByZWFkeSBmb3IgdGhlIG1hbmFnZXJzLlxuICAgIHRoaXMuZ2wgPSBjcmVhdGVDb250ZXh0KHRoaXMudmlldywgdGhpcy5fY29udGV4dE9wdGlvbnMpO1xuXG4gICAgdGhpcy5faW5pdENvbnRleHQoKTtcblxuICAgIC8vIG1hcCBzb21lIHdlYkdMIGJsZW5kIGFuZCBkcmF3bW9kZXMuLlxuICAgIHRoaXMuYmxlbmRNb2RlcyA9IG1hcFdlYkdMQmxlbmRNb2Rlc1RvUGl4aShnbCk7XG4gICAgdGhpcy5kcmF3TW9kZXMgPSBtYXBXZWJHTERyYXdNb2Rlc1RvUGl4aShnbClcblxuICAgIHRoaXMuX2FjdGl2ZVNoYWRlciA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBIb2xkcyB0aGUgY3VycmVudCByZW5kZXIgdGFyZ2V0XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlJlbmRlclRhcmdldH1cbiAgICAgKi9cbiAgICB0aGlzLl9hY3RpdmVSZW5kZXJUYXJnZXQgPSBudWxsO1xuICAgIHRoaXMuX2FjdGl2ZVRleHR1cmVMb2NhdGlvbiA9IG51bGw7XG4gICAgdGhpcy5fYWN0aXZlVGV4dHVyZSA9IG51bGw7XG59XG5cbi8vIGNvbnN0cnVjdG9yXG5XZWJHTFJlbmRlcmVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoU3lzdGVtUmVuZGVyZXIucHJvdG90eXBlKTtcbldlYkdMUmVuZGVyZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gV2ViR0xSZW5kZXJlcjtcbm1vZHVsZS5leHBvcnRzID0gV2ViR0xSZW5kZXJlcjtcbnV0aWxzLnBsdWdpblRhcmdldC5taXhpbihXZWJHTFJlbmRlcmVyKTtcblxuLyoqXG4gKiBDcmVhdGVzIHRoZSBXZWJHTCBjb250ZXh0XG4gKlxuICogQHByaXZhdGVcbiAqL1xuV2ViR0xSZW5kZXJlci5wcm90b3R5cGUuX2luaXRDb250ZXh0ID0gZnVuY3Rpb24gKClcbntcbiAgICB2YXIgZ2wgPSB0aGlzLmdsO1xuXG4gICAgLy8gY3JlYXRlIGEgdGV4dHVyZSBtYW5hZ2VyLi4uXG4gICAgdGhpcy50ZXh0dXJlTWFuYWdlciA9IG5ldyBUZXh0dXJlTWFuYWdlcihnbCk7XG5cbiAgICAvLyBzZXQgdXAgdGhlIGRlZmF1bHQgcGl4aSBzZXR0aW5ncy4uXG4gICAgZ2wuZGlzYWJsZShnbC5ERVBUSF9URVNUKTtcbiAgICBnbC5kaXNhYmxlKGdsLkNVTExfRkFDRSk7XG4gICAgZ2wuZW5hYmxlKGdsLkJMRU5EKTtcblxuXG4gICAgdGhpcy5yb290UmVuZGVyVGFyZ2V0ID0gbmV3IFJlbmRlclRhcmdldChnbCwgdGhpcy53aWR0aCwgdGhpcy5oZWlnaHQsIG51bGwsIHRoaXMucmVzb2x1dGlvbiwgdHJ1ZSk7XG4gICAgdGhpcy5yb290UmVuZGVyVGFyZ2V0LmNsZWFyQ29sb3IgPSB0aGlzLl9iYWNrZ3JvdW5kQ29sb3JSZ2JhO1xuICAgIFxuICAgIHRoaXMuYmluZFJlbmRlclRhcmdldCh0aGlzLnJvb3RSZW5kZXJUYXJnZXQpO1xuXG4gICAgdGhpcy5lbWl0KCdjb250ZXh0JywgZ2wpO1xuXG4gICAgLy8gc2V0dXAgdGhlIHdpZHRoL2hlaWdodCBwcm9wZXJ0aWVzIGFuZCBnbCB2aWV3cG9ydFxuICAgIHRoaXMucmVzaXplKHRoaXMud2lkdGgsIHRoaXMuaGVpZ2h0KTsgICAgXG59O1xuXG4vKipcbiAqIFJlbmRlcnMgdGhlIG9iamVjdCB0byBpdHMgd2ViR0wgdmlld1xuICpcbiAqIEBwYXJhbSBvYmplY3Qge1BJWEkuRGlzcGxheU9iamVjdH0gdGhlIG9iamVjdCB0byBiZSByZW5kZXJlZFxuICovXG5XZWJHTFJlbmRlcmVyLnByb3RvdHlwZS5yZW5kZXIgPSBmdW5jdGlvbiAoZGlzcGxheU9iamVjdClcbntcbiAgICB0aGlzLmVtaXQoJ3ByZXJlbmRlcicpO1xuXG4gICAgLy8gbm8gcG9pbnQgcmVuZGVyaW5nIGlmIG91ciBjb250ZXh0IGhhcyBiZWVuIGJsb3duIHVwIVxuICAgIGlmICh0aGlzLmdsLmlzQ29udGV4dExvc3QoKSlcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLl9sYXN0T2JqZWN0UmVuZGVyZWQgPSBkaXNwbGF5T2JqZWN0O1xuXG4gICAgdmFyIGNhY2hlUGFyZW50ID0gZGlzcGxheU9iamVjdC5wYXJlbnQ7XG4gICAgZGlzcGxheU9iamVjdC5wYXJlbnQgPSB0aGlzLl90ZW1wRGlzcGxheU9iamVjdFBhcmVudDtcbiAgICAvLyB1cGRhdGUgdGhlIHNjZW5lIGdyYXBoXG4gICAgZGlzcGxheU9iamVjdC51cGRhdGVUcmFuc2Zvcm0oKTtcbiAgICBkaXNwbGF5T2JqZWN0LnBhcmVudCA9IGNhY2hlUGFyZW50O1xuXG4gICAgdGhpcy5yZW5kZXJEaXNwbGF5T2JqZWN0KGRpc3BsYXlPYmplY3QsIHRoaXMucm9vdFJlbmRlclRhcmdldCwgdGhpcy5jbGVhckJlZm9yZVJlbmRlcik7Ly90aGlzLnByb2plY3Rpb24pO1xuXG4gICAgdGhpcy5lbWl0KCdwb3N0cmVuZGVyJyk7XG59O1xuXG4vKipcbiAqIFJlbmRlcnMgYSBEaXNwbGF5IE9iamVjdC5cbiAqXG4gKiBAcGFyYW0gZGlzcGxheU9iamVjdCB7UElYSS5EaXNwbGF5T2JqZWN0fSBUaGUgRGlzcGxheU9iamVjdCB0byByZW5kZXJcbiAqIEBwYXJhbSByZW5kZXJUYXJnZXQge1BJWEkuUmVuZGVyVGFyZ2V0fSBUaGUgcmVuZGVyIHRhcmdldCB0byB1c2UgdG8gcmVuZGVyIHRoaXMgZGlzcGxheSBvYmplY3RcbiAqXG4gKi9cbldlYkdMUmVuZGVyZXIucHJvdG90eXBlLnJlbmRlckRpc3BsYXlPYmplY3QgPSBmdW5jdGlvbiAoZGlzcGxheU9iamVjdCwgcmVuZGVyVGFyZ2V0LCBjbGVhcikvL3Byb2plY3Rpb24sIGJ1ZmZlcilcbntcbiAgICB0aGlzLmJpbmRSZW5kZXJUYXJnZXQocmVuZGVyVGFyZ2V0KTtcblxuICAgIGlmKGNsZWFyKVxuICAgIHtcbiAgICAgICAgcmVuZGVyVGFyZ2V0LmNsZWFyKCk7XG4gICAgfVxuXG4gICAgLy8gc3RhcnQgdGhlIGZpbHRlciBtYW5hZ2VyXG4gICAgdGhpcy5maWx0ZXJNYW5hZ2VyLnNldEZpbHRlclN0YWNrKCByZW5kZXJUYXJnZXQuZmlsdGVyU3RhY2sgKTtcblxuICAgIC8vIHJlbmRlciB0aGUgc2NlbmUhXG4gICAgZGlzcGxheU9iamVjdC5yZW5kZXJXZWJHTCh0aGlzKTtcblxuICAgIC8vIGZpbmlzaCB0aGUgY3VycmVudCByZW5kZXJlci4uXG4gICAgdGhpcy5jdXJyZW50UmVuZGVyZXIuZmx1c2goKTtcbn07XG5cbi8qKlxuICogQ2hhbmdlcyB0aGUgY3VycmVudCByZW5kZXJlciB0byB0aGUgb25lIGdpdmVuIGluIHBhcmFtZXRlclxuICpcbiAqIEBwYXJhbSBvYmplY3RSZW5kZXJlciB7UElYSS5PYmplY3RSZW5kZXJlcn0gVGhlIG9iamVjdCByZW5kZXJlciB0byB1c2UuXG4gKi9cbldlYkdMUmVuZGVyZXIucHJvdG90eXBlLnNldE9iamVjdFJlbmRlcmVyID0gZnVuY3Rpb24gKG9iamVjdFJlbmRlcmVyKVxue1xuICAgIGlmICh0aGlzLmN1cnJlbnRSZW5kZXJlciA9PT0gb2JqZWN0UmVuZGVyZXIpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5jdXJyZW50UmVuZGVyZXIuc3RvcCgpO1xuICAgIHRoaXMuY3VycmVudFJlbmRlcmVyID0gb2JqZWN0UmVuZGVyZXI7XG4gICAgdGhpcy5jdXJyZW50UmVuZGVyZXIuc3RhcnQoKTtcbn07XG5cbi8qKlxuICogUmVzaXplcyB0aGUgd2ViR0wgdmlldyB0byB0aGUgc3BlY2lmaWVkIHdpZHRoIGFuZCBoZWlnaHQuXG4gKlxuICogQHBhcmFtIHdpZHRoIHtudW1iZXJ9IHRoZSBuZXcgd2lkdGggb2YgdGhlIHdlYkdMIHZpZXdcbiAqIEBwYXJhbSBoZWlnaHQge251bWJlcn0gdGhlIG5ldyBoZWlnaHQgb2YgdGhlIHdlYkdMIHZpZXdcbiAqL1xuV2ViR0xSZW5kZXJlci5wcm90b3R5cGUucmVzaXplID0gZnVuY3Rpb24gKHdpZHRoLCBoZWlnaHQpXG57XG4gICAgU3lzdGVtUmVuZGVyZXIucHJvdG90eXBlLnJlc2l6ZS5jYWxsKHRoaXMsIHdpZHRoLCBoZWlnaHQpO1xuXG4gICAgdGhpcy5maWx0ZXJNYW5hZ2VyLnJlc2l6ZSh3aWR0aCwgaGVpZ2h0KTtcbiAgICB0aGlzLnJvb3RSZW5kZXJUYXJnZXQucmVzaXplKHdpZHRoLCBoZWlnaHQpO1xuXG4gICAgaWYodGhpcy5jdXJyZW50UmVuZGVyVGFyZ2V0ID09PSB0aGlzLnJlbmRlclRhcmdldClcbiAgICB7XG4gICAgICAgIHRoaXMucm9vdFJlbmRlclRhcmdldC5hY3RpdmF0ZSgpO1xuICAgIH1cbn07XG5cbi8qKlxuICogQ2hhbmdlcyB0aGUgY3VycmVudCByZW5kZXIgdGFyZ2V0IHRvIHRoZSBvbmUgZ2l2ZW4gaW4gcGFyYW1ldGVyXG4gKlxuICogQHBhcmFtIHJlbmRlclRhcmdldCB7UElYSS5SZW5kZXJUYXJnZXR9IHRoZSBuZXcgcmVuZGVyIHRhcmdldFxuICovXG5XZWJHTFJlbmRlcmVyLnByb3RvdHlwZS5iaW5kUmVuZGVyVGFyZ2V0ID0gZnVuY3Rpb24gKHJlbmRlclRhcmdldCkvL3Byb2plY3Rpb24sIGJ1ZmZlcilcbntcbiAgICBpZihyZW5kZXJUYXJnZXQgIT09IHRoaXMuX2FjdGl2ZVJlbmRlclRhcmdldClcbiAgICB7XG4gICAgICAgIHRoaXMuX2FjdGl2ZVJlbmRlclRhcmdldCA9IHJlbmRlclRhcmdldDtcblxuICAgICAgICBpZih0aGlzLl9hY3RpdmVTaGFkZXIpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuX2FjdGl2ZVNoYWRlci51bmlmb3Jtcy5wcm9qZWN0aW9uTWF0cml4ID0gcmVuZGVyVGFyZ2V0LnByb2plY3Rpb25NYXRyaXgudG9BcnJheSh0cnVlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJlbmRlclRhcmdldC5hY3RpdmF0ZSgpO1xuXG4gICAgICAgIHRoaXMuc3RlbmNpbE1hbmFnZXIuc2V0TWFza1N0YWNrKCByZW5kZXJUYXJnZXQuc3RlbmNpbE1hc2tTdGFjayApO1xuICAgIH1cbn1cblxuV2ViR0xSZW5kZXJlci5wcm90b3R5cGUuYmluZFNoYWRlciA9IGZ1bmN0aW9uIChzaGFkZXIpLy9wcm9qZWN0aW9uLCBidWZmZXIpXG57XG4gICAgLy9UT0RPIGNhY2hlXG4gICAgaWYodGhpcy5fYWN0aXZlU2hhZGVyICE9PSBzaGFkZXIpXG4gICAge1xuICAgICAgICB0aGlzLl9hY3RpdmVTaGFkZXIgPSBzaGFkZXI7XG4gICAgICAgIHNoYWRlci5iaW5kKCk7XG5cbiAgICAgICAgLy8gYXV0b21hdGljYWxseSBzZXQgdGhlIHByb2plY3Rpb24gbWF0cml4XG4gICAgICAgIHNoYWRlci51bmlmb3Jtcy5wcm9qZWN0aW9uTWF0cml4ID0gdGhpcy5fYWN0aXZlUmVuZGVyVGFyZ2V0LnByb2plY3Rpb25NYXRyaXgudG9BcnJheSh0cnVlKTtcbiAgICB9XG59XG5cblxuV2ViR0xSZW5kZXJlci5wcm90b3R5cGUuYmluZFRleHR1cmUgPSBmdW5jdGlvbiAodGV4dHVyZSwgbG9jYXRpb24pXG57XG4gICAgdmFyIGdsID0gdGhpcy5nbDtcblxuICAgIC8vVE9ETyB0ZXN0IHBlcmYgb2YgY2FjaGU/XG4gICAgbG9jYXRpb24gPSBsb2NhdGlvbiB8fCAwO1xuXG4gICAgaWYodGhpcy5fYWN0aXZlVGV4dHVyZUxvY2F0aW9uICE9PSBsb2NhdGlvbikvL1xuICAgIHtcbiAgICAgICAgdGhpcy5fYWN0aXZlVGV4dHVyZUxvY2F0aW9uID0gbG9jYXRpb25cbiAgICAgICAgZ2wuYWN0aXZlVGV4dHVyZShnbC5URVhUVVJFMCArIGxvY2F0aW9uICk7XG4gICAgfVxuXG4gICAgLy9UT0RPIC0gY2FuIHdlIGNhY2hlIHRoaXMgdGV4dHVyZSB0b28/XG4gICAgdGhpcy5fYWN0aXZlVGV4dHVyZSA9IHRleHR1cmU7ICAgICAgXG4gICAgXG4gICAgaWYgKCF0ZXh0dXJlLl9nbFRleHR1cmVzW2dsLmlkXSlcbiAgICB7XG4gICAgICAgIC8vIHRoaXMgd2lsbCBhbHNvIGJpbmQgdGhlIHRleHR1cmUuLlxuICAgICAgICB0aGlzLnRleHR1cmVNYW5hZ2VyLnVwZGF0ZVRleHR1cmUodGV4dHVyZSk7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7ICAgXG4gICAgICAgIC8vIGJpbmQgdGhlIGN1cnJlbnQgdGV4dHVyZVxuICAgICAgICB0ZXh0dXJlLl9nbFRleHR1cmVzW2dsLmlkXS5iaW5kKCk7XG4gICAgfVxufVxuXG5cbi8qKlxuICogSGFuZGxlcyBhIGxvc3Qgd2ViZ2wgY29udGV4dFxuICpcbiAqIEBwcml2YXRlXG4gKi9cbldlYkdMUmVuZGVyZXIucHJvdG90eXBlLmhhbmRsZUNvbnRleHRMb3N0ID0gZnVuY3Rpb24gKGV2ZW50KVxue1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG59O1xuXG4vKipcbiAqIEhhbmRsZXMgYSByZXN0b3JlZCB3ZWJnbCBjb250ZXh0XG4gKlxuICogQHByaXZhdGVcbiAqL1xuV2ViR0xSZW5kZXJlci5wcm90b3R5cGUuaGFuZGxlQ29udGV4dFJlc3RvcmVkID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLl9pbml0Q29udGV4dCgpO1xuICAgIHRoaXMudGV4dHVyZU1hbmFnZXIucmVtb3ZlQWxsKCk7XG59O1xuXG4vKipcbiAqIFJlbW92ZXMgZXZlcnl0aGluZyBmcm9tIHRoZSByZW5kZXJlciAoZXZlbnQgbGlzdGVuZXJzLCBzcHJpdGViYXRjaCwgZXRjLi4uKVxuICpcbiAqIEBwYXJhbSBbcmVtb3ZlVmlldz1mYWxzZV0ge2Jvb2xlYW59IFJlbW92ZXMgdGhlIENhbnZhcyBlbGVtZW50IGZyb20gdGhlIERPTS5cbiAqL1xuV2ViR0xSZW5kZXJlci5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uIChyZW1vdmVWaWV3KVxue1xuICAgIHRoaXMuZGVzdHJveVBsdWdpbnMoKTtcblxuICAgIC8vIHJlbW92ZSBsaXN0ZW5lcnNcbiAgICB0aGlzLnZpZXcucmVtb3ZlRXZlbnRMaXN0ZW5lcignd2ViZ2xjb250ZXh0bG9zdCcsIHRoaXMuaGFuZGxlQ29udGV4dExvc3QpO1xuICAgIHRoaXMudmlldy5yZW1vdmVFdmVudExpc3RlbmVyKCd3ZWJnbGNvbnRleHRyZXN0b3JlZCcsIHRoaXMuaGFuZGxlQ29udGV4dFJlc3RvcmVkKTtcblxuICAgIHRoaXMudGV4dHVyZU1hbmFnZXIuZGVzdHJveUFsbCgpO1xuXG4gICAgLy8gY2FsbCBiYXNlIGRlc3Ryb3lcbiAgICBTeXN0ZW1SZW5kZXJlci5wcm90b3R5cGUuZGVzdHJveS5jYWxsKHRoaXMsIHJlbW92ZVZpZXcpO1xuXG4gICAgdGhpcy51aWQgPSAwO1xuXG4gICAgLy8gZGVzdHJveSB0aGUgbWFuYWdlcnNcbiAgICB0aGlzLnNoYWRlck1hbmFnZXIuZGVzdHJveSgpO1xuICAgIHRoaXMubWFza01hbmFnZXIuZGVzdHJveSgpO1xuICAgIHRoaXMuc3RlbmNpbE1hbmFnZXIuZGVzdHJveSgpO1xuICAgIHRoaXMuZmlsdGVyTWFuYWdlci5kZXN0cm95KCk7XG4gICAgdGhpcy5ibGVuZE1vZGVNYW5hZ2VyLmRlc3Ryb3koKTtcblxuICAgIHRoaXMuc2hhZGVyTWFuYWdlciA9IG51bGw7XG4gICAgdGhpcy5tYXNrTWFuYWdlciA9IG51bGw7XG4gICAgdGhpcy5maWx0ZXJNYW5hZ2VyID0gbnVsbDtcbiAgICB0aGlzLmJsZW5kTW9kZU1hbmFnZXIgPSBudWxsO1xuICAgIHRoaXMuY3VycmVudFJlbmRlcmVyID0gbnVsbDtcblxuICAgIHRoaXMuaGFuZGxlQ29udGV4dExvc3QgPSBudWxsO1xuICAgIHRoaXMuaGFuZGxlQ29udGV4dFJlc3RvcmVkID0gbnVsbDtcblxuICAgIHRoaXMuX2NvbnRleHRPcHRpb25zID0gbnVsbDtcblxuICAgIHRoaXMuZ2wudXNlUHJvZ3JhbShudWxsKTtcbiAgICB0aGlzLmdsID0gbnVsbDtcbn07XG5cbiIsInZhciBEZWZhdWx0U2hhZGVyID0gcmVxdWlyZSgnLi4vc2hhZGVycy9UZXh0dXJlU2hhZGVyJyk7XG5cbi8qKlxuICogVGhpcyBpcyB0aGUgYmFzZSBjbGFzcyBmb3IgY3JlYXRpbmcgYSBQSVhJIGZpbHRlci4gQ3VycmVudGx5IG9ubHkgV2ViR0wgc3VwcG9ydHMgZmlsdGVycy5cbiAqIElmIHlvdSB3YW50IHRvIG1ha2UgYSBjdXN0b20gZmlsdGVyIHRoaXMgc2hvdWxkIGJlIHlvdXIgYmFzZSBjbGFzcy5cbiAqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gdmVydGV4U3JjIHtzdHJpbmd8c3RyaW5nW119IFRoZSB2ZXJ0ZXggc2hhZGVyIHNvdXJjZSBhcyBhbiBhcnJheSBvZiBzdHJpbmdzLlxuICogQHBhcmFtIGZyYWdtZW50U3JjIHtzdHJpbmd8c3RyaW5nW119IFRoZSBmcmFnbWVudCBzaGFkZXIgc291cmNlIGFzIGFuIGFycmF5IG9mIHN0cmluZ3MuXG4gKiBAcGFyYW0gdW5pZm9ybXMge29iamVjdH0gQW4gb2JqZWN0IGNvbnRhaW5pbmcgdGhlIHVuaWZvcm1zIGZvciB0aGlzIGZpbHRlci5cbiAqL1xuZnVuY3Rpb24gQWJzdHJhY3RGaWx0ZXIodmVydGV4U3JjLCBmcmFnbWVudFNyYywgdW5pZm9ybXMpXG57XG5cbiAgICAvKipcbiAgICAgKiBBbiBhcnJheSBvZiBzaGFkZXJzXG4gICAgICogQG1lbWJlciB7UElYSS5TaGFkZXJbXX1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuc2hhZGVycyA9IFtdO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGV4dHJhIHBhZGRpbmcgdGhhdCB0aGUgZmlsdGVyIG1pZ2h0IG5lZWRcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy5wYWRkaW5nID0gMDtcblxuICAgIC8qKlxuICAgICAqIFRoZSB1bmlmb3JtcyBhcyBhbiBvYmplY3RcbiAgICAgKiBAbWVtYmVyIHtvYmplY3R9XG4gICAgICovXG4gICAgdGhpcy51bmlmb3JtcyA9IHVuaWZvcm1zIHx8IHt9O1xuXG5cbiAgICAvKipcbiAgICAgKiBUaGUgY29kZSBvZiB0aGUgdmVydGV4IHNoYWRlclxuICAgICAqIEBtZW1iZXIge3N0cmluZ1tdfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy52ZXJ0ZXhTcmMgPSB2ZXJ0ZXhTcmMgfHwgRGVmYXVsdFNoYWRlci5kZWZhdWx0VmVydGV4U3JjO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGNvZGUgb2YgdGhlIGZyYW1lbnQgc2hhZGVyXG4gICAgICogQG1lbWJlciB7c3RyaW5nW119XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLmZyYWdtZW50U3JjID0gZnJhZ21lbnRTcmMgfHwgRGVmYXVsdFNoYWRlci5kZWZhdWx0RnJhZ21lbnRTcmM7XG5cbiAgICAvL1RPRE8gYSByZW1pbmRlciAtIHdvdWxkIGJlIGNvb2wgdG8gaGF2ZSBsb3dlciByZXMgZmlsdGVycyBhcyB0aGlzIHdvdWxkIGdpdmUgYmV0dGVyIHBlcmZvcm1hbmNlLlxuXG4gICAgLy90eXBlb2YgZnJhZ21lbnRTcmMgPT09ICdzdHJpbmcnID8gZnJhZ21lbnRTcmMuc3BsaXQoJycpIDogKGZyYWdtZW50U3JjIHx8IFtdKTtcblxufVxuXG5BYnN0cmFjdEZpbHRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBBYnN0cmFjdEZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gQWJzdHJhY3RGaWx0ZXI7XG5cbi8qKlxuICogR3JhYnMgYSBzaGFkZXIgZnJvbSB0aGUgY3VycmVudCByZW5kZXJlclxuICpcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5XZWJHTFJlbmRlcmVyfSBUaGUgcmVuZGVyZXIgdG8gcmV0cmlldmUgdGhlIHNoYWRlciBmcm9tXG4gKi9cbkFic3RyYWN0RmlsdGVyLnByb3RvdHlwZS5nZXRTaGFkZXIgPSBmdW5jdGlvbiAocmVuZGVyZXIpXG57XG4gICAgdmFyIGdsID0gcmVuZGVyZXIuZ2w7XG5cbiAgICB2YXIgc2hhZGVyID0gdGhpcy5zaGFkZXJzW2dsLmlkXTtcblxuICAgIGlmICghc2hhZGVyKVxuICAgIHtcbiAgICAgICAgc2hhZGVyID0gbmV3IERlZmF1bHRTaGFkZXIocmVuZGVyZXIuc2hhZGVyTWFuYWdlcixcbiAgICAgICAgICAgIHRoaXMudmVydGV4U3JjLFxuICAgICAgICAgICAgdGhpcy5mcmFnbWVudFNyYyxcbiAgICAgICAgICAgIHRoaXMudW5pZm9ybXMsXG4gICAgICAgICAgICB0aGlzLmF0dHJpYnV0ZXNcbiAgICAgICAgKTtcblxuICAgICAgICB0aGlzLnNoYWRlcnNbZ2wuaWRdID0gc2hhZGVyO1xuICAgIH1cblxuICAgIHJldHVybiBzaGFkZXI7XG59O1xuXG4vKipcbiAqIEFwcGxpZXMgdGhlIGZpbHRlclxuICpcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5XZWJHTFJlbmRlcmVyfSBUaGUgcmVuZGVyZXIgdG8gcmV0cmlldmUgdGhlIGZpbHRlciBmcm9tXG4gKiBAcGFyYW0gaW5wdXQge1BJWEkuUmVuZGVyVGFyZ2V0fVxuICogQHBhcmFtIG91dHB1dCB7UElYSS5SZW5kZXJUYXJnZXR9XG4gKiBAcGFyYW0gY2xlYXIge2Jvb2xlYW59IFdoZXRoZXIgb3Igbm90IHdlIHdhbnQgdG8gY2xlYXIgdGhlIG91dHB1dFRhcmdldFxuICovXG5BYnN0cmFjdEZpbHRlci5wcm90b3R5cGUuYXBwbHlGaWx0ZXIgPSBmdW5jdGlvbiAocmVuZGVyZXIsIGlucHV0LCBvdXRwdXQsIGNsZWFyKVxue1xuICAgIHZhciBzaGFkZXIgPSB0aGlzLmdldFNoYWRlcihyZW5kZXJlcik7XG5cbiAgICByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLmFwcGx5RmlsdGVyKHNoYWRlciwgaW5wdXQsIG91dHB1dCwgY2xlYXIpO1xufTtcblxuLyoqXG4gKiBTeW5jcyBhIHVuaWZvcm0gYmV0d2VlbiB0aGUgY2xhc3Mgb2JqZWN0IGFuZCB0aGUgc2hhZGVycy5cbiAqXG4gKi9cbkFic3RyYWN0RmlsdGVyLnByb3RvdHlwZS5zeW5jVW5pZm9ybSA9IGZ1bmN0aW9uICh1bmlmb3JtKVxue1xuICAgIGZvciAodmFyIGkgPSAwLCBqID0gdGhpcy5zaGFkZXJzLmxlbmd0aDsgaSA8IGo7ICsraSlcbiAgICB7XG4gICAgICAgIHRoaXMuc2hhZGVyc1tpXS5zeW5jVW5pZm9ybSh1bmlmb3JtKTtcbiAgICB9XG59O1xuIiwidmFyIEFic3RyYWN0RmlsdGVyID0gcmVxdWlyZSgnLi9BYnN0cmFjdEZpbHRlcicpO1xuLy8gQHNlZSBodHRwczovL2dpdGh1Yi5jb20vc3Vic3RhY2svYnJmcy9pc3N1ZXMvMjVcblxuXG4vKipcbiAqXG4gKiBCYXNpYyBGWEFBIGltcGxlbWVudGF0aW9uIGJhc2VkIG9uIHRoZSBjb2RlIG9uIGdlZWtzM2QuY29tIHdpdGggdGhlXG4gKiBtb2RpZmljYXRpb24gdGhhdCB0aGUgdGV4dHVyZTJETG9kIHN0dWZmIHdhcyByZW1vdmVkIHNpbmNlIGl0J3NcbiAqIHVuc3VwcG9ydGVkIGJ5IFdlYkdMLlxuICpcbiAqIC0tXG4gKiBGcm9tOlxuICogaHR0cHM6Ly9naXRodWIuY29tL21pdHN1aGlrby93ZWJnbC1tZWluY3JhZnRcbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQWJzdHJhY3RGaWx0ZXJcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKlxuICovXG5mdW5jdGlvbiBGWEFBRmlsdGVyKClcbntcbiAgICBBYnN0cmFjdEZpbHRlci5jYWxsKHRoaXMsXG4gICAgICAgIC8vIHZlcnRleCBzaGFkZXJcbiAgICAgICAgXCJcXG5wcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcXG5cXG5hdHRyaWJ1dGUgdmVjMiBhVmVydGV4UG9zaXRpb247XFxuYXR0cmlidXRlIHZlYzIgYVRleHR1cmVDb29yZDtcXG5hdHRyaWJ1dGUgdmVjNCBhQ29sb3I7XFxuXFxudW5pZm9ybSBtYXQzIHByb2plY3Rpb25NYXRyaXg7XFxudW5pZm9ybSB2ZWMyIHJlc29sdXRpb247XFxuXFxudmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7XFxudmFyeWluZyB2ZWM0IHZDb2xvcjtcXG5cXG52YXJ5aW5nIHZlYzIgdlJlc29sdXRpb247XFxuXFxuLy90ZXhjb29yZHMgY29tcHV0ZWQgaW4gdmVydGV4IHN0ZXBcXG4vL3RvIGF2b2lkIGRlcGVuZGVudCB0ZXh0dXJlIHJlYWRzXFxudmFyeWluZyB2ZWMyIHZfcmdiTlc7XFxudmFyeWluZyB2ZWMyIHZfcmdiTkU7XFxudmFyeWluZyB2ZWMyIHZfcmdiU1c7XFxudmFyeWluZyB2ZWMyIHZfcmdiU0U7XFxudmFyeWluZyB2ZWMyIHZfcmdiTTtcXG5cXG5cXG52b2lkIHRleGNvb3Jkcyh2ZWMyIGZyYWdDb29yZCwgdmVjMiByZXNvbHV0aW9uLFxcbiAgICAgICAgICAgIG91dCB2ZWMyIHZfcmdiTlcsIG91dCB2ZWMyIHZfcmdiTkUsXFxuICAgICAgICAgICAgb3V0IHZlYzIgdl9yZ2JTVywgb3V0IHZlYzIgdl9yZ2JTRSxcXG4gICAgICAgICAgICBvdXQgdmVjMiB2X3JnYk0pIHtcXG4gICAgdmVjMiBpbnZlcnNlVlAgPSAxLjAgLyByZXNvbHV0aW9uLnh5O1xcbiAgICB2X3JnYk5XID0gKGZyYWdDb29yZCArIHZlYzIoLTEuMCwgLTEuMCkpICogaW52ZXJzZVZQO1xcbiAgICB2X3JnYk5FID0gKGZyYWdDb29yZCArIHZlYzIoMS4wLCAtMS4wKSkgKiBpbnZlcnNlVlA7XFxuICAgIHZfcmdiU1cgPSAoZnJhZ0Nvb3JkICsgdmVjMigtMS4wLCAxLjApKSAqIGludmVyc2VWUDtcXG4gICAgdl9yZ2JTRSA9IChmcmFnQ29vcmQgKyB2ZWMyKDEuMCwgMS4wKSkgKiBpbnZlcnNlVlA7XFxuICAgIHZfcmdiTSA9IHZlYzIoZnJhZ0Nvb3JkICogaW52ZXJzZVZQKTtcXG59XFxuXFxudm9pZCBtYWluKHZvaWQpe1xcbiAgIGdsX1Bvc2l0aW9uID0gdmVjNCgocHJvamVjdGlvbk1hdHJpeCAqIHZlYzMoYVZlcnRleFBvc2l0aW9uLCAxLjApKS54eSwgMC4wLCAxLjApO1xcbiAgIHZUZXh0dXJlQ29vcmQgPSBhVGV4dHVyZUNvb3JkO1xcbiAgIHZDb2xvciA9IHZlYzQoYUNvbG9yLnJnYiAqIGFDb2xvci5hLCBhQ29sb3IuYSk7XFxuICAgdlJlc29sdXRpb24gPSByZXNvbHV0aW9uO1xcblxcbiAgIC8vY29tcHV0ZSB0aGUgdGV4dHVyZSBjb29yZHMgYW5kIHNlbmQgdGhlbSB0byB2YXJ5aW5nc1xcbiAgIHRleGNvb3JkcyhhVGV4dHVyZUNvb3JkICogcmVzb2x1dGlvbiwgcmVzb2x1dGlvbiwgdl9yZ2JOVywgdl9yZ2JORSwgdl9yZ2JTVywgdl9yZ2JTRSwgdl9yZ2JNKTtcXG59XFxuXCIsXG4gICAgICAgIC8vIGZyYWdtZW50IHNoYWRlclxuICAgICAgICBcInByZWNpc2lvbiBsb3dwIGZsb2F0O1xcblxcblxcbi8qKlxcbkJhc2ljIEZYQUEgaW1wbGVtZW50YXRpb24gYmFzZWQgb24gdGhlIGNvZGUgb24gZ2Vla3MzZC5jb20gd2l0aCB0aGVcXG5tb2RpZmljYXRpb24gdGhhdCB0aGUgdGV4dHVyZTJETG9kIHN0dWZmIHdhcyByZW1vdmVkIHNpbmNlIGl0J3NcXG51bnN1cHBvcnRlZCBieSBXZWJHTC5cXG5cXG4tLVxcblxcbkZyb206XFxuaHR0cHM6Ly9naXRodWIuY29tL21pdHN1aGlrby93ZWJnbC1tZWluY3JhZnRcXG5cXG5Db3B5cmlnaHQgKGMpIDIwMTEgYnkgQXJtaW4gUm9uYWNoZXIuXFxuXFxuU29tZSByaWdodHMgcmVzZXJ2ZWQuXFxuXFxuUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0XFxubW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZVxcbm1ldDpcXG5cXG4gICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodFxcbiAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci5cXG5cXG4gICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlXFxuICAgICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmdcXG4gICAgICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWRcXG4gICAgICB3aXRoIHRoZSBkaXN0cmlidXRpb24uXFxuXFxuICAgICogVGhlIG5hbWVzIG9mIHRoZSBjb250cmlidXRvcnMgbWF5IG5vdCBiZSB1c2VkIHRvIGVuZG9yc2Ugb3JcXG4gICAgICBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWNcXG4gICAgICBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uXFxuXFxuVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SU1xcblxcXCJBUyBJU1xcXCIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UXFxuTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SXFxuQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFRcXG5PV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCxcXG5TUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UXFxuTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsXFxuREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZXFxuVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVFxcbihJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRVxcbk9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuXFxuKi9cXG5cXG4jaWZuZGVmIEZYQUFfUkVEVUNFX01JTlxcbiAgICAjZGVmaW5lIEZYQUFfUkVEVUNFX01JTiAgICgxLjAvIDEyOC4wKVxcbiNlbmRpZlxcbiNpZm5kZWYgRlhBQV9SRURVQ0VfTVVMXFxuICAgICNkZWZpbmUgRlhBQV9SRURVQ0VfTVVMICAgKDEuMCAvIDguMClcXG4jZW5kaWZcXG4jaWZuZGVmIEZYQUFfU1BBTl9NQVhcXG4gICAgI2RlZmluZSBGWEFBX1NQQU5fTUFYICAgICA4LjBcXG4jZW5kaWZcXG5cXG4vL29wdGltaXplZCB2ZXJzaW9uIGZvciBtb2JpbGUsIHdoZXJlIGRlcGVuZGVudFxcbi8vdGV4dHVyZSByZWFkcyBjYW4gYmUgYSBib3R0bGVuZWNrXFxudmVjNCBmeGFhKHNhbXBsZXIyRCB0ZXgsIHZlYzIgZnJhZ0Nvb3JkLCB2ZWMyIHJlc29sdXRpb24sXFxuICAgICAgICAgICAgdmVjMiB2X3JnYk5XLCB2ZWMyIHZfcmdiTkUsXFxuICAgICAgICAgICAgdmVjMiB2X3JnYlNXLCB2ZWMyIHZfcmdiU0UsXFxuICAgICAgICAgICAgdmVjMiB2X3JnYk0pIHtcXG4gICAgdmVjNCBjb2xvcjtcXG4gICAgbWVkaXVtcCB2ZWMyIGludmVyc2VWUCA9IHZlYzIoMS4wIC8gcmVzb2x1dGlvbi54LCAxLjAgLyByZXNvbHV0aW9uLnkpO1xcbiAgICB2ZWMzIHJnYk5XID0gdGV4dHVyZTJEKHRleCwgdl9yZ2JOVykueHl6O1xcbiAgICB2ZWMzIHJnYk5FID0gdGV4dHVyZTJEKHRleCwgdl9yZ2JORSkueHl6O1xcbiAgICB2ZWMzIHJnYlNXID0gdGV4dHVyZTJEKHRleCwgdl9yZ2JTVykueHl6O1xcbiAgICB2ZWMzIHJnYlNFID0gdGV4dHVyZTJEKHRleCwgdl9yZ2JTRSkueHl6O1xcbiAgICB2ZWM0IHRleENvbG9yID0gdGV4dHVyZTJEKHRleCwgdl9yZ2JNKTtcXG4gICAgdmVjMyByZ2JNICA9IHRleENvbG9yLnh5ejtcXG4gICAgdmVjMyBsdW1hID0gdmVjMygwLjI5OSwgMC41ODcsIDAuMTE0KTtcXG4gICAgZmxvYXQgbHVtYU5XID0gZG90KHJnYk5XLCBsdW1hKTtcXG4gICAgZmxvYXQgbHVtYU5FID0gZG90KHJnYk5FLCBsdW1hKTtcXG4gICAgZmxvYXQgbHVtYVNXID0gZG90KHJnYlNXLCBsdW1hKTtcXG4gICAgZmxvYXQgbHVtYVNFID0gZG90KHJnYlNFLCBsdW1hKTtcXG4gICAgZmxvYXQgbHVtYU0gID0gZG90KHJnYk0sICBsdW1hKTtcXG4gICAgZmxvYXQgbHVtYU1pbiA9IG1pbihsdW1hTSwgbWluKG1pbihsdW1hTlcsIGx1bWFORSksIG1pbihsdW1hU1csIGx1bWFTRSkpKTtcXG4gICAgZmxvYXQgbHVtYU1heCA9IG1heChsdW1hTSwgbWF4KG1heChsdW1hTlcsIGx1bWFORSksIG1heChsdW1hU1csIGx1bWFTRSkpKTtcXG5cXG4gICAgbWVkaXVtcCB2ZWMyIGRpcjtcXG4gICAgZGlyLnggPSAtKChsdW1hTlcgKyBsdW1hTkUpIC0gKGx1bWFTVyArIGx1bWFTRSkpO1xcbiAgICBkaXIueSA9ICAoKGx1bWFOVyArIGx1bWFTVykgLSAobHVtYU5FICsgbHVtYVNFKSk7XFxuXFxuICAgIGZsb2F0IGRpclJlZHVjZSA9IG1heCgobHVtYU5XICsgbHVtYU5FICsgbHVtYVNXICsgbHVtYVNFKSAqXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAoMC4yNSAqIEZYQUFfUkVEVUNFX01VTCksIEZYQUFfUkVEVUNFX01JTik7XFxuXFxuICAgIGZsb2F0IHJjcERpck1pbiA9IDEuMCAvIChtaW4oYWJzKGRpci54KSwgYWJzKGRpci55KSkgKyBkaXJSZWR1Y2UpO1xcbiAgICBkaXIgPSBtaW4odmVjMihGWEFBX1NQQU5fTUFYLCBGWEFBX1NQQU5fTUFYKSxcXG4gICAgICAgICAgICAgIG1heCh2ZWMyKC1GWEFBX1NQQU5fTUFYLCAtRlhBQV9TUEFOX01BWCksXFxuICAgICAgICAgICAgICBkaXIgKiByY3BEaXJNaW4pKSAqIGludmVyc2VWUDtcXG5cXG4gICAgdmVjMyByZ2JBID0gMC41ICogKFxcbiAgICAgICAgdGV4dHVyZTJEKHRleCwgZnJhZ0Nvb3JkICogaW52ZXJzZVZQICsgZGlyICogKDEuMCAvIDMuMCAtIDAuNSkpLnh5eiArXFxuICAgICAgICB0ZXh0dXJlMkQodGV4LCBmcmFnQ29vcmQgKiBpbnZlcnNlVlAgKyBkaXIgKiAoMi4wIC8gMy4wIC0gMC41KSkueHl6KTtcXG4gICAgdmVjMyByZ2JCID0gcmdiQSAqIDAuNSArIDAuMjUgKiAoXFxuICAgICAgICB0ZXh0dXJlMkQodGV4LCBmcmFnQ29vcmQgKiBpbnZlcnNlVlAgKyBkaXIgKiAtMC41KS54eXogK1xcbiAgICAgICAgdGV4dHVyZTJEKHRleCwgZnJhZ0Nvb3JkICogaW52ZXJzZVZQICsgZGlyICogMC41KS54eXopO1xcblxcbiAgICBmbG9hdCBsdW1hQiA9IGRvdChyZ2JCLCBsdW1hKTtcXG4gICAgaWYgKChsdW1hQiA8IGx1bWFNaW4pIHx8IChsdW1hQiA+IGx1bWFNYXgpKVxcbiAgICAgICAgY29sb3IgPSB2ZWM0KHJnYkEsIHRleENvbG9yLmEpO1xcbiAgICBlbHNlXFxuICAgICAgICBjb2xvciA9IHZlYzQocmdiQiwgdGV4Q29sb3IuYSk7XFxuICAgIHJldHVybiBjb2xvcjtcXG59XFxuXFxuXFxudmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7XFxudmFyeWluZyB2ZWM0IHZDb2xvcjtcXG52YXJ5aW5nIHZlYzIgdlJlc29sdXRpb247XFxuXFxuLy90ZXhjb29yZHMgY29tcHV0ZWQgaW4gdmVydGV4IHN0ZXBcXG4vL3RvIGF2b2lkIGRlcGVuZGVudCB0ZXh0dXJlIHJlYWRzXFxudmFyeWluZyB2ZWMyIHZfcmdiTlc7XFxudmFyeWluZyB2ZWMyIHZfcmdiTkU7XFxudmFyeWluZyB2ZWMyIHZfcmdiU1c7XFxudmFyeWluZyB2ZWMyIHZfcmdiU0U7XFxudmFyeWluZyB2ZWMyIHZfcmdiTTtcXG5cXG51bmlmb3JtIHNhbXBsZXIyRCB1U2FtcGxlcjtcXG5cXG5cXG52b2lkIG1haW4odm9pZCl7XFxuXFxuICAgIGdsX0ZyYWdDb2xvciA9IGZ4YWEodVNhbXBsZXIsIHZUZXh0dXJlQ29vcmQgKiB2UmVzb2x1dGlvbiwgdlJlc29sdXRpb24sIHZfcmdiTlcsIHZfcmdiTkUsIHZfcmdiU1csIHZfcmdiU0UsIHZfcmdiTSk7XFxuXFxufVxcblwiLFxuICAgICAgICAvLyB1bmlmb3Jtc1xuICAgICAgICB7XG4gICAgICAgICAgICByZXNvbHV0aW9uOiB7IHR5cGU6ICd2MicsIHZhbHVlOiB7IHg6IDEsIHk6IDEgfSB9XG4gICAgICAgIH1cbiAgICApO1xuXG59XG5cbkZYQUFGaWx0ZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShBYnN0cmFjdEZpbHRlci5wcm90b3R5cGUpO1xuRlhBQUZpbHRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBGWEFBRmlsdGVyO1xubW9kdWxlLmV4cG9ydHMgPSBGWEFBRmlsdGVyO1xuXG4vKipcbiAqIEFwcGxpZXMgdGhlIGZpbHRlclxuICpcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5XZWJHTFJlbmRlcmVyfSBUaGUgcmVuZGVyZXIgdG8gcmV0cmlldmUgdGhlIGZpbHRlciBmcm9tXG4gKiBAcGFyYW0gaW5wdXQge1BJWEkuUmVuZGVyVGFyZ2V0fVxuICogQHBhcmFtIG91dHB1dCB7UElYSS5SZW5kZXJUYXJnZXR9XG4gKi9cbkZYQUFGaWx0ZXIucHJvdG90eXBlLmFwcGx5RmlsdGVyID0gZnVuY3Rpb24gKHJlbmRlcmVyLCBpbnB1dCwgb3V0cHV0KVxue1xuICAgIHZhciBmaWx0ZXJNYW5hZ2VyID0gcmVuZGVyZXIuZmlsdGVyTWFuYWdlcjtcblxuICAgIHZhciBzaGFkZXIgPSB0aGlzLmdldFNoYWRlciggcmVuZGVyZXIgKTtcbiAgICAgLy8gZHJhdyB0aGUgZmlsdGVyLi4uXG4gICAgZmlsdGVyTWFuYWdlci5hcHBseUZpbHRlcihzaGFkZXIsIGlucHV0LCBvdXRwdXQpO1xufTtcbiIsInZhciBBYnN0cmFjdEZpbHRlciA9IHJlcXVpcmUoJy4vQWJzdHJhY3RGaWx0ZXInKSxcbiAgICBtYXRoID0gIHJlcXVpcmUoJy4uLy4uLy4uL21hdGgnKTtcblxuLy8gQHNlZSBodHRwczovL2dpdGh1Yi5jb20vc3Vic3RhY2svYnJmcy9pc3N1ZXMvMjVcblxuXG4vKipcbiAqIFRoZSBTcHJpdGVNYXNrRmlsdGVyIGNsYXNzXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLkFic3RyYWN0RmlsdGVyXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIHNwcml0ZSB7UElYSS5TcHJpdGV9IHRoZSB0YXJnZXQgc3ByaXRlXG4gKi9cbmZ1bmN0aW9uIFNwcml0ZU1hc2tGaWx0ZXIoc3ByaXRlKVxue1xuICAgIHZhciBtYXNrTWF0cml4ID0gbmV3IG1hdGguTWF0cml4KCk7XG5cbiAgICBBYnN0cmFjdEZpbHRlci5jYWxsKHRoaXMsXG4gICAgICAgIFwiYXR0cmlidXRlIHZlYzIgYVZlcnRleFBvc2l0aW9uO1xcbmF0dHJpYnV0ZSB2ZWMyIGFUZXh0dXJlQ29vcmQ7XFxuYXR0cmlidXRlIHZlYzQgYUNvbG9yO1xcblxcbnVuaWZvcm0gbWF0MyBwcm9qZWN0aW9uTWF0cml4O1xcbnVuaWZvcm0gbWF0MyBvdGhlck1hdHJpeDtcXG5cXG52YXJ5aW5nIHZlYzIgdk1hc2tDb29yZDtcXG52YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDtcXG52YXJ5aW5nIHZlYzQgdkNvbG9yO1xcblxcbnZvaWQgbWFpbih2b2lkKVxcbntcXG4gICAgZ2xfUG9zaXRpb24gPSB2ZWM0KChwcm9qZWN0aW9uTWF0cml4ICogdmVjMyhhVmVydGV4UG9zaXRpb24sIDEuMCkpLnh5LCAwLjAsIDEuMCk7XFxuICAgIHZUZXh0dXJlQ29vcmQgPSBhVGV4dHVyZUNvb3JkO1xcbiAgICB2TWFza0Nvb3JkID0gKCBvdGhlck1hdHJpeCAqIHZlYzMoIGFUZXh0dXJlQ29vcmQsIDEuMCkgICkueHk7XFxuICAgIHZDb2xvciA9IHZlYzQoYUNvbG9yLnJnYiAqIGFDb2xvci5hLCBhQ29sb3IuYSk7XFxufVxcblwiLFxuICAgICAgICBcInByZWNpc2lvbiBsb3dwIGZsb2F0O1xcblxcbnZhcnlpbmcgdmVjMiB2TWFza0Nvb3JkO1xcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xcbnZhcnlpbmcgdmVjNCB2Q29sb3I7XFxuXFxudW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXI7XFxudW5pZm9ybSBmbG9hdCBhbHBoYTtcXG51bmlmb3JtIHNhbXBsZXIyRCBtYXNrO1xcblxcbnZvaWQgbWFpbih2b2lkKVxcbntcXG4gICAgLy8gY2hlY2sgY2xpcCEgdGhpcyB3aWxsIHN0b3AgdGhlIG1hc2sgYmxlZWRpbmcgb3V0IGZyb20gdGhlIGVkZ2VzXFxuICAgIHZlYzIgdGV4dCA9IGFicyggdk1hc2tDb29yZCAtIDAuNSApO1xcbiAgICB0ZXh0ID0gc3RlcCgwLjUsIHRleHQpO1xcbiAgICBmbG9hdCBjbGlwID0gMS4wIC0gbWF4KHRleHQueSwgdGV4dC54KTtcXG4gICAgdmVjNCBvcmlnaW5hbCA9IHRleHR1cmUyRCh1U2FtcGxlciwgdlRleHR1cmVDb29yZCk7XFxuICAgIHZlYzQgbWFza3kgPSB0ZXh0dXJlMkQobWFzaywgdk1hc2tDb29yZCk7XFxuICAgIG9yaWdpbmFsICo9IChtYXNreS5yICogbWFza3kuYSAqIGFscGhhICogY2xpcCk7XFxuICAgIGdsX0ZyYWdDb2xvciA9IG9yaWdpbmFsO1xcbn1cXG5cIixcbiAgICAgICAge1xuICAgICAgICAgICAgbWFzazogICAgICAgICAgIHsgdHlwZTogJ3NhbXBsZXIyRCcsIHZhbHVlOiBzcHJpdGUuX3RleHR1cmUgfSxcbiAgICAgICAgICAgIGFscGhhOiAgICAgICAgICB7IHR5cGU6ICdmJywgdmFsdWU6IDF9LFxuICAgICAgICAgICAgb3RoZXJNYXRyaXg6ICAgIHsgdHlwZTogJ21hdDMnLCB2YWx1ZTogbWFza01hdHJpeC50b0FycmF5KHRydWUpIH1cbiAgICAgICAgfVxuICAgICk7XG5cbiAgICB0aGlzLm1hc2tTcHJpdGUgPSBzcHJpdGU7XG4gICAgdGhpcy5tYXNrTWF0cml4ID0gbWFza01hdHJpeDtcbn1cblxuU3ByaXRlTWFza0ZpbHRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKEFic3RyYWN0RmlsdGVyLnByb3RvdHlwZSk7XG5TcHJpdGVNYXNrRmlsdGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFNwcml0ZU1hc2tGaWx0ZXI7XG5tb2R1bGUuZXhwb3J0cyA9IFNwcml0ZU1hc2tGaWx0ZXI7XG5cbi8qKlxuICogQXBwbGllcyB0aGUgZmlsdGVyXG4gKlxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLldlYkdMUmVuZGVyZXJ9IFRoZSByZW5kZXJlciB0byByZXRyaWV2ZSB0aGUgZmlsdGVyIGZyb21cbiAqIEBwYXJhbSBpbnB1dCB7UElYSS5SZW5kZXJUYXJnZXR9XG4gKiBAcGFyYW0gb3V0cHV0IHtQSVhJLlJlbmRlclRhcmdldH1cbiAqL1xuU3ByaXRlTWFza0ZpbHRlci5wcm90b3R5cGUuYXBwbHlGaWx0ZXIgPSBmdW5jdGlvbiAocmVuZGVyZXIsIGlucHV0LCBvdXRwdXQpXG57XG4gICAgdmFyIGZpbHRlck1hbmFnZXIgPSByZW5kZXJlci5maWx0ZXJNYW5hZ2VyO1xuXG4gICAgdGhpcy51bmlmb3Jtcy5tYXNrLnZhbHVlID0gdGhpcy5tYXNrU3ByaXRlLl90ZXh0dXJlO1xuXG4gICAgZmlsdGVyTWFuYWdlci5jYWxjdWxhdGVNYXBwZWRNYXRyaXgoaW5wdXQuZnJhbWUsIHRoaXMubWFza1Nwcml0ZSwgdGhpcy5tYXNrTWF0cml4KTtcblxuICAgIHRoaXMudW5pZm9ybXMub3RoZXJNYXRyaXgudmFsdWUgPSB0aGlzLm1hc2tNYXRyaXgudG9BcnJheSh0cnVlKTtcbiAgICB0aGlzLnVuaWZvcm1zLmFscGhhLnZhbHVlID0gdGhpcy5tYXNrU3ByaXRlLndvcmxkQWxwaGE7XG5cbiAgICB2YXIgc2hhZGVyID0gdGhpcy5nZXRTaGFkZXIocmVuZGVyZXIpO1xuICAgICAvLyBkcmF3IHRoZSBmaWx0ZXIuLi5cbiAgICBmaWx0ZXJNYW5hZ2VyLmFwcGx5RmlsdGVyKHNoYWRlciwgaW5wdXQsIG91dHB1dCk7XG59O1xuXG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKFNwcml0ZU1hc2tGaWx0ZXIucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogVGhlIHRleHR1cmUgdXNlZCBmb3IgdGhlIGRpc3BsYWNlbWVudCBtYXAuIE11c3QgYmUgcG93ZXIgb2YgMiBzaXplZCB0ZXh0dXJlLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5UZXh0dXJlfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLlNwcml0ZU1hc2tGaWx0ZXIjXG4gICAgICovXG4gICAgbWFwOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudW5pZm9ybXMubWFzay52YWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudW5pZm9ybXMubWFzay52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFRoZSBvZmZzZXQgdXNlZCB0byBtb3ZlIHRoZSBkaXNwbGFjZW1lbnQgbWFwLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5Qb2ludH1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5TcHJpdGVNYXNrRmlsdGVyI1xuICAgICAqL1xuICAgIG9mZnNldDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudW5pZm9ybXMub2Zmc2V0LnZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLm9mZnNldC52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfVxufSk7XG4iLCJ2YXIgV2ViR0xNYW5hZ2VyID0gcmVxdWlyZSgnLi9XZWJHTE1hbmFnZXInKTtcblxuLyoqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAZXh0ZW5kcyBQSVhJLldlYkdsTWFuYWdlclxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLldlYkdMUmVuZGVyZXJ9IFRoZSByZW5kZXJlciB0aGlzIG1hbmFnZXIgd29ya3MgZm9yLlxuICovXG5mdW5jdGlvbiBCbGVuZE1vZGVNYW5hZ2VyKHJlbmRlcmVyKVxue1xuICAgIFdlYkdMTWFuYWdlci5jYWxsKHRoaXMsIHJlbmRlcmVyKTtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLmN1cnJlbnRCbGVuZE1vZGUgPSA5OTk5OTtcbn1cblxuQmxlbmRNb2RlTWFuYWdlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFdlYkdMTWFuYWdlci5wcm90b3R5cGUpO1xuQmxlbmRNb2RlTWFuYWdlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBCbGVuZE1vZGVNYW5hZ2VyO1xubW9kdWxlLmV4cG9ydHMgPSBCbGVuZE1vZGVNYW5hZ2VyO1xuXG4vKipcbiAqIFNldHMtdXAgdGhlIGdpdmVuIGJsZW5kTW9kZSBmcm9tIFdlYkdMJ3MgcG9pbnQgb2Ygdmlldy5cbiAqXG4gKiBAcGFyYW0gYmxlbmRNb2RlIHtudW1iZXJ9IHRoZSBibGVuZE1vZGUsIHNob3VsZCBiZSBhIFBpeGkgY29uc3QsIHN1Y2ggYXMgYFBJWEkuQkxFTkRfTU9ERVMuQUREYC4gU2VlXG4gKiAge0BsaW5rIFBJWEkuQkxFTkRfTU9ERVN9IGZvciBwb3NzaWJsZSB2YWx1ZXMuXG4gKi9cbkJsZW5kTW9kZU1hbmFnZXIucHJvdG90eXBlLnNldEJsZW5kTW9kZSA9IGZ1bmN0aW9uIChibGVuZE1vZGUpXG57XG4gICAgaWYgKHRoaXMuY3VycmVudEJsZW5kTW9kZSA9PT0gYmxlbmRNb2RlKVxuICAgIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHRoaXMuY3VycmVudEJsZW5kTW9kZSA9IGJsZW5kTW9kZTtcblxuICAgIHZhciBtb2RlID0gdGhpcy5yZW5kZXJlci5ibGVuZE1vZGVzW3RoaXMuY3VycmVudEJsZW5kTW9kZV07XG4gICAgdGhpcy5yZW5kZXJlci5nbC5ibGVuZEZ1bmMobW9kZVswXSwgbW9kZVsxXSk7XG5cbiAgICByZXR1cm4gdHJ1ZTtcbn07XG4iLCJ2YXIgV2ViR0xNYW5hZ2VyID0gcmVxdWlyZSgnLi9XZWJHTE1hbmFnZXInKSxcbiAgICBSZW5kZXJUYXJnZXQgPSByZXF1aXJlKCcuLi91dGlscy9SZW5kZXJUYXJnZXQnKSxcbiAgICBDT05TVCA9IHJlcXVpcmUoJy4uLy4uLy4uL2NvbnN0JyksXG4gICAgUXVhZCA9IHJlcXVpcmUoJy4uL3V0aWxzL1F1YWQnKSxcbiAgICBtYXRoID0gIHJlcXVpcmUoJy4uLy4uLy4uL21hdGgnKTtcblxuLyoqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAZXh0ZW5kcyBQSVhJLldlYkdMTWFuYWdlclxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLldlYkdMUmVuZGVyZXJ9IFRoZSByZW5kZXJlciB0aGlzIG1hbmFnZXIgd29ya3MgZm9yLlxuICovXG5mdW5jdGlvbiBGaWx0ZXJNYW5hZ2VyKHJlbmRlcmVyKVxue1xuICAgIFdlYkdMTWFuYWdlci5jYWxsKHRoaXMsIHJlbmRlcmVyKTtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge29iamVjdFtdfVxuICAgICAqL1xuICAgIHRoaXMuZmlsdGVyU3RhY2sgPSBbXTtcblxuICAgIHRoaXMuZmlsdGVyU3RhY2sucHVzaCh7XG4gICAgICAgIHJlbmRlclRhcmdldDpyZW5kZXJlci5jdXJyZW50UmVuZGVyVGFyZ2V0LFxuICAgICAgICBmaWx0ZXI6W10sXG4gICAgICAgIGJvdW5kczpudWxsXG4gICAgfSk7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlJlbmRlclRhcmdldFtdfVxuICAgICAqL1xuICAgIHRoaXMudGV4dHVyZVBvb2wgPSBbXTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBzaXplIG9mIHRoZSB0ZXh0dXJlXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlJlY3RhbmdsZX1cbiAgICAgKi9cbiAgICAvLyBsaXN0ZW4gZm9yIGNvbnRleHQgYW5kIHVwZGF0ZSBuZWNlc3NhcnkgYnVmZmVyc1xuICAgIC8vVE9ETyBtYWtlIHRoaXMgZHluYW1pYyFcbiAgICAvL1RPRE8gdGVzdCB0aGlzIG91dCBieSBmb3JjZXMgcG93ZXIgb2YgdHdvP1xuICAgIHRoaXMudGV4dHVyZVNpemUgPSBuZXcgbWF0aC5SZWN0YW5nbGUoMCwgMCwgcmVuZGVyZXIud2lkdGgsIHJlbmRlcmVyLmhlaWdodCk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgY3VycmVudCBmcmFtZVxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5SZWN0YW5nbGV9XG4gICAgICovXG4gICAgdGhpcy5jdXJyZW50RnJhbWUgPSBudWxsO1xufVxuXG5GaWx0ZXJNYW5hZ2VyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoV2ViR0xNYW5hZ2VyLnByb3RvdHlwZSk7XG5GaWx0ZXJNYW5hZ2VyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IEZpbHRlck1hbmFnZXI7XG5tb2R1bGUuZXhwb3J0cyA9IEZpbHRlck1hbmFnZXI7XG5cblxuLyoqXG4gKiBDYWxsZWQgd2hlbiB0aGVyZSBpcyBhIFdlYkdMIGNvbnRleHQgY2hhbmdlLlxuICpcbiAqL1xuRmlsdGVyTWFuYWdlci5wcm90b3R5cGUub25Db250ZXh0Q2hhbmdlID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLnRleHR1cmVQb29sLmxlbmd0aCA9IDA7XG5cbiAgICB2YXIgZ2wgPSB0aGlzLnJlbmRlcmVyLmdsO1xuICAgIHRoaXMucXVhZCA9IG5ldyBRdWFkKGdsKTtcbn07XG5cbi8qKlxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLldlYkdMUmVuZGVyZXJ9XG4gKiBAcGFyYW0gYnVmZmVyIHtBcnJheUJ1ZmZlcn1cbiAqL1xuRmlsdGVyTWFuYWdlci5wcm90b3R5cGUuc2V0RmlsdGVyU3RhY2sgPSBmdW5jdGlvbiAoIGZpbHRlclN0YWNrIClcbntcbiAgICB0aGlzLmZpbHRlclN0YWNrID0gZmlsdGVyU3RhY2s7XG59O1xuXG4vKipcbiAqIEFwcGxpZXMgdGhlIGZpbHRlciBhbmQgYWRkcyBpdCB0byB0aGUgY3VycmVudCBmaWx0ZXIgc3RhY2suXG4gKlxuICogQHBhcmFtIHRhcmdldCB7UElYSS5EaXNwbGF5T2JqZWN0fVxuICogQHBhcmFtIGZpbHRlcnMge1BJWEkuQWJzdHJhY3RGaWxlcltdfSB0aGUgZmlsdGVycyB0aGF0IHdpbGwgYmUgcHVzaGVkIHRvIHRoZSBjdXJyZW50IGZpbHRlciBzdGFja1xuICovXG5GaWx0ZXJNYW5hZ2VyLnByb3RvdHlwZS5wdXNoRmlsdGVyID0gZnVuY3Rpb24gKHRhcmdldCwgZmlsdGVycylcbntcbiAgICAvLyBnZXQgdGhlIGJvdW5kcyBvZiB0aGUgb2JqZWN0Li5cbiAgICAvLyBUT0RPIHJlcGxhY2UgY2xvbmUgd2l0aCBhIGNvcHkgdG8gc2F2ZSBvYmplY3QgY3JlYXRpb25cbiAgICB2YXIgYm91bmRzID0gdGFyZ2V0LmZpbHRlckFyZWEgPyB0YXJnZXQuZmlsdGVyQXJlYS5jbG9uZSgpIDogdGFyZ2V0LmdldEJvdW5kcygpO1xuXG4gICAgLy9ib3VuZHMgPSBib3VuZHMuY2xvbmUoKTtcblxuICAgIC8vIHJvdW5kIG9mZiB0aGUgcmVjdGFuZ2xlIHRvIGdldCBhIG5pY2Ugc21vb29vb29vdGggZmlsdGVyIDopXG4gICAgYm91bmRzLnggPSBib3VuZHMueCB8IDA7XG4gICAgYm91bmRzLnkgPSBib3VuZHMueSB8IDA7XG4gICAgYm91bmRzLndpZHRoID0gYm91bmRzLndpZHRoIHwgMDtcbiAgICBib3VuZHMuaGVpZ2h0ID0gYm91bmRzLmhlaWdodCB8IDA7XG5cblxuICAgIC8vIHBhZGRpbmchXG4gICAgdmFyIHBhZGRpbmcgPSBmaWx0ZXJzWzBdLnBhZGRpbmcgfCAwO1xuICAgIGJvdW5kcy54IC09IHBhZGRpbmc7XG4gICAgYm91bmRzLnkgLT0gcGFkZGluZztcbiAgICBib3VuZHMud2lkdGggKz0gcGFkZGluZyAqIDI7XG4gICAgYm91bmRzLmhlaWdodCArPSBwYWRkaW5nICogMjtcblxuXG4gICAgaWYodGhpcy5yZW5kZXJlci5jdXJyZW50UmVuZGVyVGFyZ2V0LnRyYW5zZm9ybSlcbiAgICB7XG4gICAgICAgIC8vVE9ETyB0aGlzIHdpbGwgYnJlYWsgaWYgdGhlIHJlbmRlclRleHR1cmUgdHJhbnNmb3JtIGlzIGFueXRoaW5nIG90aGVyIHRoYW4gYSB0cmFuc2xhdGlvbi5cbiAgICAgICAgLy9XaWxsIG5lZWQgdG8gdGFrZSB0aGUgZnVsbCBtYXRyaXggdHJhbnNmb3JtIGludG8gYWNvdW50Li5cbiAgICAgICAgdmFyIHRyYW5zZm9ybSA9IHRoaXMucmVuZGVyZXIuY3VycmVudFJlbmRlclRhcmdldC50cmFuc2Zvcm07XG5cbiAgICAgICAgYm91bmRzLnggKz0gdHJhbnNmb3JtLnR4O1xuICAgICAgICBib3VuZHMueSArPSB0cmFuc2Zvcm0udHk7XG5cbiAgICAgICAgdGhpcy5jYXBGaWx0ZXJBcmVhKCBib3VuZHMgKTtcblxuICAgICAgICBib3VuZHMueCAtPSB0cmFuc2Zvcm0udHg7XG4gICAgICAgIGJvdW5kcy55IC09IHRyYW5zZm9ybS50eTtcbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgIHRoaXMuY2FwRmlsdGVyQXJlYSggYm91bmRzICk7XG4gICAgfVxuXG4gICAgaWYoYm91bmRzLndpZHRoID4gMCAmJiBib3VuZHMuaGVpZ2h0ID4gMClcbiAgICB7XG4gICAgICAgIHRoaXMuY3VycmVudEZyYW1lID0gYm91bmRzO1xuXG4gICAgICAgIHZhciB0ZXh0dXJlID0gdGhpcy5nZXRSZW5kZXJUYXJnZXQoKTtcblxuICAgICAgICB0aGlzLnJlbmRlcmVyLnNldFJlbmRlclRhcmdldCh0ZXh0dXJlKTtcblxuICAgICAgICAvLyBjbGVhciB0aGUgdGV4dHVyZS4uXG4gICAgICAgIHRleHR1cmUuY2xlYXIoKTtcblxuICAgICAgICAvLyBUT0RPIGdldCByaWQgb2Ygb2JqZWN0IGNyZWF0aW9uIVxuICAgICAgICB0aGlzLmZpbHRlclN0YWNrLnB1c2goe1xuICAgICAgICAgICAgcmVuZGVyVGFyZ2V0OiB0ZXh0dXJlLFxuICAgICAgICAgICAgZmlsdGVyOiBmaWx0ZXJzXG4gICAgICAgIH0pO1xuXG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIC8vIHB1c2ggc29tdGhpbmcgb24gdG8gdGhlIHN0YWNrIHRoYXQgaXMgZW1wdHlcbiAgICAgICAgdGhpcy5maWx0ZXJTdGFjay5wdXNoKHtcbiAgICAgICAgICAgIHJlbmRlclRhcmdldDogbnVsbCxcbiAgICAgICAgICAgIGZpbHRlcjogZmlsdGVyc1xuICAgICAgICB9KTtcbiAgICB9XG59O1xuXG5cbi8qKlxuICogUmVtb3ZlcyB0aGUgbGFzdCBmaWx0ZXIgZnJvbSB0aGUgZmlsdGVyIHN0YWNrIGFuZCByZXR1cm5zIGl0LlxuICpcbiAqL1xuRmlsdGVyTWFuYWdlci5wcm90b3R5cGUucG9wRmlsdGVyID0gZnVuY3Rpb24gKClcbntcbiAgICB2YXIgZmlsdGVyRGF0YSA9IHRoaXMuZmlsdGVyU3RhY2sucG9wKCk7XG4gICAgdmFyIHByZXZpb3VzRmlsdGVyRGF0YSA9IHRoaXMuZmlsdGVyU3RhY2tbdGhpcy5maWx0ZXJTdGFjay5sZW5ndGgtMV07XG5cbiAgICB2YXIgaW5wdXQgPSBmaWx0ZXJEYXRhLnJlbmRlclRhcmdldDtcblxuICAgIC8vIGlmIHRoZSByZW5kZXJUYXJnZXQgaXMgbnVsbCB0aGVuIHdlIGRvbid0IGFwcGx5IHRoZSBmaWx0ZXIgYXMgaXRzIG9mZnNjcmVlblxuICAgIGlmKCFmaWx0ZXJEYXRhLnJlbmRlclRhcmdldClcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB2YXIgb3V0cHV0ID0gcHJldmlvdXNGaWx0ZXJEYXRhLnJlbmRlclRhcmdldDtcblxuICAgIC8vIHVzZSBwcm9ncmFtXG4gICAgdmFyIGdsID0gdGhpcy5yZW5kZXJlci5nbDtcblxuXG4gICAgdGhpcy5jdXJyZW50RnJhbWUgPSBpbnB1dC5mcmFtZTtcblxuICAgIHRoaXMucXVhZC5tYXAodGhpcy50ZXh0dXJlU2l6ZSwgaW5wdXQuZnJhbWUpO1xuXG5cbiAgICAvLyBUT0RPLi4gdGhpcyBwcm9iYWJseSBvbmx5IG5lZWRzIHRvIGJlIGRvbmUgb25jZSFcbiAgICBnbC5iaW5kQnVmZmVyKGdsLkFSUkFZX0JVRkZFUiwgdGhpcy5xdWFkLnZlcnRleEJ1ZmZlcik7XG4gICAgZ2wuYmluZEJ1ZmZlcihnbC5FTEVNRU5UX0FSUkFZX0JVRkZFUiwgdGhpcy5xdWFkLmluZGV4QnVmZmVyKTtcblxuICAgIHZhciBmaWx0ZXJzID0gZmlsdGVyRGF0YS5maWx0ZXI7XG5cbiAgICAvLyBhc3N1bWluZyBhbGwgZmlsdGVycyBmb2xsb3cgdGhlIGNvcnJlY3QgZm9ybWF0Pz9cbiAgICBnbC52ZXJ0ZXhBdHRyaWJQb2ludGVyKHRoaXMucmVuZGVyZXIuc2hhZGVyTWFuYWdlci5kZWZhdWx0U2hhZGVyLmF0dHJpYnV0ZXMuYVZlcnRleFBvc2l0aW9uLCAyLCBnbC5GTE9BVCwgZmFsc2UsIDAsIDApO1xuICAgIGdsLnZlcnRleEF0dHJpYlBvaW50ZXIodGhpcy5yZW5kZXJlci5zaGFkZXJNYW5hZ2VyLmRlZmF1bHRTaGFkZXIuYXR0cmlidXRlcy5hVGV4dHVyZUNvb3JkLCAyLCBnbC5GTE9BVCwgZmFsc2UsIDAsIDIgKiA0ICogNCk7XG4gICAgZ2wudmVydGV4QXR0cmliUG9pbnRlcih0aGlzLnJlbmRlcmVyLnNoYWRlck1hbmFnZXIuZGVmYXVsdFNoYWRlci5hdHRyaWJ1dGVzLmFDb2xvciwgNCwgZ2wuRkxPQVQsIGZhbHNlLCAwLCA0ICogNCAqIDQpO1xuXG4gICAgLy8gcmVzdG9yZSB0aGUgbm9ybWFsIGJsZW5kbW9kZSFcbiAgICB0aGlzLnJlbmRlcmVyLmJsZW5kTW9kZU1hbmFnZXIuc2V0QmxlbmRNb2RlKENPTlNULkJMRU5EX01PREVTLk5PUk1BTCk7XG5cbiAgICBpZiAoZmlsdGVycy5sZW5ndGggPT09IDEpXG4gICAge1xuICAgICAgICAvLyBUT0RPIChjZW5nbGVyKSAtIFRoZXJlIGhhcyB0byBiZSBhIGJldHRlciB3YXkgdGhlbiBzZXR0aW5nIHRoaXMgZWFjaCB0aW1lP1xuICAgICAgICBpZiAoZmlsdGVyc1swXS51bmlmb3Jtcy5kaW1lbnNpb25zKVxuICAgICAgICB7XG4gICAgICAgICAgICBmaWx0ZXJzWzBdLnVuaWZvcm1zLmRpbWVuc2lvbnMudmFsdWVbMF0gPSB0aGlzLnJlbmRlcmVyLndpZHRoO1xuICAgICAgICAgICAgZmlsdGVyc1swXS51bmlmb3Jtcy5kaW1lbnNpb25zLnZhbHVlWzFdID0gdGhpcy5yZW5kZXJlci5oZWlnaHQ7XG4gICAgICAgICAgICBmaWx0ZXJzWzBdLnVuaWZvcm1zLmRpbWVuc2lvbnMudmFsdWVbMl0gPSB0aGlzLnF1YWQudmVydGljZXNbMF07XG4gICAgICAgICAgICBmaWx0ZXJzWzBdLnVuaWZvcm1zLmRpbWVuc2lvbnMudmFsdWVbM10gPSB0aGlzLnF1YWQudmVydGljZXNbNV07XG4gICAgICAgIH1cblxuICAgICAgICBmaWx0ZXJzWzBdLmFwcGx5RmlsdGVyKCB0aGlzLnJlbmRlcmVyLCBpbnB1dCwgb3V0cHV0ICk7XG4gICAgICAgIHRoaXMucmV0dXJuUmVuZGVyVGFyZ2V0KCBpbnB1dCApO1xuXG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHZhciBmbGlwVGV4dHVyZSA9IGlucHV0O1xuICAgICAgICB2YXIgZmxvcFRleHR1cmUgPSB0aGlzLmdldFJlbmRlclRhcmdldCh0cnVlKTtcblxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGZpbHRlcnMubGVuZ3RoLTE7IGkrKylcbiAgICAgICAge1xuICAgICAgICAgICAgdmFyIGZpbHRlciA9IGZpbHRlcnNbaV07XG5cbiAgICAgICAgICAgIC8vIFRPRE8gKGNlbmdsZXIpIC0gVGhlcmUgaGFzIHRvIGJlIGEgYmV0dGVyIHdheSB0aGVuIHNldHRpbmcgdGhpcyBlYWNoIHRpbWU/XG4gICAgICAgICAgICBpZiAoZmlsdGVyLnVuaWZvcm1zLmRpbWVuc2lvbnMpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgZmlsdGVyLnVuaWZvcm1zLmRpbWVuc2lvbnMudmFsdWVbMF0gPSB0aGlzLnJlbmRlcmVyLndpZHRoO1xuICAgICAgICAgICAgICAgIGZpbHRlci51bmlmb3Jtcy5kaW1lbnNpb25zLnZhbHVlWzFdID0gdGhpcy5yZW5kZXJlci5oZWlnaHQ7XG4gICAgICAgICAgICAgICAgZmlsdGVyLnVuaWZvcm1zLmRpbWVuc2lvbnMudmFsdWVbMl0gPSB0aGlzLnF1YWQudmVydGljZXNbMF07XG4gICAgICAgICAgICAgICAgZmlsdGVyLnVuaWZvcm1zLmRpbWVuc2lvbnMudmFsdWVbM10gPSB0aGlzLnF1YWQudmVydGljZXNbNV07XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGZpbHRlci5hcHBseUZpbHRlciggdGhpcy5yZW5kZXJlciwgZmxpcFRleHR1cmUsIGZsb3BUZXh0dXJlICk7XG5cbiAgICAgICAgICAgIHZhciB0ZW1wID0gZmxpcFRleHR1cmU7XG4gICAgICAgICAgICBmbGlwVGV4dHVyZSA9IGZsb3BUZXh0dXJlO1xuICAgICAgICAgICAgZmxvcFRleHR1cmUgPSB0ZW1wO1xuICAgICAgICB9XG5cbiAgICAgICAgZmlsdGVyc1tmaWx0ZXJzLmxlbmd0aC0xXS5hcHBseUZpbHRlciggdGhpcy5yZW5kZXJlciwgZmxpcFRleHR1cmUsIG91dHB1dCApO1xuXG4gICAgICAgIHRoaXMucmV0dXJuUmVuZGVyVGFyZ2V0KCBmbGlwVGV4dHVyZSApO1xuICAgICAgICB0aGlzLnJldHVyblJlbmRlclRhcmdldCggZmxvcFRleHR1cmUgKTtcbiAgICB9XG5cbiAgICByZXR1cm4gZmlsdGVyRGF0YS5maWx0ZXI7XG59O1xuXG4vKipcbiAqIEdyYWJzIGFuIHJlbmRlciB0YXJnZXQgZnJvbSB0aGUgaW50ZXJuYWwgcG9vbFxuICpcbiAqIEBwYXJhbSBjbGVhciB7Ym9vbGVhbn0gV2hldGhlciBvciBub3Qgd2UgbmVlZCB0byBjbGVhciB0aGUgUmVuZGVyVGFyZ2V0XG4gKiBAcmV0dXJuIHtSZW5kZXJUYXJnZXR9XG4gKi9cbkZpbHRlck1hbmFnZXIucHJvdG90eXBlLmdldFJlbmRlclRhcmdldCA9IGZ1bmN0aW9uICggY2xlYXIgKVxue1xuICAgIHZhciByZW5kZXJUYXJnZXQgPSB0aGlzLnRleHR1cmVQb29sLnBvcCgpIHx8IG5ldyBSZW5kZXJUYXJnZXQodGhpcy5yZW5kZXJlci5nbCwgdGhpcy50ZXh0dXJlU2l6ZS53aWR0aCwgdGhpcy50ZXh0dXJlU2l6ZS5oZWlnaHQsIENPTlNULlNDQUxFX01PREVTLkxJTkVBUiwgdGhpcy5yZW5kZXJlci5yZXNvbHV0aW9uICogQ09OU1QuRklMVEVSX1JFU09MVVRJT04pO1xuICAgIHJlbmRlclRhcmdldC5mcmFtZSA9IHRoaXMuY3VycmVudEZyYW1lO1xuXG4gICAgaWYgKGNsZWFyKVxuICAgIHtcbiAgICAgICAgcmVuZGVyVGFyZ2V0LmNsZWFyKHRydWUpO1xuICAgIH1cblxuICAgIHJldHVybiByZW5kZXJUYXJnZXQ7XG59O1xuXG4vKlxuICogUmV0dXJucyBhIFJlbmRlclRhcmdldCB0byB0aGUgaW50ZXJuYWwgcG9vbFxuICogQHBhcmFtIHJlbmRlclRhcmdldCB7UmVuZGVyVGFyZ2V0fSBUaGUgUmVuZGVyVGFyZ2V0IHdlIHdhbnQgdG8gcmV0dXJuIHRvIHRoZSBwb29sXG4gKi9cbkZpbHRlck1hbmFnZXIucHJvdG90eXBlLnJldHVyblJlbmRlclRhcmdldCA9IGZ1bmN0aW9uIChyZW5kZXJUYXJnZXQpXG57XG4gICAgdGhpcy50ZXh0dXJlUG9vbC5wdXNoKCByZW5kZXJUYXJnZXQgKTtcbn07XG5cbi8qXG4gKiBBcHBsaWVzIHRoZSBmaWx0ZXJcbiAqIEBwYXJhbSBzaGFkZXIge1NoYWRlcn0gVGhlIHNoYWRlciB0byB1cGxvYWRcbiAqIEBwYXJhbSBpbnB1dFRhcmdldCB7UmVuZGVyVGFyZ2V0fVxuICogQHBhcmFtIG91dHB1dFRhcmdldCB7UmVuZGVyVGFyZ2V0fVxuICogQHBhcmFtIGNsZWFyIHtib29sZWFufSBXaGV0aGVyIG9yIG5vdCB3ZSB3YW50IHRvIGNsZWFyIHRoZSBvdXRwdXRUYXJnZXRcbiAqL1xuRmlsdGVyTWFuYWdlci5wcm90b3R5cGUuYXBwbHlGaWx0ZXIgPSBmdW5jdGlvbiAoc2hhZGVyLCBpbnB1dFRhcmdldCwgb3V0cHV0VGFyZ2V0LCBjbGVhcilcbntcbiAgICB2YXIgZ2wgPSB0aGlzLnJlbmRlcmVyLmdsO1xuXG4gICAgdGhpcy5yZW5kZXJlci5zZXRSZW5kZXJUYXJnZXQob3V0cHV0VGFyZ2V0KTtcblxuICAgIGlmIChjbGVhcilcbiAgICB7XG4gICAgICAgIG91dHB1dFRhcmdldC5jbGVhcigpO1xuICAgIH1cblxuICAgIC8vIHNldCB0aGUgc2hhZGVyXG4gICAgdGhpcy5yZW5kZXJlci5zaGFkZXJNYW5hZ2VyLnNldFNoYWRlcihzaGFkZXIpO1xuXG4gICAgLy8gVE9ETyAoY2VuZ2xlcikgLSBDYW4gdGhpcyBiZSBjYWNoZWQgYW5kIG5vdCBgdG9BcnJheWBlZCBlYWNoIGZyYW1lP1xuICAgIHNoYWRlci51bmlmb3Jtcy5wcm9qZWN0aW9uTWF0cml4LnZhbHVlID0gdGhpcy5yZW5kZXJlci5jdXJyZW50UmVuZGVyVGFyZ2V0LnByb2plY3Rpb25NYXRyaXgudG9BcnJheSh0cnVlKTtcblxuICAgIC8vVE9ETyBjYW4gdGhpcyBiZSBvcHRpbWlzZWQ/XG4gICAgc2hhZGVyLnN5bmNVbmlmb3JtcygpO1xuLypcbiAgICBnbC52ZXJ0ZXhBdHRyaWJQb2ludGVyKHNoYWRlci5hdHRyaWJ1dGVzLmFWZXJ0ZXhQb3NpdGlvbiwgMiwgZ2wuRkxPQVQsIGZhbHNlLCAwLCAwKTtcbiAgICBnbC52ZXJ0ZXhBdHRyaWJQb2ludGVyKHNoYWRlci5hdHRyaWJ1dGVzLmFUZXh0dXJlQ29vcmQsIDIsIGdsLkZMT0FULCBmYWxzZSwgMCwgMiAqIDQgKiA0KTtcbiAgICBnbC52ZXJ0ZXhBdHRyaWJQb2ludGVyKHNoYWRlci5hdHRyaWJ1dGVzLmFDb2xvciwgNCwgZ2wuRkxPQVQsIGZhbHNlLCAwLCA0ICogNCAqIDQpO1xuKi9cblxuICAgIGdsLmFjdGl2ZVRleHR1cmUoZ2wuVEVYVFVSRTApO1xuICAgIGdsLmJpbmRUZXh0dXJlKGdsLlRFWFRVUkVfMkQsIGlucHV0VGFyZ2V0LnRleHR1cmUpO1xuXG4gICAgZ2wuZHJhd0VsZW1lbnRzKGdsLlRSSUFOR0xFUywgNiwgZ2wuVU5TSUdORURfU0hPUlQsIDAgKTtcbiAgICB0aGlzLnJlbmRlcmVyLmRyYXdDb3VudCsrO1xufTtcblxuLypcbiAqIENhbGN1bGF0ZXMgdGhlIG1hcHBlZCBtYXRyaXhcbiAqIEBwYXJhbSBmaWx0ZXJBcmVhIHtSZWN0YW5nbGV9IFRoZSBmaWx0ZXIgYXJlYVxuICogQHBhcmFtIHNwcml0ZSB7U3ByaXRlfSB0aGUgdGFyZ2V0IHNwcml0ZVxuICogQHBhcmFtIG91dHB1dE1hdHJpeCB7TWF0cml4fSBAYWx2aW5cbiAqL1xuLy8gVE9ETyBwbGF5aW5nIGFyb3VuZCBoZXJlLi4gdGhpcyBpcyB0ZW1wb3JhcnkgLSAod2lsbCBlbmQgdXAgaW4gdGhlIHNoYWRlcilcbkZpbHRlck1hbmFnZXIucHJvdG90eXBlLmNhbGN1bGF0ZU1hcHBlZE1hdHJpeCA9IGZ1bmN0aW9uIChmaWx0ZXJBcmVhLCBzcHJpdGUsIG91dHB1dE1hdHJpeClcbntcbiAgICB2YXIgd29ybGRUcmFuc2Zvcm0gPSBzcHJpdGUud29ybGRUcmFuc2Zvcm0uY29weShtYXRoLk1hdHJpeC5URU1QX01BVFJJWCksXG4gICAgdGV4dHVyZSA9IHNwcml0ZS5fdGV4dHVyZS5iYXNlVGV4dHVyZTtcblxuICAgIHZhciBtYXBwZWRNYXRyaXggPSBvdXRwdXRNYXRyaXguaWRlbnRpdHkoKTtcblxuICAgIC8vIHNjYWxlLi5cbiAgICB2YXIgcmF0aW8gPSB0aGlzLnRleHR1cmVTaXplLmhlaWdodCAvIHRoaXMudGV4dHVyZVNpemUud2lkdGg7XG5cbiAgICBtYXBwZWRNYXRyaXgudHJhbnNsYXRlKGZpbHRlckFyZWEueCAvIHRoaXMudGV4dHVyZVNpemUud2lkdGgsIGZpbHRlckFyZWEueSAvIHRoaXMudGV4dHVyZVNpemUuaGVpZ2h0ICk7XG5cbiAgICBtYXBwZWRNYXRyaXguc2NhbGUoMSAsIHJhdGlvKTtcblxuICAgIHZhciB0cmFuc2xhdGVTY2FsZVggPSAodGhpcy50ZXh0dXJlU2l6ZS53aWR0aCAvIHRleHR1cmUud2lkdGgpO1xuICAgIHZhciB0cmFuc2xhdGVTY2FsZVkgPSAodGhpcy50ZXh0dXJlU2l6ZS5oZWlnaHQgLyB0ZXh0dXJlLmhlaWdodCk7XG5cbiAgICB3b3JsZFRyYW5zZm9ybS50eCAvPSB0ZXh0dXJlLndpZHRoICogdHJhbnNsYXRlU2NhbGVYO1xuICAgIHdvcmxkVHJhbnNmb3JtLnR5IC89IHRleHR1cmUud2lkdGggKiB0cmFuc2xhdGVTY2FsZVg7XG5cbiAgICB3b3JsZFRyYW5zZm9ybS5pbnZlcnQoKTtcblxuICAgIG1hcHBlZE1hdHJpeC5wcmVwZW5kKHdvcmxkVHJhbnNmb3JtKTtcblxuICAgIC8vIGFwcGx5IGludmVyc2Ugc2NhbGUuLlxuICAgIG1hcHBlZE1hdHJpeC5zY2FsZSgxICwgMS9yYXRpbyk7XG5cbiAgICBtYXBwZWRNYXRyaXguc2NhbGUoIHRyYW5zbGF0ZVNjYWxlWCAsIHRyYW5zbGF0ZVNjYWxlWSApO1xuXG4gICAgbWFwcGVkTWF0cml4LnRyYW5zbGF0ZShzcHJpdGUuYW5jaG9yLngsIHNwcml0ZS5hbmNob3IueSk7XG5cbiAgICByZXR1cm4gbWFwcGVkTWF0cml4O1xuXG4gICAgLy8gS2VlcGluZyB0aGUgb3JnaW5hbCBhcyBhIHJlbWluZGVyIHRvIG1lIG9uIGhvdyB0aGlzIHdvcmtzIVxuICAgIC8vXG4gICAgLy8gdmFyIG0gPSBuZXcgbWF0aC5NYXRyaXgoKTtcblxuICAgIC8vIC8vIHNjYWxlLi5cbiAgICAvLyB2YXIgcmF0aW8gPSB0aGlzLnRleHR1cmVTaXplLmhlaWdodCAvIHRoaXMudGV4dHVyZVNpemUud2lkdGg7XG5cbiAgICAvLyBtLnRyYW5zbGF0ZShmaWx0ZXJBcmVhLnggLyB0aGlzLnRleHR1cmVTaXplLndpZHRoLCBmaWx0ZXJBcmVhLnkgLyB0aGlzLnRleHR1cmVTaXplLmhlaWdodCk7XG5cblxuICAgIC8vIG0uc2NhbGUoMSAsIHJhdGlvKTtcblxuXG4gICAgLy8gdmFyIHRyYW5zZm9ybSA9IHd0LmNsb25lKCk7XG5cbiAgICAvLyB2YXIgdHJhbnNsYXRlU2NhbGVYID0gKHRoaXMudGV4dHVyZVNpemUud2lkdGggLyA2MjApO1xuICAgIC8vIHZhciB0cmFuc2xhdGVTY2FsZVkgPSAodGhpcy50ZXh0dXJlU2l6ZS5oZWlnaHQgLyAzODApO1xuXG4gICAgLy8gdHJhbnNmb3JtLnR4IC89IDYyMCAqIHRyYW5zbGF0ZVNjYWxlWDtcbiAgICAvLyB0cmFuc2Zvcm0udHkgLz0gNjIwICogdHJhbnNsYXRlU2NhbGVYO1xuXG4gICAgLy8gdHJhbnNmb3JtLmludmVydCgpO1xuXG4gICAgLy8gdHJhbnNmb3JtLmFwcGVuZChtKTtcblxuICAgIC8vIC8vIGFwcGx5IGludmVyc2Ugc2NhbGUuLlxuICAgIC8vIHRyYW5zZm9ybS5zY2FsZSgxICwgMS9yYXRpbyk7XG5cbiAgICAvLyB0cmFuc2Zvcm0uc2NhbGUoIHRyYW5zbGF0ZVNjYWxlWCAsIHRyYW5zbGF0ZVNjYWxlWSApO1xuXG4gICAgLy8gcmV0dXJuIHRyYW5zZm9ybTtcbn07XG5cbi8qXG4gKiBDb25zdHJhaW5zIHRoZSBmaWx0ZXIgYXJlYSB0byB0aGUgdGV4dHVyZSBzaXplXG4gKiBAcGFyYW0gZmlsdGVyQXJlYSB7UmVjdGFuZ2xlfSBUaGUgZmlsdGVyIGFyZWEgd2Ugd2FudCB0byBjYXBcbiAqL1xuRmlsdGVyTWFuYWdlci5wcm90b3R5cGUuY2FwRmlsdGVyQXJlYSA9IGZ1bmN0aW9uIChmaWx0ZXJBcmVhKVxue1xuICAgIGlmIChmaWx0ZXJBcmVhLnggPCAwKVxuICAgIHtcbiAgICAgICAgZmlsdGVyQXJlYS53aWR0aCArPSBmaWx0ZXJBcmVhLng7XG4gICAgICAgIGZpbHRlckFyZWEueCA9IDA7XG4gICAgfVxuXG4gICAgaWYgKGZpbHRlckFyZWEueSA8IDApXG4gICAge1xuICAgICAgICBmaWx0ZXJBcmVhLmhlaWdodCArPSBmaWx0ZXJBcmVhLnk7XG4gICAgICAgIGZpbHRlckFyZWEueSA9IDA7XG4gICAgfVxuXG4gICAgaWYgKCBmaWx0ZXJBcmVhLnggKyBmaWx0ZXJBcmVhLndpZHRoID4gdGhpcy50ZXh0dXJlU2l6ZS53aWR0aCApXG4gICAge1xuICAgICAgICBmaWx0ZXJBcmVhLndpZHRoID0gdGhpcy50ZXh0dXJlU2l6ZS53aWR0aCAtIGZpbHRlckFyZWEueDtcbiAgICB9XG5cbiAgICBpZiAoIGZpbHRlckFyZWEueSArIGZpbHRlckFyZWEuaGVpZ2h0ID4gdGhpcy50ZXh0dXJlU2l6ZS5oZWlnaHQgKVxuICAgIHtcbiAgICAgICAgZmlsdGVyQXJlYS5oZWlnaHQgPSB0aGlzLnRleHR1cmVTaXplLmhlaWdodCAtIGZpbHRlckFyZWEueTtcbiAgICB9XG59O1xuXG4vKlxuICogUmVzaXplcyBhbGwgdGhlIHJlbmRlciB0YXJnZXRzIGluIHRoZSBwb29sXG4gKiBAcGFyYW0gd2lkdGgge251bWJlcn0gdGhlIG5ldyB3aWR0aFxuICogQHBhcmFtIGhlaWdodCB7bnVtYmVyfSB0aGUgbmV3IGhlaWdodFxuICovXG5GaWx0ZXJNYW5hZ2VyLnByb3RvdHlwZS5yZXNpemUgPSBmdW5jdGlvbiAoIHdpZHRoLCBoZWlnaHQgKVxue1xuICAgIHRoaXMudGV4dHVyZVNpemUud2lkdGggPSB3aWR0aDtcbiAgICB0aGlzLnRleHR1cmVTaXplLmhlaWdodCA9IGhlaWdodDtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy50ZXh0dXJlUG9vbC5sZW5ndGg7IGkrKylcbiAgICB7XG4gICAgICAgIHRoaXMudGV4dHVyZVBvb2xbaV0ucmVzaXplKCB3aWR0aCwgaGVpZ2h0ICk7XG4gICAgfVxufTtcblxuLyoqXG4gKiBEZXN0cm95cyB0aGUgZmlsdGVyIGFuZCByZW1vdmVzIGl0IGZyb20gdGhlIGZpbHRlciBzdGFjay5cbiAqXG4gKi9cbkZpbHRlck1hbmFnZXIucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoKVxue1xuICAgIHRoaXMucXVhZC5kZXN0cm95KCk7XG4gICAgXG4gICAgV2ViR0xNYW5hZ2VyLnByb3RvdHlwZS5kZXN0cm95LmNhbGwodGhpcyk7XG4gICAgXG4gICAgdGhpcy5maWx0ZXJTdGFjayA9IG51bGw7XG4gICAgdGhpcy5vZmZzZXRZID0gMDtcblxuICAgIC8vIGRlc3Ryb3kgdGV4dHVyZXNcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMudGV4dHVyZVBvb2wubGVuZ3RoOyBpKyspXG4gICAge1xuICAgICAgICB0aGlzLnRleHR1cmVQb29sW2ldLmRlc3Ryb3koKTtcbiAgICB9XG5cbiAgICB0aGlzLnRleHR1cmVQb29sID0gbnVsbDtcbn07XG4iLCJ2YXIgV2ViR0xNYW5hZ2VyID0gcmVxdWlyZSgnLi9XZWJHTE1hbmFnZXInKSxcbiAgICBBbHBoYU1hc2tGaWx0ZXIgPSByZXF1aXJlKCcuLi9maWx0ZXJzL1Nwcml0ZU1hc2tGaWx0ZXInKTtcblxuLyoqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcn0gVGhlIHJlbmRlcmVyIHRoaXMgbWFuYWdlciB3b3JrcyBmb3IuXG4gKi9cbmZ1bmN0aW9uIE1hc2tNYW5hZ2VyKHJlbmRlcmVyKVxue1xuICAgIFdlYkdMTWFuYWdlci5jYWxsKHRoaXMsIHJlbmRlcmVyKTtcblxuICAgIHRoaXMuc3RlbmNpbFN0YWNrID0gW107XG4gICAgdGhpcy5yZXZlcnNlID0gdHJ1ZTtcbiAgICB0aGlzLmNvdW50ID0gMDtcblxuICAgIHRoaXMuYWxwaGFNYXNrUG9vbCA9IFtdO1xufVxuXG5NYXNrTWFuYWdlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFdlYkdMTWFuYWdlci5wcm90b3R5cGUpO1xuTWFza01hbmFnZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gTWFza01hbmFnZXI7XG5tb2R1bGUuZXhwb3J0cyA9IE1hc2tNYW5hZ2VyO1xuXG4vKipcbiAqIEFwcGxpZXMgdGhlIE1hc2sgYW5kIGFkZHMgaXQgdG8gdGhlIGN1cnJlbnQgZmlsdGVyIHN0YWNrLlxuICpcbiAqIEBwYXJhbSBncmFwaGljcyB7UElYSS5HcmFwaGljc31cbiAqIEBwYXJhbSB3ZWJHTERhdGEge2FueVtdfVxuICovXG5NYXNrTWFuYWdlci5wcm90b3R5cGUucHVzaE1hc2sgPSBmdW5jdGlvbiAodGFyZ2V0LCBtYXNrRGF0YSlcbntcbiAgICBpZiAobWFza0RhdGEudGV4dHVyZSlcbiAgICB7XG4gICAgICAgIHRoaXMucHVzaFNwcml0ZU1hc2sodGFyZ2V0LCBtYXNrRGF0YSk7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHRoaXMucHVzaFN0ZW5jaWxNYXNrKHRhcmdldCwgbWFza0RhdGEpO1xuICAgIH1cblxufTtcblxuLyoqXG4gKiBSZW1vdmVzIHRoZSBsYXN0IG1hc2sgZnJvbSB0aGUgbWFzayBzdGFjayBhbmQgZG9lc24ndCByZXR1cm4gaXQuXG4gKlxuICogQHBhcmFtIHRhcmdldCB7UElYSS5SZW5kZXJUYXJnZXR9XG4gKiBAcGFyYW0gbWFza0RhdGEge2FueVtdfVxuICovXG5NYXNrTWFuYWdlci5wcm90b3R5cGUucG9wTWFzayA9IGZ1bmN0aW9uICh0YXJnZXQsIG1hc2tEYXRhKVxue1xuICAgIGlmIChtYXNrRGF0YS50ZXh0dXJlKVxuICAgIHtcbiAgICAgICAgdGhpcy5wb3BTcHJpdGVNYXNrKHRhcmdldCwgbWFza0RhdGEpO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICB0aGlzLnBvcFN0ZW5jaWxNYXNrKHRhcmdldCwgbWFza0RhdGEpO1xuICAgIH1cbn07XG5cbi8qKlxuICogQXBwbGllcyB0aGUgTWFzayBhbmQgYWRkcyBpdCB0byB0aGUgY3VycmVudCBmaWx0ZXIgc3RhY2suXG4gKlxuICogQHBhcmFtIHRhcmdldCB7UElYSS5SZW5kZXJUYXJnZXR9XG4gKiBAcGFyYW0gbWFza0RhdGEge2FueVtdfVxuICovXG5NYXNrTWFuYWdlci5wcm90b3R5cGUucHVzaFNwcml0ZU1hc2sgPSBmdW5jdGlvbiAodGFyZ2V0LCBtYXNrRGF0YSlcbntcbiAgICB2YXIgYWxwaGFNYXNrRmlsdGVyID0gdGhpcy5hbHBoYU1hc2tQb29sLnBvcCgpO1xuXG4gICAgaWYgKCFhbHBoYU1hc2tGaWx0ZXIpXG4gICAge1xuICAgICAgICBhbHBoYU1hc2tGaWx0ZXIgPSBbbmV3IEFscGhhTWFza0ZpbHRlcihtYXNrRGF0YSldO1xuICAgIH1cblxuICAgIGFscGhhTWFza0ZpbHRlclswXS5tYXNrU3ByaXRlID0gbWFza0RhdGE7XG4gICAgdGhpcy5yZW5kZXJlci5maWx0ZXJNYW5hZ2VyLnB1c2hGaWx0ZXIodGFyZ2V0LCBhbHBoYU1hc2tGaWx0ZXIpO1xufTtcblxuLyoqXG4gKiBSZW1vdmVzIHRoZSBsYXN0IGZpbHRlciBmcm9tIHRoZSBmaWx0ZXIgc3RhY2sgYW5kIGRvZXNuJ3QgcmV0dXJuIGl0LlxuICpcbiAqL1xuTWFza01hbmFnZXIucHJvdG90eXBlLnBvcFNwcml0ZU1hc2sgPSBmdW5jdGlvbiAoKVxue1xuICAgIHZhciBmaWx0ZXJzID0gdGhpcy5yZW5kZXJlci5maWx0ZXJNYW5hZ2VyLnBvcEZpbHRlcigpO1xuXG4gICAgdGhpcy5hbHBoYU1hc2tQb29sLnB1c2goZmlsdGVycyk7XG59O1xuXG5cbi8qKlxuICogQXBwbGllcyB0aGUgTWFzayBhbmQgYWRkcyBpdCB0byB0aGUgY3VycmVudCBmaWx0ZXIgc3RhY2suXG4gKlxuICogQHBhcmFtIHRhcmdldCB7UElYSS5SZW5kZXJUYXJnZXR9XG4gKiBAcGFyYW0gbWFza0RhdGEge2FueVtdfVxuICovXG5NYXNrTWFuYWdlci5wcm90b3R5cGUucHVzaFN0ZW5jaWxNYXNrID0gZnVuY3Rpb24gKHRhcmdldCwgbWFza0RhdGEpXG57XG4gICAgdGhpcy5yZW5kZXJlci5zdGVuY2lsTWFuYWdlci5wdXNoTWFzayhtYXNrRGF0YSk7XG59O1xuXG4vKipcbiAqIFJlbW92ZXMgdGhlIGxhc3QgZmlsdGVyIGZyb20gdGhlIGZpbHRlciBzdGFjayBhbmQgZG9lc24ndCByZXR1cm4gaXQuXG4gKlxuICogQHBhcmFtIHRhcmdldCB7UElYSS5SZW5kZXJUYXJnZXR9XG4gKiBAcGFyYW0gbWFza0RhdGEge2FueVtdfVxuICovXG5NYXNrTWFuYWdlci5wcm90b3R5cGUucG9wU3RlbmNpbE1hc2sgPSBmdW5jdGlvbiAodGFyZ2V0LCBtYXNrRGF0YSlcbntcbiAgICB0aGlzLnJlbmRlcmVyLnN0ZW5jaWxNYW5hZ2VyLnBvcE1hc2sobWFza0RhdGEpO1xufTtcblxuIiwidmFyIFdlYkdMTWFuYWdlciA9IHJlcXVpcmUoJy4vV2ViR0xNYW5hZ2VyJyksXG4gICAgVGV4dHVyZVNoYWRlciA9IHJlcXVpcmUoJy4uL3NoYWRlcnMvVGV4dHVyZVNoYWRlcicpLFxuICAgIENvbXBsZXhQcmltaXRpdmVTaGFkZXIgPSByZXF1aXJlKCcuLi9zaGFkZXJzL0NvbXBsZXhQcmltaXRpdmVTaGFkZXInKSxcbiAgICBQcmltaXRpdmVTaGFkZXIgPSByZXF1aXJlKCcuLi9zaGFkZXJzL1ByaW1pdGl2ZVNoYWRlcicpLFxuICAgIHV0aWxzID0gcmVxdWlyZSgnLi4vLi4vLi4vdXRpbHMnKTtcblxuLyoqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAZXh0ZW5kcyBQSVhJLldlYkdMTWFuYWdlclxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLldlYkdMUmVuZGVyZXJ9IFRoZSByZW5kZXJlciB0aGlzIG1hbmFnZXIgd29ya3MgZm9yLlxuICovXG5mdW5jdGlvbiBTaGFkZXJNYW5hZ2VyKHJlbmRlcmVyKVxue1xuICAgIFdlYkdMTWFuYWdlci5jYWxsKHRoaXMsIHJlbmRlcmVyKTtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLm1heEF0dGlicyA9IDEwO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7YW55W119XG4gICAgICovXG4gICAgdGhpcy5hdHRyaWJTdGF0ZSA9IFtdO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7YW55W119XG4gICAgICovXG4gICAgdGhpcy50ZW1wQXR0cmliU3RhdGUgPSBbXTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5tYXhBdHRpYnM7IGkrKylcbiAgICB7XG4gICAgICAgIHRoaXMuYXR0cmliU3RhdGVbaV0gPSBmYWxzZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHthbnlbXX1cbiAgICAgKi9cbiAgICB0aGlzLnN0YWNrID0gW107XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9jdXJyZW50SWQgPSAtMTtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge1BJWEkuU2hhZGVyfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5jdXJyZW50U2hhZGVyID0gbnVsbDtcblxuLy8gICAgdGhpcy5pbml0UGx1Z2lucygpO1xufVxuXG5TaGFkZXJNYW5hZ2VyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoV2ViR0xNYW5hZ2VyLnByb3RvdHlwZSk7XG5TaGFkZXJNYW5hZ2VyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFNoYWRlck1hbmFnZXI7XG51dGlscy5wbHVnaW5UYXJnZXQubWl4aW4oU2hhZGVyTWFuYWdlcik7XG5cbm1vZHVsZS5leHBvcnRzID0gU2hhZGVyTWFuYWdlcjtcblxuLyoqXG4gKiBDYWxsZWQgd2hlbiB0aGVyZSBpcyBhIFdlYkdMIGNvbnRleHQgY2hhbmdlLlxuICpcbiAqL1xuU2hhZGVyTWFuYWdlci5wcm90b3R5cGUub25Db250ZXh0Q2hhbmdlID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLmluaXRQbHVnaW5zKCk7XG5cbiAgICB2YXIgZ2wgPSB0aGlzLnJlbmRlcmVyLmdsO1xuXG4gICAgLy8gZ2V0IHRoZSBtYXhpbXVtIG51bWJlciBvZiBhdHRyaWJ1dGUgY29ycmVjdGx5IGFzIHRoaXMgdGVuZHMgdG8gdmFyeVxuICAgIHRoaXMubWF4QXR0aWJzID0gZ2wuZ2V0UGFyYW1ldGVyKGdsLk1BWF9WRVJURVhfQVRUUklCUyk7XG5cbiAgICB0aGlzLmF0dHJpYlN0YXRlID0gW107XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMubWF4QXR0aWJzOyBpKyspXG4gICAge1xuICAgICAgICB0aGlzLmF0dHJpYlN0YXRlW2ldID0gZmFsc2U7XG4gICAgfVxuXG4gICAgLy8gVE9ETyAtIFdoeSBhcmUgdGhlc2Ugbm90IHBsdWdpbnM/IFdlIGNhbid0IGRlY291cGxlIHByaW1pdGl2ZXMgdW5sZXNzIHRoZXkgYXJlLi4uLlxuICAgIHRoaXMuZGVmYXVsdFNoYWRlciA9IG5ldyBUZXh0dXJlU2hhZGVyKHRoaXMpO1xuICAgIHRoaXMucHJpbWl0aXZlU2hhZGVyID0gbmV3IFByaW1pdGl2ZVNoYWRlcih0aGlzKTtcbiAgICB0aGlzLmNvbXBsZXhQcmltaXRpdmVTaGFkZXIgPSBuZXcgQ29tcGxleFByaW1pdGl2ZVNoYWRlcih0aGlzKTtcbn07XG5cbi8qKlxuICogVGFrZXMgdGhlIGF0dHJpYnV0ZXMgZ2l2ZW4gaW4gcGFyYW1ldGVycyBhbmQgdXBsb2FkcyB0aGVtLlxuICpcbiAqIEBwYXJhbSBhdHRyaWJzIHthbnlbXX0gYXR0cmlic1xuICovXG5TaGFkZXJNYW5hZ2VyLnByb3RvdHlwZS5zZXRBdHRyaWJzID0gZnVuY3Rpb24gKGF0dHJpYnMpXG57XG4gICAgLy8gcmVzZXQgdGVtcCBzdGF0ZVxuICAgIHZhciBpO1xuXG4gICAgZm9yIChpID0gMDsgaSA8IHRoaXMudGVtcEF0dHJpYlN0YXRlLmxlbmd0aDsgaSsrKVxuICAgIHtcbiAgICAgICAgdGhpcy50ZW1wQXR0cmliU3RhdGVbaV0gPSBmYWxzZTtcbiAgICB9XG5cbiAgICAvLyBzZXQgdGhlIG5ldyBhdHRyaWJzXG4gICAgZm9yICh2YXIgYSBpbiBhdHRyaWJzKVxuICAgIHtcbiAgICAgICAgdGhpcy50ZW1wQXR0cmliU3RhdGVbYXR0cmlic1thXV0gPSB0cnVlO1xuICAgIH1cblxuICAgIHZhciBnbCA9IHRoaXMucmVuZGVyZXIuZ2w7XG5cbiAgICBmb3IgKGkgPSAwOyBpIDwgdGhpcy5hdHRyaWJTdGF0ZS5sZW5ndGg7IGkrKylcbiAgICB7XG4gICAgICAgIGlmICh0aGlzLmF0dHJpYlN0YXRlW2ldICE9PSB0aGlzLnRlbXBBdHRyaWJTdGF0ZVtpXSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5hdHRyaWJTdGF0ZVtpXSA9IHRoaXMudGVtcEF0dHJpYlN0YXRlW2ldO1xuXG4gICAgICAgICAgICBpZiAodGhpcy5hdHRyaWJTdGF0ZVtpXSlcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBnbC5lbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBnbC5kaXNhYmxlVmVydGV4QXR0cmliQXJyYXkoaSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG59O1xuXG4vKipcbiAqIFNldHMgdGhlIGN1cnJlbnQgc2hhZGVyLlxuICpcbiAqIEBwYXJhbSBzaGFkZXIge1BJWEkuU2hhZGVyfSB0aGUgc2hhZGVyIHRvIHVwbG9hZFxuICovXG5TaGFkZXJNYW5hZ2VyLnByb3RvdHlwZS5zZXRTaGFkZXIgPSBmdW5jdGlvbiAoc2hhZGVyKVxue1xuICAgIHJldHVybjtcbiAgICBpZiAodGhpcy5fY3VycmVudElkID09PSBzaGFkZXIudWlkKVxuICAgIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHRoaXMuX2N1cnJlbnRJZCA9IHNoYWRlci51aWQ7XG5cbiAgICB0aGlzLmN1cnJlbnRTaGFkZXIgPSBzaGFkZXI7XG5cbiAgICB0aGlzLnJlbmRlcmVyLmdsLnVzZVByb2dyYW0oc2hhZGVyLnByb2dyYW0pO1xuICAgIHRoaXMuc2V0QXR0cmlicyhzaGFkZXIuYXR0cmlidXRlcyk7XG5cbiAgICByZXR1cm4gdHJ1ZTtcbn07XG5cbi8qKlxuICogRGVzdHJveXMgdGhpcyBvYmplY3QuXG4gKlxuICovXG5TaGFkZXJNYW5hZ2VyLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLnByaW1pdGl2ZVNoYWRlci5kZXN0cm95KCk7XG4gICAgdGhpcy5jb21wbGV4UHJpbWl0aXZlU2hhZGVyLmRlc3Ryb3koKTtcbiAgICBXZWJHTE1hbmFnZXIucHJvdG90eXBlLmRlc3Ryb3kuY2FsbCh0aGlzKTtcblxuICAgIHRoaXMuZGVzdHJveVBsdWdpbnMoKTtcblxuICAgIHRoaXMuYXR0cmliU3RhdGUgPSBudWxsO1xuXG4gICAgdGhpcy50ZW1wQXR0cmliU3RhdGUgPSBudWxsO1xufTtcbiIsInZhciBXZWJHTE1hbmFnZXIgPSByZXF1aXJlKCcuL1dlYkdMTWFuYWdlcicpLFxuICAgIHV0aWxzID0gcmVxdWlyZSgnLi4vLi4vLi4vdXRpbHMnKTtcblxuLyoqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcn0gVGhlIHJlbmRlcmVyIHRoaXMgbWFuYWdlciB3b3JrcyBmb3IuXG4gKi9cbmZ1bmN0aW9uIFdlYkdMTWFza01hbmFnZXIocmVuZGVyZXIpXG57XG4gICAgV2ViR0xNYW5hZ2VyLmNhbGwodGhpcywgcmVuZGVyZXIpO1xuICAgIHRoaXMuc3RlbmNpbE1hc2tTdGFjayA9IG51bGw7XG59XG5cbldlYkdMTWFza01hbmFnZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShXZWJHTE1hbmFnZXIucHJvdG90eXBlKTtcbldlYkdMTWFza01hbmFnZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gV2ViR0xNYXNrTWFuYWdlcjtcbm1vZHVsZS5leHBvcnRzID0gV2ViR0xNYXNrTWFuYWdlcjtcblxuLyoqXG4gKiBDaGFuZ2VzIHRoZSBtYXNrIHN0YWNrIHRoYXQgaXMgdXNlZCBieSB0aGlzIG1hbmFnZXIuXG4gKlxuICogQHBhcmFtIHN0ZW5jaWxNYXNrU3RhY2sge1BJWEkuU3RlbmNpbE1hc2tTdGFja30gVGhlIG1hc2sgc3RhY2tcbiAqL1xuV2ViR0xNYXNrTWFuYWdlci5wcm90b3R5cGUuc2V0TWFza1N0YWNrID0gZnVuY3Rpb24gKCBzdGVuY2lsTWFza1N0YWNrIClcbntcbiAgICB0aGlzLnN0ZW5jaWxNYXNrU3RhY2sgPSBzdGVuY2lsTWFza1N0YWNrO1xuXG4gICAgdmFyIGdsID0gdGhpcy5yZW5kZXJlci5nbDtcblxuICAgIGlmIChzdGVuY2lsTWFza1N0YWNrLnN0ZW5jaWxTdGFjay5sZW5ndGggPT09IDApXG4gICAge1xuICAgICAgICBnbC5kaXNhYmxlKGdsLlNURU5DSUxfVEVTVCk7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIGdsLmVuYWJsZShnbC5TVEVOQ0lMX1RFU1QpO1xuICAgIH1cbn07XG5cbi8qKlxuICogQXBwbGllcyB0aGUgTWFzayBhbmQgYWRkcyBpdCB0byB0aGUgY3VycmVudCBmaWx0ZXIgc3RhY2suIEBhbHZpblxuICpcbiAqIEBwYXJhbSBncmFwaGljcyB7UElYSS5HcmFwaGljc31cbiAqIEBwYXJhbSB3ZWJHTERhdGEge2FueVtdfVxuICovXG5XZWJHTE1hc2tNYW5hZ2VyLnByb3RvdHlwZS5wdXNoU3RlbmNpbCA9IGZ1bmN0aW9uIChncmFwaGljcywgd2ViR0xEYXRhKVxue1xuICAgIHRoaXMucmVuZGVyZXIuX2FjdGl2ZVJlbmRlclRhcmdldC5hdHRhY2hTdGVuY2lsQnVmZmVyKCk7XG5cbiAgICB2YXIgZ2wgPSB0aGlzLnJlbmRlcmVyLmdsLFxuICAgICAgICBzbXMgPSB0aGlzLnN0ZW5jaWxNYXNrU3RhY2s7XG5cbiAgICB0aGlzLmJpbmRHcmFwaGljcyhncmFwaGljcywgd2ViR0xEYXRhKTtcblxuICAgIGlmIChzbXMuc3RlbmNpbFN0YWNrLmxlbmd0aCA9PT0gMClcbiAgICB7XG4gICAgICAgIGdsLmVuYWJsZShnbC5TVEVOQ0lMX1RFU1QpO1xuICAgICAgICBnbC5jbGVhcihnbC5TVEVOQ0lMX0JVRkZFUl9CSVQpO1xuICAgICAgICBzbXMucmV2ZXJzZSA9IHRydWU7XG4gICAgICAgIHNtcy5jb3VudCA9IDA7XG4gICAgfVxuXG4gICAgc21zLnN0ZW5jaWxTdGFjay5wdXNoKHdlYkdMRGF0YSk7XG5cbiAgICB2YXIgbGV2ZWwgPSBzbXMuY291bnQ7XG5cbiAgICBnbC5jb2xvck1hc2soZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UpO1xuXG4gICAgZ2wuc3RlbmNpbEZ1bmMoZ2wuQUxXQVlTLDAsMHhGRik7XG4gICAgZ2wuc3RlbmNpbE9wKGdsLktFRVAsZ2wuS0VFUCxnbC5JTlZFUlQpO1xuXG4gICAgLy8gZHJhdyB0aGUgdHJpYW5nbGUgc3RyaXAhXG5cbiAgICBpZiAod2ViR0xEYXRhLm1vZGUgPT09IDEpXG4gICAge1xuICAgICAgICBnbC5kcmF3RWxlbWVudHMoZ2wuVFJJQU5HTEVfRkFOLCAgd2ViR0xEYXRhLmluZGljZXMubGVuZ3RoIC0gNCwgZ2wuVU5TSUdORURfU0hPUlQsIDAgKTtcblxuICAgICAgICBpZiAoc21zLnJldmVyc2UpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGdsLnN0ZW5jaWxGdW5jKGdsLkVRVUFMLCAweEZGIC0gbGV2ZWwsIDB4RkYpO1xuICAgICAgICAgICAgZ2wuc3RlbmNpbE9wKGdsLktFRVAsZ2wuS0VFUCxnbC5ERUNSKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgIHtcbiAgICAgICAgICAgIGdsLnN0ZW5jaWxGdW5jKGdsLkVRVUFMLGxldmVsLCAweEZGKTtcbiAgICAgICAgICAgIGdsLnN0ZW5jaWxPcChnbC5LRUVQLGdsLktFRVAsZ2wuSU5DUik7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBkcmF3IGEgcXVhZCB0byBpbmNyZW1lbnQuLlxuICAgICAgICBnbC5kcmF3RWxlbWVudHMoZ2wuVFJJQU5HTEVfRkFOLCA0LCBnbC5VTlNJR05FRF9TSE9SVCwgKCB3ZWJHTERhdGEuaW5kaWNlcy5sZW5ndGggLSA0ICkgKiAyICk7XG5cbiAgICAgICAgaWYgKHNtcy5yZXZlcnNlKVxuICAgICAgICB7XG4gICAgICAgICAgICBnbC5zdGVuY2lsRnVuYyhnbC5FUVVBTCwweEZGLShsZXZlbCsxKSwgMHhGRik7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgICBnbC5zdGVuY2lsRnVuYyhnbC5FUVVBTCxsZXZlbCsxLCAweEZGKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHNtcy5yZXZlcnNlID0gIXNtcy5yZXZlcnNlO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICBpZiAoIXNtcy5yZXZlcnNlKVxuICAgICAgICB7XG4gICAgICAgICAgICBnbC5zdGVuY2lsRnVuYyhnbC5FUVVBTCwgMHhGRiAtIGxldmVsLCAweEZGKTtcbiAgICAgICAgICAgIGdsLnN0ZW5jaWxPcChnbC5LRUVQLGdsLktFRVAsZ2wuREVDUik7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgICBnbC5zdGVuY2lsRnVuYyhnbC5FUVVBTCxsZXZlbCwgMHhGRik7XG4gICAgICAgICAgICBnbC5zdGVuY2lsT3AoZ2wuS0VFUCxnbC5LRUVQLGdsLklOQ1IpO1xuICAgICAgICB9XG5cbiAgICAgICAgZ2wuZHJhd0VsZW1lbnRzKGdsLlRSSUFOR0xFX1NUUklQLCAgd2ViR0xEYXRhLmluZGljZXMubGVuZ3RoLCBnbC5VTlNJR05FRF9TSE9SVCwgMCApO1xuXG4gICAgICAgIGlmICghc21zLnJldmVyc2UpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGdsLnN0ZW5jaWxGdW5jKGdsLkVRVUFMLDB4RkYtKGxldmVsKzEpLCAweEZGKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgIHtcbiAgICAgICAgICAgIGdsLnN0ZW5jaWxGdW5jKGdsLkVRVUFMLGxldmVsKzEsIDB4RkYpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZ2wuY29sb3JNYXNrKHRydWUsIHRydWUsIHRydWUsIHRydWUpO1xuICAgIGdsLnN0ZW5jaWxPcChnbC5LRUVQLGdsLktFRVAsZ2wuS0VFUCk7XG5cbiAgICBzbXMuY291bnQrKztcbn07XG5cbi8qKlxuICogVE9ETyB0aGlzIGRvZXMgbm90IGJlbG9uZyBoZXJlIVxuICpcbiAqIEBwYXJhbSBncmFwaGljcyB7UElYSS5HcmFwaGljc31cbiAqIEBwYXJhbSB3ZWJHTERhdGEge2FueVtdfVxuICovXG5XZWJHTE1hc2tNYW5hZ2VyLnByb3RvdHlwZS5iaW5kR3JhcGhpY3MgPSBmdW5jdGlvbiAoZ3JhcGhpY3MsIHdlYkdMRGF0YSlcbntcbiAgICAvL2lmICh0aGlzLl9jdXJyZW50R3JhcGhpY3MgPT09IGdyYXBoaWNzKXJldHVybjtcbiAgICB2YXIgZ2wgPSB0aGlzLnJlbmRlcmVyLmdsO1xuXG4gICAgIC8vIGJpbmQgdGhlIGdyYXBoaWNzIG9iamVjdC4uXG4gICAgdmFyIHNoYWRlciA9IHRoaXMucmVuZGVyZXIucGx1Z2lucy5ncmFwaGljcy5wcmltaXRpdmVTaGFkZXI7XG5cbiAgICBpZiAod2ViR0xEYXRhLm1vZGUgPT09IDEpXG4gICAge1xuICAgICAgICAvKlxuICAgICAgICBzaGFkZXIgPSB0aGlzLnJlbmRlcmVyLnNoYWRlck1hbmFnZXIuY29tcGxleFByaW1pdGl2ZVNoYWRlcjtcblxuICAgICAgICB0aGlzLnJlbmRlcmVyLnNoYWRlck1hbmFnZXIuc2V0U2hhZGVyKHNoYWRlcik7XG5cbiAgICAgICAgZ2wudW5pZm9ybU1hdHJpeDNmdihzaGFkZXIudW5pZm9ybXMudHJhbnNsYXRpb25NYXRyaXguX2xvY2F0aW9uLCBmYWxzZSwgZ3JhcGhpY3Mud29ybGRUcmFuc2Zvcm0udG9BcnJheSh0cnVlKSk7XG5cbiAgICAgICAgZ2wudW5pZm9ybU1hdHJpeDNmdihzaGFkZXIudW5pZm9ybXMucHJvamVjdGlvbk1hdHJpeC5fbG9jYXRpb24sIGZhbHNlLCB0aGlzLnJlbmRlcmVyLmN1cnJlbnRSZW5kZXJUYXJnZXQucHJvamVjdGlvbk1hdHJpeC50b0FycmF5KHRydWUpKTtcblxuICAgICAgICBnbC51bmlmb3JtM2Z2KHNoYWRlci51bmlmb3Jtcy50aW50Ll9sb2NhdGlvbiwgdXRpbHMuaGV4MnJnYihncmFwaGljcy50aW50KSk7XG5cbiAgICAgICAgZ2wudW5pZm9ybTNmdihzaGFkZXIudW5pZm9ybXMuY29sb3IuX2xvY2F0aW9uLCB3ZWJHTERhdGEuY29sb3IpO1xuXG4gICAgICAgIGdsLnVuaWZvcm0xZihzaGFkZXIudW5pZm9ybXMuYWxwaGEuX2xvY2F0aW9uLCBncmFwaGljcy53b3JsZEFscGhhKTtcblxuICAgICAgICBnbC5iaW5kQnVmZmVyKGdsLkFSUkFZX0JVRkZFUiwgd2ViR0xEYXRhLmJ1ZmZlcik7XG5cbiAgICAgICAgZ2wudmVydGV4QXR0cmliUG9pbnRlcihzaGFkZXIuYXR0cmlidXRlcy5hVmVydGV4UG9zaXRpb24sIDIsIGdsLkZMT0FULCBmYWxzZSwgNCAqIDIsIDApO1xuXG4gICAgICAgIC8vIG5vdyBkbyB0aGUgcmVzdC4uXG4gICAgICAgIC8vIHNldCB0aGUgaW5kZXggYnVmZmVyIVxuICAgICAgICBnbC5iaW5kQnVmZmVyKGdsLkVMRU1FTlRfQVJSQVlfQlVGRkVSLCB3ZWJHTERhdGEuaW5kZXhCdWZmZXIpO1xuICAgICovXG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIC8vdGhpcy5yZW5kZXJlci5zaGFkZXJNYW5hZ2VyLmFjdGl2YXRlUHJpbWl0aXZlU2hhZGVyKCk7XG4vLyAgICAgICAgc2hhZGVyID0gdGhpcy5yZW5kZXJlci5zaGFkZXJNYW5hZ2VyLnByaW1pdGl2ZVNoYWRlcjtcbiAgICAgICBcbiAgICAgICAgdGhpcy5yZW5kZXJlci5iaW5kU2hhZGVyKHNoYWRlcilcblxuICAgICAgICBzaGFkZXIudW5pZm9ybXMudHJhbnNsYXRpb25NYXRyaXggPSBncmFwaGljcy53b3JsZFRyYW5zZm9ybS50b0FycmF5KHRydWUpO1xuICAgICAgICBzaGFkZXIudW5pZm9ybXMudGludCA9IHV0aWxzLmhleDJyZ2IoZ3JhcGhpY3MudGludCk7XG4gICAgICAgIHNoYWRlci51bmlmb3Jtcy5hbHBoYSA9IGdyYXBoaWNzLndvcmxkQWxwaGE7XG5cblxuICAgICAgICBnbC5iaW5kQnVmZmVyKGdsLkFSUkFZX0JVRkZFUiwgd2ViR0xEYXRhLmJ1ZmZlcik7XG5cblxuICAgICAgICBzaGFkZXIuYXR0cmlidXRlcy5hVmVydGV4UG9zaXRpb24ucG9pbnRlcihnbC5GTE9BVCwgZmFsc2UsIDQgKiA2LCAwKTtcbiAgICAgICAgc2hhZGVyLmF0dHJpYnV0ZXMuYUNvbG9yLnBvaW50ZXIoZ2wuRkxPQVQsIGZhbHNlLCA0ICogNiwgMiAqIDQpO1xuXG4gICAgICAgIGdsLmVuYWJsZVZlcnRleEF0dHJpYkFycmF5KHNoYWRlci5hdHRyaWJ1dGVzLmFWZXJ0ZXhQb3NpdGlvbi5sb2NhdGlvbik7XG4gICAgICAgIGdsLmVuYWJsZVZlcnRleEF0dHJpYkFycmF5KHNoYWRlci5hdHRyaWJ1dGVzLmFDb2xvci5sb2NhdGlvbik7XG5cbiAgICAgICAgLy8gc2V0IHRoZSBpbmRleCBidWZmZXIhXG4gICAgICAgIGdsLmJpbmRCdWZmZXIoZ2wuRUxFTUVOVF9BUlJBWV9CVUZGRVIsIHdlYkdMRGF0YS5pbmRleEJ1ZmZlcik7XG4vLyAgICAgICAgZ2wuZHJhd0VsZW1lbnRzKGdsLlRSSUFOR0xFX1NUUklQLCAgd2ViR0xEYXRhLmluZGljZXMubGVuZ3RoLCBnbC5VTlNJR05FRF9TSE9SVCwgMCApO1xuXG5cbiAgICAgIC8qICB0aGlzLnJlbmRlcmVyLnNoYWRlck1hbmFnZXIuc2V0U2hhZGVyKHNoYWRlcik7XG5cbiAgICAgICAgZ2wudW5pZm9ybU1hdHJpeDNmdihzaGFkZXIudW5pZm9ybXMudHJhbnNsYXRpb25NYXRyaXguX2xvY2F0aW9uLCBmYWxzZSwgZ3JhcGhpY3Mud29ybGRUcmFuc2Zvcm0udG9BcnJheSh0cnVlKSk7XG5cbiAgICAgICAgZ2wudW5pZm9ybU1hdHJpeDNmdihzaGFkZXIudW5pZm9ybXMucHJvamVjdGlvbk1hdHJpeC5fbG9jYXRpb24sIGZhbHNlLCB0aGlzLnJlbmRlcmVyLmN1cnJlbnRSZW5kZXJUYXJnZXQucHJvamVjdGlvbk1hdHJpeC50b0FycmF5KHRydWUpKTtcblxuICAgICAgICBnbC51bmlmb3JtM2Z2KHNoYWRlci51bmlmb3Jtcy50aW50Ll9sb2NhdGlvbiwgdXRpbHMuaGV4MnJnYihncmFwaGljcy50aW50KSk7XG5cbiAgICAgICAgZ2wudW5pZm9ybTFmKHNoYWRlci51bmlmb3Jtcy5hbHBoYS5fbG9jYXRpb24sIGdyYXBoaWNzLndvcmxkQWxwaGEpO1xuXG4gICAgICAgIGdsLmJpbmRCdWZmZXIoZ2wuQVJSQVlfQlVGRkVSLCB3ZWJHTERhdGEuYnVmZmVyKTtcblxuICAgICAgICBnbC52ZXJ0ZXhBdHRyaWJQb2ludGVyKHNoYWRlci5hdHRyaWJ1dGVzLmFWZXJ0ZXhQb3NpdGlvbiwgMiwgZ2wuRkxPQVQsIGZhbHNlLCA0ICogNiwgMCk7XG4gICAgICAgIGdsLnZlcnRleEF0dHJpYlBvaW50ZXIoc2hhZGVyLmF0dHJpYnV0ZXMuYUNvbG9yLCA0LCBnbC5GTE9BVCwgZmFsc2UsNCAqIDYsIDIgKiA0KTtcblxuICAgICAgICAvLyBzZXQgdGhlIGluZGV4IGJ1ZmZlciFcbiAgICAgICAgZ2wuYmluZEJ1ZmZlcihnbC5FTEVNRU5UX0FSUkFZX0JVRkZFUiwgd2ViR0xEYXRhLmluZGV4QnVmZmVyKTsqL1xuICAgIH1cbn07XG5cbi8qKlxuICogVE9ETyBAYWx2aW5cbiAqIEBwYXJhbSBncmFwaGljcyB7UElYSS5HcmFwaGljc31cbiAqIEBwYXJhbSB3ZWJHTERhdGEge2FueVtdfVxuICovXG5XZWJHTE1hc2tNYW5hZ2VyLnByb3RvdHlwZS5wb3BTdGVuY2lsID0gZnVuY3Rpb24gKGdyYXBoaWNzLCB3ZWJHTERhdGEpXG57XG4gICAgdmFyIGdsID0gdGhpcy5yZW5kZXJlci5nbCxcbiAgICAgICAgc21zID0gdGhpcy5zdGVuY2lsTWFza1N0YWNrO1xuXG4gICAgc21zLnN0ZW5jaWxTdGFjay5wb3AoKTtcblxuICAgIHNtcy5jb3VudC0tO1xuXG4gICAgaWYgKHNtcy5zdGVuY2lsU3RhY2subGVuZ3RoID09PSAwKVxuICAgIHtcbiAgICAgICAgLy8gdGhlIHN0YWNrIGlzIGVtcHR5IVxuICAgICAgICBnbC5kaXNhYmxlKGdsLlNURU5DSUxfVEVTVCk7XG5cbiAgICB9XG4gICAgZWxzZVxuICAgIHtcblxuICAgICAgICB2YXIgbGV2ZWwgPSBzbXMuY291bnQ7XG5cbiAgICAgICAgdGhpcy5iaW5kR3JhcGhpY3MoZ3JhcGhpY3MsIHdlYkdMRGF0YSk7XG5cbiAgICAgICAgZ2wuY29sb3JNYXNrKGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlKTtcblxuICAgICAgICBpZiAod2ViR0xEYXRhLm1vZGUgPT09IDEpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHNtcy5yZXZlcnNlID0gIXNtcy5yZXZlcnNlO1xuXG4gICAgICAgICAgICBpZiAoc21zLnJldmVyc2UpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgZ2wuc3RlbmNpbEZ1bmMoZ2wuRVFVQUwsIDB4RkYgLSAobGV2ZWwrMSksIDB4RkYpO1xuICAgICAgICAgICAgICAgIGdsLnN0ZW5jaWxPcChnbC5LRUVQLGdsLktFRVAsZ2wuSU5DUik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgZ2wuc3RlbmNpbEZ1bmMoZ2wuRVFVQUwsbGV2ZWwrMSwgMHhGRik7XG4gICAgICAgICAgICAgICAgZ2wuc3RlbmNpbE9wKGdsLktFRVAsZ2wuS0VFUCxnbC5ERUNSKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gZHJhdyBhIHF1YWQgdG8gaW5jcmVtZW50Li5cbiAgICAgICAgICAgIGdsLmRyYXdFbGVtZW50cyhnbC5UUklBTkdMRV9GQU4sIDQsIGdsLlVOU0lHTkVEX1NIT1JULCAoIHdlYkdMRGF0YS5pbmRpY2VzLmxlbmd0aCAtIDQgKSAqIDIgKTtcblxuICAgICAgICAgICAgZ2wuc3RlbmNpbEZ1bmMoZ2wuQUxXQVlTLDAsMHhGRik7XG4gICAgICAgICAgICBnbC5zdGVuY2lsT3AoZ2wuS0VFUCxnbC5LRUVQLGdsLklOVkVSVCk7XG5cbiAgICAgICAgICAgIC8vIGRyYXcgdGhlIHRyaWFuZ2xlIHN0cmlwIVxuICAgICAgICAgICAgZ2wuZHJhd0VsZW1lbnRzKGdsLlRSSUFOR0xFX0ZBTiwgIHdlYkdMRGF0YS5pbmRpY2VzLmxlbmd0aCAtIDQsIGdsLlVOU0lHTkVEX1NIT1JULCAwICk7XG5cbiAgICAgICAgICAgIHRoaXMucmVuZGVyZXIuZHJhd0NvdW50ICs9IDI7XG5cbiAgICAgICAgICAgIGlmICghc21zLnJldmVyc2UpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgZ2wuc3RlbmNpbEZ1bmMoZ2wuRVFVQUwsMHhGRi0obGV2ZWwpLCAweEZGKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBnbC5zdGVuY2lsRnVuYyhnbC5FUVVBTCxsZXZlbCwgMHhGRik7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgIHtcbiAgICAgICAgICAvLyAgY29uc29sZS5sb2coXCI8PD4+XCIpXG4gICAgICAgICAgICBpZiAoIXNtcy5yZXZlcnNlKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGdsLnN0ZW5jaWxGdW5jKGdsLkVRVUFMLCAweEZGIC0gKGxldmVsKzEpLCAweEZGKTtcbiAgICAgICAgICAgICAgICBnbC5zdGVuY2lsT3AoZ2wuS0VFUCxnbC5LRUVQLGdsLklOQ1IpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGdsLnN0ZW5jaWxGdW5jKGdsLkVRVUFMLGxldmVsKzEsIDB4RkYpO1xuICAgICAgICAgICAgICAgIGdsLnN0ZW5jaWxPcChnbC5LRUVQLGdsLktFRVAsZ2wuREVDUik7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGdsLmRyYXdFbGVtZW50cyhnbC5UUklBTkdMRV9TVFJJUCwgIHdlYkdMRGF0YS5pbmRpY2VzLmxlbmd0aCwgZ2wuVU5TSUdORURfU0hPUlQsIDAgKTtcblxuICAgICAgICAgICAgdGhpcy5yZW5kZXJlci5kcmF3Q291bnQrKztcblxuICAgICAgICAgICAgaWYgKCFzbXMucmV2ZXJzZSlcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBnbC5zdGVuY2lsRnVuYyhnbC5FUVVBTCwweEZGLShsZXZlbCksIDB4RkYpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGdsLnN0ZW5jaWxGdW5jKGdsLkVRVUFMLGxldmVsLCAweEZGKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGdsLmNvbG9yTWFzayh0cnVlLCB0cnVlLCB0cnVlLCB0cnVlKTtcbiAgICAgICAgZ2wuc3RlbmNpbE9wKGdsLktFRVAsZ2wuS0VFUCxnbC5LRUVQKTtcblxuXG4gICAgfVxufTtcblxuLyoqXG4gKiBEZXN0cm95cyB0aGUgbWFzayBzdGFjay5cbiAqXG4gKi9cbldlYkdMTWFza01hbmFnZXIucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoKVxue1xuICAgIFdlYkdMTWFuYWdlci5wcm90b3R5cGUuZGVzdHJveS5jYWxsKHRoaXMpO1xuXG4gICAgdGhpcy5zdGVuY2lsTWFza1N0YWNrLnN0ZW5jaWxTdGFjayA9IG51bGw7XG59O1xuXG4vKipcbiAqIEFwcGxpZXMgdGhlIE1hc2sgYW5kIGFkZHMgaXQgdG8gdGhlIGN1cnJlbnQgZmlsdGVyIHN0YWNrLlxuICpcbiAqIEBwYXJhbSBtYXNrRGF0YSB7YW55W119IFRoZSBtYXNrIGRhdGEgc3RydWN0dXJlIHRvIHVzZVxuICovXG5XZWJHTE1hc2tNYW5hZ2VyLnByb3RvdHlwZS5wdXNoTWFzayA9IGZ1bmN0aW9uIChtYXNrRGF0YSlcbntcbiAgICB0aGlzLnJlbmRlcmVyLnNldE9iamVjdFJlbmRlcmVyKHRoaXMucmVuZGVyZXIucGx1Z2lucy5ncmFwaGljcyk7XG4gICAgXG4gICAgLy9UT0RPIEZJWFxuICAgIGlmIChtYXNrRGF0YS5kaXJ0eSlcbiAgICB7XG4gICAgICAgIHRoaXMucmVuZGVyZXIucGx1Z2lucy5ncmFwaGljcy51cGRhdGVHcmFwaGljcyhtYXNrRGF0YSwgdGhpcy5yZW5kZXJlci5nbCk7XG4gICAgfVxuXG4gICAgaWYgKCFtYXNrRGF0YS5fd2ViR0xbdGhpcy5yZW5kZXJlci5nbC5pZF0uZGF0YS5sZW5ndGgpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5wdXNoU3RlbmNpbChtYXNrRGF0YSwgbWFza0RhdGEuX3dlYkdMW3RoaXMucmVuZGVyZXIuZ2wuaWRdLmRhdGFbMF0pO1xufTtcblxuLyoqXG4gKiBSZW1vdmVzIHRoZSBsYXN0IGZpbHRlciBmcm9tIHRoZSBmaWx0ZXIgc3RhY2sgYW5kIGRvZXNuJ3QgcmV0dXJuIGl0LlxuICpcbiAqIEBwYXJhbSBtYXNrRGF0YSB7YW55W119XG4gKi9cbldlYkdMTWFza01hbmFnZXIucHJvdG90eXBlLnBvcE1hc2sgPSBmdW5jdGlvbiAobWFza0RhdGEpXG57XG4gICAgdGhpcy5yZW5kZXJlci5zZXRPYmplY3RSZW5kZXJlcih0aGlzLnJlbmRlcmVyLnBsdWdpbnMuZ3JhcGhpY3MpO1xuXG4gICAgdGhpcy5wb3BTdGVuY2lsKG1hc2tEYXRhLCBtYXNrRGF0YS5fd2ViR0xbdGhpcy5yZW5kZXJlci5nbC5pZF0uZGF0YVswXSk7XG59O1xuXG4iLCIvKipcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5XZWJHTFJlbmRlcmVyfSBUaGUgcmVuZGVyZXIgdGhpcyBtYW5hZ2VyIHdvcmtzIGZvci5cbiAqL1xuZnVuY3Rpb24gV2ViR0xNYW5hZ2VyKHJlbmRlcmVyKVxue1xuICAgIC8qKlxuICAgICAqIFRoZSByZW5kZXJlciB0aGlzIG1hbmFnZXIgd29ya3MgZm9yLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5XZWJHTFJlbmRlcmVyfVxuICAgICAqL1xuICAgIHRoaXMucmVuZGVyZXIgPSByZW5kZXJlcjtcblxuICAgIHRoaXMucmVuZGVyZXIub24oJ2NvbnRleHQnLCB0aGlzLm9uQ29udGV4dENoYW5nZSwgdGhpcyk7XG59XG5cbldlYkdMTWFuYWdlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBXZWJHTE1hbmFnZXI7XG5tb2R1bGUuZXhwb3J0cyA9IFdlYkdMTWFuYWdlcjtcblxuLyoqXG4gKiBHZW5lcmljIG1ldGhvZCBjYWxsZWQgd2hlbiB0aGVyZSBpcyBhIFdlYkdMIGNvbnRleHQgY2hhbmdlLlxuICpcbiAqL1xuV2ViR0xNYW5hZ2VyLnByb3RvdHlwZS5vbkNvbnRleHRDaGFuZ2UgPSBmdW5jdGlvbiAoKVxue1xuXHQvLyBkbyBzb21lIGNvZGVzIGluaXQhXG59O1xuXG4vKipcbiAqIEdlbmVyaWMgZGVzdHJveSBtZXRob2RzIHRvIGJlIG92ZXJyaWRkZW4gYnkgdGhlIHN1YmNsYXNzXG4gKlxuICovXG5XZWJHTE1hbmFnZXIucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoKVxue1xuICAgIHRoaXMucmVuZGVyZXIub2ZmKCdjb250ZXh0JywgdGhpcy5vbkNvbnRleHRDaGFuZ2UsIHRoaXMpO1xuXG4gICAgdGhpcy5yZW5kZXJlciA9IG51bGw7XG59O1xuIiwidmFyIFNoYWRlciA9IHJlcXVpcmUoJy4vU2hhZGVyJyk7XG5cbi8qKlxuICogVGhpcyBzaGFkZXIgaXMgdXNlZCB0byBkcmF3IGNvbXBsZXggcHJpbWl0aXZlIHNoYXBlcyBmb3Ige0BsaW5rIFBJWEkuR3JhcGhpY3N9LlxuICpcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqIEBleHRlbmRzIFBJWEkuU2hhZGVyXG4gKiBAcGFyYW0gc2hhZGVyTWFuYWdlciB7UElYSS5TaGFkZXJNYW5hZ2VyfSBUaGUgd2ViZ2wgc2hhZGVyIG1hbmFnZXIgdGhpcyBzaGFkZXIgd29ya3MgZm9yLlxuICovXG5mdW5jdGlvbiBDb21wbGV4UHJpbWl0aXZlU2hhZGVyKHNoYWRlck1hbmFnZXIpXG57XG4gICAgU2hhZGVyLmNhbGwodGhpcyxcbiAgICAgICAgc2hhZGVyTWFuYWdlcixcbiAgICAgICAgLy8gdmVydGV4IHNoYWRlclxuICAgICAgICBbXG4gICAgICAgICAgICAnYXR0cmlidXRlIHZlYzIgYVZlcnRleFBvc2l0aW9uOycsXG5cbiAgICAgICAgICAgICd1bmlmb3JtIG1hdDMgdHJhbnNsYXRpb25NYXRyaXg7JyxcbiAgICAgICAgICAgICd1bmlmb3JtIG1hdDMgcHJvamVjdGlvbk1hdHJpeDsnLFxuXG4gICAgICAgICAgICAndW5pZm9ybSB2ZWMzIHRpbnQ7JyxcbiAgICAgICAgICAgICd1bmlmb3JtIGZsb2F0IGFscGhhOycsXG4gICAgICAgICAgICAndW5pZm9ybSB2ZWMzIGNvbG9yOycsXG5cbiAgICAgICAgICAgICd2YXJ5aW5nIHZlYzQgdkNvbG9yOycsXG5cbiAgICAgICAgICAgICd2b2lkIG1haW4odm9pZCl7JyxcbiAgICAgICAgICAgICcgICBnbF9Qb3NpdGlvbiA9IHZlYzQoKHByb2plY3Rpb25NYXRyaXggKiB0cmFuc2xhdGlvbk1hdHJpeCAqIHZlYzMoYVZlcnRleFBvc2l0aW9uLCAxLjApKS54eSwgMC4wLCAxLjApOycsXG4gICAgICAgICAgICAnICAgdkNvbG9yID0gdmVjNChjb2xvciAqIGFscGhhICogdGludCwgYWxwaGEpOycsLy9cIiAqIHZlYzQodGludCAqIGFscGhhLCBhbHBoYSk7JyxcbiAgICAgICAgICAgICd9J1xuICAgICAgICBdLmpvaW4oJ1xcbicpLFxuICAgICAgICAvLyBmcmFnbWVudCBzaGFkZXJcbiAgICAgICAgW1xuICAgICAgICAgICAgJ3ByZWNpc2lvbiBtZWRpdW1wIGZsb2F0OycsXG5cbiAgICAgICAgICAgICd2YXJ5aW5nIHZlYzQgdkNvbG9yOycsXG5cbiAgICAgICAgICAgICd2b2lkIG1haW4odm9pZCl7JyxcbiAgICAgICAgICAgICcgICBnbF9GcmFnQ29sb3IgPSB2Q29sb3I7JyxcbiAgICAgICAgICAgICd9J1xuICAgICAgICBdLmpvaW4oJ1xcbicpLFxuICAgICAgICAvLyBjdXN0b20gdW5pZm9ybXNcbiAgICAgICAge1xuICAgICAgICAgICAgdGludDogICB7IHR5cGU6ICczZicsIHZhbHVlOiBbMCwgMCwgMF0gfSxcbiAgICAgICAgICAgIGFscGhhOiAgeyB0eXBlOiAnMWYnLCB2YWx1ZTogMCB9LFxuICAgICAgICAgICAgY29sb3I6ICB7IHR5cGU6ICczZicsIHZhbHVlOiBbMCwwLDBdIH0sXG4gICAgICAgICAgICB0cmFuc2xhdGlvbk1hdHJpeDogeyB0eXBlOiAnbWF0MycsIHZhbHVlOiBuZXcgRmxvYXQzMkFycmF5KDkpIH0sXG4gICAgICAgICAgICBwcm9qZWN0aW9uTWF0cml4OiB7IHR5cGU6ICdtYXQzJywgdmFsdWU6IG5ldyBGbG9hdDMyQXJyYXkoOSkgfVxuICAgICAgICB9LFxuICAgICAgICAvLyBhdHRyaWJ1dGVzXG4gICAgICAgIHtcbiAgICAgICAgICAgIGFWZXJ0ZXhQb3NpdGlvbjowXG4gICAgICAgIH1cbiAgICApO1xufVxuXG5Db21wbGV4UHJpbWl0aXZlU2hhZGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoU2hhZGVyLnByb3RvdHlwZSk7XG5Db21wbGV4UHJpbWl0aXZlU2hhZGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IENvbXBsZXhQcmltaXRpdmVTaGFkZXI7XG5tb2R1bGUuZXhwb3J0cyA9IENvbXBsZXhQcmltaXRpdmVTaGFkZXI7XG4iLCJ2YXIgU2hhZGVyID0gcmVxdWlyZSgnLi9TaGFkZXInKTtcblxuLyoqXG4gKiBUaGlzIHNoYWRlciBpcyB1c2VkIHRvIGRyYXcgc2ltcGxlIHByaW1pdGl2ZSBzaGFwZXMgZm9yIHtAbGluayBQSVhJLkdyYXBoaWNzfS5cbiAqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAZXh0ZW5kcyBQSVhJLlNoYWRlclxuICogQHBhcmFtIHNoYWRlck1hbmFnZXIge1NoYWRlck1hbmFnZXJ9IFRoZSB3ZWJnbCBzaGFkZXIgbWFuYWdlciB0aGlzIHNoYWRlciB3b3JrcyBmb3IuXG4gKi9cbmZ1bmN0aW9uIFByaW1pdGl2ZVNoYWRlcihzaGFkZXJNYW5hZ2VyKVxue1xuICAgIFNoYWRlci5jYWxsKHRoaXMsXG4gICAgICAgIHNoYWRlck1hbmFnZXIsXG4gICAgICAgIC8vIHZlcnRleCBzaGFkZXJcbiAgICAgICAgW1xuICAgICAgICAgICAgJ2F0dHJpYnV0ZSB2ZWMyIGFWZXJ0ZXhQb3NpdGlvbjsnLFxuICAgICAgICAgICAgJ2F0dHJpYnV0ZSB2ZWM0IGFDb2xvcjsnLFxuXG4gICAgICAgICAgICAndW5pZm9ybSBtYXQzIHRyYW5zbGF0aW9uTWF0cml4OycsXG4gICAgICAgICAgICAndW5pZm9ybSBtYXQzIHByb2plY3Rpb25NYXRyaXg7JyxcblxuICAgICAgICAgICAgJ3VuaWZvcm0gZmxvYXQgYWxwaGE7JyxcbiAgICAgICAgICAgICd1bmlmb3JtIGZsb2F0IGZsaXBZOycsXG4gICAgICAgICAgICAndW5pZm9ybSB2ZWMzIHRpbnQ7JyxcblxuICAgICAgICAgICAgJ3ZhcnlpbmcgdmVjNCB2Q29sb3I7JyxcblxuICAgICAgICAgICAgJ3ZvaWQgbWFpbih2b2lkKXsnLFxuICAgICAgICAgICAgJyAgIGdsX1Bvc2l0aW9uID0gdmVjNCgocHJvamVjdGlvbk1hdHJpeCAqIHRyYW5zbGF0aW9uTWF0cml4ICogdmVjMyhhVmVydGV4UG9zaXRpb24sIDEuMCkpLnh5LCAwLjAsIDEuMCk7JyxcbiAgICAgICAgICAgICcgICB2Q29sb3IgPSBhQ29sb3IgKiB2ZWM0KHRpbnQgKiBhbHBoYSwgYWxwaGEpOycsXG4gICAgICAgICAgICAnfSdcbiAgICAgICAgXS5qb2luKCdcXG4nKSxcbiAgICAgICAgLy8gZnJhZ21lbnQgc2hhZGVyXG4gICAgICAgIFtcbiAgICAgICAgICAgICdwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDsnLFxuXG4gICAgICAgICAgICAndmFyeWluZyB2ZWM0IHZDb2xvcjsnLFxuXG4gICAgICAgICAgICAndm9pZCBtYWluKHZvaWQpeycsXG4gICAgICAgICAgICAnICAgZ2xfRnJhZ0NvbG9yID0gdkNvbG9yOycsXG4gICAgICAgICAgICAnfSdcbiAgICAgICAgXS5qb2luKCdcXG4nKSxcbiAgICAgICAgLy8gY3VzdG9tIHVuaWZvcm1zXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRpbnQ6ICAgeyB0eXBlOiAnM2YnLCB2YWx1ZTogWzAsIDAsIDBdIH0sXG4gICAgICAgICAgICBhbHBoYTogIHsgdHlwZTogJzFmJywgdmFsdWU6IDAgfSxcbiAgICAgICAgICAgIHRyYW5zbGF0aW9uTWF0cml4OiB7IHR5cGU6ICdtYXQzJywgdmFsdWU6IG5ldyBGbG9hdDMyQXJyYXkoOSkgfSxcbiAgICAgICAgICAgIHByb2plY3Rpb25NYXRyaXg6IHsgdHlwZTogJ21hdDMnLCB2YWx1ZTogbmV3IEZsb2F0MzJBcnJheSg5KSB9XG4gICAgICAgIH0sXG4gICAgICAgIC8vIGN1c3RvbSBhdHRyaWJ1dGVzXG4gICAgICAgIHtcbiAgICAgICAgICAgIGFWZXJ0ZXhQb3NpdGlvbjowLFxuICAgICAgICAgICAgYUNvbG9yOjBcbiAgICAgICAgfVxuICAgICk7XG59XG5cblByaW1pdGl2ZVNoYWRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFNoYWRlci5wcm90b3R5cGUpO1xuUHJpbWl0aXZlU2hhZGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFByaW1pdGl2ZVNoYWRlcjtcbm1vZHVsZS5leHBvcnRzID0gUHJpbWl0aXZlU2hhZGVyO1xuIiwiLypnbG9iYWwgY29uc29sZSAqL1xudmFyIHV0aWxzID0gcmVxdWlyZSgnLi4vLi4vLi4vdXRpbHMnKTtcblxuLyoqXG4gKiBCYXNlIHNoYWRlciBjbGFzcyBmb3IgUElYSSBtYW5hZ2VkIHNoYWRlcnMuXG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIHNoYWRlck1hbmFnZXIge1BJWEkuU2hhZGVyTWFuYWdlcn0gVGhlIHdlYmdsIHNoYWRlciBtYW5hZ2VyIHRoaXMgc2hhZGVyIHdvcmtzIGZvci5cbiAqIEBwYXJhbSBbdmVydGV4U3JjXSB7c3RyaW5nfSBUaGUgc291cmNlIG9mIHRoZSB2ZXJ0ZXggc2hhZGVyLlxuICogQHBhcmFtIFtmcmFnbWVudFNyY10ge3N0cmluZ30gVGhlIHNvdXJjZSBvZiB0aGUgZnJhZ21lbnQgc2hhZGVyLlxuICogQHBhcmFtIFt1bmlmb3Jtc10ge29iamVjdH0gVW5pZm9ybXMgZm9yIHRoaXMgc2hhZGVyLlxuICogQHBhcmFtIFthdHRyaWJ1dGVzXSB7b2JqZWN0fSBBdHRyaWJ1dGVzIGZvciB0aGlzIHNoYWRlci5cbiAqL1xuZnVuY3Rpb24gU2hhZGVyKHNoYWRlck1hbmFnZXIsIHZlcnRleFNyYywgZnJhZ21lbnRTcmMsIHVuaWZvcm1zLCBhdHRyaWJ1dGVzKVxue1xuICAgIGlmICghdmVydGV4U3JjIHx8ICFmcmFnbWVudFNyYylcbiAgICB7XG4gICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1BpeGkuanMgRXJyb3IuIFNoYWRlciByZXF1aXJlcyB2ZXJ0ZXhTcmMgYW5kIGZyYWdtZW50U3JjJyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQSB1bmlxdWUgaWRcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQHJlYWRvbmx5XG4gICAgICovXG4gICAgdGhpcy51aWQgPSB1dGlscy51aWQoKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBjdXJyZW50IFdlYkdMIGRyYXdpbmcgY29udGV4dFxuICAgICAqIEBtZW1iZXIge1dlYkdMUmVuZGVyaW5nQ29udGV4dH1cbiAgICAgKiBAcmVhZG9ubHlcbiAgICAgKi9cbiAgICB0aGlzLmdsID0gc2hhZGVyTWFuYWdlci5yZW5kZXJlci5nbDtcblxuICAgIC8vVE9ETyBtYXliZSB3ZSBzaG91bGQgcGFzcyByZW5kZXJlciByYXRoZXIgdGhhbiBzaGFkZXIgbWFuZ2VyPz8gZm9vZCBmb3IgdGhvdWdodC4uXG4gICAgdGhpcy5zaGFkZXJNYW5hZ2VyID0gc2hhZGVyTWFuYWdlcjtcblxuICAgIC8qKlxuICAgICAqIFRoZSBXZWJHTCBwcm9ncmFtLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7V2ViR0xQcm9ncmFtfVxuICAgICAqIEByZWFkb25seVxuICAgICAqL1xuICAgIHRoaXMucHJvZ3JhbSA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgdW5pZm9ybXMgYXMgYW4gb2JqZWN0XG4gICAgICogQG1lbWJlciB7b2JqZWN0fVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy51bmlmb3JtcyA9IHVuaWZvcm1zIHx8IHt9O1xuXG4gICAgLyoqXG4gICAgICogVGhlIGF0dHJpYnV0ZXMgYXMgYW4gb2JqZWN0XG4gICAgICogQG1lbWJlciB7b2JqZWN0fVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5hdHRyaWJ1dGVzID0gYXR0cmlidXRlcyB8fCB7fTtcblxuICAgIC8qKlxuICAgICAqIEludGVybmFsIHRleHR1cmUgY291bnRlclxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMudGV4dHVyZUNvdW50ID0gMTtcblxuICAgIC8qKlxuICAgICAqIFRoZSB2ZXJ0ZXggc2hhZGVyIGFzIGFuIGFycmF5IG9mIHN0cmluZ3NcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge3N0cmluZ31cbiAgICAgKi9cbiAgICB0aGlzLnZlcnRleFNyYyA9IHZlcnRleFNyYztcblxuICAgIC8qKlxuICAgICAqIFRoZSBmcmFnbWVudCBzaGFkZXIgYXMgYW4gYXJyYXkgb2Ygc3RyaW5nc1xuICAgICAqXG4gICAgICogQG1lbWJlciB7c3RyaW5nfVxuICAgICAqL1xuICAgIHRoaXMuZnJhZ21lbnRTcmMgPSBmcmFnbWVudFNyYztcblxuICAgIHRoaXMuaW5pdCgpO1xufVxuXG5TaGFkZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gU2hhZGVyO1xubW9kdWxlLmV4cG9ydHMgPSBTaGFkZXI7XG5cbi8qKlxuICogQ3JlYXRlcyB0aGUgc2hhZGVyIGFuZCB1c2VzIGl0XG4gKlxuICovXG5TaGFkZXIucHJvdG90eXBlLmluaXQgPSBmdW5jdGlvbiAoKVxue1xuICAgIHRoaXMuY29tcGlsZSgpO1xuXG4gICAgdGhpcy5nbC51c2VQcm9ncmFtKHRoaXMucHJvZ3JhbSk7XG5cbiAgICB0aGlzLmNhY2hlVW5pZm9ybUxvY2F0aW9ucyhPYmplY3Qua2V5cyh0aGlzLnVuaWZvcm1zKSk7XG4gICAgdGhpcy5jYWNoZUF0dHJpYnV0ZUxvY2F0aW9ucyhPYmplY3Qua2V5cyh0aGlzLmF0dHJpYnV0ZXMpKTtcbn07XG5cbi8qKlxuICogQ2FjaGVzIHRoZSBsb2NhdGlvbnMgb2YgdGhlIHVuaWZvcm0gZm9yIHJldXNlLlxuICpcbiAqIEBwYXJhbSBrZXlzIHtzdHJpbmd9IHRoZSB1bmlmb3JtcyB0byBjYWNoZVxuICovXG5TaGFkZXIucHJvdG90eXBlLmNhY2hlVW5pZm9ybUxvY2F0aW9ucyA9IGZ1bmN0aW9uIChrZXlzKVxue1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7ICsraSlcbiAgICB7XG4gICAgICAgIHRoaXMudW5pZm9ybXNba2V5c1tpXV0uX2xvY2F0aW9uID0gdGhpcy5nbC5nZXRVbmlmb3JtTG9jYXRpb24odGhpcy5wcm9ncmFtLCBrZXlzW2ldKTtcbiAgICB9XG59O1xuXG4vKipcbiAqIENhY2hlcyB0aGUgbG9jYXRpb25zIG9mIHRoZSBhdHRyaWJ1dGUgZm9yIHJldXNlLlxuICpcbiAqIEBwYXJhbSBrZXlzIHtzdHJpbmd9IHRoZSBhdHRyaWJ1dGVzIHRvIGNhY2hlXG4gKi9cblNoYWRlci5wcm90b3R5cGUuY2FjaGVBdHRyaWJ1dGVMb2NhdGlvbnMgPSBmdW5jdGlvbiAoa2V5cylcbntcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyArK2kpXG4gICAge1xuICAgICAgICB0aGlzLmF0dHJpYnV0ZXNba2V5c1tpXV0gPSB0aGlzLmdsLmdldEF0dHJpYkxvY2F0aW9uKHRoaXMucHJvZ3JhbSwga2V5c1tpXSk7XG4gICAgfVxuXG4gICAgLy8gVE9ETzogQ2hlY2sgaWYgdGhpcyBpcyBuZWVkZWQgYW55bW9yZS4uLlxuXG4gICAgLy8gQmVnaW4gd29yc3QgaGFjayBldmEgLy9cblxuICAgIC8vIFdIWT8/PyBPTkxZIG9uIG15IGNocm9tZSBwaXhlbCB0aGUgbGluZSBhYm92ZSByZXR1cm5zIC0xIHdoZW4gdXNpbmcgZmlsdGVycz9cbiAgICAvLyBtYXliZSBpdHMgc29tZXRoaW5nIHRvIGRvIHdpdGggdGhlIGN1cnJlbnQgc3RhdGUgb2YgdGhlIGdsIGNvbnRleHQuXG4gICAgLy8gSSdtIGNvbnZpbmNlZCB0aGlzIGlzIGEgYnVnIGluIHRoZSBjaHJvbWUgYnJvd3NlciBhcyB0aGVyZSBpcyBOTyByZWFzb24gd2h5IHRoaXMgc2hvdWxkIGJlIHJldHVybmluZyAtMSBlc3BlY2lhbGx5IGFzIGl0IG9ubHkgbWFuaWZlc3RzIG9uIG15IGNocm9tZSBwaXhlbFxuICAgIC8vIElmIHRoZXJlcyBhbnkgd2ViR0wgcGVvcGxlIHRoYXQga25vdyB3aHkgY291bGQgaGFwcGVuIHBsZWFzZSBoZWxwIDopXG4gICAgLy8gaWYgKHRoaXMuYXR0cmlidXRlcy5hQ29sb3IgPT09IC0xKXtcbiAgICAvLyAgICAgdGhpcy5hdHRyaWJ1dGVzLmFDb2xvciA9IDI7XG4gICAgLy8gfVxuXG4gICAgLy8gRW5kIHdvcnN0IGhhY2sgZXZhIC8vXG59O1xuXG4vKipcbiAqIEF0dGFjaGVzIHRoZSBzaGFkZXJzIGFuZCBjcmVhdGVzIHRoZSBwcm9ncmFtLlxuICpcbiAqIEByZXR1cm4ge1dlYkdMUHJvZ3JhbX1cbiAqL1xuU2hhZGVyLnByb3RvdHlwZS5jb21waWxlID0gZnVuY3Rpb24gKClcbntcbiAgICB2YXIgZ2wgPSB0aGlzLmdsO1xuXG4gICAgdmFyIGdsVmVydFNoYWRlciA9IHRoaXMuX2dsQ29tcGlsZShnbC5WRVJURVhfU0hBREVSLCB0aGlzLnZlcnRleFNyYyk7XG4gICAgdmFyIGdsRnJhZ1NoYWRlciA9IHRoaXMuX2dsQ29tcGlsZShnbC5GUkFHTUVOVF9TSEFERVIsIHRoaXMuZnJhZ21lbnRTcmMpO1xuXG4gICAgdmFyIHByb2dyYW0gPSBnbC5jcmVhdGVQcm9ncmFtKCk7XG5cbiAgICBnbC5hdHRhY2hTaGFkZXIocHJvZ3JhbSwgZ2xWZXJ0U2hhZGVyKTtcbiAgICBnbC5hdHRhY2hTaGFkZXIocHJvZ3JhbSwgZ2xGcmFnU2hhZGVyKTtcbiAgICBnbC5saW5rUHJvZ3JhbShwcm9ncmFtKTtcblxuICAgIC8vIGlmIGxpbmtpbmcgZmFpbHMsIHRoZW4gbG9nIGFuZCBjbGVhbnVwXG4gICAgaWYgKCFnbC5nZXRQcm9ncmFtUGFyYW1ldGVyKHByb2dyYW0sIGdsLkxJTktfU1RBVFVTKSlcbiAgICB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ1BpeGkuanMgRXJyb3I6IENvdWxkIG5vdCBpbml0aWFsaXplIHNoYWRlci4nKTtcbiAgICAgICAgY29uc29sZS5lcnJvcignZ2wuVkFMSURBVEVfU1RBVFVTJywgZ2wuZ2V0UHJvZ3JhbVBhcmFtZXRlcihwcm9ncmFtLCBnbC5WQUxJREFURV9TVEFUVVMpKTtcbiAgICAgICAgY29uc29sZS5lcnJvcignZ2wuZ2V0RXJyb3IoKScsIGdsLmdldEVycm9yKCkpO1xuXG4gICAgICAgIC8vIGlmIHRoZXJlIGlzIGEgcHJvZ3JhbSBpbmZvIGxvZywgbG9nIGl0XG4gICAgICAgIGlmIChnbC5nZXRQcm9ncmFtSW5mb0xvZyhwcm9ncmFtKSAhPT0gJycpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignUGl4aS5qcyBXYXJuaW5nOiBnbC5nZXRQcm9ncmFtSW5mb0xvZygpJywgZ2wuZ2V0UHJvZ3JhbUluZm9Mb2cocHJvZ3JhbSkpO1xuICAgICAgICB9XG5cbiAgICAgICAgZ2wuZGVsZXRlUHJvZ3JhbShwcm9ncmFtKTtcbiAgICAgICAgcHJvZ3JhbSA9IG51bGw7XG4gICAgfVxuXG4gICAgLy8gY2xlYW4gdXAgc29tZSBzaGFkZXJzXG4gICAgZ2wuZGVsZXRlU2hhZGVyKGdsVmVydFNoYWRlcik7XG4gICAgZ2wuZGVsZXRlU2hhZGVyKGdsRnJhZ1NoYWRlcik7XG5cbiAgICByZXR1cm4gKHRoaXMucHJvZ3JhbSA9IHByb2dyYW0pO1xufTtcblxuLyoqXG4qIEFkZHMgYSBuZXcgdW5pZm9ybVxuKlxuKiBAcGFyYW0gdW5pZm9ybSB7b2JqZWN0fSB0aGUgbmV3IHVuaWZvcm0gdG8gYXR0YWNoXG4qL1xuU2hhZGVyLnByb3RvdHlwZS5zeW5jVW5pZm9ybSA9IGZ1bmN0aW9uICh1bmlmb3JtKVxue1xuICAgIHZhciBsb2NhdGlvbiA9IHVuaWZvcm0uX2xvY2F0aW9uLFxuICAgICAgICB2YWx1ZSA9IHVuaWZvcm0udmFsdWUsXG4gICAgICAgIGdsID0gdGhpcy5nbCxcbiAgICAgICAgaSwgaWw7XG5cbiAgICBzd2l0Y2ggKHVuaWZvcm0udHlwZSlcbiAgICB7XG4gICAgICAgIGNhc2UgJ2InOlxuICAgICAgICBjYXNlICdib29sJzpcbiAgICAgICAgY2FzZSAnYm9vbGVhbic6XG4gICAgICAgICAgICBnbC51bmlmb3JtMWkobG9jYXRpb24sIHZhbHVlID8gMSA6IDApO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLy8gc2luZ2xlIGludCB2YWx1ZVxuICAgICAgICBjYXNlICdpJzpcbiAgICAgICAgY2FzZSAnMWknOlxuICAgICAgICAgICAgZ2wudW5pZm9ybTFpKGxvY2F0aW9uLCB2YWx1ZSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAvLyBzaW5nbGUgZmxvYXQgdmFsdWVcbiAgICAgICAgY2FzZSAnZic6XG4gICAgICAgIGNhc2UgJzFmJzpcbiAgICAgICAgICAgIGdsLnVuaWZvcm0xZihsb2NhdGlvbiwgdmFsdWUpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLy8gRmxvYXQzMkFycmF5KDIpIG9yIEpTIEFycnJheVxuICAgICAgICBjYXNlICcyZic6XG4gICAgICAgICAgICBnbC51bmlmb3JtMmYobG9jYXRpb24sIHZhbHVlWzBdLCB2YWx1ZVsxXSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAvLyBGbG9hdDMyQXJyYXkoMykgb3IgSlMgQXJycmF5XG4gICAgICAgIGNhc2UgJzNmJzpcbiAgICAgICAgICAgIGdsLnVuaWZvcm0zZihsb2NhdGlvbiwgdmFsdWVbMF0sIHZhbHVlWzFdLCB2YWx1ZVsyXSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAvLyBGbG9hdDMyQXJyYXkoNCkgb3IgSlMgQXJycmF5XG4gICAgICAgIGNhc2UgJzRmJzpcbiAgICAgICAgICAgIGdsLnVuaWZvcm00Zihsb2NhdGlvbiwgdmFsdWVbMF0sIHZhbHVlWzFdLCB2YWx1ZVsyXSwgdmFsdWVbM10pO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLy8gYSAyRCBQb2ludCBvYmplY3RcbiAgICAgICAgY2FzZSAndjInOlxuICAgICAgICAgICAgZ2wudW5pZm9ybTJmKGxvY2F0aW9uLCB2YWx1ZS54LCB2YWx1ZS55KTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIC8vIGEgM0QgUG9pbnQgb2JqZWN0XG4gICAgICAgIGNhc2UgJ3YzJzpcbiAgICAgICAgICAgIGdsLnVuaWZvcm0zZihsb2NhdGlvbiwgdmFsdWUueCwgdmFsdWUueSwgdmFsdWUueik7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAvLyBhIDREIFBvaW50IG9iamVjdFxuICAgICAgICBjYXNlICd2NCc6XG4gICAgICAgICAgICBnbC51bmlmb3JtNGYobG9jYXRpb24sIHZhbHVlLngsIHZhbHVlLnksIHZhbHVlLnosIHZhbHVlLncpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLy8gSW50MzJBcnJheSBvciBKUyBBcnJheVxuICAgICAgICBjYXNlICcxaXYnOlxuICAgICAgICAgICAgZ2wudW5pZm9ybTFpdihsb2NhdGlvbiwgdmFsdWUpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLy8gSW50MzJBcnJheSBvciBKUyBBcnJheVxuICAgICAgICBjYXNlICcyaXYnOlxuICAgICAgICAgICAgZ2wudW5pZm9ybTJpdihsb2NhdGlvbiwgdmFsdWUpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLy8gSW50MzJBcnJheSBvciBKUyBBcnJheVxuICAgICAgICBjYXNlICczaXYnOlxuICAgICAgICAgICAgZ2wudW5pZm9ybTNpdihsb2NhdGlvbiwgdmFsdWUpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLy8gSW50MzJBcnJheSBvciBKUyBBcnJheVxuICAgICAgICBjYXNlICc0aXYnOlxuICAgICAgICAgICAgZ2wudW5pZm9ybTRpdihsb2NhdGlvbiwgdmFsdWUpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLy8gRmxvYXQzMkFycmF5IG9yIEpTIEFycmF5XG4gICAgICAgIGNhc2UgJzFmdic6XG4gICAgICAgICAgICBnbC51bmlmb3JtMWZ2KGxvY2F0aW9uLCB2YWx1ZSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAvLyBGbG9hdDMyQXJyYXkgb3IgSlMgQXJyYXlcbiAgICAgICAgY2FzZSAnMmZ2JzpcbiAgICAgICAgICAgIGdsLnVuaWZvcm0yZnYobG9jYXRpb24sIHZhbHVlKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIC8vIEZsb2F0MzJBcnJheSBvciBKUyBBcnJheVxuICAgICAgICBjYXNlICczZnYnOlxuICAgICAgICAgICAgZ2wudW5pZm9ybTNmdihsb2NhdGlvbiwgdmFsdWUpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLy8gRmxvYXQzMkFycmF5IG9yIEpTIEFycmF5XG4gICAgICAgIGNhc2UgJzRmdic6XG4gICAgICAgICAgICBnbC51bmlmb3JtNGZ2KGxvY2F0aW9uLCB2YWx1ZSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAvLyBGbG9hdDMyQXJyYXkgb3IgSlMgQXJyYXlcbiAgICAgICAgY2FzZSAnbTInOlxuICAgICAgICBjYXNlICdtYXQyJzpcbiAgICAgICAgY2FzZSAnTWF0cml4MmZ2JzpcbiAgICAgICAgICAgIGdsLnVuaWZvcm1NYXRyaXgyZnYobG9jYXRpb24sIHVuaWZvcm0udHJhbnNwb3NlLCB2YWx1ZSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAvLyBGbG9hdDMyQXJyYXkgb3IgSlMgQXJyYXlcbiAgICAgICAgY2FzZSAnbTMnOlxuICAgICAgICBjYXNlICdtYXQzJzpcbiAgICAgICAgY2FzZSAnTWF0cml4M2Z2JzpcblxuICAgICAgICAgICAgZ2wudW5pZm9ybU1hdHJpeDNmdihsb2NhdGlvbiwgdW5pZm9ybS50cmFuc3Bvc2UsIHZhbHVlKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIC8vIEZsb2F0MzJBcnJheSBvciBKUyBBcnJheVxuICAgICAgICBjYXNlICdtNCc6XG4gICAgICAgIGNhc2UgJ21hdDQnOlxuICAgICAgICBjYXNlICdNYXRyaXg0ZnYnOlxuICAgICAgICAgICAgZ2wudW5pZm9ybU1hdHJpeDRmdihsb2NhdGlvbiwgdW5pZm9ybS50cmFuc3Bvc2UsIHZhbHVlKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIC8vIGEgQ29sb3IgVmFsdWVcbiAgICAgICAgY2FzZSAnYyc6XG4gICAgICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJylcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB2YWx1ZSA9IHV0aWxzLmhleDJyZ2IodmFsdWUpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBnbC51bmlmb3JtM2YobG9jYXRpb24sIHZhbHVlWzBdLCB2YWx1ZVsxXSwgdmFsdWVbMl0pO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLy8gZmxhdCBhcnJheSBvZiBpbnRlZ2VycyAoSlMgb3IgdHlwZWQgYXJyYXkpXG4gICAgICAgIGNhc2UgJ2l2MSc6XG4gICAgICAgICAgICBnbC51bmlmb3JtMWl2KGxvY2F0aW9uLCB2YWx1ZSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAvLyBmbGF0IGFycmF5IG9mIGludGVnZXJzIHdpdGggMyB4IE4gc2l6ZSAoSlMgb3IgdHlwZWQgYXJyYXkpXG4gICAgICAgIGNhc2UgJ2l2JzpcbiAgICAgICAgICAgIGdsLnVuaWZvcm0zaXYobG9jYXRpb24sIHZhbHVlKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIC8vIGZsYXQgYXJyYXkgb2YgZmxvYXRzIChKUyBvciB0eXBlZCBhcnJheSlcbiAgICAgICAgY2FzZSAnZnYxJzpcbiAgICAgICAgICAgIGdsLnVuaWZvcm0xZnYobG9jYXRpb24sIHZhbHVlKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIC8vIGZsYXQgYXJyYXkgb2YgZmxvYXRzIHdpdGggMyB4IE4gc2l6ZSAoSlMgb3IgdHlwZWQgYXJyYXkpXG4gICAgICAgIGNhc2UgJ2Z2JzpcbiAgICAgICAgICAgIGdsLnVuaWZvcm0zZnYobG9jYXRpb24sIHZhbHVlKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIC8vIGFycmF5IG9mIDJEIFBvaW50IG9iamVjdHNcbiAgICAgICAgY2FzZSAndjJ2JzpcbiAgICAgICAgICAgIGlmICghdW5pZm9ybS5fYXJyYXkpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdW5pZm9ybS5fYXJyYXkgPSBuZXcgRmxvYXQzMkFycmF5KDIgKiB2YWx1ZS5sZW5ndGgpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBmb3IgKGkgPSAwLCBpbCA9IHZhbHVlLmxlbmd0aDsgaSA8IGlsOyArK2kpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdW5pZm9ybS5fYXJyYXlbaSAqIDJdICAgICAgID0gdmFsdWVbaV0ueDtcbiAgICAgICAgICAgICAgICB1bmlmb3JtLl9hcnJheVtpICogMiArIDFdICAgPSB2YWx1ZVtpXS55O1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBnbC51bmlmb3JtMmZ2KGxvY2F0aW9uLCB1bmlmb3JtLl9hcnJheSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAvLyBhcnJheSBvZiAzRCBQb2ludCBvYmplY3RzXG4gICAgICAgIGNhc2UgJ3Yzdic6XG4gICAgICAgICAgICBpZiAoIXVuaWZvcm0uX2FycmF5KVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHVuaWZvcm0uX2FycmF5ID0gbmV3IEZsb2F0MzJBcnJheSgzICogdmFsdWUubGVuZ3RoKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZm9yIChpID0gMCwgaWwgPSB2YWx1ZS5sZW5ndGg7IGkgPCBpbDsgKytpKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHVuaWZvcm0uX2FycmF5W2kgKiAzXSAgICAgICA9IHZhbHVlW2ldLng7XG4gICAgICAgICAgICAgICAgdW5pZm9ybS5fYXJyYXlbaSAqIDMgKyAxXSAgID0gdmFsdWVbaV0ueTtcbiAgICAgICAgICAgICAgICB1bmlmb3JtLl9hcnJheVtpICogMyArIDJdICAgPSB2YWx1ZVtpXS56O1xuXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGdsLnVuaWZvcm0zZnYobG9jYXRpb24sIHVuaWZvcm0uX2FycmF5KTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIC8vIGFycmF5IG9mIDREIFBvaW50IG9iamVjdHNcbiAgICAgICAgY2FzZSAndjR2JzpcbiAgICAgICAgICAgIGlmICghdW5pZm9ybS5fYXJyYXkpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdW5pZm9ybS5fYXJyYXkgPSBuZXcgRmxvYXQzMkFycmF5KDQgKiB2YWx1ZS5sZW5ndGgpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBmb3IgKGkgPSAwLCBpbCA9IHZhbHVlLmxlbmd0aDsgaSA8IGlsOyArK2kpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdW5pZm9ybS5fYXJyYXlbaSAqIDRdICAgICAgID0gdmFsdWVbaV0ueDtcbiAgICAgICAgICAgICAgICB1bmlmb3JtLl9hcnJheVtpICogNCArIDFdICAgPSB2YWx1ZVtpXS55O1xuICAgICAgICAgICAgICAgIHVuaWZvcm0uX2FycmF5W2kgKiA0ICsgMl0gICA9IHZhbHVlW2ldLno7XG4gICAgICAgICAgICAgICAgdW5pZm9ybS5fYXJyYXlbaSAqIDQgKyAzXSAgID0gdmFsdWVbaV0udztcblxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBnbC51bmlmb3JtNGZ2KGxvY2F0aW9uLCB1bmlmb3JtLl9hcnJheSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAvLyBQSVhJLlRleHR1cmVcbiAgICAgICAgY2FzZSAndCc6XG4gICAgICAgIGNhc2UgJ3NhbXBsZXIyRCc6XG5cbiAgICAgICAgICAgIGlmICghdW5pZm9ybS52YWx1ZSB8fCAhdW5pZm9ybS52YWx1ZS5iYXNlVGV4dHVyZS5oYXNMb2FkZWQpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIGFjdGl2YXRlIHRoaXMgdGV4dHVyZVxuICAgICAgICAgICAgZ2wuYWN0aXZlVGV4dHVyZShnbFsnVEVYVFVSRScgKyB0aGlzLnRleHR1cmVDb3VudF0pO1xuXG4gICAgICAgICAgICB2YXIgdGV4dHVyZSA9IHVuaWZvcm0udmFsdWUuYmFzZVRleHR1cmUuX2dsVGV4dHVyZXNbZ2wuaWRdO1xuXG4gICAgICAgICAgICBpZiAoIXRleHR1cmUpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdGhpcy5pbml0U2FtcGxlcjJEKHVuaWZvcm0pO1xuXG4gICAgICAgICAgICAgICAgLy8gc2V0IHRoZSB0ZXh0dXIgdG8gdGhlIG5ld2x5IGNyZWF0ZWQgb25lLi5cbiAgICAgICAgICAgICAgICB0ZXh0dXJlID0gdW5pZm9ybS52YWx1ZS5iYXNlVGV4dHVyZS5fZ2xUZXh0dXJlc1tnbC5pZF07XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIGJpbmQgdGhlIHRleHR1cmVcbiAgICAgICAgICAgIGdsLmJpbmRUZXh0dXJlKGdsLlRFWFRVUkVfMkQsIHRleHR1cmUpO1xuXG4gICAgICAgICAgICAvLyBzZXQgdW5pZm9ybSB0byB0ZXh0dXJlIGluZGV4XG4gICAgICAgICAgICBnbC51bmlmb3JtMWkodW5pZm9ybS5fbG9jYXRpb24sIHRoaXMudGV4dHVyZUNvdW50KTtcblxuICAgICAgICAgICAgLy8gaW5jcmVtZW50IG5leHQgdGV4dHVyZSBpZFxuICAgICAgICAgICAgdGhpcy50ZXh0dXJlQ291bnQrKztcblxuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignUGl4aS5qcyBTaGFkZXIgV2FybmluZzogVW5rbm93biB1bmlmb3JtIHR5cGU6ICcgKyB1bmlmb3JtLnR5cGUpO1xuICAgIH1cbn07XG5cbi8qKlxuICogVXBkYXRlcyB0aGUgc2hhZGVyIHVuaWZvcm0gdmFsdWVzLlxuICpcbiAqL1xuU2hhZGVyLnByb3RvdHlwZS5zeW5jVW5pZm9ybXMgPSBmdW5jdGlvbiAoKVxue1xuICAgIHRoaXMudGV4dHVyZUNvdW50ID0gMTtcblxuICAgIGZvciAodmFyIGtleSBpbiB0aGlzLnVuaWZvcm1zKVxuICAgIHtcbiAgICAgICAgdGhpcy5zeW5jVW5pZm9ybSh0aGlzLnVuaWZvcm1zW2tleV0pO1xuICAgIH1cbn07XG5cblxuLyoqXG4gKiBJbml0aWFsaXNlcyBhIFNhbXBsZXIyRCB1bmlmb3JtICh3aGljaCBtYXkgb25seSBiZSBhdmFpbGFibGUgbGF0ZXIgb24gYWZ0ZXIgaW5pdFVuaWZvcm1zIG9uY2UgdGhlIHRleHR1cmUgaGFzIGxvYWRlZClcbiAqXG4gKi9cblNoYWRlci5wcm90b3R5cGUuaW5pdFNhbXBsZXIyRCA9IGZ1bmN0aW9uICh1bmlmb3JtKVxue1xuICAgIHZhciBnbCA9IHRoaXMuZ2w7XG5cbiAgICB2YXIgdGV4dHVyZSA9IHVuaWZvcm0udmFsdWUuYmFzZVRleHR1cmU7XG5cbiAgICBpZighdGV4dHVyZS5oYXNMb2FkZWQpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG5cblxuICAgIGlmICh1bmlmb3JtLnRleHR1cmVEYXRhKVxuICAgIHtcblxuICAgICAgICAvL1RPRE8gbW92ZSB0aGlzLi4uXG4gICAgICAgIHZhciBkYXRhID0gdW5pZm9ybS50ZXh0dXJlRGF0YTtcblxuICAgICAgICB0ZXh0dXJlLl9nbFRleHR1cmVzW2dsLmlkXSA9IGdsLmNyZWF0ZVRleHR1cmUoKTtcblxuICAgICAgICBnbC5iaW5kVGV4dHVyZShnbC5URVhUVVJFXzJELCB0ZXh0dXJlLl9nbFRleHR1cmVzW2dsLmlkXSk7XG5cbiAgICAgICAgZ2wucGl4ZWxTdG9yZWkoZ2wuVU5QQUNLX1BSRU1VTFRJUExZX0FMUEhBX1dFQkdMLCB0ZXh0dXJlLnByZW11bHRpcGxpZWRBbHBoYSk7XG4gICAgICAgIC8vIEdMVGV4dHVyZSA9IG1hZyBsaW5lYXIsIG1pbiBsaW5lYXJfbWlwbWFwX2xpbmVhciwgd3JhcCByZXBlYXQgKyBnbC5nZW5lcmF0ZU1pcG1hcChnbC5URVhUVVJFXzJEKTtcbiAgICAgICAgLy8gR0xUZXh0dXJlTGluZWFyID0gbWFnL21pbiBsaW5lYXIsIHdyYXAgY2xhbXBcbiAgICAgICAgLy8gR0xUZXh0dXJlTmVhcmVzdFJlcGVhdCA9IG1hZy9taW4gTkVBUkVTVCwgd3JhcCByZXBlYXRcbiAgICAgICAgLy8gR0xUZXh0dXJlTmVhcmVzdCA9IG1hZy9taW4gbmVhcmVzdCwgd3JhcCBjbGFtcFxuICAgICAgICAvLyBBdWRpb1RleHR1cmUgPSB3aGF0ZXZlciArIGx1bWluYW5jZSArIHdpZHRoIDUxMiwgaGVpZ2h0IDIsIGJvcmRlciAwXG4gICAgICAgIC8vIEtleVRleHR1cmUgPSB3aGF0ZXZlciArIGx1bWluYW5jZSArIHdpZHRoIDI1NiwgaGVpZ2h0IDIsIGJvcmRlciAwXG5cbiAgICAgICAgLy8gIG1hZ0ZpbHRlciBjYW4gYmU6IGdsLkxJTkVBUiwgZ2wuTElORUFSX01JUE1BUF9MSU5FQVIgb3IgZ2wuTkVBUkVTVFxuICAgICAgICAvLyAgd3JhcFMvVCBjYW4gYmU6IGdsLkNMQU1QX1RPX0VER0Ugb3IgZ2wuUkVQRUFUXG5cbiAgICAgICAgZ2wudGV4SW1hZ2UyRChnbC5URVhUVVJFXzJELCAwLCBkYXRhLmx1bWluYW5jZSA/IGdsLkxVTUlOQU5DRSA6IGdsLlJHQkEsIGdsLlJHQkEsIGdsLlVOU0lHTkVEX0JZVEUsIHRleHR1cmUuc291cmNlKTtcblxuICAgICAgICBnbC50ZXhQYXJhbWV0ZXJpKGdsLlRFWFRVUkVfMkQsIGdsLlRFWFRVUkVfTUFHX0ZJTFRFUiwgZGF0YS5tYWdGaWx0ZXIgPyBkYXRhLm1hZ0ZpbHRlciA6IGdsLkxJTkVBUiApO1xuICAgICAgICBnbC50ZXhQYXJhbWV0ZXJpKGdsLlRFWFRVUkVfMkQsIGdsLlRFWFRVUkVfTUlOX0ZJTFRFUiwgZGF0YS53cmFwUyA/IGRhdGEud3JhcFMgOiBnbC5DTEFNUF9UT19FREdFICk7XG5cbiAgICAgICAgZ2wudGV4UGFyYW1ldGVyaShnbC5URVhUVVJFXzJELCBnbC5URVhUVVJFX1dSQVBfVCwgZGF0YS53cmFwUyA/IGRhdGEud3JhcFMgOiBnbC5DTEFNUF9UT19FREdFKTtcbiAgICAgICAgZ2wudGV4UGFyYW1ldGVyaShnbC5URVhUVVJFXzJELCBnbC5URVhUVVJFX1dSQVBfUywgZGF0YS53cmFwVCA/IGRhdGEud3JhcFQgOiBnbC5DTEFNUF9UT19FREdFKTtcbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgdGhpcy5zaGFkZXJNYW5hZ2VyLnJlbmRlcmVyLnVwZGF0ZVRleHR1cmUodGV4dHVyZSk7XG4gICAgfVxufTtcblxuLyoqXG4gKiBEZXN0cm95cyB0aGUgc2hhZGVyLlxuICpcbiAqL1xuU2hhZGVyLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLmdsLmRlbGV0ZVByb2dyYW0odGhpcy5wcm9ncmFtKTtcblxuICAgIHRoaXMuZ2wgPSBudWxsO1xuICAgIHRoaXMudW5pZm9ybXMgPSBudWxsO1xuICAgIHRoaXMuYXR0cmlidXRlcyA9IG51bGw7XG5cbiAgICB0aGlzLnZlcnRleFNyYyA9IG51bGw7XG4gICAgdGhpcy5mcmFnbWVudFNyYyA9IG51bGw7XG59O1xuXG5TaGFkZXIucHJvdG90eXBlLl9nbENvbXBpbGUgPSBmdW5jdGlvbiAodHlwZSwgc3JjKVxue1xuICAgIHZhciBzaGFkZXIgPSB0aGlzLmdsLmNyZWF0ZVNoYWRlcih0eXBlKTtcblxuICAgIHRoaXMuZ2wuc2hhZGVyU291cmNlKHNoYWRlciwgc3JjKTtcbiAgICB0aGlzLmdsLmNvbXBpbGVTaGFkZXIoc2hhZGVyKTtcblxuICAgIGlmICghdGhpcy5nbC5nZXRTaGFkZXJQYXJhbWV0ZXIoc2hhZGVyLCB0aGlzLmdsLkNPTVBJTEVfU1RBVFVTKSlcbiAgICB7XG4gICAgICAgIGNvbnNvbGUubG9nKHRoaXMuZ2wuZ2V0U2hhZGVySW5mb0xvZyhzaGFkZXIpKTtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgcmV0dXJuIHNoYWRlcjtcbn07XG4iLCJ2YXIgU2hhZGVyID0gcmVxdWlyZSgnLi9TaGFkZXInKTtcblxuLyoqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAZXh0ZW5kcyBQSVhJLlNoYWRlclxuICogQHBhcmFtIHNoYWRlck1hbmFnZXIge1BJWEkuU2hhZGVyTWFuYWdlcn0gVGhlIHdlYmdsIHNoYWRlciBtYW5hZ2VyIHRoaXMgc2hhZGVyIHdvcmtzIGZvci5cbiAqIEBwYXJhbSBbdmVydGV4U3JjXSB7c3RyaW5nfSBUaGUgc291cmNlIG9mIHRoZSB2ZXJ0ZXggc2hhZGVyLlxuICogQHBhcmFtIFtmcmFnbWVudFNyY10ge3N0cmluZ30gVGhlIHNvdXJjZSBvZiB0aGUgZnJhZ21lbnQgc2hhZGVyLlxuICogQHBhcmFtIFtjdXN0b21Vbmlmb3Jtc10ge29iamVjdH0gQ3VzdG9tIHVuaWZvcm1zIHRvIHVzZSB0byBhdWdtZW50IHRoZSBidWlsdC1pbiBvbmVzLlxuICogQHBhcmFtIFtmcmFnbWVudFNyY10ge3N0cmluZ30gVGhlIHNvdXJjZSBvZiB0aGUgZnJhZ21lbnQgc2hhZGVyLlxuICovXG5mdW5jdGlvbiBUZXh0dXJlU2hhZGVyKHNoYWRlck1hbmFnZXIsIHZlcnRleFNyYywgZnJhZ21lbnRTcmMsIGN1c3RvbVVuaWZvcm1zLCBjdXN0b21BdHRyaWJ1dGVzKVxue1xuICAgIHZhciB1bmlmb3JtcyA9IHtcblxuICAgICAgICB1U2FtcGxlcjogICAgICAgICAgIHsgdHlwZTogJ3NhbXBsZXIyRCcsIHZhbHVlOiAwIH0sXG4gICAgICAgIHByb2plY3Rpb25NYXRyaXg6ICAgeyB0eXBlOiAnbWF0MycsIHZhbHVlOiBuZXcgRmxvYXQzMkFycmF5KFsxLCAwLCAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgMSwgMCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsIDAsIDFdKSB9XG4gICAgfTtcblxuICAgIGlmIChjdXN0b21Vbmlmb3JtcylcbiAgICB7XG4gICAgICAgIGZvciAodmFyIHUgaW4gY3VzdG9tVW5pZm9ybXMpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHVuaWZvcm1zW3VdID0gY3VzdG9tVW5pZm9ybXNbdV07XG4gICAgICAgIH1cbiAgICB9XG5cblxuICAgIHZhciBhdHRyaWJ1dGVzID0ge1xuICAgICAgICBhVmVydGV4UG9zaXRpb246ICAgIDAsXG4gICAgICAgIGFUZXh0dXJlQ29vcmQ6ICAgICAgMCxcbiAgICAgICAgYUNvbG9yOiAgICAgICAgICAgICAwXG4gICAgfTtcblxuICAgIGlmIChjdXN0b21BdHRyaWJ1dGVzKVxuICAgIHtcbiAgICAgICAgZm9yICh2YXIgYSBpbiBjdXN0b21BdHRyaWJ1dGVzKVxuICAgICAgICB7XG4gICAgICAgICAgICBhdHRyaWJ1dGVzW2FdID0gY3VzdG9tQXR0cmlidXRlc1thXTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoZSB2ZXJ0ZXggc2hhZGVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7c3RyaW5nfVxuICAgICAqL1xuICAgIHZlcnRleFNyYyA9IHZlcnRleFNyYyB8fCBUZXh0dXJlU2hhZGVyLmRlZmF1bHRWZXJ0ZXhTcmM7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgZnJhZ21lbnQgc2hhZGVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7c3RyaW5nfVxuICAgICAqL1xuICAgIGZyYWdtZW50U3JjID0gZnJhZ21lbnRTcmMgfHwgVGV4dHVyZVNoYWRlci5kZWZhdWx0RnJhZ21lbnRTcmM7XG5cbiAgICBTaGFkZXIuY2FsbCh0aGlzLCBzaGFkZXJNYW5hZ2VyLCB2ZXJ0ZXhTcmMsIGZyYWdtZW50U3JjLCB1bmlmb3JtcywgYXR0cmlidXRlcyk7XG59XG5cbi8vIGNvbnN0cnVjdG9yXG5UZXh0dXJlU2hhZGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoU2hhZGVyLnByb3RvdHlwZSk7XG5UZXh0dXJlU2hhZGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFRleHR1cmVTaGFkZXI7XG5tb2R1bGUuZXhwb3J0cyA9IFRleHR1cmVTaGFkZXI7XG5cbi8qKlxuICogVGhlIGRlZmF1bHQgdmVydGV4IHNoYWRlciBzb3VyY2VcbiAqXG4gKiBAc3RhdGljXG4gKiBAY29uc3RhbnRcbiAqL1xuVGV4dHVyZVNoYWRlci5kZWZhdWx0VmVydGV4U3JjID0gW1xuICAgICdwcmVjaXNpb24gbG93cCBmbG9hdDsnLFxuICAgICdhdHRyaWJ1dGUgdmVjMiBhVmVydGV4UG9zaXRpb247JyxcbiAgICAnYXR0cmlidXRlIHZlYzIgYVRleHR1cmVDb29yZDsnLFxuICAgICdhdHRyaWJ1dGUgdmVjNCBhQ29sb3I7JyxcblxuICAgICd1bmlmb3JtIG1hdDMgcHJvamVjdGlvbk1hdHJpeDsnLFxuXG4gICAgJ3ZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkOycsXG4gICAgJ3ZhcnlpbmcgdmVjNCB2Q29sb3I7JyxcblxuICAgICd2b2lkIG1haW4odm9pZCl7JyxcbiAgICAnICAgZ2xfUG9zaXRpb24gPSB2ZWM0KChwcm9qZWN0aW9uTWF0cml4ICogdmVjMyhhVmVydGV4UG9zaXRpb24sIDEuMCkpLnh5LCAwLjAsIDEuMCk7JyxcbiAgICAnICAgdlRleHR1cmVDb29yZCA9IGFUZXh0dXJlQ29vcmQ7JyxcbiAgICAnICAgdkNvbG9yID0gdmVjNChhQ29sb3IucmdiICogYUNvbG9yLmEsIGFDb2xvci5hKTsnLFxuICAgICd9J1xuXS5qb2luKCdcXG4nKTtcblxuLyoqXG4gKiBUaGUgZGVmYXVsdCBmcmFnbWVudCBzaGFkZXIgc291cmNlXG4gKlxuICogQHN0YXRpY1xuICogQGNvbnN0YW50XG4gKi9cblRleHR1cmVTaGFkZXIuZGVmYXVsdEZyYWdtZW50U3JjID0gW1xuICAgICdwcmVjaXNpb24gbG93cCBmbG9hdDsnLFxuXG4gICAgJ3ZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkOycsXG4gICAgJ3ZhcnlpbmcgdmVjNCB2Q29sb3I7JyxcblxuICAgICd1bmlmb3JtIHNhbXBsZXIyRCB1U2FtcGxlcjsnLFxuXG4gICAgJ3ZvaWQgbWFpbih2b2lkKXsnLFxuICAgICcgICBnbF9GcmFnQ29sb3IgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZUZXh0dXJlQ29vcmQpICogdkNvbG9yIDsnLFxuICAgICd9J1xuXS5qb2luKCdcXG4nKTtcbiIsInZhciBTaGFkZXIgPSByZXF1aXJlKCdwaXhpLWdsLWNvcmUnKS5HTFNoYWRlcjtcblxuLyoqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAZXh0ZW5kcyBQSVhJLlNoYWRlclxuICogQHBhcmFtIHNoYWRlck1hbmFnZXIge1BJWEkuU2hhZGVyTWFuYWdlcn0gVGhlIHdlYmdsIHNoYWRlciBtYW5hZ2VyIHRoaXMgc2hhZGVyIHdvcmtzIGZvci5cbiAqIEBwYXJhbSBbdmVydGV4U3JjXSB7c3RyaW5nfSBUaGUgc291cmNlIG9mIHRoZSB2ZXJ0ZXggc2hhZGVyLlxuICogQHBhcmFtIFtmcmFnbWVudFNyY10ge3N0cmluZ30gVGhlIHNvdXJjZSBvZiB0aGUgZnJhZ21lbnQgc2hhZGVyLlxuICogQHBhcmFtIFtjdXN0b21Vbmlmb3Jtc10ge29iamVjdH0gQ3VzdG9tIHVuaWZvcm1zIHRvIHVzZSB0byBhdWdtZW50IHRoZSBidWlsdC1pbiBvbmVzLlxuICogQHBhcmFtIFtmcmFnbWVudFNyY10ge3N0cmluZ30gVGhlIHNvdXJjZSBvZiB0aGUgZnJhZ21lbnQgc2hhZGVyLlxuICovXG5mdW5jdGlvbiBUZXh0dXJlU2hhZGVyKGdsKVxue1xuICAgIC8qKlxuICAgICAqIFRoZSB2ZXJ0ZXggc2hhZGVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7c3RyaW5nfVxuICAgICAqL1xuICAgIHZlcnRleFNyYyA9IFRleHR1cmVTaGFkZXIuZGVmYXVsdFZlcnRleFNyYztcblxuICAgIC8qKlxuICAgICAqIFRoZSBmcmFnbWVudCBzaGFkZXIuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtzdHJpbmd9XG4gICAgICovXG4gICAgZnJhZ21lbnRTcmMgPSBUZXh0dXJlU2hhZGVyLmRlZmF1bHRGcmFnbWVudFNyYztcblxuICAgIFNoYWRlci5jYWxsKHRoaXMsIGdsLCB2ZXJ0ZXhTcmMsIGZyYWdtZW50U3JjKTsvLywgdW5pZm9ybXMsIGF0dHJpYnV0ZXMpO1xuXG59XG5cbi8vIGNvbnN0cnVjdG9yXG5UZXh0dXJlU2hhZGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoU2hhZGVyLnByb3RvdHlwZSk7XG5UZXh0dXJlU2hhZGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFRleHR1cmVTaGFkZXI7XG5tb2R1bGUuZXhwb3J0cyA9IFRleHR1cmVTaGFkZXI7XG5cbi8qKlxuICogVGhlIGRlZmF1bHQgdmVydGV4IHNoYWRlciBzb3VyY2VcbiAqXG4gKiBAc3RhdGljXG4gKiBAY29uc3RhbnRcbiAqL1xuVGV4dHVyZVNoYWRlci5kZWZhdWx0VmVydGV4U3JjID0gW1xuICAgICdwcmVjaXNpb24gbG93cCBmbG9hdDsnLFxuICAgICdhdHRyaWJ1dGUgdmVjMiBhVmVydGV4UG9zaXRpb247JyxcbiAgICAnYXR0cmlidXRlIHZlYzIgYVRleHR1cmVDb29yZDsnLFxuICAgICdhdHRyaWJ1dGUgdmVjNCBhQ29sb3I7JyxcblxuICAgICd1bmlmb3JtIG1hdDMgcHJvamVjdGlvbk1hdHJpeDsnLFxuXG4gICAgJ3ZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkOycsXG4gICAgJ3ZhcnlpbmcgdmVjNCB2Q29sb3I7JyxcblxuICAgICd2b2lkIG1haW4odm9pZCl7JyxcbiAgICAnICAgZ2xfUG9zaXRpb24gPSB2ZWM0KChwcm9qZWN0aW9uTWF0cml4ICogdmVjMyhhVmVydGV4UG9zaXRpb24sIDEuMCkpLnh5LCAwLjAsIDEuMCk7JyxcbiAgICAnICAgdlRleHR1cmVDb29yZCA9IGFUZXh0dXJlQ29vcmQ7JyxcbiAgICAnICAgdkNvbG9yID0gdmVjNChhQ29sb3IucmdiICogYUNvbG9yLmEsIGFDb2xvci5hKTsnLFxuICAgICd9J1xuXS5qb2luKCdcXG4nKTtcblxuLyoqXG4gKiBUaGUgZGVmYXVsdCBmcmFnbWVudCBzaGFkZXIgc291cmNlXG4gKlxuICogQHN0YXRpY1xuICogQGNvbnN0YW50XG4gKi9cblRleHR1cmVTaGFkZXIuZGVmYXVsdEZyYWdtZW50U3JjID0gW1xuICAgICdwcmVjaXNpb24gbG93cCBmbG9hdDsnLFxuXG4gICAgJ3ZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkOycsXG4gICAgJ3ZhcnlpbmcgdmVjNCB2Q29sb3I7JyxcblxuICAgICd1bmlmb3JtIHNhbXBsZXIyRCB1U2FtcGxlcjsnLFxuXG4gICAgJ3ZvaWQgbWFpbih2b2lkKXsnLFxuICAgICcgICBnbF9GcmFnQ29sb3IgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZUZXh0dXJlQ29vcmQpICogdkNvbG9yIDsnLFxuICAgICd9J1xuXS5qb2luKCdcXG4nKTtcbiIsInZhciBXZWJHTE1hbmFnZXIgPSByZXF1aXJlKCcuLi9tYW5hZ2Vycy9XZWJHTE1hbmFnZXInKTtcblxuLyoqXG4gKiBCYXNlIGZvciBhIGNvbW1vbiBvYmplY3QgcmVuZGVyZXIgdGhhdCBjYW4gYmUgdXNlZCBhcyBhIHN5c3RlbSByZW5kZXJlciBwbHVnaW4uXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLldlYkdMTWFuYWdlclxuICogQG1lbWJlcm9mIFBJWElcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5XZWJHTFJlbmRlcmVyfSBUaGUgcmVuZGVyZXIgdGhpcyBvYmplY3QgcmVuZGVyZXIgd29ya3MgZm9yLlxuICovXG5mdW5jdGlvbiBPYmplY3RSZW5kZXJlcihyZW5kZXJlcilcbntcbiAgICBXZWJHTE1hbmFnZXIuY2FsbCh0aGlzLCByZW5kZXJlcik7XG59XG5cblxuT2JqZWN0UmVuZGVyZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShXZWJHTE1hbmFnZXIucHJvdG90eXBlKTtcbk9iamVjdFJlbmRlcmVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IE9iamVjdFJlbmRlcmVyO1xubW9kdWxlLmV4cG9ydHMgPSBPYmplY3RSZW5kZXJlcjtcblxuLyoqXG4gKiBTdGFydHMgdGhlIHJlbmRlcmVyIGFuZCBzZXRzIHRoZSBzaGFkZXJcbiAqXG4gKi9cbk9iamVjdFJlbmRlcmVyLnByb3RvdHlwZS5zdGFydCA9IGZ1bmN0aW9uICgpXG57XG4gICAgLy8gc2V0IHRoZSBzaGFkZXIuLlxufTtcblxuLyoqXG4gKiBTdG9wcyB0aGUgcmVuZGVyZXJcbiAqXG4gKi9cbk9iamVjdFJlbmRlcmVyLnByb3RvdHlwZS5zdG9wID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLmZsdXNoKCk7XG59O1xuXG4vKipcbiAqIGZsdXNoZXNcbiAqXG4gKi9cbk9iamVjdFJlbmRlcmVyLnByb3RvdHlwZS5mbHVzaCA9IGZ1bmN0aW9uICgpXG57XG4gICAgLy8gZmx1c2ghXG59O1xuXG4vKipcbiAqIFJlbmRlcnMgYW4gb2JqZWN0XG4gKlxuICogQHBhcmFtIG9iamVjdCB7UElYSS5EaXNwbGF5T2JqZWN0fSBUaGUgb2JqZWN0IHRvIHJlbmRlci5cbiAqL1xuT2JqZWN0UmVuZGVyZXIucHJvdG90eXBlLnJlbmRlciA9IGZ1bmN0aW9uIChvYmplY3QpIC8vIGpzaGludCB1bnVzZWQ6ZmFsc2VcbntcbiAgICAvLyByZW5kZXIgdGhlIG9iamVjdFxufTtcbiIsIi8qKlxuICogSGVscGVyIGNsYXNzIHRvIGNyZWF0ZSBhIHF1YWRcbiAqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gZ2wge1dlYkdMUmVuZGVyaW5nQ29udGV4dH0gVGhlIGdsIGNvbnRleHQgZm9yIHRoaXMgcXVhZCB0byB1c2UuXG4gKi9cbmZ1bmN0aW9uIFF1YWQoZ2wpXG57XG4gICAgLypcbiAgICAgKiB0aGUgY3VycmVudCBXZWJHTCBkcmF3aW5nIGNvbnRleHRcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1dlYkdMUmVuZGVyaW5nQ29udGV4dH1cbiAgICAgKi9cbiAgICB0aGlzLmdsID0gZ2w7XG5cbi8vICAgIHRoaXMudGV4dHVyZXMgPSBuZXcgVGV4dHVyZVV2cygpO1xuXG4gICAgLyoqXG4gICAgICogQW4gYXJyYXkgb2YgdmVydGljZXNcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge0Zsb2F0MzJBcnJheX1cbiAgICAgKi9cbiAgICB0aGlzLnZlcnRpY2VzID0gbmV3IEZsb2F0MzJBcnJheShbXG4gICAgICAgIDAsMCxcbiAgICAgICAgMjAwLDAsXG4gICAgICAgIDIwMCwyMDAsXG4gICAgICAgIDAsMjAwXG4gICAgXSk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgVXZzIG9mIHRoZSBxdWFkXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtGbG9hdDMyQXJyYXl9XG4gICAgICovXG4gICAgdGhpcy51dnMgPSBuZXcgRmxvYXQzMkFycmF5KFtcbiAgICAgICAgMCwwLFxuICAgICAgICAxLDAsXG4gICAgICAgIDEsMSxcbiAgICAgICAgMCwxXG4gICAgXSk7XG5cbi8vICAgIHZhciB3aGl0ZSA9ICgweEZGRkZGRiA+PiAxNikgKyAoMHhGRkZGRkYgJiAweGZmMDApICsgKCgweEZGRkZGRiAmIDB4ZmYpIDw8IDE2KSArICgxICogMjU1IDw8IDI0KTtcbiAgICAvL1RPRE8gY29udmVydCB0aGlzIHRvIGEgMzIgdW5zaWduZWQgaW50IGFycmF5XG4gICAgLyoqXG4gICAgICogVGhlIGNvbG9yIGNvbXBvbmVudHMgb2YgdGhlIHRyaWFuZ2xlc1xuICAgICAqXG4gICAgICogQG1lbWJlciB7RmxvYXQzMkFycmF5fVxuICAgICAqL1xuICAgIHRoaXMuY29sb3JzID0gbmV3IEZsb2F0MzJBcnJheShbXG4gICAgICAgIDEsMSwxLDEsXG4gICAgICAgIDEsMSwxLDEsXG4gICAgICAgIDEsMSwxLDEsXG4gICAgICAgIDEsMSwxLDFcbiAgICBdKTtcblxuICAgIC8qXG4gICAgICogQG1lbWJlciB7VWludDE2QXJyYXl9IEFuIGFycmF5IGNvbnRhaW5pbmcgdGhlIGluZGljZXMgb2YgdGhlIHZlcnRpY2VzXG4gICAgICovXG4gICAgdGhpcy5pbmRpY2VzID0gbmV3IFVpbnQxNkFycmF5KFtcbiAgICAgICAgMCwgMSwgMiwgMCwgMywgMlxuICAgIF0pO1xuXG4gICAgLypcbiAgICAgKiBAbWVtYmVyIHtXZWJHTEJ1ZmZlcn0gVGhlIHZlcnRleCBidWZmZXJcbiAgICAgKi9cbiAgICB0aGlzLnZlcnRleEJ1ZmZlciA9IGdsLmNyZWF0ZUJ1ZmZlcigpO1xuXG4gICAgLypcbiAgICAgKiBAbWVtYmVyIHtXZWJHTEJ1ZmZlcn0gVGhlIGluZGV4IGJ1ZmZlclxuICAgICAqL1xuICAgIHRoaXMuaW5kZXhCdWZmZXIgPSBnbC5jcmVhdGVCdWZmZXIoKTtcblxuICAgIGdsLmJpbmRCdWZmZXIoZ2wuQVJSQVlfQlVGRkVSLCB0aGlzLnZlcnRleEJ1ZmZlcik7XG4gICAgZ2wuYnVmZmVyRGF0YShnbC5BUlJBWV9CVUZGRVIsICg4ICsgOCArIDE2KSAqIDQsIGdsLkRZTkFNSUNfRFJBVyk7XG5cbiAgICBnbC5iaW5kQnVmZmVyKGdsLkVMRU1FTlRfQVJSQVlfQlVGRkVSLCB0aGlzLmluZGV4QnVmZmVyKTtcbiAgICBnbC5idWZmZXJEYXRhKGdsLkVMRU1FTlRfQVJSQVlfQlVGRkVSLCB0aGlzLmluZGljZXMsIGdsLlNUQVRJQ19EUkFXKTtcblxuICAgIHRoaXMudXBsb2FkKCk7XG59XG5cblF1YWQucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gUXVhZDtcblxuLyoqXG4gKiBNYXBzIHR3byBSZWN0YW5nbGUgdG8gdGhlIHF1YWRcbiAqIEBwYXJhbSByZWN0IHtQSVhJLlJlY3RhbmdsZX0gdGhlIGZpcnN0IHJlY3RhbmdsZVxuICogQHBhcmFtIHJlY3QyIHtQSVhJLlJlY3RhbmdsZX0gdGhlIHNlY29uZCByZWN0YW5nbGVcbiAqL1xuUXVhZC5wcm90b3R5cGUubWFwID0gZnVuY3Rpb24ocmVjdCwgcmVjdDIpXG57XG4gICAgdmFyIHggPSAwOyAvL3JlY3QyLnggLyByZWN0LndpZHRoO1xuICAgIHZhciB5ID0gMDsgLy9yZWN0Mi55IC8gcmVjdC5oZWlnaHQ7XG5cbiAgICB0aGlzLnV2c1swXSA9IHg7XG4gICAgdGhpcy51dnNbMV0gPSB5O1xuXG4gICAgdGhpcy51dnNbMl0gPSB4ICsgcmVjdDIud2lkdGggLyByZWN0LndpZHRoO1xuICAgIHRoaXMudXZzWzNdID0geTtcblxuICAgIHRoaXMudXZzWzRdID0geCArIHJlY3QyLndpZHRoIC8gcmVjdC53aWR0aDtcbiAgICB0aGlzLnV2c1s1XSA9IHkgKyByZWN0Mi5oZWlnaHQgLyByZWN0LmhlaWdodDtcblxuICAgIHRoaXMudXZzWzZdID0geDtcbiAgICB0aGlzLnV2c1s3XSA9IHkgKyByZWN0Mi5oZWlnaHQgLyByZWN0LmhlaWdodDtcblxuICAgIC8vLyAtLS0tLVxuICAgIHggPSByZWN0Mi54O1xuICAgIHkgPSByZWN0Mi55O1xuXG4gICAgdGhpcy52ZXJ0aWNlc1swXSA9IHg7XG4gICAgdGhpcy52ZXJ0aWNlc1sxXSA9IHk7XG5cbiAgICB0aGlzLnZlcnRpY2VzWzJdID0geCArIHJlY3QyLndpZHRoO1xuICAgIHRoaXMudmVydGljZXNbM10gPSB5O1xuXG4gICAgdGhpcy52ZXJ0aWNlc1s0XSA9IHggKyByZWN0Mi53aWR0aDtcbiAgICB0aGlzLnZlcnRpY2VzWzVdID0geSArIHJlY3QyLmhlaWdodDtcblxuICAgIHRoaXMudmVydGljZXNbNl0gPSB4O1xuICAgIHRoaXMudmVydGljZXNbN10gPSB5ICsgcmVjdDIuaGVpZ2h0O1xuXG4gICAgdGhpcy51cGxvYWQoKTtcbn07XG5cbi8qKlxuICogQmluZHMgdGhlIGJ1ZmZlciBhbmQgdXBsb2FkcyB0aGUgZGF0YVxuICovXG5RdWFkLnByb3RvdHlwZS51cGxvYWQgPSBmdW5jdGlvbigpXG57XG4gICAgdmFyIGdsID0gdGhpcy5nbDtcblxuICAgIC8vIFRPRE8gY291bGQgcHJvYmFibHkgYmUgcHVzaGVkIGludG8gb25lIHVwbG9hZCFcbiAgICBnbC5iaW5kQnVmZmVyKCBnbC5BUlJBWV9CVUZGRVIsIHRoaXMudmVydGV4QnVmZmVyICk7XG5cbiAgICBnbC5idWZmZXJTdWJEYXRhKGdsLkFSUkFZX0JVRkZFUiwgMCwgdGhpcy52ZXJ0aWNlcyk7XG5cbiAgICBnbC5idWZmZXJTdWJEYXRhKGdsLkFSUkFZX0JVRkZFUiwgOCAqIDQsIHRoaXMudXZzKTtcblxuICAgIGdsLmJ1ZmZlclN1YkRhdGEoZ2wuQVJSQVlfQlVGRkVSLCAoOCArIDgpICogNCwgdGhpcy5jb2xvcnMpO1xufTtcblxuUXVhZC5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uKClcbntcbiAgICB2YXIgZ2wgPSB0aGlzLmdsO1xuICAgIFxuICAgICBnbC5kZWxldGVCdWZmZXIodGhpcy52ZXJ0ZXhCdWZmZXIpO1xuICAgICBnbC5kZWxldGVCdWZmZXIodGhpcy5pbmRleEJ1ZmZlcik7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IFF1YWQ7XG5cblxuIiwidmFyIG1hdGggPSByZXF1aXJlKCcuLi8uLi8uLi9tYXRoJyksXG4gICAgdXRpbHMgPSByZXF1aXJlKCcuLi8uLi8uLi91dGlscycpLFxuICAgIENPTlNUID0gcmVxdWlyZSgnLi4vLi4vLi4vY29uc3QnKSxcbiAgICAgICAgXG4gICAgR0xUZXh0dXJlID0gcmVxdWlyZSgncGl4aS1nbC1jb3JlJykuR0xUZXh0dXJlLFxuICAgIEdMRnJhbWVidWZmZXIgPSByZXF1aXJlKCdwaXhpLWdsLWNvcmUnKS5HTEZyYW1lYnVmZmVyLFxuICAgIFxuICAgIFN0ZW5jaWxNYXNrU3RhY2sgPSByZXF1aXJlKCcuL1N0ZW5jaWxNYXNrU3RhY2snKTtcblxuLyoqXG4gKiBAYXV0aG9yIE1hdCBHcm92ZXMgaHR0cDovL21hdGdyb3Zlcy5jb20vIEBEb29ybWF0MjNcbiAqL1xuXG4vKipcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqIEBwYXJhbSBnbCB7V2ViR0xSZW5kZXJpbmdDb250ZXh0fSB0aGUgY3VycmVudCBXZWJHTCBkcmF3aW5nIGNvbnRleHRcbiAqIEBwYXJhbSB3aWR0aCB7bnVtYmVyfSB0aGUgaG9yaXpvbnRhbCByYW5nZSBvZiB0aGUgZmlsdGVyXG4gKiBAcGFyYW0gaGVpZ2h0IHtudW1iZXJ9IHRoZSB2ZXJ0aWNhbCByYW5nZSBvZiB0aGUgZmlsdGVyXG4gKiBAcGFyYW0gc2NhbGVNb2RlIHtudW1iZXJ9IFNlZSB7QGxpbmsgUElYSS5TQ0FMRV9NT0RFU30gZm9yIHBvc3NpYmxlIHZhbHVlc1xuICogQHBhcmFtIHJlc29sdXRpb24ge251bWJlcn0gdGhlIGN1cnJlbnQgcmVzb2x1dGlvblxuICogQHBhcmFtIHJvb3Qge2Jvb2xlYW59IFdoZXRoZXIgdGhpcyBvYmplY3QgaXMgdGhlIHJvb3QgZWxlbWVudCBvciBub3RcbiAqL1xudmFyIFJlbmRlclRhcmdldCA9IGZ1bmN0aW9uKGdsLCB3aWR0aCwgaGVpZ2h0LCBzY2FsZU1vZGUsIHJlc29sdXRpb24sIHJvb3QpXG57XG4gICAgLy9UT0RPIFJlc29sdXRpb24gY291bGQgZ28gaGVyZSAoIGVnIGxvdyByZXMgYmx1cnMgKVxuXG4gICAgLyoqXG4gICAgICogVGhlIGN1cnJlbnQgV2ViR0wgZHJhd2luZyBjb250ZXh0LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7V2ViR0xSZW5kZXJpbmdDb250ZXh0fVxuICAgICAqL1xuICAgIHRoaXMuZ2wgPSBnbDtcblxuICAgIC8vIG5leHQgdGltZSB0byBjcmVhdGUgYSBmcmFtZSBidWZmZXIgYW5kIHRleHR1cmVcblxuICAgIC8qKlxuICAgICAqIEEgZnJhbWUgYnVmZmVyXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtXZWJHTEZyYW1lQnVmZmVyfVxuICAgICAqL1xuICAgIHRoaXMuZnJhbWVCdWZmZXIgPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHRleHR1cmVcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuVGV4dHVyZX1cbiAgICAgKi9cbiAgICB0aGlzLnRleHR1cmUgPSBudWxsO1xuXG4gICAgdGhpcy5jbGVhckNvbG9yID0gWzAsIDAsIDAsIDBdO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHNpemUgb2YgdGhlIG9iamVjdCBhcyBhIHJlY3RhbmdsZVxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5SZWN0YW5nbGV9XG4gICAgICovXG4gICAgdGhpcy5zaXplID0gbmV3IG1hdGguUmVjdGFuZ2xlKDAsIDAsIDEsIDEpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGN1cnJlbnQgcmVzb2x1dGlvblxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMucmVzb2x1dGlvbiA9IHJlc29sdXRpb24gfHwgQ09OU1QuUkVTT0xVVElPTjtcblxuICAgIC8qKlxuICAgICAqIFRoZSBwcm9qZWN0aW9uIG1hdHJpeFxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5NYXRyaXh9XG4gICAgICovXG4gICAgdGhpcy5wcm9qZWN0aW9uTWF0cml4ID0gbmV3IG1hdGguTWF0cml4KCk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgb2JqZWN0J3MgdHJhbnNmb3JtXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLk1hdHJpeH1cbiAgICAgKi9cbiAgICB0aGlzLnRyYW5zZm9ybSA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgZnJhbWUuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlJlY3RhbmdsZX1cbiAgICAgKi9cbiAgICB0aGlzLmZyYW1lID0gbnVsbDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBzdGVuY2lsIGJ1ZmZlciBzdG9yZXMgbWFza2luZyBkYXRhIGZvciB0aGUgcmVuZGVyIHRhcmdldFxuICAgICAqXG4gICAgICogQG1lbWJlciB7V2ViR0xSZW5kZXJCdWZmZXJ9XG4gICAgICovXG4gICAgdGhpcy5zdGVuY2lsQnVmZmVyID0gbnVsbDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBkYXRhIHN0cnVjdHVyZSBmb3IgdGhlIHN0ZW5jaWwgbWFza3NcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuU3RlbmNpbE1hc2tTdGFja31cbiAgICAgKi9cbiAgICB0aGlzLnN0ZW5jaWxNYXNrU3RhY2sgPSBuZXcgU3RlbmNpbE1hc2tTdGFjaygpO1xuXG4gICAgLyoqXG4gICAgICogU3RvcmVzIGZpbHRlciBkYXRhIGZvciB0aGUgcmVuZGVyIHRhcmdldFxuICAgICAqXG4gICAgICogQG1lbWJlciB7b2JqZWN0W119XG4gICAgICovXG4gICAgdGhpcy5maWx0ZXJTdGFjayA9IFtcbiAgICAgICAge1xuICAgICAgICAgICAgcmVuZGVyVGFyZ2V0OnRoaXMsXG4gICAgICAgICAgICBmaWx0ZXI6W10sXG4gICAgICAgICAgICBib3VuZHM6dGhpcy5zaXplXG4gICAgICAgIH1cbiAgICBdO1xuXG5cbiAgICAvKipcbiAgICAgKiBUaGUgc2NhbGUgbW9kZS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCBQSVhJLlNDQUxFX01PREVTLkRFRkFVTFRcbiAgICAgKiBAc2VlIFBJWEkuU0NBTEVfTU9ERVNcbiAgICAgKi9cbiAgICB0aGlzLnNjYWxlTW9kZSA9IHNjYWxlTW9kZSB8fCBDT05TVC5TQ0FMRV9NT0RFUy5ERUZBVUxUO1xuXG4gICAgLyoqXG4gICAgICogV2hldGhlciB0aGlzIG9iamVjdCBpcyB0aGUgcm9vdCBlbGVtZW50IG9yIG5vdFxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKi9cbiAgICB0aGlzLnJvb3QgPSByb290O1xuXG4gICAgdGhpcy5mcmFtZUJ1ZmZlciA9IEdMRnJhbWVidWZmZXIuY3JlYXRlUkdCQShnbCwgMTAwLCAxMDApO1xuICAgIGlmKHRoaXMuZnJhbWVCdWZmZXIpdGhpcy5mcmFtZUJ1ZmZlci51bmJpbmQoKTtcblxuICAgLy8gdGhpcy5mcmFtZUJ1ZmZlciA9IHtmcmFtZWJ1ZmZlcjpudWxsLCBiaW5kOmZ1bmN0aW9uKCl7fSwgY2xlYXI6ZnVuY3Rpb24oKXt9LCByZXNpemU6ZnVuY3Rpb24oKXt9fS8vbmV3IEdMRnJhbWVidWZmZXIuY3JlYXRlUkdCQShnbCwgMTAwLCAxMDApO1xuXG5cblxuICAgIGlmICghdGhpcy5yb290KVxuICAgIHtcbiAgICAgICAgLypcbiAgICAgICAgICAgIEEgZnJhbWUgYnVmZmVyIG5lZWRzIGEgdGFyZ2V0IHRvIHJlbmRlciB0by4uXG4gICAgICAgICAgICBjcmVhdGUgYSB0ZXh0dXJlIGFuZCBiaW5kIGl0IGF0dGFjaCBpdCB0byB0aGUgZnJhbWVidWZmZXIuLlxuICAgICAgICAgKi9cbiAgICAgICAgXG4gICAgICAgIC8vIGNyZWF0ZSBhIHRleHR1cmUgdG8gYmluZCBhdHRhY2ggdG8gdGhlIGZyYW1lQnVmZmVyLi5cbiAgICAgICAgdmFyIHRleHR1cmUgPSBuZXcgR0xUZXh0dXJlKGdsKTtcblxuICAgICAgICB0ZXh0dXJlLmVuYWJsZUxpbmVhclNjYWxpbmcoKVxuICAgICAgICB0ZXh0dXJlLmVuYWJsZVdyYXBDbGFtcCgpXG5cbiAgICAgICAgdGhpcy5mcmFtZUJ1ZmZlci5lbmFibGVUZXh0dXJlKHRleHR1cmUpO1xuXG4gICAgICAgIC8vIFRPRE8gY2hhbmdlIVxuICAgICAgICAvLyB0aGlzIGlzIHVzZWQgYnkgdGhlIGJhc2UgdGV4dHVyZVxuICAgICAgICB0aGlzLnRleHR1cmUgPSB0ZXh0dXJlLnRleHR1cmU7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIC8vIG1ha2UgaXQgYSBudWxsIGZyYW1lYnVmZmVyLi5cbiAgICAgICAgdGhpcy5mcmFtZUJ1ZmZlci5mcmFtZWJ1ZmZlciA9IG51bGw7XG4gICAgfVxuXG4gICAgdGhpcy5yZXNpemUod2lkdGgsIGhlaWdodCk7XG59O1xuXG5SZW5kZXJUYXJnZXQucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gUmVuZGVyVGFyZ2V0O1xubW9kdWxlLmV4cG9ydHMgPSBSZW5kZXJUYXJnZXQ7XG5cbi8qKlxuICogQ2xlYXJzIHRoZSBmaWx0ZXIgdGV4dHVyZS5cbiAqXG4gKiBAcGFyYW0gW2JpbmQ9ZmFsc2VdIHtib29sZWFufSBTaG91bGQgd2UgYmluZCBvdXIgZnJhbWVidWZmZXIgYmVmb3JlIGNsZWFyaW5nP1xuICovXG5SZW5kZXJUYXJnZXQucHJvdG90eXBlLmNsZWFyID0gZnVuY3Rpb24oY2xlYXJDb2xvcilcbntcbiAgICB2YXIgY2MgPSBjbGVhckNvbG9yIHx8IHRoaXMuY2xlYXJDb2xvclxuICAgIHRoaXMuZnJhbWVCdWZmZXIuY2xlYXIoY2NbMF0sY2NbMV0sY2NbMl0sY2NbM10pLy9yLGcsYixhKTtcbn07XG5cbi8qKlxuICogQmluZHMgdGhlIHN0ZW5jaWwgYnVmZmVyLlxuICpcbiAqL1xuUmVuZGVyVGFyZ2V0LnByb3RvdHlwZS5hdHRhY2hTdGVuY2lsQnVmZmVyID0gZnVuY3Rpb24oKVxue1xuICAgIC8vVE9ETyBjaGVjayBpZiBzdGVuY2lsIGlzIGRvbmU/XG4gICAgLyoqXG4gICAgICogVGhlIHN0ZW5jaWwgYnVmZmVyIGlzIHVzZWQgZm9yIG1hc2tpbmcgaW4gcGl4aVxuICAgICAqIGxldHMgY3JlYXRlIG9uZSBhbmQgdGhlbiBhZGQgYXR0YWNoIGl0IHRvIHRoZSBmcmFtZWJ1ZmZlci4uXG4gICAgICovXG4gICAgaWYgKCF0aGlzLnJvb3QpXG4gICAge1xuICAgICAgICB0aGlzLmZyYW1lQnVmZmVyLmVuYWJsZVN0ZW5jaWwoKTtcbiAgICB9XG59O1xuXG4vKipcbiAqIEJpbmRzIHRoZSBidWZmZXJzIGFuZCBpbml0aWFsaXNlcyB0aGUgdmlld3BvcnQuXG4gKlxuICovXG5SZW5kZXJUYXJnZXQucHJvdG90eXBlLmFjdGl2YXRlID0gZnVuY3Rpb24oKVxue1xuICAgIC8vVE9PRCByZWZhY3RvciB1c2FnZSBvZiBmcmFtZS4uXG4gICAgdmFyIGdsID0gdGhpcy5nbDtcblxuICAgIHRoaXMuZnJhbWVCdWZmZXIuYmluZCgpO1xuXG5cbiAgICB2YXIgcHJvamVjdGlvbkZyYW1lID0gdGhpcy5mcmFtZSB8fCB0aGlzLnNpemU7XG5cbiAgICAvLyBUT0RPIGFkZCBhIGRpcnR5IGZsYWcgdG8gdGhpcyBvZiBhIHNldHRlciBmb3IgdGhlIGZyYW1lP1xuICAgIHRoaXMuY2FsY3VsYXRlUHJvamVjdGlvbiggcHJvamVjdGlvbkZyYW1lICk7XG5cbiAgICBpZih0aGlzLnRyYW5zZm9ybSlcbiAgICB7XG4gICAgICAgIHRoaXMucHJvamVjdGlvbk1hdHJpeC5hcHBlbmQodGhpcy50cmFuc2Zvcm0pO1xuICAgIH1cblxuICAgIGdsLnZpZXdwb3J0KDAsMCwgcHJvamVjdGlvbkZyYW1lLndpZHRoICogdGhpcy5yZXNvbHV0aW9uLCBwcm9qZWN0aW9uRnJhbWUuaGVpZ2h0ICogdGhpcy5yZXNvbHV0aW9uKTtcbn07XG5cbi8qKlxuICogVXBkYXRlcyB0aGUgcHJvamVjdGlvbiBtYXRyaXggYmFzZWQgb24gYSBwcm9qZWN0aW9uIGZyYW1lICh3aGljaCBpcyBhIHJlY3RhbmdsZSlcbiAqXG4gKi9cblJlbmRlclRhcmdldC5wcm90b3R5cGUuY2FsY3VsYXRlUHJvamVjdGlvbiA9IGZ1bmN0aW9uIChwcm9qZWN0aW9uRnJhbWUpXG57XG4gICAgdmFyIHBtID0gdGhpcy5wcm9qZWN0aW9uTWF0cml4O1xuXG4gICAgcG0uaWRlbnRpdHkoKTtcblxuICAgIGlmICghdGhpcy5yb290KVxuICAgIHtcbiAgICAgICAgcG0uYSA9IDEgLyBwcm9qZWN0aW9uRnJhbWUud2lkdGgqMjtcbiAgICAgICAgcG0uZCA9IDEgLyBwcm9qZWN0aW9uRnJhbWUuaGVpZ2h0KjI7XG5cbiAgICAgICAgcG0udHggPSAtMSAtIHByb2plY3Rpb25GcmFtZS54ICogcG0uYTtcbiAgICAgICAgcG0udHkgPSAtMSAtIHByb2plY3Rpb25GcmFtZS55ICogcG0uZDtcbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgcG0uYSA9IDEgLyBwcm9qZWN0aW9uRnJhbWUud2lkdGgqMjtcbiAgICAgICAgcG0uZCA9IC0xIC8gcHJvamVjdGlvbkZyYW1lLmhlaWdodCoyO1xuXG4gICAgICAgIHBtLnR4ID0gLTEgLSBwcm9qZWN0aW9uRnJhbWUueCAqIHBtLmE7XG4gICAgICAgIHBtLnR5ID0gMSAtIHByb2plY3Rpb25GcmFtZS55ICogcG0uZDtcbiAgICB9XG59O1xuXG4vKipcbiAqIFJlc2l6ZXMgdGhlIHRleHR1cmUgdG8gdGhlIHNwZWNpZmllZCB3aWR0aCBhbmQgaGVpZ2h0XG4gKlxuICogQHBhcmFtIHdpZHRoIHtOdW1iZXJ9IHRoZSBuZXcgd2lkdGggb2YgdGhlIHRleHR1cmVcbiAqIEBwYXJhbSBoZWlnaHQge051bWJlcn0gdGhlIG5ldyBoZWlnaHQgb2YgdGhlIHRleHR1cmVcbiAqL1xuUmVuZGVyVGFyZ2V0LnByb3RvdHlwZS5yZXNpemUgPSBmdW5jdGlvbiAod2lkdGgsIGhlaWdodClcbntcbiAgICB3aWR0aCA9IHdpZHRoIHwgMDtcbiAgICBoZWlnaHQgPSBoZWlnaHQgfCAwO1xuXG4gICAgaWYgKHRoaXMuc2l6ZS53aWR0aCA9PT0gd2lkdGggJiYgdGhpcy5zaXplLmhlaWdodCA9PT0gaGVpZ2h0KSBcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLnNpemUud2lkdGggPSB3aWR0aDtcbiAgICB0aGlzLnNpemUuaGVpZ2h0ID0gaGVpZ2h0O1xuXG4gICAgdGhpcy5mcmFtZUJ1ZmZlci5yZXNpemUod2lkdGggKiB0aGlzLnJlc29sdXRpb24sIGhlaWdodCAqIHRoaXMucmVzb2x1dGlvbik7XG4gICAgXG4gICAgdmFyIHByb2plY3Rpb25GcmFtZSA9IHRoaXMuZnJhbWUgfHwgdGhpcy5zaXplO1xuXG4gICAgdGhpcy5jYWxjdWxhdGVQcm9qZWN0aW9uKCBwcm9qZWN0aW9uRnJhbWUgKTtcbn07XG5cbi8qKlxuICogRGVzdHJveXMgdGhlIHJlbmRlciB0YXJnZXQuXG4gKlxuICovXG5SZW5kZXJUYXJnZXQucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoKVxue1xuICAgIHZhciBnbCA9IHRoaXMuZ2w7XG4gICAgXG4gICAgdGhpcy5mcmFtZUJ1ZmZlci5kZXN0cm95KCk7XG5cbiAgICB0aGlzLmZyYW1lQnVmZmVyID0gbnVsbDtcbiAgICB0aGlzLnRleHR1cmUgPSBudWxsO1xufTtcbiIsIi8qKlxuICogR2VuZXJpYyBNYXNrIFN0YWNrIGRhdGEgc3RydWN0dXJlXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKi9cbmZ1bmN0aW9uIFN0ZW5jaWxNYXNrU3RhY2soKVxue1xuXHQvKipcbiAgICAgKiBUaGUgYWN0dWFsIHN0YWNrXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHthbnlbXX1cbiAgICAgKi9cbiAgICB0aGlzLnN0ZW5jaWxTdGFjayA9IFtdO1xuXG4gICAgLyoqXG4gICAgICogVE9ETyBAYWx2aW5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICovXG4gICAgdGhpcy5yZXZlcnNlID0gdHJ1ZTtcblxuICAgIC8qKlxuICAgICAqIEludGVybmFsIGNvdW50XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy5jb3VudCA9IDA7XG59XG5cblN0ZW5jaWxNYXNrU3RhY2sucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gU3RlbmNpbE1hc2tTdGFjaztcbm1vZHVsZS5leHBvcnRzID0gU3RlbmNpbE1hc2tTdGFjaztcbiIsIkNPTlNUID0gcmVxdWlyZSgnLi4vLi4vLi4vY29uc3QnKTtcblxuLyoqXG4gKiBNYXBzIGdsIGJsZW5kIGNvbWJpbmF0aW9ucyB0byBXZWJHTFxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICovXG5mdW5jdGlvbiBtYXBXZWJHTEJsZW5kTW9kZXNUb1BpeGkoZ2wsIG9iamVjdClcbntcbiAgICBvYmplY3QgPSBvYmplY3QgfHwge307XG5cbiAgICAvL1RPRE8gLSBwcmVtdWx0aXBseSBhbHBoYSB3b3VsZCBiZSBkaWZmZXJlbnQuXG4gICAgLy9hZGQgYSBib29sZWFuIGZvciB0aGF0IVxuICAgIG9iamVjdFtDT05TVC5CTEVORF9NT0RFUy5OT1JNQUxdICAgICAgICA9IFtnbC5PTkUsICAgICAgIGdsLk9ORV9NSU5VU19TUkNfQUxQSEFdO1xuICAgIG9iamVjdFtDT05TVC5CTEVORF9NT0RFUy5BRERdICAgICAgICAgICA9IFtnbC5TUkNfQUxQSEEsIGdsLkRTVF9BTFBIQV07XG4gICAgb2JqZWN0W0NPTlNULkJMRU5EX01PREVTLk1VTFRJUExZXSAgICAgID0gW2dsLkRTVF9DT0xPUiwgZ2wuT05FX01JTlVTX1NSQ19BTFBIQV07XG4gICAgb2JqZWN0W0NPTlNULkJMRU5EX01PREVTLlNDUkVFTl0gICAgICAgID0gW2dsLlNSQ19BTFBIQSwgZ2wuT05FXTtcbiAgICBvYmplY3RbQ09OU1QuQkxFTkRfTU9ERVMuT1ZFUkxBWV0gICAgICAgPSBbZ2wuT05FLCAgICAgICBnbC5PTkVfTUlOVVNfU1JDX0FMUEhBXTtcbiAgICBvYmplY3RbQ09OU1QuQkxFTkRfTU9ERVMuREFSS0VOXSAgICAgICAgPSBbZ2wuT05FLCAgICAgICBnbC5PTkVfTUlOVVNfU1JDX0FMUEhBXTtcbiAgICBvYmplY3RbQ09OU1QuQkxFTkRfTU9ERVMuTElHSFRFTl0gICAgICAgPSBbZ2wuT05FLCAgICAgICBnbC5PTkVfTUlOVVNfU1JDX0FMUEhBXTtcbiAgICBvYmplY3RbQ09OU1QuQkxFTkRfTU9ERVMuQ09MT1JfRE9ER0VdICAgPSBbZ2wuT05FLCAgICAgICBnbC5PTkVfTUlOVVNfU1JDX0FMUEhBXTtcbiAgICBvYmplY3RbQ09OU1QuQkxFTkRfTU9ERVMuQ09MT1JfQlVSTl0gICAgPSBbZ2wuT05FLCAgICAgICBnbC5PTkVfTUlOVVNfU1JDX0FMUEhBXTtcbiAgICBvYmplY3RbQ09OU1QuQkxFTkRfTU9ERVMuSEFSRF9MSUdIVF0gICAgPSBbZ2wuT05FLCAgICAgICBnbC5PTkVfTUlOVVNfU1JDX0FMUEhBXTtcbiAgICBvYmplY3RbQ09OU1QuQkxFTkRfTU9ERVMuU09GVF9MSUdIVF0gICAgPSBbZ2wuT05FLCAgICAgICBnbC5PTkVfTUlOVVNfU1JDX0FMUEhBXTtcbiAgICBvYmplY3RbQ09OU1QuQkxFTkRfTU9ERVMuRElGRkVSRU5DRV0gICAgPSBbZ2wuT05FLCAgICAgICBnbC5PTkVfTUlOVVNfU1JDX0FMUEhBXTtcbiAgICBvYmplY3RbQ09OU1QuQkxFTkRfTU9ERVMuRVhDTFVTSU9OXSAgICAgPSBbZ2wuT05FLCAgICAgICBnbC5PTkVfTUlOVVNfU1JDX0FMUEhBXTtcbiAgICBvYmplY3RbQ09OU1QuQkxFTkRfTU9ERVMuSFVFXSAgICAgICAgICAgPSBbZ2wuT05FLCAgICAgICBnbC5PTkVfTUlOVVNfU1JDX0FMUEhBXTtcbiAgICBvYmplY3RbQ09OU1QuQkxFTkRfTU9ERVMuU0FUVVJBVElPTl0gICAgPSBbZ2wuT05FLCAgICAgICBnbC5PTkVfTUlOVVNfU1JDX0FMUEhBXTtcbiAgICBvYmplY3RbQ09OU1QuQkxFTkRfTU9ERVMuQ09MT1JdICAgICAgICAgPSBbZ2wuT05FLCAgICAgICBnbC5PTkVfTUlOVVNfU1JDX0FMUEhBXTtcbiAgICBvYmplY3RbQ09OU1QuQkxFTkRfTU9ERVMuTFVNSU5PU0lUWV0gICAgPSBbZ2wuT05FLCAgICAgICBnbC5PTkVfTUlOVVNfU1JDX0FMUEhBXTtcblxuICAgIHJldHVybiBvYmplY3Q7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gbWFwV2ViR0xCbGVuZE1vZGVzVG9QaXhpO1xuIiwiQ09OU1QgPSByZXF1aXJlKCcuLi8uLi8uLi9jb25zdCcpO1xuXG4vKipcbiAqIEdlbmVyaWMgTWFzayBTdGFjayBkYXRhIHN0cnVjdHVyZVxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICovXG5mdW5jdGlvbiBtYXBXZWJHTERyYXdNb2Rlc1RvUGl4aShnbCwgb2JqZWN0KVxue1xuXHRvYmplY3Q9IG9iamVjdCB8fCB7fTtcblxuICAgIG9iamVjdFtDT05TVC5EUkFXX01PREVTLlBPSU5UU10gICAgICAgICA9IGdsLlBPSU5UUztcbiAgICBvYmplY3RbQ09OU1QuRFJBV19NT0RFUy5MSU5FU10gICAgICAgICAgPSBnbC5MSU5FUztcbiAgICBvYmplY3RbQ09OU1QuRFJBV19NT0RFUy5MSU5FX0xPT1BdICAgICAgPSBnbC5MSU5FX0xPT1A7XG4gICAgb2JqZWN0W0NPTlNULkRSQVdfTU9ERVMuTElORV9TVFJJUF0gICAgID0gZ2wuTElORV9TVFJJUDtcbiAgICBvYmplY3RbQ09OU1QuRFJBV19NT0RFUy5UUklBTkdMRVNdICAgICAgPSBnbC5UUklBTkdMRVM7XG4gICAgb2JqZWN0W0NPTlNULkRSQVdfTU9ERVMuVFJJQU5HTEVfU1RSSVBdID0gZ2wuVFJJQU5HTEVfU1RSSVA7XG4gICAgb2JqZWN0W0NPTlNULkRSQVdfTU9ERVMuVFJJQU5HTEVfRkFOXSAgID0gZ2wuVFJJQU5HTEVfRkFOO1xuXG59XG5cbm1vZHVsZS5leHBvcnRzID0gbWFwV2ViR0xEcmF3TW9kZXNUb1BpeGk7XG4iLCJ2YXIgbWF0aCA9IHJlcXVpcmUoJy4uL21hdGgnKSxcbiAgICBUZXh0dXJlID0gcmVxdWlyZSgnLi4vdGV4dHVyZXMvVGV4dHVyZScpLFxuICAgIENvbnRhaW5lciA9IHJlcXVpcmUoJy4uL2Rpc3BsYXkvQ29udGFpbmVyJyksXG4gICAgQ2FudmFzVGludGVyID0gcmVxdWlyZSgnLi4vcmVuZGVyZXJzL2NhbnZhcy91dGlscy9DYW52YXNUaW50ZXInKSxcbiAgICB1dGlscyA9IHJlcXVpcmUoJy4uL3V0aWxzJyksXG4gICAgQ09OU1QgPSByZXF1aXJlKCcuLi9jb25zdCcpLFxuICAgIHRlbXBQb2ludCA9IG5ldyBtYXRoLlBvaW50KCk7XG5cbi8qKlxuICogVGhlIFNwcml0ZSBvYmplY3QgaXMgdGhlIGJhc2UgZm9yIGFsbCB0ZXh0dXJlZCBvYmplY3RzIHRoYXQgYXJlIHJlbmRlcmVkIHRvIHRoZSBzY3JlZW5cbiAqXG4gKiBBIHNwcml0ZSBjYW4gYmUgY3JlYXRlZCBkaXJlY3RseSBmcm9tIGFuIGltYWdlIGxpa2UgdGhpczpcbiAqXG4gKiBgYGBqc1xuICogdmFyIHNwcml0ZSA9IG5ldyBQSVhJLlNwcml0ZS5mcm9tSW1hZ2UoJ2Fzc2V0cy9pbWFnZS5wbmcnKTtcbiAqIGBgYFxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5Db250YWluZXJcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gdGV4dHVyZSB7UElYSS5UZXh0dXJlfSBUaGUgdGV4dHVyZSBmb3IgdGhpcyBzcHJpdGVcbiAqL1xuZnVuY3Rpb24gU3ByaXRlKHRleHR1cmUpXG57XG4gICAgQ29udGFpbmVyLmNhbGwodGhpcyk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYW5jaG9yIHNldHMgdGhlIG9yaWdpbiBwb2ludCBvZiB0aGUgdGV4dHVyZS5cbiAgICAgKiBUaGUgZGVmYXVsdCBpcyAwLDAgdGhpcyBtZWFucyB0aGUgdGV4dHVyZSdzIG9yaWdpbiBpcyB0aGUgdG9wIGxlZnRcbiAgICAgKiBTZXR0aW5nIHRoZSBhbmNob3IgdG8gMC41LDAuNSBtZWFucyB0aGUgdGV4dHVyZSdzIG9yaWdpbiBpcyBjZW50ZXJlZFxuICAgICAqIFNldHRpbmcgdGhlIGFuY2hvciB0byAxLDEgd291bGQgbWVhbiB0aGUgdGV4dHVyZSdzIG9yaWdpbiBwb2ludCB3aWxsIGJlIHRoZSBib3R0b20gcmlnaHQgY29ybmVyXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlBvaW50fVxuICAgICAqL1xuICAgIHRoaXMuYW5jaG9yID0gbmV3IG1hdGguUG9pbnQoKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSB0ZXh0dXJlIHRoYXQgdGhlIHNwcml0ZSBpcyB1c2luZ1xuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5UZXh0dXJlfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fdGV4dHVyZSA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgd2lkdGggb2YgdGhlIHNwcml0ZSAodGhpcyBpcyBpbml0aWFsbHkgc2V0IGJ5IHRoZSB0ZXh0dXJlKVxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fd2lkdGggPSAwO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGhlaWdodCBvZiB0aGUgc3ByaXRlICh0aGlzIGlzIGluaXRpYWxseSBzZXQgYnkgdGhlIHRleHR1cmUpXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9oZWlnaHQgPSAwO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHRpbnQgYXBwbGllZCB0byB0aGUgc3ByaXRlLiBUaGlzIGlzIGEgaGV4IHZhbHVlLiBBIHZhbHVlIG9mIDB4RkZGRkZGIHdpbGwgcmVtb3ZlIGFueSB0aW50IGVmZmVjdC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAweEZGRkZGRlxuICAgICAqL1xuICAgIHRoaXMudGludCA9IDB4RkZGRkZGO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGJsZW5kIG1vZGUgdG8gYmUgYXBwbGllZCB0byB0aGUgc3ByaXRlLiBBcHBseSBhIHZhbHVlIG9mIGBQSVhJLkJMRU5EX01PREVTLk5PUk1BTGAgdG8gcmVzZXQgdGhlIGJsZW5kIG1vZGUuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgUElYSS5CTEVORF9NT0RFUy5OT1JNQUxcbiAgICAgKiBAc2VlIFBJWEkuQkxFTkRfTU9ERVNcbiAgICAgKi9cbiAgICB0aGlzLmJsZW5kTW9kZSA9IENPTlNULkJMRU5EX01PREVTLk5PUk1BTDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBzaGFkZXIgdGhhdCB3aWxsIGJlIHVzZWQgdG8gcmVuZGVyIHRoZSBzcHJpdGUuIFNldCB0byBudWxsIHRvIHJlbW92ZSBhIGN1cnJlbnQgc2hhZGVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5BYnN0cmFjdEZpbHRlcnxQSVhJLlNoYWRlcn1cbiAgICAgKi9cbiAgICB0aGlzLnNoYWRlciA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBBbiBpbnRlcm5hbCBjYWNoZWQgdmFsdWUgb2YgdGhlIHRpbnQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMHhGRkZGRkZcbiAgICAgKi9cbiAgICB0aGlzLmNhY2hlZFRpbnQgPSAweEZGRkZGRjtcblxuICAgIC8vIGNhbGwgdGV4dHVyZSBzZXR0ZXJcbiAgICB0aGlzLnRleHR1cmUgPSB0ZXh0dXJlIHx8IFRleHR1cmUuRU1QVFk7XG4gICAgdGhpcy50ZXh0dXJlRGlydHkgPSB0cnVlXG4gICAgdGhpcy52ZXJ0ZXhEaXJ0eSA9IHRydWU7XG4gICAgdGhpcy52ZXJ0ZXhEYXRhID0gbmV3IEZsb2F0MzJBcnJheSg4KTtcbn1cblxuLy8gY29uc3RydWN0b3JcblNwcml0ZS5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKENvbnRhaW5lci5wcm90b3R5cGUpO1xuU3ByaXRlLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFNwcml0ZTtcbm1vZHVsZS5leHBvcnRzID0gU3ByaXRlO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhTcHJpdGUucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogVGhlIHdpZHRoIG9mIHRoZSBzcHJpdGUsIHNldHRpbmcgdGhpcyB3aWxsIGFjdHVhbGx5IG1vZGlmeSB0aGUgc2NhbGUgdG8gYWNoaWV2ZSB0aGUgdmFsdWUgc2V0XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuU3ByaXRlI1xuICAgICAqL1xuICAgIHdpZHRoOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIE1hdGguYWJzKHRoaXMuc2NhbGUueCkgKiB0aGlzLnRleHR1cmUuX2ZyYW1lLndpZHRoO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdmFyIHNpZ24gPSB1dGlscy5zaWduKHRoaXMuc2NhbGUueCkgfHwgMTtcbiAgICAgICAgICAgIHRoaXMuc2NhbGUueCA9IHNpZ24gKiB2YWx1ZSAvIHRoaXMudGV4dHVyZS5fZnJhbWUud2lkdGg7XG4gICAgICAgICAgICB0aGlzLl93aWR0aCA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFRoZSBoZWlnaHQgb2YgdGhlIHNwcml0ZSwgc2V0dGluZyB0aGlzIHdpbGwgYWN0dWFsbHkgbW9kaWZ5IHRoZSBzY2FsZSB0byBhY2hpZXZlIHRoZSB2YWx1ZSBzZXRcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5TcHJpdGUjXG4gICAgICovXG4gICAgaGVpZ2h0OiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuICBNYXRoLmFicyh0aGlzLnNjYWxlLnkpICogdGhpcy50ZXh0dXJlLl9mcmFtZS5oZWlnaHQ7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB2YXIgc2lnbiA9IHV0aWxzLnNpZ24odGhpcy5zY2FsZS55KSB8fCAxO1xuICAgICAgICAgICAgdGhpcy5zY2FsZS55ID0gc2lnbiAqIHZhbHVlIC8gdGhpcy50ZXh0dXJlLl9mcmFtZS5oZWlnaHQ7XG4gICAgICAgICAgICB0aGlzLl9oZWlnaHQgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBUaGUgdGV4dHVyZSB0aGF0IHRoZSBzcHJpdGUgaXMgdXNpbmdcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuVGV4dHVyZX1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5TcHJpdGUjXG4gICAgICovXG4gICAgdGV4dHVyZToge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiAgdGhpcy5fdGV4dHVyZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGlmICh0aGlzLl90ZXh0dXJlID09PSB2YWx1ZSlcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuX3RleHR1cmUgPSB2YWx1ZTtcbiAgICAgICAgICAgIHRoaXMuY2FjaGVkVGludCA9IDB4RkZGRkZGO1xuXG4gICAgICAgICAgICB0aGlzLnRleHR1cmVEaXJ0eSA9IHRydWU7XG5cbiAgICAgICAgICAgIGlmICh2YWx1ZSlcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAvLyB3YWl0IGZvciB0aGUgdGV4dHVyZSB0byBsb2FkXG4gICAgICAgICAgICAgICAgaWYgKHZhbHVlLmJhc2VUZXh0dXJlLmhhc0xvYWRlZClcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX29uVGV4dHVyZVVwZGF0ZSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICB2YWx1ZS5vbmNlKCd1cGRhdGUnLCB0aGlzLl9vblRleHR1cmVVcGRhdGUsIHRoaXMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn0pO1xuXG4vKipcbiAqIFdoZW4gdGhlIHRleHR1cmUgaXMgdXBkYXRlZCwgdGhpcyBldmVudCB3aWxsIGZpcmUgdG8gdXBkYXRlIHRoZSBzY2FsZSBhbmQgZnJhbWVcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5TcHJpdGUucHJvdG90eXBlLl9vblRleHR1cmVVcGRhdGUgPSBmdW5jdGlvbiAoKVxue1xuICAgIHRoaXMudGV4dHVyZURpcnR5ID0gdHJ1ZTtcblxuICAgIC8vIHNvIGlmIF93aWR0aCBpcyAwIHRoZW4gd2lkdGggd2FzIG5vdCBzZXQuLlxuICAgIGlmICh0aGlzLl93aWR0aClcbiAgICB7XG4gICAgICAgIHRoaXMuc2NhbGUueCA9IHV0aWxzLnNpZ24odGhpcy5zY2FsZS54KSAqIHRoaXMuX3dpZHRoIC8gdGhpcy50ZXh0dXJlLmZyYW1lLndpZHRoO1xuICAgIH1cblxuICAgIGlmICh0aGlzLl9oZWlnaHQpXG4gICAge1xuICAgICAgICB0aGlzLnNjYWxlLnkgPSB1dGlscy5zaWduKHRoaXMuc2NhbGUueSkgKiB0aGlzLl9oZWlnaHQgLyB0aGlzLnRleHR1cmUuZnJhbWUuaGVpZ2h0O1xuICAgIH1cbn07XG5cblNwcml0ZS5wcm90b3R5cGUuY2FjbHVsYXRlVmVydGljZXMgPSBmdW5jdGlvbiAoKVxue1xuXG4gICAgdmFyIHRleHR1cmUgPSB0aGlzLl90ZXh0dXJlLFxuICAgICAgICB3dCA9IHRoaXMud29ybGRUcmFuc2Zvcm0sXG4gICAgICAgIGEgPSB3dC5hLCBiID0gd3QuYiwgYyA9IHd0LmMsIGQgPSB3dC5kLCB0eCA9IHd0LnR4LCB0eSA9IHd0LnR5LFxuICAgICAgICB2ZXJ0ZXhEYXRhID0gdGhpcy52ZXJ0ZXhEYXRhLFxuICAgICAgICB3MCwgdzEsIGgwLCBoMSxcbiAgICAgICAgdHJpbSA9IHRleHR1cmUudHJpbTtcbiAgICBcbiAgICBpZiAodHJpbSlcbiAgICB7XG4gICAgICAgIC8vIGlmIHRoZSBzcHJpdGUgaXMgdHJpbW1lZCBhbmQgaXMgbm90IGEgdGlsaW5nc3ByaXRlIHRoZW4gd2UgbmVlZCB0byBhZGQgdGhlIGV4dHJhIHNwYWNlIGJlZm9yZSB0cmFuc2Zvcm1pbmcgdGhlIHNwcml0ZSBjb29yZHMuLlxuICAgICAgICB3MSA9IHRyaW0ueCAtIHRoaXMuYW5jaG9yLnggKiB0cmltLndpZHRoO1xuICAgICAgICB3MCA9IHcxICsgdGV4dHVyZS5jcm9wLndpZHRoO1xuXG4gICAgICAgIGgxID0gdHJpbS55IC0gdGhpcy5hbmNob3IueSAqIHRyaW0uaGVpZ2h0O1xuICAgICAgICBoMCA9IGgxICsgdGV4dHVyZS5jcm9wLmhlaWdodDtcblxuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICB3MCA9ICh0ZXh0dXJlLl9mcmFtZS53aWR0aCApICogKDEtdGhpcy5hbmNob3IueCk7XG4gICAgICAgIHcxID0gKHRleHR1cmUuX2ZyYW1lLndpZHRoICkgKiAtdGhpcy5hbmNob3IueDtcblxuICAgICAgICBoMCA9IHRleHR1cmUuX2ZyYW1lLmhlaWdodCAqICgxLXRoaXMuYW5jaG9yLnkpO1xuICAgICAgICBoMSA9IHRleHR1cmUuX2ZyYW1lLmhlaWdodCAqIC10aGlzLmFuY2hvci55O1xuICAgIH1cblxuICAgIC8vIHh5XG4gICAgdmVydGV4RGF0YVswXSA9IGEgKiB3MSArIGMgKiBoMSArIHR4O1xuICAgIHZlcnRleERhdGFbMV0gPSBkICogaDEgKyBiICogdzEgKyB0eTtcblxuICAgIC8vIHh5XG4gICAgdmVydGV4RGF0YVsyXSA9IGEgKiB3MCArIGMgKiBoMSArIHR4O1xuICAgIHZlcnRleERhdGFbM10gPSBkICogaDEgKyBiICogdzAgKyB0eTtcblxuICAgICAvLyB4eVxuICAgIHZlcnRleERhdGFbNF0gPSBhICogdzAgKyBjICogaDAgKyB0eDtcbiAgICB2ZXJ0ZXhEYXRhWzVdID0gZCAqIGgwICsgYiAqIHcwICsgdHk7XG5cbiAgICAvLyB4eVxuICAgIHZlcnRleERhdGFbNl0gPSBhICogdzEgKyBjICogaDAgKyB0eDtcbiAgICB2ZXJ0ZXhEYXRhWzddID0gZCAqIGgwICsgYiAqIHcxICsgdHk7XG5cblxufVxuXG4vKipcbipcbiogUmVuZGVycyB0aGUgb2JqZWN0IHVzaW5nIHRoZSBXZWJHTCByZW5kZXJlclxuKlxuKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcn1cbiogQHByaXZhdGVcbiovXG5TcHJpdGUucHJvdG90eXBlLl9yZW5kZXJXZWJHTCA9IGZ1bmN0aW9uIChyZW5kZXJlcilcbntcbiAgICBpZih0aGlzLnRleHR1cmVEaXJ0eSlcbiAgICB7XG4gICAgICAgIHRoaXMudGV4dHVyZURpcnR5ID0gZmFsc2U7XG5cbiAgICAgICAgdGhpcy5fb25UZXh0dXJlVXBkYXRlKCk7XG4gICAgICAgIFxuICAgICAgICB0aGlzLnZlcnRleERpcnR5ID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBpZih0aGlzLnZlcnRleERpcnR5KVxuICAgIHtcbiAgICAgICAgdGhpcy52ZXJ0ZXhEaXJ0eSA9IGZhbHNlO1xuXG4gICAgICAgIC8vIHNldCB0aGUgdmVydGV4IGRhdGFcbiAgICAgICAgdGhpcy5jYWNsdWxhdGVWZXJ0aWNlcygpO1xuXG4gICAgfVxuICAgIFxuICAgIHJlbmRlcmVyLnNldE9iamVjdFJlbmRlcmVyKHJlbmRlcmVyLnBsdWdpbnMuc3ByaXRlKTtcbiAgICByZW5kZXJlci5wbHVnaW5zLnNwcml0ZS5yZW5kZXIodGhpcyk7XG59O1xuXG4vKipcbiAqIFJldHVybnMgdGhlIGJvdW5kcyBvZiB0aGUgU3ByaXRlIGFzIGEgcmVjdGFuZ2xlLiBUaGUgYm91bmRzIGNhbGN1bGF0aW9uIHRha2VzIHRoZSB3b3JsZFRyYW5zZm9ybSBpbnRvIGFjY291bnQuXG4gKlxuICogQHBhcmFtIG1hdHJpeCB7UElYSS5NYXRyaXh9IHRoZSB0cmFuc2Zvcm1hdGlvbiBtYXRyaXggb2YgdGhlIHNwcml0ZVxuICogQHJldHVybiB7UElYSS5SZWN0YW5nbGV9IHRoZSBmcmFtaW5nIHJlY3RhbmdsZVxuICovXG5TcHJpdGUucHJvdG90eXBlLmdldEJvdW5kcyA9IGZ1bmN0aW9uIChtYXRyaXgpXG57XG4gICAgaWYoIXRoaXMuX2N1cnJlbnRCb3VuZHMpXG4gICAge1xuICAgICAgICBpZih0aGlzLnZlcnRleERpcnR5KVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnZlcnRleERpcnR5ID0gZmFsc2U7XG5cbiAgICAgICAgICAgIC8vIHNldCB0aGUgdmVydGV4IGRhdGFcbiAgICAgICAgICAgIHRoaXMuY2FjbHVsYXRlVmVydGljZXMoKTtcblxuICAgICAgICB9XG5cbiAgICAgICAgdmFyIG1pblgsXG4gICAgICAgICAgICBtYXhYLFxuICAgICAgICAgICAgbWluWSxcbiAgICAgICAgICAgIG1heFksXG4gICAgICAgICAgICB2ZXJ0ZXhEYXRhID0gdGhpcy52ZXJ0ZXhEYXRhO1xuXG4gICAgICAgIHZhciB4MSA9IHZlcnRleERhdGFbMF1cbiAgICAgICAgdmFyIHkxID0gdmVydGV4RGF0YVsxXVxuXG4gICAgICAgIHZhciB4MiA9IHZlcnRleERhdGFbMl1cbiAgICAgICAgdmFyIHkyID0gdmVydGV4RGF0YVszXVxuXG4gICAgICAgIHZhciB4MyA9IHZlcnRleERhdGFbNF1cbiAgICAgICAgdmFyIHkzID0gdmVydGV4RGF0YVs1XVxuXG4gICAgICAgIHZhciB4NCA9IHZlcnRleERhdGFbNl1cbiAgICAgICAgdmFyIHk0ID0gdmVydGV4RGF0YVs3XVxuXG4gICAgICAgIG1pblggPSB4MTtcbiAgICAgICAgbWluWCA9IHgyIDwgbWluWCA/IHgyIDogbWluWDtcbiAgICAgICAgbWluWCA9IHgzIDwgbWluWCA/IHgzIDogbWluWDtcbiAgICAgICAgbWluWCA9IHg0IDwgbWluWCA/IHg0IDogbWluWDtcblxuICAgICAgICBtaW5ZID0geTE7XG4gICAgICAgIG1pblkgPSB5MiA8IG1pblkgPyB5MiA6IG1pblk7XG4gICAgICAgIG1pblkgPSB5MyA8IG1pblkgPyB5MyA6IG1pblk7XG4gICAgICAgIG1pblkgPSB5NCA8IG1pblkgPyB5NCA6IG1pblk7XG5cbiAgICAgICAgbWF4WCA9IHgxO1xuICAgICAgICBtYXhYID0geDIgPiBtYXhYID8geDIgOiBtYXhYO1xuICAgICAgICBtYXhYID0geDMgPiBtYXhYID8geDMgOiBtYXhYO1xuICAgICAgICBtYXhYID0geDQgPiBtYXhYID8geDQgOiBtYXhYO1xuXG4gICAgICAgIG1heFkgPSB5MTtcbiAgICAgICAgbWF4WSA9IHkyID4gbWF4WSA/IHkyIDogbWF4WTtcbiAgICAgICAgbWF4WSA9IHkzID4gbWF4WSA/IHkzIDogbWF4WTtcbiAgICAgICAgbWF4WSA9IHk0ID4gbWF4WSA/IHk0IDogbWF4WTtcblxuICAgICAgICAvLyBjaGVjayBmb3IgY2hpbGRyZW5cbiAgICAgICAgaWYodGhpcy5jaGlsZHJlbi5sZW5ndGgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHZhciBjaGlsZEJvdW5kcyA9IHRoaXMuY29udGFpbmVyR2V0Qm91bmRzKCk7XG5cbiAgICAgICAgICAgIHcwID0gY2hpbGRCb3VuZHMueDtcbiAgICAgICAgICAgIHcxID0gY2hpbGRCb3VuZHMueCArIGNoaWxkQm91bmRzLndpZHRoO1xuICAgICAgICAgICAgaDAgPSBjaGlsZEJvdW5kcy55O1xuICAgICAgICAgICAgaDEgPSBjaGlsZEJvdW5kcy55ICsgY2hpbGRCb3VuZHMuaGVpZ2h0O1xuXG4gICAgICAgICAgICBtaW5YID0gKG1pblggPCB3MCkgPyBtaW5YIDogdzA7XG4gICAgICAgICAgICBtaW5ZID0gKG1pblkgPCBoMCkgPyBtaW5ZIDogaDA7XG5cbiAgICAgICAgICAgIG1heFggPSAobWF4WCA+IHcxKSA/IG1heFggOiB3MTtcbiAgICAgICAgICAgIG1heFkgPSAobWF4WSA+IGgxKSA/IG1heFkgOiBoMTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBib3VuZHMgPSB0aGlzLl9ib3VuZHM7XG5cbiAgICAgICAgYm91bmRzLnggPSBtaW5YO1xuICAgICAgICBib3VuZHMud2lkdGggPSBtYXhYIC0gbWluWDtcblxuICAgICAgICBib3VuZHMueSA9IG1pblk7XG4gICAgICAgIGJvdW5kcy5oZWlnaHQgPSBtYXhZIC0gbWluWTtcblxuICAgICAgICAvLyBzdG9yZSBhIHJlZmVyZW5jZSBzbyB0aGF0IGlmIHRoaXMgZnVuY3Rpb24gZ2V0cyBjYWxsZWQgYWdhaW4gaW4gdGhlIHJlbmRlciBjeWNsZSB3ZSBkbyBub3QgaGF2ZSB0byByZWNhbGN1bGF0ZVxuICAgICAgICB0aGlzLl9jdXJyZW50Qm91bmRzID0gYm91bmRzO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLl9jdXJyZW50Qm91bmRzO1xufTtcblxuLyoqXG4gKiBHZXRzIHRoZSBsb2NhbCBib3VuZHMgb2YgdGhlIHNwcml0ZSBvYmplY3QuXG4gKlxuICovXG5TcHJpdGUucHJvdG90eXBlLmdldExvY2FsQm91bmRzID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLl9ib3VuZHMueCA9IC10aGlzLl90ZXh0dXJlLl9mcmFtZS53aWR0aCAqIHRoaXMuYW5jaG9yLng7XG4gICAgdGhpcy5fYm91bmRzLnkgPSAtdGhpcy5fdGV4dHVyZS5fZnJhbWUuaGVpZ2h0ICogdGhpcy5hbmNob3IueTtcbiAgICB0aGlzLl9ib3VuZHMud2lkdGggPSB0aGlzLl90ZXh0dXJlLl9mcmFtZS53aWR0aDtcbiAgICB0aGlzLl9ib3VuZHMuaGVpZ2h0ID0gdGhpcy5fdGV4dHVyZS5fZnJhbWUuaGVpZ2h0O1xuICAgIHJldHVybiB0aGlzLl9ib3VuZHM7XG59O1xuXG4vKipcbiogVGVzdHMgaWYgYSBwb2ludCBpcyBpbnNpZGUgdGhpcyBzcHJpdGVcbipcbiogQHBhcmFtIHBvaW50IHtQSVhJLlBvaW50fSB0aGUgcG9pbnQgdG8gdGVzdFxuKiBAcmV0dXJuIHtib29sZWFufSB0aGUgcmVzdWx0IG9mIHRoZSB0ZXN0XG4qL1xuU3ByaXRlLnByb3RvdHlwZS5jb250YWluc1BvaW50ID0gZnVuY3Rpb24oIHBvaW50IClcbntcbiAgICB0aGlzLndvcmxkVHJhbnNmb3JtLmFwcGx5SW52ZXJzZShwb2ludCwgIHRlbXBQb2ludCk7XG5cbiAgICB2YXIgd2lkdGggPSB0aGlzLl90ZXh0dXJlLl9mcmFtZS53aWR0aDtcbiAgICB2YXIgaGVpZ2h0ID0gdGhpcy5fdGV4dHVyZS5fZnJhbWUuaGVpZ2h0O1xuICAgIHZhciB4MSA9IC13aWR0aCAqIHRoaXMuYW5jaG9yLng7XG4gICAgdmFyIHkxO1xuXG4gICAgaWYgKCB0ZW1wUG9pbnQueCA+IHgxICYmIHRlbXBQb2ludC54IDwgeDEgKyB3aWR0aCApXG4gICAge1xuICAgICAgICB5MSA9IC1oZWlnaHQgKiB0aGlzLmFuY2hvci55O1xuXG4gICAgICAgIGlmICggdGVtcFBvaW50LnkgPiB5MSAmJiB0ZW1wUG9pbnQueSA8IHkxICsgaGVpZ2h0IClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2U7XG59O1xuXG4vKipcbiogUmVuZGVycyB0aGUgb2JqZWN0IHVzaW5nIHRoZSBDYW52YXMgcmVuZGVyZXJcbipcbiogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLkNhbnZhc1JlbmRlcmVyfSBUaGUgcmVuZGVyZXJcbiogQHByaXZhdGVcbiovXG5TcHJpdGUucHJvdG90eXBlLl9yZW5kZXJDYW52YXMgPSBmdW5jdGlvbiAocmVuZGVyZXIpXG57XG4gICAgaWYgKHRoaXMudGV4dHVyZS5jcm9wLndpZHRoIDw9IDAgfHwgdGhpcy50ZXh0dXJlLmNyb3AuaGVpZ2h0IDw9IDApXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFyIGNvbXBvc2l0ZU9wZXJhdGlvbiA9IHJlbmRlcmVyLmJsZW5kTW9kZXNbdGhpcy5ibGVuZE1vZGVdO1xuICAgIGlmIChjb21wb3NpdGVPcGVyYXRpb24gIT09IHJlbmRlcmVyLmNvbnRleHQuZ2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uKVxuICAgIHtcbiAgICAgICAgcmVuZGVyZXIuY29udGV4dC5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb24gPSBjb21wb3NpdGVPcGVyYXRpb247XG4gICAgfVxuXG4gICAgLy8gIElnbm9yZSBudWxsIHNvdXJjZXNcbiAgICBpZiAodGhpcy50ZXh0dXJlLnZhbGlkKVxuICAgIHtcbiAgICAgICAgdmFyIHRleHR1cmUgPSB0aGlzLl90ZXh0dXJlLFxuICAgICAgICAgICAgd3QgPSB0aGlzLndvcmxkVHJhbnNmb3JtLFxuICAgICAgICAgICAgZHgsXG4gICAgICAgICAgICBkeSxcbiAgICAgICAgICAgIHdpZHRoLFxuICAgICAgICAgICAgaGVpZ2h0O1xuXG4gICAgICAgIHJlbmRlcmVyLmNvbnRleHQuZ2xvYmFsQWxwaGEgPSB0aGlzLndvcmxkQWxwaGE7XG5cbiAgICAgICAgLy8gSWYgc21vb3RoaW5nRW5hYmxlZCBpcyBzdXBwb3J0ZWQgYW5kIHdlIG5lZWQgdG8gY2hhbmdlIHRoZSBzbW9vdGhpbmcgcHJvcGVydHkgZm9yIHRoaXMgdGV4dHVyZVxuICAgICAgICB2YXIgc21vb3RoaW5nRW5hYmxlZCA9IHRleHR1cmUuYmFzZVRleHR1cmUuc2NhbGVNb2RlID09PSBDT05TVC5TQ0FMRV9NT0RFUy5MSU5FQVI7XG4gICAgICAgIGlmIChyZW5kZXJlci5zbW9vdGhQcm9wZXJ0eSAmJiByZW5kZXJlci5jb250ZXh0W3JlbmRlcmVyLnNtb290aFByb3BlcnR5XSAhPT0gc21vb3RoaW5nRW5hYmxlZClcbiAgICAgICAge1xuICAgICAgICAgICAgcmVuZGVyZXIuY29udGV4dFtyZW5kZXJlci5zbW9vdGhQcm9wZXJ0eV0gPSBzbW9vdGhpbmdFbmFibGVkO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gSWYgdGhlIHRleHR1cmUgaXMgdHJpbW1lZCB3ZSBvZmZzZXQgYnkgdGhlIHRyaW0geC95LCBvdGhlcndpc2Ugd2UgdXNlIHRoZSBmcmFtZSBkaW1lbnNpb25zXG5cbiAgICAgICAgaWYodGV4dHVyZS5yb3RhdGUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHdpZHRoID0gdGV4dHVyZS5jcm9wLmhlaWdodDtcbiAgICAgICAgICAgIGhlaWdodCA9IHRleHR1cmUuY3JvcC53aWR0aDtcblxuICAgICAgICAgICAgZHggPSAodGV4dHVyZS50cmltKSA/IHRleHR1cmUudHJpbS55IC0gdGhpcy5hbmNob3IueSAqIHRleHR1cmUudHJpbS5oZWlnaHQgOiB0aGlzLmFuY2hvci55ICogLXRleHR1cmUuX2ZyYW1lLmhlaWdodDtcbiAgICAgICAgICAgIGR5ID0gKHRleHR1cmUudHJpbSkgPyB0ZXh0dXJlLnRyaW0ueCAtIHRoaXMuYW5jaG9yLnggKiB0ZXh0dXJlLnRyaW0ud2lkdGggOiB0aGlzLmFuY2hvci54ICogLXRleHR1cmUuX2ZyYW1lLndpZHRoO1xuICAgICAgIFxuICAgICAgICAgICAgZHggKz0gd2lkdGg7XG5cbiAgICAgICAgICAgIHd0LnR4ID0gZHkgKiB3dC5hICsgZHggKiB3dC5jICsgd3QudHg7XG4gICAgICAgICAgICB3dC50eSA9IGR5ICogd3QuYiArIGR4ICogd3QuZCArIHd0LnR5O1xuXG4gICAgICAgICAgICB2YXIgdGVtcCA9IHd0LmE7XG4gICAgICAgICAgICB3dC5hICA9IC13dC5jO1xuICAgICAgICAgICAgd3QuYyAgPSAgdGVtcDtcblxuICAgICAgICAgICAgdGVtcCA9IHd0LmI7XG4gICAgICAgICAgICB3dC5iICA9IC13dC5kO1xuICAgICAgICAgICAgd3QuZCAgPSAgdGVtcDtcblxuICAgICAgICAgICAgLy8gdGhlIGFuY2hvciBoYXMgYWxyZWFkeSBiZWVuIGFwcGxpZWQgYWJvdmUsIHNvIGxldHMgc2V0IGl0IHRvIHplcm9cbiAgICAgICAgICAgIGR4ID0gMDtcbiAgICAgICAgICAgIGR5ID0gMDtcblxuICAgICAgICB9XG4gICAgICAgIGVsc2VcbiAgICAgICAge1xuICAgICAgICAgICAgd2lkdGggPSB0ZXh0dXJlLmNyb3Aud2lkdGg7XG4gICAgICAgICAgICBoZWlnaHQgPSB0ZXh0dXJlLmNyb3AuaGVpZ2h0O1xuXG4gICAgICAgICAgICBkeCA9ICh0ZXh0dXJlLnRyaW0pID8gdGV4dHVyZS50cmltLnggLSB0aGlzLmFuY2hvci54ICogdGV4dHVyZS50cmltLndpZHRoIDogdGhpcy5hbmNob3IueCAqIC10ZXh0dXJlLl9mcmFtZS53aWR0aDtcbiAgICAgICAgICAgIGR5ID0gKHRleHR1cmUudHJpbSkgPyB0ZXh0dXJlLnRyaW0ueSAtIHRoaXMuYW5jaG9yLnkgKiB0ZXh0dXJlLnRyaW0uaGVpZ2h0IDogdGhpcy5hbmNob3IueSAqIC10ZXh0dXJlLl9mcmFtZS5oZWlnaHQ7XG4gICAgICAgIH1cblxuXG5cbiAgICAgICAgLy8gQWxsb3cgZm9yIHBpeGVsIHJvdW5kaW5nXG4gICAgICAgIGlmIChyZW5kZXJlci5yb3VuZFBpeGVscylcbiAgICAgICAge1xuICAgICAgICAgICAgcmVuZGVyZXIuY29udGV4dC5zZXRUcmFuc2Zvcm0oXG4gICAgICAgICAgICAgICAgd3QuYSxcbiAgICAgICAgICAgICAgICB3dC5iLFxuICAgICAgICAgICAgICAgIHd0LmMsXG4gICAgICAgICAgICAgICAgd3QuZCxcbiAgICAgICAgICAgICAgICAod3QudHggKiByZW5kZXJlci5yZXNvbHV0aW9uKSB8IDAsXG4gICAgICAgICAgICAgICAgKHd0LnR5ICogcmVuZGVyZXIucmVzb2x1dGlvbikgfCAwXG4gICAgICAgICAgICApO1xuXG4gICAgICAgICAgICBkeCA9IGR4IHwgMDtcbiAgICAgICAgICAgIGR5ID0gZHkgfCAwO1xuICAgICAgICB9XG4gICAgICAgIGVsc2VcbiAgICAgICAge1xuXG4gICAgICAgICAgICByZW5kZXJlci5jb250ZXh0LnNldFRyYW5zZm9ybShcbiAgICAgICAgICAgICAgICB3dC5hLFxuICAgICAgICAgICAgICAgIHd0LmIsXG4gICAgICAgICAgICAgICAgd3QuYyxcbiAgICAgICAgICAgICAgICB3dC5kLFxuICAgICAgICAgICAgICAgIHd0LnR4ICogcmVuZGVyZXIucmVzb2x1dGlvbixcbiAgICAgICAgICAgICAgICB3dC50eSAqIHJlbmRlcmVyLnJlc29sdXRpb25cbiAgICAgICAgICAgICk7XG5cblxuICAgICAgICB9XG5cbiAgICAgICAgdmFyIHJlc29sdXRpb24gPSB0ZXh0dXJlLmJhc2VUZXh0dXJlLnJlc29sdXRpb247XG5cbiAgICAgICAgaWYgKHRoaXMudGludCAhPT0gMHhGRkZGRkYpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmNhY2hlZFRpbnQgIT09IHRoaXMudGludClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB0aGlzLmNhY2hlZFRpbnQgPSB0aGlzLnRpbnQ7XG5cbiAgICAgICAgICAgICAgICAvLyBUT0RPIGNsZWFuIHVwIGNhY2hpbmcgLSBob3cgdG8gY2xlYW4gdXAgdGhlIGNhY2hlcz9cbiAgICAgICAgICAgICAgICB0aGlzLnRpbnRlZFRleHR1cmUgPSBDYW52YXNUaW50ZXIuZ2V0VGludGVkVGV4dHVyZSh0aGlzLCB0aGlzLnRpbnQpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZW5kZXJlci5jb250ZXh0LmRyYXdJbWFnZShcbiAgICAgICAgICAgICAgICB0aGlzLnRpbnRlZFRleHR1cmUsXG4gICAgICAgICAgICAgICAgMCxcbiAgICAgICAgICAgICAgICAwLFxuICAgICAgICAgICAgICAgIHdpZHRoICogcmVzb2x1dGlvbixcbiAgICAgICAgICAgICAgICBoZWlnaHQgKiByZXNvbHV0aW9uLFxuICAgICAgICAgICAgICAgIGR4ICogcmVuZGVyZXIucmVzb2x1dGlvbixcbiAgICAgICAgICAgICAgICBkeSAqIHJlbmRlcmVyLnJlc29sdXRpb24sXG4gICAgICAgICAgICAgICAgd2lkdGggKiByZW5kZXJlci5yZXNvbHV0aW9uLFxuICAgICAgICAgICAgICAgIGhlaWdodCAqIHJlbmRlcmVyLnJlc29sdXRpb25cbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgICByZW5kZXJlci5jb250ZXh0LmRyYXdJbWFnZShcbiAgICAgICAgICAgICAgICB0ZXh0dXJlLmJhc2VUZXh0dXJlLnNvdXJjZSxcbiAgICAgICAgICAgICAgICB0ZXh0dXJlLmNyb3AueCAqIHJlc29sdXRpb24sXG4gICAgICAgICAgICAgICAgdGV4dHVyZS5jcm9wLnkgKiByZXNvbHV0aW9uLFxuICAgICAgICAgICAgICAgIHdpZHRoICogcmVzb2x1dGlvbixcbiAgICAgICAgICAgICAgICBoZWlnaHQgKiByZXNvbHV0aW9uLFxuICAgICAgICAgICAgICAgIGR4ICAqIHJlbmRlcmVyLnJlc29sdXRpb24sXG4gICAgICAgICAgICAgICAgZHkgICogcmVuZGVyZXIucmVzb2x1dGlvbixcbiAgICAgICAgICAgICAgICB3aWR0aCAqIHJlbmRlcmVyLnJlc29sdXRpb24sXG4gICAgICAgICAgICAgICAgaGVpZ2h0ICogcmVuZGVyZXIucmVzb2x1dGlvblxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgIH1cbn07XG5cbi8qKlxuICogRGVzdHJveXMgdGhpcyBzcHJpdGUgYW5kIG9wdGlvbmFsbHkgaXRzIHRleHR1cmVcbiAqXG4gKiBAcGFyYW0gW2Rlc3Ryb3lUZXh0dXJlPWZhbHNlXSB7Ym9vbGVhbn0gU2hvdWxkIGl0IGRlc3Ryb3kgdGhlIGN1cnJlbnQgdGV4dHVyZSBvZiB0aGUgc3ByaXRlIGFzIHdlbGxcbiAqIEBwYXJhbSBbZGVzdHJveUJhc2VUZXh0dXJlPWZhbHNlXSB7Ym9vbGVhbn0gU2hvdWxkIGl0IGRlc3Ryb3kgdGhlIGJhc2UgdGV4dHVyZSBvZiB0aGUgc3ByaXRlIGFzIHdlbGxcbiAqL1xuU3ByaXRlLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKGRlc3Ryb3lUZXh0dXJlLCBkZXN0cm95QmFzZVRleHR1cmUpXG57XG4gICAgQ29udGFpbmVyLnByb3RvdHlwZS5kZXN0cm95LmNhbGwodGhpcyk7XG5cbiAgICB0aGlzLmFuY2hvciA9IG51bGw7XG5cbiAgICBpZiAoZGVzdHJveVRleHR1cmUpXG4gICAge1xuICAgICAgICB0aGlzLl90ZXh0dXJlLmRlc3Ryb3koZGVzdHJveUJhc2VUZXh0dXJlKTtcbiAgICB9XG5cbiAgICB0aGlzLl90ZXh0dXJlID0gbnVsbDtcbiAgICB0aGlzLnNoYWRlciA9IG51bGw7XG59O1xuXG4vLyBzb21lIGhlbHBlciBmdW5jdGlvbnMuLlxuXG4vKipcbiAqIEhlbHBlciBmdW5jdGlvbiB0aGF0IGNyZWF0ZXMgYSBzcHJpdGUgdGhhdCB3aWxsIGNvbnRhaW4gYSB0ZXh0dXJlIGZyb20gdGhlIFRleHR1cmVDYWNoZSBiYXNlZCBvbiB0aGUgZnJhbWVJZFxuICogVGhlIGZyYW1lIGlkcyBhcmUgY3JlYXRlZCB3aGVuIGEgVGV4dHVyZSBwYWNrZXIgZmlsZSBoYXMgYmVlbiBsb2FkZWRcbiAqXG4gKiBAc3RhdGljXG4gKiBAcGFyYW0gZnJhbWVJZCB7c3RyaW5nfSBUaGUgZnJhbWUgSWQgb2YgdGhlIHRleHR1cmUgaW4gdGhlIGNhY2hlXG4gKiBAcGFyYW0gW2Nyb3Nzb3JpZ2luPShhdXRvKV0ge2Jvb2xlYW59IGlmIHlvdSB3YW50IHRvIHNwZWNpZnkgdGhlIGNyb3NzLW9yaWdpbiBwYXJhbWV0ZXJcbiAqIEBwYXJhbSBbc2NhbGVNb2RlPVBJWEkuU0NBTEVfTU9ERVMuREVGQVVMVF0ge251bWJlcn0gaWYgeW91IHdhbnQgdG8gc3BlY2lmeSB0aGUgc2NhbGUgbW9kZSwgc2VlIHtAbGluayBQSVhJLlNDQUxFX01PREVTfSBmb3IgcG9zc2libGUgdmFsdWVzXG4gKiBAcmV0dXJuIHtQSVhJLlNwcml0ZX0gQSBuZXcgU3ByaXRlIHVzaW5nIGEgdGV4dHVyZSBmcm9tIHRoZSB0ZXh0dXJlIGNhY2hlIG1hdGNoaW5nIHRoZSBmcmFtZUlkXG4gKi9cblNwcml0ZS5mcm9tRnJhbWUgPSBmdW5jdGlvbiAoZnJhbWVJZClcbntcbiAgICB2YXIgdGV4dHVyZSA9IHV0aWxzLlRleHR1cmVDYWNoZVtmcmFtZUlkXTtcblxuICAgIGlmICghdGV4dHVyZSlcbiAgICB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignVGhlIGZyYW1lSWQgXCInICsgZnJhbWVJZCArICdcIiBkb2VzIG5vdCBleGlzdCBpbiB0aGUgdGV4dHVyZSBjYWNoZScpO1xuICAgIH1cblxuICAgIHJldHVybiBuZXcgU3ByaXRlKHRleHR1cmUpO1xufTtcblxuLyoqXG4gKiBIZWxwZXIgZnVuY3Rpb24gdGhhdCBjcmVhdGVzIGEgc3ByaXRlIHRoYXQgd2lsbCBjb250YWluIGEgdGV4dHVyZSBiYXNlZCBvbiBhbiBpbWFnZSB1cmxcbiAqIElmIHRoZSBpbWFnZSBpcyBub3QgaW4gdGhlIHRleHR1cmUgY2FjaGUgaXQgd2lsbCBiZSBsb2FkZWRcbiAqXG4gKiBAc3RhdGljXG4gKiBAcGFyYW0gaW1hZ2VJZCB7c3RyaW5nfSBUaGUgaW1hZ2UgdXJsIG9mIHRoZSB0ZXh0dXJlXG4gKiBAcmV0dXJuIHtQSVhJLlNwcml0ZX0gQSBuZXcgU3ByaXRlIHVzaW5nIGEgdGV4dHVyZSBmcm9tIHRoZSB0ZXh0dXJlIGNhY2hlIG1hdGNoaW5nIHRoZSBpbWFnZSBpZFxuICovXG5TcHJpdGUuZnJvbUltYWdlID0gZnVuY3Rpb24gKGltYWdlSWQsIGNyb3Nzb3JpZ2luLCBzY2FsZU1vZGUpXG57XG4gICAgcmV0dXJuIG5ldyBTcHJpdGUoVGV4dHVyZS5mcm9tSW1hZ2UoaW1hZ2VJZCwgY3Jvc3NvcmlnaW4sIHNjYWxlTW9kZSkpO1xufTtcbiIsInZhciBPYmplY3RSZW5kZXJlciA9IHJlcXVpcmUoJy4uLy4uL3JlbmRlcmVycy93ZWJnbC91dGlscy9PYmplY3RSZW5kZXJlcicpLFxuICAgIFdlYkdMUmVuZGVyZXIgPSByZXF1aXJlKCcuLi8uLi9yZW5kZXJlcnMvd2ViZ2wvV2ViR0xSZW5kZXJlcicpLFxuICAgIFRleHR1cmVTaGFkZXIgPSByZXF1aXJlKCcuLi8uLi9yZW5kZXJlcnMvd2ViZ2wvc2hhZGVycy9fVGV4dHVyZVNoYWRlcicpLFxuICAgIGNyZWF0ZUluZGljZXNGb3JRdWFkcyA9IHJlcXVpcmUoJy4uLy4uL3V0aWxzL2NyZWF0ZUluZGljZXNGb3JRdWFkcycpLFxuICAgIGdlbmVyYXRlTXVsdGlUZXh0dXJlU2hhZGVyID0gcmVxdWlyZSgnLi9nZW5lcmF0ZU11bHRpVGV4dHVyZVNoYWRlcicpLFxuICAgIENPTlNUID0gcmVxdWlyZSgnLi4vLi4vY29uc3QnKSxcbiAgICBnbENvcmUgPSByZXF1aXJlKCdwaXhpLWdsLWNvcmUnKTtcblxuLyoqXG4gKiBAYXV0aG9yIE1hdCBHcm92ZXNcbiAqXG4gKiBCaWcgdGhhbmtzIHRvIHRoZSB2ZXJ5IGNsZXZlciBNYXR0IERlc0xhdXJpZXJzIDxtYXR0ZGVzbD4gaHR0cHM6Ly9naXRodWIuY29tL21hdHRkZXNsL1xuICogZm9yIGNyZWF0aW5nIHRoZSBvcmlnaW5hbCBwaXhpIHZlcnNpb24hXG4gKiBBbHNvIGEgdGhhbmtzIHRvIGh0dHBzOi8vZ2l0aHViLmNvbS9iY2hldmFsaWVyIGZvciB0d2Vha2luZyB0aGUgdGludCBhbmQgYWxwaGEgc28gdGhhdCB0aGV5IG5vdyBzaGFyZSA0IGJ5dGVzIG9uIHRoZSB2ZXJ0ZXggYnVmZmVyXG4gKlxuICogSGVhdmlseSBpbnNwaXJlZCBieSBMaWJHRFgncyBTcHJpdGVSZW5kZXJlcjpcbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS9saWJnZHgvbGliZ2R4L2Jsb2IvbWFzdGVyL2dkeC9zcmMvY29tL2JhZGxvZ2ljL2dkeC9ncmFwaGljcy9nMmQvU3ByaXRlUmVuZGVyZXIuamF2YVxuICovXG5cbi8qKlxuICogUmVuZGVyZXIgZGVkaWNhdGVkIHRvIGRyYXdpbmcgYW5kIGJhdGNoaW5nIHNwcml0ZXMuXG4gKlxuICogQGNsYXNzXG4gKiBAcHJpdmF0ZVxuICogQG1lbWJlcm9mIFBJWElcbiAqIEBleHRlbmRzIFBJWEkuT2JqZWN0UmVuZGVyZXJcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5XZWJHTFJlbmRlcmVyfSBUaGUgcmVuZGVyZXIgdGhpcyBzcHJpdGUgYmF0Y2ggd29ya3MgZm9yLlxuICovXG5mdW5jdGlvbiBTcHJpdGVSZW5kZXJlcihyZW5kZXJlcilcbntcbiAgICBPYmplY3RSZW5kZXJlci5jYWxsKHRoaXMsIHJlbmRlcmVyKTtcblxuICAgIC8qKlxuICAgICAqIE51bWJlciBvZiB2YWx1ZXMgc2VudCBpbiB0aGUgdmVydGV4IGJ1ZmZlci5cbiAgICAgKiBwb3NpdGlvblgsIHBvc2l0aW9uWSwgY29sb3JSLCBjb2xvckcsIGNvbG9yQiA9IDVcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLnZlcnRTaXplID0gNTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBzaXplIG9mIHRoZSB2ZXJ0ZXggaW5mb3JtYXRpb24gaW4gYnl0ZXMuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy52ZXJ0Qnl0ZVNpemUgPSB0aGlzLnZlcnRTaXplICogNDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBudW1iZXIgb2YgaW1hZ2VzIGluIHRoZSBTcHJpdGVCYXRjaCBiZWZvcmUgaXQgZmx1c2hlcy5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLnNpemUgPSBDT05TVC5TUFJJVEVfQkFUQ0hfU0laRTsgLy8gMjAwMCBpcyBhIG5pY2UgYmFsYW5jZSBiZXR3ZWVuIG1vYmlsZSAvIGRlc2t0b3BcblxuICAgIC8vIHRoZSB0b3RhbCBudW1iZXIgb2YgYnl0ZXMgaW4gb3VyIGJhdGNoXG4gICAgdmFyIG51bVZlcnRzID0gKHRoaXMuc2l6ZSAqIDQpICogdGhpcy52ZXJ0Qnl0ZVNpemU7XG5cbiAgICAvLyB0aGUgdG90YWwgbnVtYmVyIG9mIGluZGljZXMgaW4gb3VyIGJhdGNoLCB0aGVyZSBhcmUgNiBwb2ludHMgcGVyIHF1YWQuXG4gICAgdmFyIG51bUluZGljZXMgPSB0aGlzLnNpemUgKiA2O1xuXG4gICAgLyoqXG4gICAgICogSG9sZHMgdGhlIHZlcnRleCBkYXRhIHRoYXQgd2lsbCBiZSBzZW50IHRvIHRoZSB2ZXJ0ZXggc2hhZGVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7QXJyYXlCdWZmZXJ9XG4gICAgICovXG4gICAgdGhpcy52ZXJ0aWNlcyA9IG5ldyBBcnJheUJ1ZmZlcihudW1WZXJ0cyk7XG5cbiAgICAvKipcbiAgICAgKiBWaWV3IG9uIHRoZSB2ZXJ0aWNlcyBhcyBhIEZsb2F0MzJBcnJheSBmb3IgcG9zaXRpb25zXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtGbG9hdDMyQXJyYXl9XG4gICAgICovXG4gICAgdGhpcy5wb3NpdGlvbnMgPSBuZXcgRmxvYXQzMkFycmF5KHRoaXMudmVydGljZXMpO1xuICAgIFxuICAgIC8qKlxuICAgICAqIFZpZXcgb24gdGhlIHZlcnRpY2VzIGFzIGEgVWludDMyQXJyYXkgZm9yIHV2c1xuICAgICAqXG4gICAgICogQG1lbWJlciB7RmxvYXQzMkFycmF5fVxuICAgICAqL1xuICAgIHRoaXMudXZzID0gbmV3IFVpbnQzMkFycmF5KHRoaXMudmVydGljZXMpO1xuXG4gICAgLyoqXG4gICAgICogVmlldyBvbiB0aGUgdmVydGljZXMgYXMgYSBVaW50MzJBcnJheSBmb3IgY29sb3JzXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtVaW50MzJBcnJheX1cbiAgICAgKi9cbiAgICB0aGlzLmNvbG9ycyA9IG5ldyBVaW50MzJBcnJheSh0aGlzLnZlcnRpY2VzKTtcblxuICAgIC8qKlxuICAgICAqIEhvbGRzIHRoZSBpbmRpY2VzIG9mIHRoZSBnZW9tZXRyeSAocXVhZHMpIHRvIGRyYXdcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1VpbnQxNkFycmF5fVxuICAgICAqL1xuICAgIHRoaXMuaW5kaWNlcyA9IGNyZWF0ZUluZGljZXNGb3JRdWFkcyh0aGlzLnNpemUpXG5cbiAgICAvKipcbiAgICAgKiBUaGUgZGVmYXVsdCBzaGFkZXIgdGhhdCBpcyB1c2VkIGlmIGEgc3ByaXRlIGRvZXNuJ3QgaGF2ZSBhIG1vcmUgc3BlY2lmaWMgb25lLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5TaGFkZXJ9XG4gICAgICovXG4gICAgdGhpcy5zaGFkZXIgPSBudWxsO1xuXG4gICAgdGhpcy50ZXh0dXJlQ291bnQgPSAwO1xuICAgIHRoaXMuY3VycmVudEluZGV4ID0gMDtcbiAgXG4gICAgdGhpcy5ncm91cENvdW50ID0gMDtcbiAgICB0aGlzLmdyb3VwcyA9IFtdO1xuICAgIFxuICAgIC8vVE9ETyAtIDMwMCBpcyBhIGJpdCBtYWdpYywgZmlndXJlIG91dCBhIG5pY2VyIGFtb3VudCFcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuc2l6ZTsgaSsrKSBcbiAgICB7XG4gICAgICAgIHRoaXMuZ3JvdXBzW2ldID0ge3RleHR1cmVzOltdLCB0ZXh0dXJlQ291bnQ6MCwgaWRzOltdLCBzaXplOjAsIHN0YXJ0OjAsIGJsZW5kOjB9OyBcbiAgICB9O1xuICAgIFxuICAgIHRoaXMuY3VycmVudEdyb3VwID0gdGhpcy5ncm91cHNbdGhpcy5ncm91cENvdW50KytdO1xuXG4gICAgdGhpcy5jdXJyZW50VGV4dHVyZSA9IG51bGw7ICAgIFxufVxuXG5cblNwcml0ZVJlbmRlcmVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoT2JqZWN0UmVuZGVyZXIucHJvdG90eXBlKTtcblNwcml0ZVJlbmRlcmVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFNwcml0ZVJlbmRlcmVyO1xubW9kdWxlLmV4cG9ydHMgPSBTcHJpdGVSZW5kZXJlcjtcblxuV2ViR0xSZW5kZXJlci5yZWdpc3RlclBsdWdpbignc3ByaXRlJywgU3ByaXRlUmVuZGVyZXIpO1xuXG4vKipcbiAqIFNldHMgdXAgdGhlIHJlbmRlcmVyIGNvbnRleHQgYW5kIG5lY2Vzc2FyeSBidWZmZXJzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0gZ2wge1dlYkdMUmVuZGVyaW5nQ29udGV4dH0gdGhlIGN1cnJlbnQgV2ViR0wgZHJhd2luZyBjb250ZXh0XG4gKi9cblNwcml0ZVJlbmRlcmVyLnByb3RvdHlwZS5vbkNvbnRleHRDaGFuZ2UgPSBmdW5jdGlvbiAoKVxue1xuICAgIHZhciBnbCA9IHRoaXMucmVuZGVyZXIuZ2w7XG5cbiAgICB0aGlzLk1BWF9URVhUVUVTID0gZ2wuZ2V0UGFyYW1ldGVyKGdsLk1BWF9URVhUVVJFX0lNQUdFX1VOSVRTKTtcblxuICAgIHRoaXMuX3NoYWRlciA9IGdlbmVyYXRlTXVsdGlUZXh0dXJlU2hhZGVyKGdsLCB0aGlzLk1BWF9URVhUVUVTKS8vbmV3IFRleHR1cmVTaGFkZXIoZ2wpO1xuXG4gICAgLy8gc2V0dXAgZGVmYXVsdCBzaGFkZXJcbiAgICB0aGlzLnNoYWRlciA9IHRoaXMucmVuZGVyZXIuc2hhZGVyTWFuYWdlci5kZWZhdWx0U2hhZGVyO1xuXG4gICAgLy8gY3JlYXRlIGEgY291cGxlIG9mIGJ1ZmZlcnNcbiAgICB0aGlzLnZlcnRleEJ1ZmZlciA9IGdsQ29yZS5HTEJ1ZmZlci5jcmVhdGVWZXJ0ZXhCdWZmZXIoZ2wsIG51bGwsIGdsLkRZTkFNSUNfRFJBVyk7XG4gICAgdGhpcy5pbmRleEJ1ZmZlciA9IGdsQ29yZS5HTEJ1ZmZlci5jcmVhdGVJbmRleEJ1ZmZlcihnbCwgdGhpcy5pbmRpY2VzLCBnbC5TVEFUSUNfRFJBVyk7XG5cbiAgICAvLyBidWlsZCB0aGUgdmFvIG9iamVjdCB0aGF0IHdpbGwgcmVuZGVyLi5cbiAgICB0aGlzLnZhbyA9IG5ldyBnbENvcmUuVmVydGV4QXJyYXlPYmplY3QoZ2wpO1xuXG4gICAgdGhpcy52YW8uYWRkSW5kZXgodGhpcy5pbmRleEJ1ZmZlcik7XG4gICAgdGhpcy52YW8uYWRkQXR0cmlidXRlKHRoaXMudmVydGV4QnVmZmVyLCB0aGlzLl9zaGFkZXIuYXR0cmlidXRlcy5hVmVydGV4UG9zaXRpb24sIGdsLkZMT0FULCBmYWxzZSwgdGhpcy52ZXJ0Qnl0ZVNpemUsIDApO1xuICAgIHRoaXMudmFvLmFkZEF0dHJpYnV0ZSh0aGlzLnZlcnRleEJ1ZmZlciwgdGhpcy5fc2hhZGVyLmF0dHJpYnV0ZXMuYVRleHR1cmVDb29yZCwgZ2wuVU5TSUdORURfU0hPUlQsIHRydWUsIHRoaXMudmVydEJ5dGVTaXplLCAyICogNCk7XG4gICAgdGhpcy52YW8uYWRkQXR0cmlidXRlKHRoaXMudmVydGV4QnVmZmVyLCB0aGlzLl9zaGFkZXIuYXR0cmlidXRlcy5hQ29sb3IsIGdsLlVOU0lHTkVEX0JZVEUsIHRydWUsIHRoaXMudmVydEJ5dGVTaXplLCAzICogNCk7XG4gICAgdGhpcy52YW8uYWRkQXR0cmlidXRlKHRoaXMudmVydGV4QnVmZmVyLCB0aGlzLl9zaGFkZXIuYXR0cmlidXRlcy5hVGV4dHVyZUlkLCBnbC5GTE9BVCwgZmFsc2UsIHRoaXMudmVydEJ5dGVTaXplLCA0ICogNCk7XG5cbiAgICB0aGlzLmN1cnJlbnRCbGVuZE1vZGUgPSA5OTk5OTtcbn07XG5cbi8qKlxuICogUmVuZGVycyB0aGUgc3ByaXRlIG9iamVjdC5cbiAqXG4gKiBAcGFyYW0gc3ByaXRlIHtQSVhJLlNwcml0ZX0gdGhlIHNwcml0ZSB0byByZW5kZXIgd2hlbiB1c2luZyB0aGlzIHNwcml0ZWJhdGNoXG4gKi9cblNwcml0ZVJlbmRlcmVyLnByb3RvdHlwZS5yZW5kZXIgPSBmdW5jdGlvbiAoc3ByaXRlKVxue1xuICAgIC8vVE9ETyBzZXQgYmxlbmQgbW9kZXMuLlxuICAgIC8vIGNoZWNrIHRleHR1cmUuLlxuICAgIGlmICh0aGlzLmN1cnJlbnRJbmRleCA+PSB0aGlzLnNpemUpXG4gICAge1xuICAgICAgICB0aGlzLmZsdXNoKCk7XG4gICAgfVxuXG4gIFxuICAgIC8vIGdldCB0aGUgdXZzIGZvciB0aGUgdGV4dHVyZVxuICAgXG5cbiAgICAvLyBpZiB0aGUgdXZzIGhhdmUgbm90IHVwZGF0ZWQgdGhlbiBubyBwb2ludCByZW5kZXJpbmcganVzdCB5ZXQhXG4gICAgaWYgKCFzcHJpdGUudGV4dHVyZS5fdXZzKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgICAvLyBwdXNoIGEgdGV4dHVyZS5cbiAgICAvLyBpbmNyZW1lbnQgdGhlIGJhdGNoc2l6ZVxuICAgIHZhciBuZXh0VGV4dHVyZSA9ICBzcHJpdGUudGV4dHVyZS5iYXNlVGV4dHVyZTtcbiAgICB2YXIgY3VycmVudEdyb3VwID0gdGhpcy5jdXJyZW50R3JvdXA7XG4gICAgdmFyIGk7XG5cbiAgICBpZih0aGlzLmN1cnJlbnRUZXh0dXJlICE9PSBuZXh0VGV4dHVyZSlcbiAgICB7XG4gICAgICAgIHRoaXMuY3VycmVudFRleHR1cmUgPSBuZXh0VGV4dHVyZTtcbiAgICAgICAgXG4gICAgICAgIGlmKCFuZXh0VGV4dHVyZS5fZW5hYmxlZClcbiAgICAgICAge1xuICAgICAgICAgICAgbmV4dFRleHR1cmUuX2VuYWJsZWQgPSB0cnVlO1xuICAgICAgICAgICAgbmV4dFRleHR1cmUuX2lkID0gdGhpcy50ZXh0dXJlQ291bnQ7XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIGlmKHRoaXMudGV4dHVyZUNvdW50ID09PSB0aGlzLk1BWF9URVhUVUVTKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGZvciAoIGkgPSAwOyBpIDwgY3VycmVudEdyb3VwLnRleHR1cmVDb3VudDsgaSsrKSBcbiAgICAgICAgICAgICAgICB7ICAgICBcbiAgICAgICAgICAgICAgICAgICAgY3VycmVudEdyb3VwLnRleHR1cmVzW2ldLl9lbmFibGVkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgIHRoaXMudGV4dHVyZUNvdW50ID0gMDtcblxuICAgICAgICAgICAgICAgIGN1cnJlbnRHcm91cC5zaXplID0gdGhpcy5jdXJyZW50SW5kZXggLSBjdXJyZW50R3JvdXAuc3RhcnQ7XG4gICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICBjdXJyZW50R3JvdXAgPSB0aGlzLmN1cnJlbnRHcm91cCA9IHRoaXMuZ3JvdXBzW3RoaXMuZ3JvdXBDb3VudCsrXTtcbiAgICAgICAgICAgICAgICBjdXJyZW50R3JvdXAudGV4dHVyZUNvdW50ID0gMDtcbiAgICAgICAgICAgICAgICBjdXJyZW50R3JvdXAuc3RhcnQgPSB0aGlzLmN1cnJlbnRJbmRleDtcbiAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY3VycmVudEdyb3VwLnRleHR1cmVzW2N1cnJlbnRHcm91cC50ZXh0dXJlQ291bnQrK10gPSBuZXh0VGV4dHVyZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMudGV4dHVyZUNvdW50Kys7XG4gICAgfVxuXG4gICAgLy8gVE9ETyB0cmltPz9cbiAgICB2YXIgaW5kZXggPSB0aGlzLmN1cnJlbnRJbmRleCAqIHRoaXMudmVydEJ5dGVTaXplO1xuXG4gICAgdGhpcy5jdXJyZW50SW5kZXgrKztcblxuICAgIC8vIHVwbG9hZCB0aGUgc3ByaXRlIGVsZW1ldG5zLi4uXG4gICAgLy8gdGhleSBoYXZlIGFsbCByZWFkeSBiZWVuIGNhbGN1bGF0ZWQgc28gd2UganVzdCBuZWVkIHRvIHB1c2ggdGhlbSBpbnRvIHRoZSBidWZmZXIuXG4gICAgdmFyIGNvbG9ycyA9IHRoaXMuY29sb3JzO1xuICAgIHZhciBwb3NpdGlvbnMgPSB0aGlzLnBvc2l0aW9ucztcbiAgICB2YXIgdmVydGV4RGF0YSA9IHNwcml0ZS52ZXJ0ZXhEYXRhXG4gICAgdmFyIHRpbnQgPSAoc3ByaXRlLnRpbnQgPj4gMTYpICsgKHNwcml0ZS50aW50ICYgMHhmZjAwKSArICgoc3ByaXRlLnRpbnQgJiAweGZmKSA8PCAxNikgKyAoc3ByaXRlLndvcmxkQWxwaGEgKiAyNTUgPDwgMjQpO1xuICAgIHZhciB1dnMgPSBzcHJpdGUudGV4dHVyZS5fdXZzLnV2c191aW50MzI7XG4gICAgLy94eVxuICAgIHBvc2l0aW9uc1tpbmRleCsrXSA9IHZlcnRleERhdGFbMF07XG4gICAgcG9zaXRpb25zW2luZGV4KytdID0gdmVydGV4RGF0YVsxXTtcbiAgICB0aGlzLnV2c1tpbmRleCsrXSA9IHV2c1swXTtcbiAgICBjb2xvcnNbaW5kZXgrK10gPSB0aW50O1xuICAgIHBvc2l0aW9uc1tpbmRleCsrXSA9IG5leHRUZXh0dXJlLl9pZDsgXG4gICAgXG4gICAgLy8geHlcbiAgICBwb3NpdGlvbnNbaW5kZXgrK10gPSB2ZXJ0ZXhEYXRhWzJdO1xuICAgIHBvc2l0aW9uc1tpbmRleCsrXSA9IHZlcnRleERhdGFbM107XG4gICAgdGhpcy51dnNbaW5kZXgrK10gPSB1dnNbMV07XG4gICAgY29sb3JzW2luZGV4KytdID0gdGludDtcbiAgICBwb3NpdGlvbnNbaW5kZXgrK10gPSBuZXh0VGV4dHVyZS5faWQ7XG5cbiAgICAgLy8geHlcbiAgICBwb3NpdGlvbnNbaW5kZXgrK10gPSB2ZXJ0ZXhEYXRhWzRdO1xuICAgIHBvc2l0aW9uc1tpbmRleCsrXSA9IHZlcnRleERhdGFbNV07XG4gICAgdGhpcy51dnNbaW5kZXgrK10gPSB1dnNbMl07XG4gICAgY29sb3JzW2luZGV4KytdID0gdGludDtcbiAgICBwb3NpdGlvbnNbaW5kZXgrK10gPSBuZXh0VGV4dHVyZS5faWQ7XG5cbiAgICAvLyB4eVxuICAgIHBvc2l0aW9uc1tpbmRleCsrXSA9IHZlcnRleERhdGFbNl07XG4gICAgcG9zaXRpb25zW2luZGV4KytdID0gdmVydGV4RGF0YVs3XTtcbiAgICB0aGlzLnV2c1tpbmRleCsrXSA9IHV2c1szXTtcbiAgICBjb2xvcnNbaW5kZXgrK10gPSB0aW50O1xuICAgIHBvc2l0aW9uc1tpbmRleCsrXSA9IG5leHRUZXh0dXJlLl9pZDtcbn07XG5cbi8qKlxuICogUmVuZGVycyB0aGUgY29udGVudCBhbmQgZW1wdGllcyB0aGUgY3VycmVudCBiYXRjaC5cbiAqXG4gKi9cblNwcml0ZVJlbmRlcmVyLnByb3RvdHlwZS5mbHVzaCA9IGZ1bmN0aW9uICgpXG57XG4gICAgaWYgKHRoaXMuY3VycmVudEluZGV4ID09PSAwKXJldHVybjtcblxuICAgIHZhciBnbCA9IHRoaXMucmVuZGVyZXIuZ2w7XG5cblxuICAgIHRoaXMuY3VycmVudEdyb3VwLnNpemUgPSB0aGlzLmN1cnJlbnRJbmRleCAtIHRoaXMuY3VycmVudEdyb3VwLnN0YXJ0O1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5jdXJyZW50R3JvdXAudGV4dHVyZUNvdW50OyBpKyspIFxuICAgIHsgICAgIFxuICAgICAgICB0aGlzLmN1cnJlbnRHcm91cC50ZXh0dXJlc1tpXS5fZW5hYmxlZCA9IGZhbHNlO1xuICAgIH07XG4gICBcbiAgICAvLyBkbyBzb21lIHNtYXJ0IGFycmF5IHN0dWZmLi5cbiAgICAvLyBkb3VibGUgc2l6ZSBzbyB3ZSBkb250IGFsd2F5IHN1YmFycmF5IHRoZSBlbGVtZW50cy4uXG4gICAgLy8gdXBsb2FkIHRoZSB2ZXJ0cyB0byB0aGUgYnVmZmVyXG4gICAgaWYgKHRoaXMuY3VycmVudEJhdGNoU2l6ZSA+ICggdGhpcy5zaXplICogMC41ICkgKVxuICAgIHtcbiAgICAgICAgdGhpcy52ZXJ0ZXhCdWZmZXIudXBsb2FkKHRoaXMudmVydGljZXMsIDAsIHRydWUpO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICAvLyBvIGsgLi4gc3ViIGFycmF5IGlzIFNMT1c+P1xuICAgICAgICB2YXIgdmlldyA9IHRoaXMucG9zaXRpb25zLnN1YmFycmF5KDAsIHRoaXMuY3VycmVudEluZGV4ICogdGhpcy52ZXJ0Qnl0ZVNpemUpO1xuICAgICAgICB0aGlzLnZlcnRleEJ1ZmZlci51cGxvYWQodmlldywgMCwgdHJ1ZSk7XG4gICAgfVxuXG4gICAgLy8gYmluZCBzaGFkZXIuLlxuICAgIHRoaXMucmVuZGVyZXIuYmluZFNoYWRlcih0aGlzLl9zaGFkZXIpO1xuICAgIHRoaXMucmVuZGVyZXIuYmxlbmRNb2RlTWFuYWdlci5zZXRCbGVuZE1vZGUoIDAgKTtcblxuICAgIC8vLyByZW5kZXIgdGhlIGdyb3Vwcy4uXG4gICAgZm9yIChpID0gMDsgaSA8IHRoaXMuZ3JvdXBDb3VudDsgaSsrKSB7XG4gICAgICAgIFxuICAgICAgICB2YXIgZ3JvdXAgPSB0aGlzLmdyb3Vwc1tpXTtcblxuICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IGdyb3VwLnRleHR1cmVDb3VudDsgaisrKSB7XG4gICAgICAgICAgICB0aGlzLnJlbmRlcmVyLmJpbmRUZXh0dXJlKGdyb3VwLnRleHR1cmVzW2pdLCBqKTtcbiAgICAgICAgfTtcblxuICAgICAgICBnbC5kcmF3RWxlbWVudHMoZ2wuVFJJQU5HTEVTLCBncm91cC5zaXplICogNiwgZ2wuVU5TSUdORURfU0hPUlQsIGdyb3VwLnN0YXJ0ICogNiAqIDIpO1xuICAgIH07XG5cbiAgICAvLyByZXNldCBlbGVtZW50cyBmb3IgdGhlIG5leHQgZmx1c2hcbiAgICB0aGlzLmN1cnJlbnRUZXh0dXJlID0gbnVsbDtcbiAgICB0aGlzLmN1cnJlbnRJbmRleCA9IDA7XG4gICAgdGhpcy50ZXh0dXJlQ291bnQgPSAwO1xuICAgIHRoaXMuZ3JvdXBDb3VudCA9IDA7XG4gICAgXG4gICAgdGhpcy5jdXJyZW50R3JvdXAgPSB0aGlzLmdyb3Vwc1t0aGlzLmdyb3VwQ291bnQrK107XG4gICAgdGhpcy5jdXJyZW50R3JvdXAudGV4dHVyZUNvdW50ID0gMDtcbn07XG5cbi8qKlxuICogU3RhcnRzIGEgbmV3IHNwcml0ZSBiYXRjaC5cbiAqXG4gKi9cblNwcml0ZVJlbmRlcmVyLnByb3RvdHlwZS5zdGFydCA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy52YW8uYmluZCgpO1xufTtcblxuU3ByaXRlUmVuZGVyZXIucHJvdG90eXBlLnN0b3AgPSBmdW5jdGlvbiAoKVxue1xuICAgIHRoaXMuZmx1c2goKTtcbiAgICB0aGlzLnZhby51bmJpbmQoKTtcbn07XG4vKipcbiAqIERlc3Ryb3lzIHRoZSBTcHJpdGVCYXRjaC5cbiAqXG4gKi9cblNwcml0ZVJlbmRlcmVyLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLnZlcnRleEJ1ZmZlci5kZXN0cm95KCk7XG4gICAgdGhpcy5pbmRleEJ1ZmZlci5kZXN0cm95KCk7XG5cbiAgICBPYmplY3RSZW5kZXJlci5wcm90b3R5cGUuZGVzdHJveS5jYWxsKHRoaXMpO1xuXG4gICAgdGhpcy5zaGFkZXIuZGVzdHJveSgpO1xuXG4gICAgdGhpcy5yZW5kZXJlciA9IG51bGw7XG5cbiAgICB0aGlzLnZlcnRpY2VzID0gbnVsbDtcbiAgICB0aGlzLnBvc2l0aW9ucyA9IG51bGw7XG4gICAgdGhpcy5jb2xvcnMgPSBudWxsO1xuICAgIHRoaXMuaW5kaWNlcyA9IG51bGw7XG5cbiAgICB0aGlzLnZlcnRleEJ1ZmZlciA9IG51bGw7XG4gICAgdGhpcy5pbmRleEJ1ZmZlciA9IG51bGw7XG5cbiAgICB0aGlzLnNwcml0ZXMgPSBudWxsO1xuICAgIHRoaXMuc2hhZGVyID0gbnVsbDtcbn07XG4iLCJ2YXIgU2hhZGVyID0gcmVxdWlyZSgncGl4aS1nbC1jb3JlJykuR0xTaGFkZXI7XG5cblxuZnVuY3Rpb24gZ2VuZXJhdGVNdWx0aVRleHR1cmVTaGFkZXIoZ2wsIG1heFRleHR1cmVzKVxue1xuICAgIHZhciB2ZXJ0ZXhTcmMgPSBcInByZWNpc2lvbiBsb3dwIGZsb2F0O1xcbmF0dHJpYnV0ZSB2ZWMyIGFWZXJ0ZXhQb3NpdGlvbjtcXG5hdHRyaWJ1dGUgdmVjMiBhVGV4dHVyZUNvb3JkO1xcbmF0dHJpYnV0ZSB2ZWM0IGFDb2xvcjtcXG5hdHRyaWJ1dGUgZmxvYXQgYVRleHR1cmVJZDtcXG5cXG51bmlmb3JtIG1hdDMgcHJvamVjdGlvbk1hdHJpeDtcXG5cXG52YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDtcXG52YXJ5aW5nIHZlYzQgdkNvbG9yO1xcbnZhcnlpbmcgZmxvYXQgdlRleHR1cmVJZDtcXG5cXG52b2lkIG1haW4odm9pZCl7XFxuICAgZ2xfUG9zaXRpb24gPSB2ZWM0KChwcm9qZWN0aW9uTWF0cml4ICogdmVjMyhhVmVydGV4UG9zaXRpb24sIDEuMCkpLnh5LCAwLjAsIDEuMCk7XFxuICAgdlRleHR1cmVDb29yZCA9IGFUZXh0dXJlQ29vcmQ7XFxuICAgdlRleHR1cmVJZCA9IGFUZXh0dXJlSWQ7XFxuICAgdkNvbG9yID0gdmVjNChhQ29sb3IucmdiICogYUNvbG9yLmEsIGFDb2xvci5hKTtcXG59XCI7XG4gICAgdmFyIGZyYWdtZW50U3JjID0gJ3ByZWNpc2lvbiBsb3dwIGZsb2F0O1xcblxcbicgKyBnZW5lcmF0ZVNhbXBsZVNyYyhtYXhUZXh0dXJlcykgKyBcIlxcblxcblwiICsgZnJhZ1RlbXBsYXRlXG5cbiAgICBmcmFnbWVudFNyYyA9IGZyYWdtZW50U3JjLnJlcGxhY2UoL1xcJVxcJS9naSwgJzE2Jyk7XG5cbiAgICB2YXIgc2hhZGVyID0gbmV3IFNoYWRlcihnbCwgdmVydGV4U3JjLCBmcmFnbWVudFNyYyk7XG5cblxuICAgIHZhciBzYW1wbGVWYWx1ZXMgPSBbXTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG1heFRleHR1cmVzOyBpKyspIHtcbiAgICAgICAgc2FtcGxlVmFsdWVzW2ldID0gaTtcbiAgICB9O1xuXG4gICAgc2hhZGVyLmJpbmQoKTtcbiAgICBzaGFkZXIudW5pZm9ybXMudVNhbXBsZXJzID0gc2FtcGxlVmFsdWVzO1xuXG4gICAgcmV0dXJuIHNoYWRlcjtcbn1cblxuZnVuY3Rpb24gZ2VuZXJhdGVTYW1wbGVTcmMobWF4VGV4dHVyZXMpXG57XG4gICAgdmFyIHNyYyA9ICd2ZWM0IGdldFNhbXBsZUZyb21BcnJheShzYW1wbGVyMkQgdGV4dHVyZXNbJSVdLCBpbnQgbmR4LCB2ZWMyIHV2KSB7XFxuXFxudmVjNCBjb2xvcjsnXG5cbiAgICBzcmMgKz0gJ1xcbic7XG4gICAgc3JjICs9ICdcXG4nO1xuICAgIFxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbWF4VGV4dHVyZXM7IGkrKykgXG4gICAge1xuICAgICAgICBpZihpID4gMClzcmMgKz0gJ1xcbmVsc2UgJztcbiAgICAgICAgaWYoaSA8IG1heFRleHR1cmVzLTEpc3JjICs9ICdpZihuZHggPT0gJyArIGkgKyAnKSc7XG4gICAgICAgIHNyYyArPSAnXFxueyc7XG4gICAgICAgIHNyYyArPSAnXFxuXFx0Y29sb3IgPSB0ZXh0dXJlMkQodGV4dHVyZXNbJytpKyddLCB1dik7JztcbiAgICAgICAgc3JjICs9ICdcXG59JztcbiAgICB9O1xuXG4gICAgc3JjICs9ICdcXG4nO1xuICAgIHNyYyArPSAnXFxuJztcbiAgICBzcmMgKz0gJ3JldHVybiBjb2xvcjsnO1xuICAgIHNyYyArPSAnXFxufSc7XG5cbiAgICByZXR1cm4gc3JjO1xufVxuXG52YXIgZnJhZ1RlbXBsYXRlID0gW1xuXG4gICAgJ3ZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkOycsXG4gICAgJ3ZhcnlpbmcgdmVjNCB2Q29sb3I7JyxcbiAgICAndmFyeWluZyBmbG9hdCB2VGV4dHVyZUlkOycsXG4gICAgJ3VuaWZvcm0gc2FtcGxlcjJEIHVTYW1wbGVyc1slJV07JyxcblxuICAgICd2b2lkIG1haW4odm9pZCl7JyxcbiAgICAgICAgJ2dsX0ZyYWdDb2xvciA9IGdldFNhbXBsZUZyb21BcnJheSh1U2FtcGxlcnMsIGludCh2VGV4dHVyZUlkKSwgdlRleHR1cmVDb29yZCkgKiB2Q29sb3I7JyxcbiAgICAnfSdcbl0uam9pbignXFxuJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZ2VuZXJhdGVNdWx0aVRleHR1cmVTaGFkZXI7XG4iLCJ2YXIgU3ByaXRlID0gcmVxdWlyZSgnLi4vc3ByaXRlcy9TcHJpdGUnKSxcbiAgICBUZXh0dXJlID0gcmVxdWlyZSgnLi4vdGV4dHVyZXMvVGV4dHVyZScpLFxuICAgIG1hdGggPSByZXF1aXJlKCcuLi9tYXRoJyksXG4gICAgdXRpbHMgPSByZXF1aXJlKCcuLi91dGlscycpLFxuICAgIENPTlNUID0gcmVxdWlyZSgnLi4vY29uc3QnKTtcblxuLyoqXG4gKiBBIFRleHQgT2JqZWN0IHdpbGwgY3JlYXRlIGEgbGluZSBvciBtdWx0aXBsZSBsaW5lcyBvZiB0ZXh0LiBUbyBzcGxpdCBhIGxpbmUgeW91IGNhbiB1c2UgJ1xcbicgaW4geW91ciB0ZXh0IHN0cmluZyxcbiAqIG9yIGFkZCBhIHdvcmRXcmFwIHByb3BlcnR5IHNldCB0byB0cnVlIGFuZCBhbmQgd29yZFdyYXBXaWR0aCBwcm9wZXJ0eSB3aXRoIGEgdmFsdWUgaW4gdGhlIHN0eWxlIG9iamVjdC5cbiAqXG4gKiBBIFRleHQgY2FuIGJlIGNyZWF0ZWQgZGlyZWN0bHkgZnJvbSBhIHN0cmluZyBhbmQgYSBzdHlsZSBvYmplY3RcbiAqXG4gKiBgYGBqc1xuICogdmFyIHRleHQgPSBuZXcgUElYSS5UZXh0KCdUaGlzIGlzIGEgcGl4aSB0ZXh0Jyx7Zm9udCA6ICcyNHB4IEFyaWFsJywgZmlsbCA6IDB4ZmYxMDEwLCBhbGlnbiA6ICdjZW50ZXInfSk7XG4gKiBgYGBcbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuU3ByaXRlXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIHRleHQge3N0cmluZ30gVGhlIGNvcHkgdGhhdCB5b3Ugd291bGQgbGlrZSB0aGUgdGV4dCB0byBkaXNwbGF5XG4gKiBAcGFyYW0gW3N0eWxlXSB7b2JqZWN0fSBUaGUgc3R5bGUgcGFyYW1ldGVyc1xuICogQHBhcmFtIFtzdHlsZS5mb250XSB7c3RyaW5nfSBkZWZhdWx0ICdib2xkIDIwcHggQXJpYWwnIFRoZSBzdHlsZSBhbmQgc2l6ZSBvZiB0aGUgZm9udFxuICogQHBhcmFtIFtzdHlsZS5maWxsPSdibGFjayddIHtTdHJpbmd8TnVtYmVyfSBBIGNhbnZhcyBmaWxsc3R5bGUgdGhhdCB3aWxsIGJlIHVzZWQgb24gdGhlIHRleHQgZS5nICdyZWQnLCAnIzAwRkYwMCdcbiAqIEBwYXJhbSBbc3R5bGUuYWxpZ249J2xlZnQnXSB7c3RyaW5nfSBBbGlnbm1lbnQgZm9yIG11bHRpbGluZSB0ZXh0ICgnbGVmdCcsICdjZW50ZXInIG9yICdyaWdodCcpLCBkb2VzIG5vdCBhZmZlY3Qgc2luZ2xlIGxpbmUgdGV4dFxuICogQHBhcmFtIFtzdHlsZS5zdHJva2VdIHtTdHJpbmd8TnVtYmVyfSBBIGNhbnZhcyBmaWxsc3R5bGUgdGhhdCB3aWxsIGJlIHVzZWQgb24gdGhlIHRleHQgc3Ryb2tlIGUuZyAnYmx1ZScsICcjRkNGRjAwJ1xuICogQHBhcmFtIFtzdHlsZS5zdHJva2VUaGlja25lc3M9MF0ge251bWJlcn0gQSBudW1iZXIgdGhhdCByZXByZXNlbnRzIHRoZSB0aGlja25lc3Mgb2YgdGhlIHN0cm9rZS4gRGVmYXVsdCBpcyAwIChubyBzdHJva2UpXG4gKiBAcGFyYW0gW3N0eWxlLndvcmRXcmFwPWZhbHNlXSB7Ym9vbGVhbn0gSW5kaWNhdGVzIGlmIHdvcmQgd3JhcCBzaG91bGQgYmUgdXNlZFxuICogQHBhcmFtIFtzdHlsZS53b3JkV3JhcFdpZHRoPTEwMF0ge251bWJlcn0gVGhlIHdpZHRoIGF0IHdoaWNoIHRleHQgd2lsbCB3cmFwLCBpdCBuZWVkcyB3b3JkV3JhcCB0byBiZSBzZXQgdG8gdHJ1ZVxuICogQHBhcmFtIFtzdHlsZS5saW5lSGVpZ2h0XSB7bnVtYmVyfSBUaGUgbGluZSBoZWlnaHQsIGEgbnVtYmVyIHRoYXQgcmVwcmVzZW50cyB0aGUgdmVydGljYWwgc3BhY2UgdGhhdCBhIGxldHRlciB1c2VzXG4gKiBAcGFyYW0gW3N0eWxlLmRyb3BTaGFkb3c9ZmFsc2VdIHtib29sZWFufSBTZXQgYSBkcm9wIHNoYWRvdyBmb3IgdGhlIHRleHRcbiAqIEBwYXJhbSBbc3R5bGUuZHJvcFNoYWRvd0NvbG9yPScjMDAwMDAwJ10ge3N0cmluZ30gQSBmaWxsIHN0eWxlIHRvIGJlIHVzZWQgb24gdGhlIGRyb3BzaGFkb3cgZS5nICdyZWQnLCAnIzAwRkYwMCdcbiAqIEBwYXJhbSBbc3R5bGUuZHJvcFNoYWRvd0FuZ2xlPU1hdGguUEkvNF0ge251bWJlcn0gU2V0IGEgYW5nbGUgb2YgdGhlIGRyb3Agc2hhZG93XG4gKiBAcGFyYW0gW3N0eWxlLmRyb3BTaGFkb3dEaXN0YW5jZT01XSB7bnVtYmVyfSBTZXQgYSBkaXN0YW5jZSBvZiB0aGUgZHJvcCBzaGFkb3dcbiAqIEBwYXJhbSBbc3R5bGUuZHJvcFNoYWRvd0JsdXI9MF0ge251bWJlcn0gU2V0IGEgc2hhZG93IGJsdXIgcmFkaXVzXG4gKiBAcGFyYW0gW3N0eWxlLnBhZGRpbmc9MF0ge251bWJlcn0gT2NjYXNpb25hbGx5IHNvbWUgZm9udHMgYXJlIGNyb3BwZWQgb24gdG9wIG9yIGJvdHRvbS4gQWRkaW5nIHNvbWUgcGFkZGluZyB3aWxsXG4gKiAgICAgIHByZXZlbnQgdGhpcyBmcm9tIGhhcHBlbmluZyBieSBhZGRpbmcgcGFkZGluZyB0byB0aGUgdG9wIGFuZCBib3R0b20gb2YgdGV4dCBoZWlnaHQuXG4gKiBAcGFyYW0gW3N0eWxlLnRleHRCYXNlbGluZT0nYWxwaGFiZXRpYyddIHtzdHJpbmd9IFRoZSBiYXNlbGluZSBvZiB0aGUgdGV4dCB0aGF0IGlzIHJlbmRlcmVkLlxuICogQHBhcmFtIFtzdHlsZS5saW5lSm9pbj0nbWl0ZXInXSB7c3RyaW5nfSBUaGUgbGluZUpvaW4gcHJvcGVydHkgc2V0cyB0aGUgdHlwZSBvZiBjb3JuZXIgY3JlYXRlZCwgaXQgY2FuIHJlc29sdmVcbiAqICAgICAgc3Bpa2VkIHRleHQgaXNzdWVzLiBEZWZhdWx0IGlzICdtaXRlcicgKGNyZWF0ZXMgYSBzaGFycCBjb3JuZXIpLlxuICogQHBhcmFtIFtzdHlsZS5taXRlckxpbWl0PTEwXSB7bnVtYmVyfSBUaGUgbWl0ZXIgbGltaXQgdG8gdXNlIHdoZW4gdXNpbmcgdGhlICdtaXRlcicgbGluZUpvaW4gbW9kZS4gVGhpcyBjYW4gcmVkdWNlXG4gKiAgICAgIG9yIGluY3JlYXNlIHRoZSBzcGlraW5lc3Mgb2YgcmVuZGVyZWQgdGV4dC5cbiAqL1xuZnVuY3Rpb24gVGV4dCh0ZXh0LCBzdHlsZSwgcmVzb2x1dGlvbilcbntcbiAgICAvKipcbiAgICAgKiBUaGUgY2FudmFzIGVsZW1lbnQgdGhhdCBldmVyeXRoaW5nIGlzIGRyYXduIHRvXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtIVE1MQ2FudmFzRWxlbWVudH1cbiAgICAgKi9cbiAgICB0aGlzLmNhbnZhcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NhbnZhcycpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGNhbnZhcyAyZCBjb250ZXh0IHRoYXQgZXZlcnl0aGluZyBpcyBkcmF3biB3aXRoXG4gICAgICogQG1lbWJlciB7SFRNTENhbnZhc0VsZW1lbnR9XG4gICAgICovXG4gICAgdGhpcy5jb250ZXh0ID0gdGhpcy5jYW52YXMuZ2V0Q29udGV4dCgnMmQnKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSByZXNvbHV0aW9uIG9mIHRoZSBjYW52YXMuXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMucmVzb2x1dGlvbiA9IHJlc29sdXRpb24gfHwgQ09OU1QuUkVTT0xVVElPTjtcblxuICAgIC8qKlxuICAgICAqIFByaXZhdGUgdHJhY2tlciBmb3IgdGhlIGN1cnJlbnQgdGV4dC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge3N0cmluZ31cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX3RleHQgPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogUHJpdmF0ZSB0cmFja2VyIGZvciB0aGUgY3VycmVudCBzdHlsZS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge29iamVjdH1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX3N0eWxlID0gbnVsbDtcblxuICAgIHZhciB0ZXh0dXJlID0gVGV4dHVyZS5mcm9tQ2FudmFzKHRoaXMuY2FudmFzKTtcbiAgICB0ZXh0dXJlLnRyaW0gPSBuZXcgbWF0aC5SZWN0YW5nbGUoKTtcbiAgICBTcHJpdGUuY2FsbCh0aGlzLCB0ZXh0dXJlKTtcblxuICAgIHRoaXMudGV4dCA9IHRleHQ7XG4gICAgdGhpcy5zdHlsZSA9IHN0eWxlO1xufVxuXG4vLyBjb25zdHJ1Y3RvclxuVGV4dC5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFNwcml0ZS5wcm90b3R5cGUpO1xuVGV4dC5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBUZXh0O1xubW9kdWxlLmV4cG9ydHMgPSBUZXh0O1xuXG5UZXh0LmZvbnRQcm9wZXJ0aWVzQ2FjaGUgPSB7fTtcblRleHQuZm9udFByb3BlcnRpZXNDYW52YXMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdjYW52YXMnKTtcblRleHQuZm9udFByb3BlcnRpZXNDb250ZXh0ID0gVGV4dC5mb250UHJvcGVydGllc0NhbnZhcy5nZXRDb250ZXh0KCcyZCcpO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhUZXh0LnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFRoZSB3aWR0aCBvZiB0aGUgVGV4dCwgc2V0dGluZyB0aGlzIHdpbGwgYWN0dWFsbHkgbW9kaWZ5IHRoZSBzY2FsZSB0byBhY2hpZXZlIHRoZSB2YWx1ZSBzZXRcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5UZXh0I1xuICAgICAqL1xuICAgIHdpZHRoOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgaWYgKHRoaXMuZGlydHkpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdGhpcy51cGRhdGVUZXh0KCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiB0aGlzLnNjYWxlLnggKiB0aGlzLl90ZXh0dXJlLl9mcmFtZS53aWR0aDtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuc2NhbGUueCA9IHZhbHVlIC8gdGhpcy5fdGV4dHVyZS5fZnJhbWUud2lkdGg7XG4gICAgICAgICAgICB0aGlzLl93aWR0aCA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFRoZSBoZWlnaHQgb2YgdGhlIFRleHQsIHNldHRpbmcgdGhpcyB3aWxsIGFjdHVhbGx5IG1vZGlmeSB0aGUgc2NhbGUgdG8gYWNoaWV2ZSB0aGUgdmFsdWUgc2V0XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuVGV4dCNcbiAgICAgKi9cbiAgICBoZWlnaHQ6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICBpZiAodGhpcy5kaXJ0eSlcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZVRleHQoKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuICB0aGlzLnNjYWxlLnkgKiB0aGlzLl90ZXh0dXJlLl9mcmFtZS5oZWlnaHQ7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnNjYWxlLnkgPSB2YWx1ZSAvIHRoaXMuX3RleHR1cmUuX2ZyYW1lLmhlaWdodDtcbiAgICAgICAgICAgIHRoaXMuX2hlaWdodCA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFNldCB0aGUgc3R5bGUgb2YgdGhlIHRleHRcbiAgICAgKlxuICAgICAqIEBwYXJhbSBbc3R5bGVdIHtvYmplY3R9IFRoZSBzdHlsZSBwYXJhbWV0ZXJzXG4gICAgICogQHBhcmFtIFtzdHlsZS5mb250PSdib2xkIDIwcHQgQXJpYWwnXSB7c3RyaW5nfSBUaGUgc3R5bGUgYW5kIHNpemUgb2YgdGhlIGZvbnRcbiAgICAgKiBAcGFyYW0gW3N0eWxlLmZpbGw9J2JsYWNrJ10ge3N0cmluZ3xudW1iZXJ9IEEgY2FudmFzIGZpbGxzdHlsZSB0aGF0IHdpbGwgYmUgdXNlZCBvbiB0aGUgdGV4dCBlZyAncmVkJywgJyMwMEZGMDAnXG4gICAgICogQHBhcmFtIFtzdHlsZS5hbGlnbj0nbGVmdCddIHtzdHJpbmd9IEFsaWdubWVudCBmb3IgbXVsdGlsaW5lIHRleHQgKCdsZWZ0JywgJ2NlbnRlcicgb3IgJ3JpZ2h0JyksIGRvZXMgbm90IGFmZmVjdCBzaW5nbGUgbGluZSB0ZXh0XG4gICAgICogQHBhcmFtIFtzdHlsZS5zdHJva2U9J2JsYWNrJ10ge3N0cmluZ3xudW1iZXJ9IEEgY2FudmFzIGZpbGxzdHlsZSB0aGF0IHdpbGwgYmUgdXNlZCBvbiB0aGUgdGV4dCBzdHJva2UgZWcgJ2JsdWUnLCAnI0ZDRkYwMCdcbiAgICAgKiBAcGFyYW0gW3N0eWxlLnN0cm9rZVRoaWNrbmVzcz0wXSB7bnVtYmVyfSBBIG51bWJlciB0aGF0IHJlcHJlc2VudHMgdGhlIHRoaWNrbmVzcyBvZiB0aGUgc3Ryb2tlLiBEZWZhdWx0IGlzIDAgKG5vIHN0cm9rZSlcbiAgICAgKiBAcGFyYW0gW3N0eWxlLndvcmRXcmFwPWZhbHNlXSB7Ym9vbGVhbn0gSW5kaWNhdGVzIGlmIHdvcmQgd3JhcCBzaG91bGQgYmUgdXNlZFxuICAgICAqIEBwYXJhbSBbc3R5bGUud29yZFdyYXBXaWR0aD0xMDBdIHtudW1iZXJ9IFRoZSB3aWR0aCBhdCB3aGljaCB0ZXh0IHdpbGwgd3JhcFxuICAgICAqIEBwYXJhbSBbc3R5bGUubGluZUhlaWdodF0ge251bWJlcn0gVGhlIGxpbmUgaGVpZ2h0LCBhIG51bWJlciB0aGF0IHJlcHJlc2VudHMgdGhlIHZlcnRpY2FsIHNwYWNlIHRoYXQgYSBsZXR0ZXIgdXNlc1xuICAgICAqIEBwYXJhbSBbc3R5bGUuZHJvcFNoYWRvdz1mYWxzZV0ge2Jvb2xlYW59IFNldCBhIGRyb3Agc2hhZG93IGZvciB0aGUgdGV4dFxuICAgICAqIEBwYXJhbSBbc3R5bGUuZHJvcFNoYWRvd0NvbG9yPScjMDAwMDAwJ10ge3N0cmluZ3xudW1iZXJ9IEEgZmlsbCBzdHlsZSB0byBiZSB1c2VkIG9uIHRoZSBkcm9wc2hhZG93IGUuZyAncmVkJywgJyMwMEZGMDAnXG4gICAgICogQHBhcmFtIFtzdHlsZS5kcm9wU2hhZG93QW5nbGU9TWF0aC5QSS82XSB7bnVtYmVyfSBTZXQgYSBhbmdsZSBvZiB0aGUgZHJvcCBzaGFkb3dcbiAgICAgKiBAcGFyYW0gW3N0eWxlLmRyb3BTaGFkb3dEaXN0YW5jZT01XSB7bnVtYmVyfSBTZXQgYSBkaXN0YW5jZSBvZiB0aGUgZHJvcCBzaGFkb3dcbiAgICAgKiBAcGFyYW0gW3N0eWxlLmRyb3BTaGFkb3dCbHVyPTBdIHtudW1iZXJ9IFNldCBhIHNoYWRvdyBibHVyIHJhZGl1c1xuICAgICAqIEBwYXJhbSBbc3R5bGUucGFkZGluZz0wXSB7bnVtYmVyfSBPY2Nhc2lvbmFsbHkgc29tZSBmb250cyBhcmUgY3JvcHBlZCBvbiB0b3Agb3IgYm90dG9tLiBBZGRpbmcgc29tZSBwYWRkaW5nIHdpbGxcbiAgICAgKiAgICAgIHByZXZlbnQgdGhpcyBmcm9tIGhhcHBlbmluZyBieSBhZGRpbmcgcGFkZGluZyB0byB0aGUgdG9wIGFuZCBib3R0b20gb2YgdGV4dCBoZWlnaHQuXG4gICAgICogQHBhcmFtIFtzdHlsZS50ZXh0QmFzZWxpbmU9J2FscGhhYmV0aWMnXSB7c3RyaW5nfSBUaGUgYmFzZWxpbmUgb2YgdGhlIHRleHQgdGhhdCBpcyByZW5kZXJlZC5cbiAgICAgKiBAcGFyYW0gW3N0eWxlLmxpbmVKb2luPSdtaXRlciddIHtzdHJpbmd9IFRoZSBsaW5lSm9pbiBwcm9wZXJ0eSBzZXRzIHRoZSB0eXBlIG9mIGNvcm5lciBjcmVhdGVkLCBpdCBjYW4gcmVzb2x2ZVxuICAgICAqICAgICAgc3Bpa2VkIHRleHQgaXNzdWVzLiBEZWZhdWx0IGlzICdtaXRlcicgKGNyZWF0ZXMgYSBzaGFycCBjb3JuZXIpLlxuICAgICAqIEBwYXJhbSBbc3R5bGUubWl0ZXJMaW1pdD0xMF0ge251bWJlcn0gVGhlIG1pdGVyIGxpbWl0IHRvIHVzZSB3aGVuIHVzaW5nIHRoZSAnbWl0ZXInIGxpbmVKb2luIG1vZGUuIFRoaXMgY2FuIHJlZHVjZVxuICAgICAqICAgICAgb3IgaW5jcmVhc2UgdGhlIHNwaWtpbmVzcyBvZiByZW5kZXJlZCB0ZXh0LlxuICAgICAqIEBtZW1iZXJvZiBQSVhJLlRleHQjXG4gICAgICovXG4gICAgc3R5bGU6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fc3R5bGU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHN0eWxlKVxuICAgICAgICB7XG4gICAgICAgICAgICBzdHlsZSA9IHN0eWxlIHx8IHt9O1xuXG4gICAgICAgICAgICBpZiAodHlwZW9mIHN0eWxlLmZpbGwgPT09ICdudW1iZXInKSB7XG4gICAgICAgICAgICAgICAgc3R5bGUuZmlsbCA9IHV0aWxzLmhleDJzdHJpbmcoc3R5bGUuZmlsbCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICh0eXBlb2Ygc3R5bGUuc3Ryb2tlID09PSAnbnVtYmVyJykge1xuICAgICAgICAgICAgICAgIHN0eWxlLnN0cm9rZSA9IHV0aWxzLmhleDJzdHJpbmcoc3R5bGUuc3Ryb2tlKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHR5cGVvZiBzdHlsZS5kcm9wU2hhZG93Q29sb3IgPT09ICdudW1iZXInKSB7XG4gICAgICAgICAgICAgICAgc3R5bGUuZHJvcFNoYWRvd0NvbG9yID0gdXRpbHMuaGV4MnN0cmluZyhzdHlsZS5kcm9wU2hhZG93Q29sb3IpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBzdHlsZS5mb250ID0gc3R5bGUuZm9udCB8fCAnYm9sZCAyMHB0IEFyaWFsJztcbiAgICAgICAgICAgIHN0eWxlLmZpbGwgPSBzdHlsZS5maWxsIHx8ICdibGFjayc7XG4gICAgICAgICAgICBzdHlsZS5hbGlnbiA9IHN0eWxlLmFsaWduIHx8ICdsZWZ0JztcbiAgICAgICAgICAgIHN0eWxlLnN0cm9rZSA9IHN0eWxlLnN0cm9rZSB8fCAnYmxhY2snOyAvL3Byb3ZpZGUgYSBkZWZhdWx0LCBzZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9waXhpanMvcGl4aS5qcy9pc3N1ZXMvMTM2XG4gICAgICAgICAgICBzdHlsZS5zdHJva2VUaGlja25lc3MgPSBzdHlsZS5zdHJva2VUaGlja25lc3MgfHwgMDtcbiAgICAgICAgICAgIHN0eWxlLndvcmRXcmFwID0gc3R5bGUud29yZFdyYXAgfHwgZmFsc2U7XG4gICAgICAgICAgICBzdHlsZS53b3JkV3JhcFdpZHRoID0gc3R5bGUud29yZFdyYXBXaWR0aCB8fCAxMDA7XG5cbiAgICAgICAgICAgIHN0eWxlLmRyb3BTaGFkb3cgPSBzdHlsZS5kcm9wU2hhZG93IHx8IGZhbHNlO1xuICAgICAgICAgICAgc3R5bGUuZHJvcFNoYWRvd0NvbG9yID0gc3R5bGUuZHJvcFNoYWRvd0NvbG9yIHx8ICcjMDAwMDAwJztcbiAgICAgICAgICAgIHN0eWxlLmRyb3BTaGFkb3dBbmdsZSA9IHN0eWxlLmRyb3BTaGFkb3dBbmdsZSAhPT0gdW5kZWZpbmVkID8gc3R5bGUuZHJvcFNoYWRvd0FuZ2xlIDogTWF0aC5QSSAvIDY7XG4gICAgICAgICAgICBzdHlsZS5kcm9wU2hhZG93RGlzdGFuY2UgPSBzdHlsZS5kcm9wU2hhZG93RGlzdGFuY2UgIT09IHVuZGVmaW5lZCA/IHN0eWxlLmRyb3BTaGFkb3dEaXN0YW5jZSA6IDU7XG4gICAgICAgICAgICBzdHlsZS5kcm9wU2hhZG93Qmx1ciA9IHN0eWxlLmRyb3BTaGFkb3dCbHVyICE9PSB1bmRlZmluZWQgPyBzdHlsZS5kcm9wU2hhZG93Qmx1ciA6IDA7IC8vc2hhZG93Qmx1ciBpcyAnMCcgYnkgZGVmYXVsdCBhY2NvcmRpbmcgdG8gSFRNTFxuXG4gICAgICAgICAgICBzdHlsZS5wYWRkaW5nID0gc3R5bGUucGFkZGluZyB8fCAwO1xuXG4gICAgICAgICAgICBzdHlsZS50ZXh0QmFzZWxpbmUgPSBzdHlsZS50ZXh0QmFzZWxpbmUgfHwgJ2FscGhhYmV0aWMnO1xuXG4gICAgICAgICAgICBzdHlsZS5saW5lSm9pbiA9IHN0eWxlLmxpbmVKb2luIHx8ICdtaXRlcic7XG4gICAgICAgICAgICBzdHlsZS5taXRlckxpbWl0ID0gc3R5bGUubWl0ZXJMaW1pdCB8fCAxMDtcblxuICAgICAgICAgICAgdGhpcy5fc3R5bGUgPSBzdHlsZTtcbiAgICAgICAgICAgIHRoaXMuZGlydHkgPSB0cnVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFNldCB0aGUgY29weSBmb3IgdGhlIHRleHQgb2JqZWN0LiBUbyBzcGxpdCBhIGxpbmUgeW91IGNhbiB1c2UgJ1xcbicuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gdGV4dCB7c3RyaW5nfSBUaGUgY29weSB0aGF0IHlvdSB3b3VsZCBsaWtlIHRoZSB0ZXh0IHRvIGRpc3BsYXlcbiAgICAgKiBAbWVtYmVyb2YgUElYSS5UZXh0I1xuICAgICAqL1xuICAgIHRleHQ6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbigpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl90ZXh0O1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh0ZXh0KXtcbiAgICAgICAgICAgIHRleHQgPSB0ZXh0LnRvU3RyaW5nKCkgfHwgJyAnO1xuICAgICAgICAgICAgaWYgKHRoaXMuX3RleHQgPT09IHRleHQpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5fdGV4dCA9IHRleHQ7XG4gICAgICAgICAgICB0aGlzLmRpcnR5ID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuXG4vKipcbiAqIFJlbmRlcnMgdGV4dCBhbmQgdXBkYXRlcyBpdCB3aGVuIG5lZWRlZFxuICpcbiAqIEBwcml2YXRlXG4gKi9cblRleHQucHJvdG90eXBlLnVwZGF0ZVRleHQgPSBmdW5jdGlvbiAoKVxue1xuICAgIHZhciBzdHlsZSA9IHRoaXMuX3N0eWxlO1xuICAgIHRoaXMuY29udGV4dC5mb250ID0gc3R5bGUuZm9udDtcblxuICAgIC8vIHdvcmQgd3JhcFxuICAgIC8vIHByZXNlcnZlIG9yaWdpbmFsIHRleHRcbiAgICB2YXIgb3V0cHV0VGV4dCA9IHN0eWxlLndvcmRXcmFwID8gdGhpcy53b3JkV3JhcCh0aGlzLl90ZXh0KSA6IHRoaXMuX3RleHQ7XG5cbiAgICAvLyBzcGxpdCB0ZXh0IGludG8gbGluZXNcbiAgICB2YXIgbGluZXMgPSBvdXRwdXRUZXh0LnNwbGl0KC8oPzpcXHJcXG58XFxyfFxcbikvKTtcblxuICAgIC8vIGNhbGN1bGF0ZSB0ZXh0IHdpZHRoXG4gICAgdmFyIGxpbmVXaWR0aHMgPSBuZXcgQXJyYXkobGluZXMubGVuZ3RoKTtcbiAgICB2YXIgbWF4TGluZVdpZHRoID0gMDtcbiAgICB2YXIgZm9udFByb3BlcnRpZXMgPSB0aGlzLmRldGVybWluZUZvbnRQcm9wZXJ0aWVzKHN0eWxlLmZvbnQpO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGluZXMubGVuZ3RoOyBpKyspXG4gICAge1xuICAgICAgICB2YXIgbGluZVdpZHRoID0gdGhpcy5jb250ZXh0Lm1lYXN1cmVUZXh0KGxpbmVzW2ldKS53aWR0aDtcbiAgICAgICAgbGluZVdpZHRoc1tpXSA9IGxpbmVXaWR0aDtcbiAgICAgICAgbWF4TGluZVdpZHRoID0gTWF0aC5tYXgobWF4TGluZVdpZHRoLCBsaW5lV2lkdGgpO1xuICAgIH1cblxuICAgIHZhciB3aWR0aCA9IG1heExpbmVXaWR0aCArIHN0eWxlLnN0cm9rZVRoaWNrbmVzcztcbiAgICBpZiAoc3R5bGUuZHJvcFNoYWRvdylcbiAgICB7XG4gICAgICAgIHdpZHRoICs9IHN0eWxlLmRyb3BTaGFkb3dEaXN0YW5jZTtcbiAgICB9XG5cbiAgICB0aGlzLmNhbnZhcy53aWR0aCA9ICggd2lkdGggKyB0aGlzLmNvbnRleHQubGluZVdpZHRoICkgKiB0aGlzLnJlc29sdXRpb247XG5cbiAgICAvLyBjYWxjdWxhdGUgdGV4dCBoZWlnaHRcbiAgICB2YXIgbGluZUhlaWdodCA9IHRoaXMuc3R5bGUubGluZUhlaWdodCB8fCBmb250UHJvcGVydGllcy5mb250U2l6ZSArIHN0eWxlLnN0cm9rZVRoaWNrbmVzcztcblxuICAgIHZhciBoZWlnaHQgPSBsaW5lSGVpZ2h0ICogbGluZXMubGVuZ3RoO1xuICAgIGlmIChzdHlsZS5kcm9wU2hhZG93KVxuICAgIHtcbiAgICAgICAgaGVpZ2h0ICs9IHN0eWxlLmRyb3BTaGFkb3dEaXN0YW5jZTtcbiAgICB9XG5cbiAgICB0aGlzLmNhbnZhcy5oZWlnaHQgPSAoIGhlaWdodCArIHRoaXMuX3N0eWxlLnBhZGRpbmcgKiAyICkgKiB0aGlzLnJlc29sdXRpb247XG5cbiAgICB0aGlzLmNvbnRleHQuc2NhbGUoIHRoaXMucmVzb2x1dGlvbiwgdGhpcy5yZXNvbHV0aW9uKTtcblxuICAgIGlmIChuYXZpZ2F0b3IuaXNDb2Nvb25KUylcbiAgICB7XG4gICAgICAgIHRoaXMuY29udGV4dC5jbGVhclJlY3QoMCwgMCwgdGhpcy5jYW52YXMud2lkdGgsIHRoaXMuY2FudmFzLmhlaWdodCk7XG5cbiAgICB9XG5cbiAgICAvL3RoaXMuY29udGV4dC5maWxsU3R5bGU9XCIjRkYwMDAwXCI7XG4gICAgLy90aGlzLmNvbnRleHQuZmlsbFJlY3QoMCwgMCwgdGhpcy5jYW52YXMud2lkdGgsIHRoaXMuY2FudmFzLmhlaWdodCk7XG5cbiAgICB0aGlzLmNvbnRleHQuZm9udCA9IHN0eWxlLmZvbnQ7XG4gICAgdGhpcy5jb250ZXh0LnN0cm9rZVN0eWxlID0gc3R5bGUuc3Ryb2tlO1xuICAgIHRoaXMuY29udGV4dC5saW5lV2lkdGggPSBzdHlsZS5zdHJva2VUaGlja25lc3M7XG4gICAgdGhpcy5jb250ZXh0LnRleHRCYXNlbGluZSA9IHN0eWxlLnRleHRCYXNlbGluZTtcbiAgICB0aGlzLmNvbnRleHQubGluZUpvaW4gPSBzdHlsZS5saW5lSm9pbjtcbiAgICB0aGlzLmNvbnRleHQubWl0ZXJMaW1pdCA9IHN0eWxlLm1pdGVyTGltaXQ7XG5cbiAgICB2YXIgbGluZVBvc2l0aW9uWDtcbiAgICB2YXIgbGluZVBvc2l0aW9uWTtcblxuICAgIGlmIChzdHlsZS5kcm9wU2hhZG93KVxuICAgIHtcbiAgICAgICAgaWYgKHN0eWxlLmRyb3BTaGFkb3dCbHVyID4gMCkge1xuICAgICAgICAgICAgdGhpcy5jb250ZXh0LnNoYWRvd0NvbG9yID0gc3R5bGUuZHJvcFNoYWRvd0NvbG9yO1xuICAgICAgICAgICAgdGhpcy5jb250ZXh0LnNoYWRvd0JsdXIgPSBzdHlsZS5kcm9wU2hhZG93Qmx1cjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuY29udGV4dC5maWxsU3R5bGUgPSBzdHlsZS5kcm9wU2hhZG93Q29sb3I7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgeFNoYWRvd09mZnNldCA9IE1hdGguY29zKHN0eWxlLmRyb3BTaGFkb3dBbmdsZSkgKiBzdHlsZS5kcm9wU2hhZG93RGlzdGFuY2U7XG4gICAgICAgIHZhciB5U2hhZG93T2Zmc2V0ID0gTWF0aC5zaW4oc3R5bGUuZHJvcFNoYWRvd0FuZ2xlKSAqIHN0eWxlLmRyb3BTaGFkb3dEaXN0YW5jZTtcblxuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbGluZXMubGVuZ3RoOyBpKyspXG4gICAgICAgIHtcbiAgICAgICAgICAgIGxpbmVQb3NpdGlvblggPSBzdHlsZS5zdHJva2VUaGlja25lc3MgLyAyO1xuICAgICAgICAgICAgbGluZVBvc2l0aW9uWSA9IChzdHlsZS5zdHJva2VUaGlja25lc3MgLyAyICsgaSAqIGxpbmVIZWlnaHQpICsgZm9udFByb3BlcnRpZXMuYXNjZW50O1xuXG4gICAgICAgICAgICBpZiAoc3R5bGUuYWxpZ24gPT09ICdyaWdodCcpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgbGluZVBvc2l0aW9uWCArPSBtYXhMaW5lV2lkdGggLSBsaW5lV2lkdGhzW2ldO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoc3R5bGUuYWxpZ24gPT09ICdjZW50ZXInKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGxpbmVQb3NpdGlvblggKz0gKG1heExpbmVXaWR0aCAtIGxpbmVXaWR0aHNbaV0pIC8gMjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHN0eWxlLmZpbGwpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdGhpcy5jb250ZXh0LmZpbGxUZXh0KGxpbmVzW2ldLCBsaW5lUG9zaXRpb25YICsgeFNoYWRvd09mZnNldCwgbGluZVBvc2l0aW9uWSArIHlTaGFkb3dPZmZzZXQgKyB0aGlzLl9zdHlsZS5wYWRkaW5nKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vc2V0IGNhbnZhcyB0ZXh0IHN0eWxlc1xuICAgIHRoaXMuY29udGV4dC5maWxsU3R5bGUgPSBzdHlsZS5maWxsO1xuXG4gICAgLy9kcmF3IGxpbmVzIGxpbmUgYnkgbGluZVxuICAgIGZvciAoaSA9IDA7IGkgPCBsaW5lcy5sZW5ndGg7IGkrKylcbiAgICB7XG4gICAgICAgIGxpbmVQb3NpdGlvblggPSBzdHlsZS5zdHJva2VUaGlja25lc3MgLyAyO1xuICAgICAgICBsaW5lUG9zaXRpb25ZID0gKHN0eWxlLnN0cm9rZVRoaWNrbmVzcyAvIDIgKyBpICogbGluZUhlaWdodCkgKyBmb250UHJvcGVydGllcy5hc2NlbnQ7XG5cbiAgICAgICAgaWYgKHN0eWxlLmFsaWduID09PSAncmlnaHQnKVxuICAgICAgICB7XG4gICAgICAgICAgICBsaW5lUG9zaXRpb25YICs9IG1heExpbmVXaWR0aCAtIGxpbmVXaWR0aHNbaV07XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoc3R5bGUuYWxpZ24gPT09ICdjZW50ZXInKVxuICAgICAgICB7XG4gICAgICAgICAgICBsaW5lUG9zaXRpb25YICs9IChtYXhMaW5lV2lkdGggLSBsaW5lV2lkdGhzW2ldKSAvIDI7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoc3R5bGUuc3Ryb2tlICYmIHN0eWxlLnN0cm9rZVRoaWNrbmVzcylcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5jb250ZXh0LnN0cm9rZVRleHQobGluZXNbaV0sIGxpbmVQb3NpdGlvblgsIGxpbmVQb3NpdGlvblkgKyB0aGlzLl9zdHlsZS5wYWRkaW5nKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChzdHlsZS5maWxsKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmNvbnRleHQuZmlsbFRleHQobGluZXNbaV0sIGxpbmVQb3NpdGlvblgsIGxpbmVQb3NpdGlvblkgKyB0aGlzLl9zdHlsZS5wYWRkaW5nKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMudXBkYXRlVGV4dHVyZSgpO1xufTtcblxuLyoqXG4gKiBVcGRhdGVzIHRleHR1cmUgc2l6ZSBiYXNlZCBvbiBjYW52YXMgc2l6ZVxuICpcbiAqIEBwcml2YXRlXG4gKi9cblRleHQucHJvdG90eXBlLnVwZGF0ZVRleHR1cmUgPSBmdW5jdGlvbiAoKVxue1xuICAgIHZhciB0ZXh0dXJlID0gdGhpcy5fdGV4dHVyZTtcblxuICAgIHRleHR1cmUuYmFzZVRleHR1cmUuaGFzTG9hZGVkID0gdHJ1ZTtcbiAgICB0ZXh0dXJlLmJhc2VUZXh0dXJlLnJlc29sdXRpb24gPSB0aGlzLnJlc29sdXRpb247XG5cbiAgICB0ZXh0dXJlLmJhc2VUZXh0dXJlLndpZHRoID0gdGhpcy5jYW52YXMud2lkdGggLyB0aGlzLnJlc29sdXRpb247XG4gICAgdGV4dHVyZS5iYXNlVGV4dHVyZS5oZWlnaHQgPSB0aGlzLmNhbnZhcy5oZWlnaHQgLyB0aGlzLnJlc29sdXRpb247XG4gICAgdGV4dHVyZS5jcm9wLndpZHRoID0gdGV4dHVyZS5fZnJhbWUud2lkdGggPSB0aGlzLmNhbnZhcy53aWR0aCAvIHRoaXMucmVzb2x1dGlvbjtcbiAgICB0ZXh0dXJlLmNyb3AuaGVpZ2h0ID0gdGV4dHVyZS5fZnJhbWUuaGVpZ2h0ID0gdGhpcy5jYW52YXMuaGVpZ2h0IC8gdGhpcy5yZXNvbHV0aW9uO1xuXG4gICAgdGV4dHVyZS50cmltLnggPSAwO1xuICAgIHRleHR1cmUudHJpbS55ID0gLXRoaXMuX3N0eWxlLnBhZGRpbmc7XG5cbiAgICB0ZXh0dXJlLnRyaW0ud2lkdGggPSB0ZXh0dXJlLl9mcmFtZS53aWR0aDtcbiAgICB0ZXh0dXJlLnRyaW0uaGVpZ2h0ID0gdGV4dHVyZS5fZnJhbWUuaGVpZ2h0IC0gdGhpcy5fc3R5bGUucGFkZGluZyoyO1xuXG4gICAgdGhpcy5fd2lkdGggPSB0aGlzLmNhbnZhcy53aWR0aCAvIHRoaXMucmVzb2x1dGlvbjtcbiAgICB0aGlzLl9oZWlnaHQgPSB0aGlzLmNhbnZhcy5oZWlnaHQgLyB0aGlzLnJlc29sdXRpb247XG5cbiAgICB0ZXh0dXJlLmJhc2VUZXh0dXJlLmVtaXQoJ3VwZGF0ZScsICB0ZXh0dXJlLmJhc2VUZXh0dXJlKTtcblxuICAgIHRoaXMuZGlydHkgPSBmYWxzZTtcbn07XG5cbi8qKlxuICogUmVuZGVycyB0aGUgb2JqZWN0IHVzaW5nIHRoZSBXZWJHTCByZW5kZXJlclxuICpcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5XZWJHTFJlbmRlcmVyfVxuICovXG5UZXh0LnByb3RvdHlwZS5yZW5kZXJXZWJHTCA9IGZ1bmN0aW9uIChyZW5kZXJlcilcbntcbiAgICBpZiAodGhpcy5kaXJ0eSlcbiAgICB7XG4gICAgICAgIC8vdGhpcy5yZXNvbHV0aW9uID0gMS8vcmVuZGVyZXIucmVzb2x1dGlvbjtcblxuICAgICAgICB0aGlzLnVwZGF0ZVRleHQoKTtcbiAgICB9XG5cbiAgICBTcHJpdGUucHJvdG90eXBlLnJlbmRlcldlYkdMLmNhbGwodGhpcywgcmVuZGVyZXIpO1xufTtcblxuLyoqXG4gKiBSZW5kZXJzIHRoZSBvYmplY3QgdXNpbmcgdGhlIENhbnZhcyByZW5kZXJlclxuICpcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5DYW52YXNSZW5kZXJlcn1cbiAqIEBwcml2YXRlXG4gKi9cblRleHQucHJvdG90eXBlLl9yZW5kZXJDYW52YXMgPSBmdW5jdGlvbiAocmVuZGVyZXIpXG57XG4gICAgaWYgKHRoaXMuZGlydHkpXG4gICAge1xuICAgICAvLyAgIHRoaXMucmVzb2x1dGlvbiA9IDEvL3JlbmRlcmVyLnJlc29sdXRpb247XG5cbiAgICAgICAgdGhpcy51cGRhdGVUZXh0KCk7XG4gICAgfVxuXG4gICAgU3ByaXRlLnByb3RvdHlwZS5fcmVuZGVyQ2FudmFzLmNhbGwodGhpcywgcmVuZGVyZXIpO1xufTtcblxuLyoqXG4gKiBDYWxjdWxhdGVzIHRoZSBhc2NlbnQsIGRlc2NlbnQgYW5kIGZvbnRTaXplIG9mIGEgZ2l2ZW4gZm9udFN0eWxlXG4gKlxuICogQHBhcmFtIGZvbnRTdHlsZSB7b2JqZWN0fVxuICogQHByaXZhdGVcbiAqL1xuVGV4dC5wcm90b3R5cGUuZGV0ZXJtaW5lRm9udFByb3BlcnRpZXMgPSBmdW5jdGlvbiAoZm9udFN0eWxlKVxue1xuICAgIHZhciBwcm9wZXJ0aWVzID0gVGV4dC5mb250UHJvcGVydGllc0NhY2hlW2ZvbnRTdHlsZV07XG5cbiAgICBpZiAoIXByb3BlcnRpZXMpXG4gICAge1xuICAgICAgICBwcm9wZXJ0aWVzID0ge307XG5cbiAgICAgICAgdmFyIGNhbnZhcyA9IFRleHQuZm9udFByb3BlcnRpZXNDYW52YXM7XG4gICAgICAgIHZhciBjb250ZXh0ID0gVGV4dC5mb250UHJvcGVydGllc0NvbnRleHQ7XG5cbiAgICAgICAgY29udGV4dC5mb250ID0gZm9udFN0eWxlO1xuXG4gICAgICAgIHZhciB3aWR0aCA9IE1hdGguY2VpbChjb250ZXh0Lm1lYXN1cmVUZXh0KCd8TcOJcScpLndpZHRoKTtcbiAgICAgICAgdmFyIGJhc2VsaW5lID0gTWF0aC5jZWlsKGNvbnRleHQubWVhc3VyZVRleHQoJ00nKS53aWR0aCk7XG4gICAgICAgIHZhciBoZWlnaHQgPSAyICogYmFzZWxpbmU7XG5cbiAgICAgICAgYmFzZWxpbmUgPSBiYXNlbGluZSAqIDEuNCB8IDA7XG5cbiAgICAgICAgY2FudmFzLndpZHRoID0gd2lkdGg7XG4gICAgICAgIGNhbnZhcy5oZWlnaHQgPSBoZWlnaHQ7XG5cbiAgICAgICAgY29udGV4dC5maWxsU3R5bGUgPSAnI2YwMCc7XG4gICAgICAgIGNvbnRleHQuZmlsbFJlY3QoMCwgMCwgd2lkdGgsIGhlaWdodCk7XG5cbiAgICAgICAgY29udGV4dC5mb250ID0gZm9udFN0eWxlO1xuXG4gICAgICAgIGNvbnRleHQudGV4dEJhc2VsaW5lID0gJ2FscGhhYmV0aWMnO1xuICAgICAgICBjb250ZXh0LmZpbGxTdHlsZSA9ICcjMDAwJztcbiAgICAgICAgY29udGV4dC5maWxsVGV4dCgnfE3DiXEnLCAwLCBiYXNlbGluZSk7XG5cbiAgICAgICAgdmFyIGltYWdlZGF0YSA9IGNvbnRleHQuZ2V0SW1hZ2VEYXRhKDAsIDAsIHdpZHRoLCBoZWlnaHQpLmRhdGE7XG4gICAgICAgIHZhciBwaXhlbHMgPSBpbWFnZWRhdGEubGVuZ3RoO1xuICAgICAgICB2YXIgbGluZSA9IHdpZHRoICogNDtcblxuICAgICAgICB2YXIgaSwgajtcblxuICAgICAgICB2YXIgaWR4ID0gMDtcbiAgICAgICAgdmFyIHN0b3AgPSBmYWxzZTtcblxuICAgICAgICAvLyBhc2NlbnQuIHNjYW4gZnJvbSB0b3AgdG8gYm90dG9tIHVudGlsIHdlIGZpbmQgYSBub24gcmVkIHBpeGVsXG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCBiYXNlbGluZTsgaSsrKVxuICAgICAgICB7XG4gICAgICAgICAgICBmb3IgKGogPSAwOyBqIDwgbGluZTsgaiArPSA0KVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGlmIChpbWFnZWRhdGFbaWR4ICsgal0gIT09IDI1NSlcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIHN0b3AgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIXN0b3ApXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgaWR4ICs9IGxpbmU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBwcm9wZXJ0aWVzLmFzY2VudCA9IGJhc2VsaW5lIC0gaTtcblxuICAgICAgICBpZHggPSBwaXhlbHMgLSBsaW5lO1xuICAgICAgICBzdG9wID0gZmFsc2U7XG5cbiAgICAgICAgLy8gZGVzY2VudC4gc2NhbiBmcm9tIGJvdHRvbSB0byB0b3AgdW50aWwgd2UgZmluZCBhIG5vbiByZWQgcGl4ZWxcbiAgICAgICAgZm9yIChpID0gaGVpZ2h0OyBpID4gYmFzZWxpbmU7IGktLSlcbiAgICAgICAge1xuICAgICAgICAgICAgZm9yIChqID0gMDsgaiA8IGxpbmU7IGogKz0gNClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBpZiAoaW1hZ2VkYXRhW2lkeCArIGpdICE9PSAyNTUpXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBzdG9wID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCFzdG9wKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGlkeCAtPSBsaW5lO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcHJvcGVydGllcy5kZXNjZW50ID0gaSAtIGJhc2VsaW5lO1xuICAgICAgICBwcm9wZXJ0aWVzLmZvbnRTaXplID0gcHJvcGVydGllcy5hc2NlbnQgKyBwcm9wZXJ0aWVzLmRlc2NlbnQ7XG5cbiAgICAgICAgVGV4dC5mb250UHJvcGVydGllc0NhY2hlW2ZvbnRTdHlsZV0gPSBwcm9wZXJ0aWVzO1xuICAgIH1cblxuICAgIHJldHVybiBwcm9wZXJ0aWVzO1xufTtcblxuLyoqXG4gKiBBcHBsaWVzIG5ld2xpbmVzIHRvIGEgc3RyaW5nIHRvIGhhdmUgaXQgb3B0aW1hbGx5IGZpdCBpbnRvIHRoZSBob3Jpem9udGFsXG4gKiBib3VuZHMgc2V0IGJ5IHRoZSBUZXh0IG9iamVjdCdzIHdvcmRXcmFwV2lkdGggcHJvcGVydHkuXG4gKlxuICogQHBhcmFtIHRleHQge3N0cmluZ31cbiAqIEBwcml2YXRlXG4gKi9cblRleHQucHJvdG90eXBlLndvcmRXcmFwID0gZnVuY3Rpb24gKHRleHQpXG57XG4gICAgLy8gR3JlZWR5IHdyYXBwaW5nIGFsZ29yaXRobSB0aGF0IHdpbGwgd3JhcCB3b3JkcyBhcyB0aGUgbGluZSBncm93cyBsb25nZXJcbiAgICAvLyB0aGFuIGl0cyBob3Jpem9udGFsIGJvdW5kcy5cbiAgICB2YXIgcmVzdWx0ID0gJyc7XG4gICAgdmFyIGxpbmVzID0gdGV4dC5zcGxpdCgnXFxuJyk7XG4gICAgdmFyIHdvcmRXcmFwV2lkdGggPSB0aGlzLl9zdHlsZS53b3JkV3JhcFdpZHRoO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGluZXMubGVuZ3RoOyBpKyspXG4gICAge1xuICAgICAgICB2YXIgc3BhY2VMZWZ0ID0gd29yZFdyYXBXaWR0aDtcbiAgICAgICAgdmFyIHdvcmRzID0gbGluZXNbaV0uc3BsaXQoJyAnKTtcbiAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCB3b3Jkcy5sZW5ndGg7IGorKylcbiAgICAgICAge1xuICAgICAgICAgICAgdmFyIHdvcmRXaWR0aCA9IHRoaXMuY29udGV4dC5tZWFzdXJlVGV4dCh3b3Jkc1tqXSkud2lkdGg7XG4gICAgICAgICAgICB2YXIgd29yZFdpZHRoV2l0aFNwYWNlID0gd29yZFdpZHRoICsgdGhpcy5jb250ZXh0Lm1lYXN1cmVUZXh0KCcgJykud2lkdGg7XG4gICAgICAgICAgICBpZiAoaiA9PT0gMCB8fCB3b3JkV2lkdGhXaXRoU3BhY2UgPiBzcGFjZUxlZnQpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgLy8gU2tpcCBwcmludGluZyB0aGUgbmV3bGluZSBpZiBpdCdzIHRoZSBmaXJzdCB3b3JkIG9mIHRoZSBsaW5lIHRoYXQgaXNcbiAgICAgICAgICAgICAgICAvLyBncmVhdGVyIHRoYW4gdGhlIHdvcmQgd3JhcCB3aWR0aC5cbiAgICAgICAgICAgICAgICBpZiAoaiA+IDApXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQgKz0gJ1xcbic7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJlc3VsdCArPSB3b3Jkc1tqXTtcbiAgICAgICAgICAgICAgICBzcGFjZUxlZnQgPSB3b3JkV3JhcFdpZHRoIC0gd29yZFdpZHRoO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHNwYWNlTGVmdCAtPSB3b3JkV2lkdGhXaXRoU3BhY2U7XG4gICAgICAgICAgICAgICAgcmVzdWx0ICs9ICcgJyArIHdvcmRzW2pdO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGkgPCBsaW5lcy5sZW5ndGgtMSlcbiAgICAgICAge1xuICAgICAgICAgICAgcmVzdWx0ICs9ICdcXG4nO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG59O1xuXG4vKipcbiAqIFJldHVybnMgdGhlIGJvdW5kcyBvZiB0aGUgVGV4dCBhcyBhIHJlY3RhbmdsZS4gVGhlIGJvdW5kcyBjYWxjdWxhdGlvbiB0YWtlcyB0aGUgd29ybGRUcmFuc2Zvcm0gaW50byBhY2NvdW50LlxuICpcbiAqIEBwYXJhbSBtYXRyaXgge1BJWEkuTWF0cml4fSB0aGUgdHJhbnNmb3JtYXRpb24gbWF0cml4IG9mIHRoZSBUZXh0XG4gKiBAcmV0dXJuIHtQSVhJLlJlY3RhbmdsZX0gdGhlIGZyYW1pbmcgcmVjdGFuZ2xlXG4gKi9cblRleHQucHJvdG90eXBlLmdldEJvdW5kcyA9IGZ1bmN0aW9uIChtYXRyaXgpXG57XG4gICAgaWYgKHRoaXMuZGlydHkpXG4gICAge1xuICAgICAgICB0aGlzLnVwZGF0ZVRleHQoKTtcbiAgICB9XG5cbiAgICByZXR1cm4gU3ByaXRlLnByb3RvdHlwZS5nZXRCb3VuZHMuY2FsbCh0aGlzLCBtYXRyaXgpO1xufTtcblxuLyoqXG4gKiBEZXN0cm95cyB0aGlzIHRleHQgb2JqZWN0LlxuICpcbiAqIEBwYXJhbSBbZGVzdHJveUJhc2VUZXh0dXJlPXRydWVdIHtib29sZWFufSB3aGV0aGVyIHRvIGRlc3Ryb3kgdGhlIGJhc2UgdGV4dHVyZSBhcyB3ZWxsXG4gKi9cblRleHQucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoZGVzdHJveUJhc2VUZXh0dXJlKVxue1xuICAgIC8vIG1ha2Ugc3VyZSB0byByZXNldCB0aGUgdGhlIGNvbnRleHQgYW5kIGNhbnZhcy4uIGRvbnQgd2FudCB0aGlzIGhhbmdpbmcgYXJvdW5kIGluIG1lbW9yeSFcbiAgICB0aGlzLmNvbnRleHQgPSBudWxsO1xuICAgIHRoaXMuY2FudmFzID0gbnVsbDtcblxuICAgIHRoaXMuX3N0eWxlID0gbnVsbDtcblxuICAgIHRoaXMuX3RleHR1cmUuZGVzdHJveShkZXN0cm95QmFzZVRleHR1cmUgPT09IHVuZGVmaW5lZCA/IHRydWUgOiBkZXN0cm95QmFzZVRleHR1cmUpO1xufTtcbiIsInZhciB1dGlscyA9IHJlcXVpcmUoJy4uL3V0aWxzJyksXG4gICAgQ09OU1QgPSByZXF1aXJlKCcuLi9jb25zdCcpLFxuICAgIEV2ZW50RW1pdHRlciA9IHJlcXVpcmUoJ2V2ZW50ZW1pdHRlcjMnKTtcblxuLyoqXG4gKiBBIHRleHR1cmUgc3RvcmVzIHRoZSBpbmZvcm1hdGlvbiB0aGF0IHJlcHJlc2VudHMgYW4gaW1hZ2UuIEFsbCB0ZXh0dXJlcyBoYXZlIGEgYmFzZSB0ZXh0dXJlLlxuICpcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqIEBwYXJhbSBzb3VyY2Uge0ltYWdlfENhbnZhc30gdGhlIHNvdXJjZSBvYmplY3Qgb2YgdGhlIHRleHR1cmUuXG4gKiBAcGFyYW0gW3NjYWxlTW9kZT1QSVhJLlNDQUxFX01PREVTLkRFRkFVTFRdIHtudW1iZXJ9IFNlZSB7QGxpbmsgUElYSS5TQ0FMRV9NT0RFU30gZm9yIHBvc3NpYmxlIHZhbHVlc1xuICogQHBhcmFtIHJlc29sdXRpb24ge251bWJlcn0gdGhlIHJlc29sdXRpb24gb2YgdGhlIHRleHR1cmUgZm9yIGRldmljZXMgd2l0aCBkaWZmZXJlbnQgcGl4ZWwgcmF0aW9zXG4gKi9cbmZ1bmN0aW9uIEJhc2VUZXh0dXJlKHNvdXJjZSwgc2NhbGVNb2RlLCByZXNvbHV0aW9uKVxue1xuICAgIEV2ZW50RW1pdHRlci5jYWxsKHRoaXMpO1xuXG4gICAgdGhpcy51aWQgPSB1dGlscy51aWQoKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBSZXNvbHV0aW9uIG9mIHRoZSB0ZXh0dXJlLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMucmVzb2x1dGlvbiA9IHJlc29sdXRpb24gfHwgMTtcblxuICAgIC8qKlxuICAgICAqIFRoZSB3aWR0aCBvZiB0aGUgYmFzZSB0ZXh0dXJlIHNldCB3aGVuIHRoZSBpbWFnZSBoYXMgbG9hZGVkXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQHJlYWRPbmx5XG4gICAgICovXG4gICAgdGhpcy53aWR0aCA9IDEwMDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBoZWlnaHQgb2YgdGhlIGJhc2UgdGV4dHVyZSBzZXQgd2hlbiB0aGUgaW1hZ2UgaGFzIGxvYWRlZFxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEByZWFkT25seVxuICAgICAqL1xuICAgIHRoaXMuaGVpZ2h0ID0gMTAwO1xuXG4gICAgLy8gVE9ETyBkb2NzXG4gICAgLy8gdXNlZCB0byBzdG9yZSB0aGUgYWN0dWFsIGRpbWVuc2lvbnMgb2YgdGhlIHNvdXJjZVxuICAgIC8qKlxuICAgICAqIFVzZWQgdG8gc3RvcmUgdGhlIGFjdHVhbCB3aWR0aCBvZiB0aGUgc291cmNlIG9mIHRoaXMgdGV4dHVyZVxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEByZWFkT25seVxuICAgICAqL1xuICAgIHRoaXMucmVhbFdpZHRoID0gMTAwO1xuICAgIC8qKlxuICAgICAqIFVzZWQgdG8gc3RvcmUgdGhlIGFjdHVhbCBoZWlnaHQgb2YgdGhlIHNvdXJjZSBvZiB0aGlzIHRleHR1cmVcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAcmVhZE9ubHlcbiAgICAgKi9cbiAgICB0aGlzLnJlYWxIZWlnaHQgPSAxMDA7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgc2NhbGUgbW9kZSB0byBhcHBseSB3aGVuIHNjYWxpbmcgdGhpcyB0ZXh0dXJlXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgUElYSS5TQ0FMRV9NT0RFUy5MSU5FQVJcbiAgICAgKiBAc2VlIFBJWEkuU0NBTEVfTU9ERVNcbiAgICAgKi9cbiAgICB0aGlzLnNjYWxlTW9kZSA9IHNjYWxlTW9kZSB8fCBDT05TVC5TQ0FMRV9NT0RFUy5ERUZBVUxUO1xuXG4gICAgLyoqXG4gICAgICogU2V0IHRvIHRydWUgb25jZSB0aGUgYmFzZSB0ZXh0dXJlIGhhcyBzdWNjZXNzZnVsbHkgbG9hZGVkLlxuICAgICAqXG4gICAgICogVGhpcyBpcyBuZXZlciB0cnVlIGlmIHRoZSB1bmRlcmx5aW5nIHNvdXJjZSBmYWlscyB0byBsb2FkIG9yIGhhcyBubyB0ZXh0dXJlIGRhdGEuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqIEByZWFkT25seVxuICAgICAqL1xuICAgIHRoaXMuaGFzTG9hZGVkID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBTZXQgdG8gdHJ1ZSBpZiB0aGUgc291cmNlIGlzIGN1cnJlbnRseSBsb2FkaW5nLlxuICAgICAqXG4gICAgICogSWYgYW4gSW1hZ2Ugc291cmNlIGlzIGxvYWRpbmcgdGhlICdsb2FkZWQnIG9yICdlcnJvcicgZXZlbnQgd2lsbCBiZVxuICAgICAqIGRpc3BhdGNoZWQgd2hlbiB0aGUgb3BlcmF0aW9uIGVuZHMuIEFuIHVuZGVyeWxpbmcgc291cmNlIHRoYXQgaXNcbiAgICAgKiBpbW1lZGlhdGVseS1hdmFpbGFibGUgYnlwYXNzZXMgbG9hZGluZyBlbnRpcmVseS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICogQHJlYWRvbmx5XG4gICAgICovXG4gICAgdGhpcy5pc0xvYWRpbmcgPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBpbWFnZSBzb3VyY2UgdGhhdCBpcyB1c2VkIHRvIGNyZWF0ZSB0aGUgdGV4dHVyZS5cbiAgICAgKlxuICAgICAqIFRPRE86IE1ha2UgdGhpcyBhIHNldHRlciB0aGF0IGNhbGxzIGxvYWRTb3VyY2UoKTtcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge0ltYWdlfENhbnZhc31cbiAgICAgKiBAcmVhZG9ubHlcbiAgICAgKi9cbiAgICB0aGlzLnNvdXJjZSA9IG51bGw7IC8vIHNldCBpbiBsb2FkU291cmNlLCBpZiBhdCBhbGxcblxuICAgIC8qKlxuICAgICAqIENvbnRyb2xzIGlmIFJHQiBjaGFubmVscyBzaG91bGQgYmUgcHJlLW11bHRpcGxpZWQgYnkgQWxwaGEgIChXZWJHTCBvbmx5KVxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKiBAZGVmYXVsdCB0cnVlXG4gICAgICovXG4gICAgdGhpcy5wcmVtdWx0aXBsaWVkQWxwaGEgPSB0cnVlO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7c3RyaW5nfVxuICAgICAqL1xuICAgIHRoaXMuaW1hZ2VVcmwgPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogV2V0aGVyIG9yIG5vdCB0aGUgdGV4dHVyZSBpcyBhIHBvd2VyIG9mIHR3bywgdHJ5IHRvIHVzZSBwb3dlciBvZiB0d28gdGV4dHVyZXMgYXMgbXVjaCBhcyB5b3UgY2FuXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuaXNQb3dlck9mVHdvID0gZmFsc2U7XG5cbiAgICAvLyB1c2VkIGZvciB3ZWJHTFxuXG4gICAgLyoqXG4gICAgICpcbiAgICAgKiBTZXQgdGhpcyB0byB0cnVlIGlmIGEgbWlwbWFwIG9mIHRoaXMgdGV4dHVyZSBuZWVkcyB0byBiZSBnZW5lcmF0ZWQuIFRoaXMgdmFsdWUgbmVlZHMgdG8gYmUgc2V0IGJlZm9yZSB0aGUgdGV4dHVyZSBpcyB1c2VkXG4gICAgICogQWxzbyB0aGUgdGV4dHVyZSBtdXN0IGJlIGEgcG93ZXIgb2YgdHdvIHNpemUgdG8gd29ya1xuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKi9cbiAgICB0aGlzLm1pcG1hcCA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogQSBtYXAgb2YgcmVuZGVyZXIgSURzIHRvIHdlYmdsIHRleHR1cmVzXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtvYmplY3Q8bnVtYmVyLCBXZWJHTFRleHR1cmU+fVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fZ2xUZXh0dXJlcyA9IHt9O1xuICAgIHRoaXMuX2FjdGl2ZSA9IGZhbHNlO1xuICAgIHRoaXMuX2lkID0gMDtcbiAgICBcbiAgICAvLyBpZiBubyBzb3VyY2UgcGFzc2VkIGRvbid0IHRyeSB0byBsb2FkXG4gICAgaWYgKHNvdXJjZSlcbiAgICB7XG4gICAgICAgIHRoaXMubG9hZFNvdXJjZShzb3VyY2UpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEZpcmVkIHdoZW4gYSBub3QtaW1tZWRpYXRlbHktYXZhaWxhYmxlIHNvdXJjZSBmaW5pc2hlcyBsb2FkaW5nLlxuICAgICAqXG4gICAgICogQGV2ZW50IGxvYWRlZFxuICAgICAqIEBtZW1iZXJvZiBQSVhJLkJhc2VUZXh0dXJlI1xuICAgICAqIEBwcm90ZWN0ZWRcbiAgICAgKi9cblxuICAgIC8qKlxuICAgICAqIEZpcmVkIHdoZW4gYSBub3QtaW1tZWRpYXRlbHktYXZhaWxhYmxlIHNvdXJjZSBmYWlscyB0byBsb2FkLlxuICAgICAqXG4gICAgICogQGV2ZW50IGVycm9yXG4gICAgICogQG1lbWJlcm9mIFBJWEkuQmFzZVRleHR1cmUjXG4gICAgICogQHByb3RlY3RlZFxuICAgICAqL1xufVxuXG5CYXNlVGV4dHVyZS5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKEV2ZW50RW1pdHRlci5wcm90b3R5cGUpO1xuQmFzZVRleHR1cmUucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gQmFzZVRleHR1cmU7XG5tb2R1bGUuZXhwb3J0cyA9IEJhc2VUZXh0dXJlO1xuXG4vKipcbiAqIFVwZGF0ZXMgdGhlIHRleHR1cmUgb24gYWxsIHRoZSB3ZWJnbCByZW5kZXJlcnMsIHRoaXMgYWxzbyBhc3N1bWVzIHRoZSBzcmMgaGFzIGNoYW5nZWQuXG4gKlxuICogQGZpcmVzIHVwZGF0ZVxuICovXG5CYXNlVGV4dHVyZS5wcm90b3R5cGUudXBkYXRlID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLnJlYWxXaWR0aCA9IHRoaXMuc291cmNlLm5hdHVyYWxXaWR0aCB8fCB0aGlzLnNvdXJjZS53aWR0aDtcbiAgICB0aGlzLnJlYWxIZWlnaHQgPSB0aGlzLnNvdXJjZS5uYXR1cmFsSGVpZ2h0IHx8IHRoaXMuc291cmNlLmhlaWdodDtcblxuICAgIHRoaXMud2lkdGggPSB0aGlzLnJlYWxXaWR0aCAvIHRoaXMucmVzb2x1dGlvbjtcbiAgICB0aGlzLmhlaWdodCA9IHRoaXMucmVhbEhlaWdodCAvIHRoaXMucmVzb2x1dGlvbjtcblxuICAgIHRoaXMuaXNQb3dlck9mVHdvID0gdXRpbHMuaXNQb3dlck9mVHdvKHRoaXMucmVhbFdpZHRoLCB0aGlzLnJlYWxIZWlnaHQpO1xuXG4gICAgdGhpcy5lbWl0KCd1cGRhdGUnLCB0aGlzKTtcbn07XG5cbi8qKlxuICogTG9hZCBhIHNvdXJjZS5cbiAqXG4gKiBJZiB0aGUgc291cmNlIGlzIG5vdC1pbW1lZGlhdGVseS1hdmFpbGFibGUsIHN1Y2ggYXMgYW4gaW1hZ2UgdGhhdCBuZWVkcyB0byBiZVxuICogZG93bmxvYWRlZCwgdGhlbiB0aGUgJ2xvYWRlZCcgb3IgJ2Vycm9yJyBldmVudCB3aWxsIGJlIGRpc3BhdGNoZWQgaW4gdGhlIGZ1dHVyZVxuICogYW5kIGBoYXNMb2FkZWRgIHdpbGwgcmVtYWluIGZhbHNlIGFmdGVyIHRoaXMgY2FsbC5cbiAqXG4gKiBUaGUgbG9naWMgc3RhdGUgYWZ0ZXIgY2FsbGluZyBgbG9hZFNvdXJjZWAgZGlyZWN0bHkgb3IgaW5kaXJlY3RseSAoZWcuIGBmcm9tSW1hZ2VgLCBgbmV3IEJhc2VUZXh0dXJlYCkgaXM6XG4gKlxuICogICAgIGlmICh0ZXh0dXJlLmhhc0xvYWRlZClcbiB7XG4gKiAgICAgICAgLy8gdGV4dHVyZSByZWFkeSBmb3IgdXNlXG4gKiAgICAgfSBlbHNlIGlmICh0ZXh0dXJlLmlzTG9hZGluZylcbiB7XG4gKiAgICAgICAgLy8gbGlzdGVuIHRvICdsb2FkZWQnIGFuZC9vciAnZXJyb3InIGV2ZW50cyBvbiB0ZXh0dXJlXG4gKiAgICAgfSBlbHNlIHtcbiAqICAgICAgICAvLyBub3QgbG9hZGluZywgbm90IGdvaW5nIHRvIGxvYWQgVU5MRVNTIHRoZSBzb3VyY2UgaXMgcmVsb2FkZWRcbiAqICAgICAgICAvLyAoaXQgbWF5IHN0aWxsIG1ha2Ugc2Vuc2UgdG8gbGlzdGVuIHRvIHRoZSBldmVudHMpXG4gKiAgICAgfVxuICpcbiAqIEBwcm90ZWN0ZWRcbiAqIEBwYXJhbSBzb3VyY2Uge0ltYWdlfENhbnZhc30gdGhlIHNvdXJjZSBvYmplY3Qgb2YgdGhlIHRleHR1cmUuXG4gKi9cbkJhc2VUZXh0dXJlLnByb3RvdHlwZS5sb2FkU291cmNlID0gZnVuY3Rpb24gKHNvdXJjZSlcbntcbiAgICB2YXIgd2FzTG9hZGluZyA9IHRoaXMuaXNMb2FkaW5nO1xuICAgIHRoaXMuaGFzTG9hZGVkID0gZmFsc2U7XG4gICAgdGhpcy5pc0xvYWRpbmcgPSBmYWxzZTtcblxuICAgIGlmICh3YXNMb2FkaW5nICYmIHRoaXMuc291cmNlKVxuICAgIHtcbiAgICAgICAgdGhpcy5zb3VyY2Uub25sb2FkID0gbnVsbDtcbiAgICAgICAgdGhpcy5zb3VyY2Uub25lcnJvciA9IG51bGw7XG4gICAgfVxuXG4gICAgdGhpcy5zb3VyY2UgPSBzb3VyY2U7XG5cbiAgICAvLyBBcHBseSBzb3VyY2UgaWYgbG9hZGVkLiBPdGhlcndpc2Ugc2V0dXAgYXBwcm9wcmlhdGUgbG9hZGluZyBtb25pdG9ycy5cbiAgICBpZiAoKHRoaXMuc291cmNlLmNvbXBsZXRlIHx8IHRoaXMuc291cmNlLmdldENvbnRleHQpICYmIHRoaXMuc291cmNlLndpZHRoICYmIHRoaXMuc291cmNlLmhlaWdodClcbiAgICB7XG4gICAgICAgIHRoaXMuX3NvdXJjZUxvYWRlZCgpO1xuICAgIH1cbiAgICBlbHNlIGlmICghc291cmNlLmdldENvbnRleHQpXG4gICAge1xuXG4gICAgICAgIC8vIEltYWdlIGZhaWwgLyBub3QgcmVhZHlcbiAgICAgICAgdGhpcy5pc0xvYWRpbmcgPSB0cnVlO1xuXG4gICAgICAgIHZhciBzY29wZSA9IHRoaXM7XG5cbiAgICAgICAgc291cmNlLm9ubG9hZCA9IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHNvdXJjZS5vbmxvYWQgPSBudWxsO1xuICAgICAgICAgICAgc291cmNlLm9uZXJyb3IgPSBudWxsO1xuXG4gICAgICAgICAgICBpZiAoIXNjb3BlLmlzTG9hZGluZylcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHNjb3BlLmlzTG9hZGluZyA9IGZhbHNlO1xuICAgICAgICAgICAgc2NvcGUuX3NvdXJjZUxvYWRlZCgpO1xuXG4gICAgICAgICAgICBzY29wZS5lbWl0KCdsb2FkZWQnLCBzY29wZSk7XG4gICAgICAgIH07XG5cbiAgICAgICAgc291cmNlLm9uZXJyb3IgPSBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICBzb3VyY2Uub25sb2FkID0gbnVsbDtcbiAgICAgICAgICAgIHNvdXJjZS5vbmVycm9yID0gbnVsbDtcblxuICAgICAgICAgICAgaWYgKCFzY29wZS5pc0xvYWRpbmcpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBzY29wZS5pc0xvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgICAgIHNjb3BlLmVtaXQoJ2Vycm9yJywgc2NvcGUpO1xuICAgICAgICB9O1xuXG4gICAgICAgIC8vIFBlciBodHRwOi8vd3d3LnczLm9yZy9UUi9odG1sNS9lbWJlZGRlZC1jb250ZW50LTAuaHRtbCN0aGUtaW1nLWVsZW1lbnRcbiAgICAgICAgLy8gICBcIlRoZSB2YWx1ZSBvZiBgY29tcGxldGVgIGNhbiB0aHVzIGNoYW5nZSB3aGlsZSBhIHNjcmlwdCBpcyBleGVjdXRpbmcuXCJcbiAgICAgICAgLy8gU28gY29tcGxldGUgbmVlZHMgdG8gYmUgcmUtY2hlY2tlZCBhZnRlciB0aGUgY2FsbGJhY2tzIGhhdmUgYmVlbiBhZGRlZC4uXG4gICAgICAgIC8vIE5PVEU6IGNvbXBsZXRlIHdpbGwgYmUgdHJ1ZSBpZiB0aGUgaW1hZ2UgaGFzIG5vIHNyYyBzbyBiZXN0IHRvIGNoZWNrIGlmIHRoZSBzcmMgaXMgc2V0LlxuICAgICAgICBpZiAoc291cmNlLmNvbXBsZXRlICYmIHNvdXJjZS5zcmMpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuaXNMb2FkaW5nID0gZmFsc2U7XG5cbiAgICAgICAgICAgIC8vIC4uYW5kIGlmIHdlJ3JlIGNvbXBsZXRlIG5vdywgbm8gbmVlZCBmb3IgY2FsbGJhY2tzXG4gICAgICAgICAgICBzb3VyY2Uub25sb2FkID0gbnVsbDtcbiAgICAgICAgICAgIHNvdXJjZS5vbmVycm9yID0gbnVsbDtcblxuICAgICAgICAgICAgaWYgKHNvdXJjZS53aWR0aCAmJiBzb3VyY2UuaGVpZ2h0KVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHRoaXMuX3NvdXJjZUxvYWRlZCgpO1xuXG4gICAgICAgICAgICAgICAgLy8gSWYgYW55IHByZXZpb3VzIHN1YnNjcmliZXJzIHBvc3NpYmxlXG4gICAgICAgICAgICAgICAgaWYgKHdhc0xvYWRpbmcpXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmVtaXQoJ2xvYWRlZCcsIHRoaXMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAvLyBJZiBhbnkgcHJldmlvdXMgc3Vic2NyaWJlcnMgcG9zc2libGVcbiAgICAgICAgICAgICAgICBpZiAod2FzTG9hZGluZylcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZW1pdCgnZXJyb3InLCB0aGlzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG59O1xuXG4vKipcbiAqIFVzZWQgaW50ZXJuYWxseSB0byB1cGRhdGUgdGhlIHdpZHRoLCBoZWlnaHQsIGFuZCBzb21lIG90aGVyIHRyYWNraW5nIHZhcnMgb25jZVxuICogYSBzb3VyY2UgaGFzIHN1Y2Nlc3NmdWxseSBsb2FkZWQuXG4gKlxuICogQHByaXZhdGVcbiAqL1xuQmFzZVRleHR1cmUucHJvdG90eXBlLl9zb3VyY2VMb2FkZWQgPSBmdW5jdGlvbiAoKVxue1xuICAgIHRoaXMuaGFzTG9hZGVkID0gdHJ1ZTtcbiAgICB0aGlzLnVwZGF0ZSgpO1xufTtcblxuLyoqXG4gKiBEZXN0cm95cyB0aGlzIGJhc2UgdGV4dHVyZVxuICpcbiAqL1xuQmFzZVRleHR1cmUucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoKVxue1xuICAgIGlmICh0aGlzLmltYWdlVXJsKVxuICAgIHtcbiAgICAgICAgZGVsZXRlIHV0aWxzLkJhc2VUZXh0dXJlQ2FjaGVbdGhpcy5pbWFnZVVybF07XG4gICAgICAgIGRlbGV0ZSB1dGlscy5UZXh0dXJlQ2FjaGVbdGhpcy5pbWFnZVVybF07XG5cbiAgICAgICAgdGhpcy5pbWFnZVVybCA9IG51bGw7XG5cbiAgICAgICAgaWYgKCFuYXZpZ2F0b3IuaXNDb2Nvb25KUylcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5zb3VyY2Uuc3JjID0gJyc7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZWxzZSBpZiAodGhpcy5zb3VyY2UgJiYgdGhpcy5zb3VyY2UuX3BpeGlJZClcbiAgICB7XG4gICAgICAgIGRlbGV0ZSB1dGlscy5CYXNlVGV4dHVyZUNhY2hlW3RoaXMuc291cmNlLl9waXhpSWRdO1xuICAgIH1cblxuICAgIHRoaXMuc291cmNlID0gbnVsbDtcblxuICAgIHRoaXMuZGlzcG9zZSgpO1xufTtcblxuLyoqXG4gKiBGcmVlcyB0aGUgdGV4dHVyZSBmcm9tIFdlYkdMIG1lbW9yeSB3aXRob3V0IGRlc3Ryb3lpbmcgdGhpcyB0ZXh0dXJlIG9iamVjdC5cbiAqIFRoaXMgbWVhbnMgeW91IGNhbiBzdGlsbCB1c2UgdGhlIHRleHR1cmUgbGF0ZXIgd2hpY2ggd2lsbCB1cGxvYWQgaXQgdG8gR1BVXG4gKiBtZW1vcnkgYWdhaW4uXG4gKlxuICovXG5CYXNlVGV4dHVyZS5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy5lbWl0KCdkaXNwb3NlJywgdGhpcyk7XG5cbiAgICAvLyB0aGlzIHNob3VsZCBubyBsb25nZXIgYmUgbmVlZGVkLCB0aGUgcmVuZGVyZXJzIHNob3VsZCBjbGVhbnVwIGFsbCB0aGUgZ2wgdGV4dHVyZXMuXG4gICAgLy8gdGhpcy5fZ2xUZXh0dXJlcyA9IHt9O1xufTtcblxuLyoqXG4gKiBDaGFuZ2VzIHRoZSBzb3VyY2UgaW1hZ2Ugb2YgdGhlIHRleHR1cmUuXG4gKiBUaGUgb3JpZ2luYWwgc291cmNlIG11c3QgYmUgYW4gSW1hZ2UgZWxlbWVudC5cbiAqXG4gKiBAcGFyYW0gbmV3U3JjIHtzdHJpbmd9IHRoZSBwYXRoIG9mIHRoZSBpbWFnZVxuICovXG5CYXNlVGV4dHVyZS5wcm90b3R5cGUudXBkYXRlU291cmNlSW1hZ2UgPSBmdW5jdGlvbiAobmV3U3JjKVxue1xuICAgIHRoaXMuc291cmNlLnNyYyA9IG5ld1NyYztcblxuICAgIHRoaXMubG9hZFNvdXJjZSh0aGlzLnNvdXJjZSk7XG59O1xuXG4vKipcbiAqIEhlbHBlciBmdW5jdGlvbiB0aGF0IGNyZWF0ZXMgYSBiYXNlIHRleHR1cmUgZnJvbSB0aGUgZ2l2ZW4gaW1hZ2UgdXJsLlxuICogSWYgdGhlIGltYWdlIGlzIG5vdCBpbiB0aGUgYmFzZSB0ZXh0dXJlIGNhY2hlIGl0IHdpbGwgYmUgY3JlYXRlZCBhbmQgbG9hZGVkLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBwYXJhbSBpbWFnZVVybCB7c3RyaW5nfSBUaGUgaW1hZ2UgdXJsIG9mIHRoZSB0ZXh0dXJlXG4gKiBAcGFyYW0gW2Nyb3Nzb3JpZ2luPShhdXRvKV0ge2Jvb2xlYW59IFNob3VsZCB1c2UgYW5vbnltb3VzIENPUlM/IERlZmF1bHRzIHRvIHRydWUgaWYgdGhlIFVSTCBpcyBub3QgYSBkYXRhLVVSSS5cbiAqIEBwYXJhbSBbc2NhbGVNb2RlPVBJWEkuU0NBTEVfTU9ERVMuREVGQVVMVF0ge251bWJlcn0gU2VlIHtAbGluayBQSVhJLlNDQUxFX01PREVTfSBmb3IgcG9zc2libGUgdmFsdWVzXG4gKiBAcmV0dXJuIFBJWEkuQmFzZVRleHR1cmVcbiAqL1xuQmFzZVRleHR1cmUuZnJvbUltYWdlID0gZnVuY3Rpb24gKGltYWdlVXJsLCBjcm9zc29yaWdpbiwgc2NhbGVNb2RlKVxue1xuICAgIHZhciBiYXNlVGV4dHVyZSA9IHV0aWxzLkJhc2VUZXh0dXJlQ2FjaGVbaW1hZ2VVcmxdO1xuXG4gICAgaWYgKGNyb3Nzb3JpZ2luID09PSB1bmRlZmluZWQgJiYgaW1hZ2VVcmwuaW5kZXhPZignZGF0YTonKSAhPT0gMClcbiAgICB7XG4gICAgICAgIGNyb3Nzb3JpZ2luID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBpZiAoIWJhc2VUZXh0dXJlKVxuICAgIHtcbiAgICAgICAgLy8gbmV3IEltYWdlKCkgYnJlYWtzIHRleCBsb2FkaW5nIGluIHNvbWUgdmVyc2lvbnMgb2YgQ2hyb21lLlxuICAgICAgICAvLyBTZWUgaHR0cHM6Ly9jb2RlLmdvb2dsZS5jb20vcC9jaHJvbWl1bS9pc3N1ZXMvZGV0YWlsP2lkPTIzODA3MVxuICAgICAgICB2YXIgaW1hZ2UgPSBuZXcgSW1hZ2UoKTsvL2RvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2ltZycpO1xuICAgICAgICBpZiAoY3Jvc3NvcmlnaW4pXG4gICAgICAgIHtcbiAgICAgICAgICAgIGltYWdlLmNyb3NzT3JpZ2luID0gJyc7XG4gICAgICAgIH1cblxuICAgICAgICBiYXNlVGV4dHVyZSA9IG5ldyBCYXNlVGV4dHVyZShpbWFnZSwgc2NhbGVNb2RlKTtcbiAgICAgICAgYmFzZVRleHR1cmUuaW1hZ2VVcmwgPSBpbWFnZVVybDtcblxuICAgICAgICBpbWFnZS5zcmMgPSBpbWFnZVVybDtcblxuICAgICAgICB1dGlscy5CYXNlVGV4dHVyZUNhY2hlW2ltYWdlVXJsXSA9IGJhc2VUZXh0dXJlO1xuXG4gICAgICAgIC8vIGlmIHRoZXJlIGlzIGFuIEAyeCBhdCB0aGUgZW5kIG9mIHRoZSB1cmwgd2UgYXJlIGdvaW5nIHRvIGFzc3VtZSBpdHMgYSBoaWdocmVzIGltYWdlXG4gICAgICAgIGJhc2VUZXh0dXJlLnJlc29sdXRpb24gPSB1dGlscy5nZXRSZXNvbHV0aW9uT2ZVcmwoaW1hZ2VVcmwpO1xuICAgIH1cblxuICAgIHJldHVybiBiYXNlVGV4dHVyZTtcbn07XG5cbi8qKlxuICogSGVscGVyIGZ1bmN0aW9uIHRoYXQgY3JlYXRlcyBhIGJhc2UgdGV4dHVyZSBmcm9tIHRoZSBnaXZlbiBjYW52YXMgZWxlbWVudC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAcGFyYW0gY2FudmFzIHtDYW52YXN9IFRoZSBjYW52YXMgZWxlbWVudCBzb3VyY2Ugb2YgdGhlIHRleHR1cmVcbiAqIEBwYXJhbSBzY2FsZU1vZGUge251bWJlcn0gU2VlIHtAbGluayBQSVhJLlNDQUxFX01PREVTfSBmb3IgcG9zc2libGUgdmFsdWVzXG4gKiBAcmV0dXJuIFBJWEkuQmFzZVRleHR1cmVcbiAqL1xuQmFzZVRleHR1cmUuZnJvbUNhbnZhcyA9IGZ1bmN0aW9uIChjYW52YXMsIHNjYWxlTW9kZSlcbntcbiAgICBpZiAoIWNhbnZhcy5fcGl4aUlkKVxuICAgIHtcbiAgICAgICAgY2FudmFzLl9waXhpSWQgPSAnY2FudmFzXycgKyB1dGlscy51aWQoKTtcbiAgICB9XG5cbiAgICB2YXIgYmFzZVRleHR1cmUgPSB1dGlscy5CYXNlVGV4dHVyZUNhY2hlW2NhbnZhcy5fcGl4aUlkXTtcblxuICAgIGlmICghYmFzZVRleHR1cmUpXG4gICAge1xuICAgICAgICBiYXNlVGV4dHVyZSA9IG5ldyBCYXNlVGV4dHVyZShjYW52YXMsIHNjYWxlTW9kZSk7XG4gICAgICAgIHV0aWxzLkJhc2VUZXh0dXJlQ2FjaGVbY2FudmFzLl9waXhpSWRdID0gYmFzZVRleHR1cmU7XG4gICAgfVxuXG4gICAgcmV0dXJuIGJhc2VUZXh0dXJlO1xufTtcbiIsInZhciBCYXNlVGV4dHVyZSA9IHJlcXVpcmUoJy4vQmFzZVRleHR1cmUnKSxcbiAgICBUZXh0dXJlID0gcmVxdWlyZSgnLi9UZXh0dXJlJyksXG4gICAgUmVuZGVyVGFyZ2V0ID0gcmVxdWlyZSgnLi4vcmVuZGVyZXJzL3dlYmdsL3V0aWxzL1JlbmRlclRhcmdldCcpLFxuICAgIEZpbHRlck1hbmFnZXIgPSByZXF1aXJlKCcuLi9yZW5kZXJlcnMvd2ViZ2wvbWFuYWdlcnMvRmlsdGVyTWFuYWdlcicpLFxuICAgIENhbnZhc0J1ZmZlciA9IHJlcXVpcmUoJy4uL3JlbmRlcmVycy9jYW52YXMvdXRpbHMvQ2FudmFzQnVmZmVyJyksXG4gICAgbWF0aCA9IHJlcXVpcmUoJy4uL21hdGgnKSxcbiAgICBDT05TVCA9IHJlcXVpcmUoJy4uL2NvbnN0JyksXG4gICAgdGVtcE1hdHJpeCA9IG5ldyBtYXRoLk1hdHJpeCgpO1xuXG4vKipcbiAqIEEgUmVuZGVyVGV4dHVyZSBpcyBhIHNwZWNpYWwgdGV4dHVyZSB0aGF0IGFsbG93cyBhbnkgUGl4aSBkaXNwbGF5IG9iamVjdCB0byBiZSByZW5kZXJlZCB0byBpdC5cbiAqXG4gKiBfX0hpbnRfXzogQWxsIERpc3BsYXlPYmplY3RzIChpLmUuIFNwcml0ZXMpIHRoYXQgcmVuZGVyIHRvIGEgUmVuZGVyVGV4dHVyZSBzaG91bGQgYmUgcHJlbG9hZGVkXG4gKiBvdGhlcndpc2UgYmxhY2sgcmVjdGFuZ2xlcyB3aWxsIGJlIGRyYXduIGluc3RlYWQuXG4gKlxuICogQSBSZW5kZXJUZXh0dXJlIHRha2VzIGEgc25hcHNob3Qgb2YgYW55IERpc3BsYXkgT2JqZWN0IGdpdmVuIHRvIGl0cyByZW5kZXIgbWV0aG9kLiBUaGUgcG9zaXRpb25cbiAqIGFuZCByb3RhdGlvbiBvZiB0aGUgZ2l2ZW4gRGlzcGxheSBPYmplY3RzIGlzIGlnbm9yZWQuIEZvciBleGFtcGxlOlxuICpcbiAqIGBgYGpzXG4gKiB2YXIgcmVuZGVyZXIgPSBQSVhJLmF1dG9EZXRlY3RSZW5kZXJlcigxMDI0LCAxMDI0LCB7IHZpZXc6IGNhbnZhcywgcmF0aW86IDEgfSk7XG4gKiB2YXIgcmVuZGVyVGV4dHVyZSA9IG5ldyBQSVhJLlJlbmRlclRleHR1cmUocmVuZGVyZXIsIDgwMCwgNjAwKTtcbiAqIHZhciBzcHJpdGUgPSBQSVhJLlNwcml0ZS5mcm9tSW1hZ2UoXCJzcGluT2JqXzAxLnBuZ1wiKTtcbiAqXG4gKiBzcHJpdGUucG9zaXRpb24ueCA9IDgwMC8yO1xuICogc3ByaXRlLnBvc2l0aW9uLnkgPSA2MDAvMjtcbiAqIHNwcml0ZS5hbmNob3IueCA9IDAuNTtcbiAqIHNwcml0ZS5hbmNob3IueSA9IDAuNTtcbiAqXG4gKiByZW5kZXJUZXh0dXJlLnJlbmRlcihzcHJpdGUpO1xuICogYGBgXG4gKlxuICogVGhlIFNwcml0ZSBpbiB0aGlzIGNhc2Ugd2lsbCBiZSByZW5kZXJlZCB0byBhIHBvc2l0aW9uIG9mIDAsMC4gVG8gcmVuZGVyIHRoaXMgc3ByaXRlIGF0IGl0cyBhY3R1YWxcbiAqIHBvc2l0aW9uIGEgQ29udGFpbmVyIHNob3VsZCBiZSB1c2VkOlxuICpcbiAqIGBgYGpzXG4gKiB2YXIgZG9jID0gbmV3IFBJWEkuQ29udGFpbmVyKCk7XG4gKlxuICogZG9jLmFkZENoaWxkKHNwcml0ZSk7XG4gKlxuICogcmVuZGVyVGV4dHVyZS5yZW5kZXIoZG9jKTsgIC8vIFJlbmRlcnMgdG8gY2VudGVyIG9mIHJlbmRlclRleHR1cmVcbiAqIGBgYFxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5UZXh0dXJlXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLkNhbnZhc1JlbmRlcmVyfFBJWEkuV2ViR0xSZW5kZXJlcn0gVGhlIHJlbmRlcmVyIHVzZWQgZm9yIHRoaXMgUmVuZGVyVGV4dHVyZVxuICogQHBhcmFtIFt3aWR0aD0xMDBdIHtudW1iZXJ9IFRoZSB3aWR0aCBvZiB0aGUgcmVuZGVyIHRleHR1cmVcbiAqIEBwYXJhbSBbaGVpZ2h0PTEwMF0ge251bWJlcn0gVGhlIGhlaWdodCBvZiB0aGUgcmVuZGVyIHRleHR1cmVcbiAqIEBwYXJhbSBbc2NhbGVNb2RlXSB7bnVtYmVyfSBTZWUge0BsaW5rIFBJWEkuU0NBTEVfTU9ERVN9IGZvciBwb3NzaWJsZSB2YWx1ZXNcbiAqIEBwYXJhbSBbcmVzb2x1dGlvbj0xXSB7bnVtYmVyfSBUaGUgcmVzb2x1dGlvbiBvZiB0aGUgdGV4dHVyZSBiZWluZyBnZW5lcmF0ZWRcbiAqL1xuZnVuY3Rpb24gUmVuZGVyVGV4dHVyZShyZW5kZXJlciwgd2lkdGgsIGhlaWdodCwgc2NhbGVNb2RlLCByZXNvbHV0aW9uKVxue1xuICAgIGlmICghcmVuZGVyZXIpXG4gICAge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1VuYWJsZSB0byBjcmVhdGUgUmVuZGVyVGV4dHVyZSwgeW91IG11c3QgcGFzcyBhIHJlbmRlcmVyIGludG8gdGhlIGNvbnN0cnVjdG9yLicpO1xuICAgIH1cblxuICAgIHdpZHRoID0gd2lkdGggfHwgMTAwO1xuICAgIGhlaWdodCA9IGhlaWdodCB8fCAxMDA7XG4gICAgcmVzb2x1dGlvbiA9IHJlc29sdXRpb24gfHwgQ09OU1QuUkVTT0xVVElPTjtcblxuICAgIC8qKlxuICAgICAqIFRoZSBiYXNlIHRleHR1cmUgb2JqZWN0IHRoYXQgdGhpcyB0ZXh0dXJlIHVzZXNcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge0Jhc2VUZXh0dXJlfVxuICAgICAqL1xuICAgIHZhciBiYXNlVGV4dHVyZSA9IG5ldyBCYXNlVGV4dHVyZSgpO1xuICAgIGJhc2VUZXh0dXJlLndpZHRoID0gd2lkdGg7XG4gICAgYmFzZVRleHR1cmUuaGVpZ2h0ID0gaGVpZ2h0O1xuICAgIGJhc2VUZXh0dXJlLnJlc29sdXRpb24gPSByZXNvbHV0aW9uO1xuICAgIGJhc2VUZXh0dXJlLnNjYWxlTW9kZSA9IHNjYWxlTW9kZSB8fCBDT05TVC5TQ0FMRV9NT0RFUy5ERUZBVUxUO1xuICAgIGJhc2VUZXh0dXJlLmhhc0xvYWRlZCA9IHRydWU7XG5cblxuICAgIFRleHR1cmUuY2FsbCh0aGlzLFxuICAgICAgICBiYXNlVGV4dHVyZSxcbiAgICAgICAgbmV3IG1hdGguUmVjdGFuZ2xlKDAsIDAsIHdpZHRoLCBoZWlnaHQpXG4gICAgKTtcblxuXG4gICAgLyoqXG4gICAgICogVGhlIHdpdGggb2YgdGhlIHJlbmRlciB0ZXh0dXJlXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy53aWR0aCA9IHdpZHRoO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGhlaWdodCBvZiB0aGUgcmVuZGVyIHRleHR1cmVcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLmhlaWdodCA9IGhlaWdodDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBSZXNvbHV0aW9uIG9mIHRoZSB0ZXh0dXJlLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMucmVzb2x1dGlvbiA9IHJlc29sdXRpb247XG5cbiAgICAvKipcbiAgICAgKiBEcmF3L3JlbmRlciB0aGUgZ2l2ZW4gRGlzcGxheU9iamVjdCBvbnRvIHRoZSB0ZXh0dXJlLlxuICAgICAqXG4gICAgICogVGhlIGRpc3BsYXlPYmplY3QgYW5kIGRlc2NlbmRlbnRzIGFyZSB0cmFuc2Zvcm1lZCBkdXJpbmcgdGhpcyBvcGVyYXRpb24uXG4gICAgICogSWYgYHVwZGF0ZVRyYW5zZm9ybWAgaXMgdHJ1ZSB0aGVuIHRoZSB0cmFuc2Zvcm1hdGlvbnMgd2lsbCBiZSByZXN0b3JlZCBiZWZvcmUgdGhlXG4gICAgICogbWV0aG9kIHJldHVybnMuIE90aGVyd2lzZSBpdCBpcyB1cCB0byB0aGUgY2FsbGluZyBjb2RlIHRvIGNvcnJlY3RseSB1c2Ugb3IgcmVzZXRcbiAgICAgKiB0aGUgdHJhbnNmb3JtZWQgZGlzcGxheSBvYmplY3RzLlxuICAgICAqXG4gICAgICogVGhlIGRpc3BsYXkgb2JqZWN0IGlzIGFsd2F5cyByZW5kZXJlZCB3aXRoIGEgd29ybGRBbHBoYSB2YWx1ZSBvZiAxLlxuICAgICAqXG4gICAgICogQG1ldGhvZFxuICAgICAqIEBwYXJhbSBkaXNwbGF5T2JqZWN0IHtQSVhJLkRpc3BsYXlPYmplY3R9IFRoZSBkaXNwbGF5IG9iamVjdCB0byByZW5kZXIgdGhpcyB0ZXh0dXJlIG9uXG4gICAgICogQHBhcmFtIFttYXRyaXhdIHtQSVhJLk1hdHJpeH0gT3B0aW9uYWwgbWF0cml4IHRvIGFwcGx5IHRvIHRoZSBkaXNwbGF5IG9iamVjdCBiZWZvcmUgcmVuZGVyaW5nLlxuICAgICAqIEBwYXJhbSBbY2xlYXI9ZmFsc2VdIHtib29sZWFufSBJZiB0cnVlIHRoZSB0ZXh0dXJlIHdpbGwgYmUgY2xlYXJlZCBiZWZvcmUgdGhlIGRpc3BsYXlPYmplY3QgaXMgZHJhd25cbiAgICAgKiBAcGFyYW0gW3VwZGF0ZVRyYW5zZm9ybT10cnVlXSB7Ym9vbGVhbn0gSWYgdHJ1ZSB0aGUgZGlzcGxheU9iamVjdCdzIHdvcmxkVHJhbnNmb3JtL3dvcmxkQWxwaGEgYW5kIGFsbCBjaGlsZHJlblxuICAgICAqICB0cmFuc2Zvcm1hdGlvbnMgd2lsbCBiZSByZXN0b3JlZC4gTm90IHJlc3RvcmluZyB0aGlzIGluZm9ybWF0aW9uIHdpbGwgYmUgYSBsaXR0bGUgZmFzdGVyLlxuICAgICAqL1xuICAgIHRoaXMucmVuZGVyID0gbnVsbDtcblxuICAgIC8qKlxuICAgICAqIFRoZSByZW5kZXJlciB0aGlzIFJlbmRlclRleHR1cmUgdXNlcy4gQSBSZW5kZXJUZXh0dXJlIGNhbiBvbmx5IGJlbG9uZyB0byBvbmUgcmVuZGVyZXIgYXQgdGhlIG1vbWVudCBpZiBpdHMgd2ViR0wuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLkNhbnZhc1JlbmRlcmVyfFBJWEkuV2ViR0xSZW5kZXJlcn1cbiAgICAgKi9cbiAgICB0aGlzLnJlbmRlcmVyID0gcmVuZGVyZXI7XG5cbiAgICBpZiAodGhpcy5yZW5kZXJlci50eXBlID09PSBDT05TVC5SRU5ERVJFUl9UWVBFLldFQkdMKVxuICAgIHtcbiAgICAgICAgdmFyIGdsID0gdGhpcy5yZW5kZXJlci5nbDtcblxuICAgICAgICB0aGlzLnRleHR1cmVCdWZmZXIgPSBuZXcgUmVuZGVyVGFyZ2V0KGdsLCB0aGlzLndpZHRoLCB0aGlzLmhlaWdodCwgYmFzZVRleHR1cmUuc2NhbGVNb2RlLCB0aGlzLnJlc29sdXRpb24pOy8vLCB0aGlzLmJhc2VUZXh0dXJlLnNjYWxlTW9kZSk7XG4gICAgICAgIHRoaXMuYmFzZVRleHR1cmUuX2dsVGV4dHVyZXNbZ2wuaWRdID0gdGhpcy50ZXh0dXJlQnVmZmVyLnRleHR1cmU7XG5cbiAgICAgICAgLy9UT0RPIHJlZmFjdG9yIGZpbHRlciBtYW5hZ2VyLi4gYXMgcmVhbGx5IGl0cyBubyBsb25nZXIgYSBtYW5hZ2VyIGlmIHdlIHVzZSBpdCBoZXJlLi5cbiAgICAgICAgdGhpcy5maWx0ZXJNYW5hZ2VyID0gbmV3IEZpbHRlck1hbmFnZXIodGhpcy5yZW5kZXJlcik7XG4gICAgICAgIHRoaXMuZmlsdGVyTWFuYWdlci5vbkNvbnRleHRDaGFuZ2UoKTtcbiAgICAgICAgdGhpcy5maWx0ZXJNYW5hZ2VyLnJlc2l6ZSh3aWR0aCwgaGVpZ2h0KTtcbiAgICAgICAgdGhpcy5yZW5kZXIgPSB0aGlzLnJlbmRlcldlYkdMO1xuXG4gICAgICAgIC8vIHRoZSBjcmVhdGlvbiBvZiBhIGZpbHRlciBtYW5hZ2VyIHVuYmluZHMgdGhlIGJ1ZmZlcnMuLlxuICAgICAgICB0aGlzLnJlbmRlcmVyLmN1cnJlbnRSZW5kZXJlci5zdGFydCgpO1xuICAgICAgICB0aGlzLnJlbmRlcmVyLmN1cnJlbnRSZW5kZXJUYXJnZXQuYWN0aXZhdGUoKTtcbiAgICB9XG4gICAgZWxzZVxuICAgIHtcblxuICAgICAgICB0aGlzLnJlbmRlciA9IHRoaXMucmVuZGVyQ2FudmFzO1xuICAgICAgICB0aGlzLnRleHR1cmVCdWZmZXIgPSBuZXcgQ2FudmFzQnVmZmVyKHRoaXMud2lkdGgqIHRoaXMucmVzb2x1dGlvbiwgdGhpcy5oZWlnaHQqIHRoaXMucmVzb2x1dGlvbik7XG4gICAgICAgIHRoaXMuYmFzZVRleHR1cmUuc291cmNlID0gdGhpcy50ZXh0dXJlQnVmZmVyLmNhbnZhcztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqL1xuICAgIHRoaXMudmFsaWQgPSB0cnVlO1xuXG4gICAgdGhpcy5fdXBkYXRlVXZzKCk7XG59XG5cblJlbmRlclRleHR1cmUucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShUZXh0dXJlLnByb3RvdHlwZSk7XG5SZW5kZXJUZXh0dXJlLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFJlbmRlclRleHR1cmU7XG5tb2R1bGUuZXhwb3J0cyA9IFJlbmRlclRleHR1cmU7XG5cbi8qKlxuICogUmVzaXplcyB0aGUgUmVuZGVyVGV4dHVyZS5cbiAqXG4gKiBAcGFyYW0gd2lkdGgge251bWJlcn0gVGhlIHdpZHRoIHRvIHJlc2l6ZSB0by5cbiAqIEBwYXJhbSBoZWlnaHQge251bWJlcn0gVGhlIGhlaWdodCB0byByZXNpemUgdG8uXG4gKiBAcGFyYW0gdXBkYXRlQmFzZSB7Ym9vbGVhbn0gU2hvdWxkIHRoZSBiYXNlVGV4dHVyZS53aWR0aCBhbmQgaGVpZ2h0IHZhbHVlcyBiZSByZXNpemVkIGFzIHdlbGw/XG4gKi9cblJlbmRlclRleHR1cmUucHJvdG90eXBlLnJlc2l6ZSA9IGZ1bmN0aW9uICh3aWR0aCwgaGVpZ2h0LCB1cGRhdGVCYXNlKVxue1xuICAgIGlmICh3aWR0aCA9PT0gdGhpcy53aWR0aCAmJiBoZWlnaHQgPT09IHRoaXMuaGVpZ2h0KVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMudmFsaWQgPSAod2lkdGggPiAwICYmIGhlaWdodCA+IDApO1xuXG4gICAgdGhpcy53aWR0aCA9IHRoaXMuX2ZyYW1lLndpZHRoID0gdGhpcy5jcm9wLndpZHRoID0gd2lkdGg7XG4gICAgdGhpcy5oZWlnaHQgPSAgdGhpcy5fZnJhbWUuaGVpZ2h0ID0gdGhpcy5jcm9wLmhlaWdodCA9IGhlaWdodDtcblxuICAgIGlmICh1cGRhdGVCYXNlKVxuICAgIHtcbiAgICAgICAgdGhpcy5iYXNlVGV4dHVyZS53aWR0aCA9IHRoaXMud2lkdGg7XG4gICAgICAgIHRoaXMuYmFzZVRleHR1cmUuaGVpZ2h0ID0gdGhpcy5oZWlnaHQ7XG4gICAgfVxuXG4gICAgaWYgKCF0aGlzLnZhbGlkKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMudGV4dHVyZUJ1ZmZlci5yZXNpemUodGhpcy53aWR0aCwgdGhpcy5oZWlnaHQpO1xuXG4gICAgaWYodGhpcy5maWx0ZXJNYW5hZ2VyKVxuICAgIHtcbiAgICAgICAgdGhpcy5maWx0ZXJNYW5hZ2VyLnJlc2l6ZSh0aGlzLndpZHRoLCB0aGlzLmhlaWdodCk7XG4gICAgfVxufTtcblxuLyoqXG4gKiBDbGVhcnMgdGhlIFJlbmRlclRleHR1cmUuXG4gKlxuICovXG5SZW5kZXJUZXh0dXJlLnByb3RvdHlwZS5jbGVhciA9IGZ1bmN0aW9uICgpXG57XG4gICAgaWYgKCF0aGlzLnZhbGlkKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnJlbmRlcmVyLnR5cGUgPT09IENPTlNULlJFTkRFUkVSX1RZUEUuV0VCR0wpXG4gICAge1xuICAgICAgICB0aGlzLnJlbmRlcmVyLmdsLmJpbmRGcmFtZWJ1ZmZlcih0aGlzLnJlbmRlcmVyLmdsLkZSQU1FQlVGRkVSLCB0aGlzLnRleHR1cmVCdWZmZXIuZnJhbWVCdWZmZXIpO1xuICAgIH1cblxuICAgIHRoaXMudGV4dHVyZUJ1ZmZlci5jbGVhcigpO1xufTtcblxuLyoqXG4gKiBJbnRlcm5hbCBtZXRob2QgYXNzaWduZWQgdG8gdGhlIGByZW5kZXJgIHByb3BlcnR5IGlmIHVzaW5nIGEgQ2FudmFzUmVuZGVyZXIuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSBkaXNwbGF5T2JqZWN0IHtQSVhJLkRpc3BsYXlPYmplY3R9IFRoZSBkaXNwbGF5IG9iamVjdCB0byByZW5kZXIgdGhpcyB0ZXh0dXJlIG9uXG4gKiBAcGFyYW0gW21hdHJpeF0ge1BJWEkuTWF0cml4fSBPcHRpb25hbCBtYXRyaXggdG8gYXBwbHkgdG8gdGhlIGRpc3BsYXkgb2JqZWN0IGJlZm9yZSByZW5kZXJpbmcuXG4gKiBAcGFyYW0gW2NsZWFyPWZhbHNlXSB7Ym9vbGVhbn0gSWYgdHJ1ZSB0aGUgdGV4dHVyZSB3aWxsIGJlIGNsZWFyZWQgYmVmb3JlIHRoZSBkaXNwbGF5T2JqZWN0IGlzIGRyYXduXG4gKiBAcGFyYW0gW3VwZGF0ZVRyYW5zZm9ybT10cnVlXSB7Ym9vbGVhbn0gSWYgdHJ1ZSB0aGUgZGlzcGxheU9iamVjdCdzIHdvcmxkVHJhbnNmb3JtL3dvcmxkQWxwaGEgYW5kIGFsbCBjaGlsZHJlblxuICogIHRyYW5zZm9ybWF0aW9ucyB3aWxsIGJlIHJlc3RvcmVkLiBOb3QgcmVzdG9yaW5nIHRoaXMgaW5mb3JtYXRpb24gd2lsbCBiZSBhIGxpdHRsZSBmYXN0ZXIuXG4gKi9cblJlbmRlclRleHR1cmUucHJvdG90eXBlLnJlbmRlcldlYkdMID0gZnVuY3Rpb24gKGRpc3BsYXlPYmplY3QsIG1hdHJpeCwgY2xlYXIsIHVwZGF0ZVRyYW5zZm9ybSlcbntcbiAgICBpZiAoIXRoaXMudmFsaWQpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG5cbiAgICB1cGRhdGVUcmFuc2Zvcm0gPSAodXBkYXRlVHJhbnNmb3JtICE9PSB1bmRlZmluZWQpID8gdXBkYXRlVHJhbnNmb3JtIDogdHJ1ZTsvLyF1cGRhdGVUcmFuc2Zvcm07XG5cbiAgICB0aGlzLnRleHR1cmVCdWZmZXIudHJhbnNmb3JtID0gbWF0cml4O1xuXG4gICAgLy9UT0RPIG5vdCBhIGZhbiB0aGF0IHRoaXMgaXMgaGVyZS4uLiBpdCB3aWxsIG1vdmUhXG4gICAgdGhpcy50ZXh0dXJlQnVmZmVyLmFjdGl2YXRlKCk7XG5cbiAgICAvLyBzZXRXb3JsZCBBbHBoYSB0byBlbnN1cmUgdGhhdCB0aGUgb2JqZWN0IGlzIHJlbmRlcmVyIGF0IGZ1bGwgb3BhY2l0eVxuICAgIGRpc3BsYXlPYmplY3Qud29ybGRBbHBoYSA9IDE7XG5cbiAgICBpZiAodXBkYXRlVHJhbnNmb3JtKVxuICAgIHtcblxuICAgICAgICAvLyByZXNldCB0aGUgbWF0cml4IG9mIHRoZSBkaXNwbGF0eU9iamVjdC4uXG4gICAgICAgIGRpc3BsYXlPYmplY3Qud29ybGRUcmFuc2Zvcm0uaWRlbnRpdHkoKTtcblxuICAgICAgICBkaXNwbGF5T2JqZWN0LmN1cnJlbnRCb3VuZHMgPSBudWxsO1xuXG4gICAgICAgIC8vIFRpbWUgdG8gdXBkYXRlIGFsbCB0aGUgY2hpbGRyZW4gb2YgdGhlIGRpc3BsYXlPYmplY3Qgd2l0aCB0aGUgbmV3IG1hdHJpeC4uXG4gICAgICAgIHZhciBjaGlsZHJlbiA9IGRpc3BsYXlPYmplY3QuY2hpbGRyZW47XG4gICAgICAgIHZhciBpLCBqO1xuXG4gICAgICAgIGZvciAoaSA9IDAsIGogPSBjaGlsZHJlbi5sZW5ndGg7IGkgPCBqOyArK2kpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNoaWxkcmVuW2ldLnVwZGF0ZVRyYW5zZm9ybSgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy9UT0RPIHJlbmFtZSB0ZXh0dXJlQnVmZmVyIHRvIHJlbmRlclRhcmdldC4uXG4gICAgdmFyIHRlbXAgPSAgdGhpcy5yZW5kZXJlci5maWx0ZXJNYW5hZ2VyO1xuXG4gICAgdGhpcy5yZW5kZXJlci5maWx0ZXJNYW5hZ2VyID0gdGhpcy5maWx0ZXJNYW5hZ2VyO1xuICAgIHRoaXMucmVuZGVyZXIucmVuZGVyRGlzcGxheU9iamVjdChkaXNwbGF5T2JqZWN0LCB0aGlzLnRleHR1cmVCdWZmZXIsIGNsZWFyKTtcblxuICAgIHRoaXMucmVuZGVyZXIuZmlsdGVyTWFuYWdlciA9IHRlbXA7XG59O1xuXG5cbi8qKlxuICogSW50ZXJuYWwgbWV0aG9kIGFzc2lnbmVkIHRvIHRoZSBgcmVuZGVyYCBwcm9wZXJ0eSBpZiB1c2luZyBhIENhbnZhc1JlbmRlcmVyLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0gZGlzcGxheU9iamVjdCB7UElYSS5EaXNwbGF5T2JqZWN0fSBUaGUgZGlzcGxheSBvYmplY3QgdG8gcmVuZGVyIHRoaXMgdGV4dHVyZSBvblxuICogQHBhcmFtIFttYXRyaXhdIHtQSVhJLk1hdHJpeH0gT3B0aW9uYWwgbWF0cml4IHRvIGFwcGx5IHRvIHRoZSBkaXNwbGF5IG9iamVjdCBiZWZvcmUgcmVuZGVyaW5nLlxuICogQHBhcmFtIFtjbGVhcl0ge2Jvb2xlYW59IElmIHRydWUgdGhlIHRleHR1cmUgd2lsbCBiZSBjbGVhcmVkIGJlZm9yZSB0aGUgZGlzcGxheU9iamVjdCBpcyBkcmF3blxuICovXG5SZW5kZXJUZXh0dXJlLnByb3RvdHlwZS5yZW5kZXJDYW52YXMgPSBmdW5jdGlvbiAoZGlzcGxheU9iamVjdCwgbWF0cml4LCBjbGVhciwgdXBkYXRlVHJhbnNmb3JtKVxue1xuICAgIGlmICghdGhpcy52YWxpZClcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB1cGRhdGVUcmFuc2Zvcm0gPSAhIXVwZGF0ZVRyYW5zZm9ybTtcblxuICAgIHZhciB3dCA9IHRlbXBNYXRyaXg7XG5cbiAgICB3dC5pZGVudGl0eSgpO1xuXG4gICAgaWYgKG1hdHJpeClcbiAgICB7XG4gICAgICAgIHd0LmFwcGVuZChtYXRyaXgpO1xuICAgIH1cblxuICAgIHZhciBjYWNoZWRXdCA9IGRpc3BsYXlPYmplY3Qud29ybGRUcmFuc2Zvcm07XG4gICAgZGlzcGxheU9iamVjdC53b3JsZFRyYW5zZm9ybSA9IHd0O1xuXG4gICAgLy8gc2V0V29ybGQgQWxwaGEgdG8gZW5zdXJlIHRoYXQgdGhlIG9iamVjdCBpcyByZW5kZXJlciBhdCBmdWxsIG9wYWNpdHlcbiAgICBkaXNwbGF5T2JqZWN0LndvcmxkQWxwaGEgPSAxO1xuXG4gICAgLy8gVGltZSB0byB1cGRhdGUgYWxsIHRoZSBjaGlsZHJlbiBvZiB0aGUgZGlzcGxheU9iamVjdCB3aXRoIHRoZSBuZXcgbWF0cml4Li5cbiAgICB2YXIgY2hpbGRyZW4gPSBkaXNwbGF5T2JqZWN0LmNoaWxkcmVuO1xuICAgIHZhciBpLCBqO1xuXG4gICAgZm9yIChpID0gMCwgaiA9IGNoaWxkcmVuLmxlbmd0aDsgaSA8IGo7ICsraSlcbiAgICB7XG4gICAgICAgIGNoaWxkcmVuW2ldLnVwZGF0ZVRyYW5zZm9ybSgpO1xuICAgIH1cblxuICAgIGlmIChjbGVhcilcbiAgICB7XG4gICAgICAgIHRoaXMudGV4dHVyZUJ1ZmZlci5jbGVhcigpO1xuICAgIH1cblxuXG4vLyAgICB0aGlzLnRleHR1cmVCdWZmZXIuXG4gICAgdmFyIGNvbnRleHQgPSB0aGlzLnRleHR1cmVCdWZmZXIuY29udGV4dDtcblxuICAgIHZhciByZWFsUmVzb2x1dGlvbiA9IHRoaXMucmVuZGVyZXIucmVzb2x1dGlvbjtcblxuICAgIHRoaXMucmVuZGVyZXIucmVzb2x1dGlvbiA9IHRoaXMucmVzb2x1dGlvbjtcblxuICAgIHRoaXMucmVuZGVyZXIucmVuZGVyRGlzcGxheU9iamVjdChkaXNwbGF5T2JqZWN0LCBjb250ZXh0KTtcblxuICAgIHRoaXMucmVuZGVyZXIucmVzb2x1dGlvbiA9IHJlYWxSZXNvbHV0aW9uO1xuXG4gICAgaWYoZGlzcGxheU9iamVjdC53b3JsZFRyYW5zZm9ybSA9PT0gd3QpXG4gICAge1xuICAgICAgICAvLyBmaXhlcyBjYWNoZUFzQml0bWFwIEhhcHBlbmluZyBkdXJpbmcgdGhlIGFib3ZlLi5cbiAgICAgICAgZGlzcGxheU9iamVjdC53b3JsZFRyYW5zZm9ybSA9IGNhY2hlZFd0O1xuICAgIH1cblxufTtcblxuLyoqXG4gKiBEZXN0cm95cyB0aGlzIHRleHR1cmVcbiAqXG4gKiBAcGFyYW0gZGVzdHJveUJhc2Uge2Jvb2xlYW59IFdoZXRoZXIgdG8gZGVzdHJveSB0aGUgYmFzZSB0ZXh0dXJlIGFzIHdlbGxcbiAqL1xuUmVuZGVyVGV4dHVyZS5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uICgpXG57XG4gICAgVGV4dHVyZS5wcm90b3R5cGUuZGVzdHJveS5jYWxsKHRoaXMsIHRydWUpO1xuXG4gICAgdGhpcy50ZXh0dXJlQnVmZmVyLmRlc3Ryb3koKTtcblxuICAgIC8vIGRlc3Ryb3kgdGhlIGZpbHRlcm1hbmFnZXIuLlxuICAgIGlmKHRoaXMuZmlsdGVyTWFuYWdlcilcbiAgICB7XG4gICAgICAgIHRoaXMuZmlsdGVyTWFuYWdlci5kZXN0cm95KCk7XG4gICAgfVxuXG4gICAgdGhpcy5yZW5kZXJlciA9IG51bGw7XG59O1xuXG4vKipcbiAqIFdpbGwgcmV0dXJuIGEgSFRNTCBJbWFnZSBvZiB0aGUgdGV4dHVyZVxuICpcbiAqIEByZXR1cm4ge0ltYWdlfVxuICovXG5SZW5kZXJUZXh0dXJlLnByb3RvdHlwZS5nZXRJbWFnZSA9IGZ1bmN0aW9uICgpXG57XG4gICAgdmFyIGltYWdlID0gbmV3IEltYWdlKCk7XG4gICAgaW1hZ2Uuc3JjID0gdGhpcy5nZXRCYXNlNjQoKTtcbiAgICByZXR1cm4gaW1hZ2U7XG59O1xuXG4vKipcbiAqIFdpbGwgcmV0dXJuIGEgYSBiYXNlNjQgZW5jb2RlZCBzdHJpbmcgb2YgdGhpcyB0ZXh0dXJlLiBJdCB3b3JrcyBieSBjYWxsaW5nIFJlbmRlclRleHR1cmUuZ2V0Q2FudmFzIGFuZCB0aGVuIHJ1bm5pbmcgdG9EYXRhVVJMIG9uIHRoYXQuXG4gKlxuICogQHJldHVybiB7c3RyaW5nfSBBIGJhc2U2NCBlbmNvZGVkIHN0cmluZyBvZiB0aGUgdGV4dHVyZS5cbiAqL1xuUmVuZGVyVGV4dHVyZS5wcm90b3R5cGUuZ2V0QmFzZTY0ID0gZnVuY3Rpb24gKClcbntcbiAgICByZXR1cm4gdGhpcy5nZXRDYW52YXMoKS50b0RhdGFVUkwoKTtcbn07XG5cbi8qKlxuICogQ3JlYXRlcyBhIENhbnZhcyBlbGVtZW50LCByZW5kZXJzIHRoaXMgUmVuZGVyVGV4dHVyZSB0byBpdCBhbmQgdGhlbiByZXR1cm5zIGl0LlxuICpcbiAqIEByZXR1cm4ge0hUTUxDYW52YXNFbGVtZW50fSBBIENhbnZhcyBlbGVtZW50IHdpdGggdGhlIHRleHR1cmUgcmVuZGVyZWQgb24uXG4gKi9cblJlbmRlclRleHR1cmUucHJvdG90eXBlLmdldENhbnZhcyA9IGZ1bmN0aW9uICgpXG57XG4gICAgaWYgKHRoaXMucmVuZGVyZXIudHlwZSA9PT0gQ09OU1QuUkVOREVSRVJfVFlQRS5XRUJHTClcbiAgICB7XG4gICAgICAgIHZhciBnbCA9IHRoaXMucmVuZGVyZXIuZ2w7XG4gICAgICAgIHZhciB3aWR0aCA9IHRoaXMudGV4dHVyZUJ1ZmZlci5zaXplLndpZHRoO1xuICAgICAgICB2YXIgaGVpZ2h0ID0gdGhpcy50ZXh0dXJlQnVmZmVyLnNpemUuaGVpZ2h0O1xuXG4gICAgICAgIHZhciB3ZWJHTFBpeGVscyA9IG5ldyBVaW50OEFycmF5KDQgKiB3aWR0aCAqIGhlaWdodCk7XG5cbiAgICAgICAgZ2wuYmluZEZyYW1lYnVmZmVyKGdsLkZSQU1FQlVGRkVSLCB0aGlzLnRleHR1cmVCdWZmZXIuZnJhbWVCdWZmZXIpO1xuICAgICAgICBnbC5yZWFkUGl4ZWxzKDAsIDAsIHdpZHRoLCBoZWlnaHQsIGdsLlJHQkEsIGdsLlVOU0lHTkVEX0JZVEUsIHdlYkdMUGl4ZWxzKTtcbiAgICAgICAgZ2wuYmluZEZyYW1lYnVmZmVyKGdsLkZSQU1FQlVGRkVSLCBudWxsKTtcblxuICAgICAgICB2YXIgdGVtcENhbnZhcyA9IG5ldyBDYW52YXNCdWZmZXIod2lkdGgsIGhlaWdodCk7XG4gICAgICAgIHZhciBjYW52YXNEYXRhID0gdGVtcENhbnZhcy5jb250ZXh0LmdldEltYWdlRGF0YSgwLCAwLCB3aWR0aCwgaGVpZ2h0KTtcbiAgICAgICAgY2FudmFzRGF0YS5kYXRhLnNldCh3ZWJHTFBpeGVscyk7XG5cbiAgICAgICAgdGVtcENhbnZhcy5jb250ZXh0LnB1dEltYWdlRGF0YShjYW52YXNEYXRhLCAwLCAwKTtcblxuICAgICAgICByZXR1cm4gdGVtcENhbnZhcy5jYW52YXM7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHJldHVybiB0aGlzLnRleHR1cmVCdWZmZXIuY2FudmFzO1xuICAgIH1cbn07XG5cbi8qKlxuICogV2lsbCByZXR1cm4gYSBvbmUtZGltZW5zaW9uYWwgYXJyYXkgY29udGFpbmluZyB0aGUgcGl4ZWwgZGF0YSBvZiB0aGUgZW50aXJlIHRleHR1cmUgaW4gUkdCQSBvcmRlciwgd2l0aCBpbnRlZ2VyIHZhbHVlcyBiZXR3ZWVuIDAgYW5kIDI1NSAoaW5jbHVkZWQpLlxuICpcbiAqIEByZXR1cm4ge1VpbnQ4Q2xhbXBlZEFycmF5fVxuICovXG5SZW5kZXJUZXh0dXJlLnByb3RvdHlwZS5nZXRQaXhlbHMgPSBmdW5jdGlvbiAoKVxue1xuICAgIHZhciB3aWR0aCwgaGVpZ2h0O1xuXG4gICAgaWYgKHRoaXMucmVuZGVyZXIudHlwZSA9PT0gQ09OU1QuUkVOREVSRVJfVFlQRS5XRUJHTClcbiAgICB7XG4gICAgICAgIHZhciBnbCA9IHRoaXMucmVuZGVyZXIuZ2w7XG4gICAgICAgIHdpZHRoID0gdGhpcy50ZXh0dXJlQnVmZmVyLnNpemUud2lkdGg7XG4gICAgICAgIGhlaWdodCA9IHRoaXMudGV4dHVyZUJ1ZmZlci5zaXplLmhlaWdodDtcblxuICAgICAgICB2YXIgd2ViR0xQaXhlbHMgPSBuZXcgVWludDhBcnJheSg0ICogd2lkdGggKiBoZWlnaHQpO1xuXG4gICAgICAgIGdsLmJpbmRGcmFtZWJ1ZmZlcihnbC5GUkFNRUJVRkZFUiwgdGhpcy50ZXh0dXJlQnVmZmVyLmZyYW1lQnVmZmVyKTtcbiAgICAgICAgZ2wucmVhZFBpeGVscygwLCAwLCB3aWR0aCwgaGVpZ2h0LCBnbC5SR0JBLCBnbC5VTlNJR05FRF9CWVRFLCB3ZWJHTFBpeGVscyk7XG4gICAgICAgIGdsLmJpbmRGcmFtZWJ1ZmZlcihnbC5GUkFNRUJVRkZFUiwgbnVsbCk7XG5cbiAgICAgICAgcmV0dXJuIHdlYkdMUGl4ZWxzO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICB3aWR0aCA9IHRoaXMudGV4dHVyZUJ1ZmZlci5jYW52YXMud2lkdGg7XG4gICAgICAgIGhlaWdodCA9IHRoaXMudGV4dHVyZUJ1ZmZlci5jYW52YXMuaGVpZ2h0O1xuXG4gICAgICAgIHJldHVybiB0aGlzLnRleHR1cmVCdWZmZXIuY2FudmFzLmdldENvbnRleHQoJzJkJykuZ2V0SW1hZ2VEYXRhKDAsIDAsIHdpZHRoLCBoZWlnaHQpLmRhdGE7XG4gICAgfVxufTtcblxuLyoqXG4gKiBXaWxsIHJldHVybiBhIG9uZS1kaW1lbnNpb25hbCBhcnJheSBjb250YWluaW5nIHRoZSBwaXhlbCBkYXRhIG9mIGEgcGl4ZWwgd2l0aGluIHRoZSB0ZXh0dXJlIGluIFJHQkEgb3JkZXIsIHdpdGggaW50ZWdlciB2YWx1ZXMgYmV0d2VlbiAwIGFuZCAyNTUgKGluY2x1ZGVkKS5cbiAqXG4gKiBAcGFyYW0geCB7bnVtYmVyfSBUaGUgeCBjb29yZGluYXRlIG9mIHRoZSBwaXhlbCB0byByZXRyaWV2ZS5cbiAqIEBwYXJhbSB5IHtudW1iZXJ9IFRoZSB5IGNvb3JkaW5hdGUgb2YgdGhlIHBpeGVsIHRvIHJldHJpZXZlLlxuICogQHJldHVybiB7VWludDhDbGFtcGVkQXJyYXl9XG4gKi9cblJlbmRlclRleHR1cmUucHJvdG90eXBlLmdldFBpeGVsID0gZnVuY3Rpb24gKHgsIHkpXG57XG4gICAgaWYgKHRoaXMucmVuZGVyZXIudHlwZSA9PT0gQ09OU1QuUkVOREVSRVJfVFlQRS5XRUJHTClcbiAgICB7XG4gICAgICAgIHZhciBnbCA9IHRoaXMucmVuZGVyZXIuZ2w7XG5cbiAgICAgICAgdmFyIHdlYkdMUGl4ZWxzID0gbmV3IFVpbnQ4QXJyYXkoNCk7XG5cbiAgICAgICAgZ2wuYmluZEZyYW1lYnVmZmVyKGdsLkZSQU1FQlVGRkVSLCB0aGlzLnRleHR1cmVCdWZmZXIuZnJhbWVCdWZmZXIpO1xuICAgICAgICBnbC5yZWFkUGl4ZWxzKHgsIHksIDEsIDEsIGdsLlJHQkEsIGdsLlVOU0lHTkVEX0JZVEUsIHdlYkdMUGl4ZWxzKTtcbiAgICAgICAgZ2wuYmluZEZyYW1lYnVmZmVyKGdsLkZSQU1FQlVGRkVSLCBudWxsKTtcblxuICAgICAgICByZXR1cm4gd2ViR0xQaXhlbHM7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHJldHVybiB0aGlzLnRleHR1cmVCdWZmZXIuY2FudmFzLmdldENvbnRleHQoJzJkJykuZ2V0SW1hZ2VEYXRhKHgsIHksIDEsIDEpLmRhdGE7XG4gICAgfVxufTtcbiIsInZhciBCYXNlVGV4dHVyZSA9IHJlcXVpcmUoJy4vQmFzZVRleHR1cmUnKSxcbiAgICBWaWRlb0Jhc2VUZXh0dXJlID0gcmVxdWlyZSgnLi9WaWRlb0Jhc2VUZXh0dXJlJyksXG4gICAgVGV4dHVyZVV2cyA9IHJlcXVpcmUoJy4vVGV4dHVyZVV2cycpLFxuICAgIEV2ZW50RW1pdHRlciA9IHJlcXVpcmUoJ2V2ZW50ZW1pdHRlcjMnKSxcbiAgICBtYXRoID0gcmVxdWlyZSgnLi4vbWF0aCcpLFxuICAgIHV0aWxzID0gcmVxdWlyZSgnLi4vdXRpbHMnKTtcblxuLyoqXG4gKiBBIHRleHR1cmUgc3RvcmVzIHRoZSBpbmZvcm1hdGlvbiB0aGF0IHJlcHJlc2VudHMgYW4gaW1hZ2Ugb3IgcGFydCBvZiBhbiBpbWFnZS4gSXQgY2Fubm90IGJlIGFkZGVkXG4gKiB0byB0aGUgZGlzcGxheSBsaXN0IGRpcmVjdGx5LiBJbnN0ZWFkIHVzZSBpdCBhcyB0aGUgdGV4dHVyZSBmb3IgYSBTcHJpdGUuIElmIG5vIGZyYW1lIGlzIHByb3ZpZGVkIHRoZW4gdGhlIHdob2xlIGltYWdlIGlzIHVzZWQuXG4gKlxuICogWW91IGNhbiBkaXJlY3RseSBjcmVhdGUgYSB0ZXh0dXJlIGZyb20gYW4gaW1hZ2UgYW5kIHRoZW4gcmV1c2UgaXQgbXVsdGlwbGUgdGltZXMgbGlrZSB0aGlzIDpcbiAqXG4gKiBgYGBqc1xuICogdmFyIHRleHR1cmUgPSBQSVhJLlRleHR1cmUuZnJvbUltYWdlKCdhc3NldHMvaW1hZ2UucG5nJyk7XG4gKiB2YXIgc3ByaXRlMSA9IG5ldyBQSVhJLlNwcml0ZSh0ZXh0dXJlKTtcbiAqIHZhciBzcHJpdGUyID0gbmV3IFBJWEkuU3ByaXRlKHRleHR1cmUpO1xuICogYGBgXG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIGJhc2VUZXh0dXJlIHtQSVhJLkJhc2VUZXh0dXJlfSBUaGUgYmFzZSB0ZXh0dXJlIHNvdXJjZSB0byBjcmVhdGUgdGhlIHRleHR1cmUgZnJvbVxuICogQHBhcmFtIFtmcmFtZV0ge1BJWEkuUmVjdGFuZ2xlfSBUaGUgcmVjdGFuZ2xlIGZyYW1lIG9mIHRoZSB0ZXh0dXJlIHRvIHNob3dcbiAqIEBwYXJhbSBbY3JvcF0ge1BJWEkuUmVjdGFuZ2xlfSBUaGUgYXJlYSBvZiBvcmlnaW5hbCB0ZXh0dXJlXG4gKiBAcGFyYW0gW3RyaW1dIHtQSVhJLlJlY3RhbmdsZX0gVHJpbW1lZCB0ZXh0dXJlIHJlY3RhbmdsZVxuICogQHBhcmFtIFtyb3RhdGVdIHtib29sZWFufSBpbmRpY2F0ZXMgd2hldGhlciB0aGUgdGV4dHVyZSBzaG91bGQgYmUgcm90YXRlZCBieSA5MCBkZWdyZWVzICggdXNlZCBieSB0ZXh0dXJlIHBhY2tlciApXG4gKi9cbmZ1bmN0aW9uIFRleHR1cmUoYmFzZVRleHR1cmUsIGZyYW1lLCBjcm9wLCB0cmltLCByb3RhdGUpXG57XG4gICAgRXZlbnRFbWl0dGVyLmNhbGwodGhpcyk7XG5cbiAgICAvKipcbiAgICAgKiBEb2VzIHRoaXMgVGV4dHVyZSBoYXZlIGFueSBmcmFtZSBkYXRhIGFzc2lnbmVkIHRvIGl0P1xuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKi9cbiAgICB0aGlzLm5vRnJhbWUgPSBmYWxzZTtcblxuICAgIGlmICghZnJhbWUpXG4gICAge1xuICAgICAgICB0aGlzLm5vRnJhbWUgPSB0cnVlO1xuICAgICAgICBmcmFtZSA9IG5ldyBtYXRoLlJlY3RhbmdsZSgwLCAwLCAxLCAxKTtcbiAgICB9XG5cbiAgICBpZiAoYmFzZVRleHR1cmUgaW5zdGFuY2VvZiBUZXh0dXJlKVxuICAgIHtcbiAgICAgICAgYmFzZVRleHR1cmUgPSBiYXNlVGV4dHVyZS5iYXNlVGV4dHVyZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYmFzZSB0ZXh0dXJlIHRoYXQgdGhpcyB0ZXh0dXJlIHVzZXMuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLkJhc2VUZXh0dXJlfVxuICAgICAqL1xuICAgIHRoaXMuYmFzZVRleHR1cmUgPSBiYXNlVGV4dHVyZTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBmcmFtZSBzcGVjaWZpZXMgdGhlIHJlZ2lvbiBvZiB0aGUgYmFzZSB0ZXh0dXJlIHRoYXQgdGhpcyB0ZXh0dXJlIHVzZXNcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuUmVjdGFuZ2xlfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fZnJhbWUgPSBmcmFtZTtcblxuICAgIC8qKlxuICAgICAqIFRoZSB0ZXh0dXJlIHRyaW0gZGF0YS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuUmVjdGFuZ2xlfVxuICAgICAqL1xuICAgIHRoaXMudHJpbSA9IHRyaW07XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIHdpbGwgbGV0IHRoZSByZW5kZXJlciBrbm93IGlmIHRoZSB0ZXh0dXJlIGlzIHZhbGlkLiBJZiBpdCdzIG5vdCB0aGVuIGl0IGNhbm5vdCBiZSByZW5kZXJlZC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICovXG4gICAgdGhpcy52YWxpZCA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogVGhpcyB3aWxsIGxldCBhIHJlbmRlcmVyIGtub3cgdGhhdCBhIHRleHR1cmUgaGFzIGJlZW4gdXBkYXRlZCAodXNlZCBtYWlubHkgZm9yIHdlYkdMIHV2IHVwZGF0ZXMpXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqL1xuICAgIHRoaXMucmVxdWlyZXNVcGRhdGUgPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBXZWJHTCBVViBkYXRhIGNhY2hlLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5UZXh0dXJlVXZzfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fdXZzID0gbnVsbDtcblxuICAgIC8qKlxuICAgICAqIFRoZSB3aWR0aCBvZiB0aGUgVGV4dHVyZSBpbiBwaXhlbHMuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy53aWR0aCA9IDA7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgaGVpZ2h0IG9mIHRoZSBUZXh0dXJlIGluIHBpeGVscy5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLmhlaWdodCA9IDA7XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIGlzIHRoZSBhcmVhIG9mIHRoZSBCYXNlVGV4dHVyZSBpbWFnZSB0byBhY3R1YWxseSBjb3B5IHRvIHRoZSBDYW52YXMgLyBXZWJHTCB3aGVuIHJlbmRlcmluZyxcbiAgICAgKiBpcnJlc3BlY3RpdmUgb2YgdGhlIGFjdHVhbCBmcmFtZSBzaXplIG9yIHBsYWNlbWVudCAod2hpY2ggY2FuIGJlIGluZmx1ZW5jZWQgYnkgdHJpbW1lZCB0ZXh0dXJlIGF0bGFzZXMpXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlJlY3RhbmdsZX1cbiAgICAgKi9cbiAgICB0aGlzLmNyb3AgPSBjcm9wIHx8IGZyYW1lOy8vbmV3IG1hdGguUmVjdGFuZ2xlKDAsIDAsIDEsIDEpO1xuXG4gICAgLyoqXG4gICAgICogSW5kaWNhdGVzIHdoZXRoZXIgdGhlIHRleHR1cmUgc2hvdWxkIGJlIHJvdGF0ZWQgYnkgOTAgZGVncmVlc1xuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqL1xuICAgIHRoaXMucm90YXRlID0gISFyb3RhdGU7XG5cbiAgICBpZiAoYmFzZVRleHR1cmUuaGFzTG9hZGVkKVxuICAgIHtcbiAgICAgICAgaWYgKHRoaXMubm9GcmFtZSlcbiAgICAgICAge1xuICAgICAgICAgICAgZnJhbWUgPSBuZXcgbWF0aC5SZWN0YW5nbGUoMCwgMCwgYmFzZVRleHR1cmUud2lkdGgsIGJhc2VUZXh0dXJlLmhlaWdodCk7XG5cbiAgICAgICAgICAgIC8vIGlmIHRoZXJlIGlzIG5vIGZyYW1lIHdlIHNob3VsZCBtb25pdG9yIGZvciBhbnkgYmFzZSB0ZXh0dXJlIGNoYW5nZXMuLlxuICAgICAgICAgICAgYmFzZVRleHR1cmUub24oJ3VwZGF0ZScsIHRoaXMub25CYXNlVGV4dHVyZVVwZGF0ZWQsIHRoaXMpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZnJhbWUgPSBmcmFtZTtcbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgYmFzZVRleHR1cmUub25jZSgnbG9hZGVkJywgdGhpcy5vbkJhc2VUZXh0dXJlTG9hZGVkLCB0aGlzKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBGaXJlZCB3aGVuIHRoZSB0ZXh0dXJlIGlzIHVwZGF0ZWQuIFRoaXMgaGFwcGVucyBpZiB0aGUgZnJhbWUgb3IgdGhlIGJhc2VUZXh0dXJlIGlzIHVwZGF0ZWQuXG4gICAgICpcbiAgICAgKiBAZXZlbnQgdXBkYXRlXG4gICAgICogQG1lbWJlcm9mIFBJWEkuVGV4dHVyZSNcbiAgICAgKiBAcHJvdGVjdGVkXG4gICAgICovXG59XG5cblRleHR1cmUucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShFdmVudEVtaXR0ZXIucHJvdG90eXBlKTtcblRleHR1cmUucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gVGV4dHVyZTtcbm1vZHVsZS5leHBvcnRzID0gVGV4dHVyZTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoVGV4dHVyZS5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBUaGUgZnJhbWUgc3BlY2lmaWVzIHRoZSByZWdpb24gb2YgdGhlIGJhc2UgdGV4dHVyZSB0aGF0IHRoaXMgdGV4dHVyZSB1c2VzLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5SZWN0YW5nbGV9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuVGV4dHVyZSNcbiAgICAgKi9cbiAgICBmcmFtZToge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9mcmFtZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAoZnJhbWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuX2ZyYW1lID0gZnJhbWU7XG5cbiAgICAgICAgICAgIHRoaXMubm9GcmFtZSA9IGZhbHNlO1xuXG4gICAgICAgICAgICB0aGlzLndpZHRoID0gZnJhbWUud2lkdGg7XG4gICAgICAgICAgICB0aGlzLmhlaWdodCA9IGZyYW1lLmhlaWdodDtcblxuICAgICAgICAgICAgaWYgKCF0aGlzLnRyaW0gJiYgIXRoaXMucm90YXRlICYmIChmcmFtZS54ICsgZnJhbWUud2lkdGggPiB0aGlzLmJhc2VUZXh0dXJlLndpZHRoIHx8IGZyYW1lLnkgKyBmcmFtZS5oZWlnaHQgPiB0aGlzLmJhc2VUZXh0dXJlLmhlaWdodCkpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdUZXh0dXJlIEVycm9yOiBmcmFtZSBkb2VzIG5vdCBmaXQgaW5zaWRlIHRoZSBiYXNlIFRleHR1cmUgZGltZW5zaW9ucyAnICsgdGhpcyk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vdGhpcy52YWxpZCA9IGZyYW1lICYmIGZyYW1lLndpZHRoICYmIGZyYW1lLmhlaWdodCAmJiB0aGlzLmJhc2VUZXh0dXJlLnNvdXJjZSAmJiB0aGlzLmJhc2VUZXh0dXJlLmhhc0xvYWRlZDtcbiAgICAgICAgICAgIHRoaXMudmFsaWQgPSBmcmFtZSAmJiBmcmFtZS53aWR0aCAmJiBmcmFtZS5oZWlnaHQgJiYgdGhpcy5iYXNlVGV4dHVyZS5oYXNMb2FkZWQ7XG5cbiAgICAgICAgICAgIGlmICh0aGlzLnRyaW0pXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdGhpcy53aWR0aCA9IHRoaXMudHJpbS53aWR0aDtcbiAgICAgICAgICAgICAgICB0aGlzLmhlaWdodCA9IHRoaXMudHJpbS5oZWlnaHQ7XG4gICAgICAgICAgICAgICAgdGhpcy5fZnJhbWUud2lkdGggPSB0aGlzLnRyaW0ud2lkdGg7XG4gICAgICAgICAgICAgICAgdGhpcy5fZnJhbWUuaGVpZ2h0ID0gdGhpcy50cmltLmhlaWdodDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB0aGlzLmNyb3AgPSBmcmFtZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHRoaXMudmFsaWQpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdGhpcy5fdXBkYXRlVXZzKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG59KTtcblxuLyoqXG4gKiBVcGRhdGVzIHRoaXMgdGV4dHVyZSBvbiB0aGUgZ3B1LlxuICpcbiAqL1xuVGV4dHVyZS5wcm90b3R5cGUudXBkYXRlID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLmJhc2VUZXh0dXJlLnVwZGF0ZSgpO1xufTtcblxuLyoqXG4gKiBDYWxsZWQgd2hlbiB0aGUgYmFzZSB0ZXh0dXJlIGlzIGxvYWRlZFxuICpcbiAqIEBwcml2YXRlXG4gKi9cblRleHR1cmUucHJvdG90eXBlLm9uQmFzZVRleHR1cmVMb2FkZWQgPSBmdW5jdGlvbiAoYmFzZVRleHR1cmUpXG57XG4gICAgLy8gVE9ETyB0aGlzIGNvZGUgbG9va3MgY29uZnVzaW5nLi4gYm9vIHRvIGFidXNpbmcgZ2V0dGVycyBhbmQgc2V0dGVyc3MhXG4gICAgaWYgKHRoaXMubm9GcmFtZSlcbiAgICB7XG4gICAgICAgIHRoaXMuZnJhbWUgPSBuZXcgbWF0aC5SZWN0YW5nbGUoMCwgMCwgYmFzZVRleHR1cmUud2lkdGgsIGJhc2VUZXh0dXJlLmhlaWdodCk7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHRoaXMuZnJhbWUgPSB0aGlzLl9mcmFtZTtcbiAgICB9XG5cbiAgICB0aGlzLmVtaXQoJ3VwZGF0ZScsIHRoaXMpO1xufTtcblxuLyoqXG4gKiBDYWxsZWQgd2hlbiB0aGUgYmFzZSB0ZXh0dXJlIGlzIHVwZGF0ZWRcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5UZXh0dXJlLnByb3RvdHlwZS5vbkJhc2VUZXh0dXJlVXBkYXRlZCA9IGZ1bmN0aW9uIChiYXNlVGV4dHVyZSlcbntcbiAgICB0aGlzLl9mcmFtZS53aWR0aCA9IGJhc2VUZXh0dXJlLndpZHRoO1xuICAgIHRoaXMuX2ZyYW1lLmhlaWdodCA9IGJhc2VUZXh0dXJlLmhlaWdodDtcblxuICAgIHRoaXMuZW1pdCgndXBkYXRlJywgdGhpcyk7XG59O1xuXG4vKipcbiAqIERlc3Ryb3lzIHRoaXMgdGV4dHVyZVxuICpcbiAqIEBwYXJhbSBbZGVzdHJveUJhc2U9ZmFsc2VdIHtib29sZWFufSBXaGV0aGVyIHRvIGRlc3Ryb3kgdGhlIGJhc2UgdGV4dHVyZSBhcyB3ZWxsXG4gKi9cblRleHR1cmUucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoZGVzdHJveUJhc2UpXG57XG4gICAgaWYgKHRoaXMuYmFzZVRleHR1cmUpXG4gICAge1xuICAgICAgICBpZiAoZGVzdHJveUJhc2UpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuYmFzZVRleHR1cmUuZGVzdHJveSgpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5iYXNlVGV4dHVyZS5vZmYoJ3VwZGF0ZScsIHRoaXMub25CYXNlVGV4dHVyZVVwZGF0ZWQsIHRoaXMpO1xuICAgICAgICB0aGlzLmJhc2VUZXh0dXJlLm9mZignbG9hZGVkJywgdGhpcy5vbkJhc2VUZXh0dXJlTG9hZGVkLCB0aGlzKTtcblxuICAgICAgICB0aGlzLmJhc2VUZXh0dXJlID0gbnVsbDtcbiAgICB9XG5cbiAgICB0aGlzLl9mcmFtZSA9IG51bGw7XG4gICAgdGhpcy5fdXZzID0gbnVsbDtcbiAgICB0aGlzLnRyaW0gPSBudWxsO1xuICAgIHRoaXMuY3JvcCA9IG51bGw7XG5cbiAgICB0aGlzLnZhbGlkID0gZmFsc2U7XG5cbiAgICB0aGlzLm9mZignZGlzcG9zZScsIHRoaXMuZGlzcG9zZSwgdGhpcyk7XG4gICAgdGhpcy5vZmYoJ3VwZGF0ZScsIHRoaXMudXBkYXRlLCB0aGlzKTtcbn07XG5cbi8qKlxuICogQ3JlYXRlcyBhIG5ldyB0ZXh0dXJlIG9iamVjdCB0aGF0IGFjdHMgdGhlIHNhbWUgYXMgdGhpcyBvbmUuXG4gKlxuICogQHJldHVybiB7UElYSS5UZXh0dXJlfVxuICovXG5UZXh0dXJlLnByb3RvdHlwZS5jbG9uZSA9IGZ1bmN0aW9uICgpXG57XG4gICAgcmV0dXJuIG5ldyBUZXh0dXJlKHRoaXMuYmFzZVRleHR1cmUsIHRoaXMuZnJhbWUsIHRoaXMuY3JvcCwgdGhpcy50cmltLCB0aGlzLnJvdGF0ZSk7XG59O1xuXG4vKipcbiAqIFVwZGF0ZXMgdGhlIGludGVybmFsIFdlYkdMIFVWIGNhY2hlLlxuICpcbiAqIEBwcml2YXRlXG4gKi9cblRleHR1cmUucHJvdG90eXBlLl91cGRhdGVVdnMgPSBmdW5jdGlvbiAoKVxue1xuICAgIGlmICghdGhpcy5fdXZzKVxuICAgIHtcbiAgICAgICAgdGhpcy5fdXZzID0gbmV3IFRleHR1cmVVdnMoKTtcbiAgICB9XG5cbiAgICB0aGlzLl91dnMuc2V0KHRoaXMuY3JvcCwgdGhpcy5iYXNlVGV4dHVyZSwgdGhpcy5yb3RhdGUpO1xufTtcblxuLyoqXG4gKiBIZWxwZXIgZnVuY3Rpb24gdGhhdCBjcmVhdGVzIGEgVGV4dHVyZSBvYmplY3QgZnJvbSB0aGUgZ2l2ZW4gaW1hZ2UgdXJsLlxuICogSWYgdGhlIGltYWdlIGlzIG5vdCBpbiB0aGUgdGV4dHVyZSBjYWNoZSBpdCB3aWxsIGJlICBjcmVhdGVkIGFuZCBsb2FkZWQuXG4gKlxuICogQHN0YXRpY1xuICogQHBhcmFtIGltYWdlVXJsIHtzdHJpbmd9IFRoZSBpbWFnZSB1cmwgb2YgdGhlIHRleHR1cmVcbiAqIEBwYXJhbSBjcm9zc29yaWdpbiB7Ym9vbGVhbn0gV2hldGhlciByZXF1ZXN0cyBzaG91bGQgYmUgdHJlYXRlZCBhcyBjcm9zc29yaWdpblxuICogQHBhcmFtIHNjYWxlTW9kZSB7bnVtYmVyfSBTZWUge0BsaW5rIFBJWEkuU0NBTEVfTU9ERVN9IGZvciBwb3NzaWJsZSB2YWx1ZXNcbiAqIEByZXR1cm4ge1BJWEkuVGV4dHVyZX0gVGhlIG5ld2x5IGNyZWF0ZWQgdGV4dHVyZVxuICovXG5UZXh0dXJlLmZyb21JbWFnZSA9IGZ1bmN0aW9uIChpbWFnZVVybCwgY3Jvc3NvcmlnaW4sIHNjYWxlTW9kZSlcbntcbiAgICB2YXIgdGV4dHVyZSA9IHV0aWxzLlRleHR1cmVDYWNoZVtpbWFnZVVybF07XG5cbiAgICBpZiAoIXRleHR1cmUpXG4gICAge1xuICAgICAgICB0ZXh0dXJlID0gbmV3IFRleHR1cmUoQmFzZVRleHR1cmUuZnJvbUltYWdlKGltYWdlVXJsLCBjcm9zc29yaWdpbiwgc2NhbGVNb2RlKSk7XG4gICAgICAgIHV0aWxzLlRleHR1cmVDYWNoZVtpbWFnZVVybF0gPSB0ZXh0dXJlO1xuICAgIH1cblxuICAgIHJldHVybiB0ZXh0dXJlO1xufTtcblxuLyoqXG4gKiBIZWxwZXIgZnVuY3Rpb24gdGhhdCBjcmVhdGVzIGEgc3ByaXRlIHRoYXQgd2lsbCBjb250YWluIGEgdGV4dHVyZSBmcm9tIHRoZSBUZXh0dXJlQ2FjaGUgYmFzZWQgb24gdGhlIGZyYW1lSWRcbiAqIFRoZSBmcmFtZSBpZHMgYXJlIGNyZWF0ZWQgd2hlbiBhIFRleHR1cmUgcGFja2VyIGZpbGUgaGFzIGJlZW4gbG9hZGVkXG4gKlxuICogQHN0YXRpY1xuICogQHBhcmFtIGZyYW1lSWQge3N0cmluZ30gVGhlIGZyYW1lIElkIG9mIHRoZSB0ZXh0dXJlIGluIHRoZSBjYWNoZVxuICogQHJldHVybiB7UElYSS5UZXh0dXJlfSBUaGUgbmV3bHkgY3JlYXRlZCB0ZXh0dXJlXG4gKi9cblRleHR1cmUuZnJvbUZyYW1lID0gZnVuY3Rpb24gKGZyYW1lSWQpXG57XG4gICAgdmFyIHRleHR1cmUgPSB1dGlscy5UZXh0dXJlQ2FjaGVbZnJhbWVJZF07XG5cbiAgICBpZiAoIXRleHR1cmUpXG4gICAge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RoZSBmcmFtZUlkIFwiJyArIGZyYW1lSWQgKyAnXCIgZG9lcyBub3QgZXhpc3QgaW4gdGhlIHRleHR1cmUgY2FjaGUnKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGV4dHVyZTtcbn07XG5cbi8qKlxuICogSGVscGVyIGZ1bmN0aW9uIHRoYXQgY3JlYXRlcyBhIG5ldyBUZXh0dXJlIGJhc2VkIG9uIHRoZSBnaXZlbiBjYW52YXMgZWxlbWVudC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAcGFyYW0gY2FudmFzIHtDYW52YXN9IFRoZSBjYW52YXMgZWxlbWVudCBzb3VyY2Ugb2YgdGhlIHRleHR1cmVcbiAqIEBwYXJhbSBzY2FsZU1vZGUge251bWJlcn0gU2VlIHtAbGluayBQSVhJLlNDQUxFX01PREVTfSBmb3IgcG9zc2libGUgdmFsdWVzXG4gKiBAcmV0dXJuIHtQSVhJLlRleHR1cmV9XG4gKi9cblRleHR1cmUuZnJvbUNhbnZhcyA9IGZ1bmN0aW9uIChjYW52YXMsIHNjYWxlTW9kZSlcbntcbiAgICByZXR1cm4gbmV3IFRleHR1cmUoQmFzZVRleHR1cmUuZnJvbUNhbnZhcyhjYW52YXMsIHNjYWxlTW9kZSkpO1xufTtcblxuLyoqXG4gKiBIZWxwZXIgZnVuY3Rpb24gdGhhdCBjcmVhdGVzIGEgbmV3IFRleHR1cmUgYmFzZWQgb24gdGhlIGdpdmVuIHZpZGVvIGVsZW1lbnQuXG4gKlxuICogQHN0YXRpY1xuICogQHBhcmFtIHZpZGVvIHtIVE1MVmlkZW9FbGVtZW50fVxuICogQHBhcmFtIHNjYWxlTW9kZSB7bnVtYmVyfSBTZWUge0BsaW5rIFBJWEkuU0NBTEVfTU9ERVN9IGZvciBwb3NzaWJsZSB2YWx1ZXNcbiAqIEByZXR1cm4ge1BJWEkuVGV4dHVyZX0gQSBUZXh0dXJlXG4gKi9cblRleHR1cmUuZnJvbVZpZGVvID0gZnVuY3Rpb24gKHZpZGVvLCBzY2FsZU1vZGUpXG57XG4gICAgaWYgKHR5cGVvZiB2aWRlbyA9PT0gJ3N0cmluZycpXG4gICAge1xuICAgICAgICByZXR1cm4gVGV4dHVyZS5mcm9tVmlkZW9VcmwodmlkZW8sIHNjYWxlTW9kZSk7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHJldHVybiBuZXcgVGV4dHVyZShWaWRlb0Jhc2VUZXh0dXJlLmZyb21WaWRlbyh2aWRlbywgc2NhbGVNb2RlKSk7XG4gICAgfVxufTtcblxuLyoqXG4gKiBIZWxwZXIgZnVuY3Rpb24gdGhhdCBjcmVhdGVzIGEgbmV3IFRleHR1cmUgYmFzZWQgb24gdGhlIHZpZGVvIHVybC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAcGFyYW0gdmlkZW9Vcmwge3N0cmluZ31cbiAqIEBwYXJhbSBzY2FsZU1vZGUge251bWJlcn0gU2VlIHtAbGluayBQSVhJLlNDQUxFX01PREVTfSBmb3IgcG9zc2libGUgdmFsdWVzXG4gKiBAcmV0dXJuIHtQSVhJLlRleHR1cmV9IEEgVGV4dHVyZVxuICovXG5UZXh0dXJlLmZyb21WaWRlb1VybCA9IGZ1bmN0aW9uICh2aWRlb1VybCwgc2NhbGVNb2RlKVxue1xuICAgIHJldHVybiBuZXcgVGV4dHVyZShWaWRlb0Jhc2VUZXh0dXJlLmZyb21VcmwodmlkZW9VcmwsIHNjYWxlTW9kZSkpO1xufTtcblxuLyoqXG4gKiBBZGRzIGEgdGV4dHVyZSB0byB0aGUgZ2xvYmFsIHV0aWxzLlRleHR1cmVDYWNoZS4gVGhpcyBjYWNoZSBpcyBzaGFyZWQgYWNyb3NzIHRoZSB3aG9sZSBQSVhJIG9iamVjdC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAcGFyYW0gdGV4dHVyZSB7UElYSS5UZXh0dXJlfSBUaGUgVGV4dHVyZSB0byBhZGQgdG8gdGhlIGNhY2hlLlxuICogQHBhcmFtIGlkIHtzdHJpbmd9IFRoZSBpZCB0aGF0IHRoZSB0ZXh0dXJlIHdpbGwgYmUgc3RvcmVkIGFnYWluc3QuXG4gKi9cblRleHR1cmUuYWRkVGV4dHVyZVRvQ2FjaGUgPSBmdW5jdGlvbiAodGV4dHVyZSwgaWQpXG57XG4gICAgdXRpbHMuVGV4dHVyZUNhY2hlW2lkXSA9IHRleHR1cmU7XG59O1xuXG4vKipcbiAqIFJlbW92ZSBhIHRleHR1cmUgZnJvbSB0aGUgZ2xvYmFsIHV0aWxzLlRleHR1cmVDYWNoZS5cbiAqXG4gKiBAc3RhdGljXG4gKiBAcGFyYW0gaWQge3N0cmluZ30gVGhlIGlkIG9mIHRoZSB0ZXh0dXJlIHRvIGJlIHJlbW92ZWRcbiAqIEByZXR1cm4ge1BJWEkuVGV4dHVyZX0gVGhlIHRleHR1cmUgdGhhdCB3YXMgcmVtb3ZlZFxuICovXG5UZXh0dXJlLnJlbW92ZVRleHR1cmVGcm9tQ2FjaGUgPSBmdW5jdGlvbiAoaWQpXG57XG4gICAgdmFyIHRleHR1cmUgPSB1dGlscy5UZXh0dXJlQ2FjaGVbaWRdO1xuXG4gICAgZGVsZXRlIHV0aWxzLlRleHR1cmVDYWNoZVtpZF07XG4gICAgZGVsZXRlIHV0aWxzLkJhc2VUZXh0dXJlQ2FjaGVbaWRdO1xuXG4gICAgcmV0dXJuIHRleHR1cmU7XG59O1xuXG4vKipcbiAqIEFuIGVtcHR5IHRleHR1cmUsIHVzZWQgb2Z0ZW4gdG8gbm90IGhhdmUgdG8gY3JlYXRlIG11bHRpcGxlIGVtcHR5IHRleHR1cmVzLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBjb25zdGFudFxuICovXG5UZXh0dXJlLkVNUFRZID0gbmV3IFRleHR1cmUobmV3IEJhc2VUZXh0dXJlKCkpO1xuIiwiXG4vKipcbiAqIEEgc3RhbmRhcmQgb2JqZWN0IHRvIHN0b3JlIHRoZSBVdnMgb2YgYSB0ZXh0dXJlXG4gKlxuICogQGNsYXNzXG4gKiBAcHJpdmF0ZVxuICogQG1lbWJlcm9mIFBJWElcbiAqL1xuZnVuY3Rpb24gVGV4dHVyZVV2cygpXG57XG4gICAgdGhpcy54MCA9IDA7XG4gICAgdGhpcy55MCA9IDA7XG5cbiAgICB0aGlzLngxID0gMTtcbiAgICB0aGlzLnkxID0gMDtcblxuICAgIHRoaXMueDIgPSAxO1xuICAgIHRoaXMueTIgPSAxO1xuXG4gICAgdGhpcy54MyA9IDA7XG4gICAgdGhpcy55MyA9IDE7XG5cbiAgICB0aGlzLnh5MF91aW50MzIgPSAwO1xuICAgIHRoaXMueHkxX3VpbnQzMiA9IDA7XG4gICAgdGhpcy54eTJfdWludDMyID0gMDtcbiAgICB0aGlzLnh5M191aW50MzIgPSAwO1xuXG4gICAgdGhpcy51dnNfdWludDMyID0gbmV3IFVpbnQzMkFycmF5KDQpXG59XG5cbm1vZHVsZS5leHBvcnRzID0gVGV4dHVyZVV2cztcblxuLyoqXG4gKiBTZXRzIHRoZSB0ZXh0dXJlIFV2cyBiYXNlZCBvbiB0aGUgZ2l2ZW4gZnJhbWUgaW5mb3JtYXRpb25cbiAqIEBwYXJhbSBmcmFtZSB7UElYSS5SZWN0YW5nbGV9XG4gKiBAcGFyYW0gYmFzZUZyYW1lIHtQSVhJLlJlY3RhbmdsZX1cbiAqIEBwYXJhbSByb3RhdGUge2Jvb2xlYW59IFdoZXRoZXIgb3Igbm90IHRoZSBmcmFtZSBpcyByb3RhdGVkXG4gKiBAcHJpdmF0ZVxuICovXG5UZXh0dXJlVXZzLnByb3RvdHlwZS5zZXQgPSBmdW5jdGlvbiAoZnJhbWUsIGJhc2VGcmFtZSwgcm90YXRlKVxue1xuICAgIHZhciB0dyA9IGJhc2VGcmFtZS53aWR0aDtcbiAgICB2YXIgdGggPSBiYXNlRnJhbWUuaGVpZ2h0O1xuXG4gICAgaWYocm90YXRlKVxuICAgIHtcbiAgICAgICAgdGhpcy54MCA9IChmcmFtZS54ICsgZnJhbWUuaGVpZ2h0KSAvIHR3O1xuICAgICAgICB0aGlzLnkwID0gZnJhbWUueSAvIHRoO1xuXG4gICAgICAgIHRoaXMueDEgPSAoZnJhbWUueCArIGZyYW1lLmhlaWdodCkgLyB0dztcbiAgICAgICAgdGhpcy55MSA9IChmcmFtZS55ICsgZnJhbWUud2lkdGgpIC8gdGg7XG5cbiAgICAgICAgdGhpcy54MiA9IGZyYW1lLnggLyB0dztcbiAgICAgICAgdGhpcy55MiA9IChmcmFtZS55ICsgZnJhbWUud2lkdGgpIC8gdGg7XG5cbiAgICAgICAgdGhpcy54MyA9IGZyYW1lLnggLyB0dztcbiAgICAgICAgdGhpcy55MyA9IGZyYW1lLnkgLyB0aDtcbiAgICB9XG4gICAgZWxzZVxuICAgIHtcblxuICAgICAgICB0aGlzLngwID0gZnJhbWUueCAvIHR3O1xuICAgICAgICB0aGlzLnkwID0gZnJhbWUueSAvIHRoO1xuXG4gICAgICAgIHRoaXMueDEgPSAoZnJhbWUueCArIGZyYW1lLndpZHRoKSAvIHR3O1xuICAgICAgICB0aGlzLnkxID0gZnJhbWUueSAvIHRoO1xuXG4gICAgICAgIHRoaXMueDIgPSAoZnJhbWUueCArIGZyYW1lLndpZHRoKSAvIHR3O1xuICAgICAgICB0aGlzLnkyID0gKGZyYW1lLnkgKyBmcmFtZS5oZWlnaHQpIC8gdGg7XG5cbiAgICAgICAgdGhpcy54MyA9IGZyYW1lLnggLyB0dztcbiAgICAgICAgdGhpcy55MyA9IChmcmFtZS55ICsgZnJhbWUuaGVpZ2h0KSAvIHRoO1xuICAgIH1cblxuICAgIHRoaXMudXZzX3VpbnQzMlswXSA9ICgoKHRoaXMueTAgKiA2NTUzNSkgJiAweEZGRkYpIDw8IDE2KSB8ICgodGhpcy54MCAqIDY1NTM1KSAmIDB4RkZGRik7XG4gICAgdGhpcy51dnNfdWludDMyWzFdID0gKCgodGhpcy55MSAqIDY1NTM1KSAmIDB4RkZGRikgPDwgMTYpIHwgKCh0aGlzLngxICogNjU1MzUpICYgMHhGRkZGKTtcbiAgICB0aGlzLnV2c191aW50MzJbMl0gPSAoKCh0aGlzLnkyICogNjU1MzUpICYgMHhGRkZGKSA8PCAxNikgfCAoKHRoaXMueDIgKiA2NTUzNSkgJiAweEZGRkYpO1xuICAgIHRoaXMudXZzX3VpbnQzMlszXSA9ICgoKHRoaXMueTMgKiA2NTUzNSkgJiAweEZGRkYpIDw8IDE2KSB8ICgodGhpcy54MyAqIDY1NTM1KSAmIDB4RkZGRik7XG59O1xuIiwidmFyIEJhc2VUZXh0dXJlID0gcmVxdWlyZSgnLi9CYXNlVGV4dHVyZScpLFxuICAgIHV0aWxzID0gcmVxdWlyZSgnLi4vdXRpbHMnKTtcblxuLyoqXG4gKiBBIHRleHR1cmUgb2YgYSBbcGxheWluZ10gVmlkZW8uXG4gKlxuICogVmlkZW8gYmFzZSB0ZXh0dXJlcyBtaW1pYyBQaXhpIEJhc2VUZXh0dXJlLmZyb20uLi4uIG1ldGhvZCBpbiB0aGVpciBjcmVhdGlvbiBwcm9jZXNzLlxuICpcbiAqIFRoaXMgY2FuIGJlIHVzZWQgaW4gc2V2ZXJhbCB3YXlzLCBzdWNoIGFzOlxuICpcbiAqIGBgYGpzXG4gKiB2YXIgdGV4dHVyZSA9IFBJWEkuVmlkZW9CYXNlVGV4dHVyZS5mcm9tVXJsKCdodHRwOi8vbXlkb21haW4uY29tL3ZpZGVvLm1wNCcpO1xuICpcbiAqIHZhciB0ZXh0dXJlID0gUElYSS5WaWRlb0Jhc2VUZXh0dXJlLmZyb21VcmwoeyBzcmM6ICdodHRwOi8vbXlkb21haW4uY29tL3ZpZGVvLm1wNCcsIG1pbWU6ICd2aWRlby9tcDQnIH0pO1xuICpcbiAqIHZhciB0ZXh0dXJlID0gUElYSS5WaWRlb0Jhc2VUZXh0dXJlLmZyb21VcmxzKFsnL3ZpZGVvLndlYm0nLCAnL3ZpZGVvLm1wNCddKTtcbiAqXG4gKiB2YXIgdGV4dHVyZSA9IFBJWEkuVmlkZW9CYXNlVGV4dHVyZS5mcm9tVXJscyhbXG4gKiAgICAgeyBzcmM6ICcvdmlkZW8ud2VibScsIG1pbWU6ICd2aWRlby93ZWJtJyB9LFxuICogICAgIHsgc3JjOiAnL3ZpZGVvLm1wNCcsIG1pbWU6ICd2aWRlby9tcDQnIH1cbiAqIF0pO1xuICogYGBgXG4gKlxuICogU2VlIHRoZSBbXCJkZXVzXCIgZGVtb10oaHR0cDovL3d3dy5nb29kYm95ZGlnaXRhbC5jb20vcGl4aWpzL2V4YW1wbGVzL2RldXMvKS5cbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQmFzZVRleHR1cmVcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gc291cmNlIHtIVE1MVmlkZW9FbGVtZW50fVxuICogQHBhcmFtIFtzY2FsZU1vZGVdIHtudW1iZXJ9IFNlZSB7QGxpbmsgUElYSS5TQ0FMRV9NT0RFU30gZm9yIHBvc3NpYmxlIHZhbHVlc1xuICovXG5mdW5jdGlvbiBWaWRlb0Jhc2VUZXh0dXJlKHNvdXJjZSwgc2NhbGVNb2RlKVxue1xuICAgIGlmICghc291cmNlKVxuICAgIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdObyB2aWRlbyBzb3VyY2UgZWxlbWVudCBzcGVjaWZpZWQuJyk7XG4gICAgfVxuXG4gICAgLy8gaG9vayBpbiBoZXJlIHRvIGNoZWNrIGlmIHZpZGVvIGlzIGFscmVhZHkgYXZhaWxhYmxlLlxuICAgIC8vIEJhc2VUZXh0dXJlIGxvb2tzIGZvciBhIHNvdXJjZS5jb21wbGV0ZSBib29sZWFuLCBwbHVzIHdpZHRoICYgaGVpZ2h0LlxuXG4gICAgaWYgKChzb3VyY2UucmVhZHlTdGF0ZSA9PT0gc291cmNlLkhBVkVfRU5PVUdIX0RBVEEgfHwgc291cmNlLnJlYWR5U3RhdGUgPT09IHNvdXJjZS5IQVZFX0ZVVFVSRV9EQVRBKSAmJiBzb3VyY2Uud2lkdGggJiYgc291cmNlLmhlaWdodClcbiAgICB7XG4gICAgICAgIHNvdXJjZS5jb21wbGV0ZSA9IHRydWU7XG4gICAgfVxuXG4gICAgQmFzZVRleHR1cmUuY2FsbCh0aGlzLCBzb3VyY2UsIHNjYWxlTW9kZSk7XG5cbiAgICAvKipcbiAgICAgKiBTaG91bGQgdGhlIGJhc2UgdGV4dHVyZSBhdXRvbWF0aWNhbGx5IHVwZGF0ZSBpdHNlbGYsIHNldCB0byB0cnVlIGJ5IGRlZmF1bHRcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICogQGRlZmF1bHQgdHJ1ZVxuICAgICAqL1xuICAgIHRoaXMuYXV0b1VwZGF0ZSA9IGZhbHNlO1xuXG4gICAgdGhpcy5fb25VcGRhdGUgPSB0aGlzLl9vblVwZGF0ZS5iaW5kKHRoaXMpO1xuICAgIHRoaXMuX29uQ2FuUGxheSA9IHRoaXMuX29uQ2FuUGxheS5iaW5kKHRoaXMpO1xuXG4gICAgaWYgKCFzb3VyY2UuY29tcGxldGUpXG4gICAge1xuICAgICAgICBzb3VyY2UuYWRkRXZlbnRMaXN0ZW5lcignY2FucGxheScsIHRoaXMuX29uQ2FuUGxheSk7XG4gICAgICAgIHNvdXJjZS5hZGRFdmVudExpc3RlbmVyKCdjYW5wbGF5dGhyb3VnaCcsIHRoaXMuX29uQ2FuUGxheSk7XG5cbiAgICAgICAgLy8gc3RhcnRlZCBwbGF5aW5nLi5cbiAgICAgICAgc291cmNlLmFkZEV2ZW50TGlzdGVuZXIoJ3BsYXknLCB0aGlzLl9vblBsYXlTdGFydC5iaW5kKHRoaXMpKTtcbiAgICAgICAgc291cmNlLmFkZEV2ZW50TGlzdGVuZXIoJ3BhdXNlJywgdGhpcy5fb25QbGF5U3RvcC5iaW5kKHRoaXMpKTtcbiAgICB9XG5cbiAgICB0aGlzLl9fbG9hZGVkID0gZmFsc2U7XG59XG5cblZpZGVvQmFzZVRleHR1cmUucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShCYXNlVGV4dHVyZS5wcm90b3R5cGUpO1xuVmlkZW9CYXNlVGV4dHVyZS5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBWaWRlb0Jhc2VUZXh0dXJlO1xubW9kdWxlLmV4cG9ydHMgPSBWaWRlb0Jhc2VUZXh0dXJlO1xuXG4vKipcbiAqIFRoZSBpbnRlcm5hbCB1cGRhdGUgbG9vcCBvZiB0aGUgdmlkZW8gYmFzZSB0ZXh0dXJlLCBvbmx5IHJ1bnMgd2hlbiBhdXRvVXBkYXRlIGlzIHNldCB0byB0cnVlXG4gKlxuICogQHByaXZhdGVcbiAqL1xuVmlkZW9CYXNlVGV4dHVyZS5wcm90b3R5cGUuX29uVXBkYXRlID0gZnVuY3Rpb24gKClcbntcbiAgICBpZiAodGhpcy5hdXRvVXBkYXRlKVxuICAgIHtcbiAgICAgICAgd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZSh0aGlzLl9vblVwZGF0ZSk7XG4gICAgICAgIHRoaXMudXBkYXRlKCk7XG4gICAgfVxufTtcblxuLyoqXG4gKiBSdW5zIHRoZSB1cGRhdGUgbG9vcCB3aGVuIHRoZSB2aWRlbyBpcyByZWFkeSB0byBwbGF5XG4gKlxuICogQHByaXZhdGVcbiAqL1xuVmlkZW9CYXNlVGV4dHVyZS5wcm90b3R5cGUuX29uUGxheVN0YXJ0ID0gZnVuY3Rpb24gKClcbntcbiAgICBpZiAoIXRoaXMuYXV0b1VwZGF0ZSlcbiAgICB7XG4gICAgICAgIHdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUodGhpcy5fb25VcGRhdGUpO1xuICAgICAgICB0aGlzLmF1dG9VcGRhdGUgPSB0cnVlO1xuICAgIH1cbn07XG5cbi8qKlxuICogRmlyZWQgd2hlbiBhIHBhdXNlIGV2ZW50IGlzIHRyaWdnZXJlZCwgc3RvcHMgdGhlIHVwZGF0ZSBsb29wXG4gKlxuICogQHByaXZhdGVcbiAqL1xuVmlkZW9CYXNlVGV4dHVyZS5wcm90b3R5cGUuX29uUGxheVN0b3AgPSBmdW5jdGlvbiAoKVxue1xuICAgIHRoaXMuYXV0b1VwZGF0ZSA9IGZhbHNlO1xufTtcblxuLyoqXG4gKiBGaXJlZCB3aGVuIHRoZSB2aWRlbyBpcyBsb2FkZWQgYW5kIHJlYWR5IHRvIHBsYXlcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5WaWRlb0Jhc2VUZXh0dXJlLnByb3RvdHlwZS5fb25DYW5QbGF5ID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLmhhc0xvYWRlZCA9IHRydWU7XG5cbiAgICBpZiAodGhpcy5zb3VyY2UpXG4gICAge1xuICAgICAgICB0aGlzLnNvdXJjZS5yZW1vdmVFdmVudExpc3RlbmVyKCdjYW5wbGF5JywgdGhpcy5fb25DYW5QbGF5KTtcbiAgICAgICAgdGhpcy5zb3VyY2UucmVtb3ZlRXZlbnRMaXN0ZW5lcignY2FucGxheXRocm91Z2gnLCB0aGlzLl9vbkNhblBsYXkpO1xuXG4gICAgICAgIHRoaXMud2lkdGggPSB0aGlzLnNvdXJjZS52aWRlb1dpZHRoO1xuICAgICAgICB0aGlzLmhlaWdodCA9IHRoaXMuc291cmNlLnZpZGVvSGVpZ2h0O1xuXG4gICAgICAgIHRoaXMuc291cmNlLnBsYXkoKTtcblxuICAgICAgICAvLyBwcmV2ZW50IG11bHRpcGxlIGxvYWRlZCBkaXNwYXRjaGVzLi5cbiAgICAgICAgaWYgKCF0aGlzLl9fbG9hZGVkKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLl9fbG9hZGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMuZW1pdCgnbG9hZGVkJywgdGhpcyk7XG4gICAgICAgIH1cbiAgICB9XG59O1xuXG4vKipcbiAqIERlc3Ryb3lzIHRoaXMgdGV4dHVyZVxuICpcbiAqL1xuVmlkZW9CYXNlVGV4dHVyZS5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uICgpXG57XG4gICAgaWYgKHRoaXMuc291cmNlICYmIHRoaXMuc291cmNlLl9waXhpSWQpXG4gICAge1xuICAgICAgICBkZWxldGUgdXRpbHMuQmFzZVRleHR1cmVDYWNoZVsgdGhpcy5zb3VyY2UuX3BpeGlJZCBdO1xuICAgICAgICBkZWxldGUgdGhpcy5zb3VyY2UuX3BpeGlJZDtcbiAgICB9XG5cbiAgICBCYXNlVGV4dHVyZS5wcm90b3R5cGUuZGVzdHJveS5jYWxsKHRoaXMpO1xufTtcblxuLyoqXG4gKiBNaW1pYyBQaXhpIEJhc2VUZXh0dXJlLmZyb20uLi4uIG1ldGhvZC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAcGFyYW0gdmlkZW8ge0hUTUxWaWRlb0VsZW1lbnR9XG4gKiBAcGFyYW0gc2NhbGVNb2RlIHtudW1iZXJ9IFNlZSB7QGxpbmsgUElYSS5TQ0FMRV9NT0RFU30gZm9yIHBvc3NpYmxlIHZhbHVlc1xuICogQHJldHVybiB7UElYSS5WaWRlb0Jhc2VUZXh0dXJlfVxuICovXG5WaWRlb0Jhc2VUZXh0dXJlLmZyb21WaWRlbyA9IGZ1bmN0aW9uICh2aWRlbywgc2NhbGVNb2RlKVxue1xuICAgIGlmICghdmlkZW8uX3BpeGlJZClcbiAgICB7XG4gICAgICAgIHZpZGVvLl9waXhpSWQgPSAndmlkZW9fJyArIHV0aWxzLnVpZCgpO1xuICAgIH1cblxuICAgIHZhciBiYXNlVGV4dHVyZSA9IHV0aWxzLkJhc2VUZXh0dXJlQ2FjaGVbdmlkZW8uX3BpeGlJZF07XG5cbiAgICBpZiAoIWJhc2VUZXh0dXJlKVxuICAgIHtcbiAgICAgICAgYmFzZVRleHR1cmUgPSBuZXcgVmlkZW9CYXNlVGV4dHVyZSh2aWRlbywgc2NhbGVNb2RlKTtcbiAgICAgICAgdXRpbHMuQmFzZVRleHR1cmVDYWNoZVsgdmlkZW8uX3BpeGlJZCBdID0gYmFzZVRleHR1cmU7XG4gICAgfVxuXG4gICAgcmV0dXJuIGJhc2VUZXh0dXJlO1xufTtcblxuLyoqXG4gKiBIZWxwZXIgZnVuY3Rpb24gdGhhdCBjcmVhdGVzIGEgbmV3IEJhc2VUZXh0dXJlIGJhc2VkIG9uIHRoZSBnaXZlbiB2aWRlbyBlbGVtZW50LlxuICogVGhpcyBCYXNlVGV4dHVyZSBjYW4gdGhlbiBiZSB1c2VkIHRvIGNyZWF0ZSBhIHRleHR1cmVcbiAqXG4gKiBAc3RhdGljXG4gKiBAcGFyYW0gdmlkZW9TcmMge3N0cmluZ3xvYmplY3R8c3RyaW5nW118b2JqZWN0W119IFRoZSBVUkwocykgZm9yIHRoZSB2aWRlby5cbiAqIEBwYXJhbSBbdmlkZW9TcmMuc3JjXSB7c3RyaW5nfSBPbmUgb2YgdGhlIHNvdXJjZSB1cmxzIGZvciB0aGUgdmlkZW9cbiAqIEBwYXJhbSBbdmlkZW9TcmMubWltZV0ge3N0cmluZ30gVGhlIG1pbWV0eXBlIG9mIHRoZSB2aWRlbyAoZS5nLiAndmlkZW8vbXA0JykuIElmIG5vdCBzcGVjaWZpZWRcbiAqICB0aGUgdXJsJ3MgZXh0ZW5zaW9uIHdpbGwgYmUgdXNlZCBhcyB0aGUgc2Vjb25kIHBhcnQgb2YgdGhlIG1pbWUgdHlwZS5cbiAqIEBwYXJhbSBzY2FsZU1vZGUge251bWJlcn0gU2VlIHtAbGluayBQSVhJLlNDQUxFX01PREVTfSBmb3IgcG9zc2libGUgdmFsdWVzXG4gKiBAcmV0dXJuIHtQSVhJLlZpZGVvQmFzZVRleHR1cmV9XG4gKi9cblZpZGVvQmFzZVRleHR1cmUuZnJvbVVybCA9IGZ1bmN0aW9uICh2aWRlb1NyYywgc2NhbGVNb2RlKVxue1xuICAgIHZhciB2aWRlbyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3ZpZGVvJyk7XG5cbiAgICAvLyBhcnJheSBvZiBvYmplY3RzIG9yIHN0cmluZ3NcbiAgICBpZiAoQXJyYXkuaXNBcnJheSh2aWRlb1NyYykpXG4gICAge1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHZpZGVvU3JjLmxlbmd0aDsgKytpKVxuICAgICAgICB7XG4gICAgICAgICAgICB2aWRlby5hcHBlbmRDaGlsZChjcmVhdGVTb3VyY2UodmlkZW9TcmNbaV0uc3JjIHx8IHZpZGVvU3JjW2ldLCB2aWRlb1NyY1tpXS5taW1lKSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLy8gc2luZ2xlIG9iamVjdCBvciBzdHJpbmdcbiAgICBlbHNlXG4gICAge1xuICAgICAgICB2aWRlby5hcHBlbmRDaGlsZChjcmVhdGVTb3VyY2UodmlkZW9TcmMuc3JjIHx8IHZpZGVvU3JjLCB2aWRlb1NyYy5taW1lKSk7XG4gICAgfVxuXG4gICAgdmlkZW8ubG9hZCgpO1xuICAgIHZpZGVvLnBsYXkoKTtcblxuICAgIHJldHVybiBWaWRlb0Jhc2VUZXh0dXJlLmZyb21WaWRlbyh2aWRlbywgc2NhbGVNb2RlKTtcbn07XG5cblZpZGVvQmFzZVRleHR1cmUuZnJvbVVybHMgPSBWaWRlb0Jhc2VUZXh0dXJlLmZyb21Vcmw7XG5cbmZ1bmN0aW9uIGNyZWF0ZVNvdXJjZShwYXRoLCB0eXBlKVxue1xuICAgIGlmICghdHlwZSlcbiAgICB7XG4gICAgICAgIHR5cGUgPSAndmlkZW8vJyArIHBhdGguc3Vic3RyKHBhdGgubGFzdEluZGV4T2YoJy4nKSArIDEpO1xuICAgIH1cblxuICAgIHZhciBzb3VyY2UgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzb3VyY2UnKTtcblxuICAgIHNvdXJjZS5zcmMgPSBwYXRoO1xuICAgIHNvdXJjZS50eXBlID0gdHlwZTtcblxuICAgIHJldHVybiBzb3VyY2U7XG59XG4iLCJ2YXIgQ09OU1QgPSByZXF1aXJlKCcuLi9jb25zdCcpLFxuICAgIEV2ZW50RW1pdHRlciA9IHJlcXVpcmUoJ2V2ZW50ZW1pdHRlcjMnKSxcbiAgICAvLyBJbnRlcm5hbCBldmVudCB1c2VkIGJ5IGNvbXBvc2VkIGVtaXR0ZXJcbiAgICBUSUNLID0gJ3RpY2snO1xuXG4vKipcbiAqIEEgVGlja2VyIGNsYXNzIHRoYXQgcnVucyBhbiB1cGRhdGUgbG9vcCB0aGF0IG90aGVyIG9iamVjdHMgbGlzdGVuIHRvLlxuICogVGhpcyBjbGFzcyBpcyBjb21wb3NlZCBhcm91bmQgYW4gRXZlbnRFbWl0dGVyIG9iamVjdCB0byBhZGQgbGlzdGVuZXJzXG4gKiBtZWFudCBmb3IgZXhlY3V0aW9uIG9uIHRoZSBuZXh0IHJlcXVlc3RlZCBhbmltYXRpb24gZnJhbWUuXG4gKiBBbmltYXRpb24gZnJhbWVzIGFyZSByZXF1ZXN0ZWQgb25seSB3aGVuIG5lY2Vzc2FyeSxcbiAqIGUuZy4gV2hlbiB0aGUgdGlja2VyIGlzIHN0YXJ0ZWQgYW5kIHRoZSBlbWl0dGVyIGhhcyBsaXN0ZW5lcnMuXG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSS50aWNrZXJcbiAqL1xuZnVuY3Rpb24gVGlja2VyKClcbntcbiAgICB2YXIgX3RoaXMgPSB0aGlzO1xuXG4gICAgLyoqXG4gICAgICogSW50ZXJuYWwgdGljayBtZXRob2QgYm91bmQgdG8gdGlja2VyIGluc3RhbmNlLlxuICAgICAqIFRoaXMgaXMgYmVjYXVzZSBpbiBlYXJseSAyMDE1LCBGdW5jdGlvbi5iaW5kXG4gICAgICogaXMgc3RpbGwgNjAlIHNsb3dlciBpbiBoaWdoIHBlcmZvcm1hbmNlIHNjZW5hcmlvcy5cbiAgICAgKiBBbHNvIHNlcGFyYXRpbmcgZnJhbWUgcmVxdWVzdHMgZnJvbSB1cGRhdGUgbWV0aG9kXG4gICAgICogc28gbGlzdGVuZXJzIG1heSBiZSBjYWxsZWQgYXQgYW55IHRpbWUgYW5kIHdpdGhcbiAgICAgKiBhbnkgYW5pbWF0aW9uIEFQSSwganVzdCBpbnZva2UgdGlja2VyLnVwZGF0ZSh0aW1lKS5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fdGljayA9IGZ1bmN0aW9uIF90aWNrKHRpbWUpIHtcblxuICAgICAgICBfdGhpcy5fcmVxdWVzdElkID0gbnVsbDtcblxuICAgICAgICBpZiAoX3RoaXMuc3RhcnRlZClcbiAgICAgICAge1xuICAgICAgICAgICAgLy8gSW52b2tlIGxpc3RlbmVycyBub3dcbiAgICAgICAgICAgIF90aGlzLnVwZGF0ZSh0aW1lKTtcbiAgICAgICAgICAgIC8vIExpc3RlbmVyIHNpZGUgZWZmZWN0cyBtYXkgaGF2ZSBtb2RpZmllZCB0aWNrZXIgc3RhdGUuXG4gICAgICAgICAgICBpZiAoX3RoaXMuc3RhcnRlZCAmJiBfdGhpcy5fcmVxdWVzdElkID09PSBudWxsICYmIF90aGlzLl9lbWl0dGVyLmxpc3RlbmVycyhUSUNLLCB0cnVlKSlcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBfdGhpcy5fcmVxdWVzdElkID0gcmVxdWVzdEFuaW1hdGlvbkZyYW1lKF90aGlzLl90aWNrKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH07XG5cbiAgICAvKipcbiAgICAgKiBJbnRlcm5hbCBlbWl0dGVyIHVzZWQgdG8gZmlyZSAndGljaycgZXZlbnRcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX2VtaXR0ZXIgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgICAvKipcbiAgICAgKiBJbnRlcm5hbCBjdXJyZW50IGZyYW1lIHJlcXVlc3QgSURcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX3JlcXVlc3RJZCA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBJbnRlcm5hbCB2YWx1ZSBtYW5hZ2VkIGJ5IG1pbkZQUyBwcm9wZXJ0eSBzZXR0ZXIgYW5kIGdldHRlci5cbiAgICAgKiBUaGlzIGlzIHRoZSBtYXhpbXVtIGFsbG93ZWQgbWlsbGlzZWNvbmRzIGJldHdlZW4gdXBkYXRlcy5cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX21heEVsYXBzZWRNUyA9IDEwMDtcblxuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgb3Igbm90IHRoaXMgdGlja2VyIHNob3VsZCBpbnZva2UgdGhlIG1ldGhvZFxuICAgICAqIHtAbGluayBQSVhJLnRpY2tlci5UaWNrZXIjc3RhcnR9IGF1dG9tYXRpY2FsbHlcbiAgICAgKiB3aGVuIGEgbGlzdGVuZXIgaXMgYWRkZWQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqIEBkZWZhdWx0IGZhbHNlXG4gICAgICovXG4gICAgdGhpcy5hdXRvU3RhcnQgPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIFNjYWxhciB0aW1lIHZhbHVlIGZyb20gbGFzdCBmcmFtZSB0byB0aGlzIGZyYW1lLlxuICAgICAqIFRoaXMgdmFsdWUgaXMgY2FwcGVkIGJ5IHNldHRpbmcge0BsaW5rIFBJWEkudGlja2VyLlRpY2tlciNtaW5GUFN9XG4gICAgICogYW5kIGlzIHNjYWxlZCB3aXRoIHtAbGluayBQSVhJLnRpY2tlci5UaWNrZXIjc3BlZWR9LlxuICAgICAqICoqTm90ZToqKiBUaGUgY2FwIG1heSBiZSBleGNlZWRlZCBieSBzY2FsaW5nLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDFcbiAgICAgKi9cbiAgICB0aGlzLmRlbHRhVGltZSA9IDE7XG5cbiAgICAvKipcbiAgICAgKiBUaW1lIGVsYXBzZWQgaW4gbWlsbGlzZWNvbmRzIGZyb20gbGFzdCBmcmFtZSB0byB0aGlzIGZyYW1lLlxuICAgICAqIE9wcG9zZWQgdG8gd2hhdCB0aGUgc2NhbGFyIHtAbGluayBQSVhJLnRpY2tlci5UaWNrZXIjZGVsdGFUaW1lfVxuICAgICAqIGlzIGJhc2VkLCB0aGlzIHZhbHVlIGlzIG5laXRoZXIgY2FwcGVkIG5vciBzY2FsZWQuXG4gICAgICogSWYgdGhlIHBsYXRmb3JtIHN1cHBvcnRzIERPTUhpZ2hSZXNUaW1lU3RhbXAsXG4gICAgICogdGhpcyB2YWx1ZSB3aWxsIGhhdmUgYSBwcmVjaXNpb24gb2YgMSDCtXMuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtET01IaWdoUmVzVGltZVN0YW1wfG51bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAxIC8gVEFSR0VUX0ZQTVNcbiAgICAgKi9cbiAgICB0aGlzLmVsYXBzZWRNUyA9IDEgLyBDT05TVC5UQVJHRVRfRlBNUzsgLy8gZGVmYXVsdCB0byB0YXJnZXQgZnJhbWUgdGltZVxuXG4gICAgLyoqXG4gICAgICogVGhlIGxhc3QgdGltZSB7QGxpbmsgUElYSS50aWNrZXIuVGlja2VyI3VwZGF0ZX0gd2FzIGludm9rZWQuXG4gICAgICogVGhpcyB2YWx1ZSBpcyBhbHNvIHJlc2V0IGludGVybmFsbHkgb3V0c2lkZSBvZiBpbnZva2luZ1xuICAgICAqIHVwZGF0ZSwgYnV0IG9ubHkgd2hlbiBhIG5ldyBhbmltYXRpb24gZnJhbWUgaXMgcmVxdWVzdGVkLlxuICAgICAqIElmIHRoZSBwbGF0Zm9ybSBzdXBwb3J0cyBET01IaWdoUmVzVGltZVN0YW1wLFxuICAgICAqIHRoaXMgdmFsdWUgd2lsbCBoYXZlIGEgcHJlY2lzaW9uIG9mIDEgwrVzLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7RE9NSGlnaFJlc1RpbWVTdGFtcHxudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMFxuICAgICAqL1xuICAgIHRoaXMubGFzdFRpbWUgPSAwO1xuXG4gICAgLyoqXG4gICAgICogRmFjdG9yIG9mIGN1cnJlbnQge0BsaW5rIFBJWEkudGlja2VyLlRpY2tlciNkZWx0YVRpbWV9LlxuICAgICAqIEBleGFtcGxlXG4gICAgICogLy8gU2NhbGVzIHRpY2tlci5kZWx0YVRpbWUgdG8gd2hhdCB3b3VsZCBiZVxuICAgICAqIC8vIHRoZSBlcXVpdmFsZW50IG9mIGFwcHJveGltYXRlbHkgMTIwIEZQU1xuICAgICAqIHRpY2tlci5zcGVlZCA9IDI7XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMVxuICAgICAqL1xuICAgIHRoaXMuc3BlZWQgPSAxO1xuXG4gICAgLyoqXG4gICAgICogV2hldGhlciBvciBub3QgdGhpcyB0aWNrZXIgaGFzIGJlZW4gc3RhcnRlZC5cbiAgICAgKiBgdHJ1ZWAgaWYge0BsaW5rIFBJWEkudGlja2VyLlRpY2tlciNzdGFydH0gaGFzIGJlZW4gY2FsbGVkLlxuICAgICAqIGBmYWxzZWAgaWYge0BsaW5rIFBJWEkudGlja2VyLlRpY2tlciNzdG9wfSBoYXMgYmVlbiBjYWxsZWQuXG4gICAgICogV2hpbGUgYGZhbHNlYCwgdGhpcyB2YWx1ZSBtYXkgY2hhbmdlIHRvIGB0cnVlYCBpbiB0aGVcbiAgICAgKiBldmVudCBvZiB7QGxpbmsgUElYSS50aWNrZXIuVGlja2VyI2F1dG9TdGFydH0gYmVpbmcgYHRydWVgXG4gICAgICogYW5kIGEgbGlzdGVuZXIgaXMgYWRkZWQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqIEBkZWZhdWx0IGZhbHNlXG4gICAgICovXG4gICAgdGhpcy5zdGFydGVkID0gZmFsc2U7XG59XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKFRpY2tlci5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBUaGUgZnJhbWVzIHBlciBzZWNvbmQgYXQgd2hpY2ggdGhpcyB0aWNrZXIgaXMgcnVubmluZy5cbiAgICAgKiBUaGUgZGVmYXVsdCBpcyBhcHByb3hpbWF0ZWx5IDYwIGluIG1vc3QgbW9kZXJuIGJyb3dzZXJzLlxuICAgICAqICoqTm90ZToqKiBUaGlzIGRvZXMgbm90IGZhY3RvciBpbiB0aGUgdmFsdWUgb2ZcbiAgICAgKiB7QGxpbmsgUElYSS50aWNrZXIuVGlja2VyI3NwZWVkfSwgd2hpY2ggaXMgc3BlY2lmaWNcbiAgICAgKiB0byBzY2FsaW5nIHtAbGluayBQSVhJLnRpY2tlci5UaWNrZXIjZGVsdGFUaW1lfS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXJcbiAgICAgKiBAbWVtYmVyb2YgUElYSS50aWNrZXIuVGlja2VyI1xuICAgICAqIEByZWFkb25seVxuICAgICAqL1xuICAgIEZQUzoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIDEwMDAgLyB0aGlzLmVsYXBzZWRNUztcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBNYW5hZ2VzIHRoZSBtYXhpbXVtIGFtb3VudCBvZiBtaWxsaXNlY29uZHMgYWxsb3dlZCB0b1xuICAgICAqIGVsYXBzZSBiZXR3ZWVuIGludm9raW5nIHtAbGluayBQSVhJLnRpY2tlci5UaWNrZXIjdXBkYXRlfS5cbiAgICAgKiBUaGlzIHZhbHVlIGlzIHVzZWQgdG8gY2FwIHtAbGluayBQSVhJLnRpY2tlci5UaWNrZXIjZGVsdGFUaW1lfSxcbiAgICAgKiBidXQgZG9lcyBub3QgZWZmZWN0IHRoZSBtZWFzdXJlZCB2YWx1ZSBvZiB7QGxpbmsgUElYSS50aWNrZXIuVGlja2VyI0ZQU30uXG4gICAgICogV2hlbiBzZXR0aW5nIHRoaXMgcHJvcGVydHkgaXQgaXMgY2xhbXBlZCB0byBhIHZhbHVlIGJldHdlZW5cbiAgICAgKiBgMGAgYW5kIGBQSVhJLlRBUkdFVF9GUE1TICogMTAwMGAuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyXG4gICAgICogQG1lbWJlcm9mIFBJWEkudGlja2VyLlRpY2tlciNcbiAgICAgKiBAZGVmYXVsdCAxMFxuICAgICAqL1xuICAgIG1pbkZQUzoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIDEwMDAgLyB0aGlzLl9tYXhFbGFwc2VkTVM7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24oZnBzKVxuICAgICAgICB7XG4gICAgICAgICAgICAvLyBDbGFtcDogMCB0byBUQVJHRVRfRlBNU1xuICAgICAgICAgICAgdmFyIG1pbkZQTVMgPSBNYXRoLm1pbihNYXRoLm1heCgwLCBmcHMpIC8gMTAwMCwgQ09OU1QuVEFSR0VUX0ZQTVMpO1xuICAgICAgICAgICAgdGhpcy5fbWF4RWxhcHNlZE1TID0gMSAvIG1pbkZQTVM7XG4gICAgICAgIH1cbiAgICB9XG59KTtcblxuLyoqXG4gKiBDb25kaXRpb25hbGx5IHJlcXVlc3RzIGEgbmV3IGFuaW1hdGlvbiBmcmFtZS5cbiAqIElmIGEgZnJhbWUgaGFzIG5vdCBhbHJlYWR5IGJlZW4gcmVxdWVzdGVkLCBhbmQgaWYgdGhlIGludGVybmFsXG4gKiBlbWl0dGVyIGhhcyBsaXN0ZW5lcnMsIGEgbmV3IGZyYW1lIGlzIHJlcXVlc3RlZC5cbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5UaWNrZXIucHJvdG90eXBlLl9yZXF1ZXN0SWZOZWVkZWQgPSBmdW5jdGlvbiBfcmVxdWVzdElmTmVlZGVkKClcbntcbiAgICBpZiAodGhpcy5fcmVxdWVzdElkID09PSBudWxsICYmIHRoaXMuX2VtaXR0ZXIubGlzdGVuZXJzKFRJQ0ssIHRydWUpKVxuICAgIHtcbiAgICAgICAgLy8gZW5zdXJlIGNhbGxiYWNrcyBnZXQgY29ycmVjdCBkZWx0YVxuICAgICAgICB0aGlzLmxhc3RUaW1lID0gcGVyZm9ybWFuY2Uubm93KCk7XG4gICAgICAgIHRoaXMuX3JlcXVlc3RJZCA9IHJlcXVlc3RBbmltYXRpb25GcmFtZSh0aGlzLl90aWNrKTtcbiAgICB9XG59O1xuXG4vKipcbiAqIENvbmRpdGlvbmFsbHkgY2FuY2VscyBhIHBlbmRpbmcgYW5pbWF0aW9uIGZyYW1lLlxuICpcbiAqIEBwcml2YXRlXG4gKi9cblRpY2tlci5wcm90b3R5cGUuX2NhbmNlbElmTmVlZGVkID0gZnVuY3Rpb24gX2NhbmNlbElmTmVlZGVkKClcbntcbiAgICBpZiAodGhpcy5fcmVxdWVzdElkICE9PSBudWxsKVxuICAgIHtcbiAgICAgICAgY2FuY2VsQW5pbWF0aW9uRnJhbWUodGhpcy5fcmVxdWVzdElkKTtcbiAgICAgICAgdGhpcy5fcmVxdWVzdElkID0gbnVsbDtcbiAgICB9XG59O1xuXG4vKipcbiAqIENvbmRpdGlvbmFsbHkgcmVxdWVzdHMgYSBuZXcgYW5pbWF0aW9uIGZyYW1lLlxuICogSWYgdGhlIHRpY2tlciBoYXMgYmVlbiBzdGFydGVkIGl0IGNoZWNrcyBpZiBhIGZyYW1lIGhhcyBub3QgYWxyZWFkeVxuICogYmVlbiByZXF1ZXN0ZWQsIGFuZCBpZiB0aGUgaW50ZXJuYWwgZW1pdHRlciBoYXMgbGlzdGVuZXJzLiBJZiB0aGVzZVxuICogY29uZGl0aW9ucyBhcmUgbWV0LCBhIG5ldyBmcmFtZSBpcyByZXF1ZXN0ZWQuIElmIHRoZSB0aWNrZXIgaGFzIG5vdFxuICogYmVlbiBzdGFydGVkLCBidXQgYXV0b1N0YXJ0IGlzIGB0cnVlYCwgdGhlbiB0aGUgdGlja2VyIHN0YXJ0cyBub3csXG4gKiBhbmQgY29udGludWVzIHdpdGggdGhlIHByZXZpb3VzIGNvbmRpdGlvbnMgdG8gcmVxdWVzdCBhIG5ldyBmcmFtZS5cbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5UaWNrZXIucHJvdG90eXBlLl9zdGFydElmUG9zc2libGUgPSBmdW5jdGlvbiBfc3RhcnRJZlBvc3NpYmxlKClcbntcbiAgICBpZiAodGhpcy5zdGFydGVkKVxuICAgIHtcbiAgICAgICAgdGhpcy5fcmVxdWVzdElmTmVlZGVkKCk7XG4gICAgfVxuICAgIGVsc2UgaWYgKHRoaXMuYXV0b1N0YXJ0KVxuICAgIHtcbiAgICAgICAgdGhpcy5zdGFydCgpO1xuICAgIH1cbn07XG5cbi8qKlxuICogQ2FsbHMge0BsaW5rIG1vZHVsZTpldmVudGVtaXR0ZXIzLkV2ZW50RW1pdHRlciNvbn0gaW50ZXJuYWxseSBmb3IgdGhlXG4gKiBpbnRlcm5hbCAndGljaycgZXZlbnQuIEl0IGNoZWNrcyBpZiB0aGUgZW1pdHRlciBoYXMgbGlzdGVuZXJzLFxuICogYW5kIGlmIHNvIGl0IHJlcXVlc3RzIGEgbmV3IGFuaW1hdGlvbiBmcmFtZSBhdCB0aGlzIHBvaW50LlxuICpcbiAqIEBwYXJhbSBmbiB7RnVuY3Rpb259IFRoZSBsaXN0ZW5lciBmdW5jdGlvbiB0byBiZSBhZGRlZCBmb3IgdXBkYXRlc1xuICogQHBhcmFtIFtjb250ZXh0XSB7RnVuY3Rpb259IFRoZSBsaXN0ZW5lciBjb250ZXh0XG4gKiBAcmV0dXJucyB7UElYSS50aWNrZXIuVGlja2VyfSB0aGlzXG4gKi9cblRpY2tlci5wcm90b3R5cGUuYWRkID0gZnVuY3Rpb24gYWRkKGZuLCBjb250ZXh0KVxue1xuICAgIHRoaXMuX2VtaXR0ZXIub24oVElDSywgZm4sIGNvbnRleHQpO1xuXG4gICAgdGhpcy5fc3RhcnRJZlBvc3NpYmxlKCk7XG5cbiAgICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogQ2FsbHMge0BsaW5rIG1vZHVsZTpldmVudGVtaXR0ZXIzLkV2ZW50RW1pdHRlciNvbmNlfSBpbnRlcm5hbGx5IGZvciB0aGVcbiAqIGludGVybmFsICd0aWNrJyBldmVudC4gSXQgY2hlY2tzIGlmIHRoZSBlbWl0dGVyIGhhcyBsaXN0ZW5lcnMsXG4gKiBhbmQgaWYgc28gaXQgcmVxdWVzdHMgYSBuZXcgYW5pbWF0aW9uIGZyYW1lIGF0IHRoaXMgcG9pbnQuXG4gKlxuICogQHBhcmFtIGZuIHtGdW5jdGlvbn0gVGhlIGxpc3RlbmVyIGZ1bmN0aW9uIHRvIGJlIGFkZGVkIGZvciBvbmUgdXBkYXRlXG4gKiBAcGFyYW0gW2NvbnRleHRdIHtGdW5jdGlvbn0gVGhlIGxpc3RlbmVyIGNvbnRleHRcbiAqIEByZXR1cm5zIHtQSVhJLnRpY2tlci5UaWNrZXJ9IHRoaXNcbiAqL1xuVGlja2VyLnByb3RvdHlwZS5hZGRPbmNlID0gZnVuY3Rpb24gYWRkT25jZShmbiwgY29udGV4dClcbntcbiAgICB0aGlzLl9lbWl0dGVyLm9uY2UoVElDSywgZm4sIGNvbnRleHQpO1xuXG4gICAgdGhpcy5fc3RhcnRJZlBvc3NpYmxlKCk7XG5cbiAgICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogQ2FsbHMge0BsaW5rIG1vZHVsZTpldmVudGVtaXR0ZXIzLkV2ZW50RW1pdHRlciNvZmZ9IGludGVybmFsbHkgZm9yICd0aWNrJyBldmVudC5cbiAqIEl0IGNoZWNrcyBpZiB0aGUgZW1pdHRlciBoYXMgbGlzdGVuZXJzIGZvciAndGljaycgZXZlbnQuXG4gKiBJZiBpdCBkb2VzLCB0aGVuIGl0IGNhbmNlbHMgdGhlIGFuaW1hdGlvbiBmcmFtZS5cbiAqXG4gKiBAcGFyYW0gW2ZuXSB7RnVuY3Rpb259IFRoZSBsaXN0ZW5lciBmdW5jdGlvbiB0byBiZSByZW1vdmVkXG4gKiBAcGFyYW0gW2NvbnRleHRdIHtGdW5jdGlvbn0gVGhlIGxpc3RlbmVyIGNvbnRleHQgdG8gYmUgcmVtb3ZlZFxuICogQHJldHVybnMge1BJWEkudGlja2VyLlRpY2tlcn0gdGhpc1xuICovXG5UaWNrZXIucHJvdG90eXBlLnJlbW92ZSA9IGZ1bmN0aW9uIHJlbW92ZShmbiwgY29udGV4dClcbntcbiAgICB0aGlzLl9lbWl0dGVyLm9mZihUSUNLLCBmbiwgY29udGV4dCk7XG5cbiAgICBpZiAoIXRoaXMuX2VtaXR0ZXIubGlzdGVuZXJzKFRJQ0ssIHRydWUpKVxuICAgIHtcbiAgICAgICAgdGhpcy5fY2FuY2VsSWZOZWVkZWQoKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogU3RhcnRzIHRoZSB0aWNrZXIuIElmIHRoZSB0aWNrZXIgaGFzIGxpc3RlbmVyc1xuICogYSBuZXcgYW5pbWF0aW9uIGZyYW1lIGlzIHJlcXVlc3RlZCBhdCB0aGlzIHBvaW50LlxuICovXG5UaWNrZXIucHJvdG90eXBlLnN0YXJ0ID0gZnVuY3Rpb24gc3RhcnQoKVxue1xuICAgIGlmICghdGhpcy5zdGFydGVkKVxuICAgIHtcbiAgICAgICAgdGhpcy5zdGFydGVkID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5fcmVxdWVzdElmTmVlZGVkKCk7XG4gICAgfVxufTtcblxuLyoqXG4gKiBTdG9wcyB0aGUgdGlja2VyLiBJZiB0aGUgdGlja2VyIGhhcyByZXF1ZXN0ZWRcbiAqIGFuIGFuaW1hdGlvbiBmcmFtZSBpdCBpcyBjYW5jZWxlZCBhdCB0aGlzIHBvaW50LlxuICovXG5UaWNrZXIucHJvdG90eXBlLnN0b3AgPSBmdW5jdGlvbiBzdG9wKClcbntcbiAgICBpZiAodGhpcy5zdGFydGVkKVxuICAgIHtcbiAgICAgICAgdGhpcy5zdGFydGVkID0gZmFsc2U7XG4gICAgICAgIHRoaXMuX2NhbmNlbElmTmVlZGVkKCk7XG4gICAgfVxufTtcblxuLyoqXG4gKiBUcmlnZ2VycyBhbiB1cGRhdGUuIEFuIHVwZGF0ZSBlbnRhaWxzIHNldHRpbmcgdGhlXG4gKiBjdXJyZW50IHtAbGluayBQSVhJLnRpY2tlci5UaWNrZXIjZWxhcHNlZE1TfSxcbiAqIHRoZSBjdXJyZW50IHtAbGluayBQSVhJLnRpY2tlci5UaWNrZXIjZGVsdGFUaW1lfSxcbiAqIGludm9raW5nIGFsbCBsaXN0ZW5lcnMgd2l0aCBjdXJyZW50IGRlbHRhVGltZSxcbiAqIGFuZCB0aGVuIGZpbmFsbHkgc2V0dGluZyB7QGxpbmsgUElYSS50aWNrZXIuVGlja2VyI2xhc3RUaW1lfVxuICogd2l0aCB0aGUgdmFsdWUgb2YgY3VycmVudFRpbWUgdGhhdCB3YXMgcHJvdmlkZWQuXG4gKiBUaGlzIG1ldGhvZCB3aWxsIGJlIGNhbGxlZCBhdXRvbWF0aWNhbGx5IGJ5IGFuaW1hdGlvblxuICogZnJhbWUgY2FsbGJhY2tzIGlmIHRoZSB0aWNrZXIgaW5zdGFuY2UgaGFzIGJlZW4gc3RhcnRlZFxuICogYW5kIGxpc3RlbmVycyBhcmUgYWRkZWQuXG4gKlxuICogQHBhcmFtIFtjdXJyZW50VGltZT1wZXJmb3JtYW5jZS5ub3coKV0ge0RPTUhpZ2hSZXNUaW1lU3RhbXB8bnVtYmVyfSB0aGUgY3VycmVudCB0aW1lIG9mIGV4ZWN1dGlvblxuICovXG5UaWNrZXIucHJvdG90eXBlLnVwZGF0ZSA9IGZ1bmN0aW9uIHVwZGF0ZShjdXJyZW50VGltZSlcbntcbiAgICB2YXIgZWxhcHNlZE1TO1xuXG4gICAgLy8gQWxsb3cgY2FsbGluZyB1cGRhdGUgZGlyZWN0bHkgd2l0aCBkZWZhdWx0IGN1cnJlbnRUaW1lLlxuICAgIGN1cnJlbnRUaW1lID0gY3VycmVudFRpbWUgfHwgcGVyZm9ybWFuY2Uubm93KCk7XG4gICAgLy8gU2F2ZSB1bmNhcHBlZCBlbGFwc2VkTVMgZm9yIG1lYXN1cmVtZW50XG4gICAgZWxhcHNlZE1TID0gdGhpcy5lbGFwc2VkTVMgPSBjdXJyZW50VGltZSAtIHRoaXMubGFzdFRpbWU7XG5cbiAgICAvLyBjYXAgdGhlIG1pbGxpc2Vjb25kcyBlbGFwc2VkIHVzZWQgZm9yIGRlbHRhVGltZVxuICAgIGlmIChlbGFwc2VkTVMgPiB0aGlzLl9tYXhFbGFwc2VkTVMpXG4gICAge1xuICAgICAgICBlbGFwc2VkTVMgPSB0aGlzLl9tYXhFbGFwc2VkTVM7XG4gICAgfVxuXG4gICAgdGhpcy5kZWx0YVRpbWUgPSBlbGFwc2VkTVMgKiBDT05TVC5UQVJHRVRfRlBNUyAqIHRoaXMuc3BlZWQ7XG5cbiAgICAvLyBJbnZva2UgbGlzdGVuZXJzIGFkZGVkIHRvIGludGVybmFsIGVtaXR0ZXJcbiAgICB0aGlzLl9lbWl0dGVyLmVtaXQoVElDSywgdGhpcy5kZWx0YVRpbWUpO1xuXG4gICAgdGhpcy5sYXN0VGltZSA9IGN1cnJlbnRUaW1lO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBUaWNrZXI7XG4iLCJ2YXIgVGlja2VyID0gcmVxdWlyZSgnLi9UaWNrZXInKTtcblxuLyoqXG4gKiBUaGUgc2hhcmVkIHRpY2tlciBpbnN0YW5jZSB1c2VkIGJ5IHtAbGluayBQSVhJLmV4dHJhcy5Nb3ZpZUNsaXB9LlxuICogYW5kIGJ5IHtAbGluayBQSVhJLmludGVyYWN0aW9uLkludGVyYWN0aW9uTWFuYWdlcn0uXG4gKiBUaGUgcHJvcGVydHkge0BsaW5rIFBJWEkudGlja2VyLlRpY2tlciNhdXRvU3RhcnR9IGlzIHNldCB0byBgdHJ1ZWBcbiAqIGZvciB0aGlzIGluc3RhbmNlLiBQbGVhc2UgZm9sbG93IHRoZSBleGFtcGxlcyBmb3IgdXNhZ2UsIGluY2x1ZGluZ1xuICogaG93IHRvIG9wdC1vdXQgb2YgYXV0by1zdGFydGluZyB0aGUgc2hhcmVkIHRpY2tlci5cbiAqXG4gKiBAZXhhbXBsZVxuICogdmFyIHRpY2tlciA9IFBJWEkudGlja2VyLnNoYXJlZDtcbiAqIC8vIFNldCB0aGlzIHRvIHByZXZlbnQgc3RhcnRpbmcgdGhpcyB0aWNrZXIgd2hlbiBsaXN0ZW5lcnMgYXJlIGFkZGVkLlxuICogLy8gQnkgZGVmYXVsdCB0aGlzIGlzIHRydWUgb25seSBmb3IgdGhlIFBJWEkudGlja2VyLnNoYXJlZCBpbnN0YW5jZS5cbiAqIHRpY2tlci5hdXRvU3RhcnQgPSBmYWxzZTtcbiAqIC8vIEZZSSwgY2FsbCB0aGlzIHRvIGVuc3VyZSB0aGUgdGlja2VyIGlzIHN0b3BwZWQuIEl0IHNob3VsZCBiZSBzdG9wcGVkXG4gKiAvLyBpZiB5b3UgaGF2ZSBub3QgYXR0ZW1wdGVkIHRvIHJlbmRlciBhbnl0aGluZyB5ZXQuXG4gKiB0aWNrZXIuc3RvcCgpO1xuICogLy8gQ2FsbCB0aGlzIHdoZW4geW91IGFyZSByZWFkeSBmb3IgYSBydW5uaW5nIHNoYXJlZCB0aWNrZXIuXG4gKiB0aWNrZXIuc3RhcnQoKTtcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gWW91IG1heSB1c2UgdGhlIHNoYXJlZCB0aWNrZXIgdG8gcmVuZGVyLi4uXG4gKiB2YXIgcmVuZGVyZXIgPSBQSVhJLmF1dG9EZXRlY3RSZW5kZXJlcig4MDAsIDYwMCk7XG4gKiB2YXIgc3RhZ2UgPSBuZXcgUElYSS5Db250YWluZXIoKTtcbiAqIHZhciBpbnRlcmFjdGlvbk1hbmFnZXIgPSBQSVhJLmludGVyYWN0aW9uLkludGVyYWN0aW9uTWFuYWdlcihyZW5kZXJlcik7XG4gKiBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKHJlbmRlcmVyLnZpZXcpO1xuICogdGlja2VyLmFkZChmdW5jdGlvbiAodGltZSkge1xuICogICAgIHJlbmRlcmVyLnJlbmRlcihzdGFnZSk7XG4gKiB9KTtcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gT3IgeW91IGNhbiBqdXN0IHVwZGF0ZSBpdCBtYW51YWxseS5cbiAqIHRpY2tlci5hdXRvU3RhcnQgPSBmYWxzZTtcbiAqIHRpY2tlci5zdG9wKCk7XG4gKiBmdW5jdGlvbiBhbmltYXRlKHRpbWUpIHtcbiAqICAgICB0aWNrZXIudXBkYXRlKHRpbWUpO1xuICogICAgIHJlbmRlcmVyLnJlbmRlcihzdGFnZSk7XG4gKiAgICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKGFuaW1hdGUpO1xuICogfVxuICogYW5pbWF0ZShwZXJmb3JtYW5jZS5ub3coKSk7XG4gKlxuICogQHR5cGUge1BJWEkudGlja2VyLlRpY2tlcn1cbiAqIEBtZW1iZXJvZiBQSVhJLnRpY2tlclxuICovXG52YXIgc2hhcmVkID0gbmV3IFRpY2tlcigpO1xuc2hhcmVkLmF1dG9TdGFydCA9IHRydWU7XG5cbi8qKlxuICogQG5hbWVzcGFjZSBQSVhJLnRpY2tlclxuICovXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgICBzaGFyZWQ6IHNoYXJlZCxcbiAgICBUaWNrZXI6IFRpY2tlclxufTtcbiIsIi8qKlxuICogR2VuZXJpYyBNYXNrIFN0YWNrIGRhdGEgc3RydWN0dXJlXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKi9cblxudmFyIEdMX01BUCA9IHt9O1xuXG5cbnZhciBjcmVhdGVJbmRpY2VzRm9yUXVhZHMgPSBmdW5jdGlvbiAoc2l6ZSlcbntcbiAgICAvLyB0aGUgdG90YWwgbnVtYmVyIG9mIGluZGljZXMgaW4gb3VyIGFycmF5LCB0aGVyZSBhcmUgNiBwb2ludHMgcGVyIHF1YWQuXG4gICBcbiAgICB2YXIgdG90YWxJbmRpY2VzID0gc2l6ZSAqIDY7XG5cbiAgICB2YXIgaW5kaWNlcyA9IG5ldyBVaW50MTZBcnJheSh0b3RhbEluZGljZXMpO1xuXG5cdC8vIGZpbGwgdGhlIGluZGljZXMgd2l0aCB0aGUgcXVhZHMgdG8gZHJhd1xuICAgIGZvciAodmFyIGk9MCwgaj0wOyBpIDwgdG90YWxJbmRpY2VzOyBpICs9IDYsIGogKz0gNClcbiAgICB7XG4gICAgICAgIGluZGljZXNbaSArIDBdID0gaiArIDA7XG4gICAgICAgIGluZGljZXNbaSArIDFdID0gaiArIDE7XG4gICAgICAgIGluZGljZXNbaSArIDJdID0gaiArIDI7XG4gICAgICAgIGluZGljZXNbaSArIDNdID0gaiArIDA7XG4gICAgICAgIGluZGljZXNbaSArIDRdID0gaiArIDI7XG4gICAgICAgIGluZGljZXNbaSArIDVdID0gaiArIDM7XG4gICAgfVxuXG4gICAgcmV0dXJuIGluZGljZXM7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGNyZWF0ZUluZGljZXNGb3JRdWFkczsiLCJ2YXIgQ09OU1QgPSByZXF1aXJlKCcuLi9jb25zdCcpO1xuXG4vKipcbiAqIEBuYW1lc3BhY2UgUElYSS51dGlsc1xuICovXG52YXIgdXRpbHMgPSBtb2R1bGUuZXhwb3J0cyA9IHtcbiAgICBfdWlkOiAwLFxuICAgIF9zYWlkSGVsbG86IGZhbHNlLFxuXG4gICAgRXZlbnRFbWl0dGVyOiAgIHJlcXVpcmUoJ2V2ZW50ZW1pdHRlcjMnKSxcbiAgICBwbHVnaW5UYXJnZXQ6ICAgcmVxdWlyZSgnLi9wbHVnaW5UYXJnZXQnKSxcbiAgICBhc3luYzogICAgICAgICAgcmVxdWlyZSgnYXN5bmMnKSxcblxuICAgIC8qKlxuICAgICAqIEdldHMgdGhlIG5leHQgdW5pcXVlIGlkZW50aWZpZXJcbiAgICAgKlxuICAgICAqIEByZXR1cm4ge251bWJlcn0gVGhlIG5leHQgdW5pcXVlIGlkZW50aWZpZXIgdG8gdXNlLlxuICAgICAqL1xuICAgIHVpZDogZnVuY3Rpb24gKClcbiAgICB7XG4gICAgICAgIHJldHVybiArK3V0aWxzLl91aWQ7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIENvbnZlcnRzIGEgaGV4IGNvbG9yIG51bWJlciB0byBhbiBbUiwgRywgQl0gYXJyYXlcbiAgICAgKlxuICAgICAqIEBwYXJhbSBoZXgge251bWJlcn1cbiAgICAgKiBAcGFyYW0gIHtudW1iZXJbXX0gW291dD1bXV1cbiAgICAgKiBAcmV0dXJuIHtudW1iZXJbXX0gQW4gYXJyYXkgcmVwcmVzZW50aW5nIHRoZSBbUiwgRywgQl0gb2YgdGhlIGNvbG9yLlxuICAgICAqL1xuICAgIGhleDJyZ2I6IGZ1bmN0aW9uIChoZXgsIG91dClcbiAgICB7XG4gICAgICAgIG91dCA9IG91dCB8fCBbXTtcblxuICAgICAgICBvdXRbMF0gPSAoaGV4ID4+IDE2ICYgMHhGRikgLyAyNTU7XG4gICAgICAgIG91dFsxXSA9IChoZXggPj4gOCAmIDB4RkYpIC8gMjU1O1xuICAgICAgICBvdXRbMl0gPSAoaGV4ICYgMHhGRikgLyAyNTU7XG5cbiAgICAgICAgcmV0dXJuIG91dDtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQ29udmVydHMgYSBoZXggY29sb3IgbnVtYmVyIHRvIGEgc3RyaW5nLlxuICAgICAqXG4gICAgICogQHBhcmFtIGhleCB7bnVtYmVyfVxuICAgICAqIEByZXR1cm4ge3N0cmluZ30gVGhlIHN0cmluZyBjb2xvci5cbiAgICAgKi9cbiAgICBoZXgyc3RyaW5nOiBmdW5jdGlvbiAoaGV4KVxuICAgIHtcbiAgICAgICAgaGV4ID0gaGV4LnRvU3RyaW5nKDE2KTtcbiAgICAgICAgaGV4ID0gJzAwMDAwMCcuc3Vic3RyKDAsIDYgLSBoZXgubGVuZ3RoKSArIGhleDtcblxuICAgICAgICByZXR1cm4gJyMnICsgaGV4O1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBDb252ZXJ0cyBhIGNvbG9yIGFzIGFuIFtSLCBHLCBCXSBhcnJheSB0byBhIGhleCBudW1iZXJcbiAgICAgKlxuICAgICAqIEBwYXJhbSByZ2Ige251bWJlcltdfVxuICAgICAqIEByZXR1cm4ge251bWJlcn0gVGhlIGNvbG9yIG51bWJlclxuICAgICAqL1xuICAgIHJnYjJoZXg6IGZ1bmN0aW9uIChyZ2IpXG4gICAge1xuICAgICAgICByZXR1cm4gKChyZ2JbMF0qMjU1IDw8IDE2KSArIChyZ2JbMV0qMjU1IDw8IDgpICsgcmdiWzJdKjI1NSk7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIENoZWNrcyB3aGV0aGVyIHRoZSBDYW52YXMgQmxlbmRNb2RlcyBhcmUgc3VwcG9ydGVkIGJ5IHRoZSBjdXJyZW50IGJyb3dzZXJcbiAgICAgKlxuICAgICAqIEByZXR1cm4ge2Jvb2xlYW59IHdoZXRoZXIgdGhleSBhcmUgc3VwcG9ydGVkXG4gICAgICovXG4gICAgY2FuVXNlTmV3Q2FudmFzQmxlbmRNb2RlczogZnVuY3Rpb24gKClcbiAgICB7XG4gICAgICAgIGlmICh0eXBlb2YgZG9jdW1lbnQgPT09ICd1bmRlZmluZWQnKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgcG5nSGVhZCA9ICdkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQUFRQUFBQUJBUU1BQUFERDhwMk9BQUFBQTFCTVZFWC8nO1xuICAgICAgICB2YXIgcG5nRW5kID0gJ0FBQUFDa2xFUVZRSTEyTmdBQUFBQWdBQjRpRzhNd0FBQUFCSlJVNUVya0pnZ2c9PSc7XG5cbiAgICAgICAgdmFyIG1hZ2VudGEgPSBuZXcgSW1hZ2UoKTtcbiAgICAgICAgbWFnZW50YS5zcmMgPSBwbmdIZWFkICsgJ0FQODA0T2E2JyArIHBuZ0VuZDtcblxuICAgICAgICB2YXIgeWVsbG93ID0gbmV3IEltYWdlKCk7XG4gICAgICAgIHllbGxvdy5zcmMgPSBwbmdIZWFkICsgJy93Q0t4dlJGJyArIHBuZ0VuZDtcblxuICAgICAgICB2YXIgY2FudmFzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnY2FudmFzJyk7XG4gICAgICAgIGNhbnZhcy53aWR0aCA9IDY7XG4gICAgICAgIGNhbnZhcy5oZWlnaHQgPSAxO1xuXG4gICAgICAgIHZhciBjb250ZXh0ID0gY2FudmFzLmdldENvbnRleHQoJzJkJyk7XG4gICAgICAgIGNvbnRleHQuZ2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uID0gJ211bHRpcGx5JztcbiAgICAgICAgY29udGV4dC5kcmF3SW1hZ2UobWFnZW50YSwgMCwgMCk7XG4gICAgICAgIGNvbnRleHQuZHJhd0ltYWdlKHllbGxvdywgMiwgMCk7XG5cbiAgICAgICAgdmFyIGRhdGEgPSBjb250ZXh0LmdldEltYWdlRGF0YSgyLDAsMSwxKS5kYXRhO1xuXG4gICAgICAgIHJldHVybiAoZGF0YVswXSA9PT0gMjU1ICYmIGRhdGFbMV0gPT09IDAgJiYgZGF0YVsyXSA9PT0gMCk7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIEdpdmVuIGEgbnVtYmVyLCB0aGlzIGZ1bmN0aW9uIHJldHVybnMgdGhlIGNsb3Nlc3QgbnVtYmVyIHRoYXQgaXMgYSBwb3dlciBvZiB0d29cbiAgICAgKiB0aGlzIGZ1bmN0aW9uIGlzIHRha2VuIGZyb20gU3RhcmxpbmcgRnJhbWV3b3JrIGFzIGl0cyBwcmV0dHkgbmVhdCA7KVxuICAgICAqXG4gICAgICogQHBhcmFtIG51bWJlciB7bnVtYmVyfVxuICAgICAqIEByZXR1cm4ge251bWJlcn0gdGhlIGNsb3Nlc3QgbnVtYmVyIHRoYXQgaXMgYSBwb3dlciBvZiB0d29cbiAgICAgKi9cbiAgICBnZXROZXh0UG93ZXJPZlR3bzogZnVuY3Rpb24gKG51bWJlcilcbiAgICB7XG4gICAgICAgIC8vIHNlZTogaHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9Qb3dlcl9vZl90d28jRmFzdF9hbGdvcml0aG1fdG9fY2hlY2tfaWZfYV9wb3NpdGl2ZV9udW1iZXJfaXNfYV9wb3dlcl9vZl90d29cbiAgICAgICAgaWYgKG51bWJlciA+IDAgJiYgKG51bWJlciAmIChudW1iZXIgLSAxKSkgPT09IDApXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiBudW1iZXI7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgICB2YXIgcmVzdWx0ID0gMTtcblxuICAgICAgICAgICAgd2hpbGUgKHJlc3VsdCA8IG51bWJlcilcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICByZXN1bHQgPDw9IDE7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogY2hlY2tzIGlmIHRoZSBnaXZlbiB3aWR0aCBhbmQgaGVpZ2h0IG1ha2UgYSBwb3dlciBvZiB0d28gcmVjdGFuZ2xlXG4gICAgICpcbiAgICAgKiBAcGFyYW0gd2lkdGgge251bWJlcn1cbiAgICAgKiBAcGFyYW0gaGVpZ2h0IHtudW1iZXJ9XG4gICAgICogQHJldHVybiB7Ym9vbGVhbn1cbiAgICAgKi9cbiAgICBpc1Bvd2VyT2ZUd286IGZ1bmN0aW9uICh3aWR0aCwgaGVpZ2h0KVxuICAgIHtcbiAgICAgICAgcmV0dXJuICh3aWR0aCA+IDAgJiYgKHdpZHRoICYgKHdpZHRoIC0gMSkpID09PSAwICYmIGhlaWdodCA+IDAgJiYgKGhlaWdodCAmIChoZWlnaHQgLSAxKSkgPT09IDApO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBnZXQgdGhlIHJlc29sdXRpb24gb2YgYW4gYXNzZXQgYnkgbG9va2luZyBmb3IgdGhlIHByZWZpeFxuICAgICAqIHVzZWQgYnkgc3ByaXRlc2hlZXRzIGFuZCBpbWFnZSB1cmxzXG4gICAgICpcbiAgICAgKiBAcGFyYW0gdXJsIHtzdHJpbmd9IHRoZSBpbWFnZSBwYXRoXG4gICAgICogQHJldHVybiB7bnVtYmVyfVxuICAgICAqL1xuICAgIGdldFJlc29sdXRpb25PZlVybDogZnVuY3Rpb24gKHVybClcbiAgICB7XG4gICAgICAgIHZhciByZXNvbHV0aW9uID0gQ09OU1QuUkVUSU5BX1BSRUZJWC5leGVjKHVybCk7XG5cbiAgICAgICAgaWYgKHJlc29sdXRpb24pXG4gICAgICAgIHtcbiAgICAgICAgICAgcmV0dXJuIHBhcnNlRmxvYXQocmVzb2x1dGlvblsxXSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gMTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogTG9ncyBvdXQgdGhlIHZlcnNpb24gYW5kIHJlbmRlcmVyIGluZm9ybWF0aW9uIGZvciB0aGlzIHJ1bm5pbmcgaW5zdGFuY2Ugb2YgUElYSS5cbiAgICAgKiBJZiB5b3UgZG9uJ3Qgd2FudCB0byBzZWUgdGhpcyBtZXNzYWdlIHlvdSBjYW4gc2V0IGBQSVhJLnV0aWxzLl9zYWlkSGVsbG8gPSB0cnVlO2BcbiAgICAgKiBzbyB0aGUgbGlicmFyeSB0aGlua3MgaXQgYWxyZWFkeSBzYWlkIGl0LiBLZWVwIGluIG1pbmQgdGhhdCBkb2luZyB0aGF0IHdpbGwgZm9yZXZlclxuICAgICAqIG1ha2VzIHlvdSBhIGplcmsgZmFjZS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSB0eXBlIC0gVGhlIHN0cmluZyByZW5kZXJlciB0eXBlIHRvIGxvZy5cbiAgICAgKiBAY29uc3RhbnRcbiAgICAgKiBAc3RhdGljXG4gICAgICovXG4gICAgc2F5SGVsbG86IGZ1bmN0aW9uICh0eXBlKVxuICAgIHtcbiAgICAgICAgaWYgKHV0aWxzLl9zYWlkSGVsbG8pXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChuYXZpZ2F0b3IudXNlckFnZW50LnRvTG93ZXJDYXNlKCkuaW5kZXhPZignY2hyb21lJykgPiAtMSlcbiAgICAgICAge1xuICAgICAgICAgICAgdmFyIGFyZ3MgPSBbXG4gICAgICAgICAgICAgICAgJ1xcbiAlYyAlYyAlYyBQaXhpLmpzICcgKyBDT05TVC5WRVJTSU9OICsgJyAtIOKcsCAnICsgdHlwZSArICcg4pywICAlYyAnICsgJyAlYyAnICsgJyBodHRwOi8vd3d3LnBpeGlqcy5jb20vICAlYyAlYyDimaUlY+KZpSVj4pmlIFxcblxcbicsXG4gICAgICAgICAgICAgICAgJ2JhY2tncm91bmQ6ICNmZjY2YTU7IHBhZGRpbmc6NXB4IDA7JyxcbiAgICAgICAgICAgICAgICAnYmFja2dyb3VuZDogI2ZmNjZhNTsgcGFkZGluZzo1cHggMDsnLFxuICAgICAgICAgICAgICAgICdjb2xvcjogI2ZmNjZhNTsgYmFja2dyb3VuZDogIzAzMDMwNzsgcGFkZGluZzo1cHggMDsnLFxuICAgICAgICAgICAgICAgICdiYWNrZ3JvdW5kOiAjZmY2NmE1OyBwYWRkaW5nOjVweCAwOycsXG4gICAgICAgICAgICAgICAgJ2JhY2tncm91bmQ6ICNmZmMzZGM7IHBhZGRpbmc6NXB4IDA7JyxcbiAgICAgICAgICAgICAgICAnYmFja2dyb3VuZDogI2ZmNjZhNTsgcGFkZGluZzo1cHggMDsnLFxuICAgICAgICAgICAgICAgICdjb2xvcjogI2ZmMjQyNDsgYmFja2dyb3VuZDogI2ZmZjsgcGFkZGluZzo1cHggMDsnLFxuICAgICAgICAgICAgICAgICdjb2xvcjogI2ZmMjQyNDsgYmFja2dyb3VuZDogI2ZmZjsgcGFkZGluZzo1cHggMDsnLFxuICAgICAgICAgICAgICAgICdjb2xvcjogI2ZmMjQyNDsgYmFja2dyb3VuZDogI2ZmZjsgcGFkZGluZzo1cHggMDsnXG4gICAgICAgICAgICBdO1xuXG4gICAgICAgICAgICB3aW5kb3cuY29uc29sZS5sb2cuYXBwbHkoY29uc29sZSwgYXJncyk7IC8vanNoaW50IGlnbm9yZTpsaW5lXG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAod2luZG93LmNvbnNvbGUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHdpbmRvdy5jb25zb2xlLmxvZygnUGl4aS5qcyAnICsgQ09OU1QuVkVSU0lPTiArICcgLSAnICsgdHlwZSArICcgLSBodHRwOi8vd3d3LnBpeGlqcy5jb20vJyk7IC8vanNoaW50IGlnbm9yZTpsaW5lXG4gICAgICAgIH1cblxuICAgICAgICB1dGlscy5fc2FpZEhlbGxvID0gdHJ1ZTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogSGVscGVyIGZvciBjaGVja2luZyBmb3Igd2ViZ2wgc3VwcG9ydFxuICAgICAqXG4gICAgICogQHJldHVybiB7Ym9vbGVhbn1cbiAgICAgKi9cbiAgICBpc1dlYkdMU3VwcG9ydGVkOiBmdW5jdGlvbiAoKVxuICAgIHtcbiAgICAgICAgdmFyIGNvbnRleHRPcHRpb25zID0geyBzdGVuY2lsOiB0cnVlIH07XG4gICAgICAgIHRyeVxuICAgICAgICB7XG4gICAgICAgICAgICBpZiAoIXdpbmRvdy5XZWJHTFJlbmRlcmluZ0NvbnRleHQpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB2YXIgY2FudmFzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnY2FudmFzJyksXG4gICAgICAgICAgICAgICAgZ2wgPSBjYW52YXMuZ2V0Q29udGV4dCgnd2ViZ2wnLCBjb250ZXh0T3B0aW9ucykgfHwgY2FudmFzLmdldENvbnRleHQoJ2V4cGVyaW1lbnRhbC13ZWJnbCcsIGNvbnRleHRPcHRpb25zKTtcblxuICAgICAgICAgICAgcmV0dXJuICEhKGdsICYmIGdsLmdldENvbnRleHRBdHRyaWJ1dGVzKCkuc3RlbmNpbCk7XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHNpZ24gb2YgbnVtYmVyXG4gICAgICpcbiAgICAgKiBAcGFyYW0gbiB7bnVtYmVyfVxuICAgICAqIEByZXR1cm5zIHtudW1iZXJ9IDAgaWYgbiBpcyAwLCAtMSBpZiBuIGlzIG5lZ2F0aXZlLCAxIGlmIG4gaSBwb3NpdGl2ZVxuICAgICAqL1xuICAgIHNpZ246IGZ1bmN0aW9uIChuKVxuICAgIHtcbiAgICAgICAgcmV0dXJuIG4gPyAobiA8IDAgPyAtMSA6IDEpIDogMDtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogcmVtb3ZlSXRlbXNcbiAgICAgKlxuICAgICAqIEBwYXJhbSB7YXJyYXl9IGFyciBUaGUgdGFyZ2V0IGFycmF5XG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHN0YXJ0SWR4IFRoZSBpbmRleCB0byBiZWdpbiByZW1vdmluZyBmcm9tIChpbmNsdXNpdmUpXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHJlbW92ZUNvdW50IEhvdyBtYW55IGl0ZW1zIHRvIHJlbW92ZVxuICAgICAqL1xuICAgIHJlbW92ZUl0ZW1zOiBmdW5jdGlvbiAoYXJyLCBzdGFydElkeCwgcmVtb3ZlQ291bnQpXG4gICAge1xuICAgICAgICB2YXIgbGVuZ3RoID0gYXJyLmxlbmd0aDtcblxuICAgICAgICBpZiAoc3RhcnRJZHggPj0gbGVuZ3RoIHx8IHJlbW92ZUNvdW50ID09PSAwKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICByZW1vdmVDb3VudCA9IChzdGFydElkeCtyZW1vdmVDb3VudCA+IGxlbmd0aCA/IGxlbmd0aC1zdGFydElkeCA6IHJlbW92ZUNvdW50KTtcbiAgICAgICAgZm9yICh2YXIgaSA9IHN0YXJ0SWR4LCBsZW4gPSBsZW5ndGgtcmVtb3ZlQ291bnQ7IGkgPCBsZW47ICsraSlcbiAgICAgICAge1xuICAgICAgICAgICAgYXJyW2ldID0gYXJyW2kgKyByZW1vdmVDb3VudF07XG4gICAgICAgIH1cblxuICAgICAgICBhcnIubGVuZ3RoID0gbGVuO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBAdG9kbyBEZXNjcmliZSBwcm9wZXJ0eSB1c2FnZVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgVGV4dHVyZUNhY2hlOiB7fSxcblxuICAgIC8qKlxuICAgICAqIEB0b2RvIERlc2NyaWJlIHByb3BlcnR5IHVzYWdlXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICBCYXNlVGV4dHVyZUNhY2hlOiB7fVxufTtcbiIsIi8qKlxuICogTWl4aW5zIGZ1bmN0aW9uYWxpdHkgdG8gbWFrZSBhbiBvYmplY3QgaGF2ZSBcInBsdWdpbnNcIi5cbiAqXG4gKiBAbWl4aW5cbiAqIEBtZW1iZXJvZiBQSVhJLnV0aWxzXG4gKiBAcGFyYW0gb2JqIHtvYmplY3R9IFRoZSBvYmplY3QgdG8gbWl4IGludG8uXG4gKiBAZXhhbXBsZVxuICogICAgICBmdW5jdGlvbiBNeU9iamVjdCgpIHt9XG4gKlxuICogICAgICBwbHVnaW5UYXJnZXQubWl4aW4oTXlPYmplY3QpO1xuICovXG5mdW5jdGlvbiBwbHVnaW5UYXJnZXQob2JqKVxue1xuICAgIG9iai5fX3BsdWdpbnMgPSB7fTtcblxuICAgIC8qKlxuICAgICAqIEFkZHMgYSBwbHVnaW4gdG8gYW4gb2JqZWN0XG4gICAgICpcbiAgICAgKiBAcGFyYW0gcGx1Z2luTmFtZSB7c3RyaW5nfSBUaGUgZXZlbnRzIHRoYXQgc2hvdWxkIGJlIGxpc3RlZC5cbiAgICAgKiBAcGFyYW0gY3RvciB7RnVuY3Rpb259IFRoZSBjb25zdHJ1Y3RvciBmdW5jdGlvbiBmb3IgdGhlIHBsdWdpbi5cbiAgICAgKi9cbiAgICBvYmoucmVnaXN0ZXJQbHVnaW4gPSBmdW5jdGlvbiAocGx1Z2luTmFtZSwgY3RvcilcbiAgICB7XG4gICAgICAgIG9iai5fX3BsdWdpbnNbcGx1Z2luTmFtZV0gPSBjdG9yO1xuICAgIH07XG5cbiAgICAvKipcbiAgICAgKiBJbnN0YW50aWF0ZXMgYWxsIHRoZSBwbHVnaW5zIG9mIHRoaXMgb2JqZWN0XG4gICAgICpcbiAgICAgKi9cbiAgICBvYmoucHJvdG90eXBlLmluaXRQbHVnaW5zID0gZnVuY3Rpb24gKClcbiAgICB7XG4gICAgICAgIHRoaXMucGx1Z2lucyA9IHRoaXMucGx1Z2lucyB8fCB7fTtcblxuICAgICAgICBmb3IgKHZhciBvIGluIG9iai5fX3BsdWdpbnMpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMucGx1Z2luc1tvXSA9IG5ldyAob2JqLl9fcGx1Z2luc1tvXSkodGhpcyk7XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgLyoqXG4gICAgICogUmVtb3ZlcyBhbGwgdGhlIHBsdWdpbnMgb2YgdGhpcyBvYmplY3RcbiAgICAgKlxuICAgICAqL1xuICAgIG9iai5wcm90b3R5cGUuZGVzdHJveVBsdWdpbnMgPSBmdW5jdGlvbiAoKVxuICAgIHtcbiAgICAgICAgZm9yICh2YXIgbyBpbiB0aGlzLnBsdWdpbnMpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMucGx1Z2luc1tvXS5kZXN0cm95KCk7XG4gICAgICAgICAgICB0aGlzLnBsdWdpbnNbb10gPSBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5wbHVnaW5zID0gbnVsbDtcbiAgICB9O1xufVxuXG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICAgIC8qKlxuICAgICAqIE1peGVzIGluIHRoZSBwcm9wZXJ0aWVzIG9mIHRoZSBwbHVnaW5UYXJnZXQgaW50byBhbm90aGVyIG9iamVjdFxuICAgICAqXG4gICAgICogQHBhcmFtIG9iamVjdCB7b2JqZWN0fSBUaGUgb2JqIHRvIG1peCBpbnRvXG4gICAgICovXG4gICAgbWl4aW46IGZ1bmN0aW9uIG1peGluKG9iailcbiAgICB7XG4gICAgICAgIHBsdWdpblRhcmdldChvYmopO1xuICAgIH1cbn07XG4iLCIvKmdsb2JhbCBjb25zb2xlICovXG52YXIgY29yZSA9IHJlcXVpcmUoJy4vY29yZScpLFxuICAgIG1lc2ggPSByZXF1aXJlKCcuL21lc2gnKSxcbiAgICBleHRyYXMgPSByZXF1aXJlKCcuL2V4dHJhcycpLFxuICAgIGZpbHRlcnMgPSByZXF1aXJlKCcuL2ZpbHRlcnMnKTtcblxuLyoqXG4gKiBAY2xhc3NcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBTcHJpdGVCYXRjaFxuICogQG1lbWJlcm9mIFBJWElcbiAqIEBzZWUgUElYSS5QYXJ0aWNsZUNvbnRhaW5lclxuICogQHRocm93cyB7UmVmZXJlbmNlRXJyb3J9IFNwcml0ZUJhdGNoIGRvZXMgbm90IGV4aXN0IGFueSBtb3JlLCBwbGVhc2UgdXNlIHRoZSBuZXcgUGFydGljbGVDb250YWluZXIgaW5zdGVhZC5cbiAqIEBkZXByZWNhdGVkIHNpbmNlIHZlcnNpb24gMy4wLjBcbiAqL1xuY29yZS5TcHJpdGVCYXRjaCA9IGZ1bmN0aW9uKClcbntcbiAgICB0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoJ1Nwcml0ZUJhdGNoIGRvZXMgbm90IGV4aXN0IGFueSBtb3JlLCBwbGVhc2UgdXNlIHRoZSBuZXcgUGFydGljbGVDb250YWluZXIgaW5zdGVhZC4nKTtcbn07XG5cbi8qKlxuICogQGNsYXNzXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgQXNzZXRMb2FkZXJcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAc2VlIFBJWEkubG9hZGVycy5Mb2FkZXJcbiAqIEB0aHJvd3Mge1JlZmVyZW5jZUVycm9yfSBUaGUgbG9hZGVyIHN5c3RlbSB3YXMgb3ZlcmhhdWxlZCBpbiBwaXhpIHYzLCBwbGVhc2Ugc2VlIHRoZSBuZXcgUElYSS5sb2FkZXJzLkxvYWRlciBjbGFzcy5cbiAqIEBkZXByZWNhdGVkIHNpbmNlIHZlcnNpb24gMy4wLjBcbiAqL1xuY29yZS5Bc3NldExvYWRlciA9IGZ1bmN0aW9uKClcbntcbiAgICB0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoJ1RoZSBsb2FkZXIgc3lzdGVtIHdhcyBvdmVyaGF1bGVkIGluIHBpeGkgdjMsIHBsZWFzZSBzZWUgdGhlIG5ldyBQSVhJLmxvYWRlcnMuTG9hZGVyIGNsYXNzLicpO1xufTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoY29yZSwge1xuXG4gICAgLyoqXG4gICAgICogQGNsYXNzXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAbmFtZSBTdGFnZVxuICAgICAqIEBtZW1iZXJvZiBQSVhJXG4gICAgICogQHNlZSBQSVhJLkNvbnRhaW5lclxuICAgICAqIEBkZXByZWNhdGVkIHNpbmNlIHZlcnNpb24gMy4wLjBcbiAgICAgKi9cbiAgICBTdGFnZToge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uKClcbiAgICAgICAge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKCdZb3UgZG8gbm90IG5lZWQgdG8gdXNlIGEgUElYSSBTdGFnZSBhbnkgbW9yZSwgeW91IGNhbiBzaW1wbHkgcmVuZGVyIGFueSBjb250YWluZXIuJyk7XG4gICAgICAgICAgICByZXR1cm4gY29yZS5Db250YWluZXI7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQGNsYXNzXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAbmFtZSBEaXNwbGF5T2JqZWN0Q29udGFpbmVyXG4gICAgICogQG1lbWJlcm9mIFBJWElcbiAgICAgKiBAc2VlIFBJWEkuQ29udGFpbmVyXG4gICAgICogQGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiAzLjAuMFxuICAgICAqL1xuICAgIERpc3BsYXlPYmplY3RDb250YWluZXI6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbigpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignRGlzcGxheU9iamVjdENvbnRhaW5lciBoYXMgYmVlbiBzaG9ydGVuZWQgdG8gQ29udGFpbmVyLCBwbGVhc2UgdXNlIENvbnRhaW5lciBmcm9tIG5vdyBvbi4nKTtcbiAgICAgICAgICAgIHJldHVybiBjb3JlLkNvbnRhaW5lcjtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBAY2xhc3NcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBuYW1lIFN0cmlwXG4gICAgICogQG1lbWJlcm9mIFBJWElcbiAgICAgKiBAc2VlIFBJWEkubWVzaC5NZXNoXG4gICAgICogQGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiAzLjAuMFxuICAgICAqL1xuICAgIFN0cmlwOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24oKVxuICAgICAgICB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ1RoZSBTdHJpcCBjbGFzcyBoYXMgYmVlbiByZW5hbWVkIHRvIE1lc2ggYW5kIG1vdmVkIHRvIG1lc2guTWVzaCwgcGxlYXNlIHVzZSBtZXNoLk1lc2ggZnJvbSBub3cgb24uJyk7XG4gICAgICAgICAgICByZXR1cm4gbWVzaC5NZXNoO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIEBjbGFzc1xuICAgICAqIEBwcml2YXRlXG4gICAgICogQG5hbWUgUm9wZVxuICAgICAqIEBtZW1iZXJvZiBQSVhJXG4gICAgICogQHNlZSBQSVhJLm1lc2guUm9wZVxuICAgICAqIEBkZXByZWNhdGVkIHNpbmNlIHZlcnNpb24gMy4wLjBcbiAgICAgKi9cbiAgICBSb3BlOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24oKVxuICAgICAgICB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ1RoZSBSb3BlIGNsYXNzIGhhcyBiZWVuIG1vdmVkIHRvIG1lc2guUm9wZSwgcGxlYXNlIHVzZSBtZXNoLlJvcGUgZnJvbSBub3cgb24uJyk7XG4gICAgICAgICAgICByZXR1cm4gbWVzaC5Sb3BlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIEBjbGFzc1xuICAgICAqIEBwcml2YXRlXG4gICAgICogQG5hbWUgTW92aWVDbGlwXG4gICAgICogQG1lbWJlcm9mIFBJWElcbiAgICAgKiBAc2VlIFBJWEkuZXh0cmFzLk1vdmllQ2xpcFxuICAgICAqIEBkZXByZWNhdGVkIHNpbmNlIHZlcnNpb24gMy4wLjBcbiAgICAgKi9cbiAgICBNb3ZpZUNsaXA6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbigpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignVGhlIE1vdmllQ2xpcCBjbGFzcyBoYXMgYmVlbiBtb3ZlZCB0byBleHRyYXMuTW92aWVDbGlwLCBwbGVhc2UgdXNlIGV4dHJhcy5Nb3ZpZUNsaXAgZnJvbSBub3cgb24uJyk7XG4gICAgICAgICAgICByZXR1cm4gZXh0cmFzLk1vdmllQ2xpcDtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBAY2xhc3NcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBuYW1lIFRpbGluZ1Nwcml0ZVxuICAgICAqIEBtZW1iZXJvZiBQSVhJXG4gICAgICogQHNlZSBQSVhJLmV4dHJhcy5UaWxpbmdTcHJpdGVcbiAgICAgKiBAZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDMuMC4wXG4gICAgICovXG4gICAgVGlsaW5nU3ByaXRlOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24oKVxuICAgICAgICB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ1RoZSBUaWxpbmdTcHJpdGUgY2xhc3MgaGFzIGJlZW4gbW92ZWQgdG8gZXh0cmFzLlRpbGluZ1Nwcml0ZSwgcGxlYXNlIHVzZSBleHRyYXMuVGlsaW5nU3ByaXRlIGZyb20gbm93IG9uLicpO1xuICAgICAgICAgICAgcmV0dXJuIGV4dHJhcy5UaWxpbmdTcHJpdGU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQGNsYXNzXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAbmFtZSBCaXRtYXBUZXh0XG4gICAgICogQG1lbWJlcm9mIFBJWElcbiAgICAgKiBAc2VlIFBJWEkuZXh0cmFzLkJpdG1hcFRleHRcbiAgICAgKiBAZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDMuMC4wXG4gICAgICovXG4gICAgQml0bWFwVGV4dDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uKClcbiAgICAgICAge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKCdUaGUgQml0bWFwVGV4dCBjbGFzcyBoYXMgYmVlbiBtb3ZlZCB0byBleHRyYXMuQml0bWFwVGV4dCwgcGxlYXNlIHVzZSBleHRyYXMuQml0bWFwVGV4dCBmcm9tIG5vdyBvbi4nKTtcbiAgICAgICAgICAgIHJldHVybiBleHRyYXMuQml0bWFwVGV4dDtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBAY2xhc3NcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBuYW1lIGJsZW5kTW9kZXNcbiAgICAgKiBAbWVtYmVyb2YgUElYSVxuICAgICAqIEBzZWUgUElYSS5CTEVORF9NT0RFU1xuICAgICAqIEBkZXByZWNhdGVkIHNpbmNlIHZlcnNpb24gMy4wLjBcbiAgICAgKi9cbiAgICBibGVuZE1vZGVzOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24oKVxuICAgICAgICB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ1RoZSBibGVuZE1vZGVzIGhhcyBiZWVuIG1vdmVkIHRvIEJMRU5EX01PREVTLCBwbGVhc2UgdXNlIEJMRU5EX01PREVTIGZyb20gbm93IG9uLicpO1xuICAgICAgICAgICAgcmV0dXJuIGNvcmUuQkxFTkRfTU9ERVM7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQGNsYXNzXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAbmFtZSBzY2FsZU1vZGVzXG4gICAgICogQG1lbWJlcm9mIFBJWElcbiAgICAgKiBAc2VlIFBJWEkuU0NBTEVfTU9ERVNcbiAgICAgKiBAZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDMuMC4wXG4gICAgICovXG4gICAgc2NhbGVNb2Rlczoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uKClcbiAgICAgICAge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKCdUaGUgc2NhbGVNb2RlcyBoYXMgYmVlbiBtb3ZlZCB0byBTQ0FMRV9NT0RFUywgcGxlYXNlIHVzZSBTQ0FMRV9NT0RFUyBmcm9tIG5vdyBvbi4nKTtcbiAgICAgICAgICAgIHJldHVybiBjb3JlLlNDQUxFX01PREVTO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIEBjbGFzc1xuICAgICAqIEBwcml2YXRlXG4gICAgICogQG5hbWUgQmFzZVRleHR1cmVDYWNoZVxuICAgICAqIEBtZW1iZXJvZiBQSVhJXG4gICAgICogQHNlZSBQSVhJLnV0aWxzLkJhc2VUZXh0dXJlQ2FjaGVcbiAgICAgKiBAZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDMuMC4wXG4gICAgICovXG4gICAgQmFzZVRleHR1cmVDYWNoZToge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignVGhlIEJhc2VUZXh0dXJlQ2FjaGUgY2xhc3MgaGFzIGJlZW4gbW92ZWQgdG8gdXRpbHMuQmFzZVRleHR1cmVDYWNoZSwgcGxlYXNlIHVzZSB1dGlscy5CYXNlVGV4dHVyZUNhY2hlIGZyb20gbm93IG9uLicpO1xuICAgICAgICAgICAgcmV0dXJuIGNvcmUudXRpbHMuQmFzZVRleHR1cmVDYWNoZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBAY2xhc3NcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBuYW1lIFRleHR1cmVDYWNoZVxuICAgICAqIEBtZW1iZXJvZiBQSVhJXG4gICAgICogQHNlZSBQSVhJLnV0aWxzLlRleHR1cmVDYWNoZVxuICAgICAqIEBkZXByZWNhdGVkIHNpbmNlIHZlcnNpb24gMy4wLjBcbiAgICAgKi9cbiAgICBUZXh0dXJlQ2FjaGU6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ1RoZSBUZXh0dXJlQ2FjaGUgY2xhc3MgaGFzIGJlZW4gbW92ZWQgdG8gdXRpbHMuVGV4dHVyZUNhY2hlLCBwbGVhc2UgdXNlIHV0aWxzLlRleHR1cmVDYWNoZSBmcm9tIG5vdyBvbi4nKTtcbiAgICAgICAgICAgIHJldHVybiBjb3JlLnV0aWxzLlRleHR1cmVDYWNoZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBAbmFtZXNwYWNlXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAbmFtZSBtYXRoXG4gICAgICogQG1lbWJlcm9mIFBJWElcbiAgICAgKiBAc2VlIFBJWElcbiAgICAgKiBAZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDMuMC42XG4gICAgICovXG4gICAgbWF0aDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignVGhlIG1hdGggbmFtZXNwYWNlIGlzIGRlcHJlY2F0ZWQsIHBsZWFzZSBhY2Nlc3MgbWVtYmVycyBhbHJlYWR5IGFjY2Vzc2libGUgb24gUElYSS4nKTtcbiAgICAgICAgICAgIHJldHVybiBjb3JlO1xuICAgICAgICB9XG4gICAgfVxufSk7XG5cbi8qKlxuICogQG1ldGhvZFxuICogQHByaXZhdGVcbiAqIEBuYW1lIFBJWEkuU3ByaXRlI3NldFRleHR1cmVcbiAqIEBzZWUgUElYSS5TcHJpdGUjdGV4dHVyZVxuICogQGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiAzLjAuMFxuICovXG5jb3JlLlNwcml0ZS5wcm90b3R5cGUuc2V0VGV4dHVyZSA9IGZ1bmN0aW9uKHRleHR1cmUpXG57XG4gICAgdGhpcy50ZXh0dXJlID0gdGV4dHVyZTtcbiAgICBjb25zb2xlLndhcm4oJ3NldFRleHR1cmUgaXMgbm93IGRlcHJlY2F0ZWQsIHBsZWFzZSB1c2UgdGhlIHRleHR1cmUgcHJvcGVydHksIGUuZyA6IHNwcml0ZS50ZXh0dXJlID0gdGV4dHVyZTsnKTtcbn07XG5cbi8qKlxuICogQG1ldGhvZFxuICogQG5hbWUgUElYSS5leHRyYXMuQml0bWFwVGV4dCNzZXRUZXh0XG4gKiBAc2VlIFBJWEkuZXh0cmFzLkJpdG1hcFRleHQjdGV4dFxuICogQGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiAzLjAuMFxuICovXG5leHRyYXMuQml0bWFwVGV4dC5wcm90b3R5cGUuc2V0VGV4dCA9IGZ1bmN0aW9uKHRleHQpXG57XG4gICAgdGhpcy50ZXh0ID0gdGV4dDtcbiAgICBjb25zb2xlLndhcm4oJ3NldFRleHQgaXMgbm93IGRlcHJlY2F0ZWQsIHBsZWFzZSB1c2UgdGhlIHRleHQgcHJvcGVydHksIGUuZyA6IG15Qml0bWFwVGV4dC50ZXh0ID0gXFwnbXkgdGV4dFxcJzsnKTtcbn07XG5cbi8qKlxuICogQG1ldGhvZFxuICogQG5hbWUgUElYSS5UZXh0I3NldFRleHRcbiAqIEBzZWUgUElYSS5UZXh0I3RleHRcbiAqIEBkZXByZWNhdGVkIHNpbmNlIHZlcnNpb24gMy4wLjBcbiAqL1xuY29yZS5UZXh0LnByb3RvdHlwZS5zZXRUZXh0ID0gZnVuY3Rpb24odGV4dClcbntcbiAgICB0aGlzLnRleHQgPSB0ZXh0O1xuICAgIGNvbnNvbGUud2Fybignc2V0VGV4dCBpcyBub3cgZGVwcmVjYXRlZCwgcGxlYXNlIHVzZSB0aGUgdGV4dCBwcm9wZXJ0eSwgZS5nIDogbXlUZXh0LnRleHQgPSBcXCdteSB0ZXh0XFwnOycpO1xufTtcblxuLyoqXG4gKiBAbWV0aG9kXG4gKiBAbmFtZSBQSVhJLlRleHQjc2V0U3R5bGVcbiAqIEBzZWUgUElYSS5UZXh0I3N0eWxlXG4gKiBAZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDMuMC4wXG4gKi9cbmNvcmUuVGV4dC5wcm90b3R5cGUuc2V0U3R5bGUgPSBmdW5jdGlvbihzdHlsZSlcbntcbiAgICB0aGlzLnN0eWxlID0gc3R5bGU7XG4gICAgY29uc29sZS53YXJuKCdzZXRTdHlsZSBpcyBub3cgZGVwcmVjYXRlZCwgcGxlYXNlIHVzZSB0aGUgc3R5bGUgcHJvcGVydHksIGUuZyA6IG15VGV4dC5zdHlsZSA9IHN0eWxlOycpO1xufTtcblxuLyoqXG4gKiBAbWV0aG9kXG4gKiBAbmFtZSBQSVhJLlRleHR1cmUjc2V0RnJhbWVcbiAqIEBzZWUgUElYSS5UZXh0dXJlI3NldEZyYW1lXG4gKiBAZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDMuMC4wXG4gKi9cbmNvcmUuVGV4dHVyZS5wcm90b3R5cGUuc2V0RnJhbWUgPSBmdW5jdGlvbihmcmFtZSlcbntcbiAgICB0aGlzLmZyYW1lID0gZnJhbWU7XG4gICAgY29uc29sZS53YXJuKCdzZXRGcmFtZSBpcyBub3cgZGVwcmVjYXRlZCwgcGxlYXNlIHVzZSB0aGUgZnJhbWUgcHJvcGVydHksIGUuZyA6IG15VGV4dHVyZS5mcmFtZSA9IGZyYW1lOycpO1xufTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoZmlsdGVycywge1xuXG4gICAgLyoqXG4gICAgICogQGNsYXNzXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAbmFtZSBQSVhJLmZpbHRlcnMuQWJzdHJhY3RGaWx0ZXJcbiAgICAgKiBAc2VlIFBJWEkuQWJzdHJhY3RGaWx0ZXJcbiAgICAgKiBAZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDMuMC42XG4gICAgICovXG4gICAgQWJzdHJhY3RGaWx0ZXI6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbigpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignZmlsdGVycy5BYnN0cmFjdEZpbHRlciBpcyBhbiB1bmRvY3VtZW50ZWQgYWxpYXMsIHBsZWFzZSB1c2UgQWJzdHJhY3RGaWx0ZXIgZnJvbSBub3cgb24uJyk7XG4gICAgICAgICAgICByZXR1cm4gY29yZS5BYnN0cmFjdEZpbHRlcjtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBAY2xhc3NcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBuYW1lIFBJWEkuZmlsdGVycy5GWEFBRmlsdGVyXG4gICAgICogQHNlZSBQSVhJLkZYQUFGaWx0ZXJcbiAgICAgKiBAZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDMuMC42XG4gICAgICovXG4gICAgRlhBQUZpbHRlcjoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uKClcbiAgICAgICAge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKCdmaWx0ZXJzLkZYQUFGaWx0ZXIgaXMgYW4gdW5kb2N1bWVudGVkIGFsaWFzLCBwbGVhc2UgdXNlIEZYQUFGaWx0ZXIgZnJvbSBub3cgb24uJyk7XG4gICAgICAgICAgICByZXR1cm4gY29yZS5GWEFBRmlsdGVyO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIEBjbGFzc1xuICAgICAqIEBwcml2YXRlXG4gICAgICogQG5hbWUgUElYSS5maWx0ZXJzLlNwcml0ZU1hc2tGaWx0ZXJcbiAgICAgKiBAc2VlIFBJWEkuU3ByaXRlTWFza0ZpbHRlclxuICAgICAqIEBkZXByZWNhdGVkIHNpbmNlIHZlcnNpb24gMy4wLjZcbiAgICAgKi9cbiAgICBTcHJpdGVNYXNrRmlsdGVyOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24oKVxuICAgICAgICB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ2ZpbHRlcnMuU3ByaXRlTWFza0ZpbHRlciBpcyBhbiB1bmRvY3VtZW50ZWQgYWxpYXMsIHBsZWFzZSB1c2UgU3ByaXRlTWFza0ZpbHRlciBmcm9tIG5vdyBvbi4nKTtcbiAgICAgICAgICAgIHJldHVybiBjb3JlLlNwcml0ZU1hc2tGaWx0ZXI7XG4gICAgICAgIH1cbiAgICB9XG59KTtcblxuLyoqXG4gKiBAbWV0aG9kXG4gKiBAbmFtZSBQSVhJLnV0aWxzLnV1aWRcbiAqIEBzZWUgUElYSS51dGlscy51aWRcbiAqIEBkZXByZWNhdGVkIHNpbmNlIHZlcnNpb24gMy4wLjZcbiAqL1xuY29yZS51dGlscy51dWlkID0gZnVuY3Rpb24gKClcbntcbiAgICBjb25zb2xlLndhcm4oJ3V0aWxzLnV1aWQoKSBpcyBkZXByZWNhdGVkLCBwbGVhc2UgdXNlIHV0aWxzLnVpZCgpIGZyb20gbm93IG9uLicpO1xuICAgIHJldHVybiBjb3JlLnV0aWxzLnVpZCgpO1xufTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vY29yZScpO1xuXG4vKipcbiAqIEEgQml0bWFwVGV4dCBvYmplY3Qgd2lsbCBjcmVhdGUgYSBsaW5lIG9yIG11bHRpcGxlIGxpbmVzIG9mIHRleHQgdXNpbmcgYml0bWFwIGZvbnQuIFRvXG4gKiBzcGxpdCBhIGxpbmUgeW91IGNhbiB1c2UgJ1xcbicsICdcXHInIG9yICdcXHJcXG4nIGluIHlvdXIgc3RyaW5nLiBZb3UgY2FuIGdlbmVyYXRlIHRoZSBmbnQgZmlsZXMgdXNpbmc6XG4gKlxuICogQSBCaXRtYXBUZXh0IGNhbiBvbmx5IGJlIGNyZWF0ZWQgd2hlbiB0aGUgZm9udCBpcyBsb2FkZWRcbiAqXG4gKiBgYGBqc1xuICogLy8gaW4gdGhpcyBjYXNlIHRoZSBmb250IGlzIGluIGEgZmlsZSBjYWxsZWQgJ2Rlc3lyZWwuZm50J1xuICogdmFyIGJpdG1hcFRleHQgPSBuZXcgUElYSS5leHRyYXMuQml0bWFwVGV4dChcInRleHQgdXNpbmcgYSBmYW5jeSBmb250IVwiLCB7Zm9udDogXCIzNXB4IERlc3lyZWxcIiwgYWxpZ246IFwicmlnaHRcIn0pO1xuICogYGBgXG4gKlxuICpcbiAqIGh0dHA6Ly93d3cuYW5nZWxjb2RlLmNvbS9wcm9kdWN0cy9ibWZvbnQvIGZvciB3aW5kb3dzIG9yXG4gKiBodHRwOi8vd3d3LmJtZ2x5cGguY29tLyBmb3IgbWFjLlxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5Db250YWluZXJcbiAqIEBtZW1iZXJvZiBQSVhJLmV4dHJhc1xuICogQHBhcmFtIHRleHQge3N0cmluZ30gVGhlIGNvcHkgdGhhdCB5b3Ugd291bGQgbGlrZSB0aGUgdGV4dCB0byBkaXNwbGF5XG4gKiBAcGFyYW0gc3R5bGUge29iamVjdH0gVGhlIHN0eWxlIHBhcmFtZXRlcnNcbiAqIEBwYXJhbSBzdHlsZS5mb250IHtzdHJpbmd8b2JqZWN0fSBUaGUgZm9udCBkZXNjcmlwdG9yIGZvciB0aGUgb2JqZWN0LCBjYW4gYmUgcGFzc2VkIGFzIGEgc3RyaW5nIG9mIGZvcm1cbiAqICAgICAgXCIyNHB4IEZvbnROYW1lXCIgb3IgXCJGb250TmFtZVwiIG9yIGFzIGFuIG9iamVjdCB3aXRoIGV4cGxpY2l0IG5hbWUvc2l6ZSBwcm9wZXJ0aWVzLlxuICogQHBhcmFtIFtzdHlsZS5mb250Lm5hbWVdIHtzdHJpbmd9IFRoZSBiaXRtYXAgZm9udCBpZFxuICogQHBhcmFtIFtzdHlsZS5mb250LnNpemVdIHtudW1iZXJ9IFRoZSBzaXplIG9mIHRoZSBmb250IGluIHBpeGVscywgZS5nLiAyNFxuICogQHBhcmFtIFtzdHlsZS5hbGlnbj0nbGVmdCddIHtzdHJpbmd9IEFsaWdubWVudCBmb3IgbXVsdGlsaW5lIHRleHQgKCdsZWZ0JywgJ2NlbnRlcicgb3IgJ3JpZ2h0JyksIGRvZXMgbm90IGFmZmVjdFxuICogICAgICBzaW5nbGUgbGluZSB0ZXh0XG4gKiBAcGFyYW0gW3N0eWxlLnRpbnQ9MHhGRkZGRkZdIHtudW1iZXJ9IFRoZSB0aW50IGNvbG9yXG4gKi9cbmZ1bmN0aW9uIEJpdG1hcFRleHQodGV4dCwgc3R5bGUpXG57XG4gICAgY29yZS5Db250YWluZXIuY2FsbCh0aGlzKTtcblxuICAgIHN0eWxlID0gc3R5bGUgfHwge307XG5cbiAgICAvKipcbiAgICAgKiBUaGUgd2lkdGggb2YgdGhlIG92ZXJhbGwgdGV4dCwgZGlmZmVyZW50IGZyb20gZm9udFNpemUsXG4gICAgICogd2hpY2ggaXMgZGVmaW5lZCBpbiB0aGUgc3R5bGUgb2JqZWN0XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQHJlYWRPbmx5XG4gICAgICovXG4gICAgdGhpcy50ZXh0V2lkdGggPSAwO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGhlaWdodCBvZiB0aGUgb3ZlcmFsbCB0ZXh0LCBkaWZmZXJlbnQgZnJvbSBmb250U2l6ZSxcbiAgICAgKiB3aGljaCBpcyBkZWZpbmVkIGluIHRoZSBzdHlsZSBvYmplY3RcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAcmVhZE9ubHlcbiAgICAgKi9cbiAgICB0aGlzLnRleHRIZWlnaHQgPSAwO1xuXG4gICAgLyoqXG4gICAgICogUHJpdmF0ZSB0cmFja2VyIGZvciB0aGUgbGV0dGVyIHNwcml0ZSBwb29sLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5TcHJpdGVbXX1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX2dseXBocyA9IFtdO1xuXG4gICAgLyoqXG4gICAgICogUHJpdmF0ZSB0cmFja2VyIGZvciB0aGUgY3VycmVudCBzdHlsZS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge29iamVjdH1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX2ZvbnQgPSB7XG4gICAgICAgIHRpbnQ6IHN0eWxlLnRpbnQgIT09IHVuZGVmaW5lZCA/IHN0eWxlLnRpbnQgOiAweEZGRkZGRixcbiAgICAgICAgYWxpZ246IHN0eWxlLmFsaWduIHx8ICdsZWZ0JyxcbiAgICAgICAgbmFtZTogbnVsbCxcbiAgICAgICAgc2l6ZTogMFxuICAgIH07XG5cbiAgICAvKipcbiAgICAgKiBQcml2YXRlIHRyYWNrZXIgZm9yIHRoZSBjdXJyZW50IGZvbnQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtvYmplY3R9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLmZvbnQgPSBzdHlsZS5mb250OyAvLyBydW4gZm9udCBzZXR0ZXJcblxuICAgIC8qKlxuICAgICAqIFByaXZhdGUgdHJhY2tlciBmb3IgdGhlIGN1cnJlbnQgdGV4dC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge3N0cmluZ31cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX3RleHQgPSB0ZXh0O1xuXG4gICAgLyoqXG4gICAgICogVGhlIG1heCB3aWR0aCBvZiB0aGlzIGJpdG1hcCB0ZXh0IGluIHBpeGVscy4gSWYgdGhlIHRleHQgcHJvdmlkZWQgaXMgbG9uZ2VyIHRoYW4gdGhlIHZhbHVlIHByb3ZpZGVkLCBsaW5lIGJyZWFrcyB3aWxsIGJlIGF1dG9tYXRpY2FsbHkgaW5zZXJ0ZWQgaW4gdGhlIGxhc3Qgd2hpdGVzcGFjZS5cbiAgICAgKiBEaXNhYmxlIGJ5IHNldHRpbmcgdmFsdWUgdG8gMFxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMubWF4V2lkdGggPSAwO1xuXG4gICAgLyoqXG4gICAgICogVGhlIG1heCBsaW5lIGhlaWdodC4gVGhpcyBpcyB1c2VmdWwgd2hlbiB0cnlpbmcgdG8gdXNlIHRoZSB0b3RhbCBoZWlnaHQgb2YgdGhlIFRleHQsIGllOiB3aGVuIHRyeWluZyB0byB2ZXJ0aWNhbGx5IGFsaWduLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMubWF4TGluZUhlaWdodCA9IDA7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgZGlydHkgc3RhdGUgb2YgdGhpcyBvYmplY3QuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqL1xuICAgIHRoaXMuZGlydHkgPSBmYWxzZTtcblxuICAgIHRoaXMudXBkYXRlVGV4dCgpO1xufVxuXG4vLyBjb25zdHJ1Y3RvclxuQml0bWFwVGV4dC5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuQ29udGFpbmVyLnByb3RvdHlwZSk7XG5CaXRtYXBUZXh0LnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IEJpdG1hcFRleHQ7XG5tb2R1bGUuZXhwb3J0cyA9IEJpdG1hcFRleHQ7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKEJpdG1hcFRleHQucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogVGhlIHRpbnQgb2YgdGhlIEJpdG1hcFRleHQgb2JqZWN0XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZXh0cmFzLkJpdG1hcFRleHQjXG4gICAgICovXG4gICAgdGludDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9mb250LnRpbnQ7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLl9mb250LnRpbnQgPSAodHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJyAmJiB2YWx1ZSA+PSAwKSA/IHZhbHVlIDogMHhGRkZGRkY7XG5cbiAgICAgICAgICAgIHRoaXMuZGlydHkgPSB0cnVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFRoZSBhbGlnbm1lbnQgb2YgdGhlIEJpdG1hcFRleHQgb2JqZWN0XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtzdHJpbmd9XG4gICAgICogQGRlZmF1bHQgJ2xlZnQnXG4gICAgICogQG1lbWJlcm9mIFBJWEkuZXh0cmFzLkJpdG1hcFRleHQjXG4gICAgICovXG4gICAgYWxpZ246IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fZm9udC5hbGlnbjtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuX2ZvbnQuYWxpZ24gPSB2YWx1ZSB8fCAnbGVmdCc7XG5cbiAgICAgICAgICAgIHRoaXMuZGlydHkgPSB0cnVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFRoZSBmb250IGRlc2NyaXB0b3Igb2YgdGhlIEJpdG1hcFRleHQgb2JqZWN0XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtGb250fVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmV4dHJhcy5CaXRtYXBUZXh0I1xuICAgICAqL1xuICAgIGZvbnQ6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fZm9udDtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGlmICghdmFsdWUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICAgICAgdmFsdWUgPSB2YWx1ZS5zcGxpdCgnICcpO1xuXG4gICAgICAgICAgICAgICAgdGhpcy5fZm9udC5uYW1lID0gdmFsdWUubGVuZ3RoID09PSAxID8gdmFsdWVbMF0gOiB2YWx1ZS5zbGljZSgxKS5qb2luKCcgJyk7XG4gICAgICAgICAgICAgICAgdGhpcy5fZm9udC5zaXplID0gdmFsdWUubGVuZ3RoID49IDIgPyBwYXJzZUludCh2YWx1ZVswXSwgMTApIDogQml0bWFwVGV4dC5mb250c1t0aGlzLl9mb250Lm5hbWVdLnNpemU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9mb250Lm5hbWUgPSB2YWx1ZS5uYW1lO1xuICAgICAgICAgICAgICAgIHRoaXMuX2ZvbnQuc2l6ZSA9IHR5cGVvZiB2YWx1ZS5zaXplID09PSAnbnVtYmVyJyA/IHZhbHVlLnNpemUgOiBwYXJzZUludCh2YWx1ZS5zaXplLCAxMCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuZGlydHkgPSB0cnVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFRoZSB0ZXh0IG9mIHRoZSBCaXRtYXBUZXh0IG9iamVjdFxuICAgICAqXG4gICAgICogQG1lbWJlciB7c3RyaW5nfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmV4dHJhcy5CaXRtYXBUZXh0I1xuICAgICAqL1xuICAgIHRleHQ6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fdGV4dDtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHZhbHVlID0gdmFsdWUudG9TdHJpbmcoKSB8fCAnICc7XG4gICAgICAgICAgICBpZiAodGhpcy5fdGV4dCA9PT0gdmFsdWUpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5fdGV4dCA9IHZhbHVlO1xuICAgICAgICAgICAgdGhpcy5kaXJ0eSA9IHRydWU7XG4gICAgICAgIH1cbiAgICB9XG59KTtcblxuLyoqXG4gKiBSZW5kZXJzIHRleHQgYW5kIHVwZGF0ZXMgaXQgd2hlbiBuZWVkZWRcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5CaXRtYXBUZXh0LnByb3RvdHlwZS51cGRhdGVUZXh0ID0gZnVuY3Rpb24gKClcbntcbiAgICB2YXIgZGF0YSA9IEJpdG1hcFRleHQuZm9udHNbdGhpcy5fZm9udC5uYW1lXTtcbiAgICB2YXIgcG9zID0gbmV3IGNvcmUuUG9pbnQoKTtcbiAgICB2YXIgcHJldkNoYXJDb2RlID0gbnVsbDtcbiAgICB2YXIgY2hhcnMgPSBbXTtcbiAgICB2YXIgbGFzdExpbmVXaWR0aCA9IDA7XG4gICAgdmFyIG1heExpbmVXaWR0aCA9IDA7XG4gICAgdmFyIGxpbmVXaWR0aHMgPSBbXTtcbiAgICB2YXIgbGluZSA9IDA7XG4gICAgdmFyIHNjYWxlID0gdGhpcy5fZm9udC5zaXplIC8gZGF0YS5zaXplO1xuICAgIHZhciBsYXN0U3BhY2UgPSAtMTtcbiAgICB2YXIgbWF4TGluZUhlaWdodCA9IDA7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMudGV4dC5sZW5ndGg7IGkrKylcbiAgICB7XG4gICAgICAgIHZhciBjaGFyQ29kZSA9IHRoaXMudGV4dC5jaGFyQ29kZUF0KGkpO1xuICAgICAgICBsYXN0U3BhY2UgPSAvKFxccykvLnRlc3QodGhpcy50ZXh0LmNoYXJBdChpKSkgPyBpIDogbGFzdFNwYWNlO1xuXG4gICAgICAgIGlmICgvKD86XFxyXFxufFxccnxcXG4pLy50ZXN0KHRoaXMudGV4dC5jaGFyQXQoaSkpKVxuICAgICAgICB7XG4gICAgICAgICAgICBsaW5lV2lkdGhzLnB1c2gobGFzdExpbmVXaWR0aCk7XG4gICAgICAgICAgICBtYXhMaW5lV2lkdGggPSBNYXRoLm1heChtYXhMaW5lV2lkdGgsIGxhc3RMaW5lV2lkdGgpO1xuICAgICAgICAgICAgbGluZSsrO1xuXG4gICAgICAgICAgICBwb3MueCA9IDA7XG4gICAgICAgICAgICBwb3MueSArPSBkYXRhLmxpbmVIZWlnaHQ7XG4gICAgICAgICAgICBwcmV2Q2hhckNvZGUgPSBudWxsO1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAobGFzdFNwYWNlICE9PSAtMSAmJiB0aGlzLm1heFdpZHRoID4gMCAmJiBwb3MueCAqIHNjYWxlID4gdGhpcy5tYXhXaWR0aClcbiAgICAgICAge1xuICAgICAgICAgICAgY29yZS51dGlscy5yZW1vdmVJdGVtcyhjaGFycywgbGFzdFNwYWNlLCBpIC0gbGFzdFNwYWNlKTtcbiAgICAgICAgICAgIGkgPSBsYXN0U3BhY2U7XG4gICAgICAgICAgICBsYXN0U3BhY2UgPSAtMTtcblxuICAgICAgICAgICAgbGluZVdpZHRocy5wdXNoKGxhc3RMaW5lV2lkdGgpO1xuICAgICAgICAgICAgbWF4TGluZVdpZHRoID0gTWF0aC5tYXgobWF4TGluZVdpZHRoLCBsYXN0TGluZVdpZHRoKTtcbiAgICAgICAgICAgIGxpbmUrKztcblxuICAgICAgICAgICAgcG9zLnggPSAwO1xuICAgICAgICAgICAgcG9zLnkgKz0gZGF0YS5saW5lSGVpZ2h0O1xuICAgICAgICAgICAgcHJldkNoYXJDb2RlID0gbnVsbDtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGNoYXJEYXRhID0gZGF0YS5jaGFyc1tjaGFyQ29kZV07XG5cbiAgICAgICAgaWYgKCFjaGFyRGF0YSlcbiAgICAgICAge1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAocHJldkNoYXJDb2RlICYmIGNoYXJEYXRhLmtlcm5pbmdbcHJldkNoYXJDb2RlXSlcbiAgICAgICAge1xuICAgICAgICAgICAgcG9zLnggKz0gY2hhckRhdGEua2VybmluZ1twcmV2Q2hhckNvZGVdO1xuICAgICAgICB9XG5cbiAgICAgICAgY2hhcnMucHVzaCh7dGV4dHVyZTpjaGFyRGF0YS50ZXh0dXJlLCBsaW5lOiBsaW5lLCBjaGFyQ29kZTogY2hhckNvZGUsIHBvc2l0aW9uOiBuZXcgY29yZS5Qb2ludChwb3MueCArIGNoYXJEYXRhLnhPZmZzZXQsIHBvcy55ICsgY2hhckRhdGEueU9mZnNldCl9KTtcbiAgICAgICAgbGFzdExpbmVXaWR0aCA9IHBvcy54ICsgKGNoYXJEYXRhLnRleHR1cmUud2lkdGggKyBjaGFyRGF0YS54T2Zmc2V0KTtcbiAgICAgICAgcG9zLnggKz0gY2hhckRhdGEueEFkdmFuY2U7XG4gICAgICAgIG1heExpbmVIZWlnaHQgPSBNYXRoLm1heChtYXhMaW5lSGVpZ2h0LCAoY2hhckRhdGEueU9mZnNldCArIGNoYXJEYXRhLnRleHR1cmUuaGVpZ2h0KSk7XG4gICAgICAgIHByZXZDaGFyQ29kZSA9IGNoYXJDb2RlO1xuICAgIH1cblxuICAgIGxpbmVXaWR0aHMucHVzaChsYXN0TGluZVdpZHRoKTtcbiAgICBtYXhMaW5lV2lkdGggPSBNYXRoLm1heChtYXhMaW5lV2lkdGgsIGxhc3RMaW5lV2lkdGgpO1xuXG4gICAgdmFyIGxpbmVBbGlnbk9mZnNldHMgPSBbXTtcblxuICAgIGZvciAoaSA9IDA7IGkgPD0gbGluZTsgaSsrKVxuICAgIHtcbiAgICAgICAgdmFyIGFsaWduT2Zmc2V0ID0gMDtcblxuICAgICAgICBpZiAodGhpcy5fZm9udC5hbGlnbiA9PT0gJ3JpZ2h0JylcbiAgICAgICAge1xuICAgICAgICAgICAgYWxpZ25PZmZzZXQgPSBtYXhMaW5lV2lkdGggLSBsaW5lV2lkdGhzW2ldO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHRoaXMuX2ZvbnQuYWxpZ24gPT09ICdjZW50ZXInKVxuICAgICAgICB7XG4gICAgICAgICAgICBhbGlnbk9mZnNldCA9IChtYXhMaW5lV2lkdGggLSBsaW5lV2lkdGhzW2ldKSAvIDI7XG4gICAgICAgIH1cblxuICAgICAgICBsaW5lQWxpZ25PZmZzZXRzLnB1c2goYWxpZ25PZmZzZXQpO1xuICAgIH1cblxuICAgIHZhciBsZW5DaGFycyA9IGNoYXJzLmxlbmd0aDtcbiAgICB2YXIgdGludCA9IHRoaXMudGludDtcblxuICAgIGZvciAoaSA9IDA7IGkgPCBsZW5DaGFyczsgaSsrKVxuICAgIHtcbiAgICAgICAgdmFyIGMgPSB0aGlzLl9nbHlwaHNbaV07IC8vIGdldCB0aGUgbmV4dCBnbHlwaCBzcHJpdGVcblxuICAgICAgICBpZiAoYylcbiAgICAgICAge1xuICAgICAgICAgICAgYy50ZXh0dXJlID0gY2hhcnNbaV0udGV4dHVyZTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgIHtcbiAgICAgICAgICAgIGMgPSBuZXcgY29yZS5TcHJpdGUoY2hhcnNbaV0udGV4dHVyZSk7XG4gICAgICAgICAgICB0aGlzLl9nbHlwaHMucHVzaChjKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGMucG9zaXRpb24ueCA9IChjaGFyc1tpXS5wb3NpdGlvbi54ICsgbGluZUFsaWduT2Zmc2V0c1tjaGFyc1tpXS5saW5lXSkgKiBzY2FsZTtcbiAgICAgICAgYy5wb3NpdGlvbi55ID0gY2hhcnNbaV0ucG9zaXRpb24ueSAqIHNjYWxlO1xuICAgICAgICBjLnNjYWxlLnggPSBjLnNjYWxlLnkgPSBzY2FsZTtcbiAgICAgICAgYy50aW50ID0gdGludDtcblxuICAgICAgICBpZiAoIWMucGFyZW50KVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmFkZENoaWxkKGMpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gcmVtb3ZlIHVubmVjZXNzYXJ5IGNoaWxkcmVuLlxuICAgIGZvciAoaSA9IGxlbkNoYXJzOyBpIDwgdGhpcy5fZ2x5cGhzLmxlbmd0aDsgKytpKVxuICAgIHtcbiAgICAgICAgdGhpcy5yZW1vdmVDaGlsZCh0aGlzLl9nbHlwaHNbaV0pO1xuICAgIH1cblxuICAgIHRoaXMudGV4dFdpZHRoID0gbWF4TGluZVdpZHRoICogc2NhbGU7XG4gICAgdGhpcy50ZXh0SGVpZ2h0ID0gKHBvcy55ICsgZGF0YS5saW5lSGVpZ2h0KSAqIHNjYWxlO1xuICAgIHRoaXMubWF4TGluZUhlaWdodCA9IG1heExpbmVIZWlnaHQgKiBzY2FsZTtcbn07XG5cbi8qKlxuICogVXBkYXRlcyB0aGUgdHJhbnNmb3JtIG9mIHRoaXMgb2JqZWN0XG4gKlxuICogQHByaXZhdGVcbiAqL1xuQml0bWFwVGV4dC5wcm90b3R5cGUudXBkYXRlVHJhbnNmb3JtID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLnZhbGlkYXRlKCk7XG4gICAgdGhpcy5jb250YWluZXJVcGRhdGVUcmFuc2Zvcm0oKTtcbn07XG5cbi8qKlxuICogVmFsaWRhdGVzIHRleHQgYmVmb3JlIGNhbGxpbmcgcGFyZW50J3MgZ2V0TG9jYWxCb3VuZHNcbiAqXG4gKiBAcmV0dXJuIHtQSVhJLlJlY3RhbmdsZX0gVGhlIHJlY3Rhbmd1bGFyIGJvdW5kaW5nIGFyZWFcbiAqL1xuXG5CaXRtYXBUZXh0LnByb3RvdHlwZS5nZXRMb2NhbEJvdW5kcyA9IGZ1bmN0aW9uKClcbntcbiAgICB0aGlzLnZhbGlkYXRlKCk7XG4gICAgcmV0dXJuIGNvcmUuQ29udGFpbmVyLnByb3RvdHlwZS5nZXRMb2NhbEJvdW5kcy5jYWxsKHRoaXMpO1xufTtcblxuLyoqXG4gKiBVcGRhdGVzIHRleHQgd2hlbiBuZWVkZWRcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5CaXRtYXBUZXh0LnByb3RvdHlwZS52YWxpZGF0ZSA9IGZ1bmN0aW9uKClcbntcbiAgICBpZiAodGhpcy5kaXJ0eSlcbiAgICB7XG4gICAgICAgIHRoaXMudXBkYXRlVGV4dCgpO1xuICAgICAgICB0aGlzLmRpcnR5ID0gZmFsc2U7XG4gICAgfVxufTtcblxuQml0bWFwVGV4dC5mb250cyA9IHt9O1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi9jb3JlJyk7XG5cbi8qKlxuICogQSBNb3ZpZUNsaXAgaXMgYSBzaW1wbGUgd2F5IHRvIGRpc3BsYXkgYW4gYW5pbWF0aW9uIGRlcGljdGVkIGJ5IGEgbGlzdCBvZiB0ZXh0dXJlcy5cbiAqXG4gKiBgYGBqc1xuICogdmFyIGFsaWVuSW1hZ2VzID0gW1wiaW1hZ2Vfc2VxdWVuY2VfMDEucG5nXCIsXCJpbWFnZV9zZXF1ZW5jZV8wMi5wbmdcIixcImltYWdlX3NlcXVlbmNlXzAzLnBuZ1wiLFwiaW1hZ2Vfc2VxdWVuY2VfMDQucG5nXCJdO1xuICogdmFyIHRleHR1cmVBcnJheSA9IFtdO1xuICpcbiAqIGZvciAodmFyIGk9MDsgaSA8IDQ7IGkrKylcbiAqIHtcbiAqICAgICAgdmFyIHRleHR1cmUgPSBQSVhJLlRleHR1cmUuZnJvbUltYWdlKGFsaWVuSW1hZ2VzW2ldKTtcbiAqICAgICAgdGV4dHVyZUFycmF5LnB1c2godGV4dHVyZSk7XG4gKiB9O1xuICpcbiAqIHZhciBtYyA9IG5ldyBQSVhJLk1vdmllQ2xpcCh0ZXh0dXJlQXJyYXkpO1xuICogYGBgXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLlNwcml0ZVxuICogQG1lbWJlcm9mIFBJWEkuZXh0cmFzXG4gKiBAcGFyYW0gdGV4dHVyZXMge1BJWEkuVGV4dHVyZVtdfE9iamVjdFtdfSBhbiBhcnJheSBvZiB7QGxpbmsgUElYSS5UZXh0dXJlfSBvciBmcmFtZSBvYmplY3RzIHRoYXQgbWFrZSB1cCB0aGUgYW5pbWF0aW9uXG4gKiBAcGFyYW0gdGV4dHVyZXNbXS50ZXh0dXJlIHtQSVhJLlRleHR1cmV9IHRoZSB7QGxpbmsgUElYSS5UZXh0dXJlfSBvZiB0aGUgZnJhbWVcbiAqIEBwYXJhbSB0ZXh0dXJlc1tdLnRpbWUge251bWJlcn0gdGhlIGR1cmF0aW9uIG9mIHRoZSBmcmFtZSBpbiBtc1xuICovXG5mdW5jdGlvbiBNb3ZpZUNsaXAodGV4dHVyZXMpXG57XG4gICAgY29yZS5TcHJpdGUuY2FsbCh0aGlzLCB0ZXh0dXJlc1swXSBpbnN0YW5jZW9mIGNvcmUuVGV4dHVyZSA/IHRleHR1cmVzWzBdIDogdGV4dHVyZXNbMF0udGV4dHVyZSk7XG5cbiAgICAvKipcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX3RleHR1cmVzID0gbnVsbDtcblxuICAgIC8qKlxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fZHVyYXRpb25zID0gbnVsbDtcblxuICAgIHRoaXMudGV4dHVyZXMgPSB0ZXh0dXJlcztcblxuICAgIC8qKlxuICAgICAqIFRoZSBzcGVlZCB0aGF0IHRoZSBNb3ZpZUNsaXAgd2lsbCBwbGF5IGF0LiBIaWdoZXIgaXMgZmFzdGVyLCBsb3dlciBpcyBzbG93ZXJcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAxXG4gICAgICovXG4gICAgdGhpcy5hbmltYXRpb25TcGVlZCA9IDE7XG5cbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIG9yIG5vdCB0aGUgbW92aWUgY2xpcCByZXBlYXRzIGFmdGVyIHBsYXlpbmcuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqIEBkZWZhdWx0IHRydWVcbiAgICAgKi9cbiAgICB0aGlzLmxvb3AgPSB0cnVlO1xuXG4gICAgLyoqXG4gICAgICogRnVuY3Rpb24gdG8gY2FsbCB3aGVuIGEgTW92aWVDbGlwIGZpbmlzaGVzIHBsYXlpbmdcbiAgICAgKlxuICAgICAqIEBtZXRob2RcbiAgICAgKiBAbWVtYmVyb2YgUElYSS5leHRyYXMuTW92aWVDbGlwI1xuICAgICAqL1xuICAgIHRoaXMub25Db21wbGV0ZSA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBFbGFwc2VkIHRpbWUgc2luY2UgYW5pbWF0aW9uIGhhcyBiZWVuIHN0YXJ0ZWQsIHVzZWQgaW50ZXJuYWxseSB0byBkaXNwbGF5IGN1cnJlbnQgdGV4dHVyZVxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fY3VycmVudFRpbWUgPSAwO1xuXG4gICAgLyoqXG4gICAgICogSW5kaWNhdGVzIGlmIHRoZSBNb3ZpZUNsaXAgaXMgY3VycmVudGx5IHBsYXlpbmdcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICogQHJlYWRvbmx5XG4gICAgICovXG4gICAgdGhpcy5wbGF5aW5nID0gZmFsc2U7XG59XG5cbi8vIGNvbnN0cnVjdG9yXG5Nb3ZpZUNsaXAucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShjb3JlLlNwcml0ZS5wcm90b3R5cGUpO1xuTW92aWVDbGlwLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IE1vdmllQ2xpcDtcbm1vZHVsZS5leHBvcnRzID0gTW92aWVDbGlwO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhNb3ZpZUNsaXAucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogdG90YWxGcmFtZXMgaXMgdGhlIHRvdGFsIG51bWJlciBvZiBmcmFtZXMgaW4gdGhlIE1vdmllQ2xpcC4gVGhpcyBpcyB0aGUgc2FtZSBhcyBudW1iZXIgb2YgdGV4dHVyZXNcbiAgICAgKiBhc3NpZ25lZCB0byB0aGUgTW92aWVDbGlwLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmV4dHJhcy5Nb3ZpZUNsaXAjXG4gICAgICogQGRlZmF1bHQgMFxuICAgICAqIEByZWFkb25seVxuICAgICAqL1xuICAgIHRvdGFsRnJhbWVzOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24oKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fdGV4dHVyZXMubGVuZ3RoO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFRoZSBhcnJheSBvZiB0ZXh0dXJlcyB1c2VkIGZvciB0aGlzIE1vdmllQ2xpcFxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5UZXh0dXJlW119XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZXh0cmFzLk1vdmllQ2xpcCNcbiAgICAgKlxuICAgICAqL1xuICAgIHRleHR1cmVzOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3RleHR1cmVzO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgaWYodmFsdWVbMF0gaW5zdGFuY2VvZiBjb3JlLlRleHR1cmUpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdGhpcy5fdGV4dHVyZXMgPSB2YWx1ZTtcbiAgICAgICAgICAgICAgICB0aGlzLl9kdXJhdGlvbnMgPSBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHRoaXMuX3RleHR1cmVzID0gW107XG4gICAgICAgICAgICAgICAgdGhpcy5fZHVyYXRpb25zID0gW107XG4gICAgICAgICAgICAgICAgZm9yKHZhciBpID0gMDsgaSA8IHZhbHVlLmxlbmd0aDsgaSsrKVxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fdGV4dHVyZXMucHVzaCh2YWx1ZVtpXS50ZXh0dXJlKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fZHVyYXRpb25zLnB1c2godmFsdWVbaV0udGltZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICogVGhlIE1vdmllQ2xpcHMgY3VycmVudCBmcmFtZSBpbmRleFxuICAgICpcbiAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAqIEBtZW1iZXJvZiBQSVhJLmV4dHJhcy5Nb3ZpZUNsaXAjXG4gICAgKiBAcmVhZG9ubHlcbiAgICAqL1xuICAgIGN1cnJlbnRGcmFtZToge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHZhciBjdXJyZW50RnJhbWUgPSBNYXRoLmZsb29yKHRoaXMuX2N1cnJlbnRUaW1lKSAlIHRoaXMuX3RleHR1cmVzLmxlbmd0aDtcbiAgICAgICAgICAgIGlmIChjdXJyZW50RnJhbWUgPCAwKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGN1cnJlbnRGcmFtZSArPSB0aGlzLl90ZXh0dXJlcy5sZW5ndGg7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gY3VycmVudEZyYW1lO1xuICAgICAgICB9XG4gICAgfVxuXG59KTtcblxuLyoqXG4gKiBTdG9wcyB0aGUgTW92aWVDbGlwXG4gKlxuICovXG5Nb3ZpZUNsaXAucHJvdG90eXBlLnN0b3AgPSBmdW5jdGlvbiAoKVxue1xuICAgIGlmKCF0aGlzLnBsYXlpbmcpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5wbGF5aW5nID0gZmFsc2U7XG4gICAgY29yZS50aWNrZXIuc2hhcmVkLnJlbW92ZSh0aGlzLnVwZGF0ZSwgdGhpcyk7XG59O1xuXG4vKipcbiAqIFBsYXlzIHRoZSBNb3ZpZUNsaXBcbiAqXG4gKi9cbk1vdmllQ2xpcC5wcm90b3R5cGUucGxheSA9IGZ1bmN0aW9uICgpXG57XG4gICAgaWYodGhpcy5wbGF5aW5nKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMucGxheWluZyA9IHRydWU7XG4gICAgY29yZS50aWNrZXIuc2hhcmVkLmFkZCh0aGlzLnVwZGF0ZSwgdGhpcyk7XG59O1xuXG4vKipcbiAqIFN0b3BzIHRoZSBNb3ZpZUNsaXAgYW5kIGdvZXMgdG8gYSBzcGVjaWZpYyBmcmFtZVxuICpcbiAqIEBwYXJhbSBmcmFtZU51bWJlciB7bnVtYmVyfSBmcmFtZSBpbmRleCB0byBzdG9wIGF0XG4gKi9cbk1vdmllQ2xpcC5wcm90b3R5cGUuZ290b0FuZFN0b3AgPSBmdW5jdGlvbiAoZnJhbWVOdW1iZXIpXG57XG4gICAgdGhpcy5zdG9wKCk7XG5cbiAgICB0aGlzLl9jdXJyZW50VGltZSA9IGZyYW1lTnVtYmVyO1xuXG4gICAgdGhpcy5fdGV4dHVyZSA9IHRoaXMuX3RleHR1cmVzW3RoaXMuY3VycmVudEZyYW1lXTtcbn07XG5cbi8qKlxuICogR29lcyB0byBhIHNwZWNpZmljIGZyYW1lIGFuZCBiZWdpbnMgcGxheWluZyB0aGUgTW92aWVDbGlwXG4gKlxuICogQHBhcmFtIGZyYW1lTnVtYmVyIHtudW1iZXJ9IGZyYW1lIGluZGV4IHRvIHN0YXJ0IGF0XG4gKi9cbk1vdmllQ2xpcC5wcm90b3R5cGUuZ290b0FuZFBsYXkgPSBmdW5jdGlvbiAoZnJhbWVOdW1iZXIpXG57XG4gICAgdGhpcy5fY3VycmVudFRpbWUgPSBmcmFtZU51bWJlcjtcblxuICAgIHRoaXMucGxheSgpO1xufTtcblxuLypcbiAqIFVwZGF0ZXMgdGhlIG9iamVjdCB0cmFuc2Zvcm0gZm9yIHJlbmRlcmluZ1xuICogQHByaXZhdGVcbiAqL1xuTW92aWVDbGlwLnByb3RvdHlwZS51cGRhdGUgPSBmdW5jdGlvbiAoZGVsdGFUaW1lKVxue1xuICAgIHZhciBlbGFwc2VkID0gdGhpcy5hbmltYXRpb25TcGVlZCAqIGRlbHRhVGltZTtcblxuICAgIGlmICh0aGlzLl9kdXJhdGlvbnMgIT09IG51bGwpXG4gICAge1xuICAgICAgICB2YXIgbGFnID0gdGhpcy5fY3VycmVudFRpbWUgJSAxICogdGhpcy5fZHVyYXRpb25zW3RoaXMuY3VycmVudEZyYW1lXTtcblxuICAgICAgICBsYWcgKz0gZWxhcHNlZCAvIDYwICogMTAwMDtcblxuICAgICAgICB3aGlsZSAobGFnIDwgMClcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5fY3VycmVudFRpbWUtLTtcbiAgICAgICAgICAgIGxhZyArPSB0aGlzLl9kdXJhdGlvbnNbdGhpcy5jdXJyZW50RnJhbWVdO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIHNpZ24gPSBNYXRoLnNpZ24odGhpcy5hbmltYXRpb25TcGVlZCAqIGRlbHRhVGltZSk7XG4gICAgICAgIHRoaXMuX2N1cnJlbnRUaW1lID0gTWF0aC5mbG9vcih0aGlzLl9jdXJyZW50VGltZSk7XG5cbiAgICAgICAgd2hpbGUgKGxhZyA+PSB0aGlzLl9kdXJhdGlvbnNbdGhpcy5jdXJyZW50RnJhbWVdKVxuICAgICAgICB7XG4gICAgICAgICAgICBsYWcgLT0gdGhpcy5fZHVyYXRpb25zW3RoaXMuY3VycmVudEZyYW1lXSAqIHNpZ247XG4gICAgICAgICAgICB0aGlzLl9jdXJyZW50VGltZSArPSBzaWduO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fY3VycmVudFRpbWUgKz0gbGFnIC8gdGhpcy5fZHVyYXRpb25zW3RoaXMuY3VycmVudEZyYW1lXTtcbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgdGhpcy5fY3VycmVudFRpbWUgKz0gZWxhcHNlZDtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5fY3VycmVudFRpbWUgPCAwICYmICF0aGlzLmxvb3ApXG4gICAge1xuICAgICAgICB0aGlzLmdvdG9BbmRTdG9wKDApO1xuXG4gICAgICAgIGlmICh0aGlzLm9uQ29tcGxldGUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMub25Db21wbGV0ZSgpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGVsc2UgaWYgKHRoaXMuX2N1cnJlbnRUaW1lID49IHRoaXMuX3RleHR1cmVzLmxlbmd0aCAmJiAhdGhpcy5sb29wKVxuICAgIHtcbiAgICAgICAgdGhpcy5nb3RvQW5kU3RvcCh0aGlzLl90ZXh0dXJlcy5sZW5ndGggLSAxKTtcblxuICAgICAgICBpZiAodGhpcy5vbkNvbXBsZXRlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLm9uQ29tcGxldGUoKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICB0aGlzLl90ZXh0dXJlID0gdGhpcy5fdGV4dHVyZXNbdGhpcy5jdXJyZW50RnJhbWVdO1xuICAgIH1cblxufTtcblxuLypcbiAqIFN0b3BzIHRoZSBNb3ZpZUNsaXAgYW5kIGRlc3Ryb3lzIGl0XG4gKlxuICovXG5Nb3ZpZUNsaXAucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoIClcbntcbiAgICB0aGlzLnN0b3AoKTtcbiAgICBjb3JlLlNwcml0ZS5wcm90b3R5cGUuZGVzdHJveS5jYWxsKHRoaXMpO1xufTtcblxuLyoqXG4gKiBBIHNob3J0IGhhbmQgd2F5IG9mIGNyZWF0aW5nIGEgbW92aWVjbGlwIGZyb20gYW4gYXJyYXkgb2YgZnJhbWUgaWRzXG4gKlxuICogQHN0YXRpY1xuICogQHBhcmFtIGZyYW1lcyB7c3RyaW5nW119IHRoZSBhcnJheSBvZiBmcmFtZXMgaWRzIHRoZSBtb3ZpZWNsaXAgd2lsbCB1c2UgYXMgaXRzIHRleHR1cmUgZnJhbWVzXG4gKi9cbk1vdmllQ2xpcC5mcm9tRnJhbWVzID0gZnVuY3Rpb24gKGZyYW1lcylcbntcbiAgICB2YXIgdGV4dHVyZXMgPSBbXTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZnJhbWVzLmxlbmd0aDsgKytpKVxuICAgIHtcbiAgICAgICAgdGV4dHVyZXMucHVzaChuZXcgY29yZS5UZXh0dXJlLmZyb21GcmFtZShmcmFtZXNbaV0pKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IE1vdmllQ2xpcCh0ZXh0dXJlcyk7XG59O1xuXG4vKipcbiAqIEEgc2hvcnQgaGFuZCB3YXkgb2YgY3JlYXRpbmcgYSBtb3ZpZWNsaXAgZnJvbSBhbiBhcnJheSBvZiBpbWFnZSBpZHNcbiAqXG4gKiBAc3RhdGljXG4gKiBAcGFyYW0gaW1hZ2VzIHtzdHJpbmdbXX0gdGhlIGFycmF5IG9mIGltYWdlIHVybHMgdGhlIG1vdmllY2xpcCB3aWxsIHVzZSBhcyBpdHMgdGV4dHVyZSBmcmFtZXNcbiAqL1xuTW92aWVDbGlwLmZyb21JbWFnZXMgPSBmdW5jdGlvbiAoaW1hZ2VzKVxue1xuICAgIHZhciB0ZXh0dXJlcyA9IFtdO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBpbWFnZXMubGVuZ3RoOyArK2kpXG4gICAge1xuICAgICAgICB0ZXh0dXJlcy5wdXNoKG5ldyBjb3JlLlRleHR1cmUuZnJvbUltYWdlKGltYWdlc1tpXSkpO1xuICAgIH1cblxuICAgIHJldHVybiBuZXcgTW92aWVDbGlwKHRleHR1cmVzKTtcbn07IiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi9jb3JlJyksXG4gICAgLy8gYSBzcHJpdGUgdXNlIGRmb3IgcmVuZGVyaW5nIHRleHR1cmVzLi5cbiAgICB0ZW1wUG9pbnQgPSBuZXcgY29yZS5Qb2ludCgpLFxuICAgIENhbnZhc1RpbnRlciA9IHJlcXVpcmUoJy4uL2NvcmUvcmVuZGVyZXJzL2NhbnZhcy91dGlscy9DYW52YXNUaW50ZXInKTtcblxuLyoqXG4gKiBBIHRpbGluZyBzcHJpdGUgaXMgYSBmYXN0IHdheSBvZiByZW5kZXJpbmcgYSB0aWxpbmcgaW1hZ2VcbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuU3ByaXRlXG4gKiBAbWVtYmVyb2YgUElYSS5leHRyYXNcbiAqIEBwYXJhbSB0ZXh0dXJlIHtUZXh0dXJlfSB0aGUgdGV4dHVyZSBvZiB0aGUgdGlsaW5nIHNwcml0ZVxuICogQHBhcmFtIHdpZHRoIHtudW1iZXJ9ICB0aGUgd2lkdGggb2YgdGhlIHRpbGluZyBzcHJpdGVcbiAqIEBwYXJhbSBoZWlnaHQge251bWJlcn0gdGhlIGhlaWdodCBvZiB0aGUgdGlsaW5nIHNwcml0ZVxuICovXG5mdW5jdGlvbiBUaWxpbmdTcHJpdGUodGV4dHVyZSwgd2lkdGgsIGhlaWdodClcbntcbiAgICBjb3JlLlNwcml0ZS5jYWxsKHRoaXMsIHRleHR1cmUpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHNjYWxpbmcgb2YgdGhlIGltYWdlIHRoYXQgaXMgYmVpbmcgdGlsZWRcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuUG9pbnR9XG4gICAgICovXG4gICAgdGhpcy50aWxlU2NhbGUgPSBuZXcgY29yZS5Qb2ludCgxLDEpO1xuXG5cbiAgICAvKipcbiAgICAgKiBUaGUgb2Zmc2V0IHBvc2l0aW9uIG9mIHRoZSBpbWFnZSB0aGF0IGlzIGJlaW5nIHRpbGVkXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlBvaW50fVxuICAgICAqL1xuICAgIHRoaXMudGlsZVBvc2l0aW9uID0gbmV3IGNvcmUuUG9pbnQoMCwwKTtcblxuICAgIC8vLy8vIHByaXZhdGVcblxuICAgIC8qKlxuICAgICAqIFRoZSB3aXRoIG9mIHRoZSB0aWxpbmcgc3ByaXRlXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl93aWR0aCA9IHdpZHRoIHx8IDEwMDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBoZWlnaHQgb2YgdGhlIHRpbGluZyBzcHJpdGVcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX2hlaWdodCA9IGhlaWdodCB8fCAxMDA7XG5cbiAgICAvKipcbiAgICAgKiBBbiBpbnRlcm5hbCBXZWJHTCBVViBjYWNoZS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuVGV4dHVyZVV2c31cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX3V2cyA9IG5ldyBjb3JlLlRleHR1cmVVdnMoKTtcblxuICAgIHRoaXMuX2NhbnZhc1BhdHRlcm4gPSBudWxsO1xuXG4gICAgLy9UT0RPIG1vdmUuLlxuICAgIHRoaXMuc2hhZGVyID0gbmV3IGNvcmUuQWJzdHJhY3RGaWx0ZXIoXG5cbiAgICAgIFtcbiAgICAgICAgJ3ByZWNpc2lvbiBsb3dwIGZsb2F0OycsXG4gICAgICAgICdhdHRyaWJ1dGUgdmVjMiBhVmVydGV4UG9zaXRpb247JyxcbiAgICAgICAgJ2F0dHJpYnV0ZSB2ZWMyIGFUZXh0dXJlQ29vcmQ7JyxcbiAgICAgICAgJ2F0dHJpYnV0ZSB2ZWM0IGFDb2xvcjsnLFxuXG4gICAgICAgICd1bmlmb3JtIG1hdDMgcHJvamVjdGlvbk1hdHJpeDsnLFxuXG4gICAgICAgICd1bmlmb3JtIHZlYzQgdUZyYW1lOycsXG4gICAgICAgICd1bmlmb3JtIHZlYzQgdVRyYW5zZm9ybTsnLFxuXG4gICAgICAgICd2YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDsnLFxuICAgICAgICAndmFyeWluZyB2ZWM0IHZDb2xvcjsnLFxuXG4gICAgICAgICd2b2lkIG1haW4odm9pZCl7JyxcbiAgICAgICAgJyAgIGdsX1Bvc2l0aW9uID0gdmVjNCgocHJvamVjdGlvbk1hdHJpeCAqIHZlYzMoYVZlcnRleFBvc2l0aW9uLCAxLjApKS54eSwgMC4wLCAxLjApOycsXG5cbiAgICAgICAgJyAgIHZlYzIgY29vcmQgPSBhVGV4dHVyZUNvb3JkOycsXG4gICAgICAgICcgICBjb29yZCAtPSB1VHJhbnNmb3JtLnh5OycsXG4gICAgICAgICcgICBjb29yZCAvPSB1VHJhbnNmb3JtLnp3OycsXG4gICAgICAgICcgICB2VGV4dHVyZUNvb3JkID0gY29vcmQ7JyxcblxuICAgICAgICAnICAgdkNvbG9yID0gdmVjNChhQ29sb3IucmdiICogYUNvbG9yLmEsIGFDb2xvci5hKTsnLFxuICAgICAgICAnfSdcbiAgICAgIF0uam9pbignXFxuJyksXG4gICAgICBbXG4gICAgICAgICdwcmVjaXNpb24gbG93cCBmbG9hdDsnLFxuXG4gICAgICAgICd2YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDsnLFxuICAgICAgICAndmFyeWluZyB2ZWM0IHZDb2xvcjsnLFxuXG4gICAgICAgICd1bmlmb3JtIHNhbXBsZXIyRCB1U2FtcGxlcjsnLFxuICAgICAgICAndW5pZm9ybSB2ZWM0IHVGcmFtZTsnLFxuICAgICAgICAndW5pZm9ybSB2ZWMyIHVQaXhlbFNpemU7JyxcblxuICAgICAgICAndm9pZCBtYWluKHZvaWQpeycsXG5cbiAgICAgICAgJyAgIHZlYzIgY29vcmQgPSBtb2QodlRleHR1cmVDb29yZCwgdUZyYW1lLnp3KTsnLFxuICAgICAgICAnICAgY29vcmQgPSBjbGFtcChjb29yZCwgdVBpeGVsU2l6ZSwgdUZyYW1lLnp3IC0gdVBpeGVsU2l6ZSk7JyxcbiAgICAgICAgJyAgIGNvb3JkICs9IHVGcmFtZS54eTsnLFxuXG4gICAgICAgICcgICBnbF9GcmFnQ29sb3IgPSAgdGV4dHVyZTJEKHVTYW1wbGVyLCBjb29yZCkgKiB2Q29sb3IgOycsXG4gICAgICAgICd9J1xuICAgICAgXS5qb2luKCdcXG4nKSxcblxuICAgICAgICAgICAgLy8gc2V0IHRoZSB1bmlmb3Jtc1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHVGcmFtZTogeyB0eXBlOiAnNGZ2JywgdmFsdWU6IFswLDAsMSwxXSB9LFxuICAgICAgICAgICAgICAgIHVUcmFuc2Zvcm06IHsgdHlwZTogJzRmdicsIHZhbHVlOiBbMCwwLDEsMV0gfSxcbiAgICAgICAgICAgICAgICB1UGl4ZWxTaXplIDogeyB0eXBlIDogJzJmdicsIHZhbHVlOiBbMSwgMV19XG4gICAgICAgICAgICB9XG4gICAgICApO1xufVxuXG5UaWxpbmdTcHJpdGUucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShjb3JlLlNwcml0ZS5wcm90b3R5cGUpO1xuVGlsaW5nU3ByaXRlLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFRpbGluZ1Nwcml0ZTtcbm1vZHVsZS5leHBvcnRzID0gVGlsaW5nU3ByaXRlO1xuXG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKFRpbGluZ1Nwcml0ZS5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBUaGUgd2lkdGggb2YgdGhlIHNwcml0ZSwgc2V0dGluZyB0aGlzIHdpbGwgYWN0dWFsbHkgbW9kaWZ5IHRoZSBzY2FsZSB0byBhY2hpZXZlIHRoZSB2YWx1ZSBzZXRcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5leHRyYXMuVGlsaW5nU3ByaXRlI1xuICAgICAqL1xuICAgIHdpZHRoOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3dpZHRoO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5fd2lkdGggPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBUaGUgaGVpZ2h0IG9mIHRoZSBUaWxpbmdTcHJpdGUsIHNldHRpbmcgdGhpcyB3aWxsIGFjdHVhbGx5IG1vZGlmeSB0aGUgc2NhbGUgdG8gYWNoaWV2ZSB0aGUgdmFsdWUgc2V0XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZXh0cmFzLlRpbGluZ1Nwcml0ZSNcbiAgICAgKi9cbiAgICBoZWlnaHQ6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5faGVpZ2h0O1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5faGVpZ2h0ID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG59KTtcblxuVGlsaW5nU3ByaXRlLnByb3RvdHlwZS5fb25UZXh0dXJlVXBkYXRlID0gZnVuY3Rpb24gKClcbntcbiAgICByZXR1cm47XG59O1xuXG5cbi8qKlxuICogUmVuZGVycyB0aGUgb2JqZWN0IHVzaW5nIHRoZSBXZWJHTCByZW5kZXJlclxuICpcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5XZWJHTFJlbmRlcmVyfVxuICogQHByaXZhdGVcbiAqL1xuVGlsaW5nU3ByaXRlLnByb3RvdHlwZS5fcmVuZGVyV2ViR0wgPSBmdW5jdGlvbiAocmVuZGVyZXIpXG57XG4gICAgLy8gdHdlYWsgb3VyIHRleHR1cmUgdGVtcG9yYXJpbHkuLlxuICAgIHZhciB0ZXh0dXJlID0gdGhpcy5fdGV4dHVyZTtcblxuICAgIGlmKCF0ZXh0dXJlIHx8ICF0ZXh0dXJlLl91dnMpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFyIHRlbXBVdnMgPSB0ZXh0dXJlLl91dnMsXG4gICAgICAgIHRlbXBXaWR0aCA9IHRleHR1cmUuX2ZyYW1lLndpZHRoLFxuICAgICAgICB0ZW1wSGVpZ2h0ID0gdGV4dHVyZS5fZnJhbWUuaGVpZ2h0LFxuICAgICAgICB0dyA9IHRleHR1cmUuYmFzZVRleHR1cmUud2lkdGgsXG4gICAgICAgIHRoID0gdGV4dHVyZS5iYXNlVGV4dHVyZS5oZWlnaHQ7XG5cbiAgICB0ZXh0dXJlLl91dnMgPSB0aGlzLl91dnM7XG4gICAgdGV4dHVyZS5fZnJhbWUud2lkdGggPSB0aGlzLndpZHRoO1xuICAgIHRleHR1cmUuX2ZyYW1lLmhlaWdodCA9IHRoaXMuaGVpZ2h0O1xuXG4gICAgdGhpcy5zaGFkZXIudW5pZm9ybXMudVBpeGVsU2l6ZS52YWx1ZVswXSA9IDEuMC90dztcbiAgICB0aGlzLnNoYWRlci51bmlmb3Jtcy51UGl4ZWxTaXplLnZhbHVlWzFdID0gMS4wL3RoO1xuXG4gICAgdGhpcy5zaGFkZXIudW5pZm9ybXMudUZyYW1lLnZhbHVlWzBdID0gdGVtcFV2cy54MDtcbiAgICB0aGlzLnNoYWRlci51bmlmb3Jtcy51RnJhbWUudmFsdWVbMV0gPSB0ZW1wVXZzLnkwO1xuICAgIHRoaXMuc2hhZGVyLnVuaWZvcm1zLnVGcmFtZS52YWx1ZVsyXSA9IHRlbXBVdnMueDEgLSB0ZW1wVXZzLngwO1xuICAgIHRoaXMuc2hhZGVyLnVuaWZvcm1zLnVGcmFtZS52YWx1ZVszXSA9IHRlbXBVdnMueTIgLSB0ZW1wVXZzLnkwO1xuXG4gICAgdGhpcy5zaGFkZXIudW5pZm9ybXMudVRyYW5zZm9ybS52YWx1ZVswXSA9ICh0aGlzLnRpbGVQb3NpdGlvbi54ICUgKHRlbXBXaWR0aCAqIHRoaXMudGlsZVNjYWxlLngpKSAvIHRoaXMuX3dpZHRoO1xuICAgIHRoaXMuc2hhZGVyLnVuaWZvcm1zLnVUcmFuc2Zvcm0udmFsdWVbMV0gPSAodGhpcy50aWxlUG9zaXRpb24ueSAlICh0ZW1wSGVpZ2h0ICogdGhpcy50aWxlU2NhbGUueSkpIC8gdGhpcy5faGVpZ2h0O1xuICAgIHRoaXMuc2hhZGVyLnVuaWZvcm1zLnVUcmFuc2Zvcm0udmFsdWVbMl0gPSAoIHR3IC8gdGhpcy5fd2lkdGggKSAqIHRoaXMudGlsZVNjYWxlLng7XG4gICAgdGhpcy5zaGFkZXIudW5pZm9ybXMudVRyYW5zZm9ybS52YWx1ZVszXSA9ICggdGggLyB0aGlzLl9oZWlnaHQgKSAqIHRoaXMudGlsZVNjYWxlLnk7XG5cbiAgICByZW5kZXJlci5zZXRPYmplY3RSZW5kZXJlcihyZW5kZXJlci5wbHVnaW5zLnNwcml0ZSk7XG4gICAgcmVuZGVyZXIucGx1Z2lucy5zcHJpdGUucmVuZGVyKHRoaXMpO1xuXG4gICAgdGV4dHVyZS5fdXZzID0gdGVtcFV2cztcbiAgICB0ZXh0dXJlLl9mcmFtZS53aWR0aCA9IHRlbXBXaWR0aDtcbiAgICB0ZXh0dXJlLl9mcmFtZS5oZWlnaHQgPSB0ZW1wSGVpZ2h0O1xufTtcblxuLyoqXG4gKiBSZW5kZXJzIHRoZSBvYmplY3QgdXNpbmcgdGhlIENhbnZhcyByZW5kZXJlclxuICpcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5DYW52YXNSZW5kZXJlcn0gYSByZWZlcmVuY2UgdG8gdGhlIGNhbnZhcyByZW5kZXJlclxuICogQHByaXZhdGVcbiAqL1xuVGlsaW5nU3ByaXRlLnByb3RvdHlwZS5fcmVuZGVyQ2FudmFzID0gZnVuY3Rpb24gKHJlbmRlcmVyKVxue1xuICAgIHZhciB0ZXh0dXJlID0gdGhpcy5fdGV4dHVyZTtcblxuICAgIGlmICghdGV4dHVyZS5iYXNlVGV4dHVyZS5oYXNMb2FkZWQpXG4gICAge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHZhciBjb250ZXh0ID0gcmVuZGVyZXIuY29udGV4dCxcbiAgICAgICAgdHJhbnNmb3JtID0gdGhpcy53b3JsZFRyYW5zZm9ybSxcbiAgICAgICAgcmVzb2x1dGlvbiA9IHJlbmRlcmVyLnJlc29sdXRpb24sXG4gICAgICAgIGJhc2VUZXh0dXJlID0gdGV4dHVyZS5iYXNlVGV4dHVyZSxcbiAgICAgICAgbW9kWCA9ICh0aGlzLnRpbGVQb3NpdGlvbi54IC8gdGhpcy50aWxlU2NhbGUueCkgJSB0ZXh0dXJlLl9mcmFtZS53aWR0aCxcbiAgICAgICAgbW9kWSA9ICh0aGlzLnRpbGVQb3NpdGlvbi55IC8gdGhpcy50aWxlU2NhbGUueSkgJSB0ZXh0dXJlLl9mcmFtZS5oZWlnaHQ7XG5cbiAgICAvLyBjcmVhdGUgYSBuaWNlIHNoaW55IHBhdHRlcm4hXG4gICAgLy8gVE9ETyB0aGlzIG5lZWRzIHRvIGJlIHJlZnJlc2hlZCBpZiB0ZXh0dXJlIGNoYW5nZXMuLlxuICAgIGlmKCF0aGlzLl9jYW52YXNQYXR0ZXJuKVxuICAgIHtcbiAgICAgICAgLy8gY3V0IGFuIG9iamVjdCBmcm9tIGEgc3ByaXRlc2hlZXQuLlxuICAgICAgICB2YXIgdGVtcENhbnZhcyA9IG5ldyBjb3JlLkNhbnZhc0J1ZmZlcih0ZXh0dXJlLl9mcmFtZS53aWR0aCwgdGV4dHVyZS5fZnJhbWUuaGVpZ2h0KTtcblxuICAgICAgICAvLyBUaW50IHRoZSB0aWxpbmcgc3ByaXRlXG4gICAgICAgIGlmICh0aGlzLnRpbnQgIT09IDB4RkZGRkZGKVxuICAgICAgICB7XG4gICAgICAgICAgICBpZiAodGhpcy5jYWNoZWRUaW50ICE9PSB0aGlzLnRpbnQpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdGhpcy5jYWNoZWRUaW50ID0gdGhpcy50aW50O1xuXG4gICAgICAgICAgICAgICAgdGhpcy50aW50ZWRUZXh0dXJlID0gQ2FudmFzVGludGVyLmdldFRpbnRlZFRleHR1cmUodGhpcywgdGhpcy50aW50KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRlbXBDYW52YXMuY29udGV4dC5kcmF3SW1hZ2UodGhpcy50aW50ZWRUZXh0dXJlLCAwLCAwKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRlbXBDYW52YXMuY29udGV4dC5kcmF3SW1hZ2UoYmFzZVRleHR1cmUuc291cmNlLCAtdGV4dHVyZS5fZnJhbWUueCwgLXRleHR1cmUuX2ZyYW1lLnkpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX2NhbnZhc1BhdHRlcm4gPSB0ZW1wQ2FudmFzLmNvbnRleHQuY3JlYXRlUGF0dGVybiggdGVtcENhbnZhcy5jYW52YXMsICdyZXBlYXQnICk7XG4gICAgfVxuXG4gICAgLy8gc2V0IGNvbnRleHQgc3RhdGUuLlxuICAgIGNvbnRleHQuZ2xvYmFsQWxwaGEgPSB0aGlzLndvcmxkQWxwaGE7XG4gICAgY29udGV4dC5zZXRUcmFuc2Zvcm0odHJhbnNmb3JtLmEgKiByZXNvbHV0aW9uLFxuICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2Zvcm0uYiAqIHJlc29sdXRpb24sXG4gICAgICAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybS5jICogcmVzb2x1dGlvbixcbiAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtLmQgKiByZXNvbHV0aW9uLFxuICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2Zvcm0udHggKiByZXNvbHV0aW9uLFxuICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2Zvcm0udHkgKiByZXNvbHV0aW9uKTtcblxuICAgIC8vIFRPRE8gLSB0aGlzIHNob3VsZCBiZSByb2xsZWQgaW50byB0aGUgc2V0VHJhbnNmb3JtIGFib3ZlLi5cbiAgICBjb250ZXh0LnNjYWxlKHRoaXMudGlsZVNjYWxlLngsdGhpcy50aWxlU2NhbGUueSk7XG5cbiAgICBjb250ZXh0LnRyYW5zbGF0ZShtb2RYICsgKHRoaXMuYW5jaG9yLnggKiAtdGhpcy5fd2lkdGggKSxcbiAgICAgICAgICAgICAgICAgICAgICBtb2RZICsgKHRoaXMuYW5jaG9yLnkgKiAtdGhpcy5faGVpZ2h0KSk7XG5cbiAgICAvLyBjaGVjayBibGVuZCBtb2RlXG4gICAgdmFyIGNvbXBvc2l0ZU9wZXJhdGlvbiA9IHJlbmRlcmVyLmJsZW5kTW9kZXNbdGhpcy5ibGVuZE1vZGVdO1xuICAgIGlmIChjb21wb3NpdGVPcGVyYXRpb24gIT09IHJlbmRlcmVyLmNvbnRleHQuZ2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uKVxuICAgIHtcbiAgICAgICAgY29udGV4dC5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb24gPSBjb21wb3NpdGVPcGVyYXRpb247XG4gICAgfVxuXG4gICAgLy8gZmlsbCB0aGUgcGF0dGVybiFcbiAgICBjb250ZXh0LmZpbGxTdHlsZSA9IHRoaXMuX2NhbnZhc1BhdHRlcm47XG4gICAgY29udGV4dC5maWxsUmVjdCgtbW9kWCxcbiAgICAgICAgICAgICAgICAgICAgIC1tb2RZLFxuICAgICAgICAgICAgICAgICAgICAgdGhpcy5fd2lkdGggLyB0aGlzLnRpbGVTY2FsZS54LFxuICAgICAgICAgICAgICAgICAgICAgdGhpcy5faGVpZ2h0IC8gdGhpcy50aWxlU2NhbGUueSk7XG5cblxuICAgIC8vVE9ETyAtIHByZXR0eSBzdXJlIHRoaXMgY2FuIGJlIGRlbGV0ZWQuLi5cbiAgICAvL2NvbnRleHQudHJhbnNsYXRlKC10aGlzLnRpbGVQb3NpdGlvbi54ICsgKHRoaXMuYW5jaG9yLnggKiB0aGlzLl93aWR0aCksIC10aGlzLnRpbGVQb3NpdGlvbi55ICsgKHRoaXMuYW5jaG9yLnkgKiB0aGlzLl9oZWlnaHQpKTtcbiAgICAvL2NvbnRleHQuc2NhbGUoMSAvIHRoaXMudGlsZVNjYWxlLngsIDEgLyB0aGlzLnRpbGVTY2FsZS55KTtcbn07XG5cblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBmcmFtaW5nIHJlY3RhbmdsZSBvZiB0aGUgc3ByaXRlIGFzIGEgUmVjdGFuZ2xlIG9iamVjdFxuKlxuICogQHJldHVybiB7UElYSS5SZWN0YW5nbGV9IHRoZSBmcmFtaW5nIHJlY3RhbmdsZVxuICovXG5UaWxpbmdTcHJpdGUucHJvdG90eXBlLmdldEJvdW5kcyA9IGZ1bmN0aW9uICgpXG57XG4gICAgdmFyIHdpZHRoID0gdGhpcy5fd2lkdGg7XG4gICAgdmFyIGhlaWdodCA9IHRoaXMuX2hlaWdodDtcblxuICAgIHZhciB3MCA9IHdpZHRoICogKDEtdGhpcy5hbmNob3IueCk7XG4gICAgdmFyIHcxID0gd2lkdGggKiAtdGhpcy5hbmNob3IueDtcblxuICAgIHZhciBoMCA9IGhlaWdodCAqICgxLXRoaXMuYW5jaG9yLnkpO1xuICAgIHZhciBoMSA9IGhlaWdodCAqIC10aGlzLmFuY2hvci55O1xuXG4gICAgdmFyIHdvcmxkVHJhbnNmb3JtID0gdGhpcy53b3JsZFRyYW5zZm9ybTtcblxuICAgIHZhciBhID0gd29ybGRUcmFuc2Zvcm0uYTtcbiAgICB2YXIgYiA9IHdvcmxkVHJhbnNmb3JtLmI7XG4gICAgdmFyIGMgPSB3b3JsZFRyYW5zZm9ybS5jO1xuICAgIHZhciBkID0gd29ybGRUcmFuc2Zvcm0uZDtcbiAgICB2YXIgdHggPSB3b3JsZFRyYW5zZm9ybS50eDtcbiAgICB2YXIgdHkgPSB3b3JsZFRyYW5zZm9ybS50eTtcblxuICAgIHZhciB4MSA9IGEgKiB3MSArIGMgKiBoMSArIHR4O1xuICAgIHZhciB5MSA9IGQgKiBoMSArIGIgKiB3MSArIHR5O1xuXG4gICAgdmFyIHgyID0gYSAqIHcwICsgYyAqIGgxICsgdHg7XG4gICAgdmFyIHkyID0gZCAqIGgxICsgYiAqIHcwICsgdHk7XG5cbiAgICB2YXIgeDMgPSBhICogdzAgKyBjICogaDAgKyB0eDtcbiAgICB2YXIgeTMgPSBkICogaDAgKyBiICogdzAgKyB0eTtcblxuICAgIHZhciB4NCA9ICBhICogdzEgKyBjICogaDAgKyB0eDtcbiAgICB2YXIgeTQgPSAgZCAqIGgwICsgYiAqIHcxICsgdHk7XG5cbiAgICB2YXIgbWluWCxcbiAgICAgICAgbWF4WCxcbiAgICAgICAgbWluWSxcbiAgICAgICAgbWF4WTtcblxuICAgIG1pblggPSB4MTtcbiAgICBtaW5YID0geDIgPCBtaW5YID8geDIgOiBtaW5YO1xuICAgIG1pblggPSB4MyA8IG1pblggPyB4MyA6IG1pblg7XG4gICAgbWluWCA9IHg0IDwgbWluWCA/IHg0IDogbWluWDtcblxuICAgIG1pblkgPSB5MTtcbiAgICBtaW5ZID0geTIgPCBtaW5ZID8geTIgOiBtaW5ZO1xuICAgIG1pblkgPSB5MyA8IG1pblkgPyB5MyA6IG1pblk7XG4gICAgbWluWSA9IHk0IDwgbWluWSA/IHk0IDogbWluWTtcblxuICAgIG1heFggPSB4MTtcbiAgICBtYXhYID0geDIgPiBtYXhYID8geDIgOiBtYXhYO1xuICAgIG1heFggPSB4MyA+IG1heFggPyB4MyA6IG1heFg7XG4gICAgbWF4WCA9IHg0ID4gbWF4WCA/IHg0IDogbWF4WDtcblxuICAgIG1heFkgPSB5MTtcbiAgICBtYXhZID0geTIgPiBtYXhZID8geTIgOiBtYXhZO1xuICAgIG1heFkgPSB5MyA+IG1heFkgPyB5MyA6IG1heFk7XG4gICAgbWF4WSA9IHk0ID4gbWF4WSA/IHk0IDogbWF4WTtcblxuICAgIHZhciBib3VuZHMgPSB0aGlzLl9ib3VuZHM7XG5cbiAgICBib3VuZHMueCA9IG1pblg7XG4gICAgYm91bmRzLndpZHRoID0gbWF4WCAtIG1pblg7XG5cbiAgICBib3VuZHMueSA9IG1pblk7XG4gICAgYm91bmRzLmhlaWdodCA9IG1heFkgLSBtaW5ZO1xuXG4gICAgLy8gc3RvcmUgYSByZWZlcmVuY2Ugc28gdGhhdCBpZiB0aGlzIGZ1bmN0aW9uIGdldHMgY2FsbGVkIGFnYWluIGluIHRoZSByZW5kZXIgY3ljbGUgd2UgZG8gbm90IGhhdmUgdG8gcmVjYWxjdWxhdGVcbiAgICB0aGlzLl9jdXJyZW50Qm91bmRzID0gYm91bmRzO1xuXG4gICAgcmV0dXJuIGJvdW5kcztcbn07XG5cbi8qKlxuICogQ2hlY2tzIGlmIGEgcG9pbnQgaXMgaW5zaWRlIHRoaXMgdGlsaW5nIHNwcml0ZVxuICogQHBhcmFtIHBvaW50IHtQSVhJLlBvaW50fSB0aGUgcG9pbnQgdG8gY2hlY2tcbiAqL1xuVGlsaW5nU3ByaXRlLnByb3RvdHlwZS5jb250YWluc1BvaW50ID0gZnVuY3Rpb24oIHBvaW50IClcbntcbiAgICB0aGlzLndvcmxkVHJhbnNmb3JtLmFwcGx5SW52ZXJzZShwb2ludCwgIHRlbXBQb2ludCk7XG5cbiAgICB2YXIgd2lkdGggPSB0aGlzLl93aWR0aDtcbiAgICB2YXIgaGVpZ2h0ID0gdGhpcy5faGVpZ2h0O1xuICAgIHZhciB4MSA9IC13aWR0aCAqIHRoaXMuYW5jaG9yLng7XG4gICAgdmFyIHkxO1xuXG4gICAgaWYgKCB0ZW1wUG9pbnQueCA+IHgxICYmIHRlbXBQb2ludC54IDwgeDEgKyB3aWR0aCApXG4gICAge1xuICAgICAgICB5MSA9IC1oZWlnaHQgKiB0aGlzLmFuY2hvci55O1xuXG4gICAgICAgIGlmICggdGVtcFBvaW50LnkgPiB5MSAmJiB0ZW1wUG9pbnQueSA8IHkxICsgaGVpZ2h0IClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2U7XG59O1xuXG4vKipcbiAqIERlc3Ryb3lzIHRoaXMgdGlsaW5nIHNwcml0ZVxuICpcbiAqL1xuVGlsaW5nU3ByaXRlLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKCkge1xuICAgIGNvcmUuU3ByaXRlLnByb3RvdHlwZS5kZXN0cm95LmNhbGwodGhpcyk7XG5cbiAgICB0aGlzLnRpbGVTY2FsZSA9IG51bGw7XG4gICAgdGhpcy5fdGlsZVNjYWxlT2Zmc2V0ID0gbnVsbDtcbiAgICB0aGlzLnRpbGVQb3NpdGlvbiA9IG51bGw7XG5cbiAgICB0aGlzLl91dnMgPSBudWxsO1xufTtcblxuLyoqXG4gKiBIZWxwZXIgZnVuY3Rpb24gdGhhdCBjcmVhdGVzIGEgdGlsaW5nIHNwcml0ZSB0aGF0IHdpbGwgdXNlIGEgdGV4dHVyZSBmcm9tIHRoZSBUZXh0dXJlQ2FjaGUgYmFzZWQgb24gdGhlIGZyYW1lSWRcbiAqIFRoZSBmcmFtZSBpZHMgYXJlIGNyZWF0ZWQgd2hlbiBhIFRleHR1cmUgcGFja2VyIGZpbGUgaGFzIGJlZW4gbG9hZGVkXG4gKlxuICogQHN0YXRpY1xuICogQHBhcmFtIGZyYW1lSWQge3N0cmluZ30gVGhlIGZyYW1lIElkIG9mIHRoZSB0ZXh0dXJlIGluIHRoZSBjYWNoZVxuICogQHJldHVybiB7UElYSS5leHRyYXMuVGlsaW5nU3ByaXRlfSBBIG5ldyBUaWxpbmdTcHJpdGUgdXNpbmcgYSB0ZXh0dXJlIGZyb20gdGhlIHRleHR1cmUgY2FjaGUgbWF0Y2hpbmcgdGhlIGZyYW1lSWRcbiAqIEBwYXJhbSB3aWR0aCB7bnVtYmVyfSAgdGhlIHdpZHRoIG9mIHRoZSB0aWxpbmcgc3ByaXRlXG4gKiBAcGFyYW0gaGVpZ2h0IHtudW1iZXJ9IHRoZSBoZWlnaHQgb2YgdGhlIHRpbGluZyBzcHJpdGVcbiAqL1xuVGlsaW5nU3ByaXRlLmZyb21GcmFtZSA9IGZ1bmN0aW9uIChmcmFtZUlkLHdpZHRoLGhlaWdodClcbntcbiAgICB2YXIgdGV4dHVyZSA9IGNvcmUudXRpbHMuVGV4dHVyZUNhY2hlW2ZyYW1lSWRdO1xuXG4gICAgaWYgKCF0ZXh0dXJlKVxuICAgIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdUaGUgZnJhbWVJZCBcIicgKyBmcmFtZUlkICsgJ1wiIGRvZXMgbm90IGV4aXN0IGluIHRoZSB0ZXh0dXJlIGNhY2hlICcgKyB0aGlzKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IFRpbGluZ1Nwcml0ZSh0ZXh0dXJlLHdpZHRoLGhlaWdodCk7XG59O1xuXG4vKipcbiAqIEhlbHBlciBmdW5jdGlvbiB0aGF0IGNyZWF0ZXMgYSBzcHJpdGUgdGhhdCB3aWxsIGNvbnRhaW4gYSB0ZXh0dXJlIGJhc2VkIG9uIGFuIGltYWdlIHVybFxuICogSWYgdGhlIGltYWdlIGlzIG5vdCBpbiB0aGUgdGV4dHVyZSBjYWNoZSBpdCB3aWxsIGJlIGxvYWRlZFxuICpcbiAqIEBzdGF0aWNcbiAqIEBwYXJhbSBpbWFnZUlkIHtzdHJpbmd9IFRoZSBpbWFnZSB1cmwgb2YgdGhlIHRleHR1cmVcbiAqIEBwYXJhbSB3aWR0aCB7bnVtYmVyfSAgdGhlIHdpZHRoIG9mIHRoZSB0aWxpbmcgc3ByaXRlXG4gKiBAcGFyYW0gaGVpZ2h0IHtudW1iZXJ9IHRoZSBoZWlnaHQgb2YgdGhlIHRpbGluZyBzcHJpdGVcbiAqIEBwYXJhbSBbY3Jvc3NvcmlnaW49KGF1dG8pXSB7Ym9vbGVhbn0gaWYgeW91IHdhbnQgdG8gc3BlY2lmeSB0aGUgY3Jvc3Mtb3JpZ2luIHBhcmFtZXRlclxuICogQHBhcmFtIFtzY2FsZU1vZGU9UElYSS5TQ0FMRV9NT0RFUy5ERUZBVUxUXSB7bnVtYmVyfSBpZiB5b3Ugd2FudCB0byBzcGVjaWZ5IHRoZSBzY2FsZSBtb2RlLCBzZWUge0BsaW5rIFBJWEkuU0NBTEVfTU9ERVN9IGZvciBwb3NzaWJsZSB2YWx1ZXNcbiAqIEByZXR1cm4ge1BJWEkuZXh0cmFzLlRpbGluZ1Nwcml0ZX0gQSBuZXcgVGlsaW5nU3ByaXRlIHVzaW5nIGEgdGV4dHVyZSBmcm9tIHRoZSB0ZXh0dXJlIGNhY2hlIG1hdGNoaW5nIHRoZSBpbWFnZSBpZFxuICovXG5UaWxpbmdTcHJpdGUuZnJvbUltYWdlID0gZnVuY3Rpb24gKGltYWdlSWQsIHdpZHRoLCBoZWlnaHQsIGNyb3Nzb3JpZ2luLCBzY2FsZU1vZGUpXG57XG4gICAgcmV0dXJuIG5ldyBUaWxpbmdTcHJpdGUoY29yZS5UZXh0dXJlLmZyb21JbWFnZShpbWFnZUlkLCBjcm9zc29yaWdpbiwgc2NhbGVNb2RlKSx3aWR0aCxoZWlnaHQpO1xufTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vY29yZScpLFxuICAgIERpc3BsYXlPYmplY3QgPSBjb3JlLkRpc3BsYXlPYmplY3QsXG4gICAgX3RlbXBNYXRyaXggPSBuZXcgY29yZS5NYXRyaXgoKTtcblxuRGlzcGxheU9iamVjdC5wcm90b3R5cGUuX2NhY2hlQXNCaXRtYXAgPSBmYWxzZTtcbkRpc3BsYXlPYmplY3QucHJvdG90eXBlLl9vcmlnaW5hbFJlbmRlcldlYkdMID0gbnVsbDtcbkRpc3BsYXlPYmplY3QucHJvdG90eXBlLl9vcmlnaW5hbFJlbmRlckNhbnZhcyA9IG51bGw7XG5cbkRpc3BsYXlPYmplY3QucHJvdG90eXBlLl9vcmlnaW5hbFVwZGF0ZVRyYW5zZm9ybSA9IG51bGw7XG5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS5fb3JpZ2luYWxIaXRUZXN0ID0gbnVsbDtcbkRpc3BsYXlPYmplY3QucHJvdG90eXBlLl9vcmlnaW5hbERlc3Ryb3kgPSBudWxsO1xuRGlzcGxheU9iamVjdC5wcm90b3R5cGUuX2NhY2hlZFNwcml0ZSA9IG51bGw7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKERpc3BsYXlPYmplY3QucHJvdG90eXBlLCB7XG5cbiAgICAvKipcbiAgICAgKiBTZXQgdGhpcyB0byB0cnVlIGlmIHlvdSB3YW50IHRoaXMgZGlzcGxheSBvYmplY3QgdG8gYmUgY2FjaGVkIGFzIGEgYml0bWFwLlxuICAgICAqIFRoaXMgYmFzaWNhbGx5IHRha2VzIGEgc25hcCBzaG90IG9mIHRoZSBkaXNwbGF5IG9iamVjdCBhcyBpdCBpcyBhdCB0aGF0IG1vbWVudC4gSXQgY2FuIHByb3ZpZGUgYSBwZXJmb3JtYW5jZSBiZW5lZml0IGZvciBjb21wbGV4IHN0YXRpYyBkaXNwbGF5T2JqZWN0cy5cbiAgICAgKiBUbyByZW1vdmUgc2ltcGx5IHNldCB0aGlzIHByb3BlcnR5IHRvICdmYWxzZSdcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICogQG1lbWJlcm9mIFBJWEkuRGlzcGxheU9iamVjdCNcbiAgICAgKi9cbiAgICBjYWNoZUFzQml0bWFwOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2NhY2hlQXNCaXRtYXA7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICBpZiAodGhpcy5fY2FjaGVBc0JpdG1hcCA9PT0gdmFsdWUpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLl9jYWNoZUFzQml0bWFwID0gdmFsdWU7XG5cbiAgICAgICAgICAgIGlmICh2YWx1ZSlcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9vcmlnaW5hbFJlbmRlcldlYkdMID0gdGhpcy5yZW5kZXJXZWJHTDtcbiAgICAgICAgICAgICAgICB0aGlzLl9vcmlnaW5hbFJlbmRlckNhbnZhcyA9IHRoaXMucmVuZGVyQ2FudmFzO1xuXG4gICAgICAgICAgICAgICAgdGhpcy5fb3JpZ2luYWxVcGRhdGVUcmFuc2Zvcm0gPSB0aGlzLnVwZGF0ZVRyYW5zZm9ybTtcbiAgICAgICAgICAgICAgICB0aGlzLl9vcmlnaW5hbEdldEJvdW5kcyA9IHRoaXMuZ2V0Qm91bmRzO1xuXG4gICAgICAgICAgICAgICAgdGhpcy5fb3JpZ2luYWxEZXN0cm95ID0gdGhpcy5kZXN0cm95O1xuXG4gICAgICAgICAgICAgICAgdGhpcy5fb3JpZ2luYWxDb250YWluc1BvaW50ID0gdGhpcy5jb250YWluc1BvaW50O1xuXG4gICAgICAgICAgICAgICAgdGhpcy5yZW5kZXJXZWJHTCA9IHRoaXMuX3JlbmRlckNhY2hlZFdlYkdMO1xuICAgICAgICAgICAgICAgIHRoaXMucmVuZGVyQ2FudmFzID0gdGhpcy5fcmVuZGVyQ2FjaGVkQ2FudmFzO1xuXG4gICAgICAgICAgICAgICAgdGhpcy5kZXN0cm95ID0gdGhpcy5fY2FjaGVBc0JpdG1hcERlc3Ryb3k7XG5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5fY2FjaGVkU3ByaXRlKVxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fZGVzdHJveUNhY2hlZERpc3BsYXlPYmplY3QoKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB0aGlzLnJlbmRlcldlYkdMID0gdGhpcy5fb3JpZ2luYWxSZW5kZXJXZWJHTDtcbiAgICAgICAgICAgICAgICB0aGlzLnJlbmRlckNhbnZhcyA9IHRoaXMuX29yaWdpbmFsUmVuZGVyQ2FudmFzO1xuICAgICAgICAgICAgICAgIHRoaXMuZ2V0Qm91bmRzID0gdGhpcy5fb3JpZ2luYWxHZXRCb3VuZHM7XG5cbiAgICAgICAgICAgICAgICB0aGlzLmRlc3Ryb3kgPSB0aGlzLl9vcmlnaW5hbERlc3Ryb3k7XG5cbiAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZVRyYW5zZm9ybSA9IHRoaXMuX29yaWdpbmFsVXBkYXRlVHJhbnNmb3JtO1xuICAgICAgICAgICAgICAgIHRoaXMuY29udGFpbnNQb2ludCA9IHRoaXMuX29yaWdpbmFsQ29udGFpbnNQb2ludDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn0pO1xuLyoqXG4qIFJlbmRlcnMgYSBjYWNoZWQgdmVyc2lvbiBvZiB0aGUgc3ByaXRlIHdpdGggV2ViR0xcbipcbiogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLldlYkdMUmVuZGVyZXJ9IHRoZSBXZWJHTCByZW5kZXJlclxuKiBAcHJpdmF0ZVxuKi9cbkRpc3BsYXlPYmplY3QucHJvdG90eXBlLl9yZW5kZXJDYWNoZWRXZWJHTCA9IGZ1bmN0aW9uIChyZW5kZXJlcilcbntcbiAgICBpZiAoIXRoaXMudmlzaWJsZSB8fCB0aGlzLndvcmxkQWxwaGEgPD0gMCB8fCAhdGhpcy5yZW5kZXJhYmxlKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuX2luaXRDYWNoZWREaXNwbGF5T2JqZWN0KCByZW5kZXJlciApO1xuXG4gICAgdGhpcy5fY2FjaGVkU3ByaXRlLndvcmxkQWxwaGEgPSB0aGlzLndvcmxkQWxwaGE7XG5cbiAgICByZW5kZXJlci5zZXRPYmplY3RSZW5kZXJlcihyZW5kZXJlci5wbHVnaW5zLnNwcml0ZSk7XG4gICAgcmVuZGVyZXIucGx1Z2lucy5zcHJpdGUucmVuZGVyKCB0aGlzLl9jYWNoZWRTcHJpdGUgKTtcbn07XG5cbi8qKlxuKiBQcmVwYXJlcyB0aGUgV2ViR0wgcmVuZGVyZXIgdG8gY2FjaGUgdGhlIHNwcml0ZVxuKlxuKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcn0gdGhlIFdlYkdMIHJlbmRlcmVyXG4qIEBwcml2YXRlXG4qL1xuRGlzcGxheU9iamVjdC5wcm90b3R5cGUuX2luaXRDYWNoZWREaXNwbGF5T2JqZWN0ID0gZnVuY3Rpb24gKHJlbmRlcmVyKVxue1xuICAgIGlmKHRoaXMuX2NhY2hlZFNwcml0ZSlcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBmaXJzdCB3ZSBmbHVzaCBhbnl0aGluZyBsZWZ0IGluIHRoZSByZW5kZXJlciAob3RoZXJ3aXNlIGl0IHdvdWxkIGdldCByZW5kZXJlZCB0byB0aGUgY2FjaGVkIHRleHR1cmUpXG4gICAgcmVuZGVyZXIuY3VycmVudFJlbmRlcmVyLmZsdXNoKCk7XG4gICAgLy90aGlzLmZpbHRlcnM9IFtdO1xuICAgIC8vIG5leHQgd2UgZmluZCB0aGUgZGltZW5zaW9ucyBvZiB0aGUgdW50cmFuc2Zvcm1lZCBvYmplY3RcbiAgICAvLyB0aGlzIGZ1bmN0aW9uIGFsc28gY2FsbHMgdXBkYXRldHJhbnNmb3JtIG9uIGFsbCBpdHMgY2hpbGRyZW4gYXMgcGFydCBvZiB0aGUgbWVhc3VyaW5nLiBUaGlzIG1lYW5zIHdlIGRvbid0IG5lZWQgdG8gdXBkYXRlIHRoZSB0cmFuc2Zvcm0gYWdhaW4gaW4gdGhpcyBmdW5jdGlvblxuICAgIC8vIFRPRE8gcGFzcyBhbiBvYmplY3QgdG8gY2xvbmUgdG9vPyBzYXZlcyBoYXZpbmcgdG8gY3JlYXRlIGEgbmV3IG9uZSBlYWNoIHRpbWUhXG4gICAgdmFyIGJvdW5kcyA9IHRoaXMuZ2V0TG9jYWxCb3VuZHMoKS5jbG9uZSgpO1xuXG4gICAgLy8gYWRkIHNvbWUgcGFkZGluZyFcbiAgICBpZih0aGlzLl9maWx0ZXJzKVxuICAgIHtcbiAgICAgICAgdmFyIHBhZGRpbmcgPSB0aGlzLl9maWx0ZXJzWzBdLnBhZGRpbmc7XG4gICAgICAgIGJvdW5kcy54IC09IHBhZGRpbmc7XG4gICAgICAgIGJvdW5kcy55IC09IHBhZGRpbmc7XG5cbiAgICAgICAgYm91bmRzLndpZHRoICs9IHBhZGRpbmcgKiAyO1xuICAgICAgICBib3VuZHMuaGVpZ2h0ICs9IHBhZGRpbmcgKiAyO1xuICAgIH1cblxuICAgIC8vIGZvciBub3cgd2UgY2FjaGUgdGhlIGN1cnJlbnQgcmVuZGVyVGFyZ2V0IHRoYXQgdGhlIHdlYkdMIHJlbmRlcmVyIGlzIGN1cnJlbnRseSB1c2luZy5cbiAgICAvLyB0aGlzIGNvdWxkIGJlIG1vcmUgZWxlZ2VudC4uXG4gICAgdmFyIGNhY2hlZFJlbmRlclRhcmdldCA9IHJlbmRlcmVyLmN1cnJlbnRSZW5kZXJUYXJnZXQ7XG4gICAgLy8gV2UgYWxzbyBzdG9yZSB0aGUgZmlsdGVyIHN0YWNrIC0gSSB3aWxsIGRlZmluaXRlbHkgbG9vayB0byBjaGFuZ2UgaG93IHRoaXMgd29ya3MgYSBsaXR0bGUgbGF0ZXIgZG93biB0aGUgbGluZS5cbiAgICB2YXIgc3RhY2sgPSByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLmZpbHRlclN0YWNrO1xuXG4gICAgLy8gdGhpcyByZW5kZXJUZXh0dXJlIHdpbGwgYmUgdXNlZCB0byBzdG9yZSB0aGUgY2FjaGVkIERpc3BsYXlPYmplY3RcbiAgICB2YXIgcmVuZGVyVGV4dHVyZSA9IG5ldyBjb3JlLlJlbmRlclRleHR1cmUocmVuZGVyZXIsIGJvdW5kcy53aWR0aCB8IDAsIGJvdW5kcy5oZWlnaHQgfCAwKTtcblxuICAgIC8vIG5lZWQgdG8gc2V0IC8vXG4gICAgdmFyIG0gPSBfdGVtcE1hdHJpeDtcblxuICAgIG0udHggPSAtYm91bmRzLng7XG4gICAgbS50eSA9IC1ib3VuZHMueTtcblxuXG5cbiAgICAvLyBzZXQgYWxsIHByb3BlcnRpZXMgdG8gdGhlcmUgb3JpZ2luYWwgc28gd2UgY2FuIHJlbmRlciB0byBhIHRleHR1cmVcbiAgICB0aGlzLnJlbmRlcldlYkdMID0gdGhpcy5fb3JpZ2luYWxSZW5kZXJXZWJHTDtcblxuICAgIHJlbmRlclRleHR1cmUucmVuZGVyKHRoaXMsIG0sIHRydWUsIHRydWUpO1xuXG4gICAgLy8gbm93IHJlc3RvcmUgdGhlIHN0YXRlIGJlIHNldHRpbmcgdGhlIG5ldyBwcm9wZXJ0aWVzXG4gICAgcmVuZGVyZXIuc2V0UmVuZGVyVGFyZ2V0KGNhY2hlZFJlbmRlclRhcmdldCk7XG4gICAgcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5maWx0ZXJTdGFjayA9IHN0YWNrO1xuXG4gICAgdGhpcy5yZW5kZXJXZWJHTCAgICAgPSB0aGlzLl9yZW5kZXJDYWNoZWRXZWJHTDtcbiAgICB0aGlzLnVwZGF0ZVRyYW5zZm9ybSA9IHRoaXMuZGlzcGxheU9iamVjdFVwZGF0ZVRyYW5zZm9ybTtcbiAgICB0aGlzLmdldEJvdW5kcyAgICAgICA9IHRoaXMuX2dldENhY2hlZEJvdW5kcztcblxuXG4gICAgLy8gY3JlYXRlIG91ciBjYWNoZWQgc3ByaXRlXG4gICAgdGhpcy5fY2FjaGVkU3ByaXRlID0gbmV3IGNvcmUuU3ByaXRlKHJlbmRlclRleHR1cmUpO1xuICAgIHRoaXMuX2NhY2hlZFNwcml0ZS53b3JsZFRyYW5zZm9ybSA9IHRoaXMud29ybGRUcmFuc2Zvcm07XG4gICAgdGhpcy5fY2FjaGVkU3ByaXRlLmFuY2hvci54ID0gLSggYm91bmRzLnggLyBib3VuZHMud2lkdGggKTtcbiAgICB0aGlzLl9jYWNoZWRTcHJpdGUuYW5jaG9yLnkgPSAtKCBib3VuZHMueSAvIGJvdW5kcy5oZWlnaHQgKTtcblxuICAgIC8vIHJlc3RvcmUgdGhlIHRyYW5zZm9ybSBvZiB0aGUgY2FjaGVkIHNwcml0ZSB0byBhdm9pZCB0aGUgbmFzdHkgZmxpY2tlci4uXG4gICAgdGhpcy51cGRhdGVUcmFuc2Zvcm0oKTtcblxuICAgIC8vIG1hcCB0aGUgaGl0IHRlc3QuLlxuICAgIHRoaXMuY29udGFpbnNQb2ludCA9IHRoaXMuX2NhY2hlZFNwcml0ZS5jb250YWluc1BvaW50LmJpbmQodGhpcy5fY2FjaGVkU3ByaXRlKTtcbn07XG5cbi8qKlxuKiBSZW5kZXJzIGEgY2FjaGVkIHZlcnNpb24gb2YgdGhlIHNwcml0ZSB3aXRoIGNhbnZhc1xuKlxuKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuQ2FudmFzUmVuZGVyZXJ9IHRoZSBDYW52YXMgcmVuZGVyZXJcbiogQHByaXZhdGVcbiovXG5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS5fcmVuZGVyQ2FjaGVkQ2FudmFzID0gZnVuY3Rpb24gKHJlbmRlcmVyKVxue1xuICAgIGlmICghdGhpcy52aXNpYmxlIHx8IHRoaXMud29ybGRBbHBoYSA8PSAwIHx8ICF0aGlzLnJlbmRlcmFibGUpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5faW5pdENhY2hlZERpc3BsYXlPYmplY3RDYW52YXMoIHJlbmRlcmVyICk7XG5cbiAgICB0aGlzLl9jYWNoZWRTcHJpdGUud29ybGRBbHBoYSA9IHRoaXMud29ybGRBbHBoYTtcblxuICAgIHRoaXMuX2NhY2hlZFNwcml0ZS5yZW5kZXJDYW52YXMocmVuZGVyZXIpO1xufTtcblxuLy9UT0RPIHRoaXMgY2FuIGJlIHRoZSBzYW1lIGFzIHRoZSB3ZWJHTCB2ZXJpc29uLi4gd2lsbCBuZWVkIHRvIGRvIGEgbGl0dGxlIHR3ZWFraW5nIGZpcnN0IHRob3VnaC4uXG4vKipcbiogUHJlcGFyZXMgdGhlIENhbnZhcyByZW5kZXJlciB0byBjYWNoZSB0aGUgc3ByaXRlXG4qXG4qIEBwYXJhbSByZW5kZXJlciB7UElYSS5DYW52YXNSZW5kZXJlcn0gdGhlIENhbnZhcyByZW5kZXJlclxuKiBAcHJpdmF0ZVxuKi9cbkRpc3BsYXlPYmplY3QucHJvdG90eXBlLl9pbml0Q2FjaGVkRGlzcGxheU9iamVjdENhbnZhcyA9IGZ1bmN0aW9uIChyZW5kZXJlcilcbntcbiAgICBpZih0aGlzLl9jYWNoZWRTcHJpdGUpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy9nZXQgYm91bmRzIGFjdHVhbGx5IHRyYW5zZm9ybXMgdGhlIG9iamVjdCBmb3IgdXMgYWxyZWFkeSFcbiAgICB2YXIgYm91bmRzID0gdGhpcy5nZXRMb2NhbEJvdW5kcygpO1xuXG4gICAgdmFyIGNhY2hlZFJlbmRlclRhcmdldCA9IHJlbmRlcmVyLmNvbnRleHQ7XG5cbiAgICB2YXIgcmVuZGVyVGV4dHVyZSA9IG5ldyBjb3JlLlJlbmRlclRleHR1cmUocmVuZGVyZXIsIGJvdW5kcy53aWR0aCB8IDAsIGJvdW5kcy5oZWlnaHQgfCAwKTtcblxuICAgIC8vIG5lZWQgdG8gc2V0IC8vXG4gICAgdmFyIG0gPSBfdGVtcE1hdHJpeDtcblxuICAgIG0udHggPSAtYm91bmRzLng7XG4gICAgbS50eSA9IC1ib3VuZHMueTtcblxuICAgIC8vIHNldCBhbGwgcHJvcGVydGllcyB0byB0aGVyZSBvcmlnaW5hbCBzbyB3ZSBjYW4gcmVuZGVyIHRvIGEgdGV4dHVyZVxuICAgIHRoaXMucmVuZGVyQ2FudmFzID0gdGhpcy5fb3JpZ2luYWxSZW5kZXJDYW52YXM7XG5cbiAgICByZW5kZXJUZXh0dXJlLnJlbmRlcih0aGlzLCBtLCB0cnVlKTtcblxuICAgIC8vIG5vdyByZXN0b3JlIHRoZSBzdGF0ZSBiZSBzZXR0aW5nIHRoZSBuZXcgcHJvcGVydGllc1xuICAgIHJlbmRlcmVyLmNvbnRleHQgPSBjYWNoZWRSZW5kZXJUYXJnZXQ7XG5cbiAgICB0aGlzLnJlbmRlckNhbnZhcyA9IHRoaXMuX3JlbmRlckNhY2hlZENhbnZhcztcbiAgICB0aGlzLnVwZGF0ZVRyYW5zZm9ybSA9IHRoaXMuZGlzcGxheU9iamVjdFVwZGF0ZVRyYW5zZm9ybTtcbiAgICB0aGlzLmdldEJvdW5kcyAgPSB0aGlzLl9nZXRDYWNoZWRCb3VuZHM7XG5cblxuICAgIC8vIGNyZWF0ZSBvdXIgY2FjaGVkIHNwcml0ZVxuICAgIHRoaXMuX2NhY2hlZFNwcml0ZSA9IG5ldyBjb3JlLlNwcml0ZShyZW5kZXJUZXh0dXJlKTtcbiAgICB0aGlzLl9jYWNoZWRTcHJpdGUud29ybGRUcmFuc2Zvcm0gPSB0aGlzLndvcmxkVHJhbnNmb3JtO1xuICAgIHRoaXMuX2NhY2hlZFNwcml0ZS5hbmNob3IueCA9IC0oIGJvdW5kcy54IC8gYm91bmRzLndpZHRoICk7XG4gICAgdGhpcy5fY2FjaGVkU3ByaXRlLmFuY2hvci55ID0gLSggYm91bmRzLnkgLyBib3VuZHMuaGVpZ2h0ICk7XG5cbiAgICB0aGlzLnVwZGF0ZVRyYW5zZm9ybSgpO1xuXG4gICAgdGhpcy5jb250YWluc1BvaW50ID0gdGhpcy5fY2FjaGVkU3ByaXRlLmNvbnRhaW5zUG9pbnQuYmluZCh0aGlzLl9jYWNoZWRTcHJpdGUpO1xufTtcblxuLyoqXG4qIENhbGN1bGF0ZXMgdGhlIGJvdW5kcyBvZiB0aGUgY2FjaGVkIHNwcml0ZVxuKlxuKiBAcHJpdmF0ZVxuKi9cbkRpc3BsYXlPYmplY3QucHJvdG90eXBlLl9nZXRDYWNoZWRCb3VuZHMgPSBmdW5jdGlvbiAoKVxue1xuICAgIHRoaXMuX2NhY2hlZFNwcml0ZS5fY3VycmVudEJvdW5kcyA9IG51bGw7XG5cbiAgICByZXR1cm4gdGhpcy5fY2FjaGVkU3ByaXRlLmdldEJvdW5kcygpO1xufTtcblxuLyoqXG4qIERlc3Ryb3lzIHRoZSBjYWNoZWQgc3ByaXRlLlxuKlxuKiBAcHJpdmF0ZVxuKi9cbkRpc3BsYXlPYmplY3QucHJvdG90eXBlLl9kZXN0cm95Q2FjaGVkRGlzcGxheU9iamVjdCA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy5fY2FjaGVkU3ByaXRlLl90ZXh0dXJlLmRlc3Ryb3koKTtcbiAgICB0aGlzLl9jYWNoZWRTcHJpdGUgPSBudWxsO1xufTtcblxuRGlzcGxheU9iamVjdC5wcm90b3R5cGUuX2NhY2hlQXNCaXRtYXBEZXN0cm95ID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLmNhY2hlQXNCaXRtYXAgPSBmYWxzZTtcbiAgICB0aGlzLl9vcmlnaW5hbERlc3Ryb3koKTtcbn07XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uL2NvcmUnKTtcblxuLyoqXG4gKiBUaGUgaW5zdGFuY2UgbmFtZSBvZiB0aGUgb2JqZWN0LlxuICpcbiAqIEBtZW1iZXJvZiBQSVhJLkRpc3BsYXlPYmplY3QjXG4gKiBAbWVtYmVyIHtzdHJpbmd9XG4gKi9cbmNvcmUuRGlzcGxheU9iamVjdC5wcm90b3R5cGUubmFtZSA9IG51bGw7XG5cbi8qKlxuKiBSZXR1cm5zIHRoZSBkaXNwbGF5IG9iamVjdCBpbiB0aGUgY29udGFpbmVyXG4qXG4qIEBtZW1iZXJvZiBQSVhJLkNvbnRhaW5lciNcbiogQHBhcmFtIG5hbWUge3N0cmluZ30gaW5zdGFuY2UgbmFtZVxuKiBAcmV0dXJuIHtQSVhJLkRpc3BsYXlPYmplY3R9XG4qL1xuY29yZS5Db250YWluZXIucHJvdG90eXBlLmdldENoaWxkQnlOYW1lID0gZnVuY3Rpb24gKG5hbWUpXG57XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmNoaWxkcmVuLmxlbmd0aDsgaSsrKVxuICAgIHtcbiAgICAgICAgaWYgKHRoaXMuY2hpbGRyZW5baV0ubmFtZSA9PT0gbmFtZSlcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY2hpbGRyZW5baV07XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG59O1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi9jb3JlJyk7XG5cbi8qKlxuKiBSZXR1cm5zIHRoZSBnbG9iYWwgcG9zaXRpb24gb2YgdGhlIGRpc3BsYXlPYmplY3RcbipcbiogQG1lbWJlcm9mIFBJWEkuRGlzcGxheU9iamVjdCNcbiogQHBhcmFtIHBvaW50IHtQb2ludH0gdGhlIHBvaW50IHRvIHdyaXRlIHRoZSBnbG9iYWwgdmFsdWUgdG8uIElmIG51bGwgYSBuZXcgcG9pbnQgd2lsbCBiZSByZXR1cm5lZFxuKiBAcmV0dXJuIHtQb2ludH1cbiovXG5jb3JlLkRpc3BsYXlPYmplY3QucHJvdG90eXBlLmdldEdsb2JhbFBvc2l0aW9uID0gZnVuY3Rpb24gKHBvaW50KVxue1xuICAgIHBvaW50ID0gcG9pbnQgfHwgbmV3IGNvcmUuUG9pbnQoKTtcblxuICAgIGlmKHRoaXMucGFyZW50KVxuICAgIHtcbiAgICAgICAgdGhpcy5kaXNwbGF5T2JqZWN0VXBkYXRlVHJhbnNmb3JtKCk7XG5cbiAgICAgICAgcG9pbnQueCA9IHRoaXMud29ybGRUcmFuc2Zvcm0udHg7XG4gICAgICAgIHBvaW50LnkgPSB0aGlzLndvcmxkVHJhbnNmb3JtLnR5O1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICBwb2ludC54ID0gdGhpcy5wb3NpdGlvbi54O1xuICAgICAgICBwb2ludC55ID0gdGhpcy5wb3NpdGlvbi55O1xuICAgIH1cblxuICAgIHJldHVybiBwb2ludDtcbn07XG4iLCIvKipcbiAqIEBmaWxlICAgICAgICBNYWluIGV4cG9ydCBvZiB0aGUgUElYSSBleHRyYXMgbGlicmFyeVxuICogQGF1dGhvciAgICAgIE1hdCBHcm92ZXMgPG1hdEBnb29kYm95ZGlnaXRhbC5jb20+XG4gKiBAY29weXJpZ2h0ICAgMjAxMy0yMDE1IEdvb2RCb3lEaWdpdGFsXG4gKiBAbGljZW5zZSAgICAge0BsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9waXhpanMvcGl4aS5qcy9ibG9iL21hc3Rlci9MSUNFTlNFfE1JVCBMaWNlbnNlfVxuICovXG5cbnJlcXVpcmUoJy4vY2FjaGVBc0JpdG1hcCcpO1xucmVxdWlyZSgnLi9nZXRDaGlsZEJ5TmFtZScpO1xucmVxdWlyZSgnLi9nZXRHbG9iYWxQb3NpdGlvbicpO1xuXG4vKipcbiAqIEBuYW1lc3BhY2UgUElYSS5leHRyYXNcbiAqL1xubW9kdWxlLmV4cG9ydHMgPSB7XG4gICAgTW92aWVDbGlwOiAgICAgIHJlcXVpcmUoJy4vTW92aWVDbGlwJyksXG4gICAgVGlsaW5nU3ByaXRlOiAgIHJlcXVpcmUoJy4vVGlsaW5nU3ByaXRlJyksXG4gICAgQml0bWFwVGV4dDogICAgIHJlcXVpcmUoJy4vQml0bWFwVGV4dCcpXG59O1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi8uLi9jb3JlJyk7XG4vLyBAc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9zdWJzdGFjay9icmZzL2lzc3Vlcy8yNVxuXG5cbi8vIFRPRE8gKGNlbmdsZXIpIC0gVGhlIFkgaXMgZmxpcHBlZCBpbiB0aGlzIHNoYWRlciBmb3Igc29tZSByZWFzb24uXG5cbi8qKlxuICogQGF1dGhvciBWaWNvIEB2aWNvY290ZWFcbiAqIG9yaWdpbmFsIHNoYWRlciA6IGh0dHBzOi8vd3d3LnNoYWRlcnRveS5jb20vdmlldy9sc3NHRGogYnkgQG1vdkFYMTNoXG4gKi9cblxuLyoqXG4gKiBBbiBBU0NJSSBmaWx0ZXIuXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLkFic3RyYWN0RmlsdGVyXG4gKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzXG4gKi9cbmZ1bmN0aW9uIEFzY2lpRmlsdGVyKClcbntcbiAgICBjb3JlLkFic3RyYWN0RmlsdGVyLmNhbGwodGhpcyxcbiAgICAgICAgLy8gdmVydGV4IHNoYWRlclxuICAgICAgICBudWxsLFxuICAgICAgICAvLyBmcmFnbWVudCBzaGFkZXJcbiAgICAgICAgXCJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcXG5cXG51bmlmb3JtIHZlYzQgZGltZW5zaW9ucztcXG51bmlmb3JtIGZsb2F0IHBpeGVsU2l6ZTtcXG51bmlmb3JtIHNhbXBsZXIyRCB1U2FtcGxlcjtcXG5cXG5mbG9hdCBjaGFyYWN0ZXIoZmxvYXQgbiwgdmVjMiBwKVxcbntcXG4gICAgcCA9IGZsb29yKHAqdmVjMig0LjAsIC00LjApICsgMi41KTtcXG4gICAgaWYgKGNsYW1wKHAueCwgMC4wLCA0LjApID09IHAueCAmJiBjbGFtcChwLnksIDAuMCwgNC4wKSA9PSBwLnkpXFxuICAgIHtcXG4gICAgICAgIGlmIChpbnQobW9kKG4vZXhwMihwLnggKyA1LjAqcC55KSwgMi4wKSkgPT0gMSkgcmV0dXJuIDEuMDtcXG4gICAgfVxcbiAgICByZXR1cm4gMC4wO1xcbn1cXG5cXG52b2lkIG1haW4oKVxcbntcXG4gICAgdmVjMiB1diA9IGdsX0ZyYWdDb29yZC54eTtcXG5cXG4gICAgdmVjMyBjb2wgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIGZsb29yKCB1diAvIHBpeGVsU2l6ZSApICogcGl4ZWxTaXplIC8gZGltZW5zaW9ucy54eSkucmdiO1xcblxcbiAgICBmbG9hdCBncmF5ID0gKGNvbC5yICsgY29sLmcgKyBjb2wuYikgLyAzLjA7XFxuXFxuICAgIGZsb2F0IG4gPSAgNjU1MzYuMDsgICAgICAgICAgICAgLy8gLlxcbiAgICBpZiAoZ3JheSA+IDAuMikgbiA9IDY1NjAwLjA7ICAgIC8vIDpcXG4gICAgaWYgKGdyYXkgPiAwLjMpIG4gPSAzMzI3NzIuMDsgICAvLyAqXFxuICAgIGlmIChncmF5ID4gMC40KSBuID0gMTUyNTUwODYuMDsgLy8gb1xcbiAgICBpZiAoZ3JheSA+IDAuNSkgbiA9IDIzMzg1MTY0LjA7IC8vICZcXG4gICAgaWYgKGdyYXkgPiAwLjYpIG4gPSAxNTI1MjAxNC4wOyAvLyA4XFxuICAgIGlmIChncmF5ID4gMC43KSBuID0gMTMxOTk0NTIuMDsgLy8gQFxcbiAgICBpZiAoZ3JheSA+IDAuOCkgbiA9IDExNTEyODEwLjA7IC8vICNcXG5cXG4gICAgdmVjMiBwID0gbW9kKCB1diAvICggcGl4ZWxTaXplICogMC41ICksIDIuMCkgLSB2ZWMyKDEuMCk7XFxuICAgIGNvbCA9IGNvbCAqIGNoYXJhY3RlcihuLCBwKTtcXG5cXG4gICAgZ2xfRnJhZ0NvbG9yID0gdmVjNChjb2wsIDEuMCk7XFxufVxcblwiLFxuICAgICAgICAvLyBjdXN0b20gdW5pZm9ybXNcbiAgICAgICAge1xuICAgICAgICAgICAgZGltZW5zaW9uczogeyB0eXBlOiAnNGZ2JywgdmFsdWU6IG5ldyBGbG9hdDMyQXJyYXkoWzAsIDAsIDAsIDBdKSB9LFxuICAgICAgICAgICAgcGl4ZWxTaXplOiAgeyB0eXBlOiAnMWYnLCB2YWx1ZTogOCB9XG4gICAgICAgIH1cbiAgICApO1xufVxuXG5Bc2NpaUZpbHRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuQWJzdHJhY3RGaWx0ZXIucHJvdG90eXBlKTtcbkFzY2lpRmlsdGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IEFzY2lpRmlsdGVyO1xubW9kdWxlLmV4cG9ydHMgPSBBc2NpaUZpbHRlcjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoQXNjaWlGaWx0ZXIucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogVGhlIHBpeGVsIHNpemUgdXNlZCBieSB0aGUgZmlsdGVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuQXNjaWlGaWx0ZXIjXG4gICAgICovXG4gICAgc2l6ZToge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVuaWZvcm1zLnBpeGVsU2l6ZS52YWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudW5pZm9ybXMucGl4ZWxTaXplLnZhbHVlID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG59KTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vLi4vY29yZScpLFxuICAgIEJsdXJYRmlsdGVyID0gcmVxdWlyZSgnLi4vYmx1ci9CbHVyWEZpbHRlcicpLFxuICAgIEJsdXJZRmlsdGVyID0gcmVxdWlyZSgnLi4vYmx1ci9CbHVyWUZpbHRlcicpO1xuXG4vKipcbiAqIFRoZSBCbG9vbUZpbHRlciBhcHBsaWVzIGEgR2F1c3NpYW4gYmx1ciB0byBhbiBvYmplY3QuXG4gKiBUaGUgc3RyZW5ndGggb2YgdGhlIGJsdXIgY2FuIGJlIHNldCBmb3IgeC0gYW5kIHktYXhpcyBzZXBhcmF0ZWx5LlxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5BYnN0cmFjdEZpbHRlclxuICogQG1lbWJlcm9mIFBJWEkuZmlsdGVyc1xuICovXG5mdW5jdGlvbiBCbG9vbUZpbHRlcigpXG57XG4gICAgY29yZS5BYnN0cmFjdEZpbHRlci5jYWxsKHRoaXMpO1xuXG4gICAgdGhpcy5ibHVyWEZpbHRlciA9IG5ldyBCbHVyWEZpbHRlcigpO1xuICAgIHRoaXMuYmx1cllGaWx0ZXIgPSBuZXcgQmx1cllGaWx0ZXIoKTtcblxuICAgIHRoaXMuZGVmYXVsdEZpbHRlciA9IG5ldyBjb3JlLkFic3RyYWN0RmlsdGVyKCk7XG59XG5cbkJsb29tRmlsdGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoY29yZS5BYnN0cmFjdEZpbHRlci5wcm90b3R5cGUpO1xuQmxvb21GaWx0ZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gQmxvb21GaWx0ZXI7XG5tb2R1bGUuZXhwb3J0cyA9IEJsb29tRmlsdGVyO1xuXG5CbG9vbUZpbHRlci5wcm90b3R5cGUuYXBwbHlGaWx0ZXIgPSBmdW5jdGlvbiAocmVuZGVyZXIsIGlucHV0LCBvdXRwdXQpXG57XG4gICAgdmFyIHJlbmRlclRhcmdldCA9IHJlbmRlcmVyLmZpbHRlck1hbmFnZXIuZ2V0UmVuZGVyVGFyZ2V0KHRydWUpO1xuXG4gICAgLy9UT0RPIC0gY29weVRleFN1YkltYWdlMkQgY291bGQgYmUgdXNlZCBoZXJlP1xuICAgIHRoaXMuZGVmYXVsdEZpbHRlci5hcHBseUZpbHRlcihyZW5kZXJlciwgaW5wdXQsIG91dHB1dCk7XG5cbiAgICB0aGlzLmJsdXJYRmlsdGVyLmFwcGx5RmlsdGVyKHJlbmRlcmVyLCBpbnB1dCwgcmVuZGVyVGFyZ2V0KTtcblxuICAgIHJlbmRlcmVyLmJsZW5kTW9kZU1hbmFnZXIuc2V0QmxlbmRNb2RlKGNvcmUuQkxFTkRfTU9ERVMuU0NSRUVOKTtcblxuICAgIHRoaXMuYmx1cllGaWx0ZXIuYXBwbHlGaWx0ZXIocmVuZGVyZXIsIHJlbmRlclRhcmdldCwgb3V0cHV0KTtcblxuICAgIHJlbmRlcmVyLmJsZW5kTW9kZU1hbmFnZXIuc2V0QmxlbmRNb2RlKGNvcmUuQkxFTkRfTU9ERVMuTk9STUFMKTtcblxuICAgIHJlbmRlcmVyLmZpbHRlck1hbmFnZXIucmV0dXJuUmVuZGVyVGFyZ2V0KHJlbmRlclRhcmdldCk7XG59O1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhCbG9vbUZpbHRlci5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBzdHJlbmd0aCBvZiBib3RoIHRoZSBibHVyWCBhbmQgYmx1clkgcHJvcGVydGllcyBzaW11bHRhbmVvdXNseVxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJPZiBQSVhJLmZpbHRlcnMuQmxvb21GaWx0ZXIjXG4gICAgICogQGRlZmF1bHQgMlxuICAgICAqL1xuICAgIGJsdXI6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5ibHVyWEZpbHRlci5ibHVyO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5ibHVyWEZpbHRlci5ibHVyID0gdGhpcy5ibHVyWUZpbHRlci5ibHVyID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgc3RyZW5ndGggb2YgdGhlIGJsdXJYIHByb3BlcnR5XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlck9mIFBJWEkuZmlsdGVycy5CbG9vbUZpbHRlciNcbiAgICAgKiBAZGVmYXVsdCAyXG4gICAgICovXG4gICAgYmx1clg6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5ibHVyWEZpbHRlci5ibHVyO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5ibHVyWEZpbHRlci5ibHVyID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgc3RyZW5ndGggb2YgdGhlIGJsdXJZIHByb3BlcnR5XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlck9mIFBJWEkuZmlsdGVycy5CbG9vbUZpbHRlciNcbiAgICAgKiBAZGVmYXVsdCAyXG4gICAgICovXG4gICAgYmx1clk6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5ibHVyWUZpbHRlci5ibHVyO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5ibHVyWUZpbHRlci5ibHVyID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG59KTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vLi4vY29yZScpO1xuXG5cbi8qKlxuICogVGhlIEJsdXJEaXJGaWx0ZXIgYXBwbGllcyBhIEdhdXNzaWFuIGJsdXIgdG93YXJkIGEgZGlyZWN0aW9uIHRvIGFuIG9iamVjdC5cbiAqXG4gKiBAY2xhc3NcbiAqIEBwYXJhbSB7bnVtYmVyfSBkaXJYXG4gKiBAcGFyYW0ge251bWJlcn0gZGlyWVxuICogQGV4dGVuZHMgUElYSS5BYnN0cmFjdEZpbHRlclxuICogQG1lbWJlcm9mIFBJWEkuZmlsdGVyc1xuICovXG5mdW5jdGlvbiBCbHVyRGlyRmlsdGVyKGRpclgsIGRpclkpXG57XG4gICAgY29yZS5BYnN0cmFjdEZpbHRlci5jYWxsKHRoaXMsXG4gICAgICAgIC8vIHZlcnRleCBzaGFkZXJcbiAgICAgICAgXCJhdHRyaWJ1dGUgdmVjMiBhVmVydGV4UG9zaXRpb247XFxuYXR0cmlidXRlIHZlYzIgYVRleHR1cmVDb29yZDtcXG5hdHRyaWJ1dGUgdmVjNCBhQ29sb3I7XFxuXFxudW5pZm9ybSBmbG9hdCBzdHJlbmd0aDtcXG51bmlmb3JtIGZsb2F0IGRpclg7XFxudW5pZm9ybSBmbG9hdCBkaXJZO1xcbnVuaWZvcm0gbWF0MyBwcm9qZWN0aW9uTWF0cml4O1xcblxcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xcbnZhcnlpbmcgdmVjNCB2Q29sb3I7XFxudmFyeWluZyB2ZWMyIHZCbHVyVGV4Q29vcmRzWzNdO1xcblxcbnZvaWQgbWFpbih2b2lkKVxcbntcXG4gICAgZ2xfUG9zaXRpb24gPSB2ZWM0KChwcm9qZWN0aW9uTWF0cml4ICogdmVjMygoYVZlcnRleFBvc2l0aW9uKSwgMS4wKSkueHksIDAuMCwgMS4wKTtcXG4gICAgdlRleHR1cmVDb29yZCA9IGFUZXh0dXJlQ29vcmQ7XFxuXFxuICAgIHZCbHVyVGV4Q29vcmRzWzBdID0gYVRleHR1cmVDb29yZCArIHZlYzIoICgwLjAwNCAqIHN0cmVuZ3RoKSAqIGRpclgsICgwLjAwNCAqIHN0cmVuZ3RoKSAqIGRpclkgKTtcXG4gICAgdkJsdXJUZXhDb29yZHNbMV0gPSBhVGV4dHVyZUNvb3JkICsgdmVjMiggKDAuMDA4ICogc3RyZW5ndGgpICogZGlyWCwgKDAuMDA4ICogc3RyZW5ndGgpICogZGlyWSApO1xcbiAgICB2Qmx1clRleENvb3Jkc1syXSA9IGFUZXh0dXJlQ29vcmQgKyB2ZWMyKCAoMC4wMTIgKiBzdHJlbmd0aCkgKiBkaXJYLCAoMC4wMTIgKiBzdHJlbmd0aCkgKiBkaXJZICk7XFxuXFxuICAgIHZDb2xvciA9IHZlYzQoYUNvbG9yLnJnYiAqIGFDb2xvci5hLCBhQ29sb3IuYSk7XFxufVxcblwiLFxuICAgICAgICAvLyBmcmFnbWVudCBzaGFkZXJcbiAgICAgICAgXCJwcmVjaXNpb24gbG93cCBmbG9hdDtcXG5cXG52YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDtcXG52YXJ5aW5nIHZlYzIgdkJsdXJUZXhDb29yZHNbM107XFxudmFyeWluZyB2ZWM0IHZDb2xvcjtcXG5cXG51bmlmb3JtIHNhbXBsZXIyRCB1U2FtcGxlcjtcXG5cXG52b2lkIG1haW4odm9pZClcXG57XFxuICAgIGdsX0ZyYWdDb2xvciA9IHZlYzQoMC4wKTtcXG5cXG4gICAgZ2xfRnJhZ0NvbG9yICs9IHRleHR1cmUyRCh1U2FtcGxlciwgdlRleHR1cmVDb29yZCAgICAgKSAqIDAuMzk4OTQyMjgwNDAxNDMyNztcXG4gICAgZ2xfRnJhZ0NvbG9yICs9IHRleHR1cmUyRCh1U2FtcGxlciwgdkJsdXJUZXhDb29yZHNbIDBdKSAqIDAuMjQxOTcwNzI0NTE5MTQ1NDtcXG4gICAgZ2xfRnJhZ0NvbG9yICs9IHRleHR1cmUyRCh1U2FtcGxlciwgdkJsdXJUZXhDb29yZHNbIDFdKSAqIDAuMDUzOTkwOTY2NTEzMTg5ODU7XFxuICAgIGdsX0ZyYWdDb2xvciArPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZCbHVyVGV4Q29vcmRzWyAyXSkgKiAwLjAwNDQzMTg0ODQxMTkzODM0MTtcXG59XFxuXCIsXG4gICAgICAgIC8vIHNldCB0aGUgdW5pZm9ybXNcbiAgICAgICAge1xuICAgICAgICAgICAgc3RyZW5ndGg6IHsgdHlwZTogJzFmJywgdmFsdWU6IDEgfSxcbiAgICAgICAgICAgIGRpclg6IHsgdHlwZTogJzFmJywgdmFsdWU6IGRpclggfHwgMCB9LFxuICAgICAgICAgICAgZGlyWTogeyB0eXBlOiAnMWYnLCB2YWx1ZTogZGlyWSB8fCAwIH1cbiAgICAgICAgfVxuICAgICk7XG5cbiAgICB0aGlzLmRlZmF1bHRGaWx0ZXIgPSBuZXcgY29yZS5BYnN0cmFjdEZpbHRlcigpO1xuXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgbnVtYmVyIG9mIHBhc3NlcyBmb3IgYmx1ci4gTW9yZSBwYXNzZXMgbWVhbnMgaGlnaGVyIHF1YWlsaXR5IGJsdXJpbmcuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMVxuICAgICAqL1xuICAgIHRoaXMucGFzc2VzID0gMTtcblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIFggZGlyZWN0aW9uIG9mIHRoZSBibHVyXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMFxuICAgICAqL1xuICAgIHRoaXMuZGlyWCA9IGRpclggfHwgMDtcblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIFkgZGlyZWN0aW9uIG9mIHRoZSBibHVyXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMFxuICAgICAqL1xuICAgIHRoaXMuZGlyWSA9IGRpclkgfHwgMDtcblxuICAgIHRoaXMuc3RyZW5ndGggPSA0O1xufVxuXG5CbHVyRGlyRmlsdGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoY29yZS5BYnN0cmFjdEZpbHRlci5wcm90b3R5cGUpO1xuQmx1ckRpckZpbHRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBCbHVyRGlyRmlsdGVyO1xubW9kdWxlLmV4cG9ydHMgPSBCbHVyRGlyRmlsdGVyO1xuXG5CbHVyRGlyRmlsdGVyLnByb3RvdHlwZS5hcHBseUZpbHRlciA9IGZ1bmN0aW9uIChyZW5kZXJlciwgaW5wdXQsIG91dHB1dCwgY2xlYXIpIHtcblxuICAgIHZhciBzaGFkZXIgPSB0aGlzLmdldFNoYWRlcihyZW5kZXJlcik7XG5cbiAgICB0aGlzLnVuaWZvcm1zLnN0cmVuZ3RoLnZhbHVlID0gdGhpcy5zdHJlbmd0aCAvIDQgLyB0aGlzLnBhc3NlcyAqIChpbnB1dC5mcmFtZS53aWR0aCAvIGlucHV0LnNpemUud2lkdGgpO1xuXG4gICAgaWYgKHRoaXMucGFzc2VzID09PSAxKSB7XG4gICAgICAgIHJlbmRlcmVyLmZpbHRlck1hbmFnZXIuYXBwbHlGaWx0ZXIoc2hhZGVyLCBpbnB1dCwgb3V0cHV0LCBjbGVhcik7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgdmFyIHJlbmRlclRhcmdldCA9IHJlbmRlcmVyLmZpbHRlck1hbmFnZXIuZ2V0UmVuZGVyVGFyZ2V0KHRydWUpO1xuXG4gICAgICAgIHJlbmRlcmVyLmZpbHRlck1hbmFnZXIuYXBwbHlGaWx0ZXIoc2hhZGVyLCBpbnB1dCwgcmVuZGVyVGFyZ2V0LCBjbGVhcik7XG5cbiAgICAgICAgZm9yKHZhciBpID0gMDsgaSA8IHRoaXMucGFzc2VzLTI7IGkrKylcbiAgICAgICAge1xuICAgICAgICAgICAgLy90aGlzLnVuaWZvcm1zLnN0cmVuZ3RoLnZhbHVlID0gdGhpcy5zdHJlbmd0aCAvIDQgLyAodGhpcy5wYXNzZXMrKGkqMikpICogKGlucHV0LmZyYW1lLndpZHRoIC8gaW5wdXQuc2l6ZS53aWR0aCk7XG4gICAgICAgICAgICByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLmFwcGx5RmlsdGVyKHNoYWRlciwgcmVuZGVyVGFyZ2V0LCByZW5kZXJUYXJnZXQsIGNsZWFyKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJlbmRlcmVyLmZpbHRlck1hbmFnZXIuYXBwbHlGaWx0ZXIoc2hhZGVyLCByZW5kZXJUYXJnZXQsIG91dHB1dCwgY2xlYXIpO1xuXG4gICAgICAgIHJlbmRlcmVyLmZpbHRlck1hbmFnZXIucmV0dXJuUmVuZGVyVGFyZ2V0KHJlbmRlclRhcmdldCk7XG4gICAgfVxufTtcblxuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhCbHVyRGlyRmlsdGVyLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIHN0cmVuZ3RoIG9mIGJvdGggdGhlIGJsdXIuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5CbHVyRGlyRmlsdGVyI1xuICAgICAqIEBkZWZhdWx0IDJcbiAgICAgKi9cbiAgICBibHVyOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuc3RyZW5ndGg7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnBhZGRpbmcgPSB2YWx1ZSAqIDAuNTtcbiAgICAgICAgICAgIHRoaXMuc3RyZW5ndGggPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgWCBkaXJlY3Rpb24gb2YgdGhlIGJsdXIuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5CbHVyWUZpbHRlciNcbiAgICAgKiBAZGVmYXVsdCAwXG4gICAgICovXG4gICAgZGlyWDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmRpclg7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLmRpclgudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgWSBkaXJlY3Rpb24gb2YgdGhlIGJsdXIuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5CbHVyRGlyRmlsdGVyI1xuICAgICAqIEBkZWZhdWx0IDBcbiAgICAgKi9cbiAgICBkaXJZOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZGlyWTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudW5pZm9ybXMuZGlyWS52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfVxufSk7XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uLy4uL2NvcmUnKSxcbiAgICBCbHVyWEZpbHRlciA9IHJlcXVpcmUoJy4vQmx1clhGaWx0ZXInKSxcbiAgICBCbHVyWUZpbHRlciA9IHJlcXVpcmUoJy4vQmx1cllGaWx0ZXInKTtcblxuLyoqXG4gKiBUaGUgQmx1ckZpbHRlciBhcHBsaWVzIGEgR2F1c3NpYW4gYmx1ciB0byBhbiBvYmplY3QuXG4gKiBUaGUgc3RyZW5ndGggb2YgdGhlIGJsdXIgY2FuIGJlIHNldCBmb3IgeC0gYW5kIHktYXhpcyBzZXBhcmF0ZWx5LlxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5BYnN0cmFjdEZpbHRlclxuICogQG1lbWJlcm9mIFBJWEkuZmlsdGVyc1xuICovXG5mdW5jdGlvbiBCbHVyRmlsdGVyKClcbntcbiAgICBjb3JlLkFic3RyYWN0RmlsdGVyLmNhbGwodGhpcyk7XG5cbiAgICB0aGlzLmJsdXJYRmlsdGVyID0gbmV3IEJsdXJYRmlsdGVyKCk7XG4gICAgdGhpcy5ibHVyWUZpbHRlciA9IG5ldyBCbHVyWUZpbHRlcigpO1xufVxuXG5CbHVyRmlsdGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoY29yZS5BYnN0cmFjdEZpbHRlci5wcm90b3R5cGUpO1xuQmx1ckZpbHRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBCbHVyRmlsdGVyO1xubW9kdWxlLmV4cG9ydHMgPSBCbHVyRmlsdGVyO1xuXG5CbHVyRmlsdGVyLnByb3RvdHlwZS5hcHBseUZpbHRlciA9IGZ1bmN0aW9uIChyZW5kZXJlciwgaW5wdXQsIG91dHB1dClcbntcbiAgICB2YXIgcmVuZGVyVGFyZ2V0ID0gcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5nZXRSZW5kZXJUYXJnZXQodHJ1ZSk7XG5cbiAgICB0aGlzLmJsdXJYRmlsdGVyLmFwcGx5RmlsdGVyKHJlbmRlcmVyLCBpbnB1dCwgcmVuZGVyVGFyZ2V0KTtcbiAgICB0aGlzLmJsdXJZRmlsdGVyLmFwcGx5RmlsdGVyKHJlbmRlcmVyLCByZW5kZXJUYXJnZXQsIG91dHB1dCk7XG5cbiAgICByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLnJldHVyblJlbmRlclRhcmdldChyZW5kZXJUYXJnZXQpO1xufTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoQmx1ckZpbHRlci5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBzdHJlbmd0aCBvZiBib3RoIHRoZSBibHVyWCBhbmQgYmx1clkgcHJvcGVydGllcyBzaW11bHRhbmVvdXNseVxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJPZiBQSVhJLmZpbHRlcnMuQmx1ckZpbHRlciNcbiAgICAgKiBAZGVmYXVsdCAyXG4gICAgICovXG4gICAgYmx1cjoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmJsdXJYRmlsdGVyLmJsdXI7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnBhZGRpbmcgPSBNYXRoLmFicyh2YWx1ZSkgKiAwLjU7XG4gICAgICAgICAgICB0aGlzLmJsdXJYRmlsdGVyLmJsdXIgPSB0aGlzLmJsdXJZRmlsdGVyLmJsdXIgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBudW1iZXIgb2YgcGFzc2VzIGZvciBibHVyLiBNb3JlIHBhc3NlcyBtZWFucyBoaWdoZXIgcXVhaWxpdHkgYmx1cmluZy5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLkJsdXJZRmlsdGVyI1xuICAgICAqIEBkZWZhdWx0IDFcbiAgICAgKi9cbiAgICBwYXNzZXM6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gIHRoaXMuYmx1clhGaWx0ZXIucGFzc2VzO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5ibHVyWEZpbHRlci5wYXNzZXMgPSB0aGlzLmJsdXJZRmlsdGVyLnBhc3NlcyA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIHN0cmVuZ3RoIG9mIHRoZSBibHVyWCBwcm9wZXJ0eVxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJPZiBQSVhJLmZpbHRlcnMuQmx1ckZpbHRlciNcbiAgICAgKiBAZGVmYXVsdCAyXG4gICAgICovXG4gICAgYmx1clg6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5ibHVyWEZpbHRlci5ibHVyO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5ibHVyWEZpbHRlci5ibHVyID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgc3RyZW5ndGggb2YgdGhlIGJsdXJZIHByb3BlcnR5XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlck9mIFBJWEkuZmlsdGVycy5CbHVyRmlsdGVyI1xuICAgICAqIEBkZWZhdWx0IDJcbiAgICAgKi9cbiAgICBibHVyWToge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmJsdXJZRmlsdGVyLmJsdXI7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmJsdXJZRmlsdGVyLmJsdXIgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi8uLi9jb3JlJyk7XG4vLyBAc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9zdWJzdGFjay9icmZzL2lzc3Vlcy8yNVxuXG5cbi8qKlxuICogVGhlIEJsdXJYRmlsdGVyIGFwcGxpZXMgYSBob3Jpem9udGFsIEdhdXNzaWFuIGJsdXIgdG8gYW4gb2JqZWN0LlxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5BYnN0cmFjdEZpbHRlclxuICogQG1lbWJlcm9mIFBJWEkuZmlsdGVyc1xuICovXG5mdW5jdGlvbiBCbHVyWEZpbHRlcigpXG57XG4gICAgY29yZS5BYnN0cmFjdEZpbHRlci5jYWxsKHRoaXMsXG4gICAgICAgIC8vIHZlcnRleCBzaGFkZXJcbiAgICAgICAgXCJhdHRyaWJ1dGUgdmVjMiBhVmVydGV4UG9zaXRpb247XFxuYXR0cmlidXRlIHZlYzIgYVRleHR1cmVDb29yZDtcXG5hdHRyaWJ1dGUgdmVjNCBhQ29sb3I7XFxuXFxudW5pZm9ybSBmbG9hdCBzdHJlbmd0aDtcXG51bmlmb3JtIG1hdDMgcHJvamVjdGlvbk1hdHJpeDtcXG5cXG52YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDtcXG52YXJ5aW5nIHZlYzQgdkNvbG9yO1xcbnZhcnlpbmcgdmVjMiB2Qmx1clRleENvb3Jkc1s2XTtcXG5cXG52b2lkIG1haW4odm9pZClcXG57XFxuICAgIGdsX1Bvc2l0aW9uID0gdmVjNCgocHJvamVjdGlvbk1hdHJpeCAqIHZlYzMoKGFWZXJ0ZXhQb3NpdGlvbiksIDEuMCkpLnh5LCAwLjAsIDEuMCk7XFxuICAgIHZUZXh0dXJlQ29vcmQgPSBhVGV4dHVyZUNvb3JkO1xcblxcbiAgICB2Qmx1clRleENvb3Jkc1sgMF0gPSBhVGV4dHVyZUNvb3JkICsgdmVjMigtMC4wMTIgKiBzdHJlbmd0aCwgMC4wKTtcXG4gICAgdkJsdXJUZXhDb29yZHNbIDFdID0gYVRleHR1cmVDb29yZCArIHZlYzIoLTAuMDA4ICogc3RyZW5ndGgsIDAuMCk7XFxuICAgIHZCbHVyVGV4Q29vcmRzWyAyXSA9IGFUZXh0dXJlQ29vcmQgKyB2ZWMyKC0wLjAwNCAqIHN0cmVuZ3RoLCAwLjApO1xcbiAgICB2Qmx1clRleENvb3Jkc1sgM10gPSBhVGV4dHVyZUNvb3JkICsgdmVjMiggMC4wMDQgKiBzdHJlbmd0aCwgMC4wKTtcXG4gICAgdkJsdXJUZXhDb29yZHNbIDRdID0gYVRleHR1cmVDb29yZCArIHZlYzIoIDAuMDA4ICogc3RyZW5ndGgsIDAuMCk7XFxuICAgIHZCbHVyVGV4Q29vcmRzWyA1XSA9IGFUZXh0dXJlQ29vcmQgKyB2ZWMyKCAwLjAxMiAqIHN0cmVuZ3RoLCAwLjApO1xcblxcbiAgICB2Q29sb3IgPSB2ZWM0KGFDb2xvci5yZ2IgKiBhQ29sb3IuYSwgYUNvbG9yLmEpO1xcbn1cXG5cIixcbiAgICAgICAgLy8gZnJhZ21lbnQgc2hhZGVyXG4gICAgICAgIFwicHJlY2lzaW9uIGxvd3AgZmxvYXQ7XFxuXFxudmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7XFxudmFyeWluZyB2ZWMyIHZCbHVyVGV4Q29vcmRzWzZdO1xcbnZhcnlpbmcgdmVjNCB2Q29sb3I7XFxuXFxudW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXI7XFxuXFxudm9pZCBtYWluKHZvaWQpXFxue1xcbiAgICBnbF9GcmFnQ29sb3IgPSB2ZWM0KDAuMCk7XFxuXFxuICAgIGdsX0ZyYWdDb2xvciArPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZCbHVyVGV4Q29vcmRzWyAwXSkqMC4wMDQ0MzE4NDg0MTE5MzgzNDE7XFxuICAgIGdsX0ZyYWdDb2xvciArPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZCbHVyVGV4Q29vcmRzWyAxXSkqMC4wNTM5OTA5NjY1MTMxODk4NTtcXG4gICAgZ2xfRnJhZ0NvbG9yICs9IHRleHR1cmUyRCh1U2FtcGxlciwgdkJsdXJUZXhDb29yZHNbIDJdKSowLjI0MTk3MDcyNDUxOTE0NTQ7XFxuICAgIGdsX0ZyYWdDb2xvciArPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZUZXh0dXJlQ29vcmQgICAgICkqMC4zOTg5NDIyODA0MDE0MzI3O1xcbiAgICBnbF9GcmFnQ29sb3IgKz0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2Qmx1clRleENvb3Jkc1sgM10pKjAuMjQxOTcwNzI0NTE5MTQ1NDtcXG4gICAgZ2xfRnJhZ0NvbG9yICs9IHRleHR1cmUyRCh1U2FtcGxlciwgdkJsdXJUZXhDb29yZHNbIDRdKSowLjA1Mzk5MDk2NjUxMzE4OTg1O1xcbiAgICBnbF9GcmFnQ29sb3IgKz0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2Qmx1clRleENvb3Jkc1sgNV0pKjAuMDA0NDMxODQ4NDExOTM4MzQxO1xcbn1cXG5cIixcbiAgICAgICAgLy8gc2V0IHRoZSB1bmlmb3Jtc1xuICAgICAgICB7XG4gICAgICAgICAgICBzdHJlbmd0aDogeyB0eXBlOiAnMWYnLCB2YWx1ZTogMSB9XG4gICAgICAgIH1cbiAgICApO1xuXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgbnVtYmVyIG9mIHBhc3NlcyBmb3IgYmx1ci4gTW9yZSBwYXNzZXMgbWVhbnMgaGlnaGVyIHF1YWlsaXR5IGJsdXJpbmcuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMVxuICAgICAqL1xuICAgIHRoaXMucGFzc2VzID0gMTtcblxuICAgIHRoaXMuc3RyZW5ndGggPSA0O1xufVxuXG5CbHVyWEZpbHRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuQWJzdHJhY3RGaWx0ZXIucHJvdG90eXBlKTtcbkJsdXJYRmlsdGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IEJsdXJYRmlsdGVyO1xubW9kdWxlLmV4cG9ydHMgPSBCbHVyWEZpbHRlcjtcblxuQmx1clhGaWx0ZXIucHJvdG90eXBlLmFwcGx5RmlsdGVyID0gZnVuY3Rpb24gKHJlbmRlcmVyLCBpbnB1dCwgb3V0cHV0LCBjbGVhcilcbntcbiAgICB2YXIgc2hhZGVyID0gdGhpcy5nZXRTaGFkZXIocmVuZGVyZXIpO1xuXG4gICAgdGhpcy51bmlmb3Jtcy5zdHJlbmd0aC52YWx1ZSA9IHRoaXMuc3RyZW5ndGggLyA0IC8gdGhpcy5wYXNzZXMgKiAoaW5wdXQuZnJhbWUud2lkdGggLyBpbnB1dC5zaXplLndpZHRoKTtcblxuICAgIGlmKHRoaXMucGFzc2VzID09PSAxKVxuICAgIHtcbiAgICAgICAgcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5hcHBseUZpbHRlcihzaGFkZXIsIGlucHV0LCBvdXRwdXQsIGNsZWFyKTtcbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgdmFyIHJlbmRlclRhcmdldCA9IHJlbmRlcmVyLmZpbHRlck1hbmFnZXIuZ2V0UmVuZGVyVGFyZ2V0KHRydWUpO1xuICAgICAgICB2YXIgZmxpcCA9IGlucHV0O1xuICAgICAgICB2YXIgZmxvcCA9IHJlbmRlclRhcmdldDtcblxuICAgICAgICBmb3IodmFyIGkgPSAwOyBpIDwgdGhpcy5wYXNzZXMtMTsgaSsrKVxuICAgICAgICB7XG4gICAgICAgICAgICByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLmFwcGx5RmlsdGVyKHNoYWRlciwgZmxpcCwgZmxvcCwgdHJ1ZSk7XG5cbiAgICAgICAgICAgdmFyIHRlbXAgPSBmbG9wO1xuICAgICAgICAgICBmbG9wID0gZmxpcDtcbiAgICAgICAgICAgZmxpcCA9IHRlbXA7XG4gICAgICAgIH1cblxuICAgICAgICByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLmFwcGx5RmlsdGVyKHNoYWRlciwgZmxpcCwgb3V0cHV0LCBjbGVhcik7XG5cbiAgICAgICAgcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5yZXR1cm5SZW5kZXJUYXJnZXQocmVuZGVyVGFyZ2V0KTtcbiAgICB9XG59O1xuXG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKEJsdXJYRmlsdGVyLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIHN0cmVuZ3RoIG9mIGJvdGggdGhlIGJsdXIuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5CbHVyWEZpbHRlciNcbiAgICAgKiBAZGVmYXVsdCAyXG4gICAgICovXG4gICAgYmx1cjoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiAgdGhpcy5zdHJlbmd0aDtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMucGFkZGluZyA9ICBNYXRoLmFicyh2YWx1ZSkgKiAwLjU7XG4gICAgICAgICAgICB0aGlzLnN0cmVuZ3RoID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG59KTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vLi4vY29yZScpO1xuLy8gQHNlZSBodHRwczovL2dpdGh1Yi5jb20vc3Vic3RhY2svYnJmcy9pc3N1ZXMvMjVcblxuXG4vKipcbiAqIFRoZSBCbHVyWUZpbHRlciBhcHBsaWVzIGEgaG9yaXpvbnRhbCBHYXVzc2lhbiBibHVyIHRvIGFuIG9iamVjdC5cbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQWJzdHJhY3RGaWx0ZXJcbiAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnNcbiAqL1xuZnVuY3Rpb24gQmx1cllGaWx0ZXIoKVxue1xuICAgIGNvcmUuQWJzdHJhY3RGaWx0ZXIuY2FsbCh0aGlzLFxuICAgICAgICAvLyB2ZXJ0ZXggc2hhZGVyXG4gICAgICAgIFwiYXR0cmlidXRlIHZlYzIgYVZlcnRleFBvc2l0aW9uO1xcbmF0dHJpYnV0ZSB2ZWMyIGFUZXh0dXJlQ29vcmQ7XFxuYXR0cmlidXRlIHZlYzQgYUNvbG9yO1xcblxcbnVuaWZvcm0gZmxvYXQgc3RyZW5ndGg7XFxudW5pZm9ybSBtYXQzIHByb2plY3Rpb25NYXRyaXg7XFxuXFxudmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7XFxudmFyeWluZyB2ZWM0IHZDb2xvcjtcXG52YXJ5aW5nIHZlYzIgdkJsdXJUZXhDb29yZHNbNl07XFxuXFxudm9pZCBtYWluKHZvaWQpXFxue1xcbiAgICBnbF9Qb3NpdGlvbiA9IHZlYzQoKHByb2plY3Rpb25NYXRyaXggKiB2ZWMzKChhVmVydGV4UG9zaXRpb24pLCAxLjApKS54eSwgMC4wLCAxLjApO1xcbiAgICB2VGV4dHVyZUNvb3JkID0gYVRleHR1cmVDb29yZDtcXG5cXG4gICAgdkJsdXJUZXhDb29yZHNbIDBdID0gYVRleHR1cmVDb29yZCArIHZlYzIoMC4wLCAtMC4wMTIgKiBzdHJlbmd0aCk7XFxuICAgIHZCbHVyVGV4Q29vcmRzWyAxXSA9IGFUZXh0dXJlQ29vcmQgKyB2ZWMyKDAuMCwgLTAuMDA4ICogc3RyZW5ndGgpO1xcbiAgICB2Qmx1clRleENvb3Jkc1sgMl0gPSBhVGV4dHVyZUNvb3JkICsgdmVjMigwLjAsIC0wLjAwNCAqIHN0cmVuZ3RoKTtcXG4gICAgdkJsdXJUZXhDb29yZHNbIDNdID0gYVRleHR1cmVDb29yZCArIHZlYzIoMC4wLCAgMC4wMDQgKiBzdHJlbmd0aCk7XFxuICAgIHZCbHVyVGV4Q29vcmRzWyA0XSA9IGFUZXh0dXJlQ29vcmQgKyB2ZWMyKDAuMCwgIDAuMDA4ICogc3RyZW5ndGgpO1xcbiAgICB2Qmx1clRleENvb3Jkc1sgNV0gPSBhVGV4dHVyZUNvb3JkICsgdmVjMigwLjAsICAwLjAxMiAqIHN0cmVuZ3RoKTtcXG5cXG4gICB2Q29sb3IgPSB2ZWM0KGFDb2xvci5yZ2IgKiBhQ29sb3IuYSwgYUNvbG9yLmEpO1xcbn1cXG5cIixcbiAgICAgICAgLy8gZnJhZ21lbnQgc2hhZGVyXG4gICAgICAgIFwicHJlY2lzaW9uIGxvd3AgZmxvYXQ7XFxuXFxudmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7XFxudmFyeWluZyB2ZWMyIHZCbHVyVGV4Q29vcmRzWzZdO1xcbnZhcnlpbmcgdmVjNCB2Q29sb3I7XFxuXFxudW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXI7XFxuXFxudm9pZCBtYWluKHZvaWQpXFxue1xcbiAgICBnbF9GcmFnQ29sb3IgPSB2ZWM0KDAuMCk7XFxuXFxuICAgIGdsX0ZyYWdDb2xvciArPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZCbHVyVGV4Q29vcmRzWyAwXSkqMC4wMDQ0MzE4NDg0MTE5MzgzNDE7XFxuICAgIGdsX0ZyYWdDb2xvciArPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZCbHVyVGV4Q29vcmRzWyAxXSkqMC4wNTM5OTA5NjY1MTMxODk4NTtcXG4gICAgZ2xfRnJhZ0NvbG9yICs9IHRleHR1cmUyRCh1U2FtcGxlciwgdkJsdXJUZXhDb29yZHNbIDJdKSowLjI0MTk3MDcyNDUxOTE0NTQ7XFxuICAgIGdsX0ZyYWdDb2xvciArPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZUZXh0dXJlQ29vcmQgICAgICkqMC4zOTg5NDIyODA0MDE0MzI3O1xcbiAgICBnbF9GcmFnQ29sb3IgKz0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2Qmx1clRleENvb3Jkc1sgM10pKjAuMjQxOTcwNzI0NTE5MTQ1NDtcXG4gICAgZ2xfRnJhZ0NvbG9yICs9IHRleHR1cmUyRCh1U2FtcGxlciwgdkJsdXJUZXhDb29yZHNbIDRdKSowLjA1Mzk5MDk2NjUxMzE4OTg1O1xcbiAgICBnbF9GcmFnQ29sb3IgKz0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2Qmx1clRleENvb3Jkc1sgNV0pKjAuMDA0NDMxODQ4NDExOTM4MzQxO1xcbn1cXG5cIixcbiAgICAgICAgLy8gc2V0IHRoZSB1bmlmb3Jtc1xuICAgICAgICB7XG4gICAgICAgICAgICBzdHJlbmd0aDogeyB0eXBlOiAnMWYnLCB2YWx1ZTogMSB9XG4gICAgICAgIH1cbiAgICApO1xuXG4gICAgdGhpcy5wYXNzZXMgPSAxO1xuICAgIHRoaXMuc3RyZW5ndGggPSA0O1xufVxuXG5CbHVyWUZpbHRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuQWJzdHJhY3RGaWx0ZXIucHJvdG90eXBlKTtcbkJsdXJZRmlsdGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IEJsdXJZRmlsdGVyO1xubW9kdWxlLmV4cG9ydHMgPSBCbHVyWUZpbHRlcjtcblxuQmx1cllGaWx0ZXIucHJvdG90eXBlLmFwcGx5RmlsdGVyID0gZnVuY3Rpb24gKHJlbmRlcmVyLCBpbnB1dCwgb3V0cHV0LCBjbGVhcilcbntcbiAgICB2YXIgc2hhZGVyID0gdGhpcy5nZXRTaGFkZXIocmVuZGVyZXIpO1xuXG4gICAgdGhpcy51bmlmb3Jtcy5zdHJlbmd0aC52YWx1ZSA9IE1hdGguYWJzKHRoaXMuc3RyZW5ndGgpIC8gNCAvIHRoaXMucGFzc2VzICogKGlucHV0LmZyYW1lLmhlaWdodCAvIGlucHV0LnNpemUuaGVpZ2h0KTtcblxuICAgIGlmKHRoaXMucGFzc2VzID09PSAxKVxuICAgIHtcbiAgICAgICAgcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5hcHBseUZpbHRlcihzaGFkZXIsIGlucHV0LCBvdXRwdXQsIGNsZWFyKTtcbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgdmFyIHJlbmRlclRhcmdldCA9IHJlbmRlcmVyLmZpbHRlck1hbmFnZXIuZ2V0UmVuZGVyVGFyZ2V0KHRydWUpO1xuICAgICAgICB2YXIgZmxpcCA9IGlucHV0O1xuICAgICAgICB2YXIgZmxvcCA9IHJlbmRlclRhcmdldDtcblxuICAgICAgICBmb3IodmFyIGkgPSAwOyBpIDwgdGhpcy5wYXNzZXMtMTsgaSsrKVxuICAgICAgICB7XG4gICAgICAgICAgICByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLmFwcGx5RmlsdGVyKHNoYWRlciwgZmxpcCwgZmxvcCwgdHJ1ZSk7XG5cbiAgICAgICAgICAgdmFyIHRlbXAgPSBmbG9wO1xuICAgICAgICAgICBmbG9wID0gZmxpcDtcbiAgICAgICAgICAgZmxpcCA9IHRlbXA7XG4gICAgICAgIH1cblxuICAgICAgICByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLmFwcGx5RmlsdGVyKHNoYWRlciwgZmxpcCwgb3V0cHV0LCBjbGVhcik7XG5cbiAgICAgICAgcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5yZXR1cm5SZW5kZXJUYXJnZXQocmVuZGVyVGFyZ2V0KTtcbiAgICB9XG59O1xuXG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKEJsdXJZRmlsdGVyLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIHN0cmVuZ3RoIG9mIGJvdGggdGhlIGJsdXIuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5CbHVyWUZpbHRlciNcbiAgICAgKiBAZGVmYXVsdCAyXG4gICAgICovXG4gICAgYmx1cjoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiAgdGhpcy5zdHJlbmd0aDtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMucGFkZGluZyA9IE1hdGguYWJzKHZhbHVlKSAqIDAuNTtcbiAgICAgICAgICAgIHRoaXMuc3RyZW5ndGggPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi8uLi9jb3JlJyk7XG4vLyBAc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9zdWJzdGFjay9icmZzL2lzc3Vlcy8yNVxuXG5cbi8qKlxuICogQSBTbWFydCBCbHVyIEZpbHRlci5cbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQWJzdHJhY3RGaWx0ZXJcbiAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnNcbiAqL1xuZnVuY3Rpb24gU21hcnRCbHVyRmlsdGVyKClcbntcbiAgICBjb3JlLkFic3RyYWN0RmlsdGVyLmNhbGwodGhpcyxcbiAgICAgICAgLy8gdmVydGV4IHNoYWRlclxuICAgICAgICBudWxsLFxuICAgICAgICAvLyBmcmFnbWVudCBzaGFkZXJcbiAgICAgICAgXCJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcXG5cXG52YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDtcXG5cXG51bmlmb3JtIHNhbXBsZXIyRCB1U2FtcGxlcjtcXG51bmlmb3JtIHZlYzIgZGVsdGE7XFxuXFxuZmxvYXQgcmFuZG9tKHZlYzMgc2NhbGUsIGZsb2F0IHNlZWQpXFxue1xcbiAgICByZXR1cm4gZnJhY3Qoc2luKGRvdChnbF9GcmFnQ29vcmQueHl6ICsgc2VlZCwgc2NhbGUpKSAqIDQzNzU4LjU0NTMgKyBzZWVkKTtcXG59XFxuXFxudm9pZCBtYWluKHZvaWQpXFxue1xcbiAgICB2ZWM0IGNvbG9yID0gdmVjNCgwLjApO1xcbiAgICBmbG9hdCB0b3RhbCA9IDAuMDtcXG5cXG4gICAgZmxvYXQgb2Zmc2V0ID0gcmFuZG9tKHZlYzMoMTIuOTg5OCwgNzguMjMzLCAxNTEuNzE4MiksIDAuMCk7XFxuXFxuICAgIGZvciAoZmxvYXQgdCA9IC0zMC4wOyB0IDw9IDMwLjA7IHQrKylcXG4gICAge1xcbiAgICAgICAgZmxvYXQgcGVyY2VudCA9ICh0ICsgb2Zmc2V0IC0gMC41KSAvIDMwLjA7XFxuICAgICAgICBmbG9hdCB3ZWlnaHQgPSAxLjAgLSBhYnMocGVyY2VudCk7XFxuICAgICAgICB2ZWM0IHNhbXBsZSA9IHRleHR1cmUyRCh1U2FtcGxlciwgdlRleHR1cmVDb29yZCArIGRlbHRhICogcGVyY2VudCk7XFxuICAgICAgICBzYW1wbGUucmdiICo9IHNhbXBsZS5hO1xcbiAgICAgICAgY29sb3IgKz0gc2FtcGxlICogd2VpZ2h0O1xcbiAgICAgICAgdG90YWwgKz0gd2VpZ2h0O1xcbiAgICB9XFxuXFxuICAgIGdsX0ZyYWdDb2xvciA9IGNvbG9yIC8gdG90YWw7XFxuICAgIGdsX0ZyYWdDb2xvci5yZ2IgLz0gZ2xfRnJhZ0NvbG9yLmEgKyAwLjAwMDAxO1xcbn1cXG5cIixcbiAgICAgICAgLy8gdW5pZm9ybXNcbiAgICAgICAge1xuICAgICAgICAgIGRlbHRhOiB7IHR5cGU6ICd2MicsIHZhbHVlOiB7IHg6IDAuMSwgeTogMC4wIH0gfVxuICAgICAgICB9XG4gICAgKTtcbn1cblxuU21hcnRCbHVyRmlsdGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoY29yZS5BYnN0cmFjdEZpbHRlci5wcm90b3R5cGUpO1xuU21hcnRCbHVyRmlsdGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFNtYXJ0Qmx1ckZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gU21hcnRCbHVyRmlsdGVyO1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi8uLi9jb3JlJyk7XG4vLyBAc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9zdWJzdGFjay9icmZzL2lzc3Vlcy8yNVxuXG5cbi8qKlxuICogVGhlIENvbG9yTWF0cml4RmlsdGVyIGNsYXNzIGxldHMgeW91IGFwcGx5IGEgNXg0IG1hdHJpeCB0cmFuc2Zvcm1hdGlvbiBvbiB0aGUgUkdCQVxuICogY29sb3IgYW5kIGFscGhhIHZhbHVlcyBvZiBldmVyeSBwaXhlbCBvbiB5b3VyIGRpc3BsYXlPYmplY3QgdG8gcHJvZHVjZSBhIHJlc3VsdFxuICogd2l0aCBhIG5ldyBzZXQgb2YgUkdCQSBjb2xvciBhbmQgYWxwaGEgdmFsdWVzLiBJdCdzIHByZXR0eSBwb3dlcmZ1bCFcbiAqXG4gKiBgYGBqc1xuICogIHZhciBjb2xvck1hdHJpeCA9IG5ldyBQSVhJLkNvbG9yTWF0cml4RmlsdGVyKCk7XG4gKiAgY29udGFpbmVyLmZpbHRlcnMgPSBbY29sb3JNYXRyaXhdO1xuICogIGNvbG9yTWF0cml4LmNvbnRyYXN0KDIpO1xuICogYGBgXG4gKiBAYXV0aG9yIENsw6ltZW50IENoZW5lYmF1bHQgPGNsZW1lbnRAZ29vZGJveWRpZ2l0YWwuY29tPlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLkFic3RyYWN0RmlsdGVyXG4gKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzXG4gKi9cbmZ1bmN0aW9uIENvbG9yTWF0cml4RmlsdGVyKClcbntcbiAgICBjb3JlLkFic3RyYWN0RmlsdGVyLmNhbGwodGhpcyxcbiAgICAgICAgLy8gdmVydGV4IHNoYWRlclxuICAgICAgICBudWxsLFxuICAgICAgICAvLyBmcmFnbWVudCBzaGFkZXJcbiAgICAgICAgXCJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcXG5cXG52YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDtcXG51bmlmb3JtIHNhbXBsZXIyRCB1U2FtcGxlcjtcXG51bmlmb3JtIGZsb2F0IG1bMjVdO1xcblxcbnZvaWQgbWFpbih2b2lkKVxcbntcXG5cXG4gICAgdmVjNCBjID0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2VGV4dHVyZUNvb3JkKTtcXG5cXG4gICAgZ2xfRnJhZ0NvbG9yLnIgPSAobVswXSAqIGMucik7XFxuICAgICAgICBnbF9GcmFnQ29sb3IuciArPSAobVsxXSAqIGMuZyk7XFxuICAgICAgICBnbF9GcmFnQ29sb3IuciArPSAobVsyXSAqIGMuYik7XFxuICAgICAgICBnbF9GcmFnQ29sb3IuciArPSAobVszXSAqIGMuYSk7XFxuICAgICAgICBnbF9GcmFnQ29sb3IuciArPSBtWzRdO1xcblxcbiAgICBnbF9GcmFnQ29sb3IuZyA9IChtWzVdICogYy5yKTtcXG4gICAgICAgIGdsX0ZyYWdDb2xvci5nICs9IChtWzZdICogYy5nKTtcXG4gICAgICAgIGdsX0ZyYWdDb2xvci5nICs9IChtWzddICogYy5iKTtcXG4gICAgICAgIGdsX0ZyYWdDb2xvci5nICs9IChtWzhdICogYy5hKTtcXG4gICAgICAgIGdsX0ZyYWdDb2xvci5nICs9IG1bOV07XFxuXFxuICAgICBnbF9GcmFnQ29sb3IuYiA9IChtWzEwXSAqIGMucik7XFxuICAgICAgICBnbF9GcmFnQ29sb3IuYiArPSAobVsxMV0gKiBjLmcpO1xcbiAgICAgICAgZ2xfRnJhZ0NvbG9yLmIgKz0gKG1bMTJdICogYy5iKTtcXG4gICAgICAgIGdsX0ZyYWdDb2xvci5iICs9IChtWzEzXSAqIGMuYSk7XFxuICAgICAgICBnbF9GcmFnQ29sb3IuYiArPSBtWzE0XTtcXG5cXG4gICAgIGdsX0ZyYWdDb2xvci5hID0gKG1bMTVdICogYy5yKTtcXG4gICAgICAgIGdsX0ZyYWdDb2xvci5hICs9IChtWzE2XSAqIGMuZyk7XFxuICAgICAgICBnbF9GcmFnQ29sb3IuYSArPSAobVsxN10gKiBjLmIpO1xcbiAgICAgICAgZ2xfRnJhZ0NvbG9yLmEgKz0gKG1bMThdICogYy5hKTtcXG4gICAgICAgIGdsX0ZyYWdDb2xvci5hICs9IG1bMTldO1xcblxcbn1cXG5cIixcbiAgICAgICAgLy8gY3VzdG9tIHVuaWZvcm1zXG4gICAgICAgIHtcbiAgICAgICAgICAgIG06IHtcbiAgICAgICAgICAgICAgICB0eXBlOiAnMWZ2JywgdmFsdWU6IFtcbiAgICAgICAgICAgICAgICAgICAgMSwgMCwgMCwgMCwgMCxcbiAgICAgICAgICAgICAgICAgICAgMCwgMSwgMCwgMCwgMCxcbiAgICAgICAgICAgICAgICAgICAgMCwgMCwgMSwgMCwgMCxcbiAgICAgICAgICAgICAgICAgICAgMCwgMCwgMCwgMSwgMFxuICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICk7XG59XG5cbkNvbG9yTWF0cml4RmlsdGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoY29yZS5BYnN0cmFjdEZpbHRlci5wcm90b3R5cGUpO1xuQ29sb3JNYXRyaXhGaWx0ZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gQ29sb3JNYXRyaXhGaWx0ZXI7XG5tb2R1bGUuZXhwb3J0cyA9IENvbG9yTWF0cml4RmlsdGVyO1xuXG5cbi8qKlxuICogVHJhbnNmb3JtcyBjdXJyZW50IG1hdHJpeCBhbmQgc2V0IHRoZSBuZXcgb25lXG4gKlxuICogQHBhcmFtIG1hdHJpeCB7bnVtYmVyW119IChtYXQgNXg0KVxuICogQHBhcmFtIG11bHRpcGx5IHtib29sZWFufSBpZiB0cnVlLCBjdXJyZW50IG1hdHJpeCBhbmQgbWF0cml4IGFyZSBtdWx0aXBsaWVkLiBJZiBmYWxzZSwganVzdCBzZXQgdGhlIGN1cnJlbnQgbWF0cml4IHdpdGggQHBhcmFtIG1hdHJpeFxuICovXG5Db2xvck1hdHJpeEZpbHRlci5wcm90b3R5cGUuX2xvYWRNYXRyaXggPSBmdW5jdGlvbiAobWF0cml4LCBtdWx0aXBseSlcbntcbiAgICBtdWx0aXBseSA9ICEhbXVsdGlwbHk7XG5cbiAgICB2YXIgbmV3TWF0cml4ID0gbWF0cml4O1xuXG4gICAgaWYgKG11bHRpcGx5KSB7XG4gICAgICAgIHRoaXMuX211bHRpcGx5KG5ld01hdHJpeCwgdGhpcy51bmlmb3Jtcy5tLnZhbHVlLCBtYXRyaXgpO1xuICAgICAgICBuZXdNYXRyaXggPSB0aGlzLl9jb2xvck1hdHJpeChuZXdNYXRyaXgpO1xuICAgIH1cblxuICAgIC8vIHNldCB0aGUgbmV3IG1hdHJpeFxuICAgIHRoaXMudW5pZm9ybXMubS52YWx1ZSA9IG5ld01hdHJpeDtcbn07XG5cbi8qKlxuICogTXVsdGlwbGllcyB0d28gbWF0NSdzXG4gKlxuICogQHBhcmFtIG91dCB7bnVtYmVyW119IChtYXQgNXg0KSB0aGUgcmVjZWl2aW5nIG1hdHJpeFxuICogQHBhcmFtIGEge251bWJlcltdfSAobWF0IDV4NCkgdGhlIGZpcnN0IG9wZXJhbmRcbiAqIEBwYXJhbSBiIHtudW1iZXJbXX0gKG1hdCA1eDQpIHRoZSBzZWNvbmQgb3BlcmFuZFxuICogQHJldHVybnMgb3V0IHtudW1iZXJbXX0gKG1hdCA1eDQpXG4gKi9cbkNvbG9yTWF0cml4RmlsdGVyLnByb3RvdHlwZS5fbXVsdGlwbHkgPSBmdW5jdGlvbiAob3V0LCBhLCBiKVxue1xuXG4gICAgLy8gUmVkIENoYW5uZWxcbiAgICBvdXRbMF0gPSAoYVswXSAqIGJbMF0pICsgKGFbMV0gKiBiWzVdKSArIChhWzJdICogYlsxMF0pICsgKGFbM10gKiBiWzE1XSk7XG4gICAgb3V0WzFdID0gKGFbMF0gKiBiWzFdKSArIChhWzFdICogYls2XSkgKyAoYVsyXSAqIGJbMTFdKSArIChhWzNdICogYlsxNl0pO1xuICAgIG91dFsyXSA9IChhWzBdICogYlsyXSkgKyAoYVsxXSAqIGJbN10pICsgKGFbMl0gKiBiWzEyXSkgKyAoYVszXSAqIGJbMTddKTtcbiAgICBvdXRbM10gPSAoYVswXSAqIGJbM10pICsgKGFbMV0gKiBiWzhdKSArIChhWzJdICogYlsxM10pICsgKGFbM10gKiBiWzE4XSk7XG4gICAgb3V0WzRdID0gKGFbMF0gKiBiWzRdKSArIChhWzFdICogYls5XSkgKyAoYVsyXSAqIGJbMTRdKSArIChhWzNdICogYlsxOV0pO1xuXG4gICAgLy8gR3JlZW4gQ2hhbm5lbFxuICAgIG91dFs1XSA9IChhWzVdICogYlswXSkgKyAoYVs2XSAqIGJbNV0pICsgKGFbN10gKiBiWzEwXSkgKyAoYVs4XSAqIGJbMTVdKTtcbiAgICBvdXRbNl0gPSAoYVs1XSAqIGJbMV0pICsgKGFbNl0gKiBiWzZdKSArIChhWzddICogYlsxMV0pICsgKGFbOF0gKiBiWzE2XSk7XG4gICAgb3V0WzddID0gKGFbNV0gKiBiWzJdKSArIChhWzZdICogYls3XSkgKyAoYVs3XSAqIGJbMTJdKSArIChhWzhdICogYlsxN10pO1xuICAgIG91dFs4XSA9IChhWzVdICogYlszXSkgKyAoYVs2XSAqIGJbOF0pICsgKGFbN10gKiBiWzEzXSkgKyAoYVs4XSAqIGJbMThdKTtcbiAgICBvdXRbOV0gPSAoYVs1XSAqIGJbNF0pICsgKGFbNl0gKiBiWzldKSArIChhWzddICogYlsxNF0pICsgKGFbOF0gKiBiWzE5XSk7XG5cbiAgICAvLyBCbHVlIENoYW5uZWxcbiAgICBvdXRbMTBdID0gKGFbMTBdICogYlswXSkgKyAoYVsxMV0gKiBiWzVdKSArIChhWzEyXSAqIGJbMTBdKSArIChhWzEzXSAqIGJbMTVdKTtcbiAgICBvdXRbMTFdID0gKGFbMTBdICogYlsxXSkgKyAoYVsxMV0gKiBiWzZdKSArIChhWzEyXSAqIGJbMTFdKSArIChhWzEzXSAqIGJbMTZdKTtcbiAgICBvdXRbMTJdID0gKGFbMTBdICogYlsyXSkgKyAoYVsxMV0gKiBiWzddKSArIChhWzEyXSAqIGJbMTJdKSArIChhWzEzXSAqIGJbMTddKTtcbiAgICBvdXRbMTNdID0gKGFbMTBdICogYlszXSkgKyAoYVsxMV0gKiBiWzhdKSArIChhWzEyXSAqIGJbMTNdKSArIChhWzEzXSAqIGJbMThdKTtcbiAgICBvdXRbMTRdID0gKGFbMTBdICogYls0XSkgKyAoYVsxMV0gKiBiWzldKSArIChhWzEyXSAqIGJbMTRdKSArIChhWzEzXSAqIGJbMTldKTtcblxuICAgIC8vIEFscGhhIENoYW5uZWxcbiAgICBvdXRbMTVdID0gKGFbMTVdICogYlswXSkgKyAoYVsxNl0gKiBiWzVdKSArIChhWzE3XSAqIGJbMTBdKSArIChhWzE4XSAqIGJbMTVdKTtcbiAgICBvdXRbMTZdID0gKGFbMTVdICogYlsxXSkgKyAoYVsxNl0gKiBiWzZdKSArIChhWzE3XSAqIGJbMTFdKSArIChhWzE4XSAqIGJbMTZdKTtcbiAgICBvdXRbMTddID0gKGFbMTVdICogYlsyXSkgKyAoYVsxNl0gKiBiWzddKSArIChhWzE3XSAqIGJbMTJdKSArIChhWzE4XSAqIGJbMTddKTtcbiAgICBvdXRbMThdID0gKGFbMTVdICogYlszXSkgKyAoYVsxNl0gKiBiWzhdKSArIChhWzE3XSAqIGJbMTNdKSArIChhWzE4XSAqIGJbMThdKTtcbiAgICBvdXRbMTldID0gKGFbMTVdICogYls0XSkgKyAoYVsxNl0gKiBiWzldKSArIChhWzE3XSAqIGJbMTRdKSArIChhWzE4XSAqIGJbMTldKTtcblxuICAgIHJldHVybiBvdXQ7XG59O1xuXG4vKipcbiAqIENyZWF0ZSBhIEZsb2F0MzIgQXJyYXkgYW5kIG5vcm1hbGl6ZSB0aGUgb2Zmc2V0IGNvbXBvbmVudCB0byAwLTFcbiAqXG4gKiBAcGFyYW0gbWF0cml4IHtudW1iZXJbXX0gKG1hdCA1eDQpXG4gKiBAcmV0dXJuIG0ge251bWJlcltdfSAobWF0IDV4NCkgd2l0aCBhbGwgdmFsdWVzIGJldHdlZW4gMC0xXG4gKi9cbkNvbG9yTWF0cml4RmlsdGVyLnByb3RvdHlwZS5fY29sb3JNYXRyaXggPSBmdW5jdGlvbiAobWF0cml4KVxue1xuICAgIC8vIENyZWF0ZSBhIEZsb2F0MzIgQXJyYXkgYW5kIG5vcm1hbGl6ZSB0aGUgb2Zmc2V0IGNvbXBvbmVudCB0byAwLTFcbiAgICB2YXIgbSA9IG5ldyBGbG9hdDMyQXJyYXkobWF0cml4KTtcbiAgICBtWzRdIC89IDI1NTtcbiAgICBtWzldIC89IDI1NTtcbiAgICBtWzE0XSAvPSAyNTU7XG4gICAgbVsxOV0gLz0gMjU1O1xuXG4gICAgcmV0dXJuIG07XG59O1xuXG4vKipcbiAqIEFkanVzdHMgYnJpZ2h0bmVzc1xuICpcbiAqIEBwYXJhbSBiIHtudW1iZXJ9IHZhbHVlIG9mIHRoZSBicmlndGhuZXNzICgwIGlzIGJsYWNrKVxuICogQHBhcmFtIG11bHRpcGx5IHtib29sZWFufSByZWZlciB0byAuX2xvYWRNYXRyaXgoKSBtZXRob2RcbiAqL1xuQ29sb3JNYXRyaXhGaWx0ZXIucHJvdG90eXBlLmJyaWdodG5lc3MgPSBmdW5jdGlvbiAoYiwgbXVsdGlwbHkpXG57XG4gICAgdmFyIG1hdHJpeCA9IFtcbiAgICAgICAgYiwgMCwgMCwgMCwgMCxcbiAgICAgICAgMCwgYiwgMCwgMCwgMCxcbiAgICAgICAgMCwgMCwgYiwgMCwgMCxcbiAgICAgICAgMCwgMCwgMCwgMSwgMFxuICAgIF07XG5cbiAgICB0aGlzLl9sb2FkTWF0cml4KG1hdHJpeCwgbXVsdGlwbHkpO1xufTtcblxuLyoqXG4gKiBTZXQgdGhlIG1hdHJpY2VzIGluIGdyZXkgc2NhbGVzXG4gKlxuICogQHBhcmFtIHNjYWxlIHtudW1iZXJ9IHZhbHVlIG9mIHRoZSBncmV5ICgwIGlzIGJsYWNrKVxuICogQHBhcmFtIG11bHRpcGx5IHtib29sZWFufSByZWZlciB0byAuX2xvYWRNYXRyaXgoKSBtZXRob2RcbiAqL1xuQ29sb3JNYXRyaXhGaWx0ZXIucHJvdG90eXBlLmdyZXlzY2FsZSA9IGZ1bmN0aW9uIChzY2FsZSwgbXVsdGlwbHkpXG57XG4gICAgdmFyIG1hdHJpeCA9IFtcbiAgICAgICAgc2NhbGUsIHNjYWxlLCBzY2FsZSwgMCwgMCxcbiAgICAgICAgc2NhbGUsIHNjYWxlLCBzY2FsZSwgMCwgMCxcbiAgICAgICAgc2NhbGUsIHNjYWxlLCBzY2FsZSwgMCwgMCxcbiAgICAgICAgMCwgMCwgMCwgMSwgMFxuICAgIF07XG5cbiAgICB0aGlzLl9sb2FkTWF0cml4KG1hdHJpeCwgbXVsdGlwbHkpO1xufTtcbi8vQW1lcmljYW5pemVkIGFsaWFzXG5Db2xvck1hdHJpeEZpbHRlci5wcm90b3R5cGUuZ3JheXNjYWxlID0gQ29sb3JNYXRyaXhGaWx0ZXIucHJvdG90eXBlLmdyZXlzY2FsZTtcblxuLyoqXG4gKiBTZXQgdGhlIGJsYWNrIGFuZCB3aGl0ZSBtYXRyaWNlXG4gKiBNdWx0aXBseSB0aGUgY3VycmVudCBtYXRyaXhcbiAqXG4gKiBAcGFyYW0gbXVsdGlwbHkge2Jvb2xlYW59IHJlZmVyIHRvIC5fbG9hZE1hdHJpeCgpIG1ldGhvZFxuICovXG5Db2xvck1hdHJpeEZpbHRlci5wcm90b3R5cGUuYmxhY2tBbmRXaGl0ZSA9IGZ1bmN0aW9uIChtdWx0aXBseSlcbntcbiAgICB2YXIgbWF0cml4ID0gW1xuICAgICAgICAwLjMsIDAuNiwgMC4xLCAwLCAwLFxuICAgICAgICAwLjMsIDAuNiwgMC4xLCAwLCAwLFxuICAgICAgICAwLjMsIDAuNiwgMC4xLCAwLCAwLFxuICAgICAgICAwLCAwLCAwLCAxLCAwXG4gICAgXTtcblxuICAgIHRoaXMuX2xvYWRNYXRyaXgobWF0cml4LCBtdWx0aXBseSk7XG59O1xuXG4vKipcbiAqIFNldCB0aGUgaHVlIHByb3BlcnR5IG9mIHRoZSBjb2xvclxuICpcbiAqIEBwYXJhbSByb3RhdGlvbiB7bnVtYmVyfSBpbiBkZWdyZWVzXG4gKiBAcGFyYW0gbXVsdGlwbHkge2Jvb2xlYW59IHJlZmVyIHRvIC5fbG9hZE1hdHJpeCgpIG1ldGhvZFxuICovXG5Db2xvck1hdHJpeEZpbHRlci5wcm90b3R5cGUuaHVlID0gZnVuY3Rpb24gKHJvdGF0aW9uLCBtdWx0aXBseSlcbntcbiAgICByb3RhdGlvbiA9IChyb3RhdGlvbiB8fCAwKSAvIDE4MCAqIE1hdGguUEk7XG4gICAgdmFyIGNvcyA9IE1hdGguY29zKHJvdGF0aW9uKSxcbiAgICAgICAgc2luID0gTWF0aC5zaW4ocm90YXRpb24pO1xuXG4gICAgLy8gbHVtaW5hbmNlUmVkLCBsdW1pbmFuY2VHcmVlbiwgbHVtaW5hbmNlQmx1ZVxuICAgIHZhciBsdW1SID0gMC4yMTMsIC8vIG9yIDAuMzA4NlxuICAgICAgICBsdW1HID0gMC43MTUsIC8vIG9yIDAuNjA5NFxuICAgICAgICBsdW1CID0gMC4wNzI7IC8vIG9yIDAuMDgyMFxuXG4gICAgdmFyIG1hdHJpeCA9IFtcbiAgICAgICAgbHVtUiArIGNvcyAqICgxIC0gbHVtUikgKyBzaW4gKiAoLWx1bVIpLCBsdW1HICsgY29zICogKC1sdW1HKSArIHNpbiAqICgtbHVtRyksIGx1bUIgKyBjb3MgKiAoLWx1bUIpICsgc2luICogKDEgLSBsdW1CKSwgMCwgMCxcbiAgICAgICAgbHVtUiArIGNvcyAqICgtbHVtUikgKyBzaW4gKiAoMC4xNDMpLCBsdW1HICsgY29zICogKDEgLSBsdW1HKSArIHNpbiAqICgwLjE0MCksIGx1bUIgKyBjb3MgKiAoLWx1bUIpICsgc2luICogKC0wLjI4MyksIDAsIDAsXG4gICAgICAgIGx1bVIgKyBjb3MgKiAoLWx1bVIpICsgc2luICogKC0oMSAtIGx1bVIpKSwgbHVtRyArIGNvcyAqICgtbHVtRykgKyBzaW4gKiAobHVtRyksIGx1bUIgKyBjb3MgKiAoMSAtIGx1bUIpICsgc2luICogKGx1bUIpLCAwLCAwLFxuICAgICAgICAwLCAwLCAwLCAxLCAwXG4gICAgXTtcblxuICAgIHRoaXMuX2xvYWRNYXRyaXgobWF0cml4LCBtdWx0aXBseSk7XG59O1xuXG5cbi8qKlxuICogU2V0IHRoZSBjb250cmFzdCBtYXRyaXgsIGluY3JlYXNlIHRoZSBzZXBhcmF0aW9uIGJldHdlZW4gZGFyayBhbmQgYnJpZ2h0XG4gKiBJbmNyZWFzZSBjb250cmFzdCA6IHNoYWRvd3MgZGFya2VyIGFuZCBoaWdobGlnaHRzIGJyaWdodGVyXG4gKiBEZWNyZWFzZSBjb250cmFzdCA6IGJyaW5nIHRoZSBzaGFkb3dzIHVwIGFuZCB0aGUgaGlnaGxpZ2h0cyBkb3duXG4gKlxuICogQHBhcmFtIGFtb3VudCB7bnVtYmVyfSB2YWx1ZSBvZiB0aGUgY29udHJhc3RcbiAqIEBwYXJhbSBtdWx0aXBseSB7Ym9vbGVhbn0gcmVmZXIgdG8gLl9sb2FkTWF0cml4KCkgbWV0aG9kXG4gKi9cbkNvbG9yTWF0cml4RmlsdGVyLnByb3RvdHlwZS5jb250cmFzdCA9IGZ1bmN0aW9uIChhbW91bnQsIG11bHRpcGx5KVxue1xuICAgIHZhciB2ID0gKGFtb3VudCB8fCAwKSArIDE7XG4gICAgdmFyIG8gPSAtMTI4ICogKHYgLSAxKTtcblxuICAgIHZhciBtYXRyaXggPSBbXG4gICAgICAgIHYsIDAsIDAsIDAsIG8sXG4gICAgICAgIDAsIHYsIDAsIDAsIG8sXG4gICAgICAgIDAsIDAsIHYsIDAsIG8sXG4gICAgICAgIDAsIDAsIDAsIDEsIDBcbiAgICBdO1xuXG4gICAgdGhpcy5fbG9hZE1hdHJpeChtYXRyaXgsIG11bHRpcGx5KTtcbn07XG5cbi8qKlxuICogU2V0IHRoZSBzYXR1cmF0aW9uIG1hdHJpeCwgaW5jcmVhc2UgdGhlIHNlcGFyYXRpb24gYmV0d2VlbiBjb2xvcnNcbiAqIEluY3JlYXNlIHNhdHVyYXRpb24gOiBpbmNyZWFzZSBjb250cmFzdCwgYnJpZ2h0bmVzcywgYW5kIHNoYXJwbmVzc1xuICpcbiAqIEBwYXJhbSBhbW91bnQge251bWJlcn1cbiAqIEBwYXJhbSBtdWx0aXBseSB7Ym9vbGVhbn0gcmVmZXIgdG8gLl9sb2FkTWF0cml4KCkgbWV0aG9kXG4gKi9cbkNvbG9yTWF0cml4RmlsdGVyLnByb3RvdHlwZS5zYXR1cmF0ZSA9IGZ1bmN0aW9uIChhbW91bnQsIG11bHRpcGx5KVxue1xuICAgIHZhciB4ID0gKGFtb3VudCB8fCAwKSAqIDIgLyAzICsgMTtcbiAgICB2YXIgeSA9ICgoeCAtIDEpICogLTAuNSk7XG5cbiAgICB2YXIgbWF0cml4ID0gW1xuICAgICAgICB4LCB5LCB5LCAwLCAwLFxuICAgICAgICB5LCB4LCB5LCAwLCAwLFxuICAgICAgICB5LCB5LCB4LCAwLCAwLFxuICAgICAgICAwLCAwLCAwLCAxLCAwXG4gICAgXTtcblxuICAgIHRoaXMuX2xvYWRNYXRyaXgobWF0cml4LCBtdWx0aXBseSk7XG59O1xuXG4vKipcbiAqIERlc2F0dXJhdGUgaW1hZ2UgKHJlbW92ZSBjb2xvcilcbiAqXG4gKiBDYWxsIHRoZSBzYXR1cmF0ZSBmdW5jdGlvblxuICpcbiAqIEBwYXJhbSBtdWx0aXBseSB7Ym9vbGVhbn0gcmVmZXIgdG8gLl9sb2FkTWF0cml4KCkgbWV0aG9kXG4gKi9cbkNvbG9yTWF0cml4RmlsdGVyLnByb3RvdHlwZS5kZXNhdHVyYXRlID0gZnVuY3Rpb24gKG11bHRpcGx5KSAvLyBqc2hpbnQgdW51c2VkOmZhbHNlXG57XG4gICAgdGhpcy5zYXR1cmF0ZSgtMSk7XG59O1xuXG4vKipcbiAqIE5lZ2F0aXZlIGltYWdlIChpbnZlcnNlIG9mIGNsYXNzaWMgcmdiIG1hdHJpeClcbiAqXG4gKiBAcGFyYW0gbXVsdGlwbHkge2Jvb2xlYW59IHJlZmVyIHRvIC5fbG9hZE1hdHJpeCgpIG1ldGhvZFxuICovXG5Db2xvck1hdHJpeEZpbHRlci5wcm90b3R5cGUubmVnYXRpdmUgPSBmdW5jdGlvbiAobXVsdGlwbHkpXG57XG4gICAgdmFyIG1hdHJpeCA9IFtcbiAgICAgICAgMCwgMSwgMSwgMCwgMCxcbiAgICAgICAgMSwgMCwgMSwgMCwgMCxcbiAgICAgICAgMSwgMSwgMCwgMCwgMCxcbiAgICAgICAgMCwgMCwgMCwgMSwgMFxuICAgIF07XG5cbiAgICB0aGlzLl9sb2FkTWF0cml4KG1hdHJpeCwgbXVsdGlwbHkpO1xufTtcblxuLyoqXG4gKiBTZXBpYSBpbWFnZVxuICpcbiAqIEBwYXJhbSBtdWx0aXBseSB7Ym9vbGVhbn0gcmVmZXIgdG8gLl9sb2FkTWF0cml4KCkgbWV0aG9kXG4gKi9cbkNvbG9yTWF0cml4RmlsdGVyLnByb3RvdHlwZS5zZXBpYSA9IGZ1bmN0aW9uIChtdWx0aXBseSlcbntcbiAgICB2YXIgbWF0cml4ID0gW1xuICAgICAgICAwLjM5MywgMC43Njg5OTk5LCAwLjE4ODk5OTk5LCAwLCAwLFxuICAgICAgICAwLjM0OSwgMC42ODU5OTk5LCAwLjE2Nzk5OTk5LCAwLCAwLFxuICAgICAgICAwLjI3MiwgMC41MzM5OTk5LCAwLjEzMDk5OTk5LCAwLCAwLFxuICAgICAgICAwLCAwLCAwLCAxLCAwXG4gICAgXTtcblxuICAgIHRoaXMuX2xvYWRNYXRyaXgobWF0cml4LCBtdWx0aXBseSk7XG59O1xuXG4vKipcbiAqIENvbG9yIG1vdGlvbiBwaWN0dXJlIHByb2Nlc3MgaW52ZW50ZWQgaW4gMTkxNiAodGhhbmtzIERvbWluaWMgU3phYmxld3NraSlcbiAqXG4gKiBAcGFyYW0gbXVsdGlwbHkge2Jvb2xlYW59IHJlZmVyIHRvIC5fbG9hZE1hdHJpeCgpIG1ldGhvZFxuICovXG5Db2xvck1hdHJpeEZpbHRlci5wcm90b3R5cGUudGVjaG5pY29sb3IgPSBmdW5jdGlvbiAobXVsdGlwbHkpXG57XG4gICAgdmFyIG1hdHJpeCA9IFtcbiAgICAgICAgMS45MTI1Mjc3ODkxNDU2MDgzLCAtMC44NTQ1MzQ0OTc2OTUxNjQ1LCAtMC4wOTE1NTUwODQ4Mjc1NTU4NSwgMCwgMTEuNzkzNjAzNDM0Mzc3MzM3LFxuICAgICAgICAtMC4zMDg3ODMzMzg1OTI4MDk3LCAxLjc2NTg5MDg1NTU0NTg0MjgsIC0wLjEwNjAxNzQzMDc0NzIyMjQ1LCAwLCAtNzAuMzUyMDUxNjE0NjEzOTgsXG4gICAgICAgIC0wLjIzMTEwMzM3NzU0ODYxNiwgLTAuNzUwMTg5OTE5NzQ0MDIxMiwgMS44NDc1OTc4MTYxMDgxODksIDAsIDMwLjk1MDk0MDg2OTQ5MTEzOCxcbiAgICAgICAgMCwgMCwgMCwgMSwgMFxuICAgIF07XG5cbiAgICB0aGlzLl9sb2FkTWF0cml4KG1hdHJpeCwgbXVsdGlwbHkpO1xufTtcblxuLyoqXG4gKiBQb2xhcm9pZCBmaWx0ZXJcbiAqXG4gKiBAcGFyYW0gbXVsdGlwbHkge2Jvb2xlYW59IHJlZmVyIHRvIC5fbG9hZE1hdHJpeCgpIG1ldGhvZFxuICovXG5Db2xvck1hdHJpeEZpbHRlci5wcm90b3R5cGUucG9sYXJvaWQgPSBmdW5jdGlvbiAobXVsdGlwbHkpXG57XG4gICAgdmFyIG1hdHJpeCA9IFtcbiAgICAgICAgMS40MzgsIC0wLjA2MiwgLTAuMDYyLCAwLCAwLFxuICAgICAgICAtMC4xMjIsIDEuMzc4LCAtMC4xMjIsIDAsIDAsXG4gICAgICAgIC0wLjAxNiwgLTAuMDE2LCAxLjQ4MywgMCwgMCxcbiAgICAgICAgMCwgMCwgMCwgMSwgMFxuICAgIF07XG5cbiAgICB0aGlzLl9sb2FkTWF0cml4KG1hdHJpeCwgbXVsdGlwbHkpO1xufTtcblxuLyoqXG4gKiBGaWx0ZXIgd2hvIHRyYW5zZm9ybXMgOiBSZWQgLT4gQmx1ZSBhbmQgQmx1ZSAtPiBSZWRcbiAqXG4gKiBAcGFyYW0gbXVsdGlwbHkge2Jvb2xlYW59IHJlZmVyIHRvIC5fbG9hZE1hdHJpeCgpIG1ldGhvZFxuICovXG5Db2xvck1hdHJpeEZpbHRlci5wcm90b3R5cGUudG9CR1IgPSBmdW5jdGlvbiAobXVsdGlwbHkpXG57XG4gICAgdmFyIG1hdHJpeCA9IFtcbiAgICAgICAgMCwgMCwgMSwgMCwgMCxcbiAgICAgICAgMCwgMSwgMCwgMCwgMCxcbiAgICAgICAgMSwgMCwgMCwgMCwgMCxcbiAgICAgICAgMCwgMCwgMCwgMSwgMFxuICAgIF07XG5cbiAgICB0aGlzLl9sb2FkTWF0cml4KG1hdHJpeCwgbXVsdGlwbHkpO1xufTtcblxuLyoqXG4gKiBDb2xvciByZXZlcnNhbCBmaWxtIGludHJvZHVjZWQgYnkgRWFzdG1hbiBLb2RhayBpbiAxOTM1LiAodGhhbmtzIERvbWluaWMgU3phYmxld3NraSlcbiAqXG4gKiBAcGFyYW0gbXVsdGlwbHkge2Jvb2xlYW59IHJlZmVyIHRvIC5fbG9hZE1hdHJpeCgpIG1ldGhvZFxuICovXG5Db2xvck1hdHJpeEZpbHRlci5wcm90b3R5cGUua29kYWNocm9tZSA9IGZ1bmN0aW9uIChtdWx0aXBseSlcbntcbiAgICB2YXIgbWF0cml4ID0gW1xuICAgICAgICAxLjEyODU1ODIzOTY1OTM1MjUsIC0wLjM5NjczODIyODM2MDEzNDgsIC0wLjAzOTkyNTU5MTcyOTIxNzkzLCAwLCA2My43Mjk1ODc2MjE5NjUwMixcbiAgICAgICAgLTAuMTY0MDQzMzk5NjIyNDQ2MTYsIDEuMDgzNTI1MTU2NjI5MTMwNCwgLTAuMDU0OTg4MDUxMTU2MzMxMzIsIDAsIDI0LjczMjQwNzg5NjcwNjIwMyxcbiAgICAgICAgLTAuMTY3ODYwMTA3MDYxNTU3NjMsIC0wLjU2MDM0MTYyNzc2OTUyNDgsIDEuNjAxNDg1MDc2MTk2NDk0MywgMCwgMzUuNjI5ODI4MDc0NjA5NDYsXG4gICAgICAgIDAsIDAsIDAsIDEsIDBcbiAgICBdO1xuXG4gICAgdGhpcy5fbG9hZE1hdHJpeChtYXRyaXgsIG11bHRpcGx5KTtcbn07XG5cbi8qKlxuICogQnJvd24gZGVsaWNpb3VzIGJyb3duaSBmaWx0ZXIgKHRoYW5rcyBEb21pbmljIFN6YWJsZXdza2kpXG4gKlxuICogQHBhcmFtIG11bHRpcGx5IHtib29sZWFufSByZWZlciB0byAuX2xvYWRNYXRyaXgoKSBtZXRob2RcbiAqL1xuQ29sb3JNYXRyaXhGaWx0ZXIucHJvdG90eXBlLmJyb3duaSA9IGZ1bmN0aW9uIChtdWx0aXBseSlcbntcbiAgICB2YXIgbWF0cml4ID0gW1xuICAgICAgICAwLjU5OTcwMjM0OTgxNTk3MTUsIDAuMzQ1NTMyNDMwNDgzOTEyNjMsIC0wLjI3MDgyOTg2NzQ1MzgwNDIsIDAsIDQ3LjQzMTkyODU1NjAwODczLFxuICAgICAgICAtMC4wMzc3MDMyNDk4Mzc3ODMxNTcsIDAuODYwOTU3NzU4Nzk5MjY0MSwgMC4xNTA1OTU1MjM4ODQ1OTkxMywgMCwgLTM2Ljk2ODQxNDk4MzE5MTI3LFxuICAgICAgICAwLjI0MTEzNjM1MTI4MTUzMzM1LCAtMC4wNzQ0MTAzNzkwODQyMjQ5MiwgMC40NDk3MjE4MjA2NDg3NzE1MywgMCwgLTcuNTYyMDc1Mjc3NTkxMjgzLFxuICAgICAgICAwLCAwLCAwLCAxLCAwXG4gICAgXTtcblxuICAgIHRoaXMuX2xvYWRNYXRyaXgobWF0cml4LCBtdWx0aXBseSk7XG59O1xuXG4vKlxuICogVmludGFnZSBmaWx0ZXIgKHRoYW5rcyBEb21pbmljIFN6YWJsZXdza2kpXG4gKlxuICogQHBhcmFtIG11bHRpcGx5IHtib29sZWFufSByZWZlciB0byAuX2xvYWRNYXRyaXgoKSBtZXRob2RcbiAqL1xuQ29sb3JNYXRyaXhGaWx0ZXIucHJvdG90eXBlLnZpbnRhZ2UgPSBmdW5jdGlvbiAobXVsdGlwbHkpXG57XG4gICAgdmFyIG1hdHJpeCA9IFtcbiAgICAgICAgMC42Mjc5MzQ1NjM1NjA1OTk0LCAwLjMyMDIxODM0MjA4MTkzNjcsIC0wLjAzOTY1NDA4MjExMzEyNDUzLCAwLCA5LjY1MTI4NTgzNTI5NDEyMyxcbiAgICAgICAgMC4wMjU3ODM5NzcwNDgwODg2OCwgMC42NDQxMTg4NjQ0Mzc0NzcxLCAwLjAzMjU5MTI3NjE2MTQ5Mjk0LCAwLCA3LjQ2MjgyOTE3NjQ3MDU5MSxcbiAgICAgICAgMC4wNDY2MDU1NTU2NzgyNzE5LCAtMC4wODUxMjMyOTg3MjQ3ODkxLCAwLjUyNDE2NDgwMTg3MDA0NjUsIDAsIDUuMTU5MTkwNTg4MjM1Mjk2LFxuICAgICAgICAwLCAwLCAwLCAxLCAwXG4gICAgXTtcblxuICAgIHRoaXMuX2xvYWRNYXRyaXgobWF0cml4LCBtdWx0aXBseSk7XG59O1xuXG4vKlxuICogV2UgZG9uJ3Qga25vdyBleGFjdGx5IHdoYXQgaXQgZG9lcywga2luZCBvZiBncmFkaWVudCBtYXAsIGJ1dCBmdW5ueSB0byBwbGF5IHdpdGghXG4gKlxuICogQHBhcmFtIGRlc2F0dXJhdGlvbiB7bnVtYmVyfVxuICogQHBhcmFtIHRvbmVkIHtudW1iZXJ9XG4gKiBAcGFyYW0gbGlnaHRDb2xvciB7c3RyaW5nfSAoZXhhbXBsZSA6IFwiMHhGRkU1ODBcIilcbiAqIEBwYXJhbSBkYXJrQ29sb3Ige3N0cmluZ30gIChleGFtcGxlIDogXCIweEZGRTU4MFwiKVxuICpcbiAqIEBwYXJhbSBtdWx0aXBseSB7Ym9vbGVhbn0gcmVmZXIgdG8gLl9sb2FkTWF0cml4KCkgbWV0aG9kXG4gKi9cbkNvbG9yTWF0cml4RmlsdGVyLnByb3RvdHlwZS5jb2xvclRvbmUgPSBmdW5jdGlvbiAoZGVzYXR1cmF0aW9uLCB0b25lZCwgbGlnaHRDb2xvciwgZGFya0NvbG9yLCBtdWx0aXBseSlcbntcbiAgICBkZXNhdHVyYXRpb24gPSBkZXNhdHVyYXRpb24gfHwgMC4yO1xuICAgIHRvbmVkID0gdG9uZWQgfHwgMC4xNTtcbiAgICBsaWdodENvbG9yID0gbGlnaHRDb2xvciB8fCAweEZGRTU4MDtcbiAgICBkYXJrQ29sb3IgPSBkYXJrQ29sb3IgfHwgMHgzMzgwMDA7XG5cbiAgICB2YXIgbFIgPSAoKGxpZ2h0Q29sb3IgPj4gMTYpICYgMHhGRikgLyAyNTU7XG4gICAgdmFyIGxHID0gKChsaWdodENvbG9yID4+IDgpICYgMHhGRikgLyAyNTU7XG4gICAgdmFyIGxCID0gKGxpZ2h0Q29sb3IgJiAweEZGKSAvIDI1NTtcblxuICAgIHZhciBkUiA9ICgoZGFya0NvbG9yID4+IDE2KSAmIDB4RkYpIC8gMjU1O1xuICAgIHZhciBkRyA9ICgoZGFya0NvbG9yID4+IDgpICYgMHhGRikgLyAyNTU7XG4gICAgdmFyIGRCID0gKGRhcmtDb2xvciAmIDB4RkYpIC8gMjU1O1xuXG4gICAgdmFyIG1hdHJpeCA9IFtcbiAgICAgICAgMC4zLCAwLjU5LCAwLjExLCAwLCAwLFxuICAgICAgICBsUiwgbEcsIGxCLCBkZXNhdHVyYXRpb24sIDAsXG4gICAgICAgIGRSLCBkRywgZEIsIHRvbmVkLCAwLFxuICAgICAgICBsUiAtIGRSLCBsRyAtIGRHLCBsQiAtIGRCLCAwLCAwXG4gICAgXTtcblxuICAgIHRoaXMuX2xvYWRNYXRyaXgobWF0cml4LCBtdWx0aXBseSk7XG59O1xuXG4vKlxuICogTmlnaHQgZWZmZWN0XG4gKlxuICogQHBhcmFtIGludGVuc2l0eSB7bnVtYmVyfVxuICogQHBhcmFtIG11bHRpcGx5IHtib29sZWFufSByZWZlciB0byAuX2xvYWRNYXRyaXgoKSBtZXRob2RcbiAqL1xuQ29sb3JNYXRyaXhGaWx0ZXIucHJvdG90eXBlLm5pZ2h0ID0gZnVuY3Rpb24gKGludGVuc2l0eSwgbXVsdGlwbHkpXG57XG4gICAgaW50ZW5zaXR5ID0gaW50ZW5zaXR5IHx8IDAuMTtcbiAgICB2YXIgbWF0cml4ID0gW1xuICAgICAgICBpbnRlbnNpdHkgKiAoIC0yLjApLCAtaW50ZW5zaXR5LCAwLCAwLCAwLFxuICAgICAgICAtaW50ZW5zaXR5LCAwLCBpbnRlbnNpdHksIDAsIDAsXG4gICAgICAgIDAsIGludGVuc2l0eSwgaW50ZW5zaXR5ICogMi4wLCAwLCAwLFxuICAgICAgICAwLCAwLCAwLCAxLCAwXG4gICAgXTtcblxuICAgIHRoaXMuX2xvYWRNYXRyaXgobWF0cml4LCBtdWx0aXBseSk7XG59O1xuXG5cbi8qXG4gKiBQcmVkYXRvciBlZmZlY3RcbiAqXG4gKiBFcmFzZSB0aGUgY3VycmVudCBtYXRyaXggYnkgc2V0dGluZyBhIG5ldyBpbmRlcGVudCBvbmVcbiAqXG4gKiBAcGFyYW0gYW1vdW50IHtudW1iZXJ9IGhvdyBtdWNoIHRoZSBwcmVkYXRvciBmZWVscyBoaXMgZnV0dXJlIHZpY3RpbVxuICogQHBhcmFtIG11bHRpcGx5IHtib29sZWFufSByZWZlciB0byAuX2xvYWRNYXRyaXgoKSBtZXRob2RcbiAqL1xuQ29sb3JNYXRyaXhGaWx0ZXIucHJvdG90eXBlLnByZWRhdG9yID0gZnVuY3Rpb24gKGFtb3VudCwgbXVsdGlwbHkpXG57XG4gICAgdmFyIG1hdHJpeCA9IFtcbiAgICAgICAgMTEuMjI0MTMwNjMwNDkzMTY0ICogYW1vdW50LCAtNC43OTQ0ODY5OTk1MTE3MTkgKiBhbW91bnQsIC0yLjg3NDYxMTg1NDU1MzIyMjcgKiBhbW91bnQsIDAgKiBhbW91bnQsIDAuNDAzNDI0MzgyMjA5Nzc3ODMgKiBhbW91bnQsXG4gICAgICAgIC0zLjYzMzA2OTc1MzY0Njg1MDYgKiBhbW91bnQsIDkuMTkzMTU3MTk2MDQ0OTIyICogYW1vdW50LCAtMi45NTE4MTA4MzY3OTE5OTIgKiBhbW91bnQsIDAgKiBhbW91bnQsIC0xLjMxNjEzNTA0ODg2NjI3MiAqIGFtb3VudCxcbiAgICAgICAgLTMuMjE4NDE5NzkwMjY3OTQ0MyAqIGFtb3VudCwgLTQuMjM3NTAzMDUxNzU3ODEyNSAqIGFtb3VudCwgNy40NzY0NDgwNTkwODIwMzEgKiBhbW91bnQsIDAgKiBhbW91bnQsIDAuODA0NDQ1OTIyMzc0NzI1MyAqIGFtb3VudCxcbiAgICAgICAgMCwgMCwgMCwgMSwgMFxuICAgIF07XG5cbiAgICB0aGlzLl9sb2FkTWF0cml4KG1hdHJpeCwgbXVsdGlwbHkpO1xufTtcblxuLypcbiAqIExTRCBlZmZlY3RcbiAqXG4gKiBNdWx0aXBseSB0aGUgY3VycmVudCBtYXRyaXhcbiAqXG4gKiBAcGFyYW0gYW1vdW50IHtudW1iZXJ9IEhvdyBjcmF6eSBpcyB5b3VyIGVmZmVjdFxuICogQHBhcmFtIG11bHRpcGx5IHtib29sZWFufSByZWZlciB0byAuX2xvYWRNYXRyaXgoKSBtZXRob2RcbiAqL1xuQ29sb3JNYXRyaXhGaWx0ZXIucHJvdG90eXBlLmxzZCA9IGZ1bmN0aW9uIChtdWx0aXBseSlcbntcbiAgICB2YXIgbWF0cml4ID0gW1xuICAgICAgICAyLCAtMC40LCAwLjUsIDAsIDAsXG4gICAgICAgIC0wLjUsIDIsIC0wLjQsIDAsIDAsXG4gICAgICAgIC0wLjQsIC0wLjUsIDMsIDAsIDAsXG4gICAgICAgIDAsIDAsIDAsIDEsIDBcbiAgICBdO1xuXG4gICAgdGhpcy5fbG9hZE1hdHJpeChtYXRyaXgsIG11bHRpcGx5KTtcbn07XG5cbi8qXG4gKiBFcmFzZSB0aGUgY3VycmVudCBtYXRyaXggYnkgc2V0dGluZyB0aGUgZGVmYXVsdCBvbmVcbiAqXG4gKi9cbkNvbG9yTWF0cml4RmlsdGVyLnByb3RvdHlwZS5yZXNldCA9IGZ1bmN0aW9uICgpXG57XG4gICAgdmFyIG1hdHJpeCA9IFtcbiAgICAgICAgMSwgMCwgMCwgMCwgMCxcbiAgICAgICAgMCwgMSwgMCwgMCwgMCxcbiAgICAgICAgMCwgMCwgMSwgMCwgMCxcbiAgICAgICAgMCwgMCwgMCwgMSwgMFxuICAgIF07XG5cbiAgICB0aGlzLl9sb2FkTWF0cml4KG1hdHJpeCwgZmFsc2UpO1xufTtcblxuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhDb2xvck1hdHJpeEZpbHRlci5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBtYXRyaXggb2YgdGhlIGNvbG9yIG1hdHJpeCBmaWx0ZXJcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcltdfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuQ29sb3JNYXRyaXhGaWx0ZXIjXG4gICAgICogQGRlZmF1bHQgWzEsIDAsIDAsIDAsIDAsIDAsIDEsIDAsIDAsIDAsIDAsIDAsIDEsIDAsIDAsIDAsIDAsIDAsIDEsIDBdXG4gICAgICovXG4gICAgbWF0cml4OiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudW5pZm9ybXMubS52YWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudW5pZm9ybXMubS52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfVxufSk7XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uLy4uL2NvcmUnKTtcbi8vIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL3N1YnN0YWNrL2JyZnMvaXNzdWVzLzI1XG5cblxuLyoqXG4gKiBUaGlzIGxvd2VycyB0aGUgY29sb3IgZGVwdGggb2YgeW91ciBpbWFnZSBieSB0aGUgZ2l2ZW4gYW1vdW50LCBwcm9kdWNpbmcgYW4gaW1hZ2Ugd2l0aCBhIHNtYWxsZXIgcGFsZXR0ZS5cbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQWJzdHJhY3RGaWx0ZXJcbiAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnNcbiAqL1xuZnVuY3Rpb24gQ29sb3JTdGVwRmlsdGVyKClcbntcbiAgICBjb3JlLkFic3RyYWN0RmlsdGVyLmNhbGwodGhpcyxcbiAgICAgICAgLy8gdmVydGV4IHNoYWRlclxuICAgICAgICBudWxsLFxuICAgICAgICAvLyBmcmFnbWVudCBzaGFkZXJcbiAgICAgICAgXCJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcXG5cXG52YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDtcXG5cXG51bmlmb3JtIHNhbXBsZXIyRCB1U2FtcGxlcjtcXG51bmlmb3JtIGZsb2F0IHN0ZXA7XFxuXFxudm9pZCBtYWluKHZvaWQpXFxue1xcbiAgICB2ZWM0IGNvbG9yID0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2VGV4dHVyZUNvb3JkKTtcXG5cXG4gICAgY29sb3IgPSBmbG9vcihjb2xvciAqIHN0ZXApIC8gc3RlcDtcXG5cXG4gICAgZ2xfRnJhZ0NvbG9yID0gY29sb3I7XFxufVxcblwiLFxuICAgICAgICAvLyBjdXN0b20gdW5pZm9ybXNcbiAgICAgICAge1xuICAgICAgICAgICAgc3RlcDogeyB0eXBlOiAnMWYnLCB2YWx1ZTogNSB9XG4gICAgICAgIH1cbiAgICApO1xufVxuXG5Db2xvclN0ZXBGaWx0ZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShjb3JlLkFic3RyYWN0RmlsdGVyLnByb3RvdHlwZSk7XG5Db2xvclN0ZXBGaWx0ZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gQ29sb3JTdGVwRmlsdGVyO1xubW9kdWxlLmV4cG9ydHMgPSBDb2xvclN0ZXBGaWx0ZXI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKENvbG9yU3RlcEZpbHRlci5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBUaGUgbnVtYmVyIG9mIHN0ZXBzIHRvIHJlZHVjZSB0aGUgcGFsZXR0ZSBieS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLkNvbG9yU3RlcEZpbHRlciNcbiAgICAgKi9cbiAgICBzdGVwOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudW5pZm9ybXMuc3RlcC52YWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudW5pZm9ybXMuc3RlcC52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfVxufSk7XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uLy4uL2NvcmUnKTtcbi8vIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL3N1YnN0YWNrL2JyZnMvaXNzdWVzLzI1XG5cblxuLyoqXG4gKiBUaGUgQ29udm9sdXRpb25GaWx0ZXIgY2xhc3MgYXBwbGllcyBhIG1hdHJpeCBjb252b2x1dGlvbiBmaWx0ZXIgZWZmZWN0LlxuICogQSBjb252b2x1dGlvbiBjb21iaW5lcyBwaXhlbHMgaW4gdGhlIGlucHV0IGltYWdlIHdpdGggbmVpZ2hib3JpbmcgcGl4ZWxzIHRvIHByb2R1Y2UgYSBuZXcgaW1hZ2UuXG4gKiBBIHdpZGUgdmFyaWV0eSBvZiBpbWFnZSBlZmZlY3RzIGNhbiBiZSBhY2hpZXZlZCB0aHJvdWdoIGNvbnZvbHV0aW9ucywgaW5jbHVkaW5nIGJsdXJyaW5nLCBlZGdlXG4gKiBkZXRlY3Rpb24sIHNoYXJwZW5pbmcsIGVtYm9zc2luZywgYW5kIGJldmVsaW5nLiBUaGUgbWF0cml4IHNob3VsZCBiZSBzcGVjaWZpZWQgYXMgYSA5IHBvaW50IEFycmF5LlxuICogU2VlIGh0dHA6Ly9kb2NzLmdpbXAub3JnL2VuL3BsdWctaW4tY29udm1hdHJpeC5odG1sIGZvciBtb3JlIGluZm8uXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLkFic3RyYWN0RmlsdGVyXG4gKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzXG4gKiBAcGFyYW0gbWF0cml4IHtudW1iZXJbXX0gQW4gYXJyYXkgb2YgdmFsdWVzIHVzZWQgZm9yIG1hdHJpeCB0cmFuc2Zvcm1hdGlvbi4gU3BlY2lmaWVkIGFzIGEgOSBwb2ludCBBcnJheS5cbiAqIEBwYXJhbSB3aWR0aCB7bnVtYmVyfSBXaWR0aCBvZiB0aGUgb2JqZWN0IHlvdSBhcmUgdHJhbnNmb3JtaW5nXG4gKiBAcGFyYW0gaGVpZ2h0IHtudW1iZXJ9IEhlaWdodCBvZiB0aGUgb2JqZWN0IHlvdSBhcmUgdHJhbnNmb3JtaW5nXG4gKi9cbmZ1bmN0aW9uIENvbnZvbHV0aW9uRmlsdGVyKG1hdHJpeCwgd2lkdGgsIGhlaWdodClcbntcbiAgICBjb3JlLkFic3RyYWN0RmlsdGVyLmNhbGwodGhpcyxcbiAgICAgICAgLy8gdmVydGV4IHNoYWRlclxuICAgICAgICBudWxsLFxuICAgICAgICAvLyBmcmFnbWVudCBzaGFkZXJcbiAgICAgICAgXCJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcXG5cXG52YXJ5aW5nIG1lZGl1bXAgdmVjMiB2VGV4dHVyZUNvb3JkO1xcblxcbnVuaWZvcm0gc2FtcGxlcjJEIHVTYW1wbGVyO1xcbnVuaWZvcm0gdmVjMiB0ZXhlbFNpemU7XFxudW5pZm9ybSBmbG9hdCBtYXRyaXhbOV07XFxuXFxudm9pZCBtYWluKHZvaWQpXFxue1xcbiAgIHZlYzQgYzExID0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2VGV4dHVyZUNvb3JkIC0gdGV4ZWxTaXplKTsgLy8gdG9wIGxlZnRcXG4gICB2ZWM0IGMxMiA9IHRleHR1cmUyRCh1U2FtcGxlciwgdmVjMih2VGV4dHVyZUNvb3JkLngsIHZUZXh0dXJlQ29vcmQueSAtIHRleGVsU2l6ZS55KSk7IC8vIHRvcCBjZW50ZXJcXG4gICB2ZWM0IGMxMyA9IHRleHR1cmUyRCh1U2FtcGxlciwgdmVjMih2VGV4dHVyZUNvb3JkLnggKyB0ZXhlbFNpemUueCwgdlRleHR1cmVDb29yZC55IC0gdGV4ZWxTaXplLnkpKTsgLy8gdG9wIHJpZ2h0XFxuXFxuICAgdmVjNCBjMjEgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZlYzIodlRleHR1cmVDb29yZC54IC0gdGV4ZWxTaXplLngsIHZUZXh0dXJlQ29vcmQueSkpOyAvLyBtaWQgbGVmdFxcbiAgIHZlYzQgYzIyID0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2VGV4dHVyZUNvb3JkKTsgLy8gbWlkIGNlbnRlclxcbiAgIHZlYzQgYzIzID0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2ZWMyKHZUZXh0dXJlQ29vcmQueCArIHRleGVsU2l6ZS54LCB2VGV4dHVyZUNvb3JkLnkpKTsgLy8gbWlkIHJpZ2h0XFxuXFxuICAgdmVjNCBjMzEgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZlYzIodlRleHR1cmVDb29yZC54IC0gdGV4ZWxTaXplLngsIHZUZXh0dXJlQ29vcmQueSArIHRleGVsU2l6ZS55KSk7IC8vIGJvdHRvbSBsZWZ0XFxuICAgdmVjNCBjMzIgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZlYzIodlRleHR1cmVDb29yZC54LCB2VGV4dHVyZUNvb3JkLnkgKyB0ZXhlbFNpemUueSkpOyAvLyBib3R0b20gY2VudGVyXFxuICAgdmVjNCBjMzMgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZUZXh0dXJlQ29vcmQgKyB0ZXhlbFNpemUpOyAvLyBib3R0b20gcmlnaHRcXG5cXG4gICBnbF9GcmFnQ29sb3IgPVxcbiAgICAgICBjMTEgKiBtYXRyaXhbMF0gKyBjMTIgKiBtYXRyaXhbMV0gKyBjMTMgKiBtYXRyaXhbMl0gK1xcbiAgICAgICBjMjEgKiBtYXRyaXhbM10gKyBjMjIgKiBtYXRyaXhbNF0gKyBjMjMgKiBtYXRyaXhbNV0gK1xcbiAgICAgICBjMzEgKiBtYXRyaXhbNl0gKyBjMzIgKiBtYXRyaXhbN10gKyBjMzMgKiBtYXRyaXhbOF07XFxuXFxuICAgZ2xfRnJhZ0NvbG9yLmEgPSBjMjIuYTtcXG59XFxuXCIsXG4gICAgICAgIC8vIGN1c3RvbSB1bmlmb3Jtc1xuICAgICAgICB7XG4gICAgICAgICAgICBtYXRyaXg6ICAgICB7IHR5cGU6ICcxZnYnLCB2YWx1ZTogbmV3IEZsb2F0MzJBcnJheShtYXRyaXgpIH0sXG4gICAgICAgICAgICB0ZXhlbFNpemU6ICB7IHR5cGU6ICd2MicsIHZhbHVlOiB7IHg6IDEgLyB3aWR0aCwgeTogMSAvIGhlaWdodCB9IH1cbiAgICAgICAgfVxuICAgICk7XG59XG5cbkNvbnZvbHV0aW9uRmlsdGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoY29yZS5BYnN0cmFjdEZpbHRlci5wcm90b3R5cGUpO1xuQ29udm9sdXRpb25GaWx0ZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gQ29udm9sdXRpb25GaWx0ZXI7XG5tb2R1bGUuZXhwb3J0cyA9IENvbnZvbHV0aW9uRmlsdGVyO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhDb252b2x1dGlvbkZpbHRlci5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBBbiBhcnJheSBvZiB2YWx1ZXMgdXNlZCBmb3IgbWF0cml4IHRyYW5zZm9ybWF0aW9uLiBTcGVjaWZpZWQgYXMgYSA5IHBvaW50IEFycmF5LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyW119XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5Db252b2x1dGlvbkZpbHRlciNcbiAgICAgKi9cbiAgICBtYXRyaXg6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy51bmlmb3Jtcy5tYXRyaXgudmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLm1hdHJpeC52YWx1ZSA9IG5ldyBGbG9hdDMyQXJyYXkodmFsdWUpO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFdpZHRoIG9mIHRoZSBvYmplY3QgeW91IGFyZSB0cmFuc2Zvcm1pbmdcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLkNvbnZvbHV0aW9uRmlsdGVyI1xuICAgICAqL1xuICAgIHdpZHRoOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIDEvdGhpcy51bmlmb3Jtcy50ZXhlbFNpemUudmFsdWUueDtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudW5pZm9ybXMudGV4ZWxTaXplLnZhbHVlLnggPSAxL3ZhbHVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIEhlaWdodCBvZiB0aGUgb2JqZWN0IHlvdSBhcmUgdHJhbnNmb3JtaW5nXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5Db252b2x1dGlvbkZpbHRlciNcbiAgICAgKi9cbiAgICBoZWlnaHQ6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gMS90aGlzLnVuaWZvcm1zLnRleGVsU2l6ZS52YWx1ZS55O1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy50ZXhlbFNpemUudmFsdWUueSA9IDEvdmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG59KTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vLi4vY29yZScpO1xuLy8gQHNlZSBodHRwczovL2dpdGh1Yi5jb20vc3Vic3RhY2svYnJmcy9pc3N1ZXMvMjVcblxuXG4vKipcbiAqIEEgQ3Jvc3MgSGF0Y2ggZWZmZWN0IGZpbHRlci5cbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQWJzdHJhY3RGaWx0ZXJcbiAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnNcbiAqL1xuZnVuY3Rpb24gQ3Jvc3NIYXRjaEZpbHRlcigpXG57XG4gICAgY29yZS5BYnN0cmFjdEZpbHRlci5jYWxsKHRoaXMsXG4gICAgICAgIC8vIHZlcnRleCBzaGFkZXJcbiAgICAgICAgbnVsbCxcbiAgICAgICAgLy8gZnJhZ21lbnQgc2hhZGVyXG4gICAgICAgIFwicHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XFxuXFxudmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7XFxuXFxudW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXI7XFxuXFxudm9pZCBtYWluKHZvaWQpXFxue1xcbiAgICBmbG9hdCBsdW0gPSBsZW5ndGgodGV4dHVyZTJEKHVTYW1wbGVyLCB2VGV4dHVyZUNvb3JkLnh5KS5yZ2IpO1xcblxcbiAgICBnbF9GcmFnQ29sb3IgPSB2ZWM0KDEuMCwgMS4wLCAxLjAsIDEuMCk7XFxuXFxuICAgIGlmIChsdW0gPCAxLjAwKVxcbiAgICB7XFxuICAgICAgICBpZiAobW9kKGdsX0ZyYWdDb29yZC54ICsgZ2xfRnJhZ0Nvb3JkLnksIDEwLjApID09IDAuMClcXG4gICAgICAgIHtcXG4gICAgICAgICAgICBnbF9GcmFnQ29sb3IgPSB2ZWM0KDAuMCwgMC4wLCAwLjAsIDEuMCk7XFxuICAgICAgICB9XFxuICAgIH1cXG5cXG4gICAgaWYgKGx1bSA8IDAuNzUpXFxuICAgIHtcXG4gICAgICAgIGlmIChtb2QoZ2xfRnJhZ0Nvb3JkLnggLSBnbF9GcmFnQ29vcmQueSwgMTAuMCkgPT0gMC4wKVxcbiAgICAgICAge1xcbiAgICAgICAgICAgIGdsX0ZyYWdDb2xvciA9IHZlYzQoMC4wLCAwLjAsIDAuMCwgMS4wKTtcXG4gICAgICAgIH1cXG4gICAgfVxcblxcbiAgICBpZiAobHVtIDwgMC41MClcXG4gICAge1xcbiAgICAgICAgaWYgKG1vZChnbF9GcmFnQ29vcmQueCArIGdsX0ZyYWdDb29yZC55IC0gNS4wLCAxMC4wKSA9PSAwLjApXFxuICAgICAgICB7XFxuICAgICAgICAgICAgZ2xfRnJhZ0NvbG9yID0gdmVjNCgwLjAsIDAuMCwgMC4wLCAxLjApO1xcbiAgICAgICAgfVxcbiAgICB9XFxuXFxuICAgIGlmIChsdW0gPCAwLjMpXFxuICAgIHtcXG4gICAgICAgIGlmIChtb2QoZ2xfRnJhZ0Nvb3JkLnggLSBnbF9GcmFnQ29vcmQueSAtIDUuMCwgMTAuMCkgPT0gMC4wKVxcbiAgICAgICAge1xcbiAgICAgICAgICAgIGdsX0ZyYWdDb2xvciA9IHZlYzQoMC4wLCAwLjAsIDAuMCwgMS4wKTtcXG4gICAgICAgIH1cXG4gICAgfVxcbn1cXG5cIlxuICAgICk7XG59XG5cbkNyb3NzSGF0Y2hGaWx0ZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShjb3JlLkFic3RyYWN0RmlsdGVyLnByb3RvdHlwZSk7XG5Dcm9zc0hhdGNoRmlsdGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IENyb3NzSGF0Y2hGaWx0ZXI7XG5tb2R1bGUuZXhwb3J0cyA9IENyb3NzSGF0Y2hGaWx0ZXI7XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uLy4uL2NvcmUnKTtcbi8vIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL3N1YnN0YWNrL2JyZnMvaXNzdWVzLzI1XG5cblxuLyoqXG4gKiBUaGUgRGlzcGxhY2VtZW50RmlsdGVyIGNsYXNzIHVzZXMgdGhlIHBpeGVsIHZhbHVlcyBmcm9tIHRoZSBzcGVjaWZpZWQgdGV4dHVyZSAoY2FsbGVkIHRoZSBkaXNwbGFjZW1lbnQgbWFwKSB0byBwZXJmb3JtIGEgZGlzcGxhY2VtZW50IG9mIGFuIG9iamVjdC5cbiAqIFlvdSBjYW4gdXNlIHRoaXMgZmlsdGVyIHRvIGFwcGx5IGFsbCBtYW5vciBvZiBjcmF6eSB3YXJwaW5nIGVmZmVjdHNcbiAqIEN1cnJlbnRseSB0aGUgciBwcm9wZXJ0eSBvZiB0aGUgdGV4dHVyZSBpcyB1c2VkIHRvIG9mZnNldCB0aGUgeCBhbmQgdGhlIGcgcHJvcGVydHkgb2YgdGhlIHRleHR1cmUgaXMgdXNlZCB0byBvZmZzZXQgdGhlIHkuXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLkFic3RyYWN0RmlsdGVyXG4gKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzXG4gKiBAcGFyYW0gc3ByaXRlIHtQSVhJLlNwcml0ZX0gdGhlIHNwcml0ZSB1c2VkIGZvciB0aGUgZGlzcGxhY2VtZW50IG1hcC4gKG1ha2Ugc3VyZSBpdHMgYWRkZWQgdG8gdGhlIHNjZW5lISlcbiAqL1xuZnVuY3Rpb24gRGlzcGxhY2VtZW50RmlsdGVyKHNwcml0ZSwgc2NhbGUpXG57XG4gICAgdmFyIG1hc2tNYXRyaXggPSBuZXcgY29yZS5NYXRyaXgoKTtcbiAgICBzcHJpdGUucmVuZGVyYWJsZSA9IGZhbHNlO1xuXG4gICAgY29yZS5BYnN0cmFjdEZpbHRlci5jYWxsKHRoaXMsXG4gICAgICAgIC8vIHZlcnRleCBzaGFkZXJcbiAgICAgICAgXCJhdHRyaWJ1dGUgdmVjMiBhVmVydGV4UG9zaXRpb247XFxuYXR0cmlidXRlIHZlYzIgYVRleHR1cmVDb29yZDtcXG5hdHRyaWJ1dGUgdmVjNCBhQ29sb3I7XFxuXFxudW5pZm9ybSBtYXQzIHByb2plY3Rpb25NYXRyaXg7XFxudW5pZm9ybSBtYXQzIG90aGVyTWF0cml4O1xcblxcbnZhcnlpbmcgdmVjMiB2TWFwQ29vcmQ7XFxudmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7XFxudmFyeWluZyB2ZWM0IHZDb2xvcjtcXG5cXG52b2lkIG1haW4odm9pZClcXG57XFxuICAgZ2xfUG9zaXRpb24gPSB2ZWM0KChwcm9qZWN0aW9uTWF0cml4ICogdmVjMyhhVmVydGV4UG9zaXRpb24sIDEuMCkpLnh5LCAwLjAsIDEuMCk7XFxuICAgdlRleHR1cmVDb29yZCA9IGFUZXh0dXJlQ29vcmQ7XFxuICAgdk1hcENvb3JkID0gKCBvdGhlck1hdHJpeCAqIHZlYzMoIGFUZXh0dXJlQ29vcmQsIDEuMCkgICkueHk7XFxuICAgdkNvbG9yID0gdmVjNChhQ29sb3IucmdiICogYUNvbG9yLmEsIGFDb2xvci5hKTtcXG59XFxuXCIsXG4gICAgICAgIC8vIGZyYWdtZW50IHNoYWRlclxuICAgICAgICBcInByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xcblxcbnZhcnlpbmcgdmVjMiB2TWFwQ29vcmQ7XFxudmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7XFxudmFyeWluZyB2ZWM0IHZDb2xvcjtcXG5cXG51bmlmb3JtIHZlYzIgc2NhbGU7XFxuXFxudW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXI7XFxudW5pZm9ybSBzYW1wbGVyMkQgbWFwU2FtcGxlcjtcXG5cXG52b2lkIG1haW4odm9pZClcXG57XFxuICAgdmVjNCBtYXAgPSAgdGV4dHVyZTJEKG1hcFNhbXBsZXIsIHZNYXBDb29yZCk7XFxuXFxuICAgbWFwIC09IDAuNTtcXG4gICBtYXAueHkgKj0gc2NhbGU7XFxuXFxuICAgZ2xfRnJhZ0NvbG9yID0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2ZWMyKHZUZXh0dXJlQ29vcmQueCArIG1hcC54LCB2VGV4dHVyZUNvb3JkLnkgKyBtYXAueSkpO1xcbn1cXG5cIixcbiAgICAgICAgLy8gdW5pZm9ybXNcbiAgICAgICAge1xuICAgICAgICAgICAgbWFwU2FtcGxlcjogICAgIHsgdHlwZTogJ3NhbXBsZXIyRCcsIHZhbHVlOiBzcHJpdGUudGV4dHVyZSB9LFxuICAgICAgICAgICAgb3RoZXJNYXRyaXg6ICAgIHsgdHlwZTogJ21hdDMnLCB2YWx1ZTogbWFza01hdHJpeC50b0FycmF5KHRydWUpIH0sXG4gICAgICAgICAgICBzY2FsZTogICAgICAgICAgeyB0eXBlOiAndjInLCB2YWx1ZTogeyB4OiAxLCB5OiAxIH0gfVxuICAgICAgICB9XG4gICAgKTtcblxuICAgIHRoaXMubWFza1Nwcml0ZSA9IHNwcml0ZTtcbiAgICB0aGlzLm1hc2tNYXRyaXggPSBtYXNrTWF0cml4O1xuXG4gICAgaWYgKHNjYWxlID09PSBudWxsIHx8IHNjYWxlID09PSB1bmRlZmluZWQpXG4gICAge1xuICAgICAgICBzY2FsZSA9IDIwO1xuICAgIH1cblxuICAgIHRoaXMuc2NhbGUgPSBuZXcgY29yZS5Qb2ludChzY2FsZSwgc2NhbGUpO1xufVxuXG5EaXNwbGFjZW1lbnRGaWx0ZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShjb3JlLkFic3RyYWN0RmlsdGVyLnByb3RvdHlwZSk7XG5EaXNwbGFjZW1lbnRGaWx0ZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gRGlzcGxhY2VtZW50RmlsdGVyO1xubW9kdWxlLmV4cG9ydHMgPSBEaXNwbGFjZW1lbnRGaWx0ZXI7XG5cbkRpc3BsYWNlbWVudEZpbHRlci5wcm90b3R5cGUuYXBwbHlGaWx0ZXIgPSBmdW5jdGlvbiAocmVuZGVyZXIsIGlucHV0LCBvdXRwdXQpXG57XG4gICAgdmFyIGZpbHRlck1hbmFnZXIgPSByZW5kZXJlci5maWx0ZXJNYW5hZ2VyO1xuXG4gICAgZmlsdGVyTWFuYWdlci5jYWxjdWxhdGVNYXBwZWRNYXRyaXgoaW5wdXQuZnJhbWUsIHRoaXMubWFza1Nwcml0ZSwgdGhpcy5tYXNrTWF0cml4KTtcblxuICAgIHRoaXMudW5pZm9ybXMub3RoZXJNYXRyaXgudmFsdWUgPSB0aGlzLm1hc2tNYXRyaXgudG9BcnJheSh0cnVlKTtcbiAgICB0aGlzLnVuaWZvcm1zLnNjYWxlLnZhbHVlLnggPSB0aGlzLnNjYWxlLnggKiAoMS9pbnB1dC5mcmFtZS53aWR0aCk7XG4gICAgdGhpcy51bmlmb3Jtcy5zY2FsZS52YWx1ZS55ID0gdGhpcy5zY2FsZS55ICogKDEvaW5wdXQuZnJhbWUuaGVpZ2h0KTtcblxuICAgIHZhciBzaGFkZXIgPSB0aGlzLmdldFNoYWRlcihyZW5kZXJlcik7XG4gICAgIC8vIGRyYXcgdGhlIGZpbHRlci4uLlxuICAgIGZpbHRlck1hbmFnZXIuYXBwbHlGaWx0ZXIoc2hhZGVyLCBpbnB1dCwgb3V0cHV0KTtcbn07XG5cblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoRGlzcGxhY2VtZW50RmlsdGVyLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFRoZSB0ZXh0dXJlIHVzZWQgZm9yIHRoZSBkaXNwbGFjZW1lbnQgbWFwLiBNdXN0IGJlIHBvd2VyIG9mIDIgc2l6ZWQgdGV4dHVyZS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuVGV4dHVyZX1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLkRpc3BsYWNlbWVudEZpbHRlciNcbiAgICAgKi9cbiAgICBtYXA6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy51bmlmb3Jtcy5tYXBTYW1wbGVyLnZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy5tYXBTYW1wbGVyLnZhbHVlID0gdmFsdWU7XG5cbiAgICAgICAgfVxuICAgIH1cbn0pO1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi8uLi9jb3JlJyk7XG4vLyBAc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9zdWJzdGFjay9icmZzL2lzc3Vlcy8yNVxuXG5cbi8qKlxuICogQGF1dGhvciBNYXQgR3JvdmVzIGh0dHA6Ly9tYXRncm92ZXMuY29tLyBARG9vcm1hdDIzXG4gKiBvcmlnaW5hbCBmaWx0ZXI6IGh0dHBzOi8vZ2l0aHViLmNvbS9ldmFudy9nbGZ4LmpzL2Jsb2IvbWFzdGVyL3NyYy9maWx0ZXJzL2Z1bi9kb3RzY3JlZW4uanNcbiAqL1xuXG4vKipcbiAqIFRoaXMgZmlsdGVyIGFwcGxpZXMgYSBkb3RzY3JlZW4gZWZmZWN0IG1ha2luZyBkaXNwbGF5IG9iamVjdHMgYXBwZWFyIHRvIGJlIG1hZGUgb3V0IG9mXG4gKiBibGFjayBhbmQgd2hpdGUgaGFsZnRvbmUgZG90cyBsaWtlIGFuIG9sZCBwcmludGVyLlxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5BYnN0cmFjdEZpbHRlclxuICogQG1lbWJlcm9mIFBJWEkuZmlsdGVyc1xuICovXG5mdW5jdGlvbiBEb3RTY3JlZW5GaWx0ZXIoKVxue1xuICAgIGNvcmUuQWJzdHJhY3RGaWx0ZXIuY2FsbCh0aGlzLFxuICAgICAgICAvLyB2ZXJ0ZXggc2hhZGVyXG4gICAgICAgIG51bGwsXG4gICAgICAgIC8vIGZyYWdtZW50IHNoYWRlclxuICAgICAgICBcInByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xcblxcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xcbnZhcnlpbmcgdmVjNCB2Q29sb3I7XFxuXFxudW5pZm9ybSB2ZWM0IGRpbWVuc2lvbnM7XFxudW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXI7XFxuXFxudW5pZm9ybSBmbG9hdCBhbmdsZTtcXG51bmlmb3JtIGZsb2F0IHNjYWxlO1xcblxcbmZsb2F0IHBhdHRlcm4oKVxcbntcXG4gICBmbG9hdCBzID0gc2luKGFuZ2xlKSwgYyA9IGNvcyhhbmdsZSk7XFxuICAgdmVjMiB0ZXggPSB2VGV4dHVyZUNvb3JkICogZGltZW5zaW9ucy54eTtcXG4gICB2ZWMyIHBvaW50ID0gdmVjMihcXG4gICAgICAgYyAqIHRleC54IC0gcyAqIHRleC55LFxcbiAgICAgICBzICogdGV4LnggKyBjICogdGV4LnlcXG4gICApICogc2NhbGU7XFxuICAgcmV0dXJuIChzaW4ocG9pbnQueCkgKiBzaW4ocG9pbnQueSkpICogNC4wO1xcbn1cXG5cXG52b2lkIG1haW4oKVxcbntcXG4gICB2ZWM0IGNvbG9yID0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2VGV4dHVyZUNvb3JkKTtcXG4gICBmbG9hdCBhdmVyYWdlID0gKGNvbG9yLnIgKyBjb2xvci5nICsgY29sb3IuYikgLyAzLjA7XFxuICAgZ2xfRnJhZ0NvbG9yID0gdmVjNCh2ZWMzKGF2ZXJhZ2UgKiAxMC4wIC0gNS4wICsgcGF0dGVybigpKSwgY29sb3IuYSk7XFxufVxcblwiLFxuICAgICAgICAvLyBjdXN0b20gdW5pZm9ybXNcbiAgICAgICAge1xuICAgICAgICAgICAgc2NhbGU6ICAgICAgeyB0eXBlOiAnMWYnLCB2YWx1ZTogMSB9LFxuICAgICAgICAgICAgYW5nbGU6ICAgICAgeyB0eXBlOiAnMWYnLCB2YWx1ZTogNSB9LFxuICAgICAgICAgICAgZGltZW5zaW9uczogeyB0eXBlOiAnNGZ2JywgdmFsdWU6IFswLCAwLCAwLCAwXSB9XG4gICAgICAgIH1cbiAgICApO1xufVxuXG5Eb3RTY3JlZW5GaWx0ZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShjb3JlLkFic3RyYWN0RmlsdGVyLnByb3RvdHlwZSk7XG5Eb3RTY3JlZW5GaWx0ZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gRG90U2NyZWVuRmlsdGVyO1xubW9kdWxlLmV4cG9ydHMgPSBEb3RTY3JlZW5GaWx0ZXI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKERvdFNjcmVlbkZpbHRlci5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBUaGUgc2NhbGUgb2YgdGhlIGVmZmVjdC5cbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5Eb3RTY3JlZW5GaWx0ZXIjXG4gICAgICovXG4gICAgc2NhbGU6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy51bmlmb3Jtcy5zY2FsZS52YWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudW5pZm9ybXMuc2NhbGUudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBUaGUgcmFkaXVzIG9mIHRoZSBlZmZlY3QuXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuRG90U2NyZWVuRmlsdGVyI1xuICAgICAqL1xuICAgIGFuZ2xlOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudW5pZm9ybXMuYW5nbGUudmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLmFuZ2xlLnZhbHVlID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG59KTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vLi4vY29yZScpO1xuXG4vLyBAc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9zdWJzdGFjay9icmZzL2lzc3Vlcy8yNVxuXG5cbi8qKlxuICogVGhlIEJsdXJZVGludEZpbHRlciBhcHBsaWVzIGEgdmVydGljYWwgR2F1c3NpYW4gYmx1ciB0byBhbiBvYmplY3QuXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLkFic3RyYWN0RmlsdGVyXG4gKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzXG4gKi9cbmZ1bmN0aW9uIEJsdXJZVGludEZpbHRlcigpXG57XG4gICAgY29yZS5BYnN0cmFjdEZpbHRlci5jYWxsKHRoaXMsXG4gICAgICAgIC8vIHZlcnRleCBzaGFkZXJcbiAgICAgICAgXCJhdHRyaWJ1dGUgdmVjMiBhVmVydGV4UG9zaXRpb247XFxuYXR0cmlidXRlIHZlYzIgYVRleHR1cmVDb29yZDtcXG5hdHRyaWJ1dGUgdmVjNCBhQ29sb3I7XFxuXFxudW5pZm9ybSBmbG9hdCBzdHJlbmd0aDtcXG51bmlmb3JtIHZlYzIgb2Zmc2V0O1xcblxcbnVuaWZvcm0gbWF0MyBwcm9qZWN0aW9uTWF0cml4O1xcblxcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xcbnZhcnlpbmcgdmVjNCB2Q29sb3I7XFxudmFyeWluZyB2ZWMyIHZCbHVyVGV4Q29vcmRzWzZdO1xcblxcbnZvaWQgbWFpbih2b2lkKVxcbntcXG4gICAgZ2xfUG9zaXRpb24gPSB2ZWM0KChwcm9qZWN0aW9uTWF0cml4ICogdmVjMygoYVZlcnRleFBvc2l0aW9uK29mZnNldCksIDEuMCkpLnh5LCAwLjAsIDEuMCk7XFxuICAgIHZUZXh0dXJlQ29vcmQgPSBhVGV4dHVyZUNvb3JkO1xcblxcbiAgICB2Qmx1clRleENvb3Jkc1sgMF0gPSBhVGV4dHVyZUNvb3JkICsgdmVjMigwLjAsIC0wLjAxMiAqIHN0cmVuZ3RoKTtcXG4gICAgdkJsdXJUZXhDb29yZHNbIDFdID0gYVRleHR1cmVDb29yZCArIHZlYzIoMC4wLCAtMC4wMDggKiBzdHJlbmd0aCk7XFxuICAgIHZCbHVyVGV4Q29vcmRzWyAyXSA9IGFUZXh0dXJlQ29vcmQgKyB2ZWMyKDAuMCwgLTAuMDA0ICogc3RyZW5ndGgpO1xcbiAgICB2Qmx1clRleENvb3Jkc1sgM10gPSBhVGV4dHVyZUNvb3JkICsgdmVjMigwLjAsICAwLjAwNCAqIHN0cmVuZ3RoKTtcXG4gICAgdkJsdXJUZXhDb29yZHNbIDRdID0gYVRleHR1cmVDb29yZCArIHZlYzIoMC4wLCAgMC4wMDggKiBzdHJlbmd0aCk7XFxuICAgIHZCbHVyVGV4Q29vcmRzWyA1XSA9IGFUZXh0dXJlQ29vcmQgKyB2ZWMyKDAuMCwgIDAuMDEyICogc3RyZW5ndGgpO1xcblxcbiAgIHZDb2xvciA9IHZlYzQoYUNvbG9yLnJnYiAqIGFDb2xvci5hLCBhQ29sb3IuYSk7XFxufVxcblwiLFxuICAgICAgICAvLyBmcmFnbWVudCBzaGFkZXJcbiAgICAgICAgXCJwcmVjaXNpb24gbG93cCBmbG9hdDtcXG5cXG52YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDtcXG52YXJ5aW5nIHZlYzIgdkJsdXJUZXhDb29yZHNbNl07XFxudmFyeWluZyB2ZWM0IHZDb2xvcjtcXG5cXG51bmlmb3JtIHZlYzMgY29sb3I7XFxudW5pZm9ybSBmbG9hdCBhbHBoYTtcXG5cXG51bmlmb3JtIHNhbXBsZXIyRCB1U2FtcGxlcjtcXG5cXG52b2lkIG1haW4odm9pZClcXG57XFxuICAgIHZlYzQgc3VtID0gdmVjNCgwLjApO1xcblxcbiAgICBzdW0gKz0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2Qmx1clRleENvb3Jkc1sgMF0pKjAuMDA0NDMxODQ4NDExOTM4MzQxO1xcbiAgICBzdW0gKz0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2Qmx1clRleENvb3Jkc1sgMV0pKjAuMDUzOTkwOTY2NTEzMTg5ODU7XFxuICAgIHN1bSArPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZCbHVyVGV4Q29vcmRzWyAyXSkqMC4yNDE5NzA3MjQ1MTkxNDU0O1xcbiAgICBzdW0gKz0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2VGV4dHVyZUNvb3JkICAgICApKjAuMzk4OTQyMjgwNDAxNDMyNztcXG4gICAgc3VtICs9IHRleHR1cmUyRCh1U2FtcGxlciwgdkJsdXJUZXhDb29yZHNbIDNdKSowLjI0MTk3MDcyNDUxOTE0NTQ7XFxuICAgIHN1bSArPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZCbHVyVGV4Q29vcmRzWyA0XSkqMC4wNTM5OTA5NjY1MTMxODk4NTtcXG4gICAgc3VtICs9IHRleHR1cmUyRCh1U2FtcGxlciwgdkJsdXJUZXhDb29yZHNbIDVdKSowLjAwNDQzMTg0ODQxMTkzODM0MTtcXG5cXG4gICAgZ2xfRnJhZ0NvbG9yID0gdmVjNCggY29sb3IucmdiICogc3VtLmEgKiBhbHBoYSwgc3VtLmEgKiBhbHBoYSApO1xcbn1cXG5cIixcbiAgICAgICAgLy8gc2V0IHRoZSB1bmlmb3Jtc1xuICAgICAgICB7XG4gICAgICAgICAgICBibHVyOiB7IHR5cGU6ICcxZicsIHZhbHVlOiAxIC8gNTEyIH0sXG4gICAgICAgICAgICBjb2xvcjogeyB0eXBlOiAnYycsIHZhbHVlOiBbMCwwLDBdfSxcbiAgICAgICAgICAgIGFscGhhOiB7IHR5cGU6ICcxZicsIHZhbHVlOiAwLjcgfSxcbiAgICAgICAgICAgIG9mZnNldDogeyB0eXBlOiAnMmYnLCB2YWx1ZTpbNSwgNV19LFxuICAgICAgICAgICAgc3RyZW5ndGg6IHsgdHlwZTogJzFmJywgdmFsdWU6MX1cbiAgICAgICAgfVxuICAgICk7XG5cbiAgICB0aGlzLnBhc3NlcyA9IDE7XG4gICAgdGhpcy5zdHJlbmd0aCA9IDQ7XG59XG5cbkJsdXJZVGludEZpbHRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuQWJzdHJhY3RGaWx0ZXIucHJvdG90eXBlKTtcbkJsdXJZVGludEZpbHRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBCbHVyWVRpbnRGaWx0ZXI7XG5tb2R1bGUuZXhwb3J0cyA9IEJsdXJZVGludEZpbHRlcjtcblxuQmx1cllUaW50RmlsdGVyLnByb3RvdHlwZS5hcHBseUZpbHRlciA9IGZ1bmN0aW9uIChyZW5kZXJlciwgaW5wdXQsIG91dHB1dCwgY2xlYXIpXG57XG4gICAgdmFyIHNoYWRlciA9IHRoaXMuZ2V0U2hhZGVyKHJlbmRlcmVyKTtcblxuICAgIHRoaXMudW5pZm9ybXMuc3RyZW5ndGgudmFsdWUgPSB0aGlzLnN0cmVuZ3RoIC8gNCAvIHRoaXMucGFzc2VzICogKGlucHV0LmZyYW1lLmhlaWdodCAvIGlucHV0LnNpemUuaGVpZ2h0KTtcblxuICAgIGlmKHRoaXMucGFzc2VzID09PSAxKVxuICAgIHtcbiAgICAgICAgcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5hcHBseUZpbHRlcihzaGFkZXIsIGlucHV0LCBvdXRwdXQsIGNsZWFyKTtcbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgdmFyIHJlbmRlclRhcmdldCA9IHJlbmRlcmVyLmZpbHRlck1hbmFnZXIuZ2V0UmVuZGVyVGFyZ2V0KHRydWUpO1xuICAgICAgICB2YXIgZmxpcCA9IGlucHV0O1xuICAgICAgICB2YXIgZmxvcCA9IHJlbmRlclRhcmdldDtcblxuICAgICAgICBmb3IodmFyIGkgPSAwOyBpIDwgdGhpcy5wYXNzZXMtMTsgaSsrKVxuICAgICAgICB7XG4gICAgICAgICAgICByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLmFwcGx5RmlsdGVyKHNoYWRlciwgZmxpcCwgZmxvcCwgY2xlYXIpO1xuXG4gICAgICAgICAgIHZhciB0ZW1wID0gZmxvcDtcbiAgICAgICAgICAgZmxvcCA9IGZsaXA7XG4gICAgICAgICAgIGZsaXAgPSB0ZW1wO1xuICAgICAgICB9XG5cbiAgICAgICAgcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5hcHBseUZpbHRlcihzaGFkZXIsIGZsaXAsIG91dHB1dCwgY2xlYXIpO1xuXG4gICAgICAgIHJlbmRlcmVyLmZpbHRlck1hbmFnZXIucmV0dXJuUmVuZGVyVGFyZ2V0KHJlbmRlclRhcmdldCk7XG4gICAgfVxufTtcblxuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhCbHVyWVRpbnRGaWx0ZXIucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgc3RyZW5ndGggb2YgYm90aCB0aGUgYmx1ci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLkJsdXJZVGludEZpbHRlciNcbiAgICAgKiBAZGVmYXVsdCAyXG4gICAgICovXG4gICAgYmx1cjoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiAgdGhpcy5zdHJlbmd0aDtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMucGFkZGluZyA9IHZhbHVlICogMC41O1xuICAgICAgICAgICAgdGhpcy5zdHJlbmd0aCA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfVxufSk7XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uLy4uL2NvcmUnKSxcbiAgICBCbHVyWEZpbHRlciA9IHJlcXVpcmUoJy4uL2JsdXIvQmx1clhGaWx0ZXInKSxcbiAgICBCbHVyWVRpbnRGaWx0ZXIgPSByZXF1aXJlKCcuL0JsdXJZVGludEZpbHRlcicpO1xuXG4vKipcbiAqIFRoZSBEcm9wU2hhZG93RmlsdGVyIGFwcGxpZXMgYSBHYXVzc2lhbiBibHVyIHRvIGFuIG9iamVjdC5cbiAqIFRoZSBzdHJlbmd0aCBvZiB0aGUgYmx1ciBjYW4gYmUgc2V0IGZvciB4LSBhbmQgeS1heGlzIHNlcGFyYXRlbHkuXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLkFic3RyYWN0RmlsdGVyXG4gKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzXG4gKi9cbmZ1bmN0aW9uIERyb3BTaGFkb3dGaWx0ZXIoKVxue1xuICAgIGNvcmUuQWJzdHJhY3RGaWx0ZXIuY2FsbCh0aGlzKTtcblxuICAgIHRoaXMuYmx1clhGaWx0ZXIgPSBuZXcgQmx1clhGaWx0ZXIoKTtcbiAgICB0aGlzLmJsdXJZVGludEZpbHRlciA9IG5ldyBCbHVyWVRpbnRGaWx0ZXIoKTtcblxuICAgIHRoaXMuZGVmYXVsdEZpbHRlciA9IG5ldyBjb3JlLkFic3RyYWN0RmlsdGVyKCk7XG5cbiAgICB0aGlzLnBhZGRpbmcgPSAzMDtcblxuICAgIHRoaXMuX2RpcnR5UG9zaXRpb24gPSB0cnVlO1xuICAgIHRoaXMuX2FuZ2xlID0gNDUgKiBNYXRoLlBJIC8gMTgwO1xuICAgIHRoaXMuX2Rpc3RhbmNlID0gMTA7XG4gICAgdGhpcy5hbHBoYSA9IDAuNzU7XG4gICAgdGhpcy5oaWRlT2JqZWN0ID0gZmFsc2U7XG4gICAgdGhpcy5ibGVuZE1vZGUgPSBjb3JlLkJMRU5EX01PREVTLk1VTFRJUExZO1xufVxuXG5Ecm9wU2hhZG93RmlsdGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoY29yZS5BYnN0cmFjdEZpbHRlci5wcm90b3R5cGUpO1xuRHJvcFNoYWRvd0ZpbHRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBEcm9wU2hhZG93RmlsdGVyO1xubW9kdWxlLmV4cG9ydHMgPSBEcm9wU2hhZG93RmlsdGVyO1xuXG5Ecm9wU2hhZG93RmlsdGVyLnByb3RvdHlwZS5hcHBseUZpbHRlciA9IGZ1bmN0aW9uIChyZW5kZXJlciwgaW5wdXQsIG91dHB1dClcbntcbiAgICB2YXIgcmVuZGVyVGFyZ2V0ID0gcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5nZXRSZW5kZXJUYXJnZXQodHJ1ZSk7XG5cbiAgICAvL1RPRE8gLSBjb3B5VGV4U3ViSW1hZ2UyRCBjb3VsZCBiZSB1c2VkIGhlcmU/XG4gICAgaWYodGhpcy5fZGlydHlQb3NpdGlvbilcbiAgICB7XG4gICAgICAgIHRoaXMuX2RpcnR5UG9zaXRpb24gPSBmYWxzZTtcblxuICAgICAgICB0aGlzLmJsdXJZVGludEZpbHRlci51bmlmb3Jtcy5vZmZzZXQudmFsdWVbMF0gPSBNYXRoLnNpbih0aGlzLl9hbmdsZSkgKiB0aGlzLl9kaXN0YW5jZTtcbiAgICAgICAgdGhpcy5ibHVyWVRpbnRGaWx0ZXIudW5pZm9ybXMub2Zmc2V0LnZhbHVlWzFdID0gTWF0aC5jb3ModGhpcy5fYW5nbGUpICogdGhpcy5fZGlzdGFuY2U7XG4gICAgfVxuXG4gICAgdGhpcy5ibHVyWEZpbHRlci5hcHBseUZpbHRlcihyZW5kZXJlciwgaW5wdXQsIHJlbmRlclRhcmdldCk7XG5cbiAgICByZW5kZXJlci5ibGVuZE1vZGVNYW5hZ2VyLnNldEJsZW5kTW9kZSh0aGlzLmJsZW5kTW9kZSk7XG5cbiAgICB0aGlzLmJsdXJZVGludEZpbHRlci5hcHBseUZpbHRlcihyZW5kZXJlciwgcmVuZGVyVGFyZ2V0LCBvdXRwdXQpO1xuXG4gICAgcmVuZGVyZXIuYmxlbmRNb2RlTWFuYWdlci5zZXRCbGVuZE1vZGUoY29yZS5CTEVORF9NT0RFUy5OT1JNQUwpO1xuXG4gICAgaWYoIXRoaXMuaGlkZU9iamVjdClcbiAgICB7XG5cbiAgICAgICAgdGhpcy5kZWZhdWx0RmlsdGVyLmFwcGx5RmlsdGVyKHJlbmRlcmVyLCBpbnB1dCwgb3V0cHV0KTtcbiAgICB9XG5cblxuICAgIHJlbmRlcmVyLmZpbHRlck1hbmFnZXIucmV0dXJuUmVuZGVyVGFyZ2V0KHJlbmRlclRhcmdldCk7XG59O1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhEcm9wU2hhZG93RmlsdGVyLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIHN0cmVuZ3RoIG9mIGJvdGggdGhlIGJsdXJYIGFuZCBibHVyWSBwcm9wZXJ0aWVzIHNpbXVsdGFuZW91c2x5XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlck9mIFBJWEkuZmlsdGVycy5Ecm9wU2hhZG93RmlsdGVyI1xuICAgICAqIEBkZWZhdWx0IDJcbiAgICAgKi9cbiAgICBibHVyOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuYmx1clhGaWx0ZXIuYmx1cjtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuYmx1clhGaWx0ZXIuYmx1ciA9IHRoaXMuYmx1cllUaW50RmlsdGVyLmJsdXIgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBzdHJlbmd0aCBvZiB0aGUgYmx1clggcHJvcGVydHlcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyT2YgUElYSS5maWx0ZXJzLkRyb3BTaGFkb3dGaWx0ZXIjXG4gICAgICogQGRlZmF1bHQgMlxuICAgICAqL1xuICAgIGJsdXJYOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuYmx1clhGaWx0ZXIuYmx1cjtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuYmx1clhGaWx0ZXIuYmx1ciA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIHN0cmVuZ3RoIG9mIHRoZSBibHVyWSBwcm9wZXJ0eVxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJPZiBQSVhJLmZpbHRlcnMuRHJvcFNoYWRvd0ZpbHRlciNcbiAgICAgKiBAZGVmYXVsdCAyXG4gICAgICovXG4gICAgYmx1clk6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5ibHVyWVRpbnRGaWx0ZXIuYmx1cjtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuYmx1cllUaW50RmlsdGVyLmJsdXIgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBjb2xvciBvZiB0aGUgc2hhZG93XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlck9mIFBJWEkuZmlsdGVycy5Ecm9wU2hhZG93RmlsdGVyI1xuICAgICAqL1xuICAgIGNvbG9yOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuICBjb3JlLnV0aWxzLnJnYjJoZXgoIHRoaXMuYmx1cllUaW50RmlsdGVyLnVuaWZvcm1zLmNvbG9yLnZhbHVlICk7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmJsdXJZVGludEZpbHRlci51bmlmb3Jtcy5jb2xvci52YWx1ZSA9IGNvcmUudXRpbHMuaGV4MnJnYih2YWx1ZSk7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgYWxwaGEgb2YgdGhlIHNoYWRvd1xuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJPZiBQSVhJLmZpbHRlcnMuRHJvcFNoYWRvd0ZpbHRlciNcbiAgICAgKi9cbiAgICBhbHBoYToge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiAgdGhpcy5ibHVyWVRpbnRGaWx0ZXIudW5pZm9ybXMuYWxwaGEudmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmJsdXJZVGludEZpbHRlci51bmlmb3Jtcy5hbHBoYS52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIGRpc3RhbmNlIG9mIHRoZSBzaGFkb3dcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyT2YgUElYSS5maWx0ZXJzLkRyb3BTaGFkb3dGaWx0ZXIjXG4gICAgICovXG4gICAgZGlzdGFuY2U6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gIHRoaXMuX2Rpc3RhbmNlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5fZGlydHlQb3NpdGlvbiA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLl9kaXN0YW5jZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIGFuZ2xlIG9mIHRoZSBzaGFkb3dcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyT2YgUElYSS5maWx0ZXJzLkRyb3BTaGFkb3dGaWx0ZXIjXG4gICAgICovXG4gICAgYW5nbGU6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gIHRoaXMuX2FuZ2xlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5fZGlydHlQb3NpdGlvbiA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLl9hbmdsZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfVxufSk7XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uLy4uL2NvcmUnKTtcbi8vIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL3N1YnN0YWNrL2JyZnMvaXNzdWVzLzI1XG5cblxuLyoqXG4gKiBUaGlzIGdyZXlzY2FsZXMgdGhlIHBhbGV0dGUgb2YgeW91ciBEaXNwbGF5IE9iamVjdHMuXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLkFic3RyYWN0RmlsdGVyXG4gKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzXG4gKi9cbmZ1bmN0aW9uIEdyYXlGaWx0ZXIoKVxue1xuICAgIGNvcmUuQWJzdHJhY3RGaWx0ZXIuY2FsbCh0aGlzLFxuICAgICAgICAvLyB2ZXJ0ZXggc2hhZGVyXG4gICAgICAgIG51bGwsXG4gICAgICAgIC8vIGZyYWdtZW50IHNoYWRlclxuICAgICAgICBcInByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xcblxcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xcbnZhcnlpbmcgdmVjNCB2Q29sb3I7XFxuXFxudW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXI7XFxudW5pZm9ybSBmbG9hdCBncmF5O1xcblxcbnZvaWQgbWFpbih2b2lkKVxcbntcXG4gICBnbF9GcmFnQ29sb3IgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZUZXh0dXJlQ29vcmQpO1xcbiAgIGdsX0ZyYWdDb2xvci5yZ2IgPSBtaXgoZ2xfRnJhZ0NvbG9yLnJnYiwgdmVjMygwLjIxMjYqZ2xfRnJhZ0NvbG9yLnIgKyAwLjcxNTIqZ2xfRnJhZ0NvbG9yLmcgKyAwLjA3MjIqZ2xfRnJhZ0NvbG9yLmIpLCBncmF5KTtcXG59XFxuXCIsXG4gICAgICAgIC8vIHNldCB0aGUgdW5pZm9ybXNcbiAgICAgICAge1xuICAgICAgICAgICAgZ3JheTogeyB0eXBlOiAnMWYnLCB2YWx1ZTogMSB9XG4gICAgICAgIH1cbiAgICApO1xufVxuXG5HcmF5RmlsdGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoY29yZS5BYnN0cmFjdEZpbHRlci5wcm90b3R5cGUpO1xuR3JheUZpbHRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBHcmF5RmlsdGVyO1xubW9kdWxlLmV4cG9ydHMgPSBHcmF5RmlsdGVyO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhHcmF5RmlsdGVyLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFRoZSBzdHJlbmd0aCBvZiB0aGUgZ3JheS4gMSB3aWxsIG1ha2UgdGhlIG9iamVjdCBibGFjayBhbmQgd2hpdGUsIDAgd2lsbCBtYWtlIHRoZSBvYmplY3QgaXRzIG5vcm1hbCBjb2xvci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLkdyYXlGaWx0ZXIjXG4gICAgICovXG4gICAgZ3JheToge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVuaWZvcm1zLmdyYXkudmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLmdyYXkudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuIiwiLyoqXG4gKiBAZmlsZSAgICAgICAgTWFpbiBleHBvcnQgb2YgdGhlIFBJWEkgZmlsdGVycyBsaWJyYXJ5XG4gKiBAYXV0aG9yICAgICAgTWF0IEdyb3ZlcyA8bWF0QGdvb2Rib3lkaWdpdGFsLmNvbT5cbiAqIEBjb3B5cmlnaHQgICAyMDEzLTIwMTUgR29vZEJveURpZ2l0YWxcbiAqIEBsaWNlbnNlICAgICB7QGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL3BpeGlqcy9waXhpLmpzL2Jsb2IvbWFzdGVyL0xJQ0VOU0V8TUlUIExpY2Vuc2V9XG4gKi9cblxuLyoqXG4gKiBAbmFtZXNwYWNlIFBJWEkuZmlsdGVyc1xuICovXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgICBBc2NpaUZpbHRlcjogICAgICAgIHJlcXVpcmUoJy4vYXNjaWkvQXNjaWlGaWx0ZXInKSxcbiAgICBCbG9vbUZpbHRlcjogICAgICAgIHJlcXVpcmUoJy4vYmxvb20vQmxvb21GaWx0ZXInKSxcbiAgICBCbHVyRmlsdGVyOiAgICAgICAgIHJlcXVpcmUoJy4vYmx1ci9CbHVyRmlsdGVyJyksXG4gICAgQmx1clhGaWx0ZXI6ICAgICAgICByZXF1aXJlKCcuL2JsdXIvQmx1clhGaWx0ZXInKSxcbiAgICBCbHVyWUZpbHRlcjogICAgICAgIHJlcXVpcmUoJy4vYmx1ci9CbHVyWUZpbHRlcicpLFxuICAgIEJsdXJEaXJGaWx0ZXI6ICAgICAgcmVxdWlyZSgnLi9ibHVyL0JsdXJEaXJGaWx0ZXInKSxcbiAgICBDb2xvck1hdHJpeEZpbHRlcjogIHJlcXVpcmUoJy4vY29sb3IvQ29sb3JNYXRyaXhGaWx0ZXInKSxcbiAgICBDb2xvclN0ZXBGaWx0ZXI6ICAgIHJlcXVpcmUoJy4vY29sb3IvQ29sb3JTdGVwRmlsdGVyJyksXG4gICAgQ29udm9sdXRpb25GaWx0ZXI6ICByZXF1aXJlKCcuL2NvbnZvbHV0aW9uL0NvbnZvbHV0aW9uRmlsdGVyJyksXG4gICAgQ3Jvc3NIYXRjaEZpbHRlcjogICByZXF1aXJlKCcuL2Nyb3NzaGF0Y2gvQ3Jvc3NIYXRjaEZpbHRlcicpLFxuICAgIERpc3BsYWNlbWVudEZpbHRlcjogcmVxdWlyZSgnLi9kaXNwbGFjZW1lbnQvRGlzcGxhY2VtZW50RmlsdGVyJyksXG4gICAgRG90U2NyZWVuRmlsdGVyOiAgICByZXF1aXJlKCcuL2RvdC9Eb3RTY3JlZW5GaWx0ZXInKSxcbiAgICBHcmF5RmlsdGVyOiAgICAgICAgIHJlcXVpcmUoJy4vZ3JheS9HcmF5RmlsdGVyJyksXG4gICAgRHJvcFNoYWRvd0ZpbHRlcjogICByZXF1aXJlKCcuL2Ryb3BzaGFkb3cvRHJvcFNoYWRvd0ZpbHRlcicpLFxuICAgIEludmVydEZpbHRlcjogICAgICAgcmVxdWlyZSgnLi9pbnZlcnQvSW52ZXJ0RmlsdGVyJyksXG4gICAgTm9pc2VGaWx0ZXI6ICAgICAgICByZXF1aXJlKCcuL25vaXNlL05vaXNlRmlsdGVyJyksXG4gICAgUGl4ZWxhdGVGaWx0ZXI6ICAgICByZXF1aXJlKCcuL3BpeGVsYXRlL1BpeGVsYXRlRmlsdGVyJyksXG4gICAgUkdCU3BsaXRGaWx0ZXI6ICAgICByZXF1aXJlKCcuL3JnYi9SR0JTcGxpdEZpbHRlcicpLFxuICAgIFNob2Nrd2F2ZUZpbHRlcjogICAgcmVxdWlyZSgnLi9zaG9ja3dhdmUvU2hvY2t3YXZlRmlsdGVyJyksXG4gICAgU2VwaWFGaWx0ZXI6ICAgICAgICByZXF1aXJlKCcuL3NlcGlhL1NlcGlhRmlsdGVyJyksXG4gICAgU21hcnRCbHVyRmlsdGVyOiAgICByZXF1aXJlKCcuL2JsdXIvU21hcnRCbHVyRmlsdGVyJyksXG4gICAgVGlsdFNoaWZ0RmlsdGVyOiAgICByZXF1aXJlKCcuL3RpbHRzaGlmdC9UaWx0U2hpZnRGaWx0ZXInKSxcbiAgICBUaWx0U2hpZnRYRmlsdGVyOiAgIHJlcXVpcmUoJy4vdGlsdHNoaWZ0L1RpbHRTaGlmdFhGaWx0ZXInKSxcbiAgICBUaWx0U2hpZnRZRmlsdGVyOiAgIHJlcXVpcmUoJy4vdGlsdHNoaWZ0L1RpbHRTaGlmdFlGaWx0ZXInKSxcbiAgICBUd2lzdEZpbHRlcjogICAgICAgIHJlcXVpcmUoJy4vdHdpc3QvVHdpc3RGaWx0ZXInKVxufTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vLi4vY29yZScpO1xuLy8gQHNlZSBodHRwczovL2dpdGh1Yi5jb20vc3Vic3RhY2svYnJmcy9pc3N1ZXMvMjVcblxuXG4vKipcbiAqIFRoaXMgaW52ZXJ0cyB5b3VyIERpc3BsYXkgT2JqZWN0cyBjb2xvcnMuXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLkFic3RyYWN0RmlsdGVyXG4gKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzXG4gKi9cbmZ1bmN0aW9uIEludmVydEZpbHRlcigpXG57XG4gICAgY29yZS5BYnN0cmFjdEZpbHRlci5jYWxsKHRoaXMsXG4gICAgICAgIC8vIHZlcnRleCBzaGFkZXJcbiAgICAgICAgbnVsbCxcbiAgICAgICAgLy8gZnJhZ21lbnQgc2hhZGVyXG4gICAgICAgIFwicHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XFxuXFxudmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7XFxuXFxudW5pZm9ybSBmbG9hdCBpbnZlcnQ7XFxudW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXI7XFxuXFxudm9pZCBtYWluKHZvaWQpXFxue1xcbiAgICBnbF9GcmFnQ29sb3IgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZUZXh0dXJlQ29vcmQpO1xcblxcbiAgICBnbF9GcmFnQ29sb3IucmdiID0gbWl4KCAodmVjMygxKS1nbF9GcmFnQ29sb3IucmdiKSAqIGdsX0ZyYWdDb2xvci5hLCBnbF9GcmFnQ29sb3IucmdiLCAxLjAgLSBpbnZlcnQpO1xcbn1cXG5cIixcbiAgICAgICAgLy8gY3VzdG9tIHVuaWZvcm1zXG4gICAgICAgIHtcbiAgICAgICAgICAgIGludmVydDogeyB0eXBlOiAnMWYnLCB2YWx1ZTogMSB9XG4gICAgICAgIH1cbiAgICApO1xufVxuXG5JbnZlcnRGaWx0ZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShjb3JlLkFic3RyYWN0RmlsdGVyLnByb3RvdHlwZSk7XG5JbnZlcnRGaWx0ZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gSW52ZXJ0RmlsdGVyO1xubW9kdWxlLmV4cG9ydHMgPSBJbnZlcnRGaWx0ZXI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKEludmVydEZpbHRlci5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBUaGUgc3RyZW5ndGggb2YgdGhlIGludmVydC4gYDFgIHdpbGwgZnVsbHkgaW52ZXJ0IHRoZSBjb2xvcnMsIGFuZFxuICAgICAqIGAwYCB3aWxsIG1ha2UgdGhlIG9iamVjdCBpdHMgbm9ybWFsIGNvbG9yLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuSW52ZXJ0RmlsdGVyI1xuICAgICAqL1xuICAgIGludmVydDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVuaWZvcm1zLmludmVydC52YWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudW5pZm9ybXMuaW52ZXJ0LnZhbHVlID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG59KTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vLi4vY29yZScpO1xuLy8gQHNlZSBodHRwczovL2dpdGh1Yi5jb20vc3Vic3RhY2svYnJmcy9pc3N1ZXMvMjVcblxuXG4vKipcbiAqIEBhdXRob3IgVmljbyBAdmljb2NvdGVhXG4gKiBvcmlnaW5hbCBmaWx0ZXI6IGh0dHBzOi8vZ2l0aHViLmNvbS9ldmFudy9nbGZ4LmpzL2Jsb2IvbWFzdGVyL3NyYy9maWx0ZXJzL2FkanVzdC9ub2lzZS5qc1xuICovXG5cbi8qKlxuICogQSBOb2lzZSBlZmZlY3QgZmlsdGVyLlxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5BYnN0cmFjdEZpbHRlclxuICogQG1lbWJlcm9mIFBJWEkuZmlsdGVyc1xuICovXG5mdW5jdGlvbiBOb2lzZUZpbHRlcigpXG57XG4gICAgY29yZS5BYnN0cmFjdEZpbHRlci5jYWxsKHRoaXMsXG4gICAgICAgIC8vIHZlcnRleCBzaGFkZXJcbiAgICAgICAgbnVsbCxcbiAgICAgICAgLy8gZnJhZ21lbnQgc2hhZGVyXG4gICAgICAgIFwicHJlY2lzaW9uIGhpZ2hwIGZsb2F0O1xcblxcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xcbnZhcnlpbmcgdmVjNCB2Q29sb3I7XFxuXFxudW5pZm9ybSBmbG9hdCBub2lzZTtcXG51bmlmb3JtIHNhbXBsZXIyRCB1U2FtcGxlcjtcXG5cXG5mbG9hdCByYW5kKHZlYzIgY28pXFxue1xcbiAgICByZXR1cm4gZnJhY3Qoc2luKGRvdChjby54eSwgdmVjMigxMi45ODk4LCA3OC4yMzMpKSkgKiA0Mzc1OC41NDUzKTtcXG59XFxuXFxudm9pZCBtYWluKClcXG57XFxuICAgIHZlYzQgY29sb3IgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZUZXh0dXJlQ29vcmQpO1xcblxcbiAgICBmbG9hdCBkaWZmID0gKHJhbmQodlRleHR1cmVDb29yZCkgLSAwLjUpICogbm9pc2U7XFxuXFxuICAgIGNvbG9yLnIgKz0gZGlmZjtcXG4gICAgY29sb3IuZyArPSBkaWZmO1xcbiAgICBjb2xvci5iICs9IGRpZmY7XFxuXFxuICAgIGdsX0ZyYWdDb2xvciA9IGNvbG9yO1xcbn1cXG5cIixcbiAgICAgICAgLy8gY3VzdG9tIHVuaWZvcm1zXG4gICAgICAgIHtcbiAgICAgICAgICAgIG5vaXNlOiB7IHR5cGU6ICcxZicsIHZhbHVlOiAwLjUgfVxuICAgICAgICB9XG4gICAgKTtcbn1cblxuTm9pc2VGaWx0ZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShjb3JlLkFic3RyYWN0RmlsdGVyLnByb3RvdHlwZSk7XG5Ob2lzZUZpbHRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBOb2lzZUZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gTm9pc2VGaWx0ZXI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKE5vaXNlRmlsdGVyLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFRoZSBhbW91bnQgb2Ygbm9pc2UgdG8gYXBwbHkuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5Ob2lzZUZpbHRlciNcbiAgICAgKiBAZGVmYXVsdCAwLjVcbiAgICAgKi9cbiAgICBub2lzZToge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVuaWZvcm1zLm5vaXNlLnZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy5ub2lzZS52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfVxufSk7XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uLy4uL2NvcmUnKTtcbi8vIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL3N1YnN0YWNrL2JyZnMvaXNzdWVzLzI1XG5cblxuLyoqXG4gKiBUaGlzIGZpbHRlciBhcHBsaWVzIGEgcGl4ZWxhdGUgZWZmZWN0IG1ha2luZyBkaXNwbGF5IG9iamVjdHMgYXBwZWFyICdibG9ja3knLlxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5BYnN0cmFjdEZpbHRlclxuICogQG1lbWJlcm9mIFBJWEkuZmlsdGVyc1xuICovXG5mdW5jdGlvbiBQaXhlbGF0ZUZpbHRlcigpXG57XG4gICAgY29yZS5BYnN0cmFjdEZpbHRlci5jYWxsKHRoaXMsXG4gICAgICAgIC8vIHZlcnRleCBzaGFkZXJcbiAgICAgICAgbnVsbCxcbiAgICAgICAgLy8gZnJhZ21lbnQgc2hhZGVyXG4gICAgICAgIFwicHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XFxuXFxudmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7XFxuXFxudW5pZm9ybSB2ZWM0IGRpbWVuc2lvbnM7XFxudW5pZm9ybSB2ZWMyIHBpeGVsU2l6ZTtcXG51bmlmb3JtIHNhbXBsZXIyRCB1U2FtcGxlcjtcXG5cXG52b2lkIG1haW4odm9pZClcXG57XFxuICAgIHZlYzIgY29vcmQgPSB2VGV4dHVyZUNvb3JkO1xcblxcbiAgICB2ZWMyIHNpemUgPSBkaW1lbnNpb25zLnh5IC8gcGl4ZWxTaXplO1xcblxcbiAgICB2ZWMyIGNvbG9yID0gZmxvb3IoICggdlRleHR1cmVDb29yZCAqIHNpemUgKSApIC8gc2l6ZSArIHBpeGVsU2l6ZS9kaW1lbnNpb25zLnh5ICogMC41O1xcblxcbiAgICBnbF9GcmFnQ29sb3IgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIGNvbG9yKTtcXG59XFxuXCIsXG4gICAgICAgIC8vIGN1c3RvbSB1bmlmb3Jtc1xuICAgICAgICB7XG4gICAgICAgICAgICBkaW1lbnNpb25zOiB7IHR5cGU6ICc0ZnYnLCAgdmFsdWU6IG5ldyBGbG9hdDMyQXJyYXkoWzAsIDAsIDAsIDBdKSB9LFxuICAgICAgICAgICAgcGl4ZWxTaXplOiAgeyB0eXBlOiAndjInLCAgIHZhbHVlOiB7IHg6IDEwLCB5OiAxMCB9IH1cbiAgICAgICAgfVxuICAgICk7XG59XG5cblBpeGVsYXRlRmlsdGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoY29yZS5BYnN0cmFjdEZpbHRlci5wcm90b3R5cGUpO1xuUGl4ZWxhdGVGaWx0ZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gUGl4ZWxhdGVGaWx0ZXI7XG5tb2R1bGUuZXhwb3J0cyA9IFBpeGVsYXRlRmlsdGVyO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhQaXhlbGF0ZUZpbHRlci5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBUaGlzIGEgcG9pbnQgdGhhdCBkZXNjcmliZXMgdGhlIHNpemUgb2YgdGhlIGJsb2Nrcy5cbiAgICAgKiB4IGlzIHRoZSB3aWR0aCBvZiB0aGUgYmxvY2sgYW5kIHkgaXMgdGhlIGhlaWdodC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuUG9pbnR9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5QaXhlbGF0ZUZpbHRlciNcbiAgICAgKi9cbiAgICBzaXplOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudW5pZm9ybXMucGl4ZWxTaXplLnZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy5waXhlbFNpemUudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi8uLi9jb3JlJyk7XG4vLyBAc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9zdWJzdGFjay9icmZzL2lzc3Vlcy8yNVxuXG5cbi8qKlxuICogQW4gUkdCIFNwbGl0IEZpbHRlci5cbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQWJzdHJhY3RGaWx0ZXJcbiAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnNcbiAqL1xuZnVuY3Rpb24gUkdCU3BsaXRGaWx0ZXIoKVxue1xuICAgIGNvcmUuQWJzdHJhY3RGaWx0ZXIuY2FsbCh0aGlzLFxuICAgICAgICAvLyB2ZXJ0ZXggc2hhZGVyXG4gICAgICAgIG51bGwsXG4gICAgICAgIC8vIGZyYWdtZW50IHNoYWRlclxuICAgICAgICBcInByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xcblxcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xcblxcbnVuaWZvcm0gc2FtcGxlcjJEIHVTYW1wbGVyO1xcbnVuaWZvcm0gdmVjNCBkaW1lbnNpb25zO1xcbnVuaWZvcm0gdmVjMiByZWQ7XFxudW5pZm9ybSB2ZWMyIGdyZWVuO1xcbnVuaWZvcm0gdmVjMiBibHVlO1xcblxcbnZvaWQgbWFpbih2b2lkKVxcbntcXG4gICBnbF9GcmFnQ29sb3IuciA9IHRleHR1cmUyRCh1U2FtcGxlciwgdlRleHR1cmVDb29yZCArIHJlZC9kaW1lbnNpb25zLnh5KS5yO1xcbiAgIGdsX0ZyYWdDb2xvci5nID0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2VGV4dHVyZUNvb3JkICsgZ3JlZW4vZGltZW5zaW9ucy54eSkuZztcXG4gICBnbF9GcmFnQ29sb3IuYiA9IHRleHR1cmUyRCh1U2FtcGxlciwgdlRleHR1cmVDb29yZCArIGJsdWUvZGltZW5zaW9ucy54eSkuYjtcXG4gICBnbF9GcmFnQ29sb3IuYSA9IHRleHR1cmUyRCh1U2FtcGxlciwgdlRleHR1cmVDb29yZCkuYTtcXG59XFxuXCIsXG4gICAgICAgIC8vIGN1c3RvbSB1bmlmb3Jtc1xuICAgICAgICB7XG4gICAgICAgICAgICByZWQ6ICAgICAgICB7IHR5cGU6ICd2MicsIHZhbHVlOiB7IHg6IDIwLCB5OiAyMCB9IH0sXG4gICAgICAgICAgICBncmVlbjogICAgICB7IHR5cGU6ICd2MicsIHZhbHVlOiB7IHg6IC0yMCwgeTogMjAgfSB9LFxuICAgICAgICAgICAgYmx1ZTogICAgICAgeyB0eXBlOiAndjInLCB2YWx1ZTogeyB4OiAyMCwgeTogLTIwIH0gfSxcbiAgICAgICAgICAgIGRpbWVuc2lvbnM6IHsgdHlwZTogJzRmdicsIHZhbHVlOiBbMCwgMCwgMCwgMF0gfVxuICAgICAgICB9XG4gICAgKTtcbn1cblxuUkdCU3BsaXRGaWx0ZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShjb3JlLkFic3RyYWN0RmlsdGVyLnByb3RvdHlwZSk7XG5SR0JTcGxpdEZpbHRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBSR0JTcGxpdEZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gUkdCU3BsaXRGaWx0ZXI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKFJHQlNwbGl0RmlsdGVyLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFJlZCBjaGFubmVsIG9mZnNldC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuUG9pbnR9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5SR0JTcGxpdEZpbHRlciNcbiAgICAgKi9cbiAgICByZWQ6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy51bmlmb3Jtcy5yZWQudmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLnJlZC52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIEdyZWVuIGNoYW5uZWwgb2Zmc2V0LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5Qb2ludH1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLlJHQlNwbGl0RmlsdGVyI1xuICAgICAqL1xuICAgIGdyZWVuOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudW5pZm9ybXMuZ3JlZW4udmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLmdyZWVuLnZhbHVlID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQmx1ZSBvZmZzZXQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlBvaW50fVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuUkdCU3BsaXRGaWx0ZXIjXG4gICAgICovXG4gICAgYmx1ZToge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVuaWZvcm1zLmJsdWUudmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLmJsdWUudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi8uLi9jb3JlJyk7XG4vLyBAc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9zdWJzdGFjay9icmZzL2lzc3Vlcy8yNVxuXG5cbi8qKlxuICogVGhpcyBhcHBsaWVzIGEgc2VwaWEgZWZmZWN0IHRvIHlvdXIgRGlzcGxheSBPYmplY3RzLlxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5BYnN0cmFjdEZpbHRlclxuICogQG1lbWJlcm9mIFBJWEkuZmlsdGVyc1xuICovXG5mdW5jdGlvbiBTZXBpYUZpbHRlcigpXG57XG4gICAgY29yZS5BYnN0cmFjdEZpbHRlci5jYWxsKHRoaXMsXG4gICAgICAgIC8vIHZlcnRleCBzaGFkZXJcbiAgICAgICAgbnVsbCxcbiAgICAgICAgLy8gZnJhZ21lbnQgc2hhZGVyXG4gICAgICAgIFwicHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XFxuXFxudmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7XFxuXFxudW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXI7XFxudW5pZm9ybSBmbG9hdCBzZXBpYTtcXG5cXG5jb25zdCBtYXQzIHNlcGlhTWF0cml4ID0gbWF0MygwLjM1ODgsIDAuNzA0NCwgMC4xMzY4LCAwLjI5OTAsIDAuNTg3MCwgMC4xMTQwLCAwLjIzOTIsIDAuNDY5NiwgMC4wOTEyKTtcXG5cXG52b2lkIG1haW4odm9pZClcXG57XFxuICAgZ2xfRnJhZ0NvbG9yID0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2VGV4dHVyZUNvb3JkKTtcXG4gICBnbF9GcmFnQ29sb3IucmdiID0gbWl4KCBnbF9GcmFnQ29sb3IucmdiLCBnbF9GcmFnQ29sb3IucmdiICogc2VwaWFNYXRyaXgsIHNlcGlhKTtcXG59XFxuXCIsXG4gICAgICAgIC8vIGN1c3RvbSB1bmlmb3Jtc1xuICAgICAgICB7XG4gICAgICAgICAgICBzZXBpYTogeyB0eXBlOiAnMWYnLCB2YWx1ZTogMSB9XG4gICAgICAgIH1cbiAgICApO1xufVxuXG5TZXBpYUZpbHRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuQWJzdHJhY3RGaWx0ZXIucHJvdG90eXBlKTtcblNlcGlhRmlsdGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFNlcGlhRmlsdGVyO1xubW9kdWxlLmV4cG9ydHMgPSBTZXBpYUZpbHRlcjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoU2VwaWFGaWx0ZXIucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogVGhlIHN0cmVuZ3RoIG9mIHRoZSBzZXBpYS4gYDFgIHdpbGwgYXBwbHkgdGhlIGZ1bGwgc2VwaWEgZWZmZWN0LCBhbmRcbiAgICAgKiBgMGAgd2lsbCBtYWtlIHRoZSBvYmplY3QgaXRzIG5vcm1hbCBjb2xvci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLlNlcGlhRmlsdGVyI1xuICAgICAqL1xuICAgIHNlcGlhOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudW5pZm9ybXMuc2VwaWEudmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLnNlcGlhLnZhbHVlID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG59KTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vLi4vY29yZScpO1xuLy8gQHNlZSBodHRwczovL2dpdGh1Yi5jb20vc3Vic3RhY2svYnJmcy9pc3N1ZXMvMjVcblxuXG4vKipcbiAqIFRoZSBDb2xvck1hdHJpeEZpbHRlciBjbGFzcyBsZXRzIHlvdSBhcHBseSBhIDR4NCBtYXRyaXggdHJhbnNmb3JtYXRpb24gb24gdGhlIFJHQkFcbiAqIGNvbG9yIGFuZCBhbHBoYSB2YWx1ZXMgb2YgZXZlcnkgcGl4ZWwgb24geW91ciBkaXNwbGF5T2JqZWN0IHRvIHByb2R1Y2UgYSByZXN1bHRcbiAqIHdpdGggYSBuZXcgc2V0IG9mIFJHQkEgY29sb3IgYW5kIGFscGhhIHZhbHVlcy4gSXQncyBwcmV0dHkgcG93ZXJmdWwhXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLkFic3RyYWN0RmlsdGVyXG4gKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzXG4gKi9cbmZ1bmN0aW9uIFNob2Nrd2F2ZUZpbHRlcigpXG57XG4gICAgY29yZS5BYnN0cmFjdEZpbHRlci5jYWxsKHRoaXMsXG4gICAgICAgIC8vIHZlcnRleCBzaGFkZXJcbiAgICAgICAgbnVsbCxcbiAgICAgICAgLy8gZnJhZ21lbnQgc2hhZGVyXG4gICAgICAgIFwicHJlY2lzaW9uIGxvd3AgZmxvYXQ7XFxuXFxudmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7XFxuXFxudW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXI7XFxuXFxudW5pZm9ybSB2ZWMyIGNlbnRlcjtcXG51bmlmb3JtIHZlYzMgcGFyYW1zOyAvLyAxMC4wLCAwLjgsIDAuMVxcbnVuaWZvcm0gZmxvYXQgdGltZTtcXG5cXG52b2lkIG1haW4oKVxcbntcXG4gICAgdmVjMiB1diA9IHZUZXh0dXJlQ29vcmQ7XFxuICAgIHZlYzIgdGV4Q29vcmQgPSB1djtcXG5cXG4gICAgZmxvYXQgZGlzdCA9IGRpc3RhbmNlKHV2LCBjZW50ZXIpO1xcblxcbiAgICBpZiAoIChkaXN0IDw9ICh0aW1lICsgcGFyYW1zLnopKSAmJiAoZGlzdCA+PSAodGltZSAtIHBhcmFtcy56KSkgKVxcbiAgICB7XFxuICAgICAgICBmbG9hdCBkaWZmID0gKGRpc3QgLSB0aW1lKTtcXG4gICAgICAgIGZsb2F0IHBvd0RpZmYgPSAxLjAgLSBwb3coYWJzKGRpZmYqcGFyYW1zLngpLCBwYXJhbXMueSk7XFxuXFxuICAgICAgICBmbG9hdCBkaWZmVGltZSA9IGRpZmYgICogcG93RGlmZjtcXG4gICAgICAgIHZlYzIgZGlmZlVWID0gbm9ybWFsaXplKHV2IC0gY2VudGVyKTtcXG4gICAgICAgIHRleENvb3JkID0gdXYgKyAoZGlmZlVWICogZGlmZlRpbWUpO1xcbiAgICB9XFxuXFxuICAgIGdsX0ZyYWdDb2xvciA9IHRleHR1cmUyRCh1U2FtcGxlciwgdGV4Q29vcmQpO1xcbn1cXG5cIixcbiAgICAgICAgLy8gY3VzdG9tIHVuaWZvcm1zXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNlbnRlcjogeyB0eXBlOiAndjInLCB2YWx1ZTogeyB4OiAwLjUsIHk6IDAuNSB9IH0sXG4gICAgICAgICAgICBwYXJhbXM6IHsgdHlwZTogJ3YzJywgdmFsdWU6IHsgeDogMTAsIHk6IDAuOCwgejogMC4xIH0gfSxcbiAgICAgICAgICAgIHRpbWU6IHsgdHlwZTogJzFmJywgdmFsdWU6IDAgfVxuICAgICAgICB9XG4gICAgKTtcbn1cblxuU2hvY2t3YXZlRmlsdGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoY29yZS5BYnN0cmFjdEZpbHRlci5wcm90b3R5cGUpO1xuU2hvY2t3YXZlRmlsdGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFNob2Nrd2F2ZUZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gU2hvY2t3YXZlRmlsdGVyO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhTaG9ja3dhdmVGaWx0ZXIucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgY2VudGVyIG9mIHRoZSBzaG9ja3dhdmUgaW4gbm9ybWFsaXplZCBzY3JlZW4gY29vcmRzLiBUaGF0IGlzXG4gICAgICogKDAsMCkgaXMgdGhlIHRvcC1sZWZ0IGFuZCAoMSwxKSBpcyB0aGUgYm90dG9tIHJpZ2h0LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7b2JqZWN0PHN0cmluZywgbnVtYmVyPn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLlNob2Nrd2F2ZUZpbHRlciNcbiAgICAgKi9cbiAgICBjZW50ZXI6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy51bmlmb3Jtcy5jZW50ZXIudmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLmNlbnRlci52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfSxcbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBwYXJhbXMgb2YgdGhlIHNob2Nrd2F2ZS4gVGhlc2UgbW9kaWZ5IHRoZSBsb29rIGFuZCBiZWhhdmlvciBvZlxuICAgICAqIHRoZSBzaG9ja3dhdmUgYXMgaXQgcmlwcGxlcyBvdXQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtvYmplY3Q8c3RyaW5nLCBudW1iZXI+fVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuU2hvY2t3YXZlRmlsdGVyI1xuICAgICAqL1xuICAgIHBhcmFtczoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVuaWZvcm1zLnBhcmFtcy52YWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudW5pZm9ybXMucGFyYW1zLnZhbHVlID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9LFxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIGVsYXBzZWQgdGltZSBvZiB0aGUgc2hvY2t3YXZlLiBUaGlzIGNvbnRyb2xzIHRoZSBzcGVlZCBhdCB3aGljaFxuICAgICAqIHRoZSBzaG9ja3dhdmUgcmlwcGxlcyBvdXQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5TaG9ja3dhdmVGaWx0ZXIjXG4gICAgICovXG4gICAgdGltZToge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVuaWZvcm1zLnRpbWUudmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLnRpbWUudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi8uLi9jb3JlJyk7XG4vLyBAc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9zdWJzdGFjay9icmZzL2lzc3Vlcy8yNVxuXG5cbi8qKlxuICogQGF1dGhvciBWaWNvIEB2aWNvY290ZWFcbiAqIG9yaWdpbmFsIGZpbHRlciBodHRwczovL2dpdGh1Yi5jb20vZXZhbncvZ2xmeC5qcy9ibG9iL21hc3Rlci9zcmMvZmlsdGVycy9ibHVyL3RpbHRzaGlmdC5qcyBieSBFdmFuIFdhbGxhY2UgOiBodHRwOi8vbWFkZWJ5ZXZhbi5jb20vXG4gKi9cblxuLyoqXG4gKiBBIFRpbHRTaGlmdEF4aXNGaWx0ZXIuXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLkFic3RyYWN0RmlsdGVyXG4gKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzXG4gKi9cbmZ1bmN0aW9uIFRpbHRTaGlmdEF4aXNGaWx0ZXIoKVxue1xuICAgIGNvcmUuQWJzdHJhY3RGaWx0ZXIuY2FsbCh0aGlzLFxuICAgICAgICAvLyB2ZXJ0ZXggc2hhZGVyXG4gICAgICAgIG51bGwsXG4gICAgICAgIC8vIGZyYWdtZW50IHNoYWRlclxuICAgICAgICBcInByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xcblxcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xcblxcbnVuaWZvcm0gc2FtcGxlcjJEIHVTYW1wbGVyO1xcbnVuaWZvcm0gZmxvYXQgYmx1cjtcXG51bmlmb3JtIGZsb2F0IGdyYWRpZW50Qmx1cjtcXG51bmlmb3JtIHZlYzIgc3RhcnQ7XFxudW5pZm9ybSB2ZWMyIGVuZDtcXG51bmlmb3JtIHZlYzIgZGVsdGE7XFxudW5pZm9ybSB2ZWMyIHRleFNpemU7XFxuXFxuZmxvYXQgcmFuZG9tKHZlYzMgc2NhbGUsIGZsb2F0IHNlZWQpXFxue1xcbiAgICByZXR1cm4gZnJhY3Qoc2luKGRvdChnbF9GcmFnQ29vcmQueHl6ICsgc2VlZCwgc2NhbGUpKSAqIDQzNzU4LjU0NTMgKyBzZWVkKTtcXG59XFxuXFxudm9pZCBtYWluKHZvaWQpXFxue1xcbiAgICB2ZWM0IGNvbG9yID0gdmVjNCgwLjApO1xcbiAgICBmbG9hdCB0b3RhbCA9IDAuMDtcXG5cXG4gICAgZmxvYXQgb2Zmc2V0ID0gcmFuZG9tKHZlYzMoMTIuOTg5OCwgNzguMjMzLCAxNTEuNzE4MiksIDAuMCk7XFxuICAgIHZlYzIgbm9ybWFsID0gbm9ybWFsaXplKHZlYzIoc3RhcnQueSAtIGVuZC55LCBlbmQueCAtIHN0YXJ0LngpKTtcXG4gICAgZmxvYXQgcmFkaXVzID0gc21vb3Roc3RlcCgwLjAsIDEuMCwgYWJzKGRvdCh2VGV4dHVyZUNvb3JkICogdGV4U2l6ZSAtIHN0YXJ0LCBub3JtYWwpKSAvIGdyYWRpZW50Qmx1cikgKiBibHVyO1xcblxcbiAgICBmb3IgKGZsb2F0IHQgPSAtMzAuMDsgdCA8PSAzMC4wOyB0KyspXFxuICAgIHtcXG4gICAgICAgIGZsb2F0IHBlcmNlbnQgPSAodCArIG9mZnNldCAtIDAuNSkgLyAzMC4wO1xcbiAgICAgICAgZmxvYXQgd2VpZ2h0ID0gMS4wIC0gYWJzKHBlcmNlbnQpO1xcbiAgICAgICAgdmVjNCBzYW1wbGUgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZUZXh0dXJlQ29vcmQgKyBkZWx0YSAvIHRleFNpemUgKiBwZXJjZW50ICogcmFkaXVzKTtcXG4gICAgICAgIHNhbXBsZS5yZ2IgKj0gc2FtcGxlLmE7XFxuICAgICAgICBjb2xvciArPSBzYW1wbGUgKiB3ZWlnaHQ7XFxuICAgICAgICB0b3RhbCArPSB3ZWlnaHQ7XFxuICAgIH1cXG5cXG4gICAgZ2xfRnJhZ0NvbG9yID0gY29sb3IgLyB0b3RhbDtcXG4gICAgZ2xfRnJhZ0NvbG9yLnJnYiAvPSBnbF9GcmFnQ29sb3IuYSArIDAuMDAwMDE7XFxufVxcblwiLFxuICAgICAgICAvLyBjdXN0b20gdW5pZm9ybXNcbiAgICAgICAge1xuICAgICAgICAgICAgYmx1cjogICAgICAgICAgIHsgdHlwZTogJzFmJywgdmFsdWU6IDEwMCB9LFxuICAgICAgICAgICAgZ3JhZGllbnRCbHVyOiAgIHsgdHlwZTogJzFmJywgdmFsdWU6IDYwMCB9LFxuICAgICAgICAgICAgc3RhcnQ6ICAgICAgICAgIHsgdHlwZTogJ3YyJywgdmFsdWU6IHsgeDogMCwgICAgeTogd2luZG93LmlubmVySGVpZ2h0IC8gMiB9IH0sXG4gICAgICAgICAgICBlbmQ6ICAgICAgICAgICAgeyB0eXBlOiAndjInLCB2YWx1ZTogeyB4OiA2MDAsICB5OiB3aW5kb3cuaW5uZXJIZWlnaHQgLyAyIH0gfSxcbiAgICAgICAgICAgIGRlbHRhOiAgICAgICAgICB7IHR5cGU6ICd2MicsIHZhbHVlOiB7IHg6IDMwLCAgIHk6IDMwIH0gfSxcbiAgICAgICAgICAgIHRleFNpemU6ICAgICAgICB7IHR5cGU6ICd2MicsIHZhbHVlOiB7IHg6IHdpbmRvdy5pbm5lcldpZHRoLCB5OiB3aW5kb3cuaW5uZXJIZWlnaHQgfSB9XG4gICAgICAgIH1cbiAgICApO1xuXG4gICAgdGhpcy51cGRhdGVEZWx0YSgpO1xufVxuXG5UaWx0U2hpZnRBeGlzRmlsdGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoY29yZS5BYnN0cmFjdEZpbHRlci5wcm90b3R5cGUpO1xuVGlsdFNoaWZ0QXhpc0ZpbHRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBUaWx0U2hpZnRBeGlzRmlsdGVyO1xubW9kdWxlLmV4cG9ydHMgPSBUaWx0U2hpZnRBeGlzRmlsdGVyO1xuXG4vKipcbiAqIFVwZGF0ZXMgdGhlIGZpbHRlciBkZWx0YSB2YWx1ZXMuXG4gKiBUaGlzIGlzIG92ZXJyaWRkZW4gaW4gdGhlIFggYW5kIFkgZmlsdGVycywgZG9lcyBub3RoaW5nIGZvciB0aGlzIGNsYXNzLlxuICpcbiAqL1xuVGlsdFNoaWZ0QXhpc0ZpbHRlci5wcm90b3R5cGUudXBkYXRlRGVsdGEgPSBmdW5jdGlvbiAoKVxue1xuICAgIHRoaXMudW5pZm9ybXMuZGVsdGEudmFsdWUueCA9IDA7XG4gICAgdGhpcy51bmlmb3Jtcy5kZWx0YS52YWx1ZS55ID0gMDtcbn07XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKFRpbHRTaGlmdEF4aXNGaWx0ZXIucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogVGhlIHN0cmVuZ3RoIG9mIHRoZSBibHVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuVGlsdFNoaWZ0QXhpc0ZpbHRlciNcbiAgICAgKi9cbiAgICBibHVyOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudW5pZm9ybXMuYmx1ci52YWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudW5pZm9ybXMuYmx1ci52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFRoZSBzdHJlbmd0aCBvZiB0aGUgZ3JhZGllbnQgYmx1ci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLlRpbHRTaGlmdEF4aXNGaWx0ZXIjXG4gICAgICovXG4gICAgZ3JhZGllbnRCbHVyOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudW5pZm9ybXMuZ3JhZGllbnRCbHVyLnZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy5ncmFkaWVudEJsdXIudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBUaGUgWCB2YWx1ZSB0byBzdGFydCB0aGUgZWZmZWN0IGF0LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5Qb2ludH1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLlRpbHRTaGlmdEF4aXNGaWx0ZXIjXG4gICAgICovXG4gICAgc3RhcnQ6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy51bmlmb3Jtcy5zdGFydC52YWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudW5pZm9ybXMuc3RhcnQudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlRGVsdGEoKTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBUaGUgWCB2YWx1ZSB0byBlbmQgdGhlIGVmZmVjdCBhdC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuUG9pbnR9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5UaWx0U2hpZnRBeGlzRmlsdGVyI1xuICAgICAqL1xuICAgIGVuZDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVuaWZvcm1zLmVuZC52YWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudW5pZm9ybXMuZW5kLnZhbHVlID0gdmFsdWU7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZURlbHRhKCk7XG4gICAgICAgIH1cbiAgICB9XG59KTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vLi4vY29yZScpLFxuICAgIFRpbHRTaGlmdFhGaWx0ZXIgPSByZXF1aXJlKCcuL1RpbHRTaGlmdFhGaWx0ZXInKSxcbiAgICBUaWx0U2hpZnRZRmlsdGVyID0gcmVxdWlyZSgnLi9UaWx0U2hpZnRZRmlsdGVyJyk7XG5cbi8qKlxuICogQGF1dGhvciBWaWNvIEB2aWNvY290ZWFcbiAqIG9yaWdpbmFsIGZpbHRlciBodHRwczovL2dpdGh1Yi5jb20vZXZhbncvZ2xmeC5qcy9ibG9iL21hc3Rlci9zcmMvZmlsdGVycy9ibHVyL3RpbHRzaGlmdC5qcyBieSBFdmFuIFdhbGxhY2UgOiBodHRwOi8vbWFkZWJ5ZXZhbi5jb20vXG4gKi9cblxuLyoqXG4gKiBBIFRpbHRTaGlmdCBGaWx0ZXIuIE1hbmFnZXMgdGhlIHBhc3Mgb2YgYm90aCBhIFRpbHRTaGlmdFhGaWx0ZXIgYW5kIFRpbHRTaGlmdFlGaWx0ZXIuXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLkFic3RyYWN0RmlsdGVyXG4gKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzXG4gKi9cbmZ1bmN0aW9uIFRpbHRTaGlmdEZpbHRlcigpXG57XG4gICAgY29yZS5BYnN0cmFjdEZpbHRlci5jYWxsKHRoaXMpO1xuXG4gICAgdGhpcy50aWx0U2hpZnRYRmlsdGVyID0gbmV3IFRpbHRTaGlmdFhGaWx0ZXIoKTtcbiAgICB0aGlzLnRpbHRTaGlmdFlGaWx0ZXIgPSBuZXcgVGlsdFNoaWZ0WUZpbHRlcigpO1xufVxuXG5UaWx0U2hpZnRGaWx0ZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShjb3JlLkFic3RyYWN0RmlsdGVyLnByb3RvdHlwZSk7XG5UaWx0U2hpZnRGaWx0ZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gVGlsdFNoaWZ0RmlsdGVyO1xubW9kdWxlLmV4cG9ydHMgPSBUaWx0U2hpZnRGaWx0ZXI7XG5cblRpbHRTaGlmdEZpbHRlci5wcm90b3R5cGUuYXBwbHlGaWx0ZXIgPSBmdW5jdGlvbiAocmVuZGVyZXIsIGlucHV0LCBvdXRwdXQpXG57XG4gICAgdmFyIHJlbmRlclRhcmdldCA9IHJlbmRlcmVyLmZpbHRlck1hbmFnZXIuZ2V0UmVuZGVyVGFyZ2V0KHRydWUpO1xuXG4gICAgdGhpcy50aWx0U2hpZnRYRmlsdGVyLmFwcGx5RmlsdGVyKHJlbmRlcmVyLCBpbnB1dCwgcmVuZGVyVGFyZ2V0KTtcblxuICAgIHRoaXMudGlsdFNoaWZ0WUZpbHRlci5hcHBseUZpbHRlcihyZW5kZXJlciwgcmVuZGVyVGFyZ2V0LCBvdXRwdXQpO1xuXG4gICAgcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5yZXR1cm5SZW5kZXJUYXJnZXQocmVuZGVyVGFyZ2V0KTtcbn07XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKFRpbHRTaGlmdEZpbHRlci5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBUaGUgc3RyZW5ndGggb2YgdGhlIGJsdXIuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5UaWx0U2hpZnRGaWx0ZXIjXG4gICAgICovXG4gICAgYmx1cjoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnRpbHRTaGlmdFhGaWx0ZXIuYmx1cjtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudGlsdFNoaWZ0WEZpbHRlci5ibHVyID0gdGhpcy50aWx0U2hpZnRZRmlsdGVyLmJsdXIgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBUaGUgc3RyZW5ndGggb2YgdGhlIGdyYWRpZW50IGJsdXIuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5UaWx0U2hpZnRGaWx0ZXIjXG4gICAgICovXG4gICAgZ3JhZGllbnRCbHVyOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudGlsdFNoaWZ0WEZpbHRlci5ncmFkaWVudEJsdXI7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnRpbHRTaGlmdFhGaWx0ZXIuZ3JhZGllbnRCbHVyID0gdGhpcy50aWx0U2hpZnRZRmlsdGVyLmdyYWRpZW50Qmx1ciA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFRoZSBZIHZhbHVlIHRvIHN0YXJ0IHRoZSBlZmZlY3QgYXQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5UaWx0U2hpZnRGaWx0ZXIjXG4gICAgICovXG4gICAgc3RhcnQ6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy50aWx0U2hpZnRYRmlsdGVyLnN0YXJ0O1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy50aWx0U2hpZnRYRmlsdGVyLnN0YXJ0ID0gdGhpcy50aWx0U2hpZnRZRmlsdGVyLnN0YXJ0ID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVGhlIFkgdmFsdWUgdG8gZW5kIHRoZSBlZmZlY3QgYXQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5UaWx0U2hpZnRGaWx0ZXIjXG4gICAgICovXG4gICAgZW5kOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudGlsdFNoaWZ0WEZpbHRlci5lbmQ7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnRpbHRTaGlmdFhGaWx0ZXIuZW5kID0gdGhpcy50aWx0U2hpZnRZRmlsdGVyLmVuZCA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfVxufSk7XG4iLCJ2YXIgVGlsdFNoaWZ0QXhpc0ZpbHRlciA9IHJlcXVpcmUoJy4vVGlsdFNoaWZ0QXhpc0ZpbHRlcicpO1xuXG4vKipcbiAqIEBhdXRob3IgVmljbyBAdmljb2NvdGVhXG4gKiBvcmlnaW5hbCBmaWx0ZXIgaHR0cHM6Ly9naXRodWIuY29tL2V2YW53L2dsZnguanMvYmxvYi9tYXN0ZXIvc3JjL2ZpbHRlcnMvYmx1ci90aWx0c2hpZnQuanMgYnkgRXZhbiBXYWxsYWNlIDogaHR0cDovL21hZGVieWV2YW4uY29tL1xuICovXG5cbi8qKlxuICogQSBUaWx0U2hpZnRYRmlsdGVyLlxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5UaWx0U2hpZnRBeGlzRmlsdGVyXG4gKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzXG4gKi9cbmZ1bmN0aW9uIFRpbHRTaGlmdFhGaWx0ZXIoKVxue1xuICAgIFRpbHRTaGlmdEF4aXNGaWx0ZXIuY2FsbCh0aGlzKTtcbn1cblxuVGlsdFNoaWZ0WEZpbHRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFRpbHRTaGlmdEF4aXNGaWx0ZXIucHJvdG90eXBlKTtcblRpbHRTaGlmdFhGaWx0ZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gVGlsdFNoaWZ0WEZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gVGlsdFNoaWZ0WEZpbHRlcjtcblxuLyoqXG4gKiBVcGRhdGVzIHRoZSBmaWx0ZXIgZGVsdGEgdmFsdWVzLlxuICpcbiAqL1xuVGlsdFNoaWZ0WEZpbHRlci5wcm90b3R5cGUudXBkYXRlRGVsdGEgPSBmdW5jdGlvbiAoKVxue1xuICAgIHZhciBkeCA9IHRoaXMudW5pZm9ybXMuZW5kLnZhbHVlLnggLSB0aGlzLnVuaWZvcm1zLnN0YXJ0LnZhbHVlLng7XG4gICAgdmFyIGR5ID0gdGhpcy51bmlmb3Jtcy5lbmQudmFsdWUueSAtIHRoaXMudW5pZm9ybXMuc3RhcnQudmFsdWUueTtcbiAgICB2YXIgZCA9IE1hdGguc3FydChkeCAqIGR4ICsgZHkgKiBkeSk7XG5cbiAgICB0aGlzLnVuaWZvcm1zLmRlbHRhLnZhbHVlLnggPSBkeCAvIGQ7XG4gICAgdGhpcy51bmlmb3Jtcy5kZWx0YS52YWx1ZS55ID0gZHkgLyBkO1xufTtcbiIsInZhciBUaWx0U2hpZnRBeGlzRmlsdGVyID0gcmVxdWlyZSgnLi9UaWx0U2hpZnRBeGlzRmlsdGVyJyk7XG5cbi8qKlxuICogQGF1dGhvciBWaWNvIEB2aWNvY290ZWFcbiAqIG9yaWdpbmFsIGZpbHRlciBodHRwczovL2dpdGh1Yi5jb20vZXZhbncvZ2xmeC5qcy9ibG9iL21hc3Rlci9zcmMvZmlsdGVycy9ibHVyL3RpbHRzaGlmdC5qcyBieSBFdmFuIFdhbGxhY2UgOiBodHRwOi8vbWFkZWJ5ZXZhbi5jb20vXG4gKi9cblxuLyoqXG4gKiBBIFRpbHRTaGlmdFlGaWx0ZXIuXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLlRpbHRTaGlmdEF4aXNGaWx0ZXJcbiAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnNcbiAqL1xuZnVuY3Rpb24gVGlsdFNoaWZ0WUZpbHRlcigpXG57XG4gICAgVGlsdFNoaWZ0QXhpc0ZpbHRlci5jYWxsKHRoaXMpO1xufVxuXG5UaWx0U2hpZnRZRmlsdGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoVGlsdFNoaWZ0QXhpc0ZpbHRlci5wcm90b3R5cGUpO1xuVGlsdFNoaWZ0WUZpbHRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBUaWx0U2hpZnRZRmlsdGVyO1xubW9kdWxlLmV4cG9ydHMgPSBUaWx0U2hpZnRZRmlsdGVyO1xuXG4vKipcbiAqIFVwZGF0ZXMgdGhlIGZpbHRlciBkZWx0YSB2YWx1ZXMuXG4gKlxuICovXG5UaWx0U2hpZnRZRmlsdGVyLnByb3RvdHlwZS51cGRhdGVEZWx0YSA9IGZ1bmN0aW9uICgpXG57XG4gICAgdmFyIGR4ID0gdGhpcy51bmlmb3Jtcy5lbmQudmFsdWUueCAtIHRoaXMudW5pZm9ybXMuc3RhcnQudmFsdWUueDtcbiAgICB2YXIgZHkgPSB0aGlzLnVuaWZvcm1zLmVuZC52YWx1ZS55IC0gdGhpcy51bmlmb3Jtcy5zdGFydC52YWx1ZS55O1xuICAgIHZhciBkID0gTWF0aC5zcXJ0KGR4ICogZHggKyBkeSAqIGR5KTtcblxuICAgIHRoaXMudW5pZm9ybXMuZGVsdGEudmFsdWUueCA9IC1keSAvIGQ7XG4gICAgdGhpcy51bmlmb3Jtcy5kZWx0YS52YWx1ZS55ID0gZHggLyBkO1xufTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vLi4vY29yZScpO1xuLy8gQHNlZSBodHRwczovL2dpdGh1Yi5jb20vc3Vic3RhY2svYnJmcy9pc3N1ZXMvMjVcblxuXG4vKipcbiAqIFRoaXMgZmlsdGVyIGFwcGxpZXMgYSB0d2lzdCBlZmZlY3QgbWFraW5nIGRpc3BsYXkgb2JqZWN0cyBhcHBlYXIgdHdpc3RlZCBpbiB0aGUgZ2l2ZW4gZGlyZWN0aW9uLlxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5BYnN0cmFjdEZpbHRlclxuICogQG1lbWJlcm9mIFBJWEkuZmlsdGVyc1xuICovXG5mdW5jdGlvbiBUd2lzdEZpbHRlcigpXG57XG4gICAgY29yZS5BYnN0cmFjdEZpbHRlci5jYWxsKHRoaXMsXG4gICAgICAgIC8vIHZlcnRleCBzaGFkZXJcbiAgICAgICAgbnVsbCxcbiAgICAgICAgLy8gZnJhZ21lbnQgc2hhZGVyXG4gICAgICAgIFwicHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XFxuXFxudmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7XFxuXFxudW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXI7XFxudW5pZm9ybSBmbG9hdCByYWRpdXM7XFxudW5pZm9ybSBmbG9hdCBhbmdsZTtcXG51bmlmb3JtIHZlYzIgb2Zmc2V0O1xcblxcbnZvaWQgbWFpbih2b2lkKVxcbntcXG4gICB2ZWMyIGNvb3JkID0gdlRleHR1cmVDb29yZCAtIG9mZnNldDtcXG4gICBmbG9hdCBkaXN0ID0gbGVuZ3RoKGNvb3JkKTtcXG5cXG4gICBpZiAoZGlzdCA8IHJhZGl1cylcXG4gICB7XFxuICAgICAgIGZsb2F0IHJhdGlvID0gKHJhZGl1cyAtIGRpc3QpIC8gcmFkaXVzO1xcbiAgICAgICBmbG9hdCBhbmdsZU1vZCA9IHJhdGlvICogcmF0aW8gKiBhbmdsZTtcXG4gICAgICAgZmxvYXQgcyA9IHNpbihhbmdsZU1vZCk7XFxuICAgICAgIGZsb2F0IGMgPSBjb3MoYW5nbGVNb2QpO1xcbiAgICAgICBjb29yZCA9IHZlYzIoY29vcmQueCAqIGMgLSBjb29yZC55ICogcywgY29vcmQueCAqIHMgKyBjb29yZC55ICogYyk7XFxuICAgfVxcblxcbiAgIGdsX0ZyYWdDb2xvciA9IHRleHR1cmUyRCh1U2FtcGxlciwgY29vcmQrb2Zmc2V0KTtcXG59XFxuXCIsXG4gICAgICAgIC8vIGN1c3RvbSB1bmlmb3Jtc1xuICAgICAgICB7XG4gICAgICAgICAgICByYWRpdXM6ICAgICB7IHR5cGU6ICcxZicsIHZhbHVlOiAwLjUgfSxcbiAgICAgICAgICAgIGFuZ2xlOiAgICAgIHsgdHlwZTogJzFmJywgdmFsdWU6IDUgfSxcbiAgICAgICAgICAgIG9mZnNldDogICAgIHsgdHlwZTogJ3YyJywgdmFsdWU6IHsgeDogMC41LCB5OiAwLjUgfSB9XG4gICAgICAgIH1cbiAgICApO1xufVxuXG5Ud2lzdEZpbHRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuQWJzdHJhY3RGaWx0ZXIucHJvdG90eXBlKTtcblR3aXN0RmlsdGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFR3aXN0RmlsdGVyO1xubW9kdWxlLmV4cG9ydHMgPSBUd2lzdEZpbHRlcjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoVHdpc3RGaWx0ZXIucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogVGhpcyBwb2ludCBkZXNjcmliZXMgdGhlIHRoZSBvZmZzZXQgb2YgdGhlIHR3aXN0LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5Qb2ludH1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLlR3aXN0RmlsdGVyI1xuICAgICAqL1xuICAgIG9mZnNldDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVuaWZvcm1zLm9mZnNldC52YWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudW5pZm9ybXMub2Zmc2V0LnZhbHVlID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVGhpcyByYWRpdXMgb2YgdGhlIHR3aXN0LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuVHdpc3RGaWx0ZXIjXG4gICAgICovXG4gICAgcmFkaXVzOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudW5pZm9ybXMucmFkaXVzLnZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy5yYWRpdXMudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBUaGlzIGFuZ2xlIG9mIHRoZSB0d2lzdC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLlR3aXN0RmlsdGVyI1xuICAgICAqL1xuICAgIGFuZ2xlOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudW5pZm9ybXMuYW5nbGUudmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLmFuZ2xlLnZhbHVlID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG59KTtcbiIsIi8vIHJ1biB0aGUgcG9seWZpbGxzXG5yZXF1aXJlKCcuL3BvbHlmaWxsJyk7XG5cbnZhciBjb3JlID0gbW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL2NvcmUnKTtcblxuLy8gYWRkIGNvcmUgcGx1Z2lucy5cbmNvcmUuZXh0cmFzICAgICAgICAgPSByZXF1aXJlKCcuL2V4dHJhcycpO1xuY29yZS5maWx0ZXJzICAgICAgICA9IHJlcXVpcmUoJy4vZmlsdGVycycpO1xuY29yZS5pbnRlcmFjdGlvbiAgICA9IHJlcXVpcmUoJy4vaW50ZXJhY3Rpb24nKTtcbmNvcmUubG9hZGVycyAgICAgICAgPSByZXF1aXJlKCcuL2xvYWRlcnMnKTtcbmNvcmUubWVzaCAgICAgICAgICAgPSByZXF1aXJlKCcuL21lc2gnKTtcbmNvcmUuYWNjZXNzaWJpbGl0eSAgPSByZXF1aXJlKCcuL2FjY2Vzc2liaWxpdHknKTtcblxuLy8gZXhwb3J0IGEgcHJlbWFkZSBsb2FkZXIgaW5zdGFuY2Vcbi8qKlxuICogQSBwcmVtYWRlIGluc3RhbmNlIG9mIHRoZSBsb2FkZXIgdGhhdCBjYW4gYmUgdXNlZCB0byBsb2FkZXIgcmVzb3VyY2VzLlxuICpcbiAqIEBuYW1lIGxvYWRlclxuICogQG1lbWJlcm9mIFBJWElcbiAqIEBwcm9wZXJ0eSB7UElYSS5sb2FkZXJzLkxvYWRlcn1cbiAqL1xuY29yZS5sb2FkZXIgPSBuZXcgY29yZS5sb2FkZXJzLkxvYWRlcigpO1xuXG4vLyBtaXhpbiB0aGUgZGVwcmVjYXRpb24gZmVhdHVyZXMuXG5PYmplY3QuYXNzaWduKGNvcmUsIHJlcXVpcmUoJy4vZGVwcmVjYXRpb24nKSk7XG5cbi8vIEFsd2F5cyBleHBvcnQgcGl4aSBnbG9iYWxseS5cbmdsb2JhbC5QSVhJID0gY29yZTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vY29yZScpO1xuXG4vKipcbiAqIEhvbGRzIGFsbCBpbmZvcm1hdGlvbiByZWxhdGVkIHRvIGFuIEludGVyYWN0aW9uIGV2ZW50XG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSS5pbnRlcmFjdGlvblxuICovXG5mdW5jdGlvbiBJbnRlcmFjdGlvbkRhdGEoKVxue1xuICAgIC8qKlxuICAgICAqIFRoaXMgcG9pbnQgc3RvcmVzIHRoZSBnbG9iYWwgY29vcmRzIG9mIHdoZXJlIHRoZSB0b3VjaC9tb3VzZSBldmVudCBoYXBwZW5lZFxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5Qb2ludH1cbiAgICAgKi9cbiAgICB0aGlzLmdsb2JhbCA9IG5ldyBjb3JlLlBvaW50KCk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgdGFyZ2V0IFNwcml0ZSB0aGF0IHdhcyBpbnRlcmFjdGVkIHdpdGhcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuU3ByaXRlfVxuICAgICAqL1xuICAgIHRoaXMudGFyZ2V0ID0gbnVsbDtcblxuICAgIC8qKlxuICAgICAqIFdoZW4gcGFzc2VkIHRvIGFuIGV2ZW50IGhhbmRsZXIsIHRoaXMgd2lsbCBiZSB0aGUgb3JpZ2luYWwgRE9NIEV2ZW50IHRoYXQgd2FzIGNhcHR1cmVkXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtFdmVudH1cbiAgICAgKi9cbiAgICB0aGlzLm9yaWdpbmFsRXZlbnQgPSBudWxsO1xufVxuXG5JbnRlcmFjdGlvbkRhdGEucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gSW50ZXJhY3Rpb25EYXRhO1xubW9kdWxlLmV4cG9ydHMgPSBJbnRlcmFjdGlvbkRhdGE7XG5cbi8qKlxuICogVGhpcyB3aWxsIHJldHVybiB0aGUgbG9jYWwgY29vcmRpbmF0ZXMgb2YgdGhlIHNwZWNpZmllZCBkaXNwbGF5T2JqZWN0IGZvciB0aGlzIEludGVyYWN0aW9uRGF0YVxuICpcbiAqIEBwYXJhbSBkaXNwbGF5T2JqZWN0IHtQSVhJLkRpc3BsYXlPYmplY3R9IFRoZSBEaXNwbGF5T2JqZWN0IHRoYXQgeW91IHdvdWxkIGxpa2UgdGhlIGxvY2FsIGNvb3JkcyBvZmZcbiAqIEBwYXJhbSBbcG9pbnRdIHtQSVhJLlBvaW50fSBBIFBvaW50IG9iamVjdCBpbiB3aGljaCB0byBzdG9yZSB0aGUgdmFsdWUsIG9wdGlvbmFsIChvdGhlcndpc2Ugd2lsbCBjcmVhdGUgYSBuZXcgcG9pbnQpXG4gKiBAcGFyYW0gW2dsb2JhbFBvc10ge1BJWEkuUG9pbnR9IEEgUG9pbnQgb2JqZWN0IGNvbnRhaW5pbmcgeW91ciBjdXN0b20gZ2xvYmFsIGNvb3Jkcywgb3B0aW9uYWwgKG90aGVyd2lzZSB3aWxsIHVzZSB0aGUgY3VycmVudCBnbG9iYWwgY29vcmRzKVxuICogQHJldHVybiB7UElYSS5Qb2ludH0gQSBwb2ludCBjb250YWluaW5nIHRoZSBjb29yZGluYXRlcyBvZiB0aGUgSW50ZXJhY3Rpb25EYXRhIHBvc2l0aW9uIHJlbGF0aXZlIHRvIHRoZSBEaXNwbGF5T2JqZWN0XG4gKi9cbkludGVyYWN0aW9uRGF0YS5wcm90b3R5cGUuZ2V0TG9jYWxQb3NpdGlvbiA9IGZ1bmN0aW9uIChkaXNwbGF5T2JqZWN0LCBwb2ludCwgZ2xvYmFsUG9zKVxue1xuICAgIHJldHVybiBkaXNwbGF5T2JqZWN0LndvcmxkVHJhbnNmb3JtLmFwcGx5SW52ZXJzZShnbG9iYWxQb3MgfHwgdGhpcy5nbG9iYWwsIHBvaW50KTtcbn07XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uL2NvcmUnKSxcbiAgICBJbnRlcmFjdGlvbkRhdGEgPSByZXF1aXJlKCcuL0ludGVyYWN0aW9uRGF0YScpO1xuXG4vLyBNaXggaW50ZXJhY3RpdmVUYXJnZXQgaW50byBjb3JlLkRpc3BsYXlPYmplY3QucHJvdG90eXBlXG5PYmplY3QuYXNzaWduKFxuICAgIGNvcmUuRGlzcGxheU9iamVjdC5wcm90b3R5cGUsXG4gICAgcmVxdWlyZSgnLi9pbnRlcmFjdGl2ZVRhcmdldCcpXG4pO1xuXG4vKipcbiAqIFRoZSBpbnRlcmFjdGlvbiBtYW5hZ2VyIGRlYWxzIHdpdGggbW91c2UgYW5kIHRvdWNoIGV2ZW50cy4gQW55IERpc3BsYXlPYmplY3QgY2FuIGJlIGludGVyYWN0aXZlXG4gKiBpZiBpdHMgaW50ZXJhY3RpdmUgcGFyYW1ldGVyIGlzIHNldCB0byB0cnVlXG4gKiBUaGlzIG1hbmFnZXIgYWxzbyBzdXBwb3J0cyBtdWx0aXRvdWNoLlxuICpcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWEkuaW50ZXJhY3Rpb25cbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5DYW52YXNSZW5kZXJlcnxQSVhJLldlYkdMUmVuZGVyZXJ9IEEgcmVmZXJlbmNlIHRvIHRoZSBjdXJyZW50IHJlbmRlcmVyXG4gKiBAcGFyYW0gW29wdGlvbnNdIHtvYmplY3R9XG4gKiBAcGFyYW0gW29wdGlvbnMuYXV0b1ByZXZlbnREZWZhdWx0PXRydWVdIHtib29sZWFufSBTaG91bGQgdGhlIG1hbmFnZXIgYXV0b21hdGljYWxseSBwcmV2ZW50IGRlZmF1bHQgYnJvd3NlciBhY3Rpb25zLlxuICogQHBhcmFtIFtvcHRpb25zLmludGVyYWN0aW9uRnJlcXVlbmN5PTEwXSB7bnVtYmVyfSBGcmVxdWVuY3kgaW5jcmVhc2VzIHRoZSBpbnRlcmFjdGlvbiBldmVudHMgd2lsbCBiZSBjaGVja2VkLlxuICovXG5mdW5jdGlvbiBJbnRlcmFjdGlvbk1hbmFnZXIocmVuZGVyZXIsIG9wdGlvbnMpXG57XG4gICAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG5cbiAgICAvKipcbiAgICAgKiBUaGUgcmVuZGVyZXIgdGhpcyBpbnRlcmFjdGlvbiBtYW5hZ2VyIHdvcmtzIGZvci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuU3lzdGVtUmVuZGVyZXJ9XG4gICAgICovXG4gICAgdGhpcy5yZW5kZXJlciA9IHJlbmRlcmVyO1xuXG4gICAgLyoqXG4gICAgICogU2hvdWxkIGRlZmF1bHQgYnJvd3NlciBhY3Rpb25zIGF1dG9tYXRpY2FsbHkgYmUgcHJldmVudGVkLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKiBAZGVmYXVsdCB0cnVlXG4gICAgICovXG4gICAgdGhpcy5hdXRvUHJldmVudERlZmF1bHQgPSBvcHRpb25zLmF1dG9QcmV2ZW50RGVmYXVsdCAhPT0gdW5kZWZpbmVkID8gb3B0aW9ucy5hdXRvUHJldmVudERlZmF1bHQgOiB0cnVlO1xuXG4gICAgLyoqXG4gICAgICogQXMgdGhpcyBmcmVxdWVuY3kgaW5jcmVhc2VzIHRoZSBpbnRlcmFjdGlvbiBldmVudHMgd2lsbCBiZSBjaGVja2VkIG1vcmUgb2Z0ZW4uXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMTBcbiAgICAgKi9cbiAgICB0aGlzLmludGVyYWN0aW9uRnJlcXVlbmN5ID0gb3B0aW9ucy5pbnRlcmFjdGlvbkZyZXF1ZW5jeSB8fCAxMDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBtb3VzZSBkYXRhXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLmludGVyYWN0aW9uLkludGVyYWN0aW9uRGF0YX1cbiAgICAgKi9cbiAgICB0aGlzLm1vdXNlID0gbmV3IEludGVyYWN0aW9uRGF0YSgpO1xuXG4gICAgLyoqXG4gICAgICogQW4gZXZlbnQgZGF0YSBvYmplY3QgdG8gaGFuZGxlIGFsbCB0aGUgZXZlbnQgdHJhY2tpbmcvZGlzcGF0Y2hpbmdcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge29iamVjdH1cbiAgICAgKi9cbiAgICB0aGlzLmV2ZW50RGF0YSA9IHtcbiAgICAgICAgc3RvcHBlZDogZmFsc2UsXG4gICAgICAgIHRhcmdldDogbnVsbCxcbiAgICAgICAgdHlwZTogbnVsbCxcbiAgICAgICAgZGF0YTogdGhpcy5tb3VzZSxcbiAgICAgICAgc3RvcFByb3BhZ2F0aW9uOmZ1bmN0aW9uKCl7XG4gICAgICAgICAgICB0aGlzLnN0b3BwZWQgPSB0cnVlO1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIC8qKlxuICAgICAqIFRpbnkgbGl0dGxlIGludGVyYWN0aXZlRGF0YSBwb29sICFcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuaW50ZXJhY3Rpb24uSW50ZXJhY3Rpb25EYXRhW119XG4gICAgICovXG4gICAgdGhpcy5pbnRlcmFjdGl2ZURhdGFQb29sID0gW107XG5cbiAgICAvKipcbiAgICAgKiBUaGUgRE9NIGVsZW1lbnQgdG8gYmluZCB0by5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge0hUTUxFbGVtZW50fVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5pbnRlcmFjdGlvbkRPTUVsZW1lbnQgPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogSGF2ZSBldmVudHMgYmVlbiBhdHRhY2hlZCB0byB0aGUgZG9tIGVsZW1lbnQ/XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5ldmVudHNBZGRlZCA9IGZhbHNlO1xuXG4gICAgLy90aGlzIHdpbGwgbWFrZSBpdCBzbyB0aGF0IHlvdSBkb24ndCBoYXZlIHRvIGNhbGwgYmluZCBhbGwgdGhlIHRpbWVcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge0Z1bmN0aW9ufVxuICAgICAqL1xuICAgIHRoaXMub25Nb3VzZVVwID0gdGhpcy5vbk1vdXNlVXAuYmluZCh0aGlzKTtcbiAgICB0aGlzLnByb2Nlc3NNb3VzZVVwID0gdGhpcy5wcm9jZXNzTW91c2VVcC5iaW5kKCB0aGlzICk7XG5cblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge0Z1bmN0aW9ufVxuICAgICAqL1xuICAgIHRoaXMub25Nb3VzZURvd24gPSB0aGlzLm9uTW91c2VEb3duLmJpbmQodGhpcyk7XG4gICAgdGhpcy5wcm9jZXNzTW91c2VEb3duID0gdGhpcy5wcm9jZXNzTW91c2VEb3duLmJpbmQoIHRoaXMgKTtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge0Z1bmN0aW9ufVxuICAgICAqL1xuICAgIHRoaXMub25Nb3VzZU1vdmUgPSB0aGlzLm9uTW91c2VNb3ZlLmJpbmQoIHRoaXMgKTtcbiAgICB0aGlzLnByb2Nlc3NNb3VzZU1vdmUgPSB0aGlzLnByb2Nlc3NNb3VzZU1vdmUuYmluZCggdGhpcyApO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7RnVuY3Rpb259XG4gICAgICovXG4gICAgdGhpcy5vbk1vdXNlT3V0ID0gdGhpcy5vbk1vdXNlT3V0LmJpbmQodGhpcyk7XG4gICAgdGhpcy5wcm9jZXNzTW91c2VPdmVyT3V0ID0gdGhpcy5wcm9jZXNzTW91c2VPdmVyT3V0LmJpbmQoIHRoaXMgKTtcblxuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7RnVuY3Rpb259XG4gICAgICovXG4gICAgdGhpcy5vblRvdWNoU3RhcnQgPSB0aGlzLm9uVG91Y2hTdGFydC5iaW5kKHRoaXMpO1xuICAgIHRoaXMucHJvY2Vzc1RvdWNoU3RhcnQgPSB0aGlzLnByb2Nlc3NUb3VjaFN0YXJ0LmJpbmQodGhpcyk7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtGdW5jdGlvbn1cbiAgICAgKi9cbiAgICB0aGlzLm9uVG91Y2hFbmQgPSB0aGlzLm9uVG91Y2hFbmQuYmluZCh0aGlzKTtcbiAgICB0aGlzLnByb2Nlc3NUb3VjaEVuZCA9IHRoaXMucHJvY2Vzc1RvdWNoRW5kLmJpbmQodGhpcyk7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtGdW5jdGlvbn1cbiAgICAgKi9cbiAgICB0aGlzLm9uVG91Y2hNb3ZlID0gdGhpcy5vblRvdWNoTW92ZS5iaW5kKHRoaXMpO1xuICAgIHRoaXMucHJvY2Vzc1RvdWNoTW92ZSA9IHRoaXMucHJvY2Vzc1RvdWNoTW92ZS5iaW5kKHRoaXMpO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMubGFzdCA9IDA7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgY3NzIHN0eWxlIG9mIHRoZSBjdXJzb3IgdGhhdCBpcyBiZWluZyB1c2VkXG4gICAgICogQG1lbWJlciB7c3RyaW5nfVxuICAgICAqL1xuICAgIHRoaXMuY3VycmVudEN1cnNvclN0eWxlID0gJ2luaGVyaXQnO1xuXG4gICAgLyoqXG4gICAgICogSW50ZXJuYWwgY2FjaGVkIHZhclxuICAgICAqIEBtZW1iZXIge1BJWEkuUG9pbnR9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl90ZW1wUG9pbnQgPSBuZXcgY29yZS5Qb2ludCgpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGN1cnJlbnQgcmVzb2x1dGlvblxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLnJlc29sdXRpb24gPSAxO1xuXG4gICAgdGhpcy5zZXRUYXJnZXRFbGVtZW50KHRoaXMucmVuZGVyZXIudmlldywgdGhpcy5yZW5kZXJlci5yZXNvbHV0aW9uKTtcbn1cblxuSW50ZXJhY3Rpb25NYW5hZ2VyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IEludGVyYWN0aW9uTWFuYWdlcjtcbm1vZHVsZS5leHBvcnRzID0gSW50ZXJhY3Rpb25NYW5hZ2VyO1xuXG4vKipcbiAqIFNldHMgdGhlIERPTSBlbGVtZW50IHdoaWNoIHdpbGwgcmVjZWl2ZSBtb3VzZS90b3VjaCBldmVudHMuIFRoaXMgaXMgdXNlZnVsIGZvciB3aGVuIHlvdSBoYXZlXG4gKiBvdGhlciBET00gZWxlbWVudHMgb24gdG9wIG9mIHRoZSByZW5kZXJlcnMgQ2FudmFzIGVsZW1lbnQuIFdpdGggdGhpcyB5b3UnbGwgYmUgYmFsZSB0byBkZWxldGVnYXRlXG4gKiBhbm90aGVyIERPTSBlbGVtZW50IHRvIHJlY2VpdmUgdGhvc2UgZXZlbnRzLlxuICpcbiAqIEBwYXJhbSBlbGVtZW50IHtIVE1MRWxlbWVudH0gdGhlIERPTSBlbGVtZW50IHdoaWNoIHdpbGwgcmVjZWl2ZSBtb3VzZSBhbmQgdG91Y2ggZXZlbnRzLlxuICogQHBhcmFtIFtyZXNvbHV0aW9uPTFdIHtudW1iZXJ9IFRIZSByZXNvbHV0aW9uIG9mIHRoZSBuZXcgZWxlbWVudCAocmVsYXRpdmUgdG8gdGhlIGNhbnZhcykuXG4gKiBAcHJpdmF0ZVxuICovXG5JbnRlcmFjdGlvbk1hbmFnZXIucHJvdG90eXBlLnNldFRhcmdldEVsZW1lbnQgPSBmdW5jdGlvbiAoZWxlbWVudCwgcmVzb2x1dGlvbilcbntcbiAgICB0aGlzLnJlbW92ZUV2ZW50cygpO1xuXG4gICAgdGhpcy5pbnRlcmFjdGlvbkRPTUVsZW1lbnQgPSBlbGVtZW50O1xuXG4gICAgdGhpcy5yZXNvbHV0aW9uID0gcmVzb2x1dGlvbiB8fCAxO1xuXG4gICAgdGhpcy5hZGRFdmVudHMoKTtcbn07XG5cbi8qKlxuICogUmVnaXN0ZXJzIGFsbCB0aGUgRE9NIGV2ZW50c1xuICpcbiAqIEBwcml2YXRlXG4gKi9cbkludGVyYWN0aW9uTWFuYWdlci5wcm90b3R5cGUuYWRkRXZlbnRzID0gZnVuY3Rpb24gKClcbntcbiAgICBpZiAoIXRoaXMuaW50ZXJhY3Rpb25ET01FbGVtZW50KVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvcmUudGlja2VyLnNoYXJlZC5hZGQodGhpcy51cGRhdGUsIHRoaXMpO1xuXG4gICAgaWYgKHdpbmRvdy5uYXZpZ2F0b3IubXNQb2ludGVyRW5hYmxlZClcbiAgICB7XG4gICAgICAgIHRoaXMuaW50ZXJhY3Rpb25ET01FbGVtZW50LnN0eWxlWyctbXMtY29udGVudC16b29taW5nJ10gPSAnbm9uZSc7XG4gICAgICAgIHRoaXMuaW50ZXJhY3Rpb25ET01FbGVtZW50LnN0eWxlWyctbXMtdG91Y2gtYWN0aW9uJ10gPSAnbm9uZSc7XG4gICAgfVxuXG4gICAgd2luZG93LmRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlbW92ZScsICAgIHRoaXMub25Nb3VzZU1vdmUsIHRydWUpO1xuICAgIHRoaXMuaW50ZXJhY3Rpb25ET01FbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlZG93bicsICAgIHRoaXMub25Nb3VzZURvd24sIHRydWUpO1xuICAgIHRoaXMuaW50ZXJhY3Rpb25ET01FbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlb3V0JywgICAgIHRoaXMub25Nb3VzZU91dCwgdHJ1ZSk7XG5cbiAgICB0aGlzLmludGVyYWN0aW9uRE9NRWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCd0b3VjaHN0YXJ0JywgICB0aGlzLm9uVG91Y2hTdGFydCwgdHJ1ZSk7XG4gICAgdGhpcy5pbnRlcmFjdGlvbkRPTUVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigndG91Y2hlbmQnLCAgICAgdGhpcy5vblRvdWNoRW5kLCB0cnVlKTtcbiAgICB0aGlzLmludGVyYWN0aW9uRE9NRWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCd0b3VjaG1vdmUnLCAgICB0aGlzLm9uVG91Y2hNb3ZlLCB0cnVlKTtcblxuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdtb3VzZXVwJywgIHRoaXMub25Nb3VzZVVwLCB0cnVlKTtcblxuICAgIHRoaXMuZXZlbnRzQWRkZWQgPSB0cnVlO1xufTtcblxuLyoqXG4gKiBSZW1vdmVzIGFsbCB0aGUgRE9NIGV2ZW50cyB0aGF0IHdlcmUgcHJldmlvdXNseSByZWdpc3RlcmVkXG4gKlxuICogQHByaXZhdGVcbiAqL1xuSW50ZXJhY3Rpb25NYW5hZ2VyLnByb3RvdHlwZS5yZW1vdmVFdmVudHMgPSBmdW5jdGlvbiAoKVxue1xuICAgIGlmICghdGhpcy5pbnRlcmFjdGlvbkRPTUVsZW1lbnQpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29yZS50aWNrZXIuc2hhcmVkLnJlbW92ZSh0aGlzLnVwZGF0ZSk7XG5cbiAgICBpZiAod2luZG93Lm5hdmlnYXRvci5tc1BvaW50ZXJFbmFibGVkKVxuICAgIHtcbiAgICAgICAgdGhpcy5pbnRlcmFjdGlvbkRPTUVsZW1lbnQuc3R5bGVbJy1tcy1jb250ZW50LXpvb21pbmcnXSA9ICcnO1xuICAgICAgICB0aGlzLmludGVyYWN0aW9uRE9NRWxlbWVudC5zdHlsZVsnLW1zLXRvdWNoLWFjdGlvbiddID0gJyc7XG4gICAgfVxuXG4gICAgd2luZG93LmRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21vdXNlbW92ZScsIHRoaXMub25Nb3VzZU1vdmUsIHRydWUpO1xuICAgIHRoaXMuaW50ZXJhY3Rpb25ET01FbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21vdXNlZG93bicsIHRoaXMub25Nb3VzZURvd24sIHRydWUpO1xuICAgIHRoaXMuaW50ZXJhY3Rpb25ET01FbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21vdXNlb3V0JywgIHRoaXMub25Nb3VzZU91dCwgdHJ1ZSk7XG5cbiAgICB0aGlzLmludGVyYWN0aW9uRE9NRWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCd0b3VjaHN0YXJ0JywgdGhpcy5vblRvdWNoU3RhcnQsIHRydWUpO1xuICAgIHRoaXMuaW50ZXJhY3Rpb25ET01FbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3RvdWNoZW5kJywgIHRoaXMub25Ub3VjaEVuZCwgdHJ1ZSk7XG4gICAgdGhpcy5pbnRlcmFjdGlvbkRPTUVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigndG91Y2htb3ZlJywgdGhpcy5vblRvdWNoTW92ZSwgdHJ1ZSk7XG5cbiAgICB0aGlzLmludGVyYWN0aW9uRE9NRWxlbWVudCA9IG51bGw7XG5cbiAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcignbW91c2V1cCcsICB0aGlzLm9uTW91c2VVcCwgdHJ1ZSk7XG5cbiAgICB0aGlzLmV2ZW50c0FkZGVkID0gZmFsc2U7XG59O1xuXG4vKipcbiAqIFVwZGF0ZXMgdGhlIHN0YXRlIG9mIGludGVyYWN0aXZlIG9iamVjdHMuXG4gKiBJbnZva2VkIGJ5IGEgdGhyb3R0bGVkIHRpY2tlciB1cGRhdGUgZnJvbVxuICoge0BsaW5rIFBJWEkudGlja2VyLnNoYXJlZH0uXG4gKlxuICogQHBhcmFtIGRlbHRhVGltZSB7bnVtYmVyfVxuICovXG5JbnRlcmFjdGlvbk1hbmFnZXIucHJvdG90eXBlLnVwZGF0ZSA9IGZ1bmN0aW9uIChkZWx0YVRpbWUpXG57XG4gICAgdGhpcy5fZGVsdGFUaW1lICs9IGRlbHRhVGltZTtcblxuICAgIGlmICh0aGlzLl9kZWx0YVRpbWUgPCB0aGlzLmludGVyYWN0aW9uRnJlcXVlbmN5KVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuX2RlbHRhVGltZSA9IDA7XG5cbiAgICBpZiAoIXRoaXMuaW50ZXJhY3Rpb25ET01FbGVtZW50KVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIGlmIHRoZSB1c2VyIG1vdmUgdGhlIG1vdXNlIHRoaXMgY2hlY2sgaGFzIGFscmVhZHkgYmVlbiBkZm9uZSB1c2luZyB0aGUgbW91c2UgbW92ZSFcbiAgICBpZih0aGlzLmRpZE1vdmUpXG4gICAge1xuICAgICAgICB0aGlzLmRpZE1vdmUgPSBmYWxzZTtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuY3Vyc29yID0gJ2luaGVyaXQnO1xuXG4gICAgdGhpcy5wcm9jZXNzSW50ZXJhY3RpdmUodGhpcy5tb3VzZS5nbG9iYWwsIHRoaXMucmVuZGVyZXIuX2xhc3RPYmplY3RSZW5kZXJlZCwgdGhpcy5wcm9jZXNzTW91c2VPdmVyT3V0LCB0cnVlICk7XG5cbiAgICBpZiAodGhpcy5jdXJyZW50Q3Vyc29yU3R5bGUgIT09IHRoaXMuY3Vyc29yKVxuICAgIHtcbiAgICAgICAgdGhpcy5jdXJyZW50Q3Vyc29yU3R5bGUgPSB0aGlzLmN1cnNvcjtcbiAgICAgICAgdGhpcy5pbnRlcmFjdGlvbkRPTUVsZW1lbnQuc3R5bGUuY3Vyc29yID0gdGhpcy5jdXJzb3I7XG4gICAgfVxuXG4gICAgLy9UT0RPXG59O1xuXG4vKipcbiAqIERpc3BhdGNoZXMgYW4gZXZlbnQgb24gdGhlIGRpc3BsYXkgb2JqZWN0IHRoYXQgd2FzIGludGVyYWN0ZWQgd2l0aFxuICpcbiAqIEBwYXJhbSBkaXNwbGF5T2JqZWN0IHtQSVhJLkNvbnRhaW5lcnxQSVhJLlNwcml0ZXxQSVhJLmV4dHJhcy5UaWxpbmdTcHJpdGV9IHRoZSBkaXNwbGF5IG9iamVjdCBpbiBxdWVzdGlvblxuICogQHBhcmFtIGV2ZW50U3RyaW5nIHtzdHJpbmd9IHRoZSBuYW1lIG9mIHRoZSBldmVudCAoZS5nLCBtb3VzZWRvd24pXG4gKiBAcGFyYW0gZXZlbnREYXRhIHtvYmplY3R9IHRoZSBldmVudCBkYXRhIG9iamVjdFxuICogQHByaXZhdGVcbiAqL1xuSW50ZXJhY3Rpb25NYW5hZ2VyLnByb3RvdHlwZS5kaXNwYXRjaEV2ZW50ID0gZnVuY3Rpb24gKCBkaXNwbGF5T2JqZWN0LCBldmVudFN0cmluZywgZXZlbnREYXRhIClcbntcbiAgICBpZighZXZlbnREYXRhLnN0b3BwZWQpXG4gICAge1xuICAgICAgICBldmVudERhdGEudGFyZ2V0ID0gZGlzcGxheU9iamVjdDtcbiAgICAgICAgZXZlbnREYXRhLnR5cGUgPSBldmVudFN0cmluZztcblxuICAgICAgICBkaXNwbGF5T2JqZWN0LmVtaXQoIGV2ZW50U3RyaW5nLCBldmVudERhdGEgKTtcblxuICAgICAgICBpZiggZGlzcGxheU9iamVjdFtldmVudFN0cmluZ10gKVxuICAgICAgICB7XG4gICAgICAgICAgICBkaXNwbGF5T2JqZWN0W2V2ZW50U3RyaW5nXSggZXZlbnREYXRhICk7XG4gICAgICAgIH1cbiAgICB9XG59O1xuXG4vKipcbiAqIE1hcHMgeCBhbmQgeSBjb29yZHMgZnJvbSBhIERPTSBvYmplY3QgYW5kIG1hcHMgdGhlbSBjb3JyZWN0bHkgdG8gdGhlIHBpeGkgdmlldy4gVGhlIHJlc3VsdGluZyB2YWx1ZSBpcyBzdG9yZWQgaW4gdGhlIHBvaW50LlxuICogVGhpcyB0YWtlcyBpbnRvIGFjY291bnQgdGhlIGZhY3QgdGhhdCB0aGUgRE9NIGVsZW1lbnQgY291bGQgYmUgc2NhbGVkIGFuZCBwb3NpdGlvbmVkIGFueXdoZXJlIG9uIHRoZSBzY3JlZW4uXG4gKlxuICogQHBhcmFtICB7UElYSS5Qb2ludH0gcG9pbnQgdGhlIHBvaW50IHRoYXQgdGhlIHJlc3VsdCB3aWxsIGJlIHN0b3JlZCBpblxuICogQHBhcmFtICB7bnVtYmVyfSB4ICAgICB0aGUgeCBjb29yZCBvZiB0aGUgcG9zaXRpb24gdG8gbWFwXG4gKiBAcGFyYW0gIHtudW1iZXJ9IHkgICAgIHRoZSB5IGNvb3JkIG9mIHRoZSBwb3NpdGlvbiB0byBtYXBcbiAqL1xuSW50ZXJhY3Rpb25NYW5hZ2VyLnByb3RvdHlwZS5tYXBQb3NpdGlvblRvUG9pbnQgPSBmdW5jdGlvbiAoIHBvaW50LCB4LCB5IClcbntcbiAgICB2YXIgcmVjdCA9IHRoaXMuaW50ZXJhY3Rpb25ET01FbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgIHBvaW50LnggPSAoICggeCAtIHJlY3QubGVmdCApICogKHRoaXMuaW50ZXJhY3Rpb25ET01FbGVtZW50LndpZHRoICAvIHJlY3Qud2lkdGggICkgKSAvIHRoaXMucmVzb2x1dGlvbjtcbiAgICBwb2ludC55ID0gKCAoIHkgLSByZWN0LnRvcCAgKSAqICh0aGlzLmludGVyYWN0aW9uRE9NRWxlbWVudC5oZWlnaHQgLyByZWN0LmhlaWdodCApICkgLyB0aGlzLnJlc29sdXRpb247XG59O1xuXG4vKipcbiAqIFRoaXMgZnVuY3Rpb24gaXMgcHJvdmlkZXMgYSBuZWF0IHdheSBvZiBjcmF3bGluZyB0aHJvdWdoIHRoZSBzY2VuZSBncmFwaCBhbmQgcnVubmluZyBhIHNwZWNpZmllZCBmdW5jdGlvbiBvbiBhbGwgaW50ZXJhY3RpdmUgb2JqZWN0cyBpdCBmaW5kcy5cbiAqIEl0IHdpbGwgYWxzbyB0YWtlIGNhcmUgb2YgaGl0IHRlc3RpbmcgdGhlIGludGVyYWN0aXZlIG9iamVjdHMgYW5kIHBhc3NlcyB0aGUgaGl0IGFjcm9zcyBpbiB0aGUgZnVuY3Rpb24uXG4gKlxuICogQHBhcmFtICB7UElYSS5Qb2ludH0gcG9pbnQgdGhlIHBvaW50IHRoYXQgaXMgdGVzdGVkIGZvciBjb2xsaXNpb25cbiAqIEBwYXJhbSAge1BJWEkuQ29udGFpbmVyfFBJWEkuU3ByaXRlfFBJWEkuZXh0cmFzLlRpbGluZ1Nwcml0ZX0gZGlzcGxheU9iamVjdCB0aGUgZGlzcGxheU9iamVjdCB0aGF0IHdpbGwgYmUgaGl0IHRlc3QgKHJlY3VyY3Npdmx5IGNyYXdscyBpdHMgY2hpbGRyZW4pXG4gKiBAcGFyYW0gIHtGdW5jdGlvbn0gZnVuYyB0aGUgZnVuY3Rpb24gdGhhdCB3aWxsIGJlIGNhbGxlZCBvbiBlYWNoIGludGVyYWN0aXZlIG9iamVjdC4gVGhlIGRpc3BsYXlPYmplY3QgYW5kIGhpdCB3aWxsIGJlIHBhc3NlZCB0byB0aGUgZnVuY3Rpb25cbiAqIEBwYXJhbSAge2Jvb2xlYW59IGhpdFRlc3QgdGhpcyBpbmRpY2F0ZXMgaWYgdGhlIG9iamVjdHMgaW5zaWRlIHNob3VsZCBiZSBoaXQgdGVzdCBhZ2FpbnN0IHRoZSBwb2ludFxuICogQHJldHVybiB7Ym9vbGVhbn0gcmV0dXJucyB0cnVlIGlmIHRoZSBkaXNwbGF5T2JqZWN0IGhpdCB0aGUgcG9pbnRcbiAqL1xuSW50ZXJhY3Rpb25NYW5hZ2VyLnByb3RvdHlwZS5wcm9jZXNzSW50ZXJhY3RpdmUgPSBmdW5jdGlvbiAocG9pbnQsIGRpc3BsYXlPYmplY3QsIGZ1bmMsIGhpdFRlc3QsIGludGVyYWN0aXZlKVxue1xuICAgIGlmKCFkaXNwbGF5T2JqZWN0IHx8ICFkaXNwbGF5T2JqZWN0LnZpc2libGUpXG4gICAge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgLy8gVG9vayBhIGxpdHRsZSB3aGlsZSB0byByZXdvcmsgdGhpcyBmdW5jdGlvbiBjb3JyZWN0bHkhIEJ1dCBub3cgaXQgaXMgZG9uZSBhbmQgbmljZSBhbmQgb3B0aW1pc2VkLiBeX15cbiAgICAvLyBcbiAgICAvLyBUaGlzIGZ1bmN0aW9uIHdpbGwgbm93IGxvb3AgdGhyb3VnaCBhbGwgb2JqZWN0cyBhbmQgdGhlbiBvbmx5IGhpdCB0ZXN0IHRoZSBvYmplY3RzIGl0IEhBUyB0bywgbm90IGFsbCBvZiB0aGVtLiBNVUNIIGZhc3Rlci4uXG4gICAgLy8gQW4gb2JqZWN0IHdpbGwgYmUgaGl0IHRlc3QgaWYgdGhlIGZvbGxvd2luZyBpcyB0cnVlOlxuICAgIC8vIFxuICAgIC8vIDE6IEl0IGlzIGludGVyYWN0aXZlLlxuICAgIC8vIDI6IEl0IGJlbG9uZ3MgdG8gYSBwYXJlbnQgdGhhdCBpcyBpbnRlcmFjdGl2ZSBBTkQgb25lIG9mIHRoZSBwYXJlbnRzIGNoaWxkcmVuIGhhdmUgbm90IGFscmVhZHkgYmVlbiBoaXQuXG4gICAgLy8gXG4gICAgLy8gQXMgYW5vdGhlciBsaXR0bGUgb3B0aW1pc2F0aW9uIG9uY2UgYW4gaW50ZXJhY3RpdmUgb2JqZWN0IGhhcyBiZWVuIGhpdCB3ZSBjYW4gY2Fycnkgb24gdGhyb3VnaCB0aGUgc2NlbmVncmFwaCwgYnV0IHdlIGtub3cgdGhhdCB0aGVyZSB3aWxsIGJlIG5vIG1vcmUgaGl0cyEgU28gd2UgY2FuIGF2b2lkIGV4dHJhIGhpdCB0ZXN0c1xuICAgIC8vIEEgZmluYWwgb3B0aW1pc2F0aW9uIGlzIHRoYXQgYW4gb2JqZWN0IGlzIG5vdCBoaXQgdGVzdCBkaXJlY3RseSBpZiBhIGNoaWxkIGhhcyBhbHJlYWR5IGJlZW4gaGl0LlxuICAgIFxuICAgIHZhciBoaXQgPSBmYWxzZSxcbiAgICAgICAgaW50ZXJhY3RpdmVQYXJlbnQgPSBpbnRlcmFjdGl2ZSA9IGRpc3BsYXlPYmplY3QuaW50ZXJhY3RpdmUgfHwgaW50ZXJhY3RpdmU7XG5cbiAgICAvLyBpZiB0aGUgZGlzcGxheW9iamVjdCBoYXMgYSBoaXRBcmVhLCB0aGVuIGl0IGRvZXMgbm90IG5lZWQgdG8gaGl0VGVzdCBjaGlsZHJlbi5cbiAgICBpZihkaXNwbGF5T2JqZWN0LmhpdEFyZWEpXG4gICAge1xuICAgICAgICBpbnRlcmFjdGl2ZVBhcmVudCA9IGZhbHNlO1xuICAgIH1cblxuICAgIC8vICoqIEZSRUUgVElQICoqISBJZiBhbiBvYmplY3QgaXMgbm90IGludGVyYWN0dGl2ZSBvciBoYXMgbm8gYnV0dG9ucyBpbiBpdCAoc3VjaCBhcyBhIGdhbWUgc2NlbmUhKSBzZXQgaW50ZXJhY3RpdmVDaGlsZHJlbiB0byBmYWxzZSBmb3IgdGhhdCBkaXNwbGF5T2JqZWN0LlxuICAgIC8vIFRoaXMgd2lsbCBhbGxvdyBwaXhpIHRvIGNvbXBsZXRseSBpZ25vcmUgYW5kIGJ5cGFzcyBjaGVja2luZyB0aGUgZGlzcGxheU9iamVjdHMgY2hpbGRyZW4uXG4gICAgaWYoZGlzcGxheU9iamVjdC5pbnRlcmFjdGl2ZUNoaWxkcmVuKVxuICAgIHsgICAgICAgXG4gICAgICAgIHZhciBjaGlsZHJlbiA9IGRpc3BsYXlPYmplY3QuY2hpbGRyZW47XG4gICAgICAgIFxuICAgICAgICBmb3IgKHZhciBpID0gY2hpbGRyZW4ubGVuZ3RoLTE7IGkgPj0gMDsgaS0tKVxuICAgICAgICB7XG4gICAgICAgICAgICAvLyB0aW1lIHRvIGdldCByZWN1cnNpdmUuLiBpZiB0aGlzIGZ1bmN0aW9uIHdpbGwgcmV0dXJuIGlmIHNvbXRoaW5nIGlzIGhpdC4uXG4gICAgICAgICAgICBpZiggdGhpcy5wcm9jZXNzSW50ZXJhY3RpdmUocG9pbnQsIGNoaWxkcmVuW2ldLCBmdW5jLCBoaXRUZXN0LCBpbnRlcmFjdGl2ZVBhcmVudCkgKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGhpdCA9IHRydWU7XG5cbiAgICAgICAgICAgICAgICAvLyB3ZSBubyBsb25nZXIgbmVlZCB0byBoaXQgdGVzdCBhbnkgbW9yZSBvYmplY3RzIGluIHRoaXMgY29udGFpbmVyIGFzIHdlIHdlIG5vdyBrbm93IHRoZSBwYXJlbnQgaGFzIGJlZW4gaGl0XG4gICAgICAgICAgICAgICAgaW50ZXJhY3RpdmVQYXJlbnQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAvLyBJZiB0aGUgY2hpbGQgaXMgaW50ZXJhY3RpdmUgLCB0aGF0IG1lYW5zIHRoYXQgdGhlIG9iamVjdCBoaXQgd2FzIGFjdHVhbGx5IGludGVyYWN0aXZlIGFuZCBub3QganVzdCB0aGUgY2hpbGQgb2YgYW4gaW50ZXJhY3RpdmUgb2JqZWN0LiBcbiAgICAgICAgICAgICAgICAvLyBUaGlzIG1lYW5zIHdlIG5vIGxvbmdlciBuZWVkIHRvIGhpdCB0ZXN0IGFueXRoaW5nIGVsc2UuIFdlIHN0aWxsIG5lZWQgdG8gcnVuIHRocm91Z2ggYWxsIG9iamVjdHMsIGJ1dCB3ZSBkb24ndCBuZWVkIHRvIHBlcmZvcm0gYW55IGhpdCB0ZXN0cy5cbiAgICAgICAgICAgICAgICBpZihjaGlsZHJlbltpXS5pbnRlcmFjdGl2ZSlcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIGhpdFRlc3QgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBubyBwb2ludCBydW5uaW5nIHRoaXMgaWYgdGhlIGl0ZW0gaXMgbm90IGludGVyYWN0aXZlIG9yIGRvZXMgbm90IGhhdmUgYW4gaW50ZXJhY3RpdmUgcGFyZW50LlxuICAgIGlmKGludGVyYWN0aXZlKVxuICAgIHtcbiAgICAgICAgLy8gaWYgd2UgYXJlIGhpdCB0ZXN0aW5nIChhcyBpbiB3ZSBoYXZlIG5vIGhpdCBhbnkgb2JqZWN0cyB5ZXQpXG4gICAgICAgIC8vIFdlIGFsc28gZG9uJ3QgbmVlZCB0byB3b3JyeSBhYm91dCBoaXQgdGVzdGluZyBpZiBvbmNlIG9mIHRoZSBkaXNwbGF5T2JqZWN0cyBjaGlsZHJlbiBoYXMgYWxyZWFkeSBiZWVuIGhpdCFcbiAgICAgICAgaWYoaGl0VGVzdCAmJiAhaGl0KVxuICAgICAgICB7ICBcbiAgICAgICAgICAgIGlmKGRpc3BsYXlPYmplY3QuaGl0QXJlYSlcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBkaXNwbGF5T2JqZWN0LndvcmxkVHJhbnNmb3JtLmFwcGx5SW52ZXJzZShwb2ludCwgIHRoaXMuX3RlbXBQb2ludCk7XG4gICAgICAgICAgICAgICAgaGl0ID0gZGlzcGxheU9iamVjdC5oaXRBcmVhLmNvbnRhaW5zKCB0aGlzLl90ZW1wUG9pbnQueCwgdGhpcy5fdGVtcFBvaW50LnkgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYoZGlzcGxheU9iamVjdC5jb250YWluc1BvaW50KVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGhpdCA9IGRpc3BsYXlPYmplY3QuY29udGFpbnNQb2ludChwb2ludCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZihkaXNwbGF5T2JqZWN0LmludGVyYWN0aXZlKVxuICAgICAgICB7XG4gICAgICAgICAgICBmdW5jKGRpc3BsYXlPYmplY3QsIGhpdCk7IFxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGhpdDtcbiAgXG59O1xuXG5cbi8qKlxuICogSXMgY2FsbGVkIHdoZW4gdGhlIG1vdXNlIGJ1dHRvbiBpcyBwcmVzc2VkIGRvd24gb24gdGhlIHJlbmRlcmVyIGVsZW1lbnRcbiAqXG4gKiBAcGFyYW0gZXZlbnQge0V2ZW50fSBUaGUgRE9NIGV2ZW50IG9mIGEgbW91c2UgYnV0dG9uIGJlaW5nIHByZXNzZWQgZG93blxuICogQHByaXZhdGVcbiAqL1xuSW50ZXJhY3Rpb25NYW5hZ2VyLnByb3RvdHlwZS5vbk1vdXNlRG93biA9IGZ1bmN0aW9uIChldmVudClcbntcbiAgICB0aGlzLm1vdXNlLm9yaWdpbmFsRXZlbnQgPSBldmVudDtcbiAgICB0aGlzLmV2ZW50RGF0YS5kYXRhID0gdGhpcy5tb3VzZTtcbiAgICB0aGlzLmV2ZW50RGF0YS5zdG9wcGVkID0gZmFsc2U7XG5cbiAgICAvLyBVcGRhdGUgaW50ZXJuYWwgbW91c2UgcmVmZXJlbmNlXG4gICAgdGhpcy5tYXBQb3NpdGlvblRvUG9pbnQoIHRoaXMubW91c2UuZ2xvYmFsLCBldmVudC5jbGllbnRYLCBldmVudC5jbGllbnRZKTtcblxuICAgIGlmICh0aGlzLmF1dG9QcmV2ZW50RGVmYXVsdClcbiAgICB7XG4gICAgICAgIHRoaXMubW91c2Uub3JpZ2luYWxFdmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIH1cblxuICAgIHRoaXMucHJvY2Vzc0ludGVyYWN0aXZlKHRoaXMubW91c2UuZ2xvYmFsLCB0aGlzLnJlbmRlcmVyLl9sYXN0T2JqZWN0UmVuZGVyZWQsIHRoaXMucHJvY2Vzc01vdXNlRG93biwgdHJ1ZSApO1xufTtcblxuLyoqXG4gKiBQcm9jZXNzZXMgdGhlIHJlc3VsdCBvZiB0aGUgbW91c2UgZG93biBjaGVjayBhbmQgZGlzcGF0Y2hlcyB0aGUgZXZlbnQgaWYgbmVlZCBiZVxuICpcbiAqIEBwYXJhbSBkaXNwbGF5T2JqZWN0IHtQSVhJLkNvbnRhaW5lcnxQSVhJLlNwcml0ZXxQSVhJLmV4dHJhcy5UaWxpbmdTcHJpdGV9IFRoZSBkaXNwbGF5IG9iamVjdCB0aGF0IHdhcyB0ZXN0ZWRcbiAqIEBwYXJhbSBoaXQge2Jvb2xlYW59IHRoZSByZXN1bHQgb2YgdGhlIGhpdCB0ZXN0IG9uIHRoZSBkaXNwYXkgb2JqZWN0XG4gKiBAcHJpdmF0ZVxuICovXG5JbnRlcmFjdGlvbk1hbmFnZXIucHJvdG90eXBlLnByb2Nlc3NNb3VzZURvd24gPSBmdW5jdGlvbiAoIGRpc3BsYXlPYmplY3QsIGhpdCApXG57XG4gICAgdmFyIGUgPSB0aGlzLm1vdXNlLm9yaWdpbmFsRXZlbnQ7XG4gICAgXG4gICAgdmFyIGlzUmlnaHRCdXR0b24gPSBlLmJ1dHRvbiA9PT0gMiB8fCBlLndoaWNoID09PSAzO1xuXG4gICAgaWYoaGl0KVxuICAgIHtcbiAgICAgICAgZGlzcGxheU9iamVjdFsgaXNSaWdodEJ1dHRvbiA/ICdfaXNSaWdodERvd24nIDogJ19pc0xlZnREb3duJyBdID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50KCBkaXNwbGF5T2JqZWN0LCBpc1JpZ2h0QnV0dG9uID8gJ3JpZ2h0ZG93bicgOiAnbW91c2Vkb3duJywgdGhpcy5ldmVudERhdGEgKTtcbiAgICB9XG59O1xuXG5cblxuLyoqXG4gKiBJcyBjYWxsZWQgd2hlbiB0aGUgbW91c2UgYnV0dG9uIGlzIHJlbGVhc2VkIG9uIHRoZSByZW5kZXJlciBlbGVtZW50XG4gKlxuICogQHBhcmFtIGV2ZW50IHtFdmVudH0gVGhlIERPTSBldmVudCBvZiBhIG1vdXNlIGJ1dHRvbiBiZWluZyByZWxlYXNlZFxuICogQHByaXZhdGVcbiAqL1xuSW50ZXJhY3Rpb25NYW5hZ2VyLnByb3RvdHlwZS5vbk1vdXNlVXAgPSBmdW5jdGlvbiAoZXZlbnQpXG57XG4gICAgdGhpcy5tb3VzZS5vcmlnaW5hbEV2ZW50ID0gZXZlbnQ7XG4gICAgdGhpcy5ldmVudERhdGEuZGF0YSA9IHRoaXMubW91c2U7XG4gICAgdGhpcy5ldmVudERhdGEuc3RvcHBlZCA9IGZhbHNlO1xuXG4gICAgLy8gVXBkYXRlIGludGVybmFsIG1vdXNlIHJlZmVyZW5jZVxuICAgIHRoaXMubWFwUG9zaXRpb25Ub1BvaW50KCB0aGlzLm1vdXNlLmdsb2JhbCwgZXZlbnQuY2xpZW50WCwgZXZlbnQuY2xpZW50WSk7XG5cbiAgICB0aGlzLnByb2Nlc3NJbnRlcmFjdGl2ZSh0aGlzLm1vdXNlLmdsb2JhbCwgdGhpcy5yZW5kZXJlci5fbGFzdE9iamVjdFJlbmRlcmVkLCB0aGlzLnByb2Nlc3NNb3VzZVVwLCB0cnVlICk7XG59O1xuXG4vKipcbiAqIFByb2Nlc3NlcyB0aGUgcmVzdWx0IG9mIHRoZSBtb3VzZSB1cCBjaGVjayBhbmQgZGlzcGF0Y2hlcyB0aGUgZXZlbnQgaWYgbmVlZCBiZVxuICpcbiAqIEBwYXJhbSBkaXNwbGF5T2JqZWN0IHtQSVhJLkNvbnRhaW5lcnxQSVhJLlNwcml0ZXxQSVhJLmV4dHJhcy5UaWxpbmdTcHJpdGV9IFRoZSBkaXNwbGF5IG9iamVjdCB0aGF0IHdhcyB0ZXN0ZWRcbiAqIEBwYXJhbSBoaXQge2Jvb2xlYW59IHRoZSByZXN1bHQgb2YgdGhlIGhpdCB0ZXN0IG9uIHRoZSBkaXNwbGF5IG9iamVjdFxuICogQHByaXZhdGVcbiAqL1xuSW50ZXJhY3Rpb25NYW5hZ2VyLnByb3RvdHlwZS5wcm9jZXNzTW91c2VVcCA9IGZ1bmN0aW9uICggZGlzcGxheU9iamVjdCwgaGl0IClcbntcbiAgICB2YXIgZSA9IHRoaXMubW91c2Uub3JpZ2luYWxFdmVudDtcblxuICAgIHZhciBpc1JpZ2h0QnV0dG9uID0gZS5idXR0b24gPT09IDIgfHwgZS53aGljaCA9PT0gMztcbiAgICB2YXIgaXNEb3duID0gIGlzUmlnaHRCdXR0b24gPyAnX2lzUmlnaHREb3duJyA6ICdfaXNMZWZ0RG93bic7XG5cbiAgICBpZihoaXQpXG4gICAge1xuICAgICAgICB0aGlzLmRpc3BhdGNoRXZlbnQoIGRpc3BsYXlPYmplY3QsIGlzUmlnaHRCdXR0b24gPyAncmlnaHR1cCcgOiAnbW91c2V1cCcsIHRoaXMuZXZlbnREYXRhICk7XG5cbiAgICAgICAgaWYoIGRpc3BsYXlPYmplY3RbIGlzRG93biBdIClcbiAgICAgICAge1xuICAgICAgICAgICAgZGlzcGxheU9iamVjdFsgaXNEb3duIF0gPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudCggZGlzcGxheU9iamVjdCwgaXNSaWdodEJ1dHRvbiA/ICdyaWdodGNsaWNrJyA6ICdjbGljaycsIHRoaXMuZXZlbnREYXRhICk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgaWYoIGRpc3BsYXlPYmplY3RbIGlzRG93biBdIClcbiAgICAgICAge1xuICAgICAgICAgICAgZGlzcGxheU9iamVjdFsgaXNEb3duIF0gPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudCggZGlzcGxheU9iamVjdCwgaXNSaWdodEJ1dHRvbiA/ICdyaWdodHVwb3V0c2lkZScgOiAnbW91c2V1cG91dHNpZGUnLCB0aGlzLmV2ZW50RGF0YSApO1xuICAgICAgICB9XG4gICAgfVxufTtcblxuXG4vKipcbiAqIElzIGNhbGxlZCB3aGVuIHRoZSBtb3VzZSBtb3ZlcyBhY3Jvc3MgdGhlIHJlbmRlcmVyIGVsZW1lbnRcbiAqXG4gKiBAcGFyYW0gZXZlbnQge0V2ZW50fSBUaGUgRE9NIGV2ZW50IG9mIHRoZSBtb3VzZSBtb3ZpbmdcbiAqIEBwcml2YXRlXG4gKi9cbkludGVyYWN0aW9uTWFuYWdlci5wcm90b3R5cGUub25Nb3VzZU1vdmUgPSBmdW5jdGlvbiAoZXZlbnQpXG57XG4gICAgdGhpcy5tb3VzZS5vcmlnaW5hbEV2ZW50ID0gZXZlbnQ7XG4gICAgdGhpcy5ldmVudERhdGEuZGF0YSA9IHRoaXMubW91c2U7XG4gICAgdGhpcy5ldmVudERhdGEuc3RvcHBlZCA9IGZhbHNlO1xuXG4gICAgdGhpcy5tYXBQb3NpdGlvblRvUG9pbnQoIHRoaXMubW91c2UuZ2xvYmFsLCBldmVudC5jbGllbnRYLCBldmVudC5jbGllbnRZKTtcblxuICAgIHRoaXMuZGlkTW92ZSA9IHRydWU7XG5cbiAgICB0aGlzLmN1cnNvciA9ICdpbmhlcml0JztcblxuICAgIHRoaXMucHJvY2Vzc0ludGVyYWN0aXZlKHRoaXMubW91c2UuZ2xvYmFsLCB0aGlzLnJlbmRlcmVyLl9sYXN0T2JqZWN0UmVuZGVyZWQsIHRoaXMucHJvY2Vzc01vdXNlTW92ZSwgdHJ1ZSApO1xuXG4gICAgaWYgKHRoaXMuY3VycmVudEN1cnNvclN0eWxlICE9PSB0aGlzLmN1cnNvcilcbiAgICB7XG4gICAgICAgIHRoaXMuY3VycmVudEN1cnNvclN0eWxlID0gdGhpcy5jdXJzb3I7XG4gICAgICAgIHRoaXMuaW50ZXJhY3Rpb25ET01FbGVtZW50LnN0eWxlLmN1cnNvciA9IHRoaXMuY3Vyc29yO1xuICAgIH1cblxuICAgIC8vVE9ETyBCVUcgZm9yIHBhcmVudHMgaW5lcmFjdGl2ZSBvYmplY3QgKGJvcmRlciBvcmRlciBpc3N1ZSlcbn07XG5cbi8qKlxuICogUHJvY2Vzc2VzIHRoZSByZXN1bHQgb2YgdGhlIG1vdXNlIG1vdmUgY2hlY2sgYW5kIGRpc3BhdGNoZXMgdGhlIGV2ZW50IGlmIG5lZWQgYmVcbiAqXG4gKiBAcGFyYW0gZGlzcGxheU9iamVjdCB7UElYSS5Db250YWluZXJ8UElYSS5TcHJpdGV8UElYSS5leHRyYXMuVGlsaW5nU3ByaXRlfSBUaGUgZGlzcGxheSBvYmplY3QgdGhhdCB3YXMgdGVzdGVkXG4gKiBAcGFyYW0gaGl0IHtib29sZWFufSB0aGUgcmVzdWx0IG9mIHRoZSBoaXQgdGVzdCBvbiB0aGUgZGlzcGxheSBvYmplY3RcbiAqIEBwcml2YXRlXG4gKi9cbkludGVyYWN0aW9uTWFuYWdlci5wcm90b3R5cGUucHJvY2Vzc01vdXNlTW92ZSA9IGZ1bmN0aW9uICggZGlzcGxheU9iamVjdCwgaGl0IClcbntcbiAgICB0aGlzLmRpc3BhdGNoRXZlbnQoIGRpc3BsYXlPYmplY3QsICdtb3VzZW1vdmUnLCB0aGlzLmV2ZW50RGF0YSk7XG4gICAgdGhpcy5wcm9jZXNzTW91c2VPdmVyT3V0KGRpc3BsYXlPYmplY3QsIGhpdCk7XG59O1xuXG5cbi8qKlxuICogSXMgY2FsbGVkIHdoZW4gdGhlIG1vdXNlIGlzIG1vdmVkIG91dCBvZiB0aGUgcmVuZGVyZXIgZWxlbWVudFxuICpcbiAqIEBwYXJhbSBldmVudCB7RXZlbnR9IFRoZSBET00gZXZlbnQgb2YgYSBtb3VzZSBiZWluZyBtb3ZlZCBvdXRcbiAqIEBwcml2YXRlXG4gKi9cbkludGVyYWN0aW9uTWFuYWdlci5wcm90b3R5cGUub25Nb3VzZU91dCA9IGZ1bmN0aW9uIChldmVudClcbntcbiAgICB0aGlzLm1vdXNlLm9yaWdpbmFsRXZlbnQgPSBldmVudDtcbiAgICB0aGlzLmV2ZW50RGF0YS5zdG9wcGVkID0gZmFsc2U7XG5cbiAgICAvLyBVcGRhdGUgaW50ZXJuYWwgbW91c2UgcmVmZXJlbmNlXG4gICAgdGhpcy5tYXBQb3NpdGlvblRvUG9pbnQoIHRoaXMubW91c2UuZ2xvYmFsLCBldmVudC5jbGllbnRYLCBldmVudC5jbGllbnRZKTtcblxuICAgIHRoaXMuaW50ZXJhY3Rpb25ET01FbGVtZW50LnN0eWxlLmN1cnNvciA9ICdpbmhlcml0JztcblxuICAgIC8vIFRPRE8gb3B0aW1pemUgYnkgbm90IGNoZWNrIEVWRVJZIFRJTUUhIG1heWJlIGhhbGYgYXMgb2Z0ZW4/IC8vXG4gICAgdGhpcy5tYXBQb3NpdGlvblRvUG9pbnQoIHRoaXMubW91c2UuZ2xvYmFsLCBldmVudC5jbGllbnRYLCBldmVudC5jbGllbnRZICk7XG5cbiAgICB0aGlzLnByb2Nlc3NJbnRlcmFjdGl2ZSggdGhpcy5tb3VzZS5nbG9iYWwsIHRoaXMucmVuZGVyZXIuX2xhc3RPYmplY3RSZW5kZXJlZCwgdGhpcy5wcm9jZXNzTW91c2VPdmVyT3V0LCBmYWxzZSApO1xufTtcblxuLyoqXG4gKiBQcm9jZXNzZXMgdGhlIHJlc3VsdCBvZiB0aGUgbW91c2Ugb3Zlci9vdXQgY2hlY2sgYW5kIGRpc3BhdGNoZXMgdGhlIGV2ZW50IGlmIG5lZWQgYmVcbiAqXG4gKiBAcGFyYW0gZGlzcGxheU9iamVjdCB7UElYSS5Db250YWluZXJ8UElYSS5TcHJpdGV8UElYSS5leHRyYXMuVGlsaW5nU3ByaXRlfSBUaGUgZGlzcGxheSBvYmplY3QgdGhhdCB3YXMgdGVzdGVkXG4gKiBAcGFyYW0gaGl0IHtib29sZWFufSB0aGUgcmVzdWx0IG9mIHRoZSBoaXQgdGVzdCBvbiB0aGUgZGlzcGxheSBvYmplY3RcbiAqIEBwcml2YXRlXG4gKi9cbkludGVyYWN0aW9uTWFuYWdlci5wcm90b3R5cGUucHJvY2Vzc01vdXNlT3Zlck91dCA9IGZ1bmN0aW9uICggZGlzcGxheU9iamVjdCwgaGl0IClcbntcbiAgICBpZihoaXQpXG4gICAge1xuICAgICAgICBpZighZGlzcGxheU9iamVjdC5fb3ZlcilcbiAgICAgICAge1xuICAgICAgICAgICAgZGlzcGxheU9iamVjdC5fb3ZlciA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLmRpc3BhdGNoRXZlbnQoIGRpc3BsYXlPYmplY3QsICdtb3VzZW92ZXInLCB0aGlzLmV2ZW50RGF0YSApO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGRpc3BsYXlPYmplY3QuYnV0dG9uTW9kZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5jdXJzb3IgPSBkaXNwbGF5T2JqZWN0LmRlZmF1bHRDdXJzb3I7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgaWYoZGlzcGxheU9iamVjdC5fb3ZlcilcbiAgICAgICAge1xuICAgICAgICAgICAgZGlzcGxheU9iamVjdC5fb3ZlciA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50KCBkaXNwbGF5T2JqZWN0LCAnbW91c2VvdXQnLCB0aGlzLmV2ZW50RGF0YSk7XG4gICAgICAgIH1cbiAgICB9XG59O1xuXG5cbi8qKlxuICogSXMgY2FsbGVkIHdoZW4gYSB0b3VjaCBpcyBzdGFydGVkIG9uIHRoZSByZW5kZXJlciBlbGVtZW50XG4gKlxuICogQHBhcmFtIGV2ZW50IHtFdmVudH0gVGhlIERPTSBldmVudCBvZiBhIHRvdWNoIHN0YXJ0aW5nIG9uIHRoZSByZW5kZXJlciB2aWV3XG4gKiBAcHJpdmF0ZVxuICovXG5JbnRlcmFjdGlvbk1hbmFnZXIucHJvdG90eXBlLm9uVG91Y2hTdGFydCA9IGZ1bmN0aW9uIChldmVudClcbntcbiAgICBpZiAodGhpcy5hdXRvUHJldmVudERlZmF1bHQpXG4gICAge1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIH1cblxuICAgIHZhciBjaGFuZ2VkVG91Y2hlcyA9IGV2ZW50LmNoYW5nZWRUb3VjaGVzO1xuICAgIHZhciBjTGVuZ3RoID0gY2hhbmdlZFRvdWNoZXMubGVuZ3RoO1xuXG4gICAgZm9yICh2YXIgaT0wOyBpIDwgY0xlbmd0aDsgaSsrKVxuICAgIHtcbiAgICAgICAgdmFyIHRvdWNoRXZlbnQgPSBjaGFuZ2VkVG91Y2hlc1tpXTtcbiAgICAgICAgLy9UT0RPIFBPT0xcbiAgICAgICAgdmFyIHRvdWNoRGF0YSA9IHRoaXMuZ2V0VG91Y2hEYXRhKCB0b3VjaEV2ZW50ICk7XG5cbiAgICAgICAgdG91Y2hEYXRhLm9yaWdpbmFsRXZlbnQgPSBldmVudDtcblxuICAgICAgICB0aGlzLmV2ZW50RGF0YS5kYXRhID0gdG91Y2hEYXRhO1xuICAgICAgICB0aGlzLmV2ZW50RGF0YS5zdG9wcGVkID0gZmFsc2U7XG5cbiAgICAgICAgdGhpcy5wcm9jZXNzSW50ZXJhY3RpdmUoIHRvdWNoRGF0YS5nbG9iYWwsIHRoaXMucmVuZGVyZXIuX2xhc3RPYmplY3RSZW5kZXJlZCwgdGhpcy5wcm9jZXNzVG91Y2hTdGFydCwgdHJ1ZSApO1xuXG4gICAgICAgIHRoaXMucmV0dXJuVG91Y2hEYXRhKCB0b3VjaERhdGEgKTtcbiAgICB9XG59O1xuXG4vKipcbiAqIFByb2Nlc3NlcyB0aGUgcmVzdWx0IG9mIGEgdG91Y2ggY2hlY2sgYW5kIGRpc3BhdGNoZXMgdGhlIGV2ZW50IGlmIG5lZWQgYmVcbiAqXG4gKiBAcGFyYW0gZGlzcGxheU9iamVjdCB7UElYSS5Db250YWluZXJ8UElYSS5TcHJpdGV8UElYSS5leHRyYXMuVGlsaW5nU3ByaXRlfSBUaGUgZGlzcGxheSBvYmplY3QgdGhhdCB3YXMgdGVzdGVkXG4gKiBAcGFyYW0gaGl0IHtib29sZWFufSB0aGUgcmVzdWx0IG9mIHRoZSBoaXQgdGVzdCBvbiB0aGUgZGlzcGxheSBvYmplY3RcbiAqIEBwcml2YXRlXG4gKi9cbkludGVyYWN0aW9uTWFuYWdlci5wcm90b3R5cGUucHJvY2Vzc1RvdWNoU3RhcnQgPSBmdW5jdGlvbiAoIGRpc3BsYXlPYmplY3QsIGhpdCApXG57XG4gICAgaWYoaGl0KVxuICAgIHtcbiAgICAgICAgZGlzcGxheU9iamVjdC5fdG91Y2hEb3duID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50KCBkaXNwbGF5T2JqZWN0LCAndG91Y2hzdGFydCcsIHRoaXMuZXZlbnREYXRhICk7XG4gICAgfVxufTtcblxuXG4vKipcbiAqIElzIGNhbGxlZCB3aGVuIGEgdG91Y2ggZW5kcyBvbiB0aGUgcmVuZGVyZXIgZWxlbWVudFxuICpcbiAqIEBwYXJhbSBldmVudCB7RXZlbnR9IFRoZSBET00gZXZlbnQgb2YgYSB0b3VjaCBlbmRpbmcgb24gdGhlIHJlbmRlcmVyIHZpZXdcbiAqL1xuSW50ZXJhY3Rpb25NYW5hZ2VyLnByb3RvdHlwZS5vblRvdWNoRW5kID0gZnVuY3Rpb24gKGV2ZW50KVxue1xuICAgIGlmICh0aGlzLmF1dG9QcmV2ZW50RGVmYXVsdClcbiAgICB7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgfVxuXG4gICAgdmFyIGNoYW5nZWRUb3VjaGVzID0gZXZlbnQuY2hhbmdlZFRvdWNoZXM7XG4gICAgdmFyIGNMZW5ndGggPSBjaGFuZ2VkVG91Y2hlcy5sZW5ndGg7XG5cbiAgICBmb3IgKHZhciBpPTA7IGkgPCBjTGVuZ3RoOyBpKyspXG4gICAge1xuICAgICAgICB2YXIgdG91Y2hFdmVudCA9IGNoYW5nZWRUb3VjaGVzW2ldO1xuXG4gICAgICAgIHZhciB0b3VjaERhdGEgPSB0aGlzLmdldFRvdWNoRGF0YSggdG91Y2hFdmVudCApO1xuXG4gICAgICAgIHRvdWNoRGF0YS5vcmlnaW5hbEV2ZW50ID0gZXZlbnQ7XG5cbiAgICAgICAgLy9UT0RPIHRoaXMgc2hvdWxkIGJlIHBhc3NlZCBhbG9uZy4uIG5vIHNldFxuICAgICAgICB0aGlzLmV2ZW50RGF0YS5kYXRhID0gdG91Y2hEYXRhO1xuICAgICAgICB0aGlzLmV2ZW50RGF0YS5zdG9wcGVkID0gZmFsc2U7XG5cblxuICAgICAgICB0aGlzLnByb2Nlc3NJbnRlcmFjdGl2ZSggdG91Y2hEYXRhLmdsb2JhbCwgdGhpcy5yZW5kZXJlci5fbGFzdE9iamVjdFJlbmRlcmVkLCB0aGlzLnByb2Nlc3NUb3VjaEVuZCwgdHJ1ZSApO1xuXG4gICAgICAgIHRoaXMucmV0dXJuVG91Y2hEYXRhKCB0b3VjaERhdGEgKTtcbiAgICB9XG59O1xuXG4vKipcbiAqIFByb2Nlc3NlcyB0aGUgcmVzdWx0IG9mIHRoZSBlbmQgb2YgYSB0b3VjaCBhbmQgZGlzcGF0Y2hlcyB0aGUgZXZlbnQgaWYgbmVlZCBiZVxuICpcbiAqIEBwYXJhbSBkaXNwbGF5T2JqZWN0IHtQSVhJLkNvbnRhaW5lcnxQSVhJLlNwcml0ZXxQSVhJLmV4dHJhcy5UaWxpbmdTcHJpdGV9IFRoZSBkaXNwbGF5IG9iamVjdCB0aGF0IHdhcyB0ZXN0ZWRcbiAqIEBwYXJhbSBoaXQge2Jvb2xlYW59IHRoZSByZXN1bHQgb2YgdGhlIGhpdCB0ZXN0IG9uIHRoZSBkaXNwbGF5IG9iamVjdFxuICogQHByaXZhdGVcbiAqL1xuSW50ZXJhY3Rpb25NYW5hZ2VyLnByb3RvdHlwZS5wcm9jZXNzVG91Y2hFbmQgPSBmdW5jdGlvbiAoIGRpc3BsYXlPYmplY3QsIGhpdCApXG57XG4gICAgaWYoaGl0KVxuICAgIHtcbiAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50KCBkaXNwbGF5T2JqZWN0LCAndG91Y2hlbmQnLCB0aGlzLmV2ZW50RGF0YSApO1xuXG4gICAgICAgIGlmKCBkaXNwbGF5T2JqZWN0Ll90b3VjaERvd24gKVxuICAgICAgICB7XG4gICAgICAgICAgICBkaXNwbGF5T2JqZWN0Ll90b3VjaERvd24gPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudCggZGlzcGxheU9iamVjdCwgJ3RhcCcsIHRoaXMuZXZlbnREYXRhICk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgaWYoIGRpc3BsYXlPYmplY3QuX3RvdWNoRG93biApXG4gICAgICAgIHtcbiAgICAgICAgICAgIGRpc3BsYXlPYmplY3QuX3RvdWNoRG93biA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50KCBkaXNwbGF5T2JqZWN0LCAndG91Y2hlbmRvdXRzaWRlJywgdGhpcy5ldmVudERhdGEgKTtcbiAgICAgICAgfVxuICAgIH1cbn07XG5cbi8qKlxuICogSXMgY2FsbGVkIHdoZW4gYSB0b3VjaCBpcyBtb3ZlZCBhY3Jvc3MgdGhlIHJlbmRlcmVyIGVsZW1lbnRcbiAqXG4gKiBAcGFyYW0gZXZlbnQge0V2ZW50fSBUaGUgRE9NIGV2ZW50IG9mIGEgdG91Y2ggbW92aW5nIGFjcm9zcyB0aGUgcmVuZGVyZXIgdmlld1xuICogQHByaXZhdGVcbiAqL1xuSW50ZXJhY3Rpb25NYW5hZ2VyLnByb3RvdHlwZS5vblRvdWNoTW92ZSA9IGZ1bmN0aW9uIChldmVudClcbntcbiAgICBpZiAodGhpcy5hdXRvUHJldmVudERlZmF1bHQpXG4gICAge1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIH1cblxuICAgIHZhciBjaGFuZ2VkVG91Y2hlcyA9IGV2ZW50LmNoYW5nZWRUb3VjaGVzO1xuICAgIHZhciBjTGVuZ3RoID0gY2hhbmdlZFRvdWNoZXMubGVuZ3RoO1xuXG4gICAgZm9yICh2YXIgaT0wOyBpIDwgY0xlbmd0aDsgaSsrKVxuICAgIHtcbiAgICAgICAgdmFyIHRvdWNoRXZlbnQgPSBjaGFuZ2VkVG91Y2hlc1tpXTtcblxuICAgICAgICB2YXIgdG91Y2hEYXRhID0gdGhpcy5nZXRUb3VjaERhdGEoIHRvdWNoRXZlbnQgKTtcblxuICAgICAgICB0b3VjaERhdGEub3JpZ2luYWxFdmVudCA9IGV2ZW50O1xuXG4gICAgICAgIHRoaXMuZXZlbnREYXRhLmRhdGEgPSB0b3VjaERhdGE7XG4gICAgICAgIHRoaXMuZXZlbnREYXRhLnN0b3BwZWQgPSBmYWxzZTtcblxuICAgICAgICB0aGlzLnByb2Nlc3NJbnRlcmFjdGl2ZSggdG91Y2hEYXRhLmdsb2JhbCwgdGhpcy5yZW5kZXJlci5fbGFzdE9iamVjdFJlbmRlcmVkLCB0aGlzLnByb2Nlc3NUb3VjaE1vdmUsIHRydWUgKTtcblxuICAgICAgICB0aGlzLnJldHVyblRvdWNoRGF0YSggdG91Y2hEYXRhICk7XG4gICAgfVxufTtcblxuLyoqXG4gKiBQcm9jZXNzZXMgdGhlIHJlc3VsdCBvZiBhIHRvdWNoIG1vdmUgY2hlY2sgYW5kIGRpc3BhdGNoZXMgdGhlIGV2ZW50IGlmIG5lZWQgYmVcbiAqXG4gKiBAcGFyYW0gZGlzcGxheU9iamVjdCB7UElYSS5Db250YWluZXJ8UElYSS5TcHJpdGV8UElYSS5leHRyYXMuVGlsaW5nU3ByaXRlfSBUaGUgZGlzcGxheSBvYmplY3QgdGhhdCB3YXMgdGVzdGVkXG4gKiBAcGFyYW0gaGl0IHtib29sZWFufSB0aGUgcmVzdWx0IG9mIHRoZSBoaXQgdGVzdCBvbiB0aGUgZGlzcGxheSBvYmplY3RcbiAqIEBwcml2YXRlXG4gKi9cbkludGVyYWN0aW9uTWFuYWdlci5wcm90b3R5cGUucHJvY2Vzc1RvdWNoTW92ZSA9IGZ1bmN0aW9uICggZGlzcGxheU9iamVjdCwgaGl0IClcbntcbiAgICBoaXQgPSBoaXQ7XG4gICAgdGhpcy5kaXNwYXRjaEV2ZW50KCBkaXNwbGF5T2JqZWN0LCAndG91Y2htb3ZlJywgdGhpcy5ldmVudERhdGEpO1xufTtcblxuLyoqXG4gKiBHcmFicyBhbiBpbnRlcmFjdGlvbiBkYXRhIG9iamVjdCBmcm9tIHRoZSBpbnRlcm5hbCBwb29sXG4gKlxuICogQHBhcmFtIHRvdWNoRXZlbnQge0V2ZW50RGF0YX0gVGhlIHRvdWNoIGV2ZW50IHdlIG5lZWQgdG8gcGFpciB3aXRoIGFuIGludGVyYWN0aW9uRGF0YSBvYmplY3RcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5JbnRlcmFjdGlvbk1hbmFnZXIucHJvdG90eXBlLmdldFRvdWNoRGF0YSA9IGZ1bmN0aW9uICh0b3VjaEV2ZW50KVxue1xuICAgIHZhciB0b3VjaERhdGEgPSB0aGlzLmludGVyYWN0aXZlRGF0YVBvb2wucG9wKCk7XG5cbiAgICBpZighdG91Y2hEYXRhKVxuICAgIHtcbiAgICAgICAgdG91Y2hEYXRhID0gbmV3IEludGVyYWN0aW9uRGF0YSgpO1xuICAgIH1cblxuICAgIHRvdWNoRGF0YS5pZGVudGlmaWVyID0gdG91Y2hFdmVudC5pZGVudGlmaWVyO1xuICAgIHRoaXMubWFwUG9zaXRpb25Ub1BvaW50KCB0b3VjaERhdGEuZ2xvYmFsLCB0b3VjaEV2ZW50LmNsaWVudFgsIHRvdWNoRXZlbnQuY2xpZW50WSApO1xuXG4gICAgaWYobmF2aWdhdG9yLmlzQ29jb29uSlMpXG4gICAge1xuICAgICAgICB0b3VjaERhdGEuZ2xvYmFsLnggPSB0b3VjaERhdGEuZ2xvYmFsLnggLyB0aGlzLnJlc29sdXRpb247XG4gICAgICAgIHRvdWNoRGF0YS5nbG9iYWwueSA9IHRvdWNoRGF0YS5nbG9iYWwueSAvIHRoaXMucmVzb2x1dGlvbjtcbiAgICB9XG5cbiAgICB0b3VjaEV2ZW50Lmdsb2JhbFggPSB0b3VjaERhdGEuZ2xvYmFsLng7XG4gICAgdG91Y2hFdmVudC5nbG9iYWxZID0gdG91Y2hEYXRhLmdsb2JhbC55O1xuXG4gICAgcmV0dXJuIHRvdWNoRGF0YTtcbn07XG5cbi8qKlxuICogUmV0dXJucyBhbiBpbnRlcmFjdGlvbiBkYXRhIG9iamVjdCB0byB0aGUgaW50ZXJuYWwgcG9vbFxuICpcbiAqIEBwYXJhbSB0b3VjaERhdGEge1BJWEkuaW50ZXJhY3Rpb24uSW50ZXJhY3Rpb25EYXRhfSBUaGUgdG91Y2ggZGF0YSBvYmplY3Qgd2Ugd2FudCB0byByZXR1cm4gdG8gdGhlIHBvb2xcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5JbnRlcmFjdGlvbk1hbmFnZXIucHJvdG90eXBlLnJldHVyblRvdWNoRGF0YSA9IGZ1bmN0aW9uICggdG91Y2hEYXRhIClcbntcbiAgICB0aGlzLmludGVyYWN0aXZlRGF0YVBvb2wucHVzaCggdG91Y2hEYXRhICk7XG59O1xuXG4vKipcbiAqIERlc3Ryb3lzIHRoZSBpbnRlcmFjdGlvbiBtYW5hZ2VyXG4gKlxuICovXG5JbnRlcmFjdGlvbk1hbmFnZXIucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoKSB7XG4gICAgdGhpcy5yZW1vdmVFdmVudHMoKTtcblxuICAgIHRoaXMucmVuZGVyZXIgPSBudWxsO1xuXG4gICAgdGhpcy5tb3VzZSA9IG51bGw7XG5cbiAgICB0aGlzLmV2ZW50RGF0YSA9IG51bGw7XG5cbiAgICB0aGlzLmludGVyYWN0aXZlRGF0YVBvb2wgPSBudWxsO1xuXG4gICAgdGhpcy5pbnRlcmFjdGlvbkRPTUVsZW1lbnQgPSBudWxsO1xuXG4gICAgdGhpcy5vbk1vdXNlVXAgPSBudWxsO1xuICAgIHRoaXMucHJvY2Vzc01vdXNlVXAgPSBudWxsO1xuXG5cbiAgICB0aGlzLm9uTW91c2VEb3duID0gbnVsbDtcbiAgICB0aGlzLnByb2Nlc3NNb3VzZURvd24gPSBudWxsO1xuXG4gICAgdGhpcy5vbk1vdXNlTW92ZSA9IG51bGw7XG4gICAgdGhpcy5wcm9jZXNzTW91c2VNb3ZlID0gbnVsbDtcblxuICAgIHRoaXMub25Nb3VzZU91dCA9IG51bGw7XG4gICAgdGhpcy5wcm9jZXNzTW91c2VPdmVyT3V0ID0gbnVsbDtcblxuXG4gICAgdGhpcy5vblRvdWNoU3RhcnQgPSBudWxsO1xuICAgIHRoaXMucHJvY2Vzc1RvdWNoU3RhcnQgPSBudWxsO1xuXG4gICAgdGhpcy5vblRvdWNoRW5kID0gbnVsbDtcbiAgICB0aGlzLnByb2Nlc3NUb3VjaEVuZCA9IG51bGw7XG5cbiAgICB0aGlzLm9uVG91Y2hNb3ZlID0gbnVsbDtcbiAgICB0aGlzLnByb2Nlc3NUb3VjaE1vdmUgPSBudWxsO1xuXG4gICAgdGhpcy5fdGVtcFBvaW50ID0gbnVsbDtcbn07XG5cbmNvcmUuV2ViR0xSZW5kZXJlci5yZWdpc3RlclBsdWdpbignaW50ZXJhY3Rpb24nLCBJbnRlcmFjdGlvbk1hbmFnZXIpO1xuY29yZS5DYW52YXNSZW5kZXJlci5yZWdpc3RlclBsdWdpbignaW50ZXJhY3Rpb24nLCBJbnRlcmFjdGlvbk1hbmFnZXIpO1xuIiwiLyoqXG4gKiBAZmlsZSAgICAgICAgTWFpbiBleHBvcnQgb2YgdGhlIFBJWEkgaW50ZXJhY3Rpb25zIGxpYnJhcnlcbiAqIEBhdXRob3IgICAgICBNYXQgR3JvdmVzIDxtYXRAZ29vZGJveWRpZ2l0YWwuY29tPlxuICogQGNvcHlyaWdodCAgIDIwMTMtMjAxNSBHb29kQm95RGlnaXRhbFxuICogQGxpY2Vuc2UgICAgIHtAbGluayBodHRwczovL2dpdGh1Yi5jb20vcGl4aWpzL3BpeGkuanMvYmxvYi9tYXN0ZXIvTElDRU5TRXxNSVQgTGljZW5zZX1cbiAqL1xuXG4vKipcbiAqIEBuYW1lc3BhY2UgUElYSS5pbnRlcmFjdGlvblxuICovXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgICBJbnRlcmFjdGlvbkRhdGE6ICAgIHJlcXVpcmUoJy4vSW50ZXJhY3Rpb25EYXRhJyksXG4gICAgSW50ZXJhY3Rpb25NYW5hZ2VyOiByZXF1aXJlKCcuL0ludGVyYWN0aW9uTWFuYWdlcicpLFxuICAgIGludGVyYWN0aXZlVGFyZ2V0OiAgcmVxdWlyZSgnLi9pbnRlcmFjdGl2ZVRhcmdldCcpXG59O1xuIiwiLyoqXG4gKiBEZWZhdWx0IHByb3BlcnR5IHZhbHVlcyBvZiBpbnRlcmFjdGl2ZSBvYmplY3RzXG4gKiB1c2VkIGJ5IHtAbGluayBQSVhJLmludGVyYWN0aW9uLkludGVyYWN0aW9uTWFuYWdlcn0uXG4gKlxuICogQG1peGluXG4gKiBAbWVtYmVyb2YgUElYSS5pbnRlcmFjdGlvblxuICogQGV4YW1wbGVcbiAqICAgICAgZnVuY3Rpb24gTXlPYmplY3QoKSB7fVxuICpcbiAqICAgICAgT2JqZWN0LmFzc2lnbihcbiAqICAgICAgICAgIE15T2JqZWN0LnByb3RvdHlwZSxcbiAqICAgICAgICAgIFBJWEkuaW50ZXJhY3Rpb24uaW50ZXJhY3RpdmVUYXJnZXRcbiAqICAgICAgKTtcbiAqL1xudmFyIGludGVyYWN0aXZlVGFyZ2V0ID0ge1xuICAgIC8qKlxuICAgICAqIEB0b2RvIE5lZWRzIGRvY3MuXG4gICAgICovXG4gICAgaW50ZXJhY3RpdmU6IGZhbHNlLFxuICAgIC8qKlxuICAgICAqIEB0b2RvIE5lZWRzIGRvY3MuXG4gICAgICovXG4gICAgYnV0dG9uTW9kZTogZmFsc2UsXG4gICAgLyoqXG4gICAgICogQHRvZG8gTmVlZHMgZG9jcy5cbiAgICAgKi9cbiAgICBpbnRlcmFjdGl2ZUNoaWxkcmVuOiB0cnVlLFxuICAgIC8qKlxuICAgICAqIEB0b2RvIE5lZWRzIGRvY3MuXG4gICAgICovXG4gICAgZGVmYXVsdEN1cnNvcjogJ3BvaW50ZXInLFxuXG4gICAgLy8gc29tZSBpbnRlcm5hbCBjaGVja3MuLlxuXG4gICAgLyoqXG4gICAgICogQHRvZG8gTmVlZHMgZG9jcy5cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIF9vdmVyOiBmYWxzZSxcbiAgICAvKipcbiAgICAgKiBAdG9kbyBOZWVkcyBkb2NzLlxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgX3RvdWNoRG93bjogZmFsc2Vcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gaW50ZXJhY3RpdmVUYXJnZXQ7XG4iLCJ2YXIgUmVzb3VyY2UgPSByZXF1aXJlKCdyZXNvdXJjZS1sb2FkZXInKS5SZXNvdXJjZSxcbiAgICBjb3JlID0gcmVxdWlyZSgnLi4vY29yZScpLFxuICAgIGV4dHJhcyA9IHJlcXVpcmUoJy4uL2V4dHJhcycpLFxuICAgIHBhdGggPSByZXF1aXJlKCdwYXRoJyk7XG5cblxuZnVuY3Rpb24gcGFyc2UocmVzb3VyY2UsIHRleHR1cmUpIHtcbiAgICB2YXIgZGF0YSA9IHt9O1xuICAgIHZhciBpbmZvID0gcmVzb3VyY2UuZGF0YS5nZXRFbGVtZW50c0J5VGFnTmFtZSgnaW5mbycpWzBdO1xuICAgIHZhciBjb21tb24gPSByZXNvdXJjZS5kYXRhLmdldEVsZW1lbnRzQnlUYWdOYW1lKCdjb21tb24nKVswXTtcblxuICAgIGRhdGEuZm9udCA9IGluZm8uZ2V0QXR0cmlidXRlKCdmYWNlJyk7XG4gICAgZGF0YS5zaXplID0gcGFyc2VJbnQoaW5mby5nZXRBdHRyaWJ1dGUoJ3NpemUnKSwgMTApO1xuICAgIGRhdGEubGluZUhlaWdodCA9IHBhcnNlSW50KGNvbW1vbi5nZXRBdHRyaWJ1dGUoJ2xpbmVIZWlnaHQnKSwgMTApO1xuICAgIGRhdGEuY2hhcnMgPSB7fTtcblxuICAgIC8vcGFyc2UgbGV0dGVyc1xuICAgIHZhciBsZXR0ZXJzID0gcmVzb3VyY2UuZGF0YS5nZXRFbGVtZW50c0J5VGFnTmFtZSgnY2hhcicpO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZXR0ZXJzLmxlbmd0aDsgaSsrKVxuICAgIHtcbiAgICAgICAgdmFyIGNoYXJDb2RlID0gcGFyc2VJbnQobGV0dGVyc1tpXS5nZXRBdHRyaWJ1dGUoJ2lkJyksIDEwKTtcblxuICAgICAgICB2YXIgdGV4dHVyZVJlY3QgPSBuZXcgY29yZS5SZWN0YW5nbGUoXG4gICAgICAgICAgICBwYXJzZUludChsZXR0ZXJzW2ldLmdldEF0dHJpYnV0ZSgneCcpLCAxMCkgKyB0ZXh0dXJlLmZyYW1lLngsXG4gICAgICAgICAgICBwYXJzZUludChsZXR0ZXJzW2ldLmdldEF0dHJpYnV0ZSgneScpLCAxMCkgKyB0ZXh0dXJlLmZyYW1lLnksXG4gICAgICAgICAgICBwYXJzZUludChsZXR0ZXJzW2ldLmdldEF0dHJpYnV0ZSgnd2lkdGgnKSwgMTApLFxuICAgICAgICAgICAgcGFyc2VJbnQobGV0dGVyc1tpXS5nZXRBdHRyaWJ1dGUoJ2hlaWdodCcpLCAxMClcbiAgICAgICAgKTtcblxuICAgICAgICBkYXRhLmNoYXJzW2NoYXJDb2RlXSA9IHtcbiAgICAgICAgICAgIHhPZmZzZXQ6IHBhcnNlSW50KGxldHRlcnNbaV0uZ2V0QXR0cmlidXRlKCd4b2Zmc2V0JyksIDEwKSxcbiAgICAgICAgICAgIHlPZmZzZXQ6IHBhcnNlSW50KGxldHRlcnNbaV0uZ2V0QXR0cmlidXRlKCd5b2Zmc2V0JyksIDEwKSxcbiAgICAgICAgICAgIHhBZHZhbmNlOiBwYXJzZUludChsZXR0ZXJzW2ldLmdldEF0dHJpYnV0ZSgneGFkdmFuY2UnKSwgMTApLFxuICAgICAgICAgICAga2VybmluZzoge30sXG4gICAgICAgICAgICB0ZXh0dXJlOiBuZXcgY29yZS5UZXh0dXJlKHRleHR1cmUuYmFzZVRleHR1cmUsIHRleHR1cmVSZWN0KVxuXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgLy9wYXJzZSBrZXJuaW5nc1xuICAgIHZhciBrZXJuaW5ncyA9IHJlc291cmNlLmRhdGEuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2tlcm5pbmcnKTtcbiAgICBmb3IgKGkgPSAwOyBpIDwga2VybmluZ3MubGVuZ3RoOyBpKyspXG4gICAge1xuICAgICAgICB2YXIgZmlyc3QgPSBwYXJzZUludChrZXJuaW5nc1tpXS5nZXRBdHRyaWJ1dGUoJ2ZpcnN0JyksIDEwKTtcbiAgICAgICAgdmFyIHNlY29uZCA9IHBhcnNlSW50KGtlcm5pbmdzW2ldLmdldEF0dHJpYnV0ZSgnc2Vjb25kJyksIDEwKTtcbiAgICAgICAgdmFyIGFtb3VudCA9IHBhcnNlSW50KGtlcm5pbmdzW2ldLmdldEF0dHJpYnV0ZSgnYW1vdW50JyksIDEwKTtcblxuICAgICAgICBkYXRhLmNoYXJzW3NlY29uZF0ua2VybmluZ1tmaXJzdF0gPSBhbW91bnQ7XG4gICAgfVxuXG4gICAgcmVzb3VyY2UuYml0bWFwRm9udCA9IGRhdGE7XG5cbiAgICAvLyBJJ20gbGVhdmluZyB0aGlzIGFzIGEgdGVtcG9yYXJ5IGZpeCBzbyB3ZSBjYW4gdGVzdCB0aGUgYml0bWFwIGZvbnRzIGluIHYzXG4gICAgLy8gYnV0IGl0J3MgdmVyeSBsaWtlbHkgdG8gY2hhbmdlXG4gICAgZXh0cmFzLkJpdG1hcFRleHQuZm9udHNbZGF0YS5mb250XSA9IGRhdGE7XG59XG5cblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoKVxue1xuICAgIHJldHVybiBmdW5jdGlvbiAocmVzb3VyY2UsIG5leHQpXG4gICAge1xuICAgICAgICAvLyBza2lwIGlmIG5vIGRhdGEgb3Igbm90IHhtbCBkYXRhXG4gICAgICAgIGlmICghcmVzb3VyY2UuZGF0YSB8fCAhcmVzb3VyY2UuaXNYbWwpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiBuZXh0KCk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBza2lwIGlmIG5vdCBiaXRtYXAgZm9udCBkYXRhLCB1c2luZyBzb21lIHNpbGx5IGR1Y2stdHlwaW5nXG4gICAgICAgIGlmIChcbiAgICAgICAgICAgIHJlc291cmNlLmRhdGEuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ3BhZ2UnKS5sZW5ndGggPT09IDAgfHxcbiAgICAgICAgICAgIHJlc291cmNlLmRhdGEuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2luZm8nKS5sZW5ndGggPT09IDAgfHxcbiAgICAgICAgICAgIHJlc291cmNlLmRhdGEuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2luZm8nKVswXS5nZXRBdHRyaWJ1dGUoJ2ZhY2UnKSA9PT0gbnVsbFxuICAgICAgICAgICAgKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gbmV4dCgpO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIHhtbFVybCA9IHBhdGguZGlybmFtZShyZXNvdXJjZS51cmwpO1xuXG4gICAgICAgIGlmICh4bWxVcmwgPT09ICcuJykge1xuICAgICAgICAgICAgeG1sVXJsID0gJyc7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5iYXNlVXJsICYmIHhtbFVybCkge1xuICAgICAgICAgICAgLy8gaWYgYmFzZXVybCBoYXMgYSB0cmFpbGluZyBzbGFzaCB0aGVuIGFkZCBvbmUgdG8geG1sVXJsIHNvIHRoZSByZXBsYWNlIHdvcmtzIGJlbG93XG4gICAgICAgICAgICBpZiAodGhpcy5iYXNlVXJsLmNoYXJBdCh0aGlzLmJhc2VVcmwubGVuZ3RoIC0gMSkgPT09ICcvJykge1xuICAgICAgICAgICAgICAgIHhtbFVybCArPSAnLyc7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIHJlbW92ZSBiYXNlVXJsIGZyb20geG1sVXJsXG4gICAgICAgICAgICB4bWxVcmwgPSB4bWxVcmwucmVwbGFjZSh0aGlzLmJhc2VVcmwsICcnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGlmIHRoZXJlIGlzIGFuIHhtbFVybCBub3csIGl0IG5lZWRzIGEgdHJhaWxpbmcgc2xhc2guIEVuc3VyZSB0aGF0IGl0IGRvZXMgaWYgdGhlIHN0cmluZyBpc24ndCBlbXB0eS5cbiAgICAgICAgaWYgKHhtbFVybCAmJiB4bWxVcmwuY2hhckF0KHhtbFVybC5sZW5ndGggLSAxKSAhPT0gJy8nKSB7XG4gICAgICAgICAgICB4bWxVcmwgKz0gJy8nO1xuICAgICAgICB9XG4gICAgICAgIHZhciB0ZXh0dXJlVXJsID0geG1sVXJsICsgcmVzb3VyY2UuZGF0YS5nZXRFbGVtZW50c0J5VGFnTmFtZSgncGFnZScpWzBdLmdldEF0dHJpYnV0ZSgnZmlsZScpO1xuICAgICAgICBpZiAoY29yZS51dGlscy5UZXh0dXJlQ2FjaGVbdGV4dHVyZVVybF0pIHtcbiAgICAgICAgICAgIC8vcmV1c2UgZXhpc3RpbmcgdGV4dHVyZVxuICAgICAgICAgICAgcGFyc2UocmVzb3VyY2UsIGNvcmUudXRpbHMuVGV4dHVyZUNhY2hlW3RleHR1cmVVcmxdKTtcbiAgICAgICAgICAgIG5leHQoKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHZhciBsb2FkT3B0aW9ucyA9IHtcbiAgICAgICAgICAgICAgICBjcm9zc09yaWdpbjogcmVzb3VyY2UuY3Jvc3NPcmlnaW4sXG4gICAgICAgICAgICAgICAgbG9hZFR5cGU6IFJlc291cmNlLkxPQURfVFlQRS5JTUFHRSxcbiAgICAgICAgICAgICAgICBtZXRhZGF0YTogcmVzb3VyY2UubWV0YWRhdGEuaW1hZ2VNZXRhZGF0YVxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIC8vIGxvYWQgdGhlIHRleHR1cmUgZm9yIHRoZSBmb250XG4gICAgICAgICAgICB0aGlzLmFkZChyZXNvdXJjZS5uYW1lICsgJ19pbWFnZScsIHRleHR1cmVVcmwsIGxvYWRPcHRpb25zLCBmdW5jdGlvbiAocmVzKSB7XG4gICAgICAgICAgICAgICAgcGFyc2UocmVzb3VyY2UsIHJlcy50ZXh0dXJlKTtcbiAgICAgICAgICAgICAgICBuZXh0KCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH07XG59O1xuIiwiLyoqXG4gKiBAZmlsZSAgICAgICAgTWFpbiBleHBvcnQgb2YgdGhlIFBJWEkgbG9hZGVycyBsaWJyYXJ5XG4gKiBAYXV0aG9yICAgICAgTWF0IEdyb3ZlcyA8bWF0QGdvb2Rib3lkaWdpdGFsLmNvbT5cbiAqIEBjb3B5cmlnaHQgICAyMDEzLTIwMTUgR29vZEJveURpZ2l0YWxcbiAqIEBsaWNlbnNlICAgICB7QGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL3BpeGlqcy9waXhpLmpzL2Jsb2IvbWFzdGVyL0xJQ0VOU0V8TUlUIExpY2Vuc2V9XG4gKi9cblxuLyoqXG4gKiBAbmFtZXNwYWNlIFBJWEkubG9hZGVyc1xuICovXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgICBMb2FkZXI6ICAgICAgICAgICAgIHJlcXVpcmUoJy4vbG9hZGVyJyksXG5cbiAgICAvLyBwYXJzZXJzXG4gICAgYml0bWFwRm9udFBhcnNlcjogICByZXF1aXJlKCcuL2JpdG1hcEZvbnRQYXJzZXInKSxcbiAgICBzcHJpdGVzaGVldFBhcnNlcjogIHJlcXVpcmUoJy4vc3ByaXRlc2hlZXRQYXJzZXInKSxcbiAgICB0ZXh0dXJlUGFyc2VyOiAgICAgIHJlcXVpcmUoJy4vdGV4dHVyZVBhcnNlcicpLFxuICAgIFJlc291cmNlOiAgICAgICAgICAgcmVxdWlyZSgncmVzb3VyY2UtbG9hZGVyJykuUmVzb3VyY2Vcbn07XG4iLCJ2YXIgUmVzb3VyY2VMb2FkZXIgPSByZXF1aXJlKCdyZXNvdXJjZS1sb2FkZXInKSxcbiAgICB0ZXh0dXJlUGFyc2VyID0gcmVxdWlyZSgnLi90ZXh0dXJlUGFyc2VyJyksXG4gICAgc3ByaXRlc2hlZXRQYXJzZXIgPSByZXF1aXJlKCcuL3Nwcml0ZXNoZWV0UGFyc2VyJyksXG4gICAgYml0bWFwRm9udFBhcnNlciA9IHJlcXVpcmUoJy4vYml0bWFwRm9udFBhcnNlcicpO1xuXG4vKipcbiAqXG4gKiBUaGUgbmV3IGxvYWRlciwgZXh0ZW5kcyBSZXNvdXJjZSBMb2FkZXIgYnkgQ2hhZCBFbmdsZXIgOiBodHRwczovL2dpdGh1Yi5jb20vZW5nbGVyY2ovcmVzb3VyY2UtbG9hZGVyXG4gKlxuICogYGBganNcbiAqIHZhciBsb2FkZXIgPSBQSVhJLmxvYWRlcjsgLy8gcGl4aSBleHBvc2VzIGEgcHJlbWFkZSBpbnN0YW5jZSBmb3IgeW91IHRvIHVzZS5cbiAqIC8vb3JcbiAqIHZhciBsb2FkZXIgPSBuZXcgUElYSS5sb2FkZXJzLkxvYWRlcigpOyAvLyB5b3UgY2FuIGFsc28gY3JlYXRlIHlvdXIgb3duIGlmIHlvdSB3YW50XG4gKlxuICogbG9hZGVyLmFkZCgnYnVubnknLFwiZGF0YS9idW5ueS5wbmdcIik7XG4gKlxuICogbG9hZGVyLm9uY2UoJ2NvbXBsZXRlJyxvbkFzc2V0c0xvYWRlZCk7XG4gKlxuICogbG9hZGVyLmxvYWQoKTtcbiAqIGBgYFxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5SZXNvdXJjZUxvYWRlclxuICogQG1lbWJlcm9mIFBJWEkubG9hZGVyc1xuICogQHBhcmFtIFtiYXNlVXJsPScnXSB7c3RyaW5nfSBUaGUgYmFzZSB1cmwgZm9yIGFsbCByZXNvdXJjZXMgbG9hZGVkIGJ5IHRoaXMgbG9hZGVyLlxuICogQHBhcmFtIFtjb25jdXJyZW5jeT0xMF0ge251bWJlcn0gVGhlIG51bWJlciBvZiByZXNvdXJjZXMgdG8gbG9hZCBjb25jdXJyZW50bHkuXG4gKi9cbmZ1bmN0aW9uIExvYWRlcihiYXNlVXJsLCBjb25jdXJyZW5jeSlcbntcbiAgICBSZXNvdXJjZUxvYWRlci5jYWxsKHRoaXMsIGJhc2VVcmwsIGNvbmN1cnJlbmN5KTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgTG9hZGVyLl9waXhpTWlkZGxld2FyZS5sZW5ndGg7ICsraSkge1xuICAgICAgICB0aGlzLnVzZShMb2FkZXIuX3BpeGlNaWRkbGV3YXJlW2ldKCkpO1xuICAgIH1cbn1cblxuTG9hZGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoUmVzb3VyY2VMb2FkZXIucHJvdG90eXBlKTtcbkxvYWRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBMb2FkZXI7XG5cbm1vZHVsZS5leHBvcnRzID0gTG9hZGVyO1xuXG5Mb2FkZXIuX3BpeGlNaWRkbGV3YXJlID0gW1xuICAgIC8vIHBhcnNlIGFueSBibG9iIGludG8gbW9yZSB1c2FibGUgb2JqZWN0cyAoZS5nLiBJbWFnZSlcbiAgICBSZXNvdXJjZUxvYWRlci5taWRkbGV3YXJlLnBhcnNpbmcuYmxvYixcbiAgICAvLyBwYXJzZSBhbnkgSW1hZ2Ugb2JqZWN0cyBpbnRvIHRleHR1cmVzXG4gICAgdGV4dHVyZVBhcnNlcixcbiAgICAvLyBwYXJzZSBhbnkgc3ByaXRlc2hlZXQgZGF0YSBpbnRvIG11bHRpcGxlIHRleHR1cmVzXG4gICAgc3ByaXRlc2hlZXRQYXJzZXIsXG4gICAgLy8gcGFyc2UgYW55IHNwcml0ZXNoZWV0IGRhdGEgaW50byBtdWx0aXBsZSB0ZXh0dXJlc1xuICAgIGJpdG1hcEZvbnRQYXJzZXJcbl07XG5cbkxvYWRlci5hZGRQaXhpTWlkZGxld2FyZSA9IGZ1bmN0aW9uIChmbikge1xuICAgIExvYWRlci5fcGl4aU1pZGRsZXdhcmUucHVzaChmbik7XG59O1xuXG4vLyBBZGQgY3VzdG9tIGV4dGVudGlvbnNcbnZhciBSZXNvdXJjZSA9IFJlc291cmNlTG9hZGVyLlJlc291cmNlO1xuXG5SZXNvdXJjZS5zZXRFeHRlbnNpb25YaHJUeXBlKCdmbnQnLCBSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRS5ET0NVTUVOVCk7XG4iLCJ2YXIgUmVzb3VyY2UgPSByZXF1aXJlKCdyZXNvdXJjZS1sb2FkZXInKS5SZXNvdXJjZSxcbiAgICBwYXRoID0gcmVxdWlyZSgncGF0aCcpLFxuICAgIGNvcmUgPSByZXF1aXJlKCcuLi9jb3JlJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKClcbntcbiAgICByZXR1cm4gZnVuY3Rpb24gKHJlc291cmNlLCBuZXh0KVxuICAgIHtcbiAgICAgICAgLy8gc2tpcCBpZiBubyBkYXRhLCBpdHMgbm90IGpzb24sIG9yIGl0IGlzbid0IHNwcml0ZXNoZWV0IGRhdGFcbiAgICAgICAgaWYgKCFyZXNvdXJjZS5kYXRhIHx8ICFyZXNvdXJjZS5pc0pzb24gfHwgIXJlc291cmNlLmRhdGEuZnJhbWVzKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gbmV4dCgpO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGxvYWRPcHRpb25zID0ge1xuICAgICAgICAgICAgY3Jvc3NPcmlnaW46IHJlc291cmNlLmNyb3NzT3JpZ2luLFxuICAgICAgICAgICAgbG9hZFR5cGU6IFJlc291cmNlLkxPQURfVFlQRS5JTUFHRSxcbiAgICAgICAgICAgIG1ldGFkYXRhOiByZXNvdXJjZS5tZXRhZGF0YS5pbWFnZU1ldGFkYXRhXG4gICAgICAgIH07XG5cbiAgICAgICAgdmFyIHJvdXRlID0gcGF0aC5kaXJuYW1lKHJlc291cmNlLnVybC5yZXBsYWNlKHRoaXMuYmFzZVVybCwgJycpKTtcblxuICAgICAgICB2YXIgcmVzb2x1dGlvbiA9IGNvcmUudXRpbHMuZ2V0UmVzb2x1dGlvbk9mVXJsKCByZXNvdXJjZS51cmwgKTtcblxuICAgICAgICAvLyBsb2FkIHRoZSBpbWFnZSBmb3IgdGhpcyBzaGVldFxuICAgICAgICB0aGlzLmFkZChyZXNvdXJjZS5uYW1lICsgJ19pbWFnZScsIHJvdXRlICsgJy8nICsgcmVzb3VyY2UuZGF0YS5tZXRhLmltYWdlLCBsb2FkT3B0aW9ucywgZnVuY3Rpb24gKHJlcylcbiAgICAgICAge1xuICAgICAgICAgICAgcmVzb3VyY2UudGV4dHVyZXMgPSB7fTtcblxuICAgICAgICAgICAgdmFyIGZyYW1lcyA9IHJlc291cmNlLmRhdGEuZnJhbWVzO1xuXG4gICAgICAgICAgICBmb3IgKHZhciBpIGluIGZyYW1lcylcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB2YXIgcmVjdCA9IGZyYW1lc1tpXS5mcmFtZTtcblxuICAgICAgICAgICAgICAgIGlmIChyZWN0KVxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHNpemUgPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICB2YXIgdHJpbSA9IG51bGw7XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKGZyYW1lc1tpXS5yb3RhdGVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzaXplID0gbmV3IGNvcmUuUmVjdGFuZ2xlKHJlY3QueCwgcmVjdC55LCByZWN0LmgsIHJlY3Qudyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzaXplID0gbmV3IGNvcmUuUmVjdGFuZ2xlKHJlY3QueCwgcmVjdC55LCByZWN0LncsIHJlY3QuaCk7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAvLyAgQ2hlY2sgdG8gc2VlIGlmIHRoZSBzcHJpdGUgaXMgdHJpbW1lZFxuICAgICAgICAgICAgICAgICAgICBpZiAoZnJhbWVzW2ldLnRyaW1tZWQpXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRyaW0gPSBuZXcgY29yZS5SZWN0YW5nbGUoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJhbWVzW2ldLnNwcml0ZVNvdXJjZVNpemUueCAvIHJlc29sdXRpb24sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJhbWVzW2ldLnNwcml0ZVNvdXJjZVNpemUueSAvIHJlc29sdXRpb24sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJhbWVzW2ldLnNvdXJjZVNpemUudyAvIHJlc29sdXRpb24sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJhbWVzW2ldLnNvdXJjZVNpemUuaCAvIHJlc29sdXRpb25cbiAgICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgLy8gZmxpcCB0aGUgd2lkdGggYW5kIGhlaWdodCFcbiAgICAgICAgICAgICAgICAgICAgaWYgKGZyYW1lc1tpXS5yb3RhdGVkKVxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgdGVtcCA9IHNpemUud2lkdGg7XG4gICAgICAgICAgICAgICAgICAgICAgICBzaXplLndpZHRoID0gc2l6ZS5oZWlnaHQ7XG4gICAgICAgICAgICAgICAgICAgICAgICBzaXplLmhlaWdodCA9IHRlbXA7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBzaXplLnggLz0gcmVzb2x1dGlvbjtcbiAgICAgICAgICAgICAgICAgICAgc2l6ZS55IC89IHJlc29sdXRpb247XG4gICAgICAgICAgICAgICAgICAgIHNpemUud2lkdGggLz0gcmVzb2x1dGlvbjtcbiAgICAgICAgICAgICAgICAgICAgc2l6ZS5oZWlnaHQgLz0gcmVzb2x1dGlvbjtcblxuICAgICAgICAgICAgICAgICAgICByZXNvdXJjZS50ZXh0dXJlc1tpXSA9IG5ldyBjb3JlLlRleHR1cmUocmVzLnRleHR1cmUuYmFzZVRleHR1cmUsIHNpemUsIHNpemUuY2xvbmUoKSwgdHJpbSwgZnJhbWVzW2ldLnJvdGF0ZWQpO1xuXG4gICAgICAgICAgICAgICAgICAgIC8vIGxldHMgYWxzbyBhZGQgdGhlIGZyYW1lIHRvIHBpeGkncyBnbG9iYWwgY2FjaGUgZm9yIGZyb21GcmFtZSBhbmQgZnJvbUltYWdlIGZ1bmN0aW9uc1xuICAgICAgICAgICAgICAgICAgICBjb3JlLnV0aWxzLlRleHR1cmVDYWNoZVtpXSA9IHJlc291cmNlLnRleHR1cmVzW2ldO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgbmV4dCgpO1xuICAgICAgICB9KTtcbiAgICB9O1xufTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vY29yZScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICgpXG57XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChyZXNvdXJjZSwgbmV4dClcbiAgICB7XG4gICAgICAgIC8vIGNyZWF0ZSBhIG5ldyB0ZXh0dXJlIGlmIHRoZSBkYXRhIGlzIGFuIEltYWdlIG9iamVjdFxuICAgICAgICBpZiAocmVzb3VyY2UuZGF0YSAmJiByZXNvdXJjZS5pc0ltYWdlKVxuICAgICAgICB7XG4gICAgICAgICAgICB2YXIgYmFzZVRleHR1cmUgPSBuZXcgY29yZS5CYXNlVGV4dHVyZShyZXNvdXJjZS5kYXRhLCBudWxsLCBjb3JlLnV0aWxzLmdldFJlc29sdXRpb25PZlVybChyZXNvdXJjZS51cmwpKTtcbiAgICAgICAgICAgIGJhc2VUZXh0dXJlLmltYWdlVXJsID0gcmVzb3VyY2UudXJsO1xuICAgICAgICAgICAgcmVzb3VyY2UudGV4dHVyZSA9IG5ldyBjb3JlLlRleHR1cmUoYmFzZVRleHR1cmUpO1xuICAgICAgICAgICAgLy8gbGV0cyBhbHNvIGFkZCB0aGUgZnJhbWUgdG8gcGl4aSdzIGdsb2JhbCBjYWNoZSBmb3IgZnJvbUZyYW1lIGFuZCBmcm9tSW1hZ2UgZnVjbnRpb25zXG4gICAgICAgICAgICBjb3JlLnV0aWxzLkJhc2VUZXh0dXJlQ2FjaGVbcmVzb3VyY2UudXJsXSA9IGJhc2VUZXh0dXJlO1xuICAgICAgICAgICAgY29yZS51dGlscy5UZXh0dXJlQ2FjaGVbcmVzb3VyY2UudXJsXSA9IHJlc291cmNlLnRleHR1cmU7XG4gICAgICAgIH1cblxuICAgICAgICBuZXh0KCk7XG4gICAgfTtcbn07XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uL2NvcmUnKSxcbiAgICB0ZW1wUG9pbnQgPSBuZXcgY29yZS5Qb2ludCgpLFxuICAgIHRlbXBQb2x5Z29uID0gbmV3IGNvcmUuUG9seWdvbigpO1xuXG4vKipcbiAqIEJhc2UgbWVzaCBjbGFzc1xuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLkNvbnRhaW5lclxuICogQG1lbWJlcm9mIFBJWEkubWVzaFxuICogQHBhcmFtIHRleHR1cmUge1BJWEkuVGV4dHVyZX0gVGhlIHRleHR1cmUgdG8gdXNlXG4gKiBAcGFyYW0gW3ZlcnRpY2VzXSB7RmxvYXQzMkFycmF5fSBpZiB5b3Ugd2FudCB0byBzcGVjaWZ5IHRoZSB2ZXJ0aWNlc1xuICogQHBhcmFtIFt1dnNdIHtGbG9hdDMyQXJyYXl9IGlmIHlvdSB3YW50IHRvIHNwZWNpZnkgdGhlIHV2c1xuICogQHBhcmFtIFtpbmRpY2VzXSB7VWludDE2QXJyYXl9IGlmIHlvdSB3YW50IHRvIHNwZWNpZnkgdGhlIGluZGljZXNcbiAqIEBwYXJhbSBbZHJhd01vZGVdIHtudW1iZXJ9IHRoZSBkcmF3TW9kZSwgY2FuIGJlIGFueSBvZiB0aGUgTWVzaC5EUkFXX01PREVTIGNvbnN0c1xuICovXG5mdW5jdGlvbiBNZXNoKHRleHR1cmUsIHZlcnRpY2VzLCB1dnMsIGluZGljZXMsIGRyYXdNb2RlKVxue1xuICAgIGNvcmUuQ29udGFpbmVyLmNhbGwodGhpcyk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgdGV4dHVyZSBvZiB0aGUgTWVzaFxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5UZXh0dXJlfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fdGV4dHVyZSA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgVXZzIG9mIHRoZSBNZXNoXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtGbG9hdDMyQXJyYXl9XG4gICAgICovXG4gICAgdGhpcy51dnMgPSB1dnMgfHwgbmV3IEZsb2F0MzJBcnJheShbMCwgMCxcbiAgICAgICAgMSwgMCxcbiAgICAgICAgMSwgMSxcbiAgICAgICAgMCwgMV0pO1xuXG4gICAgLyoqXG4gICAgICogQW4gYXJyYXkgb2YgdmVydGljZXNcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge0Zsb2F0MzJBcnJheX1cbiAgICAgKi9cbiAgICB0aGlzLnZlcnRpY2VzID0gdmVydGljZXMgfHwgbmV3IEZsb2F0MzJBcnJheShbMCwgMCxcbiAgICAgICAgMTAwLCAwLFxuICAgICAgICAxMDAsIDEwMCxcbiAgICAgICAgMCwgMTAwXSk7XG5cbiAgICAvKlxuICAgICAqIEBtZW1iZXIge1VpbnQxNkFycmF5fSBBbiBhcnJheSBjb250YWluaW5nIHRoZSBpbmRpY2VzIG9mIHRoZSB2ZXJ0aWNlc1xuICAgICAqL1xuICAgIC8vICBUT0RPIGF1dG8gZ2VuZXJhdGUgdGhpcyBiYXNlZCBvbiBkcmF3IG1vZGUhXG4gICAgdGhpcy5pbmRpY2VzID0gaW5kaWNlcyB8fCBuZXcgVWludDE2QXJyYXkoWzAsIDEsIDMsIDJdKTtcblxuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgdGhlIE1lc2ggaXMgZGlydHkgb3Igbm90XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqL1xuICAgIHRoaXMuZGlydHkgPSB0cnVlO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGJsZW5kIG1vZGUgdG8gYmUgYXBwbGllZCB0byB0aGUgc3ByaXRlLiBTZXQgdG8gYFBJWEkuQkxFTkRfTU9ERVMuTk9STUFMYCB0byByZW1vdmUgYW55IGJsZW5kIG1vZGUuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgUElYSS5CTEVORF9NT0RFUy5OT1JNQUxcbiAgICAgKiBAc2VlIFBJWEkuQkxFTkRfTU9ERVNcbiAgICAgKi9cbiAgICB0aGlzLmJsZW5kTW9kZSA9IGNvcmUuQkxFTkRfTU9ERVMuTk9STUFMO1xuXG4gICAgLyoqXG4gICAgICogVHJpYW5nbGVzIGluIGNhbnZhcyBtb2RlIGFyZSBhdXRvbWF0aWNhbGx5IGFudGlhbGlhc2VkLCB1c2UgdGhpcyB2YWx1ZSB0byBmb3JjZSB0cmlhbmdsZXMgdG8gb3ZlcmxhcCBhIGJpdCB3aXRoIGVhY2ggb3RoZXIuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy5jYW52YXNQYWRkaW5nID0gMDtcblxuICAgIC8qKlxuICAgICAqIFRoZSB3YXkgdGhlIE1lc2ggc2hvdWxkIGJlIGRyYXduLCBjYW4gYmUgYW55IG9mIHRoZSB7QGxpbmsgUElYSS5tZXNoLk1lc2guRFJBV19NT0RFU30gY29uc3RzXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQHNlZSBQSVhJLm1lc2guTWVzaC5EUkFXX01PREVTXG4gICAgICovXG4gICAgdGhpcy5kcmF3TW9kZSA9IGRyYXdNb2RlIHx8IE1lc2guRFJBV19NT0RFUy5UUklBTkdMRV9NRVNIO1xuXG4gICAgLy8gcnVuIHRleHR1cmUgc2V0dGVyO1xuICAgIHRoaXMudGV4dHVyZSA9IHRleHR1cmU7XG5cbiAgICAgLyoqXG4gICAgICogVGhlIGRlZmF1bHQgc2hhZGVyIHRoYXQgaXMgdXNlZCBpZiBhIG1lc2ggZG9lc24ndCBoYXZlIGEgbW9yZSBzcGVjaWZpYyBvbmUuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlNoYWRlcn1cbiAgICAgKi9cbiAgICB0aGlzLnNoYWRlciA9IG51bGw7XG59XG5cbi8vIGNvbnN0cnVjdG9yXG5NZXNoLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoY29yZS5Db250YWluZXIucHJvdG90eXBlKTtcbk1lc2gucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gTWVzaDtcbm1vZHVsZS5leHBvcnRzID0gTWVzaDtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoTWVzaC5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBUaGUgdGV4dHVyZSB0aGF0IHRoZSBzcHJpdGUgaXMgdXNpbmdcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuVGV4dHVyZX1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5tZXNoLk1lc2gjXG4gICAgICovXG4gICAgdGV4dHVyZToge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiAgdGhpcy5fdGV4dHVyZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGlmICh0aGlzLl90ZXh0dXJlID09PSB2YWx1ZSlcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuX3RleHR1cmUgPSB2YWx1ZTtcblxuICAgICAgICAgICAgaWYgKHZhbHVlKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIC8vIHdhaXQgZm9yIHRoZSB0ZXh0dXJlIHRvIGxvYWRcbiAgICAgICAgICAgICAgICBpZiAodmFsdWUuYmFzZVRleHR1cmUuaGFzTG9hZGVkKVxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fb25UZXh0dXJlVXBkYXRlKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlLm9uY2UoJ3VwZGF0ZScsIHRoaXMuX29uVGV4dHVyZVVwZGF0ZSwgdGhpcyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxufSk7XG5cbi8qKlxuICogUmVuZGVycyB0aGUgb2JqZWN0IHVzaW5nIHRoZSBXZWJHTCByZW5kZXJlclxuICpcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5XZWJHTFJlbmRlcmVyfSBhIHJlZmVyZW5jZSB0byB0aGUgV2ViR0wgcmVuZGVyZXJcbiAqIEBwcml2YXRlXG4gKi9cbk1lc2gucHJvdG90eXBlLl9yZW5kZXJXZWJHTCA9IGZ1bmN0aW9uIChyZW5kZXJlcilcbntcbiAgICByZW5kZXJlci5zZXRPYmplY3RSZW5kZXJlcihyZW5kZXJlci5wbHVnaW5zLm1lc2gpO1xuICAgIHJlbmRlcmVyLnBsdWdpbnMubWVzaC5yZW5kZXIodGhpcyk7XG59O1xuXG4vKipcbiAqIFJlbmRlcnMgdGhlIG9iamVjdCB1c2luZyB0aGUgQ2FudmFzIHJlbmRlcmVyXG4gKlxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLkNhbnZhc1JlbmRlcmVyfVxuICogQHByaXZhdGVcbiAqL1xuTWVzaC5wcm90b3R5cGUuX3JlbmRlckNhbnZhcyA9IGZ1bmN0aW9uIChyZW5kZXJlcilcbntcbiAgICB2YXIgY29udGV4dCA9IHJlbmRlcmVyLmNvbnRleHQ7XG5cbiAgICB2YXIgdHJhbnNmb3JtID0gdGhpcy53b3JsZFRyYW5zZm9ybTtcblxuICAgIGlmIChyZW5kZXJlci5yb3VuZFBpeGVscylcbiAgICB7XG4gICAgICAgIGNvbnRleHQuc2V0VHJhbnNmb3JtKHRyYW5zZm9ybS5hLCB0cmFuc2Zvcm0uYiwgdHJhbnNmb3JtLmMsIHRyYW5zZm9ybS5kLCB0cmFuc2Zvcm0udHggfCAwLCB0cmFuc2Zvcm0udHkgfCAwKTtcbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgY29udGV4dC5zZXRUcmFuc2Zvcm0odHJhbnNmb3JtLmEsIHRyYW5zZm9ybS5iLCB0cmFuc2Zvcm0uYywgdHJhbnNmb3JtLmQsIHRyYW5zZm9ybS50eCwgdHJhbnNmb3JtLnR5KTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5kcmF3TW9kZSA9PT0gTWVzaC5EUkFXX01PREVTLlRSSUFOR0xFX01FU0gpXG4gICAge1xuICAgICAgICB0aGlzLl9yZW5kZXJDYW52YXNUcmlhbmdsZU1lc2goY29udGV4dCk7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHRoaXMuX3JlbmRlckNhbnZhc1RyaWFuZ2xlcyhjb250ZXh0KTtcbiAgICB9XG59O1xuXG4vKipcbiAqIERyYXdzIHRoZSBvYmplY3QgaW4gVHJpYW5nbGUgTWVzaCBtb2RlIHVzaW5nIGNhbnZhc1xuICpcbiAqIEBwYXJhbSBjb250ZXh0IHtDYW52YXNSZW5kZXJpbmdDb250ZXh0MkR9IHRoZSBjdXJyZW50IGRyYXdpbmcgY29udGV4dFxuICogQHByaXZhdGVcbiAqL1xuTWVzaC5wcm90b3R5cGUuX3JlbmRlckNhbnZhc1RyaWFuZ2xlTWVzaCA9IGZ1bmN0aW9uIChjb250ZXh0KVxue1xuICAgIC8vIGRyYXcgdHJpYW5nbGVzISFcbiAgICB2YXIgdmVydGljZXMgPSB0aGlzLnZlcnRpY2VzO1xuICAgIHZhciB1dnMgPSB0aGlzLnV2cztcblxuICAgIHZhciBsZW5ndGggPSB2ZXJ0aWNlcy5sZW5ndGggLyAyO1xuICAgIC8vIHRoaXMuY291bnQrKztcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoIC0gMjsgaSsrKVxuICAgIHtcbiAgICAgICAgLy8gZHJhdyBzb21lIHRyaWFuZ2xlcyFcbiAgICAgICAgdmFyIGluZGV4ID0gaSAqIDI7XG4gICAgICAgIHRoaXMuX3JlbmRlckNhbnZhc0RyYXdUcmlhbmdsZShjb250ZXh0LCB2ZXJ0aWNlcywgdXZzLCBpbmRleCwgKGluZGV4ICsgMiksIChpbmRleCArIDQpKTtcbiAgICB9XG59O1xuXG4vKipcbiAqIERyYXdzIHRoZSBvYmplY3QgaW4gdHJpYW5nbGUgbW9kZSB1c2luZyBjYW52YXNcbiAqXG4gKiBAcGFyYW0gY29udGV4dCB7Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEfSB0aGUgY3VycmVudCBkcmF3aW5nIGNvbnRleHRcbiAqIEBwcml2YXRlXG4gKi9cbk1lc2gucHJvdG90eXBlLl9yZW5kZXJDYW52YXNUcmlhbmdsZXMgPSBmdW5jdGlvbiAoY29udGV4dClcbntcbiAgICAvLyBkcmF3IHRyaWFuZ2xlcyEhXG4gICAgdmFyIHZlcnRpY2VzID0gdGhpcy52ZXJ0aWNlcztcbiAgICB2YXIgdXZzID0gdGhpcy51dnM7XG4gICAgdmFyIGluZGljZXMgPSB0aGlzLmluZGljZXM7XG5cbiAgICB2YXIgbGVuZ3RoID0gaW5kaWNlcy5sZW5ndGg7XG4gICAgLy8gdGhpcy5jb3VudCsrO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7IGkgKz0gMylcbiAgICB7XG4gICAgICAgIC8vIGRyYXcgc29tZSB0cmlhbmdsZXMhXG4gICAgICAgIHZhciBpbmRleDAgPSBpbmRpY2VzW2ldICogMiwgaW5kZXgxID0gaW5kaWNlc1tpICsgMV0gKiAyLCBpbmRleDIgPSBpbmRpY2VzW2kgKyAyXSAqIDI7XG4gICAgICAgIHRoaXMuX3JlbmRlckNhbnZhc0RyYXdUcmlhbmdsZShjb250ZXh0LCB2ZXJ0aWNlcywgdXZzLCBpbmRleDAsIGluZGV4MSwgaW5kZXgyKTtcbiAgICB9XG59O1xuXG4vKipcbiAqIERyYXdzIG9uZSBvZiB0aGUgdHJpYW5nbGVzIHRoYXQgZm9ybSB0aGlzIE1lc2hcbiAqXG4gKiBAcGFyYW0gY29udGV4dCB7Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEfSB0aGUgY3VycmVudCBkcmF3aW5nIGNvbnRleHRcbiAqIEBwYXJhbSB2ZXJ0aWNlcyB7RmxvYXQzMkFycmF5fSBhIHJlZmVyZW5jZSB0byB0aGUgdmVydGljZXMgb2YgdGhlIE1lc2hcbiAqIEBwYXJhbSB1dnMge0Zsb2F0MzJBcnJheX0gYSByZWZlcmVuY2UgdG8gdGhlIHV2cyBvZiB0aGUgTWVzaFxuICogQHBhcmFtIGluZGV4MCB7bnVtYmVyfSB0aGUgaW5kZXggb2YgdGhlIGZpcnN0IHZlcnRleFxuICogQHBhcmFtIGluZGV4MSB7bnVtYmVyfSB0aGUgaW5kZXggb2YgdGhlIHNlY29uZCB2ZXJ0ZXhcbiAqIEBwYXJhbSBpbmRleDIge251bWJlcn0gdGhlIGluZGV4IG9mIHRoZSB0aGlyZCB2ZXJ0ZXhcbiAqIEBwcml2YXRlXG4gKi9cbk1lc2gucHJvdG90eXBlLl9yZW5kZXJDYW52YXNEcmF3VHJpYW5nbGUgPSBmdW5jdGlvbiAoY29udGV4dCwgdmVydGljZXMsIHV2cywgaW5kZXgwLCBpbmRleDEsIGluZGV4MilcbntcbiAgICB2YXIgdGV4dHVyZVNvdXJjZSA9IHRoaXMuX3RleHR1cmUuYmFzZVRleHR1cmUuc291cmNlO1xuICAgIHZhciB0ZXh0dXJlV2lkdGggPSB0aGlzLl90ZXh0dXJlLmJhc2VUZXh0dXJlLndpZHRoO1xuICAgIHZhciB0ZXh0dXJlSGVpZ2h0ID0gdGhpcy5fdGV4dHVyZS5iYXNlVGV4dHVyZS5oZWlnaHQ7XG5cbiAgICB2YXIgeDAgPSB2ZXJ0aWNlc1tpbmRleDBdLCB4MSA9IHZlcnRpY2VzW2luZGV4MV0sIHgyID0gdmVydGljZXNbaW5kZXgyXTtcbiAgICB2YXIgeTAgPSB2ZXJ0aWNlc1tpbmRleDAgKyAxXSwgeTEgPSB2ZXJ0aWNlc1tpbmRleDEgKyAxXSwgeTIgPSB2ZXJ0aWNlc1tpbmRleDIgKyAxXTtcblxuICAgIHZhciB1MCA9IHV2c1tpbmRleDBdICogdGV4dHVyZVdpZHRoLCB1MSA9IHV2c1tpbmRleDFdICogdGV4dHVyZVdpZHRoLCB1MiA9IHV2c1tpbmRleDJdICogdGV4dHVyZVdpZHRoO1xuICAgIHZhciB2MCA9IHV2c1tpbmRleDAgKyAxXSAqIHRleHR1cmVIZWlnaHQsIHYxID0gdXZzW2luZGV4MSArIDFdICogdGV4dHVyZUhlaWdodCwgdjIgPSB1dnNbaW5kZXgyICsgMV0gKiB0ZXh0dXJlSGVpZ2h0O1xuXG4gICAgaWYgKHRoaXMuY2FudmFzUGFkZGluZyA+IDApXG4gICAge1xuICAgICAgICB2YXIgcGFkZGluZ1ggPSB0aGlzLmNhbnZhc1BhZGRpbmcgLyB0aGlzLndvcmxkVHJhbnNmb3JtLmE7XG4gICAgICAgIHZhciBwYWRkaW5nWSA9IHRoaXMuY2FudmFzUGFkZGluZyAvIHRoaXMud29ybGRUcmFuc2Zvcm0uZDtcbiAgICAgICAgdmFyIGNlbnRlclggPSAoeDAgKyB4MSArIHgyKSAvIDM7XG4gICAgICAgIHZhciBjZW50ZXJZID0gKHkwICsgeTEgKyB5MikgLyAzO1xuXG4gICAgICAgIHZhciBub3JtWCA9IHgwIC0gY2VudGVyWDtcbiAgICAgICAgdmFyIG5vcm1ZID0geTAgLSBjZW50ZXJZO1xuXG4gICAgICAgIHZhciBkaXN0ID0gTWF0aC5zcXJ0KG5vcm1YICogbm9ybVggKyBub3JtWSAqIG5vcm1ZKTtcbiAgICAgICAgeDAgPSBjZW50ZXJYICsgKG5vcm1YIC8gZGlzdCkgKiAoZGlzdCArIHBhZGRpbmdYKTtcbiAgICAgICAgeTAgPSBjZW50ZXJZICsgKG5vcm1ZIC8gZGlzdCkgKiAoZGlzdCArIHBhZGRpbmdZKTtcblxuICAgICAgICAvL1xuXG4gICAgICAgIG5vcm1YID0geDEgLSBjZW50ZXJYO1xuICAgICAgICBub3JtWSA9IHkxIC0gY2VudGVyWTtcblxuICAgICAgICBkaXN0ID0gTWF0aC5zcXJ0KG5vcm1YICogbm9ybVggKyBub3JtWSAqIG5vcm1ZKTtcbiAgICAgICAgeDEgPSBjZW50ZXJYICsgKG5vcm1YIC8gZGlzdCkgKiAoZGlzdCArIHBhZGRpbmdYKTtcbiAgICAgICAgeTEgPSBjZW50ZXJZICsgKG5vcm1ZIC8gZGlzdCkgKiAoZGlzdCArIHBhZGRpbmdZKTtcblxuICAgICAgICBub3JtWCA9IHgyIC0gY2VudGVyWDtcbiAgICAgICAgbm9ybVkgPSB5MiAtIGNlbnRlclk7XG5cbiAgICAgICAgZGlzdCA9IE1hdGguc3FydChub3JtWCAqIG5vcm1YICsgbm9ybVkgKiBub3JtWSk7XG4gICAgICAgIHgyID0gY2VudGVyWCArIChub3JtWCAvIGRpc3QpICogKGRpc3QgKyBwYWRkaW5nWCk7XG4gICAgICAgIHkyID0gY2VudGVyWSArIChub3JtWSAvIGRpc3QpICogKGRpc3QgKyBwYWRkaW5nWSk7XG4gICAgfVxuXG4gICAgY29udGV4dC5zYXZlKCk7XG4gICAgY29udGV4dC5iZWdpblBhdGgoKTtcblxuXG4gICAgY29udGV4dC5tb3ZlVG8oeDAsIHkwKTtcbiAgICBjb250ZXh0LmxpbmVUbyh4MSwgeTEpO1xuICAgIGNvbnRleHQubGluZVRvKHgyLCB5Mik7XG5cbiAgICBjb250ZXh0LmNsb3NlUGF0aCgpO1xuXG4gICAgY29udGV4dC5jbGlwKCk7XG5cbiAgICAvLyBDb21wdXRlIG1hdHJpeCB0cmFuc2Zvcm1cbiAgICB2YXIgZGVsdGEgPSAgKHUwICogdjEpICAgICAgKyAodjAgKiB1MikgICAgICArICh1MSAqIHYyKSAgICAgIC0gKHYxICogdTIpICAgICAgLSAodjAgKiB1MSkgICAgICAtICh1MCAqIHYyKTtcbiAgICB2YXIgZGVsdGFBID0gKHgwICogdjEpICAgICAgKyAodjAgKiB4MikgICAgICArICh4MSAqIHYyKSAgICAgIC0gKHYxICogeDIpICAgICAgLSAodjAgKiB4MSkgICAgICAtICh4MCAqIHYyKTtcbiAgICB2YXIgZGVsdGFCID0gKHUwICogeDEpICAgICAgKyAoeDAgKiB1MikgICAgICArICh1MSAqIHgyKSAgICAgIC0gKHgxICogdTIpICAgICAgLSAoeDAgKiB1MSkgICAgICAtICh1MCAqIHgyKTtcbiAgICB2YXIgZGVsdGFDID0gKHUwICogdjEgKiB4MikgKyAodjAgKiB4MSAqIHUyKSArICh4MCAqIHUxICogdjIpIC0gKHgwICogdjEgKiB1MikgLSAodjAgKiB1MSAqIHgyKSAtICh1MCAqIHgxICogdjIpO1xuICAgIHZhciBkZWx0YUQgPSAoeTAgKiB2MSkgICAgICArICh2MCAqIHkyKSAgICAgICsgKHkxICogdjIpICAgICAgLSAodjEgKiB5MikgICAgICAtICh2MCAqIHkxKSAgICAgIC0gKHkwICogdjIpO1xuICAgIHZhciBkZWx0YUUgPSAodTAgKiB5MSkgICAgICArICh5MCAqIHUyKSAgICAgICsgKHUxICogeTIpICAgICAgLSAoeTEgKiB1MikgICAgICAtICh5MCAqIHUxKSAgICAgIC0gKHUwICogeTIpO1xuICAgIHZhciBkZWx0YUYgPSAodTAgKiB2MSAqIHkyKSArICh2MCAqIHkxICogdTIpICsgKHkwICogdTEgKiB2MikgLSAoeTAgKiB2MSAqIHUyKSAtICh2MCAqIHUxICogeTIpIC0gKHUwICogeTEgKiB2Mik7XG5cbiAgICBjb250ZXh0LnRyYW5zZm9ybShkZWx0YUEgLyBkZWx0YSwgZGVsdGFEIC8gZGVsdGEsXG4gICAgICAgIGRlbHRhQiAvIGRlbHRhLCBkZWx0YUUgLyBkZWx0YSxcbiAgICAgICAgZGVsdGFDIC8gZGVsdGEsIGRlbHRhRiAvIGRlbHRhKTtcblxuICAgIGNvbnRleHQuZHJhd0ltYWdlKHRleHR1cmVTb3VyY2UsIDAsIDApO1xuICAgIGNvbnRleHQucmVzdG9yZSgpO1xufTtcblxuXG5cbi8qKlxuICogUmVuZGVycyBhIGZsYXQgTWVzaFxuICpcbiAqIEBwYXJhbSBNZXNoIHtQSVhJLm1lc2guTWVzaH0gVGhlIE1lc2ggdG8gcmVuZGVyXG4gKiBAcHJpdmF0ZVxuICovXG5NZXNoLnByb3RvdHlwZS5yZW5kZXJNZXNoRmxhdCA9IGZ1bmN0aW9uIChNZXNoKVxue1xuICAgIHZhciBjb250ZXh0ID0gdGhpcy5jb250ZXh0O1xuICAgIHZhciB2ZXJ0aWNlcyA9IE1lc2gudmVydGljZXM7XG5cbiAgICB2YXIgbGVuZ3RoID0gdmVydGljZXMubGVuZ3RoLzI7XG4gICAgLy8gdGhpcy5jb3VudCsrO1xuXG4gICAgY29udGV4dC5iZWdpblBhdGgoKTtcbiAgICBmb3IgKHZhciBpPTE7IGkgPCBsZW5ndGgtMjsgaSsrKVxuICAgIHtcbiAgICAgICAgLy8gZHJhdyBzb21lIHRyaWFuZ2xlcyFcbiAgICAgICAgdmFyIGluZGV4ID0gaSoyO1xuXG4gICAgICAgIHZhciB4MCA9IHZlcnRpY2VzW2luZGV4XSwgICB4MSA9IHZlcnRpY2VzW2luZGV4KzJdLCB4MiA9IHZlcnRpY2VzW2luZGV4KzRdO1xuICAgICAgICB2YXIgeTAgPSB2ZXJ0aWNlc1tpbmRleCsxXSwgeTEgPSB2ZXJ0aWNlc1tpbmRleCszXSwgeTIgPSB2ZXJ0aWNlc1tpbmRleCs1XTtcblxuICAgICAgICBjb250ZXh0Lm1vdmVUbyh4MCwgeTApO1xuICAgICAgICBjb250ZXh0LmxpbmVUbyh4MSwgeTEpO1xuICAgICAgICBjb250ZXh0LmxpbmVUbyh4MiwgeTIpO1xuICAgIH1cblxuICAgIGNvbnRleHQuZmlsbFN0eWxlID0gJyNGRjAwMDAnO1xuICAgIGNvbnRleHQuZmlsbCgpO1xuICAgIGNvbnRleHQuY2xvc2VQYXRoKCk7XG59O1xuXG4vKipcbiAqIFdoZW4gdGhlIHRleHR1cmUgaXMgdXBkYXRlZCwgdGhpcyBldmVudCB3aWxsIGZpcmUgdG8gdXBkYXRlIHRoZSBzY2FsZSBhbmQgZnJhbWVcbiAqXG4gKiBAcGFyYW0gZXZlbnRcbiAqIEBwcml2YXRlXG4gKi9cbk1lc2gucHJvdG90eXBlLl9vblRleHR1cmVVcGRhdGUgPSBmdW5jdGlvbiAoKVxue1xuICAgIHRoaXMudXBkYXRlRnJhbWUgPSB0cnVlO1xufTtcblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBib3VuZHMgb2YgdGhlIG1lc2ggYXMgYSByZWN0YW5nbGUuIFRoZSBib3VuZHMgY2FsY3VsYXRpb24gdGFrZXMgdGhlIHdvcmxkVHJhbnNmb3JtIGludG8gYWNjb3VudC5cbiAqXG4gKiBAcGFyYW0gbWF0cml4IHtQSVhJLk1hdHJpeH0gdGhlIHRyYW5zZm9ybWF0aW9uIG1hdHJpeCBvZiB0aGUgc3ByaXRlXG4gKiBAcmV0dXJuIHtQSVhJLlJlY3RhbmdsZX0gdGhlIGZyYW1pbmcgcmVjdGFuZ2xlXG4gKi9cbk1lc2gucHJvdG90eXBlLmdldEJvdW5kcyA9IGZ1bmN0aW9uIChtYXRyaXgpXG57XG4gICAgaWYgKCF0aGlzLl9jdXJyZW50Qm91bmRzKSB7XG4gICAgICAgIHZhciB3b3JsZFRyYW5zZm9ybSA9IG1hdHJpeCB8fCB0aGlzLndvcmxkVHJhbnNmb3JtO1xuXG4gICAgICAgIHZhciBhID0gd29ybGRUcmFuc2Zvcm0uYTtcbiAgICAgICAgdmFyIGIgPSB3b3JsZFRyYW5zZm9ybS5iO1xuICAgICAgICB2YXIgYyA9IHdvcmxkVHJhbnNmb3JtLmM7XG4gICAgICAgIHZhciBkID0gd29ybGRUcmFuc2Zvcm0uZDtcbiAgICAgICAgdmFyIHR4ID0gd29ybGRUcmFuc2Zvcm0udHg7XG4gICAgICAgIHZhciB0eSA9IHdvcmxkVHJhbnNmb3JtLnR5O1xuXG4gICAgICAgIHZhciBtYXhYID0gLUluZmluaXR5O1xuICAgICAgICB2YXIgbWF4WSA9IC1JbmZpbml0eTtcblxuICAgICAgICB2YXIgbWluWCA9IEluZmluaXR5O1xuICAgICAgICB2YXIgbWluWSA9IEluZmluaXR5O1xuXG4gICAgICAgIHZhciB2ZXJ0aWNlcyA9IHRoaXMudmVydGljZXM7XG4gICAgICAgIGZvciAodmFyIGkgPSAwLCBuID0gdmVydGljZXMubGVuZ3RoOyBpIDwgbjsgaSArPSAyKSB7XG4gICAgICAgICAgICB2YXIgcmF3WCA9IHZlcnRpY2VzW2ldLCByYXdZID0gdmVydGljZXNbaSArIDFdO1xuICAgICAgICAgICAgdmFyIHggPSAoYSAqIHJhd1gpICsgKGMgKiByYXdZKSArIHR4O1xuICAgICAgICAgICAgdmFyIHkgPSAoZCAqIHJhd1kpICsgKGIgKiByYXdYKSArIHR5O1xuXG4gICAgICAgICAgICBtaW5YID0geCA8IG1pblggPyB4IDogbWluWDtcbiAgICAgICAgICAgIG1pblkgPSB5IDwgbWluWSA/IHkgOiBtaW5ZO1xuXG4gICAgICAgICAgICBtYXhYID0geCA+IG1heFggPyB4IDogbWF4WDtcbiAgICAgICAgICAgIG1heFkgPSB5ID4gbWF4WSA/IHkgOiBtYXhZO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG1pblggPT09IC1JbmZpbml0eSB8fCBtYXhZID09PSBJbmZpbml0eSkge1xuICAgICAgICAgICAgcmV0dXJuIGNvcmUuUmVjdGFuZ2xlLkVNUFRZO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGJvdW5kcyA9IHRoaXMuX2JvdW5kcztcblxuICAgICAgICBib3VuZHMueCA9IG1pblg7XG4gICAgICAgIGJvdW5kcy53aWR0aCA9IG1heFggLSBtaW5YO1xuXG4gICAgICAgIGJvdW5kcy55ID0gbWluWTtcbiAgICAgICAgYm91bmRzLmhlaWdodCA9IG1heFkgLSBtaW5ZO1xuXG4gICAgICAgIC8vIHN0b3JlIGEgcmVmZXJlbmNlIHNvIHRoYXQgaWYgdGhpcyBmdW5jdGlvbiBnZXRzIGNhbGxlZCBhZ2FpbiBpbiB0aGUgcmVuZGVyIGN5Y2xlIHdlIGRvIG5vdCBoYXZlIHRvIHJlY2FsY3VsYXRlXG4gICAgICAgIHRoaXMuX2N1cnJlbnRCb3VuZHMgPSBib3VuZHM7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuX2N1cnJlbnRCb3VuZHM7XG59O1xuXG4vKipcbiAqIFRlc3RzIGlmIGEgcG9pbnQgaXMgaW5zaWRlIHRoaXMgbWVzaC4gV29ya3Mgb25seSBmb3IgVFJJQU5HTEVfTUVTSFxuICpcbiAqIEBwYXJhbSBwb2ludCB7UElYSS5Qb2ludH0gdGhlIHBvaW50IHRvIHRlc3RcbiAqIEByZXR1cm4ge2Jvb2xlYW59IHRoZSByZXN1bHQgb2YgdGhlIHRlc3RcbiAqL1xuTWVzaC5wcm90b3R5cGUuY29udGFpbnNQb2ludCA9IGZ1bmN0aW9uKCBwb2ludCApIHtcbiAgICBpZiAoIXRoaXMuZ2V0Qm91bmRzKCkuY29udGFpbnMocG9pbnQueCwgcG9pbnQueSkpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICB0aGlzLndvcmxkVHJhbnNmb3JtLmFwcGx5SW52ZXJzZShwb2ludCwgIHRlbXBQb2ludCk7XG5cbiAgICB2YXIgdmVydGljZXMgPSB0aGlzLnZlcnRpY2VzO1xuICAgIHZhciBwb2ludHMgPSB0ZW1wUG9seWdvbi5wb2ludHM7XG4gICAgdmFyIGksIGxlbjtcblxuICAgIGlmICh0aGlzLmRyYXdNb2RlID09PSBNZXNoLkRSQVdfTU9ERVMuVFJJQU5HTEVTKSB7XG4gICAgICAgIHZhciBpbmRpY2VzID0gdGhpcy5pbmRpY2VzO1xuICAgICAgICBsZW4gPSB0aGlzLmluZGljZXMubGVuZ3RoO1xuICAgICAgICAvL1RPRE86IGlubGluZSB0aGlzLlxuICAgICAgICBmb3IgKGk9MDtpPGxlbjtpKz0zKSB7XG4gICAgICAgICAgICB2YXIgaW5kMCA9IGluZGljZXNbaV0qMiwgaW5kMSA9IGluZGljZXNbaSsxXSoyLCBpbmQyID0gaW5kaWNlc1tpKzJdKjI7XG4gICAgICAgICAgICBwb2ludHNbMF0gPSB2ZXJ0aWNlc1tpbmQwXTtcbiAgICAgICAgICAgIHBvaW50c1sxXSA9IHZlcnRpY2VzW2luZDArMV07XG4gICAgICAgICAgICBwb2ludHNbMl0gPSB2ZXJ0aWNlc1tpbmQxXTtcbiAgICAgICAgICAgIHBvaW50c1szXSA9IHZlcnRpY2VzW2luZDErMV07XG4gICAgICAgICAgICBwb2ludHNbNF0gPSB2ZXJ0aWNlc1tpbmQyXTtcbiAgICAgICAgICAgIHBvaW50c1s1XSA9IHZlcnRpY2VzW2luZDIrMV07XG4gICAgICAgICAgICBpZiAodGVtcFBvbHlnb24uY29udGFpbnModGVtcFBvaW50LngsIHRlbXBQb2ludC55KSkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgICAgbGVuID0gdmVydGljZXMubGVuZ3RoO1xuICAgICAgICBmb3IgKGk9MDtpPGxlbjtpKz02KSB7XG4gICAgICAgICAgICBwb2ludHNbMF0gPSB2ZXJ0aWNlc1tpXTtcbiAgICAgICAgICAgIHBvaW50c1sxXSA9IHZlcnRpY2VzW2krMV07XG4gICAgICAgICAgICBwb2ludHNbMl0gPSB2ZXJ0aWNlc1tpKzJdO1xuICAgICAgICAgICAgcG9pbnRzWzNdID0gdmVydGljZXNbaSszXTtcbiAgICAgICAgICAgIHBvaW50c1s0XSA9IHZlcnRpY2VzW2krNF07XG4gICAgICAgICAgICBwb2ludHNbNV0gPSB2ZXJ0aWNlc1tpKzVdO1xuICAgICAgICAgICAgaWYgKHRlbXBQb2x5Z29uLmNvbnRhaW5zKHRlbXBQb2ludC54LCB0ZW1wUG9pbnQueSkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG59O1xuXG4vKipcbiAqIERpZmZlcmVudCBkcmF3aW5nIGJ1ZmZlciBtb2RlcyBzdXBwb3J0ZWRcbiAqXG4gKiBAc3RhdGljXG4gKiBAY29uc3RhbnRcbiAqIEBwcm9wZXJ0eSB7b2JqZWN0fSBEUkFXX01PREVTXG4gKiBAcHJvcGVydHkge251bWJlcn0gRFJBV19NT0RFUy5UUklBTkdMRV9NRVNIXG4gKiBAcHJvcGVydHkge251bWJlcn0gRFJBV19NT0RFUy5UUklBTkdMRVNcbiAqL1xuTWVzaC5EUkFXX01PREVTID0ge1xuICAgIFRSSUFOR0xFX01FU0g6IDAsXG4gICAgVFJJQU5HTEVTOiAxXG59O1xuIiwidmFyIE1lc2ggPSByZXF1aXJlKCcuL01lc2gnKTtcblxuLyoqXG4gKiBUaGUgUGxhbmUgYWxsb3dzIHlvdSB0byBkcmF3IGEgdGV4dHVyZSBhY3Jvc3Mgc2V2ZXJhbCBwb2ludHMgYW5kIHRoZW0gbWFuaXB1bGF0ZSB0aGVzZSBwb2ludHNcbiAqXG4gKmBgYGpzXG4gKiBmb3IgKHZhciBpID0gMDsgaSA8IDIwOyBpKyspIHtcbiAqICAgICBwb2ludHMucHVzaChuZXcgUElYSS5Qb2ludChpICogNTAsIDApKTtcbiAqIH07XG4gKiB2YXIgUGxhbmUgPSBuZXcgUElYSS5QbGFuZShQSVhJLlRleHR1cmUuZnJvbUltYWdlKFwic25ha2UucG5nXCIpLCBwb2ludHMpO1xuICogIGBgYFxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5tZXNoLk1lc2hcbiAqIEBtZW1iZXJvZiBQSVhJLm1lc2hcbiAqIEBwYXJhbSB7UElYSS5UZXh0dXJlfSB0ZXh0dXJlIC0gVGhlIHRleHR1cmUgdG8gdXNlIG9uIHRoZSBQbGFuZS5cbiAqIEBwYXJhbSB7aW50fSBzZWdtZW50c1ggLSBUaGUgbnVtYmVyIG94IHggc2VnbWVudHNcbiAqIEBwYXJhbSB7aW50fSBzZWdtZW50c1kgLSBUaGUgbnVtYmVyIG9mIHkgc2VnbWVudHNcbiAqXG4gKi9cbmZ1bmN0aW9uIFBsYW5lKHRleHR1cmUsIHNlZ21lbnRzWCwgc2VnbWVudHNZKVxue1xuICAgIE1lc2guY2FsbCh0aGlzLCB0ZXh0dXJlKTtcblxuICAgIC8qKlxuICAgICAqIFRyYWNrZXIgZm9yIGlmIHRoZSBQbGFuZSBpcyByZWFkeSB0byBiZSBkcmF3bi4gTmVlZGVkIGJlY2F1c2UgTWVzaCBjdG9yIGNhblxuICAgICAqIGNhbGwgX29uVGV4dHVyZVVwZGF0ZWQgd2hpY2ggY291bGQgY2FsbCByZWZyZXNoIHRvbyBlYXJseS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9yZWFkeSA9IHRydWU7XG5cbiAgICB0aGlzLnNlZ21lbnRzWCA9ICBzZWdtZW50c1ggfHwgMTA7XG4gICAgdGhpcy5zZWdtZW50c1kgPSBzZWdtZW50c1kgfHwgMTA7XG5cbiAgICB0aGlzLmRyYXdNb2RlID0gTWVzaC5EUkFXX01PREVTLlRSSUFOR0xFUztcbiAgICB0aGlzLnJlZnJlc2goKTtcblxufVxuXG5cbi8vIGNvbnN0cnVjdG9yXG5QbGFuZS5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKCBNZXNoLnByb3RvdHlwZSApO1xuUGxhbmUucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gUGxhbmU7XG5tb2R1bGUuZXhwb3J0cyA9IFBsYW5lO1xuXG4vKipcbiAqIFJlZnJlc2hlc1xuICpcbiAqL1xuUGxhbmUucHJvdG90eXBlLnJlZnJlc2ggPSBmdW5jdGlvbigpXG57XG4gICAgdmFyIHRvdGFsID0gdGhpcy5zZWdtZW50c1ggKiB0aGlzLnNlZ21lbnRzWTtcbiAgICB2YXIgdmVydHMgPSBbXTtcbiAgICB2YXIgY29sb3JzID0gW107XG4gICAgdmFyIHV2cyA9IFtdO1xuICAgIHZhciBpbmRpY2VzID0gW107XG4gICAgdmFyIHRleHR1cmUgPSB0aGlzLnRleHR1cmU7XG5cbiAgLy8gIHRleHR1cmUud2lkdGggPSA4MDAgdGV4dHVyZS53aWR0aCB8fCA4MDA7XG4gLy8gICB0ZXh0dXJlLmhlaWdodCA9IDgwMC8vdGV4dHVyZS5oZWlnaHQgfHwgODAwO1xuXG4gICAgdmFyIHNlZ21lbnRzWFN1YiA9IHRoaXMuc2VnbWVudHNYIC0gMTtcbiAgICB2YXIgc2VnbWVudHNZU3ViID0gdGhpcy5zZWdtZW50c1kgLSAxO1xuICAgIHZhciBpID0gMDtcblxuICAgIHZhciBzaXplWCA9IHRleHR1cmUud2lkdGggLyBzZWdtZW50c1hTdWI7XG4gICAgdmFyIHNpemVZID0gdGV4dHVyZS5oZWlnaHQgLyBzZWdtZW50c1lTdWI7XG5cbiAgICBmb3IgKGkgPSAwOyBpIDwgdG90YWw7IGkrKykge1xuXG4gICAgICAgIHZhciB4ID0gKGkgJSB0aGlzLnNlZ21lbnRzWCk7XG4gICAgICAgIHZhciB5ID0gKCAoaSAvIHRoaXMuc2VnbWVudHNYICkgfCAwICk7XG5cblxuICAgICAgICB2ZXJ0cy5wdXNoKCh4ICogc2l6ZVgpLFxuICAgICAgICAgICAgICAgICAgICh5ICogc2l6ZVkpKTtcblxuICAgICAgICAvLyB0aGlzIHdvcmtzIGZvciByZWN0YW5ndWxhciB0ZXh0dXJlcy4gXG4gICAgICAgIHV2cy5wdXNoKHRleHR1cmUuX3V2cy54MCArICh0ZXh0dXJlLl91dnMueDEgLSB0ZXh0dXJlLl91dnMueDApICogKHggLyAodGhpcy5zZWdtZW50c1gtMSkpLCB0ZXh0dXJlLl91dnMueTAgKyAodGV4dHVyZS5fdXZzLnkzLXRleHR1cmUuX3V2cy55MCkgKiAoeS8gKHRoaXMuc2VnbWVudHNZLTEpKSk7XG4gICAgICB9XG5cbiAgICAvLyAgY29uc1xuXG4gICAgdmFyIHRvdGFsU3ViID0gc2VnbWVudHNYU3ViICogc2VnbWVudHNZU3ViO1xuXG4gICAgZm9yIChpID0gMDsgaSA8IHRvdGFsU3ViOyBpKyspIHtcblxuICAgICAgICB2YXIgeHBvcyA9IGkgJSBzZWdtZW50c1hTdWI7XG4gICAgICAgIHZhciB5cG9zID0gKGkgLyBzZWdtZW50c1hTdWIgKSB8IDA7XG5cblxuICAgICAgICB2YXIgIHZhbHVlID0gKHlwb3MgKiB0aGlzLnNlZ21lbnRzWCkgKyB4cG9zO1xuICAgICAgICB2YXIgIHZhbHVlMiA9ICh5cG9zICogdGhpcy5zZWdtZW50c1gpICsgeHBvcyArIDE7XG4gICAgICAgIHZhciAgdmFsdWUzID0gKCh5cG9zKzEpICogdGhpcy5zZWdtZW50c1gpICsgeHBvcztcbiAgICAgICAgdmFyICB2YWx1ZTQgPSAoKHlwb3MrMSkgKiB0aGlzLnNlZ21lbnRzWCkgKyB4cG9zICsgMTtcblxuICAgICAgICBpbmRpY2VzLnB1c2godmFsdWUsIHZhbHVlMiwgdmFsdWUzKTtcbiAgICAgICAgaW5kaWNlcy5wdXNoKHZhbHVlMiwgdmFsdWU0LCB2YWx1ZTMpO1xuICAgIH1cblxuXG4gICAgLy9jb25zb2xlLmxvZyhpbmRpY2VzKVxuICAgIHRoaXMudmVydGljZXMgPSBuZXcgRmxvYXQzMkFycmF5KHZlcnRzKTtcbiAgICB0aGlzLnV2cyA9IG5ldyBGbG9hdDMyQXJyYXkodXZzKTtcbiAgICB0aGlzLmNvbG9ycyA9IG5ldyBGbG9hdDMyQXJyYXkoY29sb3JzKTtcbiAgICB0aGlzLmluZGljZXMgPSBuZXcgVWludDE2QXJyYXkoaW5kaWNlcyk7XG59O1xuXG4vKipcbiAqIENsZWFyIHRleHR1cmUgVVZzIHdoZW4gbmV3IHRleHR1cmUgaXMgc2V0XG4gKlxuICogQHByaXZhdGVcbiAqL1xuUGxhbmUucHJvdG90eXBlLl9vblRleHR1cmVVcGRhdGUgPSBmdW5jdGlvbiAoKVxue1xuICAgIE1lc2gucHJvdG90eXBlLl9vblRleHR1cmVVcGRhdGUuY2FsbCh0aGlzKTtcblxuICAgIC8vIHdhaXQgZm9yIHRoZSBQbGFuZSBjdG9yIHRvIGZpbmlzaCBiZWZvcmUgY2FsbGluZyByZWZyZXNoXG4gICAgaWYgKHRoaXMuX3JlYWR5KSB7XG4gICAgICAgIHRoaXMucmVmcmVzaCgpO1xuICAgIH1cbn07XG4iLCJ2YXIgTWVzaCA9IHJlcXVpcmUoJy4vTWVzaCcpO1xudmFyIGNvcmUgPSByZXF1aXJlKCcuLi9jb3JlJyk7XG5cbi8qKlxuICogVGhlIHJvcGUgYWxsb3dzIHlvdSB0byBkcmF3IGEgdGV4dHVyZSBhY3Jvc3Mgc2V2ZXJhbCBwb2ludHMgYW5kIHRoZW0gbWFuaXB1bGF0ZSB0aGVzZSBwb2ludHNcbiAqXG4gKmBgYGpzXG4gKiBmb3IgKHZhciBpID0gMDsgaSA8IDIwOyBpKyspIHtcbiAqICAgICBwb2ludHMucHVzaChuZXcgUElYSS5Qb2ludChpICogNTAsIDApKTtcbiAqIH07XG4gKiB2YXIgcm9wZSA9IG5ldyBQSVhJLlJvcGUoUElYSS5UZXh0dXJlLmZyb21JbWFnZShcInNuYWtlLnBuZ1wiKSwgcG9pbnRzKTtcbiAqICBgYGBcbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkubWVzaC5NZXNoXG4gKiBAbWVtYmVyb2YgUElYSS5tZXNoXG4gKiBAcGFyYW0ge1BJWEkuVGV4dHVyZX0gdGV4dHVyZSAtIFRoZSB0ZXh0dXJlIHRvIHVzZSBvbiB0aGUgcm9wZS5cbiAqIEBwYXJhbSB7UElYSS5Qb2ludFtdfSBwb2ludHMgLSBBbiBhcnJheSBvZiB7QGxpbmsgUElYSS5Qb2ludH0gb2JqZWN0cyB0byBjb25zdHJ1Y3QgdGhpcyByb3BlLlxuICpcbiAqL1xuZnVuY3Rpb24gUm9wZSh0ZXh0dXJlLCBwb2ludHMpXG57XG4gICAgTWVzaC5jYWxsKHRoaXMsIHRleHR1cmUpO1xuXG4gICAgLypcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlBvaW50W119IEFuIGFycmF5IG9mIHBvaW50cyB0aGF0IGRldGVybWluZSB0aGUgcm9wZVxuICAgICAqL1xuICAgIHRoaXMucG9pbnRzID0gcG9pbnRzO1xuXG4gICAgLypcbiAgICAgKiBAbWVtYmVyIHtGbG9hdDMyQXJyYXl9IEFuIGFycmF5IG9mIHZlcnRpY2VzIHVzZWQgdG8gY29uc3RydWN0IHRoaXMgcm9wZS5cbiAgICAgKi9cbiAgICB0aGlzLnZlcnRpY2VzID0gbmV3IEZsb2F0MzJBcnJheShwb2ludHMubGVuZ3RoICogNCk7XG5cbiAgICAvKlxuICAgICAqIEBtZW1iZXIge0Zsb2F0MzJBcnJheX0gVGhlIFdlYkdMIFV2cyBvZiB0aGUgcm9wZS5cbiAgICAgKi9cbiAgICB0aGlzLnV2cyA9IG5ldyBGbG9hdDMyQXJyYXkocG9pbnRzLmxlbmd0aCAqIDQpO1xuXG4gICAgLypcbiAgICAgKiBAbWVtYmVyIHtGbG9hdDMyQXJyYXl9IEFuIGFycmF5IGNvbnRhaW5pbmcgdGhlIGNvbG9yIGNvbXBvbmVudHNcbiAgICAgKi9cbiAgICB0aGlzLmNvbG9ycyA9IG5ldyBGbG9hdDMyQXJyYXkocG9pbnRzLmxlbmd0aCAqIDIpO1xuXG4gICAgLypcbiAgICAgKiBAbWVtYmVyIHtVaW50MTZBcnJheX0gQW4gYXJyYXkgY29udGFpbmluZyB0aGUgaW5kaWNlcyBvZiB0aGUgdmVydGljZXNcbiAgICAgKi9cbiAgICB0aGlzLmluZGljZXMgPSBuZXcgVWludDE2QXJyYXkocG9pbnRzLmxlbmd0aCAqIDIpO1xuXG4gICAgLyoqXG4gICAgICogVHJhY2tlciBmb3IgaWYgdGhlIHJvcGUgaXMgcmVhZHkgdG8gYmUgZHJhd24uIE5lZWRlZCBiZWNhdXNlIE1lc2ggY3RvciBjYW5cbiAgICAgKiBjYWxsIF9vblRleHR1cmVVcGRhdGVkIHdoaWNoIGNvdWxkIGNhbGwgcmVmcmVzaCB0b28gZWFybHkuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgIHRoaXMuX3JlYWR5ID0gdHJ1ZTtcblxuICAgICB0aGlzLnJlZnJlc2goKTtcbn1cblxuXG4vLyBjb25zdHJ1Y3RvclxuUm9wZS5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKE1lc2gucHJvdG90eXBlKTtcblJvcGUucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gUm9wZTtcbm1vZHVsZS5leHBvcnRzID0gUm9wZTtcblxuLyoqXG4gKiBSZWZyZXNoZXNcbiAqXG4gKi9cblJvcGUucHJvdG90eXBlLnJlZnJlc2ggPSBmdW5jdGlvbiAoKVxue1xuICAgIHZhciBwb2ludHMgPSB0aGlzLnBvaW50cztcblxuICAgIC8vIGlmIHRvbyBsaXR0bGUgcG9pbnRzLCBvciB0ZXh0dXJlIGhhc24ndCBnb3QgVVZzIHNldCB5ZXQganVzdCBtb3ZlIG9uLlxuICAgIGlmIChwb2ludHMubGVuZ3RoIDwgMSB8fCAhdGhpcy5fdGV4dHVyZS5fdXZzKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHZhciB1dnMgPSB0aGlzLnV2cztcblxuICAgIHZhciBpbmRpY2VzID0gdGhpcy5pbmRpY2VzO1xuICAgIHZhciBjb2xvcnMgPSB0aGlzLmNvbG9ycztcblxuICAgIHZhciB0ZXh0dXJlVXZzID0gdGhpcy5fdGV4dHVyZS5fdXZzO1xuICAgIHZhciBvZmZzZXQgPSBuZXcgY29yZS5Qb2ludCh0ZXh0dXJlVXZzLngwLCB0ZXh0dXJlVXZzLnkwKTtcbiAgICB2YXIgZmFjdG9yID0gbmV3IGNvcmUuUG9pbnQodGV4dHVyZVV2cy54MiAtIHRleHR1cmVVdnMueDAsIHRleHR1cmVVdnMueTIgLSB0ZXh0dXJlVXZzLnkwKTtcblxuICAgIHV2c1swXSA9IDAgKyBvZmZzZXQueDtcbiAgICB1dnNbMV0gPSAwICsgb2Zmc2V0Lnk7XG4gICAgdXZzWzJdID0gMCArIG9mZnNldC54O1xuICAgIHV2c1szXSA9IDEgKiBmYWN0b3IueSArIG9mZnNldC55O1xuXG4gICAgY29sb3JzWzBdID0gMTtcbiAgICBjb2xvcnNbMV0gPSAxO1xuXG4gICAgaW5kaWNlc1swXSA9IDA7XG4gICAgaW5kaWNlc1sxXSA9IDE7XG5cbiAgICB2YXIgdG90YWwgPSBwb2ludHMubGVuZ3RoLFxuICAgICAgICBwb2ludCwgaW5kZXgsIGFtb3VudDtcblxuICAgIGZvciAodmFyIGkgPSAxOyBpIDwgdG90YWw7IGkrKylcbiAgICB7XG4gICAgICAgIHBvaW50ID0gcG9pbnRzW2ldO1xuICAgICAgICBpbmRleCA9IGkgKiA0O1xuICAgICAgICAvLyB0aW1lIHRvIGRvIHNvbWUgc21hcnQgZHJhd2luZyFcbiAgICAgICAgYW1vdW50ID0gaSAvICh0b3RhbC0xKTtcblxuICAgICAgICB1dnNbaW5kZXhdID0gYW1vdW50ICogZmFjdG9yLnggKyBvZmZzZXQueDtcbiAgICAgICAgdXZzW2luZGV4KzFdID0gMCArIG9mZnNldC55O1xuXG4gICAgICAgIHV2c1tpbmRleCsyXSA9IGFtb3VudCAqIGZhY3Rvci54ICsgb2Zmc2V0Lng7XG4gICAgICAgIHV2c1tpbmRleCszXSA9IDEgKiBmYWN0b3IueSArIG9mZnNldC55O1xuXG4gICAgICAgIGluZGV4ID0gaSAqIDI7XG4gICAgICAgIGNvbG9yc1tpbmRleF0gPSAxO1xuICAgICAgICBjb2xvcnNbaW5kZXgrMV0gPSAxO1xuXG4gICAgICAgIGluZGV4ID0gaSAqIDI7XG4gICAgICAgIGluZGljZXNbaW5kZXhdID0gaW5kZXg7XG4gICAgICAgIGluZGljZXNbaW5kZXggKyAxXSA9IGluZGV4ICsgMTtcbiAgICB9XG5cbiAgICB0aGlzLmRpcnR5ID0gdHJ1ZTtcbn07XG5cbi8qKlxuICogQ2xlYXIgdGV4dHVyZSBVVnMgd2hlbiBuZXcgdGV4dHVyZSBpcyBzZXRcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5Sb3BlLnByb3RvdHlwZS5fb25UZXh0dXJlVXBkYXRlID0gZnVuY3Rpb24gKClcbntcbiAgICBNZXNoLnByb3RvdHlwZS5fb25UZXh0dXJlVXBkYXRlLmNhbGwodGhpcyk7XG5cbiAgICAvLyB3YWl0IGZvciB0aGUgUm9wZSBjdG9yIHRvIGZpbmlzaCBiZWZvcmUgY2FsbGluZyByZWZyZXNoXG4gICAgaWYgKHRoaXMuX3JlYWR5KSB7XG4gICAgICAgIHRoaXMucmVmcmVzaCgpO1xuICAgIH1cbn07XG5cbi8qKlxuICogVXBkYXRlcyB0aGUgb2JqZWN0IHRyYW5zZm9ybSBmb3IgcmVuZGVyaW5nXG4gKlxuICogQHByaXZhdGVcbiAqL1xuUm9wZS5wcm90b3R5cGUudXBkYXRlVHJhbnNmb3JtID0gZnVuY3Rpb24gKClcbntcbiAgICB2YXIgcG9pbnRzID0gdGhpcy5wb2ludHM7XG5cbiAgICBpZiAocG9pbnRzLmxlbmd0aCA8IDEpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFyIGxhc3RQb2ludCA9IHBvaW50c1swXTtcbiAgICB2YXIgbmV4dFBvaW50O1xuICAgIHZhciBwZXJwWCA9IDA7XG4gICAgdmFyIHBlcnBZID0gMDtcblxuICAgIC8vIHRoaXMuY291bnQgLT0gMC4yO1xuXG4gICAgdmFyIHZlcnRpY2VzID0gdGhpcy52ZXJ0aWNlcztcbiAgICB2YXIgdG90YWwgPSBwb2ludHMubGVuZ3RoLFxuICAgICAgICBwb2ludCwgaW5kZXgsIHJhdGlvLCBwZXJwTGVuZ3RoLCBudW07XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRvdGFsOyBpKyspXG4gICAge1xuICAgICAgICBwb2ludCA9IHBvaW50c1tpXTtcbiAgICAgICAgaW5kZXggPSBpICogNDtcblxuICAgICAgICBpZiAoaSA8IHBvaW50cy5sZW5ndGgtMSlcbiAgICAgICAge1xuICAgICAgICAgICAgbmV4dFBvaW50ID0gcG9pbnRzW2krMV07XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgICBuZXh0UG9pbnQgPSBwb2ludDtcbiAgICAgICAgfVxuXG4gICAgICAgIHBlcnBZID0gLShuZXh0UG9pbnQueCAtIGxhc3RQb2ludC54KTtcbiAgICAgICAgcGVycFggPSBuZXh0UG9pbnQueSAtIGxhc3RQb2ludC55O1xuXG4gICAgICAgIHJhdGlvID0gKDEgLSAoaSAvICh0b3RhbC0xKSkpICogMTA7XG5cbiAgICAgICAgaWYgKHJhdGlvID4gMSlcbiAgICAgICAge1xuICAgICAgICAgICAgcmF0aW8gPSAxO1xuICAgICAgICB9XG5cbiAgICAgICAgcGVycExlbmd0aCA9IE1hdGguc3FydChwZXJwWCAqIHBlcnBYICsgcGVycFkgKiBwZXJwWSk7XG4gICAgICAgIG51bSA9IHRoaXMuX3RleHR1cmUuaGVpZ2h0IC8gMjsgLy8oMjAgKyBNYXRoLmFicyhNYXRoLnNpbigoaSArIHRoaXMuY291bnQpICogMC4zKSAqIDUwKSApKiByYXRpbztcbiAgICAgICAgcGVycFggLz0gcGVycExlbmd0aDtcbiAgICAgICAgcGVycFkgLz0gcGVycExlbmd0aDtcblxuICAgICAgICBwZXJwWCAqPSBudW07XG4gICAgICAgIHBlcnBZICo9IG51bTtcblxuICAgICAgICB2ZXJ0aWNlc1tpbmRleF0gPSBwb2ludC54ICsgcGVycFg7XG4gICAgICAgIHZlcnRpY2VzW2luZGV4KzFdID0gcG9pbnQueSArIHBlcnBZO1xuICAgICAgICB2ZXJ0aWNlc1tpbmRleCsyXSA9IHBvaW50LnggLSBwZXJwWDtcbiAgICAgICAgdmVydGljZXNbaW5kZXgrM10gPSBwb2ludC55IC0gcGVycFk7XG5cbiAgICAgICAgbGFzdFBvaW50ID0gcG9pbnQ7XG4gICAgfVxuXG4gICAgdGhpcy5jb250YWluZXJVcGRhdGVUcmFuc2Zvcm0oKTtcbn07XG4iLCIvKipcbiAqIEBmaWxlICAgICAgICBNYWluIGV4cG9ydCBvZiB0aGUgUElYSSBleHRyYXMgbGlicmFyeVxuICogQGF1dGhvciAgICAgIE1hdCBHcm92ZXMgPG1hdEBnb29kYm95ZGlnaXRhbC5jb20+XG4gKiBAY29weXJpZ2h0ICAgMjAxMy0yMDE1IEdvb2RCb3lEaWdpdGFsXG4gKiBAbGljZW5zZSAgICAge0BsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9waXhpanMvcGl4aS5qcy9ibG9iL21hc3Rlci9MSUNFTlNFfE1JVCBMaWNlbnNlfVxuICovXG5cbi8qKlxuICogQG5hbWVzcGFjZSBQSVhJLm1lc2hcbiAqL1xubW9kdWxlLmV4cG9ydHMgPSB7XG4gICAgTWVzaDogICAgICAgICAgIHJlcXVpcmUoJy4vTWVzaCcpLFxuICAgIFBsYW5lOiAgICAgICAgICAgcmVxdWlyZSgnLi9QbGFuZScpLFxuICAgIFJvcGU6ICAgICAgICAgICByZXF1aXJlKCcuL1JvcGUnKSxcbiAgICBNZXNoUmVuZGVyZXI6ICAgcmVxdWlyZSgnLi93ZWJnbC9NZXNoUmVuZGVyZXInKSxcbiAgICBNZXNoU2hhZGVyOiAgICAgcmVxdWlyZSgnLi93ZWJnbC9NZXNoU2hhZGVyJylcbn07XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uLy4uL2NvcmUnKSxcbiAgICBNZXNoID0gcmVxdWlyZSgnLi4vTWVzaCcpO1xuXG4vKipcbiAqIEBhdXRob3IgTWF0IEdyb3Zlc1xuICpcbiAqIEJpZyB0aGFua3MgdG8gdGhlIHZlcnkgY2xldmVyIE1hdHQgRGVzTGF1cmllcnMgPG1hdHRkZXNsPiBodHRwczovL2dpdGh1Yi5jb20vbWF0dGRlc2wvXG4gKiBmb3IgY3JlYXRpbmcgdGhlIG9yaWdpbmFsIHBpeGkgdmVyc2lvbiFcbiAqIEFsc28gYSB0aGFua3MgdG8gaHR0cHM6Ly9naXRodWIuY29tL2JjaGV2YWxpZXIgZm9yIHR3ZWFraW5nIHRoZSB0aW50IGFuZCBhbHBoYSBzbyB0aGF0IHRoZXkgbm93IHNoYXJlIDQgYnl0ZXMgb24gdGhlIHZlcnRleCBidWZmZXJcbiAqXG4gKiBIZWF2aWx5IGluc3BpcmVkIGJ5IExpYkdEWCdzIE1lc2hSZW5kZXJlcjpcbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS9saWJnZHgvbGliZ2R4L2Jsb2IvbWFzdGVyL2dkeC9zcmMvY29tL2JhZGxvZ2ljL2dkeC9ncmFwaGljcy9nMmQvTWVzaFJlbmRlcmVyLmphdmFcbiAqL1xuXG4vKipcbiAqXG4gKiBAY2xhc3NcbiAqIEBwcml2YXRlXG4gKiBAbWVtYmVyb2YgUElYSS5tZXNoXG4gKiBAZXh0ZW5kcyBQSVhJLk9iamVjdFJlbmRlcmVyXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcn0gVGhlIHJlbmRlcmVyIHRoaXMgc3ByaXRlIGJhdGNoIHdvcmtzIGZvci5cbiAqL1xuZnVuY3Rpb24gTWVzaFJlbmRlcmVyKHJlbmRlcmVyKVxue1xuICAgIGNvcmUuT2JqZWN0UmVuZGVyZXIuY2FsbCh0aGlzLCByZW5kZXJlcik7XG5cblxuICAgIC8qKlxuICAgICAqIEhvbGRzIHRoZSBpbmRpY2VzXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtVaW50MTZBcnJheX1cbiAgICAgKi9cbiAgICBcbiAgICB0aGlzLmluZGljZXMgPSBuZXcgVWludDE2QXJyYXkoMTUwMDApO1xuXG4gICAgLy9UT0RPIHRoaXMgY291bGQgYmUgYSBzaW5nbGUgYnVmZmVyIHNoYXJlZCBhbW9uZ3N0IGFsbCByZW5kZXJlcnMgYXMgd2UgcmV1c2UgdGhpcyBzZXQgdXAgaW4gbW9zdCByZW5kZXJlcnNcbiAgICBmb3IgKHZhciBpPTAsIGo9MDsgaSA8IDE1MDAwOyBpICs9IDYsIGogKz0gNClcbiAgICB7XG4gICAgICAgIHRoaXMuaW5kaWNlc1tpICsgMF0gPSBqICsgMDtcbiAgICAgICAgdGhpcy5pbmRpY2VzW2kgKyAxXSA9IGogKyAxO1xuICAgICAgICB0aGlzLmluZGljZXNbaSArIDJdID0gaiArIDI7XG4gICAgICAgIHRoaXMuaW5kaWNlc1tpICsgM10gPSBqICsgMDtcbiAgICAgICAgdGhpcy5pbmRpY2VzW2kgKyA0XSA9IGogKyAyO1xuICAgICAgICB0aGlzLmluZGljZXNbaSArIDVdID0gaiArIDM7XG4gICAgfVxuXG4gICAgdGhpcy5jdXJyZW50U2hhZGVyID0gbnVsbDtcbn1cblxuTWVzaFJlbmRlcmVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoY29yZS5PYmplY3RSZW5kZXJlci5wcm90b3R5cGUpO1xuTWVzaFJlbmRlcmVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IE1lc2hSZW5kZXJlcjtcbm1vZHVsZS5leHBvcnRzID0gTWVzaFJlbmRlcmVyO1xuXG5jb3JlLldlYkdMUmVuZGVyZXIucmVnaXN0ZXJQbHVnaW4oJ21lc2gnLCBNZXNoUmVuZGVyZXIpO1xuXG4vKipcbiAqIFNldHMgdXAgdGhlIHJlbmRlcmVyIGNvbnRleHQgYW5kIG5lY2Vzc2FyeSBidWZmZXJzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0gZ2wge1dlYkdMUmVuZGVyaW5nQ29udGV4dH0gdGhlIGN1cnJlbnQgV2ViR0wgZHJhd2luZyBjb250ZXh0XG4gKi9cbk1lc2hSZW5kZXJlci5wcm90b3R5cGUub25Db250ZXh0Q2hhbmdlID0gZnVuY3Rpb24gKClcbntcblxufTtcblxuLyoqXG4gKiBSZW5kZXJzIHRoZSBzcHJpdGUgb2JqZWN0LlxuICpcbiAqIEBwYXJhbSBtZXNoIHtQSVhJLm1lc2guTWVzaH0gdGhlIG1lc2ggdG8gcmVuZGVyXG4gKi9cbk1lc2hSZW5kZXJlci5wcm90b3R5cGUucmVuZGVyID0gZnVuY3Rpb24gKG1lc2gpXG57XG4gICAgaWYoIW1lc2guX3ZlcnRleEJ1ZmZlcilcbiAgICB7XG4gICAgICAgIHRoaXMuX2luaXRXZWJHTChtZXNoKTtcbiAgICB9XG5cbiAgICB2YXIgcmVuZGVyZXIgPSB0aGlzLnJlbmRlcmVyLFxuICAgICAgICBnbCA9IHJlbmRlcmVyLmdsLFxuICAgICAgICB0ZXh0dXJlID0gbWVzaC5fdGV4dHVyZS5iYXNlVGV4dHVyZSxcbiAgICAgICAgc2hhZGVyID0gbWVzaC5zaGFkZXI7Ly8gfHwgcmVuZGVyZXIuc2hhZGVyTWFuYWdlci5wbHVnaW5zLm1lc2hTaGFkZXI7XG5cbiAgICB2YXIgZHJhd01vZGUgPSBtZXNoLmRyYXdNb2RlID09PSBNZXNoLkRSQVdfTU9ERVMuVFJJQU5HTEVfTUVTSCA/IGdsLlRSSUFOR0xFX1NUUklQIDogZ2wuVFJJQU5HTEVTO1xuXG4gICAgcmVuZGVyZXIuYmxlbmRNb2RlTWFuYWdlci5zZXRCbGVuZE1vZGUobWVzaC5ibGVuZE1vZGUpO1xuXG4gICAgLy9UT0RPIGNhY2hlIGN1c3RvbSBzdGF0ZS4uXG4gICAgaWYgKCFzaGFkZXIpXG4gICAge1xuICAgICAgICBzaGFkZXIgPSByZW5kZXJlci5zaGFkZXJNYW5hZ2VyLnBsdWdpbnMubWVzaFNoYWRlcjtcbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgc2hhZGVyID0gc2hhZGVyLnNoYWRlcnNbZ2wuaWRdIHx8IHNoYWRlci5nZXRTaGFkZXIocmVuZGVyZXIpOy8vIDogc2hhZGVyO1xuICAgIH1cblxuICAgIHRoaXMucmVuZGVyZXIuc2hhZGVyTWFuYWdlci5zZXRTaGFkZXIoc2hhZGVyKTtcblxuICAgIHNoYWRlci51bmlmb3Jtcy50cmFuc2xhdGlvbk1hdHJpeC52YWx1ZSA9IG1lc2gud29ybGRUcmFuc2Zvcm0udG9BcnJheSh0cnVlKTtcbiAgICBzaGFkZXIudW5pZm9ybXMucHJvamVjdGlvbk1hdHJpeC52YWx1ZSA9IHJlbmRlcmVyLmN1cnJlbnRSZW5kZXJUYXJnZXQucHJvamVjdGlvbk1hdHJpeC50b0FycmF5KHRydWUpO1xuICAgIHNoYWRlci51bmlmb3Jtcy5hbHBoYS52YWx1ZSA9IG1lc2gud29ybGRBbHBoYTtcblxuICAgIHNoYWRlci5zeW5jVW5pZm9ybXMoKTtcblxuICAgIGlmICghbWVzaC5kaXJ0eSlcbiAgICB7XG5cbiAgICAgICAgZ2wuYmluZEJ1ZmZlcihnbC5BUlJBWV9CVUZGRVIsIG1lc2guX3ZlcnRleEJ1ZmZlcik7XG4gICAgICAgIGdsLmJ1ZmZlclN1YkRhdGEoZ2wuQVJSQVlfQlVGRkVSLCAwLCBtZXNoLnZlcnRpY2VzKTtcbiAgICAgICAgZ2wudmVydGV4QXR0cmliUG9pbnRlcihzaGFkZXIuYXR0cmlidXRlcy5hVmVydGV4UG9zaXRpb24sIDIsIGdsLkZMT0FULCBmYWxzZSwgMCwgMCk7XG5cbiAgICAgICAgLy8gdXBkYXRlIHRoZSB1dnNcbiAgICAgICAgZ2wuYmluZEJ1ZmZlcihnbC5BUlJBWV9CVUZGRVIsIG1lc2guX3V2QnVmZmVyKTtcbiAgICAgICAgZ2wudmVydGV4QXR0cmliUG9pbnRlcihzaGFkZXIuYXR0cmlidXRlcy5hVGV4dHVyZUNvb3JkLCAyLCBnbC5GTE9BVCwgZmFsc2UsIDAsIDApO1xuXG5cbiAgICAgICAgZ2wuYWN0aXZlVGV4dHVyZShnbC5URVhUVVJFMCk7XG5cbiAgICAgICBpZiAoIXRleHR1cmUuX2dsVGV4dHVyZXNbZ2wuaWRdKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnJlbmRlcmVyLnVwZGF0ZVRleHR1cmUodGV4dHVyZSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgICAvLyBiaW5kIHRoZSBjdXJyZW50IHRleHR1cmVcbiAgICAgICAgICAgIGdsLmJpbmRUZXh0dXJlKGdsLlRFWFRVUkVfMkQsIHRleHR1cmUuX2dsVGV4dHVyZXNbZ2wuaWRdKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGdsLmJpbmRCdWZmZXIoZ2wuRUxFTUVOVF9BUlJBWV9CVUZGRVIsIG1lc2guX2luZGV4QnVmZmVyKTtcbiAgICAgICAgZ2wuYnVmZmVyU3ViRGF0YShnbC5FTEVNRU5UX0FSUkFZX0JVRkZFUiwgMCwgbWVzaC5pbmRpY2VzKTtcbiAgICB9XG4gICAgZWxzZVxuICAgIHtcblxuICAgICAgICBtZXNoLmRpcnR5ID0gZmFsc2U7XG4gICAgICAgIGdsLmJpbmRCdWZmZXIoZ2wuQVJSQVlfQlVGRkVSLCBtZXNoLl92ZXJ0ZXhCdWZmZXIpO1xuICAgICAgICBnbC5idWZmZXJEYXRhKGdsLkFSUkFZX0JVRkZFUiwgbWVzaC52ZXJ0aWNlcywgZ2wuU1RBVElDX0RSQVcpO1xuICAgICAgICBnbC52ZXJ0ZXhBdHRyaWJQb2ludGVyKHNoYWRlci5hdHRyaWJ1dGVzLmFWZXJ0ZXhQb3NpdGlvbiwgMiwgZ2wuRkxPQVQsIGZhbHNlLCAwLCAwKTtcblxuICAgICAgICAvLyB1cGRhdGUgdGhlIHV2c1xuICAgICAgICBnbC5iaW5kQnVmZmVyKGdsLkFSUkFZX0JVRkZFUiwgbWVzaC5fdXZCdWZmZXIpO1xuICAgICAgICBnbC5idWZmZXJEYXRhKGdsLkFSUkFZX0JVRkZFUiwgbWVzaC51dnMsIGdsLlNUQVRJQ19EUkFXKTtcbiAgICAgICAgZ2wudmVydGV4QXR0cmliUG9pbnRlcihzaGFkZXIuYXR0cmlidXRlcy5hVGV4dHVyZUNvb3JkLCAyLCBnbC5GTE9BVCwgZmFsc2UsIDAsIDApO1xuXG4gICAgICAgICBnbC5hY3RpdmVUZXh0dXJlKGdsLlRFWFRVUkUwKTtcblxuICAgICAgICBpZiAoIXRleHR1cmUuX2dsVGV4dHVyZXNbZ2wuaWRdKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnJlbmRlcmVyLnVwZGF0ZVRleHR1cmUodGV4dHVyZSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgICAvLyBiaW5kIHRoZSBjdXJyZW50IHRleHR1cmVcbiAgICAgICAgICAgIGdsLmJpbmRUZXh0dXJlKGdsLlRFWFRVUkVfMkQsIHRleHR1cmUuX2dsVGV4dHVyZXNbZ2wuaWRdKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGRvbnQgbmVlZCB0byB1cGxvYWQhXG4gICAgICAgIGdsLmJpbmRCdWZmZXIoZ2wuRUxFTUVOVF9BUlJBWV9CVUZGRVIsIG1lc2guX2luZGV4QnVmZmVyKTtcbiAgICAgICAgZ2wuYnVmZmVyRGF0YShnbC5FTEVNRU5UX0FSUkFZX0JVRkZFUiwgbWVzaC5pbmRpY2VzLCBnbC5TVEFUSUNfRFJBVyk7XG5cbiAgICB9XG5cbiAgICBnbC5kcmF3RWxlbWVudHMoZHJhd01vZGUsIG1lc2guaW5kaWNlcy5sZW5ndGgsIGdsLlVOU0lHTkVEX1NIT1JULCAwKTtcblxufTtcblxuLyoqXG4gKiBQcmVwYXJlcyBhbGwgdGhlIGJ1ZmZlcnMgdG8gcmVuZGVyIHRoaXMgbWVzaFxuICogQHBhcmFtIG1lc2gge1BJWEkubWVzaC5NZXNofSB0aGUgbWVzaCB0byByZW5kZXJcbiAqL1xuTWVzaFJlbmRlcmVyLnByb3RvdHlwZS5faW5pdFdlYkdMID0gZnVuY3Rpb24gKG1lc2gpXG57XG4gICAgLy8gYnVpbGQgdGhlIHN0cmlwIVxuICAgIHZhciBnbCA9IHRoaXMucmVuZGVyZXIuZ2w7XG5cbiAgICBtZXNoLl92ZXJ0ZXhCdWZmZXIgPSBnbC5jcmVhdGVCdWZmZXIoKTtcbiAgICBtZXNoLl9pbmRleEJ1ZmZlciA9IGdsLmNyZWF0ZUJ1ZmZlcigpO1xuICAgIG1lc2guX3V2QnVmZmVyID0gZ2wuY3JlYXRlQnVmZmVyKCk7XG5cblxuXG4gICAgZ2wuYmluZEJ1ZmZlcihnbC5BUlJBWV9CVUZGRVIsIG1lc2guX3ZlcnRleEJ1ZmZlcik7XG4gICAgZ2wuYnVmZmVyRGF0YShnbC5BUlJBWV9CVUZGRVIsIG1lc2gudmVydGljZXMsIGdsLkRZTkFNSUNfRFJBVyk7XG5cbiAgICBnbC5iaW5kQnVmZmVyKGdsLkFSUkFZX0JVRkZFUiwgbWVzaC5fdXZCdWZmZXIpO1xuICAgIGdsLmJ1ZmZlckRhdGEoZ2wuQVJSQVlfQlVGRkVSLCAgbWVzaC51dnMsIGdsLlNUQVRJQ19EUkFXKTtcblxuICAgIGlmKG1lc2guY29sb3JzKXtcbiAgICAgICAgbWVzaC5fY29sb3JCdWZmZXIgPSBnbC5jcmVhdGVCdWZmZXIoKTtcbiAgICAgICAgZ2wuYmluZEJ1ZmZlcihnbC5BUlJBWV9CVUZGRVIsIG1lc2guX2NvbG9yQnVmZmVyKTtcbiAgICAgICAgZ2wuYnVmZmVyRGF0YShnbC5BUlJBWV9CVUZGRVIsIG1lc2guY29sb3JzLCBnbC5TVEFUSUNfRFJBVyk7XG4gICAgfVxuXG4gICAgZ2wuYmluZEJ1ZmZlcihnbC5FTEVNRU5UX0FSUkFZX0JVRkZFUiwgbWVzaC5faW5kZXhCdWZmZXIpO1xuICAgIGdsLmJ1ZmZlckRhdGEoZ2wuRUxFTUVOVF9BUlJBWV9CVUZGRVIsIG1lc2guaW5kaWNlcywgZ2wuU1RBVElDX0RSQVcpO1xufTtcblxuXG4vKipcbiAqIEVtcHRpZXMgdGhlIGN1cnJlbnQgYmF0Y2guXG4gKlxuICovXG5NZXNoUmVuZGVyZXIucHJvdG90eXBlLmZsdXNoID0gZnVuY3Rpb24gKClcbntcblxufTtcblxuLyoqXG4gKiBTdGFydHMgYSBuZXcgbWVzaCByZW5kZXJlci5cbiAqXG4gKi9cbk1lc2hSZW5kZXJlci5wcm90b3R5cGUuc3RhcnQgPSBmdW5jdGlvbiAoKVxue1xuICAgIFxuXG4gICAgdGhpcy5jdXJyZW50U2hhZGVyID0gbnVsbDtcbn07XG5cbi8qKlxuICogRGVzdHJveXMgdGhlIE1lc2ggcmVuZGVyZXJcbiAqXG4gKi9cbk1lc2hSZW5kZXJlci5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uICgpXG57XG4gICAgY29yZS5PYmplY3RSZW5kZXJlci5wcm90b3R5cGUuZGVzdHJveS5jYWxsKHRoaXMpO1xufTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vLi4vY29yZScpO1xuXG4vKipcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5TaGFkZXJcbiAqIEBtZW1iZXJvZiBQSVhJLm1lc2hcbiAqIEBwYXJhbSBzaGFkZXJNYW5hZ2VyIHtQSVhJLlNoYWRlck1hbmFnZXJ9IFRoZSBXZWJHTCBzaGFkZXIgbWFuYWdlciB0aGlzIHNoYWRlciB3b3JrcyBmb3IuXG4gKi9cbmZ1bmN0aW9uIE1lc2hTaGFkZXIoc2hhZGVyTWFuYWdlcilcbntcbiAgICBjb3JlLlNoYWRlci5jYWxsKHRoaXMsXG4gICAgICAgIHNoYWRlck1hbmFnZXIsXG4gICAgICAgIC8vIHZlcnRleCBzaGFkZXJcbiAgICAgICAgW1xuICAgICAgICAgICAgJ3ByZWNpc2lvbiBsb3dwIGZsb2F0OycsXG4gICAgICAgICAgICAnYXR0cmlidXRlIHZlYzIgYVZlcnRleFBvc2l0aW9uOycsXG4gICAgICAgICAgICAnYXR0cmlidXRlIHZlYzIgYVRleHR1cmVDb29yZDsnLFxuXG4gICAgICAgICAgICAndW5pZm9ybSBtYXQzIHRyYW5zbGF0aW9uTWF0cml4OycsXG4gICAgICAgICAgICAndW5pZm9ybSBtYXQzIHByb2plY3Rpb25NYXRyaXg7JyxcblxuICAgICAgICAgICAgJ3ZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkOycsXG5cbiAgICAgICAgICAgICd2b2lkIG1haW4odm9pZCl7JyxcbiAgICAgICAgICAgICcgICBnbF9Qb3NpdGlvbiA9IHZlYzQoKHByb2plY3Rpb25NYXRyaXggKiB0cmFuc2xhdGlvbk1hdHJpeCAqIHZlYzMoYVZlcnRleFBvc2l0aW9uLCAxLjApKS54eSwgMC4wLCAxLjApOycsXG4gICAgICAgICAgICAnICAgdlRleHR1cmVDb29yZCA9IGFUZXh0dXJlQ29vcmQ7JyxcbiAgICAgICAgICAgICd9J1xuICAgICAgICBdLmpvaW4oJ1xcbicpLFxuICAgICAgICBbXG4gICAgICAgICAgICAncHJlY2lzaW9uIGxvd3AgZmxvYXQ7JyxcblxuICAgICAgICAgICAgJ3ZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkOycsXG4gICAgICAgICAgICAndW5pZm9ybSBmbG9hdCBhbHBoYTsnLFxuXG4gICAgICAgICAgICAndW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXI7JyxcblxuICAgICAgICAgICAgJ3ZvaWQgbWFpbih2b2lkKXsnLFxuICAgICAgICAgICAgJyAgIGdsX0ZyYWdDb2xvciA9IHRleHR1cmUyRCh1U2FtcGxlciwgdlRleHR1cmVDb29yZCkgKiBhbHBoYSA7JyxcbiAgICAgICAgICAgICd9J1xuICAgICAgICBdLmpvaW4oJ1xcbicpLFxuICAgICAgICAvLyBjdXN0b20gdW5pZm9ybXNcbiAgICAgICAge1xuICAgICAgICAgICAgYWxwaGE6ICB7IHR5cGU6ICcxZicsIHZhbHVlOiAwIH0sXG4gICAgICAgICAgICB0cmFuc2xhdGlvbk1hdHJpeDogeyB0eXBlOiAnbWF0MycsIHZhbHVlOiBuZXcgRmxvYXQzMkFycmF5KDkpIH0sXG4gICAgICAgICAgICBwcm9qZWN0aW9uTWF0cml4OiB7IHR5cGU6ICdtYXQzJywgdmFsdWU6IG5ldyBGbG9hdDMyQXJyYXkoOSkgfVxuICAgICAgICB9LFxuICAgICAgICAvLyBjdXN0b20gYXR0cmlidXRlc1xuICAgICAgICB7XG4gICAgICAgICAgICBhVmVydGV4UG9zaXRpb246MCxcbiAgICAgICAgICAgIGFUZXh0dXJlQ29vcmQ6MFxuICAgICAgICB9XG4gICAgKTtcbn1cblxuTWVzaFNoYWRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuU2hhZGVyLnByb3RvdHlwZSk7XG5NZXNoU2hhZGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IE1lc2hTaGFkZXI7XG5tb2R1bGUuZXhwb3J0cyA9IE1lc2hTaGFkZXI7XG5cbmNvcmUuU2hhZGVyTWFuYWdlci5yZWdpc3RlclBsdWdpbignbWVzaFNoYWRlcicsIE1lc2hTaGFkZXIpO1xuIiwiLy8gUmVmZXJlbmNlczpcbi8vIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0phdmFTY3JpcHQvUmVmZXJlbmNlL0dsb2JhbF9PYmplY3RzL01hdGgvc2lnblxuXG5pZiAoIU1hdGguc2lnbilcbntcbiAgICBNYXRoLnNpZ24gPSBmdW5jdGlvbiAoeCkge1xuICAgICAgICB4ID0gK3g7XG4gICAgICAgIGlmICh4ID09PSAwIHx8IGlzTmFOKHgpKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4geDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4geCA+IDAgPyAxIDogLTE7XG4gICAgfTtcbn1cbiIsIi8vIFJlZmVyZW5jZXM6XG4vLyBodHRwczovL2dpdGh1Yi5jb20vc2luZHJlc29yaHVzL29iamVjdC1hc3NpZ25cbi8vIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0phdmFTY3JpcHQvUmVmZXJlbmNlL0dsb2JhbF9PYmplY3RzL09iamVjdC9hc3NpZ25cblxuaWYgKCFPYmplY3QuYXNzaWduKVxue1xuICAgIE9iamVjdC5hc3NpZ24gPSByZXF1aXJlKCdvYmplY3QtYXNzaWduJyk7XG59XG4iLCJyZXF1aXJlKCcuL09iamVjdC5hc3NpZ24nKTtcbnJlcXVpcmUoJy4vcmVxdWVzdEFuaW1hdGlvbkZyYW1lJyk7XG5yZXF1aXJlKCcuL01hdGguc2lnbicpO1xuIiwiLy8gUmVmZXJlbmNlczpcbi8vIGh0dHA6Ly9wYXVsaXJpc2guY29tLzIwMTEvcmVxdWVzdGFuaW1hdGlvbmZyYW1lLWZvci1zbWFydC1hbmltYXRpbmcvXG4vLyBodHRwczovL2dpc3QuZ2l0aHViLmNvbS8xNTc5NjcxXG4vLyBodHRwOi8vdXBkYXRlcy5odG1sNXJvY2tzLmNvbS8yMDEyLzA1L3JlcXVlc3RBbmltYXRpb25GcmFtZS1BUEktbm93LXdpdGgtc3ViLW1pbGxpc2Vjb25kLXByZWNpc2lvblxuLy8gaHR0cHM6Ly9naXN0LmdpdGh1Yi5jb20vdGltaGFsbC80MDc4NjE0XG4vLyBodHRwczovL2dpdGh1Yi5jb20vRmluYW5jaWFsLVRpbWVzL3BvbHlmaWxsLXNlcnZpY2UvdHJlZS9tYXN0ZXIvcG9seWZpbGxzL3JlcXVlc3RBbmltYXRpb25GcmFtZVxuXG4vLyBFeHBlY3RlZCB0byBiZSB1c2VkIHdpdGggQnJvd3NlcmZpeVxuLy8gQnJvd3NlcmlmeSBhdXRvbWF0aWNhbGx5IGRldGVjdHMgdGhlIHVzZSBvZiBgZ2xvYmFsYCBhbmQgcGFzc2VzIHRoZVxuLy8gY29ycmVjdCByZWZlcmVuY2Ugb2YgYGdsb2JhbGAsIGBzZWxmYCwgYW5kIGZpbmFsbHkgYHdpbmRvd2BcblxuLy8gRGF0ZS5ub3dcbmlmICghKERhdGUubm93ICYmIERhdGUucHJvdG90eXBlLmdldFRpbWUpKSB7XG4gICAgRGF0ZS5ub3cgPSBmdW5jdGlvbiBub3coKSB7XG4gICAgICAgIHJldHVybiBuZXcgRGF0ZSgpLmdldFRpbWUoKTtcbiAgICB9O1xufVxuXG4vLyBwZXJmb3JtYW5jZS5ub3dcbmlmICghKGdsb2JhbC5wZXJmb3JtYW5jZSAmJiBnbG9iYWwucGVyZm9ybWFuY2Uubm93KSkge1xuICAgIHZhciBzdGFydFRpbWUgPSBEYXRlLm5vdygpO1xuICAgIGlmICghZ2xvYmFsLnBlcmZvcm1hbmNlKSB7XG4gICAgICAgIGdsb2JhbC5wZXJmb3JtYW5jZSA9IHt9O1xuICAgIH1cbiAgICBnbG9iYWwucGVyZm9ybWFuY2Uubm93ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gRGF0ZS5ub3coKSAtIHN0YXJ0VGltZTtcbiAgICB9O1xufVxuXG4vLyByZXF1ZXN0QW5pbWF0aW9uRnJhbWVcbnZhciBsYXN0VGltZSA9IERhdGUubm93KCk7XG52YXIgdmVuZG9ycyA9IFsnbXMnLCAnbW96JywgJ3dlYmtpdCcsICdvJ107XG5cbmZvcih2YXIgeCA9IDA7IHggPCB2ZW5kb3JzLmxlbmd0aCAmJiAhZ2xvYmFsLnJlcXVlc3RBbmltYXRpb25GcmFtZTsgKyt4KSB7XG4gICAgZ2xvYmFsLnJlcXVlc3RBbmltYXRpb25GcmFtZSA9IGdsb2JhbFt2ZW5kb3JzW3hdICsgJ1JlcXVlc3RBbmltYXRpb25GcmFtZSddO1xuICAgIGdsb2JhbC5jYW5jZWxBbmltYXRpb25GcmFtZSA9IGdsb2JhbFt2ZW5kb3JzW3hdICsgJ0NhbmNlbEFuaW1hdGlvbkZyYW1lJ10gfHxcbiAgICAgICAgZ2xvYmFsW3ZlbmRvcnNbeF0gKyAnQ2FuY2VsUmVxdWVzdEFuaW1hdGlvbkZyYW1lJ107XG59XG5cbmlmICghZ2xvYmFsLnJlcXVlc3RBbmltYXRpb25GcmFtZSkge1xuICAgIGdsb2JhbC5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUgPSBmdW5jdGlvbiAoY2FsbGJhY2spIHtcbiAgICAgICAgaWYgKHR5cGVvZiBjYWxsYmFjayAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihjYWxsYmFjayArICdpcyBub3QgYSBmdW5jdGlvbicpO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGN1cnJlbnRUaW1lID0gRGF0ZS5ub3coKSxcbiAgICAgICAgICAgIGRlbGF5ID0gMTYgKyBsYXN0VGltZSAtIGN1cnJlbnRUaW1lO1xuXG4gICAgICAgIGlmIChkZWxheSA8IDApIHtcbiAgICAgICAgICAgIGRlbGF5ID0gMDtcbiAgICAgICAgfVxuXG4gICAgICAgIGxhc3RUaW1lID0gY3VycmVudFRpbWU7XG5cbiAgICAgICAgcmV0dXJuIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgbGFzdFRpbWUgPSBEYXRlLm5vdygpO1xuICAgICAgICAgICAgY2FsbGJhY2socGVyZm9ybWFuY2Uubm93KCkpO1xuICAgICAgICB9LCBkZWxheSk7XG4gICAgfTtcbn1cblxuaWYgKCFnbG9iYWwuY2FuY2VsQW5pbWF0aW9uRnJhbWUpIHtcbiAgICBnbG9iYWwuY2FuY2VsQW5pbWF0aW9uRnJhbWUgPSBmdW5jdGlvbihpZCkge1xuICAgICAgICBjbGVhclRpbWVvdXQoaWQpO1xuICAgIH07XG59XG4iXX0= //# sourceMappingURL=pixi.js.map diff --git a/bin/pixi.min.js b/bin/pixi.min.js index f7a788e..d59cd98 100644 --- a/bin/pixi.min.js +++ b/bin/pixi.min.js @@ -1,11 +1,11 @@ -!function(t){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=t();else if("function"==typeof define&&define.amd)define([],t);else{var e;e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:this,e.PIXI=t()}}(function(){var t;return function e(t,r,i){function n(s,a){if(!r[s]){if(!t[s]){var h="function"==typeof require&&require;if(!a&&h)return h(s,!0);if(o)return o(s,!0);var u=new Error("Cannot find module '"+s+"'");throw u.code="MODULE_NOT_FOUND",u}var l=r[s]={exports:{}};t[s][0].call(l.exports,function(e){var r=t[s][1][e];return n(r?r:e)},l,l.exports,e,t,r,i)}return r[s].exports}for(var o="function"==typeof require&&require,s=0;s=t.byteLength?i.bufferSubData(this.type,e,t):i.bufferData(this.type,t,this.drawType),this.data=t},n.prototype.bind=function(){var t=this.gl;t.bindBuffer(this.type,this.buffer)},n.createVertexBuffer=function(t,e,r){return new n(t,t.ARRAY_BUFFER,e,r)},n.createIndexBuffer=function(t,e,r){return new n(t,t.ELEMENT_ARRAY_BUFFER,e,r)},n.create=function(t,e,r,i){return new n(t,e,i)},e.exports=n},{}],3:[function(t,e,r){var i=t("./GLTexture"),n=function(t,e,r){this.gl=t,this.framebuffer=t.createFramebuffer(),this.stencil=null,this.texture=null,this.width=e||100,this.height=r||100};n.prototype.enableTexture=function(t){var e=this.gl;this.texture=t||new i(e),this.texture.bind(),this.bind(),e.framebufferTexture2D(e.FRAMEBUFFER,e.COLOR_ATTACHMENT0,e.TEXTURE_2D,this.texture.texture,0)},n.prototype.enableStencil=function(){if(!this.stencil){var t=this.gl;this.stencil=t.createRenderbuffer(),t.bindRenderbuffer(t.RENDERBUFFER,this.stencil),t.framebufferRenderbuffer(t.FRAMEBUFFER,t.DEPTH_STENCIL_ATTACHMENT,t.RENDERBUFFER,this.stencil),t.renderbufferStorage(t.RENDERBUFFER,t.DEPTH_STENCIL,this.width,this.height)}},n.prototype.clear=function(t,e,r,i){this.bind();var n=this.gl;n.clearColor(t,e,r,i),n.clear(n.COLOR_BUFFER_BIT)},n.prototype.bind=function(){var t=this.gl;t.bindFramebuffer(t.FRAMEBUFFER,this.framebuffer)},n.prototype.unbind=function(){gl.bindFramebuffer(gl.FRAMEBUFFER,null)},n.prototype.resize=function(t,e){var r=this.gl;this.width=t,this.height=e,this.texture&&(this.texture.bind(),r.texImage2D(r.TEXTURE_2D,0,this.format,t,e,0,this.format,this.type,null)),this.stencil&&(r.bindRenderbuffer(r.RENDERBUFFER,this.stencil),r.renderbufferStorage(r.RENDERBUFFER,r.DEPTH_STENCIL,t,e))},n.prototype.destroy=function(){var t=this.gl;t.deleteFramebuffer(this.framebuffer)},n.createRGBA=function(t,e,r,o){var s=new i(t,e,r);s.enableNearestScaling(),s.enableWrapClamp(),t.texImage2D(t.TEXTURE_2D,0,t.RGBA,e,r,0,t.RGBA,t.UNSIGNED_BYTE,o);var a=new n(t,e,r);return a.enableTexture(s),a},n.createFloat32=function(t,e,r,o){var s=new i.fromData(t,o,e,r);s.enableNearestScaling(),s.enableWrapClamp();var a=new n(t,e,r);return a.enableTexture(s),a},e.exports=n},{"./GLTexture":5}],4:[function(t,e,r){var i=t("./shader/compileProgram"),n=t("./shader/extractAttributes"),o=t("./shader/extractUniforms"),s=t("./shader/generateUniformAccessObject"),a=function(t,e,r){this.gl=t,this.program=i(t,e,r),this.attributes=n(t,this.program);var a=o(t,this.program);this.uniforms=s(t,a)};a.prototype.bind=function(){this.gl.useProgram(this.program)},a.prototype.destroy=function(){this.gl},e.exports=a},{"./shader/compileProgram":9,"./shader/extractAttributes":11,"./shader/extractUniforms":12,"./shader/generateUniformAccessObject":13}],5:[function(t,e,r){var i=function(t,e,r,i,n){this.gl=t,this.texture=t.createTexture(),this.mipmap=!1,this.premultiplyAlpha=!1,this.width=e||0,this.height=r||0,this.format=i||t.RGBA,this.type=n||t.UNSIGNED_BYTE};i.prototype.upload=function(t){this.bind();var e=this.gl;this.width=t.width,this.height=t.height,e.pixelStorei(e.UNPACK_PREMULTIPLY_ALPHA_WEBGL,this.premultiplyAlpha),e.texImage2D(e.TEXTURE_2D,0,this.format,this.format,this.type,t)};var n=!1;i.prototype.uploadData=function(t,e,r){if(this.bind(),this.width=e||this.width,this.height=r||this.height,t instanceof Float32Array){if(!n){var i=gl.getExtension("OES_texture_float");if(!i)throw new Error("floating point textures not available");n=!0}this.type=gl.FLOAT}else this.type=gl.UNSIGNED_BYTE;gl.pixelStorei(gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL,this.premultiplyAlpha),gl.texImage2D(gl.TEXTURE_2D,0,this.format,this.width,this.height,0,this.format,this.type,t)},i.prototype.bind=function(t){var e=this.gl;void 0!==t&&e.activeTexture(e.TEXTURE0+t),e.bindTexture(e.TEXTURE_2D,this.texture)},i.prototype.unbind=function(){var t=this.gl;t.bindTexture(t.TEXTURE_2D,null)},i.prototype.minFilter=function(t){var e=this.gl;this.bind(),this.mipmap?e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MIN_FILTER,t?e.LINEAR_MIPMAP_LINEAR:e.NEAREST_MIPMAP_NEAREST):e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MIN_FILTER,t?e.LINEAR:e.NEAREST)},i.prototype.magFilter=function(t){var e=this.gl;this.bind(),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MAG_FILTER,t?e.LINEAR:e.NEAREST)},i.prototype.enableMipmap=function(){this.bind(),this.mipmap=!0,gl.generateMipmap(gl.TEXTURE_2D)},i.prototype.enableLinearScaling=function(){this.minFilter(!0),this.magFilter(!0)},i.prototype.enableNearestScaling=function(){this.minFilter(!1),this.magFilter(!1)},i.prototype.enableWrapClamp=function(){var t=this.gl;this.bind(),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_WRAP_S,t.CLAMP_TO_EDGE),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_WRAP_T,t.CLAMP_TO_EDGE)},i.prototype.enableWrapRepeat=function(){var t=this.gl;this.bind(),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_WRAP_S,t.REPEAT),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_WRAP_T,t.REPEAT)},i.prototype.destroy=function(){var t=this.gl;t.deleteTexture(this.texture)},i.fromSource=function(t,e,r){var n=new i(t);return n.premultiplyAlpha=r||!1,n.upload(e),n},i.fromData=function(t,e,r,n){var o=new i(t);return o.uploadData(e,r,n),o},e.exports=i},{}],6:[function(t,e,r){function i(t){this.nativeVaoExtension=t.getExtension("OES_vertex_array_object")||t.getExtension("MOZ_OES_vertex_array_object")||t.getExtension("WEBKIT_OES_vertex_array_object"),this.nativeVaoExtension&&(this.nativeVao=this.nativeVaoExtension.createVertexArrayOES()),this.gl=t,this.attributes=[],this.indexBuffer=null,this.dirty=!1}i.prototype.constructor=i,e.exports=i,i.prototype.bind=function(){this.nativeVao?(this.nativeVaoExtension.bindVertexArrayOES(this.nativeVao),this.dirty&&(this.dirty=!1,this.activate())):this.activate()},i.prototype.unbind=function(){this.nativeVao&&this.nativeVaoExtension.bindVertexArrayOES(null)},i.prototype.activate=function(){for(var t=this.gl,e=0;es;s++){var a=t.getActiveAttrib(e,s),h=i(t,a.type);r[a.name]={type:h,size:n(h),location:t.getAttribLocation(e,a.name),pointer:function(e,r,i,n){t.vertexAttribPointer(this.location,this.size,e||t.FLOAT,r||!1,i||0,n||0)}}}return r};e.exports=o},{"./mapSize":14,"./mapType":15}],12:[function(t,e,r){var i=t("./mapType"),n=t("./defaultValue"),o=function(t,e){for(var r={},o=t.getProgramParameter(e,t.ACTIVE_UNIFORMS),s=0;o>s;s++){var a=t.getActiveUniform(e,s),h=a.name.replace(/\[.*?\]/,""),u=i(t,a.type);r[h]={type:u,size:a.size,location:t.getUniformLocation(e,h),value:n(u,a.size)}}return r};e.exports=o},{"./defaultValue":10,"./mapType":15}],13:[function(t,e,r){var i=function(t,e){var r={data:{}};r.gl=t;for(var i=Object.keys(e),a=0;a=0&&t.length%1===0}function c(t,e){for(var r=-1,i=t.length;++ri?i:null}):(r=Y(t),e=r.length,function(){return i++,e>i?r[i]:null})}function y(t,e){return e=null==e?t.length-1:+e,function(){for(var r=Math.max(arguments.length-e,0),i=Array(r),n=0;r>n;n++)i[n]=arguments[n+e];switch(e){case 0:return t.call(this,i);case 1:return t.call(this,arguments[0],i)}}}function x(t){return function(e,r,i){return t(e,i)}}function b(t){return function(e,r,i){i=u(i||n),e=e||[];var o=m(e);if(0>=t)return i(null);var s=!1,a=0,l=!1;!function c(){if(s&&0>=a)return i(null);for(;t>a&&!l;){var n=o();if(null===n)return s=!0,void(0>=a&&i(null));a+=1,r(e[n],n,h(function(t){a-=1,t?(i(t),l=!0):c()}))}}()}}function _(t){return function(e,r,i){return t(N.eachOf,e,r,i)}}function T(t){return function(e,r,i,n){return t(b(r),e,i,n)}}function E(t){return function(e,r,i){return t(N.eachOfSeries,e,r,i)}}function S(t,e,r,i){i=u(i||n),e=e||[];var o=l(e)?[]:{};t(e,function(t,e,i){r(t,function(t,r){o[e]=r,i(t)})},function(t){i(t,o)})}function w(t,e,r,i){var n=[];t(e,function(t,e,i){r(t,function(r){r&&n.push({index:e,value:t}),i()})},function(){i(p(n.sort(function(t,e){return t.index-e.index}),function(t){return t.value}))})}function C(t,e,r,i){w(t,e,function(t,e){r(t,function(t){e(!t)})},i)}function A(t,e,r){return function(i,n,o,s){function a(){s&&s(r(!1,void 0))}function h(t,i,n){return s?void o(t,function(i){s&&e(i)&&(s(r(!0,t)),s=o=!1),n()}):n()}arguments.length>3?t(i,n,h,a):(s=o,o=n,t(i,h,a))}}function M(t,e){return e}function R(t,e,r){r=r||n;var i=l(e)?[]:{};t(e,function(t,e,r){t(y(function(t,n){n.length<=1&&(n=n[0]),i[e]=n,r(t)}))},function(t){r(t,i)})}function O(t,e,r,i){var n=[];t(e,function(t,e,i){r(t,function(t,e){n=n.concat(e||[]),i(t)})},function(t){i(t,n)})}function D(t,e,r){function i(t,e,r,i){if(null!=i&&"function"!=typeof i)throw new Error("task callback must be a function");return t.started=!0,j(e)||(e=[e]),0===e.length&&t.idle()?N.setImmediate(function(){t.drain()}):(c(e,function(e){var o={data:e,callback:i||n};r?t.tasks.unshift(o):t.tasks.push(o),t.tasks.length===t.concurrency&&t.saturated()}),void N.setImmediate(t.process))}function o(t,e){return function(){s-=1;var r=!1,i=arguments;c(e,function(t){c(a,function(e,i){e!==t||r||(a.splice(i,1),r=!0)}),t.callback.apply(t,i)}),t.tasks.length+s===0&&t.drain(),t.process()}}if(null==e)e=1;else if(0===e)throw new Error("Concurrency must not be zero");var s=0,a=[],u={tasks:[],concurrency:e,payload:r,saturated:n,empty:n,drain:n,started:!1,paused:!1,push:function(t,e){i(u,t,!1,e)},kill:function(){u.drain=n,u.tasks=[]},unshift:function(t,e){i(u,t,!0,e)},process:function(){if(!u.paused&&s=e;e++)N.setImmediate(u.process)}}};return u}function P(t){return y(function(e,r){e.apply(null,r.concat([y(function(e,r){"object"==typeof console&&(e?console.error&&console.error(e):console[t]&&c(r,function(e){console[t](e)}))})]))})}function F(t){return function(e,r,i){t(d(e),r,i)}}function L(t){return y(function(e,r){var i=y(function(r){var i=this,n=r.pop();return t(e,function(t,e,n){t.apply(i,r.concat([n]))},n)});return r.length?i.apply(this,r):i})}function B(t){return y(function(e){var r=e.pop();e.push(function(){var t=arguments;i?N.setImmediate(function(){r.apply(null,t)}):r.apply(null,t)});var i=!0;t.apply(this,e),i=!1})}var I,N={},U="object"==typeof self&&self.self===self&&self||"object"==typeof i&&i.global===i&&i||this;null!=U&&(I=U.async),N.noConflict=function(){return U.async=I,N};var k=Object.prototype.toString,j=Array.isArray||function(t){return"[object Array]"===k.call(t)},G=function(t){var e=typeof t;return"function"===e||"object"===e&&!!t},Y=Object.keys||function(t){var e=[];for(var r in t)t.hasOwnProperty(r)&&e.push(r);return e},X="function"==typeof setImmediate&&setImmediate,z=X?function(t){X(t)}:function(t){setTimeout(t,0)};"object"==typeof e&&"function"==typeof e.nextTick?N.nextTick=e.nextTick:N.nextTick=z,N.setImmediate=X?z:N.nextTick,N.forEach=N.each=function(t,e,r){return N.eachOf(t,x(e),r)},N.forEachSeries=N.eachSeries=function(t,e,r){return N.eachOfSeries(t,x(e),r)},N.forEachLimit=N.eachLimit=function(t,e,r,i){return b(e)(t,x(r),i)},N.forEachOf=N.eachOf=function(t,e,r){function i(t){a--,t?r(t):null===o&&0>=a&&r(null)}r=u(r||n),t=t||[];for(var o,s=m(t),a=0;null!=(o=s());)a+=1,e(t[o],o,h(i));0===a&&r(null)},N.forEachOfSeries=N.eachOfSeries=function(t,e,r){function i(){var n=!0;return null===s?r(null):(e(t[s],s,h(function(t){if(t)r(t);else{if(s=o(),null===s)return r(null);n?N.setImmediate(i):i()}})),void(n=!1))}r=u(r||n),t=t||[];var o=m(t),s=o();i()},N.forEachOfLimit=N.eachOfLimit=function(t,e,r,i){b(e)(t,r,i)},N.map=_(S),N.mapSeries=E(S),N.mapLimit=T(S),N.inject=N.foldl=N.reduce=function(t,e,r,i){N.eachOfSeries(t,function(t,i,n){r(e,t,function(t,r){e=r,n(t)})},function(t){i(t,e)})},N.foldr=N.reduceRight=function(t,e,r,i){var n=p(t,o).reverse();N.reduce(n,e,r,i)},N.transform=function(t,e,r,i){3===arguments.length&&(i=r,r=e,e=j(t)?[]:{}),N.eachOf(t,function(t,i,n){r(e,t,i,n)},function(t){i(t,e)})},N.select=N.filter=_(w),N.selectLimit=N.filterLimit=T(w),N.selectSeries=N.filterSeries=E(w),N.reject=_(C),N.rejectLimit=T(C),N.rejectSeries=E(C),N.any=N.some=A(N.eachOf,s,o),N.someLimit=A(N.eachOfLimit,s,o),N.all=N.every=A(N.eachOf,a,a),N.everyLimit=A(N.eachOfLimit,a,a),N.detect=A(N.eachOf,o,M),N.detectSeries=A(N.eachOfSeries,o,M),N.detectLimit=A(N.eachOfLimit,o,M),N.sortBy=function(t,e,r){function i(t,e){var r=t.criteria,i=e.criteria;return i>r?-1:r>i?1:0}N.map(t,function(t,r){e(t,function(e,i){e?r(e):r(null,{value:t,criteria:i})})},function(t,e){return t?r(t):void r(null,p(e.sort(i),function(t){return t.value}))})},N.auto=function(t,e,r){function i(t){d.unshift(t)}function o(t){var e=g(d,t);e>=0&&d.splice(e,1)}function s(){h--,c(d.slice(0),function(t){t()})}r||(r=e,e=null),r=u(r||n);var a=Y(t),h=a.length;if(!h)return r(null);e||(e=h);var l={},p=0,d=[];i(function(){h||r(null,l)}),c(a,function(n){function a(){return e>p&&f(m,function(t,e){return t&&l.hasOwnProperty(e)},!0)&&!l.hasOwnProperty(n)}function h(){a()&&(p++,o(h),c[c.length-1](d,l))}for(var u,c=j(t[n])?t[n]:[t[n]],d=y(function(t,e){if(p--,e.length<=1&&(e=e[0]),t){var i={};v(l,function(t,e){i[e]=t}),i[n]=e,r(t,i)}else l[n]=e,N.setImmediate(s)}),m=c.slice(0,c.length-1),x=m.length;x--;){if(!(u=t[m[x]]))throw new Error("Has inexistant dependency");if(j(u)&&g(u,n)>=0)throw new Error("Has cyclic dependencies")}a()?(p++,c[c.length-1](d,l)):i(h)})},N.retry=function(t,e,r){function i(t,e){if("number"==typeof e)t.times=parseInt(e,10)||o;else{if("object"!=typeof e)throw new Error("Unsupported argument type for 'times': "+typeof e);t.times=parseInt(e.times,10)||o,t.interval=parseInt(e.interval,10)||s}}function n(t,e){function r(t,r){return function(i){t(function(t,e){i(!t||r,{err:t,result:e})},e)}}function i(t){return function(e){setTimeout(function(){e(null)},t)}}for(;h.times;){var n=!(h.times-=1);a.push(r(h.task,n)),!n&&h.interval>0&&a.push(i(h.interval))}N.series(a,function(e,r){r=r[r.length-1],(t||h.callback)(r.err,r.result)})}var o=5,s=0,a=[],h={times:o,interval:s},u=arguments.length;if(1>u||u>3)throw new Error("Invalid arguments - must be either (task), (task, callback), (times, task) or (times, task, callback)");return 2>=u&&"function"==typeof t&&(r=e,e=t),"function"!=typeof t&&i(h,t),h.callback=r,h.task=e,h.callback?n():n},N.waterfall=function(t,e){function r(t){return y(function(i,n){if(i)e.apply(null,[i].concat(n));else{var o=t.next();o?n.push(r(o)):n.push(e),B(t).apply(null,n)}})}if(e=u(e||n),!j(t)){var i=new Error("First argument to waterfall must be an array of functions");return e(i)}return t.length?void r(N.iterator(t))():e()},N.parallel=function(t,e){R(N.eachOf,t,e)},N.parallelLimit=function(t,e,r){R(b(e),t,r)},N.series=function(t,e){R(N.eachOfSeries,t,e)},N.iterator=function(t){function e(r){function i(){return t.length&&t[r].apply(null,arguments),i.next()}return i.next=function(){return ri;){var o=i+(n-i+1>>>1);r(e,t[o])>=0?i=o:n=o-1}return i}function o(t,e,o,s){if(null!=s&&"function"!=typeof s)throw new Error("task callback must be a function");return t.started=!0,j(e)||(e=[e]),0===e.length?N.setImmediate(function(){t.drain()}):void c(e,function(e){var a={data:e,priority:o,callback:"function"==typeof s?s:n};t.tasks.splice(i(t.tasks,a,r)+1,0,a),t.tasks.length===t.concurrency&&t.saturated(),N.setImmediate(t.process)})}var s=N.queue(t,e);return s.push=function(t,e,r){o(s,t,e,r)},delete s.unshift,s},N.cargo=function(t,e){return D(t,1,e)},N.log=P("log"),N.dir=P("dir"),N.memoize=function(t,e){var r={},i={};e=e||o;var n=y(function(n){var o=n.pop(),s=e.apply(null,n);s in r?N.setImmediate(function(){o.apply(null,r[s])}):s in i?i[s].push(o):(i[s]=[o],t.apply(null,n.concat([y(function(t){r[s]=t;var e=i[s];delete i[s];for(var n=0,o=e.length;o>n;n++)e[n].apply(null,t)})])))});return n.memo=r,n.unmemoized=t,n},N.unmemoize=function(t){return function(){return(t.unmemoized||t).apply(null,arguments)}},N.times=F(N.map),N.timesSeries=F(N.mapSeries),N.timesLimit=function(t,e,r,i){return N.mapLimit(d(t),e,r,i)},N.seq=function(){var t=arguments;return y(function(e){var r=this,i=e[e.length-1];"function"==typeof i?e.pop():i=n,N.reduce(t,e,function(t,e,i){e.apply(r,t.concat([y(function(t,e){i(t,e)})]))},function(t,e){i.apply(r,[t].concat(e))})})},N.compose=function(){return N.seq.apply(null,Array.prototype.reverse.call(arguments))},N.applyEach=L(N.eachOf),N.applyEachSeries=L(N.eachOfSeries),N.forever=function(t,e){function r(t){return t?i(t):void o(r)}var i=h(e||n),o=B(t);r()},N.ensureAsync=B,N.constant=y(function(t){var e=[null].concat(t);return function(t){return t.apply(this,e)}}),N.wrapSync=N.asyncify=function(t){return y(function(e){var r,i=e.pop();try{r=t.apply(this,e)}catch(n){return i(n)}G(r)&&"function"==typeof r.then?r.then(function(t){i(null,t)})["catch"](function(t){i(t.message?t:new Error(t))}):i(null,r)})},"object"==typeof r&&r.exports?r.exports=N:"function"==typeof t&&t.amd?t([],function(){return N}):U.async=N}()}).call(this,e("_process"),"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{_process:18}],17:[function(t,e,r){(function(t){function e(t,e){for(var r=0,i=t.length-1;i>=0;i--){var n=t[i];"."===n?t.splice(i,1):".."===n?(t.splice(i,1),r++):r&&(t.splice(i,1),r--)}if(e)for(;r--;r)t.unshift("..");return t}function i(t,e){if(t.filter)return t.filter(e);for(var r=[],i=0;i=-1&&!n;o--){var s=o>=0?arguments[o]:t.cwd();if("string"!=typeof s)throw new TypeError("Arguments to path.resolve must be strings");s&&(r=s+"/"+r,n="/"===s.charAt(0))}return r=e(i(r.split("/"),function(t){return!!t}),!n).join("/"),(n?"/":"")+r||"."},r.normalize=function(t){var n=r.isAbsolute(t),o="/"===s(t,-1);return t=e(i(t.split("/"),function(t){return!!t}),!n).join("/"),t||n||(t="."),t&&o&&(t+="/"),(n?"/":"")+t},r.isAbsolute=function(t){return"/"===t.charAt(0)},r.join=function(){var t=Array.prototype.slice.call(arguments,0);return r.normalize(i(t,function(t,e){if("string"!=typeof t)throw new TypeError("Arguments to path.join must be strings");return t}).join("/"))},r.relative=function(t,e){function i(t){for(var e=0;e=0&&""===t[r];r--);return e>r?[]:t.slice(e,r-e+1)}t=r.resolve(t).substr(1),e=r.resolve(e).substr(1);for(var n=i(t.split("/")),o=i(e.split("/")),s=Math.min(n.length,o.length),a=s,h=0;s>h;h++)if(n[h]!==o[h]){a=h;break}for(var u=[],h=a;he&&(e=t.length+e),t.substr(e,r)}}).call(this,t("_process"))},{_process:18}],18:[function(t,e,r){function i(){l=!1,a.length?u=a.concat(u):c=-1,u.length&&n()}function n(){if(!l){var t=setTimeout(i);l=!0;for(var e=u.length;e;){for(a=u,u=[];++c1)for(var r=1;r1&&(i=r[0]+"@",t=r[1]),t=t.replace(F,".");var n=t.split("."),o=s(n,e).join(".");return i+o}function h(t){for(var e,r,i=[],n=0,o=t.length;o>n;)e=t.charCodeAt(n++),e>=55296&&56319>=e&&o>n?(r=t.charCodeAt(n++),56320==(64512&r)?i.push(((1023&e)<<10)+(1023&r)+65536):(i.push(e),n--)):i.push(e);return i}function u(t){return s(t,function(t){var e="";return t>65535&&(t-=65536,e+=N(t>>>10&1023|55296),t=56320|1023&t),e+=N(t)}).join("")}function l(t){return 10>t-48?t-22:26>t-65?t-65:26>t-97?t-97:E}function c(t,e){return t+22+75*(26>t)-((0!=e)<<5)}function p(t,e,r){var i=0;for(t=r?I(t/A):t>>1,t+=I(t/e);t>B*w>>1;i+=E)t=I(t/B);return I(i+(B+1)*t/(t+C))}function d(t){var e,r,i,n,s,a,h,c,d,f,v=[],g=t.length,m=0,y=R,x=M;for(r=t.lastIndexOf(O),0>r&&(r=0),i=0;r>i;++i)t.charCodeAt(i)>=128&&o("not-basic"),v.push(t.charCodeAt(i));for(n=r>0?r+1:0;g>n;){for(s=m,a=1,h=E;n>=g&&o("invalid-input"),c=l(t.charCodeAt(n++)),(c>=E||c>I((T-m)/a))&&o("overflow"),m+=c*a,d=x>=h?S:h>=x+w?w:h-x,!(d>c);h+=E)f=E-d,a>I(T/f)&&o("overflow"),a*=f;e=v.length+1,x=p(m-s,e,0==s),I(m/e)>T-y&&o("overflow"),y+=I(m/e),m%=e,v.splice(m++,0,y)}return u(v)}function f(t){var e,r,i,n,s,a,u,l,d,f,v,g,m,y,x,b=[];for(t=h(t),g=t.length,e=R,r=0,s=M,a=0;g>a;++a)v=t[a],128>v&&b.push(N(v));for(i=n=b.length,n&&b.push(O);g>i;){for(u=T,a=0;g>a;++a)v=t[a],v>=e&&u>v&&(u=v);for(m=i+1,u-e>I((T-r)/m)&&o("overflow"),r+=(u-e)*m,e=u,a=0;g>a;++a)if(v=t[a],e>v&&++r>T&&o("overflow"),v==e){for(l=r,d=E;f=s>=d?S:d>=s+w?w:d-s,!(f>l);d+=E)x=l-f,y=E-f,b.push(N(c(f+x%y,0))),l=I(x/y);b.push(N(c(l,0))),s=p(r,m,i==n),r=0,++i}++r,++e}return b.join("")}function v(t){return a(t,function(t){return D.test(t)?d(t.slice(4).toLowerCase()):t})}function g(t){return a(t,function(t){return P.test(t)?"xn--"+f(t):t})}var m="object"==typeof i&&i&&!i.nodeType&&i,y="object"==typeof r&&r&&!r.nodeType&&r,x="object"==typeof e&&e;(x.global===x||x.window===x||x.self===x)&&(n=x);var b,_,T=2147483647,E=36,S=1,w=26,C=38,A=700,M=72,R=128,O="-",D=/^xn--/,P=/[^\x20-\x7E]/,F=/[\x2E\u3002\uFF0E\uFF61]/g,L={overflow:"Overflow: input needs wider integers to process","not-basic":"Illegal input >= 0x80 (not a basic code point)","invalid-input":"Invalid input"},B=E-S,I=Math.floor,N=String.fromCharCode;if(b={version:"1.3.2",ucs2:{decode:h,encode:u},decode:d,encode:f,toASCII:g,toUnicode:v},"function"==typeof t&&"object"==typeof t.amd&&t.amd)t("punycode",function(){return b});else if(m&&y)if(r.exports==m)y.exports=b;else for(_ in b)b.hasOwnProperty(_)&&(m[_]=b[_]);else n.punycode=b}(this)}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{}],20:[function(t,e,r){"use strict";function i(t,e){return Object.prototype.hasOwnProperty.call(t,e)}e.exports=function(t,e,r,o){e=e||"&",r=r||"=";var s={};if("string"!=typeof t||0===t.length)return s;var a=/\+/g;t=t.split(e);var h=1e3;o&&"number"==typeof o.maxKeys&&(h=o.maxKeys);var u=t.length;h>0&&u>h&&(u=h);for(var l=0;u>l;++l){var c,p,d,f,v=t[l].replace(a,"%20"),g=v.indexOf(r);g>=0?(c=v.substr(0,g),p=v.substr(g+1)):(c=v, -p=""),d=decodeURIComponent(c),f=decodeURIComponent(p),i(s,d)?n(s[d])?s[d].push(f):s[d]=[s[d],f]:s[d]=f}return s};var n=Array.isArray||function(t){return"[object Array]"===Object.prototype.toString.call(t)}},{}],21:[function(t,e,r){"use strict";function i(t,e){if(t.map)return t.map(e);for(var r=[],i=0;i",'"',"`"," ","\r","\n"," "],g=["{","}","|","\\","^","`"].concat(v),m=["'"].concat(g),y=["%","/","?",";","#"].concat(m),x=["/","?","#"],b=255,_=/^[a-z0-9A-Z_-]{0,63}$/,T=/^([a-z0-9A-Z_-]{0,63})(.*)$/,E={javascript:!0,"javascript:":!0},S={javascript:!0,"javascript:":!0},w={http:!0,https:!0,ftp:!0,gopher:!0,file:!0,"http:":!0,"https:":!0,"ftp:":!0,"gopher:":!0,"file:":!0},C=t("querystring");i.prototype.parse=function(t,e,r){if(!h(t))throw new TypeError("Parameter 'url' must be a string, not "+typeof t);var i=t;i=i.trim();var n=d.exec(i);if(n){n=n[0];var o=n.toLowerCase();this.protocol=o,i=i.substr(n.length)}if(r||n||i.match(/^\/\/[^@\/]+@[^@\/]+/)){var s="//"===i.substr(0,2);!s||n&&S[n]||(i=i.substr(2),this.slashes=!0)}if(!S[n]&&(s||n&&!w[n])){for(var a=-1,u=0;ul)&&(a=l)}var c,f;f=-1===a?i.lastIndexOf("@"):i.lastIndexOf("@",a),-1!==f&&(c=i.slice(0,f),i=i.slice(f+1),this.auth=decodeURIComponent(c)),a=-1;for(var u=0;ul)&&(a=l)}-1===a&&(a=i.length),this.host=i.slice(0,a),i=i.slice(a),this.parseHost(),this.hostname=this.hostname||"";var v="["===this.hostname[0]&&"]"===this.hostname[this.hostname.length-1];if(!v)for(var g=this.hostname.split(/\./),u=0,A=g.length;A>u;u++){var M=g[u];if(M&&!M.match(_)){for(var R="",O=0,D=M.length;D>O;O++)R+=M.charCodeAt(O)>127?"x":M[O];if(!R.match(_)){var P=g.slice(0,u),F=g.slice(u+1),L=M.match(T);L&&(P.push(L[1]),F.unshift(L[2])),F.length&&(i="/"+F.join(".")+i),this.hostname=P.join(".");break}}}if(this.hostname.length>b?this.hostname="":this.hostname=this.hostname.toLowerCase(),!v){for(var B=this.hostname.split("."),I=[],u=0;uu;u++){var j=m[u],G=encodeURIComponent(j);G===j&&(G=escape(j)),i=i.split(j).join(G)}var Y=i.indexOf("#");-1!==Y&&(this.hash=i.substr(Y),i=i.slice(0,Y));var X=i.indexOf("?");if(-1!==X?(this.search=i.substr(X),this.query=i.substr(X+1),e&&(this.query=C.parse(this.query)),i=i.slice(0,X)):e&&(this.search="",this.query={}),i&&(this.pathname=i),w[o]&&this.hostname&&!this.pathname&&(this.pathname="/"),this.pathname||this.search){var U=this.pathname||"",N=this.search||"";this.path=U+N}return this.href=this.format(),this},i.prototype.format=function(){var t=this.auth||"";t&&(t=encodeURIComponent(t),t=t.replace(/%3A/i,":"),t+="@");var e=this.protocol||"",r=this.pathname||"",i=this.hash||"",n=!1,o="";this.host?n=t+this.host:this.hostname&&(n=t+(-1===this.hostname.indexOf(":")?this.hostname:"["+this.hostname+"]"),this.port&&(n+=":"+this.port)),this.query&&u(this.query)&&Object.keys(this.query).length&&(o=C.stringify(this.query));var s=this.search||o&&"?"+o||"";return e&&":"!==e.substr(-1)&&(e+=":"),this.slashes||(!e||w[e])&&n!==!1?(n="//"+(n||""),r&&"/"!==r.charAt(0)&&(r="/"+r)):n||(n=""),i&&"#"!==i.charAt(0)&&(i="#"+i),s&&"?"!==s.charAt(0)&&(s="?"+s),r=r.replace(/[?#]/g,function(t){return encodeURIComponent(t)}),s=s.replace("#","%23"),e+n+r+s+i},i.prototype.resolve=function(t){return this.resolveObject(n(t,!1,!0)).format()},i.prototype.resolveObject=function(t){if(h(t)){var e=new i;e.parse(t,!1,!0),t=e}var r=new i;if(Object.keys(this).forEach(function(t){r[t]=this[t]},this),r.hash=t.hash,""===t.href)return r.href=r.format(),r;if(t.slashes&&!t.protocol)return Object.keys(t).forEach(function(e){"protocol"!==e&&(r[e]=t[e])}),w[r.protocol]&&r.hostname&&!r.pathname&&(r.path=r.pathname="/"),r.href=r.format(),r;if(t.protocol&&t.protocol!==r.protocol){if(!w[t.protocol])return Object.keys(t).forEach(function(e){r[e]=t[e]}),r.href=r.format(),r;if(r.protocol=t.protocol,t.host||S[t.protocol])r.pathname=t.pathname;else{for(var n=(t.pathname||"").split("/");n.length&&!(t.host=n.shift()););t.host||(t.host=""),t.hostname||(t.hostname=""),""!==n[0]&&n.unshift(""),n.length<2&&n.unshift(""),r.pathname=n.join("/")}if(r.search=t.search,r.query=t.query,r.host=t.host||"",r.auth=t.auth,r.hostname=t.hostname||t.host,r.port=t.port,r.pathname||r.search){var o=r.pathname||"",s=r.search||"";r.path=o+s}return r.slashes=r.slashes||t.slashes,r.href=r.format(),r}var a=r.pathname&&"/"===r.pathname.charAt(0),u=t.host||t.pathname&&"/"===t.pathname.charAt(0),p=u||a||r.host&&t.pathname,d=p,f=r.pathname&&r.pathname.split("/")||[],n=t.pathname&&t.pathname.split("/")||[],v=r.protocol&&!w[r.protocol];if(v&&(r.hostname="",r.port=null,r.host&&(""===f[0]?f[0]=r.host:f.unshift(r.host)),r.host="",t.protocol&&(t.hostname=null,t.port=null,t.host&&(""===n[0]?n[0]=t.host:n.unshift(t.host)),t.host=null),p=p&&(""===n[0]||""===f[0])),u)r.host=t.host||""===t.host?t.host:r.host,r.hostname=t.hostname||""===t.hostname?t.hostname:r.hostname,r.search=t.search,r.query=t.query,f=n;else if(n.length)f||(f=[]),f.pop(),f=f.concat(n),r.search=t.search,r.query=t.query;else if(!c(t.search)){if(v){r.hostname=r.host=f.shift();var g=r.host&&r.host.indexOf("@")>0?r.host.split("@"):!1;g&&(r.auth=g.shift(),r.host=r.hostname=g.shift())}return r.search=t.search,r.query=t.query,l(r.pathname)&&l(r.search)||(r.path=(r.pathname?r.pathname:"")+(r.search?r.search:"")),r.href=r.format(),r}if(!f.length)return r.pathname=null,r.search?r.path="/"+r.search:r.path=null,r.href=r.format(),r;for(var m=f.slice(-1)[0],y=(r.host||t.host)&&("."===m||".."===m)||""===m,x=0,b=f.length;b>=0;b--)m=f[b],"."==m?f.splice(b,1):".."===m?(f.splice(b,1),x++):x&&(f.splice(b,1),x--);if(!p&&!d)for(;x--;x)f.unshift("..");!p||""===f[0]||f[0]&&"/"===f[0].charAt(0)||f.unshift(""),y&&"/"!==f.join("/").substr(-1)&&f.push("");var _=""===f[0]||f[0]&&"/"===f[0].charAt(0);if(v){r.hostname=r.host=_?"":f.length?f.shift():"";var g=r.host&&r.host.indexOf("@")>0?r.host.split("@"):!1;g&&(r.auth=g.shift(),r.host=r.hostname=g.shift())}return p=p||r.host&&f.length,p&&!_&&f.unshift(""),f.length?r.pathname=f.join("/"):(r.pathname=null,r.path=null),l(r.pathname)&&l(r.search)||(r.path=(r.pathname?r.pathname:"")+(r.search?r.search:"")),r.auth=t.auth||r.auth,r.slashes=r.slashes||t.slashes,r.href=r.format(),r},i.prototype.parseHost=function(){var t=this.host,e=f.exec(t);e&&(e=e[0],":"!==e&&(this.port=e.substr(1)),t=t.substr(0,t.length-e.length)),t&&(this.hostname=t)}},{punycode:19,querystring:22}],24:[function(t,e,r){"use strict";function i(t,e,r){r=r||2;var i=e&&e.length,o=i?e[0]*r:t.length,a=n(t,0,o,r,!0),h=[];if(!a)return h;var u,l,p,d,f,v,g;if(i&&(a=c(t,e,a,r)),t.length>80*r){u=p=t[0],l=d=t[1];for(var m=r;o>m;m+=r)f=t[m],v=t[m+1],u>f&&(u=f),l>v&&(l=v),f>p&&(p=f),v>d&&(d=v);g=Math.max(p-u,d-l)}return s(a,h,r,u,l,g),h}function n(t,e,r,i,n){var o,s,a,h=0;for(o=e,s=r-i;r>o;o+=i)h+=(t[s]-t[o])*(t[o+1]+t[s+1]),s=o;if(n===h>0)for(o=e;r>o;o+=i)a=M(o,t[o],t[o+1],a);else for(o=r-i;o>=e;o-=i)a=M(o,t[o],t[o+1],a);return a}function o(t,e){if(!t)return t;e||(e=t);var r,i=t;do if(r=!1,i.steiner||!T(i,i.next)&&0!==_(i.prev,i,i.next))i=i.next;else{if(R(i),i=e=i.prev,i===i.next)return null;r=!0}while(r||i!==e);return e}function s(t,e,r,i,n,c,p){if(t){!p&&c&&v(t,i,n,c);for(var d,f,g=t;t.prev!==t.next;)if(d=t.prev,f=t.next,c?h(t,i,n,c):a(t))e.push(d.i/r),e.push(t.i/r),e.push(f.i/r),R(t),t=f.next,g=f.next;else if(t=f,t===g){p?1===p?(t=u(t,e,r),s(t,e,r,i,n,c,2)):2===p&&l(t,e,r,i,n,c):s(o(t),e,r,i,n,c,1);break}}}function a(t){var e=t.prev,r=t,i=t.next;if(_(e,r,i)>=0)return!1;for(var n=t.next.next;n!==t.prev;){if(x(e.x,e.y,r.x,r.y,i.x,i.y,n.x,n.y)&&_(n.prev,n,n.next)>=0)return!1;n=n.next}return!0}function h(t,e,r,i){var n=t.prev,o=t,s=t.next;if(_(n,o,s)>=0)return!1;for(var a=n.xo.x?n.x>s.x?n.x:s.x:o.x>s.x?o.x:s.x,l=n.y>o.y?n.y>s.y?n.y:s.y:o.y>s.y?o.y:s.y,c=m(a,h,e,r,i),p=m(u,l,e,r,i),d=t.nextZ;d&&d.z<=p;){if(d!==t.prev&&d!==t.next&&x(n.x,n.y,o.x,o.y,s.x,s.y,d.x,d.y)&&_(d.prev,d,d.next)>=0)return!1;d=d.nextZ}for(d=t.prevZ;d&&d.z>=c;){if(d!==t.prev&&d!==t.next&&x(n.x,n.y,o.x,o.y,s.x,s.y,d.x,d.y)&&_(d.prev,d,d.next)>=0)return!1;d=d.prevZ}return!0}function u(t,e,r){var i=t;do{var n=i.prev,o=i.next.next;E(n,i,i.next,o)&&w(n,o)&&w(o,n)&&(e.push(n.i/r),e.push(i.i/r),e.push(o.i/r),R(i),R(i.next),i=t=o),i=i.next}while(i!==t);return i}function l(t,e,r,i,n,a){var h=t;do{for(var u=h.next.next;u!==h.prev;){if(h.i!==u.i&&b(h,u)){var l=A(h,u);return h=o(h,h.next),l=o(l,l.next),s(h,e,r,i,n,a),void s(l,e,r,i,n,a)}u=u.next}h=h.next}while(h!==t)}function c(t,e,r,i){var s,a,h,u,l,c=[];for(s=0,a=e.length;a>s;s++)h=e[s]*i,u=a-1>s?e[s+1]*i:t.length,l=n(t,h,u,i,!1),l===l.next&&(l.steiner=!0),c.push(y(l));for(c.sort(p),s=0;s=i.next.y){var a=i.x+(o-i.y)*(i.next.x-i.x)/(i.next.y-i.y);n>=a&&a>s&&(s=a,r=i.x=i.x&&i.x>=r.x&&x(oh||h===l&&i.x>r.x)&&w(i,t)&&(r=i,l=h)),i=i.next;return r}function v(t,e,r,i){var n=t;do null===n.z&&(n.z=m(n.x,n.y,e,r,i)),n.prevZ=n.prev,n.nextZ=n.next,n=n.next;while(n!==t);n.prevZ.nextZ=null,n.prevZ=null,g(n)}function g(t){var e,r,i,n,o,s,a,h,u=1;do{for(r=t,t=null,o=null,s=0;r;){for(s++,i=r,a=0,e=0;u>e&&(a++,i=i.nextZ,i);e++);for(h=u;a>0||h>0&&i;)0===a?(n=i,i=i.nextZ,h--):0!==h&&i?r.z<=i.z?(n=r,r=r.nextZ,a--):(n=i,i=i.nextZ,h--):(n=r,r=r.nextZ,a--),o?o.nextZ=n:t=n,n.prevZ=o,o=n;r=i}o.nextZ=null,u*=2}while(s>1);return t}function m(t,e,r,i,n){return t=32767*(t-r)/n,e=32767*(e-i)/n,t=16711935&(t|t<<8),t=252645135&(t|t<<4),t=858993459&(t|t<<2),t=1431655765&(t|t<<1),e=16711935&(e|e<<8),e=252645135&(e|e<<4),e=858993459&(e|e<<2),e=1431655765&(e|e<<1),t|e<<1}function y(t){var e=t,r=t;do e.x=0&&(t-s)*(i-a)-(r-s)*(e-a)>=0&&(r-s)*(o-a)-(n-s)*(i-a)>=0}function b(t,e){return T(t,e)||t.next.i!==e.i&&t.prev.i!==e.i&&!S(t,e)&&w(t,e)&&w(e,t)&&C(t,e)}function _(t,e,r){return(e.y-t.y)*(r.x-e.x)-(e.x-t.x)*(r.y-e.y)}function T(t,e){return t.x===e.x&&t.y===e.y}function E(t,e,r,i){return _(t,e,r)>0!=_(t,e,i)>0&&_(r,i,t)>0!=_(r,i,e)>0}function S(t,e){var r=t;do{if(r.i!==t.i&&r.next.i!==t.i&&r.i!==e.i&&r.next.i!==e.i&&E(r,r.next,t,e))return!0;r=r.next}while(r!==t);return!1}function w(t,e){return _(t.prev,t,t.next)<0?_(t,e,t.next)>=0&&_(t,t.prev,e)>=0:_(t,e,t.prev)<0||_(t,t.next,e)<0}function C(t,e){var r=t,i=!1,n=(t.x+e.x)/2,o=(t.y+e.y)/2;do r.y>o!=r.next.y>o&&n<(r.next.x-r.x)*(o-r.y)/(r.next.y-r.y)+r.x&&(i=!i),r=r.next;while(r!==t);return i}function A(t,e){var r=new O(t.i,t.x,t.y),i=new O(e.i,e.x,e.y),n=t.next,o=e.prev;return t.next=e,e.prev=t,r.next=n,n.prev=r,i.next=r,r.prev=i,o.next=i,i.prev=o,i}function M(t,e,r,i){var n=new O(t,e,r);return i?(n.next=i.next,n.prev=i,i.next.prev=n,i.next=n):(n.prev=n,n.next=n),n}function R(t){t.next.prev=t.prev,t.prev.next=t.next,t.prevZ&&(t.prevZ.nextZ=t.nextZ),t.nextZ&&(t.nextZ.prevZ=t.prevZ)}function O(t,e,r){this.i=t,this.x=e,this.y=r,this.prev=null,this.next=null,this.z=null,this.prevZ=null,this.nextZ=null,this.steiner=!1}e.exports=i},{}],25:[function(t,e,r){"use strict";function i(t,e,r){this.fn=t,this.context=e,this.once=r||!1}function n(){}var o="function"!=typeof Object.create?"~":!1;n.prototype._events=void 0,n.prototype.listeners=function(t,e){var r=o?o+t:t,i=this._events&&this._events[r];if(e)return!!i;if(!i)return[];if(i.fn)return[i.fn];for(var n=0,s=i.length,a=new Array(s);s>n;n++)a[n]=i[n].fn;return a},n.prototype.emit=function(t,e,r,i,n,s){var a=o?o+t:t;if(!this._events||!this._events[a])return!1;var h,u,l=this._events[a],c=arguments.length;if("function"==typeof l.fn){switch(l.once&&this.removeListener(t,l.fn,void 0,!0),c){case 1:return l.fn.call(l.context),!0;case 2:return l.fn.call(l.context,e),!0;case 3:return l.fn.call(l.context,e,r),!0;case 4:return l.fn.call(l.context,e,r,i),!0;case 5:return l.fn.call(l.context,e,r,i,n),!0;case 6:return l.fn.call(l.context,e,r,i,n,s),!0}for(u=1,h=new Array(c-1);c>u;u++)h[u-1]=arguments[u];l.fn.apply(l.context,h)}else{var p,d=l.length;for(u=0;d>u;u++)switch(l[u].once&&this.removeListener(t,l[u].fn,void 0,!0),c){case 1:l[u].fn.call(l[u].context);break;case 2:l[u].fn.call(l[u].context,e);break;case 3:l[u].fn.call(l[u].context,e,r);break;default:if(!h)for(p=1,h=new Array(c-1);c>p;p++)h[p-1]=arguments[p];l[u].fn.apply(l[u].context,h)}}return!0},n.prototype.on=function(t,e,r){var n=new i(e,r||this),s=o?o+t:t;return this._events||(this._events=o?{}:Object.create(null)),this._events[s]?this._events[s].fn?this._events[s]=[this._events[s],n]:this._events[s].push(n):this._events[s]=n,this},n.prototype.once=function(t,e,r){var n=new i(e,r||this,!0),s=o?o+t:t;return this._events||(this._events=o?{}:Object.create(null)),this._events[s]?this._events[s].fn?this._events[s]=[this._events[s],n]:this._events[s].push(n):this._events[s]=n,this},n.prototype.removeListener=function(t,e,r,i){var n=o?o+t:t;if(!this._events||!this._events[n])return this;var s=this._events[n],a=[];if(e)if(s.fn)(s.fn!==e||i&&!s.once||r&&s.context!==r)&&a.push(s);else for(var h=0,u=s.length;u>h;h++)(s[h].fn!==e||i&&!s[h].once||r&&s[h].context!==r)&&a.push(s[h]);return a.length?this._events[n]=1===a.length?a[0]:a:delete this._events[n],this},n.prototype.removeAllListeners=function(t){return this._events?(t?delete this._events[o?o+t:t]:this._events=o?{}:Object.create(null),this):this},n.prototype.off=n.prototype.removeListener,n.prototype.addListener=n.prototype.on,n.prototype.setMaxListeners=function(){return this},n.prefixed=o,"undefined"!=typeof e&&(e.exports=n)},{}],26:[function(t,e,r){"use strict";function i(t){if(null===t||void 0===t)throw new TypeError("Object.assign cannot be called with null or undefined");return Object(t)}var n=Object.prototype.hasOwnProperty,o=Object.prototype.propertyIsEnumerable;e.exports=Object.assign||function(t,e){for(var r,s,a=i(t),h=1;h=t.length&&r())}if(r=r||function(){},!t.length)return r();var o=0;u(t,function(t){e(t,i(n))})},s.forEach=s.each,s.eachSeries=function(t,e,r){if(r=r||function(){},!t.length)return r();var i=0,n=function(){e(t[i],function(e){e?(r(e),r=function(){}):(i+=1,i>=t.length?r():n())})};n()},s.forEachSeries=s.eachSeries,s.eachLimit=function(t,e,r,i){var n=d(e);n.apply(null,[t,r,i])},s.forEachLimit=s.eachLimit;var d=function(t){return function(e,r,i){if(i=i||function(){},!e.length||0>=t)return i();var n=0,o=0,s=0;!function a(){if(n>=e.length)return i();for(;t>s&&o=e.length?i():a())})}()}},f=function(t){return function(){var e=Array.prototype.slice.call(arguments);return t.apply(null,[s.each].concat(e))}},v=function(t,e){return function(){var r=Array.prototype.slice.call(arguments);return e.apply(null,[d(t)].concat(r))}},g=function(t){return function(){var e=Array.prototype.slice.call(arguments);return t.apply(null,[s.eachSeries].concat(e))}},m=function(t,e,r,i){if(e=l(e,function(t,e){return{index:e,value:t}}),i){var n=[];t(e,function(t,e){r(t.value,function(r,i){n[t.index]=i,e(r)})},function(t){i(t,n)})}else t(e,function(t,e){r(t.value,function(t){e(t)})})};s.map=f(m),s.mapSeries=g(m),s.mapLimit=function(t,e,r,i){return y(e)(t,r,i)};var y=function(t){return v(t,m)};s.reduce=function(t,e,r,i){s.eachSeries(t,function(t,i){r(e,t,function(t,r){e=r,i(t)})},function(t){i(t,e)})},s.inject=s.reduce,s.foldl=s.reduce,s.reduceRight=function(t,e,r,i){var n=l(t,function(t){return t}).reverse();s.reduce(n,e,r,i)},s.foldr=s.reduceRight;var x=function(t,e,r,i){var n=[];e=l(e,function(t,e){return{index:e,value:t}}),t(e,function(t,e){r(t.value,function(r){r&&n.push(t),e()})},function(t){i(l(n.sort(function(t,e){return t.index-e.index}),function(t){return t.value}))})};s.filter=f(x),s.filterSeries=g(x),s.select=s.filter,s.selectSeries=s.filterSeries;var b=function(t,e,r,i){var n=[];e=l(e,function(t,e){return{index:e,value:t}}),t(e,function(t,e){r(t.value,function(r){r||n.push(t),e()})},function(t){i(l(n.sort(function(t,e){return t.index-e.index}),function(t){return t.value}))})};s.reject=f(b),s.rejectSeries=g(b);var _=function(t,e,r,i){t(e,function(t,e){r(t,function(r){r?(i(t),i=function(){}):e()})},function(t){i()})};s.detect=f(_),s.detectSeries=g(_),s.some=function(t,e,r){s.each(t,function(t,i){e(t,function(t){t&&(r(!0),r=function(){}),i()})},function(t){r(!1)})},s.any=s.some,s.every=function(t,e,r){s.each(t,function(t,i){e(t,function(t){t||(r(!1),r=function(){}),i()})},function(t){r(!0)})},s.all=s.every,s.sortBy=function(t,e,r){s.map(t,function(t,r){e(t,function(e,i){e?r(e):r(null,{value:t,criteria:i})})},function(t,e){if(t)return r(t);var i=function(t,e){var r=t.criteria,i=e.criteria;return i>r?-1:r>i?1:0};r(null,l(e.sort(i),function(t){return t.value}))})},s.auto=function(t,e){e=e||function(){};var r=p(t),i=r.length;if(!i)return e();var n={},o=[],a=function(t){o.unshift(t)},l=function(t){for(var e=0;ei;){var o=i+(n-i+1>>>1);r(e,t[o])>=0?i=o:n=o-1}return i}function n(t,e,n,o){return t.started||(t.started=!0),h(e)||(e=[e]),0==e.length?s.setImmediate(function(){t.drain&&t.drain()}):void u(e,function(e){var a={data:e,priority:n,callback:"function"==typeof o?o:null};t.tasks.splice(i(t.tasks,a,r)+1,0,a),t.saturated&&t.tasks.length===t.concurrency&&t.saturated(),s.setImmediate(t.process)})}var o=s.queue(t,e);return o.push=function(t,e,r){n(o,t,e,r)},delete o.unshift,o},s.cargo=function(t,e){var r=!1,i=[],n={tasks:i,payload:e,saturated:null,empty:null,drain:null,drained:!0,push:function(t,r){h(t)||(t=[t]),u(t,function(t){i.push({data:t,callback:"function"==typeof r?r:null}),n.drained=!1,n.saturated&&i.length===e&&n.saturated()}),s.setImmediate(n.process)},process:function o(){if(!r){if(0===i.length)return n.drain&&!n.drained&&n.drain(),void(n.drained=!0);var s="number"==typeof e?i.splice(0,e):i.splice(0,i.length),a=l(s,function(t){return t.data});n.empty&&n.empty(),r=!0,t(a,function(){r=!1;var t=arguments;u(s,function(e){e.callback&&e.callback.apply(null,t)}),o()})}},length:function(){return i.length},running:function(){return r}};return n};var S=function(t){return function(e){var r=Array.prototype.slice.call(arguments,1);e.apply(null,r.concat([function(e){var r=Array.prototype.slice.call(arguments,1);"undefined"!=typeof console&&(e?console.error&&console.error(e):console[t]&&u(r,function(e){console[t](e)}))}]))}};s.log=S("log"),s.dir=S("dir"),s.memoize=function(t,e){var r={},i={};e=e||function(t){return t};var n=function(){var n=Array.prototype.slice.call(arguments),o=n.pop(),a=e.apply(null,n);a in r?s.nextTick(function(){o.apply(null,r[a])}):a in i?i[a].push(o):(i[a]=[o],t.apply(null,n.concat([function(){r[a]=arguments;var t=i[a];delete i[a];for(var e=0,n=t.length;n>e;e++)t[e].apply(null,arguments)}])))};return n.memo=r,n.unmemoized=t,n},s.unmemoize=function(t){return function(){return(t.unmemoized||t).apply(null,arguments)}},s.times=function(t,e,r){for(var i=[],n=0;t>n;n++)i.push(n);return s.map(i,e,r)},s.timesSeries=function(t,e,r){for(var i=[],n=0;t>n;n++)i.push(n);return s.mapSeries(i,e,r)},s.seq=function(){var t=arguments;return function(){var e=this,r=Array.prototype.slice.call(arguments),i=r.pop();s.reduce(t,r,function(t,r,i){r.apply(e,t.concat([function(){var t=arguments[0],e=Array.prototype.slice.call(arguments,1);i(t,e)}]))},function(t,r){i.apply(e,[t].concat(r))})}},s.compose=function(){return s.seq.apply(null,Array.prototype.reverse.call(arguments))};var w=function(t,e){var r=function(){var r=this,i=Array.prototype.slice.call(arguments),n=i.pop();return t(e,function(t,e){t.apply(r,i.concat([e]))},n)};if(arguments.length>2){var i=Array.prototype.slice.call(arguments,2);return r.apply(this,i)}return r};s.applyEach=f(w),s.applyEachSeries=g(w),s.forever=function(t,e){function r(i){if(i){if(e)return e(i);throw i}t(r)}r()},"undefined"!=typeof r&&r.exports?r.exports=s:"undefined"!=typeof t&&t.amd?t([],function(){return s}):n.async=s}()}).call(this,e("_process"))},{_process:18}],28:[function(t,e,r){function i(t,e){a.call(this),e=e||10,this.baseUrl=t||"",this.progress=0,this.loading=!1,this._progressChunk=0,this._beforeMiddleware=[],this._afterMiddleware=[],this._boundLoadResource=this._loadResource.bind(this),this._boundOnLoad=this._onLoad.bind(this),this._buffer=[],this._numToLoad=0,this._queue=n.queue(this._boundLoadResource,e),this.resources={}}var n=t("async"),o=t("url"),s=t("./Resource"),a=t("eventemitter3");i.prototype=Object.create(a.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.add=i.prototype.enqueue=function(t,e,r,i){if(Array.isArray(t)){for(var n=0;n0)if(this.xhrType===i.XHR_RESPONSE_TYPE.TEXT)this.data=t.responseText;else if(this.xhrType===i.XHR_RESPONSE_TYPE.JSON)try{this.data=JSON.parse(t.responseText),this.isJson=!0}catch(r){this.error=new Error("Error trying to parse loaded json:",r)}else if(this.xhrType===i.XHR_RESPONSE_TYPE.DOCUMENT)try{if(window.DOMParser){var n=new DOMParser;this.data=n.parseFromString(t.responseText,"text/xml")}else{var o=document.createElement("div");o.innerHTML=t.responseText,this.data=o}this.isXml=!0}catch(r){this.error=new Error("Error trying to parse loaded xml:",r)}else this.data=t.response||t.responseText;else this.error=new Error("["+t.status+"]"+t.statusText+":"+t.responseURL);this.complete()},i.prototype._determineCrossOrigin=function(t,e){if(0===t.indexOf("data:"))return"";e=e||window.location,u||(u=document.createElement("a")),u.href=t,t=a.parse(u.href);var r=!t.port&&""===e.port||t.port===e.port;return t.hostname===e.hostname&&r&&t.protocol===e.protocol?"":"anonymous"},i.prototype._determineXhrType=function(){return i._xhrTypeMap[this._getExtension()]||i.XHR_RESPONSE_TYPE.TEXT},i.prototype._determineLoadType=function(){return i._loadTypeMap[this._getExtension()]||i.LOAD_TYPE.XHR},i.prototype._getExtension=function(){var t,e=this.url;if(this.isDataUrl){var r=e.indexOf("/");t=e.substring(r+1,e.indexOf(";",r))}else{var i=e.indexOf("?");-1!==i&&(e=e.substring(0,i)),t=e.substring(e.lastIndexOf(".")+1)}return t},i.prototype._getMimeFromXhrType=function(t){switch(t){case i.XHR_RESPONSE_TYPE.BUFFER:return"application/octet-binary";case i.XHR_RESPONSE_TYPE.BLOB:return"application/blob";case i.XHR_RESPONSE_TYPE.DOCUMENT:return"application/xml";case i.XHR_RESPONSE_TYPE.JSON:return"application/json";case i.XHR_RESPONSE_TYPE.DEFAULT:case i.XHR_RESPONSE_TYPE.TEXT:default:return"text/plain"}},i.LOAD_TYPE={XHR:1,IMAGE:2,AUDIO:3,VIDEO:4},i.XHR_READY_STATE={UNSENT:0,OPENED:1,HEADERS_RECEIVED:2,LOADING:3,DONE:4},i.XHR_RESPONSE_TYPE={DEFAULT:"text",BUFFER:"arraybuffer",BLOB:"blob",DOCUMENT:"document",JSON:"json",TEXT:"text"},i._loadTypeMap={gif:i.LOAD_TYPE.IMAGE,png:i.LOAD_TYPE.IMAGE,bmp:i.LOAD_TYPE.IMAGE,jpg:i.LOAD_TYPE.IMAGE,jpeg:i.LOAD_TYPE.IMAGE,tif:i.LOAD_TYPE.IMAGE,tiff:i.LOAD_TYPE.IMAGE,webp:i.LOAD_TYPE.IMAGE,tga:i.LOAD_TYPE.IMAGE},i._xhrTypeMap={xhtml:i.XHR_RESPONSE_TYPE.DOCUMENT,html:i.XHR_RESPONSE_TYPE.DOCUMENT,htm:i.XHR_RESPONSE_TYPE.DOCUMENT,xml:i.XHR_RESPONSE_TYPE.DOCUMENT,tmx:i.XHR_RESPONSE_TYPE.DOCUMENT,tsx:i.XHR_RESPONSE_TYPE.DOCUMENT,svg:i.XHR_RESPONSE_TYPE.DOCUMENT,gif:i.XHR_RESPONSE_TYPE.BLOB,png:i.XHR_RESPONSE_TYPE.BLOB,bmp:i.XHR_RESPONSE_TYPE.BLOB,jpg:i.XHR_RESPONSE_TYPE.BLOB,jpeg:i.XHR_RESPONSE_TYPE.BLOB,tif:i.XHR_RESPONSE_TYPE.BLOB,tiff:i.XHR_RESPONSE_TYPE.BLOB,webp:i.XHR_RESPONSE_TYPE.BLOB,tga:i.XHR_RESPONSE_TYPE.BLOB,json:i.XHR_RESPONSE_TYPE.JSON,text:i.XHR_RESPONSE_TYPE.TEXT,txt:i.XHR_RESPONSE_TYPE.TEXT},i.setExtensionLoadType=function(t,e){o(i._loadTypeMap,t,e)},i.setExtensionXhrType=function(t,e){o(i._xhrTypeMap,t,e)}},{eventemitter3:25,url:23}],30:[function(t,e,r){e.exports={_keyStr:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",encodeBinary:function(t){for(var e,r="",i=new Array(4),n=0,o=0,s=0;n>2,i[1]=(3&e[0])<<4|e[1]>>4,i[2]=(15&e[1])<<2|e[2]>>6,i[3]=63&e[2],s=n-(t.length-1)){case 2:i[3]=64,i[2]=64;break;case 1:i[3]=64}for(o=0;o","Richard Davey "],main:"./src/index.js",homepage:"http://goodboydigital.com/",bugs:"https://github.com/pixijs/pixi.js/issues",license:"MIT",repository:{type:"git",url:"https://github.com/pixijs/pixi.js.git"},scripts:{start:"gulp && gulp watch",test:"gulp && testem ci",build:"gulp",docs:"jsdoc -c ./gulp/util/jsdoc.conf.json -R README.md"},files:["bin/","src/","CONTRIBUTING.md","LICENSE","package.json","README.md"],dependencies:{async:"^1.5.0",brfs:"^1.4.1",earcut:"^2.0.7",eventemitter3:"^1.1.1","object-assign":"^4.0.1","pixi-gl-core":"git+https://github.com/GoodBoyDigital/pixi-gl-core.git","resource-loader":"^1.6.4"},devDependencies:{browserify:"^11.1.0",chai:"^3.2.0",del:"^2.0.2",gulp:"^3.9.0","gulp-cached":"^1.1.0","gulp-concat":"^2.6.0","gulp-debug":"^2.1.0","gulp-header":"^1.7.1","gulp-jshint":"^1.11.2","gulp-mirror":"^0.4.0","gulp-plumber":"^1.0.1","gulp-rename":"^1.2.2","gulp-sourcemaps":"^1.5.2","gulp-uglify":"^1.4.1","gulp-util":"^3.0.6","jaguarjs-jsdoc":"git+https://github.com/davidshimjs/jaguarjs-jsdoc.git",jsdoc:"^3.3.2","jshint-summary":"^0.4.0",minimist:"^1.2.0",mocha:"^2.3.2","require-dir":"^0.3.0","run-sequence":"^1.1.2",testem:"^0.9.4","vinyl-buffer":"^1.0.0","vinyl-source-stream":"^1.1.0",watchify:"^3.4.0"},browserify:{transform:["brfs"]}}},{}],35:[function(t,e,r){function i(t){var e=document.createElement("div");e.style.width="100px",e.style.height="100px",e.style.position="absolute",e.style.top=0,e.style.left=0,e.style.zIndex=2,this.div=e,this.pool=[],this.renderId=0,this.debug=!1,this.renderer=t,this.children=[],this._onKeyDown=this._onKeyDown.bind(this),this._onMouseMove=this._onMouseMove.bind(this),this.isActive=!1,window.addEventListener("keydown",this._onKeyDown,!1)}var n=t("../core");Object.assign(n.DisplayObject.prototype,t("./accessibleTarget")),i.prototype.constructor=i,e.exports=i,i.prototype.activate=function(){this.isActive||(this.isActive=!0,window.document.addEventListener("mousemove",this._onMouseMove,!0),window.removeEventListener("keydown",this._onKeyDown,!1),this.renderer.on("postrender",this.update,this),this.renderer.view.parentNode.appendChild(this.div))},i.prototype.deactivate=function(){this.isActive&&(this.isActive=!1,window.document.removeEventListener("mousemove",this._onMouseMove),window.addEventListener("keydown",this._onKeyDown,!1),this.renderer.off("postrender",this.update),this.div.parentNode.removeChild(this.div))},i.prototype.updateAccessibleObjects=function(t){if(t.visible){t.accessible&&t.interactive&&(t._accessibleActive||this.addChild(t),t.renderId=this.renderId);for(var e=t.children,r=e.length-1;r>=0;r--)this.updateAccessibleObjects(e[r])}},i.prototype.update=function(){this.updateAccessibleObjects(this.renderer._lastObjectRendered);var t=this.renderer.view.getBoundingClientRect(),e=t.width/this.renderer.width,r=t.height/this.renderer.height,i=this.div;i.style.left=t.left+"px",i.style.top=t.top+"px",i.style.width=this.renderer.width+"px",i.style.height=this.renderer.height+"px";for(var o=0;othis.renderer.width&&(t.width=this.renderer.width-t.x),t.y+t.height>this.renderer.height&&(t.height=this.renderer.height-t.y)},i.prototype.addChild=function(t){var e=this.pool.pop();e||(e=document.createElement("button"),e.style.width="100px",e.style.height="100px",e.style.backgroundColor=this.debug?"rgba(255,0,0,0.5)":"transparent",e.style.position="absolute",e.style.zIndex=2,e.style.borderStyle="none",e.addEventListener("click",this._onClick.bind(this)),e.addEventListener("focus",this._onFocus.bind(this)),e.addEventListener("focusout",this._onFocusOut.bind(this))),e.title=t.accessibleTitle||"displayObject "+this.tabIndex,t._accessibleActive=!0,t._accessibleDiv=e,e.displayObject=t,this.children.push(t),this.div.appendChild(t._accessibleDiv),t._accessibleDiv.tabIndex=t.tabIndex},i.prototype._onClick=function(t){var e=this.renderer.plugins.interaction;e.dispatchEvent(t.target.displayObject,"click",e.eventData)},i.prototype._onFocus=function(t){var e=this.renderer.plugins.interaction;e.dispatchEvent(t.target.displayObject,"mouseover",e.eventData)},i.prototype._onFocusOut=function(t){var e=this.renderer.plugins.interaction;e.dispatchEvent(t.target.displayObject,"mouseout",e.eventData)},i.prototype._onKeyDown=function(t){9===t.keyCode&&this.activate()},i.prototype._onMouseMove=function(){this.deactivate()},i.prototype.destroy=function(){this.div=null;for(var t=0;t1)for(var r=0;e>r;r++)this.addChild(arguments[r]);else t.parent&&t.parent.removeChild(t),t.parent=this,this.children.push(t),this.onChildrenChange(this.children.length-1),t.emit("added",this);return t},i.prototype.addChildAt=function(t,e){if(e>=0&&e<=this.children.length)return t.parent&&t.parent.removeChild(t),t.parent=this,this.children.splice(e,0,t),this.onChildrenChange(e),t.emit("added",this),t;throw new Error(t+"addChildAt: The index "+e+" supplied is out of bounds "+this.children.length)},i.prototype.swapChildren=function(t,e){if(t!==e){var r=this.getChildIndex(t),i=this.getChildIndex(e);if(0>r||0>i)throw new Error("swapChildren: Both the supplied DisplayObjects must be children of the caller.");this.children[r]=e,this.children[i]=t,this.onChildrenChange(i>r?r:i)}},i.prototype.getChildIndex=function(t){var e=this.children.indexOf(t);if(-1===e)throw new Error("The supplied DisplayObject must be a child of the caller");return e},i.prototype.setChildIndex=function(t,e){if(0>e||e>=this.children.length)throw new Error("The supplied index is out of bounds");var r=this.getChildIndex(t);o.removeItems(this.children,r,1),this.children.splice(e,0,t),this.onChildrenChange(e)},i.prototype.getChildAt=function(t){if(0>t||t>=this.children.length)throw new Error("getChildAt: Supplied index "+t+" does not exist in the child list, or the supplied DisplayObject is not a child of the caller");return this.children[t]},i.prototype.removeChild=function(t){var e=arguments.length;if(e>1)for(var r=0;e>r;r++)this.removeChild(arguments[r]);else{var i=this.children.indexOf(t);if(-1===i)return;t.parent=null,o.removeItems(this.children,i,1),this.onChildrenChange(i),t.emit("removed",this)}return t},i.prototype.removeChildAt=function(t){var e=this.getChildAt(t);return e.parent=null,o.removeItems(this.children,t,1),this.onChildrenChange(t),e.emit("removed",this),e},i.prototype.removeChildren=function(t,e){var r,i,n=t||0,o="number"==typeof e?e:this.children.length,s=o-n;if(s>0&&o>=s){for(r=this.children.splice(n,s),i=0;it;++t)this.children[t].updateTransform();this.dirty=!1}},i.prototype.containerUpdateTransform=i.prototype.updateTransform,i.prototype.getBounds=function(){if(!this._currentBounds){if(0===this.children.length)return n.Rectangle.EMPTY;for(var t,e,r,i=1/0,o=1/0,s=-(1/0),a=-(1/0),h=!1,u=0,l=this.children.length;l>u;++u){var c=this.children[u];c.visible&&(h=!0,t=this.children[u].getBounds(),i=ie?s:e,a=a>r?a:r)}if(!h)return n.Rectangle.EMPTY;var p=this._bounds;p.x=i,p.y=o,p.width=s-i,p.height=a-o,this._currentBounds=p}return this._currentBounds},i.prototype.containerGetBounds=i.prototype.getBounds,i.prototype.getLocalBounds=function(){var t=this.worldTransform;this.worldTransform=n.Matrix.IDENTITY;for(var e=0,r=this.children.length;r>e;++e)this.children[e].updateTransform();return this.worldTransform=t,this._currentBounds=null,this.getBounds(n.Matrix.IDENTITY)},i.prototype.renderWebGL=function(t){if(this.visible&&!(this.worldAlpha<=0)&&this.renderable){var e,r;if(this._mask||this._filters){for(t.currentRenderer.flush(),this._filters&&this._filters.length&&t.filterManager.pushFilter(this,this._filters),this._mask&&t.maskManager.pushMask(this,this._mask),t.currentRenderer.start(),this._renderWebGL(t),e=0,r=this.children.length;r>e;e++)this.children[e].renderWebGL(t);t.currentRenderer.flush(),this._mask&&t.maskManager.popMask(this,this._mask),this._filters&&t.filterManager.popFilter(),t.currentRenderer.start()}else for(this._renderWebGL(t),e=0,r=this.children.length;r>e;++e)this.children[e].renderWebGL(t)}},i.prototype._renderWebGL=function(t){},i.prototype._renderCanvas=function(t){},i.prototype.renderCanvas=function(t){if(this.visible&&!(this.alpha<=0)&&this.renderable){this._mask&&t.maskManager.pushMask(this._mask,t),this._renderCanvas(t);for(var e=0,r=this.children.length;r>e;++e)this.children[e].renderCanvas(t);this._mask&&t.maskManager.popMask(t)}},i.prototype.destroy=function(t){if(s.prototype.destroy.call(this),t)for(var e=0,r=this.children.length;r>e;++e)this.children[e].destroy(t);this.removeChildren(),this.children=null}},{"../math":48,"../textures/RenderTexture":91,"../utils":98,"./DisplayObject":40}],40:[function(t,e,r){function i(){s.call(this),this.position=new n.Point,this.scale=new n.Point(1,1),this.pivot=new n.Point(0,0),this.skew=new n.Point(0,0),this._rotation=0,this.alpha=1,this.visible=!0,this.renderable=!0,this.parent=null,this.worldAlpha=1,this.worldTransform=new n.Matrix,this.localTransform=new n.Matrix,this.filterArea=null,this._sr=0,this._cr=1,this._bounds=new n.Rectangle(0,0,1,1),this._currentBounds=null,this._mask=null,this.dirty=!0}var n=t("../math"),o=t("../textures/RenderTexture"),s=t("eventemitter3"),a=(t("../const"),new n.Matrix),h={worldTransform:new n.Matrix,worldAlpha:1,children:[]};i.prototype=Object.create(s.prototype),i.prototype.constructor=i,e.exports=i,Object.defineProperties(i.prototype,{x:{get:function(){return this.position.x},set:function(t){this.position.x=t,this.dirty=!0}},y:{get:function(){return this.position.y},set:function(t){this.position.y=t,this.dirty=!0}},scaleX:{get:function(){return this.scale.x},set:function(t){this.scale.x=t,this.dirty=!0}},scaleY:{get:function(){return this.scale.y},set:function(t){this.scale.y=t,this.dirty=!0}},rotation:{get:function(){return this._rotation},set:function(t){this._rotation=t,this.dirty=!0,this._sr=Math.sin(t),this._cr=Math.cos(t)}},scaleY:{get:function(){return this.scale.y},set:function(t){this.scale.y=t,this.dirty=!0}},worldVisible:{get:function(){var t=this;do{if(!t.visible)return!1;t=t.parent}while(t);return!0}},mask:{get:function(){return this._mask},set:function(t){this._mask&&(this._mask.renderable=!0),this._mask=t,this._mask&&(this._mask.renderable=!1)}},filters:{get:function(){return this._filters&&this._filters.slice()},set:function(t){this._filters=t&&t.slice()}}}),i.prototype.updateTransform=function(){var t=this.parent.worldTransform,e=this.worldTransform,r=this.localTransform;this.dirty&&(r.a=this._cr*this.scale.x,r.b=this._sr*this.scale.x,r.c=-this._sr*this.scale.y,r.d=this._cr*this.scale.y,r.tx=this.position.x-(this.pivot.x*r.a+this.pivot.y*r.c),r.ty=this.position.y-(this.pivot.x*r.b+this.pivot.y*r.d)),(this.dirty||this.parent.dirty)&&(e.a=r.a*t.a+r.b*t.c,e.b=r.a*t.b+r.b*t.d,e.c=r.c*t.a+r.d*t.c,e.d=r.c*t.b+r.d*t.d,e.tx=r.tx*t.a+r.ty*t.c+t.tx,e.ty=r.tx*t.b+r.ty*t.d+t.ty,this._currentBounds=null),this.worldAlpha=this.alpha*this.parent.worldAlpha},i.prototype.displayObjectUpdateTransform=i.prototype.updateTransform,i.prototype.getBounds=function(t){return n.Rectangle.EMPTY},i.prototype.getLocalBounds=function(){return this.getBounds(n.Matrix.IDENTITY)},i.prototype.toGlobal=function(t){return this.parent?this.displayObjectUpdateTransform():(this.parent=h,this.displayObjectUpdateTransform(),this.parent=null),this.worldTransform.apply(t)},i.prototype.toLocal=function(t,e,r){return e&&(t=e.toGlobal(t)),this.parent?this.displayObjectUpdateTransform():(this.parent=h,this.displayObjectUpdateTransform(),this.parent=null),this.worldTransform.applyInverse(t,r)},i.prototype.renderWebGL=function(t){},i.prototype.renderCanvas=function(t){},i.prototype.generateTexture=function(t,e,r){var i=this.getLocalBounds(),n=new o(t,0|i.width,0|i.height,e,r);return a.tx=-i.x,a.ty=-i.y,n.render(this,a),n},i.prototype.setParent=function(t){if(!t||!t.addChild)throw new Error("setParent: Argument must be a Container");return t.addChild(this),t},i.prototype.setTransform=function(t,e,r,i,n,o,s,a,h){return this.position.x=t||0,this.position.y=e||0,this.scale.x=r?r:1,this.scale.y=i?i:1,this.rotation=n||0,this.skew.x=o||0,this.skew.y=s||0,this.pivot.x=a||0,this.pivot.y=h||0,this.dirty=!0,this},i.prototype.destroy=function(){this.position=null,this.scale=null,this.pivot=null,this.skew=null,this.parent=null,this._bounds=null,this._currentBounds=null,this._mask=null,this.worldTransform=null,this.filterArea=null}},{"../const":38,"../math":48,"../textures/RenderTexture":91,eventemitter3:25}],41:[function(t,e,r){function i(){n.call(this),this.fillAlpha=1,this.lineWidth=0,this.lineColor=0,this.graphicsData=[],this.tint=16777215,this._prevTint=16777215,this.blendMode=l.BLEND_MODES.NORMAL,this.currentPath=null,this._webGL={},this.isMask=!1,this.boundsPadding=0,this._localBounds=new u.Rectangle(0,0,1,1),this.dirty=!0,this.glDirty=!1,this.boundsDirty=!0,this.cachedSpriteDirty=!1}var n=t("../display/Container"),o=t("../textures/Texture"),s=t("../renderers/canvas/utils/CanvasBuffer"),a=t("../renderers/canvas/utils/CanvasGraphics"),h=t("./GraphicsData"),u=t("../math"),l=t("../const"),c=new u.Point;i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.clone=function(){var t=new i;t.renderable=this.renderable,t.fillAlpha=this.fillAlpha,t.lineWidth=this.lineWidth,t.lineColor=this.lineColor,t.tint=this.tint,t.blendMode=this.blendMode,t.isMask=this.isMask,t.boundsPadding=this.boundsPadding,t.dirty=!0,t.glDirty=!0,t.cachedSpriteDirty=this.cachedSpriteDirty;for(var e=0;e=c;++c)l=c/s,n=h+(t-h)*l,o=u+(e-u)*l,a.push(n+(t+(r-t)*l-n)*l,o+(e+(i-e)*l-o)*l);return this.dirty=this.boundsDirty=!0,this},i.prototype.bezierCurveTo=function(t,e,r,i,n,o){this.currentPath?0===this.currentPath.shape.points.length&&(this.currentPath.shape.points=[0,0]):this.moveTo(0,0);for(var s,a,h,u,l,c=20,p=this.currentPath.shape.points,d=p[p.length-2],f=p[p.length-1],v=0,g=1;c>=g;++g)v=g/c,s=1-v,a=s*s,h=a*s,u=v*v,l=u*v,p.push(h*d+3*a*v*t+3*s*u*r+l*n,h*f+3*a*v*e+3*s*u*i+l*o);return this.dirty=this.boundsDirty=!0,this},i.prototype.arcTo=function(t,e,r,i,n){this.currentPath?0===this.currentPath.shape.points.length&&this.currentPath.shape.points.push(t,e):this.moveTo(t,e);var o=this.currentPath.shape.points,s=o[o.length-2],a=o[o.length-1],h=a-e,u=s-t,l=i-e,c=r-t,p=Math.abs(h*c-u*l);if(1e-8>p||0===n)(o[o.length-2]!==t||o[o.length-1]!==e)&&o.push(t,e);else{var d=h*h+u*u,f=l*l+c*c,v=h*l+u*c,g=n*Math.sqrt(d)/p,m=n*Math.sqrt(f)/p,y=g*v/d,x=m*v/f,b=g*c+m*u,_=g*l+m*h,T=u*(m+y),E=h*(m+y),S=c*(g+x),w=l*(g+x),C=Math.atan2(E-_,T-b),A=Math.atan2(w-_,S-b);this.arc(b+t,_+e,n,C,A,u*l>c*h)}return this.dirty=this.boundsDirty=!0,this},i.prototype.arc=function(t,e,r,i,n,o){if(o=o||!1,i===n)return this;!o&&i>=n?n+=2*Math.PI:o&&n>=i&&(i+=2*Math.PI);var s=o?-1*(i-n):n-i,a=40*Math.ceil(Math.abs(s)/(2*Math.PI));if(0===s)return this;var h=t+Math.cos(i)*r,u=e+Math.sin(i)*r;this.currentPath?this.currentPath.shape.points.push(h,u):this.moveTo(h,u);for(var l=this.currentPath.shape.points,c=s/(2*a),p=2*c,d=Math.cos(c),f=Math.sin(c),v=a-1,g=v%1/v,m=0;v>=m;m++){var y=m+g*m,x=c+i+p*y,b=Math.cos(x),_=-Math.sin(x);l.push((d*b+f*_)*r+t,(d*-_+f*b)*r+e)}return this.dirty=this.boundsDirty=!0,this},i.prototype.beginFill=function(t,e){return this.filling=!0,this.fillColor=t||0,this.fillAlpha=void 0===e?1:e,this.currentPath&&this.currentPath.shape.points.length<=2&&(this.currentPath.fill=this.filling,this.currentPath.fillColor=this.fillColor,this.currentPath.fillAlpha=this.fillAlpha),this},i.prototype.endFill=function(){return this.filling=!1,this.fillColor=null,this.fillAlpha=1,this},i.prototype.drawRect=function(t,e,r,i){return this.drawShape(new u.Rectangle(t,e,r,i)),this},i.prototype.drawRoundedRect=function(t,e,r,i,n){return this.drawShape(new u.RoundedRectangle(t,e,r,i,n)),this},i.prototype.drawCircle=function(t,e,r){return this.drawShape(new u.Circle(t,e,r)),this},i.prototype.drawEllipse=function(t,e,r,i){return this.drawShape(new u.Ellipse(t,e,r,i)),this},i.prototype.drawPolygon=function(t){var e=t,r=!0;if(e instanceof u.Polygon&&(r=e.closed,e=e.points),!Array.isArray(e)){e=new Array(arguments.length);for(var i=0;ig?g:S,S=S>y?y:S,S=S>b?b:S,w=w>m?m:w,w=w>x?x:w,w=w>_?_:w,T=g>T?g:T,T=y>T?y:T,T=b>T?b:T,E=m>E?m:E,E=x>E?x:E,E=_>E?_:E,this._bounds.x=S,this._bounds.width=T-S,this._bounds.y=w,this._bounds.height=E-w,this._currentBounds=this._bounds}return this._currentBounds},i.prototype.containsPoint=function(t){this.worldTransform.applyInverse(t,c);for(var e=this.graphicsData,r=0;rs?s:t,e=s+h>e?s+h:e,r=r>a?a:r,i=a+u>i?a+u:i;else if(d===l.SHAPES.CIRC)s=n.x,a=n.y,h=n.radius+f/2,u=n.radius+f/2,t=t>s-h?s-h:t,e=s+h>e?s+h:e,r=r>a-u?a-u:r,i=a+u>i?a+u:i;else if(d===l.SHAPES.ELIP)s=n.x,a=n.y,h=n.width+f/2,u=n.height+f/2,t=t>s-h?s-h:t,e=s+h>e?s+h:e,r=r>a-u?a-u:r,i=a+u>i?a+u:i;else{o=n.points;for(var v=0;vs-f?s-f:t,e=s+f>e?s+f:e,r=r>a-f?a-f:r,i=a+f>i?a+f:i}}else t=0,e=0,r=0,i=0;var g=this.boundsPadding;this._localBounds.x=t-g,this._localBounds.width=e-t+2*g,this._localBounds.y=r-g,this._localBounds.height=i-r+2*g},i.prototype.drawShape=function(t){this.currentPath&&this.currentPath.shape.points.length<=2&&this.graphicsData.pop(),this.currentPath=null;var e=new h(this.lineWidth,this.lineColor,this.lineAlpha,this.fillColor,this.fillAlpha,this.filling,t);return this.graphicsData.push(e),e.type===l.SHAPES.POLY&&(e.shape.closed=e.shape.closed||this.filling,this.currentPath=e),this.dirty=this.boundsDirty=!0,e},i.prototype.destroy=function(){n.prototype.destroy.apply(this,arguments);for(var t=0;ta;a++)e=s.data[a],1===s.data[a].mode?(r.stencilManager.pushStencil(t,e),i.uniform1f(r.shaderManager.complexPrimitiveShader.uniforms.alpha._location,t.worldAlpha*e.alpha),i.drawElements(i.TRIANGLE_FAN,4,i.UNSIGNED_SHORT,2*(e.indices.length-4)),r.stencilManager.popStencil(t,e)):(o=r.shaderManager.primitiveShader,r.shaderManager.setShader(o),i.uniformMatrix3fv(o.uniforms.translationMatrix._location,!1,t.worldTransform.toArray(!0)),i.uniformMatrix3fv(o.uniforms.projectionMatrix._location,!1,r.currentRenderTarget.projectionMatrix.toArray(!0)),i.uniform3fv(o.uniforms.tint._location,n.hex2rgb(t.tint)),i.uniform1f(o.uniforms.alpha._location,t.worldAlpha),i.bindBuffer(i.ARRAY_BUFFER,e.buffer),i.vertexAttribPointer(o.attributes.aVertexPosition,2,i.FLOAT,!1,24,0),i.vertexAttribPointer(o.attributes.aColor,4,i.FLOAT,!1,24,8),i.bindBuffer(i.ELEMENT_ARRAY_BUFFER,e.indexBuffer),i.drawElements(i.TRIANGLE_STRIP,e.indices.length,i.UNSIGNED_SHORT,0)),r.drawCount++},i.prototype.updateGraphics=function(t){var e=this.renderer.gl,r=t._webGL[e.id];r||(r=t._webGL[e.id]={lastIndex:0,data:[],gl:e}),t.dirty=!1;var i;if(t.clearDirty){for(t.clearDirty=!1,i=0;i=6)if(a.points.length<2*this.maximumSimplePolySize){o=this.switchMode(r,0);var h=this.buildPoly(a,o);h||(o=this.switchMode(r,1),this.buildComplexPoly(a,o))}else o=this.switchMode(r,1),this.buildComplexPoly(a,o);a.lineWidth>0&&(o=this.switchMode(r,0),this.buildLine(a,o))}else o=this.switchMode(r,0),a.type===s.SHAPES.RECT?this.buildRectangle(a,o):a.type===s.SHAPES.CIRC||a.type===s.SHAPES.ELIP?this.buildCircle(a,o):a.type===s.SHAPES.RREC&&this.buildRoundedRectangle(a,o);r.lastIndex++}for(i=0;i32e4||r.mode!==e||1===e)&&(r=this.graphicsDataPool.pop()||new u(t.gl),r.mode=e,t.data.push(r))):(r=this.graphicsDataPool.pop()||new u(t.gl),r.mode=e,t.data.push(r)),r.dirty=!0,r},i.prototype.buildRectangle=function(t,e){var r=t.shape,i=r.x,o=r.y,s=r.width,a=r.height;if(t.fill){var h=n.hex2rgb(t.fillColor),u=t.fillAlpha,l=h[0]*u,c=h[1]*u,p=h[2]*u,d=e.points,f=e.indices,v=d.length/6;d.push(i,o),d.push(l,c,p,u),d.push(i+s,o),d.push(l,c,p,u),d.push(i,o+a),d.push(l,c,p,u),d.push(i+s,o+a),d.push(l,c,p,u),f.push(v,v,v+1,v+2,v+3,v+3)}if(t.lineWidth){var g=t.points;t.points=[i,o,i+s,o,i+s,o+a,i,o+a,i,o],this.buildLine(t,e),t.points=g}},i.prototype.buildRoundedRectangle=function(t,e){var r=t.shape,i=r.x,o=r.y,s=r.width,a=r.height,h=r.radius,u=[];if(u.push(i,o+h),this.quadraticBezierCurve(i,o+a-h,i,o+a,i+h,o+a,u),this.quadraticBezierCurve(i+s-h,o+a,i+s,o+a,i+s,o+a-h,u),this.quadraticBezierCurve(i+s,o+h,i+s,o,i+s-h,o,u),this.quadraticBezierCurve(i+h,o,i,o,i,o+h+1e-10,u),t.fill){var c=n.hex2rgb(t.fillColor),p=t.fillAlpha,d=c[0]*p,f=c[1]*p,v=c[2]*p,g=e.points,m=e.indices,y=g.length/6,x=l(u,null,2),b=0;for(b=0;b=m;m++)g=m/f,h=a(t,r,g),u=a(e,i,g),l=a(r,n,g),c=a(i,o,g),p=a(h,l,g),d=a(u,c,g),v.push(p,d);return v},i.prototype.buildCircle=function(t,e){var r,i,o=t.shape,a=o.x,h=o.y;t.type===s.SHAPES.CIRC?(r=o.radius,i=o.radius):(r=o.width,i=o.height);var u=Math.floor(30*Math.sqrt(o.radius))||Math.floor(15*Math.sqrt(o.width+o.height)),l=2*Math.PI/u,c=0;if(t.fill){var p=n.hex2rgb(t.fillColor),d=t.fillAlpha,f=p[0]*d,v=p[1]*d,g=p[2]*d,m=e.points,y=e.indices,x=m.length/6;for(y.push(x),c=0;u+1>c;c++)m.push(a,h,f,v,g,d),m.push(a+Math.sin(l*c)*r,h+Math.cos(l*c)*i,f,v,g,d),y.push(x++,x++);y.push(x-1)}if(t.lineWidth){var b=t.points;for(t.points=[],c=0;u+1>c;c++)t.points.push(a+Math.sin(l*c)*r,h+Math.cos(l*c)*i);this.buildLine(t,e),t.points=b}},i.prototype.buildLine=function(t,e){var r=0,i=t.points;if(0!==i.length){var s=new o.Point(i[0],i[1]),a=new o.Point(i[i.length-2],i[i.length-1]);if(s.x===a.x&&s.y===a.y){i=i.slice(),i.pop(),i.pop(),a=new o.Point(i[i.length-2],i[i.length-1]);var h=a.x+.5*(s.x-a.x),u=a.y+.5*(s.y-a.y);i.unshift(h,u),i.push(h,u)}var l,c,p,d,f,v,g,m,y,x,b,_,T,E,S,w,C,A,M,R,O,D,P,F=e.points,L=e.indices,B=i.length/2,I=i.length,N=F.length/6,U=t.lineWidth/2,k=n.hex2rgb(t.lineColor),j=t.lineAlpha,G=k[0]*j,Y=k[1]*j,X=k[2]*j;for(p=i[0],d=i[1],f=i[2],v=i[3],y=-(d-v),x=p-f,P=Math.sqrt(y*y+x*x),y/=P,x/=P,y*=U,x*=U,F.push(p-y,d-x,G,Y,X,j),F.push(p+y,d+x,G,Y,X,j),r=1;B-1>r;r++)p=i[2*(r-1)],d=i[2*(r-1)+1],f=i[2*r],v=i[2*r+1],g=i[2*(r+1)],m=i[2*(r+1)+1],y=-(d-v),x=p-f,P=Math.sqrt(y*y+x*x),y/=P,x/=P,y*=U,x*=U,b=-(v-m),_=f-g,P=Math.sqrt(b*b+_*_),b/=P,_/=P,b*=U,_*=U,S=-x+d-(-x+v),w=-y+f-(-y+p),C=(-y+p)*(-x+v)-(-y+f)*(-x+d),A=-_+m-(-_+v),M=-b+f-(-b+g),R=(-b+g)*(-_+v)-(-b+f)*(-_+m),O=S*M-A*w,Math.abs(O)<.1?(O+=10.1,F.push(f-y,v-x,G,Y,X,j),F.push(f+y,v+x,G,Y,X,j)):(l=(w*R-M*C)/O,c=(A*C-S*R)/O,D=(l-f)*(l-f)+(c-v)*(c-v),D>19600?(T=y-b,E=x-_,P=Math.sqrt(T*T+E*E),T/=P,E/=P,T*=U,E*=U,F.push(f-T,v-E),F.push(G,Y,X,j),F.push(f+T,v+E),F.push(G,Y,X,j),F.push(f-T,v-E),F.push(G,Y,X,j),I++):(F.push(l,c),F.push(G,Y,X,j),F.push(f-(l-f),v-(c-v)),F.push(G,Y,X,j)));for(p=i[2*(B-2)],d=i[2*(B-2)+1],f=i[2*(B-1)],v=i[2*(B-1)+1],y=-(d-v),x=p-f,P=Math.sqrt(y*y+x*x),y/=P,x/=P,y*=U,x*=U,F.push(f-y,v-x),F.push(G,Y,X,j),F.push(f+y,v+x),F.push(G,Y,X,j),L.push(N),r=0;I>r;r++)L.push(N++);L.push(N-1)}},i.prototype.buildComplexPoly=function(t,e){var r=t.points.slice();if(!(r.length<6)){var i=e.indices;e.points=r,e.alpha=t.fillAlpha,e.color=n.hex2rgb(t.fillColor);for(var o,s,a=1/0,h=-(1/0),u=1/0,l=-(1/0),c=0;co?o:a,h=o>h?o:h,u=u>s?s:u,l=s>l?s:l;r.push(a,u,h,u,h,l,a,l);var p=r.length/2;for(c=0;p>c;c++)i.push(c)}},i.prototype.buildPoly=function(t,e){var r=t.points;if(!(r.length<6)){var i=e.points,o=e.indices,s=r.length/2,a=n.hex2rgb(t.fillColor),h=t.fillAlpha,u=a[0]*h,c=a[1]*h,p=a[2]*h,d=l(r,null,2);if(!d)return!1;var f=i.length/6,v=0;for(v=0;vv;v++)i.push(r[2*v],r[2*v+1],u,c,p,h);return!0}}},{"../../const":38,"../../math":48,"../../renderers/webgl/WebGLRenderer":65,"../../renderers/webgl/utils/ObjectRenderer":80,"../../utils":98,"./WebGLGraphicsData":44,earcut:24}],44:[function(t,e,r){function i(t){this.gl=t,this.color=[0,0,0],this.points=[],this.indices=[],this.buffer=t.createBuffer(),this.indexBuffer=t.createBuffer(),this.mode=1,this.alpha=1,this.dirty=!0,this.glPoints=null,this.glIndices=null}i.prototype.constructor=i,e.exports=i,i.prototype.reset=function(){this.points.length=0,this.indices.length=0},i.prototype.upload=function(){var t=this.gl;this.glPoints=new Float32Array(this.points),t.bindBuffer(t.ARRAY_BUFFER,this.buffer),t.bufferData(t.ARRAY_BUFFER,this.glPoints,t.STATIC_DRAW),this.glIndices=new Uint16Array(this.indices),t.bindBuffer(t.ELEMENT_ARRAY_BUFFER,this.indexBuffer),t.bufferData(t.ELEMENT_ARRAY_BUFFER,this.glIndices,t.STATIC_DRAW),this.dirty=!1},i.prototype.destroy=function(){this.color=null,this.points=null,this.indices=null,this.gl.deleteBuffer(this.buffer),this.gl.deleteBuffer(this.indexBuffer),this.gl=null,this.buffer=null,this.indexBuffer=null,this.glPoints=null,this.glIndices=null}},{}],45:[function(t,e,r){var i=e.exports=Object.assign(t("./const"),t("./math"),{utils:t("./utils"),ticker:t("./ticker"),DisplayObject:t("./display/DisplayObject"),Container:t("./display/Container"),Sprite:t("./sprites/Sprite"),ParticleContainer:t("./particles/ParticleContainer"),SpriteRenderer:t("./sprites/webgl/SpriteRenderer"),ParticleRenderer:t("./particles/webgl/ParticleRenderer"),Text:t("./text/Text"),Graphics:t("./graphics/Graphics"),GraphicsData:t("./graphics/GraphicsData"),GraphicsRenderer:t("./graphics/webgl/GraphicsRenderer"),Texture:t("./textures/Texture"),BaseTexture:t("./textures/BaseTexture"),RenderTexture:t("./textures/RenderTexture"),VideoBaseTexture:t("./textures/VideoBaseTexture"),TextureUvs:t("./textures/TextureUvs"),CanvasRenderer:t("./renderers/canvas/CanvasRenderer"),CanvasGraphics:t("./renderers/canvas/utils/CanvasGraphics"),CanvasBuffer:t("./renderers/canvas/utils/CanvasBuffer"),WebGLRenderer:t("./renderers/webgl/WebGLRenderer"),WebGLManager:t("./renderers/webgl/managers/WebGLManager"),ShaderManager:t("./renderers/webgl/managers/ShaderManager"),Shader:t("./renderers/webgl/shaders/Shader"),ObjectRenderer:t("./renderers/webgl/utils/ObjectRenderer"),RenderTarget:t("./renderers/webgl/utils/RenderTarget"),AbstractFilter:t("./renderers/webgl/filters/AbstractFilter"),FXAAFilter:t("./renderers/webgl/filters/FXAAFilter"),SpriteMaskFilter:t("./renderers/webgl/filters/SpriteMaskFilter"),glCore:t("pixi-gl-core"),autoDetectRenderer:function(t,e,r,n){return t=t||800,e=e||600,!n&&i.utils.isWebGLSupported()?new i.WebGLRenderer(t,e,r):new i.CanvasRenderer(t,e,r)}})},{"./const":38,"./display/Container":39,"./display/DisplayObject":40,"./graphics/Graphics":41,"./graphics/GraphicsData":42,"./graphics/webgl/GraphicsRenderer":43,"./math":48,"./particles/ParticleContainer":54,"./particles/webgl/ParticleRenderer":56,"./renderers/canvas/CanvasRenderer":59,"./renderers/canvas/utils/CanvasBuffer":60,"./renderers/canvas/utils/CanvasGraphics":61,"./renderers/webgl/WebGLRenderer":65,"./renderers/webgl/filters/AbstractFilter":66,"./renderers/webgl/filters/FXAAFilter":67,"./renderers/webgl/filters/SpriteMaskFilter":68,"./renderers/webgl/managers/ShaderManager":72,"./renderers/webgl/managers/WebGLManager":74,"./renderers/webgl/shaders/Shader":77,"./renderers/webgl/utils/ObjectRenderer":80,"./renderers/webgl/utils/RenderTarget":82,"./sprites/Sprite":86,"./sprites/webgl/SpriteRenderer":87,"./text/Text":89,"./textures/BaseTexture":90,"./textures/RenderTexture":91,"./textures/Texture":92,"./textures/TextureUvs":93,"./textures/VideoBaseTexture":94,"./ticker":96,"./utils":98,"pixi-gl-core":1}],46:[function(t,e,r){function i(){this.a=1,this.b=0,this.c=0,this.d=1,this.tx=0,this.ty=0}var n=t("./Point");i.prototype.constructor=i,e.exports=i,i.prototype.fromArray=function(t){this.a=t[0],this.b=t[1],this.c=t[3],this.d=t[4],this.tx=t[2],this.ty=t[5]},i.prototype.set=function(t,e,r,i,n,o){return this.a=t,this.b=e,this.c=r,this.d=i,this.tx=n,this.ty=o,this},i.prototype.toArray=function(t,e){this.array||(this.array=new Float32Array(9));var r=e||this.array;return t?(r[0]=this.a,r[1]=this.b,r[2]=0,r[3]=this.c,r[4]=this.d,r[5]=0,r[6]=this.tx,r[7]=this.ty,r[8]=1):(r[0]=this.a,r[1]=this.c,r[2]=this.tx,r[3]=this.b,r[4]=this.d,r[5]=this.ty,r[6]=0,r[7]=0,r[8]=1),r},i.prototype.apply=function(t,e){e=e||new n;var r=t.x,i=t.y;return e.x=this.a*r+this.c*i+this.tx,e.y=this.b*r+this.d*i+this.ty,e},i.prototype.applyInverse=function(t,e){e=e||new n;var r=1/(this.a*this.d+this.c*-this.b),i=t.x,o=t.y;return e.x=this.d*r*i+-this.c*r*o+(this.ty*this.c-this.tx*this.d)*r,e.y=this.a*r*o+-this.b*r*i+(-this.ty*this.a+this.tx*this.b)*r,e},i.prototype.translate=function(t,e){return this.tx+=t,this.ty+=e,this},i.prototype.scale=function(t,e){return this.a*=t,this.d*=e,this.c*=t,this.b*=e,this.tx*=t,this.ty*=e,this},i.prototype.rotate=function(t){var e=Math.cos(t),r=Math.sin(t),i=this.a,n=this.c,o=this.tx;return this.a=i*e-this.b*r,this.b=i*r+this.b*e,this.c=n*e-this.d*r,this.d=n*r+this.d*e,this.tx=o*e-this.ty*r,this.ty=o*r+this.ty*e,this},i.prototype.append=function(t){var e=this.a,r=this.b,i=this.c,n=this.d;return this.a=t.a*e+t.b*i,this.b=t.a*r+t.b*n,this.c=t.c*e+t.d*i,this.d=t.c*r+t.d*n,this.tx=t.tx*e+t.ty*i+this.tx,this.ty=t.tx*r+t.ty*n+this.ty,this},i.prototype.setTransform=function(t,e,r,i,n,o,s,a,h){var u,l,c,p,d,f,v,g,m,y;return d=Math.sin(s),f=Math.cos(s),v=Math.cos(h),g=Math.sin(h),m=-Math.sin(a),y=Math.cos(a),u=f*n,l=d*n,c=-d*o,p=f*o,this.a=v*u+g*c,this.b=v*l+g*p,this.c=m*u+y*c,this.d=m*l+y*p,this.tx=t+(r*u+i*c),this.ty=e+(r*l+i*p),this},i.prototype.prepend=function(t){var e=this.tx;if(1!==t.a||0!==t.b||0!==t.c||1!==t.d){var r=this.a,i=this.c;this.a=r*t.a+this.b*t.c,this.b=r*t.b+this.b*t.d,this.c=i*t.a+this.d*t.c,this.d=i*t.b+this.d*t.d}return this.tx=e*t.a+this.ty*t.c+t.tx,this.ty=e*t.b+this.ty*t.d+t.ty,this},i.prototype.invert=function(){var t=this.a,e=this.b,r=this.c,i=this.d,n=this.tx,o=t*i-e*r;return this.a=i/o,this.b=-e/o,this.c=-r/o,this.d=t/o,this.tx=(r*this.ty-i*n)/o,this.ty=-(t*this.ty-e*n)/o,this},i.prototype.identity=function(){return this.a=1,this.b=0,this.c=0,this.d=1,this.tx=0,this.ty=0,this},i.prototype.clone=function(){var t=new i;return t.a=this.a,t.b=this.b,t.c=this.c,t.d=this.d,t.tx=this.tx,t.ty=this.ty,t},i.prototype.copy=function(t){return t.a=this.a,t.b=this.b,t.c=this.c,t.d=this.d,t.tx=this.tx,t.ty=this.ty,t},i.IDENTITY=new i,i.TEMP_MATRIX=new i},{"./Point":47}],47:[function(t,e,r){function i(t,e){this.x=t||0,this.y=e||0}i.prototype.constructor=i,e.exports=i,i.prototype.clone=function(){return new i(this.x,this.y)},i.prototype.copy=function(t){this.set(t.x,t.y)},i.prototype.equals=function(t){return t.x===this.x&&t.y===this.y},i.prototype.set=function(t,e){this.x=t||0,this.y=e||(0!==e?this.x:0)}},{}],48:[function(t,e,r){e.exports={Point:t("./Point"),Matrix:t("./Matrix"),Circle:t("./shapes/Circle"),Ellipse:t("./shapes/Ellipse"),Polygon:t("./shapes/Polygon"),Rectangle:t("./shapes/Rectangle"),RoundedRectangle:t("./shapes/RoundedRectangle")}},{"./Matrix":46,"./Point":47,"./shapes/Circle":49,"./shapes/Ellipse":50,"./shapes/Polygon":51,"./shapes/Rectangle":52,"./shapes/RoundedRectangle":53}],49:[function(t,e,r){function i(t,e,r){this.x=t||0,this.y=e||0,this.radius=r||0,this.type=o.SHAPES.CIRC}var n=t("./Rectangle"),o=t("../../const");i.prototype.constructor=i,e.exports=i,i.prototype.clone=function(){return new i(this.x,this.y,this.radius)},i.prototype.contains=function(t,e){if(this.radius<=0)return!1;var r=this.x-t,i=this.y-e,n=this.radius*this.radius;return r*=r,i*=i,n>=r+i},i.prototype.getBounds=function(){return new n(this.x-this.radius,this.y-this.radius,2*this.radius,2*this.radius)}},{"../../const":38,"./Rectangle":52}],50:[function(t,e,r){function i(t,e,r,i){this.x=t||0,this.y=e||0,this.width=r||0,this.height=i||0,this.type=o.SHAPES.ELIP}var n=t("./Rectangle"),o=t("../../const");i.prototype.constructor=i,e.exports=i,i.prototype.clone=function(){return new i(this.x,this.y,this.width,this.height)},i.prototype.contains=function(t,e){if(this.width<=0||this.height<=0)return!1;var r=(t-this.x)/this.width,i=(e-this.y)/this.height;return r*=r,i*=i,1>=r+i},i.prototype.getBounds=function(){return new n(this.x-this.width,this.y-this.height,this.width,this.height)}},{"../../const":38,"./Rectangle":52}],51:[function(t,e,r){function i(t){var e=t;if(!Array.isArray(e)){e=new Array(arguments.length);for(var r=0;rs;s++)i.push(e[s].x,e[s].y);e=i}this.closed=!0,this.points=e,this.type=o.SHAPES.POLY}var n=t("../Point"),o=t("../../const");i.prototype.constructor=i,e.exports=i,i.prototype.clone=function(){return new i(this.points.slice())},i.prototype.contains=function(t,e){for(var r=!1,i=this.points.length/2,n=0,o=i-1;i>n;o=n++){var s=this.points[2*n],a=this.points[2*n+1],h=this.points[2*o],u=this.points[2*o+1],l=a>e!=u>e&&(h-s)*(e-a)/(u-a)+s>t;l&&(r=!r)}return r}},{"../../const":38,"../Point":47}],52:[function(t,e,r){function i(t,e,r,i){this.x=t||0,this.y=e||0,this.width=r||0,this.height=i||0,this.type=n.SHAPES.RECT}var n=t("../../const");i.prototype.constructor=i,e.exports=i,i.EMPTY=new i(0,0,0,0),i.prototype.clone=function(){return new i(this.x,this.y,this.width,this.height)},i.prototype.contains=function(t,e){return this.width<=0||this.height<=0?!1:t>=this.x&&t=this.y&&e=this.x&&t<=this.x+this.width&&e>=this.y&&e<=this.y+this.height?!0:!1}},{"../../const":38}],54:[function(t,e,r){function i(t,e,r){n.call(this),r=r||15e3,t=t||15e3;var i=16384;r>i&&(r=i),r>t&&(r=t),this._properties=[!1,!0,!1,!1,!1],this._maxSize=t,this._batchSize=r,this._buffers=null,this._bufferToUpdate=0,this.interactiveChildren=!1,this.blendMode=o.BLEND_MODES.NORMAL,this.roundPixels=!0,this.setProperties(e)}var n=t("../display/Container"),o=t("../const");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.setProperties=function(t){t&&(this._properties[0]="scale"in t?!!t.scale:this._properties[0],this._properties[1]="position"in t?!!t.position:this._properties[1],this._properties[2]="rotation"in t?!!t.rotation:this._properties[2],this._properties[3]="uvs"in t?!!t.uvs:this._properties[3],this._properties[4]="alpha"in t?!!t.alpha:this._properties[4])},i.prototype.updateTransform=function(){this.displayObjectUpdateTransform()},i.prototype.renderWebGL=function(t){this.visible&&!(this.worldAlpha<=0)&&this.children.length&&this.renderable&&(t.setObjectRenderer(t.plugins.particle),t.plugins.particle.render(this))},i.prototype.onChildrenChange=function(t){var e=Math.floor(t/this._batchSize);er;r+=6,i+=4)this.indices[r+0]=i+0,this.indices[r+1]=i+1,this.indices[r+2]=i+2,this.indices[r+3]=i+0,this.indices[r+4]=i+2,this.indices[r+5]=i+3;this.shader=null,this.indexBuffer=null,this.properties=null,this.tempMatrix=new h.Matrix}var n=t("../../renderers/webgl/utils/ObjectRenderer"),o=t("../../renderers/webgl/WebGLRenderer"),s=t("./ParticleShader"),a=t("./ParticleBuffer"),h=t("../../math");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,o.registerPlugin("particle",i),i.prototype.onContextChange=function(){var t=this.renderer.gl;this.shader=new s(this.renderer.shaderManager),this.indexBuffer=t.createBuffer(),t.bindBuffer(t.ELEMENT_ARRAY_BUFFER,this.indexBuffer),t.bufferData(t.ELEMENT_ARRAY_BUFFER,this.indices,t.STATIC_DRAW),this.properties=[{attribute:this.shader.attributes.aVertexPosition,size:2,uploadFunction:this.uploadVertices,offset:0},{attribute:this.shader.attributes.aPositionCoord,size:2,uploadFunction:this.uploadPosition,offset:0},{attribute:this.shader.attributes.aRotation,size:1,uploadFunction:this.uploadRotation,offset:0},{attribute:this.shader.attributes.aTextureCoord,size:2,uploadFunction:this.uploadUvs,offset:0},{attribute:this.shader.attributes.aColor,size:1,uploadFunction:this.uploadAlpha,offset:0}]},i.prototype.start=function(){var t=this.renderer.gl;t.activeTexture(t.TEXTURE0),t.bindBuffer(t.ELEMENT_ARRAY_BUFFER,this.indexBuffer);var e=this.shader;this.renderer.shaderManager.setShader(e)},i.prototype.render=function(t){var e=t.children,r=e.length,i=t._maxSize,n=t._batchSize;if(0!==r){r>i&&(r=i),t._buffers||(t._buffers=this.generateBuffers(t)),this.renderer.blendModeManager.setBlendMode(t.blendMode);var o=this.renderer.gl,s=t.worldTransform.copy(this.tempMatrix);s.prepend(this.renderer.currentRenderTarget.projectionMatrix),o.uniformMatrix3fv(this.shader.uniforms.projectionMatrix._location,!1,s.toArray(!0)),o.uniform1f(this.shader.uniforms.uAlpha._location,t.worldAlpha);var a=e[0]._texture.baseTexture;if(a._glTextures[o.id])o.bindTexture(o.TEXTURE_2D,a._glTextures[o.id]);else{if(!this.renderer.updateTexture(a))return;t._properties[0]&&t._properties[3]||(t._bufferToUpdate=0)}for(var h=0,u=0;r>h;h+=n,u+=1){var l=r-h;l>n&&(l=n);var c=t._buffers[u];c.uploadDynamic(e,h,l),t._bufferToUpdate===u&&(c.uploadStatic(e,h,l),t._bufferToUpdate=u+1),c.bind(this.shader),o.drawElements(o.TRIANGLES,6*l,o.UNSIGNED_SHORT,0),this.renderer.drawCount++}}},i.prototype.generateBuffers=function(t){var e,r=this.renderer.gl,i=[],n=t._maxSize,o=t._batchSize,s=t._properties;for(e=0;n>e;e+=o)i.push(new a(r,this.properties,s,o));return i},i.prototype.uploadVertices=function(t,e,r,i,n,o){for(var s,a,h,u,l,c,p,d,f,v=0;r>v;v++)s=t[e+v],a=s._texture,u=s.scale.x,l=s.scale.y,a.trim?(h=a.trim,p=h.x-s.anchor.x*h.width,c=p+a.crop.width,f=h.y-s.anchor.y*h.height,d=f+a.crop.height):(c=a._frame.width*(1-s.anchor.x),p=a._frame.width*-s.anchor.x,d=a._frame.height*(1-s.anchor.y),f=a._frame.height*-s.anchor.y),i[o]=p*u,i[o+1]=f*l,i[o+n]=c*u,i[o+n+1]=f*l,i[o+2*n]=c*u,i[o+2*n+1]=d*l,i[o+3*n]=p*u,i[o+3*n+1]=d*l,o+=4*n},i.prototype.uploadPosition=function(t,e,r,i,n,o){for(var s=0;r>s;s++){var a=t[e+s].position;i[o]=a.x,i[o+1]=a.y,i[o+n]=a.x,i[o+n+1]=a.y,i[o+2*n]=a.x,i[o+2*n+1]=a.y,i[o+3*n]=a.x,i[o+3*n+1]=a.y,o+=4*n}},i.prototype.uploadRotation=function(t,e,r,i,n,o){for(var s=0;r>s;s++){var a=t[e+s].rotation;i[o]=a,i[o+n]=a,i[o+2*n]=a,i[o+3*n]=a,o+=4*n}},i.prototype.uploadUvs=function(t,e,r,i,n,o){for(var s=0;r>s;s++){var a=t[e+s]._texture._uvs;a?(i[o]=a.x0,i[o+1]=a.y0,i[o+n]=a.x1,i[o+n+1]=a.y1,i[o+2*n]=a.x2,i[o+2*n+1]=a.y2,i[o+3*n]=a.x3,i[o+3*n+1]=a.y3,o+=4*n):(i[o]=0,i[o+1]=0,i[o+n]=0,i[o+n+1]=0,i[o+2*n]=0,i[o+2*n+1]=0,i[o+3*n]=0,i[o+3*n+1]=0,o+=4*n)}},i.prototype.uploadAlpha=function(t,e,r,i,n,o){for(var s=0;r>s;s++){var a=t[e+s].alpha;i[o]=a,i[o+n]=a,i[o+2*n]=a,i[o+3*n]=a,o+=4*n}},i.prototype.destroy=function(){this.renderer.gl&&this.renderer.gl.deleteBuffer(this.indexBuffer),n.prototype.destroy.apply(this,arguments),this.shader.destroy(),this.indices=null,this.tempMatrix=null}},{"../../math":48,"../../renderers/webgl/WebGLRenderer":65,"../../renderers/webgl/utils/ObjectRenderer":80,"./ParticleBuffer":55,"./ParticleShader":57}],57:[function(t,e,r){function i(t){n.call(this,t,["attribute vec2 aVertexPosition;","attribute vec2 aTextureCoord;","attribute float aColor;","attribute vec2 aPositionCoord;","attribute vec2 aScale;","attribute float aRotation;","uniform mat3 projectionMatrix;","varying vec2 vTextureCoord;","varying float vColor;","void main(void){"," vec2 v = aVertexPosition;"," v.x = (aVertexPosition.x) * cos(aRotation) - (aVertexPosition.y) * sin(aRotation);"," v.y = (aVertexPosition.x) * sin(aRotation) + (aVertexPosition.y) * cos(aRotation);"," v = v + aPositionCoord;"," gl_Position = vec4((projectionMatrix * vec3(v, 1.0)).xy, 0.0, 1.0);"," vTextureCoord = aTextureCoord;"," vColor = aColor;","}"].join("\n"),["precision lowp float;","varying vec2 vTextureCoord;","varying float vColor;","uniform sampler2D uSampler;","uniform float uAlpha;","void main(void){"," vec4 color = texture2D(uSampler, vTextureCoord) * vColor * uAlpha;"," if (color.a == 0.0) discard;"," gl_FragColor = color;","}"].join("\n"),{uAlpha:{type:"1f",value:1}},{aPositionCoord:0,aRotation:0})}var n=t("../../renderers/webgl/shaders/TextureShader");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i},{"../../renderers/webgl/shaders/TextureShader":78}],58:[function(t,e,r){function i(t,e,r,i){if(a.call(this),n.sayHello(t),i)for(var h in s.DEFAULT_RENDER_OPTIONS)"undefined"==typeof i[h]&&(i[h]=s.DEFAULT_RENDER_OPTIONS[h]);else i=s.DEFAULT_RENDER_OPTIONS;this.type=s.RENDERER_TYPE.UNKNOWN,this.width=e||800,this.height=r||600,this.view=i.view||document.createElement("canvas"),this.resolution=i.resolution,this.transparent=i.transparent,this.autoResize=i.autoResize||!1,this.blendModes=null,this.preserveDrawingBuffer=i.preserveDrawingBuffer,this.clearBeforeRender=i.clearBeforeRender,this.roundPixels=i.roundPixels,this._backgroundColor=0,this._backgroundColorRgba=[0,0,0,0],this._backgroundColorString="#000000",this.backgroundColor=i.backgroundColor||this._backgroundColor,this._tempDisplayObjectParent={worldTransform:new o.Matrix,worldAlpha:1,children:[]},this._lastObjectRendered=this._tempDisplayObjectParent}var n=t("../utils"),o=t("../math"),s=t("../const"),a=t("eventemitter3");i.prototype=Object.create(a.prototype),i.prototype.constructor=i,e.exports=i,Object.defineProperties(i.prototype,{backgroundColor:{get:function(){return this._backgroundColor},set:function(t){this._backgroundColor=t,this._backgroundColorString=n.hex2string(t),n.hex2rgb(t,this._backgroundColorRgba)}}}),i.prototype.resize=function(t,e){this.width=t*this.resolution,this.height=e*this.resolution,this.view.width=this.width,this.view.height=this.height,this.autoResize&&(this.view.style.width=this.width/this.resolution+"px",this.view.style.height=this.height/this.resolution+"px")},i.prototype.destroy=function(t){t&&this.view.parentNode&&this.view.parentNode.removeChild(this.view),this.type=s.RENDERER_TYPE.UNKNOWN,this.width=0,this.height=0,this.view=null,this.resolution=0,this.transparent=!1,this.autoResize=!1,this.blendModes=null,this.preserveDrawingBuffer=!1,this.clearBeforeRender=!1,this.roundPixels=!1,this._backgroundColor=0, -this._backgroundColorRgba=null,this._backgroundColorString=null}},{"../const":38,"../math":48,"../utils":98,eventemitter3:25}],59:[function(t,e,r){function i(t,e,r){r=r||{},n.call(this,"Canvas",t,e,r),this.type=h.RENDERER_TYPE.CANVAS,this.context=this.view.getContext("2d",{alpha:this.transparent}),this.refresh=!0,this.maskManager=new o,this.smoothProperty="imageSmoothingEnabled",this.context.imageSmoothingEnabled||(this.context.webkitImageSmoothingEnabled?this.smoothProperty="webkitImageSmoothingEnabled":this.context.mozImageSmoothingEnabled?this.smoothProperty="mozImageSmoothingEnabled":this.context.oImageSmoothingEnabled?this.smoothProperty="oImageSmoothingEnabled":this.context.msImageSmoothingEnabled&&(this.smoothProperty="msImageSmoothingEnabled")),this.initPlugins(),this._mapBlendModes(),this._tempDisplayObjectParent={worldTransform:new a.Matrix,worldAlpha:1},this.resize(t,e)}var n=t("../SystemRenderer"),o=t("./utils/CanvasMaskManager"),s=t("../../utils"),a=t("../../math"),h=t("../../const");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,s.pluginTarget.mixin(i),i.prototype.render=function(t){this.emit("prerender");var e=t.parent;this._lastObjectRendered=t,t.parent=this._tempDisplayObjectParent,t.updateTransform(),t.parent=e,this.context.setTransform(1,0,0,1,0,0),this.context.globalAlpha=1,this.context.globalCompositeOperation=this.blendModes[h.BLEND_MODES.NORMAL],navigator.isCocoonJS&&this.view.screencanvas&&(this.context.fillStyle="black",this.context.clear()),this.clearBeforeRender&&(this.transparent?this.context.clearRect(0,0,this.width,this.height):(this.context.fillStyle=this._backgroundColorString,this.context.fillRect(0,0,this.width,this.height))),this.renderDisplayObject(t,this.context),this.emit("postrender")},i.prototype.destroy=function(t){this.destroyPlugins(),n.prototype.destroy.call(this,t),this.context=null,this.refresh=!0,this.maskManager.destroy(),this.maskManager=null,this.smoothProperty=null},i.prototype.renderDisplayObject=function(t,e){var r=this.context;this.context=e,t.renderCanvas(this),this.context=r},i.prototype.resize=function(t,e){n.prototype.resize.call(this,t,e),this.smoothProperty&&(this.context[this.smoothProperty]=h.SCALE_MODES.DEFAULT===h.SCALE_MODES.LINEAR)},i.prototype._mapBlendModes=function(){this.blendModes||(this.blendModes={},s.canUseNewCanvasBlendModes()?(this.blendModes[h.BLEND_MODES.NORMAL]="source-over",this.blendModes[h.BLEND_MODES.ADD]="lighter",this.blendModes[h.BLEND_MODES.MULTIPLY]="multiply",this.blendModes[h.BLEND_MODES.SCREEN]="screen",this.blendModes[h.BLEND_MODES.OVERLAY]="overlay",this.blendModes[h.BLEND_MODES.DARKEN]="darken",this.blendModes[h.BLEND_MODES.LIGHTEN]="lighten",this.blendModes[h.BLEND_MODES.COLOR_DODGE]="color-dodge",this.blendModes[h.BLEND_MODES.COLOR_BURN]="color-burn",this.blendModes[h.BLEND_MODES.HARD_LIGHT]="hard-light",this.blendModes[h.BLEND_MODES.SOFT_LIGHT]="soft-light",this.blendModes[h.BLEND_MODES.DIFFERENCE]="difference",this.blendModes[h.BLEND_MODES.EXCLUSION]="exclusion",this.blendModes[h.BLEND_MODES.HUE]="hue",this.blendModes[h.BLEND_MODES.SATURATION]="saturate",this.blendModes[h.BLEND_MODES.COLOR]="color",this.blendModes[h.BLEND_MODES.LUMINOSITY]="luminosity"):(this.blendModes[h.BLEND_MODES.NORMAL]="source-over",this.blendModes[h.BLEND_MODES.ADD]="lighter",this.blendModes[h.BLEND_MODES.MULTIPLY]="source-over",this.blendModes[h.BLEND_MODES.SCREEN]="source-over",this.blendModes[h.BLEND_MODES.OVERLAY]="source-over",this.blendModes[h.BLEND_MODES.DARKEN]="source-over",this.blendModes[h.BLEND_MODES.LIGHTEN]="source-over",this.blendModes[h.BLEND_MODES.COLOR_DODGE]="source-over",this.blendModes[h.BLEND_MODES.COLOR_BURN]="source-over",this.blendModes[h.BLEND_MODES.HARD_LIGHT]="source-over",this.blendModes[h.BLEND_MODES.SOFT_LIGHT]="source-over",this.blendModes[h.BLEND_MODES.DIFFERENCE]="source-over",this.blendModes[h.BLEND_MODES.EXCLUSION]="source-over",this.blendModes[h.BLEND_MODES.HUE]="source-over",this.blendModes[h.BLEND_MODES.SATURATION]="source-over",this.blendModes[h.BLEND_MODES.COLOR]="source-over",this.blendModes[h.BLEND_MODES.LUMINOSITY]="source-over"))}},{"../../const":38,"../../math":48,"../../utils":98,"../SystemRenderer":58,"./utils/CanvasMaskManager":62}],60:[function(t,e,r){function i(t,e){this.canvas=document.createElement("canvas"),this.context=this.canvas.getContext("2d"),this.canvas.width=t,this.canvas.height=e}i.prototype.constructor=i,e.exports=i,Object.defineProperties(i.prototype,{width:{get:function(){return this.canvas.width},set:function(t){this.canvas.width=t}},height:{get:function(){return this.canvas.height},set:function(t){this.canvas.height=t}}}),i.prototype.clear=function(){this.context.setTransform(1,0,0,1,0,0),this.context.clearRect(0,0,this.canvas.width,this.canvas.height)},i.prototype.resize=function(t,e){this.canvas.width=t,this.canvas.height=e},i.prototype.destroy=function(){this.context=null,this.canvas=null}},{}],61:[function(t,e,r){var i=t("../../../const"),n={};e.exports=n,n.renderGraphics=function(t,e){var r=t.worldAlpha;t.dirty&&(this.updateGraphicsTint(t),t.dirty=!1);for(var n=0;nA?A:C,e.beginPath(),e.moveTo(T,E+C),e.lineTo(T,E+w-C),e.quadraticCurveTo(T,E+w,T+C,E+w),e.lineTo(T+S-C,E+w),e.quadraticCurveTo(T+S,E+w,T+S,E+w-C),e.lineTo(T+S,E+C),e.quadraticCurveTo(T+S,E,T+S-C,E),e.lineTo(T+C,E),e.quadraticCurveTo(T,E,T,E+C),e.closePath(),(o.fillColor||0===o.fillColor)&&(e.globalAlpha=o.fillAlpha*r,e.fillStyle="#"+("00000"+(0|a).toString(16)).substr(-6),e.fill()),o.lineWidth&&(e.globalAlpha=o.lineAlpha*r,e.strokeStyle="#"+("00000"+(0|h).toString(16)).substr(-6),e.stroke())}}},n.renderGraphicsMask=function(t,e){var r=t.graphicsData.length;if(0!==r){e.beginPath();for(var n=0;r>n;n++){var o=t.graphicsData[n],s=o.shape;if(o.type===i.SHAPES.POLY){var a=s.points;e.moveTo(a[0],a[1]);for(var h=1;hw?w:S,e.moveTo(b,_+S),e.lineTo(b,_+E-S),e.quadraticCurveTo(b,_+E,b+S,_+E),e.lineTo(b+T-S,_+E),e.quadraticCurveTo(b+T,_+E,b+T,_+E-S),e.lineTo(b+T,_+S),e.quadraticCurveTo(b+T,_,b+T-S,_),e.lineTo(b+S,_),e.quadraticCurveTo(b,_,b,_+S),e.closePath()}}}},n.updateGraphicsTint=function(t){if(16777215!==t.tint||t._prevTint!==t.tint){t._prevTint=t.tint;for(var e=(t.tint>>16&255)/255,r=(t.tint>>8&255)/255,i=(255&t.tint)/255,n=0;n>16&255)/255*e*255<<16)+((s>>8&255)/255*r*255<<8)+(255&s)/255*i*255,o._lineTint=((a>>16&255)/255*e*255<<16)+((a>>8&255)/255*r*255<<8)+(255&a)/255*i*255}}}},{"../../../const":38}],62:[function(t,e,r){function i(){}var n=t("./CanvasGraphics");i.prototype.constructor=i,e.exports=i,i.prototype.pushMask=function(t,e){e.context.save();var r=t.alpha,i=t.worldTransform,o=e.resolution;e.context.setTransform(i.a*o,i.b*o,i.c*o,i.d*o,i.tx*o,i.ty*o),t.texture||(n.renderGraphicsMask(t,e.context),e.context.clip()),t.worldAlpha=r},i.prototype.popMask=function(t){t.context.restore()},i.prototype.destroy=function(){}},{"./CanvasGraphics":61}],63:[function(t,e,r){var i=t("../../../utils"),n={};e.exports=n,n.getTintedTexture=function(t,e){var r=t.texture;e=n.roundColor(e);var i="#"+("00000"+(0|e).toString(16)).substr(-6);if(r.tintCache=r.tintCache||{},r.tintCache[i])return r.tintCache[i];var o=n.canvas||document.createElement("canvas");if(n.tintMethod(r,e,o),n.convertTintToImage){var s=new Image;s.src=o.toDataURL(),r.tintCache[i]=s}else r.tintCache[i]=o,n.canvas=null;return o},n.tintWithMultiply=function(t,e,r){var i=r.getContext("2d"),n=t.baseTexture.resolution,o=t.crop.clone();o.x*=n,o.y*=n,o.width*=n,o.height*=n,r.width=o.width,r.height=o.height,i.fillStyle="#"+("00000"+(0|e).toString(16)).substr(-6),i.fillRect(0,0,o.width,o.height),i.globalCompositeOperation="multiply",i.drawImage(t.baseTexture.source,o.x,o.y,o.width,o.height,0,0,o.width,o.height),i.globalCompositeOperation="destination-atop",i.drawImage(t.baseTexture.source,o.x,o.y,o.width,o.height,0,0,o.width,o.height)},n.tintWithOverlay=function(t,e,r){var i=r.getContext("2d"),n=t.baseTexture.resolution,o=t.crop.clone();o.x*=n,o.y*=n,o.width*=n,o.height*=n,r.width=o.width,r.height=o.height,i.globalCompositeOperation="copy",i.fillStyle="#"+("00000"+(0|e).toString(16)).substr(-6),i.fillRect(0,0,o.width,o.height),i.globalCompositeOperation="destination-atop",i.drawImage(t.baseTexture.source,o.x,o.y,o.width,o.height,0,0,o.width,o.height)},n.tintWithPerPixel=function(t,e,r){var n=r.getContext("2d"),o=t.baseTexture.resolution,s=t.crop.clone();s.x*=o,s.y*=o,s.width*=o,s.height*=o,r.width=s.width,r.height=s.height,n.globalCompositeOperation="copy",n.drawImage(t.baseTexture.source,s.x,s.y,s.width,s.height,0,0,s.width,s.height);for(var a=i.hex2rgb(e),h=a[0],u=a[1],l=a[2],c=n.getImageData(0,0,s.width,s.height),p=c.data,d=0;de;++e)this.shaders[e].syncUniform(t)}},{"../shaders/TextureShader":78}],67:[function(t,e,r){function i(){n.call(this,"\nprecision mediump float;\n\nattribute vec2 aVertexPosition;\nattribute vec2 aTextureCoord;\nattribute vec4 aColor;\n\nuniform mat3 projectionMatrix;\nuniform vec2 resolution;\n\nvarying vec2 vTextureCoord;\nvarying vec4 vColor;\n\nvarying vec2 vResolution;\n\n//texcoords computed in vertex step\n//to avoid dependent texture reads\nvarying vec2 v_rgbNW;\nvarying vec2 v_rgbNE;\nvarying vec2 v_rgbSW;\nvarying vec2 v_rgbSE;\nvarying vec2 v_rgbM;\n\n\nvoid texcoords(vec2 fragCoord, vec2 resolution,\n out vec2 v_rgbNW, out vec2 v_rgbNE,\n out vec2 v_rgbSW, out vec2 v_rgbSE,\n out vec2 v_rgbM) {\n vec2 inverseVP = 1.0 / resolution.xy;\n v_rgbNW = (fragCoord + vec2(-1.0, -1.0)) * inverseVP;\n v_rgbNE = (fragCoord + vec2(1.0, -1.0)) * inverseVP;\n v_rgbSW = (fragCoord + vec2(-1.0, 1.0)) * inverseVP;\n v_rgbSE = (fragCoord + vec2(1.0, 1.0)) * inverseVP;\n v_rgbM = vec2(fragCoord * inverseVP);\n}\n\nvoid main(void){\n gl_Position = vec4((projectionMatrix * vec3(aVertexPosition, 1.0)).xy, 0.0, 1.0);\n vTextureCoord = aTextureCoord;\n vColor = vec4(aColor.rgb * aColor.a, aColor.a);\n vResolution = resolution;\n\n //compute the texture coords and send them to varyings\n texcoords(aTextureCoord * resolution, resolution, v_rgbNW, v_rgbNE, v_rgbSW, v_rgbSE, v_rgbM);\n}\n",'precision lowp float;\n\n\n/**\nBasic FXAA implementation based on the code on geeks3d.com with the\nmodification that the texture2DLod stuff was removed since it\'s\nunsupported by WebGL.\n\n--\n\nFrom:\nhttps://github.com/mitsuhiko/webgl-meincraft\n\nCopyright (c) 2011 by Armin Ronacher.\n\nSome rights reserved.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are\nmet:\n\n * Redistributions of source code must retain the above copyright\n notice, this list of conditions and the following disclaimer.\n\n * Redistributions in binary form must reproduce the above\n copyright notice, this list of conditions and the following\n disclaimer in the documentation and/or other materials provided\n with the distribution.\n\n * The names of the contributors may not be used to endorse or\n promote products derived from this software without specific\n prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\nLIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\nA PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\nOWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\nSPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\nLIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\nDATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\nTHEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\nOF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n*/\n\n#ifndef FXAA_REDUCE_MIN\n #define FXAA_REDUCE_MIN (1.0/ 128.0)\n#endif\n#ifndef FXAA_REDUCE_MUL\n #define FXAA_REDUCE_MUL (1.0 / 8.0)\n#endif\n#ifndef FXAA_SPAN_MAX\n #define FXAA_SPAN_MAX 8.0\n#endif\n\n//optimized version for mobile, where dependent\n//texture reads can be a bottleneck\nvec4 fxaa(sampler2D tex, vec2 fragCoord, vec2 resolution,\n vec2 v_rgbNW, vec2 v_rgbNE,\n vec2 v_rgbSW, vec2 v_rgbSE,\n vec2 v_rgbM) {\n vec4 color;\n mediump vec2 inverseVP = vec2(1.0 / resolution.x, 1.0 / resolution.y);\n vec3 rgbNW = texture2D(tex, v_rgbNW).xyz;\n vec3 rgbNE = texture2D(tex, v_rgbNE).xyz;\n vec3 rgbSW = texture2D(tex, v_rgbSW).xyz;\n vec3 rgbSE = texture2D(tex, v_rgbSE).xyz;\n vec4 texColor = texture2D(tex, v_rgbM);\n vec3 rgbM = texColor.xyz;\n vec3 luma = vec3(0.299, 0.587, 0.114);\n float lumaNW = dot(rgbNW, luma);\n float lumaNE = dot(rgbNE, luma);\n float lumaSW = dot(rgbSW, luma);\n float lumaSE = dot(rgbSE, luma);\n float lumaM = dot(rgbM, luma);\n float lumaMin = min(lumaM, min(min(lumaNW, lumaNE), min(lumaSW, lumaSE)));\n float lumaMax = max(lumaM, max(max(lumaNW, lumaNE), max(lumaSW, lumaSE)));\n\n mediump vec2 dir;\n dir.x = -((lumaNW + lumaNE) - (lumaSW + lumaSE));\n dir.y = ((lumaNW + lumaSW) - (lumaNE + lumaSE));\n\n float dirReduce = max((lumaNW + lumaNE + lumaSW + lumaSE) *\n (0.25 * FXAA_REDUCE_MUL), FXAA_REDUCE_MIN);\n\n float rcpDirMin = 1.0 / (min(abs(dir.x), abs(dir.y)) + dirReduce);\n dir = min(vec2(FXAA_SPAN_MAX, FXAA_SPAN_MAX),\n max(vec2(-FXAA_SPAN_MAX, -FXAA_SPAN_MAX),\n dir * rcpDirMin)) * inverseVP;\n\n vec3 rgbA = 0.5 * (\n texture2D(tex, fragCoord * inverseVP + dir * (1.0 / 3.0 - 0.5)).xyz +\n texture2D(tex, fragCoord * inverseVP + dir * (2.0 / 3.0 - 0.5)).xyz);\n vec3 rgbB = rgbA * 0.5 + 0.25 * (\n texture2D(tex, fragCoord * inverseVP + dir * -0.5).xyz +\n texture2D(tex, fragCoord * inverseVP + dir * 0.5).xyz);\n\n float lumaB = dot(rgbB, luma);\n if ((lumaB < lumaMin) || (lumaB > lumaMax))\n color = vec4(rgbA, texColor.a);\n else\n color = vec4(rgbB, texColor.a);\n return color;\n}\n\n\nvarying vec2 vTextureCoord;\nvarying vec4 vColor;\nvarying vec2 vResolution;\n\n//texcoords computed in vertex step\n//to avoid dependent texture reads\nvarying vec2 v_rgbNW;\nvarying vec2 v_rgbNE;\nvarying vec2 v_rgbSW;\nvarying vec2 v_rgbSE;\nvarying vec2 v_rgbM;\n\nuniform sampler2D uSampler;\n\n\nvoid main(void){\n\n gl_FragColor = fxaa(uSampler, vTextureCoord * vResolution, vResolution, v_rgbNW, v_rgbNE, v_rgbSW, v_rgbSE, v_rgbM);\n\n}\n',{resolution:{type:"v2",value:{x:1,y:1}}})}var n=t("./AbstractFilter");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.applyFilter=function(t,e,r){var i=t.filterManager,n=this.getShader(t);i.applyFilter(n,e,r)}},{"./AbstractFilter":66}],68:[function(t,e,r){function i(t){var e=new o.Matrix;n.call(this,"attribute vec2 aVertexPosition;\nattribute vec2 aTextureCoord;\nattribute vec4 aColor;\n\nuniform mat3 projectionMatrix;\nuniform mat3 otherMatrix;\n\nvarying vec2 vMaskCoord;\nvarying vec2 vTextureCoord;\nvarying vec4 vColor;\n\nvoid main(void)\n{\n gl_Position = vec4((projectionMatrix * vec3(aVertexPosition, 1.0)).xy, 0.0, 1.0);\n vTextureCoord = aTextureCoord;\n vMaskCoord = ( otherMatrix * vec3( aTextureCoord, 1.0) ).xy;\n vColor = vec4(aColor.rgb * aColor.a, aColor.a);\n}\n","precision lowp float;\n\nvarying vec2 vMaskCoord;\nvarying vec2 vTextureCoord;\nvarying vec4 vColor;\n\nuniform sampler2D uSampler;\nuniform float alpha;\nuniform sampler2D mask;\n\nvoid main(void)\n{\n // check clip! this will stop the mask bleeding out from the edges\n vec2 text = abs( vMaskCoord - 0.5 );\n text = step(0.5, text);\n float clip = 1.0 - max(text.y, text.x);\n vec4 original = texture2D(uSampler, vTextureCoord);\n vec4 masky = texture2D(mask, vMaskCoord);\n original *= (masky.r * masky.a * alpha * clip);\n gl_FragColor = original;\n}\n",{mask:{type:"sampler2D",value:t._texture},alpha:{type:"f",value:1},otherMatrix:{type:"mat3",value:e.toArray(!0)}}),this.maskSprite=t,this.maskMatrix=e}var n=t("./AbstractFilter"),o=t("../../../math");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.applyFilter=function(t,e,r){var i=t.filterManager;this.uniforms.mask.value=this.maskSprite._texture,i.calculateMappedMatrix(e.frame,this.maskSprite,this.maskMatrix),this.uniforms.otherMatrix.value=this.maskMatrix.toArray(!0),this.uniforms.alpha.value=this.maskSprite.worldAlpha;var n=this.getShader(t);i.applyFilter(n,e,r)},Object.defineProperties(i.prototype,{map:{get:function(){return this.uniforms.mask.value},set:function(t){this.uniforms.mask.value=t}},offset:{get:function(){return this.uniforms.offset.value},set:function(t){this.uniforms.offset.value=t}}})},{"../../../math":48,"./AbstractFilter":66}],69:[function(t,e,r){function i(t){n.call(this,t),this.currentBlendMode=99999}var n=t("./WebGLManager");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.setBlendMode=function(t){if(this.currentBlendMode===t)return!1;this.currentBlendMode=t;var e=this.renderer.blendModes[this.currentBlendMode];return this.renderer.gl.blendFunc(e[0],e[1]),!0}},{"./WebGLManager":74}],70:[function(t,e,r){function i(t){n.call(this,t),this.filterStack=[],this.filterStack.push({renderTarget:t.currentRenderTarget,filter:[],bounds:null}),this.texturePool=[],this.textureSize=new h.Rectangle(0,0,t.width,t.height),this.currentFrame=null}var n=t("./WebGLManager"),o=t("../utils/RenderTarget"),s=t("../../../const"),a=t("../utils/Quad"),h=t("../../../math");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.onContextChange=function(){this.texturePool.length=0;var t=this.renderer.gl;this.quad=new a(t)},i.prototype.setFilterStack=function(t){this.filterStack=t},i.prototype.pushFilter=function(t,e){var r=t.filterArea?t.filterArea.clone():t.getBounds();r.x=0|r.x,r.y=0|r.y,r.width=0|r.width,r.height=0|r.height;var i=0|e[0].padding;if(r.x-=i,r.y-=i,r.width+=2*i,r.height+=2*i,this.renderer.currentRenderTarget.transform){var n=this.renderer.currentRenderTarget.transform;r.x+=n.tx,r.y+=n.ty,this.capFilterArea(r),r.x-=n.tx,r.y-=n.ty}else this.capFilterArea(r);if(r.width>0&&r.height>0){this.currentFrame=r;var o=this.getRenderTarget();this.renderer.setRenderTarget(o),o.clear(),this.filterStack.push({renderTarget:o,filter:e})}else this.filterStack.push({renderTarget:null,filter:e})},i.prototype.popFilter=function(){var t=this.filterStack.pop(),e=this.filterStack[this.filterStack.length-1],r=t.renderTarget;if(t.renderTarget){var i=e.renderTarget,n=this.renderer.gl;this.currentFrame=r.frame,this.quad.map(this.textureSize,r.frame),n.bindBuffer(n.ARRAY_BUFFER,this.quad.vertexBuffer),n.bindBuffer(n.ELEMENT_ARRAY_BUFFER,this.quad.indexBuffer);var o=t.filter;if(n.vertexAttribPointer(this.renderer.shaderManager.defaultShader.attributes.aVertexPosition,2,n.FLOAT,!1,0,0),n.vertexAttribPointer(this.renderer.shaderManager.defaultShader.attributes.aTextureCoord,2,n.FLOAT,!1,0,32),n.vertexAttribPointer(this.renderer.shaderManager.defaultShader.attributes.aColor,4,n.FLOAT,!1,0,64),this.renderer.blendModeManager.setBlendMode(s.BLEND_MODES.NORMAL),1===o.length)o[0].uniforms.dimensions&&(o[0].uniforms.dimensions.value[0]=this.renderer.width,o[0].uniforms.dimensions.value[1]=this.renderer.height,o[0].uniforms.dimensions.value[2]=this.quad.vertices[0],o[0].uniforms.dimensions.value[3]=this.quad.vertices[5]),o[0].applyFilter(this.renderer,r,i),this.returnRenderTarget(r);else{for(var a=r,h=this.getRenderTarget(!0),u=0;uthis.textureSize.width&&(t.width=this.textureSize.width-t.x),t.y+t.height>this.textureSize.height&&(t.height=this.textureSize.height-t.y)},i.prototype.resize=function(t,e){this.textureSize.width=t,this.textureSize.height=e;for(var r=0;re;++e)t._array[2*e]=o[e].x,t._array[2*e+1]=o[e].y;s.uniform2fv(i,t._array);break;case"v3v":for(t._array||(t._array=new Float32Array(3*o.length)),e=0,r=o.length;r>e;++e)t._array[3*e]=o[e].x,t._array[3*e+1]=o[e].y,t._array[3*e+2]=o[e].z;s.uniform3fv(i,t._array);break;case"v4v":for(t._array||(t._array=new Float32Array(4*o.length)),e=0,r=o.length;r>e;++e)t._array[4*e]=o[e].x,t._array[4*e+1]=o[e].y,t._array[4*e+2]=o[e].z,t._array[4*e+3]=o[e].w;s.uniform4fv(i,t._array);break;case"t":case"sampler2D":if(!t.value||!t.value.baseTexture.hasLoaded)break;s.activeTexture(s["TEXTURE"+this.textureCount]);var a=t.value.baseTexture._glTextures[s.id];a||(this.initSampler2D(t),a=t.value.baseTexture._glTextures[s.id]),s.bindTexture(s.TEXTURE_2D,a),s.uniform1i(t._location,this.textureCount),this.textureCount++;break;default:console.warn("Pixi.js Shader Warning: Unknown uniform type: "+t.type)}},i.prototype.syncUniforms=function(){this.textureCount=1;for(var t in this.uniforms)this.syncUniform(this.uniforms[t])},i.prototype.initSampler2D=function(t){var e=this.gl,r=t.value.baseTexture;if(r.hasLoaded)if(t.textureData){var i=t.textureData;r._glTextures[e.id]=e.createTexture(),e.bindTexture(e.TEXTURE_2D,r._glTextures[e.id]),e.pixelStorei(e.UNPACK_PREMULTIPLY_ALPHA_WEBGL,r.premultipliedAlpha),e.texImage2D(e.TEXTURE_2D,0,i.luminance?e.LUMINANCE:e.RGBA,e.RGBA,e.UNSIGNED_BYTE,r.source),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MAG_FILTER,i.magFilter?i.magFilter:e.LINEAR),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MIN_FILTER,i.wrapS?i.wrapS:e.CLAMP_TO_EDGE),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,i.wrapS?i.wrapS:e.CLAMP_TO_EDGE),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,i.wrapT?i.wrapT:e.CLAMP_TO_EDGE)}else this.shaderManager.renderer.updateTexture(r)},i.prototype.destroy=function(){this.gl.deleteProgram(this.program),this.gl=null,this.uniforms=null,this.attributes=null,this.vertexSrc=null,this.fragmentSrc=null},i.prototype._glCompile=function(t,e){var r=this.gl.createShader(t);return this.gl.shaderSource(r,e),this.gl.compileShader(r),this.gl.getShaderParameter(r,this.gl.COMPILE_STATUS)?r:(console.log(this.gl.getShaderInfoLog(r)),null)}},{"../../../utils":98}],78:[function(t,e,r){function i(t,e,r,o,s){var a={uSampler:{type:"sampler2D",value:0},projectionMatrix:{type:"mat3",value:new Float32Array([1,0,0,0,1,0,0,0,1])}};if(o)for(var h in o)a[h]=o[h];var u={aVertexPosition:0,aTextureCoord:0,aColor:0};if(s)for(var l in s)u[l]=s[l];e=e||i.defaultVertexSrc,r=r||i.defaultFragmentSrc,n.call(this,t,e,r,a,u)}var n=t("./Shader");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.defaultVertexSrc=["precision lowp float;","attribute vec2 aVertexPosition;","attribute vec2 aTextureCoord;","attribute vec4 aColor;","uniform mat3 projectionMatrix;","varying vec2 vTextureCoord;","varying vec4 vColor;","void main(void){"," gl_Position = vec4((projectionMatrix * vec3(aVertexPosition, 1.0)).xy, 0.0, 1.0);"," vTextureCoord = aTextureCoord;"," vColor = vec4(aColor.rgb * aColor.a, aColor.a);","}"].join("\n"),i.defaultFragmentSrc=["precision lowp float;","varying vec2 vTextureCoord;","varying vec4 vColor;","uniform sampler2D uSampler;","void main(void){"," gl_FragColor = texture2D(uSampler, vTextureCoord) * vColor ;","}"].join("\n")},{"./Shader":77}],79:[function(t,e,r){function i(t){vertexSrc=i.defaultVertexSrc,fragmentSrc=i.defaultFragmentSrc,console.log(fragmentSrc),n.call(this,t,vertexSrc,fragmentSrc)}var n=t("pixi-gl-core").GLShader;i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.defaultVertexSrc=["precision lowp float;","attribute vec2 aVertexPosition;","attribute vec2 aTextureCoord;","attribute vec4 aColor;","uniform mat3 projectionMatrix;","varying vec2 vTextureCoord;","varying vec4 vColor;","void main(void){"," gl_Position = vec4((projectionMatrix * vec3(aVertexPosition, 1.0)).xy, 0.0, 1.0);"," vTextureCoord = aTextureCoord;"," vColor = vec4(aColor.rgb * aColor.a, aColor.a);","}"].join("\n"),i.defaultFragmentSrc=["precision lowp float;","varying vec2 vTextureCoord;","varying vec4 vColor;","uniform sampler2D uSampler;","void main(void){"," gl_FragColor = texture2D(uSampler, vTextureCoord) * vColor ;","}"].join("\n")},{"pixi-gl-core":1}],80:[function(t,e,r){function i(t){n.call(this,t)}var n=t("../managers/WebGLManager");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.start=function(){},i.prototype.stop=function(){this.flush()},i.prototype.flush=function(){},i.prototype.render=function(t){}},{"../managers/WebGLManager":74}],81:[function(t,e,r){function i(t){this.gl=t,this.vertices=new Float32Array([0,0,200,0,200,200,0,200]),this.uvs=new Float32Array([0,0,1,0,1,1,0,1]),this.colors=new Float32Array([1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]),this.indices=new Uint16Array([0,1,2,0,3,2]),this.vertexBuffer=t.createBuffer(),this.indexBuffer=t.createBuffer(),t.bindBuffer(t.ARRAY_BUFFER,this.vertexBuffer),t.bufferData(t.ARRAY_BUFFER,128,t.DYNAMIC_DRAW),t.bindBuffer(t.ELEMENT_ARRAY_BUFFER,this.indexBuffer),t.bufferData(t.ELEMENT_ARRAY_BUFFER,this.indices,t.STATIC_DRAW),this.upload()}i.prototype.constructor=i,i.prototype.map=function(t,e){var r=0,i=0;this.uvs[0]=r,this.uvs[1]=i,this.uvs[2]=r+e.width/t.width,this.uvs[3]=i,this.uvs[4]=r+e.width/t.width,this.uvs[5]=i+e.height/t.height,this.uvs[6]=r,this.uvs[7]=i+e.height/t.height,r=e.x,i=e.y,this.vertices[0]=r,this.vertices[1]=i,this.vertices[2]=r+e.width,this.vertices[3]=i,this.vertices[4]=r+e.width,this.vertices[5]=i+e.height,this.vertices[6]=r,this.vertices[7]=i+e.height,this.upload()},i.prototype.upload=function(){var t=this.gl;t.bindBuffer(t.ARRAY_BUFFER,this.vertexBuffer),t.bufferSubData(t.ARRAY_BUFFER,0,this.vertices),t.bufferSubData(t.ARRAY_BUFFER,32,this.uvs),t.bufferSubData(t.ARRAY_BUFFER,64,this.colors)},i.prototype.destroy=function(){var t=this.gl;t.deleteBuffer(this.vertexBuffer),t.deleteBuffer(this.indexBuffer)},e.exports=i},{}],82:[function(t,e,r){var i=t("../../../math"),n=(t("../../../utils"),t("../../../const")),o=t("pixi-gl-core").GLTexture,s=t("pixi-gl-core").GLFramebuffer,a=t("./StencilMaskStack"),h=function(t,e,r,h,u,l){if(this.gl=t,this.frameBuffer=null,this.texture=null,this.clearColor=[0,0,0,0],this.size=new i.Rectangle(0,0,1,1),this.resolution=u||n.RESOLUTION,this.projectionMatrix=new i.Matrix,this.transform=null,this.frame=null,this.stencilBuffer=null,this.stencilMaskStack=new a,this.filterStack=[{renderTarget:this,filter:[],bounds:this.size}],this.scaleMode=h||n.SCALE_MODES.DEFAULT,this.root=l,this.frameBuffer=new s.createRGBA(t,100,100),this.root)this.frameBuffer.framebuffer=null;else{var c=new o(t);c.enableLinearScaling(),c.enableWrapClamp(),this.frameBuffer.enableTexture(c),this.texture=c.texture}this.resize(e,r)};h.prototype.constructor=h,e.exports=h,h.prototype.clear=function(t){var e=t||this.clearColor;this.frameBuffer.clear(e[0],e[1],e[2],e[3])},h.prototype.attachStencilBuffer=function(){this.root||this.frameBuffer.enableStencil()},h.prototype.activate=function(){var t=this.gl;this.frameBuffer.bind();var e=this.frame||this.size;this.calculateProjection(e),this.transform&&this.projectionMatrix.append(this.transform),t.viewport(0,0,e.width*this.resolution,e.height*this.resolution)},h.prototype.calculateProjection=function(t){var e=this.projectionMatrix;e.identity(),this.root?(e.a=1/t.width*2,e.d=-1/t.height*2,e.tx=-1-t.x*e.a,e.ty=1-t.y*e.d):(e.a=1/t.width*2,e.d=1/t.height*2,e.tx=-1-t.x*e.a,e.ty=-1-t.y*e.d)},h.prototype.resize=function(t,e){if(t=0|t,e=0|e,this.size.width!==t||this.size.height!==e){this.size.width=t,this.size.height=e,this.frameBuffer.resize(t*this.resolution,e*this.resolution);var r=this.frame||this.size;this.calculateProjection(r)}},h.prototype.destroy=function(){this.gl;this.frameBuffer.destroy(),this.frameBuffer=null,this.texture=null}},{"../../../const":38,"../../../math":48,"../../../utils":98,"./StencilMaskStack":83,"pixi-gl-core":1}],83:[function(t,e,r){function i(){this.stencilStack=[],this.reverse=!0,this.count=0}i.prototype.constructor=i,e.exports=i},{}],84:[function(t,e,r){function i(t,e){return e=e||{},e[CONST.BLEND_MODES.NORMAL]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.ADD]=[t.SRC_ALPHA,t.DST_ALPHA],e[CONST.BLEND_MODES.MULTIPLY]=[t.DST_COLOR,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.SCREEN]=[t.SRC_ALPHA,t.ONE],e[CONST.BLEND_MODES.OVERLAY]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.DARKEN]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.LIGHTEN]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.COLOR_DODGE]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.COLOR_BURN]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.HARD_LIGHT]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.SOFT_LIGHT]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.DIFFERENCE]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.EXCLUSION]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.HUE]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.SATURATION]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.COLOR]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.LUMINOSITY]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e}CONST=t("../../../const"),e.exports=i},{"../../../const":38}],85:[function(t,e,r){function i(t,e){e=e||{},e[CONST.DRAW_MODES.POINTS]=t.POINTS,e[CONST.DRAW_MODES.LINES]=t.LINES,e[CONST.DRAW_MODES.LINE_LOOP]=t.LINE_LOOP,e[CONST.DRAW_MODES.LINE_STRIP]=t.LINE_STRIP,e[CONST.DRAW_MODES.TRIANGLES]=t.TRIANGLES,e[CONST.DRAW_MODES.TRIANGLE_STRIP]=t.TRIANGLE_STRIP,e[CONST.DRAW_MODES.TRIANGLE_FAN]=t.TRIANGLE_FAN}CONST=t("../../../const"),e.exports=i},{"../../../const":38}],86:[function(t,e,r){function i(t){s.call(this),this.anchor=new n.Point,this._texture=null,this._width=0,this._height=0,this.tint=16777215,this.blendMode=u.BLEND_MODES.NORMAL,this.shader=null,this.cachedTint=16777215,this.texture=t||o.EMPTY,this.textureDirty=!0,this.vertexDirty=!0,this.vertexData=new Float32Array(8)}var n=t("../math"),o=t("../textures/Texture"),s=t("../display/Container"),a=t("../renderers/canvas/utils/CanvasTinter"),h=t("../utils"),u=t("../const"),l=new n.Point;i.prototype=Object.create(s.prototype),i.prototype.constructor=i,e.exports=i,Object.defineProperties(i.prototype,{width:{get:function(){return Math.abs(this.scale.x)*this.texture._frame.width},set:function(t){var e=h.sign(this.scale.x)||1;this.scale.x=e*t/this.texture._frame.width,this._width=t}},height:{get:function(){return Math.abs(this.scale.y)*this.texture._frame.height},set:function(t){var e=h.sign(this.scale.y)||1;this.scale.y=e*t/this.texture._frame.height,this._height=t}},texture:{get:function(){return this._texture},set:function(t){this._texture!==t&&(this._texture=t,this.cachedTint=16777215,this.textureDirty=!0,t&&(t.baseTexture.hasLoaded?this._onTextureUpdate():t.once("update",this._onTextureUpdate,this)))}}}),i.prototype._onTextureUpdate=function(){this.textureDirty=!0,this._width&&(this.scale.x=h.sign(this.scale.x)*this._width/this.texture.frame.width),this._height&&(this.scale.y=h.sign(this.scale.y)*this._height/this.texture.frame.height)},i.prototype.caclulateVertices=function(){var t,e,r,i,n=this._texture,o=this.worldTransform,s=o.a,a=o.b,h=o.c,u=o.d,l=o.tx,c=o.ty,p=this.vertexData,d=n.trim;d?(e=d.x-this.anchor.x*d.width,t=e+n.crop.width,i=d.y-this.anchor.y*d.height,r=i+n.crop.height):(t=n._frame.width*(1-this.anchor.x),e=n._frame.width*-this.anchor.x,r=n._frame.height*(1-this.anchor.y),i=n._frame.height*-this.anchor.y),p[0]=s*e+h*i+l,p[1]=u*i+a*e+c,p[2]=s*t+h*i+l,p[3]=u*i+a*t+c,p[4]=s*t+h*r+l,p[5]=u*r+a*t+c,p[6]=s*e+h*r+l,p[7]=u*r+a*e+c},i.prototype._renderWebGL=function(t){this.textureDirty&&(this.textureDirty=!1,this._onTextureUpdate(),this.vertexDirty=!0),this.vertexDirty&&(this.vertexDirty=!1,this.caclulateVertices()),t.setObjectRenderer(t.plugins.sprite),t.plugins.sprite.render(this)},i.prototype.getBounds=function(t){if(!this._currentBounds){this.vertexDirty&&(this.vertexDirty=!1,this.caclulateVertices());var e,r,i,n,o=this.vertexData,s=o[0],a=o[1],h=o[2],u=o[3],l=o[4],c=o[5],p=o[6],d=o[7];if(e=s,e=e>h?h:e,e=e>l?l:e,e=e>p?p:e,i=a,i=i>u?u:i,i=i>c?c:i,i=i>d?d:i,r=s,r=h>r?h:r,r=l>r?l:r,r=p>r?p:r,n=a,n=u>n?u:n,n=c>n?c:n,n=d>n?d:n,this.children.length){var f=this.containerGetBounds();w0=f.x,w1=f.x+f.width,h0=f.y,h1=f.y+f.height,e=ew1?r:w1,n=n>h1?n:h1}var v=this._bounds;v.x=e,v.width=r-e,v.y=i,v.height=n-i,this._currentBounds=v}return this._currentBounds},i.prototype.getLocalBounds=function(){return this._bounds.x=-this._texture._frame.width*this.anchor.x,this._bounds.y=-this._texture._frame.height*this.anchor.y,this._bounds.width=this._texture._frame.width,this._bounds.height=this._texture._frame.height,this._bounds},i.prototype.containsPoint=function(t){this.worldTransform.applyInverse(t,l);var e,r=this._texture._frame.width,i=this._texture._frame.height,n=-r*this.anchor.x;return l.x>n&&l.xe&&l.yr;r++)this.groups[r]={textures:[],textureCount:0,ids:[],size:0,start:0,blend:0};this.currentGroup=this.groups[this.groupCount++],this.currentTexture=null}var n=t("../../renderers/webgl/utils/ObjectRenderer"),o=t("../../renderers/webgl/WebGLRenderer"),s=(t("../../renderers/webgl/shaders/_TextureShader"),t("../../utils/createIndicesForQuads")),a=t("./generateMultiTextureShader"),h=t("../../const"),u=t("pixi-gl-core"),l=2;i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,o.registerPlugin("sprite",i),i.prototype.onContextChange=function(){var t=this.renderer.gl;this._shader=a(t,l),this.shader=this.renderer.shaderManager.defaultShader,this.vertexBuffer=u.GLBuffer.createVertexBuffer(t,null,t.DYNAMIC_DRAW),this.indexBuffer=u.GLBuffer.createIndexBuffer(t,this.indices,t.STATIC_DRAW),this.vao=new u.VertexArrayObject(t),this.vao.addIndex(this.indexBuffer),this.vao.addAttribute(this.vertexBuffer,this._shader.attributes.aVertexPosition,t.FLOAT,!1,this.vertByteSize,0),this.vao.addAttribute(this.vertexBuffer,this._shader.attributes.aTextureCoord,t.UNSIGNED_SHORT,!0,this.vertByteSize,8),this.vao.addAttribute(this.vertexBuffer,this._shader.attributes.aColor,t.UNSIGNED_BYTE,!0,this.vertByteSize,12),this.vao.addAttribute(this.vertexBuffer,this._shader.attributes.aTextureId,t.FLOAT,!1,this.vertByteSize,16),this.currentBlendMode=99999},i.prototype.render=function(t){this.currentIndex>=this.size&&this.flush();var e=t.texture._uvs;if(e){var r=(this.groups,t.texture.baseTexture),i=this.currentGroup;if(this.currentTexture!==r&&(this.currentTexture=r,!r._enabled)){if(r._enabled=!0,r._id=this.textureCount,this.textureCount===l){for(var n=0;n>16)+(65280&t.tint)+((255&t.tint)<<16)+(255*t.worldAlpha<<24);a[o++]=h[0],a[o++]=h[1],this.uvs[o++]=e.uvs_uint32[0],s[o++]=u,a[o++]=r._id,a[o++]=h[2],a[o++]=h[3],this.uvs[o++]=e.uvs_uint32[1],s[o++]=u,a[o++]=r._id,a[o++]=h[4],a[o++]=h[5],this.uvs[o++]=e.uvs_uint32[2],s[o++]=u,a[o++]=r._id,a[o++]=h[6],a[o++]=h[7],this.uvs[o++]=e.uvs_uint32[3],s[o++]=u,a[o++]=r._id,this.sprites[this.currentBatchSize++]=t}},i.prototype.renderSprites=function(t){for(var e=0;e.5*this.size)this.vertexBuffer.upload(this.vertices,0,!0);else{var e=this.positions.subarray(0,this.currentIndex*this.vertByteSize);this.vertexBuffer.upload(e,0,!0)}for(this.renderer.bindShader(this._shader),this.renderer.blendModeManager.setBlendMode(0),t=0;tu;u++)h[u]=u;return a.bind(),a.uniforms.uSamplers=h,a}function n(t){var e="vec4 getSampleFromArray(sampler2D textures[%%], int ndx, vec2 uv) {\n\nvec4 color;";e+="\n", -e+="\n";for(var r=0;t>r;r++)r>0&&(e+="\nelse "),t-1>r&&(e+="if(ndx == "+r+")"),e+="\n{",e+="\n color = texture2D(textures["+r+"], uv);",e+="\n}";return e+="\n",e+="\n",e+="return color;",e+="\n}"}var o=t("pixi-gl-core").GLShader,s=["varying vec2 vTextureCoord;","varying vec4 vColor;","varying float vTextureId;","uniform sampler2D uSamplers[%%];","void main(void){","gl_FragColor = getSampleFromArray(uSamplers, int(vTextureId), vTextureCoord) * vColor;","}"].join("\n");e.exports=i},{"pixi-gl-core":1}],89:[function(t,e,r){function i(t,e,r){this.canvas=document.createElement("canvas"),this.context=this.canvas.getContext("2d"),this.resolution=r||h.RESOLUTION,this._text=null,this._style=null;var i=o.fromCanvas(this.canvas);i.trim=new s.Rectangle,n.call(this,i),this.text=t,this.style=e}var n=t("../sprites/Sprite"),o=t("../textures/Texture"),s=t("../math"),a=t("../utils"),h=t("../const");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.fontPropertiesCache={},i.fontPropertiesCanvas=document.createElement("canvas"),i.fontPropertiesContext=i.fontPropertiesCanvas.getContext("2d"),Object.defineProperties(i.prototype,{width:{get:function(){return this.dirty&&this.updateText(),this.scale.x*this._texture._frame.width},set:function(t){this.scale.x=t/this._texture._frame.width,this._width=t}},height:{get:function(){return this.dirty&&this.updateText(),this.scale.y*this._texture._frame.height},set:function(t){this.scale.y=t/this._texture._frame.height,this._height=t}},style:{get:function(){return this._style},set:function(t){t=t||{},"number"==typeof t.fill&&(t.fill=a.hex2string(t.fill)),"number"==typeof t.stroke&&(t.stroke=a.hex2string(t.stroke)),"number"==typeof t.dropShadowColor&&(t.dropShadowColor=a.hex2string(t.dropShadowColor)),t.font=t.font||"bold 20pt Arial",t.fill=t.fill||"black",t.align=t.align||"left",t.stroke=t.stroke||"black",t.strokeThickness=t.strokeThickness||0,t.wordWrap=t.wordWrap||!1,t.wordWrapWidth=t.wordWrapWidth||100,t.dropShadow=t.dropShadow||!1,t.dropShadowColor=t.dropShadowColor||"#000000",t.dropShadowAngle=void 0!==t.dropShadowAngle?t.dropShadowAngle:Math.PI/6,t.dropShadowDistance=void 0!==t.dropShadowDistance?t.dropShadowDistance:5,t.dropShadowBlur=void 0!==t.dropShadowBlur?t.dropShadowBlur:0,t.padding=t.padding||0,t.textBaseline=t.textBaseline||"alphabetic",t.lineJoin=t.lineJoin||"miter",t.miterLimit=t.miterLimit||10,this._style=t,this.dirty=!0}},text:{get:function(){return this._text},set:function(t){t=t.toString()||" ",this._text!==t&&(this._text=t,this.dirty=!0)}}}),i.prototype.updateText=function(){var t=this._style;this.context.font=t.font;for(var e=t.wordWrap?this.wordWrap(this._text):this._text,r=e.split(/(?:\r\n|\r|\n)/),i=new Array(r.length),n=0,o=this.determineFontProperties(t.font),s=0;s0?(this.context.shadowColor=t.dropShadowColor,this.context.shadowBlur=t.dropShadowBlur):this.context.fillStyle=t.dropShadowColor;var d=Math.cos(t.dropShadowAngle)*t.dropShadowDistance,f=Math.sin(t.dropShadowAngle)*t.dropShadowDistance;for(s=0;sh;h++){for(u=0;p>u;u+=4)if(255!==l[d+u]){f=!0;break}if(f)break;d+=p}for(e.ascent=s-h,d=c-p,f=!1,h=a;h>s;h--){for(u=0;p>u;u+=4)if(255!==l[d+u]){f=!0;break}if(f)break;d-=p}e.descent=h-s,e.fontSize=e.ascent+e.descent,i.fontPropertiesCache[t]=e}return e},i.prototype.wordWrap=function(t){for(var e="",r=t.split("\n"),i=this._style.wordWrapWidth,n=0;no?(a>0&&(e+="\n"),e+=s[a],o=i-h):(o-=u,e+=" "+s[a])}n0&&e>0,this.width=this._frame.width=this.crop.width=t,this.height=this._frame.height=this.crop.height=e,r&&(this.baseTexture.width=this.width,this.baseTexture.height=this.height),this.valid&&(this.textureBuffer.resize(this.width,this.height),this.filterManager&&this.filterManager.resize(this.width,this.height)))},i.prototype.clear=function(){this.valid&&(this.renderer.type===l.RENDERER_TYPE.WEBGL&&this.renderer.gl.bindFramebuffer(this.renderer.gl.FRAMEBUFFER,this.textureBuffer.frameBuffer),this.textureBuffer.clear())},i.prototype.renderWebGL=function(t,e,r,i){if(this.valid){if(i=void 0!==i?i:!0,this.textureBuffer.transform=e,this.textureBuffer.activate(),t.worldAlpha=1,i){t.worldTransform.identity(),t.currentBounds=null;var n,o,s=t.children;for(n=0,o=s.length;o>n;++n)s[n].updateTransform()}var a=this.renderer.filterManager;this.renderer.filterManager=this.filterManager,this.renderer.renderDisplayObject(t,this.textureBuffer,r),this.renderer.filterManager=a}},i.prototype.renderCanvas=function(t,e,r,i){if(this.valid){i=!!i;var n=c;n.identity(),e&&n.append(e);var o=t.worldTransform;t.worldTransform=n,t.worldAlpha=1;var s,a,h=t.children;for(s=0,a=h.length;a>s;++s)h[s].updateTransform();r&&this.textureBuffer.clear();var u=this.textureBuffer.context,l=this.renderer.resolution;this.renderer.resolution=this.resolution,this.renderer.renderDisplayObject(t,u),this.renderer.resolution=l,t.worldTransform===n&&(t.worldTransform=o)}},i.prototype.destroy=function(){o.prototype.destroy.call(this,!0),this.textureBuffer.destroy(),this.filterManager&&this.filterManager.destroy(),this.renderer=null},i.prototype.getImage=function(){var t=new Image;return t.src=this.getBase64(),t},i.prototype.getBase64=function(){return this.getCanvas().toDataURL()},i.prototype.getCanvas=function(){if(this.renderer.type===l.RENDERER_TYPE.WEBGL){var t=this.renderer.gl,e=this.textureBuffer.size.width,r=this.textureBuffer.size.height,i=new Uint8Array(4*e*r);t.bindFramebuffer(t.FRAMEBUFFER,this.textureBuffer.frameBuffer),t.readPixels(0,0,e,r,t.RGBA,t.UNSIGNED_BYTE,i),t.bindFramebuffer(t.FRAMEBUFFER,null);var n=new h(e,r),o=n.context.getImageData(0,0,e,r);return o.data.set(i),n.context.putImageData(o,0,0),n.canvas}return this.textureBuffer.canvas},i.prototype.getPixels=function(){var t,e;if(this.renderer.type===l.RENDERER_TYPE.WEBGL){var r=this.renderer.gl;t=this.textureBuffer.size.width,e=this.textureBuffer.size.height;var i=new Uint8Array(4*t*e);return r.bindFramebuffer(r.FRAMEBUFFER,this.textureBuffer.frameBuffer),r.readPixels(0,0,t,e,r.RGBA,r.UNSIGNED_BYTE,i),r.bindFramebuffer(r.FRAMEBUFFER,null),i}return t=this.textureBuffer.canvas.width,e=this.textureBuffer.canvas.height,this.textureBuffer.canvas.getContext("2d").getImageData(0,0,t,e).data},i.prototype.getPixel=function(t,e){if(this.renderer.type===l.RENDERER_TYPE.WEBGL){var r=this.renderer.gl,i=new Uint8Array(4);return r.bindFramebuffer(r.FRAMEBUFFER,this.textureBuffer.frameBuffer),r.readPixels(t,e,1,1,r.RGBA,r.UNSIGNED_BYTE,i),r.bindFramebuffer(r.FRAMEBUFFER,null),i}return this.textureBuffer.canvas.getContext("2d").getImageData(t,e,1,1).data}},{"../const":38,"../math":48,"../renderers/canvas/utils/CanvasBuffer":60,"../renderers/webgl/managers/FilterManager":70,"../renderers/webgl/utils/RenderTarget":82,"./BaseTexture":90,"./Texture":92}],92:[function(t,e,r){function i(t,e,r,n,o){a.call(this),this.noFrame=!1,e||(this.noFrame=!0,e=new h.Rectangle(0,0,1,1)),t instanceof i&&(t=t.baseTexture),this.baseTexture=t,this._frame=e,this.trim=n,this.valid=!1,this.requiresUpdate=!1,this._uvs=null,this.width=0,this.height=0,this.crop=r||e,this.rotate=!!o,t.hasLoaded?(this.noFrame&&(e=new h.Rectangle(0,0,t.width,t.height),t.on("update",this.onBaseTextureUpdated,this)),this.frame=e):t.once("loaded",this.onBaseTextureLoaded,this)}var n=t("./BaseTexture"),o=t("./VideoBaseTexture"),s=t("./TextureUvs"),a=t("eventemitter3"),h=t("../math"),u=t("../utils");i.prototype=Object.create(a.prototype),i.prototype.constructor=i,e.exports=i,Object.defineProperties(i.prototype,{frame:{get:function(){return this._frame},set:function(t){if(this._frame=t,this.noFrame=!1,this.width=t.width,this.height=t.height,!this.trim&&!this.rotate&&(t.x+t.width>this.baseTexture.width||t.y+t.height>this.baseTexture.height))throw new Error("Texture Error: frame does not fit inside the base Texture dimensions "+this);this.valid=t&&t.width&&t.height&&this.baseTexture.hasLoaded,this.trim?(this.width=this.trim.width,this.height=this.trim.height,this._frame.width=this.trim.width,this._frame.height=this.trim.height):this.crop=t,this.valid&&this._updateUvs()}}}),i.prototype.update=function(){this.baseTexture.update()},i.prototype.onBaseTextureLoaded=function(t){this.noFrame?this.frame=new h.Rectangle(0,0,t.width,t.height):this.frame=this._frame,this.emit("update",this)},i.prototype.onBaseTextureUpdated=function(t){this._frame.width=t.width,this._frame.height=t.height,this.emit("update",this)},i.prototype.destroy=function(t){this.baseTexture&&(t&&this.baseTexture.destroy(),this.baseTexture.off("update",this.onBaseTextureUpdated,this),this.baseTexture.off("loaded",this.onBaseTextureLoaded,this),this.baseTexture=null),this._frame=null,this._uvs=null,this.trim=null,this.crop=null,this.valid=!1,this.off("dispose",this.dispose,this),this.off("update",this.update,this)},i.prototype.clone=function(){return new i(this.baseTexture,this.frame,this.crop,this.trim,this.rotate)},i.prototype._updateUvs=function(){this._uvs||(this._uvs=new s),this._uvs.set(this.crop,this.baseTexture,this.rotate)},i.fromImage=function(t,e,r){var o=u.TextureCache[t];return o||(o=new i(n.fromImage(t,e,r)),u.TextureCache[t]=o),o},i.fromFrame=function(t){var e=u.TextureCache[t];if(!e)throw new Error('The frameId "'+t+'" does not exist in the texture cache');return e},i.fromCanvas=function(t,e){return new i(n.fromCanvas(t,e))},i.fromVideo=function(t,e){return"string"==typeof t?i.fromVideoUrl(t,e):new i(o.fromVideo(t,e))},i.fromVideoUrl=function(t,e){return new i(o.fromUrl(t,e))},i.addTextureToCache=function(t,e){u.TextureCache[e]=t},i.removeTextureFromCache=function(t){var e=u.TextureCache[t];return delete u.TextureCache[t],delete u.BaseTextureCache[t],e},i.EMPTY=new i(new n)},{"../math":48,"../utils":98,"./BaseTexture":90,"./TextureUvs":93,"./VideoBaseTexture":94,eventemitter3:25}],93:[function(t,e,r){function i(){this.x0=0,this.y0=0,this.x1=1,this.y1=0,this.x2=1,this.y2=1,this.x3=0,this.y3=1,this.xy0_uint32=0,this.xy1_uint32=0,this.xy2_uint32=0,this.xy3_uint32=0,this.uvs_uint32=new Uint32Array(4)}e.exports=i,i.prototype.set=function(t,e,r){var i=e.width,n=e.height;r?(this.x0=(t.x+t.height)/i,this.y0=t.y/n,this.x1=(t.x+t.height)/i,this.y1=(t.y+t.width)/n,this.x2=t.x/i,this.y2=(t.y+t.width)/n,this.x3=t.x/i,this.y3=t.y/n):(this.x0=t.x/i,this.y0=t.y/n,this.x1=(t.x+t.width)/i,this.y1=t.y/n,this.x2=(t.x+t.width)/i,this.y2=(t.y+t.height)/n,this.x3=t.x/i,this.y3=(t.y+t.height)/n),this.uvs_uint32[0]=(65535*this.y0&65535)<<16|65535*this.x0&65535,this.uvs_uint32[1]=(65535*this.y1&65535)<<16|65535*this.x1&65535,this.uvs_uint32[2]=(65535*this.y2&65535)<<16|65535*this.x2&65535,this.uvs_uint32[3]=(65535*this.y3&65535)<<16|65535*this.x3&65535}},{}],94:[function(t,e,r){function i(t,e){if(!t)throw new Error("No video source element specified.");(t.readyState===t.HAVE_ENOUGH_DATA||t.readyState===t.HAVE_FUTURE_DATA)&&t.width&&t.height&&(t.complete=!0),o.call(this,t,e),this.autoUpdate=!1,this._onUpdate=this._onUpdate.bind(this),this._onCanPlay=this._onCanPlay.bind(this),t.complete||(t.addEventListener("canplay",this._onCanPlay),t.addEventListener("canplaythrough",this._onCanPlay),t.addEventListener("play",this._onPlayStart.bind(this)),t.addEventListener("pause",this._onPlayStop.bind(this))),this.__loaded=!1}function n(t,e){e||(e="video/"+t.substr(t.lastIndexOf(".")+1));var r=document.createElement("source");return r.src=t,r.type=e,r}var o=t("./BaseTexture"),s=t("../utils");i.prototype=Object.create(o.prototype),i.prototype.constructor=i,e.exports=i,i.prototype._onUpdate=function(){this.autoUpdate&&(window.requestAnimationFrame(this._onUpdate),this.update())},i.prototype._onPlayStart=function(){this.autoUpdate||(window.requestAnimationFrame(this._onUpdate),this.autoUpdate=!0)},i.prototype._onPlayStop=function(){this.autoUpdate=!1},i.prototype._onCanPlay=function(){this.hasLoaded=!0,this.source&&(this.source.removeEventListener("canplay",this._onCanPlay),this.source.removeEventListener("canplaythrough",this._onCanPlay),this.width=this.source.videoWidth,this.height=this.source.videoHeight,this.source.play(),this.__loaded||(this.__loaded=!0,this.emit("loaded",this)))},i.prototype.destroy=function(){this.source&&this.source._pixiId&&(delete s.BaseTextureCache[this.source._pixiId],delete this.source._pixiId),o.prototype.destroy.call(this)},i.fromVideo=function(t,e){t._pixiId||(t._pixiId="video_"+s.uid());var r=s.BaseTextureCache[t._pixiId];return r||(r=new i(t,e),s.BaseTextureCache[t._pixiId]=r),r},i.fromUrl=function(t,e){var r=document.createElement("video");if(Array.isArray(t))for(var o=0;othis._maxElapsedMS&&(e=this._maxElapsedMS),this.deltaTime=e*n.TARGET_FPMS*this.speed,this._emitter.emit(s,this.deltaTime),this.lastTime=t},e.exports=i},{"../const":38,eventemitter3:25}],96:[function(t,e,r){var i=t("./Ticker"),n=new i;n.autoStart=!0,e.exports={shared:n,Ticker:i}},{"./Ticker":95}],97:[function(t,e,r){var i=function(t){for(var e=6*t,r=new Uint16Array(e),i=0,n=0;e>i;i+=6,n+=4)r[i+0]=n+0,r[i+1]=n+1,r[i+2]=n+2,r[i+3]=n+0,r[i+4]=n+2,r[i+5]=n+3;return r};e.exports=i},{}],98:[function(t,e,r){var i=t("../const"),n=e.exports={_uid:0,_saidHello:!1,EventEmitter:t("eventemitter3"),pluginTarget:t("./pluginTarget"),async:t("async"),uid:function(){return++n._uid},hex2rgb:function(t,e){return e=e||[],e[0]=(t>>16&255)/255,e[1]=(t>>8&255)/255,e[2]=(255&t)/255,e},hex2string:function(t){return t=t.toString(16),t="000000".substr(0,6-t.length)+t,"#"+t},rgb2hex:function(t){return(255*t[0]<<16)+(255*t[1]<<8)+255*t[2]},canUseNewCanvasBlendModes:function(){if("undefined"==typeof document)return!1;var t="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAQAAAABAQMAAADD8p2OAAAAA1BMVEX/",e="AAAACklEQVQI12NgAAAAAgAB4iG8MwAAAABJRU5ErkJggg==",r=new Image;r.src=t+"AP804Oa6"+e;var i=new Image;i.src=t+"/wCKxvRF"+e;var n=document.createElement("canvas");n.width=6,n.height=1;var o=n.getContext("2d");o.globalCompositeOperation="multiply",o.drawImage(r,0,0),o.drawImage(i,2,0);var s=o.getImageData(2,0,1,1).data;return 255===s[0]&&0===s[1]&&0===s[2]},getNextPowerOfTwo:function(t){if(t>0&&0===(t&t-1))return t;for(var e=1;t>e;)e<<=1;return e},isPowerOfTwo:function(t,e){return t>0&&0===(t&t-1)&&e>0&&0===(e&e-1)},getResolutionOfUrl:function(t){var e=i.RETINA_PREFIX.exec(t);return e?parseFloat(e[1]):1},sayHello:function(t){if(!n._saidHello){if(navigator.userAgent.toLowerCase().indexOf("chrome")>-1){var e=["\n %c %c %c Pixi.js "+i.VERSION+" - ✰ "+t+" ✰ %c %c http://www.pixijs.com/ %c %c ♥%c♥%c♥ \n\n","background: #ff66a5; padding:5px 0;","background: #ff66a5; padding:5px 0;","color: #ff66a5; background: #030307; padding:5px 0;","background: #ff66a5; padding:5px 0;","background: #ffc3dc; padding:5px 0;","background: #ff66a5; padding:5px 0;","color: #ff2424; background: #fff; padding:5px 0;","color: #ff2424; background: #fff; padding:5px 0;","color: #ff2424; background: #fff; padding:5px 0;"];window.console.log.apply(console,e)}else window.console&&window.console.log("Pixi.js "+i.VERSION+" - "+t+" - http://www.pixijs.com/");n._saidHello=!0}},isWebGLSupported:function(){var t={stencil:!0};try{if(!window.WebGLRenderingContext)return!1;var e=document.createElement("canvas"),r=e.getContext("webgl",t)||e.getContext("experimental-webgl",t);return!(!r||!r.getContextAttributes().stencil)}catch(i){return!1}},sign:function(t){return t?0>t?-1:1:0},removeItems:function(t,e,r){var i=t.length;if(!(e>=i||0===r)){r=e+r>i?i-e:r;for(var n=e,o=i-r;o>n;++n)t[n]=t[n+r];t.length=o}},TextureCache:{},BaseTextureCache:{}}},{"../const":38,"./pluginTarget":99,async:16,eventemitter3:25}],99:[function(t,e,r){function i(t){t.__plugins={},t.registerPlugin=function(e,r){t.__plugins[e]=r},t.prototype.initPlugins=function(){this.plugins=this.plugins||{};for(var e in t.__plugins)this.plugins[e]=new t.__plugins[e](this)},t.prototype.destroyPlugins=function(){for(var t in this.plugins)this.plugins[t].destroy(),this.plugins[t]=null;this.plugins=null}}e.exports={mixin:function(t){i(t)}}},{}],100:[function(t,e,r){var i=t("./core"),n=t("./mesh"),o=t("./extras"),s=t("./filters");i.SpriteBatch=function(){throw new ReferenceError("SpriteBatch does not exist any more, please use the new ParticleContainer instead.")},i.AssetLoader=function(){throw new ReferenceError("The loader system was overhauled in pixi v3, please see the new PIXI.loaders.Loader class.")},Object.defineProperties(i,{Stage:{get:function(){return console.warn("You do not need to use a PIXI Stage any more, you can simply render any container."),i.Container}},DisplayObjectContainer:{get:function(){return console.warn("DisplayObjectContainer has been shortened to Container, please use Container from now on."),i.Container}},Strip:{get:function(){return console.warn("The Strip class has been renamed to Mesh and moved to mesh.Mesh, please use mesh.Mesh from now on."),n.Mesh}},Rope:{get:function(){return console.warn("The Rope class has been moved to mesh.Rope, please use mesh.Rope from now on."),n.Rope}},MovieClip:{get:function(){return console.warn("The MovieClip class has been moved to extras.MovieClip, please use extras.MovieClip from now on."),o.MovieClip}},TilingSprite:{get:function(){return console.warn("The TilingSprite class has been moved to extras.TilingSprite, please use extras.TilingSprite from now on."),o.TilingSprite}},BitmapText:{get:function(){return console.warn("The BitmapText class has been moved to extras.BitmapText, please use extras.BitmapText from now on."),o.BitmapText}},blendModes:{get:function(){return console.warn("The blendModes has been moved to BLEND_MODES, please use BLEND_MODES from now on."),i.BLEND_MODES}},scaleModes:{get:function(){return console.warn("The scaleModes has been moved to SCALE_MODES, please use SCALE_MODES from now on."),i.SCALE_MODES}},BaseTextureCache:{get:function(){return console.warn("The BaseTextureCache class has been moved to utils.BaseTextureCache, please use utils.BaseTextureCache from now on."),i.utils.BaseTextureCache}},TextureCache:{get:function(){return console.warn("The TextureCache class has been moved to utils.TextureCache, please use utils.TextureCache from now on."),i.utils.TextureCache}},math:{get:function(){return console.warn("The math namespace is deprecated, please access members already accessible on PIXI."),i}}}),i.Sprite.prototype.setTexture=function(t){this.texture=t,console.warn("setTexture is now deprecated, please use the texture property, e.g : sprite.texture = texture;")},o.BitmapText.prototype.setText=function(t){this.text=t,console.warn("setText is now deprecated, please use the text property, e.g : myBitmapText.text = 'my text';")},i.Text.prototype.setText=function(t){this.text=t,console.warn("setText is now deprecated, please use the text property, e.g : myText.text = 'my text';")},i.Text.prototype.setStyle=function(t){this.style=t,console.warn("setStyle is now deprecated, please use the style property, e.g : myText.style = style;")},i.Texture.prototype.setFrame=function(t){this.frame=t,console.warn("setFrame is now deprecated, please use the frame property, e.g : myTexture.frame = frame;")},Object.defineProperties(s,{AbstractFilter:{get:function(){return console.warn("filters.AbstractFilter is an undocumented alias, please use AbstractFilter from now on."),i.AbstractFilter}},FXAAFilter:{get:function(){return console.warn("filters.FXAAFilter is an undocumented alias, please use FXAAFilter from now on."),i.FXAAFilter}},SpriteMaskFilter:{get:function(){return console.warn("filters.SpriteMaskFilter is an undocumented alias, please use SpriteMaskFilter from now on."),i.SpriteMaskFilter}}}),i.utils.uuid=function(){return console.warn("utils.uuid() is deprecated, please use utils.uid() from now on."),i.utils.uid()}},{"./core":45,"./extras":107,"./filters":124,"./mesh":149}],101:[function(t,e,r){function i(t,e){n.Container.call(this),e=e||{},this.textWidth=0,this.textHeight=0,this._glyphs=[],this._font={tint:void 0!==e.tint?e.tint:16777215,align:e.align||"left",name:null,size:0},this.font=e.font,this._text=t,this.maxWidth=0,this.maxLineHeight=0,this.dirty=!1,this.updateText()}var n=t("../core");i.prototype=Object.create(n.Container.prototype),i.prototype.constructor=i,e.exports=i,Object.defineProperties(i.prototype,{tint:{get:function(){return this._font.tint},set:function(t){this._font.tint="number"==typeof t&&t>=0?t:16777215,this.dirty=!0}},align:{get:function(){return this._font.align},set:function(t){this._font.align=t||"left",this.dirty=!0}},font:{get:function(){return this._font},set:function(t){t&&("string"==typeof t?(t=t.split(" "),this._font.name=1===t.length?t[0]:t.slice(1).join(" "),this._font.size=t.length>=2?parseInt(t[0],10):i.fonts[this._font.name].size):(this._font.name=t.name,this._font.size="number"==typeof t.size?t.size:parseInt(t.size,10)),this.dirty=!0)}},text:{get:function(){return this._text},set:function(t){t=t.toString()||" ",this._text!==t&&(this._text=t,this.dirty=!0)}}}),i.prototype.updateText=function(){for(var t=i.fonts[this._font.name],e=new n.Point,r=null,o=[],s=0,a=0,h=[],u=0,l=this._font.size/t.size,c=-1,p=0,d=0;d0&&e.x*l>this.maxWidth)n.utils.removeItems(o,c,d-c),d=c,c=-1,h.push(s),a=Math.max(a,s),u++,e.x=0,e.y+=t.lineHeight,r=null;else{var v=t.chars[f];v&&(r&&v.kerning[r]&&(e.x+=v.kerning[r]),o.push({texture:v.texture,line:u,charCode:f,position:new n.Point(e.x+v.xOffset,e.y+v.yOffset)}),s=e.x+(v.texture.width+v.xOffset),e.x+=v.xAdvance,p=Math.max(p,v.yOffset+v.texture.height),r=f)}}h.push(s),a=Math.max(a,s);var g=[];for(d=0;u>=d;d++){var m=0;"right"===this._font.align?m=a-h[d]:"center"===this._font.align&&(m=(a-h[d])/2),g.push(m)}var y=o.length,x=this.tint;for(d=0;y>d;d++){var b=this._glyphs[d];b?b.texture=o[d].texture:(b=new n.Sprite(o[d].texture),this._glyphs.push(b)),b.position.x=(o[d].position.x+g[o[d].line])*l,b.position.y=o[d].position.y*l,b.scale.x=b.scale.y=l,b.tint=x,b.parent||this.addChild(b)}for(d=y;dt&&(t+=this._textures.length),t}}}),i.prototype.stop=function(){this.playing&&(this.playing=!1,n.ticker.shared.remove(this.update,this))},i.prototype.play=function(){this.playing||(this.playing=!0,n.ticker.shared.add(this.update,this))},i.prototype.gotoAndStop=function(t){this.stop(),this._currentTime=t,this._texture=this._textures[this.currentFrame]},i.prototype.gotoAndPlay=function(t){this._currentTime=t,this.play()},i.prototype.update=function(t){var e=this.animationSpeed*t;if(null!==this._durations){var r=this._currentTime%1*this._durations[this.currentFrame];for(r+=e/60*1e3;0>r;)this._currentTime--,r+=this._durations[this.currentFrame];var i=Math.sign(this.animationSpeed*t);for(this._currentTime=Math.floor(this._currentTime);r>=this._durations[this.currentFrame];)r-=this._durations[this.currentFrame]*i,this._currentTime+=i;this._currentTime+=r/this._durations[this.currentFrame]}else this._currentTime+=e;this._currentTime<0&&!this.loop?(this.gotoAndStop(0),this.onComplete&&this.onComplete()):this._currentTime>=this._textures.length&&!this.loop?(this.gotoAndStop(this._textures.length-1),this.onComplete&&this.onComplete()):this._texture=this._textures[this.currentFrame]},i.prototype.destroy=function(){this.stop(),n.Sprite.prototype.destroy.call(this)},i.fromFrames=function(t){for(var e=[],r=0;rx?x:t,t=t>_?_:t,t=t>E?E:t,r=y,r=r>b?b:r,r=r>T?T:r,r=r>S?S:r,e=m,e=x>e?x:e,e=_>e?_:e,e=E>e?E:e,i=y,i=b>i?b:i,i=T>i?T:i,i=S>i?S:i;var w=this._bounds;return w.x=t,w.width=e-t,w.y=r,w.height=i-r,this._currentBounds=w,w},i.prototype.containsPoint=function(t){this.worldTransform.applyInverse(t,o);var e,r=this._width,i=this._height,n=-r*this.anchor.x;return o.x>n&&o.xe&&o.y 0.2) n = 65600.0; // :\n if (gray > 0.3) n = 332772.0; // *\n if (gray > 0.4) n = 15255086.0; // o\n if (gray > 0.5) n = 23385164.0; // &\n if (gray > 0.6) n = 15252014.0; // 8\n if (gray > 0.7) n = 13199452.0; // @\n if (gray > 0.8) n = 11512810.0; // #\n\n vec2 p = mod( uv / ( pixelSize * 0.5 ), 2.0) - vec2(1.0);\n col = col * character(n, p);\n\n gl_FragColor = vec4(col, 1.0);\n}\n",{dimensions:{type:"4fv",value:new Float32Array([0,0,0,0])},pixelSize:{type:"1f",value:8}})}var n=t("../../core");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i,Object.defineProperties(i.prototype,{size:{get:function(){return this.uniforms.pixelSize.value},set:function(t){this.uniforms.pixelSize.value=t}}})},{"../../core":45}],109:[function(t,e,r){function i(){n.AbstractFilter.call(this),this.blurXFilter=new o,this.blurYFilter=new s,this.defaultFilter=new n.AbstractFilter}var n=t("../../core"),o=t("../blur/BlurXFilter"),s=t("../blur/BlurYFilter");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.applyFilter=function(t,e,r){var i=t.filterManager.getRenderTarget(!0);this.defaultFilter.applyFilter(t,e,r),this.blurXFilter.applyFilter(t,e,i),t.blendModeManager.setBlendMode(n.BLEND_MODES.SCREEN),this.blurYFilter.applyFilter(t,i,r),t.blendModeManager.setBlendMode(n.BLEND_MODES.NORMAL),t.filterManager.returnRenderTarget(i)},Object.defineProperties(i.prototype,{blur:{get:function(){return this.blurXFilter.blur},set:function(t){this.blurXFilter.blur=this.blurYFilter.blur=t}},blurX:{get:function(){return this.blurXFilter.blur},set:function(t){this.blurXFilter.blur=t}},blurY:{get:function(){return this.blurYFilter.blur},set:function(t){this.blurYFilter.blur=t}}})},{"../../core":45,"../blur/BlurXFilter":112,"../blur/BlurYFilter":113}],110:[function(t,e,r){function i(t,e){n.AbstractFilter.call(this,"attribute vec2 aVertexPosition;\nattribute vec2 aTextureCoord;\nattribute vec4 aColor;\n\nuniform float strength;\nuniform float dirX;\nuniform float dirY;\nuniform mat3 projectionMatrix;\n\nvarying vec2 vTextureCoord;\nvarying vec4 vColor;\nvarying vec2 vBlurTexCoords[3];\n\nvoid main(void)\n{\n gl_Position = vec4((projectionMatrix * vec3((aVertexPosition), 1.0)).xy, 0.0, 1.0);\n vTextureCoord = aTextureCoord;\n\n vBlurTexCoords[0] = aTextureCoord + vec2( (0.004 * strength) * dirX, (0.004 * strength) * dirY );\n vBlurTexCoords[1] = aTextureCoord + vec2( (0.008 * strength) * dirX, (0.008 * strength) * dirY );\n vBlurTexCoords[2] = aTextureCoord + vec2( (0.012 * strength) * dirX, (0.012 * strength) * dirY );\n\n vColor = vec4(aColor.rgb * aColor.a, aColor.a);\n}\n","precision lowp float;\n\nvarying vec2 vTextureCoord;\nvarying vec2 vBlurTexCoords[3];\nvarying vec4 vColor;\n\nuniform sampler2D uSampler;\n\nvoid main(void)\n{\n gl_FragColor = vec4(0.0);\n\n gl_FragColor += texture2D(uSampler, vTextureCoord ) * 0.3989422804014327;\n gl_FragColor += texture2D(uSampler, vBlurTexCoords[ 0]) * 0.2419707245191454;\n gl_FragColor += texture2D(uSampler, vBlurTexCoords[ 1]) * 0.05399096651318985;\n gl_FragColor += texture2D(uSampler, vBlurTexCoords[ 2]) * 0.004431848411938341;\n}\n",{strength:{type:"1f",value:1},dirX:{type:"1f",value:t||0},dirY:{type:"1f",value:e||0}}),this.defaultFilter=new n.AbstractFilter,this.passes=1,this.dirX=t||0,this.dirY=e||0,this.strength=4}var n=t("../../core");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.applyFilter=function(t,e,r,i){var n=this.getShader(t);if(this.uniforms.strength.value=this.strength/4/this.passes*(e.frame.width/e.size.width),1===this.passes)t.filterManager.applyFilter(n,e,r,i);else{var o=t.filterManager.getRenderTarget(!0);t.filterManager.applyFilter(n,e,o,i);for(var s=0;s>16&255)/255,s=(r>>8&255)/255,a=(255&r)/255,h=(i>>16&255)/255,u=(i>>8&255)/255,l=(255&i)/255,c=[.3,.59,.11,0,0,o,s,a,t,0,h,u,l,e,0,o-h,s-u,a-l,0,0];this._loadMatrix(c,n)},i.prototype.night=function(t,e){t=t||.1;var r=[-2*t,-t,0,0,0,-t,0,t,0,0,0,t,2*t,0,0,0,0,0,1,0];this._loadMatrix(r,e)},i.prototype.predator=function(t,e){var r=[11.224130630493164*t,-4.794486999511719*t,-2.8746118545532227*t,0*t,.40342438220977783*t,-3.6330697536468506*t,9.193157196044922*t,-2.951810836791992*t,0*t,-1.316135048866272*t,-3.2184197902679443*t,-4.2375030517578125*t,7.476448059082031*t,0*t,.8044459223747253*t,0,0,0,1,0];this._loadMatrix(r,e)},i.prototype.lsd=function(t){var e=[2,-.4,.5,0,0,-.5,2,-.4,0,0,-.4,-.5,3,0,0,0,0,0,1,0];this._loadMatrix(e,t)},i.prototype.reset=function(){var t=[1,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,1,0];this._loadMatrix(t,!1)},Object.defineProperties(i.prototype,{matrix:{get:function(){return this.uniforms.m.value},set:function(t){this.uniforms.m.value=t}}})},{"../../core":45}],116:[function(t,e,r){function i(){n.AbstractFilter.call(this,null,"precision mediump float;\n\nvarying vec2 vTextureCoord;\n\nuniform sampler2D uSampler;\nuniform float step;\n\nvoid main(void)\n{\n vec4 color = texture2D(uSampler, vTextureCoord);\n\n color = floor(color * step) / step;\n\n gl_FragColor = color;\n}\n",{step:{type:"1f",value:5}})}var n=t("../../core");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i,Object.defineProperties(i.prototype,{step:{get:function(){return this.uniforms.step.value},set:function(t){this.uniforms.step.value=t}}})},{"../../core":45}],117:[function(t,e,r){function i(t,e,r){n.AbstractFilter.call(this,null,"precision mediump float;\n\nvarying mediump vec2 vTextureCoord;\n\nuniform sampler2D uSampler;\nuniform vec2 texelSize;\nuniform float matrix[9];\n\nvoid main(void)\n{\n vec4 c11 = texture2D(uSampler, vTextureCoord - texelSize); // top left\n vec4 c12 = texture2D(uSampler, vec2(vTextureCoord.x, vTextureCoord.y - texelSize.y)); // top center\n vec4 c13 = texture2D(uSampler, vec2(vTextureCoord.x + texelSize.x, vTextureCoord.y - texelSize.y)); // top right\n\n vec4 c21 = texture2D(uSampler, vec2(vTextureCoord.x - texelSize.x, vTextureCoord.y)); // mid left\n vec4 c22 = texture2D(uSampler, vTextureCoord); // mid center\n vec4 c23 = texture2D(uSampler, vec2(vTextureCoord.x + texelSize.x, vTextureCoord.y)); // mid right\n\n vec4 c31 = texture2D(uSampler, vec2(vTextureCoord.x - texelSize.x, vTextureCoord.y + texelSize.y)); // bottom left\n vec4 c32 = texture2D(uSampler, vec2(vTextureCoord.x, vTextureCoord.y + texelSize.y)); // bottom center\n vec4 c33 = texture2D(uSampler, vTextureCoord + texelSize); // bottom right\n\n gl_FragColor =\n c11 * matrix[0] + c12 * matrix[1] + c13 * matrix[2] +\n c21 * matrix[3] + c22 * matrix[4] + c23 * matrix[5] +\n c31 * matrix[6] + c32 * matrix[7] + c33 * matrix[8];\n\n gl_FragColor.a = c22.a;\n}\n",{matrix:{type:"1fv",value:new Float32Array(t)},texelSize:{type:"v2",value:{x:1/e,y:1/r}}})}var n=t("../../core");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i,Object.defineProperties(i.prototype,{matrix:{get:function(){return this.uniforms.matrix.value},set:function(t){this.uniforms.matrix.value=new Float32Array(t)}},width:{get:function(){return 1/this.uniforms.texelSize.value.x},set:function(t){this.uniforms.texelSize.value.x=1/t}},height:{get:function(){return 1/this.uniforms.texelSize.value.y},set:function(t){this.uniforms.texelSize.value.y=1/t}}})},{"../../core":45 -}],118:[function(t,e,r){function i(){n.AbstractFilter.call(this,null,"precision mediump float;\n\nvarying vec2 vTextureCoord;\n\nuniform sampler2D uSampler;\n\nvoid main(void)\n{\n float lum = length(texture2D(uSampler, vTextureCoord.xy).rgb);\n\n gl_FragColor = vec4(1.0, 1.0, 1.0, 1.0);\n\n if (lum < 1.00)\n {\n if (mod(gl_FragCoord.x + gl_FragCoord.y, 10.0) == 0.0)\n {\n gl_FragColor = vec4(0.0, 0.0, 0.0, 1.0);\n }\n }\n\n if (lum < 0.75)\n {\n if (mod(gl_FragCoord.x - gl_FragCoord.y, 10.0) == 0.0)\n {\n gl_FragColor = vec4(0.0, 0.0, 0.0, 1.0);\n }\n }\n\n if (lum < 0.50)\n {\n if (mod(gl_FragCoord.x + gl_FragCoord.y - 5.0, 10.0) == 0.0)\n {\n gl_FragColor = vec4(0.0, 0.0, 0.0, 1.0);\n }\n }\n\n if (lum < 0.3)\n {\n if (mod(gl_FragCoord.x - gl_FragCoord.y - 5.0, 10.0) == 0.0)\n {\n gl_FragColor = vec4(0.0, 0.0, 0.0, 1.0);\n }\n }\n}\n")}var n=t("../../core");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i},{"../../core":45}],119:[function(t,e,r){function i(t,e){var r=new n.Matrix;t.renderable=!1,n.AbstractFilter.call(this,"attribute vec2 aVertexPosition;\nattribute vec2 aTextureCoord;\nattribute vec4 aColor;\n\nuniform mat3 projectionMatrix;\nuniform mat3 otherMatrix;\n\nvarying vec2 vMapCoord;\nvarying vec2 vTextureCoord;\nvarying vec4 vColor;\n\nvoid main(void)\n{\n gl_Position = vec4((projectionMatrix * vec3(aVertexPosition, 1.0)).xy, 0.0, 1.0);\n vTextureCoord = aTextureCoord;\n vMapCoord = ( otherMatrix * vec3( aTextureCoord, 1.0) ).xy;\n vColor = vec4(aColor.rgb * aColor.a, aColor.a);\n}\n","precision mediump float;\n\nvarying vec2 vMapCoord;\nvarying vec2 vTextureCoord;\nvarying vec4 vColor;\n\nuniform vec2 scale;\n\nuniform sampler2D uSampler;\nuniform sampler2D mapSampler;\n\nvoid main(void)\n{\n vec4 map = texture2D(mapSampler, vMapCoord);\n\n map -= 0.5;\n map.xy *= scale;\n\n gl_FragColor = texture2D(uSampler, vec2(vTextureCoord.x + map.x, vTextureCoord.y + map.y));\n}\n",{mapSampler:{type:"sampler2D",value:t.texture},otherMatrix:{type:"mat3",value:r.toArray(!0)},scale:{type:"v2",value:{x:1,y:1}}}),this.maskSprite=t,this.maskMatrix=r,(null===e||void 0===e)&&(e=20),this.scale=new n.Point(e,e)}var n=t("../../core");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.applyFilter=function(t,e,r){var i=t.filterManager;i.calculateMappedMatrix(e.frame,this.maskSprite,this.maskMatrix),this.uniforms.otherMatrix.value=this.maskMatrix.toArray(!0),this.uniforms.scale.value.x=this.scale.x*(1/e.frame.width),this.uniforms.scale.value.y=this.scale.y*(1/e.frame.height);var n=this.getShader(t);i.applyFilter(n,e,r)},Object.defineProperties(i.prototype,{map:{get:function(){return this.uniforms.mapSampler.value},set:function(t){this.uniforms.mapSampler.value=t}}})},{"../../core":45}],120:[function(t,e,r){function i(){n.AbstractFilter.call(this,null,"precision mediump float;\n\nvarying vec2 vTextureCoord;\nvarying vec4 vColor;\n\nuniform vec4 dimensions;\nuniform sampler2D uSampler;\n\nuniform float angle;\nuniform float scale;\n\nfloat pattern()\n{\n float s = sin(angle), c = cos(angle);\n vec2 tex = vTextureCoord * dimensions.xy;\n vec2 point = vec2(\n c * tex.x - s * tex.y,\n s * tex.x + c * tex.y\n ) * scale;\n return (sin(point.x) * sin(point.y)) * 4.0;\n}\n\nvoid main()\n{\n vec4 color = texture2D(uSampler, vTextureCoord);\n float average = (color.r + color.g + color.b) / 3.0;\n gl_FragColor = vec4(vec3(average * 10.0 - 5.0 + pattern()), color.a);\n}\n",{scale:{type:"1f",value:1},angle:{type:"1f",value:5},dimensions:{type:"4fv",value:[0,0,0,0]}})}var n=t("../../core");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i,Object.defineProperties(i.prototype,{scale:{get:function(){return this.uniforms.scale.value},set:function(t){this.uniforms.scale.value=t}},angle:{get:function(){return this.uniforms.angle.value},set:function(t){this.uniforms.angle.value=t}}})},{"../../core":45}],121:[function(t,e,r){function i(){n.AbstractFilter.call(this,"attribute vec2 aVertexPosition;\nattribute vec2 aTextureCoord;\nattribute vec4 aColor;\n\nuniform float strength;\nuniform vec2 offset;\n\nuniform mat3 projectionMatrix;\n\nvarying vec2 vTextureCoord;\nvarying vec4 vColor;\nvarying vec2 vBlurTexCoords[6];\n\nvoid main(void)\n{\n gl_Position = vec4((projectionMatrix * vec3((aVertexPosition+offset), 1.0)).xy, 0.0, 1.0);\n vTextureCoord = aTextureCoord;\n\n vBlurTexCoords[ 0] = aTextureCoord + vec2(0.0, -0.012 * strength);\n vBlurTexCoords[ 1] = aTextureCoord + vec2(0.0, -0.008 * strength);\n vBlurTexCoords[ 2] = aTextureCoord + vec2(0.0, -0.004 * strength);\n vBlurTexCoords[ 3] = aTextureCoord + vec2(0.0, 0.004 * strength);\n vBlurTexCoords[ 4] = aTextureCoord + vec2(0.0, 0.008 * strength);\n vBlurTexCoords[ 5] = aTextureCoord + vec2(0.0, 0.012 * strength);\n\n vColor = vec4(aColor.rgb * aColor.a, aColor.a);\n}\n","precision lowp float;\n\nvarying vec2 vTextureCoord;\nvarying vec2 vBlurTexCoords[6];\nvarying vec4 vColor;\n\nuniform vec3 color;\nuniform float alpha;\n\nuniform sampler2D uSampler;\n\nvoid main(void)\n{\n vec4 sum = vec4(0.0);\n\n sum += texture2D(uSampler, vBlurTexCoords[ 0])*0.004431848411938341;\n sum += texture2D(uSampler, vBlurTexCoords[ 1])*0.05399096651318985;\n sum += texture2D(uSampler, vBlurTexCoords[ 2])*0.2419707245191454;\n sum += texture2D(uSampler, vTextureCoord )*0.3989422804014327;\n sum += texture2D(uSampler, vBlurTexCoords[ 3])*0.2419707245191454;\n sum += texture2D(uSampler, vBlurTexCoords[ 4])*0.05399096651318985;\n sum += texture2D(uSampler, vBlurTexCoords[ 5])*0.004431848411938341;\n\n gl_FragColor = vec4( color.rgb * sum.a * alpha, sum.a * alpha );\n}\n",{blur:{type:"1f",value:1/512},color:{type:"c",value:[0,0,0]},alpha:{type:"1f",value:.7},offset:{type:"2f",value:[5,5]},strength:{type:"1f",value:1}}),this.passes=1,this.strength=4}var n=t("../../core");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.applyFilter=function(t,e,r,i){var n=this.getShader(t);if(this.uniforms.strength.value=this.strength/4/this.passes*(e.frame.height/e.size.height),1===this.passes)t.filterManager.applyFilter(n,e,r,i);else{for(var o=t.filterManager.getRenderTarget(!0),s=e,a=o,h=0;h= (time - params.z)) )\n {\n float diff = (dist - time);\n float powDiff = 1.0 - pow(abs(diff*params.x), params.y);\n\n float diffTime = diff * powDiff;\n vec2 diffUV = normalize(uv - center);\n texCoord = uv + (diffUV * diffTime);\n }\n\n gl_FragColor = texture2D(uSampler, texCoord);\n}\n",{center:{type:"v2",value:{x:.5,y:.5}},params:{type:"v3",value:{x:10,y:.8,z:.1}},time:{type:"1f",value:0}})}var n=t("../../core");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i,Object.defineProperties(i.prototype,{center:{get:function(){return this.uniforms.center.value},set:function(t){this.uniforms.center.value=t}},params:{get:function(){return this.uniforms.params.value},set:function(t){this.uniforms.params.value=t}},time:{get:function(){return this.uniforms.time.value},set:function(t){this.uniforms.time.value=t}}})},{"../../core":45}],131:[function(t,e,r){function i(){n.AbstractFilter.call(this,null,"precision mediump float;\n\nvarying vec2 vTextureCoord;\n\nuniform sampler2D uSampler;\nuniform float blur;\nuniform float gradientBlur;\nuniform vec2 start;\nuniform vec2 end;\nuniform vec2 delta;\nuniform vec2 texSize;\n\nfloat random(vec3 scale, float seed)\n{\n return fract(sin(dot(gl_FragCoord.xyz + seed, scale)) * 43758.5453 + seed);\n}\n\nvoid main(void)\n{\n vec4 color = vec4(0.0);\n float total = 0.0;\n\n float offset = random(vec3(12.9898, 78.233, 151.7182), 0.0);\n vec2 normal = normalize(vec2(start.y - end.y, end.x - start.x));\n float radius = smoothstep(0.0, 1.0, abs(dot(vTextureCoord * texSize - start, normal)) / gradientBlur) * blur;\n\n for (float t = -30.0; t <= 30.0; t++)\n {\n float percent = (t + offset - 0.5) / 30.0;\n float weight = 1.0 - abs(percent);\n vec4 sample = texture2D(uSampler, vTextureCoord + delta / texSize * percent * radius);\n sample.rgb *= sample.a;\n color += sample * weight;\n total += weight;\n }\n\n gl_FragColor = color / total;\n gl_FragColor.rgb /= gl_FragColor.a + 0.00001;\n}\n",{blur:{type:"1f",value:100},gradientBlur:{type:"1f",value:600},start:{type:"v2",value:{x:0,y:window.innerHeight/2}},end:{type:"v2",value:{x:600,y:window.innerHeight/2}},delta:{type:"v2",value:{x:30,y:30}},texSize:{type:"v2",value:{x:window.innerWidth,y:window.innerHeight}}}),this.updateDelta()}var n=t("../../core");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.updateDelta=function(){this.uniforms.delta.value.x=0,this.uniforms.delta.value.y=0},Object.defineProperties(i.prototype,{blur:{get:function(){return this.uniforms.blur.value},set:function(t){this.uniforms.blur.value=t}},gradientBlur:{get:function(){return this.uniforms.gradientBlur.value},set:function(t){this.uniforms.gradientBlur.value=t}},start:{get:function(){return this.uniforms.start.value},set:function(t){this.uniforms.start.value=t,this.updateDelta()}},end:{get:function(){return this.uniforms.end.value},set:function(t){this.uniforms.end.value=t,this.updateDelta()}}})},{"../../core":45}],132:[function(t,e,r){function i(){n.AbstractFilter.call(this),this.tiltShiftXFilter=new o,this.tiltShiftYFilter=new s}var n=t("../../core"),o=t("./TiltShiftXFilter"),s=t("./TiltShiftYFilter");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.applyFilter=function(t,e,r){var i=t.filterManager.getRenderTarget(!0);this.tiltShiftXFilter.applyFilter(t,e,i),this.tiltShiftYFilter.applyFilter(t,i,r),t.filterManager.returnRenderTarget(i)},Object.defineProperties(i.prototype,{blur:{get:function(){return this.tiltShiftXFilter.blur},set:function(t){this.tiltShiftXFilter.blur=this.tiltShiftYFilter.blur=t}},gradientBlur:{get:function(){return this.tiltShiftXFilter.gradientBlur},set:function(t){this.tiltShiftXFilter.gradientBlur=this.tiltShiftYFilter.gradientBlur=t}},start:{get:function(){return this.tiltShiftXFilter.start},set:function(t){this.tiltShiftXFilter.start=this.tiltShiftYFilter.start=t}},end:{get:function(){return this.tiltShiftXFilter.end},set:function(t){this.tiltShiftXFilter.end=this.tiltShiftYFilter.end=t}}})},{"../../core":45,"./TiltShiftXFilter":133,"./TiltShiftYFilter":134}],133:[function(t,e,r){function i(){n.call(this)}var n=t("./TiltShiftAxisFilter");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.updateDelta=function(){var t=this.uniforms.end.value.x-this.uniforms.start.value.x,e=this.uniforms.end.value.y-this.uniforms.start.value.y,r=Math.sqrt(t*t+e*e);this.uniforms.delta.value.x=t/r,this.uniforms.delta.value.y=e/r}},{"./TiltShiftAxisFilter":131}],134:[function(t,e,r){function i(){n.call(this)}var n=t("./TiltShiftAxisFilter");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.updateDelta=function(){var t=this.uniforms.end.value.x-this.uniforms.start.value.x,e=this.uniforms.end.value.y-this.uniforms.start.value.y,r=Math.sqrt(t*t+e*e);this.uniforms.delta.value.x=-e/r,this.uniforms.delta.value.y=t/r}},{"./TiltShiftAxisFilter":131}],135:[function(t,e,r){function i(){n.AbstractFilter.call(this,null,"precision mediump float;\n\nvarying vec2 vTextureCoord;\n\nuniform sampler2D uSampler;\nuniform float radius;\nuniform float angle;\nuniform vec2 offset;\n\nvoid main(void)\n{\n vec2 coord = vTextureCoord - offset;\n float dist = length(coord);\n\n if (dist < radius)\n {\n float ratio = (radius - dist) / radius;\n float angleMod = ratio * ratio * angle;\n float s = sin(angleMod);\n float c = cos(angleMod);\n coord = vec2(coord.x * c - coord.y * s, coord.x * s + coord.y * c);\n }\n\n gl_FragColor = texture2D(uSampler, coord+offset);\n}\n",{radius:{type:"1f",value:.5},angle:{type:"1f",value:5},offset:{type:"v2",value:{x:.5,y:.5}}})}var n=t("../../core");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i,Object.defineProperties(i.prototype,{offset:{get:function(){return this.uniforms.offset.value},set:function(t){this.uniforms.offset.value=t}},radius:{get:function(){return this.uniforms.radius.value},set:function(t){this.uniforms.radius.value=t}},angle:{get:function(){return this.uniforms.angle.value},set:function(t){this.uniforms.angle.value=t}}})},{"../../core":45}],136:[function(t,e,r){(function(r){t("./polyfill");var i=e.exports=t("./core");i.extras=t("./extras"),i.filters=t("./filters"),i.interaction=t("./interaction"),i.loaders=t("./loaders"),i.mesh=t("./mesh"),i.accessibility=t("./accessibility"),i.loader=new i.loaders.Loader,Object.assign(i,t("./deprecation")),r.PIXI=i}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{"./accessibility":37,"./core":45,"./deprecation":100,"./extras":107,"./filters":124,"./interaction":139,"./loaders":142,"./mesh":149,"./polyfill":154}],137:[function(t,e,r){function i(){this.global=new n.Point,this.target=null,this.originalEvent=null}var n=t("../core");i.prototype.constructor=i,e.exports=i,i.prototype.getLocalPosition=function(t,e,r){return t.worldTransform.applyInverse(r||this.global,e)}},{"../core":45}],138:[function(t,e,r){function i(t,e){e=e||{},this.renderer=t,this.autoPreventDefault=void 0!==e.autoPreventDefault?e.autoPreventDefault:!0,this.interactionFrequency=e.interactionFrequency||10,this.mouse=new o,this.eventData={stopped:!1,target:null,type:null,data:this.mouse,stopPropagation:function(){this.stopped=!0}},this.interactiveDataPool=[],this.interactionDOMElement=null,this.eventsAdded=!1,this.onMouseUp=this.onMouseUp.bind(this),this.processMouseUp=this.processMouseUp.bind(this),this.onMouseDown=this.onMouseDown.bind(this),this.processMouseDown=this.processMouseDown.bind(this),this.onMouseMove=this.onMouseMove.bind(this),this.processMouseMove=this.processMouseMove.bind(this),this.onMouseOut=this.onMouseOut.bind(this),this.processMouseOverOut=this.processMouseOverOut.bind(this),this.onTouchStart=this.onTouchStart.bind(this),this.processTouchStart=this.processTouchStart.bind(this),this.onTouchEnd=this.onTouchEnd.bind(this),this.processTouchEnd=this.processTouchEnd.bind(this),this.onTouchMove=this.onTouchMove.bind(this),this.processTouchMove=this.processTouchMove.bind(this),this.last=0,this.currentCursorStyle="inherit",this._tempPoint=new n.Point,this.resolution=1,this.setTargetElement(this.renderer.view,this.renderer.resolution)}var n=t("../core"),o=t("./InteractionData");Object.assign(n.DisplayObject.prototype,t("./interactiveTarget")),i.prototype.constructor=i,e.exports=i,i.prototype.setTargetElement=function(t,e){this.removeEvents(),this.interactionDOMElement=t,this.resolution=e||1,this.addEvents()},i.prototype.addEvents=function(){this.interactionDOMElement&&(n.ticker.shared.add(this.update,this),window.navigator.msPointerEnabled&&(this.interactionDOMElement.style["-ms-content-zooming"]="none",this.interactionDOMElement.style["-ms-touch-action"]="none"),window.document.addEventListener("mousemove",this.onMouseMove,!0),this.interactionDOMElement.addEventListener("mousedown",this.onMouseDown,!0),this.interactionDOMElement.addEventListener("mouseout",this.onMouseOut,!0),this.interactionDOMElement.addEventListener("touchstart",this.onTouchStart,!0),this.interactionDOMElement.addEventListener("touchend",this.onTouchEnd,!0),this.interactionDOMElement.addEventListener("touchmove",this.onTouchMove,!0),window.addEventListener("mouseup",this.onMouseUp,!0),this.eventsAdded=!0)},i.prototype.removeEvents=function(){this.interactionDOMElement&&(n.ticker.shared.remove(this.update),window.navigator.msPointerEnabled&&(this.interactionDOMElement.style["-ms-content-zooming"]="",this.interactionDOMElement.style["-ms-touch-action"]=""),window.document.removeEventListener("mousemove",this.onMouseMove,!0),this.interactionDOMElement.removeEventListener("mousedown",this.onMouseDown,!0),this.interactionDOMElement.removeEventListener("mouseout",this.onMouseOut,!0),this.interactionDOMElement.removeEventListener("touchstart",this.onTouchStart,!0),this.interactionDOMElement.removeEventListener("touchend",this.onTouchEnd,!0),this.interactionDOMElement.removeEventListener("touchmove",this.onTouchMove,!0),this.interactionDOMElement=null,window.removeEventListener("mouseup",this.onMouseUp,!0),this.eventsAdded=!1)},i.prototype.update=function(t){if(this._deltaTime+=t,!(this._deltaTime=0;h--)this.processInteractive(t,a[h],r,i,s)&&(o=!0,s=!1,a[h].interactive&&(i=!1));return n&&(i&&!o&&(e.hitArea?(e.worldTransform.applyInverse(t,this._tempPoint),o=e.hitArea.contains(this._tempPoint.x,this._tempPoint.y)):e.containsPoint&&(o=e.containsPoint(t))),e.interactive&&r(e,o)),o},i.prototype.onMouseDown=function(t){this.mouse.originalEvent=t,this.eventData.data=this.mouse,this.eventData.stopped=!1,this.mapPositionToPoint(this.mouse.global,t.clientX,t.clientY),this.autoPreventDefault&&this.mouse.originalEvent.preventDefault(),this.processInteractive(this.mouse.global,this.renderer._lastObjectRendered,this.processMouseDown,!0)},i.prototype.processMouseDown=function(t,e){var r=this.mouse.originalEvent,i=2===r.button||3===r.which;e&&(t[i?"_isRightDown":"_isLeftDown"]=!0,this.dispatchEvent(t,i?"rightdown":"mousedown",this.eventData))},i.prototype.onMouseUp=function(t){this.mouse.originalEvent=t,this.eventData.data=this.mouse,this.eventData.stopped=!1,this.mapPositionToPoint(this.mouse.global,t.clientX,t.clientY),this.processInteractive(this.mouse.global,this.renderer._lastObjectRendered,this.processMouseUp,!0)},i.prototype.processMouseUp=function(t,e){var r=this.mouse.originalEvent,i=2===r.button||3===r.which,n=i?"_isRightDown":"_isLeftDown";e?(this.dispatchEvent(t,i?"rightup":"mouseup",this.eventData),t[n]&&(t[n]=!1,this.dispatchEvent(t,i?"rightclick":"click",this.eventData))):t[n]&&(t[n]=!1,this.dispatchEvent(t,i?"rightupoutside":"mouseupoutside",this.eventData))},i.prototype.onMouseMove=function(t){this.mouse.originalEvent=t,this.eventData.data=this.mouse,this.eventData.stopped=!1,this.mapPositionToPoint(this.mouse.global,t.clientX,t.clientY),this.didMove=!0,this.cursor="inherit",this.processInteractive(this.mouse.global,this.renderer._lastObjectRendered,this.processMouseMove,!0),this.currentCursorStyle!==this.cursor&&(this.currentCursorStyle=this.cursor,this.interactionDOMElement.style.cursor=this.cursor)},i.prototype.processMouseMove=function(t,e){this.dispatchEvent(t,"mousemove",this.eventData),this.processMouseOverOut(t,e)},i.prototype.onMouseOut=function(t){this.mouse.originalEvent=t,this.eventData.stopped=!1,this.mapPositionToPoint(this.mouse.global,t.clientX,t.clientY),this.interactionDOMElement.style.cursor="inherit",this.mapPositionToPoint(this.mouse.global,t.clientX,t.clientY),this.processInteractive(this.mouse.global,this.renderer._lastObjectRendered,this.processMouseOverOut,!1)},i.prototype.processMouseOverOut=function(t,e){e?(t._over||(t._over=!0,this.dispatchEvent(t,"mouseover",this.eventData)),t.buttonMode&&(this.cursor=t.defaultCursor)):t._over&&(t._over=!1,this.dispatchEvent(t,"mouseout",this.eventData))},i.prototype.onTouchStart=function(t){this.autoPreventDefault&&t.preventDefault();for(var e=t.changedTouches,r=e.length,i=0;r>i;i++){var n=e[i],o=this.getTouchData(n);o.originalEvent=t,this.eventData.data=o,this.eventData.stopped=!1,this.processInteractive(o.global,this.renderer._lastObjectRendered,this.processTouchStart,!0),this.returnTouchData(o)}},i.prototype.processTouchStart=function(t,e){e&&(t._touchDown=!0,this.dispatchEvent(t,"touchstart",this.eventData))},i.prototype.onTouchEnd=function(t){this.autoPreventDefault&&t.preventDefault();for(var e=t.changedTouches,r=e.length,i=0;r>i;i++){var n=e[i],o=this.getTouchData(n);o.originalEvent=t,this.eventData.data=o,this.eventData.stopped=!1,this.processInteractive(o.global,this.renderer._lastObjectRendered,this.processTouchEnd,!0),this.returnTouchData(o)}},i.prototype.processTouchEnd=function(t,e){e?(this.dispatchEvent(t,"touchend",this.eventData),t._touchDown&&(t._touchDown=!1,this.dispatchEvent(t,"tap",this.eventData))):t._touchDown&&(t._touchDown=!1,this.dispatchEvent(t,"touchendoutside",this.eventData))},i.prototype.onTouchMove=function(t){this.autoPreventDefault&&t.preventDefault();for(var e=t.changedTouches,r=e.length,i=0;r>i;i++){var n=e[i],o=this.getTouchData(n);o.originalEvent=t,this.eventData.data=o,this.eventData.stopped=!1,this.processInteractive(o.global,this.renderer._lastObjectRendered,this.processTouchMove,!0),this.returnTouchData(o)}},i.prototype.processTouchMove=function(t,e){e=e,this.dispatchEvent(t,"touchmove",this.eventData)},i.prototype.getTouchData=function(t){var e=this.interactiveDataPool.pop();return e||(e=new o),e.identifier=t.identifier,this.mapPositionToPoint(e.global,t.clientX,t.clientY),navigator.isCocoonJS&&(e.global.x=e.global.x/this.resolution,e.global.y=e.global.y/this.resolution),t.globalX=e.global.x,t.globalY=e.global.y,e},i.prototype.returnTouchData=function(t){ -this.interactiveDataPool.push(t)},i.prototype.destroy=function(){this.removeEvents(),this.renderer=null,this.mouse=null,this.eventData=null,this.interactiveDataPool=null,this.interactionDOMElement=null,this.onMouseUp=null,this.processMouseUp=null,this.onMouseDown=null,this.processMouseDown=null,this.onMouseMove=null,this.processMouseMove=null,this.onMouseOut=null,this.processMouseOverOut=null,this.onTouchStart=null,this.processTouchStart=null,this.onTouchEnd=null,this.processTouchEnd=null,this.onTouchMove=null,this.processTouchMove=null,this._tempPoint=null},n.WebGLRenderer.registerPlugin("interaction",i),n.CanvasRenderer.registerPlugin("interaction",i)},{"../core":45,"./InteractionData":137,"./interactiveTarget":140}],139:[function(t,e,r){e.exports={InteractionData:t("./InteractionData"),InteractionManager:t("./InteractionManager"),interactiveTarget:t("./interactiveTarget")}},{"./InteractionData":137,"./InteractionManager":138,"./interactiveTarget":140}],140:[function(t,e,r){var i={interactive:!1,buttonMode:!1,interactiveChildren:!0,defaultCursor:"pointer",_over:!1,_touchDown:!1};e.exports=i},{}],141:[function(t,e,r){function i(t,e){var r={},i=t.data.getElementsByTagName("info")[0],n=t.data.getElementsByTagName("common")[0];r.font=i.getAttribute("face"),r.size=parseInt(i.getAttribute("size"),10),r.lineHeight=parseInt(n.getAttribute("lineHeight"),10),r.chars={};for(var a=t.data.getElementsByTagName("char"),h=0;hn;n++){var o=2*n;this._renderCanvasDrawTriangle(t,e,r,o,o+2,o+4)}},i.prototype._renderCanvasTriangles=function(t){for(var e=this.vertices,r=this.uvs,i=this.indices,n=i.length,o=0;n>o;o+=3){var s=2*i[o],a=2*i[o+1],h=2*i[o+2];this._renderCanvasDrawTriangle(t,e,r,s,a,h)}},i.prototype._renderCanvasDrawTriangle=function(t,e,r,i,n,o){var s=this._texture.baseTexture.source,a=this._texture.baseTexture.width,h=this._texture.baseTexture.height,u=e[i],l=e[n],c=e[o],p=e[i+1],d=e[n+1],f=e[o+1],v=r[i]*a,g=r[n]*a,m=r[o]*a,y=r[i+1]*h,x=r[n+1]*h,b=r[o+1]*h;if(this.canvasPadding>0){var _=this.canvasPadding/this.worldTransform.a,T=this.canvasPadding/this.worldTransform.d,E=(u+l+c)/3,S=(p+d+f)/3,w=u-E,C=p-S,A=Math.sqrt(w*w+C*C);u=E+w/A*(A+_),p=S+C/A*(A+T),w=l-E,C=d-S,A=Math.sqrt(w*w+C*C),l=E+w/A*(A+_),d=S+C/A*(A+T),w=c-E,C=f-S,A=Math.sqrt(w*w+C*C),c=E+w/A*(A+_),f=S+C/A*(A+T)}t.save(),t.beginPath(),t.moveTo(u,p),t.lineTo(l,d),t.lineTo(c,f),t.closePath(),t.clip();var M=v*x+y*m+g*b-x*m-y*g-v*b,R=u*x+y*c+l*b-x*c-y*l-u*b,O=v*l+u*m+g*c-l*m-u*g-v*c,D=v*x*c+y*l*m+u*g*b-u*x*m-y*g*c-v*l*b,P=p*x+y*f+d*b-x*f-y*d-p*b,F=v*d+p*m+g*f-d*m-p*g-v*f,L=v*x*f+y*d*m+p*g*b-p*x*m-y*g*f-v*d*b;t.transform(R/M,P/M,O/M,F/M,D/M,L/M),t.drawImage(s,0,0),t.restore()},i.prototype.renderMeshFlat=function(t){var e=this.context,r=t.vertices,i=r.length/2;e.beginPath();for(var n=1;i-2>n;n++){var o=2*n,s=r[o],a=r[o+2],h=r[o+4],u=r[o+1],l=r[o+3],c=r[o+5];e.moveTo(s,u),e.lineTo(a,l),e.lineTo(h,c)}e.fillStyle="#FF0000",e.fill(),e.closePath()},i.prototype._onTextureUpdate=function(){this.updateFrame=!0},i.prototype.getBounds=function(t){if(!this._currentBounds){for(var e=t||this.worldTransform,r=e.a,i=e.b,o=e.c,s=e.d,a=e.tx,h=e.ty,u=-(1/0),l=-(1/0),c=1/0,p=1/0,d=this.vertices,f=0,v=d.length;v>f;f+=2){var g=d[f],m=d[f+1],y=r*g+o*m+a,x=s*m+i*g+h;c=c>y?y:c,p=p>x?x:p,u=y>u?y:u,l=x>l?x:l}if(c===-(1/0)||l===1/0)return n.Rectangle.EMPTY;var b=this._bounds;b.x=c,b.width=u-c,b.y=p,b.height=l-p,this._currentBounds=b}return this._currentBounds},i.prototype.containsPoint=function(t){if(!this.getBounds().contains(t.x,t.y))return!1;this.worldTransform.applyInverse(t,o);var e,r,n=this.vertices,a=s.points;if(this.drawMode===i.DRAW_MODES.TRIANGLES){var h=this.indices;for(r=this.indices.length,e=0;r>e;e+=3){var u=2*h[e],l=2*h[e+1],c=2*h[e+2];if(a[0]=n[u],a[1]=n[u+1],a[2]=n[l],a[3]=n[l+1],a[4]=n[c],a[5]=n[c+1],s.contains(o.x,o.y))return!0}}else for(r=n.length,e=0;r>e;e+=6)if(a[0]=n[e],a[1]=n[e+1],a[2]=n[e+2],a[3]=n[e+3],a[4]=n[e+4],a[5]=n[e+5],s.contains(o.x,o.y))return!0;return!1},i.DRAW_MODES={TRIANGLE_MESH:0,TRIANGLES:1}},{"../core":45}],147:[function(t,e,r){function i(t,e,r){n.call(this,t),this._ready=!0,this.segmentsX=e||10,this.segmentsY=r||10,this.drawMode=n.DRAW_MODES.TRIANGLES,this.refresh()}var n=t("./Mesh");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.refresh=function(){var t=this.segmentsX*this.segmentsY,e=[],r=[],i=[],n=[],o=this.texture,s=this.segmentsX-1,a=this.segmentsY-1,h=0,u=o.width/s,l=o.height/a;for(h=0;t>h;h++){var c=h%this.segmentsX,p=h/this.segmentsX|0;e.push(c*u,p*l),i.push(o._uvs.x0+(o._uvs.x1-o._uvs.x0)*(c/(this.segmentsX-1)),o._uvs.y0+(o._uvs.y3-o._uvs.y0)*(p/(this.segmentsY-1)))}var d=s*a;for(h=0;d>h;h++){var f=h%s,v=h/s|0,g=v*this.segmentsX+f,m=v*this.segmentsX+f+1,y=(v+1)*this.segmentsX+f,x=(v+1)*this.segmentsX+f+1;n.push(g,m,y),n.push(m,x,y)}this.vertices=new Float32Array(e),this.uvs=new Float32Array(i),this.colors=new Float32Array(r),this.indices=new Uint16Array(n)},i.prototype._onTextureUpdate=function(){n.prototype._onTextureUpdate.call(this),this._ready&&this.refresh()}},{"./Mesh":146}],148:[function(t,e,r){function i(t,e){n.call(this,t),this.points=e,this.vertices=new Float32Array(4*e.length),this.uvs=new Float32Array(4*e.length),this.colors=new Float32Array(2*e.length),this.indices=new Uint16Array(2*e.length),this._ready=!0,this.refresh()}var n=t("./Mesh"),o=t("../core");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.refresh=function(){var t=this.points;if(!(t.length<1)&&this._texture._uvs){var e=this.uvs,r=this.indices,i=this.colors,n=this._texture._uvs,s=new o.Point(n.x0,n.y0),a=new o.Point(n.x2-n.x0,n.y2-n.y0);e[0]=0+s.x,e[1]=0+s.y,e[2]=0+s.x,e[3]=1*a.y+s.y,i[0]=1,i[1]=1,r[0]=0,r[1]=1;for(var h,u,l,c=t.length,p=1;c>p;p++)h=t[p],u=4*p,l=p/(c-1),e[u]=l*a.x+s.x,e[u+1]=0+s.y,e[u+2]=l*a.x+s.x,e[u+3]=1*a.y+s.y,u=2*p,i[u]=1,i[u+1]=1,u=2*p,r[u]=u,r[u+1]=u+1;this.dirty=!0}},i.prototype._onTextureUpdate=function(){n.prototype._onTextureUpdate.call(this),this._ready&&this.refresh()},i.prototype.updateTransform=function(){var t=this.points;if(!(t.length<1)){for(var e,r,i,n,o,s,a=t[0],h=0,u=0,l=this.vertices,c=t.length,p=0;c>p;p++)r=t[p],i=4*p,e=p1&&(n=1),o=Math.sqrt(h*h+u*u),s=this._texture.height/2,h/=o,u/=o,h*=s,u*=s,l[i]=r.x+h,l[i+1]=r.y+u,l[i+2]=r.x-h,l[i+3]=r.y-u,a=r;this.containerUpdateTransform()}}},{"../core":45,"./Mesh":146}],149:[function(t,e,r){e.exports={Mesh:t("./Mesh"),Plane:t("./Plane"),Rope:t("./Rope"),MeshRenderer:t("./webgl/MeshRenderer"),MeshShader:t("./webgl/MeshShader")}},{"./Mesh":146,"./Plane":147,"./Rope":148,"./webgl/MeshRenderer":150,"./webgl/MeshShader":151}],150:[function(t,e,r){function i(t){n.ObjectRenderer.call(this,t),this.indices=new Uint16Array(15e3);for(var e=0,r=0;15e3>e;e+=6,r+=4)this.indices[e+0]=r+0,this.indices[e+1]=r+1,this.indices[e+2]=r+2,this.indices[e+3]=r+0,this.indices[e+4]=r+2,this.indices[e+5]=r+3;this.currentShader=null}var n=t("../../core"),o=t("../Mesh");i.prototype=Object.create(n.ObjectRenderer.prototype),i.prototype.constructor=i,e.exports=i,n.WebGLRenderer.registerPlugin("mesh",i),i.prototype.onContextChange=function(){},i.prototype.render=function(t){t._vertexBuffer||this._initWebGL(t);var e=this.renderer,r=e.gl,i=t._texture.baseTexture,n=t.shader,s=t.drawMode===o.DRAW_MODES.TRIANGLE_MESH?r.TRIANGLE_STRIP:r.TRIANGLES;e.blendModeManager.setBlendMode(t.blendMode),n=n?n.shaders[r.id]||n.getShader(e):e.shaderManager.plugins.meshShader,this.renderer.shaderManager.setShader(n),n.uniforms.translationMatrix.value=t.worldTransform.toArray(!0),n.uniforms.projectionMatrix.value=e.currentRenderTarget.projectionMatrix.toArray(!0),n.uniforms.alpha.value=t.worldAlpha,n.syncUniforms(),t.dirty?(t.dirty=!1,r.bindBuffer(r.ARRAY_BUFFER,t._vertexBuffer),r.bufferData(r.ARRAY_BUFFER,t.vertices,r.STATIC_DRAW),r.vertexAttribPointer(n.attributes.aVertexPosition,2,r.FLOAT,!1,0,0),r.bindBuffer(r.ARRAY_BUFFER,t._uvBuffer),r.bufferData(r.ARRAY_BUFFER,t.uvs,r.STATIC_DRAW),r.vertexAttribPointer(n.attributes.aTextureCoord,2,r.FLOAT,!1,0,0),r.activeTexture(r.TEXTURE0),i._glTextures[r.id]?r.bindTexture(r.TEXTURE_2D,i._glTextures[r.id]):this.renderer.updateTexture(i),r.bindBuffer(r.ELEMENT_ARRAY_BUFFER,t._indexBuffer),r.bufferData(r.ELEMENT_ARRAY_BUFFER,t.indices,r.STATIC_DRAW)):(r.bindBuffer(r.ARRAY_BUFFER,t._vertexBuffer),r.bufferSubData(r.ARRAY_BUFFER,0,t.vertices),r.vertexAttribPointer(n.attributes.aVertexPosition,2,r.FLOAT,!1,0,0),r.bindBuffer(r.ARRAY_BUFFER,t._uvBuffer),r.vertexAttribPointer(n.attributes.aTextureCoord,2,r.FLOAT,!1,0,0),r.activeTexture(r.TEXTURE0),i._glTextures[r.id]?r.bindTexture(r.TEXTURE_2D,i._glTextures[r.id]):this.renderer.updateTexture(i),r.bindBuffer(r.ELEMENT_ARRAY_BUFFER,t._indexBuffer),r.bufferSubData(r.ELEMENT_ARRAY_BUFFER,0,t.indices)),r.drawElements(s,t.indices.length,r.UNSIGNED_SHORT,0)},i.prototype._initWebGL=function(t){var e=this.renderer.gl;t._vertexBuffer=e.createBuffer(),t._indexBuffer=e.createBuffer(),t._uvBuffer=e.createBuffer(),e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferData(e.ARRAY_BUFFER,t.vertices,e.DYNAMIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferData(e.ARRAY_BUFFER,t.uvs,e.STATIC_DRAW),t.colors&&(t._colorBuffer=e.createBuffer(),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.bufferData(e.ARRAY_BUFFER,t.colors,e.STATIC_DRAW)),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer),e.bufferData(e.ELEMENT_ARRAY_BUFFER,t.indices,e.STATIC_DRAW)},i.prototype.flush=function(){},i.prototype.start=function(){this.currentShader=null},i.prototype.destroy=function(){n.ObjectRenderer.prototype.destroy.call(this)}},{"../../core":45,"../Mesh":146}],151:[function(t,e,r){function i(t){n.Shader.call(this,t,["precision lowp float;","attribute vec2 aVertexPosition;","attribute vec2 aTextureCoord;","uniform mat3 translationMatrix;","uniform mat3 projectionMatrix;","varying vec2 vTextureCoord;","void main(void){"," gl_Position = vec4((projectionMatrix * translationMatrix * vec3(aVertexPosition, 1.0)).xy, 0.0, 1.0);"," vTextureCoord = aTextureCoord;","}"].join("\n"),["precision lowp float;","varying vec2 vTextureCoord;","uniform float alpha;","uniform sampler2D uSampler;","void main(void){"," gl_FragColor = texture2D(uSampler, vTextureCoord) * alpha ;","}"].join("\n"),{alpha:{type:"1f",value:0},translationMatrix:{type:"mat3",value:new Float32Array(9)},projectionMatrix:{type:"mat3",value:new Float32Array(9)}},{aVertexPosition:0,aTextureCoord:0})}var n=t("../../core");i.prototype=Object.create(n.Shader.prototype),i.prototype.constructor=i,e.exports=i,n.ShaderManager.registerPlugin("meshShader",i)},{"../../core":45}],152:[function(t,e,r){Math.sign||(Math.sign=function(t){return t=+t,0===t||isNaN(t)?t:t>0?1:-1})},{}],153:[function(t,e,r){Object.assign||(Object.assign=t("object-assign"))},{"object-assign":26}],154:[function(t,e,r){t("./Object.assign"),t("./requestAnimationFrame"),t("./Math.sign")},{"./Math.sign":152,"./Object.assign":153,"./requestAnimationFrame":155}],155:[function(t,e,r){(function(t){if(Date.now&&Date.prototype.getTime||(Date.now=function(){return(new Date).getTime()}),!t.performance||!t.performance.now){var e=Date.now();t.performance||(t.performance={}),t.performance.now=function(){return Date.now()-e}}for(var r=Date.now(),i=["ms","moz","webkit","o"],n=0;ni&&(i=0),r=e,setTimeout(function(){r=Date.now(),t(performance.now())},i)}),t.cancelAnimationFrame||(t.cancelAnimationFrame=function(t){clearTimeout(t)})}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{}]},{},[136])(136)}); +!function(t){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=t();else if("function"==typeof define&&define.amd)define([],t);else{var e;e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:this,e.PIXI=t()}}(function(){var t;return function e(t,r,i){function n(s,a){if(!r[s]){if(!t[s]){var h="function"==typeof require&&require;if(!a&&h)return h(s,!0);if(o)return o(s,!0);var u=new Error("Cannot find module '"+s+"'");throw u.code="MODULE_NOT_FOUND",u}var l=r[s]={exports:{}};t[s][0].call(l.exports,function(e){var r=t[s][1][e];return n(r?r:e)},l,l.exports,e,t,r,i)}return r[s].exports}for(var o="function"==typeof require&&require,s=0;s=t.byteLength?i.bufferSubData(this.type,e,t):i.bufferData(this.type,t,this.drawType),this.data=t},n.prototype.bind=function(){var t=this.gl;t.bindBuffer(this.type,this.buffer)},n.createVertexBuffer=function(t,e,r){return new n(t,t.ARRAY_BUFFER,e,r)},n.createIndexBuffer=function(t,e,r){return new n(t,t.ELEMENT_ARRAY_BUFFER,e,r)},n.create=function(t,e,r,i){return new n(t,e,i)},e.exports=n},{}],3:[function(t,e,r){var i=t("./GLTexture"),n=function(t,e,r){this.gl=t,this.framebuffer=t.createFramebuffer(),this.stencil=null,this.texture=null,this.width=e||100,this.height=r||100};n.prototype.enableTexture=function(t){var e=this.gl;this.texture=t||new i(e),this.texture.bind(),this.bind(),e.framebufferTexture2D(e.FRAMEBUFFER,e.COLOR_ATTACHMENT0,e.TEXTURE_2D,this.texture.texture,0)},n.prototype.enableStencil=function(){if(!this.stencil){var t=this.gl;this.stencil=t.createRenderbuffer(),t.bindRenderbuffer(t.RENDERBUFFER,this.stencil),t.framebufferRenderbuffer(t.FRAMEBUFFER,t.DEPTH_STENCIL_ATTACHMENT,t.RENDERBUFFER,this.stencil),t.renderbufferStorage(t.RENDERBUFFER,t.DEPTH_STENCIL,this.width,this.height)}},n.prototype.clear=function(t,e,r,i){this.bind();var n=this.gl;n.clearColor(t,e,r,i),n.clear(n.COLOR_BUFFER_BIT)},n.prototype.bind=function(){var t=this.gl;t.bindFramebuffer(t.FRAMEBUFFER,this.framebuffer)},n.prototype.unbind=function(){gl.bindFramebuffer(gl.FRAMEBUFFER,null)},n.prototype.resize=function(t,e){var r=this.gl;this.width=t,this.height=e,this.texture&&this.texture.uploadData(null,t,e),this.stencil&&(r.bindRenderbuffer(r.RENDERBUFFER,this.stencil),r.renderbufferStorage(r.RENDERBUFFER,r.DEPTH_STENCIL,t,e))},n.prototype.destroy=function(){var t=this.gl;t.deleteFramebuffer(this.framebuffer)},n.createRGBA=function(t,e,r,o){var s=i.fromData(t,null,e,r);s.enableNearestScaling(),s.enableWrapClamp();var a=new n(t,e,r);return a.enableTexture(s),a},n.createFloat32=function(t,e,r,o){var s=new i.fromData(t,o,e,r);s.enableNearestScaling(),s.enableWrapClamp();var a=new n(t,e,r);return a.enableTexture(s),a},e.exports=n},{"./GLTexture":5}],4:[function(t,e,r){var i=t("./shader/compileProgram"),n=t("./shader/extractAttributes"),o=t("./shader/extractUniforms"),s=t("./shader/generateUniformAccessObject"),a=function(t,e,r){this.gl=t,this.program=i(t,e,r),this.attributes=n(t,this.program);var a=o(t,this.program);this.uniforms=s(t,a)};a.prototype.bind=function(){this.gl.useProgram(this.program)},a.prototype.destroy=function(){this.gl},e.exports=a},{"./shader/compileProgram":9,"./shader/extractAttributes":11,"./shader/extractUniforms":12,"./shader/generateUniformAccessObject":13}],5:[function(t,e,r){var i=function(t,e,r,i,n){this.gl=t,this.texture=t.createTexture(),this.mipmap=!1,this.premultiplyAlpha=!1,this.width=e||0,this.height=r||0,this.format=i||t.RGBA,this.type=n||t.UNSIGNED_BYTE};i.prototype.upload=function(t){this.bind();var e=this.gl;this.width=t.width,this.height=t.height,e.pixelStorei(e.UNPACK_PREMULTIPLY_ALPHA_WEBGL,this.premultiplyAlpha),e.texImage2D(e.TEXTURE_2D,0,this.format,this.format,this.type,t)};var n=!1;i.prototype.uploadData=function(t,e,r){if(this.bind(),this.width=e||this.width,this.height=r||this.height,t instanceof Float32Array){if(!n){var i=gl.getExtension("OES_texture_float");if(!i)throw new Error("floating point textures not available");n=!0}this.type=gl.FLOAT}else this.type=gl.UNSIGNED_BYTE;gl.pixelStorei(gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL,this.premultiplyAlpha),gl.texImage2D(gl.TEXTURE_2D,0,this.format,this.width,this.height,0,this.format,this.type,t||null)},i.prototype.bind=function(t){var e=this.gl;void 0!==t&&e.activeTexture(e.TEXTURE0+t),e.bindTexture(e.TEXTURE_2D,this.texture)},i.prototype.unbind=function(){var t=this.gl;t.bindTexture(t.TEXTURE_2D,null)},i.prototype.minFilter=function(t){var e=this.gl;this.bind(),this.mipmap?e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MIN_FILTER,t?e.LINEAR_MIPMAP_LINEAR:e.NEAREST_MIPMAP_NEAREST):e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MIN_FILTER,t?e.LINEAR:e.NEAREST)},i.prototype.magFilter=function(t){var e=this.gl;this.bind(),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MAG_FILTER,t?e.LINEAR:e.NEAREST)},i.prototype.enableMipmap=function(){this.bind(),this.mipmap=!0,gl.generateMipmap(gl.TEXTURE_2D)},i.prototype.enableLinearScaling=function(){this.minFilter(!0),this.magFilter(!0)},i.prototype.enableNearestScaling=function(){this.minFilter(!1),this.magFilter(!1)},i.prototype.enableWrapClamp=function(){var t=this.gl;this.bind(),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_WRAP_S,t.CLAMP_TO_EDGE),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_WRAP_T,t.CLAMP_TO_EDGE)},i.prototype.enableWrapRepeat=function(){var t=this.gl;this.bind(),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_WRAP_S,t.REPEAT),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_WRAP_T,t.REPEAT)},i.prototype.destroy=function(){var t=this.gl;t.deleteTexture(this.texture)},i.fromSource=function(t,e,r){var n=new i(t);return n.premultiplyAlpha=r||!1,n.upload(e),n},i.fromData=function(t,e,r,n){var o=new i(t);return o.uploadData(e,r,n),o},e.exports=i},{}],6:[function(t,e,r){function i(t){this.nativeVaoExtension=t.getExtension("OES_vertex_array_object")||t.getExtension("MOZ_OES_vertex_array_object")||t.getExtension("WEBKIT_OES_vertex_array_object"),this.nativeVaoExtension&&(this.nativeVao=this.nativeVaoExtension.createVertexArrayOES()),this.gl=t,this.attributes=[],this.indexBuffer=null,this.dirty=!1}i.prototype.constructor=i,e.exports=i,i.prototype.bind=function(){this.nativeVao?(this.nativeVaoExtension.bindVertexArrayOES(this.nativeVao),this.dirty&&(this.dirty=!1,this.activate())):this.activate()},i.prototype.unbind=function(){this.nativeVao&&this.nativeVaoExtension.bindVertexArrayOES(null)},i.prototype.activate=function(){for(var t=this.gl,e=0;es;s++){var a=t.getActiveAttrib(e,s),h=i(t,a.type);r[a.name]={type:h,size:n(h),location:t.getAttribLocation(e,a.name),pointer:function(e,r,i,n){t.vertexAttribPointer(this.location,this.size,e||t.FLOAT,r||!1,i||0,n||0)}}}return r};e.exports=o},{"./mapSize":14,"./mapType":15}],12:[function(t,e,r){var i=t("./mapType"),n=t("./defaultValue"),o=function(t,e){for(var r={},o=t.getProgramParameter(e,t.ACTIVE_UNIFORMS),s=0;o>s;s++){var a=t.getActiveUniform(e,s),h=a.name.replace(/\[.*?\]/,""),u=i(t,a.type);r[h]={type:u,size:a.size,location:t.getUniformLocation(e,h),value:n(u,a.size)}}return r};e.exports=o},{"./defaultValue":10,"./mapType":15}],13:[function(t,e,r){var i=function(t,e){var r={data:{}};r.gl=t;for(var i=Object.keys(e),a=0;a=0&&t.length%1===0}function c(t,e){for(var r=-1,i=t.length;++ri?i:null}):(r=X(t),e=r.length,function(){return i++,e>i?r[i]:null})}function y(t,e){return e=null==e?t.length-1:+e,function(){for(var r=Math.max(arguments.length-e,0),i=Array(r),n=0;r>n;n++)i[n]=arguments[n+e];switch(e){case 0:return t.call(this,i);case 1:return t.call(this,arguments[0],i)}}}function x(t){return function(e,r,i){return t(e,i)}}function b(t){return function(e,r,i){i=u(i||n),e=e||[];var o=m(e);if(0>=t)return i(null);var s=!1,a=0,l=!1;!function c(){if(s&&0>=a)return i(null);for(;t>a&&!l;){var n=o();if(null===n)return s=!0,void(0>=a&&i(null));a+=1,r(e[n],n,h(function(t){a-=1,t?(i(t),l=!0):c()}))}}()}}function _(t){return function(e,r,i){return t(N.eachOf,e,r,i)}}function T(t){return function(e,r,i,n){return t(b(r),e,i,n)}}function E(t){return function(e,r,i){return t(N.eachOfSeries,e,r,i)}}function S(t,e,r,i){i=u(i||n),e=e||[];var o=l(e)?[]:{};t(e,function(t,e,i){r(t,function(t,r){o[e]=r,i(t)})},function(t){i(t,o)})}function w(t,e,r,i){var n=[];t(e,function(t,e,i){r(t,function(r){r&&n.push({index:e,value:t}),i()})},function(){i(p(n.sort(function(t,e){return t.index-e.index}),function(t){return t.value}))})}function C(t,e,r,i){w(t,e,function(t,e){r(t,function(t){e(!t)})},i)}function A(t,e,r){return function(i,n,o,s){function a(){s&&s(r(!1,void 0))}function h(t,i,n){return s?void o(t,function(i){s&&e(i)&&(s(r(!0,t)),s=o=!1),n()}):n()}arguments.length>3?t(i,n,h,a):(s=o,o=n,t(i,h,a))}}function M(t,e){return e}function R(t,e,r){r=r||n;var i=l(e)?[]:{};t(e,function(t,e,r){t(y(function(t,n){n.length<=1&&(n=n[0]),i[e]=n,r(t)}))},function(t){r(t,i)})}function O(t,e,r,i){var n=[];t(e,function(t,e,i){r(t,function(t,e){n=n.concat(e||[]),i(t)})},function(t){i(t,n)})}function P(t,e,r){function i(t,e,r,i){if(null!=i&&"function"!=typeof i)throw new Error("task callback must be a function");return t.started=!0,j(e)||(e=[e]),0===e.length&&t.idle()?N.setImmediate(function(){t.drain()}):(c(e,function(e){var o={data:e,callback:i||n};r?t.tasks.unshift(o):t.tasks.push(o),t.tasks.length===t.concurrency&&t.saturated()}),void N.setImmediate(t.process))}function o(t,e){return function(){s-=1;var r=!1,i=arguments;c(e,function(t){c(a,function(e,i){e!==t||r||(a.splice(i,1),r=!0)}),t.callback.apply(t,i)}),t.tasks.length+s===0&&t.drain(),t.process()}}if(null==e)e=1;else if(0===e)throw new Error("Concurrency must not be zero");var s=0,a=[],u={tasks:[],concurrency:e,payload:r,saturated:n,empty:n,drain:n,started:!1,paused:!1,push:function(t,e){i(u,t,!1,e)},kill:function(){u.drain=n,u.tasks=[]},unshift:function(t,e){i(u,t,!0,e)},process:function(){if(!u.paused&&s=e;e++)N.setImmediate(u.process)}}};return u}function D(t){return y(function(e,r){e.apply(null,r.concat([y(function(e,r){"object"==typeof console&&(e?console.error&&console.error(e):console[t]&&c(r,function(e){console[t](e)}))})]))})}function F(t){return function(e,r,i){t(d(e),r,i)}}function L(t){return y(function(e,r){var i=y(function(r){var i=this,n=r.pop();return t(e,function(t,e,n){t.apply(i,r.concat([n]))},n)});return r.length?i.apply(this,r):i})}function B(t){return y(function(e){var r=e.pop();e.push(function(){var t=arguments;i?N.setImmediate(function(){r.apply(null,t)}):r.apply(null,t)});var i=!0;t.apply(this,e),i=!1})}var I,N={},U="object"==typeof self&&self.self===self&&self||"object"==typeof i&&i.global===i&&i||this;null!=U&&(I=U.async),N.noConflict=function(){return U.async=I,N};var k=Object.prototype.toString,j=Array.isArray||function(t){return"[object Array]"===k.call(t)},G=function(t){var e=typeof t;return"function"===e||"object"===e&&!!t},X=Object.keys||function(t){var e=[];for(var r in t)t.hasOwnProperty(r)&&e.push(r);return e},Y="function"==typeof setImmediate&&setImmediate,z=Y?function(t){Y(t)}:function(t){setTimeout(t,0)};"object"==typeof e&&"function"==typeof e.nextTick?N.nextTick=e.nextTick:N.nextTick=z,N.setImmediate=Y?z:N.nextTick,N.forEach=N.each=function(t,e,r){return N.eachOf(t,x(e),r)},N.forEachSeries=N.eachSeries=function(t,e,r){return N.eachOfSeries(t,x(e),r)},N.forEachLimit=N.eachLimit=function(t,e,r,i){return b(e)(t,x(r),i)},N.forEachOf=N.eachOf=function(t,e,r){function i(t){a--,t?r(t):null===o&&0>=a&&r(null)}r=u(r||n),t=t||[];for(var o,s=m(t),a=0;null!=(o=s());)a+=1,e(t[o],o,h(i));0===a&&r(null)},N.forEachOfSeries=N.eachOfSeries=function(t,e,r){function i(){var n=!0;return null===s?r(null):(e(t[s],s,h(function(t){if(t)r(t);else{if(s=o(),null===s)return r(null);n?N.setImmediate(i):i()}})),void(n=!1))}r=u(r||n),t=t||[];var o=m(t),s=o();i()},N.forEachOfLimit=N.eachOfLimit=function(t,e,r,i){b(e)(t,r,i)},N.map=_(S),N.mapSeries=E(S),N.mapLimit=T(S),N.inject=N.foldl=N.reduce=function(t,e,r,i){N.eachOfSeries(t,function(t,i,n){r(e,t,function(t,r){e=r,n(t)})},function(t){i(t,e)})},N.foldr=N.reduceRight=function(t,e,r,i){var n=p(t,o).reverse();N.reduce(n,e,r,i)},N.transform=function(t,e,r,i){3===arguments.length&&(i=r,r=e,e=j(t)?[]:{}),N.eachOf(t,function(t,i,n){r(e,t,i,n)},function(t){i(t,e)})},N.select=N.filter=_(w),N.selectLimit=N.filterLimit=T(w),N.selectSeries=N.filterSeries=E(w),N.reject=_(C),N.rejectLimit=T(C),N.rejectSeries=E(C),N.any=N.some=A(N.eachOf,s,o),N.someLimit=A(N.eachOfLimit,s,o),N.all=N.every=A(N.eachOf,a,a),N.everyLimit=A(N.eachOfLimit,a,a),N.detect=A(N.eachOf,o,M),N.detectSeries=A(N.eachOfSeries,o,M),N.detectLimit=A(N.eachOfLimit,o,M),N.sortBy=function(t,e,r){function i(t,e){var r=t.criteria,i=e.criteria;return i>r?-1:r>i?1:0}N.map(t,function(t,r){e(t,function(e,i){e?r(e):r(null,{value:t,criteria:i})})},function(t,e){return t?r(t):void r(null,p(e.sort(i),function(t){return t.value}))})},N.auto=function(t,e,r){function i(t){d.unshift(t)}function o(t){var e=g(d,t);e>=0&&d.splice(e,1)}function s(){h--,c(d.slice(0),function(t){t()})}r||(r=e,e=null),r=u(r||n);var a=X(t),h=a.length;if(!h)return r(null);e||(e=h);var l={},p=0,d=[];i(function(){h||r(null,l)}),c(a,function(n){function a(){return e>p&&f(m,function(t,e){return t&&l.hasOwnProperty(e)},!0)&&!l.hasOwnProperty(n)}function h(){a()&&(p++,o(h),c[c.length-1](d,l))}for(var u,c=j(t[n])?t[n]:[t[n]],d=y(function(t,e){if(p--,e.length<=1&&(e=e[0]),t){var i={};v(l,function(t,e){i[e]=t}),i[n]=e,r(t,i)}else l[n]=e,N.setImmediate(s)}),m=c.slice(0,c.length-1),x=m.length;x--;){if(!(u=t[m[x]]))throw new Error("Has inexistant dependency");if(j(u)&&g(u,n)>=0)throw new Error("Has cyclic dependencies")}a()?(p++,c[c.length-1](d,l)):i(h)})},N.retry=function(t,e,r){function i(t,e){if("number"==typeof e)t.times=parseInt(e,10)||o;else{if("object"!=typeof e)throw new Error("Unsupported argument type for 'times': "+typeof e);t.times=parseInt(e.times,10)||o,t.interval=parseInt(e.interval,10)||s}}function n(t,e){function r(t,r){return function(i){t(function(t,e){i(!t||r,{err:t,result:e})},e)}}function i(t){return function(e){setTimeout(function(){e(null)},t)}}for(;h.times;){var n=!(h.times-=1);a.push(r(h.task,n)),!n&&h.interval>0&&a.push(i(h.interval))}N.series(a,function(e,r){r=r[r.length-1],(t||h.callback)(r.err,r.result)})}var o=5,s=0,a=[],h={times:o,interval:s},u=arguments.length;if(1>u||u>3)throw new Error("Invalid arguments - must be either (task), (task, callback), (times, task) or (times, task, callback)");return 2>=u&&"function"==typeof t&&(r=e,e=t),"function"!=typeof t&&i(h,t),h.callback=r,h.task=e,h.callback?n():n},N.waterfall=function(t,e){function r(t){return y(function(i,n){if(i)e.apply(null,[i].concat(n));else{var o=t.next();o?n.push(r(o)):n.push(e),B(t).apply(null,n)}})}if(e=u(e||n),!j(t)){var i=new Error("First argument to waterfall must be an array of functions");return e(i)}return t.length?void r(N.iterator(t))():e()},N.parallel=function(t,e){R(N.eachOf,t,e)},N.parallelLimit=function(t,e,r){R(b(e),t,r)},N.series=function(t,e){R(N.eachOfSeries,t,e)},N.iterator=function(t){function e(r){function i(){return t.length&&t[r].apply(null,arguments),i.next()}return i.next=function(){return ri;){var o=i+(n-i+1>>>1);r(e,t[o])>=0?i=o:n=o-1}return i}function o(t,e,o,s){if(null!=s&&"function"!=typeof s)throw new Error("task callback must be a function");return t.started=!0,j(e)||(e=[e]),0===e.length?N.setImmediate(function(){t.drain()}):void c(e,function(e){var a={data:e,priority:o,callback:"function"==typeof s?s:n};t.tasks.splice(i(t.tasks,a,r)+1,0,a),t.tasks.length===t.concurrency&&t.saturated(),N.setImmediate(t.process)})}var s=N.queue(t,e);return s.push=function(t,e,r){o(s,t,e,r)},delete s.unshift,s},N.cargo=function(t,e){return P(t,1,e)},N.log=D("log"),N.dir=D("dir"),N.memoize=function(t,e){var r={},i={};e=e||o;var n=y(function(n){var o=n.pop(),s=e.apply(null,n);s in r?N.setImmediate(function(){o.apply(null,r[s])}):s in i?i[s].push(o):(i[s]=[o],t.apply(null,n.concat([y(function(t){r[s]=t;var e=i[s];delete i[s];for(var n=0,o=e.length;o>n;n++)e[n].apply(null,t)})])))});return n.memo=r,n.unmemoized=t,n},N.unmemoize=function(t){return function(){return(t.unmemoized||t).apply(null,arguments)}},N.times=F(N.map),N.timesSeries=F(N.mapSeries),N.timesLimit=function(t,e,r,i){return N.mapLimit(d(t),e,r,i)},N.seq=function(){var t=arguments;return y(function(e){var r=this,i=e[e.length-1];"function"==typeof i?e.pop():i=n,N.reduce(t,e,function(t,e,i){e.apply(r,t.concat([y(function(t,e){i(t,e)})]))},function(t,e){i.apply(r,[t].concat(e))})})},N.compose=function(){return N.seq.apply(null,Array.prototype.reverse.call(arguments))},N.applyEach=L(N.eachOf),N.applyEachSeries=L(N.eachOfSeries),N.forever=function(t,e){function r(t){return t?i(t):void o(r)}var i=h(e||n),o=B(t);r()},N.ensureAsync=B,N.constant=y(function(t){var e=[null].concat(t);return function(t){return t.apply(this,e)}}),N.wrapSync=N.asyncify=function(t){return y(function(e){var r,i=e.pop();try{r=t.apply(this,e)}catch(n){return i(n)}G(r)&&"function"==typeof r.then?r.then(function(t){i(null,t)})["catch"](function(t){i(t.message?t:new Error(t))}):i(null,r)})},"object"==typeof r&&r.exports?r.exports=N:"function"==typeof t&&t.amd?t([],function(){return N}):U.async=N}()}).call(this,e("_process"),"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{_process:18}],17:[function(t,e,r){(function(t){function e(t,e){for(var r=0,i=t.length-1;i>=0;i--){var n=t[i];"."===n?t.splice(i,1):".."===n?(t.splice(i,1),r++):r&&(t.splice(i,1),r--)}if(e)for(;r--;r)t.unshift("..");return t}function i(t,e){if(t.filter)return t.filter(e);for(var r=[],i=0;i=-1&&!n;o--){var s=o>=0?arguments[o]:t.cwd();if("string"!=typeof s)throw new TypeError("Arguments to path.resolve must be strings");s&&(r=s+"/"+r,n="/"===s.charAt(0))}return r=e(i(r.split("/"),function(t){return!!t}),!n).join("/"),(n?"/":"")+r||"."},r.normalize=function(t){var n=r.isAbsolute(t),o="/"===s(t,-1);return t=e(i(t.split("/"),function(t){return!!t}),!n).join("/"),t||n||(t="."),t&&o&&(t+="/"),(n?"/":"")+t},r.isAbsolute=function(t){return"/"===t.charAt(0)},r.join=function(){var t=Array.prototype.slice.call(arguments,0);return r.normalize(i(t,function(t,e){if("string"!=typeof t)throw new TypeError("Arguments to path.join must be strings");return t}).join("/"))},r.relative=function(t,e){function i(t){for(var e=0;e=0&&""===t[r];r--);return e>r?[]:t.slice(e,r-e+1)}t=r.resolve(t).substr(1),e=r.resolve(e).substr(1);for(var n=i(t.split("/")),o=i(e.split("/")),s=Math.min(n.length,o.length),a=s,h=0;s>h;h++)if(n[h]!==o[h]){a=h;break}for(var u=[],h=a;he&&(e=t.length+e),t.substr(e,r)}}).call(this,t("_process"))},{_process:18}],18:[function(t,e,r){function i(){l=!1,a.length?u=a.concat(u):c=-1,u.length&&n()}function n(){if(!l){var t=setTimeout(i);l=!0;for(var e=u.length;e;){for(a=u,u=[];++c1)for(var r=1;r1&&(i=r[0]+"@",t=r[1]),t=t.replace(F,".");var n=t.split("."),o=s(n,e).join(".");return i+o}function h(t){for(var e,r,i=[],n=0,o=t.length;o>n;)e=t.charCodeAt(n++),e>=55296&&56319>=e&&o>n?(r=t.charCodeAt(n++),56320==(64512&r)?i.push(((1023&e)<<10)+(1023&r)+65536):(i.push(e),n--)):i.push(e);return i}function u(t){return s(t,function(t){var e="";return t>65535&&(t-=65536,e+=N(t>>>10&1023|55296),t=56320|1023&t),e+=N(t)}).join("")}function l(t){return 10>t-48?t-22:26>t-65?t-65:26>t-97?t-97:E}function c(t,e){return t+22+75*(26>t)-((0!=e)<<5)}function p(t,e,r){var i=0;for(t=r?I(t/A):t>>1,t+=I(t/e);t>B*w>>1;i+=E)t=I(t/B);return I(i+(B+1)*t/(t+C))}function d(t){var e,r,i,n,s,a,h,c,d,f,v=[],g=t.length,m=0,y=R,x=M;for(r=t.lastIndexOf(O),0>r&&(r=0),i=0;r>i;++i)t.charCodeAt(i)>=128&&o("not-basic"),v.push(t.charCodeAt(i));for(n=r>0?r+1:0;g>n;){for(s=m,a=1,h=E;n>=g&&o("invalid-input"),c=l(t.charCodeAt(n++)),(c>=E||c>I((T-m)/a))&&o("overflow"),m+=c*a,d=x>=h?S:h>=x+w?w:h-x,!(d>c);h+=E)f=E-d,a>I(T/f)&&o("overflow"),a*=f;e=v.length+1,x=p(m-s,e,0==s),I(m/e)>T-y&&o("overflow"),y+=I(m/e),m%=e,v.splice(m++,0,y)}return u(v)}function f(t){var e,r,i,n,s,a,u,l,d,f,v,g,m,y,x,b=[];for(t=h(t),g=t.length,e=R,r=0,s=M,a=0;g>a;++a)v=t[a],128>v&&b.push(N(v));for(i=n=b.length,n&&b.push(O);g>i;){for(u=T,a=0;g>a;++a)v=t[a],v>=e&&u>v&&(u=v);for(m=i+1,u-e>I((T-r)/m)&&o("overflow"),r+=(u-e)*m,e=u,a=0;g>a;++a)if(v=t[a],e>v&&++r>T&&o("overflow"),v==e){for(l=r,d=E;f=s>=d?S:d>=s+w?w:d-s,!(f>l);d+=E)x=l-f,y=E-f,b.push(N(c(f+x%y,0))),l=I(x/y);b.push(N(c(l,0))),s=p(r,m,i==n),r=0,++i}++r,++e}return b.join("")}function v(t){return a(t,function(t){return P.test(t)?d(t.slice(4).toLowerCase()):t})}function g(t){return a(t,function(t){return D.test(t)?"xn--"+f(t):t})}var m="object"==typeof i&&i&&!i.nodeType&&i,y="object"==typeof r&&r&&!r.nodeType&&r,x="object"==typeof e&&e;(x.global===x||x.window===x||x.self===x)&&(n=x);var b,_,T=2147483647,E=36,S=1,w=26,C=38,A=700,M=72,R=128,O="-",P=/^xn--/,D=/[^\x20-\x7E]/,F=/[\x2E\u3002\uFF0E\uFF61]/g,L={overflow:"Overflow: input needs wider integers to process","not-basic":"Illegal input >= 0x80 (not a basic code point)","invalid-input":"Invalid input"},B=E-S,I=Math.floor,N=String.fromCharCode;if(b={version:"1.3.2",ucs2:{decode:h,encode:u},decode:d,encode:f,toASCII:g,toUnicode:v},"function"==typeof t&&"object"==typeof t.amd&&t.amd)t("punycode",function(){return b});else if(m&&y)if(r.exports==m)y.exports=b;else for(_ in b)b.hasOwnProperty(_)&&(m[_]=b[_]);else n.punycode=b}(this)}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{}],20:[function(t,e,r){"use strict";function i(t,e){return Object.prototype.hasOwnProperty.call(t,e)}e.exports=function(t,e,r,o){e=e||"&",r=r||"=";var s={};if("string"!=typeof t||0===t.length)return s;var a=/\+/g;t=t.split(e);var h=1e3;o&&"number"==typeof o.maxKeys&&(h=o.maxKeys);var u=t.length;h>0&&u>h&&(u=h);for(var l=0;u>l;++l){var c,p,d,f,v=t[l].replace(a,"%20"),g=v.indexOf(r);g>=0?(c=v.substr(0,g),p=v.substr(g+1)):(c=v,p=""),d=decodeURIComponent(c), +f=decodeURIComponent(p),i(s,d)?n(s[d])?s[d].push(f):s[d]=[s[d],f]:s[d]=f}return s};var n=Array.isArray||function(t){return"[object Array]"===Object.prototype.toString.call(t)}},{}],21:[function(t,e,r){"use strict";function i(t,e){if(t.map)return t.map(e);for(var r=[],i=0;i",'"',"`"," ","\r","\n"," "],g=["{","}","|","\\","^","`"].concat(v),m=["'"].concat(g),y=["%","/","?",";","#"].concat(m),x=["/","?","#"],b=255,_=/^[a-z0-9A-Z_-]{0,63}$/,T=/^([a-z0-9A-Z_-]{0,63})(.*)$/,E={javascript:!0,"javascript:":!0},S={javascript:!0,"javascript:":!0},w={http:!0,https:!0,ftp:!0,gopher:!0,file:!0,"http:":!0,"https:":!0,"ftp:":!0,"gopher:":!0,"file:":!0},C=t("querystring");i.prototype.parse=function(t,e,r){if(!h(t))throw new TypeError("Parameter 'url' must be a string, not "+typeof t);var i=t;i=i.trim();var n=d.exec(i);if(n){n=n[0];var o=n.toLowerCase();this.protocol=o,i=i.substr(n.length)}if(r||n||i.match(/^\/\/[^@\/]+@[^@\/]+/)){var s="//"===i.substr(0,2);!s||n&&S[n]||(i=i.substr(2),this.slashes=!0)}if(!S[n]&&(s||n&&!w[n])){for(var a=-1,u=0;ul)&&(a=l)}var c,f;f=-1===a?i.lastIndexOf("@"):i.lastIndexOf("@",a),-1!==f&&(c=i.slice(0,f),i=i.slice(f+1),this.auth=decodeURIComponent(c)),a=-1;for(var u=0;ul)&&(a=l)}-1===a&&(a=i.length),this.host=i.slice(0,a),i=i.slice(a),this.parseHost(),this.hostname=this.hostname||"";var v="["===this.hostname[0]&&"]"===this.hostname[this.hostname.length-1];if(!v)for(var g=this.hostname.split(/\./),u=0,A=g.length;A>u;u++){var M=g[u];if(M&&!M.match(_)){for(var R="",O=0,P=M.length;P>O;O++)R+=M.charCodeAt(O)>127?"x":M[O];if(!R.match(_)){var D=g.slice(0,u),F=g.slice(u+1),L=M.match(T);L&&(D.push(L[1]),F.unshift(L[2])),F.length&&(i="/"+F.join(".")+i),this.hostname=D.join(".");break}}}if(this.hostname.length>b?this.hostname="":this.hostname=this.hostname.toLowerCase(),!v){for(var B=this.hostname.split("."),I=[],u=0;uu;u++){var j=m[u],G=encodeURIComponent(j);G===j&&(G=escape(j)),i=i.split(j).join(G)}var X=i.indexOf("#");-1!==X&&(this.hash=i.substr(X),i=i.slice(0,X));var Y=i.indexOf("?");if(-1!==Y?(this.search=i.substr(Y),this.query=i.substr(Y+1),e&&(this.query=C.parse(this.query)),i=i.slice(0,Y)):e&&(this.search="",this.query={}),i&&(this.pathname=i),w[o]&&this.hostname&&!this.pathname&&(this.pathname="/"),this.pathname||this.search){var U=this.pathname||"",N=this.search||"";this.path=U+N}return this.href=this.format(),this},i.prototype.format=function(){var t=this.auth||"";t&&(t=encodeURIComponent(t),t=t.replace(/%3A/i,":"),t+="@");var e=this.protocol||"",r=this.pathname||"",i=this.hash||"",n=!1,o="";this.host?n=t+this.host:this.hostname&&(n=t+(-1===this.hostname.indexOf(":")?this.hostname:"["+this.hostname+"]"),this.port&&(n+=":"+this.port)),this.query&&u(this.query)&&Object.keys(this.query).length&&(o=C.stringify(this.query));var s=this.search||o&&"?"+o||"";return e&&":"!==e.substr(-1)&&(e+=":"),this.slashes||(!e||w[e])&&n!==!1?(n="//"+(n||""),r&&"/"!==r.charAt(0)&&(r="/"+r)):n||(n=""),i&&"#"!==i.charAt(0)&&(i="#"+i),s&&"?"!==s.charAt(0)&&(s="?"+s),r=r.replace(/[?#]/g,function(t){return encodeURIComponent(t)}),s=s.replace("#","%23"),e+n+r+s+i},i.prototype.resolve=function(t){return this.resolveObject(n(t,!1,!0)).format()},i.prototype.resolveObject=function(t){if(h(t)){var e=new i;e.parse(t,!1,!0),t=e}var r=new i;if(Object.keys(this).forEach(function(t){r[t]=this[t]},this),r.hash=t.hash,""===t.href)return r.href=r.format(),r;if(t.slashes&&!t.protocol)return Object.keys(t).forEach(function(e){"protocol"!==e&&(r[e]=t[e])}),w[r.protocol]&&r.hostname&&!r.pathname&&(r.path=r.pathname="/"),r.href=r.format(),r;if(t.protocol&&t.protocol!==r.protocol){if(!w[t.protocol])return Object.keys(t).forEach(function(e){r[e]=t[e]}),r.href=r.format(),r;if(r.protocol=t.protocol,t.host||S[t.protocol])r.pathname=t.pathname;else{for(var n=(t.pathname||"").split("/");n.length&&!(t.host=n.shift()););t.host||(t.host=""),t.hostname||(t.hostname=""),""!==n[0]&&n.unshift(""),n.length<2&&n.unshift(""),r.pathname=n.join("/")}if(r.search=t.search,r.query=t.query,r.host=t.host||"",r.auth=t.auth,r.hostname=t.hostname||t.host,r.port=t.port,r.pathname||r.search){var o=r.pathname||"",s=r.search||"";r.path=o+s}return r.slashes=r.slashes||t.slashes,r.href=r.format(),r}var a=r.pathname&&"/"===r.pathname.charAt(0),u=t.host||t.pathname&&"/"===t.pathname.charAt(0),p=u||a||r.host&&t.pathname,d=p,f=r.pathname&&r.pathname.split("/")||[],n=t.pathname&&t.pathname.split("/")||[],v=r.protocol&&!w[r.protocol];if(v&&(r.hostname="",r.port=null,r.host&&(""===f[0]?f[0]=r.host:f.unshift(r.host)),r.host="",t.protocol&&(t.hostname=null,t.port=null,t.host&&(""===n[0]?n[0]=t.host:n.unshift(t.host)),t.host=null),p=p&&(""===n[0]||""===f[0])),u)r.host=t.host||""===t.host?t.host:r.host,r.hostname=t.hostname||""===t.hostname?t.hostname:r.hostname,r.search=t.search,r.query=t.query,f=n;else if(n.length)f||(f=[]),f.pop(),f=f.concat(n),r.search=t.search,r.query=t.query;else if(!c(t.search)){if(v){r.hostname=r.host=f.shift();var g=r.host&&r.host.indexOf("@")>0?r.host.split("@"):!1;g&&(r.auth=g.shift(),r.host=r.hostname=g.shift())}return r.search=t.search,r.query=t.query,l(r.pathname)&&l(r.search)||(r.path=(r.pathname?r.pathname:"")+(r.search?r.search:"")),r.href=r.format(),r}if(!f.length)return r.pathname=null,r.search?r.path="/"+r.search:r.path=null,r.href=r.format(),r;for(var m=f.slice(-1)[0],y=(r.host||t.host)&&("."===m||".."===m)||""===m,x=0,b=f.length;b>=0;b--)m=f[b],"."==m?f.splice(b,1):".."===m?(f.splice(b,1),x++):x&&(f.splice(b,1),x--);if(!p&&!d)for(;x--;x)f.unshift("..");!p||""===f[0]||f[0]&&"/"===f[0].charAt(0)||f.unshift(""),y&&"/"!==f.join("/").substr(-1)&&f.push("");var _=""===f[0]||f[0]&&"/"===f[0].charAt(0);if(v){r.hostname=r.host=_?"":f.length?f.shift():"";var g=r.host&&r.host.indexOf("@")>0?r.host.split("@"):!1;g&&(r.auth=g.shift(),r.host=r.hostname=g.shift())}return p=p||r.host&&f.length,p&&!_&&f.unshift(""),f.length?r.pathname=f.join("/"):(r.pathname=null,r.path=null),l(r.pathname)&&l(r.search)||(r.path=(r.pathname?r.pathname:"")+(r.search?r.search:"")),r.auth=t.auth||r.auth,r.slashes=r.slashes||t.slashes,r.href=r.format(),r},i.prototype.parseHost=function(){var t=this.host,e=f.exec(t);e&&(e=e[0],":"!==e&&(this.port=e.substr(1)),t=t.substr(0,t.length-e.length)),t&&(this.hostname=t)}},{punycode:19,querystring:22}],24:[function(t,e,r){"use strict";function i(t,e,r){r=r||2;var i=e&&e.length,o=i?e[0]*r:t.length,a=n(t,0,o,r,!0),h=[];if(!a)return h;var u,l,p,d,f,v,g;if(i&&(a=c(t,e,a,r)),t.length>80*r){u=p=t[0],l=d=t[1];for(var m=r;o>m;m+=r)f=t[m],v=t[m+1],u>f&&(u=f),l>v&&(l=v),f>p&&(p=f),v>d&&(d=v);g=Math.max(p-u,d-l)}return s(a,h,r,u,l,g),h}function n(t,e,r,i,n){var o,s,a,h=0;for(o=e,s=r-i;r>o;o+=i)h+=(t[s]-t[o])*(t[o+1]+t[s+1]),s=o;if(n===h>0)for(o=e;r>o;o+=i)a=M(o,t[o],t[o+1],a);else for(o=r-i;o>=e;o-=i)a=M(o,t[o],t[o+1],a);return a}function o(t,e){if(!t)return t;e||(e=t);var r,i=t;do if(r=!1,i.steiner||!T(i,i.next)&&0!==_(i.prev,i,i.next))i=i.next;else{if(R(i),i=e=i.prev,i===i.next)return null;r=!0}while(r||i!==e);return e}function s(t,e,r,i,n,c,p){if(t){!p&&c&&v(t,i,n,c);for(var d,f,g=t;t.prev!==t.next;)if(d=t.prev,f=t.next,c?h(t,i,n,c):a(t))e.push(d.i/r),e.push(t.i/r),e.push(f.i/r),R(t),t=f.next,g=f.next;else if(t=f,t===g){p?1===p?(t=u(t,e,r),s(t,e,r,i,n,c,2)):2===p&&l(t,e,r,i,n,c):s(o(t),e,r,i,n,c,1);break}}}function a(t){var e=t.prev,r=t,i=t.next;if(_(e,r,i)>=0)return!1;for(var n=t.next.next;n!==t.prev;){if(x(e.x,e.y,r.x,r.y,i.x,i.y,n.x,n.y)&&_(n.prev,n,n.next)>=0)return!1;n=n.next}return!0}function h(t,e,r,i){var n=t.prev,o=t,s=t.next;if(_(n,o,s)>=0)return!1;for(var a=n.xo.x?n.x>s.x?n.x:s.x:o.x>s.x?o.x:s.x,l=n.y>o.y?n.y>s.y?n.y:s.y:o.y>s.y?o.y:s.y,c=m(a,h,e,r,i),p=m(u,l,e,r,i),d=t.nextZ;d&&d.z<=p;){if(d!==t.prev&&d!==t.next&&x(n.x,n.y,o.x,o.y,s.x,s.y,d.x,d.y)&&_(d.prev,d,d.next)>=0)return!1;d=d.nextZ}for(d=t.prevZ;d&&d.z>=c;){if(d!==t.prev&&d!==t.next&&x(n.x,n.y,o.x,o.y,s.x,s.y,d.x,d.y)&&_(d.prev,d,d.next)>=0)return!1;d=d.prevZ}return!0}function u(t,e,r){var i=t;do{var n=i.prev,o=i.next.next;E(n,i,i.next,o)&&w(n,o)&&w(o,n)&&(e.push(n.i/r),e.push(i.i/r),e.push(o.i/r),R(i),R(i.next),i=t=o),i=i.next}while(i!==t);return i}function l(t,e,r,i,n,a){var h=t;do{for(var u=h.next.next;u!==h.prev;){if(h.i!==u.i&&b(h,u)){var l=A(h,u);return h=o(h,h.next),l=o(l,l.next),s(h,e,r,i,n,a),void s(l,e,r,i,n,a)}u=u.next}h=h.next}while(h!==t)}function c(t,e,r,i){var s,a,h,u,l,c=[];for(s=0,a=e.length;a>s;s++)h=e[s]*i,u=a-1>s?e[s+1]*i:t.length,l=n(t,h,u,i,!1),l===l.next&&(l.steiner=!0),c.push(y(l));for(c.sort(p),s=0;s=i.next.y){var a=i.x+(o-i.y)*(i.next.x-i.x)/(i.next.y-i.y);n>=a&&a>s&&(s=a,r=i.x=i.x&&i.x>=r.x&&x(oh||h===l&&i.x>r.x)&&w(i,t)&&(r=i,l=h)),i=i.next;return r}function v(t,e,r,i){var n=t;do null===n.z&&(n.z=m(n.x,n.y,e,r,i)),n.prevZ=n.prev,n.nextZ=n.next,n=n.next;while(n!==t);n.prevZ.nextZ=null,n.prevZ=null,g(n)}function g(t){var e,r,i,n,o,s,a,h,u=1;do{for(r=t,t=null,o=null,s=0;r;){for(s++,i=r,a=0,e=0;u>e&&(a++,i=i.nextZ,i);e++);for(h=u;a>0||h>0&&i;)0===a?(n=i,i=i.nextZ,h--):0!==h&&i?r.z<=i.z?(n=r,r=r.nextZ,a--):(n=i,i=i.nextZ,h--):(n=r,r=r.nextZ,a--),o?o.nextZ=n:t=n,n.prevZ=o,o=n;r=i}o.nextZ=null,u*=2}while(s>1);return t}function m(t,e,r,i,n){return t=32767*(t-r)/n,e=32767*(e-i)/n,t=16711935&(t|t<<8),t=252645135&(t|t<<4),t=858993459&(t|t<<2),t=1431655765&(t|t<<1),e=16711935&(e|e<<8),e=252645135&(e|e<<4),e=858993459&(e|e<<2),e=1431655765&(e|e<<1),t|e<<1}function y(t){var e=t,r=t;do e.x=0&&(t-s)*(i-a)-(r-s)*(e-a)>=0&&(r-s)*(o-a)-(n-s)*(i-a)>=0}function b(t,e){return T(t,e)||t.next.i!==e.i&&t.prev.i!==e.i&&!S(t,e)&&w(t,e)&&w(e,t)&&C(t,e)}function _(t,e,r){return(e.y-t.y)*(r.x-e.x)-(e.x-t.x)*(r.y-e.y)}function T(t,e){return t.x===e.x&&t.y===e.y}function E(t,e,r,i){return _(t,e,r)>0!=_(t,e,i)>0&&_(r,i,t)>0!=_(r,i,e)>0}function S(t,e){var r=t;do{if(r.i!==t.i&&r.next.i!==t.i&&r.i!==e.i&&r.next.i!==e.i&&E(r,r.next,t,e))return!0;r=r.next}while(r!==t);return!1}function w(t,e){return _(t.prev,t,t.next)<0?_(t,e,t.next)>=0&&_(t,t.prev,e)>=0:_(t,e,t.prev)<0||_(t,t.next,e)<0}function C(t,e){var r=t,i=!1,n=(t.x+e.x)/2,o=(t.y+e.y)/2;do r.y>o!=r.next.y>o&&n<(r.next.x-r.x)*(o-r.y)/(r.next.y-r.y)+r.x&&(i=!i),r=r.next;while(r!==t);return i}function A(t,e){var r=new O(t.i,t.x,t.y),i=new O(e.i,e.x,e.y),n=t.next,o=e.prev;return t.next=e,e.prev=t,r.next=n,n.prev=r,i.next=r,r.prev=i,o.next=i,i.prev=o,i}function M(t,e,r,i){var n=new O(t,e,r);return i?(n.next=i.next,n.prev=i,i.next.prev=n,i.next=n):(n.prev=n,n.next=n),n}function R(t){t.next.prev=t.prev,t.prev.next=t.next,t.prevZ&&(t.prevZ.nextZ=t.nextZ),t.nextZ&&(t.nextZ.prevZ=t.prevZ)}function O(t,e,r){this.i=t,this.x=e,this.y=r,this.prev=null,this.next=null,this.z=null,this.prevZ=null,this.nextZ=null,this.steiner=!1}e.exports=i},{}],25:[function(t,e,r){"use strict";function i(t,e,r){this.fn=t,this.context=e,this.once=r||!1}function n(){}var o="function"!=typeof Object.create?"~":!1;n.prototype._events=void 0,n.prototype.listeners=function(t,e){var r=o?o+t:t,i=this._events&&this._events[r];if(e)return!!i;if(!i)return[];if(i.fn)return[i.fn];for(var n=0,s=i.length,a=new Array(s);s>n;n++)a[n]=i[n].fn;return a},n.prototype.emit=function(t,e,r,i,n,s){var a=o?o+t:t;if(!this._events||!this._events[a])return!1;var h,u,l=this._events[a],c=arguments.length;if("function"==typeof l.fn){switch(l.once&&this.removeListener(t,l.fn,void 0,!0),c){case 1:return l.fn.call(l.context),!0;case 2:return l.fn.call(l.context,e),!0;case 3:return l.fn.call(l.context,e,r),!0;case 4:return l.fn.call(l.context,e,r,i),!0;case 5:return l.fn.call(l.context,e,r,i,n),!0;case 6:return l.fn.call(l.context,e,r,i,n,s),!0}for(u=1,h=new Array(c-1);c>u;u++)h[u-1]=arguments[u];l.fn.apply(l.context,h)}else{var p,d=l.length;for(u=0;d>u;u++)switch(l[u].once&&this.removeListener(t,l[u].fn,void 0,!0),c){case 1:l[u].fn.call(l[u].context);break;case 2:l[u].fn.call(l[u].context,e);break;case 3:l[u].fn.call(l[u].context,e,r);break;default:if(!h)for(p=1,h=new Array(c-1);c>p;p++)h[p-1]=arguments[p];l[u].fn.apply(l[u].context,h)}}return!0},n.prototype.on=function(t,e,r){var n=new i(e,r||this),s=o?o+t:t;return this._events||(this._events=o?{}:Object.create(null)),this._events[s]?this._events[s].fn?this._events[s]=[this._events[s],n]:this._events[s].push(n):this._events[s]=n,this},n.prototype.once=function(t,e,r){var n=new i(e,r||this,!0),s=o?o+t:t;return this._events||(this._events=o?{}:Object.create(null)),this._events[s]?this._events[s].fn?this._events[s]=[this._events[s],n]:this._events[s].push(n):this._events[s]=n,this},n.prototype.removeListener=function(t,e,r,i){var n=o?o+t:t;if(!this._events||!this._events[n])return this;var s=this._events[n],a=[];if(e)if(s.fn)(s.fn!==e||i&&!s.once||r&&s.context!==r)&&a.push(s);else for(var h=0,u=s.length;u>h;h++)(s[h].fn!==e||i&&!s[h].once||r&&s[h].context!==r)&&a.push(s[h]);return a.length?this._events[n]=1===a.length?a[0]:a:delete this._events[n],this},n.prototype.removeAllListeners=function(t){return this._events?(t?delete this._events[o?o+t:t]:this._events=o?{}:Object.create(null),this):this},n.prototype.off=n.prototype.removeListener,n.prototype.addListener=n.prototype.on,n.prototype.setMaxListeners=function(){return this},n.prefixed=o,"undefined"!=typeof e&&(e.exports=n)},{}],26:[function(t,e,r){"use strict";function i(t){if(null===t||void 0===t)throw new TypeError("Object.assign cannot be called with null or undefined");return Object(t)}var n=Object.prototype.hasOwnProperty,o=Object.prototype.propertyIsEnumerable;e.exports=Object.assign||function(t,e){for(var r,s,a=i(t),h=1;h=t.length&&r())}if(r=r||function(){},!t.length)return r();var o=0;u(t,function(t){e(t,i(n))})},s.forEach=s.each,s.eachSeries=function(t,e,r){if(r=r||function(){},!t.length)return r();var i=0,n=function(){e(t[i],function(e){e?(r(e),r=function(){}):(i+=1,i>=t.length?r():n())})};n()},s.forEachSeries=s.eachSeries,s.eachLimit=function(t,e,r,i){var n=d(e);n.apply(null,[t,r,i])},s.forEachLimit=s.eachLimit;var d=function(t){return function(e,r,i){if(i=i||function(){},!e.length||0>=t)return i();var n=0,o=0,s=0;!function a(){if(n>=e.length)return i();for(;t>s&&o=e.length?i():a())})}()}},f=function(t){return function(){var e=Array.prototype.slice.call(arguments);return t.apply(null,[s.each].concat(e))}},v=function(t,e){return function(){var r=Array.prototype.slice.call(arguments);return e.apply(null,[d(t)].concat(r))}},g=function(t){return function(){var e=Array.prototype.slice.call(arguments);return t.apply(null,[s.eachSeries].concat(e))}},m=function(t,e,r,i){if(e=l(e,function(t,e){return{index:e,value:t}}),i){var n=[];t(e,function(t,e){r(t.value,function(r,i){n[t.index]=i,e(r)})},function(t){i(t,n)})}else t(e,function(t,e){r(t.value,function(t){e(t)})})};s.map=f(m),s.mapSeries=g(m),s.mapLimit=function(t,e,r,i){return y(e)(t,r,i)};var y=function(t){return v(t,m)};s.reduce=function(t,e,r,i){s.eachSeries(t,function(t,i){r(e,t,function(t,r){e=r,i(t)})},function(t){i(t,e)})},s.inject=s.reduce,s.foldl=s.reduce,s.reduceRight=function(t,e,r,i){var n=l(t,function(t){return t}).reverse();s.reduce(n,e,r,i)},s.foldr=s.reduceRight;var x=function(t,e,r,i){var n=[];e=l(e,function(t,e){return{index:e,value:t}}),t(e,function(t,e){r(t.value,function(r){r&&n.push(t),e()})},function(t){i(l(n.sort(function(t,e){return t.index-e.index}),function(t){return t.value}))})};s.filter=f(x),s.filterSeries=g(x),s.select=s.filter,s.selectSeries=s.filterSeries;var b=function(t,e,r,i){var n=[];e=l(e,function(t,e){return{index:e,value:t}}),t(e,function(t,e){r(t.value,function(r){r||n.push(t),e()})},function(t){i(l(n.sort(function(t,e){return t.index-e.index}),function(t){return t.value}))})};s.reject=f(b),s.rejectSeries=g(b);var _=function(t,e,r,i){t(e,function(t,e){r(t,function(r){r?(i(t),i=function(){}):e()})},function(t){i()})};s.detect=f(_),s.detectSeries=g(_),s.some=function(t,e,r){s.each(t,function(t,i){e(t,function(t){t&&(r(!0),r=function(){}),i()})},function(t){r(!1)})},s.any=s.some,s.every=function(t,e,r){s.each(t,function(t,i){e(t,function(t){t||(r(!1),r=function(){}),i()})},function(t){r(!0)})},s.all=s.every,s.sortBy=function(t,e,r){s.map(t,function(t,r){e(t,function(e,i){e?r(e):r(null,{value:t,criteria:i})})},function(t,e){if(t)return r(t);var i=function(t,e){var r=t.criteria,i=e.criteria;return i>r?-1:r>i?1:0};r(null,l(e.sort(i),function(t){return t.value}))})},s.auto=function(t,e){e=e||function(){};var r=p(t),i=r.length;if(!i)return e();var n={},o=[],a=function(t){o.unshift(t)},l=function(t){for(var e=0;ei;){var o=i+(n-i+1>>>1);r(e,t[o])>=0?i=o:n=o-1}return i}function n(t,e,n,o){return t.started||(t.started=!0),h(e)||(e=[e]),0==e.length?s.setImmediate(function(){t.drain&&t.drain()}):void u(e,function(e){var a={data:e,priority:n,callback:"function"==typeof o?o:null};t.tasks.splice(i(t.tasks,a,r)+1,0,a),t.saturated&&t.tasks.length===t.concurrency&&t.saturated(),s.setImmediate(t.process)})}var o=s.queue(t,e);return o.push=function(t,e,r){n(o,t,e,r)},delete o.unshift,o},s.cargo=function(t,e){var r=!1,i=[],n={tasks:i,payload:e,saturated:null,empty:null,drain:null,drained:!0,push:function(t,r){h(t)||(t=[t]),u(t,function(t){i.push({data:t,callback:"function"==typeof r?r:null}),n.drained=!1,n.saturated&&i.length===e&&n.saturated()}),s.setImmediate(n.process)},process:function o(){if(!r){if(0===i.length)return n.drain&&!n.drained&&n.drain(),void(n.drained=!0);var s="number"==typeof e?i.splice(0,e):i.splice(0,i.length),a=l(s,function(t){return t.data});n.empty&&n.empty(),r=!0,t(a,function(){r=!1;var t=arguments;u(s,function(e){e.callback&&e.callback.apply(null,t)}),o()})}},length:function(){return i.length},running:function(){return r}};return n};var S=function(t){return function(e){var r=Array.prototype.slice.call(arguments,1);e.apply(null,r.concat([function(e){var r=Array.prototype.slice.call(arguments,1);"undefined"!=typeof console&&(e?console.error&&console.error(e):console[t]&&u(r,function(e){console[t](e)}))}]))}};s.log=S("log"),s.dir=S("dir"),s.memoize=function(t,e){var r={},i={};e=e||function(t){return t};var n=function(){var n=Array.prototype.slice.call(arguments),o=n.pop(),a=e.apply(null,n);a in r?s.nextTick(function(){o.apply(null,r[a])}):a in i?i[a].push(o):(i[a]=[o],t.apply(null,n.concat([function(){r[a]=arguments;var t=i[a];delete i[a];for(var e=0,n=t.length;n>e;e++)t[e].apply(null,arguments)}])))};return n.memo=r,n.unmemoized=t,n},s.unmemoize=function(t){return function(){return(t.unmemoized||t).apply(null,arguments)}},s.times=function(t,e,r){for(var i=[],n=0;t>n;n++)i.push(n);return s.map(i,e,r)},s.timesSeries=function(t,e,r){for(var i=[],n=0;t>n;n++)i.push(n);return s.mapSeries(i,e,r)},s.seq=function(){var t=arguments;return function(){var e=this,r=Array.prototype.slice.call(arguments),i=r.pop();s.reduce(t,r,function(t,r,i){r.apply(e,t.concat([function(){var t=arguments[0],e=Array.prototype.slice.call(arguments,1);i(t,e)}]))},function(t,r){i.apply(e,[t].concat(r))})}},s.compose=function(){return s.seq.apply(null,Array.prototype.reverse.call(arguments))};var w=function(t,e){var r=function(){var r=this,i=Array.prototype.slice.call(arguments),n=i.pop();return t(e,function(t,e){t.apply(r,i.concat([e]))},n)};if(arguments.length>2){var i=Array.prototype.slice.call(arguments,2);return r.apply(this,i)}return r};s.applyEach=f(w),s.applyEachSeries=g(w),s.forever=function(t,e){function r(i){if(i){if(e)return e(i);throw i}t(r)}r()},"undefined"!=typeof r&&r.exports?r.exports=s:"undefined"!=typeof t&&t.amd?t([],function(){return s}):n.async=s}()}).call(this,e("_process"))},{_process:18}],28:[function(t,e,r){function i(t,e){a.call(this),e=e||10,this.baseUrl=t||"",this.progress=0,this.loading=!1,this._progressChunk=0,this._beforeMiddleware=[],this._afterMiddleware=[],this._boundLoadResource=this._loadResource.bind(this),this._boundOnLoad=this._onLoad.bind(this),this._buffer=[],this._numToLoad=0,this._queue=n.queue(this._boundLoadResource,e),this.resources={}}var n=t("async"),o=t("url"),s=t("./Resource"),a=t("eventemitter3");i.prototype=Object.create(a.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.add=i.prototype.enqueue=function(t,e,r,i){if(Array.isArray(t)){for(var n=0;n0)if(this.xhrType===i.XHR_RESPONSE_TYPE.TEXT)this.data=t.responseText;else if(this.xhrType===i.XHR_RESPONSE_TYPE.JSON)try{this.data=JSON.parse(t.responseText),this.isJson=!0}catch(r){this.error=new Error("Error trying to parse loaded json:",r)}else if(this.xhrType===i.XHR_RESPONSE_TYPE.DOCUMENT)try{if(window.DOMParser){var n=new DOMParser;this.data=n.parseFromString(t.responseText,"text/xml")}else{var o=document.createElement("div");o.innerHTML=t.responseText,this.data=o}this.isXml=!0}catch(r){this.error=new Error("Error trying to parse loaded xml:",r)}else this.data=t.response||t.responseText;else this.error=new Error("["+t.status+"]"+t.statusText+":"+t.responseURL);this.complete()},i.prototype._determineCrossOrigin=function(t,e){if(0===t.indexOf("data:"))return"";e=e||window.location,u||(u=document.createElement("a")),u.href=t,t=a.parse(u.href);var r=!t.port&&""===e.port||t.port===e.port;return t.hostname===e.hostname&&r&&t.protocol===e.protocol?"":"anonymous"},i.prototype._determineXhrType=function(){return i._xhrTypeMap[this._getExtension()]||i.XHR_RESPONSE_TYPE.TEXT},i.prototype._determineLoadType=function(){return i._loadTypeMap[this._getExtension()]||i.LOAD_TYPE.XHR},i.prototype._getExtension=function(){var t,e=this.url;if(this.isDataUrl){var r=e.indexOf("/");t=e.substring(r+1,e.indexOf(";",r))}else{var i=e.indexOf("?");-1!==i&&(e=e.substring(0,i)),t=e.substring(e.lastIndexOf(".")+1)}return t},i.prototype._getMimeFromXhrType=function(t){switch(t){case i.XHR_RESPONSE_TYPE.BUFFER:return"application/octet-binary";case i.XHR_RESPONSE_TYPE.BLOB:return"application/blob";case i.XHR_RESPONSE_TYPE.DOCUMENT:return"application/xml";case i.XHR_RESPONSE_TYPE.JSON:return"application/json";case i.XHR_RESPONSE_TYPE.DEFAULT:case i.XHR_RESPONSE_TYPE.TEXT:default:return"text/plain"}},i.LOAD_TYPE={XHR:1,IMAGE:2,AUDIO:3,VIDEO:4},i.XHR_READY_STATE={UNSENT:0,OPENED:1,HEADERS_RECEIVED:2,LOADING:3,DONE:4},i.XHR_RESPONSE_TYPE={DEFAULT:"text",BUFFER:"arraybuffer",BLOB:"blob",DOCUMENT:"document",JSON:"json",TEXT:"text"},i._loadTypeMap={gif:i.LOAD_TYPE.IMAGE,png:i.LOAD_TYPE.IMAGE,bmp:i.LOAD_TYPE.IMAGE,jpg:i.LOAD_TYPE.IMAGE,jpeg:i.LOAD_TYPE.IMAGE,tif:i.LOAD_TYPE.IMAGE,tiff:i.LOAD_TYPE.IMAGE,webp:i.LOAD_TYPE.IMAGE,tga:i.LOAD_TYPE.IMAGE},i._xhrTypeMap={xhtml:i.XHR_RESPONSE_TYPE.DOCUMENT,html:i.XHR_RESPONSE_TYPE.DOCUMENT,htm:i.XHR_RESPONSE_TYPE.DOCUMENT,xml:i.XHR_RESPONSE_TYPE.DOCUMENT,tmx:i.XHR_RESPONSE_TYPE.DOCUMENT,tsx:i.XHR_RESPONSE_TYPE.DOCUMENT,svg:i.XHR_RESPONSE_TYPE.DOCUMENT,gif:i.XHR_RESPONSE_TYPE.BLOB,png:i.XHR_RESPONSE_TYPE.BLOB,bmp:i.XHR_RESPONSE_TYPE.BLOB,jpg:i.XHR_RESPONSE_TYPE.BLOB,jpeg:i.XHR_RESPONSE_TYPE.BLOB,tif:i.XHR_RESPONSE_TYPE.BLOB,tiff:i.XHR_RESPONSE_TYPE.BLOB,webp:i.XHR_RESPONSE_TYPE.BLOB,tga:i.XHR_RESPONSE_TYPE.BLOB,json:i.XHR_RESPONSE_TYPE.JSON,text:i.XHR_RESPONSE_TYPE.TEXT,txt:i.XHR_RESPONSE_TYPE.TEXT},i.setExtensionLoadType=function(t,e){o(i._loadTypeMap,t,e)},i.setExtensionXhrType=function(t,e){o(i._xhrTypeMap,t,e)}},{eventemitter3:25,url:23}],30:[function(t,e,r){e.exports={_keyStr:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",encodeBinary:function(t){for(var e,r="",i=new Array(4),n=0,o=0,s=0;n>2,i[1]=(3&e[0])<<4|e[1]>>4,i[2]=(15&e[1])<<2|e[2]>>6,i[3]=63&e[2],s=n-(t.length-1)){case 2:i[3]=64,i[2]=64;break;case 1:i[3]=64}for(o=0;o","Richard Davey "],main:"./src/index.js",homepage:"http://goodboydigital.com/",bugs:"https://github.com/pixijs/pixi.js/issues",license:"MIT",repository:{type:"git",url:"https://github.com/pixijs/pixi.js.git"},scripts:{start:"gulp && gulp watch",test:"gulp && testem ci",build:"gulp",docs:"jsdoc -c ./gulp/util/jsdoc.conf.json -R README.md"},files:["bin/","src/","CONTRIBUTING.md","LICENSE","package.json","README.md"],dependencies:{async:"^1.5.0",brfs:"^1.4.1",earcut:"^2.0.7",eventemitter3:"^1.1.1","object-assign":"^4.0.1","pixi-gl-core":"git+https://github.com/GoodBoyDigital/pixi-gl-core.git","resource-loader":"^1.6.4"},devDependencies:{browserify:"^11.1.0",chai:"^3.2.0",del:"^2.0.2",gulp:"^3.9.0","gulp-cached":"^1.1.0","gulp-concat":"^2.6.0","gulp-debug":"^2.1.0","gulp-header":"^1.7.1","gulp-jshint":"^1.11.2","gulp-mirror":"^0.4.0","gulp-plumber":"^1.0.1","gulp-rename":"^1.2.2","gulp-sourcemaps":"^1.5.2","gulp-uglify":"^1.4.1","gulp-util":"^3.0.6","jaguarjs-jsdoc":"git+https://github.com/davidshimjs/jaguarjs-jsdoc.git",jsdoc:"^3.3.2","jshint-summary":"^0.4.0",minimist:"^1.2.0",mocha:"^2.3.2","require-dir":"^0.3.0","run-sequence":"^1.1.2",testem:"^0.9.4","vinyl-buffer":"^1.0.0","vinyl-source-stream":"^1.1.0",watchify:"^3.4.0"},browserify:{transform:["brfs"]}}},{}],35:[function(t,e,r){function i(t){var e=document.createElement("div");e.style.width="100px",e.style.height="100px",e.style.position="absolute",e.style.top=0,e.style.left=0,e.style.zIndex=2,this.div=e,this.pool=[],this.renderId=0,this.debug=!1,this.renderer=t,this.children=[],this._onKeyDown=this._onKeyDown.bind(this),this._onMouseMove=this._onMouseMove.bind(this),this.isActive=!1,window.addEventListener("keydown",this._onKeyDown,!1)}var n=t("../core");Object.assign(n.DisplayObject.prototype,t("./accessibleTarget")),i.prototype.constructor=i,e.exports=i,i.prototype.activate=function(){this.isActive||(this.isActive=!0,window.document.addEventListener("mousemove",this._onMouseMove,!0),window.removeEventListener("keydown",this._onKeyDown,!1),this.renderer.on("postrender",this.update,this),this.renderer.view.parentNode.appendChild(this.div))},i.prototype.deactivate=function(){this.isActive&&(this.isActive=!1,window.document.removeEventListener("mousemove",this._onMouseMove),window.addEventListener("keydown",this._onKeyDown,!1),this.renderer.off("postrender",this.update),this.div.parentNode.removeChild(this.div))},i.prototype.updateAccessibleObjects=function(t){if(t.visible){t.accessible&&t.interactive&&(t._accessibleActive||this.addChild(t),t.renderId=this.renderId);for(var e=t.children,r=e.length-1;r>=0;r--)this.updateAccessibleObjects(e[r])}},i.prototype.update=function(){this.updateAccessibleObjects(this.renderer._lastObjectRendered);var t=this.renderer.view.getBoundingClientRect(),e=t.width/this.renderer.width,r=t.height/this.renderer.height,i=this.div;i.style.left=t.left+"px",i.style.top=t.top+"px",i.style.width=this.renderer.width+"px",i.style.height=this.renderer.height+"px";for(var o=0;othis.renderer.width&&(t.width=this.renderer.width-t.x),t.y+t.height>this.renderer.height&&(t.height=this.renderer.height-t.y)},i.prototype.addChild=function(t){var e=this.pool.pop();e||(e=document.createElement("button"),e.style.width="100px",e.style.height="100px",e.style.backgroundColor=this.debug?"rgba(255,0,0,0.5)":"transparent",e.style.position="absolute",e.style.zIndex=2,e.style.borderStyle="none",e.addEventListener("click",this._onClick.bind(this)),e.addEventListener("focus",this._onFocus.bind(this)),e.addEventListener("focusout",this._onFocusOut.bind(this))),e.title=t.accessibleTitle||"displayObject "+this.tabIndex,t._accessibleActive=!0,t._accessibleDiv=e,e.displayObject=t,this.children.push(t),this.div.appendChild(t._accessibleDiv),t._accessibleDiv.tabIndex=t.tabIndex},i.prototype._onClick=function(t){var e=this.renderer.plugins.interaction;e.dispatchEvent(t.target.displayObject,"click",e.eventData)},i.prototype._onFocus=function(t){var e=this.renderer.plugins.interaction;e.dispatchEvent(t.target.displayObject,"mouseover",e.eventData)},i.prototype._onFocusOut=function(t){var e=this.renderer.plugins.interaction;e.dispatchEvent(t.target.displayObject,"mouseout",e.eventData)},i.prototype._onKeyDown=function(t){9===t.keyCode&&this.activate()},i.prototype._onMouseMove=function(){this.deactivate()},i.prototype.destroy=function(){this.div=null;for(var t=0;t1)for(var r=0;e>r;r++)this.addChild(arguments[r]);else t.parent&&t.parent.removeChild(t),t.parent=this,this.children.push(t),this.onChildrenChange(this.children.length-1),t.emit("added",this);return t},i.prototype.addChildAt=function(t,e){if(e>=0&&e<=this.children.length)return t.parent&&t.parent.removeChild(t),t.parent=this,this.children.splice(e,0,t),this.onChildrenChange(e),t.emit("added",this),t;throw new Error(t+"addChildAt: The index "+e+" supplied is out of bounds "+this.children.length)},i.prototype.swapChildren=function(t,e){if(t!==e){var r=this.getChildIndex(t),i=this.getChildIndex(e);if(0>r||0>i)throw new Error("swapChildren: Both the supplied DisplayObjects must be children of the caller.");this.children[r]=e,this.children[i]=t,this.onChildrenChange(i>r?r:i)}},i.prototype.getChildIndex=function(t){var e=this.children.indexOf(t);if(-1===e)throw new Error("The supplied DisplayObject must be a child of the caller");return e},i.prototype.setChildIndex=function(t,e){if(0>e||e>=this.children.length)throw new Error("The supplied index is out of bounds");var r=this.getChildIndex(t);o.removeItems(this.children,r,1),this.children.splice(e,0,t),this.onChildrenChange(e)},i.prototype.getChildAt=function(t){if(0>t||t>=this.children.length)throw new Error("getChildAt: Supplied index "+t+" does not exist in the child list, or the supplied DisplayObject is not a child of the caller");return this.children[t]},i.prototype.removeChild=function(t){var e=arguments.length;if(e>1)for(var r=0;e>r;r++)this.removeChild(arguments[r]);else{var i=this.children.indexOf(t);if(-1===i)return;t.parent=null,o.removeItems(this.children,i,1),this.onChildrenChange(i),t.emit("removed",this)}return t},i.prototype.removeChildAt=function(t){var e=this.getChildAt(t);return e.parent=null,o.removeItems(this.children,t,1),this.onChildrenChange(t),e.emit("removed",this),e},i.prototype.removeChildren=function(t,e){var r,i,n=t||0,o="number"==typeof e?e:this.children.length,s=o-n;if(s>0&&o>=s){for(r=this.children.splice(n,s),i=0;it;++t)this.children[t].updateTransform();this.dirtyTransform=!1}},i.prototype.containerUpdateTransform=i.prototype.updateTransform,i.prototype.getBounds=function(){if(!this._currentBounds){if(0===this.children.length)return n.Rectangle.EMPTY;for(var t,e,r,i=1/0,o=1/0,s=-(1/0),a=-(1/0),h=!1,u=0,l=this.children.length;l>u;++u){var c=this.children[u];c.visible&&(h=!0,t=this.children[u].getBounds(),i=ie?s:e,a=a>r?a:r)}if(!h)return n.Rectangle.EMPTY;var p=this._bounds;p.x=i,p.y=o,p.width=s-i,p.height=a-o,this._currentBounds=p}return this._currentBounds},i.prototype.containerGetBounds=i.prototype.getBounds,i.prototype.getLocalBounds=function(){var t=this.worldTransform;this.worldTransform=n.Matrix.IDENTITY;for(var e=0,r=this.children.length;r>e;++e)this.children[e].updateTransform();return this.worldTransform=t,this._currentBounds=null,this.getBounds(n.Matrix.IDENTITY)},i.prototype.renderWebGL=function(t){if(this.visible&&!(this.worldAlpha<=0)&&this.renderable){var e,r;if(this._mask||this._filters){for(t.currentRenderer.flush(),this._filters&&this._filters.length&&t.filterManager.pushFilter(this,this._filters),this._mask&&t.maskManager.pushMask(this,this._mask),t.currentRenderer.start(),this._renderWebGL(t),e=0,r=this.children.length;r>e;e++)this.children[e].renderWebGL(t);t.currentRenderer.flush(),this._mask&&t.maskManager.popMask(this,this._mask),this._filters&&t.filterManager.popFilter(),t.currentRenderer.start()}else for(this._renderWebGL(t),e=0,r=this.children.length;r>e;++e)this.children[e].renderWebGL(t)}},i.prototype._renderWebGL=function(t){},i.prototype._renderCanvas=function(t){},i.prototype.renderCanvas=function(t){if(this.visible&&!(this.alpha<=0)&&this.renderable){this._mask&&t.maskManager.pushMask(this._mask,t),this._renderCanvas(t);for(var e=0,r=this.children.length;r>e;++e)this.children[e].renderCanvas(t);this._mask&&t.maskManager.popMask(t)}},i.prototype.destroy=function(t){if(s.prototype.destroy.call(this),t)for(var e=0,r=this.children.length;r>e;++e)this.children[e].destroy(t);this.removeChildren(),this.children=null}},{"../math":55,"../textures/RenderTexture":98,"../utils":105,"./DisplayObject":40}],40:[function(t,e,r){function i(){s.call(this),this.position=new n.Point,this._position=new u(this),this.scale=new n.Point(1,1),this.pivot=new n.Point(0,0),this.skew=new n.Point(0,0),this._rotation=0,this.alpha=1,this.visible=!0,this.renderable=!0,this.parent=null,this.worldAlpha=1,this.worldTransform=new n.Matrix,this.localTransform=new n.Matrix,this.filterArea=null,this._sr=0,this._cr=1,this._bounds=new n.Rectangle(0,0,1,1),this._currentBounds=null,this._mask=null,this.dirtyTransform=!0}var n=t("../math"),o=t("../textures/RenderTexture"),s=t("eventemitter3"),a=(t("../const"),new n.Matrix),h={worldTransform:new n.Matrix,worldAlpha:1,children:[]};i.prototype=Object.create(s.prototype),i.prototype.constructor=i,e.exports=i;var u=function(t){this.doc=t,this.x=0,this.y=0};Object.defineProperties(u.prototype,{x:{get:function(){return this.doc.position.x},set:function(t){this.doc.position.x=t,this.doc.dirtyTransform=!0}},y:{get:function(){return this.doc.posiiton.y},set:function(t){this.doc.position.y=t,this.doc.dirtyTransform=!0}}}),Object.defineProperties(i.prototype,{x:{get:function(){return this.position.x},set:function(t){this.position.x=t,this.dirtyTransform=!0}},y:{get:function(){return this.position.y},set:function(t){this.position.y=t,this.dirtyTransform=!0}},scaleX:{get:function(){return this.scale.x},set:function(t){this.scale.x=t,this.dirtyTransform=!0}},scaleY:{get:function(){return this.scale.y},set:function(t){this.scale.y=t,this.dirtyTransform=!0}},rotation:{get:function(){return this._rotation},set:function(t){this._rotation=t,this.dirtyTransform=!0,this._sr=Math.sin(t),this._cr=Math.cos(t)}},scaleY:{get:function(){return this.scale.y},set:function(t){this.scale.y=t,this.dirtyTransform=!0}},worldVisible:{get:function(){var t=this;do{if(!t.visible)return!1;t=t.parent}while(t);return!0}},mask:{get:function(){return this._mask},set:function(t){this._mask&&(this._mask.renderable=!0),this._mask=t,this._mask&&(this._mask.renderable=!1)}},filters:{get:function(){return this._filters&&this._filters.slice()},set:function(t){this._filters=t&&t.slice()}}}),i.prototype.updateTransform=function(){var t=this.parent.worldTransform,e=this.worldTransform,r=this.localTransform;this.dirtyTransform&&(r.a=this._cr*this.scale.x,r.b=this._sr*this.scale.x,r.c=-this._sr*this.scale.y,r.d=this._cr*this.scale.y,r.tx=this.position.x-(this.pivot.x*r.a+this.pivot.y*r.c),r.ty=this.position.y-(this.pivot.x*r.b+this.pivot.y*r.d)),(this.dirtyTransform||this.parent.dirtyTransform)&&(e.a=r.a*t.a+r.b*t.c,e.b=r.a*t.b+r.b*t.d,e.c=r.c*t.a+r.d*t.c,e.d=r.c*t.b+r.d*t.d,e.tx=r.tx*t.a+r.ty*t.c+t.tx,e.ty=r.tx*t.b+r.ty*t.d+t.ty,this._currentBounds=null),this.worldAlpha=this.alpha*this.parent.worldAlpha},i.prototype.displayObjectUpdateTransform=i.prototype.updateTransform,i.prototype.getBounds=function(t){return n.Rectangle.EMPTY},i.prototype.getLocalBounds=function(){return this.getBounds(n.Matrix.IDENTITY)},i.prototype.toGlobal=function(t){return this.parent?this.displayObjectUpdateTransform():(this.parent=h,this.displayObjectUpdateTransform(),this.parent=null),this.worldTransform.apply(t)},i.prototype.toLocal=function(t,e,r){return e&&(t=e.toGlobal(t)),this.parent?this.displayObjectUpdateTransform():(this.parent=h,this.displayObjectUpdateTransform(),this.parent=null),this.worldTransform.applyInverse(t,r)},i.prototype.renderWebGL=function(t){},i.prototype.renderCanvas=function(t){},i.prototype.generateTexture=function(t,e,r){var i=this.getLocalBounds(),n=new o(t,0|i.width,0|i.height,e,r);return a.tx=-i.x,a.ty=-i.y,n.render(this,a),n},i.prototype.setParent=function(t){if(!t||!t.addChild)throw new Error("setParent: Argument must be a Container");return t.addChild(this),t},i.prototype.setTransform=function(t,e,r,i,n,o,s,a,h){return this.position.x=t||0,this.position.y=e||0,this.scale.x=r?r:1,this.scale.y=i?i:1,this.rotation=n||0,this.skew.x=o||0,this.skew.y=s||0,this.pivot.x=a||0,this.pivot.y=h||0,this.dirtyTransform=!0,this},i.prototype.destroy=function(){this.position=null,this.scale=null,this.pivot=null,this.skew=null,this.parent=null,this._bounds=null,this._currentBounds=null,this._mask=null,this.worldTransform=null,this.filterArea=null}},{"../const":38,"../math":55,"../textures/RenderTexture":98,eventemitter3:25}],41:[function(t,e,r){function i(){n.call(this),this.fillAlpha=1,this.lineWidth=0,this.lineColor=0,this.graphicsData=[],this.tint=16777215,this._prevTint=16777215,this.blendMode=l.BLEND_MODES.NORMAL,this.currentPath=null,this._webGL={},this.isMask=!1,this.boundsPadding=0,this._localBounds=new u.Rectangle(0,0,1,1),this.dirty=!0,this.glDirty=!1,this.boundsDirty=!0,this.cachedSpriteDirty=!1}var n=t("../display/Container"),o=t("../textures/Texture"),s=t("../renderers/canvas/utils/CanvasBuffer"),a=t("../renderers/canvas/utils/CanvasGraphics"),h=t("./GraphicsData"),u=t("../math"),l=t("../const"),c=new u.Point;i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.clone=function(){var t=new i;t.renderable=this.renderable,t.fillAlpha=this.fillAlpha,t.lineWidth=this.lineWidth,t.lineColor=this.lineColor,t.tint=this.tint,t.blendMode=this.blendMode,t.isMask=this.isMask,t.boundsPadding=this.boundsPadding,t.dirty=!0,t.glDirty=!0,t.cachedSpriteDirty=this.cachedSpriteDirty;for(var e=0;e=c;++c)l=c/s,n=h+(t-h)*l,o=u+(e-u)*l,a.push(n+(t+(r-t)*l-n)*l,o+(e+(i-e)*l-o)*l);return this.dirty=this.boundsDirty=!0,this},i.prototype.bezierCurveTo=function(t,e,r,i,n,o){this.currentPath?0===this.currentPath.shape.points.length&&(this.currentPath.shape.points=[0,0]):this.moveTo(0,0);for(var s,a,h,u,l,c=20,p=this.currentPath.shape.points,d=p[p.length-2],f=p[p.length-1],v=0,g=1;c>=g;++g)v=g/c,s=1-v,a=s*s,h=a*s,u=v*v,l=u*v,p.push(h*d+3*a*v*t+3*s*u*r+l*n,h*f+3*a*v*e+3*s*u*i+l*o);return this.dirty=this.boundsDirty=!0,this},i.prototype.arcTo=function(t,e,r,i,n){this.currentPath?0===this.currentPath.shape.points.length&&this.currentPath.shape.points.push(t,e):this.moveTo(t,e);var o=this.currentPath.shape.points,s=o[o.length-2],a=o[o.length-1],h=a-e,u=s-t,l=i-e,c=r-t,p=Math.abs(h*c-u*l);if(1e-8>p||0===n)(o[o.length-2]!==t||o[o.length-1]!==e)&&o.push(t,e);else{var d=h*h+u*u,f=l*l+c*c,v=h*l+u*c,g=n*Math.sqrt(d)/p,m=n*Math.sqrt(f)/p,y=g*v/d,x=m*v/f,b=g*c+m*u,_=g*l+m*h,T=u*(m+y),E=h*(m+y),S=c*(g+x),w=l*(g+x),C=Math.atan2(E-_,T-b),A=Math.atan2(w-_,S-b);this.arc(b+t,_+e,n,C,A,u*l>c*h)}return this.dirty=this.boundsDirty=!0,this},i.prototype.arc=function(t,e,r,i,n,o){if(o=o||!1,i===n)return this;!o&&i>=n?n+=2*Math.PI:o&&n>=i&&(i+=2*Math.PI);var s=o?-1*(i-n):n-i,a=40*Math.ceil(Math.abs(s)/(2*Math.PI));if(0===s)return this;var h=t+Math.cos(i)*r,u=e+Math.sin(i)*r;this.currentPath?this.currentPath.shape.points.push(h,u):this.moveTo(h,u);for(var l=this.currentPath.shape.points,c=s/(2*a),p=2*c,d=Math.cos(c),f=Math.sin(c),v=a-1,g=v%1/v,m=0;v>=m;m++){var y=m+g*m,x=c+i+p*y,b=Math.cos(x),_=-Math.sin(x);l.push((d*b+f*_)*r+t,(d*-_+f*b)*r+e)}return this.dirty=this.boundsDirty=!0,this},i.prototype.beginFill=function(t,e){return this.filling=!0,this.fillColor=t||0,this.fillAlpha=void 0===e?1:e,this.currentPath&&this.currentPath.shape.points.length<=2&&(this.currentPath.fill=this.filling,this.currentPath.fillColor=this.fillColor,this.currentPath.fillAlpha=this.fillAlpha),this},i.prototype.endFill=function(){return this.filling=!1,this.fillColor=null,this.fillAlpha=1,this},i.prototype.drawRect=function(t,e,r,i){return this.drawShape(new u.Rectangle(t,e,r,i)),this},i.prototype.drawRoundedRect=function(t,e,r,i,n){return this.drawShape(new u.RoundedRectangle(t,e,r,i,n)),this},i.prototype.drawCircle=function(t,e,r){return this.drawShape(new u.Circle(t,e,r)),this},i.prototype.drawEllipse=function(t,e,r,i){return this.drawShape(new u.Ellipse(t,e,r,i)),this},i.prototype.drawPolygon=function(t){var e=t,r=!0;if(e instanceof u.Polygon&&(r=e.closed,e=e.points),!Array.isArray(e)){e=new Array(arguments.length);for(var i=0;ig?g:S,S=S>y?y:S,S=S>b?b:S,w=w>m?m:w,w=w>x?x:w,w=w>_?_:w,T=g>T?g:T,T=y>T?y:T,T=b>T?b:T,E=m>E?m:E,E=x>E?x:E,E=_>E?_:E,this._bounds.x=S,this._bounds.width=T-S,this._bounds.y=w,this._bounds.height=E-w,this._currentBounds=this._bounds}return this._currentBounds},i.prototype.containsPoint=function(t){this.worldTransform.applyInverse(t,c); +for(var e=this.graphicsData,r=0;rs?s:t,e=s+h>e?s+h:e,r=r>a?a:r,i=a+u>i?a+u:i;else if(d===l.SHAPES.CIRC)s=n.x,a=n.y,h=n.radius+f/2,u=n.radius+f/2,t=t>s-h?s-h:t,e=s+h>e?s+h:e,r=r>a-u?a-u:r,i=a+u>i?a+u:i;else if(d===l.SHAPES.ELIP)s=n.x,a=n.y,h=n.width+f/2,u=n.height+f/2,t=t>s-h?s-h:t,e=s+h>e?s+h:e,r=r>a-u?a-u:r,i=a+u>i?a+u:i;else{o=n.points;for(var v=0;vs-f?s-f:t,e=s+f>e?s+f:e,r=r>a-f?a-f:r,i=a+f>i?a+f:i}}else t=0,e=0,r=0,i=0;var g=this.boundsPadding;this._localBounds.x=t-g,this._localBounds.width=e-t+2*g,this._localBounds.y=r-g,this._localBounds.height=i-r+2*g},i.prototype.drawShape=function(t){this.currentPath&&this.currentPath.shape.points.length<=2&&this.graphicsData.pop(),this.currentPath=null;var e=new h(this.lineWidth,this.lineColor,this.lineAlpha,this.fillColor,this.fillAlpha,this.filling,t);return this.graphicsData.push(e),e.type===l.SHAPES.POLY&&(e.shape.closed=e.shape.closed||this.filling,this.currentPath=e),this.dirty=this.boundsDirty=!0,e},i.prototype.destroy=function(){n.prototype.destroy.apply(this,arguments);for(var t=0;ts;s++)e=o.data[s],1===o.data[s].mode||(shader=this.primitiveShader,r.bindShader(shader),shader.uniforms.translationMatrix=t.worldTransform.toArray(!0),shader.uniforms.tint=n.hex2rgb(t.tint),shader.uniforms.alpha=t.worldAlpha,i.bindBuffer(i.ARRAY_BUFFER,e.buffer),shader=this.primitiveShader,shader.attributes.aVertexPosition.pointer(i.FLOAT,!1,24,0),shader.attributes.aColor.pointer(i.FLOAT,!1,24,8),i.enableVertexAttribArray(shader.attributes.aVertexPosition.location),i.enableVertexAttribArray(shader.attributes.aColor.location),i.bindBuffer(i.ELEMENT_ARRAY_BUFFER,e.indexBuffer),i.drawElements(i.TRIANGLE_STRIP,e.indices.length,i.UNSIGNED_SHORT,0)),r.drawCount++},i.prototype.updateGraphics=function(t){var e=this.renderer.gl,r=t._webGL[e.id];r||(r=t._webGL[e.id]={lastIndex:0,data:[],gl:e}),t.dirty=!1;var i;if(t.clearDirty){for(t.clearDirty=!1,i=0;i=6)if(a.points.length<2*this.maximumSimplePolySize){s=this.switchMode(r,0);var h=buildPoly(a,s);h||(s=this.switchMode(r,1),buildComplexPoly(a,s))}else s=this.switchMode(r,1),buildComplexPoly(a,s);a.lineWidth>0&&(s=this.switchMode(r,0),l(a,s))}else s=this.switchMode(r,0),a.type===o.SHAPES.RECT?buildRectangle(a,s):a.type===o.SHAPES.CIRC||a.type===o.SHAPES.ELIP?buildCircle(a,s):a.type===o.SHAPES.RREC&&buildRoundedRectangle(a,s);r.lastIndex++}for(i=0;i32e4||r.mode!==e||1===e)&&(r=this.graphicsDataPool.pop()||new h(t.gl),r.mode=e,t.data.push(r))):(r=this.graphicsDataPool.pop()||new h(t.gl),r.mode=e,t.data.push(r)),r.dirty=!0,r}},{"../../const":38,"../../math":55,"../../renderers/webgl/WebGLRenderer":72,"../../renderers/webgl/utils/ObjectRenderer":87,"../../utils":105,"./WebGLGraphicsData":44,"./shaders/PrimitiveShader":45,"./utils/buildCircle":46,"./utils/buildComplexPoly":47,"./utils/buildLine":48,"./utils/buildPoly":49,"./utils/buildRectangle":50,"./utils/buildRoundedRectangle":51,earcut:24}],44:[function(t,e,r){function i(t){this.gl=t,this.color=[0,0,0],this.points=[],this.indices=[],this.buffer=t.createBuffer(),this.indexBuffer=t.createBuffer(),this.mode=1,this.alpha=1,this.dirty=!0,this.glPoints=null,this.glIndices=null}i.prototype.constructor=i,e.exports=i,i.prototype.reset=function(){this.points.length=0,this.indices.length=0},i.prototype.upload=function(){var t=this.gl;this.glPoints=new Float32Array(this.points),t.bindBuffer(t.ARRAY_BUFFER,this.buffer),t.bufferData(t.ARRAY_BUFFER,this.glPoints,t.STATIC_DRAW),this.glIndices=new Uint16Array(this.indices),t.bindBuffer(t.ELEMENT_ARRAY_BUFFER,this.indexBuffer),t.bufferData(t.ELEMENT_ARRAY_BUFFER,this.glIndices,t.STATIC_DRAW),this.dirty=!1},i.prototype.destroy=function(){this.color=null,this.points=null,this.indices=null,this.gl.deleteBuffer(this.buffer),this.gl.deleteBuffer(this.indexBuffer),this.gl=null,this.buffer=null,this.indexBuffer=null,this.glPoints=null,this.glIndices=null}},{}],45:[function(t,e,r){function i(t){n.call(this,t,["attribute vec2 aVertexPosition;","attribute vec4 aColor;","uniform mat3 translationMatrix;","uniform mat3 projectionMatrix;","uniform float alpha;","uniform float flipY;","uniform vec3 tint;","varying vec4 vColor;","void main(void){"," gl_Position = vec4((projectionMatrix * translationMatrix * vec3(aVertexPosition, 1.0)).xy, 0.0, 1.0);"," vColor = aColor * vec4(tint * alpha, alpha);","}"].join("\n"),["precision mediump float;","varying vec4 vColor;","void main(void){"," gl_FragColor = vColor;","}"].join("\n"))}var n=t("pixi-gl-core").GLShader;i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i},{"pixi-gl-core":1}],46:[function(t,e,r){var i=t("./buildLine"),n=t("../../../utils"),o=function(t,e){var r,o,s=t.shape,a=s.x,h=s.y;t.type===CONST.SHAPES.CIRC?(r=s.radius,o=s.radius):(r=s.width,o=s.height);var u=Math.floor(30*Math.sqrt(s.radius))||Math.floor(15*Math.sqrt(s.width+s.height)),l=2*Math.PI/u,c=0;if(t.fill){var p=n.hex2rgb(t.fillColor),d=t.fillAlpha,f=p[0]*d,v=p[1]*d,g=p[2]*d,m=e.points,y=e.indices,x=m.length/6;for(y.push(x),c=0;u+1>c;c++)m.push(a,h,f,v,g,d),m.push(a+Math.sin(l*c)*r,h+Math.cos(l*c)*o,f,v,g,d),y.push(x++,x++);y.push(x-1)}if(t.lineWidth){var b=t.points;for(t.points=[],c=0;u+1>c;c++)t.points.push(a+Math.sin(l*c)*r,h+Math.cos(l*c)*o);i(t,e),t.points=b}};e.exports=o},{"../../../utils":105,"./buildLine":48}],47:[function(t,e,r){var i=(t("./buildLine"),t("../../../utils")),n=function(t,e){var r=t.points.slice();if(!(r.length<6)){var n=e.indices;e.points=r,e.alpha=t.fillAlpha,e.color=i.hex2rgb(t.fillColor);for(var o,s,a=1/0,h=-(1/0),u=1/0,l=-(1/0),c=0;co?o:a,h=o>h?o:h,u=u>s?s:u,l=s>l?s:l;r.push(a,u,h,u,h,l,a,l);var p=r.length/2;for(c=0;p>c;c++)n.push(c)}};e.exports=n},{"../../../utils":105,"./buildLine":48}],48:[function(t,e,r){var i=t("../../../math"),n=t("../../../utils"),o=function(t,e){var r=0,o=t.points;if(0!==o.length){var s=new i.Point(o[0],o[1]),a=new i.Point(o[o.length-2],o[o.length-1]);if(s.x===a.x&&s.y===a.y){o=o.slice(),o.pop(),o.pop(),a=new i.Point(o[o.length-2],o[o.length-1]);var h=a.x+.5*(s.x-a.x),u=a.y+.5*(s.y-a.y);o.unshift(h,u),o.push(h,u)}var l,c,p,d,f,v,g,m,y,x,b,_,T,E,S,w,C,A,M,R,O,P,D,F=e.points,L=e.indices,B=o.length/2,I=o.length,N=F.length/6,U=t.lineWidth/2,k=n.hex2rgb(t.lineColor),j=t.lineAlpha,G=k[0]*j,X=k[1]*j,Y=k[2]*j;for(p=o[0],d=o[1],f=o[2],v=o[3],y=-(d-v),x=p-f,D=Math.sqrt(y*y+x*x),y/=D,x/=D,y*=U,x*=U,F.push(p-y,d-x,G,X,Y,j),F.push(p+y,d+x,G,X,Y,j),r=1;B-1>r;r++)p=o[2*(r-1)],d=o[2*(r-1)+1],f=o[2*r],v=o[2*r+1],g=o[2*(r+1)],m=o[2*(r+1)+1],y=-(d-v),x=p-f,D=Math.sqrt(y*y+x*x),y/=D,x/=D,y*=U,x*=U,b=-(v-m),_=f-g,D=Math.sqrt(b*b+_*_),b/=D,_/=D,b*=U,_*=U,S=-x+d-(-x+v),w=-y+f-(-y+p),C=(-y+p)*(-x+v)-(-y+f)*(-x+d),A=-_+m-(-_+v),M=-b+f-(-b+g),R=(-b+g)*(-_+v)-(-b+f)*(-_+m),O=S*M-A*w,Math.abs(O)<.1?(O+=10.1,F.push(f-y,v-x,G,X,Y,j),F.push(f+y,v+x,G,X,Y,j)):(l=(w*R-M*C)/O,c=(A*C-S*R)/O,P=(l-f)*(l-f)+(c-v)*(c-v),P>19600?(T=y-b,E=x-_,D=Math.sqrt(T*T+E*E),T/=D,E/=D,T*=U,E*=U,F.push(f-T,v-E),F.push(G,X,Y,j),F.push(f+T,v+E),F.push(G,X,Y,j),F.push(f-T,v-E),F.push(G,X,Y,j),I++):(F.push(l,c),F.push(G,X,Y,j),F.push(f-(l-f),v-(c-v)),F.push(G,X,Y,j)));for(p=o[2*(B-2)],d=o[2*(B-2)+1],f=o[2*(B-1)],v=o[2*(B-1)+1],y=-(d-v),x=p-f,D=Math.sqrt(y*y+x*x),y/=D,x/=D,y*=U,x*=U,F.push(f-y,v-x),F.push(G,X,Y,j),F.push(f+y,v+x),F.push(G,X,Y,j),L.push(N),r=0;I>r;r++)L.push(N++);L.push(N-1)}};e.exports=o},{"../../../math":55,"../../../utils":105}],49:[function(t,e,r){var i=t("../../../utils"),n=function(t,e){var r=t.points;if(!(r.length<6)){var n=e.points,o=e.indices,s=r.length/2,a=i.hex2rgb(t.fillColor),h=t.fillAlpha,u=a[0]*h,l=a[1]*h,c=a[2]*h,p=earcut(r,null,2);if(!p)return!1;var d=n.length/6,f=0;for(f=0;ff;f++)n.push(r[2*f],r[2*f+1],u,l,c,h);return!0}};e.exports=n},{"../../../utils":105}],50:[function(t,e,r){var i=t("./buildLine"),n=t("../../../utils"),o=function(t,e){var r=t.shape,o=r.x,s=r.y,a=r.width,h=r.height;if(t.fill){var u=n.hex2rgb(t.fillColor),l=t.fillAlpha,c=u[0]*l,p=u[1]*l,d=u[2]*l,f=e.points,v=e.indices,g=f.length/6;f.push(o,s),f.push(c,p,d,l),f.push(o+a,s),f.push(c,p,d,l),f.push(o,s+h),f.push(c,p,d,l),f.push(o+a,s+h),f.push(c,p,d,l),v.push(g,g,g+1,g+2,g+3,g+3)}if(t.lineWidth){var m=t.points;t.points=[o,s,o+a,s,o+a,s+h,o,s+h,o,s],i(t,e),t.points=m}};e.exports=o},{"../../../utils":105,"./buildLine":48}],51:[function(t,e,r){var i=(t("./buildLine"),t("../../../utils"));buildRoundedRectangle=function(t,e){var r=t.shape,n=r.x,o=r.y,s=r.width,a=r.height,h=r.radius,u=[];if(u.push(n,o+h),this.quadraticBezierCurve(n,o+a-h,n,o+a,n+h,o+a,u),this.quadraticBezierCurve(n+s-h,o+a,n+s,o+a,n+s,o+a-h,u),this.quadraticBezierCurve(n+s,o+h,n+s,o,n+s-h,o,u),this.quadraticBezierCurve(n+h,o,n,o,n,o+h+1e-10,u),t.fill){var l=i.hex2rgb(t.fillColor),c=t.fillAlpha,p=l[0]*c,d=l[1]*c,f=l[2]*c,v=e.points,g=e.indices,m=v.length/6,y=earcut(u,null,2),x=0;for(x=0;x=m;m++)g=m/f,h=a(t,r,g),u=a(e,i,g),l=a(r,n,g),c=a(i,o,g),p=a(h,l,g),d=a(u,c,g),v.push(p,d);return v},e.exports=buildRoundedRectangle},{"../../../utils":105,"./buildLine":48}],52:[function(t,e,r){var i=e.exports=Object.assign(t("./const"),t("./math"),{utils:t("./utils"),ticker:t("./ticker"),DisplayObject:t("./display/DisplayObject"),Container:t("./display/Container"),Sprite:t("./sprites/Sprite"),ParticleContainer:t("./particles/ParticleContainer"),SpriteRenderer:t("./sprites/webgl/SpriteRenderer"),ParticleRenderer:t("./particles/webgl/ParticleRenderer"),Text:t("./text/Text"),Graphics:t("./graphics/Graphics"),GraphicsData:t("./graphics/GraphicsData"),GraphicsRenderer:t("./graphics/webgl/GraphicsRenderer"),Texture:t("./textures/Texture"),BaseTexture:t("./textures/BaseTexture"),RenderTexture:t("./textures/RenderTexture"),VideoBaseTexture:t("./textures/VideoBaseTexture"),TextureUvs:t("./textures/TextureUvs"),CanvasRenderer:t("./renderers/canvas/CanvasRenderer"),CanvasGraphics:t("./renderers/canvas/utils/CanvasGraphics"),CanvasBuffer:t("./renderers/canvas/utils/CanvasBuffer"),WebGLRenderer:t("./renderers/webgl/WebGLRenderer"),WebGLManager:t("./renderers/webgl/managers/WebGLManager"),ShaderManager:t("./renderers/webgl/managers/ShaderManager"),Shader:t("./renderers/webgl/shaders/Shader"),ObjectRenderer:t("./renderers/webgl/utils/ObjectRenderer"),RenderTarget:t("./renderers/webgl/utils/RenderTarget"),AbstractFilter:t("./renderers/webgl/filters/AbstractFilter"),FXAAFilter:t("./renderers/webgl/filters/FXAAFilter"),SpriteMaskFilter:t("./renderers/webgl/filters/SpriteMaskFilter"),glCore:t("pixi-gl-core"),autoDetectRenderer:function(t,e,r,n){return t=t||800,e=e||600,!n&&i.utils.isWebGLSupported()?new i.WebGLRenderer(t,e,r):new i.CanvasRenderer(t,e,r)}})},{"./const":38,"./display/Container":39,"./display/DisplayObject":40,"./graphics/Graphics":41,"./graphics/GraphicsData":42,"./graphics/webgl/GraphicsRenderer":43,"./math":55,"./particles/ParticleContainer":61,"./particles/webgl/ParticleRenderer":63,"./renderers/canvas/CanvasRenderer":66,"./renderers/canvas/utils/CanvasBuffer":67,"./renderers/canvas/utils/CanvasGraphics":68,"./renderers/webgl/WebGLRenderer":72,"./renderers/webgl/filters/AbstractFilter":73,"./renderers/webgl/filters/FXAAFilter":74,"./renderers/webgl/filters/SpriteMaskFilter":75,"./renderers/webgl/managers/ShaderManager":79,"./renderers/webgl/managers/WebGLManager":81,"./renderers/webgl/shaders/Shader":84,"./renderers/webgl/utils/ObjectRenderer":87,"./renderers/webgl/utils/RenderTarget":89,"./sprites/Sprite":93,"./sprites/webgl/SpriteRenderer":94,"./text/Text":96,"./textures/BaseTexture":97,"./textures/RenderTexture":98,"./textures/Texture":99,"./textures/TextureUvs":100,"./textures/VideoBaseTexture":101,"./ticker":103,"./utils":105,"pixi-gl-core":1}],53:[function(t,e,r){function i(){this.a=1,this.b=0,this.c=0,this.d=1,this.tx=0,this.ty=0}var n=t("./Point");i.prototype.constructor=i,e.exports=i,i.prototype.fromArray=function(t){this.a=t[0],this.b=t[1],this.c=t[3],this.d=t[4],this.tx=t[2],this.ty=t[5]},i.prototype.set=function(t,e,r,i,n,o){return this.a=t,this.b=e,this.c=r,this.d=i,this.tx=n,this.ty=o,this},i.prototype.toArray=function(t,e){this.array||(this.array=new Float32Array(9));var r=e||this.array;return t?(r[0]=this.a,r[1]=this.b,r[2]=0,r[3]=this.c,r[4]=this.d,r[5]=0,r[6]=this.tx,r[7]=this.ty,r[8]=1):(r[0]=this.a,r[1]=this.c,r[2]=this.tx,r[3]=this.b,r[4]=this.d,r[5]=this.ty,r[6]=0,r[7]=0,r[8]=1),r},i.prototype.apply=function(t,e){e=e||new n;var r=t.x,i=t.y;return e.x=this.a*r+this.c*i+this.tx,e.y=this.b*r+this.d*i+this.ty,e},i.prototype.applyInverse=function(t,e){e=e||new n;var r=1/(this.a*this.d+this.c*-this.b),i=t.x,o=t.y;return e.x=this.d*r*i+-this.c*r*o+(this.ty*this.c-this.tx*this.d)*r,e.y=this.a*r*o+-this.b*r*i+(-this.ty*this.a+this.tx*this.b)*r,e},i.prototype.translate=function(t,e){return this.tx+=t,this.ty+=e,this},i.prototype.scale=function(t,e){return this.a*=t,this.d*=e,this.c*=t,this.b*=e,this.tx*=t,this.ty*=e,this},i.prototype.rotate=function(t){var e=Math.cos(t),r=Math.sin(t),i=this.a,n=this.c,o=this.tx;return this.a=i*e-this.b*r,this.b=i*r+this.b*e,this.c=n*e-this.d*r,this.d=n*r+this.d*e,this.tx=o*e-this.ty*r,this.ty=o*r+this.ty*e,this},i.prototype.append=function(t){var e=this.a,r=this.b,i=this.c,n=this.d;return this.a=t.a*e+t.b*i,this.b=t.a*r+t.b*n,this.c=t.c*e+t.d*i,this.d=t.c*r+t.d*n,this.tx=t.tx*e+t.ty*i+this.tx,this.ty=t.tx*r+t.ty*n+this.ty,this},i.prototype.setTransform=function(t,e,r,i,n,o,s,a,h){var u,l,c,p,d,f,v,g,m,y;return d=Math.sin(s),f=Math.cos(s),v=Math.cos(h),g=Math.sin(h),m=-Math.sin(a),y=Math.cos(a),u=f*n,l=d*n,c=-d*o,p=f*o,this.a=v*u+g*c,this.b=v*l+g*p,this.c=m*u+y*c,this.d=m*l+y*p,this.tx=t+(r*u+i*c),this.ty=e+(r*l+i*p),this},i.prototype.prepend=function(t){var e=this.tx;if(1!==t.a||0!==t.b||0!==t.c||1!==t.d){var r=this.a,i=this.c;this.a=r*t.a+this.b*t.c,this.b=r*t.b+this.b*t.d,this.c=i*t.a+this.d*t.c,this.d=i*t.b+this.d*t.d}return this.tx=e*t.a+this.ty*t.c+t.tx,this.ty=e*t.b+this.ty*t.d+t.ty,this},i.prototype.invert=function(){var t=this.a,e=this.b,r=this.c,i=this.d,n=this.tx,o=t*i-e*r;return this.a=i/o,this.b=-e/o,this.c=-r/o,this.d=t/o,this.tx=(r*this.ty-i*n)/o,this.ty=-(t*this.ty-e*n)/o,this},i.prototype.identity=function(){return this.a=1,this.b=0,this.c=0,this.d=1,this.tx=0,this.ty=0,this},i.prototype.clone=function(){var t=new i;return t.a=this.a,t.b=this.b,t.c=this.c,t.d=this.d,t.tx=this.tx,t.ty=this.ty,t},i.prototype.copy=function(t){return t.a=this.a,t.b=this.b,t.c=this.c,t.d=this.d,t.tx=this.tx,t.ty=this.ty,t},i.IDENTITY=new i,i.TEMP_MATRIX=new i},{"./Point":54}],54:[function(t,e,r){function i(t,e){this.x=t||0,this.y=e||0}i.prototype.constructor=i,e.exports=i,i.prototype.clone=function(){return new i(this.x,this.y)},i.prototype.copy=function(t){this.set(t.x,t.y)},i.prototype.equals=function(t){return t.x===this.x&&t.y===this.y},i.prototype.set=function(t,e){this.x=t||0,this.y=e||(0!==e?this.x:0)}},{}],55:[function(t,e,r){e.exports={Point:t("./Point"),Matrix:t("./Matrix"),Circle:t("./shapes/Circle"),Ellipse:t("./shapes/Ellipse"),Polygon:t("./shapes/Polygon"),Rectangle:t("./shapes/Rectangle"),RoundedRectangle:t("./shapes/RoundedRectangle")}},{"./Matrix":53,"./Point":54,"./shapes/Circle":56,"./shapes/Ellipse":57,"./shapes/Polygon":58,"./shapes/Rectangle":59,"./shapes/RoundedRectangle":60}],56:[function(t,e,r){function i(t,e,r){this.x=t||0,this.y=e||0,this.radius=r||0,this.type=o.SHAPES.CIRC}var n=t("./Rectangle"),o=t("../../const");i.prototype.constructor=i,e.exports=i,i.prototype.clone=function(){return new i(this.x,this.y,this.radius)},i.prototype.contains=function(t,e){if(this.radius<=0)return!1;var r=this.x-t,i=this.y-e,n=this.radius*this.radius;return r*=r,i*=i,n>=r+i},i.prototype.getBounds=function(){return new n(this.x-this.radius,this.y-this.radius,2*this.radius,2*this.radius)}},{"../../const":38,"./Rectangle":59}],57:[function(t,e,r){function i(t,e,r,i){this.x=t||0,this.y=e||0,this.width=r||0,this.height=i||0,this.type=o.SHAPES.ELIP}var n=t("./Rectangle"),o=t("../../const");i.prototype.constructor=i,e.exports=i,i.prototype.clone=function(){return new i(this.x,this.y,this.width,this.height)},i.prototype.contains=function(t,e){if(this.width<=0||this.height<=0)return!1;var r=(t-this.x)/this.width,i=(e-this.y)/this.height;return r*=r,i*=i,1>=r+i},i.prototype.getBounds=function(){return new n(this.x-this.width,this.y-this.height,this.width,this.height)}},{"../../const":38,"./Rectangle":59}],58:[function(t,e,r){function i(t){var e=t;if(!Array.isArray(e)){e=new Array(arguments.length);for(var r=0;rs;s++)i.push(e[s].x,e[s].y);e=i}this.closed=!0,this.points=e,this.type=o.SHAPES.POLY}var n=t("../Point"),o=t("../../const");i.prototype.constructor=i,e.exports=i,i.prototype.clone=function(){return new i(this.points.slice())},i.prototype.contains=function(t,e){for(var r=!1,i=this.points.length/2,n=0,o=i-1;i>n;o=n++){var s=this.points[2*n],a=this.points[2*n+1],h=this.points[2*o],u=this.points[2*o+1],l=a>e!=u>e&&(h-s)*(e-a)/(u-a)+s>t;l&&(r=!r)}return r}},{"../../const":38,"../Point":54}],59:[function(t,e,r){function i(t,e,r,i){this.x=t||0,this.y=e||0,this.width=r||0,this.height=i||0,this.type=n.SHAPES.RECT}var n=t("../../const");i.prototype.constructor=i,e.exports=i,i.EMPTY=new i(0,0,0,0),i.prototype.clone=function(){return new i(this.x,this.y,this.width,this.height)},i.prototype.contains=function(t,e){return this.width<=0||this.height<=0?!1:t>=this.x&&t=this.y&&e=this.x&&t<=this.x+this.width&&e>=this.y&&e<=this.y+this.height?!0:!1}},{"../../const":38}],61:[function(t,e,r){function i(t,e,r){n.call(this),r=r||15e3,t=t||15e3;var i=16384;r>i&&(r=i),r>t&&(r=t),this._properties=[!1,!0,!1,!1,!1],this._maxSize=t,this._batchSize=r,this._buffers=null,this._bufferToUpdate=0,this.interactiveChildren=!1,this.blendMode=o.BLEND_MODES.NORMAL,this.roundPixels=!0,this.setProperties(e)}var n=t("../display/Container"),o=t("../const");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.setProperties=function(t){t&&(this._properties[0]="scale"in t?!!t.scale:this._properties[0],this._properties[1]="position"in t?!!t.position:this._properties[1],this._properties[2]="rotation"in t?!!t.rotation:this._properties[2],this._properties[3]="uvs"in t?!!t.uvs:this._properties[3],this._properties[4]="alpha"in t?!!t.alpha:this._properties[4])},i.prototype.updateTransform=function(){this.displayObjectUpdateTransform()},i.prototype.renderWebGL=function(t){this.visible&&!(this.worldAlpha<=0)&&this.children.length&&this.renderable&&(t.setObjectRenderer(t.plugins.particle),t.plugins.particle.render(this))},i.prototype.onChildrenChange=function(t){var e=Math.floor(t/this._batchSize);er;r+=6,i+=4)this.indices[r+0]=i+0,this.indices[r+1]=i+1,this.indices[r+2]=i+2,this.indices[r+3]=i+0,this.indices[r+4]=i+2,this.indices[r+5]=i+3;this.shader=null,this.indexBuffer=null,this.properties=null,this.tempMatrix=new h.Matrix}var n=t("../../renderers/webgl/utils/ObjectRenderer"),o=t("../../renderers/webgl/WebGLRenderer"),s=t("./ParticleShader"),a=t("./ParticleBuffer"),h=t("../../math");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,o.registerPlugin("particle",i),i.prototype.onContextChange=function(){var t=this.renderer.gl;this.shader=new s(this.renderer.shaderManager),this.indexBuffer=t.createBuffer(),t.bindBuffer(t.ELEMENT_ARRAY_BUFFER,this.indexBuffer),t.bufferData(t.ELEMENT_ARRAY_BUFFER,this.indices,t.STATIC_DRAW),this.properties=[{attribute:this.shader.attributes.aVertexPosition,size:2,uploadFunction:this.uploadVertices,offset:0},{attribute:this.shader.attributes.aPositionCoord,size:2,uploadFunction:this.uploadPosition,offset:0},{attribute:this.shader.attributes.aRotation,size:1,uploadFunction:this.uploadRotation,offset:0},{attribute:this.shader.attributes.aTextureCoord,size:2,uploadFunction:this.uploadUvs,offset:0},{attribute:this.shader.attributes.aColor,size:1,uploadFunction:this.uploadAlpha,offset:0}]},i.prototype.start=function(){var t=this.renderer.gl;t.activeTexture(t.TEXTURE0),t.bindBuffer(t.ELEMENT_ARRAY_BUFFER,this.indexBuffer);var e=this.shader;this.renderer.shaderManager.setShader(e)},i.prototype.render=function(t){var e=t.children,r=e.length,i=t._maxSize,n=t._batchSize;if(0!==r){r>i&&(r=i),t._buffers||(t._buffers=this.generateBuffers(t)),this.renderer.blendModeManager.setBlendMode(t.blendMode);var o=this.renderer.gl,s=t.worldTransform.copy(this.tempMatrix);s.prepend(this.renderer.currentRenderTarget.projectionMatrix),o.uniformMatrix3fv(this.shader.uniforms.projectionMatrix._location,!1,s.toArray(!0)),o.uniform1f(this.shader.uniforms.uAlpha._location,t.worldAlpha);var a=e[0]._texture.baseTexture;if(a._glTextures[o.id])o.bindTexture(o.TEXTURE_2D,a._glTextures[o.id]);else{if(!this.renderer.updateTexture(a))return;t._properties[0]&&t._properties[3]||(t._bufferToUpdate=0)}for(var h=0,u=0;r>h;h+=n,u+=1){var l=r-h;l>n&&(l=n);var c=t._buffers[u];c.uploadDynamic(e,h,l),t._bufferToUpdate===u&&(c.uploadStatic(e,h,l),t._bufferToUpdate=u+1),c.bind(this.shader),o.drawElements(o.TRIANGLES,6*l,o.UNSIGNED_SHORT,0),this.renderer.drawCount++}}},i.prototype.generateBuffers=function(t){var e,r=this.renderer.gl,i=[],n=t._maxSize,o=t._batchSize,s=t._properties;for(e=0;n>e;e+=o)i.push(new a(r,this.properties,s,o));return i},i.prototype.uploadVertices=function(t,e,r,i,n,o){for(var s,a,h,u,l,c,p,d,f,v=0;r>v;v++)s=t[e+v],a=s._texture,u=s.scale.x,l=s.scale.y,a.trim?(h=a.trim,p=h.x-s.anchor.x*h.width,c=p+a.crop.width,f=h.y-s.anchor.y*h.height,d=f+a.crop.height):(c=a._frame.width*(1-s.anchor.x),p=a._frame.width*-s.anchor.x,d=a._frame.height*(1-s.anchor.y),f=a._frame.height*-s.anchor.y),i[o]=p*u,i[o+1]=f*l,i[o+n]=c*u,i[o+n+1]=f*l,i[o+2*n]=c*u,i[o+2*n+1]=d*l,i[o+3*n]=p*u,i[o+3*n+1]=d*l,o+=4*n},i.prototype.uploadPosition=function(t,e,r,i,n,o){for(var s=0;r>s;s++){var a=t[e+s].position;i[o]=a.x,i[o+1]=a.y,i[o+n]=a.x,i[o+n+1]=a.y,i[o+2*n]=a.x,i[o+2*n+1]=a.y,i[o+3*n]=a.x,i[o+3*n+1]=a.y,o+=4*n}},i.prototype.uploadRotation=function(t,e,r,i,n,o){for(var s=0;r>s;s++){var a=t[e+s].rotation;i[o]=a,i[o+n]=a,i[o+2*n]=a,i[o+3*n]=a,o+=4*n}},i.prototype.uploadUvs=function(t,e,r,i,n,o){for(var s=0;r>s;s++){var a=t[e+s]._texture._uvs;a?(i[o]=a.x0,i[o+1]=a.y0,i[o+n]=a.x1,i[o+n+1]=a.y1,i[o+2*n]=a.x2,i[o+2*n+1]=a.y2,i[o+3*n]=a.x3,i[o+3*n+1]=a.y3,o+=4*n):(i[o]=0,i[o+1]=0,i[o+n]=0,i[o+n+1]=0,i[o+2*n]=0,i[o+2*n+1]=0,i[o+3*n]=0,i[o+3*n+1]=0,o+=4*n)}},i.prototype.uploadAlpha=function(t,e,r,i,n,o){for(var s=0;r>s;s++){var a=t[e+s].alpha;i[o]=a,i[o+n]=a,i[o+2*n]=a,i[o+3*n]=a,o+=4*n}},i.prototype.destroy=function(){this.renderer.gl&&this.renderer.gl.deleteBuffer(this.indexBuffer),n.prototype.destroy.apply(this,arguments),this.shader.destroy(),this.indices=null,this.tempMatrix=null}},{"../../math":55,"../../renderers/webgl/WebGLRenderer":72,"../../renderers/webgl/utils/ObjectRenderer":87,"./ParticleBuffer":62,"./ParticleShader":64}],64:[function(t,e,r){function i(t){n.call(this,t,["attribute vec2 aVertexPosition;","attribute vec2 aTextureCoord;","attribute float aColor;","attribute vec2 aPositionCoord;","attribute vec2 aScale;","attribute float aRotation;","uniform mat3 projectionMatrix;","varying vec2 vTextureCoord;","varying float vColor;","void main(void){"," vec2 v = aVertexPosition;"," v.x = (aVertexPosition.x) * cos(aRotation) - (aVertexPosition.y) * sin(aRotation);"," v.y = (aVertexPosition.x) * sin(aRotation) + (aVertexPosition.y) * cos(aRotation);"," v = v + aPositionCoord;"," gl_Position = vec4((projectionMatrix * vec3(v, 1.0)).xy, 0.0, 1.0);"," vTextureCoord = aTextureCoord;"," vColor = aColor;","}"].join("\n"),["precision lowp float;","varying vec2 vTextureCoord;","varying float vColor;","uniform sampler2D uSampler;","uniform float uAlpha;","void main(void){"," vec4 color = texture2D(uSampler, vTextureCoord) * vColor * uAlpha;"," if (color.a == 0.0) discard;"," gl_FragColor = color;","}"].join("\n"),{uAlpha:{type:"1f",value:1}},{aPositionCoord:0,aRotation:0})}var n=t("../../renderers/webgl/shaders/TextureShader");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i},{"../../renderers/webgl/shaders/TextureShader":85}],65:[function(t,e,r){ +function i(t,e,r,i){if(a.call(this),n.sayHello(t),i)for(var h in s.DEFAULT_RENDER_OPTIONS)"undefined"==typeof i[h]&&(i[h]=s.DEFAULT_RENDER_OPTIONS[h]);else i=s.DEFAULT_RENDER_OPTIONS;this.type=s.RENDERER_TYPE.UNKNOWN,this.width=e||800,this.height=r||600,this.view=i.view||document.createElement("canvas"),this.resolution=i.resolution,this.transparent=i.transparent,this.autoResize=i.autoResize||!1,this.blendModes=null,this.preserveDrawingBuffer=i.preserveDrawingBuffer,this.clearBeforeRender=i.clearBeforeRender,this.roundPixels=i.roundPixels,this._backgroundColor=0,this._backgroundColorRgba=[0,0,0,0],this._backgroundColorString="#000000",this.backgroundColor=i.backgroundColor||this._backgroundColor,this._tempDisplayObjectParent={worldTransform:new o.Matrix,worldAlpha:1,children:[]},this._lastObjectRendered=this._tempDisplayObjectParent}var n=t("../utils"),o=t("../math"),s=t("../const"),a=t("eventemitter3");i.prototype=Object.create(a.prototype),i.prototype.constructor=i,e.exports=i,Object.defineProperties(i.prototype,{backgroundColor:{get:function(){return this._backgroundColor},set:function(t){this._backgroundColor=t,this._backgroundColorString=n.hex2string(t),n.hex2rgb(t,this._backgroundColorRgba)}}}),i.prototype.resize=function(t,e){this.width=t*this.resolution,this.height=e*this.resolution,this.view.width=this.width,this.view.height=this.height,this.autoResize&&(this.view.style.width=this.width/this.resolution+"px",this.view.style.height=this.height/this.resolution+"px")},i.prototype.destroy=function(t){t&&this.view.parentNode&&this.view.parentNode.removeChild(this.view),this.type=s.RENDERER_TYPE.UNKNOWN,this.width=0,this.height=0,this.view=null,this.resolution=0,this.transparent=!1,this.autoResize=!1,this.blendModes=null,this.preserveDrawingBuffer=!1,this.clearBeforeRender=!1,this.roundPixels=!1,this._backgroundColor=0,this._backgroundColorRgba=null,this._backgroundColorString=null}},{"../const":38,"../math":55,"../utils":105,eventemitter3:25}],66:[function(t,e,r){function i(t,e,r){r=r||{},n.call(this,"Canvas",t,e,r),this.type=h.RENDERER_TYPE.CANVAS,this.context=this.view.getContext("2d",{alpha:this.transparent}),this.refresh=!0,this.maskManager=new o,this.smoothProperty="imageSmoothingEnabled",this.context.imageSmoothingEnabled||(this.context.webkitImageSmoothingEnabled?this.smoothProperty="webkitImageSmoothingEnabled":this.context.mozImageSmoothingEnabled?this.smoothProperty="mozImageSmoothingEnabled":this.context.oImageSmoothingEnabled?this.smoothProperty="oImageSmoothingEnabled":this.context.msImageSmoothingEnabled&&(this.smoothProperty="msImageSmoothingEnabled")),this.initPlugins(),this._mapBlendModes(),this._tempDisplayObjectParent={worldTransform:new a.Matrix,worldAlpha:1},this.resize(t,e)}var n=t("../SystemRenderer"),o=t("./utils/CanvasMaskManager"),s=t("../../utils"),a=t("../../math"),h=t("../../const");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,s.pluginTarget.mixin(i),i.prototype.render=function(t){this.emit("prerender");var e=t.parent;this._lastObjectRendered=t,t.parent=this._tempDisplayObjectParent,t.updateTransform(),t.parent=e,this.context.setTransform(1,0,0,1,0,0),this.context.globalAlpha=1,this.context.globalCompositeOperation=this.blendModes[h.BLEND_MODES.NORMAL],navigator.isCocoonJS&&this.view.screencanvas&&(this.context.fillStyle="black",this.context.clear()),this.clearBeforeRender&&(this.transparent?this.context.clearRect(0,0,this.width,this.height):(this.context.fillStyle=this._backgroundColorString,this.context.fillRect(0,0,this.width,this.height))),this.renderDisplayObject(t,this.context),this.emit("postrender")},i.prototype.destroy=function(t){this.destroyPlugins(),n.prototype.destroy.call(this,t),this.context=null,this.refresh=!0,this.maskManager.destroy(),this.maskManager=null,this.smoothProperty=null},i.prototype.renderDisplayObject=function(t,e){var r=this.context;this.context=e,t.renderCanvas(this),this.context=r},i.prototype.resize=function(t,e){n.prototype.resize.call(this,t,e),this.smoothProperty&&(this.context[this.smoothProperty]=h.SCALE_MODES.DEFAULT===h.SCALE_MODES.LINEAR)},i.prototype._mapBlendModes=function(){this.blendModes||(this.blendModes={},s.canUseNewCanvasBlendModes()?(this.blendModes[h.BLEND_MODES.NORMAL]="source-over",this.blendModes[h.BLEND_MODES.ADD]="lighter",this.blendModes[h.BLEND_MODES.MULTIPLY]="multiply",this.blendModes[h.BLEND_MODES.SCREEN]="screen",this.blendModes[h.BLEND_MODES.OVERLAY]="overlay",this.blendModes[h.BLEND_MODES.DARKEN]="darken",this.blendModes[h.BLEND_MODES.LIGHTEN]="lighten",this.blendModes[h.BLEND_MODES.COLOR_DODGE]="color-dodge",this.blendModes[h.BLEND_MODES.COLOR_BURN]="color-burn",this.blendModes[h.BLEND_MODES.HARD_LIGHT]="hard-light",this.blendModes[h.BLEND_MODES.SOFT_LIGHT]="soft-light",this.blendModes[h.BLEND_MODES.DIFFERENCE]="difference",this.blendModes[h.BLEND_MODES.EXCLUSION]="exclusion",this.blendModes[h.BLEND_MODES.HUE]="hue",this.blendModes[h.BLEND_MODES.SATURATION]="saturate",this.blendModes[h.BLEND_MODES.COLOR]="color",this.blendModes[h.BLEND_MODES.LUMINOSITY]="luminosity"):(this.blendModes[h.BLEND_MODES.NORMAL]="source-over",this.blendModes[h.BLEND_MODES.ADD]="lighter",this.blendModes[h.BLEND_MODES.MULTIPLY]="source-over",this.blendModes[h.BLEND_MODES.SCREEN]="source-over",this.blendModes[h.BLEND_MODES.OVERLAY]="source-over",this.blendModes[h.BLEND_MODES.DARKEN]="source-over",this.blendModes[h.BLEND_MODES.LIGHTEN]="source-over",this.blendModes[h.BLEND_MODES.COLOR_DODGE]="source-over",this.blendModes[h.BLEND_MODES.COLOR_BURN]="source-over",this.blendModes[h.BLEND_MODES.HARD_LIGHT]="source-over",this.blendModes[h.BLEND_MODES.SOFT_LIGHT]="source-over",this.blendModes[h.BLEND_MODES.DIFFERENCE]="source-over",this.blendModes[h.BLEND_MODES.EXCLUSION]="source-over",this.blendModes[h.BLEND_MODES.HUE]="source-over",this.blendModes[h.BLEND_MODES.SATURATION]="source-over",this.blendModes[h.BLEND_MODES.COLOR]="source-over",this.blendModes[h.BLEND_MODES.LUMINOSITY]="source-over"))}},{"../../const":38,"../../math":55,"../../utils":105,"../SystemRenderer":65,"./utils/CanvasMaskManager":69}],67:[function(t,e,r){function i(t,e){this.canvas=document.createElement("canvas"),this.context=this.canvas.getContext("2d"),this.canvas.width=t,this.canvas.height=e}i.prototype.constructor=i,e.exports=i,Object.defineProperties(i.prototype,{width:{get:function(){return this.canvas.width},set:function(t){this.canvas.width=t}},height:{get:function(){return this.canvas.height},set:function(t){this.canvas.height=t}}}),i.prototype.clear=function(){this.context.setTransform(1,0,0,1,0,0),this.context.clearRect(0,0,this.canvas.width,this.canvas.height)},i.prototype.resize=function(t,e){this.canvas.width=t,this.canvas.height=e},i.prototype.destroy=function(){this.context=null,this.canvas=null}},{}],68:[function(t,e,r){var i=t("../../../const"),n={};e.exports=n,n.renderGraphics=function(t,e){var r=t.worldAlpha;t.dirty&&(this.updateGraphicsTint(t),t.dirty=!1);for(var n=0;nA?A:C,e.beginPath(),e.moveTo(T,E+C),e.lineTo(T,E+w-C),e.quadraticCurveTo(T,E+w,T+C,E+w),e.lineTo(T+S-C,E+w),e.quadraticCurveTo(T+S,E+w,T+S,E+w-C),e.lineTo(T+S,E+C),e.quadraticCurveTo(T+S,E,T+S-C,E),e.lineTo(T+C,E),e.quadraticCurveTo(T,E,T,E+C),e.closePath(),(o.fillColor||0===o.fillColor)&&(e.globalAlpha=o.fillAlpha*r,e.fillStyle="#"+("00000"+(0|a).toString(16)).substr(-6),e.fill()),o.lineWidth&&(e.globalAlpha=o.lineAlpha*r,e.strokeStyle="#"+("00000"+(0|h).toString(16)).substr(-6),e.stroke())}}},n.renderGraphicsMask=function(t,e){var r=t.graphicsData.length;if(0!==r){e.beginPath();for(var n=0;r>n;n++){var o=t.graphicsData[n],s=o.shape;if(o.type===i.SHAPES.POLY){var a=s.points;e.moveTo(a[0],a[1]);for(var h=1;hw?w:S,e.moveTo(b,_+S),e.lineTo(b,_+E-S),e.quadraticCurveTo(b,_+E,b+S,_+E),e.lineTo(b+T-S,_+E),e.quadraticCurveTo(b+T,_+E,b+T,_+E-S),e.lineTo(b+T,_+S),e.quadraticCurveTo(b+T,_,b+T-S,_),e.lineTo(b+S,_),e.quadraticCurveTo(b,_,b,_+S),e.closePath()}}}},n.updateGraphicsTint=function(t){if(16777215!==t.tint||t._prevTint!==t.tint){t._prevTint=t.tint;for(var e=(t.tint>>16&255)/255,r=(t.tint>>8&255)/255,i=(255&t.tint)/255,n=0;n>16&255)/255*e*255<<16)+((s>>8&255)/255*r*255<<8)+(255&s)/255*i*255,o._lineTint=((a>>16&255)/255*e*255<<16)+((a>>8&255)/255*r*255<<8)+(255&a)/255*i*255}}}},{"../../../const":38}],69:[function(t,e,r){function i(){}var n=t("./CanvasGraphics");i.prototype.constructor=i,e.exports=i,i.prototype.pushMask=function(t,e){e.context.save();var r=t.alpha,i=t.worldTransform,o=e.resolution;e.context.setTransform(i.a*o,i.b*o,i.c*o,i.d*o,i.tx*o,i.ty*o),t.texture||(n.renderGraphicsMask(t,e.context),e.context.clip()),t.worldAlpha=r},i.prototype.popMask=function(t){t.context.restore()},i.prototype.destroy=function(){}},{"./CanvasGraphics":68}],70:[function(t,e,r){var i=t("../../../utils"),n={};e.exports=n,n.getTintedTexture=function(t,e){var r=t.texture;e=n.roundColor(e);var i="#"+("00000"+(0|e).toString(16)).substr(-6);if(r.tintCache=r.tintCache||{},r.tintCache[i])return r.tintCache[i];var o=n.canvas||document.createElement("canvas");if(n.tintMethod(r,e,o),n.convertTintToImage){var s=new Image;s.src=o.toDataURL(),r.tintCache[i]=s}else r.tintCache[i]=o,n.canvas=null;return o},n.tintWithMultiply=function(t,e,r){var i=r.getContext("2d"),n=t.baseTexture.resolution,o=t.crop.clone();o.x*=n,o.y*=n,o.width*=n,o.height*=n,r.width=o.width,r.height=o.height,i.fillStyle="#"+("00000"+(0|e).toString(16)).substr(-6),i.fillRect(0,0,o.width,o.height),i.globalCompositeOperation="multiply",i.drawImage(t.baseTexture.source,o.x,o.y,o.width,o.height,0,0,o.width,o.height),i.globalCompositeOperation="destination-atop",i.drawImage(t.baseTexture.source,o.x,o.y,o.width,o.height,0,0,o.width,o.height)},n.tintWithOverlay=function(t,e,r){var i=r.getContext("2d"),n=t.baseTexture.resolution,o=t.crop.clone();o.x*=n,o.y*=n,o.width*=n,o.height*=n,r.width=o.width,r.height=o.height,i.globalCompositeOperation="copy",i.fillStyle="#"+("00000"+(0|e).toString(16)).substr(-6),i.fillRect(0,0,o.width,o.height),i.globalCompositeOperation="destination-atop",i.drawImage(t.baseTexture.source,o.x,o.y,o.width,o.height,0,0,o.width,o.height)},n.tintWithPerPixel=function(t,e,r){var n=r.getContext("2d"),o=t.baseTexture.resolution,s=t.crop.clone();s.x*=o,s.y*=o,s.width*=o,s.height*=o,r.width=s.width,r.height=s.height,n.globalCompositeOperation="copy",n.drawImage(t.baseTexture.source,s.x,s.y,s.width,s.height,0,0,s.width,s.height);for(var a=i.hex2rgb(e),h=a[0],u=a[1],l=a[2],c=n.getImageData(0,0,s.width,s.height),p=c.data,d=0;de;++e)this.shaders[e].syncUniform(t)}},{"../shaders/TextureShader":85}],74:[function(t,e,r){function i(){n.call(this,"\nprecision mediump float;\n\nattribute vec2 aVertexPosition;\nattribute vec2 aTextureCoord;\nattribute vec4 aColor;\n\nuniform mat3 projectionMatrix;\nuniform vec2 resolution;\n\nvarying vec2 vTextureCoord;\nvarying vec4 vColor;\n\nvarying vec2 vResolution;\n\n//texcoords computed in vertex step\n//to avoid dependent texture reads\nvarying vec2 v_rgbNW;\nvarying vec2 v_rgbNE;\nvarying vec2 v_rgbSW;\nvarying vec2 v_rgbSE;\nvarying vec2 v_rgbM;\n\n\nvoid texcoords(vec2 fragCoord, vec2 resolution,\n out vec2 v_rgbNW, out vec2 v_rgbNE,\n out vec2 v_rgbSW, out vec2 v_rgbSE,\n out vec2 v_rgbM) {\n vec2 inverseVP = 1.0 / resolution.xy;\n v_rgbNW = (fragCoord + vec2(-1.0, -1.0)) * inverseVP;\n v_rgbNE = (fragCoord + vec2(1.0, -1.0)) * inverseVP;\n v_rgbSW = (fragCoord + vec2(-1.0, 1.0)) * inverseVP;\n v_rgbSE = (fragCoord + vec2(1.0, 1.0)) * inverseVP;\n v_rgbM = vec2(fragCoord * inverseVP);\n}\n\nvoid main(void){\n gl_Position = vec4((projectionMatrix * vec3(aVertexPosition, 1.0)).xy, 0.0, 1.0);\n vTextureCoord = aTextureCoord;\n vColor = vec4(aColor.rgb * aColor.a, aColor.a);\n vResolution = resolution;\n\n //compute the texture coords and send them to varyings\n texcoords(aTextureCoord * resolution, resolution, v_rgbNW, v_rgbNE, v_rgbSW, v_rgbSE, v_rgbM);\n}\n",'precision lowp float;\n\n\n/**\nBasic FXAA implementation based on the code on geeks3d.com with the\nmodification that the texture2DLod stuff was removed since it\'s\nunsupported by WebGL.\n\n--\n\nFrom:\nhttps://github.com/mitsuhiko/webgl-meincraft\n\nCopyright (c) 2011 by Armin Ronacher.\n\nSome rights reserved.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are\nmet:\n\n * Redistributions of source code must retain the above copyright\n notice, this list of conditions and the following disclaimer.\n\n * Redistributions in binary form must reproduce the above\n copyright notice, this list of conditions and the following\n disclaimer in the documentation and/or other materials provided\n with the distribution.\n\n * The names of the contributors may not be used to endorse or\n promote products derived from this software without specific\n prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\nLIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\nA PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\nOWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\nSPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\nLIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\nDATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\nTHEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\nOF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n*/\n\n#ifndef FXAA_REDUCE_MIN\n #define FXAA_REDUCE_MIN (1.0/ 128.0)\n#endif\n#ifndef FXAA_REDUCE_MUL\n #define FXAA_REDUCE_MUL (1.0 / 8.0)\n#endif\n#ifndef FXAA_SPAN_MAX\n #define FXAA_SPAN_MAX 8.0\n#endif\n\n//optimized version for mobile, where dependent\n//texture reads can be a bottleneck\nvec4 fxaa(sampler2D tex, vec2 fragCoord, vec2 resolution,\n vec2 v_rgbNW, vec2 v_rgbNE,\n vec2 v_rgbSW, vec2 v_rgbSE,\n vec2 v_rgbM) {\n vec4 color;\n mediump vec2 inverseVP = vec2(1.0 / resolution.x, 1.0 / resolution.y);\n vec3 rgbNW = texture2D(tex, v_rgbNW).xyz;\n vec3 rgbNE = texture2D(tex, v_rgbNE).xyz;\n vec3 rgbSW = texture2D(tex, v_rgbSW).xyz;\n vec3 rgbSE = texture2D(tex, v_rgbSE).xyz;\n vec4 texColor = texture2D(tex, v_rgbM);\n vec3 rgbM = texColor.xyz;\n vec3 luma = vec3(0.299, 0.587, 0.114);\n float lumaNW = dot(rgbNW, luma);\n float lumaNE = dot(rgbNE, luma);\n float lumaSW = dot(rgbSW, luma);\n float lumaSE = dot(rgbSE, luma);\n float lumaM = dot(rgbM, luma);\n float lumaMin = min(lumaM, min(min(lumaNW, lumaNE), min(lumaSW, lumaSE)));\n float lumaMax = max(lumaM, max(max(lumaNW, lumaNE), max(lumaSW, lumaSE)));\n\n mediump vec2 dir;\n dir.x = -((lumaNW + lumaNE) - (lumaSW + lumaSE));\n dir.y = ((lumaNW + lumaSW) - (lumaNE + lumaSE));\n\n float dirReduce = max((lumaNW + lumaNE + lumaSW + lumaSE) *\n (0.25 * FXAA_REDUCE_MUL), FXAA_REDUCE_MIN);\n\n float rcpDirMin = 1.0 / (min(abs(dir.x), abs(dir.y)) + dirReduce);\n dir = min(vec2(FXAA_SPAN_MAX, FXAA_SPAN_MAX),\n max(vec2(-FXAA_SPAN_MAX, -FXAA_SPAN_MAX),\n dir * rcpDirMin)) * inverseVP;\n\n vec3 rgbA = 0.5 * (\n texture2D(tex, fragCoord * inverseVP + dir * (1.0 / 3.0 - 0.5)).xyz +\n texture2D(tex, fragCoord * inverseVP + dir * (2.0 / 3.0 - 0.5)).xyz);\n vec3 rgbB = rgbA * 0.5 + 0.25 * (\n texture2D(tex, fragCoord * inverseVP + dir * -0.5).xyz +\n texture2D(tex, fragCoord * inverseVP + dir * 0.5).xyz);\n\n float lumaB = dot(rgbB, luma);\n if ((lumaB < lumaMin) || (lumaB > lumaMax))\n color = vec4(rgbA, texColor.a);\n else\n color = vec4(rgbB, texColor.a);\n return color;\n}\n\n\nvarying vec2 vTextureCoord;\nvarying vec4 vColor;\nvarying vec2 vResolution;\n\n//texcoords computed in vertex step\n//to avoid dependent texture reads\nvarying vec2 v_rgbNW;\nvarying vec2 v_rgbNE;\nvarying vec2 v_rgbSW;\nvarying vec2 v_rgbSE;\nvarying vec2 v_rgbM;\n\nuniform sampler2D uSampler;\n\n\nvoid main(void){\n\n gl_FragColor = fxaa(uSampler, vTextureCoord * vResolution, vResolution, v_rgbNW, v_rgbNE, v_rgbSW, v_rgbSE, v_rgbM);\n\n}\n',{resolution:{type:"v2",value:{x:1,y:1}}})}var n=t("./AbstractFilter");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.applyFilter=function(t,e,r){var i=t.filterManager,n=this.getShader(t);i.applyFilter(n,e,r)}},{"./AbstractFilter":73}],75:[function(t,e,r){function i(t){var e=new o.Matrix;n.call(this,"attribute vec2 aVertexPosition;\nattribute vec2 aTextureCoord;\nattribute vec4 aColor;\n\nuniform mat3 projectionMatrix;\nuniform mat3 otherMatrix;\n\nvarying vec2 vMaskCoord;\nvarying vec2 vTextureCoord;\nvarying vec4 vColor;\n\nvoid main(void)\n{\n gl_Position = vec4((projectionMatrix * vec3(aVertexPosition, 1.0)).xy, 0.0, 1.0);\n vTextureCoord = aTextureCoord;\n vMaskCoord = ( otherMatrix * vec3( aTextureCoord, 1.0) ).xy;\n vColor = vec4(aColor.rgb * aColor.a, aColor.a);\n}\n","precision lowp float;\n\nvarying vec2 vMaskCoord;\nvarying vec2 vTextureCoord;\nvarying vec4 vColor;\n\nuniform sampler2D uSampler;\nuniform float alpha;\nuniform sampler2D mask;\n\nvoid main(void)\n{\n // check clip! this will stop the mask bleeding out from the edges\n vec2 text = abs( vMaskCoord - 0.5 );\n text = step(0.5, text);\n float clip = 1.0 - max(text.y, text.x);\n vec4 original = texture2D(uSampler, vTextureCoord);\n vec4 masky = texture2D(mask, vMaskCoord);\n original *= (masky.r * masky.a * alpha * clip);\n gl_FragColor = original;\n}\n",{mask:{type:"sampler2D",value:t._texture},alpha:{type:"f",value:1},otherMatrix:{type:"mat3",value:e.toArray(!0)}}),this.maskSprite=t,this.maskMatrix=e}var n=t("./AbstractFilter"),o=t("../../../math");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.applyFilter=function(t,e,r){var i=t.filterManager;this.uniforms.mask.value=this.maskSprite._texture,i.calculateMappedMatrix(e.frame,this.maskSprite,this.maskMatrix),this.uniforms.otherMatrix.value=this.maskMatrix.toArray(!0),this.uniforms.alpha.value=this.maskSprite.worldAlpha;var n=this.getShader(t);i.applyFilter(n,e,r)},Object.defineProperties(i.prototype,{map:{get:function(){return this.uniforms.mask.value},set:function(t){this.uniforms.mask.value=t}},offset:{get:function(){return this.uniforms.offset.value},set:function(t){this.uniforms.offset.value=t}}})},{"../../../math":55,"./AbstractFilter":73}],76:[function(t,e,r){function i(t){n.call(this,t),this.currentBlendMode=99999}var n=t("./WebGLManager");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.setBlendMode=function(t){if(this.currentBlendMode===t)return!1;this.currentBlendMode=t;var e=this.renderer.blendModes[this.currentBlendMode];return this.renderer.gl.blendFunc(e[0],e[1]),!0}},{"./WebGLManager":81}],77:[function(t,e,r){function i(t){n.call(this,t),this.filterStack=[],this.filterStack.push({renderTarget:t.currentRenderTarget,filter:[],bounds:null}),this.texturePool=[],this.textureSize=new h.Rectangle(0,0,t.width,t.height),this.currentFrame=null}var n=t("./WebGLManager"),o=t("../utils/RenderTarget"),s=t("../../../const"),a=t("../utils/Quad"),h=t("../../../math");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.onContextChange=function(){this.texturePool.length=0;var t=this.renderer.gl;this.quad=new a(t)},i.prototype.setFilterStack=function(t){this.filterStack=t},i.prototype.pushFilter=function(t,e){var r=t.filterArea?t.filterArea.clone():t.getBounds();r.x=0|r.x,r.y=0|r.y,r.width=0|r.width,r.height=0|r.height;var i=0|e[0].padding;if(r.x-=i,r.y-=i,r.width+=2*i,r.height+=2*i,this.renderer.currentRenderTarget.transform){var n=this.renderer.currentRenderTarget.transform;r.x+=n.tx,r.y+=n.ty,this.capFilterArea(r),r.x-=n.tx,r.y-=n.ty}else this.capFilterArea(r);if(r.width>0&&r.height>0){this.currentFrame=r;var o=this.getRenderTarget();this.renderer.setRenderTarget(o),o.clear(),this.filterStack.push({renderTarget:o,filter:e})}else this.filterStack.push({renderTarget:null,filter:e})},i.prototype.popFilter=function(){var t=this.filterStack.pop(),e=this.filterStack[this.filterStack.length-1],r=t.renderTarget;if(t.renderTarget){var i=e.renderTarget,n=this.renderer.gl;this.currentFrame=r.frame,this.quad.map(this.textureSize,r.frame),n.bindBuffer(n.ARRAY_BUFFER,this.quad.vertexBuffer),n.bindBuffer(n.ELEMENT_ARRAY_BUFFER,this.quad.indexBuffer);var o=t.filter;if(n.vertexAttribPointer(this.renderer.shaderManager.defaultShader.attributes.aVertexPosition,2,n.FLOAT,!1,0,0),n.vertexAttribPointer(this.renderer.shaderManager.defaultShader.attributes.aTextureCoord,2,n.FLOAT,!1,0,32),n.vertexAttribPointer(this.renderer.shaderManager.defaultShader.attributes.aColor,4,n.FLOAT,!1,0,64),this.renderer.blendModeManager.setBlendMode(s.BLEND_MODES.NORMAL),1===o.length)o[0].uniforms.dimensions&&(o[0].uniforms.dimensions.value[0]=this.renderer.width,o[0].uniforms.dimensions.value[1]=this.renderer.height,o[0].uniforms.dimensions.value[2]=this.quad.vertices[0],o[0].uniforms.dimensions.value[3]=this.quad.vertices[5]),o[0].applyFilter(this.renderer,r,i),this.returnRenderTarget(r);else{for(var a=r,h=this.getRenderTarget(!0),u=0;uthis.textureSize.width&&(t.width=this.textureSize.width-t.x),t.y+t.height>this.textureSize.height&&(t.height=this.textureSize.height-t.y)},i.prototype.resize=function(t,e){this.textureSize.width=t,this.textureSize.height=e;for(var r=0;re;++e)t._array[2*e]=o[e].x,t._array[2*e+1]=o[e].y;s.uniform2fv(i,t._array);break;case"v3v":for(t._array||(t._array=new Float32Array(3*o.length)),e=0,r=o.length;r>e;++e)t._array[3*e]=o[e].x,t._array[3*e+1]=o[e].y,t._array[3*e+2]=o[e].z;s.uniform3fv(i,t._array);break;case"v4v":for(t._array||(t._array=new Float32Array(4*o.length)),e=0,r=o.length;r>e;++e)t._array[4*e]=o[e].x,t._array[4*e+1]=o[e].y,t._array[4*e+2]=o[e].z,t._array[4*e+3]=o[e].w;s.uniform4fv(i,t._array);break;case"t":case"sampler2D":if(!t.value||!t.value.baseTexture.hasLoaded)break;s.activeTexture(s["TEXTURE"+this.textureCount]);var a=t.value.baseTexture._glTextures[s.id];a||(this.initSampler2D(t),a=t.value.baseTexture._glTextures[s.id]),s.bindTexture(s.TEXTURE_2D,a),s.uniform1i(t._location,this.textureCount),this.textureCount++;break;default:console.warn("Pixi.js Shader Warning: Unknown uniform type: "+t.type)}},i.prototype.syncUniforms=function(){this.textureCount=1;for(var t in this.uniforms)this.syncUniform(this.uniforms[t])},i.prototype.initSampler2D=function(t){var e=this.gl,r=t.value.baseTexture;if(r.hasLoaded)if(t.textureData){var i=t.textureData;r._glTextures[e.id]=e.createTexture(),e.bindTexture(e.TEXTURE_2D,r._glTextures[e.id]),e.pixelStorei(e.UNPACK_PREMULTIPLY_ALPHA_WEBGL,r.premultipliedAlpha),e.texImage2D(e.TEXTURE_2D,0,i.luminance?e.LUMINANCE:e.RGBA,e.RGBA,e.UNSIGNED_BYTE,r.source),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MAG_FILTER,i.magFilter?i.magFilter:e.LINEAR),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MIN_FILTER,i.wrapS?i.wrapS:e.CLAMP_TO_EDGE),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,i.wrapS?i.wrapS:e.CLAMP_TO_EDGE),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,i.wrapT?i.wrapT:e.CLAMP_TO_EDGE)}else this.shaderManager.renderer.updateTexture(r)},i.prototype.destroy=function(){this.gl.deleteProgram(this.program),this.gl=null,this.uniforms=null,this.attributes=null,this.vertexSrc=null,this.fragmentSrc=null},i.prototype._glCompile=function(t,e){var r=this.gl.createShader(t);return this.gl.shaderSource(r,e),this.gl.compileShader(r),this.gl.getShaderParameter(r,this.gl.COMPILE_STATUS)?r:(console.log(this.gl.getShaderInfoLog(r)),null)}},{"../../../utils":105}],85:[function(t,e,r){function i(t,e,r,o,s){var a={uSampler:{type:"sampler2D",value:0},projectionMatrix:{type:"mat3",value:new Float32Array([1,0,0,0,1,0,0,0,1])}};if(o)for(var h in o)a[h]=o[h];var u={aVertexPosition:0,aTextureCoord:0,aColor:0};if(s)for(var l in s)u[l]=s[l];e=e||i.defaultVertexSrc,r=r||i.defaultFragmentSrc,n.call(this,t,e,r,a,u)}var n=t("./Shader");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.defaultVertexSrc=["precision lowp float;","attribute vec2 aVertexPosition;","attribute vec2 aTextureCoord;","attribute vec4 aColor;","uniform mat3 projectionMatrix;","varying vec2 vTextureCoord;","varying vec4 vColor;","void main(void){"," gl_Position = vec4((projectionMatrix * vec3(aVertexPosition, 1.0)).xy, 0.0, 1.0);"," vTextureCoord = aTextureCoord;"," vColor = vec4(aColor.rgb * aColor.a, aColor.a);","}"].join("\n"),i.defaultFragmentSrc=["precision lowp float;","varying vec2 vTextureCoord;","varying vec4 vColor;","uniform sampler2D uSampler;","void main(void){"," gl_FragColor = texture2D(uSampler, vTextureCoord) * vColor ;","}"].join("\n")},{"./Shader":84}],86:[function(t,e,r){function i(t){vertexSrc=i.defaultVertexSrc,fragmentSrc=i.defaultFragmentSrc,n.call(this,t,vertexSrc,fragmentSrc)}var n=t("pixi-gl-core").GLShader;i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.defaultVertexSrc=["precision lowp float;","attribute vec2 aVertexPosition;","attribute vec2 aTextureCoord;","attribute vec4 aColor;","uniform mat3 projectionMatrix;","varying vec2 vTextureCoord;","varying vec4 vColor;","void main(void){"," gl_Position = vec4((projectionMatrix * vec3(aVertexPosition, 1.0)).xy, 0.0, 1.0);"," vTextureCoord = aTextureCoord;"," vColor = vec4(aColor.rgb * aColor.a, aColor.a);","}"].join("\n"),i.defaultFragmentSrc=["precision lowp float;","varying vec2 vTextureCoord;","varying vec4 vColor;","uniform sampler2D uSampler;","void main(void){"," gl_FragColor = texture2D(uSampler, vTextureCoord) * vColor ;","}"].join("\n")},{"pixi-gl-core":1}],87:[function(t,e,r){function i(t){n.call(this,t)}var n=t("../managers/WebGLManager");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.start=function(){},i.prototype.stop=function(){this.flush()},i.prototype.flush=function(){},i.prototype.render=function(t){}},{"../managers/WebGLManager":81}],88:[function(t,e,r){function i(t){this.gl=t,this.vertices=new Float32Array([0,0,200,0,200,200,0,200]),this.uvs=new Float32Array([0,0,1,0,1,1,0,1]),this.colors=new Float32Array([1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]),this.indices=new Uint16Array([0,1,2,0,3,2]),this.vertexBuffer=t.createBuffer(),this.indexBuffer=t.createBuffer(),t.bindBuffer(t.ARRAY_BUFFER,this.vertexBuffer),t.bufferData(t.ARRAY_BUFFER,128,t.DYNAMIC_DRAW),t.bindBuffer(t.ELEMENT_ARRAY_BUFFER,this.indexBuffer),t.bufferData(t.ELEMENT_ARRAY_BUFFER,this.indices,t.STATIC_DRAW),this.upload()}i.prototype.constructor=i,i.prototype.map=function(t,e){var r=0,i=0;this.uvs[0]=r,this.uvs[1]=i,this.uvs[2]=r+e.width/t.width,this.uvs[3]=i,this.uvs[4]=r+e.width/t.width,this.uvs[5]=i+e.height/t.height,this.uvs[6]=r,this.uvs[7]=i+e.height/t.height,r=e.x,i=e.y,this.vertices[0]=r,this.vertices[1]=i,this.vertices[2]=r+e.width,this.vertices[3]=i,this.vertices[4]=r+e.width,this.vertices[5]=i+e.height,this.vertices[6]=r,this.vertices[7]=i+e.height,this.upload()},i.prototype.upload=function(){var t=this.gl;t.bindBuffer(t.ARRAY_BUFFER,this.vertexBuffer),t.bufferSubData(t.ARRAY_BUFFER,0,this.vertices),t.bufferSubData(t.ARRAY_BUFFER,32,this.uvs),t.bufferSubData(t.ARRAY_BUFFER,64,this.colors)},i.prototype.destroy=function(){var t=this.gl;t.deleteBuffer(this.vertexBuffer),t.deleteBuffer(this.indexBuffer)},e.exports=i},{}],89:[function(t,e,r){var i=t("../../../math"),n=(t("../../../utils"),t("../../../const")),o=t("pixi-gl-core").GLTexture,s=t("pixi-gl-core").GLFramebuffer,a=t("./StencilMaskStack"),h=function(t,e,r,h,u,l){if(this.gl=t,this.frameBuffer=null,this.texture=null,this.clearColor=[0,0,0,0],this.size=new i.Rectangle(0,0,1,1),this.resolution=u||n.RESOLUTION,this.projectionMatrix=new i.Matrix,this.transform=null,this.frame=null,this.stencilBuffer=null,this.stencilMaskStack=new a,this.filterStack=[{renderTarget:this,filter:[],bounds:this.size}],this.scaleMode=h||n.SCALE_MODES.DEFAULT,this.root=l,this.frameBuffer=s.createRGBA(t,100,100),this.frameBuffer&&this.frameBuffer.unbind(),this.root)this.frameBuffer.framebuffer=null;else{var c=new o(t);c.enableLinearScaling(),c.enableWrapClamp(),this.frameBuffer.enableTexture(c),this.texture=c.texture}this.resize(e,r)};h.prototype.constructor=h,e.exports=h,h.prototype.clear=function(t){var e=t||this.clearColor;this.frameBuffer.clear(e[0],e[1],e[2],e[3])},h.prototype.attachStencilBuffer=function(){this.root||this.frameBuffer.enableStencil()},h.prototype.activate=function(){var t=this.gl;this.frameBuffer.bind();var e=this.frame||this.size;this.calculateProjection(e),this.transform&&this.projectionMatrix.append(this.transform),t.viewport(0,0,e.width*this.resolution,e.height*this.resolution)},h.prototype.calculateProjection=function(t){var e=this.projectionMatrix;e.identity(),this.root?(e.a=1/t.width*2,e.d=-1/t.height*2,e.tx=-1-t.x*e.a,e.ty=1-t.y*e.d):(e.a=1/t.width*2,e.d=1/t.height*2,e.tx=-1-t.x*e.a,e.ty=-1-t.y*e.d)},h.prototype.resize=function(t,e){if(t=0|t,e=0|e,this.size.width!==t||this.size.height!==e){this.size.width=t,this.size.height=e,this.frameBuffer.resize(t*this.resolution,e*this.resolution);var r=this.frame||this.size;this.calculateProjection(r)}},h.prototype.destroy=function(){this.gl;this.frameBuffer.destroy(),this.frameBuffer=null,this.texture=null}},{"../../../const":38,"../../../math":55,"../../../utils":105,"./StencilMaskStack":90,"pixi-gl-core":1}],90:[function(t,e,r){function i(){this.stencilStack=[],this.reverse=!0,this.count=0}i.prototype.constructor=i,e.exports=i},{}],91:[function(t,e,r){function i(t,e){return e=e||{},e[CONST.BLEND_MODES.NORMAL]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.ADD]=[t.SRC_ALPHA,t.DST_ALPHA],e[CONST.BLEND_MODES.MULTIPLY]=[t.DST_COLOR,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.SCREEN]=[t.SRC_ALPHA,t.ONE],e[CONST.BLEND_MODES.OVERLAY]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.DARKEN]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.LIGHTEN]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.COLOR_DODGE]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.COLOR_BURN]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.HARD_LIGHT]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.SOFT_LIGHT]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.DIFFERENCE]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.EXCLUSION]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.HUE]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.SATURATION]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.COLOR]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.LUMINOSITY]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e}CONST=t("../../../const"),e.exports=i},{"../../../const":38}],92:[function(t,e,r){function i(t,e){e=e||{},e[CONST.DRAW_MODES.POINTS]=t.POINTS,e[CONST.DRAW_MODES.LINES]=t.LINES,e[CONST.DRAW_MODES.LINE_LOOP]=t.LINE_LOOP,e[CONST.DRAW_MODES.LINE_STRIP]=t.LINE_STRIP,e[CONST.DRAW_MODES.TRIANGLES]=t.TRIANGLES,e[CONST.DRAW_MODES.TRIANGLE_STRIP]=t.TRIANGLE_STRIP,e[CONST.DRAW_MODES.TRIANGLE_FAN]=t.TRIANGLE_FAN}CONST=t("../../../const"),e.exports=i},{"../../../const":38}],93:[function(t,e,r){function i(t){s.call(this),this.anchor=new n.Point,this._texture=null,this._width=0,this._height=0,this.tint=16777215,this.blendMode=u.BLEND_MODES.NORMAL,this.shader=null,this.cachedTint=16777215,this.texture=t||o.EMPTY,this.textureDirty=!0,this.vertexDirty=!0,this.vertexData=new Float32Array(8)}var n=t("../math"),o=t("../textures/Texture"),s=t("../display/Container"),a=t("../renderers/canvas/utils/CanvasTinter"),h=t("../utils"),u=t("../const"),l=new n.Point;i.prototype=Object.create(s.prototype),i.prototype.constructor=i,e.exports=i,Object.defineProperties(i.prototype,{width:{get:function(){return Math.abs(this.scale.x)*this.texture._frame.width},set:function(t){var e=h.sign(this.scale.x)||1;this.scale.x=e*t/this.texture._frame.width,this._width=t}},height:{get:function(){return Math.abs(this.scale.y)*this.texture._frame.height},set:function(t){var e=h.sign(this.scale.y)||1;this.scale.y=e*t/this.texture._frame.height,this._height=t}},texture:{get:function(){return this._texture},set:function(t){this._texture!==t&&(this._texture=t,this.cachedTint=16777215,this.textureDirty=!0,t&&(t.baseTexture.hasLoaded?this._onTextureUpdate():t.once("update",this._onTextureUpdate,this)))}}}),i.prototype._onTextureUpdate=function(){this.textureDirty=!0,this._width&&(this.scale.x=h.sign(this.scale.x)*this._width/this.texture.frame.width),this._height&&(this.scale.y=h.sign(this.scale.y)*this._height/this.texture.frame.height)},i.prototype.caclulateVertices=function(){var t,e,r,i,n=this._texture,o=this.worldTransform,s=o.a,a=o.b,h=o.c,u=o.d,l=o.tx,c=o.ty,p=this.vertexData,d=n.trim;d?(e=d.x-this.anchor.x*d.width,t=e+n.crop.width,i=d.y-this.anchor.y*d.height,r=i+n.crop.height):(t=n._frame.width*(1-this.anchor.x),e=n._frame.width*-this.anchor.x,r=n._frame.height*(1-this.anchor.y),i=n._frame.height*-this.anchor.y),p[0]=s*e+h*i+l,p[1]=u*i+a*e+c,p[2]=s*t+h*i+l,p[3]=u*i+a*t+c,p[4]=s*t+h*r+l,p[5]=u*r+a*t+c,p[6]=s*e+h*r+l,p[7]=u*r+a*e+c},i.prototype._renderWebGL=function(t){this.textureDirty&&(this.textureDirty=!1,this._onTextureUpdate(),this.vertexDirty=!0),this.vertexDirty&&(this.vertexDirty=!1,this.caclulateVertices()),t.setObjectRenderer(t.plugins.sprite),t.plugins.sprite.render(this)},i.prototype.getBounds=function(t){if(!this._currentBounds){this.vertexDirty&&(this.vertexDirty=!1,this.caclulateVertices());var e,r,i,n,o=this.vertexData,s=o[0],a=o[1],h=o[2],u=o[3],l=o[4],c=o[5],p=o[6],d=o[7];if(e=s,e=e>h?h:e,e=e>l?l:e,e=e>p?p:e,i=a,i=i>u?u:i,i=i>c?c:i,i=i>d?d:i,r=s,r=h>r?h:r,r=l>r?l:r,r=p>r?p:r,n=a,n=u>n?u:n,n=c>n?c:n,n=d>n?d:n,this.children.length){var f=this.containerGetBounds();w0=f.x,w1=f.x+f.width,h0=f.y,h1=f.y+f.height,e=ew1?r:w1,n=n>h1?n:h1}var v=this._bounds;v.x=e,v.width=r-e,v.y=i,v.height=n-i,this._currentBounds=v}return this._currentBounds},i.prototype.getLocalBounds=function(){return this._bounds.x=-this._texture._frame.width*this.anchor.x,this._bounds.y=-this._texture._frame.height*this.anchor.y,this._bounds.width=this._texture._frame.width,this._bounds.height=this._texture._frame.height,this._bounds},i.prototype.containsPoint=function(t){this.worldTransform.applyInverse(t,l);var e,r=this._texture._frame.width,i=this._texture._frame.height,n=-r*this.anchor.x;return l.x>n&&l.xe&&l.y=this.size&&this.flush(),t.texture._uvs){var e,r=t.texture.baseTexture,i=this.currentGroup;if(this.currentTexture!==r){if(this.currentTexture=r,!r._enabled){if(r._enabled=!0,r._id=this.textureCount,this.textureCount===this.MAX_TEXTUES){for(e=0;e>16)+(65280&t.tint)+((255&t.tint)<<16)+(255*t.worldAlpha<<24),u=t.texture._uvs.uvs_uint32;s[n++]=a[0],s[n++]=a[1],this.uvs[n++]=u[0],o[n++]=h,s[n++]=r._id,s[n++]=a[2],s[n++]=a[3],this.uvs[n++]=u[1],o[n++]=h,s[n++]=r._id,s[n++]=a[4],s[n++]=a[5],this.uvs[n++]=u[2],o[n++]=h,s[n++]=r._id,s[n++]=a[6],s[n++]=a[7],this.uvs[n++]=u[3],o[n++]=h,s[n++]=r._id}},i.prototype.flush=function(){if(0!==this.currentIndex){var t=this.renderer.gl;this.currentGroup.size=this.currentIndex-this.currentGroup.start;for(var e=0;e.5*this.size)this.vertexBuffer.upload(this.vertices,0,!0);else{var r=this.positions.subarray(0,this.currentIndex*this.vertByteSize);this.vertexBuffer.upload(r,0,!0)}for(this.renderer.bindShader(this._shader),this.renderer.blendModeManager.setBlendMode(0),e=0;eu;u++)h[u]=u;return a.bind(),a.uniforms.uSamplers=h,a}function n(t){var e="vec4 getSampleFromArray(sampler2D textures[%%], int ndx, vec2 uv) {\n\nvec4 color;";e+="\n",e+="\n";for(var r=0;t>r;r++)r>0&&(e+="\nelse "),t-1>r&&(e+="if(ndx == "+r+")"),e+="\n{",e+="\n color = texture2D(textures["+r+"], uv);",e+="\n}";return e+="\n",e+="\n",e+="return color;",e+="\n}"}var o=t("pixi-gl-core").GLShader,s=["varying vec2 vTextureCoord;","varying vec4 vColor;","varying float vTextureId;","uniform sampler2D uSamplers[%%];","void main(void){","gl_FragColor = getSampleFromArray(uSamplers, int(vTextureId), vTextureCoord) * vColor;","}"].join("\n");e.exports=i},{"pixi-gl-core":1}],96:[function(t,e,r){function i(t,e,r){this.canvas=document.createElement("canvas"),this.context=this.canvas.getContext("2d"),this.resolution=r||h.RESOLUTION,this._text=null,this._style=null;var i=o.fromCanvas(this.canvas);i.trim=new s.Rectangle,n.call(this,i),this.text=t,this.style=e}var n=t("../sprites/Sprite"),o=t("../textures/Texture"),s=t("../math"),a=t("../utils"),h=t("../const");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.fontPropertiesCache={},i.fontPropertiesCanvas=document.createElement("canvas"),i.fontPropertiesContext=i.fontPropertiesCanvas.getContext("2d"),Object.defineProperties(i.prototype,{width:{get:function(){return this.dirty&&this.updateText(),this.scale.x*this._texture._frame.width},set:function(t){this.scale.x=t/this._texture._frame.width,this._width=t}},height:{get:function(){return this.dirty&&this.updateText(),this.scale.y*this._texture._frame.height},set:function(t){this.scale.y=t/this._texture._frame.height,this._height=t}},style:{get:function(){return this._style},set:function(t){t=t||{},"number"==typeof t.fill&&(t.fill=a.hex2string(t.fill)),"number"==typeof t.stroke&&(t.stroke=a.hex2string(t.stroke)),"number"==typeof t.dropShadowColor&&(t.dropShadowColor=a.hex2string(t.dropShadowColor)),t.font=t.font||"bold 20pt Arial",t.fill=t.fill||"black",t.align=t.align||"left",t.stroke=t.stroke||"black",t.strokeThickness=t.strokeThickness||0,t.wordWrap=t.wordWrap||!1,t.wordWrapWidth=t.wordWrapWidth||100,t.dropShadow=t.dropShadow||!1,t.dropShadowColor=t.dropShadowColor||"#000000",t.dropShadowAngle=void 0!==t.dropShadowAngle?t.dropShadowAngle:Math.PI/6,t.dropShadowDistance=void 0!==t.dropShadowDistance?t.dropShadowDistance:5,t.dropShadowBlur=void 0!==t.dropShadowBlur?t.dropShadowBlur:0,t.padding=t.padding||0,t.textBaseline=t.textBaseline||"alphabetic",t.lineJoin=t.lineJoin||"miter",t.miterLimit=t.miterLimit||10,this._style=t,this.dirty=!0}},text:{get:function(){return this._text},set:function(t){t=t.toString()||" ",this._text!==t&&(this._text=t,this.dirty=!0)}}}),i.prototype.updateText=function(){var t=this._style;this.context.font=t.font;for(var e=t.wordWrap?this.wordWrap(this._text):this._text,r=e.split(/(?:\r\n|\r|\n)/),i=new Array(r.length),n=0,o=this.determineFontProperties(t.font),s=0;s0?(this.context.shadowColor=t.dropShadowColor,this.context.shadowBlur=t.dropShadowBlur):this.context.fillStyle=t.dropShadowColor;var d=Math.cos(t.dropShadowAngle)*t.dropShadowDistance,f=Math.sin(t.dropShadowAngle)*t.dropShadowDistance;for(s=0;sh;h++){for(u=0;p>u;u+=4)if(255!==l[d+u]){f=!0;break}if(f)break;d+=p}for(e.ascent=s-h,d=c-p,f=!1,h=a;h>s;h--){for(u=0;p>u;u+=4)if(255!==l[d+u]){f=!0;break}if(f)break;d-=p}e.descent=h-s,e.fontSize=e.ascent+e.descent,i.fontPropertiesCache[t]=e}return e},i.prototype.wordWrap=function(t){for(var e="",r=t.split("\n"),i=this._style.wordWrapWidth,n=0;no?(a>0&&(e+="\n"),e+=s[a],o=i-h):(o-=u,e+=" "+s[a])}n0&&e>0,this.width=this._frame.width=this.crop.width=t,this.height=this._frame.height=this.crop.height=e,r&&(this.baseTexture.width=this.width,this.baseTexture.height=this.height),this.valid&&(this.textureBuffer.resize(this.width,this.height),this.filterManager&&this.filterManager.resize(this.width,this.height)))},i.prototype.clear=function(){this.valid&&(this.renderer.type===l.RENDERER_TYPE.WEBGL&&this.renderer.gl.bindFramebuffer(this.renderer.gl.FRAMEBUFFER,this.textureBuffer.frameBuffer),this.textureBuffer.clear())},i.prototype.renderWebGL=function(t,e,r,i){if(this.valid){if(i=void 0!==i?i:!0,this.textureBuffer.transform=e,this.textureBuffer.activate(),t.worldAlpha=1,i){t.worldTransform.identity(),t.currentBounds=null;var n,o,s=t.children;for(n=0,o=s.length;o>n;++n)s[n].updateTransform()}var a=this.renderer.filterManager;this.renderer.filterManager=this.filterManager,this.renderer.renderDisplayObject(t,this.textureBuffer,r),this.renderer.filterManager=a}},i.prototype.renderCanvas=function(t,e,r,i){if(this.valid){i=!!i;var n=c;n.identity(),e&&n.append(e);var o=t.worldTransform;t.worldTransform=n,t.worldAlpha=1;var s,a,h=t.children;for(s=0,a=h.length;a>s;++s)h[s].updateTransform();r&&this.textureBuffer.clear();var u=this.textureBuffer.context,l=this.renderer.resolution;this.renderer.resolution=this.resolution,this.renderer.renderDisplayObject(t,u),this.renderer.resolution=l,t.worldTransform===n&&(t.worldTransform=o)}},i.prototype.destroy=function(){o.prototype.destroy.call(this,!0),this.textureBuffer.destroy(),this.filterManager&&this.filterManager.destroy(),this.renderer=null},i.prototype.getImage=function(){var t=new Image;return t.src=this.getBase64(),t},i.prototype.getBase64=function(){return this.getCanvas().toDataURL()},i.prototype.getCanvas=function(){if(this.renderer.type===l.RENDERER_TYPE.WEBGL){var t=this.renderer.gl,e=this.textureBuffer.size.width,r=this.textureBuffer.size.height,i=new Uint8Array(4*e*r);t.bindFramebuffer(t.FRAMEBUFFER,this.textureBuffer.frameBuffer),t.readPixels(0,0,e,r,t.RGBA,t.UNSIGNED_BYTE,i),t.bindFramebuffer(t.FRAMEBUFFER,null);var n=new h(e,r),o=n.context.getImageData(0,0,e,r);return o.data.set(i),n.context.putImageData(o,0,0),n.canvas}return this.textureBuffer.canvas},i.prototype.getPixels=function(){var t,e;if(this.renderer.type===l.RENDERER_TYPE.WEBGL){var r=this.renderer.gl;t=this.textureBuffer.size.width,e=this.textureBuffer.size.height;var i=new Uint8Array(4*t*e);return r.bindFramebuffer(r.FRAMEBUFFER,this.textureBuffer.frameBuffer),r.readPixels(0,0,t,e,r.RGBA,r.UNSIGNED_BYTE,i),r.bindFramebuffer(r.FRAMEBUFFER,null),i}return t=this.textureBuffer.canvas.width,e=this.textureBuffer.canvas.height,this.textureBuffer.canvas.getContext("2d").getImageData(0,0,t,e).data},i.prototype.getPixel=function(t,e){if(this.renderer.type===l.RENDERER_TYPE.WEBGL){var r=this.renderer.gl,i=new Uint8Array(4);return r.bindFramebuffer(r.FRAMEBUFFER,this.textureBuffer.frameBuffer),r.readPixels(t,e,1,1,r.RGBA,r.UNSIGNED_BYTE,i),r.bindFramebuffer(r.FRAMEBUFFER,null),i}return this.textureBuffer.canvas.getContext("2d").getImageData(t,e,1,1).data}},{"../const":38,"../math":55,"../renderers/canvas/utils/CanvasBuffer":67,"../renderers/webgl/managers/FilterManager":77,"../renderers/webgl/utils/RenderTarget":89,"./BaseTexture":97,"./Texture":99}],99:[function(t,e,r){function i(t,e,r,n,o){a.call(this),this.noFrame=!1,e||(this.noFrame=!0,e=new h.Rectangle(0,0,1,1)),t instanceof i&&(t=t.baseTexture),this.baseTexture=t,this._frame=e,this.trim=n,this.valid=!1,this.requiresUpdate=!1,this._uvs=null,this.width=0,this.height=0,this.crop=r||e,this.rotate=!!o,t.hasLoaded?(this.noFrame&&(e=new h.Rectangle(0,0,t.width,t.height),t.on("update",this.onBaseTextureUpdated,this)),this.frame=e):t.once("loaded",this.onBaseTextureLoaded,this)}var n=t("./BaseTexture"),o=t("./VideoBaseTexture"),s=t("./TextureUvs"),a=t("eventemitter3"),h=t("../math"),u=t("../utils");i.prototype=Object.create(a.prototype),i.prototype.constructor=i,e.exports=i,Object.defineProperties(i.prototype,{frame:{get:function(){return this._frame},set:function(t){if(this._frame=t,this.noFrame=!1,this.width=t.width,this.height=t.height,!this.trim&&!this.rotate&&(t.x+t.width>this.baseTexture.width||t.y+t.height>this.baseTexture.height))throw new Error("Texture Error: frame does not fit inside the base Texture dimensions "+this);this.valid=t&&t.width&&t.height&&this.baseTexture.hasLoaded,this.trim?(this.width=this.trim.width,this.height=this.trim.height,this._frame.width=this.trim.width,this._frame.height=this.trim.height):this.crop=t,this.valid&&this._updateUvs()}}}),i.prototype.update=function(){this.baseTexture.update()},i.prototype.onBaseTextureLoaded=function(t){this.noFrame?this.frame=new h.Rectangle(0,0,t.width,t.height):this.frame=this._frame,this.emit("update",this)},i.prototype.onBaseTextureUpdated=function(t){this._frame.width=t.width,this._frame.height=t.height,this.emit("update",this)},i.prototype.destroy=function(t){this.baseTexture&&(t&&this.baseTexture.destroy(),this.baseTexture.off("update",this.onBaseTextureUpdated,this),this.baseTexture.off("loaded",this.onBaseTextureLoaded,this),this.baseTexture=null),this._frame=null,this._uvs=null,this.trim=null,this.crop=null,this.valid=!1,this.off("dispose",this.dispose,this),this.off("update",this.update,this)},i.prototype.clone=function(){return new i(this.baseTexture,this.frame,this.crop,this.trim,this.rotate)},i.prototype._updateUvs=function(){this._uvs||(this._uvs=new s),this._uvs.set(this.crop,this.baseTexture,this.rotate)},i.fromImage=function(t,e,r){var o=u.TextureCache[t];return o||(o=new i(n.fromImage(t,e,r)),u.TextureCache[t]=o),o},i.fromFrame=function(t){var e=u.TextureCache[t];if(!e)throw new Error('The frameId "'+t+'" does not exist in the texture cache');return e},i.fromCanvas=function(t,e){return new i(n.fromCanvas(t,e))},i.fromVideo=function(t,e){return"string"==typeof t?i.fromVideoUrl(t,e):new i(o.fromVideo(t,e))},i.fromVideoUrl=function(t,e){return new i(o.fromUrl(t,e))},i.addTextureToCache=function(t,e){u.TextureCache[e]=t},i.removeTextureFromCache=function(t){var e=u.TextureCache[t];return delete u.TextureCache[t],delete u.BaseTextureCache[t],e},i.EMPTY=new i(new n)},{"../math":55,"../utils":105,"./BaseTexture":97,"./TextureUvs":100,"./VideoBaseTexture":101,eventemitter3:25}],100:[function(t,e,r){function i(){this.x0=0,this.y0=0,this.x1=1,this.y1=0,this.x2=1,this.y2=1,this.x3=0,this.y3=1,this.xy0_uint32=0,this.xy1_uint32=0,this.xy2_uint32=0,this.xy3_uint32=0,this.uvs_uint32=new Uint32Array(4)}e.exports=i,i.prototype.set=function(t,e,r){var i=e.width,n=e.height;r?(this.x0=(t.x+t.height)/i,this.y0=t.y/n,this.x1=(t.x+t.height)/i,this.y1=(t.y+t.width)/n,this.x2=t.x/i,this.y2=(t.y+t.width)/n,this.x3=t.x/i,this.y3=t.y/n):(this.x0=t.x/i,this.y0=t.y/n,this.x1=(t.x+t.width)/i,this.y1=t.y/n,this.x2=(t.x+t.width)/i,this.y2=(t.y+t.height)/n,this.x3=t.x/i,this.y3=(t.y+t.height)/n),this.uvs_uint32[0]=(65535*this.y0&65535)<<16|65535*this.x0&65535,this.uvs_uint32[1]=(65535*this.y1&65535)<<16|65535*this.x1&65535,this.uvs_uint32[2]=(65535*this.y2&65535)<<16|65535*this.x2&65535,this.uvs_uint32[3]=(65535*this.y3&65535)<<16|65535*this.x3&65535}},{}],101:[function(t,e,r){function i(t,e){if(!t)throw new Error("No video source element specified.");(t.readyState===t.HAVE_ENOUGH_DATA||t.readyState===t.HAVE_FUTURE_DATA)&&t.width&&t.height&&(t.complete=!0),o.call(this,t,e),this.autoUpdate=!1,this._onUpdate=this._onUpdate.bind(this),this._onCanPlay=this._onCanPlay.bind(this),t.complete||(t.addEventListener("canplay",this._onCanPlay),t.addEventListener("canplaythrough",this._onCanPlay),t.addEventListener("play",this._onPlayStart.bind(this)),t.addEventListener("pause",this._onPlayStop.bind(this))),this.__loaded=!1}function n(t,e){e||(e="video/"+t.substr(t.lastIndexOf(".")+1));var r=document.createElement("source");return r.src=t,r.type=e,r}var o=t("./BaseTexture"),s=t("../utils");i.prototype=Object.create(o.prototype),i.prototype.constructor=i,e.exports=i,i.prototype._onUpdate=function(){this.autoUpdate&&(window.requestAnimationFrame(this._onUpdate),this.update())},i.prototype._onPlayStart=function(){this.autoUpdate||(window.requestAnimationFrame(this._onUpdate),this.autoUpdate=!0)},i.prototype._onPlayStop=function(){this.autoUpdate=!1},i.prototype._onCanPlay=function(){this.hasLoaded=!0,this.source&&(this.source.removeEventListener("canplay",this._onCanPlay),this.source.removeEventListener("canplaythrough",this._onCanPlay),this.width=this.source.videoWidth,this.height=this.source.videoHeight,this.source.play(),this.__loaded||(this.__loaded=!0,this.emit("loaded",this)))},i.prototype.destroy=function(){this.source&&this.source._pixiId&&(delete s.BaseTextureCache[this.source._pixiId],delete this.source._pixiId),o.prototype.destroy.call(this)},i.fromVideo=function(t,e){t._pixiId||(t._pixiId="video_"+s.uid());var r=s.BaseTextureCache[t._pixiId];return r||(r=new i(t,e),s.BaseTextureCache[t._pixiId]=r),r},i.fromUrl=function(t,e){var r=document.createElement("video");if(Array.isArray(t))for(var o=0;othis._maxElapsedMS&&(e=this._maxElapsedMS),this.deltaTime=e*n.TARGET_FPMS*this.speed,this._emitter.emit(s,this.deltaTime),this.lastTime=t},e.exports=i},{"../const":38,eventemitter3:25}],103:[function(t,e,r){var i=t("./Ticker"),n=new i;n.autoStart=!0,e.exports={shared:n,Ticker:i}},{"./Ticker":102}],104:[function(t,e,r){var i=function(t){for(var e=6*t,r=new Uint16Array(e),i=0,n=0;e>i;i+=6,n+=4)r[i+0]=n+0,r[i+1]=n+1,r[i+2]=n+2,r[i+3]=n+0,r[i+4]=n+2,r[i+5]=n+3;return r};e.exports=i},{}],105:[function(t,e,r){var i=t("../const"),n=e.exports={_uid:0,_saidHello:!1,EventEmitter:t("eventemitter3"),pluginTarget:t("./pluginTarget"),async:t("async"),uid:function(){return++n._uid},hex2rgb:function(t,e){return e=e||[],e[0]=(t>>16&255)/255,e[1]=(t>>8&255)/255,e[2]=(255&t)/255,e},hex2string:function(t){return t=t.toString(16),t="000000".substr(0,6-t.length)+t,"#"+t},rgb2hex:function(t){return(255*t[0]<<16)+(255*t[1]<<8)+255*t[2]},canUseNewCanvasBlendModes:function(){if("undefined"==typeof document)return!1;var t="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAQAAAABAQMAAADD8p2OAAAAA1BMVEX/",e="AAAACklEQVQI12NgAAAAAgAB4iG8MwAAAABJRU5ErkJggg==",r=new Image;r.src=t+"AP804Oa6"+e;var i=new Image;i.src=t+"/wCKxvRF"+e;var n=document.createElement("canvas");n.width=6,n.height=1;var o=n.getContext("2d");o.globalCompositeOperation="multiply",o.drawImage(r,0,0),o.drawImage(i,2,0);var s=o.getImageData(2,0,1,1).data;return 255===s[0]&&0===s[1]&&0===s[2]},getNextPowerOfTwo:function(t){if(t>0&&0===(t&t-1))return t;for(var e=1;t>e;)e<<=1;return e},isPowerOfTwo:function(t,e){return t>0&&0===(t&t-1)&&e>0&&0===(e&e-1)},getResolutionOfUrl:function(t){var e=i.RETINA_PREFIX.exec(t);return e?parseFloat(e[1]):1},sayHello:function(t){if(!n._saidHello){if(navigator.userAgent.toLowerCase().indexOf("chrome")>-1){var e=["\n %c %c %c Pixi.js "+i.VERSION+" - ✰ "+t+" ✰ %c %c http://www.pixijs.com/ %c %c ♥%c♥%c♥ \n\n","background: #ff66a5; padding:5px 0;","background: #ff66a5; padding:5px 0;","color: #ff66a5; background: #030307; padding:5px 0;","background: #ff66a5; padding:5px 0;","background: #ffc3dc; padding:5px 0;","background: #ff66a5; padding:5px 0;","color: #ff2424; background: #fff; padding:5px 0;","color: #ff2424; background: #fff; padding:5px 0;","color: #ff2424; background: #fff; padding:5px 0;"];window.console.log.apply(console,e)}else window.console&&window.console.log("Pixi.js "+i.VERSION+" - "+t+" - http://www.pixijs.com/");n._saidHello=!0}},isWebGLSupported:function(){var t={stencil:!0};try{if(!window.WebGLRenderingContext)return!1;var e=document.createElement("canvas"),r=e.getContext("webgl",t)||e.getContext("experimental-webgl",t);return!(!r||!r.getContextAttributes().stencil)}catch(i){return!1}},sign:function(t){return t?0>t?-1:1:0},removeItems:function(t,e,r){var i=t.length;if(!(e>=i||0===r)){r=e+r>i?i-e:r;for(var n=e,o=i-r;o>n;++n)t[n]=t[n+r];t.length=o}},TextureCache:{},BaseTextureCache:{}}},{"../const":38,"./pluginTarget":106,async:16,eventemitter3:25}],106:[function(t,e,r){function i(t){t.__plugins={},t.registerPlugin=function(e,r){t.__plugins[e]=r},t.prototype.initPlugins=function(){this.plugins=this.plugins||{};for(var e in t.__plugins)this.plugins[e]=new t.__plugins[e](this)},t.prototype.destroyPlugins=function(){for(var t in this.plugins)this.plugins[t].destroy(),this.plugins[t]=null;this.plugins=null}}e.exports={mixin:function(t){i(t)}}},{}],107:[function(t,e,r){var i=t("./core"),n=t("./mesh"),o=t("./extras"),s=t("./filters");i.SpriteBatch=function(){throw new ReferenceError("SpriteBatch does not exist any more, please use the new ParticleContainer instead.")},i.AssetLoader=function(){throw new ReferenceError("The loader system was overhauled in pixi v3, please see the new PIXI.loaders.Loader class.")},Object.defineProperties(i,{Stage:{get:function(){return console.warn("You do not need to use a PIXI Stage any more, you can simply render any container."),i.Container}},DisplayObjectContainer:{get:function(){return console.warn("DisplayObjectContainer has been shortened to Container, please use Container from now on."),i.Container}},Strip:{get:function(){return console.warn("The Strip class has been renamed to Mesh and moved to mesh.Mesh, please use mesh.Mesh from now on."),n.Mesh}},Rope:{get:function(){return console.warn("The Rope class has been moved to mesh.Rope, please use mesh.Rope from now on."),n.Rope}},MovieClip:{get:function(){return console.warn("The MovieClip class has been moved to extras.MovieClip, please use extras.MovieClip from now on."),o.MovieClip}},TilingSprite:{get:function(){return console.warn("The TilingSprite class has been moved to extras.TilingSprite, please use extras.TilingSprite from now on."),o.TilingSprite}},BitmapText:{get:function(){return console.warn("The BitmapText class has been moved to extras.BitmapText, please use extras.BitmapText from now on."),o.BitmapText}},blendModes:{get:function(){return console.warn("The blendModes has been moved to BLEND_MODES, please use BLEND_MODES from now on."),i.BLEND_MODES}},scaleModes:{get:function(){return console.warn("The scaleModes has been moved to SCALE_MODES, please use SCALE_MODES from now on."),i.SCALE_MODES}},BaseTextureCache:{get:function(){return console.warn("The BaseTextureCache class has been moved to utils.BaseTextureCache, please use utils.BaseTextureCache from now on."),i.utils.BaseTextureCache}},TextureCache:{get:function(){return console.warn("The TextureCache class has been moved to utils.TextureCache, please use utils.TextureCache from now on."),i.utils.TextureCache}},math:{get:function(){return console.warn("The math namespace is deprecated, please access members already accessible on PIXI."),i}}}),i.Sprite.prototype.setTexture=function(t){this.texture=t,console.warn("setTexture is now deprecated, please use the texture property, e.g : sprite.texture = texture;")},o.BitmapText.prototype.setText=function(t){this.text=t,console.warn("setText is now deprecated, please use the text property, e.g : myBitmapText.text = 'my text';")},i.Text.prototype.setText=function(t){this.text=t,console.warn("setText is now deprecated, please use the text property, e.g : myText.text = 'my text';")},i.Text.prototype.setStyle=function(t){this.style=t,console.warn("setStyle is now deprecated, please use the style property, e.g : myText.style = style;")},i.Texture.prototype.setFrame=function(t){this.frame=t,console.warn("setFrame is now deprecated, please use the frame property, e.g : myTexture.frame = frame;")},Object.defineProperties(s,{AbstractFilter:{get:function(){return console.warn("filters.AbstractFilter is an undocumented alias, please use AbstractFilter from now on."),i.AbstractFilter}},FXAAFilter:{get:function(){return console.warn("filters.FXAAFilter is an undocumented alias, please use FXAAFilter from now on."),i.FXAAFilter}},SpriteMaskFilter:{get:function(){return console.warn("filters.SpriteMaskFilter is an undocumented alias, please use SpriteMaskFilter from now on."),i.SpriteMaskFilter}}}),i.utils.uuid=function(){return console.warn("utils.uuid() is deprecated, please use utils.uid() from now on."),i.utils.uid()}},{"./core":52,"./extras":114,"./filters":131,"./mesh":156}],108:[function(t,e,r){function i(t,e){n.Container.call(this),e=e||{},this.textWidth=0,this.textHeight=0,this._glyphs=[],this._font={tint:void 0!==e.tint?e.tint:16777215,align:e.align||"left",name:null,size:0},this.font=e.font,this._text=t,this.maxWidth=0,this.maxLineHeight=0,this.dirty=!1,this.updateText()}var n=t("../core");i.prototype=Object.create(n.Container.prototype),i.prototype.constructor=i,e.exports=i,Object.defineProperties(i.prototype,{tint:{get:function(){return this._font.tint},set:function(t){this._font.tint="number"==typeof t&&t>=0?t:16777215,this.dirty=!0}},align:{get:function(){return this._font.align},set:function(t){this._font.align=t||"left",this.dirty=!0}},font:{get:function(){return this._font},set:function(t){t&&("string"==typeof t?(t=t.split(" "),this._font.name=1===t.length?t[0]:t.slice(1).join(" "),this._font.size=t.length>=2?parseInt(t[0],10):i.fonts[this._font.name].size):(this._font.name=t.name,this._font.size="number"==typeof t.size?t.size:parseInt(t.size,10)),this.dirty=!0)}},text:{get:function(){return this._text},set:function(t){t=t.toString()||" ",this._text!==t&&(this._text=t,this.dirty=!0)}}}),i.prototype.updateText=function(){for(var t=i.fonts[this._font.name],e=new n.Point,r=null,o=[],s=0,a=0,h=[],u=0,l=this._font.size/t.size,c=-1,p=0,d=0;d0&&e.x*l>this.maxWidth)n.utils.removeItems(o,c,d-c),d=c,c=-1,h.push(s),a=Math.max(a,s),u++,e.x=0,e.y+=t.lineHeight,r=null;else{var v=t.chars[f];v&&(r&&v.kerning[r]&&(e.x+=v.kerning[r]),o.push({texture:v.texture,line:u,charCode:f,position:new n.Point(e.x+v.xOffset,e.y+v.yOffset)}),s=e.x+(v.texture.width+v.xOffset),e.x+=v.xAdvance,p=Math.max(p,v.yOffset+v.texture.height),r=f)}}h.push(s),a=Math.max(a,s);var g=[];for(d=0;u>=d;d++){var m=0;"right"===this._font.align?m=a-h[d]:"center"===this._font.align&&(m=(a-h[d])/2),g.push(m)}var y=o.length,x=this.tint;for(d=0;y>d;d++){var b=this._glyphs[d];b?b.texture=o[d].texture:(b=new n.Sprite(o[d].texture),this._glyphs.push(b)),b.position.x=(o[d].position.x+g[o[d].line])*l,b.position.y=o[d].position.y*l, +b.scale.x=b.scale.y=l,b.tint=x,b.parent||this.addChild(b)}for(d=y;dt&&(t+=this._textures.length),t}}}),i.prototype.stop=function(){this.playing&&(this.playing=!1,n.ticker.shared.remove(this.update,this))},i.prototype.play=function(){this.playing||(this.playing=!0,n.ticker.shared.add(this.update,this))},i.prototype.gotoAndStop=function(t){this.stop(),this._currentTime=t,this._texture=this._textures[this.currentFrame]},i.prototype.gotoAndPlay=function(t){this._currentTime=t,this.play()},i.prototype.update=function(t){var e=this.animationSpeed*t;if(null!==this._durations){var r=this._currentTime%1*this._durations[this.currentFrame];for(r+=e/60*1e3;0>r;)this._currentTime--,r+=this._durations[this.currentFrame];var i=Math.sign(this.animationSpeed*t);for(this._currentTime=Math.floor(this._currentTime);r>=this._durations[this.currentFrame];)r-=this._durations[this.currentFrame]*i,this._currentTime+=i;this._currentTime+=r/this._durations[this.currentFrame]}else this._currentTime+=e;this._currentTime<0&&!this.loop?(this.gotoAndStop(0),this.onComplete&&this.onComplete()):this._currentTime>=this._textures.length&&!this.loop?(this.gotoAndStop(this._textures.length-1),this.onComplete&&this.onComplete()):this._texture=this._textures[this.currentFrame]},i.prototype.destroy=function(){this.stop(),n.Sprite.prototype.destroy.call(this)},i.fromFrames=function(t){for(var e=[],r=0;rx?x:t,t=t>_?_:t,t=t>E?E:t,r=y,r=r>b?b:r,r=r>T?T:r,r=r>S?S:r,e=m,e=x>e?x:e,e=_>e?_:e,e=E>e?E:e,i=y,i=b>i?b:i,i=T>i?T:i,i=S>i?S:i;var w=this._bounds;return w.x=t,w.width=e-t,w.y=r,w.height=i-r,this._currentBounds=w,w},i.prototype.containsPoint=function(t){this.worldTransform.applyInverse(t,o);var e,r=this._width,i=this._height,n=-r*this.anchor.x;return o.x>n&&o.xe&&o.y 0.2) n = 65600.0; // :\n if (gray > 0.3) n = 332772.0; // *\n if (gray > 0.4) n = 15255086.0; // o\n if (gray > 0.5) n = 23385164.0; // &\n if (gray > 0.6) n = 15252014.0; // 8\n if (gray > 0.7) n = 13199452.0; // @\n if (gray > 0.8) n = 11512810.0; // #\n\n vec2 p = mod( uv / ( pixelSize * 0.5 ), 2.0) - vec2(1.0);\n col = col * character(n, p);\n\n gl_FragColor = vec4(col, 1.0);\n}\n",{dimensions:{type:"4fv",value:new Float32Array([0,0,0,0])},pixelSize:{type:"1f",value:8}})}var n=t("../../core");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i,Object.defineProperties(i.prototype,{size:{get:function(){return this.uniforms.pixelSize.value},set:function(t){this.uniforms.pixelSize.value=t}}})},{"../../core":52}],116:[function(t,e,r){function i(){n.AbstractFilter.call(this),this.blurXFilter=new o,this.blurYFilter=new s,this.defaultFilter=new n.AbstractFilter}var n=t("../../core"),o=t("../blur/BlurXFilter"),s=t("../blur/BlurYFilter");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.applyFilter=function(t,e,r){var i=t.filterManager.getRenderTarget(!0);this.defaultFilter.applyFilter(t,e,r),this.blurXFilter.applyFilter(t,e,i),t.blendModeManager.setBlendMode(n.BLEND_MODES.SCREEN),this.blurYFilter.applyFilter(t,i,r),t.blendModeManager.setBlendMode(n.BLEND_MODES.NORMAL),t.filterManager.returnRenderTarget(i)},Object.defineProperties(i.prototype,{blur:{get:function(){return this.blurXFilter.blur},set:function(t){this.blurXFilter.blur=this.blurYFilter.blur=t}},blurX:{get:function(){return this.blurXFilter.blur},set:function(t){this.blurXFilter.blur=t}},blurY:{get:function(){return this.blurYFilter.blur},set:function(t){this.blurYFilter.blur=t}}})},{"../../core":52,"../blur/BlurXFilter":119,"../blur/BlurYFilter":120}],117:[function(t,e,r){function i(t,e){n.AbstractFilter.call(this,"attribute vec2 aVertexPosition;\nattribute vec2 aTextureCoord;\nattribute vec4 aColor;\n\nuniform float strength;\nuniform float dirX;\nuniform float dirY;\nuniform mat3 projectionMatrix;\n\nvarying vec2 vTextureCoord;\nvarying vec4 vColor;\nvarying vec2 vBlurTexCoords[3];\n\nvoid main(void)\n{\n gl_Position = vec4((projectionMatrix * vec3((aVertexPosition), 1.0)).xy, 0.0, 1.0);\n vTextureCoord = aTextureCoord;\n\n vBlurTexCoords[0] = aTextureCoord + vec2( (0.004 * strength) * dirX, (0.004 * strength) * dirY );\n vBlurTexCoords[1] = aTextureCoord + vec2( (0.008 * strength) * dirX, (0.008 * strength) * dirY );\n vBlurTexCoords[2] = aTextureCoord + vec2( (0.012 * strength) * dirX, (0.012 * strength) * dirY );\n\n vColor = vec4(aColor.rgb * aColor.a, aColor.a);\n}\n","precision lowp float;\n\nvarying vec2 vTextureCoord;\nvarying vec2 vBlurTexCoords[3];\nvarying vec4 vColor;\n\nuniform sampler2D uSampler;\n\nvoid main(void)\n{\n gl_FragColor = vec4(0.0);\n\n gl_FragColor += texture2D(uSampler, vTextureCoord ) * 0.3989422804014327;\n gl_FragColor += texture2D(uSampler, vBlurTexCoords[ 0]) * 0.2419707245191454;\n gl_FragColor += texture2D(uSampler, vBlurTexCoords[ 1]) * 0.05399096651318985;\n gl_FragColor += texture2D(uSampler, vBlurTexCoords[ 2]) * 0.004431848411938341;\n}\n",{strength:{type:"1f",value:1},dirX:{type:"1f",value:t||0},dirY:{type:"1f",value:e||0}}),this.defaultFilter=new n.AbstractFilter,this.passes=1,this.dirX=t||0,this.dirY=e||0,this.strength=4}var n=t("../../core");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.applyFilter=function(t,e,r,i){var n=this.getShader(t);if(this.uniforms.strength.value=this.strength/4/this.passes*(e.frame.width/e.size.width),1===this.passes)t.filterManager.applyFilter(n,e,r,i);else{var o=t.filterManager.getRenderTarget(!0);t.filterManager.applyFilter(n,e,o,i);for(var s=0;s>16&255)/255,s=(r>>8&255)/255,a=(255&r)/255,h=(i>>16&255)/255,u=(i>>8&255)/255,l=(255&i)/255,c=[.3,.59,.11,0,0,o,s,a,t,0,h,u,l,e,0,o-h,s-u,a-l,0,0];this._loadMatrix(c,n)},i.prototype.night=function(t,e){t=t||.1;var r=[-2*t,-t,0,0,0,-t,0,t,0,0,0,t,2*t,0,0,0,0,0,1,0];this._loadMatrix(r,e)},i.prototype.predator=function(t,e){var r=[11.224130630493164*t,-4.794486999511719*t,-2.8746118545532227*t,0*t,.40342438220977783*t,-3.6330697536468506*t,9.193157196044922*t,-2.951810836791992*t,0*t,-1.316135048866272*t,-3.2184197902679443*t,-4.2375030517578125*t,7.476448059082031*t,0*t,.8044459223747253*t,0,0,0,1,0];this._loadMatrix(r,e)},i.prototype.lsd=function(t){var e=[2,-.4,.5,0,0,-.5,2,-.4,0,0,-.4,-.5,3,0,0,0,0,0,1,0];this._loadMatrix(e,t)},i.prototype.reset=function(){var t=[1,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,1,0];this._loadMatrix(t,!1)},Object.defineProperties(i.prototype,{matrix:{get:function(){return this.uniforms.m.value},set:function(t){this.uniforms.m.value=t}}})},{"../../core":52}],123:[function(t,e,r){function i(){n.AbstractFilter.call(this,null,"precision mediump float;\n\nvarying vec2 vTextureCoord;\n\nuniform sampler2D uSampler;\nuniform float step;\n\nvoid main(void)\n{\n vec4 color = texture2D(uSampler, vTextureCoord);\n\n color = floor(color * step) / step;\n\n gl_FragColor = color;\n}\n",{step:{type:"1f",value:5}})}var n=t("../../core");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i,Object.defineProperties(i.prototype,{step:{get:function(){return this.uniforms.step.value},set:function(t){this.uniforms.step.value=t}}})},{"../../core":52}],124:[function(t,e,r){function i(t,e,r){n.AbstractFilter.call(this,null,"precision mediump float;\n\nvarying mediump vec2 vTextureCoord;\n\nuniform sampler2D uSampler;\nuniform vec2 texelSize;\nuniform float matrix[9];\n\nvoid main(void)\n{\n vec4 c11 = texture2D(uSampler, vTextureCoord - texelSize); // top left\n vec4 c12 = texture2D(uSampler, vec2(vTextureCoord.x, vTextureCoord.y - texelSize.y)); // top center\n vec4 c13 = texture2D(uSampler, vec2(vTextureCoord.x + texelSize.x, vTextureCoord.y - texelSize.y)); // top right\n\n vec4 c21 = texture2D(uSampler, vec2(vTextureCoord.x - texelSize.x, vTextureCoord.y)); // mid left\n vec4 c22 = texture2D(uSampler, vTextureCoord); // mid center\n vec4 c23 = texture2D(uSampler, vec2(vTextureCoord.x + texelSize.x, vTextureCoord.y)); // mid right\n\n vec4 c31 = texture2D(uSampler, vec2(vTextureCoord.x - texelSize.x, vTextureCoord.y + texelSize.y)); // bottom left\n vec4 c32 = texture2D(uSampler, vec2(vTextureCoord.x, vTextureCoord.y + texelSize.y)); // bottom center\n vec4 c33 = texture2D(uSampler, vTextureCoord + texelSize); // bottom right\n\n gl_FragColor =\n c11 * matrix[0] + c12 * matrix[1] + c13 * matrix[2] +\n c21 * matrix[3] + c22 * matrix[4] + c23 * matrix[5] +\n c31 * matrix[6] + c32 * matrix[7] + c33 * matrix[8];\n\n gl_FragColor.a = c22.a;\n}\n",{ +matrix:{type:"1fv",value:new Float32Array(t)},texelSize:{type:"v2",value:{x:1/e,y:1/r}}})}var n=t("../../core");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i,Object.defineProperties(i.prototype,{matrix:{get:function(){return this.uniforms.matrix.value},set:function(t){this.uniforms.matrix.value=new Float32Array(t)}},width:{get:function(){return 1/this.uniforms.texelSize.value.x},set:function(t){this.uniforms.texelSize.value.x=1/t}},height:{get:function(){return 1/this.uniforms.texelSize.value.y},set:function(t){this.uniforms.texelSize.value.y=1/t}}})},{"../../core":52}],125:[function(t,e,r){function i(){n.AbstractFilter.call(this,null,"precision mediump float;\n\nvarying vec2 vTextureCoord;\n\nuniform sampler2D uSampler;\n\nvoid main(void)\n{\n float lum = length(texture2D(uSampler, vTextureCoord.xy).rgb);\n\n gl_FragColor = vec4(1.0, 1.0, 1.0, 1.0);\n\n if (lum < 1.00)\n {\n if (mod(gl_FragCoord.x + gl_FragCoord.y, 10.0) == 0.0)\n {\n gl_FragColor = vec4(0.0, 0.0, 0.0, 1.0);\n }\n }\n\n if (lum < 0.75)\n {\n if (mod(gl_FragCoord.x - gl_FragCoord.y, 10.0) == 0.0)\n {\n gl_FragColor = vec4(0.0, 0.0, 0.0, 1.0);\n }\n }\n\n if (lum < 0.50)\n {\n if (mod(gl_FragCoord.x + gl_FragCoord.y - 5.0, 10.0) == 0.0)\n {\n gl_FragColor = vec4(0.0, 0.0, 0.0, 1.0);\n }\n }\n\n if (lum < 0.3)\n {\n if (mod(gl_FragCoord.x - gl_FragCoord.y - 5.0, 10.0) == 0.0)\n {\n gl_FragColor = vec4(0.0, 0.0, 0.0, 1.0);\n }\n }\n}\n")}var n=t("../../core");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i},{"../../core":52}],126:[function(t,e,r){function i(t,e){var r=new n.Matrix;t.renderable=!1,n.AbstractFilter.call(this,"attribute vec2 aVertexPosition;\nattribute vec2 aTextureCoord;\nattribute vec4 aColor;\n\nuniform mat3 projectionMatrix;\nuniform mat3 otherMatrix;\n\nvarying vec2 vMapCoord;\nvarying vec2 vTextureCoord;\nvarying vec4 vColor;\n\nvoid main(void)\n{\n gl_Position = vec4((projectionMatrix * vec3(aVertexPosition, 1.0)).xy, 0.0, 1.0);\n vTextureCoord = aTextureCoord;\n vMapCoord = ( otherMatrix * vec3( aTextureCoord, 1.0) ).xy;\n vColor = vec4(aColor.rgb * aColor.a, aColor.a);\n}\n","precision mediump float;\n\nvarying vec2 vMapCoord;\nvarying vec2 vTextureCoord;\nvarying vec4 vColor;\n\nuniform vec2 scale;\n\nuniform sampler2D uSampler;\nuniform sampler2D mapSampler;\n\nvoid main(void)\n{\n vec4 map = texture2D(mapSampler, vMapCoord);\n\n map -= 0.5;\n map.xy *= scale;\n\n gl_FragColor = texture2D(uSampler, vec2(vTextureCoord.x + map.x, vTextureCoord.y + map.y));\n}\n",{mapSampler:{type:"sampler2D",value:t.texture},otherMatrix:{type:"mat3",value:r.toArray(!0)},scale:{type:"v2",value:{x:1,y:1}}}),this.maskSprite=t,this.maskMatrix=r,(null===e||void 0===e)&&(e=20),this.scale=new n.Point(e,e)}var n=t("../../core");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.applyFilter=function(t,e,r){var i=t.filterManager;i.calculateMappedMatrix(e.frame,this.maskSprite,this.maskMatrix),this.uniforms.otherMatrix.value=this.maskMatrix.toArray(!0),this.uniforms.scale.value.x=this.scale.x*(1/e.frame.width),this.uniforms.scale.value.y=this.scale.y*(1/e.frame.height);var n=this.getShader(t);i.applyFilter(n,e,r)},Object.defineProperties(i.prototype,{map:{get:function(){return this.uniforms.mapSampler.value},set:function(t){this.uniforms.mapSampler.value=t}}})},{"../../core":52}],127:[function(t,e,r){function i(){n.AbstractFilter.call(this,null,"precision mediump float;\n\nvarying vec2 vTextureCoord;\nvarying vec4 vColor;\n\nuniform vec4 dimensions;\nuniform sampler2D uSampler;\n\nuniform float angle;\nuniform float scale;\n\nfloat pattern()\n{\n float s = sin(angle), c = cos(angle);\n vec2 tex = vTextureCoord * dimensions.xy;\n vec2 point = vec2(\n c * tex.x - s * tex.y,\n s * tex.x + c * tex.y\n ) * scale;\n return (sin(point.x) * sin(point.y)) * 4.0;\n}\n\nvoid main()\n{\n vec4 color = texture2D(uSampler, vTextureCoord);\n float average = (color.r + color.g + color.b) / 3.0;\n gl_FragColor = vec4(vec3(average * 10.0 - 5.0 + pattern()), color.a);\n}\n",{scale:{type:"1f",value:1},angle:{type:"1f",value:5},dimensions:{type:"4fv",value:[0,0,0,0]}})}var n=t("../../core");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i,Object.defineProperties(i.prototype,{scale:{get:function(){return this.uniforms.scale.value},set:function(t){this.uniforms.scale.value=t}},angle:{get:function(){return this.uniforms.angle.value},set:function(t){this.uniforms.angle.value=t}}})},{"../../core":52}],128:[function(t,e,r){function i(){n.AbstractFilter.call(this,"attribute vec2 aVertexPosition;\nattribute vec2 aTextureCoord;\nattribute vec4 aColor;\n\nuniform float strength;\nuniform vec2 offset;\n\nuniform mat3 projectionMatrix;\n\nvarying vec2 vTextureCoord;\nvarying vec4 vColor;\nvarying vec2 vBlurTexCoords[6];\n\nvoid main(void)\n{\n gl_Position = vec4((projectionMatrix * vec3((aVertexPosition+offset), 1.0)).xy, 0.0, 1.0);\n vTextureCoord = aTextureCoord;\n\n vBlurTexCoords[ 0] = aTextureCoord + vec2(0.0, -0.012 * strength);\n vBlurTexCoords[ 1] = aTextureCoord + vec2(0.0, -0.008 * strength);\n vBlurTexCoords[ 2] = aTextureCoord + vec2(0.0, -0.004 * strength);\n vBlurTexCoords[ 3] = aTextureCoord + vec2(0.0, 0.004 * strength);\n vBlurTexCoords[ 4] = aTextureCoord + vec2(0.0, 0.008 * strength);\n vBlurTexCoords[ 5] = aTextureCoord + vec2(0.0, 0.012 * strength);\n\n vColor = vec4(aColor.rgb * aColor.a, aColor.a);\n}\n","precision lowp float;\n\nvarying vec2 vTextureCoord;\nvarying vec2 vBlurTexCoords[6];\nvarying vec4 vColor;\n\nuniform vec3 color;\nuniform float alpha;\n\nuniform sampler2D uSampler;\n\nvoid main(void)\n{\n vec4 sum = vec4(0.0);\n\n sum += texture2D(uSampler, vBlurTexCoords[ 0])*0.004431848411938341;\n sum += texture2D(uSampler, vBlurTexCoords[ 1])*0.05399096651318985;\n sum += texture2D(uSampler, vBlurTexCoords[ 2])*0.2419707245191454;\n sum += texture2D(uSampler, vTextureCoord )*0.3989422804014327;\n sum += texture2D(uSampler, vBlurTexCoords[ 3])*0.2419707245191454;\n sum += texture2D(uSampler, vBlurTexCoords[ 4])*0.05399096651318985;\n sum += texture2D(uSampler, vBlurTexCoords[ 5])*0.004431848411938341;\n\n gl_FragColor = vec4( color.rgb * sum.a * alpha, sum.a * alpha );\n}\n",{blur:{type:"1f",value:1/512},color:{type:"c",value:[0,0,0]},alpha:{type:"1f",value:.7},offset:{type:"2f",value:[5,5]},strength:{type:"1f",value:1}}),this.passes=1,this.strength=4}var n=t("../../core");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.applyFilter=function(t,e,r,i){var n=this.getShader(t);if(this.uniforms.strength.value=this.strength/4/this.passes*(e.frame.height/e.size.height),1===this.passes)t.filterManager.applyFilter(n,e,r,i);else{for(var o=t.filterManager.getRenderTarget(!0),s=e,a=o,h=0;h= (time - params.z)) )\n {\n float diff = (dist - time);\n float powDiff = 1.0 - pow(abs(diff*params.x), params.y);\n\n float diffTime = diff * powDiff;\n vec2 diffUV = normalize(uv - center);\n texCoord = uv + (diffUV * diffTime);\n }\n\n gl_FragColor = texture2D(uSampler, texCoord);\n}\n",{center:{type:"v2",value:{x:.5,y:.5}},params:{type:"v3",value:{x:10,y:.8,z:.1}},time:{type:"1f",value:0}})}var n=t("../../core");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i,Object.defineProperties(i.prototype,{center:{get:function(){return this.uniforms.center.value},set:function(t){this.uniforms.center.value=t}},params:{get:function(){return this.uniforms.params.value},set:function(t){this.uniforms.params.value=t}},time:{get:function(){return this.uniforms.time.value},set:function(t){this.uniforms.time.value=t}}})},{"../../core":52}],138:[function(t,e,r){function i(){n.AbstractFilter.call(this,null,"precision mediump float;\n\nvarying vec2 vTextureCoord;\n\nuniform sampler2D uSampler;\nuniform float blur;\nuniform float gradientBlur;\nuniform vec2 start;\nuniform vec2 end;\nuniform vec2 delta;\nuniform vec2 texSize;\n\nfloat random(vec3 scale, float seed)\n{\n return fract(sin(dot(gl_FragCoord.xyz + seed, scale)) * 43758.5453 + seed);\n}\n\nvoid main(void)\n{\n vec4 color = vec4(0.0);\n float total = 0.0;\n\n float offset = random(vec3(12.9898, 78.233, 151.7182), 0.0);\n vec2 normal = normalize(vec2(start.y - end.y, end.x - start.x));\n float radius = smoothstep(0.0, 1.0, abs(dot(vTextureCoord * texSize - start, normal)) / gradientBlur) * blur;\n\n for (float t = -30.0; t <= 30.0; t++)\n {\n float percent = (t + offset - 0.5) / 30.0;\n float weight = 1.0 - abs(percent);\n vec4 sample = texture2D(uSampler, vTextureCoord + delta / texSize * percent * radius);\n sample.rgb *= sample.a;\n color += sample * weight;\n total += weight;\n }\n\n gl_FragColor = color / total;\n gl_FragColor.rgb /= gl_FragColor.a + 0.00001;\n}\n",{blur:{type:"1f",value:100},gradientBlur:{type:"1f",value:600},start:{type:"v2",value:{x:0,y:window.innerHeight/2}},end:{type:"v2",value:{x:600,y:window.innerHeight/2}},delta:{type:"v2",value:{x:30,y:30}},texSize:{type:"v2",value:{x:window.innerWidth,y:window.innerHeight}}}),this.updateDelta()}var n=t("../../core");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.updateDelta=function(){this.uniforms.delta.value.x=0,this.uniforms.delta.value.y=0},Object.defineProperties(i.prototype,{blur:{get:function(){return this.uniforms.blur.value},set:function(t){this.uniforms.blur.value=t}},gradientBlur:{get:function(){return this.uniforms.gradientBlur.value},set:function(t){this.uniforms.gradientBlur.value=t}},start:{get:function(){return this.uniforms.start.value},set:function(t){this.uniforms.start.value=t,this.updateDelta()}},end:{get:function(){return this.uniforms.end.value},set:function(t){this.uniforms.end.value=t,this.updateDelta()}}})},{"../../core":52}],139:[function(t,e,r){function i(){n.AbstractFilter.call(this),this.tiltShiftXFilter=new o,this.tiltShiftYFilter=new s}var n=t("../../core"),o=t("./TiltShiftXFilter"),s=t("./TiltShiftYFilter");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.applyFilter=function(t,e,r){var i=t.filterManager.getRenderTarget(!0);this.tiltShiftXFilter.applyFilter(t,e,i),this.tiltShiftYFilter.applyFilter(t,i,r),t.filterManager.returnRenderTarget(i)},Object.defineProperties(i.prototype,{blur:{get:function(){return this.tiltShiftXFilter.blur},set:function(t){this.tiltShiftXFilter.blur=this.tiltShiftYFilter.blur=t}},gradientBlur:{get:function(){return this.tiltShiftXFilter.gradientBlur},set:function(t){this.tiltShiftXFilter.gradientBlur=this.tiltShiftYFilter.gradientBlur=t}},start:{get:function(){return this.tiltShiftXFilter.start},set:function(t){this.tiltShiftXFilter.start=this.tiltShiftYFilter.start=t}},end:{get:function(){return this.tiltShiftXFilter.end},set:function(t){this.tiltShiftXFilter.end=this.tiltShiftYFilter.end=t}}})},{"../../core":52,"./TiltShiftXFilter":140,"./TiltShiftYFilter":141}],140:[function(t,e,r){function i(){n.call(this)}var n=t("./TiltShiftAxisFilter");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.updateDelta=function(){var t=this.uniforms.end.value.x-this.uniforms.start.value.x,e=this.uniforms.end.value.y-this.uniforms.start.value.y,r=Math.sqrt(t*t+e*e);this.uniforms.delta.value.x=t/r,this.uniforms.delta.value.y=e/r}},{"./TiltShiftAxisFilter":138}],141:[function(t,e,r){function i(){n.call(this)}var n=t("./TiltShiftAxisFilter");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.updateDelta=function(){var t=this.uniforms.end.value.x-this.uniforms.start.value.x,e=this.uniforms.end.value.y-this.uniforms.start.value.y,r=Math.sqrt(t*t+e*e);this.uniforms.delta.value.x=-e/r,this.uniforms.delta.value.y=t/r}},{"./TiltShiftAxisFilter":138}],142:[function(t,e,r){function i(){n.AbstractFilter.call(this,null,"precision mediump float;\n\nvarying vec2 vTextureCoord;\n\nuniform sampler2D uSampler;\nuniform float radius;\nuniform float angle;\nuniform vec2 offset;\n\nvoid main(void)\n{\n vec2 coord = vTextureCoord - offset;\n float dist = length(coord);\n\n if (dist < radius)\n {\n float ratio = (radius - dist) / radius;\n float angleMod = ratio * ratio * angle;\n float s = sin(angleMod);\n float c = cos(angleMod);\n coord = vec2(coord.x * c - coord.y * s, coord.x * s + coord.y * c);\n }\n\n gl_FragColor = texture2D(uSampler, coord+offset);\n}\n",{radius:{type:"1f",value:.5},angle:{type:"1f",value:5},offset:{type:"v2",value:{x:.5,y:.5}}})}var n=t("../../core");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i,Object.defineProperties(i.prototype,{offset:{get:function(){return this.uniforms.offset.value},set:function(t){this.uniforms.offset.value=t}},radius:{get:function(){return this.uniforms.radius.value},set:function(t){this.uniforms.radius.value=t}},angle:{get:function(){return this.uniforms.angle.value},set:function(t){this.uniforms.angle.value=t}}})},{"../../core":52}],143:[function(t,e,r){(function(r){t("./polyfill");var i=e.exports=t("./core");i.extras=t("./extras"),i.filters=t("./filters"),i.interaction=t("./interaction"),i.loaders=t("./loaders"),i.mesh=t("./mesh"),i.accessibility=t("./accessibility"),i.loader=new i.loaders.Loader,Object.assign(i,t("./deprecation")),r.PIXI=i}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{"./accessibility":37,"./core":52,"./deprecation":107,"./extras":114,"./filters":131,"./interaction":146,"./loaders":149,"./mesh":156,"./polyfill":161}],144:[function(t,e,r){function i(){this.global=new n.Point,this.target=null,this.originalEvent=null}var n=t("../core");i.prototype.constructor=i,e.exports=i,i.prototype.getLocalPosition=function(t,e,r){return t.worldTransform.applyInverse(r||this.global,e)}},{"../core":52}],145:[function(t,e,r){function i(t,e){e=e||{},this.renderer=t,this.autoPreventDefault=void 0!==e.autoPreventDefault?e.autoPreventDefault:!0,this.interactionFrequency=e.interactionFrequency||10,this.mouse=new o,this.eventData={stopped:!1,target:null,type:null,data:this.mouse,stopPropagation:function(){this.stopped=!0}},this.interactiveDataPool=[],this.interactionDOMElement=null,this.eventsAdded=!1,this.onMouseUp=this.onMouseUp.bind(this),this.processMouseUp=this.processMouseUp.bind(this),this.onMouseDown=this.onMouseDown.bind(this),this.processMouseDown=this.processMouseDown.bind(this),this.onMouseMove=this.onMouseMove.bind(this),this.processMouseMove=this.processMouseMove.bind(this),this.onMouseOut=this.onMouseOut.bind(this),this.processMouseOverOut=this.processMouseOverOut.bind(this),this.onTouchStart=this.onTouchStart.bind(this),this.processTouchStart=this.processTouchStart.bind(this),this.onTouchEnd=this.onTouchEnd.bind(this),this.processTouchEnd=this.processTouchEnd.bind(this),this.onTouchMove=this.onTouchMove.bind(this),this.processTouchMove=this.processTouchMove.bind(this),this.last=0,this.currentCursorStyle="inherit",this._tempPoint=new n.Point,this.resolution=1,this.setTargetElement(this.renderer.view,this.renderer.resolution)}var n=t("../core"),o=t("./InteractionData");Object.assign(n.DisplayObject.prototype,t("./interactiveTarget")),i.prototype.constructor=i,e.exports=i,i.prototype.setTargetElement=function(t,e){this.removeEvents(),this.interactionDOMElement=t,this.resolution=e||1,this.addEvents()},i.prototype.addEvents=function(){this.interactionDOMElement&&(n.ticker.shared.add(this.update,this),window.navigator.msPointerEnabled&&(this.interactionDOMElement.style["-ms-content-zooming"]="none",this.interactionDOMElement.style["-ms-touch-action"]="none"),window.document.addEventListener("mousemove",this.onMouseMove,!0),this.interactionDOMElement.addEventListener("mousedown",this.onMouseDown,!0),this.interactionDOMElement.addEventListener("mouseout",this.onMouseOut,!0),this.interactionDOMElement.addEventListener("touchstart",this.onTouchStart,!0),this.interactionDOMElement.addEventListener("touchend",this.onTouchEnd,!0),this.interactionDOMElement.addEventListener("touchmove",this.onTouchMove,!0),window.addEventListener("mouseup",this.onMouseUp,!0),this.eventsAdded=!0)},i.prototype.removeEvents=function(){this.interactionDOMElement&&(n.ticker.shared.remove(this.update),window.navigator.msPointerEnabled&&(this.interactionDOMElement.style["-ms-content-zooming"]="",this.interactionDOMElement.style["-ms-touch-action"]=""),window.document.removeEventListener("mousemove",this.onMouseMove,!0),this.interactionDOMElement.removeEventListener("mousedown",this.onMouseDown,!0),this.interactionDOMElement.removeEventListener("mouseout",this.onMouseOut,!0),this.interactionDOMElement.removeEventListener("touchstart",this.onTouchStart,!0),this.interactionDOMElement.removeEventListener("touchend",this.onTouchEnd,!0),this.interactionDOMElement.removeEventListener("touchmove",this.onTouchMove,!0),this.interactionDOMElement=null,window.removeEventListener("mouseup",this.onMouseUp,!0),this.eventsAdded=!1)},i.prototype.update=function(t){if(this._deltaTime+=t,!(this._deltaTime=0;h--)this.processInteractive(t,a[h],r,i,s)&&(o=!0,s=!1,a[h].interactive&&(i=!1));return n&&(i&&!o&&(e.hitArea?(e.worldTransform.applyInverse(t,this._tempPoint),o=e.hitArea.contains(this._tempPoint.x,this._tempPoint.y)):e.containsPoint&&(o=e.containsPoint(t))),e.interactive&&r(e,o)),o},i.prototype.onMouseDown=function(t){this.mouse.originalEvent=t,this.eventData.data=this.mouse,this.eventData.stopped=!1,this.mapPositionToPoint(this.mouse.global,t.clientX,t.clientY),this.autoPreventDefault&&this.mouse.originalEvent.preventDefault(),this.processInteractive(this.mouse.global,this.renderer._lastObjectRendered,this.processMouseDown,!0)},i.prototype.processMouseDown=function(t,e){var r=this.mouse.originalEvent,i=2===r.button||3===r.which;e&&(t[i?"_isRightDown":"_isLeftDown"]=!0,this.dispatchEvent(t,i?"rightdown":"mousedown",this.eventData))},i.prototype.onMouseUp=function(t){this.mouse.originalEvent=t,this.eventData.data=this.mouse,this.eventData.stopped=!1,this.mapPositionToPoint(this.mouse.global,t.clientX,t.clientY),this.processInteractive(this.mouse.global,this.renderer._lastObjectRendered,this.processMouseUp,!0)},i.prototype.processMouseUp=function(t,e){var r=this.mouse.originalEvent,i=2===r.button||3===r.which,n=i?"_isRightDown":"_isLeftDown";e?(this.dispatchEvent(t,i?"rightup":"mouseup",this.eventData),t[n]&&(t[n]=!1,this.dispatchEvent(t,i?"rightclick":"click",this.eventData))):t[n]&&(t[n]=!1,this.dispatchEvent(t,i?"rightupoutside":"mouseupoutside",this.eventData))},i.prototype.onMouseMove=function(t){this.mouse.originalEvent=t,this.eventData.data=this.mouse,this.eventData.stopped=!1,this.mapPositionToPoint(this.mouse.global,t.clientX,t.clientY),this.didMove=!0,this.cursor="inherit",this.processInteractive(this.mouse.global,this.renderer._lastObjectRendered,this.processMouseMove,!0),this.currentCursorStyle!==this.cursor&&(this.currentCursorStyle=this.cursor,this.interactionDOMElement.style.cursor=this.cursor)},i.prototype.processMouseMove=function(t,e){this.dispatchEvent(t,"mousemove",this.eventData),this.processMouseOverOut(t,e)},i.prototype.onMouseOut=function(t){this.mouse.originalEvent=t,this.eventData.stopped=!1,this.mapPositionToPoint(this.mouse.global,t.clientX,t.clientY),this.interactionDOMElement.style.cursor="inherit",this.mapPositionToPoint(this.mouse.global,t.clientX,t.clientY),this.processInteractive(this.mouse.global,this.renderer._lastObjectRendered,this.processMouseOverOut,!1)},i.prototype.processMouseOverOut=function(t,e){e?(t._over||(t._over=!0,this.dispatchEvent(t,"mouseover",this.eventData)),t.buttonMode&&(this.cursor=t.defaultCursor)):t._over&&(t._over=!1,this.dispatchEvent(t,"mouseout",this.eventData))},i.prototype.onTouchStart=function(t){this.autoPreventDefault&&t.preventDefault();for(var e=t.changedTouches,r=e.length,i=0;r>i;i++){var n=e[i],o=this.getTouchData(n);o.originalEvent=t,this.eventData.data=o,this.eventData.stopped=!1,this.processInteractive(o.global,this.renderer._lastObjectRendered,this.processTouchStart,!0),this.returnTouchData(o)}},i.prototype.processTouchStart=function(t,e){e&&(t._touchDown=!0,this.dispatchEvent(t,"touchstart",this.eventData))},i.prototype.onTouchEnd=function(t){this.autoPreventDefault&&t.preventDefault();for(var e=t.changedTouches,r=e.length,i=0;r>i;i++){var n=e[i],o=this.getTouchData(n);o.originalEvent=t,this.eventData.data=o,this.eventData.stopped=!1,this.processInteractive(o.global,this.renderer._lastObjectRendered,this.processTouchEnd,!0),this.returnTouchData(o)}},i.prototype.processTouchEnd=function(t,e){e?(this.dispatchEvent(t,"touchend",this.eventData),t._touchDown&&(t._touchDown=!1,this.dispatchEvent(t,"tap",this.eventData))):t._touchDown&&(t._touchDown=!1,this.dispatchEvent(t,"touchendoutside",this.eventData))},i.prototype.onTouchMove=function(t){this.autoPreventDefault&&t.preventDefault();for(var e=t.changedTouches,r=e.length,i=0;r>i;i++){var n=e[i],o=this.getTouchData(n);o.originalEvent=t, +this.eventData.data=o,this.eventData.stopped=!1,this.processInteractive(o.global,this.renderer._lastObjectRendered,this.processTouchMove,!0),this.returnTouchData(o)}},i.prototype.processTouchMove=function(t,e){e=e,this.dispatchEvent(t,"touchmove",this.eventData)},i.prototype.getTouchData=function(t){var e=this.interactiveDataPool.pop();return e||(e=new o),e.identifier=t.identifier,this.mapPositionToPoint(e.global,t.clientX,t.clientY),navigator.isCocoonJS&&(e.global.x=e.global.x/this.resolution,e.global.y=e.global.y/this.resolution),t.globalX=e.global.x,t.globalY=e.global.y,e},i.prototype.returnTouchData=function(t){this.interactiveDataPool.push(t)},i.prototype.destroy=function(){this.removeEvents(),this.renderer=null,this.mouse=null,this.eventData=null,this.interactiveDataPool=null,this.interactionDOMElement=null,this.onMouseUp=null,this.processMouseUp=null,this.onMouseDown=null,this.processMouseDown=null,this.onMouseMove=null,this.processMouseMove=null,this.onMouseOut=null,this.processMouseOverOut=null,this.onTouchStart=null,this.processTouchStart=null,this.onTouchEnd=null,this.processTouchEnd=null,this.onTouchMove=null,this.processTouchMove=null,this._tempPoint=null},n.WebGLRenderer.registerPlugin("interaction",i),n.CanvasRenderer.registerPlugin("interaction",i)},{"../core":52,"./InteractionData":144,"./interactiveTarget":147}],146:[function(t,e,r){e.exports={InteractionData:t("./InteractionData"),InteractionManager:t("./InteractionManager"),interactiveTarget:t("./interactiveTarget")}},{"./InteractionData":144,"./InteractionManager":145,"./interactiveTarget":147}],147:[function(t,e,r){var i={interactive:!1,buttonMode:!1,interactiveChildren:!0,defaultCursor:"pointer",_over:!1,_touchDown:!1};e.exports=i},{}],148:[function(t,e,r){function i(t,e){var r={},i=t.data.getElementsByTagName("info")[0],n=t.data.getElementsByTagName("common")[0];r.font=i.getAttribute("face"),r.size=parseInt(i.getAttribute("size"),10),r.lineHeight=parseInt(n.getAttribute("lineHeight"),10),r.chars={};for(var a=t.data.getElementsByTagName("char"),h=0;hn;n++){var o=2*n;this._renderCanvasDrawTriangle(t,e,r,o,o+2,o+4)}},i.prototype._renderCanvasTriangles=function(t){for(var e=this.vertices,r=this.uvs,i=this.indices,n=i.length,o=0;n>o;o+=3){var s=2*i[o],a=2*i[o+1],h=2*i[o+2];this._renderCanvasDrawTriangle(t,e,r,s,a,h)}},i.prototype._renderCanvasDrawTriangle=function(t,e,r,i,n,o){var s=this._texture.baseTexture.source,a=this._texture.baseTexture.width,h=this._texture.baseTexture.height,u=e[i],l=e[n],c=e[o],p=e[i+1],d=e[n+1],f=e[o+1],v=r[i]*a,g=r[n]*a,m=r[o]*a,y=r[i+1]*h,x=r[n+1]*h,b=r[o+1]*h;if(this.canvasPadding>0){var _=this.canvasPadding/this.worldTransform.a,T=this.canvasPadding/this.worldTransform.d,E=(u+l+c)/3,S=(p+d+f)/3,w=u-E,C=p-S,A=Math.sqrt(w*w+C*C);u=E+w/A*(A+_),p=S+C/A*(A+T),w=l-E,C=d-S,A=Math.sqrt(w*w+C*C),l=E+w/A*(A+_),d=S+C/A*(A+T),w=c-E,C=f-S,A=Math.sqrt(w*w+C*C),c=E+w/A*(A+_),f=S+C/A*(A+T)}t.save(),t.beginPath(),t.moveTo(u,p),t.lineTo(l,d),t.lineTo(c,f),t.closePath(),t.clip();var M=v*x+y*m+g*b-x*m-y*g-v*b,R=u*x+y*c+l*b-x*c-y*l-u*b,O=v*l+u*m+g*c-l*m-u*g-v*c,P=v*x*c+y*l*m+u*g*b-u*x*m-y*g*c-v*l*b,D=p*x+y*f+d*b-x*f-y*d-p*b,F=v*d+p*m+g*f-d*m-p*g-v*f,L=v*x*f+y*d*m+p*g*b-p*x*m-y*g*f-v*d*b;t.transform(R/M,D/M,O/M,F/M,P/M,L/M),t.drawImage(s,0,0),t.restore()},i.prototype.renderMeshFlat=function(t){var e=this.context,r=t.vertices,i=r.length/2;e.beginPath();for(var n=1;i-2>n;n++){var o=2*n,s=r[o],a=r[o+2],h=r[o+4],u=r[o+1],l=r[o+3],c=r[o+5];e.moveTo(s,u),e.lineTo(a,l),e.lineTo(h,c)}e.fillStyle="#FF0000",e.fill(),e.closePath()},i.prototype._onTextureUpdate=function(){this.updateFrame=!0},i.prototype.getBounds=function(t){if(!this._currentBounds){for(var e=t||this.worldTransform,r=e.a,i=e.b,o=e.c,s=e.d,a=e.tx,h=e.ty,u=-(1/0),l=-(1/0),c=1/0,p=1/0,d=this.vertices,f=0,v=d.length;v>f;f+=2){var g=d[f],m=d[f+1],y=r*g+o*m+a,x=s*m+i*g+h;c=c>y?y:c,p=p>x?x:p,u=y>u?y:u,l=x>l?x:l}if(c===-(1/0)||l===1/0)return n.Rectangle.EMPTY;var b=this._bounds;b.x=c,b.width=u-c,b.y=p,b.height=l-p,this._currentBounds=b}return this._currentBounds},i.prototype.containsPoint=function(t){if(!this.getBounds().contains(t.x,t.y))return!1;this.worldTransform.applyInverse(t,o);var e,r,n=this.vertices,a=s.points;if(this.drawMode===i.DRAW_MODES.TRIANGLES){var h=this.indices;for(r=this.indices.length,e=0;r>e;e+=3){var u=2*h[e],l=2*h[e+1],c=2*h[e+2];if(a[0]=n[u],a[1]=n[u+1],a[2]=n[l],a[3]=n[l+1],a[4]=n[c],a[5]=n[c+1],s.contains(o.x,o.y))return!0}}else for(r=n.length,e=0;r>e;e+=6)if(a[0]=n[e],a[1]=n[e+1],a[2]=n[e+2],a[3]=n[e+3],a[4]=n[e+4],a[5]=n[e+5],s.contains(o.x,o.y))return!0;return!1},i.DRAW_MODES={TRIANGLE_MESH:0,TRIANGLES:1}},{"../core":52}],154:[function(t,e,r){function i(t,e,r){n.call(this,t),this._ready=!0,this.segmentsX=e||10,this.segmentsY=r||10,this.drawMode=n.DRAW_MODES.TRIANGLES,this.refresh()}var n=t("./Mesh");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.refresh=function(){var t=this.segmentsX*this.segmentsY,e=[],r=[],i=[],n=[],o=this.texture,s=this.segmentsX-1,a=this.segmentsY-1,h=0,u=o.width/s,l=o.height/a;for(h=0;t>h;h++){var c=h%this.segmentsX,p=h/this.segmentsX|0;e.push(c*u,p*l),i.push(o._uvs.x0+(o._uvs.x1-o._uvs.x0)*(c/(this.segmentsX-1)),o._uvs.y0+(o._uvs.y3-o._uvs.y0)*(p/(this.segmentsY-1)))}var d=s*a;for(h=0;d>h;h++){var f=h%s,v=h/s|0,g=v*this.segmentsX+f,m=v*this.segmentsX+f+1,y=(v+1)*this.segmentsX+f,x=(v+1)*this.segmentsX+f+1;n.push(g,m,y),n.push(m,x,y)}this.vertices=new Float32Array(e),this.uvs=new Float32Array(i),this.colors=new Float32Array(r),this.indices=new Uint16Array(n)},i.prototype._onTextureUpdate=function(){n.prototype._onTextureUpdate.call(this),this._ready&&this.refresh()}},{"./Mesh":153}],155:[function(t,e,r){function i(t,e){n.call(this,t),this.points=e,this.vertices=new Float32Array(4*e.length),this.uvs=new Float32Array(4*e.length),this.colors=new Float32Array(2*e.length),this.indices=new Uint16Array(2*e.length),this._ready=!0,this.refresh()}var n=t("./Mesh"),o=t("../core");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.refresh=function(){var t=this.points;if(!(t.length<1)&&this._texture._uvs){var e=this.uvs,r=this.indices,i=this.colors,n=this._texture._uvs,s=new o.Point(n.x0,n.y0),a=new o.Point(n.x2-n.x0,n.y2-n.y0);e[0]=0+s.x,e[1]=0+s.y,e[2]=0+s.x,e[3]=1*a.y+s.y,i[0]=1,i[1]=1,r[0]=0,r[1]=1;for(var h,u,l,c=t.length,p=1;c>p;p++)h=t[p],u=4*p,l=p/(c-1),e[u]=l*a.x+s.x,e[u+1]=0+s.y,e[u+2]=l*a.x+s.x,e[u+3]=1*a.y+s.y,u=2*p,i[u]=1,i[u+1]=1,u=2*p,r[u]=u,r[u+1]=u+1;this.dirty=!0}},i.prototype._onTextureUpdate=function(){n.prototype._onTextureUpdate.call(this),this._ready&&this.refresh()},i.prototype.updateTransform=function(){var t=this.points;if(!(t.length<1)){for(var e,r,i,n,o,s,a=t[0],h=0,u=0,l=this.vertices,c=t.length,p=0;c>p;p++)r=t[p],i=4*p,e=p1&&(n=1),o=Math.sqrt(h*h+u*u),s=this._texture.height/2,h/=o,u/=o,h*=s,u*=s,l[i]=r.x+h,l[i+1]=r.y+u,l[i+2]=r.x-h,l[i+3]=r.y-u,a=r;this.containerUpdateTransform()}}},{"../core":52,"./Mesh":153}],156:[function(t,e,r){e.exports={Mesh:t("./Mesh"),Plane:t("./Plane"),Rope:t("./Rope"),MeshRenderer:t("./webgl/MeshRenderer"),MeshShader:t("./webgl/MeshShader")}},{"./Mesh":153,"./Plane":154,"./Rope":155,"./webgl/MeshRenderer":157,"./webgl/MeshShader":158}],157:[function(t,e,r){function i(t){n.ObjectRenderer.call(this,t),this.indices=new Uint16Array(15e3);for(var e=0,r=0;15e3>e;e+=6,r+=4)this.indices[e+0]=r+0,this.indices[e+1]=r+1,this.indices[e+2]=r+2,this.indices[e+3]=r+0,this.indices[e+4]=r+2,this.indices[e+5]=r+3;this.currentShader=null}var n=t("../../core"),o=t("../Mesh");i.prototype=Object.create(n.ObjectRenderer.prototype),i.prototype.constructor=i,e.exports=i,n.WebGLRenderer.registerPlugin("mesh",i),i.prototype.onContextChange=function(){},i.prototype.render=function(t){t._vertexBuffer||this._initWebGL(t);var e=this.renderer,r=e.gl,i=t._texture.baseTexture,n=t.shader,s=t.drawMode===o.DRAW_MODES.TRIANGLE_MESH?r.TRIANGLE_STRIP:r.TRIANGLES;e.blendModeManager.setBlendMode(t.blendMode),n=n?n.shaders[r.id]||n.getShader(e):e.shaderManager.plugins.meshShader,this.renderer.shaderManager.setShader(n),n.uniforms.translationMatrix.value=t.worldTransform.toArray(!0),n.uniforms.projectionMatrix.value=e.currentRenderTarget.projectionMatrix.toArray(!0),n.uniforms.alpha.value=t.worldAlpha,n.syncUniforms(),t.dirty?(t.dirty=!1,r.bindBuffer(r.ARRAY_BUFFER,t._vertexBuffer),r.bufferData(r.ARRAY_BUFFER,t.vertices,r.STATIC_DRAW),r.vertexAttribPointer(n.attributes.aVertexPosition,2,r.FLOAT,!1,0,0),r.bindBuffer(r.ARRAY_BUFFER,t._uvBuffer),r.bufferData(r.ARRAY_BUFFER,t.uvs,r.STATIC_DRAW),r.vertexAttribPointer(n.attributes.aTextureCoord,2,r.FLOAT,!1,0,0),r.activeTexture(r.TEXTURE0),i._glTextures[r.id]?r.bindTexture(r.TEXTURE_2D,i._glTextures[r.id]):this.renderer.updateTexture(i),r.bindBuffer(r.ELEMENT_ARRAY_BUFFER,t._indexBuffer),r.bufferData(r.ELEMENT_ARRAY_BUFFER,t.indices,r.STATIC_DRAW)):(r.bindBuffer(r.ARRAY_BUFFER,t._vertexBuffer),r.bufferSubData(r.ARRAY_BUFFER,0,t.vertices),r.vertexAttribPointer(n.attributes.aVertexPosition,2,r.FLOAT,!1,0,0),r.bindBuffer(r.ARRAY_BUFFER,t._uvBuffer),r.vertexAttribPointer(n.attributes.aTextureCoord,2,r.FLOAT,!1,0,0),r.activeTexture(r.TEXTURE0),i._glTextures[r.id]?r.bindTexture(r.TEXTURE_2D,i._glTextures[r.id]):this.renderer.updateTexture(i),r.bindBuffer(r.ELEMENT_ARRAY_BUFFER,t._indexBuffer),r.bufferSubData(r.ELEMENT_ARRAY_BUFFER,0,t.indices)),r.drawElements(s,t.indices.length,r.UNSIGNED_SHORT,0)},i.prototype._initWebGL=function(t){var e=this.renderer.gl;t._vertexBuffer=e.createBuffer(),t._indexBuffer=e.createBuffer(),t._uvBuffer=e.createBuffer(),e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferData(e.ARRAY_BUFFER,t.vertices,e.DYNAMIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferData(e.ARRAY_BUFFER,t.uvs,e.STATIC_DRAW),t.colors&&(t._colorBuffer=e.createBuffer(),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.bufferData(e.ARRAY_BUFFER,t.colors,e.STATIC_DRAW)),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer),e.bufferData(e.ELEMENT_ARRAY_BUFFER,t.indices,e.STATIC_DRAW)},i.prototype.flush=function(){},i.prototype.start=function(){this.currentShader=null},i.prototype.destroy=function(){n.ObjectRenderer.prototype.destroy.call(this)}},{"../../core":52,"../Mesh":153}],158:[function(t,e,r){function i(t){n.Shader.call(this,t,["precision lowp float;","attribute vec2 aVertexPosition;","attribute vec2 aTextureCoord;","uniform mat3 translationMatrix;","uniform mat3 projectionMatrix;","varying vec2 vTextureCoord;","void main(void){"," gl_Position = vec4((projectionMatrix * translationMatrix * vec3(aVertexPosition, 1.0)).xy, 0.0, 1.0);"," vTextureCoord = aTextureCoord;","}"].join("\n"),["precision lowp float;","varying vec2 vTextureCoord;","uniform float alpha;","uniform sampler2D uSampler;","void main(void){"," gl_FragColor = texture2D(uSampler, vTextureCoord) * alpha ;","}"].join("\n"),{alpha:{type:"1f",value:0},translationMatrix:{type:"mat3",value:new Float32Array(9)},projectionMatrix:{type:"mat3",value:new Float32Array(9)}},{aVertexPosition:0,aTextureCoord:0})}var n=t("../../core");i.prototype=Object.create(n.Shader.prototype),i.prototype.constructor=i,e.exports=i,n.ShaderManager.registerPlugin("meshShader",i)},{"../../core":52}],159:[function(t,e,r){Math.sign||(Math.sign=function(t){return t=+t,0===t||isNaN(t)?t:t>0?1:-1})},{}],160:[function(t,e,r){Object.assign||(Object.assign=t("object-assign"))},{"object-assign":26}],161:[function(t,e,r){t("./Object.assign"),t("./requestAnimationFrame"),t("./Math.sign")},{"./Math.sign":159,"./Object.assign":160,"./requestAnimationFrame":162}],162:[function(t,e,r){(function(t){if(Date.now&&Date.prototype.getTime||(Date.now=function(){return(new Date).getTime()}),!t.performance||!t.performance.now){var e=Date.now();t.performance||(t.performance={}),t.performance.now=function(){return Date.now()-e}}for(var r=Date.now(),i=["ms","moz","webkit","o"],n=0;ni&&(i=0),r=e,setTimeout(function(){r=Date.now(),t(performance.now())},i)}),t.cancelAnimationFrame||(t.cancelAnimationFrame=function(t){clearTimeout(t)})}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{}]},{},[143])(143)}); //# sourceMappingURL=pixi.min.js.map diff --git a/bin/pixi.min.js.map b/bin/pixi.min.js.map index 857d92a..419daff 100644 --- a/bin/pixi.min.js.map +++ b/bin/pixi.min.js.map @@ -1 +1 @@ -{"version":3,"sources":["pixi.js"],"names":["f","exports","module","define","amd","g","window","global","self","this","PIXI","e","t","n","r","s","o","u","a","require","i","Error","code","l","call","length",1,"createContext","setVertexAttribArrays","GLBuffer","GLFramebuffer","GLShader","GLTexture","VertexArrayObject","./lib/GLBuffer","./lib/GLFramebuffer","./lib/GLShader","./lib/GLTexture","./lib/VertexArrayObject","./lib/createContext","./lib/setVertexAttribArrays",2,"EMPTY_ARRAY_BUFFER","ArrayBuffer","Buffer","gl","type","data","drawType","buffer","createBuffer","ARRAY_BUFFER","STATIC_DRAW","upload","prototype","offset","dontBind","bind","byteLength","bufferSubData","bufferData","bindBuffer","createVertexBuffer","createIndexBuffer","ELEMENT_ARRAY_BUFFER","create",3,"Texture","Framebuffer","width","height","framebuffer","createFramebuffer","stencil","texture","enableTexture","framebufferTexture2D","FRAMEBUFFER","COLOR_ATTACHMENT0","TEXTURE_2D","enableStencil","createRenderbuffer","bindRenderbuffer","RENDERBUFFER","framebufferRenderbuffer","DEPTH_STENCIL_ATTACHMENT","renderbufferStorage","DEPTH_STENCIL","clear","b","clearColor","COLOR_BUFFER_BIT","bindFramebuffer","unbind","resize","texImage2D","format","destroy","deleteFramebuffer","createRGBA","enableNearestScaling","enableWrapClamp","RGBA","UNSIGNED_BYTE","fbo","createFloat32","fromData","./GLTexture",4,"compileProgram","extractAttributes","extractUniforms","generateUniformAccessObject","Shader","vertexSrc","fragmentSrc","program","attributes","uniformData","uniforms","useProgram","./shader/compileProgram","./shader/extractAttributes","./shader/extractUniforms","./shader/generateUniformAccessObject",5,"createTexture","mipmap","premultiplyAlpha","source","pixelStorei","UNPACK_PREMULTIPLY_ALPHA_WEBGL","FLOATING_POINT_AVAILABLE","uploadData","Float32Array","ext","getExtension","FLOAT","location","undefined","activeTexture","TEXTURE0","bindTexture","minFilter","linear","texParameteri","TEXTURE_MIN_FILTER","LINEAR_MIPMAP_LINEAR","NEAREST_MIPMAP_NEAREST","LINEAR","NEAREST","magFilter","TEXTURE_MAG_FILTER","enableMipmap","generateMipmap","enableLinearScaling","TEXTURE_WRAP_S","CLAMP_TO_EDGE","TEXTURE_WRAP_T","enableWrapRepeat","REPEAT","deleteTexture","fromSource",6,"nativeVaoExtension","nativeVao","createVertexArrayOES","indexBuffer","dirty","constructor","bindVertexArrayOES","activate","attrib","attribute","pointer","normalized","stride","start","enableVertexAttribArray","addAttribute","push","addIndex","options",7,"CONTEXT_UID","canvas","getContext","id",8,"GL_MAP","attribs","maxAttribs","getParameter","MAX_VERTEX_ATTRIBS","tempAttribState","Array","attribState","disableVertexAttribArray",9,"glVertShader","compileShader","VERTEX_SHADER","glFragShader","FRAGMENT_SHADER","createProgram","attachShader","linkProgram","getProgramParameter","LINK_STATUS","console","error","VALIDATE_STATUS","getError","getProgramInfoLog","warn","deleteProgram","deleteShader","src","shader","createShader","shaderSource","getShaderParameter","COMPILE_STATUS","log","getShaderInfoLog",10,"defaultValue","size","Int32Array","booleanArray","array",11,"mapType","mapSize","totalAttributes","ACTIVE_ATTRIBUTES","attribData","getActiveAttrib","name","getAttribLocation","vertexAttribPointer","./mapSize","./mapType",12,"totalUniforms","ACTIVE_UNIFORMS","getActiveUniform","replace","getUniformLocation","value","./defaultValue",13,"uniformKeys","Object","keys","fullName","nameTokens","split","uniformGroup","getUniformGroup","uniform","defineProperty","get","generateGetter","set","generateSetter","template","getterTemplate","Function","setTemplate","setterTemplate","GLSL_TO_SINGLE_SETTERS","GLSL_TO_ARRAY_SETTERS","cur","join","float","vec2","vec3","vec4","int","ivec2","ivec3","ivec4","bool","bvec2","bvec3","bvec4","mat2","mat3","mat4","sampler2D",14,"GLSL_TO_SIZE",15,"GL_TABLE","typeNames","GL_TO_GLSL_TYPES","tn","FLOAT_VEC2","FLOAT_VEC3","FLOAT_VEC4","INT","INT_VEC2","INT_VEC3","INT_VEC4","BOOL","BOOL_VEC2","BOOL_VEC3","BOOL_VEC4","FLOAT_MAT2","FLOAT_MAT3","FLOAT_MAT4","SAMPLER_2D",16,"process","noop","identity","v","toBool","notId","only_once","fn","apply","arguments","_once","_isArrayLike","arr","_isArray","_arrayEach","iterator","index","_map","result","_range","count","_reduce","memo","x","_forEachOf","object","_keys","key","_indexOf","item","_keyIterator","coll","len","_restParam","func","startIndex","Math","max","rest","_withoutIndex","callback","_eachOfLimit","limit","obj","nextKey","done","running","errored","replenish","err","doParallel","async","eachOf","doParallelLimit","doSeries","eachOfSeries","_asyncMap","eachfn","results","_filter","sort","_reject","cb","_createTester","check","getResult","iteratee","_","_findGetResult","_parallel","tasks","task","args","_concat","y","concat","_queue","worker","concurrency","payload","_insert","q","pos","started","idle","setImmediate","drain","unshift","saturated","_next","workers","removed","workersList","splice","empty","paused","kill","pause","resume","resumeCount","min","w","_console_fn","_times","mapper","_applyEach","fns","go","that","pop","ensureAsync","innerArgs","sync","previous_async","root","noConflict","_toString","toString","isArray","_isObject","k","hasOwnProperty","_setImmediate","_delay","setTimeout","nextTick","forEach","each","forEachSeries","eachSeries","forEachLimit","eachLimit","forEachOf","completed","iter","forEachOfSeries","iterate","forEachOfLimit","eachOfLimit","map","mapSeries","mapLimit","inject","foldl","reduce","foldr","reduceRight","reversed","reverse","transform","select","filter","selectLimit","filterLimit","selectSeries","filterSeries","reject","rejectLimit","rejectSeries","any","some","someLimit","all","every","everyLimit","detect","detectSeries","detectLimit","sortBy","comparator","left","right","criteria","auto","addListener","listeners","removeListener","idx","taskComplete","remainingTasks","slice","runningTasks","ready","requires","listener","taskCallback","dep","safeResults","val","rkey","retry","times","parseTimes","acc","parseInt","DEFAULT_TIMES","interval","DEFAULT_INTERVAL","wrappedTask","wrappedCallback","wrappedResults","retryAttempt","finalAttempt","seriesCallback","retryInterval","opts","attempts","series","waterfall","wrapIterator","next","parallel","parallelLimit","makeCallback","callArgs","concatSeries","whilst","test","doWhilst","calls","until","doUntil","during","truth","doDuring","queue","items","priorityQueue","_compareTasks","priority","_binarySearch","sequence","compare","beg","end","mid","cargo","dir","memoize","hasher","queues","memoized","unmemoized","unmemoize","timesSeries","timesLimit","seq","newargs","nextargs","compose","applyEach","applyEachSeries","forever","constant","values","wrapSync","asyncify","then","message","_process",17,"normalizeArray","parts","allowAboveRoot","up","last","xs","res","splitPathRe","splitPath","filename","exec","resolve","resolvedPath","resolvedAbsolute","path","cwd","TypeError","charAt","p","normalize","isAbsolute","trailingSlash","substr","paths","relative","from","to","trim","fromParts","toParts","samePartsLength","outputParts","sep","delimiter","dirname","basename","extname","str",18,"cleanUpNextTick","draining","currentQueue","queueIndex","drainQueue","timeout","run","clearTimeout","Item","fun","title","browser","env","argv","version","versions","on","once","off","removeAllListeners","emit","binding","chdir","umask",19,"RangeError","errors","mapDomain","string","regexSeparators","labels","encoded","ucs2decode","extra","output","counter","charCodeAt","ucs2encode","stringFromCharCode","basicToDigit","codePoint","base","digitToBasic","digit","flag","adapt","delta","numPoints","firstTime","floor","damp","baseMinusTMin","tMax","skew","decode","input","out","basic","j","oldi","baseMinusT","inputLength","initialN","bias","initialBias","lastIndexOf","maxInt","tMin","encode","handledCPCount","basicLength","m","currentValue","handledCPCountPlusOne","qMinusT","toUnicode","regexPunycode","toLowerCase","toASCII","regexNonASCII","freeExports","nodeType","freeModule","freeGlobal","punycode","overflow","not-basic","invalid-input","String","fromCharCode","ucs2",20,"prop","qs","eq","regexp","maxKeys","kstr","vstr","indexOf","decodeURIComponent",21,"stringifyPrimitive","isFinite","objectKeys","ks","encodeURIComponent",22,"parse","stringify","./decode","./encode",23,"Url","protocol","slashes","auth","host","port","hostname","hash","search","query","pathname","href","urlParse","url","parseQueryString","slashesDenoteHost","isObject","urlFormat","isString","urlResolve","urlResolveObject","resolveObject","arg","isNull","isNullOrUndefined","protocolPattern","portPattern","delims","unwise","autoEscape","nonHostChars","hostEndingChars","hostnameMaxLen","hostnamePartPattern","hostnamePartStart","unsafeProtocol","javascript","javascript:","hostlessProtocol","slashedProtocol","http","https","ftp","gopher","file","http:","https:","ftp:","gopher:","file:","querystring","proto","lowerProto","match","hostEnd","hec","atSign","parseHost","ipv6Hostname","hostparts","part","newpart","validParts","notHost","bit","domainArray","newOut","h","ae","esc","escape","qm","rel","relPath","shift","isSourceAbs","isRelAbs","mustEndAbs","removeAllDots","srcPath","psychotic","authInHost","hasTrailingSlash",24,"earcut","holeIndices","dim","hasHoles","outerLen","outerNode","linkedList","triangles","minX","minY","maxX","maxY","eliminateHoles","earcutLinked","clockwise","sum","insertNode","filterPoints","again","steiner","equals","area","prev","removeNode","ear","pass","indexCurve","stop","isEarHashed","isEar","cureLocalIntersections","splitEarcut","c","pointInTriangle","minTX","minTY","maxTX","maxTY","minZ","zOrder","maxZ","nextZ","z","prevZ","intersects","locallyInside","isValidDiagonal","splitPolygon","list","getLeftmost","compareX","eliminateHole","hole","findHoleBridge","hx","hy","qx","Infinity","tan","tanMin","abs","sortLinked","tail","numMerges","pSize","qSize","inSize","leftmost","ax","ay","bx","by","cx","cy","px","py","intersectsPolygon","middleInside","p1","p2","q1","q2","inside","a2","Node","b2","an","bp",25,"EE","context","EventEmitter","prefix","_events","event","exists","evt","available","ee","a1","a3","a4","a5","events","setMaxListeners","prefixed",26,"toObject","propIsEnumerable","propertyIsEnumerable","assign","target","symbols","getOwnPropertySymbols",27,"called","_each","_eachLimit","_mapLimit","_detect","main_callback","theCallback","working","drained","ts","ds",28,"Loader","baseUrl","progress","loading","_progressChunk","_beforeMiddleware","_afterMiddleware","_boundLoadResource","_loadResource","_boundOnLoad","_onLoad","_buffer","_numToLoad","resources","urlParser","Resource","add","enqueue","onComplete","_handleBaseUrl","parsedUrl","before","pre","after","use","reset","load","resource","dequeue","_dequeue","_runMiddleware","_onComplete","LOAD_TYPE","XHR_READY_STATE","XHR_RESPONSE_TYPE","./Resource","eventemitter3",29,"isDataUrl","crossOrigin","loadType","_determineLoadType","xhrType","metadata","xhr","isJson","isXml","isImage","isAudio","isVideo","_boundComplete","complete","_boundOnError","_onError","_boundOnProgress","_onProgress","_boundXhrOnError","_xhrOnError","_boundXhrOnAbort","_xhrOnAbort","_boundXhrOnLoad","_xhrOnLoad","_boundXdrOnTimeout","_xdrOnTimeout","reqType","setExtMap","substring","_url","useXdr","XDomainRequest","XMLHttpRequest","tempAnchor","removeEventListener","onerror","ontimeout","onprogress","onload","_determineCrossOrigin","IMAGE","_loadImage","AUDIO","_loadElement","VIDEO","XHR","_loadXdr","_loadXhr","Image","addEventListener","Audio","document","createElement","navigator","isCocoonJS","appendChild","_createSource","toUpperCase","_determineXhrType","open","JSON","DOCUMENT","responseType","TEXT","send","xdr","mime","nodeName","lengthComputable","loaded","total","status","statusText","responseText","DOMParser","domparser","parseFromString","div","innerHTML","response","responseURL","loc","samePort","_xhrTypeMap","_getExtension","_loadTypeMap","slashIndex","queryStart","_getMimeFromXhrType","BUFFER","BLOB","DEFAULT","UNSENT","OPENED","HEADERS_RECEIVED","LOADING","DONE","gif","png","bmp","jpg","jpeg","tif","tiff","webp","tga","xhtml","html","htm","xml","tmx","tsx","svg","json","text","txt","setExtensionLoadType","setExtensionXhrType",30,"_keyStr","encodeBinary","bytebuffer","encodedCharIndexes","inx","jnx","paddingBytes",31,"middleware","caching","memory","parsing","blob","./Loader","./middlewares/caching/memory","./middlewares/parsing/blob",32,"cache",33,"b64","URL","webkitURL","Blob","createObjectURL","revokeObjectURL","getResponseHeader","../../Resource","../../b64",34,"description","author","contributors","main","homepage","bugs","license","repository","scripts","build","docs","files","dependencies","brfs","object-assign","pixi-gl-core","resource-loader","devDependencies","browserify","chai","del","gulp","gulp-cached","gulp-concat","gulp-debug","gulp-header","gulp-jshint","gulp-mirror","gulp-plumber","gulp-rename","gulp-sourcemaps","gulp-uglify","gulp-util","jaguarjs-jsdoc","jsdoc","jshint-summary","minimist","mocha","require-dir","run-sequence","testem","vinyl-buffer","vinyl-source-stream","watchify",35,"AccessibilityManager","renderer","style","position","top","zIndex","pool","renderId","debug","children","_onKeyDown","_onMouseMove","isActive","core","DisplayObject","update","view","parentNode","deactivate","removeChild","updateAccessibleObjects","displayObject","visible","accessible","interactive","_accessibleActive","addChild","_lastObjectRendered","rect","getBoundingClientRect","sx","sy","child","utils","removeItems","_accessibleDiv","hitArea","wt","worldTransform","tx","ty","d","getBounds","capHitArea","backgroundColor","borderStyle","_onClick","_onFocus","_onFocusOut","accessibleTitle","tabIndex","interactionManager","plugins","interaction","dispatchEvent","eventData","keyCode","WebGLRenderer","registerPlugin","CanvasRenderer","../core","./accessibleTarget",36,"accessibleTarget",37,"./AccessibilityManager",38,"CONST","VERSION","PI_2","PI","RAD_TO_DEG","DEG_TO_RAD","TARGET_FPMS","RENDERER_TYPE","UNKNOWN","WEBGL","CANVAS","BLEND_MODES","NORMAL","ADD","MULTIPLY","SCREEN","OVERLAY","DARKEN","LIGHTEN","COLOR_DODGE","COLOR_BURN","HARD_LIGHT","SOFT_LIGHT","DIFFERENCE","EXCLUSION","HUE","SATURATION","COLOR","LUMINOSITY","DRAW_MODES","POINTS","LINES","LINE_LOOP","LINE_STRIP","TRIANGLES","TRIANGLE_STRIP","TRIANGLE_FAN","SCALE_MODES","RETINA_PREFIX","RESOLUTION","FILTER_RESOLUTION","DEFAULT_RENDER_OPTIONS","resolution","antialias","forceFXAA","autoResize","transparent","clearBeforeRender","preserveDrawingBuffer","roundPixels","SHAPES","POLY","RECT","CIRC","ELIP","RREC","SPRITE_BATCH_SIZE","../../package.json",39,"Container","math","RenderTexture","_tempMatrix","Matrix","defineProperties","scale","getLocalBounds","_width","_height","onChildrenChange","argumentsLength","parent","addChildAt","swapChildren","child2","index1","getChildIndex","index2","setChildIndex","currentIndex","getChildAt","removeChildAt","removeChildren","beginIndex","endIndex","begin","range","generateTexture","scaleMode","bounds","renderTexture","render","updateTransform","displayObjectUpdateTransform","containerUpdateTransform","_currentBounds","Rectangle","EMPTY","childBounds","childMaxX","childMaxY","childVisible","_bounds","containerGetBounds","matrixCache","IDENTITY","renderWebGL","worldAlpha","renderable","_mask","_filters","currentRenderer","flush","filterManager","pushFilter","maskManager","pushMask","_renderWebGL","popMask","popFilter","_renderCanvas","renderCanvas","alpha","destroyChildren","../math","../textures/RenderTexture","../utils","./DisplayObject",40,"Point","pivot","_rotation","localTransform","filterArea","_sr","_cr","_tempDisplayObjectParent","scaleX","scaleY","rotation","sin","cos","worldVisible","mask","filters","pt","lt","matrix","toGlobal","toLocal","point","applyInverse","setParent","container","setTransform","skewX","skewY","pivotX","pivotY","../const",41,"Graphics","fillAlpha","lineWidth","lineColor","graphicsData","tint","_prevTint","blendMode","currentPath","_webGL","isMask","boundsPadding","_localBounds","glDirty","boundsDirty","cachedSpriteDirty","CanvasBuffer","CanvasGraphics","GraphicsData","tempPoint","clone","updateLocalBounds","lineStyle","color","lineAlpha","shape","points","Polygon","closed","drawShape","moveTo","lineTo","quadraticCurveTo","cpX","cpY","toX","toY","xa","ya","fromX","fromY","bezierCurveTo","cpX2","cpY2","dt","dt2","dt3","t2","t3","arcTo","x1","y1","x2","y2","radius","b1","mm","dd","cc","tt","k1","sqrt","k2","j1","j2","qy","startAngle","atan2","endAngle","arc","anticlockwise","sweep","segs","ceil","startX","startY","theta","theta2","cTheta","sTheta","segMinus","remainder","real","angle","beginFill","filling","fillColor","fill","endFill","drawRect","drawRoundedRect","RoundedRectangle","drawCircle","Circle","drawEllipse","Ellipse","drawPolygon","clearDirty","canvasBuffer","fromCanvas","baseTexture","translate","renderGraphics","setObjectRenderer","graphics","compositeOperation","blendModes","globalCompositeOperation","w0","w1","h0","h1","x3","y3","x4","y4","containsPoint","contains","padding","_webgl","../display/Container","../renderers/canvas/utils/CanvasBuffer","../renderers/canvas/utils/CanvasGraphics","../textures/Texture","./GraphicsData",42,"_lineTint","_fillTint",43,"GraphicsRenderer","ObjectRenderer","graphicsDataPool","primitiveShader","complexPrimitiveShader","maximumSimplePolySize","WebGLGraphicsData","onContextChange","webGLData","shaderManager","updateGraphics","webGL","blendModeManager","setBlendMode","mode","stencilManager","pushStencil","uniform1f","_location","drawElements","UNSIGNED_SHORT","indices","popStencil","setShader","uniformMatrix3fv","translationMatrix","toArray","projectionMatrix","currentRenderTarget","uniform3fv","hex2rgb","aVertexPosition","aColor","drawCount","lastIndex","switchMode","canDrawUsingSimple","buildPoly","buildComplexPoly","buildLine","buildRectangle","buildCircle","buildRoundedRectangle","rectData","verts","vertPos","tempPoints","rrectData","recPoints","quadraticBezierCurve","vecPos","getPt","n1","n2","perc","diff","xb","yb","circleData","totalSegs","seg","firstPoint","lastPoint","midPointX","midPointY","p1x","p1y","p2x","p2y","p3x","p3y","perpx","perpy","perp2x","perp2y","perp3x","perp3y","c1","c2","denom","pdist","dist","indexCount","indexStart","../../const","../../math","../../renderers/webgl/WebGLRenderer","../../renderers/webgl/utils/ObjectRenderer","../../utils","./WebGLGraphicsData",44,"glPoints","glIndices","Uint16Array","deleteBuffer",45,"ticker","Sprite","ParticleContainer","SpriteRenderer","ParticleRenderer","Text","BaseTexture","VideoBaseTexture","TextureUvs","WebGLManager","ShaderManager","RenderTarget","AbstractFilter","FXAAFilter","SpriteMaskFilter","glCore","autoDetectRenderer","noWebGL","isWebGLSupported","./const","./display/Container","./display/DisplayObject","./graphics/Graphics","./graphics/GraphicsData","./graphics/webgl/GraphicsRenderer","./math","./particles/ParticleContainer","./particles/webgl/ParticleRenderer","./renderers/canvas/CanvasRenderer","./renderers/canvas/utils/CanvasBuffer","./renderers/canvas/utils/CanvasGraphics","./renderers/webgl/WebGLRenderer","./renderers/webgl/filters/AbstractFilter","./renderers/webgl/filters/FXAAFilter","./renderers/webgl/filters/SpriteMaskFilter","./renderers/webgl/managers/ShaderManager","./renderers/webgl/managers/WebGLManager","./renderers/webgl/shaders/Shader","./renderers/webgl/utils/ObjectRenderer","./renderers/webgl/utils/RenderTarget","./sprites/Sprite","./sprites/webgl/SpriteRenderer","./text/Text","./textures/BaseTexture","./textures/RenderTexture","./textures/Texture","./textures/TextureUvs","./textures/VideoBaseTexture","./ticker","./utils",46,"fromArray","transpose","newPos","rotate","tx1","append","d1","sr","cr","nsx","prepend","invert","copy","TEMP_MATRIX","./Point",47,48,"./Matrix","./shapes/Circle","./shapes/Ellipse","./shapes/Polygon","./shapes/Rectangle","./shapes/RoundedRectangle",49,"dx","dy","r2","./Rectangle",50,"normx","normy",51,"points_","il","xi","yi","xj","yj","intersect","../Point",52,53,54,"maxSize","properties","batchSize","maxBatchSize","_properties","_maxSize","_batchSize","_buffers","_bufferToUpdate","interactiveChildren","setProperties","uvs","particle","smallestChildIndex","bufferIndex","isRotated","positionX","positionY","finalWidth","finalHeight","globalAlpha","frame","anchor","childTransform","drawImage",55,"ParticleBuffer","dynamicPropertyFlags","vertSize","vertByteSize","dynamicProperties","staticProperties","property","staticStride","staticBuffer","staticData","dynamicStride","dynamicBuffer","dynamicData","initBuffers","dynamicOffset","DYNAMIC_DRAW","staticOffset","uploadDynamic","amount","uploadFunction","uploadStatic",56,"numIndices","tempMatrix","ParticleShader","uploadVertices","aPositionCoord","uploadPosition","aRotation","uploadRotation","aTextureCoord","uploadUvs","uploadAlpha","totalChildren","generateBuffers","uAlpha","_texture","_glTextures","updateTexture","buffers","sprite","crop","_frame","spritePosition","spriteRotation","textureUvs","_uvs","x0","y0","spriteAlpha","./ParticleBuffer","./ParticleShader",57,"TextureShader","../../renderers/webgl/shaders/TextureShader",58,"SystemRenderer","system","sayHello","_backgroundColor","_backgroundColorRgba","_backgroundColorString","hex2string","removeView",59,"refresh","CanvasMaskManager","smoothProperty","imageSmoothingEnabled","webkitImageSmoothingEnabled","mozImageSmoothingEnabled","oImageSmoothingEnabled","msImageSmoothingEnabled","initPlugins","_mapBlendModes","pluginTarget","mixin","cacheParent","screencanvas","fillStyle","clearRect","fillRect","renderDisplayObject","destroyPlugins","tempContext","canUseNewCanvasBlendModes","../SystemRenderer","./utils/CanvasMaskManager",60,61,"updateGraphicsTint","beginPath","closePath","strokeStyle","stroke","strokeRect","kappa","ox","oy","xe","ye","xm","ym","rx","ry","maxRadius","renderGraphicsMask","tintR","tintG","tintB","../../../const",62,"maskData","save","cacheAlpha","clip","restore","./CanvasGraphics",63,"CanvasTinter","getTintedTexture","roundColor","stringColor","tintCache","tintMethod","convertTintToImage","tintImage","toDataURL","tintWithMultiply","tintWithOverlay","tintWithPerPixel","rgbValues","pixelData","getImageData","pixels","putImageData","step","cacheStepsPerColorChannel","rgb2hex","canUseMultiply","../../../utils",64,"TextureManager","_managedTextures","glTextures","getTexture","hasLoaded","glTexture","uid","destroyTexture","_skipRemove","removeAll",65,"handleContextLost","handleContextRestored","_contextOptions","premultipliedAlpha","MaskManager","StencilManager","FilterManager","BlendModeManager","_initContext","mapWebGLBlendModesToPixi","drawModes","mapWebGLDrawModesToPixi","_activeShader","_activeRenderTarget","_activeTextureLocation","_activeTexture","textureManager","disable","DEPTH_TEST","CULL_FACE","enable","BLEND","rootRenderTarget","bindRenderTarget","isContextLost","renderTarget","setFilterStack","filterStack","objectRenderer","setMaskStack","stencilMaskStack","bindShader","preventDefault","destroyAll","./TextureManager","./filters/FXAAFilter","./managers/BlendModeManager","./managers/FilterManager","./managers/MaskManager","./managers/ShaderManager","./managers/StencilManager","./utils/ObjectRenderer","./utils/RenderTarget","./utils/mapWebGLBlendModesToPixi","./utils/mapWebGLDrawModesToPixi",66,"shaders","DefaultShader","defaultVertexSrc","defaultFragmentSrc","getShader","applyFilter","syncUniform","../shaders/TextureShader",67,"./AbstractFilter",68,"maskMatrix","otherMatrix","maskSprite","calculateMappedMatrix","../../../math",69,"currentBlendMode","blendFunc","./WebGLManager",70,"texturePool","textureSize","currentFrame","Quad","quad","capFilterArea","getRenderTarget","setRenderTarget","filterData","previousFilterData","vertexBuffer","defaultShader","dimensions","vertices","returnRenderTarget","flipTexture","flopTexture","temp","inputTarget","outputTarget","syncUniforms","outputMatrix","mappedMatrix","ratio","translateScaleX","translateScaleY","offsetY","../utils/Quad","../utils/RenderTarget",71,"stencilStack","alphaMaskPool","AlphaMaskFilter","pushSpriteMask","pushStencilMask","popSpriteMask","popStencilMask","alphaMaskFilter","../filters/SpriteMaskFilter",72,"maxAttibs","stack","_currentId","currentShader","ComplexPrimitiveShader","PrimitiveShader","setAttribs","../shaders/ComplexPrimitiveShader","../shaders/PrimitiveShader",73,"WebGLMaskManager","STENCIL_TEST","attachStencilBuffer","sms","bindGraphics","STENCIL_BUFFER_BIT","level","colorMask","stencilFunc","ALWAYS","stencilOp","KEEP","INVERT","EQUAL","DECR","INCR",74,75,"./Shader",76,77,"textureCount","init","compile","cacheUniformLocations","cacheAttributeLocations","_glCompile","uniform1i","uniform2f","uniform3f","uniform4f","uniform1iv","uniform2iv","uniform3iv","uniform4iv","uniform1fv","uniform2fv","uniform4fv","uniformMatrix2fv","uniformMatrix4fv","_array","initSampler2D","textureData","luminance","LUMINANCE","wrapS","wrapT",78,"customUniforms","customAttributes","uSampler",79,80,"../managers/WebGLManager",81,"colors","rect2",82,"StencilMaskStack","frameBuffer","stencilBuffer","projectionFrame","calculateProjection","viewport","pm","./StencilMaskStack",83,84,"ONE","ONE_MINUS_SRC_ALPHA","SRC_ALPHA","DST_ALPHA","DST_COLOR",85,86,"cachedTint","textureDirty","vertexDirty","vertexData","sign","_onTextureUpdate","caclulateVertices","valid","smoothingEnabled","tintedTexture","destroyBaseTexture","fromFrame","frameId","TextureCache","fromImage","imageId","crossorigin","../renderers/canvas/utils/CanvasTinter",87,"numVerts","positions","Uint32Array","createIndicesForQuads","currentBatchSize","sprites","groupCount","groups","textures","ids","blend","currentGroup","currentTexture","generateMultiTextureShader","MAX_TEXTUES","_shader","vao","aTextureId","nextTexture","_enabled","_id","uvs_uint32","renderSprites","subarray","group","../../renderers/webgl/shaders/_TextureShader","../../utils/createIndicesForQuads","./generateMultiTextureShader",88,"maxTextures","generateSampleSrc","fragTemplate","sampleValues","uSamplers",89,"_text","_style","fontPropertiesCache","fontPropertiesCanvas","fontPropertiesContext","updateText","dropShadowColor","font","align","strokeThickness","wordWrap","wordWrapWidth","dropShadow","dropShadowAngle","dropShadowDistance","dropShadowBlur","textBaseline","lineJoin","miterLimit","outputText","lines","lineWidths","maxLineWidth","fontProperties","determineFontProperties","measureText","lineHeight","fontSize","linePositionX","linePositionY","shadowColor","shadowBlur","xShadowOffset","yShadowOffset","ascent","fillText","strokeText","fontStyle","baseline","imagedata","line","descent","spaceLeft","words","wordWidth","wordWidthWithSpace","../sprites/Sprite",90,"realWidth","realHeight","isLoading","imageUrl","isPowerOfTwo","_active","loadSource","naturalWidth","naturalHeight","wasLoading","_sourceLoaded","scope","BaseTextureCache","_pixiId","dispose","updateSourceImage","newSrc","image","getResolutionOfUrl",91,"textureBuffer","_updateUvs","updateBase","currentBounds","cachedWt","realResolution","getImage","getBase64","getCanvas","webGLPixels","Uint8Array","readPixels","tempCanvas","canvasData","getPixels","getPixel","../renderers/webgl/managers/FilterManager","../renderers/webgl/utils/RenderTarget","./BaseTexture","./Texture",92,"noFrame","requiresUpdate","onBaseTextureUpdated","onBaseTextureLoaded","destroyBase","fromVideo","video","fromVideoUrl","videoUrl","fromUrl","addTextureToCache","removeTextureFromCache","./TextureUvs","./VideoBaseTexture",93,"xy0_uint32","xy1_uint32","xy2_uint32","xy3_uint32","baseFrame","tw","th",94,"readyState","HAVE_ENOUGH_DATA","HAVE_FUTURE_DATA","autoUpdate","_onUpdate","_onCanPlay","_onPlayStart","_onPlayStop","__loaded","createSource","requestAnimationFrame","videoWidth","videoHeight","play","videoSrc","fromUrls",95,"Ticker","_this","_tick","time","_requestId","_emitter","TICK","_maxElapsedMS","autoStart","deltaTime","elapsedMS","lastTime","speed","FPS","minFPS","fps","minFPMS","_requestIfNeeded","performance","now","_cancelIfNeeded","cancelAnimationFrame","_startIfPossible","addOnce","remove","currentTime",96,"shared","./Ticker",97,"totalIndices",98,"_uid","_saidHello","hex","rgb","pngHead","pngEnd","magenta","yellow","getNextPowerOfTwo","number","parseFloat","userAgent","contextOptions","WebGLRenderingContext","getContextAttributes","startIdx","removeCount","./pluginTarget",99,"__plugins","pluginName","ctor",100,"mesh","extras","SpriteBatch","ReferenceError","AssetLoader","Stage","DisplayObjectContainer","Strip","Mesh","Rope","MovieClip","TilingSprite","BitmapText","scaleModes","setTexture","setText","setStyle","setFrame","uuid","./core","./extras","./filters","./mesh",101,"textWidth","textHeight","_glyphs","_font","maxWidth","maxLineHeight","fonts","prevCharCode","chars","lastLineWidth","lastSpace","charCode","charData","kerning","xOffset","yOffset","xAdvance","lineAlignOffsets","alignOffset","lenChars","validate",102,"_textures","_durations","animationSpeed","loop","_currentTime","playing","totalFrames","gotoAndStop","frameNumber","gotoAndPlay","elapsed","lag","fromFrames","frames","fromImages","images",103,"tileScale","tilePosition","_canvasPattern","uFrame","uTransform","uPixelSize","tempUvs","tempWidth","tempHeight","modX","modY","createPattern","_tileScaleOffset","../core/renderers/canvas/utils/CanvasTinter",104,"_cacheAsBitmap","_originalRenderWebGL","_originalRenderCanvas","_originalUpdateTransform","_originalHitTest","_originalDestroy","_cachedSprite","cacheAsBitmap","_originalGetBounds","_originalContainsPoint","_renderCachedWebGL","_renderCachedCanvas","_cacheAsBitmapDestroy","_destroyCachedDisplayObject","_initCachedDisplayObject","cachedRenderTarget","_getCachedBounds","_initCachedDisplayObjectCanvas",105,"getChildByName",106,"getGlobalPosition",107,"./BitmapText","./MovieClip","./TilingSprite","./cacheAsBitmap","./getChildByName","./getGlobalPosition",108,"AsciiFilter","pixelSize","../../core",109,"BloomFilter","blurXFilter","BlurXFilter","blurYFilter","BlurYFilter","defaultFilter","blur","blurX","blurY","../blur/BlurXFilter","../blur/BlurYFilter",110,"BlurDirFilter","dirX","dirY","strength","passes",111,"BlurFilter","./BlurXFilter","./BlurYFilter",112,"flip","flop",113,114,"SmartBlurFilter",115,"ColorMatrixFilter","_loadMatrix","multiply","newMatrix","_multiply","_colorMatrix","brightness","greyscale","grayscale","blackAndWhite","hue","lumR","lumG","lumB","contrast","saturate","desaturate","negative","sepia","technicolor","polaroid","toBGR","kodachrome","browni","vintage","colorTone","desaturation","toned","lightColor","darkColor","lR","lG","lB","dR","dG","dB","night","intensity","predator","lsd",116,"ColorStepFilter",117,"ConvolutionFilter","texelSize",118,"CrossHatchFilter",119,"DisplacementFilter","mapSampler",120,"DotScreenFilter",121,"BlurYTintFilter",122,"DropShadowFilter","blurYTintFilter","_dirtyPosition","_angle","_distance","hideObject","distance","./BlurYTintFilter",123,"GrayFilter","gray",124,"InvertFilter","NoiseFilter","PixelateFilter","RGBSplitFilter","ShockwaveFilter","SepiaFilter","TiltShiftFilter","TiltShiftXFilter","TiltShiftYFilter","TwistFilter","./ascii/AsciiFilter","./bloom/BloomFilter","./blur/BlurDirFilter","./blur/BlurFilter","./blur/BlurXFilter","./blur/BlurYFilter","./blur/SmartBlurFilter","./color/ColorMatrixFilter","./color/ColorStepFilter","./convolution/ConvolutionFilter","./crosshatch/CrossHatchFilter","./displacement/DisplacementFilter","./dot/DotScreenFilter","./dropshadow/DropShadowFilter","./gray/GrayFilter","./invert/InvertFilter","./noise/NoiseFilter","./pixelate/PixelateFilter","./rgb/RGBSplitFilter","./sepia/SepiaFilter","./shockwave/ShockwaveFilter","./tiltshift/TiltShiftFilter","./tiltshift/TiltShiftXFilter","./tiltshift/TiltShiftYFilter","./twist/TwistFilter",125,126,"noise",127,128,"red","green","blue",129,130,"center","params",131,"TiltShiftAxisFilter","gradientBlur","innerHeight","texSize","innerWidth","updateDelta",132,"tiltShiftXFilter","tiltShiftYFilter","./TiltShiftXFilter","./TiltShiftYFilter",133,"./TiltShiftAxisFilter",134,135,136,"loaders","accessibility","loader","./accessibility","./deprecation","./interaction","./loaders","./polyfill",137,"InteractionData","originalEvent","getLocalPosition","globalPos",138,"InteractionManager","autoPreventDefault","interactionFrequency","mouse","stopped","stopPropagation","interactiveDataPool","interactionDOMElement","eventsAdded","onMouseUp","processMouseUp","onMouseDown","processMouseDown","onMouseMove","processMouseMove","onMouseOut","processMouseOverOut","onTouchStart","processTouchStart","onTouchEnd","processTouchEnd","onTouchMove","processTouchMove","currentCursorStyle","_tempPoint","setTargetElement","element","removeEvents","addEvents","msPointerEnabled","_deltaTime","didMove","cursor","processInteractive","eventString","mapPositionToPoint","hitTest","hit","interactiveParent","clientX","clientY","isRightButton","button","which","isDown","_over","buttonMode","defaultCursor","changedTouches","cLength","touchEvent","touchData","getTouchData","returnTouchData","_touchDown","identifier","globalX","globalY","./InteractionData","./interactiveTarget",139,"interactiveTarget","./InteractionManager",140,141,"info","getElementsByTagName","common","getAttribute","letters","textureRect","kernings","first","second","bitmapFont","xmlUrl","textureUrl","loadOptions","imageMetadata","../extras",142,"bitmapFontParser","spritesheetParser","textureParser","./bitmapFontParser","./loader","./spritesheetParser","./textureParser",143,"ResourceLoader","_pixiMiddleware","addPixiMiddleware",144,"route","meta","rotated","trimmed","spriteSourceSize","sourceSize",145,146,"drawMode","canvasPadding","TRIANGLE_MESH","tempPolygon","_renderCanvasTriangleMesh","_renderCanvasTriangles","_renderCanvasDrawTriangle","index0","textureSource","textureWidth","textureHeight","u0","u1","u2","v0","v1","v2","paddingX","paddingY","centerX","centerY","normX","normY","deltaA","deltaB","deltaC","deltaD","deltaE","deltaF","renderMeshFlat","updateFrame","rawX","rawY","ind0","ind1","ind2",147,"Plane","segmentsX","segmentsY","_ready","segmentsXSub","segmentsYSub","sizeX","sizeY","totalSub","xpos","ypos","value2","value3","value4","./Mesh",148,"factor","nextPoint","perpLength","num","perpX","perpY",149,"MeshRenderer","MeshShader","./Plane","./Rope","./webgl/MeshRenderer","./webgl/MeshShader",150,"_vertexBuffer","_initWebGL","meshShader","_uvBuffer","_indexBuffer","_colorBuffer","../Mesh",151,152,"isNaN",153,154,"./Math.sign","./Object.assign","./requestAnimationFrame",155,"Date","getTime","startTime","vendors","delay"],"mappings":"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EAAA,GAAAuE,EAAA,GAAAvE,EAAA,GAAAuE,EAAA,GAAAvE,EAAA,GAAAuE,EAAA,IAAAvE,EAAA,GAAAuE,EAAA,IACAqkB,EAAA,GAAA5oB,EAAA,GAAAuE,EAAA,GAAAvE,EAAA,GAAAuE,EAAA,GAAAvE,EAAA,GAAAuE,EAAA,IAAAvE,EAAA,GAAAuE,EAAA,IAGAqkB,EAAA,IAAA5oB,EAAA,IAAAuE,EAAA,GAAAvE,EAAA,IAAAuE,EAAA,GAAAvE,EAAA,IAAAuE,EAAA,IAAAvE,EAAA,IAAAuE,EAAA,IACAqkB,EAAA,IAAA5oB,EAAA,IAAAuE,EAAA,GAAAvE,EAAA,IAAAuE,EAAA,GAAAvE,EAAA,IAAAuE,EAAA,IAAAvE,EAAA,IAAAuE,EAAA,IACAqkB,EAAA,IAAA5oB,EAAA,IAAAuE,EAAA,GAAAvE,EAAA,IAAAuE,EAAA,GAAAvE,EAAA,IAAAuE,EAAA,IAAAvE,EAAA,IAAAuE,EAAA,IACAqkB,EAAA,IAAA5oB,EAAA,IAAAuE,EAAA,GAAAvE,EAAA,IAAAuE,EAAA,GAAAvE,EAAA,IAAAuE,EAAA,IAAAvE,EAAA,IAAAuE,EAAA,IACAqkB,EAAA,IAAA5oB,EAAA,IAAAuE,EAAA,GAAAvE,EAAA,IAAAuE,EAAA,GAAAvE,EAAA,IAAAuE,EAAA,IAAAvE,EAAA,IAAAuE,EAAA,IAGAqkB,EAAA,IAAA5oB,EAAA,IAAAuE,EAAA,GAAAvE,EAAA,IAAAuE,EAAA,GAAAvE,EAAA,IAAAuE,EAAA,IAAAvE,EAAA,IAAAuE,EAAA,IACAqkB,EAAA,IAAA5oB,EAAA,IAAAuE,EAAA,GAAAvE,EAAA,IAAAuE,EAAA,GAAAvE,EAAA,IAAAuE,EAAA,IAAAvE,EAAA,IAAAuE,EAAA,IACAqkB,EAAA,IAAA5oB,EAAA,IAAAuE,EAAA,GAAAvE,EAAA,IAAAuE,EAAA,GAAAvE,EAAA,IAAAuE,EAAA,IAAAvE,EAAA,IAAAuE,EAAA,IACAqkB,EAAA,IAAA5oB,EAAA,IAAAuE,EAAA,GAAAvE,EAAA,IAAAuE,EAAA,GAAAvE,EAAA,IAAAuE,EAAA,IAAAvE,EAAA,IAAAuE,EAAA,IACAqkB,EAA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","file":"pixi.min.js","sourcesContent":[null],"sourceRoot":"./"} \ No newline at end of file +{"version":3,"sources":["pixi.js"],"names":["f","exports","module","define","amd","g","window","global","self","this","PIXI","e","t","n","r","s","o","u","a","require","i","Error","code","l","call","length",1,"createContext","setVertexAttribArrays","GLBuffer","GLFramebuffer","GLShader","GLTexture","VertexArrayObject","./lib/GLBuffer","./lib/GLFramebuffer","./lib/GLShader","./lib/GLTexture","./lib/VertexArrayObject","./lib/createContext","./lib/setVertexAttribArrays",2,"EMPTY_ARRAY_BUFFER","ArrayBuffer","Buffer","gl","type","data","drawType","buffer","createBuffer","ARRAY_BUFFER","STATIC_DRAW","upload","prototype","offset","dontBind","bind","byteLength","bufferSubData","bufferData","bindBuffer","createVertexBuffer","createIndexBuffer","ELEMENT_ARRAY_BUFFER","create",3,"Texture","Framebuffer","width","height","framebuffer","createFramebuffer","stencil","texture","enableTexture","framebufferTexture2D","FRAMEBUFFER","COLOR_ATTACHMENT0","TEXTURE_2D","enableStencil","createRenderbuffer","bindRenderbuffer","RENDERBUFFER","framebufferRenderbuffer","DEPTH_STENCIL_ATTACHMENT","renderbufferStorage","DEPTH_STENCIL","clear","b","clearColor","COLOR_BUFFER_BIT","bindFramebuffer","unbind","resize","uploadData","destroy","deleteFramebuffer","createRGBA","fromData","enableNearestScaling","enableWrapClamp","fbo","createFloat32","./GLTexture",4,"compileProgram","extractAttributes","extractUniforms","generateUniformAccessObject","Shader","vertexSrc","fragmentSrc","program","attributes","uniformData","uniforms","useProgram","./shader/compileProgram","./shader/extractAttributes","./shader/extractUniforms","./shader/generateUniformAccessObject",5,"format","createTexture","mipmap","premultiplyAlpha","RGBA","UNSIGNED_BYTE","source","pixelStorei","UNPACK_PREMULTIPLY_ALPHA_WEBGL","texImage2D","FLOATING_POINT_AVAILABLE","Float32Array","ext","getExtension","FLOAT","location","undefined","activeTexture","TEXTURE0","bindTexture","minFilter","linear","texParameteri","TEXTURE_MIN_FILTER","LINEAR_MIPMAP_LINEAR","NEAREST_MIPMAP_NEAREST","LINEAR","NEAREST","magFilter","TEXTURE_MAG_FILTER","enableMipmap","generateMipmap","enableLinearScaling","TEXTURE_WRAP_S","CLAMP_TO_EDGE","TEXTURE_WRAP_T","enableWrapRepeat","REPEAT","deleteTexture","fromSource",6,"nativeVaoExtension","nativeVao","createVertexArrayOES","indexBuffer","dirty","constructor","bindVertexArrayOES","activate","attrib","attribute","pointer","normalized","stride","start","enableVertexAttribArray","addAttribute","push","addIndex","options","draw","size","drawElements","UNSIGNED_SHORT",7,"CONTEXT_UID","canvas","getContext","id",8,"GL_MAP","attribs","maxAttribs","getParameter","MAX_VERTEX_ATTRIBS","tempAttribState","Array","attribState","disableVertexAttribArray",9,"glVertShader","compileShader","VERTEX_SHADER","glFragShader","FRAGMENT_SHADER","createProgram","attachShader","linkProgram","getProgramParameter","LINK_STATUS","console","error","VALIDATE_STATUS","getError","getProgramInfoLog","warn","deleteProgram","deleteShader","src","shader","createShader","shaderSource","getShaderParameter","COMPILE_STATUS","log","getShaderInfoLog",10,"defaultValue","Int32Array","booleanArray","array",11,"mapType","mapSize","totalAttributes","ACTIVE_ATTRIBUTES","attribData","getActiveAttrib","name","getAttribLocation","vertexAttribPointer","./mapSize","./mapType",12,"totalUniforms","ACTIVE_UNIFORMS","getActiveUniform","replace","getUniformLocation","value","./defaultValue",13,"uniformKeys","Object","keys","fullName","nameTokens","split","uniformGroup","getUniformGroup","uniform","defineProperty","get","generateGetter","set","generateSetter","template","getterTemplate","Function","setTemplate","setterTemplate","GLSL_TO_SINGLE_SETTERS","GLSL_TO_ARRAY_SETTERS","cur","join","float","vec2","vec3","vec4","int","ivec2","ivec3","ivec4","bool","bvec2","bvec3","bvec4","mat2","mat3","mat4","sampler2D",14,"GLSL_TO_SIZE",15,"GL_TABLE","typeNames","GL_TO_GLSL_TYPES","tn","FLOAT_VEC2","FLOAT_VEC3","FLOAT_VEC4","INT","INT_VEC2","INT_VEC3","INT_VEC4","BOOL","BOOL_VEC2","BOOL_VEC3","BOOL_VEC4","FLOAT_MAT2","FLOAT_MAT3","FLOAT_MAT4","SAMPLER_2D",16,"process","noop","identity","v","toBool","notId","only_once","fn","apply","arguments","_once","_isArrayLike","arr","_isArray","_arrayEach","iterator","index","_map","result","_range","count","_reduce","memo","x","_forEachOf","object","_keys","key","_indexOf","item","_keyIterator","coll","len","_restParam","func","startIndex","Math","max","rest","_withoutIndex","callback","_eachOfLimit","limit","obj","nextKey","done","running","errored","replenish","err","doParallel","async","eachOf","doParallelLimit","doSeries","eachOfSeries","_asyncMap","eachfn","results","_filter","sort","_reject","cb","_createTester","check","getResult","iteratee","_","_findGetResult","_parallel","tasks","task","args","_concat","y","concat","_queue","worker","concurrency","payload","_insert","q","pos","started","idle","setImmediate","drain","unshift","saturated","_next","workers","removed","workersList","splice","empty","paused","kill","pause","resume","resumeCount","min","w","_console_fn","_times","mapper","_applyEach","fns","go","that","pop","ensureAsync","innerArgs","sync","previous_async","root","noConflict","_toString","toString","isArray","_isObject","k","hasOwnProperty","_setImmediate","_delay","setTimeout","nextTick","forEach","each","forEachSeries","eachSeries","forEachLimit","eachLimit","forEachOf","completed","iter","forEachOfSeries","iterate","forEachOfLimit","eachOfLimit","map","mapSeries","mapLimit","inject","foldl","reduce","foldr","reduceRight","reversed","reverse","transform","select","filter","selectLimit","filterLimit","selectSeries","filterSeries","reject","rejectLimit","rejectSeries","any","some","someLimit","all","every","everyLimit","detect","detectSeries","detectLimit","sortBy","comparator","left","right","criteria","auto","addListener","listeners","removeListener","idx","taskComplete","remainingTasks","slice","runningTasks","ready","requires","listener","taskCallback","dep","safeResults","val","rkey","retry","times","parseTimes","acc","parseInt","DEFAULT_TIMES","interval","DEFAULT_INTERVAL","wrappedTask","wrappedCallback","wrappedResults","retryAttempt","finalAttempt","seriesCallback","retryInterval","opts","attempts","series","waterfall","wrapIterator","next","parallel","parallelLimit","makeCallback","callArgs","concatSeries","whilst","test","doWhilst","calls","until","doUntil","during","truth","doDuring","queue","items","priorityQueue","_compareTasks","priority","_binarySearch","sequence","compare","beg","end","mid","cargo","dir","memoize","hasher","queues","memoized","unmemoized","unmemoize","timesSeries","timesLimit","seq","newargs","nextargs","compose","applyEach","applyEachSeries","forever","constant","values","wrapSync","asyncify","then","message","_process",17,"normalizeArray","parts","allowAboveRoot","up","last","xs","res","splitPathRe","splitPath","filename","exec","resolve","resolvedPath","resolvedAbsolute","path","cwd","TypeError","charAt","p","normalize","isAbsolute","trailingSlash","substr","paths","relative","from","to","trim","fromParts","toParts","samePartsLength","outputParts","sep","delimiter","dirname","basename","extname","str",18,"cleanUpNextTick","draining","currentQueue","queueIndex","drainQueue","timeout","run","clearTimeout","Item","fun","title","browser","env","argv","version","versions","on","once","off","removeAllListeners","emit","binding","chdir","umask",19,"RangeError","errors","mapDomain","string","regexSeparators","labels","encoded","ucs2decode","extra","output","counter","charCodeAt","ucs2encode","stringFromCharCode","basicToDigit","codePoint","base","digitToBasic","digit","flag","adapt","delta","numPoints","firstTime","floor","damp","baseMinusTMin","tMax","skew","decode","input","out","basic","j","oldi","baseMinusT","inputLength","initialN","bias","initialBias","lastIndexOf","maxInt","tMin","encode","handledCPCount","basicLength","m","currentValue","handledCPCountPlusOne","qMinusT","toUnicode","regexPunycode","toLowerCase","toASCII","regexNonASCII","freeExports","nodeType","freeModule","freeGlobal","punycode","overflow","not-basic","invalid-input","String","fromCharCode","ucs2",20,"prop","qs","eq","regexp","maxKeys","kstr","vstr","indexOf","decodeURIComponent",21,"stringifyPrimitive","isFinite","objectKeys","ks","encodeURIComponent",22,"parse","stringify","./decode","./encode",23,"Url","protocol","slashes","auth","host","port","hostname","hash","search","query","pathname","href","urlParse","url","parseQueryString","slashesDenoteHost","isObject","urlFormat","isString","urlResolve","urlResolveObject","resolveObject","arg","isNull","isNullOrUndefined","protocolPattern","portPattern","delims","unwise","autoEscape","nonHostChars","hostEndingChars","hostnameMaxLen","hostnamePartPattern","hostnamePartStart","unsafeProtocol","javascript","javascript:","hostlessProtocol","slashedProtocol","http","https","ftp","gopher","file","http:","https:","ftp:","gopher:","file:","querystring","proto","lowerProto","match","hostEnd","hec","atSign","parseHost","ipv6Hostname","hostparts","part","newpart","validParts","notHost","bit","domainArray","newOut","h","ae","esc","escape","qm","rel","relPath","shift","isSourceAbs","isRelAbs","mustEndAbs","removeAllDots","srcPath","psychotic","authInHost","hasTrailingSlash",24,"earcut","holeIndices","dim","hasHoles","outerLen","outerNode","linkedList","triangles","minX","minY","maxX","maxY","eliminateHoles","earcutLinked","clockwise","sum","insertNode","filterPoints","again","steiner","equals","area","prev","removeNode","ear","pass","indexCurve","stop","isEarHashed","isEar","cureLocalIntersections","splitEarcut","c","pointInTriangle","minTX","minTY","maxTX","maxTY","minZ","zOrder","maxZ","nextZ","z","prevZ","intersects","locallyInside","isValidDiagonal","splitPolygon","list","getLeftmost","compareX","eliminateHole","hole","findHoleBridge","hx","hy","qx","Infinity","tan","tanMin","abs","sortLinked","tail","numMerges","pSize","qSize","inSize","leftmost","ax","ay","bx","by","cx","cy","px","py","intersectsPolygon","middleInside","p1","p2","q1","q2","inside","a2","Node","b2","an","bp",25,"EE","context","EventEmitter","prefix","_events","event","exists","evt","available","ee","a1","a3","a4","a5","events","setMaxListeners","prefixed",26,"toObject","propIsEnumerable","propertyIsEnumerable","assign","target","symbols","getOwnPropertySymbols",27,"called","_each","_eachLimit","_mapLimit","_detect","main_callback","theCallback","working","drained","ts","ds",28,"Loader","baseUrl","progress","loading","_progressChunk","_beforeMiddleware","_afterMiddleware","_boundLoadResource","_loadResource","_boundOnLoad","_onLoad","_buffer","_numToLoad","resources","urlParser","Resource","add","enqueue","onComplete","_handleBaseUrl","parsedUrl","before","pre","after","use","reset","load","resource","dequeue","_dequeue","_runMiddleware","_onComplete","LOAD_TYPE","XHR_READY_STATE","XHR_RESPONSE_TYPE","./Resource","eventemitter3",29,"isDataUrl","crossOrigin","loadType","_determineLoadType","xhrType","metadata","xhr","isJson","isXml","isImage","isAudio","isVideo","_boundComplete","complete","_boundOnError","_onError","_boundOnProgress","_onProgress","_boundXhrOnError","_xhrOnError","_boundXhrOnAbort","_xhrOnAbort","_boundXhrOnLoad","_xhrOnLoad","_boundXdrOnTimeout","_xdrOnTimeout","reqType","setExtMap","substring","_url","useXdr","XDomainRequest","XMLHttpRequest","tempAnchor","removeEventListener","onerror","ontimeout","onprogress","onload","_determineCrossOrigin","IMAGE","_loadImage","AUDIO","_loadElement","VIDEO","XHR","_loadXdr","_loadXhr","Image","addEventListener","Audio","document","createElement","navigator","isCocoonJS","appendChild","_createSource","toUpperCase","_determineXhrType","open","JSON","DOCUMENT","responseType","TEXT","send","xdr","mime","nodeName","lengthComputable","loaded","total","status","statusText","responseText","DOMParser","domparser","parseFromString","div","innerHTML","response","responseURL","loc","samePort","_xhrTypeMap","_getExtension","_loadTypeMap","slashIndex","queryStart","_getMimeFromXhrType","BUFFER","BLOB","DEFAULT","UNSENT","OPENED","HEADERS_RECEIVED","LOADING","DONE","gif","png","bmp","jpg","jpeg","tif","tiff","webp","tga","xhtml","html","htm","xml","tmx","tsx","svg","json","text","txt","setExtensionLoadType","setExtensionXhrType",30,"_keyStr","encodeBinary","bytebuffer","encodedCharIndexes","inx","jnx","paddingBytes",31,"middleware","caching","memory","parsing","blob","./Loader","./middlewares/caching/memory","./middlewares/parsing/blob",32,"cache",33,"b64","URL","webkitURL","Blob","createObjectURL","revokeObjectURL","getResponseHeader","../../Resource","../../b64",34,"description","author","contributors","main","homepage","bugs","license","repository","scripts","build","docs","files","dependencies","brfs","object-assign","pixi-gl-core","resource-loader","devDependencies","browserify","chai","del","gulp","gulp-cached","gulp-concat","gulp-debug","gulp-header","gulp-jshint","gulp-mirror","gulp-plumber","gulp-rename","gulp-sourcemaps","gulp-uglify","gulp-util","jaguarjs-jsdoc","jsdoc","jshint-summary","minimist","mocha","require-dir","run-sequence","testem","vinyl-buffer","vinyl-source-stream","watchify",35,"AccessibilityManager","renderer","style","position","top","zIndex","pool","renderId","debug","children","_onKeyDown","_onMouseMove","isActive","core","DisplayObject","update","view","parentNode","deactivate","removeChild","updateAccessibleObjects","displayObject","visible","accessible","interactive","_accessibleActive","addChild","_lastObjectRendered","rect","getBoundingClientRect","sx","sy","child","utils","removeItems","_accessibleDiv","hitArea","wt","worldTransform","tx","ty","d","getBounds","capHitArea","backgroundColor","borderStyle","_onClick","_onFocus","_onFocusOut","accessibleTitle","tabIndex","interactionManager","plugins","interaction","dispatchEvent","eventData","keyCode","WebGLRenderer","registerPlugin","CanvasRenderer","../core","./accessibleTarget",36,"accessibleTarget",37,"./AccessibilityManager",38,"CONST","VERSION","PI_2","PI","RAD_TO_DEG","DEG_TO_RAD","TARGET_FPMS","RENDERER_TYPE","UNKNOWN","WEBGL","CANVAS","BLEND_MODES","NORMAL","ADD","MULTIPLY","SCREEN","OVERLAY","DARKEN","LIGHTEN","COLOR_DODGE","COLOR_BURN","HARD_LIGHT","SOFT_LIGHT","DIFFERENCE","EXCLUSION","HUE","SATURATION","COLOR","LUMINOSITY","DRAW_MODES","POINTS","LINES","LINE_LOOP","LINE_STRIP","TRIANGLES","TRIANGLE_STRIP","TRIANGLE_FAN","SCALE_MODES","RETINA_PREFIX","RESOLUTION","FILTER_RESOLUTION","DEFAULT_RENDER_OPTIONS","resolution","antialias","forceFXAA","autoResize","transparent","clearBeforeRender","preserveDrawingBuffer","roundPixels","SHAPES","POLY","RECT","CIRC","ELIP","RREC","SPRITE_BATCH_SIZE","../../package.json",39,"Container","math","RenderTexture","_tempMatrix","Matrix","defineProperties","scale","getLocalBounds","_width","_height","onChildrenChange","argumentsLength","parent","addChildAt","swapChildren","child2","index1","getChildIndex","index2","setChildIndex","currentIndex","getChildAt","removeChildAt","removeChildren","beginIndex","endIndex","begin","range","generateTexture","scaleMode","bounds","renderTexture","render","updateTransform","displayObjectUpdateTransform","dirtyTransform","containerUpdateTransform","_currentBounds","Rectangle","EMPTY","childBounds","childMaxX","childMaxY","childVisible","_bounds","containerGetBounds","matrixCache","IDENTITY","renderWebGL","worldAlpha","renderable","_mask","_filters","currentRenderer","flush","filterManager","pushFilter","maskManager","pushMask","_renderWebGL","popMask","popFilter","_renderCanvas","renderCanvas","alpha","destroyChildren","../math","../textures/RenderTexture","../utils","./DisplayObject",40,"Point","_position","CachePoint","pivot","_rotation","localTransform","filterArea","_sr","_cr","_tempDisplayObjectParent","doc","posiiton","scaleX","scaleY","rotation","sin","cos","worldVisible","mask","filters","pt","lt","matrix","toGlobal","toLocal","point","applyInverse","setParent","container","setTransform","skewX","skewY","pivotX","pivotY","../const",41,"Graphics","fillAlpha","lineWidth","lineColor","graphicsData","tint","_prevTint","blendMode","currentPath","_webGL","isMask","boundsPadding","_localBounds","glDirty","boundsDirty","cachedSpriteDirty","CanvasBuffer","CanvasGraphics","GraphicsData","tempPoint","clone","updateLocalBounds","lineStyle","color","lineAlpha","shape","points","Polygon","closed","drawShape","moveTo","lineTo","quadraticCurveTo","cpX","cpY","toX","toY","xa","ya","fromX","fromY","bezierCurveTo","cpX2","cpY2","dt","dt2","dt3","t2","t3","arcTo","x1","y1","x2","y2","radius","b1","mm","dd","cc","tt","k1","sqrt","k2","j1","j2","qy","startAngle","atan2","endAngle","arc","anticlockwise","sweep","segs","ceil","startX","startY","theta","theta2","cTheta","sTheta","segMinus","remainder","real","angle","beginFill","filling","fillColor","fill","endFill","drawRect","drawRoundedRect","RoundedRectangle","drawCircle","Circle","drawEllipse","Ellipse","drawPolygon","clearDirty","canvasBuffer","fromCanvas","baseTexture","translate","renderGraphics","setObjectRenderer","graphics","compositeOperation","blendModes","globalCompositeOperation","w0","w1","h0","h1","x3","y3","x4","y4","containsPoint","contains","padding","_webgl","../display/Container","../renderers/canvas/utils/CanvasBuffer","../renderers/canvas/utils/CanvasGraphics","../textures/Texture","./GraphicsData",42,"_lineTint","_fillTint",43,"GraphicsRenderer","ObjectRenderer","graphicsDataPool","primitiveShader","complexPrimitiveShader","maximumSimplePolySize","WebGLGraphicsData","PrimitiveShader","buildLine","buildPoly","buildComplexPoly","buildRectangle","buildRoundedRectangle","buildCircle","onContextChange","webGLData","updateGraphics","webGL","blendModeManager","setBlendMode","mode","bindShader","translationMatrix","toArray","hex2rgb","aVertexPosition","aColor","indices","drawCount","lastIndex","switchMode","canDrawUsingSimple","../../const","../../math","../../renderers/webgl/WebGLRenderer","../../renderers/webgl/utils/ObjectRenderer","../../utils","./WebGLGraphicsData","./shaders/PrimitiveShader","./utils/buildCircle","./utils/buildComplexPoly","./utils/buildLine","./utils/buildPoly","./utils/buildRectangle","./utils/buildRoundedRectangle",44,"glPoints","glIndices","Uint16Array","deleteBuffer",45,46,"circleData","totalSegs","seg","verts","vecPos","tempPoints","../../../utils","./buildLine",47,48,"firstPoint","lastPoint","midPointX","midPointY","p1x","p1y","p2x","p2y","p3x","p3y","perpx","perpy","perp2x","perp2y","perp3x","perp3y","c1","c2","denom","pdist","dist","indexCount","indexStart","../../../math",49,"vertPos",50,"rectData",51,"rrectData","recPoints","quadraticBezierCurve","getPt","n1","n2","perc","diff","xb","yb",52,"ticker","Sprite","ParticleContainer","SpriteRenderer","ParticleRenderer","Text","BaseTexture","VideoBaseTexture","TextureUvs","WebGLManager","ShaderManager","RenderTarget","AbstractFilter","FXAAFilter","SpriteMaskFilter","glCore","autoDetectRenderer","noWebGL","isWebGLSupported","./const","./display/Container","./display/DisplayObject","./graphics/Graphics","./graphics/GraphicsData","./graphics/webgl/GraphicsRenderer","./math","./particles/ParticleContainer","./particles/webgl/ParticleRenderer","./renderers/canvas/CanvasRenderer","./renderers/canvas/utils/CanvasBuffer","./renderers/canvas/utils/CanvasGraphics","./renderers/webgl/WebGLRenderer","./renderers/webgl/filters/AbstractFilter","./renderers/webgl/filters/FXAAFilter","./renderers/webgl/filters/SpriteMaskFilter","./renderers/webgl/managers/ShaderManager","./renderers/webgl/managers/WebGLManager","./renderers/webgl/shaders/Shader","./renderers/webgl/utils/ObjectRenderer","./renderers/webgl/utils/RenderTarget","./sprites/Sprite","./sprites/webgl/SpriteRenderer","./text/Text","./textures/BaseTexture","./textures/RenderTexture","./textures/Texture","./textures/TextureUvs","./textures/VideoBaseTexture","./ticker","./utils",53,"fromArray","transpose","newPos","rotate","tx1","append","d1","sr","cr","nsx","prepend","invert","copy","TEMP_MATRIX","./Point",54,55,"./Matrix","./shapes/Circle","./shapes/Ellipse","./shapes/Polygon","./shapes/Rectangle","./shapes/RoundedRectangle",56,"dx","dy","r2","./Rectangle",57,"normx","normy",58,"points_","il","xi","yi","xj","yj","intersect","../Point",59,60,61,"maxSize","properties","batchSize","maxBatchSize","_properties","_maxSize","_batchSize","_buffers","_bufferToUpdate","interactiveChildren","setProperties","uvs","particle","smallestChildIndex","bufferIndex","isRotated","positionX","positionY","finalWidth","finalHeight","globalAlpha","frame","anchor","childTransform","drawImage",62,"ParticleBuffer","dynamicPropertyFlags","vertSize","vertByteSize","dynamicProperties","staticProperties","property","staticStride","staticBuffer","staticData","dynamicStride","dynamicBuffer","dynamicData","initBuffers","dynamicOffset","DYNAMIC_DRAW","staticOffset","uploadDynamic","amount","uploadFunction","uploadStatic",63,"numIndices","tempMatrix","ParticleShader","shaderManager","uploadVertices","aPositionCoord","uploadPosition","aRotation","uploadRotation","aTextureCoord","uploadUvs","uploadAlpha","setShader","totalChildren","generateBuffers","currentRenderTarget","projectionMatrix","uniformMatrix3fv","_location","uniform1f","uAlpha","_texture","_glTextures","updateTexture","buffers","sprite","crop","_frame","spritePosition","spriteRotation","textureUvs","_uvs","x0","y0","spriteAlpha","./ParticleBuffer","./ParticleShader",64,"TextureShader","../../renderers/webgl/shaders/TextureShader",65,"SystemRenderer","system","sayHello","_backgroundColor","_backgroundColorRgba","_backgroundColorString","hex2string","removeView",66,"refresh","CanvasMaskManager","smoothProperty","imageSmoothingEnabled","webkitImageSmoothingEnabled","mozImageSmoothingEnabled","oImageSmoothingEnabled","msImageSmoothingEnabled","initPlugins","_mapBlendModes","pluginTarget","mixin","cacheParent","screencanvas","fillStyle","clearRect","fillRect","renderDisplayObject","destroyPlugins","tempContext","canUseNewCanvasBlendModes","../SystemRenderer","./utils/CanvasMaskManager",67,68,"updateGraphicsTint","beginPath","closePath","strokeStyle","stroke","strokeRect","kappa","ox","oy","xe","ye","xm","ym","rx","ry","maxRadius","renderGraphicsMask","tintR","tintG","tintB","../../../const",69,"maskData","save","cacheAlpha","clip","restore","./CanvasGraphics",70,"CanvasTinter","getTintedTexture","roundColor","stringColor","tintCache","tintMethod","convertTintToImage","tintImage","toDataURL","tintWithMultiply","tintWithOverlay","tintWithPerPixel","rgbValues","pixelData","getImageData","pixels","putImageData","step","cacheStepsPerColorChannel","rgb2hex","canUseMultiply",71,"TextureManager","_managedTextures","glTextures","getTexture","hasLoaded","glTexture","uid","destroyTexture","_skipRemove","removeAll",72,"handleContextLost","handleContextRestored","_contextOptions","premultipliedAlpha","MaskManager","stencilManager","StencilManager","FilterManager","BlendModeManager","_initContext","mapWebGLBlendModesToPixi","drawModes","mapWebGLDrawModesToPixi","_activeShader","_activeRenderTarget","_activeTextureLocation","_activeTexture","textureManager","disable","DEPTH_TEST","CULL_FACE","enable","BLEND","rootRenderTarget","bindRenderTarget","isContextLost","renderTarget","setFilterStack","filterStack","objectRenderer","setMaskStack","stencilMaskStack","preventDefault","destroyAll","./TextureManager","./filters/FXAAFilter","./managers/BlendModeManager","./managers/FilterManager","./managers/MaskManager","./managers/ShaderManager","./managers/StencilManager","./utils/ObjectRenderer","./utils/RenderTarget","./utils/mapWebGLBlendModesToPixi","./utils/mapWebGLDrawModesToPixi",73,"shaders","DefaultShader","defaultVertexSrc","defaultFragmentSrc","getShader","applyFilter","syncUniform","../shaders/TextureShader",74,"./AbstractFilter",75,"maskMatrix","otherMatrix","maskSprite","calculateMappedMatrix",76,"currentBlendMode","blendFunc","./WebGLManager",77,"texturePool","textureSize","currentFrame","Quad","quad","capFilterArea","getRenderTarget","setRenderTarget","filterData","previousFilterData","vertexBuffer","defaultShader","dimensions","vertices","returnRenderTarget","flipTexture","flopTexture","temp","inputTarget","outputTarget","syncUniforms","outputMatrix","mappedMatrix","ratio","translateScaleX","translateScaleY","offsetY","../utils/Quad","../utils/RenderTarget",78,"stencilStack","alphaMaskPool","AlphaMaskFilter","pushSpriteMask","pushStencilMask","popSpriteMask","popStencilMask","alphaMaskFilter","../filters/SpriteMaskFilter",79,"maxAttibs","stack","_currentId","currentShader","ComplexPrimitiveShader","setAttribs","../shaders/ComplexPrimitiveShader","../shaders/PrimitiveShader",80,"WebGLMaskManager","STENCIL_TEST","pushStencil","attachStencilBuffer","sms","bindGraphics","STENCIL_BUFFER_BIT","level","colorMask","stencilFunc","ALWAYS","stencilOp","KEEP","INVERT","EQUAL","DECR","INCR","popStencil",81,82,"./Shader",83,84,"textureCount","init","compile","cacheUniformLocations","cacheAttributeLocations","_glCompile","uniform1i","uniform2f","uniform3f","uniform4f","uniform1iv","uniform2iv","uniform3iv","uniform4iv","uniform1fv","uniform2fv","uniform3fv","uniform4fv","uniformMatrix2fv","uniformMatrix4fv","_array","initSampler2D","textureData","luminance","LUMINANCE","wrapS","wrapT",85,"customUniforms","customAttributes","uSampler",86,87,"../managers/WebGLManager",88,"colors","rect2",89,"StencilMaskStack","frameBuffer","stencilBuffer","projectionFrame","calculateProjection","viewport","pm","./StencilMaskStack",90,91,"ONE","ONE_MINUS_SRC_ALPHA","SRC_ALPHA","DST_ALPHA","DST_COLOR",92,93,"cachedTint","textureDirty","vertexDirty","vertexData","sign","_onTextureUpdate","caclulateVertices","valid","smoothingEnabled","tintedTexture","destroyBaseTexture","fromFrame","frameId","TextureCache","fromImage","imageId","crossorigin","../renderers/canvas/utils/CanvasTinter",94,"numVerts","positions","Uint32Array","createIndicesForQuads","groupCount","groups","textures","ids","blend","currentGroup","currentTexture","generateMultiTextureShader","MAX_TEXTUES","MAX_TEXTURE_IMAGE_UNITS","_shader","vao","aTextureId","nextTexture","_enabled","_id","uvs_uint32","currentBatchSize","subarray","group","sprites","../../renderers/webgl/shaders/_TextureShader","../../utils/createIndicesForQuads","./generateMultiTextureShader",95,"maxTextures","generateSampleSrc","fragTemplate","sampleValues","uSamplers",96,"_text","_style","fontPropertiesCache","fontPropertiesCanvas","fontPropertiesContext","updateText","dropShadowColor","font","align","strokeThickness","wordWrap","wordWrapWidth","dropShadow","dropShadowAngle","dropShadowDistance","dropShadowBlur","textBaseline","lineJoin","miterLimit","outputText","lines","lineWidths","maxLineWidth","fontProperties","determineFontProperties","measureText","lineHeight","fontSize","linePositionX","linePositionY","shadowColor","shadowBlur","xShadowOffset","yShadowOffset","ascent","fillText","strokeText","fontStyle","baseline","imagedata","line","descent","spaceLeft","words","wordWidth","wordWidthWithSpace","../sprites/Sprite",97,"realWidth","realHeight","isLoading","imageUrl","isPowerOfTwo","_active","loadSource","naturalWidth","naturalHeight","wasLoading","_sourceLoaded","scope","BaseTextureCache","_pixiId","dispose","updateSourceImage","newSrc","image","getResolutionOfUrl",98,"textureBuffer","_updateUvs","updateBase","currentBounds","cachedWt","realResolution","getImage","getBase64","getCanvas","webGLPixels","Uint8Array","readPixels","tempCanvas","canvasData","getPixels","getPixel","../renderers/webgl/managers/FilterManager","../renderers/webgl/utils/RenderTarget","./BaseTexture","./Texture",99,"noFrame","requiresUpdate","onBaseTextureUpdated","onBaseTextureLoaded","destroyBase","fromVideo","video","fromVideoUrl","videoUrl","fromUrl","addTextureToCache","removeTextureFromCache","./TextureUvs","./VideoBaseTexture",100,"xy0_uint32","xy1_uint32","xy2_uint32","xy3_uint32","baseFrame","tw","th",101,"readyState","HAVE_ENOUGH_DATA","HAVE_FUTURE_DATA","autoUpdate","_onUpdate","_onCanPlay","_onPlayStart","_onPlayStop","__loaded","createSource","requestAnimationFrame","videoWidth","videoHeight","play","videoSrc","fromUrls",102,"Ticker","_this","_tick","time","_requestId","_emitter","TICK","_maxElapsedMS","autoStart","deltaTime","elapsedMS","lastTime","speed","FPS","minFPS","fps","minFPMS","_requestIfNeeded","performance","now","_cancelIfNeeded","cancelAnimationFrame","_startIfPossible","addOnce","remove","currentTime",103,"shared","./Ticker",104,"totalIndices",105,"_uid","_saidHello","hex","rgb","pngHead","pngEnd","magenta","yellow","getNextPowerOfTwo","number","parseFloat","userAgent","contextOptions","WebGLRenderingContext","getContextAttributes","startIdx","removeCount","./pluginTarget",106,"__plugins","pluginName","ctor",107,"mesh","extras","SpriteBatch","ReferenceError","AssetLoader","Stage","DisplayObjectContainer","Strip","Mesh","Rope","MovieClip","TilingSprite","BitmapText","scaleModes","setTexture","setText","setStyle","setFrame","uuid","./core","./extras","./filters","./mesh",108,"textWidth","textHeight","_glyphs","_font","maxWidth","maxLineHeight","fonts","prevCharCode","chars","lastLineWidth","lastSpace","charCode","charData","kerning","xOffset","yOffset","xAdvance","lineAlignOffsets","alignOffset","lenChars","validate",109,"_textures","_durations","animationSpeed","loop","_currentTime","playing","totalFrames","gotoAndStop","frameNumber","gotoAndPlay","elapsed","lag","fromFrames","frames","fromImages","images",110,"tileScale","tilePosition","_canvasPattern","uFrame","uTransform","uPixelSize","tempUvs","tempWidth","tempHeight","modX","modY","createPattern","_tileScaleOffset","../core/renderers/canvas/utils/CanvasTinter",111,"_cacheAsBitmap","_originalRenderWebGL","_originalRenderCanvas","_originalUpdateTransform","_originalHitTest","_originalDestroy","_cachedSprite","cacheAsBitmap","_originalGetBounds","_originalContainsPoint","_renderCachedWebGL","_renderCachedCanvas","_cacheAsBitmapDestroy","_destroyCachedDisplayObject","_initCachedDisplayObject","cachedRenderTarget","_getCachedBounds","_initCachedDisplayObjectCanvas",112,"getChildByName",113,"getGlobalPosition",114,"./BitmapText","./MovieClip","./TilingSprite","./cacheAsBitmap","./getChildByName","./getGlobalPosition",115,"AsciiFilter","pixelSize","../../core",116,"BloomFilter","blurXFilter","BlurXFilter","blurYFilter","BlurYFilter","defaultFilter","blur","blurX","blurY","../blur/BlurXFilter","../blur/BlurYFilter",117,"BlurDirFilter","dirX","dirY","strength","passes",118,"BlurFilter","./BlurXFilter","./BlurYFilter",119,"flip","flop",120,121,"SmartBlurFilter",122,"ColorMatrixFilter","_loadMatrix","multiply","newMatrix","_multiply","_colorMatrix","brightness","greyscale","grayscale","blackAndWhite","hue","lumR","lumG","lumB","contrast","saturate","desaturate","negative","sepia","technicolor","polaroid","toBGR","kodachrome","browni","vintage","colorTone","desaturation","toned","lightColor","darkColor","lR","lG","lB","dR","dG","dB","night","intensity","predator","lsd",123,"ColorStepFilter",124,"ConvolutionFilter","texelSize",125,"CrossHatchFilter",126,"DisplacementFilter","mapSampler",127,"DotScreenFilter",128,"BlurYTintFilter",129,"DropShadowFilter","blurYTintFilter","_dirtyPosition","_angle","_distance","hideObject","distance","./BlurYTintFilter",130,"GrayFilter","gray",131,"InvertFilter","NoiseFilter","PixelateFilter","RGBSplitFilter","ShockwaveFilter","SepiaFilter","TiltShiftFilter","TiltShiftXFilter","TiltShiftYFilter","TwistFilter","./ascii/AsciiFilter","./bloom/BloomFilter","./blur/BlurDirFilter","./blur/BlurFilter","./blur/BlurXFilter","./blur/BlurYFilter","./blur/SmartBlurFilter","./color/ColorMatrixFilter","./color/ColorStepFilter","./convolution/ConvolutionFilter","./crosshatch/CrossHatchFilter","./displacement/DisplacementFilter","./dot/DotScreenFilter","./dropshadow/DropShadowFilter","./gray/GrayFilter","./invert/InvertFilter","./noise/NoiseFilter","./pixelate/PixelateFilter","./rgb/RGBSplitFilter","./sepia/SepiaFilter","./shockwave/ShockwaveFilter","./tiltshift/TiltShiftFilter","./tiltshift/TiltShiftXFilter","./tiltshift/TiltShiftYFilter","./twist/TwistFilter",132,133,"noise",134,135,"red","green","blue",136,137,"center","params",138,"TiltShiftAxisFilter","gradientBlur","innerHeight","texSize","innerWidth","updateDelta",139,"tiltShiftXFilter","tiltShiftYFilter","./TiltShiftXFilter","./TiltShiftYFilter",140,"./TiltShiftAxisFilter",141,142,143,"loaders","accessibility","loader","./accessibility","./deprecation","./interaction","./loaders","./polyfill",144,"InteractionData","originalEvent","getLocalPosition","globalPos",145,"InteractionManager","autoPreventDefault","interactionFrequency","mouse","stopped","stopPropagation","interactiveDataPool","interactionDOMElement","eventsAdded","onMouseUp","processMouseUp","onMouseDown","processMouseDown","onMouseMove","processMouseMove","onMouseOut","processMouseOverOut","onTouchStart","processTouchStart","onTouchEnd","processTouchEnd","onTouchMove","processTouchMove","currentCursorStyle","_tempPoint","setTargetElement","element","removeEvents","addEvents","msPointerEnabled","_deltaTime","didMove","cursor","processInteractive","eventString","mapPositionToPoint","hitTest","hit","interactiveParent","clientX","clientY","isRightButton","button","which","isDown","_over","buttonMode","defaultCursor","changedTouches","cLength","touchEvent","touchData","getTouchData","returnTouchData","_touchDown","identifier","globalX","globalY","./InteractionData","./interactiveTarget",146,"interactiveTarget","./InteractionManager",147,148,"info","getElementsByTagName","common","getAttribute","letters","textureRect","kernings","first","second","bitmapFont","xmlUrl","textureUrl","loadOptions","imageMetadata","../extras",149,"bitmapFontParser","spritesheetParser","textureParser","./bitmapFontParser","./loader","./spritesheetParser","./textureParser",150,"ResourceLoader","_pixiMiddleware","addPixiMiddleware",151,"route","meta","rotated","trimmed","spriteSourceSize","sourceSize",152,153,"drawMode","canvasPadding","TRIANGLE_MESH","tempPolygon","_renderCanvasTriangleMesh","_renderCanvasTriangles","_renderCanvasDrawTriangle","index0","textureSource","textureWidth","textureHeight","u0","u1","u2","v0","v1","v2","paddingX","paddingY","centerX","centerY","normX","normY","deltaA","deltaB","deltaC","deltaD","deltaE","deltaF","renderMeshFlat","updateFrame","rawX","rawY","ind0","ind1","ind2",154,"Plane","segmentsX","segmentsY","_ready","segmentsXSub","segmentsYSub","sizeX","sizeY","totalSub","xpos","ypos","value2","value3","value4","./Mesh",155,"factor","nextPoint","perpLength","num","perpX","perpY",156,"MeshRenderer","MeshShader","./Plane","./Rope","./webgl/MeshRenderer","./webgl/MeshShader",157,"_vertexBuffer","_initWebGL","meshShader","_uvBuffer","_indexBuffer","_colorBuffer","../Mesh",158,159,"isNaN",160,161,"./Math.sign","./Object.assign","./requestAnimationFrame",162,"Date","getTime","startTime","vendors","delay"],"mappings":"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E,EAAA,GAAAuE,EAAA,GAAAvE,EAAA,GAAAuE,EAAA,IAAAvE,EAAA,GAAAuE,EAAA,IACAwkB,EAAA,GAAA/oB,EAAA,GAAAuE,EAAA,GAAAvE,EAAA,GAAAuE,EAAA,GAAAvE,EAAA,GAAAuE,EAAA,IAAAvE,EAAA,GAAAuE,EAAA,IACAwkB,EAAA,GAAA/oB,EAAA,GAAAuE,EAAA,GAAAvE,EAAA,GAAAuE,EAAA,GAAAvE,EAAA,GAAAuE,EAAA,IAAAvE,EAAA,GAAAuE,EAAA,IAGAwkB,EAAA,GAAA/oB,EAAA,GAAAuE,EAAA,GAAAvE,EAAA,GAAAuE,EAAA,GAAAvE,EAAA,GAAAuE,EAAA,IAAAvE,EAAA,GAAAuE,EAAA,IACAwkB,EAAA,GAAA/oB,EAAA,GAAAuE,EAAA,GAAAvE,EAAA,GAAAuE,EAAA,GAAAvE,EAAA,GAAAuE,EAAA,IAAAvE,EAAA,GAAAuE,EAAA,IACAwkB,EAAA,GAAA/oB,EAAA,GAAAuE,EAAA,GAAAvE,EAAA,GAAAuE,EAAA,GAAAvE,EAAA,GAAAuE,EAAA,IAAAvE,EAAA,GAAAuE,EAAA,IACAwkB,EAAA,GAAA/oB,EAAA,GAAAuE,EAAA,GAAAvE,EAAA,GAAAuE,EAAA,GAAAvE,EAAA,GAAAuE,EAAA,IAAAvE,EAAA,GAAAuE,EAAA,IACAwkB,EAAA,GAAA/oB,EAAA,GAAAuE,EAAA,GAAAvE,EAAA,GAAAuE,EAAA,GAAAvE,EAAA,GAAAuE,EAAA,IAAAvE,EAAA,GAAAuE,EAAA,IAGAwkB,EAAA,IAAA/oB,EAAA,IAAAuE,EAAA,GAAAvE,EAAA,IAAAuE,EAAA,GAAAvE,EAAA,IAAAuE,EAAA,IAAAvE,EAAA,IAAAuE,EAAA,IACAwkB,EAAA,IAAA/oB,EAAA,IAAAuE,EAAA,GAAAvE,EAAA,IAAAuE,EAAA,GAAAvE,EAAA,IAAAuE,EAAA,IAAAvE,EAAA,IAAAuE,EAAA,IACAwkB,EAAA,IAAA/oB,EAAA,IAAAuE,EAAA,GAAAvE,EAAA,IAAAuE,EAAA,GAAAvE,EAAA,IAAAuE,EAAA,IAAAvE,EAAA,IAAAuE,EAAA,IACAwkB,EAAA,IAAA/oB,EAAA,IAAAuE,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","file":"pixi.min.js","sourcesContent":[null],"sourceRoot":"./"} \ No newline at end of file diff --git a/src/core/graphics/webgl/GraphicsRenderer.js b/src/core/graphics/webgl/GraphicsRenderer.js index 279525e..12d80c0 100644 --- a/src/core/graphics/webgl/GraphicsRenderer.js +++ b/src/core/graphics/webgl/GraphicsRenderer.js @@ -4,15 +4,15 @@ ObjectRenderer = require('../../renderers/webgl/utils/ObjectRenderer'), WebGLRenderer = require('../../renderers/webgl/WebGLRenderer'), WebGLGraphicsData = require('./WebGLGraphicsData'), - PrimitiveShader = require('./PrimitiveShader'), + PrimitiveShader = require('./shaders/PrimitiveShader'), // some drawing functions.. - buildLine = require('../buildLine'); - buildPoly = require('../buildPoly'); - buildComplexPoly = require('../buildComplexPoly'); - buildRectangle = require('../buildRectangle'); - buildRoundedRectangle = require('../buildRoundedRectangle'); - buildCircle = require('../buildCircle'); + buildLine = require('./utils/buildLine'); + buildPoly = require('./utils/buildPoly'); + buildComplexPoly = require('./utils/buildComplexPoly'); + buildRectangle = require('./utils/buildRectangle'); + buildRoundedRectangle = require('./utils/buildRoundedRectangle'); + buildCircle = require('./utils/buildCircle'); earcut = require('earcut'); diff --git a/src/core/graphics/webgl/PrimitiveShader.js b/src/core/graphics/webgl/PrimitiveShader.js deleted file mode 100644 index 44166b3..0000000 --- a/src/core/graphics/webgl/PrimitiveShader.js +++ /dev/null @@ -1,50 +0,0 @@ -var Shader = require('pixi-gl-core').GLShader; - -/** - * This shader is used to draw simple primitive shapes for {@link PIXI.Graphics}. - * - * @class - * @memberof PIXI - * @extends PIXI.Shader - * @param shaderManager {ShaderManager} The webgl shader manager this shader works for. - */ -function PrimitiveShader(gl) -{ - Shader.call(this, - gl, - // vertex shader - [ - 'attribute vec2 aVertexPosition;', - 'attribute vec4 aColor;', - - 'uniform mat3 translationMatrix;', - 'uniform mat3 projectionMatrix;', - - 'uniform float alpha;', - 'uniform float flipY;', - 'uniform vec3 tint;', - - 'varying vec4 vColor;', - - 'void main(void){', - ' gl_Position = vec4((projectionMatrix * translationMatrix * vec3(aVertexPosition, 1.0)).xy, 0.0, 1.0);', - ' vColor = aColor * vec4(tint * alpha, alpha);', - '}' - ].join('\n'), - // fragment shader - [ - 'precision mediump float;', - - 'varying vec4 vColor;', - - 'void main(void){', - ' gl_FragColor = vColor;', - '}' - ].join('\n') - ); -} - -PrimitiveShader.prototype = Object.create(Shader.prototype); -PrimitiveShader.prototype.constructor = PrimitiveShader; - -module.exports = PrimitiveShader; diff --git a/bin/pixi.js b/bin/pixi.js index b57ad10..40862ec 100644 --- a/bin/pixi.js +++ b/bin/pixi.js @@ -1,7 +1,7 @@ /** * @license * pixi.js - v3.0.10-dev - * Compiled 2016-01-17T18:07:22.522Z + * Compiled 2016-01-17T18:16:46.120Z * * pixi.js is licensed under the MIT License. * http://www.opensource.org/licenses/mit-license.php @@ -10864,15 +10864,15 @@ ObjectRenderer = require('../../renderers/webgl/utils/ObjectRenderer'), WebGLRenderer = require('../../renderers/webgl/WebGLRenderer'), WebGLGraphicsData = require('./WebGLGraphicsData'), - PrimitiveShader = require('./PrimitiveShader'), + PrimitiveShader = require('./shaders/PrimitiveShader'), // some drawing functions.. - buildLine = require('./buildLine'); - buildPoly = require('./buildPoly'); - buildComplexPoly = require('./buildComplexPoly'); - buildRectangle = require('./buildRectangle'); - buildRoundedRectangle = require('./buildRoundedRectangle'); - buildCircle = require('./buildCircle'); + buildLine = require('./utils/buildLine'); + buildPoly = require('./utils/buildPoly'); + buildComplexPoly = require('./utils/buildComplexPoly'); + buildRectangle = require('./utils/buildRectangle'); + buildRoundedRectangle = require('./utils/buildRoundedRectangle'); + buildCircle = require('./utils/buildCircle'); earcut = require('earcut'); @@ -11177,59 +11177,7 @@ }; -},{"../../const":38,"../../math":55,"../../renderers/webgl/WebGLRenderer":72,"../../renderers/webgl/utils/ObjectRenderer":87,"../../utils":105,"./PrimitiveShader":44,"./WebGLGraphicsData":45,"./buildCircle":46,"./buildComplexPoly":47,"./buildLine":48,"./buildPoly":49,"./buildRectangle":50,"./buildRoundedRectangle":51,"earcut":24}],44:[function(require,module,exports){ -var Shader = require('pixi-gl-core').GLShader; - -/** - * This shader is used to draw simple primitive shapes for {@link PIXI.Graphics}. - * - * @class - * @memberof PIXI - * @extends PIXI.Shader - * @param shaderManager {ShaderManager} The webgl shader manager this shader works for. - */ -function PrimitiveShader(gl) -{ - Shader.call(this, - gl, - // vertex shader - [ - 'attribute vec2 aVertexPosition;', - 'attribute vec4 aColor;', - - 'uniform mat3 translationMatrix;', - 'uniform mat3 projectionMatrix;', - - 'uniform float alpha;', - 'uniform float flipY;', - 'uniform vec3 tint;', - - 'varying vec4 vColor;', - - 'void main(void){', - ' gl_Position = vec4((projectionMatrix * translationMatrix * vec3(aVertexPosition, 1.0)).xy, 0.0, 1.0);', - ' vColor = aColor * vec4(tint * alpha, alpha);', - '}' - ].join('\n'), - // fragment shader - [ - 'precision mediump float;', - - 'varying vec4 vColor;', - - 'void main(void){', - ' gl_FragColor = vColor;', - '}' - ].join('\n') - ); -} - -PrimitiveShader.prototype = Object.create(Shader.prototype); -PrimitiveShader.prototype.constructor = PrimitiveShader; - -module.exports = PrimitiveShader; - -},{"pixi-gl-core":1}],45:[function(require,module,exports){ +},{"../../const":38,"../../math":55,"../../renderers/webgl/WebGLRenderer":72,"../../renderers/webgl/utils/ObjectRenderer":87,"../../utils":105,"./WebGLGraphicsData":44,"./shaders/PrimitiveShader":45,"./utils/buildCircle":46,"./utils/buildComplexPoly":47,"./utils/buildLine":48,"./utils/buildPoly":49,"./utils/buildRectangle":50,"./utils/buildRoundedRectangle":51,"earcut":24}],44:[function(require,module,exports){ /** * An object containing WebGL specific properties to be used by the WebGL renderer * @@ -11347,9 +11295,61 @@ this.glIndices = null; }; -},{}],46:[function(require,module,exports){ +},{}],45:[function(require,module,exports){ +var Shader = require('pixi-gl-core').GLShader; + +/** + * This shader is used to draw simple primitive shapes for {@link PIXI.Graphics}. + * + * @class + * @memberof PIXI + * @extends PIXI.Shader + * @param shaderManager {ShaderManager} The webgl shader manager this shader works for. + */ +function PrimitiveShader(gl) +{ + Shader.call(this, + gl, + // vertex shader + [ + 'attribute vec2 aVertexPosition;', + 'attribute vec4 aColor;', + + 'uniform mat3 translationMatrix;', + 'uniform mat3 projectionMatrix;', + + 'uniform float alpha;', + 'uniform float flipY;', + 'uniform vec3 tint;', + + 'varying vec4 vColor;', + + 'void main(void){', + ' gl_Position = vec4((projectionMatrix * translationMatrix * vec3(aVertexPosition, 1.0)).xy, 0.0, 1.0);', + ' vColor = aColor * vec4(tint * alpha, alpha);', + '}' + ].join('\n'), + // fragment shader + [ + 'precision mediump float;', + + 'varying vec4 vColor;', + + 'void main(void){', + ' gl_FragColor = vColor;', + '}' + ].join('\n') + ); +} + +PrimitiveShader.prototype = Object.create(Shader.prototype); +PrimitiveShader.prototype.constructor = PrimitiveShader; + +module.exports = PrimitiveShader; + +},{"pixi-gl-core":1}],46:[function(require,module,exports){ var buildLine = require('./buildLine'), - utils = require('../../utils'); + utils = require('../../../utils'); /** * Builds a circle to draw @@ -11426,7 +11426,7 @@ y + Math.cos(seg * i) * height); } - this.buildLine(graphicsData, webGLData); + buildLine(graphicsData, webGLData); graphicsData.points = tempPoints; } @@ -11434,9 +11434,9 @@ module.exports = buildCircle; -},{"../../utils":105,"./buildLine":48}],47:[function(require,module,exports){ +},{"../../../utils":105,"./buildLine":48}],47:[function(require,module,exports){ var buildLine = require('./buildLine'), - utils = require('../../utils'); + utils = require('../../../utils'); @@ -11505,9 +11505,9 @@ module.exports = buildComplexPoly; -},{"../../utils":105,"./buildLine":48}],48:[function(require,module,exports){ -var math = require('../../math'), - utils = require('../../utils'); +},{"../../../utils":105,"./buildLine":48}],48:[function(require,module,exports){ +var math = require('../../../math'), + utils = require('../../../utils'); /** * Builds a line to draw @@ -11725,8 +11725,8 @@ }; module.exports = buildLine; -},{"../../math":55,"../../utils":105}],49:[function(require,module,exports){ -var utils = require('../../utils'); +},{"../../../math":55,"../../../utils":105}],49:[function(require,module,exports){ +var utils = require('../../../utils'); /** * Builds a polygon to draw @@ -11788,9 +11788,9 @@ module.exports = buildPoly; -},{"../../utils":105}],50:[function(require,module,exports){ +},{"../../../utils":105}],50:[function(require,module,exports){ var buildLine = require('./buildLine'), - utils = require('../../utils'); + utils = require('../../../utils'); /** * Builds a rectangle to draw @@ -11859,9 +11859,9 @@ }; module.exports = buildRectangle; -},{"../../utils":105,"./buildLine":48}],51:[function(require,module,exports){ +},{"../../../utils":105,"./buildLine":48}],51:[function(require,module,exports){ var buildLine = require('./buildLine'), - utils = require('../../utils'); + utils = require('../../../utils'); /** * Builds a rounded rectangle to draw @@ -11987,7 +11987,7 @@ module.exports = buildRoundedRectangle; -},{"../../utils":105,"./buildLine":48}],52:[function(require,module,exports){ +},{"../../../utils":105,"./buildLine":48}],52:[function(require,module,exports){ /** * @file Main export of the PIXI core library * @author Mat Groves @@ -30075,6 +30075,6 @@ },{}]},{},[143])(143) }); -//# sourceMappingURL=data:application/json;charset:utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIm5vZGVfbW9kdWxlcy9icm93c2VyaWZ5L25vZGVfbW9kdWxlcy9icm93c2VyLXBhY2svX3ByZWx1ZGUuanMiLCIuLi9waXhpLWdsLWNvcmUvaW5kZXguanMiLCIuLi9waXhpLWdsLWNvcmUvbGliL0dMQnVmZmVyLmpzIiwiLi4vcGl4aS1nbC1jb3JlL2xpYi9HTEZyYW1lYnVmZmVyLmpzIiwiLi4vcGl4aS1nbC1jb3JlL2xpYi9HTFNoYWRlci5qcyIsIi4uL3BpeGktZ2wtY29yZS9saWIvR0xUZXh0dXJlLmpzIiwiLi4vcGl4aS1nbC1jb3JlL2xpYi9WZXJ0ZXhBcnJheU9iamVjdC5qcyIsIi4uL3BpeGktZ2wtY29yZS9saWIvY3JlYXRlQ29udGV4dC5qcyIsIi4uL3BpeGktZ2wtY29yZS9saWIvc2V0VmVydGV4QXR0cmliQXJyYXlzLmpzIiwiLi4vcGl4aS1nbC1jb3JlL2xpYi9zaGFkZXIvY29tcGlsZVByb2dyYW0uanMiLCIuLi9waXhpLWdsLWNvcmUvbGliL3NoYWRlci9kZWZhdWx0VmFsdWUuanMiLCIuLi9waXhpLWdsLWNvcmUvbGliL3NoYWRlci9leHRyYWN0QXR0cmlidXRlcy5qcyIsIi4uL3BpeGktZ2wtY29yZS9saWIvc2hhZGVyL2V4dHJhY3RVbmlmb3Jtcy5qcyIsIi4uL3BpeGktZ2wtY29yZS9saWIvc2hhZGVyL2dlbmVyYXRlVW5pZm9ybUFjY2Vzc09iamVjdC5qcyIsIi4uL3BpeGktZ2wtY29yZS9saWIvc2hhZGVyL21hcFNpemUuanMiLCIuLi9waXhpLWdsLWNvcmUvbGliL3NoYWRlci9tYXBUeXBlLmpzIiwibm9kZV9tb2R1bGVzL2FzeW5jL2xpYi9hc3luYy5qcyIsIm5vZGVfbW9kdWxlcy9icm93c2VyaWZ5L25vZGVfbW9kdWxlcy9wYXRoLWJyb3dzZXJpZnkvaW5kZXguanMiLCJub2RlX21vZHVsZXMvYnJvd3NlcmlmeS9ub2RlX21vZHVsZXMvcHJvY2Vzcy9icm93c2VyLmpzIiwibm9kZV9tb2R1bGVzL2Jyb3dzZXJpZnkvbm9kZV9tb2R1bGVzL3B1bnljb2RlL3B1bnljb2RlLmpzIiwibm9kZV9tb2R1bGVzL2Jyb3dzZXJpZnkvbm9kZV9tb2R1bGVzL3F1ZXJ5c3RyaW5nLWVzMy9kZWNvZGUuanMiLCJub2RlX21vZHVsZXMvYnJvd3NlcmlmeS9ub2RlX21vZHVsZXMvcXVlcnlzdHJpbmctZXMzL2VuY29kZS5qcyIsIm5vZGVfbW9kdWxlcy9icm93c2VyaWZ5L25vZGVfbW9kdWxlcy9xdWVyeXN0cmluZy1lczMvaW5kZXguanMiLCJub2RlX21vZHVsZXMvYnJvd3NlcmlmeS9ub2RlX21vZHVsZXMvdXJsL3VybC5qcyIsIm5vZGVfbW9kdWxlcy9lYXJjdXQvc3JjL2VhcmN1dC5qcyIsIm5vZGVfbW9kdWxlcy9ldmVudGVtaXR0ZXIzL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL29iamVjdC1hc3NpZ24vaW5kZXguanMiLCJub2RlX21vZHVsZXMvcmVzb3VyY2UtbG9hZGVyL25vZGVfbW9kdWxlcy9hc3luYy9saWIvYXN5bmMuanMiLCJub2RlX21vZHVsZXMvcmVzb3VyY2UtbG9hZGVyL3NyYy9Mb2FkZXIuanMiLCJub2RlX21vZHVsZXMvcmVzb3VyY2UtbG9hZGVyL3NyYy9SZXNvdXJjZS5qcyIsIm5vZGVfbW9kdWxlcy9yZXNvdXJjZS1sb2FkZXIvc3JjL2I2NC5qcyIsIm5vZGVfbW9kdWxlcy9yZXNvdXJjZS1sb2FkZXIvc3JjL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL3Jlc291cmNlLWxvYWRlci9zcmMvbWlkZGxld2FyZXMvY2FjaGluZy9tZW1vcnkuanMiLCJub2RlX21vZHVsZXMvcmVzb3VyY2UtbG9hZGVyL3NyYy9taWRkbGV3YXJlcy9wYXJzaW5nL2Jsb2IuanMiLCJwYWNrYWdlLmpzb24iLCJzcmMvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5TWFuYWdlci5qcyIsInNyYy9hY2Nlc3NpYmlsaXR5L2FjY2Vzc2libGVUYXJnZXQuanMiLCJzcmMvYWNjZXNzaWJpbGl0eS9pbmRleC5qcyIsInNyYy9jb3JlL2NvbnN0LmpzIiwic3JjL2NvcmUvZGlzcGxheS9Db250YWluZXIuanMiLCJzcmMvY29yZS9kaXNwbGF5L0Rpc3BsYXlPYmplY3QuanMiLCJzcmMvY29yZS9ncmFwaGljcy9HcmFwaGljcy5qcyIsInNyYy9jb3JlL2dyYXBoaWNzL0dyYXBoaWNzRGF0YS5qcyIsInNyYy9jb3JlL2dyYXBoaWNzL3dlYmdsL0dyYXBoaWNzUmVuZGVyZXIuanMiLCJzcmMvY29yZS9ncmFwaGljcy93ZWJnbC9QcmltaXRpdmVTaGFkZXIuanMiLCJzcmMvY29yZS9ncmFwaGljcy93ZWJnbC9XZWJHTEdyYXBoaWNzRGF0YS5qcyIsInNyYy9jb3JlL2dyYXBoaWNzL3dlYmdsL2J1aWxkQ2lyY2xlLmpzIiwic3JjL2NvcmUvZ3JhcGhpY3Mvd2ViZ2wvYnVpbGRDb21wbGV4UG9seS5qcyIsInNyYy9jb3JlL2dyYXBoaWNzL3dlYmdsL2J1aWxkTGluZS5qcyIsInNyYy9jb3JlL2dyYXBoaWNzL3dlYmdsL2J1aWxkUG9seS5qcyIsInNyYy9jb3JlL2dyYXBoaWNzL3dlYmdsL2J1aWxkUmVjdGFuZ2xlLmpzIiwic3JjL2NvcmUvZ3JhcGhpY3Mvd2ViZ2wvYnVpbGRSb3VuZGVkUmVjdGFuZ2xlLmpzIiwic3JjL2NvcmUvaW5kZXguanMiLCJzcmMvY29yZS9tYXRoL01hdHJpeC5qcyIsInNyYy9jb3JlL21hdGgvUG9pbnQuanMiLCJzcmMvY29yZS9tYXRoL2luZGV4LmpzIiwic3JjL2NvcmUvbWF0aC9zaGFwZXMvQ2lyY2xlLmpzIiwic3JjL2NvcmUvbWF0aC9zaGFwZXMvRWxsaXBzZS5qcyIsInNyYy9jb3JlL21hdGgvc2hhcGVzL1BvbHlnb24uanMiLCJzcmMvY29yZS9tYXRoL3NoYXBlcy9SZWN0YW5nbGUuanMiLCJzcmMvY29yZS9tYXRoL3NoYXBlcy9Sb3VuZGVkUmVjdGFuZ2xlLmpzIiwic3JjL2NvcmUvcGFydGljbGVzL1BhcnRpY2xlQ29udGFpbmVyLmpzIiwic3JjL2NvcmUvcGFydGljbGVzL3dlYmdsL1BhcnRpY2xlQnVmZmVyLmpzIiwic3JjL2NvcmUvcGFydGljbGVzL3dlYmdsL1BhcnRpY2xlUmVuZGVyZXIuanMiLCJzcmMvY29yZS9wYXJ0aWNsZXMvd2ViZ2wvUGFydGljbGVTaGFkZXIuanMiLCJzcmMvY29yZS9yZW5kZXJlcnMvU3lzdGVtUmVuZGVyZXIuanMiLCJzcmMvY29yZS9yZW5kZXJlcnMvY2FudmFzL0NhbnZhc1JlbmRlcmVyLmpzIiwic3JjL2NvcmUvcmVuZGVyZXJzL2NhbnZhcy91dGlscy9DYW52YXNCdWZmZXIuanMiLCJzcmMvY29yZS9yZW5kZXJlcnMvY2FudmFzL3V0aWxzL0NhbnZhc0dyYXBoaWNzLmpzIiwic3JjL2NvcmUvcmVuZGVyZXJzL2NhbnZhcy91dGlscy9DYW52YXNNYXNrTWFuYWdlci5qcyIsInNyYy9jb3JlL3JlbmRlcmVycy9jYW52YXMvdXRpbHMvQ2FudmFzVGludGVyLmpzIiwic3JjL2NvcmUvcmVuZGVyZXJzL3dlYmdsL1RleHR1cmVNYW5hZ2VyLmpzIiwic3JjL2NvcmUvcmVuZGVyZXJzL3dlYmdsL1dlYkdMUmVuZGVyZXIuanMiLCJzcmMvY29yZS9yZW5kZXJlcnMvd2ViZ2wvZmlsdGVycy9BYnN0cmFjdEZpbHRlci5qcyIsInNyYy9jb3JlL3JlbmRlcmVycy93ZWJnbC9maWx0ZXJzL0ZYQUFGaWx0ZXIuanMiLCJzcmMvY29yZS9yZW5kZXJlcnMvd2ViZ2wvZmlsdGVycy9TcHJpdGVNYXNrRmlsdGVyLmpzIiwic3JjL2NvcmUvcmVuZGVyZXJzL3dlYmdsL21hbmFnZXJzL0JsZW5kTW9kZU1hbmFnZXIuanMiLCJzcmMvY29yZS9yZW5kZXJlcnMvd2ViZ2wvbWFuYWdlcnMvRmlsdGVyTWFuYWdlci5qcyIsInNyYy9jb3JlL3JlbmRlcmVycy93ZWJnbC9tYW5hZ2Vycy9NYXNrTWFuYWdlci5qcyIsInNyYy9jb3JlL3JlbmRlcmVycy93ZWJnbC9tYW5hZ2Vycy9TaGFkZXJNYW5hZ2VyLmpzIiwic3JjL2NvcmUvcmVuZGVyZXJzL3dlYmdsL21hbmFnZXJzL1N0ZW5jaWxNYW5hZ2VyLmpzIiwic3JjL2NvcmUvcmVuZGVyZXJzL3dlYmdsL21hbmFnZXJzL1dlYkdMTWFuYWdlci5qcyIsInNyYy9jb3JlL3JlbmRlcmVycy93ZWJnbC9zaGFkZXJzL0NvbXBsZXhQcmltaXRpdmVTaGFkZXIuanMiLCJzcmMvY29yZS9yZW5kZXJlcnMvd2ViZ2wvc2hhZGVycy9QcmltaXRpdmVTaGFkZXIuanMiLCJzcmMvY29yZS9yZW5kZXJlcnMvd2ViZ2wvc2hhZGVycy9TaGFkZXIuanMiLCJzcmMvY29yZS9yZW5kZXJlcnMvd2ViZ2wvc2hhZGVycy9UZXh0dXJlU2hhZGVyLmpzIiwic3JjL2NvcmUvcmVuZGVyZXJzL3dlYmdsL3NoYWRlcnMvX1RleHR1cmVTaGFkZXIuanMiLCJzcmMvY29yZS9yZW5kZXJlcnMvd2ViZ2wvdXRpbHMvT2JqZWN0UmVuZGVyZXIuanMiLCJzcmMvY29yZS9yZW5kZXJlcnMvd2ViZ2wvdXRpbHMvUXVhZC5qcyIsInNyYy9jb3JlL3JlbmRlcmVycy93ZWJnbC91dGlscy9SZW5kZXJUYXJnZXQuanMiLCJzcmMvY29yZS9yZW5kZXJlcnMvd2ViZ2wvdXRpbHMvU3RlbmNpbE1hc2tTdGFjay5qcyIsInNyYy9jb3JlL3JlbmRlcmVycy93ZWJnbC91dGlscy9tYXBXZWJHTEJsZW5kTW9kZXNUb1BpeGkuanMiLCJzcmMvY29yZS9yZW5kZXJlcnMvd2ViZ2wvdXRpbHMvbWFwV2ViR0xEcmF3TW9kZXNUb1BpeGkuanMiLCJzcmMvY29yZS9zcHJpdGVzL1Nwcml0ZS5qcyIsInNyYy9jb3JlL3Nwcml0ZXMvd2ViZ2wvU3ByaXRlUmVuZGVyZXIuanMiLCJzcmMvY29yZS9zcHJpdGVzL3dlYmdsL2dlbmVyYXRlTXVsdGlUZXh0dXJlU2hhZGVyLmpzIiwic3JjL2NvcmUvdGV4dC9UZXh0LmpzIiwic3JjL2NvcmUvdGV4dHVyZXMvQmFzZVRleHR1cmUuanMiLCJzcmMvY29yZS90ZXh0dXJlcy9SZW5kZXJUZXh0dXJlLmpzIiwic3JjL2NvcmUvdGV4dHVyZXMvVGV4dHVyZS5qcyIsInNyYy9jb3JlL3RleHR1cmVzL1RleHR1cmVVdnMuanMiLCJzcmMvY29yZS90ZXh0dXJlcy9WaWRlb0Jhc2VUZXh0dXJlLmpzIiwic3JjL2NvcmUvdGlja2VyL1RpY2tlci5qcyIsInNyYy9jb3JlL3RpY2tlci9pbmRleC5qcyIsInNyYy9jb3JlL3V0aWxzL2NyZWF0ZUluZGljZXNGb3JRdWFkcy5qcyIsInNyYy9jb3JlL3V0aWxzL2luZGV4LmpzIiwic3JjL2NvcmUvdXRpbHMvcGx1Z2luVGFyZ2V0LmpzIiwic3JjL2RlcHJlY2F0aW9uLmpzIiwic3JjL2V4dHJhcy9CaXRtYXBUZXh0LmpzIiwic3JjL2V4dHJhcy9Nb3ZpZUNsaXAuanMiLCJzcmMvZXh0cmFzL1RpbGluZ1Nwcml0ZS5qcyIsInNyYy9leHRyYXMvY2FjaGVBc0JpdG1hcC5qcyIsInNyYy9leHRyYXMvZ2V0Q2hpbGRCeU5hbWUuanMiLCJzcmMvZXh0cmFzL2dldEdsb2JhbFBvc2l0aW9uLmpzIiwic3JjL2V4dHJhcy9pbmRleC5qcyIsInNyYy9maWx0ZXJzL2FzY2lpL0FzY2lpRmlsdGVyLmpzIiwic3JjL2ZpbHRlcnMvYmxvb20vQmxvb21GaWx0ZXIuanMiLCJzcmMvZmlsdGVycy9ibHVyL0JsdXJEaXJGaWx0ZXIuanMiLCJzcmMvZmlsdGVycy9ibHVyL0JsdXJGaWx0ZXIuanMiLCJzcmMvZmlsdGVycy9ibHVyL0JsdXJYRmlsdGVyLmpzIiwic3JjL2ZpbHRlcnMvYmx1ci9CbHVyWUZpbHRlci5qcyIsInNyYy9maWx0ZXJzL2JsdXIvU21hcnRCbHVyRmlsdGVyLmpzIiwic3JjL2ZpbHRlcnMvY29sb3IvQ29sb3JNYXRyaXhGaWx0ZXIuanMiLCJzcmMvZmlsdGVycy9jb2xvci9Db2xvclN0ZXBGaWx0ZXIuanMiLCJzcmMvZmlsdGVycy9jb252b2x1dGlvbi9Db252b2x1dGlvbkZpbHRlci5qcyIsInNyYy9maWx0ZXJzL2Nyb3NzaGF0Y2gvQ3Jvc3NIYXRjaEZpbHRlci5qcyIsInNyYy9maWx0ZXJzL2Rpc3BsYWNlbWVudC9EaXNwbGFjZW1lbnRGaWx0ZXIuanMiLCJzcmMvZmlsdGVycy9kb3QvRG90U2NyZWVuRmlsdGVyLmpzIiwic3JjL2ZpbHRlcnMvZHJvcHNoYWRvdy9CbHVyWVRpbnRGaWx0ZXIuanMiLCJzcmMvZmlsdGVycy9kcm9wc2hhZG93L0Ryb3BTaGFkb3dGaWx0ZXIuanMiLCJzcmMvZmlsdGVycy9ncmF5L0dyYXlGaWx0ZXIuanMiLCJzcmMvZmlsdGVycy9pbmRleC5qcyIsInNyYy9maWx0ZXJzL2ludmVydC9JbnZlcnRGaWx0ZXIuanMiLCJzcmMvZmlsdGVycy9ub2lzZS9Ob2lzZUZpbHRlci5qcyIsInNyYy9maWx0ZXJzL3BpeGVsYXRlL1BpeGVsYXRlRmlsdGVyLmpzIiwic3JjL2ZpbHRlcnMvcmdiL1JHQlNwbGl0RmlsdGVyLmpzIiwic3JjL2ZpbHRlcnMvc2VwaWEvU2VwaWFGaWx0ZXIuanMiLCJzcmMvZmlsdGVycy9zaG9ja3dhdmUvU2hvY2t3YXZlRmlsdGVyLmpzIiwic3JjL2ZpbHRlcnMvdGlsdHNoaWZ0L1RpbHRTaGlmdEF4aXNGaWx0ZXIuanMiLCJzcmMvZmlsdGVycy90aWx0c2hpZnQvVGlsdFNoaWZ0RmlsdGVyLmpzIiwic3JjL2ZpbHRlcnMvdGlsdHNoaWZ0L1RpbHRTaGlmdFhGaWx0ZXIuanMiLCJzcmMvZmlsdGVycy90aWx0c2hpZnQvVGlsdFNoaWZ0WUZpbHRlci5qcyIsInNyYy9maWx0ZXJzL3R3aXN0L1R3aXN0RmlsdGVyLmpzIiwic3JjL3NyYy9pbmRleC5qcyIsInNyYy9pbnRlcmFjdGlvbi9JbnRlcmFjdGlvbkRhdGEuanMiLCJzcmMvaW50ZXJhY3Rpb24vSW50ZXJhY3Rpb25NYW5hZ2VyLmpzIiwic3JjL2ludGVyYWN0aW9uL2luZGV4LmpzIiwic3JjL2ludGVyYWN0aW9uL2ludGVyYWN0aXZlVGFyZ2V0LmpzIiwic3JjL2xvYWRlcnMvYml0bWFwRm9udFBhcnNlci5qcyIsInNyYy9sb2FkZXJzL2luZGV4LmpzIiwic3JjL2xvYWRlcnMvbG9hZGVyLmpzIiwic3JjL2xvYWRlcnMvc3ByaXRlc2hlZXRQYXJzZXIuanMiLCJzcmMvbG9hZGVycy90ZXh0dXJlUGFyc2VyLmpzIiwic3JjL21lc2gvTWVzaC5qcyIsInNyYy9tZXNoL1BsYW5lLmpzIiwic3JjL21lc2gvUm9wZS5qcyIsInNyYy9tZXNoL2luZGV4LmpzIiwic3JjL21lc2gvd2ViZ2wvTWVzaFJlbmRlcmVyLmpzIiwic3JjL21lc2gvd2ViZ2wvTWVzaFNoYWRlci5qcyIsInNyYy9wb2x5ZmlsbC9NYXRoLnNpZ24uanMiLCJzcmMvcG9seWZpbGwvT2JqZWN0LmFzc2lnbi5qcyIsInNyYy9wb2x5ZmlsbC9pbmRleC5qcyIsInNyYy9wb2x5ZmlsbC9yZXF1ZXN0QW5pbWF0aW9uRnJhbWUuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUNBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbklBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDeENBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdk1BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNqSEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDOUJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3REQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN6REE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2xDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDN0JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0SUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2hDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUM5Q0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7O0FDNXVDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7QUNoT0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FDM0ZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7OztBQ3JoQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDcEZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDckZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDSkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ25zQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdGtCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3RRQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FDdkNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7QUNubUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3hjQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDaHlCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2hFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNaQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDcEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDMURBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMxRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuWkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzVDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzdOQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNyb0JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3ZtQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdG9DQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzNGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM5VEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2xEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDcEhBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDckZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3JFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDMU5BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDN0RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3JFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM5SEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDN0ZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3RiQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDcEVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNwQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3RGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM3RkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3JHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNUZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzFGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDN1RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMxTkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDMWRBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDblFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMxUUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2xHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2hXQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM1REE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMxUEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDMUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMzWUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzlHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDckRBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMvRkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDMUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2xjQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDakhBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3hLQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDN1dBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3ZDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM1REE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM3REE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM5Z0JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDN0dBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDL0VBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN4REE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDekpBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDalNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDL0JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3ptQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3ZXQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzdEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzNtQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbmJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzdkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3hhQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQy9FQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzNPQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDaldBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3REQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQy9CQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDblJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNwRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM3VkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2xZQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM5VEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbGNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzlRQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzVCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzVCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ25CQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3ZEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzVJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM1R0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMzRkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDcEZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNUJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3RoQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQy9DQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDekZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3hCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2xGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3RFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDekZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMvTEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQy9DQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3JDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNoREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3JEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2pEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNwRkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDaERBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0RkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDM0hBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzVHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNwQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDcENBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FDbkZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7QUM1QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQy9DQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzEyQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQy9DQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdkhBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbkJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzVEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2xGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDcEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzFkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzVIQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ25OQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDakJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuT0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzNEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ1JBO0FBQ0E7QUFDQTtBQUNBOzs7QUNIQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsImZpbGUiOiJnZW5lcmF0ZWQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlc0NvbnRlbnQiOlsiKGZ1bmN0aW9uIGUodCxuLHIpe2Z1bmN0aW9uIHMobyx1KXtpZighbltvXSl7aWYoIXRbb10pe3ZhciBhPXR5cGVvZiByZXF1aXJlPT1cImZ1bmN0aW9uXCImJnJlcXVpcmU7aWYoIXUmJmEpcmV0dXJuIGEobywhMCk7aWYoaSlyZXR1cm4gaShvLCEwKTt2YXIgZj1uZXcgRXJyb3IoXCJDYW5ub3QgZmluZCBtb2R1bGUgJ1wiK28rXCInXCIpO3Rocm93IGYuY29kZT1cIk1PRFVMRV9OT1RfRk9VTkRcIixmfXZhciBsPW5bb109e2V4cG9ydHM6e319O3Rbb11bMF0uY2FsbChsLmV4cG9ydHMsZnVuY3Rpb24oZSl7dmFyIG49dFtvXVsxXVtlXTtyZXR1cm4gcyhuP246ZSl9LGwsbC5leHBvcnRzLGUsdCxuLHIpfXJldHVybiBuW29dLmV4cG9ydHN9dmFyIGk9dHlwZW9mIHJlcXVpcmU9PVwiZnVuY3Rpb25cIiYmcmVxdWlyZTtmb3IodmFyIG89MDtvPHIubGVuZ3RoO28rKylzKHJbb10pO3JldHVybiBzfSkiLCJcblxubW9kdWxlLmV4cG9ydHMgPSB7XG5cbiAgICBjcmVhdGVDb250ZXh0OiBcdFx0XHRyZXF1aXJlKCcuL2xpYi9jcmVhdGVDb250ZXh0JyksXG4gICAgc2V0VmVydGV4QXR0cmliQXJyYXlzOiBcdHJlcXVpcmUoJy4vbGliL3NldFZlcnRleEF0dHJpYkFycmF5cycpLFxuICAgIFxuICAgIEdMQnVmZmVyOiBcdFx0XHRcdHJlcXVpcmUoJy4vbGliL0dMQnVmZmVyJyksXG4gICAgR0xGcmFtZWJ1ZmZlcjogXHRcdFx0cmVxdWlyZSgnLi9saWIvR0xGcmFtZWJ1ZmZlcicpLFxuICAgIEdMU2hhZGVyOiBcdFx0XHRcdHJlcXVpcmUoJy4vbGliL0dMU2hhZGVyJyksXG4gICAgR0xUZXh0dXJlOiBcdFx0XHRcdHJlcXVpcmUoJy4vbGliL0dMVGV4dHVyZScpLFxuICAgIFxuICAgIFZlcnRleEFycmF5T2JqZWN0OiBcdFx0cmVxdWlyZSgnLi9saWIvVmVydGV4QXJyYXlPYmplY3QnKVxuXG59OyIsIlxuLyoqXG4gKiBIZWxwZXIgY2xhc3MgdG8gY3JlYXRlIGEgd2ViR0wgYnVmZmVyXG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIGdsIHtXZWJHTFJlbmRlcmluZ0NvbnRleHR9XG4gKi9cblxudmFyIEVNUFRZX0FSUkFZX0JVRkZFUiA9IG5ldyBBcnJheUJ1ZmZlcigwKTtcblxudmFyIEJ1ZmZlciA9IGZ1bmN0aW9uKGdsLCB0eXBlLCBkYXRhLCBkcmF3VHlwZSlcbntcblx0dGhpcy5nbCA9IGdsO1xuXG5cdHRoaXMuYnVmZmVyID0gZ2wuY3JlYXRlQnVmZmVyKCk7XG5cdHRoaXMudHlwZSA9IHR5cGUgfHwgZ2wuQVJSQVlfQlVGRkVSO1xuXHR0aGlzLmRyYXdUeXBlID0gZHJhd1R5cGUgfHwgZ2wuU1RBVElDX0RSQVc7XG5cdHRoaXMuZGF0YSA9IEVNUFRZX0FSUkFZX0JVRkZFUjtcblxuXHRpZihkYXRhKVxuXHR7XG5cdFx0dGhpcy51cGxvYWQoZGF0YSk7XG5cdH1cbn1cblxuQnVmZmVyLnByb3RvdHlwZS51cGxvYWQgPSBmdW5jdGlvbihkYXRhLCBvZmZzZXQsIGRvbnRCaW5kKVxue1xuXHQvLyB0b2RvIC0gbmVlZGVkP1xuXHQvL2lmKCFkb250QmluZClcblx0dGhpcy5iaW5kKCk7XG5cblx0dmFyIGdsID0gdGhpcy5nbDtcblx0XG5cdGRhdGEgPSBkYXRhIHx8IHRoaXMuZGF0YTtcblx0b2Zmc2V0ID0gb2Zmc2V0IHx8IDA7XG5cblx0aWYodGhpcy5kYXRhLmJ5dGVMZW5ndGggPj0gZGF0YS5ieXRlTGVuZ3RoKVxuXHR7XHRcblx0XHRnbC5idWZmZXJTdWJEYXRhKHRoaXMudHlwZSwgb2Zmc2V0LCBkYXRhKTtcblx0fVxuXHRlbHNlXG5cdHtcblx0XHRnbC5idWZmZXJEYXRhKHRoaXMudHlwZSwgZGF0YSwgdGhpcy5kcmF3VHlwZSk7XG5cdH1cblxuXHR0aGlzLmRhdGEgPSBkYXRhO1xufVxuXG5CdWZmZXIucHJvdG90eXBlLmJpbmQgPSBmdW5jdGlvbigpXG57XG5cdHZhciBnbCA9IHRoaXMuZ2w7XG5cdGdsLmJpbmRCdWZmZXIodGhpcy50eXBlLCB0aGlzLmJ1ZmZlcik7XG59XG5cbkJ1ZmZlci5jcmVhdGVWZXJ0ZXhCdWZmZXIgPSBmdW5jdGlvbihnbCwgZGF0YSwgZHJhd1R5cGUpXG57XG5cdHJldHVybiBuZXcgQnVmZmVyKGdsLCBnbC5BUlJBWV9CVUZGRVIsIGRhdGEsIGRyYXdUeXBlKTtcbn1cblxuQnVmZmVyLmNyZWF0ZUluZGV4QnVmZmVyID0gZnVuY3Rpb24oZ2wsIGRhdGEsIGRyYXdUeXBlKVxue1xuXHRyZXR1cm4gbmV3IEJ1ZmZlcihnbCwgZ2wuRUxFTUVOVF9BUlJBWV9CVUZGRVIsIGRhdGEsIGRyYXdUeXBlKTtcbn1cblxuQnVmZmVyLmNyZWF0ZSA9IGZ1bmN0aW9uKGdsLCB0eXBlLCBkYXRhLCBkcmF3VHlwZSlcbntcblx0cmV0dXJuIG5ldyBCdWZmZXIoZ2wsIHR5cGUsIGRyYXdUeXBlKTtcbn1cblxuLy9UT0RPIERlc3Ryb3kuLlxuXG5tb2R1bGUuZXhwb3J0cyA9IEJ1ZmZlcjtcblxuIiwiXG52YXIgVGV4dHVyZSA9IHJlcXVpcmUoJy4vR0xUZXh0dXJlJyk7XG5cbi8qKlxuICogSGVscGVyIGNsYXNzIHRvIGNyZWF0ZSBhIHdlYkdMIEZyYW1lYnVmZmVyXG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIGdsIHtXZWJHTFJlbmRlcmluZ0NvbnRleHR9XG4gKi9cblxudmFyIEZyYW1lYnVmZmVyID0gZnVuY3Rpb24oZ2wsIHdpZHRoLCBoZWlnaHQpXG57XG5cdHRoaXMuZ2wgPSBnbDtcblxuXHR0aGlzLmZyYW1lYnVmZmVyID0gZ2wuY3JlYXRlRnJhbWVidWZmZXIoKTtcblx0XG5cdHRoaXMuc3RlbmNpbCA9IG51bGw7XG5cdHRoaXMudGV4dHVyZSA9IG51bGw7XG5cblx0dGhpcy53aWR0aCA9IHdpZHRoIHx8IDEwMDtcblx0dGhpcy5oZWlnaHQgPSBoZWlnaHQgfHwgMTAwO1xufVxuXG5GcmFtZWJ1ZmZlci5wcm90b3R5cGUuZW5hYmxlVGV4dHVyZSA9IGZ1bmN0aW9uKHRleHR1cmUpXG57XG5cdHZhciBnbCA9IHRoaXMuZ2w7XG5cblx0dGhpcy50ZXh0dXJlID0gdGV4dHVyZSB8fCBuZXcgVGV4dHVyZShnbCk7XG5cblx0dGhpcy50ZXh0dXJlLmJpbmQoKTtcblxuXHQvL2dsLnRleEltYWdlMkQoZ2wuVEVYVFVSRV8yRCwgMCwgZ2wuUkdCQSwgIHRoaXMud2lkdGgsIHRoaXMuaGVpZ2h0LCAwLCBnbC5SR0JBLCBnbC5VTlNJR05FRF9CWVRFLCBudWxsKTtcblxuXHR0aGlzLmJpbmQoKTtcblxuXHRnbC5mcmFtZWJ1ZmZlclRleHR1cmUyRChnbC5GUkFNRUJVRkZFUiwgZ2wuQ09MT1JfQVRUQUNITUVOVDAsIGdsLlRFWFRVUkVfMkQsIHRoaXMudGV4dHVyZS50ZXh0dXJlLCAwKTtcbn1cblxuRnJhbWVidWZmZXIucHJvdG90eXBlLmVuYWJsZVN0ZW5jaWwgPSBmdW5jdGlvbigpXG57XG5cdGlmKHRoaXMuc3RlbmNpbClyZXR1cm47XG5cblx0dmFyIGdsID0gdGhpcy5nbDtcblxuXHR0aGlzLnN0ZW5jaWwgPSBnbC5jcmVhdGVSZW5kZXJidWZmZXIoKTtcbiAgICBcbiAgICBnbC5iaW5kUmVuZGVyYnVmZmVyKGdsLlJFTkRFUkJVRkZFUiwgdGhpcy5zdGVuY2lsKTtcbiAgICBcbiAgICAvLyBUT0RPLi4gdGhpcyBpcyBkZXB0aCBBTkQgc3RlbmNpbD9cbiAgICBnbC5mcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcihnbC5GUkFNRUJVRkZFUiwgZ2wuREVQVEhfU1RFTkNJTF9BVFRBQ0hNRU5ULCBnbC5SRU5ERVJCVUZGRVIsIHRoaXMuc3RlbmNpbCk7XG4gICAgZ2wucmVuZGVyYnVmZmVyU3RvcmFnZShnbC5SRU5ERVJCVUZGRVIsIGdsLkRFUFRIX1NURU5DSUwsICB0aGlzLndpZHRoICAsIHRoaXMuaGVpZ2h0ICk7XG59XG5cbkZyYW1lYnVmZmVyLnByb3RvdHlwZS5jbGVhciA9IGZ1bmN0aW9uKCByLCBnLCBiLCBhIClcbntcblx0dGhpcy5iaW5kKCk7XG5cblx0dmFyIGdsID0gdGhpcy5nbDtcbiAgICBcbiAgICBnbC5jbGVhckNvbG9yKHIsIGcsIGIsIGEpO1xuICAgIGdsLmNsZWFyKGdsLkNPTE9SX0JVRkZFUl9CSVQpO1xufVxuXG5GcmFtZWJ1ZmZlci5wcm90b3R5cGUuYmluZCA9IGZ1bmN0aW9uKClcbntcblx0dmFyIGdsID0gdGhpcy5nbDtcblx0Z2wuYmluZEZyYW1lYnVmZmVyKGdsLkZSQU1FQlVGRkVSLCB0aGlzLmZyYW1lYnVmZmVyICk7XHRcbn1cblxuRnJhbWVidWZmZXIucHJvdG90eXBlLnVuYmluZCA9IGZ1bmN0aW9uKClcbntcblx0Z2wuYmluZEZyYW1lYnVmZmVyKGdsLkZSQU1FQlVGRkVSLCBudWxsICk7XHRcbn1cblxuRnJhbWVidWZmZXIucHJvdG90eXBlLnJlc2l6ZSA9IGZ1bmN0aW9uKHdpZHRoLCBoZWlnaHQpXG57XG5cdHZhciBnbCA9IHRoaXMuZ2w7XG5cblx0dGhpcy53aWR0aCA9IHdpZHRoO1xuXHR0aGlzLmhlaWdodCA9IGhlaWdodDtcblxuXHRpZiAoIHRoaXMudGV4dHVyZSApXG4gICAge1xuICAgIFx0dGhpcy50ZXh0dXJlLnVwbG9hZERhdGEobnVsbCwgd2lkdGgsIGhlaWdodCk7XG5cdH1cblxuXHRpZiAoIHRoaXMuc3RlbmNpbCApXG4gICAge1xuICAgICAgICAvLyB1cGRhdGUgdGhlIHN0ZW5jaWwgYnVmZmVyIHdpZHRoIGFuZCBoZWlnaHRcbiAgICAgICAgZ2wuYmluZFJlbmRlcmJ1ZmZlcihnbC5SRU5ERVJCVUZGRVIsIHRoaXMuc3RlbmNpbCk7XG4gICAgICAgIGdsLnJlbmRlcmJ1ZmZlclN0b3JhZ2UoZ2wuUkVOREVSQlVGRkVSLCBnbC5ERVBUSF9TVEVOQ0lMLCB3aWR0aCwgaGVpZ2h0KTtcbiAgICB9XG59XG5cbkZyYW1lYnVmZmVyLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24oKVxue1xuXHR2YXIgZ2wgPSB0aGlzLmdsO1xuXHQvL1RPRE9cblx0Z2wuZGVsZXRlRnJhbWVidWZmZXIodGhpcy5mcmFtZWJ1ZmZlcik7XG59XG5cbkZyYW1lYnVmZmVyLmNyZWF0ZVJHQkEgPSBmdW5jdGlvbihnbCwgd2lkdGgsIGhlaWdodCwgZGF0YSlcbntcblx0dmFyIHRleHR1cmUgPSBUZXh0dXJlLmZyb21EYXRhKGdsLCBudWxsLCB3aWR0aCwgaGVpZ2h0KTtcblx0dGV4dHVyZS5lbmFibGVOZWFyZXN0U2NhbGluZygpO1xuICAgIHRleHR1cmUuZW5hYmxlV3JhcENsYW1wKCk7XG5cbiAgICAvL25vdyBjcmVhdGUgdGhlIGZyYW1lYnVmZmVyIG9iamVjdCBhbmQgYXR0YWNoIHRoZSB0ZXh0dXJlIHRvIGl0LlxuICAgIHZhciBmYm8gPSBuZXcgRnJhbWVidWZmZXIoZ2wsIHdpZHRoLCBoZWlnaHQpO1xuICAgIGZiby5lbmFibGVUZXh0dXJlKHRleHR1cmUpO1xuXG4gICAgcmV0dXJuIGZibztcbn1cblxuRnJhbWVidWZmZXIuY3JlYXRlRmxvYXQzMiA9IGZ1bmN0aW9uKGdsLCB3aWR0aCwgaGVpZ2h0LCBkYXRhKVxue1xuXHQvLyBjcmVhdGUgYSBuZXcgdGV4dHVyZS4uXG4gICAgdmFyIHRleHR1cmUgPSBuZXcgVGV4dHVyZS5mcm9tRGF0YShnbCwgZGF0YSwgd2lkdGgsIGhlaWdodCk7XG4gICAgdGV4dHVyZS5lbmFibGVOZWFyZXN0U2NhbGluZygpO1xuICAgIHRleHR1cmUuZW5hYmxlV3JhcENsYW1wKCk7XG5cbiAgICAvL25vdyBjcmVhdGUgdGhlIGZyYW1lYnVmZmVyIG9iamVjdCBhbmQgYXR0YWNoIHRoZSB0ZXh0dXJlIHRvIGl0LlxuICAgIHZhciBmYm8gPSBuZXcgRnJhbWVidWZmZXIoZ2wsIHdpZHRoLCBoZWlnaHQpO1xuICAgIGZiby5lbmFibGVUZXh0dXJlKHRleHR1cmUpXG5cbiAgICByZXR1cm4gZmJvO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IEZyYW1lYnVmZmVyO1xuXG4iLCJcbnZhciBjb21waWxlUHJvZ3JhbSA9IHJlcXVpcmUoJy4vc2hhZGVyL2NvbXBpbGVQcm9ncmFtJyksXG5cdGV4dHJhY3RBdHRyaWJ1dGVzID0gcmVxdWlyZSgnLi9zaGFkZXIvZXh0cmFjdEF0dHJpYnV0ZXMnKSxcblx0ZXh0cmFjdFVuaWZvcm1zID0gcmVxdWlyZSgnLi9zaGFkZXIvZXh0cmFjdFVuaWZvcm1zJyksXG5cdGdlbmVyYXRlVW5pZm9ybUFjY2Vzc09iamVjdCA9IHJlcXVpcmUoJy4vc2hhZGVyL2dlbmVyYXRlVW5pZm9ybUFjY2Vzc09iamVjdCcpO1xuXG4vKipcbiAqIEhlbHBlciBjbGFzcyB0byBjcmVhdGUgYSB3ZWJHTCBTaGFkZXJcbiAqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gZ2wge1dlYkdMUmVuZGVyaW5nQ29udGV4dH1cbiAqL1xudmFyIFNoYWRlciA9IGZ1bmN0aW9uKGdsLCB2ZXJ0ZXhTcmMsIGZyYWdtZW50U3JjKVxue1xuXHR0aGlzLmdsID0gZ2w7XG5cblx0Ly8gRmlyc3QgY29tcGlsZSB0aGUgcHJvZ3JhbS4uXG5cdHRoaXMucHJvZ3JhbSA9IGNvbXBpbGVQcm9ncmFtKGdsLCB2ZXJ0ZXhTcmMsIGZyYWdtZW50U3JjKTtcblxuXHQvLyBuZXh0IGV4dHJhY3QgdGhlIGF0dHJpYnV0ZXNcblx0dGhpcy5hdHRyaWJ1dGVzID0gZXh0cmFjdEF0dHJpYnV0ZXMoZ2wsIHRoaXMucHJvZ3JhbSk7IFxuXG4gICAgdmFyIHVuaWZvcm1EYXRhID0gZXh0cmFjdFVuaWZvcm1zKGdsLCB0aGlzLnByb2dyYW0pO1xuXG4gICAgdGhpcy51bmlmb3JtcyA9IGdlbmVyYXRlVW5pZm9ybUFjY2Vzc09iamVjdCggZ2wsIHVuaWZvcm1EYXRhICk7XG59XG5cblNoYWRlci5wcm90b3R5cGUuYmluZCA9IGZ1bmN0aW9uKClcbntcblx0dGhpcy5nbC51c2VQcm9ncmFtKHRoaXMucHJvZ3JhbSk7XG59XG5cblNoYWRlci5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uKClcbntcblx0dmFyIGdsID0gdGhpcy5nbDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBTaGFkZXI7XG5cbiIsIlxuLyoqXG4gKiBIZWxwZXIgY2xhc3MgdG8gY3JlYXRlIGEgd2ViR0wgVGV4dHVyZVxuICpcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqIEBwYXJhbSBnbCB7V2ViR0xSZW5kZXJpbmdDb250ZXh0fSBhIFdlYkdMIGNvbnRleHRcbiAqIEBwYXJhbSB3aWR0aCB7bnVtYmVyfSB0aGUgd2lkdGggb2YgdGhlIHRleHR1cmUgXG4gKiBAcGFyYW0gaGVpZ2h0IHtudW1iZXJ9IHRoZSBoZWlnaHQgb2YgdGhlIHRleHR1cmUgXG4gKiBAcGFyYW0gZm9ybWF0IHtudW1iZXJ9IHRoZSBwaXhlbCBmb3JtYXQgb2YgdGhlIHRleHR1cmUuIGRlZmF1bHRzIHRvIGdsLlJHQkFcbiAqIEBwYXJhbSB0eXBlIHtudW1iZXJ9IHRoZSBnbCB0eXBlIG9mIHRoZSB0ZXh0dXJlLiBkZWZhdWx0cyB0byBnbC5VTlNJR05FRF9CWVRFXG4gKi9cbnZhciBUZXh0dXJlID0gZnVuY3Rpb24oZ2wsIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgdHlwZSlcbntcblx0dGhpcy5nbCA9IGdsO1xuXG5cdHRoaXMudGV4dHVyZSA9IGdsLmNyZWF0ZVRleHR1cmUoKTtcblxuXHQvLyBzb21lIHNldHRpbmdzLi5cblx0dGhpcy5taXBtYXAgPSBmYWxzZTtcblxuXHR0aGlzLnByZW11bHRpcGx5QWxwaGEgPSBmYWxzZTtcblxuXHR0aGlzLndpZHRoID0gd2lkdGggfHwgMDtcblx0dGhpcy5oZWlnaHQgPSBoZWlnaHQgfHwgMDtcblxuXHR0aGlzLmZvcm1hdCA9IGZvcm1hdCB8fCBnbC5SR0JBO1xuXHR0aGlzLnR5cGUgPSB0eXBlIHx8IGdsLlVOU0lHTkVEX0JZVEU7XG5cblxufVxuXG4vKipcbiAqIEBwYXJhbSB7UElYSS5nbENvcmUuVGV4dHVyZX0gW3Zhcm5hbWVdIFtkZXNjcmlwdGlvbl1cbiAqL1xuVGV4dHVyZS5wcm90b3R5cGUudXBsb2FkID0gZnVuY3Rpb24oc291cmNlKVxue1xuXHR0aGlzLmJpbmQoKTtcblxuXHR2YXIgZ2wgPSB0aGlzLmdsO1xuXG5cdHRoaXMud2lkdGggPSBzb3VyY2Uud2lkdGg7XG5cdHRoaXMuaGVpZ2h0ID0gc291cmNlLmhlaWdodDtcblxuXHRnbC5waXhlbFN0b3JlaShnbC5VTlBBQ0tfUFJFTVVMVElQTFlfQUxQSEFfV0VCR0wsIHRoaXMucHJlbXVsdGlwbHlBbHBoYSk7XG4gICAgZ2wudGV4SW1hZ2UyRChnbC5URVhUVVJFXzJELCAwLCB0aGlzLmZvcm1hdCwgdGhpcy5mb3JtYXQsIHRoaXMudHlwZSwgc291cmNlKTtcbn1cblxudmFyIEZMT0FUSU5HX1BPSU5UX0FWQUlMQUJMRSA9IGZhbHNlO1xuXG5UZXh0dXJlLnByb3RvdHlwZS51cGxvYWREYXRhID0gZnVuY3Rpb24oZGF0YSwgd2lkdGgsIGhlaWdodClcbntcblx0dGhpcy5iaW5kKCk7XG5cdFxuXHR0aGlzLndpZHRoID0gd2lkdGggfHwgdGhpcy53aWR0aDtcblx0dGhpcy5oZWlnaHQgPSBoZWlnaHQgfHwgdGhpcy5oZWlnaHQ7XG5cblx0aWYoZGF0YSBpbnN0YW5jZW9mIEZsb2F0MzJBcnJheSlcblx0e1xuXHRcdGlmKCFGTE9BVElOR19QT0lOVF9BVkFJTEFCTEUpXG5cdFx0e1xuXHRcdFx0dmFyIGV4dCA9IGdsLmdldEV4dGVuc2lvbihcIk9FU190ZXh0dXJlX2Zsb2F0XCIpO1xuXHRcdFx0XG5cdFx0XHRpZihleHQpXG5cdFx0XHR7XG5cdFx0XHRcdEZMT0FUSU5HX1BPSU5UX0FWQUlMQUJMRSA9IHRydWU7XG5cdFx0XHR9XG5cdFx0XHRlbHNlXG5cdFx0XHR7XG5cdFx0XHRcdHRocm93IG5ldyBFcnJvcignZmxvYXRpbmcgcG9pbnQgdGV4dHVyZXMgbm90IGF2YWlsYWJsZScpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHRoaXMudHlwZSA9IGdsLkZMT0FUO1xuXHR9XG5cdGVsc2Vcblx0e1xuXHRcdC8vIFRPRE8gc3VwcG9ydCBmb3Igb3RoZXIgdHlwZXNcblx0XHR0aGlzLnR5cGUgPSBnbC5VTlNJR05FRF9CWVRFO1xuXHR9XG5cblx0Ly8gd2hhdCB0eXBlIG9mIGRhdGE/XG5cdGdsLnBpeGVsU3RvcmVpKGdsLlVOUEFDS19QUkVNVUxUSVBMWV9BTFBIQV9XRUJHTCwgdGhpcy5wcmVtdWx0aXBseUFscGhhKTtcblx0Z2wudGV4SW1hZ2UyRChnbC5URVhUVVJFXzJELCAwLCB0aGlzLmZvcm1hdCwgIHRoaXMud2lkdGgsIHRoaXMuaGVpZ2h0LCAwLCB0aGlzLmZvcm1hdCwgdGhpcy50eXBlLCBkYXRhIHx8IG51bGwpO1xuXG59XG5cblRleHR1cmUucHJvdG90eXBlLmJpbmQgPSBmdW5jdGlvbihsb2NhdGlvbilcbntcblx0dmFyIGdsID0gdGhpcy5nbDtcblxuXHRpZihsb2NhdGlvbiAhPT0gdW5kZWZpbmVkKVxuXHR7XG5cdFx0Z2wuYWN0aXZlVGV4dHVyZShnbC5URVhUVVJFMCArIGxvY2F0aW9uKTtcblx0fVxuXG5cdGdsLmJpbmRUZXh0dXJlKGdsLlRFWFRVUkVfMkQsIHRoaXMudGV4dHVyZSk7XG59XG5cblRleHR1cmUucHJvdG90eXBlLnVuYmluZCA9IGZ1bmN0aW9uKClcbntcblx0dmFyIGdsID0gdGhpcy5nbDtcblx0Z2wuYmluZFRleHR1cmUoZ2wuVEVYVFVSRV8yRCwgbnVsbCk7XG59XG5cblRleHR1cmUucHJvdG90eXBlLm1pbkZpbHRlciA9IGZ1bmN0aW9uKCBsaW5lYXIgKVxue1xuXHR2YXIgZ2wgPSB0aGlzLmdsO1xuXG5cdHRoaXMuYmluZCgpO1xuXG5cdGlmKHRoaXMubWlwbWFwKVxuXHR7XG5cdFx0Z2wudGV4UGFyYW1ldGVyaShnbC5URVhUVVJFXzJELCBnbC5URVhUVVJFX01JTl9GSUxURVIsIGxpbmVhciA/IGdsLkxJTkVBUl9NSVBNQVBfTElORUFSIDogZ2wuTkVBUkVTVF9NSVBNQVBfTkVBUkVTVCk7XG5cdH1cblx0ZWxzZVxuXHR7XG5cdFx0Z2wudGV4UGFyYW1ldGVyaShnbC5URVhUVVJFXzJELCBnbC5URVhUVVJFX01JTl9GSUxURVIsIGxpbmVhciA/IGdsLkxJTkVBUiA6IGdsLk5FQVJFU1QpO1xuXHR9XHRcbn1cblxuVGV4dHVyZS5wcm90b3R5cGUubWFnRmlsdGVyID0gZnVuY3Rpb24oIGxpbmVhciApXG57XG5cdHZhciBnbCA9IHRoaXMuZ2w7XG5cblx0dGhpcy5iaW5kKCk7XG5cblx0Z2wudGV4UGFyYW1ldGVyaShnbC5URVhUVVJFXzJELCBnbC5URVhUVVJFX01BR19GSUxURVIsIGxpbmVhciA/IGdsLkxJTkVBUiA6IGdsLk5FQVJFU1QpO1xufVxuXG5UZXh0dXJlLnByb3RvdHlwZS5lbmFibGVNaXBtYXAgPSBmdW5jdGlvbigpXG57XG5cdHRoaXMuYmluZCgpO1xuXG5cdHRoaXMubWlwbWFwID0gdHJ1ZTtcblx0Z2wuZ2VuZXJhdGVNaXBtYXAoZ2wuVEVYVFVSRV8yRCk7XG59XG5cblRleHR1cmUucHJvdG90eXBlLmVuYWJsZUxpbmVhclNjYWxpbmcgPSBmdW5jdGlvbigpXG57XG5cdHRoaXMubWluRmlsdGVyKHRydWUpO1xuXHR0aGlzLm1hZ0ZpbHRlcih0cnVlKTtcbn1cblxuVGV4dHVyZS5wcm90b3R5cGUuZW5hYmxlTmVhcmVzdFNjYWxpbmcgPSBmdW5jdGlvbigpXG57XG5cdHRoaXMubWluRmlsdGVyKGZhbHNlKTtcblx0dGhpcy5tYWdGaWx0ZXIoZmFsc2UpO1xufVxuXG5UZXh0dXJlLnByb3RvdHlwZS5lbmFibGVXcmFwQ2xhbXAgPSBmdW5jdGlvbigpXG57XG5cdHZhciBnbCA9IHRoaXMuZ2w7XG5cblx0dGhpcy5iaW5kKCk7XG5cblx0Z2wudGV4UGFyYW1ldGVyaShnbC5URVhUVVJFXzJELCBnbC5URVhUVVJFX1dSQVBfUywgZ2wuQ0xBTVBfVE9fRURHRSk7XG4gICAgZ2wudGV4UGFyYW1ldGVyaShnbC5URVhUVVJFXzJELCBnbC5URVhUVVJFX1dSQVBfVCwgZ2wuQ0xBTVBfVE9fRURHRSk7XG59XG5cblRleHR1cmUucHJvdG90eXBlLmVuYWJsZVdyYXBSZXBlYXQgPSBmdW5jdGlvbigpXG57XG5cdHZhciBnbCA9IHRoaXMuZ2w7XG5cblx0dGhpcy5iaW5kKCk7XG5cdFxuXHRnbC50ZXhQYXJhbWV0ZXJpKGdsLlRFWFRVUkVfMkQsIGdsLlRFWFRVUkVfV1JBUF9TLCBnbC5SRVBFQVQpO1xuICAgIGdsLnRleFBhcmFtZXRlcmkoZ2wuVEVYVFVSRV8yRCwgZ2wuVEVYVFVSRV9XUkFQX1QsIGdsLlJFUEVBVCk7XG59XG5cblRleHR1cmUucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbigpXG57XG5cdHZhciBnbCA9IHRoaXMuZ2w7XG5cdC8vVE9ET1xuXHRnbC5kZWxldGVUZXh0dXJlKHRoaXMudGV4dHVyZSk7XG59XG5cbi8vVGV4dHVyZS5cblRleHR1cmUuZnJvbVNvdXJjZSA9IGZ1bmN0aW9uKGdsLCBzb3VyY2UsIHByZW11bHRpcGx5QWxwaGEpXG57XG5cdHZhciB0ZXh0dXJlID0gbmV3IFRleHR1cmUoZ2wpO1xuXHR0ZXh0dXJlLnByZW11bHRpcGx5QWxwaGEgPSBwcmVtdWx0aXBseUFscGhhIHx8IGZhbHNlO1xuXHR0ZXh0dXJlLnVwbG9hZChzb3VyY2UpO1xuXG5cdHJldHVybiB0ZXh0dXJlO1xufVxuXG5UZXh0dXJlLmZyb21EYXRhID0gZnVuY3Rpb24oZ2wsIGRhdGEsIHdpZHRoLCBoZWlnaHQpXG57XG5cdC8vY29uc29sZS5sb2coZGF0YSwgd2lkdGgsIGhlaWdodCk7XG5cdHZhciB0ZXh0dXJlID0gbmV3IFRleHR1cmUoZ2wpO1xuXHR0ZXh0dXJlLnVwbG9hZERhdGEoZGF0YSwgd2lkdGgsIGhlaWdodCk7XG5cblx0cmV0dXJuIHRleHR1cmU7XG59XG5cblxubW9kdWxlLmV4cG9ydHMgPSBUZXh0dXJlO1xuXG4iLCJcbi8qKlxuICogR2VuZXJpYyBNYXNrIFN0YWNrIGRhdGEgc3RydWN0dXJlXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKi9cblxuLy8gc3RhdGUgb2JqZWN0Ly9cblxuXG5mdW5jdGlvbiBWZXJ0ZXhBcnJheU9iamVjdChnbClcbntcblx0XG5cdHRoaXMubmF0aXZlVmFvRXh0ZW5zaW9uID0gKFxuICAgICAgZ2wuZ2V0RXh0ZW5zaW9uKCdPRVNfdmVydGV4X2FycmF5X29iamVjdCcpIHx8XG4gICAgICBnbC5nZXRFeHRlbnNpb24oJ01PWl9PRVNfdmVydGV4X2FycmF5X29iamVjdCcpIHx8XG4gICAgICBnbC5nZXRFeHRlbnNpb24oJ1dFQktJVF9PRVNfdmVydGV4X2FycmF5X29iamVjdCcpXG4gICAgKTtcblxuLy9cdHRoaXMubmF0aXZlVmFvRXh0ZW5zaW9uID0gbnVsbDtcblxuXHRpZih0aGlzLm5hdGl2ZVZhb0V4dGVuc2lvbilcblx0e1xuXHRcdHRoaXMubmF0aXZlVmFvID0gdGhpcy5uYXRpdmVWYW9FeHRlbnNpb24uY3JlYXRlVmVydGV4QXJyYXlPRVMoKTsgIFxuXHR9XG5cblx0dGhpcy5nbCA9IGdsO1xuXG5cdHRoaXMuYXR0cmlidXRlcyA9IFtdO1xuXG5cdHRoaXMuaW5kZXhCdWZmZXIgPSBudWxsO1xuXG5cdHRoaXMuZGlydHkgPSBmYWxzZTtcblxuXHRcbn1cblxuVmVydGV4QXJyYXlPYmplY3QucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gVmVydGV4QXJyYXlPYmplY3Q7XG5tb2R1bGUuZXhwb3J0cyA9IFZlcnRleEFycmF5T2JqZWN0O1xuXG5WZXJ0ZXhBcnJheU9iamVjdC5wcm90b3R5cGUuYmluZCA9IGZ1bmN0aW9uKClcbntcblx0aWYodGhpcy5uYXRpdmVWYW8pXG5cdHtcblx0XHR0aGlzLm5hdGl2ZVZhb0V4dGVuc2lvbi5iaW5kVmVydGV4QXJyYXlPRVModGhpcy5uYXRpdmVWYW8pOyAgXG5cblx0XHRpZih0aGlzLmRpcnR5KVxuXHRcdHtcblx0XHRcdHRoaXMuZGlydHkgPSBmYWxzZTtcblx0XHRcdHRoaXMuYWN0aXZhdGUoKTtcblx0XHR9XG5cdH1cblx0ZWxzZVxuXHR7XG5cdFx0dGhpcy5hY3RpdmF0ZSgpO1xuXHR9XG59XG5cblZlcnRleEFycmF5T2JqZWN0LnByb3RvdHlwZS51bmJpbmQgPSBmdW5jdGlvbigpXG57XG5cdGlmKHRoaXMubmF0aXZlVmFvKVxuXHR7XG5cdFx0dGhpcy5uYXRpdmVWYW9FeHRlbnNpb24uYmluZFZlcnRleEFycmF5T0VTKG51bGwpO1xuXHR9XG59XG5cblZlcnRleEFycmF5T2JqZWN0LnByb3RvdHlwZS5hY3RpdmF0ZSA9IGZ1bmN0aW9uKClcbntcblx0dmFyIGdsID0gdGhpcy5nbDtcblxuXHRmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuYXR0cmlidXRlcy5sZW5ndGg7IGkrKykgXG5cdHtcblx0XHR2YXIgYXR0cmliID0gdGhpcy5hdHRyaWJ1dGVzW2ldO1xuXHRcdGF0dHJpYi5idWZmZXIuYmluZCgpO1x0XG5cblx0XHRhdHRyaWIuYXR0cmlidXRlLnBvaW50ZXIoYXR0cmliLnR5cGUsIGF0dHJpYi5ub3JtYWxpemVkLCBhdHRyaWIuc3RyaWRlLCBhdHRyaWIuc3RhcnQpOyBcblx0XHRcblx0XHRnbC5lbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShhdHRyaWIuYXR0cmlidXRlLmxvY2F0aW9uKTtcblx0fTtcblxuXHR0aGlzLmluZGV4QnVmZmVyLmJpbmQoKTtcbn1cblxuVmVydGV4QXJyYXlPYmplY3QucHJvdG90eXBlLmFkZEF0dHJpYnV0ZSA9IGZ1bmN0aW9uKGJ1ZmZlciwgYXR0cmlidXRlLCB0eXBlLCBub3JtYWxpemVkLCBzdHJpZGUsIHN0YXJ0KVxue1xuICAgIHRoaXMuYXR0cmlidXRlcy5wdXNoKHtcbiAgICBcdGJ1ZmZlcjogXHRidWZmZXIsXG4gICAgXHRhdHRyaWJ1dGU6IFx0YXR0cmlidXRlLFxuXG4gICAgXHRsb2NhdGlvbjogXHRhdHRyaWJ1dGUubG9jYXRpb24sXG5cdCBcdHR5cGU6IFx0XHR0eXBlIHx8IHRoaXMuZ2wuRkxPQVQsXG5cdCBcdG5vcm1hbGl6ZWQ6IG5vcm1hbGl6ZWQgfHwgZmFsc2UsXG5cdCBcdHN0cmlkZTogXHRzdHJpZGUgfHwgMCxcblx0IFx0c3RhcnQ6IFx0XHRzdGFydCB8fCAwXG5cdH0pXG5cblx0dGhpcy5kaXJ0eSA9IHRydWU7XG59XG5cblxuVmVydGV4QXJyYXlPYmplY3QucHJvdG90eXBlLmFkZEluZGV4ID0gZnVuY3Rpb24oYnVmZmVyLCBvcHRpb25zKVxue1xuICAgIHRoaXMuaW5kZXhCdWZmZXIgPSBidWZmZXI7XG5cbiAgICB0aGlzLmRpcnR5ID0gdHJ1ZTtcbn1cblxuVmVydGV4QXJyYXlPYmplY3QucHJvdG90eXBlLmRyYXcgPSBmdW5jdGlvbih0eXBlLCBzaXplLCBzdGFydClcbntcblx0dmFyIGdsID0gdGhpcy5nbDtcblx0Z2wuZHJhd0VsZW1lbnRzKHR5cGUsIHNpemUsIGdsLlVOU0lHTkVEX1NIT1JULCBzdGFydCk7XG59XG5cbiIsIlxuLyoqXG4gKiBIZWxwZXIgY2xhc3MgdG8gY3JlYXRlIGEgd2ViR0wgQ29udGV4dFxuICpcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqIEBwYXJhbSBnbCB7V2ViR0xSZW5kZXJpbmdDb250ZXh0fVxuICovXG5cbnZhciBDT05URVhUX1VJRCA9IDA7XG5cbnZhciBjcmVhdGVDb250ZXh0ID0gZnVuY3Rpb24oY2FudmFzLCBvcHRpb25zKVxue1xuICAgIGdsID0gY2FudmFzLmdldENvbnRleHQoJ3dlYmdsJywgb3B0aW9ucykgfHwgXG4gICAgXHQgY2FudmFzLmdldENvbnRleHQoJ2V4cGVyaW1lbnRhbC13ZWJnbCcsIG9wdGlvbnMpO1xuXG4gICAgaWYgKCFnbClcbiAgICB7XG4gICAgICAgIC8vIGZhaWwsIG5vdCBhYmxlIHRvIGdldCBhIGNvbnRleHRcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdUaGlzIGJyb3dzZXIgZG9lcyBub3Qgc3VwcG9ydCB3ZWJHTC4gVHJ5IHVzaW5nIHRoZSBjYW52YXMgcmVuZGVyZXInKTtcbiAgICB9XG5cbiAgICAvLyBtaWdodCB3YW50IHRvIHBoYXNlIHRoaXMgb3V0P1xuICAgIGdsLmlkID0gQ09OVEVYVF9VSUQrKztcblxuICAgIHJldHVybiBnbDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBjcmVhdGVDb250ZXh0O1xuXG4iLCIvKipcbiAqIEdlbmVyaWMgTWFzayBTdGFjayBkYXRhIHN0cnVjdHVyZVxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICovXG5cbnZhciBHTF9NQVAgPSB7fTtcblxuXG52YXIgc2V0VmVydGV4QXR0cmliQXJyYXlzID0gZnVuY3Rpb24gKGdsLCBhdHRyaWJzKVxue1x0XG4gICAvLyBjb25zb2xlLmxvZyhnbC5pZClcbiAgICB2YXIgZGF0YSA9IEdMX01BUFtnbC5pZF07XG5cbiAgICBpZighZGF0YSlcbiAgICB7XG5cdCAgIHZhciBtYXhBdHRyaWJzID0gZ2wuZ2V0UGFyYW1ldGVyKGdsLk1BWF9WRVJURVhfQVRUUklCUyk7XG5cdFx0ZGF0YSA9IEdMX01BUFtnbC5pZF0gPSB7dGVtcEF0dHJpYlN0YXRlOm5ldyBBcnJheShtYXhBdHRyaWJzKVxuXHRcdFx0XHQgXHQgXHRcdCAgICxhdHRyaWJTdGF0ZTpuZXcgQXJyYXkobWF4QXR0cmlicyl9O1xuXHR9XG5cdFxuICAgIHZhciBpLFxuICAgIFx0dGVtcEF0dHJpYlN0YXRlID0gZGF0YS50ZW1wQXR0cmliU3RhdGUsXG4gICAgXHRhdHRyaWJTdGF0ZSA9IGRhdGEuYXR0cmliU3RhdGU7XG5cbiAgICBmb3IgKGkgPSAwOyBpIDwgdGVtcEF0dHJpYlN0YXRlLmxlbmd0aDsgaSsrKVxuICAgIHtcbiAgICAgICAgdGVtcEF0dHJpYlN0YXRlW2ldID0gZmFsc2U7XG4gICAgfVxuXG4gICAgLy8gc2V0IHRoZSBuZXcgYXR0cmlic1xuICAgIGZvciAoaSBpbiBhdHRyaWJzKVxuICAgIHtcbiAgICAgICAgdGVtcEF0dHJpYlN0YXRlW2F0dHJpYnNbaV0ubG9jYXRpb25dID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBmb3IgKGkgPSAxOyBpIDwgYXR0cmliU3RhdGUubGVuZ3RoOyBpKyspXG4gICAge1xuICAgICAgICBpZiAoYXR0cmliU3RhdGVbaV0gIT09IHRlbXBBdHRyaWJTdGF0ZVtpXSlcbiAgICAgICAge1xuICAgICAgICAgICAgYXR0cmliU3RhdGVbaV0gPSB0ZW1wQXR0cmliU3RhdGVbaV07XG5cbiAgICAgICAgICAgIGlmIChkYXRhLmF0dHJpYlN0YXRlW2ldKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGdsLmVuYWJsZVZlcnRleEF0dHJpYkFycmF5KGkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGdsLmRpc2FibGVWZXJ0ZXhBdHRyaWJBcnJheShpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn07XG5cbm1vZHVsZS5leHBvcnRzID0gc2V0VmVydGV4QXR0cmliQXJyYXlzOyIsIlxuXG5cblxuY29tcGlsZVByb2dyYW0gPSBmdW5jdGlvbihnbCwgdmVydGV4U3JjLCBmcmFnbWVudFNyYylcbntcbiAgICB2YXIgZ2xWZXJ0U2hhZGVyID0gY29tcGlsZVNoYWRlcihnbCwgZ2wuVkVSVEVYX1NIQURFUiwgdmVydGV4U3JjKTtcbiAgICB2YXIgZ2xGcmFnU2hhZGVyID0gY29tcGlsZVNoYWRlcihnbCwgZ2wuRlJBR01FTlRfU0hBREVSLCBmcmFnbWVudFNyYyk7XG5cbiAgICB2YXIgcHJvZ3JhbSA9IGdsLmNyZWF0ZVByb2dyYW0oKTtcblxuICAgIGdsLmF0dGFjaFNoYWRlcihwcm9ncmFtLCBnbFZlcnRTaGFkZXIpO1xuICAgIGdsLmF0dGFjaFNoYWRlcihwcm9ncmFtLCBnbEZyYWdTaGFkZXIpO1xuICAgIGdsLmxpbmtQcm9ncmFtKHByb2dyYW0pO1xuXG4gICAgLy8gaWYgbGlua2luZyBmYWlscywgdGhlbiBsb2cgYW5kIGNsZWFudXBcbiAgICBpZiAoIWdsLmdldFByb2dyYW1QYXJhbWV0ZXIocHJvZ3JhbSwgZ2wuTElOS19TVEFUVVMpKVxuICAgIHtcbiAgICAgICAgY29uc29sZS5lcnJvcignUGl4aS5qcyBFcnJvcjogQ291bGQgbm90IGluaXRpYWxpemUgc2hhZGVyLicpO1xuICAgICAgICBjb25zb2xlLmVycm9yKCdnbC5WQUxJREFURV9TVEFUVVMnLCBnbC5nZXRQcm9ncmFtUGFyYW1ldGVyKHByb2dyYW0sIGdsLlZBTElEQVRFX1NUQVRVUykpO1xuICAgICAgICBjb25zb2xlLmVycm9yKCdnbC5nZXRFcnJvcigpJywgZ2wuZ2V0RXJyb3IoKSk7XG5cbiAgICAgICAgLy8gaWYgdGhlcmUgaXMgYSBwcm9ncmFtIGluZm8gbG9nLCBsb2cgaXRcbiAgICAgICAgaWYgKGdsLmdldFByb2dyYW1JbmZvTG9nKHByb2dyYW0pICE9PSAnJylcbiAgICAgICAge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKCdQaXhpLmpzIFdhcm5pbmc6IGdsLmdldFByb2dyYW1JbmZvTG9nKCknLCBnbC5nZXRQcm9ncmFtSW5mb0xvZyhwcm9ncmFtKSk7XG4gICAgICAgIH1cblxuICAgICAgICBnbC5kZWxldGVQcm9ncmFtKHByb2dyYW0pO1xuICAgICAgICBwcm9ncmFtID0gbnVsbDtcbiAgICB9XG5cbiAgICAvLyBjbGVhbiB1cCBzb21lIHNoYWRlcnNcbiAgICBnbC5kZWxldGVTaGFkZXIoZ2xWZXJ0U2hhZGVyKTtcbiAgICBnbC5kZWxldGVTaGFkZXIoZ2xGcmFnU2hhZGVyKTtcblxuICAgIHJldHVybiBwcm9ncmFtO1xufVxuXG52YXIgY29tcGlsZVNoYWRlciA9IGZ1bmN0aW9uIChnbCwgdHlwZSwgc3JjKVxue1xuICAgIHZhciBzaGFkZXIgPSBnbC5jcmVhdGVTaGFkZXIodHlwZSk7XG5cbiAgICBnbC5zaGFkZXJTb3VyY2Uoc2hhZGVyLCBzcmMpO1xuICAgIGdsLmNvbXBpbGVTaGFkZXIoc2hhZGVyKTtcblxuICAgIGlmICghZ2wuZ2V0U2hhZGVyUGFyYW1ldGVyKHNoYWRlciwgZ2wuQ09NUElMRV9TVEFUVVMpKVxuICAgIHtcbiAgICAgICAgY29uc29sZS5sb2coZ2wuZ2V0U2hhZGVySW5mb0xvZyhzaGFkZXIpKTtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgcmV0dXJuIHNoYWRlcjtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gY29tcGlsZVByb2dyYW07XG5cbiIsIlxuXG52YXIgZGVmYXVsdFZhbHVlID0gZnVuY3Rpb24odHlwZSwgc2l6ZSkgXG57XG4gICAgc3dpdGNoICh0eXBlKVxuICAgIHtcbiAgICAgICAgY2FzZSAnZmxvYXQnOlxuICAgICAgICAgICAgcmV0dXJuIDA7XG5cbiAgICAgICAgY2FzZSAndmVjMic6IFxuICAgICAgICAgICAgcmV0dXJuIG5ldyBGbG9hdDMyQXJyYXkoMiAqIHNpemUpO1xuXG4gICAgICAgIGNhc2UgJ3ZlYzMnOlxuICAgICAgICAgICAgcmV0dXJuIG5ldyBGbG9hdDMyQXJyYXkoMyAqIHNpemUpO1xuXG4gICAgICAgIGNhc2UgJ3ZlYzQnOiAgICAgXG4gICAgICAgICAgICByZXR1cm4gbmV3IEZsb2F0MzJBcnJheSg0ICogc2l6ZSk7XG4gICAgICAgICAgICBcbiAgICAgICAgY2FzZSAnaW50JzpcbiAgICAgICAgY2FzZSAnc2FtcGxlcjJEJzpcbiAgICAgICAgICAgIHJldHVybiAwO1xuXG4gICAgICAgIGNhc2UgJ2l2ZWMyJzogICBcbiAgICAgICAgICAgIHJldHVybiBuZXcgSW50MzJBcnJheSgyICogc2l6ZSk7XG5cbiAgICAgICAgY2FzZSAnaXZlYzMnOlxuICAgICAgICAgICAgcmV0dXJuIG5ldyBJbnQzMkFycmF5KDMgKiBzaXplKTtcblxuICAgICAgICBjYXNlICdpdmVjNCc6IFxuICAgICAgICAgICAgcmV0dXJuIG5ldyBJbnQzMkFycmF5KDQgKiBzaXplKTtcblxuICAgICAgICBjYXNlICdib29sJzogICAgIFxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuXG4gICAgICAgIGNhc2UgJ2J2ZWMyJzpcblxuICAgICAgICAgICAgcmV0dXJuIGJvb2xlYW5BcnJheSggMiAqIHNpemUpO1xuXG4gICAgICAgIGNhc2UgJ2J2ZWMzJzpcbiAgICAgICAgICAgIHJldHVybiBib29sZWFuQXJyYXkoMyAqIHNpemUpO1xuXG4gICAgICAgIGNhc2UgJ2J2ZWM0JzpcbiAgICAgICAgICAgIHJldHVybiBib29sZWFuQXJyYXkoNCAqIHNpemUpO1xuXG4gICAgICAgIGNhc2UgJ21hdDInOlxuICAgICAgICAgICAgcmV0dXJuIG5ldyBGbG9hdDMyQXJyYXkoWzEsIDBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwwLCAxXSk7XG5cbiAgICAgICAgY2FzZSAnbWF0Myc6IFxuICAgICAgICAgICAgcmV0dXJuIG5ldyBGbG9hdDMyQXJyYXkoWzEsIDAsIDBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwwLCAxLCAwXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsMCwgMCwgMV0pO1xuXG4gICAgICAgIGNhc2UgJ21hdDQnOlxuICAgICAgICAgICAgcmV0dXJuIG5ldyBGbG9hdDMyQXJyYXkoWzEsIDAsIDAsIDBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwwLCAxLCAwLCAwXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsMCwgMCwgMSwgMFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLDAsIDAsIDAsIDFdKTtcbiAgICB9XG59XG5cbnZhciBib29sZWFuQXJyYXkgPSBmdW5jdGlvbihzaXplKVxue1xuICAgIHZhciBhcnJheSA9IG5ldyBBcnJheShzaXplKTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXJyYXkubGVuZ3RoOyBpKyspIFxuICAgIHtcbiAgICAgICAgYXJyYXlbaV0gPSBmYWxzZTtcbiAgICB9O1xuXG4gICAgcmV0dXJuIGFycmF5O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGRlZmF1bHRWYWx1ZTtcbiIsIlxudmFyIG1hcFR5cGUgPSByZXF1aXJlKCcuL21hcFR5cGUnKTtcbnZhciBtYXBTaXplID0gcmVxdWlyZSgnLi9tYXBTaXplJyk7XG5cbnZhciBleHRyYWN0QXR0cmlidXRlcyA9IGZ1bmN0aW9uKGdsLCBwcm9ncmFtKVxue1xuICAgIHZhciBhdHRyaWJ1dGVzID0ge307XG5cbiAgICB2YXIgdG90YWxBdHRyaWJ1dGVzID0gZ2wuZ2V0UHJvZ3JhbVBhcmFtZXRlcihwcm9ncmFtLCBnbC5BQ1RJVkVfQVRUUklCVVRFUylcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdG90YWxBdHRyaWJ1dGVzOyBpKyspIFxuICAgIHtcbiAgICAgICAgdmFyIGF0dHJpYkRhdGEgPSBnbC5nZXRBY3RpdmVBdHRyaWIocHJvZ3JhbSwgaSk7XG4gICAgICAgIHZhciB0eXBlID0gbWFwVHlwZShnbCwgYXR0cmliRGF0YS50eXBlKTtcblxuICAgICAgICBhdHRyaWJ1dGVzW2F0dHJpYkRhdGEubmFtZV0gPSB7XG4gICAgICAgICAgICB0eXBlOnR5cGUsXG4gICAgICAgICAgICBzaXplOm1hcFNpemUodHlwZSksXG4gICAgICAgICAgICBsb2NhdGlvbjpnbC5nZXRBdHRyaWJMb2NhdGlvbihwcm9ncmFtLCBhdHRyaWJEYXRhLm5hbWUpLFxuICAgICAgICAgICAgLy9UT0RPIC0gbWFrZSBhbiBhdHRyaWJ1dGUgb2JqZWN0XG4gICAgICAgICAgICBwb2ludGVyOmZ1bmN0aW9uKHR5cGUsIG5vcm1hbGl6ZWQsIHN0cmlkZSwgc3RhcnQpe1xuXG4gICAgICAgICAgICAgLy8gICBjb25zb2xlLmxvZyh0aGlzLmxvY2F0aW9uKVxuICAgICAgICAgICAgICAgIGdsLnZlcnRleEF0dHJpYlBvaW50ZXIodGhpcy5sb2NhdGlvbix0aGlzLnNpemUsIHR5cGUgfHwgZ2wuRkxPQVQsIG5vcm1hbGl6ZWQgfHwgZmFsc2UsIHN0cmlkZSB8fCAwLCBzdGFydCB8fCAwKTsgXG5cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH07XG5cbiAgICByZXR1cm4gYXR0cmlidXRlczsgIFxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGV4dHJhY3RBdHRyaWJ1dGVzO1xuXG4iLCJ2YXIgbWFwVHlwZSA9IHJlcXVpcmUoJy4vbWFwVHlwZScpO1xudmFyIGRlZmF1bHRWYWx1ZSA9IHJlcXVpcmUoJy4vZGVmYXVsdFZhbHVlJyk7XG5cblxudmFyIGV4dHJhY3RVbmlmb3JtcyA9IGZ1bmN0aW9uKGdsLCBwcm9ncmFtKVxue1xuXHR2YXIgdW5pZm9ybXMgPSB7fTtcblx0XG4gICAgdmFyIHRvdGFsVW5pZm9ybXMgPSBnbC5nZXRQcm9ncmFtUGFyYW1ldGVyKHByb2dyYW0sIGdsLkFDVElWRV9VTklGT1JNUylcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdG90YWxVbmlmb3JtczsgaSsrKSBcbiAgICB7XG4gICAgXHR2YXIgdW5pZm9ybURhdGEgPSBnbC5nZXRBY3RpdmVVbmlmb3JtKHByb2dyYW0sIGkpO1xuICAgIFx0dmFyIG5hbWUgPSB1bmlmb3JtRGF0YS5uYW1lLnJlcGxhY2UoL1xcWy4qP1xcXS8sIFwiXCIpO1xuICAgICAgICB2YXIgdHlwZSA9IG1hcFR5cGUoZ2wsIHVuaWZvcm1EYXRhLnR5cGUgKTtcblxuICAgIFx0dW5pZm9ybXNbbmFtZV0gPSB7XG4gICAgXHRcdHR5cGU6dHlwZSxcbiAgICBcdFx0c2l6ZTp1bmlmb3JtRGF0YS5zaXplLFxuICAgIFx0XHRsb2NhdGlvbjpnbC5nZXRVbmlmb3JtTG9jYXRpb24ocHJvZ3JhbSwgbmFtZSksXG4gICAgXHRcdHZhbHVlOmRlZmF1bHRWYWx1ZSh0eXBlLCB1bmlmb3JtRGF0YS5zaXplKVxuICAgIFx0fVxuICAgIH07XG5cdFxuXHRyZXR1cm4gdW5pZm9ybXM7XHRcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBleHRyYWN0VW5pZm9ybXM7XG5cbiIsIlxudmFyIGdlbmVyYXRlVW5pZm9ybUFjY2Vzc09iamVjdCA9IGZ1bmN0aW9uKGdsLCB1bmlmb3JtRGF0YSlcbntcbiAgICAvLyB0aGlzIGlzIHRoZSBvYmplY3Qgd2Ugd2lsbCBiZSBzZW5kaW5nIGJhY2suXG4gICAgLy8gYW4gb2JqZWN0IGhpZXJhY2h5IHdpbGwgYmUgY3JlYXRlZCBmb3Igc3RydWN0c1xuICAgIHZhciB1bmlmb3JtcyA9IHtkYXRhOnt9fTtcblxuICAgIHVuaWZvcm1zLmdsID0gZ2w7XG4gICAgXG4gICAgdmFyIHVuaWZvcm1LZXlzPSBPYmplY3Qua2V5cyh1bmlmb3JtRGF0YSk7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHVuaWZvcm1LZXlzLmxlbmd0aDsgaSsrKSBcbiAgICB7XG4gICAgICAgIHZhciBmdWxsTmFtZSA9IHVuaWZvcm1LZXlzW2ldXG5cbiAgICAgICAgdmFyIG5hbWVUb2tlbnMgPSBmdWxsTmFtZS5zcGxpdCgnLicpO1xuICAgICAgICB2YXIgbmFtZSA9IG5hbWVUb2tlbnNbbmFtZVRva2Vucy5sZW5ndGggLSAxXTtcblxuICAgICAgICB2YXIgdW5pZm9ybUdyb3VwID0gZ2V0VW5pZm9ybUdyb3VwKG5hbWVUb2tlbnMsIHVuaWZvcm1zKTtcblxuICAgICAgICB2YXIgdW5pZm9ybSA9ICB1bmlmb3JtRGF0YVtmdWxsTmFtZV07XG4gICAgICAgIHVuaWZvcm1Hcm91cC5kYXRhW25hbWVdID0gdW5pZm9ybTtcblxuICAgICAgICB1bmlmb3JtR3JvdXAuZ2wgPSBnbDtcblxuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodW5pZm9ybUdyb3VwLCBuYW1lLCB7XG4gICAgICAgICAgICBnZXQ6IGdlbmVyYXRlR2V0dGVyKG5hbWUpLFxuICAgICAgICAgICAgc2V0OiBnZW5lcmF0ZVNldHRlcihuYW1lLCB1bmlmb3JtKVxuICAgICAgICB9KVxuICAgIH07XG5cbiAgICByZXR1cm4gdW5pZm9ybXM7XG59XG5cbnZhciBnZW5lcmF0ZUdldHRlciA9IGZ1bmN0aW9uKG5hbWUpXG57XG5cdHZhciB0ZW1wbGF0ZSA9IGdldHRlclRlbXBsYXRlLnJlcGxhY2UoJyUlJywgbmFtZSk7XG5cdHJldHVybiBuZXcgRnVuY3Rpb24odGVtcGxhdGUpO1xufVxuXG52YXIgZ2VuZXJhdGVTZXR0ZXIgPSBmdW5jdGlvbihuYW1lLCB1bmlmb3JtKVxue1xuICAgIHZhciB0ZW1wbGF0ZSA9IHNldHRlclRlbXBsYXRlLnJlcGxhY2UoLyUlL2csIG5hbWUpO1xuICAgIHZhciBzZXRUZW1wbGF0ZVxuICAgIFxuICAgIGlmKHVuaWZvcm0uc2l6ZSA9PT0gMSlcbiAgICB7XG4gICAgICAgIHNldFRlbXBsYXRlID0gR0xTTF9UT19TSU5HTEVfU0VUVEVSU1t1bmlmb3JtLnR5cGVdO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICBzZXRUZW1wbGF0ZSA9IEdMU0xfVE9fQVJSQVlfU0VUVEVSU1t1bmlmb3JtLnR5cGVdO1xuICAgIH1cblxuICAgIGlmKHNldFRlbXBsYXRlKVxuICAgIHtcbiAgICAgICAgdGVtcGxhdGUgKz0gXCJcXG50aGlzLmdsLlwiICsgc2V0VGVtcGxhdGUgKyBcIjtcIjtcbiAgICB9XG5cbiAgXHRyZXR1cm4gbmV3IEZ1bmN0aW9uKCd2YWx1ZScsIHRlbXBsYXRlKTtcbn1cblxudmFyIGdldFVuaWZvcm1Hcm91cCA9IGZ1bmN0aW9uKG5hbWVUb2tlbnMsIHVuaWZvcm0pXG57XG4gICAgdmFyIGN1ciA9IHVuaWZvcm07XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG5hbWVUb2tlbnMubGVuZ3RoIC0gMTsgaSsrKSBcbiAgICB7XG4gICAgICAgIHZhciBvID0gY3VyW25hbWVUb2tlbnNbaV1dIHx8IHtkYXRhOnt9fTtcbiAgICAgICAgY3VyW25hbWVUb2tlbnNbaV1dID0gbztcbiAgICAgICAgY3VyID0gbztcbiAgICB9O1xuXG4gICAgcmV0dXJuIGN1clxufVxuXG52YXIgZ2V0dGVyVGVtcGxhdGUgPSBbXG4gICAgJ3JldHVybiB0aGlzLmRhdGEuJSUudmFsdWU7Jyxcbl0uam9pbignXFxuJyk7XG5cbnZhciBzZXR0ZXJUZW1wbGF0ZSA9IFtcbiAgICAndGhpcy5kYXRhLiUlLnZhbHVlID0gdmFsdWU7JyxcbiAgICAndmFyIGxvY2F0aW9uID0gdGhpcy5kYXRhLiUlLmxvY2F0aW9uOydcbl0uam9pbignXFxuJyk7XG5cblxudmFyIEdMU0xfVE9fU0lOR0xFX1NFVFRFUlMgPSB7XG5cbiAgICAnZmxvYXQnOiAgICAndW5pZm9ybTFmKGxvY2F0aW9uLCB2YWx1ZSknLFxuXG4gICAgJ3ZlYzInOiAgICAgJ3VuaWZvcm0yZihsb2NhdGlvbiwgdmFsdWVbMF0sIHZhbHVlWzFdKScsXG4gICAgJ3ZlYzMnOiAgICAgJ3VuaWZvcm0zZihsb2NhdGlvbiwgdmFsdWVbMF0sIHZhbHVlWzFdLCB2YWx1ZVsyXSknLFxuICAgICd2ZWM0JzogICAgICd1bmlmb3JtNGYobG9jYXRpb24sIHZhbHVlWzBdLCB2YWx1ZVsxXSwgdmFsdWVbMl0sIHZhbHVlWzNdKScsXG4gICAgXHRcbiAgICAnaW50JzogICAgICAndW5pZm9ybTFpKGxvY2F0aW9uLCB2YWx1ZSknLFxuICAgICdpdmVjMic6ICAgICd1bmlmb3JtMmkobG9jYXRpb24sIHZhbHVlWzBdLCB2YWx1ZVsxXSknLFxuICAgICdpdmVjMyc6ICAgICd1bmlmb3JtM2kobG9jYXRpb24sIHZhbHVlWzBdLCB2YWx1ZVsxXSwgdmFsdWVbMl0pJyxcbiAgICAnaXZlYzQnOiAgICAndW5pZm9ybTRpKGxvY2F0aW9uLCB2YWx1ZVswXSwgdmFsdWVbMV0sIHZhbHVlWzJdLCB2YWx1ZVszXSknLFxuXG4gICAgJ2Jvb2wnOiAgICAgJ3VuaWZvcm0xaShsb2NhdGlvbiwgdmFsdWUpJyxcbiAgICAnYnZlYzInOiAgICAndW5pZm9ybTJpKGxvY2F0aW9uLCB2YWx1ZVswXSwgdmFsdWVbMV0pJyxcbiAgICAnYnZlYzMnOiAgICAndW5pZm9ybTNpKGxvY2F0aW9uLCB2YWx1ZVswXSwgdmFsdWVbMV0sIHZhbHVlWzJdKScsXG4gICAgJ2J2ZWM0JzogICAgJ3VuaWZvcm00aShsb2NhdGlvbiwgdmFsdWVbMF0sIHZhbHVlWzFdLCB2YWx1ZVsyXSwgdmFsdWVbM10pJyxcblxuICAgICdtYXQyJzogICAgICd1bmlmb3JtTWF0cml4MmZ2KGxvY2F0aW9uLCBmYWxzZSwgdmFsdWUpJyxcbiAgICAnbWF0Myc6ICAgICAndW5pZm9ybU1hdHJpeDNmdihsb2NhdGlvbiwgZmFsc2UsIHZhbHVlKScsXG4gICAgJ21hdDQnOiAgICAgJ3VuaWZvcm1NYXRyaXg0ZnYobG9jYXRpb24sIGZhbHNlLCB2YWx1ZSknLFxuXG4gICAgJ3NhbXBsZXIyRCc6J3VuaWZvcm0xaShsb2NhdGlvbiwgdmFsdWUpJ1xufVxuXG52YXIgR0xTTF9UT19BUlJBWV9TRVRURVJTID0ge1xuXG4gICAgJ2Zsb2F0JzogICAgJ3VuaWZvcm0xZnYobG9jYXRpb24sIHZhbHVlKScsXG5cbiAgICAndmVjMic6ICAgICAndW5pZm9ybTJmdihsb2NhdGlvbiwgdmFsdWUpJyxcbiAgICAndmVjMyc6ICAgICAndW5pZm9ybTNmdihsb2NhdGlvbiwgdmFsdWUpJyxcbiAgICAndmVjNCc6ICAgICAndW5pZm9ybTRmdihsb2NhdGlvbiwgdmFsdWUpJyxcbiAgICBcdFxuICAgICdpbnQnOiAgICAgICd1bmlmb3JtMWl2KGxvY2F0aW9uLCB2YWx1ZSknLFxuICAgICdpdmVjMic6ICAgICd1bmlmb3JtMml2KGxvY2F0aW9uLCB2YWx1ZSknLFxuICAgICdpdmVjMyc6ICAgICd1bmlmb3JtM2l2KGxvY2F0aW9uLCB2YWx1ZSknLFxuICAgICdpdmVjNCc6ICAgICd1bmlmb3JtNGl2KGxvY2F0aW9uLCB2YWx1ZSknLFxuXG4gICAgJ2Jvb2wnOiAgICAgJ3VuaWZvcm0xaXYobG9jYXRpb24sIHZhbHVlKScsXG4gICAgJ2J2ZWMyJzogICAgJ3VuaWZvcm0yaXYobG9jYXRpb24sIHZhbHVlKScsXG4gICAgJ2J2ZWMzJzogICAgJ3VuaWZvcm0zaXYobG9jYXRpb24sIHZhbHVlKScsXG4gICAgJ2J2ZWM0JzogICAgJ3VuaWZvcm00aXYobG9jYXRpb24sIHZhbHVlKScsXG4gICBcbiAgICAnc2FtcGxlcjJEJzondW5pZm9ybTFpdihsb2NhdGlvbiwgdmFsdWUpJ1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGdlbmVyYXRlVW5pZm9ybUFjY2Vzc09iamVjdDtcblxuIiwiXG5cbnZhciBtYXBTaXplID0gZnVuY3Rpb24odHlwZSkgXG57IFxuICAgIHJldHVybiBHTFNMX1RPX1NJWkVbdHlwZV07XG59XG5cblxudmFyIEdMU0xfVE9fU0laRSA9IHtcbiAgICAnZmxvYXQnOiAgICAxLFxuICAgICd2ZWMyJzogICAgIDIsXG4gICAgJ3ZlYzMnOiAgICAgMyxcbiAgICAndmVjNCc6ICAgICA0LFxuXG4gICAgJ2ludCc6ICAgICAgMSxcbiAgICAnaXZlYzInOiAgICAyLFxuICAgICdpdmVjMyc6ICAgIDMsXG4gICAgJ2l2ZWM0JzogICAgNCxcblxuICAgICdib29sJzogICAgIDEsXG4gICAgJ2J2ZWMyJzogICAgMixcbiAgICAnYnZlYzMnOiAgICAzLFxuICAgICdidmVjNCc6ICAgIDQsXG5cbiAgICAnbWF0Mic6ICAgICA0LFxuICAgICdtYXQzJzogICAgIDksXG4gICAgJ21hdDQnOiAgICAgMTYsXG5cbiAgICAnc2FtcGxlcjJEJzogIDFcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBtYXBTaXplO1xuIiwiXG5cbnZhciBtYXBTaXplID0gZnVuY3Rpb24oZ2wsIHR5cGUpIFxue1xuICAgIGlmKCFHTF9UQUJMRSkgXG4gICAge1xuICAgICAgICB2YXIgdHlwZU5hbWVzID0gT2JqZWN0LmtleXMoR0xfVE9fR0xTTF9UWVBFUyk7XG5cbiAgICAgICAgR0xfVEFCTEUgPSB7fTtcblxuICAgICAgICBmb3IodmFyIGkgPSAwOyBpIDwgdHlwZU5hbWVzLmxlbmd0aDsgKytpKSBcbiAgICAgICAge1xuICAgICAgICAgICAgdmFyIHRuID0gdHlwZU5hbWVzW2ldO1xuICAgICAgICAgICAgR0xfVEFCTEVbIGdsW3RuXSBdID0gR0xfVE9fR0xTTF9UWVBFU1t0bl07XG4gICAgICAgIH1cbiAgICB9XG5cbiAgcmV0dXJuIEdMX1RBQkxFW3R5cGVdO1xufVxuXG52YXIgR0xfVEFCTEUgPSBudWxsO1xuXG52YXIgR0xfVE9fR0xTTF9UWVBFUyA9IHtcbiAgJ0ZMT0FUJzogICAgICAgJ2Zsb2F0JyxcbiAgJ0ZMT0FUX1ZFQzInOiAgJ3ZlYzInLFxuICAnRkxPQVRfVkVDMyc6ICAndmVjMycsXG4gICdGTE9BVF9WRUM0JzogICd2ZWM0JyxcblxuICAnSU5UJzogICAgICAgICAnaW50JyxcbiAgJ0lOVF9WRUMyJzogICAgJ2l2ZWMyJyxcbiAgJ0lOVF9WRUMzJzogICAgJ2l2ZWMzJyxcbiAgJ0lOVF9WRUM0JzogICAgJ2l2ZWM0JyxcbiAgXG4gICdCT09MJzogICAgICAgICdib29sJyxcbiAgJ0JPT0xfVkVDMic6ICAgJ2J2ZWMyJyxcbiAgJ0JPT0xfVkVDMyc6ICAgJ2J2ZWMzJyxcbiAgJ0JPT0xfVkVDNCc6ICAgJ2J2ZWM0JyxcbiAgXG4gICdGTE9BVF9NQVQyJzogICdtYXQyJyxcbiAgJ0ZMT0FUX01BVDMnOiAgJ21hdDMnLFxuICAnRkxPQVRfTUFUNCc6ICAnbWF0NCcsXG4gIFxuICAnU0FNUExFUl8yRCc6ICAnc2FtcGxlcjJEJyAgXG59XG5cbm1vZHVsZS5leHBvcnRzID0gbWFwU2l6ZTtcbiIsIi8qIVxuICogYXN5bmNcbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS9jYW9sYW4vYXN5bmNcbiAqXG4gKiBDb3B5cmlnaHQgMjAxMC0yMDE0IENhb2xhbiBNY01haG9uXG4gKiBSZWxlYXNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2VcbiAqL1xuKGZ1bmN0aW9uICgpIHtcblxuICAgIHZhciBhc3luYyA9IHt9O1xuICAgIGZ1bmN0aW9uIG5vb3AoKSB7fVxuICAgIGZ1bmN0aW9uIGlkZW50aXR5KHYpIHtcbiAgICAgICAgcmV0dXJuIHY7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHRvQm9vbCh2KSB7XG4gICAgICAgIHJldHVybiAhIXY7XG4gICAgfVxuICAgIGZ1bmN0aW9uIG5vdElkKHYpIHtcbiAgICAgICAgcmV0dXJuICF2O1xuICAgIH1cblxuICAgIC8vIGdsb2JhbCBvbiB0aGUgc2VydmVyLCB3aW5kb3cgaW4gdGhlIGJyb3dzZXJcbiAgICB2YXIgcHJldmlvdXNfYXN5bmM7XG5cbiAgICAvLyBFc3RhYmxpc2ggdGhlIHJvb3Qgb2JqZWN0LCBgd2luZG93YCAoYHNlbGZgKSBpbiB0aGUgYnJvd3NlciwgYGdsb2JhbGBcbiAgICAvLyBvbiB0aGUgc2VydmVyLCBvciBgdGhpc2AgaW4gc29tZSB2aXJ0dWFsIG1hY2hpbmVzLiBXZSB1c2UgYHNlbGZgXG4gICAgLy8gaW5zdGVhZCBvZiBgd2luZG93YCBmb3IgYFdlYldvcmtlcmAgc3VwcG9ydC5cbiAgICB2YXIgcm9vdCA9IHR5cGVvZiBzZWxmID09PSAnb2JqZWN0JyAmJiBzZWxmLnNlbGYgPT09IHNlbGYgJiYgc2VsZiB8fFxuICAgICAgICAgICAgdHlwZW9mIGdsb2JhbCA9PT0gJ29iamVjdCcgJiYgZ2xvYmFsLmdsb2JhbCA9PT0gZ2xvYmFsICYmIGdsb2JhbCB8fFxuICAgICAgICAgICAgdGhpcztcblxuICAgIGlmIChyb290ICE9IG51bGwpIHtcbiAgICAgICAgcHJldmlvdXNfYXN5bmMgPSByb290LmFzeW5jO1xuICAgIH1cblxuICAgIGFzeW5jLm5vQ29uZmxpY3QgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJvb3QuYXN5bmMgPSBwcmV2aW91c19hc3luYztcbiAgICAgICAgcmV0dXJuIGFzeW5jO1xuICAgIH07XG5cbiAgICBmdW5jdGlvbiBvbmx5X29uY2UoZm4pIHtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgaWYgKGZuID09PSBudWxsKSB0aHJvdyBuZXcgRXJyb3IoXCJDYWxsYmFjayB3YXMgYWxyZWFkeSBjYWxsZWQuXCIpO1xuICAgICAgICAgICAgZm4uYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICAgICAgICAgIGZuID0gbnVsbDtcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBfb25jZShmbikge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICBpZiAoZm4gPT09IG51bGwpIHJldHVybjtcbiAgICAgICAgICAgIGZuLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgICAgICAgICBmbiA9IG51bGw7XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgLy8vLyBjcm9zcy1icm93c2VyIGNvbXBhdGlibGl0eSBmdW5jdGlvbnMgLy8vL1xuXG4gICAgdmFyIF90b1N0cmluZyA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7XG5cbiAgICB2YXIgX2lzQXJyYXkgPSBBcnJheS5pc0FycmF5IHx8IGZ1bmN0aW9uIChvYmopIHtcbiAgICAgICAgcmV0dXJuIF90b1N0cmluZy5jYWxsKG9iaikgPT09ICdbb2JqZWN0IEFycmF5XSc7XG4gICAgfTtcblxuICAgIC8vIFBvcnRlZCBmcm9tIHVuZGVyc2NvcmUuanMgaXNPYmplY3RcbiAgICB2YXIgX2lzT2JqZWN0ID0gZnVuY3Rpb24ob2JqKSB7XG4gICAgICAgIHZhciB0eXBlID0gdHlwZW9mIG9iajtcbiAgICAgICAgcmV0dXJuIHR5cGUgPT09ICdmdW5jdGlvbicgfHwgdHlwZSA9PT0gJ29iamVjdCcgJiYgISFvYmo7XG4gICAgfTtcblxuICAgIGZ1bmN0aW9uIF9pc0FycmF5TGlrZShhcnIpIHtcbiAgICAgICAgcmV0dXJuIF9pc0FycmF5KGFycikgfHwgKFxuICAgICAgICAgICAgLy8gaGFzIGEgcG9zaXRpdmUgaW50ZWdlciBsZW5ndGggcHJvcGVydHlcbiAgICAgICAgICAgIHR5cGVvZiBhcnIubGVuZ3RoID09PSBcIm51bWJlclwiICYmXG4gICAgICAgICAgICBhcnIubGVuZ3RoID49IDAgJiZcbiAgICAgICAgICAgIGFyci5sZW5ndGggJSAxID09PSAwXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gX2FycmF5RWFjaChhcnIsIGl0ZXJhdG9yKSB7XG4gICAgICAgIHZhciBpbmRleCA9IC0xLFxuICAgICAgICAgICAgbGVuZ3RoID0gYXJyLmxlbmd0aDtcblxuICAgICAgICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgICAgICAgICAgaXRlcmF0b3IoYXJyW2luZGV4XSwgaW5kZXgsIGFycik7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBfbWFwKGFyciwgaXRlcmF0b3IpIHtcbiAgICAgICAgdmFyIGluZGV4ID0gLTEsXG4gICAgICAgICAgICBsZW5ndGggPSBhcnIubGVuZ3RoLFxuICAgICAgICAgICAgcmVzdWx0ID0gQXJyYXkobGVuZ3RoKTtcblxuICAgICAgICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgICAgICAgICAgcmVzdWx0W2luZGV4XSA9IGl0ZXJhdG9yKGFycltpbmRleF0sIGluZGV4LCBhcnIpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gX3JhbmdlKGNvdW50KSB7XG4gICAgICAgIHJldHVybiBfbWFwKEFycmF5KGNvdW50KSwgZnVuY3Rpb24gKHYsIGkpIHsgcmV0dXJuIGk7IH0pO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIF9yZWR1Y2UoYXJyLCBpdGVyYXRvciwgbWVtbykge1xuICAgICAgICBfYXJyYXlFYWNoKGFyciwgZnVuY3Rpb24gKHgsIGksIGEpIHtcbiAgICAgICAgICAgIG1lbW8gPSBpdGVyYXRvcihtZW1vLCB4LCBpLCBhKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBtZW1vO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIF9mb3JFYWNoT2Yob2JqZWN0LCBpdGVyYXRvcikge1xuICAgICAgICBfYXJyYXlFYWNoKF9rZXlzKG9iamVjdCksIGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgICAgIGl0ZXJhdG9yKG9iamVjdFtrZXldLCBrZXkpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBfaW5kZXhPZihhcnIsIGl0ZW0pIHtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcnIubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGlmIChhcnJbaV0gPT09IGl0ZW0pIHJldHVybiBpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiAtMTtcbiAgICB9XG5cbiAgICB2YXIgX2tleXMgPSBPYmplY3Qua2V5cyB8fCBmdW5jdGlvbiAob2JqKSB7XG4gICAgICAgIHZhciBrZXlzID0gW107XG4gICAgICAgIGZvciAodmFyIGsgaW4gb2JqKSB7XG4gICAgICAgICAgICBpZiAob2JqLmhhc093blByb3BlcnR5KGspKSB7XG4gICAgICAgICAgICAgICAga2V5cy5wdXNoKGspO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBrZXlzO1xuICAgIH07XG5cbiAgICBmdW5jdGlvbiBfa2V5SXRlcmF0b3IoY29sbCkge1xuICAgICAgICB2YXIgaSA9IC0xO1xuICAgICAgICB2YXIgbGVuO1xuICAgICAgICB2YXIga2V5cztcbiAgICAgICAgaWYgKF9pc0FycmF5TGlrZShjb2xsKSkge1xuICAgICAgICAgICAgbGVuID0gY29sbC5sZW5ndGg7XG4gICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24gbmV4dCgpIHtcbiAgICAgICAgICAgICAgICBpKys7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGkgPCBsZW4gPyBpIDogbnVsbDtcbiAgICAgICAgICAgIH07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBrZXlzID0gX2tleXMoY29sbCk7XG4gICAgICAgICAgICBsZW4gPSBrZXlzLmxlbmd0aDtcbiAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbiBuZXh0KCkge1xuICAgICAgICAgICAgICAgIGkrKztcbiAgICAgICAgICAgICAgICByZXR1cm4gaSA8IGxlbiA/IGtleXNbaV0gOiBudWxsO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIFNpbWlsYXIgdG8gRVM2J3MgcmVzdCBwYXJhbSAoaHR0cDovL2FyaXlhLm9maWxhYnMuY29tLzIwMTMvMDMvZXM2LWFuZC1yZXN0LXBhcmFtZXRlci5odG1sKVxuICAgIC8vIFRoaXMgYWNjdW11bGF0ZXMgdGhlIGFyZ3VtZW50cyBwYXNzZWQgaW50byBhbiBhcnJheSwgYWZ0ZXIgYSBnaXZlbiBpbmRleC5cbiAgICAvLyBGcm9tIHVuZGVyc2NvcmUuanMgKGh0dHBzOi8vZ2l0aHViLmNvbS9qYXNoa2VuYXMvdW5kZXJzY29yZS9wdWxsLzIxNDApLlxuICAgIGZ1bmN0aW9uIF9yZXN0UGFyYW0oZnVuYywgc3RhcnRJbmRleCkge1xuICAgICAgICBzdGFydEluZGV4ID0gc3RhcnRJbmRleCA9PSBudWxsID8gZnVuYy5sZW5ndGggLSAxIDogK3N0YXJ0SW5kZXg7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIHZhciBsZW5ndGggPSBNYXRoLm1heChhcmd1bWVudHMubGVuZ3RoIC0gc3RhcnRJbmRleCwgMCk7XG4gICAgICAgICAgICB2YXIgcmVzdCA9IEFycmF5KGxlbmd0aCk7XG4gICAgICAgICAgICBmb3IgKHZhciBpbmRleCA9IDA7IGluZGV4IDwgbGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgICAgICAgICAgICAgcmVzdFtpbmRleF0gPSBhcmd1bWVudHNbaW5kZXggKyBzdGFydEluZGV4XTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHN3aXRjaCAoc3RhcnRJbmRleCkge1xuICAgICAgICAgICAgICAgIGNhc2UgMDogcmV0dXJuIGZ1bmMuY2FsbCh0aGlzLCByZXN0KTtcbiAgICAgICAgICAgICAgICBjYXNlIDE6IHJldHVybiBmdW5jLmNhbGwodGhpcywgYXJndW1lbnRzWzBdLCByZXN0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIEN1cnJlbnRseSB1bnVzZWQgYnV0IGhhbmRsZSBjYXNlcyBvdXRzaWRlIG9mIHRoZSBzd2l0Y2ggc3RhdGVtZW50OlxuICAgICAgICAgICAgLy8gdmFyIGFyZ3MgPSBBcnJheShzdGFydEluZGV4ICsgMSk7XG4gICAgICAgICAgICAvLyBmb3IgKGluZGV4ID0gMDsgaW5kZXggPCBzdGFydEluZGV4OyBpbmRleCsrKSB7XG4gICAgICAgICAgICAvLyAgICAgYXJnc1tpbmRleF0gPSBhcmd1bWVudHNbaW5kZXhdO1xuICAgICAgICAgICAgLy8gfVxuICAgICAgICAgICAgLy8gYXJnc1tzdGFydEluZGV4XSA9IHJlc3Q7XG4gICAgICAgICAgICAvLyByZXR1cm4gZnVuYy5hcHBseSh0aGlzLCBhcmdzKTtcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBfd2l0aG91dEluZGV4KGl0ZXJhdG9yKSB7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAodmFsdWUsIGluZGV4LCBjYWxsYmFjaykge1xuICAgICAgICAgICAgcmV0dXJuIGl0ZXJhdG9yKHZhbHVlLCBjYWxsYmFjayk7XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgLy8vLyBleHBvcnRlZCBhc3luYyBtb2R1bGUgZnVuY3Rpb25zIC8vLy9cblxuICAgIC8vLy8gbmV4dFRpY2sgaW1wbGVtZW50YXRpb24gd2l0aCBicm93c2VyLWNvbXBhdGlibGUgZmFsbGJhY2sgLy8vL1xuXG4gICAgLy8gY2FwdHVyZSB0aGUgZ2xvYmFsIHJlZmVyZW5jZSB0byBndWFyZCBhZ2FpbnN0IGZha2VUaW1lciBtb2Nrc1xuICAgIHZhciBfc2V0SW1tZWRpYXRlID0gdHlwZW9mIHNldEltbWVkaWF0ZSA9PT0gJ2Z1bmN0aW9uJyAmJiBzZXRJbW1lZGlhdGU7XG5cbiAgICB2YXIgX2RlbGF5ID0gX3NldEltbWVkaWF0ZSA/IGZ1bmN0aW9uKGZuKSB7XG4gICAgICAgIC8vIG5vdCBhIGRpcmVjdCBhbGlhcyBmb3IgSUUxMCBjb21wYXRpYmlsaXR5XG4gICAgICAgIF9zZXRJbW1lZGlhdGUoZm4pO1xuICAgIH0gOiBmdW5jdGlvbihmbikge1xuICAgICAgICBzZXRUaW1lb3V0KGZuLCAwKTtcbiAgICB9O1xuXG4gICAgaWYgKHR5cGVvZiBwcm9jZXNzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgcHJvY2Vzcy5uZXh0VGljayA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBhc3luYy5uZXh0VGljayA9IHByb2Nlc3MubmV4dFRpY2s7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgYXN5bmMubmV4dFRpY2sgPSBfZGVsYXk7XG4gICAgfVxuICAgIGFzeW5jLnNldEltbWVkaWF0ZSA9IF9zZXRJbW1lZGlhdGUgPyBfZGVsYXkgOiBhc3luYy5uZXh0VGljaztcblxuXG4gICAgYXN5bmMuZm9yRWFjaCA9XG4gICAgYXN5bmMuZWFjaCA9IGZ1bmN0aW9uIChhcnIsIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICByZXR1cm4gYXN5bmMuZWFjaE9mKGFyciwgX3dpdGhvdXRJbmRleChpdGVyYXRvciksIGNhbGxiYWNrKTtcbiAgICB9O1xuXG4gICAgYXN5bmMuZm9yRWFjaFNlcmllcyA9XG4gICAgYXN5bmMuZWFjaFNlcmllcyA9IGZ1bmN0aW9uIChhcnIsIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICByZXR1cm4gYXN5bmMuZWFjaE9mU2VyaWVzKGFyciwgX3dpdGhvdXRJbmRleChpdGVyYXRvciksIGNhbGxiYWNrKTtcbiAgICB9O1xuXG5cbiAgICBhc3luYy5mb3JFYWNoTGltaXQgPVxuICAgIGFzeW5jLmVhY2hMaW1pdCA9IGZ1bmN0aW9uIChhcnIsIGxpbWl0LCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgcmV0dXJuIF9lYWNoT2ZMaW1pdChsaW1pdCkoYXJyLCBfd2l0aG91dEluZGV4KGl0ZXJhdG9yKSwgY2FsbGJhY2spO1xuICAgIH07XG5cbiAgICBhc3luYy5mb3JFYWNoT2YgPVxuICAgIGFzeW5jLmVhY2hPZiA9IGZ1bmN0aW9uIChvYmplY3QsIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICBjYWxsYmFjayA9IF9vbmNlKGNhbGxiYWNrIHx8IG5vb3ApO1xuICAgICAgICBvYmplY3QgPSBvYmplY3QgfHwgW107XG5cbiAgICAgICAgdmFyIGl0ZXIgPSBfa2V5SXRlcmF0b3Iob2JqZWN0KTtcbiAgICAgICAgdmFyIGtleSwgY29tcGxldGVkID0gMDtcblxuICAgICAgICB3aGlsZSAoKGtleSA9IGl0ZXIoKSkgIT0gbnVsbCkge1xuICAgICAgICAgICAgY29tcGxldGVkICs9IDE7XG4gICAgICAgICAgICBpdGVyYXRvcihvYmplY3Rba2V5XSwga2V5LCBvbmx5X29uY2UoZG9uZSkpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGNvbXBsZXRlZCA9PT0gMCkgY2FsbGJhY2sobnVsbCk7XG5cbiAgICAgICAgZnVuY3Rpb24gZG9uZShlcnIpIHtcbiAgICAgICAgICAgIGNvbXBsZXRlZC0tO1xuICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBDaGVjayBrZXkgaXMgbnVsbCBpbiBjYXNlIGl0ZXJhdG9yIGlzbid0IGV4aGF1c3RlZFxuICAgICAgICAgICAgLy8gYW5kIGRvbmUgcmVzb2x2ZWQgc3luY2hyb25vdXNseS5cbiAgICAgICAgICAgIGVsc2UgaWYgKGtleSA9PT0gbnVsbCAmJiBjb21wbGV0ZWQgPD0gMCkge1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrKG51bGwpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfTtcblxuICAgIGFzeW5jLmZvckVhY2hPZlNlcmllcyA9XG4gICAgYXN5bmMuZWFjaE9mU2VyaWVzID0gZnVuY3Rpb24gKG9iaiwgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgIGNhbGxiYWNrID0gX29uY2UoY2FsbGJhY2sgfHwgbm9vcCk7XG4gICAgICAgIG9iaiA9IG9iaiB8fCBbXTtcbiAgICAgICAgdmFyIG5leHRLZXkgPSBfa2V5SXRlcmF0b3Iob2JqKTtcbiAgICAgICAgdmFyIGtleSA9IG5leHRLZXkoKTtcbiAgICAgICAgZnVuY3Rpb24gaXRlcmF0ZSgpIHtcbiAgICAgICAgICAgIHZhciBzeW5jID0gdHJ1ZTtcbiAgICAgICAgICAgIGlmIChrZXkgPT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gY2FsbGJhY2sobnVsbCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpdGVyYXRvcihvYmpba2V5XSwga2V5LCBvbmx5X29uY2UoZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGtleSA9IG5leHRLZXkoKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGtleSA9PT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKG51bGwpO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN5bmMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhc3luYy5zZXRJbW1lZGlhdGUoaXRlcmF0ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZXJhdGUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgIHN5bmMgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBpdGVyYXRlKCk7XG4gICAgfTtcblxuXG5cbiAgICBhc3luYy5mb3JFYWNoT2ZMaW1pdCA9XG4gICAgYXN5bmMuZWFjaE9mTGltaXQgPSBmdW5jdGlvbiAob2JqLCBsaW1pdCwgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgIF9lYWNoT2ZMaW1pdChsaW1pdCkob2JqLCBpdGVyYXRvciwgY2FsbGJhY2spO1xuICAgIH07XG5cbiAgICBmdW5jdGlvbiBfZWFjaE9mTGltaXQobGltaXQpIHtcblxuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKG9iaiwgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICBjYWxsYmFjayA9IF9vbmNlKGNhbGxiYWNrIHx8IG5vb3ApO1xuICAgICAgICAgICAgb2JqID0gb2JqIHx8IFtdO1xuICAgICAgICAgICAgdmFyIG5leHRLZXkgPSBfa2V5SXRlcmF0b3Iob2JqKTtcbiAgICAgICAgICAgIGlmIChsaW1pdCA8PSAwKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKG51bGwpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdmFyIGRvbmUgPSBmYWxzZTtcbiAgICAgICAgICAgIHZhciBydW5uaW5nID0gMDtcbiAgICAgICAgICAgIHZhciBlcnJvcmVkID0gZmFsc2U7XG5cbiAgICAgICAgICAgIChmdW5jdGlvbiByZXBsZW5pc2ggKCkge1xuICAgICAgICAgICAgICAgIGlmIChkb25lICYmIHJ1bm5pbmcgPD0gMCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gY2FsbGJhY2sobnVsbCk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgd2hpbGUgKHJ1bm5pbmcgPCBsaW1pdCAmJiAhZXJyb3JlZCkge1xuICAgICAgICAgICAgICAgICAgICB2YXIga2V5ID0gbmV4dEtleSgpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoa2V5ID09PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBkb25lID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChydW5uaW5nIDw9IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhudWxsKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBydW5uaW5nICs9IDE7XG4gICAgICAgICAgICAgICAgICAgIGl0ZXJhdG9yKG9ialtrZXldLCBrZXksIG9ubHlfb25jZShmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBydW5uaW5nIC09IDE7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvcmVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcGxlbmlzaCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSkoKTtcbiAgICAgICAgfTtcbiAgICB9XG5cblxuICAgIGZ1bmN0aW9uIGRvUGFyYWxsZWwoZm4pIHtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChvYmosIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICAgICAgcmV0dXJuIGZuKGFzeW5jLmVhY2hPZiwgb2JqLCBpdGVyYXRvciwgY2FsbGJhY2spO1xuICAgICAgICB9O1xuICAgIH1cbiAgICBmdW5jdGlvbiBkb1BhcmFsbGVsTGltaXQoZm4pIHtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChvYmosIGxpbWl0LCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIHJldHVybiBmbihfZWFjaE9mTGltaXQobGltaXQpLCBvYmosIGl0ZXJhdG9yLCBjYWxsYmFjayk7XG4gICAgICAgIH07XG4gICAgfVxuICAgIGZ1bmN0aW9uIGRvU2VyaWVzKGZuKSB7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAob2JqLCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIHJldHVybiBmbihhc3luYy5lYWNoT2ZTZXJpZXMsIG9iaiwgaXRlcmF0b3IsIGNhbGxiYWNrKTtcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBfYXN5bmNNYXAoZWFjaGZuLCBhcnIsIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICBjYWxsYmFjayA9IF9vbmNlKGNhbGxiYWNrIHx8IG5vb3ApO1xuICAgICAgICBhcnIgPSBhcnIgfHwgW107XG4gICAgICAgIHZhciByZXN1bHRzID0gX2lzQXJyYXlMaWtlKGFycikgPyBbXSA6IHt9O1xuICAgICAgICBlYWNoZm4oYXJyLCBmdW5jdGlvbiAodmFsdWUsIGluZGV4LCBjYWxsYmFjaykge1xuICAgICAgICAgICAgaXRlcmF0b3IodmFsdWUsIGZ1bmN0aW9uIChlcnIsIHYpIHtcbiAgICAgICAgICAgICAgICByZXN1bHRzW2luZGV4XSA9IHY7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICBjYWxsYmFjayhlcnIsIHJlc3VsdHMpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBhc3luYy5tYXAgPSBkb1BhcmFsbGVsKF9hc3luY01hcCk7XG4gICAgYXN5bmMubWFwU2VyaWVzID0gZG9TZXJpZXMoX2FzeW5jTWFwKTtcbiAgICBhc3luYy5tYXBMaW1pdCA9IGRvUGFyYWxsZWxMaW1pdChfYXN5bmNNYXApO1xuXG4gICAgLy8gcmVkdWNlIG9ubHkgaGFzIGEgc2VyaWVzIHZlcnNpb24sIGFzIGRvaW5nIHJlZHVjZSBpbiBwYXJhbGxlbCB3b24ndFxuICAgIC8vIHdvcmsgaW4gbWFueSBzaXR1YXRpb25zLlxuICAgIGFzeW5jLmluamVjdCA9XG4gICAgYXN5bmMuZm9sZGwgPVxuICAgIGFzeW5jLnJlZHVjZSA9IGZ1bmN0aW9uIChhcnIsIG1lbW8sIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICBhc3luYy5lYWNoT2ZTZXJpZXMoYXJyLCBmdW5jdGlvbiAoeCwgaSwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIGl0ZXJhdG9yKG1lbW8sIHgsIGZ1bmN0aW9uIChlcnIsIHYpIHtcbiAgICAgICAgICAgICAgICBtZW1vID0gdjtcbiAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgIGNhbGxiYWNrKGVyciwgbWVtbyk7XG4gICAgICAgIH0pO1xuICAgIH07XG5cbiAgICBhc3luYy5mb2xkciA9XG4gICAgYXN5bmMucmVkdWNlUmlnaHQgPSBmdW5jdGlvbiAoYXJyLCBtZW1vLCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgdmFyIHJldmVyc2VkID0gX21hcChhcnIsIGlkZW50aXR5KS5yZXZlcnNlKCk7XG4gICAgICAgIGFzeW5jLnJlZHVjZShyZXZlcnNlZCwgbWVtbywgaXRlcmF0b3IsIGNhbGxiYWNrKTtcbiAgICB9O1xuXG4gICAgYXN5bmMudHJhbnNmb3JtID0gZnVuY3Rpb24gKGFyciwgbWVtbywgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAzKSB7XG4gICAgICAgICAgICBjYWxsYmFjayA9IGl0ZXJhdG9yO1xuICAgICAgICAgICAgaXRlcmF0b3IgPSBtZW1vO1xuICAgICAgICAgICAgbWVtbyA9IF9pc0FycmF5KGFycikgPyBbXSA6IHt9O1xuICAgICAgICB9XG5cbiAgICAgICAgYXN5bmMuZWFjaE9mKGFyciwgZnVuY3Rpb24odiwgaywgY2IpIHtcbiAgICAgICAgICAgIGl0ZXJhdG9yKG1lbW8sIHYsIGssIGNiKTtcbiAgICAgICAgfSwgZnVuY3Rpb24oZXJyKSB7XG4gICAgICAgICAgICBjYWxsYmFjayhlcnIsIG1lbW8pO1xuICAgICAgICB9KTtcbiAgICB9O1xuXG4gICAgZnVuY3Rpb24gX2ZpbHRlcihlYWNoZm4sIGFyciwgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgIHZhciByZXN1bHRzID0gW107XG4gICAgICAgIGVhY2hmbihhcnIsIGZ1bmN0aW9uICh4LCBpbmRleCwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIGl0ZXJhdG9yKHgsIGZ1bmN0aW9uICh2KSB7XG4gICAgICAgICAgICAgICAgaWYgKHYpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0cy5wdXNoKHtpbmRleDogaW5kZXgsIHZhbHVlOiB4fSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhbGxiYWNrKCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgY2FsbGJhY2soX21hcChyZXN1bHRzLnNvcnQoZnVuY3Rpb24gKGEsIGIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gYS5pbmRleCAtIGIuaW5kZXg7XG4gICAgICAgICAgICB9KSwgZnVuY3Rpb24gKHgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4geC52YWx1ZTtcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgYXN5bmMuc2VsZWN0ID1cbiAgICBhc3luYy5maWx0ZXIgPSBkb1BhcmFsbGVsKF9maWx0ZXIpO1xuXG4gICAgYXN5bmMuc2VsZWN0TGltaXQgPVxuICAgIGFzeW5jLmZpbHRlckxpbWl0ID0gZG9QYXJhbGxlbExpbWl0KF9maWx0ZXIpO1xuXG4gICAgYXN5bmMuc2VsZWN0U2VyaWVzID1cbiAgICBhc3luYy5maWx0ZXJTZXJpZXMgPSBkb1NlcmllcyhfZmlsdGVyKTtcblxuICAgIGZ1bmN0aW9uIF9yZWplY3QoZWFjaGZuLCBhcnIsIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICBfZmlsdGVyKGVhY2hmbiwgYXJyLCBmdW5jdGlvbih2YWx1ZSwgY2IpIHtcbiAgICAgICAgICAgIGl0ZXJhdG9yKHZhbHVlLCBmdW5jdGlvbih2KSB7XG4gICAgICAgICAgICAgICAgY2IoIXYpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sIGNhbGxiYWNrKTtcbiAgICB9XG4gICAgYXN5bmMucmVqZWN0ID0gZG9QYXJhbGxlbChfcmVqZWN0KTtcbiAgICBhc3luYy5yZWplY3RMaW1pdCA9IGRvUGFyYWxsZWxMaW1pdChfcmVqZWN0KTtcbiAgICBhc3luYy5yZWplY3RTZXJpZXMgPSBkb1NlcmllcyhfcmVqZWN0KTtcblxuICAgIGZ1bmN0aW9uIF9jcmVhdGVUZXN0ZXIoZWFjaGZuLCBjaGVjaywgZ2V0UmVzdWx0KSB7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbihhcnIsIGxpbWl0LCBpdGVyYXRvciwgY2IpIHtcbiAgICAgICAgICAgIGZ1bmN0aW9uIGRvbmUoKSB7XG4gICAgICAgICAgICAgICAgaWYgKGNiKSBjYihnZXRSZXN1bHQoZmFsc2UsIHZvaWQgMCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZnVuY3Rpb24gaXRlcmF0ZWUoeCwgXywgY2FsbGJhY2spIHtcbiAgICAgICAgICAgICAgICBpZiAoIWNiKSByZXR1cm4gY2FsbGJhY2soKTtcbiAgICAgICAgICAgICAgICBpdGVyYXRvcih4LCBmdW5jdGlvbiAodikge1xuICAgICAgICAgICAgICAgICAgICBpZiAoY2IgJiYgY2hlY2sodikpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNiKGdldFJlc3VsdCh0cnVlLCB4KSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBjYiA9IGl0ZXJhdG9yID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID4gMykge1xuICAgICAgICAgICAgICAgIGVhY2hmbihhcnIsIGxpbWl0LCBpdGVyYXRlZSwgZG9uZSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGNiID0gaXRlcmF0b3I7XG4gICAgICAgICAgICAgICAgaXRlcmF0b3IgPSBsaW1pdDtcbiAgICAgICAgICAgICAgICBlYWNoZm4oYXJyLCBpdGVyYXRlZSwgZG9uZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgYXN5bmMuYW55ID1cbiAgICBhc3luYy5zb21lID0gX2NyZWF0ZVRlc3Rlcihhc3luYy5lYWNoT2YsIHRvQm9vbCwgaWRlbnRpdHkpO1xuXG4gICAgYXN5bmMuc29tZUxpbWl0ID0gX2NyZWF0ZVRlc3Rlcihhc3luYy5lYWNoT2ZMaW1pdCwgdG9Cb29sLCBpZGVudGl0eSk7XG5cbiAgICBhc3luYy5hbGwgPVxuICAgIGFzeW5jLmV2ZXJ5ID0gX2NyZWF0ZVRlc3Rlcihhc3luYy5lYWNoT2YsIG5vdElkLCBub3RJZCk7XG5cbiAgICBhc3luYy5ldmVyeUxpbWl0ID0gX2NyZWF0ZVRlc3Rlcihhc3luYy5lYWNoT2ZMaW1pdCwgbm90SWQsIG5vdElkKTtcblxuICAgIGZ1bmN0aW9uIF9maW5kR2V0UmVzdWx0KHYsIHgpIHtcbiAgICAgICAgcmV0dXJuIHg7XG4gICAgfVxuICAgIGFzeW5jLmRldGVjdCA9IF9jcmVhdGVUZXN0ZXIoYXN5bmMuZWFjaE9mLCBpZGVudGl0eSwgX2ZpbmRHZXRSZXN1bHQpO1xuICAgIGFzeW5jLmRldGVjdFNlcmllcyA9IF9jcmVhdGVUZXN0ZXIoYXN5bmMuZWFjaE9mU2VyaWVzLCBpZGVudGl0eSwgX2ZpbmRHZXRSZXN1bHQpO1xuICAgIGFzeW5jLmRldGVjdExpbWl0ID0gX2NyZWF0ZVRlc3Rlcihhc3luYy5lYWNoT2ZMaW1pdCwgaWRlbnRpdHksIF9maW5kR2V0UmVzdWx0KTtcblxuICAgIGFzeW5jLnNvcnRCeSA9IGZ1bmN0aW9uIChhcnIsIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICBhc3luYy5tYXAoYXJyLCBmdW5jdGlvbiAoeCwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIGl0ZXJhdG9yKHgsIGZ1bmN0aW9uIChlcnIsIGNyaXRlcmlhKSB7XG4gICAgICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2sobnVsbCwge3ZhbHVlOiB4LCBjcml0ZXJpYTogY3JpdGVyaWF9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSwgZnVuY3Rpb24gKGVyciwgcmVzdWx0cykge1xuICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAgIHJldHVybiBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2sobnVsbCwgX21hcChyZXN1bHRzLnNvcnQoY29tcGFyYXRvciksIGZ1bmN0aW9uICh4KSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB4LnZhbHVlO1xuICAgICAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICB9KTtcblxuICAgICAgICBmdW5jdGlvbiBjb21wYXJhdG9yKGxlZnQsIHJpZ2h0KSB7XG4gICAgICAgICAgICB2YXIgYSA9IGxlZnQuY3JpdGVyaWEsIGIgPSByaWdodC5jcml0ZXJpYTtcbiAgICAgICAgICAgIHJldHVybiBhIDwgYiA/IC0xIDogYSA+IGIgPyAxIDogMDtcbiAgICAgICAgfVxuICAgIH07XG5cbiAgICBhc3luYy5hdXRvID0gZnVuY3Rpb24gKHRhc2tzLCBjb25jdXJyZW5jeSwgY2FsbGJhY2spIHtcbiAgICAgICAgaWYgKCFjYWxsYmFjaykge1xuICAgICAgICAgICAgLy8gY29uY3VycmVuY3kgaXMgb3B0aW9uYWwsIHNoaWZ0IHRoZSBhcmdzLlxuICAgICAgICAgICAgY2FsbGJhY2sgPSBjb25jdXJyZW5jeTtcbiAgICAgICAgICAgIGNvbmN1cnJlbmN5ID0gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBjYWxsYmFjayA9IF9vbmNlKGNhbGxiYWNrIHx8IG5vb3ApO1xuICAgICAgICB2YXIga2V5cyA9IF9rZXlzKHRhc2tzKTtcbiAgICAgICAgdmFyIHJlbWFpbmluZ1Rhc2tzID0ga2V5cy5sZW5ndGg7XG4gICAgICAgIGlmICghcmVtYWluaW5nVGFza3MpIHtcbiAgICAgICAgICAgIHJldHVybiBjYWxsYmFjayhudWxsKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWNvbmN1cnJlbmN5KSB7XG4gICAgICAgICAgICBjb25jdXJyZW5jeSA9IHJlbWFpbmluZ1Rhc2tzO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIHJlc3VsdHMgPSB7fTtcbiAgICAgICAgdmFyIHJ1bm5pbmdUYXNrcyA9IDA7XG5cbiAgICAgICAgdmFyIGxpc3RlbmVycyA9IFtdO1xuICAgICAgICBmdW5jdGlvbiBhZGRMaXN0ZW5lcihmbikge1xuICAgICAgICAgICAgbGlzdGVuZXJzLnVuc2hpZnQoZm4pO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIHJlbW92ZUxpc3RlbmVyKGZuKSB7XG4gICAgICAgICAgICB2YXIgaWR4ID0gX2luZGV4T2YobGlzdGVuZXJzLCBmbik7XG4gICAgICAgICAgICBpZiAoaWR4ID49IDApIGxpc3RlbmVycy5zcGxpY2UoaWR4LCAxKTtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiB0YXNrQ29tcGxldGUoKSB7XG4gICAgICAgICAgICByZW1haW5pbmdUYXNrcy0tO1xuICAgICAgICAgICAgX2FycmF5RWFjaChsaXN0ZW5lcnMuc2xpY2UoMCksIGZ1bmN0aW9uIChmbikge1xuICAgICAgICAgICAgICAgIGZuKCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGFkZExpc3RlbmVyKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGlmICghcmVtYWluaW5nVGFza3MpIHtcbiAgICAgICAgICAgICAgICBjYWxsYmFjayhudWxsLCByZXN1bHRzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgX2FycmF5RWFjaChrZXlzLCBmdW5jdGlvbiAoaykge1xuICAgICAgICAgICAgdmFyIHRhc2sgPSBfaXNBcnJheSh0YXNrc1trXSkgPyB0YXNrc1trXTogW3Rhc2tzW2tdXTtcbiAgICAgICAgICAgIHZhciB0YXNrQ2FsbGJhY2sgPSBfcmVzdFBhcmFtKGZ1bmN0aW9uKGVyciwgYXJncykge1xuICAgICAgICAgICAgICAgIHJ1bm5pbmdUYXNrcy0tO1xuICAgICAgICAgICAgICAgIGlmIChhcmdzLmxlbmd0aCA8PSAxKSB7XG4gICAgICAgICAgICAgICAgICAgIGFyZ3MgPSBhcmdzWzBdO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBzYWZlUmVzdWx0cyA9IHt9O1xuICAgICAgICAgICAgICAgICAgICBfZm9yRWFjaE9mKHJlc3VsdHMsIGZ1bmN0aW9uKHZhbCwgcmtleSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgc2FmZVJlc3VsdHNbcmtleV0gPSB2YWw7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICBzYWZlUmVzdWx0c1trXSA9IGFyZ3M7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKGVyciwgc2FmZVJlc3VsdHMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0c1trXSA9IGFyZ3M7XG4gICAgICAgICAgICAgICAgICAgIGFzeW5jLnNldEltbWVkaWF0ZSh0YXNrQ29tcGxldGUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdmFyIHJlcXVpcmVzID0gdGFzay5zbGljZSgwLCB0YXNrLmxlbmd0aCAtIDEpO1xuICAgICAgICAgICAgLy8gcHJldmVudCBkZWFkLWxvY2tzXG4gICAgICAgICAgICB2YXIgbGVuID0gcmVxdWlyZXMubGVuZ3RoO1xuICAgICAgICAgICAgdmFyIGRlcDtcbiAgICAgICAgICAgIHdoaWxlIChsZW4tLSkge1xuICAgICAgICAgICAgICAgIGlmICghKGRlcCA9IHRhc2tzW3JlcXVpcmVzW2xlbl1dKSkge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0hhcyBpbmV4aXN0YW50IGRlcGVuZGVuY3knKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKF9pc0FycmF5KGRlcCkgJiYgX2luZGV4T2YoZGVwLCBrKSA+PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignSGFzIGN5Y2xpYyBkZXBlbmRlbmNpZXMnKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmdW5jdGlvbiByZWFkeSgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcnVubmluZ1Rhc2tzIDwgY29uY3VycmVuY3kgJiYgX3JlZHVjZShyZXF1aXJlcywgZnVuY3Rpb24gKGEsIHgpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChhICYmIHJlc3VsdHMuaGFzT3duUHJvcGVydHkoeCkpO1xuICAgICAgICAgICAgICAgIH0sIHRydWUpICYmICFyZXN1bHRzLmhhc093blByb3BlcnR5KGspO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHJlYWR5KCkpIHtcbiAgICAgICAgICAgICAgICBydW5uaW5nVGFza3MrKztcbiAgICAgICAgICAgICAgICB0YXNrW3Rhc2subGVuZ3RoIC0gMV0odGFza0NhbGxiYWNrLCByZXN1bHRzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGFkZExpc3RlbmVyKGxpc3RlbmVyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZ1bmN0aW9uIGxpc3RlbmVyKCkge1xuICAgICAgICAgICAgICAgIGlmIChyZWFkeSgpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJ1bm5pbmdUYXNrcysrO1xuICAgICAgICAgICAgICAgICAgICByZW1vdmVMaXN0ZW5lcihsaXN0ZW5lcik7XG4gICAgICAgICAgICAgICAgICAgIHRhc2tbdGFzay5sZW5ndGggLSAxXSh0YXNrQ2FsbGJhY2ssIHJlc3VsdHMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfTtcblxuXG5cbiAgICBhc3luYy5yZXRyeSA9IGZ1bmN0aW9uKHRpbWVzLCB0YXNrLCBjYWxsYmFjaykge1xuICAgICAgICB2YXIgREVGQVVMVF9USU1FUyA9IDU7XG4gICAgICAgIHZhciBERUZBVUxUX0lOVEVSVkFMID0gMDtcblxuICAgICAgICB2YXIgYXR0ZW1wdHMgPSBbXTtcblxuICAgICAgICB2YXIgb3B0cyA9IHtcbiAgICAgICAgICAgIHRpbWVzOiBERUZBVUxUX1RJTUVTLFxuICAgICAgICAgICAgaW50ZXJ2YWw6IERFRkFVTFRfSU5URVJWQUxcbiAgICAgICAgfTtcblxuICAgICAgICBmdW5jdGlvbiBwYXJzZVRpbWVzKGFjYywgdCl7XG4gICAgICAgICAgICBpZih0eXBlb2YgdCA9PT0gJ251bWJlcicpe1xuICAgICAgICAgICAgICAgIGFjYy50aW1lcyA9IHBhcnNlSW50KHQsIDEwKSB8fCBERUZBVUxUX1RJTUVTO1xuICAgICAgICAgICAgfSBlbHNlIGlmKHR5cGVvZiB0ID09PSAnb2JqZWN0Jyl7XG4gICAgICAgICAgICAgICAgYWNjLnRpbWVzID0gcGFyc2VJbnQodC50aW1lcywgMTApIHx8IERFRkFVTFRfVElNRVM7XG4gICAgICAgICAgICAgICAgYWNjLmludGVydmFsID0gcGFyc2VJbnQodC5pbnRlcnZhbCwgMTApIHx8IERFRkFVTFRfSU5URVJWQUw7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignVW5zdXBwb3J0ZWQgYXJndW1lbnQgdHlwZSBmb3IgXFwndGltZXNcXCc6ICcgKyB0eXBlb2YgdCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgbGVuZ3RoID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgICAgICAgaWYgKGxlbmd0aCA8IDEgfHwgbGVuZ3RoID4gMykge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIGFyZ3VtZW50cyAtIG11c3QgYmUgZWl0aGVyICh0YXNrKSwgKHRhc2ssIGNhbGxiYWNrKSwgKHRpbWVzLCB0YXNrKSBvciAodGltZXMsIHRhc2ssIGNhbGxiYWNrKScpO1xuICAgICAgICB9IGVsc2UgaWYgKGxlbmd0aCA8PSAyICYmIHR5cGVvZiB0aW1lcyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgY2FsbGJhY2sgPSB0YXNrO1xuICAgICAgICAgICAgdGFzayA9IHRpbWVzO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0eXBlb2YgdGltZXMgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIHBhcnNlVGltZXMob3B0cywgdGltZXMpO1xuICAgICAgICB9XG4gICAgICAgIG9wdHMuY2FsbGJhY2sgPSBjYWxsYmFjaztcbiAgICAgICAgb3B0cy50YXNrID0gdGFzaztcblxuICAgICAgICBmdW5jdGlvbiB3cmFwcGVkVGFzayh3cmFwcGVkQ2FsbGJhY2ssIHdyYXBwZWRSZXN1bHRzKSB7XG4gICAgICAgICAgICBmdW5jdGlvbiByZXRyeUF0dGVtcHQodGFzaywgZmluYWxBdHRlbXB0KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKHNlcmllc0NhbGxiYWNrKSB7XG4gICAgICAgICAgICAgICAgICAgIHRhc2soZnVuY3Rpb24oZXJyLCByZXN1bHQpe1xuICAgICAgICAgICAgICAgICAgICAgICAgc2VyaWVzQ2FsbGJhY2soIWVyciB8fCBmaW5hbEF0dGVtcHQsIHtlcnI6IGVyciwgcmVzdWx0OiByZXN1bHR9KTtcbiAgICAgICAgICAgICAgICAgICAgfSwgd3JhcHBlZFJlc3VsdHMpO1xuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGZ1bmN0aW9uIHJldHJ5SW50ZXJ2YWwoaW50ZXJ2YWwpe1xuICAgICAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbihzZXJpZXNDYWxsYmFjayl7XG4gICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKXtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlcmllc0NhbGxiYWNrKG51bGwpO1xuICAgICAgICAgICAgICAgICAgICB9LCBpbnRlcnZhbCk7XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgd2hpbGUgKG9wdHMudGltZXMpIHtcblxuICAgICAgICAgICAgICAgIHZhciBmaW5hbEF0dGVtcHQgPSAhKG9wdHMudGltZXMtPTEpO1xuICAgICAgICAgICAgICAgIGF0dGVtcHRzLnB1c2gocmV0cnlBdHRlbXB0KG9wdHMudGFzaywgZmluYWxBdHRlbXB0KSk7XG4gICAgICAgICAgICAgICAgaWYoIWZpbmFsQXR0ZW1wdCAmJiBvcHRzLmludGVydmFsID4gMCl7XG4gICAgICAgICAgICAgICAgICAgIGF0dGVtcHRzLnB1c2gocmV0cnlJbnRlcnZhbChvcHRzLmludGVydmFsKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBhc3luYy5zZXJpZXMoYXR0ZW1wdHMsIGZ1bmN0aW9uKGRvbmUsIGRhdGEpe1xuICAgICAgICAgICAgICAgIGRhdGEgPSBkYXRhW2RhdGEubGVuZ3RoIC0gMV07XG4gICAgICAgICAgICAgICAgKHdyYXBwZWRDYWxsYmFjayB8fCBvcHRzLmNhbGxiYWNrKShkYXRhLmVyciwgZGF0YS5yZXN1bHQpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBJZiBhIGNhbGxiYWNrIGlzIHBhc3NlZCwgcnVuIHRoaXMgYXMgYSBjb250cm9sbCBmbG93XG4gICAgICAgIHJldHVybiBvcHRzLmNhbGxiYWNrID8gd3JhcHBlZFRhc2soKSA6IHdyYXBwZWRUYXNrO1xuICAgIH07XG5cbiAgICBhc3luYy53YXRlcmZhbGwgPSBmdW5jdGlvbiAodGFza3MsIGNhbGxiYWNrKSB7XG4gICAgICAgIGNhbGxiYWNrID0gX29uY2UoY2FsbGJhY2sgfHwgbm9vcCk7XG4gICAgICAgIGlmICghX2lzQXJyYXkodGFza3MpKSB7XG4gICAgICAgICAgICB2YXIgZXJyID0gbmV3IEVycm9yKCdGaXJzdCBhcmd1bWVudCB0byB3YXRlcmZhbGwgbXVzdCBiZSBhbiBhcnJheSBvZiBmdW5jdGlvbnMnKTtcbiAgICAgICAgICAgIHJldHVybiBjYWxsYmFjayhlcnIpO1xuICAgICAgICB9XG4gICAgICAgIGlmICghdGFza3MubGVuZ3RoKSB7XG4gICAgICAgICAgICByZXR1cm4gY2FsbGJhY2soKTtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiB3cmFwSXRlcmF0b3IoaXRlcmF0b3IpIHtcbiAgICAgICAgICAgIHJldHVybiBfcmVzdFBhcmFtKGZ1bmN0aW9uIChlcnIsIGFyZ3MpIHtcbiAgICAgICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrLmFwcGx5KG51bGwsIFtlcnJdLmNvbmNhdChhcmdzKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB2YXIgbmV4dCA9IGl0ZXJhdG9yLm5leHQoKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKG5leHQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3MucHVzaCh3cmFwSXRlcmF0b3IobmV4dCkpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgYXJncy5wdXNoKGNhbGxiYWNrKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbnN1cmVBc3luYyhpdGVyYXRvcikuYXBwbHkobnVsbCwgYXJncyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgd3JhcEl0ZXJhdG9yKGFzeW5jLml0ZXJhdG9yKHRhc2tzKSkoKTtcbiAgICB9O1xuXG4gICAgZnVuY3Rpb24gX3BhcmFsbGVsKGVhY2hmbiwgdGFza3MsIGNhbGxiYWNrKSB7XG4gICAgICAgIGNhbGxiYWNrID0gY2FsbGJhY2sgfHwgbm9vcDtcbiAgICAgICAgdmFyIHJlc3VsdHMgPSBfaXNBcnJheUxpa2UodGFza3MpID8gW10gOiB7fTtcblxuICAgICAgICBlYWNoZm4odGFza3MsIGZ1bmN0aW9uICh0YXNrLCBrZXksIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICB0YXNrKF9yZXN0UGFyYW0oZnVuY3Rpb24gKGVyciwgYXJncykge1xuICAgICAgICAgICAgICAgIGlmIChhcmdzLmxlbmd0aCA8PSAxKSB7XG4gICAgICAgICAgICAgICAgICAgIGFyZ3MgPSBhcmdzWzBdO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXN1bHRzW2tleV0gPSBhcmdzO1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgICB9KSk7XG4gICAgICAgIH0sIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgIGNhbGxiYWNrKGVyciwgcmVzdWx0cyk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGFzeW5jLnBhcmFsbGVsID0gZnVuY3Rpb24gKHRhc2tzLCBjYWxsYmFjaykge1xuICAgICAgICBfcGFyYWxsZWwoYXN5bmMuZWFjaE9mLCB0YXNrcywgY2FsbGJhY2spO1xuICAgIH07XG5cbiAgICBhc3luYy5wYXJhbGxlbExpbWl0ID0gZnVuY3Rpb24odGFza3MsIGxpbWl0LCBjYWxsYmFjaykge1xuICAgICAgICBfcGFyYWxsZWwoX2VhY2hPZkxpbWl0KGxpbWl0KSwgdGFza3MsIGNhbGxiYWNrKTtcbiAgICB9O1xuXG4gICAgYXN5bmMuc2VyaWVzID0gZnVuY3Rpb24odGFza3MsIGNhbGxiYWNrKSB7XG4gICAgICAgIF9wYXJhbGxlbChhc3luYy5lYWNoT2ZTZXJpZXMsIHRhc2tzLCBjYWxsYmFjayk7XG4gICAgfTtcblxuICAgIGFzeW5jLml0ZXJhdG9yID0gZnVuY3Rpb24gKHRhc2tzKSB7XG4gICAgICAgIGZ1bmN0aW9uIG1ha2VDYWxsYmFjayhpbmRleCkge1xuICAgICAgICAgICAgZnVuY3Rpb24gZm4oKSB7XG4gICAgICAgICAgICAgICAgaWYgKHRhc2tzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICB0YXNrc1tpbmRleF0uYXBwbHkobnVsbCwgYXJndW1lbnRzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZuLm5leHQoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZuLm5leHQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIChpbmRleCA8IHRhc2tzLmxlbmd0aCAtIDEpID8gbWFrZUNhbGxiYWNrKGluZGV4ICsgMSk6IG51bGw7XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgcmV0dXJuIGZuO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBtYWtlQ2FsbGJhY2soMCk7XG4gICAgfTtcblxuICAgIGFzeW5jLmFwcGx5ID0gX3Jlc3RQYXJhbShmdW5jdGlvbiAoZm4sIGFyZ3MpIHtcbiAgICAgICAgcmV0dXJuIF9yZXN0UGFyYW0oZnVuY3Rpb24gKGNhbGxBcmdzKSB7XG4gICAgICAgICAgICByZXR1cm4gZm4uYXBwbHkoXG4gICAgICAgICAgICAgICAgbnVsbCwgYXJncy5jb25jYXQoY2FsbEFyZ3MpXG4gICAgICAgICAgICApO1xuICAgICAgICB9KTtcbiAgICB9KTtcblxuICAgIGZ1bmN0aW9uIF9jb25jYXQoZWFjaGZuLCBhcnIsIGZuLCBjYWxsYmFjaykge1xuICAgICAgICB2YXIgcmVzdWx0ID0gW107XG4gICAgICAgIGVhY2hmbihhcnIsIGZ1bmN0aW9uICh4LCBpbmRleCwgY2IpIHtcbiAgICAgICAgICAgIGZuKHgsIGZ1bmN0aW9uIChlcnIsIHkpIHtcbiAgICAgICAgICAgICAgICByZXN1bHQgPSByZXN1bHQuY29uY2F0KHkgfHwgW10pO1xuICAgICAgICAgICAgICAgIGNiKGVycik7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSwgZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgY2FsbGJhY2soZXJyLCByZXN1bHQpO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgYXN5bmMuY29uY2F0ID0gZG9QYXJhbGxlbChfY29uY2F0KTtcbiAgICBhc3luYy5jb25jYXRTZXJpZXMgPSBkb1NlcmllcyhfY29uY2F0KTtcblxuICAgIGFzeW5jLndoaWxzdCA9IGZ1bmN0aW9uICh0ZXN0LCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgY2FsbGJhY2sgPSBjYWxsYmFjayB8fCBub29wO1xuICAgICAgICBpZiAodGVzdCgpKSB7XG4gICAgICAgICAgICB2YXIgbmV4dCA9IF9yZXN0UGFyYW0oZnVuY3Rpb24oZXJyLCBhcmdzKSB7XG4gICAgICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodGVzdC5hcHBseSh0aGlzLCBhcmdzKSkge1xuICAgICAgICAgICAgICAgICAgICBpdGVyYXRvcihuZXh0KTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhudWxsKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGl0ZXJhdG9yKG5leHQpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY2FsbGJhY2sobnVsbCk7XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgYXN5bmMuZG9XaGlsc3QgPSBmdW5jdGlvbiAoaXRlcmF0b3IsIHRlc3QsIGNhbGxiYWNrKSB7XG4gICAgICAgIHZhciBjYWxscyA9IDA7XG4gICAgICAgIHJldHVybiBhc3luYy53aGlsc3QoZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICByZXR1cm4gKytjYWxscyA8PSAxIHx8IHRlc3QuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICAgICAgfSwgaXRlcmF0b3IsIGNhbGxiYWNrKTtcbiAgICB9O1xuXG4gICAgYXN5bmMudW50aWwgPSBmdW5jdGlvbiAodGVzdCwgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgIHJldHVybiBhc3luYy53aGlsc3QoZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICByZXR1cm4gIXRlc3QuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICAgICAgfSwgaXRlcmF0b3IsIGNhbGxiYWNrKTtcbiAgICB9O1xuXG4gICAgYXN5bmMuZG9VbnRpbCA9IGZ1bmN0aW9uIChpdGVyYXRvciwgdGVzdCwgY2FsbGJhY2spIHtcbiAgICAgICAgcmV0dXJuIGFzeW5jLmRvV2hpbHN0KGl0ZXJhdG9yLCBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIHJldHVybiAhdGVzdC5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgICAgICB9LCBjYWxsYmFjayk7XG4gICAgfTtcblxuICAgIGFzeW5jLmR1cmluZyA9IGZ1bmN0aW9uICh0ZXN0LCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgY2FsbGJhY2sgPSBjYWxsYmFjayB8fCBub29wO1xuXG4gICAgICAgIHZhciBuZXh0ID0gX3Jlc3RQYXJhbShmdW5jdGlvbihlcnIsIGFyZ3MpIHtcbiAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBhcmdzLnB1c2goY2hlY2spO1xuICAgICAgICAgICAgICAgIHRlc3QuYXBwbHkodGhpcywgYXJncyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHZhciBjaGVjayA9IGZ1bmN0aW9uKGVyciwgdHJ1dGgpIHtcbiAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh0cnV0aCkge1xuICAgICAgICAgICAgICAgIGl0ZXJhdG9yKG5leHQpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBjYWxsYmFjayhudWxsKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcblxuICAgICAgICB0ZXN0KGNoZWNrKTtcbiAgICB9O1xuXG4gICAgYXN5bmMuZG9EdXJpbmcgPSBmdW5jdGlvbiAoaXRlcmF0b3IsIHRlc3QsIGNhbGxiYWNrKSB7XG4gICAgICAgIHZhciBjYWxscyA9IDA7XG4gICAgICAgIGFzeW5jLmR1cmluZyhmdW5jdGlvbihuZXh0KSB7XG4gICAgICAgICAgICBpZiAoY2FsbHMrKyA8IDEpIHtcbiAgICAgICAgICAgICAgICBuZXh0KG51bGwsIHRydWUpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0ZXN0LmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sIGl0ZXJhdG9yLCBjYWxsYmFjayk7XG4gICAgfTtcblxuICAgIGZ1bmN0aW9uIF9xdWV1ZSh3b3JrZXIsIGNvbmN1cnJlbmN5LCBwYXlsb2FkKSB7XG4gICAgICAgIGlmIChjb25jdXJyZW5jeSA9PSBudWxsKSB7XG4gICAgICAgICAgICBjb25jdXJyZW5jeSA9IDE7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZihjb25jdXJyZW5jeSA9PT0gMCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdDb25jdXJyZW5jeSBtdXN0IG5vdCBiZSB6ZXJvJyk7XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gX2luc2VydChxLCBkYXRhLCBwb3MsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICBpZiAoY2FsbGJhY2sgIT0gbnVsbCAmJiB0eXBlb2YgY2FsbGJhY2sgIT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcInRhc2sgY2FsbGJhY2sgbXVzdCBiZSBhIGZ1bmN0aW9uXCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcS5zdGFydGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIGlmICghX2lzQXJyYXkoZGF0YSkpIHtcbiAgICAgICAgICAgICAgICBkYXRhID0gW2RhdGFdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYoZGF0YS5sZW5ndGggPT09IDAgJiYgcS5pZGxlKCkpIHtcbiAgICAgICAgICAgICAgICAvLyBjYWxsIGRyYWluIGltbWVkaWF0ZWx5IGlmIHRoZXJlIGFyZSBubyB0YXNrc1xuICAgICAgICAgICAgICAgIHJldHVybiBhc3luYy5zZXRJbW1lZGlhdGUoZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgICAgIHEuZHJhaW4oKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIF9hcnJheUVhY2goZGF0YSwgZnVuY3Rpb24odGFzaykge1xuICAgICAgICAgICAgICAgIHZhciBpdGVtID0ge1xuICAgICAgICAgICAgICAgICAgICBkYXRhOiB0YXNrLFxuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjazogY2FsbGJhY2sgfHwgbm9vcFxuICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICBpZiAocG9zKSB7XG4gICAgICAgICAgICAgICAgICAgIHEudGFza3MudW5zaGlmdChpdGVtKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBxLnRhc2tzLnB1c2goaXRlbSk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKHEudGFza3MubGVuZ3RoID09PSBxLmNvbmN1cnJlbmN5KSB7XG4gICAgICAgICAgICAgICAgICAgIHEuc2F0dXJhdGVkKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBhc3luYy5zZXRJbW1lZGlhdGUocS5wcm9jZXNzKTtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBfbmV4dChxLCB0YXNrcykge1xuICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKCl7XG4gICAgICAgICAgICAgICAgd29ya2VycyAtPSAxO1xuXG4gICAgICAgICAgICAgICAgdmFyIHJlbW92ZWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB2YXIgYXJncyA9IGFyZ3VtZW50cztcbiAgICAgICAgICAgICAgICBfYXJyYXlFYWNoKHRhc2tzLCBmdW5jdGlvbiAodGFzaykge1xuICAgICAgICAgICAgICAgICAgICBfYXJyYXlFYWNoKHdvcmtlcnNMaXN0LCBmdW5jdGlvbiAod29ya2VyLCBpbmRleCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHdvcmtlciA9PT0gdGFzayAmJiAhcmVtb3ZlZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdvcmtlcnNMaXN0LnNwbGljZShpbmRleCwgMSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVtb3ZlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgICAgIHRhc2suY2FsbGJhY2suYXBwbHkodGFzaywgYXJncyk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgaWYgKHEudGFza3MubGVuZ3RoICsgd29ya2VycyA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICBxLmRyYWluKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHEucHJvY2VzcygpO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciB3b3JrZXJzID0gMDtcbiAgICAgICAgdmFyIHdvcmtlcnNMaXN0ID0gW107XG4gICAgICAgIHZhciBxID0ge1xuICAgICAgICAgICAgdGFza3M6IFtdLFxuICAgICAgICAgICAgY29uY3VycmVuY3k6IGNvbmN1cnJlbmN5LFxuICAgICAgICAgICAgcGF5bG9hZDogcGF5bG9hZCxcbiAgICAgICAgICAgIHNhdHVyYXRlZDogbm9vcCxcbiAgICAgICAgICAgIGVtcHR5OiBub29wLFxuICAgICAgICAgICAgZHJhaW46IG5vb3AsXG4gICAgICAgICAgICBzdGFydGVkOiBmYWxzZSxcbiAgICAgICAgICAgIHBhdXNlZDogZmFsc2UsXG4gICAgICAgICAgICBwdXNoOiBmdW5jdGlvbiAoZGF0YSwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgICAgICBfaW5zZXJ0KHEsIGRhdGEsIGZhbHNlLCBjYWxsYmFjayk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAga2lsbDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHEuZHJhaW4gPSBub29wO1xuICAgICAgICAgICAgICAgIHEudGFza3MgPSBbXTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB1bnNoaWZ0OiBmdW5jdGlvbiAoZGF0YSwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgICAgICBfaW5zZXJ0KHEsIGRhdGEsIHRydWUsIGNhbGxiYWNrKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBwcm9jZXNzOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgaWYgKCFxLnBhdXNlZCAmJiB3b3JrZXJzIDwgcS5jb25jdXJyZW5jeSAmJiBxLnRhc2tzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICB3aGlsZSh3b3JrZXJzIDwgcS5jb25jdXJyZW5jeSAmJiBxLnRhc2tzLmxlbmd0aCl7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgdGFza3MgPSBxLnBheWxvYWQgP1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHEudGFza3Muc3BsaWNlKDAsIHEucGF5bG9hZCkgOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHEudGFza3Muc3BsaWNlKDAsIHEudGFza3MubGVuZ3RoKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGRhdGEgPSBfbWFwKHRhc2tzLCBmdW5jdGlvbiAodGFzaykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0YXNrLmRhdGE7XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHEudGFza3MubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcS5lbXB0eSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgd29ya2VycyArPSAxO1xuICAgICAgICAgICAgICAgICAgICAgICAgd29ya2Vyc0xpc3QucHVzaCh0YXNrc1swXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgY2IgPSBvbmx5X29uY2UoX25leHQocSwgdGFza3MpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHdvcmtlcihkYXRhLCBjYik7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbGVuZ3RoOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHEudGFza3MubGVuZ3RoO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHJ1bm5pbmc6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gd29ya2VycztcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB3b3JrZXJzTGlzdDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB3b3JrZXJzTGlzdDtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBpZGxlOiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcS50YXNrcy5sZW5ndGggKyB3b3JrZXJzID09PSAwO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHBhdXNlOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgcS5wYXVzZWQgPSB0cnVlO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHJlc3VtZTogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGlmIChxLnBhdXNlZCA9PT0gZmFsc2UpIHsgcmV0dXJuOyB9XG4gICAgICAgICAgICAgICAgcS5wYXVzZWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB2YXIgcmVzdW1lQ291bnQgPSBNYXRoLm1pbihxLmNvbmN1cnJlbmN5LCBxLnRhc2tzLmxlbmd0aCk7XG4gICAgICAgICAgICAgICAgLy8gTmVlZCB0byBjYWxsIHEucHJvY2VzcyBvbmNlIHBlciBjb25jdXJyZW50XG4gICAgICAgICAgICAgICAgLy8gd29ya2VyIHRvIHByZXNlcnZlIGZ1bGwgY29uY3VycmVuY3kgYWZ0ZXIgcGF1c2VcbiAgICAgICAgICAgICAgICBmb3IgKHZhciB3ID0gMTsgdyA8PSByZXN1bWVDb3VudDsgdysrKSB7XG4gICAgICAgICAgICAgICAgICAgIGFzeW5jLnNldEltbWVkaWF0ZShxLnByb2Nlc3MpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIHE7XG4gICAgfVxuXG4gICAgYXN5bmMucXVldWUgPSBmdW5jdGlvbiAod29ya2VyLCBjb25jdXJyZW5jeSkge1xuICAgICAgICB2YXIgcSA9IF9xdWV1ZShmdW5jdGlvbiAoaXRlbXMsIGNiKSB7XG4gICAgICAgICAgICB3b3JrZXIoaXRlbXNbMF0sIGNiKTtcbiAgICAgICAgfSwgY29uY3VycmVuY3ksIDEpO1xuXG4gICAgICAgIHJldHVybiBxO1xuICAgIH07XG5cbiAgICBhc3luYy5wcmlvcml0eVF1ZXVlID0gZnVuY3Rpb24gKHdvcmtlciwgY29uY3VycmVuY3kpIHtcblxuICAgICAgICBmdW5jdGlvbiBfY29tcGFyZVRhc2tzKGEsIGIpe1xuICAgICAgICAgICAgcmV0dXJuIGEucHJpb3JpdHkgLSBiLnByaW9yaXR5O1xuICAgICAgICB9XG5cbiAgICAgICAgZnVuY3Rpb24gX2JpbmFyeVNlYXJjaChzZXF1ZW5jZSwgaXRlbSwgY29tcGFyZSkge1xuICAgICAgICAgICAgdmFyIGJlZyA9IC0xLFxuICAgICAgICAgICAgICAgIGVuZCA9IHNlcXVlbmNlLmxlbmd0aCAtIDE7XG4gICAgICAgICAgICB3aGlsZSAoYmVnIDwgZW5kKSB7XG4gICAgICAgICAgICAgICAgdmFyIG1pZCA9IGJlZyArICgoZW5kIC0gYmVnICsgMSkgPj4+IDEpO1xuICAgICAgICAgICAgICAgIGlmIChjb21wYXJlKGl0ZW0sIHNlcXVlbmNlW21pZF0pID49IDApIHtcbiAgICAgICAgICAgICAgICAgICAgYmVnID0gbWlkO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGVuZCA9IG1pZCAtIDE7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGJlZztcbiAgICAgICAgfVxuXG4gICAgICAgIGZ1bmN0aW9uIF9pbnNlcnQocSwgZGF0YSwgcHJpb3JpdHksIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICBpZiAoY2FsbGJhY2sgIT0gbnVsbCAmJiB0eXBlb2YgY2FsbGJhY2sgIT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcInRhc2sgY2FsbGJhY2sgbXVzdCBiZSBhIGZ1bmN0aW9uXCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcS5zdGFydGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIGlmICghX2lzQXJyYXkoZGF0YSkpIHtcbiAgICAgICAgICAgICAgICBkYXRhID0gW2RhdGFdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYoZGF0YS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgICAvLyBjYWxsIGRyYWluIGltbWVkaWF0ZWx5IGlmIHRoZXJlIGFyZSBubyB0YXNrc1xuICAgICAgICAgICAgICAgIHJldHVybiBhc3luYy5zZXRJbW1lZGlhdGUoZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgICAgIHEuZHJhaW4oKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIF9hcnJheUVhY2goZGF0YSwgZnVuY3Rpb24odGFzaykge1xuICAgICAgICAgICAgICAgIHZhciBpdGVtID0ge1xuICAgICAgICAgICAgICAgICAgICBkYXRhOiB0YXNrLFxuICAgICAgICAgICAgICAgICAgICBwcmlvcml0eTogcHJpb3JpdHksXG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrOiB0eXBlb2YgY2FsbGJhY2sgPT09ICdmdW5jdGlvbicgPyBjYWxsYmFjayA6IG5vb3BcbiAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgcS50YXNrcy5zcGxpY2UoX2JpbmFyeVNlYXJjaChxLnRhc2tzLCBpdGVtLCBfY29tcGFyZVRhc2tzKSArIDEsIDAsIGl0ZW0pO1xuXG4gICAgICAgICAgICAgICAgaWYgKHEudGFza3MubGVuZ3RoID09PSBxLmNvbmN1cnJlbmN5KSB7XG4gICAgICAgICAgICAgICAgICAgIHEuc2F0dXJhdGVkKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGFzeW5jLnNldEltbWVkaWF0ZShxLnByb2Nlc3MpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBTdGFydCB3aXRoIGEgbm9ybWFsIHF1ZXVlXG4gICAgICAgIHZhciBxID0gYXN5bmMucXVldWUod29ya2VyLCBjb25jdXJyZW5jeSk7XG5cbiAgICAgICAgLy8gT3ZlcnJpZGUgcHVzaCB0byBhY2NlcHQgc2Vjb25kIHBhcmFtZXRlciByZXByZXNlbnRpbmcgcHJpb3JpdHlcbiAgICAgICAgcS5wdXNoID0gZnVuY3Rpb24gKGRhdGEsIHByaW9yaXR5LCBjYWxsYmFjaykge1xuICAgICAgICAgICAgX2luc2VydChxLCBkYXRhLCBwcmlvcml0eSwgY2FsbGJhY2spO1xuICAgICAgICB9O1xuXG4gICAgICAgIC8vIFJlbW92ZSB1bnNoaWZ0IGZ1bmN0aW9uXG4gICAgICAgIGRlbGV0ZSBxLnVuc2hpZnQ7XG5cbiAgICAgICAgcmV0dXJuIHE7XG4gICAgfTtcblxuICAgIGFzeW5jLmNhcmdvID0gZnVuY3Rpb24gKHdvcmtlciwgcGF5bG9hZCkge1xuICAgICAgICByZXR1cm4gX3F1ZXVlKHdvcmtlciwgMSwgcGF5bG9hZCk7XG4gICAgfTtcblxuICAgIGZ1bmN0aW9uIF9jb25zb2xlX2ZuKG5hbWUpIHtcbiAgICAgICAgcmV0dXJuIF9yZXN0UGFyYW0oZnVuY3Rpb24gKGZuLCBhcmdzKSB7XG4gICAgICAgICAgICBmbi5hcHBseShudWxsLCBhcmdzLmNvbmNhdChbX3Jlc3RQYXJhbShmdW5jdGlvbiAoZXJyLCBhcmdzKSB7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBjb25zb2xlID09PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoY29uc29sZS5lcnJvcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChjb25zb2xlW25hbWVdKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBfYXJyYXlFYWNoKGFyZ3MsIGZ1bmN0aW9uICh4KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZVtuYW1lXSh4KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSldKSk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBhc3luYy5sb2cgPSBfY29uc29sZV9mbignbG9nJyk7XG4gICAgYXN5bmMuZGlyID0gX2NvbnNvbGVfZm4oJ2RpcicpO1xuICAgIC8qYXN5bmMuaW5mbyA9IF9jb25zb2xlX2ZuKCdpbmZvJyk7XG4gICAgYXN5bmMud2FybiA9IF9jb25zb2xlX2ZuKCd3YXJuJyk7XG4gICAgYXN5bmMuZXJyb3IgPSBfY29uc29sZV9mbignZXJyb3InKTsqL1xuXG4gICAgYXN5bmMubWVtb2l6ZSA9IGZ1bmN0aW9uIChmbiwgaGFzaGVyKSB7XG4gICAgICAgIHZhciBtZW1vID0ge307XG4gICAgICAgIHZhciBxdWV1ZXMgPSB7fTtcbiAgICAgICAgaGFzaGVyID0gaGFzaGVyIHx8IGlkZW50aXR5O1xuICAgICAgICB2YXIgbWVtb2l6ZWQgPSBfcmVzdFBhcmFtKGZ1bmN0aW9uIG1lbW9pemVkKGFyZ3MpIHtcbiAgICAgICAgICAgIHZhciBjYWxsYmFjayA9IGFyZ3MucG9wKCk7XG4gICAgICAgICAgICB2YXIga2V5ID0gaGFzaGVyLmFwcGx5KG51bGwsIGFyZ3MpO1xuICAgICAgICAgICAgaWYgKGtleSBpbiBtZW1vKSB7XG4gICAgICAgICAgICAgICAgYXN5bmMuc2V0SW1tZWRpYXRlKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2suYXBwbHkobnVsbCwgbWVtb1trZXldKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGtleSBpbiBxdWV1ZXMpIHtcbiAgICAgICAgICAgICAgICBxdWV1ZXNba2V5XS5wdXNoKGNhbGxiYWNrKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHF1ZXVlc1trZXldID0gW2NhbGxiYWNrXTtcbiAgICAgICAgICAgICAgICBmbi5hcHBseShudWxsLCBhcmdzLmNvbmNhdChbX3Jlc3RQYXJhbShmdW5jdGlvbiAoYXJncykge1xuICAgICAgICAgICAgICAgICAgICBtZW1vW2tleV0gPSBhcmdzO1xuICAgICAgICAgICAgICAgICAgICB2YXIgcSA9IHF1ZXVlc1trZXldO1xuICAgICAgICAgICAgICAgICAgICBkZWxldGUgcXVldWVzW2tleV07XG4gICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwLCBsID0gcS5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHFbaV0uYXBwbHkobnVsbCwgYXJncyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KV0pKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIG1lbW9pemVkLm1lbW8gPSBtZW1vO1xuICAgICAgICBtZW1vaXplZC51bm1lbW9pemVkID0gZm47XG4gICAgICAgIHJldHVybiBtZW1vaXplZDtcbiAgICB9O1xuXG4gICAgYXN5bmMudW5tZW1vaXplID0gZnVuY3Rpb24gKGZuKSB7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gKGZuLnVubWVtb2l6ZWQgfHwgZm4pLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7XG4gICAgICAgIH07XG4gICAgfTtcblxuICAgIGZ1bmN0aW9uIF90aW1lcyhtYXBwZXIpIHtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChjb3VudCwgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICBtYXBwZXIoX3JhbmdlKGNvdW50KSwgaXRlcmF0b3IsIGNhbGxiYWNrKTtcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBhc3luYy50aW1lcyA9IF90aW1lcyhhc3luYy5tYXApO1xuICAgIGFzeW5jLnRpbWVzU2VyaWVzID0gX3RpbWVzKGFzeW5jLm1hcFNlcmllcyk7XG4gICAgYXN5bmMudGltZXNMaW1pdCA9IGZ1bmN0aW9uIChjb3VudCwgbGltaXQsIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICByZXR1cm4gYXN5bmMubWFwTGltaXQoX3JhbmdlKGNvdW50KSwgbGltaXQsIGl0ZXJhdG9yLCBjYWxsYmFjayk7XG4gICAgfTtcblxuICAgIGFzeW5jLnNlcSA9IGZ1bmN0aW9uICgvKiBmdW5jdGlvbnMuLi4gKi8pIHtcbiAgICAgICAgdmFyIGZucyA9IGFyZ3VtZW50cztcbiAgICAgICAgcmV0dXJuIF9yZXN0UGFyYW0oZnVuY3Rpb24gKGFyZ3MpIHtcbiAgICAgICAgICAgIHZhciB0aGF0ID0gdGhpcztcblxuICAgICAgICAgICAgdmFyIGNhbGxiYWNrID0gYXJnc1thcmdzLmxlbmd0aCAtIDFdO1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBjYWxsYmFjayA9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgYXJncy5wb3AoKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2sgPSBub29wO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBhc3luYy5yZWR1Y2UoZm5zLCBhcmdzLCBmdW5jdGlvbiAobmV3YXJncywgZm4sIGNiKSB7XG4gICAgICAgICAgICAgICAgZm4uYXBwbHkodGhhdCwgbmV3YXJncy5jb25jYXQoW19yZXN0UGFyYW0oZnVuY3Rpb24gKGVyciwgbmV4dGFyZ3MpIHtcbiAgICAgICAgICAgICAgICAgICAgY2IoZXJyLCBuZXh0YXJncyk7XG4gICAgICAgICAgICAgICAgfSldKSk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZnVuY3Rpb24gKGVyciwgcmVzdWx0cykge1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrLmFwcGx5KHRoYXQsIFtlcnJdLmNvbmNhdChyZXN1bHRzKSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfTtcblxuICAgIGFzeW5jLmNvbXBvc2UgPSBmdW5jdGlvbiAoLyogZnVuY3Rpb25zLi4uICovKSB7XG4gICAgICAgIHJldHVybiBhc3luYy5zZXEuYXBwbHkobnVsbCwgQXJyYXkucHJvdG90eXBlLnJldmVyc2UuY2FsbChhcmd1bWVudHMpKTtcbiAgICB9O1xuXG5cbiAgICBmdW5jdGlvbiBfYXBwbHlFYWNoKGVhY2hmbikge1xuICAgICAgICByZXR1cm4gX3Jlc3RQYXJhbShmdW5jdGlvbihmbnMsIGFyZ3MpIHtcbiAgICAgICAgICAgIHZhciBnbyA9IF9yZXN0UGFyYW0oZnVuY3Rpb24oYXJncykge1xuICAgICAgICAgICAgICAgIHZhciB0aGF0ID0gdGhpcztcbiAgICAgICAgICAgICAgICB2YXIgY2FsbGJhY2sgPSBhcmdzLnBvcCgpO1xuICAgICAgICAgICAgICAgIHJldHVybiBlYWNoZm4oZm5zLCBmdW5jdGlvbiAoZm4sIF8sIGNiKSB7XG4gICAgICAgICAgICAgICAgICAgIGZuLmFwcGx5KHRoYXQsIGFyZ3MuY29uY2F0KFtjYl0pKTtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIGNhbGxiYWNrKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgaWYgKGFyZ3MubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGdvLmFwcGx5KHRoaXMsIGFyZ3MpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGdvO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBhc3luYy5hcHBseUVhY2ggPSBfYXBwbHlFYWNoKGFzeW5jLmVhY2hPZik7XG4gICAgYXN5bmMuYXBwbHlFYWNoU2VyaWVzID0gX2FwcGx5RWFjaChhc3luYy5lYWNoT2ZTZXJpZXMpO1xuXG5cbiAgICBhc3luYy5mb3JldmVyID0gZnVuY3Rpb24gKGZuLCBjYWxsYmFjaykge1xuICAgICAgICB2YXIgZG9uZSA9IG9ubHlfb25jZShjYWxsYmFjayB8fCBub29wKTtcbiAgICAgICAgdmFyIHRhc2sgPSBlbnN1cmVBc3luYyhmbik7XG4gICAgICAgIGZ1bmN0aW9uIG5leHQoZXJyKSB7XG4gICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGRvbmUoZXJyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRhc2sobmV4dCk7XG4gICAgICAgIH1cbiAgICAgICAgbmV4dCgpO1xuICAgIH07XG5cbiAgICBmdW5jdGlvbiBlbnN1cmVBc3luYyhmbikge1xuICAgICAgICByZXR1cm4gX3Jlc3RQYXJhbShmdW5jdGlvbiAoYXJncykge1xuICAgICAgICAgICAgdmFyIGNhbGxiYWNrID0gYXJncy5wb3AoKTtcbiAgICAgICAgICAgIGFyZ3MucHVzaChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgdmFyIGlubmVyQXJncyA9IGFyZ3VtZW50cztcbiAgICAgICAgICAgICAgICBpZiAoc3luYykge1xuICAgICAgICAgICAgICAgICAgICBhc3luYy5zZXRJbW1lZGlhdGUoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2suYXBwbHkobnVsbCwgaW5uZXJBcmdzKTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2suYXBwbHkobnVsbCwgaW5uZXJBcmdzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHZhciBzeW5jID0gdHJ1ZTtcbiAgICAgICAgICAgIGZuLmFwcGx5KHRoaXMsIGFyZ3MpO1xuICAgICAgICAgICAgc3luYyA9IGZhbHNlO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBhc3luYy5lbnN1cmVBc3luYyA9IGVuc3VyZUFzeW5jO1xuXG4gICAgYXN5bmMuY29uc3RhbnQgPSBfcmVzdFBhcmFtKGZ1bmN0aW9uKHZhbHVlcykge1xuICAgICAgICB2YXIgYXJncyA9IFtudWxsXS5jb25jYXQodmFsdWVzKTtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChjYWxsYmFjaykge1xuICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrLmFwcGx5KHRoaXMsIGFyZ3MpO1xuICAgICAgICB9O1xuICAgIH0pO1xuXG4gICAgYXN5bmMud3JhcFN5bmMgPVxuICAgIGFzeW5jLmFzeW5jaWZ5ID0gZnVuY3Rpb24gYXN5bmNpZnkoZnVuYykge1xuICAgICAgICByZXR1cm4gX3Jlc3RQYXJhbShmdW5jdGlvbiAoYXJncykge1xuICAgICAgICAgICAgdmFyIGNhbGxiYWNrID0gYXJncy5wb3AoKTtcbiAgICAgICAgICAgIHZhciByZXN1bHQ7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIHJlc3VsdCA9IGZ1bmMuYXBwbHkodGhpcywgYXJncyk7XG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gaWYgcmVzdWx0IGlzIFByb21pc2Ugb2JqZWN0XG4gICAgICAgICAgICBpZiAoX2lzT2JqZWN0KHJlc3VsdCkgJiYgdHlwZW9mIHJlc3VsdC50aGVuID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgICAgICAgICByZXN1bHQudGhlbihmdW5jdGlvbih2YWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhudWxsLCB2YWx1ZSk7XG4gICAgICAgICAgICAgICAgfSlbXCJjYXRjaFwiXShmdW5jdGlvbihlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soZXJyLm1lc3NhZ2UgPyBlcnIgOiBuZXcgRXJyb3IoZXJyKSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrKG51bGwsIHJlc3VsdCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH07XG5cbiAgICAvLyBOb2RlLmpzXG4gICAgaWYgKHR5cGVvZiBtb2R1bGUgPT09ICdvYmplY3QnICYmIG1vZHVsZS5leHBvcnRzKSB7XG4gICAgICAgIG1vZHVsZS5leHBvcnRzID0gYXN5bmM7XG4gICAgfVxuICAgIC8vIEFNRCAvIFJlcXVpcmVKU1xuICAgIGVsc2UgaWYgKHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCkge1xuICAgICAgICBkZWZpbmUoW10sIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiBhc3luYztcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8vIGluY2x1ZGVkIGRpcmVjdGx5IHZpYSA8c2NyaXB0PiB0YWdcbiAgICBlbHNlIHtcbiAgICAgICAgcm9vdC5hc3luYyA9IGFzeW5jO1xuICAgIH1cblxufSgpKTtcbiIsIi8vIENvcHlyaWdodCBKb3llbnQsIEluYy4gYW5kIG90aGVyIE5vZGUgY29udHJpYnV0b3JzLlxuLy9cbi8vIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhXG4vLyBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlXG4vLyBcIlNvZnR3YXJlXCIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmdcbi8vIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCxcbi8vIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXRcbi8vIHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZVxuLy8gZm9sbG93aW5nIGNvbmRpdGlvbnM6XG4vL1xuLy8gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWRcbi8vIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuLy9cbi8vIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1Ncbi8vIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0Zcbi8vIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU5cbi8vIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLFxuLy8gREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SXG4vLyBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFXG4vLyBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLlxuXG4vLyByZXNvbHZlcyAuIGFuZCAuLiBlbGVtZW50cyBpbiBhIHBhdGggYXJyYXkgd2l0aCBkaXJlY3RvcnkgbmFtZXMgdGhlcmVcbi8vIG11c3QgYmUgbm8gc2xhc2hlcywgZW1wdHkgZWxlbWVudHMsIG9yIGRldmljZSBuYW1lcyAoYzpcXCkgaW4gdGhlIGFycmF5XG4vLyAoc28gYWxzbyBubyBsZWFkaW5nIGFuZCB0cmFpbGluZyBzbGFzaGVzIC0gaXQgZG9lcyBub3QgZGlzdGluZ3Vpc2hcbi8vIHJlbGF0aXZlIGFuZCBhYnNvbHV0ZSBwYXRocylcbmZ1bmN0aW9uIG5vcm1hbGl6ZUFycmF5KHBhcnRzLCBhbGxvd0Fib3ZlUm9vdCkge1xuICAvLyBpZiB0aGUgcGF0aCB0cmllcyB0byBnbyBhYm92ZSB0aGUgcm9vdCwgYHVwYCBlbmRzIHVwID4gMFxuICB2YXIgdXAgPSAwO1xuICBmb3IgKHZhciBpID0gcGFydHMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICB2YXIgbGFzdCA9IHBhcnRzW2ldO1xuICAgIGlmIChsYXN0ID09PSAnLicpIHtcbiAgICAgIHBhcnRzLnNwbGljZShpLCAxKTtcbiAgICB9IGVsc2UgaWYgKGxhc3QgPT09ICcuLicpIHtcbiAgICAgIHBhcnRzLnNwbGljZShpLCAxKTtcbiAgICAgIHVwKys7XG4gICAgfSBlbHNlIGlmICh1cCkge1xuICAgICAgcGFydHMuc3BsaWNlKGksIDEpO1xuICAgICAgdXAtLTtcbiAgICB9XG4gIH1cblxuICAvLyBpZiB0aGUgcGF0aCBpcyBhbGxvd2VkIHRvIGdvIGFib3ZlIHRoZSByb290LCByZXN0b3JlIGxlYWRpbmcgLi5zXG4gIGlmIChhbGxvd0Fib3ZlUm9vdCkge1xuICAgIGZvciAoOyB1cC0tOyB1cCkge1xuICAgICAgcGFydHMudW5zaGlmdCgnLi4nKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gcGFydHM7XG59XG5cbi8vIFNwbGl0IGEgZmlsZW5hbWUgaW50byBbcm9vdCwgZGlyLCBiYXNlbmFtZSwgZXh0XSwgdW5peCB2ZXJzaW9uXG4vLyAncm9vdCcgaXMganVzdCBhIHNsYXNoLCBvciBub3RoaW5nLlxudmFyIHNwbGl0UGF0aFJlID1cbiAgICAvXihcXC8/fCkoW1xcc1xcU10qPykoKD86XFwuezEsMn18W15cXC9dKz98KShcXC5bXi5cXC9dKnwpKSg/OltcXC9dKikkLztcbnZhciBzcGxpdFBhdGggPSBmdW5jdGlvbihmaWxlbmFtZSkge1xuICByZXR1cm4gc3BsaXRQYXRoUmUuZXhlYyhmaWxlbmFtZSkuc2xpY2UoMSk7XG59O1xuXG4vLyBwYXRoLnJlc29sdmUoW2Zyb20gLi4uXSwgdG8pXG4vLyBwb3NpeCB2ZXJzaW9uXG5leHBvcnRzLnJlc29sdmUgPSBmdW5jdGlvbigpIHtcbiAgdmFyIHJlc29sdmVkUGF0aCA9ICcnLFxuICAgICAgcmVzb2x2ZWRBYnNvbHV0ZSA9IGZhbHNlO1xuXG4gIGZvciAodmFyIGkgPSBhcmd1bWVudHMubGVuZ3RoIC0gMTsgaSA+PSAtMSAmJiAhcmVzb2x2ZWRBYnNvbHV0ZTsgaS0tKSB7XG4gICAgdmFyIHBhdGggPSAoaSA+PSAwKSA/IGFyZ3VtZW50c1tpXSA6IHByb2Nlc3MuY3dkKCk7XG5cbiAgICAvLyBTa2lwIGVtcHR5IGFuZCBpbnZhbGlkIGVudHJpZXNcbiAgICBpZiAodHlwZW9mIHBhdGggIT09ICdzdHJpbmcnKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdBcmd1bWVudHMgdG8gcGF0aC5yZXNvbHZlIG11c3QgYmUgc3RyaW5ncycpO1xuICAgIH0gZWxzZSBpZiAoIXBhdGgpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIHJlc29sdmVkUGF0aCA9IHBhdGggKyAnLycgKyByZXNvbHZlZFBhdGg7XG4gICAgcmVzb2x2ZWRBYnNvbHV0ZSA9IHBhdGguY2hhckF0KDApID09PSAnLyc7XG4gIH1cblxuICAvLyBBdCB0aGlzIHBvaW50IHRoZSBwYXRoIHNob3VsZCBiZSByZXNvbHZlZCB0byBhIGZ1bGwgYWJzb2x1dGUgcGF0aCwgYnV0XG4gIC8vIGhhbmRsZSByZWxhdGl2ZSBwYXRocyB0byBiZSBzYWZlIChtaWdodCBoYXBwZW4gd2hlbiBwcm9jZXNzLmN3ZCgpIGZhaWxzKVxuXG4gIC8vIE5vcm1hbGl6ZSB0aGUgcGF0aFxuICByZXNvbHZlZFBhdGggPSBub3JtYWxpemVBcnJheShmaWx0ZXIocmVzb2x2ZWRQYXRoLnNwbGl0KCcvJyksIGZ1bmN0aW9uKHApIHtcbiAgICByZXR1cm4gISFwO1xuICB9KSwgIXJlc29sdmVkQWJzb2x1dGUpLmpvaW4oJy8nKTtcblxuICByZXR1cm4gKChyZXNvbHZlZEFic29sdXRlID8gJy8nIDogJycpICsgcmVzb2x2ZWRQYXRoKSB8fCAnLic7XG59O1xuXG4vLyBwYXRoLm5vcm1hbGl6ZShwYXRoKVxuLy8gcG9zaXggdmVyc2lvblxuZXhwb3J0cy5ub3JtYWxpemUgPSBmdW5jdGlvbihwYXRoKSB7XG4gIHZhciBpc0Fic29sdXRlID0gZXhwb3J0cy5pc0Fic29sdXRlKHBhdGgpLFxuICAgICAgdHJhaWxpbmdTbGFzaCA9IHN1YnN0cihwYXRoLCAtMSkgPT09ICcvJztcblxuICAvLyBOb3JtYWxpemUgdGhlIHBhdGhcbiAgcGF0aCA9IG5vcm1hbGl6ZUFycmF5KGZpbHRlcihwYXRoLnNwbGl0KCcvJyksIGZ1bmN0aW9uKHApIHtcbiAgICByZXR1cm4gISFwO1xuICB9KSwgIWlzQWJzb2x1dGUpLmpvaW4oJy8nKTtcblxuICBpZiAoIXBhdGggJiYgIWlzQWJzb2x1dGUpIHtcbiAgICBwYXRoID0gJy4nO1xuICB9XG4gIGlmIChwYXRoICYmIHRyYWlsaW5nU2xhc2gpIHtcbiAgICBwYXRoICs9ICcvJztcbiAgfVxuXG4gIHJldHVybiAoaXNBYnNvbHV0ZSA/ICcvJyA6ICcnKSArIHBhdGg7XG59O1xuXG4vLyBwb3NpeCB2ZXJzaW9uXG5leHBvcnRzLmlzQWJzb2x1dGUgPSBmdW5jdGlvbihwYXRoKSB7XG4gIHJldHVybiBwYXRoLmNoYXJBdCgwKSA9PT0gJy8nO1xufTtcblxuLy8gcG9zaXggdmVyc2lvblxuZXhwb3J0cy5qb2luID0gZnVuY3Rpb24oKSB7XG4gIHZhciBwYXRocyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMCk7XG4gIHJldHVybiBleHBvcnRzLm5vcm1hbGl6ZShmaWx0ZXIocGF0aHMsIGZ1bmN0aW9uKHAsIGluZGV4KSB7XG4gICAgaWYgKHR5cGVvZiBwICE9PSAnc3RyaW5nJykge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignQXJndW1lbnRzIHRvIHBhdGguam9pbiBtdXN0IGJlIHN0cmluZ3MnKTtcbiAgICB9XG4gICAgcmV0dXJuIHA7XG4gIH0pLmpvaW4oJy8nKSk7XG59O1xuXG5cbi8vIHBhdGgucmVsYXRpdmUoZnJvbSwgdG8pXG4vLyBwb3NpeCB2ZXJzaW9uXG5leHBvcnRzLnJlbGF0aXZlID0gZnVuY3Rpb24oZnJvbSwgdG8pIHtcbiAgZnJvbSA9IGV4cG9ydHMucmVzb2x2ZShmcm9tKS5zdWJzdHIoMSk7XG4gIHRvID0gZXhwb3J0cy5yZXNvbHZlKHRvKS5zdWJzdHIoMSk7XG5cbiAgZnVuY3Rpb24gdHJpbShhcnIpIHtcbiAgICB2YXIgc3RhcnQgPSAwO1xuICAgIGZvciAoOyBzdGFydCA8IGFyci5sZW5ndGg7IHN0YXJ0KyspIHtcbiAgICAgIGlmIChhcnJbc3RhcnRdICE9PSAnJykgYnJlYWs7XG4gICAgfVxuXG4gICAgdmFyIGVuZCA9IGFyci5sZW5ndGggLSAxO1xuICAgIGZvciAoOyBlbmQgPj0gMDsgZW5kLS0pIHtcbiAgICAgIGlmIChhcnJbZW5kXSAhPT0gJycpIGJyZWFrO1xuICAgIH1cblxuICAgIGlmIChzdGFydCA+IGVuZCkgcmV0dXJuIFtdO1xuICAgIHJldHVybiBhcnIuc2xpY2Uoc3RhcnQsIGVuZCAtIHN0YXJ0ICsgMSk7XG4gIH1cblxuICB2YXIgZnJvbVBhcnRzID0gdHJpbShmcm9tLnNwbGl0KCcvJykpO1xuICB2YXIgdG9QYXJ0cyA9IHRyaW0odG8uc3BsaXQoJy8nKSk7XG5cbiAgdmFyIGxlbmd0aCA9IE1hdGgubWluKGZyb21QYXJ0cy5sZW5ndGgsIHRvUGFydHMubGVuZ3RoKTtcbiAgdmFyIHNhbWVQYXJ0c0xlbmd0aCA9IGxlbmd0aDtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgIGlmIChmcm9tUGFydHNbaV0gIT09IHRvUGFydHNbaV0pIHtcbiAgICAgIHNhbWVQYXJ0c0xlbmd0aCA9IGk7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICB2YXIgb3V0cHV0UGFydHMgPSBbXTtcbiAgZm9yICh2YXIgaSA9IHNhbWVQYXJ0c0xlbmd0aDsgaSA8IGZyb21QYXJ0cy5sZW5ndGg7IGkrKykge1xuICAgIG91dHB1dFBhcnRzLnB1c2goJy4uJyk7XG4gIH1cblxuICBvdXRwdXRQYXJ0cyA9IG91dHB1dFBhcnRzLmNvbmNhdCh0b1BhcnRzLnNsaWNlKHNhbWVQYXJ0c0xlbmd0aCkpO1xuXG4gIHJldHVybiBvdXRwdXRQYXJ0cy5qb2luKCcvJyk7XG59O1xuXG5leHBvcnRzLnNlcCA9ICcvJztcbmV4cG9ydHMuZGVsaW1pdGVyID0gJzonO1xuXG5leHBvcnRzLmRpcm5hbWUgPSBmdW5jdGlvbihwYXRoKSB7XG4gIHZhciByZXN1bHQgPSBzcGxpdFBhdGgocGF0aCksXG4gICAgICByb290ID0gcmVzdWx0WzBdLFxuICAgICAgZGlyID0gcmVzdWx0WzFdO1xuXG4gIGlmICghcm9vdCAmJiAhZGlyKSB7XG4gICAgLy8gTm8gZGlybmFtZSB3aGF0c29ldmVyXG4gICAgcmV0dXJuICcuJztcbiAgfVxuXG4gIGlmIChkaXIpIHtcbiAgICAvLyBJdCBoYXMgYSBkaXJuYW1lLCBzdHJpcCB0cmFpbGluZyBzbGFzaFxuICAgIGRpciA9IGRpci5zdWJzdHIoMCwgZGlyLmxlbmd0aCAtIDEpO1xuICB9XG5cbiAgcmV0dXJuIHJvb3QgKyBkaXI7XG59O1xuXG5cbmV4cG9ydHMuYmFzZW5hbWUgPSBmdW5jdGlvbihwYXRoLCBleHQpIHtcbiAgdmFyIGYgPSBzcGxpdFBhdGgocGF0aClbMl07XG4gIC8vIFRPRE86IG1ha2UgdGhpcyBjb21wYXJpc29uIGNhc2UtaW5zZW5zaXRpdmUgb24gd2luZG93cz9cbiAgaWYgKGV4dCAmJiBmLnN1YnN0cigtMSAqIGV4dC5sZW5ndGgpID09PSBleHQpIHtcbiAgICBmID0gZi5zdWJzdHIoMCwgZi5sZW5ndGggLSBleHQubGVuZ3RoKTtcbiAgfVxuICByZXR1cm4gZjtcbn07XG5cblxuZXhwb3J0cy5leHRuYW1lID0gZnVuY3Rpb24ocGF0aCkge1xuICByZXR1cm4gc3BsaXRQYXRoKHBhdGgpWzNdO1xufTtcblxuZnVuY3Rpb24gZmlsdGVyICh4cywgZikge1xuICAgIGlmICh4cy5maWx0ZXIpIHJldHVybiB4cy5maWx0ZXIoZik7XG4gICAgdmFyIHJlcyA9IFtdO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgeHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgaWYgKGYoeHNbaV0sIGksIHhzKSkgcmVzLnB1c2goeHNbaV0pO1xuICAgIH1cbiAgICByZXR1cm4gcmVzO1xufVxuXG4vLyBTdHJpbmcucHJvdG90eXBlLnN1YnN0ciAtIG5lZ2F0aXZlIGluZGV4IGRvbid0IHdvcmsgaW4gSUU4XG52YXIgc3Vic3RyID0gJ2FiJy5zdWJzdHIoLTEpID09PSAnYidcbiAgICA/IGZ1bmN0aW9uIChzdHIsIHN0YXJ0LCBsZW4pIHsgcmV0dXJuIHN0ci5zdWJzdHIoc3RhcnQsIGxlbikgfVxuICAgIDogZnVuY3Rpb24gKHN0ciwgc3RhcnQsIGxlbikge1xuICAgICAgICBpZiAoc3RhcnQgPCAwKSBzdGFydCA9IHN0ci5sZW5ndGggKyBzdGFydDtcbiAgICAgICAgcmV0dXJuIHN0ci5zdWJzdHIoc3RhcnQsIGxlbik7XG4gICAgfVxuO1xuIiwiLy8gc2hpbSBmb3IgdXNpbmcgcHJvY2VzcyBpbiBicm93c2VyXG5cbnZhciBwcm9jZXNzID0gbW9kdWxlLmV4cG9ydHMgPSB7fTtcbnZhciBxdWV1ZSA9IFtdO1xudmFyIGRyYWluaW5nID0gZmFsc2U7XG52YXIgY3VycmVudFF1ZXVlO1xudmFyIHF1ZXVlSW5kZXggPSAtMTtcblxuZnVuY3Rpb24gY2xlYW5VcE5leHRUaWNrKCkge1xuICAgIGRyYWluaW5nID0gZmFsc2U7XG4gICAgaWYgKGN1cnJlbnRRdWV1ZS5sZW5ndGgpIHtcbiAgICAgICAgcXVldWUgPSBjdXJyZW50UXVldWUuY29uY2F0KHF1ZXVlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICBxdWV1ZUluZGV4ID0gLTE7XG4gICAgfVxuICAgIGlmIChxdWV1ZS5sZW5ndGgpIHtcbiAgICAgICAgZHJhaW5RdWV1ZSgpO1xuICAgIH1cbn1cblxuZnVuY3Rpb24gZHJhaW5RdWV1ZSgpIHtcbiAgICBpZiAoZHJhaW5pbmcpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB2YXIgdGltZW91dCA9IHNldFRpbWVvdXQoY2xlYW5VcE5leHRUaWNrKTtcbiAgICBkcmFpbmluZyA9IHRydWU7XG5cbiAgICB2YXIgbGVuID0gcXVldWUubGVuZ3RoO1xuICAgIHdoaWxlKGxlbikge1xuICAgICAgICBjdXJyZW50UXVldWUgPSBxdWV1ZTtcbiAgICAgICAgcXVldWUgPSBbXTtcbiAgICAgICAgd2hpbGUgKCsrcXVldWVJbmRleCA8IGxlbikge1xuICAgICAgICAgICAgaWYgKGN1cnJlbnRRdWV1ZSkge1xuICAgICAgICAgICAgICAgIGN1cnJlbnRRdWV1ZVtxdWV1ZUluZGV4XS5ydW4oKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBxdWV1ZUluZGV4ID0gLTE7XG4gICAgICAgIGxlbiA9IHF1ZXVlLmxlbmd0aDtcbiAgICB9XG4gICAgY3VycmVudFF1ZXVlID0gbnVsbDtcbiAgICBkcmFpbmluZyA9IGZhbHNlO1xuICAgIGNsZWFyVGltZW91dCh0aW1lb3V0KTtcbn1cblxucHJvY2Vzcy5uZXh0VGljayA9IGZ1bmN0aW9uIChmdW4pIHtcbiAgICB2YXIgYXJncyA9IG5ldyBBcnJheShhcmd1bWVudHMubGVuZ3RoIC0gMSk7XG4gICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPiAxKSB7XG4gICAgICAgIGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBhcmdzW2kgLSAxXSA9IGFyZ3VtZW50c1tpXTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBxdWV1ZS5wdXNoKG5ldyBJdGVtKGZ1biwgYXJncykpO1xuICAgIGlmIChxdWV1ZS5sZW5ndGggPT09IDEgJiYgIWRyYWluaW5nKSB7XG4gICAgICAgIHNldFRpbWVvdXQoZHJhaW5RdWV1ZSwgMCk7XG4gICAgfVxufTtcblxuLy8gdjggbGlrZXMgcHJlZGljdGlibGUgb2JqZWN0c1xuZnVuY3Rpb24gSXRlbShmdW4sIGFycmF5KSB7XG4gICAgdGhpcy5mdW4gPSBmdW47XG4gICAgdGhpcy5hcnJheSA9IGFycmF5O1xufVxuSXRlbS5wcm90b3R5cGUucnVuID0gZnVuY3Rpb24gKCkge1xuICAgIHRoaXMuZnVuLmFwcGx5KG51bGwsIHRoaXMuYXJyYXkpO1xufTtcbnByb2Nlc3MudGl0bGUgPSAnYnJvd3Nlcic7XG5wcm9jZXNzLmJyb3dzZXIgPSB0cnVlO1xucHJvY2Vzcy5lbnYgPSB7fTtcbnByb2Nlc3MuYXJndiA9IFtdO1xucHJvY2Vzcy52ZXJzaW9uID0gJyc7IC8vIGVtcHR5IHN0cmluZyB0byBhdm9pZCByZWdleHAgaXNzdWVzXG5wcm9jZXNzLnZlcnNpb25zID0ge307XG5cbmZ1bmN0aW9uIG5vb3AoKSB7fVxuXG5wcm9jZXNzLm9uID0gbm9vcDtcbnByb2Nlc3MuYWRkTGlzdGVuZXIgPSBub29wO1xucHJvY2Vzcy5vbmNlID0gbm9vcDtcbnByb2Nlc3Mub2ZmID0gbm9vcDtcbnByb2Nlc3MucmVtb3ZlTGlzdGVuZXIgPSBub29wO1xucHJvY2Vzcy5yZW1vdmVBbGxMaXN0ZW5lcnMgPSBub29wO1xucHJvY2Vzcy5lbWl0ID0gbm9vcDtcblxucHJvY2Vzcy5iaW5kaW5nID0gZnVuY3Rpb24gKG5hbWUpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3Byb2Nlc3MuYmluZGluZyBpcyBub3Qgc3VwcG9ydGVkJyk7XG59O1xuXG5wcm9jZXNzLmN3ZCA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuICcvJyB9O1xucHJvY2Vzcy5jaGRpciA9IGZ1bmN0aW9uIChkaXIpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3Byb2Nlc3MuY2hkaXIgaXMgbm90IHN1cHBvcnRlZCcpO1xufTtcbnByb2Nlc3MudW1hc2sgPSBmdW5jdGlvbigpIHsgcmV0dXJuIDA7IH07XG4iLCIvKiEgaHR0cHM6Ly9tdGhzLmJlL3B1bnljb2RlIHYxLjQuMCBieSBAbWF0aGlhcyAqL1xuOyhmdW5jdGlvbihyb290KSB7XG5cblx0LyoqIERldGVjdCBmcmVlIHZhcmlhYmxlcyAqL1xuXHR2YXIgZnJlZUV4cG9ydHMgPSB0eXBlb2YgZXhwb3J0cyA9PSAnb2JqZWN0JyAmJiBleHBvcnRzICYmXG5cdFx0IWV4cG9ydHMubm9kZVR5cGUgJiYgZXhwb3J0cztcblx0dmFyIGZyZWVNb2R1bGUgPSB0eXBlb2YgbW9kdWxlID09ICdvYmplY3QnICYmIG1vZHVsZSAmJlxuXHRcdCFtb2R1bGUubm9kZVR5cGUgJiYgbW9kdWxlO1xuXHR2YXIgZnJlZUdsb2JhbCA9IHR5cGVvZiBnbG9iYWwgPT0gJ29iamVjdCcgJiYgZ2xvYmFsO1xuXHRpZiAoXG5cdFx0ZnJlZUdsb2JhbC5nbG9iYWwgPT09IGZyZWVHbG9iYWwgfHxcblx0XHRmcmVlR2xvYmFsLndpbmRvdyA9PT0gZnJlZUdsb2JhbCB8fFxuXHRcdGZyZWVHbG9iYWwuc2VsZiA9PT0gZnJlZUdsb2JhbFxuXHQpIHtcblx0XHRyb290ID0gZnJlZUdsb2JhbDtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGUgYHB1bnljb2RlYCBvYmplY3QuXG5cdCAqIEBuYW1lIHB1bnljb2RlXG5cdCAqIEB0eXBlIE9iamVjdFxuXHQgKi9cblx0dmFyIHB1bnljb2RlLFxuXG5cdC8qKiBIaWdoZXN0IHBvc2l0aXZlIHNpZ25lZCAzMi1iaXQgZmxvYXQgdmFsdWUgKi9cblx0bWF4SW50ID0gMjE0NzQ4MzY0NywgLy8gYWthLiAweDdGRkZGRkZGIG9yIDJeMzEtMVxuXG5cdC8qKiBCb290c3RyaW5nIHBhcmFtZXRlcnMgKi9cblx0YmFzZSA9IDM2LFxuXHR0TWluID0gMSxcblx0dE1heCA9IDI2LFxuXHRza2V3ID0gMzgsXG5cdGRhbXAgPSA3MDAsXG5cdGluaXRpYWxCaWFzID0gNzIsXG5cdGluaXRpYWxOID0gMTI4LCAvLyAweDgwXG5cdGRlbGltaXRlciA9ICctJywgLy8gJ1xceDJEJ1xuXG5cdC8qKiBSZWd1bGFyIGV4cHJlc3Npb25zICovXG5cdHJlZ2V4UHVueWNvZGUgPSAvXnhuLS0vLFxuXHRyZWdleE5vbkFTQ0lJID0gL1teXFx4MjAtXFx4N0VdLywgLy8gdW5wcmludGFibGUgQVNDSUkgY2hhcnMgKyBub24tQVNDSUkgY2hhcnNcblx0cmVnZXhTZXBhcmF0b3JzID0gL1tcXHgyRVxcdTMwMDJcXHVGRjBFXFx1RkY2MV0vZywgLy8gUkZDIDM0OTAgc2VwYXJhdG9yc1xuXG5cdC8qKiBFcnJvciBtZXNzYWdlcyAqL1xuXHRlcnJvcnMgPSB7XG5cdFx0J292ZXJmbG93JzogJ092ZXJmbG93OiBpbnB1dCBuZWVkcyB3aWRlciBpbnRlZ2VycyB0byBwcm9jZXNzJyxcblx0XHQnbm90LWJhc2ljJzogJ0lsbGVnYWwgaW5wdXQgPj0gMHg4MCAobm90IGEgYmFzaWMgY29kZSBwb2ludCknLFxuXHRcdCdpbnZhbGlkLWlucHV0JzogJ0ludmFsaWQgaW5wdXQnXG5cdH0sXG5cblx0LyoqIENvbnZlbmllbmNlIHNob3J0Y3V0cyAqL1xuXHRiYXNlTWludXNUTWluID0gYmFzZSAtIHRNaW4sXG5cdGZsb29yID0gTWF0aC5mbG9vcixcblx0c3RyaW5nRnJvbUNoYXJDb2RlID0gU3RyaW5nLmZyb21DaGFyQ29kZSxcblxuXHQvKiogVGVtcG9yYXJ5IHZhcmlhYmxlICovXG5cdGtleTtcblxuXHQvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cblxuXHQvKipcblx0ICogQSBnZW5lcmljIGVycm9yIHV0aWxpdHkgZnVuY3Rpb24uXG5cdCAqIEBwcml2YXRlXG5cdCAqIEBwYXJhbSB7U3RyaW5nfSB0eXBlIFRoZSBlcnJvciB0eXBlLlxuXHQgKiBAcmV0dXJucyB7RXJyb3J9IFRocm93cyBhIGBSYW5nZUVycm9yYCB3aXRoIHRoZSBhcHBsaWNhYmxlIGVycm9yIG1lc3NhZ2UuXG5cdCAqL1xuXHRmdW5jdGlvbiBlcnJvcih0eXBlKSB7XG5cdFx0dGhyb3cgbmV3IFJhbmdlRXJyb3IoZXJyb3JzW3R5cGVdKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBBIGdlbmVyaWMgYEFycmF5I21hcGAgdXRpbGl0eSBmdW5jdGlvbi5cblx0ICogQHByaXZhdGVcblx0ICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIGl0ZXJhdGUgb3Zlci5cblx0ICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2sgVGhlIGZ1bmN0aW9uIHRoYXQgZ2V0cyBjYWxsZWQgZm9yIGV2ZXJ5IGFycmF5XG5cdCAqIGl0ZW0uXG5cdCAqIEByZXR1cm5zIHtBcnJheX0gQSBuZXcgYXJyYXkgb2YgdmFsdWVzIHJldHVybmVkIGJ5IHRoZSBjYWxsYmFjayBmdW5jdGlvbi5cblx0ICovXG5cdGZ1bmN0aW9uIG1hcChhcnJheSwgZm4pIHtcblx0XHR2YXIgbGVuZ3RoID0gYXJyYXkubGVuZ3RoO1xuXHRcdHZhciByZXN1bHQgPSBbXTtcblx0XHR3aGlsZSAobGVuZ3RoLS0pIHtcblx0XHRcdHJlc3VsdFtsZW5ndGhdID0gZm4oYXJyYXlbbGVuZ3RoXSk7XG5cdFx0fVxuXHRcdHJldHVybiByZXN1bHQ7XG5cdH1cblxuXHQvKipcblx0ICogQSBzaW1wbGUgYEFycmF5I21hcGAtbGlrZSB3cmFwcGVyIHRvIHdvcmsgd2l0aCBkb21haW4gbmFtZSBzdHJpbmdzIG9yIGVtYWlsXG5cdCAqIGFkZHJlc3Nlcy5cblx0ICogQHByaXZhdGVcblx0ICogQHBhcmFtIHtTdHJpbmd9IGRvbWFpbiBUaGUgZG9tYWluIG5hbWUgb3IgZW1haWwgYWRkcmVzcy5cblx0ICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2sgVGhlIGZ1bmN0aW9uIHRoYXQgZ2V0cyBjYWxsZWQgZm9yIGV2ZXJ5XG5cdCAqIGNoYXJhY3Rlci5cblx0ICogQHJldHVybnMge0FycmF5fSBBIG5ldyBzdHJpbmcgb2YgY2hhcmFjdGVycyByZXR1cm5lZCBieSB0aGUgY2FsbGJhY2tcblx0ICogZnVuY3Rpb24uXG5cdCAqL1xuXHRmdW5jdGlvbiBtYXBEb21haW4oc3RyaW5nLCBmbikge1xuXHRcdHZhciBwYXJ0cyA9IHN0cmluZy5zcGxpdCgnQCcpO1xuXHRcdHZhciByZXN1bHQgPSAnJztcblx0XHRpZiAocGFydHMubGVuZ3RoID4gMSkge1xuXHRcdFx0Ly8gSW4gZW1haWwgYWRkcmVzc2VzLCBvbmx5IHRoZSBkb21haW4gbmFtZSBzaG91bGQgYmUgcHVueWNvZGVkLiBMZWF2ZVxuXHRcdFx0Ly8gdGhlIGxvY2FsIHBhcnQgKGkuZS4gZXZlcnl0aGluZyB1cCB0byBgQGApIGludGFjdC5cblx0XHRcdHJlc3VsdCA9IHBhcnRzWzBdICsgJ0AnO1xuXHRcdFx0c3RyaW5nID0gcGFydHNbMV07XG5cdFx0fVxuXHRcdC8vIEF2b2lkIGBzcGxpdChyZWdleClgIGZvciBJRTggY29tcGF0aWJpbGl0eS4gU2VlICMxNy5cblx0XHRzdHJpbmcgPSBzdHJpbmcucmVwbGFjZShyZWdleFNlcGFyYXRvcnMsICdcXHgyRScpO1xuXHRcdHZhciBsYWJlbHMgPSBzdHJpbmcuc3BsaXQoJy4nKTtcblx0XHR2YXIgZW5jb2RlZCA9IG1hcChsYWJlbHMsIGZuKS5qb2luKCcuJyk7XG5cdFx0cmV0dXJuIHJlc3VsdCArIGVuY29kZWQ7XG5cdH1cblxuXHQvKipcblx0ICogQ3JlYXRlcyBhbiBhcnJheSBjb250YWluaW5nIHRoZSBudW1lcmljIGNvZGUgcG9pbnRzIG9mIGVhY2ggVW5pY29kZVxuXHQgKiBjaGFyYWN0ZXIgaW4gdGhlIHN0cmluZy4gV2hpbGUgSmF2YVNjcmlwdCB1c2VzIFVDUy0yIGludGVybmFsbHksXG5cdCAqIHRoaXMgZnVuY3Rpb24gd2lsbCBjb252ZXJ0IGEgcGFpciBvZiBzdXJyb2dhdGUgaGFsdmVzIChlYWNoIG9mIHdoaWNoXG5cdCAqIFVDUy0yIGV4cG9zZXMgYXMgc2VwYXJhdGUgY2hhcmFjdGVycykgaW50byBhIHNpbmdsZSBjb2RlIHBvaW50LFxuXHQgKiBtYXRjaGluZyBVVEYtMTYuXG5cdCAqIEBzZWUgYHB1bnljb2RlLnVjczIuZW5jb2RlYFxuXHQgKiBAc2VlIDxodHRwczovL21hdGhpYXNieW5lbnMuYmUvbm90ZXMvamF2YXNjcmlwdC1lbmNvZGluZz5cblx0ICogQG1lbWJlck9mIHB1bnljb2RlLnVjczJcblx0ICogQG5hbWUgZGVjb2RlXG5cdCAqIEBwYXJhbSB7U3RyaW5nfSBzdHJpbmcgVGhlIFVuaWNvZGUgaW5wdXQgc3RyaW5nIChVQ1MtMikuXG5cdCAqIEByZXR1cm5zIHtBcnJheX0gVGhlIG5ldyBhcnJheSBvZiBjb2RlIHBvaW50cy5cblx0ICovXG5cdGZ1bmN0aW9uIHVjczJkZWNvZGUoc3RyaW5nKSB7XG5cdFx0dmFyIG91dHB1dCA9IFtdLFxuXHRcdCAgICBjb3VudGVyID0gMCxcblx0XHQgICAgbGVuZ3RoID0gc3RyaW5nLmxlbmd0aCxcblx0XHQgICAgdmFsdWUsXG5cdFx0ICAgIGV4dHJhO1xuXHRcdHdoaWxlIChjb3VudGVyIDwgbGVuZ3RoKSB7XG5cdFx0XHR2YWx1ZSA9IHN0cmluZy5jaGFyQ29kZUF0KGNvdW50ZXIrKyk7XG5cdFx0XHRpZiAodmFsdWUgPj0gMHhEODAwICYmIHZhbHVlIDw9IDB4REJGRiAmJiBjb3VudGVyIDwgbGVuZ3RoKSB7XG5cdFx0XHRcdC8vIGhpZ2ggc3Vycm9nYXRlLCBhbmQgdGhlcmUgaXMgYSBuZXh0IGNoYXJhY3RlclxuXHRcdFx0XHRleHRyYSA9IHN0cmluZy5jaGFyQ29kZUF0KGNvdW50ZXIrKyk7XG5cdFx0XHRcdGlmICgoZXh0cmEgJiAweEZDMDApID09IDB4REMwMCkgeyAvLyBsb3cgc3Vycm9nYXRlXG5cdFx0XHRcdFx0b3V0cHV0LnB1c2goKCh2YWx1ZSAmIDB4M0ZGKSA8PCAxMCkgKyAoZXh0cmEgJiAweDNGRikgKyAweDEwMDAwKTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHQvLyB1bm1hdGNoZWQgc3Vycm9nYXRlOyBvbmx5IGFwcGVuZCB0aGlzIGNvZGUgdW5pdCwgaW4gY2FzZSB0aGUgbmV4dFxuXHRcdFx0XHRcdC8vIGNvZGUgdW5pdCBpcyB0aGUgaGlnaCBzdXJyb2dhdGUgb2YgYSBzdXJyb2dhdGUgcGFpclxuXHRcdFx0XHRcdG91dHB1dC5wdXNoKHZhbHVlKTtcblx0XHRcdFx0XHRjb3VudGVyLS07XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdG91dHB1dC5wdXNoKHZhbHVlKTtcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIG91dHB1dDtcblx0fVxuXG5cdC8qKlxuXHQgKiBDcmVhdGVzIGEgc3RyaW5nIGJhc2VkIG9uIGFuIGFycmF5IG9mIG51bWVyaWMgY29kZSBwb2ludHMuXG5cdCAqIEBzZWUgYHB1bnljb2RlLnVjczIuZGVjb2RlYFxuXHQgKiBAbWVtYmVyT2YgcHVueWNvZGUudWNzMlxuXHQgKiBAbmFtZSBlbmNvZGVcblx0ICogQHBhcmFtIHtBcnJheX0gY29kZVBvaW50cyBUaGUgYXJyYXkgb2YgbnVtZXJpYyBjb2RlIHBvaW50cy5cblx0ICogQHJldHVybnMge1N0cmluZ30gVGhlIG5ldyBVbmljb2RlIHN0cmluZyAoVUNTLTIpLlxuXHQgKi9cblx0ZnVuY3Rpb24gdWNzMmVuY29kZShhcnJheSkge1xuXHRcdHJldHVybiBtYXAoYXJyYXksIGZ1bmN0aW9uKHZhbHVlKSB7XG5cdFx0XHR2YXIgb3V0cHV0ID0gJyc7XG5cdFx0XHRpZiAodmFsdWUgPiAweEZGRkYpIHtcblx0XHRcdFx0dmFsdWUgLT0gMHgxMDAwMDtcblx0XHRcdFx0b3V0cHV0ICs9IHN0cmluZ0Zyb21DaGFyQ29kZSh2YWx1ZSA+Pj4gMTAgJiAweDNGRiB8IDB4RDgwMCk7XG5cdFx0XHRcdHZhbHVlID0gMHhEQzAwIHwgdmFsdWUgJiAweDNGRjtcblx0XHRcdH1cblx0XHRcdG91dHB1dCArPSBzdHJpbmdGcm9tQ2hhckNvZGUodmFsdWUpO1xuXHRcdFx0cmV0dXJuIG91dHB1dDtcblx0XHR9KS5qb2luKCcnKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBDb252ZXJ0cyBhIGJhc2ljIGNvZGUgcG9pbnQgaW50byBhIGRpZ2l0L2ludGVnZXIuXG5cdCAqIEBzZWUgYGRpZ2l0VG9CYXNpYygpYFxuXHQgKiBAcHJpdmF0ZVxuXHQgKiBAcGFyYW0ge051bWJlcn0gY29kZVBvaW50IFRoZSBiYXNpYyBudW1lcmljIGNvZGUgcG9pbnQgdmFsdWUuXG5cdCAqIEByZXR1cm5zIHtOdW1iZXJ9IFRoZSBudW1lcmljIHZhbHVlIG9mIGEgYmFzaWMgY29kZSBwb2ludCAoZm9yIHVzZSBpblxuXHQgKiByZXByZXNlbnRpbmcgaW50ZWdlcnMpIGluIHRoZSByYW5nZSBgMGAgdG8gYGJhc2UgLSAxYCwgb3IgYGJhc2VgIGlmXG5cdCAqIHRoZSBjb2RlIHBvaW50IGRvZXMgbm90IHJlcHJlc2VudCBhIHZhbHVlLlxuXHQgKi9cblx0ZnVuY3Rpb24gYmFzaWNUb0RpZ2l0KGNvZGVQb2ludCkge1xuXHRcdGlmIChjb2RlUG9pbnQgLSA0OCA8IDEwKSB7XG5cdFx0XHRyZXR1cm4gY29kZVBvaW50IC0gMjI7XG5cdFx0fVxuXHRcdGlmIChjb2RlUG9pbnQgLSA2NSA8IDI2KSB7XG5cdFx0XHRyZXR1cm4gY29kZVBvaW50IC0gNjU7XG5cdFx0fVxuXHRcdGlmIChjb2RlUG9pbnQgLSA5NyA8IDI2KSB7XG5cdFx0XHRyZXR1cm4gY29kZVBvaW50IC0gOTc7XG5cdFx0fVxuXHRcdHJldHVybiBiYXNlO1xuXHR9XG5cblx0LyoqXG5cdCAqIENvbnZlcnRzIGEgZGlnaXQvaW50ZWdlciBpbnRvIGEgYmFzaWMgY29kZSBwb2ludC5cblx0ICogQHNlZSBgYmFzaWNUb0RpZ2l0KClgXG5cdCAqIEBwcml2YXRlXG5cdCAqIEBwYXJhbSB7TnVtYmVyfSBkaWdpdCBUaGUgbnVtZXJpYyB2YWx1ZSBvZiBhIGJhc2ljIGNvZGUgcG9pbnQuXG5cdCAqIEByZXR1cm5zIHtOdW1iZXJ9IFRoZSBiYXNpYyBjb2RlIHBvaW50IHdob3NlIHZhbHVlICh3aGVuIHVzZWQgZm9yXG5cdCAqIHJlcHJlc2VudGluZyBpbnRlZ2VycykgaXMgYGRpZ2l0YCwgd2hpY2ggbmVlZHMgdG8gYmUgaW4gdGhlIHJhbmdlXG5cdCAqIGAwYCB0byBgYmFzZSAtIDFgLiBJZiBgZmxhZ2AgaXMgbm9uLXplcm8sIHRoZSB1cHBlcmNhc2UgZm9ybSBpc1xuXHQgKiB1c2VkOyBlbHNlLCB0aGUgbG93ZXJjYXNlIGZvcm0gaXMgdXNlZC4gVGhlIGJlaGF2aW9yIGlzIHVuZGVmaW5lZFxuXHQgKiBpZiBgZmxhZ2AgaXMgbm9uLXplcm8gYW5kIGBkaWdpdGAgaGFzIG5vIHVwcGVyY2FzZSBmb3JtLlxuXHQgKi9cblx0ZnVuY3Rpb24gZGlnaXRUb0Jhc2ljKGRpZ2l0LCBmbGFnKSB7XG5cdFx0Ly8gIDAuLjI1IG1hcCB0byBBU0NJSSBhLi56IG9yIEEuLlpcblx0XHQvLyAyNi4uMzUgbWFwIHRvIEFTQ0lJIDAuLjlcblx0XHRyZXR1cm4gZGlnaXQgKyAyMiArIDc1ICogKGRpZ2l0IDwgMjYpIC0gKChmbGFnICE9IDApIDw8IDUpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEJpYXMgYWRhcHRhdGlvbiBmdW5jdGlvbiBhcyBwZXIgc2VjdGlvbiAzLjQgb2YgUkZDIDM0OTIuXG5cdCAqIGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmMzNDkyI3NlY3Rpb24tMy40XG5cdCAqIEBwcml2YXRlXG5cdCAqL1xuXHRmdW5jdGlvbiBhZGFwdChkZWx0YSwgbnVtUG9pbnRzLCBmaXJzdFRpbWUpIHtcblx0XHR2YXIgayA9IDA7XG5cdFx0ZGVsdGEgPSBmaXJzdFRpbWUgPyBmbG9vcihkZWx0YSAvIGRhbXApIDogZGVsdGEgPj4gMTtcblx0XHRkZWx0YSArPSBmbG9vcihkZWx0YSAvIG51bVBvaW50cyk7XG5cdFx0Zm9yICgvKiBubyBpbml0aWFsaXphdGlvbiAqLzsgZGVsdGEgPiBiYXNlTWludXNUTWluICogdE1heCA+PiAxOyBrICs9IGJhc2UpIHtcblx0XHRcdGRlbHRhID0gZmxvb3IoZGVsdGEgLyBiYXNlTWludXNUTWluKTtcblx0XHR9XG5cdFx0cmV0dXJuIGZsb29yKGsgKyAoYmFzZU1pbnVzVE1pbiArIDEpICogZGVsdGEgLyAoZGVsdGEgKyBza2V3KSk7XG5cdH1cblxuXHQvKipcblx0ICogQ29udmVydHMgYSBQdW55Y29kZSBzdHJpbmcgb2YgQVNDSUktb25seSBzeW1ib2xzIHRvIGEgc3RyaW5nIG9mIFVuaWNvZGVcblx0ICogc3ltYm9scy5cblx0ICogQG1lbWJlck9mIHB1bnljb2RlXG5cdCAqIEBwYXJhbSB7U3RyaW5nfSBpbnB1dCBUaGUgUHVueWNvZGUgc3RyaW5nIG9mIEFTQ0lJLW9ubHkgc3ltYm9scy5cblx0ICogQHJldHVybnMge1N0cmluZ30gVGhlIHJlc3VsdGluZyBzdHJpbmcgb2YgVW5pY29kZSBzeW1ib2xzLlxuXHQgKi9cblx0ZnVuY3Rpb24gZGVjb2RlKGlucHV0KSB7XG5cdFx0Ly8gRG9uJ3QgdXNlIFVDUy0yXG5cdFx0dmFyIG91dHB1dCA9IFtdLFxuXHRcdCAgICBpbnB1dExlbmd0aCA9IGlucHV0Lmxlbmd0aCxcblx0XHQgICAgb3V0LFxuXHRcdCAgICBpID0gMCxcblx0XHQgICAgbiA9IGluaXRpYWxOLFxuXHRcdCAgICBiaWFzID0gaW5pdGlhbEJpYXMsXG5cdFx0ICAgIGJhc2ljLFxuXHRcdCAgICBqLFxuXHRcdCAgICBpbmRleCxcblx0XHQgICAgb2xkaSxcblx0XHQgICAgdyxcblx0XHQgICAgayxcblx0XHQgICAgZGlnaXQsXG5cdFx0ICAgIHQsXG5cdFx0ICAgIC8qKiBDYWNoZWQgY2FsY3VsYXRpb24gcmVzdWx0cyAqL1xuXHRcdCAgICBiYXNlTWludXNUO1xuXG5cdFx0Ly8gSGFuZGxlIHRoZSBiYXNpYyBjb2RlIHBvaW50czogbGV0IGBiYXNpY2AgYmUgdGhlIG51bWJlciBvZiBpbnB1dCBjb2RlXG5cdFx0Ly8gcG9pbnRzIGJlZm9yZSB0aGUgbGFzdCBkZWxpbWl0ZXIsIG9yIGAwYCBpZiB0aGVyZSBpcyBub25lLCB0aGVuIGNvcHlcblx0XHQvLyB0aGUgZmlyc3QgYmFzaWMgY29kZSBwb2ludHMgdG8gdGhlIG91dHB1dC5cblxuXHRcdGJhc2ljID0gaW5wdXQubGFzdEluZGV4T2YoZGVsaW1pdGVyKTtcblx0XHRpZiAoYmFzaWMgPCAwKSB7XG5cdFx0XHRiYXNpYyA9IDA7XG5cdFx0fVxuXG5cdFx0Zm9yIChqID0gMDsgaiA8IGJhc2ljOyArK2opIHtcblx0XHRcdC8vIGlmIGl0J3Mgbm90IGEgYmFzaWMgY29kZSBwb2ludFxuXHRcdFx0aWYgKGlucHV0LmNoYXJDb2RlQXQoaikgPj0gMHg4MCkge1xuXHRcdFx0XHRlcnJvcignbm90LWJhc2ljJyk7XG5cdFx0XHR9XG5cdFx0XHRvdXRwdXQucHVzaChpbnB1dC5jaGFyQ29kZUF0KGopKTtcblx0XHR9XG5cblx0XHQvLyBNYWluIGRlY29kaW5nIGxvb3A6IHN0YXJ0IGp1c3QgYWZ0ZXIgdGhlIGxhc3QgZGVsaW1pdGVyIGlmIGFueSBiYXNpYyBjb2RlXG5cdFx0Ly8gcG9pbnRzIHdlcmUgY29waWVkOyBzdGFydCBhdCB0aGUgYmVnaW5uaW5nIG90aGVyd2lzZS5cblxuXHRcdGZvciAoaW5kZXggPSBiYXNpYyA+IDAgPyBiYXNpYyArIDEgOiAwOyBpbmRleCA8IGlucHV0TGVuZ3RoOyAvKiBubyBmaW5hbCBleHByZXNzaW9uICovKSB7XG5cblx0XHRcdC8vIGBpbmRleGAgaXMgdGhlIGluZGV4IG9mIHRoZSBuZXh0IGNoYXJhY3RlciB0byBiZSBjb25zdW1lZC5cblx0XHRcdC8vIERlY29kZSBhIGdlbmVyYWxpemVkIHZhcmlhYmxlLWxlbmd0aCBpbnRlZ2VyIGludG8gYGRlbHRhYCxcblx0XHRcdC8vIHdoaWNoIGdldHMgYWRkZWQgdG8gYGlgLiBUaGUgb3ZlcmZsb3cgY2hlY2tpbmcgaXMgZWFzaWVyXG5cdFx0XHQvLyBpZiB3ZSBpbmNyZWFzZSBgaWAgYXMgd2UgZ28sIHRoZW4gc3VidHJhY3Qgb2ZmIGl0cyBzdGFydGluZ1xuXHRcdFx0Ly8gdmFsdWUgYXQgdGhlIGVuZCB0byBvYnRhaW4gYGRlbHRhYC5cblx0XHRcdGZvciAob2xkaSA9IGksIHcgPSAxLCBrID0gYmFzZTsgLyogbm8gY29uZGl0aW9uICovOyBrICs9IGJhc2UpIHtcblxuXHRcdFx0XHRpZiAoaW5kZXggPj0gaW5wdXRMZW5ndGgpIHtcblx0XHRcdFx0XHRlcnJvcignaW52YWxpZC1pbnB1dCcpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0ZGlnaXQgPSBiYXNpY1RvRGlnaXQoaW5wdXQuY2hhckNvZGVBdChpbmRleCsrKSk7XG5cblx0XHRcdFx0aWYgKGRpZ2l0ID49IGJhc2UgfHwgZGlnaXQgPiBmbG9vcigobWF4SW50IC0gaSkgLyB3KSkge1xuXHRcdFx0XHRcdGVycm9yKCdvdmVyZmxvdycpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0aSArPSBkaWdpdCAqIHc7XG5cdFx0XHRcdHQgPSBrIDw9IGJpYXMgPyB0TWluIDogKGsgPj0gYmlhcyArIHRNYXggPyB0TWF4IDogayAtIGJpYXMpO1xuXG5cdFx0XHRcdGlmIChkaWdpdCA8IHQpIHtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGJhc2VNaW51c1QgPSBiYXNlIC0gdDtcblx0XHRcdFx0aWYgKHcgPiBmbG9vcihtYXhJbnQgLyBiYXNlTWludXNUKSkge1xuXHRcdFx0XHRcdGVycm9yKCdvdmVyZmxvdycpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0dyAqPSBiYXNlTWludXNUO1xuXG5cdFx0XHR9XG5cblx0XHRcdG91dCA9IG91dHB1dC5sZW5ndGggKyAxO1xuXHRcdFx0YmlhcyA9IGFkYXB0KGkgLSBvbGRpLCBvdXQsIG9sZGkgPT0gMCk7XG5cblx0XHRcdC8vIGBpYCB3YXMgc3VwcG9zZWQgdG8gd3JhcCBhcm91bmQgZnJvbSBgb3V0YCB0byBgMGAsXG5cdFx0XHQvLyBpbmNyZW1lbnRpbmcgYG5gIGVhY2ggdGltZSwgc28gd2UnbGwgZml4IHRoYXQgbm93OlxuXHRcdFx0aWYgKGZsb29yKGkgLyBvdXQpID4gbWF4SW50IC0gbikge1xuXHRcdFx0XHRlcnJvcignb3ZlcmZsb3cnKTtcblx0XHRcdH1cblxuXHRcdFx0biArPSBmbG9vcihpIC8gb3V0KTtcblx0XHRcdGkgJT0gb3V0O1xuXG5cdFx0XHQvLyBJbnNlcnQgYG5gIGF0IHBvc2l0aW9uIGBpYCBvZiB0aGUgb3V0cHV0XG5cdFx0XHRvdXRwdXQuc3BsaWNlKGkrKywgMCwgbik7XG5cblx0XHR9XG5cblx0XHRyZXR1cm4gdWNzMmVuY29kZShvdXRwdXQpO1xuXHR9XG5cblx0LyoqXG5cdCAqIENvbnZlcnRzIGEgc3RyaW5nIG9mIFVuaWNvZGUgc3ltYm9scyAoZS5nLiBhIGRvbWFpbiBuYW1lIGxhYmVsKSB0byBhXG5cdCAqIFB1bnljb2RlIHN0cmluZyBvZiBBU0NJSS1vbmx5IHN5bWJvbHMuXG5cdCAqIEBtZW1iZXJPZiBwdW55Y29kZVxuXHQgKiBAcGFyYW0ge1N0cmluZ30gaW5wdXQgVGhlIHN0cmluZyBvZiBVbmljb2RlIHN5bWJvbHMuXG5cdCAqIEByZXR1cm5zIHtTdHJpbmd9IFRoZSByZXN1bHRpbmcgUHVueWNvZGUgc3RyaW5nIG9mIEFTQ0lJLW9ubHkgc3ltYm9scy5cblx0ICovXG5cdGZ1bmN0aW9uIGVuY29kZShpbnB1dCkge1xuXHRcdHZhciBuLFxuXHRcdCAgICBkZWx0YSxcblx0XHQgICAgaGFuZGxlZENQQ291bnQsXG5cdFx0ICAgIGJhc2ljTGVuZ3RoLFxuXHRcdCAgICBiaWFzLFxuXHRcdCAgICBqLFxuXHRcdCAgICBtLFxuXHRcdCAgICBxLFxuXHRcdCAgICBrLFxuXHRcdCAgICB0LFxuXHRcdCAgICBjdXJyZW50VmFsdWUsXG5cdFx0ICAgIG91dHB1dCA9IFtdLFxuXHRcdCAgICAvKiogYGlucHV0TGVuZ3RoYCB3aWxsIGhvbGQgdGhlIG51bWJlciBvZiBjb2RlIHBvaW50cyBpbiBgaW5wdXRgLiAqL1xuXHRcdCAgICBpbnB1dExlbmd0aCxcblx0XHQgICAgLyoqIENhY2hlZCBjYWxjdWxhdGlvbiByZXN1bHRzICovXG5cdFx0ICAgIGhhbmRsZWRDUENvdW50UGx1c09uZSxcblx0XHQgICAgYmFzZU1pbnVzVCxcblx0XHQgICAgcU1pbnVzVDtcblxuXHRcdC8vIENvbnZlcnQgdGhlIGlucHV0IGluIFVDUy0yIHRvIFVuaWNvZGVcblx0XHRpbnB1dCA9IHVjczJkZWNvZGUoaW5wdXQpO1xuXG5cdFx0Ly8gQ2FjaGUgdGhlIGxlbmd0aFxuXHRcdGlucHV0TGVuZ3RoID0gaW5wdXQubGVuZ3RoO1xuXG5cdFx0Ly8gSW5pdGlhbGl6ZSB0aGUgc3RhdGVcblx0XHRuID0gaW5pdGlhbE47XG5cdFx0ZGVsdGEgPSAwO1xuXHRcdGJpYXMgPSBpbml0aWFsQmlhcztcblxuXHRcdC8vIEhhbmRsZSB0aGUgYmFzaWMgY29kZSBwb2ludHNcblx0XHRmb3IgKGogPSAwOyBqIDwgaW5wdXRMZW5ndGg7ICsraikge1xuXHRcdFx0Y3VycmVudFZhbHVlID0gaW5wdXRbal07XG5cdFx0XHRpZiAoY3VycmVudFZhbHVlIDwgMHg4MCkge1xuXHRcdFx0XHRvdXRwdXQucHVzaChzdHJpbmdGcm9tQ2hhckNvZGUoY3VycmVudFZhbHVlKSk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0aGFuZGxlZENQQ291bnQgPSBiYXNpY0xlbmd0aCA9IG91dHB1dC5sZW5ndGg7XG5cblx0XHQvLyBgaGFuZGxlZENQQ291bnRgIGlzIHRoZSBudW1iZXIgb2YgY29kZSBwb2ludHMgdGhhdCBoYXZlIGJlZW4gaGFuZGxlZDtcblx0XHQvLyBgYmFzaWNMZW5ndGhgIGlzIHRoZSBudW1iZXIgb2YgYmFzaWMgY29kZSBwb2ludHMuXG5cblx0XHQvLyBGaW5pc2ggdGhlIGJhc2ljIHN0cmluZyAtIGlmIGl0IGlzIG5vdCBlbXB0eSAtIHdpdGggYSBkZWxpbWl0ZXJcblx0XHRpZiAoYmFzaWNMZW5ndGgpIHtcblx0XHRcdG91dHB1dC5wdXNoKGRlbGltaXRlcik7XG5cdFx0fVxuXG5cdFx0Ly8gTWFpbiBlbmNvZGluZyBsb29wOlxuXHRcdHdoaWxlIChoYW5kbGVkQ1BDb3VudCA8IGlucHV0TGVuZ3RoKSB7XG5cblx0XHRcdC8vIEFsbCBub24tYmFzaWMgY29kZSBwb2ludHMgPCBuIGhhdmUgYmVlbiBoYW5kbGVkIGFscmVhZHkuIEZpbmQgdGhlIG5leHRcblx0XHRcdC8vIGxhcmdlciBvbmU6XG5cdFx0XHRmb3IgKG0gPSBtYXhJbnQsIGogPSAwOyBqIDwgaW5wdXRMZW5ndGg7ICsraikge1xuXHRcdFx0XHRjdXJyZW50VmFsdWUgPSBpbnB1dFtqXTtcblx0XHRcdFx0aWYgKGN1cnJlbnRWYWx1ZSA+PSBuICYmIGN1cnJlbnRWYWx1ZSA8IG0pIHtcblx0XHRcdFx0XHRtID0gY3VycmVudFZhbHVlO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdC8vIEluY3JlYXNlIGBkZWx0YWAgZW5vdWdoIHRvIGFkdmFuY2UgdGhlIGRlY29kZXIncyA8bixpPiBzdGF0ZSB0byA8bSwwPixcblx0XHRcdC8vIGJ1dCBndWFyZCBhZ2FpbnN0IG92ZXJmbG93XG5cdFx0XHRoYW5kbGVkQ1BDb3VudFBsdXNPbmUgPSBoYW5kbGVkQ1BDb3VudCArIDE7XG5cdFx0XHRpZiAobSAtIG4gPiBmbG9vcigobWF4SW50IC0gZGVsdGEpIC8gaGFuZGxlZENQQ291bnRQbHVzT25lKSkge1xuXHRcdFx0XHRlcnJvcignb3ZlcmZsb3cnKTtcblx0XHRcdH1cblxuXHRcdFx0ZGVsdGEgKz0gKG0gLSBuKSAqIGhhbmRsZWRDUENvdW50UGx1c09uZTtcblx0XHRcdG4gPSBtO1xuXG5cdFx0XHRmb3IgKGogPSAwOyBqIDwgaW5wdXRMZW5ndGg7ICsraikge1xuXHRcdFx0XHRjdXJyZW50VmFsdWUgPSBpbnB1dFtqXTtcblxuXHRcdFx0XHRpZiAoY3VycmVudFZhbHVlIDwgbiAmJiArK2RlbHRhID4gbWF4SW50KSB7XG5cdFx0XHRcdFx0ZXJyb3IoJ292ZXJmbG93Jyk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZiAoY3VycmVudFZhbHVlID09IG4pIHtcblx0XHRcdFx0XHQvLyBSZXByZXNlbnQgZGVsdGEgYXMgYSBnZW5lcmFsaXplZCB2YXJpYWJsZS1sZW5ndGggaW50ZWdlclxuXHRcdFx0XHRcdGZvciAocSA9IGRlbHRhLCBrID0gYmFzZTsgLyogbm8gY29uZGl0aW9uICovOyBrICs9IGJhc2UpIHtcblx0XHRcdFx0XHRcdHQgPSBrIDw9IGJpYXMgPyB0TWluIDogKGsgPj0gYmlhcyArIHRNYXggPyB0TWF4IDogayAtIGJpYXMpO1xuXHRcdFx0XHRcdFx0aWYgKHEgPCB0KSB7XG5cdFx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0cU1pbnVzVCA9IHEgLSB0O1xuXHRcdFx0XHRcdFx0YmFzZU1pbnVzVCA9IGJhc2UgLSB0O1xuXHRcdFx0XHRcdFx0b3V0cHV0LnB1c2goXG5cdFx0XHRcdFx0XHRcdHN0cmluZ0Zyb21DaGFyQ29kZShkaWdpdFRvQmFzaWModCArIHFNaW51c1QgJSBiYXNlTWludXNULCAwKSlcblx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0XHRxID0gZmxvb3IocU1pbnVzVCAvIGJhc2VNaW51c1QpO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdG91dHB1dC5wdXNoKHN0cmluZ0Zyb21DaGFyQ29kZShkaWdpdFRvQmFzaWMocSwgMCkpKTtcblx0XHRcdFx0XHRiaWFzID0gYWRhcHQoZGVsdGEsIGhhbmRsZWRDUENvdW50UGx1c09uZSwgaGFuZGxlZENQQ291bnQgPT0gYmFzaWNMZW5ndGgpO1xuXHRcdFx0XHRcdGRlbHRhID0gMDtcblx0XHRcdFx0XHQrK2hhbmRsZWRDUENvdW50O1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdCsrZGVsdGE7XG5cdFx0XHQrK247XG5cblx0XHR9XG5cdFx0cmV0dXJuIG91dHB1dC5qb2luKCcnKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBDb252ZXJ0cyBhIFB1bnljb2RlIHN0cmluZyByZXByZXNlbnRpbmcgYSBkb21haW4gbmFtZSBvciBhbiBlbWFpbCBhZGRyZXNzXG5cdCAqIHRvIFVuaWNvZGUuIE9ubHkgdGhlIFB1bnljb2RlZCBwYXJ0cyBvZiB0aGUgaW5wdXQgd2lsbCBiZSBjb252ZXJ0ZWQsIGkuZS5cblx0ICogaXQgZG9lc24ndCBtYXR0ZXIgaWYgeW91IGNhbGwgaXQgb24gYSBzdHJpbmcgdGhhdCBoYXMgYWxyZWFkeSBiZWVuXG5cdCAqIGNvbnZlcnRlZCB0byBVbmljb2RlLlxuXHQgKiBAbWVtYmVyT2YgcHVueWNvZGVcblx0ICogQHBhcmFtIHtTdHJpbmd9IGlucHV0IFRoZSBQdW55Y29kZWQgZG9tYWluIG5hbWUgb3IgZW1haWwgYWRkcmVzcyB0b1xuXHQgKiBjb252ZXJ0IHRvIFVuaWNvZGUuXG5cdCAqIEByZXR1cm5zIHtTdHJpbmd9IFRoZSBVbmljb2RlIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBnaXZlbiBQdW55Y29kZVxuXHQgKiBzdHJpbmcuXG5cdCAqL1xuXHRmdW5jdGlvbiB0b1VuaWNvZGUoaW5wdXQpIHtcblx0XHRyZXR1cm4gbWFwRG9tYWluKGlucHV0LCBmdW5jdGlvbihzdHJpbmcpIHtcblx0XHRcdHJldHVybiByZWdleFB1bnljb2RlLnRlc3Qoc3RyaW5nKVxuXHRcdFx0XHQ/IGRlY29kZShzdHJpbmcuc2xpY2UoNCkudG9Mb3dlckNhc2UoKSlcblx0XHRcdFx0OiBzdHJpbmc7XG5cdFx0fSk7XG5cdH1cblxuXHQvKipcblx0ICogQ29udmVydHMgYSBVbmljb2RlIHN0cmluZyByZXByZXNlbnRpbmcgYSBkb21haW4gbmFtZSBvciBhbiBlbWFpbCBhZGRyZXNzIHRvXG5cdCAqIFB1bnljb2RlLiBPbmx5IHRoZSBub24tQVNDSUkgcGFydHMgb2YgdGhlIGRvbWFpbiBuYW1lIHdpbGwgYmUgY29udmVydGVkLFxuXHQgKiBpLmUuIGl0IGRvZXNuJ3QgbWF0dGVyIGlmIHlvdSBjYWxsIGl0IHdpdGggYSBkb21haW4gdGhhdCdzIGFscmVhZHkgaW5cblx0ICogQVNDSUkuXG5cdCAqIEBtZW1iZXJPZiBwdW55Y29kZVxuXHQgKiBAcGFyYW0ge1N0cmluZ30gaW5wdXQgVGhlIGRvbWFpbiBuYW1lIG9yIGVtYWlsIGFkZHJlc3MgdG8gY29udmVydCwgYXMgYVxuXHQgKiBVbmljb2RlIHN0cmluZy5cblx0ICogQHJldHVybnMge1N0cmluZ30gVGhlIFB1bnljb2RlIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBnaXZlbiBkb21haW4gbmFtZSBvclxuXHQgKiBlbWFpbCBhZGRyZXNzLlxuXHQgKi9cblx0ZnVuY3Rpb24gdG9BU0NJSShpbnB1dCkge1xuXHRcdHJldHVybiBtYXBEb21haW4oaW5wdXQsIGZ1bmN0aW9uKHN0cmluZykge1xuXHRcdFx0cmV0dXJuIHJlZ2V4Tm9uQVNDSUkudGVzdChzdHJpbmcpXG5cdFx0XHRcdD8gJ3huLS0nICsgZW5jb2RlKHN0cmluZylcblx0XHRcdFx0OiBzdHJpbmc7XG5cdFx0fSk7XG5cdH1cblxuXHQvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cblxuXHQvKiogRGVmaW5lIHRoZSBwdWJsaWMgQVBJICovXG5cdHB1bnljb2RlID0ge1xuXHRcdC8qKlxuXHRcdCAqIEEgc3RyaW5nIHJlcHJlc2VudGluZyB0aGUgY3VycmVudCBQdW55Y29kZS5qcyB2ZXJzaW9uIG51bWJlci5cblx0XHQgKiBAbWVtYmVyT2YgcHVueWNvZGVcblx0XHQgKiBAdHlwZSBTdHJpbmdcblx0XHQgKi9cblx0XHQndmVyc2lvbic6ICcxLjMuMicsXG5cdFx0LyoqXG5cdFx0ICogQW4gb2JqZWN0IG9mIG1ldGhvZHMgdG8gY29udmVydCBmcm9tIEphdmFTY3JpcHQncyBpbnRlcm5hbCBjaGFyYWN0ZXJcblx0XHQgKiByZXByZXNlbnRhdGlvbiAoVUNTLTIpIHRvIFVuaWNvZGUgY29kZSBwb2ludHMsIGFuZCBiYWNrLlxuXHRcdCAqIEBzZWUgPGh0dHBzOi8vbWF0aGlhc2J5bmVucy5iZS9ub3Rlcy9qYXZhc2NyaXB0LWVuY29kaW5nPlxuXHRcdCAqIEBtZW1iZXJPZiBwdW55Y29kZVxuXHRcdCAqIEB0eXBlIE9iamVjdFxuXHRcdCAqL1xuXHRcdCd1Y3MyJzoge1xuXHRcdFx0J2RlY29kZSc6IHVjczJkZWNvZGUsXG5cdFx0XHQnZW5jb2RlJzogdWNzMmVuY29kZVxuXHRcdH0sXG5cdFx0J2RlY29kZSc6IGRlY29kZSxcblx0XHQnZW5jb2RlJzogZW5jb2RlLFxuXHRcdCd0b0FTQ0lJJzogdG9BU0NJSSxcblx0XHQndG9Vbmljb2RlJzogdG9Vbmljb2RlXG5cdH07XG5cblx0LyoqIEV4cG9zZSBgcHVueWNvZGVgICovXG5cdC8vIFNvbWUgQU1EIGJ1aWxkIG9wdGltaXplcnMsIGxpa2Ugci5qcywgY2hlY2sgZm9yIHNwZWNpZmljIGNvbmRpdGlvbiBwYXR0ZXJuc1xuXHQvLyBsaWtlIHRoZSBmb2xsb3dpbmc6XG5cdGlmIChcblx0XHR0eXBlb2YgZGVmaW5lID09ICdmdW5jdGlvbicgJiZcblx0XHR0eXBlb2YgZGVmaW5lLmFtZCA9PSAnb2JqZWN0JyAmJlxuXHRcdGRlZmluZS5hbWRcblx0KSB7XG5cdFx0ZGVmaW5lKCdwdW55Y29kZScsIGZ1bmN0aW9uKCkge1xuXHRcdFx0cmV0dXJuIHB1bnljb2RlO1xuXHRcdH0pO1xuXHR9IGVsc2UgaWYgKGZyZWVFeHBvcnRzICYmIGZyZWVNb2R1bGUpIHtcblx0XHRpZiAobW9kdWxlLmV4cG9ydHMgPT0gZnJlZUV4cG9ydHMpIHtcblx0XHRcdC8vIGluIE5vZGUuanMsIGlvLmpzLCBvciBSaW5nb0pTIHYwLjguMCtcblx0XHRcdGZyZWVNb2R1bGUuZXhwb3J0cyA9IHB1bnljb2RlO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHQvLyBpbiBOYXJ3aGFsIG9yIFJpbmdvSlMgdjAuNy4wLVxuXHRcdFx0Zm9yIChrZXkgaW4gcHVueWNvZGUpIHtcblx0XHRcdFx0cHVueWNvZGUuaGFzT3duUHJvcGVydHkoa2V5KSAmJiAoZnJlZUV4cG9ydHNba2V5XSA9IHB1bnljb2RlW2tleV0pO1xuXHRcdFx0fVxuXHRcdH1cblx0fSBlbHNlIHtcblx0XHQvLyBpbiBSaGlubyBvciBhIHdlYiBicm93c2VyXG5cdFx0cm9vdC5wdW55Y29kZSA9IHB1bnljb2RlO1xuXHR9XG5cbn0odGhpcykpO1xuIiwiLy8gQ29weXJpZ2h0IEpveWVudCwgSW5jLiBhbmQgb3RoZXIgTm9kZSBjb250cmlidXRvcnMuXG4vL1xuLy8gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGFcbi8vIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGVcbi8vIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZ1xuLy8gd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLFxuLy8gZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdFxuLy8gcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlXG4vLyBmb2xsb3dpbmcgY29uZGl0aW9uczpcbi8vXG4vLyBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZFxuLy8gaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4vL1xuLy8gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTU1xuLy8gT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRlxuLy8gTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTlxuLy8gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sXG4vLyBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1Jcbi8vIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEVcbi8vIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG5cbid1c2Ugc3RyaWN0JztcblxuLy8gSWYgb2JqLmhhc093blByb3BlcnR5IGhhcyBiZWVuIG92ZXJyaWRkZW4sIHRoZW4gY2FsbGluZ1xuLy8gb2JqLmhhc093blByb3BlcnR5KHByb3ApIHdpbGwgYnJlYWsuXG4vLyBTZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9qb3llbnQvbm9kZS9pc3N1ZXMvMTcwN1xuZnVuY3Rpb24gaGFzT3duUHJvcGVydHkob2JqLCBwcm9wKSB7XG4gIHJldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqLCBwcm9wKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihxcywgc2VwLCBlcSwgb3B0aW9ucykge1xuICBzZXAgPSBzZXAgfHwgJyYnO1xuICBlcSA9IGVxIHx8ICc9JztcbiAgdmFyIG9iaiA9IHt9O1xuXG4gIGlmICh0eXBlb2YgcXMgIT09ICdzdHJpbmcnIHx8IHFzLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiBvYmo7XG4gIH1cblxuICB2YXIgcmVnZXhwID0gL1xcKy9nO1xuICBxcyA9IHFzLnNwbGl0KHNlcCk7XG5cbiAgdmFyIG1heEtleXMgPSAxMDAwO1xuICBpZiAob3B0aW9ucyAmJiB0eXBlb2Ygb3B0aW9ucy5tYXhLZXlzID09PSAnbnVtYmVyJykge1xuICAgIG1heEtleXMgPSBvcHRpb25zLm1heEtleXM7XG4gIH1cblxuICB2YXIgbGVuID0gcXMubGVuZ3RoO1xuICAvLyBtYXhLZXlzIDw9IDAgbWVhbnMgdGhhdCB3ZSBzaG91bGQgbm90IGxpbWl0IGtleXMgY291bnRcbiAgaWYgKG1heEtleXMgPiAwICYmIGxlbiA+IG1heEtleXMpIHtcbiAgICBsZW4gPSBtYXhLZXlzO1xuICB9XG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47ICsraSkge1xuICAgIHZhciB4ID0gcXNbaV0ucmVwbGFjZShyZWdleHAsICclMjAnKSxcbiAgICAgICAgaWR4ID0geC5pbmRleE9mKGVxKSxcbiAgICAgICAga3N0ciwgdnN0ciwgaywgdjtcblxuICAgIGlmIChpZHggPj0gMCkge1xuICAgICAga3N0ciA9IHguc3Vic3RyKDAsIGlkeCk7XG4gICAgICB2c3RyID0geC5zdWJzdHIoaWR4ICsgMSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGtzdHIgPSB4O1xuICAgICAgdnN0ciA9ICcnO1xuICAgIH1cblxuICAgIGsgPSBkZWNvZGVVUklDb21wb25lbnQoa3N0cik7XG4gICAgdiA9IGRlY29kZVVSSUNvbXBvbmVudCh2c3RyKTtcblxuICAgIGlmICghaGFzT3duUHJvcGVydHkob2JqLCBrKSkge1xuICAgICAgb2JqW2tdID0gdjtcbiAgICB9IGVsc2UgaWYgKGlzQXJyYXkob2JqW2tdKSkge1xuICAgICAgb2JqW2tdLnB1c2godik7XG4gICAgfSBlbHNlIHtcbiAgICAgIG9ialtrXSA9IFtvYmpba10sIHZdO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBvYmo7XG59O1xuXG52YXIgaXNBcnJheSA9IEFycmF5LmlzQXJyYXkgfHwgZnVuY3Rpb24gKHhzKSB7XG4gIHJldHVybiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoeHMpID09PSAnW29iamVjdCBBcnJheV0nO1xufTtcbiIsIi8vIENvcHlyaWdodCBKb3llbnQsIEluYy4gYW5kIG90aGVyIE5vZGUgY29udHJpYnV0b3JzLlxuLy9cbi8vIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhXG4vLyBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlXG4vLyBcIlNvZnR3YXJlXCIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmdcbi8vIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCxcbi8vIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXRcbi8vIHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZVxuLy8gZm9sbG93aW5nIGNvbmRpdGlvbnM6XG4vL1xuLy8gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWRcbi8vIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuLy9cbi8vIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1Ncbi8vIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0Zcbi8vIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU5cbi8vIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLFxuLy8gREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SXG4vLyBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFXG4vLyBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLlxuXG4ndXNlIHN0cmljdCc7XG5cbnZhciBzdHJpbmdpZnlQcmltaXRpdmUgPSBmdW5jdGlvbih2KSB7XG4gIHN3aXRjaCAodHlwZW9mIHYpIHtcbiAgICBjYXNlICdzdHJpbmcnOlxuICAgICAgcmV0dXJuIHY7XG5cbiAgICBjYXNlICdib29sZWFuJzpcbiAgICAgIHJldHVybiB2ID8gJ3RydWUnIDogJ2ZhbHNlJztcblxuICAgIGNhc2UgJ251bWJlcic6XG4gICAgICByZXR1cm4gaXNGaW5pdGUodikgPyB2IDogJyc7XG5cbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuICcnO1xuICB9XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKG9iaiwgc2VwLCBlcSwgbmFtZSkge1xuICBzZXAgPSBzZXAgfHwgJyYnO1xuICBlcSA9IGVxIHx8ICc9JztcbiAgaWYgKG9iaiA9PT0gbnVsbCkge1xuICAgIG9iaiA9IHVuZGVmaW5lZDtcbiAgfVxuXG4gIGlmICh0eXBlb2Ygb2JqID09PSAnb2JqZWN0Jykge1xuICAgIHJldHVybiBtYXAob2JqZWN0S2V5cyhvYmopLCBmdW5jdGlvbihrKSB7XG4gICAgICB2YXIga3MgPSBlbmNvZGVVUklDb21wb25lbnQoc3RyaW5naWZ5UHJpbWl0aXZlKGspKSArIGVxO1xuICAgICAgaWYgKGlzQXJyYXkob2JqW2tdKSkge1xuICAgICAgICByZXR1cm4gbWFwKG9ialtrXSwgZnVuY3Rpb24odikge1xuICAgICAgICAgIHJldHVybiBrcyArIGVuY29kZVVSSUNvbXBvbmVudChzdHJpbmdpZnlQcmltaXRpdmUodikpO1xuICAgICAgICB9KS5qb2luKHNlcCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4ga3MgKyBlbmNvZGVVUklDb21wb25lbnQoc3RyaW5naWZ5UHJpbWl0aXZlKG9ialtrXSkpO1xuICAgICAgfVxuICAgIH0pLmpvaW4oc2VwKTtcblxuICB9XG5cbiAgaWYgKCFuYW1lKSByZXR1cm4gJyc7XG4gIHJldHVybiBlbmNvZGVVUklDb21wb25lbnQoc3RyaW5naWZ5UHJpbWl0aXZlKG5hbWUpKSArIGVxICtcbiAgICAgICAgIGVuY29kZVVSSUNvbXBvbmVudChzdHJpbmdpZnlQcmltaXRpdmUob2JqKSk7XG59O1xuXG52YXIgaXNBcnJheSA9IEFycmF5LmlzQXJyYXkgfHwgZnVuY3Rpb24gKHhzKSB7XG4gIHJldHVybiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoeHMpID09PSAnW29iamVjdCBBcnJheV0nO1xufTtcblxuZnVuY3Rpb24gbWFwICh4cywgZikge1xuICBpZiAoeHMubWFwKSByZXR1cm4geHMubWFwKGYpO1xuICB2YXIgcmVzID0gW107XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgeHMubGVuZ3RoOyBpKyspIHtcbiAgICByZXMucHVzaChmKHhzW2ldLCBpKSk7XG4gIH1cbiAgcmV0dXJuIHJlcztcbn1cblxudmFyIG9iamVjdEtleXMgPSBPYmplY3Qua2V5cyB8fCBmdW5jdGlvbiAob2JqKSB7XG4gIHZhciByZXMgPSBbXTtcbiAgZm9yICh2YXIga2V5IGluIG9iaikge1xuICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqLCBrZXkpKSByZXMucHVzaChrZXkpO1xuICB9XG4gIHJldHVybiByZXM7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG5leHBvcnRzLmRlY29kZSA9IGV4cG9ydHMucGFyc2UgPSByZXF1aXJlKCcuL2RlY29kZScpO1xuZXhwb3J0cy5lbmNvZGUgPSBleHBvcnRzLnN0cmluZ2lmeSA9IHJlcXVpcmUoJy4vZW5jb2RlJyk7XG4iLCIvLyBDb3B5cmlnaHQgSm95ZW50LCBJbmMuIGFuZCBvdGhlciBOb2RlIGNvbnRyaWJ1dG9ycy5cbi8vXG4vLyBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYVxuLy8gY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZVxuLy8gXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nXG4vLyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsXG4vLyBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0XG4vLyBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGVcbi8vIGZvbGxvd2luZyBjb25kaXRpb25zOlxuLy9cbi8vIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkXG4vLyBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbi8vXG4vLyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTXG4vLyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GXG4vLyBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOXG4vLyBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSxcbi8vIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUlxuLy8gT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRVxuLy8gVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cblxudmFyIHB1bnljb2RlID0gcmVxdWlyZSgncHVueWNvZGUnKTtcblxuZXhwb3J0cy5wYXJzZSA9IHVybFBhcnNlO1xuZXhwb3J0cy5yZXNvbHZlID0gdXJsUmVzb2x2ZTtcbmV4cG9ydHMucmVzb2x2ZU9iamVjdCA9IHVybFJlc29sdmVPYmplY3Q7XG5leHBvcnRzLmZvcm1hdCA9IHVybEZvcm1hdDtcblxuZXhwb3J0cy5VcmwgPSBVcmw7XG5cbmZ1bmN0aW9uIFVybCgpIHtcbiAgdGhpcy5wcm90b2NvbCA9IG51bGw7XG4gIHRoaXMuc2xhc2hlcyA9IG51bGw7XG4gIHRoaXMuYXV0aCA9IG51bGw7XG4gIHRoaXMuaG9zdCA9IG51bGw7XG4gIHRoaXMucG9ydCA9IG51bGw7XG4gIHRoaXMuaG9zdG5hbWUgPSBudWxsO1xuICB0aGlzLmhhc2ggPSBudWxsO1xuICB0aGlzLnNlYXJjaCA9IG51bGw7XG4gIHRoaXMucXVlcnkgPSBudWxsO1xuICB0aGlzLnBhdGhuYW1lID0gbnVsbDtcbiAgdGhpcy5wYXRoID0gbnVsbDtcbiAgdGhpcy5ocmVmID0gbnVsbDtcbn1cblxuLy8gUmVmZXJlbmNlOiBSRkMgMzk4NiwgUkZDIDE4MDgsIFJGQyAyMzk2XG5cbi8vIGRlZmluZSB0aGVzZSBoZXJlIHNvIGF0IGxlYXN0IHRoZXkgb25seSBoYXZlIHRvIGJlXG4vLyBjb21waWxlZCBvbmNlIG9uIHRoZSBmaXJzdCBtb2R1bGUgbG9hZC5cbnZhciBwcm90b2NvbFBhdHRlcm4gPSAvXihbYS16MC05ListXSs6KS9pLFxuICAgIHBvcnRQYXR0ZXJuID0gLzpbMC05XSokLyxcblxuICAgIC8vIFJGQyAyMzk2OiBjaGFyYWN0ZXJzIHJlc2VydmVkIGZvciBkZWxpbWl0aW5nIFVSTHMuXG4gICAgLy8gV2UgYWN0dWFsbHkganVzdCBhdXRvLWVzY2FwZSB0aGVzZS5cbiAgICBkZWxpbXMgPSBbJzwnLCAnPicsICdcIicsICdgJywgJyAnLCAnXFxyJywgJ1xcbicsICdcXHQnXSxcblxuICAgIC8vIFJGQyAyMzk2OiBjaGFyYWN0ZXJzIG5vdCBhbGxvd2VkIGZvciB2YXJpb3VzIHJlYXNvbnMuXG4gICAgdW53aXNlID0gWyd7JywgJ30nLCAnfCcsICdcXFxcJywgJ14nLCAnYCddLmNvbmNhdChkZWxpbXMpLFxuXG4gICAgLy8gQWxsb3dlZCBieSBSRkNzLCBidXQgY2F1c2Ugb2YgWFNTIGF0dGFja3MuICBBbHdheXMgZXNjYXBlIHRoZXNlLlxuICAgIGF1dG9Fc2NhcGUgPSBbJ1xcJyddLmNvbmNhdCh1bndpc2UpLFxuICAgIC8vIENoYXJhY3RlcnMgdGhhdCBhcmUgbmV2ZXIgZXZlciBhbGxvd2VkIGluIGEgaG9zdG5hbWUuXG4gICAgLy8gTm90ZSB0aGF0IGFueSBpbnZhbGlkIGNoYXJzIGFyZSBhbHNvIGhhbmRsZWQsIGJ1dCB0aGVzZVxuICAgIC8vIGFyZSB0aGUgb25lcyB0aGF0IGFyZSAqZXhwZWN0ZWQqIHRvIGJlIHNlZW4sIHNvIHdlIGZhc3QtcGF0aFxuICAgIC8vIHRoZW0uXG4gICAgbm9uSG9zdENoYXJzID0gWyclJywgJy8nLCAnPycsICc7JywgJyMnXS5jb25jYXQoYXV0b0VzY2FwZSksXG4gICAgaG9zdEVuZGluZ0NoYXJzID0gWycvJywgJz8nLCAnIyddLFxuICAgIGhvc3RuYW1lTWF4TGVuID0gMjU1LFxuICAgIGhvc3RuYW1lUGFydFBhdHRlcm4gPSAvXlthLXowLTlBLVpfLV17MCw2M30kLyxcbiAgICBob3N0bmFtZVBhcnRTdGFydCA9IC9eKFthLXowLTlBLVpfLV17MCw2M30pKC4qKSQvLFxuICAgIC8vIHByb3RvY29scyB0aGF0IGNhbiBhbGxvdyBcInVuc2FmZVwiIGFuZCBcInVud2lzZVwiIGNoYXJzLlxuICAgIHVuc2FmZVByb3RvY29sID0ge1xuICAgICAgJ2phdmFzY3JpcHQnOiB0cnVlLFxuICAgICAgJ2phdmFzY3JpcHQ6JzogdHJ1ZVxuICAgIH0sXG4gICAgLy8gcHJvdG9jb2xzIHRoYXQgbmV2ZXIgaGF2ZSBhIGhvc3RuYW1lLlxuICAgIGhvc3RsZXNzUHJvdG9jb2wgPSB7XG4gICAgICAnamF2YXNjcmlwdCc6IHRydWUsXG4gICAgICAnamF2YXNjcmlwdDonOiB0cnVlXG4gICAgfSxcbiAgICAvLyBwcm90b2NvbHMgdGhhdCBhbHdheXMgY29udGFpbiBhIC8vIGJpdC5cbiAgICBzbGFzaGVkUHJvdG9jb2wgPSB7XG4gICAgICAnaHR0cCc6IHRydWUsXG4gICAgICAnaHR0cHMnOiB0cnVlLFxuICAgICAgJ2Z0cCc6IHRydWUsXG4gICAgICAnZ29waGVyJzogdHJ1ZSxcbiAgICAgICdmaWxlJzogdHJ1ZSxcbiAgICAgICdodHRwOic6IHRydWUsXG4gICAgICAnaHR0cHM6JzogdHJ1ZSxcbiAgICAgICdmdHA6JzogdHJ1ZSxcbiAgICAgICdnb3BoZXI6JzogdHJ1ZSxcbiAgICAgICdmaWxlOic6IHRydWVcbiAgICB9LFxuICAgIHF1ZXJ5c3RyaW5nID0gcmVxdWlyZSgncXVlcnlzdHJpbmcnKTtcblxuZnVuY3Rpb24gdXJsUGFyc2UodXJsLCBwYXJzZVF1ZXJ5U3RyaW5nLCBzbGFzaGVzRGVub3RlSG9zdCkge1xuICBpZiAodXJsICYmIGlzT2JqZWN0KHVybCkgJiYgdXJsIGluc3RhbmNlb2YgVXJsKSByZXR1cm4gdXJsO1xuXG4gIHZhciB1ID0gbmV3IFVybDtcbiAgdS5wYXJzZSh1cmwsIHBhcnNlUXVlcnlTdHJpbmcsIHNsYXNoZXNEZW5vdGVIb3N0KTtcbiAgcmV0dXJuIHU7XG59XG5cblVybC5wcm90b3R5cGUucGFyc2UgPSBmdW5jdGlvbih1cmwsIHBhcnNlUXVlcnlTdHJpbmcsIHNsYXNoZXNEZW5vdGVIb3N0KSB7XG4gIGlmICghaXNTdHJpbmcodXJsKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJQYXJhbWV0ZXIgJ3VybCcgbXVzdCBiZSBhIHN0cmluZywgbm90IFwiICsgdHlwZW9mIHVybCk7XG4gIH1cblxuICB2YXIgcmVzdCA9IHVybDtcblxuICAvLyB0cmltIGJlZm9yZSBwcm9jZWVkaW5nLlxuICAvLyBUaGlzIGlzIHRvIHN1cHBvcnQgcGFyc2Ugc3R1ZmYgbGlrZSBcIiAgaHR0cDovL2Zvby5jb20gIFxcblwiXG4gIHJlc3QgPSByZXN0LnRyaW0oKTtcblxuICB2YXIgcHJvdG8gPSBwcm90b2NvbFBhdHRlcm4uZXhlYyhyZXN0KTtcbiAgaWYgKHByb3RvKSB7XG4gICAgcHJvdG8gPSBwcm90b1swXTtcbiAgICB2YXIgbG93ZXJQcm90byA9IHByb3RvLnRvTG93ZXJDYXNlKCk7XG4gICAgdGhpcy5wcm90b2NvbCA9IGxvd2VyUHJvdG87XG4gICAgcmVzdCA9IHJlc3Quc3Vic3RyKHByb3RvLmxlbmd0aCk7XG4gIH1cblxuICAvLyBmaWd1cmUgb3V0IGlmIGl0J3MgZ290IGEgaG9zdFxuICAvLyB1c2VyQHNlcnZlciBpcyAqYWx3YXlzKiBpbnRlcnByZXRlZCBhcyBhIGhvc3RuYW1lLCBhbmQgdXJsXG4gIC8vIHJlc29sdXRpb24gd2lsbCB0cmVhdCAvL2Zvby9iYXIgYXMgaG9zdD1mb28scGF0aD1iYXIgYmVjYXVzZSB0aGF0J3NcbiAgLy8gaG93IHRoZSBicm93c2VyIHJlc29sdmVzIHJlbGF0aXZlIFVSTHMuXG4gIGlmIChzbGFzaGVzRGVub3RlSG9zdCB8fCBwcm90byB8fCByZXN0Lm1hdGNoKC9eXFwvXFwvW15AXFwvXStAW15AXFwvXSsvKSkge1xuICAgIHZhciBzbGFzaGVzID0gcmVzdC5zdWJzdHIoMCwgMikgPT09ICcvLyc7XG4gICAgaWYgKHNsYXNoZXMgJiYgIShwcm90byAmJiBob3N0bGVzc1Byb3RvY29sW3Byb3RvXSkpIHtcbiAgICAgIHJlc3QgPSByZXN0LnN1YnN0cigyKTtcbiAgICAgIHRoaXMuc2xhc2hlcyA9IHRydWU7XG4gICAgfVxuICB9XG5cbiAgaWYgKCFob3N0bGVzc1Byb3RvY29sW3Byb3RvXSAmJlxuICAgICAgKHNsYXNoZXMgfHwgKHByb3RvICYmICFzbGFzaGVkUHJvdG9jb2xbcHJvdG9dKSkpIHtcblxuICAgIC8vIHRoZXJlJ3MgYSBob3N0bmFtZS5cbiAgICAvLyB0aGUgZmlyc3QgaW5zdGFuY2Ugb2YgLywgPywgOywgb3IgIyBlbmRzIHRoZSBob3N0LlxuICAgIC8vXG4gICAgLy8gSWYgdGhlcmUgaXMgYW4gQCBpbiB0aGUgaG9zdG5hbWUsIHRoZW4gbm9uLWhvc3QgY2hhcnMgKmFyZSogYWxsb3dlZFxuICAgIC8vIHRvIHRoZSBsZWZ0IG9mIHRoZSBsYXN0IEAgc2lnbiwgdW5sZXNzIHNvbWUgaG9zdC1lbmRpbmcgY2hhcmFjdGVyXG4gICAgLy8gY29tZXMgKmJlZm9yZSogdGhlIEAtc2lnbi5cbiAgICAvLyBVUkxzIGFyZSBvYm5veGlvdXMuXG4gICAgLy9cbiAgICAvLyBleDpcbiAgICAvLyBodHRwOi8vYUBiQGMvID0+IHVzZXI6YUBiIGhvc3Q6Y1xuICAgIC8vIGh0dHA6Ly9hQGI/QGMgPT4gdXNlcjphIGhvc3Q6YyBwYXRoOi8/QGNcblxuICAgIC8vIHYwLjEyIFRPRE8oaXNhYWNzKTogVGhpcyBpcyBub3QgcXVpdGUgaG93IENocm9tZSBkb2VzIHRoaW5ncy5cbiAgICAvLyBSZXZpZXcgb3VyIHRlc3QgY2FzZSBhZ2FpbnN0IGJyb3dzZXJzIG1vcmUgY29tcHJlaGVuc2l2ZWx5LlxuXG4gICAgLy8gZmluZCB0aGUgZmlyc3QgaW5zdGFuY2Ugb2YgYW55IGhvc3RFbmRpbmdDaGFyc1xuICAgIHZhciBob3N0RW5kID0gLTE7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBob3N0RW5kaW5nQ2hhcnMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBoZWMgPSByZXN0LmluZGV4T2YoaG9zdEVuZGluZ0NoYXJzW2ldKTtcbiAgICAgIGlmIChoZWMgIT09IC0xICYmIChob3N0RW5kID09PSAtMSB8fCBoZWMgPCBob3N0RW5kKSlcbiAgICAgICAgaG9zdEVuZCA9IGhlYztcbiAgICB9XG5cbiAgICAvLyBhdCB0aGlzIHBvaW50LCBlaXRoZXIgd2UgaGF2ZSBhbiBleHBsaWNpdCBwb2ludCB3aGVyZSB0aGVcbiAgICAvLyBhdXRoIHBvcnRpb24gY2Fubm90IGdvIHBhc3QsIG9yIHRoZSBsYXN0IEAgY2hhciBpcyB0aGUgZGVjaWRlci5cbiAgICB2YXIgYXV0aCwgYXRTaWduO1xuICAgIGlmIChob3N0RW5kID09PSAtMSkge1xuICAgICAgLy8gYXRTaWduIGNhbiBiZSBhbnl3aGVyZS5cbiAgICAgIGF0U2lnbiA9IHJlc3QubGFzdEluZGV4T2YoJ0AnKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gYXRTaWduIG11c3QgYmUgaW4gYXV0aCBwb3J0aW9uLlxuICAgICAgLy8gaHR0cDovL2FAYi9jQGQgPT4gaG9zdDpiIGF1dGg6YSBwYXRoOi9jQGRcbiAgICAgIGF0U2lnbiA9IHJlc3QubGFzdEluZGV4T2YoJ0AnLCBob3N0RW5kKTtcbiAgICB9XG5cbiAgICAvLyBOb3cgd2UgaGF2ZSBhIHBvcnRpb24gd2hpY2ggaXMgZGVmaW5pdGVseSB0aGUgYXV0aC5cbiAgICAvLyBQdWxsIHRoYXQgb2ZmLlxuICAgIGlmIChhdFNpZ24gIT09IC0xKSB7XG4gICAgICBhdXRoID0gcmVzdC5zbGljZSgwLCBhdFNpZ24pO1xuICAgICAgcmVzdCA9IHJlc3Quc2xpY2UoYXRTaWduICsgMSk7XG4gICAgICB0aGlzLmF1dGggPSBkZWNvZGVVUklDb21wb25lbnQoYXV0aCk7XG4gICAgfVxuXG4gICAgLy8gdGhlIGhvc3QgaXMgdGhlIHJlbWFpbmluZyB0byB0aGUgbGVmdCBvZiB0aGUgZmlyc3Qgbm9uLWhvc3QgY2hhclxuICAgIGhvc3RFbmQgPSAtMTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG5vbkhvc3RDaGFycy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGhlYyA9IHJlc3QuaW5kZXhPZihub25Ib3N0Q2hhcnNbaV0pO1xuICAgICAgaWYgKGhlYyAhPT0gLTEgJiYgKGhvc3RFbmQgPT09IC0xIHx8IGhlYyA8IGhvc3RFbmQpKVxuICAgICAgICBob3N0RW5kID0gaGVjO1xuICAgIH1cbiAgICAvLyBpZiB3ZSBzdGlsbCBoYXZlIG5vdCBoaXQgaXQsIHRoZW4gdGhlIGVudGlyZSB0aGluZyBpcyBhIGhvc3QuXG4gICAgaWYgKGhvc3RFbmQgPT09IC0xKVxuICAgICAgaG9zdEVuZCA9IHJlc3QubGVuZ3RoO1xuXG4gICAgdGhpcy5ob3N0ID0gcmVzdC5zbGljZSgwLCBob3N0RW5kKTtcbiAgICByZXN0ID0gcmVzdC5zbGljZShob3N0RW5kKTtcblxuICAgIC8vIHB1bGwgb3V0IHBvcnQuXG4gICAgdGhpcy5wYXJzZUhvc3QoKTtcblxuICAgIC8vIHdlJ3ZlIGluZGljYXRlZCB0aGF0IHRoZXJlIGlzIGEgaG9zdG5hbWUsXG4gICAgLy8gc28gZXZlbiBpZiBpdCdzIGVtcHR5LCBpdCBoYXMgdG8gYmUgcHJlc2VudC5cbiAgICB0aGlzLmhvc3RuYW1lID0gdGhpcy5ob3N0bmFtZSB8fCAnJztcblxuICAgIC8vIGlmIGhvc3RuYW1lIGJlZ2lucyB3aXRoIFsgYW5kIGVuZHMgd2l0aCBdXG4gICAgLy8gYXNzdW1lIHRoYXQgaXQncyBhbiBJUHY2IGFkZHJlc3MuXG4gICAgdmFyIGlwdjZIb3N0bmFtZSA9IHRoaXMuaG9zdG5hbWVbMF0gPT09ICdbJyAmJlxuICAgICAgICB0aGlzLmhvc3RuYW1lW3RoaXMuaG9zdG5hbWUubGVuZ3RoIC0gMV0gPT09ICddJztcblxuICAgIC8vIHZhbGlkYXRlIGEgbGl0dGxlLlxuICAgIGlmICghaXB2Nkhvc3RuYW1lKSB7XG4gICAgICB2YXIgaG9zdHBhcnRzID0gdGhpcy5ob3N0bmFtZS5zcGxpdCgvXFwuLyk7XG4gICAgICBmb3IgKHZhciBpID0gMCwgbCA9IGhvc3RwYXJ0cy5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICAgICAgdmFyIHBhcnQgPSBob3N0cGFydHNbaV07XG4gICAgICAgIGlmICghcGFydCkgY29udGludWU7XG4gICAgICAgIGlmICghcGFydC5tYXRjaChob3N0bmFtZVBhcnRQYXR0ZXJuKSkge1xuICAgICAgICAgIHZhciBuZXdwYXJ0ID0gJyc7XG4gICAgICAgICAgZm9yICh2YXIgaiA9IDAsIGsgPSBwYXJ0Lmxlbmd0aDsgaiA8IGs7IGorKykge1xuICAgICAgICAgICAgaWYgKHBhcnQuY2hhckNvZGVBdChqKSA+IDEyNykge1xuICAgICAgICAgICAgICAvLyB3ZSByZXBsYWNlIG5vbi1BU0NJSSBjaGFyIHdpdGggYSB0ZW1wb3JhcnkgcGxhY2Vob2xkZXJcbiAgICAgICAgICAgICAgLy8gd2UgbmVlZCB0aGlzIHRvIG1ha2Ugc3VyZSBzaXplIG9mIGhvc3RuYW1lIGlzIG5vdFxuICAgICAgICAgICAgICAvLyBicm9rZW4gYnkgcmVwbGFjaW5nIG5vbi1BU0NJSSBieSBub3RoaW5nXG4gICAgICAgICAgICAgIG5ld3BhcnQgKz0gJ3gnO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgbmV3cGFydCArPSBwYXJ0W2pdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICAvLyB3ZSB0ZXN0IGFnYWluIHdpdGggQVNDSUkgY2hhciBvbmx5XG4gICAgICAgICAgaWYgKCFuZXdwYXJ0Lm1hdGNoKGhvc3RuYW1lUGFydFBhdHRlcm4pKSB7XG4gICAgICAgICAgICB2YXIgdmFsaWRQYXJ0cyA9IGhvc3RwYXJ0cy5zbGljZSgwLCBpKTtcbiAgICAgICAgICAgIHZhciBub3RIb3N0ID0gaG9zdHBhcnRzLnNsaWNlKGkgKyAxKTtcbiAgICAgICAgICAgIHZhciBiaXQgPSBwYXJ0Lm1hdGNoKGhvc3RuYW1lUGFydFN0YXJ0KTtcbiAgICAgICAgICAgIGlmIChiaXQpIHtcbiAgICAgICAgICAgICAgdmFsaWRQYXJ0cy5wdXNoKGJpdFsxXSk7XG4gICAgICAgICAgICAgIG5vdEhvc3QudW5zaGlmdChiaXRbMl0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKG5vdEhvc3QubGVuZ3RoKSB7XG4gICAgICAgICAgICAgIHJlc3QgPSAnLycgKyBub3RIb3N0LmpvaW4oJy4nKSArIHJlc3Q7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmhvc3RuYW1lID0gdmFsaWRQYXJ0cy5qb2luKCcuJyk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodGhpcy5ob3N0bmFtZS5sZW5ndGggPiBob3N0bmFtZU1heExlbikge1xuICAgICAgdGhpcy5ob3N0bmFtZSA9ICcnO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBob3N0bmFtZXMgYXJlIGFsd2F5cyBsb3dlciBjYXNlLlxuICAgICAgdGhpcy5ob3N0bmFtZSA9IHRoaXMuaG9zdG5hbWUudG9Mb3dlckNhc2UoKTtcbiAgICB9XG5cbiAgICBpZiAoIWlwdjZIb3N0bmFtZSkge1xuICAgICAgLy8gSUROQSBTdXBwb3J0OiBSZXR1cm5zIGEgcHVueSBjb2RlZCByZXByZXNlbnRhdGlvbiBvZiBcImRvbWFpblwiLlxuICAgICAgLy8gSXQgb25seSBjb252ZXJ0cyB0aGUgcGFydCBvZiB0aGUgZG9tYWluIG5hbWUgdGhhdFxuICAgICAgLy8gaGFzIG5vbiBBU0NJSSBjaGFyYWN0ZXJzLiBJLmUuIGl0IGRvc2VudCBtYXR0ZXIgaWZcbiAgICAgIC8vIHlvdSBjYWxsIGl0IHdpdGggYSBkb21haW4gdGhhdCBhbHJlYWR5IGlzIGluIEFTQ0lJLlxuICAgICAgdmFyIGRvbWFpbkFycmF5ID0gdGhpcy5ob3N0bmFtZS5zcGxpdCgnLicpO1xuICAgICAgdmFyIG5ld091dCA9IFtdO1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBkb21haW5BcnJheS5sZW5ndGg7ICsraSkge1xuICAgICAgICB2YXIgcyA9IGRvbWFpbkFycmF5W2ldO1xuICAgICAgICBuZXdPdXQucHVzaChzLm1hdGNoKC9bXkEtWmEtejAtOV8tXS8pID9cbiAgICAgICAgICAgICd4bi0tJyArIHB1bnljb2RlLmVuY29kZShzKSA6IHMpO1xuICAgICAgfVxuICAgICAgdGhpcy5ob3N0bmFtZSA9IG5ld091dC5qb2luKCcuJyk7XG4gICAgfVxuXG4gICAgdmFyIHAgPSB0aGlzLnBvcnQgPyAnOicgKyB0aGlzLnBvcnQgOiAnJztcbiAgICB2YXIgaCA9IHRoaXMuaG9zdG5hbWUgfHwgJyc7XG4gICAgdGhpcy5ob3N0ID0gaCArIHA7XG4gICAgdGhpcy5ocmVmICs9IHRoaXMuaG9zdDtcblxuICAgIC8vIHN0cmlwIFsgYW5kIF0gZnJvbSB0aGUgaG9zdG5hbWVcbiAgICAvLyB0aGUgaG9zdCBmaWVsZCBzdGlsbCByZXRhaW5zIHRoZW0sIHRob3VnaFxuICAgIGlmIChpcHY2SG9zdG5hbWUpIHtcbiAgICAgIHRoaXMuaG9zdG5hbWUgPSB0aGlzLmhvc3RuYW1lLnN1YnN0cigxLCB0aGlzLmhvc3RuYW1lLmxlbmd0aCAtIDIpO1xuICAgICAgaWYgKHJlc3RbMF0gIT09ICcvJykge1xuICAgICAgICByZXN0ID0gJy8nICsgcmVzdDtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyBub3cgcmVzdCBpcyBzZXQgdG8gdGhlIHBvc3QtaG9zdCBzdHVmZi5cbiAgLy8gY2hvcCBvZmYgYW55IGRlbGltIGNoYXJzLlxuICBpZiAoIXVuc2FmZVByb3RvY29sW2xvd2VyUHJvdG9dKSB7XG5cbiAgICAvLyBGaXJzdCwgbWFrZSAxMDAlIHN1cmUgdGhhdCBhbnkgXCJhdXRvRXNjYXBlXCIgY2hhcnMgZ2V0XG4gICAgLy8gZXNjYXBlZCwgZXZlbiBpZiBlbmNvZGVVUklDb21wb25lbnQgZG9lc24ndCB0aGluayB0aGV5XG4gICAgLy8gbmVlZCB0byBiZS5cbiAgICBmb3IgKHZhciBpID0gMCwgbCA9IGF1dG9Fc2NhcGUubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgICB2YXIgYWUgPSBhdXRvRXNjYXBlW2ldO1xuICAgICAgdmFyIGVzYyA9IGVuY29kZVVSSUNvbXBvbmVudChhZSk7XG4gICAgICBpZiAoZXNjID09PSBhZSkge1xuICAgICAgICBlc2MgPSBlc2NhcGUoYWUpO1xuICAgICAgfVxuICAgICAgcmVzdCA9IHJlc3Quc3BsaXQoYWUpLmpvaW4oZXNjKTtcbiAgICB9XG4gIH1cblxuXG4gIC8vIGNob3Agb2ZmIGZyb20gdGhlIHRhaWwgZmlyc3QuXG4gIHZhciBoYXNoID0gcmVzdC5pbmRleE9mKCcjJyk7XG4gIGlmIChoYXNoICE9PSAtMSkge1xuICAgIC8vIGdvdCBhIGZyYWdtZW50IHN0cmluZy5cbiAgICB0aGlzLmhhc2ggPSByZXN0LnN1YnN0cihoYXNoKTtcbiAgICByZXN0ID0gcmVzdC5zbGljZSgwLCBoYXNoKTtcbiAgfVxuICB2YXIgcW0gPSByZXN0LmluZGV4T2YoJz8nKTtcbiAgaWYgKHFtICE9PSAtMSkge1xuICAgIHRoaXMuc2VhcmNoID0gcmVzdC5zdWJzdHIocW0pO1xuICAgIHRoaXMucXVlcnkgPSByZXN0LnN1YnN0cihxbSArIDEpO1xuICAgIGlmIChwYXJzZVF1ZXJ5U3RyaW5nKSB7XG4gICAgICB0aGlzLnF1ZXJ5ID0gcXVlcnlzdHJpbmcucGFyc2UodGhpcy5xdWVyeSk7XG4gICAgfVxuICAgIHJlc3QgPSByZXN0LnNsaWNlKDAsIHFtKTtcbiAgfSBlbHNlIGlmIChwYXJzZVF1ZXJ5U3RyaW5nKSB7XG4gICAgLy8gbm8gcXVlcnkgc3RyaW5nLCBidXQgcGFyc2VRdWVyeVN0cmluZyBzdGlsbCByZXF1ZXN0ZWRcbiAgICB0aGlzLnNlYXJjaCA9ICcnO1xuICAgIHRoaXMucXVlcnkgPSB7fTtcbiAgfVxuICBpZiAocmVzdCkgdGhpcy5wYXRobmFtZSA9IHJlc3Q7XG4gIGlmIChzbGFzaGVkUHJvdG9jb2xbbG93ZXJQcm90b10gJiZcbiAgICAgIHRoaXMuaG9zdG5hbWUgJiYgIXRoaXMucGF0aG5hbWUpIHtcbiAgICB0aGlzLnBhdGhuYW1lID0gJy8nO1xuICB9XG5cbiAgLy90byBzdXBwb3J0IGh0dHAucmVxdWVzdFxuICBpZiAodGhpcy5wYXRobmFtZSB8fCB0aGlzLnNlYXJjaCkge1xuICAgIHZhciBwID0gdGhpcy5wYXRobmFtZSB8fCAnJztcbiAgICB2YXIgcyA9IHRoaXMuc2VhcmNoIHx8ICcnO1xuICAgIHRoaXMucGF0aCA9IHAgKyBzO1xuICB9XG5cbiAgLy8gZmluYWxseSwgcmVjb25zdHJ1Y3QgdGhlIGhyZWYgYmFzZWQgb24gd2hhdCBoYXMgYmVlbiB2YWxpZGF0ZWQuXG4gIHRoaXMuaHJlZiA9IHRoaXMuZm9ybWF0KCk7XG4gIHJldHVybiB0aGlzO1xufTtcblxuLy8gZm9ybWF0IGEgcGFyc2VkIG9iamVjdCBpbnRvIGEgdXJsIHN0cmluZ1xuZnVuY3Rpb24gdXJsRm9ybWF0KG9iaikge1xuICAvLyBlbnN1cmUgaXQncyBhbiBvYmplY3QsIGFuZCBub3QgYSBzdHJpbmcgdXJsLlxuICAvLyBJZiBpdCdzIGFuIG9iaiwgdGhpcyBpcyBhIG5vLW9wLlxuICAvLyB0aGlzIHdheSwgeW91IGNhbiBjYWxsIHVybF9mb3JtYXQoKSBvbiBzdHJpbmdzXG4gIC8vIHRvIGNsZWFuIHVwIHBvdGVudGlhbGx5IHdvbmt5IHVybHMuXG4gIGlmIChpc1N0cmluZyhvYmopKSBvYmogPSB1cmxQYXJzZShvYmopO1xuICBpZiAoIShvYmogaW5zdGFuY2VvZiBVcmwpKSByZXR1cm4gVXJsLnByb3RvdHlwZS5mb3JtYXQuY2FsbChvYmopO1xuICByZXR1cm4gb2JqLmZvcm1hdCgpO1xufVxuXG5VcmwucHJvdG90eXBlLmZvcm1hdCA9IGZ1bmN0aW9uKCkge1xuICB2YXIgYXV0aCA9IHRoaXMuYXV0aCB8fCAnJztcbiAgaWYgKGF1dGgpIHtcbiAgICBhdXRoID0gZW5jb2RlVVJJQ29tcG9uZW50KGF1dGgpO1xuICAgIGF1dGggPSBhdXRoLnJlcGxhY2UoLyUzQS9pLCAnOicpO1xuICAgIGF1dGggKz0gJ0AnO1xuICB9XG5cbiAgdmFyIHByb3RvY29sID0gdGhpcy5wcm90b2NvbCB8fCAnJyxcbiAgICAgIHBhdGhuYW1lID0gdGhpcy5wYXRobmFtZSB8fCAnJyxcbiAgICAgIGhhc2ggPSB0aGlzLmhhc2ggfHwgJycsXG4gICAgICBob3N0ID0gZmFsc2UsXG4gICAgICBxdWVyeSA9ICcnO1xuXG4gIGlmICh0aGlzLmhvc3QpIHtcbiAgICBob3N0ID0gYXV0aCArIHRoaXMuaG9zdDtcbiAgfSBlbHNlIGlmICh0aGlzLmhvc3RuYW1lKSB7XG4gICAgaG9zdCA9IGF1dGggKyAodGhpcy5ob3N0bmFtZS5pbmRleE9mKCc6JykgPT09IC0xID9cbiAgICAgICAgdGhpcy5ob3N0bmFtZSA6XG4gICAgICAgICdbJyArIHRoaXMuaG9zdG5hbWUgKyAnXScpO1xuICAgIGlmICh0aGlzLnBvcnQpIHtcbiAgICAgIGhvc3QgKz0gJzonICsgdGhpcy5wb3J0O1xuICAgIH1cbiAgfVxuXG4gIGlmICh0aGlzLnF1ZXJ5ICYmXG4gICAgICBpc09iamVjdCh0aGlzLnF1ZXJ5KSAmJlxuICAgICAgT2JqZWN0LmtleXModGhpcy5xdWVyeSkubGVuZ3RoKSB7XG4gICAgcXVlcnkgPSBxdWVyeXN0cmluZy5zdHJpbmdpZnkodGhpcy5xdWVyeSk7XG4gIH1cblxuICB2YXIgc2VhcmNoID0gdGhpcy5zZWFyY2ggfHwgKHF1ZXJ5ICYmICgnPycgKyBxdWVyeSkpIHx8ICcnO1xuXG4gIGlmIChwcm90b2NvbCAmJiBwcm90b2NvbC5zdWJzdHIoLTEpICE9PSAnOicpIHByb3RvY29sICs9ICc6JztcblxuICAvLyBvbmx5IHRoZSBzbGFzaGVkUHJvdG9jb2xzIGdldCB0aGUgLy8uICBOb3QgbWFpbHRvOiwgeG1wcDosIGV0Yy5cbiAgLy8gdW5sZXNzIHRoZXkgaGFkIHRoZW0gdG8gYmVnaW4gd2l0aC5cbiAgaWYgKHRoaXMuc2xhc2hlcyB8fFxuICAgICAgKCFwcm90b2NvbCB8fCBzbGFzaGVkUHJvdG9jb2xbcHJvdG9jb2xdKSAmJiBob3N0ICE9PSBmYWxzZSkge1xuICAgIGhvc3QgPSAnLy8nICsgKGhvc3QgfHwgJycpO1xuICAgIGlmIChwYXRobmFtZSAmJiBwYXRobmFtZS5jaGFyQXQoMCkgIT09ICcvJykgcGF0aG5hbWUgPSAnLycgKyBwYXRobmFtZTtcbiAgfSBlbHNlIGlmICghaG9zdCkge1xuICAgIGhvc3QgPSAnJztcbiAgfVxuXG4gIGlmIChoYXNoICYmIGhhc2guY2hhckF0KDApICE9PSAnIycpIGhhc2ggPSAnIycgKyBoYXNoO1xuICBpZiAoc2VhcmNoICYmIHNlYXJjaC5jaGFyQXQoMCkgIT09ICc/Jykgc2VhcmNoID0gJz8nICsgc2VhcmNoO1xuXG4gIHBhdGhuYW1lID0gcGF0aG5hbWUucmVwbGFjZSgvWz8jXS9nLCBmdW5jdGlvbihtYXRjaCkge1xuICAgIHJldHVybiBlbmNvZGVVUklDb21wb25lbnQobWF0Y2gpO1xuICB9KTtcbiAgc2VhcmNoID0gc2VhcmNoLnJlcGxhY2UoJyMnLCAnJTIzJyk7XG5cbiAgcmV0dXJuIHByb3RvY29sICsgaG9zdCArIHBhdGhuYW1lICsgc2VhcmNoICsgaGFzaDtcbn07XG5cbmZ1bmN0aW9uIHVybFJlc29sdmUoc291cmNlLCByZWxhdGl2ZSkge1xuICByZXR1cm4gdXJsUGFyc2Uoc291cmNlLCBmYWxzZSwgdHJ1ZSkucmVzb2x2ZShyZWxhdGl2ZSk7XG59XG5cblVybC5wcm90b3R5cGUucmVzb2x2ZSA9IGZ1bmN0aW9uKHJlbGF0aXZlKSB7XG4gIHJldHVybiB0aGlzLnJlc29sdmVPYmplY3QodXJsUGFyc2UocmVsYXRpdmUsIGZhbHNlLCB0cnVlKSkuZm9ybWF0KCk7XG59O1xuXG5mdW5jdGlvbiB1cmxSZXNvbHZlT2JqZWN0KHNvdXJjZSwgcmVsYXRpdmUpIHtcbiAgaWYgKCFzb3VyY2UpIHJldHVybiByZWxhdGl2ZTtcbiAgcmV0dXJuIHVybFBhcnNlKHNvdXJjZSwgZmFsc2UsIHRydWUpLnJlc29sdmVPYmplY3QocmVsYXRpdmUpO1xufVxuXG5VcmwucHJvdG90eXBlLnJlc29sdmVPYmplY3QgPSBmdW5jdGlvbihyZWxhdGl2ZSkge1xuICBpZiAoaXNTdHJpbmcocmVsYXRpdmUpKSB7XG4gICAgdmFyIHJlbCA9IG5ldyBVcmwoKTtcbiAgICByZWwucGFyc2UocmVsYXRpdmUsIGZhbHNlLCB0cnVlKTtcbiAgICByZWxhdGl2ZSA9IHJlbDtcbiAgfVxuXG4gIHZhciByZXN1bHQgPSBuZXcgVXJsKCk7XG4gIE9iamVjdC5rZXlzKHRoaXMpLmZvckVhY2goZnVuY3Rpb24oaykge1xuICAgIHJlc3VsdFtrXSA9IHRoaXNba107XG4gIH0sIHRoaXMpO1xuXG4gIC8vIGhhc2ggaXMgYWx3YXlzIG92ZXJyaWRkZW4sIG5vIG1hdHRlciB3aGF0LlxuICAvLyBldmVuIGhyZWY9XCJcIiB3aWxsIHJlbW92ZSBpdC5cbiAgcmVzdWx0Lmhhc2ggPSByZWxhdGl2ZS5oYXNoO1xuXG4gIC8vIGlmIHRoZSByZWxhdGl2ZSB1cmwgaXMgZW1wdHksIHRoZW4gdGhlcmUncyBub3RoaW5nIGxlZnQgdG8gZG8gaGVyZS5cbiAgaWYgKHJlbGF0aXZlLmhyZWYgPT09ICcnKSB7XG4gICAgcmVzdWx0LmhyZWYgPSByZXN1bHQuZm9ybWF0KCk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIC8vIGhyZWZzIGxpa2UgLy9mb28vYmFyIGFsd2F5cyBjdXQgdG8gdGhlIHByb3RvY29sLlxuICBpZiAocmVsYXRpdmUuc2xhc2hlcyAmJiAhcmVsYXRpdmUucHJvdG9jb2wpIHtcbiAgICAvLyB0YWtlIGV2ZXJ5dGhpbmcgZXhjZXB0IHRoZSBwcm90b2NvbCBmcm9tIHJlbGF0aXZlXG4gICAgT2JqZWN0LmtleXMocmVsYXRpdmUpLmZvckVhY2goZnVuY3Rpb24oaykge1xuICAgICAgaWYgKGsgIT09ICdwcm90b2NvbCcpXG4gICAgICAgIHJlc3VsdFtrXSA9IHJlbGF0aXZlW2tdO1xuICAgIH0pO1xuXG4gICAgLy91cmxQYXJzZSBhcHBlbmRzIHRyYWlsaW5nIC8gdG8gdXJscyBsaWtlIGh0dHA6Ly93d3cuZXhhbXBsZS5jb21cbiAgICBpZiAoc2xhc2hlZFByb3RvY29sW3Jlc3VsdC5wcm90b2NvbF0gJiZcbiAgICAgICAgcmVzdWx0Lmhvc3RuYW1lICYmICFyZXN1bHQucGF0aG5hbWUpIHtcbiAgICAgIHJlc3VsdC5wYXRoID0gcmVzdWx0LnBhdGhuYW1lID0gJy8nO1xuICAgIH1cblxuICAgIHJlc3VsdC5ocmVmID0gcmVzdWx0LmZvcm1hdCgpO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICBpZiAocmVsYXRpdmUucHJvdG9jb2wgJiYgcmVsYXRpdmUucHJvdG9jb2wgIT09IHJlc3VsdC5wcm90b2NvbCkge1xuICAgIC8vIGlmIGl0J3MgYSBrbm93biB1cmwgcHJvdG9jb2wsIHRoZW4gY2hhbmdpbmdcbiAgICAvLyB0aGUgcHJvdG9jb2wgZG9lcyB3ZWlyZCB0aGluZ3NcbiAgICAvLyBmaXJzdCwgaWYgaXQncyBub3QgZmlsZTosIHRoZW4gd2UgTVVTVCBoYXZlIGEgaG9zdCxcbiAgICAvLyBhbmQgaWYgdGhlcmUgd2FzIGEgcGF0aFxuICAgIC8vIHRvIGJlZ2luIHdpdGgsIHRoZW4gd2UgTVVTVCBoYXZlIGEgcGF0aC5cbiAgICAvLyBpZiBpdCBpcyBmaWxlOiwgdGhlbiB0aGUgaG9zdCBpcyBkcm9wcGVkLFxuICAgIC8vIGJlY2F1c2UgdGhhdCdzIGtub3duIHRvIGJlIGhvc3RsZXNzLlxuICAgIC8vIGFueXRoaW5nIGVsc2UgaXMgYXNzdW1lZCB0byBiZSBhYnNvbHV0ZS5cbiAgICBpZiAoIXNsYXNoZWRQcm90b2NvbFtyZWxhdGl2ZS5wcm90b2NvbF0pIHtcbiAgICAgIE9iamVjdC5rZXlzKHJlbGF0aXZlKS5mb3JFYWNoKGZ1bmN0aW9uKGspIHtcbiAgICAgICAgcmVzdWx0W2tdID0gcmVsYXRpdmVba107XG4gICAgICB9KTtcbiAgICAgIHJlc3VsdC5ocmVmID0gcmVzdWx0LmZvcm1hdCgpO1xuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICByZXN1bHQucHJvdG9jb2wgPSByZWxhdGl2ZS5wcm90b2NvbDtcbiAgICBpZiAoIXJlbGF0aXZlLmhvc3QgJiYgIWhvc3RsZXNzUHJvdG9jb2xbcmVsYXRpdmUucHJvdG9jb2xdKSB7XG4gICAgICB2YXIgcmVsUGF0aCA9IChyZWxhdGl2ZS5wYXRobmFtZSB8fCAnJykuc3BsaXQoJy8nKTtcbiAgICAgIHdoaWxlIChyZWxQYXRoLmxlbmd0aCAmJiAhKHJlbGF0aXZlLmhvc3QgPSByZWxQYXRoLnNoaWZ0KCkpKTtcbiAgICAgIGlmICghcmVsYXRpdmUuaG9zdCkgcmVsYXRpdmUuaG9zdCA9ICcnO1xuICAgICAgaWYgKCFyZWxhdGl2ZS5ob3N0bmFtZSkgcmVsYXRpdmUuaG9zdG5hbWUgPSAnJztcbiAgICAgIGlmIChyZWxQYXRoWzBdICE9PSAnJykgcmVsUGF0aC51bnNoaWZ0KCcnKTtcbiAgICAgIGlmIChyZWxQYXRoLmxlbmd0aCA8IDIpIHJlbFBhdGgudW5zaGlmdCgnJyk7XG4gICAgICByZXN1bHQucGF0aG5hbWUgPSByZWxQYXRoLmpvaW4oJy8nKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmVzdWx0LnBhdGhuYW1lID0gcmVsYXRpdmUucGF0aG5hbWU7XG4gICAgfVxuICAgIHJlc3VsdC5zZWFyY2ggPSByZWxhdGl2ZS5zZWFyY2g7XG4gICAgcmVzdWx0LnF1ZXJ5ID0gcmVsYXRpdmUucXVlcnk7XG4gICAgcmVzdWx0Lmhvc3QgPSByZWxhdGl2ZS5ob3N0IHx8ICcnO1xuICAgIHJlc3VsdC5hdXRoID0gcmVsYXRpdmUuYXV0aDtcbiAgICByZXN1bHQuaG9zdG5hbWUgPSByZWxhdGl2ZS5ob3N0bmFtZSB8fCByZWxhdGl2ZS5ob3N0O1xuICAgIHJlc3VsdC5wb3J0ID0gcmVsYXRpdmUucG9ydDtcbiAgICAvLyB0byBzdXBwb3J0IGh0dHAucmVxdWVzdFxuICAgIGlmIChyZXN1bHQucGF0aG5hbWUgfHwgcmVzdWx0LnNlYXJjaCkge1xuICAgICAgdmFyIHAgPSByZXN1bHQucGF0aG5hbWUgfHwgJyc7XG4gICAgICB2YXIgcyA9IHJlc3VsdC5zZWFyY2ggfHwgJyc7XG4gICAgICByZXN1bHQucGF0aCA9IHAgKyBzO1xuICAgIH1cbiAgICByZXN1bHQuc2xhc2hlcyA9IHJlc3VsdC5zbGFzaGVzIHx8IHJlbGF0aXZlLnNsYXNoZXM7XG4gICAgcmVzdWx0LmhyZWYgPSByZXN1bHQuZm9ybWF0KCk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIHZhciBpc1NvdXJjZUFicyA9IChyZXN1bHQucGF0aG5hbWUgJiYgcmVzdWx0LnBhdGhuYW1lLmNoYXJBdCgwKSA9PT0gJy8nKSxcbiAgICAgIGlzUmVsQWJzID0gKFxuICAgICAgICAgIHJlbGF0aXZlLmhvc3QgfHxcbiAgICAgICAgICByZWxhdGl2ZS5wYXRobmFtZSAmJiByZWxhdGl2ZS5wYXRobmFtZS5jaGFyQXQoMCkgPT09ICcvJ1xuICAgICAgKSxcbiAgICAgIG11c3RFbmRBYnMgPSAoaXNSZWxBYnMgfHwgaXNTb3VyY2VBYnMgfHxcbiAgICAgICAgICAgICAgICAgICAgKHJlc3VsdC5ob3N0ICYmIHJlbGF0aXZlLnBhdGhuYW1lKSksXG4gICAgICByZW1vdmVBbGxEb3RzID0gbXVzdEVuZEFicyxcbiAgICAgIHNyY1BhdGggPSByZXN1bHQucGF0aG5hbWUgJiYgcmVzdWx0LnBhdGhuYW1lLnNwbGl0KCcvJykgfHwgW10sXG4gICAgICByZWxQYXRoID0gcmVsYXRpdmUucGF0aG5hbWUgJiYgcmVsYXRpdmUucGF0aG5hbWUuc3BsaXQoJy8nKSB8fCBbXSxcbiAgICAgIHBzeWNob3RpYyA9IHJlc3VsdC5wcm90b2NvbCAmJiAhc2xhc2hlZFByb3RvY29sW3Jlc3VsdC5wcm90b2NvbF07XG5cbiAgLy8gaWYgdGhlIHVybCBpcyBhIG5vbi1zbGFzaGVkIHVybCwgdGhlbiByZWxhdGl2ZVxuICAvLyBsaW5rcyBsaWtlIC4uLy4uIHNob3VsZCBiZSBhYmxlXG4gIC8vIHRvIGNyYXdsIHVwIHRvIHRoZSBob3N0bmFtZSwgYXMgd2VsbC4gIFRoaXMgaXMgc3RyYW5nZS5cbiAgLy8gcmVzdWx0LnByb3RvY29sIGhhcyBhbHJlYWR5IGJlZW4gc2V0IGJ5IG5vdy5cbiAgLy8gTGF0ZXIgb24sIHB1dCB0aGUgZmlyc3QgcGF0aCBwYXJ0IGludG8gdGhlIGhvc3QgZmllbGQuXG4gIGlmIChwc3ljaG90aWMpIHtcbiAgICByZXN1bHQuaG9zdG5hbWUgPSAnJztcbiAgICByZXN1bHQucG9ydCA9IG51bGw7XG4gICAgaWYgKHJlc3VsdC5ob3N0KSB7XG4gICAgICBpZiAoc3JjUGF0aFswXSA9PT0gJycpIHNyY1BhdGhbMF0gPSByZXN1bHQuaG9zdDtcbiAgICAgIGVsc2Ugc3JjUGF0aC51bnNoaWZ0KHJlc3VsdC5ob3N0KTtcbiAgICB9XG4gICAgcmVzdWx0Lmhvc3QgPSAnJztcbiAgICBpZiAocmVsYXRpdmUucHJvdG9jb2wpIHtcbiAgICAgIHJlbGF0aXZlLmhvc3RuYW1lID0gbnVsbDtcbiAgICAgIHJlbGF0aXZlLnBvcnQgPSBudWxsO1xuICAgICAgaWYgKHJlbGF0aXZlLmhvc3QpIHtcbiAgICAgICAgaWYgKHJlbFBhdGhbMF0gPT09ICcnKSByZWxQYXRoWzBdID0gcmVsYXRpdmUuaG9zdDtcbiAgICAgICAgZWxzZSByZWxQYXRoLnVuc2hpZnQocmVsYXRpdmUuaG9zdCk7XG4gICAgICB9XG4gICAgICByZWxhdGl2ZS5ob3N0ID0gbnVsbDtcbiAgICB9XG4gICAgbXVzdEVuZEFicyA9IG11c3RFbmRBYnMgJiYgKHJlbFBhdGhbMF0gPT09ICcnIHx8IHNyY1BhdGhbMF0gPT09ICcnKTtcbiAgfVxuXG4gIGlmIChpc1JlbEFicykge1xuICAgIC8vIGl0J3MgYWJzb2x1dGUuXG4gICAgcmVzdWx0Lmhvc3QgPSAocmVsYXRpdmUuaG9zdCB8fCByZWxhdGl2ZS5ob3N0ID09PSAnJykgP1xuICAgICAgICAgICAgICAgICAgcmVsYXRpdmUuaG9zdCA6IHJlc3VsdC5ob3N0O1xuICAgIHJlc3VsdC5ob3N0bmFtZSA9IChyZWxhdGl2ZS5ob3N0bmFtZSB8fCByZWxhdGl2ZS5ob3N0bmFtZSA9PT0gJycpID9cbiAgICAgICAgICAgICAgICAgICAgICByZWxhdGl2ZS5ob3N0bmFtZSA6IHJlc3VsdC5ob3N0bmFtZTtcbiAgICByZXN1bHQuc2VhcmNoID0gcmVsYXRpdmUuc2VhcmNoO1xuICAgIHJlc3VsdC5xdWVyeSA9IHJlbGF0aXZlLnF1ZXJ5O1xuICAgIHNyY1BhdGggPSByZWxQYXRoO1xuICAgIC8vIGZhbGwgdGhyb3VnaCB0byB0aGUgZG90LWhhbmRsaW5nIGJlbG93LlxuICB9IGVsc2UgaWYgKHJlbFBhdGgubGVuZ3RoKSB7XG4gICAgLy8gaXQncyByZWxhdGl2ZVxuICAgIC8vIHRocm93IGF3YXkgdGhlIGV4aXN0aW5nIGZpbGUsIGFuZCB0YWtlIHRoZSBuZXcgcGF0aCBpbnN0ZWFkLlxuICAgIGlmICghc3JjUGF0aCkgc3JjUGF0aCA9IFtdO1xuICAgIHNyY1BhdGgucG9wKCk7XG4gICAgc3JjUGF0aCA9IHNyY1BhdGguY29uY2F0KHJlbFBhdGgpO1xuICAgIHJlc3VsdC5zZWFyY2ggPSByZWxhdGl2ZS5zZWFyY2g7XG4gICAgcmVzdWx0LnF1ZXJ5ID0gcmVsYXRpdmUucXVlcnk7XG4gIH0gZWxzZSBpZiAoIWlzTnVsbE9yVW5kZWZpbmVkKHJlbGF0aXZlLnNlYXJjaCkpIHtcbiAgICAvLyBqdXN0IHB1bGwgb3V0IHRoZSBzZWFyY2guXG4gICAgLy8gbGlrZSBocmVmPSc/Zm9vJy5cbiAgICAvLyBQdXQgdGhpcyBhZnRlciB0aGUgb3RoZXIgdHdvIGNhc2VzIGJlY2F1c2UgaXQgc2ltcGxpZmllcyB0aGUgYm9vbGVhbnNcbiAgICBpZiAocHN5Y2hvdGljKSB7XG4gICAgICByZXN1bHQuaG9zdG5hbWUgPSByZXN1bHQuaG9zdCA9IHNyY1BhdGguc2hpZnQoKTtcbiAgICAgIC8vb2NjYXRpb25hbHkgdGhlIGF1dGggY2FuIGdldCBzdHVjayBvbmx5IGluIGhvc3RcbiAgICAgIC8vdGhpcyBlc3BlY2lhbHkgaGFwcGVucyBpbiBjYXNlcyBsaWtlXG4gICAgICAvL3VybC5yZXNvbHZlT2JqZWN0KCdtYWlsdG86bG9jYWwxQGRvbWFpbjEnLCAnbG9jYWwyQGRvbWFpbjInKVxuICAgICAgdmFyIGF1dGhJbkhvc3QgPSByZXN1bHQuaG9zdCAmJiByZXN1bHQuaG9zdC5pbmRleE9mKCdAJykgPiAwID9cbiAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0Lmhvc3Quc3BsaXQoJ0AnKSA6IGZhbHNlO1xuICAgICAgaWYgKGF1dGhJbkhvc3QpIHtcbiAgICAgICAgcmVzdWx0LmF1dGggPSBhdXRoSW5Ib3N0LnNoaWZ0KCk7XG4gICAgICAgIHJlc3VsdC5ob3N0ID0gcmVzdWx0Lmhvc3RuYW1lID0gYXV0aEluSG9zdC5zaGlmdCgpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXN1bHQuc2VhcmNoID0gcmVsYXRpdmUuc2VhcmNoO1xuICAgIHJlc3VsdC5xdWVyeSA9IHJlbGF0aXZlLnF1ZXJ5O1xuICAgIC8vdG8gc3VwcG9ydCBodHRwLnJlcXVlc3RcbiAgICBpZiAoIWlzTnVsbChyZXN1bHQucGF0aG5hbWUpIHx8ICFpc051bGwocmVzdWx0LnNlYXJjaCkpIHtcbiAgICAgIHJlc3VsdC5wYXRoID0gKHJlc3VsdC5wYXRobmFtZSA/IHJlc3VsdC5wYXRobmFtZSA6ICcnKSArXG4gICAgICAgICAgICAgICAgICAgIChyZXN1bHQuc2VhcmNoID8gcmVzdWx0LnNlYXJjaCA6ICcnKTtcbiAgICB9XG4gICAgcmVzdWx0LmhyZWYgPSByZXN1bHQuZm9ybWF0KCk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIGlmICghc3JjUGF0aC5sZW5ndGgpIHtcbiAgICAvLyBubyBwYXRoIGF0IGFsbC4gIGVhc3kuXG4gICAgLy8gd2UndmUgYWxyZWFkeSBoYW5kbGVkIHRoZSBvdGhlciBzdHVmZiBhYm92ZS5cbiAgICByZXN1bHQucGF0aG5hbWUgPSBudWxsO1xuICAgIC8vdG8gc3VwcG9ydCBodHRwLnJlcXVlc3RcbiAgICBpZiAocmVzdWx0LnNlYXJjaCkge1xuICAgICAgcmVzdWx0LnBhdGggPSAnLycgKyByZXN1bHQuc2VhcmNoO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXN1bHQucGF0aCA9IG51bGw7XG4gICAgfVxuICAgIHJlc3VsdC5ocmVmID0gcmVzdWx0LmZvcm1hdCgpO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICAvLyBpZiBhIHVybCBFTkRzIGluIC4gb3IgLi4sIHRoZW4gaXQgbXVzdCBnZXQgYSB0cmFpbGluZyBzbGFzaC5cbiAgLy8gaG93ZXZlciwgaWYgaXQgZW5kcyBpbiBhbnl0aGluZyBlbHNlIG5vbi1zbGFzaHksXG4gIC8vIHRoZW4gaXQgbXVzdCBOT1QgZ2V0IGEgdHJhaWxpbmcgc2xhc2guXG4gIHZhciBsYXN0ID0gc3JjUGF0aC5zbGljZSgtMSlbMF07XG4gIHZhciBoYXNUcmFpbGluZ1NsYXNoID0gKFxuICAgICAgKHJlc3VsdC5ob3N0IHx8IHJlbGF0aXZlLmhvc3QpICYmIChsYXN0ID09PSAnLicgfHwgbGFzdCA9PT0gJy4uJykgfHxcbiAgICAgIGxhc3QgPT09ICcnKTtcblxuICAvLyBzdHJpcCBzaW5nbGUgZG90cywgcmVzb2x2ZSBkb3VibGUgZG90cyB0byBwYXJlbnQgZGlyXG4gIC8vIGlmIHRoZSBwYXRoIHRyaWVzIHRvIGdvIGFib3ZlIHRoZSByb290LCBgdXBgIGVuZHMgdXAgPiAwXG4gIHZhciB1cCA9IDA7XG4gIGZvciAodmFyIGkgPSBzcmNQYXRoLmxlbmd0aDsgaSA+PSAwOyBpLS0pIHtcbiAgICBsYXN0ID0gc3JjUGF0aFtpXTtcbiAgICBpZiAobGFzdCA9PSAnLicpIHtcbiAgICAgIHNyY1BhdGguc3BsaWNlKGksIDEpO1xuICAgIH0gZWxzZSBpZiAobGFzdCA9PT0gJy4uJykge1xuICAgICAgc3JjUGF0aC5zcGxpY2UoaSwgMSk7XG4gICAgICB1cCsrO1xuICAgIH0gZWxzZSBpZiAodXApIHtcbiAgICAgIHNyY1BhdGguc3BsaWNlKGksIDEpO1xuICAgICAgdXAtLTtcbiAgICB9XG4gIH1cblxuICAvLyBpZiB0aGUgcGF0aCBpcyBhbGxvd2VkIHRvIGdvIGFib3ZlIHRoZSByb290LCByZXN0b3JlIGxlYWRpbmcgLi5zXG4gIGlmICghbXVzdEVuZEFicyAmJiAhcmVtb3ZlQWxsRG90cykge1xuICAgIGZvciAoOyB1cC0tOyB1cCkge1xuICAgICAgc3JjUGF0aC51bnNoaWZ0KCcuLicpO1xuICAgIH1cbiAgfVxuXG4gIGlmIChtdXN0RW5kQWJzICYmIHNyY1BhdGhbMF0gIT09ICcnICYmXG4gICAgICAoIXNyY1BhdGhbMF0gfHwgc3JjUGF0aFswXS5jaGFyQXQoMCkgIT09ICcvJykpIHtcbiAgICBzcmNQYXRoLnVuc2hpZnQoJycpO1xuICB9XG5cbiAgaWYgKGhhc1RyYWlsaW5nU2xhc2ggJiYgKHNyY1BhdGguam9pbignLycpLnN1YnN0cigtMSkgIT09ICcvJykpIHtcbiAgICBzcmNQYXRoLnB1c2goJycpO1xuICB9XG5cbiAgdmFyIGlzQWJzb2x1dGUgPSBzcmNQYXRoWzBdID09PSAnJyB8fFxuICAgICAgKHNyY1BhdGhbMF0gJiYgc3JjUGF0aFswXS5jaGFyQXQoMCkgPT09ICcvJyk7XG5cbiAgLy8gcHV0IHRoZSBob3N0IGJhY2tcbiAgaWYgKHBzeWNob3RpYykge1xuICAgIHJlc3VsdC5ob3N0bmFtZSA9IHJlc3VsdC5ob3N0ID0gaXNBYnNvbHV0ZSA/ICcnIDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyY1BhdGgubGVuZ3RoID8gc3JjUGF0aC5zaGlmdCgpIDogJyc7XG4gICAgLy9vY2NhdGlvbmFseSB0aGUgYXV0aCBjYW4gZ2V0IHN0dWNrIG9ubHkgaW4gaG9zdFxuICAgIC8vdGhpcyBlc3BlY2lhbHkgaGFwcGVucyBpbiBjYXNlcyBsaWtlXG4gICAgLy91cmwucmVzb2x2ZU9iamVjdCgnbWFpbHRvOmxvY2FsMUBkb21haW4xJywgJ2xvY2FsMkBkb21haW4yJylcbiAgICB2YXIgYXV0aEluSG9zdCA9IHJlc3VsdC5ob3N0ICYmIHJlc3VsdC5ob3N0LmluZGV4T2YoJ0AnKSA+IDAgP1xuICAgICAgICAgICAgICAgICAgICAgcmVzdWx0Lmhvc3Quc3BsaXQoJ0AnKSA6IGZhbHNlO1xuICAgIGlmIChhdXRoSW5Ib3N0KSB7XG4gICAgICByZXN1bHQuYXV0aCA9IGF1dGhJbkhvc3Quc2hpZnQoKTtcbiAgICAgIHJlc3VsdC5ob3N0ID0gcmVzdWx0Lmhvc3RuYW1lID0gYXV0aEluSG9zdC5zaGlmdCgpO1xuICAgIH1cbiAgfVxuXG4gIG11c3RFbmRBYnMgPSBtdXN0RW5kQWJzIHx8IChyZXN1bHQuaG9zdCAmJiBzcmNQYXRoLmxlbmd0aCk7XG5cbiAgaWYgKG11c3RFbmRBYnMgJiYgIWlzQWJzb2x1dGUpIHtcbiAgICBzcmNQYXRoLnVuc2hpZnQoJycpO1xuICB9XG5cbiAgaWYgKCFzcmNQYXRoLmxlbmd0aCkge1xuICAgIHJlc3VsdC5wYXRobmFtZSA9IG51bGw7XG4gICAgcmVzdWx0LnBhdGggPSBudWxsO1xuICB9IGVsc2Uge1xuICAgIHJlc3VsdC5wYXRobmFtZSA9IHNyY1BhdGguam9pbignLycpO1xuICB9XG5cbiAgLy90byBzdXBwb3J0IHJlcXVlc3QuaHR0cFxuICBpZiAoIWlzTnVsbChyZXN1bHQucGF0aG5hbWUpIHx8ICFpc051bGwocmVzdWx0LnNlYXJjaCkpIHtcbiAgICByZXN1bHQucGF0aCA9IChyZXN1bHQucGF0aG5hbWUgPyByZXN1bHQucGF0aG5hbWUgOiAnJykgK1xuICAgICAgICAgICAgICAgICAgKHJlc3VsdC5zZWFyY2ggPyByZXN1bHQuc2VhcmNoIDogJycpO1xuICB9XG4gIHJlc3VsdC5hdXRoID0gcmVsYXRpdmUuYXV0aCB8fCByZXN1bHQuYXV0aDtcbiAgcmVzdWx0LnNsYXNoZXMgPSByZXN1bHQuc2xhc2hlcyB8fCByZWxhdGl2ZS5zbGFzaGVzO1xuICByZXN1bHQuaHJlZiA9IHJlc3VsdC5mb3JtYXQoKTtcbiAgcmV0dXJuIHJlc3VsdDtcbn07XG5cblVybC5wcm90b3R5cGUucGFyc2VIb3N0ID0gZnVuY3Rpb24oKSB7XG4gIHZhciBob3N0ID0gdGhpcy5ob3N0O1xuICB2YXIgcG9ydCA9IHBvcnRQYXR0ZXJuLmV4ZWMoaG9zdCk7XG4gIGlmIChwb3J0KSB7XG4gICAgcG9ydCA9IHBvcnRbMF07XG4gICAgaWYgKHBvcnQgIT09ICc6Jykge1xuICAgICAgdGhpcy5wb3J0ID0gcG9ydC5zdWJzdHIoMSk7XG4gICAgfVxuICAgIGhvc3QgPSBob3N0LnN1YnN0cigwLCBob3N0Lmxlbmd0aCAtIHBvcnQubGVuZ3RoKTtcbiAgfVxuICBpZiAoaG9zdCkgdGhpcy5ob3N0bmFtZSA9IGhvc3Q7XG59O1xuXG5mdW5jdGlvbiBpc1N0cmluZyhhcmcpIHtcbiAgcmV0dXJuIHR5cGVvZiBhcmcgPT09IFwic3RyaW5nXCI7XG59XG5cbmZ1bmN0aW9uIGlzT2JqZWN0KGFyZykge1xuICByZXR1cm4gdHlwZW9mIGFyZyA9PT0gJ29iamVjdCcgJiYgYXJnICE9PSBudWxsO1xufVxuXG5mdW5jdGlvbiBpc051bGwoYXJnKSB7XG4gIHJldHVybiBhcmcgPT09IG51bGw7XG59XG5mdW5jdGlvbiBpc051bGxPclVuZGVmaW5lZChhcmcpIHtcbiAgcmV0dXJuICBhcmcgPT0gbnVsbDtcbn1cbiIsIid1c2Ugc3RyaWN0JztcblxubW9kdWxlLmV4cG9ydHMgPSBlYXJjdXQ7XG5cbmZ1bmN0aW9uIGVhcmN1dChkYXRhLCBob2xlSW5kaWNlcywgZGltKSB7XG5cbiAgICBkaW0gPSBkaW0gfHwgMjtcblxuICAgIHZhciBoYXNIb2xlcyA9IGhvbGVJbmRpY2VzICYmIGhvbGVJbmRpY2VzLmxlbmd0aCxcbiAgICAgICAgb3V0ZXJMZW4gPSBoYXNIb2xlcyA/IGhvbGVJbmRpY2VzWzBdICogZGltIDogZGF0YS5sZW5ndGgsXG4gICAgICAgIG91dGVyTm9kZSA9IGxpbmtlZExpc3QoZGF0YSwgMCwgb3V0ZXJMZW4sIGRpbSwgdHJ1ZSksXG4gICAgICAgIHRyaWFuZ2xlcyA9IFtdO1xuXG4gICAgaWYgKCFvdXRlck5vZGUpIHJldHVybiB0cmlhbmdsZXM7XG5cbiAgICB2YXIgbWluWCwgbWluWSwgbWF4WCwgbWF4WSwgeCwgeSwgc2l6ZTtcblxuICAgIGlmIChoYXNIb2xlcykgb3V0ZXJOb2RlID0gZWxpbWluYXRlSG9sZXMoZGF0YSwgaG9sZUluZGljZXMsIG91dGVyTm9kZSwgZGltKTtcblxuICAgIC8vIGlmIHRoZSBzaGFwZSBpcyBub3QgdG9vIHNpbXBsZSwgd2UnbGwgdXNlIHotb3JkZXIgY3VydmUgaGFzaCBsYXRlcjsgY2FsY3VsYXRlIHBvbHlnb24gYmJveFxuICAgIGlmIChkYXRhLmxlbmd0aCA+IDgwICogZGltKSB7XG4gICAgICAgIG1pblggPSBtYXhYID0gZGF0YVswXTtcbiAgICAgICAgbWluWSA9IG1heFkgPSBkYXRhWzFdO1xuXG4gICAgICAgIGZvciAodmFyIGkgPSBkaW07IGkgPCBvdXRlckxlbjsgaSArPSBkaW0pIHtcbiAgICAgICAgICAgIHggPSBkYXRhW2ldO1xuICAgICAgICAgICAgeSA9IGRhdGFbaSArIDFdO1xuICAgICAgICAgICAgaWYgKHggPCBtaW5YKSBtaW5YID0geDtcbiAgICAgICAgICAgIGlmICh5IDwgbWluWSkgbWluWSA9IHk7XG4gICAgICAgICAgICBpZiAoeCA+IG1heFgpIG1heFggPSB4O1xuICAgICAgICAgICAgaWYgKHkgPiBtYXhZKSBtYXhZID0geTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIG1pblgsIG1pblkgYW5kIHNpemUgYXJlIGxhdGVyIHVzZWQgdG8gdHJhbnNmb3JtIGNvb3JkcyBpbnRvIGludGVnZXJzIGZvciB6LW9yZGVyIGNhbGN1bGF0aW9uXG4gICAgICAgIHNpemUgPSBNYXRoLm1heChtYXhYIC0gbWluWCwgbWF4WSAtIG1pblkpO1xuICAgIH1cblxuICAgIGVhcmN1dExpbmtlZChvdXRlck5vZGUsIHRyaWFuZ2xlcywgZGltLCBtaW5YLCBtaW5ZLCBzaXplKTtcblxuICAgIHJldHVybiB0cmlhbmdsZXM7XG59XG5cbi8vIGNyZWF0ZSBhIGNpcmN1bGFyIGRvdWJseSBsaW5rZWQgbGlzdCBmcm9tIHBvbHlnb24gcG9pbnRzIGluIHRoZSBzcGVjaWZpZWQgd2luZGluZyBvcmRlclxuZnVuY3Rpb24gbGlua2VkTGlzdChkYXRhLCBzdGFydCwgZW5kLCBkaW0sIGNsb2Nrd2lzZSkge1xuICAgIHZhciBzdW0gPSAwLFxuICAgICAgICBpLCBqLCBsYXN0O1xuXG4gICAgLy8gY2FsY3VsYXRlIG9yaWdpbmFsIHdpbmRpbmcgb3JkZXIgb2YgYSBwb2x5Z29uIHJpbmdcbiAgICBmb3IgKGkgPSBzdGFydCwgaiA9IGVuZCAtIGRpbTsgaSA8IGVuZDsgaSArPSBkaW0pIHtcbiAgICAgICAgc3VtICs9IChkYXRhW2pdIC0gZGF0YVtpXSkgKiAoZGF0YVtpICsgMV0gKyBkYXRhW2ogKyAxXSk7XG4gICAgICAgIGogPSBpO1xuICAgIH1cblxuICAgIC8vIGxpbmsgcG9pbnRzIGludG8gY2lyY3VsYXIgZG91Ymx5LWxpbmtlZCBsaXN0IGluIHRoZSBzcGVjaWZpZWQgd2luZGluZyBvcmRlclxuICAgIGlmIChjbG9ja3dpc2UgPT09IChzdW0gPiAwKSkge1xuICAgICAgICBmb3IgKGkgPSBzdGFydDsgaSA8IGVuZDsgaSArPSBkaW0pIGxhc3QgPSBpbnNlcnROb2RlKGksIGRhdGFbaV0sIGRhdGFbaSArIDFdLCBsYXN0KTtcbiAgICB9IGVsc2Uge1xuICAgICAgICBmb3IgKGkgPSBlbmQgLSBkaW07IGkgPj0gc3RhcnQ7IGkgLT0gZGltKSBsYXN0ID0gaW5zZXJ0Tm9kZShpLCBkYXRhW2ldLCBkYXRhW2kgKyAxXSwgbGFzdCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGxhc3Q7XG59XG5cbi8vIGVsaW1pbmF0ZSBjb2xpbmVhciBvciBkdXBsaWNhdGUgcG9pbnRzXG5mdW5jdGlvbiBmaWx0ZXJQb2ludHMoc3RhcnQsIGVuZCkge1xuICAgIGlmICghc3RhcnQpIHJldHVybiBzdGFydDtcbiAgICBpZiAoIWVuZCkgZW5kID0gc3RhcnQ7XG5cbiAgICB2YXIgcCA9IHN0YXJ0LFxuICAgICAgICBhZ2FpbjtcbiAgICBkbyB7XG4gICAgICAgIGFnYWluID0gZmFsc2U7XG5cbiAgICAgICAgaWYgKCFwLnN0ZWluZXIgJiYgKGVxdWFscyhwLCBwLm5leHQpIHx8IGFyZWEocC5wcmV2LCBwLCBwLm5leHQpID09PSAwKSkge1xuICAgICAgICAgICAgcmVtb3ZlTm9kZShwKTtcbiAgICAgICAgICAgIHAgPSBlbmQgPSBwLnByZXY7XG4gICAgICAgICAgICBpZiAocCA9PT0gcC5uZXh0KSByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIGFnYWluID0gdHJ1ZTtcblxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcCA9IHAubmV4dDtcbiAgICAgICAgfVxuICAgIH0gd2hpbGUgKGFnYWluIHx8IHAgIT09IGVuZCk7XG5cbiAgICByZXR1cm4gZW5kO1xufVxuXG4vLyBtYWluIGVhciBzbGljaW5nIGxvb3Agd2hpY2ggdHJpYW5ndWxhdGVzIGEgcG9seWdvbiAoZ2l2ZW4gYXMgYSBsaW5rZWQgbGlzdClcbmZ1bmN0aW9uIGVhcmN1dExpbmtlZChlYXIsIHRyaWFuZ2xlcywgZGltLCBtaW5YLCBtaW5ZLCBzaXplLCBwYXNzKSB7XG4gICAgaWYgKCFlYXIpIHJldHVybjtcblxuICAgIC8vIGludGVybGluayBwb2x5Z29uIG5vZGVzIGluIHotb3JkZXJcbiAgICBpZiAoIXBhc3MgJiYgc2l6ZSkgaW5kZXhDdXJ2ZShlYXIsIG1pblgsIG1pblksIHNpemUpO1xuXG4gICAgdmFyIHN0b3AgPSBlYXIsXG4gICAgICAgIHByZXYsIG5leHQ7XG5cbiAgICAvLyBpdGVyYXRlIHRocm91Z2ggZWFycywgc2xpY2luZyB0aGVtIG9uZSBieSBvbmVcbiAgICB3aGlsZSAoZWFyLnByZXYgIT09IGVhci5uZXh0KSB7XG4gICAgICAgIHByZXYgPSBlYXIucHJldjtcbiAgICAgICAgbmV4dCA9IGVhci5uZXh0O1xuXG4gICAgICAgIGlmIChzaXplID8gaXNFYXJIYXNoZWQoZWFyLCBtaW5YLCBtaW5ZLCBzaXplKSA6IGlzRWFyKGVhcikpIHtcbiAgICAgICAgICAgIC8vIGN1dCBvZmYgdGhlIHRyaWFuZ2xlXG4gICAgICAgICAgICB0cmlhbmdsZXMucHVzaChwcmV2LmkgLyBkaW0pO1xuICAgICAgICAgICAgdHJpYW5nbGVzLnB1c2goZWFyLmkgLyBkaW0pO1xuICAgICAgICAgICAgdHJpYW5nbGVzLnB1c2gobmV4dC5pIC8gZGltKTtcblxuICAgICAgICAgICAgcmVtb3ZlTm9kZShlYXIpO1xuXG4gICAgICAgICAgICAvLyBza2lwcGluZyB0aGUgbmV4dCB2ZXJ0aWNlIGxlYWRzIHRvIGxlc3Mgc2xpdmVyIHRyaWFuZ2xlc1xuICAgICAgICAgICAgZWFyID0gbmV4dC5uZXh0O1xuICAgICAgICAgICAgc3RvcCA9IG5leHQubmV4dDtcblxuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICBlYXIgPSBuZXh0O1xuXG4gICAgICAgIC8vIGlmIHdlIGxvb3BlZCB0aHJvdWdoIHRoZSB3aG9sZSByZW1haW5pbmcgcG9seWdvbiBhbmQgY2FuJ3QgZmluZCBhbnkgbW9yZSBlYXJzXG4gICAgICAgIGlmIChlYXIgPT09IHN0b3ApIHtcbiAgICAgICAgICAgIC8vIHRyeSBmaWx0ZXJpbmcgcG9pbnRzIGFuZCBzbGljaW5nIGFnYWluXG4gICAgICAgICAgICBpZiAoIXBhc3MpIHtcbiAgICAgICAgICAgICAgICBlYXJjdXRMaW5rZWQoZmlsdGVyUG9pbnRzKGVhciksIHRyaWFuZ2xlcywgZGltLCBtaW5YLCBtaW5ZLCBzaXplLCAxKTtcblxuICAgICAgICAgICAgLy8gaWYgdGhpcyBkaWRuJ3Qgd29yaywgdHJ5IGN1cmluZyBhbGwgc21hbGwgc2VsZi1pbnRlcnNlY3Rpb25zIGxvY2FsbHlcbiAgICAgICAgICAgIH0gZWxzZSBpZiAocGFzcyA9PT0gMSkge1xuICAgICAgICAgICAgICAgIGVhciA9IGN1cmVMb2NhbEludGVyc2VjdGlvbnMoZWFyLCB0cmlhbmdsZXMsIGRpbSk7XG4gICAgICAgICAgICAgICAgZWFyY3V0TGlua2VkKGVhciwgdHJpYW5nbGVzLCBkaW0sIG1pblgsIG1pblksIHNpemUsIDIpO1xuXG4gICAgICAgICAgICAvLyBhcyBhIGxhc3QgcmVzb3J0LCB0cnkgc3BsaXR0aW5nIHRoZSByZW1haW5pbmcgcG9seWdvbiBpbnRvIHR3b1xuICAgICAgICAgICAgfSBlbHNlIGlmIChwYXNzID09PSAyKSB7XG4gICAgICAgICAgICAgICAgc3BsaXRFYXJjdXQoZWFyLCB0cmlhbmdsZXMsIGRpbSwgbWluWCwgbWluWSwgc2l6ZSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgfVxufVxuXG4vLyBjaGVjayB3aGV0aGVyIGEgcG9seWdvbiBub2RlIGZvcm1zIGEgdmFsaWQgZWFyIHdpdGggYWRqYWNlbnQgbm9kZXNcbmZ1bmN0aW9uIGlzRWFyKGVhcikge1xuICAgIHZhciBhID0gZWFyLnByZXYsXG4gICAgICAgIGIgPSBlYXIsXG4gICAgICAgIGMgPSBlYXIubmV4dDtcblxuICAgIGlmIChhcmVhKGEsIGIsIGMpID49IDApIHJldHVybiBmYWxzZTsgLy8gcmVmbGV4LCBjYW4ndCBiZSBhbiBlYXJcblxuICAgIC8vIG5vdyBtYWtlIHN1cmUgd2UgZG9uJ3QgaGF2ZSBvdGhlciBwb2ludHMgaW5zaWRlIHRoZSBwb3RlbnRpYWwgZWFyXG4gICAgdmFyIHAgPSBlYXIubmV4dC5uZXh0O1xuXG4gICAgd2hpbGUgKHAgIT09IGVhci5wcmV2KSB7XG4gICAgICAgIGlmIChwb2ludEluVHJpYW5nbGUoYS54LCBhLnksIGIueCwgYi55LCBjLngsIGMueSwgcC54LCBwLnkpICYmXG4gICAgICAgICAgICBhcmVhKHAucHJldiwgcCwgcC5uZXh0KSA+PSAwKSByZXR1cm4gZmFsc2U7XG4gICAgICAgIHAgPSBwLm5leHQ7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRydWU7XG59XG5cbmZ1bmN0aW9uIGlzRWFySGFzaGVkKGVhciwgbWluWCwgbWluWSwgc2l6ZSkge1xuICAgIHZhciBhID0gZWFyLnByZXYsXG4gICAgICAgIGIgPSBlYXIsXG4gICAgICAgIGMgPSBlYXIubmV4dDtcblxuICAgIGlmIChhcmVhKGEsIGIsIGMpID49IDApIHJldHVybiBmYWxzZTsgLy8gcmVmbGV4LCBjYW4ndCBiZSBhbiBlYXJcblxuICAgIC8vIHRyaWFuZ2xlIGJib3g7IG1pbiAmIG1heCBhcmUgY2FsY3VsYXRlZCBsaWtlIHRoaXMgZm9yIHNwZWVkXG4gICAgdmFyIG1pblRYID0gYS54IDwgYi54ID8gKGEueCA8IGMueCA/IGEueCA6IGMueCkgOiAoYi54IDwgYy54ID8gYi54IDogYy54KSxcbiAgICAgICAgbWluVFkgPSBhLnkgPCBiLnkgPyAoYS55IDwgYy55ID8gYS55IDogYy55KSA6IChiLnkgPCBjLnkgPyBiLnkgOiBjLnkpLFxuICAgICAgICBtYXhUWCA9IGEueCA+IGIueCA/IChhLnggPiBjLnggPyBhLnggOiBjLngpIDogKGIueCA+IGMueCA/IGIueCA6IGMueCksXG4gICAgICAgIG1heFRZID0gYS55ID4gYi55ID8gKGEueSA+IGMueSA/IGEueSA6IGMueSkgOiAoYi55ID4gYy55ID8gYi55IDogYy55KTtcblxuICAgIC8vIHotb3JkZXIgcmFuZ2UgZm9yIHRoZSBjdXJyZW50IHRyaWFuZ2xlIGJib3g7XG4gICAgdmFyIG1pblogPSB6T3JkZXIobWluVFgsIG1pblRZLCBtaW5YLCBtaW5ZLCBzaXplKSxcbiAgICAgICAgbWF4WiA9IHpPcmRlcihtYXhUWCwgbWF4VFksIG1pblgsIG1pblksIHNpemUpO1xuXG4gICAgLy8gZmlyc3QgbG9vayBmb3IgcG9pbnRzIGluc2lkZSB0aGUgdHJpYW5nbGUgaW4gaW5jcmVhc2luZyB6LW9yZGVyXG4gICAgdmFyIHAgPSBlYXIubmV4dFo7XG5cbiAgICB3aGlsZSAocCAmJiBwLnogPD0gbWF4Wikge1xuICAgICAgICBpZiAocCAhPT0gZWFyLnByZXYgJiYgcCAhPT0gZWFyLm5leHQgJiZcbiAgICAgICAgICAgIHBvaW50SW5UcmlhbmdsZShhLngsIGEueSwgYi54LCBiLnksIGMueCwgYy55LCBwLngsIHAueSkgJiZcbiAgICAgICAgICAgIGFyZWEocC5wcmV2LCBwLCBwLm5leHQpID49IDApIHJldHVybiBmYWxzZTtcbiAgICAgICAgcCA9IHAubmV4dFo7XG4gICAgfVxuXG4gICAgLy8gdGhlbiBsb29rIGZvciBwb2ludHMgaW4gZGVjcmVhc2luZyB6LW9yZGVyXG4gICAgcCA9IGVhci5wcmV2WjtcblxuICAgIHdoaWxlIChwICYmIHAueiA+PSBtaW5aKSB7XG4gICAgICAgIGlmIChwICE9PSBlYXIucHJldiAmJiBwICE9PSBlYXIubmV4dCAmJlxuICAgICAgICAgICAgcG9pbnRJblRyaWFuZ2xlKGEueCwgYS55LCBiLngsIGIueSwgYy54LCBjLnksIHAueCwgcC55KSAmJlxuICAgICAgICAgICAgYXJlYShwLnByZXYsIHAsIHAubmV4dCkgPj0gMCkgcmV0dXJuIGZhbHNlO1xuICAgICAgICBwID0gcC5wcmV2WjtcbiAgICB9XG5cbiAgICByZXR1cm4gdHJ1ZTtcbn1cblxuLy8gZ28gdGhyb3VnaCBhbGwgcG9seWdvbiBub2RlcyBhbmQgY3VyZSBzbWFsbCBsb2NhbCBzZWxmLWludGVyc2VjdGlvbnNcbmZ1bmN0aW9uIGN1cmVMb2NhbEludGVyc2VjdGlvbnMoc3RhcnQsIHRyaWFuZ2xlcywgZGltKSB7XG4gICAgdmFyIHAgPSBzdGFydDtcbiAgICBkbyB7XG4gICAgICAgIHZhciBhID0gcC5wcmV2LFxuICAgICAgICAgICAgYiA9IHAubmV4dC5uZXh0O1xuXG4gICAgICAgIC8vIGEgc2VsZi1pbnRlcnNlY3Rpb24gd2hlcmUgZWRnZSAodltpLTFdLHZbaV0pIGludGVyc2VjdHMgKHZbaSsxXSx2W2krMl0pXG4gICAgICAgIGlmIChpbnRlcnNlY3RzKGEsIHAsIHAubmV4dCwgYikgJiYgbG9jYWxseUluc2lkZShhLCBiKSAmJiBsb2NhbGx5SW5zaWRlKGIsIGEpKSB7XG5cbiAgICAgICAgICAgIHRyaWFuZ2xlcy5wdXNoKGEuaSAvIGRpbSk7XG4gICAgICAgICAgICB0cmlhbmdsZXMucHVzaChwLmkgLyBkaW0pO1xuICAgICAgICAgICAgdHJpYW5nbGVzLnB1c2goYi5pIC8gZGltKTtcblxuICAgICAgICAgICAgLy8gcmVtb3ZlIHR3byBub2RlcyBpbnZvbHZlZFxuICAgICAgICAgICAgcmVtb3ZlTm9kZShwKTtcbiAgICAgICAgICAgIHJlbW92ZU5vZGUocC5uZXh0KTtcblxuICAgICAgICAgICAgcCA9IHN0YXJ0ID0gYjtcbiAgICAgICAgfVxuICAgICAgICBwID0gcC5uZXh0O1xuICAgIH0gd2hpbGUgKHAgIT09IHN0YXJ0KTtcblxuICAgIHJldHVybiBwO1xufVxuXG4vLyB0cnkgc3BsaXR0aW5nIHBvbHlnb24gaW50byB0d28gYW5kIHRyaWFuZ3VsYXRlIHRoZW0gaW5kZXBlbmRlbnRseVxuZnVuY3Rpb24gc3BsaXRFYXJjdXQoc3RhcnQsIHRyaWFuZ2xlcywgZGltLCBtaW5YLCBtaW5ZLCBzaXplKSB7XG4gICAgLy8gbG9vayBmb3IgYSB2YWxpZCBkaWFnb25hbCB0aGF0IGRpdmlkZXMgdGhlIHBvbHlnb24gaW50byB0d29cbiAgICB2YXIgYSA9IHN0YXJ0O1xuICAgIGRvIHtcbiAgICAgICAgdmFyIGIgPSBhLm5leHQubmV4dDtcbiAgICAgICAgd2hpbGUgKGIgIT09IGEucHJldikge1xuICAgICAgICAgICAgaWYgKGEuaSAhPT0gYi5pICYmIGlzVmFsaWREaWFnb25hbChhLCBiKSkge1xuICAgICAgICAgICAgICAgIC8vIHNwbGl0IHRoZSBwb2x5Z29uIGluIHR3byBieSB0aGUgZGlhZ29uYWxcbiAgICAgICAgICAgICAgICB2YXIgYyA9IHNwbGl0UG9seWdvbihhLCBiKTtcblxuICAgICAgICAgICAgICAgIC8vIGZpbHRlciBjb2xpbmVhciBwb2ludHMgYXJvdW5kIHRoZSBjdXRzXG4gICAgICAgICAgICAgICAgYSA9IGZpbHRlclBvaW50cyhhLCBhLm5leHQpO1xuICAgICAgICAgICAgICAgIGMgPSBmaWx0ZXJQb2ludHMoYywgYy5uZXh0KTtcblxuICAgICAgICAgICAgICAgIC8vIHJ1biBlYXJjdXQgb24gZWFjaCBoYWxmXG4gICAgICAgICAgICAgICAgZWFyY3V0TGlua2VkKGEsIHRyaWFuZ2xlcywgZGltLCBtaW5YLCBtaW5ZLCBzaXplKTtcbiAgICAgICAgICAgICAgICBlYXJjdXRMaW5rZWQoYywgdHJpYW5nbGVzLCBkaW0sIG1pblgsIG1pblksIHNpemUpO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGIgPSBiLm5leHQ7XG4gICAgICAgIH1cbiAgICAgICAgYSA9IGEubmV4dDtcbiAgICB9IHdoaWxlIChhICE9PSBzdGFydCk7XG59XG5cbi8vIGxpbmsgZXZlcnkgaG9sZSBpbnRvIHRoZSBvdXRlciBsb29wLCBwcm9kdWNpbmcgYSBzaW5nbGUtcmluZyBwb2x5Z29uIHdpdGhvdXQgaG9sZXNcbmZ1bmN0aW9uIGVsaW1pbmF0ZUhvbGVzKGRhdGEsIGhvbGVJbmRpY2VzLCBvdXRlck5vZGUsIGRpbSkge1xuICAgIHZhciBxdWV1ZSA9IFtdLFxuICAgICAgICBpLCBsZW4sIHN0YXJ0LCBlbmQsIGxpc3Q7XG5cbiAgICBmb3IgKGkgPSAwLCBsZW4gPSBob2xlSW5kaWNlcy5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuICAgICAgICBzdGFydCA9IGhvbGVJbmRpY2VzW2ldICogZGltO1xuICAgICAgICBlbmQgPSBpIDwgbGVuIC0gMSA/IGhvbGVJbmRpY2VzW2kgKyAxXSAqIGRpbSA6IGRhdGEubGVuZ3RoO1xuICAgICAgICBsaXN0ID0gbGlua2VkTGlzdChkYXRhLCBzdGFydCwgZW5kLCBkaW0sIGZhbHNlKTtcbiAgICAgICAgaWYgKGxpc3QgPT09IGxpc3QubmV4dCkgbGlzdC5zdGVpbmVyID0gdHJ1ZTtcbiAgICAgICAgcXVldWUucHVzaChnZXRMZWZ0bW9zdChsaXN0KSk7XG4gICAgfVxuXG4gICAgcXVldWUuc29ydChjb21wYXJlWCk7XG5cbiAgICAvLyBwcm9jZXNzIGhvbGVzIGZyb20gbGVmdCB0byByaWdodFxuICAgIGZvciAoaSA9IDA7IGkgPCBxdWV1ZS5sZW5ndGg7IGkrKykge1xuICAgICAgICBlbGltaW5hdGVIb2xlKHF1ZXVlW2ldLCBvdXRlck5vZGUpO1xuICAgICAgICBvdXRlck5vZGUgPSBmaWx0ZXJQb2ludHMob3V0ZXJOb2RlLCBvdXRlck5vZGUubmV4dCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG91dGVyTm9kZTtcbn1cblxuZnVuY3Rpb24gY29tcGFyZVgoYSwgYikge1xuICAgIHJldHVybiBhLnggLSBiLng7XG59XG5cbi8vIGZpbmQgYSBicmlkZ2UgYmV0d2VlbiB2ZXJ0aWNlcyB0aGF0IGNvbm5lY3RzIGhvbGUgd2l0aCBhbiBvdXRlciByaW5nIGFuZCBhbmQgbGluayBpdFxuZnVuY3Rpb24gZWxpbWluYXRlSG9sZShob2xlLCBvdXRlck5vZGUpIHtcbiAgICBvdXRlck5vZGUgPSBmaW5kSG9sZUJyaWRnZShob2xlLCBvdXRlck5vZGUpO1xuICAgIGlmIChvdXRlck5vZGUpIHtcbiAgICAgICAgdmFyIGIgPSBzcGxpdFBvbHlnb24ob3V0ZXJOb2RlLCBob2xlKTtcbiAgICAgICAgZmlsdGVyUG9pbnRzKGIsIGIubmV4dCk7XG4gICAgfVxufVxuXG4vLyBEYXZpZCBFYmVybHkncyBhbGdvcml0aG0gZm9yIGZpbmRpbmcgYSBicmlkZ2UgYmV0d2VlbiBob2xlIGFuZCBvdXRlciBwb2x5Z29uXG5mdW5jdGlvbiBmaW5kSG9sZUJyaWRnZShob2xlLCBvdXRlck5vZGUpIHtcbiAgICB2YXIgcCA9IG91dGVyTm9kZSxcbiAgICAgICAgaHggPSBob2xlLngsXG4gICAgICAgIGh5ID0gaG9sZS55LFxuICAgICAgICBxeCA9IC1JbmZpbml0eSxcbiAgICAgICAgbTtcblxuICAgIC8vIGZpbmQgYSBzZWdtZW50IGludGVyc2VjdGVkIGJ5IGEgcmF5IGZyb20gdGhlIGhvbGUncyBsZWZ0bW9zdCBwb2ludCB0byB0aGUgbGVmdDtcbiAgICAvLyBzZWdtZW50J3MgZW5kcG9pbnQgd2l0aCBsZXNzZXIgeCB3aWxsIGJlIHBvdGVudGlhbCBjb25uZWN0aW9uIHBvaW50XG4gICAgZG8ge1xuICAgICAgICBpZiAoaHkgPD0gcC55ICYmIGh5ID49IHAubmV4dC55KSB7XG4gICAgICAgICAgICB2YXIgeCA9IHAueCArIChoeSAtIHAueSkgKiAocC5uZXh0LnggLSBwLngpIC8gKHAubmV4dC55IC0gcC55KTtcbiAgICAgICAgICAgIGlmICh4IDw9IGh4ICYmIHggPiBxeCkge1xuICAgICAgICAgICAgICAgIHF4ID0geDtcbiAgICAgICAgICAgICAgICBtID0gcC54IDwgcC5uZXh0LnggPyBwIDogcC5uZXh0O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHAgPSBwLm5leHQ7XG4gICAgfSB3aGlsZSAocCAhPT0gb3V0ZXJOb2RlKTtcblxuICAgIGlmICghbSkgcmV0dXJuIG51bGw7XG5cbiAgICAvLyBsb29rIGZvciBwb2ludHMgaW5zaWRlIHRoZSB0cmlhbmdsZSBvZiBob2xlIHBvaW50LCBzZWdtZW50IGludGVyc2VjdGlvbiBhbmQgZW5kcG9pbnQ7XG4gICAgLy8gaWYgdGhlcmUgYXJlIG5vIHBvaW50cyBmb3VuZCwgd2UgaGF2ZSBhIHZhbGlkIGNvbm5lY3Rpb247XG4gICAgLy8gb3RoZXJ3aXNlIGNob29zZSB0aGUgcG9pbnQgb2YgdGhlIG1pbmltdW0gYW5nbGUgd2l0aCB0aGUgcmF5IGFzIGNvbm5lY3Rpb24gcG9pbnRcblxuICAgIHZhciBzdG9wID0gbSxcbiAgICAgICAgdGFuTWluID0gSW5maW5pdHksXG4gICAgICAgIHRhbjtcblxuICAgIHAgPSBtLm5leHQ7XG5cbiAgICB3aGlsZSAocCAhPT0gc3RvcCkge1xuICAgICAgICBpZiAoaHggPj0gcC54ICYmIHAueCA+PSBtLnggJiZcbiAgICAgICAgICAgICAgICBwb2ludEluVHJpYW5nbGUoaHkgPCBtLnkgPyBoeCA6IHF4LCBoeSwgbS54LCBtLnksIGh5IDwgbS55ID8gcXggOiBoeCwgaHksIHAueCwgcC55KSkge1xuXG4gICAgICAgICAgICB0YW4gPSBNYXRoLmFicyhoeSAtIHAueSkgLyAoaHggLSBwLngpOyAvLyB0YW5nZW50aWFsXG5cbiAgICAgICAgICAgIGlmICgodGFuIDwgdGFuTWluIHx8ICh0YW4gPT09IHRhbk1pbiAmJiBwLnggPiBtLngpKSAmJiBsb2NhbGx5SW5zaWRlKHAsIGhvbGUpKSB7XG4gICAgICAgICAgICAgICAgbSA9IHA7XG4gICAgICAgICAgICAgICAgdGFuTWluID0gdGFuO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcCA9IHAubmV4dDtcbiAgICB9XG5cbiAgICByZXR1cm4gbTtcbn1cblxuLy8gaW50ZXJsaW5rIHBvbHlnb24gbm9kZXMgaW4gei1vcmRlclxuZnVuY3Rpb24gaW5kZXhDdXJ2ZShzdGFydCwgbWluWCwgbWluWSwgc2l6ZSkge1xuICAgIHZhciBwID0gc3RhcnQ7XG4gICAgZG8ge1xuICAgICAgICBpZiAocC56ID09PSBudWxsKSBwLnogPSB6T3JkZXIocC54LCBwLnksIG1pblgsIG1pblksIHNpemUpO1xuICAgICAgICBwLnByZXZaID0gcC5wcmV2O1xuICAgICAgICBwLm5leHRaID0gcC5uZXh0O1xuICAgICAgICBwID0gcC5uZXh0O1xuICAgIH0gd2hpbGUgKHAgIT09IHN0YXJ0KTtcblxuICAgIHAucHJldloubmV4dFogPSBudWxsO1xuICAgIHAucHJldlogPSBudWxsO1xuXG4gICAgc29ydExpbmtlZChwKTtcbn1cblxuLy8gU2ltb24gVGF0aGFtJ3MgbGlua2VkIGxpc3QgbWVyZ2Ugc29ydCBhbGdvcml0aG1cbi8vIGh0dHA6Ly93d3cuY2hpYXJrLmdyZWVuZW5kLm9yZy51ay9+c2d0YXRoYW0vYWxnb3JpdGhtcy9saXN0c29ydC5odG1sXG5mdW5jdGlvbiBzb3J0TGlua2VkKGxpc3QpIHtcbiAgICB2YXIgaSwgcCwgcSwgZSwgdGFpbCwgbnVtTWVyZ2VzLCBwU2l6ZSwgcVNpemUsXG4gICAgICAgIGluU2l6ZSA9IDE7XG5cbiAgICBkbyB7XG4gICAgICAgIHAgPSBsaXN0O1xuICAgICAgICBsaXN0ID0gbnVsbDtcbiAgICAgICAgdGFpbCA9IG51bGw7XG4gICAgICAgIG51bU1lcmdlcyA9IDA7XG5cbiAgICAgICAgd2hpbGUgKHApIHtcbiAgICAgICAgICAgIG51bU1lcmdlcysrO1xuICAgICAgICAgICAgcSA9IHA7XG4gICAgICAgICAgICBwU2l6ZSA9IDA7XG4gICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgaW5TaXplOyBpKyspIHtcbiAgICAgICAgICAgICAgICBwU2l6ZSsrO1xuICAgICAgICAgICAgICAgIHEgPSBxLm5leHRaO1xuICAgICAgICAgICAgICAgIGlmICghcSkgYnJlYWs7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHFTaXplID0gaW5TaXplO1xuXG4gICAgICAgICAgICB3aGlsZSAocFNpemUgPiAwIHx8IChxU2l6ZSA+IDAgJiYgcSkpIHtcblxuICAgICAgICAgICAgICAgIGlmIChwU2l6ZSA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICBlID0gcTtcbiAgICAgICAgICAgICAgICAgICAgcSA9IHEubmV4dFo7XG4gICAgICAgICAgICAgICAgICAgIHFTaXplLS07XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChxU2l6ZSA9PT0gMCB8fCAhcSkge1xuICAgICAgICAgICAgICAgICAgICBlID0gcDtcbiAgICAgICAgICAgICAgICAgICAgcCA9IHAubmV4dFo7XG4gICAgICAgICAgICAgICAgICAgIHBTaXplLS07XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChwLnogPD0gcS56KSB7XG4gICAgICAgICAgICAgICAgICAgIGUgPSBwO1xuICAgICAgICAgICAgICAgICAgICBwID0gcC5uZXh0WjtcbiAgICAgICAgICAgICAgICAgICAgcFNpemUtLTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBlID0gcTtcbiAgICAgICAgICAgICAgICAgICAgcSA9IHEubmV4dFo7XG4gICAgICAgICAgICAgICAgICAgIHFTaXplLS07XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKHRhaWwpIHRhaWwubmV4dFogPSBlO1xuICAgICAgICAgICAgICAgIGVsc2UgbGlzdCA9IGU7XG5cbiAgICAgICAgICAgICAgICBlLnByZXZaID0gdGFpbDtcbiAgICAgICAgICAgICAgICB0YWlsID0gZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcCA9IHE7XG4gICAgICAgIH1cblxuICAgICAgICB0YWlsLm5leHRaID0gbnVsbDtcbiAgICAgICAgaW5TaXplICo9IDI7XG5cbiAgICB9IHdoaWxlIChudW1NZXJnZXMgPiAxKTtcblxuICAgIHJldHVybiBsaXN0O1xufVxuXG4vLyB6LW9yZGVyIG9mIGEgcG9pbnQgZ2l2ZW4gY29vcmRzIGFuZCBzaXplIG9mIHRoZSBkYXRhIGJvdW5kaW5nIGJveFxuZnVuY3Rpb24gek9yZGVyKHgsIHksIG1pblgsIG1pblksIHNpemUpIHtcbiAgICAvLyBjb29yZHMgYXJlIHRyYW5zZm9ybWVkIGludG8gbm9uLW5lZ2F0aXZlIDE1LWJpdCBpbnRlZ2VyIHJhbmdlXG4gICAgeCA9IDMyNzY3ICogKHggLSBtaW5YKSAvIHNpemU7XG4gICAgeSA9IDMyNzY3ICogKHkgLSBtaW5ZKSAvIHNpemU7XG5cbiAgICB4ID0gKHggfCAoeCA8PCA4KSkgJiAweDAwRkYwMEZGO1xuICAgIHggPSAoeCB8ICh4IDw8IDQpKSAmIDB4MEYwRjBGMEY7XG4gICAgeCA9ICh4IHwgKHggPDwgMikpICYgMHgzMzMzMzMzMztcbiAgICB4ID0gKHggfCAoeCA8PCAxKSkgJiAweDU1NTU1NTU1O1xuXG4gICAgeSA9ICh5IHwgKHkgPDwgOCkpICYgMHgwMEZGMDBGRjtcbiAgICB5ID0gKHkgfCAoeSA8PCA0KSkgJiAweDBGMEYwRjBGO1xuICAgIHkgPSAoeSB8ICh5IDw8IDIpKSAmIDB4MzMzMzMzMzM7XG4gICAgeSA9ICh5IHwgKHkgPDwgMSkpICYgMHg1NTU1NTU1NTtcblxuICAgIHJldHVybiB4IHwgKHkgPDwgMSk7XG59XG5cbi8vIGZpbmQgdGhlIGxlZnRtb3N0IG5vZGUgb2YgYSBwb2x5Z29uIHJpbmdcbmZ1bmN0aW9uIGdldExlZnRtb3N0KHN0YXJ0KSB7XG4gICAgdmFyIHAgPSBzdGFydCxcbiAgICAgICAgbGVmdG1vc3QgPSBzdGFydDtcbiAgICBkbyB7XG4gICAgICAgIGlmIChwLnggPCBsZWZ0bW9zdC54KSBsZWZ0bW9zdCA9IHA7XG4gICAgICAgIHAgPSBwLm5leHQ7XG4gICAgfSB3aGlsZSAocCAhPT0gc3RhcnQpO1xuXG4gICAgcmV0dXJuIGxlZnRtb3N0O1xufVxuXG4vLyBjaGVjayBpZiBhIHBvaW50IGxpZXMgd2l0aGluIGEgY29udmV4IHRyaWFuZ2xlXG5mdW5jdGlvbiBwb2ludEluVHJpYW5nbGUoYXgsIGF5LCBieCwgYnksIGN4LCBjeSwgcHgsIHB5KSB7XG4gICAgcmV0dXJuIChjeCAtIHB4KSAqIChheSAtIHB5KSAtIChheCAtIHB4KSAqIChjeSAtIHB5KSA+PSAwICYmXG4gICAgICAgICAgIChheCAtIHB4KSAqIChieSAtIHB5KSAtIChieCAtIHB4KSAqIChheSAtIHB5KSA+PSAwICYmXG4gICAgICAgICAgIChieCAtIHB4KSAqIChjeSAtIHB5KSAtIChjeCAtIHB4KSAqIChieSAtIHB5KSA+PSAwO1xufVxuXG4vLyBjaGVjayBpZiBhIGRpYWdvbmFsIGJldHdlZW4gdHdvIHBvbHlnb24gbm9kZXMgaXMgdmFsaWQgKGxpZXMgaW4gcG9seWdvbiBpbnRlcmlvcilcbmZ1bmN0aW9uIGlzVmFsaWREaWFnb25hbChhLCBiKSB7XG4gICAgcmV0dXJuIGVxdWFscyhhLCBiKSB8fCBhLm5leHQuaSAhPT0gYi5pICYmIGEucHJldi5pICE9PSBiLmkgJiYgIWludGVyc2VjdHNQb2x5Z29uKGEsIGIpICYmXG4gICAgICAgICAgIGxvY2FsbHlJbnNpZGUoYSwgYikgJiYgbG9jYWxseUluc2lkZShiLCBhKSAmJiBtaWRkbGVJbnNpZGUoYSwgYik7XG59XG5cbi8vIHNpZ25lZCBhcmVhIG9mIGEgdHJpYW5nbGVcbmZ1bmN0aW9uIGFyZWEocCwgcSwgcikge1xuICAgIHJldHVybiAocS55IC0gcC55KSAqIChyLnggLSBxLngpIC0gKHEueCAtIHAueCkgKiAoci55IC0gcS55KTtcbn1cblxuLy8gY2hlY2sgaWYgdHdvIHBvaW50cyBhcmUgZXF1YWxcbmZ1bmN0aW9uIGVxdWFscyhwMSwgcDIpIHtcbiAgICByZXR1cm4gcDEueCA9PT0gcDIueCAmJiBwMS55ID09PSBwMi55O1xufVxuXG4vLyBjaGVjayBpZiB0d28gc2VnbWVudHMgaW50ZXJzZWN0XG5mdW5jdGlvbiBpbnRlcnNlY3RzKHAxLCBxMSwgcDIsIHEyKSB7XG4gICAgcmV0dXJuIGFyZWEocDEsIHExLCBwMikgPiAwICE9PSBhcmVhKHAxLCBxMSwgcTIpID4gMCAmJlxuICAgICAgICAgICBhcmVhKHAyLCBxMiwgcDEpID4gMCAhPT0gYXJlYShwMiwgcTIsIHExKSA+IDA7XG59XG5cbi8vIGNoZWNrIGlmIGEgcG9seWdvbiBkaWFnb25hbCBpbnRlcnNlY3RzIGFueSBwb2x5Z29uIHNlZ21lbnRzXG5mdW5jdGlvbiBpbnRlcnNlY3RzUG9seWdvbihhLCBiKSB7XG4gICAgdmFyIHAgPSBhO1xuICAgIGRvIHtcbiAgICAgICAgaWYgKHAuaSAhPT0gYS5pICYmIHAubmV4dC5pICE9PSBhLmkgJiYgcC5pICE9PSBiLmkgJiYgcC5uZXh0LmkgIT09IGIuaSAmJlxuICAgICAgICAgICAgICAgIGludGVyc2VjdHMocCwgcC5uZXh0LCBhLCBiKSkgcmV0dXJuIHRydWU7XG4gICAgICAgIHAgPSBwLm5leHQ7XG4gICAgfSB3aGlsZSAocCAhPT0gYSk7XG5cbiAgICByZXR1cm4gZmFsc2U7XG59XG5cbi8vIGNoZWNrIGlmIGEgcG9seWdvbiBkaWFnb25hbCBpcyBsb2NhbGx5IGluc2lkZSB0aGUgcG9seWdvblxuZnVuY3Rpb24gbG9jYWxseUluc2lkZShhLCBiKSB7XG4gICAgcmV0dXJuIGFyZWEoYS5wcmV2LCBhLCBhLm5leHQpIDwgMCA/XG4gICAgICAgIGFyZWEoYSwgYiwgYS5uZXh0KSA+PSAwICYmIGFyZWEoYSwgYS5wcmV2LCBiKSA+PSAwIDpcbiAgICAgICAgYXJlYShhLCBiLCBhLnByZXYpIDwgMCB8fCBhcmVhKGEsIGEubmV4dCwgYikgPCAwO1xufVxuXG4vLyBjaGVjayBpZiB0aGUgbWlkZGxlIHBvaW50IG9mIGEgcG9seWdvbiBkaWFnb25hbCBpcyBpbnNpZGUgdGhlIHBvbHlnb25cbmZ1bmN0aW9uIG1pZGRsZUluc2lkZShhLCBiKSB7XG4gICAgdmFyIHAgPSBhLFxuICAgICAgICBpbnNpZGUgPSBmYWxzZSxcbiAgICAgICAgcHggPSAoYS54ICsgYi54KSAvIDIsXG4gICAgICAgIHB5ID0gKGEueSArIGIueSkgLyAyO1xuICAgIGRvIHtcbiAgICAgICAgaWYgKCgocC55ID4gcHkpICE9PSAocC5uZXh0LnkgPiBweSkpICYmIChweCA8IChwLm5leHQueCAtIHAueCkgKiAocHkgLSBwLnkpIC8gKHAubmV4dC55IC0gcC55KSArIHAueCkpXG4gICAgICAgICAgICBpbnNpZGUgPSAhaW5zaWRlO1xuICAgICAgICBwID0gcC5uZXh0O1xuICAgIH0gd2hpbGUgKHAgIT09IGEpO1xuXG4gICAgcmV0dXJuIGluc2lkZTtcbn1cblxuLy8gbGluayB0d28gcG9seWdvbiB2ZXJ0aWNlcyB3aXRoIGEgYnJpZGdlOyBpZiB0aGUgdmVydGljZXMgYmVsb25nIHRvIHRoZSBzYW1lIHJpbmcsIGl0IHNwbGl0cyBwb2x5Z29uIGludG8gdHdvO1xuLy8gaWYgb25lIGJlbG9uZ3MgdG8gdGhlIG91dGVyIHJpbmcgYW5kIGFub3RoZXIgdG8gYSBob2xlLCBpdCBtZXJnZXMgaXQgaW50byBhIHNpbmdsZSByaW5nXG5mdW5jdGlvbiBzcGxpdFBvbHlnb24oYSwgYikge1xuICAgIHZhciBhMiA9IG5ldyBOb2RlKGEuaSwgYS54LCBhLnkpLFxuICAgICAgICBiMiA9IG5ldyBOb2RlKGIuaSwgYi54LCBiLnkpLFxuICAgICAgICBhbiA9IGEubmV4dCxcbiAgICAgICAgYnAgPSBiLnByZXY7XG5cbiAgICBhLm5leHQgPSBiO1xuICAgIGIucHJldiA9IGE7XG5cbiAgICBhMi5uZXh0ID0gYW47XG4gICAgYW4ucHJldiA9IGEyO1xuXG4gICAgYjIubmV4dCA9IGEyO1xuICAgIGEyLnByZXYgPSBiMjtcblxuICAgIGJwLm5leHQgPSBiMjtcbiAgICBiMi5wcmV2ID0gYnA7XG5cbiAgICByZXR1cm4gYjI7XG59XG5cbi8vIGNyZWF0ZSBhIG5vZGUgYW5kIG9wdGlvbmFsbHkgbGluayBpdCB3aXRoIHByZXZpb3VzIG9uZSAoaW4gYSBjaXJjdWxhciBkb3VibHkgbGlua2VkIGxpc3QpXG5mdW5jdGlvbiBpbnNlcnROb2RlKGksIHgsIHksIGxhc3QpIHtcbiAgICB2YXIgcCA9IG5ldyBOb2RlKGksIHgsIHkpO1xuXG4gICAgaWYgKCFsYXN0KSB7XG4gICAgICAgIHAucHJldiA9IHA7XG4gICAgICAgIHAubmV4dCA9IHA7XG5cbiAgICB9IGVsc2Uge1xuICAgICAgICBwLm5leHQgPSBsYXN0Lm5leHQ7XG4gICAgICAgIHAucHJldiA9IGxhc3Q7XG4gICAgICAgIGxhc3QubmV4dC5wcmV2ID0gcDtcbiAgICAgICAgbGFzdC5uZXh0ID0gcDtcbiAgICB9XG4gICAgcmV0dXJuIHA7XG59XG5cbmZ1bmN0aW9uIHJlbW92ZU5vZGUocCkge1xuICAgIHAubmV4dC5wcmV2ID0gcC5wcmV2O1xuICAgIHAucHJldi5uZXh0ID0gcC5uZXh0O1xuXG4gICAgaWYgKHAucHJldlopIHAucHJldloubmV4dFogPSBwLm5leHRaO1xuICAgIGlmIChwLm5leHRaKSBwLm5leHRaLnByZXZaID0gcC5wcmV2Wjtcbn1cblxuZnVuY3Rpb24gTm9kZShpLCB4LCB5KSB7XG4gICAgLy8gdmVydGljZSBpbmRleCBpbiBjb29yZGluYXRlcyBhcnJheVxuICAgIHRoaXMuaSA9IGk7XG5cbiAgICAvLyB2ZXJ0ZXggY29vcmRpbmF0ZXNcbiAgICB0aGlzLnggPSB4O1xuICAgIHRoaXMueSA9IHk7XG5cbiAgICAvLyBwcmV2aW91cyBhbmQgbmV4dCB2ZXJ0aWNlIG5vZGVzIGluIGEgcG9seWdvbiByaW5nXG4gICAgdGhpcy5wcmV2ID0gbnVsbDtcbiAgICB0aGlzLm5leHQgPSBudWxsO1xuXG4gICAgLy8gei1vcmRlciBjdXJ2ZSB2YWx1ZVxuICAgIHRoaXMueiA9IG51bGw7XG5cbiAgICAvLyBwcmV2aW91cyBhbmQgbmV4dCBub2RlcyBpbiB6LW9yZGVyXG4gICAgdGhpcy5wcmV2WiA9IG51bGw7XG4gICAgdGhpcy5uZXh0WiA9IG51bGw7XG5cbiAgICAvLyBpbmRpY2F0ZXMgd2hldGhlciB0aGlzIGlzIGEgc3RlaW5lciBwb2ludFxuICAgIHRoaXMuc3RlaW5lciA9IGZhbHNlO1xufVxuIiwiJ3VzZSBzdHJpY3QnO1xuXG4vL1xuLy8gV2Ugc3RvcmUgb3VyIEVFIG9iamVjdHMgaW4gYSBwbGFpbiBvYmplY3Qgd2hvc2UgcHJvcGVydGllcyBhcmUgZXZlbnQgbmFtZXMuXG4vLyBJZiBgT2JqZWN0LmNyZWF0ZShudWxsKWAgaXMgbm90IHN1cHBvcnRlZCB3ZSBwcmVmaXggdGhlIGV2ZW50IG5hbWVzIHdpdGggYVxuLy8gYH5gIHRvIG1ha2Ugc3VyZSB0aGF0IHRoZSBidWlsdC1pbiBvYmplY3QgcHJvcGVydGllcyBhcmUgbm90IG92ZXJyaWRkZW4gb3Jcbi8vIHVzZWQgYXMgYW4gYXR0YWNrIHZlY3Rvci5cbi8vIFdlIGFsc28gYXNzdW1lIHRoYXQgYE9iamVjdC5jcmVhdGUobnVsbClgIGlzIGF2YWlsYWJsZSB3aGVuIHRoZSBldmVudCBuYW1lXG4vLyBpcyBhbiBFUzYgU3ltYm9sLlxuLy9cbnZhciBwcmVmaXggPSB0eXBlb2YgT2JqZWN0LmNyZWF0ZSAhPT0gJ2Z1bmN0aW9uJyA/ICd+JyA6IGZhbHNlO1xuXG4vKipcbiAqIFJlcHJlc2VudGF0aW9uIG9mIGEgc2luZ2xlIEV2ZW50RW1pdHRlciBmdW5jdGlvbi5cbiAqXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmbiBFdmVudCBoYW5kbGVyIHRvIGJlIGNhbGxlZC5cbiAqIEBwYXJhbSB7TWl4ZWR9IGNvbnRleHQgQ29udGV4dCBmb3IgZnVuY3Rpb24gZXhlY3V0aW9uLlxuICogQHBhcmFtIHtCb29sZWFufSBvbmNlIE9ubHkgZW1pdCBvbmNlXG4gKiBAYXBpIHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gRUUoZm4sIGNvbnRleHQsIG9uY2UpIHtcbiAgdGhpcy5mbiA9IGZuO1xuICB0aGlzLmNvbnRleHQgPSBjb250ZXh0O1xuICB0aGlzLm9uY2UgPSBvbmNlIHx8IGZhbHNlO1xufVxuXG4vKipcbiAqIE1pbmltYWwgRXZlbnRFbWl0dGVyIGludGVyZmFjZSB0aGF0IGlzIG1vbGRlZCBhZ2FpbnN0IHRoZSBOb2RlLmpzXG4gKiBFdmVudEVtaXR0ZXIgaW50ZXJmYWNlLlxuICpcbiAqIEBjb25zdHJ1Y3RvclxuICogQGFwaSBwdWJsaWNcbiAqL1xuZnVuY3Rpb24gRXZlbnRFbWl0dGVyKCkgeyAvKiBOb3RoaW5nIHRvIHNldCAqLyB9XG5cbi8qKlxuICogSG9sZHMgdGhlIGFzc2lnbmVkIEV2ZW50RW1pdHRlcnMgYnkgbmFtZS5cbiAqXG4gKiBAdHlwZSB7T2JqZWN0fVxuICogQHByaXZhdGVcbiAqL1xuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5fZXZlbnRzID0gdW5kZWZpbmVkO1xuXG4vKipcbiAqIFJldHVybiBhIGxpc3Qgb2YgYXNzaWduZWQgZXZlbnQgbGlzdGVuZXJzLlxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBldmVudCBUaGUgZXZlbnRzIHRoYXQgc2hvdWxkIGJlIGxpc3RlZC5cbiAqIEBwYXJhbSB7Qm9vbGVhbn0gZXhpc3RzIFdlIG9ubHkgbmVlZCB0byBrbm93IGlmIHRoZXJlIGFyZSBsaXN0ZW5lcnMuXG4gKiBAcmV0dXJucyB7QXJyYXl8Qm9vbGVhbn1cbiAqIEBhcGkgcHVibGljXG4gKi9cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUubGlzdGVuZXJzID0gZnVuY3Rpb24gbGlzdGVuZXJzKGV2ZW50LCBleGlzdHMpIHtcbiAgdmFyIGV2dCA9IHByZWZpeCA/IHByZWZpeCArIGV2ZW50IDogZXZlbnRcbiAgICAsIGF2YWlsYWJsZSA9IHRoaXMuX2V2ZW50cyAmJiB0aGlzLl9ldmVudHNbZXZ0XTtcblxuICBpZiAoZXhpc3RzKSByZXR1cm4gISFhdmFpbGFibGU7XG4gIGlmICghYXZhaWxhYmxlKSByZXR1cm4gW107XG4gIGlmIChhdmFpbGFibGUuZm4pIHJldHVybiBbYXZhaWxhYmxlLmZuXTtcblxuICBmb3IgKHZhciBpID0gMCwgbCA9IGF2YWlsYWJsZS5sZW5ndGgsIGVlID0gbmV3IEFycmF5KGwpOyBpIDwgbDsgaSsrKSB7XG4gICAgZWVbaV0gPSBhdmFpbGFibGVbaV0uZm47XG4gIH1cblxuICByZXR1cm4gZWU7XG59O1xuXG4vKipcbiAqIEVtaXQgYW4gZXZlbnQgdG8gYWxsIHJlZ2lzdGVyZWQgZXZlbnQgbGlzdGVuZXJzLlxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBldmVudCBUaGUgbmFtZSBvZiB0aGUgZXZlbnQuXG4gKiBAcmV0dXJucyB7Qm9vbGVhbn0gSW5kaWNhdGlvbiBpZiB3ZSd2ZSBlbWl0dGVkIGFuIGV2ZW50LlxuICogQGFwaSBwdWJsaWNcbiAqL1xuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5lbWl0ID0gZnVuY3Rpb24gZW1pdChldmVudCwgYTEsIGEyLCBhMywgYTQsIGE1KSB7XG4gIHZhciBldnQgPSBwcmVmaXggPyBwcmVmaXggKyBldmVudCA6IGV2ZW50O1xuXG4gIGlmICghdGhpcy5fZXZlbnRzIHx8ICF0aGlzLl9ldmVudHNbZXZ0XSkgcmV0dXJuIGZhbHNlO1xuXG4gIHZhciBsaXN0ZW5lcnMgPSB0aGlzLl9ldmVudHNbZXZ0XVxuICAgICwgbGVuID0gYXJndW1lbnRzLmxlbmd0aFxuICAgICwgYXJnc1xuICAgICwgaTtcblxuICBpZiAoJ2Z1bmN0aW9uJyA9PT0gdHlwZW9mIGxpc3RlbmVycy5mbikge1xuICAgIGlmIChsaXN0ZW5lcnMub25jZSkgdGhpcy5yZW1vdmVMaXN0ZW5lcihldmVudCwgbGlzdGVuZXJzLmZuLCB1bmRlZmluZWQsIHRydWUpO1xuXG4gICAgc3dpdGNoIChsZW4pIHtcbiAgICAgIGNhc2UgMTogcmV0dXJuIGxpc3RlbmVycy5mbi5jYWxsKGxpc3RlbmVycy5jb250ZXh0KSwgdHJ1ZTtcbiAgICAgIGNhc2UgMjogcmV0dXJuIGxpc3RlbmVycy5mbi5jYWxsKGxpc3RlbmVycy5jb250ZXh0LCBhMSksIHRydWU7XG4gICAgICBjYXNlIDM6IHJldHVybiBsaXN0ZW5lcnMuZm4uY2FsbChsaXN0ZW5lcnMuY29udGV4dCwgYTEsIGEyKSwgdHJ1ZTtcbiAgICAgIGNhc2UgNDogcmV0dXJuIGxpc3RlbmVycy5mbi5jYWxsKGxpc3RlbmVycy5jb250ZXh0LCBhMSwgYTIsIGEzKSwgdHJ1ZTtcbiAgICAgIGNhc2UgNTogcmV0dXJuIGxpc3RlbmVycy5mbi5jYWxsKGxpc3RlbmVycy5jb250ZXh0LCBhMSwgYTIsIGEzLCBhNCksIHRydWU7XG4gICAgICBjYXNlIDY6IHJldHVybiBsaXN0ZW5lcnMuZm4uY2FsbChsaXN0ZW5lcnMuY29udGV4dCwgYTEsIGEyLCBhMywgYTQsIGE1KSwgdHJ1ZTtcbiAgICB9XG5cbiAgICBmb3IgKGkgPSAxLCBhcmdzID0gbmV3IEFycmF5KGxlbiAtMSk7IGkgPCBsZW47IGkrKykge1xuICAgICAgYXJnc1tpIC0gMV0gPSBhcmd1bWVudHNbaV07XG4gICAgfVxuXG4gICAgbGlzdGVuZXJzLmZuLmFwcGx5KGxpc3RlbmVycy5jb250ZXh0LCBhcmdzKTtcbiAgfSBlbHNlIHtcbiAgICB2YXIgbGVuZ3RoID0gbGlzdGVuZXJzLmxlbmd0aFxuICAgICAgLCBqO1xuXG4gICAgZm9yIChpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAobGlzdGVuZXJzW2ldLm9uY2UpIHRoaXMucmVtb3ZlTGlzdGVuZXIoZXZlbnQsIGxpc3RlbmVyc1tpXS5mbiwgdW5kZWZpbmVkLCB0cnVlKTtcblxuICAgICAgc3dpdGNoIChsZW4pIHtcbiAgICAgICAgY2FzZSAxOiBsaXN0ZW5lcnNbaV0uZm4uY2FsbChsaXN0ZW5lcnNbaV0uY29udGV4dCk7IGJyZWFrO1xuICAgICAgICBjYXNlIDI6IGxpc3RlbmVyc1tpXS5mbi5jYWxsKGxpc3RlbmVyc1tpXS5jb250ZXh0LCBhMSk7IGJyZWFrO1xuICAgICAgICBjYXNlIDM6IGxpc3RlbmVyc1tpXS5mbi5jYWxsKGxpc3RlbmVyc1tpXS5jb250ZXh0LCBhMSwgYTIpOyBicmVhaztcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICBpZiAoIWFyZ3MpIGZvciAoaiA9IDEsIGFyZ3MgPSBuZXcgQXJyYXkobGVuIC0xKTsgaiA8IGxlbjsgaisrKSB7XG4gICAgICAgICAgICBhcmdzW2ogLSAxXSA9IGFyZ3VtZW50c1tqXTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBsaXN0ZW5lcnNbaV0uZm4uYXBwbHkobGlzdGVuZXJzW2ldLmNvbnRleHQsIGFyZ3MpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiB0cnVlO1xufTtcblxuLyoqXG4gKiBSZWdpc3RlciBhIG5ldyBFdmVudExpc3RlbmVyIGZvciB0aGUgZ2l2ZW4gZXZlbnQuXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IGV2ZW50IE5hbWUgb2YgdGhlIGV2ZW50LlxuICogQHBhcmFtIHtGdW5jdG9ufSBmbiBDYWxsYmFjayBmdW5jdGlvbi5cbiAqIEBwYXJhbSB7TWl4ZWR9IGNvbnRleHQgVGhlIGNvbnRleHQgb2YgdGhlIGZ1bmN0aW9uLlxuICogQGFwaSBwdWJsaWNcbiAqL1xuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5vbiA9IGZ1bmN0aW9uIG9uKGV2ZW50LCBmbiwgY29udGV4dCkge1xuICB2YXIgbGlzdGVuZXIgPSBuZXcgRUUoZm4sIGNvbnRleHQgfHwgdGhpcylcbiAgICAsIGV2dCA9IHByZWZpeCA/IHByZWZpeCArIGV2ZW50IDogZXZlbnQ7XG5cbiAgaWYgKCF0aGlzLl9ldmVudHMpIHRoaXMuX2V2ZW50cyA9IHByZWZpeCA/IHt9IDogT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgaWYgKCF0aGlzLl9ldmVudHNbZXZ0XSkgdGhpcy5fZXZlbnRzW2V2dF0gPSBsaXN0ZW5lcjtcbiAgZWxzZSB7XG4gICAgaWYgKCF0aGlzLl9ldmVudHNbZXZ0XS5mbikgdGhpcy5fZXZlbnRzW2V2dF0ucHVzaChsaXN0ZW5lcik7XG4gICAgZWxzZSB0aGlzLl9ldmVudHNbZXZ0XSA9IFtcbiAgICAgIHRoaXMuX2V2ZW50c1tldnRdLCBsaXN0ZW5lclxuICAgIF07XG4gIH1cblxuICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogQWRkIGFuIEV2ZW50TGlzdGVuZXIgdGhhdCdzIG9ubHkgY2FsbGVkIG9uY2UuXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IGV2ZW50IE5hbWUgb2YgdGhlIGV2ZW50LlxuICogQHBhcmFtIHtGdW5jdGlvbn0gZm4gQ2FsbGJhY2sgZnVuY3Rpb24uXG4gKiBAcGFyYW0ge01peGVkfSBjb250ZXh0IFRoZSBjb250ZXh0IG9mIHRoZSBmdW5jdGlvbi5cbiAqIEBhcGkgcHVibGljXG4gKi9cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUub25jZSA9IGZ1bmN0aW9uIG9uY2UoZXZlbnQsIGZuLCBjb250ZXh0KSB7XG4gIHZhciBsaXN0ZW5lciA9IG5ldyBFRShmbiwgY29udGV4dCB8fCB0aGlzLCB0cnVlKVxuICAgICwgZXZ0ID0gcHJlZml4ID8gcHJlZml4ICsgZXZlbnQgOiBldmVudDtcblxuICBpZiAoIXRoaXMuX2V2ZW50cykgdGhpcy5fZXZlbnRzID0gcHJlZml4ID8ge30gOiBPYmplY3QuY3JlYXRlKG51bGwpO1xuICBpZiAoIXRoaXMuX2V2ZW50c1tldnRdKSB0aGlzLl9ldmVudHNbZXZ0XSA9IGxpc3RlbmVyO1xuICBlbHNlIHtcbiAgICBpZiAoIXRoaXMuX2V2ZW50c1tldnRdLmZuKSB0aGlzLl9ldmVudHNbZXZ0XS5wdXNoKGxpc3RlbmVyKTtcbiAgICBlbHNlIHRoaXMuX2V2ZW50c1tldnRdID0gW1xuICAgICAgdGhpcy5fZXZlbnRzW2V2dF0sIGxpc3RlbmVyXG4gICAgXTtcbiAgfVxuXG4gIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBSZW1vdmUgZXZlbnQgbGlzdGVuZXJzLlxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBldmVudCBUaGUgZXZlbnQgd2Ugd2FudCB0byByZW1vdmUuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmbiBUaGUgbGlzdGVuZXIgdGhhdCB3ZSBuZWVkIHRvIGZpbmQuXG4gKiBAcGFyYW0ge01peGVkfSBjb250ZXh0IE9ubHkgcmVtb3ZlIGxpc3RlbmVycyBtYXRjaGluZyB0aGlzIGNvbnRleHQuXG4gKiBAcGFyYW0ge0Jvb2xlYW59IG9uY2UgT25seSByZW1vdmUgb25jZSBsaXN0ZW5lcnMuXG4gKiBAYXBpIHB1YmxpY1xuICovXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLnJlbW92ZUxpc3RlbmVyID0gZnVuY3Rpb24gcmVtb3ZlTGlzdGVuZXIoZXZlbnQsIGZuLCBjb250ZXh0LCBvbmNlKSB7XG4gIHZhciBldnQgPSBwcmVmaXggPyBwcmVmaXggKyBldmVudCA6IGV2ZW50O1xuXG4gIGlmICghdGhpcy5fZXZlbnRzIHx8ICF0aGlzLl9ldmVudHNbZXZ0XSkgcmV0dXJuIHRoaXM7XG5cbiAgdmFyIGxpc3RlbmVycyA9IHRoaXMuX2V2ZW50c1tldnRdXG4gICAgLCBldmVudHMgPSBbXTtcblxuICBpZiAoZm4pIHtcbiAgICBpZiAobGlzdGVuZXJzLmZuKSB7XG4gICAgICBpZiAoXG4gICAgICAgICAgIGxpc3RlbmVycy5mbiAhPT0gZm5cbiAgICAgICAgfHwgKG9uY2UgJiYgIWxpc3RlbmVycy5vbmNlKVxuICAgICAgICB8fCAoY29udGV4dCAmJiBsaXN0ZW5lcnMuY29udGV4dCAhPT0gY29udGV4dClcbiAgICAgICkge1xuICAgICAgICBldmVudHMucHVzaChsaXN0ZW5lcnMpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBmb3IgKHZhciBpID0gMCwgbGVuZ3RoID0gbGlzdGVuZXJzLmxlbmd0aDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICAgICBsaXN0ZW5lcnNbaV0uZm4gIT09IGZuXG4gICAgICAgICAgfHwgKG9uY2UgJiYgIWxpc3RlbmVyc1tpXS5vbmNlKVxuICAgICAgICAgIHx8IChjb250ZXh0ICYmIGxpc3RlbmVyc1tpXS5jb250ZXh0ICE9PSBjb250ZXh0KVxuICAgICAgICApIHtcbiAgICAgICAgICBldmVudHMucHVzaChsaXN0ZW5lcnNbaV0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLy9cbiAgLy8gUmVzZXQgdGhlIGFycmF5LCBvciByZW1vdmUgaXQgY29tcGxldGVseSBpZiB3ZSBoYXZlIG5vIG1vcmUgbGlzdGVuZXJzLlxuICAvL1xuICBpZiAoZXZlbnRzLmxlbmd0aCkge1xuICAgIHRoaXMuX2V2ZW50c1tldnRdID0gZXZlbnRzLmxlbmd0aCA9PT0gMSA/IGV2ZW50c1swXSA6IGV2ZW50cztcbiAgfSBlbHNlIHtcbiAgICBkZWxldGUgdGhpcy5fZXZlbnRzW2V2dF07XG4gIH1cblxuICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogUmVtb3ZlIGFsbCBsaXN0ZW5lcnMgb3Igb25seSB0aGUgbGlzdGVuZXJzIGZvciB0aGUgc3BlY2lmaWVkIGV2ZW50LlxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBldmVudCBUaGUgZXZlbnQgd2FudCB0byByZW1vdmUgYWxsIGxpc3RlbmVycyBmb3IuXG4gKiBAYXBpIHB1YmxpY1xuICovXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLnJlbW92ZUFsbExpc3RlbmVycyA9IGZ1bmN0aW9uIHJlbW92ZUFsbExpc3RlbmVycyhldmVudCkge1xuICBpZiAoIXRoaXMuX2V2ZW50cykgcmV0dXJuIHRoaXM7XG5cbiAgaWYgKGV2ZW50KSBkZWxldGUgdGhpcy5fZXZlbnRzW3ByZWZpeCA/IHByZWZpeCArIGV2ZW50IDogZXZlbnRdO1xuICBlbHNlIHRoaXMuX2V2ZW50cyA9IHByZWZpeCA/IHt9IDogT2JqZWN0LmNyZWF0ZShudWxsKTtcblxuICByZXR1cm4gdGhpcztcbn07XG5cbi8vXG4vLyBBbGlhcyBtZXRob2RzIG5hbWVzIGJlY2F1c2UgcGVvcGxlIHJvbGwgbGlrZSB0aGF0LlxuLy9cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUub2ZmID0gRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5yZW1vdmVMaXN0ZW5lcjtcbkV2ZW50RW1pdHRlci5wcm90b3R5cGUuYWRkTGlzdGVuZXIgPSBFdmVudEVtaXR0ZXIucHJvdG90eXBlLm9uO1xuXG4vL1xuLy8gVGhpcyBmdW5jdGlvbiBkb2Vzbid0IGFwcGx5IGFueW1vcmUuXG4vL1xuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5zZXRNYXhMaXN0ZW5lcnMgPSBmdW5jdGlvbiBzZXRNYXhMaXN0ZW5lcnMoKSB7XG4gIHJldHVybiB0aGlzO1xufTtcblxuLy9cbi8vIEV4cG9zZSB0aGUgcHJlZml4LlxuLy9cbkV2ZW50RW1pdHRlci5wcmVmaXhlZCA9IHByZWZpeDtcblxuLy9cbi8vIEV4cG9zZSB0aGUgbW9kdWxlLlxuLy9cbmlmICgndW5kZWZpbmVkJyAhPT0gdHlwZW9mIG1vZHVsZSkge1xuICBtb2R1bGUuZXhwb3J0cyA9IEV2ZW50RW1pdHRlcjtcbn1cbiIsIi8qIGVzbGludC1kaXNhYmxlIG5vLXVudXNlZC12YXJzICovXG4ndXNlIHN0cmljdCc7XG52YXIgaGFzT3duUHJvcGVydHkgPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O1xudmFyIHByb3BJc0VudW1lcmFibGUgPSBPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlO1xuXG5mdW5jdGlvbiB0b09iamVjdCh2YWwpIHtcblx0aWYgKHZhbCA9PT0gbnVsbCB8fCB2YWwgPT09IHVuZGVmaW5lZCkge1xuXHRcdHRocm93IG5ldyBUeXBlRXJyb3IoJ09iamVjdC5hc3NpZ24gY2Fubm90IGJlIGNhbGxlZCB3aXRoIG51bGwgb3IgdW5kZWZpbmVkJyk7XG5cdH1cblxuXHRyZXR1cm4gT2JqZWN0KHZhbCk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0LCBzb3VyY2UpIHtcblx0dmFyIGZyb207XG5cdHZhciB0byA9IHRvT2JqZWN0KHRhcmdldCk7XG5cdHZhciBzeW1ib2xzO1xuXG5cdGZvciAodmFyIHMgPSAxOyBzIDwgYXJndW1lbnRzLmxlbmd0aDsgcysrKSB7XG5cdFx0ZnJvbSA9IE9iamVjdChhcmd1bWVudHNbc10pO1xuXG5cdFx0Zm9yICh2YXIga2V5IGluIGZyb20pIHtcblx0XHRcdGlmIChoYXNPd25Qcm9wZXJ0eS5jYWxsKGZyb20sIGtleSkpIHtcblx0XHRcdFx0dG9ba2V5XSA9IGZyb21ba2V5XTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykge1xuXHRcdFx0c3ltYm9scyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZnJvbSk7XG5cdFx0XHRmb3IgKHZhciBpID0gMDsgaSA8IHN5bWJvbHMubGVuZ3RoOyBpKyspIHtcblx0XHRcdFx0aWYgKHByb3BJc0VudW1lcmFibGUuY2FsbChmcm9tLCBzeW1ib2xzW2ldKSkge1xuXHRcdFx0XHRcdHRvW3N5bWJvbHNbaV1dID0gZnJvbVtzeW1ib2xzW2ldXTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdHJldHVybiB0bztcbn07XG4iLCIvKiFcbiAqIGFzeW5jXG4gKiBodHRwczovL2dpdGh1Yi5jb20vY2FvbGFuL2FzeW5jXG4gKlxuICogQ29weXJpZ2h0IDIwMTAtMjAxNCBDYW9sYW4gTWNNYWhvblxuICogUmVsZWFzZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlXG4gKi9cbi8qanNoaW50IG9uZXZhcjogZmFsc2UsIGluZGVudDo0ICovXG4vKmdsb2JhbCBzZXRJbW1lZGlhdGU6IGZhbHNlLCBzZXRUaW1lb3V0OiBmYWxzZSwgY29uc29sZTogZmFsc2UgKi9cbihmdW5jdGlvbiAoKSB7XG5cbiAgICB2YXIgYXN5bmMgPSB7fTtcblxuICAgIC8vIGdsb2JhbCBvbiB0aGUgc2VydmVyLCB3aW5kb3cgaW4gdGhlIGJyb3dzZXJcbiAgICB2YXIgcm9vdCwgcHJldmlvdXNfYXN5bmM7XG5cbiAgICByb290ID0gdGhpcztcbiAgICBpZiAocm9vdCAhPSBudWxsKSB7XG4gICAgICBwcmV2aW91c19hc3luYyA9IHJvb3QuYXN5bmM7XG4gICAgfVxuXG4gICAgYXN5bmMubm9Db25mbGljdCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcm9vdC5hc3luYyA9IHByZXZpb3VzX2FzeW5jO1xuICAgICAgICByZXR1cm4gYXN5bmM7XG4gICAgfTtcblxuICAgIGZ1bmN0aW9uIG9ubHlfb25jZShmbikge1xuICAgICAgICB2YXIgY2FsbGVkID0gZmFsc2U7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIGlmIChjYWxsZWQpIHRocm93IG5ldyBFcnJvcihcIkNhbGxiYWNrIHdhcyBhbHJlYWR5IGNhbGxlZC5cIik7XG4gICAgICAgICAgICBjYWxsZWQgPSB0cnVlO1xuICAgICAgICAgICAgZm4uYXBwbHkocm9vdCwgYXJndW1lbnRzKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vLy8gY3Jvc3MtYnJvd3NlciBjb21wYXRpYmxpdHkgZnVuY3Rpb25zIC8vLy9cblxuICAgIHZhciBfdG9TdHJpbmcgPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nO1xuXG4gICAgdmFyIF9pc0FycmF5ID0gQXJyYXkuaXNBcnJheSB8fCBmdW5jdGlvbiAob2JqKSB7XG4gICAgICAgIHJldHVybiBfdG9TdHJpbmcuY2FsbChvYmopID09PSAnW29iamVjdCBBcnJheV0nO1xuICAgIH07XG5cbiAgICB2YXIgX2VhY2ggPSBmdW5jdGlvbiAoYXJyLCBpdGVyYXRvcikge1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFyci5sZW5ndGg7IGkgKz0gMSkge1xuICAgICAgICAgICAgaXRlcmF0b3IoYXJyW2ldLCBpLCBhcnIpO1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIHZhciBfbWFwID0gZnVuY3Rpb24gKGFyciwgaXRlcmF0b3IpIHtcbiAgICAgICAgaWYgKGFyci5tYXApIHtcbiAgICAgICAgICAgIHJldHVybiBhcnIubWFwKGl0ZXJhdG9yKTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgcmVzdWx0cyA9IFtdO1xuICAgICAgICBfZWFjaChhcnIsIGZ1bmN0aW9uICh4LCBpLCBhKSB7XG4gICAgICAgICAgICByZXN1bHRzLnB1c2goaXRlcmF0b3IoeCwgaSwgYSkpO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdHM7XG4gICAgfTtcblxuICAgIHZhciBfcmVkdWNlID0gZnVuY3Rpb24gKGFyciwgaXRlcmF0b3IsIG1lbW8pIHtcbiAgICAgICAgaWYgKGFyci5yZWR1Y2UpIHtcbiAgICAgICAgICAgIHJldHVybiBhcnIucmVkdWNlKGl0ZXJhdG9yLCBtZW1vKTtcbiAgICAgICAgfVxuICAgICAgICBfZWFjaChhcnIsIGZ1bmN0aW9uICh4LCBpLCBhKSB7XG4gICAgICAgICAgICBtZW1vID0gaXRlcmF0b3IobWVtbywgeCwgaSwgYSk7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gbWVtbztcbiAgICB9O1xuXG4gICAgdmFyIF9rZXlzID0gZnVuY3Rpb24gKG9iaikge1xuICAgICAgICBpZiAoT2JqZWN0LmtleXMpIHtcbiAgICAgICAgICAgIHJldHVybiBPYmplY3Qua2V5cyhvYmopO1xuICAgICAgICB9XG4gICAgICAgIHZhciBrZXlzID0gW107XG4gICAgICAgIGZvciAodmFyIGsgaW4gb2JqKSB7XG4gICAgICAgICAgICBpZiAob2JqLmhhc093blByb3BlcnR5KGspKSB7XG4gICAgICAgICAgICAgICAga2V5cy5wdXNoKGspO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBrZXlzO1xuICAgIH07XG5cbiAgICAvLy8vIGV4cG9ydGVkIGFzeW5jIG1vZHVsZSBmdW5jdGlvbnMgLy8vL1xuXG4gICAgLy8vLyBuZXh0VGljayBpbXBsZW1lbnRhdGlvbiB3aXRoIGJyb3dzZXItY29tcGF0aWJsZSBmYWxsYmFjayAvLy8vXG4gICAgaWYgKHR5cGVvZiBwcm9jZXNzID09PSAndW5kZWZpbmVkJyB8fCAhKHByb2Nlc3MubmV4dFRpY2spKSB7XG4gICAgICAgIGlmICh0eXBlb2Ygc2V0SW1tZWRpYXRlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICBhc3luYy5uZXh0VGljayA9IGZ1bmN0aW9uIChmbikge1xuICAgICAgICAgICAgICAgIC8vIG5vdCBhIGRpcmVjdCBhbGlhcyBmb3IgSUUxMCBjb21wYXRpYmlsaXR5XG4gICAgICAgICAgICAgICAgc2V0SW1tZWRpYXRlKGZuKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBhc3luYy5zZXRJbW1lZGlhdGUgPSBhc3luYy5uZXh0VGljaztcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGFzeW5jLm5leHRUaWNrID0gZnVuY3Rpb24gKGZuKSB7XG4gICAgICAgICAgICAgICAgc2V0VGltZW91dChmbiwgMCk7XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgYXN5bmMuc2V0SW1tZWRpYXRlID0gYXN5bmMubmV4dFRpY2s7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIGFzeW5jLm5leHRUaWNrID0gcHJvY2Vzcy5uZXh0VGljaztcbiAgICAgICAgaWYgKHR5cGVvZiBzZXRJbW1lZGlhdGUgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICBhc3luYy5zZXRJbW1lZGlhdGUgPSBmdW5jdGlvbiAoZm4pIHtcbiAgICAgICAgICAgICAgLy8gbm90IGEgZGlyZWN0IGFsaWFzIGZvciBJRTEwIGNvbXBhdGliaWxpdHlcbiAgICAgICAgICAgICAgc2V0SW1tZWRpYXRlKGZuKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBhc3luYy5zZXRJbW1lZGlhdGUgPSBhc3luYy5uZXh0VGljaztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGFzeW5jLmVhY2ggPSBmdW5jdGlvbiAoYXJyLCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgY2FsbGJhY2sgPSBjYWxsYmFjayB8fCBmdW5jdGlvbiAoKSB7fTtcbiAgICAgICAgaWYgKCFhcnIubGVuZ3RoKSB7XG4gICAgICAgICAgICByZXR1cm4gY2FsbGJhY2soKTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgY29tcGxldGVkID0gMDtcbiAgICAgICAgX2VhY2goYXJyLCBmdW5jdGlvbiAoeCkge1xuICAgICAgICAgICAgaXRlcmF0b3IoeCwgb25seV9vbmNlKGRvbmUpICk7XG4gICAgICAgIH0pO1xuICAgICAgICBmdW5jdGlvbiBkb25lKGVycikge1xuICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgICAgY2FsbGJhY2sgPSBmdW5jdGlvbiAoKSB7fTtcbiAgICAgICAgICB9XG4gICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgIGNvbXBsZXRlZCArPSAxO1xuICAgICAgICAgICAgICBpZiAoY29tcGxldGVkID49IGFyci5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9O1xuICAgIGFzeW5jLmZvckVhY2ggPSBhc3luYy5lYWNoO1xuXG4gICAgYXN5bmMuZWFjaFNlcmllcyA9IGZ1bmN0aW9uIChhcnIsIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICBjYWxsYmFjayA9IGNhbGxiYWNrIHx8IGZ1bmN0aW9uICgpIHt9O1xuICAgICAgICBpZiAoIWFyci5sZW5ndGgpIHtcbiAgICAgICAgICAgIHJldHVybiBjYWxsYmFjaygpO1xuICAgICAgICB9XG4gICAgICAgIHZhciBjb21wbGV0ZWQgPSAwO1xuICAgICAgICB2YXIgaXRlcmF0ZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGl0ZXJhdG9yKGFycltjb21wbGV0ZWRdLCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayA9IGZ1bmN0aW9uICgpIHt9O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgY29tcGxldGVkICs9IDE7XG4gICAgICAgICAgICAgICAgICAgIGlmIChjb21wbGV0ZWQgPj0gYXJyLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGl0ZXJhdGUoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9O1xuICAgICAgICBpdGVyYXRlKCk7XG4gICAgfTtcbiAgICBhc3luYy5mb3JFYWNoU2VyaWVzID0gYXN5bmMuZWFjaFNlcmllcztcblxuICAgIGFzeW5jLmVhY2hMaW1pdCA9IGZ1bmN0aW9uIChhcnIsIGxpbWl0LCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgdmFyIGZuID0gX2VhY2hMaW1pdChsaW1pdCk7XG4gICAgICAgIGZuLmFwcGx5KG51bGwsIFthcnIsIGl0ZXJhdG9yLCBjYWxsYmFja10pO1xuICAgIH07XG4gICAgYXN5bmMuZm9yRWFjaExpbWl0ID0gYXN5bmMuZWFjaExpbWl0O1xuXG4gICAgdmFyIF9lYWNoTGltaXQgPSBmdW5jdGlvbiAobGltaXQpIHtcblxuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKGFyciwgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICBjYWxsYmFjayA9IGNhbGxiYWNrIHx8IGZ1bmN0aW9uICgpIHt9O1xuICAgICAgICAgICAgaWYgKCFhcnIubGVuZ3RoIHx8IGxpbWl0IDw9IDApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gY2FsbGJhY2soKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHZhciBjb21wbGV0ZWQgPSAwO1xuICAgICAgICAgICAgdmFyIHN0YXJ0ZWQgPSAwO1xuICAgICAgICAgICAgdmFyIHJ1bm5pbmcgPSAwO1xuXG4gICAgICAgICAgICAoZnVuY3Rpb24gcmVwbGVuaXNoICgpIHtcbiAgICAgICAgICAgICAgICBpZiAoY29tcGxldGVkID49IGFyci5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKCk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgd2hpbGUgKHJ1bm5pbmcgPCBsaW1pdCAmJiBzdGFydGVkIDwgYXJyLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICBzdGFydGVkICs9IDE7XG4gICAgICAgICAgICAgICAgICAgIHJ1bm5pbmcgKz0gMTtcbiAgICAgICAgICAgICAgICAgICAgaXRlcmF0b3IoYXJyW3N0YXJ0ZWQgLSAxXSwgZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2sgPSBmdW5jdGlvbiAoKSB7fTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBsZXRlZCArPSAxO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJ1bm5pbmcgLT0gMTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY29tcGxldGVkID49IGFyci5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcGxlbmlzaCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSkoKTtcbiAgICAgICAgfTtcbiAgICB9O1xuXG5cbiAgICB2YXIgZG9QYXJhbGxlbCA9IGZ1bmN0aW9uIChmbikge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIGFyZ3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMpO1xuICAgICAgICAgICAgcmV0dXJuIGZuLmFwcGx5KG51bGwsIFthc3luYy5lYWNoXS5jb25jYXQoYXJncykpO1xuICAgICAgICB9O1xuICAgIH07XG4gICAgdmFyIGRvUGFyYWxsZWxMaW1pdCA9IGZ1bmN0aW9uKGxpbWl0LCBmbikge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIGFyZ3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMpO1xuICAgICAgICAgICAgcmV0dXJuIGZuLmFwcGx5KG51bGwsIFtfZWFjaExpbWl0KGxpbWl0KV0uY29uY2F0KGFyZ3MpKTtcbiAgICAgICAgfTtcbiAgICB9O1xuICAgIHZhciBkb1NlcmllcyA9IGZ1bmN0aW9uIChmbikge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIGFyZ3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMpO1xuICAgICAgICAgICAgcmV0dXJuIGZuLmFwcGx5KG51bGwsIFthc3luYy5lYWNoU2VyaWVzXS5jb25jYXQoYXJncykpO1xuICAgICAgICB9O1xuICAgIH07XG5cblxuICAgIHZhciBfYXN5bmNNYXAgPSBmdW5jdGlvbiAoZWFjaGZuLCBhcnIsIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICBhcnIgPSBfbWFwKGFyciwgZnVuY3Rpb24gKHgsIGkpIHtcbiAgICAgICAgICAgIHJldHVybiB7aW5kZXg6IGksIHZhbHVlOiB4fTtcbiAgICAgICAgfSk7XG4gICAgICAgIGlmICghY2FsbGJhY2spIHtcbiAgICAgICAgICAgIGVhY2hmbihhcnIsIGZ1bmN0aW9uICh4LCBjYWxsYmFjaykge1xuICAgICAgICAgICAgICAgIGl0ZXJhdG9yKHgudmFsdWUsIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdmFyIHJlc3VsdHMgPSBbXTtcbiAgICAgICAgICAgIGVhY2hmbihhcnIsIGZ1bmN0aW9uICh4LCBjYWxsYmFjaykge1xuICAgICAgICAgICAgICAgIGl0ZXJhdG9yKHgudmFsdWUsIGZ1bmN0aW9uIChlcnIsIHYpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0c1t4LmluZGV4XSA9IHY7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9LCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2soZXJyLCByZXN1bHRzKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBhc3luYy5tYXAgPSBkb1BhcmFsbGVsKF9hc3luY01hcCk7XG4gICAgYXN5bmMubWFwU2VyaWVzID0gZG9TZXJpZXMoX2FzeW5jTWFwKTtcbiAgICBhc3luYy5tYXBMaW1pdCA9IGZ1bmN0aW9uIChhcnIsIGxpbWl0LCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgcmV0dXJuIF9tYXBMaW1pdChsaW1pdCkoYXJyLCBpdGVyYXRvciwgY2FsbGJhY2spO1xuICAgIH07XG5cbiAgICB2YXIgX21hcExpbWl0ID0gZnVuY3Rpb24obGltaXQpIHtcbiAgICAgICAgcmV0dXJuIGRvUGFyYWxsZWxMaW1pdChsaW1pdCwgX2FzeW5jTWFwKTtcbiAgICB9O1xuXG4gICAgLy8gcmVkdWNlIG9ubHkgaGFzIGEgc2VyaWVzIHZlcnNpb24sIGFzIGRvaW5nIHJlZHVjZSBpbiBwYXJhbGxlbCB3b24ndFxuICAgIC8vIHdvcmsgaW4gbWFueSBzaXR1YXRpb25zLlxuICAgIGFzeW5jLnJlZHVjZSA9IGZ1bmN0aW9uIChhcnIsIG1lbW8sIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICBhc3luYy5lYWNoU2VyaWVzKGFyciwgZnVuY3Rpb24gKHgsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICBpdGVyYXRvcihtZW1vLCB4LCBmdW5jdGlvbiAoZXJyLCB2KSB7XG4gICAgICAgICAgICAgICAgbWVtbyA9IHY7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICBjYWxsYmFjayhlcnIsIG1lbW8pO1xuICAgICAgICB9KTtcbiAgICB9O1xuICAgIC8vIGluamVjdCBhbGlhc1xuICAgIGFzeW5jLmluamVjdCA9IGFzeW5jLnJlZHVjZTtcbiAgICAvLyBmb2xkbCBhbGlhc1xuICAgIGFzeW5jLmZvbGRsID0gYXN5bmMucmVkdWNlO1xuXG4gICAgYXN5bmMucmVkdWNlUmlnaHQgPSBmdW5jdGlvbiAoYXJyLCBtZW1vLCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgdmFyIHJldmVyc2VkID0gX21hcChhcnIsIGZ1bmN0aW9uICh4KSB7XG4gICAgICAgICAgICByZXR1cm4geDtcbiAgICAgICAgfSkucmV2ZXJzZSgpO1xuICAgICAgICBhc3luYy5yZWR1Y2UocmV2ZXJzZWQsIG1lbW8sIGl0ZXJhdG9yLCBjYWxsYmFjayk7XG4gICAgfTtcbiAgICAvLyBmb2xkciBhbGlhc1xuICAgIGFzeW5jLmZvbGRyID0gYXN5bmMucmVkdWNlUmlnaHQ7XG5cbiAgICB2YXIgX2ZpbHRlciA9IGZ1bmN0aW9uIChlYWNoZm4sIGFyciwgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgIHZhciByZXN1bHRzID0gW107XG4gICAgICAgIGFyciA9IF9tYXAoYXJyLCBmdW5jdGlvbiAoeCwgaSkge1xuICAgICAgICAgICAgcmV0dXJuIHtpbmRleDogaSwgdmFsdWU6IHh9O1xuICAgICAgICB9KTtcbiAgICAgICAgZWFjaGZuKGFyciwgZnVuY3Rpb24gKHgsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICBpdGVyYXRvcih4LnZhbHVlLCBmdW5jdGlvbiAodikge1xuICAgICAgICAgICAgICAgIGlmICh2KSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdHMucHVzaCh4KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2FsbGJhY2soKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICBjYWxsYmFjayhfbWFwKHJlc3VsdHMuc29ydChmdW5jdGlvbiAoYSwgYikge1xuICAgICAgICAgICAgICAgIHJldHVybiBhLmluZGV4IC0gYi5pbmRleDtcbiAgICAgICAgICAgIH0pLCBmdW5jdGlvbiAoeCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB4LnZhbHVlO1xuICAgICAgICAgICAgfSkpO1xuICAgICAgICB9KTtcbiAgICB9O1xuICAgIGFzeW5jLmZpbHRlciA9IGRvUGFyYWxsZWwoX2ZpbHRlcik7XG4gICAgYXN5bmMuZmlsdGVyU2VyaWVzID0gZG9TZXJpZXMoX2ZpbHRlcik7XG4gICAgLy8gc2VsZWN0IGFsaWFzXG4gICAgYXN5bmMuc2VsZWN0ID0gYXN5bmMuZmlsdGVyO1xuICAgIGFzeW5jLnNlbGVjdFNlcmllcyA9IGFzeW5jLmZpbHRlclNlcmllcztcblxuICAgIHZhciBfcmVqZWN0ID0gZnVuY3Rpb24gKGVhY2hmbiwgYXJyLCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgdmFyIHJlc3VsdHMgPSBbXTtcbiAgICAgICAgYXJyID0gX21hcChhcnIsIGZ1bmN0aW9uICh4LCBpKSB7XG4gICAgICAgICAgICByZXR1cm4ge2luZGV4OiBpLCB2YWx1ZTogeH07XG4gICAgICAgIH0pO1xuICAgICAgICBlYWNoZm4oYXJyLCBmdW5jdGlvbiAoeCwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIGl0ZXJhdG9yKHgudmFsdWUsIGZ1bmN0aW9uICh2KSB7XG4gICAgICAgICAgICAgICAgaWYgKCF2KSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdHMucHVzaCh4KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2FsbGJhY2soKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICBjYWxsYmFjayhfbWFwKHJlc3VsdHMuc29ydChmdW5jdGlvbiAoYSwgYikge1xuICAgICAgICAgICAgICAgIHJldHVybiBhLmluZGV4IC0gYi5pbmRleDtcbiAgICAgICAgICAgIH0pLCBmdW5jdGlvbiAoeCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB4LnZhbHVlO1xuICAgICAgICAgICAgfSkpO1xuICAgICAgICB9KTtcbiAgICB9O1xuICAgIGFzeW5jLnJlamVjdCA9IGRvUGFyYWxsZWwoX3JlamVjdCk7XG4gICAgYXN5bmMucmVqZWN0U2VyaWVzID0gZG9TZXJpZXMoX3JlamVjdCk7XG5cbiAgICB2YXIgX2RldGVjdCA9IGZ1bmN0aW9uIChlYWNoZm4sIGFyciwgaXRlcmF0b3IsIG1haW5fY2FsbGJhY2spIHtcbiAgICAgICAgZWFjaGZuKGFyciwgZnVuY3Rpb24gKHgsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICBpdGVyYXRvcih4LCBmdW5jdGlvbiAocmVzdWx0KSB7XG4gICAgICAgICAgICAgICAgaWYgKHJlc3VsdCkge1xuICAgICAgICAgICAgICAgICAgICBtYWluX2NhbGxiYWNrKHgpO1xuICAgICAgICAgICAgICAgICAgICBtYWluX2NhbGxiYWNrID0gZnVuY3Rpb24gKCkge307XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICBtYWluX2NhbGxiYWNrKCk7XG4gICAgICAgIH0pO1xuICAgIH07XG4gICAgYXN5bmMuZGV0ZWN0ID0gZG9QYXJhbGxlbChfZGV0ZWN0KTtcbiAgICBhc3luYy5kZXRlY3RTZXJpZXMgPSBkb1NlcmllcyhfZGV0ZWN0KTtcblxuICAgIGFzeW5jLnNvbWUgPSBmdW5jdGlvbiAoYXJyLCBpdGVyYXRvciwgbWFpbl9jYWxsYmFjaykge1xuICAgICAgICBhc3luYy5lYWNoKGFyciwgZnVuY3Rpb24gKHgsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICBpdGVyYXRvcih4LCBmdW5jdGlvbiAodikge1xuICAgICAgICAgICAgICAgIGlmICh2KSB7XG4gICAgICAgICAgICAgICAgICAgIG1haW5fY2FsbGJhY2sodHJ1ZSk7XG4gICAgICAgICAgICAgICAgICAgIG1haW5fY2FsbGJhY2sgPSBmdW5jdGlvbiAoKSB7fTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2FsbGJhY2soKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICBtYWluX2NhbGxiYWNrKGZhbHNlKTtcbiAgICAgICAgfSk7XG4gICAgfTtcbiAgICAvLyBhbnkgYWxpYXNcbiAgICBhc3luYy5hbnkgPSBhc3luYy5zb21lO1xuXG4gICAgYXN5bmMuZXZlcnkgPSBmdW5jdGlvbiAoYXJyLCBpdGVyYXRvciwgbWFpbl9jYWxsYmFjaykge1xuICAgICAgICBhc3luYy5lYWNoKGFyciwgZnVuY3Rpb24gKHgsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICBpdGVyYXRvcih4LCBmdW5jdGlvbiAodikge1xuICAgICAgICAgICAgICAgIGlmICghdikge1xuICAgICAgICAgICAgICAgICAgICBtYWluX2NhbGxiYWNrKGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgICAgbWFpbl9jYWxsYmFjayA9IGZ1bmN0aW9uICgpIHt9O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgIG1haW5fY2FsbGJhY2sodHJ1ZSk7XG4gICAgICAgIH0pO1xuICAgIH07XG4gICAgLy8gYWxsIGFsaWFzXG4gICAgYXN5bmMuYWxsID0gYXN5bmMuZXZlcnk7XG5cbiAgICBhc3luYy5zb3J0QnkgPSBmdW5jdGlvbiAoYXJyLCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgYXN5bmMubWFwKGFyciwgZnVuY3Rpb24gKHgsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICBpdGVyYXRvcih4LCBmdW5jdGlvbiAoZXJyLCBjcml0ZXJpYSkge1xuICAgICAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKG51bGwsIHt2YWx1ZTogeCwgY3JpdGVyaWE6IGNyaXRlcmlhfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sIGZ1bmN0aW9uIChlcnIsIHJlc3VsdHMpIHtcbiAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHZhciBmbiA9IGZ1bmN0aW9uIChsZWZ0LCByaWdodCkge1xuICAgICAgICAgICAgICAgICAgICB2YXIgYSA9IGxlZnQuY3JpdGVyaWEsIGIgPSByaWdodC5jcml0ZXJpYTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGEgPCBiID8gLTEgOiBhID4gYiA/IDEgOiAwO1xuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgY2FsbGJhY2sobnVsbCwgX21hcChyZXN1bHRzLnNvcnQoZm4pLCBmdW5jdGlvbiAoeCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4geC52YWx1ZTtcbiAgICAgICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH07XG5cbiAgICBhc3luYy5hdXRvID0gZnVuY3Rpb24gKHRhc2tzLCBjYWxsYmFjaykge1xuICAgICAgICBjYWxsYmFjayA9IGNhbGxiYWNrIHx8IGZ1bmN0aW9uICgpIHt9O1xuICAgICAgICB2YXIga2V5cyA9IF9rZXlzKHRhc2tzKTtcbiAgICAgICAgdmFyIHJlbWFpbmluZ1Rhc2tzID0ga2V5cy5sZW5ndGhcbiAgICAgICAgaWYgKCFyZW1haW5pbmdUYXNrcykge1xuICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKCk7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgcmVzdWx0cyA9IHt9O1xuXG4gICAgICAgIHZhciBsaXN0ZW5lcnMgPSBbXTtcbiAgICAgICAgdmFyIGFkZExpc3RlbmVyID0gZnVuY3Rpb24gKGZuKSB7XG4gICAgICAgICAgICBsaXN0ZW5lcnMudW5zaGlmdChmbik7XG4gICAgICAgIH07XG4gICAgICAgIHZhciByZW1vdmVMaXN0ZW5lciA9IGZ1bmN0aW9uIChmbikge1xuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsaXN0ZW5lcnMubGVuZ3RoOyBpICs9IDEpIHtcbiAgICAgICAgICAgICAgICBpZiAobGlzdGVuZXJzW2ldID09PSBmbikge1xuICAgICAgICAgICAgICAgICAgICBsaXN0ZW5lcnMuc3BsaWNlKGksIDEpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICB2YXIgdGFza0NvbXBsZXRlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmVtYWluaW5nVGFza3MtLVxuICAgICAgICAgICAgX2VhY2gobGlzdGVuZXJzLnNsaWNlKDApLCBmdW5jdGlvbiAoZm4pIHtcbiAgICAgICAgICAgICAgICBmbigpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH07XG5cbiAgICAgICAgYWRkTGlzdGVuZXIoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgaWYgKCFyZW1haW5pbmdUYXNrcykge1xuICAgICAgICAgICAgICAgIHZhciB0aGVDYWxsYmFjayA9IGNhbGxiYWNrO1xuICAgICAgICAgICAgICAgIC8vIHByZXZlbnQgZmluYWwgY2FsbGJhY2sgZnJvbSBjYWxsaW5nIGl0c2VsZiBpZiBpdCBlcnJvcnNcbiAgICAgICAgICAgICAgICBjYWxsYmFjayA9IGZ1bmN0aW9uICgpIHt9O1xuXG4gICAgICAgICAgICAgICAgdGhlQ2FsbGJhY2sobnVsbCwgcmVzdWx0cyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIF9lYWNoKGtleXMsIGZ1bmN0aW9uIChrKSB7XG4gICAgICAgICAgICB2YXIgdGFzayA9IF9pc0FycmF5KHRhc2tzW2tdKSA/IHRhc2tzW2tdOiBbdGFza3Nba11dO1xuICAgICAgICAgICAgdmFyIHRhc2tDYWxsYmFjayA9IGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgICAgICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMSk7XG4gICAgICAgICAgICAgICAgaWYgKGFyZ3MubGVuZ3RoIDw9IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgYXJncyA9IGFyZ3NbMF07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHNhZmVSZXN1bHRzID0ge307XG4gICAgICAgICAgICAgICAgICAgIF9lYWNoKF9rZXlzKHJlc3VsdHMpLCBmdW5jdGlvbihya2V5KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzYWZlUmVzdWx0c1tya2V5XSA9IHJlc3VsdHNbcmtleV07XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICBzYWZlUmVzdWx0c1trXSA9IGFyZ3M7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKGVyciwgc2FmZVJlc3VsdHMpO1xuICAgICAgICAgICAgICAgICAgICAvLyBzdG9wIHN1YnNlcXVlbnQgZXJyb3JzIGhpdHRpbmcgY2FsbGJhY2sgbXVsdGlwbGUgdGltZXNcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2sgPSBmdW5jdGlvbiAoKSB7fTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdHNba10gPSBhcmdzO1xuICAgICAgICAgICAgICAgICAgICBhc3luYy5zZXRJbW1lZGlhdGUodGFza0NvbXBsZXRlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgdmFyIHJlcXVpcmVzID0gdGFzay5zbGljZSgwLCBNYXRoLmFicyh0YXNrLmxlbmd0aCAtIDEpKSB8fCBbXTtcbiAgICAgICAgICAgIHZhciByZWFkeSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gX3JlZHVjZShyZXF1aXJlcywgZnVuY3Rpb24gKGEsIHgpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChhICYmIHJlc3VsdHMuaGFzT3duUHJvcGVydHkoeCkpO1xuICAgICAgICAgICAgICAgIH0sIHRydWUpICYmICFyZXN1bHRzLmhhc093blByb3BlcnR5KGspO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGlmIChyZWFkeSgpKSB7XG4gICAgICAgICAgICAgICAgdGFza1t0YXNrLmxlbmd0aCAtIDFdKHRhc2tDYWxsYmFjaywgcmVzdWx0cyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICB2YXIgbGlzdGVuZXIgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChyZWFkeSgpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZW1vdmVMaXN0ZW5lcihsaXN0ZW5lcik7XG4gICAgICAgICAgICAgICAgICAgICAgICB0YXNrW3Rhc2subGVuZ3RoIC0gMV0odGFza0NhbGxiYWNrLCByZXN1bHRzKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgYWRkTGlzdGVuZXIobGlzdGVuZXIpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9O1xuXG4gICAgYXN5bmMucmV0cnkgPSBmdW5jdGlvbih0aW1lcywgdGFzaywgY2FsbGJhY2spIHtcbiAgICAgICAgdmFyIERFRkFVTFRfVElNRVMgPSA1O1xuICAgICAgICB2YXIgYXR0ZW1wdHMgPSBbXTtcbiAgICAgICAgLy8gVXNlIGRlZmF1bHRzIGlmIHRpbWVzIG5vdCBwYXNzZWRcbiAgICAgICAgaWYgKHR5cGVvZiB0aW1lcyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgY2FsbGJhY2sgPSB0YXNrO1xuICAgICAgICAgICAgdGFzayA9IHRpbWVzO1xuICAgICAgICAgICAgdGltZXMgPSBERUZBVUxUX1RJTUVTO1xuICAgICAgICB9XG4gICAgICAgIC8vIE1ha2Ugc3VyZSB0aW1lcyBpcyBhIG51bWJlclxuICAgICAgICB0aW1lcyA9IHBhcnNlSW50KHRpbWVzLCAxMCkgfHwgREVGQVVMVF9USU1FUztcbiAgICAgICAgdmFyIHdyYXBwZWRUYXNrID0gZnVuY3Rpb24od3JhcHBlZENhbGxiYWNrLCB3cmFwcGVkUmVzdWx0cykge1xuICAgICAgICAgICAgdmFyIHJldHJ5QXR0ZW1wdCA9IGZ1bmN0aW9uKHRhc2ssIGZpbmFsQXR0ZW1wdCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbihzZXJpZXNDYWxsYmFjaykge1xuICAgICAgICAgICAgICAgICAgICB0YXNrKGZ1bmN0aW9uKGVyciwgcmVzdWx0KXtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlcmllc0NhbGxiYWNrKCFlcnIgfHwgZmluYWxBdHRlbXB0LCB7ZXJyOiBlcnIsIHJlc3VsdDogcmVzdWx0fSk7XG4gICAgICAgICAgICAgICAgICAgIH0sIHdyYXBwZWRSZXN1bHRzKTtcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIHdoaWxlICh0aW1lcykge1xuICAgICAgICAgICAgICAgIGF0dGVtcHRzLnB1c2gocmV0cnlBdHRlbXB0KHRhc2ssICEodGltZXMtPTEpKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBhc3luYy5zZXJpZXMoYXR0ZW1wdHMsIGZ1bmN0aW9uKGRvbmUsIGRhdGEpe1xuICAgICAgICAgICAgICAgIGRhdGEgPSBkYXRhW2RhdGEubGVuZ3RoIC0gMV07XG4gICAgICAgICAgICAgICAgKHdyYXBwZWRDYWxsYmFjayB8fCBjYWxsYmFjaykoZGF0YS5lcnIsIGRhdGEucmVzdWx0KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIC8vIElmIGEgY2FsbGJhY2sgaXMgcGFzc2VkLCBydW4gdGhpcyBhcyBhIGNvbnRyb2xsIGZsb3dcbiAgICAgICAgcmV0dXJuIGNhbGxiYWNrID8gd3JhcHBlZFRhc2soKSA6IHdyYXBwZWRUYXNrXG4gICAgfTtcblxuICAgIGFzeW5jLndhdGVyZmFsbCA9IGZ1bmN0aW9uICh0YXNrcywgY2FsbGJhY2spIHtcbiAgICAgICAgY2FsbGJhY2sgPSBjYWxsYmFjayB8fCBmdW5jdGlvbiAoKSB7fTtcbiAgICAgICAgaWYgKCFfaXNBcnJheSh0YXNrcykpIHtcbiAgICAgICAgICB2YXIgZXJyID0gbmV3IEVycm9yKCdGaXJzdCBhcmd1bWVudCB0byB3YXRlcmZhbGwgbXVzdCBiZSBhbiBhcnJheSBvZiBmdW5jdGlvbnMnKTtcbiAgICAgICAgICByZXR1cm4gY2FsbGJhY2soZXJyKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIXRhc2tzLmxlbmd0aCkge1xuICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKCk7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIHdyYXBJdGVyYXRvciA9IGZ1bmN0aW9uIChpdGVyYXRvcikge1xuICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrID0gZnVuY3Rpb24gKCkge307XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMSk7XG4gICAgICAgICAgICAgICAgICAgIHZhciBuZXh0ID0gaXRlcmF0b3IubmV4dCgpO1xuICAgICAgICAgICAgICAgICAgICBpZiAobmV4dCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgYXJncy5wdXNoKHdyYXBJdGVyYXRvcihuZXh0KSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhcmdzLnB1c2goY2FsbGJhY2spO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGFzeW5jLnNldEltbWVkaWF0ZShmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpdGVyYXRvci5hcHBseShudWxsLCBhcmdzKTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfTtcbiAgICAgICAgfTtcbiAgICAgICAgd3JhcEl0ZXJhdG9yKGFzeW5jLml0ZXJhdG9yKHRhc2tzKSkoKTtcbiAgICB9O1xuXG4gICAgdmFyIF9wYXJhbGxlbCA9IGZ1bmN0aW9uKGVhY2hmbiwgdGFza3MsIGNhbGxiYWNrKSB7XG4gICAgICAgIGNhbGxiYWNrID0gY2FsbGJhY2sgfHwgZnVuY3Rpb24gKCkge307XG4gICAgICAgIGlmIChfaXNBcnJheSh0YXNrcykpIHtcbiAgICAgICAgICAgIGVhY2hmbi5tYXAodGFza3MsIGZ1bmN0aW9uIChmbiwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgICAgICBpZiAoZm4pIHtcbiAgICAgICAgICAgICAgICAgICAgZm4oZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGFyZ3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsIDEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFyZ3MubGVuZ3RoIDw9IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmdzID0gYXJnc1swXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrLmNhbGwobnVsbCwgZXJyLCBhcmdzKTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSwgY2FsbGJhY2spO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdmFyIHJlc3VsdHMgPSB7fTtcbiAgICAgICAgICAgIGVhY2hmbi5lYWNoKF9rZXlzKHRhc2tzKSwgZnVuY3Rpb24gKGssIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICAgICAgdGFza3Nba10oZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgICAgICAgICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMSk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChhcmdzLmxlbmd0aCA8PSAxKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhcmdzID0gYXJnc1swXTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICByZXN1bHRzW2tdID0gYXJncztcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0sIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnIsIHJlc3VsdHMpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgYXN5bmMucGFyYWxsZWwgPSBmdW5jdGlvbiAodGFza3MsIGNhbGxiYWNrKSB7XG4gICAgICAgIF9wYXJhbGxlbCh7IG1hcDogYXN5bmMubWFwLCBlYWNoOiBhc3luYy5lYWNoIH0sIHRhc2tzLCBjYWxsYmFjayk7XG4gICAgfTtcblxuICAgIGFzeW5jLnBhcmFsbGVsTGltaXQgPSBmdW5jdGlvbih0YXNrcywgbGltaXQsIGNhbGxiYWNrKSB7XG4gICAgICAgIF9wYXJhbGxlbCh7IG1hcDogX21hcExpbWl0KGxpbWl0KSwgZWFjaDogX2VhY2hMaW1pdChsaW1pdCkgfSwgdGFza3MsIGNhbGxiYWNrKTtcbiAgICB9O1xuXG4gICAgYXN5bmMuc2VyaWVzID0gZnVuY3Rpb24gKHRhc2tzLCBjYWxsYmFjaykge1xuICAgICAgICBjYWxsYmFjayA9IGNhbGxiYWNrIHx8IGZ1bmN0aW9uICgpIHt9O1xuICAgICAgICBpZiAoX2lzQXJyYXkodGFza3MpKSB7XG4gICAgICAgICAgICBhc3luYy5tYXBTZXJpZXModGFza3MsIGZ1bmN0aW9uIChmbiwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgICAgICBpZiAoZm4pIHtcbiAgICAgICAgICAgICAgICAgICAgZm4oZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGFyZ3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsIDEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFyZ3MubGVuZ3RoIDw9IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmdzID0gYXJnc1swXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrLmNhbGwobnVsbCwgZXJyLCBhcmdzKTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSwgY2FsbGJhY2spO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdmFyIHJlc3VsdHMgPSB7fTtcbiAgICAgICAgICAgIGFzeW5jLmVhY2hTZXJpZXMoX2tleXModGFza3MpLCBmdW5jdGlvbiAoaywgY2FsbGJhY2spIHtcbiAgICAgICAgICAgICAgICB0YXNrc1trXShmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBhcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGFyZ3MubGVuZ3RoIDw9IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3MgPSBhcmdzWzBdO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdHNba10gPSBhcmdzO1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSwgZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrKGVyciwgcmVzdWx0cyk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH07XG5cbiAgICBhc3luYy5pdGVyYXRvciA9IGZ1bmN0aW9uICh0YXNrcykge1xuICAgICAgICB2YXIgbWFrZUNhbGxiYWNrID0gZnVuY3Rpb24gKGluZGV4KSB7XG4gICAgICAgICAgICB2YXIgZm4gPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgaWYgKHRhc2tzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICB0YXNrc1tpbmRleF0uYXBwbHkobnVsbCwgYXJndW1lbnRzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZuLm5leHQoKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBmbi5uZXh0ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiAoaW5kZXggPCB0YXNrcy5sZW5ndGggLSAxKSA/IG1ha2VDYWxsYmFjayhpbmRleCArIDEpOiBudWxsO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIHJldHVybiBmbjtcbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIG1ha2VDYWxsYmFjaygwKTtcbiAgICB9O1xuXG4gICAgYXN5bmMuYXBwbHkgPSBmdW5jdGlvbiAoZm4pIHtcbiAgICAgICAgdmFyIGFyZ3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsIDEpO1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIGZuLmFwcGx5KFxuICAgICAgICAgICAgICAgIG51bGwsIGFyZ3MuY29uY2F0KEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cykpXG4gICAgICAgICAgICApO1xuICAgICAgICB9O1xuICAgIH07XG5cbiAgICB2YXIgX2NvbmNhdCA9IGZ1bmN0aW9uIChlYWNoZm4sIGFyciwgZm4sIGNhbGxiYWNrKSB7XG4gICAgICAgIHZhciByID0gW107XG4gICAgICAgIGVhY2hmbihhcnIsIGZ1bmN0aW9uICh4LCBjYikge1xuICAgICAgICAgICAgZm4oeCwgZnVuY3Rpb24gKGVyciwgeSkge1xuICAgICAgICAgICAgICAgIHIgPSByLmNvbmNhdCh5IHx8IFtdKTtcbiAgICAgICAgICAgICAgICBjYihlcnIpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgIGNhbGxiYWNrKGVyciwgcik7XG4gICAgICAgIH0pO1xuICAgIH07XG4gICAgYXN5bmMuY29uY2F0ID0gZG9QYXJhbGxlbChfY29uY2F0KTtcbiAgICBhc3luYy5jb25jYXRTZXJpZXMgPSBkb1NlcmllcyhfY29uY2F0KTtcblxuICAgIGFzeW5jLndoaWxzdCA9IGZ1bmN0aW9uICh0ZXN0LCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgaWYgKHRlc3QoKSkge1xuICAgICAgICAgICAgaXRlcmF0b3IoZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGFzeW5jLndoaWxzdCh0ZXN0LCBpdGVyYXRvciwgY2FsbGJhY2spO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIGFzeW5jLmRvV2hpbHN0ID0gZnVuY3Rpb24gKGl0ZXJhdG9yLCB0ZXN0LCBjYWxsYmFjaykge1xuICAgICAgICBpdGVyYXRvcihmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMSk7XG4gICAgICAgICAgICBpZiAodGVzdC5hcHBseShudWxsLCBhcmdzKSkge1xuICAgICAgICAgICAgICAgIGFzeW5jLmRvV2hpbHN0KGl0ZXJhdG9yLCB0ZXN0LCBjYWxsYmFjayk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9O1xuXG4gICAgYXN5bmMudW50aWwgPSBmdW5jdGlvbiAodGVzdCwgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgIGlmICghdGVzdCgpKSB7XG4gICAgICAgICAgICBpdGVyYXRvcihmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYXN5bmMudW50aWwodGVzdCwgaXRlcmF0b3IsIGNhbGxiYWNrKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgY2FsbGJhY2soKTtcbiAgICAgICAgfVxuICAgIH07XG5cbiAgICBhc3luYy5kb1VudGlsID0gZnVuY3Rpb24gKGl0ZXJhdG9yLCB0ZXN0LCBjYWxsYmFjaykge1xuICAgICAgICBpdGVyYXRvcihmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMSk7XG4gICAgICAgICAgICBpZiAoIXRlc3QuYXBwbHkobnVsbCwgYXJncykpIHtcbiAgICAgICAgICAgICAgICBhc3luYy5kb1VudGlsKGl0ZXJhdG9yLCB0ZXN0LCBjYWxsYmFjayk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9O1xuXG4gICAgYXN5bmMucXVldWUgPSBmdW5jdGlvbiAod29ya2VyLCBjb25jdXJyZW5jeSkge1xuICAgICAgICBpZiAoY29uY3VycmVuY3kgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgY29uY3VycmVuY3kgPSAxO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIF9pbnNlcnQocSwgZGF0YSwgcG9zLCBjYWxsYmFjaykge1xuICAgICAgICAgIGlmICghcS5zdGFydGVkKXtcbiAgICAgICAgICAgIHEuc3RhcnRlZCA9IHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICghX2lzQXJyYXkoZGF0YSkpIHtcbiAgICAgICAgICAgICAgZGF0YSA9IFtkYXRhXTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYoZGF0YS5sZW5ndGggPT0gMCkge1xuICAgICAgICAgICAgIC8vIGNhbGwgZHJhaW4gaW1tZWRpYXRlbHkgaWYgdGhlcmUgYXJlIG5vIHRhc2tzXG4gICAgICAgICAgICAgcmV0dXJuIGFzeW5jLnNldEltbWVkaWF0ZShmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgaWYgKHEuZHJhaW4pIHtcbiAgICAgICAgICAgICAgICAgICAgIHEuZHJhaW4oKTtcbiAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgICBfZWFjaChkYXRhLCBmdW5jdGlvbih0YXNrKSB7XG4gICAgICAgICAgICAgIHZhciBpdGVtID0ge1xuICAgICAgICAgICAgICAgICAgZGF0YTogdGFzayxcbiAgICAgICAgICAgICAgICAgIGNhbGxiYWNrOiB0eXBlb2YgY2FsbGJhY2sgPT09ICdmdW5jdGlvbicgPyBjYWxsYmFjayA6IG51bGxcbiAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICBpZiAocG9zKSB7XG4gICAgICAgICAgICAgICAgcS50YXNrcy51bnNoaWZ0KGl0ZW0pO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHEudGFza3MucHVzaChpdGVtKTtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGlmIChxLnNhdHVyYXRlZCAmJiBxLnRhc2tzLmxlbmd0aCA9PT0gcS5jb25jdXJyZW5jeSkge1xuICAgICAgICAgICAgICAgICAgcS5zYXR1cmF0ZWQoKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBhc3luYy5zZXRJbW1lZGlhdGUocS5wcm9jZXNzKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciB3b3JrZXJzID0gMDtcbiAgICAgICAgdmFyIHEgPSB7XG4gICAgICAgICAgICB0YXNrczogW10sXG4gICAgICAgICAgICBjb25jdXJyZW5jeTogY29uY3VycmVuY3ksXG4gICAgICAgICAgICBzYXR1cmF0ZWQ6IG51bGwsXG4gICAgICAgICAgICBlbXB0eTogbnVsbCxcbiAgICAgICAgICAgIGRyYWluOiBudWxsLFxuICAgICAgICAgICAgc3RhcnRlZDogZmFsc2UsXG4gICAgICAgICAgICBwYXVzZWQ6IGZhbHNlLFxuICAgICAgICAgICAgcHVzaDogZnVuY3Rpb24gKGRhdGEsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICAgIF9pbnNlcnQocSwgZGF0YSwgZmFsc2UsIGNhbGxiYWNrKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBraWxsOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgIHEuZHJhaW4gPSBudWxsO1xuICAgICAgICAgICAgICBxLnRhc2tzID0gW107XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdW5zaGlmdDogZnVuY3Rpb24gKGRhdGEsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICAgIF9pbnNlcnQocSwgZGF0YSwgdHJ1ZSwgY2FsbGJhY2spO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHByb2Nlc3M6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBpZiAoIXEucGF1c2VkICYmIHdvcmtlcnMgPCBxLmNvbmN1cnJlbmN5ICYmIHEudGFza3MubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciB0YXNrID0gcS50YXNrcy5zaGlmdCgpO1xuICAgICAgICAgICAgICAgICAgICBpZiAocS5lbXB0eSAmJiBxLnRhc2tzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcS5lbXB0eSgpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHdvcmtlcnMgKz0gMTtcbiAgICAgICAgICAgICAgICAgICAgdmFyIG5leHQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB3b3JrZXJzIC09IDE7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodGFzay5jYWxsYmFjaykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhc2suY2FsbGJhY2suYXBwbHkodGFzaywgYXJndW1lbnRzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChxLmRyYWluICYmIHEudGFza3MubGVuZ3RoICsgd29ya2VycyA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHEuZHJhaW4oKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHEucHJvY2VzcygpO1xuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICB2YXIgY2IgPSBvbmx5X29uY2UobmV4dCk7XG4gICAgICAgICAgICAgICAgICAgIHdvcmtlcih0YXNrLmRhdGEsIGNiKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbGVuZ3RoOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHEudGFza3MubGVuZ3RoO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHJ1bm5pbmc6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gd29ya2VycztcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBpZGxlOiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcS50YXNrcy5sZW5ndGggKyB3b3JrZXJzID09PSAwO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHBhdXNlOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgaWYgKHEucGF1c2VkID09PSB0cnVlKSB7IHJldHVybjsgfVxuICAgICAgICAgICAgICAgIHEucGF1c2VkID0gdHJ1ZTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICByZXN1bWU6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBpZiAocS5wYXVzZWQgPT09IGZhbHNlKSB7IHJldHVybjsgfVxuICAgICAgICAgICAgICAgIHEucGF1c2VkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgLy8gTmVlZCB0byBjYWxsIHEucHJvY2VzcyBvbmNlIHBlciBjb25jdXJyZW50XG4gICAgICAgICAgICAgICAgLy8gd29ya2VyIHRvIHByZXNlcnZlIGZ1bGwgY29uY3VycmVuY3kgYWZ0ZXIgcGF1c2VcbiAgICAgICAgICAgICAgICBmb3IgKHZhciB3ID0gMTsgdyA8PSBxLmNvbmN1cnJlbmN5OyB3KyspIHtcbiAgICAgICAgICAgICAgICAgICAgYXN5bmMuc2V0SW1tZWRpYXRlKHEucHJvY2Vzcyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gcTtcbiAgICB9O1xuXG4gICAgYXN5bmMucHJpb3JpdHlRdWV1ZSA9IGZ1bmN0aW9uICh3b3JrZXIsIGNvbmN1cnJlbmN5KSB7XG5cbiAgICAgICAgZnVuY3Rpb24gX2NvbXBhcmVUYXNrcyhhLCBiKXtcbiAgICAgICAgICByZXR1cm4gYS5wcmlvcml0eSAtIGIucHJpb3JpdHk7XG4gICAgICAgIH07XG5cbiAgICAgICAgZnVuY3Rpb24gX2JpbmFyeVNlYXJjaChzZXF1ZW5jZSwgaXRlbSwgY29tcGFyZSkge1xuICAgICAgICAgIHZhciBiZWcgPSAtMSxcbiAgICAgICAgICAgICAgZW5kID0gc2VxdWVuY2UubGVuZ3RoIC0gMTtcbiAgICAgICAgICB3aGlsZSAoYmVnIDwgZW5kKSB7XG4gICAgICAgICAgICB2YXIgbWlkID0gYmVnICsgKChlbmQgLSBiZWcgKyAxKSA+Pj4gMSk7XG4gICAgICAgICAgICBpZiAoY29tcGFyZShpdGVtLCBzZXF1ZW5jZVttaWRdKSA+PSAwKSB7XG4gICAgICAgICAgICAgIGJlZyA9IG1pZDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGVuZCA9IG1pZCAtIDE7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBiZWc7XG4gICAgICAgIH1cblxuICAgICAgICBmdW5jdGlvbiBfaW5zZXJ0KHEsIGRhdGEsIHByaW9yaXR5LCBjYWxsYmFjaykge1xuICAgICAgICAgIGlmICghcS5zdGFydGVkKXtcbiAgICAgICAgICAgIHEuc3RhcnRlZCA9IHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICghX2lzQXJyYXkoZGF0YSkpIHtcbiAgICAgICAgICAgICAgZGF0YSA9IFtkYXRhXTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYoZGF0YS5sZW5ndGggPT0gMCkge1xuICAgICAgICAgICAgIC8vIGNhbGwgZHJhaW4gaW1tZWRpYXRlbHkgaWYgdGhlcmUgYXJlIG5vIHRhc2tzXG4gICAgICAgICAgICAgcmV0dXJuIGFzeW5jLnNldEltbWVkaWF0ZShmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgaWYgKHEuZHJhaW4pIHtcbiAgICAgICAgICAgICAgICAgICAgIHEuZHJhaW4oKTtcbiAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgICBfZWFjaChkYXRhLCBmdW5jdGlvbih0YXNrKSB7XG4gICAgICAgICAgICAgIHZhciBpdGVtID0ge1xuICAgICAgICAgICAgICAgICAgZGF0YTogdGFzayxcbiAgICAgICAgICAgICAgICAgIHByaW9yaXR5OiBwcmlvcml0eSxcbiAgICAgICAgICAgICAgICAgIGNhbGxiYWNrOiB0eXBlb2YgY2FsbGJhY2sgPT09ICdmdW5jdGlvbicgPyBjYWxsYmFjayA6IG51bGxcbiAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICBxLnRhc2tzLnNwbGljZShfYmluYXJ5U2VhcmNoKHEudGFza3MsIGl0ZW0sIF9jb21wYXJlVGFza3MpICsgMSwgMCwgaXRlbSk7XG5cbiAgICAgICAgICAgICAgaWYgKHEuc2F0dXJhdGVkICYmIHEudGFza3MubGVuZ3RoID09PSBxLmNvbmN1cnJlbmN5KSB7XG4gICAgICAgICAgICAgICAgICBxLnNhdHVyYXRlZCgpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGFzeW5jLnNldEltbWVkaWF0ZShxLnByb2Nlc3MpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gU3RhcnQgd2l0aCBhIG5vcm1hbCBxdWV1ZVxuICAgICAgICB2YXIgcSA9IGFzeW5jLnF1ZXVlKHdvcmtlciwgY29uY3VycmVuY3kpO1xuXG4gICAgICAgIC8vIE92ZXJyaWRlIHB1c2ggdG8gYWNjZXB0IHNlY29uZCBwYXJhbWV0ZXIgcmVwcmVzZW50aW5nIHByaW9yaXR5XG4gICAgICAgIHEucHVzaCA9IGZ1bmN0aW9uIChkYXRhLCBwcmlvcml0eSwgY2FsbGJhY2spIHtcbiAgICAgICAgICBfaW5zZXJ0KHEsIGRhdGEsIHByaW9yaXR5LCBjYWxsYmFjayk7XG4gICAgICAgIH07XG5cbiAgICAgICAgLy8gUmVtb3ZlIHVuc2hpZnQgZnVuY3Rpb25cbiAgICAgICAgZGVsZXRlIHEudW5zaGlmdDtcblxuICAgICAgICByZXR1cm4gcTtcbiAgICB9O1xuXG4gICAgYXN5bmMuY2FyZ28gPSBmdW5jdGlvbiAod29ya2VyLCBwYXlsb2FkKSB7XG4gICAgICAgIHZhciB3b3JraW5nICAgICA9IGZhbHNlLFxuICAgICAgICAgICAgdGFza3MgICAgICAgPSBbXTtcblxuICAgICAgICB2YXIgY2FyZ28gPSB7XG4gICAgICAgICAgICB0YXNrczogdGFza3MsXG4gICAgICAgICAgICBwYXlsb2FkOiBwYXlsb2FkLFxuICAgICAgICAgICAgc2F0dXJhdGVkOiBudWxsLFxuICAgICAgICAgICAgZW1wdHk6IG51bGwsXG4gICAgICAgICAgICBkcmFpbjogbnVsbCxcbiAgICAgICAgICAgIGRyYWluZWQ6IHRydWUsXG4gICAgICAgICAgICBwdXNoOiBmdW5jdGlvbiAoZGF0YSwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgICAgICBpZiAoIV9pc0FycmF5KGRhdGEpKSB7XG4gICAgICAgICAgICAgICAgICAgIGRhdGEgPSBbZGF0YV07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIF9lYWNoKGRhdGEsIGZ1bmN0aW9uKHRhc2spIHtcbiAgICAgICAgICAgICAgICAgICAgdGFza3MucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgICAgICBkYXRhOiB0YXNrLFxuICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2s6IHR5cGVvZiBjYWxsYmFjayA9PT0gJ2Z1bmN0aW9uJyA/IGNhbGxiYWNrIDogbnVsbFxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgY2FyZ28uZHJhaW5lZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICBpZiAoY2FyZ28uc2F0dXJhdGVkICYmIHRhc2tzLmxlbmd0aCA9PT0gcGF5bG9hZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY2FyZ28uc2F0dXJhdGVkKCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBhc3luYy5zZXRJbW1lZGlhdGUoY2FyZ28ucHJvY2Vzcyk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcHJvY2VzczogZnVuY3Rpb24gcHJvY2VzcygpIHtcbiAgICAgICAgICAgICAgICBpZiAod29ya2luZykgcmV0dXJuO1xuICAgICAgICAgICAgICAgIGlmICh0YXNrcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgaWYoY2FyZ28uZHJhaW4gJiYgIWNhcmdvLmRyYWluZWQpIGNhcmdvLmRyYWluKCk7XG4gICAgICAgICAgICAgICAgICAgIGNhcmdvLmRyYWluZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgdmFyIHRzID0gdHlwZW9mIHBheWxvYWQgPT09ICdudW1iZXInXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPyB0YXNrcy5zcGxpY2UoMCwgcGF5bG9hZClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IHRhc2tzLnNwbGljZSgwLCB0YXNrcy5sZW5ndGgpO1xuXG4gICAgICAgICAgICAgICAgdmFyIGRzID0gX21hcCh0cywgZnVuY3Rpb24gKHRhc2spIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRhc2suZGF0YTtcbiAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgIGlmKGNhcmdvLmVtcHR5KSBjYXJnby5lbXB0eSgpO1xuICAgICAgICAgICAgICAgIHdvcmtpbmcgPSB0cnVlO1xuICAgICAgICAgICAgICAgIHdvcmtlcihkcywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICB3b3JraW5nID0gZmFsc2U7XG5cbiAgICAgICAgICAgICAgICAgICAgdmFyIGFyZ3MgPSBhcmd1bWVudHM7XG4gICAgICAgICAgICAgICAgICAgIF9lYWNoKHRzLCBmdW5jdGlvbiAoZGF0YSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRhdGEuY2FsbGJhY2spIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLmNhbGxiYWNrLmFwcGx5KG51bGwsIGFyZ3MpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgICAgICBwcm9jZXNzKCk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbGVuZ3RoOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRhc2tzLmxlbmd0aDtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBydW5uaW5nOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHdvcmtpbmc7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiBjYXJnbztcbiAgICB9O1xuXG4gICAgdmFyIF9jb25zb2xlX2ZuID0gZnVuY3Rpb24gKG5hbWUpIHtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChmbikge1xuICAgICAgICAgICAgdmFyIGFyZ3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsIDEpO1xuICAgICAgICAgICAgZm4uYXBwbHkobnVsbCwgYXJncy5jb25jYXQoW2Z1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgICAgICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMSk7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBjb25zb2xlICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoY29uc29sZS5lcnJvcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChjb25zb2xlW25hbWVdKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBfZWFjaChhcmdzLCBmdW5jdGlvbiAoeCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGVbbmFtZV0oeCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1dKSk7XG4gICAgICAgIH07XG4gICAgfTtcbiAgICBhc3luYy5sb2cgPSBfY29uc29sZV9mbignbG9nJyk7XG4gICAgYXN5bmMuZGlyID0gX2NvbnNvbGVfZm4oJ2RpcicpO1xuICAgIC8qYXN5bmMuaW5mbyA9IF9jb25zb2xlX2ZuKCdpbmZvJyk7XG4gICAgYXN5bmMud2FybiA9IF9jb25zb2xlX2ZuKCd3YXJuJyk7XG4gICAgYXN5bmMuZXJyb3IgPSBfY29uc29sZV9mbignZXJyb3InKTsqL1xuXG4gICAgYXN5bmMubWVtb2l6ZSA9IGZ1bmN0aW9uIChmbiwgaGFzaGVyKSB7XG4gICAgICAgIHZhciBtZW1vID0ge307XG4gICAgICAgIHZhciBxdWV1ZXMgPSB7fTtcbiAgICAgICAgaGFzaGVyID0gaGFzaGVyIHx8IGZ1bmN0aW9uICh4KSB7XG4gICAgICAgICAgICByZXR1cm4geDtcbiAgICAgICAgfTtcbiAgICAgICAgdmFyIG1lbW9pemVkID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIGFyZ3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMpO1xuICAgICAgICAgICAgdmFyIGNhbGxiYWNrID0gYXJncy5wb3AoKTtcbiAgICAgICAgICAgIHZhciBrZXkgPSBoYXNoZXIuYXBwbHkobnVsbCwgYXJncyk7XG4gICAgICAgICAgICBpZiAoa2V5IGluIG1lbW8pIHtcbiAgICAgICAgICAgICAgICBhc3luYy5uZXh0VGljayhmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrLmFwcGx5KG51bGwsIG1lbW9ba2V5XSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChrZXkgaW4gcXVldWVzKSB7XG4gICAgICAgICAgICAgICAgcXVldWVzW2tleV0ucHVzaChjYWxsYmFjayk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBxdWV1ZXNba2V5XSA9IFtjYWxsYmFja107XG4gICAgICAgICAgICAgICAgZm4uYXBwbHkobnVsbCwgYXJncy5jb25jYXQoW2Z1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgbWVtb1trZXldID0gYXJndW1lbnRzO1xuICAgICAgICAgICAgICAgICAgICB2YXIgcSA9IHF1ZXVlc1trZXldO1xuICAgICAgICAgICAgICAgICAgICBkZWxldGUgcXVldWVzW2tleV07XG4gICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwLCBsID0gcS5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICBxW2ldLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICBtZW1vaXplZC5tZW1vID0gbWVtbztcbiAgICAgICAgbWVtb2l6ZWQudW5tZW1vaXplZCA9IGZuO1xuICAgICAgICByZXR1cm4gbWVtb2l6ZWQ7XG4gICAgfTtcblxuICAgIGFzeW5jLnVubWVtb2l6ZSA9IGZ1bmN0aW9uIChmbikge1xuICAgICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIChmbi51bm1lbW9pemVkIHx8IGZuKS5hcHBseShudWxsLCBhcmd1bWVudHMpO1xuICAgICAgfTtcbiAgICB9O1xuXG4gICAgYXN5bmMudGltZXMgPSBmdW5jdGlvbiAoY291bnQsIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICB2YXIgY291bnRlciA9IFtdO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNvdW50OyBpKyspIHtcbiAgICAgICAgICAgIGNvdW50ZXIucHVzaChpKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYXN5bmMubWFwKGNvdW50ZXIsIGl0ZXJhdG9yLCBjYWxsYmFjayk7XG4gICAgfTtcblxuICAgIGFzeW5jLnRpbWVzU2VyaWVzID0gZnVuY3Rpb24gKGNvdW50LCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgdmFyIGNvdW50ZXIgPSBbXTtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7XG4gICAgICAgICAgICBjb3VudGVyLnB1c2goaSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGFzeW5jLm1hcFNlcmllcyhjb3VudGVyLCBpdGVyYXRvciwgY2FsbGJhY2spO1xuICAgIH07XG5cbiAgICBhc3luYy5zZXEgPSBmdW5jdGlvbiAoLyogZnVuY3Rpb25zLi4uICovKSB7XG4gICAgICAgIHZhciBmbnMgPSBhcmd1bWVudHM7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgdGhhdCA9IHRoaXM7XG4gICAgICAgICAgICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7XG4gICAgICAgICAgICB2YXIgY2FsbGJhY2sgPSBhcmdzLnBvcCgpO1xuICAgICAgICAgICAgYXN5bmMucmVkdWNlKGZucywgYXJncywgZnVuY3Rpb24gKG5ld2FyZ3MsIGZuLCBjYikge1xuICAgICAgICAgICAgICAgIGZuLmFwcGx5KHRoYXQsIG5ld2FyZ3MuY29uY2F0KFtmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBlcnIgPSBhcmd1bWVudHNbMF07XG4gICAgICAgICAgICAgICAgICAgIHZhciBuZXh0YXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMSk7XG4gICAgICAgICAgICAgICAgICAgIGNiKGVyciwgbmV4dGFyZ3MpO1xuICAgICAgICAgICAgICAgIH1dKSlcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBmdW5jdGlvbiAoZXJyLCByZXN1bHRzKSB7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2suYXBwbHkodGhhdCwgW2Vycl0uY29uY2F0KHJlc3VsdHMpKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9O1xuICAgIH07XG5cbiAgICBhc3luYy5jb21wb3NlID0gZnVuY3Rpb24gKC8qIGZ1bmN0aW9ucy4uLiAqLykge1xuICAgICAgcmV0dXJuIGFzeW5jLnNlcS5hcHBseShudWxsLCBBcnJheS5wcm90b3R5cGUucmV2ZXJzZS5jYWxsKGFyZ3VtZW50cykpO1xuICAgIH07XG5cbiAgICB2YXIgX2FwcGx5RWFjaCA9IGZ1bmN0aW9uIChlYWNoZm4sIGZucyAvKmFyZ3MuLi4qLykge1xuICAgICAgICB2YXIgZ28gPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgdGhhdCA9IHRoaXM7XG4gICAgICAgICAgICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7XG4gICAgICAgICAgICB2YXIgY2FsbGJhY2sgPSBhcmdzLnBvcCgpO1xuICAgICAgICAgICAgcmV0dXJuIGVhY2hmbihmbnMsIGZ1bmN0aW9uIChmbiwgY2IpIHtcbiAgICAgICAgICAgICAgICBmbi5hcHBseSh0aGF0LCBhcmdzLmNvbmNhdChbY2JdKSk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY2FsbGJhY2spO1xuICAgICAgICB9O1xuICAgICAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA+IDIpIHtcbiAgICAgICAgICAgIHZhciBhcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAyKTtcbiAgICAgICAgICAgIHJldHVybiBnby5hcHBseSh0aGlzLCBhcmdzKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBnbztcbiAgICAgICAgfVxuICAgIH07XG4gICAgYXN5bmMuYXBwbHlFYWNoID0gZG9QYXJhbGxlbChfYXBwbHlFYWNoKTtcbiAgICBhc3luYy5hcHBseUVhY2hTZXJpZXMgPSBkb1NlcmllcyhfYXBwbHlFYWNoKTtcblxuICAgIGFzeW5jLmZvcmV2ZXIgPSBmdW5jdGlvbiAoZm4sIGNhbGxiYWNrKSB7XG4gICAgICAgIGZ1bmN0aW9uIG5leHQoZXJyKSB7XG4gICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgaWYgKGNhbGxiYWNrKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aHJvdyBlcnI7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmbihuZXh0KTtcbiAgICAgICAgfVxuICAgICAgICBuZXh0KCk7XG4gICAgfTtcblxuICAgIC8vIE5vZGUuanNcbiAgICBpZiAodHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCcgJiYgbW9kdWxlLmV4cG9ydHMpIHtcbiAgICAgICAgbW9kdWxlLmV4cG9ydHMgPSBhc3luYztcbiAgICB9XG4gICAgLy8gQU1EIC8gUmVxdWlyZUpTXG4gICAgZWxzZSBpZiAodHlwZW9mIGRlZmluZSAhPT0gJ3VuZGVmaW5lZCcgJiYgZGVmaW5lLmFtZCkge1xuICAgICAgICBkZWZpbmUoW10sIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiBhc3luYztcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8vIGluY2x1ZGVkIGRpcmVjdGx5IHZpYSA8c2NyaXB0PiB0YWdcbiAgICBlbHNlIHtcbiAgICAgICAgcm9vdC5hc3luYyA9IGFzeW5jO1xuICAgIH1cblxufSgpKTtcbiIsInZhciBhc3luYyAgICAgICA9IHJlcXVpcmUoJ2FzeW5jJyksXG4gICAgdXJsUGFyc2VyICAgPSByZXF1aXJlKCd1cmwnKSxcbiAgICBSZXNvdXJjZSAgICA9IHJlcXVpcmUoJy4vUmVzb3VyY2UnKSxcbiAgICBFdmVudEVtaXR0ZXIgPSByZXF1aXJlKCdldmVudGVtaXR0ZXIzJyk7XG5cbi8qKlxuICogTWFuYWdlcyB0aGUgc3RhdGUgYW5kIGxvYWRpbmcgb2YgbXVsdGlwbGUgcmVzb3VyY2VzIHRvIGxvYWQuXG4gKlxuICogQGNsYXNzXG4gKiBAcGFyYW0gW2Jhc2VVcmw9JyddIHtzdHJpbmd9IFRoZSBiYXNlIHVybCBmb3IgYWxsIHJlc291cmNlcyBsb2FkZWQgYnkgdGhpcyBsb2FkZXIuXG4gKiBAcGFyYW0gW2NvbmN1cnJlbmN5PTEwXSB7bnVtYmVyfSBUaGUgbnVtYmVyIG9mIHJlc291cmNlcyB0byBsb2FkIGNvbmN1cnJlbnRseS5cbiAqL1xuZnVuY3Rpb24gTG9hZGVyKGJhc2VVcmwsIGNvbmN1cnJlbmN5KSB7XG4gICAgRXZlbnRFbWl0dGVyLmNhbGwodGhpcyk7XG5cbiAgICBjb25jdXJyZW5jeSA9IGNvbmN1cnJlbmN5IHx8IDEwO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGJhc2UgdXJsIGZvciBhbGwgcmVzb3VyY2VzIGxvYWRlZCBieSB0aGlzIGxvYWRlci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge3N0cmluZ31cbiAgICAgKi9cbiAgICB0aGlzLmJhc2VVcmwgPSBiYXNlVXJsIHx8ICcnO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHByb2dyZXNzIHBlcmNlbnQgb2YgdGhlIGxvYWRlciBnb2luZyB0aHJvdWdoIHRoZSBxdWV1ZS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLnByb2dyZXNzID0gMDtcblxuICAgIC8qKlxuICAgICAqIExvYWRpbmcgc3RhdGUgb2YgdGhlIGxvYWRlciwgdHJ1ZSBpZiBpdCBpcyBjdXJyZW50bHkgbG9hZGluZyByZXNvdXJjZXMuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqL1xuICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHBlcmNlbnRhZ2Ugb2YgdG90YWwgcHJvZ3Jlc3MgdGhhdCBhIHNpbmdsZSByZXNvdXJjZSByZXByZXNlbnRzLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMuX3Byb2dyZXNzQ2h1bmsgPSAwO1xuXG4gICAgLyoqXG4gICAgICogVGhlIG1pZGRsZXdhcmUgdG8gcnVuIGJlZm9yZSBsb2FkaW5nIGVhY2ggcmVzb3VyY2UuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtmdW5jdGlvbltdfVxuICAgICAqL1xuICAgIHRoaXMuX2JlZm9yZU1pZGRsZXdhcmUgPSBbXTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBtaWRkbGV3YXJlIHRvIHJ1biBhZnRlciBsb2FkaW5nIGVhY2ggcmVzb3VyY2UuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtmdW5jdGlvbltdfVxuICAgICAqL1xuICAgIHRoaXMuX2FmdGVyTWlkZGxld2FyZSA9IFtdO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGBfbG9hZFJlc291cmNlYCBmdW5jdGlvbiBib3VuZCB3aXRoIHRoaXMgb2JqZWN0IGNvbnRleHQuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBtZW1iZXIge2Z1bmN0aW9ufVxuICAgICAqL1xuICAgIHRoaXMuX2JvdW5kTG9hZFJlc291cmNlID0gdGhpcy5fbG9hZFJlc291cmNlLmJpbmQodGhpcyk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYF9vbkxvYWRgIGZ1bmN0aW9uIGJvdW5kIHdpdGggdGhpcyBvYmplY3QgY29udGV4dC5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQG1lbWJlciB7ZnVuY3Rpb259XG4gICAgICovXG4gICAgdGhpcy5fYm91bmRPbkxvYWQgPSB0aGlzLl9vbkxvYWQuYmluZCh0aGlzKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSByZXNvdXJjZSBidWZmZXIgdGhhdCBmaWxscyB1bnRpbCBgbG9hZGAgaXMgY2FsbGVkIHRvIHN0YXJ0IGxvYWRpbmcgcmVzb3VyY2VzLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAbWVtYmVyIHtSZXNvdXJjZVtdfVxuICAgICAqL1xuICAgIHRoaXMuX2J1ZmZlciA9IFtdO1xuXG4gICAgLyoqXG4gICAgICogVXNlZCB0byB0cmFjayBsb2FkIGNvbXBsZXRpb24uXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLl9udW1Ub0xvYWQgPSAwO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHJlc291cmNlcyB3YWl0aW5nIHRvIGJlIGxvYWRlZC5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQG1lbWJlciB7UmVzb3VyY2VbXX1cbiAgICAgKi9cbiAgICB0aGlzLl9xdWV1ZSA9IGFzeW5jLnF1ZXVlKHRoaXMuX2JvdW5kTG9hZFJlc291cmNlLCBjb25jdXJyZW5jeSk7XG5cbiAgICAvKipcbiAgICAgKiBBbGwgdGhlIHJlc291cmNlcyBmb3IgdGhpcyBsb2FkZXIga2V5ZWQgYnkgbmFtZS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge29iamVjdDxzdHJpbmcsIFJlc291cmNlPn1cbiAgICAgKi9cbiAgICB0aGlzLnJlc291cmNlcyA9IHt9O1xuXG4gICAgLyoqXG4gICAgICogRW1pdHRlZCBvbmNlIHBlciBsb2FkZWQgb3IgZXJyb3JlZCByZXNvdXJjZS5cbiAgICAgKlxuICAgICAqIEBldmVudCBwcm9ncmVzc1xuICAgICAqIEBtZW1iZXJvZiBMb2FkZXIjXG4gICAgICovXG5cbiAgICAvKipcbiAgICAgKiBFbWl0dGVkIG9uY2UgcGVyIGVycm9yZWQgcmVzb3VyY2UuXG4gICAgICpcbiAgICAgKiBAZXZlbnQgZXJyb3JcbiAgICAgKiBAbWVtYmVyb2YgTG9hZGVyI1xuICAgICAqL1xuXG4gICAgLyoqXG4gICAgICogRW1pdHRlZCBvbmNlIHBlciBsb2FkZWQgcmVzb3VyY2UuXG4gICAgICpcbiAgICAgKiBAZXZlbnQgbG9hZFxuICAgICAqIEBtZW1iZXJvZiBMb2FkZXIjXG4gICAgICovXG5cbiAgICAvKipcbiAgICAgKiBFbWl0dGVkIHdoZW4gdGhlIGxvYWRlciBiZWdpbnMgdG8gcHJvY2VzcyB0aGUgcXVldWUuXG4gICAgICpcbiAgICAgKiBAZXZlbnQgc3RhcnRcbiAgICAgKiBAbWVtYmVyb2YgTG9hZGVyI1xuICAgICAqL1xuXG4gICAgLyoqXG4gICAgICogRW1pdHRlZCB3aGVuIHRoZSBxdWV1ZWQgcmVzb3VyY2VzIGFsbCBsb2FkLlxuICAgICAqXG4gICAgICogQGV2ZW50IGNvbXBsZXRlXG4gICAgICogQG1lbWJlcm9mIExvYWRlciNcbiAgICAgKi9cbn1cblxuTG9hZGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoRXZlbnRFbWl0dGVyLnByb3RvdHlwZSk7XG5Mb2FkZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gTG9hZGVyO1xubW9kdWxlLmV4cG9ydHMgPSBMb2FkZXI7XG5cbi8qKlxuICogQWRkcyBhIHJlc291cmNlIChvciBtdWx0aXBsZSByZXNvdXJjZXMpIHRvIHRoZSBsb2FkZXIgcXVldWUuXG4gKlxuICogVGhpcyBmdW5jdGlvbiBjYW4gdGFrZSBhIHdpZGUgdmFyaWV0eSBvZiBkaWZmZXJlbnQgcGFyYW1ldGVycy4gVGhlIG9ubHkgdGhpbmcgdGhhdCBpcyBhbHdheXNcbiAqIHJlcXVpcmVkIHRoZSB1cmwgdG8gbG9hZC4gQWxsIHRoZSBmb2xsb3dpbmcgd2lsbCB3b3JrOlxuICpcbiAqIGBgYGpzXG4gKiBsb2FkZXJcbiAqICAgICAvLyBub3JtYWwgcGFyYW0gc3ludGF4XG4gKiAgICAgLmFkZCgna2V5JywgJ2h0dHA6Ly8uLi4nLCBmdW5jdGlvbiAoKSB7fSlcbiAqICAgICAuYWRkKCdodHRwOi8vLi4uJywgZnVuY3Rpb24gKCkge30pXG4gKiAgICAgLmFkZCgnaHR0cDovLy4uLicpXG4gKlxuICogICAgIC8vIG9iamVjdCBzeW50YXhcbiAqICAgICAuYWRkKHtcbiAqICAgICAgICAgbmFtZTogJ2tleTInLFxuICogICAgICAgICB1cmw6ICdodHRwOi8vLi4uJ1xuICogICAgIH0sIGZ1bmN0aW9uICgpIHt9KVxuICogICAgIC5hZGQoe1xuICogICAgICAgICB1cmw6ICdodHRwOi8vLi4uJ1xuICogICAgIH0sIGZ1bmN0aW9uICgpIHt9KVxuICogICAgIC5hZGQoe1xuICogICAgICAgICBuYW1lOiAna2V5MycsXG4gKiAgICAgICAgIHVybDogJ2h0dHA6Ly8uLi4nXG4gKiAgICAgICAgIG9uQ29tcGxldGU6IGZ1bmN0aW9uICgpIHt9XG4gKiAgICAgfSlcbiAqICAgICAuYWRkKHtcbiAqICAgICAgICAgdXJsOiAnaHR0cHM6Ly8uLi4nLFxuICogICAgICAgICBvbkNvbXBsZXRlOiBmdW5jdGlvbiAoKSB7fSxcbiAqICAgICAgICAgY3Jvc3NPcmlnaW46IHRydWVcbiAqICAgICB9KVxuICpcbiAqICAgICAvLyB5b3UgY2FuIGFsc28gcGFzcyBhbiBhcnJheSBvZiBvYmplY3RzIG9yIHVybHMgb3IgYm90aFxuICogICAgIC5hZGQoW1xuICogICAgICAgICB7IG5hbWU6ICdrZXk0JywgdXJsOiAnaHR0cDovLy4uLicsIG9uQ29tcGxldGU6IGZ1bmN0aW9uICgpIHt9IH0sXG4gKiAgICAgICAgIHsgdXJsOiAnaHR0cDovLy4uLicsIG9uQ29tcGxldGU6IGZ1bmN0aW9uICgpIHt9IH0sXG4gKiAgICAgICAgICdodHRwOi8vLi4uJ1xuICogICAgIF0pO1xuICogYGBgXG4gKlxuICogQGFsaWFzIGVucXVldWVcbiAqIEBwYXJhbSBbbmFtZV0ge3N0cmluZ30gVGhlIG5hbWUgb2YgdGhlIHJlc291cmNlIHRvIGxvYWQsIGlmIG5vdCBwYXNzZWQgdGhlIHVybCBpcyB1c2VkLlxuICogQHBhcmFtIHVybCB7c3RyaW5nfSBUaGUgdXJsIGZvciB0aGlzIHJlc291cmNlLCByZWxhdGl2ZSB0byB0aGUgYmFzZVVybCBvZiB0aGlzIGxvYWRlci5cbiAqIEBwYXJhbSBbb3B0aW9uc10ge29iamVjdH0gVGhlIG9wdGlvbnMgZm9yIHRoZSBsb2FkLlxuICogQHBhcmFtIFtvcHRpb25zLmNyb3NzT3JpZ2luXSB7Ym9vbGVhbn0gSXMgdGhpcyByZXF1ZXN0IGNyb3NzLW9yaWdpbj8gRGVmYXVsdCBpcyB0byBkZXRlcm1pbmUgYXV0b21hdGljYWxseS5cbiAqIEBwYXJhbSBbb3B0aW9ucy5sb2FkVHlwZT1SZXNvdXJjZS5MT0FEX1RZUEUuWEhSXSB7UmVzb3VyY2UuWEhSX0xPQURfVFlQRX0gSG93IHNob3VsZCB0aGlzIHJlc291cmNlIGJlIGxvYWRlZD9cbiAqIEBwYXJhbSBbb3B0aW9ucy54aHJUeXBlPVJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkRFRkFVTFRdIHtSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRX0gSG93IHNob3VsZCB0aGUgZGF0YSBiZWluZ1xuICogICAgICBsb2FkZWQgYmUgaW50ZXJwcmV0ZWQgd2hlbiB1c2luZyBYSFI/XG4gKiBAcGFyYW0gW2NhbGxiYWNrXSB7ZnVuY3Rpb259IEZ1bmN0aW9uIHRvIGNhbGwgd2hlbiB0aGlzIHNwZWNpZmljIHJlc291cmNlIGNvbXBsZXRlcyBsb2FkaW5nLlxuICogQHJldHVybiB7TG9hZGVyfVxuICovXG5Mb2FkZXIucHJvdG90eXBlLmFkZCA9IExvYWRlci5wcm90b3R5cGUuZW5xdWV1ZSA9IGZ1bmN0aW9uIChuYW1lLCB1cmwsIG9wdGlvbnMsIGNiKSB7XG4gICAgLy8gc3BlY2lhbCBjYXNlIG9mIGFuIGFycmF5IG9mIG9iamVjdHMgb3IgdXJsc1xuICAgIGlmIChBcnJheS5pc0FycmF5KG5hbWUpKSB7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbmFtZS5sZW5ndGg7ICsraSkge1xuICAgICAgICAgICAgdGhpcy5hZGQobmFtZVtpXSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICAvLyBpZiBhbiBvYmplY3QgaXMgcGFzc2VkIGluc3RlYWQgb2YgcGFyYW1zXG4gICAgaWYgKHR5cGVvZiBuYW1lID09PSAnb2JqZWN0Jykge1xuICAgICAgICBjYiA9IHVybCB8fCBuYW1lLmNhbGxiYWNrIHx8IG5hbWUub25Db21wbGV0ZTtcbiAgICAgICAgb3B0aW9ucyA9IG5hbWU7XG4gICAgICAgIHVybCA9IG5hbWUudXJsO1xuICAgICAgICBuYW1lID0gbmFtZS5uYW1lIHx8IG5hbWUua2V5IHx8IG5hbWUudXJsO1xuICAgIH1cblxuICAgIC8vIGNhc2Ugd2hlcmUgbm8gbmFtZSBpcyBwYXNzZWQgc2hpZnQgYWxsIGFyZ3Mgb3ZlciBieSBvbmUuXG4gICAgaWYgKHR5cGVvZiB1cmwgIT09ICdzdHJpbmcnKSB7XG4gICAgICAgIGNiID0gb3B0aW9ucztcbiAgICAgICAgb3B0aW9ucyA9IHVybDtcbiAgICAgICAgdXJsID0gbmFtZTtcbiAgICB9XG5cbiAgICAvLyBub3cgdGhhdCB3ZSBzaGlmdGVkIG1ha2Ugc3VyZSB3ZSBoYXZlIGEgcHJvcGVyIHVybC5cbiAgICBpZiAodHlwZW9mIHVybCAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdObyB1cmwgcGFzc2VkIHRvIGFkZCByZXNvdXJjZSB0byBsb2FkZXIuJyk7XG4gICAgfVxuXG4gICAgLy8gb3B0aW9ucyBhcmUgb3B0aW9uYWwgc28gcGVvcGxlIG1pZ2h0IHBhc3MgYSBmdW5jdGlvbiBhbmQgbm8gb3B0aW9uc1xuICAgIGlmICh0eXBlb2Ygb3B0aW9ucyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBjYiA9IG9wdGlvbnM7XG4gICAgICAgIG9wdGlvbnMgPSBudWxsO1xuICAgIH1cblxuICAgIC8vIGNoZWNrIGlmIHJlc291cmNlIGFscmVhZHkgZXhpc3RzLlxuICAgIGlmICh0aGlzLnJlc291cmNlc1tuYW1lXSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1Jlc291cmNlIHdpdGggbmFtZSBcIicgKyBuYW1lICsgJ1wiIGFscmVhZHkgZXhpc3RzLicpO1xuICAgIH1cblxuICAgIC8vIGFkZCBiYXNlIHVybCBpZiB0aGlzIGlzbid0IGFuIGFic29sdXRlIHVybFxuICAgIHVybCA9IHRoaXMuX2hhbmRsZUJhc2VVcmwodXJsKTtcblxuICAgIC8vIGNyZWF0ZSB0aGUgc3RvcmUgdGhlIHJlc291cmNlXG4gICAgdGhpcy5yZXNvdXJjZXNbbmFtZV0gPSBuZXcgUmVzb3VyY2UobmFtZSwgdXJsLCBvcHRpb25zKTtcblxuICAgIGlmICh0eXBlb2YgY2IgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgdGhpcy5yZXNvdXJjZXNbbmFtZV0ub25jZSgnYWZ0ZXJNaWRkbGV3YXJlJywgY2IpO1xuICAgIH1cblxuICAgIHRoaXMuX251bVRvTG9hZCsrO1xuXG4gICAgLy8gaWYgYWxyZWFkeSBsb2FkaW5nIGFkZCBpdCB0byB0aGUgd29ya2VyIHF1ZXVlXG4gICAgaWYgKHRoaXMuX3F1ZXVlLnN0YXJ0ZWQpIHtcbiAgICAgICAgdGhpcy5fcXVldWUucHVzaCh0aGlzLnJlc291cmNlc1tuYW1lXSk7XG4gICAgICAgIHRoaXMuX3Byb2dyZXNzQ2h1bmsgPSAoMTAwIC0gdGhpcy5wcm9ncmVzcykgLyAodGhpcy5fcXVldWUubGVuZ3RoKCkgKyB0aGlzLl9xdWV1ZS5ydW5uaW5nKCkpO1xuICAgIH1cbiAgICAvLyBvdGhlcndpc2UgYnVmZmVyIGl0IHRvIGJlIGFkZGVkIHRvIHRoZSBxdWV1ZSBsYXRlclxuICAgIGVsc2Uge1xuICAgICAgICB0aGlzLl9idWZmZXIucHVzaCh0aGlzLnJlc291cmNlc1tuYW1lXSk7XG4gICAgICAgIHRoaXMuX3Byb2dyZXNzQ2h1bmsgPSAxMDAgLyB0aGlzLl9idWZmZXIubGVuZ3RoO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzO1xufTtcblxuTG9hZGVyLnByb3RvdHlwZS5faGFuZGxlQmFzZVVybCA9IGZ1bmN0aW9uICh1cmwpIHtcbiAgICB2YXIgcGFyc2VkVXJsID0gdXJsUGFyc2VyLnBhcnNlKHVybCk7XG5cbiAgICAvLyBhYnNvbHV0ZSB1cmwsIGp1c3QgdXNlIGl0IGFzIGlzLlxuICAgIGlmIChwYXJzZWRVcmwucHJvdG9jb2wgfHwgcGFyc2VkVXJsLnBhdGhuYW1lLmluZGV4T2YoJy8vJykgPT09IDApIHtcbiAgICAgICAgcmV0dXJuIHVybDtcbiAgICB9XG5cbiAgICAvLyBpZiBiYXNlVXJsIGRvZXNuJ3QgZW5kIGluIHNsYXNoIGFuZCB1cmwgZG9lc24ndCBzdGFydCB3aXRoIHNsYXNoLCB0aGVuIGFkZCBhIHNsYXNoIGluYmV0d2VlblxuICAgIGlmIChcbiAgICAgICAgdGhpcy5iYXNlVXJsLmxlbmd0aCAmJlxuICAgICAgICB0aGlzLmJhc2VVcmwubGFzdEluZGV4T2YoJy8nKSAhPT0gdGhpcy5iYXNlVXJsLmxlbmd0aCAtIDEgJiZcbiAgICAgICAgdXJsLmNoYXJBdCgwKSAhPT0gJy8nXG4gICAgKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmJhc2VVcmwgKyAnLycgKyB1cmw7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICByZXR1cm4gdGhpcy5iYXNlVXJsICsgdXJsO1xuICAgIH1cbn07XG5cblxuLyoqXG4gKiBTZXRzIHVwIGEgbWlkZGxld2FyZSBmdW5jdGlvbiB0aGF0IHdpbGwgcnVuICpiZWZvcmUqIHRoZVxuICogcmVzb3VyY2UgaXMgbG9hZGVkLlxuICpcbiAqIEBhbGlhcyBwcmVcbiAqIEBwYXJhbSBtaWRkbGV3YXJlIHtmdW5jdGlvbn0gVGhlIG1pZGRsZXdhcmUgZnVuY3Rpb24gdG8gcmVnaXN0ZXIuXG4gKiBAcmV0dXJuIHtMb2FkZXJ9XG4gKi9cbkxvYWRlci5wcm90b3R5cGUuYmVmb3JlID0gTG9hZGVyLnByb3RvdHlwZS5wcmUgPSBmdW5jdGlvbiAoZm4pIHtcbiAgICB0aGlzLl9iZWZvcmVNaWRkbGV3YXJlLnB1c2goZm4pO1xuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIFNldHMgdXAgYSBtaWRkbGV3YXJlIGZ1bmN0aW9uIHRoYXQgd2lsbCBydW4gKmFmdGVyKiB0aGVcbiAqIHJlc291cmNlIGlzIGxvYWRlZC5cbiAqXG4gKiBAYWxpYXMgdXNlXG4gKiBAcGFyYW0gbWlkZGxld2FyZSB7ZnVuY3Rpb259IFRoZSBtaWRkbGV3YXJlIGZ1bmN0aW9uIHRvIHJlZ2lzdGVyLlxuICogQHJldHVybiB7TG9hZGVyfVxuICovXG5Mb2FkZXIucHJvdG90eXBlLmFmdGVyID0gTG9hZGVyLnByb3RvdHlwZS51c2UgPSBmdW5jdGlvbiAoZm4pIHtcbiAgICB0aGlzLl9hZnRlck1pZGRsZXdhcmUucHVzaChmbik7XG5cbiAgICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogUmVzZXRzIHRoZSBxdWV1ZSBvZiB0aGUgbG9hZGVyIHRvIHByZXBhcmUgZm9yIGEgbmV3IGxvYWQuXG4gKlxuICogQHJldHVybiB7TG9hZGVyfVxuICovXG5Mb2FkZXIucHJvdG90eXBlLnJlc2V0ID0gZnVuY3Rpb24gKCkge1xuICAgIC8vIHRoaXMuYmFzZVVybCA9IGJhc2VVcmwgfHwgJyc7XG5cbiAgICB0aGlzLnByb2dyZXNzID0gMDtcblxuICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xuXG4gICAgdGhpcy5fcHJvZ3Jlc3NDaHVuayA9IDA7XG5cbiAgICAvLyB0aGlzLl9iZWZvcmVNaWRkbGV3YXJlLmxlbmd0aCA9IDA7XG4gICAgLy8gdGhpcy5fYWZ0ZXJNaWRkbGV3YXJlLmxlbmd0aCA9IDA7XG5cbiAgICB0aGlzLl9idWZmZXIubGVuZ3RoID0gMDtcblxuICAgIHRoaXMuX251bVRvTG9hZCA9IDA7XG5cbiAgICB0aGlzLl9xdWV1ZS5raWxsKCk7XG4gICAgdGhpcy5fcXVldWUuc3RhcnRlZCA9IGZhbHNlO1xuXG4gICAgdGhpcy5yZXNvdXJjZXMgPSB7fTtcbn07XG5cbi8qKlxuICogU3RhcnRzIGxvYWRpbmcgdGhlIHF1ZXVlZCByZXNvdXJjZXMuXG4gKlxuICogQGZpcmVzIHN0YXJ0XG4gKiBAcGFyYW0gW2NhbGxiYWNrXSB7ZnVuY3Rpb259IE9wdGlvbmFsIGNhbGxiYWNrIHRoYXQgd2lsbCBiZSBib3VuZCB0byB0aGUgYGNvbXBsZXRlYCBldmVudC5cbiAqIEByZXR1cm4ge0xvYWRlcn1cbiAqL1xuTG9hZGVyLnByb3RvdHlwZS5sb2FkID0gZnVuY3Rpb24gKGNiKSB7XG4gICAgLy8gcmVnaXN0ZXIgY29tcGxldGUgY2FsbGJhY2sgaWYgdGhleSBwYXNzIG9uZVxuICAgIGlmICh0eXBlb2YgY2IgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgdGhpcy5vbmNlKCdjb21wbGV0ZScsIGNiKTtcbiAgICB9XG5cbiAgICAvLyBpZiB0aGUgcXVldWUgaGFzIGFscmVhZHkgc3RhcnRlZCB3ZSBhcmUgZG9uZSBoZXJlXG4gICAgaWYgKHRoaXMuX3F1ZXVlLnN0YXJ0ZWQpIHtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLy8gbm90aWZ5IG9mIHN0YXJ0XG4gICAgdGhpcy5lbWl0KCdzdGFydCcsIHRoaXMpO1xuXG4gICAgLy8gc3RhcnQgdGhlIGludGVybmFsIHF1ZXVlXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLl9idWZmZXIubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgdGhpcy5fcXVldWUucHVzaCh0aGlzLl9idWZmZXJbaV0pO1xuICAgIH1cblxuICAgIC8vIGVtcHR5IHRoZSBidWZmZXJcbiAgICB0aGlzLl9idWZmZXIubGVuZ3RoID0gMDtcblxuICAgIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBMb2FkcyBhIHNpbmdsZSByZXNvdXJjZS5cbiAqXG4gKiBAZmlyZXMgcHJvZ3Jlc3NcbiAqIEBwcml2YXRlXG4gKi9cbkxvYWRlci5wcm90b3R5cGUuX2xvYWRSZXNvdXJjZSA9IGZ1bmN0aW9uIChyZXNvdXJjZSwgZGVxdWV1ZSkge1xuICAgIHZhciBzZWxmID0gdGhpcztcblxuICAgIHJlc291cmNlLl9kZXF1ZXVlID0gZGVxdWV1ZTtcblxuICAgIHRoaXMuX3J1bk1pZGRsZXdhcmUocmVzb3VyY2UsIHRoaXMuX2JlZm9yZU1pZGRsZXdhcmUsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgLy8gcmVzb3VyY2Uub24oJ3Byb2dyZXNzJywgc2VsZi5lbWl0LmJpbmQoc2VsZiwgJ3Byb2dyZXNzJykpO1xuXG4gICAgICAgIHJlc291cmNlLmxvYWQoc2VsZi5fYm91bmRPbkxvYWQpO1xuICAgIH0pO1xufTtcblxuLyoqXG4gKiBDYWxsZWQgb25jZSBlYWNoIHJlc291cmNlIGhhcyBsb2FkZWQuXG4gKlxuICogQGZpcmVzIGNvbXBsZXRlXG4gKiBAcHJpdmF0ZVxuICovXG5Mb2FkZXIucHJvdG90eXBlLl9vbkNvbXBsZXRlID0gZnVuY3Rpb24gKCkge1xuICAgIHRoaXMuZW1pdCgnY29tcGxldGUnLCB0aGlzLCB0aGlzLnJlc291cmNlcyk7XG59O1xuXG4vKipcbiAqIENhbGxlZCBlYWNoIHRpbWUgYSByZXNvdXJjZXMgaXMgbG9hZGVkLlxuICpcbiAqIEBmaXJlcyBwcm9ncmVzc1xuICogQGZpcmVzIGVycm9yXG4gKiBAZmlyZXMgbG9hZFxuICogQHByaXZhdGVcbiAqL1xuTG9hZGVyLnByb3RvdHlwZS5fb25Mb2FkID0gZnVuY3Rpb24gKHJlc291cmNlKSB7XG4gICAgdGhpcy5wcm9ncmVzcyArPSB0aGlzLl9wcm9ncmVzc0NodW5rO1xuXG4gICAgdGhpcy5lbWl0KCdwcm9ncmVzcycsIHRoaXMsIHJlc291cmNlKTtcblxuICAgIC8vIHJ1biBtaWRkbGV3YXJlLCB0aGlzICptdXN0KiBoYXBwZW4gYmVmb3JlIGRlcXVldWUgc28gc3ViLWFzc2V0cyBnZXQgYWRkZWQgcHJvcGVybHlcbiAgICB0aGlzLl9ydW5NaWRkbGV3YXJlKHJlc291cmNlLCB0aGlzLl9hZnRlck1pZGRsZXdhcmUsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmVzb3VyY2UuZW1pdCgnYWZ0ZXJNaWRkbGV3YXJlJywgcmVzb3VyY2UpO1xuXG4gICAgICAgIHRoaXMuX251bVRvTG9hZC0tO1xuXG4gICAgICAgIC8vIGRvIGNvbXBsZXRpb24gY2hlY2tcbiAgICAgICAgaWYgKHRoaXMuX251bVRvTG9hZCA9PT0gMCkge1xuICAgICAgICAgICAgdGhpcy5wcm9ncmVzcyA9IDEwMDtcbiAgICAgICAgICAgIHRoaXMuX29uQ29tcGxldGUoKTtcbiAgICAgICAgfVxuICAgICAgICBcbiAgICAgICAgaWYgKHJlc291cmNlLmVycm9yKSB7XG4gICAgICAgICAgICB0aGlzLmVtaXQoJ2Vycm9yJywgcmVzb3VyY2UuZXJyb3IsIHRoaXMsIHJlc291cmNlKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuZW1pdCgnbG9hZCcsIHRoaXMsIHJlc291cmNlKTtcbiAgICAgICAgfVxuICAgIH0pO1xuICAgIFxuXG5cbiAgICAvLyByZW1vdmUgdGhpcyByZXNvdXJjZSBmcm9tIHRoZSBhc3luYyBxdWV1ZVxuICAgIHJlc291cmNlLl9kZXF1ZXVlKCk7XG59O1xuXG4vKipcbiAqIFJ1biBtaWRkbGV3YXJlIGZ1bmN0aW9ucyBvbiBhIHJlc291cmNlLlxuICpcbiAqIEBwcml2YXRlXG4gKi9cbkxvYWRlci5wcm90b3R5cGUuX3J1bk1pZGRsZXdhcmUgPSBmdW5jdGlvbiAocmVzb3VyY2UsIGZucywgY2IpIHtcbiAgICB2YXIgc2VsZiA9IHRoaXM7XG5cbiAgICBhc3luYy5lYWNoU2VyaWVzKGZucywgZnVuY3Rpb24gKGZuLCBuZXh0KSB7XG4gICAgICAgIGZuLmNhbGwoc2VsZiwgcmVzb3VyY2UsIG5leHQpO1xuICAgIH0sIGNiLmJpbmQodGhpcywgcmVzb3VyY2UpKTtcbn07XG5cbkxvYWRlci5MT0FEX1RZUEUgPSBSZXNvdXJjZS5MT0FEX1RZUEU7XG5Mb2FkZXIuWEhSX1JFQURZX1NUQVRFID0gUmVzb3VyY2UuWEhSX1JFQURZX1NUQVRFO1xuTG9hZGVyLlhIUl9SRVNQT05TRV9UWVBFID0gUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEU7XG4iLCJ2YXIgRXZlbnRFbWl0dGVyID0gcmVxdWlyZSgnZXZlbnRlbWl0dGVyMycpLFxuICAgIF91cmwgPSByZXF1aXJlKCd1cmwnKSxcbiAgICAvLyB0ZXN0cyBpcyBDT1JTIGlzIHN1cHBvcnRlZCBpbiBYSFIsIGlmIG5vdCB3ZSBuZWVkIHRvIHVzZSBYRFJcbiAgICB1c2VYZHIgPSAhISh3aW5kb3cuWERvbWFpblJlcXVlc3QgJiYgISgnd2l0aENyZWRlbnRpYWxzJyBpbiAobmV3IFhNTEh0dHBSZXF1ZXN0KCkpKSksXG4gICAgdGVtcEFuY2hvciA9IG51bGw7XG5cbi8qKlxuICogTWFuYWdlcyB0aGUgc3RhdGUgYW5kIGxvYWRpbmcgb2YgYSBzaW5nbGUgcmVzb3VyY2UgcmVwcmVzZW50ZWQgYnlcbiAqIGEgc2luZ2xlIFVSTC5cbiAqXG4gKiBAY2xhc3NcbiAqIEBwYXJhbSBuYW1lIHtzdHJpbmd9IFRoZSBuYW1lIG9mIHRoZSByZXNvdXJjZSB0byBsb2FkLlxuICogQHBhcmFtIHVybCB7c3RyaW5nfHN0cmluZ1tdfSBUaGUgdXJsIGZvciB0aGlzIHJlc291cmNlLCBmb3IgYXVkaW8vdmlkZW8gbG9hZHMgeW91IGNhbiBwYXNzIGFuIGFycmF5IG9mIHNvdXJjZXMuXG4gKiBAcGFyYW0gW29wdGlvbnNdIHtvYmplY3R9IFRoZSBvcHRpb25zIGZvciB0aGUgbG9hZC5cbiAqIEBwYXJhbSBbb3B0aW9ucy5jcm9zc09yaWdpbl0ge3N0cmluZ3xib29sZWFufSBJcyB0aGlzIHJlcXVlc3QgY3Jvc3Mtb3JpZ2luPyBEZWZhdWx0IGlzIHRvIGRldGVybWluZSBhdXRvbWF0aWNhbGx5LlxuICogQHBhcmFtIFtvcHRpb25zLmxvYWRUeXBlPVJlc291cmNlLkxPQURfVFlQRS5YSFJdIHtSZXNvdXJjZS5MT0FEX1RZUEV9IEhvdyBzaG91bGQgdGhpcyByZXNvdXJjZSBiZSBsb2FkZWQ/XG4gKiBAcGFyYW0gW29wdGlvbnMueGhyVHlwZT1SZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRS5ERUZBVUxUXSB7UmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEV9IEhvdyBzaG91bGQgdGhlIGRhdGEgYmVpbmdcbiAqICAgICAgbG9hZGVkIGJlIGludGVycHJldGVkIHdoZW4gdXNpbmcgWEhSP1xuICogQHBhcmFtIFtvcHRpb25zLm1ldGFkYXRhXSB7b2JqZWN0fSBFeHRyYSBpbmZvIGZvciBtaWRkbGV3YXJlLlxuICovXG5mdW5jdGlvbiBSZXNvdXJjZShuYW1lLCB1cmwsIG9wdGlvbnMpIHtcbiAgICBFdmVudEVtaXR0ZXIuY2FsbCh0aGlzKTtcblxuICAgIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuXG4gICAgaWYgKHR5cGVvZiBuYW1lICE9PSAnc3RyaW5nJyB8fCB0eXBlb2YgdXJsICE9PSAnc3RyaW5nJykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0JvdGggbmFtZSBhbmQgdXJsIGFyZSByZXF1aXJlZCBmb3IgY29uc3RydWN0aW5nIGEgcmVzb3VyY2UuJyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhlIG5hbWUgb2YgdGhpcyByZXNvdXJjZS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge3N0cmluZ31cbiAgICAgKiBAcmVhZG9ubHlcbiAgICAgKi9cbiAgICB0aGlzLm5hbWUgPSBuYW1lO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHVybCB1c2VkIHRvIGxvYWQgdGhpcyByZXNvdXJjZS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge3N0cmluZ31cbiAgICAgKiBAcmVhZG9ubHlcbiAgICAgKi9cbiAgICB0aGlzLnVybCA9IHVybDtcblxuICAgIC8qKlxuICAgICAqIFN0b3JlcyB3aGV0aGVyIG9yIG5vdCB0aGlzIHVybCBpcyBhIGRhdGEgdXJsLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKiBAcmVhZG9ubHlcbiAgICAgKi9cbiAgICB0aGlzLmlzRGF0YVVybCA9IHRoaXMudXJsLmluZGV4T2YoJ2RhdGE6JykgPT09IDA7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgZGF0YSB0aGF0IHdhcyBsb2FkZWQgYnkgdGhlIHJlc291cmNlLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7YW55fVxuICAgICAqL1xuICAgIHRoaXMuZGF0YSA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBJcyB0aGlzIHJlcXVlc3QgY3Jvc3Mtb3JpZ2luPyBJZiB1bnNldCwgZGV0ZXJtaW5lZCBhdXRvbWF0aWNhbGx5LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7c3RyaW5nfVxuICAgICAqL1xuICAgIHRoaXMuY3Jvc3NPcmlnaW4gPSBvcHRpb25zLmNyb3NzT3JpZ2luID09PSB0cnVlID8gJ2Fub255bW91cycgOiBvcHRpb25zLmNyb3NzT3JpZ2luO1xuXG4gICAgLyoqXG4gICAgICogVGhlIG1ldGhvZCBvZiBsb2FkaW5nIHRvIHVzZSBmb3IgdGhpcyByZXNvdXJjZS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1Jlc291cmNlLkxPQURfVFlQRX1cbiAgICAgKi9cbiAgICB0aGlzLmxvYWRUeXBlID0gb3B0aW9ucy5sb2FkVHlwZSB8fCB0aGlzLl9kZXRlcm1pbmVMb2FkVHlwZSgpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHR5cGUgdXNlZCB0byBsb2FkIHRoZSByZXNvdXJjZSB2aWEgWEhSLiBJZiB1bnNldCwgZGV0ZXJtaW5lZCBhdXRvbWF0aWNhbGx5LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7c3RyaW5nfVxuICAgICAqL1xuICAgIHRoaXMueGhyVHlwZSA9IG9wdGlvbnMueGhyVHlwZTtcblxuICAgIC8qKlxuICAgICAqIEV4dHJhIGluZm8gZm9yIG1pZGRsZXdhcmVcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge29iamVjdH1cbiAgICAgKi9cbiAgICB0aGlzLm1ldGFkYXRhID0gb3B0aW9ucy5tZXRhZGF0YSB8fCB7fTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBlcnJvciB0aGF0IG9jY3VycmVkIHdoaWxlIGxvYWRpbmcgKGlmIGFueSkuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtFcnJvcn1cbiAgICAgKiBAcmVhZG9ubHlcbiAgICAgKi9cbiAgICB0aGlzLmVycm9yID0gbnVsbDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBYSFIgb2JqZWN0IHRoYXQgd2FzIHVzZWQgdG8gbG9hZCB0aGlzIHJlc291cmNlLiBUaGlzIGlzIG9ubHkgc2V0XG4gICAgICogd2hlbiBgbG9hZFR5cGVgIGlzIGBSZXNvdXJjZS5MT0FEX1RZUEUuWEhSYC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1hNTEh0dHBSZXF1ZXN0fVxuICAgICAqL1xuICAgIHRoaXMueGhyID0gbnVsbDtcblxuICAgIC8qKlxuICAgICAqIERlc2NyaWJlcyBpZiB0aGlzIHJlc291cmNlIHdhcyBsb2FkZWQgYXMganNvbi4gT25seSB2YWxpZCBhZnRlciB0aGUgcmVzb3VyY2VcbiAgICAgKiBoYXMgY29tcGxldGVseSBsb2FkZWQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqL1xuICAgIHRoaXMuaXNKc29uID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBEZXNjcmliZXMgaWYgdGhpcyByZXNvdXJjZSB3YXMgbG9hZGVkIGFzIHhtbC4gT25seSB2YWxpZCBhZnRlciB0aGUgcmVzb3VyY2VcbiAgICAgKiBoYXMgY29tcGxldGVseSBsb2FkZWQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqL1xuICAgIHRoaXMuaXNYbWwgPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIERlc2NyaWJlcyBpZiB0aGlzIHJlc291cmNlIHdhcyBsb2FkZWQgYXMgYW4gaW1hZ2UgdGFnLiBPbmx5IHZhbGlkIGFmdGVyIHRoZSByZXNvdXJjZVxuICAgICAqIGhhcyBjb21wbGV0ZWx5IGxvYWRlZC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICovXG4gICAgdGhpcy5pc0ltYWdlID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBEZXNjcmliZXMgaWYgdGhpcyByZXNvdXJjZSB3YXMgbG9hZGVkIGFzIGFuIGF1ZGlvIHRhZy4gT25seSB2YWxpZCBhZnRlciB0aGUgcmVzb3VyY2VcbiAgICAgKiBoYXMgY29tcGxldGVseSBsb2FkZWQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqL1xuICAgIHRoaXMuaXNBdWRpbyA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogRGVzY3JpYmVzIGlmIHRoaXMgcmVzb3VyY2Ugd2FzIGxvYWRlZCBhcyBhIHZpZGVvIHRhZy4gT25seSB2YWxpZCBhZnRlciB0aGUgcmVzb3VyY2VcbiAgICAgKiBoYXMgY29tcGxldGVseSBsb2FkZWQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqL1xuICAgIHRoaXMuaXNWaWRlbyA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGBkZXF1ZXVlYCBtZXRob2QgdGhhdCB3aWxsIGJlIHVzZWQgYSBzdG9yYWdlIHBsYWNlIGZvciB0aGUgYXN5bmMgcXVldWUgZGVxdWV1ZSBtZXRob2RcbiAgICAgKiB1c2VkIHByaXZhdGVseSBieSB0aGUgbG9hZGVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7ZnVuY3Rpb259XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9kZXF1ZXVlID0gbnVsbDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBgY29tcGxldGVgIGZ1bmN0aW9uIGJvdW5kIHRvIHRoaXMgcmVzb3VyY2UncyBjb250ZXh0LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7ZnVuY3Rpb259XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9ib3VuZENvbXBsZXRlID0gdGhpcy5jb21wbGV0ZS5iaW5kKHRoaXMpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGBfb25FcnJvcmAgZnVuY3Rpb24gYm91bmQgdG8gdGhpcyByZXNvdXJjZSdzIGNvbnRleHQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtmdW5jdGlvbn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX2JvdW5kT25FcnJvciA9IHRoaXMuX29uRXJyb3IuYmluZCh0aGlzKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBgX29uUHJvZ3Jlc3NgIGZ1bmN0aW9uIGJvdW5kIHRvIHRoaXMgcmVzb3VyY2UncyBjb250ZXh0LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7ZnVuY3Rpb259XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9ib3VuZE9uUHJvZ3Jlc3MgPSB0aGlzLl9vblByb2dyZXNzLmJpbmQodGhpcyk7XG5cbiAgICAvLyB4aHIgY2FsbGJhY2tzXG4gICAgdGhpcy5fYm91bmRYaHJPbkVycm9yID0gdGhpcy5feGhyT25FcnJvci5iaW5kKHRoaXMpO1xuICAgIHRoaXMuX2JvdW5kWGhyT25BYm9ydCA9IHRoaXMuX3hock9uQWJvcnQuYmluZCh0aGlzKTtcbiAgICB0aGlzLl9ib3VuZFhock9uTG9hZCA9IHRoaXMuX3hock9uTG9hZC5iaW5kKHRoaXMpO1xuICAgIHRoaXMuX2JvdW5kWGRyT25UaW1lb3V0ID0gdGhpcy5feGRyT25UaW1lb3V0LmJpbmQodGhpcyk7XG5cbiAgICAvKipcbiAgICAgKiBFbWl0dGVkIHdoZW4gdGhlIHJlc291cmNlIGJlaW5ncyB0byBsb2FkLlxuICAgICAqXG4gICAgICogQGV2ZW50IHN0YXJ0XG4gICAgICogQG1lbWJlcm9mIFJlc291cmNlI1xuICAgICAqL1xuXG4gICAgLyoqXG4gICAgICogRW1pdHRlZCBlYWNoIHRpbWUgcHJvZ3Jlc3Mgb2YgdGhpcyByZXNvdXJjZSBsb2FkIHVwZGF0ZXMuXG4gICAgICogTm90IGFsbCByZXNvdXJjZXMgdHlwZXMgYW5kIGxvYWRlciBzeXN0ZW1zIGNhbiBzdXBwb3J0IHRoaXMgZXZlbnRcbiAgICAgKiBzbyBzb21ldGltZXMgaXQgbWF5IG5vdCBiZSBhdmFpbGFibGUuIElmIHRoZSByZXNvdXJjZVxuICAgICAqIGlzIGJlaW5nIGxvYWRlZCBvbiBhIG1vZGVybiBicm93c2VyLCB1c2luZyBYSFIsIGFuZCB0aGUgcmVtb3RlIHNlcnZlclxuICAgICAqIHByb3Blcmx5IHNldHMgQ29udGVudC1MZW5ndGggaGVhZGVycywgdGhlbiB0aGlzIHdpbGwgYmUgYXZhaWxhYmxlLlxuICAgICAqXG4gICAgICogQGV2ZW50IHByb2dyZXNzXG4gICAgICogQG1lbWJlcm9mIFJlc291cmNlI1xuICAgICAqL1xuXG4gICAgLyoqXG4gICAgICogRW1pdHRlZCBvbmNlIHRoaXMgcmVzb3VyY2UgaGFzIGxvYWRlZCwgaWYgdGhlcmUgd2FzIGFuIGVycm9yIGl0IHdpbGxcbiAgICAgKiBiZSBpbiB0aGUgYGVycm9yYCBwcm9wZXJ0eS5cbiAgICAgKlxuICAgICAqIEBldmVudCBjb21wbGV0ZVxuICAgICAqIEBtZW1iZXJvZiBSZXNvdXJjZSNcbiAgICAgKi9cbn1cblxuUmVzb3VyY2UucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShFdmVudEVtaXR0ZXIucHJvdG90eXBlKTtcblJlc291cmNlLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFJlc291cmNlO1xubW9kdWxlLmV4cG9ydHMgPSBSZXNvdXJjZTtcblxuLyoqXG4gKiBNYXJrcyB0aGUgcmVzb3VyY2UgYXMgY29tcGxldGUuXG4gKlxuICogQGZpcmVzIGNvbXBsZXRlXG4gKi9cblJlc291cmNlLnByb3RvdHlwZS5jb21wbGV0ZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAvLyBUT0RPOiBDbGVhbiB0aGlzIHVwIGluIGEgd3JhcHBlciBvciBzb21ldGhpbmcuLi5ncm9zcy4uLi5cbiAgICBpZiAodGhpcy5kYXRhICYmIHRoaXMuZGF0YS5yZW1vdmVFdmVudExpc3RlbmVyKSB7XG4gICAgICAgIHRoaXMuZGF0YS5yZW1vdmVFdmVudExpc3RlbmVyKCdlcnJvcicsIHRoaXMuX2JvdW5kT25FcnJvcik7XG4gICAgICAgIHRoaXMuZGF0YS5yZW1vdmVFdmVudExpc3RlbmVyKCdsb2FkJywgdGhpcy5fYm91bmRDb21wbGV0ZSk7XG4gICAgICAgIHRoaXMuZGF0YS5yZW1vdmVFdmVudExpc3RlbmVyKCdwcm9ncmVzcycsIHRoaXMuX2JvdW5kT25Qcm9ncmVzcyk7XG4gICAgICAgIHRoaXMuZGF0YS5yZW1vdmVFdmVudExpc3RlbmVyKCdjYW5wbGF5dGhyb3VnaCcsIHRoaXMuX2JvdW5kQ29tcGxldGUpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnhocikge1xuICAgICAgICBpZiAodGhpcy54aHIucmVtb3ZlRXZlbnRMaXN0ZW5lcikge1xuICAgICAgICAgICAgdGhpcy54aHIucmVtb3ZlRXZlbnRMaXN0ZW5lcignZXJyb3InLCB0aGlzLl9ib3VuZFhock9uRXJyb3IpO1xuICAgICAgICAgICAgdGhpcy54aHIucmVtb3ZlRXZlbnRMaXN0ZW5lcignYWJvcnQnLCB0aGlzLl9ib3VuZFhock9uQWJvcnQpO1xuICAgICAgICAgICAgdGhpcy54aHIucmVtb3ZlRXZlbnRMaXN0ZW5lcigncHJvZ3Jlc3MnLCB0aGlzLl9ib3VuZE9uUHJvZ3Jlc3MpO1xuICAgICAgICAgICAgdGhpcy54aHIucmVtb3ZlRXZlbnRMaXN0ZW5lcignbG9hZCcsIHRoaXMuX2JvdW5kWGhyT25Mb2FkKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMueGhyLm9uZXJyb3IgPSBudWxsO1xuICAgICAgICAgICAgdGhpcy54aHIub250aW1lb3V0ID0gbnVsbDtcbiAgICAgICAgICAgIHRoaXMueGhyLm9ucHJvZ3Jlc3MgPSBudWxsO1xuICAgICAgICAgICAgdGhpcy54aHIub25sb2FkID0gbnVsbDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMuZW1pdCgnY29tcGxldGUnLCB0aGlzKTtcbn07XG5cbi8qKlxuICogS2lja3Mgb2ZmIGxvYWRpbmcgb2YgdGhpcyByZXNvdXJjZS5cbiAqXG4gKiBAZmlyZXMgc3RhcnRcbiAqIEBwYXJhbSBbY2FsbGJhY2tdIHtmdW5jdGlvbn0gT3B0aW9uYWwgY2FsbGJhY2sgdG8gY2FsbCBvbmNlIHRoZSByZXNvdXJjZSBpcyBsb2FkZWQuXG4gKi9cblJlc291cmNlLnByb3RvdHlwZS5sb2FkID0gZnVuY3Rpb24gKGNiKSB7XG4gICAgdGhpcy5lbWl0KCdzdGFydCcsIHRoaXMpO1xuXG4gICAgLy8gaWYgYSBjYWxsYmFjayBpcyBzZXQsIGxpc3RlbiBmb3IgY29tcGxldGUgZXZlbnRcbiAgICBpZiAoY2IpIHtcbiAgICAgICAgdGhpcy5vbmNlKCdjb21wbGV0ZScsIGNiKTtcbiAgICB9XG5cbiAgICAvLyBpZiB1bnNldCwgZGV0ZXJtaW5lIHRoZSB2YWx1ZVxuICAgIGlmICh0aGlzLmNyb3NzT3JpZ2luID09PSBmYWxzZSB8fCB0eXBlb2YgdGhpcy5jcm9zc09yaWdpbiAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgdGhpcy5jcm9zc09yaWdpbiA9IHRoaXMuX2RldGVybWluZUNyb3NzT3JpZ2luKHRoaXMudXJsKTtcbiAgICB9XG5cbiAgICBzd2l0Y2godGhpcy5sb2FkVHlwZSkge1xuICAgICAgICBjYXNlIFJlc291cmNlLkxPQURfVFlQRS5JTUFHRTpcbiAgICAgICAgICAgIHRoaXMuX2xvYWRJbWFnZSgpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSBSZXNvdXJjZS5MT0FEX1RZUEUuQVVESU86XG4gICAgICAgICAgICB0aGlzLl9sb2FkRWxlbWVudCgnYXVkaW8nKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgUmVzb3VyY2UuTE9BRF9UWVBFLlZJREVPOlxuICAgICAgICAgICAgdGhpcy5fbG9hZEVsZW1lbnQoJ3ZpZGVvJyk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIFJlc291cmNlLkxPQURfVFlQRS5YSFI6XG4gICAgICAgICAgICAvKiBmYWxscyB0aHJvdWdoICovXG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICBpZiAodXNlWGRyICYmIHRoaXMuY3Jvc3NPcmlnaW4pIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9sb2FkWGRyKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9sb2FkWGhyKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBicmVhaztcbiAgICB9XG59O1xuXG4vKipcbiAqIExvYWRzIHRoaXMgcmVzb3VyY2VzIHVzaW5nIGFuIEltYWdlIG9iamVjdC5cbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5SZXNvdXJjZS5wcm90b3R5cGUuX2xvYWRJbWFnZSA9IGZ1bmN0aW9uICgpIHtcbiAgICB0aGlzLmRhdGEgPSBuZXcgSW1hZ2UoKTtcblxuICAgIGlmICh0aGlzLmNyb3NzT3JpZ2luKSB7XG4gICAgICAgIHRoaXMuZGF0YS5jcm9zc09yaWdpbiA9IHRoaXMuY3Jvc3NPcmlnaW47XG4gICAgfVxuXG4gICAgdGhpcy5kYXRhLnNyYyA9IHRoaXMudXJsO1xuXG4gICAgdGhpcy5pc0ltYWdlID0gdHJ1ZTtcblxuICAgIHRoaXMuZGF0YS5hZGRFdmVudExpc3RlbmVyKCdlcnJvcicsIHRoaXMuX2JvdW5kT25FcnJvciwgZmFsc2UpO1xuICAgIHRoaXMuZGF0YS5hZGRFdmVudExpc3RlbmVyKCdsb2FkJywgdGhpcy5fYm91bmRDb21wbGV0ZSwgZmFsc2UpO1xuICAgIHRoaXMuZGF0YS5hZGRFdmVudExpc3RlbmVyKCdwcm9ncmVzcycsIHRoaXMuX2JvdW5kT25Qcm9ncmVzcywgZmFsc2UpO1xufTtcblxuLyoqXG4gKiBMb2FkcyB0aGlzIHJlc291cmNlcyB1c2luZyBhbiBIVE1MQXVkaW9FbGVtZW50IG9yIEhUTUxWaWRlb0VsZW1lbnQuXG4gKlxuICogQHByaXZhdGVcbiAqL1xuUmVzb3VyY2UucHJvdG90eXBlLl9sb2FkRWxlbWVudCA9IGZ1bmN0aW9uICh0eXBlKSB7XG4gICAgaWYgKHR5cGUgPT09ICdhdWRpbycgJiYgdHlwZW9mIEF1ZGlvICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICB0aGlzLmRhdGEgPSBuZXcgQXVkaW8oKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHRoaXMuZGF0YSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQodHlwZSk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuZGF0YSA9PT0gbnVsbCkge1xuICAgICAgICB0aGlzLmVycm9yID0gbmV3IEVycm9yKCdVbnN1cHBvcnRlZCBlbGVtZW50ICcgKyB0eXBlKTtcbiAgICAgICAgdGhpcy5jb21wbGV0ZSgpO1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gc3VwcG9ydCBmb3IgQ29jb29uSlMgQ2FudmFzKyBydW50aW1lLCBsYWNrcyBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzb3VyY2UnKVxuICAgIGlmIChuYXZpZ2F0b3IuaXNDb2Nvb25KUykge1xuICAgICAgICB0aGlzLmRhdGEuc3JjID0gQXJyYXkuaXNBcnJheSh0aGlzLnVybCkgPyB0aGlzLnVybFswXSA6IHRoaXMudXJsO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkodGhpcy51cmwpKSB7XG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMudXJsLmxlbmd0aDsgKytpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5kYXRhLmFwcGVuZENoaWxkKHRoaXMuX2NyZWF0ZVNvdXJjZSh0eXBlLCB0aGlzLnVybFtpXSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5kYXRhLmFwcGVuZENoaWxkKHRoaXMuX2NyZWF0ZVNvdXJjZSh0eXBlLCB0aGlzLnVybCkpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgdGhpc1snaXMnICsgdHlwZVswXS50b1VwcGVyQ2FzZSgpICsgdHlwZS5zdWJzdHJpbmcoMSldID0gdHJ1ZTtcblxuICAgIHRoaXMuZGF0YS5hZGRFdmVudExpc3RlbmVyKCdlcnJvcicsIHRoaXMuX2JvdW5kT25FcnJvciwgZmFsc2UpO1xuICAgIHRoaXMuZGF0YS5hZGRFdmVudExpc3RlbmVyKCdsb2FkJywgdGhpcy5fYm91bmRDb21wbGV0ZSwgZmFsc2UpO1xuICAgIHRoaXMuZGF0YS5hZGRFdmVudExpc3RlbmVyKCdwcm9ncmVzcycsIHRoaXMuX2JvdW5kT25Qcm9ncmVzcywgZmFsc2UpO1xuICAgIHRoaXMuZGF0YS5hZGRFdmVudExpc3RlbmVyKCdjYW5wbGF5dGhyb3VnaCcsIHRoaXMuX2JvdW5kQ29tcGxldGUsIGZhbHNlKTtcblxuICAgIHRoaXMuZGF0YS5sb2FkKCk7XG59O1xuXG4vKipcbiAqIExvYWRzIHRoaXMgcmVzb3VyY2VzIHVzaW5nIGFuIFhNTEh0dHBSZXF1ZXN0LlxuICpcbiAqIEBwcml2YXRlXG4gKi9cblJlc291cmNlLnByb3RvdHlwZS5fbG9hZFhociA9IGZ1bmN0aW9uICgpIHtcbiAgICAvLyBpZiB1bnNldCwgZGV0ZXJtaW5lIHRoZSB2YWx1ZVxuICAgIGlmICh0eXBlb2YgdGhpcy54aHJUeXBlICE9PSAnc3RyaW5nJykge1xuICAgICAgICB0aGlzLnhoclR5cGUgPSB0aGlzLl9kZXRlcm1pbmVYaHJUeXBlKCk7XG4gICAgfVxuXG4gICAgdmFyIHhociA9IHRoaXMueGhyID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7XG5cbiAgICAvLyBzZXQgdGhlIHJlcXVlc3QgdHlwZSBhbmQgdXJsXG4gICAgeGhyLm9wZW4oJ0dFVCcsIHRoaXMudXJsLCB0cnVlKTtcblxuICAgIC8vIGxvYWQganNvbiBhcyB0ZXh0IGFuZCBwYXJzZSBpdCBvdXJzZWx2ZXMuIFdlIGRvIHRoaXMgYmVjYXVzZSBzb21lIGJyb3dzZXJzXG4gICAgLy8gKmNvdWdoKiBzYWZhcmkgKmNvdWdoKiBjYW4ndCBkZWFsIHdpdGggaXQuXG4gICAgaWYgKHRoaXMueGhyVHlwZSA9PT0gUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuSlNPTiB8fCB0aGlzLnhoclR5cGUgPT09IFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkRPQ1VNRU5UKSB7XG4gICAgICAgIHhoci5yZXNwb25zZVR5cGUgPSBSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRS5URVhUO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgeGhyLnJlc3BvbnNlVHlwZSA9IHRoaXMueGhyVHlwZTtcbiAgICB9XG5cbiAgICB4aHIuYWRkRXZlbnRMaXN0ZW5lcignZXJyb3InLCB0aGlzLl9ib3VuZFhock9uRXJyb3IsIGZhbHNlKTtcbiAgICB4aHIuYWRkRXZlbnRMaXN0ZW5lcignYWJvcnQnLCB0aGlzLl9ib3VuZFhock9uQWJvcnQsIGZhbHNlKTtcbiAgICB4aHIuYWRkRXZlbnRMaXN0ZW5lcigncHJvZ3Jlc3MnLCB0aGlzLl9ib3VuZE9uUHJvZ3Jlc3MsIGZhbHNlKTtcbiAgICB4aHIuYWRkRXZlbnRMaXN0ZW5lcignbG9hZCcsIHRoaXMuX2JvdW5kWGhyT25Mb2FkLCBmYWxzZSk7XG5cbiAgICB4aHIuc2VuZCgpO1xufTtcblxuLyoqXG4gKiBMb2FkcyB0aGlzIHJlc291cmNlcyB1c2luZyBhbiBYRG9tYWluUmVxdWVzdC4gVGhpcyBpcyBoZXJlIGJlY2F1c2Ugd2UgbmVlZCB0byBzdXBwb3J0IElFOSAoZ3Jvc3MpLlxuICpcbiAqIEBwcml2YXRlXG4gKi9cblJlc291cmNlLnByb3RvdHlwZS5fbG9hZFhkciA9IGZ1bmN0aW9uICgpIHtcbiAgICAvLyBpZiB1bnNldCwgZGV0ZXJtaW5lIHRoZSB2YWx1ZVxuICAgIGlmICh0eXBlb2YgdGhpcy54aHJUeXBlICE9PSAnc3RyaW5nJykge1xuICAgICAgICB0aGlzLnhoclR5cGUgPSB0aGlzLl9kZXRlcm1pbmVYaHJUeXBlKCk7XG4gICAgfVxuXG4gICAgdmFyIHhkciA9IHRoaXMueGhyID0gbmV3IFhEb21haW5SZXF1ZXN0KCk7XG5cbiAgICAvLyBYRG9tYWluUmVxdWVzdCBoYXMgYSBmZXcgcXVpcmtzLiBPY2Nhc2lvbmFsbHkgaXQgd2lsbCBhYm9ydCByZXF1ZXN0c1xuICAgIC8vIEEgd2F5IHRvIGF2b2lkIHRoaXMgaXMgdG8gbWFrZSBzdXJlIEFMTCBjYWxsYmFja3MgYXJlIHNldCBldmVuIGlmIG5vdCB1c2VkXG4gICAgLy8gTW9yZSBpbmZvIGhlcmU6IGh0dHA6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvMTU3ODY5NjYveGRvbWFpbnJlcXVlc3QtYWJvcnRzLXBvc3Qtb24taWUtOVxuICAgIHhkci50aW1lb3V0ID0gNTAwMDtcblxuICAgIHhkci5vbmVycm9yID0gdGhpcy5fYm91bmRYaHJPbkVycm9yO1xuICAgIHhkci5vbnRpbWVvdXQgPSB0aGlzLl9ib3VuZFhkck9uVGltZW91dDtcbiAgICB4ZHIub25wcm9ncmVzcyA9IHRoaXMuX2JvdW5kT25Qcm9ncmVzcztcbiAgICB4ZHIub25sb2FkID0gdGhpcy5fYm91bmRYaHJPbkxvYWQ7XG5cbiAgICB4ZHIub3BlbignR0VUJywgdGhpcy51cmwsIHRydWUpO1xuXG4gICAgLy8gIE5vdGU6IFRoZSB4ZHIuc2VuZCgpIGNhbGwgaXMgd3JhcHBlZCBpbiBhIHRpbWVvdXQgdG8gcHJldmVudCBhbiBpc3N1ZSB3aXRoIHRoZSBpbnRlcmZhY2Ugd2hlcmUgc29tZSByZXF1ZXN0cyBhcmUgbG9zdFxuICAgIC8vICBpZiBtdWx0aXBsZSBYRG9tYWluUmVxdWVzdHMgYXJlIGJlaW5nIHNlbnQgYXQgdGhlIHNhbWUgdGltZS5cbiAgICAvLyBTb21lIGluZm8gaGVyZTogaHR0cHM6Ly9naXRodWIuY29tL3Bob3RvbnN0b3JtL3BoYXNlci9pc3N1ZXMvMTI0OFxuICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgICB4ZHIuc2VuZCgpO1xuICAgIH0sIDApO1xufTtcblxuLyoqXG4gKiBDcmVhdGVzIGEgc291cmNlIHVzZWQgaW4gbG9hZGluZyB2aWEgYW4gZWxlbWVudC5cbiAqXG4gKiBAcGFyYW0gdHlwZSB7c3RyaW5nfSBUaGUgZWxlbWVudCB0eXBlICh2aWRlbyBvciBhdWRpbykuXG4gKiBAcGFyYW0gdXJsIHtzdHJpbmd9IFRoZSBzb3VyY2UgVVJMIHRvIGxvYWQgZnJvbS5cbiAqIEBwYXJhbSBbbWltZV0ge3N0cmluZ30gVGhlIG1pbWUgdHlwZSBvZiB0aGUgdmlkZW9cbiAqIEBwcml2YXRlXG4gKi9cblJlc291cmNlLnByb3RvdHlwZS5fY3JlYXRlU291cmNlID0gZnVuY3Rpb24gKHR5cGUsIHVybCwgbWltZSkge1xuICAgIGlmICghbWltZSkge1xuICAgICAgICBtaW1lID0gdHlwZSArICcvJyArIHVybC5zdWJzdHIodXJsLmxhc3RJbmRleE9mKCcuJykgKyAxKTtcbiAgICB9XG5cbiAgICB2YXIgc291cmNlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc291cmNlJyk7XG5cbiAgICBzb3VyY2Uuc3JjID0gdXJsO1xuICAgIHNvdXJjZS50eXBlID0gbWltZTtcblxuICAgIHJldHVybiBzb3VyY2U7XG59O1xuXG4vKipcbiAqIENhbGxlZCBpZiBhIGxvYWQgZXJyb3JzIG91dC5cbiAqXG4gKiBAcGFyYW0gZXZlbnQge0V2ZW50fSBUaGUgZXJyb3IgZXZlbnQgZnJvbSB0aGUgZWxlbWVudCB0aGF0IGVtaXRzIGl0LlxuICogQHByaXZhdGVcbiAqL1xuUmVzb3VyY2UucHJvdG90eXBlLl9vbkVycm9yID0gZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgdGhpcy5lcnJvciA9IG5ldyBFcnJvcignRmFpbGVkIHRvIGxvYWQgZWxlbWVudCB1c2luZyAnICsgZXZlbnQudGFyZ2V0Lm5vZGVOYW1lKTtcbiAgICB0aGlzLmNvbXBsZXRlKCk7XG59O1xuXG4vKipcbiAqIENhbGxlZCBpZiBhIGxvYWQgcHJvZ3Jlc3MgZXZlbnQgZmlyZXMgZm9yIHhoci94ZHIuXG4gKlxuICogQGZpcmVzIHByb2dyZXNzXG4gKiBAcGFyYW0gZXZlbnQge1hNTEh0dHBSZXF1ZXN0UHJvZ3Jlc3NFdmVudHxFdmVudH1cbiAqIEBwcml2YXRlXG4gKi9cblJlc291cmNlLnByb3RvdHlwZS5fb25Qcm9ncmVzcyA9ICBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICBpZiAoZXZlbnQgJiYgZXZlbnQubGVuZ3RoQ29tcHV0YWJsZSkge1xuICAgICAgICB0aGlzLmVtaXQoJ3Byb2dyZXNzJywgdGhpcywgZXZlbnQubG9hZGVkIC8gZXZlbnQudG90YWwpO1xuICAgIH1cbn07XG5cbi8qKlxuICogQ2FsbGVkIGlmIGFuIGVycm9yIGV2ZW50IGZpcmVzIGZvciB4aHIveGRyLlxuICpcbiAqIEBwYXJhbSBldmVudCB7WE1MSHR0cFJlcXVlc3RFcnJvckV2ZW50fEV2ZW50fVxuICogQHByaXZhdGVcbiAqL1xuUmVzb3VyY2UucHJvdG90eXBlLl94aHJPbkVycm9yID0gZnVuY3Rpb24gKCkge1xuICAgIHRoaXMuZXJyb3IgPSBuZXcgRXJyb3IoXG4gICAgICAgIHJlcVR5cGUodGhpcy54aHIpICsgJyBSZXF1ZXN0IGZhaWxlZC4gJyArXG4gICAgICAgICdTdGF0dXM6ICcgKyB0aGlzLnhoci5zdGF0dXMgKyAnLCB0ZXh0OiBcIicgKyB0aGlzLnhoci5zdGF0dXNUZXh0ICsgJ1wiJ1xuICAgICk7XG5cbiAgICB0aGlzLmNvbXBsZXRlKCk7XG59O1xuXG4vKipcbiAqIENhbGxlZCBpZiBhbiBhYm9ydCBldmVudCBmaXJlcyBmb3IgeGhyLlxuICpcbiAqIEBwYXJhbSBldmVudCB7WE1MSHR0cFJlcXVlc3RBYm9ydEV2ZW50fVxuICogQHByaXZhdGVcbiAqL1xuUmVzb3VyY2UucHJvdG90eXBlLl94aHJPbkFib3J0ID0gZnVuY3Rpb24gKCkge1xuICAgIHRoaXMuZXJyb3IgPSBuZXcgRXJyb3IocmVxVHlwZSh0aGlzLnhocikgKyAnIFJlcXVlc3Qgd2FzIGFib3J0ZWQgYnkgdGhlIHVzZXIuJyk7XG4gICAgdGhpcy5jb21wbGV0ZSgpO1xufTtcblxuLyoqXG4gKiBDYWxsZWQgaWYgYSB0aW1lb3V0IGV2ZW50IGZpcmVzIGZvciB4ZHIuXG4gKlxuICogQHBhcmFtIGV2ZW50IHtFdmVudH1cbiAqIEBwcml2YXRlXG4gKi9cblJlc291cmNlLnByb3RvdHlwZS5feGRyT25UaW1lb3V0ID0gZnVuY3Rpb24gKCkge1xuICAgIHRoaXMuZXJyb3IgPSBuZXcgRXJyb3IocmVxVHlwZSh0aGlzLnhocikgKyAnIFJlcXVlc3QgdGltZWQgb3V0LicpO1xuICAgIHRoaXMuY29tcGxldGUoKTtcbn07XG5cbi8qKlxuICogQ2FsbGVkIHdoZW4gZGF0YSBzdWNjZXNzZnVsbHkgbG9hZHMgZnJvbSBhbiB4aHIveGRyIHJlcXVlc3QuXG4gKlxuICogQHBhcmFtIGV2ZW50IHtYTUxIdHRwUmVxdWVzdExvYWRFdmVudHxFdmVudH1cbiAqIEBwcml2YXRlXG4gKi9cblJlc291cmNlLnByb3RvdHlwZS5feGhyT25Mb2FkID0gZnVuY3Rpb24gKCkge1xuICAgIHZhciB4aHIgPSB0aGlzLnhocixcbiAgICAgICAgc3RhdHVzID0geGhyLnN0YXR1cyAhPT0gdW5kZWZpbmVkID8geGhyLnN0YXR1cyA6IDIwMDsgLy9YRFIgaGFzIG5vIGAuc3RhdHVzYCwgYXNzdW1lIDIwMC5cblxuICAgIC8vIHN0YXR1cyBjYW4gYmUgMCB3aGVuIHVzaW5nIHRoZSBmaWxlOi8vIHByb3RvY29sLCBhbHNvIGNoZWNrIGlmIGEgcmVzcG9uc2Ugd2FzIGZvdW5kXG4gICAgaWYgKHN0YXR1cyA9PT0gMjAwIHx8IHN0YXR1cyA9PT0gMjA0IHx8IChzdGF0dXMgPT09IDAgJiYgeGhyLnJlc3BvbnNlVGV4dC5sZW5ndGggPiAwKSkge1xuICAgICAgICAvLyBpZiB0ZXh0LCBqdXN0IHJldHVybiBpdFxuICAgICAgICBpZiAodGhpcy54aHJUeXBlID09PSBSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRS5URVhUKSB7XG4gICAgICAgICAgICB0aGlzLmRhdGEgPSB4aHIucmVzcG9uc2VUZXh0O1xuICAgICAgICB9XG4gICAgICAgIC8vIGlmIGpzb24sIHBhcnNlIGludG8ganNvbiBvYmplY3RcbiAgICAgICAgZWxzZSBpZiAodGhpcy54aHJUeXBlID09PSBSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRS5KU09OKSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIHRoaXMuZGF0YSA9IEpTT04ucGFyc2UoeGhyLnJlc3BvbnNlVGV4dCk7XG4gICAgICAgICAgICAgICAgdGhpcy5pc0pzb24gPSB0cnVlO1xuICAgICAgICAgICAgfSBjYXRjaChlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5lcnJvciA9IG5ldyBFcnJvcignRXJyb3IgdHJ5aW5nIHRvIHBhcnNlIGxvYWRlZCBqc29uOicsIGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIGlmIHhtbCwgcGFyc2UgaW50byBhbiB4bWwgZG9jdW1lbnQgb3IgZGl2IGVsZW1lbnRcbiAgICAgICAgZWxzZSBpZiAodGhpcy54aHJUeXBlID09PSBSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRS5ET0NVTUVOVCkge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBpZiAod2luZG93LkRPTVBhcnNlcikge1xuICAgICAgICAgICAgICAgICAgICB2YXIgZG9tcGFyc2VyID0gbmV3IERPTVBhcnNlcigpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmRhdGEgPSBkb21wYXJzZXIucGFyc2VGcm9tU3RyaW5nKHhoci5yZXNwb25zZVRleHQsICd0ZXh0L3htbCcpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICAgICAgICAgICAgICBkaXYuaW5uZXJIVE1MID0geGhyLnJlc3BvbnNlVGV4dDtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kYXRhID0gZGl2O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzLmlzWG1sID0gdHJ1ZTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmVycm9yID0gbmV3IEVycm9yKCdFcnJvciB0cnlpbmcgdG8gcGFyc2UgbG9hZGVkIHhtbDonLCBlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvLyBvdGhlciB0eXBlcyBqdXN0IHJldHVybiB0aGUgcmVzcG9uc2VcbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmRhdGEgPSB4aHIucmVzcG9uc2UgfHwgeGhyLnJlc3BvbnNlVGV4dDtcbiAgICAgICAgfVxuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgdGhpcy5lcnJvciA9IG5ldyBFcnJvcignWycgKyB4aHIuc3RhdHVzICsgJ10nICsgeGhyLnN0YXR1c1RleHQgKyAnOicgKyB4aHIucmVzcG9uc2VVUkwpO1xuICAgIH1cblxuICAgIHRoaXMuY29tcGxldGUoKTtcbn07XG5cbmZ1bmN0aW9uIHJlcVR5cGUoeGhyKSB7XG4gICAgcmV0dXJuIHhoci50b1N0cmluZygpLnJlcGxhY2UoJ29iamVjdCAnLCAnJyk7XG59XG5cbi8qKlxuICogU2V0cyB0aGUgYGNyb3NzT3JpZ2luYCBwcm9wZXJ0eSBmb3IgdGhpcyByZXNvdXJjZSBiYXNlZCBvbiBpZiB0aGUgdXJsXG4gKiBmb3IgdGhpcyByZXNvdXJjZSBpcyBjcm9zcy1vcmlnaW4uIElmIGNyb3NzT3JpZ2luIHdhcyBtYW51YWxseSBzZXQsIHRoaXNcbiAqIGZ1bmN0aW9uIGRvZXMgbm90aGluZy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHVybCB7c3RyaW5nfSBUaGUgdXJsIHRvIHRlc3QuXG4gKiBAcGFyYW0gW2xvY2F0aW9uPXdpbmRvdy5sb2NhdGlvbl0ge29iamVjdH0gVGhlIGxvY2F0aW9uIG9iamVjdCB0byB0ZXN0IGFnYWluc3QuXG4gKiBAcmV0dXJuIHtzdHJpbmd9IFRoZSBjcm9zc09yaWdpbiB2YWx1ZSB0byB1c2UgKG9yIGVtcHR5IHN0cmluZyBmb3Igbm9uZSkuXG4gKi9cblJlc291cmNlLnByb3RvdHlwZS5fZGV0ZXJtaW5lQ3Jvc3NPcmlnaW4gPSBmdW5jdGlvbiAodXJsLCBsb2MpIHtcbiAgICAvLyBkYXRhOiBhbmQgamF2YXNjcmlwdDogdXJscyBhcmUgY29uc2lkZXJlZCBzYW1lLW9yaWdpblxuICAgIGlmICh1cmwuaW5kZXhPZignZGF0YTonKSA9PT0gMCkge1xuICAgICAgICByZXR1cm4gJyc7XG4gICAgfVxuXG4gICAgLy8gZGVmYXVsdCBpcyB3aW5kb3cubG9jYXRpb25cbiAgICBsb2MgPSBsb2MgfHwgd2luZG93LmxvY2F0aW9uO1xuXG4gICAgaWYgKCF0ZW1wQW5jaG9yKSB7XG4gICAgICAgIHRlbXBBbmNob3IgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdhJyk7XG4gICAgfVxuXG4gICAgLy8gbGV0IHRoZSBicm93c2VyIGRldGVybWluZSB0aGUgZnVsbCBocmVmIGZvciB0aGUgdXJsIG9mIHRoaXMgcmVzb3VyY2UgYW5kIHRoZW5cbiAgICAvLyBwYXJzZSB3aXRoIHRoZSBub2RlIHVybCBsaWIsIHdlIGNhbid0IHVzZSB0aGUgcHJvcGVydGllcyBvZiB0aGUgYW5jaG9yIGVsZW1lbnRcbiAgICAvLyBiZWNhdXNlIHRoZXkgZG9uJ3Qgd29yayBpbiBJRTkgOihcbiAgICB0ZW1wQW5jaG9yLmhyZWYgPSB1cmw7XG4gICAgdXJsID0gX3VybC5wYXJzZSh0ZW1wQW5jaG9yLmhyZWYpO1xuXG4gICAgdmFyIHNhbWVQb3J0ID0gKCF1cmwucG9ydCAmJiBsb2MucG9ydCA9PT0gJycpIHx8ICh1cmwucG9ydCA9PT0gbG9jLnBvcnQpO1xuXG4gICAgLy8gaWYgY3Jvc3Mgb3JpZ2luXG4gICAgaWYgKHVybC5ob3N0bmFtZSAhPT0gbG9jLmhvc3RuYW1lIHx8ICFzYW1lUG9ydCB8fCB1cmwucHJvdG9jb2wgIT09IGxvYy5wcm90b2NvbCkge1xuICAgICAgICByZXR1cm4gJ2Fub255bW91cyc7XG4gICAgfVxuXG4gICAgcmV0dXJuICcnO1xufTtcblxuLyoqXG4gKiBEZXRlcm1pbmVzIHRoZSByZXNwb25zZVR5cGUgb2YgYW4gWEhSIHJlcXVlc3QgYmFzZWQgb24gdGhlIGV4dGVuc2lvbiBvZiB0aGVcbiAqIHJlc291cmNlIGJlaW5nIGxvYWRlZC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHJldHVybiB7UmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEV9IFRoZSByZXNwb25zZVR5cGUgdG8gdXNlLlxuICovXG5SZXNvdXJjZS5wcm90b3R5cGUuX2RldGVybWluZVhoclR5cGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIFJlc291cmNlLl94aHJUeXBlTWFwW3RoaXMuX2dldEV4dGVuc2lvbigpXSB8fCBSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRS5URVhUO1xufTtcblxuUmVzb3VyY2UucHJvdG90eXBlLl9kZXRlcm1pbmVMb2FkVHlwZSA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gUmVzb3VyY2UuX2xvYWRUeXBlTWFwW3RoaXMuX2dldEV4dGVuc2lvbigpXSB8fCBSZXNvdXJjZS5MT0FEX1RZUEUuWEhSO1xufTtcblxuUmVzb3VyY2UucHJvdG90eXBlLl9nZXRFeHRlbnNpb24gPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHVybCA9IHRoaXMudXJsLFxuICAgICAgICBleHQ7XG5cbiAgICBpZiAodGhpcy5pc0RhdGFVcmwpIHtcbiAgICAgICAgdmFyIHNsYXNoSW5kZXggPSB1cmwuaW5kZXhPZignLycpO1xuICAgICAgICBleHQgPSB1cmwuc3Vic3RyaW5nKHNsYXNoSW5kZXggKyAxLCB1cmwuaW5kZXhPZignOycsIHNsYXNoSW5kZXgpKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHZhciBxdWVyeVN0YXJ0ID0gdXJsLmluZGV4T2YoJz8nKTtcbiAgICAgICAgaWYgKHF1ZXJ5U3RhcnQgIT09IC0xKSB7XG4gICAgICAgICAgICB1cmwgPSB1cmwuc3Vic3RyaW5nKDAsIHF1ZXJ5U3RhcnQpO1xuICAgICAgICB9XG5cbiAgICAgICAgZXh0ID0gdXJsLnN1YnN0cmluZyh1cmwubGFzdEluZGV4T2YoJy4nKSArIDEpO1xuICAgIH1cblxuICAgIHJldHVybiBleHQ7XG59O1xuXG4vKipcbiAqIERldGVybWluZXMgdGhlIG1pbWUgdHlwZSBvZiBhbiBYSFIgcmVxdWVzdCBiYXNlZCBvbiB0aGUgcmVzcG9uc2VUeXBlIG9mXG4gKiByZXNvdXJjZSBiZWluZyBsb2FkZWQuXG4gKlxuICogQHByaXZhdGVcbiAqIEByZXR1cm4ge3N0cmluZ30gVGhlIG1pbWUgdHlwZSB0byB1c2UuXG4gKi9cblJlc291cmNlLnByb3RvdHlwZS5fZ2V0TWltZUZyb21YaHJUeXBlID0gZnVuY3Rpb24gKHR5cGUpIHtcbiAgICBzd2l0Y2godHlwZSkge1xuICAgICAgICBjYXNlIFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkJVRkZFUjpcbiAgICAgICAgICAgIHJldHVybiAnYXBwbGljYXRpb24vb2N0ZXQtYmluYXJ5JztcblxuICAgICAgICBjYXNlIFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkJMT0I6XG4gICAgICAgICAgICByZXR1cm4gJ2FwcGxpY2F0aW9uL2Jsb2InO1xuXG4gICAgICAgIGNhc2UgUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuRE9DVU1FTlQ6XG4gICAgICAgICAgICByZXR1cm4gJ2FwcGxpY2F0aW9uL3htbCc7XG5cbiAgICAgICAgY2FzZSBSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRS5KU09OOlxuICAgICAgICAgICAgcmV0dXJuICdhcHBsaWNhdGlvbi9qc29uJztcblxuICAgICAgICBjYXNlIFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkRFRkFVTFQ6XG4gICAgICAgIGNhc2UgUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuVEVYVDpcbiAgICAgICAgICAgIC8qIGZhbGxzIHRocm91Z2ggKi9cbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIHJldHVybiAndGV4dC9wbGFpbic7XG5cbiAgICB9XG59O1xuXG4vKipcbiAqIFRoZSB0eXBlcyBvZiBsb2FkaW5nIGEgcmVzb3VyY2UgY2FuIHVzZS5cbiAqXG4gKiBAc3RhdGljXG4gKiBAY29uc3RhbnRcbiAqIEBwcm9wZXJ0eSB7b2JqZWN0fSBMT0FEX1RZUEVcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBMT0FEX1RZUEUuWEhSIC0gVXNlcyBYTUxIdHRwUmVxdWVzdCB0byBsb2FkIHRoZSByZXNvdXJjZS5cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBMT0FEX1RZUEUuSU1BR0UgLSBVc2VzIGFuIGBJbWFnZWAgb2JqZWN0IHRvIGxvYWQgdGhlIHJlc291cmNlLlxuICogQHByb3BlcnR5IHtudW1iZXJ9IExPQURfVFlQRS5BVURJTyAtIFVzZXMgYW4gYEF1ZGlvYCBvYmplY3QgdG8gbG9hZCB0aGUgcmVzb3VyY2UuXG4gKiBAcHJvcGVydHkge251bWJlcn0gTE9BRF9UWVBFLlZJREVPIC0gVXNlcyBhIGBWaWRlb2Agb2JqZWN0IHRvIGxvYWQgdGhlIHJlc291cmNlLlxuICovXG5SZXNvdXJjZS5MT0FEX1RZUEUgPSB7XG4gICAgWEhSOiAgICAxLFxuICAgIElNQUdFOiAgMixcbiAgICBBVURJTzogIDMsXG4gICAgVklERU86ICA0XG59O1xuXG4vKipcbiAqIFRoZSBYSFIgcmVhZHkgc3RhdGVzLCB1c2VkIGludGVybmFsbHkuXG4gKlxuICogQHN0YXRpY1xuICogQGNvbnN0YW50XG4gKiBAcHJvcGVydHkge29iamVjdH0gWEhSX1JFQURZX1NUQVRFXG4gKiBAcHJvcGVydHkge251bWJlcn0gWEhSX1JFQURZX1NUQVRFLlVOU0VOVCAtIG9wZW4oKWhhcyBub3QgYmVlbiBjYWxsZWQgeWV0LlxuICogQHByb3BlcnR5IHtudW1iZXJ9IFhIUl9SRUFEWV9TVEFURS5PUEVORUQgLSBzZW5kKCloYXMgbm90IGJlZW4gY2FsbGVkIHlldC5cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBYSFJfUkVBRFlfU1RBVEUuSEVBREVSU19SRUNFSVZFRCAtIHNlbmQoKSBoYXMgYmVlbiBjYWxsZWQsIGFuZCBoZWFkZXJzIGFuZCBzdGF0dXMgYXJlIGF2YWlsYWJsZS5cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBYSFJfUkVBRFlfU1RBVEUuTE9BRElORyAtIERvd25sb2FkaW5nOyByZXNwb25zZVRleHQgaG9sZHMgcGFydGlhbCBkYXRhLlxuICogQHByb3BlcnR5IHtudW1iZXJ9IFhIUl9SRUFEWV9TVEFURS5ET05FIC0gVGhlIG9wZXJhdGlvbiBpcyBjb21wbGV0ZS5cbiAqL1xuUmVzb3VyY2UuWEhSX1JFQURZX1NUQVRFID0ge1xuICAgIFVOU0VOVDogMCxcbiAgICBPUEVORUQ6IDEsXG4gICAgSEVBREVSU19SRUNFSVZFRDogMixcbiAgICBMT0FESU5HOiAzLFxuICAgIERPTkU6IDRcbn07XG5cbi8qKlxuICogVGhlIFhIUiByZWFkeSBzdGF0ZXMsIHVzZWQgaW50ZXJuYWxseS5cbiAqXG4gKiBAc3RhdGljXG4gKiBAY29uc3RhbnRcbiAqIEBwcm9wZXJ0eSB7b2JqZWN0fSBYSFJfUkVTUE9OU0VfVFlQRVxuICogQHByb3BlcnR5IHtzdHJpbmd9IFhIUl9SRVNQT05TRV9UWVBFLkRFRkFVTFQgLSBkZWZhdWx0cyB0byB0ZXh0XG4gKiBAcHJvcGVydHkge3N0cmluZ30gWEhSX1JFU1BPTlNFX1RZUEUuQlVGRkVSIC0gQXJyYXlCdWZmZXJcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBYSFJfUkVTUE9OU0VfVFlQRS5CTE9CIC0gQmxvYlxuICogQHByb3BlcnR5IHtzdHJpbmd9IFhIUl9SRVNQT05TRV9UWVBFLkRPQ1VNRU5UIC0gRG9jdW1lbnRcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBYSFJfUkVTUE9OU0VfVFlQRS5KU09OIC0gT2JqZWN0XG4gKiBAcHJvcGVydHkge3N0cmluZ30gWEhSX1JFU1BPTlNFX1RZUEUuVEVYVCAtIFN0cmluZ1xuICovXG5SZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRSA9IHtcbiAgICBERUZBVUxUOiAgICAndGV4dCcsXG4gICAgQlVGRkVSOiAgICAgJ2FycmF5YnVmZmVyJyxcbiAgICBCTE9COiAgICAgICAnYmxvYicsXG4gICAgRE9DVU1FTlQ6ICAgJ2RvY3VtZW50JyxcbiAgICBKU09OOiAgICAgICAnanNvbicsXG4gICAgVEVYVDogICAgICAgJ3RleHQnXG59O1xuXG5SZXNvdXJjZS5fbG9hZFR5cGVNYXAgPSB7XG4gICAgJ2dpZic6ICAgICAgUmVzb3VyY2UuTE9BRF9UWVBFLklNQUdFLFxuICAgICdwbmcnOiAgICAgIFJlc291cmNlLkxPQURfVFlQRS5JTUFHRSxcbiAgICAnYm1wJzogICAgICBSZXNvdXJjZS5MT0FEX1RZUEUuSU1BR0UsXG4gICAgJ2pwZyc6ICAgICAgUmVzb3VyY2UuTE9BRF9UWVBFLklNQUdFLFxuICAgICdqcGVnJzogICAgIFJlc291cmNlLkxPQURfVFlQRS5JTUFHRSxcbiAgICAndGlmJzogICAgICBSZXNvdXJjZS5MT0FEX1RZUEUuSU1BR0UsXG4gICAgJ3RpZmYnOiAgICAgUmVzb3VyY2UuTE9BRF9UWVBFLklNQUdFLFxuICAgICd3ZWJwJzogICAgIFJlc291cmNlLkxPQURfVFlQRS5JTUFHRSxcbiAgICAndGdhJzogICAgICBSZXNvdXJjZS5MT0FEX1RZUEUuSU1BR0Vcbn07XG5cblJlc291cmNlLl94aHJUeXBlTWFwID0ge1xuICAgIC8vIHhtbFxuICAgICd4aHRtbCc6ICAgIFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkRPQ1VNRU5ULFxuICAgICdodG1sJzogICAgIFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkRPQ1VNRU5ULFxuICAgICdodG0nOiAgICAgIFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkRPQ1VNRU5ULFxuICAgICd4bWwnOiAgICAgIFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkRPQ1VNRU5ULFxuICAgICd0bXgnOiAgICAgIFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkRPQ1VNRU5ULFxuICAgICd0c3gnOiAgICAgIFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkRPQ1VNRU5ULFxuICAgICdzdmcnOiAgICAgIFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkRPQ1VNRU5ULFxuXG4gICAgLy8gaW1hZ2VzXG4gICAgJ2dpZic6ICAgICAgUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuQkxPQixcbiAgICAncG5nJzogICAgICBSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRS5CTE9CLFxuICAgICdibXAnOiAgICAgIFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkJMT0IsXG4gICAgJ2pwZyc6ICAgICAgUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuQkxPQixcbiAgICAnanBlZyc6ICAgICBSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRS5CTE9CLFxuICAgICd0aWYnOiAgICAgIFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkJMT0IsXG4gICAgJ3RpZmYnOiAgICAgUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuQkxPQixcbiAgICAnd2VicCc6ICAgICBSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRS5CTE9CLFxuICAgICd0Z2EnOiAgICAgIFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkJMT0IsXG5cbiAgICAvLyBqc29uXG4gICAgJ2pzb24nOiAgICAgUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuSlNPTixcblxuICAgIC8vIHRleHRcbiAgICAndGV4dCc6ICAgICBSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRS5URVhULFxuICAgICd0eHQnOiAgICAgIFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLlRFWFRcbn07XG5cbi8qKlxuICogU2V0cyB0aGUgbG9hZCB0eXBlIHRvIGJlIHVzZWQgZm9yIGEgc3BlY2lmaWMgZXh0ZW5zaW9uLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBwYXJhbSBleHRuYW1lIHtzdHJpbmd9IFRoZSBleHRlbnNpb24gdG8gc2V0IHRoZSB0eXBlIGZvciwgZS5nLiBcInBuZ1wiIG9yIFwiZm50XCJcbiAqIEBwYXJhbSBsb2FkVHlwZSB7UmVzb3VyY2UuTE9BRF9UWVBFfSBUaGUgbG9hZCB0eXBlIHRvIHNldCBpdCB0by5cbiAqL1xuUmVzb3VyY2Uuc2V0RXh0ZW5zaW9uTG9hZFR5cGUgPSBmdW5jdGlvbiAoZXh0bmFtZSwgbG9hZFR5cGUpIHtcbiAgICBzZXRFeHRNYXAoUmVzb3VyY2UuX2xvYWRUeXBlTWFwLCBleHRuYW1lLCBsb2FkVHlwZSk7XG59O1xuXG4vKipcbiAqIFNldHMgdGhlIGxvYWQgdHlwZSB0byBiZSB1c2VkIGZvciBhIHNwZWNpZmljIGV4dGVuc2lvbi5cbiAqXG4gKiBAc3RhdGljXG4gKiBAcGFyYW0gZXh0bmFtZSB7c3RyaW5nfSBUaGUgZXh0ZW5zaW9uIHRvIHNldCB0aGUgdHlwZSBmb3IsIGUuZy4gXCJwbmdcIiBvciBcImZudFwiXG4gKiBAcGFyYW0geGhyVHlwZSB7UmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEV9IFRoZSB4aHIgdHlwZSB0byBzZXQgaXQgdG8uXG4gKi9cblJlc291cmNlLnNldEV4dGVuc2lvblhoclR5cGUgPSBmdW5jdGlvbiAoZXh0bmFtZSwgeGhyVHlwZSkge1xuICAgIHNldEV4dE1hcChSZXNvdXJjZS5feGhyVHlwZU1hcCwgZXh0bmFtZSwgeGhyVHlwZSk7XG59O1xuXG5mdW5jdGlvbiBzZXRFeHRNYXAobWFwLCBleHRuYW1lLCB2YWwpIHtcbiAgICBpZiAoZXh0bmFtZSAmJiBleHRuYW1lLmluZGV4T2YoJy4nKSA9PT0gMCkge1xuICAgICAgICBleHRuYW1lID0gZXh0bmFtZS5zdWJzdHJpbmcoMSk7XG4gICAgfVxuXG4gICAgaWYgKCFleHRuYW1lKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBtYXBbZXh0bmFtZV0gPSB2YWw7XG59XG4iLCJtb2R1bGUuZXhwb3J0cyA9IHtcblxuICAgIC8vIHByaXZhdGUgcHJvcGVydHlcbiAgICBfa2V5U3RyOiBcIkFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5Ky89XCIsXG5cbiAgICBlbmNvZGVCaW5hcnk6IGZ1bmN0aW9uIChpbnB1dCkge1xuICAgICAgICB2YXIgb3V0cHV0ID0gXCJcIjtcbiAgICAgICAgdmFyIGJ5dGVidWZmZXI7XG4gICAgICAgIHZhciBlbmNvZGVkQ2hhckluZGV4ZXMgPSBuZXcgQXJyYXkoNCk7XG4gICAgICAgIHZhciBpbnggPSAwO1xuICAgICAgICB2YXIgam54ID0gMDtcbiAgICAgICAgdmFyIHBhZGRpbmdCeXRlcyA9IDA7XG5cbiAgICAgICAgd2hpbGUgKGlueCA8IGlucHV0Lmxlbmd0aCkge1xuICAgICAgICAgICAgLy8gRmlsbCBieXRlIGJ1ZmZlciBhcnJheVxuICAgICAgICAgICAgYnl0ZWJ1ZmZlciA9IG5ldyBBcnJheSgzKTtcbiAgICAgICAgICAgIGZvciAoam54ID0gMDsgam54IDwgYnl0ZWJ1ZmZlci5sZW5ndGg7IGpueCsrKSB7XG4gICAgICAgICAgICAgICAgaWYgKGlueCA8IGlucHV0Lmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICAvLyB0aHJvdyBhd2F5IGhpZ2gtb3JkZXIgYnl0ZSwgYXMgZG9jdW1lbnRlZCBhdDpcbiAgICAgICAgICAgICAgICAgICAgLy8gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvRW4vVXNpbmdfWE1MSHR0cFJlcXVlc3QjSGFuZGxpbmdfYmluYXJ5X2RhdGFcbiAgICAgICAgICAgICAgICAgICAgYnl0ZWJ1ZmZlcltqbnhdID0gaW5wdXQuY2hhckNvZGVBdChpbngrKykgJiAweGZmO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgYnl0ZWJ1ZmZlcltqbnhdID0gMDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIEdldCBlYWNoIGVuY29kZWQgY2hhcmFjdGVyLCA2IGJpdHMgYXQgYSB0aW1lXG4gICAgICAgICAgICAvLyBpbmRleCAxOiBmaXJzdCA2IGJpdHNcbiAgICAgICAgICAgIGVuY29kZWRDaGFySW5kZXhlc1swXSA9IGJ5dGVidWZmZXJbMF0gPj4gMjtcbiAgICAgICAgICAgIC8vIGluZGV4IDI6IHNlY29uZCA2IGJpdHMgKDIgbGVhc3Qgc2lnbmlmaWNhbnQgYml0cyBmcm9tIGlucHV0IGJ5dGUgMSArIDQgbW9zdCBzaWduaWZpY2FudCBiaXRzIGZyb20gYnl0ZSAyKVxuICAgICAgICAgICAgZW5jb2RlZENoYXJJbmRleGVzWzFdID0gKChieXRlYnVmZmVyWzBdICYgMHgzKSA8PCA0KSB8IChieXRlYnVmZmVyWzFdID4+IDQpO1xuICAgICAgICAgICAgLy8gaW5kZXggMzogdGhpcmQgNiBiaXRzICg0IGxlYXN0IHNpZ25pZmljYW50IGJpdHMgZnJvbSBpbnB1dCBieXRlIDIgKyAyIG1vc3Qgc2lnbmlmaWNhbnQgYml0cyBmcm9tIGJ5dGUgMylcbiAgICAgICAgICAgIGVuY29kZWRDaGFySW5kZXhlc1syXSA9ICgoYnl0ZWJ1ZmZlclsxXSAmIDB4MGYpIDw8IDIpIHwgKGJ5dGVidWZmZXJbMl0gPj4gNik7XG4gICAgICAgICAgICAvLyBpbmRleCAzOiBmb3J0aCA2IGJpdHMgKDYgbGVhc3Qgc2lnbmlmaWNhbnQgYml0cyBmcm9tIGlucHV0IGJ5dGUgMylcbiAgICAgICAgICAgIGVuY29kZWRDaGFySW5kZXhlc1szXSA9IGJ5dGVidWZmZXJbMl0gJiAweDNmO1xuXG4gICAgICAgICAgICAvLyBEZXRlcm1pbmUgd2hldGhlciBwYWRkaW5nIGhhcHBlbmVkLCBhbmQgYWRqdXN0IGFjY29yZGluZ2x5XG4gICAgICAgICAgICBwYWRkaW5nQnl0ZXMgPSBpbnggLSAoaW5wdXQubGVuZ3RoIC0gMSk7XG4gICAgICAgICAgICBzd2l0Y2ggKHBhZGRpbmdCeXRlcykge1xuICAgICAgICAgICAgICAgIGNhc2UgMjpcbiAgICAgICAgICAgICAgICAgICAgLy8gU2V0IGxhc3QgMiBjaGFyYWN0ZXJzIHRvIHBhZGRpbmcgY2hhclxuICAgICAgICAgICAgICAgICAgICBlbmNvZGVkQ2hhckluZGV4ZXNbM10gPSA2NDtcbiAgICAgICAgICAgICAgICAgICAgZW5jb2RlZENoYXJJbmRleGVzWzJdID0gNjQ7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgY2FzZSAxOlxuICAgICAgICAgICAgICAgICAgICAvLyBTZXQgbGFzdCBjaGFyYWN0ZXIgdG8gcGFkZGluZyBjaGFyXG4gICAgICAgICAgICAgICAgICAgIGVuY29kZWRDaGFySW5kZXhlc1szXSA9IDY0O1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrOyAvLyBObyBwYWRkaW5nIC0gcHJvY2VlZFxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBOb3cgd2Ugd2lsbCBncmFiIGVhY2ggYXBwcm9wcmlhdGUgY2hhcmFjdGVyIG91dCBvZiBvdXIga2V5c3RyaW5nXG4gICAgICAgICAgICAvLyBiYXNlZCBvbiBvdXIgaW5kZXggYXJyYXkgYW5kIGFwcGVuZCBpdCB0byB0aGUgb3V0cHV0IHN0cmluZ1xuICAgICAgICAgICAgZm9yIChqbnggPSAwOyBqbnggPCBlbmNvZGVkQ2hhckluZGV4ZXMubGVuZ3RoOyBqbngrKykge1xuICAgICAgICAgICAgICAgIG91dHB1dCArPSB0aGlzLl9rZXlTdHIuY2hhckF0KGVuY29kZWRDaGFySW5kZXhlc1tqbnhdKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gb3V0cHV0O1xuICAgIH1cbn07XG4iLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vTG9hZGVyJyk7XG5cbm1vZHVsZS5leHBvcnRzLlJlc291cmNlID0gcmVxdWlyZSgnLi9SZXNvdXJjZScpO1xuXG5tb2R1bGUuZXhwb3J0cy5taWRkbGV3YXJlID0ge1xuICAgIGNhY2hpbmc6IHtcbiAgICAgICAgbWVtb3J5OiByZXF1aXJlKCcuL21pZGRsZXdhcmVzL2NhY2hpbmcvbWVtb3J5JylcbiAgICB9LFxuICAgIHBhcnNpbmc6IHtcbiAgICAgICAgYmxvYjogcmVxdWlyZSgnLi9taWRkbGV3YXJlcy9wYXJzaW5nL2Jsb2InKVxuICAgIH1cbn07XG4iLCIvLyBhIHNpbXBsZSBpbi1tZW1vcnkgY2FjaGUgZm9yIHJlc291cmNlc1xudmFyIGNhY2hlID0ge307XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBmdW5jdGlvbiAocmVzb3VyY2UsIG5leHQpIHtcbiAgICAgICAgLy8gaWYgY2FjaGVkLCB0aGVuIHNldCBkYXRhIGFuZCBjb21wbGV0ZSB0aGUgcmVzb3VyY2VcbiAgICAgICAgaWYgKGNhY2hlW3Jlc291cmNlLnVybF0pIHtcbiAgICAgICAgICAgIHJlc291cmNlLmRhdGEgPSBjYWNoZVtyZXNvdXJjZS51cmxdO1xuICAgICAgICAgICAgcmVzb3VyY2UuY29tcGxldGUoKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBpZiBub3QgY2FjaGVkLCB3YWl0IGZvciBjb21wbGV0ZSBhbmQgc3RvcmUgaXQgaW4gdGhlIGNhY2hlLlxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJlc291cmNlLm9uY2UoJ2NvbXBsZXRlJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgY2FjaGVbdGhpcy51cmxdID0gdGhpcy5kYXRhO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgXG4gICAgICAgIG5leHQoKTtcbiAgICB9O1xufTtcbiIsInZhciBSZXNvdXJjZSA9IHJlcXVpcmUoJy4uLy4uL1Jlc291cmNlJyksXG4gICAgYjY0ID0gcmVxdWlyZSgnLi4vLi4vYjY0Jyk7XG5cbndpbmRvdy5VUkwgPSB3aW5kb3cuVVJMIHx8IHdpbmRvdy53ZWJraXRVUkw7XG5cbi8vIGEgbWlkZGxld2FyZSBmb3IgdHJhbnNmb3JtaW5nIFhIUiBsb2FkZWQgQmxvYnMgaW50byBtb3JlIHVzZWZ1bCBvYmplY3RzXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBmdW5jdGlvbiAocmVzb3VyY2UsIG5leHQpIHtcbiAgICAgICAgaWYgKCFyZXNvdXJjZS5kYXRhKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV4dCgpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gaWYgdGhpcyB3YXMgYW4gWEhSIGxvYWQgb2YgYSBibG9iXG4gICAgICAgIGlmIChyZXNvdXJjZS54aHIgJiYgcmVzb3VyY2UueGhyVHlwZSA9PT0gUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuQkxPQikge1xuICAgICAgICAgICAgLy8gaWYgdGhlcmUgaXMgbm8gYmxvYiBzdXBwb3J0IHdlIHByb2JhYmx5IGdvdCBhIGJpbmFyeSBzdHJpbmcgYmFja1xuICAgICAgICAgICAgaWYgKCF3aW5kb3cuQmxvYiB8fCB0eXBlb2YgcmVzb3VyY2UuZGF0YSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgICAgICB2YXIgdHlwZSA9IHJlc291cmNlLnhoci5nZXRSZXNwb25zZUhlYWRlcignY29udGVudC10eXBlJyk7XG5cbiAgICAgICAgICAgICAgICAvLyB0aGlzIGlzIGFuIGltYWdlLCBjb252ZXJ0IHRoZSBiaW5hcnkgc3RyaW5nIGludG8gYSBkYXRhIHVybFxuICAgICAgICAgICAgICAgIGlmICh0eXBlICYmIHR5cGUuaW5kZXhPZignaW1hZ2UnKSA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICByZXNvdXJjZS5kYXRhID0gbmV3IEltYWdlKCk7XG4gICAgICAgICAgICAgICAgICAgIHJlc291cmNlLmRhdGEuc3JjID0gJ2RhdGE6JyArIHR5cGUgKyAnO2Jhc2U2NCwnICsgYjY0LmVuY29kZUJpbmFyeShyZXNvdXJjZS54aHIucmVzcG9uc2VUZXh0KTtcblxuICAgICAgICAgICAgICAgICAgICByZXNvdXJjZS5pc0ltYWdlID0gdHJ1ZTtcblxuICAgICAgICAgICAgICAgICAgICAvLyB3YWl0IHVudGlsIHRoZSBpbWFnZSBsb2FkcyBhbmQgdGhlbiBjYWxsYmFja1xuICAgICAgICAgICAgICAgICAgICByZXNvdXJjZS5kYXRhLm9ubG9hZCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc291cmNlLmRhdGEub25sb2FkID0gbnVsbDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgbmV4dCgpO1xuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIGlmIGNvbnRlbnQgdHlwZSBzYXlzIHRoaXMgaXMgYW4gaW1hZ2UsIHRoZW4gd2Ugc2hvdWxkIHRyYW5zZm9ybSB0aGUgYmxvYiBpbnRvIGFuIEltYWdlIG9iamVjdFxuICAgICAgICAgICAgZWxzZSBpZiAocmVzb3VyY2UuZGF0YS50eXBlLmluZGV4T2YoJ2ltYWdlJykgPT09IDApIHtcbiAgICAgICAgICAgICAgICB2YXIgc3JjID0gVVJMLmNyZWF0ZU9iamVjdFVSTChyZXNvdXJjZS5kYXRhKTtcblxuICAgICAgICAgICAgICAgIHJlc291cmNlLmJsb2IgPSByZXNvdXJjZS5kYXRhO1xuICAgICAgICAgICAgICAgIHJlc291cmNlLmRhdGEgPSBuZXcgSW1hZ2UoKTtcbiAgICAgICAgICAgICAgICByZXNvdXJjZS5kYXRhLnNyYyA9IHNyYztcblxuICAgICAgICAgICAgICAgIHJlc291cmNlLmlzSW1hZ2UgPSB0cnVlO1xuXG4gICAgICAgICAgICAgICAgLy8gY2xlYW51cCB0aGUgbm8gbG9uZ2VyIHVzZWQgYmxvYiBhZnRlciB0aGUgaW1hZ2UgbG9hZHNcbiAgICAgICAgICAgICAgICByZXNvdXJjZS5kYXRhLm9ubG9hZCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgVVJMLnJldm9rZU9iamVjdFVSTChzcmMpO1xuICAgICAgICAgICAgICAgICAgICByZXNvdXJjZS5kYXRhLm9ubG9hZCA9IG51bGw7XG5cbiAgICAgICAgICAgICAgICAgICAgbmV4dCgpO1xuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBuZXh0KCk7XG4gICAgICAgIH1cbiAgICB9O1xufTtcbiIsIm1vZHVsZS5leHBvcnRzPXtcbiAgXCJuYW1lXCI6IFwicGl4aS5qc1wiLFxuICBcInZlcnNpb25cIjogXCIzLjAuMTAtZGV2XCIsXG4gIFwiZGVzY3JpcHRpb25cIjogXCJQaXhpLmpzIGlzIGEgZmFzdCBsaWdodHdlaWdodCAyRCBsaWJyYXJ5IHRoYXQgd29ya3MgYWNyb3NzIGFsbCBkZXZpY2VzLlwiLFxuICBcImF1dGhvclwiOiBcIk1hdCBHcm92ZXNcIixcbiAgXCJjb250cmlidXRvcnNcIjogW1xuICAgIFwiQ2hhZCBFbmdsZXIgPGNoYWRAcGFudGhlcmRldi5jb20+XCIsXG4gICAgXCJSaWNoYXJkIERhdmV5IDxyZGF2ZXlAZ21haWwuY29tPlwiXG4gIF0sXG4gIFwibWFpblwiOiBcIi4vc3JjL2luZGV4LmpzXCIsXG4gIFwiaG9tZXBhZ2VcIjogXCJodHRwOi8vZ29vZGJveWRpZ2l0YWwuY29tL1wiLFxuICBcImJ1Z3NcIjogXCJodHRwczovL2dpdGh1Yi5jb20vcGl4aWpzL3BpeGkuanMvaXNzdWVzXCIsXG4gIFwibGljZW5zZVwiOiBcIk1JVFwiLFxuICBcInJlcG9zaXRvcnlcIjoge1xuICAgIFwidHlwZVwiOiBcImdpdFwiLFxuICAgIFwidXJsXCI6IFwiaHR0cHM6Ly9naXRodWIuY29tL3BpeGlqcy9waXhpLmpzLmdpdFwiXG4gIH0sXG4gIFwic2NyaXB0c1wiOiB7XG4gICAgXCJzdGFydFwiOiBcImd1bHAgJiYgZ3VscCB3YXRjaFwiLFxuICAgIFwidGVzdFwiOiBcImd1bHAgJiYgdGVzdGVtIGNpXCIsXG4gICAgXCJidWlsZFwiOiBcImd1bHBcIixcbiAgICBcImRvY3NcIjogXCJqc2RvYyAtYyAuL2d1bHAvdXRpbC9qc2RvYy5jb25mLmpzb24gLVIgUkVBRE1FLm1kXCJcbiAgfSxcbiAgXCJmaWxlc1wiOiBbXG4gICAgXCJiaW4vXCIsXG4gICAgXCJzcmMvXCIsXG4gICAgXCJDT05UUklCVVRJTkcubWRcIixcbiAgICBcIkxJQ0VOU0VcIixcbiAgICBcInBhY2thZ2UuanNvblwiLFxuICAgIFwiUkVBRE1FLm1kXCJcbiAgXSxcbiAgXCJkZXBlbmRlbmNpZXNcIjoge1xuICAgIFwiYXN5bmNcIjogXCJeMS41LjBcIixcbiAgICBcImJyZnNcIjogXCJeMS40LjFcIixcbiAgICBcImVhcmN1dFwiOiBcIl4yLjAuN1wiLFxuICAgIFwiZXZlbnRlbWl0dGVyM1wiOiBcIl4xLjEuMVwiLFxuICAgIFwib2JqZWN0LWFzc2lnblwiOiBcIl40LjAuMVwiLFxuICAgIFwicGl4aS1nbC1jb3JlXCI6IFwiZ2l0K2h0dHBzOi8vZ2l0aHViLmNvbS9Hb29kQm95RGlnaXRhbC9waXhpLWdsLWNvcmUuZ2l0XCIsXG4gICAgXCJyZXNvdXJjZS1sb2FkZXJcIjogXCJeMS42LjRcIlxuICB9LFxuICBcImRldkRlcGVuZGVuY2llc1wiOiB7XG4gICAgXCJicm93c2VyaWZ5XCI6IFwiXjExLjEuMFwiLFxuICAgIFwiY2hhaVwiOiBcIl4zLjIuMFwiLFxuICAgIFwiZGVsXCI6IFwiXjIuMC4yXCIsXG4gICAgXCJndWxwXCI6IFwiXjMuOS4wXCIsXG4gICAgXCJndWxwLWNhY2hlZFwiOiBcIl4xLjEuMFwiLFxuICAgIFwiZ3VscC1jb25jYXRcIjogXCJeMi42LjBcIixcbiAgICBcImd1bHAtZGVidWdcIjogXCJeMi4xLjBcIixcbiAgICBcImd1bHAtaGVhZGVyXCI6IFwiXjEuNy4xXCIsXG4gICAgXCJndWxwLWpzaGludFwiOiBcIl4xLjExLjJcIixcbiAgICBcImd1bHAtbWlycm9yXCI6IFwiXjAuNC4wXCIsXG4gICAgXCJndWxwLXBsdW1iZXJcIjogXCJeMS4wLjFcIixcbiAgICBcImd1bHAtcmVuYW1lXCI6IFwiXjEuMi4yXCIsXG4gICAgXCJndWxwLXNvdXJjZW1hcHNcIjogXCJeMS41LjJcIixcbiAgICBcImd1bHAtdWdsaWZ5XCI6IFwiXjEuNC4xXCIsXG4gICAgXCJndWxwLXV0aWxcIjogXCJeMy4wLjZcIixcbiAgICBcImphZ3VhcmpzLWpzZG9jXCI6IFwiZ2l0K2h0dHBzOi8vZ2l0aHViLmNvbS9kYXZpZHNoaW1qcy9qYWd1YXJqcy1qc2RvYy5naXRcIixcbiAgICBcImpzZG9jXCI6IFwiXjMuMy4yXCIsXG4gICAgXCJqc2hpbnQtc3VtbWFyeVwiOiBcIl4wLjQuMFwiLFxuICAgIFwibWluaW1pc3RcIjogXCJeMS4yLjBcIixcbiAgICBcIm1vY2hhXCI6IFwiXjIuMy4yXCIsXG4gICAgXCJyZXF1aXJlLWRpclwiOiBcIl4wLjMuMFwiLFxuICAgIFwicnVuLXNlcXVlbmNlXCI6IFwiXjEuMS4yXCIsXG4gICAgXCJ0ZXN0ZW1cIjogXCJeMC45LjRcIixcbiAgICBcInZpbnlsLWJ1ZmZlclwiOiBcIl4xLjAuMFwiLFxuICAgIFwidmlueWwtc291cmNlLXN0cmVhbVwiOiBcIl4xLjEuMFwiLFxuICAgIFwid2F0Y2hpZnlcIjogXCJeMy40LjBcIlxuICB9LFxuICBcImJyb3dzZXJpZnlcIjoge1xuICAgIFwidHJhbnNmb3JtXCI6IFtcbiAgICAgIFwiYnJmc1wiXG4gICAgXVxuICB9XG59XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uL2NvcmUnKTtcblxuLy8gYWRkIHNvbWUgZXh0cmEgdmFyaWFibGVzIHRvIHRoZSBjb250YWluZXIuLlxuT2JqZWN0LmFzc2lnbihcbiAgICBjb3JlLkRpc3BsYXlPYmplY3QucHJvdG90eXBlLFxuICAgIHJlcXVpcmUoJy4vYWNjZXNzaWJsZVRhcmdldCcpXG4pO1xuXG5cbi8qKlxuICogVGhlIEFjY2Vzc2liaWxpdHkgbWFuYWdlciByZWFjcmVhdGVzIHRoZSBhYmlsaXR5IHRvIHRhYiBhbmQgYW5kIGhhdmUgY29udGVudCByZWFkIGJ5IHNjcmVlbiByZWFkZXJzLiBUaGlzIGlzIHZlcnkgaW1wb3J0YW50IGFzIGl0IGNhbiBwb3NzaWJseSBoZWxwIHBlb3BsZSB3aXRoIGRpc2FiaWxpdGllcyBhY2Nlc3MgcGl4aSBjb250ZW50LlxuICogTXVjaCBsaWtlIGludGVyYWN0aW9uIGFueSBEaXNwbGF5T2JqZWN0IGNhbiBiZSBtYWRlIGFjY2Vzc2libGUuIFRoaXMgbWFuYWdlciB3aWxsIG1hcCB0aGUgZXZlbnRzIGFzIGlmIHRoZSBtb3VzZSB3YXMgYmVpbmcgdXNlZCwgbWluaW1pemluZyB0aGUgZWZmZXJvdCByZXF1aXJlZCB0byBpbXBsZW1lbnQuXG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLkNhbnZhc1JlbmRlcmVyfFBJWEkuV2ViR0xSZW5kZXJlcn0gQSByZWZlcmVuY2UgdG8gdGhlIGN1cnJlbnQgcmVuZGVyZXJcbiAqL1xuZnVuY3Rpb24gQWNjZXNzaWJpbGl0eU1hbmFnZXIocmVuZGVyZXIpXG57XG5cdC8vIGZpcnN0IHdlIGNyZWF0ZSBhIGRpdiB0aGF0IHdpbGwgc2l0IG92ZXIgdGhlIHBpeGkgZWxlbWVudC4gVGhpcyBpcyB3aGVyZSB0aGUgZGl2IG92ZXJsYXlzIHdpbGwgZ28uXG4gICAgdmFyIGRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgIFxuICAgIGRpdi5zdHlsZS53aWR0aCA9IDEwMCArICdweCc7XG4gICAgZGl2LnN0eWxlLmhlaWdodCA9IDEwMCArICdweCc7XG4gICAgZGl2LnN0eWxlLnBvc2l0aW9uID0gJ2Fic29sdXRlJztcbiAgICBkaXYuc3R5bGUudG9wID0gMDtcbiAgICBkaXYuc3R5bGUubGVmdCA9IDA7XG4gICAvL1xuICAgIGRpdi5zdHlsZS56SW5kZXggPSAyO1xuICAgXHRcbiAgIFx0LyoqXG4gICBcdCAqIFRoaXMgaXMgdGhlIGRvbSBlbGVtZW50IHRoYXQgd2lsbCBzaXQgb3ZlciB0aGUgcGl4aSBlbGVtZW50LiBUaGlzIGlzIHdoZXJlIHRoZSBkaXYgb3ZlcmxheXMgd2lsbCBnby5cbiAgIFx0ICogXG4gICBcdCAqIEB0eXBlIHtIVE1MRWxlbWVudH1cbiAgIFx0ICogQHByaXZhdGVcbiAgIFx0ICovXG4gICBcdHRoaXMuZGl2ID0gZGl2O1xuXG4gICBcdC8qKlxuICAgXHQgKiBBIHNpbXBsZSBwb29sIGZvciBzdG9yaW5nIGRpdnMuXG4gICBcdCAqIFxuICAgXHQgKiBAdHlwZSB7QXJyYXl9XG4gICBcdCAqIEBwcml2YXRlXG4gICBcdCAqL1xuIFx0dGhpcy5wb29sID0gW107XG5cbiBcdC8qKlxuIFx0ICogVGhpcyBpcyBhIHRpY2sgdXNlZCB0byBjaGVjayBpZiBhbiBvYmplY3QgaXMgbm8gbG9uZ2VyIGJlaW5nIHJlbmRlcmVkLlxuIFx0ICogXG4gXHQgKiBAdHlwZSB7TnVtYmVyfVxuIFx0ICogQHByaXZhdGVcbiBcdCAqL1xuICAgXHR0aGlzLnJlbmRlcklkID0gMDtcblxuICAgXHQvKipcbiAgIFx0ICogU2V0dGluZyB0aGlzIHRvIHRydWUgd2lsbCB2aXN1YWxseSBzaG93IHRoZSBkaXZzXG4gICBcdCAqIFxuICAgXHQgKiBAdHlwZSB7Qm9vbGVhbn1cbiAgIFx0ICovXG4gICBcdHRoaXMuZGVidWcgPSBmYWxzZTtcblxuICBcdC8qKlxuICAgICAqIFRoZSByZW5kZXJlciB0aGlzIGFjY2Vzc2liaWxpdHkgbWFuYWdlciB3b3JrcyBmb3IuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlN5c3RlbVJlbmRlcmVyfVxuICAgICAqL1xuICAgXHR0aGlzLnJlbmRlcmVyID0gcmVuZGVyZXI7XG5cbiAgIFx0LyoqXG4gICAgICogVGhlIGFycmF5IG9mIGN1cnJlbnRseSBhY3RpdmUgYWNjZXNzaWJsZSBpdGVtcy5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge0FycmF5fVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICBcdHRoaXMuY2hpbGRyZW4gPSBbXTtcbiAgIFx0XG4gICBcdC8qKlxuICAgICAqIHByZSBiaW5kIHRoZSBmdW5jdGlvbnMuLlxuICAgICAqL1xuICAgXHR0aGlzLl9vbktleURvd24gPSB0aGlzLl9vbktleURvd24uYmluZCh0aGlzKTtcbiAgIFx0dGhpcy5fb25Nb3VzZU1vdmUgPSB0aGlzLl9vbk1vdXNlTW92ZS5iaW5kKHRoaXMpO1xuICAgXHRcbiAgIFx0LyoqXG4gICAgICogc3RvcmVzIHRoZSBzdGF0ZSBvZiB0aGUgbWFuYWdlci4gSWYgdGhlcmUgYXJlIG5vIGFjY2Vzc2libGUgb2JqZWN0cyBvciB0aGUgbW91c2UgaXMgbW92aW5nIHRoZSB3aWxsIGJlIGZhbHNlLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7QXJyYXl9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgIFx0dGhpcy5pc0FjdGl2ZSA9IGZhbHNlO1xuXG5cbiAgIFx0Ly8gbGV0IGxpc3RlbiBmb3IgdGFiLi4gb25jZSBwcmVzc2VkIHdlIGNhbiBmaXJlIHVwIGFuZCBzaG93IHRoZSBhY2Nlc3NpYmlsaXR5IGxheWVyXG4gICBcdHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdrZXlkb3duJywgdGhpcy5fb25LZXlEb3duLCBmYWxzZSk7XG59XG5cblxuQWNjZXNzaWJpbGl0eU1hbmFnZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gQWNjZXNzaWJpbGl0eU1hbmFnZXI7XG5tb2R1bGUuZXhwb3J0cyA9IEFjY2Vzc2liaWxpdHlNYW5hZ2VyO1xuXG4vKipcbiAqIEFjdGl2YXRpbmcgd2lsbCBjYXVzZSB0aGUgQWNjZXNzaWJpbGl0eSBsYXllciB0byBiZSBzaG93bi4gVGhpcyBpcyBjYWxsZWQgd2hlbiBhIHVzZXIgcHJlc2VzIHRoZSB0YWIga2V5XG4gKiBAcHJpdmF0ZVxuICovXG5BY2Nlc3NpYmlsaXR5TWFuYWdlci5wcm90b3R5cGUuYWN0aXZhdGUgPSBmdW5jdGlvbigpXG57XG5cdGlmKHRoaXMuaXNBY3RpdmUpXG5cdHtcblx0XHRyZXR1cm47XG5cdH1cblxuXHR0aGlzLmlzQWN0aXZlID0gdHJ1ZTtcblxuXHR3aW5kb3cuZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignbW91c2Vtb3ZlJywgdGhpcy5fb25Nb3VzZU1vdmUsIHRydWUpO1xuXHR3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsIHRoaXMuX29uS2V5RG93biwgZmFsc2UpO1xuXG5cdHRoaXMucmVuZGVyZXIub24oJ3Bvc3RyZW5kZXInLCB0aGlzLnVwZGF0ZSwgdGhpcyk7XG5cblx0dGhpcy5yZW5kZXJlci52aWV3LnBhcmVudE5vZGUuYXBwZW5kQ2hpbGQodGhpcy5kaXYpO1x0XG59O1xuXG4vKipcbiAqIERlYWN0aXZhdGluZyB3aWxsIGNhdXNlIHRoZSBBY2Nlc3NpYmlsaXR5IGxheWVyIHRvIGJlIGhpZGRlbi4gVGhpcyBpcyBjYWxsZWQgd2hlbiBhIHVzZXIgbW92ZXMgdGhlIG1vdXNlXG4gKiBAcHJpdmF0ZVxuICovXG5BY2Nlc3NpYmlsaXR5TWFuYWdlci5wcm90b3R5cGUuZGVhY3RpdmF0ZSA9IGZ1bmN0aW9uKClcbntcblx0aWYoIXRoaXMuaXNBY3RpdmUpXG5cdHtcblx0XHRyZXR1cm47XG5cdH1cblxuXHR0aGlzLmlzQWN0aXZlID0gZmFsc2U7XG5cblx0d2luZG93LmRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21vdXNlbW92ZScsIHRoaXMuX29uTW91c2VNb3ZlKTtcblx0d2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLCB0aGlzLl9vbktleURvd24sIGZhbHNlKTtcblxuXHR0aGlzLnJlbmRlcmVyLm9mZigncG9zdHJlbmRlcicsIHRoaXMudXBkYXRlKTtcblxuXHR0aGlzLmRpdi5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHRoaXMuZGl2KTtcblxufTtcblxuLyoqXG4gKiBUaGlzIHJlY3Vyc2l2ZSBmdW5jdGlvbiB3aWxsIHJ1biB0aHJvdWdodCBoZSBzY2VuZSBncmFwaCBhbmQgYWRkIGFueSBuZXcgYWNjZXNzaWJsZSBvYmplY3RzIHRvIHRoZSBET00gbGF5ZXIuXG4gKiBAcGFyYW0gZWxlbWVudCB7UElYSS5Db250YWluZXJ8UElYSS5TcHJpdGV8UElYSS5leHRyYXMuVGlsaW5nU3ByaXRlfSB0aGUgRGlzcGxheU9iamVjdCB0byBjaGVjay5cbiAqIEBwcml2YXRlXG4gKi9cbkFjY2Vzc2liaWxpdHlNYW5hZ2VyLnByb3RvdHlwZS51cGRhdGVBY2Nlc3NpYmxlT2JqZWN0cyA9IGZ1bmN0aW9uKGRpc3BsYXlPYmplY3QpXG57XG5cdGlmKCFkaXNwbGF5T2JqZWN0LnZpc2libGUpXG5cdHtcblx0XHRyZXR1cm47XG5cdH1cblxuXHRpZihkaXNwbGF5T2JqZWN0LmFjY2Vzc2libGUgJiYgZGlzcGxheU9iamVjdC5pbnRlcmFjdGl2ZSlcblx0e1xuXHRcdGlmKCFkaXNwbGF5T2JqZWN0Ll9hY2Nlc3NpYmxlQWN0aXZlKVxuXHRcdHtcblx0XHRcdHRoaXMuYWRkQ2hpbGQoZGlzcGxheU9iamVjdCk7XG5cdFx0fVxuXHQgICBcdFxuXHQgICBcdGRpc3BsYXlPYmplY3QucmVuZGVySWQgPSB0aGlzLnJlbmRlcklkO1xuXHR9XG5cblx0dmFyIGNoaWxkcmVuID0gZGlzcGxheU9iamVjdC5jaGlsZHJlbjtcblxuXHRmb3IgKHZhciBpID0gY2hpbGRyZW4ubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcblx0XHRcblx0XHR0aGlzLnVwZGF0ZUFjY2Vzc2libGVPYmplY3RzKGNoaWxkcmVuW2ldKTtcblx0fVxufTtcblxuXG4vKipcbiAqIEJlZm9yZSBlYWNoIHJlbmRlciB0aGlzIGZ1bmN0aW9uIHdpbGwgZW5zdXJlIHRoYXQgYWxsIGRpdnMgYXJlIG1hcHBlZCBjb3JyZWN0bHkgdG8gdGhlaXIgRGlzcGxheU9iamVjdHNcbiAqIEBwcml2YXRlXG4gKi9cbkFjY2Vzc2liaWxpdHlNYW5hZ2VyLnByb3RvdHlwZS51cGRhdGUgPSBmdW5jdGlvbigpXG57XG5cblx0Ly8gdXBkYXRlIGNoaWxkcmVuLi4uXG5cdHRoaXMudXBkYXRlQWNjZXNzaWJsZU9iamVjdHModGhpcy5yZW5kZXJlci5fbGFzdE9iamVjdFJlbmRlcmVkKTtcblxuXHR2YXIgcmVjdCA9IHRoaXMucmVuZGVyZXIudmlldy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcblx0dmFyIHN4ID0gcmVjdC53aWR0aCAgLyB0aGlzLnJlbmRlcmVyLndpZHRoO1xuXHR2YXIgc3kgPSByZWN0LmhlaWdodCAvIHRoaXMucmVuZGVyZXIuaGVpZ2h0O1xuXG5cdHZhciBkaXYgPSB0aGlzLmRpdjtcblxuXHRkaXYuc3R5bGUubGVmdCA9IHJlY3QubGVmdCArICdweCc7XG5cdGRpdi5zdHlsZS50b3AgPSByZWN0LnRvcCArICdweCc7XG5cdGRpdi5zdHlsZS53aWR0aCA9IHRoaXMucmVuZGVyZXIud2lkdGggKyAncHgnO1xuXHRkaXYuc3R5bGUuaGVpZ2h0ID0gdGhpcy5yZW5kZXJlci5oZWlnaHQgKyAncHgnO1xuXG5cdGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5jaGlsZHJlbi5sZW5ndGg7IGkrKylcblx0e1xuXG5cdFx0dmFyIGNoaWxkID0gdGhpcy5jaGlsZHJlbltpXTtcblxuXHRcdGlmKGNoaWxkLnJlbmRlcklkICE9PSB0aGlzLnJlbmRlcklkKVxuXHRcdHtcblx0XHRcdGNoaWxkLl9hY2Nlc3NpYmxlQWN0aXZlID0gZmFsc2U7XG5cbiAgICAgICAgICAgIGNvcmUudXRpbHMucmVtb3ZlSXRlbXModGhpcy5jaGlsZHJlbiwgaSwgMSk7XG5cdFx0XHR0aGlzLmRpdi5yZW1vdmVDaGlsZCggY2hpbGQuX2FjY2Vzc2libGVEaXYgKTtcblx0XHRcdHRoaXMucG9vbC5wdXNoKGNoaWxkLl9hY2Nlc3NpYmxlRGl2KTtcblx0XHRcdGNoaWxkLl9hY2Nlc3NpYmxlRGl2ID0gbnVsbDtcblxuXHRcdFx0aS0tO1xuXG5cdFx0XHRpZih0aGlzLmNoaWxkcmVuLmxlbmd0aCA9PT0gMClcblx0XHRcdHtcblx0XHRcdFx0dGhpcy5kZWFjdGl2YXRlKCk7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdGVsc2Vcblx0XHR7XG5cdFx0XHQvLyBtYXAgZGl2IHRvIGRpc3BsYXkuLlxuXHRcdFx0ZGl2ID0gY2hpbGQuX2FjY2Vzc2libGVEaXY7XG5cdFx0XHR2YXIgaGl0QXJlYSA9IGNoaWxkLmhpdEFyZWE7XG5cdFx0XHR2YXIgd3QgPSBjaGlsZC53b3JsZFRyYW5zZm9ybTtcblxuXHRcdFx0aWYoY2hpbGQuaGl0QXJlYSlcblx0XHRcdHtcblx0XHRcdFx0ZGl2LnN0eWxlLmxlZnQgPSAoKHd0LnR4ICsgKGhpdEFyZWEueCAqIHd0LmEpKSAqIHN4KSArICdweCc7XG5cdFx0XHRcdGRpdi5zdHlsZS50b3AgPSAgKCh3dC50eSArIChoaXRBcmVhLnkgKiB3dC5kKSkgKiBzeSkgKyAgJ3B4JztcblxuXHRcdFx0XHRkaXYuc3R5bGUud2lkdGggPSAoaGl0QXJlYS53aWR0aCAqIHd0LmEgKiBzeCkgKyAncHgnO1xuXHRcdFx0XHRkaXYuc3R5bGUuaGVpZ2h0ID0gKGhpdEFyZWEuaGVpZ2h0ICogd3QuZCAqIHN5KSArICdweCc7XG5cdFx0XHRcblx0XHRcdH1cblx0XHRcdGVsc2Vcblx0XHRcdHtcblx0XHRcdFx0aGl0QXJlYSA9IGNoaWxkLmdldEJvdW5kcygpO1xuXG5cdFx0XHRcdHRoaXMuY2FwSGl0QXJlYShoaXRBcmVhKTtcblxuXHRcdFx0XHRkaXYuc3R5bGUubGVmdCA9IChoaXRBcmVhLnggKiBzeCkgKyAncHgnO1xuXHRcdFx0XHRkaXYuc3R5bGUudG9wID0gIChoaXRBcmVhLnkgKiBzeSkgKyAgJ3B4JztcblxuXHRcdFx0XHRkaXYuc3R5bGUud2lkdGggPSAoaGl0QXJlYS53aWR0aCAqIHN4KSArICdweCc7XG5cdFx0XHRcdGRpdi5zdHlsZS5oZWlnaHQgPSAoaGl0QXJlYS5oZWlnaHQgKiBzeSkgKyAncHgnO1xuXHRcdFx0fVx0XHRcblx0XHR9XG5cdH1cblxuXHQvLyBpbmNyZW1lbnQgdGhlIHJlbmRlciBpZC4uXG5cdHRoaXMucmVuZGVySWQrKztcbn07XG5cbkFjY2Vzc2liaWxpdHlNYW5hZ2VyLnByb3RvdHlwZS5jYXBIaXRBcmVhID0gZnVuY3Rpb24gKGhpdEFyZWEpXG57XG4gICAgaWYgKGhpdEFyZWEueCA8IDApXG4gICAge1xuICAgICAgICBoaXRBcmVhLndpZHRoICs9IGhpdEFyZWEueDtcbiAgICAgICAgaGl0QXJlYS54ID0gMDtcbiAgICB9XG5cbiAgICBpZiAoaGl0QXJlYS55IDwgMClcbiAgICB7XG4gICAgICAgIGhpdEFyZWEuaGVpZ2h0ICs9IGhpdEFyZWEueTtcbiAgICAgICAgaGl0QXJlYS55ID0gMDtcbiAgICB9XG5cbiAgICBpZiAoIGhpdEFyZWEueCArIGhpdEFyZWEud2lkdGggPiB0aGlzLnJlbmRlcmVyLndpZHRoIClcbiAgICB7XG4gICAgICAgIGhpdEFyZWEud2lkdGggPSB0aGlzLnJlbmRlcmVyLndpZHRoIC0gaGl0QXJlYS54O1xuICAgIH1cblxuICAgIGlmICggaGl0QXJlYS55ICsgaGl0QXJlYS5oZWlnaHQgPiB0aGlzLnJlbmRlcmVyLmhlaWdodCApXG4gICAge1xuICAgICAgICBoaXRBcmVhLmhlaWdodCA9IHRoaXMucmVuZGVyZXIuaGVpZ2h0IC0gaGl0QXJlYS55O1xuICAgIH1cbn07XG5cblxuLyoqXG4gKiBBZGRzIGEgRGlzcGxheU9iamVjdCB0byB0aGUgYWNjZXNzaWJpbGl0eSBtYW5hZ2VyXG4gKiBAcHJpdmF0ZVxuICovXG5BY2Nlc3NpYmlsaXR5TWFuYWdlci5wcm90b3R5cGUuYWRkQ2hpbGQgPSBmdW5jdGlvbihkaXNwbGF5T2JqZWN0KVxue1xuLy9cdHRoaXMuYWN0aXZhdGUoKTtcblx0XG5cdHZhciBkaXYgPSB0aGlzLnBvb2wucG9wKCk7XG5cblx0aWYoIWRpdilcblx0e1xuXHRcdGRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2J1dHRvbicpOyBcblxuXHQgICAgZGl2LnN0eWxlLndpZHRoID0gMTAwICsgJ3B4Jztcblx0ICAgIGRpdi5zdHlsZS5oZWlnaHQgPSAxMDAgKyAncHgnO1xuXHQgICAgZGl2LnN0eWxlLmJhY2tncm91bmRDb2xvciA9IHRoaXMuZGVidWcgPyAncmdiYSgyNTUsMCwwLDAuNSknIDogJ3RyYW5zcGFyZW50Jztcblx0ICAgIGRpdi5zdHlsZS5wb3NpdGlvbiA9ICdhYnNvbHV0ZSc7XG5cdCAgICBkaXYuc3R5bGUuekluZGV4ID0gMjtcblx0ICAgIGRpdi5zdHlsZS5ib3JkZXJTdHlsZSA9ICdub25lJztcblxuXHQgICAgXG5cdCAgICBkaXYuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCB0aGlzLl9vbkNsaWNrLmJpbmQodGhpcykpO1xuXHQgICAgZGl2LmFkZEV2ZW50TGlzdGVuZXIoJ2ZvY3VzJywgdGhpcy5fb25Gb2N1cy5iaW5kKHRoaXMpKTtcblx0ICAgIGRpdi5hZGRFdmVudExpc3RlbmVyKCdmb2N1c291dCcsIHRoaXMuX29uRm9jdXNPdXQuYmluZCh0aGlzKSk7XG5cdH1cblx0ICAgXHRcblxuXG5cblx0ZGl2LnRpdGxlID0gZGlzcGxheU9iamVjdC5hY2Nlc3NpYmxlVGl0bGUgfHwgJ2Rpc3BsYXlPYmplY3QgJyArIHRoaXMudGFiSW5kZXg7XG5cblx0Ly9cblx0XG5cdGRpc3BsYXlPYmplY3QuX2FjY2Vzc2libGVBY3RpdmUgPSB0cnVlO1xuXHRkaXNwbGF5T2JqZWN0Ll9hY2Nlc3NpYmxlRGl2ID0gZGl2O1xuXHRkaXYuZGlzcGxheU9iamVjdCA9IGRpc3BsYXlPYmplY3Q7XG5cblxuXHR0aGlzLmNoaWxkcmVuLnB1c2goZGlzcGxheU9iamVjdCk7XG5cdHRoaXMuZGl2LmFwcGVuZENoaWxkKCBkaXNwbGF5T2JqZWN0Ll9hY2Nlc3NpYmxlRGl2ICk7XG5cdGRpc3BsYXlPYmplY3QuX2FjY2Vzc2libGVEaXYudGFiSW5kZXggPSBkaXNwbGF5T2JqZWN0LnRhYkluZGV4O1xufTtcblxuXG4vKipcbiAqIE1hcHMgdGhlIGRpdiBidXR0b24gcHJlc3MgdG8gcGl4aSdzIEludGVyYWN0aW9uTWFuYWdlciAoY2xpY2spXG4gKiBAcHJpdmF0ZVxuICovXG5BY2Nlc3NpYmlsaXR5TWFuYWdlci5wcm90b3R5cGUuX29uQ2xpY2sgPSBmdW5jdGlvbihlKVxue1xuXHR2YXIgaW50ZXJhY3Rpb25NYW5hZ2VyID0gdGhpcy5yZW5kZXJlci5wbHVnaW5zLmludGVyYWN0aW9uO1xuXHRpbnRlcmFjdGlvbk1hbmFnZXIuZGlzcGF0Y2hFdmVudChlLnRhcmdldC5kaXNwbGF5T2JqZWN0LCAnY2xpY2snLCBpbnRlcmFjdGlvbk1hbmFnZXIuZXZlbnREYXRhKTtcbn07XG5cbi8qKlxuICogTWFwcyB0aGUgZGl2IGZvY3VzIGV2ZW50cyB0byBwaXhpcyBJbnRlcmFjdGlvbk1hbmFnZXIgKG1vdXNlb3ZlcilcbiAqIEBwcml2YXRlXG4gKi9cbkFjY2Vzc2liaWxpdHlNYW5hZ2VyLnByb3RvdHlwZS5fb25Gb2N1cyA9IGZ1bmN0aW9uKGUpXG57XG5cdHZhciBpbnRlcmFjdGlvbk1hbmFnZXIgPSB0aGlzLnJlbmRlcmVyLnBsdWdpbnMuaW50ZXJhY3Rpb247XG5cdGludGVyYWN0aW9uTWFuYWdlci5kaXNwYXRjaEV2ZW50KGUudGFyZ2V0LmRpc3BsYXlPYmplY3QsICdtb3VzZW92ZXInLCBpbnRlcmFjdGlvbk1hbmFnZXIuZXZlbnREYXRhKTtcbn07XG5cbi8qKlxuICogTWFwcyB0aGUgZGl2IGZvY3VzIGV2ZW50cyB0byBwaXhpcyBJbnRlcmFjdGlvbk1hbmFnZXIgKG1vdXNlb3V0KVxuICogQHByaXZhdGVcbiAqL1xuQWNjZXNzaWJpbGl0eU1hbmFnZXIucHJvdG90eXBlLl9vbkZvY3VzT3V0ID0gZnVuY3Rpb24oZSlcbntcblx0dmFyIGludGVyYWN0aW9uTWFuYWdlciA9IHRoaXMucmVuZGVyZXIucGx1Z2lucy5pbnRlcmFjdGlvbjtcblx0aW50ZXJhY3Rpb25NYW5hZ2VyLmRpc3BhdGNoRXZlbnQoZS50YXJnZXQuZGlzcGxheU9iamVjdCwgJ21vdXNlb3V0JywgaW50ZXJhY3Rpb25NYW5hZ2VyLmV2ZW50RGF0YSk7XG59O1xuXG4vKipcbiAqIElzIGNhbGxlZCB3aGVuIGEga2V5IGlzIHByZXNzZWRcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5BY2Nlc3NpYmlsaXR5TWFuYWdlci5wcm90b3R5cGUuX29uS2V5RG93biA9IGZ1bmN0aW9uKGUpXG57XG5cdGlmKGUua2V5Q29kZSAhPT0gOSlcblx0e1xuXHRcdHJldHVybjtcblx0fVxuXG5cdHRoaXMuYWN0aXZhdGUoKTtcbn07XG5cbi8qKlxuICogSXMgY2FsbGVkIHdoZW4gdGhlIG1vdXNlIG1vdmVzIGFjcm9zcyB0aGUgcmVuZGVyZXIgZWxlbWVudFxuICpcbiAqIEBwcml2YXRlXG4gKi9cbkFjY2Vzc2liaWxpdHlNYW5hZ2VyLnByb3RvdHlwZS5fb25Nb3VzZU1vdmUgPSBmdW5jdGlvbigpXG57XG5cdHRoaXMuZGVhY3RpdmF0ZSgpO1xufTtcblxuXG4vKipcbiAqIERlc3Ryb3lzIHRoZSBhY2Nlc3NpYmlsaXR5IG1hbmFnZXJcbiAqXG4gKi9cbkFjY2Vzc2liaWxpdHlNYW5hZ2VyLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKCkgXG57XG5cdHRoaXMuZGl2ID0gbnVsbDtcblxuXHRmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuY2hpbGRyZW4ubGVuZ3RoOyBpKyspXG5cdHtcblx0XHR0aGlzLmNoaWxkcmVuW2ldLmRpdiA9IG51bGw7XG5cdH1cblxuXHRcblx0d2luZG93LmRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21vdXNlbW92ZScsIHRoaXMuX29uTW91c2VNb3ZlKTtcblx0d2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLCB0aGlzLl9vbktleURvd24pO1xuXHRcdFxuXHR0aGlzLnBvb2wgPSBudWxsO1xuXHR0aGlzLmNoaWxkcmVuID0gbnVsbDtcblx0dGhpcy5yZW5kZXJlciA9IG51bGw7XG5cbn07XG5cbmNvcmUuV2ViR0xSZW5kZXJlci5yZWdpc3RlclBsdWdpbignYWNjZXNzaWJpbGl0eScsIEFjY2Vzc2liaWxpdHlNYW5hZ2VyKTtcbmNvcmUuQ2FudmFzUmVuZGVyZXIucmVnaXN0ZXJQbHVnaW4oJ2FjY2Vzc2liaWxpdHknLCBBY2Nlc3NpYmlsaXR5TWFuYWdlcik7XG5cbiIsIi8qKlxuICogRGVmYXVsdCBwcm9wZXJ0eSB2YWx1ZXMgb2YgYWNjZXNzaWJsZSBvYmplY3RzXG4gKiB1c2VkIGJ5IHtAbGluayBQSVhJLmFjY2Vzc2liaWxpdHkuQWNjZXNzaWJpbGl0eU1hbmFnZXJ9LlxuICpcbiAqIEBtaXhpblxuICogQG1lbWJlcm9mIFBJWElcbiAqIEBleGFtcGxlXG4gKiAgICAgIGZ1bmN0aW9uIE15T2JqZWN0KCkge31cbiAqXG4gKiAgICAgIE9iamVjdC5hc3NpZ24oXG4gKiAgICAgICAgICBNeU9iamVjdC5wcm90b3R5cGUsXG4gKiAgICAgICAgICBQSVhJLmFjY2Vzc2liaWxpdHkuYWNjZXNzaWJsZVRhcmdldFxuICogICAgICApO1xuICovXG52YXIgYWNjZXNzaWJsZVRhcmdldCA9IHtcbiAgICBcbiAgICAvKipcbiAgICAgKiBAdG9kbyBOZWVkcyBkb2NzLlxuICAgICAqL1xuICAgIGFjY2Vzc2libGU6ZmFsc2UsXG5cbiAgICAvKipcbiAgICAgKiBAdG9kbyBOZWVkcyBkb2NzLlxuICAgICAqL1xuICAgIGFjY2Vzc2libGVUaXRsZTpudWxsLFxuXG4gICAgLyoqXG4gICAgICogQHRvZG8gTmVlZHMgZG9jcy5cbiAgICAgKi9cbiAgICB0YWJJbmRleDowLFxuXG4gICAgLyoqXG4gICAgICogQHRvZG8gTmVlZHMgZG9jcy5cbiAgICAgKi9cbiAgICBfYWNjZXNzaWJsZUFjdGl2ZTpmYWxzZSxcblxuICAgIC8qKlxuICAgICAqIEB0b2RvIE5lZWRzIGRvY3MuXG4gICAgICovXG4gICAgX2FjY2Vzc2libGVEaXY6ZmFsc2VcblxufTtcblxubW9kdWxlLmV4cG9ydHMgPSBhY2Nlc3NpYmxlVGFyZ2V0O1xuIiwiLyoqXG4gKiBAZmlsZSAgICAgICAgTWFpbiBleHBvcnQgb2YgdGhlIFBJWEkgYWNjZXNzaWJpbGl0eSBsaWJyYXJ5XG4gKiBAYXV0aG9yICAgICAgTWF0IEdyb3ZlcyA8bWF0QGdvb2Rib3lkaWdpdGFsLmNvbT5cbiAqIEBjb3B5cmlnaHQgICAyMDEzLTIwMTUgR29vZEJveURpZ2l0YWxcbiAqIEBsaWNlbnNlICAgICB7QGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL3BpeGlqcy9waXhpLmpzL2Jsb2IvbWFzdGVyL0xJQ0VOU0V8TUlUIExpY2Vuc2V9XG4gKi9cblxuLyoqXG4gKiBAbmFtZXNwYWNlIFBJWEkuaW50ZXJhY3Rpb25cbiAqL1xubW9kdWxlLmV4cG9ydHMgPSB7XG4gICAgYWNjZXNzaWJsZVRhcmdldDogICAgIHJlcXVpcmUoJy4vYWNjZXNzaWJsZVRhcmdldCcpLFxuICAgIEFjY2Vzc2liaWxpdHlNYW5hZ2VyOiByZXF1aXJlKCcuL0FjY2Vzc2liaWxpdHlNYW5hZ2VyJylcbn07XG4iLCIvKipcbiAqIENvbnN0YW50IHZhbHVlcyB1c2VkIGluIHBpeGlcbiAqXG4gKiBAbGVuZHMgUElYSVxuICovXG52YXIgQ09OU1QgPSB7XG4gICAgLyoqXG4gICAgICogU3RyaW5nIG9mIHRoZSBjdXJyZW50IFBJWEkgdmVyc2lvblxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBjb25zdGFudFxuICAgICAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBWRVJTSU9OXG4gICAgICovXG4gICAgVkVSU0lPTjogcmVxdWlyZSgnLi4vLi4vcGFja2FnZS5qc29uJykudmVyc2lvbixcblxuICAgIC8qKlxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBQSV8yIC0gVHdvIFBpXG4gICAgICogQGNvbnN0YW50XG4gICAgICogQHN0YXRpY1xuICAgICAqL1xuICAgIFBJXzI6IE1hdGguUEkgKiAyLFxuXG4gICAgLyoqXG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IFJBRF9UT19ERUcgLSBDb25zdGFudCBjb252ZXJzaW9uIGZhY3RvciBmb3IgY29udmVydGluZyByYWRpYW5zIHRvIGRlZ3JlZXNcbiAgICAgKiBAY29uc3RhbnRcbiAgICAgKiBAc3RhdGljXG4gICAgICovXG4gICAgUkFEX1RPX0RFRzogMTgwIC8gTWF0aC5QSSxcblxuICAgIC8qKlxuICAgICAqIEBwcm9wZXJ0eSB7TnVtYmVyfSBERUdfVE9fUkFEIC0gQ29uc3RhbnQgY29udmVyc2lvbiBmYWN0b3IgZm9yIGNvbnZlcnRpbmcgZGVncmVlcyB0byByYWRpYW5zXG4gICAgICogQGNvbnN0YW50XG4gICAgICogQHN0YXRpY1xuICAgICAqL1xuICAgIERFR19UT19SQUQ6IE1hdGguUEkgLyAxODAsXG5cbiAgICAvKipcbiAgICAgKiBUYXJnZXQgZnJhbWVzIHBlciBtaWxsaXNlY29uZC5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAY29uc3RhbnRcbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gVEFSR0VUX0ZQTVM9MC4wNlxuICAgICAqL1xuICAgIFRBUkdFVF9GUE1TOiAwLjA2LFxuXG4gICAgLyoqXG4gICAgICogQ29uc3RhbnQgdG8gaWRlbnRpZnkgdGhlIFJlbmRlcmVyIFR5cGUuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQGNvbnN0YW50XG4gICAgICogQHByb3BlcnR5IHtvYmplY3R9IFJFTkRFUkVSX1RZUEVcbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gUkVOREVSRVJfVFlQRS5VTktOT1dOXG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IFJFTkRFUkVSX1RZUEUuV0VCR0xcbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gUkVOREVSRVJfVFlQRS5DQU5WQVNcbiAgICAgKi9cbiAgICBSRU5ERVJFUl9UWVBFOiB7XG4gICAgICAgIFVOS05PV046ICAgIDAsXG4gICAgICAgIFdFQkdMOiAgICAgIDEsXG4gICAgICAgIENBTlZBUzogICAgIDJcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVmFyaW91cyBibGVuZCBtb2RlcyBzdXBwb3J0ZWQgYnkgUElYSS4gSU1QT1JUQU5UIC0gVGhlIFdlYkdMIHJlbmRlcmVyIG9ubHkgc3VwcG9ydHNcbiAgICAgKiB0aGUgTk9STUFMLCBBREQsIE1VTFRJUExZIGFuZCBTQ1JFRU4gYmxlbmQgbW9kZXMuIEFueXRoaW5nIGVsc2Ugd2lsbCBzaWxlbnRseSBhY3QgbGlrZVxuICAgICAqIE5PUk1BTC5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAY29uc3RhbnRcbiAgICAgKiBAcHJvcGVydHkge29iamVjdH0gQkxFTkRfTU9ERVNcbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gQkxFTkRfTU9ERVMuTk9STUFMXG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IEJMRU5EX01PREVTLkFERFxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBCTEVORF9NT0RFUy5NVUxUSVBMWVxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBCTEVORF9NT0RFUy5TQ1JFRU5cbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gQkxFTkRfTU9ERVMuT1ZFUkxBWVxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBCTEVORF9NT0RFUy5EQVJLRU5cbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gQkxFTkRfTU9ERVMuTElHSFRFTlxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBCTEVORF9NT0RFUy5DT0xPUl9ET0RHRVxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBCTEVORF9NT0RFUy5DT0xPUl9CVVJOXG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IEJMRU5EX01PREVTLkhBUkRfTElHSFRcbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gQkxFTkRfTU9ERVMuU09GVF9MSUdIVFxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBCTEVORF9NT0RFUy5ESUZGRVJFTkNFXG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IEJMRU5EX01PREVTLkVYQ0xVU0lPTlxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBCTEVORF9NT0RFUy5IVUVcbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gQkxFTkRfTU9ERVMuU0FUVVJBVElPTlxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBCTEVORF9NT0RFUy5DT0xPUlxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBCTEVORF9NT0RFUy5MVU1JTk9TSVRZXG4gICAgICovXG4gICAgQkxFTkRfTU9ERVM6IHtcbiAgICAgICAgTk9STUFMOiAgICAgICAgIDAsXG4gICAgICAgIEFERDogICAgICAgICAgICAxLFxuICAgICAgICBNVUxUSVBMWTogICAgICAgMixcbiAgICAgICAgU0NSRUVOOiAgICAgICAgIDMsXG4gICAgICAgIE9WRVJMQVk6ICAgICAgICA0LFxuICAgICAgICBEQVJLRU46ICAgICAgICAgNSxcbiAgICAgICAgTElHSFRFTjogICAgICAgIDYsXG4gICAgICAgIENPTE9SX0RPREdFOiAgICA3LFxuICAgICAgICBDT0xPUl9CVVJOOiAgICAgOCxcbiAgICAgICAgSEFSRF9MSUdIVDogICAgIDksXG4gICAgICAgIFNPRlRfTElHSFQ6ICAgICAxMCxcbiAgICAgICAgRElGRkVSRU5DRTogICAgIDExLFxuICAgICAgICBFWENMVVNJT046ICAgICAgMTIsXG4gICAgICAgIEhVRTogICAgICAgICAgICAxMyxcbiAgICAgICAgU0FUVVJBVElPTjogICAgIDE0LFxuICAgICAgICBDT0xPUjogICAgICAgICAgMTUsXG4gICAgICAgIExVTUlOT1NJVFk6ICAgICAxNlxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBWYXJpb3VzIHdlYmdsIGRyYXcgbW9kZXMuIFRoZXNlIGNhbiBiZSB1c2VkIHRvIHNwZWNpZnkgd2hpY2ggR0wgZHJhd01vZGUgdG8gdXNlXG4gICAgICogdW5kZXIgY2VydGFpbiBzaXR1YXRpb25zIGFuZCByZW5kZXJlcnMuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQGNvbnN0YW50XG4gICAgICogQHByb3BlcnR5IHtvYmplY3R9IERSQVdfTU9ERVNcbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gRFJBV19NT0RFUy5QT0lOVFNcbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gRFJBV19NT0RFUy5MSU5FU1xuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBEUkFXX01PREVTLkxJTkVfTE9PUFxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBEUkFXX01PREVTLkxJTkVfU1RSSVBcbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gRFJBV19NT0RFUy5UUklBTkdMRVNcbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gRFJBV19NT0RFUy5UUklBTkdMRV9TVFJJUFxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBEUkFXX01PREVTLlRSSUFOR0xFX0ZBTlxuICAgICAqL1xuICAgIERSQVdfTU9ERVM6IHtcbiAgICAgICAgUE9JTlRTOiAgICAgICAgIDAsXG4gICAgICAgIExJTkVTOiAgICAgICAgICAxLFxuICAgICAgICBMSU5FX0xPT1A6ICAgICAgMixcbiAgICAgICAgTElORV9TVFJJUDogICAgIDMsXG4gICAgICAgIFRSSUFOR0xFUzogICAgICA0LFxuICAgICAgICBUUklBTkdMRV9TVFJJUDogNSxcbiAgICAgICAgVFJJQU5HTEVfRkFOOiAgIDZcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVGhlIHNjYWxlIG1vZGVzIHRoYXQgYXJlIHN1cHBvcnRlZCBieSBwaXhpLlxuICAgICAqXG4gICAgICogVGhlIERFRkFVTFQgc2NhbGUgbW9kZSBhZmZlY3RzIHRoZSBkZWZhdWx0IHNjYWxpbmcgbW9kZSBvZiBmdXR1cmUgb3BlcmF0aW9ucy5cbiAgICAgKiBJdCBjYW4gYmUgcmUtYXNzaWduZWQgdG8gZWl0aGVyIExJTkVBUiBvciBORUFSRVNULCBkZXBlbmRpbmcgdXBvbiBzdWl0YWJpbGl0eS5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAY29uc3RhbnRcbiAgICAgKiBAcHJvcGVydHkge29iamVjdH0gU0NBTEVfTU9ERVNcbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gU0NBTEVfTU9ERVMuREVGQVVMVD1MSU5FQVJcbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gU0NBTEVfTU9ERVMuTElORUFSIFNtb290aCBzY2FsaW5nXG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IFNDQUxFX01PREVTLk5FQVJFU1QgUGl4ZWxhdGluZyBzY2FsaW5nXG4gICAgICovXG4gICAgU0NBTEVfTU9ERVM6IHtcbiAgICAgICAgREVGQVVMVDogICAgMCxcbiAgICAgICAgTElORUFSOiAgICAgMCxcbiAgICAgICAgTkVBUkVTVDogICAgMVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBUaGUgcHJlZml4IHRoYXQgZGVub3RlcyBhIFVSTCBpcyBmb3IgYSByZXRpbmEgYXNzZXRcbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAY29uc3RhbnRcbiAgICAgKiBAcHJvcGVydHkge3N0cmluZ30gUkVUSU5BX1BSRUZJWFxuICAgICAqL1xuICAgIC8vZXhhbXBsZTogJ0AyeCcsXG4gICAgUkVUSU5BX1BSRUZJWDogL0AoLispeC8sXG5cbiAgICBSRVNPTFVUSU9OOjEsXG5cbiAgICBGSUxURVJfUkVTT0xVVElPTjoxLFxuXG4gICAgLyoqXG4gICAgICogVGhlIGRlZmF1bHQgcmVuZGVyIG9wdGlvbnMgaWYgbm9uZSBhcmUgc3VwcGxpZWQgdG8ge0BsaW5rIFBJWEkuV2ViR0xSZW5kZXJlcn1cbiAgICAgKiBvciB7QGxpbmsgUElYSS5DYW52YXNSZW5kZXJlcn0uXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQGNvbnN0YW50XG4gICAgICogQHByb3BlcnR5IHtvYmplY3R9IERFRkFVTFRfUkVOREVSX09QVElPTlNcbiAgICAgKiBAcHJvcGVydHkge0hUTUxDYW52YXNFbGVtZW50fSBERUZBVUxUX1JFTkRFUl9PUFRJT05TLnZpZXc9bnVsbFxuICAgICAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gREVGQVVMVF9SRU5ERVJfT1BUSU9OUy50cmFuc3BhcmVudD1mYWxzZVxuICAgICAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gREVGQVVMVF9SRU5ERVJfT1BUSU9OUy5hbnRpYWxpYXM9ZmFsc2VcbiAgICAgKiBAcHJvcGVydHkge2Jvb2xlYW59IERFRkFVTFRfUkVOREVSX09QVElPTlMuZm9yY2VGWEFBPWZhbHNlXG4gICAgICogQHByb3BlcnR5IHtib29sZWFufSBERUZBVUxUX1JFTkRFUl9PUFRJT05TLnByZXNlcnZlRHJhd2luZ0J1ZmZlcj1mYWxzZVxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBERUZBVUxUX1JFTkRFUl9PUFRJT05TLnJlc29sdXRpb249MVxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBERUZBVUxUX1JFTkRFUl9PUFRJT05TLmJhY2tncm91bmRDb2xvcj0weDAwMDAwMFxuICAgICAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gREVGQVVMVF9SRU5ERVJfT1BUSU9OUy5jbGVhckJlZm9yZVJlbmRlcj10cnVlXG4gICAgICogQHByb3BlcnR5IHtib29sZWFufSBERUZBVUxUX1JFTkRFUl9PUFRJT05TLmF1dG9SZXNpemU9ZmFsc2VcbiAgICAgKi9cbiAgICBERUZBVUxUX1JFTkRFUl9PUFRJT05TOiB7XG4gICAgICAgIHZpZXc6IG51bGwsXG4gICAgICAgIHJlc29sdXRpb246IDEsXG4gICAgICAgIGFudGlhbGlhczogZmFsc2UsXG4gICAgICAgIGZvcmNlRlhBQTogZmFsc2UsXG4gICAgICAgIGF1dG9SZXNpemU6IGZhbHNlLFxuICAgICAgICB0cmFuc3BhcmVudDogZmFsc2UsXG4gICAgICAgIGJhY2tncm91bmRDb2xvcjogMHgwMDAwMDAsXG4gICAgICAgIGNsZWFyQmVmb3JlUmVuZGVyOiB0cnVlLFxuICAgICAgICBwcmVzZXJ2ZURyYXdpbmdCdWZmZXI6IGZhbHNlLFxuICAgICAgICByb3VuZFBpeGVsczogZmFsc2VcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQ29uc3RhbnRzIHRoYXQgaWRlbnRpZnkgc2hhcGVzLCBtYWlubHkgdG8gcHJldmVudCBgaW5zdGFuY2VvZmAgY2FsbHMuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQGNvbnN0YW50XG4gICAgICogQHByb3BlcnR5IHtvYmplY3R9IFNIQVBFU1xuICAgICAqIEBwcm9wZXJ0eSB7b2JqZWN0fSBTSEFQRVMuUE9MWT0wXG4gICAgICogQHByb3BlcnR5IHtvYmplY3R9IFNIQVBFUy5SRUNUPTFcbiAgICAgKiBAcHJvcGVydHkge29iamVjdH0gU0hBUEVTLkNJUkM9MlxuICAgICAqIEBwcm9wZXJ0eSB7b2JqZWN0fSBTSEFQRVMuRUxJUD0zXG4gICAgICogQHByb3BlcnR5IHtvYmplY3R9IFNIQVBFUy5SUkVDPTRcbiAgICAgKi9cbiAgICBTSEFQRVM6IHtcbiAgICAgICAgUE9MWTogMCxcbiAgICAgICAgUkVDVDogMSxcbiAgICAgICAgQ0lSQzogMixcbiAgICAgICAgRUxJUDogMyxcbiAgICAgICAgUlJFQzogNFxuICAgIH0sXG5cbiAgICAvLyBUT0RPOiBtYXliZSBjaGFuZ2UgdG8gU1BSSVRFLkJBVENIX1NJWkU6IDIwMDBcbiAgICAvLyBUT0RPOiBtYXliZSBhZGQgUEFSVElDTEUuQkFUQ0hfU0laRTogMTUwMDBcbiAgICBTUFJJVEVfQkFUQ0hfU0laRTogMjAwMCAvL25pY2UgYmFsYW5jZSBiZXR3ZWVuIG1vYmlsZSBhbmQgZGVza3RvcCBtYWNoaW5lc1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBDT05TVDtcbiIsInZhciBtYXRoID0gcmVxdWlyZSgnLi4vbWF0aCcpLFxuICAgIHV0aWxzID0gcmVxdWlyZSgnLi4vdXRpbHMnKSxcbiAgICBEaXNwbGF5T2JqZWN0ID0gcmVxdWlyZSgnLi9EaXNwbGF5T2JqZWN0JyksXG4gICAgUmVuZGVyVGV4dHVyZSA9IHJlcXVpcmUoJy4uL3RleHR1cmVzL1JlbmRlclRleHR1cmUnKSxcbiAgICBfdGVtcE1hdHJpeCA9IG5ldyBtYXRoLk1hdHJpeCgpO1xuXG4vKipcbiAqIEEgQ29udGFpbmVyIHJlcHJlc2VudHMgYSBjb2xsZWN0aW9uIG9mIGRpc3BsYXkgb2JqZWN0cy5cbiAqIEl0IGlzIHRoZSBiYXNlIGNsYXNzIG9mIGFsbCBkaXNwbGF5IG9iamVjdHMgdGhhdCBhY3QgYXMgYSBjb250YWluZXIgZm9yIG90aGVyIG9iamVjdHMuXG4gKlxuICpgYGBqc1xuICogdmFyIGNvbnRhaW5lciA9IG5ldyBQSVhJLkNvbnRhaW5lcigpO1xuICogY29udGFpbmVyLmFkZENoaWxkKHNwcml0ZSk7XG4gKiBgYGBcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5EaXNwbGF5T2JqZWN0XG4gKiBAbWVtYmVyb2YgUElYSVxuICovXG5mdW5jdGlvbiBDb250YWluZXIoKVxue1xuICAgIERpc3BsYXlPYmplY3QuY2FsbCh0aGlzKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBhcnJheSBvZiBjaGlsZHJlbiBvZiB0aGlzIGNvbnRhaW5lci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuRGlzcGxheU9iamVjdFtdfVxuICAgICAqIEByZWFkb25seVxuICAgICAqL1xuICAgIHRoaXMuY2hpbGRyZW4gPSBbXTtcbn1cblxuLy8gY29uc3RydWN0b3JcbkNvbnRhaW5lci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKERpc3BsYXlPYmplY3QucHJvdG90eXBlKTtcbkNvbnRhaW5lci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBDb250YWluZXI7XG5tb2R1bGUuZXhwb3J0cyA9IENvbnRhaW5lcjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoQ29udGFpbmVyLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFRoZSB3aWR0aCBvZiB0aGUgQ29udGFpbmVyLCBzZXR0aW5nIHRoaXMgd2lsbCBhY3R1YWxseSBtb2RpZnkgdGhlIHNjYWxlIHRvIGFjaGlldmUgdGhlIHZhbHVlIHNldFxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLkNvbnRhaW5lciNcbiAgICAgKi9cbiAgICB3aWR0aDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnNjYWxlLnggKiB0aGlzLmdldExvY2FsQm91bmRzKCkud2lkdGg7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG5cbiAgICAgICAgICAgIHZhciB3aWR0aCA9IHRoaXMuZ2V0TG9jYWxCb3VuZHMoKS53aWR0aDtcblxuICAgICAgICAgICAgaWYgKHdpZHRoICE9PSAwKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHRoaXMuc2NhbGUueCA9IHZhbHVlIC8gd2lkdGg7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdGhpcy5zY2FsZS54ID0gMTtcbiAgICAgICAgICAgIH1cblxuXG4gICAgICAgICAgICB0aGlzLl93aWR0aCA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFRoZSBoZWlnaHQgb2YgdGhlIENvbnRhaW5lciwgc2V0dGluZyB0aGlzIHdpbGwgYWN0dWFsbHkgbW9kaWZ5IHRoZSBzY2FsZSB0byBhY2hpZXZlIHRoZSB2YWx1ZSBzZXRcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5Db250YWluZXIjXG4gICAgICovXG4gICAgaGVpZ2h0OiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuICB0aGlzLnNjYWxlLnkgKiB0aGlzLmdldExvY2FsQm91bmRzKCkuaGVpZ2h0O1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuXG4gICAgICAgICAgICB2YXIgaGVpZ2h0ID0gdGhpcy5nZXRMb2NhbEJvdW5kcygpLmhlaWdodDtcblxuICAgICAgICAgICAgaWYgKGhlaWdodCAhPT0gMClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNjYWxlLnkgPSB2YWx1ZSAvIGhlaWdodCA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdGhpcy5zY2FsZS55ID0gMTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5faGVpZ2h0ID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG59KTtcblxuLyoqXG4gKiBPdmVycmlkYWJsZSBtZXRob2QgdGhhdCBjYW4gYmUgdXNlZCBieSBDb250YWluZXIgc3ViY2xhc3NlcyB3aGVuZXZlciB0aGUgY2hpbGRyZW4gYXJyYXkgaXMgbW9kaWZpZWRcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5Db250YWluZXIucHJvdG90eXBlLm9uQ2hpbGRyZW5DaGFuZ2UgPSBmdW5jdGlvbiAoKSB7fTtcblxuLyoqXG4gKiBBZGRzIGEgY2hpbGQgdG8gdGhlIGNvbnRhaW5lci5cbiAqIFxuICogWW91IGNhbiBhbHNvIGFkZCBtdWx0cGxlIGl0ZW1zIGxpa2Ugc286IG15Q29udGFpbmVyLmFkZENoaWxkKHRoaW5rT25lLCB0aGluZ1R3bywgdGhpbmdUaHJlZSlcbiAqIEBwYXJhbSBjaGlsZCB7UElYSS5EaXNwbGF5T2JqZWN0fSBUaGUgRGlzcGxheU9iamVjdCB0byBhZGQgdG8gdGhlIGNvbnRhaW5lclxuICogQHJldHVybiB7UElYSS5EaXNwbGF5T2JqZWN0fSBUaGUgY2hpbGQgdGhhdCB3YXMgYWRkZWQuXG4gKi9cbkNvbnRhaW5lci5wcm90b3R5cGUuYWRkQ2hpbGQgPSBmdW5jdGlvbiAoY2hpbGQpXG57IFxuICAgIHZhciBhcmd1bWVudHNMZW5ndGggPSBhcmd1bWVudHMubGVuZ3RoO1xuXG4gICAgLy8gaWYgdGhlcmUgaXMgb25seSBvbmUgYXJndW1lbnQgd2UgY2FuIGJ5cGFzcyBsb29waW5nIHRocm91Z2ggdGhlIHRoZW1cbiAgICBpZihhcmd1bWVudHNMZW5ndGggPiAxKVxuICAgIHtcbiAgICAgICAgLy8gbG9vcCB0aHJvdWdoIHRoZSBhcmd1bWVudHMgcHJvcGVydHkgYW5kIGFkZCBhbGwgY2hpbGRyZW5cbiAgICAgICAgLy8gdXNlIGl0IHRoZSByaWdodCB3YXkgKC5sZW5ndGggYW5kIFtpXSkgc28gdGhhdCB0aGlzIGZ1bmN0aW9uIGNhbiBzdGlsbCBiZSBvcHRpbWlzZWQgYnkgSlMgcnVudGltZXNcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcmd1bWVudHNMZW5ndGg7IGkrKylcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5hZGRDaGlsZCggYXJndW1lbnRzW2ldICk7XG4gICAgICAgIH1cbiAgICB9ICAgICBcbiAgICBlbHNlXG4gICAge1xuICAgICAgICAvLyBpZiB0aGUgY2hpbGQgaGFzIGEgcGFyZW50IHRoZW4gbGV0cyByZW1vdmUgaXQgYXMgUGl4aSBvYmplY3RzIGNhbiBvbmx5IGV4aXN0IGluIG9uZSBwbGFjZVxuICAgICAgICBpZiAoY2hpbGQucGFyZW50KVxuICAgICAgICB7XG4gICAgICAgICAgICBjaGlsZC5wYXJlbnQucmVtb3ZlQ2hpbGQoY2hpbGQpO1xuICAgICAgICB9XG5cbiAgICAgICAgY2hpbGQucGFyZW50ID0gdGhpcztcbiAgICAgICAgXG4gICAgICAgIHRoaXMuY2hpbGRyZW4ucHVzaChjaGlsZCk7XG5cbiAgICAgICAgLy8gVE9ETyAtIGxldHMgZWl0aGVyIGRvIGFsbCBjYWxsYmFja3Mgb3IgYWxsIGV2ZW50cy4uIG5vdCBib3RoIVxuICAgICAgICB0aGlzLm9uQ2hpbGRyZW5DaGFuZ2UodGhpcy5jaGlsZHJlbi5sZW5ndGgtMSk7XG4gICAgICAgIGNoaWxkLmVtaXQoJ2FkZGVkJywgdGhpcyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGNoaWxkO1xufTtcblxuLyoqXG4gKiBBZGRzIGEgY2hpbGQgdG8gdGhlIGNvbnRhaW5lciBhdCBhIHNwZWNpZmllZCBpbmRleC4gSWYgdGhlIGluZGV4IGlzIG91dCBvZiBib3VuZHMgYW4gZXJyb3Igd2lsbCBiZSB0aHJvd25cbiAqXG4gKiBAcGFyYW0gY2hpbGQge1BJWEkuRGlzcGxheU9iamVjdH0gVGhlIGNoaWxkIHRvIGFkZFxuICogQHBhcmFtIGluZGV4IHtudW1iZXJ9IFRoZSBpbmRleCB0byBwbGFjZSB0aGUgY2hpbGQgaW5cbiAqIEByZXR1cm4ge1BJWEkuRGlzcGxheU9iamVjdH0gVGhlIGNoaWxkIHRoYXQgd2FzIGFkZGVkLlxuICovXG5Db250YWluZXIucHJvdG90eXBlLmFkZENoaWxkQXQgPSBmdW5jdGlvbiAoY2hpbGQsIGluZGV4KVxue1xuICAgIGlmIChpbmRleCA+PSAwICYmIGluZGV4IDw9IHRoaXMuY2hpbGRyZW4ubGVuZ3RoKVxuICAgIHtcbiAgICAgICAgaWYgKGNoaWxkLnBhcmVudClcbiAgICAgICAge1xuICAgICAgICAgICAgY2hpbGQucGFyZW50LnJlbW92ZUNoaWxkKGNoaWxkKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNoaWxkLnBhcmVudCA9IHRoaXM7XG5cbiAgICAgICAgdGhpcy5jaGlsZHJlbi5zcGxpY2UoaW5kZXgsIDAsIGNoaWxkKTtcblxuICAgICAgICAvLyBUT0RPIC0gbGV0cyBlaXRoZXIgZG8gYWxsIGNhbGxiYWNrcyBvciBhbGwgZXZlbnRzLi4gbm90IGJvdGghXG4gICAgICAgIHRoaXMub25DaGlsZHJlbkNoYW5nZShpbmRleCk7XG4gICAgICAgIGNoaWxkLmVtaXQoJ2FkZGVkJywgdGhpcyk7XG5cbiAgICAgICAgcmV0dXJuIGNoaWxkO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoY2hpbGQgKyAnYWRkQ2hpbGRBdDogVGhlIGluZGV4ICcrIGluZGV4ICsnIHN1cHBsaWVkIGlzIG91dCBvZiBib3VuZHMgJyArIHRoaXMuY2hpbGRyZW4ubGVuZ3RoKTtcbiAgICB9XG59O1xuXG4vKipcbiAqIFN3YXBzIHRoZSBwb3NpdGlvbiBvZiAyIERpc3BsYXkgT2JqZWN0cyB3aXRoaW4gdGhpcyBjb250YWluZXIuXG4gKlxuICogQHBhcmFtIGNoaWxkIHtQSVhJLkRpc3BsYXlPYmplY3R9XG4gKiBAcGFyYW0gY2hpbGQyIHtQSVhJLkRpc3BsYXlPYmplY3R9XG4gKi9cbkNvbnRhaW5lci5wcm90b3R5cGUuc3dhcENoaWxkcmVuID0gZnVuY3Rpb24gKGNoaWxkLCBjaGlsZDIpXG57XG4gICAgaWYgKGNoaWxkID09PSBjaGlsZDIpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFyIGluZGV4MSA9IHRoaXMuZ2V0Q2hpbGRJbmRleChjaGlsZCk7XG4gICAgdmFyIGluZGV4MiA9IHRoaXMuZ2V0Q2hpbGRJbmRleChjaGlsZDIpO1xuXG4gICAgaWYgKGluZGV4MSA8IDAgfHwgaW5kZXgyIDwgMClcbiAgICB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignc3dhcENoaWxkcmVuOiBCb3RoIHRoZSBzdXBwbGllZCBEaXNwbGF5T2JqZWN0cyBtdXN0IGJlIGNoaWxkcmVuIG9mIHRoZSBjYWxsZXIuJyk7XG4gICAgfVxuXG4gICAgdGhpcy5jaGlsZHJlbltpbmRleDFdID0gY2hpbGQyO1xuICAgIHRoaXMuY2hpbGRyZW5baW5kZXgyXSA9IGNoaWxkO1xuICAgIHRoaXMub25DaGlsZHJlbkNoYW5nZShpbmRleDEgPCBpbmRleDIgPyBpbmRleDEgOiBpbmRleDIpO1xufTtcblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBpbmRleCBwb3NpdGlvbiBvZiBhIGNoaWxkIERpc3BsYXlPYmplY3QgaW5zdGFuY2VcbiAqXG4gKiBAcGFyYW0gY2hpbGQge1BJWEkuRGlzcGxheU9iamVjdH0gVGhlIERpc3BsYXlPYmplY3QgaW5zdGFuY2UgdG8gaWRlbnRpZnlcbiAqIEByZXR1cm4ge251bWJlcn0gVGhlIGluZGV4IHBvc2l0aW9uIG9mIHRoZSBjaGlsZCBkaXNwbGF5IG9iamVjdCB0byBpZGVudGlmeVxuICovXG5Db250YWluZXIucHJvdG90eXBlLmdldENoaWxkSW5kZXggPSBmdW5jdGlvbiAoY2hpbGQpXG57XG4gICAgdmFyIGluZGV4ID0gdGhpcy5jaGlsZHJlbi5pbmRleE9mKGNoaWxkKTtcblxuICAgIGlmIChpbmRleCA9PT0gLTEpXG4gICAge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RoZSBzdXBwbGllZCBEaXNwbGF5T2JqZWN0IG11c3QgYmUgYSBjaGlsZCBvZiB0aGUgY2FsbGVyJyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGluZGV4O1xufTtcblxuLyoqXG4gKiBDaGFuZ2VzIHRoZSBwb3NpdGlvbiBvZiBhbiBleGlzdGluZyBjaGlsZCBpbiB0aGUgZGlzcGxheSBvYmplY3QgY29udGFpbmVyXG4gKlxuICogQHBhcmFtIGNoaWxkIHtQSVhJLkRpc3BsYXlPYmplY3R9IFRoZSBjaGlsZCBEaXNwbGF5T2JqZWN0IGluc3RhbmNlIGZvciB3aGljaCB5b3Ugd2FudCB0byBjaGFuZ2UgdGhlIGluZGV4IG51bWJlclxuICogQHBhcmFtIGluZGV4IHtudW1iZXJ9IFRoZSByZXN1bHRpbmcgaW5kZXggbnVtYmVyIGZvciB0aGUgY2hpbGQgZGlzcGxheSBvYmplY3RcbiAqL1xuQ29udGFpbmVyLnByb3RvdHlwZS5zZXRDaGlsZEluZGV4ID0gZnVuY3Rpb24gKGNoaWxkLCBpbmRleClcbntcbiAgICBpZiAoaW5kZXggPCAwIHx8IGluZGV4ID49IHRoaXMuY2hpbGRyZW4ubGVuZ3RoKVxuICAgIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdUaGUgc3VwcGxpZWQgaW5kZXggaXMgb3V0IG9mIGJvdW5kcycpO1xuICAgIH1cblxuICAgIHZhciBjdXJyZW50SW5kZXggPSB0aGlzLmdldENoaWxkSW5kZXgoY2hpbGQpO1xuXG4gICAgdXRpbHMucmVtb3ZlSXRlbXModGhpcy5jaGlsZHJlbiwgY3VycmVudEluZGV4LCAxKTsgLy8gcmVtb3ZlIGZyb20gb2xkIHBvc2l0aW9uXG4gICAgdGhpcy5jaGlsZHJlbi5zcGxpY2UoaW5kZXgsIDAsIGNoaWxkKTsgLy9hZGQgYXQgbmV3IHBvc2l0aW9uXG4gICAgdGhpcy5vbkNoaWxkcmVuQ2hhbmdlKGluZGV4KTtcbn07XG5cbi8qKlxuICogUmV0dXJucyB0aGUgY2hpbGQgYXQgdGhlIHNwZWNpZmllZCBpbmRleFxuICpcbiAqIEBwYXJhbSBpbmRleCB7bnVtYmVyfSBUaGUgaW5kZXggdG8gZ2V0IHRoZSBjaGlsZCBhdFxuICogQHJldHVybiB7UElYSS5EaXNwbGF5T2JqZWN0fSBUaGUgY2hpbGQgYXQgdGhlIGdpdmVuIGluZGV4LCBpZiBhbnkuXG4gKi9cbkNvbnRhaW5lci5wcm90b3R5cGUuZ2V0Q2hpbGRBdCA9IGZ1bmN0aW9uIChpbmRleClcbntcbiAgICBpZiAoaW5kZXggPCAwIHx8IGluZGV4ID49IHRoaXMuY2hpbGRyZW4ubGVuZ3RoKVxuICAgIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdnZXRDaGlsZEF0OiBTdXBwbGllZCBpbmRleCAnICsgaW5kZXggKyAnIGRvZXMgbm90IGV4aXN0IGluIHRoZSBjaGlsZCBsaXN0LCBvciB0aGUgc3VwcGxpZWQgRGlzcGxheU9iamVjdCBpcyBub3QgYSBjaGlsZCBvZiB0aGUgY2FsbGVyJyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuY2hpbGRyZW5baW5kZXhdO1xufTtcblxuLyoqXG4gKiBSZW1vdmVzIGEgY2hpbGQgZnJvbSB0aGUgY29udGFpbmVyLlxuICpcbiAqIEBwYXJhbSBjaGlsZCB7UElYSS5EaXNwbGF5T2JqZWN0fSBUaGUgRGlzcGxheU9iamVjdCB0byByZW1vdmVcbiAqIEByZXR1cm4ge1BJWEkuRGlzcGxheU9iamVjdH0gVGhlIGNoaWxkIHRoYXQgd2FzIHJlbW92ZWQuXG4gKi9cbkNvbnRhaW5lci5wcm90b3R5cGUucmVtb3ZlQ2hpbGQgPSBmdW5jdGlvbiAoY2hpbGQpXG57XG4gICAgdmFyIGFyZ3VtZW50c0xlbmd0aCA9IGFyZ3VtZW50cy5sZW5ndGg7XG5cbiAgICAvLyBpZiB0aGVyZSBpcyBvbmx5IG9uZSBhcmd1bWVudCB3ZSBjYW4gYnlwYXNzIGxvb3BpbmcgdGhyb3VnaCB0aGUgdGhlbVxuICAgIGlmKGFyZ3VtZW50c0xlbmd0aCA+IDEpXG4gICAge1xuICAgICAgICAvLyBsb29wIHRocm91Z2ggdGhlIGFyZ3VtZW50cyBwcm9wZXJ0eSBhbmQgYWRkIGFsbCBjaGlsZHJlblxuICAgICAgICAvLyB1c2UgaXQgdGhlIHJpZ2h0IHdheSAoLmxlbmd0aCBhbmQgW2ldKSBzbyB0aGF0IHRoaXMgZnVuY3Rpb24gY2FuIHN0aWxsIGJlIG9wdGltaXNlZCBieSBKUyBydW50aW1lc1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFyZ3VtZW50c0xlbmd0aDsgaSsrKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnJlbW92ZUNoaWxkKCBhcmd1bWVudHNbaV0gKTtcbiAgICAgICAgfVxuICAgIH0gICAgIFxuICAgIGVsc2VcbiAgICB7ICAgXG4gICAgICAgIHZhciBpbmRleCA9IHRoaXMuY2hpbGRyZW4uaW5kZXhPZihjaGlsZCk7XG5cbiAgICAgICAgaWYgKGluZGV4ID09PSAtMSlcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY2hpbGQucGFyZW50ID0gbnVsbDtcbiAgICAgICAgdXRpbHMucmVtb3ZlSXRlbXModGhpcy5jaGlsZHJlbiwgaW5kZXgsIDEpO1xuXG4gICAgICAgIC8vIFRPRE8gLSBsZXRzIGVpdGhlciBkbyBhbGwgY2FsbGJhY2tzIG9yIGFsbCBldmVudHMuLiBub3QgYm90aCFcbiAgICAgICAgdGhpcy5vbkNoaWxkcmVuQ2hhbmdlKGluZGV4KTtcbiAgICAgICAgY2hpbGQuZW1pdCgncmVtb3ZlZCcsIHRoaXMpO1xuICAgIH1cblxuICAgIHJldHVybiBjaGlsZDtcbn07XG5cbi8qKlxuICogUmVtb3ZlcyBhIGNoaWxkIGZyb20gdGhlIHNwZWNpZmllZCBpbmRleCBwb3NpdGlvbi5cbiAqXG4gKiBAcGFyYW0gaW5kZXgge251bWJlcn0gVGhlIGluZGV4IHRvIGdldCB0aGUgY2hpbGQgZnJvbVxuICogQHJldHVybiB7UElYSS5EaXNwbGF5T2JqZWN0fSBUaGUgY2hpbGQgdGhhdCB3YXMgcmVtb3ZlZC5cbiAqL1xuQ29udGFpbmVyLnByb3RvdHlwZS5yZW1vdmVDaGlsZEF0ID0gZnVuY3Rpb24gKGluZGV4KVxue1xuICAgIHZhciBjaGlsZCA9IHRoaXMuZ2V0Q2hpbGRBdChpbmRleCk7XG5cbiAgICBjaGlsZC5wYXJlbnQgPSBudWxsO1xuICAgIHV0aWxzLnJlbW92ZUl0ZW1zKHRoaXMuY2hpbGRyZW4sIGluZGV4LCAxKTtcblxuICAgIC8vIFRPRE8gLSBsZXRzIGVpdGhlciBkbyBhbGwgY2FsbGJhY2tzIG9yIGFsbCBldmVudHMuLiBub3QgYm90aCFcbiAgICB0aGlzLm9uQ2hpbGRyZW5DaGFuZ2UoaW5kZXgpO1xuICAgIGNoaWxkLmVtaXQoJ3JlbW92ZWQnLCB0aGlzKTtcblxuICAgIHJldHVybiBjaGlsZDtcbn07XG5cbi8qKlxuICogUmVtb3ZlcyBhbGwgY2hpbGRyZW4gZnJvbSB0aGlzIGNvbnRhaW5lciB0aGF0IGFyZSB3aXRoaW4gdGhlIGJlZ2luIGFuZCBlbmQgaW5kZXhlcy5cbiAqXG4gKiBAcGFyYW0gYmVnaW5JbmRleCB7bnVtYmVyfSBUaGUgYmVnaW5uaW5nIHBvc2l0aW9uLiBEZWZhdWx0IHZhbHVlIGlzIDAuXG4gKiBAcGFyYW0gZW5kSW5kZXgge251bWJlcn0gVGhlIGVuZGluZyBwb3NpdGlvbi4gRGVmYXVsdCB2YWx1ZSBpcyBzaXplIG9mIHRoZSBjb250YWluZXIuXG4gKi9cbkNvbnRhaW5lci5wcm90b3R5cGUucmVtb3ZlQ2hpbGRyZW4gPSBmdW5jdGlvbiAoYmVnaW5JbmRleCwgZW5kSW5kZXgpXG57XG4gICAgdmFyIGJlZ2luID0gYmVnaW5JbmRleCB8fCAwO1xuICAgIHZhciBlbmQgPSB0eXBlb2YgZW5kSW5kZXggPT09ICdudW1iZXInID8gZW5kSW5kZXggOiB0aGlzLmNoaWxkcmVuLmxlbmd0aDtcbiAgICB2YXIgcmFuZ2UgPSBlbmQgLSBiZWdpbjtcbiAgICB2YXIgcmVtb3ZlZCwgaTtcblxuICAgIGlmIChyYW5nZSA+IDAgJiYgcmFuZ2UgPD0gZW5kKVxuICAgIHtcbiAgICAgICAgcmVtb3ZlZCA9IHRoaXMuY2hpbGRyZW4uc3BsaWNlKGJlZ2luLCByYW5nZSk7XG5cbiAgICAgICAgZm9yIChpID0gMDsgaSA8IHJlbW92ZWQubGVuZ3RoOyArK2kpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJlbW92ZWRbaV0ucGFyZW50ID0gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMub25DaGlsZHJlbkNoYW5nZShiZWdpbkluZGV4KTtcblxuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgcmVtb3ZlZC5sZW5ndGg7ICsraSlcbiAgICAgICAge1xuICAgICAgICAgICAgcmVtb3ZlZFtpXS5lbWl0KCdyZW1vdmVkJywgdGhpcyk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gcmVtb3ZlZDtcbiAgICB9XG4gICAgZWxzZSBpZiAocmFuZ2UgPT09IDAgJiYgdGhpcy5jaGlsZHJlbi5sZW5ndGggPT09IDApXG4gICAge1xuICAgICAgICByZXR1cm4gW107XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdyZW1vdmVDaGlsZHJlbjogbnVtZXJpYyB2YWx1ZXMgYXJlIG91dHNpZGUgdGhlIGFjY2VwdGFibGUgcmFuZ2UuJyk7XG4gICAgfVxufTtcblxuLyoqXG4gKiBVc2VmdWwgZnVuY3Rpb24gdGhhdCByZXR1cm5zIGEgdGV4dHVyZSBvZiB0aGUgZGlzcGxheSBvYmplY3QgdGhhdCBjYW4gdGhlbiBiZSB1c2VkIHRvIGNyZWF0ZSBzcHJpdGVzXG4gKiBUaGlzIGNhbiBiZSBxdWl0ZSB1c2VmdWwgaWYgeW91ciBkaXNwbGF5T2JqZWN0IGlzIHN0YXRpYyAvIGNvbXBsaWNhdGVkIGFuZCBuZWVkcyB0byBiZSByZXVzZWQgbXVsdGlwbGUgdGltZXMuXG4gKlxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLkNhbnZhc1JlbmRlcmVyfFBJWEkuV2ViR0xSZW5kZXJlcn0gVGhlIHJlbmRlcmVyIHVzZWQgdG8gZ2VuZXJhdGUgdGhlIHRleHR1cmUuXG4gKiBAcGFyYW0gcmVzb2x1dGlvbiB7bnVtYmVyfSBUaGUgcmVzb2x1dGlvbiBvZiB0aGUgdGV4dHVyZSBiZWluZyBnZW5lcmF0ZWRcbiAqIEBwYXJhbSBzY2FsZU1vZGUge251bWJlcn0gU2VlIHtAbGluayBQSVhJLlNDQUxFX01PREVTfSBmb3IgcG9zc2libGUgdmFsdWVzXG4gKiBAcmV0dXJuIHtQSVhJLlRleHR1cmV9IGEgdGV4dHVyZSBvZiB0aGUgZGlzcGxheSBvYmplY3RcbiAqL1xuQ29udGFpbmVyLnByb3RvdHlwZS5nZW5lcmF0ZVRleHR1cmUgPSBmdW5jdGlvbiAocmVuZGVyZXIsIHJlc29sdXRpb24sIHNjYWxlTW9kZSlcbntcbiAgICB2YXIgYm91bmRzID0gdGhpcy5nZXRMb2NhbEJvdW5kcygpO1xuXG4gICAgdmFyIHJlbmRlclRleHR1cmUgPSBuZXcgUmVuZGVyVGV4dHVyZShyZW5kZXJlciwgYm91bmRzLndpZHRoIHwgMCwgYm91bmRzLmhlaWdodCB8IDAsIHNjYWxlTW9kZSwgcmVzb2x1dGlvbik7XG5cbiAgICBfdGVtcE1hdHJpeC50eCA9IC1ib3VuZHMueDtcbiAgICBfdGVtcE1hdHJpeC50eSA9IC1ib3VuZHMueTtcblxuICAgIHJlbmRlclRleHR1cmUucmVuZGVyKHRoaXMsIF90ZW1wTWF0cml4KTtcblxuICAgIHJldHVybiByZW5kZXJUZXh0dXJlO1xufTtcblxuLypcbiAqIFVwZGF0ZXMgdGhlIHRyYW5zZm9ybSBvbiBhbGwgY2hpbGRyZW4gb2YgdGhpcyBjb250YWluZXIgZm9yIHJlbmRlcmluZ1xuICpcbiAqIEBwcml2YXRlXG4gKi9cbkNvbnRhaW5lci5wcm90b3R5cGUudXBkYXRlVHJhbnNmb3JtID0gZnVuY3Rpb24gKClcbntcbiAgICBpZiAoIXRoaXMudmlzaWJsZSlcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLmRpc3BsYXlPYmplY3RVcGRhdGVUcmFuc2Zvcm0oKTtcblxuICAgIGZvciAodmFyIGkgPSAwLCBqID0gdGhpcy5jaGlsZHJlbi5sZW5ndGg7IGkgPCBqOyArK2kpXG4gICAge1xuICAgICAgICB0aGlzLmNoaWxkcmVuW2ldLnVwZGF0ZVRyYW5zZm9ybSgpO1xuICAgIH1cblxuICAgIHRoaXMuZGlydHlUcmFuc2Zvcm0gPSBmYWxzZTtcbn07XG5cbi8vIHBlcmZvcm1hbmNlIGluY3JlYXNlIHRvIGF2b2lkIHVzaW5nIGNhbGwuLiAoMTB4IGZhc3RlcilcbkNvbnRhaW5lci5wcm90b3R5cGUuY29udGFpbmVyVXBkYXRlVHJhbnNmb3JtID0gQ29udGFpbmVyLnByb3RvdHlwZS51cGRhdGVUcmFuc2Zvcm07XG5cbi8qKlxuICogUmV0cmlldmVzIHRoZSBib3VuZHMgb2YgdGhlIENvbnRhaW5lciBhcyBhIHJlY3RhbmdsZS4gVGhlIGJvdW5kcyBjYWxjdWxhdGlvbiB0YWtlcyBhbGwgdmlzaWJsZSBjaGlsZHJlbiBpbnRvIGNvbnNpZGVyYXRpb24uXG4gKlxuICogQHJldHVybiB7UElYSS5SZWN0YW5nbGV9IFRoZSByZWN0YW5ndWxhciBib3VuZGluZyBhcmVhXG4gKi9cbkNvbnRhaW5lci5wcm90b3R5cGUuZ2V0Qm91bmRzID0gZnVuY3Rpb24gKClcbntcbiAgICBpZighdGhpcy5fY3VycmVudEJvdW5kcylcbiAgICB7XG5cbiAgICAgICAgaWYgKHRoaXMuY2hpbGRyZW4ubGVuZ3RoID09PSAwKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gbWF0aC5SZWN0YW5nbGUuRU1QVFk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBUT0RPIHRoZSBib3VuZHMgaGF2ZSBhbHJlYWR5IGJlZW4gY2FsY3VsYXRlZCB0aGlzIHJlbmRlciBzZXNzaW9uIHNvIHJldHVybiB3aGF0IHdlIGhhdmVcblxuICAgICAgICB2YXIgbWluWCA9IEluZmluaXR5O1xuICAgICAgICB2YXIgbWluWSA9IEluZmluaXR5O1xuXG4gICAgICAgIHZhciBtYXhYID0gLUluZmluaXR5O1xuICAgICAgICB2YXIgbWF4WSA9IC1JbmZpbml0eTtcblxuICAgICAgICB2YXIgY2hpbGRCb3VuZHM7XG4gICAgICAgIHZhciBjaGlsZE1heFg7XG4gICAgICAgIHZhciBjaGlsZE1heFk7XG5cbiAgICAgICAgdmFyIGNoaWxkVmlzaWJsZSA9IGZhbHNlO1xuXG4gICAgICAgIGZvciAodmFyIGkgPSAwLCBqID0gdGhpcy5jaGlsZHJlbi5sZW5ndGg7IGkgPCBqOyArK2kpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHZhciBjaGlsZCA9IHRoaXMuY2hpbGRyZW5baV07XG5cbiAgICAgICAgICAgIGlmICghY2hpbGQudmlzaWJsZSlcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY2hpbGRWaXNpYmxlID0gdHJ1ZTtcblxuICAgICAgICAgICAgY2hpbGRCb3VuZHMgPSB0aGlzLmNoaWxkcmVuW2ldLmdldEJvdW5kcygpO1xuXG4gICAgICAgICAgICBtaW5YID0gbWluWCA8IGNoaWxkQm91bmRzLnggPyBtaW5YIDogY2hpbGRCb3VuZHMueDtcbiAgICAgICAgICAgIG1pblkgPSBtaW5ZIDwgY2hpbGRCb3VuZHMueSA/IG1pblkgOiBjaGlsZEJvdW5kcy55O1xuXG4gICAgICAgICAgICBjaGlsZE1heFggPSBjaGlsZEJvdW5kcy53aWR0aCArIGNoaWxkQm91bmRzLng7XG4gICAgICAgICAgICBjaGlsZE1heFkgPSBjaGlsZEJvdW5kcy5oZWlnaHQgKyBjaGlsZEJvdW5kcy55O1xuXG4gICAgICAgICAgICBtYXhYID0gbWF4WCA+IGNoaWxkTWF4WCA/IG1heFggOiBjaGlsZE1heFg7XG4gICAgICAgICAgICBtYXhZID0gbWF4WSA+IGNoaWxkTWF4WSA/IG1heFkgOiBjaGlsZE1heFk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIWNoaWxkVmlzaWJsZSlcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIG1hdGguUmVjdGFuZ2xlLkVNUFRZO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGJvdW5kcyA9IHRoaXMuX2JvdW5kcztcblxuICAgICAgICBib3VuZHMueCA9IG1pblg7XG4gICAgICAgIGJvdW5kcy55ID0gbWluWTtcbiAgICAgICAgYm91bmRzLndpZHRoID0gbWF4WCAtIG1pblg7XG4gICAgICAgIGJvdW5kcy5oZWlnaHQgPSBtYXhZIC0gbWluWTtcblxuICAgICAgICB0aGlzLl9jdXJyZW50Qm91bmRzID0gYm91bmRzO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLl9jdXJyZW50Qm91bmRzO1xufTtcblxuQ29udGFpbmVyLnByb3RvdHlwZS5jb250YWluZXJHZXRCb3VuZHMgPSBDb250YWluZXIucHJvdG90eXBlLmdldEJvdW5kcztcblxuLyoqXG4gKiBSZXRyaWV2ZXMgdGhlIG5vbi1nbG9iYWwgbG9jYWwgYm91bmRzIG9mIHRoZSBDb250YWluZXIgYXMgYSByZWN0YW5nbGUuXG4gKiBUaGUgY2FsY3VsYXRpb24gdGFrZXMgYWxsIHZpc2libGUgY2hpbGRyZW4gaW50byBjb25zaWRlcmF0aW9uLlxuICpcbiAqIEByZXR1cm4ge1BJWEkuUmVjdGFuZ2xlfSBUaGUgcmVjdGFuZ3VsYXIgYm91bmRpbmcgYXJlYVxuICovXG5Db250YWluZXIucHJvdG90eXBlLmdldExvY2FsQm91bmRzID0gZnVuY3Rpb24gKClcbntcbiAgICB2YXIgbWF0cml4Q2FjaGUgPSB0aGlzLndvcmxkVHJhbnNmb3JtO1xuXG4gICAgdGhpcy53b3JsZFRyYW5zZm9ybSA9IG1hdGguTWF0cml4LklERU5USVRZO1xuXG4gICAgZm9yICh2YXIgaSA9IDAsIGogPSB0aGlzLmNoaWxkcmVuLmxlbmd0aDsgaSA8IGo7ICsraSlcbiAgICB7XG4gICAgICAgIHRoaXMuY2hpbGRyZW5baV0udXBkYXRlVHJhbnNmb3JtKCk7XG4gICAgfVxuXG4gICAgdGhpcy53b3JsZFRyYW5zZm9ybSA9IG1hdHJpeENhY2hlO1xuXG4gICAgdGhpcy5fY3VycmVudEJvdW5kcyA9IG51bGw7XG5cbiAgICByZXR1cm4gdGhpcy5nZXRCb3VuZHMoIG1hdGguTWF0cml4LklERU5USVRZICk7XG59O1xuXG4vKipcbiAqIFJlbmRlcnMgdGhlIG9iamVjdCB1c2luZyB0aGUgV2ViR0wgcmVuZGVyZXJcbiAqXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcn0gVGhlIHJlbmRlcmVyXG4gKi9cbkNvbnRhaW5lci5wcm90b3R5cGUucmVuZGVyV2ViR0wgPSBmdW5jdGlvbiAocmVuZGVyZXIpXG57XG5cbiAgICAvLyBpZiB0aGUgb2JqZWN0IGlzIG5vdCB2aXNpYmxlIG9yIHRoZSBhbHBoYSBpcyAwIHRoZW4gbm8gbmVlZCB0byByZW5kZXIgdGhpcyBlbGVtZW50XG4gICAgaWYgKCF0aGlzLnZpc2libGUgfHwgdGhpcy53b3JsZEFscGhhIDw9IDAgfHwgIXRoaXMucmVuZGVyYWJsZSlcbiAgICB7XG4gICAgICBcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHZhciBpLCBqO1xuXG4gICAgLy8gZG8gYSBxdWljayBjaGVjayB0byBzZWUgaWYgdGhpcyBlbGVtZW50IGhhcyBhIG1hc2sgb3IgYSBmaWx0ZXIuXG4gICAgaWYgKHRoaXMuX21hc2sgfHwgdGhpcy5fZmlsdGVycylcbiAgICB7XG4gICAgICAgIHJlbmRlcmVyLmN1cnJlbnRSZW5kZXJlci5mbHVzaCgpO1xuXG4gICAgICAgIC8vIHB1c2ggZmlsdGVyIGZpcnN0IGFzIHdlIG5lZWQgdG8gZW5zdXJlIHRoZSBzdGVuY2lsIGJ1ZmZlciBpcyBjb3JyZWN0IGZvciBhbnkgbWFza2luZ1xuICAgICAgICBpZiAodGhpcy5fZmlsdGVycyAmJiB0aGlzLl9maWx0ZXJzLmxlbmd0aClcbiAgICAgICAge1xuICAgICAgICAgICAgcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5wdXNoRmlsdGVyKHRoaXMsIHRoaXMuX2ZpbHRlcnMpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuX21hc2spXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJlbmRlcmVyLm1hc2tNYW5hZ2VyLnB1c2hNYXNrKHRoaXMsIHRoaXMuX21hc2spO1xuICAgICAgICB9XG5cbiAgICAgICAgcmVuZGVyZXIuY3VycmVudFJlbmRlcmVyLnN0YXJ0KCk7XG5cbiAgICAgICAgLy8gYWRkIHRoaXMgb2JqZWN0IHRvIHRoZSBiYXRjaCwgb25seSByZW5kZXJlZCBpZiBpdCBoYXMgYSB0ZXh0dXJlLlxuICAgICAgICB0aGlzLl9yZW5kZXJXZWJHTChyZW5kZXJlcik7XG5cbiAgICAgICAgLy8gbm93IGxvb3AgdGhyb3VnaCB0aGUgY2hpbGRyZW4gYW5kIG1ha2Ugc3VyZSB0aGV5IGdldCByZW5kZXJlZFxuICAgICAgICBmb3IgKGkgPSAwLCBqID0gdGhpcy5jaGlsZHJlbi5sZW5ndGg7IGkgPCBqOyBpKyspXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuY2hpbGRyZW5baV0ucmVuZGVyV2ViR0wocmVuZGVyZXIpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmVuZGVyZXIuY3VycmVudFJlbmRlcmVyLmZsdXNoKCk7XG5cbiAgICAgICAgaWYgKHRoaXMuX21hc2spXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJlbmRlcmVyLm1hc2tNYW5hZ2VyLnBvcE1hc2sodGhpcywgdGhpcy5fbWFzayk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5fZmlsdGVycylcbiAgICAgICAge1xuICAgICAgICAgICAgcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5wb3BGaWx0ZXIoKTtcblxuICAgICAgICB9XG4gICAgICAgIHJlbmRlcmVyLmN1cnJlbnRSZW5kZXJlci5zdGFydCgpO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICB0aGlzLl9yZW5kZXJXZWJHTChyZW5kZXJlcik7XG5cbiAgICAgICAgLy8gc2ltcGxlIHJlbmRlciBjaGlsZHJlbiFcbiAgICAgICAgZm9yIChpID0gMCwgaiA9IHRoaXMuY2hpbGRyZW4ubGVuZ3RoOyBpIDwgajsgKytpKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmNoaWxkcmVuW2ldLnJlbmRlcldlYkdMKHJlbmRlcmVyKTtcbiAgICAgICAgfVxuICAgIH1cbn07XG5cbi8qKlxuICogVG8gYmUgb3ZlcnJpZGRlbiBieSB0aGUgc3ViY2xhc3NcbiAqXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcn0gVGhlIHJlbmRlcmVyXG4gKiBAcHJpdmF0ZVxuICovXG5Db250YWluZXIucHJvdG90eXBlLl9yZW5kZXJXZWJHTCA9IGZ1bmN0aW9uIChyZW5kZXJlcikgLy8ganNoaW50IHVudXNlZDpmYWxzZVxue1xuICAgIC8vIHRoaXMgaXMgd2hlcmUgY29udGVudCBpdHNlbGYgZ2V0cyByZW5kZXJlZC4uLlxufTtcblxuLyoqXG4gKiBUbyBiZSBvdmVycmlkZGVuIGJ5IHRoZSBzdWJjbGFzc1xuICpcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5DYW52YXNSZW5kZXJlcn0gVGhlIHJlbmRlcmVyXG4gKiBAcHJpdmF0ZVxuICovXG5Db250YWluZXIucHJvdG90eXBlLl9yZW5kZXJDYW52YXMgPSBmdW5jdGlvbiAocmVuZGVyZXIpIC8vIGpzaGludCB1bnVzZWQ6ZmFsc2VcbntcbiAgICAvLyB0aGlzIGlzIHdoZXJlIGNvbnRlbnQgaXRzZWxmIGdldHMgcmVuZGVyZWQuLi5cbn07XG5cblxuLyoqXG4gKiBSZW5kZXJzIHRoZSBvYmplY3QgdXNpbmcgdGhlIENhbnZhcyByZW5kZXJlclxuICpcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5DYW52YXNSZW5kZXJlcn0gVGhlIHJlbmRlcmVyXG4gKi9cbkNvbnRhaW5lci5wcm90b3R5cGUucmVuZGVyQ2FudmFzID0gZnVuY3Rpb24gKHJlbmRlcmVyKVxue1xuICAgIC8vIGlmIG5vdCB2aXNpYmxlIG9yIHRoZSBhbHBoYSBpcyAwIHRoZW4gbm8gbmVlZCB0byByZW5kZXIgdGhpc1xuICAgIGlmICghdGhpcy52aXNpYmxlIHx8IHRoaXMuYWxwaGEgPD0gMCB8fCAhdGhpcy5yZW5kZXJhYmxlKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICh0aGlzLl9tYXNrKVxuICAgIHtcbiAgICAgICAgcmVuZGVyZXIubWFza01hbmFnZXIucHVzaE1hc2sodGhpcy5fbWFzaywgcmVuZGVyZXIpO1xuICAgIH1cblxuICAgIHRoaXMuX3JlbmRlckNhbnZhcyhyZW5kZXJlcik7XG4gICAgZm9yICh2YXIgaSA9IDAsIGogPSB0aGlzLmNoaWxkcmVuLmxlbmd0aDsgaSA8IGo7ICsraSlcbiAgICB7XG4gICAgICAgIHRoaXMuY2hpbGRyZW5baV0ucmVuZGVyQ2FudmFzKHJlbmRlcmVyKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5fbWFzaylcbiAgICB7XG4gICAgICAgIHJlbmRlcmVyLm1hc2tNYW5hZ2VyLnBvcE1hc2socmVuZGVyZXIpO1xuICAgIH1cbn07XG5cbi8qKlxuICogRGVzdHJveXMgdGhlIGNvbnRhaW5lclxuICogQHBhcmFtIFtkZXN0cm95Q2hpbGRyZW49ZmFsc2VdIHtib29sZWFufSBpZiBzZXQgdG8gdHJ1ZSwgYWxsIHRoZSBjaGlsZHJlbiB3aWxsIGhhdmUgdGhlaXIgZGVzdHJveSBtZXRob2QgY2FsbGVkIGFzIHdlbGxcbiAqL1xuQ29udGFpbmVyLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKGRlc3Ryb3lDaGlsZHJlbilcbntcbiAgICBEaXNwbGF5T2JqZWN0LnByb3RvdHlwZS5kZXN0cm95LmNhbGwodGhpcyk7XG5cbiAgICBpZiAoZGVzdHJveUNoaWxkcmVuKVxuICAgIHtcbiAgICAgICAgZm9yICh2YXIgaSA9IDAsIGogPSB0aGlzLmNoaWxkcmVuLmxlbmd0aDsgaSA8IGo7ICsraSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5jaGlsZHJlbltpXS5kZXN0cm95KGRlc3Ryb3lDaGlsZHJlbik7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLnJlbW92ZUNoaWxkcmVuKCk7XG5cbiAgICB0aGlzLmNoaWxkcmVuID0gbnVsbDtcbn07XG4iLCJ2YXIgbWF0aCA9IHJlcXVpcmUoJy4uL21hdGgnKSxcbiAgICBSZW5kZXJUZXh0dXJlID0gcmVxdWlyZSgnLi4vdGV4dHVyZXMvUmVuZGVyVGV4dHVyZScpLFxuICAgIEV2ZW50RW1pdHRlciA9IHJlcXVpcmUoJ2V2ZW50ZW1pdHRlcjMnKSxcbiAgICBDT05TVCA9IHJlcXVpcmUoJy4uL2NvbnN0JyksXG4gICAgX3RlbXBNYXRyaXggPSBuZXcgbWF0aC5NYXRyaXgoKSxcbiAgICBfdGVtcERpc3BsYXlPYmplY3RQYXJlbnQgPSB7d29ybGRUcmFuc2Zvcm06bmV3IG1hdGguTWF0cml4KCksIHdvcmxkQWxwaGE6MSwgY2hpbGRyZW46W119O1xuXG5cbi8qKlxuICogVGhlIGJhc2UgY2xhc3MgZm9yIGFsbCBvYmplY3RzIHRoYXQgYXJlIHJlbmRlcmVkIG9uIHRoZSBzY3JlZW4uXG4gKiBUaGlzIGlzIGFuIGFic3RyYWN0IGNsYXNzIGFuZCBzaG91bGQgbm90IGJlIHVzZWQgb24gaXRzIG93biByYXRoZXIgaXQgc2hvdWxkIGJlIGV4dGVuZGVkLlxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgRXZlbnRFbWl0dGVyXG4gKiBAbWVtYmVyb2YgUElYSVxuICovXG5mdW5jdGlvbiBEaXNwbGF5T2JqZWN0KClcbntcbiAgICBFdmVudEVtaXR0ZXIuY2FsbCh0aGlzKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBjb29yZGluYXRlIG9mIHRoZSBvYmplY3QgcmVsYXRpdmUgdG8gdGhlIGxvY2FsIGNvb3JkaW5hdGVzIG9mIHRoZSBwYXJlbnQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlBvaW50fVxuICAgICAqL1xuICAgIHRoaXMucG9zaXRpb24gPSBuZXcgbWF0aC5Qb2ludCgpO1xuICAgIHRoaXMuX3Bvc2l0aW9uID0gbmV3IENhY2hlUG9pbnQodGhpcyk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgc2NhbGUgZmFjdG9yIG9mIHRoZSBvYmplY3QuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlBvaW50fVxuICAgICAqL1xuICAgIHRoaXMuc2NhbGUgPSBuZXcgbWF0aC5Qb2ludCgxLCAxKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBwaXZvdCBwb2ludCBvZiB0aGUgZGlzcGxheU9iamVjdCB0aGF0IGl0IHJvdGF0ZXMgYXJvdW5kXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlBvaW50fVxuICAgICAqL1xuICAgIHRoaXMucGl2b3QgPSBuZXcgbWF0aC5Qb2ludCgwLCAwKTtcblxuXG4gICAgLyoqXG4gICAgICogVGhlIHNrZXcgZmFjdG9yIGZvciB0aGUgb2JqZWN0IGluIHJhZGlhbnMuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlBvaW50fVxuICAgICAqL1xuICAgIHRoaXMuc2tldyA9IG5ldyBtYXRoLlBvaW50KDAsIDApO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHJvdGF0aW9uIG9mIHRoZSBvYmplY3QgaW4gcmFkaWFucy5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLl9yb3RhdGlvbiA9IDA7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgb3BhY2l0eSBvZiB0aGUgb2JqZWN0LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMuYWxwaGEgPSAxO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHZpc2liaWxpdHkgb2YgdGhlIG9iamVjdC4gSWYgZmFsc2UgdGhlIG9iamVjdCB3aWxsIG5vdCBiZSBkcmF3biwgYW5kXG4gICAgICogdGhlIHVwZGF0ZVRyYW5zZm9ybSBmdW5jdGlvbiB3aWxsIG5vdCBiZSBjYWxsZWQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqL1xuICAgIHRoaXMudmlzaWJsZSA9IHRydWU7XG5cbiAgICAvKipcbiAgICAgKiBDYW4gdGhpcyBvYmplY3QgYmUgcmVuZGVyZWQsIGlmIGZhbHNlIHRoZSBvYmplY3Qgd2lsbCBub3QgYmUgZHJhd24gYnV0IHRoZSB1cGRhdGVUcmFuc2Zvcm1cbiAgICAgKiBtZXRob2RzIHdpbGwgc3RpbGwgYmUgY2FsbGVkLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKi9cbiAgICB0aGlzLnJlbmRlcmFibGUgPSB0cnVlO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGRpc3BsYXkgb2JqZWN0IGNvbnRhaW5lciB0aGF0IGNvbnRhaW5zIHRoaXMgZGlzcGxheSBvYmplY3QuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLkNvbnRhaW5lcn1cbiAgICAgKiBAcmVhZE9ubHlcbiAgICAgKi9cbiAgICB0aGlzLnBhcmVudCA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgbXVsdGlwbGllZCBhbHBoYSBvZiB0aGUgZGlzcGxheU9iamVjdFxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEByZWFkT25seVxuICAgICAqL1xuICAgIHRoaXMud29ybGRBbHBoYSA9IDE7XG5cbiAgICAvKipcbiAgICAgKiBDdXJyZW50IHRyYW5zZm9ybSBvZiB0aGUgb2JqZWN0IGJhc2VkIG9uIHdvcmxkIChwYXJlbnQpIGZhY3RvcnNcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuTWF0cml4fVxuICAgICAqIEByZWFkT25seVxuICAgICAqL1xuICAgIHRoaXMud29ybGRUcmFuc2Zvcm0gPSBuZXcgbWF0aC5NYXRyaXgoKTtcbiAgICB0aGlzLmxvY2FsVHJhbnNmb3JtID0gbmV3IG1hdGguTWF0cml4KCk7XG5cblxuICAgIC8qKlxuICAgICAqIFRoZSBhcmVhIHRoZSBmaWx0ZXIgaXMgYXBwbGllZCB0by4gVGhpcyBpcyB1c2VkIGFzIG1vcmUgb2YgYW4gb3B0aW1pc2F0aW9uXG4gICAgICogcmF0aGVyIHRoYW4gZmlndXJpbmcgb3V0IHRoZSBkaW1lbnNpb25zIG9mIHRoZSBkaXNwbGF5T2JqZWN0IGVhY2ggZnJhbWUgeW91IGNhbiBzZXQgdGhpcyByZWN0YW5nbGVcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuUmVjdGFuZ2xlfVxuICAgICAqL1xuICAgIHRoaXMuZmlsdGVyQXJlYSA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBjYWNoZWQgc2luIHJvdGF0aW9uXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9zciA9IDA7XG5cbiAgICAvKipcbiAgICAgKiBjYWNoZWQgY29zIHJvdGF0aW9uXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9jciA9IDE7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgb3JpZ2luYWwsIGNhY2hlZCBib3VuZHMgb2YgdGhlIG9iamVjdFxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5SZWN0YW5nbGV9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9ib3VuZHMgPSBuZXcgbWF0aC5SZWN0YW5nbGUoMCwgMCwgMSwgMSk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgbW9zdCB1cC10by1kYXRlIGJvdW5kcyBvZiB0aGUgb2JqZWN0XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlJlY3RhbmdsZX1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX2N1cnJlbnRCb3VuZHMgPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogVGhlIG9yaWdpbmFsLCBjYWNoZWQgbWFzayBvZiB0aGUgb2JqZWN0XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlJlY3RhbmdsZX1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX21hc2sgPSBudWxsO1xuXG4gICAgdGhpcy5kaXJ0eVRyYW5zZm9ybSA9IHRydWU7XG59XG5cbi8vIGNvbnN0cnVjdG9yXG5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoRXZlbnRFbWl0dGVyLnByb3RvdHlwZSk7XG5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IERpc3BsYXlPYmplY3Q7XG5tb2R1bGUuZXhwb3J0cyA9IERpc3BsYXlPYmplY3Q7XG5cbnZhciBDYWNoZVBvaW50ID0gZnVuY3Rpb24oZG9jKXtcbiAgICBcbiAgICB0aGlzLmRvYyA9IGRvYztcblxuICAgIHRoaXMueCA9IDA7XG4gICAgdGhpcy55ID0gMDtcbn1cblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoQ2FjaGVQb2ludC5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBUaGUgcG9zaXRpb24gb2YgdGhlIGRpc3BsYXlPYmplY3Qgb24gdGhlIHggYXhpcyByZWxhdGl2ZSB0byB0aGUgbG9jYWwgY29vcmRpbmF0ZXMgb2YgdGhlIHBhcmVudC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5EaXNwbGF5T2JqZWN0I1xuICAgICAqL1xuICAgIHg6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5kb2MucG9zaXRpb24ueDtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuZG9jLnBvc2l0aW9uLnggPSB2YWx1ZTtcbiAgICAgICAgICAgIHRoaXMuZG9jLmRpcnR5VHJhbnNmb3JtID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICB5OiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZG9jLnBvc2lpdG9uLnk7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmRvYy5wb3NpdGlvbi55ID0gdmFsdWU7XG4gICAgICAgICAgICB0aGlzLmRvYy5kaXJ0eVRyYW5zZm9ybSA9IHRydWU7XG4gICAgICAgIH1cbiAgICB9XG59KTtcblxuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhEaXNwbGF5T2JqZWN0LnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFRoZSBwb3NpdGlvbiBvZiB0aGUgZGlzcGxheU9iamVjdCBvbiB0aGUgeCBheGlzIHJlbGF0aXZlIHRvIHRoZSBsb2NhbCBjb29yZGluYXRlcyBvZiB0aGUgcGFyZW50LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLkRpc3BsYXlPYmplY3QjXG4gICAgICovXG4gICAgeDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnBvc2l0aW9uLng7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnBvc2l0aW9uLnggPSB2YWx1ZTtcbiAgICAgICAgICAgIHRoaXMuZGlydHlUcmFuc2Zvcm0gPSB0cnVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFRoZSBwb3NpdGlvbiBvZiB0aGUgZGlzcGxheU9iamVjdCBvbiB0aGUgeSBheGlzIHJlbGF0aXZlIHRvIHRoZSBsb2NhbCBjb29yZGluYXRlcyBvZiB0aGUgcGFyZW50LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLkRpc3BsYXlPYmplY3QjXG4gICAgICovXG4gICAgeToge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnBvc2l0aW9uLnk7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnBvc2l0aW9uLnkgPSB2YWx1ZTtcbiAgICAgICAgICAgIHRoaXMuZGlydHlUcmFuc2Zvcm0gPSB0cnVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIHNjYWxlWDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnNjYWxlLng7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnNjYWxlLnggPSB2YWx1ZTtcbiAgICAgICAgICAgIHRoaXMuZGlydHlUcmFuc2Zvcm0gPSB0cnVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFRoZSBwb3NpdGlvbiBvZiB0aGUgZGlzcGxheU9iamVjdCBvbiB0aGUgeSBheGlzIHJlbGF0aXZlIHRvIHRoZSBsb2NhbCBjb29yZGluYXRlcyBvZiB0aGUgcGFyZW50LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLkRpc3BsYXlPYmplY3QjXG4gICAgICovXG4gICAgc2NhbGVZOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuc2NhbGUueTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuc2NhbGUueSA9IHZhbHVlO1xuICAgICAgICAgICAgdGhpcy5kaXJ0eVRyYW5zZm9ybSA9IHRydWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgcm90YXRpb246IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fcm90YXRpb247XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLl9yb3RhdGlvbiA9IHZhbHVlO1xuICAgICAgICAgICAgdGhpcy5kaXJ0eVRyYW5zZm9ybSA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLl9zciA9IE1hdGguc2luKHZhbHVlKTtcbiAgICAgICAgICAgIHRoaXMuX2NyID0gTWF0aC5jb3ModmFsdWUpO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFRoZSBwb3NpdGlvbiBvZiB0aGUgZGlzcGxheU9iamVjdCBvbiB0aGUgeSBheGlzIHJlbGF0aXZlIHRvIHRoZSBsb2NhbCBjb29yZGluYXRlcyBvZiB0aGUgcGFyZW50LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLkRpc3BsYXlPYmplY3QjXG4gICAgICovXG4gICAgc2NhbGVZOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuc2NhbGUueTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuc2NhbGUueSA9IHZhbHVlO1xuICAgICAgICAgICAgdGhpcy5kaXJ0eVRyYW5zZm9ybSA9IHRydWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogSW5kaWNhdGVzIGlmIHRoZSBzcHJpdGUgaXMgZ2xvYmFsbHkgdmlzaWJsZS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICogQG1lbWJlcm9mIFBJWEkuRGlzcGxheU9iamVjdCNcbiAgICAgKiBAcmVhZG9ubHlcbiAgICAgKi9cbiAgICB3b3JsZFZpc2libGU6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICB2YXIgaXRlbSA9IHRoaXM7XG5cbiAgICAgICAgICAgIGRvIHtcbiAgICAgICAgICAgICAgICBpZiAoIWl0ZW0udmlzaWJsZSlcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpdGVtID0gaXRlbS5wYXJlbnQ7XG4gICAgICAgICAgICB9IHdoaWxlIChpdGVtKTtcblxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogU2V0cyBhIG1hc2sgZm9yIHRoZSBkaXNwbGF5T2JqZWN0LiBBIG1hc2sgaXMgYW4gb2JqZWN0IHRoYXQgbGltaXRzIHRoZSB2aXNpYmlsaXR5IG9mIGFuIG9iamVjdCB0byB0aGUgc2hhcGUgb2YgdGhlIG1hc2sgYXBwbGllZCB0byBpdC5cbiAgICAgKiBJbiBQSVhJIGEgcmVndWxhciBtYXNrIG11c3QgYmUgYSBQSVhJLkdyYXBoaWNzIG9yIGEgUElYSS5TcHJpdGUgb2JqZWN0LiBUaGlzIGFsbG93cyBmb3IgbXVjaCBmYXN0ZXIgbWFza2luZyBpbiBjYW52YXMgYXMgaXQgdXRpbGlzZXMgc2hhcGUgY2xpcHBpbmcuXG4gICAgICogVG8gcmVtb3ZlIGEgbWFzaywgc2V0IHRoaXMgcHJvcGVydHkgdG8gbnVsbC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuR3JhcGhpY3N8UElYSS5TcHJpdGV9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuRGlzcGxheU9iamVjdCNcbiAgICAgKi9cbiAgICBtYXNrOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX21hc2s7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICBpZiAodGhpcy5fbWFzaylcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9tYXNrLnJlbmRlcmFibGUgPSB0cnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLl9tYXNrID0gdmFsdWU7XG5cbiAgICAgICAgICAgIGlmICh0aGlzLl9tYXNrKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHRoaXMuX21hc2sucmVuZGVyYWJsZSA9IGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIGZpbHRlcnMgZm9yIHRoZSBkaXNwbGF5T2JqZWN0LlxuICAgICAqICogSU1QT1JUQU5UOiBUaGlzIGlzIGEgd2ViR0wgb25seSBmZWF0dXJlIGFuZCB3aWxsIGJlIGlnbm9yZWQgYnkgdGhlIGNhbnZhcyByZW5kZXJlci5cbiAgICAgKiBUbyByZW1vdmUgZmlsdGVycyBzaW1wbHkgc2V0IHRoaXMgcHJvcGVydHkgdG8gJ251bGwnXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLkFic3RyYWN0RmlsdGVyW119XG4gICAgICogQG1lbWJlcm9mIFBJWEkuRGlzcGxheU9iamVjdCNcbiAgICAgKi9cbiAgICBmaWx0ZXJzOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2ZpbHRlcnMgJiYgdGhpcy5fZmlsdGVycy5zbGljZSgpO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5fZmlsdGVycyA9IHZhbHVlICYmIHZhbHVlLnNsaWNlKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbn0pO1xuXG4vKlxuICogVXBkYXRlcyB0aGUgb2JqZWN0IHRyYW5zZm9ybSBmb3IgcmVuZGVyaW5nXG4gKlxuICogVE9ETyAtIE9wdGltaXphdGlvbiBwYXNzIVxuICovXG5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS51cGRhdGVUcmFuc2Zvcm0gPSBmdW5jdGlvbiAoKVxue1xuICAgIHZhciBwdCA9IHRoaXMucGFyZW50LndvcmxkVHJhbnNmb3JtO1xuICAgIHZhciB3dCA9IHRoaXMud29ybGRUcmFuc2Zvcm07XG4gICAgdmFyIGx0ID0gdGhpcy5sb2NhbFRyYW5zZm9ybTtcblxuICAgIGlmKHRoaXMuZGlydHlUcmFuc2Zvcm0pXG4gICAge1xuICAgICAgICAvLyBnZXQgdGhlIG1hdHJpeCB2YWx1ZXMgb2YgdGhlIGRpc3BsYXlvYmplY3QgYmFzZWQgb24gaXRzIHRyYW5zZm9ybSBwcm9wZXJ0aWVzLi5cbiAgICAgICAgbHQuYSAgPSAgdGhpcy5fY3IgKiB0aGlzLnNjYWxlLng7XG4gICAgICAgIGx0LmIgID0gIHRoaXMuX3NyICogdGhpcy5zY2FsZS54O1xuICAgICAgICBsdC5jICA9IC10aGlzLl9zciAqIHRoaXMuc2NhbGUueTtcbiAgICAgICAgbHQuZCAgPSAgdGhpcy5fY3IgKiB0aGlzLnNjYWxlLnk7XG4gICAgICAgIGx0LnR4ID0gIHRoaXMucG9zaXRpb24ueCAtICh0aGlzLnBpdm90LnggKiBsdC5hICsgdGhpcy5waXZvdC55ICogbHQuYyk7XG4gICAgICAgIGx0LnR5ID0gIHRoaXMucG9zaXRpb24ueSAtICh0aGlzLnBpdm90LnggKiBsdC5iICsgdGhpcy5waXZvdC55ICogbHQuZCk7XG4gICAgfVxuXG4gICAgaWYodGhpcy5kaXJ0eVRyYW5zZm9ybSB8fCB0aGlzLnBhcmVudC5kaXJ0eVRyYW5zZm9ybSlcbiAgICB7ICAgICAgXG4gICAgICAgIC8vIGNvbmNhdCB0aGUgcGFyZW50IG1hdHJpeCB3aXRoIHRoZSBvYmplY3RzIHRyYW5zZm9ybS5cbiAgICAgICAgd3QuYSAgPSBsdC5hICAqIHB0LmEgKyBsdC5iICAqIHB0LmM7XG4gICAgICAgIHd0LmIgID0gbHQuYSAgKiBwdC5iICsgbHQuYiAgKiBwdC5kO1xuICAgICAgICB3dC5jICA9IGx0LmMgICogcHQuYSArIGx0LmQgICogcHQuYztcbiAgICAgICAgd3QuZCAgPSBsdC5jICAqIHB0LmIgKyBsdC5kICAqIHB0LmQ7XG4gICAgICAgIHd0LnR4ID0gbHQudHggKiBwdC5hICsgbHQudHkgKiBwdC5jICsgcHQudHg7XG4gICAgICAgIHd0LnR5ID0gbHQudHggKiBwdC5iICsgbHQudHkgKiBwdC5kICsgcHQudHk7ICAgICAgIFxuICAgIFxuICAgICAgICB0aGlzLl9jdXJyZW50Qm91bmRzID0gbnVsbDtcbiAgICB9XG5cbiAgICAvLyBtdWx0aXBseSB0aGUgYWxwaGFzLi5cbiAgICB0aGlzLndvcmxkQWxwaGEgPSB0aGlzLmFscGhhICogdGhpcy5wYXJlbnQud29ybGRBbHBoYTtcblxuICAgIC8vIHJlc2V0IHRoZSBib3VuZHMgZWFjaCB0aW1lIHRoaXMgaXMgY2FsbGVkIVxuICAgIFxufTtcblxuLy8gcGVyZm9ybWFuY2UgaW5jcmVhc2UgdG8gYXZvaWQgdXNpbmcgY2FsbC4uICgxMHggZmFzdGVyKVxuRGlzcGxheU9iamVjdC5wcm90b3R5cGUuZGlzcGxheU9iamVjdFVwZGF0ZVRyYW5zZm9ybSA9IERpc3BsYXlPYmplY3QucHJvdG90eXBlLnVwZGF0ZVRyYW5zZm9ybTtcblxuLyoqXG4gKlxuICpcbiAqIFJldHJpZXZlcyB0aGUgYm91bmRzIG9mIHRoZSBkaXNwbGF5T2JqZWN0IGFzIGEgcmVjdGFuZ2xlIG9iamVjdFxuICpcbiAqIEBwYXJhbSBtYXRyaXgge1BJWEkuTWF0cml4fVxuICogQHJldHVybiB7UElYSS5SZWN0YW5nbGV9IHRoZSByZWN0YW5ndWxhciBib3VuZGluZyBhcmVhXG4gKi9cbkRpc3BsYXlPYmplY3QucHJvdG90eXBlLmdldEJvdW5kcyA9IGZ1bmN0aW9uIChtYXRyaXgpIC8vIGpzaGludCB1bnVzZWQ6ZmFsc2VcbntcbiAgICByZXR1cm4gbWF0aC5SZWN0YW5nbGUuRU1QVFk7XG59O1xuXG4vKipcbiAqIFJldHJpZXZlcyB0aGUgbG9jYWwgYm91bmRzIG9mIHRoZSBkaXNwbGF5T2JqZWN0IGFzIGEgcmVjdGFuZ2xlIG9iamVjdFxuICpcbiAqIEByZXR1cm4ge1BJWEkuUmVjdGFuZ2xlfSB0aGUgcmVjdGFuZ3VsYXIgYm91bmRpbmcgYXJlYVxuICovXG5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS5nZXRMb2NhbEJvdW5kcyA9IGZ1bmN0aW9uICgpXG57XG4gICAgcmV0dXJuIHRoaXMuZ2V0Qm91bmRzKG1hdGguTWF0cml4LklERU5USVRZKTtcbn07XG5cbi8qKlxuICogQ2FsY3VsYXRlcyB0aGUgZ2xvYmFsIHBvc2l0aW9uIG9mIHRoZSBkaXNwbGF5IG9iamVjdFxuICpcbiAqIEBwYXJhbSBwb3NpdGlvbiB7UElYSS5Qb2ludH0gVGhlIHdvcmxkIG9yaWdpbiB0byBjYWxjdWxhdGUgZnJvbVxuICogQHJldHVybiB7UElYSS5Qb2ludH0gQSBwb2ludCBvYmplY3QgcmVwcmVzZW50aW5nIHRoZSBwb3NpdGlvbiBvZiB0aGlzIG9iamVjdFxuICovXG5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS50b0dsb2JhbCA9IGZ1bmN0aW9uIChwb3NpdGlvbilcbntcbiAgICAvLyB0aGlzIHBhcmVudCBjaGVjayBpcyBmb3IganVzdCBpbiBjYXNlIHRoZSBpdGVtIGlzIGEgcm9vdCBvYmplY3QuXG4gICAgLy8gSWYgaXQgaXMgd2UgbmVlZCB0byBnaXZlIGl0IGEgdGVtcG9yYXJ5IHBhcmVudCBzbyB0aGF0IGRpc3BsYXlPYmplY3RVcGRhdGVUcmFuc2Zvcm0gd29ya3MgY29ycmVjdGx5XG4gICAgLy8gdGhpcyBpcyBtYWlubHkgdG8gYXZvaWQgYSBwYXJlbnQgY2hlY2sgaW4gdGhlIG1haW4gbG9vcC4gRXZlcnkgbGl0dGxlIGhlbHBzIGZvciBwZXJmb3JtYW5jZSA6KVxuICAgIGlmKCF0aGlzLnBhcmVudClcbiAgICB7XG4gICAgICAgIHRoaXMucGFyZW50ID0gX3RlbXBEaXNwbGF5T2JqZWN0UGFyZW50O1xuICAgICAgICB0aGlzLmRpc3BsYXlPYmplY3RVcGRhdGVUcmFuc2Zvcm0oKTtcbiAgICAgICAgdGhpcy5wYXJlbnQgPSBudWxsO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICB0aGlzLmRpc3BsYXlPYmplY3RVcGRhdGVUcmFuc2Zvcm0oKTtcbiAgICB9XG5cbiAgICAvLyBkb24ndCBuZWVkIHRvIHVwZGF0ZSB0aGUgbG90XG4gICAgcmV0dXJuIHRoaXMud29ybGRUcmFuc2Zvcm0uYXBwbHkocG9zaXRpb24pO1xufTtcblxuLyoqXG4gKiBDYWxjdWxhdGVzIHRoZSBsb2NhbCBwb3NpdGlvbiBvZiB0aGUgZGlzcGxheSBvYmplY3QgcmVsYXRpdmUgdG8gYW5vdGhlciBwb2ludFxuICpcbiAqIEBwYXJhbSBwb3NpdGlvbiB7UElYSS5Qb2ludH0gVGhlIHdvcmxkIG9yaWdpbiB0byBjYWxjdWxhdGUgZnJvbVxuICogQHBhcmFtIFtmcm9tXSB7UElYSS5EaXNwbGF5T2JqZWN0fSBUaGUgRGlzcGxheU9iamVjdCB0byBjYWxjdWxhdGUgdGhlIGdsb2JhbCBwb3NpdGlvbiBmcm9tXG4gKiBAcGFyYW0gW3BvaW50XSB7UElYSS5Qb2ludH0gQSBQb2ludCBvYmplY3QgaW4gd2hpY2ggdG8gc3RvcmUgdGhlIHZhbHVlLCBvcHRpb25hbCAob3RoZXJ3aXNlIHdpbGwgY3JlYXRlIGEgbmV3IFBvaW50KVxuICogQHJldHVybiB7UElYSS5Qb2ludH0gQSBwb2ludCBvYmplY3QgcmVwcmVzZW50aW5nIHRoZSBwb3NpdGlvbiBvZiB0aGlzIG9iamVjdFxuICovXG5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS50b0xvY2FsID0gZnVuY3Rpb24gKHBvc2l0aW9uLCBmcm9tLCBwb2ludClcbntcbiAgICBpZiAoZnJvbSlcbiAgICB7XG4gICAgICAgIHBvc2l0aW9uID0gZnJvbS50b0dsb2JhbChwb3NpdGlvbik7XG4gICAgfVxuXG4gICAgLy8gdGhpcyBwYXJlbnQgY2hlY2sgaXMgZm9yIGp1c3QgaW4gY2FzZSB0aGUgaXRlbSBpcyBhIHJvb3Qgb2JqZWN0LlxuICAgIC8vIElmIGl0IGlzIHdlIG5lZWQgdG8gZ2l2ZSBpdCBhIHRlbXBvcmFyeSBwYXJlbnQgc28gdGhhdCBkaXNwbGF5T2JqZWN0VXBkYXRlVHJhbnNmb3JtIHdvcmtzIGNvcnJlY3RseVxuICAgIC8vIHRoaXMgaXMgbWFpbmx5IHRvIGF2b2lkIGEgcGFyZW50IGNoZWNrIGluIHRoZSBtYWluIGxvb3AuIEV2ZXJ5IGxpdHRsZSBoZWxwcyBmb3IgcGVyZm9ybWFuY2UgOilcbiAgICBpZighdGhpcy5wYXJlbnQpXG4gICAge1xuICAgICAgICB0aGlzLnBhcmVudCA9IF90ZW1wRGlzcGxheU9iamVjdFBhcmVudDtcbiAgICAgICAgdGhpcy5kaXNwbGF5T2JqZWN0VXBkYXRlVHJhbnNmb3JtKCk7XG4gICAgICAgIHRoaXMucGFyZW50ID0gbnVsbDtcbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgdGhpcy5kaXNwbGF5T2JqZWN0VXBkYXRlVHJhbnNmb3JtKCk7XG4gICAgfVxuXG4gICAgLy8gc2ltcGx5IGFwcGx5IHRoZSBtYXRyaXguLlxuICAgIHJldHVybiB0aGlzLndvcmxkVHJhbnNmb3JtLmFwcGx5SW52ZXJzZShwb3NpdGlvbiwgcG9pbnQpO1xufTtcblxuLyoqXG4gKiBSZW5kZXJzIHRoZSBvYmplY3QgdXNpbmcgdGhlIFdlYkdMIHJlbmRlcmVyXG4gKlxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLldlYkdMUmVuZGVyZXJ9IFRoZSByZW5kZXJlclxuICogQHByaXZhdGVcbiAqL1xuRGlzcGxheU9iamVjdC5wcm90b3R5cGUucmVuZGVyV2ViR0wgPSBmdW5jdGlvbiAocmVuZGVyZXIpIC8vIGpzaGludCB1bnVzZWQ6ZmFsc2VcbntcbiAgICAvLyBPVkVSV1JJVEU7XG59O1xuXG4vKipcbiAqIFJlbmRlcnMgdGhlIG9iamVjdCB1c2luZyB0aGUgQ2FudmFzIHJlbmRlcmVyXG4gKlxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLkNhbnZhc1JlbmRlcmVyfSBUaGUgcmVuZGVyZXJcbiAqIEBwcml2YXRlXG4gKi9cbkRpc3BsYXlPYmplY3QucHJvdG90eXBlLnJlbmRlckNhbnZhcyA9IGZ1bmN0aW9uIChyZW5kZXJlcikgLy8ganNoaW50IHVudXNlZDpmYWxzZVxue1xuICAgIC8vIE9WRVJXUklURTtcbn07XG4vKipcbiAqIFVzZWZ1bCBmdW5jdGlvbiB0aGF0IHJldHVybnMgYSB0ZXh0dXJlIG9mIHRoZSBkaXNwbGF5IG9iamVjdCB0aGF0IGNhbiB0aGVuIGJlIHVzZWQgdG8gY3JlYXRlIHNwcml0ZXNcbiAqIFRoaXMgY2FuIGJlIHF1aXRlIHVzZWZ1bCBpZiB5b3VyIGRpc3BsYXlPYmplY3QgaXMgc3RhdGljIC8gY29tcGxpY2F0ZWQgYW5kIG5lZWRzIHRvIGJlIHJldXNlZCBtdWx0aXBsZSB0aW1lcy5cbiAqXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuQ2FudmFzUmVuZGVyZXJ8UElYSS5XZWJHTFJlbmRlcmVyfSBUaGUgcmVuZGVyZXIgdXNlZCB0byBnZW5lcmF0ZSB0aGUgdGV4dHVyZS5cbiAqIEBwYXJhbSBzY2FsZU1vZGUge251bWJlcn0gU2VlIHtAbGluayBQSVhJLlNDQUxFX01PREVTfSBmb3IgcG9zc2libGUgdmFsdWVzXG4gKiBAcGFyYW0gcmVzb2x1dGlvbiB7bnVtYmVyfSBUaGUgcmVzb2x1dGlvbiBvZiB0aGUgdGV4dHVyZSBiZWluZyBnZW5lcmF0ZWRcbiAqIEByZXR1cm4ge1BJWEkuVGV4dHVyZX0gYSB0ZXh0dXJlIG9mIHRoZSBkaXNwbGF5IG9iamVjdFxuICovXG5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS5nZW5lcmF0ZVRleHR1cmUgPSBmdW5jdGlvbiAocmVuZGVyZXIsIHNjYWxlTW9kZSwgcmVzb2x1dGlvbilcbntcbiAgICB2YXIgYm91bmRzID0gdGhpcy5nZXRMb2NhbEJvdW5kcygpO1xuXG4gICAgdmFyIHJlbmRlclRleHR1cmUgPSBuZXcgUmVuZGVyVGV4dHVyZShyZW5kZXJlciwgYm91bmRzLndpZHRoIHwgMCwgYm91bmRzLmhlaWdodCB8IDAsIHNjYWxlTW9kZSwgcmVzb2x1dGlvbik7XG5cbiAgICBfdGVtcE1hdHJpeC50eCA9IC1ib3VuZHMueDtcbiAgICBfdGVtcE1hdHJpeC50eSA9IC1ib3VuZHMueTtcblxuICAgIHJlbmRlclRleHR1cmUucmVuZGVyKHRoaXMsIF90ZW1wTWF0cml4KTtcblxuICAgIHJldHVybiByZW5kZXJUZXh0dXJlO1xufTtcblxuLyoqXG4gKiBTZXQgdGhlIHBhcmVudCBDb250YWluZXIgb2YgdGhpcyBEaXNwbGF5T2JqZWN0XG4gKlxuICogQHBhcmFtIGNvbnRhaW5lciB7Q29udGFpbmVyfSBUaGUgQ29udGFpbmVyIHRvIGFkZCB0aGlzIERpc3BsYXlPYmplY3QgdG9cbiAqIEByZXR1cm4ge0NvbnRhaW5lcn0gVGhlIENvbnRhaW5lciB0aGF0IHRoaXMgRGlzcGxheU9iamVjdCB3YXMgYWRkZWQgdG9cbiAqL1xuRGlzcGxheU9iamVjdC5wcm90b3R5cGUuc2V0UGFyZW50ID0gZnVuY3Rpb24gKGNvbnRhaW5lcilcbntcbiAgICBpZiAoIWNvbnRhaW5lciB8fCAhY29udGFpbmVyLmFkZENoaWxkKVxuICAgIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdzZXRQYXJlbnQ6IEFyZ3VtZW50IG11c3QgYmUgYSBDb250YWluZXInKTtcbiAgICB9XG5cbiAgICBjb250YWluZXIuYWRkQ2hpbGQodGhpcyk7XG4gICAgcmV0dXJuIGNvbnRhaW5lcjtcbn07XG5cbi8qKlxuICogQ29udmVuaWVuY2UgZnVuY3Rpb24gdG8gc2V0IHRoZSBwb3N0aW9uLCBzY2FsZSwgc2tldyBhbmQgcGl2b3QgYXQgb25jZS5cbiAqXG4gKiBAcGFyYW0gW3g9MF0ge251bWJlcn0gVGhlIFggcG9zaXRpb25cbiAqIEBwYXJhbSBbeT0wXSB7bnVtYmVyfSBUaGUgWSBwb3NpdGlvblxuICogQHBhcmFtIFtzY2FsZVg9MV0ge251bWJlcn0gVGhlIFggc2NhbGUgdmFsdWVcbiAqIEBwYXJhbSBbc2NhbGVZPTFdIHtudW1iZXJ9IFRoZSBZIHNjYWxlIHZhbHVlXG4gKiBAcGFyYW0gW3JvdGF0aW9uPTBdIHtudW1iZXJ9IFRoZSByb3RhdGlvblxuICogQHBhcmFtIFtza2V3WD0wXSB7bnVtYmVyfSBUaGUgWCBza2V3IHZhbHVlXG4gKiBAcGFyYW0gW3NrZXdZPTBdIHtudW1iZXJ9IFRoZSBZIHNrZXcgdmFsdWVcbiAqIEBwYXJhbSBbcGl2b3RYPTBdIHtudW1iZXJ9IFRoZSBYIHBpdm90IHZhbHVlXG4gKiBAcGFyYW0gW3Bpdm90WT0wXSB7bnVtYmVyfSBUaGUgWSBwaXZvdCB2YWx1ZVxuICogQHJldHVybiB7UElYSS5EaXNwbGF5T2JqZWN0fVxuICovXG5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS5zZXRUcmFuc2Zvcm0gPSBmdW5jdGlvbih4LCB5LCBzY2FsZVgsIHNjYWxlWSwgcm90YXRpb24sIHNrZXdYLCBza2V3WSwgcGl2b3RYLCBwaXZvdFkpIC8vanNoaW50IGlnbm9yZTpsaW5lXG57XG4gICAgdGhpcy5wb3NpdGlvbi54ID0geCB8fCAwO1xuICAgIHRoaXMucG9zaXRpb24ueSA9IHkgfHwgMDtcbiAgICB0aGlzLnNjYWxlLnggPSAhc2NhbGVYID8gMSA6IHNjYWxlWDtcbiAgICB0aGlzLnNjYWxlLnkgPSAhc2NhbGVZID8gMSA6IHNjYWxlWTtcbiAgICB0aGlzLnJvdGF0aW9uID0gcm90YXRpb24gfHwgMDtcbiAgICB0aGlzLnNrZXcueCA9IHNrZXdYIHx8IDA7XG4gICAgdGhpcy5za2V3LnkgPSBza2V3WSB8fCAwO1xuICAgIHRoaXMucGl2b3QueCA9IHBpdm90WCB8fCAwO1xuICAgIHRoaXMucGl2b3QueSA9IHBpdm90WSB8fCAwO1xuICAgIHRoaXMuZGlydHlUcmFuc2Zvcm0gPSB0cnVlO1xuICAgIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBCYXNlIGRlc3Ryb3kgbWV0aG9kIGZvciBnZW5lcmljIGRpc3BsYXkgb2JqZWN0c1xuICpcbiAqL1xuRGlzcGxheU9iamVjdC5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uICgpXG57XG5cbiAgICB0aGlzLnBvc2l0aW9uID0gbnVsbDtcbiAgICB0aGlzLnNjYWxlID0gbnVsbDtcbiAgICB0aGlzLnBpdm90ID0gbnVsbDtcbiAgICB0aGlzLnNrZXcgPSBudWxsO1xuXG4gICAgdGhpcy5wYXJlbnQgPSBudWxsO1xuXG4gICAgdGhpcy5fYm91bmRzID0gbnVsbDtcbiAgICB0aGlzLl9jdXJyZW50Qm91bmRzID0gbnVsbDtcbiAgICB0aGlzLl9tYXNrID0gbnVsbDtcblxuICAgIHRoaXMud29ybGRUcmFuc2Zvcm0gPSBudWxsO1xuICAgIHRoaXMuZmlsdGVyQXJlYSA9IG51bGw7XG59O1xuIiwidmFyIENvbnRhaW5lciA9IHJlcXVpcmUoJy4uL2Rpc3BsYXkvQ29udGFpbmVyJyksXG4gICAgVGV4dHVyZSA9IHJlcXVpcmUoJy4uL3RleHR1cmVzL1RleHR1cmUnKSxcbiAgICBDYW52YXNCdWZmZXIgPSByZXF1aXJlKCcuLi9yZW5kZXJlcnMvY2FudmFzL3V0aWxzL0NhbnZhc0J1ZmZlcicpLFxuICAgIENhbnZhc0dyYXBoaWNzID0gcmVxdWlyZSgnLi4vcmVuZGVyZXJzL2NhbnZhcy91dGlscy9DYW52YXNHcmFwaGljcycpLFxuICAgIEdyYXBoaWNzRGF0YSA9IHJlcXVpcmUoJy4vR3JhcGhpY3NEYXRhJyksXG4gICAgbWF0aCA9IHJlcXVpcmUoJy4uL21hdGgnKSxcbiAgICBDT05TVCA9IHJlcXVpcmUoJy4uL2NvbnN0JyksXG4gICAgdGVtcFBvaW50ID0gbmV3IG1hdGguUG9pbnQoKTtcblxuLyoqXG4gKiBUaGUgR3JhcGhpY3MgY2xhc3MgY29udGFpbnMgbWV0aG9kcyB1c2VkIHRvIGRyYXcgcHJpbWl0aXZlIHNoYXBlcyBzdWNoIGFzIGxpbmVzLCBjaXJjbGVzIGFuZFxuICogcmVjdGFuZ2xlcyB0byB0aGUgZGlzcGxheSwgYW5kIHRvIGNvbG9yIGFuZCBmaWxsIHRoZW0uXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLkNvbnRhaW5lclxuICogQG1lbWJlcm9mIFBJWElcbiAqL1xuZnVuY3Rpb24gR3JhcGhpY3MoKVxue1xuICAgIENvbnRhaW5lci5jYWxsKHRoaXMpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGFscGhhIHZhbHVlIHVzZWQgd2hlbiBmaWxsaW5nIHRoZSBHcmFwaGljcyBvYmplY3QuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMVxuICAgICAqL1xuICAgIHRoaXMuZmlsbEFscGhhID0gMTtcblxuICAgIC8qKlxuICAgICAqIFRoZSB3aWR0aCAodGhpY2tuZXNzKSBvZiBhbnkgbGluZXMgZHJhd24uXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMFxuICAgICAqL1xuICAgIHRoaXMubGluZVdpZHRoID0gMDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBjb2xvciBvZiBhbnkgbGluZXMgZHJhd24uXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtzdHJpbmd9XG4gICAgICogQGRlZmF1bHQgMFxuICAgICAqL1xuICAgIHRoaXMubGluZUNvbG9yID0gMDtcblxuICAgIC8qKlxuICAgICAqIEdyYXBoaWNzIGRhdGFcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuR3JhcGhpY3NEYXRhW119XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLmdyYXBoaWNzRGF0YSA9IFtdO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHRpbnQgYXBwbGllZCB0byB0aGUgZ3JhcGhpYyBzaGFwZS4gVGhpcyBpcyBhIGhleCB2YWx1ZS4gQXBwbHkgYSB2YWx1ZSBvZiAweEZGRkZGRiB0byByZXNldCB0aGUgdGludC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAweEZGRkZGRlxuICAgICAqL1xuICAgIHRoaXMudGludCA9IDB4RkZGRkZGO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHByZXZpb3VzIHRpbnQgYXBwbGllZCB0byB0aGUgZ3JhcGhpYyBzaGFwZS4gVXNlZCB0byBjb21wYXJlIHRvIHRoZSBjdXJyZW50IHRpbnQgYW5kIGNoZWNrIGlmIHRoZXJlcyBjaGFuZ2UuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAZGVmYXVsdCAweEZGRkZGRlxuICAgICAqL1xuICAgIHRoaXMuX3ByZXZUaW50ID0gMHhGRkZGRkY7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYmxlbmQgbW9kZSB0byBiZSBhcHBsaWVkIHRvIHRoZSBncmFwaGljIHNoYXBlLiBBcHBseSBhIHZhbHVlIG9mIGBQSVhJLkJMRU5EX01PREVTLk5PUk1BTGAgdG8gcmVzZXQgdGhlIGJsZW5kIG1vZGUuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgUElYSS5CTEVORF9NT0RFUy5OT1JNQUw7XG4gICAgICogQHNlZSBQSVhJLkJMRU5EX01PREVTXG4gICAgICovXG4gICAgdGhpcy5ibGVuZE1vZGUgPSBDT05TVC5CTEVORF9NT0RFUy5OT1JNQUw7XG5cbiAgICAvKipcbiAgICAgKiBDdXJyZW50IHBhdGhcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuR3JhcGhpY3NEYXRhfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5jdXJyZW50UGF0aCA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBBcnJheSBjb250YWluaW5nIHNvbWUgV2ViR0wtcmVsYXRlZCBwcm9wZXJ0aWVzIHVzZWQgYnkgdGhlIFdlYkdMIHJlbmRlcmVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7b2JqZWN0PG51bWJlciwgb2JqZWN0Pn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIC8vIFRPRE8gLSBfd2ViZ2wgc2hvdWxkIHVzZSBhIHByb3RvdHlwZSBvYmplY3QsIG5vdCBhIHJhbmRvbSB1bmRvY3VtZW50ZWQgb2JqZWN0Li4uXG4gICAgdGhpcy5fd2ViR0wgPSB7fTtcblxuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgdGhpcyBzaGFwZSBpcyBiZWluZyB1c2VkIGFzIGEgbWFzay5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICovXG4gICAgdGhpcy5pc01hc2sgPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBib3VuZHMnIHBhZGRpbmcgdXNlZCBmb3IgYm91bmRzIGNhbGN1bGF0aW9uLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMuYm91bmRzUGFkZGluZyA9IDA7XG5cbiAgICAvKipcbiAgICAgKiBBIGNhY2hlIG9mIHRoZSBsb2NhbCBib3VuZHMgdG8gcHJldmVudCByZWNhbGN1bGF0aW9uLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5SZWN0YW5nbGV9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9sb2NhbEJvdW5kcyA9IG5ldyBtYXRoLlJlY3RhbmdsZSgwLDAsMSwxKTtcblxuICAgIC8qKlxuICAgICAqIFVzZWQgdG8gZGV0ZWN0IGlmIHRoZSBncmFwaGljcyBvYmplY3QgaGFzIGNoYW5nZWQuIElmIHRoaXMgaXMgc2V0IHRvIHRydWUgdGhlbiB0aGUgZ3JhcGhpY3NcbiAgICAgKiBvYmplY3Qgd2lsbCBiZSByZWNhbGN1bGF0ZWQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5kaXJ0eSA9IHRydWU7XG5cbiAgICAvKipcbiAgICAgKiBVc2VkIHRvIGRldGVjdCBpZiB0aGUgV2ViR0wgZ3JhcGhpY3Mgb2JqZWN0IGhhcyBjaGFuZ2VkLiBJZiB0aGlzIGlzIHNldCB0byB0cnVlIHRoZW4gdGhlXG4gICAgICogZ3JhcGhpY3Mgb2JqZWN0IHdpbGwgYmUgcmVjYWxjdWxhdGVkLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuZ2xEaXJ0eSA9IGZhbHNlO1xuXG4gICAgdGhpcy5ib3VuZHNEaXJ0eSA9IHRydWU7XG5cbiAgICAvKipcbiAgICAgKiBVc2VkIHRvIGRldGVjdCBpZiB0aGUgY2FjaGVkIHNwcml0ZSBvYmplY3QgbmVlZHMgdG8gYmUgdXBkYXRlZC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLmNhY2hlZFNwcml0ZURpcnR5ID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBXaGVuIGNhY2hlQXNCaXRtYXAgaXMgc2V0IHRvIHRydWUgdGhlIGdyYXBoaWNzIG9iamVjdCB3aWxsIGJlIHJlbmRlcmVkIGFzIGlmIGl0IHdhcyBhIHNwcml0ZS5cbiAgICAgKiBUaGlzIGlzIHVzZWZ1bCBpZiB5b3VyIGdyYXBoaWNzIGVsZW1lbnQgZG9lcyBub3QgY2hhbmdlIG9mdGVuLCBhcyBpdCB3aWxsIHNwZWVkIHVwIHRoZSByZW5kZXJpbmdcbiAgICAgKiBvZiB0aGUgb2JqZWN0IGluIGV4Y2hhbmdlIGZvciB0YWtpbmcgdXAgdGV4dHVyZSBtZW1vcnkuIEl0IGlzIGFsc28gdXNlZnVsIGlmIHlvdSBuZWVkIHRoZSBncmFwaGljc1xuICAgICAqIG9iamVjdCB0byBiZSBhbnRpLWFsaWFzZWQsIGJlY2F1c2UgaXQgd2lsbCBiZSByZW5kZXJlZCB1c2luZyBjYW52YXMuIFRoaXMgaXMgbm90IHJlY29tbWVuZGVkIGlmXG4gICAgICogeW91IGFyZSBjb25zdGFudGx5IHJlZHJhd2luZyB0aGUgZ3JhcGhpY3MgZWxlbWVudC5cbiAgICAgKlxuICAgICAqIEBuYW1lIGNhY2hlQXNCaXRtYXBcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLkdyYXBoaWNzI1xuICAgICAqIEBkZWZhdWx0IGZhbHNlXG4gICAgICovXG59XG5cbi8vIGNvbnN0cnVjdG9yXG5HcmFwaGljcy5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKENvbnRhaW5lci5wcm90b3R5cGUpO1xuR3JhcGhpY3MucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gR3JhcGhpY3M7XG5tb2R1bGUuZXhwb3J0cyA9IEdyYXBoaWNzO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBuZXcgR3JhcGhpY3Mgb2JqZWN0IHdpdGggdGhlIHNhbWUgdmFsdWVzIGFzIHRoaXMgb25lLlxuICogTm90ZSB0aGF0IHRoZSBvbmx5IHRoZSBwcm9wZXJ0aWVzIG9mIHRoZSBvYmplY3QgYXJlIGNsb25lZCwgbm90IGl0cyB0cmFuc2Zvcm0gKHBvc2l0aW9uLHNjYWxlLGV0YylcbiAqXG4gKiBAcmV0dXJuIHtQSVhJLkdyYXBoaWNzfVxuICovXG5HcmFwaGljcy5wcm90b3R5cGUuY2xvbmUgPSBmdW5jdGlvbiAoKVxue1xuICAgIHZhciBjbG9uZSA9IG5ldyBHcmFwaGljcygpO1xuXG4gICAgY2xvbmUucmVuZGVyYWJsZSAgICA9IHRoaXMucmVuZGVyYWJsZTtcbiAgICBjbG9uZS5maWxsQWxwaGEgICAgID0gdGhpcy5maWxsQWxwaGE7XG4gICAgY2xvbmUubGluZVdpZHRoICAgICA9IHRoaXMubGluZVdpZHRoO1xuICAgIGNsb25lLmxpbmVDb2xvciAgICAgPSB0aGlzLmxpbmVDb2xvcjtcbiAgICBjbG9uZS50aW50ICAgICAgICAgID0gdGhpcy50aW50O1xuICAgIGNsb25lLmJsZW5kTW9kZSAgICAgPSB0aGlzLmJsZW5kTW9kZTtcbiAgICBjbG9uZS5pc01hc2sgICAgICAgID0gdGhpcy5pc01hc2s7XG4gICAgY2xvbmUuYm91bmRzUGFkZGluZyA9IHRoaXMuYm91bmRzUGFkZGluZztcbiAgICBjbG9uZS5kaXJ0eSAgICAgICAgID0gdHJ1ZTtcbiAgICBjbG9uZS5nbERpcnR5ICAgICAgID0gdHJ1ZTtcbiAgICBjbG9uZS5jYWNoZWRTcHJpdGVEaXJ0eSA9IHRoaXMuY2FjaGVkU3ByaXRlRGlydHk7XG5cbiAgICAvLyBjb3B5IGdyYXBoaWNzIGRhdGFcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuZ3JhcGhpY3NEYXRhLmxlbmd0aDsgKytpKVxuICAgIHtcbiAgICAgICAgY2xvbmUuZ3JhcGhpY3NEYXRhLnB1c2godGhpcy5ncmFwaGljc0RhdGFbaV0uY2xvbmUoKSk7XG4gICAgfVxuXG4gICAgY2xvbmUuY3VycmVudFBhdGggPSBjbG9uZS5ncmFwaGljc0RhdGFbY2xvbmUuZ3JhcGhpY3NEYXRhLmxlbmd0aCAtIDFdO1xuXG4gICAgY2xvbmUudXBkYXRlTG9jYWxCb3VuZHMoKTtcblxuICAgIHJldHVybiBjbG9uZTtcbn07XG5cbi8qKlxuICogU3BlY2lmaWVzIHRoZSBsaW5lIHN0eWxlIHVzZWQgZm9yIHN1YnNlcXVlbnQgY2FsbHMgdG8gR3JhcGhpY3MgbWV0aG9kcyBzdWNoIGFzIHRoZSBsaW5lVG8oKSBtZXRob2Qgb3IgdGhlIGRyYXdDaXJjbGUoKSBtZXRob2QuXG4gKlxuICogQHBhcmFtIGxpbmVXaWR0aCB7bnVtYmVyfSB3aWR0aCBvZiB0aGUgbGluZSB0byBkcmF3LCB3aWxsIHVwZGF0ZSB0aGUgb2JqZWN0cyBzdG9yZWQgc3R5bGVcbiAqIEBwYXJhbSBjb2xvciB7bnVtYmVyfSBjb2xvciBvZiB0aGUgbGluZSB0byBkcmF3LCB3aWxsIHVwZGF0ZSB0aGUgb2JqZWN0cyBzdG9yZWQgc3R5bGVcbiAqIEBwYXJhbSBhbHBoYSB7bnVtYmVyfSBhbHBoYSBvZiB0aGUgbGluZSB0byBkcmF3LCB3aWxsIHVwZGF0ZSB0aGUgb2JqZWN0cyBzdG9yZWQgc3R5bGVcbiAqIEByZXR1cm4ge1BJWEkuR3JhcGhpY3N9XG4gKi9cbkdyYXBoaWNzLnByb3RvdHlwZS5saW5lU3R5bGUgPSBmdW5jdGlvbiAobGluZVdpZHRoLCBjb2xvciwgYWxwaGEpXG57XG4gICAgdGhpcy5saW5lV2lkdGggPSBsaW5lV2lkdGggfHwgMDtcbiAgICB0aGlzLmxpbmVDb2xvciA9IGNvbG9yIHx8IDA7XG4gICAgdGhpcy5saW5lQWxwaGEgPSAoYWxwaGEgPT09IHVuZGVmaW5lZCkgPyAxIDogYWxwaGE7XG5cbiAgICBpZiAodGhpcy5jdXJyZW50UGF0aClcbiAgICB7XG4gICAgICAgIGlmICh0aGlzLmN1cnJlbnRQYXRoLnNoYXBlLnBvaW50cy5sZW5ndGgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIC8vIGhhbGZ3YXkgdGhyb3VnaCBhIGxpbmU/IHN0YXJ0IGEgbmV3IG9uZSFcbiAgICAgICAgICAgIHZhciBzaGFwZSA9IG5ldyBtYXRoLlBvbHlnb24odGhpcy5jdXJyZW50UGF0aC5zaGFwZS5wb2ludHMuc2xpY2UoLTIpKTtcbiAgICAgICAgICAgIHNoYXBlLmNsb3NlZCA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5kcmF3U2hhcGUoc2hhcGUpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2VcbiAgICAgICAge1xuICAgICAgICAgICAgLy8gb3RoZXJ3aXNlIGl0cyBlbXB0eSBzbyBsZXRzIGp1c3Qgc2V0IHRoZSBsaW5lIHByb3BlcnRpZXNcbiAgICAgICAgICAgIHRoaXMuY3VycmVudFBhdGgubGluZVdpZHRoID0gdGhpcy5saW5lV2lkdGg7XG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRQYXRoLmxpbmVDb2xvciA9IHRoaXMubGluZUNvbG9yO1xuICAgICAgICAgICAgdGhpcy5jdXJyZW50UGF0aC5saW5lQWxwaGEgPSB0aGlzLmxpbmVBbHBoYTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBNb3ZlcyB0aGUgY3VycmVudCBkcmF3aW5nIHBvc2l0aW9uIHRvIHgsIHkuXG4gKlxuICogQHBhcmFtIHgge251bWJlcn0gdGhlIFggY29vcmRpbmF0ZSB0byBtb3ZlIHRvXG4gKiBAcGFyYW0geSB7bnVtYmVyfSB0aGUgWSBjb29yZGluYXRlIHRvIG1vdmUgdG9cbiAqIEByZXR1cm4ge1BJWEkuR3JhcGhpY3N9XG4gICovXG5HcmFwaGljcy5wcm90b3R5cGUubW92ZVRvID0gZnVuY3Rpb24gKHgsIHkpXG57XG4gICAgdmFyIHNoYXBlID0gbmV3IG1hdGguUG9seWdvbihbeCx5XSk7XG4gICAgc2hhcGUuY2xvc2VkID0gZmFsc2U7XG4gICAgdGhpcy5kcmF3U2hhcGUoc2hhcGUpO1xuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIERyYXdzIGEgbGluZSB1c2luZyB0aGUgY3VycmVudCBsaW5lIHN0eWxlIGZyb20gdGhlIGN1cnJlbnQgZHJhd2luZyBwb3NpdGlvbiB0byAoeCwgeSk7XG4gKiBUaGUgY3VycmVudCBkcmF3aW5nIHBvc2l0aW9uIGlzIHRoZW4gc2V0IHRvICh4LCB5KS5cbiAqXG4gKiBAcGFyYW0geCB7bnVtYmVyfSB0aGUgWCBjb29yZGluYXRlIHRvIGRyYXcgdG9cbiAqIEBwYXJhbSB5IHtudW1iZXJ9IHRoZSBZIGNvb3JkaW5hdGUgdG8gZHJhdyB0b1xuICogQHJldHVybiB7UElYSS5HcmFwaGljc31cbiAqL1xuR3JhcGhpY3MucHJvdG90eXBlLmxpbmVUbyA9IGZ1bmN0aW9uICh4LCB5KVxue1xuICAgIHRoaXMuY3VycmVudFBhdGguc2hhcGUucG9pbnRzLnB1c2goeCwgeSk7XG4gICAgdGhpcy5kaXJ0eSA9IHRydWU7XG5cbiAgICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogQ2FsY3VsYXRlIHRoZSBwb2ludHMgZm9yIGEgcXVhZHJhdGljIGJlemllciBjdXJ2ZSBhbmQgdGhlbiBkcmF3cyBpdC5cbiAqIEJhc2VkIG9uOiBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy83ODUwOTcvaG93LWRvLWktaW1wbGVtZW50LWEtYmV6aWVyLWN1cnZlLWluLWNcbiAqXG4gKiBAcGFyYW0gY3BYIHtudW1iZXJ9IENvbnRyb2wgcG9pbnQgeFxuICogQHBhcmFtIGNwWSB7bnVtYmVyfSBDb250cm9sIHBvaW50IHlcbiAqIEBwYXJhbSB0b1gge251bWJlcn0gRGVzdGluYXRpb24gcG9pbnQgeFxuICogQHBhcmFtIHRvWSB7bnVtYmVyfSBEZXN0aW5hdGlvbiBwb2ludCB5XG4gKiBAcmV0dXJuIHtQSVhJLkdyYXBoaWNzfVxuICovXG5HcmFwaGljcy5wcm90b3R5cGUucXVhZHJhdGljQ3VydmVUbyA9IGZ1bmN0aW9uIChjcFgsIGNwWSwgdG9YLCB0b1kpXG57XG4gICAgaWYgKHRoaXMuY3VycmVudFBhdGgpXG4gICAge1xuICAgICAgICBpZiAodGhpcy5jdXJyZW50UGF0aC5zaGFwZS5wb2ludHMubGVuZ3RoID09PSAwKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRQYXRoLnNoYXBlLnBvaW50cyA9IFswLCAwXTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICB0aGlzLm1vdmVUbygwLDApO1xuICAgIH1cblxuICAgIHZhciB4YSxcbiAgICAgICAgeWEsXG4gICAgICAgIG4gPSAyMCxcbiAgICAgICAgcG9pbnRzID0gdGhpcy5jdXJyZW50UGF0aC5zaGFwZS5wb2ludHM7XG5cbiAgICBpZiAocG9pbnRzLmxlbmd0aCA9PT0gMClcbiAgICB7XG4gICAgICAgIHRoaXMubW92ZVRvKDAsIDApO1xuICAgIH1cblxuICAgIHZhciBmcm9tWCA9IHBvaW50c1twb2ludHMubGVuZ3RoLTJdO1xuICAgIHZhciBmcm9tWSA9IHBvaW50c1twb2ludHMubGVuZ3RoLTFdO1xuXG4gICAgdmFyIGogPSAwO1xuICAgIGZvciAodmFyIGkgPSAxOyBpIDw9IG47ICsraSlcbiAgICB7XG4gICAgICAgIGogPSBpIC8gbjtcblxuICAgICAgICB4YSA9IGZyb21YICsgKCAoY3BYIC0gZnJvbVgpICogaiApO1xuICAgICAgICB5YSA9IGZyb21ZICsgKCAoY3BZIC0gZnJvbVkpICogaiApO1xuXG4gICAgICAgIHBvaW50cy5wdXNoKCB4YSArICggKChjcFggKyAoICh0b1ggLSBjcFgpICogaiApKSAtIHhhKSAqIGogKSxcbiAgICAgICAgICAgICAgICAgICAgIHlhICsgKCAoKGNwWSArICggKHRvWSAtIGNwWSkgKiBqICkpIC0geWEpICogaiApICk7XG4gICAgfVxuXG4gICAgdGhpcy5kaXJ0eSA9IHRoaXMuYm91bmRzRGlydHkgPSB0cnVlO1xuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIENhbGN1bGF0ZSB0aGUgcG9pbnRzIGZvciBhIGJlemllciBjdXJ2ZSBhbmQgdGhlbiBkcmF3cyBpdC5cbiAqXG4gKiBAcGFyYW0gY3BYIHtudW1iZXJ9IENvbnRyb2wgcG9pbnQgeFxuICogQHBhcmFtIGNwWSB7bnVtYmVyfSBDb250cm9sIHBvaW50IHlcbiAqIEBwYXJhbSBjcFgyIHtudW1iZXJ9IFNlY29uZCBDb250cm9sIHBvaW50IHhcbiAqIEBwYXJhbSBjcFkyIHtudW1iZXJ9IFNlY29uZCBDb250cm9sIHBvaW50IHlcbiAqIEBwYXJhbSB0b1gge251bWJlcn0gRGVzdGluYXRpb24gcG9pbnQgeFxuICogQHBhcmFtIHRvWSB7bnVtYmVyfSBEZXN0aW5hdGlvbiBwb2ludCB5XG4gKiBAcmV0dXJuIHtQSVhJLkdyYXBoaWNzfVxuICovXG5HcmFwaGljcy5wcm90b3R5cGUuYmV6aWVyQ3VydmVUbyA9IGZ1bmN0aW9uIChjcFgsIGNwWSwgY3BYMiwgY3BZMiwgdG9YLCB0b1kpXG57XG4gICAgaWYgKHRoaXMuY3VycmVudFBhdGgpXG4gICAge1xuICAgICAgICBpZiAodGhpcy5jdXJyZW50UGF0aC5zaGFwZS5wb2ludHMubGVuZ3RoID09PSAwKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRQYXRoLnNoYXBlLnBvaW50cyA9IFswLCAwXTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICB0aGlzLm1vdmVUbygwLDApO1xuICAgIH1cblxuICAgIHZhciBuID0gMjAsXG4gICAgICAgIGR0LFxuICAgICAgICBkdDIsXG4gICAgICAgIGR0MyxcbiAgICAgICAgdDIsXG4gICAgICAgIHQzLFxuICAgICAgICBwb2ludHMgPSB0aGlzLmN1cnJlbnRQYXRoLnNoYXBlLnBvaW50cztcblxuICAgIHZhciBmcm9tWCA9IHBvaW50c1twb2ludHMubGVuZ3RoLTJdO1xuICAgIHZhciBmcm9tWSA9IHBvaW50c1twb2ludHMubGVuZ3RoLTFdO1xuXG4gICAgdmFyIGogPSAwO1xuXG4gICAgZm9yICh2YXIgaSA9IDE7IGkgPD0gbjsgKytpKVxuICAgIHtcbiAgICAgICAgaiA9IGkgLyBuO1xuXG4gICAgICAgIGR0ID0gKDEgLSBqKTtcbiAgICAgICAgZHQyID0gZHQgKiBkdDtcbiAgICAgICAgZHQzID0gZHQyICogZHQ7XG5cbiAgICAgICAgdDIgPSBqICogajtcbiAgICAgICAgdDMgPSB0MiAqIGo7XG5cbiAgICAgICAgcG9pbnRzLnB1c2goIGR0MyAqIGZyb21YICsgMyAqIGR0MiAqIGogKiBjcFggKyAzICogZHQgKiB0MiAqIGNwWDIgKyB0MyAqIHRvWCxcbiAgICAgICAgICAgICAgICAgICAgIGR0MyAqIGZyb21ZICsgMyAqIGR0MiAqIGogKiBjcFkgKyAzICogZHQgKiB0MiAqIGNwWTIgKyB0MyAqIHRvWSk7XG4gICAgfVxuXG4gICAgdGhpcy5kaXJ0eSA9IHRoaXMuYm91bmRzRGlydHkgPSB0cnVlO1xuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIFRoZSBhcmNUbygpIG1ldGhvZCBjcmVhdGVzIGFuIGFyYy9jdXJ2ZSBiZXR3ZWVuIHR3byB0YW5nZW50cyBvbiB0aGUgY2FudmFzLlxuICpcbiAqIFwiYm9ycm93ZWRcIiBmcm9tIGh0dHBzOi8vY29kZS5nb29nbGUuY29tL3AvZnhjYW52YXMvIC0gdGhhbmtzIGdvb2dsZSFcbiAqXG4gKiBAcGFyYW0geDEge251bWJlcn0gVGhlIHgtY29vcmRpbmF0ZSBvZiB0aGUgYmVnaW5uaW5nIG9mIHRoZSBhcmNcbiAqIEBwYXJhbSB5MSB7bnVtYmVyfSBUaGUgeS1jb29yZGluYXRlIG9mIHRoZSBiZWdpbm5pbmcgb2YgdGhlIGFyY1xuICogQHBhcmFtIHgyIHtudW1iZXJ9IFRoZSB4LWNvb3JkaW5hdGUgb2YgdGhlIGVuZCBvZiB0aGUgYXJjXG4gKiBAcGFyYW0geTIge251bWJlcn0gVGhlIHktY29vcmRpbmF0ZSBvZiB0aGUgZW5kIG9mIHRoZSBhcmNcbiAqIEBwYXJhbSByYWRpdXMge251bWJlcn0gVGhlIHJhZGl1cyBvZiB0aGUgYXJjXG4gKiBAcmV0dXJuIHtQSVhJLkdyYXBoaWNzfVxuICovXG5HcmFwaGljcy5wcm90b3R5cGUuYXJjVG8gPSBmdW5jdGlvbiAoeDEsIHkxLCB4MiwgeTIsIHJhZGl1cylcbntcbiAgICBpZiAodGhpcy5jdXJyZW50UGF0aClcbiAgICB7XG4gICAgICAgIGlmICh0aGlzLmN1cnJlbnRQYXRoLnNoYXBlLnBvaW50cy5sZW5ndGggPT09IDApXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuY3VycmVudFBhdGguc2hhcGUucG9pbnRzLnB1c2goeDEsIHkxKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICB0aGlzLm1vdmVUbyh4MSwgeTEpO1xuICAgIH1cblxuICAgIHZhciBwb2ludHMgPSB0aGlzLmN1cnJlbnRQYXRoLnNoYXBlLnBvaW50cyxcbiAgICAgICAgZnJvbVggPSBwb2ludHNbcG9pbnRzLmxlbmd0aC0yXSxcbiAgICAgICAgZnJvbVkgPSBwb2ludHNbcG9pbnRzLmxlbmd0aC0xXSxcbiAgICAgICAgYTEgPSBmcm9tWSAtIHkxLFxuICAgICAgICBiMSA9IGZyb21YIC0geDEsXG4gICAgICAgIGEyID0geTIgICAtIHkxLFxuICAgICAgICBiMiA9IHgyICAgLSB4MSxcbiAgICAgICAgbW0gPSBNYXRoLmFicyhhMSAqIGIyIC0gYjEgKiBhMik7XG5cbiAgICBpZiAobW0gPCAxLjBlLTggfHwgcmFkaXVzID09PSAwKVxuICAgIHtcbiAgICAgICAgaWYgKHBvaW50c1twb2ludHMubGVuZ3RoLTJdICE9PSB4MSB8fCBwb2ludHNbcG9pbnRzLmxlbmd0aC0xXSAhPT0geTEpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHBvaW50cy5wdXNoKHgxLCB5MSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgdmFyIGRkID0gYTEgKiBhMSArIGIxICogYjEsXG4gICAgICAgICAgICBjYyA9IGEyICogYTIgKyBiMiAqIGIyLFxuICAgICAgICAgICAgdHQgPSBhMSAqIGEyICsgYjEgKiBiMixcbiAgICAgICAgICAgIGsxID0gcmFkaXVzICogTWF0aC5zcXJ0KGRkKSAvIG1tLFxuICAgICAgICAgICAgazIgPSByYWRpdXMgKiBNYXRoLnNxcnQoY2MpIC8gbW0sXG4gICAgICAgICAgICBqMSA9IGsxICogdHQgLyBkZCxcbiAgICAgICAgICAgIGoyID0gazIgKiB0dCAvIGNjLFxuICAgICAgICAgICAgY3ggPSBrMSAqIGIyICsgazIgKiBiMSxcbiAgICAgICAgICAgIGN5ID0gazEgKiBhMiArIGsyICogYTEsXG4gICAgICAgICAgICBweCA9IGIxICogKGsyICsgajEpLFxuICAgICAgICAgICAgcHkgPSBhMSAqIChrMiArIGoxKSxcbiAgICAgICAgICAgIHF4ID0gYjIgKiAoazEgKyBqMiksXG4gICAgICAgICAgICBxeSA9IGEyICogKGsxICsgajIpLFxuICAgICAgICAgICAgc3RhcnRBbmdsZSA9IE1hdGguYXRhbjIocHkgLSBjeSwgcHggLSBjeCksXG4gICAgICAgICAgICBlbmRBbmdsZSAgID0gTWF0aC5hdGFuMihxeSAtIGN5LCBxeCAtIGN4KTtcblxuICAgICAgICB0aGlzLmFyYyhjeCArIHgxLCBjeSArIHkxLCByYWRpdXMsIHN0YXJ0QW5nbGUsIGVuZEFuZ2xlLCBiMSAqIGEyID4gYjIgKiBhMSk7XG4gICAgfVxuXG4gICAgdGhpcy5kaXJ0eSA9IHRoaXMuYm91bmRzRGlydHkgPSB0cnVlO1xuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIFRoZSBhcmMgbWV0aG9kIGNyZWF0ZXMgYW4gYXJjL2N1cnZlICh1c2VkIHRvIGNyZWF0ZSBjaXJjbGVzLCBvciBwYXJ0cyBvZiBjaXJjbGVzKS5cbiAqXG4gKiBAcGFyYW0gY3gge251bWJlcn0gVGhlIHgtY29vcmRpbmF0ZSBvZiB0aGUgY2VudGVyIG9mIHRoZSBjaXJjbGVcbiAqIEBwYXJhbSBjeSB7bnVtYmVyfSBUaGUgeS1jb29yZGluYXRlIG9mIHRoZSBjZW50ZXIgb2YgdGhlIGNpcmNsZVxuICogQHBhcmFtIHJhZGl1cyB7bnVtYmVyfSBUaGUgcmFkaXVzIG9mIHRoZSBjaXJjbGVcbiAqIEBwYXJhbSBzdGFydEFuZ2xlIHtudW1iZXJ9IFRoZSBzdGFydGluZyBhbmdsZSwgaW4gcmFkaWFucyAoMCBpcyBhdCB0aGUgMyBvJ2Nsb2NrIHBvc2l0aW9uIG9mIHRoZSBhcmMncyBjaXJjbGUpXG4gKiBAcGFyYW0gZW5kQW5nbGUge251bWJlcn0gVGhlIGVuZGluZyBhbmdsZSwgaW4gcmFkaWFuc1xuICogQHBhcmFtIGFudGljbG9ja3dpc2Uge2Jvb2xlYW59IE9wdGlvbmFsLiBTcGVjaWZpZXMgd2hldGhlciB0aGUgZHJhd2luZyBzaG91bGQgYmUgY291bnRlcmNsb2Nrd2lzZSBvciBjbG9ja3dpc2UuIEZhbHNlIGlzIGRlZmF1bHQsIGFuZCBpbmRpY2F0ZXMgY2xvY2t3aXNlLCB3aGlsZSB0cnVlIGluZGljYXRlcyBjb3VudGVyLWNsb2Nrd2lzZS5cbiAqIEByZXR1cm4ge1BJWEkuR3JhcGhpY3N9XG4gKi9cbkdyYXBoaWNzLnByb3RvdHlwZS5hcmMgPSBmdW5jdGlvbihjeCwgY3ksIHJhZGl1cywgc3RhcnRBbmdsZSwgZW5kQW5nbGUsIGFudGljbG9ja3dpc2UpXG57XG4gICAgYW50aWNsb2Nrd2lzZSA9IGFudGljbG9ja3dpc2UgfHwgZmFsc2U7XG5cbiAgICBpZiAoc3RhcnRBbmdsZSA9PT0gZW5kQW5nbGUpXG4gICAge1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBpZiggIWFudGljbG9ja3dpc2UgJiYgZW5kQW5nbGUgPD0gc3RhcnRBbmdsZSApXG4gICAge1xuICAgICAgICBlbmRBbmdsZSArPSBNYXRoLlBJICogMjtcbiAgICB9XG4gICAgZWxzZSBpZiggYW50aWNsb2Nrd2lzZSAmJiBzdGFydEFuZ2xlIDw9IGVuZEFuZ2xlIClcbiAgICB7XG4gICAgICAgIHN0YXJ0QW5nbGUgKz0gTWF0aC5QSSAqIDI7XG4gICAgfVxuXG4gICAgdmFyIHN3ZWVwID0gYW50aWNsb2Nrd2lzZSA/IChzdGFydEFuZ2xlIC0gZW5kQW5nbGUpICogLTEgOiAoZW5kQW5nbGUgLSBzdGFydEFuZ2xlKTtcbiAgICB2YXIgc2VncyA9ICBNYXRoLmNlaWwoTWF0aC5hYnMoc3dlZXApIC8gKE1hdGguUEkgKiAyKSkgKiA0MDtcblxuICAgIGlmKHN3ZWVwID09PSAwKVxuICAgIHtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgdmFyIHN0YXJ0WCA9IGN4ICsgTWF0aC5jb3Moc3RhcnRBbmdsZSkgKiByYWRpdXM7XG4gICAgdmFyIHN0YXJ0WSA9IGN5ICsgTWF0aC5zaW4oc3RhcnRBbmdsZSkgKiByYWRpdXM7XG5cbiAgICBpZiAodGhpcy5jdXJyZW50UGF0aClcbiAgICB7XG4gICAgICAgIHRoaXMuY3VycmVudFBhdGguc2hhcGUucG9pbnRzLnB1c2goc3RhcnRYLCBzdGFydFkpO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICB0aGlzLm1vdmVUbyhzdGFydFgsIHN0YXJ0WSk7XG4gICAgfVxuXG4gICAgdmFyIHBvaW50cyA9IHRoaXMuY3VycmVudFBhdGguc2hhcGUucG9pbnRzO1xuXG4gICAgdmFyIHRoZXRhID0gc3dlZXAvKHNlZ3MqMik7XG4gICAgdmFyIHRoZXRhMiA9IHRoZXRhKjI7XG5cbiAgICB2YXIgY1RoZXRhID0gTWF0aC5jb3ModGhldGEpO1xuICAgIHZhciBzVGhldGEgPSBNYXRoLnNpbih0aGV0YSk7XG5cbiAgICB2YXIgc2VnTWludXMgPSBzZWdzIC0gMTtcblxuICAgIHZhciByZW1haW5kZXIgPSAoIHNlZ01pbnVzICUgMSApIC8gc2VnTWludXM7XG5cbiAgICBmb3IodmFyIGk9MDsgaTw9c2VnTWludXM7IGkrKylcbiAgICB7XG4gICAgICAgIHZhciByZWFsID0gIGkgKyByZW1haW5kZXIgKiBpO1xuXG5cbiAgICAgICAgdmFyIGFuZ2xlID0gKCh0aGV0YSkgKyBzdGFydEFuZ2xlICsgKHRoZXRhMiAqIHJlYWwpKTtcblxuICAgICAgICB2YXIgYyA9IE1hdGguY29zKGFuZ2xlKTtcbiAgICAgICAgdmFyIHMgPSAtTWF0aC5zaW4oYW5nbGUpO1xuXG4gICAgICAgIHBvaW50cy5wdXNoKCggKGNUaGV0YSAqICBjKSArIChzVGhldGEgKiBzKSApICogcmFkaXVzICsgY3gsXG4gICAgICAgICAgICAgICAgICAgICggKGNUaGV0YSAqIC1zKSArIChzVGhldGEgKiBjKSApICogcmFkaXVzICsgY3kpO1xuICAgIH1cblxuICAgIHRoaXMuZGlydHkgPSB0aGlzLmJvdW5kc0RpcnR5ID0gdHJ1ZTtcblxuICAgIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBTcGVjaWZpZXMgYSBzaW1wbGUgb25lLWNvbG9yIGZpbGwgdGhhdCBzdWJzZXF1ZW50IGNhbGxzIHRvIG90aGVyIEdyYXBoaWNzIG1ldGhvZHNcbiAqIChzdWNoIGFzIGxpbmVUbygpIG9yIGRyYXdDaXJjbGUoKSkgdXNlIHdoZW4gZHJhd2luZy5cbiAqXG4gKiBAcGFyYW0gY29sb3Ige251bWJlcn0gdGhlIGNvbG9yIG9mIHRoZSBmaWxsXG4gKiBAcGFyYW0gYWxwaGEge251bWJlcn0gdGhlIGFscGhhIG9mIHRoZSBmaWxsXG4gKiBAcmV0dXJuIHtQSVhJLkdyYXBoaWNzfVxuICovXG5HcmFwaGljcy5wcm90b3R5cGUuYmVnaW5GaWxsID0gZnVuY3Rpb24gKGNvbG9yLCBhbHBoYSlcbntcbiAgICB0aGlzLmZpbGxpbmcgPSB0cnVlO1xuICAgIHRoaXMuZmlsbENvbG9yID0gY29sb3IgfHwgMDtcbiAgICB0aGlzLmZpbGxBbHBoYSA9IChhbHBoYSA9PT0gdW5kZWZpbmVkKSA/IDEgOiBhbHBoYTtcblxuICAgIGlmICh0aGlzLmN1cnJlbnRQYXRoKVxuICAgIHtcbiAgICAgICAgaWYgKHRoaXMuY3VycmVudFBhdGguc2hhcGUucG9pbnRzLmxlbmd0aCA8PSAyKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRQYXRoLmZpbGwgPSB0aGlzLmZpbGxpbmc7XG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRQYXRoLmZpbGxDb2xvciA9IHRoaXMuZmlsbENvbG9yO1xuICAgICAgICAgICAgdGhpcy5jdXJyZW50UGF0aC5maWxsQWxwaGEgPSB0aGlzLmZpbGxBbHBoYTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogQXBwbGllcyBhIGZpbGwgdG8gdGhlIGxpbmVzIGFuZCBzaGFwZXMgdGhhdCB3ZXJlIGFkZGVkIHNpbmNlIHRoZSBsYXN0IGNhbGwgdG8gdGhlIGJlZ2luRmlsbCgpIG1ldGhvZC5cbiAqXG4gKiBAcmV0dXJuIHtHcmFwaGljc31cbiAqL1xuR3JhcGhpY3MucHJvdG90eXBlLmVuZEZpbGwgPSBmdW5jdGlvbiAoKVxue1xuICAgIHRoaXMuZmlsbGluZyA9IGZhbHNlO1xuICAgIHRoaXMuZmlsbENvbG9yID0gbnVsbDtcbiAgICB0aGlzLmZpbGxBbHBoYSA9IDE7XG5cbiAgICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICpcbiAqIEBwYXJhbSB4IHtudW1iZXJ9IFRoZSBYIGNvb3JkIG9mIHRoZSB0b3AtbGVmdCBvZiB0aGUgcmVjdGFuZ2xlXG4gKiBAcGFyYW0geSB7bnVtYmVyfSBUaGUgWSBjb29yZCBvZiB0aGUgdG9wLWxlZnQgb2YgdGhlIHJlY3RhbmdsZVxuICogQHBhcmFtIHdpZHRoIHtudW1iZXJ9IFRoZSB3aWR0aCBvZiB0aGUgcmVjdGFuZ2xlXG4gKiBAcGFyYW0gaGVpZ2h0IHtudW1iZXJ9IFRoZSBoZWlnaHQgb2YgdGhlIHJlY3RhbmdsZVxuICogQHJldHVybiB7UElYSS5HcmFwaGljc31cbiAqL1xuR3JhcGhpY3MucHJvdG90eXBlLmRyYXdSZWN0ID0gZnVuY3Rpb24gKCB4LCB5LCB3aWR0aCwgaGVpZ2h0IClcbntcbiAgICB0aGlzLmRyYXdTaGFwZShuZXcgbWF0aC5SZWN0YW5nbGUoeCx5LCB3aWR0aCwgaGVpZ2h0KSk7XG5cbiAgICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICpcbiAqIEBwYXJhbSB4IHtudW1iZXJ9IFRoZSBYIGNvb3JkIG9mIHRoZSB0b3AtbGVmdCBvZiB0aGUgcmVjdGFuZ2xlXG4gKiBAcGFyYW0geSB7bnVtYmVyfSBUaGUgWSBjb29yZCBvZiB0aGUgdG9wLWxlZnQgb2YgdGhlIHJlY3RhbmdsZVxuICogQHBhcmFtIHdpZHRoIHtudW1iZXJ9IFRoZSB3aWR0aCBvZiB0aGUgcmVjdGFuZ2xlXG4gKiBAcGFyYW0gaGVpZ2h0IHtudW1iZXJ9IFRoZSBoZWlnaHQgb2YgdGhlIHJlY3RhbmdsZVxuICogQHBhcmFtIHJhZGl1cyB7bnVtYmVyfSBSYWRpdXMgb2YgdGhlIHJlY3RhbmdsZSBjb3JuZXJzXG4gKiBAcmV0dXJuIHtQSVhJLkdyYXBoaWNzfVxuICovXG5HcmFwaGljcy5wcm90b3R5cGUuZHJhd1JvdW5kZWRSZWN0ID0gZnVuY3Rpb24gKCB4LCB5LCB3aWR0aCwgaGVpZ2h0LCByYWRpdXMgKVxue1xuICAgIHRoaXMuZHJhd1NoYXBlKG5ldyBtYXRoLlJvdW5kZWRSZWN0YW5nbGUoeCwgeSwgd2lkdGgsIGhlaWdodCwgcmFkaXVzKSk7XG5cbiAgICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogRHJhd3MgYSBjaXJjbGUuXG4gKlxuICogQHBhcmFtIHgge251bWJlcn0gVGhlIFggY29vcmRpbmF0ZSBvZiB0aGUgY2VudGVyIG9mIHRoZSBjaXJjbGVcbiAqIEBwYXJhbSB5IHtudW1iZXJ9IFRoZSBZIGNvb3JkaW5hdGUgb2YgdGhlIGNlbnRlciBvZiB0aGUgY2lyY2xlXG4gKiBAcGFyYW0gcmFkaXVzIHtudW1iZXJ9IFRoZSByYWRpdXMgb2YgdGhlIGNpcmNsZVxuICogQHJldHVybiB7UElYSS5HcmFwaGljc31cbiAqL1xuR3JhcGhpY3MucHJvdG90eXBlLmRyYXdDaXJjbGUgPSBmdW5jdGlvbiAoeCwgeSwgcmFkaXVzKVxue1xuICAgIHRoaXMuZHJhd1NoYXBlKG5ldyBtYXRoLkNpcmNsZSh4LHksIHJhZGl1cykpO1xuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIERyYXdzIGFuIGVsbGlwc2UuXG4gKlxuICogQHBhcmFtIHgge251bWJlcn0gVGhlIFggY29vcmRpbmF0ZSBvZiB0aGUgY2VudGVyIG9mIHRoZSBlbGxpcHNlXG4gKiBAcGFyYW0geSB7bnVtYmVyfSBUaGUgWSBjb29yZGluYXRlIG9mIHRoZSBjZW50ZXIgb2YgdGhlIGVsbGlwc2VcbiAqIEBwYXJhbSB3aWR0aCB7bnVtYmVyfSBUaGUgaGFsZiB3aWR0aCBvZiB0aGUgZWxsaXBzZVxuICogQHBhcmFtIGhlaWdodCB7bnVtYmVyfSBUaGUgaGFsZiBoZWlnaHQgb2YgdGhlIGVsbGlwc2VcbiAqIEByZXR1cm4ge1BJWEkuR3JhcGhpY3N9XG4gKi9cbkdyYXBoaWNzLnByb3RvdHlwZS5kcmF3RWxsaXBzZSA9IGZ1bmN0aW9uICh4LCB5LCB3aWR0aCwgaGVpZ2h0KVxue1xuICAgIHRoaXMuZHJhd1NoYXBlKG5ldyBtYXRoLkVsbGlwc2UoeCwgeSwgd2lkdGgsIGhlaWdodCkpO1xuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIERyYXdzIGEgcG9seWdvbiB1c2luZyB0aGUgZ2l2ZW4gcGF0aC5cbiAqXG4gKiBAcGFyYW0gcGF0aCB7bnVtYmVyW118UElYSS5Qb2ludFtdfSBUaGUgcGF0aCBkYXRhIHVzZWQgdG8gY29uc3RydWN0IHRoZSBwb2x5Z29uLlxuICogQHJldHVybiB7UElYSS5HcmFwaGljc31cbiAqL1xuR3JhcGhpY3MucHJvdG90eXBlLmRyYXdQb2x5Z29uID0gZnVuY3Rpb24gKHBhdGgpXG57XG4gICAgLy8gcHJldmVudHMgYW4gYXJndW1lbnQgYXNzaWdubWVudCBkZW9wdFxuICAgIC8vIHNlZSBzZWN0aW9uIDMuMTogaHR0cHM6Ly9naXRodWIuY29tL3BldGthYW50b25vdi9ibHVlYmlyZC93aWtpL09wdGltaXphdGlvbi1raWxsZXJzIzMtbWFuYWdpbmctYXJndW1lbnRzXG4gICAgdmFyIHBvaW50cyA9IHBhdGg7XG5cbiAgICB2YXIgY2xvc2VkID0gdHJ1ZTtcblxuICAgIGlmIChwb2ludHMgaW5zdGFuY2VvZiBtYXRoLlBvbHlnb24pXG4gICAge1xuICAgICAgICBjbG9zZWQgPSBwb2ludHMuY2xvc2VkO1xuICAgICAgICBwb2ludHMgPSBwb2ludHMucG9pbnRzO1xuICAgIH1cblxuICAgIGlmICghQXJyYXkuaXNBcnJheShwb2ludHMpKVxuICAgIHtcbiAgICAgICAgLy8gcHJldmVudHMgYW4gYXJndW1lbnQgbGVhayBkZW9wdFxuICAgICAgICAvLyBzZWUgc2VjdGlvbiAzLjI6IGh0dHBzOi8vZ2l0aHViLmNvbS9wZXRrYWFudG9ub3YvYmx1ZWJpcmQvd2lraS9PcHRpbWl6YXRpb24ta2lsbGVycyMzLW1hbmFnaW5nLWFyZ3VtZW50c1xuICAgICAgICBwb2ludHMgPSBuZXcgQXJyYXkoYXJndW1lbnRzLmxlbmd0aCk7XG5cbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwb2ludHMubGVuZ3RoOyArK2kpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHBvaW50c1tpXSA9IGFyZ3VtZW50c1tpXTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHZhciBzaGFwZSA9IG5ldyBtYXRoLlBvbHlnb24ocG9pbnRzKTtcbiAgICBzaGFwZS5jbG9zZWQgPSBjbG9zZWQ7XG5cbiAgICB0aGlzLmRyYXdTaGFwZShzaGFwZSk7XG5cbiAgICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogQ2xlYXJzIHRoZSBncmFwaGljcyB0aGF0IHdlcmUgZHJhd24gdG8gdGhpcyBHcmFwaGljcyBvYmplY3QsIGFuZCByZXNldHMgZmlsbCBhbmQgbGluZSBzdHlsZSBzZXR0aW5ncy5cbiAqXG4gKiBAcmV0dXJuIHtQSVhJLkdyYXBoaWNzfVxuICovXG5HcmFwaGljcy5wcm90b3R5cGUuY2xlYXIgPSBmdW5jdGlvbiAoKVxue1xuICAgIHRoaXMubGluZVdpZHRoID0gMDtcbiAgICB0aGlzLmZpbGxpbmcgPSBmYWxzZTtcblxuICAgIHRoaXMuZGlydHkgPSB0cnVlO1xuICAgIHRoaXMuY2xlYXJEaXJ0eSA9IHRydWU7XG4gICAgdGhpcy5ncmFwaGljc0RhdGEgPSBbXTtcblxuICAgIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBVc2VmdWwgZnVuY3Rpb24gdGhhdCByZXR1cm5zIGEgdGV4dHVyZSBvZiB0aGUgZ3JhcGhpY3Mgb2JqZWN0IHRoYXQgY2FuIHRoZW4gYmUgdXNlZCB0byBjcmVhdGUgc3ByaXRlc1xuICogVGhpcyBjYW4gYmUgcXVpdGUgdXNlZnVsIGlmIHlvdXIgZ2VvbWV0cnkgaXMgY29tcGxpY2F0ZWQgYW5kIG5lZWRzIHRvIGJlIHJldXNlZCBtdWx0aXBsZSB0aW1lcy5cbiAqXG4gKiBAcGFyYW0gcmVzb2x1dGlvbiB7bnVtYmVyfSBUaGUgcmVzb2x1dGlvbiBvZiB0aGUgdGV4dHVyZSBiZWluZyBnZW5lcmF0ZWRcbiAqIEBwYXJhbSBzY2FsZU1vZGUge251bWJlcn0gU2hvdWxkIGJlIG9uZSBvZiB0aGUgc2NhbGVNb2RlIGNvbnN0c1xuICogQHJldHVybiB7UElYSS5UZXh0dXJlfSBhIHRleHR1cmUgb2YgdGhlIGdyYXBoaWNzIG9iamVjdFxuICovXG5HcmFwaGljcy5wcm90b3R5cGUuZ2VuZXJhdGVUZXh0dXJlID0gZnVuY3Rpb24gKHJlbmRlcmVyLCByZXNvbHV0aW9uLCBzY2FsZU1vZGUpXG57XG5cbiAgICByZXNvbHV0aW9uID0gcmVzb2x1dGlvbiB8fCAxO1xuXG4gICAgdmFyIGJvdW5kcyA9IHRoaXMuZ2V0TG9jYWxCb3VuZHMoKTtcblxuICAgIHZhciBjYW52YXNCdWZmZXIgPSBuZXcgQ2FudmFzQnVmZmVyKGJvdW5kcy53aWR0aCAqIHJlc29sdXRpb24sIGJvdW5kcy5oZWlnaHQgKiByZXNvbHV0aW9uKTtcblxuICAgIHZhciB0ZXh0dXJlID0gVGV4dHVyZS5mcm9tQ2FudmFzKGNhbnZhc0J1ZmZlci5jYW52YXMsIHNjYWxlTW9kZSk7XG4gICAgdGV4dHVyZS5iYXNlVGV4dHVyZS5yZXNvbHV0aW9uID0gcmVzb2x1dGlvbjtcblxuICAgIGNhbnZhc0J1ZmZlci5jb250ZXh0LnNjYWxlKHJlc29sdXRpb24sIHJlc29sdXRpb24pO1xuXG4gICAgY2FudmFzQnVmZmVyLmNvbnRleHQudHJhbnNsYXRlKC1ib3VuZHMueCwtYm91bmRzLnkpO1xuXG4gICAgQ2FudmFzR3JhcGhpY3MucmVuZGVyR3JhcGhpY3ModGhpcywgY2FudmFzQnVmZmVyLmNvbnRleHQpO1xuXG4gICAgcmV0dXJuIHRleHR1cmU7XG59O1xuXG4vKipcbiAqIFJlbmRlcnMgdGhlIG9iamVjdCB1c2luZyB0aGUgV2ViR0wgcmVuZGVyZXJcbiAqXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcn1cbiAqIEBwcml2YXRlXG4gKi9cbkdyYXBoaWNzLnByb3RvdHlwZS5fcmVuZGVyV2ViR0wgPSBmdW5jdGlvbiAocmVuZGVyZXIpXG57XG4gICAgLy8gaWYgdGhlIHNwcml0ZSBpcyBub3QgdmlzaWJsZSBvciB0aGUgYWxwaGEgaXMgMCB0aGVuIG5vIG5lZWQgdG8gcmVuZGVyIHRoaXMgZWxlbWVudFxuXG4gICAgaWYgKHRoaXMuZ2xEaXJ0eSlcbiAgICB7XG4gICAgICAgIHRoaXMuZGlydHkgPSB0cnVlO1xuICAgICAgICB0aGlzLmdsRGlydHkgPSBmYWxzZTtcbiAgICB9XG5cbiAgICByZW5kZXJlci5zZXRPYmplY3RSZW5kZXJlcihyZW5kZXJlci5wbHVnaW5zLmdyYXBoaWNzKTtcbiAgICByZW5kZXJlci5wbHVnaW5zLmdyYXBoaWNzLnJlbmRlcih0aGlzKTtcblxufTtcblxuLyoqXG4gKiBSZW5kZXJzIHRoZSBvYmplY3QgdXNpbmcgdGhlIENhbnZhcyByZW5kZXJlclxuICpcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5DYW52YXNSZW5kZXJlcn1cbiAqIEBwcml2YXRlXG4gKi9cbkdyYXBoaWNzLnByb3RvdHlwZS5fcmVuZGVyQ2FudmFzID0gZnVuY3Rpb24gKHJlbmRlcmVyKVxue1xuICAgIGlmICh0aGlzLmlzTWFzayA9PT0gdHJ1ZSlcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBpZiB0aGUgdGludCBoYXMgY2hhbmdlZCwgc2V0IHRoZSBncmFwaGljcyBvYmplY3QgdG8gZGlydHkuXG4gICAgaWYgKHRoaXMuX3ByZXZUaW50ICE9PSB0aGlzLnRpbnQpIHtcbiAgICAgICAgdGhpcy5kaXJ0eSA9IHRydWU7XG4gICAgfVxuXG4gICAgLy8gdGhpcyBjb2RlIG1heSBzdGlsbCBiZSBuZWVkZWQgc28gbGVhdmluZyBmb3Igbm93Li5cbiAgICAvL1xuICAgIC8qXG4gICAgaWYgKHRoaXMuX2NhY2hlQXNCaXRtYXApXG4gICAge1xuICAgICAgICBpZiAodGhpcy5kaXJ0eSB8fCB0aGlzLmNhY2hlZFNwcml0ZURpcnR5KVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLl9nZW5lcmF0ZUNhY2hlZFNwcml0ZSgpO1xuXG4gICAgICAgICAgICAvLyB3ZSB3aWxsIGFsc28gbmVlZCB0byB1cGRhdGUgdGhlIHRleHR1cmVcbiAgICAgICAgICAgIHRoaXMudXBkYXRlQ2FjaGVkU3ByaXRlVGV4dHVyZSgpO1xuXG4gICAgICAgICAgICB0aGlzLmNhY2hlZFNwcml0ZURpcnR5ID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLmRpcnR5ID0gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9jYWNoZWRTcHJpdGUuYWxwaGEgPSB0aGlzLmFscGhhO1xuXG4gICAgICAgIFNwcml0ZS5wcm90b3R5cGUuX3JlbmRlckNhbnZhcy5jYWxsKHRoaXMuX2NhY2hlZFNwcml0ZSwgcmVuZGVyZXIpO1xuXG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgKi9cbiAgICB2YXIgY29udGV4dCA9IHJlbmRlcmVyLmNvbnRleHQ7XG4gICAgdmFyIHRyYW5zZm9ybSA9IHRoaXMud29ybGRUcmFuc2Zvcm07XG5cbiAgICB2YXIgY29tcG9zaXRlT3BlcmF0aW9uID0gcmVuZGVyZXIuYmxlbmRNb2Rlc1t0aGlzLmJsZW5kTW9kZV07XG4gICAgaWYgKGNvbXBvc2l0ZU9wZXJhdGlvbiAhPT0gY29udGV4dC5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb24pXG4gICAge1xuICAgICAgICBjb250ZXh0Lmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbiA9IGNvbXBvc2l0ZU9wZXJhdGlvbjtcbiAgICB9XG5cbiAgICB2YXIgcmVzb2x1dGlvbiA9IHJlbmRlcmVyLnJlc29sdXRpb247XG4gICAgY29udGV4dC5zZXRUcmFuc2Zvcm0oXG4gICAgICAgIHRyYW5zZm9ybS5hICogcmVzb2x1dGlvbixcbiAgICAgICAgdHJhbnNmb3JtLmIgKiByZXNvbHV0aW9uLFxuICAgICAgICB0cmFuc2Zvcm0uYyAqIHJlc29sdXRpb24sXG4gICAgICAgIHRyYW5zZm9ybS5kICogcmVzb2x1dGlvbixcbiAgICAgICAgdHJhbnNmb3JtLnR4ICogcmVzb2x1dGlvbixcbiAgICAgICAgdHJhbnNmb3JtLnR5ICogcmVzb2x1dGlvblxuICAgICk7XG5cbiAgICBDYW52YXNHcmFwaGljcy5yZW5kZXJHcmFwaGljcyh0aGlzLCBjb250ZXh0KTtcbn07XG5cbi8qKlxuICogUmV0cmlldmVzIHRoZSBib3VuZHMgb2YgdGhlIGdyYXBoaWMgc2hhcGUgYXMgYSByZWN0YW5nbGUgb2JqZWN0XG4gKlxuICogQHBhcmFtIFttYXRyaXhdIHtQSVhJLk1hdHJpeH0gVGhlIHdvcmxkIHRyYW5zZm9ybSBtYXRyaXggdG8gdXNlLCBkZWZhdWx0cyB0byB0aGlzXG4gKiAgb2JqZWN0J3Mgd29ybGRUcmFuc2Zvcm0uXG4gKiBAcmV0dXJuIHtQSVhJLlJlY3RhbmdsZX0gdGhlIHJlY3Rhbmd1bGFyIGJvdW5kaW5nIGFyZWFcbiAqL1xuR3JhcGhpY3MucHJvdG90eXBlLmdldEJvdW5kcyA9IGZ1bmN0aW9uIChtYXRyaXgpXG57XG4gICAgaWYoIXRoaXMuX2N1cnJlbnRCb3VuZHMpXG4gICAge1xuXG4gICAgICAgIC8vIHJldHVybiBhbiBlbXB0eSBvYmplY3QgaWYgdGhlIGl0ZW0gaXMgYSBtYXNrIVxuICAgICAgICBpZiAoIXRoaXMucmVuZGVyYWJsZSlcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIG1hdGguUmVjdGFuZ2xlLkVNUFRZO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuYm91bmRzRGlydHkpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlTG9jYWxCb3VuZHMoKTtcblxuICAgICAgICAgICAgdGhpcy5nbERpcnR5ID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMuY2FjaGVkU3ByaXRlRGlydHkgPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy5ib3VuZHNEaXJ0eSA9IGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGJvdW5kcyA9IHRoaXMuX2xvY2FsQm91bmRzO1xuXG4gICAgICAgIHZhciB3MCA9IGJvdW5kcy54O1xuICAgICAgICB2YXIgdzEgPSBib3VuZHMud2lkdGggKyBib3VuZHMueDtcblxuICAgICAgICB2YXIgaDAgPSBib3VuZHMueTtcbiAgICAgICAgdmFyIGgxID0gYm91bmRzLmhlaWdodCArIGJvdW5kcy55O1xuXG4gICAgICAgIHZhciB3b3JsZFRyYW5zZm9ybSA9IG1hdHJpeCB8fCB0aGlzLndvcmxkVHJhbnNmb3JtO1xuXG4gICAgICAgIHZhciBhID0gd29ybGRUcmFuc2Zvcm0uYTtcbiAgICAgICAgdmFyIGIgPSB3b3JsZFRyYW5zZm9ybS5iO1xuICAgICAgICB2YXIgYyA9IHdvcmxkVHJhbnNmb3JtLmM7XG4gICAgICAgIHZhciBkID0gd29ybGRUcmFuc2Zvcm0uZDtcbiAgICAgICAgdmFyIHR4ID0gd29ybGRUcmFuc2Zvcm0udHg7XG4gICAgICAgIHZhciB0eSA9IHdvcmxkVHJhbnNmb3JtLnR5O1xuXG4gICAgICAgIHZhciB4MSA9IGEgKiB3MSArIGMgKiBoMSArIHR4O1xuICAgICAgICB2YXIgeTEgPSBkICogaDEgKyBiICogdzEgKyB0eTtcblxuICAgICAgICB2YXIgeDIgPSBhICogdzAgKyBjICogaDEgKyB0eDtcbiAgICAgICAgdmFyIHkyID0gZCAqIGgxICsgYiAqIHcwICsgdHk7XG5cbiAgICAgICAgdmFyIHgzID0gYSAqIHcwICsgYyAqIGgwICsgdHg7XG4gICAgICAgIHZhciB5MyA9IGQgKiBoMCArIGIgKiB3MCArIHR5O1xuXG4gICAgICAgIHZhciB4NCA9ICBhICogdzEgKyBjICogaDAgKyB0eDtcbiAgICAgICAgdmFyIHk0ID0gIGQgKiBoMCArIGIgKiB3MSArIHR5O1xuXG4gICAgICAgIHZhciBtYXhYID0geDE7XG4gICAgICAgIHZhciBtYXhZID0geTE7XG5cbiAgICAgICAgdmFyIG1pblggPSB4MTtcbiAgICAgICAgdmFyIG1pblkgPSB5MTtcblxuICAgICAgICBtaW5YID0geDIgPCBtaW5YID8geDIgOiBtaW5YO1xuICAgICAgICBtaW5YID0geDMgPCBtaW5YID8geDMgOiBtaW5YO1xuICAgICAgICBtaW5YID0geDQgPCBtaW5YID8geDQgOiBtaW5YO1xuXG4gICAgICAgIG1pblkgPSB5MiA8IG1pblkgPyB5MiA6IG1pblk7XG4gICAgICAgIG1pblkgPSB5MyA8IG1pblkgPyB5MyA6IG1pblk7XG4gICAgICAgIG1pblkgPSB5NCA8IG1pblkgPyB5NCA6IG1pblk7XG5cbiAgICAgICAgbWF4WCA9IHgyID4gbWF4WCA/IHgyIDogbWF4WDtcbiAgICAgICAgbWF4WCA9IHgzID4gbWF4WCA/IHgzIDogbWF4WDtcbiAgICAgICAgbWF4WCA9IHg0ID4gbWF4WCA/IHg0IDogbWF4WDtcblxuICAgICAgICBtYXhZID0geTIgPiBtYXhZID8geTIgOiBtYXhZO1xuICAgICAgICBtYXhZID0geTMgPiBtYXhZID8geTMgOiBtYXhZO1xuICAgICAgICBtYXhZID0geTQgPiBtYXhZID8geTQgOiBtYXhZO1xuXG4gICAgICAgIHRoaXMuX2JvdW5kcy54ID0gbWluWDtcbiAgICAgICAgdGhpcy5fYm91bmRzLndpZHRoID0gbWF4WCAtIG1pblg7XG5cbiAgICAgICAgdGhpcy5fYm91bmRzLnkgPSBtaW5ZO1xuICAgICAgICB0aGlzLl9ib3VuZHMuaGVpZ2h0ID0gbWF4WSAtIG1pblk7XG5cbiAgICAgICAgdGhpcy5fY3VycmVudEJvdW5kcyA9IHRoaXMuX2JvdW5kcztcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5fY3VycmVudEJvdW5kcztcbn07XG5cbi8qKlxuKiBUZXN0cyBpZiBhIHBvaW50IGlzIGluc2lkZSB0aGlzIGdyYXBoaWNzIG9iamVjdFxuKlxuKiBAcGFyYW0gcG9pbnQge1BJWEkuUG9pbnR9IHRoZSBwb2ludCB0byB0ZXN0XG4qIEByZXR1cm4ge2Jvb2xlYW59IHRoZSByZXN1bHQgb2YgdGhlIHRlc3RcbiovXG5HcmFwaGljcy5wcm90b3R5cGUuY29udGFpbnNQb2ludCA9IGZ1bmN0aW9uKCBwb2ludCApXG57XG4gICAgdGhpcy53b3JsZFRyYW5zZm9ybS5hcHBseUludmVyc2UocG9pbnQsICB0ZW1wUG9pbnQpO1xuXG4gICAgdmFyIGdyYXBoaWNzRGF0YSA9IHRoaXMuZ3JhcGhpY3NEYXRhO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBncmFwaGljc0RhdGEubGVuZ3RoOyBpKyspXG4gICAge1xuICAgICAgICB2YXIgZGF0YSA9IGdyYXBoaWNzRGF0YVtpXTtcblxuICAgICAgICBpZiAoIWRhdGEuZmlsbClcbiAgICAgICAge1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBvbmx5IGRlYWwgd2l0aCBmaWxscy4uXG4gICAgICAgIGlmIChkYXRhLnNoYXBlKVxuICAgICAgICB7XG4gICAgICAgICAgICBpZiAoIGRhdGEuc2hhcGUuY29udGFpbnMoIHRlbXBQb2ludC54LCB0ZW1wUG9pbnQueSApIClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBmYWxzZTtcbn07XG5cbi8qKlxuICogVXBkYXRlIHRoZSBib3VuZHMgb2YgdGhlIG9iamVjdFxuICpcbiAqL1xuR3JhcGhpY3MucHJvdG90eXBlLnVwZGF0ZUxvY2FsQm91bmRzID0gZnVuY3Rpb24gKClcbntcbiAgICB2YXIgbWluWCA9IEluZmluaXR5O1xuICAgIHZhciBtYXhYID0gLUluZmluaXR5O1xuXG4gICAgdmFyIG1pblkgPSBJbmZpbml0eTtcbiAgICB2YXIgbWF4WSA9IC1JbmZpbml0eTtcblxuICAgIGlmICh0aGlzLmdyYXBoaWNzRGF0YS5sZW5ndGgpXG4gICAge1xuICAgICAgICB2YXIgc2hhcGUsIHBvaW50cywgeCwgeSwgdywgaDtcblxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuZ3JhcGhpY3NEYXRhLmxlbmd0aDsgaSsrKVxuICAgICAgICB7XG4gICAgICAgICAgICB2YXIgZGF0YSA9IHRoaXMuZ3JhcGhpY3NEYXRhW2ldO1xuICAgICAgICAgICAgdmFyIHR5cGUgPSBkYXRhLnR5cGU7XG4gICAgICAgICAgICB2YXIgbGluZVdpZHRoID0gZGF0YS5saW5lV2lkdGg7XG4gICAgICAgICAgICBzaGFwZSA9IGRhdGEuc2hhcGU7XG5cbiAgICAgICAgICAgIGlmICh0eXBlID09PSBDT05TVC5TSEFQRVMuUkVDVCB8fCB0eXBlID09PSBDT05TVC5TSEFQRVMuUlJFQylcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB4ID0gc2hhcGUueCAtIGxpbmVXaWR0aC8yO1xuICAgICAgICAgICAgICAgIHkgPSBzaGFwZS55IC0gbGluZVdpZHRoLzI7XG4gICAgICAgICAgICAgICAgdyA9IHNoYXBlLndpZHRoICsgbGluZVdpZHRoO1xuICAgICAgICAgICAgICAgIGggPSBzaGFwZS5oZWlnaHQgKyBsaW5lV2lkdGg7XG5cbiAgICAgICAgICAgICAgICBtaW5YID0geCA8IG1pblggPyB4IDogbWluWDtcbiAgICAgICAgICAgICAgICBtYXhYID0geCArIHcgPiBtYXhYID8geCArIHcgOiBtYXhYO1xuXG4gICAgICAgICAgICAgICAgbWluWSA9IHkgPCBtaW5ZID8geSA6IG1pblk7XG4gICAgICAgICAgICAgICAgbWF4WSA9IHkgKyBoID4gbWF4WSA/IHkgKyBoIDogbWF4WTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKHR5cGUgPT09IENPTlNULlNIQVBFUy5DSVJDKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHggPSBzaGFwZS54O1xuICAgICAgICAgICAgICAgIHkgPSBzaGFwZS55O1xuICAgICAgICAgICAgICAgIHcgPSBzaGFwZS5yYWRpdXMgKyBsaW5lV2lkdGgvMjtcbiAgICAgICAgICAgICAgICBoID0gc2hhcGUucmFkaXVzICsgbGluZVdpZHRoLzI7XG5cbiAgICAgICAgICAgICAgICBtaW5YID0geCAtIHcgPCBtaW5YID8geCAtIHcgOiBtaW5YO1xuICAgICAgICAgICAgICAgIG1heFggPSB4ICsgdyA+IG1heFggPyB4ICsgdyA6IG1heFg7XG5cbiAgICAgICAgICAgICAgICBtaW5ZID0geSAtIGggPCBtaW5ZID8geSAtIGggOiBtaW5ZO1xuICAgICAgICAgICAgICAgIG1heFkgPSB5ICsgaCA+IG1heFkgPyB5ICsgaCA6IG1heFk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmICh0eXBlID09PSBDT05TVC5TSEFQRVMuRUxJUClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB4ID0gc2hhcGUueDtcbiAgICAgICAgICAgICAgICB5ID0gc2hhcGUueTtcbiAgICAgICAgICAgICAgICB3ID0gc2hhcGUud2lkdGggKyBsaW5lV2lkdGgvMjtcbiAgICAgICAgICAgICAgICBoID0gc2hhcGUuaGVpZ2h0ICsgbGluZVdpZHRoLzI7XG5cbiAgICAgICAgICAgICAgICBtaW5YID0geCAtIHcgPCBtaW5YID8geCAtIHcgOiBtaW5YO1xuICAgICAgICAgICAgICAgIG1heFggPSB4ICsgdyA+IG1heFggPyB4ICsgdyA6IG1heFg7XG5cbiAgICAgICAgICAgICAgICBtaW5ZID0geSAtIGggPCBtaW5ZID8geSAtIGggOiBtaW5ZO1xuICAgICAgICAgICAgICAgIG1heFkgPSB5ICsgaCA+IG1heFkgPyB5ICsgaCA6IG1heFk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgLy8gUE9MWVxuICAgICAgICAgICAgICAgIHBvaW50cyA9IHNoYXBlLnBvaW50cztcblxuICAgICAgICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgcG9pbnRzLmxlbmd0aDsgaiArPSAyKVxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgeCA9IHBvaW50c1tqXTtcbiAgICAgICAgICAgICAgICAgICAgeSA9IHBvaW50c1tqKzFdO1xuXG4gICAgICAgICAgICAgICAgICAgIG1pblggPSB4LWxpbmVXaWR0aCA8IG1pblggPyB4LWxpbmVXaWR0aCA6IG1pblg7XG4gICAgICAgICAgICAgICAgICAgIG1heFggPSB4K2xpbmVXaWR0aCA+IG1heFggPyB4K2xpbmVXaWR0aCA6IG1heFg7XG5cbiAgICAgICAgICAgICAgICAgICAgbWluWSA9IHktbGluZVdpZHRoIDwgbWluWSA/IHktbGluZVdpZHRoIDogbWluWTtcbiAgICAgICAgICAgICAgICAgICAgbWF4WSA9IHkrbGluZVdpZHRoID4gbWF4WSA/IHkrbGluZVdpZHRoIDogbWF4WTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgbWluWCA9IDA7XG4gICAgICAgIG1heFggPSAwO1xuICAgICAgICBtaW5ZID0gMDtcbiAgICAgICAgbWF4WSA9IDA7XG4gICAgfVxuXG4gICAgdmFyIHBhZGRpbmcgPSB0aGlzLmJvdW5kc1BhZGRpbmc7XG5cbiAgICB0aGlzLl9sb2NhbEJvdW5kcy54ID0gbWluWCAtIHBhZGRpbmc7XG4gICAgdGhpcy5fbG9jYWxCb3VuZHMud2lkdGggPSAobWF4WCAtIG1pblgpICsgcGFkZGluZyAqIDI7XG5cbiAgICB0aGlzLl9sb2NhbEJvdW5kcy55ID0gbWluWSAtIHBhZGRpbmc7XG4gICAgdGhpcy5fbG9jYWxCb3VuZHMuaGVpZ2h0ID0gKG1heFkgLSBtaW5ZKSArIHBhZGRpbmcgKiAyO1xufTtcblxuLyoqXG4gKiBHZW5lcmF0ZXMgdGhlIGNhY2hlZCBzcHJpdGUgd2hlbiB0aGUgc3ByaXRlIGhhcyBjYWNoZUFzQml0bWFwID0gdHJ1ZVxuICpcbiAqIEBwcml2YXRlXG4gKi9cbi8qXG5HcmFwaGljcy5wcm90b3R5cGUuX2dlbmVyYXRlQ2FjaGVkU3ByaXRlID0gZnVuY3Rpb24gKClcbntcbiAgICB2YXIgYm91bmRzID0gdGhpcy5nZXRMb2NhbEJvdW5kcygpO1xuXG4gICAgaWYgKCF0aGlzLl9jYWNoZWRTcHJpdGUpXG4gICAge1xuICAgICAgICB2YXIgY2FudmFzQnVmZmVyID0gbmV3IENhbnZhc0J1ZmZlcihib3VuZHMud2lkdGgsIGJvdW5kcy5oZWlnaHQpO1xuICAgICAgICB2YXIgdGV4dHVyZSA9IFRleHR1cmUuZnJvbUNhbnZhcyhjYW52YXNCdWZmZXIuY2FudmFzKTtcblxuICAgICAgICB0aGlzLl9jYWNoZWRTcHJpdGUgPSBuZXcgU3ByaXRlKHRleHR1cmUpO1xuICAgICAgICB0aGlzLl9jYWNoZWRTcHJpdGUuYnVmZmVyID0gY2FudmFzQnVmZmVyO1xuXG4gICAgICAgIHRoaXMuX2NhY2hlZFNwcml0ZS53b3JsZFRyYW5zZm9ybSA9IHRoaXMud29ybGRUcmFuc2Zvcm07XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHRoaXMuX2NhY2hlZFNwcml0ZS5idWZmZXIucmVzaXplKGJvdW5kcy53aWR0aCwgYm91bmRzLmhlaWdodCk7XG4gICAgfVxuXG4gICAgLy8gbGV2ZXJhZ2UgdGhlIGFuY2hvciB0byBhY2NvdW50IGZvciB0aGUgb2Zmc2V0IG9mIHRoZSBlbGVtZW50XG4gICAgdGhpcy5fY2FjaGVkU3ByaXRlLmFuY2hvci54ID0gLSggYm91bmRzLnggLyBib3VuZHMud2lkdGggKTtcbiAgICB0aGlzLl9jYWNoZWRTcHJpdGUuYW5jaG9yLnkgPSAtKCBib3VuZHMueSAvIGJvdW5kcy5oZWlnaHQgKTtcblxuICAgIC8vIHRoaXMuX2NhY2hlZFNwcml0ZS5idWZmZXIuY29udGV4dC5zYXZlKCk7XG4gICAgdGhpcy5fY2FjaGVkU3ByaXRlLmJ1ZmZlci5jb250ZXh0LnRyYW5zbGF0ZSgtYm91bmRzLngsLWJvdW5kcy55KTtcblxuICAgIC8vIG1ha2Ugc3VyZSB3ZSBzZXQgdGhlIGFscGhhIG9mIHRoZSBncmFwaGljcyB0byAxIGZvciB0aGUgcmVuZGVyLi5cbiAgICB0aGlzLndvcmxkQWxwaGEgPSAxO1xuXG4gICAgLy8gbm93IHJlbmRlciB0aGUgZ3JhcGhpYy4uXG4gICAgQ2FudmFzR3JhcGhpY3MucmVuZGVyR3JhcGhpY3ModGhpcywgdGhpcy5fY2FjaGVkU3ByaXRlLmJ1ZmZlci5jb250ZXh0KTtcblxuICAgIHRoaXMuX2NhY2hlZFNwcml0ZS5hbHBoYSA9IHRoaXMuYWxwaGE7XG59O1xuKi9cbi8qKlxuICogVXBkYXRlcyB0ZXh0dXJlIHNpemUgYmFzZWQgb24gY2FudmFzIHNpemVcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG4vKlxuR3JhcGhpY3MucHJvdG90eXBlLnVwZGF0ZUNhY2hlZFNwcml0ZVRleHR1cmUgPSBmdW5jdGlvbiAoKVxue1xuICAgIHZhciBjYWNoZWRTcHJpdGUgPSB0aGlzLl9jYWNoZWRTcHJpdGU7XG4gICAgdmFyIHRleHR1cmUgPSBjYWNoZWRTcHJpdGUudGV4dHVyZTtcbiAgICB2YXIgY2FudmFzID0gY2FjaGVkU3ByaXRlLmJ1ZmZlci5jYW52YXM7XG5cbiAgICB0ZXh0dXJlLmJhc2VUZXh0dXJlLndpZHRoID0gY2FudmFzLndpZHRoO1xuICAgIHRleHR1cmUuYmFzZVRleHR1cmUuaGVpZ2h0ID0gY2FudmFzLmhlaWdodDtcbiAgICB0ZXh0dXJlLmNyb3Aud2lkdGggPSB0ZXh0dXJlLmZyYW1lLndpZHRoID0gY2FudmFzLndpZHRoO1xuICAgIHRleHR1cmUuY3JvcC5oZWlnaHQgPSB0ZXh0dXJlLmZyYW1lLmhlaWdodCA9IGNhbnZhcy5oZWlnaHQ7XG5cbiAgICBjYWNoZWRTcHJpdGUuX3dpZHRoID0gY2FudmFzLndpZHRoO1xuICAgIGNhY2hlZFNwcml0ZS5faGVpZ2h0ID0gY2FudmFzLmhlaWdodDtcblxuICAgIC8vIHVwZGF0ZSB0aGUgZGlydHkgYmFzZSB0ZXh0dXJlc1xuICAgIHRleHR1cmUuYmFzZVRleHR1cmUuZGlydHkoKTtcbn07Ki9cblxuLyoqXG4gKiBEZXN0cm95cyBhIHByZXZpb3VzIGNhY2hlZCBzcHJpdGUuXG4gKlxuICovXG4vKlxuR3JhcGhpY3MucHJvdG90eXBlLmRlc3Ryb3lDYWNoZWRTcHJpdGUgPSBmdW5jdGlvbiAoKVxue1xuICAgIHRoaXMuX2NhY2hlZFNwcml0ZS50ZXh0dXJlLmRlc3Ryb3kodHJ1ZSk7XG5cbiAgICAvLyBsZXQgdGhlIGdjIGNvbGxlY3QgdGhlIHVudXNlZCBzcHJpdGVcbiAgICAvLyBUT0RPIGNvdWxkIGJlIG9iamVjdCBwb29sZWQhXG4gICAgdGhpcy5fY2FjaGVkU3ByaXRlID0gbnVsbDtcbn07Ki9cblxuLyoqXG4gKiBEcmF3cyB0aGUgZ2l2ZW4gc2hhcGUgdG8gdGhpcyBHcmFwaGljcyBvYmplY3QuIENhbiBiZSBhbnkgb2YgQ2lyY2xlLCBSZWN0YW5nbGUsIEVsbGlwc2UsIExpbmUgb3IgUG9seWdvbi5cbiAqXG4gKiBAcGFyYW0gc2hhcGUge1BJWEkuQ2lyY2xlfFBJWEkuUmVjdGFuZ2xlfFBJWEkuRWxsaXBzZXxQSVhJLkxpbmV8UElYSS5Qb2x5Z29ufSBUaGUgc2hhcGUgb2JqZWN0IHRvIGRyYXcuXG4gKiBAcmV0dXJuIHtQSVhJLkdyYXBoaWNzRGF0YX0gVGhlIGdlbmVyYXRlZCBHcmFwaGljc0RhdGEgb2JqZWN0LlxuICovXG5HcmFwaGljcy5wcm90b3R5cGUuZHJhd1NoYXBlID0gZnVuY3Rpb24gKHNoYXBlKVxue1xuICAgIGlmICh0aGlzLmN1cnJlbnRQYXRoKVxuICAgIHtcbiAgICAgICAgLy8gY2hlY2sgY3VycmVudCBwYXRoIVxuICAgICAgICBpZiAodGhpcy5jdXJyZW50UGF0aC5zaGFwZS5wb2ludHMubGVuZ3RoIDw9IDIpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuZ3JhcGhpY3NEYXRhLnBvcCgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5jdXJyZW50UGF0aCA9IG51bGw7XG5cbiAgICB2YXIgZGF0YSA9IG5ldyBHcmFwaGljc0RhdGEodGhpcy5saW5lV2lkdGgsIHRoaXMubGluZUNvbG9yLCB0aGlzLmxpbmVBbHBoYSwgdGhpcy5maWxsQ29sb3IsIHRoaXMuZmlsbEFscGhhLCB0aGlzLmZpbGxpbmcsIHNoYXBlKTtcblxuICAgIHRoaXMuZ3JhcGhpY3NEYXRhLnB1c2goZGF0YSk7XG5cbiAgICBpZiAoZGF0YS50eXBlID09PSBDT05TVC5TSEFQRVMuUE9MWSlcbiAgICB7XG4gICAgICAgIGRhdGEuc2hhcGUuY2xvc2VkID0gZGF0YS5zaGFwZS5jbG9zZWQgfHwgdGhpcy5maWxsaW5nO1xuICAgICAgICB0aGlzLmN1cnJlbnRQYXRoID0gZGF0YTtcbiAgICB9XG5cbiAgICB0aGlzLmRpcnR5ID0gdGhpcy5ib3VuZHNEaXJ0eSA9IHRydWU7XG5cbiAgICByZXR1cm4gZGF0YTtcbn07XG5cbi8qKlxuICogRGVzdHJveXMgdGhlIEdyYXBoaWNzIG9iamVjdC5cbiAqL1xuR3JhcGhpY3MucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoKSB7XG4gICAgQ29udGFpbmVyLnByb3RvdHlwZS5kZXN0cm95LmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG5cbiAgICAvLyBkZXN0cm95IGVhY2ggb2YgdGhlIEdyYXBoaWNzRGF0YSBvYmplY3RzXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmdyYXBoaWNzRGF0YS5sZW5ndGg7ICsraSkge1xuICAgICAgICB0aGlzLmdyYXBoaWNzRGF0YVtpXS5kZXN0cm95KCk7XG4gICAgfVxuXG4gICAgLy8gZm9yIGVhY2ggd2ViZ2wgZGF0YSBlbnRyeSwgZGVzdHJveSB0aGUgV2ViR0xHcmFwaGljc0RhdGFcbiAgICBmb3IgKHZhciBpZCBpbiB0aGlzLl93ZWJnbCkge1xuICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IHRoaXMuX3dlYmdsW2lkXS5kYXRhLmxlbmd0aDsgKytqKSB7XG4gICAgICAgICAgICB0aGlzLl93ZWJnbFtpZF0uZGF0YVtqXS5kZXN0cm95KCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLmdyYXBoaWNzRGF0YSA9IG51bGw7XG5cbiAgICB0aGlzLmN1cnJlbnRQYXRoID0gbnVsbDtcbiAgICB0aGlzLl93ZWJnbCA9IG51bGw7XG4gICAgdGhpcy5fbG9jYWxCb3VuZHMgPSBudWxsO1xufTtcbiIsIi8qKlxuICogQSBHcmFwaGljc0RhdGEgb2JqZWN0LlxuICpcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqIEBwYXJhbSBsaW5lV2lkdGgge251bWJlcn0gdGhlIHdpZHRoIG9mIHRoZSBsaW5lIHRvIGRyYXdcbiAqIEBwYXJhbSBsaW5lQ29sb3Ige251bWJlcn0gdGhlIGNvbG9yIG9mIHRoZSBsaW5lIHRvIGRyYXdcbiAqIEBwYXJhbSBsaW5lQWxwaGEge251bWJlcn0gdGhlIGFscGhhIG9mIHRoZSBsaW5lIHRvIGRyYXdcbiAqIEBwYXJhbSBmaWxsQ29sb3Ige251bWJlcn0gdGhlIGNvbG9yIG9mIHRoZSBmaWxsXG4gKiBAcGFyYW0gZmlsbEFscGhhIHtudW1iZXJ9IHRoZSBhbHBoYSBvZiB0aGUgZmlsbFxuICogQHBhcmFtIGZpbGwgICAgICB7Ym9vbGVhbn0gd2hldGhlciBvciBub3QgdGhlIHNoYXBlIGlzIGZpbGxlZCB3aXRoIGEgY29sb3VyXG4gKiBAcGFyYW0gc2hhcGUgICAgIHtDaXJjbGV8UmVjdGFuZ2xlfEVsbGlwc2V8TGluZXxQb2x5Z29ufSBUaGUgc2hhcGUgb2JqZWN0IHRvIGRyYXcuXG4gKi9cbmZ1bmN0aW9uIEdyYXBoaWNzRGF0YShsaW5lV2lkdGgsIGxpbmVDb2xvciwgbGluZUFscGhhLCBmaWxsQ29sb3IsIGZpbGxBbHBoYSwgZmlsbCwgc2hhcGUpXG57XG4gICAgLypcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9IHRoZSB3aWR0aCBvZiB0aGUgbGluZSB0byBkcmF3XG4gICAgICovXG4gICAgdGhpcy5saW5lV2lkdGggPSBsaW5lV2lkdGg7XG5cbiAgICAvKlxuICAgICAqIEBtZW1iZXIge251bWJlcn0gdGhlIGNvbG9yIG9mIHRoZSBsaW5lIHRvIGRyYXdcbiAgICAgKi9cbiAgICB0aGlzLmxpbmVDb2xvciA9IGxpbmVDb2xvcjtcbiAgICAvKlxuICAgICAqIEBtZW1iZXIge251bWJlcn0gdGhlIGFscGhhIG9mIHRoZSBsaW5lIHRvIGRyYXdcbiAgICAgKi9cbiAgICB0aGlzLmxpbmVBbHBoYSA9IGxpbmVBbHBoYTtcbiAgICAvKlxuICAgICAqIEBtZW1iZXIge251bWJlcn0gY2FjaGVkIHRpbnQgb2YgdGhlIGxpbmUgdG8gZHJhd1xuICAgICAqL1xuICAgIHRoaXMuX2xpbmVUaW50ID0gbGluZUNvbG9yO1xuXG4gICAgLypcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9IHRoZSBjb2xvciBvZiB0aGUgZmlsbFxuICAgICAqL1xuICAgIHRoaXMuZmlsbENvbG9yID0gZmlsbENvbG9yO1xuXG4gICAgLypcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9IHRoZSBhbHBoYSBvZiB0aGUgZmlsbFxuICAgICAqL1xuICAgIHRoaXMuZmlsbEFscGhhID0gZmlsbEFscGhhO1xuXG4gICAgLypcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9IGNhY2hlZCB0aW50IG9mIHRoZSBmaWxsXG4gICAgICovXG4gICAgdGhpcy5fZmlsbFRpbnQgPSBmaWxsQ29sb3I7XG5cbiAgICAvKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59IHdoZXRoZXIgb3Igbm90IHRoZSBzaGFwZSBpcyBmaWxsZWQgd2l0aCBhIGNvbG91clxuICAgICAqL1xuICAgIHRoaXMuZmlsbCA9IGZpbGw7XG5cbiAgICAvKlxuICAgICAqIEBtZW1iZXIge1BJWEkuQ2lyY2xlfFBJWEkuUmVjdGFuZ2xlfFBJWEkuRWxsaXBzZXxQSVhJLkxpbmV8UElYSS5Qb2x5Z29ufSBUaGUgc2hhcGUgb2JqZWN0IHRvIGRyYXcuXG4gICAgICovXG4gICAgdGhpcy5zaGFwZSA9IHNoYXBlO1xuXG4gICAgLypcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9IFRoZSB0eXBlIG9mIHRoZSBzaGFwZSwgc2VlIHRoZSBDb25zdC5TaGFwZXMgZmlsZSBmb3IgYWxsIHRoZSBleGlzdGluZyB0eXBlcyxcbiAgICAgKi9cbiAgICB0aGlzLnR5cGUgPSBzaGFwZS50eXBlO1xufVxuXG5HcmFwaGljc0RhdGEucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gR3JhcGhpY3NEYXRhO1xubW9kdWxlLmV4cG9ydHMgPSBHcmFwaGljc0RhdGE7XG5cbi8qKlxuICogQ3JlYXRlcyBhIG5ldyBHcmFwaGljc0RhdGEgb2JqZWN0IHdpdGggdGhlIHNhbWUgdmFsdWVzIGFzIHRoaXMgb25lLlxuICpcbiAqIEByZXR1cm4ge1BJWEkuR3JhcGhpY3NEYXRhfVxuICovXG5HcmFwaGljc0RhdGEucHJvdG90eXBlLmNsb25lID0gZnVuY3Rpb24gKClcbntcbiAgICByZXR1cm4gbmV3IEdyYXBoaWNzRGF0YShcbiAgICAgICAgdGhpcy5saW5lV2lkdGgsXG4gICAgICAgIHRoaXMubGluZUNvbG9yLFxuICAgICAgICB0aGlzLmxpbmVBbHBoYSxcbiAgICAgICAgdGhpcy5maWxsQ29sb3IsXG4gICAgICAgIHRoaXMuZmlsbEFscGhhLFxuICAgICAgICB0aGlzLmZpbGwsXG4gICAgICAgIHRoaXMuc2hhcGVcbiAgICApO1xufTtcblxuLyoqXG4gKiBEZXN0cm95cyB0aGUgR3JhcGhpY3MgZGF0YS5cbiAqL1xuR3JhcGhpY3NEYXRhLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKCkge1xuICAgIHRoaXMuc2hhcGUgPSBudWxsO1xufTtcbiIsInZhciB1dGlscyA9IHJlcXVpcmUoJy4uLy4uL3V0aWxzJyksXG4gICAgbWF0aCA9IHJlcXVpcmUoJy4uLy4uL21hdGgnKSxcbiAgICBDT05TVCA9IHJlcXVpcmUoJy4uLy4uL2NvbnN0JyksXG4gICAgT2JqZWN0UmVuZGVyZXIgPSByZXF1aXJlKCcuLi8uLi9yZW5kZXJlcnMvd2ViZ2wvdXRpbHMvT2JqZWN0UmVuZGVyZXInKSxcbiAgICBXZWJHTFJlbmRlcmVyID0gcmVxdWlyZSgnLi4vLi4vcmVuZGVyZXJzL3dlYmdsL1dlYkdMUmVuZGVyZXInKSxcbiAgICBXZWJHTEdyYXBoaWNzRGF0YSA9IHJlcXVpcmUoJy4vV2ViR0xHcmFwaGljc0RhdGEnKSxcbiAgICBQcmltaXRpdmVTaGFkZXIgPSByZXF1aXJlKCcuL1ByaW1pdGl2ZVNoYWRlcicpLFxuXG4gICAgLy8gc29tZSBkcmF3aW5nIGZ1bmN0aW9ucy4uXG4gICAgYnVpbGRMaW5lID0gcmVxdWlyZSgnLi9idWlsZExpbmUnKTtcbiAgICBidWlsZFBvbHkgPSByZXF1aXJlKCcuL2J1aWxkUG9seScpO1xuICAgIGJ1aWxkQ29tcGxleFBvbHkgPSByZXF1aXJlKCcuL2J1aWxkQ29tcGxleFBvbHknKTtcbiAgICBidWlsZFJlY3RhbmdsZSA9IHJlcXVpcmUoJy4vYnVpbGRSZWN0YW5nbGUnKTtcbiAgICBidWlsZFJvdW5kZWRSZWN0YW5nbGUgPSByZXF1aXJlKCcuL2J1aWxkUm91bmRlZFJlY3RhbmdsZScpO1xuICAgIGJ1aWxkQ2lyY2xlID0gcmVxdWlyZSgnLi9idWlsZENpcmNsZScpO1xuXG4gICAgZWFyY3V0ID0gcmVxdWlyZSgnZWFyY3V0Jyk7XG5cbi8qKlxuICogUmVuZGVycyB0aGUgZ3JhcGhpY3Mgb2JqZWN0LlxuICpcbiAqIEBjbGFzc1xuICogQHByaXZhdGVcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAZXh0ZW5kcyBQSVhJLk9iamVjdFJlbmRlcmVyXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcn0gVGhlIHJlbmRlcmVyIHRoaXMgb2JqZWN0IHJlbmRlcmVyIHdvcmtzIGZvci5cbiAqL1xuZnVuY3Rpb24gR3JhcGhpY3NSZW5kZXJlcihyZW5kZXJlcilcbntcbiAgICBPYmplY3RSZW5kZXJlci5jYWxsKHRoaXMsIHJlbmRlcmVyKTtcblxuICAgIHRoaXMuZ3JhcGhpY3NEYXRhUG9vbCA9IFtdO1xuXG4gICAgdGhpcy5wcmltaXRpdmVTaGFkZXIgPSBudWxsO1xuICAgIHRoaXMuY29tcGxleFByaW1pdGl2ZVNoYWRlciA9IG51bGw7XG5cbiAgICB0aGlzLmdsID0gcmVuZGVyZXIuZ2w7XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIGlzIHRoZSBtYXhpbXVtIG51bWJlciBvZiBwb2ludHMgYSBwb2x5IGNhbiBjb250YWluIGJlZm9yZSBpdCBpcyByZW5kZXJlZCBhcyBhIGNvbXBsZXggcG9seWdvbiAodXNpbmcgdGhlIHN0ZW5jaWwgYnVmZmVyKVxuICAgICAqIEB0eXBlIHtOdW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy5tYXhpbXVtU2ltcGxlUG9seVNpemUgPSAyMDA7XG59XG5cbkdyYXBoaWNzUmVuZGVyZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShPYmplY3RSZW5kZXJlci5wcm90b3R5cGUpO1xuR3JhcGhpY3NSZW5kZXJlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBHcmFwaGljc1JlbmRlcmVyO1xubW9kdWxlLmV4cG9ydHMgPSBHcmFwaGljc1JlbmRlcmVyO1xuXG5XZWJHTFJlbmRlcmVyLnJlZ2lzdGVyUGx1Z2luKCdncmFwaGljcycsIEdyYXBoaWNzUmVuZGVyZXIpO1xuXG4vKipcbiAqIENhbGxlZCB3aGVuIHRoZXJlIGlzIGEgV2ViR0wgY29udGV4dCBjaGFuZ2VcbiAqXG4gKiBAcHJpdmF0ZVxuICpcbiAqL1xuR3JhcGhpY3NSZW5kZXJlci5wcm90b3R5cGUub25Db250ZXh0Q2hhbmdlID0gZnVuY3Rpb24oKVxue1xuICAgIHRoaXMuZ2wgPSB0aGlzLnJlbmRlcmVyLmdsO1xuICAgIHRoaXMucHJpbWl0aXZlU2hhZGVyID0gbmV3IFByaW1pdGl2ZVNoYWRlcih0aGlzLmdsKVxufTtcblxuLyoqXG4gKiBEZXN0cm95cyB0aGlzIHJlbmRlcmVyLlxuICpcbiAqL1xuR3JhcGhpY3NSZW5kZXJlci5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uICgpIHtcbiAgICBPYmplY3RSZW5kZXJlci5wcm90b3R5cGUuZGVzdHJveS5jYWxsKHRoaXMpO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmdyYXBoaWNzRGF0YVBvb2wubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgdGhpcy5ncmFwaGljc0RhdGFQb29sW2ldLmRlc3Ryb3koKTtcbiAgICB9XG5cbiAgICB0aGlzLmdyYXBoaWNzRGF0YVBvb2wgPSBudWxsO1xufTtcblxuLyoqXG4gKiBSZW5kZXJzIGEgZ3JhcGhpY3Mgb2JqZWN0LlxuICpcbiAqIEBwYXJhbSBncmFwaGljcyB7UElYSS5HcmFwaGljc30gVGhlIGdyYXBoaWNzIG9iamVjdCB0byByZW5kZXIuXG4gKi9cbkdyYXBoaWNzUmVuZGVyZXIucHJvdG90eXBlLnJlbmRlciA9IGZ1bmN0aW9uKGdyYXBoaWNzKVxue1xuICAgIHZhciByZW5kZXJlciA9IHRoaXMucmVuZGVyZXI7XG4gICAgdmFyIGdsID0gcmVuZGVyZXIuZ2w7XG5cbiAgICB2YXIgd2ViR0xEYXRhO1xuICAvLyAgY29uc29sZS5sb2coZ3JhcGhpY3MpXG4gICAgaWYgKGdyYXBoaWNzLmRpcnR5IHx8ICFncmFwaGljcy5fd2ViR0xbZ2wuaWRdKVxuICAgIHtcbiAgICAgICAgdGhpcy51cGRhdGVHcmFwaGljcyhncmFwaGljcyk7XG4gICAgfVxuXG4gICAgdmFyIHdlYkdMID0gZ3JhcGhpY3MuX3dlYkdMW2dsLmlkXTtcblxuICAgIC8vIFRoaXMgIGNvdWxkIGJlIHNwZWVkZWQgdXAgZm9yIHN1cmUhXG5cbiAgICByZW5kZXJlci5ibGVuZE1vZGVNYW5hZ2VyLnNldEJsZW5kTW9kZSggZ3JhcGhpY3MuYmxlbmRNb2RlICk7XG5cbi8vICAgIHZhciBtYXRyaXggPSAgZ3JhcGhpY3Mud29ybGRUcmFuc2Zvcm0uY2xvbmUoKTtcbi8vICAgIHZhciBtYXRyaXggPSAgcmVuZGVyZXIuY3VycmVudFJlbmRlclRhcmdldC5wcm9qZWN0aW9uTWF0cml4LmNsb25lKCk7XG4vLyAgICBtYXRyaXguYXBwZW5kKGdyYXBoaWNzLndvcmxkVHJhbnNmb3JtKTtcblxuICAgIGZvciAodmFyIGkgPSAwLCBuID0gd2ViR0wuZGF0YS5sZW5ndGg7IGkgPCBuOyBpKyspXG4gICAge1xuICAgICAgICB3ZWJHTERhdGEgPSB3ZWJHTC5kYXRhW2ldO1xuXG4gICAgICAgIGlmICh3ZWJHTC5kYXRhW2ldLm1vZGUgPT09IDEpXG4gICAgICAgIHtcbiAgICAgICAgICAgIC8vVE9ETyBmaXggdGhpcyBvbmUhXG4gICAgICAgICAgICBcbiAgICAgICAgICAgIC8qXG4gICAgICAgICAgICByZW5kZXJlci5zdGVuY2lsTWFuYWdlci5wdXNoU3RlbmNpbChncmFwaGljcywgd2ViR0xEYXRhKTtcblxuICAgICAgICAgICAgZ2wudW5pZm9ybTFmKHJlbmRlcmVyLnNoYWRlck1hbmFnZXIuY29tcGxleFByaW1pdGl2ZVNoYWRlci51bmlmb3Jtcy5hbHBoYS5fbG9jYXRpb24sIGdyYXBoaWNzLndvcmxkQWxwaGEgKiB3ZWJHTERhdGEuYWxwaGEpO1xuXG4gICAgICAgICAgICAvLyByZW5kZXIgcXVhZC4uXG4gICAgICAgICAgICBnbC5kcmF3RWxlbWVudHMoZ2wuVFJJQU5HTEVfRkFOLCA0LCBnbC5VTlNJR05FRF9TSE9SVCwgKCB3ZWJHTERhdGEuaW5kaWNlcy5sZW5ndGggLSA0ICkgKiAyICk7XG5cbiAgICAgICAgICAgIHJlbmRlcmVyLnN0ZW5jaWxNYW5hZ2VyLnBvcFN0ZW5jaWwoZ3JhcGhpY3MsIHdlYkdMRGF0YSk7XG4gICAgICAgICAgICAqL1xuICAgICAgICB9XG4gICAgICAgIGVsc2VcbiAgICAgICAge1xuXG4gICAgICAgICAgICBzaGFkZXIgPSB0aGlzLnByaW1pdGl2ZVNoYWRlcjtcblxuICAgICAgICAgICAgcmVuZGVyZXIuYmluZFNoYWRlcihzaGFkZXIpXG5cbiAgICAgICAgICAgIHNoYWRlci51bmlmb3Jtcy50cmFuc2xhdGlvbk1hdHJpeCA9IGdyYXBoaWNzLndvcmxkVHJhbnNmb3JtLnRvQXJyYXkodHJ1ZSk7XG4gICAgICAgICAgICBzaGFkZXIudW5pZm9ybXMudGludCA9IHV0aWxzLmhleDJyZ2IoZ3JhcGhpY3MudGludCk7XG4gICAgICAgICAgICBzaGFkZXIudW5pZm9ybXMuYWxwaGEgPSBncmFwaGljcy53b3JsZEFscGhhO1xuXG5cbiAgICAgICAgICAgIGdsLmJpbmRCdWZmZXIoZ2wuQVJSQVlfQlVGRkVSLCB3ZWJHTERhdGEuYnVmZmVyKTtcblxuICAgICAgICAgICAgc2hhZGVyID0gdGhpcy5wcmltaXRpdmVTaGFkZXI7XG5cbiAgICAgICAgICAgIHNoYWRlci5hdHRyaWJ1dGVzLmFWZXJ0ZXhQb3NpdGlvbi5wb2ludGVyKGdsLkZMT0FULCBmYWxzZSwgNCAqIDYsIDApO1xuICAgICAgICAgICAgc2hhZGVyLmF0dHJpYnV0ZXMuYUNvbG9yLnBvaW50ZXIoZ2wuRkxPQVQsIGZhbHNlLCA0ICogNiwgMiAqIDQpO1xuXG4gICAgICAgICAgICBnbC5lbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShzaGFkZXIuYXR0cmlidXRlcy5hVmVydGV4UG9zaXRpb24ubG9jYXRpb24pO1xuICAgICAgICAgICAgZ2wuZW5hYmxlVmVydGV4QXR0cmliQXJyYXkoc2hhZGVyLmF0dHJpYnV0ZXMuYUNvbG9yLmxvY2F0aW9uKTtcblxuICAgICAgICAgICAgLy8gc2V0IHRoZSBpbmRleCBidWZmZXIhXG4gICAgICAgICAgICBnbC5iaW5kQnVmZmVyKGdsLkVMRU1FTlRfQVJSQVlfQlVGRkVSLCB3ZWJHTERhdGEuaW5kZXhCdWZmZXIpO1xuICAgICAgICAgICAgZ2wuZHJhd0VsZW1lbnRzKGdsLlRSSUFOR0xFX1NUUklQLCAgd2ViR0xEYXRhLmluZGljZXMubGVuZ3RoLCBnbC5VTlNJR05FRF9TSE9SVCwgMCApO1xuICAgICAgICB9XG5cbiAgICAgICAgcmVuZGVyZXIuZHJhd0NvdW50Kys7XG4gICAgfVxufTtcblxuLyoqXG4gKiBVcGRhdGVzIHRoZSBncmFwaGljcyBvYmplY3RcbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIGdyYXBoaWNzIHtQSVhJLkdyYXBoaWNzfSBUaGUgZ3JhcGhpY3Mgb2JqZWN0IHRvIHVwZGF0ZVxuICovXG5HcmFwaGljc1JlbmRlcmVyLnByb3RvdHlwZS51cGRhdGVHcmFwaGljcyA9IGZ1bmN0aW9uKGdyYXBoaWNzKVxue1xuICAgIHZhciBnbCA9IHRoaXMucmVuZGVyZXIuZ2w7XG5cbiAgICAgLy8gZ2V0IHRoZSBjb250ZXh0cyBncmFwaGljcyBvYmplY3RcbiAgICB2YXIgd2ViR0wgPSBncmFwaGljcy5fd2ViR0xbZ2wuaWRdO1xuXG4gICAgLy8gaWYgdGhlIGdyYXBoaWNzIG9iamVjdCBkb2VzIG5vdCBleGlzdCBpbiB0aGUgd2ViR0wgY29udGV4dCB0aW1lIHRvIGNyZWF0ZSBpdCFcbiAgICBpZiAoIXdlYkdMKVxuICAgIHtcbiAgICAgICAgd2ViR0wgPSBncmFwaGljcy5fd2ViR0xbZ2wuaWRdID0ge2xhc3RJbmRleDowLCBkYXRhOltdLCBnbDpnbH07XG4gICAgfVxuXG4gICBcbiAgICAvLyBmbGFnIHRoZSBncmFwaGljcyBhcyBub3QgZGlydHkgYXMgd2UgYXJlIGFib3V0IHRvIHVwZGF0ZSBpdC4uLlxuICAgIGdyYXBoaWNzLmRpcnR5ID0gZmFsc2U7XG5cbiAgICB2YXIgaTtcblxuICAgIC8vIGlmIHRoZSB1c2VyIGNsZWFyZWQgdGhlIGdyYXBoaWNzIG9iamVjdCB3ZSB3aWxsIG5lZWQgdG8gY2xlYXIgZXZlcnkgb2JqZWN0XG4gICAgaWYgKGdyYXBoaWNzLmNsZWFyRGlydHkpXG4gICAge1xuICAgICAgICBncmFwaGljcy5jbGVhckRpcnR5ID0gZmFsc2U7XG5cbiAgICAgICAgLy8gbG9vcCB0aHJvdWdoIGFuZCByZXR1cm4gYWxsIHRoZSB3ZWJHTERhdGFzIHRvIHRoZSBvYmplY3QgcG9vbCBzbyB0aGFuIGNhbiBiZSByZXVzZWQgbGF0ZXIgb25cbiAgICAgICAgZm9yIChpID0gMDsgaSA8IHdlYkdMLmRhdGEubGVuZ3RoOyBpKyspXG4gICAgICAgIHtcbiAgICAgICAgICAgIHZhciBncmFwaGljc0RhdGEgPSB3ZWJHTC5kYXRhW2ldO1xuICAgICAgICAgICAgZ3JhcGhpY3NEYXRhLnJlc2V0KCk7XG4gICAgICAgICAgICB0aGlzLmdyYXBoaWNzRGF0YVBvb2wucHVzaCggZ3JhcGhpY3NEYXRhICk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBjbGVhciB0aGUgYXJyYXkgYW5kIHJlc2V0IHRoZSBpbmRleC4uXG4gICAgICAgIHdlYkdMLmRhdGEgPSBbXTtcbiAgICAgICAgd2ViR0wubGFzdEluZGV4ID0gMDtcbiAgICB9XG5cbiAgICB2YXIgd2ViR0xEYXRhO1xuXG4gICAgLy8gbG9vcCB0aHJvdWdoIHRoZSBncmFwaGljcyBkYXRhcyBhbmQgY29uc3RydWN0IGVhY2ggb25lLi5cbiAgICAvLyBpZiB0aGUgb2JqZWN0IGlzIGEgY29tcGxleCBmaWxsIHRoZW4gdGhlIG5ldyBzdGVuY2lsIGJ1ZmZlciB0ZWNobmlxdWUgd2lsbCBiZSB1c2VkXG4gICAgLy8gb3RoZXIgd2lzZSBncmFwaGljcyBvYmplY3RzIHdpbGwgYmUgcHVzaGVkIGludG8gYSBiYXRjaC4uXG4gICAgZm9yIChpID0gd2ViR0wubGFzdEluZGV4OyBpIDwgZ3JhcGhpY3MuZ3JhcGhpY3NEYXRhLmxlbmd0aDsgaSsrKVxuICAgIHtcbiAgICAgICAgdmFyIGRhdGEgPSBncmFwaGljcy5ncmFwaGljc0RhdGFbaV07XG5cbiAgICAgICAgaWYgKGRhdGEudHlwZSA9PT0gQ09OU1QuU0hBUEVTLlBPTFkpXG4gICAgICAgIHtcbiAgICAgICAgICAgIC8vIG5lZWQgdG8gYWRkIHRoZSBwb2ludHMgdGhlIHRoZSBncmFwaGljcyBvYmplY3QuLlxuICAgICAgICAgICAgZGF0YS5wb2ludHMgPSBkYXRhLnNoYXBlLnBvaW50cy5zbGljZSgpO1xuICAgICAgICAgICAgaWYgKGRhdGEuc2hhcGUuY2xvc2VkKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIC8vIGNsb3NlIHRoZSBwb2x5IGlmIHRoZSB2YWx1ZSBpcyB0cnVlIVxuICAgICAgICAgICAgICAgIGlmIChkYXRhLnBvaW50c1swXSAhPT0gZGF0YS5wb2ludHNbZGF0YS5wb2ludHMubGVuZ3RoLTJdIHx8IGRhdGEucG9pbnRzWzFdICE9PSBkYXRhLnBvaW50c1tkYXRhLnBvaW50cy5sZW5ndGgtMV0pXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBkYXRhLnBvaW50cy5wdXNoKGRhdGEucG9pbnRzWzBdLCBkYXRhLnBvaW50c1sxXSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBNQUtFIFNVUkUgV0UgSEFWRSBUSEUgQ09SUkVDVCBUWVBFLi5cbiAgICAgICAgICAgIGlmIChkYXRhLmZpbGwpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgaWYgKGRhdGEucG9pbnRzLmxlbmd0aCA+PSA2KVxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGRhdGEucG9pbnRzLmxlbmd0aCA8IHRoaXMubWF4aW11bVNpbXBsZVBvbHlTaXplICogMilcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgd2ViR0xEYXRhID0gdGhpcy5zd2l0Y2hNb2RlKHdlYkdMLCAwKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNhbkRyYXdVc2luZ1NpbXBsZSA9IGJ1aWxkUG9seShkYXRhLCB3ZWJHTERhdGEpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWNhbkRyYXdVc2luZ1NpbXBsZSlcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3ZWJHTERhdGEgPSB0aGlzLnN3aXRjaE1vZGUod2ViR0wsIDEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1aWxkQ29tcGxleFBvbHkoZGF0YSwgd2ViR0xEYXRhKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgd2ViR0xEYXRhID0gdGhpcy5zd2l0Y2hNb2RlKHdlYkdMLCAxKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJ1aWxkQ29tcGxleFBvbHkoZGF0YSwgd2ViR0xEYXRhKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGRhdGEubGluZVdpZHRoID4gMClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB3ZWJHTERhdGEgPSB0aGlzLnN3aXRjaE1vZGUod2ViR0wsIDApO1xuICAgICAgICAgICAgICAgIGJ1aWxkTGluZShkYXRhLCB3ZWJHTERhdGEpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2VcbiAgICAgICAge1xuICAgICAgICAgICAgd2ViR0xEYXRhID0gdGhpcy5zd2l0Y2hNb2RlKHdlYkdMLCAwKTtcblxuICAgICAgICAgICAgaWYgKGRhdGEudHlwZSA9PT0gQ09OU1QuU0hBUEVTLlJFQ1QpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgYnVpbGRSZWN0YW5nbGUoZGF0YSwgd2ViR0xEYXRhKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGRhdGEudHlwZSA9PT0gQ09OU1QuU0hBUEVTLkNJUkMgfHwgZGF0YS50eXBlID09PSBDT05TVC5TSEFQRVMuRUxJUClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBidWlsZENpcmNsZShkYXRhLCB3ZWJHTERhdGEpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoZGF0YS50eXBlID09PSBDT05TVC5TSEFQRVMuUlJFQylcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBidWlsZFJvdW5kZWRSZWN0YW5nbGUoZGF0YSwgd2ViR0xEYXRhKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHdlYkdMLmxhc3RJbmRleCsrO1xuICAgIH1cblxuICAgIC8vIHVwbG9hZCBhbGwgdGhlIGRpcnR5IGRhdGEuLi5cbiAgICBmb3IgKGkgPSAwOyBpIDwgd2ViR0wuZGF0YS5sZW5ndGg7IGkrKylcbiAgICB7XG4gICAgICAgIHdlYkdMRGF0YSA9IHdlYkdMLmRhdGFbaV07XG5cbiAgICAgICAgaWYgKHdlYkdMRGF0YS5kaXJ0eSlcbiAgICAgICAge1xuICAgICAgICAgICAgd2ViR0xEYXRhLnVwbG9hZCgpO1xuICAgICAgICB9XG4gICAgfVxufTtcblxuLyoqXG4gKlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0gd2ViR0wge1dlYkdMUmVuZGVyaW5nQ29udGV4dH0gdGhlIGN1cnJlbnQgV2ViR0wgZHJhd2luZyBjb250ZXh0XG4gKiBAcGFyYW0gdHlwZSB7bnVtYmVyfSBUT0RPIEBBbHZpblxuICovXG5HcmFwaGljc1JlbmRlcmVyLnByb3RvdHlwZS5zd2l0Y2hNb2RlID0gZnVuY3Rpb24gKHdlYkdMLCB0eXBlKVxue1xuICAgIHZhciB3ZWJHTERhdGE7XG5cbiAgICBpZiAoIXdlYkdMLmRhdGEubGVuZ3RoKVxuICAgIHtcbiAgICAgICAgd2ViR0xEYXRhID0gdGhpcy5ncmFwaGljc0RhdGFQb29sLnBvcCgpIHx8IG5ldyBXZWJHTEdyYXBoaWNzRGF0YSh3ZWJHTC5nbCk7XG4gICAgICAgIHdlYkdMRGF0YS5tb2RlID0gdHlwZTtcbiAgICAgICAgd2ViR0wuZGF0YS5wdXNoKHdlYkdMRGF0YSk7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHdlYkdMRGF0YSA9IHdlYkdMLmRhdGFbd2ViR0wuZGF0YS5sZW5ndGgtMV07XG5cbiAgICAgICAgaWYgKCh3ZWJHTERhdGEucG9pbnRzLmxlbmd0aCA+IDMyMDAwMCkgfHwgd2ViR0xEYXRhLm1vZGUgIT09IHR5cGUgfHwgdHlwZSA9PT0gMSlcbiAgICAgICAge1xuICAgICAgICAgICAgd2ViR0xEYXRhID0gdGhpcy5ncmFwaGljc0RhdGFQb29sLnBvcCgpIHx8IG5ldyBXZWJHTEdyYXBoaWNzRGF0YSh3ZWJHTC5nbCk7XG4gICAgICAgICAgICB3ZWJHTERhdGEubW9kZSA9IHR5cGU7XG4gICAgICAgICAgICB3ZWJHTC5kYXRhLnB1c2god2ViR0xEYXRhKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHdlYkdMRGF0YS5kaXJ0eSA9IHRydWU7XG5cbiAgICByZXR1cm4gd2ViR0xEYXRhO1xufTtcblxuIiwidmFyIFNoYWRlciA9IHJlcXVpcmUoJ3BpeGktZ2wtY29yZScpLkdMU2hhZGVyO1xuXG4vKipcbiAqIFRoaXMgc2hhZGVyIGlzIHVzZWQgdG8gZHJhdyBzaW1wbGUgcHJpbWl0aXZlIHNoYXBlcyBmb3Ige0BsaW5rIFBJWEkuR3JhcGhpY3N9LlxuICpcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqIEBleHRlbmRzIFBJWEkuU2hhZGVyXG4gKiBAcGFyYW0gc2hhZGVyTWFuYWdlciB7U2hhZGVyTWFuYWdlcn0gVGhlIHdlYmdsIHNoYWRlciBtYW5hZ2VyIHRoaXMgc2hhZGVyIHdvcmtzIGZvci5cbiAqL1xuZnVuY3Rpb24gUHJpbWl0aXZlU2hhZGVyKGdsKVxue1xuICAgIFNoYWRlci5jYWxsKHRoaXMsXG4gICAgICAgIGdsLFxuICAgICAgICAvLyB2ZXJ0ZXggc2hhZGVyXG4gICAgICAgIFtcbiAgICAgICAgICAgICdhdHRyaWJ1dGUgdmVjMiBhVmVydGV4UG9zaXRpb247JyxcbiAgICAgICAgICAgICdhdHRyaWJ1dGUgdmVjNCBhQ29sb3I7JyxcblxuICAgICAgICAgICAgJ3VuaWZvcm0gbWF0MyB0cmFuc2xhdGlvbk1hdHJpeDsnLFxuICAgICAgICAgICAgJ3VuaWZvcm0gbWF0MyBwcm9qZWN0aW9uTWF0cml4OycsXG5cbiAgICAgICAgICAgICd1bmlmb3JtIGZsb2F0IGFscGhhOycsXG4gICAgICAgICAgICAndW5pZm9ybSBmbG9hdCBmbGlwWTsnLFxuICAgICAgICAgICAgJ3VuaWZvcm0gdmVjMyB0aW50OycsXG5cbiAgICAgICAgICAgICd2YXJ5aW5nIHZlYzQgdkNvbG9yOycsXG5cbiAgICAgICAgICAgICd2b2lkIG1haW4odm9pZCl7JyxcbiAgICAgICAgICAgICcgICBnbF9Qb3NpdGlvbiA9IHZlYzQoKHByb2plY3Rpb25NYXRyaXggKiB0cmFuc2xhdGlvbk1hdHJpeCAqIHZlYzMoYVZlcnRleFBvc2l0aW9uLCAxLjApKS54eSwgMC4wLCAxLjApOycsXG4gICAgICAgICAgICAnICAgdkNvbG9yID0gYUNvbG9yICogdmVjNCh0aW50ICogYWxwaGEsIGFscGhhKTsnLFxuICAgICAgICAgICAgJ30nXG4gICAgICAgIF0uam9pbignXFxuJyksXG4gICAgICAgIC8vIGZyYWdtZW50IHNoYWRlclxuICAgICAgICBbXG4gICAgICAgICAgICAncHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7JyxcblxuICAgICAgICAgICAgJ3ZhcnlpbmcgdmVjNCB2Q29sb3I7JyxcblxuICAgICAgICAgICAgJ3ZvaWQgbWFpbih2b2lkKXsnLFxuICAgICAgICAgICAgJyAgIGdsX0ZyYWdDb2xvciA9IHZDb2xvcjsnLFxuICAgICAgICAgICAgJ30nXG4gICAgICAgIF0uam9pbignXFxuJylcbiAgICApO1xufVxuXG5QcmltaXRpdmVTaGFkZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShTaGFkZXIucHJvdG90eXBlKTtcblByaW1pdGl2ZVNoYWRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBQcmltaXRpdmVTaGFkZXI7XG5cbm1vZHVsZS5leHBvcnRzID0gUHJpbWl0aXZlU2hhZGVyO1xuIiwiLyoqXG4gKiBBbiBvYmplY3QgY29udGFpbmluZyBXZWJHTCBzcGVjaWZpYyBwcm9wZXJ0aWVzIHRvIGJlIHVzZWQgYnkgdGhlIFdlYkdMIHJlbmRlcmVyXG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIGdsIHtXZWJHTFJlbmRlcmluZ0NvbnRleHR9IHRoZSBjdXJyZW50IFdlYkdMIGRyYXdpbmcgY29udGV4dFxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gV2ViR0xHcmFwaGljc0RhdGEoZ2wpIHtcblxuICAgIC8qKlxuICAgICAqIFRoZSBjdXJyZW50IFdlYkdMIGRyYXdpbmcgY29udGV4dFxuICAgICAqXG4gICAgICogQG1lbWJlciB7V2ViR0xSZW5kZXJpbmdDb250ZXh0fVxuICAgICAqL1xuICAgIHRoaXMuZ2wgPSBnbDtcblxuICAgIC8vVE9ETyBkb2VzIHRoaXMgbmVlZCB0byBiZSBzcGxpdCBiZWZvcmUgdXBsb2Rpbmc/P1xuICAgIC8qKlxuICAgICAqIEFuIGFycmF5IG9mIGNvbG9yIGNvbXBvbmVudHMgKHIsZyxiKVxuICAgICAqIEBtZW1iZXIge251bWJlcltdfVxuICAgICAqL1xuICAgIHRoaXMuY29sb3IgPSBbMCwwLDBdOyAvLyBjb2xvciBzcGxpdCFcblxuICAgIC8qKlxuICAgICAqIEFuIGFycmF5IG9mIHBvaW50cyB0byBkcmF3XG4gICAgICogQG1lbWJlciB7UElYSS5Qb2ludFtdfVxuICAgICAqL1xuICAgIHRoaXMucG9pbnRzID0gW107XG5cbiAgICAvKipcbiAgICAgKiBUaGUgaW5kaWNlcyBvZiB0aGUgdmVydGljZXNcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJbXX1cbiAgICAgKi9cbiAgICB0aGlzLmluZGljZXMgPSBbXTtcbiAgICAvKipcbiAgICAgKiBUaGUgbWFpbiBidWZmZXJcbiAgICAgKiBAbWVtYmVyIHtXZWJHTEJ1ZmZlcn1cbiAgICAgKi9cbiAgICB0aGlzLmJ1ZmZlciA9IGdsLmNyZWF0ZUJ1ZmZlcigpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGluZGV4IGJ1ZmZlclxuICAgICAqIEBtZW1iZXIge1dlYkdMQnVmZmVyfVxuICAgICAqL1xuICAgIHRoaXMuaW5kZXhCdWZmZXIgPSBnbC5jcmVhdGVCdWZmZXIoKTtcblxuICAgIC8qKlxuICAgICAqIHRvZG8gQGFsdmluXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMubW9kZSA9IDE7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYWxwaGEgb2YgdGhlIGdyYXBoaWNzXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMuYWxwaGEgPSAxO1xuXG4gICAgLyoqXG4gICAgICogV2hldGhlciB0aGlzIGdyYXBoaWNzIGlzIGRpcnR5IG9yIG5vdFxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICovXG4gICAgdGhpcy5kaXJ0eSA9IHRydWU7XG5cbiAgICB0aGlzLmdsUG9pbnRzID0gbnVsbDtcbiAgICB0aGlzLmdsSW5kaWNlcyA9IG51bGw7XG59XG5cbldlYkdMR3JhcGhpY3NEYXRhLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFdlYkdMR3JhcGhpY3NEYXRhO1xubW9kdWxlLmV4cG9ydHMgPSBXZWJHTEdyYXBoaWNzRGF0YTtcblxuLyoqXG4gKiBSZXNldHMgdGhlIHZlcnRpY2VzIGFuZCB0aGUgaW5kaWNlc1xuICovXG5XZWJHTEdyYXBoaWNzRGF0YS5wcm90b3R5cGUucmVzZXQgPSBmdW5jdGlvbiAoKSB7XG4gICAgdGhpcy5wb2ludHMubGVuZ3RoID0gMDtcbiAgICB0aGlzLmluZGljZXMubGVuZ3RoID0gMDtcbn07XG5cbi8qKlxuICogQmluZHMgdGhlIGJ1ZmZlcnMgYW5kIHVwbG9hZHMgdGhlIGRhdGFcbiAqL1xuV2ViR0xHcmFwaGljc0RhdGEucHJvdG90eXBlLnVwbG9hZCA9IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgZ2wgPSB0aGlzLmdsO1xuXG4vLyAgICB0aGlzLmxhc3RJbmRleCA9IGdyYXBoaWNzLmdyYXBoaWNzRGF0YS5sZW5ndGg7XG4gICAgdGhpcy5nbFBvaW50cyA9IG5ldyBGbG9hdDMyQXJyYXkodGhpcy5wb2ludHMpO1xuXG4gICAgZ2wuYmluZEJ1ZmZlcihnbC5BUlJBWV9CVUZGRVIsIHRoaXMuYnVmZmVyKTtcbiAgICBnbC5idWZmZXJEYXRhKGdsLkFSUkFZX0JVRkZFUiwgdGhpcy5nbFBvaW50cywgZ2wuU1RBVElDX0RSQVcpO1xuXG4gICAgdGhpcy5nbEluZGljZXMgPSBuZXcgVWludDE2QXJyYXkodGhpcy5pbmRpY2VzKTtcblxuICAgIGdsLmJpbmRCdWZmZXIoZ2wuRUxFTUVOVF9BUlJBWV9CVUZGRVIsIHRoaXMuaW5kZXhCdWZmZXIpO1xuICAgIGdsLmJ1ZmZlckRhdGEoZ2wuRUxFTUVOVF9BUlJBWV9CVUZGRVIsIHRoaXMuZ2xJbmRpY2VzLCBnbC5TVEFUSUNfRFJBVyk7XG5cbiAgICB0aGlzLmRpcnR5ID0gZmFsc2U7XG59O1xuXG5XZWJHTEdyYXBoaWNzRGF0YS5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uICgpIHtcbiAgICB0aGlzLmNvbG9yID0gbnVsbDtcbiAgICB0aGlzLnBvaW50cyA9IG51bGw7XG4gICAgdGhpcy5pbmRpY2VzID0gbnVsbDtcblxuICAgIHRoaXMuZ2wuZGVsZXRlQnVmZmVyKHRoaXMuYnVmZmVyKTtcbiAgICB0aGlzLmdsLmRlbGV0ZUJ1ZmZlcih0aGlzLmluZGV4QnVmZmVyKTtcbiAgICBcbiAgICB0aGlzLmdsID0gbnVsbDtcblxuICAgIHRoaXMuYnVmZmVyID0gbnVsbDtcbiAgICB0aGlzLmluZGV4QnVmZmVyID0gbnVsbDtcblxuICAgIHRoaXMuZ2xQb2ludHMgPSBudWxsO1xuICAgIHRoaXMuZ2xJbmRpY2VzID0gbnVsbDtcbn07XG4iLCJ2YXIgYnVpbGRMaW5lID0gcmVxdWlyZSgnLi9idWlsZExpbmUnKSxcbiAgICB1dGlscyA9IHJlcXVpcmUoJy4uLy4uL3V0aWxzJyk7XG5cbi8qKlxuICogQnVpbGRzIGEgY2lyY2xlIHRvIGRyYXdcbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIGdyYXBoaWNzRGF0YSB7UElYSS5HcmFwaGljc30gVGhlIGdyYXBoaWNzIG9iamVjdCB0byBkcmF3XG4gKiBAcGFyYW0gd2ViR0xEYXRhIHtvYmplY3R9IGFuIG9iamVjdCBjb250YWluaW5nIGFsbCB0aGUgd2ViR0wtc3BlY2lmaWMgaW5mb3JtYXRpb24gdG8gY3JlYXRlIHRoaXMgc2hhcGVcbiAqL1xudmFyIGJ1aWxkQ2lyY2xlID0gZnVuY3Rpb24gKGdyYXBoaWNzRGF0YSwgd2ViR0xEYXRhKVxue1xuICAgIC8vIG5lZWQgdG8gY29udmVydCBwb2ludHMgdG8gYSBuaWNlIHJlZ3VsYXIgZGF0YVxuICAgIHZhciBjaXJjbGVEYXRhID0gZ3JhcGhpY3NEYXRhLnNoYXBlO1xuICAgIHZhciB4ID0gY2lyY2xlRGF0YS54O1xuICAgIHZhciB5ID0gY2lyY2xlRGF0YS55O1xuICAgIHZhciB3aWR0aDtcbiAgICB2YXIgaGVpZ2h0O1xuXG4gICAgLy8gVE9ETyAtIGJpdCBoYWNreT8/XG4gICAgaWYgKGdyYXBoaWNzRGF0YS50eXBlID09PSBDT05TVC5TSEFQRVMuQ0lSQylcbiAgICB7XG4gICAgICAgIHdpZHRoID0gY2lyY2xlRGF0YS5yYWRpdXM7XG4gICAgICAgIGhlaWdodCA9IGNpcmNsZURhdGEucmFkaXVzO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICB3aWR0aCA9IGNpcmNsZURhdGEud2lkdGg7XG4gICAgICAgIGhlaWdodCA9IGNpcmNsZURhdGEuaGVpZ2h0O1xuICAgIH1cblxuICAgIHZhciB0b3RhbFNlZ3MgPSBNYXRoLmZsb29yKDMwICogTWF0aC5zcXJ0KGNpcmNsZURhdGEucmFkaXVzKSkgfHwgTWF0aC5mbG9vcigxNSAqIE1hdGguc3FydChjaXJjbGVEYXRhLndpZHRoICsgY2lyY2xlRGF0YS5oZWlnaHQpKTtcbiAgICB2YXIgc2VnID0gKE1hdGguUEkgKiAyKSAvIHRvdGFsU2VncyA7XG5cbiAgICB2YXIgaSA9IDA7XG5cbiAgICBpZiAoZ3JhcGhpY3NEYXRhLmZpbGwpXG4gICAge1xuICAgICAgICB2YXIgY29sb3IgPSB1dGlscy5oZXgycmdiKGdyYXBoaWNzRGF0YS5maWxsQ29sb3IpO1xuICAgICAgICB2YXIgYWxwaGEgPSBncmFwaGljc0RhdGEuZmlsbEFscGhhO1xuXG4gICAgICAgIHZhciByID0gY29sb3JbMF0gKiBhbHBoYTtcbiAgICAgICAgdmFyIGcgPSBjb2xvclsxXSAqIGFscGhhO1xuICAgICAgICB2YXIgYiA9IGNvbG9yWzJdICogYWxwaGE7XG5cbiAgICAgICAgdmFyIHZlcnRzID0gd2ViR0xEYXRhLnBvaW50cztcbiAgICAgICAgdmFyIGluZGljZXMgPSB3ZWJHTERhdGEuaW5kaWNlcztcblxuICAgICAgICB2YXIgdmVjUG9zID0gdmVydHMubGVuZ3RoLzY7XG5cbiAgICAgICAgaW5kaWNlcy5wdXNoKHZlY1Bvcyk7XG5cbiAgICAgICAgZm9yIChpID0gMDsgaSA8IHRvdGFsU2VncyArIDEgOyBpKyspXG4gICAgICAgIHtcbiAgICAgICAgICAgIHZlcnRzLnB1c2goeCx5LCByLCBnLCBiLCBhbHBoYSk7XG5cbiAgICAgICAgICAgIHZlcnRzLnB1c2goeCArIE1hdGguc2luKHNlZyAqIGkpICogd2lkdGgsXG4gICAgICAgICAgICAgICAgICAgICAgIHkgKyBNYXRoLmNvcyhzZWcgKiBpKSAqIGhlaWdodCxcbiAgICAgICAgICAgICAgICAgICAgICAgciwgZywgYiwgYWxwaGEpO1xuXG4gICAgICAgICAgICBpbmRpY2VzLnB1c2godmVjUG9zKyssIHZlY1BvcysrKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGluZGljZXMucHVzaCh2ZWNQb3MtMSk7XG4gICAgfVxuXG4gICAgaWYgKGdyYXBoaWNzRGF0YS5saW5lV2lkdGgpXG4gICAge1xuICAgICAgICB2YXIgdGVtcFBvaW50cyA9IGdyYXBoaWNzRGF0YS5wb2ludHM7XG5cbiAgICAgICAgZ3JhcGhpY3NEYXRhLnBvaW50cyA9IFtdO1xuXG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCB0b3RhbFNlZ3MgKyAxOyBpKyspXG4gICAgICAgIHtcbiAgICAgICAgICAgIGdyYXBoaWNzRGF0YS5wb2ludHMucHVzaCh4ICsgTWF0aC5zaW4oc2VnICogaSkgKiB3aWR0aCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB5ICsgTWF0aC5jb3Moc2VnICogaSkgKiBoZWlnaHQpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5idWlsZExpbmUoZ3JhcGhpY3NEYXRhLCB3ZWJHTERhdGEpO1xuXG4gICAgICAgIGdyYXBoaWNzRGF0YS5wb2ludHMgPSB0ZW1wUG9pbnRzO1xuICAgIH1cbn07XG5cblxubW9kdWxlLmV4cG9ydHMgPSBidWlsZENpcmNsZTsiLCJ2YXIgYnVpbGRMaW5lID0gcmVxdWlyZSgnLi9idWlsZExpbmUnKSxcbiAgICB1dGlscyA9IHJlcXVpcmUoJy4uLy4uL3V0aWxzJyk7XG4gICAgXG5cblxuLyoqXG4gKiBCdWlsZHMgYSBjb21wbGV4IHBvbHlnb24gdG8gZHJhd1xuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0gZ3JhcGhpY3NEYXRhIHtQSVhJLkdyYXBoaWNzfSBUaGUgZ3JhcGhpY3Mgb2JqZWN0IGNvbnRhaW5pbmcgYWxsIHRoZSBuZWNlc3NhcnkgcHJvcGVydGllc1xuICogQHBhcmFtIHdlYkdMRGF0YSB7b2JqZWN0fSBhbiBvYmplY3QgY29udGFpbmluZyBhbGwgdGhlIHdlYkdMLXNwZWNpZmljIGluZm9ybWF0aW9uIHRvIGNyZWF0ZSB0aGlzIHNoYXBlXG4gKi9cbnZhciBidWlsZENvbXBsZXhQb2x5ID0gZnVuY3Rpb24gKGdyYXBoaWNzRGF0YSwgd2ViR0xEYXRhKVxue1xuICAgIC8vVE9ETyAtIG5vIG5lZWQgdG8gY29weSB0aGlzIGFzIGl0IGdldHMgdHVybmVkIGludG8gYSBGTG9hdDMyQXJyYXkgYW55d2F5cy4uXG4gICAgdmFyIHBvaW50cyA9IGdyYXBoaWNzRGF0YS5wb2ludHMuc2xpY2UoKTtcblxuICAgIGlmIChwb2ludHMubGVuZ3RoIDwgNilcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBnZXQgZmlyc3QgYW5kIGxhc3QgcG9pbnQuLiBmaWd1cmUgb3V0IHRoZSBtaWRkbGUhXG4gICAgdmFyIGluZGljZXMgPSB3ZWJHTERhdGEuaW5kaWNlcztcbiAgICB3ZWJHTERhdGEucG9pbnRzID0gcG9pbnRzO1xuICAgIHdlYkdMRGF0YS5hbHBoYSA9IGdyYXBoaWNzRGF0YS5maWxsQWxwaGE7XG4gICAgd2ViR0xEYXRhLmNvbG9yID0gdXRpbHMuaGV4MnJnYihncmFwaGljc0RhdGEuZmlsbENvbG9yKTtcblxuICAgIC8vIGNhbGNsYXRlIHRoZSBib3VuZHMuLlxuICAgIHZhciBtaW5YID0gSW5maW5pdHk7XG4gICAgdmFyIG1heFggPSAtSW5maW5pdHk7XG5cbiAgICB2YXIgbWluWSA9IEluZmluaXR5O1xuICAgIHZhciBtYXhZID0gLUluZmluaXR5O1xuXG4gICAgdmFyIHgseTtcblxuICAgIC8vIGdldCBzaXplLi5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHBvaW50cy5sZW5ndGg7IGkrPTIpXG4gICAge1xuICAgICAgICB4ID0gcG9pbnRzW2ldO1xuICAgICAgICB5ID0gcG9pbnRzW2krMV07XG5cbiAgICAgICAgbWluWCA9IHggPCBtaW5YID8geCA6IG1pblg7XG4gICAgICAgIG1heFggPSB4ID4gbWF4WCA/IHggOiBtYXhYO1xuXG4gICAgICAgIG1pblkgPSB5IDwgbWluWSA/IHkgOiBtaW5ZO1xuICAgICAgICBtYXhZID0geSA+IG1heFkgPyB5IDogbWF4WTtcbiAgICB9XG5cbiAgICAvLyBhZGQgYSBxdWFkIHRvIHRoZSBlbmQgY29zIHRoZXJlIGlzIG5vIHBvaW50IG1ha2luZyBhbm90aGVyIGJ1ZmZlciFcbiAgICBwb2ludHMucHVzaChtaW5YLCBtaW5ZLFxuICAgICAgICAgICAgICAgIG1heFgsIG1pblksXG4gICAgICAgICAgICAgICAgbWF4WCwgbWF4WSxcbiAgICAgICAgICAgICAgICBtaW5YLCBtYXhZKTtcblxuICAgIC8vIHB1c2ggYSBxdWFkIG9udG8gdGhlIGVuZC4uXG5cbiAgICAvL1RPRE8gLSB0aGlzIGFpbnQgbmVlZGVkIVxuICAgIHZhciBsZW5ndGggPSBwb2ludHMubGVuZ3RoIC8gMjtcbiAgICBmb3IgKGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspXG4gICAge1xuICAgICAgICBpbmRpY2VzLnB1c2goIGkgKTtcbiAgICB9XG5cbn07XG5cblxuXG5tb2R1bGUuZXhwb3J0cyA9IGJ1aWxkQ29tcGxleFBvbHk7IiwidmFyIG1hdGggPSByZXF1aXJlKCcuLi8uLi9tYXRoJyksXG4gICAgdXRpbHMgPSByZXF1aXJlKCcuLi8uLi91dGlscycpO1xuXG4vKipcbiAqIEJ1aWxkcyBhIGxpbmUgdG8gZHJhd1xuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0gZ3JhcGhpY3NEYXRhIHtQSVhJLkdyYXBoaWNzfSBUaGUgZ3JhcGhpY3Mgb2JqZWN0IGNvbnRhaW5pbmcgYWxsIHRoZSBuZWNlc3NhcnkgcHJvcGVydGllc1xuICogQHBhcmFtIHdlYkdMRGF0YSB7b2JqZWN0fSBhbiBvYmplY3QgY29udGFpbmluZyBhbGwgdGhlIHdlYkdMLXNwZWNpZmljIGluZm9ybWF0aW9uIHRvIGNyZWF0ZSB0aGlzIHNoYXBlXG4gKi9cbnZhciBidWlsZExpbmUgPSBmdW5jdGlvbiAoZ3JhcGhpY3NEYXRhLCB3ZWJHTERhdGEpXG57XG4gICAgLy8gVE9ETyBPUFRJTUlTRSFcbiAgICB2YXIgaSA9IDA7XG4gICAgdmFyIHBvaW50cyA9IGdyYXBoaWNzRGF0YS5wb2ludHM7XG5cbiAgICBpZiAocG9pbnRzLmxlbmd0aCA9PT0gMClcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgLy8gaWYgdGhlIGxpbmUgd2lkdGggaXMgYW4gb2RkIG51bWJlciBhZGQgMC41IHRvIGFsaWduIHRvIGEgd2hvbGUgcGl4ZWxcbiAgICAvLyBjb21tZW50aW5nIHRoaXMgb3V0IGZpeGVzICM3MTEgYW5kICMxNjIwXG4gICAgLy8gaWYgKGdyYXBoaWNzRGF0YS5saW5lV2lkdGglMilcbiAgICAvLyB7XG4gICAgLy8gICAgIGZvciAoaSA9IDA7IGkgPCBwb2ludHMubGVuZ3RoOyBpKyspXG4gICAgLy8gICAgIHtcbiAgICAvLyAgICAgICAgIHBvaW50c1tpXSArPSAwLjU7XG4gICAgLy8gICAgIH1cbiAgICAvLyB9XG5cbiAgICAvLyBnZXQgZmlyc3QgYW5kIGxhc3QgcG9pbnQuLiBmaWd1cmUgb3V0IHRoZSBtaWRkbGUhXG4gICAgdmFyIGZpcnN0UG9pbnQgPSBuZXcgbWF0aC5Qb2ludChwb2ludHNbMF0sIHBvaW50c1sxXSk7XG4gICAgdmFyIGxhc3RQb2ludCA9IG5ldyBtYXRoLlBvaW50KHBvaW50c1twb2ludHMubGVuZ3RoIC0gMl0sIHBvaW50c1twb2ludHMubGVuZ3RoIC0gMV0pO1xuXG4gICAgLy8gaWYgdGhlIGZpcnN0IHBvaW50IGlzIHRoZSBsYXN0IHBvaW50IC0gZ29ubmEgaGF2ZSBpc3N1ZXMgOilcbiAgICBpZiAoZmlyc3RQb2ludC54ID09PSBsYXN0UG9pbnQueCAmJiBmaXJzdFBvaW50LnkgPT09IGxhc3RQb2ludC55KVxuICAgIHtcbiAgICAgICAgLy8gbmVlZCB0byBjbG9uZSBhcyB3ZSBhcmUgZ29pbmcgdG8gc2xpZ2h0bHkgbW9kaWZ5IHRoZSBzaGFwZS4uXG4gICAgICAgIHBvaW50cyA9IHBvaW50cy5zbGljZSgpO1xuXG4gICAgICAgIHBvaW50cy5wb3AoKTtcbiAgICAgICAgcG9pbnRzLnBvcCgpO1xuXG4gICAgICAgIGxhc3RQb2ludCA9IG5ldyBtYXRoLlBvaW50KHBvaW50c1twb2ludHMubGVuZ3RoIC0gMl0sIHBvaW50c1twb2ludHMubGVuZ3RoIC0gMV0pO1xuXG4gICAgICAgIHZhciBtaWRQb2ludFggPSBsYXN0UG9pbnQueCArIChmaXJzdFBvaW50LnggLSBsYXN0UG9pbnQueCkgKjAuNTtcbiAgICAgICAgdmFyIG1pZFBvaW50WSA9IGxhc3RQb2ludC55ICsgKGZpcnN0UG9pbnQueSAtIGxhc3RQb2ludC55KSAqMC41O1xuXG4gICAgICAgIHBvaW50cy51bnNoaWZ0KG1pZFBvaW50WCwgbWlkUG9pbnRZKTtcbiAgICAgICAgcG9pbnRzLnB1c2gobWlkUG9pbnRYLCBtaWRQb2ludFkpO1xuICAgIH1cblxuICAgIHZhciB2ZXJ0cyA9IHdlYkdMRGF0YS5wb2ludHM7XG4gICAgdmFyIGluZGljZXMgPSB3ZWJHTERhdGEuaW5kaWNlcztcbiAgICB2YXIgbGVuZ3RoID0gcG9pbnRzLmxlbmd0aCAvIDI7XG4gICAgdmFyIGluZGV4Q291bnQgPSBwb2ludHMubGVuZ3RoO1xuICAgIHZhciBpbmRleFN0YXJ0ID0gdmVydHMubGVuZ3RoLzY7XG5cbiAgICAvLyBEUkFXIHRoZSBMaW5lXG4gICAgdmFyIHdpZHRoID0gZ3JhcGhpY3NEYXRhLmxpbmVXaWR0aCAvIDI7XG5cbiAgICAvLyBzb3J0IGNvbG9yXG4gICAgdmFyIGNvbG9yID0gdXRpbHMuaGV4MnJnYihncmFwaGljc0RhdGEubGluZUNvbG9yKTtcbiAgICB2YXIgYWxwaGEgPSBncmFwaGljc0RhdGEubGluZUFscGhhO1xuICAgIHZhciByID0gY29sb3JbMF0gKiBhbHBoYTtcbiAgICB2YXIgZyA9IGNvbG9yWzFdICogYWxwaGE7XG4gICAgdmFyIGIgPSBjb2xvclsyXSAqIGFscGhhO1xuXG4gICAgdmFyIHB4LCBweSwgcDF4LCBwMXksIHAyeCwgcDJ5LCBwM3gsIHAzeTtcbiAgICB2YXIgcGVycHgsIHBlcnB5LCBwZXJwMngsIHBlcnAyeSwgcGVycDN4LCBwZXJwM3k7XG4gICAgdmFyIGExLCBiMSwgYzEsIGEyLCBiMiwgYzI7XG4gICAgdmFyIGRlbm9tLCBwZGlzdCwgZGlzdDtcblxuICAgIHAxeCA9IHBvaW50c1swXTtcbiAgICBwMXkgPSBwb2ludHNbMV07XG5cbiAgICBwMnggPSBwb2ludHNbMl07XG4gICAgcDJ5ID0gcG9pbnRzWzNdO1xuXG4gICAgcGVycHggPSAtKHAxeSAtIHAyeSk7XG4gICAgcGVycHkgPSAgcDF4IC0gcDJ4O1xuXG4gICAgZGlzdCA9IE1hdGguc3FydChwZXJweCpwZXJweCArIHBlcnB5KnBlcnB5KTtcblxuICAgIHBlcnB4IC89IGRpc3Q7XG4gICAgcGVycHkgLz0gZGlzdDtcbiAgICBwZXJweCAqPSB3aWR0aDtcbiAgICBwZXJweSAqPSB3aWR0aDtcblxuICAgIC8vIHN0YXJ0XG4gICAgdmVydHMucHVzaChwMXggLSBwZXJweCAsIHAxeSAtIHBlcnB5LFxuICAgICAgICAgICAgICAgIHIsIGcsIGIsIGFscGhhKTtcblxuICAgIHZlcnRzLnB1c2gocDF4ICsgcGVycHggLCBwMXkgKyBwZXJweSxcbiAgICAgICAgICAgICAgICByLCBnLCBiLCBhbHBoYSk7XG5cbiAgICBmb3IgKGkgPSAxOyBpIDwgbGVuZ3RoLTE7IGkrKylcbiAgICB7XG4gICAgICAgIHAxeCA9IHBvaW50c1soaS0xKSoyXTtcbiAgICAgICAgcDF5ID0gcG9pbnRzWyhpLTEpKjIgKyAxXTtcblxuICAgICAgICBwMnggPSBwb2ludHNbKGkpKjJdO1xuICAgICAgICBwMnkgPSBwb2ludHNbKGkpKjIgKyAxXTtcblxuICAgICAgICBwM3ggPSBwb2ludHNbKGkrMSkqMl07XG4gICAgICAgIHAzeSA9IHBvaW50c1soaSsxKSoyICsgMV07XG5cbiAgICAgICAgcGVycHggPSAtKHAxeSAtIHAyeSk7XG4gICAgICAgIHBlcnB5ID0gcDF4IC0gcDJ4O1xuXG4gICAgICAgIGRpc3QgPSBNYXRoLnNxcnQocGVycHgqcGVycHggKyBwZXJweSpwZXJweSk7XG4gICAgICAgIHBlcnB4IC89IGRpc3Q7XG4gICAgICAgIHBlcnB5IC89IGRpc3Q7XG4gICAgICAgIHBlcnB4ICo9IHdpZHRoO1xuICAgICAgICBwZXJweSAqPSB3aWR0aDtcblxuICAgICAgICBwZXJwMnggPSAtKHAyeSAtIHAzeSk7XG4gICAgICAgIHBlcnAyeSA9IHAyeCAtIHAzeDtcblxuICAgICAgICBkaXN0ID0gTWF0aC5zcXJ0KHBlcnAyeCpwZXJwMnggKyBwZXJwMnkqcGVycDJ5KTtcbiAgICAgICAgcGVycDJ4IC89IGRpc3Q7XG4gICAgICAgIHBlcnAyeSAvPSBkaXN0O1xuICAgICAgICBwZXJwMnggKj0gd2lkdGg7XG4gICAgICAgIHBlcnAyeSAqPSB3aWR0aDtcblxuICAgICAgICBhMSA9ICgtcGVycHkgKyBwMXkpIC0gKC1wZXJweSArIHAyeSk7XG4gICAgICAgIGIxID0gKC1wZXJweCArIHAyeCkgLSAoLXBlcnB4ICsgcDF4KTtcbiAgICAgICAgYzEgPSAoLXBlcnB4ICsgcDF4KSAqICgtcGVycHkgKyBwMnkpIC0gKC1wZXJweCArIHAyeCkgKiAoLXBlcnB5ICsgcDF5KTtcbiAgICAgICAgYTIgPSAoLXBlcnAyeSArIHAzeSkgLSAoLXBlcnAyeSArIHAyeSk7XG4gICAgICAgIGIyID0gKC1wZXJwMnggKyBwMngpIC0gKC1wZXJwMnggKyBwM3gpO1xuICAgICAgICBjMiA9ICgtcGVycDJ4ICsgcDN4KSAqICgtcGVycDJ5ICsgcDJ5KSAtICgtcGVycDJ4ICsgcDJ4KSAqICgtcGVycDJ5ICsgcDN5KTtcblxuICAgICAgICBkZW5vbSA9IGExKmIyIC0gYTIqYjE7XG5cbiAgICAgICAgaWYgKE1hdGguYWJzKGRlbm9tKSA8IDAuMSApXG4gICAgICAgIHtcblxuICAgICAgICAgICAgZGVub20rPTEwLjE7XG4gICAgICAgICAgICB2ZXJ0cy5wdXNoKHAyeCAtIHBlcnB4ICwgcDJ5IC0gcGVycHksXG4gICAgICAgICAgICAgICAgciwgZywgYiwgYWxwaGEpO1xuXG4gICAgICAgICAgICB2ZXJ0cy5wdXNoKHAyeCArIHBlcnB4ICwgcDJ5ICsgcGVycHksXG4gICAgICAgICAgICAgICAgciwgZywgYiwgYWxwaGEpO1xuXG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHB4ID0gKGIxKmMyIC0gYjIqYzEpL2Rlbm9tO1xuICAgICAgICBweSA9IChhMipjMSAtIGExKmMyKS9kZW5vbTtcblxuXG4gICAgICAgIHBkaXN0ID0gKHB4IC1wMngpICogKHB4IC1wMngpICsgKHB5IC1wMnkpICogKHB5IC1wMnkpO1xuXG5cbiAgICAgICAgaWYgKHBkaXN0ID4gMTQwICogMTQwKVxuICAgICAgICB7XG4gICAgICAgICAgICBwZXJwM3ggPSBwZXJweCAtIHBlcnAyeDtcbiAgICAgICAgICAgIHBlcnAzeSA9IHBlcnB5IC0gcGVycDJ5O1xuXG4gICAgICAgICAgICBkaXN0ID0gTWF0aC5zcXJ0KHBlcnAzeCpwZXJwM3ggKyBwZXJwM3kqcGVycDN5KTtcbiAgICAgICAgICAgIHBlcnAzeCAvPSBkaXN0O1xuICAgICAgICAgICAgcGVycDN5IC89IGRpc3Q7XG4gICAgICAgICAgICBwZXJwM3ggKj0gd2lkdGg7XG4gICAgICAgICAgICBwZXJwM3kgKj0gd2lkdGg7XG5cbiAgICAgICAgICAgIHZlcnRzLnB1c2gocDJ4IC0gcGVycDN4LCBwMnkgLXBlcnAzeSk7XG4gICAgICAgICAgICB2ZXJ0cy5wdXNoKHIsIGcsIGIsIGFscGhhKTtcblxuICAgICAgICAgICAgdmVydHMucHVzaChwMnggKyBwZXJwM3gsIHAyeSArcGVycDN5KTtcbiAgICAgICAgICAgIHZlcnRzLnB1c2gociwgZywgYiwgYWxwaGEpO1xuXG4gICAgICAgICAgICB2ZXJ0cy5wdXNoKHAyeCAtIHBlcnAzeCwgcDJ5IC1wZXJwM3kpO1xuICAgICAgICAgICAgdmVydHMucHVzaChyLCBnLCBiLCBhbHBoYSk7XG5cbiAgICAgICAgICAgIGluZGV4Q291bnQrKztcbiAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgIHtcblxuICAgICAgICAgICAgdmVydHMucHVzaChweCAsIHB5KTtcbiAgICAgICAgICAgIHZlcnRzLnB1c2gociwgZywgYiwgYWxwaGEpO1xuXG4gICAgICAgICAgICB2ZXJ0cy5wdXNoKHAyeCAtIChweC1wMngpLCBwMnkgLSAocHkgLSBwMnkpKTtcbiAgICAgICAgICAgIHZlcnRzLnB1c2gociwgZywgYiwgYWxwaGEpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcDF4ID0gcG9pbnRzWyhsZW5ndGgtMikqMl07XG4gICAgcDF5ID0gcG9pbnRzWyhsZW5ndGgtMikqMiArIDFdO1xuXG4gICAgcDJ4ID0gcG9pbnRzWyhsZW5ndGgtMSkqMl07XG4gICAgcDJ5ID0gcG9pbnRzWyhsZW5ndGgtMSkqMiArIDFdO1xuXG4gICAgcGVycHggPSAtKHAxeSAtIHAyeSk7XG4gICAgcGVycHkgPSBwMXggLSBwMng7XG5cbiAgICBkaXN0ID0gTWF0aC5zcXJ0KHBlcnB4KnBlcnB4ICsgcGVycHkqcGVycHkpO1xuICAgIHBlcnB4IC89IGRpc3Q7XG4gICAgcGVycHkgLz0gZGlzdDtcbiAgICBwZXJweCAqPSB3aWR0aDtcbiAgICBwZXJweSAqPSB3aWR0aDtcblxuICAgIHZlcnRzLnB1c2gocDJ4IC0gcGVycHggLCBwMnkgLSBwZXJweSk7XG4gICAgdmVydHMucHVzaChyLCBnLCBiLCBhbHBoYSk7XG5cbiAgICB2ZXJ0cy5wdXNoKHAyeCArIHBlcnB4ICwgcDJ5ICsgcGVycHkpO1xuICAgIHZlcnRzLnB1c2gociwgZywgYiwgYWxwaGEpO1xuXG4gICAgaW5kaWNlcy5wdXNoKGluZGV4U3RhcnQpO1xuXG4gICAgZm9yIChpID0gMDsgaSA8IGluZGV4Q291bnQ7IGkrKylcbiAgICB7XG4gICAgICAgIGluZGljZXMucHVzaChpbmRleFN0YXJ0KyspO1xuICAgIH1cblxuICAgIGluZGljZXMucHVzaChpbmRleFN0YXJ0LTEpO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBidWlsZExpbmU7IiwidmFyIHV0aWxzID0gcmVxdWlyZSgnLi4vLi4vdXRpbHMnKTtcblxuLyoqXG4gKiBCdWlsZHMgYSBwb2x5Z29uIHRvIGRyYXdcbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIGdyYXBoaWNzRGF0YSB7UElYSS5XZWJHTEdyYXBoaWNzRGF0YX0gVGhlIGdyYXBoaWNzIG9iamVjdCBjb250YWluaW5nIGFsbCB0aGUgbmVjZXNzYXJ5IHByb3BlcnRpZXNcbiAqIEBwYXJhbSB3ZWJHTERhdGEge29iamVjdH0gYW4gb2JqZWN0IGNvbnRhaW5pbmcgYWxsIHRoZSB3ZWJHTC1zcGVjaWZpYyBpbmZvcm1hdGlvbiB0byBjcmVhdGUgdGhpcyBzaGFwZVxuICovXG52YXIgYnVpbGRQb2x5ID0gZnVuY3Rpb24gKGdyYXBoaWNzRGF0YSwgd2ViR0xEYXRhKVxue1xuICAgIHZhciBwb2ludHMgPSBncmFwaGljc0RhdGEucG9pbnRzO1xuXG4gICAgaWYgKHBvaW50cy5sZW5ndGggPCA2KVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIGdldCBmaXJzdCBhbmQgbGFzdCBwb2ludC4uIGZpZ3VyZSBvdXQgdGhlIG1pZGRsZSFcbiAgICB2YXIgdmVydHMgPSB3ZWJHTERhdGEucG9pbnRzO1xuICAgIHZhciBpbmRpY2VzID0gd2ViR0xEYXRhLmluZGljZXM7XG5cbiAgICB2YXIgbGVuZ3RoID0gcG9pbnRzLmxlbmd0aCAvIDI7XG5cbiAgICAvLyBzb3J0IGNvbG9yXG4gICAgdmFyIGNvbG9yID0gdXRpbHMuaGV4MnJnYihncmFwaGljc0RhdGEuZmlsbENvbG9yKTtcbiAgICB2YXIgYWxwaGEgPSBncmFwaGljc0RhdGEuZmlsbEFscGhhO1xuICAgIHZhciByID0gY29sb3JbMF0gKiBhbHBoYTtcbiAgICB2YXIgZyA9IGNvbG9yWzFdICogYWxwaGE7XG4gICAgdmFyIGIgPSBjb2xvclsyXSAqIGFscGhhO1xuXG4gICAgdmFyIHRyaWFuZ2xlcyA9IGVhcmN1dChwb2ludHMsIG51bGwsIDIpO1xuXG4gICAgaWYgKCF0cmlhbmdsZXMpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHZhciB2ZXJ0UG9zID0gdmVydHMubGVuZ3RoIC8gNjtcblxuICAgIHZhciBpID0gMDtcblxuICAgIGZvciAoaSA9IDA7IGkgPCB0cmlhbmdsZXMubGVuZ3RoOyBpKz0zKVxuICAgIHtcbiAgICAgICAgaW5kaWNlcy5wdXNoKHRyaWFuZ2xlc1tpXSArIHZlcnRQb3MpO1xuICAgICAgICBpbmRpY2VzLnB1c2godHJpYW5nbGVzW2ldICsgdmVydFBvcyk7XG4gICAgICAgIGluZGljZXMucHVzaCh0cmlhbmdsZXNbaSsxXSArIHZlcnRQb3MpO1xuICAgICAgICBpbmRpY2VzLnB1c2godHJpYW5nbGVzW2krMl0gK3ZlcnRQb3MpO1xuICAgICAgICBpbmRpY2VzLnB1c2godHJpYW5nbGVzW2krMl0gKyB2ZXJ0UG9zKTtcbiAgICB9XG5cbiAgICBmb3IgKGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspXG4gICAge1xuICAgICAgICB2ZXJ0cy5wdXNoKHBvaW50c1tpICogMl0sIHBvaW50c1tpICogMiArIDFdLFxuICAgICAgICAgICAgICAgICAgIHIsIGcsIGIsIGFscGhhKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdHJ1ZTtcbn07XG5cblxubW9kdWxlLmV4cG9ydHMgPSBidWlsZFBvbHk7XG4iLCJ2YXIgYnVpbGRMaW5lID0gcmVxdWlyZSgnLi9idWlsZExpbmUnKSxcbiAgICB1dGlscyA9IHJlcXVpcmUoJy4uLy4uL3V0aWxzJyk7XG5cbi8qKlxuICogQnVpbGRzIGEgcmVjdGFuZ2xlIHRvIGRyYXdcbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIGdyYXBoaWNzRGF0YSB7UElYSS5HcmFwaGljc30gVGhlIGdyYXBoaWNzIG9iamVjdCBjb250YWluaW5nIGFsbCB0aGUgbmVjZXNzYXJ5IHByb3BlcnRpZXNcbiAqIEBwYXJhbSB3ZWJHTERhdGEge29iamVjdH0gYW4gb2JqZWN0IGNvbnRhaW5pbmcgYWxsIHRoZSB3ZWJHTC1zcGVjaWZpYyBpbmZvcm1hdGlvbiB0byBjcmVhdGUgdGhpcyBzaGFwZVxuICovXG52YXIgYnVpbGRSZWN0YW5nbGUgPSBmdW5jdGlvbiAoZ3JhcGhpY3NEYXRhLCB3ZWJHTERhdGEpXG57XG4gICAgLy8gLS0tIC8vXG4gICAgLy8gbmVlZCB0byBjb252ZXJ0IHBvaW50cyB0byBhIG5pY2UgcmVndWxhciBkYXRhXG4gICAgLy9cbiAgICB2YXIgcmVjdERhdGEgPSBncmFwaGljc0RhdGEuc2hhcGU7XG4gICAgdmFyIHggPSByZWN0RGF0YS54O1xuICAgIHZhciB5ID0gcmVjdERhdGEueTtcbiAgICB2YXIgd2lkdGggPSByZWN0RGF0YS53aWR0aDtcbiAgICB2YXIgaGVpZ2h0ID0gcmVjdERhdGEuaGVpZ2h0O1xuXG4gICAgaWYgKGdyYXBoaWNzRGF0YS5maWxsKVxuICAgIHtcbiAgICAgICAgdmFyIGNvbG9yID0gdXRpbHMuaGV4MnJnYihncmFwaGljc0RhdGEuZmlsbENvbG9yKTtcbiAgICAgICAgdmFyIGFscGhhID0gZ3JhcGhpY3NEYXRhLmZpbGxBbHBoYTtcblxuICAgICAgICB2YXIgciA9IGNvbG9yWzBdICogYWxwaGE7XG4gICAgICAgIHZhciBnID0gY29sb3JbMV0gKiBhbHBoYTtcbiAgICAgICAgdmFyIGIgPSBjb2xvclsyXSAqIGFscGhhO1xuXG4gICAgICAgIHZhciB2ZXJ0cyA9IHdlYkdMRGF0YS5wb2ludHM7XG4gICAgICAgIHZhciBpbmRpY2VzID0gd2ViR0xEYXRhLmluZGljZXM7XG5cbiAgICAgICAgdmFyIHZlcnRQb3MgPSB2ZXJ0cy5sZW5ndGgvNjtcblxuICAgICAgICAvLyBzdGFydFxuICAgICAgICB2ZXJ0cy5wdXNoKHgsIHkpO1xuICAgICAgICB2ZXJ0cy5wdXNoKHIsIGcsIGIsIGFscGhhKTtcblxuICAgICAgICB2ZXJ0cy5wdXNoKHggKyB3aWR0aCwgeSk7XG4gICAgICAgIHZlcnRzLnB1c2gociwgZywgYiwgYWxwaGEpO1xuXG4gICAgICAgIHZlcnRzLnB1c2goeCAsIHkgKyBoZWlnaHQpO1xuICAgICAgICB2ZXJ0cy5wdXNoKHIsIGcsIGIsIGFscGhhKTtcblxuICAgICAgICB2ZXJ0cy5wdXNoKHggKyB3aWR0aCwgeSArIGhlaWdodCk7XG4gICAgICAgIHZlcnRzLnB1c2gociwgZywgYiwgYWxwaGEpO1xuXG4gICAgICAgIC8vIGluc2VydCAyIGRlYWQgdHJpYW5nbGVzLi5cbiAgICAgICAgaW5kaWNlcy5wdXNoKHZlcnRQb3MsIHZlcnRQb3MsIHZlcnRQb3MrMSwgdmVydFBvcysyLCB2ZXJ0UG9zKzMsIHZlcnRQb3MrMyk7XG4gICAgfVxuXG4gICAgaWYgKGdyYXBoaWNzRGF0YS5saW5lV2lkdGgpXG4gICAge1xuICAgICAgICB2YXIgdGVtcFBvaW50cyA9IGdyYXBoaWNzRGF0YS5wb2ludHM7XG5cbiAgICAgICAgZ3JhcGhpY3NEYXRhLnBvaW50cyA9IFt4LCB5LFxuICAgICAgICAgICAgICAgICAgeCArIHdpZHRoLCB5LFxuICAgICAgICAgICAgICAgICAgeCArIHdpZHRoLCB5ICsgaGVpZ2h0LFxuICAgICAgICAgICAgICAgICAgeCwgeSArIGhlaWdodCxcbiAgICAgICAgICAgICAgICAgIHgsIHldO1xuXG5cbiAgICAgICAgYnVpbGRMaW5lKGdyYXBoaWNzRGF0YSwgd2ViR0xEYXRhKTtcblxuICAgICAgICBncmFwaGljc0RhdGEucG9pbnRzID0gdGVtcFBvaW50cztcbiAgICB9XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGJ1aWxkUmVjdGFuZ2xlOyIsInZhciBidWlsZExpbmUgPSByZXF1aXJlKCcuL2J1aWxkTGluZScpLFxuICAgIHV0aWxzID0gcmVxdWlyZSgnLi4vLi4vdXRpbHMnKTtcbiAgICBcbi8qKlxuICogQnVpbGRzIGEgcm91bmRlZCByZWN0YW5nbGUgdG8gZHJhd1xuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0gZ3JhcGhpY3NEYXRhIHtQSVhJLkdyYXBoaWNzfSBUaGUgZ3JhcGhpY3Mgb2JqZWN0IGNvbnRhaW5pbmcgYWxsIHRoZSBuZWNlc3NhcnkgcHJvcGVydGllc1xuICogQHBhcmFtIHdlYkdMRGF0YSB7b2JqZWN0fSBhbiBvYmplY3QgY29udGFpbmluZyBhbGwgdGhlIHdlYkdMLXNwZWNpZmljIGluZm9ybWF0aW9uIHRvIGNyZWF0ZSB0aGlzIHNoYXBlXG4gKi9cbmJ1aWxkUm91bmRlZFJlY3RhbmdsZSA9IGZ1bmN0aW9uIChncmFwaGljc0RhdGEsIHdlYkdMRGF0YSlcbntcbiAgICB2YXIgcnJlY3REYXRhID0gZ3JhcGhpY3NEYXRhLnNoYXBlO1xuICAgIHZhciB4ID0gcnJlY3REYXRhLng7XG4gICAgdmFyIHkgPSBycmVjdERhdGEueTtcbiAgICB2YXIgd2lkdGggPSBycmVjdERhdGEud2lkdGg7XG4gICAgdmFyIGhlaWdodCA9IHJyZWN0RGF0YS5oZWlnaHQ7XG5cbiAgICB2YXIgcmFkaXVzID0gcnJlY3REYXRhLnJhZGl1cztcblxuICAgIHZhciByZWNQb2ludHMgPSBbXTtcbiAgICByZWNQb2ludHMucHVzaCh4LCB5ICsgcmFkaXVzKTtcbiAgICB0aGlzLnF1YWRyYXRpY0JlemllckN1cnZlKHgsIHkgKyBoZWlnaHQgLSByYWRpdXMsIHgsIHkgKyBoZWlnaHQsIHggKyByYWRpdXMsIHkgKyBoZWlnaHQsIHJlY1BvaW50cyk7XG4gICAgdGhpcy5xdWFkcmF0aWNCZXppZXJDdXJ2ZSh4ICsgd2lkdGggLSByYWRpdXMsIHkgKyBoZWlnaHQsIHggKyB3aWR0aCwgeSArIGhlaWdodCwgeCArIHdpZHRoLCB5ICsgaGVpZ2h0IC0gcmFkaXVzLCByZWNQb2ludHMpO1xuICAgIHRoaXMucXVhZHJhdGljQmV6aWVyQ3VydmUoeCArIHdpZHRoLCB5ICsgcmFkaXVzLCB4ICsgd2lkdGgsIHksIHggKyB3aWR0aCAtIHJhZGl1cywgeSwgcmVjUG9pbnRzKTtcbiAgICB0aGlzLnF1YWRyYXRpY0JlemllckN1cnZlKHggKyByYWRpdXMsIHksIHgsIHksIHgsIHkgKyByYWRpdXMgKyAwLjAwMDAwMDAwMDEsIHJlY1BvaW50cyk7XG5cbiAgICAvLyB0aGlzIHRpbnkgbnVtYmVyIGRlYWxzIHdpdGggdGhlIGlzc3VlIHRoYXQgb2NjdXJzIHdoZW4gcG9pbnRzIG92ZXJsYXAgYW5kIGVhcmN1dCBmYWlscyB0byB0cmlhbmd1bGF0ZSB0aGUgaXRlbS5cbiAgICAvLyBUT0RPIC0gZml4IHRoaXMgcHJvcGVybHksIHRoaXMgaXMgbm90IHZlcnkgZWxlZ2FudC4uIGJ1dCBpdCB3b3JrcyBmb3Igbm93LlxuXG4gICAgaWYgKGdyYXBoaWNzRGF0YS5maWxsKVxuICAgIHtcbiAgICAgICAgdmFyIGNvbG9yID0gdXRpbHMuaGV4MnJnYihncmFwaGljc0RhdGEuZmlsbENvbG9yKTtcbiAgICAgICAgdmFyIGFscGhhID0gZ3JhcGhpY3NEYXRhLmZpbGxBbHBoYTtcblxuICAgICAgICB2YXIgciA9IGNvbG9yWzBdICogYWxwaGE7XG4gICAgICAgIHZhciBnID0gY29sb3JbMV0gKiBhbHBoYTtcbiAgICAgICAgdmFyIGIgPSBjb2xvclsyXSAqIGFscGhhO1xuXG4gICAgICAgIHZhciB2ZXJ0cyA9IHdlYkdMRGF0YS5wb2ludHM7XG4gICAgICAgIHZhciBpbmRpY2VzID0gd2ViR0xEYXRhLmluZGljZXM7XG5cbiAgICAgICAgdmFyIHZlY1BvcyA9IHZlcnRzLmxlbmd0aC82O1xuXG4gICAgICAgIHZhciB0cmlhbmdsZXMgPSBlYXJjdXQocmVjUG9pbnRzLCBudWxsLCAyKTtcblxuICAgICAgICB2YXIgaSA9IDA7XG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCB0cmlhbmdsZXMubGVuZ3RoOyBpKz0zKVxuICAgICAgICB7XG4gICAgICAgICAgICBpbmRpY2VzLnB1c2godHJpYW5nbGVzW2ldICsgdmVjUG9zKTtcbiAgICAgICAgICAgIGluZGljZXMucHVzaCh0cmlhbmdsZXNbaV0gKyB2ZWNQb3MpO1xuICAgICAgICAgICAgaW5kaWNlcy5wdXNoKHRyaWFuZ2xlc1tpKzFdICsgdmVjUG9zKTtcbiAgICAgICAgICAgIGluZGljZXMucHVzaCh0cmlhbmdsZXNbaSsyXSArIHZlY1Bvcyk7XG4gICAgICAgICAgICBpbmRpY2VzLnB1c2godHJpYW5nbGVzW2krMl0gKyB2ZWNQb3MpO1xuICAgICAgICB9XG5cbiAgICAgICAgZm9yIChpID0gMDsgaSA8IHJlY1BvaW50cy5sZW5ndGg7IGkrKylcbiAgICAgICAge1xuICAgICAgICAgICAgdmVydHMucHVzaChyZWNQb2ludHNbaV0sIHJlY1BvaW50c1srK2ldLCByLCBnLCBiLCBhbHBoYSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoZ3JhcGhpY3NEYXRhLmxpbmVXaWR0aClcbiAgICB7XG4gICAgICAgIHZhciB0ZW1wUG9pbnRzID0gZ3JhcGhpY3NEYXRhLnBvaW50cztcblxuICAgICAgICBncmFwaGljc0RhdGEucG9pbnRzID0gcmVjUG9pbnRzO1xuXG4gICAgICAgIHRoaXMuYnVpbGRMaW5lKGdyYXBoaWNzRGF0YSwgd2ViR0xEYXRhKTtcblxuICAgICAgICBncmFwaGljc0RhdGEucG9pbnRzID0gdGVtcFBvaW50cztcbiAgICB9XG59O1xuXG4vKipcbiAqIENhbGN1bGF0ZSB0aGUgcG9pbnRzIGZvciBhIHF1YWRyYXRpYyBiZXppZXIgY3VydmUuIChoZWxwZXIgZnVuY3Rpb24uLilcbiAqIEJhc2VkIG9uOiBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy83ODUwOTcvaG93LWRvLWktaW1wbGVtZW50LWEtYmV6aWVyLWN1cnZlLWluLWNcbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIGZyb21YIHtudW1iZXJ9IE9yaWdpbiBwb2ludCB4XG4gKiBAcGFyYW0gZnJvbVkge251bWJlcn0gT3JpZ2luIHBvaW50IHhcbiAqIEBwYXJhbSBjcFgge251bWJlcn0gQ29udHJvbCBwb2ludCB4XG4gKiBAcGFyYW0gY3BZIHtudW1iZXJ9IENvbnRyb2wgcG9pbnQgeVxuICogQHBhcmFtIHRvWCB7bnVtYmVyfSBEZXN0aW5hdGlvbiBwb2ludCB4XG4gKiBAcGFyYW0gdG9ZIHtudW1iZXJ9IERlc3RpbmF0aW9uIHBvaW50IHlcbiAqIEBwYXJhbSBbb3V0XSB7bnVtYmVyW119IFRoZSBvdXRwdXQgYXJyYXkgdG8gYWRkIHBvaW50cyBpbnRvLiBJZiBub3QgcGFzc2VkLCBhIG5ldyBhcnJheSBpcyBjcmVhdGVkLlxuICogQHJldHVybiB7bnVtYmVyW119IGFuIGFycmF5IG9mIHBvaW50c1xuICovXG5xdWFkcmF0aWNCZXppZXJDdXJ2ZSA9IGZ1bmN0aW9uIChmcm9tWCwgZnJvbVksIGNwWCwgY3BZLCB0b1gsIHRvWSwgb3V0KVxue1xuICAgIHZhciB4YSxcbiAgICAgICAgeWEsXG4gICAgICAgIHhiLFxuICAgICAgICB5YixcbiAgICAgICAgeCxcbiAgICAgICAgeSxcbiAgICAgICAgbiA9IDIwLFxuICAgICAgICBwb2ludHMgPSBvdXQgfHwgW107XG5cbiAgICBmdW5jdGlvbiBnZXRQdChuMSAsIG4yLCBwZXJjKSB7XG4gICAgICAgIHZhciBkaWZmID0gbjIgLSBuMTtcblxuICAgICAgICByZXR1cm4gbjEgKyAoIGRpZmYgKiBwZXJjICk7XG4gICAgfVxuXG4gICAgdmFyIGogPSAwO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDw9IG47IGkrKyApIHtcbiAgICAgICAgaiA9IGkgLyBuO1xuXG4gICAgICAgIC8vIFRoZSBHcmVlbiBMaW5lXG4gICAgICAgIHhhID0gZ2V0UHQoIGZyb21YICwgY3BYICwgaiApO1xuICAgICAgICB5YSA9IGdldFB0KCBmcm9tWSAsIGNwWSAsIGogKTtcbiAgICAgICAgeGIgPSBnZXRQdCggY3BYICwgdG9YICwgaiApO1xuICAgICAgICB5YiA9IGdldFB0KCBjcFkgLCB0b1kgLCBqICk7XG5cbiAgICAgICAgLy8gVGhlIEJsYWNrIERvdFxuICAgICAgICB4ID0gZ2V0UHQoIHhhICwgeGIgLCBqICk7XG4gICAgICAgIHkgPSBnZXRQdCggeWEgLCB5YiAsIGogKTtcblxuICAgICAgICBwb2ludHMucHVzaCh4LCB5KTtcbiAgICB9XG5cbiAgICByZXR1cm4gcG9pbnRzO1xufTtcblxuXG5tb2R1bGUuZXhwb3J0cyA9IGJ1aWxkUm91bmRlZFJlY3RhbmdsZTsiLCIvKipcbiAqIEBmaWxlICAgICAgICBNYWluIGV4cG9ydCBvZiB0aGUgUElYSSBjb3JlIGxpYnJhcnlcbiAqIEBhdXRob3IgICAgICBNYXQgR3JvdmVzIDxtYXRAZ29vZGJveWRpZ2l0YWwuY29tPlxuICogQGNvcHlyaWdodCAgIDIwMTMtMjAxNSBHb29kQm95RGlnaXRhbFxuICogQGxpY2Vuc2UgICAgIHtAbGluayBodHRwczovL2dpdGh1Yi5jb20vcGl4aWpzL3BpeGkuanMvYmxvYi9tYXN0ZXIvTElDRU5TRXxNSVQgTGljZW5zZX1cbiAqL1xuXG4vKipcbiAqIEBuYW1lc3BhY2UgUElYSVxuICovXG4vLyBleHBvcnQgY29yZSBhbmQgY29uc3QuIFdlIGFzc2lnbiBjb3JlIHRvIGNvbnN0IHNvIHRoYXQgdGhlIG5vbi1yZWZlcmVuY2UgdHlwZXMgaW4gY29uc3QgcmVtYWluIGluLXRhY3RcbnZhciBjb3JlID0gbW9kdWxlLmV4cG9ydHMgPSBPYmplY3QuYXNzaWduKHJlcXVpcmUoJy4vY29uc3QnKSwgcmVxdWlyZSgnLi9tYXRoJyksIHtcbiAgICAvLyB1dGlsc1xuICAgIHV0aWxzOiByZXF1aXJlKCcuL3V0aWxzJyksXG4gICAgdGlja2VyOiByZXF1aXJlKCcuL3RpY2tlcicpLFxuXG4gICAgLy8gZGlzcGxheVxuICAgIERpc3BsYXlPYmplY3Q6ICAgICAgICAgIHJlcXVpcmUoJy4vZGlzcGxheS9EaXNwbGF5T2JqZWN0JyksXG4gICAgQ29udGFpbmVyOiAgICAgICAgICAgICAgcmVxdWlyZSgnLi9kaXNwbGF5L0NvbnRhaW5lcicpLFxuXG4gICAgLy8gc3ByaXRlc1xuICAgIFNwcml0ZTogICAgICAgICAgICAgICAgIHJlcXVpcmUoJy4vc3ByaXRlcy9TcHJpdGUnKSxcbiAgICBQYXJ0aWNsZUNvbnRhaW5lcjogICAgICByZXF1aXJlKCcuL3BhcnRpY2xlcy9QYXJ0aWNsZUNvbnRhaW5lcicpLFxuICAgIFNwcml0ZVJlbmRlcmVyOiAgICAgICAgIHJlcXVpcmUoJy4vc3ByaXRlcy93ZWJnbC9TcHJpdGVSZW5kZXJlcicpLFxuICAgIFBhcnRpY2xlUmVuZGVyZXI6ICAgICAgIHJlcXVpcmUoJy4vcGFydGljbGVzL3dlYmdsL1BhcnRpY2xlUmVuZGVyZXInKSxcblxuICAgIC8vIHRleHRcbiAgICBUZXh0OiAgICAgICAgICAgICAgICAgICByZXF1aXJlKCcuL3RleHQvVGV4dCcpLFxuXG4gICAgLy8gcHJpbWl0aXZlc1xuICAgIEdyYXBoaWNzOiAgICAgICAgICAgICAgIHJlcXVpcmUoJy4vZ3JhcGhpY3MvR3JhcGhpY3MnKSxcbiAgICBHcmFwaGljc0RhdGE6ICAgICAgICAgICByZXF1aXJlKCcuL2dyYXBoaWNzL0dyYXBoaWNzRGF0YScpLFxuICAgIEdyYXBoaWNzUmVuZGVyZXI6ICAgICAgIHJlcXVpcmUoJy4vZ3JhcGhpY3Mvd2ViZ2wvR3JhcGhpY3NSZW5kZXJlcicpLFxuXG4gICAgLy8gdGV4dHVyZXNcbiAgICBUZXh0dXJlOiAgICAgICAgICAgICAgICByZXF1aXJlKCcuL3RleHR1cmVzL1RleHR1cmUnKSxcbiAgICBCYXNlVGV4dHVyZTogICAgICAgICAgICByZXF1aXJlKCcuL3RleHR1cmVzL0Jhc2VUZXh0dXJlJyksXG4gICAgUmVuZGVyVGV4dHVyZTogICAgICAgICAgcmVxdWlyZSgnLi90ZXh0dXJlcy9SZW5kZXJUZXh0dXJlJyksXG4gICAgVmlkZW9CYXNlVGV4dHVyZTogICAgICAgcmVxdWlyZSgnLi90ZXh0dXJlcy9WaWRlb0Jhc2VUZXh0dXJlJyksXG4gICAgVGV4dHVyZVV2czogICAgICAgICAgICAgcmVxdWlyZSgnLi90ZXh0dXJlcy9UZXh0dXJlVXZzJyksXG5cbiAgICAvLyByZW5kZXJlcnMgLSBjYW52YXNcbiAgICBDYW52YXNSZW5kZXJlcjogICAgICAgICByZXF1aXJlKCcuL3JlbmRlcmVycy9jYW52YXMvQ2FudmFzUmVuZGVyZXInKSxcbiAgICBDYW52YXNHcmFwaGljczogICAgICAgICByZXF1aXJlKCcuL3JlbmRlcmVycy9jYW52YXMvdXRpbHMvQ2FudmFzR3JhcGhpY3MnKSxcbiAgICBDYW52YXNCdWZmZXI6ICAgICAgICAgICByZXF1aXJlKCcuL3JlbmRlcmVycy9jYW52YXMvdXRpbHMvQ2FudmFzQnVmZmVyJyksXG5cbiAgICAvLyByZW5kZXJlcnMgLSB3ZWJnbFxuICAgIFdlYkdMUmVuZGVyZXI6ICAgICAgICAgIHJlcXVpcmUoJy4vcmVuZGVyZXJzL3dlYmdsL1dlYkdMUmVuZGVyZXInKSxcbiAgICBXZWJHTE1hbmFnZXI6ICAgICAgICAgIHJlcXVpcmUoJy4vcmVuZGVyZXJzL3dlYmdsL21hbmFnZXJzL1dlYkdMTWFuYWdlcicpLFxuICAgIFNoYWRlck1hbmFnZXI6ICAgICAgICAgIHJlcXVpcmUoJy4vcmVuZGVyZXJzL3dlYmdsL21hbmFnZXJzL1NoYWRlck1hbmFnZXInKSxcbiAgICBTaGFkZXI6ICAgICAgICAgICAgICAgICByZXF1aXJlKCcuL3JlbmRlcmVycy93ZWJnbC9zaGFkZXJzL1NoYWRlcicpLFxuICAgIE9iamVjdFJlbmRlcmVyOiAgICAgICAgIHJlcXVpcmUoJy4vcmVuZGVyZXJzL3dlYmdsL3V0aWxzL09iamVjdFJlbmRlcmVyJyksXG4gICAgUmVuZGVyVGFyZ2V0OiAgICAgICAgICAgcmVxdWlyZSgnLi9yZW5kZXJlcnMvd2ViZ2wvdXRpbHMvUmVuZGVyVGFyZ2V0JyksXG5cbiAgICAvLyBmaWx0ZXJzIC0gd2ViZ2xcbiAgICBBYnN0cmFjdEZpbHRlcjogICAgICAgICByZXF1aXJlKCcuL3JlbmRlcmVycy93ZWJnbC9maWx0ZXJzL0Fic3RyYWN0RmlsdGVyJyksXG4gICAgRlhBQUZpbHRlcjogICAgICAgICAgICAgcmVxdWlyZSgnLi9yZW5kZXJlcnMvd2ViZ2wvZmlsdGVycy9GWEFBRmlsdGVyJyksXG4gICAgU3ByaXRlTWFza0ZpbHRlcjogICAgICAgcmVxdWlyZSgnLi9yZW5kZXJlcnMvd2ViZ2wvZmlsdGVycy9TcHJpdGVNYXNrRmlsdGVyJyksXG5cbiAgICBnbENvcmU6ICAgICAgICAgICAgICAgICAgIHJlcXVpcmUoJ3BpeGktZ2wtY29yZScpLFxuXG4gICAgLyoqXG4gICAgICogVGhpcyBoZWxwZXIgZnVuY3Rpb24gd2lsbCBhdXRvbWF0aWNhbGx5IGRldGVjdCB3aGljaCByZW5kZXJlciB5b3Ugc2hvdWxkIGJlIHVzaW5nLlxuICAgICAqIFdlYkdMIGlzIHRoZSBwcmVmZXJyZWQgcmVuZGVyZXIgYXMgaXQgaXMgYSBsb3QgZmFzdGVyLiBJZiB3ZWJHTCBpcyBub3Qgc3VwcG9ydGVkIGJ5XG4gICAgICogdGhlIGJyb3dzZXIgdGhlbiB0aGlzIGZ1bmN0aW9uIHdpbGwgcmV0dXJuIGEgY2FudmFzIHJlbmRlcmVyXG4gICAgICpcbiAgICAgKiBAbWVtYmVyb2YgUElYSVxuICAgICAqIEBwYXJhbSB3aWR0aD04MDAge251bWJlcn0gdGhlIHdpZHRoIG9mIHRoZSByZW5kZXJlcnMgdmlld1xuICAgICAqIEBwYXJhbSBoZWlnaHQ9NjAwIHtudW1iZXJ9IHRoZSBoZWlnaHQgb2YgdGhlIHJlbmRlcmVycyB2aWV3XG4gICAgICogQHBhcmFtIFtvcHRpb25zXSB7b2JqZWN0fSBUaGUgb3B0aW9uYWwgcmVuZGVyZXIgcGFyYW1ldGVyc1xuICAgICAqIEBwYXJhbSBbb3B0aW9ucy52aWV3XSB7SFRNTENhbnZhc0VsZW1lbnR9IHRoZSBjYW52YXMgdG8gdXNlIGFzIGEgdmlldywgb3B0aW9uYWxcbiAgICAgKiBAcGFyYW0gW29wdGlvbnMudHJhbnNwYXJlbnQ9ZmFsc2VdIHtib29sZWFufSBJZiB0aGUgcmVuZGVyIHZpZXcgaXMgdHJhbnNwYXJlbnQsIGRlZmF1bHQgZmFsc2VcbiAgICAgKiBAcGFyYW0gW29wdGlvbnMuYW50aWFsaWFzPWZhbHNlXSB7Ym9vbGVhbn0gc2V0cyBhbnRpYWxpYXMgKG9ubHkgYXBwbGljYWJsZSBpbiBjaHJvbWUgYXQgdGhlIG1vbWVudClcbiAgICAgKiBAcGFyYW0gW29wdGlvbnMucHJlc2VydmVEcmF3aW5nQnVmZmVyPWZhbHNlXSB7Ym9vbGVhbn0gZW5hYmxlcyBkcmF3aW5nIGJ1ZmZlciBwcmVzZXJ2YXRpb24sIGVuYWJsZSB0aGlzIGlmIHlvdVxuICAgICAqICAgICAgbmVlZCB0byBjYWxsIHRvRGF0YVVybCBvbiB0aGUgd2ViZ2wgY29udGV4dFxuICAgICAqIEBwYXJhbSBbb3B0aW9ucy5yZXNvbHV0aW9uPTFdIHtudW1iZXJ9IHRoZSByZXNvbHV0aW9uIG9mIHRoZSByZW5kZXJlciwgcmV0aW5hIHdvdWxkIGJlIDJcbiAgICAgKiBAcGFyYW0gW25vV2ViR0w9ZmFsc2VdIHtib29sZWFufSBwcmV2ZW50cyBzZWxlY3Rpb24gb2YgV2ViR0wgcmVuZGVyZXIsIGV2ZW4gaWYgc3VjaCBpcyBwcmVzZW50XG4gICAgICpcbiAgICAgKiBAcmV0dXJuIHtXZWJHTFJlbmRlcmVyfENhbnZhc1JlbmRlcmVyfSBSZXR1cm5zIFdlYkdMIHJlbmRlcmVyIGlmIGF2YWlsYWJsZSwgb3RoZXJ3aXNlIENhbnZhc1JlbmRlcmVyXG4gICAgICovXG4gICAgYXV0b0RldGVjdFJlbmRlcmVyOiBmdW5jdGlvbiAod2lkdGgsIGhlaWdodCwgb3B0aW9ucywgbm9XZWJHTClcbiAgICB7XG4gICAgICAgIHdpZHRoID0gd2lkdGggfHwgODAwO1xuICAgICAgICBoZWlnaHQgPSBoZWlnaHQgfHwgNjAwO1xuXG4gICAgICAgIGlmICghbm9XZWJHTCAmJiBjb3JlLnV0aWxzLmlzV2ViR0xTdXBwb3J0ZWQoKSlcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBjb3JlLldlYkdMUmVuZGVyZXIod2lkdGgsIGhlaWdodCwgb3B0aW9ucyk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbmV3IGNvcmUuQ2FudmFzUmVuZGVyZXIod2lkdGgsIGhlaWdodCwgb3B0aW9ucyk7XG4gICAgfVxufSk7XG4iLCIvLyBAdG9kbyAtIGlnbm9yZSB0aGUgdG9vIG1hbnkgcGFyYW1ldGVycyB3YXJuaW5nIGZvciBub3dcbi8vIHNob3VsZCBlaXRoZXIgZml4IGl0IG9yIGNoYW5nZSB0aGUganNoaW50IGNvbmZpZ1xuLy8ganNoaW50IC1XMDcyXG5cbnZhciBQb2ludCA9IHJlcXVpcmUoJy4vUG9pbnQnKTtcblxuLyoqXG4gKiBUaGUgcGl4aSBNYXRyaXggY2xhc3MgYXMgYW4gb2JqZWN0LCB3aGljaCBtYWtlcyBpdCBhIGxvdCBmYXN0ZXIsXG4gKiBoZXJlIGlzIGEgcmVwcmVzZW50YXRpb24gb2YgaXQgOlxuICogfCBhIHwgYiB8IHR4fFxuICogfCBjIHwgZCB8IHR5fFxuICogfCAwIHwgMCB8IDEgfFxuICpcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqL1xuZnVuY3Rpb24gTWF0cml4KClcbntcbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMVxuICAgICAqL1xuICAgIHRoaXMuYSA9IDE7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMFxuICAgICAqL1xuICAgIHRoaXMuYiA9IDA7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMFxuICAgICAqL1xuICAgIHRoaXMuYyA9IDA7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMVxuICAgICAqL1xuICAgIHRoaXMuZCA9IDE7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMFxuICAgICAqL1xuICAgIHRoaXMudHggPSAwO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDBcbiAgICAgKi9cbiAgICB0aGlzLnR5ID0gMDtcbn1cblxuTWF0cml4LnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IE1hdHJpeDtcbm1vZHVsZS5leHBvcnRzID0gTWF0cml4O1xuXG4vKipcbiAqIENyZWF0ZXMgYSBNYXRyaXggb2JqZWN0IGJhc2VkIG9uIHRoZSBnaXZlbiBhcnJheS4gVGhlIEVsZW1lbnQgdG8gTWF0cml4IG1hcHBpbmcgb3JkZXIgaXMgYXMgZm9sbG93czpcbiAqXG4gKiBhID0gYXJyYXlbMF1cbiAqIGIgPSBhcnJheVsxXVxuICogYyA9IGFycmF5WzNdXG4gKiBkID0gYXJyYXlbNF1cbiAqIHR4ID0gYXJyYXlbMl1cbiAqIHR5ID0gYXJyYXlbNV1cbiAqXG4gKiBAcGFyYW0gYXJyYXkge251bWJlcltdfSBUaGUgYXJyYXkgdGhhdCB0aGUgbWF0cml4IHdpbGwgYmUgcG9wdWxhdGVkIGZyb20uXG4gKi9cbk1hdHJpeC5wcm90b3R5cGUuZnJvbUFycmF5ID0gZnVuY3Rpb24gKGFycmF5KVxue1xuICAgIHRoaXMuYSA9IGFycmF5WzBdO1xuICAgIHRoaXMuYiA9IGFycmF5WzFdO1xuICAgIHRoaXMuYyA9IGFycmF5WzNdO1xuICAgIHRoaXMuZCA9IGFycmF5WzRdO1xuICAgIHRoaXMudHggPSBhcnJheVsyXTtcbiAgICB0aGlzLnR5ID0gYXJyYXlbNV07XG59O1xuXG5cbi8qKlxuICogc2V0cyB0aGUgbWF0cml4IHByb3BlcnRpZXNcbiAqXG4gKiBAcGFyYW0ge251bWJlcn0gYVxuICogQHBhcmFtIHtudW1iZXJ9IGJcbiAqIEBwYXJhbSB7bnVtYmVyfSBjXG4gKiBAcGFyYW0ge251bWJlcn0gZFxuICogQHBhcmFtIHtudW1iZXJ9IHR4XG4gKiBAcGFyYW0ge251bWJlcn0gdHlcbiAqXG4gKiBAcmV0dXJuIHtQSVhJLk1hdHJpeH0gVGhpcyBtYXRyaXguIEdvb2QgZm9yIGNoYWluaW5nIG1ldGhvZCBjYWxscy5cbiAqL1xuTWF0cml4LnByb3RvdHlwZS5zZXQgPSBmdW5jdGlvbiAoYSwgYiwgYywgZCwgdHgsIHR5KVxue1xuICAgIHRoaXMuYSA9IGE7XG4gICAgdGhpcy5iID0gYjtcbiAgICB0aGlzLmMgPSBjO1xuICAgIHRoaXMuZCA9IGQ7XG4gICAgdGhpcy50eCA9IHR4O1xuICAgIHRoaXMudHkgPSB0eTtcblxuICAgIHJldHVybiB0aGlzO1xufTtcblxuXG4vKipcbiAqIENyZWF0ZXMgYW4gYXJyYXkgZnJvbSB0aGUgY3VycmVudCBNYXRyaXggb2JqZWN0LlxuICpcbiAqIEBwYXJhbSB0cmFuc3Bvc2Uge2Jvb2xlYW59IFdoZXRoZXIgd2UgbmVlZCB0byB0cmFuc3Bvc2UgdGhlIG1hdHJpeCBvciBub3RcbiAqIEBwYXJhbSBbb3V0XSB7QXJyYXl9IElmIHByb3ZpZGVkIHRoZSBhcnJheSB3aWxsIGJlIGFzc2lnbmVkIHRvIG91dFxuICogQHJldHVybiB7bnVtYmVyW119IHRoZSBuZXdseSBjcmVhdGVkIGFycmF5IHdoaWNoIGNvbnRhaW5zIHRoZSBtYXRyaXhcbiAqL1xuTWF0cml4LnByb3RvdHlwZS50b0FycmF5ID0gZnVuY3Rpb24gKHRyYW5zcG9zZSwgb3V0KVxue1xuICAgIGlmICghdGhpcy5hcnJheSlcbiAgICB7XG4gICAgICAgIHRoaXMuYXJyYXkgPSBuZXcgRmxvYXQzMkFycmF5KDkpO1xuICAgIH1cblxuICAgIHZhciBhcnJheSA9IG91dCB8fCB0aGlzLmFycmF5O1xuXG4gICAgaWYgKHRyYW5zcG9zZSlcbiAgICB7XG4gICAgICAgIGFycmF5WzBdID0gdGhpcy5hO1xuICAgICAgICBhcnJheVsxXSA9IHRoaXMuYjtcbiAgICAgICAgYXJyYXlbMl0gPSAwO1xuICAgICAgICBhcnJheVszXSA9IHRoaXMuYztcbiAgICAgICAgYXJyYXlbNF0gPSB0aGlzLmQ7XG4gICAgICAgIGFycmF5WzVdID0gMDtcbiAgICAgICAgYXJyYXlbNl0gPSB0aGlzLnR4O1xuICAgICAgICBhcnJheVs3XSA9IHRoaXMudHk7XG4gICAgICAgIGFycmF5WzhdID0gMTtcbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgYXJyYXlbMF0gPSB0aGlzLmE7XG4gICAgICAgIGFycmF5WzFdID0gdGhpcy5jO1xuICAgICAgICBhcnJheVsyXSA9IHRoaXMudHg7XG4gICAgICAgIGFycmF5WzNdID0gdGhpcy5iO1xuICAgICAgICBhcnJheVs0XSA9IHRoaXMuZDtcbiAgICAgICAgYXJyYXlbNV0gPSB0aGlzLnR5O1xuICAgICAgICBhcnJheVs2XSA9IDA7XG4gICAgICAgIGFycmF5WzddID0gMDtcbiAgICAgICAgYXJyYXlbOF0gPSAxO1xuICAgIH1cblxuICAgIHJldHVybiBhcnJheTtcbn07XG5cbi8qKlxuICogR2V0IGEgbmV3IHBvc2l0aW9uIHdpdGggdGhlIGN1cnJlbnQgdHJhbnNmb3JtYXRpb24gYXBwbGllZC5cbiAqIENhbiBiZSB1c2VkIHRvIGdvIGZyb20gYSBjaGlsZCdzIGNvb3JkaW5hdGUgc3BhY2UgdG8gdGhlIHdvcmxkIGNvb3JkaW5hdGUgc3BhY2UuIChlLmcuIHJlbmRlcmluZylcbiAqXG4gKiBAcGFyYW0gcG9zIHtQSVhJLlBvaW50fSBUaGUgb3JpZ2luXG4gKiBAcGFyYW0gW25ld1Bvc10ge1BJWEkuUG9pbnR9IFRoZSBwb2ludCB0aGF0IHRoZSBuZXcgcG9zaXRpb24gaXMgYXNzaWduZWQgdG8gKGFsbG93ZWQgdG8gYmUgc2FtZSBhcyBpbnB1dClcbiAqIEByZXR1cm4ge1BJWEkuUG9pbnR9IFRoZSBuZXcgcG9pbnQsIHRyYW5zZm9ybWVkIHRocm91Z2ggdGhpcyBtYXRyaXhcbiAqL1xuTWF0cml4LnByb3RvdHlwZS5hcHBseSA9IGZ1bmN0aW9uIChwb3MsIG5ld1BvcylcbntcbiAgICBuZXdQb3MgPSBuZXdQb3MgfHwgbmV3IFBvaW50KCk7XG5cbiAgICB2YXIgeCA9IHBvcy54O1xuICAgIHZhciB5ID0gcG9zLnk7XG5cbiAgICBuZXdQb3MueCA9IHRoaXMuYSAqIHggKyB0aGlzLmMgKiB5ICsgdGhpcy50eDtcbiAgICBuZXdQb3MueSA9IHRoaXMuYiAqIHggKyB0aGlzLmQgKiB5ICsgdGhpcy50eTtcblxuICAgIHJldHVybiBuZXdQb3M7XG59O1xuXG4vKipcbiAqIEdldCBhIG5ldyBwb3NpdGlvbiB3aXRoIHRoZSBpbnZlcnNlIG9mIHRoZSBjdXJyZW50IHRyYW5zZm9ybWF0aW9uIGFwcGxpZWQuXG4gKiBDYW4gYmUgdXNlZCB0byBnbyBmcm9tIHRoZSB3b3JsZCBjb29yZGluYXRlIHNwYWNlIHRvIGEgY2hpbGQncyBjb29yZGluYXRlIHNwYWNlLiAoZS5nLiBpbnB1dClcbiAqXG4gKiBAcGFyYW0gcG9zIHtQSVhJLlBvaW50fSBUaGUgb3JpZ2luXG4gKiBAcGFyYW0gW25ld1Bvc10ge1BJWEkuUG9pbnR9IFRoZSBwb2ludCB0aGF0IHRoZSBuZXcgcG9zaXRpb24gaXMgYXNzaWduZWQgdG8gKGFsbG93ZWQgdG8gYmUgc2FtZSBhcyBpbnB1dClcbiAqIEByZXR1cm4ge1BJWEkuUG9pbnR9IFRoZSBuZXcgcG9pbnQsIGludmVyc2UtdHJhbnNmb3JtZWQgdGhyb3VnaCB0aGlzIG1hdHJpeFxuICovXG5NYXRyaXgucHJvdG90eXBlLmFwcGx5SW52ZXJzZSA9IGZ1bmN0aW9uIChwb3MsIG5ld1BvcylcbntcbiAgICBuZXdQb3MgPSBuZXdQb3MgfHwgbmV3IFBvaW50KCk7XG5cbiAgICB2YXIgaWQgPSAxIC8gKHRoaXMuYSAqIHRoaXMuZCArIHRoaXMuYyAqIC10aGlzLmIpO1xuXG4gICAgdmFyIHggPSBwb3MueDtcbiAgICB2YXIgeSA9IHBvcy55O1xuXG4gICAgbmV3UG9zLnggPSB0aGlzLmQgKiBpZCAqIHggKyAtdGhpcy5jICogaWQgKiB5ICsgKHRoaXMudHkgKiB0aGlzLmMgLSB0aGlzLnR4ICogdGhpcy5kKSAqIGlkO1xuICAgIG5ld1Bvcy55ID0gdGhpcy5hICogaWQgKiB5ICsgLXRoaXMuYiAqIGlkICogeCArICgtdGhpcy50eSAqIHRoaXMuYSArIHRoaXMudHggKiB0aGlzLmIpICogaWQ7XG5cbiAgICByZXR1cm4gbmV3UG9zO1xufTtcblxuLyoqXG4gKiBUcmFuc2xhdGVzIHRoZSBtYXRyaXggb24gdGhlIHggYW5kIHkuXG4gKlxuICogQHBhcmFtIHtudW1iZXJ9IHhcbiAqIEBwYXJhbSB7bnVtYmVyfSB5XG4gKiBAcmV0dXJuIHtQSVhJLk1hdHJpeH0gVGhpcyBtYXRyaXguIEdvb2QgZm9yIGNoYWluaW5nIG1ldGhvZCBjYWxscy5cbiAqL1xuTWF0cml4LnByb3RvdHlwZS50cmFuc2xhdGUgPSBmdW5jdGlvbiAoeCwgeSlcbntcbiAgICB0aGlzLnR4ICs9IHg7XG4gICAgdGhpcy50eSArPSB5O1xuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIEFwcGxpZXMgYSBzY2FsZSB0cmFuc2Zvcm1hdGlvbiB0byB0aGUgbWF0cml4LlxuICpcbiAqIEBwYXJhbSB7bnVtYmVyfSB4IFRoZSBhbW91bnQgdG8gc2NhbGUgaG9yaXpvbnRhbGx5XG4gKiBAcGFyYW0ge251bWJlcn0geSBUaGUgYW1vdW50IHRvIHNjYWxlIHZlcnRpY2FsbHlcbiAqIEByZXR1cm4ge1BJWEkuTWF0cml4fSBUaGlzIG1hdHJpeC4gR29vZCBmb3IgY2hhaW5pbmcgbWV0aG9kIGNhbGxzLlxuICovXG5NYXRyaXgucHJvdG90eXBlLnNjYWxlID0gZnVuY3Rpb24gKHgsIHkpXG57XG4gICAgdGhpcy5hICo9IHg7XG4gICAgdGhpcy5kICo9IHk7XG4gICAgdGhpcy5jICo9IHg7XG4gICAgdGhpcy5iICo9IHk7XG4gICAgdGhpcy50eCAqPSB4O1xuICAgIHRoaXMudHkgKj0geTtcblxuICAgIHJldHVybiB0aGlzO1xufTtcblxuXG4vKipcbiAqIEFwcGxpZXMgYSByb3RhdGlvbiB0cmFuc2Zvcm1hdGlvbiB0byB0aGUgbWF0cml4LlxuICpcbiAqIEBwYXJhbSB7bnVtYmVyfSBhbmdsZSAtIFRoZSBhbmdsZSBpbiByYWRpYW5zLlxuICogQHJldHVybiB7UElYSS5NYXRyaXh9IFRoaXMgbWF0cml4LiBHb29kIGZvciBjaGFpbmluZyBtZXRob2QgY2FsbHMuXG4gKi9cbk1hdHJpeC5wcm90b3R5cGUucm90YXRlID0gZnVuY3Rpb24gKGFuZ2xlKVxue1xuICAgIHZhciBjb3MgPSBNYXRoLmNvcyggYW5nbGUgKTtcbiAgICB2YXIgc2luID0gTWF0aC5zaW4oIGFuZ2xlICk7XG5cbiAgICB2YXIgYTEgPSB0aGlzLmE7XG4gICAgdmFyIGMxID0gdGhpcy5jO1xuICAgIHZhciB0eDEgPSB0aGlzLnR4O1xuXG4gICAgdGhpcy5hID0gYTEgKiBjb3MtdGhpcy5iICogc2luO1xuICAgIHRoaXMuYiA9IGExICogc2luK3RoaXMuYiAqIGNvcztcbiAgICB0aGlzLmMgPSBjMSAqIGNvcy10aGlzLmQgKiBzaW47XG4gICAgdGhpcy5kID0gYzEgKiBzaW4rdGhpcy5kICogY29zO1xuICAgIHRoaXMudHggPSB0eDEgKiBjb3MgLSB0aGlzLnR5ICogc2luO1xuICAgIHRoaXMudHkgPSB0eDEgKiBzaW4gKyB0aGlzLnR5ICogY29zO1xuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIEFwcGVuZHMgdGhlIGdpdmVuIE1hdHJpeCB0byB0aGlzIE1hdHJpeC5cbiAqXG4gKiBAcGFyYW0ge1BJWEkuTWF0cml4fSBtYXRyaXhcbiAqIEByZXR1cm4ge1BJWEkuTWF0cml4fSBUaGlzIG1hdHJpeC4gR29vZCBmb3IgY2hhaW5pbmcgbWV0aG9kIGNhbGxzLlxuICovXG5NYXRyaXgucHJvdG90eXBlLmFwcGVuZCA9IGZ1bmN0aW9uIChtYXRyaXgpXG57XG4gICAgdmFyIGExID0gdGhpcy5hO1xuICAgIHZhciBiMSA9IHRoaXMuYjtcbiAgICB2YXIgYzEgPSB0aGlzLmM7XG4gICAgdmFyIGQxID0gdGhpcy5kO1xuXG4gICAgdGhpcy5hICA9IG1hdHJpeC5hICogYTEgKyBtYXRyaXguYiAqIGMxO1xuICAgIHRoaXMuYiAgPSBtYXRyaXguYSAqIGIxICsgbWF0cml4LmIgKiBkMTtcbiAgICB0aGlzLmMgID0gbWF0cml4LmMgKiBhMSArIG1hdHJpeC5kICogYzE7XG4gICAgdGhpcy5kICA9IG1hdHJpeC5jICogYjEgKyBtYXRyaXguZCAqIGQxO1xuXG4gICAgdGhpcy50eCA9IG1hdHJpeC50eCAqIGExICsgbWF0cml4LnR5ICogYzEgKyB0aGlzLnR4O1xuICAgIHRoaXMudHkgPSBtYXRyaXgudHggKiBiMSArIG1hdHJpeC50eSAqIGQxICsgdGhpcy50eTtcblxuICAgIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBTZXRzIHRoZSBtYXRyaXggYmFzZWQgb24gYWxsIHRoZSBhdmFpbGFibGUgcHJvcGVydGllc1xuICpcbiAqIEBwYXJhbSB7bnVtYmVyfSB4XG4gKiBAcGFyYW0ge251bWJlcn0geVxuICogQHBhcmFtIHtudW1iZXJ9IHBpdm90WFxuICogQHBhcmFtIHtudW1iZXJ9IHBpdm90WVxuICogQHBhcmFtIHtudW1iZXJ9IHNjYWxlWFxuICogQHBhcmFtIHtudW1iZXJ9IHNjYWxlWVxuICogQHBhcmFtIHtudW1iZXJ9IHJvdGF0aW9uXG4gKiBAcGFyYW0ge251bWJlcn0gc2tld1hcbiAqIEBwYXJhbSB7bnVtYmVyfSBza2V3WVxuICpcbiAqIEByZXR1cm4ge1BJWEkuTWF0cml4fSBUaGlzIG1hdHJpeC4gR29vZCBmb3IgY2hhaW5pbmcgbWV0aG9kIGNhbGxzLlxuICovXG5NYXRyaXgucHJvdG90eXBlLnNldFRyYW5zZm9ybSA9IGZ1bmN0aW9uICh4LCB5LCBwaXZvdFgsIHBpdm90WSwgc2NhbGVYLCBzY2FsZVksIHJvdGF0aW9uLCBza2V3WCwgc2tld1kpXG57XG4gICAgdmFyIGEsIGIsIGMsIGQsIHNyLCBjciwgY3ksIHN5LCBuc3gsIGN4O1xuXG4gICAgc3IgID0gTWF0aC5zaW4ocm90YXRpb24pO1xuICAgIGNyICA9IE1hdGguY29zKHJvdGF0aW9uKTtcbiAgICBjeSAgPSBNYXRoLmNvcyhza2V3WSk7XG4gICAgc3kgID0gTWF0aC5zaW4oc2tld1kpO1xuICAgIG5zeCA9IC1NYXRoLnNpbihza2V3WCk7XG4gICAgY3ggID0gIE1hdGguY29zKHNrZXdYKTtcblxuICAgIGEgID0gIGNyICogc2NhbGVYO1xuICAgIGIgID0gIHNyICogc2NhbGVYO1xuICAgIGMgID0gLXNyICogc2NhbGVZO1xuICAgIGQgID0gIGNyICogc2NhbGVZO1xuXG4gICAgdGhpcy5hICA9IGN5ICogYSArIHN5ICogYztcbiAgICB0aGlzLmIgID0gY3kgKiBiICsgc3kgKiBkO1xuICAgIHRoaXMuYyAgPSBuc3ggKiBhICsgY3ggKiBjO1xuICAgIHRoaXMuZCAgPSBuc3ggKiBiICsgY3ggKiBkO1xuXG4gICAgdGhpcy50eCA9IHggKyAoIHBpdm90WCAqIGEgKyBwaXZvdFkgKiBjICk7XG4gICAgdGhpcy50eSA9IHkgKyAoIHBpdm90WCAqIGIgKyBwaXZvdFkgKiBkICk7XG5cbiAgICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogUHJlcGVuZHMgdGhlIGdpdmVuIE1hdHJpeCB0byB0aGlzIE1hdHJpeC5cbiAqXG4gKiBAcGFyYW0ge1BJWEkuTWF0cml4fSBtYXRyaXhcbiAqIEByZXR1cm4ge1BJWEkuTWF0cml4fSBUaGlzIG1hdHJpeC4gR29vZCBmb3IgY2hhaW5pbmcgbWV0aG9kIGNhbGxzLlxuICovXG5NYXRyaXgucHJvdG90eXBlLnByZXBlbmQgPSBmdW5jdGlvbihtYXRyaXgpXG57XG4gICAgdmFyIHR4MSA9IHRoaXMudHg7XG5cbiAgICBpZiAobWF0cml4LmEgIT09IDEgfHwgbWF0cml4LmIgIT09IDAgfHwgbWF0cml4LmMgIT09IDAgfHwgbWF0cml4LmQgIT09IDEpXG4gICAge1xuICAgICAgICB2YXIgYTEgPSB0aGlzLmE7XG4gICAgICAgIHZhciBjMSA9IHRoaXMuYztcbiAgICAgICAgdGhpcy5hICA9IGExKm1hdHJpeC5hK3RoaXMuYiptYXRyaXguYztcbiAgICAgICAgdGhpcy5iICA9IGExKm1hdHJpeC5iK3RoaXMuYiptYXRyaXguZDtcbiAgICAgICAgdGhpcy5jICA9IGMxKm1hdHJpeC5hK3RoaXMuZCptYXRyaXguYztcbiAgICAgICAgdGhpcy5kICA9IGMxKm1hdHJpeC5iK3RoaXMuZCptYXRyaXguZDtcbiAgICB9XG5cbiAgICB0aGlzLnR4ID0gdHgxKm1hdHJpeC5hK3RoaXMudHkqbWF0cml4LmMrbWF0cml4LnR4O1xuICAgIHRoaXMudHkgPSB0eDEqbWF0cml4LmIrdGhpcy50eSptYXRyaXguZCttYXRyaXgudHk7XG5cbiAgICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogSW52ZXJ0cyB0aGlzIG1hdHJpeFxuICpcbiAqIEByZXR1cm4ge1BJWEkuTWF0cml4fSBUaGlzIG1hdHJpeC4gR29vZCBmb3IgY2hhaW5pbmcgbWV0aG9kIGNhbGxzLlxuICovXG5NYXRyaXgucHJvdG90eXBlLmludmVydCA9IGZ1bmN0aW9uKClcbntcbiAgICB2YXIgYTEgPSB0aGlzLmE7XG4gICAgdmFyIGIxID0gdGhpcy5iO1xuICAgIHZhciBjMSA9IHRoaXMuYztcbiAgICB2YXIgZDEgPSB0aGlzLmQ7XG4gICAgdmFyIHR4MSA9IHRoaXMudHg7XG4gICAgdmFyIG4gPSBhMSpkMS1iMSpjMTtcblxuICAgIHRoaXMuYSA9IGQxL247XG4gICAgdGhpcy5iID0gLWIxL247XG4gICAgdGhpcy5jID0gLWMxL247XG4gICAgdGhpcy5kID0gYTEvbjtcbiAgICB0aGlzLnR4ID0gKGMxKnRoaXMudHktZDEqdHgxKS9uO1xuICAgIHRoaXMudHkgPSAtKGExKnRoaXMudHktYjEqdHgxKS9uO1xuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG5cbi8qKlxuICogUmVzZXRzIHRoaXMgTWF0aXggdG8gYW4gaWRlbnRpdHkgKGRlZmF1bHQpIG1hdHJpeC5cbiAqXG4gKiBAcmV0dXJuIHtQSVhJLk1hdHJpeH0gVGhpcyBtYXRyaXguIEdvb2QgZm9yIGNoYWluaW5nIG1ldGhvZCBjYWxscy5cbiAqL1xuTWF0cml4LnByb3RvdHlwZS5pZGVudGl0eSA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy5hID0gMTtcbiAgICB0aGlzLmIgPSAwO1xuICAgIHRoaXMuYyA9IDA7XG4gICAgdGhpcy5kID0gMTtcbiAgICB0aGlzLnR4ID0gMDtcbiAgICB0aGlzLnR5ID0gMDtcblxuICAgIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBDcmVhdGVzIGEgbmV3IE1hdHJpeCBvYmplY3Qgd2l0aCB0aGUgc2FtZSB2YWx1ZXMgYXMgdGhpcyBvbmUuXG4gKlxuICogQHJldHVybiB7UElYSS5NYXRyaXh9IEEgY29weSBvZiB0aGlzIG1hdHJpeC4gR29vZCBmb3IgY2hhaW5pbmcgbWV0aG9kIGNhbGxzLlxuICovXG5NYXRyaXgucHJvdG90eXBlLmNsb25lID0gZnVuY3Rpb24gKClcbntcbiAgICB2YXIgbWF0cml4ID0gbmV3IE1hdHJpeCgpO1xuICAgIG1hdHJpeC5hID0gdGhpcy5hO1xuICAgIG1hdHJpeC5iID0gdGhpcy5iO1xuICAgIG1hdHJpeC5jID0gdGhpcy5jO1xuICAgIG1hdHJpeC5kID0gdGhpcy5kO1xuICAgIG1hdHJpeC50eCA9IHRoaXMudHg7XG4gICAgbWF0cml4LnR5ID0gdGhpcy50eTtcblxuICAgIHJldHVybiBtYXRyaXg7XG59O1xuXG4vKipcbiAqIENoYW5nZXMgdGhlIHZhbHVlcyBvZiB0aGUgZ2l2ZW4gbWF0cml4IHRvIGJlIHRoZSBzYW1lIGFzIHRoZSBvbmVzIGluIHRoaXMgbWF0cml4XG4gKlxuICogQHJldHVybiB7UElYSS5NYXRyaXh9IFRoZSBtYXRyaXggZ2l2ZW4gaW4gcGFyYW1ldGVyIHdpdGggaXRzIHZhbHVlcyB1cGRhdGVkLlxuICovXG5NYXRyaXgucHJvdG90eXBlLmNvcHkgPSBmdW5jdGlvbiAobWF0cml4KVxue1xuICAgIG1hdHJpeC5hID0gdGhpcy5hO1xuICAgIG1hdHJpeC5iID0gdGhpcy5iO1xuICAgIG1hdHJpeC5jID0gdGhpcy5jO1xuICAgIG1hdHJpeC5kID0gdGhpcy5kO1xuICAgIG1hdHJpeC50eCA9IHRoaXMudHg7XG4gICAgbWF0cml4LnR5ID0gdGhpcy50eTtcblxuICAgIHJldHVybiBtYXRyaXg7XG59O1xuXG4vKipcbiAqIEEgZGVmYXVsdCAoaWRlbnRpdHkpIG1hdHJpeFxuICpcbiAqIEBzdGF0aWNcbiAqIEBjb25zdFxuICovXG5NYXRyaXguSURFTlRJVFkgPSBuZXcgTWF0cml4KCk7XG5cbi8qKlxuICogQSB0ZW1wIG1hdHJpeFxuICpcbiAqIEBzdGF0aWNcbiAqIEBjb25zdFxuICovXG5NYXRyaXguVEVNUF9NQVRSSVggPSBuZXcgTWF0cml4KCk7XG4iLCIvKipcbiAqIFRoZSBQb2ludCBvYmplY3QgcmVwcmVzZW50cyBhIGxvY2F0aW9uIGluIGEgdHdvLWRpbWVuc2lvbmFsIGNvb3JkaW5hdGUgc3lzdGVtLCB3aGVyZSB4IHJlcHJlc2VudHNcbiAqIHRoZSBob3Jpem9udGFsIGF4aXMgYW5kIHkgcmVwcmVzZW50cyB0aGUgdmVydGljYWwgYXhpcy5cbiAqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gW3g9MF0ge251bWJlcn0gcG9zaXRpb24gb2YgdGhlIHBvaW50IG9uIHRoZSB4IGF4aXNcbiAqIEBwYXJhbSBbeT0wXSB7bnVtYmVyfSBwb3NpdGlvbiBvZiB0aGUgcG9pbnQgb24gdGhlIHkgYXhpc1xuICovXG5mdW5jdGlvbiBQb2ludCh4LCB5KVxue1xuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAwXG4gICAgICovXG4gICAgdGhpcy54ID0geCB8fCAwO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDBcbiAgICAgKi9cbiAgICB0aGlzLnkgPSB5IHx8IDA7XG59XG5cblBvaW50LnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFBvaW50O1xubW9kdWxlLmV4cG9ydHMgPSBQb2ludDtcblxuLyoqXG4gKiBDcmVhdGVzIGEgY2xvbmUgb2YgdGhpcyBwb2ludFxuICpcbiAqIEByZXR1cm4ge1BJWEkuUG9pbnR9IGEgY29weSBvZiB0aGUgcG9pbnRcbiAqL1xuUG9pbnQucHJvdG90eXBlLmNsb25lID0gZnVuY3Rpb24gKClcbntcbiAgICByZXR1cm4gbmV3IFBvaW50KHRoaXMueCwgdGhpcy55KTtcbn07XG5cbi8qKlxuICogQ29waWVzIHggYW5kIHkgZnJvbSB0aGUgZ2l2ZW4gcG9pbnRcbiAqXG4gKiBAcGFyYW0gcCB7UElYSS5Qb2ludH1cbiAqL1xuUG9pbnQucHJvdG90eXBlLmNvcHkgPSBmdW5jdGlvbiAocCkge1xuICAgIHRoaXMuc2V0KHAueCwgcC55KTtcbn07XG5cbi8qKlxuICogUmV0dXJucyB0cnVlIGlmIHRoZSBnaXZlbiBwb2ludCBpcyBlcXVhbCB0byB0aGlzIHBvaW50XG4gKlxuICogQHBhcmFtIHAge1BJWEkuUG9pbnR9XG4gKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAqL1xuUG9pbnQucHJvdG90eXBlLmVxdWFscyA9IGZ1bmN0aW9uIChwKSB7XG4gICAgcmV0dXJuIChwLnggPT09IHRoaXMueCkgJiYgKHAueSA9PT0gdGhpcy55KTtcbn07XG5cbi8qKlxuICogU2V0cyB0aGUgcG9pbnQgdG8gYSBuZXcgeCBhbmQgeSBwb3NpdGlvbi5cbiAqIElmIHkgaXMgb21pdHRlZCwgYm90aCB4IGFuZCB5IHdpbGwgYmUgc2V0IHRvIHguXG4gKlxuICogQHBhcmFtIFt4PTBdIHtudW1iZXJ9IHBvc2l0aW9uIG9mIHRoZSBwb2ludCBvbiB0aGUgeCBheGlzXG4gKiBAcGFyYW0gW3k9MF0ge251bWJlcn0gcG9zaXRpb24gb2YgdGhlIHBvaW50IG9uIHRoZSB5IGF4aXNcbiAqL1xuUG9pbnQucHJvdG90eXBlLnNldCA9IGZ1bmN0aW9uICh4LCB5KVxue1xuICAgIHRoaXMueCA9IHggfHwgMDtcbiAgICB0aGlzLnkgPSB5IHx8ICggKHkgIT09IDApID8gdGhpcy54IDogMCApIDtcbn07XG4iLCIvKipcbiAqIE1hdGggY2xhc3NlcyBhbmQgdXRpbGl0aWVzIG1peGVkIGludG8gUElYSSBuYW1lc3BhY2UuXG4gKlxuICogQGxlbmRzIFBJWElcbiAqL1xubW9kdWxlLmV4cG9ydHMgPSB7XG4gICAgLy8gVGhlc2Ugd2lsbCBiZSBtaXhlZCB0byBiZSBtYWRlIHB1YmxpY2x5IGF2YWlsYWJsZSxcbiAgICAvLyB3aGlsZSB0aGlzIG1vZHVsZSBpcyB1c2VkIGludGVybmFsbHkgaW4gY29yZVxuICAgIC8vIHRvIGF2b2lkIGNpcmN1bGFyIGRlcGVuZGVuY2llcyBhbmQgY3V0IGRvd24gb25cbiAgICAvLyBpbnRlcm5hbCBtb2R1bGUgcmVxdWlyZXMuXG5cbiAgICBQb2ludDogICAgICByZXF1aXJlKCcuL1BvaW50JyksXG4gICAgTWF0cml4OiAgICAgcmVxdWlyZSgnLi9NYXRyaXgnKSxcblxuICAgIENpcmNsZTogICAgIHJlcXVpcmUoJy4vc2hhcGVzL0NpcmNsZScpLFxuICAgIEVsbGlwc2U6ICAgIHJlcXVpcmUoJy4vc2hhcGVzL0VsbGlwc2UnKSxcbiAgICBQb2x5Z29uOiAgICByZXF1aXJlKCcuL3NoYXBlcy9Qb2x5Z29uJyksXG4gICAgUmVjdGFuZ2xlOiAgcmVxdWlyZSgnLi9zaGFwZXMvUmVjdGFuZ2xlJyksXG4gICAgUm91bmRlZFJlY3RhbmdsZTogcmVxdWlyZSgnLi9zaGFwZXMvUm91bmRlZFJlY3RhbmdsZScpXG59O1xuIiwidmFyIFJlY3RhbmdsZSA9IHJlcXVpcmUoJy4vUmVjdGFuZ2xlJyksXG4gICAgQ09OU1QgPSByZXF1aXJlKCcuLi8uLi9jb25zdCcpO1xuXG4vKipcbiAqIFRoZSBDaXJjbGUgb2JqZWN0IGNhbiBiZSB1c2VkIHRvIHNwZWNpZnkgYSBoaXQgYXJlYSBmb3IgZGlzcGxheU9iamVjdHNcbiAqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0geCB7bnVtYmVyfSBUaGUgWCBjb29yZGluYXRlIG9mIHRoZSBjZW50ZXIgb2YgdGhpcyBjaXJjbGVcbiAqIEBwYXJhbSB5IHtudW1iZXJ9IFRoZSBZIGNvb3JkaW5hdGUgb2YgdGhlIGNlbnRlciBvZiB0aGlzIGNpcmNsZVxuICogQHBhcmFtIHJhZGl1cyB7bnVtYmVyfSBUaGUgcmFkaXVzIG9mIHRoZSBjaXJjbGVcbiAqL1xuZnVuY3Rpb24gQ2lyY2xlKHgsIHksIHJhZGl1cylcbntcbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMFxuICAgICAqL1xuICAgIHRoaXMueCA9IHggfHwgMDtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAwXG4gICAgICovXG4gICAgdGhpcy55ID0geSB8fCAwO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDBcbiAgICAgKi9cbiAgICB0aGlzLnJhZGl1cyA9IHJhZGl1cyB8fCAwO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHR5cGUgb2YgdGhlIG9iamVjdCwgbWFpbmx5IHVzZWQgdG8gYXZvaWQgYGluc3RhbmNlb2ZgIGNoZWNrc1xuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMudHlwZSA9IENPTlNULlNIQVBFUy5DSVJDO1xufVxuXG5DaXJjbGUucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gQ2lyY2xlO1xubW9kdWxlLmV4cG9ydHMgPSBDaXJjbGU7XG5cbi8qKlxuICogQ3JlYXRlcyBhIGNsb25lIG9mIHRoaXMgQ2lyY2xlIGluc3RhbmNlXG4gKlxuICogQHJldHVybiB7UElYSS5DaXJjbGV9IGEgY29weSBvZiB0aGUgQ2lyY2xlXG4gKi9cbkNpcmNsZS5wcm90b3R5cGUuY2xvbmUgPSBmdW5jdGlvbiAoKVxue1xuICAgIHJldHVybiBuZXcgQ2lyY2xlKHRoaXMueCwgdGhpcy55LCB0aGlzLnJhZGl1cyk7XG59O1xuXG4vKipcbiAqIENoZWNrcyB3aGV0aGVyIHRoZSB4IGFuZCB5IGNvb3JkaW5hdGVzIGdpdmVuIGFyZSBjb250YWluZWQgd2l0aGluIHRoaXMgY2lyY2xlXG4gKlxuICogQHBhcmFtIHgge251bWJlcn0gVGhlIFggY29vcmRpbmF0ZSBvZiB0aGUgcG9pbnQgdG8gdGVzdFxuICogQHBhcmFtIHkge251bWJlcn0gVGhlIFkgY29vcmRpbmF0ZSBvZiB0aGUgcG9pbnQgdG8gdGVzdFxuICogQHJldHVybiB7Ym9vbGVhbn0gV2hldGhlciB0aGUgeC95IGNvb3JkaW5hdGVzIGFyZSB3aXRoaW4gdGhpcyBDaXJjbGVcbiAqL1xuQ2lyY2xlLnByb3RvdHlwZS5jb250YWlucyA9IGZ1bmN0aW9uICh4LCB5KVxue1xuICAgIGlmICh0aGlzLnJhZGl1cyA8PSAwKVxuICAgIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHZhciBkeCA9ICh0aGlzLnggLSB4KSxcbiAgICAgICAgZHkgPSAodGhpcy55IC0geSksXG4gICAgICAgIHIyID0gdGhpcy5yYWRpdXMgKiB0aGlzLnJhZGl1cztcblxuICAgIGR4ICo9IGR4O1xuICAgIGR5ICo9IGR5O1xuXG4gICAgcmV0dXJuIChkeCArIGR5IDw9IHIyKTtcbn07XG5cbi8qKlxuKiBSZXR1cm5zIHRoZSBmcmFtaW5nIHJlY3RhbmdsZSBvZiB0aGUgY2lyY2xlIGFzIGEgUmVjdGFuZ2xlIG9iamVjdFxuKlxuKiBAcmV0dXJuIHtQSVhJLlJlY3RhbmdsZX0gdGhlIGZyYW1pbmcgcmVjdGFuZ2xlXG4qL1xuQ2lyY2xlLnByb3RvdHlwZS5nZXRCb3VuZHMgPSBmdW5jdGlvbiAoKVxue1xuICAgIHJldHVybiBuZXcgUmVjdGFuZ2xlKHRoaXMueCAtIHRoaXMucmFkaXVzLCB0aGlzLnkgLSB0aGlzLnJhZGl1cywgdGhpcy5yYWRpdXMgKiAyLCB0aGlzLnJhZGl1cyAqIDIpO1xufTtcbiIsInZhciBSZWN0YW5nbGUgPSByZXF1aXJlKCcuL1JlY3RhbmdsZScpLFxuICAgIENPTlNUID0gcmVxdWlyZSgnLi4vLi4vY29uc3QnKTtcblxuLyoqXG4gKiBUaGUgRWxsaXBzZSBvYmplY3QgY2FuIGJlIHVzZWQgdG8gc3BlY2lmeSBhIGhpdCBhcmVhIGZvciBkaXNwbGF5T2JqZWN0c1xuICpcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqIEBwYXJhbSB4IHtudW1iZXJ9IFRoZSBYIGNvb3JkaW5hdGUgb2YgdGhlIGNlbnRlciBvZiB0aGUgZWxsaXBzZVxuICogQHBhcmFtIHkge251bWJlcn0gVGhlIFkgY29vcmRpbmF0ZSBvZiB0aGUgY2VudGVyIG9mIHRoZSBlbGxpcHNlXG4gKiBAcGFyYW0gd2lkdGgge251bWJlcn0gVGhlIGhhbGYgd2lkdGggb2YgdGhpcyBlbGxpcHNlXG4gKiBAcGFyYW0gaGVpZ2h0IHtudW1iZXJ9IFRoZSBoYWxmIGhlaWdodCBvZiB0aGlzIGVsbGlwc2VcbiAqL1xuZnVuY3Rpb24gRWxsaXBzZSh4LCB5LCB3aWR0aCwgaGVpZ2h0KVxue1xuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAwXG4gICAgICovXG4gICAgdGhpcy54ID0geCB8fCAwO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDBcbiAgICAgKi9cbiAgICB0aGlzLnkgPSB5IHx8IDA7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMFxuICAgICAqL1xuICAgIHRoaXMud2lkdGggPSB3aWR0aCB8fCAwO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDBcbiAgICAgKi9cbiAgICB0aGlzLmhlaWdodCA9IGhlaWdodCB8fCAwO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHR5cGUgb2YgdGhlIG9iamVjdCwgbWFpbmx5IHVzZWQgdG8gYXZvaWQgYGluc3RhbmNlb2ZgIGNoZWNrc1xuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMudHlwZSA9IENPTlNULlNIQVBFUy5FTElQO1xufVxuXG5FbGxpcHNlLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IEVsbGlwc2U7XG5tb2R1bGUuZXhwb3J0cyA9IEVsbGlwc2U7XG5cbi8qKlxuICogQ3JlYXRlcyBhIGNsb25lIG9mIHRoaXMgRWxsaXBzZSBpbnN0YW5jZVxuICpcbiAqIEByZXR1cm4ge1BJWEkuRWxsaXBzZX0gYSBjb3B5IG9mIHRoZSBlbGxpcHNlXG4gKi9cbkVsbGlwc2UucHJvdG90eXBlLmNsb25lID0gZnVuY3Rpb24gKClcbntcbiAgICByZXR1cm4gbmV3IEVsbGlwc2UodGhpcy54LCB0aGlzLnksIHRoaXMud2lkdGgsIHRoaXMuaGVpZ2h0KTtcbn07XG5cbi8qKlxuICogQ2hlY2tzIHdoZXRoZXIgdGhlIHggYW5kIHkgY29vcmRpbmF0ZXMgZ2l2ZW4gYXJlIGNvbnRhaW5lZCB3aXRoaW4gdGhpcyBlbGxpcHNlXG4gKlxuICogQHBhcmFtIHgge251bWJlcn0gVGhlIFggY29vcmRpbmF0ZSBvZiB0aGUgcG9pbnQgdG8gdGVzdFxuICogQHBhcmFtIHkge251bWJlcn0gVGhlIFkgY29vcmRpbmF0ZSBvZiB0aGUgcG9pbnQgdG8gdGVzdFxuICogQHJldHVybiB7Ym9vbGVhbn0gV2hldGhlciB0aGUgeC95IGNvb3JkcyBhcmUgd2l0aGluIHRoaXMgZWxsaXBzZVxuICovXG5FbGxpcHNlLnByb3RvdHlwZS5jb250YWlucyA9IGZ1bmN0aW9uICh4LCB5KVxue1xuICAgIGlmICh0aGlzLndpZHRoIDw9IDAgfHwgdGhpcy5oZWlnaHQgPD0gMClcbiAgICB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICAvL25vcm1hbGl6ZSB0aGUgY29vcmRzIHRvIGFuIGVsbGlwc2Ugd2l0aCBjZW50ZXIgMCwwXG4gICAgdmFyIG5vcm14ID0gKCh4IC0gdGhpcy54KSAvIHRoaXMud2lkdGgpLFxuICAgICAgICBub3JteSA9ICgoeSAtIHRoaXMueSkgLyB0aGlzLmhlaWdodCk7XG5cbiAgICBub3JteCAqPSBub3JteDtcbiAgICBub3JteSAqPSBub3JteTtcblxuICAgIHJldHVybiAobm9ybXggKyBub3JteSA8PSAxKTtcbn07XG5cbi8qKlxuICogUmV0dXJucyB0aGUgZnJhbWluZyByZWN0YW5nbGUgb2YgdGhlIGVsbGlwc2UgYXMgYSBSZWN0YW5nbGUgb2JqZWN0XG4gKlxuICogQHJldHVybiB7UElYSS5SZWN0YW5nbGV9IHRoZSBmcmFtaW5nIHJlY3RhbmdsZVxuICovXG5FbGxpcHNlLnByb3RvdHlwZS5nZXRCb3VuZHMgPSBmdW5jdGlvbiAoKVxue1xuICAgIHJldHVybiBuZXcgUmVjdGFuZ2xlKHRoaXMueCAtIHRoaXMud2lkdGgsIHRoaXMueSAtIHRoaXMuaGVpZ2h0LCB0aGlzLndpZHRoLCB0aGlzLmhlaWdodCk7XG59O1xuIiwidmFyIFBvaW50ID0gcmVxdWlyZSgnLi4vUG9pbnQnKSxcbiAgICBDT05TVCA9IHJlcXVpcmUoJy4uLy4uL2NvbnN0Jyk7XG5cbi8qKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIHBvaW50cyB7UElYSS5Qb2ludFtdfG51bWJlcltdfC4uLlBJWEkuUG9pbnR8Li4ubnVtYmVyfSBUaGlzIGNhbiBiZSBhbiBhcnJheSBvZiBQb2ludHMgdGhhdCBmb3JtIHRoZSBwb2x5Z29uLFxuICogICAgICBhIGZsYXQgYXJyYXkgb2YgbnVtYmVycyB0aGF0IHdpbGwgYmUgaW50ZXJwcmV0ZWQgYXMgW3gseSwgeCx5LCAuLi5dLCBvciB0aGUgYXJndW1lbnRzIHBhc3NlZCBjYW4gYmVcbiAqICAgICAgYWxsIHRoZSBwb2ludHMgb2YgdGhlIHBvbHlnb24gZS5nLiBgbmV3IFBJWEkuUG9seWdvbihuZXcgUElYSS5Qb2ludCgpLCBuZXcgUElYSS5Qb2ludCgpLCAuLi4pYCwgb3IgdGhlXG4gKiAgICAgIGFyZ3VtZW50cyBwYXNzZWQgY2FuIGJlIGZsYXQgeCx5IHZhbHVlcyBlLmcuIGBuZXcgUG9seWdvbih4LHksIHgseSwgeCx5LCAuLi4pYCB3aGVyZSBgeGAgYW5kIGB5YCBhcmVcbiAqICAgICAgTnVtYmVycy5cbiAqL1xuZnVuY3Rpb24gUG9seWdvbihwb2ludHNfKVxue1xuICAgIC8vIHByZXZlbnRzIGFuIGFyZ3VtZW50IGFzc2lnbm1lbnQgZGVvcHRcbiAgICAvLyBzZWUgc2VjdGlvbiAzLjE6IGh0dHBzOi8vZ2l0aHViLmNvbS9wZXRrYWFudG9ub3YvYmx1ZWJpcmQvd2lraS9PcHRpbWl6YXRpb24ta2lsbGVycyMzLW1hbmFnaW5nLWFyZ3VtZW50c1xuICAgIHZhciBwb2ludHMgPSBwb2ludHNfO1xuXG4gICAgLy9pZiBwb2ludHMgaXNuJ3QgYW4gYXJyYXksIHVzZSBhcmd1bWVudHMgYXMgdGhlIGFycmF5XG4gICAgaWYgKCFBcnJheS5pc0FycmF5KHBvaW50cykpXG4gICAge1xuICAgICAgICAvLyBwcmV2ZW50cyBhbiBhcmd1bWVudCBsZWFrIGRlb3B0XG4gICAgICAgIC8vIHNlZSBzZWN0aW9uIDMuMjogaHR0cHM6Ly9naXRodWIuY29tL3BldGthYW50b25vdi9ibHVlYmlyZC93aWtpL09wdGltaXphdGlvbi1raWxsZXJzIzMtbWFuYWdpbmctYXJndW1lbnRzXG4gICAgICAgIHBvaW50cyA9IG5ldyBBcnJheShhcmd1bWVudHMubGVuZ3RoKTtcblxuICAgICAgICBmb3IgKHZhciBhID0gMDsgYSA8IHBvaW50cy5sZW5ndGg7ICsrYSkge1xuICAgICAgICAgICAgcG9pbnRzW2FdID0gYXJndW1lbnRzW2FdO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gaWYgdGhpcyBpcyBhbiBhcnJheSBvZiBwb2ludHMsIGNvbnZlcnQgaXQgdG8gYSBmbGF0IGFycmF5IG9mIG51bWJlcnNcbiAgICBpZiAocG9pbnRzWzBdIGluc3RhbmNlb2YgUG9pbnQpXG4gICAge1xuICAgICAgICB2YXIgcCA9IFtdO1xuICAgICAgICBmb3IgKHZhciBpID0gMCwgaWwgPSBwb2ludHMubGVuZ3RoOyBpIDwgaWw7IGkrKylcbiAgICAgICAge1xuICAgICAgICAgICAgcC5wdXNoKHBvaW50c1tpXS54LCBwb2ludHNbaV0ueSk7XG4gICAgICAgIH1cblxuICAgICAgICBwb2ludHMgPSBwO1xuICAgIH1cblxuICAgIHRoaXMuY2xvc2VkID0gdHJ1ZTtcblxuICAgIC8qKlxuICAgICAqIEFuIGFycmF5IG9mIHRoZSBwb2ludHMgb2YgdGhpcyBwb2x5Z29uXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJbXX1cbiAgICAgKi9cbiAgICB0aGlzLnBvaW50cyA9IHBvaW50cztcblxuICAgIC8qKlxuICAgICAqIFRoZSB0eXBlIG9mIHRoZSBvYmplY3QsIG1haW5seSB1c2VkIHRvIGF2b2lkIGBpbnN0YW5jZW9mYCBjaGVja3NcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLnR5cGUgPSBDT05TVC5TSEFQRVMuUE9MWTtcbn1cblxuUG9seWdvbi5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBQb2x5Z29uO1xubW9kdWxlLmV4cG9ydHMgPSBQb2x5Z29uO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBjbG9uZSBvZiB0aGlzIHBvbHlnb25cbiAqXG4gKiBAcmV0dXJuIHtQSVhJLlBvbHlnb259IGEgY29weSBvZiB0aGUgcG9seWdvblxuICovXG5Qb2x5Z29uLnByb3RvdHlwZS5jbG9uZSA9IGZ1bmN0aW9uICgpXG57XG4gICAgcmV0dXJuIG5ldyBQb2x5Z29uKHRoaXMucG9pbnRzLnNsaWNlKCkpO1xufTtcblxuLyoqXG4gKiBDaGVja3Mgd2hldGhlciB0aGUgeCBhbmQgeSBjb29yZGluYXRlcyBwYXNzZWQgdG8gdGhpcyBmdW5jdGlvbiBhcmUgY29udGFpbmVkIHdpdGhpbiB0aGlzIHBvbHlnb25cbiAqXG4gKiBAcGFyYW0geCB7bnVtYmVyfSBUaGUgWCBjb29yZGluYXRlIG9mIHRoZSBwb2ludCB0byB0ZXN0XG4gKiBAcGFyYW0geSB7bnVtYmVyfSBUaGUgWSBjb29yZGluYXRlIG9mIHRoZSBwb2ludCB0byB0ZXN0XG4gKiBAcmV0dXJuIHtib29sZWFufSBXaGV0aGVyIHRoZSB4L3kgY29vcmRpbmF0ZXMgYXJlIHdpdGhpbiB0aGlzIHBvbHlnb25cbiAqL1xuUG9seWdvbi5wcm90b3R5cGUuY29udGFpbnMgPSBmdW5jdGlvbiAoeCwgeSlcbntcbiAgICB2YXIgaW5zaWRlID0gZmFsc2U7XG5cbiAgICAvLyB1c2Ugc29tZSByYXljYXN0aW5nIHRvIHRlc3QgaGl0c1xuICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9zdWJzdGFjay9wb2ludC1pbi1wb2x5Z29uL2Jsb2IvbWFzdGVyL2luZGV4LmpzXG4gICAgdmFyIGxlbmd0aCA9IHRoaXMucG9pbnRzLmxlbmd0aCAvIDI7XG5cbiAgICBmb3IgKHZhciBpID0gMCwgaiA9IGxlbmd0aCAtIDE7IGkgPCBsZW5ndGg7IGogPSBpKyspXG4gICAge1xuICAgICAgICB2YXIgeGkgPSB0aGlzLnBvaW50c1tpICogMl0sIHlpID0gdGhpcy5wb2ludHNbaSAqIDIgKyAxXSxcbiAgICAgICAgICAgIHhqID0gdGhpcy5wb2ludHNbaiAqIDJdLCB5aiA9IHRoaXMucG9pbnRzW2ogKiAyICsgMV0sXG4gICAgICAgICAgICBpbnRlcnNlY3QgPSAoKHlpID4geSkgIT09ICh5aiA+IHkpKSAmJiAoeCA8ICh4aiAtIHhpKSAqICh5IC0geWkpIC8gKHlqIC0geWkpICsgeGkpO1xuXG4gICAgICAgIGlmIChpbnRlcnNlY3QpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGluc2lkZSA9ICFpbnNpZGU7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gaW5zaWRlO1xufTtcbiIsInZhciBDT05TVCA9IHJlcXVpcmUoJy4uLy4uL2NvbnN0Jyk7XG5cbi8qKlxuICogdGhlIFJlY3RhbmdsZSBvYmplY3QgaXMgYW4gYXJlYSBkZWZpbmVkIGJ5IGl0cyBwb3NpdGlvbiwgYXMgaW5kaWNhdGVkIGJ5IGl0cyB0b3AtbGVmdCBjb3JuZXIgcG9pbnQgKHgsIHkpIGFuZCBieSBpdHMgd2lkdGggYW5kIGl0cyBoZWlnaHQuXG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIHgge251bWJlcn0gVGhlIFggY29vcmRpbmF0ZSBvZiB0aGUgdXBwZXItbGVmdCBjb3JuZXIgb2YgdGhlIHJlY3RhbmdsZVxuICogQHBhcmFtIHkge251bWJlcn0gVGhlIFkgY29vcmRpbmF0ZSBvZiB0aGUgdXBwZXItbGVmdCBjb3JuZXIgb2YgdGhlIHJlY3RhbmdsZVxuICogQHBhcmFtIHdpZHRoIHtudW1iZXJ9IFRoZSBvdmVyYWxsIHdpZHRoIG9mIHRoaXMgcmVjdGFuZ2xlXG4gKiBAcGFyYW0gaGVpZ2h0IHtudW1iZXJ9IFRoZSBvdmVyYWxsIGhlaWdodCBvZiB0aGlzIHJlY3RhbmdsZVxuICovXG5mdW5jdGlvbiBSZWN0YW5nbGUoeCwgeSwgd2lkdGgsIGhlaWdodClcbntcbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMFxuICAgICAqL1xuICAgIHRoaXMueCA9IHggfHwgMDtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAwXG4gICAgICovXG4gICAgdGhpcy55ID0geSB8fCAwO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDBcbiAgICAgKi9cbiAgICB0aGlzLndpZHRoID0gd2lkdGggfHwgMDtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAwXG4gICAgICovXG4gICAgdGhpcy5oZWlnaHQgPSBoZWlnaHQgfHwgMDtcblxuICAgIC8qKlxuICAgICAqIFRoZSB0eXBlIG9mIHRoZSBvYmplY3QsIG1haW5seSB1c2VkIHRvIGF2b2lkIGBpbnN0YW5jZW9mYCBjaGVja3NcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLnR5cGUgPSBDT05TVC5TSEFQRVMuUkVDVDtcbn1cblxuUmVjdGFuZ2xlLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFJlY3RhbmdsZTtcbm1vZHVsZS5leHBvcnRzID0gUmVjdGFuZ2xlO1xuXG4vKipcbiAqIEEgY29uc3RhbnQgZW1wdHkgcmVjdGFuZ2xlLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBjb25zdGFudFxuICovXG5SZWN0YW5nbGUuRU1QVFkgPSBuZXcgUmVjdGFuZ2xlKDAsIDAsIDAsIDApO1xuXG5cbi8qKlxuICogQ3JlYXRlcyBhIGNsb25lIG9mIHRoaXMgUmVjdGFuZ2xlXG4gKlxuICogQHJldHVybiB7UElYSS5SZWN0YW5nbGV9IGEgY29weSBvZiB0aGUgcmVjdGFuZ2xlXG4gKi9cblJlY3RhbmdsZS5wcm90b3R5cGUuY2xvbmUgPSBmdW5jdGlvbiAoKVxue1xuICAgIHJldHVybiBuZXcgUmVjdGFuZ2xlKHRoaXMueCwgdGhpcy55LCB0aGlzLndpZHRoLCB0aGlzLmhlaWdodCk7XG59O1xuXG4vKipcbiAqIENoZWNrcyB3aGV0aGVyIHRoZSB4IGFuZCB5IGNvb3JkaW5hdGVzIGdpdmVuIGFyZSBjb250YWluZWQgd2l0aGluIHRoaXMgUmVjdGFuZ2xlXG4gKlxuICogQHBhcmFtIHgge251bWJlcn0gVGhlIFggY29vcmRpbmF0ZSBvZiB0aGUgcG9pbnQgdG8gdGVzdFxuICogQHBhcmFtIHkge251bWJlcn0gVGhlIFkgY29vcmRpbmF0ZSBvZiB0aGUgcG9pbnQgdG8gdGVzdFxuICogQHJldHVybiB7Ym9vbGVhbn0gV2hldGhlciB0aGUgeC95IGNvb3JkaW5hdGVzIGFyZSB3aXRoaW4gdGhpcyBSZWN0YW5nbGVcbiAqL1xuUmVjdGFuZ2xlLnByb3RvdHlwZS5jb250YWlucyA9IGZ1bmN0aW9uICh4LCB5KVxue1xuICAgIGlmICh0aGlzLndpZHRoIDw9IDAgfHwgdGhpcy5oZWlnaHQgPD0gMClcbiAgICB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBpZiAoeCA+PSB0aGlzLnggJiYgeCA8IHRoaXMueCArIHRoaXMud2lkdGgpXG4gICAge1xuICAgICAgICBpZiAoeSA+PSB0aGlzLnkgJiYgeSA8IHRoaXMueSArIHRoaXMuaGVpZ2h0KVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBmYWxzZTtcbn07XG4iLCJ2YXIgQ09OU1QgPSByZXF1aXJlKCcuLi8uLi9jb25zdCcpO1xuXG4vKipcbiAqIFRoZSBSb3VuZGVkIFJlY3RhbmdsZSBvYmplY3QgaXMgYW4gYXJlYSB0aGF0IGhhcyBuaWNlIHJvdW5kZWQgY29ybmVycywgYXMgaW5kaWNhdGVkIGJ5IGl0cyB0b3AtbGVmdCBjb3JuZXIgcG9pbnQgKHgsIHkpIGFuZCBieSBpdHMgd2lkdGggYW5kIGl0cyBoZWlnaHQgYW5kIGl0cyByYWRpdXMuXG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIHgge251bWJlcn0gVGhlIFggY29vcmRpbmF0ZSBvZiB0aGUgdXBwZXItbGVmdCBjb3JuZXIgb2YgdGhlIHJvdW5kZWQgcmVjdGFuZ2xlXG4gKiBAcGFyYW0geSB7bnVtYmVyfSBUaGUgWSBjb29yZGluYXRlIG9mIHRoZSB1cHBlci1sZWZ0IGNvcm5lciBvZiB0aGUgcm91bmRlZCByZWN0YW5nbGVcbiAqIEBwYXJhbSB3aWR0aCB7bnVtYmVyfSBUaGUgb3ZlcmFsbCB3aWR0aCBvZiB0aGlzIHJvdW5kZWQgcmVjdGFuZ2xlXG4gKiBAcGFyYW0gaGVpZ2h0IHtudW1iZXJ9IFRoZSBvdmVyYWxsIGhlaWdodCBvZiB0aGlzIHJvdW5kZWQgcmVjdGFuZ2xlXG4gKiBAcGFyYW0gcmFkaXVzIHtudW1iZXJ9IENvbnRyb2xzIHRoZSByYWRpdXMgb2YgdGhlIHJvdW5kZWQgY29ybmVyc1xuICovXG5mdW5jdGlvbiBSb3VuZGVkUmVjdGFuZ2xlKHgsIHksIHdpZHRoLCBoZWlnaHQsIHJhZGl1cylcbntcbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMFxuICAgICAqL1xuICAgIHRoaXMueCA9IHggfHwgMDtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAwXG4gICAgICovXG4gICAgdGhpcy55ID0geSB8fCAwO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDBcbiAgICAgKi9cbiAgICB0aGlzLndpZHRoID0gd2lkdGggfHwgMDtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAwXG4gICAgICovXG4gICAgdGhpcy5oZWlnaHQgPSBoZWlnaHQgfHwgMDtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAyMFxuICAgICAqL1xuICAgIHRoaXMucmFkaXVzID0gcmFkaXVzIHx8IDIwO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHR5cGUgb2YgdGhlIG9iamVjdCwgbWFpbmx5IHVzZWQgdG8gYXZvaWQgYGluc3RhbmNlb2ZgIGNoZWNrc1xuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMudHlwZSA9IENPTlNULlNIQVBFUy5SUkVDO1xufVxuXG5Sb3VuZGVkUmVjdGFuZ2xlLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFJvdW5kZWRSZWN0YW5nbGU7XG5tb2R1bGUuZXhwb3J0cyA9IFJvdW5kZWRSZWN0YW5nbGU7XG5cbi8qKlxuICogQ3JlYXRlcyBhIGNsb25lIG9mIHRoaXMgUm91bmRlZCBSZWN0YW5nbGVcbiAqXG4gKiBAcmV0dXJuIHtQSVhJLlJvdW5kZWRSZWN0YW5nbGV9IGEgY29weSBvZiB0aGUgcm91bmRlZCByZWN0YW5nbGVcbiAqL1xuUm91bmRlZFJlY3RhbmdsZS5wcm90b3R5cGUuY2xvbmUgPSBmdW5jdGlvbiAoKVxue1xuICAgIHJldHVybiBuZXcgUm91bmRlZFJlY3RhbmdsZSh0aGlzLngsIHRoaXMueSwgdGhpcy53aWR0aCwgdGhpcy5oZWlnaHQsIHRoaXMucmFkaXVzKTtcbn07XG5cbi8qKlxuICogQ2hlY2tzIHdoZXRoZXIgdGhlIHggYW5kIHkgY29vcmRpbmF0ZXMgZ2l2ZW4gYXJlIGNvbnRhaW5lZCB3aXRoaW4gdGhpcyBSb3VuZGVkIFJlY3RhbmdsZVxuICpcbiAqIEBwYXJhbSB4IHtudW1iZXJ9IFRoZSBYIGNvb3JkaW5hdGUgb2YgdGhlIHBvaW50IHRvIHRlc3RcbiAqIEBwYXJhbSB5IHtudW1iZXJ9IFRoZSBZIGNvb3JkaW5hdGUgb2YgdGhlIHBvaW50IHRvIHRlc3RcbiAqIEByZXR1cm4ge2Jvb2xlYW59IFdoZXRoZXIgdGhlIHgveSBjb29yZGluYXRlcyBhcmUgd2l0aGluIHRoaXMgUm91bmRlZCBSZWN0YW5nbGVcbiAqL1xuUm91bmRlZFJlY3RhbmdsZS5wcm90b3R5cGUuY29udGFpbnMgPSBmdW5jdGlvbiAoeCwgeSlcbntcbiAgICBpZiAodGhpcy53aWR0aCA8PSAwIHx8IHRoaXMuaGVpZ2h0IDw9IDApXG4gICAge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgaWYgKHggPj0gdGhpcy54ICYmIHggPD0gdGhpcy54ICsgdGhpcy53aWR0aClcbiAgICB7XG4gICAgICAgIGlmICh5ID49IHRoaXMueSAmJiB5IDw9IHRoaXMueSArIHRoaXMuaGVpZ2h0KVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBmYWxzZTtcbn07XG4iLCJ2YXIgQ29udGFpbmVyID0gcmVxdWlyZSgnLi4vZGlzcGxheS9Db250YWluZXInKSxcbiAgICBDT05TVCA9IHJlcXVpcmUoJy4uL2NvbnN0Jyk7XG5cbi8qKlxuICogVGhlIFBhcnRpY2xlQ29udGFpbmVyIGNsYXNzIGlzIGEgcmVhbGx5IGZhc3QgdmVyc2lvbiBvZiB0aGUgQ29udGFpbmVyIGJ1aWx0IHNvbGVseSBmb3Igc3BlZWQsXG4gKiBzbyB1c2Ugd2hlbiB5b3UgbmVlZCBhIGxvdCBvZiBzcHJpdGVzIG9yIHBhcnRpY2xlcy4gVGhlIHRyYWRlb2ZmIG9mIHRoZSBQYXJ0aWNsZUNvbnRhaW5lciBpcyB0aGF0IGFkdmFuY2VkXG4gKiBmdW5jdGlvbmFsaXR5IHdpbGwgbm90IHdvcmsuIFBhcnRpY2xlQ29udGFpbmVyIGltcGxlbWVudHMgb25seSB0aGUgYmFzaWMgb2JqZWN0IHRyYW5zZm9ybSAocG9zaXRpb24sIHNjYWxlLCByb3RhdGlvbikuXG4gKiBBbnkgb3RoZXIgZnVuY3Rpb25hbGl0eSBsaWtlIHRpbnRpbmcsIG1hc2tpbmcsIGV0YyB3aWxsIG5vdCB3b3JrIG9uIHNwcml0ZXMgaW4gdGhpcyBiYXRjaC5cbiAqXG4gKiBJdCdzIGV4dHJlbWVseSBlYXN5IHRvIHVzZSA6XG4gKlxuICogYGBganNcbiAqIHZhciBjb250YWluZXIgPSBuZXcgUGFydGljbGVDb250YWluZXIoKTtcbiAqXG4gKiBmb3IgKHZhciBpID0gMDsgaSA8IDEwMDsgKytpKVxuICoge1xuICogICAgIHZhciBzcHJpdGUgPSBuZXcgUElYSS5TcHJpdGUuZnJvbUltYWdlKFwibXlJbWFnZS5wbmdcIik7XG4gKiAgICAgY29udGFpbmVyLmFkZENoaWxkKHNwcml0ZSk7XG4gKiB9XG4gKiBgYGBcbiAqXG4gKiBBbmQgaGVyZSB5b3UgaGF2ZSBhIGh1bmRyZWQgc3ByaXRlcyB0aGF0IHdpbGwgYmUgcmVuZGVyZXIgYXQgdGhlIHNwZWVkIG9mIGxpZ2h0LlxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5Db250YWluZXJcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gW21heFNpemU9MTUwMDBdIHtudW1iZXJ9IFRoZSBtYXhpbXVtIG51bWJlciBvZiBwYXJ0aWNsZXMgdGhhdCBjYW4gYmUgcmVuZGVyZXIgYnkgdGhlIGNvbnRhaW5lci5cbiAqIEBwYXJhbSBbcHJvcGVydGllc10ge29iamVjdH0gVGhlIHByb3BlcnRpZXMgb2YgY2hpbGRyZW4gdGhhdCBzaG91bGQgYmUgdXBsb2FkZWQgdG8gdGhlIGdwdSBhbmQgYXBwbGllZC5cbiAqIEBwYXJhbSBbcHJvcGVydGllcy5zY2FsZT1mYWxzZV0ge2Jvb2xlYW59IFdoZW4gdHJ1ZSwgc2NhbGUgYmUgdXBsb2FkZWQgYW5kIGFwcGxpZWQuXG4gKiBAcGFyYW0gW3Byb3BlcnRpZXMucG9zaXRpb249dHJ1ZV0ge2Jvb2xlYW59IFdoZW4gdHJ1ZSwgcG9zaXRpb24gYmUgdXBsb2FkZWQgYW5kIGFwcGxpZWQuXG4gKiBAcGFyYW0gW3Byb3BlcnRpZXMucm90YXRpb249ZmFsc2VdIHtib29sZWFufSBXaGVuIHRydWUsIHJvdGF0aW9uIGJlIHVwbG9hZGVkIGFuZCBhcHBsaWVkLlxuICogQHBhcmFtIFtwcm9wZXJ0aWVzLnV2cz1mYWxzZV0ge2Jvb2xlYW59IFdoZW4gdHJ1ZSwgdXZzIGJlIHVwbG9hZGVkIGFuZCBhcHBsaWVkLlxuICogQHBhcmFtIFtwcm9wZXJ0aWVzLmFscGhhPWZhbHNlXSB7Ym9vbGVhbn0gV2hlbiB0cnVlLCBhbHBoYSBiZSB1cGxvYWRlZCBhbmQgYXBwbGllZC5cbiAqIEBwYXJhbSBbYmF0Y2hTaXplPTE1MDAwXSB7bnVtYmVyfSBOdW1iZXIgb2YgcGFydGljbGVzIHBlciBiYXRjaC5cbiAqL1xuZnVuY3Rpb24gUGFydGljbGVDb250YWluZXIobWF4U2l6ZSwgcHJvcGVydGllcywgYmF0Y2hTaXplKVxue1xuICAgIENvbnRhaW5lci5jYWxsKHRoaXMpO1xuXG4gICAgYmF0Y2hTaXplID0gYmF0Y2hTaXplIHx8IDE1MDAwOyAvL0NPTlNULlNQUklURV9CQVRDSF9TSVpFOyAvLyAyMDAwIGlzIGEgbmljZSBiYWxhbmNlIGJldHdlZW4gbW9iaWxlIC8gZGVza3RvcFxuICAgIG1heFNpemUgPSBtYXhTaXplIHx8IDE1MDAwO1xuXG4gICAgLy8gTWFraW5nIHN1cmUgdGhlIGJhdGNoIHNpemUgaXMgdmFsaWRcbiAgICAvLyA2NTUzNSBpcyBtYXggdmVydGV4IGluZGV4IGluIHRoZSBpbmRleCBidWZmZXIgKHNlZSBQYXJ0aWNsZVJlbmRlcmVyKVxuICAgIC8vIHNvIG1heCBudW1iZXIgb2YgcGFydGljbGVzIGlzIDY1NTM2IC8gNCA9IDE2Mzg0XG4gICAgdmFyIG1heEJhdGNoU2l6ZSA9IDE2Mzg0O1xuICAgIGlmIChiYXRjaFNpemUgPiBtYXhCYXRjaFNpemUpIHtcbiAgICAgICAgYmF0Y2hTaXplID0gbWF4QmF0Y2hTaXplO1xuICAgIH1cblxuICAgIGlmIChiYXRjaFNpemUgPiBtYXhTaXplKSB7XG4gICAgICAgIGJhdGNoU2l6ZSA9IG1heFNpemU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2V0IHByb3BlcnRpZXMgdG8gYmUgZHluYW1pYyAodHJ1ZSkgLyBzdGF0aWMgKGZhbHNlKVxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbltdfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fcHJvcGVydGllcyA9IFtmYWxzZSwgdHJ1ZSwgZmFsc2UsIGZhbHNlLCBmYWxzZV07XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9tYXhTaXplID0gbWF4U2l6ZTtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX2JhdGNoU2l6ZSA9IGJhdGNoU2l6ZTtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge1dlYkdMQnVmZmVyfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fYnVmZmVycyA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9idWZmZXJUb1VwZGF0ZSA9IDA7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqXG4gICAgICovXG4gICAgdGhpcy5pbnRlcmFjdGl2ZUNoaWxkcmVuID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYmxlbmQgbW9kZSB0byBiZSBhcHBsaWVkIHRvIHRoZSBzcHJpdGUuIEFwcGx5IGEgdmFsdWUgb2YgYFBJWEkuQkxFTkRfTU9ERVMuTk9STUFMYCB0byByZXNldCB0aGUgYmxlbmQgbW9kZS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCBQSVhJLkJMRU5EX01PREVTLk5PUk1BTFxuICAgICAqIEBzZWUgUElYSS5CTEVORF9NT0RFU1xuICAgICAqL1xuICAgIHRoaXMuYmxlbmRNb2RlID0gQ09OU1QuQkxFTkRfTU9ERVMuTk9STUFMO1xuXG4gICAgLyoqXG4gICAgICogVXNlZCBmb3IgY2FudmFzIHJlbmRlcmVyaW5nLiBJZiB0cnVlIHRoZW4gdGhlIGVsZW1lbnRzIHdpbGwgYmUgcG9zaXRpb25lZCBhdCB0aGUgbmVhcmVzdCBwaXhlbC4gVGhpcyBwcm92aWRlcyBhIG5pY2Ugc3BlZWQgYm9vc3QuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqIEBkZWZhdWx0IHRydWU7XG4gICAgICovXG4gICAgdGhpcy5yb3VuZFBpeGVscyA9IHRydWU7XG5cbiAgICB0aGlzLnNldFByb3BlcnRpZXMocHJvcGVydGllcyk7XG59XG5cblBhcnRpY2xlQ29udGFpbmVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoQ29udGFpbmVyLnByb3RvdHlwZSk7XG5QYXJ0aWNsZUNvbnRhaW5lci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBQYXJ0aWNsZUNvbnRhaW5lcjtcbm1vZHVsZS5leHBvcnRzID0gUGFydGljbGVDb250YWluZXI7XG5cbi8qKlxuICogU2V0cyB0aGUgcHJpdmF0ZSBwcm9wZXJ0aWVzIGFycmF5IHRvIGR5bmFtaWMgLyBzdGF0aWMgYmFzZWQgb24gdGhlIHBhc3NlZCBwcm9wZXJ0aWVzIG9iamVjdFxuICpcbiAqIEBwYXJhbSBwcm9wZXJ0aWVzIHtvYmplY3R9IFRoZSBwcm9wZXJ0aWVzIHRvIGJlIHVwbG9hZGVkXG4gKi9cblBhcnRpY2xlQ29udGFpbmVyLnByb3RvdHlwZS5zZXRQcm9wZXJ0aWVzID0gZnVuY3Rpb24ocHJvcGVydGllcylcbntcbiAgICBpZiAoIHByb3BlcnRpZXMgKSB7XG4gICAgICAgIHRoaXMuX3Byb3BlcnRpZXNbMF0gPSAnc2NhbGUnIGluIHByb3BlcnRpZXMgPyAhIXByb3BlcnRpZXMuc2NhbGUgOiB0aGlzLl9wcm9wZXJ0aWVzWzBdO1xuICAgICAgICB0aGlzLl9wcm9wZXJ0aWVzWzFdID0gJ3Bvc2l0aW9uJyBpbiBwcm9wZXJ0aWVzID8gISFwcm9wZXJ0aWVzLnBvc2l0aW9uIDogdGhpcy5fcHJvcGVydGllc1sxXTtcbiAgICAgICAgdGhpcy5fcHJvcGVydGllc1syXSA9ICdyb3RhdGlvbicgaW4gcHJvcGVydGllcyA/ICEhcHJvcGVydGllcy5yb3RhdGlvbiA6IHRoaXMuX3Byb3BlcnRpZXNbMl07XG4gICAgICAgIHRoaXMuX3Byb3BlcnRpZXNbM10gPSAndXZzJyBpbiBwcm9wZXJ0aWVzID8gISFwcm9wZXJ0aWVzLnV2cyA6IHRoaXMuX3Byb3BlcnRpZXNbM107XG4gICAgICAgIHRoaXMuX3Byb3BlcnRpZXNbNF0gPSAnYWxwaGEnIGluIHByb3BlcnRpZXMgPyAhIXByb3BlcnRpZXMuYWxwaGEgOiB0aGlzLl9wcm9wZXJ0aWVzWzRdO1xuICAgIH1cbn07XG5cbi8qKlxuICogVXBkYXRlcyB0aGUgb2JqZWN0IHRyYW5zZm9ybSBmb3IgcmVuZGVyaW5nXG4gKlxuICogQHByaXZhdGVcbiAqL1xuUGFydGljbGVDb250YWluZXIucHJvdG90eXBlLnVwZGF0ZVRyYW5zZm9ybSA9IGZ1bmN0aW9uICgpXG57XG5cbiAgICAvLyBUT0RPIGRvbid0IG5lZWQgdG8hXG4gICAgdGhpcy5kaXNwbGF5T2JqZWN0VXBkYXRlVHJhbnNmb3JtKCk7XG4gICAgLy8gIFBJWEkuQ29udGFpbmVyLnByb3RvdHlwZS51cGRhdGVUcmFuc2Zvcm0uY2FsbCggdGhpcyApO1xufTtcblxuLyoqXG4gKiBSZW5kZXJzIHRoZSBjb250YWluZXIgdXNpbmcgdGhlIFdlYkdMIHJlbmRlcmVyXG4gKlxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLldlYkdMUmVuZGVyZXJ9IFRoZSB3ZWJnbCByZW5kZXJlclxuICogQHByaXZhdGVcbiAqL1xuUGFydGljbGVDb250YWluZXIucHJvdG90eXBlLnJlbmRlcldlYkdMID0gZnVuY3Rpb24gKHJlbmRlcmVyKVxue1xuICAgIGlmICghdGhpcy52aXNpYmxlIHx8IHRoaXMud29ybGRBbHBoYSA8PSAwIHx8ICF0aGlzLmNoaWxkcmVuLmxlbmd0aCB8fCAhdGhpcy5yZW5kZXJhYmxlKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHJlbmRlcmVyLnNldE9iamVjdFJlbmRlcmVyKCByZW5kZXJlci5wbHVnaW5zLnBhcnRpY2xlICk7XG4gICAgcmVuZGVyZXIucGx1Z2lucy5wYXJ0aWNsZS5yZW5kZXIoIHRoaXMgKTtcbn07XG5cbi8qKlxuICogU2V0IHRoZSBmbGFnIHRoYXQgc3RhdGljIGRhdGEgc2hvdWxkIGJlIHVwZGF0ZWQgdG8gdHJ1ZVxuICpcbiAqIEBwcml2YXRlXG4gKi9cblBhcnRpY2xlQ29udGFpbmVyLnByb3RvdHlwZS5vbkNoaWxkcmVuQ2hhbmdlID0gZnVuY3Rpb24gKHNtYWxsZXN0Q2hpbGRJbmRleClcbntcbiAgICB2YXIgYnVmZmVySW5kZXggPSBNYXRoLmZsb29yKHNtYWxsZXN0Q2hpbGRJbmRleCAvIHRoaXMuX2JhdGNoU2l6ZSk7XG4gICAgaWYgKGJ1ZmZlckluZGV4IDwgdGhpcy5fYnVmZmVyVG9VcGRhdGUpIHtcbiAgICAgICAgdGhpcy5fYnVmZmVyVG9VcGRhdGUgPSBidWZmZXJJbmRleDtcbiAgICB9XG59O1xuXG4vKipcbiAqIFJlbmRlcnMgdGhlIG9iamVjdCB1c2luZyB0aGUgQ2FudmFzIHJlbmRlcmVyXG4gKlxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLkNhbnZhc1JlbmRlcmVyfSBUaGUgY2FudmFzIHJlbmRlcmVyXG4gKiBAcHJpdmF0ZVxuICovXG5QYXJ0aWNsZUNvbnRhaW5lci5wcm90b3R5cGUucmVuZGVyQ2FudmFzID0gZnVuY3Rpb24gKHJlbmRlcmVyKVxue1xuICAgIGlmICghdGhpcy52aXNpYmxlIHx8IHRoaXMud29ybGRBbHBoYSA8PSAwIHx8ICF0aGlzLmNoaWxkcmVuLmxlbmd0aCB8fCAhdGhpcy5yZW5kZXJhYmxlKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHZhciBjb250ZXh0ID0gcmVuZGVyZXIuY29udGV4dDtcbiAgICB2YXIgdHJhbnNmb3JtID0gdGhpcy53b3JsZFRyYW5zZm9ybTtcbiAgICB2YXIgaXNSb3RhdGVkID0gdHJ1ZTtcblxuICAgIHZhciBwb3NpdGlvblggPSAwO1xuICAgIHZhciBwb3NpdGlvblkgPSAwO1xuXG4gICAgdmFyIGZpbmFsV2lkdGggPSAwO1xuICAgIHZhciBmaW5hbEhlaWdodCA9IDA7XG5cbiAgICB2YXIgY29tcG9zaXRlT3BlcmF0aW9uID0gcmVuZGVyZXIuYmxlbmRNb2Rlc1t0aGlzLmJsZW5kTW9kZV07XG4gICAgaWYgKGNvbXBvc2l0ZU9wZXJhdGlvbiAhPT0gY29udGV4dC5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb24pXG4gICAge1xuICAgICAgICBjb250ZXh0Lmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbiA9IGNvbXBvc2l0ZU9wZXJhdGlvbjtcbiAgICB9XG5cbiAgICBjb250ZXh0Lmdsb2JhbEFscGhhID0gdGhpcy53b3JsZEFscGhhO1xuXG4gICAgdGhpcy5kaXNwbGF5T2JqZWN0VXBkYXRlVHJhbnNmb3JtKCk7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuY2hpbGRyZW4ubGVuZ3RoOyArK2kpXG4gICAge1xuICAgICAgICB2YXIgY2hpbGQgPSB0aGlzLmNoaWxkcmVuW2ldO1xuXG4gICAgICAgIGlmICghY2hpbGQudmlzaWJsZSlcbiAgICAgICAge1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgZnJhbWUgPSBjaGlsZC50ZXh0dXJlLmZyYW1lO1xuXG4gICAgICAgIGNvbnRleHQuZ2xvYmFsQWxwaGEgPSB0aGlzLndvcmxkQWxwaGEgKiBjaGlsZC5hbHBoYTtcblxuICAgICAgICBpZiAoY2hpbGQucm90YXRpb24gJSAoTWF0aC5QSSAqIDIpID09PSAwKVxuICAgICAgICB7XG4gICAgICAgICAgICAvLyB0aGlzIGlzIHRoZSBmYXN0ZXN0ICB3YXkgdG8gb3B0aW1pc2UhIC0gaWYgcm90YXRpb24gaXMgMCB0aGVuIHdlIGNhbiBhdm9pZCBhbnkga2luZCBvZiBzZXRUcmFuc2Zvcm0gY2FsbFxuICAgICAgICAgICAgaWYgKGlzUm90YXRlZClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb250ZXh0LnNldFRyYW5zZm9ybShcbiAgICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtLmEsXG4gICAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybS5iLFxuICAgICAgICAgICAgICAgICAgICB0cmFuc2Zvcm0uYyxcbiAgICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtLmQsXG4gICAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybS50eCxcbiAgICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtLnR5XG4gICAgICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgICAgIGlzUm90YXRlZCA9IGZhbHNlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBwb3NpdGlvblggPSAoKGNoaWxkLmFuY2hvci54KSAqICgtZnJhbWUud2lkdGggKiBjaGlsZC5zY2FsZS54KSArIGNoaWxkLnBvc2l0aW9uLnggICsgMC41KTtcbiAgICAgICAgICAgIHBvc2l0aW9uWSA9ICgoY2hpbGQuYW5jaG9yLnkpICogKC1mcmFtZS5oZWlnaHQgKiBjaGlsZC5zY2FsZS55KSArIGNoaWxkLnBvc2l0aW9uLnkgICsgMC41KTtcblxuICAgICAgICAgICAgZmluYWxXaWR0aCA9IGZyYW1lLndpZHRoICogY2hpbGQuc2NhbGUueDtcbiAgICAgICAgICAgIGZpbmFsSGVpZ2h0ID0gZnJhbWUuaGVpZ2h0ICogY2hpbGQuc2NhbGUueTtcblxuICAgICAgICB9XG4gICAgICAgIGVsc2VcbiAgICAgICAge1xuICAgICAgICAgICAgaWYgKCFpc1JvdGF0ZWQpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgaXNSb3RhdGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY2hpbGQuZGlzcGxheU9iamVjdFVwZGF0ZVRyYW5zZm9ybSgpO1xuXG4gICAgICAgICAgICB2YXIgY2hpbGRUcmFuc2Zvcm0gPSBjaGlsZC53b3JsZFRyYW5zZm9ybTtcblxuICAgICAgICAgICAgaWYgKHJlbmRlcmVyLnJvdW5kUGl4ZWxzKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGNvbnRleHQuc2V0VHJhbnNmb3JtKFxuICAgICAgICAgICAgICAgICAgICBjaGlsZFRyYW5zZm9ybS5hLFxuICAgICAgICAgICAgICAgICAgICBjaGlsZFRyYW5zZm9ybS5iLFxuICAgICAgICAgICAgICAgICAgICBjaGlsZFRyYW5zZm9ybS5jLFxuICAgICAgICAgICAgICAgICAgICBjaGlsZFRyYW5zZm9ybS5kLFxuICAgICAgICAgICAgICAgICAgICBjaGlsZFRyYW5zZm9ybS50eCB8IDAsXG4gICAgICAgICAgICAgICAgICAgIGNoaWxkVHJhbnNmb3JtLnR5IHwgMFxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29udGV4dC5zZXRUcmFuc2Zvcm0oXG4gICAgICAgICAgICAgICAgICAgIGNoaWxkVHJhbnNmb3JtLmEsXG4gICAgICAgICAgICAgICAgICAgIGNoaWxkVHJhbnNmb3JtLmIsXG4gICAgICAgICAgICAgICAgICAgIGNoaWxkVHJhbnNmb3JtLmMsXG4gICAgICAgICAgICAgICAgICAgIGNoaWxkVHJhbnNmb3JtLmQsXG4gICAgICAgICAgICAgICAgICAgIGNoaWxkVHJhbnNmb3JtLnR4LFxuICAgICAgICAgICAgICAgICAgICBjaGlsZFRyYW5zZm9ybS50eVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHBvc2l0aW9uWCA9ICgoY2hpbGQuYW5jaG9yLngpICogKC1mcmFtZS53aWR0aCkgKyAwLjUpO1xuICAgICAgICAgICAgcG9zaXRpb25ZID0gKChjaGlsZC5hbmNob3IueSkgKiAoLWZyYW1lLmhlaWdodCkgKyAwLjUpO1xuXG4gICAgICAgICAgICBmaW5hbFdpZHRoID0gZnJhbWUud2lkdGg7XG4gICAgICAgICAgICBmaW5hbEhlaWdodCA9IGZyYW1lLmhlaWdodDtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnRleHQuZHJhd0ltYWdlKFxuICAgICAgICAgICAgY2hpbGQudGV4dHVyZS5iYXNlVGV4dHVyZS5zb3VyY2UsXG4gICAgICAgICAgICBmcmFtZS54LFxuICAgICAgICAgICAgZnJhbWUueSxcbiAgICAgICAgICAgIGZyYW1lLndpZHRoLFxuICAgICAgICAgICAgZnJhbWUuaGVpZ2h0LFxuICAgICAgICAgICAgcG9zaXRpb25YLFxuICAgICAgICAgICAgcG9zaXRpb25ZLFxuICAgICAgICAgICAgZmluYWxXaWR0aCxcbiAgICAgICAgICAgIGZpbmFsSGVpZ2h0XG4gICAgICAgICk7XG4gICAgfVxufTtcblxuLyoqXG4gKiBEZXN0cm95cyB0aGUgY29udGFpbmVyXG4gKlxuICogQHBhcmFtIFtkZXN0cm95Q2hpbGRyZW49ZmFsc2VdIHtib29sZWFufSBpZiBzZXQgdG8gdHJ1ZSwgYWxsIHRoZSBjaGlsZHJlbiB3aWxsIGhhdmUgdGhlaXIgZGVzdHJveSBtZXRob2QgY2FsbGVkIGFzIHdlbGxcbiAqL1xuUGFydGljbGVDb250YWluZXIucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoKSB7XG4gICAgQ29udGFpbmVyLnByb3RvdHlwZS5kZXN0cm95LmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG5cbiAgICBpZiAodGhpcy5fYnVmZmVycykge1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuX2J1ZmZlcnMubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgICAgIHRoaXMuX2J1ZmZlcnNbaV0uZGVzdHJveSgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5fcHJvcGVydGllcyA9IG51bGw7XG4gICAgdGhpcy5fYnVmZmVycyA9IG51bGw7XG59O1xuIiwiXG4vKipcbiAqIEBhdXRob3IgTWF0IEdyb3Zlc1xuICpcbiAqIEJpZyB0aGFua3MgdG8gdGhlIHZlcnkgY2xldmVyIE1hdHQgRGVzTGF1cmllcnMgPG1hdHRkZXNsPiBodHRwczovL2dpdGh1Yi5jb20vbWF0dGRlc2wvXG4gKiBmb3IgY3JlYXRpbmcgdGhlIG9yaWdpbmFsIHBpeGkgdmVyc2lvbiFcbiAqIEFsc28gYSB0aGFua3MgdG8gaHR0cHM6Ly9naXRodWIuY29tL2JjaGV2YWxpZXIgZm9yIHR3ZWFraW5nIHRoZSB0aW50IGFuZCBhbHBoYSBzbyB0aGF0IHRoZXkgbm93IHNoYXJlIDQgYnl0ZXMgb24gdGhlIHZlcnRleCBidWZmZXJcbiAqXG4gKiBIZWF2aWx5IGluc3BpcmVkIGJ5IExpYkdEWCdzIFBhcnRpY2xlQnVmZmVyOlxuICogaHR0cHM6Ly9naXRodWIuY29tL2xpYmdkeC9saWJnZHgvYmxvYi9tYXN0ZXIvZ2R4L3NyYy9jb20vYmFkbG9naWMvZ2R4L2dyYXBoaWNzL2cyZC9QYXJ0aWNsZUJ1ZmZlci5qYXZhXG4gKi9cblxuLyoqXG4gKiBUaGUgcGFydGljbGUgYnVmZmVyIG1hbmFnZXMgdGhlIHN0YXRpYyBhbmQgZHluYW1pYyBidWZmZXJzIGZvciBhIHBhcnRpY2xlIGNvbnRhaW5lci5cbiAqXG4gKiBAY2xhc3NcbiAqIEBwcml2YXRlXG4gKiBAbWVtYmVyb2YgUElYSVxuICovXG5mdW5jdGlvbiBQYXJ0aWNsZUJ1ZmZlcihnbCwgcHJvcGVydGllcywgZHluYW1pY1Byb3BlcnR5RmxhZ3MsIHNpemUpXG57XG4gICAgLyoqXG4gICAgICogVGhlIGN1cnJlbnQgV2ViR0wgZHJhd2luZyBjb250ZXh0LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7V2ViR0xSZW5kZXJpbmdDb250ZXh0fVxuICAgICAqL1xuICAgIHRoaXMuZ2wgPSBnbDtcblxuICAgIC8qKlxuICAgICAqIFNpemUgb2YgYSBzaW5nbGUgdmVydGV4LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMudmVydFNpemUgPSAyO1xuXG4gICAgLyoqXG4gICAgICogU2l6ZSBvZiBhIHNpbmdsZSB2ZXJ0ZXggaW4gYnl0ZXMuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy52ZXJ0Qnl0ZVNpemUgPSB0aGlzLnZlcnRTaXplICogNDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBudW1iZXIgb2YgcGFydGljbGVzIHRoZSBidWZmZXIgY2FuIGhvbGRcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLnNpemUgPSBzaXplO1xuXG4gICAgLyoqXG4gICAgICogQSBsaXN0IG9mIHRoZSBwcm9wZXJ0aWVzIHRoYXQgYXJlIGR5bmFtaWMuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtvYmplY3RbXX1cbiAgICAgKi9cbiAgICB0aGlzLmR5bmFtaWNQcm9wZXJ0aWVzID0gW107XG5cbiAgICAvKipcbiAgICAgKiBBIGxpc3Qgb2YgdGhlIHByb3BlcnRpZXMgdGhhdCBhcmUgc3RhdGljLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7b2JqZWN0W119XG4gICAgICovXG4gICAgdGhpcy5zdGF0aWNQcm9wZXJ0aWVzID0gW107XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BlcnRpZXMubGVuZ3RoOyBpKyspXG4gICAge1xuICAgICAgICB2YXIgcHJvcGVydHkgPSBwcm9wZXJ0aWVzW2ldO1xuXG4gICAgICAgIGlmKGR5bmFtaWNQcm9wZXJ0eUZsYWdzW2ldKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmR5bmFtaWNQcm9wZXJ0aWVzLnB1c2gocHJvcGVydHkpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2VcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5zdGF0aWNQcm9wZXJ0aWVzLnB1c2gocHJvcGVydHkpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5zdGF0aWNTdHJpZGUgPSAwO1xuICAgIHRoaXMuc3RhdGljQnVmZmVyID0gbnVsbDtcbiAgICB0aGlzLnN0YXRpY0RhdGEgPSBudWxsO1xuXG4gICAgdGhpcy5keW5hbWljU3RyaWRlID0gMDtcbiAgICB0aGlzLmR5bmFtaWNCdWZmZXIgPSBudWxsO1xuICAgIHRoaXMuZHluYW1pY0RhdGEgPSBudWxsO1xuXG4gICAgdGhpcy5pbml0QnVmZmVycygpO1xuXG59XG5cblBhcnRpY2xlQnVmZmVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFBhcnRpY2xlQnVmZmVyO1xubW9kdWxlLmV4cG9ydHMgPSBQYXJ0aWNsZUJ1ZmZlcjtcblxuLyoqXG4gKiBTZXRzIHVwIHRoZSByZW5kZXJlciBjb250ZXh0IGFuZCBuZWNlc3NhcnkgYnVmZmVycy5cbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5QYXJ0aWNsZUJ1ZmZlci5wcm90b3R5cGUuaW5pdEJ1ZmZlcnMgPSBmdW5jdGlvbiAoKVxue1xuICAgIHZhciBnbCA9IHRoaXMuZ2w7XG4gICAgdmFyIGk7XG4gICAgdmFyIHByb3BlcnR5O1xuXG4gICAgdmFyIGR5bmFtaWNPZmZzZXQgPSAwO1xuICAgIHRoaXMuZHluYW1pY1N0cmlkZSA9IDA7XG5cbiAgICBmb3IgKGkgPSAwOyBpIDwgdGhpcy5keW5hbWljUHJvcGVydGllcy5sZW5ndGg7IGkrKylcbiAgICB7XG4gICAgICAgIHByb3BlcnR5ID0gdGhpcy5keW5hbWljUHJvcGVydGllc1tpXTtcblxuICAgICAgICBwcm9wZXJ0eS5vZmZzZXQgPSBkeW5hbWljT2Zmc2V0O1xuICAgICAgICBkeW5hbWljT2Zmc2V0ICs9IHByb3BlcnR5LnNpemU7XG4gICAgICAgIHRoaXMuZHluYW1pY1N0cmlkZSArPSBwcm9wZXJ0eS5zaXplO1xuICAgIH1cblxuICAgIHRoaXMuZHluYW1pY0RhdGEgPSBuZXcgRmxvYXQzMkFycmF5KCB0aGlzLnNpemUgKiB0aGlzLmR5bmFtaWNTdHJpZGUgKiA0KTtcbiAgICB0aGlzLmR5bmFtaWNCdWZmZXIgPSBnbC5jcmVhdGVCdWZmZXIoKTtcblxuICAgIGdsLmJpbmRCdWZmZXIoZ2wuQVJSQVlfQlVGRkVSLCB0aGlzLmR5bmFtaWNCdWZmZXIpO1xuICAgIGdsLmJ1ZmZlckRhdGEoZ2wuQVJSQVlfQlVGRkVSLCB0aGlzLmR5bmFtaWNEYXRhLCBnbC5EWU5BTUlDX0RSQVcpO1xuXG5cbiAgICAvLyBzdGF0aWMgLy9cbiAgICB2YXIgc3RhdGljT2Zmc2V0ID0gMDtcbiAgICB0aGlzLnN0YXRpY1N0cmlkZSA9IDA7XG5cbiAgICBmb3IgKGkgPSAwOyBpIDwgdGhpcy5zdGF0aWNQcm9wZXJ0aWVzLmxlbmd0aDsgaSsrKVxuICAgIHtcbiAgICAgICAgcHJvcGVydHkgPSB0aGlzLnN0YXRpY1Byb3BlcnRpZXNbaV07XG5cbiAgICAgICAgcHJvcGVydHkub2Zmc2V0ID0gc3RhdGljT2Zmc2V0O1xuICAgICAgICBzdGF0aWNPZmZzZXQgKz0gcHJvcGVydHkuc2l6ZTtcbiAgICAgICAgdGhpcy5zdGF0aWNTdHJpZGUgKz0gcHJvcGVydHkuc2l6ZTtcbiAgICB9XG5cbiAgICB0aGlzLnN0YXRpY0RhdGEgPSBuZXcgRmxvYXQzMkFycmF5KCB0aGlzLnNpemUgKiB0aGlzLnN0YXRpY1N0cmlkZSAqIDQpO1xuICAgIHRoaXMuc3RhdGljQnVmZmVyID0gZ2wuY3JlYXRlQnVmZmVyKCk7XG5cbiAgICBnbC5iaW5kQnVmZmVyKGdsLkFSUkFZX0JVRkZFUiwgdGhpcy5zdGF0aWNCdWZmZXIpO1xuICAgIGdsLmJ1ZmZlckRhdGEoZ2wuQVJSQVlfQlVGRkVSLCB0aGlzLnN0YXRpY0RhdGEsIGdsLkRZTkFNSUNfRFJBVyk7XG59O1xuXG4vKipcbiAqIFVwbG9hZHMgdGhlIGR5bmFtaWMgcHJvcGVydGllcy5cbiAqXG4gKi9cblBhcnRpY2xlQnVmZmVyLnByb3RvdHlwZS51cGxvYWREeW5hbWljID0gZnVuY3Rpb24oY2hpbGRyZW4sIHN0YXJ0SW5kZXgsIGFtb3VudClcbntcbiAgICB2YXIgZ2wgPSB0aGlzLmdsO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmR5bmFtaWNQcm9wZXJ0aWVzLmxlbmd0aDsgaSsrKVxuICAgIHtcbiAgICAgICAgdmFyIHByb3BlcnR5ID0gdGhpcy5keW5hbWljUHJvcGVydGllc1tpXTtcbiAgICAgICAgcHJvcGVydHkudXBsb2FkRnVuY3Rpb24oY2hpbGRyZW4sIHN0YXJ0SW5kZXgsIGFtb3VudCwgdGhpcy5keW5hbWljRGF0YSwgdGhpcy5keW5hbWljU3RyaWRlLCBwcm9wZXJ0eS5vZmZzZXQpO1xuICAgIH1cblxuICAgIGdsLmJpbmRCdWZmZXIoZ2wuQVJSQVlfQlVGRkVSLCB0aGlzLmR5bmFtaWNCdWZmZXIpO1xuICAgIGdsLmJ1ZmZlclN1YkRhdGEoZ2wuQVJSQVlfQlVGRkVSLCAwLCB0aGlzLmR5bmFtaWNEYXRhKTtcbn07XG5cbi8qKlxuICogVXBsb2FkcyB0aGUgc3RhdGljIHByb3BlcnRpZXMuXG4gKlxuICovXG5QYXJ0aWNsZUJ1ZmZlci5wcm90b3R5cGUudXBsb2FkU3RhdGljID0gZnVuY3Rpb24oY2hpbGRyZW4sIHN0YXJ0SW5kZXgsIGFtb3VudClcbntcbiAgICB2YXIgZ2wgPSB0aGlzLmdsO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLnN0YXRpY1Byb3BlcnRpZXMubGVuZ3RoOyBpKyspXG4gICAge1xuICAgICAgICB2YXIgcHJvcGVydHkgPSB0aGlzLnN0YXRpY1Byb3BlcnRpZXNbaV07XG4gICAgICAgIHByb3BlcnR5LnVwbG9hZEZ1bmN0aW9uKGNoaWxkcmVuLCBzdGFydEluZGV4LCBhbW91bnQsIHRoaXMuc3RhdGljRGF0YSwgdGhpcy5zdGF0aWNTdHJpZGUsIHByb3BlcnR5Lm9mZnNldCk7XG4gICAgfVxuXG4gICAgZ2wuYmluZEJ1ZmZlcihnbC5BUlJBWV9CVUZGRVIsIHRoaXMuc3RhdGljQnVmZmVyKTtcbiAgICBnbC5idWZmZXJTdWJEYXRhKGdsLkFSUkFZX0JVRkZFUiwgMCwgdGhpcy5zdGF0aWNEYXRhKTtcbn07XG5cbi8qKlxuICogQmluZHMgdGhlIGJ1ZmZlcnMgdG8gdGhlIEdQVVxuICpcbiAqL1xuUGFydGljbGVCdWZmZXIucHJvdG90eXBlLmJpbmQgPSBmdW5jdGlvbiAoKVxue1xuICAgIHZhciBnbCA9IHRoaXMuZ2w7XG4gICAgdmFyIGksIHByb3BlcnR5O1xuXG4gICAgZ2wuYmluZEJ1ZmZlcihnbC5BUlJBWV9CVUZGRVIsIHRoaXMuZHluYW1pY0J1ZmZlcik7XG5cbiAgICBmb3IgKGkgPSAwOyBpIDwgdGhpcy5keW5hbWljUHJvcGVydGllcy5sZW5ndGg7IGkrKylcbiAgICB7XG4gICAgICAgIHByb3BlcnR5ID0gdGhpcy5keW5hbWljUHJvcGVydGllc1tpXTtcbiAgICAgICAgZ2wudmVydGV4QXR0cmliUG9pbnRlcihwcm9wZXJ0eS5hdHRyaWJ1dGUsIHByb3BlcnR5LnNpemUsIGdsLkZMT0FULCBmYWxzZSwgdGhpcy5keW5hbWljU3RyaWRlICogNCwgcHJvcGVydHkub2Zmc2V0ICogNCk7XG4gICAgfVxuXG4gICAgZ2wuYmluZEJ1ZmZlcihnbC5BUlJBWV9CVUZGRVIsIHRoaXMuc3RhdGljQnVmZmVyKTtcblxuICAgIGZvciAoaSA9IDA7IGkgPCB0aGlzLnN0YXRpY1Byb3BlcnRpZXMubGVuZ3RoOyBpKyspXG4gICAge1xuICAgICAgICBwcm9wZXJ0eSA9IHRoaXMuc3RhdGljUHJvcGVydGllc1tpXTtcbiAgICAgICAgZ2wudmVydGV4QXR0cmliUG9pbnRlcihwcm9wZXJ0eS5hdHRyaWJ1dGUsIHByb3BlcnR5LnNpemUsIGdsLkZMT0FULCBmYWxzZSwgdGhpcy5zdGF0aWNTdHJpZGUgKiA0LCBwcm9wZXJ0eS5vZmZzZXQgKiA0KTtcbiAgICB9XG59O1xuXG4vKipcbiAqIERlc3Ryb3lzIHRoZSBQYXJ0aWNsZUJ1ZmZlci5cbiAqXG4gKi9cblBhcnRpY2xlQnVmZmVyLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLmR5bmFtaWNQcm9wZXJ0aWVzID0gbnVsbDtcbiAgICB0aGlzLmR5bmFtaWNEYXRhID0gbnVsbDtcbiAgICB0aGlzLmdsLmRlbGV0ZUJ1ZmZlcih0aGlzLmR5bmFtaWNCdWZmZXIpO1xuXG4gICAgdGhpcy5zdGF0aWNQcm9wZXJ0aWVzID0gbnVsbDtcbiAgICB0aGlzLnN0YXRpY0RhdGEgPSBudWxsO1xuICAgIHRoaXMuZ2wuZGVsZXRlQnVmZmVyKHRoaXMuc3RhdGljQnVmZmVyKTtcbn07XG4iLCJ2YXIgT2JqZWN0UmVuZGVyZXIgPSByZXF1aXJlKCcuLi8uLi9yZW5kZXJlcnMvd2ViZ2wvdXRpbHMvT2JqZWN0UmVuZGVyZXInKSxcbiAgICBXZWJHTFJlbmRlcmVyID0gcmVxdWlyZSgnLi4vLi4vcmVuZGVyZXJzL3dlYmdsL1dlYkdMUmVuZGVyZXInKSxcbiAgICBQYXJ0aWNsZVNoYWRlciA9IHJlcXVpcmUoJy4vUGFydGljbGVTaGFkZXInKSxcbiAgICBQYXJ0aWNsZUJ1ZmZlciA9IHJlcXVpcmUoJy4vUGFydGljbGVCdWZmZXInKSxcbiAgICBtYXRoICAgICAgICAgICAgPSByZXF1aXJlKCcuLi8uLi9tYXRoJyk7XG5cbi8qKlxuICogQGF1dGhvciBNYXQgR3JvdmVzXG4gKlxuICogQmlnIHRoYW5rcyB0byB0aGUgdmVyeSBjbGV2ZXIgTWF0dCBEZXNMYXVyaWVycyA8bWF0dGRlc2w+IGh0dHBzOi8vZ2l0aHViLmNvbS9tYXR0ZGVzbC9cbiAqIGZvciBjcmVhdGluZyB0aGUgb3JpZ2luYWwgcGl4aSB2ZXJzaW9uIVxuICogQWxzbyBhIHRoYW5rcyB0byBodHRwczovL2dpdGh1Yi5jb20vYmNoZXZhbGllciBmb3IgdHdlYWtpbmcgdGhlIHRpbnQgYW5kIGFscGhhIHNvIHRoYXQgdGhleSBub3cgc2hhcmUgNCBieXRlcyBvbiB0aGUgdmVydGV4IGJ1ZmZlclxuICpcbiAqIEhlYXZpbHkgaW5zcGlyZWQgYnkgTGliR0RYJ3MgUGFydGljbGVSZW5kZXJlcjpcbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS9saWJnZHgvbGliZ2R4L2Jsb2IvbWFzdGVyL2dkeC9zcmMvY29tL2JhZGxvZ2ljL2dkeC9ncmFwaGljcy9nMmQvUGFydGljbGVSZW5kZXJlci5qYXZhXG4gKi9cblxuLyoqXG4gKlxuICogQGNsYXNzXG4gKiBAcHJpdmF0ZVxuICogQG1lbWJlcm9mIFBJWElcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5XZWJHTFJlbmRlcmVyfSBUaGUgcmVuZGVyZXIgdGhpcyBzcHJpdGUgYmF0Y2ggd29ya3MgZm9yLlxuICovXG5mdW5jdGlvbiBQYXJ0aWNsZVJlbmRlcmVyKHJlbmRlcmVyKVxue1xuICAgIE9iamVjdFJlbmRlcmVyLmNhbGwodGhpcywgcmVuZGVyZXIpO1xuXG4gICAgLy8gNjU1MzUgaXMgbWF4IHZlcnRleCBpbmRleCBpbiB0aGUgaW5kZXggYnVmZmVyIChzZWUgUGFydGljbGVSZW5kZXJlcilcbiAgICAvLyBzbyBtYXggbnVtYmVyIG9mIHBhcnRpY2xlcyBpcyA2NTUzNiAvIDQgPSAxNjM4NFxuICAgIC8vIGFuZCBtYXggbnVtYmVyIG9mIGVsZW1lbnQgaW4gdGhlIGluZGV4IGJ1ZmZlciBpcyAxNjM4NCAqIDYgPSA5ODMwNFxuICAgIC8vIENyZWF0aW5nIGEgZnVsbCBpbmRleCBidWZmZXIsIG92ZXJoZWFkIGlzIDk4MzA0ICogMiA9IDE5NktvXG4gICAgdmFyIG51bUluZGljZXMgPSA5ODMwNDtcblxuICAgIC8qKlxuICAgICAqIEhvbGRzIHRoZSBpbmRpY2VzXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtVaW50MTZBcnJheX1cbiAgICAgKi9cbiAgICB0aGlzLmluZGljZXMgPSBuZXcgVWludDE2QXJyYXkobnVtSW5kaWNlcyk7XG5cbiAgICBmb3IgKHZhciBpPTAsIGo9MDsgaSA8IG51bUluZGljZXM7IGkgKz0gNiwgaiArPSA0KVxuICAgIHtcbiAgICAgICAgdGhpcy5pbmRpY2VzW2kgKyAwXSA9IGogKyAwO1xuICAgICAgICB0aGlzLmluZGljZXNbaSArIDFdID0gaiArIDE7XG4gICAgICAgIHRoaXMuaW5kaWNlc1tpICsgMl0gPSBqICsgMjtcbiAgICAgICAgdGhpcy5pbmRpY2VzW2kgKyAzXSA9IGogKyAwO1xuICAgICAgICB0aGlzLmluZGljZXNbaSArIDRdID0gaiArIDI7XG4gICAgICAgIHRoaXMuaW5kaWNlc1tpICsgNV0gPSBqICsgMztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGUgZGVmYXVsdCBzaGFkZXIgdGhhdCBpcyB1c2VkIGlmIGEgc3ByaXRlIGRvZXNuJ3QgaGF2ZSBhIG1vcmUgc3BlY2lmaWMgb25lLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5TaGFkZXJ9XG4gICAgICovXG4gICAgdGhpcy5zaGFkZXIgPSBudWxsO1xuXG4gICAgdGhpcy5pbmRleEJ1ZmZlciA9IG51bGw7XG5cbiAgICB0aGlzLnByb3BlcnRpZXMgPSBudWxsO1xuXG4gICAgdGhpcy50ZW1wTWF0cml4ID0gbmV3IG1hdGguTWF0cml4KCk7XG59XG5cblBhcnRpY2xlUmVuZGVyZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShPYmplY3RSZW5kZXJlci5wcm90b3R5cGUpO1xuUGFydGljbGVSZW5kZXJlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBQYXJ0aWNsZVJlbmRlcmVyO1xubW9kdWxlLmV4cG9ydHMgPSBQYXJ0aWNsZVJlbmRlcmVyO1xuXG5XZWJHTFJlbmRlcmVyLnJlZ2lzdGVyUGx1Z2luKCdwYXJ0aWNsZScsIFBhcnRpY2xlUmVuZGVyZXIpO1xuXG4vKipcbiAqIFdoZW4gdGhlcmUgaXMgYSBXZWJHTCBjb250ZXh0IGNoYW5nZVxuICpcbiAqIEBwcml2YXRlXG4gKi9cblBhcnRpY2xlUmVuZGVyZXIucHJvdG90eXBlLm9uQ29udGV4dENoYW5nZSA9IGZ1bmN0aW9uICgpXG57XG4gICAgdmFyIGdsID0gdGhpcy5yZW5kZXJlci5nbDtcblxuICAgIC8vIHNldHVwIGRlZmF1bHQgc2hhZGVyXG4gICAgdGhpcy5zaGFkZXIgPSBuZXcgUGFydGljbGVTaGFkZXIodGhpcy5yZW5kZXJlci5zaGFkZXJNYW5hZ2VyKTtcblxuICAgIHRoaXMuaW5kZXhCdWZmZXIgPSBnbC5jcmVhdGVCdWZmZXIoKTtcblxuICAgIC8vIDY1NTM1IGlzIG1heCBpbmRleCwgc28gNjU1MzUgLyA2ID0gMTA5MjIuXG5cbiAgICAvL3VwbG9hZCB0aGUgaW5kZXggZGF0YVxuICAgIGdsLmJpbmRCdWZmZXIoZ2wuRUxFTUVOVF9BUlJBWV9CVUZGRVIsIHRoaXMuaW5kZXhCdWZmZXIpO1xuICAgIGdsLmJ1ZmZlckRhdGEoZ2wuRUxFTUVOVF9BUlJBWV9CVUZGRVIsIHRoaXMuaW5kaWNlcywgZ2wuU1RBVElDX0RSQVcpO1xuXG4gICAgdGhpcy5wcm9wZXJ0aWVzID0gW1xuICAgICAgICAvLyB2ZXJ0aWNlc0RhdGFcbiAgICAgICAge1xuICAgICAgICAgICAgYXR0cmlidXRlOnRoaXMuc2hhZGVyLmF0dHJpYnV0ZXMuYVZlcnRleFBvc2l0aW9uLFxuICAgICAgICAgICAgc2l6ZToyLFxuICAgICAgICAgICAgdXBsb2FkRnVuY3Rpb246dGhpcy51cGxvYWRWZXJ0aWNlcyxcbiAgICAgICAgICAgIG9mZnNldDowXG4gICAgICAgIH0sXG4gICAgICAgIC8vIHBvc2l0aW9uRGF0YVxuICAgICAgICB7XG4gICAgICAgICAgICBhdHRyaWJ1dGU6dGhpcy5zaGFkZXIuYXR0cmlidXRlcy5hUG9zaXRpb25Db29yZCxcbiAgICAgICAgICAgIHNpemU6MixcbiAgICAgICAgICAgIHVwbG9hZEZ1bmN0aW9uOnRoaXMudXBsb2FkUG9zaXRpb24sXG4gICAgICAgICAgICBvZmZzZXQ6MFxuICAgICAgICB9LFxuICAgICAgICAvLyByb3RhdGlvbkRhdGFcbiAgICAgICAge1xuICAgICAgICAgICAgYXR0cmlidXRlOnRoaXMuc2hhZGVyLmF0dHJpYnV0ZXMuYVJvdGF0aW9uLFxuICAgICAgICAgICAgc2l6ZToxLFxuICAgICAgICAgICAgdXBsb2FkRnVuY3Rpb246dGhpcy51cGxvYWRSb3RhdGlvbixcbiAgICAgICAgICAgIG9mZnNldDowXG4gICAgICAgIH0sXG4gICAgICAgIC8vIHV2c0RhdGFcbiAgICAgICAge1xuICAgICAgICAgICAgYXR0cmlidXRlOnRoaXMuc2hhZGVyLmF0dHJpYnV0ZXMuYVRleHR1cmVDb29yZCxcbiAgICAgICAgICAgIHNpemU6MixcbiAgICAgICAgICAgIHVwbG9hZEZ1bmN0aW9uOnRoaXMudXBsb2FkVXZzLFxuICAgICAgICAgICAgb2Zmc2V0OjBcbiAgICAgICAgfSxcbiAgICAgICAgLy8gYWxwaGFEYXRhXG4gICAgICAgIHtcbiAgICAgICAgICAgIGF0dHJpYnV0ZTp0aGlzLnNoYWRlci5hdHRyaWJ1dGVzLmFDb2xvcixcbiAgICAgICAgICAgIHNpemU6MSxcbiAgICAgICAgICAgIHVwbG9hZEZ1bmN0aW9uOnRoaXMudXBsb2FkQWxwaGEsXG4gICAgICAgICAgICBvZmZzZXQ6MFxuICAgICAgICB9XG4gICAgXTtcbn07XG5cbi8qKlxuICogU3RhcnRzIGEgbmV3IHBhcnRpY2xlIGJhdGNoLlxuICpcbiAqL1xuUGFydGljbGVSZW5kZXJlci5wcm90b3R5cGUuc3RhcnQgPSBmdW5jdGlvbiAoKVxue1xuICAgIHZhciBnbCA9IHRoaXMucmVuZGVyZXIuZ2w7XG5cbiAgICAvLyBiaW5kIHRoZSBtYWluIHRleHR1cmVcbiAgICBnbC5hY3RpdmVUZXh0dXJlKGdsLlRFWFRVUkUwKTtcblxuICAgIC8vIGJpbmQgdGhlIGJ1ZmZlcnNcblxuICAgIGdsLmJpbmRCdWZmZXIoZ2wuRUxFTUVOVF9BUlJBWV9CVUZGRVIsIHRoaXMuaW5kZXhCdWZmZXIpO1xuXG4gICAgdmFyIHNoYWRlciA9IHRoaXMuc2hhZGVyO1xuXG4gICAgdGhpcy5yZW5kZXJlci5zaGFkZXJNYW5hZ2VyLnNldFNoYWRlcihzaGFkZXIpO1xufTtcblxuXG4vKipcbiAqIFJlbmRlcnMgdGhlIHBhcnRpY2xlIGNvbnRhaW5lciBvYmplY3QuXG4gKlxuICogQHBhcmFtIGNvbnRhaW5lciB7UElYSS5QYXJ0aWNsZUNvbnRhaW5lcn0gVGhlIGNvbnRhaW5lciB0byByZW5kZXIgdXNpbmcgdGhpcyBQYXJ0aWNsZVJlbmRlcmVyXG4gKi9cblBhcnRpY2xlUmVuZGVyZXIucHJvdG90eXBlLnJlbmRlciA9IGZ1bmN0aW9uIChjb250YWluZXIpXG57XG4gICAgdmFyIGNoaWxkcmVuID0gY29udGFpbmVyLmNoaWxkcmVuLFxuICAgICAgICB0b3RhbENoaWxkcmVuID0gY2hpbGRyZW4ubGVuZ3RoLFxuICAgICAgICBtYXhTaXplID0gY29udGFpbmVyLl9tYXhTaXplLFxuICAgICAgICBiYXRjaFNpemUgPSBjb250YWluZXIuX2JhdGNoU2l6ZTtcblxuICAgIGlmKHRvdGFsQ2hpbGRyZW4gPT09IDApXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIGVsc2UgaWYodG90YWxDaGlsZHJlbiA+IG1heFNpemUpXG4gICAge1xuICAgICAgICB0b3RhbENoaWxkcmVuID0gbWF4U2l6ZTtcbiAgICB9XG5cbiAgICBpZighY29udGFpbmVyLl9idWZmZXJzKVxuICAgIHtcbiAgICAgICAgY29udGFpbmVyLl9idWZmZXJzID0gdGhpcy5nZW5lcmF0ZUJ1ZmZlcnMoIGNvbnRhaW5lciApO1xuICAgIH1cblxuICAgIC8vIGlmIHRoZSB1dnMgaGF2ZSBub3QgdXBkYXRlZCB0aGVuIG5vIHBvaW50IHJlbmRlcmluZyBqdXN0IHlldCFcbiAgICB0aGlzLnJlbmRlcmVyLmJsZW5kTW9kZU1hbmFnZXIuc2V0QmxlbmRNb2RlKGNvbnRhaW5lci5ibGVuZE1vZGUpO1xuXG4gICAgdmFyIGdsID0gdGhpcy5yZW5kZXJlci5nbDtcblxuICAgIHZhciBtID0gIGNvbnRhaW5lci53b3JsZFRyYW5zZm9ybS5jb3B5KCB0aGlzLnRlbXBNYXRyaXggKTtcbiAgICBtLnByZXBlbmQoIHRoaXMucmVuZGVyZXIuY3VycmVudFJlbmRlclRhcmdldC5wcm9qZWN0aW9uTWF0cml4ICk7XG4gICAgZ2wudW5pZm9ybU1hdHJpeDNmdih0aGlzLnNoYWRlci51bmlmb3Jtcy5wcm9qZWN0aW9uTWF0cml4Ll9sb2NhdGlvbiwgZmFsc2UsIG0udG9BcnJheSh0cnVlKSk7XG4gICAgZ2wudW5pZm9ybTFmKHRoaXMuc2hhZGVyLnVuaWZvcm1zLnVBbHBoYS5fbG9jYXRpb24sIGNvbnRhaW5lci53b3JsZEFscGhhKTtcblxuXG4gICAgLy8gbWFrZSBzdXJlIHRoZSB0ZXh0dXJlIGlzIGJvdW5kLi5cbiAgICB2YXIgYmFzZVRleHR1cmUgPSBjaGlsZHJlblswXS5fdGV4dHVyZS5iYXNlVGV4dHVyZTtcblxuICAgIGlmICghYmFzZVRleHR1cmUuX2dsVGV4dHVyZXNbZ2wuaWRdKVxuICAgIHtcbiAgICAgICAgLy8gaWYgdGhlIHRleHR1cmUgaGFzIG5vdCB1cGRhdGVkIHRoZW4gbGV0cyBub3QgdXBsb2FkIGFueSBzdGF0aWMgcHJvcGVydGllc1xuICAgICAgICBpZighdGhpcy5yZW5kZXJlci51cGRhdGVUZXh0dXJlKGJhc2VUZXh0dXJlKSlcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYoIWNvbnRhaW5lci5fcHJvcGVydGllc1swXSB8fCAhY29udGFpbmVyLl9wcm9wZXJ0aWVzWzNdKVxuICAgICAgICB7XG4gICAgICAgICAgICBjb250YWluZXIuX2J1ZmZlclRvVXBkYXRlID0gMDtcbiAgICAgICAgfVxuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICBnbC5iaW5kVGV4dHVyZShnbC5URVhUVVJFXzJELCBiYXNlVGV4dHVyZS5fZ2xUZXh0dXJlc1tnbC5pZF0pO1xuICAgIH1cblxuICAgIC8vIG5vdyBsZXRzIHVwbG9hZCBhbmQgcmVuZGVyIHRoZSBidWZmZXJzLi5cbiAgICBmb3IgKHZhciBpID0gMCwgaiA9IDA7IGkgPCB0b3RhbENoaWxkcmVuOyBpICs9IGJhdGNoU2l6ZSwgaiArPSAxKVxuICAgIHtcbiAgICAgICAgdmFyIGFtb3VudCA9ICggdG90YWxDaGlsZHJlbiAtIGkpO1xuICAgICAgICBpZihhbW91bnQgPiBiYXRjaFNpemUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGFtb3VudCA9IGJhdGNoU2l6ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBidWZmZXIgPSBjb250YWluZXIuX2J1ZmZlcnNbal07XG5cbiAgICAgICAgLy8gd2UgYWx3YXlzIHVwbG9hZCB0aGUgZHluYW1pY1xuICAgICAgICBidWZmZXIudXBsb2FkRHluYW1pYyhjaGlsZHJlbiwgaSwgYW1vdW50KTtcblxuICAgICAgICAvLyB3ZSBvbmx5IHVwbG9hZCB0aGUgc3RhdGljIGNvbnRlbnQgd2hlbiB3ZSBoYXZlIHRvIVxuICAgICAgICBpZihjb250YWluZXIuX2J1ZmZlclRvVXBkYXRlID09PSBqKVxuICAgICAgICB7XG4gICAgICAgICAgICBidWZmZXIudXBsb2FkU3RhdGljKGNoaWxkcmVuLCBpLCBhbW91bnQpO1xuICAgICAgICAgICAgY29udGFpbmVyLl9idWZmZXJUb1VwZGF0ZSA9IGogKyAxO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gYmluZCB0aGUgYnVmZmVyXG4gICAgICAgIGJ1ZmZlci5iaW5kKCB0aGlzLnNoYWRlciApO1xuXG4gICAgICAgICAvLyBub3cgZHJhdyB0aG9zZSBzdWNrYXMhXG4gICAgICAgIGdsLmRyYXdFbGVtZW50cyhnbC5UUklBTkdMRVMsIGFtb3VudCAqIDYsIGdsLlVOU0lHTkVEX1NIT1JULCAwKTtcbiAgICAgICAgdGhpcy5yZW5kZXJlci5kcmF3Q291bnQrKztcbiAgICB9XG59O1xuXG4vKipcbiAqIENyZWF0ZXMgb25lIHBhcnRpY2xlIGJ1ZmZlciBmb3IgZWFjaCBjaGlsZCBpbiB0aGUgY29udGFpbmVyIHdlIHdhbnQgdG8gcmVuZGVyIGFuZCB1cGRhdGVzIGludGVybmFsIHByb3BlcnRpZXNcbiAqXG4gKiBAcGFyYW0gY29udGFpbmVyIHtQSVhJLlBhcnRpY2xlQ29udGFpbmVyfSBUaGUgY29udGFpbmVyIHRvIHJlbmRlciB1c2luZyB0aGlzIFBhcnRpY2xlUmVuZGVyZXJcbiAqL1xuUGFydGljbGVSZW5kZXJlci5wcm90b3R5cGUuZ2VuZXJhdGVCdWZmZXJzID0gZnVuY3Rpb24gKGNvbnRhaW5lcilcbntcbiAgICB2YXIgZ2wgPSB0aGlzLnJlbmRlcmVyLmdsLFxuICAgICAgICBidWZmZXJzID0gW10sXG4gICAgICAgIHNpemUgPSBjb250YWluZXIuX21heFNpemUsXG4gICAgICAgIGJhdGNoU2l6ZSA9IGNvbnRhaW5lci5fYmF0Y2hTaXplLFxuICAgICAgICBkeW5hbWljUHJvcGVydHlGbGFncyA9IGNvbnRhaW5lci5fcHJvcGVydGllcyxcbiAgICAgICAgaTtcblxuICAgIGZvciAoaSA9IDA7IGkgPCBzaXplOyBpICs9IGJhdGNoU2l6ZSlcbiAgICB7XG4gICAgICAgIGJ1ZmZlcnMucHVzaChuZXcgUGFydGljbGVCdWZmZXIoZ2wsIHRoaXMucHJvcGVydGllcywgZHluYW1pY1Byb3BlcnR5RmxhZ3MsIGJhdGNoU2l6ZSkpO1xuICAgIH1cblxuICAgIHJldHVybiBidWZmZXJzO1xufTtcblxuLyoqXG4gKiBVcGxvYWRzIHRoZSB2ZXJ0aWNpZXMuXG4gKlxuICogQHBhcmFtIGNoaWxkcmVuIHtQSVhJLkRpc3BsYXlPYmplY3RbXX0gdGhlIGFycmF5IG9mIGRpc3BsYXkgb2JqZWN0cyB0byByZW5kZXJcbiAqIEBwYXJhbSBzdGFydEluZGV4IHtudW1iZXJ9IHRoZSBpbmRleCB0byBzdGFydCBmcm9tIGluIHRoZSBjaGlsZHJlbiBhcnJheVxuICogQHBhcmFtIGFtb3VudCB7bnVtYmVyfSB0aGUgYW1vdW50IG9mIGNoaWxkcmVuIHRoYXQgd2lsbCBoYXZlIHRoZWlyIHZlcnRpY2VzIHVwbG9hZGVkXG4gKiBAcGFyYW0gYXJyYXkge251bWJlcltdfVxuICogQHBhcmFtIHN0cmlkZSB7bnVtYmVyfVxuICogQHBhcmFtIG9mZnNldCB7bnVtYmVyfVxuICovXG5QYXJ0aWNsZVJlbmRlcmVyLnByb3RvdHlwZS51cGxvYWRWZXJ0aWNlcyA9IGZ1bmN0aW9uIChjaGlsZHJlbiwgc3RhcnRJbmRleCwgYW1vdW50LCBhcnJheSwgc3RyaWRlLCBvZmZzZXQpXG57XG4gICAgdmFyIHNwcml0ZSxcbiAgICAgICAgdGV4dHVyZSxcbiAgICAgICAgdHJpbSxcbiAgICAgICAgc3gsXG4gICAgICAgIHN5LFxuICAgICAgICB3MCwgdzEsIGgwLCBoMTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYW1vdW50OyBpKyspIHtcblxuICAgICAgICBzcHJpdGUgPSBjaGlsZHJlbltzdGFydEluZGV4ICsgaV07XG4gICAgICAgIHRleHR1cmUgPSBzcHJpdGUuX3RleHR1cmU7XG4gICAgICAgIHN4ID0gc3ByaXRlLnNjYWxlLng7XG4gICAgICAgIHN5ID0gc3ByaXRlLnNjYWxlLnk7XG5cbiAgICAgICAgaWYgKHRleHR1cmUudHJpbSlcbiAgICAgICAge1xuICAgICAgICAgICAgLy8gaWYgdGhlIHNwcml0ZSBpcyB0cmltbWVkIHRoZW4gd2UgbmVlZCB0byBhZGQgdGhlIGV4dHJhIHNwYWNlIGJlZm9yZSB0cmFuc2Zvcm1pbmcgdGhlIHNwcml0ZSBjb29yZHMuLlxuICAgICAgICAgICAgdHJpbSA9IHRleHR1cmUudHJpbTtcblxuICAgICAgICAgICAgdzEgPSB0cmltLnggLSBzcHJpdGUuYW5jaG9yLnggKiB0cmltLndpZHRoO1xuICAgICAgICAgICAgdzAgPSB3MSArIHRleHR1cmUuY3JvcC53aWR0aDtcblxuICAgICAgICAgICAgaDEgPSB0cmltLnkgLSBzcHJpdGUuYW5jaG9yLnkgKiB0cmltLmhlaWdodDtcbiAgICAgICAgICAgIGgwID0gaDEgKyB0ZXh0dXJlLmNyb3AuaGVpZ2h0O1xuICAgICAgICB9XG4gICAgICAgIGVsc2VcbiAgICAgICAge1xuICAgICAgICAgICAgdzAgPSAodGV4dHVyZS5fZnJhbWUud2lkdGggKSAqICgxLXNwcml0ZS5hbmNob3IueCk7XG4gICAgICAgICAgICB3MSA9ICh0ZXh0dXJlLl9mcmFtZS53aWR0aCApICogLXNwcml0ZS5hbmNob3IueDtcblxuICAgICAgICAgICAgaDAgPSB0ZXh0dXJlLl9mcmFtZS5oZWlnaHQgKiAoMS1zcHJpdGUuYW5jaG9yLnkpO1xuICAgICAgICAgICAgaDEgPSB0ZXh0dXJlLl9mcmFtZS5oZWlnaHQgKiAtc3ByaXRlLmFuY2hvci55O1xuICAgICAgICB9XG5cbiAgICAgICAgYXJyYXlbb2Zmc2V0XSA9IHcxICogc3g7XG4gICAgICAgIGFycmF5W29mZnNldCArIDFdID0gaDEgKiBzeTtcblxuICAgICAgICBhcnJheVtvZmZzZXQgKyBzdHJpZGVdID0gdzAgKiBzeDtcbiAgICAgICAgYXJyYXlbb2Zmc2V0ICsgc3RyaWRlICsgMV0gPSBoMSAqIHN5O1xuXG4gICAgICAgIGFycmF5W29mZnNldCArIHN0cmlkZSAqIDJdID0gdzAgKiBzeDtcbiAgICAgICAgYXJyYXlbb2Zmc2V0ICsgc3RyaWRlICogMiArIDFdID0gaDAgKiBzeTtcblxuICAgICAgICBhcnJheVtvZmZzZXQgKyBzdHJpZGUgKiAzXSA9IHcxICogc3g7XG4gICAgICAgIGFycmF5W29mZnNldCArIHN0cmlkZSAqIDMgKyAxXSA9IGgwICogc3k7XG5cbiAgICAgICAgb2Zmc2V0ICs9IHN0cmlkZSAqIDQ7XG4gICAgfVxuXG59O1xuXG4vKipcbiAqXG4gKiBAcGFyYW0gY2hpbGRyZW4ge1BJWEkuRGlzcGxheU9iamVjdFtdfSB0aGUgYXJyYXkgb2YgZGlzcGxheSBvYmplY3RzIHRvIHJlbmRlclxuICogQHBhcmFtIHN0YXJ0SW5kZXgge251bWJlcn0gdGhlIGluZGV4IHRvIHN0YXJ0IGZyb20gaW4gdGhlIGNoaWxkcmVuIGFycmF5XG4gKiBAcGFyYW0gYW1vdW50IHtudW1iZXJ9IHRoZSBhbW91bnQgb2YgY2hpbGRyZW4gdGhhdCB3aWxsIGhhdmUgdGhlaXIgcG9zaXRpb25zIHVwbG9hZGVkXG4gKiBAcGFyYW0gYXJyYXkge251bWJlcltdfVxuICogQHBhcmFtIHN0cmlkZSB7bnVtYmVyfVxuICogQHBhcmFtIG9mZnNldCB7bnVtYmVyfVxuICovXG5QYXJ0aWNsZVJlbmRlcmVyLnByb3RvdHlwZS51cGxvYWRQb3NpdGlvbiA9IGZ1bmN0aW9uIChjaGlsZHJlbixzdGFydEluZGV4LCBhbW91bnQsIGFycmF5LCBzdHJpZGUsIG9mZnNldClcbntcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFtb3VudDsgaSsrKVxuICAgIHtcbiAgICAgICAgdmFyIHNwcml0ZVBvc2l0aW9uID0gY2hpbGRyZW5bc3RhcnRJbmRleCArIGldLnBvc2l0aW9uO1xuXG4gICAgICAgIGFycmF5W29mZnNldF0gPSBzcHJpdGVQb3NpdGlvbi54O1xuICAgICAgICBhcnJheVtvZmZzZXQgKyAxXSA9IHNwcml0ZVBvc2l0aW9uLnk7XG5cbiAgICAgICAgYXJyYXlbb2Zmc2V0ICsgc3RyaWRlXSA9IHNwcml0ZVBvc2l0aW9uLng7XG4gICAgICAgIGFycmF5W29mZnNldCArIHN0cmlkZSArIDFdID0gc3ByaXRlUG9zaXRpb24ueTtcblxuICAgICAgICBhcnJheVtvZmZzZXQgKyBzdHJpZGUgKiAyXSA9IHNwcml0ZVBvc2l0aW9uLng7XG4gICAgICAgIGFycmF5W29mZnNldCArIHN0cmlkZSAqIDIgKyAxXSA9IHNwcml0ZVBvc2l0aW9uLnk7XG5cbiAgICAgICAgYXJyYXlbb2Zmc2V0ICsgc3RyaWRlICogM10gPSBzcHJpdGVQb3NpdGlvbi54O1xuICAgICAgICBhcnJheVtvZmZzZXQgKyBzdHJpZGUgKiAzICsgMV0gPSBzcHJpdGVQb3NpdGlvbi55O1xuXG4gICAgICAgIG9mZnNldCArPSBzdHJpZGUgKiA0O1xuICAgIH1cblxufTtcblxuLyoqXG4gKlxuICogQHBhcmFtIGNoaWxkcmVuIHtQSVhJLkRpc3BsYXlPYmplY3RbXX0gdGhlIGFycmF5IG9mIGRpc3BsYXkgb2JqZWN0cyB0byByZW5kZXJcbiAqIEBwYXJhbSBzdGFydEluZGV4IHtudW1iZXJ9IHRoZSBpbmRleCB0byBzdGFydCBmcm9tIGluIHRoZSBjaGlsZHJlbiBhcnJheVxuICogQHBhcmFtIGFtb3VudCB7bnVtYmVyfSB0aGUgYW1vdW50IG9mIGNoaWxkcmVuIHRoYXQgd2lsbCBoYXZlIHRoZWlyIHJvdGF0aW9uIHVwbG9hZGVkXG4gKiBAcGFyYW0gYXJyYXkge251bWJlcltdfVxuICogQHBhcmFtIHN0cmlkZSB7bnVtYmVyfVxuICogQHBhcmFtIG9mZnNldCB7bnVtYmVyfVxuICovXG5QYXJ0aWNsZVJlbmRlcmVyLnByb3RvdHlwZS51cGxvYWRSb3RhdGlvbiA9IGZ1bmN0aW9uIChjaGlsZHJlbixzdGFydEluZGV4LCBhbW91bnQsIGFycmF5LCBzdHJpZGUsIG9mZnNldClcbntcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFtb3VudDsgaSsrKVxuICAgIHtcbiAgICAgICAgdmFyIHNwcml0ZVJvdGF0aW9uID0gY2hpbGRyZW5bc3RhcnRJbmRleCArIGldLnJvdGF0aW9uO1xuXG5cbiAgICAgICAgYXJyYXlbb2Zmc2V0XSA9IHNwcml0ZVJvdGF0aW9uO1xuICAgICAgICBhcnJheVtvZmZzZXQgKyBzdHJpZGVdID0gc3ByaXRlUm90YXRpb247XG4gICAgICAgIGFycmF5W29mZnNldCArIHN0cmlkZSAqIDJdID0gc3ByaXRlUm90YXRpb247XG4gICAgICAgIGFycmF5W29mZnNldCArIHN0cmlkZSAqIDNdID0gc3ByaXRlUm90YXRpb247XG5cbiAgICAgICAgb2Zmc2V0ICs9IHN0cmlkZSAqIDQ7XG4gICAgfVxufTtcblxuLyoqXG4gKlxuICogQHBhcmFtIGNoaWxkcmVuIHtQSVhJLkRpc3BsYXlPYmplY3RbXX0gdGhlIGFycmF5IG9mIGRpc3BsYXkgb2JqZWN0cyB0byByZW5kZXJcbiAqIEBwYXJhbSBzdGFydEluZGV4IHtudW1iZXJ9IHRoZSBpbmRleCB0byBzdGFydCBmcm9tIGluIHRoZSBjaGlsZHJlbiBhcnJheVxuICogQHBhcmFtIGFtb3VudCB7bnVtYmVyfSB0aGUgYW1vdW50IG9mIGNoaWxkcmVuIHRoYXQgd2lsbCBoYXZlIHRoZWlyIFV2cyB1cGxvYWRlZFxuICogQHBhcmFtIGFycmF5IHtudW1iZXJbXX1cbiAqIEBwYXJhbSBzdHJpZGUge251bWJlcn1cbiAqIEBwYXJhbSBvZmZzZXQge251bWJlcn1cbiAqL1xuUGFydGljbGVSZW5kZXJlci5wcm90b3R5cGUudXBsb2FkVXZzID0gZnVuY3Rpb24gKGNoaWxkcmVuLHN0YXJ0SW5kZXgsIGFtb3VudCwgYXJyYXksIHN0cmlkZSwgb2Zmc2V0KVxue1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYW1vdW50OyBpKyspXG4gICAge1xuICAgICAgICB2YXIgdGV4dHVyZVV2cyA9IGNoaWxkcmVuW3N0YXJ0SW5kZXggKyBpXS5fdGV4dHVyZS5fdXZzO1xuXG4gICAgICAgIGlmICh0ZXh0dXJlVXZzKVxuICAgICAgICB7XG4gICAgICAgICAgICBhcnJheVtvZmZzZXRdID0gdGV4dHVyZVV2cy54MDtcbiAgICAgICAgICAgIGFycmF5W29mZnNldCArIDFdID0gdGV4dHVyZVV2cy55MDtcblxuICAgICAgICAgICAgYXJyYXlbb2Zmc2V0ICsgc3RyaWRlXSA9IHRleHR1cmVVdnMueDE7XG4gICAgICAgICAgICBhcnJheVtvZmZzZXQgKyBzdHJpZGUgKyAxXSA9IHRleHR1cmVVdnMueTE7XG5cbiAgICAgICAgICAgIGFycmF5W29mZnNldCArIHN0cmlkZSAqIDJdID0gdGV4dHVyZVV2cy54MjtcbiAgICAgICAgICAgIGFycmF5W29mZnNldCArIHN0cmlkZSAqIDIgKyAxXSA9IHRleHR1cmVVdnMueTI7XG5cbiAgICAgICAgICAgIGFycmF5W29mZnNldCArIHN0cmlkZSAqIDNdID0gdGV4dHVyZVV2cy54MztcbiAgICAgICAgICAgIGFycmF5W29mZnNldCArIHN0cmlkZSAqIDMgKyAxXSA9IHRleHR1cmVVdnMueTM7XG5cbiAgICAgICAgICAgIG9mZnNldCArPSBzdHJpZGUgKiA0O1xuICAgICAgICB9XG4gICAgICAgIGVsc2VcbiAgICAgICAge1xuICAgICAgICAgICAgLy9UT0RPIHlvdSBrbm93IHRoaXMgY2FuIGJlIGVhc2llciFcbiAgICAgICAgICAgIGFycmF5W29mZnNldF0gPSAwO1xuICAgICAgICAgICAgYXJyYXlbb2Zmc2V0ICsgMV0gPSAwO1xuXG4gICAgICAgICAgICBhcnJheVtvZmZzZXQgKyBzdHJpZGVdID0gMDtcbiAgICAgICAgICAgIGFycmF5W29mZnNldCArIHN0cmlkZSArIDFdID0gMDtcblxuICAgICAgICAgICAgYXJyYXlbb2Zmc2V0ICsgc3RyaWRlICogMl0gPSAwO1xuICAgICAgICAgICAgYXJyYXlbb2Zmc2V0ICsgc3RyaWRlICogMiArIDFdID0gMDtcblxuICAgICAgICAgICAgYXJyYXlbb2Zmc2V0ICsgc3RyaWRlICogM10gPSAwO1xuICAgICAgICAgICAgYXJyYXlbb2Zmc2V0ICsgc3RyaWRlICogMyArIDFdID0gMDtcblxuICAgICAgICAgICAgb2Zmc2V0ICs9IHN0cmlkZSAqIDQ7XG4gICAgICAgIH1cbiAgICB9XG59O1xuXG4vKipcbiAqXG4gKiBAcGFyYW0gY2hpbGRyZW4ge1BJWEkuRGlzcGxheU9iamVjdFtdfSB0aGUgYXJyYXkgb2YgZGlzcGxheSBvYmplY3RzIHRvIHJlbmRlclxuICogQHBhcmFtIHN0YXJ0SW5kZXgge251bWJlcn0gdGhlIGluZGV4IHRvIHN0YXJ0IGZyb20gaW4gdGhlIGNoaWxkcmVuIGFycmF5XG4gKiBAcGFyYW0gYW1vdW50IHtudW1iZXJ9IHRoZSBhbW91bnQgb2YgY2hpbGRyZW4gdGhhdCB3aWxsIGhhdmUgdGhlaXIgYWxwaGEgdXBsb2FkZWRcbiAqIEBwYXJhbSBhcnJheSB7bnVtYmVyW119XG4gKiBAcGFyYW0gc3RyaWRlIHtudW1iZXJ9XG4gKiBAcGFyYW0gb2Zmc2V0IHtudW1iZXJ9XG4gKi9cblBhcnRpY2xlUmVuZGVyZXIucHJvdG90eXBlLnVwbG9hZEFscGhhID0gZnVuY3Rpb24gKGNoaWxkcmVuLHN0YXJ0SW5kZXgsIGFtb3VudCwgYXJyYXksIHN0cmlkZSwgb2Zmc2V0KVxue1xuICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFtb3VudDsgaSsrKVxuICAgICB7XG4gICAgICAgIHZhciBzcHJpdGVBbHBoYSA9IGNoaWxkcmVuW3N0YXJ0SW5kZXggKyBpXS5hbHBoYTtcblxuICAgICAgICBhcnJheVtvZmZzZXRdID0gc3ByaXRlQWxwaGE7XG4gICAgICAgIGFycmF5W29mZnNldCArIHN0cmlkZV0gPSBzcHJpdGVBbHBoYTtcbiAgICAgICAgYXJyYXlbb2Zmc2V0ICsgc3RyaWRlICogMl0gPSBzcHJpdGVBbHBoYTtcbiAgICAgICAgYXJyYXlbb2Zmc2V0ICsgc3RyaWRlICogM10gPSBzcHJpdGVBbHBoYTtcblxuICAgICAgICBvZmZzZXQgKz0gc3RyaWRlICogNDtcbiAgICB9XG59O1xuXG5cbi8qKlxuICogRGVzdHJveXMgdGhlIFBhcnRpY2xlUmVuZGVyZXIuXG4gKlxuICovXG5QYXJ0aWNsZVJlbmRlcmVyLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKClcbntcbiAgICBpZiAodGhpcy5yZW5kZXJlci5nbCkge1xuICAgICAgICB0aGlzLnJlbmRlcmVyLmdsLmRlbGV0ZUJ1ZmZlcih0aGlzLmluZGV4QnVmZmVyKTtcbiAgICB9XG5cbiAgICBPYmplY3RSZW5kZXJlci5wcm90b3R5cGUuZGVzdHJveS5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuXG4gICAgdGhpcy5zaGFkZXIuZGVzdHJveSgpO1xuXG4gICAgdGhpcy5pbmRpY2VzID0gbnVsbDtcbiAgICB0aGlzLnRlbXBNYXRyaXggPSBudWxsO1xufTtcbiIsInZhciBUZXh0dXJlU2hhZGVyID0gcmVxdWlyZSgnLi4vLi4vcmVuZGVyZXJzL3dlYmdsL3NoYWRlcnMvVGV4dHVyZVNoYWRlcicpO1xuXG4vKipcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5UZXh0dXJlU2hhZGVyXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIHNoYWRlck1hbmFnZXIge1NoYWRlck1hbmFnZXJ9IFRoZSB3ZWJnbCBzaGFkZXIgbWFuYWdlciB0aGlzIHNoYWRlciB3b3JrcyBmb3IuXG4gKi9cbmZ1bmN0aW9uIFBhcnRpY2xlU2hhZGVyKHNoYWRlck1hbmFnZXIpXG57XG4gICAgVGV4dHVyZVNoYWRlci5jYWxsKHRoaXMsXG4gICAgICAgIHNoYWRlck1hbmFnZXIsXG4gICAgICAgIC8vIHZlcnRleCBzaGFkZXJcbiAgICAgICAgW1xuICAgICAgICAgICAgJ2F0dHJpYnV0ZSB2ZWMyIGFWZXJ0ZXhQb3NpdGlvbjsnLFxuICAgICAgICAgICAgJ2F0dHJpYnV0ZSB2ZWMyIGFUZXh0dXJlQ29vcmQ7JyxcbiAgICAgICAgICAgICdhdHRyaWJ1dGUgZmxvYXQgYUNvbG9yOycsXG5cbiAgICAgICAgICAgICdhdHRyaWJ1dGUgdmVjMiBhUG9zaXRpb25Db29yZDsnLFxuICAgICAgICAgICAgJ2F0dHJpYnV0ZSB2ZWMyIGFTY2FsZTsnLFxuICAgICAgICAgICAgJ2F0dHJpYnV0ZSBmbG9hdCBhUm90YXRpb247JyxcblxuICAgICAgICAgICAgJ3VuaWZvcm0gbWF0MyBwcm9qZWN0aW9uTWF0cml4OycsXG5cbiAgICAgICAgICAgICd2YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDsnLFxuICAgICAgICAgICAgJ3ZhcnlpbmcgZmxvYXQgdkNvbG9yOycsXG5cbiAgICAgICAgICAgICd2b2lkIG1haW4odm9pZCl7JyxcbiAgICAgICAgICAgICcgICB2ZWMyIHYgPSBhVmVydGV4UG9zaXRpb247JyxcblxuICAgICAgICAgICAgJyAgIHYueCA9IChhVmVydGV4UG9zaXRpb24ueCkgKiBjb3MoYVJvdGF0aW9uKSAtIChhVmVydGV4UG9zaXRpb24ueSkgKiBzaW4oYVJvdGF0aW9uKTsnLFxuICAgICAgICAgICAgJyAgIHYueSA9IChhVmVydGV4UG9zaXRpb24ueCkgKiBzaW4oYVJvdGF0aW9uKSArIChhVmVydGV4UG9zaXRpb24ueSkgKiBjb3MoYVJvdGF0aW9uKTsnLFxuICAgICAgICAgICAgJyAgIHYgPSB2ICsgYVBvc2l0aW9uQ29vcmQ7JyxcblxuICAgICAgICAgICAgJyAgIGdsX1Bvc2l0aW9uID0gdmVjNCgocHJvamVjdGlvbk1hdHJpeCAqIHZlYzModiwgMS4wKSkueHksIDAuMCwgMS4wKTsnLFxuXG4gICAgICAgICAgICAnICAgdlRleHR1cmVDb29yZCA9IGFUZXh0dXJlQ29vcmQ7JyxcbiAgICAgICAgICAgICcgICB2Q29sb3IgPSBhQ29sb3I7JyxcbiAgICAgICAgICAgICd9J1xuICAgICAgICBdLmpvaW4oJ1xcbicpLFxuICAgICAgICAvLyBoZWxsb1xuICAgICAgICAgW1xuICAgICAgICAgICAgJ3ByZWNpc2lvbiBsb3dwIGZsb2F0OycsXG5cbiAgICAgICAgICAgICd2YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDsnLFxuICAgICAgICAgICAgJ3ZhcnlpbmcgZmxvYXQgdkNvbG9yOycsXG5cbiAgICAgICAgICAgICd1bmlmb3JtIHNhbXBsZXIyRCB1U2FtcGxlcjsnLFxuICAgICAgICAgICAgJ3VuaWZvcm0gZmxvYXQgdUFscGhhOycsXG5cbiAgICAgICAgICAgICd2b2lkIG1haW4odm9pZCl7JyxcbiAgICAgICAgICAgICcgIHZlYzQgY29sb3IgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZUZXh0dXJlQ29vcmQpICogdkNvbG9yICogdUFscGhhOycsXG4gICAgICAgICAgICAnICBpZiAoY29sb3IuYSA9PSAwLjApIGRpc2NhcmQ7JyxcbiAgICAgICAgICAgICcgIGdsX0ZyYWdDb2xvciA9IGNvbG9yOycsXG4gICAgICAgICAgICAnfSdcbiAgICAgICAgXS5qb2luKCdcXG4nKSxcbiAgICAgICAgLy8gY3VzdG9tIHVuaWZvcm1zXG4gICAgICAgIHtcbiAgICAgICAgICAgIHVBbHBoYTogIHsgdHlwZTogJzFmJywgdmFsdWU6IDEgfVxuICAgICAgICB9LFxuICAgICAgICAvLyBjdXN0b20gYXR0cmlidXRlc1xuICAgICAgICB7XG4gICAgICAgICAgICBhUG9zaXRpb25Db29yZDogMCxcbiAgICAgICAgICAgLy8gYVNjYWxlOiAgICAgICAgIDAsXG4gICAgICAgICAgICBhUm90YXRpb246ICAgICAgMFxuICAgICAgICB9XG4gICAgKTtcblxuICAgIC8vIFRFTVAgSEFDS1xuXG59XG5cblBhcnRpY2xlU2hhZGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoVGV4dHVyZVNoYWRlci5wcm90b3R5cGUpO1xuUGFydGljbGVTaGFkZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gUGFydGljbGVTaGFkZXI7XG5cbm1vZHVsZS5leHBvcnRzID0gUGFydGljbGVTaGFkZXI7XG4iLCJ2YXIgdXRpbHMgPSByZXF1aXJlKCcuLi91dGlscycpLFxuICAgIG1hdGggPSByZXF1aXJlKCcuLi9tYXRoJyksXG4gICAgQ09OU1QgPSByZXF1aXJlKCcuLi9jb25zdCcpLFxuICAgIEV2ZW50RW1pdHRlciA9IHJlcXVpcmUoJ2V2ZW50ZW1pdHRlcjMnKTtcblxuLyoqXG4gKiBUaGUgQ2FudmFzUmVuZGVyZXIgZHJhd3MgdGhlIHNjZW5lIGFuZCBhbGwgaXRzIGNvbnRlbnQgb250byBhIDJkIGNhbnZhcy4gVGhpcyByZW5kZXJlciBzaG91bGQgYmUgdXNlZCBmb3IgYnJvd3NlcnMgdGhhdCBkbyBub3Qgc3VwcG9ydCB3ZWJHTC5cbiAqIERvbid0IGZvcmdldCB0byBhZGQgdGhlIENhbnZhc1JlbmRlcmVyLnZpZXcgdG8geW91ciBET00gb3IgeW91IHdpbGwgbm90IHNlZSBhbnl0aGluZyA6KVxuICpcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqIEBwYXJhbSBzeXN0ZW0ge3N0cmluZ30gVGhlIG5hbWUgb2YgdGhlIHN5c3RlbSB0aGlzIHJlbmRlcmVyIGlzIGZvci5cbiAqIEBwYXJhbSBbd2lkdGg9ODAwXSB7bnVtYmVyfSB0aGUgd2lkdGggb2YgdGhlIGNhbnZhcyB2aWV3XG4gKiBAcGFyYW0gW2hlaWdodD02MDBdIHtudW1iZXJ9IHRoZSBoZWlnaHQgb2YgdGhlIGNhbnZhcyB2aWV3XG4gKiBAcGFyYW0gW29wdGlvbnNdIHtvYmplY3R9IFRoZSBvcHRpb25hbCByZW5kZXJlciBwYXJhbWV0ZXJzXG4gKiBAcGFyYW0gW29wdGlvbnMudmlld10ge0hUTUxDYW52YXNFbGVtZW50fSB0aGUgY2FudmFzIHRvIHVzZSBhcyBhIHZpZXcsIG9wdGlvbmFsXG4gKiBAcGFyYW0gW29wdGlvbnMudHJhbnNwYXJlbnQ9ZmFsc2VdIHtib29sZWFufSBJZiB0aGUgcmVuZGVyIHZpZXcgaXMgdHJhbnNwYXJlbnQsIGRlZmF1bHQgZmFsc2VcbiAqIEBwYXJhbSBbb3B0aW9ucy5hdXRvUmVzaXplPWZhbHNlXSB7Ym9vbGVhbn0gSWYgdGhlIHJlbmRlciB2aWV3IGlzIGF1dG9tYXRpY2FsbHkgcmVzaXplZCwgZGVmYXVsdCBmYWxzZVxuICogQHBhcmFtIFtvcHRpb25zLmFudGlhbGlhcz1mYWxzZV0ge2Jvb2xlYW59IHNldHMgYW50aWFsaWFzIChvbmx5IGFwcGxpY2FibGUgaW4gY2hyb21lIGF0IHRoZSBtb21lbnQpXG4gKiBAcGFyYW0gW29wdGlvbnMucmVzb2x1dGlvbj0xXSB7bnVtYmVyfSB0aGUgcmVzb2x1dGlvbiBvZiB0aGUgcmVuZGVyZXIgcmV0aW5hIHdvdWxkIGJlIDJcbiAqIEBwYXJhbSBbb3B0aW9ucy5jbGVhckJlZm9yZVJlbmRlcj10cnVlXSB7Ym9vbGVhbn0gVGhpcyBzZXRzIGlmIHRoZSBDYW52YXNSZW5kZXJlciB3aWxsIGNsZWFyIHRoZSBjYW52YXMgb3JcbiAqICAgICAgbm90IGJlZm9yZSB0aGUgbmV3IHJlbmRlciBwYXNzLlxuICogQHBhcmFtIFtvcHRpb25zLmJhY2tncm91bmRDb2xvcj0weDAwMDAwMF0ge251bWJlcn0gVGhlIGJhY2tncm91bmQgY29sb3Igb2YgdGhlIHJlbmRlcmVkIGFyZWEgKHNob3duIGlmIG5vdCB0cmFuc3BhcmVudCkuXG4gKiBAcGFyYW0gW29wdGlvbnMucm91bmRQaXhlbHM9ZmFsc2VdIHtib29sZWFufSBJZiB0cnVlIFBpeGkgd2lsbCBNYXRoLmZsb29yKCkgeC95IHZhbHVlcyB3aGVuIHJlbmRlcmluZywgc3RvcHBpbmcgcGl4ZWwgaW50ZXJwb2xhdGlvbi5cbiAqL1xuZnVuY3Rpb24gU3lzdGVtUmVuZGVyZXIoc3lzdGVtLCB3aWR0aCwgaGVpZ2h0LCBvcHRpb25zKVxue1xuICAgIEV2ZW50RW1pdHRlci5jYWxsKHRoaXMpO1xuXG4gICAgdXRpbHMuc2F5SGVsbG8oc3lzdGVtKTtcblxuICAgIC8vIHByZXBhcmUgb3B0aW9uc1xuICAgIGlmIChvcHRpb25zKVxuICAgIHtcbiAgICAgICAgZm9yICh2YXIgaSBpbiBDT05TVC5ERUZBVUxUX1JFTkRFUl9PUFRJT05TKVxuICAgICAgICB7XG4gICAgICAgICAgICBpZiAodHlwZW9mIG9wdGlvbnNbaV0gPT09ICd1bmRlZmluZWQnKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIG9wdGlvbnNbaV0gPSBDT05TVC5ERUZBVUxUX1JFTkRFUl9PUFRJT05TW2ldO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIG9wdGlvbnMgPSBDT05TVC5ERUZBVUxUX1JFTkRFUl9PUFRJT05TO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoZSB0eXBlIG9mIHRoZSByZW5kZXJlci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCBQSVhJLlJFTkRFUkVSX1RZUEUuVU5LTk9XTlxuICAgICAqIEBzZWUgUElYSS5SRU5ERVJFUl9UWVBFXG4gICAgICovXG4gICAgdGhpcy50eXBlID0gQ09OU1QuUkVOREVSRVJfVFlQRS5VTktOT1dOO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHdpZHRoIG9mIHRoZSBjYW52YXMgdmlld1xuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDgwMFxuICAgICAqL1xuICAgIHRoaXMud2lkdGggPSB3aWR0aCB8fCA4MDA7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgaGVpZ2h0IG9mIHRoZSBjYW52YXMgdmlld1xuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDYwMFxuICAgICAqL1xuICAgIHRoaXMuaGVpZ2h0ID0gaGVpZ2h0IHx8IDYwMDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBjYW52YXMgZWxlbWVudCB0aGF0IGV2ZXJ5dGhpbmcgaXMgZHJhd24gdG9cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge0hUTUxDYW52YXNFbGVtZW50fVxuICAgICAqL1xuICAgIHRoaXMudmlldyA9IG9wdGlvbnMudmlldyB8fCBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdjYW52YXMnKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSByZXNvbHV0aW9uIG9mIHRoZSByZW5kZXJlclxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDFcbiAgICAgKi9cbiAgICB0aGlzLnJlc29sdXRpb24gPSBvcHRpb25zLnJlc29sdXRpb247XG5cbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIHRoZSByZW5kZXIgdmlldyBpcyB0cmFuc3BhcmVudFxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKi9cbiAgICB0aGlzLnRyYW5zcGFyZW50ID0gb3B0aW9ucy50cmFuc3BhcmVudDtcblxuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgdGhlIHJlbmRlciB2aWV3IHNob3VsZCBiZSByZXNpemVkIGF1dG9tYXRpY2FsbHlcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICovXG4gICAgdGhpcy5hdXRvUmVzaXplID0gb3B0aW9ucy5hdXRvUmVzaXplIHx8IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogVHJhY2tzIHRoZSBibGVuZCBtb2RlcyB1c2VmdWwgZm9yIHRoaXMgcmVuZGVyZXIuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtvYmplY3Q8c3RyaW5nLCBtaXhlZD59XG4gICAgICovXG4gICAgdGhpcy5ibGVuZE1vZGVzID0gbnVsbDtcblxuICAgIC8qKlxuICAgICAqIFRoZSB2YWx1ZSBvZiB0aGUgcHJlc2VydmVEcmF3aW5nQnVmZmVyIGZsYWcgYWZmZWN0cyB3aGV0aGVyIG9yIG5vdCB0aGUgY29udGVudHMgb2YgdGhlIHN0ZW5jaWwgYnVmZmVyIGlzIHJldGFpbmVkIGFmdGVyIHJlbmRlcmluZy5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICovXG4gICAgdGhpcy5wcmVzZXJ2ZURyYXdpbmdCdWZmZXIgPSBvcHRpb25zLnByZXNlcnZlRHJhd2luZ0J1ZmZlcjtcblxuICAgIC8qKlxuICAgICAqIFRoaXMgc2V0cyBpZiB0aGUgQ2FudmFzUmVuZGVyZXIgd2lsbCBjbGVhciB0aGUgY2FudmFzIG9yIG5vdCBiZWZvcmUgdGhlIG5ldyByZW5kZXIgcGFzcy5cbiAgICAgKiBJZiB0aGUgc2NlbmUgaXMgTk9UIHRyYW5zcGFyZW50IFBpeGkgd2lsbCB1c2UgYSBjYW52YXMgc2l6ZWQgZmlsbFJlY3Qgb3BlcmF0aW9uIGV2ZXJ5IGZyYW1lIHRvIHNldCB0aGUgY2FudmFzIGJhY2tncm91bmQgY29sb3IuXG4gICAgICogSWYgdGhlIHNjZW5lIGlzIHRyYW5zcGFyZW50IFBpeGkgd2lsbCB1c2UgY2xlYXJSZWN0IHRvIGNsZWFyIHRoZSBjYW52YXMgZXZlcnkgZnJhbWUuXG4gICAgICogRGlzYWJsZSB0aGlzIGJ5IHNldHRpbmcgdGhpcyB0byBmYWxzZS4gRm9yIGV4YW1wbGUgaWYgeW91ciBnYW1lIGhhcyBhIGNhbnZhcyBmaWxsaW5nIGJhY2tncm91bmQgaW1hZ2UgeW91IG9mdGVuIGRvbid0IG5lZWQgdGhpcyBzZXQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqIEBkZWZhdWx0XG4gICAgICovXG4gICAgdGhpcy5jbGVhckJlZm9yZVJlbmRlciA9IG9wdGlvbnMuY2xlYXJCZWZvcmVSZW5kZXI7XG5cbiAgICAvKipcbiAgICAgKiBJZiB0cnVlIFBpeGkgd2lsbCBNYXRoLmZsb29yKCkgeC95IHZhbHVlcyB3aGVuIHJlbmRlcmluZywgc3RvcHBpbmcgcGl4ZWwgaW50ZXJwb2xhdGlvbi5cbiAgICAgKiBIYW5keSBmb3IgY3Jpc3AgcGl4ZWwgYXJ0IGFuZCBzcGVlZCBvbiBsZWdhY3kgZGV2aWNlcy5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICovXG4gICAgdGhpcy5yb3VuZFBpeGVscyA9IG9wdGlvbnMucm91bmRQaXhlbHM7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYmFja2dyb3VuZCBjb2xvciBhcyBhIG51bWJlci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX2JhY2tncm91bmRDb2xvciA9IDB4MDAwMDAwO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGJhY2tncm91bmQgY29sb3IgYXMgYW4gW1IsIEcsIEJdIGFycmF5LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyW119XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9iYWNrZ3JvdW5kQ29sb3JSZ2JhID0gWzAsIDAsIDAsIDBdO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGJhY2tncm91bmQgY29sb3IgYXMgYSBzdHJpbmcuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtzdHJpbmd9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9iYWNrZ3JvdW5kQ29sb3JTdHJpbmcgPSAnIzAwMDAwMCc7XG5cbiAgICB0aGlzLmJhY2tncm91bmRDb2xvciA9IG9wdGlvbnMuYmFja2dyb3VuZENvbG9yIHx8IHRoaXMuX2JhY2tncm91bmRDb2xvcjsgLy8gcnVuIGJnIGNvbG9yIHNldHRlclxuXG4gICAgLyoqXG4gICAgICogVGhpcyB0ZW1wb3JhcnkgZGlzcGxheSBvYmplY3QgdXNlZCBhcyB0aGUgcGFyZW50IG9mIHRoZSBjdXJyZW50bHkgYmVpbmcgcmVuZGVyZWQgaXRlbVxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5EaXNwbGF5T2JqZWN0fVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fdGVtcERpc3BsYXlPYmplY3RQYXJlbnQgPSB7d29ybGRUcmFuc2Zvcm06bmV3IG1hdGguTWF0cml4KCksIHdvcmxkQWxwaGE6MSwgY2hpbGRyZW46W119O1xuXG4gICAgLyoqXG4gICAgICogVGhlIGxhc3Qgcm9vdCBvYmplY3QgdGhhdCB0aGUgcmVuZGVyZXIgdHJpZWQgdG8gcmVuZGVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5EaXNwbGF5T2JqZWN0fVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fbGFzdE9iamVjdFJlbmRlcmVkID0gdGhpcy5fdGVtcERpc3BsYXlPYmplY3RQYXJlbnQ7XG59XG5cbi8vIGNvbnN0cnVjdG9yXG5TeXN0ZW1SZW5kZXJlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKEV2ZW50RW1pdHRlci5wcm90b3R5cGUpO1xuU3lzdGVtUmVuZGVyZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gU3lzdGVtUmVuZGVyZXI7XG5tb2R1bGUuZXhwb3J0cyA9IFN5c3RlbVJlbmRlcmVyO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhTeXN0ZW1SZW5kZXJlci5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBUaGUgYmFja2dyb3VuZCBjb2xvciB0byBmaWxsIGlmIG5vdCB0cmFuc3BhcmVudFxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLlN5c3RlbVJlbmRlcmVyI1xuICAgICAqL1xuICAgIGJhY2tncm91bmRDb2xvcjpcbiAgICB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2JhY2tncm91bmRDb2xvcjtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLl9iYWNrZ3JvdW5kQ29sb3IgPSB2YWw7XG4gICAgICAgICAgICB0aGlzLl9iYWNrZ3JvdW5kQ29sb3JTdHJpbmcgPSB1dGlscy5oZXgyc3RyaW5nKHZhbCk7XG4gICAgICAgICAgICB1dGlscy5oZXgycmdiKHZhbCwgdGhpcy5fYmFja2dyb3VuZENvbG9yUmdiYSk7XG4gICAgICAgIH1cbiAgICB9XG59KTtcblxuLyoqXG4gKiBSZXNpemVzIHRoZSBjYW52YXMgdmlldyB0byB0aGUgc3BlY2lmaWVkIHdpZHRoIGFuZCBoZWlnaHRcbiAqXG4gKiBAcGFyYW0gd2lkdGgge251bWJlcn0gdGhlIG5ldyB3aWR0aCBvZiB0aGUgY2FudmFzIHZpZXdcbiAqIEBwYXJhbSBoZWlnaHQge251bWJlcn0gdGhlIG5ldyBoZWlnaHQgb2YgdGhlIGNhbnZhcyB2aWV3XG4gKi9cblN5c3RlbVJlbmRlcmVyLnByb3RvdHlwZS5yZXNpemUgPSBmdW5jdGlvbiAod2lkdGgsIGhlaWdodCkge1xuICAgIHRoaXMud2lkdGggPSB3aWR0aCAqIHRoaXMucmVzb2x1dGlvbjtcbiAgICB0aGlzLmhlaWdodCA9IGhlaWdodCAqIHRoaXMucmVzb2x1dGlvbjtcblxuICAgIHRoaXMudmlldy53aWR0aCA9IHRoaXMud2lkdGg7XG4gICAgdGhpcy52aWV3LmhlaWdodCA9IHRoaXMuaGVpZ2h0O1xuXG4gICAgaWYgKHRoaXMuYXV0b1Jlc2l6ZSlcbiAgICB7XG4gICAgICAgIHRoaXMudmlldy5zdHlsZS53aWR0aCA9IHRoaXMud2lkdGggLyB0aGlzLnJlc29sdXRpb24gKyAncHgnO1xuICAgICAgICB0aGlzLnZpZXcuc3R5bGUuaGVpZ2h0ID0gdGhpcy5oZWlnaHQgLyB0aGlzLnJlc29sdXRpb24gKyAncHgnO1xuICAgIH1cbn07XG5cbi8qKlxuICogUmVtb3ZlcyBldmVyeXRoaW5nIGZyb20gdGhlIHJlbmRlcmVyIGFuZCBvcHRpb25hbGx5IHJlbW92ZXMgdGhlIENhbnZhcyBET00gZWxlbWVudC5cbiAqXG4gKiBAcGFyYW0gW3JlbW92ZVZpZXc9ZmFsc2VdIHtib29sZWFufSBSZW1vdmVzIHRoZSBDYW52YXMgZWxlbWVudCBmcm9tIHRoZSBET00uXG4gKi9cblN5c3RlbVJlbmRlcmVyLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKHJlbW92ZVZpZXcpIHtcbiAgICBpZiAocmVtb3ZlVmlldyAmJiB0aGlzLnZpZXcucGFyZW50Tm9kZSlcbiAgICB7XG4gICAgICAgIHRoaXMudmlldy5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHRoaXMudmlldyk7XG4gICAgfVxuXG4gICAgdGhpcy50eXBlID0gQ09OU1QuUkVOREVSRVJfVFlQRS5VTktOT1dOO1xuXG4gICAgdGhpcy53aWR0aCA9IDA7XG4gICAgdGhpcy5oZWlnaHQgPSAwO1xuXG4gICAgdGhpcy52aWV3ID0gbnVsbDtcblxuICAgIHRoaXMucmVzb2x1dGlvbiA9IDA7XG5cbiAgICB0aGlzLnRyYW5zcGFyZW50ID0gZmFsc2U7XG5cbiAgICB0aGlzLmF1dG9SZXNpemUgPSBmYWxzZTtcblxuICAgIHRoaXMuYmxlbmRNb2RlcyA9IG51bGw7XG5cbiAgICB0aGlzLnByZXNlcnZlRHJhd2luZ0J1ZmZlciA9IGZhbHNlO1xuICAgIHRoaXMuY2xlYXJCZWZvcmVSZW5kZXIgPSBmYWxzZTtcblxuICAgIHRoaXMucm91bmRQaXhlbHMgPSBmYWxzZTtcblxuICAgIHRoaXMuX2JhY2tncm91bmRDb2xvciA9IDA7XG4gICAgdGhpcy5fYmFja2dyb3VuZENvbG9yUmdiYSA9IG51bGw7XG4gICAgdGhpcy5fYmFja2dyb3VuZENvbG9yU3RyaW5nID0gbnVsbDtcbn07XG4iLCJ2YXIgU3lzdGVtUmVuZGVyZXIgPSByZXF1aXJlKCcuLi9TeXN0ZW1SZW5kZXJlcicpLFxuICAgIENhbnZhc01hc2tNYW5hZ2VyID0gcmVxdWlyZSgnLi91dGlscy9DYW52YXNNYXNrTWFuYWdlcicpLFxuICAgIHV0aWxzID0gcmVxdWlyZSgnLi4vLi4vdXRpbHMnKSxcbiAgICBtYXRoID0gcmVxdWlyZSgnLi4vLi4vbWF0aCcpLFxuICAgIENPTlNUID0gcmVxdWlyZSgnLi4vLi4vY29uc3QnKTtcblxuLyoqXG4gKiBUaGUgQ2FudmFzUmVuZGVyZXIgZHJhd3MgdGhlIHNjZW5lIGFuZCBhbGwgaXRzIGNvbnRlbnQgb250byBhIDJkIGNhbnZhcy4gVGhpcyByZW5kZXJlciBzaG91bGQgYmUgdXNlZCBmb3IgYnJvd3NlcnMgdGhhdCBkbyBub3Qgc3VwcG9ydCB3ZWJHTC5cbiAqIERvbid0IGZvcmdldCB0byBhZGQgdGhlIENhbnZhc1JlbmRlcmVyLnZpZXcgdG8geW91ciBET00gb3IgeW91IHdpbGwgbm90IHNlZSBhbnl0aGluZyA6KVxuICpcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqIEBleHRlbmRzIFBJWEkuU3lzdGVtUmVuZGVyZXJcbiAqIEBwYXJhbSBbd2lkdGg9ODAwXSB7bnVtYmVyfSB0aGUgd2lkdGggb2YgdGhlIGNhbnZhcyB2aWV3XG4gKiBAcGFyYW0gW2hlaWdodD02MDBdIHtudW1iZXJ9IHRoZSBoZWlnaHQgb2YgdGhlIGNhbnZhcyB2aWV3XG4gKiBAcGFyYW0gW29wdGlvbnNdIHtvYmplY3R9IFRoZSBvcHRpb25hbCByZW5kZXJlciBwYXJhbWV0ZXJzXG4gKiBAcGFyYW0gW29wdGlvbnMudmlld10ge0hUTUxDYW52YXNFbGVtZW50fSB0aGUgY2FudmFzIHRvIHVzZSBhcyBhIHZpZXcsIG9wdGlvbmFsXG4gKiBAcGFyYW0gW29wdGlvbnMudHJhbnNwYXJlbnQ9ZmFsc2VdIHtib29sZWFufSBJZiB0aGUgcmVuZGVyIHZpZXcgaXMgdHJhbnNwYXJlbnQsIGRlZmF1bHQgZmFsc2VcbiAqIEBwYXJhbSBbb3B0aW9ucy5hdXRvUmVzaXplPWZhbHNlXSB7Ym9vbGVhbn0gSWYgdGhlIHJlbmRlciB2aWV3IGlzIGF1dG9tYXRpY2FsbHkgcmVzaXplZCwgZGVmYXVsdCBmYWxzZVxuICogQHBhcmFtIFtvcHRpb25zLmFudGlhbGlhcz1mYWxzZV0ge2Jvb2xlYW59IHNldHMgYW50aWFsaWFzIChvbmx5IGFwcGxpY2FibGUgaW4gY2hyb21lIGF0IHRoZSBtb21lbnQpXG4gKiBAcGFyYW0gW29wdGlvbnMucmVzb2x1dGlvbj0xXSB7bnVtYmVyfSB0aGUgcmVzb2x1dGlvbiBvZiB0aGUgcmVuZGVyZXIgcmV0aW5hIHdvdWxkIGJlIDJcbiAqIEBwYXJhbSBbb3B0aW9ucy5jbGVhckJlZm9yZVJlbmRlcj10cnVlXSB7Ym9vbGVhbn0gVGhpcyBzZXRzIGlmIHRoZSBDYW52YXNSZW5kZXJlciB3aWxsIGNsZWFyIHRoZSBjYW52YXMgb3JcbiAqICAgICAgbm90IGJlZm9yZSB0aGUgbmV3IHJlbmRlciBwYXNzLlxuICogQHBhcmFtIFtvcHRpb25zLnJvdW5kUGl4ZWxzPWZhbHNlXSB7Ym9vbGVhbn0gSWYgdHJ1ZSBQaXhpIHdpbGwgTWF0aC5mbG9vcigpIHgveSB2YWx1ZXMgd2hlbiByZW5kZXJpbmcsIHN0b3BwaW5nIHBpeGVsIGludGVycG9sYXRpb24uXG4gKi9cbmZ1bmN0aW9uIENhbnZhc1JlbmRlcmVyKHdpZHRoLCBoZWlnaHQsIG9wdGlvbnMpXG57XG4gICAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG5cbiAgICBTeXN0ZW1SZW5kZXJlci5jYWxsKHRoaXMsICdDYW52YXMnLCB3aWR0aCwgaGVpZ2h0LCBvcHRpb25zKTtcblxuICAgIHRoaXMudHlwZSA9IENPTlNULlJFTkRFUkVSX1RZUEUuQ0FOVkFTO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGNhbnZhcyAyZCBjb250ZXh0IHRoYXQgZXZlcnl0aGluZyBpcyBkcmF3biB3aXRoLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEfVxuICAgICAqL1xuICAgIHRoaXMuY29udGV4dCA9IHRoaXMudmlldy5nZXRDb250ZXh0KCcyZCcsIHsgYWxwaGE6IHRoaXMudHJhbnNwYXJlbnQgfSk7XG5cbiAgICAvKipcbiAgICAgKiBCb29sZWFuIGZsYWcgY29udHJvbGxpbmcgY2FudmFzIHJlZnJlc2guXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqL1xuICAgIHRoaXMucmVmcmVzaCA9IHRydWU7XG5cbiAgICAvKipcbiAgICAgKiBJbnN0YW5jZSBvZiBhIENhbnZhc01hc2tNYW5hZ2VyLCBoYW5kbGVzIG1hc2tpbmcgd2hlbiB1c2luZyB0aGUgY2FudmFzIHJlbmRlcmVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5DYW52YXNNYXNrTWFuYWdlcn1cbiAgICAgKi9cbiAgICB0aGlzLm1hc2tNYW5hZ2VyID0gbmV3IENhbnZhc01hc2tNYW5hZ2VyKCk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgY2FudmFzIHByb3BlcnR5IHVzZWQgdG8gc2V0IHRoZSBjYW52YXMgc21vb3RoaW5nIHByb3BlcnR5LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7c3RyaW5nfVxuICAgICAqL1xuICAgIHRoaXMuc21vb3RoUHJvcGVydHkgPSAnaW1hZ2VTbW9vdGhpbmdFbmFibGVkJztcblxuICAgIGlmICghdGhpcy5jb250ZXh0LmltYWdlU21vb3RoaW5nRW5hYmxlZClcbiAgICB7XG4gICAgICAgIGlmICh0aGlzLmNvbnRleHQud2Via2l0SW1hZ2VTbW9vdGhpbmdFbmFibGVkKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnNtb290aFByb3BlcnR5ID0gJ3dlYmtpdEltYWdlU21vb3RoaW5nRW5hYmxlZCc7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodGhpcy5jb250ZXh0Lm1vekltYWdlU21vb3RoaW5nRW5hYmxlZClcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5zbW9vdGhQcm9wZXJ0eSA9ICdtb3pJbWFnZVNtb290aGluZ0VuYWJsZWQnO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHRoaXMuY29udGV4dC5vSW1hZ2VTbW9vdGhpbmdFbmFibGVkKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnNtb290aFByb3BlcnR5ID0gJ29JbWFnZVNtb290aGluZ0VuYWJsZWQnO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHRoaXMuY29udGV4dC5tc0ltYWdlU21vb3RoaW5nRW5hYmxlZClcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5zbW9vdGhQcm9wZXJ0eSA9ICdtc0ltYWdlU21vb3RoaW5nRW5hYmxlZCc7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLmluaXRQbHVnaW5zKCk7XG5cbiAgICB0aGlzLl9tYXBCbGVuZE1vZGVzKCk7XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIHRlbXBvcmFyeSBkaXNwbGF5IG9iamVjdCB1c2VkIGFzIHRoZSBwYXJlbnQgb2YgdGhlIGN1cnJlbnRseSBiZWluZyByZW5kZXJlZCBpdGVtXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLkRpc3BsYXlPYmplY3R9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl90ZW1wRGlzcGxheU9iamVjdFBhcmVudCA9IHtcbiAgICAgICAgd29ybGRUcmFuc2Zvcm06IG5ldyBtYXRoLk1hdHJpeCgpLFxuICAgICAgICB3b3JsZEFscGhhOiAxXG4gICAgfTtcblxuXG4gICAgdGhpcy5yZXNpemUod2lkdGgsIGhlaWdodCk7XG59XG5cbi8vIGNvbnN0cnVjdG9yXG5DYW52YXNSZW5kZXJlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFN5c3RlbVJlbmRlcmVyLnByb3RvdHlwZSk7XG5DYW52YXNSZW5kZXJlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBDYW52YXNSZW5kZXJlcjtcbm1vZHVsZS5leHBvcnRzID0gQ2FudmFzUmVuZGVyZXI7XG51dGlscy5wbHVnaW5UYXJnZXQubWl4aW4oQ2FudmFzUmVuZGVyZXIpO1xuXG4vKipcbiAqIFJlbmRlcnMgdGhlIG9iamVjdCB0byB0aGlzIGNhbnZhcyB2aWV3XG4gKlxuICogQHBhcmFtIG9iamVjdCB7UElYSS5EaXNwbGF5T2JqZWN0fSB0aGUgb2JqZWN0IHRvIGJlIHJlbmRlcmVkXG4gKi9cbkNhbnZhc1JlbmRlcmVyLnByb3RvdHlwZS5yZW5kZXIgPSBmdW5jdGlvbiAob2JqZWN0KVxue1xuICAgIHRoaXMuZW1pdCgncHJlcmVuZGVyJyk7XG5cbiAgICB2YXIgY2FjaGVQYXJlbnQgPSBvYmplY3QucGFyZW50O1xuXG4gICAgdGhpcy5fbGFzdE9iamVjdFJlbmRlcmVkID0gb2JqZWN0O1xuXG4gICAgb2JqZWN0LnBhcmVudCA9IHRoaXMuX3RlbXBEaXNwbGF5T2JqZWN0UGFyZW50O1xuXG4gICAgLy8gdXBkYXRlIHRoZSBzY2VuZSBncmFwaFxuICAgIG9iamVjdC51cGRhdGVUcmFuc2Zvcm0oKTtcblxuICAgIG9iamVjdC5wYXJlbnQgPSBjYWNoZVBhcmVudDtcblxuICAgIHRoaXMuY29udGV4dC5zZXRUcmFuc2Zvcm0oMSwgMCwgMCwgMSwgMCwgMCk7XG5cbiAgICB0aGlzLmNvbnRleHQuZ2xvYmFsQWxwaGEgPSAxO1xuXG4gICAgdGhpcy5jb250ZXh0Lmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbiA9IHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5OT1JNQUxdO1xuXG4gICAgaWYgKG5hdmlnYXRvci5pc0NvY29vbkpTICYmIHRoaXMudmlldy5zY3JlZW5jYW52YXMpXG4gICAge1xuICAgICAgICB0aGlzLmNvbnRleHQuZmlsbFN0eWxlID0gJ2JsYWNrJztcbiAgICAgICAgdGhpcy5jb250ZXh0LmNsZWFyKCk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuY2xlYXJCZWZvcmVSZW5kZXIpXG4gICAge1xuICAgICAgICBpZiAodGhpcy50cmFuc3BhcmVudClcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5jb250ZXh0LmNsZWFyUmVjdCgwLCAwLCB0aGlzLndpZHRoLCB0aGlzLmhlaWdodCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmNvbnRleHQuZmlsbFN0eWxlID0gdGhpcy5fYmFja2dyb3VuZENvbG9yU3RyaW5nO1xuICAgICAgICAgICAgdGhpcy5jb250ZXh0LmZpbGxSZWN0KDAsIDAsIHRoaXMud2lkdGggLCB0aGlzLmhlaWdodCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLnJlbmRlckRpc3BsYXlPYmplY3Qob2JqZWN0LCB0aGlzLmNvbnRleHQpO1xuXG4gICAgdGhpcy5lbWl0KCdwb3N0cmVuZGVyJyk7XG59O1xuXG4vKipcbiAqIFJlbW92ZXMgZXZlcnl0aGluZyBmcm9tIHRoZSByZW5kZXJlciBhbmQgb3B0aW9uYWxseSByZW1vdmVzIHRoZSBDYW52YXMgRE9NIGVsZW1lbnQuXG4gKlxuICogQHBhcmFtIFtyZW1vdmVWaWV3PWZhbHNlXSB7Ym9vbGVhbn0gUmVtb3ZlcyB0aGUgQ2FudmFzIGVsZW1lbnQgZnJvbSB0aGUgRE9NLlxuICovXG5DYW52YXNSZW5kZXJlci5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uIChyZW1vdmVWaWV3KVxue1xuICAgIHRoaXMuZGVzdHJveVBsdWdpbnMoKTtcblxuICAgIC8vIGNhbGwgdGhlIGJhc2UgZGVzdHJveVxuICAgIFN5c3RlbVJlbmRlcmVyLnByb3RvdHlwZS5kZXN0cm95LmNhbGwodGhpcywgcmVtb3ZlVmlldyk7XG5cbiAgICB0aGlzLmNvbnRleHQgPSBudWxsO1xuXG4gICAgdGhpcy5yZWZyZXNoID0gdHJ1ZTtcblxuICAgIHRoaXMubWFza01hbmFnZXIuZGVzdHJveSgpO1xuICAgIHRoaXMubWFza01hbmFnZXIgPSBudWxsO1xuXG4gICAgdGhpcy5zbW9vdGhQcm9wZXJ0eSA9IG51bGw7XG59O1xuXG4vKipcbiAqIFJlbmRlcnMgYSBkaXNwbGF5IG9iamVjdFxuICpcbiAqIEBwYXJhbSBkaXNwbGF5T2JqZWN0IHtQSVhJLkRpc3BsYXlPYmplY3R9IFRoZSBkaXNwbGF5T2JqZWN0IHRvIHJlbmRlclxuICogQHByaXZhdGVcbiAqL1xuQ2FudmFzUmVuZGVyZXIucHJvdG90eXBlLnJlbmRlckRpc3BsYXlPYmplY3QgPSBmdW5jdGlvbiAoZGlzcGxheU9iamVjdCwgY29udGV4dClcbntcbiAgICB2YXIgdGVtcENvbnRleHQgPSB0aGlzLmNvbnRleHQ7XG5cbiAgICB0aGlzLmNvbnRleHQgPSBjb250ZXh0O1xuICAgIGRpc3BsYXlPYmplY3QucmVuZGVyQ2FudmFzKHRoaXMpO1xuICAgIHRoaXMuY29udGV4dCA9IHRlbXBDb250ZXh0O1xufTtcblxuLyoqXG4gKiBAZXh0ZW5kcyBQSVhJLlN5c3RlbVJlbmRlcmVyI3Jlc2l6ZVxuICpcbiAqIEBwYXJhbSB7bnVtYmVyfSB3XG4gKiBAcGFyYW0ge251bWJlcn0gaFxuICovXG5DYW52YXNSZW5kZXJlci5wcm90b3R5cGUucmVzaXplID0gZnVuY3Rpb24gKHcsIGgpXG57XG4gICAgU3lzdGVtUmVuZGVyZXIucHJvdG90eXBlLnJlc2l6ZS5jYWxsKHRoaXMsIHcsIGgpO1xuXG4gICAgLy9yZXNldCB0aGUgc2NhbGUgbW9kZS4uIG9kZGx5IHRoaXMgc2VlbXMgdG8gYmUgcmVzZXQgd2hlbiB0aGUgY2FudmFzIGlzIHJlc2l6ZWQuXG4gICAgLy9zdXJlbHkgYSBicm93c2VyIGJ1Zz8/IExldCBwaXhpIGZpeCB0aGF0IGZvciB5b3UuLlxuICAgIGlmKHRoaXMuc21vb3RoUHJvcGVydHkpXG4gICAge1xuICAgICAgICB0aGlzLmNvbnRleHRbdGhpcy5zbW9vdGhQcm9wZXJ0eV0gPSAoQ09OU1QuU0NBTEVfTU9ERVMuREVGQVVMVCA9PT0gQ09OU1QuU0NBTEVfTU9ERVMuTElORUFSKTtcbiAgICB9XG5cbn07XG5cbi8qKlxuICogTWFwcyBQaXhpIGJsZW5kIG1vZGVzIHRvIGNhbnZhcyBibGVuZCBtb2Rlcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5DYW52YXNSZW5kZXJlci5wcm90b3R5cGUuX21hcEJsZW5kTW9kZXMgPSBmdW5jdGlvbiAoKVxue1xuICAgIGlmICghdGhpcy5ibGVuZE1vZGVzKVxuICAgIHtcbiAgICAgICAgdGhpcy5ibGVuZE1vZGVzID0ge307XG5cbiAgICAgICAgaWYgKHV0aWxzLmNhblVzZU5ld0NhbnZhc0JsZW5kTW9kZXMoKSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5ibGVuZE1vZGVzW0NPTlNULkJMRU5EX01PREVTLk5PUk1BTF0gICAgICAgID0gJ3NvdXJjZS1vdmVyJztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5BRERdICAgICAgICAgICA9ICdsaWdodGVyJzsgLy9JUyBUSElTIE9LPz8/XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuTVVMVElQTFldICAgICAgPSAnbXVsdGlwbHknO1xuICAgICAgICAgICAgdGhpcy5ibGVuZE1vZGVzW0NPTlNULkJMRU5EX01PREVTLlNDUkVFTl0gICAgICAgID0gJ3NjcmVlbic7XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuT1ZFUkxBWV0gICAgICAgPSAnb3ZlcmxheSc7XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuREFSS0VOXSAgICAgICAgPSAnZGFya2VuJztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5MSUdIVEVOXSAgICAgICA9ICdsaWdodGVuJztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5DT0xPUl9ET0RHRV0gICA9ICdjb2xvci1kb2RnZSc7XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuQ09MT1JfQlVSTl0gICAgPSAnY29sb3ItYnVybic7XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuSEFSRF9MSUdIVF0gICAgPSAnaGFyZC1saWdodCc7XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuU09GVF9MSUdIVF0gICAgPSAnc29mdC1saWdodCc7XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuRElGRkVSRU5DRV0gICAgPSAnZGlmZmVyZW5jZSc7XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuRVhDTFVTSU9OXSAgICAgPSAnZXhjbHVzaW9uJztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5IVUVdICAgICAgICAgICA9ICdodWUnO1xuICAgICAgICAgICAgdGhpcy5ibGVuZE1vZGVzW0NPTlNULkJMRU5EX01PREVTLlNBVFVSQVRJT05dICAgID0gJ3NhdHVyYXRlJztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5DT0xPUl0gICAgICAgICA9ICdjb2xvcic7XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuTFVNSU5PU0lUWV0gICAgPSAnbHVtaW5vc2l0eSc7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgICAvLyB0aGlzIG1lYW5zIHRoYXQgdGhlIGJyb3dzZXIgZG9lcyBub3Qgc3VwcG9ydCB0aGUgY29vbCBuZXcgYmxlbmQgbW9kZXMgaW4gY2FudmFzICdjb3VnaCcgaWUgJ2NvdWdoJ1xuICAgICAgICAgICAgdGhpcy5ibGVuZE1vZGVzW0NPTlNULkJMRU5EX01PREVTLk5PUk1BTF0gICAgICAgID0gJ3NvdXJjZS1vdmVyJztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5BRERdICAgICAgICAgICA9ICdsaWdodGVyJzsgLy9JUyBUSElTIE9LPz8/XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuTVVMVElQTFldICAgICAgPSAnc291cmNlLW92ZXInO1xuICAgICAgICAgICAgdGhpcy5ibGVuZE1vZGVzW0NPTlNULkJMRU5EX01PREVTLlNDUkVFTl0gICAgICAgID0gJ3NvdXJjZS1vdmVyJztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5PVkVSTEFZXSAgICAgICA9ICdzb3VyY2Utb3Zlcic7XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuREFSS0VOXSAgICAgICAgPSAnc291cmNlLW92ZXInO1xuICAgICAgICAgICAgdGhpcy5ibGVuZE1vZGVzW0NPTlNULkJMRU5EX01PREVTLkxJR0hURU5dICAgICAgID0gJ3NvdXJjZS1vdmVyJztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5DT0xPUl9ET0RHRV0gICA9ICdzb3VyY2Utb3Zlcic7XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuQ09MT1JfQlVSTl0gICAgPSAnc291cmNlLW92ZXInO1xuICAgICAgICAgICAgdGhpcy5ibGVuZE1vZGVzW0NPTlNULkJMRU5EX01PREVTLkhBUkRfTElHSFRdICAgID0gJ3NvdXJjZS1vdmVyJztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5TT0ZUX0xJR0hUXSAgICA9ICdzb3VyY2Utb3Zlcic7XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuRElGRkVSRU5DRV0gICAgPSAnc291cmNlLW92ZXInO1xuICAgICAgICAgICAgdGhpcy5ibGVuZE1vZGVzW0NPTlNULkJMRU5EX01PREVTLkVYQ0xVU0lPTl0gICAgID0gJ3NvdXJjZS1vdmVyJztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5IVUVdICAgICAgICAgICA9ICdzb3VyY2Utb3Zlcic7XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuU0FUVVJBVElPTl0gICAgPSAnc291cmNlLW92ZXInO1xuICAgICAgICAgICAgdGhpcy5ibGVuZE1vZGVzW0NPTlNULkJMRU5EX01PREVTLkNPTE9SXSAgICAgICAgID0gJ3NvdXJjZS1vdmVyJztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5MVU1JTk9TSVRZXSAgICA9ICdzb3VyY2Utb3Zlcic7XG4gICAgICAgIH1cbiAgICB9XG59O1xuIiwiLyoqXG4gKiBDcmVhdGVzIGEgQ2FudmFzIGVsZW1lbnQgb2YgdGhlIGdpdmVuIHNpemUuXG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIHdpZHRoIHtudW1iZXJ9IHRoZSB3aWR0aCBmb3IgdGhlIG5ld2x5IGNyZWF0ZWQgY2FudmFzXG4gKiBAcGFyYW0gaGVpZ2h0IHtudW1iZXJ9IHRoZSBoZWlnaHQgZm9yIHRoZSBuZXdseSBjcmVhdGVkIGNhbnZhc1xuICovXG5mdW5jdGlvbiBDYW52YXNCdWZmZXIod2lkdGgsIGhlaWdodClcbntcbiAgICAvKipcbiAgICAgKiBUaGUgQ2FudmFzIG9iamVjdCB0aGF0IGJlbG9uZ3MgdG8gdGhpcyBDYW52YXNCdWZmZXIuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtIVE1MQ2FudmFzRWxlbWVudH1cbiAgICAgKi9cbiAgICB0aGlzLmNhbnZhcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NhbnZhcycpO1xuXG4gICAgLyoqXG4gICAgICogQSBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQgb2JqZWN0IHJlcHJlc2VudGluZyBhIHR3by1kaW1lbnNpb25hbCByZW5kZXJpbmcgY29udGV4dC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRH1cbiAgICAgKi9cbiAgICB0aGlzLmNvbnRleHQgPSB0aGlzLmNhbnZhcy5nZXRDb250ZXh0KCcyZCcpO1xuXG4gICAgdGhpcy5jYW52YXMud2lkdGggPSB3aWR0aDtcbiAgICB0aGlzLmNhbnZhcy5oZWlnaHQgPSBoZWlnaHQ7XG59XG5cbkNhbnZhc0J1ZmZlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBDYW52YXNCdWZmZXI7XG5tb2R1bGUuZXhwb3J0cyA9IENhbnZhc0J1ZmZlcjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoQ2FudmFzQnVmZmVyLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFRoZSB3aWR0aCBvZiB0aGUgY2FudmFzIGJ1ZmZlciBpbiBwaXhlbHMuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuQ2FudmFzQnVmZmVyI1xuICAgICAqL1xuICAgIHdpZHRoOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY2FudmFzLndpZHRoO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWwpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuY2FudmFzLndpZHRoID0gdmFsO1xuICAgICAgICB9XG4gICAgfSxcbiAgICAvKipcbiAgICAgKiBUaGUgaGVpZ2h0IG9mIHRoZSBjYW52YXMgYnVmZmVyIGluIHBpeGVscy5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5DYW52YXNCdWZmZXIjXG4gICAgICovXG4gICAgaGVpZ2h0OiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY2FudmFzLmhlaWdodDtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmNhbnZhcy5oZWlnaHQgPSB2YWw7XG4gICAgICAgIH1cbiAgICB9XG59KTtcblxuLyoqXG4gKiBDbGVhcnMgdGhlIGNhbnZhcyB0aGF0IHdhcyBjcmVhdGVkIGJ5IHRoZSBDYW52YXNCdWZmZXIgY2xhc3MuXG4gKlxuICogQHByaXZhdGVcbiAqL1xuQ2FudmFzQnVmZmVyLnByb3RvdHlwZS5jbGVhciA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy5jb250ZXh0LnNldFRyYW5zZm9ybSgxLCAwLCAwLCAxLCAwLCAwKTtcbiAgICB0aGlzLmNvbnRleHQuY2xlYXJSZWN0KDAsMCwgdGhpcy5jYW52YXMud2lkdGgsIHRoaXMuY2FudmFzLmhlaWdodCk7XG59O1xuXG4vKipcbiAqIFJlc2l6ZXMgdGhlIGNhbnZhcyB0byB0aGUgc3BlY2lmaWVkIHdpZHRoIGFuZCBoZWlnaHQuXG4gKlxuICogQHBhcmFtIHdpZHRoIHtudW1iZXJ9IHRoZSBuZXcgd2lkdGggb2YgdGhlIGNhbnZhc1xuICogQHBhcmFtIGhlaWdodCB7bnVtYmVyfSB0aGUgbmV3IGhlaWdodCBvZiB0aGUgY2FudmFzXG4gKi9cbkNhbnZhc0J1ZmZlci5wcm90b3R5cGUucmVzaXplID0gZnVuY3Rpb24gKHdpZHRoLCBoZWlnaHQpXG57XG4gICAgdGhpcy5jYW52YXMud2lkdGggPSB3aWR0aDtcbiAgICB0aGlzLmNhbnZhcy5oZWlnaHQgPSBoZWlnaHQ7XG59O1xuXG4vKipcbiAqIERlc3Ryb3lzIHRoaXMgY2FudmFzLlxuICpcbiAqL1xuQ2FudmFzQnVmZmVyLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLmNvbnRleHQgPSBudWxsO1xuICAgIHRoaXMuY2FudmFzID0gbnVsbDtcbn07XG4iLCJ2YXIgQ09OU1QgPSByZXF1aXJlKCcuLi8uLi8uLi9jb25zdCcpO1xuXG4vKipcbiAqIEEgc2V0IG9mIGZ1bmN0aW9ucyB1c2VkIGJ5IHRoZSBjYW52YXMgcmVuZGVyZXIgdG8gZHJhdyB0aGUgcHJpbWl0aXZlIGdyYXBoaWNzIGRhdGEuXG4gKiBAc3RhdGljXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKi9cbnZhciBDYW52YXNHcmFwaGljcyA9IHt9O1xubW9kdWxlLmV4cG9ydHMgPSBDYW52YXNHcmFwaGljcztcblxuLypcbiAqIFJlbmRlcnMgYSBHcmFwaGljcyBvYmplY3QgdG8gYSBjYW52YXMuXG4gKlxuICogQHBhcmFtIGdyYXBoaWNzIHtQSVhJLkdyYXBoaWNzfSB0aGUgYWN0dWFsIGdyYXBoaWNzIG9iamVjdCB0byByZW5kZXJcbiAqIEBwYXJhbSBjb250ZXh0IHtDYW52YXNSZW5kZXJpbmdDb250ZXh0MkR9IHRoZSAyZCBkcmF3aW5nIG1ldGhvZCBvZiB0aGUgY2FudmFzXG4gKi9cbkNhbnZhc0dyYXBoaWNzLnJlbmRlckdyYXBoaWNzID0gZnVuY3Rpb24gKGdyYXBoaWNzLCBjb250ZXh0KVxue1xuICAgIHZhciB3b3JsZEFscGhhID0gZ3JhcGhpY3Mud29ybGRBbHBoYTtcblxuICAgIGlmIChncmFwaGljcy5kaXJ0eSlcbiAgICB7XG4gICAgICAgIHRoaXMudXBkYXRlR3JhcGhpY3NUaW50KGdyYXBoaWNzKTtcbiAgICAgICAgZ3JhcGhpY3MuZGlydHkgPSBmYWxzZTtcbiAgICB9XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGdyYXBoaWNzLmdyYXBoaWNzRGF0YS5sZW5ndGg7IGkrKylcbiAgICB7XG4gICAgICAgIHZhciBkYXRhID0gZ3JhcGhpY3MuZ3JhcGhpY3NEYXRhW2ldO1xuICAgICAgICB2YXIgc2hhcGUgPSBkYXRhLnNoYXBlO1xuXG4gICAgICAgIHZhciBmaWxsQ29sb3IgPSBkYXRhLl9maWxsVGludDtcbiAgICAgICAgdmFyIGxpbmVDb2xvciA9IGRhdGEuX2xpbmVUaW50O1xuXG4gICAgICAgIGNvbnRleHQubGluZVdpZHRoID0gZGF0YS5saW5lV2lkdGg7XG5cbiAgICAgICAgaWYgKGRhdGEudHlwZSA9PT0gQ09OU1QuU0hBUEVTLlBPTFkpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNvbnRleHQuYmVnaW5QYXRoKCk7XG5cbiAgICAgICAgICAgIHZhciBwb2ludHMgPSBzaGFwZS5wb2ludHM7XG5cbiAgICAgICAgICAgIGNvbnRleHQubW92ZVRvKHBvaW50c1swXSwgcG9pbnRzWzFdKTtcblxuICAgICAgICAgICAgZm9yICh2YXIgaj0xOyBqIDwgcG9pbnRzLmxlbmd0aC8yOyBqKyspXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29udGV4dC5saW5lVG8ocG9pbnRzW2ogKiAyXSwgcG9pbnRzW2ogKiAyICsgMV0pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoc2hhcGUuY2xvc2VkKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGNvbnRleHQubGluZVRvKHBvaW50c1swXSwgcG9pbnRzWzFdKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gaWYgdGhlIGZpcnN0IGFuZCBsYXN0IHBvaW50IGFyZSB0aGUgc2FtZSBjbG9zZSB0aGUgcGF0aCAtIG11Y2ggbmVhdGVyIDopXG4gICAgICAgICAgICBpZiAocG9pbnRzWzBdID09PSBwb2ludHNbcG9pbnRzLmxlbmd0aC0yXSAmJiBwb2ludHNbMV0gPT09IHBvaW50c1twb2ludHMubGVuZ3RoLTFdKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGNvbnRleHQuY2xvc2VQYXRoKCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChkYXRhLmZpbGwpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29udGV4dC5nbG9iYWxBbHBoYSA9IGRhdGEuZmlsbEFscGhhICogd29ybGRBbHBoYTtcbiAgICAgICAgICAgICAgICBjb250ZXh0LmZpbGxTdHlsZSA9ICcjJyArICgnMDAwMDAnICsgKCBmaWxsQ29sb3IgfCAwKS50b1N0cmluZygxNikpLnN1YnN0cigtNik7XG4gICAgICAgICAgICAgICAgY29udGV4dC5maWxsKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZGF0YS5saW5lV2lkdGgpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29udGV4dC5nbG9iYWxBbHBoYSA9IGRhdGEubGluZUFscGhhICogd29ybGRBbHBoYTtcbiAgICAgICAgICAgICAgICBjb250ZXh0LnN0cm9rZVN0eWxlID0gJyMnICsgKCcwMDAwMCcgKyAoIGxpbmVDb2xvciB8IDApLnRvU3RyaW5nKDE2KSkuc3Vic3RyKC02KTtcbiAgICAgICAgICAgICAgICBjb250ZXh0LnN0cm9rZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGRhdGEudHlwZSA9PT0gQ09OU1QuU0hBUEVTLlJFQ1QpXG4gICAgICAgIHtcblxuICAgICAgICAgICAgaWYgKGRhdGEuZmlsbENvbG9yIHx8IGRhdGEuZmlsbENvbG9yID09PSAwKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGNvbnRleHQuZ2xvYmFsQWxwaGEgPSBkYXRhLmZpbGxBbHBoYSAqIHdvcmxkQWxwaGE7XG4gICAgICAgICAgICAgICAgY29udGV4dC5maWxsU3R5bGUgPSAnIycgKyAoJzAwMDAwJyArICggZmlsbENvbG9yIHwgMCkudG9TdHJpbmcoMTYpKS5zdWJzdHIoLTYpO1xuICAgICAgICAgICAgICAgIGNvbnRleHQuZmlsbFJlY3Qoc2hhcGUueCwgc2hhcGUueSwgc2hhcGUud2lkdGgsIHNoYXBlLmhlaWdodCk7XG5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChkYXRhLmxpbmVXaWR0aClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb250ZXh0Lmdsb2JhbEFscGhhID0gZGF0YS5saW5lQWxwaGEgKiB3b3JsZEFscGhhO1xuICAgICAgICAgICAgICAgIGNvbnRleHQuc3Ryb2tlU3R5bGUgPSAnIycgKyAoJzAwMDAwJyArICggbGluZUNvbG9yIHwgMCkudG9TdHJpbmcoMTYpKS5zdWJzdHIoLTYpO1xuICAgICAgICAgICAgICAgIGNvbnRleHQuc3Ryb2tlUmVjdChzaGFwZS54LCBzaGFwZS55LCBzaGFwZS53aWR0aCwgc2hhcGUuaGVpZ2h0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChkYXRhLnR5cGUgPT09IENPTlNULlNIQVBFUy5DSVJDKVxuICAgICAgICB7XG4gICAgICAgICAgICAvLyBUT0RPIC0gbmVlZCB0byBiZSBVbmRlZmluZWQhXG4gICAgICAgICAgICBjb250ZXh0LmJlZ2luUGF0aCgpO1xuICAgICAgICAgICAgY29udGV4dC5hcmMoc2hhcGUueCwgc2hhcGUueSwgc2hhcGUucmFkaXVzLDAsMipNYXRoLlBJKTtcbiAgICAgICAgICAgIGNvbnRleHQuY2xvc2VQYXRoKCk7XG5cbiAgICAgICAgICAgIGlmIChkYXRhLmZpbGwpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29udGV4dC5nbG9iYWxBbHBoYSA9IGRhdGEuZmlsbEFscGhhICogd29ybGRBbHBoYTtcbiAgICAgICAgICAgICAgICBjb250ZXh0LmZpbGxTdHlsZSA9ICcjJyArICgnMDAwMDAnICsgKCBmaWxsQ29sb3IgfCAwKS50b1N0cmluZygxNikpLnN1YnN0cigtNik7XG4gICAgICAgICAgICAgICAgY29udGV4dC5maWxsKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZGF0YS5saW5lV2lkdGgpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29udGV4dC5nbG9iYWxBbHBoYSA9IGRhdGEubGluZUFscGhhICogd29ybGRBbHBoYTtcbiAgICAgICAgICAgICAgICBjb250ZXh0LnN0cm9rZVN0eWxlID0gJyMnICsgKCcwMDAwMCcgKyAoIGxpbmVDb2xvciB8IDApLnRvU3RyaW5nKDE2KSkuc3Vic3RyKC02KTtcbiAgICAgICAgICAgICAgICBjb250ZXh0LnN0cm9rZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGRhdGEudHlwZSA9PT0gQ09OU1QuU0hBUEVTLkVMSVApXG4gICAgICAgIHtcbiAgICAgICAgICAgIC8vIGVsbGlwc2UgY29kZSB0YWtlbiBmcm9tOiBodHRwOi8vc3RhY2tvdmVyZmxvdy5jb20vcXVlc3Rpb25zLzIxNzI3OTgvaG93LXRvLWRyYXctYW4tb3ZhbC1pbi1odG1sNS1jYW52YXNcblxuICAgICAgICAgICAgdmFyIHcgPSBzaGFwZS53aWR0aCAqIDI7XG4gICAgICAgICAgICB2YXIgaCA9IHNoYXBlLmhlaWdodCAqIDI7XG5cbiAgICAgICAgICAgIHZhciB4ID0gc2hhcGUueCAtIHcvMjtcbiAgICAgICAgICAgIHZhciB5ID0gc2hhcGUueSAtIGgvMjtcblxuICAgICAgICAgICAgY29udGV4dC5iZWdpblBhdGgoKTtcblxuICAgICAgICAgICAgdmFyIGthcHBhID0gMC41NTIyODQ4LFxuICAgICAgICAgICAgICAgIG94ID0gKHcgLyAyKSAqIGthcHBhLCAvLyBjb250cm9sIHBvaW50IG9mZnNldCBob3Jpem9udGFsXG4gICAgICAgICAgICAgICAgb3kgPSAoaCAvIDIpICoga2FwcGEsIC8vIGNvbnRyb2wgcG9pbnQgb2Zmc2V0IHZlcnRpY2FsXG4gICAgICAgICAgICAgICAgeGUgPSB4ICsgdywgICAgICAgICAgIC8vIHgtZW5kXG4gICAgICAgICAgICAgICAgeWUgPSB5ICsgaCwgICAgICAgICAgIC8vIHktZW5kXG4gICAgICAgICAgICAgICAgeG0gPSB4ICsgdyAvIDIsICAgICAgIC8vIHgtbWlkZGxlXG4gICAgICAgICAgICAgICAgeW0gPSB5ICsgaCAvIDI7ICAgICAgIC8vIHktbWlkZGxlXG5cbiAgICAgICAgICAgIGNvbnRleHQubW92ZVRvKHgsIHltKTtcbiAgICAgICAgICAgIGNvbnRleHQuYmV6aWVyQ3VydmVUbyh4LCB5bSAtIG95LCB4bSAtIG94LCB5LCB4bSwgeSk7XG4gICAgICAgICAgICBjb250ZXh0LmJlemllckN1cnZlVG8oeG0gKyBveCwgeSwgeGUsIHltIC0gb3ksIHhlLCB5bSk7XG4gICAgICAgICAgICBjb250ZXh0LmJlemllckN1cnZlVG8oeGUsIHltICsgb3ksIHhtICsgb3gsIHllLCB4bSwgeWUpO1xuICAgICAgICAgICAgY29udGV4dC5iZXppZXJDdXJ2ZVRvKHhtIC0gb3gsIHllLCB4LCB5bSArIG95LCB4LCB5bSk7XG5cbiAgICAgICAgICAgIGNvbnRleHQuY2xvc2VQYXRoKCk7XG5cbiAgICAgICAgICAgIGlmIChkYXRhLmZpbGwpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29udGV4dC5nbG9iYWxBbHBoYSA9IGRhdGEuZmlsbEFscGhhICogd29ybGRBbHBoYTtcbiAgICAgICAgICAgICAgICBjb250ZXh0LmZpbGxTdHlsZSA9ICcjJyArICgnMDAwMDAnICsgKCBmaWxsQ29sb3IgfCAwKS50b1N0cmluZygxNikpLnN1YnN0cigtNik7XG4gICAgICAgICAgICAgICAgY29udGV4dC5maWxsKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZGF0YS5saW5lV2lkdGgpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29udGV4dC5nbG9iYWxBbHBoYSA9IGRhdGEubGluZUFscGhhICogd29ybGRBbHBoYTtcbiAgICAgICAgICAgICAgICBjb250ZXh0LnN0cm9rZVN0eWxlID0gJyMnICsgKCcwMDAwMCcgKyAoIGxpbmVDb2xvciB8IDApLnRvU3RyaW5nKDE2KSkuc3Vic3RyKC02KTtcbiAgICAgICAgICAgICAgICBjb250ZXh0LnN0cm9rZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGRhdGEudHlwZSA9PT0gQ09OU1QuU0hBUEVTLlJSRUMpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHZhciByeCA9IHNoYXBlLng7XG4gICAgICAgICAgICB2YXIgcnkgPSBzaGFwZS55O1xuICAgICAgICAgICAgdmFyIHdpZHRoID0gc2hhcGUud2lkdGg7XG4gICAgICAgICAgICB2YXIgaGVpZ2h0ID0gc2hhcGUuaGVpZ2h0O1xuICAgICAgICAgICAgdmFyIHJhZGl1cyA9IHNoYXBlLnJhZGl1cztcblxuICAgICAgICAgICAgdmFyIG1heFJhZGl1cyA9IE1hdGgubWluKHdpZHRoLCBoZWlnaHQpIC8gMiB8IDA7XG4gICAgICAgICAgICByYWRpdXMgPSByYWRpdXMgPiBtYXhSYWRpdXMgPyBtYXhSYWRpdXMgOiByYWRpdXM7XG5cbiAgICAgICAgICAgIGNvbnRleHQuYmVnaW5QYXRoKCk7XG4gICAgICAgICAgICBjb250ZXh0Lm1vdmVUbyhyeCwgcnkgKyByYWRpdXMpO1xuICAgICAgICAgICAgY29udGV4dC5saW5lVG8ocngsIHJ5ICsgaGVpZ2h0IC0gcmFkaXVzKTtcbiAgICAgICAgICAgIGNvbnRleHQucXVhZHJhdGljQ3VydmVUbyhyeCwgcnkgKyBoZWlnaHQsIHJ4ICsgcmFkaXVzLCByeSArIGhlaWdodCk7XG4gICAgICAgICAgICBjb250ZXh0LmxpbmVUbyhyeCArIHdpZHRoIC0gcmFkaXVzLCByeSArIGhlaWdodCk7XG4gICAgICAgICAgICBjb250ZXh0LnF1YWRyYXRpY0N1cnZlVG8ocnggKyB3aWR0aCwgcnkgKyBoZWlnaHQsIHJ4ICsgd2lkdGgsIHJ5ICsgaGVpZ2h0IC0gcmFkaXVzKTtcbiAgICAgICAgICAgIGNvbnRleHQubGluZVRvKHJ4ICsgd2lkdGgsIHJ5ICsgcmFkaXVzKTtcbiAgICAgICAgICAgIGNvbnRleHQucXVhZHJhdGljQ3VydmVUbyhyeCArIHdpZHRoLCByeSwgcnggKyB3aWR0aCAtIHJhZGl1cywgcnkpO1xuICAgICAgICAgICAgY29udGV4dC5saW5lVG8ocnggKyByYWRpdXMsIHJ5KTtcbiAgICAgICAgICAgIGNvbnRleHQucXVhZHJhdGljQ3VydmVUbyhyeCwgcnksIHJ4LCByeSArIHJhZGl1cyk7XG4gICAgICAgICAgICBjb250ZXh0LmNsb3NlUGF0aCgpO1xuXG4gICAgICAgICAgICBpZiAoZGF0YS5maWxsQ29sb3IgfHwgZGF0YS5maWxsQ29sb3IgPT09IDApXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29udGV4dC5nbG9iYWxBbHBoYSA9IGRhdGEuZmlsbEFscGhhICogd29ybGRBbHBoYTtcbiAgICAgICAgICAgICAgICBjb250ZXh0LmZpbGxTdHlsZSA9ICcjJyArICgnMDAwMDAnICsgKCBmaWxsQ29sb3IgfCAwKS50b1N0cmluZygxNikpLnN1YnN0cigtNik7XG4gICAgICAgICAgICAgICAgY29udGV4dC5maWxsKCk7XG5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChkYXRhLmxpbmVXaWR0aClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb250ZXh0Lmdsb2JhbEFscGhhID0gZGF0YS5saW5lQWxwaGEgKiB3b3JsZEFscGhhO1xuICAgICAgICAgICAgICAgIGNvbnRleHQuc3Ryb2tlU3R5bGUgPSAnIycgKyAoJzAwMDAwJyArICggbGluZUNvbG9yIHwgMCkudG9TdHJpbmcoMTYpKS5zdWJzdHIoLTYpO1xuICAgICAgICAgICAgICAgIGNvbnRleHQuc3Ryb2tlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG59O1xuXG4vKlxuICogUmVuZGVycyBhIGdyYXBoaWNzIG1hc2tcbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIGdyYXBoaWNzIHtQSVhJLkdyYXBoaWNzfSB0aGUgZ3JhcGhpY3Mgd2hpY2ggd2lsbCBiZSB1c2VkIGFzIGEgbWFza1xuICogQHBhcmFtIGNvbnRleHQge0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRH0gdGhlIGNvbnRleHQgMmQgbWV0aG9kIG9mIHRoZSBjYW52YXNcbiAqL1xuQ2FudmFzR3JhcGhpY3MucmVuZGVyR3JhcGhpY3NNYXNrID0gZnVuY3Rpb24gKGdyYXBoaWNzLCBjb250ZXh0KVxue1xuICAgIHZhciBsZW4gPSBncmFwaGljcy5ncmFwaGljc0RhdGEubGVuZ3RoO1xuXG4gICAgaWYgKGxlbiA9PT0gMClcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb250ZXh0LmJlZ2luUGF0aCgpO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47IGkrKylcbiAgICB7XG4gICAgICAgIHZhciBkYXRhID0gZ3JhcGhpY3MuZ3JhcGhpY3NEYXRhW2ldO1xuICAgICAgICB2YXIgc2hhcGUgPSBkYXRhLnNoYXBlO1xuXG4gICAgICAgIGlmIChkYXRhLnR5cGUgPT09IENPTlNULlNIQVBFUy5QT0xZKVxuICAgICAgICB7XG5cbiAgICAgICAgICAgIHZhciBwb2ludHMgPSBzaGFwZS5wb2ludHM7XG5cbiAgICAgICAgICAgIGNvbnRleHQubW92ZVRvKHBvaW50c1swXSwgcG9pbnRzWzFdKTtcblxuICAgICAgICAgICAgZm9yICh2YXIgaj0xOyBqIDwgcG9pbnRzLmxlbmd0aC8yOyBqKyspXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29udGV4dC5saW5lVG8ocG9pbnRzW2ogKiAyXSwgcG9pbnRzW2ogKiAyICsgMV0pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBpZiB0aGUgZmlyc3QgYW5kIGxhc3QgcG9pbnQgYXJlIHRoZSBzYW1lIGNsb3NlIHRoZSBwYXRoIC0gbXVjaCBuZWF0ZXIgOilcbiAgICAgICAgICAgIGlmIChwb2ludHNbMF0gPT09IHBvaW50c1twb2ludHMubGVuZ3RoLTJdICYmIHBvaW50c1sxXSA9PT0gcG9pbnRzW3BvaW50cy5sZW5ndGgtMV0pXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29udGV4dC5jbG9zZVBhdGgoKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGRhdGEudHlwZSA9PT0gQ09OU1QuU0hBUEVTLlJFQ1QpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNvbnRleHQucmVjdChzaGFwZS54LCBzaGFwZS55LCBzaGFwZS53aWR0aCwgc2hhcGUuaGVpZ2h0KTtcbiAgICAgICAgICAgIGNvbnRleHQuY2xvc2VQYXRoKCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoZGF0YS50eXBlID09PSBDT05TVC5TSEFQRVMuQ0lSQylcbiAgICAgICAge1xuICAgICAgICAgICAgLy8gVE9ETyAtIG5lZWQgdG8gYmUgVW5kZWZpbmVkIVxuICAgICAgICAgICAgY29udGV4dC5hcmMoc2hhcGUueCwgc2hhcGUueSwgc2hhcGUucmFkaXVzLCAwLCAyICogTWF0aC5QSSk7XG4gICAgICAgICAgICBjb250ZXh0LmNsb3NlUGF0aCgpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGRhdGEudHlwZSA9PT0gQ09OU1QuU0hBUEVTLkVMSVApXG4gICAgICAgIHtcblxuICAgICAgICAgICAgLy8gZWxsaXBzZSBjb2RlIHRha2VuIGZyb206IGh0dHA6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvMjE3Mjc5OC9ob3ctdG8tZHJhdy1hbi1vdmFsLWluLWh0bWw1LWNhbnZhc1xuXG4gICAgICAgICAgICB2YXIgdyA9IHNoYXBlLndpZHRoICogMjtcbiAgICAgICAgICAgIHZhciBoID0gc2hhcGUuaGVpZ2h0ICogMjtcblxuICAgICAgICAgICAgdmFyIHggPSBzaGFwZS54IC0gdy8yO1xuICAgICAgICAgICAgdmFyIHkgPSBzaGFwZS55IC0gaC8yO1xuXG4gICAgICAgICAgICB2YXIga2FwcGEgPSAwLjU1MjI4NDgsXG4gICAgICAgICAgICAgICAgb3ggPSAodyAvIDIpICoga2FwcGEsIC8vIGNvbnRyb2wgcG9pbnQgb2Zmc2V0IGhvcml6b250YWxcbiAgICAgICAgICAgICAgICBveSA9IChoIC8gMikgKiBrYXBwYSwgLy8gY29udHJvbCBwb2ludCBvZmZzZXQgdmVydGljYWxcbiAgICAgICAgICAgICAgICB4ZSA9IHggKyB3LCAgICAgICAgICAgLy8geC1lbmRcbiAgICAgICAgICAgICAgICB5ZSA9IHkgKyBoLCAgICAgICAgICAgLy8geS1lbmRcbiAgICAgICAgICAgICAgICB4bSA9IHggKyB3IC8gMiwgICAgICAgLy8geC1taWRkbGVcbiAgICAgICAgICAgICAgICB5bSA9IHkgKyBoIC8gMjsgICAgICAgLy8geS1taWRkbGVcblxuICAgICAgICAgICAgY29udGV4dC5tb3ZlVG8oeCwgeW0pO1xuICAgICAgICAgICAgY29udGV4dC5iZXppZXJDdXJ2ZVRvKHgsIHltIC0gb3ksIHhtIC0gb3gsIHksIHhtLCB5KTtcbiAgICAgICAgICAgIGNvbnRleHQuYmV6aWVyQ3VydmVUbyh4bSArIG94LCB5LCB4ZSwgeW0gLSBveSwgeGUsIHltKTtcbiAgICAgICAgICAgIGNvbnRleHQuYmV6aWVyQ3VydmVUbyh4ZSwgeW0gKyBveSwgeG0gKyBveCwgeWUsIHhtLCB5ZSk7XG4gICAgICAgICAgICBjb250ZXh0LmJlemllckN1cnZlVG8oeG0gLSBveCwgeWUsIHgsIHltICsgb3ksIHgsIHltKTtcbiAgICAgICAgICAgIGNvbnRleHQuY2xvc2VQYXRoKCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoZGF0YS50eXBlID09PSBDT05TVC5TSEFQRVMuUlJFQylcbiAgICAgICAge1xuXG4gICAgICAgICAgICB2YXIgcnggPSBzaGFwZS54O1xuICAgICAgICAgICAgdmFyIHJ5ID0gc2hhcGUueTtcbiAgICAgICAgICAgIHZhciB3aWR0aCA9IHNoYXBlLndpZHRoO1xuICAgICAgICAgICAgdmFyIGhlaWdodCA9IHNoYXBlLmhlaWdodDtcbiAgICAgICAgICAgIHZhciByYWRpdXMgPSBzaGFwZS5yYWRpdXM7XG5cbiAgICAgICAgICAgIHZhciBtYXhSYWRpdXMgPSBNYXRoLm1pbih3aWR0aCwgaGVpZ2h0KSAvIDIgfCAwO1xuICAgICAgICAgICAgcmFkaXVzID0gcmFkaXVzID4gbWF4UmFkaXVzID8gbWF4UmFkaXVzIDogcmFkaXVzO1xuXG4gICAgICAgICAgICBjb250ZXh0Lm1vdmVUbyhyeCwgcnkgKyByYWRpdXMpO1xuICAgICAgICAgICAgY29udGV4dC5saW5lVG8ocngsIHJ5ICsgaGVpZ2h0IC0gcmFkaXVzKTtcbiAgICAgICAgICAgIGNvbnRleHQucXVhZHJhdGljQ3VydmVUbyhyeCwgcnkgKyBoZWlnaHQsIHJ4ICsgcmFkaXVzLCByeSArIGhlaWdodCk7XG4gICAgICAgICAgICBjb250ZXh0LmxpbmVUbyhyeCArIHdpZHRoIC0gcmFkaXVzLCByeSArIGhlaWdodCk7XG4gICAgICAgICAgICBjb250ZXh0LnF1YWRyYXRpY0N1cnZlVG8ocnggKyB3aWR0aCwgcnkgKyBoZWlnaHQsIHJ4ICsgd2lkdGgsIHJ5ICsgaGVpZ2h0IC0gcmFkaXVzKTtcbiAgICAgICAgICAgIGNvbnRleHQubGluZVRvKHJ4ICsgd2lkdGgsIHJ5ICsgcmFkaXVzKTtcbiAgICAgICAgICAgIGNvbnRleHQucXVhZHJhdGljQ3VydmVUbyhyeCArIHdpZHRoLCByeSwgcnggKyB3aWR0aCAtIHJhZGl1cywgcnkpO1xuICAgICAgICAgICAgY29udGV4dC5saW5lVG8ocnggKyByYWRpdXMsIHJ5KTtcbiAgICAgICAgICAgIGNvbnRleHQucXVhZHJhdGljQ3VydmVUbyhyeCwgcnksIHJ4LCByeSArIHJhZGl1cyk7XG4gICAgICAgICAgICBjb250ZXh0LmNsb3NlUGF0aCgpO1xuICAgICAgICB9XG4gICAgfVxufTtcblxuLypcbiAqIFVwZGF0ZXMgdGhlIHRpbnQgb2YgYSBncmFwaGljcyBvYmplY3RcbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIGdyYXBoaWNzIHtQSVhJLkdyYXBoaWNzfSB0aGUgZ3JhcGhpY3MgdGhhdCB3aWxsIGhhdmUgaXRzIHRpbnQgdXBkYXRlZFxuICpcbiAqL1xuQ2FudmFzR3JhcGhpY3MudXBkYXRlR3JhcGhpY3NUaW50ID0gZnVuY3Rpb24gKGdyYXBoaWNzKVxue1xuICAgIGlmIChncmFwaGljcy50aW50ID09PSAweEZGRkZGRiAmJiBncmFwaGljcy5fcHJldlRpbnQgPT09IGdyYXBoaWNzLnRpbnQpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIGdyYXBoaWNzLl9wcmV2VGludCA9IGdyYXBoaWNzLnRpbnQ7XG5cbiAgICB2YXIgdGludFIgPSAoZ3JhcGhpY3MudGludCA+PiAxNiAmIDB4RkYpIC8gMjU1O1xuICAgIHZhciB0aW50RyA9IChncmFwaGljcy50aW50ID4+IDggJiAweEZGKSAvIDI1NTtcbiAgICB2YXIgdGludEIgPSAoZ3JhcGhpY3MudGludCAmIDB4RkYpLyAyNTU7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGdyYXBoaWNzLmdyYXBoaWNzRGF0YS5sZW5ndGg7IGkrKylcbiAgICB7XG4gICAgICAgIHZhciBkYXRhID0gZ3JhcGhpY3MuZ3JhcGhpY3NEYXRhW2ldO1xuXG4gICAgICAgIHZhciBmaWxsQ29sb3IgPSBkYXRhLmZpbGxDb2xvciB8IDA7XG4gICAgICAgIHZhciBsaW5lQ29sb3IgPSBkYXRhLmxpbmVDb2xvciB8IDA7XG5cbiAgICAgICAgLypcbiAgICAgICAgdmFyIGNvbG9yUiA9IChmaWxsQ29sb3IgPj4gMTYgJiAweEZGKSAvIDI1NTtcbiAgICAgICAgdmFyIGNvbG9yRyA9IChmaWxsQ29sb3IgPj4gOCAmIDB4RkYpIC8gMjU1O1xuICAgICAgICB2YXIgY29sb3JCID0gKGZpbGxDb2xvciAmIDB4RkYpIC8gMjU1O1xuXG4gICAgICAgIGNvbG9yUiAqPSB0aW50UjtcbiAgICAgICAgY29sb3JHICo9IHRpbnRHO1xuICAgICAgICBjb2xvckIgKj0gdGludEI7XG5cbiAgICAgICAgZmlsbENvbG9yID0gKChjb2xvclIqMjU1IDw8IDE2KSArIChjb2xvckcqMjU1IDw8IDgpICsgY29sb3JCKjI1NSk7XG5cbiAgICAgICAgY29sb3JSID0gKGxpbmVDb2xvciA+PiAxNiAmIDB4RkYpIC8gMjU1O1xuICAgICAgICBjb2xvckcgPSAobGluZUNvbG9yID4+IDggJiAweEZGKSAvIDI1NTtcbiAgICAgICAgY29sb3JCID0gKGxpbmVDb2xvciAmIDB4RkYpIC8gMjU1O1xuXG4gICAgICAgIGNvbG9yUiAqPSB0aW50UjtcbiAgICAgICAgY29sb3JHICo9IHRpbnRHO1xuICAgICAgICBjb2xvckIgKj0gdGludEI7XG5cbiAgICAgICAgbGluZUNvbG9yID0gKChjb2xvclIqMjU1IDw8IDE2KSArIChjb2xvckcqMjU1IDw8IDgpICsgY29sb3JCKjI1NSk7XG4gICAgICAgICovXG5cbiAgICAgICAgLy8gc3VwZXIgaW5saW5lIGNvcyBpbSBhbiBvcHRpbWl6YXRpb24gTkFaSSA6KVxuICAgICAgICBkYXRhLl9maWxsVGludCA9ICgoKGZpbGxDb2xvciA+PiAxNiAmIDB4RkYpIC8gMjU1ICogdGludFIqMjU1IDw8IDE2KSArICgoZmlsbENvbG9yID4+IDggJiAweEZGKSAvIDI1NSAqIHRpbnRHKjI1NSA8PCA4KSArICAoZmlsbENvbG9yICYgMHhGRikgLyAyNTUgKiB0aW50QioyNTUpO1xuICAgICAgICBkYXRhLl9saW5lVGludCA9ICgoKGxpbmVDb2xvciA+PiAxNiAmIDB4RkYpIC8gMjU1ICogdGludFIqMjU1IDw8IDE2KSArICgobGluZUNvbG9yID4+IDggJiAweEZGKSAvIDI1NSAqIHRpbnRHKjI1NSA8PCA4KSArICAobGluZUNvbG9yICYgMHhGRikgLyAyNTUgKiB0aW50QioyNTUpO1xuXG4gICAgfVxufTtcblxuIiwidmFyIENhbnZhc0dyYXBoaWNzID0gcmVxdWlyZSgnLi9DYW52YXNHcmFwaGljcycpO1xuXG4vKipcbiAqIEEgc2V0IG9mIGZ1bmN0aW9ucyB1c2VkIHRvIGhhbmRsZSBtYXNraW5nLlxuICpcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqL1xuZnVuY3Rpb24gQ2FudmFzTWFza01hbmFnZXIoKVxue31cblxuQ2FudmFzTWFza01hbmFnZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gQ2FudmFzTWFza01hbmFnZXI7XG5tb2R1bGUuZXhwb3J0cyA9IENhbnZhc01hc2tNYW5hZ2VyO1xuXG4vKipcbiAqIFRoaXMgbWV0aG9kIGFkZHMgaXQgdG8gdGhlIGN1cnJlbnQgc3RhY2sgb2YgbWFza3MuXG4gKlxuICogQHBhcmFtIG1hc2tEYXRhIHtvYmplY3R9IHRoZSBtYXNrRGF0YSB0aGF0IHdpbGwgYmUgcHVzaGVkXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcnxQSVhJLkNhbnZhc1JlbmRlcmVyfSBUaGUgcmVuZGVyZXIgY29udGV4dCB0byB1c2UuXG4gKi9cbkNhbnZhc01hc2tNYW5hZ2VyLnByb3RvdHlwZS5wdXNoTWFzayA9IGZ1bmN0aW9uIChtYXNrRGF0YSwgcmVuZGVyZXIpXG57XG5cbiAgICByZW5kZXJlci5jb250ZXh0LnNhdmUoKTtcblxuICAgIHZhciBjYWNoZUFscGhhID0gbWFza0RhdGEuYWxwaGE7XG4gICAgdmFyIHRyYW5zZm9ybSA9IG1hc2tEYXRhLndvcmxkVHJhbnNmb3JtO1xuICAgIHZhciByZXNvbHV0aW9uID0gcmVuZGVyZXIucmVzb2x1dGlvbjtcblxuICAgIHJlbmRlcmVyLmNvbnRleHQuc2V0VHJhbnNmb3JtKFxuICAgICAgICB0cmFuc2Zvcm0uYSAqIHJlc29sdXRpb24sXG4gICAgICAgIHRyYW5zZm9ybS5iICogcmVzb2x1dGlvbixcbiAgICAgICAgdHJhbnNmb3JtLmMgKiByZXNvbHV0aW9uLFxuICAgICAgICB0cmFuc2Zvcm0uZCAqIHJlc29sdXRpb24sXG4gICAgICAgIHRyYW5zZm9ybS50eCAqIHJlc29sdXRpb24sXG4gICAgICAgIHRyYW5zZm9ybS50eSAqIHJlc29sdXRpb25cbiAgICApO1xuXG4gICAgLy9UT0RPIHN1cG9ydCBzcHJpdGUgYWxwaGEgbWFza3M/P1xuICAgIC8vbG90cyBvZiBlZmZvcnQgcmVxdWlyZWQuIElmIGRlbWFuZCBpcyBncmVhdCBlbm91Z2guLlxuICAgIGlmKCFtYXNrRGF0YS50ZXh0dXJlKVxuICAgIHtcbiAgICAgICAgQ2FudmFzR3JhcGhpY3MucmVuZGVyR3JhcGhpY3NNYXNrKG1hc2tEYXRhLCByZW5kZXJlci5jb250ZXh0KTtcbiAgICAgICAgcmVuZGVyZXIuY29udGV4dC5jbGlwKCk7XG4gICAgfVxuXG4gICAgbWFza0RhdGEud29ybGRBbHBoYSA9IGNhY2hlQWxwaGE7XG59O1xuXG4vKipcbiAqIFJlc3RvcmVzIHRoZSBjdXJyZW50IGRyYXdpbmcgY29udGV4dCB0byB0aGUgc3RhdGUgaXQgd2FzIGJlZm9yZSB0aGUgbWFzayB3YXMgYXBwbGllZC5cbiAqXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcnxQSVhJLkNhbnZhc1JlbmRlcmVyfSBUaGUgcmVuZGVyZXIgY29udGV4dCB0byB1c2UuXG4gKi9cbkNhbnZhc01hc2tNYW5hZ2VyLnByb3RvdHlwZS5wb3BNYXNrID0gZnVuY3Rpb24gKHJlbmRlcmVyKVxue1xuICAgIHJlbmRlcmVyLmNvbnRleHQucmVzdG9yZSgpO1xufTtcblxuQ2FudmFzTWFza01hbmFnZXIucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoKSB7fTtcbiIsInZhciB1dGlscyA9IHJlcXVpcmUoJy4uLy4uLy4uL3V0aWxzJyk7XG5cbi8qKlxuICogVXRpbGl0eSBtZXRob2RzIGZvciBTcHJpdGUvVGV4dHVyZSB0aW50aW5nLlxuICogQHN0YXRpY1xuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICovXG52YXIgQ2FudmFzVGludGVyID0ge307XG5tb2R1bGUuZXhwb3J0cyA9IENhbnZhc1RpbnRlcjtcblxuLyoqXG4gKiBCYXNpY2FsbHkgdGhpcyBtZXRob2QganVzdCBuZWVkcyBhIHNwcml0ZSBhbmQgYSBjb2xvciBhbmQgdGludHMgdGhlIHNwcml0ZSB3aXRoIHRoZSBnaXZlbiBjb2xvci5cbiAqXG4gKiBAcGFyYW0gc3ByaXRlIHtQSVhJLlNwcml0ZX0gdGhlIHNwcml0ZSB0byB0aW50XG4gKiBAcGFyYW0gY29sb3Ige251bWJlcn0gdGhlIGNvbG9yIHRvIHVzZSB0byB0aW50IHRoZSBzcHJpdGUgd2l0aFxuICogQHJldHVybiB7SFRNTENhbnZhc0VsZW1lbnR9IFRoZSB0aW50ZWQgY2FudmFzXG4gKi9cbkNhbnZhc1RpbnRlci5nZXRUaW50ZWRUZXh0dXJlID0gZnVuY3Rpb24gKHNwcml0ZSwgY29sb3IpXG57XG4gICAgdmFyIHRleHR1cmUgPSBzcHJpdGUudGV4dHVyZTtcblxuICAgIGNvbG9yID0gQ2FudmFzVGludGVyLnJvdW5kQ29sb3IoY29sb3IpO1xuXG4gICAgdmFyIHN0cmluZ0NvbG9yID0gJyMnICsgKCcwMDAwMCcgKyAoIGNvbG9yIHwgMCkudG9TdHJpbmcoMTYpKS5zdWJzdHIoLTYpO1xuXG4gICAgdGV4dHVyZS50aW50Q2FjaGUgPSB0ZXh0dXJlLnRpbnRDYWNoZSB8fCB7fTtcblxuICAgIGlmICh0ZXh0dXJlLnRpbnRDYWNoZVtzdHJpbmdDb2xvcl0pXG4gICAge1xuICAgICAgICByZXR1cm4gdGV4dHVyZS50aW50Q2FjaGVbc3RyaW5nQ29sb3JdO1xuICAgIH1cblxuICAgICAvLyBjbG9uZSB0ZXh0dXJlLi5cbiAgICB2YXIgY2FudmFzID0gQ2FudmFzVGludGVyLmNhbnZhcyB8fCBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdjYW52YXMnKTtcblxuICAgIC8vQ2FudmFzVGludGVyLnRpbnRXaXRoUGVyUGl4ZWwodGV4dHVyZSwgc3RyaW5nQ29sb3IsIGNhbnZhcyk7XG4gICAgQ2FudmFzVGludGVyLnRpbnRNZXRob2QodGV4dHVyZSwgY29sb3IsIGNhbnZhcyk7XG5cbiAgICBpZiAoQ2FudmFzVGludGVyLmNvbnZlcnRUaW50VG9JbWFnZSlcbiAgICB7XG4gICAgICAgIC8vIGlzIHRoaXMgYmV0dGVyP1xuICAgICAgICB2YXIgdGludEltYWdlID0gbmV3IEltYWdlKCk7XG4gICAgICAgIHRpbnRJbWFnZS5zcmMgPSBjYW52YXMudG9EYXRhVVJMKCk7XG5cbiAgICAgICAgdGV4dHVyZS50aW50Q2FjaGVbc3RyaW5nQ29sb3JdID0gdGludEltYWdlO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICB0ZXh0dXJlLnRpbnRDYWNoZVtzdHJpbmdDb2xvcl0gPSBjYW52YXM7XG4gICAgICAgIC8vIGlmIHdlIGFyZSBub3QgY29udmVydGluZyB0aGUgdGV4dHVyZSB0byBhbiBpbWFnZSB0aGVuIHdlIG5lZWQgdG8gbG9zZSB0aGUgcmVmZXJlbmNlIHRvIHRoZSBjYW52YXNcbiAgICAgICAgQ2FudmFzVGludGVyLmNhbnZhcyA9IG51bGw7XG4gICAgfVxuXG4gICAgcmV0dXJuIGNhbnZhcztcbn07XG5cbi8qKlxuICogVGludCBhIHRleHR1cmUgdXNpbmcgdGhlICdtdWx0aXBseScgb3BlcmF0aW9uLlxuICpcbiAqIEBwYXJhbSB0ZXh0dXJlIHtQSVhJLlRleHR1cmV9IHRoZSB0ZXh0dXJlIHRvIHRpbnRcbiAqIEBwYXJhbSBjb2xvciB7bnVtYmVyfSB0aGUgY29sb3IgdG8gdXNlIHRvIHRpbnQgdGhlIHNwcml0ZSB3aXRoXG4gKiBAcGFyYW0gY2FudmFzIHtIVE1MQ2FudmFzRWxlbWVudH0gdGhlIGN1cnJlbnQgY2FudmFzXG4gKi9cbkNhbnZhc1RpbnRlci50aW50V2l0aE11bHRpcGx5ID0gZnVuY3Rpb24gKHRleHR1cmUsIGNvbG9yLCBjYW52YXMpXG57XG4gICAgdmFyIGNvbnRleHQgPSBjYW52YXMuZ2V0Q29udGV4dCggJzJkJyApO1xuXG4gICAgdmFyIHJlc29sdXRpb24gPSB0ZXh0dXJlLmJhc2VUZXh0dXJlLnJlc29sdXRpb247XG5cbiAgICB2YXIgY3JvcCA9IHRleHR1cmUuY3JvcC5jbG9uZSgpO1xuICAgIGNyb3AueCAqPSByZXNvbHV0aW9uO1xuICAgIGNyb3AueSAqPSByZXNvbHV0aW9uO1xuICAgIGNyb3Aud2lkdGggKj0gcmVzb2x1dGlvbjtcbiAgICBjcm9wLmhlaWdodCAqPSByZXNvbHV0aW9uO1xuXG4gICAgY2FudmFzLndpZHRoID0gY3JvcC53aWR0aDtcbiAgICBjYW52YXMuaGVpZ2h0ID0gY3JvcC5oZWlnaHQ7XG5cbiAgICBjb250ZXh0LmZpbGxTdHlsZSA9ICcjJyArICgnMDAwMDAnICsgKCBjb2xvciB8IDApLnRvU3RyaW5nKDE2KSkuc3Vic3RyKC02KTtcblxuICAgIGNvbnRleHQuZmlsbFJlY3QoMCwgMCwgY3JvcC53aWR0aCwgY3JvcC5oZWlnaHQpO1xuXG4gICAgY29udGV4dC5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb24gPSAnbXVsdGlwbHknO1xuXG4gICAgY29udGV4dC5kcmF3SW1hZ2UoXG4gICAgICAgIHRleHR1cmUuYmFzZVRleHR1cmUuc291cmNlLFxuICAgICAgICBjcm9wLngsXG4gICAgICAgIGNyb3AueSxcbiAgICAgICAgY3JvcC53aWR0aCxcbiAgICAgICAgY3JvcC5oZWlnaHQsXG4gICAgICAgIDAsXG4gICAgICAgIDAsXG4gICAgICAgIGNyb3Aud2lkdGgsXG4gICAgICAgIGNyb3AuaGVpZ2h0XG4gICAgKTtcblxuICAgIGNvbnRleHQuZ2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uID0gJ2Rlc3RpbmF0aW9uLWF0b3AnO1xuXG4gICAgY29udGV4dC5kcmF3SW1hZ2UoXG4gICAgICAgIHRleHR1cmUuYmFzZVRleHR1cmUuc291cmNlLFxuICAgICAgICBjcm9wLngsXG4gICAgICAgIGNyb3AueSxcbiAgICAgICAgY3JvcC53aWR0aCxcbiAgICAgICAgY3JvcC5oZWlnaHQsXG4gICAgICAgIDAsXG4gICAgICAgIDAsXG4gICAgICAgIGNyb3Aud2lkdGgsXG4gICAgICAgIGNyb3AuaGVpZ2h0XG4gICAgKTtcbn07XG5cbi8qKlxuICogVGludCBhIHRleHR1cmUgdXNpbmcgdGhlICdvdmVybGF5JyBvcGVyYXRpb24uXG4gKlxuICogQHBhcmFtIHRleHR1cmUge1BJWEkuVGV4dHVyZX0gdGhlIHRleHR1cmUgdG8gdGludFxuICogQHBhcmFtIGNvbG9yIHtudW1iZXJ9IHRoZSBjb2xvciB0byB1c2UgdG8gdGludCB0aGUgc3ByaXRlIHdpdGhcbiAqIEBwYXJhbSBjYW52YXMge0hUTUxDYW52YXNFbGVtZW50fSB0aGUgY3VycmVudCBjYW52YXNcbiAqL1xuQ2FudmFzVGludGVyLnRpbnRXaXRoT3ZlcmxheSA9IGZ1bmN0aW9uICh0ZXh0dXJlLCBjb2xvciwgY2FudmFzKVxue1xuICAgIHZhciBjb250ZXh0ID0gY2FudmFzLmdldENvbnRleHQoICcyZCcgKTtcblxuICAgIHZhciByZXNvbHV0aW9uID0gdGV4dHVyZS5iYXNlVGV4dHVyZS5yZXNvbHV0aW9uO1xuXG4gICAgdmFyIGNyb3AgPSB0ZXh0dXJlLmNyb3AuY2xvbmUoKTtcbiAgICBjcm9wLnggKj0gcmVzb2x1dGlvbjtcbiAgICBjcm9wLnkgKj0gcmVzb2x1dGlvbjtcbiAgICBjcm9wLndpZHRoICo9IHJlc29sdXRpb247XG4gICAgY3JvcC5oZWlnaHQgKj0gcmVzb2x1dGlvbjtcblxuICAgIGNhbnZhcy53aWR0aCA9IGNyb3Aud2lkdGg7XG4gICAgY2FudmFzLmhlaWdodCA9IGNyb3AuaGVpZ2h0O1xuXG4gICAgY29udGV4dC5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb24gPSAnY29weSc7XG4gICAgY29udGV4dC5maWxsU3R5bGUgPSAnIycgKyAoJzAwMDAwJyArICggY29sb3IgfCAwKS50b1N0cmluZygxNikpLnN1YnN0cigtNik7XG4gICAgY29udGV4dC5maWxsUmVjdCgwLCAwLCBjcm9wLndpZHRoLCBjcm9wLmhlaWdodCk7XG5cbiAgICBjb250ZXh0Lmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbiA9ICdkZXN0aW5hdGlvbi1hdG9wJztcbiAgICBjb250ZXh0LmRyYXdJbWFnZShcbiAgICAgICAgdGV4dHVyZS5iYXNlVGV4dHVyZS5zb3VyY2UsXG4gICAgICAgIGNyb3AueCxcbiAgICAgICAgY3JvcC55LFxuICAgICAgICBjcm9wLndpZHRoLFxuICAgICAgICBjcm9wLmhlaWdodCxcbiAgICAgICAgMCxcbiAgICAgICAgMCxcbiAgICAgICAgY3JvcC53aWR0aCxcbiAgICAgICAgY3JvcC5oZWlnaHRcbiAgICApO1xuXG4gICAgLy8gY29udGV4dC5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb24gPSAnY29weSc7XG59O1xuXG4vKipcbiAqIFRpbnQgYSB0ZXh0dXJlIHBpeGVsIHBlciBwaXhlbC5cbiAqXG4gKiBAcGFyYW0gdGV4dHVyZSB7UElYSS5UZXh0dXJlfSB0aGUgdGV4dHVyZSB0byB0aW50XG4gKiBAcGFyYW0gY29sb3Ige251bWJlcn0gdGhlIGNvbG9yIHRvIHVzZSB0byB0aW50IHRoZSBzcHJpdGUgd2l0aFxuICogQHBhcmFtIGNhbnZhcyB7SFRNTENhbnZhc0VsZW1lbnR9IHRoZSBjdXJyZW50IGNhbnZhc1xuICovXG5DYW52YXNUaW50ZXIudGludFdpdGhQZXJQaXhlbCA9IGZ1bmN0aW9uICh0ZXh0dXJlLCBjb2xvciwgY2FudmFzKVxue1xuICAgIHZhciBjb250ZXh0ID0gY2FudmFzLmdldENvbnRleHQoICcyZCcgKTtcblxuICAgIHZhciByZXNvbHV0aW9uID0gdGV4dHVyZS5iYXNlVGV4dHVyZS5yZXNvbHV0aW9uO1xuXG4gICAgdmFyIGNyb3AgPSB0ZXh0dXJlLmNyb3AuY2xvbmUoKTtcbiAgICBjcm9wLnggKj0gcmVzb2x1dGlvbjtcbiAgICBjcm9wLnkgKj0gcmVzb2x1dGlvbjtcbiAgICBjcm9wLndpZHRoICo9IHJlc29sdXRpb247XG4gICAgY3JvcC5oZWlnaHQgKj0gcmVzb2x1dGlvbjtcblxuICAgIGNhbnZhcy53aWR0aCA9IGNyb3Aud2lkdGg7XG4gICAgY2FudmFzLmhlaWdodCA9IGNyb3AuaGVpZ2h0O1xuXG4gICAgY29udGV4dC5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb24gPSAnY29weSc7XG4gICAgY29udGV4dC5kcmF3SW1hZ2UoXG4gICAgICAgIHRleHR1cmUuYmFzZVRleHR1cmUuc291cmNlLFxuICAgICAgICBjcm9wLngsXG4gICAgICAgIGNyb3AueSxcbiAgICAgICAgY3JvcC53aWR0aCxcbiAgICAgICAgY3JvcC5oZWlnaHQsXG4gICAgICAgIDAsXG4gICAgICAgIDAsXG4gICAgICAgIGNyb3Aud2lkdGgsXG4gICAgICAgIGNyb3AuaGVpZ2h0XG4gICAgKTtcblxuICAgIHZhciByZ2JWYWx1ZXMgPSB1dGlscy5oZXgycmdiKGNvbG9yKTtcbiAgICB2YXIgciA9IHJnYlZhbHVlc1swXSwgZyA9IHJnYlZhbHVlc1sxXSwgYiA9IHJnYlZhbHVlc1syXTtcblxuICAgIHZhciBwaXhlbERhdGEgPSBjb250ZXh0LmdldEltYWdlRGF0YSgwLCAwLCBjcm9wLndpZHRoLCBjcm9wLmhlaWdodCk7XG5cbiAgICB2YXIgcGl4ZWxzID0gcGl4ZWxEYXRhLmRhdGE7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHBpeGVscy5sZW5ndGg7IGkgKz0gNClcbiAgICB7XG4gICAgICAgIHBpeGVsc1tpKzBdICo9IHI7XG4gICAgICAgIHBpeGVsc1tpKzFdICo9IGc7XG4gICAgICAgIHBpeGVsc1tpKzJdICo9IGI7XG4gICAgfVxuXG4gICAgY29udGV4dC5wdXRJbWFnZURhdGEocGl4ZWxEYXRhLCAwLCAwKTtcbn07XG5cbi8qKlxuICogUm91bmRzIHRoZSBzcGVjaWZpZWQgY29sb3IgYWNjb3JkaW5nIHRvIHRoZSBDYW52YXNUaW50ZXIuY2FjaGVTdGVwc1BlckNvbG9yQ2hhbm5lbC5cbiAqXG4gKiBAcGFyYW0gY29sb3Ige251bWJlcn0gdGhlIGNvbG9yIHRvIHJvdW5kLCBzaG91bGQgYmUgYSBoZXggY29sb3JcbiAqL1xuQ2FudmFzVGludGVyLnJvdW5kQ29sb3IgPSBmdW5jdGlvbiAoY29sb3IpXG57XG4gICAgdmFyIHN0ZXAgPSBDYW52YXNUaW50ZXIuY2FjaGVTdGVwc1BlckNvbG9yQ2hhbm5lbDtcblxuICAgIHZhciByZ2JWYWx1ZXMgPSB1dGlscy5oZXgycmdiKGNvbG9yKTtcblxuICAgIHJnYlZhbHVlc1swXSA9IE1hdGgubWluKDI1NSwgKHJnYlZhbHVlc1swXSAvIHN0ZXApICogc3RlcCk7XG4gICAgcmdiVmFsdWVzWzFdID0gTWF0aC5taW4oMjU1LCAocmdiVmFsdWVzWzFdIC8gc3RlcCkgKiBzdGVwKTtcbiAgICByZ2JWYWx1ZXNbMl0gPSBNYXRoLm1pbigyNTUsIChyZ2JWYWx1ZXNbMl0gLyBzdGVwKSAqIHN0ZXApO1xuXG4gICAgcmV0dXJuIHV0aWxzLnJnYjJoZXgocmdiVmFsdWVzKTtcbn07XG5cbi8qKlxuICogTnVtYmVyIG9mIHN0ZXBzIHdoaWNoIHdpbGwgYmUgdXNlZCBhcyBhIGNhcCB3aGVuIHJvdW5kaW5nIGNvbG9ycy5cbiAqXG4gKiBAbWVtYmVyXG4gKi9cbkNhbnZhc1RpbnRlci5jYWNoZVN0ZXBzUGVyQ29sb3JDaGFubmVsID0gODtcblxuLyoqXG4gKiBUaW50IGNhY2hlIGJvb2xlYW4gZmxhZy5cbiAqXG4gKiBAbWVtYmVyXG4gKi9cbkNhbnZhc1RpbnRlci5jb252ZXJ0VGludFRvSW1hZ2UgPSBmYWxzZTtcblxuLyoqXG4gKiBXaGV0aGVyIG9yIG5vdCB0aGUgQ2FudmFzIEJsZW5kTW9kZXMgYXJlIHN1cHBvcnRlZCwgY29uc2VxdWVudGx5IHRoZSBhYmlsaXR5IHRvIHRpbnQgdXNpbmcgdGhlIG11bHRpcGx5IG1ldGhvZC5cbiAqXG4gKiBAbWVtYmVyXG4gKi9cbkNhbnZhc1RpbnRlci5jYW5Vc2VNdWx0aXBseSA9IHV0aWxzLmNhblVzZU5ld0NhbnZhc0JsZW5kTW9kZXMoKTtcblxuLyoqXG4gKiBUaGUgdGludGluZyBtZXRob2QgdGhhdCB3aWxsIGJlIHVzZWQuXG4gKlxuICovXG5DYW52YXNUaW50ZXIudGludE1ldGhvZCA9IENhbnZhc1RpbnRlci5jYW5Vc2VNdWx0aXBseSA/IENhbnZhc1RpbnRlci50aW50V2l0aE11bHRpcGx5IDogIENhbnZhc1RpbnRlci50aW50V2l0aFBlclBpeGVsO1xuIiwidmFyIEdMVGV4dHVyZSA9IHJlcXVpcmUoJ3BpeGktZ2wtY29yZScpLkdMVGV4dHVyZSxcblx0dXRpbHMgPSByZXF1aXJlKCcuLi8uLi91dGlscycpO1xuXG4vKipcbiAqIEhlbHBlciBjbGFzcyB0byBjcmVhdGUgYSB3ZWJHTCBUZXh0dXJlXG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIGdsIHtXZWJHTFJlbmRlcmluZ0NvbnRleHR9XG4gKi9cblxudmFyIFRleHR1cmVNYW5hZ2VyID0gZnVuY3Rpb24oZ2wpXG57XG5cdHRoaXMuZ2wgPSBnbDtcblxuXHQvLyB0cmFjayB0ZXh0dXJlcyBpbiB0aGUgcmVuZGVyZXIgc28gd2UgY2FuIG5vIGxvbmdlciBsaXN0ZW4gdG8gdGhlbSBvbiBkZXN0cnVjdGlvbi5cblx0dGhpcy5fbWFuYWdlZFRleHR1cmVzID0gW107XG4gICAgdGhpcy5nbFRleHR1cmVzID0ge307XG5cbn1cblxuVGV4dHVyZU1hbmFnZXIucHJvdG90eXBlLmJpbmRUZXh0dXJlID0gZnVuY3Rpb24odGV4dHVyZSlcbntcblxufVxuXG5cblRleHR1cmVNYW5hZ2VyLnByb3RvdHlwZS5nZXRUZXh0dXJlID0gZnVuY3Rpb24odGV4dHVyZSlcbntcblxufVxuXG4vKipcbiAqIFVwZGF0ZXMgYW5kL29yIENyZWF0ZXMgYSBXZWJHTCB0ZXh0dXJlIGZvciB0aGUgcmVuZGVyZXIncyBjb250ZXh0LlxuICpcbiAqIEBwYXJhbSB0ZXh0dXJlIHtQSVhJLkJhc2VUZXh0dXJlfFBJWEkuVGV4dHVyZX0gdGhlIHRleHR1cmUgdG8gdXBkYXRlXG4gKi9cblRleHR1cmVNYW5hZ2VyLnByb3RvdHlwZS51cGRhdGVUZXh0dXJlID0gZnVuY3Rpb24odGV4dHVyZSlcbntcblx0dGV4dHVyZSA9IHRleHR1cmUuYmFzZVRleHR1cmUgfHwgdGV4dHVyZTtcblxuXHRpZiAoIXRleHR1cmUuaGFzTG9hZGVkKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIFxuICAgIHZhciBnbCA9IHRoaXMuZ2w7XG4gICAgdmFyIGdsVGV4dHVyZSA9IHRoaXMuZ2xUZXh0dXJlc1t0ZXh0dXJlLnVpZF0vL3RleHR1cmUuX2dsVGV4dHVyZXNbZ2wuaWRdO1xuXG4gICAgaWYgKCFnbFRleHR1cmUpXG4gICAge1xuICAgICAgICBnbFRleHR1cmUgPSBuZXcgR0xUZXh0dXJlKGdsKTtcbiAgICAgICAgZ2xUZXh0dXJlLnByZW11bHRpcGx5QWxwaGEgPSB0cnVlXG4gICAgICAgIHRleHR1cmUuX2dsVGV4dHVyZXNbZ2wuaWRdID0gZ2xUZXh0dXJlO1xuXG4gICAgICAgLy8gdGhpcy5nbFRleHR1cmVzW3RleHR1cmUudWlkXSA9IGdsVGV4dHVyZTtcblxuICAgICAgICB0ZXh0dXJlLm9uKCd1cGRhdGUnLCB0aGlzLnVwZGF0ZVRleHR1cmUsIHRoaXMpO1xuICAgICAgICB0ZXh0dXJlLm9uKCdkaXNwb3NlJywgdGhpcy5kZXN0cm95VGV4dHVyZSwgdGhpcyk7XG4gICAgICAgIFxuICAgICAgICB0aGlzLl9tYW5hZ2VkVGV4dHVyZXMucHVzaCh0ZXh0dXJlKTtcbiAgICB9XG5cbiAgICBnbFRleHR1cmUudXBsb2FkKHRleHR1cmUuc291cmNlKTtcbiAgICBcbiAgICAvL1RPRE8gY2hlY2sgaXMgcG93ZXIgb2YgdHdvLi5cbiAgICBnbFRleHR1cmUuZW5hYmxlV3JhcENsYW1wKCk7XG5cblxuICAgIC8vIFRPRE8gY2hlY2sgZm9yIHNjYWxpbmcgdHlwZVxuICAgIGdsVGV4dHVyZS5lbmFibGVMaW5lYXJTY2FsaW5nKCk7XG5cbiAgICByZXR1cm4gIHRleHR1cmUuX2dsVGV4dHVyZXNbZ2wuaWRdO1xufVxuXG4vKipcbiAqIERlbGV0ZXMgdGhlIHRleHR1cmUgZnJvbSBXZWJHTFxuICpcbiAqIEBwYXJhbSB0ZXh0dXJlIHtQSVhJLkJhc2VUZXh0dXJlfFBJWEkuVGV4dHVyZX0gdGhlIHRleHR1cmUgdG8gZGVzdHJveVxuICovXG5UZXh0dXJlTWFuYWdlci5wcm90b3R5cGUuZGVzdHJveVRleHR1cmUgPSBmdW5jdGlvbih0ZXh0dXJlLCBfc2tpcFJlbW92ZSlcbntcblx0dGV4dHVyZSA9IHRleHR1cmUuYmFzZVRleHR1cmUgfHwgdGV4dHVyZTtcblxuICAgIGlmICghdGV4dHVyZS5oYXNMb2FkZWQpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHRleHR1cmUuX2dsVGV4dHVyZXNbdGhpcy5nbC5pZF0pXG4gICAge1xuICAgICAgICB0ZXh0dXJlLl9nbFRleHR1cmVzW3RoaXMuZ2wuaWRdLmRlc3Ryb3koKTtcbiAgICAgICAgdGV4dHVyZS5vZmYoJ3VwZGF0ZScsIHRoaXMudXBkYXRlVGV4dHVyZSwgdGhpcyk7XG4gICAgICAgIHRleHR1cmUub2ZmKCdkaXNwb3NlJywgdGhpcy5kZXN0cm95VGV4dHVyZSwgdGhpcyk7XG5cblxuICAgICAgICBkZWxldGUgdGV4dHVyZS5fZ2xUZXh0dXJlc1t0aGlzLmdsLmlkXTtcblxuICAgICAgICBpZiAoIV9za2lwUmVtb3ZlKVxuICAgICAgICB7XG4gICAgICAgICAgICB2YXIgaSA9IHRoaXMuX21hbmFnZWRUZXh0dXJlcy5pbmRleE9mKHRleHR1cmUpO1xuICAgICAgICAgICAgaWYgKGkgIT09IC0xKSB7XG4gICAgICAgICAgICAgICAgdXRpbHMucmVtb3ZlSXRlbXModGhpcy5fbWFuYWdlZFRleHR1cmVzLCBpLCAxKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn1cblxuVGV4dHVyZU1hbmFnZXIucHJvdG90eXBlLnJlbW92ZUFsbCA9IGZ1bmN0aW9uKClcbntcblx0Ly8gZW1wdHkgYWxsIHRoZSBvbGQgZ2wgdGV4dHVyZXMgYXMgdGhleSBhcmUgdXNlbGVzcyBub3dcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuX21hbmFnZWRUZXh0dXJlcy5sZW5ndGg7ICsraSlcbiAgICB7XG4gICAgICAgIHZhciB0ZXh0dXJlID0gdGhpcy5fbWFuYWdlZFRleHR1cmVzW2ldO1xuICAgICAgICBpZiAodGV4dHVyZS5fZ2xUZXh0dXJlc1t0aGlzLmdsLmlkXSlcbiAgICAgICAge1xuICAgICAgICAgICAgZGVsZXRlIHRleHR1cmUuX2dsVGV4dHVyZXNbdGhpcy5nbC5pZF07XG4gICAgICAgIH1cbiAgICB9XG59XG5cblRleHR1cmVNYW5hZ2VyLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24oKVxue1xuICAgIC8vIGRlc3Ryb3kgbWFuYWdlZCB0ZXh0dXJlc1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5fbWFuYWdlZFRleHR1cmVzLmxlbmd0aDsgKytpKVxuICAgIHtcbiAgICAgICAgdmFyIHRleHR1cmUgPSB0aGlzLl9tYW5hZ2VkVGV4dHVyZXNbaV07XG4gICAgICAgIHRoaXMuZGVzdHJveVRleHR1cmUodGV4dHVyZSwgdHJ1ZSk7XG4gICAgICAgIHRleHR1cmUub2ZmKCd1cGRhdGUnLCB0aGlzLnVwZGF0ZVRleHR1cmUsIHRoaXMpO1xuICAgICAgICB0ZXh0dXJlLm9mZignZGlzcG9zZScsIHRoaXMuZGVzdHJveVRleHR1cmUsIHRoaXMpO1xuICAgIH1cblxuICAgIHRoaXMuX21hbmFnZWRUZXh0dXJlcyA9IG51bGw7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gVGV4dHVyZU1hbmFnZXI7XG5cbiIsInZhciBTeXN0ZW1SZW5kZXJlciA9IHJlcXVpcmUoJy4uL1N5c3RlbVJlbmRlcmVyJyksXG4gICAgU2hhZGVyTWFuYWdlciA9IHJlcXVpcmUoJy4vbWFuYWdlcnMvU2hhZGVyTWFuYWdlcicpLFxuICAgIE1hc2tNYW5hZ2VyID0gcmVxdWlyZSgnLi9tYW5hZ2Vycy9NYXNrTWFuYWdlcicpLFxuICAgIFN0ZW5jaWxNYW5hZ2VyID0gcmVxdWlyZSgnLi9tYW5hZ2Vycy9TdGVuY2lsTWFuYWdlcicpLFxuICAgIEZpbHRlck1hbmFnZXIgPSByZXF1aXJlKCcuL21hbmFnZXJzL0ZpbHRlck1hbmFnZXInKSxcbiAgICBCbGVuZE1vZGVNYW5hZ2VyID0gcmVxdWlyZSgnLi9tYW5hZ2Vycy9CbGVuZE1vZGVNYW5hZ2VyJyksXG4gICAgUmVuZGVyVGFyZ2V0ID0gcmVxdWlyZSgnLi91dGlscy9SZW5kZXJUYXJnZXQnKSxcbiAgICBPYmplY3RSZW5kZXJlciA9IHJlcXVpcmUoJy4vdXRpbHMvT2JqZWN0UmVuZGVyZXInKSxcbiAgICBGWEFBRmlsdGVyID0gcmVxdWlyZSgnLi9maWx0ZXJzL0ZYQUFGaWx0ZXInKSxcbiAgICBUZXh0dXJlTWFuYWdlciA9IHJlcXVpcmUoJy4vVGV4dHVyZU1hbmFnZXInKSxcbiAgICBjcmVhdGVDb250ZXh0ID0gcmVxdWlyZSgncGl4aS1nbC1jb3JlJykuY3JlYXRlQ29udGV4dCxcbiAgICBtYXBXZWJHTEJsZW5kTW9kZXNUb1BpeGkgPSByZXF1aXJlKCcuL3V0aWxzL21hcFdlYkdMQmxlbmRNb2Rlc1RvUGl4aScpLFxuICAgIG1hcFdlYkdMRHJhd01vZGVzVG9QaXhpID0gcmVxdWlyZSgnLi91dGlscy9tYXBXZWJHTERyYXdNb2Rlc1RvUGl4aScpLFxuICAgIHV0aWxzID0gcmVxdWlyZSgnLi4vLi4vdXRpbHMnKSxcbiAgICBDT05TVCA9IHJlcXVpcmUoJy4uLy4uL2NvbnN0Jyk7XG5cbi8qKlxuICogVGhlIFdlYkdMUmVuZGVyZXIgZHJhd3MgdGhlIHNjZW5lIGFuZCBhbGwgaXRzIGNvbnRlbnQgb250byBhIHdlYkdMIGVuYWJsZWQgY2FudmFzLiBUaGlzIHJlbmRlcmVyXG4gKiBzaG91bGQgYmUgdXNlZCBmb3IgYnJvd3NlcnMgdGhhdCBzdXBwb3J0IHdlYkdMLiBUaGlzIFJlbmRlciB3b3JrcyBieSBhdXRvbWF0aWNhbGx5IG1hbmFnaW5nIHdlYkdMQmF0Y2hzLlxuICogU28gbm8gbmVlZCBmb3IgU3ByaXRlIEJhdGNoZXMgb3IgU3ByaXRlIENsb3Vkcy5cbiAqIERvbid0IGZvcmdldCB0byBhZGQgdGhlIHZpZXcgdG8geW91ciBET00gb3IgeW91IHdpbGwgbm90IHNlZSBhbnl0aGluZyA6KVxuICpcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqIEBleHRlbmRzIFBJWEkuU3lzdGVtUmVuZGVyZXJcbiAqIEBwYXJhbSBbd2lkdGg9MF0ge251bWJlcn0gdGhlIHdpZHRoIG9mIHRoZSBjYW52YXMgdmlld1xuICogQHBhcmFtIFtoZWlnaHQ9MF0ge251bWJlcn0gdGhlIGhlaWdodCBvZiB0aGUgY2FudmFzIHZpZXdcbiAqIEBwYXJhbSBbb3B0aW9uc10ge29iamVjdH0gVGhlIG9wdGlvbmFsIHJlbmRlcmVyIHBhcmFtZXRlcnNcbiAqIEBwYXJhbSBbb3B0aW9ucy52aWV3XSB7SFRNTENhbnZhc0VsZW1lbnR9IHRoZSBjYW52YXMgdG8gdXNlIGFzIGEgdmlldywgb3B0aW9uYWxcbiAqIEBwYXJhbSBbb3B0aW9ucy50cmFuc3BhcmVudD1mYWxzZV0ge2Jvb2xlYW59IElmIHRoZSByZW5kZXIgdmlldyBpcyB0cmFuc3BhcmVudCwgZGVmYXVsdCBmYWxzZVxuICogQHBhcmFtIFtvcHRpb25zLmF1dG9SZXNpemU9ZmFsc2VdIHtib29sZWFufSBJZiB0aGUgcmVuZGVyIHZpZXcgaXMgYXV0b21hdGljYWxseSByZXNpemVkLCBkZWZhdWx0IGZhbHNlXG4gKiBAcGFyYW0gW29wdGlvbnMuYW50aWFsaWFzPWZhbHNlXSB7Ym9vbGVhbn0gc2V0cyBhbnRpYWxpYXMuIElmIG5vdCBhdmFpbGFibGUgbmF0aXZlbHkgdGhlbiBGWEFBIGFudGlhbGlhc2luZyBpcyB1c2VkXG4gKiBAcGFyYW0gW29wdGlvbnMuZm9yY2VGWEFBPWZhbHNlXSB7Ym9vbGVhbn0gZm9yY2VzIEZYQUEgYW50aWFsaWFzaW5nIHRvIGJlIHVzZWQgb3ZlciBuYXRpdmUuIEZYQUEgaXMgZmFzdGVyLCBidXQgbWF5IG5vdCBhbHdheXMgbG9vayBhcyBncmVhdFxuICogQHBhcmFtIFtvcHRpb25zLnJlc29sdXRpb249MV0ge251bWJlcn0gdGhlIHJlc29sdXRpb24gb2YgdGhlIHJlbmRlcmVyIHJldGluYSB3b3VsZCBiZSAyXG4gKiBAcGFyYW0gW29wdGlvbnMuY2xlYXJCZWZvcmVSZW5kZXI9dHJ1ZV0ge2Jvb2xlYW59IFRoaXMgc2V0cyBpZiB0aGUgQ2FudmFzUmVuZGVyZXIgd2lsbCBjbGVhciB0aGUgY2FudmFzIG9yXG4gKiAgICAgIG5vdCBiZWZvcmUgdGhlIG5ldyByZW5kZXIgcGFzcy4gSWYgeW91IHdpc2ggdG8gc2V0IHRoaXMgdG8gZmFsc2UsIHlvdSAqbXVzdCogc2V0IHByZXNlcnZlRHJhd2luZ0J1ZmZlciB0byBgdHJ1ZWAuXG4gKiBAcGFyYW0gW29wdGlvbnMucHJlc2VydmVEcmF3aW5nQnVmZmVyPWZhbHNlXSB7Ym9vbGVhbn0gZW5hYmxlcyBkcmF3aW5nIGJ1ZmZlciBwcmVzZXJ2YXRpb24sIGVuYWJsZSB0aGlzIGlmXG4gKiAgICAgIHlvdSBuZWVkIHRvIGNhbGwgdG9EYXRhVXJsIG9uIHRoZSB3ZWJnbCBjb250ZXh0LlxuICogQHBhcmFtIFtvcHRpb25zLnJvdW5kUGl4ZWxzPWZhbHNlXSB7Ym9vbGVhbn0gSWYgdHJ1ZSBQaXhpIHdpbGwgTWF0aC5mbG9vcigpIHgveSB2YWx1ZXMgd2hlbiByZW5kZXJpbmcsIHN0b3BwaW5nIHBpeGVsIGludGVycG9sYXRpb24uXG4gKi9cbmZ1bmN0aW9uIFdlYkdMUmVuZGVyZXIod2lkdGgsIGhlaWdodCwgb3B0aW9ucylcbntcbiAgICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcblxuICAgIFN5c3RlbVJlbmRlcmVyLmNhbGwodGhpcywgJ1dlYkdMJywgd2lkdGgsIGhlaWdodCwgb3B0aW9ucyk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgdHlwZSBvZiB0aGlzIHJlbmRlcmVyIGFzIGEgc3RhbmRhcmRpc2VkIGNvbnN0XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9Ly9cbiAgICAgKlxuICAgICAqL1xuICAgIHRoaXMudHlwZSA9IENPTlNULlJFTkRFUkVSX1RZUEUuV0VCR0w7XG5cbiAgICB0aGlzLmhhbmRsZUNvbnRleHRMb3N0ID0gdGhpcy5oYW5kbGVDb250ZXh0TG9zdC5iaW5kKHRoaXMpO1xuICAgIHRoaXMuaGFuZGxlQ29udGV4dFJlc3RvcmVkID0gdGhpcy5oYW5kbGVDb250ZXh0UmVzdG9yZWQuYmluZCh0aGlzKTtcblxuICAgIHRoaXMudmlldy5hZGRFdmVudExpc3RlbmVyKCd3ZWJnbGNvbnRleHRsb3N0JywgdGhpcy5oYW5kbGVDb250ZXh0TG9zdCwgZmFsc2UpO1xuICAgIHRoaXMudmlldy5hZGRFdmVudExpc3RlbmVyKCd3ZWJnbGNvbnRleHRyZXN0b3JlZCcsIHRoaXMuaGFuZGxlQ29udGV4dFJlc3RvcmVkLCBmYWxzZSk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgb3B0aW9ucyBwYXNzZWQgaW4gdG8gY3JlYXRlIGEgbmV3IHdlYmdsIGNvbnRleHQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtvYmplY3R9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9jb250ZXh0T3B0aW9ucyA9IHtcbiAgICAgICAgYWxwaGE6IHRoaXMudHJhbnNwYXJlbnQsXG4gICAgICAgIGFudGlhbGlhczogb3B0aW9ucy5hbnRpYWxpYXMsXG4gICAgICAgIHByZW11bHRpcGxpZWRBbHBoYTogdGhpcy50cmFuc3BhcmVudCAmJiB0aGlzLnRyYW5zcGFyZW50ICE9PSAnbm90TXVsdGlwbGllZCcsXG4gICAgICAgIHN0ZW5jaWw6IHRydWUsXG4gICAgICAgIHByZXNlcnZlRHJhd2luZ0J1ZmZlcjogb3B0aW9ucy5wcmVzZXJ2ZURyYXdpbmdCdWZmZXJcbiAgICB9O1xuXG4gICAgdGhpcy5fYmFja2dyb3VuZENvbG9yUmdiYVszXSA9IHRoaXMudHJhbnNwYXJlbnQgPyAwIDogMTtcblxuICAgIC8qKlxuICAgICAqIERlYWxzIHdpdGggbWFuYWdpbmcgdGhlIHNoYWRlciBwcm9ncmFtcyBhbmQgdGhlaXIgYXR0cmlicy5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuU2hhZGVyTWFuYWdlcn1cbiAgICAgKi9cbiAgICB0aGlzLnNoYWRlck1hbmFnZXIgPSBuZXcgU2hhZGVyTWFuYWdlcih0aGlzKTtcblxuICAgIC8qKlxuICAgICAqIE1hbmFnZXMgdGhlIG1hc2tzIHVzaW5nIHRoZSBzdGVuY2lsIGJ1ZmZlci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuTWFza01hbmFnZXJ9XG4gICAgICovXG4gICAgdGhpcy5tYXNrTWFuYWdlciA9IG5ldyBNYXNrTWFuYWdlcih0aGlzKTtcblxuICAgIC8qKlxuICAgICAqIE1hbmFnZXMgdGhlIHN0ZW5jaWwgYnVmZmVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5TdGVuY2lsTWFuYWdlcn1cbiAgICAgKi9cbiAgICB0aGlzLnN0ZW5jaWxNYW5hZ2VyID0gbmV3IFN0ZW5jaWxNYW5hZ2VyKHRoaXMpO1xuXG4gICAgLyoqXG4gICAgICogTWFuYWdlcyB0aGUgZmlsdGVycy5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuRmlsdGVyTWFuYWdlcn1cbiAgICAgKi9cbiAgICB0aGlzLmZpbHRlck1hbmFnZXIgPSBuZXcgRmlsdGVyTWFuYWdlcih0aGlzKTtcblxuICAgIC8qKlxuICAgICAqIE1hbmFnZXMgdGhlIGJsZW5kTW9kZXNcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuQmxlbmRNb2RlTWFuYWdlcn1cbiAgICAgKi9cbiAgICB0aGlzLmJsZW5kTW9kZU1hbmFnZXIgPSBuZXcgQmxlbmRNb2RlTWFuYWdlcih0aGlzKTtcblxuICAgIFxuICAgIC8qKlxuICAgICAqIFRoZSBjdXJyZW50bHkgYWN0aXZlIE9iamVjdFJlbmRlcmVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5PYmplY3RSZW5kZXJlcn1cbiAgICAgKi9cbiAgICB0aGlzLmN1cnJlbnRSZW5kZXJlciA9IG5ldyBPYmplY3RSZW5kZXJlcih0aGlzKTtcblxuICAgIHRoaXMuaW5pdFBsdWdpbnMoKTtcblxuICAgIC8vIGluaXRpYWxpemUgdGhlIGNvbnRleHQgc28gaXQgaXMgcmVhZHkgZm9yIHRoZSBtYW5hZ2Vycy5cbiAgICB0aGlzLmdsID0gY3JlYXRlQ29udGV4dCh0aGlzLnZpZXcsIHRoaXMuX2NvbnRleHRPcHRpb25zKTtcblxuICAgIHRoaXMuX2luaXRDb250ZXh0KCk7XG5cbiAgICAvLyBtYXAgc29tZSB3ZWJHTCBibGVuZCBhbmQgZHJhd21vZGVzLi5cbiAgICB0aGlzLmJsZW5kTW9kZXMgPSBtYXBXZWJHTEJsZW5kTW9kZXNUb1BpeGkoZ2wpO1xuICAgIHRoaXMuZHJhd01vZGVzID0gbWFwV2ViR0xEcmF3TW9kZXNUb1BpeGkoZ2wpXG5cbiAgICB0aGlzLl9hY3RpdmVTaGFkZXIgPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogSG9sZHMgdGhlIGN1cnJlbnQgcmVuZGVyIHRhcmdldFxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5SZW5kZXJUYXJnZXR9XG4gICAgICovXG4gICAgdGhpcy5fYWN0aXZlUmVuZGVyVGFyZ2V0ID0gbnVsbDtcbiAgICB0aGlzLl9hY3RpdmVUZXh0dXJlTG9jYXRpb24gPSBudWxsO1xuICAgIHRoaXMuX2FjdGl2ZVRleHR1cmUgPSBudWxsO1xufVxuXG4vLyBjb25zdHJ1Y3RvclxuV2ViR0xSZW5kZXJlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFN5c3RlbVJlbmRlcmVyLnByb3RvdHlwZSk7XG5XZWJHTFJlbmRlcmVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFdlYkdMUmVuZGVyZXI7XG5tb2R1bGUuZXhwb3J0cyA9IFdlYkdMUmVuZGVyZXI7XG51dGlscy5wbHVnaW5UYXJnZXQubWl4aW4oV2ViR0xSZW5kZXJlcik7XG5cbi8qKlxuICogQ3JlYXRlcyB0aGUgV2ViR0wgY29udGV4dFxuICpcbiAqIEBwcml2YXRlXG4gKi9cbldlYkdMUmVuZGVyZXIucHJvdG90eXBlLl9pbml0Q29udGV4dCA9IGZ1bmN0aW9uICgpXG57XG4gICAgdmFyIGdsID0gdGhpcy5nbDtcblxuICAgIC8vIGNyZWF0ZSBhIHRleHR1cmUgbWFuYWdlci4uLlxuICAgIHRoaXMudGV4dHVyZU1hbmFnZXIgPSBuZXcgVGV4dHVyZU1hbmFnZXIoZ2wpO1xuXG4gICAgLy8gc2V0IHVwIHRoZSBkZWZhdWx0IHBpeGkgc2V0dGluZ3MuLlxuICAgIGdsLmRpc2FibGUoZ2wuREVQVEhfVEVTVCk7XG4gICAgZ2wuZGlzYWJsZShnbC5DVUxMX0ZBQ0UpO1xuICAgIGdsLmVuYWJsZShnbC5CTEVORCk7XG5cblxuICAgIHRoaXMucm9vdFJlbmRlclRhcmdldCA9IG5ldyBSZW5kZXJUYXJnZXQoZ2wsIHRoaXMud2lkdGgsIHRoaXMuaGVpZ2h0LCBudWxsLCB0aGlzLnJlc29sdXRpb24sIHRydWUpO1xuICAgIHRoaXMucm9vdFJlbmRlclRhcmdldC5jbGVhckNvbG9yID0gdGhpcy5fYmFja2dyb3VuZENvbG9yUmdiYTtcbiAgICBcbiAgICB0aGlzLmJpbmRSZW5kZXJUYXJnZXQodGhpcy5yb290UmVuZGVyVGFyZ2V0KTtcblxuICAgIHRoaXMuZW1pdCgnY29udGV4dCcsIGdsKTtcblxuICAgIC8vIHNldHVwIHRoZSB3aWR0aC9oZWlnaHQgcHJvcGVydGllcyBhbmQgZ2wgdmlld3BvcnRcbiAgICB0aGlzLnJlc2l6ZSh0aGlzLndpZHRoLCB0aGlzLmhlaWdodCk7ICAgIFxufTtcblxuLyoqXG4gKiBSZW5kZXJzIHRoZSBvYmplY3QgdG8gaXRzIHdlYkdMIHZpZXdcbiAqXG4gKiBAcGFyYW0gb2JqZWN0IHtQSVhJLkRpc3BsYXlPYmplY3R9IHRoZSBvYmplY3QgdG8gYmUgcmVuZGVyZWRcbiAqL1xuV2ViR0xSZW5kZXJlci5wcm90b3R5cGUucmVuZGVyID0gZnVuY3Rpb24gKGRpc3BsYXlPYmplY3QpXG57XG4gICAgdGhpcy5lbWl0KCdwcmVyZW5kZXInKTtcblxuICAgIC8vIG5vIHBvaW50IHJlbmRlcmluZyBpZiBvdXIgY29udGV4dCBoYXMgYmVlbiBibG93biB1cCFcbiAgICBpZiAodGhpcy5nbC5pc0NvbnRleHRMb3N0KCkpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5fbGFzdE9iamVjdFJlbmRlcmVkID0gZGlzcGxheU9iamVjdDtcblxuICAgIHZhciBjYWNoZVBhcmVudCA9IGRpc3BsYXlPYmplY3QucGFyZW50O1xuICAgIGRpc3BsYXlPYmplY3QucGFyZW50ID0gdGhpcy5fdGVtcERpc3BsYXlPYmplY3RQYXJlbnQ7XG4gICAgLy8gdXBkYXRlIHRoZSBzY2VuZSBncmFwaFxuICAgIGRpc3BsYXlPYmplY3QudXBkYXRlVHJhbnNmb3JtKCk7XG4gICAgZGlzcGxheU9iamVjdC5wYXJlbnQgPSBjYWNoZVBhcmVudDtcblxuICAgIHRoaXMucmVuZGVyRGlzcGxheU9iamVjdChkaXNwbGF5T2JqZWN0LCB0aGlzLnJvb3RSZW5kZXJUYXJnZXQsIHRoaXMuY2xlYXJCZWZvcmVSZW5kZXIpOy8vdGhpcy5wcm9qZWN0aW9uKTtcblxuICAgIHRoaXMuZW1pdCgncG9zdHJlbmRlcicpO1xufTtcblxuLyoqXG4gKiBSZW5kZXJzIGEgRGlzcGxheSBPYmplY3QuXG4gKlxuICogQHBhcmFtIGRpc3BsYXlPYmplY3Qge1BJWEkuRGlzcGxheU9iamVjdH0gVGhlIERpc3BsYXlPYmplY3QgdG8gcmVuZGVyXG4gKiBAcGFyYW0gcmVuZGVyVGFyZ2V0IHtQSVhJLlJlbmRlclRhcmdldH0gVGhlIHJlbmRlciB0YXJnZXQgdG8gdXNlIHRvIHJlbmRlciB0aGlzIGRpc3BsYXkgb2JqZWN0XG4gKlxuICovXG5XZWJHTFJlbmRlcmVyLnByb3RvdHlwZS5yZW5kZXJEaXNwbGF5T2JqZWN0ID0gZnVuY3Rpb24gKGRpc3BsYXlPYmplY3QsIHJlbmRlclRhcmdldCwgY2xlYXIpLy9wcm9qZWN0aW9uLCBidWZmZXIpXG57XG4gICAgdGhpcy5iaW5kUmVuZGVyVGFyZ2V0KHJlbmRlclRhcmdldCk7XG5cbiAgICBpZihjbGVhcilcbiAgICB7XG4gICAgICAgIHJlbmRlclRhcmdldC5jbGVhcigpO1xuICAgIH1cblxuICAgIC8vIHN0YXJ0IHRoZSBmaWx0ZXIgbWFuYWdlclxuICAgIHRoaXMuZmlsdGVyTWFuYWdlci5zZXRGaWx0ZXJTdGFjayggcmVuZGVyVGFyZ2V0LmZpbHRlclN0YWNrICk7XG5cbiAgICAvLyByZW5kZXIgdGhlIHNjZW5lIVxuICAgIGRpc3BsYXlPYmplY3QucmVuZGVyV2ViR0wodGhpcyk7XG5cbiAgICAvLyBmaW5pc2ggdGhlIGN1cnJlbnQgcmVuZGVyZXIuLlxuICAgIHRoaXMuY3VycmVudFJlbmRlcmVyLmZsdXNoKCk7XG59O1xuXG4vKipcbiAqIENoYW5nZXMgdGhlIGN1cnJlbnQgcmVuZGVyZXIgdG8gdGhlIG9uZSBnaXZlbiBpbiBwYXJhbWV0ZXJcbiAqXG4gKiBAcGFyYW0gb2JqZWN0UmVuZGVyZXIge1BJWEkuT2JqZWN0UmVuZGVyZXJ9IFRoZSBvYmplY3QgcmVuZGVyZXIgdG8gdXNlLlxuICovXG5XZWJHTFJlbmRlcmVyLnByb3RvdHlwZS5zZXRPYmplY3RSZW5kZXJlciA9IGZ1bmN0aW9uIChvYmplY3RSZW5kZXJlcilcbntcbiAgICBpZiAodGhpcy5jdXJyZW50UmVuZGVyZXIgPT09IG9iamVjdFJlbmRlcmVyKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuY3VycmVudFJlbmRlcmVyLnN0b3AoKTtcbiAgICB0aGlzLmN1cnJlbnRSZW5kZXJlciA9IG9iamVjdFJlbmRlcmVyO1xuICAgIHRoaXMuY3VycmVudFJlbmRlcmVyLnN0YXJ0KCk7XG59O1xuXG4vKipcbiAqIFJlc2l6ZXMgdGhlIHdlYkdMIHZpZXcgdG8gdGhlIHNwZWNpZmllZCB3aWR0aCBhbmQgaGVpZ2h0LlxuICpcbiAqIEBwYXJhbSB3aWR0aCB7bnVtYmVyfSB0aGUgbmV3IHdpZHRoIG9mIHRoZSB3ZWJHTCB2aWV3XG4gKiBAcGFyYW0gaGVpZ2h0IHtudW1iZXJ9IHRoZSBuZXcgaGVpZ2h0IG9mIHRoZSB3ZWJHTCB2aWV3XG4gKi9cbldlYkdMUmVuZGVyZXIucHJvdG90eXBlLnJlc2l6ZSA9IGZ1bmN0aW9uICh3aWR0aCwgaGVpZ2h0KVxue1xuICAgIFN5c3RlbVJlbmRlcmVyLnByb3RvdHlwZS5yZXNpemUuY2FsbCh0aGlzLCB3aWR0aCwgaGVpZ2h0KTtcblxuICAgIHRoaXMuZmlsdGVyTWFuYWdlci5yZXNpemUod2lkdGgsIGhlaWdodCk7XG4gICAgdGhpcy5yb290UmVuZGVyVGFyZ2V0LnJlc2l6ZSh3aWR0aCwgaGVpZ2h0KTtcblxuICAgIGlmKHRoaXMuY3VycmVudFJlbmRlclRhcmdldCA9PT0gdGhpcy5yZW5kZXJUYXJnZXQpXG4gICAge1xuICAgICAgICB0aGlzLnJvb3RSZW5kZXJUYXJnZXQuYWN0aXZhdGUoKTtcbiAgICB9XG59O1xuXG4vKipcbiAqIENoYW5nZXMgdGhlIGN1cnJlbnQgcmVuZGVyIHRhcmdldCB0byB0aGUgb25lIGdpdmVuIGluIHBhcmFtZXRlclxuICpcbiAqIEBwYXJhbSByZW5kZXJUYXJnZXQge1BJWEkuUmVuZGVyVGFyZ2V0fSB0aGUgbmV3IHJlbmRlciB0YXJnZXRcbiAqL1xuV2ViR0xSZW5kZXJlci5wcm90b3R5cGUuYmluZFJlbmRlclRhcmdldCA9IGZ1bmN0aW9uIChyZW5kZXJUYXJnZXQpLy9wcm9qZWN0aW9uLCBidWZmZXIpXG57XG4gICAgaWYocmVuZGVyVGFyZ2V0ICE9PSB0aGlzLl9hY3RpdmVSZW5kZXJUYXJnZXQpXG4gICAge1xuICAgICAgICB0aGlzLl9hY3RpdmVSZW5kZXJUYXJnZXQgPSByZW5kZXJUYXJnZXQ7XG5cbiAgICAgICAgaWYodGhpcy5fYWN0aXZlU2hhZGVyKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLl9hY3RpdmVTaGFkZXIudW5pZm9ybXMucHJvamVjdGlvbk1hdHJpeCA9IHJlbmRlclRhcmdldC5wcm9qZWN0aW9uTWF0cml4LnRvQXJyYXkodHJ1ZSk7XG4gICAgICAgIH1cblxuICAgICAgICByZW5kZXJUYXJnZXQuYWN0aXZhdGUoKTtcblxuICAgICAgICB0aGlzLnN0ZW5jaWxNYW5hZ2VyLnNldE1hc2tTdGFjayggcmVuZGVyVGFyZ2V0LnN0ZW5jaWxNYXNrU3RhY2sgKTtcbiAgICB9XG59XG5cbldlYkdMUmVuZGVyZXIucHJvdG90eXBlLmJpbmRTaGFkZXIgPSBmdW5jdGlvbiAoc2hhZGVyKS8vcHJvamVjdGlvbiwgYnVmZmVyKVxue1xuICAgIC8vVE9ETyBjYWNoZVxuICAgIGlmKHRoaXMuX2FjdGl2ZVNoYWRlciAhPT0gc2hhZGVyKVxuICAgIHtcbiAgICAgICAgdGhpcy5fYWN0aXZlU2hhZGVyID0gc2hhZGVyO1xuICAgICAgICBzaGFkZXIuYmluZCgpO1xuXG4gICAgICAgIC8vIGF1dG9tYXRpY2FsbHkgc2V0IHRoZSBwcm9qZWN0aW9uIG1hdHJpeFxuICAgICAgICBzaGFkZXIudW5pZm9ybXMucHJvamVjdGlvbk1hdHJpeCA9IHRoaXMuX2FjdGl2ZVJlbmRlclRhcmdldC5wcm9qZWN0aW9uTWF0cml4LnRvQXJyYXkodHJ1ZSk7XG4gICAgfVxufVxuXG5cbldlYkdMUmVuZGVyZXIucHJvdG90eXBlLmJpbmRUZXh0dXJlID0gZnVuY3Rpb24gKHRleHR1cmUsIGxvY2F0aW9uKVxue1xuICAgIHZhciBnbCA9IHRoaXMuZ2w7XG5cbiAgICAvL1RPRE8gdGVzdCBwZXJmIG9mIGNhY2hlP1xuICAgIGxvY2F0aW9uID0gbG9jYXRpb24gfHwgMDtcblxuICAgIGlmKHRoaXMuX2FjdGl2ZVRleHR1cmVMb2NhdGlvbiAhPT0gbG9jYXRpb24pLy9cbiAgICB7XG4gICAgICAgIHRoaXMuX2FjdGl2ZVRleHR1cmVMb2NhdGlvbiA9IGxvY2F0aW9uXG4gICAgICAgIGdsLmFjdGl2ZVRleHR1cmUoZ2wuVEVYVFVSRTAgKyBsb2NhdGlvbiApO1xuICAgIH1cblxuICAgIC8vVE9ETyAtIGNhbiB3ZSBjYWNoZSB0aGlzIHRleHR1cmUgdG9vP1xuICAgIHRoaXMuX2FjdGl2ZVRleHR1cmUgPSB0ZXh0dXJlOyAgICAgIFxuICAgIFxuICAgIGlmICghdGV4dHVyZS5fZ2xUZXh0dXJlc1tnbC5pZF0pXG4gICAge1xuICAgICAgICAvLyB0aGlzIHdpbGwgYWxzbyBiaW5kIHRoZSB0ZXh0dXJlLi5cbiAgICAgICAgdGhpcy50ZXh0dXJlTWFuYWdlci51cGRhdGVUZXh0dXJlKHRleHR1cmUpO1xuICAgIH1cbiAgICBlbHNlXG4gICAgeyAgIFxuICAgICAgICAvLyBiaW5kIHRoZSBjdXJyZW50IHRleHR1cmVcbiAgICAgICAgdGV4dHVyZS5fZ2xUZXh0dXJlc1tnbC5pZF0uYmluZCgpO1xuICAgIH1cbn1cblxuXG4vKipcbiAqIEhhbmRsZXMgYSBsb3N0IHdlYmdsIGNvbnRleHRcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5XZWJHTFJlbmRlcmVyLnByb3RvdHlwZS5oYW5kbGVDb250ZXh0TG9zdCA9IGZ1bmN0aW9uIChldmVudClcbntcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xufTtcblxuLyoqXG4gKiBIYW5kbGVzIGEgcmVzdG9yZWQgd2ViZ2wgY29udGV4dFxuICpcbiAqIEBwcml2YXRlXG4gKi9cbldlYkdMUmVuZGVyZXIucHJvdG90eXBlLmhhbmRsZUNvbnRleHRSZXN0b3JlZCA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy5faW5pdENvbnRleHQoKTtcbiAgICB0aGlzLnRleHR1cmVNYW5hZ2VyLnJlbW92ZUFsbCgpO1xufTtcblxuLyoqXG4gKiBSZW1vdmVzIGV2ZXJ5dGhpbmcgZnJvbSB0aGUgcmVuZGVyZXIgKGV2ZW50IGxpc3RlbmVycywgc3ByaXRlYmF0Y2gsIGV0Yy4uLilcbiAqXG4gKiBAcGFyYW0gW3JlbW92ZVZpZXc9ZmFsc2VdIHtib29sZWFufSBSZW1vdmVzIHRoZSBDYW52YXMgZWxlbWVudCBmcm9tIHRoZSBET00uXG4gKi9cbldlYkdMUmVuZGVyZXIucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAocmVtb3ZlVmlldylcbntcbiAgICB0aGlzLmRlc3Ryb3lQbHVnaW5zKCk7XG5cbiAgICAvLyByZW1vdmUgbGlzdGVuZXJzXG4gICAgdGhpcy52aWV3LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3dlYmdsY29udGV4dGxvc3QnLCB0aGlzLmhhbmRsZUNvbnRleHRMb3N0KTtcbiAgICB0aGlzLnZpZXcucmVtb3ZlRXZlbnRMaXN0ZW5lcignd2ViZ2xjb250ZXh0cmVzdG9yZWQnLCB0aGlzLmhhbmRsZUNvbnRleHRSZXN0b3JlZCk7XG5cbiAgICB0aGlzLnRleHR1cmVNYW5hZ2VyLmRlc3Ryb3lBbGwoKTtcblxuICAgIC8vIGNhbGwgYmFzZSBkZXN0cm95XG4gICAgU3lzdGVtUmVuZGVyZXIucHJvdG90eXBlLmRlc3Ryb3kuY2FsbCh0aGlzLCByZW1vdmVWaWV3KTtcblxuICAgIHRoaXMudWlkID0gMDtcblxuICAgIC8vIGRlc3Ryb3kgdGhlIG1hbmFnZXJzXG4gICAgdGhpcy5zaGFkZXJNYW5hZ2VyLmRlc3Ryb3koKTtcbiAgICB0aGlzLm1hc2tNYW5hZ2VyLmRlc3Ryb3koKTtcbiAgICB0aGlzLnN0ZW5jaWxNYW5hZ2VyLmRlc3Ryb3koKTtcbiAgICB0aGlzLmZpbHRlck1hbmFnZXIuZGVzdHJveSgpO1xuICAgIHRoaXMuYmxlbmRNb2RlTWFuYWdlci5kZXN0cm95KCk7XG5cbiAgICB0aGlzLnNoYWRlck1hbmFnZXIgPSBudWxsO1xuICAgIHRoaXMubWFza01hbmFnZXIgPSBudWxsO1xuICAgIHRoaXMuZmlsdGVyTWFuYWdlciA9IG51bGw7XG4gICAgdGhpcy5ibGVuZE1vZGVNYW5hZ2VyID0gbnVsbDtcbiAgICB0aGlzLmN1cnJlbnRSZW5kZXJlciA9IG51bGw7XG5cbiAgICB0aGlzLmhhbmRsZUNvbnRleHRMb3N0ID0gbnVsbDtcbiAgICB0aGlzLmhhbmRsZUNvbnRleHRSZXN0b3JlZCA9IG51bGw7XG5cbiAgICB0aGlzLl9jb250ZXh0T3B0aW9ucyA9IG51bGw7XG5cbiAgICB0aGlzLmdsLnVzZVByb2dyYW0obnVsbCk7XG4gICAgdGhpcy5nbCA9IG51bGw7XG59O1xuXG4iLCJ2YXIgRGVmYXVsdFNoYWRlciA9IHJlcXVpcmUoJy4uL3NoYWRlcnMvVGV4dHVyZVNoYWRlcicpO1xuXG4vKipcbiAqIFRoaXMgaXMgdGhlIGJhc2UgY2xhc3MgZm9yIGNyZWF0aW5nIGEgUElYSSBmaWx0ZXIuIEN1cnJlbnRseSBvbmx5IFdlYkdMIHN1cHBvcnRzIGZpbHRlcnMuXG4gKiBJZiB5b3Ugd2FudCB0byBtYWtlIGEgY3VzdG9tIGZpbHRlciB0aGlzIHNob3VsZCBiZSB5b3VyIGJhc2UgY2xhc3MuXG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIHZlcnRleFNyYyB7c3RyaW5nfHN0cmluZ1tdfSBUaGUgdmVydGV4IHNoYWRlciBzb3VyY2UgYXMgYW4gYXJyYXkgb2Ygc3RyaW5ncy5cbiAqIEBwYXJhbSBmcmFnbWVudFNyYyB7c3RyaW5nfHN0cmluZ1tdfSBUaGUgZnJhZ21lbnQgc2hhZGVyIHNvdXJjZSBhcyBhbiBhcnJheSBvZiBzdHJpbmdzLlxuICogQHBhcmFtIHVuaWZvcm1zIHtvYmplY3R9IEFuIG9iamVjdCBjb250YWluaW5nIHRoZSB1bmlmb3JtcyBmb3IgdGhpcyBmaWx0ZXIuXG4gKi9cbmZ1bmN0aW9uIEFic3RyYWN0RmlsdGVyKHZlcnRleFNyYywgZnJhZ21lbnRTcmMsIHVuaWZvcm1zKVxue1xuXG4gICAgLyoqXG4gICAgICogQW4gYXJyYXkgb2Ygc2hhZGVyc1xuICAgICAqIEBtZW1iZXIge1BJWEkuU2hhZGVyW119XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLnNoYWRlcnMgPSBbXTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBleHRyYSBwYWRkaW5nIHRoYXQgdGhlIGZpbHRlciBtaWdodCBuZWVkXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMucGFkZGluZyA9IDA7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgdW5pZm9ybXMgYXMgYW4gb2JqZWN0XG4gICAgICogQG1lbWJlciB7b2JqZWN0fVxuICAgICAqL1xuICAgIHRoaXMudW5pZm9ybXMgPSB1bmlmb3JtcyB8fCB7fTtcblxuXG4gICAgLyoqXG4gICAgICogVGhlIGNvZGUgb2YgdGhlIHZlcnRleCBzaGFkZXJcbiAgICAgKiBAbWVtYmVyIHtzdHJpbmdbXX1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMudmVydGV4U3JjID0gdmVydGV4U3JjIHx8IERlZmF1bHRTaGFkZXIuZGVmYXVsdFZlcnRleFNyYztcblxuICAgIC8qKlxuICAgICAqIFRoZSBjb2RlIG9mIHRoZSBmcmFtZW50IHNoYWRlclxuICAgICAqIEBtZW1iZXIge3N0cmluZ1tdfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5mcmFnbWVudFNyYyA9IGZyYWdtZW50U3JjIHx8IERlZmF1bHRTaGFkZXIuZGVmYXVsdEZyYWdtZW50U3JjO1xuXG4gICAgLy9UT0RPIGEgcmVtaW5kZXIgLSB3b3VsZCBiZSBjb29sIHRvIGhhdmUgbG93ZXIgcmVzIGZpbHRlcnMgYXMgdGhpcyB3b3VsZCBnaXZlIGJldHRlciBwZXJmb3JtYW5jZS5cblxuICAgIC8vdHlwZW9mIGZyYWdtZW50U3JjID09PSAnc3RyaW5nJyA/IGZyYWdtZW50U3JjLnNwbGl0KCcnKSA6IChmcmFnbWVudFNyYyB8fCBbXSk7XG5cbn1cblxuQWJzdHJhY3RGaWx0ZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gQWJzdHJhY3RGaWx0ZXI7XG5tb2R1bGUuZXhwb3J0cyA9IEFic3RyYWN0RmlsdGVyO1xuXG4vKipcbiAqIEdyYWJzIGEgc2hhZGVyIGZyb20gdGhlIGN1cnJlbnQgcmVuZGVyZXJcbiAqXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcn0gVGhlIHJlbmRlcmVyIHRvIHJldHJpZXZlIHRoZSBzaGFkZXIgZnJvbVxuICovXG5BYnN0cmFjdEZpbHRlci5wcm90b3R5cGUuZ2V0U2hhZGVyID0gZnVuY3Rpb24gKHJlbmRlcmVyKVxue1xuICAgIHZhciBnbCA9IHJlbmRlcmVyLmdsO1xuXG4gICAgdmFyIHNoYWRlciA9IHRoaXMuc2hhZGVyc1tnbC5pZF07XG5cbiAgICBpZiAoIXNoYWRlcilcbiAgICB7XG4gICAgICAgIHNoYWRlciA9IG5ldyBEZWZhdWx0U2hhZGVyKHJlbmRlcmVyLnNoYWRlck1hbmFnZXIsXG4gICAgICAgICAgICB0aGlzLnZlcnRleFNyYyxcbiAgICAgICAgICAgIHRoaXMuZnJhZ21lbnRTcmMsXG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLFxuICAgICAgICAgICAgdGhpcy5hdHRyaWJ1dGVzXG4gICAgICAgICk7XG5cbiAgICAgICAgdGhpcy5zaGFkZXJzW2dsLmlkXSA9IHNoYWRlcjtcbiAgICB9XG5cbiAgICByZXR1cm4gc2hhZGVyO1xufTtcblxuLyoqXG4gKiBBcHBsaWVzIHRoZSBmaWx0ZXJcbiAqXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcn0gVGhlIHJlbmRlcmVyIHRvIHJldHJpZXZlIHRoZSBmaWx0ZXIgZnJvbVxuICogQHBhcmFtIGlucHV0IHtQSVhJLlJlbmRlclRhcmdldH1cbiAqIEBwYXJhbSBvdXRwdXQge1BJWEkuUmVuZGVyVGFyZ2V0fVxuICogQHBhcmFtIGNsZWFyIHtib29sZWFufSBXaGV0aGVyIG9yIG5vdCB3ZSB3YW50IHRvIGNsZWFyIHRoZSBvdXRwdXRUYXJnZXRcbiAqL1xuQWJzdHJhY3RGaWx0ZXIucHJvdG90eXBlLmFwcGx5RmlsdGVyID0gZnVuY3Rpb24gKHJlbmRlcmVyLCBpbnB1dCwgb3V0cHV0LCBjbGVhcilcbntcbiAgICB2YXIgc2hhZGVyID0gdGhpcy5nZXRTaGFkZXIocmVuZGVyZXIpO1xuXG4gICAgcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5hcHBseUZpbHRlcihzaGFkZXIsIGlucHV0LCBvdXRwdXQsIGNsZWFyKTtcbn07XG5cbi8qKlxuICogU3luY3MgYSB1bmlmb3JtIGJldHdlZW4gdGhlIGNsYXNzIG9iamVjdCBhbmQgdGhlIHNoYWRlcnMuXG4gKlxuICovXG5BYnN0cmFjdEZpbHRlci5wcm90b3R5cGUuc3luY1VuaWZvcm0gPSBmdW5jdGlvbiAodW5pZm9ybSlcbntcbiAgICBmb3IgKHZhciBpID0gMCwgaiA9IHRoaXMuc2hhZGVycy5sZW5ndGg7IGkgPCBqOyArK2kpXG4gICAge1xuICAgICAgICB0aGlzLnNoYWRlcnNbaV0uc3luY1VuaWZvcm0odW5pZm9ybSk7XG4gICAgfVxufTtcbiIsInZhciBBYnN0cmFjdEZpbHRlciA9IHJlcXVpcmUoJy4vQWJzdHJhY3RGaWx0ZXInKTtcbi8vIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL3N1YnN0YWNrL2JyZnMvaXNzdWVzLzI1XG5cblxuLyoqXG4gKlxuICogQmFzaWMgRlhBQSBpbXBsZW1lbnRhdGlvbiBiYXNlZCBvbiB0aGUgY29kZSBvbiBnZWVrczNkLmNvbSB3aXRoIHRoZVxuICogbW9kaWZpY2F0aW9uIHRoYXQgdGhlIHRleHR1cmUyRExvZCBzdHVmZiB3YXMgcmVtb3ZlZCBzaW5jZSBpdCdzXG4gKiB1bnN1cHBvcnRlZCBieSBXZWJHTC5cbiAqXG4gKiAtLVxuICogRnJvbTpcbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS9taXRzdWhpa28vd2ViZ2wtbWVpbmNyYWZ0XG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLkFic3RyYWN0RmlsdGVyXG4gKiBAbWVtYmVyb2YgUElYSVxuICpcbiAqL1xuZnVuY3Rpb24gRlhBQUZpbHRlcigpXG57XG4gICAgQWJzdHJhY3RGaWx0ZXIuY2FsbCh0aGlzLFxuICAgICAgICAvLyB2ZXJ0ZXggc2hhZGVyXG4gICAgICAgIFwiXFxucHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XFxuXFxuYXR0cmlidXRlIHZlYzIgYVZlcnRleFBvc2l0aW9uO1xcbmF0dHJpYnV0ZSB2ZWMyIGFUZXh0dXJlQ29vcmQ7XFxuYXR0cmlidXRlIHZlYzQgYUNvbG9yO1xcblxcbnVuaWZvcm0gbWF0MyBwcm9qZWN0aW9uTWF0cml4O1xcbnVuaWZvcm0gdmVjMiByZXNvbHV0aW9uO1xcblxcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xcbnZhcnlpbmcgdmVjNCB2Q29sb3I7XFxuXFxudmFyeWluZyB2ZWMyIHZSZXNvbHV0aW9uO1xcblxcbi8vdGV4Y29vcmRzIGNvbXB1dGVkIGluIHZlcnRleCBzdGVwXFxuLy90byBhdm9pZCBkZXBlbmRlbnQgdGV4dHVyZSByZWFkc1xcbnZhcnlpbmcgdmVjMiB2X3JnYk5XO1xcbnZhcnlpbmcgdmVjMiB2X3JnYk5FO1xcbnZhcnlpbmcgdmVjMiB2X3JnYlNXO1xcbnZhcnlpbmcgdmVjMiB2X3JnYlNFO1xcbnZhcnlpbmcgdmVjMiB2X3JnYk07XFxuXFxuXFxudm9pZCB0ZXhjb29yZHModmVjMiBmcmFnQ29vcmQsIHZlYzIgcmVzb2x1dGlvbixcXG4gICAgICAgICAgICBvdXQgdmVjMiB2X3JnYk5XLCBvdXQgdmVjMiB2X3JnYk5FLFxcbiAgICAgICAgICAgIG91dCB2ZWMyIHZfcmdiU1csIG91dCB2ZWMyIHZfcmdiU0UsXFxuICAgICAgICAgICAgb3V0IHZlYzIgdl9yZ2JNKSB7XFxuICAgIHZlYzIgaW52ZXJzZVZQID0gMS4wIC8gcmVzb2x1dGlvbi54eTtcXG4gICAgdl9yZ2JOVyA9IChmcmFnQ29vcmQgKyB2ZWMyKC0xLjAsIC0xLjApKSAqIGludmVyc2VWUDtcXG4gICAgdl9yZ2JORSA9IChmcmFnQ29vcmQgKyB2ZWMyKDEuMCwgLTEuMCkpICogaW52ZXJzZVZQO1xcbiAgICB2X3JnYlNXID0gKGZyYWdDb29yZCArIHZlYzIoLTEuMCwgMS4wKSkgKiBpbnZlcnNlVlA7XFxuICAgIHZfcmdiU0UgPSAoZnJhZ0Nvb3JkICsgdmVjMigxLjAsIDEuMCkpICogaW52ZXJzZVZQO1xcbiAgICB2X3JnYk0gPSB2ZWMyKGZyYWdDb29yZCAqIGludmVyc2VWUCk7XFxufVxcblxcbnZvaWQgbWFpbih2b2lkKXtcXG4gICBnbF9Qb3NpdGlvbiA9IHZlYzQoKHByb2plY3Rpb25NYXRyaXggKiB2ZWMzKGFWZXJ0ZXhQb3NpdGlvbiwgMS4wKSkueHksIDAuMCwgMS4wKTtcXG4gICB2VGV4dHVyZUNvb3JkID0gYVRleHR1cmVDb29yZDtcXG4gICB2Q29sb3IgPSB2ZWM0KGFDb2xvci5yZ2IgKiBhQ29sb3IuYSwgYUNvbG9yLmEpO1xcbiAgIHZSZXNvbHV0aW9uID0gcmVzb2x1dGlvbjtcXG5cXG4gICAvL2NvbXB1dGUgdGhlIHRleHR1cmUgY29vcmRzIGFuZCBzZW5kIHRoZW0gdG8gdmFyeWluZ3NcXG4gICB0ZXhjb29yZHMoYVRleHR1cmVDb29yZCAqIHJlc29sdXRpb24sIHJlc29sdXRpb24sIHZfcmdiTlcsIHZfcmdiTkUsIHZfcmdiU1csIHZfcmdiU0UsIHZfcmdiTSk7XFxufVxcblwiLFxuICAgICAgICAvLyBmcmFnbWVudCBzaGFkZXJcbiAgICAgICAgXCJwcmVjaXNpb24gbG93cCBmbG9hdDtcXG5cXG5cXG4vKipcXG5CYXNpYyBGWEFBIGltcGxlbWVudGF0aW9uIGJhc2VkIG9uIHRoZSBjb2RlIG9uIGdlZWtzM2QuY29tIHdpdGggdGhlXFxubW9kaWZpY2F0aW9uIHRoYXQgdGhlIHRleHR1cmUyRExvZCBzdHVmZiB3YXMgcmVtb3ZlZCBzaW5jZSBpdCdzXFxudW5zdXBwb3J0ZWQgYnkgV2ViR0wuXFxuXFxuLS1cXG5cXG5Gcm9tOlxcbmh0dHBzOi8vZ2l0aHViLmNvbS9taXRzdWhpa28vd2ViZ2wtbWVpbmNyYWZ0XFxuXFxuQ29weXJpZ2h0IChjKSAyMDExIGJ5IEFybWluIFJvbmFjaGVyLlxcblxcblNvbWUgcmlnaHRzIHJlc2VydmVkLlxcblxcblJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dFxcbm1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmVcXG5tZXQ6XFxuXFxuICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHRcXG4gICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuXFxuXFxuICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZVxcbiAgICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nXFxuICAgICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkXFxuICAgICAgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLlxcblxcbiAgICAqIFRoZSBuYW1lcyBvZiB0aGUgY29udHJpYnV0b3JzIG1heSBub3QgYmUgdXNlZCB0byBlbmRvcnNlIG9yXFxuICAgICAgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljXFxuICAgICAgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLlxcblxcblRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlNcXG5cXFwiQVMgSVNcXFwiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVFxcbkxJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUlxcbkEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUXFxuT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsXFxuU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVFxcbkxJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLFxcbkRBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWVxcblRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlRcXG4oSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0VcXG5PRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLlxcbiovXFxuXFxuI2lmbmRlZiBGWEFBX1JFRFVDRV9NSU5cXG4gICAgI2RlZmluZSBGWEFBX1JFRFVDRV9NSU4gICAoMS4wLyAxMjguMClcXG4jZW5kaWZcXG4jaWZuZGVmIEZYQUFfUkVEVUNFX01VTFxcbiAgICAjZGVmaW5lIEZYQUFfUkVEVUNFX01VTCAgICgxLjAgLyA4LjApXFxuI2VuZGlmXFxuI2lmbmRlZiBGWEFBX1NQQU5fTUFYXFxuICAgICNkZWZpbmUgRlhBQV9TUEFOX01BWCAgICAgOC4wXFxuI2VuZGlmXFxuXFxuLy9vcHRpbWl6ZWQgdmVyc2lvbiBmb3IgbW9iaWxlLCB3aGVyZSBkZXBlbmRlbnRcXG4vL3RleHR1cmUgcmVhZHMgY2FuIGJlIGEgYm90dGxlbmVja1xcbnZlYzQgZnhhYShzYW1wbGVyMkQgdGV4LCB2ZWMyIGZyYWdDb29yZCwgdmVjMiByZXNvbHV0aW9uLFxcbiAgICAgICAgICAgIHZlYzIgdl9yZ2JOVywgdmVjMiB2X3JnYk5FLFxcbiAgICAgICAgICAgIHZlYzIgdl9yZ2JTVywgdmVjMiB2X3JnYlNFLFxcbiAgICAgICAgICAgIHZlYzIgdl9yZ2JNKSB7XFxuICAgIHZlYzQgY29sb3I7XFxuICAgIG1lZGl1bXAgdmVjMiBpbnZlcnNlVlAgPSB2ZWMyKDEuMCAvIHJlc29sdXRpb24ueCwgMS4wIC8gcmVzb2x1dGlvbi55KTtcXG4gICAgdmVjMyByZ2JOVyA9IHRleHR1cmUyRCh0ZXgsIHZfcmdiTlcpLnh5ejtcXG4gICAgdmVjMyByZ2JORSA9IHRleHR1cmUyRCh0ZXgsIHZfcmdiTkUpLnh5ejtcXG4gICAgdmVjMyByZ2JTVyA9IHRleHR1cmUyRCh0ZXgsIHZfcmdiU1cpLnh5ejtcXG4gICAgdmVjMyByZ2JTRSA9IHRleHR1cmUyRCh0ZXgsIHZfcmdiU0UpLnh5ejtcXG4gICAgdmVjNCB0ZXhDb2xvciA9IHRleHR1cmUyRCh0ZXgsIHZfcmdiTSk7XFxuICAgIHZlYzMgcmdiTSAgPSB0ZXhDb2xvci54eXo7XFxuICAgIHZlYzMgbHVtYSA9IHZlYzMoMC4yOTksIDAuNTg3LCAwLjExNCk7XFxuICAgIGZsb2F0IGx1bWFOVyA9IGRvdChyZ2JOVywgbHVtYSk7XFxuICAgIGZsb2F0IGx1bWFORSA9IGRvdChyZ2JORSwgbHVtYSk7XFxuICAgIGZsb2F0IGx1bWFTVyA9IGRvdChyZ2JTVywgbHVtYSk7XFxuICAgIGZsb2F0IGx1bWFTRSA9IGRvdChyZ2JTRSwgbHVtYSk7XFxuICAgIGZsb2F0IGx1bWFNICA9IGRvdChyZ2JNLCAgbHVtYSk7XFxuICAgIGZsb2F0IGx1bWFNaW4gPSBtaW4obHVtYU0sIG1pbihtaW4obHVtYU5XLCBsdW1hTkUpLCBtaW4obHVtYVNXLCBsdW1hU0UpKSk7XFxuICAgIGZsb2F0IGx1bWFNYXggPSBtYXgobHVtYU0sIG1heChtYXgobHVtYU5XLCBsdW1hTkUpLCBtYXgobHVtYVNXLCBsdW1hU0UpKSk7XFxuXFxuICAgIG1lZGl1bXAgdmVjMiBkaXI7XFxuICAgIGRpci54ID0gLSgobHVtYU5XICsgbHVtYU5FKSAtIChsdW1hU1cgKyBsdW1hU0UpKTtcXG4gICAgZGlyLnkgPSAgKChsdW1hTlcgKyBsdW1hU1cpIC0gKGx1bWFORSArIGx1bWFTRSkpO1xcblxcbiAgICBmbG9hdCBkaXJSZWR1Y2UgPSBtYXgoKGx1bWFOVyArIGx1bWFORSArIGx1bWFTVyArIGx1bWFTRSkgKlxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKDAuMjUgKiBGWEFBX1JFRFVDRV9NVUwpLCBGWEFBX1JFRFVDRV9NSU4pO1xcblxcbiAgICBmbG9hdCByY3BEaXJNaW4gPSAxLjAgLyAobWluKGFicyhkaXIueCksIGFicyhkaXIueSkpICsgZGlyUmVkdWNlKTtcXG4gICAgZGlyID0gbWluKHZlYzIoRlhBQV9TUEFOX01BWCwgRlhBQV9TUEFOX01BWCksXFxuICAgICAgICAgICAgICBtYXgodmVjMigtRlhBQV9TUEFOX01BWCwgLUZYQUFfU1BBTl9NQVgpLFxcbiAgICAgICAgICAgICAgZGlyICogcmNwRGlyTWluKSkgKiBpbnZlcnNlVlA7XFxuXFxuICAgIHZlYzMgcmdiQSA9IDAuNSAqIChcXG4gICAgICAgIHRleHR1cmUyRCh0ZXgsIGZyYWdDb29yZCAqIGludmVyc2VWUCArIGRpciAqICgxLjAgLyAzLjAgLSAwLjUpKS54eXogK1xcbiAgICAgICAgdGV4dHVyZTJEKHRleCwgZnJhZ0Nvb3JkICogaW52ZXJzZVZQICsgZGlyICogKDIuMCAvIDMuMCAtIDAuNSkpLnh5eik7XFxuICAgIHZlYzMgcmdiQiA9IHJnYkEgKiAwLjUgKyAwLjI1ICogKFxcbiAgICAgICAgdGV4dHVyZTJEKHRleCwgZnJhZ0Nvb3JkICogaW52ZXJzZVZQICsgZGlyICogLTAuNSkueHl6ICtcXG4gICAgICAgIHRleHR1cmUyRCh0ZXgsIGZyYWdDb29yZCAqIGludmVyc2VWUCArIGRpciAqIDAuNSkueHl6KTtcXG5cXG4gICAgZmxvYXQgbHVtYUIgPSBkb3QocmdiQiwgbHVtYSk7XFxuICAgIGlmICgobHVtYUIgPCBsdW1hTWluKSB8fCAobHVtYUIgPiBsdW1hTWF4KSlcXG4gICAgICAgIGNvbG9yID0gdmVjNChyZ2JBLCB0ZXhDb2xvci5hKTtcXG4gICAgZWxzZVxcbiAgICAgICAgY29sb3IgPSB2ZWM0KHJnYkIsIHRleENvbG9yLmEpO1xcbiAgICByZXR1cm4gY29sb3I7XFxufVxcblxcblxcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xcbnZhcnlpbmcgdmVjNCB2Q29sb3I7XFxudmFyeWluZyB2ZWMyIHZSZXNvbHV0aW9uO1xcblxcbi8vdGV4Y29vcmRzIGNvbXB1dGVkIGluIHZlcnRleCBzdGVwXFxuLy90byBhdm9pZCBkZXBlbmRlbnQgdGV4dHVyZSByZWFkc1xcbnZhcnlpbmcgdmVjMiB2X3JnYk5XO1xcbnZhcnlpbmcgdmVjMiB2X3JnYk5FO1xcbnZhcnlpbmcgdmVjMiB2X3JnYlNXO1xcbnZhcnlpbmcgdmVjMiB2X3JnYlNFO1xcbnZhcnlpbmcgdmVjMiB2X3JnYk07XFxuXFxudW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXI7XFxuXFxuXFxudm9pZCBtYWluKHZvaWQpe1xcblxcbiAgICBnbF9GcmFnQ29sb3IgPSBmeGFhKHVTYW1wbGVyLCB2VGV4dHVyZUNvb3JkICogdlJlc29sdXRpb24sIHZSZXNvbHV0aW9uLCB2X3JnYk5XLCB2X3JnYk5FLCB2X3JnYlNXLCB2X3JnYlNFLCB2X3JnYk0pO1xcblxcbn1cXG5cIixcbiAgICAgICAgLy8gdW5pZm9ybXNcbiAgICAgICAge1xuICAgICAgICAgICAgcmVzb2x1dGlvbjogeyB0eXBlOiAndjInLCB2YWx1ZTogeyB4OiAxLCB5OiAxIH0gfVxuICAgICAgICB9XG4gICAgKTtcblxufVxuXG5GWEFBRmlsdGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoQWJzdHJhY3RGaWx0ZXIucHJvdG90eXBlKTtcbkZYQUFGaWx0ZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gRlhBQUZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gRlhBQUZpbHRlcjtcblxuLyoqXG4gKiBBcHBsaWVzIHRoZSBmaWx0ZXJcbiAqXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcn0gVGhlIHJlbmRlcmVyIHRvIHJldHJpZXZlIHRoZSBmaWx0ZXIgZnJvbVxuICogQHBhcmFtIGlucHV0IHtQSVhJLlJlbmRlclRhcmdldH1cbiAqIEBwYXJhbSBvdXRwdXQge1BJWEkuUmVuZGVyVGFyZ2V0fVxuICovXG5GWEFBRmlsdGVyLnByb3RvdHlwZS5hcHBseUZpbHRlciA9IGZ1bmN0aW9uIChyZW5kZXJlciwgaW5wdXQsIG91dHB1dClcbntcbiAgICB2YXIgZmlsdGVyTWFuYWdlciA9IHJlbmRlcmVyLmZpbHRlck1hbmFnZXI7XG5cbiAgICB2YXIgc2hhZGVyID0gdGhpcy5nZXRTaGFkZXIoIHJlbmRlcmVyICk7XG4gICAgIC8vIGRyYXcgdGhlIGZpbHRlci4uLlxuICAgIGZpbHRlck1hbmFnZXIuYXBwbHlGaWx0ZXIoc2hhZGVyLCBpbnB1dCwgb3V0cHV0KTtcbn07XG4iLCJ2YXIgQWJzdHJhY3RGaWx0ZXIgPSByZXF1aXJlKCcuL0Fic3RyYWN0RmlsdGVyJyksXG4gICAgbWF0aCA9ICByZXF1aXJlKCcuLi8uLi8uLi9tYXRoJyk7XG5cbi8vIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL3N1YnN0YWNrL2JyZnMvaXNzdWVzLzI1XG5cblxuLyoqXG4gKiBUaGUgU3ByaXRlTWFza0ZpbHRlciBjbGFzc1xuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5BYnN0cmFjdEZpbHRlclxuICogQG1lbWJlcm9mIFBJWElcbiAqIEBwYXJhbSBzcHJpdGUge1BJWEkuU3ByaXRlfSB0aGUgdGFyZ2V0IHNwcml0ZVxuICovXG5mdW5jdGlvbiBTcHJpdGVNYXNrRmlsdGVyKHNwcml0ZSlcbntcbiAgICB2YXIgbWFza01hdHJpeCA9IG5ldyBtYXRoLk1hdHJpeCgpO1xuXG4gICAgQWJzdHJhY3RGaWx0ZXIuY2FsbCh0aGlzLFxuICAgICAgICBcImF0dHJpYnV0ZSB2ZWMyIGFWZXJ0ZXhQb3NpdGlvbjtcXG5hdHRyaWJ1dGUgdmVjMiBhVGV4dHVyZUNvb3JkO1xcbmF0dHJpYnV0ZSB2ZWM0IGFDb2xvcjtcXG5cXG51bmlmb3JtIG1hdDMgcHJvamVjdGlvbk1hdHJpeDtcXG51bmlmb3JtIG1hdDMgb3RoZXJNYXRyaXg7XFxuXFxudmFyeWluZyB2ZWMyIHZNYXNrQ29vcmQ7XFxudmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7XFxudmFyeWluZyB2ZWM0IHZDb2xvcjtcXG5cXG52b2lkIG1haW4odm9pZClcXG57XFxuICAgIGdsX1Bvc2l0aW9uID0gdmVjNCgocHJvamVjdGlvbk1hdHJpeCAqIHZlYzMoYVZlcnRleFBvc2l0aW9uLCAxLjApKS54eSwgMC4wLCAxLjApO1xcbiAgICB2VGV4dHVyZUNvb3JkID0gYVRleHR1cmVDb29yZDtcXG4gICAgdk1hc2tDb29yZCA9ICggb3RoZXJNYXRyaXggKiB2ZWMzKCBhVGV4dHVyZUNvb3JkLCAxLjApICApLnh5O1xcbiAgICB2Q29sb3IgPSB2ZWM0KGFDb2xvci5yZ2IgKiBhQ29sb3IuYSwgYUNvbG9yLmEpO1xcbn1cXG5cIixcbiAgICAgICAgXCJwcmVjaXNpb24gbG93cCBmbG9hdDtcXG5cXG52YXJ5aW5nIHZlYzIgdk1hc2tDb29yZDtcXG52YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDtcXG52YXJ5aW5nIHZlYzQgdkNvbG9yO1xcblxcbnVuaWZvcm0gc2FtcGxlcjJEIHVTYW1wbGVyO1xcbnVuaWZvcm0gZmxvYXQgYWxwaGE7XFxudW5pZm9ybSBzYW1wbGVyMkQgbWFzaztcXG5cXG52b2lkIG1haW4odm9pZClcXG57XFxuICAgIC8vIGNoZWNrIGNsaXAhIHRoaXMgd2lsbCBzdG9wIHRoZSBtYXNrIGJsZWVkaW5nIG91dCBmcm9tIHRoZSBlZGdlc1xcbiAgICB2ZWMyIHRleHQgPSBhYnMoIHZNYXNrQ29vcmQgLSAwLjUgKTtcXG4gICAgdGV4dCA9IHN0ZXAoMC41LCB0ZXh0KTtcXG4gICAgZmxvYXQgY2xpcCA9IDEuMCAtIG1heCh0ZXh0LnksIHRleHQueCk7XFxuICAgIHZlYzQgb3JpZ2luYWwgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZUZXh0dXJlQ29vcmQpO1xcbiAgICB2ZWM0IG1hc2t5ID0gdGV4dHVyZTJEKG1hc2ssIHZNYXNrQ29vcmQpO1xcbiAgICBvcmlnaW5hbCAqPSAobWFza3kuciAqIG1hc2t5LmEgKiBhbHBoYSAqIGNsaXApO1xcbiAgICBnbF9GcmFnQ29sb3IgPSBvcmlnaW5hbDtcXG59XFxuXCIsXG4gICAgICAgIHtcbiAgICAgICAgICAgIG1hc2s6ICAgICAgICAgICB7IHR5cGU6ICdzYW1wbGVyMkQnLCB2YWx1ZTogc3ByaXRlLl90ZXh0dXJlIH0sXG4gICAgICAgICAgICBhbHBoYTogICAgICAgICAgeyB0eXBlOiAnZicsIHZhbHVlOiAxfSxcbiAgICAgICAgICAgIG90aGVyTWF0cml4OiAgICB7IHR5cGU6ICdtYXQzJywgdmFsdWU6IG1hc2tNYXRyaXgudG9BcnJheSh0cnVlKSB9XG4gICAgICAgIH1cbiAgICApO1xuXG4gICAgdGhpcy5tYXNrU3ByaXRlID0gc3ByaXRlO1xuICAgIHRoaXMubWFza01hdHJpeCA9IG1hc2tNYXRyaXg7XG59XG5cblNwcml0ZU1hc2tGaWx0ZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShBYnN0cmFjdEZpbHRlci5wcm90b3R5cGUpO1xuU3ByaXRlTWFza0ZpbHRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBTcHJpdGVNYXNrRmlsdGVyO1xubW9kdWxlLmV4cG9ydHMgPSBTcHJpdGVNYXNrRmlsdGVyO1xuXG4vKipcbiAqIEFwcGxpZXMgdGhlIGZpbHRlclxuICpcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5XZWJHTFJlbmRlcmVyfSBUaGUgcmVuZGVyZXIgdG8gcmV0cmlldmUgdGhlIGZpbHRlciBmcm9tXG4gKiBAcGFyYW0gaW5wdXQge1BJWEkuUmVuZGVyVGFyZ2V0fVxuICogQHBhcmFtIG91dHB1dCB7UElYSS5SZW5kZXJUYXJnZXR9XG4gKi9cblNwcml0ZU1hc2tGaWx0ZXIucHJvdG90eXBlLmFwcGx5RmlsdGVyID0gZnVuY3Rpb24gKHJlbmRlcmVyLCBpbnB1dCwgb3V0cHV0KVxue1xuICAgIHZhciBmaWx0ZXJNYW5hZ2VyID0gcmVuZGVyZXIuZmlsdGVyTWFuYWdlcjtcblxuICAgIHRoaXMudW5pZm9ybXMubWFzay52YWx1ZSA9IHRoaXMubWFza1Nwcml0ZS5fdGV4dHVyZTtcblxuICAgIGZpbHRlck1hbmFnZXIuY2FsY3VsYXRlTWFwcGVkTWF0cml4KGlucHV0LmZyYW1lLCB0aGlzLm1hc2tTcHJpdGUsIHRoaXMubWFza01hdHJpeCk7XG5cbiAgICB0aGlzLnVuaWZvcm1zLm90aGVyTWF0cml4LnZhbHVlID0gdGhpcy5tYXNrTWF0cml4LnRvQXJyYXkodHJ1ZSk7XG4gICAgdGhpcy51bmlmb3Jtcy5hbHBoYS52YWx1ZSA9IHRoaXMubWFza1Nwcml0ZS53b3JsZEFscGhhO1xuXG4gICAgdmFyIHNoYWRlciA9IHRoaXMuZ2V0U2hhZGVyKHJlbmRlcmVyKTtcbiAgICAgLy8gZHJhdyB0aGUgZmlsdGVyLi4uXG4gICAgZmlsdGVyTWFuYWdlci5hcHBseUZpbHRlcihzaGFkZXIsIGlucHV0LCBvdXRwdXQpO1xufTtcblxuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhTcHJpdGVNYXNrRmlsdGVyLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFRoZSB0ZXh0dXJlIHVzZWQgZm9yIHRoZSBkaXNwbGFjZW1lbnQgbWFwLiBNdXN0IGJlIHBvd2VyIG9mIDIgc2l6ZWQgdGV4dHVyZS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuVGV4dHVyZX1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5TcHJpdGVNYXNrRmlsdGVyI1xuICAgICAqL1xuICAgIG1hcDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVuaWZvcm1zLm1hc2sudmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLm1hc2sudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBUaGUgb2Zmc2V0IHVzZWQgdG8gbW92ZSB0aGUgZGlzcGxhY2VtZW50IG1hcC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuUG9pbnR9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuU3ByaXRlTWFza0ZpbHRlciNcbiAgICAgKi9cbiAgICBvZmZzZXQ6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbigpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVuaWZvcm1zLm9mZnNldC52YWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbih2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy5vZmZzZXQudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuIiwidmFyIFdlYkdMTWFuYWdlciA9IHJlcXVpcmUoJy4vV2ViR0xNYW5hZ2VyJyk7XG5cbi8qKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQGV4dGVuZHMgUElYSS5XZWJHbE1hbmFnZXJcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5XZWJHTFJlbmRlcmVyfSBUaGUgcmVuZGVyZXIgdGhpcyBtYW5hZ2VyIHdvcmtzIGZvci5cbiAqL1xuZnVuY3Rpb24gQmxlbmRNb2RlTWFuYWdlcihyZW5kZXJlcilcbntcbiAgICBXZWJHTE1hbmFnZXIuY2FsbCh0aGlzLCByZW5kZXJlcik7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy5jdXJyZW50QmxlbmRNb2RlID0gOTk5OTk7XG59XG5cbkJsZW5kTW9kZU1hbmFnZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShXZWJHTE1hbmFnZXIucHJvdG90eXBlKTtcbkJsZW5kTW9kZU1hbmFnZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gQmxlbmRNb2RlTWFuYWdlcjtcbm1vZHVsZS5leHBvcnRzID0gQmxlbmRNb2RlTWFuYWdlcjtcblxuLyoqXG4gKiBTZXRzLXVwIHRoZSBnaXZlbiBibGVuZE1vZGUgZnJvbSBXZWJHTCdzIHBvaW50IG9mIHZpZXcuXG4gKlxuICogQHBhcmFtIGJsZW5kTW9kZSB7bnVtYmVyfSB0aGUgYmxlbmRNb2RlLCBzaG91bGQgYmUgYSBQaXhpIGNvbnN0LCBzdWNoIGFzIGBQSVhJLkJMRU5EX01PREVTLkFERGAuIFNlZVxuICogIHtAbGluayBQSVhJLkJMRU5EX01PREVTfSBmb3IgcG9zc2libGUgdmFsdWVzLlxuICovXG5CbGVuZE1vZGVNYW5hZ2VyLnByb3RvdHlwZS5zZXRCbGVuZE1vZGUgPSBmdW5jdGlvbiAoYmxlbmRNb2RlKVxue1xuICAgIGlmICh0aGlzLmN1cnJlbnRCbGVuZE1vZGUgPT09IGJsZW5kTW9kZSlcbiAgICB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICB0aGlzLmN1cnJlbnRCbGVuZE1vZGUgPSBibGVuZE1vZGU7XG5cbiAgICB2YXIgbW9kZSA9IHRoaXMucmVuZGVyZXIuYmxlbmRNb2Rlc1t0aGlzLmN1cnJlbnRCbGVuZE1vZGVdO1xuICAgIHRoaXMucmVuZGVyZXIuZ2wuYmxlbmRGdW5jKG1vZGVbMF0sIG1vZGVbMV0pO1xuXG4gICAgcmV0dXJuIHRydWU7XG59O1xuIiwidmFyIFdlYkdMTWFuYWdlciA9IHJlcXVpcmUoJy4vV2ViR0xNYW5hZ2VyJyksXG4gICAgUmVuZGVyVGFyZ2V0ID0gcmVxdWlyZSgnLi4vdXRpbHMvUmVuZGVyVGFyZ2V0JyksXG4gICAgQ09OU1QgPSByZXF1aXJlKCcuLi8uLi8uLi9jb25zdCcpLFxuICAgIFF1YWQgPSByZXF1aXJlKCcuLi91dGlscy9RdWFkJyksXG4gICAgbWF0aCA9ICByZXF1aXJlKCcuLi8uLi8uLi9tYXRoJyk7XG5cbi8qKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQGV4dGVuZHMgUElYSS5XZWJHTE1hbmFnZXJcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5XZWJHTFJlbmRlcmVyfSBUaGUgcmVuZGVyZXIgdGhpcyBtYW5hZ2VyIHdvcmtzIGZvci5cbiAqL1xuZnVuY3Rpb24gRmlsdGVyTWFuYWdlcihyZW5kZXJlcilcbntcbiAgICBXZWJHTE1hbmFnZXIuY2FsbCh0aGlzLCByZW5kZXJlcik7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtvYmplY3RbXX1cbiAgICAgKi9cbiAgICB0aGlzLmZpbHRlclN0YWNrID0gW107XG5cbiAgICB0aGlzLmZpbHRlclN0YWNrLnB1c2goe1xuICAgICAgICByZW5kZXJUYXJnZXQ6cmVuZGVyZXIuY3VycmVudFJlbmRlclRhcmdldCxcbiAgICAgICAgZmlsdGVyOltdLFxuICAgICAgICBib3VuZHM6bnVsbFxuICAgIH0pO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7UElYSS5SZW5kZXJUYXJnZXRbXX1cbiAgICAgKi9cbiAgICB0aGlzLnRleHR1cmVQb29sID0gW107XG5cbiAgICAvKipcbiAgICAgKiBUaGUgc2l6ZSBvZiB0aGUgdGV4dHVyZVxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5SZWN0YW5nbGV9XG4gICAgICovXG4gICAgLy8gbGlzdGVuIGZvciBjb250ZXh0IGFuZCB1cGRhdGUgbmVjZXNzYXJ5IGJ1ZmZlcnNcbiAgICAvL1RPRE8gbWFrZSB0aGlzIGR5bmFtaWMhXG4gICAgLy9UT0RPIHRlc3QgdGhpcyBvdXQgYnkgZm9yY2VzIHBvd2VyIG9mIHR3bz9cbiAgICB0aGlzLnRleHR1cmVTaXplID0gbmV3IG1hdGguUmVjdGFuZ2xlKDAsIDAsIHJlbmRlcmVyLndpZHRoLCByZW5kZXJlci5oZWlnaHQpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGN1cnJlbnQgZnJhbWVcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuUmVjdGFuZ2xlfVxuICAgICAqL1xuICAgIHRoaXMuY3VycmVudEZyYW1lID0gbnVsbDtcbn1cblxuRmlsdGVyTWFuYWdlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFdlYkdMTWFuYWdlci5wcm90b3R5cGUpO1xuRmlsdGVyTWFuYWdlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBGaWx0ZXJNYW5hZ2VyO1xubW9kdWxlLmV4cG9ydHMgPSBGaWx0ZXJNYW5hZ2VyO1xuXG5cbi8qKlxuICogQ2FsbGVkIHdoZW4gdGhlcmUgaXMgYSBXZWJHTCBjb250ZXh0IGNoYW5nZS5cbiAqXG4gKi9cbkZpbHRlck1hbmFnZXIucHJvdG90eXBlLm9uQ29udGV4dENoYW5nZSA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy50ZXh0dXJlUG9vbC5sZW5ndGggPSAwO1xuXG4gICAgdmFyIGdsID0gdGhpcy5yZW5kZXJlci5nbDtcbiAgICB0aGlzLnF1YWQgPSBuZXcgUXVhZChnbCk7XG59O1xuXG4vKipcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5XZWJHTFJlbmRlcmVyfVxuICogQHBhcmFtIGJ1ZmZlciB7QXJyYXlCdWZmZXJ9XG4gKi9cbkZpbHRlck1hbmFnZXIucHJvdG90eXBlLnNldEZpbHRlclN0YWNrID0gZnVuY3Rpb24gKCBmaWx0ZXJTdGFjayApXG57XG4gICAgdGhpcy5maWx0ZXJTdGFjayA9IGZpbHRlclN0YWNrO1xufTtcblxuLyoqXG4gKiBBcHBsaWVzIHRoZSBmaWx0ZXIgYW5kIGFkZHMgaXQgdG8gdGhlIGN1cnJlbnQgZmlsdGVyIHN0YWNrLlxuICpcbiAqIEBwYXJhbSB0YXJnZXQge1BJWEkuRGlzcGxheU9iamVjdH1cbiAqIEBwYXJhbSBmaWx0ZXJzIHtQSVhJLkFic3RyYWN0RmlsZXJbXX0gdGhlIGZpbHRlcnMgdGhhdCB3aWxsIGJlIHB1c2hlZCB0byB0aGUgY3VycmVudCBmaWx0ZXIgc3RhY2tcbiAqL1xuRmlsdGVyTWFuYWdlci5wcm90b3R5cGUucHVzaEZpbHRlciA9IGZ1bmN0aW9uICh0YXJnZXQsIGZpbHRlcnMpXG57XG4gICAgLy8gZ2V0IHRoZSBib3VuZHMgb2YgdGhlIG9iamVjdC4uXG4gICAgLy8gVE9ETyByZXBsYWNlIGNsb25lIHdpdGggYSBjb3B5IHRvIHNhdmUgb2JqZWN0IGNyZWF0aW9uXG4gICAgdmFyIGJvdW5kcyA9IHRhcmdldC5maWx0ZXJBcmVhID8gdGFyZ2V0LmZpbHRlckFyZWEuY2xvbmUoKSA6IHRhcmdldC5nZXRCb3VuZHMoKTtcblxuICAgIC8vYm91bmRzID0gYm91bmRzLmNsb25lKCk7XG5cbiAgICAvLyByb3VuZCBvZmYgdGhlIHJlY3RhbmdsZSB0byBnZXQgYSBuaWNlIHNtb29vb29vb3RoIGZpbHRlciA6KVxuICAgIGJvdW5kcy54ID0gYm91bmRzLnggfCAwO1xuICAgIGJvdW5kcy55ID0gYm91bmRzLnkgfCAwO1xuICAgIGJvdW5kcy53aWR0aCA9IGJvdW5kcy53aWR0aCB8IDA7XG4gICAgYm91bmRzLmhlaWdodCA9IGJvdW5kcy5oZWlnaHQgfCAwO1xuXG5cbiAgICAvLyBwYWRkaW5nIVxuICAgIHZhciBwYWRkaW5nID0gZmlsdGVyc1swXS5wYWRkaW5nIHwgMDtcbiAgICBib3VuZHMueCAtPSBwYWRkaW5nO1xuICAgIGJvdW5kcy55IC09IHBhZGRpbmc7XG4gICAgYm91bmRzLndpZHRoICs9IHBhZGRpbmcgKiAyO1xuICAgIGJvdW5kcy5oZWlnaHQgKz0gcGFkZGluZyAqIDI7XG5cblxuICAgIGlmKHRoaXMucmVuZGVyZXIuY3VycmVudFJlbmRlclRhcmdldC50cmFuc2Zvcm0pXG4gICAge1xuICAgICAgICAvL1RPRE8gdGhpcyB3aWxsIGJyZWFrIGlmIHRoZSByZW5kZXJUZXh0dXJlIHRyYW5zZm9ybSBpcyBhbnl0aGluZyBvdGhlciB0aGFuIGEgdHJhbnNsYXRpb24uXG4gICAgICAgIC8vV2lsbCBuZWVkIHRvIHRha2UgdGhlIGZ1bGwgbWF0cml4IHRyYW5zZm9ybSBpbnRvIGFjb3VudC4uXG4gICAgICAgIHZhciB0cmFuc2Zvcm0gPSB0aGlzLnJlbmRlcmVyLmN1cnJlbnRSZW5kZXJUYXJnZXQudHJhbnNmb3JtO1xuXG4gICAgICAgIGJvdW5kcy54ICs9IHRyYW5zZm9ybS50eDtcbiAgICAgICAgYm91bmRzLnkgKz0gdHJhbnNmb3JtLnR5O1xuXG4gICAgICAgIHRoaXMuY2FwRmlsdGVyQXJlYSggYm91bmRzICk7XG5cbiAgICAgICAgYm91bmRzLnggLT0gdHJhbnNmb3JtLnR4O1xuICAgICAgICBib3VuZHMueSAtPSB0cmFuc2Zvcm0udHk7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgICB0aGlzLmNhcEZpbHRlckFyZWEoIGJvdW5kcyApO1xuICAgIH1cblxuICAgIGlmKGJvdW5kcy53aWR0aCA+IDAgJiYgYm91bmRzLmhlaWdodCA+IDApXG4gICAge1xuICAgICAgICB0aGlzLmN1cnJlbnRGcmFtZSA9IGJvdW5kcztcblxuICAgICAgICB2YXIgdGV4dHVyZSA9IHRoaXMuZ2V0UmVuZGVyVGFyZ2V0KCk7XG5cbiAgICAgICAgdGhpcy5yZW5kZXJlci5zZXRSZW5kZXJUYXJnZXQodGV4dHVyZSk7XG5cbiAgICAgICAgLy8gY2xlYXIgdGhlIHRleHR1cmUuLlxuICAgICAgICB0ZXh0dXJlLmNsZWFyKCk7XG5cbiAgICAgICAgLy8gVE9ETyBnZXQgcmlkIG9mIG9iamVjdCBjcmVhdGlvbiFcbiAgICAgICAgdGhpcy5maWx0ZXJTdGFjay5wdXNoKHtcbiAgICAgICAgICAgIHJlbmRlclRhcmdldDogdGV4dHVyZSxcbiAgICAgICAgICAgIGZpbHRlcjogZmlsdGVyc1xuICAgICAgICB9KTtcblxuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICAvLyBwdXNoIHNvbXRoaW5nIG9uIHRvIHRoZSBzdGFjayB0aGF0IGlzIGVtcHR5XG4gICAgICAgIHRoaXMuZmlsdGVyU3RhY2sucHVzaCh7XG4gICAgICAgICAgICByZW5kZXJUYXJnZXQ6IG51bGwsXG4gICAgICAgICAgICBmaWx0ZXI6IGZpbHRlcnNcbiAgICAgICAgfSk7XG4gICAgfVxufTtcblxuXG4vKipcbiAqIFJlbW92ZXMgdGhlIGxhc3QgZmlsdGVyIGZyb20gdGhlIGZpbHRlciBzdGFjayBhbmQgcmV0dXJucyBpdC5cbiAqXG4gKi9cbkZpbHRlck1hbmFnZXIucHJvdG90eXBlLnBvcEZpbHRlciA9IGZ1bmN0aW9uICgpXG57XG4gICAgdmFyIGZpbHRlckRhdGEgPSB0aGlzLmZpbHRlclN0YWNrLnBvcCgpO1xuICAgIHZhciBwcmV2aW91c0ZpbHRlckRhdGEgPSB0aGlzLmZpbHRlclN0YWNrW3RoaXMuZmlsdGVyU3RhY2subGVuZ3RoLTFdO1xuXG4gICAgdmFyIGlucHV0ID0gZmlsdGVyRGF0YS5yZW5kZXJUYXJnZXQ7XG5cbiAgICAvLyBpZiB0aGUgcmVuZGVyVGFyZ2V0IGlzIG51bGwgdGhlbiB3ZSBkb24ndCBhcHBseSB0aGUgZmlsdGVyIGFzIGl0cyBvZmZzY3JlZW5cbiAgICBpZighZmlsdGVyRGF0YS5yZW5kZXJUYXJnZXQpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFyIG91dHB1dCA9IHByZXZpb3VzRmlsdGVyRGF0YS5yZW5kZXJUYXJnZXQ7XG5cbiAgICAvLyB1c2UgcHJvZ3JhbVxuICAgIHZhciBnbCA9IHRoaXMucmVuZGVyZXIuZ2w7XG5cblxuICAgIHRoaXMuY3VycmVudEZyYW1lID0gaW5wdXQuZnJhbWU7XG5cbiAgICB0aGlzLnF1YWQubWFwKHRoaXMudGV4dHVyZVNpemUsIGlucHV0LmZyYW1lKTtcblxuXG4gICAgLy8gVE9ETy4uIHRoaXMgcHJvYmFibHkgb25seSBuZWVkcyB0byBiZSBkb25lIG9uY2UhXG4gICAgZ2wuYmluZEJ1ZmZlcihnbC5BUlJBWV9CVUZGRVIsIHRoaXMucXVhZC52ZXJ0ZXhCdWZmZXIpO1xuICAgIGdsLmJpbmRCdWZmZXIoZ2wuRUxFTUVOVF9BUlJBWV9CVUZGRVIsIHRoaXMucXVhZC5pbmRleEJ1ZmZlcik7XG5cbiAgICB2YXIgZmlsdGVycyA9IGZpbHRlckRhdGEuZmlsdGVyO1xuXG4gICAgLy8gYXNzdW1pbmcgYWxsIGZpbHRlcnMgZm9sbG93IHRoZSBjb3JyZWN0IGZvcm1hdD8/XG4gICAgZ2wudmVydGV4QXR0cmliUG9pbnRlcih0aGlzLnJlbmRlcmVyLnNoYWRlck1hbmFnZXIuZGVmYXVsdFNoYWRlci5hdHRyaWJ1dGVzLmFWZXJ0ZXhQb3NpdGlvbiwgMiwgZ2wuRkxPQVQsIGZhbHNlLCAwLCAwKTtcbiAgICBnbC52ZXJ0ZXhBdHRyaWJQb2ludGVyKHRoaXMucmVuZGVyZXIuc2hhZGVyTWFuYWdlci5kZWZhdWx0U2hhZGVyLmF0dHJpYnV0ZXMuYVRleHR1cmVDb29yZCwgMiwgZ2wuRkxPQVQsIGZhbHNlLCAwLCAyICogNCAqIDQpO1xuICAgIGdsLnZlcnRleEF0dHJpYlBvaW50ZXIodGhpcy5yZW5kZXJlci5zaGFkZXJNYW5hZ2VyLmRlZmF1bHRTaGFkZXIuYXR0cmlidXRlcy5hQ29sb3IsIDQsIGdsLkZMT0FULCBmYWxzZSwgMCwgNCAqIDQgKiA0KTtcblxuICAgIC8vIHJlc3RvcmUgdGhlIG5vcm1hbCBibGVuZG1vZGUhXG4gICAgdGhpcy5yZW5kZXJlci5ibGVuZE1vZGVNYW5hZ2VyLnNldEJsZW5kTW9kZShDT05TVC5CTEVORF9NT0RFUy5OT1JNQUwpO1xuXG4gICAgaWYgKGZpbHRlcnMubGVuZ3RoID09PSAxKVxuICAgIHtcbiAgICAgICAgLy8gVE9ETyAoY2VuZ2xlcikgLSBUaGVyZSBoYXMgdG8gYmUgYSBiZXR0ZXIgd2F5IHRoZW4gc2V0dGluZyB0aGlzIGVhY2ggdGltZT9cbiAgICAgICAgaWYgKGZpbHRlcnNbMF0udW5pZm9ybXMuZGltZW5zaW9ucylcbiAgICAgICAge1xuICAgICAgICAgICAgZmlsdGVyc1swXS51bmlmb3Jtcy5kaW1lbnNpb25zLnZhbHVlWzBdID0gdGhpcy5yZW5kZXJlci53aWR0aDtcbiAgICAgICAgICAgIGZpbHRlcnNbMF0udW5pZm9ybXMuZGltZW5zaW9ucy52YWx1ZVsxXSA9IHRoaXMucmVuZGVyZXIuaGVpZ2h0O1xuICAgICAgICAgICAgZmlsdGVyc1swXS51bmlmb3Jtcy5kaW1lbnNpb25zLnZhbHVlWzJdID0gdGhpcy5xdWFkLnZlcnRpY2VzWzBdO1xuICAgICAgICAgICAgZmlsdGVyc1swXS51bmlmb3Jtcy5kaW1lbnNpb25zLnZhbHVlWzNdID0gdGhpcy5xdWFkLnZlcnRpY2VzWzVdO1xuICAgICAgICB9XG5cbiAgICAgICAgZmlsdGVyc1swXS5hcHBseUZpbHRlciggdGhpcy5yZW5kZXJlciwgaW5wdXQsIG91dHB1dCApO1xuICAgICAgICB0aGlzLnJldHVyblJlbmRlclRhcmdldCggaW5wdXQgKTtcblxuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICB2YXIgZmxpcFRleHR1cmUgPSBpbnB1dDtcbiAgICAgICAgdmFyIGZsb3BUZXh0dXJlID0gdGhpcy5nZXRSZW5kZXJUYXJnZXQodHJ1ZSk7XG5cbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBmaWx0ZXJzLmxlbmd0aC0xOyBpKyspXG4gICAgICAgIHtcbiAgICAgICAgICAgIHZhciBmaWx0ZXIgPSBmaWx0ZXJzW2ldO1xuXG4gICAgICAgICAgICAvLyBUT0RPIChjZW5nbGVyKSAtIFRoZXJlIGhhcyB0byBiZSBhIGJldHRlciB3YXkgdGhlbiBzZXR0aW5nIHRoaXMgZWFjaCB0aW1lP1xuICAgICAgICAgICAgaWYgKGZpbHRlci51bmlmb3Jtcy5kaW1lbnNpb25zKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGZpbHRlci51bmlmb3Jtcy5kaW1lbnNpb25zLnZhbHVlWzBdID0gdGhpcy5yZW5kZXJlci53aWR0aDtcbiAgICAgICAgICAgICAgICBmaWx0ZXIudW5pZm9ybXMuZGltZW5zaW9ucy52YWx1ZVsxXSA9IHRoaXMucmVuZGVyZXIuaGVpZ2h0O1xuICAgICAgICAgICAgICAgIGZpbHRlci51bmlmb3Jtcy5kaW1lbnNpb25zLnZhbHVlWzJdID0gdGhpcy5xdWFkLnZlcnRpY2VzWzBdO1xuICAgICAgICAgICAgICAgIGZpbHRlci51bmlmb3Jtcy5kaW1lbnNpb25zLnZhbHVlWzNdID0gdGhpcy5xdWFkLnZlcnRpY2VzWzVdO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBmaWx0ZXIuYXBwbHlGaWx0ZXIoIHRoaXMucmVuZGVyZXIsIGZsaXBUZXh0dXJlLCBmbG9wVGV4dHVyZSApO1xuXG4gICAgICAgICAgICB2YXIgdGVtcCA9IGZsaXBUZXh0dXJlO1xuICAgICAgICAgICAgZmxpcFRleHR1cmUgPSBmbG9wVGV4dHVyZTtcbiAgICAgICAgICAgIGZsb3BUZXh0dXJlID0gdGVtcDtcbiAgICAgICAgfVxuXG4gICAgICAgIGZpbHRlcnNbZmlsdGVycy5sZW5ndGgtMV0uYXBwbHlGaWx0ZXIoIHRoaXMucmVuZGVyZXIsIGZsaXBUZXh0dXJlLCBvdXRwdXQgKTtcblxuICAgICAgICB0aGlzLnJldHVyblJlbmRlclRhcmdldCggZmxpcFRleHR1cmUgKTtcbiAgICAgICAgdGhpcy5yZXR1cm5SZW5kZXJUYXJnZXQoIGZsb3BUZXh0dXJlICk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZpbHRlckRhdGEuZmlsdGVyO1xufTtcblxuLyoqXG4gKiBHcmFicyBhbiByZW5kZXIgdGFyZ2V0IGZyb20gdGhlIGludGVybmFsIHBvb2xcbiAqXG4gKiBAcGFyYW0gY2xlYXIge2Jvb2xlYW59IFdoZXRoZXIgb3Igbm90IHdlIG5lZWQgdG8gY2xlYXIgdGhlIFJlbmRlclRhcmdldFxuICogQHJldHVybiB7UmVuZGVyVGFyZ2V0fVxuICovXG5GaWx0ZXJNYW5hZ2VyLnByb3RvdHlwZS5nZXRSZW5kZXJUYXJnZXQgPSBmdW5jdGlvbiAoIGNsZWFyIClcbntcbiAgICB2YXIgcmVuZGVyVGFyZ2V0ID0gdGhpcy50ZXh0dXJlUG9vbC5wb3AoKSB8fCBuZXcgUmVuZGVyVGFyZ2V0KHRoaXMucmVuZGVyZXIuZ2wsIHRoaXMudGV4dHVyZVNpemUud2lkdGgsIHRoaXMudGV4dHVyZVNpemUuaGVpZ2h0LCBDT05TVC5TQ0FMRV9NT0RFUy5MSU5FQVIsIHRoaXMucmVuZGVyZXIucmVzb2x1dGlvbiAqIENPTlNULkZJTFRFUl9SRVNPTFVUSU9OKTtcbiAgICByZW5kZXJUYXJnZXQuZnJhbWUgPSB0aGlzLmN1cnJlbnRGcmFtZTtcblxuICAgIGlmIChjbGVhcilcbiAgICB7XG4gICAgICAgIHJlbmRlclRhcmdldC5jbGVhcih0cnVlKTtcbiAgICB9XG5cbiAgICByZXR1cm4gcmVuZGVyVGFyZ2V0O1xufTtcblxuLypcbiAqIFJldHVybnMgYSBSZW5kZXJUYXJnZXQgdG8gdGhlIGludGVybmFsIHBvb2xcbiAqIEBwYXJhbSByZW5kZXJUYXJnZXQge1JlbmRlclRhcmdldH0gVGhlIFJlbmRlclRhcmdldCB3ZSB3YW50IHRvIHJldHVybiB0byB0aGUgcG9vbFxuICovXG5GaWx0ZXJNYW5hZ2VyLnByb3RvdHlwZS5yZXR1cm5SZW5kZXJUYXJnZXQgPSBmdW5jdGlvbiAocmVuZGVyVGFyZ2V0KVxue1xuICAgIHRoaXMudGV4dHVyZVBvb2wucHVzaCggcmVuZGVyVGFyZ2V0ICk7XG59O1xuXG4vKlxuICogQXBwbGllcyB0aGUgZmlsdGVyXG4gKiBAcGFyYW0gc2hhZGVyIHtTaGFkZXJ9IFRoZSBzaGFkZXIgdG8gdXBsb2FkXG4gKiBAcGFyYW0gaW5wdXRUYXJnZXQge1JlbmRlclRhcmdldH1cbiAqIEBwYXJhbSBvdXRwdXRUYXJnZXQge1JlbmRlclRhcmdldH1cbiAqIEBwYXJhbSBjbGVhciB7Ym9vbGVhbn0gV2hldGhlciBvciBub3Qgd2Ugd2FudCB0byBjbGVhciB0aGUgb3V0cHV0VGFyZ2V0XG4gKi9cbkZpbHRlck1hbmFnZXIucHJvdG90eXBlLmFwcGx5RmlsdGVyID0gZnVuY3Rpb24gKHNoYWRlciwgaW5wdXRUYXJnZXQsIG91dHB1dFRhcmdldCwgY2xlYXIpXG57XG4gICAgdmFyIGdsID0gdGhpcy5yZW5kZXJlci5nbDtcblxuICAgIHRoaXMucmVuZGVyZXIuc2V0UmVuZGVyVGFyZ2V0KG91dHB1dFRhcmdldCk7XG5cbiAgICBpZiAoY2xlYXIpXG4gICAge1xuICAgICAgICBvdXRwdXRUYXJnZXQuY2xlYXIoKTtcbiAgICB9XG5cbiAgICAvLyBzZXQgdGhlIHNoYWRlclxuICAgIHRoaXMucmVuZGVyZXIuc2hhZGVyTWFuYWdlci5zZXRTaGFkZXIoc2hhZGVyKTtcblxuICAgIC8vIFRPRE8gKGNlbmdsZXIpIC0gQ2FuIHRoaXMgYmUgY2FjaGVkIGFuZCBub3QgYHRvQXJyYXlgZWQgZWFjaCBmcmFtZT9cbiAgICBzaGFkZXIudW5pZm9ybXMucHJvamVjdGlvbk1hdHJpeC52YWx1ZSA9IHRoaXMucmVuZGVyZXIuY3VycmVudFJlbmRlclRhcmdldC5wcm9qZWN0aW9uTWF0cml4LnRvQXJyYXkodHJ1ZSk7XG5cbiAgICAvL1RPRE8gY2FuIHRoaXMgYmUgb3B0aW1pc2VkP1xuICAgIHNoYWRlci5zeW5jVW5pZm9ybXMoKTtcbi8qXG4gICAgZ2wudmVydGV4QXR0cmliUG9pbnRlcihzaGFkZXIuYXR0cmlidXRlcy5hVmVydGV4UG9zaXRpb24sIDIsIGdsLkZMT0FULCBmYWxzZSwgMCwgMCk7XG4gICAgZ2wudmVydGV4QXR0cmliUG9pbnRlcihzaGFkZXIuYXR0cmlidXRlcy5hVGV4dHVyZUNvb3JkLCAyLCBnbC5GTE9BVCwgZmFsc2UsIDAsIDIgKiA0ICogNCk7XG4gICAgZ2wudmVydGV4QXR0cmliUG9pbnRlcihzaGFkZXIuYXR0cmlidXRlcy5hQ29sb3IsIDQsIGdsLkZMT0FULCBmYWxzZSwgMCwgNCAqIDQgKiA0KTtcbiovXG5cbiAgICBnbC5hY3RpdmVUZXh0dXJlKGdsLlRFWFRVUkUwKTtcbiAgICBnbC5iaW5kVGV4dHVyZShnbC5URVhUVVJFXzJELCBpbnB1dFRhcmdldC50ZXh0dXJlKTtcblxuICAgIGdsLmRyYXdFbGVtZW50cyhnbC5UUklBTkdMRVMsIDYsIGdsLlVOU0lHTkVEX1NIT1JULCAwICk7XG4gICAgdGhpcy5yZW5kZXJlci5kcmF3Q291bnQrKztcbn07XG5cbi8qXG4gKiBDYWxjdWxhdGVzIHRoZSBtYXBwZWQgbWF0cml4XG4gKiBAcGFyYW0gZmlsdGVyQXJlYSB7UmVjdGFuZ2xlfSBUaGUgZmlsdGVyIGFyZWFcbiAqIEBwYXJhbSBzcHJpdGUge1Nwcml0ZX0gdGhlIHRhcmdldCBzcHJpdGVcbiAqIEBwYXJhbSBvdXRwdXRNYXRyaXgge01hdHJpeH0gQGFsdmluXG4gKi9cbi8vIFRPRE8gcGxheWluZyBhcm91bmQgaGVyZS4uIHRoaXMgaXMgdGVtcG9yYXJ5IC0gKHdpbGwgZW5kIHVwIGluIHRoZSBzaGFkZXIpXG5GaWx0ZXJNYW5hZ2VyLnByb3RvdHlwZS5jYWxjdWxhdGVNYXBwZWRNYXRyaXggPSBmdW5jdGlvbiAoZmlsdGVyQXJlYSwgc3ByaXRlLCBvdXRwdXRNYXRyaXgpXG57XG4gICAgdmFyIHdvcmxkVHJhbnNmb3JtID0gc3ByaXRlLndvcmxkVHJhbnNmb3JtLmNvcHkobWF0aC5NYXRyaXguVEVNUF9NQVRSSVgpLFxuICAgIHRleHR1cmUgPSBzcHJpdGUuX3RleHR1cmUuYmFzZVRleHR1cmU7XG5cbiAgICB2YXIgbWFwcGVkTWF0cml4ID0gb3V0cHV0TWF0cml4LmlkZW50aXR5KCk7XG5cbiAgICAvLyBzY2FsZS4uXG4gICAgdmFyIHJhdGlvID0gdGhpcy50ZXh0dXJlU2l6ZS5oZWlnaHQgLyB0aGlzLnRleHR1cmVTaXplLndpZHRoO1xuXG4gICAgbWFwcGVkTWF0cml4LnRyYW5zbGF0ZShmaWx0ZXJBcmVhLnggLyB0aGlzLnRleHR1cmVTaXplLndpZHRoLCBmaWx0ZXJBcmVhLnkgLyB0aGlzLnRleHR1cmVTaXplLmhlaWdodCApO1xuXG4gICAgbWFwcGVkTWF0cml4LnNjYWxlKDEgLCByYXRpbyk7XG5cbiAgICB2YXIgdHJhbnNsYXRlU2NhbGVYID0gKHRoaXMudGV4dHVyZVNpemUud2lkdGggLyB0ZXh0dXJlLndpZHRoKTtcbiAgICB2YXIgdHJhbnNsYXRlU2NhbGVZID0gKHRoaXMudGV4dHVyZVNpemUuaGVpZ2h0IC8gdGV4dHVyZS5oZWlnaHQpO1xuXG4gICAgd29ybGRUcmFuc2Zvcm0udHggLz0gdGV4dHVyZS53aWR0aCAqIHRyYW5zbGF0ZVNjYWxlWDtcbiAgICB3b3JsZFRyYW5zZm9ybS50eSAvPSB0ZXh0dXJlLndpZHRoICogdHJhbnNsYXRlU2NhbGVYO1xuXG4gICAgd29ybGRUcmFuc2Zvcm0uaW52ZXJ0KCk7XG5cbiAgICBtYXBwZWRNYXRyaXgucHJlcGVuZCh3b3JsZFRyYW5zZm9ybSk7XG5cbiAgICAvLyBhcHBseSBpbnZlcnNlIHNjYWxlLi5cbiAgICBtYXBwZWRNYXRyaXguc2NhbGUoMSAsIDEvcmF0aW8pO1xuXG4gICAgbWFwcGVkTWF0cml4LnNjYWxlKCB0cmFuc2xhdGVTY2FsZVggLCB0cmFuc2xhdGVTY2FsZVkgKTtcblxuICAgIG1hcHBlZE1hdHJpeC50cmFuc2xhdGUoc3ByaXRlLmFuY2hvci54LCBzcHJpdGUuYW5jaG9yLnkpO1xuXG4gICAgcmV0dXJuIG1hcHBlZE1hdHJpeDtcblxuICAgIC8vIEtlZXBpbmcgdGhlIG9yZ2luYWwgYXMgYSByZW1pbmRlciB0byBtZSBvbiBob3cgdGhpcyB3b3JrcyFcbiAgICAvL1xuICAgIC8vIHZhciBtID0gbmV3IG1hdGguTWF0cml4KCk7XG5cbiAgICAvLyAvLyBzY2FsZS4uXG4gICAgLy8gdmFyIHJhdGlvID0gdGhpcy50ZXh0dXJlU2l6ZS5oZWlnaHQgLyB0aGlzLnRleHR1cmVTaXplLndpZHRoO1xuXG4gICAgLy8gbS50cmFuc2xhdGUoZmlsdGVyQXJlYS54IC8gdGhpcy50ZXh0dXJlU2l6ZS53aWR0aCwgZmlsdGVyQXJlYS55IC8gdGhpcy50ZXh0dXJlU2l6ZS5oZWlnaHQpO1xuXG5cbiAgICAvLyBtLnNjYWxlKDEgLCByYXRpbyk7XG5cblxuICAgIC8vIHZhciB0cmFuc2Zvcm0gPSB3dC5jbG9uZSgpO1xuXG4gICAgLy8gdmFyIHRyYW5zbGF0ZVNjYWxlWCA9ICh0aGlzLnRleHR1cmVTaXplLndpZHRoIC8gNjIwKTtcbiAgICAvLyB2YXIgdHJhbnNsYXRlU2NhbGVZID0gKHRoaXMudGV4dHVyZVNpemUuaGVpZ2h0IC8gMzgwKTtcblxuICAgIC8vIHRyYW5zZm9ybS50eCAvPSA2MjAgKiB0cmFuc2xhdGVTY2FsZVg7XG4gICAgLy8gdHJhbnNmb3JtLnR5IC89IDYyMCAqIHRyYW5zbGF0ZVNjYWxlWDtcblxuICAgIC8vIHRyYW5zZm9ybS5pbnZlcnQoKTtcblxuICAgIC8vIHRyYW5zZm9ybS5hcHBlbmQobSk7XG5cbiAgICAvLyAvLyBhcHBseSBpbnZlcnNlIHNjYWxlLi5cbiAgICAvLyB0cmFuc2Zvcm0uc2NhbGUoMSAsIDEvcmF0aW8pO1xuXG4gICAgLy8gdHJhbnNmb3JtLnNjYWxlKCB0cmFuc2xhdGVTY2FsZVggLCB0cmFuc2xhdGVTY2FsZVkgKTtcblxuICAgIC8vIHJldHVybiB0cmFuc2Zvcm07XG59O1xuXG4vKlxuICogQ29uc3RyYWlucyB0aGUgZmlsdGVyIGFyZWEgdG8gdGhlIHRleHR1cmUgc2l6ZVxuICogQHBhcmFtIGZpbHRlckFyZWEge1JlY3RhbmdsZX0gVGhlIGZpbHRlciBhcmVhIHdlIHdhbnQgdG8gY2FwXG4gKi9cbkZpbHRlck1hbmFnZXIucHJvdG90eXBlLmNhcEZpbHRlckFyZWEgPSBmdW5jdGlvbiAoZmlsdGVyQXJlYSlcbntcbiAgICBpZiAoZmlsdGVyQXJlYS54IDwgMClcbiAgICB7XG4gICAgICAgIGZpbHRlckFyZWEud2lkdGggKz0gZmlsdGVyQXJlYS54O1xuICAgICAgICBmaWx0ZXJBcmVhLnggPSAwO1xuICAgIH1cblxuICAgIGlmIChmaWx0ZXJBcmVhLnkgPCAwKVxuICAgIHtcbiAgICAgICAgZmlsdGVyQXJlYS5oZWlnaHQgKz0gZmlsdGVyQXJlYS55O1xuICAgICAgICBmaWx0ZXJBcmVhLnkgPSAwO1xuICAgIH1cblxuICAgIGlmICggZmlsdGVyQXJlYS54ICsgZmlsdGVyQXJlYS53aWR0aCA+IHRoaXMudGV4dHVyZVNpemUud2lkdGggKVxuICAgIHtcbiAgICAgICAgZmlsdGVyQXJlYS53aWR0aCA9IHRoaXMudGV4dHVyZVNpemUud2lkdGggLSBmaWx0ZXJBcmVhLng7XG4gICAgfVxuXG4gICAgaWYgKCBmaWx0ZXJBcmVhLnkgKyBmaWx0ZXJBcmVhLmhlaWdodCA+IHRoaXMudGV4dHVyZVNpemUuaGVpZ2h0IClcbiAgICB7XG4gICAgICAgIGZpbHRlckFyZWEuaGVpZ2h0ID0gdGhpcy50ZXh0dXJlU2l6ZS5oZWlnaHQgLSBmaWx0ZXJBcmVhLnk7XG4gICAgfVxufTtcblxuLypcbiAqIFJlc2l6ZXMgYWxsIHRoZSByZW5kZXIgdGFyZ2V0cyBpbiB0aGUgcG9vbFxuICogQHBhcmFtIHdpZHRoIHtudW1iZXJ9IHRoZSBuZXcgd2lkdGhcbiAqIEBwYXJhbSBoZWlnaHQge251bWJlcn0gdGhlIG5ldyBoZWlnaHRcbiAqL1xuRmlsdGVyTWFuYWdlci5wcm90b3R5cGUucmVzaXplID0gZnVuY3Rpb24gKCB3aWR0aCwgaGVpZ2h0IClcbntcbiAgICB0aGlzLnRleHR1cmVTaXplLndpZHRoID0gd2lkdGg7XG4gICAgdGhpcy50ZXh0dXJlU2l6ZS5oZWlnaHQgPSBoZWlnaHQ7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMudGV4dHVyZVBvb2wubGVuZ3RoOyBpKyspXG4gICAge1xuICAgICAgICB0aGlzLnRleHR1cmVQb29sW2ldLnJlc2l6ZSggd2lkdGgsIGhlaWdodCApO1xuICAgIH1cbn07XG5cbi8qKlxuICogRGVzdHJveXMgdGhlIGZpbHRlciBhbmQgcmVtb3ZlcyBpdCBmcm9tIHRoZSBmaWx0ZXIgc3RhY2suXG4gKlxuICovXG5GaWx0ZXJNYW5hZ2VyLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLnF1YWQuZGVzdHJveSgpO1xuICAgIFxuICAgIFdlYkdMTWFuYWdlci5wcm90b3R5cGUuZGVzdHJveS5jYWxsKHRoaXMpO1xuICAgIFxuICAgIHRoaXMuZmlsdGVyU3RhY2sgPSBudWxsO1xuICAgIHRoaXMub2Zmc2V0WSA9IDA7XG5cbiAgICAvLyBkZXN0cm95IHRleHR1cmVzXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLnRleHR1cmVQb29sLmxlbmd0aDsgaSsrKVxuICAgIHtcbiAgICAgICAgdGhpcy50ZXh0dXJlUG9vbFtpXS5kZXN0cm95KCk7XG4gICAgfVxuXG4gICAgdGhpcy50ZXh0dXJlUG9vbCA9IG51bGw7XG59O1xuIiwidmFyIFdlYkdMTWFuYWdlciA9IHJlcXVpcmUoJy4vV2ViR0xNYW5hZ2VyJyksXG4gICAgQWxwaGFNYXNrRmlsdGVyID0gcmVxdWlyZSgnLi4vZmlsdGVycy9TcHJpdGVNYXNrRmlsdGVyJyk7XG5cbi8qKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLldlYkdMUmVuZGVyZXJ9IFRoZSByZW5kZXJlciB0aGlzIG1hbmFnZXIgd29ya3MgZm9yLlxuICovXG5mdW5jdGlvbiBNYXNrTWFuYWdlcihyZW5kZXJlcilcbntcbiAgICBXZWJHTE1hbmFnZXIuY2FsbCh0aGlzLCByZW5kZXJlcik7XG5cbiAgICB0aGlzLnN0ZW5jaWxTdGFjayA9IFtdO1xuICAgIHRoaXMucmV2ZXJzZSA9IHRydWU7XG4gICAgdGhpcy5jb3VudCA9IDA7XG5cbiAgICB0aGlzLmFscGhhTWFza1Bvb2wgPSBbXTtcbn1cblxuTWFza01hbmFnZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShXZWJHTE1hbmFnZXIucHJvdG90eXBlKTtcbk1hc2tNYW5hZ2VyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IE1hc2tNYW5hZ2VyO1xubW9kdWxlLmV4cG9ydHMgPSBNYXNrTWFuYWdlcjtcblxuLyoqXG4gKiBBcHBsaWVzIHRoZSBNYXNrIGFuZCBhZGRzIGl0IHRvIHRoZSBjdXJyZW50IGZpbHRlciBzdGFjay5cbiAqXG4gKiBAcGFyYW0gZ3JhcGhpY3Mge1BJWEkuR3JhcGhpY3N9XG4gKiBAcGFyYW0gd2ViR0xEYXRhIHthbnlbXX1cbiAqL1xuTWFza01hbmFnZXIucHJvdG90eXBlLnB1c2hNYXNrID0gZnVuY3Rpb24gKHRhcmdldCwgbWFza0RhdGEpXG57XG4gICAgaWYgKG1hc2tEYXRhLnRleHR1cmUpXG4gICAge1xuICAgICAgICB0aGlzLnB1c2hTcHJpdGVNYXNrKHRhcmdldCwgbWFza0RhdGEpO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICB0aGlzLnB1c2hTdGVuY2lsTWFzayh0YXJnZXQsIG1hc2tEYXRhKTtcbiAgICB9XG5cbn07XG5cbi8qKlxuICogUmVtb3ZlcyB0aGUgbGFzdCBtYXNrIGZyb20gdGhlIG1hc2sgc3RhY2sgYW5kIGRvZXNuJ3QgcmV0dXJuIGl0LlxuICpcbiAqIEBwYXJhbSB0YXJnZXQge1BJWEkuUmVuZGVyVGFyZ2V0fVxuICogQHBhcmFtIG1hc2tEYXRhIHthbnlbXX1cbiAqL1xuTWFza01hbmFnZXIucHJvdG90eXBlLnBvcE1hc2sgPSBmdW5jdGlvbiAodGFyZ2V0LCBtYXNrRGF0YSlcbntcbiAgICBpZiAobWFza0RhdGEudGV4dHVyZSlcbiAgICB7XG4gICAgICAgIHRoaXMucG9wU3ByaXRlTWFzayh0YXJnZXQsIG1hc2tEYXRhKTtcbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgdGhpcy5wb3BTdGVuY2lsTWFzayh0YXJnZXQsIG1hc2tEYXRhKTtcbiAgICB9XG59O1xuXG4vKipcbiAqIEFwcGxpZXMgdGhlIE1hc2sgYW5kIGFkZHMgaXQgdG8gdGhlIGN1cnJlbnQgZmlsdGVyIHN0YWNrLlxuICpcbiAqIEBwYXJhbSB0YXJnZXQge1BJWEkuUmVuZGVyVGFyZ2V0fVxuICogQHBhcmFtIG1hc2tEYXRhIHthbnlbXX1cbiAqL1xuTWFza01hbmFnZXIucHJvdG90eXBlLnB1c2hTcHJpdGVNYXNrID0gZnVuY3Rpb24gKHRhcmdldCwgbWFza0RhdGEpXG57XG4gICAgdmFyIGFscGhhTWFza0ZpbHRlciA9IHRoaXMuYWxwaGFNYXNrUG9vbC5wb3AoKTtcblxuICAgIGlmICghYWxwaGFNYXNrRmlsdGVyKVxuICAgIHtcbiAgICAgICAgYWxwaGFNYXNrRmlsdGVyID0gW25ldyBBbHBoYU1hc2tGaWx0ZXIobWFza0RhdGEpXTtcbiAgICB9XG5cbiAgICBhbHBoYU1hc2tGaWx0ZXJbMF0ubWFza1Nwcml0ZSA9IG1hc2tEYXRhO1xuICAgIHRoaXMucmVuZGVyZXIuZmlsdGVyTWFuYWdlci5wdXNoRmlsdGVyKHRhcmdldCwgYWxwaGFNYXNrRmlsdGVyKTtcbn07XG5cbi8qKlxuICogUmVtb3ZlcyB0aGUgbGFzdCBmaWx0ZXIgZnJvbSB0aGUgZmlsdGVyIHN0YWNrIGFuZCBkb2Vzbid0IHJldHVybiBpdC5cbiAqXG4gKi9cbk1hc2tNYW5hZ2VyLnByb3RvdHlwZS5wb3BTcHJpdGVNYXNrID0gZnVuY3Rpb24gKClcbntcbiAgICB2YXIgZmlsdGVycyA9IHRoaXMucmVuZGVyZXIuZmlsdGVyTWFuYWdlci5wb3BGaWx0ZXIoKTtcblxuICAgIHRoaXMuYWxwaGFNYXNrUG9vbC5wdXNoKGZpbHRlcnMpO1xufTtcblxuXG4vKipcbiAqIEFwcGxpZXMgdGhlIE1hc2sgYW5kIGFkZHMgaXQgdG8gdGhlIGN1cnJlbnQgZmlsdGVyIHN0YWNrLlxuICpcbiAqIEBwYXJhbSB0YXJnZXQge1BJWEkuUmVuZGVyVGFyZ2V0fVxuICogQHBhcmFtIG1hc2tEYXRhIHthbnlbXX1cbiAqL1xuTWFza01hbmFnZXIucHJvdG90eXBlLnB1c2hTdGVuY2lsTWFzayA9IGZ1bmN0aW9uICh0YXJnZXQsIG1hc2tEYXRhKVxue1xuICAgIHRoaXMucmVuZGVyZXIuc3RlbmNpbE1hbmFnZXIucHVzaE1hc2sobWFza0RhdGEpO1xufTtcblxuLyoqXG4gKiBSZW1vdmVzIHRoZSBsYXN0IGZpbHRlciBmcm9tIHRoZSBmaWx0ZXIgc3RhY2sgYW5kIGRvZXNuJ3QgcmV0dXJuIGl0LlxuICpcbiAqIEBwYXJhbSB0YXJnZXQge1BJWEkuUmVuZGVyVGFyZ2V0fVxuICogQHBhcmFtIG1hc2tEYXRhIHthbnlbXX1cbiAqL1xuTWFza01hbmFnZXIucHJvdG90eXBlLnBvcFN0ZW5jaWxNYXNrID0gZnVuY3Rpb24gKHRhcmdldCwgbWFza0RhdGEpXG57XG4gICAgdGhpcy5yZW5kZXJlci5zdGVuY2lsTWFuYWdlci5wb3BNYXNrKG1hc2tEYXRhKTtcbn07XG5cbiIsInZhciBXZWJHTE1hbmFnZXIgPSByZXF1aXJlKCcuL1dlYkdMTWFuYWdlcicpLFxuICAgIFRleHR1cmVTaGFkZXIgPSByZXF1aXJlKCcuLi9zaGFkZXJzL1RleHR1cmVTaGFkZXInKSxcbiAgICBDb21wbGV4UHJpbWl0aXZlU2hhZGVyID0gcmVxdWlyZSgnLi4vc2hhZGVycy9Db21wbGV4UHJpbWl0aXZlU2hhZGVyJyksXG4gICAgUHJpbWl0aXZlU2hhZGVyID0gcmVxdWlyZSgnLi4vc2hhZGVycy9QcmltaXRpdmVTaGFkZXInKSxcbiAgICB1dGlscyA9IHJlcXVpcmUoJy4uLy4uLy4uL3V0aWxzJyk7XG5cbi8qKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQGV4dGVuZHMgUElYSS5XZWJHTE1hbmFnZXJcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5XZWJHTFJlbmRlcmVyfSBUaGUgcmVuZGVyZXIgdGhpcyBtYW5hZ2VyIHdvcmtzIGZvci5cbiAqL1xuZnVuY3Rpb24gU2hhZGVyTWFuYWdlcihyZW5kZXJlcilcbntcbiAgICBXZWJHTE1hbmFnZXIuY2FsbCh0aGlzLCByZW5kZXJlcik7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy5tYXhBdHRpYnMgPSAxMDtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge2FueVtdfVxuICAgICAqL1xuICAgIHRoaXMuYXR0cmliU3RhdGUgPSBbXTtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge2FueVtdfVxuICAgICAqL1xuICAgIHRoaXMudGVtcEF0dHJpYlN0YXRlID0gW107XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMubWF4QXR0aWJzOyBpKyspXG4gICAge1xuICAgICAgICB0aGlzLmF0dHJpYlN0YXRlW2ldID0gZmFsc2U7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7YW55W119XG4gICAgICovXG4gICAgdGhpcy5zdGFjayA9IFtdO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fY3VycmVudElkID0gLTE7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlNoYWRlcn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuY3VycmVudFNoYWRlciA9IG51bGw7XG5cbi8vICAgIHRoaXMuaW5pdFBsdWdpbnMoKTtcbn1cblxuU2hhZGVyTWFuYWdlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFdlYkdMTWFuYWdlci5wcm90b3R5cGUpO1xuU2hhZGVyTWFuYWdlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBTaGFkZXJNYW5hZ2VyO1xudXRpbHMucGx1Z2luVGFyZ2V0Lm1peGluKFNoYWRlck1hbmFnZXIpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IFNoYWRlck1hbmFnZXI7XG5cbi8qKlxuICogQ2FsbGVkIHdoZW4gdGhlcmUgaXMgYSBXZWJHTCBjb250ZXh0IGNoYW5nZS5cbiAqXG4gKi9cblNoYWRlck1hbmFnZXIucHJvdG90eXBlLm9uQ29udGV4dENoYW5nZSA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy5pbml0UGx1Z2lucygpO1xuXG4gICAgdmFyIGdsID0gdGhpcy5yZW5kZXJlci5nbDtcblxuICAgIC8vIGdldCB0aGUgbWF4aW11bSBudW1iZXIgb2YgYXR0cmlidXRlIGNvcnJlY3RseSBhcyB0aGlzIHRlbmRzIHRvIHZhcnlcbiAgICB0aGlzLm1heEF0dGlicyA9IGdsLmdldFBhcmFtZXRlcihnbC5NQVhfVkVSVEVYX0FUVFJJQlMpO1xuXG4gICAgdGhpcy5hdHRyaWJTdGF0ZSA9IFtdO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLm1heEF0dGliczsgaSsrKVxuICAgIHtcbiAgICAgICAgdGhpcy5hdHRyaWJTdGF0ZVtpXSA9IGZhbHNlO1xuICAgIH1cblxuICAgIC8vIFRPRE8gLSBXaHkgYXJlIHRoZXNlIG5vdCBwbHVnaW5zPyBXZSBjYW4ndCBkZWNvdXBsZSBwcmltaXRpdmVzIHVubGVzcyB0aGV5IGFyZS4uLi5cbiAgICB0aGlzLmRlZmF1bHRTaGFkZXIgPSBuZXcgVGV4dHVyZVNoYWRlcih0aGlzKTtcbiAgICB0aGlzLnByaW1pdGl2ZVNoYWRlciA9IG5ldyBQcmltaXRpdmVTaGFkZXIodGhpcyk7XG4gICAgdGhpcy5jb21wbGV4UHJpbWl0aXZlU2hhZGVyID0gbmV3IENvbXBsZXhQcmltaXRpdmVTaGFkZXIodGhpcyk7XG59O1xuXG4vKipcbiAqIFRha2VzIHRoZSBhdHRyaWJ1dGVzIGdpdmVuIGluIHBhcmFtZXRlcnMgYW5kIHVwbG9hZHMgdGhlbS5cbiAqXG4gKiBAcGFyYW0gYXR0cmlicyB7YW55W119IGF0dHJpYnNcbiAqL1xuU2hhZGVyTWFuYWdlci5wcm90b3R5cGUuc2V0QXR0cmlicyA9IGZ1bmN0aW9uIChhdHRyaWJzKVxue1xuICAgIC8vIHJlc2V0IHRlbXAgc3RhdGVcbiAgICB2YXIgaTtcblxuICAgIGZvciAoaSA9IDA7IGkgPCB0aGlzLnRlbXBBdHRyaWJTdGF0ZS5sZW5ndGg7IGkrKylcbiAgICB7XG4gICAgICAgIHRoaXMudGVtcEF0dHJpYlN0YXRlW2ldID0gZmFsc2U7XG4gICAgfVxuXG4gICAgLy8gc2V0IHRoZSBuZXcgYXR0cmlic1xuICAgIGZvciAodmFyIGEgaW4gYXR0cmlicylcbiAgICB7XG4gICAgICAgIHRoaXMudGVtcEF0dHJpYlN0YXRlW2F0dHJpYnNbYV1dID0gdHJ1ZTtcbiAgICB9XG5cbiAgICB2YXIgZ2wgPSB0aGlzLnJlbmRlcmVyLmdsO1xuXG4gICAgZm9yIChpID0gMDsgaSA8IHRoaXMuYXR0cmliU3RhdGUubGVuZ3RoOyBpKyspXG4gICAge1xuICAgICAgICBpZiAodGhpcy5hdHRyaWJTdGF0ZVtpXSAhPT0gdGhpcy50ZW1wQXR0cmliU3RhdGVbaV0pXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuYXR0cmliU3RhdGVbaV0gPSB0aGlzLnRlbXBBdHRyaWJTdGF0ZVtpXTtcblxuICAgICAgICAgICAgaWYgKHRoaXMuYXR0cmliU3RhdGVbaV0pXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgZ2wuZW5hYmxlVmVydGV4QXR0cmliQXJyYXkoaSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgZ2wuZGlzYWJsZVZlcnRleEF0dHJpYkFycmF5KGkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxufTtcblxuLyoqXG4gKiBTZXRzIHRoZSBjdXJyZW50IHNoYWRlci5cbiAqXG4gKiBAcGFyYW0gc2hhZGVyIHtQSVhJLlNoYWRlcn0gdGhlIHNoYWRlciB0byB1cGxvYWRcbiAqL1xuU2hhZGVyTWFuYWdlci5wcm90b3R5cGUuc2V0U2hhZGVyID0gZnVuY3Rpb24gKHNoYWRlcilcbntcbiAgICByZXR1cm47XG4gICAgaWYgKHRoaXMuX2N1cnJlbnRJZCA9PT0gc2hhZGVyLnVpZClcbiAgICB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICB0aGlzLl9jdXJyZW50SWQgPSBzaGFkZXIudWlkO1xuXG4gICAgdGhpcy5jdXJyZW50U2hhZGVyID0gc2hhZGVyO1xuXG4gICAgdGhpcy5yZW5kZXJlci5nbC51c2VQcm9ncmFtKHNoYWRlci5wcm9ncmFtKTtcbiAgICB0aGlzLnNldEF0dHJpYnMoc2hhZGVyLmF0dHJpYnV0ZXMpO1xuXG4gICAgcmV0dXJuIHRydWU7XG59O1xuXG4vKipcbiAqIERlc3Ryb3lzIHRoaXMgb2JqZWN0LlxuICpcbiAqL1xuU2hhZGVyTWFuYWdlci5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy5wcmltaXRpdmVTaGFkZXIuZGVzdHJveSgpO1xuICAgIHRoaXMuY29tcGxleFByaW1pdGl2ZVNoYWRlci5kZXN0cm95KCk7XG4gICAgV2ViR0xNYW5hZ2VyLnByb3RvdHlwZS5kZXN0cm95LmNhbGwodGhpcyk7XG5cbiAgICB0aGlzLmRlc3Ryb3lQbHVnaW5zKCk7XG5cbiAgICB0aGlzLmF0dHJpYlN0YXRlID0gbnVsbDtcblxuICAgIHRoaXMudGVtcEF0dHJpYlN0YXRlID0gbnVsbDtcbn07XG4iLCJ2YXIgV2ViR0xNYW5hZ2VyID0gcmVxdWlyZSgnLi9XZWJHTE1hbmFnZXInKSxcbiAgICB1dGlscyA9IHJlcXVpcmUoJy4uLy4uLy4uL3V0aWxzJyk7XG5cbi8qKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLldlYkdMUmVuZGVyZXJ9IFRoZSByZW5kZXJlciB0aGlzIG1hbmFnZXIgd29ya3MgZm9yLlxuICovXG5mdW5jdGlvbiBXZWJHTE1hc2tNYW5hZ2VyKHJlbmRlcmVyKVxue1xuICAgIFdlYkdMTWFuYWdlci5jYWxsKHRoaXMsIHJlbmRlcmVyKTtcbiAgICB0aGlzLnN0ZW5jaWxNYXNrU3RhY2sgPSBudWxsO1xufVxuXG5XZWJHTE1hc2tNYW5hZ2VyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoV2ViR0xNYW5hZ2VyLnByb3RvdHlwZSk7XG5XZWJHTE1hc2tNYW5hZ2VyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFdlYkdMTWFza01hbmFnZXI7XG5tb2R1bGUuZXhwb3J0cyA9IFdlYkdMTWFza01hbmFnZXI7XG5cbi8qKlxuICogQ2hhbmdlcyB0aGUgbWFzayBzdGFjayB0aGF0IGlzIHVzZWQgYnkgdGhpcyBtYW5hZ2VyLlxuICpcbiAqIEBwYXJhbSBzdGVuY2lsTWFza1N0YWNrIHtQSVhJLlN0ZW5jaWxNYXNrU3RhY2t9IFRoZSBtYXNrIHN0YWNrXG4gKi9cbldlYkdMTWFza01hbmFnZXIucHJvdG90eXBlLnNldE1hc2tTdGFjayA9IGZ1bmN0aW9uICggc3RlbmNpbE1hc2tTdGFjayApXG57XG4gICAgdGhpcy5zdGVuY2lsTWFza1N0YWNrID0gc3RlbmNpbE1hc2tTdGFjaztcblxuICAgIHZhciBnbCA9IHRoaXMucmVuZGVyZXIuZ2w7XG5cbiAgICBpZiAoc3RlbmNpbE1hc2tTdGFjay5zdGVuY2lsU3RhY2subGVuZ3RoID09PSAwKVxuICAgIHtcbiAgICAgICAgZ2wuZGlzYWJsZShnbC5TVEVOQ0lMX1RFU1QpO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICBnbC5lbmFibGUoZ2wuU1RFTkNJTF9URVNUKTtcbiAgICB9XG59O1xuXG4vKipcbiAqIEFwcGxpZXMgdGhlIE1hc2sgYW5kIGFkZHMgaXQgdG8gdGhlIGN1cnJlbnQgZmlsdGVyIHN0YWNrLiBAYWx2aW5cbiAqXG4gKiBAcGFyYW0gZ3JhcGhpY3Mge1BJWEkuR3JhcGhpY3N9XG4gKiBAcGFyYW0gd2ViR0xEYXRhIHthbnlbXX1cbiAqL1xuV2ViR0xNYXNrTWFuYWdlci5wcm90b3R5cGUucHVzaFN0ZW5jaWwgPSBmdW5jdGlvbiAoZ3JhcGhpY3MsIHdlYkdMRGF0YSlcbntcbiAgICB0aGlzLnJlbmRlcmVyLl9hY3RpdmVSZW5kZXJUYXJnZXQuYXR0YWNoU3RlbmNpbEJ1ZmZlcigpO1xuXG4gICAgdmFyIGdsID0gdGhpcy5yZW5kZXJlci5nbCxcbiAgICAgICAgc21zID0gdGhpcy5zdGVuY2lsTWFza1N0YWNrO1xuXG4gICAgdGhpcy5iaW5kR3JhcGhpY3MoZ3JhcGhpY3MsIHdlYkdMRGF0YSk7XG5cbiAgICBpZiAoc21zLnN0ZW5jaWxTdGFjay5sZW5ndGggPT09IDApXG4gICAge1xuICAgICAgICBnbC5lbmFibGUoZ2wuU1RFTkNJTF9URVNUKTtcbiAgICAgICAgZ2wuY2xlYXIoZ2wuU1RFTkNJTF9CVUZGRVJfQklUKTtcbiAgICAgICAgc21zLnJldmVyc2UgPSB0cnVlO1xuICAgICAgICBzbXMuY291bnQgPSAwO1xuICAgIH1cblxuICAgIHNtcy5zdGVuY2lsU3RhY2sucHVzaCh3ZWJHTERhdGEpO1xuXG4gICAgdmFyIGxldmVsID0gc21zLmNvdW50O1xuXG4gICAgZ2wuY29sb3JNYXNrKGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlKTtcblxuICAgIGdsLnN0ZW5jaWxGdW5jKGdsLkFMV0FZUywwLDB4RkYpO1xuICAgIGdsLnN0ZW5jaWxPcChnbC5LRUVQLGdsLktFRVAsZ2wuSU5WRVJUKTtcblxuICAgIC8vIGRyYXcgdGhlIHRyaWFuZ2xlIHN0cmlwIVxuXG4gICAgaWYgKHdlYkdMRGF0YS5tb2RlID09PSAxKVxuICAgIHtcbiAgICAgICAgZ2wuZHJhd0VsZW1lbnRzKGdsLlRSSUFOR0xFX0ZBTiwgIHdlYkdMRGF0YS5pbmRpY2VzLmxlbmd0aCAtIDQsIGdsLlVOU0lHTkVEX1NIT1JULCAwICk7XG5cbiAgICAgICAgaWYgKHNtcy5yZXZlcnNlKVxuICAgICAgICB7XG4gICAgICAgICAgICBnbC5zdGVuY2lsRnVuYyhnbC5FUVVBTCwgMHhGRiAtIGxldmVsLCAweEZGKTtcbiAgICAgICAgICAgIGdsLnN0ZW5jaWxPcChnbC5LRUVQLGdsLktFRVAsZ2wuREVDUik7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgICBnbC5zdGVuY2lsRnVuYyhnbC5FUVVBTCxsZXZlbCwgMHhGRik7XG4gICAgICAgICAgICBnbC5zdGVuY2lsT3AoZ2wuS0VFUCxnbC5LRUVQLGdsLklOQ1IpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gZHJhdyBhIHF1YWQgdG8gaW5jcmVtZW50Li5cbiAgICAgICAgZ2wuZHJhd0VsZW1lbnRzKGdsLlRSSUFOR0xFX0ZBTiwgNCwgZ2wuVU5TSUdORURfU0hPUlQsICggd2ViR0xEYXRhLmluZGljZXMubGVuZ3RoIC0gNCApICogMiApO1xuXG4gICAgICAgIGlmIChzbXMucmV2ZXJzZSlcbiAgICAgICAge1xuICAgICAgICAgICAgZ2wuc3RlbmNpbEZ1bmMoZ2wuRVFVQUwsMHhGRi0obGV2ZWwrMSksIDB4RkYpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2VcbiAgICAgICAge1xuICAgICAgICAgICAgZ2wuc3RlbmNpbEZ1bmMoZ2wuRVFVQUwsbGV2ZWwrMSwgMHhGRik7XG4gICAgICAgIH1cblxuICAgICAgICBzbXMucmV2ZXJzZSA9ICFzbXMucmV2ZXJzZTtcbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgaWYgKCFzbXMucmV2ZXJzZSlcbiAgICAgICAge1xuICAgICAgICAgICAgZ2wuc3RlbmNpbEZ1bmMoZ2wuRVFVQUwsIDB4RkYgLSBsZXZlbCwgMHhGRik7XG4gICAgICAgICAgICBnbC5zdGVuY2lsT3AoZ2wuS0VFUCxnbC5LRUVQLGdsLkRFQ1IpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2VcbiAgICAgICAge1xuICAgICAgICAgICAgZ2wuc3RlbmNpbEZ1bmMoZ2wuRVFVQUwsbGV2ZWwsIDB4RkYpO1xuICAgICAgICAgICAgZ2wuc3RlbmNpbE9wKGdsLktFRVAsZ2wuS0VFUCxnbC5JTkNSKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGdsLmRyYXdFbGVtZW50cyhnbC5UUklBTkdMRV9TVFJJUCwgIHdlYkdMRGF0YS5pbmRpY2VzLmxlbmd0aCwgZ2wuVU5TSUdORURfU0hPUlQsIDAgKTtcblxuICAgICAgICBpZiAoIXNtcy5yZXZlcnNlKVxuICAgICAgICB7XG4gICAgICAgICAgICBnbC5zdGVuY2lsRnVuYyhnbC5FUVVBTCwweEZGLShsZXZlbCsxKSwgMHhGRik7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgICBnbC5zdGVuY2lsRnVuYyhnbC5FUVVBTCxsZXZlbCsxLCAweEZGKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGdsLmNvbG9yTWFzayh0cnVlLCB0cnVlLCB0cnVlLCB0cnVlKTtcbiAgICBnbC5zdGVuY2lsT3AoZ2wuS0VFUCxnbC5LRUVQLGdsLktFRVApO1xuXG4gICAgc21zLmNvdW50Kys7XG59O1xuXG4vKipcbiAqIFRPRE8gdGhpcyBkb2VzIG5vdCBiZWxvbmcgaGVyZSFcbiAqXG4gKiBAcGFyYW0gZ3JhcGhpY3Mge1BJWEkuR3JhcGhpY3N9XG4gKiBAcGFyYW0gd2ViR0xEYXRhIHthbnlbXX1cbiAqL1xuV2ViR0xNYXNrTWFuYWdlci5wcm90b3R5cGUuYmluZEdyYXBoaWNzID0gZnVuY3Rpb24gKGdyYXBoaWNzLCB3ZWJHTERhdGEpXG57XG4gICAgLy9pZiAodGhpcy5fY3VycmVudEdyYXBoaWNzID09PSBncmFwaGljcylyZXR1cm47XG4gICAgdmFyIGdsID0gdGhpcy5yZW5kZXJlci5nbDtcblxuICAgICAvLyBiaW5kIHRoZSBncmFwaGljcyBvYmplY3QuLlxuICAgIHZhciBzaGFkZXIgPSB0aGlzLnJlbmRlcmVyLnBsdWdpbnMuZ3JhcGhpY3MucHJpbWl0aXZlU2hhZGVyO1xuXG4gICAgaWYgKHdlYkdMRGF0YS5tb2RlID09PSAxKVxuICAgIHtcbiAgICAgICAgLypcbiAgICAgICAgc2hhZGVyID0gdGhpcy5yZW5kZXJlci5zaGFkZXJNYW5hZ2VyLmNvbXBsZXhQcmltaXRpdmVTaGFkZXI7XG5cbiAgICAgICAgdGhpcy5yZW5kZXJlci5zaGFkZXJNYW5hZ2VyLnNldFNoYWRlcihzaGFkZXIpO1xuXG4gICAgICAgIGdsLnVuaWZvcm1NYXRyaXgzZnYoc2hhZGVyLnVuaWZvcm1zLnRyYW5zbGF0aW9uTWF0cml4Ll9sb2NhdGlvbiwgZmFsc2UsIGdyYXBoaWNzLndvcmxkVHJhbnNmb3JtLnRvQXJyYXkodHJ1ZSkpO1xuXG4gICAgICAgIGdsLnVuaWZvcm1NYXRyaXgzZnYoc2hhZGVyLnVuaWZvcm1zLnByb2plY3Rpb25NYXRyaXguX2xvY2F0aW9uLCBmYWxzZSwgdGhpcy5yZW5kZXJlci5jdXJyZW50UmVuZGVyVGFyZ2V0LnByb2plY3Rpb25NYXRyaXgudG9BcnJheSh0cnVlKSk7XG5cbiAgICAgICAgZ2wudW5pZm9ybTNmdihzaGFkZXIudW5pZm9ybXMudGludC5fbG9jYXRpb24sIHV0aWxzLmhleDJyZ2IoZ3JhcGhpY3MudGludCkpO1xuXG4gICAgICAgIGdsLnVuaWZvcm0zZnYoc2hhZGVyLnVuaWZvcm1zLmNvbG9yLl9sb2NhdGlvbiwgd2ViR0xEYXRhLmNvbG9yKTtcblxuICAgICAgICBnbC51bmlmb3JtMWYoc2hhZGVyLnVuaWZvcm1zLmFscGhhLl9sb2NhdGlvbiwgZ3JhcGhpY3Mud29ybGRBbHBoYSk7XG5cbiAgICAgICAgZ2wuYmluZEJ1ZmZlcihnbC5BUlJBWV9CVUZGRVIsIHdlYkdMRGF0YS5idWZmZXIpO1xuXG4gICAgICAgIGdsLnZlcnRleEF0dHJpYlBvaW50ZXIoc2hhZGVyLmF0dHJpYnV0ZXMuYVZlcnRleFBvc2l0aW9uLCAyLCBnbC5GTE9BVCwgZmFsc2UsIDQgKiAyLCAwKTtcblxuICAgICAgICAvLyBub3cgZG8gdGhlIHJlc3QuLlxuICAgICAgICAvLyBzZXQgdGhlIGluZGV4IGJ1ZmZlciFcbiAgICAgICAgZ2wuYmluZEJ1ZmZlcihnbC5FTEVNRU5UX0FSUkFZX0JVRkZFUiwgd2ViR0xEYXRhLmluZGV4QnVmZmVyKTtcbiAgICAqL1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICAvL3RoaXMucmVuZGVyZXIuc2hhZGVyTWFuYWdlci5hY3RpdmF0ZVByaW1pdGl2ZVNoYWRlcigpO1xuLy8gICAgICAgIHNoYWRlciA9IHRoaXMucmVuZGVyZXIuc2hhZGVyTWFuYWdlci5wcmltaXRpdmVTaGFkZXI7XG4gICAgICAgXG4gICAgICAgIHRoaXMucmVuZGVyZXIuYmluZFNoYWRlcihzaGFkZXIpXG5cbiAgICAgICAgc2hhZGVyLnVuaWZvcm1zLnRyYW5zbGF0aW9uTWF0cml4ID0gZ3JhcGhpY3Mud29ybGRUcmFuc2Zvcm0udG9BcnJheSh0cnVlKTtcbiAgICAgICAgc2hhZGVyLnVuaWZvcm1zLnRpbnQgPSB1dGlscy5oZXgycmdiKGdyYXBoaWNzLnRpbnQpO1xuICAgICAgICBzaGFkZXIudW5pZm9ybXMuYWxwaGEgPSBncmFwaGljcy53b3JsZEFscGhhO1xuXG5cbiAgICAgICAgZ2wuYmluZEJ1ZmZlcihnbC5BUlJBWV9CVUZGRVIsIHdlYkdMRGF0YS5idWZmZXIpO1xuXG5cbiAgICAgICAgc2hhZGVyLmF0dHJpYnV0ZXMuYVZlcnRleFBvc2l0aW9uLnBvaW50ZXIoZ2wuRkxPQVQsIGZhbHNlLCA0ICogNiwgMCk7XG4gICAgICAgIHNoYWRlci5hdHRyaWJ1dGVzLmFDb2xvci5wb2ludGVyKGdsLkZMT0FULCBmYWxzZSwgNCAqIDYsIDIgKiA0KTtcblxuICAgICAgICBnbC5lbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShzaGFkZXIuYXR0cmlidXRlcy5hVmVydGV4UG9zaXRpb24ubG9jYXRpb24pO1xuICAgICAgICBnbC5lbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShzaGFkZXIuYXR0cmlidXRlcy5hQ29sb3IubG9jYXRpb24pO1xuXG4gICAgICAgIC8vIHNldCB0aGUgaW5kZXggYnVmZmVyIVxuICAgICAgICBnbC5iaW5kQnVmZmVyKGdsLkVMRU1FTlRfQVJSQVlfQlVGRkVSLCB3ZWJHTERhdGEuaW5kZXhCdWZmZXIpO1xuLy8gICAgICAgIGdsLmRyYXdFbGVtZW50cyhnbC5UUklBTkdMRV9TVFJJUCwgIHdlYkdMRGF0YS5pbmRpY2VzLmxlbmd0aCwgZ2wuVU5TSUdORURfU0hPUlQsIDAgKTtcblxuXG4gICAgICAvKiAgdGhpcy5yZW5kZXJlci5zaGFkZXJNYW5hZ2VyLnNldFNoYWRlcihzaGFkZXIpO1xuXG4gICAgICAgIGdsLnVuaWZvcm1NYXRyaXgzZnYoc2hhZGVyLnVuaWZvcm1zLnRyYW5zbGF0aW9uTWF0cml4Ll9sb2NhdGlvbiwgZmFsc2UsIGdyYXBoaWNzLndvcmxkVHJhbnNmb3JtLnRvQXJyYXkodHJ1ZSkpO1xuXG4gICAgICAgIGdsLnVuaWZvcm1NYXRyaXgzZnYoc2hhZGVyLnVuaWZvcm1zLnByb2plY3Rpb25NYXRyaXguX2xvY2F0aW9uLCBmYWxzZSwgdGhpcy5yZW5kZXJlci5jdXJyZW50UmVuZGVyVGFyZ2V0LnByb2plY3Rpb25NYXRyaXgudG9BcnJheSh0cnVlKSk7XG5cbiAgICAgICAgZ2wudW5pZm9ybTNmdihzaGFkZXIudW5pZm9ybXMudGludC5fbG9jYXRpb24sIHV0aWxzLmhleDJyZ2IoZ3JhcGhpY3MudGludCkpO1xuXG4gICAgICAgIGdsLnVuaWZvcm0xZihzaGFkZXIudW5pZm9ybXMuYWxwaGEuX2xvY2F0aW9uLCBncmFwaGljcy53b3JsZEFscGhhKTtcblxuICAgICAgICBnbC5iaW5kQnVmZmVyKGdsLkFSUkFZX0JVRkZFUiwgd2ViR0xEYXRhLmJ1ZmZlcik7XG5cbiAgICAgICAgZ2wudmVydGV4QXR0cmliUG9pbnRlcihzaGFkZXIuYXR0cmlidXRlcy5hVmVydGV4UG9zaXRpb24sIDIsIGdsLkZMT0FULCBmYWxzZSwgNCAqIDYsIDApO1xuICAgICAgICBnbC52ZXJ0ZXhBdHRyaWJQb2ludGVyKHNoYWRlci5hdHRyaWJ1dGVzLmFDb2xvciwgNCwgZ2wuRkxPQVQsIGZhbHNlLDQgKiA2LCAyICogNCk7XG5cbiAgICAgICAgLy8gc2V0IHRoZSBpbmRleCBidWZmZXIhXG4gICAgICAgIGdsLmJpbmRCdWZmZXIoZ2wuRUxFTUVOVF9BUlJBWV9CVUZGRVIsIHdlYkdMRGF0YS5pbmRleEJ1ZmZlcik7Ki9cbiAgICB9XG59O1xuXG4vKipcbiAqIFRPRE8gQGFsdmluXG4gKiBAcGFyYW0gZ3JhcGhpY3Mge1BJWEkuR3JhcGhpY3N9XG4gKiBAcGFyYW0gd2ViR0xEYXRhIHthbnlbXX1cbiAqL1xuV2ViR0xNYXNrTWFuYWdlci5wcm90b3R5cGUucG9wU3RlbmNpbCA9IGZ1bmN0aW9uIChncmFwaGljcywgd2ViR0xEYXRhKVxue1xuICAgIHZhciBnbCA9IHRoaXMucmVuZGVyZXIuZ2wsXG4gICAgICAgIHNtcyA9IHRoaXMuc3RlbmNpbE1hc2tTdGFjaztcblxuICAgIHNtcy5zdGVuY2lsU3RhY2sucG9wKCk7XG5cbiAgICBzbXMuY291bnQtLTtcblxuICAgIGlmIChzbXMuc3RlbmNpbFN0YWNrLmxlbmd0aCA9PT0gMClcbiAgICB7XG4gICAgICAgIC8vIHRoZSBzdGFjayBpcyBlbXB0eSFcbiAgICAgICAgZ2wuZGlzYWJsZShnbC5TVEVOQ0lMX1RFU1QpO1xuXG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG5cbiAgICAgICAgdmFyIGxldmVsID0gc21zLmNvdW50O1xuXG4gICAgICAgIHRoaXMuYmluZEdyYXBoaWNzKGdyYXBoaWNzLCB3ZWJHTERhdGEpO1xuXG4gICAgICAgIGdsLmNvbG9yTWFzayhmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSk7XG5cbiAgICAgICAgaWYgKHdlYkdMRGF0YS5tb2RlID09PSAxKVxuICAgICAgICB7XG4gICAgICAgICAgICBzbXMucmV2ZXJzZSA9ICFzbXMucmV2ZXJzZTtcblxuICAgICAgICAgICAgaWYgKHNtcy5yZXZlcnNlKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGdsLnN0ZW5jaWxGdW5jKGdsLkVRVUFMLCAweEZGIC0gKGxldmVsKzEpLCAweEZGKTtcbiAgICAgICAgICAgICAgICBnbC5zdGVuY2lsT3AoZ2wuS0VFUCxnbC5LRUVQLGdsLklOQ1IpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGdsLnN0ZW5jaWxGdW5jKGdsLkVRVUFMLGxldmVsKzEsIDB4RkYpO1xuICAgICAgICAgICAgICAgIGdsLnN0ZW5jaWxPcChnbC5LRUVQLGdsLktFRVAsZ2wuREVDUik7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIGRyYXcgYSBxdWFkIHRvIGluY3JlbWVudC4uXG4gICAgICAgICAgICBnbC5kcmF3RWxlbWVudHMoZ2wuVFJJQU5HTEVfRkFOLCA0LCBnbC5VTlNJR05FRF9TSE9SVCwgKCB3ZWJHTERhdGEuaW5kaWNlcy5sZW5ndGggLSA0ICkgKiAyICk7XG5cbiAgICAgICAgICAgIGdsLnN0ZW5jaWxGdW5jKGdsLkFMV0FZUywwLDB4RkYpO1xuICAgICAgICAgICAgZ2wuc3RlbmNpbE9wKGdsLktFRVAsZ2wuS0VFUCxnbC5JTlZFUlQpO1xuXG4gICAgICAgICAgICAvLyBkcmF3IHRoZSB0cmlhbmdsZSBzdHJpcCFcbiAgICAgICAgICAgIGdsLmRyYXdFbGVtZW50cyhnbC5UUklBTkdMRV9GQU4sICB3ZWJHTERhdGEuaW5kaWNlcy5sZW5ndGggLSA0LCBnbC5VTlNJR05FRF9TSE9SVCwgMCApO1xuXG4gICAgICAgICAgICB0aGlzLnJlbmRlcmVyLmRyYXdDb3VudCArPSAyO1xuXG4gICAgICAgICAgICBpZiAoIXNtcy5yZXZlcnNlKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGdsLnN0ZW5jaWxGdW5jKGdsLkVRVUFMLDB4RkYtKGxldmVsKSwgMHhGRik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgZ2wuc3RlbmNpbEZ1bmMoZ2wuRVFVQUwsbGV2ZWwsIDB4RkYpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgLy8gIGNvbnNvbGUubG9nKFwiPDw+PlwiKVxuICAgICAgICAgICAgaWYgKCFzbXMucmV2ZXJzZSlcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBnbC5zdGVuY2lsRnVuYyhnbC5FUVVBTCwgMHhGRiAtIChsZXZlbCsxKSwgMHhGRik7XG4gICAgICAgICAgICAgICAgZ2wuc3RlbmNpbE9wKGdsLktFRVAsZ2wuS0VFUCxnbC5JTkNSKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBnbC5zdGVuY2lsRnVuYyhnbC5FUVVBTCxsZXZlbCsxLCAweEZGKTtcbiAgICAgICAgICAgICAgICBnbC5zdGVuY2lsT3AoZ2wuS0VFUCxnbC5LRUVQLGdsLkRFQ1IpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBnbC5kcmF3RWxlbWVudHMoZ2wuVFJJQU5HTEVfU1RSSVAsICB3ZWJHTERhdGEuaW5kaWNlcy5sZW5ndGgsIGdsLlVOU0lHTkVEX1NIT1JULCAwICk7XG5cbiAgICAgICAgICAgIHRoaXMucmVuZGVyZXIuZHJhd0NvdW50Kys7XG5cbiAgICAgICAgICAgIGlmICghc21zLnJldmVyc2UpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgZ2wuc3RlbmNpbEZ1bmMoZ2wuRVFVQUwsMHhGRi0obGV2ZWwpLCAweEZGKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBnbC5zdGVuY2lsRnVuYyhnbC5FUVVBTCxsZXZlbCwgMHhGRik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBnbC5jb2xvck1hc2sodHJ1ZSwgdHJ1ZSwgdHJ1ZSwgdHJ1ZSk7XG4gICAgICAgIGdsLnN0ZW5jaWxPcChnbC5LRUVQLGdsLktFRVAsZ2wuS0VFUCk7XG5cblxuICAgIH1cbn07XG5cbi8qKlxuICogRGVzdHJveXMgdGhlIG1hc2sgc3RhY2suXG4gKlxuICovXG5XZWJHTE1hc2tNYW5hZ2VyLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKClcbntcbiAgICBXZWJHTE1hbmFnZXIucHJvdG90eXBlLmRlc3Ryb3kuY2FsbCh0aGlzKTtcblxuICAgIHRoaXMuc3RlbmNpbE1hc2tTdGFjay5zdGVuY2lsU3RhY2sgPSBudWxsO1xufTtcblxuLyoqXG4gKiBBcHBsaWVzIHRoZSBNYXNrIGFuZCBhZGRzIGl0IHRvIHRoZSBjdXJyZW50IGZpbHRlciBzdGFjay5cbiAqXG4gKiBAcGFyYW0gbWFza0RhdGEge2FueVtdfSBUaGUgbWFzayBkYXRhIHN0cnVjdHVyZSB0byB1c2VcbiAqL1xuV2ViR0xNYXNrTWFuYWdlci5wcm90b3R5cGUucHVzaE1hc2sgPSBmdW5jdGlvbiAobWFza0RhdGEpXG57XG4gICAgdGhpcy5yZW5kZXJlci5zZXRPYmplY3RSZW5kZXJlcih0aGlzLnJlbmRlcmVyLnBsdWdpbnMuZ3JhcGhpY3MpO1xuICAgIFxuICAgIC8vVE9ETyBGSVhcbiAgICBpZiAobWFza0RhdGEuZGlydHkpXG4gICAge1xuICAgICAgICB0aGlzLnJlbmRlcmVyLnBsdWdpbnMuZ3JhcGhpY3MudXBkYXRlR3JhcGhpY3MobWFza0RhdGEsIHRoaXMucmVuZGVyZXIuZ2wpO1xuICAgIH1cblxuICAgIGlmICghbWFza0RhdGEuX3dlYkdMW3RoaXMucmVuZGVyZXIuZ2wuaWRdLmRhdGEubGVuZ3RoKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMucHVzaFN0ZW5jaWwobWFza0RhdGEsIG1hc2tEYXRhLl93ZWJHTFt0aGlzLnJlbmRlcmVyLmdsLmlkXS5kYXRhWzBdKTtcbn07XG5cbi8qKlxuICogUmVtb3ZlcyB0aGUgbGFzdCBmaWx0ZXIgZnJvbSB0aGUgZmlsdGVyIHN0YWNrIGFuZCBkb2Vzbid0IHJldHVybiBpdC5cbiAqXG4gKiBAcGFyYW0gbWFza0RhdGEge2FueVtdfVxuICovXG5XZWJHTE1hc2tNYW5hZ2VyLnByb3RvdHlwZS5wb3BNYXNrID0gZnVuY3Rpb24gKG1hc2tEYXRhKVxue1xuICAgIHRoaXMucmVuZGVyZXIuc2V0T2JqZWN0UmVuZGVyZXIodGhpcy5yZW5kZXJlci5wbHVnaW5zLmdyYXBoaWNzKTtcblxuICAgIHRoaXMucG9wU3RlbmNpbChtYXNrRGF0YSwgbWFza0RhdGEuX3dlYkdMW3RoaXMucmVuZGVyZXIuZ2wuaWRdLmRhdGFbMF0pO1xufTtcblxuIiwiLyoqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcn0gVGhlIHJlbmRlcmVyIHRoaXMgbWFuYWdlciB3b3JrcyBmb3IuXG4gKi9cbmZ1bmN0aW9uIFdlYkdMTWFuYWdlcihyZW5kZXJlcilcbntcbiAgICAvKipcbiAgICAgKiBUaGUgcmVuZGVyZXIgdGhpcyBtYW5hZ2VyIHdvcmtzIGZvci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuV2ViR0xSZW5kZXJlcn1cbiAgICAgKi9cbiAgICB0aGlzLnJlbmRlcmVyID0gcmVuZGVyZXI7XG5cbiAgICB0aGlzLnJlbmRlcmVyLm9uKCdjb250ZXh0JywgdGhpcy5vbkNvbnRleHRDaGFuZ2UsIHRoaXMpO1xufVxuXG5XZWJHTE1hbmFnZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gV2ViR0xNYW5hZ2VyO1xubW9kdWxlLmV4cG9ydHMgPSBXZWJHTE1hbmFnZXI7XG5cbi8qKlxuICogR2VuZXJpYyBtZXRob2QgY2FsbGVkIHdoZW4gdGhlcmUgaXMgYSBXZWJHTCBjb250ZXh0IGNoYW5nZS5cbiAqXG4gKi9cbldlYkdMTWFuYWdlci5wcm90b3R5cGUub25Db250ZXh0Q2hhbmdlID0gZnVuY3Rpb24gKClcbntcblx0Ly8gZG8gc29tZSBjb2RlcyBpbml0IVxufTtcblxuLyoqXG4gKiBHZW5lcmljIGRlc3Ryb3kgbWV0aG9kcyB0byBiZSBvdmVycmlkZGVuIGJ5IHRoZSBzdWJjbGFzc1xuICpcbiAqL1xuV2ViR0xNYW5hZ2VyLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLnJlbmRlcmVyLm9mZignY29udGV4dCcsIHRoaXMub25Db250ZXh0Q2hhbmdlLCB0aGlzKTtcblxuICAgIHRoaXMucmVuZGVyZXIgPSBudWxsO1xufTtcbiIsInZhciBTaGFkZXIgPSByZXF1aXJlKCcuL1NoYWRlcicpO1xuXG4vKipcbiAqIFRoaXMgc2hhZGVyIGlzIHVzZWQgdG8gZHJhdyBjb21wbGV4IHByaW1pdGl2ZSBzaGFwZXMgZm9yIHtAbGluayBQSVhJLkdyYXBoaWNzfS5cbiAqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAZXh0ZW5kcyBQSVhJLlNoYWRlclxuICogQHBhcmFtIHNoYWRlck1hbmFnZXIge1BJWEkuU2hhZGVyTWFuYWdlcn0gVGhlIHdlYmdsIHNoYWRlciBtYW5hZ2VyIHRoaXMgc2hhZGVyIHdvcmtzIGZvci5cbiAqL1xuZnVuY3Rpb24gQ29tcGxleFByaW1pdGl2ZVNoYWRlcihzaGFkZXJNYW5hZ2VyKVxue1xuICAgIFNoYWRlci5jYWxsKHRoaXMsXG4gICAgICAgIHNoYWRlck1hbmFnZXIsXG4gICAgICAgIC8vIHZlcnRleCBzaGFkZXJcbiAgICAgICAgW1xuICAgICAgICAgICAgJ2F0dHJpYnV0ZSB2ZWMyIGFWZXJ0ZXhQb3NpdGlvbjsnLFxuXG4gICAgICAgICAgICAndW5pZm9ybSBtYXQzIHRyYW5zbGF0aW9uTWF0cml4OycsXG4gICAgICAgICAgICAndW5pZm9ybSBtYXQzIHByb2plY3Rpb25NYXRyaXg7JyxcblxuICAgICAgICAgICAgJ3VuaWZvcm0gdmVjMyB0aW50OycsXG4gICAgICAgICAgICAndW5pZm9ybSBmbG9hdCBhbHBoYTsnLFxuICAgICAgICAgICAgJ3VuaWZvcm0gdmVjMyBjb2xvcjsnLFxuXG4gICAgICAgICAgICAndmFyeWluZyB2ZWM0IHZDb2xvcjsnLFxuXG4gICAgICAgICAgICAndm9pZCBtYWluKHZvaWQpeycsXG4gICAgICAgICAgICAnICAgZ2xfUG9zaXRpb24gPSB2ZWM0KChwcm9qZWN0aW9uTWF0cml4ICogdHJhbnNsYXRpb25NYXRyaXggKiB2ZWMzKGFWZXJ0ZXhQb3NpdGlvbiwgMS4wKSkueHksIDAuMCwgMS4wKTsnLFxuICAgICAgICAgICAgJyAgIHZDb2xvciA9IHZlYzQoY29sb3IgKiBhbHBoYSAqIHRpbnQsIGFscGhhKTsnLC8vXCIgKiB2ZWM0KHRpbnQgKiBhbHBoYSwgYWxwaGEpOycsXG4gICAgICAgICAgICAnfSdcbiAgICAgICAgXS5qb2luKCdcXG4nKSxcbiAgICAgICAgLy8gZnJhZ21lbnQgc2hhZGVyXG4gICAgICAgIFtcbiAgICAgICAgICAgICdwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDsnLFxuXG4gICAgICAgICAgICAndmFyeWluZyB2ZWM0IHZDb2xvcjsnLFxuXG4gICAgICAgICAgICAndm9pZCBtYWluKHZvaWQpeycsXG4gICAgICAgICAgICAnICAgZ2xfRnJhZ0NvbG9yID0gdkNvbG9yOycsXG4gICAgICAgICAgICAnfSdcbiAgICAgICAgXS5qb2luKCdcXG4nKSxcbiAgICAgICAgLy8gY3VzdG9tIHVuaWZvcm1zXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRpbnQ6ICAgeyB0eXBlOiAnM2YnLCB2YWx1ZTogWzAsIDAsIDBdIH0sXG4gICAgICAgICAgICBhbHBoYTogIHsgdHlwZTogJzFmJywgdmFsdWU6IDAgfSxcbiAgICAgICAgICAgIGNvbG9yOiAgeyB0eXBlOiAnM2YnLCB2YWx1ZTogWzAsMCwwXSB9LFxuICAgICAgICAgICAgdHJhbnNsYXRpb25NYXRyaXg6IHsgdHlwZTogJ21hdDMnLCB2YWx1ZTogbmV3IEZsb2F0MzJBcnJheSg5KSB9LFxuICAgICAgICAgICAgcHJvamVjdGlvbk1hdHJpeDogeyB0eXBlOiAnbWF0MycsIHZhbHVlOiBuZXcgRmxvYXQzMkFycmF5KDkpIH1cbiAgICAgICAgfSxcbiAgICAgICAgLy8gYXR0cmlidXRlc1xuICAgICAgICB7XG4gICAgICAgICAgICBhVmVydGV4UG9zaXRpb246MFxuICAgICAgICB9XG4gICAgKTtcbn1cblxuQ29tcGxleFByaW1pdGl2ZVNoYWRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFNoYWRlci5wcm90b3R5cGUpO1xuQ29tcGxleFByaW1pdGl2ZVNoYWRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBDb21wbGV4UHJpbWl0aXZlU2hhZGVyO1xubW9kdWxlLmV4cG9ydHMgPSBDb21wbGV4UHJpbWl0aXZlU2hhZGVyO1xuIiwidmFyIFNoYWRlciA9IHJlcXVpcmUoJy4vU2hhZGVyJyk7XG5cbi8qKlxuICogVGhpcyBzaGFkZXIgaXMgdXNlZCB0byBkcmF3IHNpbXBsZSBwcmltaXRpdmUgc2hhcGVzIGZvciB7QGxpbmsgUElYSS5HcmFwaGljc30uXG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQGV4dGVuZHMgUElYSS5TaGFkZXJcbiAqIEBwYXJhbSBzaGFkZXJNYW5hZ2VyIHtTaGFkZXJNYW5hZ2VyfSBUaGUgd2ViZ2wgc2hhZGVyIG1hbmFnZXIgdGhpcyBzaGFkZXIgd29ya3MgZm9yLlxuICovXG5mdW5jdGlvbiBQcmltaXRpdmVTaGFkZXIoc2hhZGVyTWFuYWdlcilcbntcbiAgICBTaGFkZXIuY2FsbCh0aGlzLFxuICAgICAgICBzaGFkZXJNYW5hZ2VyLFxuICAgICAgICAvLyB2ZXJ0ZXggc2hhZGVyXG4gICAgICAgIFtcbiAgICAgICAgICAgICdhdHRyaWJ1dGUgdmVjMiBhVmVydGV4UG9zaXRpb247JyxcbiAgICAgICAgICAgICdhdHRyaWJ1dGUgdmVjNCBhQ29sb3I7JyxcblxuICAgICAgICAgICAgJ3VuaWZvcm0gbWF0MyB0cmFuc2xhdGlvbk1hdHJpeDsnLFxuICAgICAgICAgICAgJ3VuaWZvcm0gbWF0MyBwcm9qZWN0aW9uTWF0cml4OycsXG5cbiAgICAgICAgICAgICd1bmlmb3JtIGZsb2F0IGFscGhhOycsXG4gICAgICAgICAgICAndW5pZm9ybSBmbG9hdCBmbGlwWTsnLFxuICAgICAgICAgICAgJ3VuaWZvcm0gdmVjMyB0aW50OycsXG5cbiAgICAgICAgICAgICd2YXJ5aW5nIHZlYzQgdkNvbG9yOycsXG5cbiAgICAgICAgICAgICd2b2lkIG1haW4odm9pZCl7JyxcbiAgICAgICAgICAgICcgICBnbF9Qb3NpdGlvbiA9IHZlYzQoKHByb2plY3Rpb25NYXRyaXggKiB0cmFuc2xhdGlvbk1hdHJpeCAqIHZlYzMoYVZlcnRleFBvc2l0aW9uLCAxLjApKS54eSwgMC4wLCAxLjApOycsXG4gICAgICAgICAgICAnICAgdkNvbG9yID0gYUNvbG9yICogdmVjNCh0aW50ICogYWxwaGEsIGFscGhhKTsnLFxuICAgICAgICAgICAgJ30nXG4gICAgICAgIF0uam9pbignXFxuJyksXG4gICAgICAgIC8vIGZyYWdtZW50IHNoYWRlclxuICAgICAgICBbXG4gICAgICAgICAgICAncHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7JyxcblxuICAgICAgICAgICAgJ3ZhcnlpbmcgdmVjNCB2Q29sb3I7JyxcblxuICAgICAgICAgICAgJ3ZvaWQgbWFpbih2b2lkKXsnLFxuICAgICAgICAgICAgJyAgIGdsX0ZyYWdDb2xvciA9IHZDb2xvcjsnLFxuICAgICAgICAgICAgJ30nXG4gICAgICAgIF0uam9pbignXFxuJyksXG4gICAgICAgIC8vIGN1c3RvbSB1bmlmb3Jtc1xuICAgICAgICB7XG4gICAgICAgICAgICB0aW50OiAgIHsgdHlwZTogJzNmJywgdmFsdWU6IFswLCAwLCAwXSB9LFxuICAgICAgICAgICAgYWxwaGE6ICB7IHR5cGU6ICcxZicsIHZhbHVlOiAwIH0sXG4gICAgICAgICAgICB0cmFuc2xhdGlvbk1hdHJpeDogeyB0eXBlOiAnbWF0MycsIHZhbHVlOiBuZXcgRmxvYXQzMkFycmF5KDkpIH0sXG4gICAgICAgICAgICBwcm9qZWN0aW9uTWF0cml4OiB7IHR5cGU6ICdtYXQzJywgdmFsdWU6IG5ldyBGbG9hdDMyQXJyYXkoOSkgfVxuICAgICAgICB9LFxuICAgICAgICAvLyBjdXN0b20gYXR0cmlidXRlc1xuICAgICAgICB7XG4gICAgICAgICAgICBhVmVydGV4UG9zaXRpb246MCxcbiAgICAgICAgICAgIGFDb2xvcjowXG4gICAgICAgIH1cbiAgICApO1xufVxuXG5QcmltaXRpdmVTaGFkZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShTaGFkZXIucHJvdG90eXBlKTtcblByaW1pdGl2ZVNoYWRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBQcmltaXRpdmVTaGFkZXI7XG5tb2R1bGUuZXhwb3J0cyA9IFByaW1pdGl2ZVNoYWRlcjtcbiIsIi8qZ2xvYmFsIGNvbnNvbGUgKi9cbnZhciB1dGlscyA9IHJlcXVpcmUoJy4uLy4uLy4uL3V0aWxzJyk7XG5cbi8qKlxuICogQmFzZSBzaGFkZXIgY2xhc3MgZm9yIFBJWEkgbWFuYWdlZCBzaGFkZXJzLlxuICpcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqIEBwYXJhbSBzaGFkZXJNYW5hZ2VyIHtQSVhJLlNoYWRlck1hbmFnZXJ9IFRoZSB3ZWJnbCBzaGFkZXIgbWFuYWdlciB0aGlzIHNoYWRlciB3b3JrcyBmb3IuXG4gKiBAcGFyYW0gW3ZlcnRleFNyY10ge3N0cmluZ30gVGhlIHNvdXJjZSBvZiB0aGUgdmVydGV4IHNoYWRlci5cbiAqIEBwYXJhbSBbZnJhZ21lbnRTcmNdIHtzdHJpbmd9IFRoZSBzb3VyY2Ugb2YgdGhlIGZyYWdtZW50IHNoYWRlci5cbiAqIEBwYXJhbSBbdW5pZm9ybXNdIHtvYmplY3R9IFVuaWZvcm1zIGZvciB0aGlzIHNoYWRlci5cbiAqIEBwYXJhbSBbYXR0cmlidXRlc10ge29iamVjdH0gQXR0cmlidXRlcyBmb3IgdGhpcyBzaGFkZXIuXG4gKi9cbmZ1bmN0aW9uIFNoYWRlcihzaGFkZXJNYW5hZ2VyLCB2ZXJ0ZXhTcmMsIGZyYWdtZW50U3JjLCB1bmlmb3JtcywgYXR0cmlidXRlcylcbntcbiAgICBpZiAoIXZlcnRleFNyYyB8fCAhZnJhZ21lbnRTcmMpXG4gICAge1xuICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdQaXhpLmpzIEVycm9yLiBTaGFkZXIgcmVxdWlyZXMgdmVydGV4U3JjIGFuZCBmcmFnbWVudFNyYycpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEEgdW5pcXVlIGlkXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEByZWFkb25seVxuICAgICAqL1xuICAgIHRoaXMudWlkID0gdXRpbHMudWlkKCk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgY3VycmVudCBXZWJHTCBkcmF3aW5nIGNvbnRleHRcbiAgICAgKiBAbWVtYmVyIHtXZWJHTFJlbmRlcmluZ0NvbnRleHR9XG4gICAgICogQHJlYWRvbmx5XG4gICAgICovXG4gICAgdGhpcy5nbCA9IHNoYWRlck1hbmFnZXIucmVuZGVyZXIuZ2w7XG5cbiAgICAvL1RPRE8gbWF5YmUgd2Ugc2hvdWxkIHBhc3MgcmVuZGVyZXIgcmF0aGVyIHRoYW4gc2hhZGVyIG1hbmdlcj8/IGZvb2QgZm9yIHRob3VnaHQuLlxuICAgIHRoaXMuc2hhZGVyTWFuYWdlciA9IHNoYWRlck1hbmFnZXI7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgV2ViR0wgcHJvZ3JhbS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1dlYkdMUHJvZ3JhbX1cbiAgICAgKiBAcmVhZG9ubHlcbiAgICAgKi9cbiAgICB0aGlzLnByb2dyYW0gPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHVuaWZvcm1zIGFzIGFuIG9iamVjdFxuICAgICAqIEBtZW1iZXIge29iamVjdH1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMudW5pZm9ybXMgPSB1bmlmb3JtcyB8fCB7fTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBhdHRyaWJ1dGVzIGFzIGFuIG9iamVjdFxuICAgICAqIEBtZW1iZXIge29iamVjdH1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuYXR0cmlidXRlcyA9IGF0dHJpYnV0ZXMgfHwge307XG5cbiAgICAvKipcbiAgICAgKiBJbnRlcm5hbCB0ZXh0dXJlIGNvdW50ZXJcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLnRleHR1cmVDb3VudCA9IDE7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgdmVydGV4IHNoYWRlciBhcyBhbiBhcnJheSBvZiBzdHJpbmdzXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtzdHJpbmd9XG4gICAgICovXG4gICAgdGhpcy52ZXJ0ZXhTcmMgPSB2ZXJ0ZXhTcmM7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgZnJhZ21lbnQgc2hhZGVyIGFzIGFuIGFycmF5IG9mIHN0cmluZ3NcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge3N0cmluZ31cbiAgICAgKi9cbiAgICB0aGlzLmZyYWdtZW50U3JjID0gZnJhZ21lbnRTcmM7XG5cbiAgICB0aGlzLmluaXQoKTtcbn1cblxuU2hhZGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFNoYWRlcjtcbm1vZHVsZS5leHBvcnRzID0gU2hhZGVyO1xuXG4vKipcbiAqIENyZWF0ZXMgdGhlIHNoYWRlciBhbmQgdXNlcyBpdFxuICpcbiAqL1xuU2hhZGVyLnByb3RvdHlwZS5pbml0ID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLmNvbXBpbGUoKTtcblxuICAgIHRoaXMuZ2wudXNlUHJvZ3JhbSh0aGlzLnByb2dyYW0pO1xuXG4gICAgdGhpcy5jYWNoZVVuaWZvcm1Mb2NhdGlvbnMoT2JqZWN0LmtleXModGhpcy51bmlmb3JtcykpO1xuICAgIHRoaXMuY2FjaGVBdHRyaWJ1dGVMb2NhdGlvbnMoT2JqZWN0LmtleXModGhpcy5hdHRyaWJ1dGVzKSk7XG59O1xuXG4vKipcbiAqIENhY2hlcyB0aGUgbG9jYXRpb25zIG9mIHRoZSB1bmlmb3JtIGZvciByZXVzZS5cbiAqXG4gKiBAcGFyYW0ga2V5cyB7c3RyaW5nfSB0aGUgdW5pZm9ybXMgdG8gY2FjaGVcbiAqL1xuU2hhZGVyLnByb3RvdHlwZS5jYWNoZVVuaWZvcm1Mb2NhdGlvbnMgPSBmdW5jdGlvbiAoa2V5cylcbntcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyArK2kpXG4gICAge1xuICAgICAgICB0aGlzLnVuaWZvcm1zW2tleXNbaV1dLl9sb2NhdGlvbiA9IHRoaXMuZ2wuZ2V0VW5pZm9ybUxvY2F0aW9uKHRoaXMucHJvZ3JhbSwga2V5c1tpXSk7XG4gICAgfVxufTtcblxuLyoqXG4gKiBDYWNoZXMgdGhlIGxvY2F0aW9ucyBvZiB0aGUgYXR0cmlidXRlIGZvciByZXVzZS5cbiAqXG4gKiBAcGFyYW0ga2V5cyB7c3RyaW5nfSB0aGUgYXR0cmlidXRlcyB0byBjYWNoZVxuICovXG5TaGFkZXIucHJvdG90eXBlLmNhY2hlQXR0cmlidXRlTG9jYXRpb25zID0gZnVuY3Rpb24gKGtleXMpXG57XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgKytpKVxuICAgIHtcbiAgICAgICAgdGhpcy5hdHRyaWJ1dGVzW2tleXNbaV1dID0gdGhpcy5nbC5nZXRBdHRyaWJMb2NhdGlvbih0aGlzLnByb2dyYW0sIGtleXNbaV0pO1xuICAgIH1cblxuICAgIC8vIFRPRE86IENoZWNrIGlmIHRoaXMgaXMgbmVlZGVkIGFueW1vcmUuLi5cblxuICAgIC8vIEJlZ2luIHdvcnN0IGhhY2sgZXZhIC8vXG5cbiAgICAvLyBXSFk/Pz8gT05MWSBvbiBteSBjaHJvbWUgcGl4ZWwgdGhlIGxpbmUgYWJvdmUgcmV0dXJucyAtMSB3aGVuIHVzaW5nIGZpbHRlcnM/XG4gICAgLy8gbWF5YmUgaXRzIHNvbWV0aGluZyB0byBkbyB3aXRoIHRoZSBjdXJyZW50IHN0YXRlIG9mIHRoZSBnbCBjb250ZXh0LlxuICAgIC8vIEknbSBjb252aW5jZWQgdGhpcyBpcyBhIGJ1ZyBpbiB0aGUgY2hyb21lIGJyb3dzZXIgYXMgdGhlcmUgaXMgTk8gcmVhc29uIHdoeSB0aGlzIHNob3VsZCBiZSByZXR1cm5pbmcgLTEgZXNwZWNpYWxseSBhcyBpdCBvbmx5IG1hbmlmZXN0cyBvbiBteSBjaHJvbWUgcGl4ZWxcbiAgICAvLyBJZiB0aGVyZXMgYW55IHdlYkdMIHBlb3BsZSB0aGF0IGtub3cgd2h5IGNvdWxkIGhhcHBlbiBwbGVhc2UgaGVscCA6KVxuICAgIC8vIGlmICh0aGlzLmF0dHJpYnV0ZXMuYUNvbG9yID09PSAtMSl7XG4gICAgLy8gICAgIHRoaXMuYXR0cmlidXRlcy5hQ29sb3IgPSAyO1xuICAgIC8vIH1cblxuICAgIC8vIEVuZCB3b3JzdCBoYWNrIGV2YSAvL1xufTtcblxuLyoqXG4gKiBBdHRhY2hlcyB0aGUgc2hhZGVycyBhbmQgY3JlYXRlcyB0aGUgcHJvZ3JhbS5cbiAqXG4gKiBAcmV0dXJuIHtXZWJHTFByb2dyYW19XG4gKi9cblNoYWRlci5wcm90b3R5cGUuY29tcGlsZSA9IGZ1bmN0aW9uICgpXG57XG4gICAgdmFyIGdsID0gdGhpcy5nbDtcblxuICAgIHZhciBnbFZlcnRTaGFkZXIgPSB0aGlzLl9nbENvbXBpbGUoZ2wuVkVSVEVYX1NIQURFUiwgdGhpcy52ZXJ0ZXhTcmMpO1xuICAgIHZhciBnbEZyYWdTaGFkZXIgPSB0aGlzLl9nbENvbXBpbGUoZ2wuRlJBR01FTlRfU0hBREVSLCB0aGlzLmZyYWdtZW50U3JjKTtcblxuICAgIHZhciBwcm9ncmFtID0gZ2wuY3JlYXRlUHJvZ3JhbSgpO1xuXG4gICAgZ2wuYXR0YWNoU2hhZGVyKHByb2dyYW0sIGdsVmVydFNoYWRlcik7XG4gICAgZ2wuYXR0YWNoU2hhZGVyKHByb2dyYW0sIGdsRnJhZ1NoYWRlcik7XG4gICAgZ2wubGlua1Byb2dyYW0ocHJvZ3JhbSk7XG5cbiAgICAvLyBpZiBsaW5raW5nIGZhaWxzLCB0aGVuIGxvZyBhbmQgY2xlYW51cFxuICAgIGlmICghZ2wuZ2V0UHJvZ3JhbVBhcmFtZXRlcihwcm9ncmFtLCBnbC5MSU5LX1NUQVRVUykpXG4gICAge1xuICAgICAgICBjb25zb2xlLmVycm9yKCdQaXhpLmpzIEVycm9yOiBDb3VsZCBub3QgaW5pdGlhbGl6ZSBzaGFkZXIuJyk7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ2dsLlZBTElEQVRFX1NUQVRVUycsIGdsLmdldFByb2dyYW1QYXJhbWV0ZXIocHJvZ3JhbSwgZ2wuVkFMSURBVEVfU1RBVFVTKSk7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ2dsLmdldEVycm9yKCknLCBnbC5nZXRFcnJvcigpKTtcblxuICAgICAgICAvLyBpZiB0aGVyZSBpcyBhIHByb2dyYW0gaW5mbyBsb2csIGxvZyBpdFxuICAgICAgICBpZiAoZ2wuZ2V0UHJvZ3JhbUluZm9Mb2cocHJvZ3JhbSkgIT09ICcnKVxuICAgICAgICB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ1BpeGkuanMgV2FybmluZzogZ2wuZ2V0UHJvZ3JhbUluZm9Mb2coKScsIGdsLmdldFByb2dyYW1JbmZvTG9nKHByb2dyYW0pKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGdsLmRlbGV0ZVByb2dyYW0ocHJvZ3JhbSk7XG4gICAgICAgIHByb2dyYW0gPSBudWxsO1xuICAgIH1cblxuICAgIC8vIGNsZWFuIHVwIHNvbWUgc2hhZGVyc1xuICAgIGdsLmRlbGV0ZVNoYWRlcihnbFZlcnRTaGFkZXIpO1xuICAgIGdsLmRlbGV0ZVNoYWRlcihnbEZyYWdTaGFkZXIpO1xuXG4gICAgcmV0dXJuICh0aGlzLnByb2dyYW0gPSBwcm9ncmFtKTtcbn07XG5cbi8qKlxuKiBBZGRzIGEgbmV3IHVuaWZvcm1cbipcbiogQHBhcmFtIHVuaWZvcm0ge29iamVjdH0gdGhlIG5ldyB1bmlmb3JtIHRvIGF0dGFjaFxuKi9cblNoYWRlci5wcm90b3R5cGUuc3luY1VuaWZvcm0gPSBmdW5jdGlvbiAodW5pZm9ybSlcbntcbiAgICB2YXIgbG9jYXRpb24gPSB1bmlmb3JtLl9sb2NhdGlvbixcbiAgICAgICAgdmFsdWUgPSB1bmlmb3JtLnZhbHVlLFxuICAgICAgICBnbCA9IHRoaXMuZ2wsXG4gICAgICAgIGksIGlsO1xuXG4gICAgc3dpdGNoICh1bmlmb3JtLnR5cGUpXG4gICAge1xuICAgICAgICBjYXNlICdiJzpcbiAgICAgICAgY2FzZSAnYm9vbCc6XG4gICAgICAgIGNhc2UgJ2Jvb2xlYW4nOlxuICAgICAgICAgICAgZ2wudW5pZm9ybTFpKGxvY2F0aW9uLCB2YWx1ZSA/IDEgOiAwKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIC8vIHNpbmdsZSBpbnQgdmFsdWVcbiAgICAgICAgY2FzZSAnaSc6XG4gICAgICAgIGNhc2UgJzFpJzpcbiAgICAgICAgICAgIGdsLnVuaWZvcm0xaShsb2NhdGlvbiwgdmFsdWUpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLy8gc2luZ2xlIGZsb2F0IHZhbHVlXG4gICAgICAgIGNhc2UgJ2YnOlxuICAgICAgICBjYXNlICcxZic6XG4gICAgICAgICAgICBnbC51bmlmb3JtMWYobG9jYXRpb24sIHZhbHVlKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIC8vIEZsb2F0MzJBcnJheSgyKSBvciBKUyBBcnJyYXlcbiAgICAgICAgY2FzZSAnMmYnOlxuICAgICAgICAgICAgZ2wudW5pZm9ybTJmKGxvY2F0aW9uLCB2YWx1ZVswXSwgdmFsdWVbMV0pO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLy8gRmxvYXQzMkFycmF5KDMpIG9yIEpTIEFycnJheVxuICAgICAgICBjYXNlICczZic6XG4gICAgICAgICAgICBnbC51bmlmb3JtM2YobG9jYXRpb24sIHZhbHVlWzBdLCB2YWx1ZVsxXSwgdmFsdWVbMl0pO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLy8gRmxvYXQzMkFycmF5KDQpIG9yIEpTIEFycnJheVxuICAgICAgICBjYXNlICc0Zic6XG4gICAgICAgICAgICBnbC51bmlmb3JtNGYobG9jYXRpb24sIHZhbHVlWzBdLCB2YWx1ZVsxXSwgdmFsdWVbMl0sIHZhbHVlWzNdKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIC8vIGEgMkQgUG9pbnQgb2JqZWN0XG4gICAgICAgIGNhc2UgJ3YyJzpcbiAgICAgICAgICAgIGdsLnVuaWZvcm0yZihsb2NhdGlvbiwgdmFsdWUueCwgdmFsdWUueSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAvLyBhIDNEIFBvaW50IG9iamVjdFxuICAgICAgICBjYXNlICd2Myc6XG4gICAgICAgICAgICBnbC51bmlmb3JtM2YobG9jYXRpb24sIHZhbHVlLngsIHZhbHVlLnksIHZhbHVlLnopO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLy8gYSA0RCBQb2ludCBvYmplY3RcbiAgICAgICAgY2FzZSAndjQnOlxuICAgICAgICAgICAgZ2wudW5pZm9ybTRmKGxvY2F0aW9uLCB2YWx1ZS54LCB2YWx1ZS55LCB2YWx1ZS56LCB2YWx1ZS53KTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIC8vIEludDMyQXJyYXkgb3IgSlMgQXJyYXlcbiAgICAgICAgY2FzZSAnMWl2JzpcbiAgICAgICAgICAgIGdsLnVuaWZvcm0xaXYobG9jYXRpb24sIHZhbHVlKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIC8vIEludDMyQXJyYXkgb3IgSlMgQXJyYXlcbiAgICAgICAgY2FzZSAnMml2JzpcbiAgICAgICAgICAgIGdsLnVuaWZvcm0yaXYobG9jYXRpb24sIHZhbHVlKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIC8vIEludDMyQXJyYXkgb3IgSlMgQXJyYXlcbiAgICAgICAgY2FzZSAnM2l2JzpcbiAgICAgICAgICAgIGdsLnVuaWZvcm0zaXYobG9jYXRpb24sIHZhbHVlKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIC8vIEludDMyQXJyYXkgb3IgSlMgQXJyYXlcbiAgICAgICAgY2FzZSAnNGl2JzpcbiAgICAgICAgICAgIGdsLnVuaWZvcm00aXYobG9jYXRpb24sIHZhbHVlKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIC8vIEZsb2F0MzJBcnJheSBvciBKUyBBcnJheVxuICAgICAgICBjYXNlICcxZnYnOlxuICAgICAgICAgICAgZ2wudW5pZm9ybTFmdihsb2NhdGlvbiwgdmFsdWUpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLy8gRmxvYXQzMkFycmF5IG9yIEpTIEFycmF5XG4gICAgICAgIGNhc2UgJzJmdic6XG4gICAgICAgICAgICBnbC51bmlmb3JtMmZ2KGxvY2F0aW9uLCB2YWx1ZSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAvLyBGbG9hdDMyQXJyYXkgb3IgSlMgQXJyYXlcbiAgICAgICAgY2FzZSAnM2Z2JzpcbiAgICAgICAgICAgIGdsLnVuaWZvcm0zZnYobG9jYXRpb24sIHZhbHVlKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIC8vIEZsb2F0MzJBcnJheSBvciBKUyBBcnJheVxuICAgICAgICBjYXNlICc0ZnYnOlxuICAgICAgICAgICAgZ2wudW5pZm9ybTRmdihsb2NhdGlvbiwgdmFsdWUpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLy8gRmxvYXQzMkFycmF5IG9yIEpTIEFycmF5XG4gICAgICAgIGNhc2UgJ20yJzpcbiAgICAgICAgY2FzZSAnbWF0Mic6XG4gICAgICAgIGNhc2UgJ01hdHJpeDJmdic6XG4gICAgICAgICAgICBnbC51bmlmb3JtTWF0cml4MmZ2KGxvY2F0aW9uLCB1bmlmb3JtLnRyYW5zcG9zZSwgdmFsdWUpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLy8gRmxvYXQzMkFycmF5IG9yIEpTIEFycmF5XG4gICAgICAgIGNhc2UgJ20zJzpcbiAgICAgICAgY2FzZSAnbWF0Myc6XG4gICAgICAgIGNhc2UgJ01hdHJpeDNmdic6XG5cbiAgICAgICAgICAgIGdsLnVuaWZvcm1NYXRyaXgzZnYobG9jYXRpb24sIHVuaWZvcm0udHJhbnNwb3NlLCB2YWx1ZSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAvLyBGbG9hdDMyQXJyYXkgb3IgSlMgQXJyYXlcbiAgICAgICAgY2FzZSAnbTQnOlxuICAgICAgICBjYXNlICdtYXQ0JzpcbiAgICAgICAgY2FzZSAnTWF0cml4NGZ2JzpcbiAgICAgICAgICAgIGdsLnVuaWZvcm1NYXRyaXg0ZnYobG9jYXRpb24sIHVuaWZvcm0udHJhbnNwb3NlLCB2YWx1ZSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAvLyBhIENvbG9yIFZhbHVlXG4gICAgICAgIGNhc2UgJ2MnOlxuICAgICAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdmFsdWUgPSB1dGlscy5oZXgycmdiKHZhbHVlKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZ2wudW5pZm9ybTNmKGxvY2F0aW9uLCB2YWx1ZVswXSwgdmFsdWVbMV0sIHZhbHVlWzJdKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIC8vIGZsYXQgYXJyYXkgb2YgaW50ZWdlcnMgKEpTIG9yIHR5cGVkIGFycmF5KVxuICAgICAgICBjYXNlICdpdjEnOlxuICAgICAgICAgICAgZ2wudW5pZm9ybTFpdihsb2NhdGlvbiwgdmFsdWUpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLy8gZmxhdCBhcnJheSBvZiBpbnRlZ2VycyB3aXRoIDMgeCBOIHNpemUgKEpTIG9yIHR5cGVkIGFycmF5KVxuICAgICAgICBjYXNlICdpdic6XG4gICAgICAgICAgICBnbC51bmlmb3JtM2l2KGxvY2F0aW9uLCB2YWx1ZSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAvLyBmbGF0IGFycmF5IG9mIGZsb2F0cyAoSlMgb3IgdHlwZWQgYXJyYXkpXG4gICAgICAgIGNhc2UgJ2Z2MSc6XG4gICAgICAgICAgICBnbC51bmlmb3JtMWZ2KGxvY2F0aW9uLCB2YWx1ZSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAvLyBmbGF0IGFycmF5IG9mIGZsb2F0cyB3aXRoIDMgeCBOIHNpemUgKEpTIG9yIHR5cGVkIGFycmF5KVxuICAgICAgICBjYXNlICdmdic6XG4gICAgICAgICAgICBnbC51bmlmb3JtM2Z2KGxvY2F0aW9uLCB2YWx1ZSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAvLyBhcnJheSBvZiAyRCBQb2ludCBvYmplY3RzXG4gICAgICAgIGNhc2UgJ3Yydic6XG4gICAgICAgICAgICBpZiAoIXVuaWZvcm0uX2FycmF5KVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHVuaWZvcm0uX2FycmF5ID0gbmV3IEZsb2F0MzJBcnJheSgyICogdmFsdWUubGVuZ3RoKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZm9yIChpID0gMCwgaWwgPSB2YWx1ZS5sZW5ndGg7IGkgPCBpbDsgKytpKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHVuaWZvcm0uX2FycmF5W2kgKiAyXSAgICAgICA9IHZhbHVlW2ldLng7XG4gICAgICAgICAgICAgICAgdW5pZm9ybS5fYXJyYXlbaSAqIDIgKyAxXSAgID0gdmFsdWVbaV0ueTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZ2wudW5pZm9ybTJmdihsb2NhdGlvbiwgdW5pZm9ybS5fYXJyYXkpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLy8gYXJyYXkgb2YgM0QgUG9pbnQgb2JqZWN0c1xuICAgICAgICBjYXNlICd2M3YnOlxuICAgICAgICAgICAgaWYgKCF1bmlmb3JtLl9hcnJheSlcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB1bmlmb3JtLl9hcnJheSA9IG5ldyBGbG9hdDMyQXJyYXkoMyAqIHZhbHVlLmxlbmd0aCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGZvciAoaSA9IDAsIGlsID0gdmFsdWUubGVuZ3RoOyBpIDwgaWw7ICsraSlcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB1bmlmb3JtLl9hcnJheVtpICogM10gICAgICAgPSB2YWx1ZVtpXS54O1xuICAgICAgICAgICAgICAgIHVuaWZvcm0uX2FycmF5W2kgKiAzICsgMV0gICA9IHZhbHVlW2ldLnk7XG4gICAgICAgICAgICAgICAgdW5pZm9ybS5fYXJyYXlbaSAqIDMgKyAyXSAgID0gdmFsdWVbaV0uejtcblxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBnbC51bmlmb3JtM2Z2KGxvY2F0aW9uLCB1bmlmb3JtLl9hcnJheSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAvLyBhcnJheSBvZiA0RCBQb2ludCBvYmplY3RzXG4gICAgICAgIGNhc2UgJ3Y0dic6XG4gICAgICAgICAgICBpZiAoIXVuaWZvcm0uX2FycmF5KVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHVuaWZvcm0uX2FycmF5ID0gbmV3IEZsb2F0MzJBcnJheSg0ICogdmFsdWUubGVuZ3RoKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZm9yIChpID0gMCwgaWwgPSB2YWx1ZS5sZW5ndGg7IGkgPCBpbDsgKytpKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHVuaWZvcm0uX2FycmF5W2kgKiA0XSAgICAgICA9IHZhbHVlW2ldLng7XG4gICAgICAgICAgICAgICAgdW5pZm9ybS5fYXJyYXlbaSAqIDQgKyAxXSAgID0gdmFsdWVbaV0ueTtcbiAgICAgICAgICAgICAgICB1bmlmb3JtLl9hcnJheVtpICogNCArIDJdICAgPSB2YWx1ZVtpXS56O1xuICAgICAgICAgICAgICAgIHVuaWZvcm0uX2FycmF5W2kgKiA0ICsgM10gICA9IHZhbHVlW2ldLnc7XG5cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZ2wudW5pZm9ybTRmdihsb2NhdGlvbiwgdW5pZm9ybS5fYXJyYXkpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLy8gUElYSS5UZXh0dXJlXG4gICAgICAgIGNhc2UgJ3QnOlxuICAgICAgICBjYXNlICdzYW1wbGVyMkQnOlxuXG4gICAgICAgICAgICBpZiAoIXVuaWZvcm0udmFsdWUgfHwgIXVuaWZvcm0udmFsdWUuYmFzZVRleHR1cmUuaGFzTG9hZGVkKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBhY3RpdmF0ZSB0aGlzIHRleHR1cmVcbiAgICAgICAgICAgIGdsLmFjdGl2ZVRleHR1cmUoZ2xbJ1RFWFRVUkUnICsgdGhpcy50ZXh0dXJlQ291bnRdKTtcblxuICAgICAgICAgICAgdmFyIHRleHR1cmUgPSB1bmlmb3JtLnZhbHVlLmJhc2VUZXh0dXJlLl9nbFRleHR1cmVzW2dsLmlkXTtcblxuICAgICAgICAgICAgaWYgKCF0ZXh0dXJlKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHRoaXMuaW5pdFNhbXBsZXIyRCh1bmlmb3JtKTtcblxuICAgICAgICAgICAgICAgIC8vIHNldCB0aGUgdGV4dHVyIHRvIHRoZSBuZXdseSBjcmVhdGVkIG9uZS4uXG4gICAgICAgICAgICAgICAgdGV4dHVyZSA9IHVuaWZvcm0udmFsdWUuYmFzZVRleHR1cmUuX2dsVGV4dHVyZXNbZ2wuaWRdO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBiaW5kIHRoZSB0ZXh0dXJlXG4gICAgICAgICAgICBnbC5iaW5kVGV4dHVyZShnbC5URVhUVVJFXzJELCB0ZXh0dXJlKTtcblxuICAgICAgICAgICAgLy8gc2V0IHVuaWZvcm0gdG8gdGV4dHVyZSBpbmRleFxuICAgICAgICAgICAgZ2wudW5pZm9ybTFpKHVuaWZvcm0uX2xvY2F0aW9uLCB0aGlzLnRleHR1cmVDb3VudCk7XG5cbiAgICAgICAgICAgIC8vIGluY3JlbWVudCBuZXh0IHRleHR1cmUgaWRcbiAgICAgICAgICAgIHRoaXMudGV4dHVyZUNvdW50Kys7XG5cbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ1BpeGkuanMgU2hhZGVyIFdhcm5pbmc6IFVua25vd24gdW5pZm9ybSB0eXBlOiAnICsgdW5pZm9ybS50eXBlKTtcbiAgICB9XG59O1xuXG4vKipcbiAqIFVwZGF0ZXMgdGhlIHNoYWRlciB1bmlmb3JtIHZhbHVlcy5cbiAqXG4gKi9cblNoYWRlci5wcm90b3R5cGUuc3luY1VuaWZvcm1zID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLnRleHR1cmVDb3VudCA9IDE7XG5cbiAgICBmb3IgKHZhciBrZXkgaW4gdGhpcy51bmlmb3JtcylcbiAgICB7XG4gICAgICAgIHRoaXMuc3luY1VuaWZvcm0odGhpcy51bmlmb3Jtc1trZXldKTtcbiAgICB9XG59O1xuXG5cbi8qKlxuICogSW5pdGlhbGlzZXMgYSBTYW1wbGVyMkQgdW5pZm9ybSAod2hpY2ggbWF5IG9ubHkgYmUgYXZhaWxhYmxlIGxhdGVyIG9uIGFmdGVyIGluaXRVbmlmb3JtcyBvbmNlIHRoZSB0ZXh0dXJlIGhhcyBsb2FkZWQpXG4gKlxuICovXG5TaGFkZXIucHJvdG90eXBlLmluaXRTYW1wbGVyMkQgPSBmdW5jdGlvbiAodW5pZm9ybSlcbntcbiAgICB2YXIgZ2wgPSB0aGlzLmdsO1xuXG4gICAgdmFyIHRleHR1cmUgPSB1bmlmb3JtLnZhbHVlLmJhc2VUZXh0dXJlO1xuXG4gICAgaWYoIXRleHR1cmUuaGFzTG9hZGVkKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuXG5cbiAgICBpZiAodW5pZm9ybS50ZXh0dXJlRGF0YSlcbiAgICB7XG5cbiAgICAgICAgLy9UT0RPIG1vdmUgdGhpcy4uLlxuICAgICAgICB2YXIgZGF0YSA9IHVuaWZvcm0udGV4dHVyZURhdGE7XG5cbiAgICAgICAgdGV4dHVyZS5fZ2xUZXh0dXJlc1tnbC5pZF0gPSBnbC5jcmVhdGVUZXh0dXJlKCk7XG5cbiAgICAgICAgZ2wuYmluZFRleHR1cmUoZ2wuVEVYVFVSRV8yRCwgdGV4dHVyZS5fZ2xUZXh0dXJlc1tnbC5pZF0pO1xuXG4gICAgICAgIGdsLnBpeGVsU3RvcmVpKGdsLlVOUEFDS19QUkVNVUxUSVBMWV9BTFBIQV9XRUJHTCwgdGV4dHVyZS5wcmVtdWx0aXBsaWVkQWxwaGEpO1xuICAgICAgICAvLyBHTFRleHR1cmUgPSBtYWcgbGluZWFyLCBtaW4gbGluZWFyX21pcG1hcF9saW5lYXIsIHdyYXAgcmVwZWF0ICsgZ2wuZ2VuZXJhdGVNaXBtYXAoZ2wuVEVYVFVSRV8yRCk7XG4gICAgICAgIC8vIEdMVGV4dHVyZUxpbmVhciA9IG1hZy9taW4gbGluZWFyLCB3cmFwIGNsYW1wXG4gICAgICAgIC8vIEdMVGV4dHVyZU5lYXJlc3RSZXBlYXQgPSBtYWcvbWluIE5FQVJFU1QsIHdyYXAgcmVwZWF0XG4gICAgICAgIC8vIEdMVGV4dHVyZU5lYXJlc3QgPSBtYWcvbWluIG5lYXJlc3QsIHdyYXAgY2xhbXBcbiAgICAgICAgLy8gQXVkaW9UZXh0dXJlID0gd2hhdGV2ZXIgKyBsdW1pbmFuY2UgKyB3aWR0aCA1MTIsIGhlaWdodCAyLCBib3JkZXIgMFxuICAgICAgICAvLyBLZXlUZXh0dXJlID0gd2hhdGV2ZXIgKyBsdW1pbmFuY2UgKyB3aWR0aCAyNTYsIGhlaWdodCAyLCBib3JkZXIgMFxuXG4gICAgICAgIC8vICBtYWdGaWx0ZXIgY2FuIGJlOiBnbC5MSU5FQVIsIGdsLkxJTkVBUl9NSVBNQVBfTElORUFSIG9yIGdsLk5FQVJFU1RcbiAgICAgICAgLy8gIHdyYXBTL1QgY2FuIGJlOiBnbC5DTEFNUF9UT19FREdFIG9yIGdsLlJFUEVBVFxuXG4gICAgICAgIGdsLnRleEltYWdlMkQoZ2wuVEVYVFVSRV8yRCwgMCwgZGF0YS5sdW1pbmFuY2UgPyBnbC5MVU1JTkFOQ0UgOiBnbC5SR0JBLCBnbC5SR0JBLCBnbC5VTlNJR05FRF9CWVRFLCB0ZXh0dXJlLnNvdXJjZSk7XG5cbiAgICAgICAgZ2wudGV4UGFyYW1ldGVyaShnbC5URVhUVVJFXzJELCBnbC5URVhUVVJFX01BR19GSUxURVIsIGRhdGEubWFnRmlsdGVyID8gZGF0YS5tYWdGaWx0ZXIgOiBnbC5MSU5FQVIgKTtcbiAgICAgICAgZ2wudGV4UGFyYW1ldGVyaShnbC5URVhUVVJFXzJELCBnbC5URVhUVVJFX01JTl9GSUxURVIsIGRhdGEud3JhcFMgPyBkYXRhLndyYXBTIDogZ2wuQ0xBTVBfVE9fRURHRSApO1xuXG4gICAgICAgIGdsLnRleFBhcmFtZXRlcmkoZ2wuVEVYVFVSRV8yRCwgZ2wuVEVYVFVSRV9XUkFQX1QsIGRhdGEud3JhcFMgPyBkYXRhLndyYXBTIDogZ2wuQ0xBTVBfVE9fRURHRSk7XG4gICAgICAgIGdsLnRleFBhcmFtZXRlcmkoZ2wuVEVYVFVSRV8yRCwgZ2wuVEVYVFVSRV9XUkFQX1MsIGRhdGEud3JhcFQgPyBkYXRhLndyYXBUIDogZ2wuQ0xBTVBfVE9fRURHRSk7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHRoaXMuc2hhZGVyTWFuYWdlci5yZW5kZXJlci51cGRhdGVUZXh0dXJlKHRleHR1cmUpO1xuICAgIH1cbn07XG5cbi8qKlxuICogRGVzdHJveXMgdGhlIHNoYWRlci5cbiAqXG4gKi9cblNoYWRlci5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy5nbC5kZWxldGVQcm9ncmFtKHRoaXMucHJvZ3JhbSk7XG5cbiAgICB0aGlzLmdsID0gbnVsbDtcbiAgICB0aGlzLnVuaWZvcm1zID0gbnVsbDtcbiAgICB0aGlzLmF0dHJpYnV0ZXMgPSBudWxsO1xuXG4gICAgdGhpcy52ZXJ0ZXhTcmMgPSBudWxsO1xuICAgIHRoaXMuZnJhZ21lbnRTcmMgPSBudWxsO1xufTtcblxuU2hhZGVyLnByb3RvdHlwZS5fZ2xDb21waWxlID0gZnVuY3Rpb24gKHR5cGUsIHNyYylcbntcbiAgICB2YXIgc2hhZGVyID0gdGhpcy5nbC5jcmVhdGVTaGFkZXIodHlwZSk7XG5cbiAgICB0aGlzLmdsLnNoYWRlclNvdXJjZShzaGFkZXIsIHNyYyk7XG4gICAgdGhpcy5nbC5jb21waWxlU2hhZGVyKHNoYWRlcik7XG5cbiAgICBpZiAoIXRoaXMuZ2wuZ2V0U2hhZGVyUGFyYW1ldGVyKHNoYWRlciwgdGhpcy5nbC5DT01QSUxFX1NUQVRVUykpXG4gICAge1xuICAgICAgICBjb25zb2xlLmxvZyh0aGlzLmdsLmdldFNoYWRlckluZm9Mb2coc2hhZGVyKSk7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHJldHVybiBzaGFkZXI7XG59O1xuIiwidmFyIFNoYWRlciA9IHJlcXVpcmUoJy4vU2hhZGVyJyk7XG5cbi8qKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQGV4dGVuZHMgUElYSS5TaGFkZXJcbiAqIEBwYXJhbSBzaGFkZXJNYW5hZ2VyIHtQSVhJLlNoYWRlck1hbmFnZXJ9IFRoZSB3ZWJnbCBzaGFkZXIgbWFuYWdlciB0aGlzIHNoYWRlciB3b3JrcyBmb3IuXG4gKiBAcGFyYW0gW3ZlcnRleFNyY10ge3N0cmluZ30gVGhlIHNvdXJjZSBvZiB0aGUgdmVydGV4IHNoYWRlci5cbiAqIEBwYXJhbSBbZnJhZ21lbnRTcmNdIHtzdHJpbmd9IFRoZSBzb3VyY2Ugb2YgdGhlIGZyYWdtZW50IHNoYWRlci5cbiAqIEBwYXJhbSBbY3VzdG9tVW5pZm9ybXNdIHtvYmplY3R9IEN1c3RvbSB1bmlmb3JtcyB0byB1c2UgdG8gYXVnbWVudCB0aGUgYnVpbHQtaW4gb25lcy5cbiAqIEBwYXJhbSBbZnJhZ21lbnRTcmNdIHtzdHJpbmd9IFRoZSBzb3VyY2Ugb2YgdGhlIGZyYWdtZW50IHNoYWRlci5cbiAqL1xuZnVuY3Rpb24gVGV4dHVyZVNoYWRlcihzaGFkZXJNYW5hZ2VyLCB2ZXJ0ZXhTcmMsIGZyYWdtZW50U3JjLCBjdXN0b21Vbmlmb3JtcywgY3VzdG9tQXR0cmlidXRlcylcbntcbiAgICB2YXIgdW5pZm9ybXMgPSB7XG5cbiAgICAgICAgdVNhbXBsZXI6ICAgICAgICAgICB7IHR5cGU6ICdzYW1wbGVyMkQnLCB2YWx1ZTogMCB9LFxuICAgICAgICBwcm9qZWN0aW9uTWF0cml4OiAgIHsgdHlwZTogJ21hdDMnLCB2YWx1ZTogbmV3IEZsb2F0MzJBcnJheShbMSwgMCwgMCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsIDEsIDAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLCAwLCAxXSkgfVxuICAgIH07XG5cbiAgICBpZiAoY3VzdG9tVW5pZm9ybXMpXG4gICAge1xuICAgICAgICBmb3IgKHZhciB1IGluIGN1c3RvbVVuaWZvcm1zKVxuICAgICAgICB7XG4gICAgICAgICAgICB1bmlmb3Jtc1t1XSA9IGN1c3RvbVVuaWZvcm1zW3VdO1xuICAgICAgICB9XG4gICAgfVxuXG5cbiAgICB2YXIgYXR0cmlidXRlcyA9IHtcbiAgICAgICAgYVZlcnRleFBvc2l0aW9uOiAgICAwLFxuICAgICAgICBhVGV4dHVyZUNvb3JkOiAgICAgIDAsXG4gICAgICAgIGFDb2xvcjogICAgICAgICAgICAgMFxuICAgIH07XG5cbiAgICBpZiAoY3VzdG9tQXR0cmlidXRlcylcbiAgICB7XG4gICAgICAgIGZvciAodmFyIGEgaW4gY3VzdG9tQXR0cmlidXRlcylcbiAgICAgICAge1xuICAgICAgICAgICAgYXR0cmlidXRlc1thXSA9IGN1c3RvbUF0dHJpYnV0ZXNbYV07XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGUgdmVydGV4IHNoYWRlci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge3N0cmluZ31cbiAgICAgKi9cbiAgICB2ZXJ0ZXhTcmMgPSB2ZXJ0ZXhTcmMgfHwgVGV4dHVyZVNoYWRlci5kZWZhdWx0VmVydGV4U3JjO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGZyYWdtZW50IHNoYWRlci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge3N0cmluZ31cbiAgICAgKi9cbiAgICBmcmFnbWVudFNyYyA9IGZyYWdtZW50U3JjIHx8IFRleHR1cmVTaGFkZXIuZGVmYXVsdEZyYWdtZW50U3JjO1xuXG4gICAgU2hhZGVyLmNhbGwodGhpcywgc2hhZGVyTWFuYWdlciwgdmVydGV4U3JjLCBmcmFnbWVudFNyYywgdW5pZm9ybXMsIGF0dHJpYnV0ZXMpO1xufVxuXG4vLyBjb25zdHJ1Y3RvclxuVGV4dHVyZVNoYWRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFNoYWRlci5wcm90b3R5cGUpO1xuVGV4dHVyZVNoYWRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBUZXh0dXJlU2hhZGVyO1xubW9kdWxlLmV4cG9ydHMgPSBUZXh0dXJlU2hhZGVyO1xuXG4vKipcbiAqIFRoZSBkZWZhdWx0IHZlcnRleCBzaGFkZXIgc291cmNlXG4gKlxuICogQHN0YXRpY1xuICogQGNvbnN0YW50XG4gKi9cblRleHR1cmVTaGFkZXIuZGVmYXVsdFZlcnRleFNyYyA9IFtcbiAgICAncHJlY2lzaW9uIGxvd3AgZmxvYXQ7JyxcbiAgICAnYXR0cmlidXRlIHZlYzIgYVZlcnRleFBvc2l0aW9uOycsXG4gICAgJ2F0dHJpYnV0ZSB2ZWMyIGFUZXh0dXJlQ29vcmQ7JyxcbiAgICAnYXR0cmlidXRlIHZlYzQgYUNvbG9yOycsXG5cbiAgICAndW5pZm9ybSBtYXQzIHByb2plY3Rpb25NYXRyaXg7JyxcblxuICAgICd2YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDsnLFxuICAgICd2YXJ5aW5nIHZlYzQgdkNvbG9yOycsXG5cbiAgICAndm9pZCBtYWluKHZvaWQpeycsXG4gICAgJyAgIGdsX1Bvc2l0aW9uID0gdmVjNCgocHJvamVjdGlvbk1hdHJpeCAqIHZlYzMoYVZlcnRleFBvc2l0aW9uLCAxLjApKS54eSwgMC4wLCAxLjApOycsXG4gICAgJyAgIHZUZXh0dXJlQ29vcmQgPSBhVGV4dHVyZUNvb3JkOycsXG4gICAgJyAgIHZDb2xvciA9IHZlYzQoYUNvbG9yLnJnYiAqIGFDb2xvci5hLCBhQ29sb3IuYSk7JyxcbiAgICAnfSdcbl0uam9pbignXFxuJyk7XG5cbi8qKlxuICogVGhlIGRlZmF1bHQgZnJhZ21lbnQgc2hhZGVyIHNvdXJjZVxuICpcbiAqIEBzdGF0aWNcbiAqIEBjb25zdGFudFxuICovXG5UZXh0dXJlU2hhZGVyLmRlZmF1bHRGcmFnbWVudFNyYyA9IFtcbiAgICAncHJlY2lzaW9uIGxvd3AgZmxvYXQ7JyxcblxuICAgICd2YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDsnLFxuICAgICd2YXJ5aW5nIHZlYzQgdkNvbG9yOycsXG5cbiAgICAndW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXI7JyxcblxuICAgICd2b2lkIG1haW4odm9pZCl7JyxcbiAgICAnICAgZ2xfRnJhZ0NvbG9yID0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2VGV4dHVyZUNvb3JkKSAqIHZDb2xvciA7JyxcbiAgICAnfSdcbl0uam9pbignXFxuJyk7XG4iLCJ2YXIgU2hhZGVyID0gcmVxdWlyZSgncGl4aS1nbC1jb3JlJykuR0xTaGFkZXI7XG5cbi8qKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQGV4dGVuZHMgUElYSS5TaGFkZXJcbiAqIEBwYXJhbSBzaGFkZXJNYW5hZ2VyIHtQSVhJLlNoYWRlck1hbmFnZXJ9IFRoZSB3ZWJnbCBzaGFkZXIgbWFuYWdlciB0aGlzIHNoYWRlciB3b3JrcyBmb3IuXG4gKiBAcGFyYW0gW3ZlcnRleFNyY10ge3N0cmluZ30gVGhlIHNvdXJjZSBvZiB0aGUgdmVydGV4IHNoYWRlci5cbiAqIEBwYXJhbSBbZnJhZ21lbnRTcmNdIHtzdHJpbmd9IFRoZSBzb3VyY2Ugb2YgdGhlIGZyYWdtZW50IHNoYWRlci5cbiAqIEBwYXJhbSBbY3VzdG9tVW5pZm9ybXNdIHtvYmplY3R9IEN1c3RvbSB1bmlmb3JtcyB0byB1c2UgdG8gYXVnbWVudCB0aGUgYnVpbHQtaW4gb25lcy5cbiAqIEBwYXJhbSBbZnJhZ21lbnRTcmNdIHtzdHJpbmd9IFRoZSBzb3VyY2Ugb2YgdGhlIGZyYWdtZW50IHNoYWRlci5cbiAqL1xuZnVuY3Rpb24gVGV4dHVyZVNoYWRlcihnbClcbntcbiAgICAvKipcbiAgICAgKiBUaGUgdmVydGV4IHNoYWRlci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge3N0cmluZ31cbiAgICAgKi9cbiAgICB2ZXJ0ZXhTcmMgPSBUZXh0dXJlU2hhZGVyLmRlZmF1bHRWZXJ0ZXhTcmM7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgZnJhZ21lbnQgc2hhZGVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7c3RyaW5nfVxuICAgICAqL1xuICAgIGZyYWdtZW50U3JjID0gVGV4dHVyZVNoYWRlci5kZWZhdWx0RnJhZ21lbnRTcmM7XG5cbiAgICBTaGFkZXIuY2FsbCh0aGlzLCBnbCwgdmVydGV4U3JjLCBmcmFnbWVudFNyYyk7Ly8sIHVuaWZvcm1zLCBhdHRyaWJ1dGVzKTtcblxufVxuXG4vLyBjb25zdHJ1Y3RvclxuVGV4dHVyZVNoYWRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFNoYWRlci5wcm90b3R5cGUpO1xuVGV4dHVyZVNoYWRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBUZXh0dXJlU2hhZGVyO1xubW9kdWxlLmV4cG9ydHMgPSBUZXh0dXJlU2hhZGVyO1xuXG4vKipcbiAqIFRoZSBkZWZhdWx0IHZlcnRleCBzaGFkZXIgc291cmNlXG4gKlxuICogQHN0YXRpY1xuICogQGNvbnN0YW50XG4gKi9cblRleHR1cmVTaGFkZXIuZGVmYXVsdFZlcnRleFNyYyA9IFtcbiAgICAncHJlY2lzaW9uIGxvd3AgZmxvYXQ7JyxcbiAgICAnYXR0cmlidXRlIHZlYzIgYVZlcnRleFBvc2l0aW9uOycsXG4gICAgJ2F0dHJpYnV0ZSB2ZWMyIGFUZXh0dXJlQ29vcmQ7JyxcbiAgICAnYXR0cmlidXRlIHZlYzQgYUNvbG9yOycsXG5cbiAgICAndW5pZm9ybSBtYXQzIHByb2plY3Rpb25NYXRyaXg7JyxcblxuICAgICd2YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDsnLFxuICAgICd2YXJ5aW5nIHZlYzQgdkNvbG9yOycsXG5cbiAgICAndm9pZCBtYWluKHZvaWQpeycsXG4gICAgJyAgIGdsX1Bvc2l0aW9uID0gdmVjNCgocHJvamVjdGlvbk1hdHJpeCAqIHZlYzMoYVZlcnRleFBvc2l0aW9uLCAxLjApKS54eSwgMC4wLCAxLjApOycsXG4gICAgJyAgIHZUZXh0dXJlQ29vcmQgPSBhVGV4dHVyZUNvb3JkOycsXG4gICAgJyAgIHZDb2xvciA9IHZlYzQoYUNvbG9yLnJnYiAqIGFDb2xvci5hLCBhQ29sb3IuYSk7JyxcbiAgICAnfSdcbl0uam9pbignXFxuJyk7XG5cbi8qKlxuICogVGhlIGRlZmF1bHQgZnJhZ21lbnQgc2hhZGVyIHNvdXJjZVxuICpcbiAqIEBzdGF0aWNcbiAqIEBjb25zdGFudFxuICovXG5UZXh0dXJlU2hhZGVyLmRlZmF1bHRGcmFnbWVudFNyYyA9IFtcbiAgICAncHJlY2lzaW9uIGxvd3AgZmxvYXQ7JyxcblxuICAgICd2YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDsnLFxuICAgICd2YXJ5aW5nIHZlYzQgdkNvbG9yOycsXG5cbiAgICAndW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXI7JyxcblxuICAgICd2b2lkIG1haW4odm9pZCl7JyxcbiAgICAnICAgZ2xfRnJhZ0NvbG9yID0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2VGV4dHVyZUNvb3JkKSAqIHZDb2xvciA7JyxcbiAgICAnfSdcbl0uam9pbignXFxuJyk7XG4iLCJ2YXIgV2ViR0xNYW5hZ2VyID0gcmVxdWlyZSgnLi4vbWFuYWdlcnMvV2ViR0xNYW5hZ2VyJyk7XG5cbi8qKlxuICogQmFzZSBmb3IgYSBjb21tb24gb2JqZWN0IHJlbmRlcmVyIHRoYXQgY2FuIGJlIHVzZWQgYXMgYSBzeXN0ZW0gcmVuZGVyZXIgcGx1Z2luLlxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5XZWJHTE1hbmFnZXJcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcn0gVGhlIHJlbmRlcmVyIHRoaXMgb2JqZWN0IHJlbmRlcmVyIHdvcmtzIGZvci5cbiAqL1xuZnVuY3Rpb24gT2JqZWN0UmVuZGVyZXIocmVuZGVyZXIpXG57XG4gICAgV2ViR0xNYW5hZ2VyLmNhbGwodGhpcywgcmVuZGVyZXIpO1xufVxuXG5cbk9iamVjdFJlbmRlcmVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoV2ViR0xNYW5hZ2VyLnByb3RvdHlwZSk7XG5PYmplY3RSZW5kZXJlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBPYmplY3RSZW5kZXJlcjtcbm1vZHVsZS5leHBvcnRzID0gT2JqZWN0UmVuZGVyZXI7XG5cbi8qKlxuICogU3RhcnRzIHRoZSByZW5kZXJlciBhbmQgc2V0cyB0aGUgc2hhZGVyXG4gKlxuICovXG5PYmplY3RSZW5kZXJlci5wcm90b3R5cGUuc3RhcnQgPSBmdW5jdGlvbiAoKVxue1xuICAgIC8vIHNldCB0aGUgc2hhZGVyLi5cbn07XG5cbi8qKlxuICogU3RvcHMgdGhlIHJlbmRlcmVyXG4gKlxuICovXG5PYmplY3RSZW5kZXJlci5wcm90b3R5cGUuc3RvcCA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy5mbHVzaCgpO1xufTtcblxuLyoqXG4gKiBmbHVzaGVzXG4gKlxuICovXG5PYmplY3RSZW5kZXJlci5wcm90b3R5cGUuZmx1c2ggPSBmdW5jdGlvbiAoKVxue1xuICAgIC8vIGZsdXNoIVxufTtcblxuLyoqXG4gKiBSZW5kZXJzIGFuIG9iamVjdFxuICpcbiAqIEBwYXJhbSBvYmplY3Qge1BJWEkuRGlzcGxheU9iamVjdH0gVGhlIG9iamVjdCB0byByZW5kZXIuXG4gKi9cbk9iamVjdFJlbmRlcmVyLnByb3RvdHlwZS5yZW5kZXIgPSBmdW5jdGlvbiAob2JqZWN0KSAvLyBqc2hpbnQgdW51c2VkOmZhbHNlXG57XG4gICAgLy8gcmVuZGVyIHRoZSBvYmplY3Rcbn07XG4iLCIvKipcbiAqIEhlbHBlciBjbGFzcyB0byBjcmVhdGUgYSBxdWFkXG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIGdsIHtXZWJHTFJlbmRlcmluZ0NvbnRleHR9IFRoZSBnbCBjb250ZXh0IGZvciB0aGlzIHF1YWQgdG8gdXNlLlxuICovXG5mdW5jdGlvbiBRdWFkKGdsKVxue1xuICAgIC8qXG4gICAgICogdGhlIGN1cnJlbnQgV2ViR0wgZHJhd2luZyBjb250ZXh0XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtXZWJHTFJlbmRlcmluZ0NvbnRleHR9XG4gICAgICovXG4gICAgdGhpcy5nbCA9IGdsO1xuXG4vLyAgICB0aGlzLnRleHR1cmVzID0gbmV3IFRleHR1cmVVdnMoKTtcblxuICAgIC8qKlxuICAgICAqIEFuIGFycmF5IG9mIHZlcnRpY2VzXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtGbG9hdDMyQXJyYXl9XG4gICAgICovXG4gICAgdGhpcy52ZXJ0aWNlcyA9IG5ldyBGbG9hdDMyQXJyYXkoW1xuICAgICAgICAwLDAsXG4gICAgICAgIDIwMCwwLFxuICAgICAgICAyMDAsMjAwLFxuICAgICAgICAwLDIwMFxuICAgIF0pO1xuXG4gICAgLyoqXG4gICAgICogVGhlIFV2cyBvZiB0aGUgcXVhZFxuICAgICAqXG4gICAgICogQG1lbWJlciB7RmxvYXQzMkFycmF5fVxuICAgICAqL1xuICAgIHRoaXMudXZzID0gbmV3IEZsb2F0MzJBcnJheShbXG4gICAgICAgIDAsMCxcbiAgICAgICAgMSwwLFxuICAgICAgICAxLDEsXG4gICAgICAgIDAsMVxuICAgIF0pO1xuXG4vLyAgICB2YXIgd2hpdGUgPSAoMHhGRkZGRkYgPj4gMTYpICsgKDB4RkZGRkZGICYgMHhmZjAwKSArICgoMHhGRkZGRkYgJiAweGZmKSA8PCAxNikgKyAoMSAqIDI1NSA8PCAyNCk7XG4gICAgLy9UT0RPIGNvbnZlcnQgdGhpcyB0byBhIDMyIHVuc2lnbmVkIGludCBhcnJheVxuICAgIC8qKlxuICAgICAqIFRoZSBjb2xvciBjb21wb25lbnRzIG9mIHRoZSB0cmlhbmdsZXNcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge0Zsb2F0MzJBcnJheX1cbiAgICAgKi9cbiAgICB0aGlzLmNvbG9ycyA9IG5ldyBGbG9hdDMyQXJyYXkoW1xuICAgICAgICAxLDEsMSwxLFxuICAgICAgICAxLDEsMSwxLFxuICAgICAgICAxLDEsMSwxLFxuICAgICAgICAxLDEsMSwxXG4gICAgXSk7XG5cbiAgICAvKlxuICAgICAqIEBtZW1iZXIge1VpbnQxNkFycmF5fSBBbiBhcnJheSBjb250YWluaW5nIHRoZSBpbmRpY2VzIG9mIHRoZSB2ZXJ0aWNlc1xuICAgICAqL1xuICAgIHRoaXMuaW5kaWNlcyA9IG5ldyBVaW50MTZBcnJheShbXG4gICAgICAgIDAsIDEsIDIsIDAsIDMsIDJcbiAgICBdKTtcblxuICAgIC8qXG4gICAgICogQG1lbWJlciB7V2ViR0xCdWZmZXJ9IFRoZSB2ZXJ0ZXggYnVmZmVyXG4gICAgICovXG4gICAgdGhpcy52ZXJ0ZXhCdWZmZXIgPSBnbC5jcmVhdGVCdWZmZXIoKTtcblxuICAgIC8qXG4gICAgICogQG1lbWJlciB7V2ViR0xCdWZmZXJ9IFRoZSBpbmRleCBidWZmZXJcbiAgICAgKi9cbiAgICB0aGlzLmluZGV4QnVmZmVyID0gZ2wuY3JlYXRlQnVmZmVyKCk7XG5cbiAgICBnbC5iaW5kQnVmZmVyKGdsLkFSUkFZX0JVRkZFUiwgdGhpcy52ZXJ0ZXhCdWZmZXIpO1xuICAgIGdsLmJ1ZmZlckRhdGEoZ2wuQVJSQVlfQlVGRkVSLCAoOCArIDggKyAxNikgKiA0LCBnbC5EWU5BTUlDX0RSQVcpO1xuXG4gICAgZ2wuYmluZEJ1ZmZlcihnbC5FTEVNRU5UX0FSUkFZX0JVRkZFUiwgdGhpcy5pbmRleEJ1ZmZlcik7XG4gICAgZ2wuYnVmZmVyRGF0YShnbC5FTEVNRU5UX0FSUkFZX0JVRkZFUiwgdGhpcy5pbmRpY2VzLCBnbC5TVEFUSUNfRFJBVyk7XG5cbiAgICB0aGlzLnVwbG9hZCgpO1xufVxuXG5RdWFkLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFF1YWQ7XG5cbi8qKlxuICogTWFwcyB0d28gUmVjdGFuZ2xlIHRvIHRoZSBxdWFkXG4gKiBAcGFyYW0gcmVjdCB7UElYSS5SZWN0YW5nbGV9IHRoZSBmaXJzdCByZWN0YW5nbGVcbiAqIEBwYXJhbSByZWN0MiB7UElYSS5SZWN0YW5nbGV9IHRoZSBzZWNvbmQgcmVjdGFuZ2xlXG4gKi9cblF1YWQucHJvdG90eXBlLm1hcCA9IGZ1bmN0aW9uKHJlY3QsIHJlY3QyKVxue1xuICAgIHZhciB4ID0gMDsgLy9yZWN0Mi54IC8gcmVjdC53aWR0aDtcbiAgICB2YXIgeSA9IDA7IC8vcmVjdDIueSAvIHJlY3QuaGVpZ2h0O1xuXG4gICAgdGhpcy51dnNbMF0gPSB4O1xuICAgIHRoaXMudXZzWzFdID0geTtcblxuICAgIHRoaXMudXZzWzJdID0geCArIHJlY3QyLndpZHRoIC8gcmVjdC53aWR0aDtcbiAgICB0aGlzLnV2c1szXSA9IHk7XG5cbiAgICB0aGlzLnV2c1s0XSA9IHggKyByZWN0Mi53aWR0aCAvIHJlY3Qud2lkdGg7XG4gICAgdGhpcy51dnNbNV0gPSB5ICsgcmVjdDIuaGVpZ2h0IC8gcmVjdC5oZWlnaHQ7XG5cbiAgICB0aGlzLnV2c1s2XSA9IHg7XG4gICAgdGhpcy51dnNbN10gPSB5ICsgcmVjdDIuaGVpZ2h0IC8gcmVjdC5oZWlnaHQ7XG5cbiAgICAvLy8gLS0tLS1cbiAgICB4ID0gcmVjdDIueDtcbiAgICB5ID0gcmVjdDIueTtcblxuICAgIHRoaXMudmVydGljZXNbMF0gPSB4O1xuICAgIHRoaXMudmVydGljZXNbMV0gPSB5O1xuXG4gICAgdGhpcy52ZXJ0aWNlc1syXSA9IHggKyByZWN0Mi53aWR0aDtcbiAgICB0aGlzLnZlcnRpY2VzWzNdID0geTtcblxuICAgIHRoaXMudmVydGljZXNbNF0gPSB4ICsgcmVjdDIud2lkdGg7XG4gICAgdGhpcy52ZXJ0aWNlc1s1XSA9IHkgKyByZWN0Mi5oZWlnaHQ7XG5cbiAgICB0aGlzLnZlcnRpY2VzWzZdID0geDtcbiAgICB0aGlzLnZlcnRpY2VzWzddID0geSArIHJlY3QyLmhlaWdodDtcblxuICAgIHRoaXMudXBsb2FkKCk7XG59O1xuXG4vKipcbiAqIEJpbmRzIHRoZSBidWZmZXIgYW5kIHVwbG9hZHMgdGhlIGRhdGFcbiAqL1xuUXVhZC5wcm90b3R5cGUudXBsb2FkID0gZnVuY3Rpb24oKVxue1xuICAgIHZhciBnbCA9IHRoaXMuZ2w7XG5cbiAgICAvLyBUT0RPIGNvdWxkIHByb2JhYmx5IGJlIHB1c2hlZCBpbnRvIG9uZSB1cGxvYWQhXG4gICAgZ2wuYmluZEJ1ZmZlciggZ2wuQVJSQVlfQlVGRkVSLCB0aGlzLnZlcnRleEJ1ZmZlciApO1xuXG4gICAgZ2wuYnVmZmVyU3ViRGF0YShnbC5BUlJBWV9CVUZGRVIsIDAsIHRoaXMudmVydGljZXMpO1xuXG4gICAgZ2wuYnVmZmVyU3ViRGF0YShnbC5BUlJBWV9CVUZGRVIsIDggKiA0LCB0aGlzLnV2cyk7XG5cbiAgICBnbC5idWZmZXJTdWJEYXRhKGdsLkFSUkFZX0JVRkZFUiwgKDggKyA4KSAqIDQsIHRoaXMuY29sb3JzKTtcbn07XG5cblF1YWQucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbigpXG57XG4gICAgdmFyIGdsID0gdGhpcy5nbDtcbiAgICBcbiAgICAgZ2wuZGVsZXRlQnVmZmVyKHRoaXMudmVydGV4QnVmZmVyKTtcbiAgICAgZ2wuZGVsZXRlQnVmZmVyKHRoaXMuaW5kZXhCdWZmZXIpO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBRdWFkO1xuXG5cbiIsInZhciBtYXRoID0gcmVxdWlyZSgnLi4vLi4vLi4vbWF0aCcpLFxuICAgIHV0aWxzID0gcmVxdWlyZSgnLi4vLi4vLi4vdXRpbHMnKSxcbiAgICBDT05TVCA9IHJlcXVpcmUoJy4uLy4uLy4uL2NvbnN0JyksXG4gICAgICAgIFxuICAgIEdMVGV4dHVyZSA9IHJlcXVpcmUoJ3BpeGktZ2wtY29yZScpLkdMVGV4dHVyZSxcbiAgICBHTEZyYW1lYnVmZmVyID0gcmVxdWlyZSgncGl4aS1nbC1jb3JlJykuR0xGcmFtZWJ1ZmZlcixcbiAgICBcbiAgICBTdGVuY2lsTWFza1N0YWNrID0gcmVxdWlyZSgnLi9TdGVuY2lsTWFza1N0YWNrJyk7XG5cbi8qKlxuICogQGF1dGhvciBNYXQgR3JvdmVzIGh0dHA6Ly9tYXRncm92ZXMuY29tLyBARG9vcm1hdDIzXG4gKi9cblxuLyoqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gZ2wge1dlYkdMUmVuZGVyaW5nQ29udGV4dH0gdGhlIGN1cnJlbnQgV2ViR0wgZHJhd2luZyBjb250ZXh0XG4gKiBAcGFyYW0gd2lkdGgge251bWJlcn0gdGhlIGhvcml6b250YWwgcmFuZ2Ugb2YgdGhlIGZpbHRlclxuICogQHBhcmFtIGhlaWdodCB7bnVtYmVyfSB0aGUgdmVydGljYWwgcmFuZ2Ugb2YgdGhlIGZpbHRlclxuICogQHBhcmFtIHNjYWxlTW9kZSB7bnVtYmVyfSBTZWUge0BsaW5rIFBJWEkuU0NBTEVfTU9ERVN9IGZvciBwb3NzaWJsZSB2YWx1ZXNcbiAqIEBwYXJhbSByZXNvbHV0aW9uIHtudW1iZXJ9IHRoZSBjdXJyZW50IHJlc29sdXRpb25cbiAqIEBwYXJhbSByb290IHtib29sZWFufSBXaGV0aGVyIHRoaXMgb2JqZWN0IGlzIHRoZSByb290IGVsZW1lbnQgb3Igbm90XG4gKi9cbnZhciBSZW5kZXJUYXJnZXQgPSBmdW5jdGlvbihnbCwgd2lkdGgsIGhlaWdodCwgc2NhbGVNb2RlLCByZXNvbHV0aW9uLCByb290KVxue1xuICAgIC8vVE9ETyBSZXNvbHV0aW9uIGNvdWxkIGdvIGhlcmUgKCBlZyBsb3cgcmVzIGJsdXJzIClcblxuICAgIC8qKlxuICAgICAqIFRoZSBjdXJyZW50IFdlYkdMIGRyYXdpbmcgY29udGV4dC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1dlYkdMUmVuZGVyaW5nQ29udGV4dH1cbiAgICAgKi9cbiAgICB0aGlzLmdsID0gZ2w7XG5cbiAgICAvLyBuZXh0IHRpbWUgdG8gY3JlYXRlIGEgZnJhbWUgYnVmZmVyIGFuZCB0ZXh0dXJlXG5cbiAgICAvKipcbiAgICAgKiBBIGZyYW1lIGJ1ZmZlclxuICAgICAqXG4gICAgICogQG1lbWJlciB7V2ViR0xGcmFtZUJ1ZmZlcn1cbiAgICAgKi9cbiAgICB0aGlzLmZyYW1lQnVmZmVyID0gbnVsbDtcblxuICAgIC8qKlxuICAgICAqIFRoZSB0ZXh0dXJlXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlRleHR1cmV9XG4gICAgICovXG4gICAgdGhpcy50ZXh0dXJlID0gbnVsbDtcblxuICAgIHRoaXMuY2xlYXJDb2xvciA9IFswLCAwLCAwLCAwXTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBzaXplIG9mIHRoZSBvYmplY3QgYXMgYSByZWN0YW5nbGVcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuUmVjdGFuZ2xlfVxuICAgICAqL1xuICAgIHRoaXMuc2l6ZSA9IG5ldyBtYXRoLlJlY3RhbmdsZSgwLCAwLCAxLCAxKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBjdXJyZW50IHJlc29sdXRpb25cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLnJlc29sdXRpb24gPSByZXNvbHV0aW9uIHx8IENPTlNULlJFU09MVVRJT047XG5cbiAgICAvKipcbiAgICAgKiBUaGUgcHJvamVjdGlvbiBtYXRyaXhcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuTWF0cml4fVxuICAgICAqL1xuICAgIHRoaXMucHJvamVjdGlvbk1hdHJpeCA9IG5ldyBtYXRoLk1hdHJpeCgpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIG9iamVjdCdzIHRyYW5zZm9ybVxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5NYXRyaXh9XG4gICAgICovXG4gICAgdGhpcy50cmFuc2Zvcm0gPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGZyYW1lLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5SZWN0YW5nbGV9XG4gICAgICovXG4gICAgdGhpcy5mcmFtZSA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgc3RlbmNpbCBidWZmZXIgc3RvcmVzIG1hc2tpbmcgZGF0YSBmb3IgdGhlIHJlbmRlciB0YXJnZXRcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1dlYkdMUmVuZGVyQnVmZmVyfVxuICAgICAqL1xuICAgIHRoaXMuc3RlbmNpbEJ1ZmZlciA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgZGF0YSBzdHJ1Y3R1cmUgZm9yIHRoZSBzdGVuY2lsIG1hc2tzXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlN0ZW5jaWxNYXNrU3RhY2t9XG4gICAgICovXG4gICAgdGhpcy5zdGVuY2lsTWFza1N0YWNrID0gbmV3IFN0ZW5jaWxNYXNrU3RhY2soKTtcblxuICAgIC8qKlxuICAgICAqIFN0b3JlcyBmaWx0ZXIgZGF0YSBmb3IgdGhlIHJlbmRlciB0YXJnZXRcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge29iamVjdFtdfVxuICAgICAqL1xuICAgIHRoaXMuZmlsdGVyU3RhY2sgPSBbXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJlbmRlclRhcmdldDp0aGlzLFxuICAgICAgICAgICAgZmlsdGVyOltdLFxuICAgICAgICAgICAgYm91bmRzOnRoaXMuc2l6ZVxuICAgICAgICB9XG4gICAgXTtcblxuXG4gICAgLyoqXG4gICAgICogVGhlIHNjYWxlIG1vZGUuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgUElYSS5TQ0FMRV9NT0RFUy5ERUZBVUxUXG4gICAgICogQHNlZSBQSVhJLlNDQUxFX01PREVTXG4gICAgICovXG4gICAgdGhpcy5zY2FsZU1vZGUgPSBzY2FsZU1vZGUgfHwgQ09OU1QuU0NBTEVfTU9ERVMuREVGQVVMVDtcblxuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgdGhpcyBvYmplY3QgaXMgdGhlIHJvb3QgZWxlbWVudCBvciBub3RcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICovXG4gICAgdGhpcy5yb290ID0gcm9vdDtcblxuICAgIHRoaXMuZnJhbWVCdWZmZXIgPSBHTEZyYW1lYnVmZmVyLmNyZWF0ZVJHQkEoZ2wsIDEwMCwgMTAwKTtcbiAgICBpZih0aGlzLmZyYW1lQnVmZmVyKXRoaXMuZnJhbWVCdWZmZXIudW5iaW5kKCk7XG5cbiAgIC8vIHRoaXMuZnJhbWVCdWZmZXIgPSB7ZnJhbWVidWZmZXI6bnVsbCwgYmluZDpmdW5jdGlvbigpe30sIGNsZWFyOmZ1bmN0aW9uKCl7fSwgcmVzaXplOmZ1bmN0aW9uKCl7fX0vL25ldyBHTEZyYW1lYnVmZmVyLmNyZWF0ZVJHQkEoZ2wsIDEwMCwgMTAwKTtcblxuXG5cbiAgICBpZiAoIXRoaXMucm9vdClcbiAgICB7XG4gICAgICAgIC8qXG4gICAgICAgICAgICBBIGZyYW1lIGJ1ZmZlciBuZWVkcyBhIHRhcmdldCB0byByZW5kZXIgdG8uLlxuICAgICAgICAgICAgY3JlYXRlIGEgdGV4dHVyZSBhbmQgYmluZCBpdCBhdHRhY2ggaXQgdG8gdGhlIGZyYW1lYnVmZmVyLi5cbiAgICAgICAgICovXG4gICAgICAgIFxuICAgICAgICAvLyBjcmVhdGUgYSB0ZXh0dXJlIHRvIGJpbmQgYXR0YWNoIHRvIHRoZSBmcmFtZUJ1ZmZlci4uXG4gICAgICAgIHZhciB0ZXh0dXJlID0gbmV3IEdMVGV4dHVyZShnbCk7XG5cbiAgICAgICAgdGV4dHVyZS5lbmFibGVMaW5lYXJTY2FsaW5nKClcbiAgICAgICAgdGV4dHVyZS5lbmFibGVXcmFwQ2xhbXAoKVxuXG4gICAgICAgIHRoaXMuZnJhbWVCdWZmZXIuZW5hYmxlVGV4dHVyZSh0ZXh0dXJlKTtcblxuICAgICAgICAvLyBUT0RPIGNoYW5nZSFcbiAgICAgICAgLy8gdGhpcyBpcyB1c2VkIGJ5IHRoZSBiYXNlIHRleHR1cmVcbiAgICAgICAgdGhpcy50ZXh0dXJlID0gdGV4dHVyZS50ZXh0dXJlO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICAvLyBtYWtlIGl0IGEgbnVsbCBmcmFtZWJ1ZmZlci4uXG4gICAgICAgIHRoaXMuZnJhbWVCdWZmZXIuZnJhbWVidWZmZXIgPSBudWxsO1xuICAgIH1cblxuICAgIHRoaXMucmVzaXplKHdpZHRoLCBoZWlnaHQpO1xufTtcblxuUmVuZGVyVGFyZ2V0LnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFJlbmRlclRhcmdldDtcbm1vZHVsZS5leHBvcnRzID0gUmVuZGVyVGFyZ2V0O1xuXG4vKipcbiAqIENsZWFycyB0aGUgZmlsdGVyIHRleHR1cmUuXG4gKlxuICogQHBhcmFtIFtiaW5kPWZhbHNlXSB7Ym9vbGVhbn0gU2hvdWxkIHdlIGJpbmQgb3VyIGZyYW1lYnVmZmVyIGJlZm9yZSBjbGVhcmluZz9cbiAqL1xuUmVuZGVyVGFyZ2V0LnByb3RvdHlwZS5jbGVhciA9IGZ1bmN0aW9uKGNsZWFyQ29sb3IpXG57XG4gICAgdmFyIGNjID0gY2xlYXJDb2xvciB8fCB0aGlzLmNsZWFyQ29sb3JcbiAgICB0aGlzLmZyYW1lQnVmZmVyLmNsZWFyKGNjWzBdLGNjWzFdLGNjWzJdLGNjWzNdKS8vcixnLGIsYSk7XG59O1xuXG4vKipcbiAqIEJpbmRzIHRoZSBzdGVuY2lsIGJ1ZmZlci5cbiAqXG4gKi9cblJlbmRlclRhcmdldC5wcm90b3R5cGUuYXR0YWNoU3RlbmNpbEJ1ZmZlciA9IGZ1bmN0aW9uKClcbntcbiAgICAvL1RPRE8gY2hlY2sgaWYgc3RlbmNpbCBpcyBkb25lP1xuICAgIC8qKlxuICAgICAqIFRoZSBzdGVuY2lsIGJ1ZmZlciBpcyB1c2VkIGZvciBtYXNraW5nIGluIHBpeGlcbiAgICAgKiBsZXRzIGNyZWF0ZSBvbmUgYW5kIHRoZW4gYWRkIGF0dGFjaCBpdCB0byB0aGUgZnJhbWVidWZmZXIuLlxuICAgICAqL1xuICAgIGlmICghdGhpcy5yb290KVxuICAgIHtcbiAgICAgICAgdGhpcy5mcmFtZUJ1ZmZlci5lbmFibGVTdGVuY2lsKCk7XG4gICAgfVxufTtcblxuLyoqXG4gKiBCaW5kcyB0aGUgYnVmZmVycyBhbmQgaW5pdGlhbGlzZXMgdGhlIHZpZXdwb3J0LlxuICpcbiAqL1xuUmVuZGVyVGFyZ2V0LnByb3RvdHlwZS5hY3RpdmF0ZSA9IGZ1bmN0aW9uKClcbntcbiAgICAvL1RPT0QgcmVmYWN0b3IgdXNhZ2Ugb2YgZnJhbWUuLlxuICAgIHZhciBnbCA9IHRoaXMuZ2w7XG5cbiAgICB0aGlzLmZyYW1lQnVmZmVyLmJpbmQoKTtcblxuXG4gICAgdmFyIHByb2plY3Rpb25GcmFtZSA9IHRoaXMuZnJhbWUgfHwgdGhpcy5zaXplO1xuXG4gICAgLy8gVE9ETyBhZGQgYSBkaXJ0eSBmbGFnIHRvIHRoaXMgb2YgYSBzZXR0ZXIgZm9yIHRoZSBmcmFtZT9cbiAgICB0aGlzLmNhbGN1bGF0ZVByb2plY3Rpb24oIHByb2plY3Rpb25GcmFtZSApO1xuXG4gICAgaWYodGhpcy50cmFuc2Zvcm0pXG4gICAge1xuICAgICAgICB0aGlzLnByb2plY3Rpb25NYXRyaXguYXBwZW5kKHRoaXMudHJhbnNmb3JtKTtcbiAgICB9XG5cbiAgICBnbC52aWV3cG9ydCgwLDAsIHByb2plY3Rpb25GcmFtZS53aWR0aCAqIHRoaXMucmVzb2x1dGlvbiwgcHJvamVjdGlvbkZyYW1lLmhlaWdodCAqIHRoaXMucmVzb2x1dGlvbik7XG59O1xuXG4vKipcbiAqIFVwZGF0ZXMgdGhlIHByb2plY3Rpb24gbWF0cml4IGJhc2VkIG9uIGEgcHJvamVjdGlvbiBmcmFtZSAod2hpY2ggaXMgYSByZWN0YW5nbGUpXG4gKlxuICovXG5SZW5kZXJUYXJnZXQucHJvdG90eXBlLmNhbGN1bGF0ZVByb2plY3Rpb24gPSBmdW5jdGlvbiAocHJvamVjdGlvbkZyYW1lKVxue1xuICAgIHZhciBwbSA9IHRoaXMucHJvamVjdGlvbk1hdHJpeDtcblxuICAgIHBtLmlkZW50aXR5KCk7XG5cbiAgICBpZiAoIXRoaXMucm9vdClcbiAgICB7XG4gICAgICAgIHBtLmEgPSAxIC8gcHJvamVjdGlvbkZyYW1lLndpZHRoKjI7XG4gICAgICAgIHBtLmQgPSAxIC8gcHJvamVjdGlvbkZyYW1lLmhlaWdodCoyO1xuXG4gICAgICAgIHBtLnR4ID0gLTEgLSBwcm9qZWN0aW9uRnJhbWUueCAqIHBtLmE7XG4gICAgICAgIHBtLnR5ID0gLTEgLSBwcm9qZWN0aW9uRnJhbWUueSAqIHBtLmQ7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHBtLmEgPSAxIC8gcHJvamVjdGlvbkZyYW1lLndpZHRoKjI7XG4gICAgICAgIHBtLmQgPSAtMSAvIHByb2plY3Rpb25GcmFtZS5oZWlnaHQqMjtcblxuICAgICAgICBwbS50eCA9IC0xIC0gcHJvamVjdGlvbkZyYW1lLnggKiBwbS5hO1xuICAgICAgICBwbS50eSA9IDEgLSBwcm9qZWN0aW9uRnJhbWUueSAqIHBtLmQ7XG4gICAgfVxufTtcblxuLyoqXG4gKiBSZXNpemVzIHRoZSB0ZXh0dXJlIHRvIHRoZSBzcGVjaWZpZWQgd2lkdGggYW5kIGhlaWdodFxuICpcbiAqIEBwYXJhbSB3aWR0aCB7TnVtYmVyfSB0aGUgbmV3IHdpZHRoIG9mIHRoZSB0ZXh0dXJlXG4gKiBAcGFyYW0gaGVpZ2h0IHtOdW1iZXJ9IHRoZSBuZXcgaGVpZ2h0IG9mIHRoZSB0ZXh0dXJlXG4gKi9cblJlbmRlclRhcmdldC5wcm90b3R5cGUucmVzaXplID0gZnVuY3Rpb24gKHdpZHRoLCBoZWlnaHQpXG57XG4gICAgd2lkdGggPSB3aWR0aCB8IDA7XG4gICAgaGVpZ2h0ID0gaGVpZ2h0IHwgMDtcblxuICAgIGlmICh0aGlzLnNpemUud2lkdGggPT09IHdpZHRoICYmIHRoaXMuc2l6ZS5oZWlnaHQgPT09IGhlaWdodCkgXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5zaXplLndpZHRoID0gd2lkdGg7XG4gICAgdGhpcy5zaXplLmhlaWdodCA9IGhlaWdodDtcblxuICAgIHRoaXMuZnJhbWVCdWZmZXIucmVzaXplKHdpZHRoICogdGhpcy5yZXNvbHV0aW9uLCBoZWlnaHQgKiB0aGlzLnJlc29sdXRpb24pO1xuICAgIFxuICAgIHZhciBwcm9qZWN0aW9uRnJhbWUgPSB0aGlzLmZyYW1lIHx8IHRoaXMuc2l6ZTtcblxuICAgIHRoaXMuY2FsY3VsYXRlUHJvamVjdGlvbiggcHJvamVjdGlvbkZyYW1lICk7XG59O1xuXG4vKipcbiAqIERlc3Ryb3lzIHRoZSByZW5kZXIgdGFyZ2V0LlxuICpcbiAqL1xuUmVuZGVyVGFyZ2V0LnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKClcbntcbiAgICB2YXIgZ2wgPSB0aGlzLmdsO1xuICAgIFxuICAgIHRoaXMuZnJhbWVCdWZmZXIuZGVzdHJveSgpO1xuXG4gICAgdGhpcy5mcmFtZUJ1ZmZlciA9IG51bGw7XG4gICAgdGhpcy50ZXh0dXJlID0gbnVsbDtcbn07XG4iLCIvKipcbiAqIEdlbmVyaWMgTWFzayBTdGFjayBkYXRhIHN0cnVjdHVyZVxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICovXG5mdW5jdGlvbiBTdGVuY2lsTWFza1N0YWNrKClcbntcblx0LyoqXG4gICAgICogVGhlIGFjdHVhbCBzdGFja1xuICAgICAqXG4gICAgICogQG1lbWJlciB7YW55W119XG4gICAgICovXG4gICAgdGhpcy5zdGVuY2lsU3RhY2sgPSBbXTtcblxuICAgIC8qKlxuICAgICAqIFRPRE8gQGFsdmluXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqL1xuICAgIHRoaXMucmV2ZXJzZSA9IHRydWU7XG5cbiAgICAvKipcbiAgICAgKiBJbnRlcm5hbCBjb3VudFxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMuY291bnQgPSAwO1xufVxuXG5TdGVuY2lsTWFza1N0YWNrLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFN0ZW5jaWxNYXNrU3RhY2s7XG5tb2R1bGUuZXhwb3J0cyA9IFN0ZW5jaWxNYXNrU3RhY2s7XG4iLCJDT05TVCA9IHJlcXVpcmUoJy4uLy4uLy4uL2NvbnN0Jyk7XG5cbi8qKlxuICogTWFwcyBnbCBibGVuZCBjb21iaW5hdGlvbnMgdG8gV2ViR0xcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqL1xuZnVuY3Rpb24gbWFwV2ViR0xCbGVuZE1vZGVzVG9QaXhpKGdsLCBvYmplY3QpXG57XG4gICAgb2JqZWN0ID0gb2JqZWN0IHx8IHt9O1xuXG4gICAgLy9UT0RPIC0gcHJlbXVsdGlwbHkgYWxwaGEgd291bGQgYmUgZGlmZmVyZW50LlxuICAgIC8vYWRkIGEgYm9vbGVhbiBmb3IgdGhhdCFcbiAgICBvYmplY3RbQ09OU1QuQkxFTkRfTU9ERVMuTk9STUFMXSAgICAgICAgPSBbZ2wuT05FLCAgICAgICBnbC5PTkVfTUlOVVNfU1JDX0FMUEhBXTtcbiAgICBvYmplY3RbQ09OU1QuQkxFTkRfTU9ERVMuQUREXSAgICAgICAgICAgPSBbZ2wuU1JDX0FMUEhBLCBnbC5EU1RfQUxQSEFdO1xuICAgIG9iamVjdFtDT05TVC5CTEVORF9NT0RFUy5NVUxUSVBMWV0gICAgICA9IFtnbC5EU1RfQ09MT1IsIGdsLk9ORV9NSU5VU19TUkNfQUxQSEFdO1xuICAgIG9iamVjdFtDT05TVC5CTEVORF9NT0RFUy5TQ1JFRU5dICAgICAgICA9IFtnbC5TUkNfQUxQSEEsIGdsLk9ORV07XG4gICAgb2JqZWN0W0NPTlNULkJMRU5EX01PREVTLk9WRVJMQVldICAgICAgID0gW2dsLk9ORSwgICAgICAgZ2wuT05FX01JTlVTX1NSQ19BTFBIQV07XG4gICAgb2JqZWN0W0NPTlNULkJMRU5EX01PREVTLkRBUktFTl0gICAgICAgID0gW2dsLk9ORSwgICAgICAgZ2wuT05FX01JTlVTX1NSQ19BTFBIQV07XG4gICAgb2JqZWN0W0NPTlNULkJMRU5EX01PREVTLkxJR0hURU5dICAgICAgID0gW2dsLk9ORSwgICAgICAgZ2wuT05FX01JTlVTX1NSQ19BTFBIQV07XG4gICAgb2JqZWN0W0NPTlNULkJMRU5EX01PREVTLkNPTE9SX0RPREdFXSAgID0gW2dsLk9ORSwgICAgICAgZ2wuT05FX01JTlVTX1NSQ19BTFBIQV07XG4gICAgb2JqZWN0W0NPTlNULkJMRU5EX01PREVTLkNPTE9SX0JVUk5dICAgID0gW2dsLk9ORSwgICAgICAgZ2wuT05FX01JTlVTX1NSQ19BTFBIQV07XG4gICAgb2JqZWN0W0NPTlNULkJMRU5EX01PREVTLkhBUkRfTElHSFRdICAgID0gW2dsLk9ORSwgICAgICAgZ2wuT05FX01JTlVTX1NSQ19BTFBIQV07XG4gICAgb2JqZWN0W0NPTlNULkJMRU5EX01PREVTLlNPRlRfTElHSFRdICAgID0gW2dsLk9ORSwgICAgICAgZ2wuT05FX01JTlVTX1NSQ19BTFBIQV07XG4gICAgb2JqZWN0W0NPTlNULkJMRU5EX01PREVTLkRJRkZFUkVOQ0VdICAgID0gW2dsLk9ORSwgICAgICAgZ2wuT05FX01JTlVTX1NSQ19BTFBIQV07XG4gICAgb2JqZWN0W0NPTlNULkJMRU5EX01PREVTLkVYQ0xVU0lPTl0gICAgID0gW2dsLk9ORSwgICAgICAgZ2wuT05FX01JTlVTX1NSQ19BTFBIQV07XG4gICAgb2JqZWN0W0NPTlNULkJMRU5EX01PREVTLkhVRV0gICAgICAgICAgID0gW2dsLk9ORSwgICAgICAgZ2wuT05FX01JTlVTX1NSQ19BTFBIQV07XG4gICAgb2JqZWN0W0NPTlNULkJMRU5EX01PREVTLlNBVFVSQVRJT05dICAgID0gW2dsLk9ORSwgICAgICAgZ2wuT05FX01JTlVTX1NSQ19BTFBIQV07XG4gICAgb2JqZWN0W0NPTlNULkJMRU5EX01PREVTLkNPTE9SXSAgICAgICAgID0gW2dsLk9ORSwgICAgICAgZ2wuT05FX01JTlVTX1NSQ19BTFBIQV07XG4gICAgb2JqZWN0W0NPTlNULkJMRU5EX01PREVTLkxVTUlOT1NJVFldICAgID0gW2dsLk9ORSwgICAgICAgZ2wuT05FX01JTlVTX1NSQ19BTFBIQV07XG5cbiAgICByZXR1cm4gb2JqZWN0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IG1hcFdlYkdMQmxlbmRNb2Rlc1RvUGl4aTtcbiIsIkNPTlNUID0gcmVxdWlyZSgnLi4vLi4vLi4vY29uc3QnKTtcblxuLyoqXG4gKiBHZW5lcmljIE1hc2sgU3RhY2sgZGF0YSBzdHJ1Y3R1cmVcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqL1xuZnVuY3Rpb24gbWFwV2ViR0xEcmF3TW9kZXNUb1BpeGkoZ2wsIG9iamVjdClcbntcblx0b2JqZWN0PSBvYmplY3QgfHwge307XG5cbiAgICBvYmplY3RbQ09OU1QuRFJBV19NT0RFUy5QT0lOVFNdICAgICAgICAgPSBnbC5QT0lOVFM7XG4gICAgb2JqZWN0W0NPTlNULkRSQVdfTU9ERVMuTElORVNdICAgICAgICAgID0gZ2wuTElORVM7XG4gICAgb2JqZWN0W0NPTlNULkRSQVdfTU9ERVMuTElORV9MT09QXSAgICAgID0gZ2wuTElORV9MT09QO1xuICAgIG9iamVjdFtDT05TVC5EUkFXX01PREVTLkxJTkVfU1RSSVBdICAgICA9IGdsLkxJTkVfU1RSSVA7XG4gICAgb2JqZWN0W0NPTlNULkRSQVdfTU9ERVMuVFJJQU5HTEVTXSAgICAgID0gZ2wuVFJJQU5HTEVTO1xuICAgIG9iamVjdFtDT05TVC5EUkFXX01PREVTLlRSSUFOR0xFX1NUUklQXSA9IGdsLlRSSUFOR0xFX1NUUklQO1xuICAgIG9iamVjdFtDT05TVC5EUkFXX01PREVTLlRSSUFOR0xFX0ZBTl0gICA9IGdsLlRSSUFOR0xFX0ZBTjtcblxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IG1hcFdlYkdMRHJhd01vZGVzVG9QaXhpO1xuIiwidmFyIG1hdGggPSByZXF1aXJlKCcuLi9tYXRoJyksXG4gICAgVGV4dHVyZSA9IHJlcXVpcmUoJy4uL3RleHR1cmVzL1RleHR1cmUnKSxcbiAgICBDb250YWluZXIgPSByZXF1aXJlKCcuLi9kaXNwbGF5L0NvbnRhaW5lcicpLFxuICAgIENhbnZhc1RpbnRlciA9IHJlcXVpcmUoJy4uL3JlbmRlcmVycy9jYW52YXMvdXRpbHMvQ2FudmFzVGludGVyJyksXG4gICAgdXRpbHMgPSByZXF1aXJlKCcuLi91dGlscycpLFxuICAgIENPTlNUID0gcmVxdWlyZSgnLi4vY29uc3QnKSxcbiAgICB0ZW1wUG9pbnQgPSBuZXcgbWF0aC5Qb2ludCgpO1xuXG4vKipcbiAqIFRoZSBTcHJpdGUgb2JqZWN0IGlzIHRoZSBiYXNlIGZvciBhbGwgdGV4dHVyZWQgb2JqZWN0cyB0aGF0IGFyZSByZW5kZXJlZCB0byB0aGUgc2NyZWVuXG4gKlxuICogQSBzcHJpdGUgY2FuIGJlIGNyZWF0ZWQgZGlyZWN0bHkgZnJvbSBhbiBpbWFnZSBsaWtlIHRoaXM6XG4gKlxuICogYGBganNcbiAqIHZhciBzcHJpdGUgPSBuZXcgUElYSS5TcHJpdGUuZnJvbUltYWdlKCdhc3NldHMvaW1hZ2UucG5nJyk7XG4gKiBgYGBcbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQ29udGFpbmVyXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIHRleHR1cmUge1BJWEkuVGV4dHVyZX0gVGhlIHRleHR1cmUgZm9yIHRoaXMgc3ByaXRlXG4gKi9cbmZ1bmN0aW9uIFNwcml0ZSh0ZXh0dXJlKVxue1xuICAgIENvbnRhaW5lci5jYWxsKHRoaXMpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGFuY2hvciBzZXRzIHRoZSBvcmlnaW4gcG9pbnQgb2YgdGhlIHRleHR1cmUuXG4gICAgICogVGhlIGRlZmF1bHQgaXMgMCwwIHRoaXMgbWVhbnMgdGhlIHRleHR1cmUncyBvcmlnaW4gaXMgdGhlIHRvcCBsZWZ0XG4gICAgICogU2V0dGluZyB0aGUgYW5jaG9yIHRvIDAuNSwwLjUgbWVhbnMgdGhlIHRleHR1cmUncyBvcmlnaW4gaXMgY2VudGVyZWRcbiAgICAgKiBTZXR0aW5nIHRoZSBhbmNob3IgdG8gMSwxIHdvdWxkIG1lYW4gdGhlIHRleHR1cmUncyBvcmlnaW4gcG9pbnQgd2lsbCBiZSB0aGUgYm90dG9tIHJpZ2h0IGNvcm5lclxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5Qb2ludH1cbiAgICAgKi9cbiAgICB0aGlzLmFuY2hvciA9IG5ldyBtYXRoLlBvaW50KCk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgdGV4dHVyZSB0aGF0IHRoZSBzcHJpdGUgaXMgdXNpbmdcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuVGV4dHVyZX1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX3RleHR1cmUgPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHdpZHRoIG9mIHRoZSBzcHJpdGUgKHRoaXMgaXMgaW5pdGlhbGx5IHNldCBieSB0aGUgdGV4dHVyZSlcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX3dpZHRoID0gMDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBoZWlnaHQgb2YgdGhlIHNwcml0ZSAodGhpcyBpcyBpbml0aWFsbHkgc2V0IGJ5IHRoZSB0ZXh0dXJlKVxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5faGVpZ2h0ID0gMDtcblxuICAgIC8qKlxuICAgICAqIFRoZSB0aW50IGFwcGxpZWQgdG8gdGhlIHNwcml0ZS4gVGhpcyBpcyBhIGhleCB2YWx1ZS4gQSB2YWx1ZSBvZiAweEZGRkZGRiB3aWxsIHJlbW92ZSBhbnkgdGludCBlZmZlY3QuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMHhGRkZGRkZcbiAgICAgKi9cbiAgICB0aGlzLnRpbnQgPSAweEZGRkZGRjtcblxuICAgIC8qKlxuICAgICAqIFRoZSBibGVuZCBtb2RlIHRvIGJlIGFwcGxpZWQgdG8gdGhlIHNwcml0ZS4gQXBwbHkgYSB2YWx1ZSBvZiBgUElYSS5CTEVORF9NT0RFUy5OT1JNQUxgIHRvIHJlc2V0IHRoZSBibGVuZCBtb2RlLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IFBJWEkuQkxFTkRfTU9ERVMuTk9STUFMXG4gICAgICogQHNlZSBQSVhJLkJMRU5EX01PREVTXG4gICAgICovXG4gICAgdGhpcy5ibGVuZE1vZGUgPSBDT05TVC5CTEVORF9NT0RFUy5OT1JNQUw7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgc2hhZGVyIHRoYXQgd2lsbCBiZSB1c2VkIHRvIHJlbmRlciB0aGUgc3ByaXRlLiBTZXQgdG8gbnVsbCB0byByZW1vdmUgYSBjdXJyZW50IHNoYWRlci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuQWJzdHJhY3RGaWx0ZXJ8UElYSS5TaGFkZXJ9XG4gICAgICovXG4gICAgdGhpcy5zaGFkZXIgPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogQW4gaW50ZXJuYWwgY2FjaGVkIHZhbHVlIG9mIHRoZSB0aW50LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDB4RkZGRkZGXG4gICAgICovXG4gICAgdGhpcy5jYWNoZWRUaW50ID0gMHhGRkZGRkY7XG5cbiAgICAvLyBjYWxsIHRleHR1cmUgc2V0dGVyXG4gICAgdGhpcy50ZXh0dXJlID0gdGV4dHVyZSB8fCBUZXh0dXJlLkVNUFRZO1xuICAgIHRoaXMudGV4dHVyZURpcnR5ID0gdHJ1ZVxuICAgIHRoaXMudmVydGV4RGlydHkgPSB0cnVlO1xuICAgIHRoaXMudmVydGV4RGF0YSA9IG5ldyBGbG9hdDMyQXJyYXkoOCk7XG59XG5cbi8vIGNvbnN0cnVjdG9yXG5TcHJpdGUucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShDb250YWluZXIucHJvdG90eXBlKTtcblNwcml0ZS5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBTcHJpdGU7XG5tb2R1bGUuZXhwb3J0cyA9IFNwcml0ZTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoU3ByaXRlLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFRoZSB3aWR0aCBvZiB0aGUgc3ByaXRlLCBzZXR0aW5nIHRoaXMgd2lsbCBhY3R1YWxseSBtb2RpZnkgdGhlIHNjYWxlIHRvIGFjaGlldmUgdGhlIHZhbHVlIHNldFxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLlNwcml0ZSNcbiAgICAgKi9cbiAgICB3aWR0aDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiBNYXRoLmFicyh0aGlzLnNjYWxlLngpICogdGhpcy50ZXh0dXJlLl9mcmFtZS53aWR0aDtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHZhciBzaWduID0gdXRpbHMuc2lnbih0aGlzLnNjYWxlLngpIHx8IDE7XG4gICAgICAgICAgICB0aGlzLnNjYWxlLnggPSBzaWduICogdmFsdWUgLyB0aGlzLnRleHR1cmUuX2ZyYW1lLndpZHRoO1xuICAgICAgICAgICAgdGhpcy5fd2lkdGggPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBUaGUgaGVpZ2h0IG9mIHRoZSBzcHJpdGUsIHNldHRpbmcgdGhpcyB3aWxsIGFjdHVhbGx5IG1vZGlmeSB0aGUgc2NhbGUgdG8gYWNoaWV2ZSB0aGUgdmFsdWUgc2V0XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuU3ByaXRlI1xuICAgICAqL1xuICAgIGhlaWdodDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiAgTWF0aC5hYnModGhpcy5zY2FsZS55KSAqIHRoaXMudGV4dHVyZS5fZnJhbWUuaGVpZ2h0O1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdmFyIHNpZ24gPSB1dGlscy5zaWduKHRoaXMuc2NhbGUueSkgfHwgMTtcbiAgICAgICAgICAgIHRoaXMuc2NhbGUueSA9IHNpZ24gKiB2YWx1ZSAvIHRoaXMudGV4dHVyZS5fZnJhbWUuaGVpZ2h0O1xuICAgICAgICAgICAgdGhpcy5faGVpZ2h0ID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVGhlIHRleHR1cmUgdGhhdCB0aGUgc3ByaXRlIGlzIHVzaW5nXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlRleHR1cmV9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuU3ByaXRlI1xuICAgICAqL1xuICAgIHRleHR1cmU6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gIHRoaXMuX3RleHR1cmU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICBpZiAodGhpcy5fdGV4dHVyZSA9PT0gdmFsdWUpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLl90ZXh0dXJlID0gdmFsdWU7XG4gICAgICAgICAgICB0aGlzLmNhY2hlZFRpbnQgPSAweEZGRkZGRjtcblxuICAgICAgICAgICAgdGhpcy50ZXh0dXJlRGlydHkgPSB0cnVlO1xuXG4gICAgICAgICAgICBpZiAodmFsdWUpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgLy8gd2FpdCBmb3IgdGhlIHRleHR1cmUgdG8gbG9hZFxuICAgICAgICAgICAgICAgIGlmICh2YWx1ZS5iYXNlVGV4dHVyZS5oYXNMb2FkZWQpXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9vblRleHR1cmVVcGRhdGUoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgdmFsdWUub25jZSgndXBkYXRlJywgdGhpcy5fb25UZXh0dXJlVXBkYXRlLCB0aGlzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG59KTtcblxuLyoqXG4gKiBXaGVuIHRoZSB0ZXh0dXJlIGlzIHVwZGF0ZWQsIHRoaXMgZXZlbnQgd2lsbCBmaXJlIHRvIHVwZGF0ZSB0aGUgc2NhbGUgYW5kIGZyYW1lXG4gKlxuICogQHByaXZhdGVcbiAqL1xuU3ByaXRlLnByb3RvdHlwZS5fb25UZXh0dXJlVXBkYXRlID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLnRleHR1cmVEaXJ0eSA9IHRydWU7XG5cbiAgICAvLyBzbyBpZiBfd2lkdGggaXMgMCB0aGVuIHdpZHRoIHdhcyBub3Qgc2V0Li5cbiAgICBpZiAodGhpcy5fd2lkdGgpXG4gICAge1xuICAgICAgICB0aGlzLnNjYWxlLnggPSB1dGlscy5zaWduKHRoaXMuc2NhbGUueCkgKiB0aGlzLl93aWR0aCAvIHRoaXMudGV4dHVyZS5mcmFtZS53aWR0aDtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5faGVpZ2h0KVxuICAgIHtcbiAgICAgICAgdGhpcy5zY2FsZS55ID0gdXRpbHMuc2lnbih0aGlzLnNjYWxlLnkpICogdGhpcy5faGVpZ2h0IC8gdGhpcy50ZXh0dXJlLmZyYW1lLmhlaWdodDtcbiAgICB9XG59O1xuXG5TcHJpdGUucHJvdG90eXBlLmNhY2x1bGF0ZVZlcnRpY2VzID0gZnVuY3Rpb24gKClcbntcblxuICAgIHZhciB0ZXh0dXJlID0gdGhpcy5fdGV4dHVyZSxcbiAgICAgICAgd3QgPSB0aGlzLndvcmxkVHJhbnNmb3JtLFxuICAgICAgICBhID0gd3QuYSwgYiA9IHd0LmIsIGMgPSB3dC5jLCBkID0gd3QuZCwgdHggPSB3dC50eCwgdHkgPSB3dC50eSxcbiAgICAgICAgdmVydGV4RGF0YSA9IHRoaXMudmVydGV4RGF0YSxcbiAgICAgICAgdzAsIHcxLCBoMCwgaDEsXG4gICAgICAgIHRyaW0gPSB0ZXh0dXJlLnRyaW07XG4gICAgXG4gICAgaWYgKHRyaW0pXG4gICAge1xuICAgICAgICAvLyBpZiB0aGUgc3ByaXRlIGlzIHRyaW1tZWQgYW5kIGlzIG5vdCBhIHRpbGluZ3Nwcml0ZSB0aGVuIHdlIG5lZWQgdG8gYWRkIHRoZSBleHRyYSBzcGFjZSBiZWZvcmUgdHJhbnNmb3JtaW5nIHRoZSBzcHJpdGUgY29vcmRzLi5cbiAgICAgICAgdzEgPSB0cmltLnggLSB0aGlzLmFuY2hvci54ICogdHJpbS53aWR0aDtcbiAgICAgICAgdzAgPSB3MSArIHRleHR1cmUuY3JvcC53aWR0aDtcblxuICAgICAgICBoMSA9IHRyaW0ueSAtIHRoaXMuYW5jaG9yLnkgKiB0cmltLmhlaWdodDtcbiAgICAgICAgaDAgPSBoMSArIHRleHR1cmUuY3JvcC5oZWlnaHQ7XG5cbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgdzAgPSAodGV4dHVyZS5fZnJhbWUud2lkdGggKSAqICgxLXRoaXMuYW5jaG9yLngpO1xuICAgICAgICB3MSA9ICh0ZXh0dXJlLl9mcmFtZS53aWR0aCApICogLXRoaXMuYW5jaG9yLng7XG5cbiAgICAgICAgaDAgPSB0ZXh0dXJlLl9mcmFtZS5oZWlnaHQgKiAoMS10aGlzLmFuY2hvci55KTtcbiAgICAgICAgaDEgPSB0ZXh0dXJlLl9mcmFtZS5oZWlnaHQgKiAtdGhpcy5hbmNob3IueTtcbiAgICB9XG5cbiAgICAvLyB4eVxuICAgIHZlcnRleERhdGFbMF0gPSBhICogdzEgKyBjICogaDEgKyB0eDtcbiAgICB2ZXJ0ZXhEYXRhWzFdID0gZCAqIGgxICsgYiAqIHcxICsgdHk7XG5cbiAgICAvLyB4eVxuICAgIHZlcnRleERhdGFbMl0gPSBhICogdzAgKyBjICogaDEgKyB0eDtcbiAgICB2ZXJ0ZXhEYXRhWzNdID0gZCAqIGgxICsgYiAqIHcwICsgdHk7XG5cbiAgICAgLy8geHlcbiAgICB2ZXJ0ZXhEYXRhWzRdID0gYSAqIHcwICsgYyAqIGgwICsgdHg7XG4gICAgdmVydGV4RGF0YVs1XSA9IGQgKiBoMCArIGIgKiB3MCArIHR5O1xuXG4gICAgLy8geHlcbiAgICB2ZXJ0ZXhEYXRhWzZdID0gYSAqIHcxICsgYyAqIGgwICsgdHg7XG4gICAgdmVydGV4RGF0YVs3XSA9IGQgKiBoMCArIGIgKiB3MSArIHR5O1xuXG5cbn1cblxuLyoqXG4qXG4qIFJlbmRlcnMgdGhlIG9iamVjdCB1c2luZyB0aGUgV2ViR0wgcmVuZGVyZXJcbipcbiogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLldlYkdMUmVuZGVyZXJ9XG4qIEBwcml2YXRlXG4qL1xuU3ByaXRlLnByb3RvdHlwZS5fcmVuZGVyV2ViR0wgPSBmdW5jdGlvbiAocmVuZGVyZXIpXG57XG4gICAgaWYodGhpcy50ZXh0dXJlRGlydHkpXG4gICAge1xuICAgICAgICB0aGlzLnRleHR1cmVEaXJ0eSA9IGZhbHNlO1xuXG4gICAgICAgIHRoaXMuX29uVGV4dHVyZVVwZGF0ZSgpO1xuICAgICAgICBcbiAgICAgICAgdGhpcy52ZXJ0ZXhEaXJ0eSA9IHRydWU7XG4gICAgfVxuXG4gICAgaWYodGhpcy52ZXJ0ZXhEaXJ0eSlcbiAgICB7XG4gICAgICAgIHRoaXMudmVydGV4RGlydHkgPSBmYWxzZTtcblxuICAgICAgICAvLyBzZXQgdGhlIHZlcnRleCBkYXRhXG4gICAgICAgIHRoaXMuY2FjbHVsYXRlVmVydGljZXMoKTtcblxuICAgIH1cbiAgICBcbiAgICByZW5kZXJlci5zZXRPYmplY3RSZW5kZXJlcihyZW5kZXJlci5wbHVnaW5zLnNwcml0ZSk7XG4gICAgcmVuZGVyZXIucGx1Z2lucy5zcHJpdGUucmVuZGVyKHRoaXMpO1xufTtcblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBib3VuZHMgb2YgdGhlIFNwcml0ZSBhcyBhIHJlY3RhbmdsZS4gVGhlIGJvdW5kcyBjYWxjdWxhdGlvbiB0YWtlcyB0aGUgd29ybGRUcmFuc2Zvcm0gaW50byBhY2NvdW50LlxuICpcbiAqIEBwYXJhbSBtYXRyaXgge1BJWEkuTWF0cml4fSB0aGUgdHJhbnNmb3JtYXRpb24gbWF0cml4IG9mIHRoZSBzcHJpdGVcbiAqIEByZXR1cm4ge1BJWEkuUmVjdGFuZ2xlfSB0aGUgZnJhbWluZyByZWN0YW5nbGVcbiAqL1xuU3ByaXRlLnByb3RvdHlwZS5nZXRCb3VuZHMgPSBmdW5jdGlvbiAobWF0cml4KVxue1xuICAgIGlmKCF0aGlzLl9jdXJyZW50Qm91bmRzKVxuICAgIHtcbiAgICAgICAgaWYodGhpcy52ZXJ0ZXhEaXJ0eSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy52ZXJ0ZXhEaXJ0eSA9IGZhbHNlO1xuXG4gICAgICAgICAgICAvLyBzZXQgdGhlIHZlcnRleCBkYXRhXG4gICAgICAgICAgICB0aGlzLmNhY2x1bGF0ZVZlcnRpY2VzKCk7XG5cbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBtaW5YLFxuICAgICAgICAgICAgbWF4WCxcbiAgICAgICAgICAgIG1pblksXG4gICAgICAgICAgICBtYXhZLFxuICAgICAgICAgICAgdmVydGV4RGF0YSA9IHRoaXMudmVydGV4RGF0YTtcblxuICAgICAgICB2YXIgeDEgPSB2ZXJ0ZXhEYXRhWzBdXG4gICAgICAgIHZhciB5MSA9IHZlcnRleERhdGFbMV1cblxuICAgICAgICB2YXIgeDIgPSB2ZXJ0ZXhEYXRhWzJdXG4gICAgICAgIHZhciB5MiA9IHZlcnRleERhdGFbM11cblxuICAgICAgICB2YXIgeDMgPSB2ZXJ0ZXhEYXRhWzRdXG4gICAgICAgIHZhciB5MyA9IHZlcnRleERhdGFbNV1cblxuICAgICAgICB2YXIgeDQgPSB2ZXJ0ZXhEYXRhWzZdXG4gICAgICAgIHZhciB5NCA9IHZlcnRleERhdGFbN11cblxuICAgICAgICBtaW5YID0geDE7XG4gICAgICAgIG1pblggPSB4MiA8IG1pblggPyB4MiA6IG1pblg7XG4gICAgICAgIG1pblggPSB4MyA8IG1pblggPyB4MyA6IG1pblg7XG4gICAgICAgIG1pblggPSB4NCA8IG1pblggPyB4NCA6IG1pblg7XG5cbiAgICAgICAgbWluWSA9IHkxO1xuICAgICAgICBtaW5ZID0geTIgPCBtaW5ZID8geTIgOiBtaW5ZO1xuICAgICAgICBtaW5ZID0geTMgPCBtaW5ZID8geTMgOiBtaW5ZO1xuICAgICAgICBtaW5ZID0geTQgPCBtaW5ZID8geTQgOiBtaW5ZO1xuXG4gICAgICAgIG1heFggPSB4MTtcbiAgICAgICAgbWF4WCA9IHgyID4gbWF4WCA/IHgyIDogbWF4WDtcbiAgICAgICAgbWF4WCA9IHgzID4gbWF4WCA/IHgzIDogbWF4WDtcbiAgICAgICAgbWF4WCA9IHg0ID4gbWF4WCA/IHg0IDogbWF4WDtcblxuICAgICAgICBtYXhZID0geTE7XG4gICAgICAgIG1heFkgPSB5MiA+IG1heFkgPyB5MiA6IG1heFk7XG4gICAgICAgIG1heFkgPSB5MyA+IG1heFkgPyB5MyA6IG1heFk7XG4gICAgICAgIG1heFkgPSB5NCA+IG1heFkgPyB5NCA6IG1heFk7XG5cbiAgICAgICAgLy8gY2hlY2sgZm9yIGNoaWxkcmVuXG4gICAgICAgIGlmKHRoaXMuY2hpbGRyZW4ubGVuZ3RoKVxuICAgICAgICB7XG4gICAgICAgICAgICB2YXIgY2hpbGRCb3VuZHMgPSB0aGlzLmNvbnRhaW5lckdldEJvdW5kcygpO1xuXG4gICAgICAgICAgICB3MCA9IGNoaWxkQm91bmRzLng7XG4gICAgICAgICAgICB3MSA9IGNoaWxkQm91bmRzLnggKyBjaGlsZEJvdW5kcy53aWR0aDtcbiAgICAgICAgICAgIGgwID0gY2hpbGRCb3VuZHMueTtcbiAgICAgICAgICAgIGgxID0gY2hpbGRCb3VuZHMueSArIGNoaWxkQm91bmRzLmhlaWdodDtcblxuICAgICAgICAgICAgbWluWCA9IChtaW5YIDwgdzApID8gbWluWCA6IHcwO1xuICAgICAgICAgICAgbWluWSA9IChtaW5ZIDwgaDApID8gbWluWSA6IGgwO1xuXG4gICAgICAgICAgICBtYXhYID0gKG1heFggPiB3MSkgPyBtYXhYIDogdzE7XG4gICAgICAgICAgICBtYXhZID0gKG1heFkgPiBoMSkgPyBtYXhZIDogaDE7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgYm91bmRzID0gdGhpcy5fYm91bmRzO1xuXG4gICAgICAgIGJvdW5kcy54ID0gbWluWDtcbiAgICAgICAgYm91bmRzLndpZHRoID0gbWF4WCAtIG1pblg7XG5cbiAgICAgICAgYm91bmRzLnkgPSBtaW5ZO1xuICAgICAgICBib3VuZHMuaGVpZ2h0ID0gbWF4WSAtIG1pblk7XG5cbiAgICAgICAgLy8gc3RvcmUgYSByZWZlcmVuY2Ugc28gdGhhdCBpZiB0aGlzIGZ1bmN0aW9uIGdldHMgY2FsbGVkIGFnYWluIGluIHRoZSByZW5kZXIgY3ljbGUgd2UgZG8gbm90IGhhdmUgdG8gcmVjYWxjdWxhdGVcbiAgICAgICAgdGhpcy5fY3VycmVudEJvdW5kcyA9IGJvdW5kcztcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5fY3VycmVudEJvdW5kcztcbn07XG5cbi8qKlxuICogR2V0cyB0aGUgbG9jYWwgYm91bmRzIG9mIHRoZSBzcHJpdGUgb2JqZWN0LlxuICpcbiAqL1xuU3ByaXRlLnByb3RvdHlwZS5nZXRMb2NhbEJvdW5kcyA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy5fYm91bmRzLnggPSAtdGhpcy5fdGV4dHVyZS5fZnJhbWUud2lkdGggKiB0aGlzLmFuY2hvci54O1xuICAgIHRoaXMuX2JvdW5kcy55ID0gLXRoaXMuX3RleHR1cmUuX2ZyYW1lLmhlaWdodCAqIHRoaXMuYW5jaG9yLnk7XG4gICAgdGhpcy5fYm91bmRzLndpZHRoID0gdGhpcy5fdGV4dHVyZS5fZnJhbWUud2lkdGg7XG4gICAgdGhpcy5fYm91bmRzLmhlaWdodCA9IHRoaXMuX3RleHR1cmUuX2ZyYW1lLmhlaWdodDtcbiAgICByZXR1cm4gdGhpcy5fYm91bmRzO1xufTtcblxuLyoqXG4qIFRlc3RzIGlmIGEgcG9pbnQgaXMgaW5zaWRlIHRoaXMgc3ByaXRlXG4qXG4qIEBwYXJhbSBwb2ludCB7UElYSS5Qb2ludH0gdGhlIHBvaW50IHRvIHRlc3RcbiogQHJldHVybiB7Ym9vbGVhbn0gdGhlIHJlc3VsdCBvZiB0aGUgdGVzdFxuKi9cblNwcml0ZS5wcm90b3R5cGUuY29udGFpbnNQb2ludCA9IGZ1bmN0aW9uKCBwb2ludCApXG57XG4gICAgdGhpcy53b3JsZFRyYW5zZm9ybS5hcHBseUludmVyc2UocG9pbnQsICB0ZW1wUG9pbnQpO1xuXG4gICAgdmFyIHdpZHRoID0gdGhpcy5fdGV4dHVyZS5fZnJhbWUud2lkdGg7XG4gICAgdmFyIGhlaWdodCA9IHRoaXMuX3RleHR1cmUuX2ZyYW1lLmhlaWdodDtcbiAgICB2YXIgeDEgPSAtd2lkdGggKiB0aGlzLmFuY2hvci54O1xuICAgIHZhciB5MTtcblxuICAgIGlmICggdGVtcFBvaW50LnggPiB4MSAmJiB0ZW1wUG9pbnQueCA8IHgxICsgd2lkdGggKVxuICAgIHtcbiAgICAgICAgeTEgPSAtaGVpZ2h0ICogdGhpcy5hbmNob3IueTtcblxuICAgICAgICBpZiAoIHRlbXBQb2ludC55ID4geTEgJiYgdGVtcFBvaW50LnkgPCB5MSArIGhlaWdodCApXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xufTtcblxuLyoqXG4qIFJlbmRlcnMgdGhlIG9iamVjdCB1c2luZyB0aGUgQ2FudmFzIHJlbmRlcmVyXG4qXG4qIEBwYXJhbSByZW5kZXJlciB7UElYSS5DYW52YXNSZW5kZXJlcn0gVGhlIHJlbmRlcmVyXG4qIEBwcml2YXRlXG4qL1xuU3ByaXRlLnByb3RvdHlwZS5fcmVuZGVyQ2FudmFzID0gZnVuY3Rpb24gKHJlbmRlcmVyKVxue1xuICAgIGlmICh0aGlzLnRleHR1cmUuY3JvcC53aWR0aCA8PSAwIHx8IHRoaXMudGV4dHVyZS5jcm9wLmhlaWdodCA8PSAwKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHZhciBjb21wb3NpdGVPcGVyYXRpb24gPSByZW5kZXJlci5ibGVuZE1vZGVzW3RoaXMuYmxlbmRNb2RlXTtcbiAgICBpZiAoY29tcG9zaXRlT3BlcmF0aW9uICE9PSByZW5kZXJlci5jb250ZXh0Lmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbilcbiAgICB7XG4gICAgICAgIHJlbmRlcmVyLmNvbnRleHQuZ2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uID0gY29tcG9zaXRlT3BlcmF0aW9uO1xuICAgIH1cblxuICAgIC8vICBJZ25vcmUgbnVsbCBzb3VyY2VzXG4gICAgaWYgKHRoaXMudGV4dHVyZS52YWxpZClcbiAgICB7XG4gICAgICAgIHZhciB0ZXh0dXJlID0gdGhpcy5fdGV4dHVyZSxcbiAgICAgICAgICAgIHd0ID0gdGhpcy53b3JsZFRyYW5zZm9ybSxcbiAgICAgICAgICAgIGR4LFxuICAgICAgICAgICAgZHksXG4gICAgICAgICAgICB3aWR0aCxcbiAgICAgICAgICAgIGhlaWdodDtcblxuICAgICAgICByZW5kZXJlci5jb250ZXh0Lmdsb2JhbEFscGhhID0gdGhpcy53b3JsZEFscGhhO1xuXG4gICAgICAgIC8vIElmIHNtb290aGluZ0VuYWJsZWQgaXMgc3VwcG9ydGVkIGFuZCB3ZSBuZWVkIHRvIGNoYW5nZSB0aGUgc21vb3RoaW5nIHByb3BlcnR5IGZvciB0aGlzIHRleHR1cmVcbiAgICAgICAgdmFyIHNtb290aGluZ0VuYWJsZWQgPSB0ZXh0dXJlLmJhc2VUZXh0dXJlLnNjYWxlTW9kZSA9PT0gQ09OU1QuU0NBTEVfTU9ERVMuTElORUFSO1xuICAgICAgICBpZiAocmVuZGVyZXIuc21vb3RoUHJvcGVydHkgJiYgcmVuZGVyZXIuY29udGV4dFtyZW5kZXJlci5zbW9vdGhQcm9wZXJ0eV0gIT09IHNtb290aGluZ0VuYWJsZWQpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJlbmRlcmVyLmNvbnRleHRbcmVuZGVyZXIuc21vb3RoUHJvcGVydHldID0gc21vb3RoaW5nRW5hYmxlZDtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIElmIHRoZSB0ZXh0dXJlIGlzIHRyaW1tZWQgd2Ugb2Zmc2V0IGJ5IHRoZSB0cmltIHgveSwgb3RoZXJ3aXNlIHdlIHVzZSB0aGUgZnJhbWUgZGltZW5zaW9uc1xuXG4gICAgICAgIGlmKHRleHR1cmUucm90YXRlKVxuICAgICAgICB7XG4gICAgICAgICAgICB3aWR0aCA9IHRleHR1cmUuY3JvcC5oZWlnaHQ7XG4gICAgICAgICAgICBoZWlnaHQgPSB0ZXh0dXJlLmNyb3Aud2lkdGg7XG5cbiAgICAgICAgICAgIGR4ID0gKHRleHR1cmUudHJpbSkgPyB0ZXh0dXJlLnRyaW0ueSAtIHRoaXMuYW5jaG9yLnkgKiB0ZXh0dXJlLnRyaW0uaGVpZ2h0IDogdGhpcy5hbmNob3IueSAqIC10ZXh0dXJlLl9mcmFtZS5oZWlnaHQ7XG4gICAgICAgICAgICBkeSA9ICh0ZXh0dXJlLnRyaW0pID8gdGV4dHVyZS50cmltLnggLSB0aGlzLmFuY2hvci54ICogdGV4dHVyZS50cmltLndpZHRoIDogdGhpcy5hbmNob3IueCAqIC10ZXh0dXJlLl9mcmFtZS53aWR0aDtcbiAgICAgICBcbiAgICAgICAgICAgIGR4ICs9IHdpZHRoO1xuXG4gICAgICAgICAgICB3dC50eCA9IGR5ICogd3QuYSArIGR4ICogd3QuYyArIHd0LnR4O1xuICAgICAgICAgICAgd3QudHkgPSBkeSAqIHd0LmIgKyBkeCAqIHd0LmQgKyB3dC50eTtcblxuICAgICAgICAgICAgdmFyIHRlbXAgPSB3dC5hO1xuICAgICAgICAgICAgd3QuYSAgPSAtd3QuYztcbiAgICAgICAgICAgIHd0LmMgID0gIHRlbXA7XG5cbiAgICAgICAgICAgIHRlbXAgPSB3dC5iO1xuICAgICAgICAgICAgd3QuYiAgPSAtd3QuZDtcbiAgICAgICAgICAgIHd0LmQgID0gIHRlbXA7XG5cbiAgICAgICAgICAgIC8vIHRoZSBhbmNob3IgaGFzIGFscmVhZHkgYmVlbiBhcHBsaWVkIGFib3ZlLCBzbyBsZXRzIHNldCBpdCB0byB6ZXJvXG4gICAgICAgICAgICBkeCA9IDA7XG4gICAgICAgICAgICBkeSA9IDA7XG5cbiAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgIHtcbiAgICAgICAgICAgIHdpZHRoID0gdGV4dHVyZS5jcm9wLndpZHRoO1xuICAgICAgICAgICAgaGVpZ2h0ID0gdGV4dHVyZS5jcm9wLmhlaWdodDtcblxuICAgICAgICAgICAgZHggPSAodGV4dHVyZS50cmltKSA/IHRleHR1cmUudHJpbS54IC0gdGhpcy5hbmNob3IueCAqIHRleHR1cmUudHJpbS53aWR0aCA6IHRoaXMuYW5jaG9yLnggKiAtdGV4dHVyZS5fZnJhbWUud2lkdGg7XG4gICAgICAgICAgICBkeSA9ICh0ZXh0dXJlLnRyaW0pID8gdGV4dHVyZS50cmltLnkgLSB0aGlzLmFuY2hvci55ICogdGV4dHVyZS50cmltLmhlaWdodCA6IHRoaXMuYW5jaG9yLnkgKiAtdGV4dHVyZS5fZnJhbWUuaGVpZ2h0O1xuICAgICAgICB9XG5cblxuXG4gICAgICAgIC8vIEFsbG93IGZvciBwaXhlbCByb3VuZGluZ1xuICAgICAgICBpZiAocmVuZGVyZXIucm91bmRQaXhlbHMpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJlbmRlcmVyLmNvbnRleHQuc2V0VHJhbnNmb3JtKFxuICAgICAgICAgICAgICAgIHd0LmEsXG4gICAgICAgICAgICAgICAgd3QuYixcbiAgICAgICAgICAgICAgICB3dC5jLFxuICAgICAgICAgICAgICAgIHd0LmQsXG4gICAgICAgICAgICAgICAgKHd0LnR4ICogcmVuZGVyZXIucmVzb2x1dGlvbikgfCAwLFxuICAgICAgICAgICAgICAgICh3dC50eSAqIHJlbmRlcmVyLnJlc29sdXRpb24pIHwgMFxuICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgZHggPSBkeCB8IDA7XG4gICAgICAgICAgICBkeSA9IGR5IHwgMDtcbiAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgIHtcblxuICAgICAgICAgICAgcmVuZGVyZXIuY29udGV4dC5zZXRUcmFuc2Zvcm0oXG4gICAgICAgICAgICAgICAgd3QuYSxcbiAgICAgICAgICAgICAgICB3dC5iLFxuICAgICAgICAgICAgICAgIHd0LmMsXG4gICAgICAgICAgICAgICAgd3QuZCxcbiAgICAgICAgICAgICAgICB3dC50eCAqIHJlbmRlcmVyLnJlc29sdXRpb24sXG4gICAgICAgICAgICAgICAgd3QudHkgKiByZW5kZXJlci5yZXNvbHV0aW9uXG4gICAgICAgICAgICApO1xuXG5cbiAgICAgICAgfVxuXG4gICAgICAgIHZhciByZXNvbHV0aW9uID0gdGV4dHVyZS5iYXNlVGV4dHVyZS5yZXNvbHV0aW9uO1xuXG4gICAgICAgIGlmICh0aGlzLnRpbnQgIT09IDB4RkZGRkZGKVxuICAgICAgICB7XG4gICAgICAgICAgICBpZiAodGhpcy5jYWNoZWRUaW50ICE9PSB0aGlzLnRpbnQpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdGhpcy5jYWNoZWRUaW50ID0gdGhpcy50aW50O1xuXG4gICAgICAgICAgICAgICAgLy8gVE9ETyBjbGVhbiB1cCBjYWNoaW5nIC0gaG93IHRvIGNsZWFuIHVwIHRoZSBjYWNoZXM/XG4gICAgICAgICAgICAgICAgdGhpcy50aW50ZWRUZXh0dXJlID0gQ2FudmFzVGludGVyLmdldFRpbnRlZFRleHR1cmUodGhpcywgdGhpcy50aW50KTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmVuZGVyZXIuY29udGV4dC5kcmF3SW1hZ2UoXG4gICAgICAgICAgICAgICAgdGhpcy50aW50ZWRUZXh0dXJlLFxuICAgICAgICAgICAgICAgIDAsXG4gICAgICAgICAgICAgICAgMCxcbiAgICAgICAgICAgICAgICB3aWR0aCAqIHJlc29sdXRpb24sXG4gICAgICAgICAgICAgICAgaGVpZ2h0ICogcmVzb2x1dGlvbixcbiAgICAgICAgICAgICAgICBkeCAqIHJlbmRlcmVyLnJlc29sdXRpb24sXG4gICAgICAgICAgICAgICAgZHkgKiByZW5kZXJlci5yZXNvbHV0aW9uLFxuICAgICAgICAgICAgICAgIHdpZHRoICogcmVuZGVyZXIucmVzb2x1dGlvbixcbiAgICAgICAgICAgICAgICBoZWlnaHQgKiByZW5kZXJlci5yZXNvbHV0aW9uXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIGVsc2VcbiAgICAgICAge1xuICAgICAgICAgICAgcmVuZGVyZXIuY29udGV4dC5kcmF3SW1hZ2UoXG4gICAgICAgICAgICAgICAgdGV4dHVyZS5iYXNlVGV4dHVyZS5zb3VyY2UsXG4gICAgICAgICAgICAgICAgdGV4dHVyZS5jcm9wLnggKiByZXNvbHV0aW9uLFxuICAgICAgICAgICAgICAgIHRleHR1cmUuY3JvcC55ICogcmVzb2x1dGlvbixcbiAgICAgICAgICAgICAgICB3aWR0aCAqIHJlc29sdXRpb24sXG4gICAgICAgICAgICAgICAgaGVpZ2h0ICogcmVzb2x1dGlvbixcbiAgICAgICAgICAgICAgICBkeCAgKiByZW5kZXJlci5yZXNvbHV0aW9uLFxuICAgICAgICAgICAgICAgIGR5ICAqIHJlbmRlcmVyLnJlc29sdXRpb24sXG4gICAgICAgICAgICAgICAgd2lkdGggKiByZW5kZXJlci5yZXNvbHV0aW9uLFxuICAgICAgICAgICAgICAgIGhlaWdodCAqIHJlbmRlcmVyLnJlc29sdXRpb25cbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICB9XG59O1xuXG4vKipcbiAqIERlc3Ryb3lzIHRoaXMgc3ByaXRlIGFuZCBvcHRpb25hbGx5IGl0cyB0ZXh0dXJlXG4gKlxuICogQHBhcmFtIFtkZXN0cm95VGV4dHVyZT1mYWxzZV0ge2Jvb2xlYW59IFNob3VsZCBpdCBkZXN0cm95IHRoZSBjdXJyZW50IHRleHR1cmUgb2YgdGhlIHNwcml0ZSBhcyB3ZWxsXG4gKiBAcGFyYW0gW2Rlc3Ryb3lCYXNlVGV4dHVyZT1mYWxzZV0ge2Jvb2xlYW59IFNob3VsZCBpdCBkZXN0cm95IHRoZSBiYXNlIHRleHR1cmUgb2YgdGhlIHNwcml0ZSBhcyB3ZWxsXG4gKi9cblNwcml0ZS5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uIChkZXN0cm95VGV4dHVyZSwgZGVzdHJveUJhc2VUZXh0dXJlKVxue1xuICAgIENvbnRhaW5lci5wcm90b3R5cGUuZGVzdHJveS5jYWxsKHRoaXMpO1xuXG4gICAgdGhpcy5hbmNob3IgPSBudWxsO1xuXG4gICAgaWYgKGRlc3Ryb3lUZXh0dXJlKVxuICAgIHtcbiAgICAgICAgdGhpcy5fdGV4dHVyZS5kZXN0cm95KGRlc3Ryb3lCYXNlVGV4dHVyZSk7XG4gICAgfVxuXG4gICAgdGhpcy5fdGV4dHVyZSA9IG51bGw7XG4gICAgdGhpcy5zaGFkZXIgPSBudWxsO1xufTtcblxuLy8gc29tZSBoZWxwZXIgZnVuY3Rpb25zLi5cblxuLyoqXG4gKiBIZWxwZXIgZnVuY3Rpb24gdGhhdCBjcmVhdGVzIGEgc3ByaXRlIHRoYXQgd2lsbCBjb250YWluIGEgdGV4dHVyZSBmcm9tIHRoZSBUZXh0dXJlQ2FjaGUgYmFzZWQgb24gdGhlIGZyYW1lSWRcbiAqIFRoZSBmcmFtZSBpZHMgYXJlIGNyZWF0ZWQgd2hlbiBhIFRleHR1cmUgcGFja2VyIGZpbGUgaGFzIGJlZW4gbG9hZGVkXG4gKlxuICogQHN0YXRpY1xuICogQHBhcmFtIGZyYW1lSWQge3N0cmluZ30gVGhlIGZyYW1lIElkIG9mIHRoZSB0ZXh0dXJlIGluIHRoZSBjYWNoZVxuICogQHBhcmFtIFtjcm9zc29yaWdpbj0oYXV0byldIHtib29sZWFufSBpZiB5b3Ugd2FudCB0byBzcGVjaWZ5IHRoZSBjcm9zcy1vcmlnaW4gcGFyYW1ldGVyXG4gKiBAcGFyYW0gW3NjYWxlTW9kZT1QSVhJLlNDQUxFX01PREVTLkRFRkFVTFRdIHtudW1iZXJ9IGlmIHlvdSB3YW50IHRvIHNwZWNpZnkgdGhlIHNjYWxlIG1vZGUsIHNlZSB7QGxpbmsgUElYSS5TQ0FMRV9NT0RFU30gZm9yIHBvc3NpYmxlIHZhbHVlc1xuICogQHJldHVybiB7UElYSS5TcHJpdGV9IEEgbmV3IFNwcml0ZSB1c2luZyBhIHRleHR1cmUgZnJvbSB0aGUgdGV4dHVyZSBjYWNoZSBtYXRjaGluZyB0aGUgZnJhbWVJZFxuICovXG5TcHJpdGUuZnJvbUZyYW1lID0gZnVuY3Rpb24gKGZyYW1lSWQpXG57XG4gICAgdmFyIHRleHR1cmUgPSB1dGlscy5UZXh0dXJlQ2FjaGVbZnJhbWVJZF07XG5cbiAgICBpZiAoIXRleHR1cmUpXG4gICAge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RoZSBmcmFtZUlkIFwiJyArIGZyYW1lSWQgKyAnXCIgZG9lcyBub3QgZXhpc3QgaW4gdGhlIHRleHR1cmUgY2FjaGUnKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IFNwcml0ZSh0ZXh0dXJlKTtcbn07XG5cbi8qKlxuICogSGVscGVyIGZ1bmN0aW9uIHRoYXQgY3JlYXRlcyBhIHNwcml0ZSB0aGF0IHdpbGwgY29udGFpbiBhIHRleHR1cmUgYmFzZWQgb24gYW4gaW1hZ2UgdXJsXG4gKiBJZiB0aGUgaW1hZ2UgaXMgbm90IGluIHRoZSB0ZXh0dXJlIGNhY2hlIGl0IHdpbGwgYmUgbG9hZGVkXG4gKlxuICogQHN0YXRpY1xuICogQHBhcmFtIGltYWdlSWQge3N0cmluZ30gVGhlIGltYWdlIHVybCBvZiB0aGUgdGV4dHVyZVxuICogQHJldHVybiB7UElYSS5TcHJpdGV9IEEgbmV3IFNwcml0ZSB1c2luZyBhIHRleHR1cmUgZnJvbSB0aGUgdGV4dHVyZSBjYWNoZSBtYXRjaGluZyB0aGUgaW1hZ2UgaWRcbiAqL1xuU3ByaXRlLmZyb21JbWFnZSA9IGZ1bmN0aW9uIChpbWFnZUlkLCBjcm9zc29yaWdpbiwgc2NhbGVNb2RlKVxue1xuICAgIHJldHVybiBuZXcgU3ByaXRlKFRleHR1cmUuZnJvbUltYWdlKGltYWdlSWQsIGNyb3Nzb3JpZ2luLCBzY2FsZU1vZGUpKTtcbn07XG4iLCJ2YXIgT2JqZWN0UmVuZGVyZXIgPSByZXF1aXJlKCcuLi8uLi9yZW5kZXJlcnMvd2ViZ2wvdXRpbHMvT2JqZWN0UmVuZGVyZXInKSxcbiAgICBXZWJHTFJlbmRlcmVyID0gcmVxdWlyZSgnLi4vLi4vcmVuZGVyZXJzL3dlYmdsL1dlYkdMUmVuZGVyZXInKSxcbiAgICBUZXh0dXJlU2hhZGVyID0gcmVxdWlyZSgnLi4vLi4vcmVuZGVyZXJzL3dlYmdsL3NoYWRlcnMvX1RleHR1cmVTaGFkZXInKSxcbiAgICBjcmVhdGVJbmRpY2VzRm9yUXVhZHMgPSByZXF1aXJlKCcuLi8uLi91dGlscy9jcmVhdGVJbmRpY2VzRm9yUXVhZHMnKSxcbiAgICBnZW5lcmF0ZU11bHRpVGV4dHVyZVNoYWRlciA9IHJlcXVpcmUoJy4vZ2VuZXJhdGVNdWx0aVRleHR1cmVTaGFkZXInKSxcbiAgICBDT05TVCA9IHJlcXVpcmUoJy4uLy4uL2NvbnN0JyksXG4gICAgZ2xDb3JlID0gcmVxdWlyZSgncGl4aS1nbC1jb3JlJyk7XG5cbi8qKlxuICogQGF1dGhvciBNYXQgR3JvdmVzXG4gKlxuICogQmlnIHRoYW5rcyB0byB0aGUgdmVyeSBjbGV2ZXIgTWF0dCBEZXNMYXVyaWVycyA8bWF0dGRlc2w+IGh0dHBzOi8vZ2l0aHViLmNvbS9tYXR0ZGVzbC9cbiAqIGZvciBjcmVhdGluZyB0aGUgb3JpZ2luYWwgcGl4aSB2ZXJzaW9uIVxuICogQWxzbyBhIHRoYW5rcyB0byBodHRwczovL2dpdGh1Yi5jb20vYmNoZXZhbGllciBmb3IgdHdlYWtpbmcgdGhlIHRpbnQgYW5kIGFscGhhIHNvIHRoYXQgdGhleSBub3cgc2hhcmUgNCBieXRlcyBvbiB0aGUgdmVydGV4IGJ1ZmZlclxuICpcbiAqIEhlYXZpbHkgaW5zcGlyZWQgYnkgTGliR0RYJ3MgU3ByaXRlUmVuZGVyZXI6XG4gKiBodHRwczovL2dpdGh1Yi5jb20vbGliZ2R4L2xpYmdkeC9ibG9iL21hc3Rlci9nZHgvc3JjL2NvbS9iYWRsb2dpYy9nZHgvZ3JhcGhpY3MvZzJkL1Nwcml0ZVJlbmRlcmVyLmphdmFcbiAqL1xuXG4vKipcbiAqIFJlbmRlcmVyIGRlZGljYXRlZCB0byBkcmF3aW5nIGFuZCBiYXRjaGluZyBzcHJpdGVzLlxuICpcbiAqIEBjbGFzc1xuICogQHByaXZhdGVcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAZXh0ZW5kcyBQSVhJLk9iamVjdFJlbmRlcmVyXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcn0gVGhlIHJlbmRlcmVyIHRoaXMgc3ByaXRlIGJhdGNoIHdvcmtzIGZvci5cbiAqL1xuZnVuY3Rpb24gU3ByaXRlUmVuZGVyZXIocmVuZGVyZXIpXG57XG4gICAgT2JqZWN0UmVuZGVyZXIuY2FsbCh0aGlzLCByZW5kZXJlcik7XG5cbiAgICAvKipcbiAgICAgKiBOdW1iZXIgb2YgdmFsdWVzIHNlbnQgaW4gdGhlIHZlcnRleCBidWZmZXIuXG4gICAgICogcG9zaXRpb25YLCBwb3NpdGlvblksIGNvbG9yUiwgY29sb3JHLCBjb2xvckIgPSA1XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy52ZXJ0U2l6ZSA9IDU7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgc2l6ZSBvZiB0aGUgdmVydGV4IGluZm9ybWF0aW9uIGluIGJ5dGVzLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMudmVydEJ5dGVTaXplID0gdGhpcy52ZXJ0U2l6ZSAqIDQ7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgbnVtYmVyIG9mIGltYWdlcyBpbiB0aGUgU3ByaXRlQmF0Y2ggYmVmb3JlIGl0IGZsdXNoZXMuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy5zaXplID0gQ09OU1QuU1BSSVRFX0JBVENIX1NJWkU7IC8vIDIwMDAgaXMgYSBuaWNlIGJhbGFuY2UgYmV0d2VlbiBtb2JpbGUgLyBkZXNrdG9wXG5cbiAgICAvLyB0aGUgdG90YWwgbnVtYmVyIG9mIGJ5dGVzIGluIG91ciBiYXRjaFxuICAgIHZhciBudW1WZXJ0cyA9ICh0aGlzLnNpemUgKiA0KSAqIHRoaXMudmVydEJ5dGVTaXplO1xuXG4gICAgLy8gdGhlIHRvdGFsIG51bWJlciBvZiBpbmRpY2VzIGluIG91ciBiYXRjaCwgdGhlcmUgYXJlIDYgcG9pbnRzIHBlciBxdWFkLlxuICAgIHZhciBudW1JbmRpY2VzID0gdGhpcy5zaXplICogNjtcblxuICAgIC8qKlxuICAgICAqIEhvbGRzIHRoZSB2ZXJ0ZXggZGF0YSB0aGF0IHdpbGwgYmUgc2VudCB0byB0aGUgdmVydGV4IHNoYWRlci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge0FycmF5QnVmZmVyfVxuICAgICAqL1xuICAgIHRoaXMudmVydGljZXMgPSBuZXcgQXJyYXlCdWZmZXIobnVtVmVydHMpO1xuXG4gICAgLyoqXG4gICAgICogVmlldyBvbiB0aGUgdmVydGljZXMgYXMgYSBGbG9hdDMyQXJyYXkgZm9yIHBvc2l0aW9uc1xuICAgICAqXG4gICAgICogQG1lbWJlciB7RmxvYXQzMkFycmF5fVxuICAgICAqL1xuICAgIHRoaXMucG9zaXRpb25zID0gbmV3IEZsb2F0MzJBcnJheSh0aGlzLnZlcnRpY2VzKTtcbiAgICBcbiAgICAvKipcbiAgICAgKiBWaWV3IG9uIHRoZSB2ZXJ0aWNlcyBhcyBhIFVpbnQzMkFycmF5IGZvciB1dnNcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge0Zsb2F0MzJBcnJheX1cbiAgICAgKi9cbiAgICB0aGlzLnV2cyA9IG5ldyBVaW50MzJBcnJheSh0aGlzLnZlcnRpY2VzKTtcblxuICAgIC8qKlxuICAgICAqIFZpZXcgb24gdGhlIHZlcnRpY2VzIGFzIGEgVWludDMyQXJyYXkgZm9yIGNvbG9yc1xuICAgICAqXG4gICAgICogQG1lbWJlciB7VWludDMyQXJyYXl9XG4gICAgICovXG4gICAgdGhpcy5jb2xvcnMgPSBuZXcgVWludDMyQXJyYXkodGhpcy52ZXJ0aWNlcyk7XG5cbiAgICAvKipcbiAgICAgKiBIb2xkcyB0aGUgaW5kaWNlcyBvZiB0aGUgZ2VvbWV0cnkgKHF1YWRzKSB0byBkcmF3XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtVaW50MTZBcnJheX1cbiAgICAgKi9cbiAgICB0aGlzLmluZGljZXMgPSBjcmVhdGVJbmRpY2VzRm9yUXVhZHModGhpcy5zaXplKVxuXG4gICAgLyoqXG4gICAgICogVGhlIGRlZmF1bHQgc2hhZGVyIHRoYXQgaXMgdXNlZCBpZiBhIHNwcml0ZSBkb2Vzbid0IGhhdmUgYSBtb3JlIHNwZWNpZmljIG9uZS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuU2hhZGVyfVxuICAgICAqL1xuICAgIHRoaXMuc2hhZGVyID0gbnVsbDtcblxuICAgIHRoaXMudGV4dHVyZUNvdW50ID0gMDtcbiAgICB0aGlzLmN1cnJlbnRJbmRleCA9IDA7XG4gIFxuICAgIHRoaXMuZ3JvdXBDb3VudCA9IDA7XG4gICAgdGhpcy5ncm91cHMgPSBbXTtcbiAgICBcbiAgICAvL1RPRE8gLSAzMDAgaXMgYSBiaXQgbWFnaWMsIGZpZ3VyZSBvdXQgYSBuaWNlciBhbW91bnQhXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLnNpemU7IGkrKykgXG4gICAge1xuICAgICAgICB0aGlzLmdyb3Vwc1tpXSA9IHt0ZXh0dXJlczpbXSwgdGV4dHVyZUNvdW50OjAsIGlkczpbXSwgc2l6ZTowLCBzdGFydDowLCBibGVuZDowfTsgXG4gICAgfTtcbiAgICBcbiAgICB0aGlzLmN1cnJlbnRHcm91cCA9IHRoaXMuZ3JvdXBzW3RoaXMuZ3JvdXBDb3VudCsrXTtcblxuICAgIHRoaXMuY3VycmVudFRleHR1cmUgPSBudWxsOyAgICBcbn1cblxuXG5TcHJpdGVSZW5kZXJlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKE9iamVjdFJlbmRlcmVyLnByb3RvdHlwZSk7XG5TcHJpdGVSZW5kZXJlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBTcHJpdGVSZW5kZXJlcjtcbm1vZHVsZS5leHBvcnRzID0gU3ByaXRlUmVuZGVyZXI7XG5cbldlYkdMUmVuZGVyZXIucmVnaXN0ZXJQbHVnaW4oJ3Nwcml0ZScsIFNwcml0ZVJlbmRlcmVyKTtcblxuLyoqXG4gKiBTZXRzIHVwIHRoZSByZW5kZXJlciBjb250ZXh0IGFuZCBuZWNlc3NhcnkgYnVmZmVycy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIGdsIHtXZWJHTFJlbmRlcmluZ0NvbnRleHR9IHRoZSBjdXJyZW50IFdlYkdMIGRyYXdpbmcgY29udGV4dFxuICovXG5TcHJpdGVSZW5kZXJlci5wcm90b3R5cGUub25Db250ZXh0Q2hhbmdlID0gZnVuY3Rpb24gKClcbntcbiAgICB2YXIgZ2wgPSB0aGlzLnJlbmRlcmVyLmdsO1xuXG4gICAgdGhpcy5NQVhfVEVYVFVFUyA9IGdsLmdldFBhcmFtZXRlcihnbC5NQVhfVEVYVFVSRV9JTUFHRV9VTklUUyk7XG5cbiAgICB0aGlzLl9zaGFkZXIgPSBnZW5lcmF0ZU11bHRpVGV4dHVyZVNoYWRlcihnbCwgdGhpcy5NQVhfVEVYVFVFUykvL25ldyBUZXh0dXJlU2hhZGVyKGdsKTtcblxuICAgIC8vIHNldHVwIGRlZmF1bHQgc2hhZGVyXG4gICAgdGhpcy5zaGFkZXIgPSB0aGlzLnJlbmRlcmVyLnNoYWRlck1hbmFnZXIuZGVmYXVsdFNoYWRlcjtcblxuICAgIC8vIGNyZWF0ZSBhIGNvdXBsZSBvZiBidWZmZXJzXG4gICAgdGhpcy52ZXJ0ZXhCdWZmZXIgPSBnbENvcmUuR0xCdWZmZXIuY3JlYXRlVmVydGV4QnVmZmVyKGdsLCBudWxsLCBnbC5EWU5BTUlDX0RSQVcpO1xuICAgIHRoaXMuaW5kZXhCdWZmZXIgPSBnbENvcmUuR0xCdWZmZXIuY3JlYXRlSW5kZXhCdWZmZXIoZ2wsIHRoaXMuaW5kaWNlcywgZ2wuU1RBVElDX0RSQVcpO1xuXG4gICAgLy8gYnVpbGQgdGhlIHZhbyBvYmplY3QgdGhhdCB3aWxsIHJlbmRlci4uXG4gICAgdGhpcy52YW8gPSBuZXcgZ2xDb3JlLlZlcnRleEFycmF5T2JqZWN0KGdsKTtcblxuICAgIHRoaXMudmFvLmFkZEluZGV4KHRoaXMuaW5kZXhCdWZmZXIpO1xuICAgIHRoaXMudmFvLmFkZEF0dHJpYnV0ZSh0aGlzLnZlcnRleEJ1ZmZlciwgdGhpcy5fc2hhZGVyLmF0dHJpYnV0ZXMuYVZlcnRleFBvc2l0aW9uLCBnbC5GTE9BVCwgZmFsc2UsIHRoaXMudmVydEJ5dGVTaXplLCAwKTtcbiAgICB0aGlzLnZhby5hZGRBdHRyaWJ1dGUodGhpcy52ZXJ0ZXhCdWZmZXIsIHRoaXMuX3NoYWRlci5hdHRyaWJ1dGVzLmFUZXh0dXJlQ29vcmQsIGdsLlVOU0lHTkVEX1NIT1JULCB0cnVlLCB0aGlzLnZlcnRCeXRlU2l6ZSwgMiAqIDQpO1xuICAgIHRoaXMudmFvLmFkZEF0dHJpYnV0ZSh0aGlzLnZlcnRleEJ1ZmZlciwgdGhpcy5fc2hhZGVyLmF0dHJpYnV0ZXMuYUNvbG9yLCBnbC5VTlNJR05FRF9CWVRFLCB0cnVlLCB0aGlzLnZlcnRCeXRlU2l6ZSwgMyAqIDQpO1xuICAgIHRoaXMudmFvLmFkZEF0dHJpYnV0ZSh0aGlzLnZlcnRleEJ1ZmZlciwgdGhpcy5fc2hhZGVyLmF0dHJpYnV0ZXMuYVRleHR1cmVJZCwgZ2wuRkxPQVQsIGZhbHNlLCB0aGlzLnZlcnRCeXRlU2l6ZSwgNCAqIDQpO1xuXG4gICAgdGhpcy5jdXJyZW50QmxlbmRNb2RlID0gOTk5OTk7XG59O1xuXG4vKipcbiAqIFJlbmRlcnMgdGhlIHNwcml0ZSBvYmplY3QuXG4gKlxuICogQHBhcmFtIHNwcml0ZSB7UElYSS5TcHJpdGV9IHRoZSBzcHJpdGUgdG8gcmVuZGVyIHdoZW4gdXNpbmcgdGhpcyBzcHJpdGViYXRjaFxuICovXG5TcHJpdGVSZW5kZXJlci5wcm90b3R5cGUucmVuZGVyID0gZnVuY3Rpb24gKHNwcml0ZSlcbntcbiAgICAvL1RPRE8gc2V0IGJsZW5kIG1vZGVzLi5cbiAgICAvLyBjaGVjayB0ZXh0dXJlLi5cbiAgICBpZiAodGhpcy5jdXJyZW50SW5kZXggPj0gdGhpcy5zaXplKVxuICAgIHtcbiAgICAgICAgdGhpcy5mbHVzaCgpO1xuICAgIH1cblxuICBcbiAgICAvLyBnZXQgdGhlIHV2cyBmb3IgdGhlIHRleHR1cmVcbiAgIFxuXG4gICAgLy8gaWYgdGhlIHV2cyBoYXZlIG5vdCB1cGRhdGVkIHRoZW4gbm8gcG9pbnQgcmVuZGVyaW5nIGp1c3QgeWV0IVxuICAgIGlmICghc3ByaXRlLnRleHR1cmUuX3V2cylcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAgLy8gcHVzaCBhIHRleHR1cmUuXG4gICAgLy8gaW5jcmVtZW50IHRoZSBiYXRjaHNpemVcbiAgICB2YXIgbmV4dFRleHR1cmUgPSAgc3ByaXRlLnRleHR1cmUuYmFzZVRleHR1cmU7XG4gICAgdmFyIGN1cnJlbnRHcm91cCA9IHRoaXMuY3VycmVudEdyb3VwO1xuICAgIHZhciBpO1xuXG4gICAgaWYodGhpcy5jdXJyZW50VGV4dHVyZSAhPT0gbmV4dFRleHR1cmUpXG4gICAge1xuICAgICAgICB0aGlzLmN1cnJlbnRUZXh0dXJlID0gbmV4dFRleHR1cmU7XG4gICAgICAgIFxuICAgICAgICBpZighbmV4dFRleHR1cmUuX2VuYWJsZWQpXG4gICAgICAgIHtcbiAgICAgICAgICAgIG5leHRUZXh0dXJlLl9lbmFibGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIG5leHRUZXh0dXJlLl9pZCA9IHRoaXMudGV4dHVyZUNvdW50O1xuICAgICAgICAgICAgXG4gICAgICAgICAgICBpZih0aGlzLnRleHR1cmVDb3VudCA9PT0gdGhpcy5NQVhfVEVYVFVFUylcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBmb3IgKCBpID0gMDsgaSA8IGN1cnJlbnRHcm91cC50ZXh0dXJlQ291bnQ7IGkrKykgXG4gICAgICAgICAgICAgICAgeyAgICAgXG4gICAgICAgICAgICAgICAgICAgIGN1cnJlbnRHcm91cC50ZXh0dXJlc1tpXS5fZW5hYmxlZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICB0aGlzLnRleHR1cmVDb3VudCA9IDA7XG5cbiAgICAgICAgICAgICAgICBjdXJyZW50R3JvdXAuc2l6ZSA9IHRoaXMuY3VycmVudEluZGV4IC0gY3VycmVudEdyb3VwLnN0YXJ0O1xuICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgY3VycmVudEdyb3VwID0gdGhpcy5jdXJyZW50R3JvdXAgPSB0aGlzLmdyb3Vwc1t0aGlzLmdyb3VwQ291bnQrK107XG4gICAgICAgICAgICAgICAgY3VycmVudEdyb3VwLnRleHR1cmVDb3VudCA9IDA7XG4gICAgICAgICAgICAgICAgY3VycmVudEdyb3VwLnN0YXJ0ID0gdGhpcy5jdXJyZW50SW5kZXg7XG4gICAgICAgICAgICAgICAgXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGN1cnJlbnRHcm91cC50ZXh0dXJlc1tjdXJyZW50R3JvdXAudGV4dHVyZUNvdW50KytdID0gbmV4dFRleHR1cmU7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnRleHR1cmVDb3VudCsrO1xuICAgIH1cblxuICAgIC8vIFRPRE8gdHJpbT8/XG4gICAgdmFyIGluZGV4ID0gdGhpcy5jdXJyZW50SW5kZXggKiB0aGlzLnZlcnRCeXRlU2l6ZTtcblxuICAgIHRoaXMuY3VycmVudEluZGV4Kys7XG5cbiAgICAvLyB1cGxvYWQgdGhlIHNwcml0ZSBlbGVtZXRucy4uLlxuICAgIC8vIHRoZXkgaGF2ZSBhbGwgcmVhZHkgYmVlbiBjYWxjdWxhdGVkIHNvIHdlIGp1c3QgbmVlZCB0byBwdXNoIHRoZW0gaW50byB0aGUgYnVmZmVyLlxuICAgIHZhciBjb2xvcnMgPSB0aGlzLmNvbG9ycztcbiAgICB2YXIgcG9zaXRpb25zID0gdGhpcy5wb3NpdGlvbnM7XG4gICAgdmFyIHZlcnRleERhdGEgPSBzcHJpdGUudmVydGV4RGF0YVxuICAgIHZhciB0aW50ID0gKHNwcml0ZS50aW50ID4+IDE2KSArIChzcHJpdGUudGludCAmIDB4ZmYwMCkgKyAoKHNwcml0ZS50aW50ICYgMHhmZikgPDwgMTYpICsgKHNwcml0ZS53b3JsZEFscGhhICogMjU1IDw8IDI0KTtcbiAgICB2YXIgdXZzID0gc3ByaXRlLnRleHR1cmUuX3V2cy51dnNfdWludDMyO1xuICAgIC8veHlcbiAgICBwb3NpdGlvbnNbaW5kZXgrK10gPSB2ZXJ0ZXhEYXRhWzBdO1xuICAgIHBvc2l0aW9uc1tpbmRleCsrXSA9IHZlcnRleERhdGFbMV07XG4gICAgdGhpcy51dnNbaW5kZXgrK10gPSB1dnNbMF07XG4gICAgY29sb3JzW2luZGV4KytdID0gdGludDtcbiAgICBwb3NpdGlvbnNbaW5kZXgrK10gPSBuZXh0VGV4dHVyZS5faWQ7IFxuICAgIFxuICAgIC8vIHh5XG4gICAgcG9zaXRpb25zW2luZGV4KytdID0gdmVydGV4RGF0YVsyXTtcbiAgICBwb3NpdGlvbnNbaW5kZXgrK10gPSB2ZXJ0ZXhEYXRhWzNdO1xuICAgIHRoaXMudXZzW2luZGV4KytdID0gdXZzWzFdO1xuICAgIGNvbG9yc1tpbmRleCsrXSA9IHRpbnQ7XG4gICAgcG9zaXRpb25zW2luZGV4KytdID0gbmV4dFRleHR1cmUuX2lkO1xuXG4gICAgIC8vIHh5XG4gICAgcG9zaXRpb25zW2luZGV4KytdID0gdmVydGV4RGF0YVs0XTtcbiAgICBwb3NpdGlvbnNbaW5kZXgrK10gPSB2ZXJ0ZXhEYXRhWzVdO1xuICAgIHRoaXMudXZzW2luZGV4KytdID0gdXZzWzJdO1xuICAgIGNvbG9yc1tpbmRleCsrXSA9IHRpbnQ7XG4gICAgcG9zaXRpb25zW2luZGV4KytdID0gbmV4dFRleHR1cmUuX2lkO1xuXG4gICAgLy8geHlcbiAgICBwb3NpdGlvbnNbaW5kZXgrK10gPSB2ZXJ0ZXhEYXRhWzZdO1xuICAgIHBvc2l0aW9uc1tpbmRleCsrXSA9IHZlcnRleERhdGFbN107XG4gICAgdGhpcy51dnNbaW5kZXgrK10gPSB1dnNbM107XG4gICAgY29sb3JzW2luZGV4KytdID0gdGludDtcbiAgICBwb3NpdGlvbnNbaW5kZXgrK10gPSBuZXh0VGV4dHVyZS5faWQ7XG59O1xuXG4vKipcbiAqIFJlbmRlcnMgdGhlIGNvbnRlbnQgYW5kIGVtcHRpZXMgdGhlIGN1cnJlbnQgYmF0Y2guXG4gKlxuICovXG5TcHJpdGVSZW5kZXJlci5wcm90b3R5cGUuZmx1c2ggPSBmdW5jdGlvbiAoKVxue1xuICAgIGlmICh0aGlzLmN1cnJlbnRJbmRleCA9PT0gMClyZXR1cm47XG5cbiAgICB2YXIgZ2wgPSB0aGlzLnJlbmRlcmVyLmdsO1xuXG5cbiAgICB0aGlzLmN1cnJlbnRHcm91cC5zaXplID0gdGhpcy5jdXJyZW50SW5kZXggLSB0aGlzLmN1cnJlbnRHcm91cC5zdGFydDtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuY3VycmVudEdyb3VwLnRleHR1cmVDb3VudDsgaSsrKSBcbiAgICB7ICAgICBcbiAgICAgICAgdGhpcy5jdXJyZW50R3JvdXAudGV4dHVyZXNbaV0uX2VuYWJsZWQgPSBmYWxzZTtcbiAgICB9O1xuICAgXG4gICAgLy8gZG8gc29tZSBzbWFydCBhcnJheSBzdHVmZi4uXG4gICAgLy8gZG91YmxlIHNpemUgc28gd2UgZG9udCBhbHdheSBzdWJhcnJheSB0aGUgZWxlbWVudHMuLlxuICAgIC8vIHVwbG9hZCB0aGUgdmVydHMgdG8gdGhlIGJ1ZmZlclxuICAgIGlmICh0aGlzLmN1cnJlbnRCYXRjaFNpemUgPiAoIHRoaXMuc2l6ZSAqIDAuNSApIClcbiAgICB7XG4gICAgICAgIHRoaXMudmVydGV4QnVmZmVyLnVwbG9hZCh0aGlzLnZlcnRpY2VzLCAwLCB0cnVlKTtcbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgLy8gbyBrIC4uIHN1YiBhcnJheSBpcyBTTE9XPj9cbiAgICAgICAgdmFyIHZpZXcgPSB0aGlzLnBvc2l0aW9ucy5zdWJhcnJheSgwLCB0aGlzLmN1cnJlbnRJbmRleCAqIHRoaXMudmVydEJ5dGVTaXplKTtcbiAgICAgICAgdGhpcy52ZXJ0ZXhCdWZmZXIudXBsb2FkKHZpZXcsIDAsIHRydWUpO1xuICAgIH1cblxuICAgIC8vIGJpbmQgc2hhZGVyLi5cbiAgICB0aGlzLnJlbmRlcmVyLmJpbmRTaGFkZXIodGhpcy5fc2hhZGVyKTtcbiAgICB0aGlzLnJlbmRlcmVyLmJsZW5kTW9kZU1hbmFnZXIuc2V0QmxlbmRNb2RlKCAwICk7XG5cbiAgICAvLy8gcmVuZGVyIHRoZSBncm91cHMuLlxuICAgIGZvciAoaSA9IDA7IGkgPCB0aGlzLmdyb3VwQ291bnQ7IGkrKykge1xuICAgICAgICBcbiAgICAgICAgdmFyIGdyb3VwID0gdGhpcy5ncm91cHNbaV07XG5cbiAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBncm91cC50ZXh0dXJlQ291bnQ7IGorKykge1xuICAgICAgICAgICAgdGhpcy5yZW5kZXJlci5iaW5kVGV4dHVyZShncm91cC50ZXh0dXJlc1tqXSwgaik7XG4gICAgICAgIH07XG5cbiAgICAgICAgZ2wuZHJhd0VsZW1lbnRzKGdsLlRSSUFOR0xFUywgZ3JvdXAuc2l6ZSAqIDYsIGdsLlVOU0lHTkVEX1NIT1JULCBncm91cC5zdGFydCAqIDYgKiAyKTtcbiAgICB9O1xuXG4gICAgLy8gcmVzZXQgZWxlbWVudHMgZm9yIHRoZSBuZXh0IGZsdXNoXG4gICAgdGhpcy5jdXJyZW50VGV4dHVyZSA9IG51bGw7XG4gICAgdGhpcy5jdXJyZW50SW5kZXggPSAwO1xuICAgIHRoaXMudGV4dHVyZUNvdW50ID0gMDtcbiAgICB0aGlzLmdyb3VwQ291bnQgPSAwO1xuICAgIFxuICAgIHRoaXMuY3VycmVudEdyb3VwID0gdGhpcy5ncm91cHNbdGhpcy5ncm91cENvdW50KytdO1xuICAgIHRoaXMuY3VycmVudEdyb3VwLnRleHR1cmVDb3VudCA9IDA7XG59O1xuXG4vKipcbiAqIFN0YXJ0cyBhIG5ldyBzcHJpdGUgYmF0Y2guXG4gKlxuICovXG5TcHJpdGVSZW5kZXJlci5wcm90b3R5cGUuc3RhcnQgPSBmdW5jdGlvbiAoKVxue1xuICAgIHRoaXMudmFvLmJpbmQoKTtcbn07XG5cblNwcml0ZVJlbmRlcmVyLnByb3RvdHlwZS5zdG9wID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLmZsdXNoKCk7XG4gICAgdGhpcy52YW8udW5iaW5kKCk7XG59O1xuLyoqXG4gKiBEZXN0cm95cyB0aGUgU3ByaXRlQmF0Y2guXG4gKlxuICovXG5TcHJpdGVSZW5kZXJlci5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy52ZXJ0ZXhCdWZmZXIuZGVzdHJveSgpO1xuICAgIHRoaXMuaW5kZXhCdWZmZXIuZGVzdHJveSgpO1xuXG4gICAgT2JqZWN0UmVuZGVyZXIucHJvdG90eXBlLmRlc3Ryb3kuY2FsbCh0aGlzKTtcblxuICAgIHRoaXMuc2hhZGVyLmRlc3Ryb3koKTtcblxuICAgIHRoaXMucmVuZGVyZXIgPSBudWxsO1xuXG4gICAgdGhpcy52ZXJ0aWNlcyA9IG51bGw7XG4gICAgdGhpcy5wb3NpdGlvbnMgPSBudWxsO1xuICAgIHRoaXMuY29sb3JzID0gbnVsbDtcbiAgICB0aGlzLmluZGljZXMgPSBudWxsO1xuXG4gICAgdGhpcy52ZXJ0ZXhCdWZmZXIgPSBudWxsO1xuICAgIHRoaXMuaW5kZXhCdWZmZXIgPSBudWxsO1xuXG4gICAgdGhpcy5zcHJpdGVzID0gbnVsbDtcbiAgICB0aGlzLnNoYWRlciA9IG51bGw7XG59O1xuIiwidmFyIFNoYWRlciA9IHJlcXVpcmUoJ3BpeGktZ2wtY29yZScpLkdMU2hhZGVyO1xuXG5cbmZ1bmN0aW9uIGdlbmVyYXRlTXVsdGlUZXh0dXJlU2hhZGVyKGdsLCBtYXhUZXh0dXJlcylcbntcbiAgICB2YXIgdmVydGV4U3JjID0gXCJwcmVjaXNpb24gbG93cCBmbG9hdDtcXG5hdHRyaWJ1dGUgdmVjMiBhVmVydGV4UG9zaXRpb247XFxuYXR0cmlidXRlIHZlYzIgYVRleHR1cmVDb29yZDtcXG5hdHRyaWJ1dGUgdmVjNCBhQ29sb3I7XFxuYXR0cmlidXRlIGZsb2F0IGFUZXh0dXJlSWQ7XFxuXFxudW5pZm9ybSBtYXQzIHByb2plY3Rpb25NYXRyaXg7XFxuXFxudmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7XFxudmFyeWluZyB2ZWM0IHZDb2xvcjtcXG52YXJ5aW5nIGZsb2F0IHZUZXh0dXJlSWQ7XFxuXFxudm9pZCBtYWluKHZvaWQpe1xcbiAgIGdsX1Bvc2l0aW9uID0gdmVjNCgocHJvamVjdGlvbk1hdHJpeCAqIHZlYzMoYVZlcnRleFBvc2l0aW9uLCAxLjApKS54eSwgMC4wLCAxLjApO1xcbiAgIHZUZXh0dXJlQ29vcmQgPSBhVGV4dHVyZUNvb3JkO1xcbiAgIHZUZXh0dXJlSWQgPSBhVGV4dHVyZUlkO1xcbiAgIHZDb2xvciA9IHZlYzQoYUNvbG9yLnJnYiAqIGFDb2xvci5hLCBhQ29sb3IuYSk7XFxufVwiO1xuICAgIHZhciBmcmFnbWVudFNyYyA9ICdwcmVjaXNpb24gbG93cCBmbG9hdDtcXG5cXG4nICsgZ2VuZXJhdGVTYW1wbGVTcmMobWF4VGV4dHVyZXMpICsgXCJcXG5cXG5cIiArIGZyYWdUZW1wbGF0ZVxuXG4gICAgZnJhZ21lbnRTcmMgPSBmcmFnbWVudFNyYy5yZXBsYWNlKC9cXCVcXCUvZ2ksICcxNicpO1xuXG4gICAgdmFyIHNoYWRlciA9IG5ldyBTaGFkZXIoZ2wsIHZlcnRleFNyYywgZnJhZ21lbnRTcmMpO1xuXG5cbiAgICB2YXIgc2FtcGxlVmFsdWVzID0gW107XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBtYXhUZXh0dXJlczsgaSsrKSB7XG4gICAgICAgIHNhbXBsZVZhbHVlc1tpXSA9IGk7XG4gICAgfTtcblxuICAgIHNoYWRlci5iaW5kKCk7XG4gICAgc2hhZGVyLnVuaWZvcm1zLnVTYW1wbGVycyA9IHNhbXBsZVZhbHVlcztcblxuICAgIHJldHVybiBzaGFkZXI7XG59XG5cbmZ1bmN0aW9uIGdlbmVyYXRlU2FtcGxlU3JjKG1heFRleHR1cmVzKVxue1xuICAgIHZhciBzcmMgPSAndmVjNCBnZXRTYW1wbGVGcm9tQXJyYXkoc2FtcGxlcjJEIHRleHR1cmVzWyUlXSwgaW50IG5keCwgdmVjMiB1dikge1xcblxcbnZlYzQgY29sb3I7J1xuXG4gICAgc3JjICs9ICdcXG4nO1xuICAgIHNyYyArPSAnXFxuJztcbiAgICBcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG1heFRleHR1cmVzOyBpKyspIFxuICAgIHtcbiAgICAgICAgaWYoaSA+IDApc3JjICs9ICdcXG5lbHNlICc7XG4gICAgICAgIGlmKGkgPCBtYXhUZXh0dXJlcy0xKXNyYyArPSAnaWYobmR4ID09ICcgKyBpICsgJyknO1xuICAgICAgICBzcmMgKz0gJ1xcbnsnO1xuICAgICAgICBzcmMgKz0gJ1xcblxcdGNvbG9yID0gdGV4dHVyZTJEKHRleHR1cmVzWycraSsnXSwgdXYpOyc7XG4gICAgICAgIHNyYyArPSAnXFxufSc7XG4gICAgfTtcblxuICAgIHNyYyArPSAnXFxuJztcbiAgICBzcmMgKz0gJ1xcbic7XG4gICAgc3JjICs9ICdyZXR1cm4gY29sb3I7JztcbiAgICBzcmMgKz0gJ1xcbn0nO1xuXG4gICAgcmV0dXJuIHNyYztcbn1cblxudmFyIGZyYWdUZW1wbGF0ZSA9IFtcblxuICAgICd2YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDsnLFxuICAgICd2YXJ5aW5nIHZlYzQgdkNvbG9yOycsXG4gICAgJ3ZhcnlpbmcgZmxvYXQgdlRleHR1cmVJZDsnLFxuICAgICd1bmlmb3JtIHNhbXBsZXIyRCB1U2FtcGxlcnNbJSVdOycsXG5cbiAgICAndm9pZCBtYWluKHZvaWQpeycsXG4gICAgICAgICdnbF9GcmFnQ29sb3IgPSBnZXRTYW1wbGVGcm9tQXJyYXkodVNhbXBsZXJzLCBpbnQodlRleHR1cmVJZCksIHZUZXh0dXJlQ29vcmQpICogdkNvbG9yOycsXG4gICAgJ30nXG5dLmpvaW4oJ1xcbicpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGdlbmVyYXRlTXVsdGlUZXh0dXJlU2hhZGVyO1xuIiwidmFyIFNwcml0ZSA9IHJlcXVpcmUoJy4uL3Nwcml0ZXMvU3ByaXRlJyksXG4gICAgVGV4dHVyZSA9IHJlcXVpcmUoJy4uL3RleHR1cmVzL1RleHR1cmUnKSxcbiAgICBtYXRoID0gcmVxdWlyZSgnLi4vbWF0aCcpLFxuICAgIHV0aWxzID0gcmVxdWlyZSgnLi4vdXRpbHMnKSxcbiAgICBDT05TVCA9IHJlcXVpcmUoJy4uL2NvbnN0Jyk7XG5cbi8qKlxuICogQSBUZXh0IE9iamVjdCB3aWxsIGNyZWF0ZSBhIGxpbmUgb3IgbXVsdGlwbGUgbGluZXMgb2YgdGV4dC4gVG8gc3BsaXQgYSBsaW5lIHlvdSBjYW4gdXNlICdcXG4nIGluIHlvdXIgdGV4dCBzdHJpbmcsXG4gKiBvciBhZGQgYSB3b3JkV3JhcCBwcm9wZXJ0eSBzZXQgdG8gdHJ1ZSBhbmQgYW5kIHdvcmRXcmFwV2lkdGggcHJvcGVydHkgd2l0aCBhIHZhbHVlIGluIHRoZSBzdHlsZSBvYmplY3QuXG4gKlxuICogQSBUZXh0IGNhbiBiZSBjcmVhdGVkIGRpcmVjdGx5IGZyb20gYSBzdHJpbmcgYW5kIGEgc3R5bGUgb2JqZWN0XG4gKlxuICogYGBganNcbiAqIHZhciB0ZXh0ID0gbmV3IFBJWEkuVGV4dCgnVGhpcyBpcyBhIHBpeGkgdGV4dCcse2ZvbnQgOiAnMjRweCBBcmlhbCcsIGZpbGwgOiAweGZmMTAxMCwgYWxpZ24gOiAnY2VudGVyJ30pO1xuICogYGBgXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLlNwcml0ZVxuICogQG1lbWJlcm9mIFBJWElcbiAqIEBwYXJhbSB0ZXh0IHtzdHJpbmd9IFRoZSBjb3B5IHRoYXQgeW91IHdvdWxkIGxpa2UgdGhlIHRleHQgdG8gZGlzcGxheVxuICogQHBhcmFtIFtzdHlsZV0ge29iamVjdH0gVGhlIHN0eWxlIHBhcmFtZXRlcnNcbiAqIEBwYXJhbSBbc3R5bGUuZm9udF0ge3N0cmluZ30gZGVmYXVsdCAnYm9sZCAyMHB4IEFyaWFsJyBUaGUgc3R5bGUgYW5kIHNpemUgb2YgdGhlIGZvbnRcbiAqIEBwYXJhbSBbc3R5bGUuZmlsbD0nYmxhY2snXSB7U3RyaW5nfE51bWJlcn0gQSBjYW52YXMgZmlsbHN0eWxlIHRoYXQgd2lsbCBiZSB1c2VkIG9uIHRoZSB0ZXh0IGUuZyAncmVkJywgJyMwMEZGMDAnXG4gKiBAcGFyYW0gW3N0eWxlLmFsaWduPSdsZWZ0J10ge3N0cmluZ30gQWxpZ25tZW50IGZvciBtdWx0aWxpbmUgdGV4dCAoJ2xlZnQnLCAnY2VudGVyJyBvciAncmlnaHQnKSwgZG9lcyBub3QgYWZmZWN0IHNpbmdsZSBsaW5lIHRleHRcbiAqIEBwYXJhbSBbc3R5bGUuc3Ryb2tlXSB7U3RyaW5nfE51bWJlcn0gQSBjYW52YXMgZmlsbHN0eWxlIHRoYXQgd2lsbCBiZSB1c2VkIG9uIHRoZSB0ZXh0IHN0cm9rZSBlLmcgJ2JsdWUnLCAnI0ZDRkYwMCdcbiAqIEBwYXJhbSBbc3R5bGUuc3Ryb2tlVGhpY2tuZXNzPTBdIHtudW1iZXJ9IEEgbnVtYmVyIHRoYXQgcmVwcmVzZW50cyB0aGUgdGhpY2tuZXNzIG9mIHRoZSBzdHJva2UuIERlZmF1bHQgaXMgMCAobm8gc3Ryb2tlKVxuICogQHBhcmFtIFtzdHlsZS53b3JkV3JhcD1mYWxzZV0ge2Jvb2xlYW59IEluZGljYXRlcyBpZiB3b3JkIHdyYXAgc2hvdWxkIGJlIHVzZWRcbiAqIEBwYXJhbSBbc3R5bGUud29yZFdyYXBXaWR0aD0xMDBdIHtudW1iZXJ9IFRoZSB3aWR0aCBhdCB3aGljaCB0ZXh0IHdpbGwgd3JhcCwgaXQgbmVlZHMgd29yZFdyYXAgdG8gYmUgc2V0IHRvIHRydWVcbiAqIEBwYXJhbSBbc3R5bGUubGluZUhlaWdodF0ge251bWJlcn0gVGhlIGxpbmUgaGVpZ2h0LCBhIG51bWJlciB0aGF0IHJlcHJlc2VudHMgdGhlIHZlcnRpY2FsIHNwYWNlIHRoYXQgYSBsZXR0ZXIgdXNlc1xuICogQHBhcmFtIFtzdHlsZS5kcm9wU2hhZG93PWZhbHNlXSB7Ym9vbGVhbn0gU2V0IGEgZHJvcCBzaGFkb3cgZm9yIHRoZSB0ZXh0XG4gKiBAcGFyYW0gW3N0eWxlLmRyb3BTaGFkb3dDb2xvcj0nIzAwMDAwMCddIHtzdHJpbmd9IEEgZmlsbCBzdHlsZSB0byBiZSB1c2VkIG9uIHRoZSBkcm9wc2hhZG93IGUuZyAncmVkJywgJyMwMEZGMDAnXG4gKiBAcGFyYW0gW3N0eWxlLmRyb3BTaGFkb3dBbmdsZT1NYXRoLlBJLzRdIHtudW1iZXJ9IFNldCBhIGFuZ2xlIG9mIHRoZSBkcm9wIHNoYWRvd1xuICogQHBhcmFtIFtzdHlsZS5kcm9wU2hhZG93RGlzdGFuY2U9NV0ge251bWJlcn0gU2V0IGEgZGlzdGFuY2Ugb2YgdGhlIGRyb3Agc2hhZG93XG4gKiBAcGFyYW0gW3N0eWxlLmRyb3BTaGFkb3dCbHVyPTBdIHtudW1iZXJ9IFNldCBhIHNoYWRvdyBibHVyIHJhZGl1c1xuICogQHBhcmFtIFtzdHlsZS5wYWRkaW5nPTBdIHtudW1iZXJ9IE9jY2FzaW9uYWxseSBzb21lIGZvbnRzIGFyZSBjcm9wcGVkIG9uIHRvcCBvciBib3R0b20uIEFkZGluZyBzb21lIHBhZGRpbmcgd2lsbFxuICogICAgICBwcmV2ZW50IHRoaXMgZnJvbSBoYXBwZW5pbmcgYnkgYWRkaW5nIHBhZGRpbmcgdG8gdGhlIHRvcCBhbmQgYm90dG9tIG9mIHRleHQgaGVpZ2h0LlxuICogQHBhcmFtIFtzdHlsZS50ZXh0QmFzZWxpbmU9J2FscGhhYmV0aWMnXSB7c3RyaW5nfSBUaGUgYmFzZWxpbmUgb2YgdGhlIHRleHQgdGhhdCBpcyByZW5kZXJlZC5cbiAqIEBwYXJhbSBbc3R5bGUubGluZUpvaW49J21pdGVyJ10ge3N0cmluZ30gVGhlIGxpbmVKb2luIHByb3BlcnR5IHNldHMgdGhlIHR5cGUgb2YgY29ybmVyIGNyZWF0ZWQsIGl0IGNhbiByZXNvbHZlXG4gKiAgICAgIHNwaWtlZCB0ZXh0IGlzc3Vlcy4gRGVmYXVsdCBpcyAnbWl0ZXInIChjcmVhdGVzIGEgc2hhcnAgY29ybmVyKS5cbiAqIEBwYXJhbSBbc3R5bGUubWl0ZXJMaW1pdD0xMF0ge251bWJlcn0gVGhlIG1pdGVyIGxpbWl0IHRvIHVzZSB3aGVuIHVzaW5nIHRoZSAnbWl0ZXInIGxpbmVKb2luIG1vZGUuIFRoaXMgY2FuIHJlZHVjZVxuICogICAgICBvciBpbmNyZWFzZSB0aGUgc3Bpa2luZXNzIG9mIHJlbmRlcmVkIHRleHQuXG4gKi9cbmZ1bmN0aW9uIFRleHQodGV4dCwgc3R5bGUsIHJlc29sdXRpb24pXG57XG4gICAgLyoqXG4gICAgICogVGhlIGNhbnZhcyBlbGVtZW50IHRoYXQgZXZlcnl0aGluZyBpcyBkcmF3biB0b1xuICAgICAqXG4gICAgICogQG1lbWJlciB7SFRNTENhbnZhc0VsZW1lbnR9XG4gICAgICovXG4gICAgdGhpcy5jYW52YXMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdjYW52YXMnKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBjYW52YXMgMmQgY29udGV4dCB0aGF0IGV2ZXJ5dGhpbmcgaXMgZHJhd24gd2l0aFxuICAgICAqIEBtZW1iZXIge0hUTUxDYW52YXNFbGVtZW50fVxuICAgICAqL1xuICAgIHRoaXMuY29udGV4dCA9IHRoaXMuY2FudmFzLmdldENvbnRleHQoJzJkJyk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgcmVzb2x1dGlvbiBvZiB0aGUgY2FudmFzLlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLnJlc29sdXRpb24gPSByZXNvbHV0aW9uIHx8IENPTlNULlJFU09MVVRJT047XG5cbiAgICAvKipcbiAgICAgKiBQcml2YXRlIHRyYWNrZXIgZm9yIHRoZSBjdXJyZW50IHRleHQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtzdHJpbmd9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl90ZXh0ID0gbnVsbDtcblxuICAgIC8qKlxuICAgICAqIFByaXZhdGUgdHJhY2tlciBmb3IgdGhlIGN1cnJlbnQgc3R5bGUuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtvYmplY3R9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9zdHlsZSA9IG51bGw7XG5cbiAgICB2YXIgdGV4dHVyZSA9IFRleHR1cmUuZnJvbUNhbnZhcyh0aGlzLmNhbnZhcyk7XG4gICAgdGV4dHVyZS50cmltID0gbmV3IG1hdGguUmVjdGFuZ2xlKCk7XG4gICAgU3ByaXRlLmNhbGwodGhpcywgdGV4dHVyZSk7XG5cbiAgICB0aGlzLnRleHQgPSB0ZXh0O1xuICAgIHRoaXMuc3R5bGUgPSBzdHlsZTtcbn1cblxuLy8gY29uc3RydWN0b3JcblRleHQucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShTcHJpdGUucHJvdG90eXBlKTtcblRleHQucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gVGV4dDtcbm1vZHVsZS5leHBvcnRzID0gVGV4dDtcblxuVGV4dC5mb250UHJvcGVydGllc0NhY2hlID0ge307XG5UZXh0LmZvbnRQcm9wZXJ0aWVzQ2FudmFzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnY2FudmFzJyk7XG5UZXh0LmZvbnRQcm9wZXJ0aWVzQ29udGV4dCA9IFRleHQuZm9udFByb3BlcnRpZXNDYW52YXMuZ2V0Q29udGV4dCgnMmQnKTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoVGV4dC5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBUaGUgd2lkdGggb2YgdGhlIFRleHQsIHNldHRpbmcgdGhpcyB3aWxsIGFjdHVhbGx5IG1vZGlmeSB0aGUgc2NhbGUgdG8gYWNoaWV2ZSB0aGUgdmFsdWUgc2V0XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuVGV4dCNcbiAgICAgKi9cbiAgICB3aWR0aDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmRpcnR5KVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlVGV4dCgpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5zY2FsZS54ICogdGhpcy5fdGV4dHVyZS5fZnJhbWUud2lkdGg7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnNjYWxlLnggPSB2YWx1ZSAvIHRoaXMuX3RleHR1cmUuX2ZyYW1lLndpZHRoO1xuICAgICAgICAgICAgdGhpcy5fd2lkdGggPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBUaGUgaGVpZ2h0IG9mIHRoZSBUZXh0LCBzZXR0aW5nIHRoaXMgd2lsbCBhY3R1YWxseSBtb2RpZnkgdGhlIHNjYWxlIHRvIGFjaGlldmUgdGhlIHZhbHVlIHNldFxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLlRleHQjXG4gICAgICovXG4gICAgaGVpZ2h0OiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgaWYgKHRoaXMuZGlydHkpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdGhpcy51cGRhdGVUZXh0KCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiAgdGhpcy5zY2FsZS55ICogdGhpcy5fdGV4dHVyZS5fZnJhbWUuaGVpZ2h0O1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5zY2FsZS55ID0gdmFsdWUgLyB0aGlzLl90ZXh0dXJlLl9mcmFtZS5oZWlnaHQ7XG4gICAgICAgICAgICB0aGlzLl9oZWlnaHQgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBTZXQgdGhlIHN0eWxlIG9mIHRoZSB0ZXh0XG4gICAgICpcbiAgICAgKiBAcGFyYW0gW3N0eWxlXSB7b2JqZWN0fSBUaGUgc3R5bGUgcGFyYW1ldGVyc1xuICAgICAqIEBwYXJhbSBbc3R5bGUuZm9udD0nYm9sZCAyMHB0IEFyaWFsJ10ge3N0cmluZ30gVGhlIHN0eWxlIGFuZCBzaXplIG9mIHRoZSBmb250XG4gICAgICogQHBhcmFtIFtzdHlsZS5maWxsPSdibGFjayddIHtzdHJpbmd8bnVtYmVyfSBBIGNhbnZhcyBmaWxsc3R5bGUgdGhhdCB3aWxsIGJlIHVzZWQgb24gdGhlIHRleHQgZWcgJ3JlZCcsICcjMDBGRjAwJ1xuICAgICAqIEBwYXJhbSBbc3R5bGUuYWxpZ249J2xlZnQnXSB7c3RyaW5nfSBBbGlnbm1lbnQgZm9yIG11bHRpbGluZSB0ZXh0ICgnbGVmdCcsICdjZW50ZXInIG9yICdyaWdodCcpLCBkb2VzIG5vdCBhZmZlY3Qgc2luZ2xlIGxpbmUgdGV4dFxuICAgICAqIEBwYXJhbSBbc3R5bGUuc3Ryb2tlPSdibGFjayddIHtzdHJpbmd8bnVtYmVyfSBBIGNhbnZhcyBmaWxsc3R5bGUgdGhhdCB3aWxsIGJlIHVzZWQgb24gdGhlIHRleHQgc3Ryb2tlIGVnICdibHVlJywgJyNGQ0ZGMDAnXG4gICAgICogQHBhcmFtIFtzdHlsZS5zdHJva2VUaGlja25lc3M9MF0ge251bWJlcn0gQSBudW1iZXIgdGhhdCByZXByZXNlbnRzIHRoZSB0aGlja25lc3Mgb2YgdGhlIHN0cm9rZS4gRGVmYXVsdCBpcyAwIChubyBzdHJva2UpXG4gICAgICogQHBhcmFtIFtzdHlsZS53b3JkV3JhcD1mYWxzZV0ge2Jvb2xlYW59IEluZGljYXRlcyBpZiB3b3JkIHdyYXAgc2hvdWxkIGJlIHVzZWRcbiAgICAgKiBAcGFyYW0gW3N0eWxlLndvcmRXcmFwV2lkdGg9MTAwXSB7bnVtYmVyfSBUaGUgd2lkdGggYXQgd2hpY2ggdGV4dCB3aWxsIHdyYXBcbiAgICAgKiBAcGFyYW0gW3N0eWxlLmxpbmVIZWlnaHRdIHtudW1iZXJ9IFRoZSBsaW5lIGhlaWdodCwgYSBudW1iZXIgdGhhdCByZXByZXNlbnRzIHRoZSB2ZXJ0aWNhbCBzcGFjZSB0aGF0IGEgbGV0dGVyIHVzZXNcbiAgICAgKiBAcGFyYW0gW3N0eWxlLmRyb3BTaGFkb3c9ZmFsc2VdIHtib29sZWFufSBTZXQgYSBkcm9wIHNoYWRvdyBmb3IgdGhlIHRleHRcbiAgICAgKiBAcGFyYW0gW3N0eWxlLmRyb3BTaGFkb3dDb2xvcj0nIzAwMDAwMCddIHtzdHJpbmd8bnVtYmVyfSBBIGZpbGwgc3R5bGUgdG8gYmUgdXNlZCBvbiB0aGUgZHJvcHNoYWRvdyBlLmcgJ3JlZCcsICcjMDBGRjAwJ1xuICAgICAqIEBwYXJhbSBbc3R5bGUuZHJvcFNoYWRvd0FuZ2xlPU1hdGguUEkvNl0ge251bWJlcn0gU2V0IGEgYW5nbGUgb2YgdGhlIGRyb3Agc2hhZG93XG4gICAgICogQHBhcmFtIFtzdHlsZS5kcm9wU2hhZG93RGlzdGFuY2U9NV0ge251bWJlcn0gU2V0IGEgZGlzdGFuY2Ugb2YgdGhlIGRyb3Agc2hhZG93XG4gICAgICogQHBhcmFtIFtzdHlsZS5kcm9wU2hhZG93Qmx1cj0wXSB7bnVtYmVyfSBTZXQgYSBzaGFkb3cgYmx1ciByYWRpdXNcbiAgICAgKiBAcGFyYW0gW3N0eWxlLnBhZGRpbmc9MF0ge251bWJlcn0gT2NjYXNpb25hbGx5IHNvbWUgZm9udHMgYXJlIGNyb3BwZWQgb24gdG9wIG9yIGJvdHRvbS4gQWRkaW5nIHNvbWUgcGFkZGluZyB3aWxsXG4gICAgICogICAgICBwcmV2ZW50IHRoaXMgZnJvbSBoYXBwZW5pbmcgYnkgYWRkaW5nIHBhZGRpbmcgdG8gdGhlIHRvcCBhbmQgYm90dG9tIG9mIHRleHQgaGVpZ2h0LlxuICAgICAqIEBwYXJhbSBbc3R5bGUudGV4dEJhc2VsaW5lPSdhbHBoYWJldGljJ10ge3N0cmluZ30gVGhlIGJhc2VsaW5lIG9mIHRoZSB0ZXh0IHRoYXQgaXMgcmVuZGVyZWQuXG4gICAgICogQHBhcmFtIFtzdHlsZS5saW5lSm9pbj0nbWl0ZXInXSB7c3RyaW5nfSBUaGUgbGluZUpvaW4gcHJvcGVydHkgc2V0cyB0aGUgdHlwZSBvZiBjb3JuZXIgY3JlYXRlZCwgaXQgY2FuIHJlc29sdmVcbiAgICAgKiAgICAgIHNwaWtlZCB0ZXh0IGlzc3Vlcy4gRGVmYXVsdCBpcyAnbWl0ZXInIChjcmVhdGVzIGEgc2hhcnAgY29ybmVyKS5cbiAgICAgKiBAcGFyYW0gW3N0eWxlLm1pdGVyTGltaXQ9MTBdIHtudW1iZXJ9IFRoZSBtaXRlciBsaW1pdCB0byB1c2Ugd2hlbiB1c2luZyB0aGUgJ21pdGVyJyBsaW5lSm9pbiBtb2RlLiBUaGlzIGNhbiByZWR1Y2VcbiAgICAgKiAgICAgIG9yIGluY3JlYXNlIHRoZSBzcGlraW5lc3Mgb2YgcmVuZGVyZWQgdGV4dC5cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5UZXh0I1xuICAgICAqL1xuICAgIHN0eWxlOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3N0eWxlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uIChzdHlsZSlcbiAgICAgICAge1xuICAgICAgICAgICAgc3R5bGUgPSBzdHlsZSB8fCB7fTtcblxuICAgICAgICAgICAgaWYgKHR5cGVvZiBzdHlsZS5maWxsID09PSAnbnVtYmVyJykge1xuICAgICAgICAgICAgICAgIHN0eWxlLmZpbGwgPSB1dGlscy5oZXgyc3RyaW5nKHN0eWxlLmZpbGwpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAodHlwZW9mIHN0eWxlLnN0cm9rZSA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgICAgICAgICBzdHlsZS5zdHJva2UgPSB1dGlscy5oZXgyc3RyaW5nKHN0eWxlLnN0cm9rZSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICh0eXBlb2Ygc3R5bGUuZHJvcFNoYWRvd0NvbG9yID09PSAnbnVtYmVyJykge1xuICAgICAgICAgICAgICAgIHN0eWxlLmRyb3BTaGFkb3dDb2xvciA9IHV0aWxzLmhleDJzdHJpbmcoc3R5bGUuZHJvcFNoYWRvd0NvbG9yKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgc3R5bGUuZm9udCA9IHN0eWxlLmZvbnQgfHwgJ2JvbGQgMjBwdCBBcmlhbCc7XG4gICAgICAgICAgICBzdHlsZS5maWxsID0gc3R5bGUuZmlsbCB8fCAnYmxhY2snO1xuICAgICAgICAgICAgc3R5bGUuYWxpZ24gPSBzdHlsZS5hbGlnbiB8fCAnbGVmdCc7XG4gICAgICAgICAgICBzdHlsZS5zdHJva2UgPSBzdHlsZS5zdHJva2UgfHwgJ2JsYWNrJzsgLy9wcm92aWRlIGEgZGVmYXVsdCwgc2VlOiBodHRwczovL2dpdGh1Yi5jb20vcGl4aWpzL3BpeGkuanMvaXNzdWVzLzEzNlxuICAgICAgICAgICAgc3R5bGUuc3Ryb2tlVGhpY2tuZXNzID0gc3R5bGUuc3Ryb2tlVGhpY2tuZXNzIHx8IDA7XG4gICAgICAgICAgICBzdHlsZS53b3JkV3JhcCA9IHN0eWxlLndvcmRXcmFwIHx8IGZhbHNlO1xuICAgICAgICAgICAgc3R5bGUud29yZFdyYXBXaWR0aCA9IHN0eWxlLndvcmRXcmFwV2lkdGggfHwgMTAwO1xuXG4gICAgICAgICAgICBzdHlsZS5kcm9wU2hhZG93ID0gc3R5bGUuZHJvcFNoYWRvdyB8fCBmYWxzZTtcbiAgICAgICAgICAgIHN0eWxlLmRyb3BTaGFkb3dDb2xvciA9IHN0eWxlLmRyb3BTaGFkb3dDb2xvciB8fCAnIzAwMDAwMCc7XG4gICAgICAgICAgICBzdHlsZS5kcm9wU2hhZG93QW5nbGUgPSBzdHlsZS5kcm9wU2hhZG93QW5nbGUgIT09IHVuZGVmaW5lZCA/IHN0eWxlLmRyb3BTaGFkb3dBbmdsZSA6IE1hdGguUEkgLyA2O1xuICAgICAgICAgICAgc3R5bGUuZHJvcFNoYWRvd0Rpc3RhbmNlID0gc3R5bGUuZHJvcFNoYWRvd0Rpc3RhbmNlICE9PSB1bmRlZmluZWQgPyBzdHlsZS5kcm9wU2hhZG93RGlzdGFuY2UgOiA1O1xuICAgICAgICAgICAgc3R5bGUuZHJvcFNoYWRvd0JsdXIgPSBzdHlsZS5kcm9wU2hhZG93Qmx1ciAhPT0gdW5kZWZpbmVkID8gc3R5bGUuZHJvcFNoYWRvd0JsdXIgOiAwOyAvL3NoYWRvd0JsdXIgaXMgJzAnIGJ5IGRlZmF1bHQgYWNjb3JkaW5nIHRvIEhUTUxcblxuICAgICAgICAgICAgc3R5bGUucGFkZGluZyA9IHN0eWxlLnBhZGRpbmcgfHwgMDtcblxuICAgICAgICAgICAgc3R5bGUudGV4dEJhc2VsaW5lID0gc3R5bGUudGV4dEJhc2VsaW5lIHx8ICdhbHBoYWJldGljJztcblxuICAgICAgICAgICAgc3R5bGUubGluZUpvaW4gPSBzdHlsZS5saW5lSm9pbiB8fCAnbWl0ZXInO1xuICAgICAgICAgICAgc3R5bGUubWl0ZXJMaW1pdCA9IHN0eWxlLm1pdGVyTGltaXQgfHwgMTA7XG5cbiAgICAgICAgICAgIHRoaXMuX3N0eWxlID0gc3R5bGU7XG4gICAgICAgICAgICB0aGlzLmRpcnR5ID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBTZXQgdGhlIGNvcHkgZm9yIHRoZSB0ZXh0IG9iamVjdC4gVG8gc3BsaXQgYSBsaW5lIHlvdSBjYW4gdXNlICdcXG4nLlxuICAgICAqXG4gICAgICogQHBhcmFtIHRleHQge3N0cmluZ30gVGhlIGNvcHkgdGhhdCB5b3Ugd291bGQgbGlrZSB0aGUgdGV4dCB0byBkaXNwbGF5XG4gICAgICogQG1lbWJlcm9mIFBJWEkuVGV4dCNcbiAgICAgKi9cbiAgICB0ZXh0OiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24oKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fdGV4dDtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodGV4dCl7XG4gICAgICAgICAgICB0ZXh0ID0gdGV4dC50b1N0cmluZygpIHx8ICcgJztcbiAgICAgICAgICAgIGlmICh0aGlzLl90ZXh0ID09PSB0ZXh0KVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuX3RleHQgPSB0ZXh0O1xuICAgICAgICAgICAgdGhpcy5kaXJ0eSA9IHRydWU7XG4gICAgICAgIH1cbiAgICB9XG59KTtcblxuLyoqXG4gKiBSZW5kZXJzIHRleHQgYW5kIHVwZGF0ZXMgaXQgd2hlbiBuZWVkZWRcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5UZXh0LnByb3RvdHlwZS51cGRhdGVUZXh0ID0gZnVuY3Rpb24gKClcbntcbiAgICB2YXIgc3R5bGUgPSB0aGlzLl9zdHlsZTtcbiAgICB0aGlzLmNvbnRleHQuZm9udCA9IHN0eWxlLmZvbnQ7XG5cbiAgICAvLyB3b3JkIHdyYXBcbiAgICAvLyBwcmVzZXJ2ZSBvcmlnaW5hbCB0ZXh0XG4gICAgdmFyIG91dHB1dFRleHQgPSBzdHlsZS53b3JkV3JhcCA/IHRoaXMud29yZFdyYXAodGhpcy5fdGV4dCkgOiB0aGlzLl90ZXh0O1xuXG4gICAgLy8gc3BsaXQgdGV4dCBpbnRvIGxpbmVzXG4gICAgdmFyIGxpbmVzID0gb3V0cHV0VGV4dC5zcGxpdCgvKD86XFxyXFxufFxccnxcXG4pLyk7XG5cbiAgICAvLyBjYWxjdWxhdGUgdGV4dCB3aWR0aFxuICAgIHZhciBsaW5lV2lkdGhzID0gbmV3IEFycmF5KGxpbmVzLmxlbmd0aCk7XG4gICAgdmFyIG1heExpbmVXaWR0aCA9IDA7XG4gICAgdmFyIGZvbnRQcm9wZXJ0aWVzID0gdGhpcy5kZXRlcm1pbmVGb250UHJvcGVydGllcyhzdHlsZS5mb250KTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxpbmVzLmxlbmd0aDsgaSsrKVxuICAgIHtcbiAgICAgICAgdmFyIGxpbmVXaWR0aCA9IHRoaXMuY29udGV4dC5tZWFzdXJlVGV4dChsaW5lc1tpXSkud2lkdGg7XG4gICAgICAgIGxpbmVXaWR0aHNbaV0gPSBsaW5lV2lkdGg7XG4gICAgICAgIG1heExpbmVXaWR0aCA9IE1hdGgubWF4KG1heExpbmVXaWR0aCwgbGluZVdpZHRoKTtcbiAgICB9XG5cbiAgICB2YXIgd2lkdGggPSBtYXhMaW5lV2lkdGggKyBzdHlsZS5zdHJva2VUaGlja25lc3M7XG4gICAgaWYgKHN0eWxlLmRyb3BTaGFkb3cpXG4gICAge1xuICAgICAgICB3aWR0aCArPSBzdHlsZS5kcm9wU2hhZG93RGlzdGFuY2U7XG4gICAgfVxuXG4gICAgdGhpcy5jYW52YXMud2lkdGggPSAoIHdpZHRoICsgdGhpcy5jb250ZXh0LmxpbmVXaWR0aCApICogdGhpcy5yZXNvbHV0aW9uO1xuXG4gICAgLy8gY2FsY3VsYXRlIHRleHQgaGVpZ2h0XG4gICAgdmFyIGxpbmVIZWlnaHQgPSB0aGlzLnN0eWxlLmxpbmVIZWlnaHQgfHwgZm9udFByb3BlcnRpZXMuZm9udFNpemUgKyBzdHlsZS5zdHJva2VUaGlja25lc3M7XG5cbiAgICB2YXIgaGVpZ2h0ID0gbGluZUhlaWdodCAqIGxpbmVzLmxlbmd0aDtcbiAgICBpZiAoc3R5bGUuZHJvcFNoYWRvdylcbiAgICB7XG4gICAgICAgIGhlaWdodCArPSBzdHlsZS5kcm9wU2hhZG93RGlzdGFuY2U7XG4gICAgfVxuXG4gICAgdGhpcy5jYW52YXMuaGVpZ2h0ID0gKCBoZWlnaHQgKyB0aGlzLl9zdHlsZS5wYWRkaW5nICogMiApICogdGhpcy5yZXNvbHV0aW9uO1xuXG4gICAgdGhpcy5jb250ZXh0LnNjYWxlKCB0aGlzLnJlc29sdXRpb24sIHRoaXMucmVzb2x1dGlvbik7XG5cbiAgICBpZiAobmF2aWdhdG9yLmlzQ29jb29uSlMpXG4gICAge1xuICAgICAgICB0aGlzLmNvbnRleHQuY2xlYXJSZWN0KDAsIDAsIHRoaXMuY2FudmFzLndpZHRoLCB0aGlzLmNhbnZhcy5oZWlnaHQpO1xuXG4gICAgfVxuXG4gICAgLy90aGlzLmNvbnRleHQuZmlsbFN0eWxlPVwiI0ZGMDAwMFwiO1xuICAgIC8vdGhpcy5jb250ZXh0LmZpbGxSZWN0KDAsIDAsIHRoaXMuY2FudmFzLndpZHRoLCB0aGlzLmNhbnZhcy5oZWlnaHQpO1xuXG4gICAgdGhpcy5jb250ZXh0LmZvbnQgPSBzdHlsZS5mb250O1xuICAgIHRoaXMuY29udGV4dC5zdHJva2VTdHlsZSA9IHN0eWxlLnN0cm9rZTtcbiAgICB0aGlzLmNvbnRleHQubGluZVdpZHRoID0gc3R5bGUuc3Ryb2tlVGhpY2tuZXNzO1xuICAgIHRoaXMuY29udGV4dC50ZXh0QmFzZWxpbmUgPSBzdHlsZS50ZXh0QmFzZWxpbmU7XG4gICAgdGhpcy5jb250ZXh0LmxpbmVKb2luID0gc3R5bGUubGluZUpvaW47XG4gICAgdGhpcy5jb250ZXh0Lm1pdGVyTGltaXQgPSBzdHlsZS5taXRlckxpbWl0O1xuXG4gICAgdmFyIGxpbmVQb3NpdGlvblg7XG4gICAgdmFyIGxpbmVQb3NpdGlvblk7XG5cbiAgICBpZiAoc3R5bGUuZHJvcFNoYWRvdylcbiAgICB7XG4gICAgICAgIGlmIChzdHlsZS5kcm9wU2hhZG93Qmx1ciA+IDApIHtcbiAgICAgICAgICAgIHRoaXMuY29udGV4dC5zaGFkb3dDb2xvciA9IHN0eWxlLmRyb3BTaGFkb3dDb2xvcjtcbiAgICAgICAgICAgIHRoaXMuY29udGV4dC5zaGFkb3dCbHVyID0gc3R5bGUuZHJvcFNoYWRvd0JsdXI7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmNvbnRleHQuZmlsbFN0eWxlID0gc3R5bGUuZHJvcFNoYWRvd0NvbG9yO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIHhTaGFkb3dPZmZzZXQgPSBNYXRoLmNvcyhzdHlsZS5kcm9wU2hhZG93QW5nbGUpICogc3R5bGUuZHJvcFNoYWRvd0Rpc3RhbmNlO1xuICAgICAgICB2YXIgeVNoYWRvd09mZnNldCA9IE1hdGguc2luKHN0eWxlLmRyb3BTaGFkb3dBbmdsZSkgKiBzdHlsZS5kcm9wU2hhZG93RGlzdGFuY2U7XG5cbiAgICAgICAgZm9yIChpID0gMDsgaSA8IGxpbmVzLmxlbmd0aDsgaSsrKVxuICAgICAgICB7XG4gICAgICAgICAgICBsaW5lUG9zaXRpb25YID0gc3R5bGUuc3Ryb2tlVGhpY2tuZXNzIC8gMjtcbiAgICAgICAgICAgIGxpbmVQb3NpdGlvblkgPSAoc3R5bGUuc3Ryb2tlVGhpY2tuZXNzIC8gMiArIGkgKiBsaW5lSGVpZ2h0KSArIGZvbnRQcm9wZXJ0aWVzLmFzY2VudDtcblxuICAgICAgICAgICAgaWYgKHN0eWxlLmFsaWduID09PSAncmlnaHQnKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGxpbmVQb3NpdGlvblggKz0gbWF4TGluZVdpZHRoIC0gbGluZVdpZHRoc1tpXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKHN0eWxlLmFsaWduID09PSAnY2VudGVyJylcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBsaW5lUG9zaXRpb25YICs9IChtYXhMaW5lV2lkdGggLSBsaW5lV2lkdGhzW2ldKSAvIDI7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChzdHlsZS5maWxsKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHRoaXMuY29udGV4dC5maWxsVGV4dChsaW5lc1tpXSwgbGluZVBvc2l0aW9uWCArIHhTaGFkb3dPZmZzZXQsIGxpbmVQb3NpdGlvblkgKyB5U2hhZG93T2Zmc2V0ICsgdGhpcy5fc3R5bGUucGFkZGluZyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvL3NldCBjYW52YXMgdGV4dCBzdHlsZXNcbiAgICB0aGlzLmNvbnRleHQuZmlsbFN0eWxlID0gc3R5bGUuZmlsbDtcblxuICAgIC8vZHJhdyBsaW5lcyBsaW5lIGJ5IGxpbmVcbiAgICBmb3IgKGkgPSAwOyBpIDwgbGluZXMubGVuZ3RoOyBpKyspXG4gICAge1xuICAgICAgICBsaW5lUG9zaXRpb25YID0gc3R5bGUuc3Ryb2tlVGhpY2tuZXNzIC8gMjtcbiAgICAgICAgbGluZVBvc2l0aW9uWSA9IChzdHlsZS5zdHJva2VUaGlja25lc3MgLyAyICsgaSAqIGxpbmVIZWlnaHQpICsgZm9udFByb3BlcnRpZXMuYXNjZW50O1xuXG4gICAgICAgIGlmIChzdHlsZS5hbGlnbiA9PT0gJ3JpZ2h0JylcbiAgICAgICAge1xuICAgICAgICAgICAgbGluZVBvc2l0aW9uWCArPSBtYXhMaW5lV2lkdGggLSBsaW5lV2lkdGhzW2ldO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHN0eWxlLmFsaWduID09PSAnY2VudGVyJylcbiAgICAgICAge1xuICAgICAgICAgICAgbGluZVBvc2l0aW9uWCArPSAobWF4TGluZVdpZHRoIC0gbGluZVdpZHRoc1tpXSkgLyAyO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHN0eWxlLnN0cm9rZSAmJiBzdHlsZS5zdHJva2VUaGlja25lc3MpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuY29udGV4dC5zdHJva2VUZXh0KGxpbmVzW2ldLCBsaW5lUG9zaXRpb25YLCBsaW5lUG9zaXRpb25ZICsgdGhpcy5fc3R5bGUucGFkZGluZyk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoc3R5bGUuZmlsbClcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5jb250ZXh0LmZpbGxUZXh0KGxpbmVzW2ldLCBsaW5lUG9zaXRpb25YLCBsaW5lUG9zaXRpb25ZICsgdGhpcy5fc3R5bGUucGFkZGluZyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLnVwZGF0ZVRleHR1cmUoKTtcbn07XG5cbi8qKlxuICogVXBkYXRlcyB0ZXh0dXJlIHNpemUgYmFzZWQgb24gY2FudmFzIHNpemVcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5UZXh0LnByb3RvdHlwZS51cGRhdGVUZXh0dXJlID0gZnVuY3Rpb24gKClcbntcbiAgICB2YXIgdGV4dHVyZSA9IHRoaXMuX3RleHR1cmU7XG5cbiAgICB0ZXh0dXJlLmJhc2VUZXh0dXJlLmhhc0xvYWRlZCA9IHRydWU7XG4gICAgdGV4dHVyZS5iYXNlVGV4dHVyZS5yZXNvbHV0aW9uID0gdGhpcy5yZXNvbHV0aW9uO1xuXG4gICAgdGV4dHVyZS5iYXNlVGV4dHVyZS53aWR0aCA9IHRoaXMuY2FudmFzLndpZHRoIC8gdGhpcy5yZXNvbHV0aW9uO1xuICAgIHRleHR1cmUuYmFzZVRleHR1cmUuaGVpZ2h0ID0gdGhpcy5jYW52YXMuaGVpZ2h0IC8gdGhpcy5yZXNvbHV0aW9uO1xuICAgIHRleHR1cmUuY3JvcC53aWR0aCA9IHRleHR1cmUuX2ZyYW1lLndpZHRoID0gdGhpcy5jYW52YXMud2lkdGggLyB0aGlzLnJlc29sdXRpb247XG4gICAgdGV4dHVyZS5jcm9wLmhlaWdodCA9IHRleHR1cmUuX2ZyYW1lLmhlaWdodCA9IHRoaXMuY2FudmFzLmhlaWdodCAvIHRoaXMucmVzb2x1dGlvbjtcblxuICAgIHRleHR1cmUudHJpbS54ID0gMDtcbiAgICB0ZXh0dXJlLnRyaW0ueSA9IC10aGlzLl9zdHlsZS5wYWRkaW5nO1xuXG4gICAgdGV4dHVyZS50cmltLndpZHRoID0gdGV4dHVyZS5fZnJhbWUud2lkdGg7XG4gICAgdGV4dHVyZS50cmltLmhlaWdodCA9IHRleHR1cmUuX2ZyYW1lLmhlaWdodCAtIHRoaXMuX3N0eWxlLnBhZGRpbmcqMjtcblxuICAgIHRoaXMuX3dpZHRoID0gdGhpcy5jYW52YXMud2lkdGggLyB0aGlzLnJlc29sdXRpb247XG4gICAgdGhpcy5faGVpZ2h0ID0gdGhpcy5jYW52YXMuaGVpZ2h0IC8gdGhpcy5yZXNvbHV0aW9uO1xuXG4gICAgdGV4dHVyZS5iYXNlVGV4dHVyZS5lbWl0KCd1cGRhdGUnLCAgdGV4dHVyZS5iYXNlVGV4dHVyZSk7XG5cbiAgICB0aGlzLmRpcnR5ID0gZmFsc2U7XG59O1xuXG4vKipcbiAqIFJlbmRlcnMgdGhlIG9iamVjdCB1c2luZyB0aGUgV2ViR0wgcmVuZGVyZXJcbiAqXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcn1cbiAqL1xuVGV4dC5wcm90b3R5cGUucmVuZGVyV2ViR0wgPSBmdW5jdGlvbiAocmVuZGVyZXIpXG57XG4gICAgaWYgKHRoaXMuZGlydHkpXG4gICAge1xuICAgICAgICAvL3RoaXMucmVzb2x1dGlvbiA9IDEvL3JlbmRlcmVyLnJlc29sdXRpb247XG5cbiAgICAgICAgdGhpcy51cGRhdGVUZXh0KCk7XG4gICAgfVxuXG4gICAgU3ByaXRlLnByb3RvdHlwZS5yZW5kZXJXZWJHTC5jYWxsKHRoaXMsIHJlbmRlcmVyKTtcbn07XG5cbi8qKlxuICogUmVuZGVycyB0aGUgb2JqZWN0IHVzaW5nIHRoZSBDYW52YXMgcmVuZGVyZXJcbiAqXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuQ2FudmFzUmVuZGVyZXJ9XG4gKiBAcHJpdmF0ZVxuICovXG5UZXh0LnByb3RvdHlwZS5fcmVuZGVyQ2FudmFzID0gZnVuY3Rpb24gKHJlbmRlcmVyKVxue1xuICAgIGlmICh0aGlzLmRpcnR5KVxuICAgIHtcbiAgICAgLy8gICB0aGlzLnJlc29sdXRpb24gPSAxLy9yZW5kZXJlci5yZXNvbHV0aW9uO1xuXG4gICAgICAgIHRoaXMudXBkYXRlVGV4dCgpO1xuICAgIH1cblxuICAgIFNwcml0ZS5wcm90b3R5cGUuX3JlbmRlckNhbnZhcy5jYWxsKHRoaXMsIHJlbmRlcmVyKTtcbn07XG5cbi8qKlxuICogQ2FsY3VsYXRlcyB0aGUgYXNjZW50LCBkZXNjZW50IGFuZCBmb250U2l6ZSBvZiBhIGdpdmVuIGZvbnRTdHlsZVxuICpcbiAqIEBwYXJhbSBmb250U3R5bGUge29iamVjdH1cbiAqIEBwcml2YXRlXG4gKi9cblRleHQucHJvdG90eXBlLmRldGVybWluZUZvbnRQcm9wZXJ0aWVzID0gZnVuY3Rpb24gKGZvbnRTdHlsZSlcbntcbiAgICB2YXIgcHJvcGVydGllcyA9IFRleHQuZm9udFByb3BlcnRpZXNDYWNoZVtmb250U3R5bGVdO1xuXG4gICAgaWYgKCFwcm9wZXJ0aWVzKVxuICAgIHtcbiAgICAgICAgcHJvcGVydGllcyA9IHt9O1xuXG4gICAgICAgIHZhciBjYW52YXMgPSBUZXh0LmZvbnRQcm9wZXJ0aWVzQ2FudmFzO1xuICAgICAgICB2YXIgY29udGV4dCA9IFRleHQuZm9udFByb3BlcnRpZXNDb250ZXh0O1xuXG4gICAgICAgIGNvbnRleHQuZm9udCA9IGZvbnRTdHlsZTtcblxuICAgICAgICB2YXIgd2lkdGggPSBNYXRoLmNlaWwoY29udGV4dC5tZWFzdXJlVGV4dCgnfE3DiXEnKS53aWR0aCk7XG4gICAgICAgIHZhciBiYXNlbGluZSA9IE1hdGguY2VpbChjb250ZXh0Lm1lYXN1cmVUZXh0KCdNJykud2lkdGgpO1xuICAgICAgICB2YXIgaGVpZ2h0ID0gMiAqIGJhc2VsaW5lO1xuXG4gICAgICAgIGJhc2VsaW5lID0gYmFzZWxpbmUgKiAxLjQgfCAwO1xuXG4gICAgICAgIGNhbnZhcy53aWR0aCA9IHdpZHRoO1xuICAgICAgICBjYW52YXMuaGVpZ2h0ID0gaGVpZ2h0O1xuXG4gICAgICAgIGNvbnRleHQuZmlsbFN0eWxlID0gJyNmMDAnO1xuICAgICAgICBjb250ZXh0LmZpbGxSZWN0KDAsIDAsIHdpZHRoLCBoZWlnaHQpO1xuXG4gICAgICAgIGNvbnRleHQuZm9udCA9IGZvbnRTdHlsZTtcblxuICAgICAgICBjb250ZXh0LnRleHRCYXNlbGluZSA9ICdhbHBoYWJldGljJztcbiAgICAgICAgY29udGV4dC5maWxsU3R5bGUgPSAnIzAwMCc7XG4gICAgICAgIGNvbnRleHQuZmlsbFRleHQoJ3xNw4lxJywgMCwgYmFzZWxpbmUpO1xuXG4gICAgICAgIHZhciBpbWFnZWRhdGEgPSBjb250ZXh0LmdldEltYWdlRGF0YSgwLCAwLCB3aWR0aCwgaGVpZ2h0KS5kYXRhO1xuICAgICAgICB2YXIgcGl4ZWxzID0gaW1hZ2VkYXRhLmxlbmd0aDtcbiAgICAgICAgdmFyIGxpbmUgPSB3aWR0aCAqIDQ7XG5cbiAgICAgICAgdmFyIGksIGo7XG5cbiAgICAgICAgdmFyIGlkeCA9IDA7XG4gICAgICAgIHZhciBzdG9wID0gZmFsc2U7XG5cbiAgICAgICAgLy8gYXNjZW50LiBzY2FuIGZyb20gdG9wIHRvIGJvdHRvbSB1bnRpbCB3ZSBmaW5kIGEgbm9uIHJlZCBwaXhlbFxuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgYmFzZWxpbmU7IGkrKylcbiAgICAgICAge1xuICAgICAgICAgICAgZm9yIChqID0gMDsgaiA8IGxpbmU7IGogKz0gNClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBpZiAoaW1hZ2VkYXRhW2lkeCArIGpdICE9PSAyNTUpXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBzdG9wID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCFzdG9wKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGlkeCArPSBsaW5lO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcHJvcGVydGllcy5hc2NlbnQgPSBiYXNlbGluZSAtIGk7XG5cbiAgICAgICAgaWR4ID0gcGl4ZWxzIC0gbGluZTtcbiAgICAgICAgc3RvcCA9IGZhbHNlO1xuXG4gICAgICAgIC8vIGRlc2NlbnQuIHNjYW4gZnJvbSBib3R0b20gdG8gdG9wIHVudGlsIHdlIGZpbmQgYSBub24gcmVkIHBpeGVsXG4gICAgICAgIGZvciAoaSA9IGhlaWdodDsgaSA+IGJhc2VsaW5lOyBpLS0pXG4gICAgICAgIHtcbiAgICAgICAgICAgIGZvciAoaiA9IDA7IGogPCBsaW5lOyBqICs9IDQpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgaWYgKGltYWdlZGF0YVtpZHggKyBqXSAhPT0gMjU1KVxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgc3RvcCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghc3RvcClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBpZHggLT0gbGluZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHByb3BlcnRpZXMuZGVzY2VudCA9IGkgLSBiYXNlbGluZTtcbiAgICAgICAgcHJvcGVydGllcy5mb250U2l6ZSA9IHByb3BlcnRpZXMuYXNjZW50ICsgcHJvcGVydGllcy5kZXNjZW50O1xuXG4gICAgICAgIFRleHQuZm9udFByb3BlcnRpZXNDYWNoZVtmb250U3R5bGVdID0gcHJvcGVydGllcztcbiAgICB9XG5cbiAgICByZXR1cm4gcHJvcGVydGllcztcbn07XG5cbi8qKlxuICogQXBwbGllcyBuZXdsaW5lcyB0byBhIHN0cmluZyB0byBoYXZlIGl0IG9wdGltYWxseSBmaXQgaW50byB0aGUgaG9yaXpvbnRhbFxuICogYm91bmRzIHNldCBieSB0aGUgVGV4dCBvYmplY3QncyB3b3JkV3JhcFdpZHRoIHByb3BlcnR5LlxuICpcbiAqIEBwYXJhbSB0ZXh0IHtzdHJpbmd9XG4gKiBAcHJpdmF0ZVxuICovXG5UZXh0LnByb3RvdHlwZS53b3JkV3JhcCA9IGZ1bmN0aW9uICh0ZXh0KVxue1xuICAgIC8vIEdyZWVkeSB3cmFwcGluZyBhbGdvcml0aG0gdGhhdCB3aWxsIHdyYXAgd29yZHMgYXMgdGhlIGxpbmUgZ3Jvd3MgbG9uZ2VyXG4gICAgLy8gdGhhbiBpdHMgaG9yaXpvbnRhbCBib3VuZHMuXG4gICAgdmFyIHJlc3VsdCA9ICcnO1xuICAgIHZhciBsaW5lcyA9IHRleHQuc3BsaXQoJ1xcbicpO1xuICAgIHZhciB3b3JkV3JhcFdpZHRoID0gdGhpcy5fc3R5bGUud29yZFdyYXBXaWR0aDtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxpbmVzLmxlbmd0aDsgaSsrKVxuICAgIHtcbiAgICAgICAgdmFyIHNwYWNlTGVmdCA9IHdvcmRXcmFwV2lkdGg7XG4gICAgICAgIHZhciB3b3JkcyA9IGxpbmVzW2ldLnNwbGl0KCcgJyk7XG4gICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgd29yZHMubGVuZ3RoOyBqKyspXG4gICAgICAgIHtcbiAgICAgICAgICAgIHZhciB3b3JkV2lkdGggPSB0aGlzLmNvbnRleHQubWVhc3VyZVRleHQod29yZHNbal0pLndpZHRoO1xuICAgICAgICAgICAgdmFyIHdvcmRXaWR0aFdpdGhTcGFjZSA9IHdvcmRXaWR0aCArIHRoaXMuY29udGV4dC5tZWFzdXJlVGV4dCgnICcpLndpZHRoO1xuICAgICAgICAgICAgaWYgKGogPT09IDAgfHwgd29yZFdpZHRoV2l0aFNwYWNlID4gc3BhY2VMZWZ0KVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIC8vIFNraXAgcHJpbnRpbmcgdGhlIG5ld2xpbmUgaWYgaXQncyB0aGUgZmlyc3Qgd29yZCBvZiB0aGUgbGluZSB0aGF0IGlzXG4gICAgICAgICAgICAgICAgLy8gZ3JlYXRlciB0aGFuIHRoZSB3b3JkIHdyYXAgd2lkdGguXG4gICAgICAgICAgICAgICAgaWYgKGogPiAwKVxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0ICs9ICdcXG4nO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXN1bHQgKz0gd29yZHNbal07XG4gICAgICAgICAgICAgICAgc3BhY2VMZWZ0ID0gd29yZFdyYXBXaWR0aCAtIHdvcmRXaWR0aDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBzcGFjZUxlZnQgLT0gd29yZFdpZHRoV2l0aFNwYWNlO1xuICAgICAgICAgICAgICAgIHJlc3VsdCArPSAnICcgKyB3b3Jkc1tqXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChpIDwgbGluZXMubGVuZ3RoLTEpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJlc3VsdCArPSAnXFxuJztcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xufTtcblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBib3VuZHMgb2YgdGhlIFRleHQgYXMgYSByZWN0YW5nbGUuIFRoZSBib3VuZHMgY2FsY3VsYXRpb24gdGFrZXMgdGhlIHdvcmxkVHJhbnNmb3JtIGludG8gYWNjb3VudC5cbiAqXG4gKiBAcGFyYW0gbWF0cml4IHtQSVhJLk1hdHJpeH0gdGhlIHRyYW5zZm9ybWF0aW9uIG1hdHJpeCBvZiB0aGUgVGV4dFxuICogQHJldHVybiB7UElYSS5SZWN0YW5nbGV9IHRoZSBmcmFtaW5nIHJlY3RhbmdsZVxuICovXG5UZXh0LnByb3RvdHlwZS5nZXRCb3VuZHMgPSBmdW5jdGlvbiAobWF0cml4KVxue1xuICAgIGlmICh0aGlzLmRpcnR5KVxuICAgIHtcbiAgICAgICAgdGhpcy51cGRhdGVUZXh0KCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIFNwcml0ZS5wcm90b3R5cGUuZ2V0Qm91bmRzLmNhbGwodGhpcywgbWF0cml4KTtcbn07XG5cbi8qKlxuICogRGVzdHJveXMgdGhpcyB0ZXh0IG9iamVjdC5cbiAqXG4gKiBAcGFyYW0gW2Rlc3Ryb3lCYXNlVGV4dHVyZT10cnVlXSB7Ym9vbGVhbn0gd2hldGhlciB0byBkZXN0cm95IHRoZSBiYXNlIHRleHR1cmUgYXMgd2VsbFxuICovXG5UZXh0LnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKGRlc3Ryb3lCYXNlVGV4dHVyZSlcbntcbiAgICAvLyBtYWtlIHN1cmUgdG8gcmVzZXQgdGhlIHRoZSBjb250ZXh0IGFuZCBjYW52YXMuLiBkb250IHdhbnQgdGhpcyBoYW5naW5nIGFyb3VuZCBpbiBtZW1vcnkhXG4gICAgdGhpcy5jb250ZXh0ID0gbnVsbDtcbiAgICB0aGlzLmNhbnZhcyA9IG51bGw7XG5cbiAgICB0aGlzLl9zdHlsZSA9IG51bGw7XG5cbiAgICB0aGlzLl90ZXh0dXJlLmRlc3Ryb3koZGVzdHJveUJhc2VUZXh0dXJlID09PSB1bmRlZmluZWQgPyB0cnVlIDogZGVzdHJveUJhc2VUZXh0dXJlKTtcbn07XG4iLCJ2YXIgdXRpbHMgPSByZXF1aXJlKCcuLi91dGlscycpLFxuICAgIENPTlNUID0gcmVxdWlyZSgnLi4vY29uc3QnKSxcbiAgICBFdmVudEVtaXR0ZXIgPSByZXF1aXJlKCdldmVudGVtaXR0ZXIzJyk7XG5cbi8qKlxuICogQSB0ZXh0dXJlIHN0b3JlcyB0aGUgaW5mb3JtYXRpb24gdGhhdCByZXByZXNlbnRzIGFuIGltYWdlLiBBbGwgdGV4dHVyZXMgaGF2ZSBhIGJhc2UgdGV4dHVyZS5cbiAqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gc291cmNlIHtJbWFnZXxDYW52YXN9IHRoZSBzb3VyY2Ugb2JqZWN0IG9mIHRoZSB0ZXh0dXJlLlxuICogQHBhcmFtIFtzY2FsZU1vZGU9UElYSS5TQ0FMRV9NT0RFUy5ERUZBVUxUXSB7bnVtYmVyfSBTZWUge0BsaW5rIFBJWEkuU0NBTEVfTU9ERVN9IGZvciBwb3NzaWJsZSB2YWx1ZXNcbiAqIEBwYXJhbSByZXNvbHV0aW9uIHtudW1iZXJ9IHRoZSByZXNvbHV0aW9uIG9mIHRoZSB0ZXh0dXJlIGZvciBkZXZpY2VzIHdpdGggZGlmZmVyZW50IHBpeGVsIHJhdGlvc1xuICovXG5mdW5jdGlvbiBCYXNlVGV4dHVyZShzb3VyY2UsIHNjYWxlTW9kZSwgcmVzb2x1dGlvbilcbntcbiAgICBFdmVudEVtaXR0ZXIuY2FsbCh0aGlzKTtcblxuICAgIHRoaXMudWlkID0gdXRpbHMudWlkKCk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgUmVzb2x1dGlvbiBvZiB0aGUgdGV4dHVyZS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLnJlc29sdXRpb24gPSByZXNvbHV0aW9uIHx8IDE7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgd2lkdGggb2YgdGhlIGJhc2UgdGV4dHVyZSBzZXQgd2hlbiB0aGUgaW1hZ2UgaGFzIGxvYWRlZFxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEByZWFkT25seVxuICAgICAqL1xuICAgIHRoaXMud2lkdGggPSAxMDA7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgaGVpZ2h0IG9mIHRoZSBiYXNlIHRleHR1cmUgc2V0IHdoZW4gdGhlIGltYWdlIGhhcyBsb2FkZWRcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAcmVhZE9ubHlcbiAgICAgKi9cbiAgICB0aGlzLmhlaWdodCA9IDEwMDtcblxuICAgIC8vIFRPRE8gZG9jc1xuICAgIC8vIHVzZWQgdG8gc3RvcmUgdGhlIGFjdHVhbCBkaW1lbnNpb25zIG9mIHRoZSBzb3VyY2VcbiAgICAvKipcbiAgICAgKiBVc2VkIHRvIHN0b3JlIHRoZSBhY3R1YWwgd2lkdGggb2YgdGhlIHNvdXJjZSBvZiB0aGlzIHRleHR1cmVcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAcmVhZE9ubHlcbiAgICAgKi9cbiAgICB0aGlzLnJlYWxXaWR0aCA9IDEwMDtcbiAgICAvKipcbiAgICAgKiBVc2VkIHRvIHN0b3JlIHRoZSBhY3R1YWwgaGVpZ2h0IG9mIHRoZSBzb3VyY2Ugb2YgdGhpcyB0ZXh0dXJlXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQHJlYWRPbmx5XG4gICAgICovXG4gICAgdGhpcy5yZWFsSGVpZ2h0ID0gMTAwO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHNjYWxlIG1vZGUgdG8gYXBwbHkgd2hlbiBzY2FsaW5nIHRoaXMgdGV4dHVyZVxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IFBJWEkuU0NBTEVfTU9ERVMuTElORUFSXG4gICAgICogQHNlZSBQSVhJLlNDQUxFX01PREVTXG4gICAgICovXG4gICAgdGhpcy5zY2FsZU1vZGUgPSBzY2FsZU1vZGUgfHwgQ09OU1QuU0NBTEVfTU9ERVMuREVGQVVMVDtcblxuICAgIC8qKlxuICAgICAqIFNldCB0byB0cnVlIG9uY2UgdGhlIGJhc2UgdGV4dHVyZSBoYXMgc3VjY2Vzc2Z1bGx5IGxvYWRlZC5cbiAgICAgKlxuICAgICAqIFRoaXMgaXMgbmV2ZXIgdHJ1ZSBpZiB0aGUgdW5kZXJseWluZyBzb3VyY2UgZmFpbHMgdG8gbG9hZCBvciBoYXMgbm8gdGV4dHVyZSBkYXRhLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKiBAcmVhZE9ubHlcbiAgICAgKi9cbiAgICB0aGlzLmhhc0xvYWRlZCA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogU2V0IHRvIHRydWUgaWYgdGhlIHNvdXJjZSBpcyBjdXJyZW50bHkgbG9hZGluZy5cbiAgICAgKlxuICAgICAqIElmIGFuIEltYWdlIHNvdXJjZSBpcyBsb2FkaW5nIHRoZSAnbG9hZGVkJyBvciAnZXJyb3InIGV2ZW50IHdpbGwgYmVcbiAgICAgKiBkaXNwYXRjaGVkIHdoZW4gdGhlIG9wZXJhdGlvbiBlbmRzLiBBbiB1bmRlcnlsaW5nIHNvdXJjZSB0aGF0IGlzXG4gICAgICogaW1tZWRpYXRlbHktYXZhaWxhYmxlIGJ5cGFzc2VzIGxvYWRpbmcgZW50aXJlbHkuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqIEByZWFkb25seVxuICAgICAqL1xuICAgIHRoaXMuaXNMb2FkaW5nID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgaW1hZ2Ugc291cmNlIHRoYXQgaXMgdXNlZCB0byBjcmVhdGUgdGhlIHRleHR1cmUuXG4gICAgICpcbiAgICAgKiBUT0RPOiBNYWtlIHRoaXMgYSBzZXR0ZXIgdGhhdCBjYWxscyBsb2FkU291cmNlKCk7XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtJbWFnZXxDYW52YXN9XG4gICAgICogQHJlYWRvbmx5XG4gICAgICovXG4gICAgdGhpcy5zb3VyY2UgPSBudWxsOyAvLyBzZXQgaW4gbG9hZFNvdXJjZSwgaWYgYXQgYWxsXG5cbiAgICAvKipcbiAgICAgKiBDb250cm9scyBpZiBSR0IgY2hhbm5lbHMgc2hvdWxkIGJlIHByZS1tdWx0aXBsaWVkIGJ5IEFscGhhICAoV2ViR0wgb25seSlcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICogQGRlZmF1bHQgdHJ1ZVxuICAgICAqL1xuICAgIHRoaXMucHJlbXVsdGlwbGllZEFscGhhID0gdHJ1ZTtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge3N0cmluZ31cbiAgICAgKi9cbiAgICB0aGlzLmltYWdlVXJsID0gbnVsbDtcblxuICAgIC8qKlxuICAgICAqIFdldGhlciBvciBub3QgdGhlIHRleHR1cmUgaXMgYSBwb3dlciBvZiB0d28sIHRyeSB0byB1c2UgcG93ZXIgb2YgdHdvIHRleHR1cmVzIGFzIG11Y2ggYXMgeW91IGNhblxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLmlzUG93ZXJPZlR3byA9IGZhbHNlO1xuXG4gICAgLy8gdXNlZCBmb3Igd2ViR0xcblxuICAgIC8qKlxuICAgICAqXG4gICAgICogU2V0IHRoaXMgdG8gdHJ1ZSBpZiBhIG1pcG1hcCBvZiB0aGlzIHRleHR1cmUgbmVlZHMgdG8gYmUgZ2VuZXJhdGVkLiBUaGlzIHZhbHVlIG5lZWRzIHRvIGJlIHNldCBiZWZvcmUgdGhlIHRleHR1cmUgaXMgdXNlZFxuICAgICAqIEFsc28gdGhlIHRleHR1cmUgbXVzdCBiZSBhIHBvd2VyIG9mIHR3byBzaXplIHRvIHdvcmtcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICovXG4gICAgdGhpcy5taXBtYXAgPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIEEgbWFwIG9mIHJlbmRlcmVyIElEcyB0byB3ZWJnbCB0ZXh0dXJlc1xuICAgICAqXG4gICAgICogQG1lbWJlciB7b2JqZWN0PG51bWJlciwgV2ViR0xUZXh0dXJlPn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX2dsVGV4dHVyZXMgPSB7fTtcbiAgICB0aGlzLl9hY3RpdmUgPSBmYWxzZTtcbiAgICB0aGlzLl9pZCA9IDA7XG4gICAgXG4gICAgLy8gaWYgbm8gc291cmNlIHBhc3NlZCBkb24ndCB0cnkgdG8gbG9hZFxuICAgIGlmIChzb3VyY2UpXG4gICAge1xuICAgICAgICB0aGlzLmxvYWRTb3VyY2Uoc291cmNlKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBGaXJlZCB3aGVuIGEgbm90LWltbWVkaWF0ZWx5LWF2YWlsYWJsZSBzb3VyY2UgZmluaXNoZXMgbG9hZGluZy5cbiAgICAgKlxuICAgICAqIEBldmVudCBsb2FkZWRcbiAgICAgKiBAbWVtYmVyb2YgUElYSS5CYXNlVGV4dHVyZSNcbiAgICAgKiBAcHJvdGVjdGVkXG4gICAgICovXG5cbiAgICAvKipcbiAgICAgKiBGaXJlZCB3aGVuIGEgbm90LWltbWVkaWF0ZWx5LWF2YWlsYWJsZSBzb3VyY2UgZmFpbHMgdG8gbG9hZC5cbiAgICAgKlxuICAgICAqIEBldmVudCBlcnJvclxuICAgICAqIEBtZW1iZXJvZiBQSVhJLkJhc2VUZXh0dXJlI1xuICAgICAqIEBwcm90ZWN0ZWRcbiAgICAgKi9cbn1cblxuQmFzZVRleHR1cmUucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShFdmVudEVtaXR0ZXIucHJvdG90eXBlKTtcbkJhc2VUZXh0dXJlLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IEJhc2VUZXh0dXJlO1xubW9kdWxlLmV4cG9ydHMgPSBCYXNlVGV4dHVyZTtcblxuLyoqXG4gKiBVcGRhdGVzIHRoZSB0ZXh0dXJlIG9uIGFsbCB0aGUgd2ViZ2wgcmVuZGVyZXJzLCB0aGlzIGFsc28gYXNzdW1lcyB0aGUgc3JjIGhhcyBjaGFuZ2VkLlxuICpcbiAqIEBmaXJlcyB1cGRhdGVcbiAqL1xuQmFzZVRleHR1cmUucHJvdG90eXBlLnVwZGF0ZSA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy5yZWFsV2lkdGggPSB0aGlzLnNvdXJjZS5uYXR1cmFsV2lkdGggfHwgdGhpcy5zb3VyY2Uud2lkdGg7XG4gICAgdGhpcy5yZWFsSGVpZ2h0ID0gdGhpcy5zb3VyY2UubmF0dXJhbEhlaWdodCB8fCB0aGlzLnNvdXJjZS5oZWlnaHQ7XG5cbiAgICB0aGlzLndpZHRoID0gdGhpcy5yZWFsV2lkdGggLyB0aGlzLnJlc29sdXRpb247XG4gICAgdGhpcy5oZWlnaHQgPSB0aGlzLnJlYWxIZWlnaHQgLyB0aGlzLnJlc29sdXRpb247XG5cbiAgICB0aGlzLmlzUG93ZXJPZlR3byA9IHV0aWxzLmlzUG93ZXJPZlR3byh0aGlzLnJlYWxXaWR0aCwgdGhpcy5yZWFsSGVpZ2h0KTtcblxuICAgIHRoaXMuZW1pdCgndXBkYXRlJywgdGhpcyk7XG59O1xuXG4vKipcbiAqIExvYWQgYSBzb3VyY2UuXG4gKlxuICogSWYgdGhlIHNvdXJjZSBpcyBub3QtaW1tZWRpYXRlbHktYXZhaWxhYmxlLCBzdWNoIGFzIGFuIGltYWdlIHRoYXQgbmVlZHMgdG8gYmVcbiAqIGRvd25sb2FkZWQsIHRoZW4gdGhlICdsb2FkZWQnIG9yICdlcnJvcicgZXZlbnQgd2lsbCBiZSBkaXNwYXRjaGVkIGluIHRoZSBmdXR1cmVcbiAqIGFuZCBgaGFzTG9hZGVkYCB3aWxsIHJlbWFpbiBmYWxzZSBhZnRlciB0aGlzIGNhbGwuXG4gKlxuICogVGhlIGxvZ2ljIHN0YXRlIGFmdGVyIGNhbGxpbmcgYGxvYWRTb3VyY2VgIGRpcmVjdGx5IG9yIGluZGlyZWN0bHkgKGVnLiBgZnJvbUltYWdlYCwgYG5ldyBCYXNlVGV4dHVyZWApIGlzOlxuICpcbiAqICAgICBpZiAodGV4dHVyZS5oYXNMb2FkZWQpXG4ge1xuICogICAgICAgIC8vIHRleHR1cmUgcmVhZHkgZm9yIHVzZVxuICogICAgIH0gZWxzZSBpZiAodGV4dHVyZS5pc0xvYWRpbmcpXG4ge1xuICogICAgICAgIC8vIGxpc3RlbiB0byAnbG9hZGVkJyBhbmQvb3IgJ2Vycm9yJyBldmVudHMgb24gdGV4dHVyZVxuICogICAgIH0gZWxzZSB7XG4gKiAgICAgICAgLy8gbm90IGxvYWRpbmcsIG5vdCBnb2luZyB0byBsb2FkIFVOTEVTUyB0aGUgc291cmNlIGlzIHJlbG9hZGVkXG4gKiAgICAgICAgLy8gKGl0IG1heSBzdGlsbCBtYWtlIHNlbnNlIHRvIGxpc3RlbiB0byB0aGUgZXZlbnRzKVxuICogICAgIH1cbiAqXG4gKiBAcHJvdGVjdGVkXG4gKiBAcGFyYW0gc291cmNlIHtJbWFnZXxDYW52YXN9IHRoZSBzb3VyY2Ugb2JqZWN0IG9mIHRoZSB0ZXh0dXJlLlxuICovXG5CYXNlVGV4dHVyZS5wcm90b3R5cGUubG9hZFNvdXJjZSA9IGZ1bmN0aW9uIChzb3VyY2UpXG57XG4gICAgdmFyIHdhc0xvYWRpbmcgPSB0aGlzLmlzTG9hZGluZztcbiAgICB0aGlzLmhhc0xvYWRlZCA9IGZhbHNlO1xuICAgIHRoaXMuaXNMb2FkaW5nID0gZmFsc2U7XG5cbiAgICBpZiAod2FzTG9hZGluZyAmJiB0aGlzLnNvdXJjZSlcbiAgICB7XG4gICAgICAgIHRoaXMuc291cmNlLm9ubG9hZCA9IG51bGw7XG4gICAgICAgIHRoaXMuc291cmNlLm9uZXJyb3IgPSBudWxsO1xuICAgIH1cblxuICAgIHRoaXMuc291cmNlID0gc291cmNlO1xuXG4gICAgLy8gQXBwbHkgc291cmNlIGlmIGxvYWRlZC4gT3RoZXJ3aXNlIHNldHVwIGFwcHJvcHJpYXRlIGxvYWRpbmcgbW9uaXRvcnMuXG4gICAgaWYgKCh0aGlzLnNvdXJjZS5jb21wbGV0ZSB8fCB0aGlzLnNvdXJjZS5nZXRDb250ZXh0KSAmJiB0aGlzLnNvdXJjZS53aWR0aCAmJiB0aGlzLnNvdXJjZS5oZWlnaHQpXG4gICAge1xuICAgICAgICB0aGlzLl9zb3VyY2VMb2FkZWQoKTtcbiAgICB9XG4gICAgZWxzZSBpZiAoIXNvdXJjZS5nZXRDb250ZXh0KVxuICAgIHtcblxuICAgICAgICAvLyBJbWFnZSBmYWlsIC8gbm90IHJlYWR5XG4gICAgICAgIHRoaXMuaXNMb2FkaW5nID0gdHJ1ZTtcblxuICAgICAgICB2YXIgc2NvcGUgPSB0aGlzO1xuXG4gICAgICAgIHNvdXJjZS5vbmxvYWQgPSBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICBzb3VyY2Uub25sb2FkID0gbnVsbDtcbiAgICAgICAgICAgIHNvdXJjZS5vbmVycm9yID0gbnVsbDtcblxuICAgICAgICAgICAgaWYgKCFzY29wZS5pc0xvYWRpbmcpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBzY29wZS5pc0xvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgICAgIHNjb3BlLl9zb3VyY2VMb2FkZWQoKTtcblxuICAgICAgICAgICAgc2NvcGUuZW1pdCgnbG9hZGVkJywgc2NvcGUpO1xuICAgICAgICB9O1xuXG4gICAgICAgIHNvdXJjZS5vbmVycm9yID0gZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgc291cmNlLm9ubG9hZCA9IG51bGw7XG4gICAgICAgICAgICBzb3VyY2Uub25lcnJvciA9IG51bGw7XG5cbiAgICAgICAgICAgIGlmICghc2NvcGUuaXNMb2FkaW5nKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgc2NvcGUuaXNMb2FkaW5nID0gZmFsc2U7XG4gICAgICAgICAgICBzY29wZS5lbWl0KCdlcnJvcicsIHNjb3BlKTtcbiAgICAgICAgfTtcblxuICAgICAgICAvLyBQZXIgaHR0cDovL3d3dy53My5vcmcvVFIvaHRtbDUvZW1iZWRkZWQtY29udGVudC0wLmh0bWwjdGhlLWltZy1lbGVtZW50XG4gICAgICAgIC8vICAgXCJUaGUgdmFsdWUgb2YgYGNvbXBsZXRlYCBjYW4gdGh1cyBjaGFuZ2Ugd2hpbGUgYSBzY3JpcHQgaXMgZXhlY3V0aW5nLlwiXG4gICAgICAgIC8vIFNvIGNvbXBsZXRlIG5lZWRzIHRvIGJlIHJlLWNoZWNrZWQgYWZ0ZXIgdGhlIGNhbGxiYWNrcyBoYXZlIGJlZW4gYWRkZWQuLlxuICAgICAgICAvLyBOT1RFOiBjb21wbGV0ZSB3aWxsIGJlIHRydWUgaWYgdGhlIGltYWdlIGhhcyBubyBzcmMgc28gYmVzdCB0byBjaGVjayBpZiB0aGUgc3JjIGlzIHNldC5cbiAgICAgICAgaWYgKHNvdXJjZS5jb21wbGV0ZSAmJiBzb3VyY2Uuc3JjKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmlzTG9hZGluZyA9IGZhbHNlO1xuXG4gICAgICAgICAgICAvLyAuLmFuZCBpZiB3ZSdyZSBjb21wbGV0ZSBub3csIG5vIG5lZWQgZm9yIGNhbGxiYWNrc1xuICAgICAgICAgICAgc291cmNlLm9ubG9hZCA9IG51bGw7XG4gICAgICAgICAgICBzb3VyY2Uub25lcnJvciA9IG51bGw7XG5cbiAgICAgICAgICAgIGlmIChzb3VyY2Uud2lkdGggJiYgc291cmNlLmhlaWdodClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9zb3VyY2VMb2FkZWQoKTtcblxuICAgICAgICAgICAgICAgIC8vIElmIGFueSBwcmV2aW91cyBzdWJzY3JpYmVycyBwb3NzaWJsZVxuICAgICAgICAgICAgICAgIGlmICh3YXNMb2FkaW5nKVxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5lbWl0KCdsb2FkZWQnLCB0aGlzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgLy8gSWYgYW55IHByZXZpb3VzIHN1YnNjcmliZXJzIHBvc3NpYmxlXG4gICAgICAgICAgICAgICAgaWYgKHdhc0xvYWRpbmcpXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmVtaXQoJ2Vycm9yJywgdGhpcyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxufTtcblxuLyoqXG4gKiBVc2VkIGludGVybmFsbHkgdG8gdXBkYXRlIHRoZSB3aWR0aCwgaGVpZ2h0LCBhbmQgc29tZSBvdGhlciB0cmFja2luZyB2YXJzIG9uY2VcbiAqIGEgc291cmNlIGhhcyBzdWNjZXNzZnVsbHkgbG9hZGVkLlxuICpcbiAqIEBwcml2YXRlXG4gKi9cbkJhc2VUZXh0dXJlLnByb3RvdHlwZS5fc291cmNlTG9hZGVkID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLmhhc0xvYWRlZCA9IHRydWU7XG4gICAgdGhpcy51cGRhdGUoKTtcbn07XG5cbi8qKlxuICogRGVzdHJveXMgdGhpcyBiYXNlIHRleHR1cmVcbiAqXG4gKi9cbkJhc2VUZXh0dXJlLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKClcbntcbiAgICBpZiAodGhpcy5pbWFnZVVybClcbiAgICB7XG4gICAgICAgIGRlbGV0ZSB1dGlscy5CYXNlVGV4dHVyZUNhY2hlW3RoaXMuaW1hZ2VVcmxdO1xuICAgICAgICBkZWxldGUgdXRpbHMuVGV4dHVyZUNhY2hlW3RoaXMuaW1hZ2VVcmxdO1xuXG4gICAgICAgIHRoaXMuaW1hZ2VVcmwgPSBudWxsO1xuXG4gICAgICAgIGlmICghbmF2aWdhdG9yLmlzQ29jb29uSlMpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuc291cmNlLnNyYyA9ICcnO1xuICAgICAgICB9XG4gICAgfVxuICAgIGVsc2UgaWYgKHRoaXMuc291cmNlICYmIHRoaXMuc291cmNlLl9waXhpSWQpXG4gICAge1xuICAgICAgICBkZWxldGUgdXRpbHMuQmFzZVRleHR1cmVDYWNoZVt0aGlzLnNvdXJjZS5fcGl4aUlkXTtcbiAgICB9XG5cbiAgICB0aGlzLnNvdXJjZSA9IG51bGw7XG5cbiAgICB0aGlzLmRpc3Bvc2UoKTtcbn07XG5cbi8qKlxuICogRnJlZXMgdGhlIHRleHR1cmUgZnJvbSBXZWJHTCBtZW1vcnkgd2l0aG91dCBkZXN0cm95aW5nIHRoaXMgdGV4dHVyZSBvYmplY3QuXG4gKiBUaGlzIG1lYW5zIHlvdSBjYW4gc3RpbGwgdXNlIHRoZSB0ZXh0dXJlIGxhdGVyIHdoaWNoIHdpbGwgdXBsb2FkIGl0IHRvIEdQVVxuICogbWVtb3J5IGFnYWluLlxuICpcbiAqL1xuQmFzZVRleHR1cmUucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKVxue1xuICAgIHRoaXMuZW1pdCgnZGlzcG9zZScsIHRoaXMpO1xuXG4gICAgLy8gdGhpcyBzaG91bGQgbm8gbG9uZ2VyIGJlIG5lZWRlZCwgdGhlIHJlbmRlcmVycyBzaG91bGQgY2xlYW51cCBhbGwgdGhlIGdsIHRleHR1cmVzLlxuICAgIC8vIHRoaXMuX2dsVGV4dHVyZXMgPSB7fTtcbn07XG5cbi8qKlxuICogQ2hhbmdlcyB0aGUgc291cmNlIGltYWdlIG9mIHRoZSB0ZXh0dXJlLlxuICogVGhlIG9yaWdpbmFsIHNvdXJjZSBtdXN0IGJlIGFuIEltYWdlIGVsZW1lbnQuXG4gKlxuICogQHBhcmFtIG5ld1NyYyB7c3RyaW5nfSB0aGUgcGF0aCBvZiB0aGUgaW1hZ2VcbiAqL1xuQmFzZVRleHR1cmUucHJvdG90eXBlLnVwZGF0ZVNvdXJjZUltYWdlID0gZnVuY3Rpb24gKG5ld1NyYylcbntcbiAgICB0aGlzLnNvdXJjZS5zcmMgPSBuZXdTcmM7XG5cbiAgICB0aGlzLmxvYWRTb3VyY2UodGhpcy5zb3VyY2UpO1xufTtcblxuLyoqXG4gKiBIZWxwZXIgZnVuY3Rpb24gdGhhdCBjcmVhdGVzIGEgYmFzZSB0ZXh0dXJlIGZyb20gdGhlIGdpdmVuIGltYWdlIHVybC5cbiAqIElmIHRoZSBpbWFnZSBpcyBub3QgaW4gdGhlIGJhc2UgdGV4dHVyZSBjYWNoZSBpdCB3aWxsIGJlIGNyZWF0ZWQgYW5kIGxvYWRlZC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAcGFyYW0gaW1hZ2VVcmwge3N0cmluZ30gVGhlIGltYWdlIHVybCBvZiB0aGUgdGV4dHVyZVxuICogQHBhcmFtIFtjcm9zc29yaWdpbj0oYXV0byldIHtib29sZWFufSBTaG91bGQgdXNlIGFub255bW91cyBDT1JTPyBEZWZhdWx0cyB0byB0cnVlIGlmIHRoZSBVUkwgaXMgbm90IGEgZGF0YS1VUkkuXG4gKiBAcGFyYW0gW3NjYWxlTW9kZT1QSVhJLlNDQUxFX01PREVTLkRFRkFVTFRdIHtudW1iZXJ9IFNlZSB7QGxpbmsgUElYSS5TQ0FMRV9NT0RFU30gZm9yIHBvc3NpYmxlIHZhbHVlc1xuICogQHJldHVybiBQSVhJLkJhc2VUZXh0dXJlXG4gKi9cbkJhc2VUZXh0dXJlLmZyb21JbWFnZSA9IGZ1bmN0aW9uIChpbWFnZVVybCwgY3Jvc3NvcmlnaW4sIHNjYWxlTW9kZSlcbntcbiAgICB2YXIgYmFzZVRleHR1cmUgPSB1dGlscy5CYXNlVGV4dHVyZUNhY2hlW2ltYWdlVXJsXTtcblxuICAgIGlmIChjcm9zc29yaWdpbiA9PT0gdW5kZWZpbmVkICYmIGltYWdlVXJsLmluZGV4T2YoJ2RhdGE6JykgIT09IDApXG4gICAge1xuICAgICAgICBjcm9zc29yaWdpbiA9IHRydWU7XG4gICAgfVxuXG4gICAgaWYgKCFiYXNlVGV4dHVyZSlcbiAgICB7XG4gICAgICAgIC8vIG5ldyBJbWFnZSgpIGJyZWFrcyB0ZXggbG9hZGluZyBpbiBzb21lIHZlcnNpb25zIG9mIENocm9tZS5cbiAgICAgICAgLy8gU2VlIGh0dHBzOi8vY29kZS5nb29nbGUuY29tL3AvY2hyb21pdW0vaXNzdWVzL2RldGFpbD9pZD0yMzgwNzFcbiAgICAgICAgdmFyIGltYWdlID0gbmV3IEltYWdlKCk7Ly9kb2N1bWVudC5jcmVhdGVFbGVtZW50KCdpbWcnKTtcbiAgICAgICAgaWYgKGNyb3Nzb3JpZ2luKVxuICAgICAgICB7XG4gICAgICAgICAgICBpbWFnZS5jcm9zc09yaWdpbiA9ICcnO1xuICAgICAgICB9XG5cbiAgICAgICAgYmFzZVRleHR1cmUgPSBuZXcgQmFzZVRleHR1cmUoaW1hZ2UsIHNjYWxlTW9kZSk7XG4gICAgICAgIGJhc2VUZXh0dXJlLmltYWdlVXJsID0gaW1hZ2VVcmw7XG5cbiAgICAgICAgaW1hZ2Uuc3JjID0gaW1hZ2VVcmw7XG5cbiAgICAgICAgdXRpbHMuQmFzZVRleHR1cmVDYWNoZVtpbWFnZVVybF0gPSBiYXNlVGV4dHVyZTtcblxuICAgICAgICAvLyBpZiB0aGVyZSBpcyBhbiBAMnggYXQgdGhlIGVuZCBvZiB0aGUgdXJsIHdlIGFyZSBnb2luZyB0byBhc3N1bWUgaXRzIGEgaGlnaHJlcyBpbWFnZVxuICAgICAgICBiYXNlVGV4dHVyZS5yZXNvbHV0aW9uID0gdXRpbHMuZ2V0UmVzb2x1dGlvbk9mVXJsKGltYWdlVXJsKTtcbiAgICB9XG5cbiAgICByZXR1cm4gYmFzZVRleHR1cmU7XG59O1xuXG4vKipcbiAqIEhlbHBlciBmdW5jdGlvbiB0aGF0IGNyZWF0ZXMgYSBiYXNlIHRleHR1cmUgZnJvbSB0aGUgZ2l2ZW4gY2FudmFzIGVsZW1lbnQuXG4gKlxuICogQHN0YXRpY1xuICogQHBhcmFtIGNhbnZhcyB7Q2FudmFzfSBUaGUgY2FudmFzIGVsZW1lbnQgc291cmNlIG9mIHRoZSB0ZXh0dXJlXG4gKiBAcGFyYW0gc2NhbGVNb2RlIHtudW1iZXJ9IFNlZSB7QGxpbmsgUElYSS5TQ0FMRV9NT0RFU30gZm9yIHBvc3NpYmxlIHZhbHVlc1xuICogQHJldHVybiBQSVhJLkJhc2VUZXh0dXJlXG4gKi9cbkJhc2VUZXh0dXJlLmZyb21DYW52YXMgPSBmdW5jdGlvbiAoY2FudmFzLCBzY2FsZU1vZGUpXG57XG4gICAgaWYgKCFjYW52YXMuX3BpeGlJZClcbiAgICB7XG4gICAgICAgIGNhbnZhcy5fcGl4aUlkID0gJ2NhbnZhc18nICsgdXRpbHMudWlkKCk7XG4gICAgfVxuXG4gICAgdmFyIGJhc2VUZXh0dXJlID0gdXRpbHMuQmFzZVRleHR1cmVDYWNoZVtjYW52YXMuX3BpeGlJZF07XG5cbiAgICBpZiAoIWJhc2VUZXh0dXJlKVxuICAgIHtcbiAgICAgICAgYmFzZVRleHR1cmUgPSBuZXcgQmFzZVRleHR1cmUoY2FudmFzLCBzY2FsZU1vZGUpO1xuICAgICAgICB1dGlscy5CYXNlVGV4dHVyZUNhY2hlW2NhbnZhcy5fcGl4aUlkXSA9IGJhc2VUZXh0dXJlO1xuICAgIH1cblxuICAgIHJldHVybiBiYXNlVGV4dHVyZTtcbn07XG4iLCJ2YXIgQmFzZVRleHR1cmUgPSByZXF1aXJlKCcuL0Jhc2VUZXh0dXJlJyksXG4gICAgVGV4dHVyZSA9IHJlcXVpcmUoJy4vVGV4dHVyZScpLFxuICAgIFJlbmRlclRhcmdldCA9IHJlcXVpcmUoJy4uL3JlbmRlcmVycy93ZWJnbC91dGlscy9SZW5kZXJUYXJnZXQnKSxcbiAgICBGaWx0ZXJNYW5hZ2VyID0gcmVxdWlyZSgnLi4vcmVuZGVyZXJzL3dlYmdsL21hbmFnZXJzL0ZpbHRlck1hbmFnZXInKSxcbiAgICBDYW52YXNCdWZmZXIgPSByZXF1aXJlKCcuLi9yZW5kZXJlcnMvY2FudmFzL3V0aWxzL0NhbnZhc0J1ZmZlcicpLFxuICAgIG1hdGggPSByZXF1aXJlKCcuLi9tYXRoJyksXG4gICAgQ09OU1QgPSByZXF1aXJlKCcuLi9jb25zdCcpLFxuICAgIHRlbXBNYXRyaXggPSBuZXcgbWF0aC5NYXRyaXgoKTtcblxuLyoqXG4gKiBBIFJlbmRlclRleHR1cmUgaXMgYSBzcGVjaWFsIHRleHR1cmUgdGhhdCBhbGxvd3MgYW55IFBpeGkgZGlzcGxheSBvYmplY3QgdG8gYmUgcmVuZGVyZWQgdG8gaXQuXG4gKlxuICogX19IaW50X186IEFsbCBEaXNwbGF5T2JqZWN0cyAoaS5lLiBTcHJpdGVzKSB0aGF0IHJlbmRlciB0byBhIFJlbmRlclRleHR1cmUgc2hvdWxkIGJlIHByZWxvYWRlZFxuICogb3RoZXJ3aXNlIGJsYWNrIHJlY3RhbmdsZXMgd2lsbCBiZSBkcmF3biBpbnN0ZWFkLlxuICpcbiAqIEEgUmVuZGVyVGV4dHVyZSB0YWtlcyBhIHNuYXBzaG90IG9mIGFueSBEaXNwbGF5IE9iamVjdCBnaXZlbiB0byBpdHMgcmVuZGVyIG1ldGhvZC4gVGhlIHBvc2l0aW9uXG4gKiBhbmQgcm90YXRpb24gb2YgdGhlIGdpdmVuIERpc3BsYXkgT2JqZWN0cyBpcyBpZ25vcmVkLiBGb3IgZXhhbXBsZTpcbiAqXG4gKiBgYGBqc1xuICogdmFyIHJlbmRlcmVyID0gUElYSS5hdXRvRGV0ZWN0UmVuZGVyZXIoMTAyNCwgMTAyNCwgeyB2aWV3OiBjYW52YXMsIHJhdGlvOiAxIH0pO1xuICogdmFyIHJlbmRlclRleHR1cmUgPSBuZXcgUElYSS5SZW5kZXJUZXh0dXJlKHJlbmRlcmVyLCA4MDAsIDYwMCk7XG4gKiB2YXIgc3ByaXRlID0gUElYSS5TcHJpdGUuZnJvbUltYWdlKFwic3Bpbk9ial8wMS5wbmdcIik7XG4gKlxuICogc3ByaXRlLnBvc2l0aW9uLnggPSA4MDAvMjtcbiAqIHNwcml0ZS5wb3NpdGlvbi55ID0gNjAwLzI7XG4gKiBzcHJpdGUuYW5jaG9yLnggPSAwLjU7XG4gKiBzcHJpdGUuYW5jaG9yLnkgPSAwLjU7XG4gKlxuICogcmVuZGVyVGV4dHVyZS5yZW5kZXIoc3ByaXRlKTtcbiAqIGBgYFxuICpcbiAqIFRoZSBTcHJpdGUgaW4gdGhpcyBjYXNlIHdpbGwgYmUgcmVuZGVyZWQgdG8gYSBwb3NpdGlvbiBvZiAwLDAuIFRvIHJlbmRlciB0aGlzIHNwcml0ZSBhdCBpdHMgYWN0dWFsXG4gKiBwb3NpdGlvbiBhIENvbnRhaW5lciBzaG91bGQgYmUgdXNlZDpcbiAqXG4gKiBgYGBqc1xuICogdmFyIGRvYyA9IG5ldyBQSVhJLkNvbnRhaW5lcigpO1xuICpcbiAqIGRvYy5hZGRDaGlsZChzcHJpdGUpO1xuICpcbiAqIHJlbmRlclRleHR1cmUucmVuZGVyKGRvYyk7ICAvLyBSZW5kZXJzIHRvIGNlbnRlciBvZiByZW5kZXJUZXh0dXJlXG4gKiBgYGBcbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuVGV4dHVyZVxuICogQG1lbWJlcm9mIFBJWElcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5DYW52YXNSZW5kZXJlcnxQSVhJLldlYkdMUmVuZGVyZXJ9IFRoZSByZW5kZXJlciB1c2VkIGZvciB0aGlzIFJlbmRlclRleHR1cmVcbiAqIEBwYXJhbSBbd2lkdGg9MTAwXSB7bnVtYmVyfSBUaGUgd2lkdGggb2YgdGhlIHJlbmRlciB0ZXh0dXJlXG4gKiBAcGFyYW0gW2hlaWdodD0xMDBdIHtudW1iZXJ9IFRoZSBoZWlnaHQgb2YgdGhlIHJlbmRlciB0ZXh0dXJlXG4gKiBAcGFyYW0gW3NjYWxlTW9kZV0ge251bWJlcn0gU2VlIHtAbGluayBQSVhJLlNDQUxFX01PREVTfSBmb3IgcG9zc2libGUgdmFsdWVzXG4gKiBAcGFyYW0gW3Jlc29sdXRpb249MV0ge251bWJlcn0gVGhlIHJlc29sdXRpb24gb2YgdGhlIHRleHR1cmUgYmVpbmcgZ2VuZXJhdGVkXG4gKi9cbmZ1bmN0aW9uIFJlbmRlclRleHR1cmUocmVuZGVyZXIsIHdpZHRoLCBoZWlnaHQsIHNjYWxlTW9kZSwgcmVzb2x1dGlvbilcbntcbiAgICBpZiAoIXJlbmRlcmVyKVxuICAgIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdVbmFibGUgdG8gY3JlYXRlIFJlbmRlclRleHR1cmUsIHlvdSBtdXN0IHBhc3MgYSByZW5kZXJlciBpbnRvIHRoZSBjb25zdHJ1Y3Rvci4nKTtcbiAgICB9XG5cbiAgICB3aWR0aCA9IHdpZHRoIHx8IDEwMDtcbiAgICBoZWlnaHQgPSBoZWlnaHQgfHwgMTAwO1xuICAgIHJlc29sdXRpb24gPSByZXNvbHV0aW9uIHx8IENPTlNULlJFU09MVVRJT047XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYmFzZSB0ZXh0dXJlIG9iamVjdCB0aGF0IHRoaXMgdGV4dHVyZSB1c2VzXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtCYXNlVGV4dHVyZX1cbiAgICAgKi9cbiAgICB2YXIgYmFzZVRleHR1cmUgPSBuZXcgQmFzZVRleHR1cmUoKTtcbiAgICBiYXNlVGV4dHVyZS53aWR0aCA9IHdpZHRoO1xuICAgIGJhc2VUZXh0dXJlLmhlaWdodCA9IGhlaWdodDtcbiAgICBiYXNlVGV4dHVyZS5yZXNvbHV0aW9uID0gcmVzb2x1dGlvbjtcbiAgICBiYXNlVGV4dHVyZS5zY2FsZU1vZGUgPSBzY2FsZU1vZGUgfHwgQ09OU1QuU0NBTEVfTU9ERVMuREVGQVVMVDtcbiAgICBiYXNlVGV4dHVyZS5oYXNMb2FkZWQgPSB0cnVlO1xuXG5cbiAgICBUZXh0dXJlLmNhbGwodGhpcyxcbiAgICAgICAgYmFzZVRleHR1cmUsXG4gICAgICAgIG5ldyBtYXRoLlJlY3RhbmdsZSgwLCAwLCB3aWR0aCwgaGVpZ2h0KVxuICAgICk7XG5cblxuICAgIC8qKlxuICAgICAqIFRoZSB3aXRoIG9mIHRoZSByZW5kZXIgdGV4dHVyZVxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMud2lkdGggPSB3aWR0aDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBoZWlnaHQgb2YgdGhlIHJlbmRlciB0ZXh0dXJlXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy5oZWlnaHQgPSBoZWlnaHQ7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgUmVzb2x1dGlvbiBvZiB0aGUgdGV4dHVyZS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLnJlc29sdXRpb24gPSByZXNvbHV0aW9uO1xuXG4gICAgLyoqXG4gICAgICogRHJhdy9yZW5kZXIgdGhlIGdpdmVuIERpc3BsYXlPYmplY3Qgb250byB0aGUgdGV4dHVyZS5cbiAgICAgKlxuICAgICAqIFRoZSBkaXNwbGF5T2JqZWN0IGFuZCBkZXNjZW5kZW50cyBhcmUgdHJhbnNmb3JtZWQgZHVyaW5nIHRoaXMgb3BlcmF0aW9uLlxuICAgICAqIElmIGB1cGRhdGVUcmFuc2Zvcm1gIGlzIHRydWUgdGhlbiB0aGUgdHJhbnNmb3JtYXRpb25zIHdpbGwgYmUgcmVzdG9yZWQgYmVmb3JlIHRoZVxuICAgICAqIG1ldGhvZCByZXR1cm5zLiBPdGhlcndpc2UgaXQgaXMgdXAgdG8gdGhlIGNhbGxpbmcgY29kZSB0byBjb3JyZWN0bHkgdXNlIG9yIHJlc2V0XG4gICAgICogdGhlIHRyYW5zZm9ybWVkIGRpc3BsYXkgb2JqZWN0cy5cbiAgICAgKlxuICAgICAqIFRoZSBkaXNwbGF5IG9iamVjdCBpcyBhbHdheXMgcmVuZGVyZWQgd2l0aCBhIHdvcmxkQWxwaGEgdmFsdWUgb2YgMS5cbiAgICAgKlxuICAgICAqIEBtZXRob2RcbiAgICAgKiBAcGFyYW0gZGlzcGxheU9iamVjdCB7UElYSS5EaXNwbGF5T2JqZWN0fSBUaGUgZGlzcGxheSBvYmplY3QgdG8gcmVuZGVyIHRoaXMgdGV4dHVyZSBvblxuICAgICAqIEBwYXJhbSBbbWF0cml4XSB7UElYSS5NYXRyaXh9IE9wdGlvbmFsIG1hdHJpeCB0byBhcHBseSB0byB0aGUgZGlzcGxheSBvYmplY3QgYmVmb3JlIHJlbmRlcmluZy5cbiAgICAgKiBAcGFyYW0gW2NsZWFyPWZhbHNlXSB7Ym9vbGVhbn0gSWYgdHJ1ZSB0aGUgdGV4dHVyZSB3aWxsIGJlIGNsZWFyZWQgYmVmb3JlIHRoZSBkaXNwbGF5T2JqZWN0IGlzIGRyYXduXG4gICAgICogQHBhcmFtIFt1cGRhdGVUcmFuc2Zvcm09dHJ1ZV0ge2Jvb2xlYW59IElmIHRydWUgdGhlIGRpc3BsYXlPYmplY3QncyB3b3JsZFRyYW5zZm9ybS93b3JsZEFscGhhIGFuZCBhbGwgY2hpbGRyZW5cbiAgICAgKiAgdHJhbnNmb3JtYXRpb25zIHdpbGwgYmUgcmVzdG9yZWQuIE5vdCByZXN0b3JpbmcgdGhpcyBpbmZvcm1hdGlvbiB3aWxsIGJlIGEgbGl0dGxlIGZhc3Rlci5cbiAgICAgKi9cbiAgICB0aGlzLnJlbmRlciA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgcmVuZGVyZXIgdGhpcyBSZW5kZXJUZXh0dXJlIHVzZXMuIEEgUmVuZGVyVGV4dHVyZSBjYW4gb25seSBiZWxvbmcgdG8gb25lIHJlbmRlcmVyIGF0IHRoZSBtb21lbnQgaWYgaXRzIHdlYkdMLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5DYW52YXNSZW5kZXJlcnxQSVhJLldlYkdMUmVuZGVyZXJ9XG4gICAgICovXG4gICAgdGhpcy5yZW5kZXJlciA9IHJlbmRlcmVyO1xuXG4gICAgaWYgKHRoaXMucmVuZGVyZXIudHlwZSA9PT0gQ09OU1QuUkVOREVSRVJfVFlQRS5XRUJHTClcbiAgICB7XG4gICAgICAgIHZhciBnbCA9IHRoaXMucmVuZGVyZXIuZ2w7XG5cbiAgICAgICAgdGhpcy50ZXh0dXJlQnVmZmVyID0gbmV3IFJlbmRlclRhcmdldChnbCwgdGhpcy53aWR0aCwgdGhpcy5oZWlnaHQsIGJhc2VUZXh0dXJlLnNjYWxlTW9kZSwgdGhpcy5yZXNvbHV0aW9uKTsvLywgdGhpcy5iYXNlVGV4dHVyZS5zY2FsZU1vZGUpO1xuICAgICAgICB0aGlzLmJhc2VUZXh0dXJlLl9nbFRleHR1cmVzW2dsLmlkXSA9IHRoaXMudGV4dHVyZUJ1ZmZlci50ZXh0dXJlO1xuXG4gICAgICAgIC8vVE9ETyByZWZhY3RvciBmaWx0ZXIgbWFuYWdlci4uIGFzIHJlYWxseSBpdHMgbm8gbG9uZ2VyIGEgbWFuYWdlciBpZiB3ZSB1c2UgaXQgaGVyZS4uXG4gICAgICAgIHRoaXMuZmlsdGVyTWFuYWdlciA9IG5ldyBGaWx0ZXJNYW5hZ2VyKHRoaXMucmVuZGVyZXIpO1xuICAgICAgICB0aGlzLmZpbHRlck1hbmFnZXIub25Db250ZXh0Q2hhbmdlKCk7XG4gICAgICAgIHRoaXMuZmlsdGVyTWFuYWdlci5yZXNpemUod2lkdGgsIGhlaWdodCk7XG4gICAgICAgIHRoaXMucmVuZGVyID0gdGhpcy5yZW5kZXJXZWJHTDtcblxuICAgICAgICAvLyB0aGUgY3JlYXRpb24gb2YgYSBmaWx0ZXIgbWFuYWdlciB1bmJpbmRzIHRoZSBidWZmZXJzLi5cbiAgICAgICAgdGhpcy5yZW5kZXJlci5jdXJyZW50UmVuZGVyZXIuc3RhcnQoKTtcbiAgICAgICAgdGhpcy5yZW5kZXJlci5jdXJyZW50UmVuZGVyVGFyZ2V0LmFjdGl2YXRlKCk7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG5cbiAgICAgICAgdGhpcy5yZW5kZXIgPSB0aGlzLnJlbmRlckNhbnZhcztcbiAgICAgICAgdGhpcy50ZXh0dXJlQnVmZmVyID0gbmV3IENhbnZhc0J1ZmZlcih0aGlzLndpZHRoKiB0aGlzLnJlc29sdXRpb24sIHRoaXMuaGVpZ2h0KiB0aGlzLnJlc29sdXRpb24pO1xuICAgICAgICB0aGlzLmJhc2VUZXh0dXJlLnNvdXJjZSA9IHRoaXMudGV4dHVyZUJ1ZmZlci5jYW52YXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKi9cbiAgICB0aGlzLnZhbGlkID0gdHJ1ZTtcblxuICAgIHRoaXMuX3VwZGF0ZVV2cygpO1xufVxuXG5SZW5kZXJUZXh0dXJlLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoVGV4dHVyZS5wcm90b3R5cGUpO1xuUmVuZGVyVGV4dHVyZS5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBSZW5kZXJUZXh0dXJlO1xubW9kdWxlLmV4cG9ydHMgPSBSZW5kZXJUZXh0dXJlO1xuXG4vKipcbiAqIFJlc2l6ZXMgdGhlIFJlbmRlclRleHR1cmUuXG4gKlxuICogQHBhcmFtIHdpZHRoIHtudW1iZXJ9IFRoZSB3aWR0aCB0byByZXNpemUgdG8uXG4gKiBAcGFyYW0gaGVpZ2h0IHtudW1iZXJ9IFRoZSBoZWlnaHQgdG8gcmVzaXplIHRvLlxuICogQHBhcmFtIHVwZGF0ZUJhc2Uge2Jvb2xlYW59IFNob3VsZCB0aGUgYmFzZVRleHR1cmUud2lkdGggYW5kIGhlaWdodCB2YWx1ZXMgYmUgcmVzaXplZCBhcyB3ZWxsP1xuICovXG5SZW5kZXJUZXh0dXJlLnByb3RvdHlwZS5yZXNpemUgPSBmdW5jdGlvbiAod2lkdGgsIGhlaWdodCwgdXBkYXRlQmFzZSlcbntcbiAgICBpZiAod2lkdGggPT09IHRoaXMud2lkdGggJiYgaGVpZ2h0ID09PSB0aGlzLmhlaWdodClcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLnZhbGlkID0gKHdpZHRoID4gMCAmJiBoZWlnaHQgPiAwKTtcblxuICAgIHRoaXMud2lkdGggPSB0aGlzLl9mcmFtZS53aWR0aCA9IHRoaXMuY3JvcC53aWR0aCA9IHdpZHRoO1xuICAgIHRoaXMuaGVpZ2h0ID0gIHRoaXMuX2ZyYW1lLmhlaWdodCA9IHRoaXMuY3JvcC5oZWlnaHQgPSBoZWlnaHQ7XG5cbiAgICBpZiAodXBkYXRlQmFzZSlcbiAgICB7XG4gICAgICAgIHRoaXMuYmFzZVRleHR1cmUud2lkdGggPSB0aGlzLndpZHRoO1xuICAgICAgICB0aGlzLmJhc2VUZXh0dXJlLmhlaWdodCA9IHRoaXMuaGVpZ2h0O1xuICAgIH1cblxuICAgIGlmICghdGhpcy52YWxpZClcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLnRleHR1cmVCdWZmZXIucmVzaXplKHRoaXMud2lkdGgsIHRoaXMuaGVpZ2h0KTtcblxuICAgIGlmKHRoaXMuZmlsdGVyTWFuYWdlcilcbiAgICB7XG4gICAgICAgIHRoaXMuZmlsdGVyTWFuYWdlci5yZXNpemUodGhpcy53aWR0aCwgdGhpcy5oZWlnaHQpO1xuICAgIH1cbn07XG5cbi8qKlxuICogQ2xlYXJzIHRoZSBSZW5kZXJUZXh0dXJlLlxuICpcbiAqL1xuUmVuZGVyVGV4dHVyZS5wcm90b3R5cGUuY2xlYXIgPSBmdW5jdGlvbiAoKVxue1xuICAgIGlmICghdGhpcy52YWxpZClcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5yZW5kZXJlci50eXBlID09PSBDT05TVC5SRU5ERVJFUl9UWVBFLldFQkdMKVxuICAgIHtcbiAgICAgICAgdGhpcy5yZW5kZXJlci5nbC5iaW5kRnJhbWVidWZmZXIodGhpcy5yZW5kZXJlci5nbC5GUkFNRUJVRkZFUiwgdGhpcy50ZXh0dXJlQnVmZmVyLmZyYW1lQnVmZmVyKTtcbiAgICB9XG5cbiAgICB0aGlzLnRleHR1cmVCdWZmZXIuY2xlYXIoKTtcbn07XG5cbi8qKlxuICogSW50ZXJuYWwgbWV0aG9kIGFzc2lnbmVkIHRvIHRoZSBgcmVuZGVyYCBwcm9wZXJ0eSBpZiB1c2luZyBhIENhbnZhc1JlbmRlcmVyLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0gZGlzcGxheU9iamVjdCB7UElYSS5EaXNwbGF5T2JqZWN0fSBUaGUgZGlzcGxheSBvYmplY3QgdG8gcmVuZGVyIHRoaXMgdGV4dHVyZSBvblxuICogQHBhcmFtIFttYXRyaXhdIHtQSVhJLk1hdHJpeH0gT3B0aW9uYWwgbWF0cml4IHRvIGFwcGx5IHRvIHRoZSBkaXNwbGF5IG9iamVjdCBiZWZvcmUgcmVuZGVyaW5nLlxuICogQHBhcmFtIFtjbGVhcj1mYWxzZV0ge2Jvb2xlYW59IElmIHRydWUgdGhlIHRleHR1cmUgd2lsbCBiZSBjbGVhcmVkIGJlZm9yZSB0aGUgZGlzcGxheU9iamVjdCBpcyBkcmF3blxuICogQHBhcmFtIFt1cGRhdGVUcmFuc2Zvcm09dHJ1ZV0ge2Jvb2xlYW59IElmIHRydWUgdGhlIGRpc3BsYXlPYmplY3QncyB3b3JsZFRyYW5zZm9ybS93b3JsZEFscGhhIGFuZCBhbGwgY2hpbGRyZW5cbiAqICB0cmFuc2Zvcm1hdGlvbnMgd2lsbCBiZSByZXN0b3JlZC4gTm90IHJlc3RvcmluZyB0aGlzIGluZm9ybWF0aW9uIHdpbGwgYmUgYSBsaXR0bGUgZmFzdGVyLlxuICovXG5SZW5kZXJUZXh0dXJlLnByb3RvdHlwZS5yZW5kZXJXZWJHTCA9IGZ1bmN0aW9uIChkaXNwbGF5T2JqZWN0LCBtYXRyaXgsIGNsZWFyLCB1cGRhdGVUcmFuc2Zvcm0pXG57XG4gICAgaWYgKCF0aGlzLnZhbGlkKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuXG4gICAgdXBkYXRlVHJhbnNmb3JtID0gKHVwZGF0ZVRyYW5zZm9ybSAhPT0gdW5kZWZpbmVkKSA/IHVwZGF0ZVRyYW5zZm9ybSA6IHRydWU7Ly8hdXBkYXRlVHJhbnNmb3JtO1xuXG4gICAgdGhpcy50ZXh0dXJlQnVmZmVyLnRyYW5zZm9ybSA9IG1hdHJpeDtcblxuICAgIC8vVE9ETyBub3QgYSBmYW4gdGhhdCB0aGlzIGlzIGhlcmUuLi4gaXQgd2lsbCBtb3ZlIVxuICAgIHRoaXMudGV4dHVyZUJ1ZmZlci5hY3RpdmF0ZSgpO1xuXG4gICAgLy8gc2V0V29ybGQgQWxwaGEgdG8gZW5zdXJlIHRoYXQgdGhlIG9iamVjdCBpcyByZW5kZXJlciBhdCBmdWxsIG9wYWNpdHlcbiAgICBkaXNwbGF5T2JqZWN0LndvcmxkQWxwaGEgPSAxO1xuXG4gICAgaWYgKHVwZGF0ZVRyYW5zZm9ybSlcbiAgICB7XG5cbiAgICAgICAgLy8gcmVzZXQgdGhlIG1hdHJpeCBvZiB0aGUgZGlzcGxhdHlPYmplY3QuLlxuICAgICAgICBkaXNwbGF5T2JqZWN0LndvcmxkVHJhbnNmb3JtLmlkZW50aXR5KCk7XG5cbiAgICAgICAgZGlzcGxheU9iamVjdC5jdXJyZW50Qm91bmRzID0gbnVsbDtcblxuICAgICAgICAvLyBUaW1lIHRvIHVwZGF0ZSBhbGwgdGhlIGNoaWxkcmVuIG9mIHRoZSBkaXNwbGF5T2JqZWN0IHdpdGggdGhlIG5ldyBtYXRyaXguLlxuICAgICAgICB2YXIgY2hpbGRyZW4gPSBkaXNwbGF5T2JqZWN0LmNoaWxkcmVuO1xuICAgICAgICB2YXIgaSwgajtcblxuICAgICAgICBmb3IgKGkgPSAwLCBqID0gY2hpbGRyZW4ubGVuZ3RoOyBpIDwgajsgKytpKVxuICAgICAgICB7XG4gICAgICAgICAgICBjaGlsZHJlbltpXS51cGRhdGVUcmFuc2Zvcm0oKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vVE9ETyByZW5hbWUgdGV4dHVyZUJ1ZmZlciB0byByZW5kZXJUYXJnZXQuLlxuICAgIHZhciB0ZW1wID0gIHRoaXMucmVuZGVyZXIuZmlsdGVyTWFuYWdlcjtcblxuICAgIHRoaXMucmVuZGVyZXIuZmlsdGVyTWFuYWdlciA9IHRoaXMuZmlsdGVyTWFuYWdlcjtcbiAgICB0aGlzLnJlbmRlcmVyLnJlbmRlckRpc3BsYXlPYmplY3QoZGlzcGxheU9iamVjdCwgdGhpcy50ZXh0dXJlQnVmZmVyLCBjbGVhcik7XG5cbiAgICB0aGlzLnJlbmRlcmVyLmZpbHRlck1hbmFnZXIgPSB0ZW1wO1xufTtcblxuXG4vKipcbiAqIEludGVybmFsIG1ldGhvZCBhc3NpZ25lZCB0byB0aGUgYHJlbmRlcmAgcHJvcGVydHkgaWYgdXNpbmcgYSBDYW52YXNSZW5kZXJlci5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIGRpc3BsYXlPYmplY3Qge1BJWEkuRGlzcGxheU9iamVjdH0gVGhlIGRpc3BsYXkgb2JqZWN0IHRvIHJlbmRlciB0aGlzIHRleHR1cmUgb25cbiAqIEBwYXJhbSBbbWF0cml4XSB7UElYSS5NYXRyaXh9IE9wdGlvbmFsIG1hdHJpeCB0byBhcHBseSB0byB0aGUgZGlzcGxheSBvYmplY3QgYmVmb3JlIHJlbmRlcmluZy5cbiAqIEBwYXJhbSBbY2xlYXJdIHtib29sZWFufSBJZiB0cnVlIHRoZSB0ZXh0dXJlIHdpbGwgYmUgY2xlYXJlZCBiZWZvcmUgdGhlIGRpc3BsYXlPYmplY3QgaXMgZHJhd25cbiAqL1xuUmVuZGVyVGV4dHVyZS5wcm90b3R5cGUucmVuZGVyQ2FudmFzID0gZnVuY3Rpb24gKGRpc3BsYXlPYmplY3QsIG1hdHJpeCwgY2xlYXIsIHVwZGF0ZVRyYW5zZm9ybSlcbntcbiAgICBpZiAoIXRoaXMudmFsaWQpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdXBkYXRlVHJhbnNmb3JtID0gISF1cGRhdGVUcmFuc2Zvcm07XG5cbiAgICB2YXIgd3QgPSB0ZW1wTWF0cml4O1xuXG4gICAgd3QuaWRlbnRpdHkoKTtcblxuICAgIGlmIChtYXRyaXgpXG4gICAge1xuICAgICAgICB3dC5hcHBlbmQobWF0cml4KTtcbiAgICB9XG5cbiAgICB2YXIgY2FjaGVkV3QgPSBkaXNwbGF5T2JqZWN0LndvcmxkVHJhbnNmb3JtO1xuICAgIGRpc3BsYXlPYmplY3Qud29ybGRUcmFuc2Zvcm0gPSB3dDtcblxuICAgIC8vIHNldFdvcmxkIEFscGhhIHRvIGVuc3VyZSB0aGF0IHRoZSBvYmplY3QgaXMgcmVuZGVyZXIgYXQgZnVsbCBvcGFjaXR5XG4gICAgZGlzcGxheU9iamVjdC53b3JsZEFscGhhID0gMTtcblxuICAgIC8vIFRpbWUgdG8gdXBkYXRlIGFsbCB0aGUgY2hpbGRyZW4gb2YgdGhlIGRpc3BsYXlPYmplY3Qgd2l0aCB0aGUgbmV3IG1hdHJpeC4uXG4gICAgdmFyIGNoaWxkcmVuID0gZGlzcGxheU9iamVjdC5jaGlsZHJlbjtcbiAgICB2YXIgaSwgajtcblxuICAgIGZvciAoaSA9IDAsIGogPSBjaGlsZHJlbi5sZW5ndGg7IGkgPCBqOyArK2kpXG4gICAge1xuICAgICAgICBjaGlsZHJlbltpXS51cGRhdGVUcmFuc2Zvcm0oKTtcbiAgICB9XG5cbiAgICBpZiAoY2xlYXIpXG4gICAge1xuICAgICAgICB0aGlzLnRleHR1cmVCdWZmZXIuY2xlYXIoKTtcbiAgICB9XG5cblxuLy8gICAgdGhpcy50ZXh0dXJlQnVmZmVyLlxuICAgIHZhciBjb250ZXh0ID0gdGhpcy50ZXh0dXJlQnVmZmVyLmNvbnRleHQ7XG5cbiAgICB2YXIgcmVhbFJlc29sdXRpb24gPSB0aGlzLnJlbmRlcmVyLnJlc29sdXRpb247XG5cbiAgICB0aGlzLnJlbmRlcmVyLnJlc29sdXRpb24gPSB0aGlzLnJlc29sdXRpb247XG5cbiAgICB0aGlzLnJlbmRlcmVyLnJlbmRlckRpc3BsYXlPYmplY3QoZGlzcGxheU9iamVjdCwgY29udGV4dCk7XG5cbiAgICB0aGlzLnJlbmRlcmVyLnJlc29sdXRpb24gPSByZWFsUmVzb2x1dGlvbjtcblxuICAgIGlmKGRpc3BsYXlPYmplY3Qud29ybGRUcmFuc2Zvcm0gPT09IHd0KVxuICAgIHtcbiAgICAgICAgLy8gZml4ZXMgY2FjaGVBc0JpdG1hcCBIYXBwZW5pbmcgZHVyaW5nIHRoZSBhYm92ZS4uXG4gICAgICAgIGRpc3BsYXlPYmplY3Qud29ybGRUcmFuc2Zvcm0gPSBjYWNoZWRXdDtcbiAgICB9XG5cbn07XG5cbi8qKlxuICogRGVzdHJveXMgdGhpcyB0ZXh0dXJlXG4gKlxuICogQHBhcmFtIGRlc3Ryb3lCYXNlIHtib29sZWFufSBXaGV0aGVyIHRvIGRlc3Ryb3kgdGhlIGJhc2UgdGV4dHVyZSBhcyB3ZWxsXG4gKi9cblJlbmRlclRleHR1cmUucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoKVxue1xuICAgIFRleHR1cmUucHJvdG90eXBlLmRlc3Ryb3kuY2FsbCh0aGlzLCB0cnVlKTtcblxuICAgIHRoaXMudGV4dHVyZUJ1ZmZlci5kZXN0cm95KCk7XG5cbiAgICAvLyBkZXN0cm95IHRoZSBmaWx0ZXJtYW5hZ2VyLi5cbiAgICBpZih0aGlzLmZpbHRlck1hbmFnZXIpXG4gICAge1xuICAgICAgICB0aGlzLmZpbHRlck1hbmFnZXIuZGVzdHJveSgpO1xuICAgIH1cblxuICAgIHRoaXMucmVuZGVyZXIgPSBudWxsO1xufTtcblxuLyoqXG4gKiBXaWxsIHJldHVybiBhIEhUTUwgSW1hZ2Ugb2YgdGhlIHRleHR1cmVcbiAqXG4gKiBAcmV0dXJuIHtJbWFnZX1cbiAqL1xuUmVuZGVyVGV4dHVyZS5wcm90b3R5cGUuZ2V0SW1hZ2UgPSBmdW5jdGlvbiAoKVxue1xuICAgIHZhciBpbWFnZSA9IG5ldyBJbWFnZSgpO1xuICAgIGltYWdlLnNyYyA9IHRoaXMuZ2V0QmFzZTY0KCk7XG4gICAgcmV0dXJuIGltYWdlO1xufTtcblxuLyoqXG4gKiBXaWxsIHJldHVybiBhIGEgYmFzZTY0IGVuY29kZWQgc3RyaW5nIG9mIHRoaXMgdGV4dHVyZS4gSXQgd29ya3MgYnkgY2FsbGluZyBSZW5kZXJUZXh0dXJlLmdldENhbnZhcyBhbmQgdGhlbiBydW5uaW5nIHRvRGF0YVVSTCBvbiB0aGF0LlxuICpcbiAqIEByZXR1cm4ge3N0cmluZ30gQSBiYXNlNjQgZW5jb2RlZCBzdHJpbmcgb2YgdGhlIHRleHR1cmUuXG4gKi9cblJlbmRlclRleHR1cmUucHJvdG90eXBlLmdldEJhc2U2NCA9IGZ1bmN0aW9uICgpXG57XG4gICAgcmV0dXJuIHRoaXMuZ2V0Q2FudmFzKCkudG9EYXRhVVJMKCk7XG59O1xuXG4vKipcbiAqIENyZWF0ZXMgYSBDYW52YXMgZWxlbWVudCwgcmVuZGVycyB0aGlzIFJlbmRlclRleHR1cmUgdG8gaXQgYW5kIHRoZW4gcmV0dXJucyBpdC5cbiAqXG4gKiBAcmV0dXJuIHtIVE1MQ2FudmFzRWxlbWVudH0gQSBDYW52YXMgZWxlbWVudCB3aXRoIHRoZSB0ZXh0dXJlIHJlbmRlcmVkIG9uLlxuICovXG5SZW5kZXJUZXh0dXJlLnByb3RvdHlwZS5nZXRDYW52YXMgPSBmdW5jdGlvbiAoKVxue1xuICAgIGlmICh0aGlzLnJlbmRlcmVyLnR5cGUgPT09IENPTlNULlJFTkRFUkVSX1RZUEUuV0VCR0wpXG4gICAge1xuICAgICAgICB2YXIgZ2wgPSB0aGlzLnJlbmRlcmVyLmdsO1xuICAgICAgICB2YXIgd2lkdGggPSB0aGlzLnRleHR1cmVCdWZmZXIuc2l6ZS53aWR0aDtcbiAgICAgICAgdmFyIGhlaWdodCA9IHRoaXMudGV4dHVyZUJ1ZmZlci5zaXplLmhlaWdodDtcblxuICAgICAgICB2YXIgd2ViR0xQaXhlbHMgPSBuZXcgVWludDhBcnJheSg0ICogd2lkdGggKiBoZWlnaHQpO1xuXG4gICAgICAgIGdsLmJpbmRGcmFtZWJ1ZmZlcihnbC5GUkFNRUJVRkZFUiwgdGhpcy50ZXh0dXJlQnVmZmVyLmZyYW1lQnVmZmVyKTtcbiAgICAgICAgZ2wucmVhZFBpeGVscygwLCAwLCB3aWR0aCwgaGVpZ2h0LCBnbC5SR0JBLCBnbC5VTlNJR05FRF9CWVRFLCB3ZWJHTFBpeGVscyk7XG4gICAgICAgIGdsLmJpbmRGcmFtZWJ1ZmZlcihnbC5GUkFNRUJVRkZFUiwgbnVsbCk7XG5cbiAgICAgICAgdmFyIHRlbXBDYW52YXMgPSBuZXcgQ2FudmFzQnVmZmVyKHdpZHRoLCBoZWlnaHQpO1xuICAgICAgICB2YXIgY2FudmFzRGF0YSA9IHRlbXBDYW52YXMuY29udGV4dC5nZXRJbWFnZURhdGEoMCwgMCwgd2lkdGgsIGhlaWdodCk7XG4gICAgICAgIGNhbnZhc0RhdGEuZGF0YS5zZXQod2ViR0xQaXhlbHMpO1xuXG4gICAgICAgIHRlbXBDYW52YXMuY29udGV4dC5wdXRJbWFnZURhdGEoY2FudmFzRGF0YSwgMCwgMCk7XG5cbiAgICAgICAgcmV0dXJuIHRlbXBDYW52YXMuY2FudmFzO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICByZXR1cm4gdGhpcy50ZXh0dXJlQnVmZmVyLmNhbnZhcztcbiAgICB9XG59O1xuXG4vKipcbiAqIFdpbGwgcmV0dXJuIGEgb25lLWRpbWVuc2lvbmFsIGFycmF5IGNvbnRhaW5pbmcgdGhlIHBpeGVsIGRhdGEgb2YgdGhlIGVudGlyZSB0ZXh0dXJlIGluIFJHQkEgb3JkZXIsIHdpdGggaW50ZWdlciB2YWx1ZXMgYmV0d2VlbiAwIGFuZCAyNTUgKGluY2x1ZGVkKS5cbiAqXG4gKiBAcmV0dXJuIHtVaW50OENsYW1wZWRBcnJheX1cbiAqL1xuUmVuZGVyVGV4dHVyZS5wcm90b3R5cGUuZ2V0UGl4ZWxzID0gZnVuY3Rpb24gKClcbntcbiAgICB2YXIgd2lkdGgsIGhlaWdodDtcblxuICAgIGlmICh0aGlzLnJlbmRlcmVyLnR5cGUgPT09IENPTlNULlJFTkRFUkVSX1RZUEUuV0VCR0wpXG4gICAge1xuICAgICAgICB2YXIgZ2wgPSB0aGlzLnJlbmRlcmVyLmdsO1xuICAgICAgICB3aWR0aCA9IHRoaXMudGV4dHVyZUJ1ZmZlci5zaXplLndpZHRoO1xuICAgICAgICBoZWlnaHQgPSB0aGlzLnRleHR1cmVCdWZmZXIuc2l6ZS5oZWlnaHQ7XG5cbiAgICAgICAgdmFyIHdlYkdMUGl4ZWxzID0gbmV3IFVpbnQ4QXJyYXkoNCAqIHdpZHRoICogaGVpZ2h0KTtcblxuICAgICAgICBnbC5iaW5kRnJhbWVidWZmZXIoZ2wuRlJBTUVCVUZGRVIsIHRoaXMudGV4dHVyZUJ1ZmZlci5mcmFtZUJ1ZmZlcik7XG4gICAgICAgIGdsLnJlYWRQaXhlbHMoMCwgMCwgd2lkdGgsIGhlaWdodCwgZ2wuUkdCQSwgZ2wuVU5TSUdORURfQllURSwgd2ViR0xQaXhlbHMpO1xuICAgICAgICBnbC5iaW5kRnJhbWVidWZmZXIoZ2wuRlJBTUVCVUZGRVIsIG51bGwpO1xuXG4gICAgICAgIHJldHVybiB3ZWJHTFBpeGVscztcbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgd2lkdGggPSB0aGlzLnRleHR1cmVCdWZmZXIuY2FudmFzLndpZHRoO1xuICAgICAgICBoZWlnaHQgPSB0aGlzLnRleHR1cmVCdWZmZXIuY2FudmFzLmhlaWdodDtcblxuICAgICAgICByZXR1cm4gdGhpcy50ZXh0dXJlQnVmZmVyLmNhbnZhcy5nZXRDb250ZXh0KCcyZCcpLmdldEltYWdlRGF0YSgwLCAwLCB3aWR0aCwgaGVpZ2h0KS5kYXRhO1xuICAgIH1cbn07XG5cbi8qKlxuICogV2lsbCByZXR1cm4gYSBvbmUtZGltZW5zaW9uYWwgYXJyYXkgY29udGFpbmluZyB0aGUgcGl4ZWwgZGF0YSBvZiBhIHBpeGVsIHdpdGhpbiB0aGUgdGV4dHVyZSBpbiBSR0JBIG9yZGVyLCB3aXRoIGludGVnZXIgdmFsdWVzIGJldHdlZW4gMCBhbmQgMjU1IChpbmNsdWRlZCkuXG4gKlxuICogQHBhcmFtIHgge251bWJlcn0gVGhlIHggY29vcmRpbmF0ZSBvZiB0aGUgcGl4ZWwgdG8gcmV0cmlldmUuXG4gKiBAcGFyYW0geSB7bnVtYmVyfSBUaGUgeSBjb29yZGluYXRlIG9mIHRoZSBwaXhlbCB0byByZXRyaWV2ZS5cbiAqIEByZXR1cm4ge1VpbnQ4Q2xhbXBlZEFycmF5fVxuICovXG5SZW5kZXJUZXh0dXJlLnByb3RvdHlwZS5nZXRQaXhlbCA9IGZ1bmN0aW9uICh4LCB5KVxue1xuICAgIGlmICh0aGlzLnJlbmRlcmVyLnR5cGUgPT09IENPTlNULlJFTkRFUkVSX1RZUEUuV0VCR0wpXG4gICAge1xuICAgICAgICB2YXIgZ2wgPSB0aGlzLnJlbmRlcmVyLmdsO1xuXG4gICAgICAgIHZhciB3ZWJHTFBpeGVscyA9IG5ldyBVaW50OEFycmF5KDQpO1xuXG4gICAgICAgIGdsLmJpbmRGcmFtZWJ1ZmZlcihnbC5GUkFNRUJVRkZFUiwgdGhpcy50ZXh0dXJlQnVmZmVyLmZyYW1lQnVmZmVyKTtcbiAgICAgICAgZ2wucmVhZFBpeGVscyh4LCB5LCAxLCAxLCBnbC5SR0JBLCBnbC5VTlNJR05FRF9CWVRFLCB3ZWJHTFBpeGVscyk7XG4gICAgICAgIGdsLmJpbmRGcmFtZWJ1ZmZlcihnbC5GUkFNRUJVRkZFUiwgbnVsbCk7XG5cbiAgICAgICAgcmV0dXJuIHdlYkdMUGl4ZWxzO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICByZXR1cm4gdGhpcy50ZXh0dXJlQnVmZmVyLmNhbnZhcy5nZXRDb250ZXh0KCcyZCcpLmdldEltYWdlRGF0YSh4LCB5LCAxLCAxKS5kYXRhO1xuICAgIH1cbn07XG4iLCJ2YXIgQmFzZVRleHR1cmUgPSByZXF1aXJlKCcuL0Jhc2VUZXh0dXJlJyksXG4gICAgVmlkZW9CYXNlVGV4dHVyZSA9IHJlcXVpcmUoJy4vVmlkZW9CYXNlVGV4dHVyZScpLFxuICAgIFRleHR1cmVVdnMgPSByZXF1aXJlKCcuL1RleHR1cmVVdnMnKSxcbiAgICBFdmVudEVtaXR0ZXIgPSByZXF1aXJlKCdldmVudGVtaXR0ZXIzJyksXG4gICAgbWF0aCA9IHJlcXVpcmUoJy4uL21hdGgnKSxcbiAgICB1dGlscyA9IHJlcXVpcmUoJy4uL3V0aWxzJyk7XG5cbi8qKlxuICogQSB0ZXh0dXJlIHN0b3JlcyB0aGUgaW5mb3JtYXRpb24gdGhhdCByZXByZXNlbnRzIGFuIGltYWdlIG9yIHBhcnQgb2YgYW4gaW1hZ2UuIEl0IGNhbm5vdCBiZSBhZGRlZFxuICogdG8gdGhlIGRpc3BsYXkgbGlzdCBkaXJlY3RseS4gSW5zdGVhZCB1c2UgaXQgYXMgdGhlIHRleHR1cmUgZm9yIGEgU3ByaXRlLiBJZiBubyBmcmFtZSBpcyBwcm92aWRlZCB0aGVuIHRoZSB3aG9sZSBpbWFnZSBpcyB1c2VkLlxuICpcbiAqIFlvdSBjYW4gZGlyZWN0bHkgY3JlYXRlIGEgdGV4dHVyZSBmcm9tIGFuIGltYWdlIGFuZCB0aGVuIHJldXNlIGl0IG11bHRpcGxlIHRpbWVzIGxpa2UgdGhpcyA6XG4gKlxuICogYGBganNcbiAqIHZhciB0ZXh0dXJlID0gUElYSS5UZXh0dXJlLmZyb21JbWFnZSgnYXNzZXRzL2ltYWdlLnBuZycpO1xuICogdmFyIHNwcml0ZTEgPSBuZXcgUElYSS5TcHJpdGUodGV4dHVyZSk7XG4gKiB2YXIgc3ByaXRlMiA9IG5ldyBQSVhJLlNwcml0ZSh0ZXh0dXJlKTtcbiAqIGBgYFxuICpcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqIEBwYXJhbSBiYXNlVGV4dHVyZSB7UElYSS5CYXNlVGV4dHVyZX0gVGhlIGJhc2UgdGV4dHVyZSBzb3VyY2UgdG8gY3JlYXRlIHRoZSB0ZXh0dXJlIGZyb21cbiAqIEBwYXJhbSBbZnJhbWVdIHtQSVhJLlJlY3RhbmdsZX0gVGhlIHJlY3RhbmdsZSBmcmFtZSBvZiB0aGUgdGV4dHVyZSB0byBzaG93XG4gKiBAcGFyYW0gW2Nyb3BdIHtQSVhJLlJlY3RhbmdsZX0gVGhlIGFyZWEgb2Ygb3JpZ2luYWwgdGV4dHVyZVxuICogQHBhcmFtIFt0cmltXSB7UElYSS5SZWN0YW5nbGV9IFRyaW1tZWQgdGV4dHVyZSByZWN0YW5nbGVcbiAqIEBwYXJhbSBbcm90YXRlXSB7Ym9vbGVhbn0gaW5kaWNhdGVzIHdoZXRoZXIgdGhlIHRleHR1cmUgc2hvdWxkIGJlIHJvdGF0ZWQgYnkgOTAgZGVncmVlcyAoIHVzZWQgYnkgdGV4dHVyZSBwYWNrZXIgKVxuICovXG5mdW5jdGlvbiBUZXh0dXJlKGJhc2VUZXh0dXJlLCBmcmFtZSwgY3JvcCwgdHJpbSwgcm90YXRlKVxue1xuICAgIEV2ZW50RW1pdHRlci5jYWxsKHRoaXMpO1xuXG4gICAgLyoqXG4gICAgICogRG9lcyB0aGlzIFRleHR1cmUgaGF2ZSBhbnkgZnJhbWUgZGF0YSBhc3NpZ25lZCB0byBpdD9cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICovXG4gICAgdGhpcy5ub0ZyYW1lID0gZmFsc2U7XG5cbiAgICBpZiAoIWZyYW1lKVxuICAgIHtcbiAgICAgICAgdGhpcy5ub0ZyYW1lID0gdHJ1ZTtcbiAgICAgICAgZnJhbWUgPSBuZXcgbWF0aC5SZWN0YW5nbGUoMCwgMCwgMSwgMSk7XG4gICAgfVxuXG4gICAgaWYgKGJhc2VUZXh0dXJlIGluc3RhbmNlb2YgVGV4dHVyZSlcbiAgICB7XG4gICAgICAgIGJhc2VUZXh0dXJlID0gYmFzZVRleHR1cmUuYmFzZVRleHR1cmU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhlIGJhc2UgdGV4dHVyZSB0aGF0IHRoaXMgdGV4dHVyZSB1c2VzLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5CYXNlVGV4dHVyZX1cbiAgICAgKi9cbiAgICB0aGlzLmJhc2VUZXh0dXJlID0gYmFzZVRleHR1cmU7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgZnJhbWUgc3BlY2lmaWVzIHRoZSByZWdpb24gb2YgdGhlIGJhc2UgdGV4dHVyZSB0aGF0IHRoaXMgdGV4dHVyZSB1c2VzXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlJlY3RhbmdsZX1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX2ZyYW1lID0gZnJhbWU7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgdGV4dHVyZSB0cmltIGRhdGEuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlJlY3RhbmdsZX1cbiAgICAgKi9cbiAgICB0aGlzLnRyaW0gPSB0cmltO1xuXG4gICAgLyoqXG4gICAgICogVGhpcyB3aWxsIGxldCB0aGUgcmVuZGVyZXIga25vdyBpZiB0aGUgdGV4dHVyZSBpcyB2YWxpZC4gSWYgaXQncyBub3QgdGhlbiBpdCBjYW5ub3QgYmUgcmVuZGVyZWQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqL1xuICAgIHRoaXMudmFsaWQgPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIFRoaXMgd2lsbCBsZXQgYSByZW5kZXJlciBrbm93IHRoYXQgYSB0ZXh0dXJlIGhhcyBiZWVuIHVwZGF0ZWQgKHVzZWQgbWFpbmx5IGZvciB3ZWJHTCB1diB1cGRhdGVzKVxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKi9cbiAgICB0aGlzLnJlcXVpcmVzVXBkYXRlID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgV2ViR0wgVVYgZGF0YSBjYWNoZS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuVGV4dHVyZVV2c31cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX3V2cyA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgd2lkdGggb2YgdGhlIFRleHR1cmUgaW4gcGl4ZWxzLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMud2lkdGggPSAwO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGhlaWdodCBvZiB0aGUgVGV4dHVyZSBpbiBwaXhlbHMuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy5oZWlnaHQgPSAwO1xuXG4gICAgLyoqXG4gICAgICogVGhpcyBpcyB0aGUgYXJlYSBvZiB0aGUgQmFzZVRleHR1cmUgaW1hZ2UgdG8gYWN0dWFsbHkgY29weSB0byB0aGUgQ2FudmFzIC8gV2ViR0wgd2hlbiByZW5kZXJpbmcsXG4gICAgICogaXJyZXNwZWN0aXZlIG9mIHRoZSBhY3R1YWwgZnJhbWUgc2l6ZSBvciBwbGFjZW1lbnQgKHdoaWNoIGNhbiBiZSBpbmZsdWVuY2VkIGJ5IHRyaW1tZWQgdGV4dHVyZSBhdGxhc2VzKVxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5SZWN0YW5nbGV9XG4gICAgICovXG4gICAgdGhpcy5jcm9wID0gY3JvcCB8fCBmcmFtZTsvL25ldyBtYXRoLlJlY3RhbmdsZSgwLCAwLCAxLCAxKTtcblxuICAgIC8qKlxuICAgICAqIEluZGljYXRlcyB3aGV0aGVyIHRoZSB0ZXh0dXJlIHNob3VsZCBiZSByb3RhdGVkIGJ5IDkwIGRlZ3JlZXNcbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKi9cbiAgICB0aGlzLnJvdGF0ZSA9ICEhcm90YXRlO1xuXG4gICAgaWYgKGJhc2VUZXh0dXJlLmhhc0xvYWRlZClcbiAgICB7XG4gICAgICAgIGlmICh0aGlzLm5vRnJhbWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGZyYW1lID0gbmV3IG1hdGguUmVjdGFuZ2xlKDAsIDAsIGJhc2VUZXh0dXJlLndpZHRoLCBiYXNlVGV4dHVyZS5oZWlnaHQpO1xuXG4gICAgICAgICAgICAvLyBpZiB0aGVyZSBpcyBubyBmcmFtZSB3ZSBzaG91bGQgbW9uaXRvciBmb3IgYW55IGJhc2UgdGV4dHVyZSBjaGFuZ2VzLi5cbiAgICAgICAgICAgIGJhc2VUZXh0dXJlLm9uKCd1cGRhdGUnLCB0aGlzLm9uQmFzZVRleHR1cmVVcGRhdGVkLCB0aGlzKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmZyYW1lID0gZnJhbWU7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIGJhc2VUZXh0dXJlLm9uY2UoJ2xvYWRlZCcsIHRoaXMub25CYXNlVGV4dHVyZUxvYWRlZCwgdGhpcyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRmlyZWQgd2hlbiB0aGUgdGV4dHVyZSBpcyB1cGRhdGVkLiBUaGlzIGhhcHBlbnMgaWYgdGhlIGZyYW1lIG9yIHRoZSBiYXNlVGV4dHVyZSBpcyB1cGRhdGVkLlxuICAgICAqXG4gICAgICogQGV2ZW50IHVwZGF0ZVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLlRleHR1cmUjXG4gICAgICogQHByb3RlY3RlZFxuICAgICAqL1xufVxuXG5UZXh0dXJlLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoRXZlbnRFbWl0dGVyLnByb3RvdHlwZSk7XG5UZXh0dXJlLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFRleHR1cmU7XG5tb2R1bGUuZXhwb3J0cyA9IFRleHR1cmU7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKFRleHR1cmUucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogVGhlIGZyYW1lIHNwZWNpZmllcyB0aGUgcmVnaW9uIG9mIHRoZSBiYXNlIHRleHR1cmUgdGhhdCB0aGlzIHRleHR1cmUgdXNlcy5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuUmVjdGFuZ2xlfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLlRleHR1cmUjXG4gICAgICovXG4gICAgZnJhbWU6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fZnJhbWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKGZyYW1lKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLl9mcmFtZSA9IGZyYW1lO1xuXG4gICAgICAgICAgICB0aGlzLm5vRnJhbWUgPSBmYWxzZTtcblxuICAgICAgICAgICAgdGhpcy53aWR0aCA9IGZyYW1lLndpZHRoO1xuICAgICAgICAgICAgdGhpcy5oZWlnaHQgPSBmcmFtZS5oZWlnaHQ7XG5cbiAgICAgICAgICAgIGlmICghdGhpcy50cmltICYmICF0aGlzLnJvdGF0ZSAmJiAoZnJhbWUueCArIGZyYW1lLndpZHRoID4gdGhpcy5iYXNlVGV4dHVyZS53aWR0aCB8fCBmcmFtZS55ICsgZnJhbWUuaGVpZ2h0ID4gdGhpcy5iYXNlVGV4dHVyZS5oZWlnaHQpKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignVGV4dHVyZSBFcnJvcjogZnJhbWUgZG9lcyBub3QgZml0IGluc2lkZSB0aGUgYmFzZSBUZXh0dXJlIGRpbWVuc2lvbnMgJyArIHRoaXMpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvL3RoaXMudmFsaWQgPSBmcmFtZSAmJiBmcmFtZS53aWR0aCAmJiBmcmFtZS5oZWlnaHQgJiYgdGhpcy5iYXNlVGV4dHVyZS5zb3VyY2UgJiYgdGhpcy5iYXNlVGV4dHVyZS5oYXNMb2FkZWQ7XG4gICAgICAgICAgICB0aGlzLnZhbGlkID0gZnJhbWUgJiYgZnJhbWUud2lkdGggJiYgZnJhbWUuaGVpZ2h0ICYmIHRoaXMuYmFzZVRleHR1cmUuaGFzTG9hZGVkO1xuXG4gICAgICAgICAgICBpZiAodGhpcy50cmltKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHRoaXMud2lkdGggPSB0aGlzLnRyaW0ud2lkdGg7XG4gICAgICAgICAgICAgICAgdGhpcy5oZWlnaHQgPSB0aGlzLnRyaW0uaGVpZ2h0O1xuICAgICAgICAgICAgICAgIHRoaXMuX2ZyYW1lLndpZHRoID0gdGhpcy50cmltLndpZHRoO1xuICAgICAgICAgICAgICAgIHRoaXMuX2ZyYW1lLmhlaWdodCA9IHRoaXMudHJpbS5oZWlnaHQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdGhpcy5jcm9wID0gZnJhbWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICh0aGlzLnZhbGlkKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHRoaXMuX3VwZGF0ZVV2cygpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxufSk7XG5cbi8qKlxuICogVXBkYXRlcyB0aGlzIHRleHR1cmUgb24gdGhlIGdwdS5cbiAqXG4gKi9cblRleHR1cmUucHJvdG90eXBlLnVwZGF0ZSA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy5iYXNlVGV4dHVyZS51cGRhdGUoKTtcbn07XG5cbi8qKlxuICogQ2FsbGVkIHdoZW4gdGhlIGJhc2UgdGV4dHVyZSBpcyBsb2FkZWRcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5UZXh0dXJlLnByb3RvdHlwZS5vbkJhc2VUZXh0dXJlTG9hZGVkID0gZnVuY3Rpb24gKGJhc2VUZXh0dXJlKVxue1xuICAgIC8vIFRPRE8gdGhpcyBjb2RlIGxvb2tzIGNvbmZ1c2luZy4uIGJvbyB0byBhYnVzaW5nIGdldHRlcnMgYW5kIHNldHRlcnNzIVxuICAgIGlmICh0aGlzLm5vRnJhbWUpXG4gICAge1xuICAgICAgICB0aGlzLmZyYW1lID0gbmV3IG1hdGguUmVjdGFuZ2xlKDAsIDAsIGJhc2VUZXh0dXJlLndpZHRoLCBiYXNlVGV4dHVyZS5oZWlnaHQpO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICB0aGlzLmZyYW1lID0gdGhpcy5fZnJhbWU7XG4gICAgfVxuXG4gICAgdGhpcy5lbWl0KCd1cGRhdGUnLCB0aGlzKTtcbn07XG5cbi8qKlxuICogQ2FsbGVkIHdoZW4gdGhlIGJhc2UgdGV4dHVyZSBpcyB1cGRhdGVkXG4gKlxuICogQHByaXZhdGVcbiAqL1xuVGV4dHVyZS5wcm90b3R5cGUub25CYXNlVGV4dHVyZVVwZGF0ZWQgPSBmdW5jdGlvbiAoYmFzZVRleHR1cmUpXG57XG4gICAgdGhpcy5fZnJhbWUud2lkdGggPSBiYXNlVGV4dHVyZS53aWR0aDtcbiAgICB0aGlzLl9mcmFtZS5oZWlnaHQgPSBiYXNlVGV4dHVyZS5oZWlnaHQ7XG5cbiAgICB0aGlzLmVtaXQoJ3VwZGF0ZScsIHRoaXMpO1xufTtcblxuLyoqXG4gKiBEZXN0cm95cyB0aGlzIHRleHR1cmVcbiAqXG4gKiBAcGFyYW0gW2Rlc3Ryb3lCYXNlPWZhbHNlXSB7Ym9vbGVhbn0gV2hldGhlciB0byBkZXN0cm95IHRoZSBiYXNlIHRleHR1cmUgYXMgd2VsbFxuICovXG5UZXh0dXJlLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKGRlc3Ryb3lCYXNlKVxue1xuICAgIGlmICh0aGlzLmJhc2VUZXh0dXJlKVxuICAgIHtcbiAgICAgICAgaWYgKGRlc3Ryb3lCYXNlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmJhc2VUZXh0dXJlLmRlc3Ryb3koKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuYmFzZVRleHR1cmUub2ZmKCd1cGRhdGUnLCB0aGlzLm9uQmFzZVRleHR1cmVVcGRhdGVkLCB0aGlzKTtcbiAgICAgICAgdGhpcy5iYXNlVGV4dHVyZS5vZmYoJ2xvYWRlZCcsIHRoaXMub25CYXNlVGV4dHVyZUxvYWRlZCwgdGhpcyk7XG5cbiAgICAgICAgdGhpcy5iYXNlVGV4dHVyZSA9IG51bGw7XG4gICAgfVxuXG4gICAgdGhpcy5fZnJhbWUgPSBudWxsO1xuICAgIHRoaXMuX3V2cyA9IG51bGw7XG4gICAgdGhpcy50cmltID0gbnVsbDtcbiAgICB0aGlzLmNyb3AgPSBudWxsO1xuXG4gICAgdGhpcy52YWxpZCA9IGZhbHNlO1xuXG4gICAgdGhpcy5vZmYoJ2Rpc3Bvc2UnLCB0aGlzLmRpc3Bvc2UsIHRoaXMpO1xuICAgIHRoaXMub2ZmKCd1cGRhdGUnLCB0aGlzLnVwZGF0ZSwgdGhpcyk7XG59O1xuXG4vKipcbiAqIENyZWF0ZXMgYSBuZXcgdGV4dHVyZSBvYmplY3QgdGhhdCBhY3RzIHRoZSBzYW1lIGFzIHRoaXMgb25lLlxuICpcbiAqIEByZXR1cm4ge1BJWEkuVGV4dHVyZX1cbiAqL1xuVGV4dHVyZS5wcm90b3R5cGUuY2xvbmUgPSBmdW5jdGlvbiAoKVxue1xuICAgIHJldHVybiBuZXcgVGV4dHVyZSh0aGlzLmJhc2VUZXh0dXJlLCB0aGlzLmZyYW1lLCB0aGlzLmNyb3AsIHRoaXMudHJpbSwgdGhpcy5yb3RhdGUpO1xufTtcblxuLyoqXG4gKiBVcGRhdGVzIHRoZSBpbnRlcm5hbCBXZWJHTCBVViBjYWNoZS5cbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5UZXh0dXJlLnByb3RvdHlwZS5fdXBkYXRlVXZzID0gZnVuY3Rpb24gKClcbntcbiAgICBpZiAoIXRoaXMuX3V2cylcbiAgICB7XG4gICAgICAgIHRoaXMuX3V2cyA9IG5ldyBUZXh0dXJlVXZzKCk7XG4gICAgfVxuXG4gICAgdGhpcy5fdXZzLnNldCh0aGlzLmNyb3AsIHRoaXMuYmFzZVRleHR1cmUsIHRoaXMucm90YXRlKTtcbn07XG5cbi8qKlxuICogSGVscGVyIGZ1bmN0aW9uIHRoYXQgY3JlYXRlcyBhIFRleHR1cmUgb2JqZWN0IGZyb20gdGhlIGdpdmVuIGltYWdlIHVybC5cbiAqIElmIHRoZSBpbWFnZSBpcyBub3QgaW4gdGhlIHRleHR1cmUgY2FjaGUgaXQgd2lsbCBiZSAgY3JlYXRlZCBhbmQgbG9hZGVkLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBwYXJhbSBpbWFnZVVybCB7c3RyaW5nfSBUaGUgaW1hZ2UgdXJsIG9mIHRoZSB0ZXh0dXJlXG4gKiBAcGFyYW0gY3Jvc3NvcmlnaW4ge2Jvb2xlYW59IFdoZXRoZXIgcmVxdWVzdHMgc2hvdWxkIGJlIHRyZWF0ZWQgYXMgY3Jvc3NvcmlnaW5cbiAqIEBwYXJhbSBzY2FsZU1vZGUge251bWJlcn0gU2VlIHtAbGluayBQSVhJLlNDQUxFX01PREVTfSBmb3IgcG9zc2libGUgdmFsdWVzXG4gKiBAcmV0dXJuIHtQSVhJLlRleHR1cmV9IFRoZSBuZXdseSBjcmVhdGVkIHRleHR1cmVcbiAqL1xuVGV4dHVyZS5mcm9tSW1hZ2UgPSBmdW5jdGlvbiAoaW1hZ2VVcmwsIGNyb3Nzb3JpZ2luLCBzY2FsZU1vZGUpXG57XG4gICAgdmFyIHRleHR1cmUgPSB1dGlscy5UZXh0dXJlQ2FjaGVbaW1hZ2VVcmxdO1xuXG4gICAgaWYgKCF0ZXh0dXJlKVxuICAgIHtcbiAgICAgICAgdGV4dHVyZSA9IG5ldyBUZXh0dXJlKEJhc2VUZXh0dXJlLmZyb21JbWFnZShpbWFnZVVybCwgY3Jvc3NvcmlnaW4sIHNjYWxlTW9kZSkpO1xuICAgICAgICB1dGlscy5UZXh0dXJlQ2FjaGVbaW1hZ2VVcmxdID0gdGV4dHVyZTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGV4dHVyZTtcbn07XG5cbi8qKlxuICogSGVscGVyIGZ1bmN0aW9uIHRoYXQgY3JlYXRlcyBhIHNwcml0ZSB0aGF0IHdpbGwgY29udGFpbiBhIHRleHR1cmUgZnJvbSB0aGUgVGV4dHVyZUNhY2hlIGJhc2VkIG9uIHRoZSBmcmFtZUlkXG4gKiBUaGUgZnJhbWUgaWRzIGFyZSBjcmVhdGVkIHdoZW4gYSBUZXh0dXJlIHBhY2tlciBmaWxlIGhhcyBiZWVuIGxvYWRlZFxuICpcbiAqIEBzdGF0aWNcbiAqIEBwYXJhbSBmcmFtZUlkIHtzdHJpbmd9IFRoZSBmcmFtZSBJZCBvZiB0aGUgdGV4dHVyZSBpbiB0aGUgY2FjaGVcbiAqIEByZXR1cm4ge1BJWEkuVGV4dHVyZX0gVGhlIG5ld2x5IGNyZWF0ZWQgdGV4dHVyZVxuICovXG5UZXh0dXJlLmZyb21GcmFtZSA9IGZ1bmN0aW9uIChmcmFtZUlkKVxue1xuICAgIHZhciB0ZXh0dXJlID0gdXRpbHMuVGV4dHVyZUNhY2hlW2ZyYW1lSWRdO1xuXG4gICAgaWYgKCF0ZXh0dXJlKVxuICAgIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdUaGUgZnJhbWVJZCBcIicgKyBmcmFtZUlkICsgJ1wiIGRvZXMgbm90IGV4aXN0IGluIHRoZSB0ZXh0dXJlIGNhY2hlJyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRleHR1cmU7XG59O1xuXG4vKipcbiAqIEhlbHBlciBmdW5jdGlvbiB0aGF0IGNyZWF0ZXMgYSBuZXcgVGV4dHVyZSBiYXNlZCBvbiB0aGUgZ2l2ZW4gY2FudmFzIGVsZW1lbnQuXG4gKlxuICogQHN0YXRpY1xuICogQHBhcmFtIGNhbnZhcyB7Q2FudmFzfSBUaGUgY2FudmFzIGVsZW1lbnQgc291cmNlIG9mIHRoZSB0ZXh0dXJlXG4gKiBAcGFyYW0gc2NhbGVNb2RlIHtudW1iZXJ9IFNlZSB7QGxpbmsgUElYSS5TQ0FMRV9NT0RFU30gZm9yIHBvc3NpYmxlIHZhbHVlc1xuICogQHJldHVybiB7UElYSS5UZXh0dXJlfVxuICovXG5UZXh0dXJlLmZyb21DYW52YXMgPSBmdW5jdGlvbiAoY2FudmFzLCBzY2FsZU1vZGUpXG57XG4gICAgcmV0dXJuIG5ldyBUZXh0dXJlKEJhc2VUZXh0dXJlLmZyb21DYW52YXMoY2FudmFzLCBzY2FsZU1vZGUpKTtcbn07XG5cbi8qKlxuICogSGVscGVyIGZ1bmN0aW9uIHRoYXQgY3JlYXRlcyBhIG5ldyBUZXh0dXJlIGJhc2VkIG9uIHRoZSBnaXZlbiB2aWRlbyBlbGVtZW50LlxuICpcbiAqIEBzdGF0aWNcbiAqIEBwYXJhbSB2aWRlbyB7SFRNTFZpZGVvRWxlbWVudH1cbiAqIEBwYXJhbSBzY2FsZU1vZGUge251bWJlcn0gU2VlIHtAbGluayBQSVhJLlNDQUxFX01PREVTfSBmb3IgcG9zc2libGUgdmFsdWVzXG4gKiBAcmV0dXJuIHtQSVhJLlRleHR1cmV9IEEgVGV4dHVyZVxuICovXG5UZXh0dXJlLmZyb21WaWRlbyA9IGZ1bmN0aW9uICh2aWRlbywgc2NhbGVNb2RlKVxue1xuICAgIGlmICh0eXBlb2YgdmlkZW8gPT09ICdzdHJpbmcnKVxuICAgIHtcbiAgICAgICAgcmV0dXJuIFRleHR1cmUuZnJvbVZpZGVvVXJsKHZpZGVvLCBzY2FsZU1vZGUpO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICByZXR1cm4gbmV3IFRleHR1cmUoVmlkZW9CYXNlVGV4dHVyZS5mcm9tVmlkZW8odmlkZW8sIHNjYWxlTW9kZSkpO1xuICAgIH1cbn07XG5cbi8qKlxuICogSGVscGVyIGZ1bmN0aW9uIHRoYXQgY3JlYXRlcyBhIG5ldyBUZXh0dXJlIGJhc2VkIG9uIHRoZSB2aWRlbyB1cmwuXG4gKlxuICogQHN0YXRpY1xuICogQHBhcmFtIHZpZGVvVXJsIHtzdHJpbmd9XG4gKiBAcGFyYW0gc2NhbGVNb2RlIHtudW1iZXJ9IFNlZSB7QGxpbmsgUElYSS5TQ0FMRV9NT0RFU30gZm9yIHBvc3NpYmxlIHZhbHVlc1xuICogQHJldHVybiB7UElYSS5UZXh0dXJlfSBBIFRleHR1cmVcbiAqL1xuVGV4dHVyZS5mcm9tVmlkZW9VcmwgPSBmdW5jdGlvbiAodmlkZW9VcmwsIHNjYWxlTW9kZSlcbntcbiAgICByZXR1cm4gbmV3IFRleHR1cmUoVmlkZW9CYXNlVGV4dHVyZS5mcm9tVXJsKHZpZGVvVXJsLCBzY2FsZU1vZGUpKTtcbn07XG5cbi8qKlxuICogQWRkcyBhIHRleHR1cmUgdG8gdGhlIGdsb2JhbCB1dGlscy5UZXh0dXJlQ2FjaGUuIFRoaXMgY2FjaGUgaXMgc2hhcmVkIGFjcm9zcyB0aGUgd2hvbGUgUElYSSBvYmplY3QuXG4gKlxuICogQHN0YXRpY1xuICogQHBhcmFtIHRleHR1cmUge1BJWEkuVGV4dHVyZX0gVGhlIFRleHR1cmUgdG8gYWRkIHRvIHRoZSBjYWNoZS5cbiAqIEBwYXJhbSBpZCB7c3RyaW5nfSBUaGUgaWQgdGhhdCB0aGUgdGV4dHVyZSB3aWxsIGJlIHN0b3JlZCBhZ2FpbnN0LlxuICovXG5UZXh0dXJlLmFkZFRleHR1cmVUb0NhY2hlID0gZnVuY3Rpb24gKHRleHR1cmUsIGlkKVxue1xuICAgIHV0aWxzLlRleHR1cmVDYWNoZVtpZF0gPSB0ZXh0dXJlO1xufTtcblxuLyoqXG4gKiBSZW1vdmUgYSB0ZXh0dXJlIGZyb20gdGhlIGdsb2JhbCB1dGlscy5UZXh0dXJlQ2FjaGUuXG4gKlxuICogQHN0YXRpY1xuICogQHBhcmFtIGlkIHtzdHJpbmd9IFRoZSBpZCBvZiB0aGUgdGV4dHVyZSB0byBiZSByZW1vdmVkXG4gKiBAcmV0dXJuIHtQSVhJLlRleHR1cmV9IFRoZSB0ZXh0dXJlIHRoYXQgd2FzIHJlbW92ZWRcbiAqL1xuVGV4dHVyZS5yZW1vdmVUZXh0dXJlRnJvbUNhY2hlID0gZnVuY3Rpb24gKGlkKVxue1xuICAgIHZhciB0ZXh0dXJlID0gdXRpbHMuVGV4dHVyZUNhY2hlW2lkXTtcblxuICAgIGRlbGV0ZSB1dGlscy5UZXh0dXJlQ2FjaGVbaWRdO1xuICAgIGRlbGV0ZSB1dGlscy5CYXNlVGV4dHVyZUNhY2hlW2lkXTtcblxuICAgIHJldHVybiB0ZXh0dXJlO1xufTtcblxuLyoqXG4gKiBBbiBlbXB0eSB0ZXh0dXJlLCB1c2VkIG9mdGVuIHRvIG5vdCBoYXZlIHRvIGNyZWF0ZSBtdWx0aXBsZSBlbXB0eSB0ZXh0dXJlcy5cbiAqXG4gKiBAc3RhdGljXG4gKiBAY29uc3RhbnRcbiAqL1xuVGV4dHVyZS5FTVBUWSA9IG5ldyBUZXh0dXJlKG5ldyBCYXNlVGV4dHVyZSgpKTtcbiIsIlxuLyoqXG4gKiBBIHN0YW5kYXJkIG9iamVjdCB0byBzdG9yZSB0aGUgVXZzIG9mIGEgdGV4dHVyZVxuICpcbiAqIEBjbGFzc1xuICogQHByaXZhdGVcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKi9cbmZ1bmN0aW9uIFRleHR1cmVVdnMoKVxue1xuICAgIHRoaXMueDAgPSAwO1xuICAgIHRoaXMueTAgPSAwO1xuXG4gICAgdGhpcy54MSA9IDE7XG4gICAgdGhpcy55MSA9IDA7XG5cbiAgICB0aGlzLngyID0gMTtcbiAgICB0aGlzLnkyID0gMTtcblxuICAgIHRoaXMueDMgPSAwO1xuICAgIHRoaXMueTMgPSAxO1xuXG4gICAgdGhpcy54eTBfdWludDMyID0gMDtcbiAgICB0aGlzLnh5MV91aW50MzIgPSAwO1xuICAgIHRoaXMueHkyX3VpbnQzMiA9IDA7XG4gICAgdGhpcy54eTNfdWludDMyID0gMDtcblxuICAgIHRoaXMudXZzX3VpbnQzMiA9IG5ldyBVaW50MzJBcnJheSg0KVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IFRleHR1cmVVdnM7XG5cbi8qKlxuICogU2V0cyB0aGUgdGV4dHVyZSBVdnMgYmFzZWQgb24gdGhlIGdpdmVuIGZyYW1lIGluZm9ybWF0aW9uXG4gKiBAcGFyYW0gZnJhbWUge1BJWEkuUmVjdGFuZ2xlfVxuICogQHBhcmFtIGJhc2VGcmFtZSB7UElYSS5SZWN0YW5nbGV9XG4gKiBAcGFyYW0gcm90YXRlIHtib29sZWFufSBXaGV0aGVyIG9yIG5vdCB0aGUgZnJhbWUgaXMgcm90YXRlZFxuICogQHByaXZhdGVcbiAqL1xuVGV4dHVyZVV2cy5wcm90b3R5cGUuc2V0ID0gZnVuY3Rpb24gKGZyYW1lLCBiYXNlRnJhbWUsIHJvdGF0ZSlcbntcbiAgICB2YXIgdHcgPSBiYXNlRnJhbWUud2lkdGg7XG4gICAgdmFyIHRoID0gYmFzZUZyYW1lLmhlaWdodDtcblxuICAgIGlmKHJvdGF0ZSlcbiAgICB7XG4gICAgICAgIHRoaXMueDAgPSAoZnJhbWUueCArIGZyYW1lLmhlaWdodCkgLyB0dztcbiAgICAgICAgdGhpcy55MCA9IGZyYW1lLnkgLyB0aDtcblxuICAgICAgICB0aGlzLngxID0gKGZyYW1lLnggKyBmcmFtZS5oZWlnaHQpIC8gdHc7XG4gICAgICAgIHRoaXMueTEgPSAoZnJhbWUueSArIGZyYW1lLndpZHRoKSAvIHRoO1xuXG4gICAgICAgIHRoaXMueDIgPSBmcmFtZS54IC8gdHc7XG4gICAgICAgIHRoaXMueTIgPSAoZnJhbWUueSArIGZyYW1lLndpZHRoKSAvIHRoO1xuXG4gICAgICAgIHRoaXMueDMgPSBmcmFtZS54IC8gdHc7XG4gICAgICAgIHRoaXMueTMgPSBmcmFtZS55IC8gdGg7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG5cbiAgICAgICAgdGhpcy54MCA9IGZyYW1lLnggLyB0dztcbiAgICAgICAgdGhpcy55MCA9IGZyYW1lLnkgLyB0aDtcblxuICAgICAgICB0aGlzLngxID0gKGZyYW1lLnggKyBmcmFtZS53aWR0aCkgLyB0dztcbiAgICAgICAgdGhpcy55MSA9IGZyYW1lLnkgLyB0aDtcblxuICAgICAgICB0aGlzLngyID0gKGZyYW1lLnggKyBmcmFtZS53aWR0aCkgLyB0dztcbiAgICAgICAgdGhpcy55MiA9IChmcmFtZS55ICsgZnJhbWUuaGVpZ2h0KSAvIHRoO1xuXG4gICAgICAgIHRoaXMueDMgPSBmcmFtZS54IC8gdHc7XG4gICAgICAgIHRoaXMueTMgPSAoZnJhbWUueSArIGZyYW1lLmhlaWdodCkgLyB0aDtcbiAgICB9XG5cbiAgICB0aGlzLnV2c191aW50MzJbMF0gPSAoKCh0aGlzLnkwICogNjU1MzUpICYgMHhGRkZGKSA8PCAxNikgfCAoKHRoaXMueDAgKiA2NTUzNSkgJiAweEZGRkYpO1xuICAgIHRoaXMudXZzX3VpbnQzMlsxXSA9ICgoKHRoaXMueTEgKiA2NTUzNSkgJiAweEZGRkYpIDw8IDE2KSB8ICgodGhpcy54MSAqIDY1NTM1KSAmIDB4RkZGRik7XG4gICAgdGhpcy51dnNfdWludDMyWzJdID0gKCgodGhpcy55MiAqIDY1NTM1KSAmIDB4RkZGRikgPDwgMTYpIHwgKCh0aGlzLngyICogNjU1MzUpICYgMHhGRkZGKTtcbiAgICB0aGlzLnV2c191aW50MzJbM10gPSAoKCh0aGlzLnkzICogNjU1MzUpICYgMHhGRkZGKSA8PCAxNikgfCAoKHRoaXMueDMgKiA2NTUzNSkgJiAweEZGRkYpO1xufTtcbiIsInZhciBCYXNlVGV4dHVyZSA9IHJlcXVpcmUoJy4vQmFzZVRleHR1cmUnKSxcbiAgICB1dGlscyA9IHJlcXVpcmUoJy4uL3V0aWxzJyk7XG5cbi8qKlxuICogQSB0ZXh0dXJlIG9mIGEgW3BsYXlpbmddIFZpZGVvLlxuICpcbiAqIFZpZGVvIGJhc2UgdGV4dHVyZXMgbWltaWMgUGl4aSBCYXNlVGV4dHVyZS5mcm9tLi4uLiBtZXRob2QgaW4gdGhlaXIgY3JlYXRpb24gcHJvY2Vzcy5cbiAqXG4gKiBUaGlzIGNhbiBiZSB1c2VkIGluIHNldmVyYWwgd2F5cywgc3VjaCBhczpcbiAqXG4gKiBgYGBqc1xuICogdmFyIHRleHR1cmUgPSBQSVhJLlZpZGVvQmFzZVRleHR1cmUuZnJvbVVybCgnaHR0cDovL215ZG9tYWluLmNvbS92aWRlby5tcDQnKTtcbiAqXG4gKiB2YXIgdGV4dHVyZSA9IFBJWEkuVmlkZW9CYXNlVGV4dHVyZS5mcm9tVXJsKHsgc3JjOiAnaHR0cDovL215ZG9tYWluLmNvbS92aWRlby5tcDQnLCBtaW1lOiAndmlkZW8vbXA0JyB9KTtcbiAqXG4gKiB2YXIgdGV4dHVyZSA9IFBJWEkuVmlkZW9CYXNlVGV4dHVyZS5mcm9tVXJscyhbJy92aWRlby53ZWJtJywgJy92aWRlby5tcDQnXSk7XG4gKlxuICogdmFyIHRleHR1cmUgPSBQSVhJLlZpZGVvQmFzZVRleHR1cmUuZnJvbVVybHMoW1xuICogICAgIHsgc3JjOiAnL3ZpZGVvLndlYm0nLCBtaW1lOiAndmlkZW8vd2VibScgfSxcbiAqICAgICB7IHNyYzogJy92aWRlby5tcDQnLCBtaW1lOiAndmlkZW8vbXA0JyB9XG4gKiBdKTtcbiAqIGBgYFxuICpcbiAqIFNlZSB0aGUgW1wiZGV1c1wiIGRlbW9dKGh0dHA6Ly93d3cuZ29vZGJveWRpZ2l0YWwuY29tL3BpeGlqcy9leGFtcGxlcy9kZXVzLykuXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLkJhc2VUZXh0dXJlXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIHNvdXJjZSB7SFRNTFZpZGVvRWxlbWVudH1cbiAqIEBwYXJhbSBbc2NhbGVNb2RlXSB7bnVtYmVyfSBTZWUge0BsaW5rIFBJWEkuU0NBTEVfTU9ERVN9IGZvciBwb3NzaWJsZSB2YWx1ZXNcbiAqL1xuZnVuY3Rpb24gVmlkZW9CYXNlVGV4dHVyZShzb3VyY2UsIHNjYWxlTW9kZSlcbntcbiAgICBpZiAoIXNvdXJjZSlcbiAgICB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignTm8gdmlkZW8gc291cmNlIGVsZW1lbnQgc3BlY2lmaWVkLicpO1xuICAgIH1cblxuICAgIC8vIGhvb2sgaW4gaGVyZSB0byBjaGVjayBpZiB2aWRlbyBpcyBhbHJlYWR5IGF2YWlsYWJsZS5cbiAgICAvLyBCYXNlVGV4dHVyZSBsb29rcyBmb3IgYSBzb3VyY2UuY29tcGxldGUgYm9vbGVhbiwgcGx1cyB3aWR0aCAmIGhlaWdodC5cblxuICAgIGlmICgoc291cmNlLnJlYWR5U3RhdGUgPT09IHNvdXJjZS5IQVZFX0VOT1VHSF9EQVRBIHx8IHNvdXJjZS5yZWFkeVN0YXRlID09PSBzb3VyY2UuSEFWRV9GVVRVUkVfREFUQSkgJiYgc291cmNlLndpZHRoICYmIHNvdXJjZS5oZWlnaHQpXG4gICAge1xuICAgICAgICBzb3VyY2UuY29tcGxldGUgPSB0cnVlO1xuICAgIH1cblxuICAgIEJhc2VUZXh0dXJlLmNhbGwodGhpcywgc291cmNlLCBzY2FsZU1vZGUpO1xuXG4gICAgLyoqXG4gICAgICogU2hvdWxkIHRoZSBiYXNlIHRleHR1cmUgYXV0b21hdGljYWxseSB1cGRhdGUgaXRzZWxmLCBzZXQgdG8gdHJ1ZSBieSBkZWZhdWx0XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqIEBkZWZhdWx0IHRydWVcbiAgICAgKi9cbiAgICB0aGlzLmF1dG9VcGRhdGUgPSBmYWxzZTtcblxuICAgIHRoaXMuX29uVXBkYXRlID0gdGhpcy5fb25VcGRhdGUuYmluZCh0aGlzKTtcbiAgICB0aGlzLl9vbkNhblBsYXkgPSB0aGlzLl9vbkNhblBsYXkuYmluZCh0aGlzKTtcblxuICAgIGlmICghc291cmNlLmNvbXBsZXRlKVxuICAgIHtcbiAgICAgICAgc291cmNlLmFkZEV2ZW50TGlzdGVuZXIoJ2NhbnBsYXknLCB0aGlzLl9vbkNhblBsYXkpO1xuICAgICAgICBzb3VyY2UuYWRkRXZlbnRMaXN0ZW5lcignY2FucGxheXRocm91Z2gnLCB0aGlzLl9vbkNhblBsYXkpO1xuXG4gICAgICAgIC8vIHN0YXJ0ZWQgcGxheWluZy4uXG4gICAgICAgIHNvdXJjZS5hZGRFdmVudExpc3RlbmVyKCdwbGF5JywgdGhpcy5fb25QbGF5U3RhcnQuYmluZCh0aGlzKSk7XG4gICAgICAgIHNvdXJjZS5hZGRFdmVudExpc3RlbmVyKCdwYXVzZScsIHRoaXMuX29uUGxheVN0b3AuYmluZCh0aGlzKSk7XG4gICAgfVxuXG4gICAgdGhpcy5fX2xvYWRlZCA9IGZhbHNlO1xufVxuXG5WaWRlb0Jhc2VUZXh0dXJlLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoQmFzZVRleHR1cmUucHJvdG90eXBlKTtcblZpZGVvQmFzZVRleHR1cmUucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gVmlkZW9CYXNlVGV4dHVyZTtcbm1vZHVsZS5leHBvcnRzID0gVmlkZW9CYXNlVGV4dHVyZTtcblxuLyoqXG4gKiBUaGUgaW50ZXJuYWwgdXBkYXRlIGxvb3Agb2YgdGhlIHZpZGVvIGJhc2UgdGV4dHVyZSwgb25seSBydW5zIHdoZW4gYXV0b1VwZGF0ZSBpcyBzZXQgdG8gdHJ1ZVxuICpcbiAqIEBwcml2YXRlXG4gKi9cblZpZGVvQmFzZVRleHR1cmUucHJvdG90eXBlLl9vblVwZGF0ZSA9IGZ1bmN0aW9uICgpXG57XG4gICAgaWYgKHRoaXMuYXV0b1VwZGF0ZSlcbiAgICB7XG4gICAgICAgIHdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUodGhpcy5fb25VcGRhdGUpO1xuICAgICAgICB0aGlzLnVwZGF0ZSgpO1xuICAgIH1cbn07XG5cbi8qKlxuICogUnVucyB0aGUgdXBkYXRlIGxvb3Agd2hlbiB0aGUgdmlkZW8gaXMgcmVhZHkgdG8gcGxheVxuICpcbiAqIEBwcml2YXRlXG4gKi9cblZpZGVvQmFzZVRleHR1cmUucHJvdG90eXBlLl9vblBsYXlTdGFydCA9IGZ1bmN0aW9uICgpXG57XG4gICAgaWYgKCF0aGlzLmF1dG9VcGRhdGUpXG4gICAge1xuICAgICAgICB3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lKHRoaXMuX29uVXBkYXRlKTtcbiAgICAgICAgdGhpcy5hdXRvVXBkYXRlID0gdHJ1ZTtcbiAgICB9XG59O1xuXG4vKipcbiAqIEZpcmVkIHdoZW4gYSBwYXVzZSBldmVudCBpcyB0cmlnZ2VyZWQsIHN0b3BzIHRoZSB1cGRhdGUgbG9vcFxuICpcbiAqIEBwcml2YXRlXG4gKi9cblZpZGVvQmFzZVRleHR1cmUucHJvdG90eXBlLl9vblBsYXlTdG9wID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLmF1dG9VcGRhdGUgPSBmYWxzZTtcbn07XG5cbi8qKlxuICogRmlyZWQgd2hlbiB0aGUgdmlkZW8gaXMgbG9hZGVkIGFuZCByZWFkeSB0byBwbGF5XG4gKlxuICogQHByaXZhdGVcbiAqL1xuVmlkZW9CYXNlVGV4dHVyZS5wcm90b3R5cGUuX29uQ2FuUGxheSA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy5oYXNMb2FkZWQgPSB0cnVlO1xuXG4gICAgaWYgKHRoaXMuc291cmNlKVxuICAgIHtcbiAgICAgICAgdGhpcy5zb3VyY2UucmVtb3ZlRXZlbnRMaXN0ZW5lcignY2FucGxheScsIHRoaXMuX29uQ2FuUGxheSk7XG4gICAgICAgIHRoaXMuc291cmNlLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2NhbnBsYXl0aHJvdWdoJywgdGhpcy5fb25DYW5QbGF5KTtcblxuICAgICAgICB0aGlzLndpZHRoID0gdGhpcy5zb3VyY2UudmlkZW9XaWR0aDtcbiAgICAgICAgdGhpcy5oZWlnaHQgPSB0aGlzLnNvdXJjZS52aWRlb0hlaWdodDtcblxuICAgICAgICB0aGlzLnNvdXJjZS5wbGF5KCk7XG5cbiAgICAgICAgLy8gcHJldmVudCBtdWx0aXBsZSBsb2FkZWQgZGlzcGF0Y2hlcy4uXG4gICAgICAgIGlmICghdGhpcy5fX2xvYWRlZClcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5fX2xvYWRlZCA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLmVtaXQoJ2xvYWRlZCcsIHRoaXMpO1xuICAgICAgICB9XG4gICAgfVxufTtcblxuLyoqXG4gKiBEZXN0cm95cyB0aGlzIHRleHR1cmVcbiAqXG4gKi9cblZpZGVvQmFzZVRleHR1cmUucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoKVxue1xuICAgIGlmICh0aGlzLnNvdXJjZSAmJiB0aGlzLnNvdXJjZS5fcGl4aUlkKVxuICAgIHtcbiAgICAgICAgZGVsZXRlIHV0aWxzLkJhc2VUZXh0dXJlQ2FjaGVbIHRoaXMuc291cmNlLl9waXhpSWQgXTtcbiAgICAgICAgZGVsZXRlIHRoaXMuc291cmNlLl9waXhpSWQ7XG4gICAgfVxuXG4gICAgQmFzZVRleHR1cmUucHJvdG90eXBlLmRlc3Ryb3kuY2FsbCh0aGlzKTtcbn07XG5cbi8qKlxuICogTWltaWMgUGl4aSBCYXNlVGV4dHVyZS5mcm9tLi4uLiBtZXRob2QuXG4gKlxuICogQHN0YXRpY1xuICogQHBhcmFtIHZpZGVvIHtIVE1MVmlkZW9FbGVtZW50fVxuICogQHBhcmFtIHNjYWxlTW9kZSB7bnVtYmVyfSBTZWUge0BsaW5rIFBJWEkuU0NBTEVfTU9ERVN9IGZvciBwb3NzaWJsZSB2YWx1ZXNcbiAqIEByZXR1cm4ge1BJWEkuVmlkZW9CYXNlVGV4dHVyZX1cbiAqL1xuVmlkZW9CYXNlVGV4dHVyZS5mcm9tVmlkZW8gPSBmdW5jdGlvbiAodmlkZW8sIHNjYWxlTW9kZSlcbntcbiAgICBpZiAoIXZpZGVvLl9waXhpSWQpXG4gICAge1xuICAgICAgICB2aWRlby5fcGl4aUlkID0gJ3ZpZGVvXycgKyB1dGlscy51aWQoKTtcbiAgICB9XG5cbiAgICB2YXIgYmFzZVRleHR1cmUgPSB1dGlscy5CYXNlVGV4dHVyZUNhY2hlW3ZpZGVvLl9waXhpSWRdO1xuXG4gICAgaWYgKCFiYXNlVGV4dHVyZSlcbiAgICB7XG4gICAgICAgIGJhc2VUZXh0dXJlID0gbmV3IFZpZGVvQmFzZVRleHR1cmUodmlkZW8sIHNjYWxlTW9kZSk7XG4gICAgICAgIHV0aWxzLkJhc2VUZXh0dXJlQ2FjaGVbIHZpZGVvLl9waXhpSWQgXSA9IGJhc2VUZXh0dXJlO1xuICAgIH1cblxuICAgIHJldHVybiBiYXNlVGV4dHVyZTtcbn07XG5cbi8qKlxuICogSGVscGVyIGZ1bmN0aW9uIHRoYXQgY3JlYXRlcyBhIG5ldyBCYXNlVGV4dHVyZSBiYXNlZCBvbiB0aGUgZ2l2ZW4gdmlkZW8gZWxlbWVudC5cbiAqIFRoaXMgQmFzZVRleHR1cmUgY2FuIHRoZW4gYmUgdXNlZCB0byBjcmVhdGUgYSB0ZXh0dXJlXG4gKlxuICogQHN0YXRpY1xuICogQHBhcmFtIHZpZGVvU3JjIHtzdHJpbmd8b2JqZWN0fHN0cmluZ1tdfG9iamVjdFtdfSBUaGUgVVJMKHMpIGZvciB0aGUgdmlkZW8uXG4gKiBAcGFyYW0gW3ZpZGVvU3JjLnNyY10ge3N0cmluZ30gT25lIG9mIHRoZSBzb3VyY2UgdXJscyBmb3IgdGhlIHZpZGVvXG4gKiBAcGFyYW0gW3ZpZGVvU3JjLm1pbWVdIHtzdHJpbmd9IFRoZSBtaW1ldHlwZSBvZiB0aGUgdmlkZW8gKGUuZy4gJ3ZpZGVvL21wNCcpLiBJZiBub3Qgc3BlY2lmaWVkXG4gKiAgdGhlIHVybCdzIGV4dGVuc2lvbiB3aWxsIGJlIHVzZWQgYXMgdGhlIHNlY29uZCBwYXJ0IG9mIHRoZSBtaW1lIHR5cGUuXG4gKiBAcGFyYW0gc2NhbGVNb2RlIHtudW1iZXJ9IFNlZSB7QGxpbmsgUElYSS5TQ0FMRV9NT0RFU30gZm9yIHBvc3NpYmxlIHZhbHVlc1xuICogQHJldHVybiB7UElYSS5WaWRlb0Jhc2VUZXh0dXJlfVxuICovXG5WaWRlb0Jhc2VUZXh0dXJlLmZyb21VcmwgPSBmdW5jdGlvbiAodmlkZW9TcmMsIHNjYWxlTW9kZSlcbntcbiAgICB2YXIgdmlkZW8gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd2aWRlbycpO1xuXG4gICAgLy8gYXJyYXkgb2Ygb2JqZWN0cyBvciBzdHJpbmdzXG4gICAgaWYgKEFycmF5LmlzQXJyYXkodmlkZW9TcmMpKVxuICAgIHtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB2aWRlb1NyYy5sZW5ndGg7ICsraSlcbiAgICAgICAge1xuICAgICAgICAgICAgdmlkZW8uYXBwZW5kQ2hpbGQoY3JlYXRlU291cmNlKHZpZGVvU3JjW2ldLnNyYyB8fCB2aWRlb1NyY1tpXSwgdmlkZW9TcmNbaV0ubWltZSkpO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8vIHNpbmdsZSBvYmplY3Qgb3Igc3RyaW5nXG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgdmlkZW8uYXBwZW5kQ2hpbGQoY3JlYXRlU291cmNlKHZpZGVvU3JjLnNyYyB8fCB2aWRlb1NyYywgdmlkZW9TcmMubWltZSkpO1xuICAgIH1cblxuICAgIHZpZGVvLmxvYWQoKTtcbiAgICB2aWRlby5wbGF5KCk7XG5cbiAgICByZXR1cm4gVmlkZW9CYXNlVGV4dHVyZS5mcm9tVmlkZW8odmlkZW8sIHNjYWxlTW9kZSk7XG59O1xuXG5WaWRlb0Jhc2VUZXh0dXJlLmZyb21VcmxzID0gVmlkZW9CYXNlVGV4dHVyZS5mcm9tVXJsO1xuXG5mdW5jdGlvbiBjcmVhdGVTb3VyY2UocGF0aCwgdHlwZSlcbntcbiAgICBpZiAoIXR5cGUpXG4gICAge1xuICAgICAgICB0eXBlID0gJ3ZpZGVvLycgKyBwYXRoLnN1YnN0cihwYXRoLmxhc3RJbmRleE9mKCcuJykgKyAxKTtcbiAgICB9XG5cbiAgICB2YXIgc291cmNlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc291cmNlJyk7XG5cbiAgICBzb3VyY2Uuc3JjID0gcGF0aDtcbiAgICBzb3VyY2UudHlwZSA9IHR5cGU7XG5cbiAgICByZXR1cm4gc291cmNlO1xufVxuIiwidmFyIENPTlNUID0gcmVxdWlyZSgnLi4vY29uc3QnKSxcbiAgICBFdmVudEVtaXR0ZXIgPSByZXF1aXJlKCdldmVudGVtaXR0ZXIzJyksXG4gICAgLy8gSW50ZXJuYWwgZXZlbnQgdXNlZCBieSBjb21wb3NlZCBlbWl0dGVyXG4gICAgVElDSyA9ICd0aWNrJztcblxuLyoqXG4gKiBBIFRpY2tlciBjbGFzcyB0aGF0IHJ1bnMgYW4gdXBkYXRlIGxvb3AgdGhhdCBvdGhlciBvYmplY3RzIGxpc3RlbiB0by5cbiAqIFRoaXMgY2xhc3MgaXMgY29tcG9zZWQgYXJvdW5kIGFuIEV2ZW50RW1pdHRlciBvYmplY3QgdG8gYWRkIGxpc3RlbmVyc1xuICogbWVhbnQgZm9yIGV4ZWN1dGlvbiBvbiB0aGUgbmV4dCByZXF1ZXN0ZWQgYW5pbWF0aW9uIGZyYW1lLlxuICogQW5pbWF0aW9uIGZyYW1lcyBhcmUgcmVxdWVzdGVkIG9ubHkgd2hlbiBuZWNlc3NhcnksXG4gKiBlLmcuIFdoZW4gdGhlIHRpY2tlciBpcyBzdGFydGVkIGFuZCB0aGUgZW1pdHRlciBoYXMgbGlzdGVuZXJzLlxuICpcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWEkudGlja2VyXG4gKi9cbmZ1bmN0aW9uIFRpY2tlcigpXG57XG4gICAgdmFyIF90aGlzID0gdGhpcztcblxuICAgIC8qKlxuICAgICAqIEludGVybmFsIHRpY2sgbWV0aG9kIGJvdW5kIHRvIHRpY2tlciBpbnN0YW5jZS5cbiAgICAgKiBUaGlzIGlzIGJlY2F1c2UgaW4gZWFybHkgMjAxNSwgRnVuY3Rpb24uYmluZFxuICAgICAqIGlzIHN0aWxsIDYwJSBzbG93ZXIgaW4gaGlnaCBwZXJmb3JtYW5jZSBzY2VuYXJpb3MuXG4gICAgICogQWxzbyBzZXBhcmF0aW5nIGZyYW1lIHJlcXVlc3RzIGZyb20gdXBkYXRlIG1ldGhvZFxuICAgICAqIHNvIGxpc3RlbmVycyBtYXkgYmUgY2FsbGVkIGF0IGFueSB0aW1lIGFuZCB3aXRoXG4gICAgICogYW55IGFuaW1hdGlvbiBBUEksIGp1c3QgaW52b2tlIHRpY2tlci51cGRhdGUodGltZSkuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX3RpY2sgPSBmdW5jdGlvbiBfdGljayh0aW1lKSB7XG5cbiAgICAgICAgX3RoaXMuX3JlcXVlc3RJZCA9IG51bGw7XG5cbiAgICAgICAgaWYgKF90aGlzLnN0YXJ0ZWQpXG4gICAgICAgIHtcbiAgICAgICAgICAgIC8vIEludm9rZSBsaXN0ZW5lcnMgbm93XG4gICAgICAgICAgICBfdGhpcy51cGRhdGUodGltZSk7XG4gICAgICAgICAgICAvLyBMaXN0ZW5lciBzaWRlIGVmZmVjdHMgbWF5IGhhdmUgbW9kaWZpZWQgdGlja2VyIHN0YXRlLlxuICAgICAgICAgICAgaWYgKF90aGlzLnN0YXJ0ZWQgJiYgX3RoaXMuX3JlcXVlc3RJZCA9PT0gbnVsbCAmJiBfdGhpcy5fZW1pdHRlci5saXN0ZW5lcnMoVElDSywgdHJ1ZSkpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgX3RoaXMuX3JlcXVlc3RJZCA9IHJlcXVlc3RBbmltYXRpb25GcmFtZShfdGhpcy5fdGljayk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgLyoqXG4gICAgICogSW50ZXJuYWwgZW1pdHRlciB1c2VkIHRvIGZpcmUgJ3RpY2snIGV2ZW50XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9lbWl0dGVyID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gICAgLyoqXG4gICAgICogSW50ZXJuYWwgY3VycmVudCBmcmFtZSByZXF1ZXN0IElEXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9yZXF1ZXN0SWQgPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogSW50ZXJuYWwgdmFsdWUgbWFuYWdlZCBieSBtaW5GUFMgcHJvcGVydHkgc2V0dGVyIGFuZCBnZXR0ZXIuXG4gICAgICogVGhpcyBpcyB0aGUgbWF4aW11bSBhbGxvd2VkIG1pbGxpc2Vjb25kcyBiZXR3ZWVuIHVwZGF0ZXMuXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9tYXhFbGFwc2VkTVMgPSAxMDA7XG5cbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIG9yIG5vdCB0aGlzIHRpY2tlciBzaG91bGQgaW52b2tlIHRoZSBtZXRob2RcbiAgICAgKiB7QGxpbmsgUElYSS50aWNrZXIuVGlja2VyI3N0YXJ0fSBhdXRvbWF0aWNhbGx5XG4gICAgICogd2hlbiBhIGxpc3RlbmVyIGlzIGFkZGVkLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgICAqL1xuICAgIHRoaXMuYXV0b1N0YXJ0ID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBTY2FsYXIgdGltZSB2YWx1ZSBmcm9tIGxhc3QgZnJhbWUgdG8gdGhpcyBmcmFtZS5cbiAgICAgKiBUaGlzIHZhbHVlIGlzIGNhcHBlZCBieSBzZXR0aW5nIHtAbGluayBQSVhJLnRpY2tlci5UaWNrZXIjbWluRlBTfVxuICAgICAqIGFuZCBpcyBzY2FsZWQgd2l0aCB7QGxpbmsgUElYSS50aWNrZXIuVGlja2VyI3NwZWVkfS5cbiAgICAgKiAqKk5vdGU6KiogVGhlIGNhcCBtYXkgYmUgZXhjZWVkZWQgYnkgc2NhbGluZy5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAxXG4gICAgICovXG4gICAgdGhpcy5kZWx0YVRpbWUgPSAxO1xuXG4gICAgLyoqXG4gICAgICogVGltZSBlbGFwc2VkIGluIG1pbGxpc2Vjb25kcyBmcm9tIGxhc3QgZnJhbWUgdG8gdGhpcyBmcmFtZS5cbiAgICAgKiBPcHBvc2VkIHRvIHdoYXQgdGhlIHNjYWxhciB7QGxpbmsgUElYSS50aWNrZXIuVGlja2VyI2RlbHRhVGltZX1cbiAgICAgKiBpcyBiYXNlZCwgdGhpcyB2YWx1ZSBpcyBuZWl0aGVyIGNhcHBlZCBub3Igc2NhbGVkLlxuICAgICAqIElmIHRoZSBwbGF0Zm9ybSBzdXBwb3J0cyBET01IaWdoUmVzVGltZVN0YW1wLFxuICAgICAqIHRoaXMgdmFsdWUgd2lsbCBoYXZlIGEgcHJlY2lzaW9uIG9mIDEgwrVzLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7RE9NSGlnaFJlc1RpbWVTdGFtcHxudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMSAvIFRBUkdFVF9GUE1TXG4gICAgICovXG4gICAgdGhpcy5lbGFwc2VkTVMgPSAxIC8gQ09OU1QuVEFSR0VUX0ZQTVM7IC8vIGRlZmF1bHQgdG8gdGFyZ2V0IGZyYW1lIHRpbWVcblxuICAgIC8qKlxuICAgICAqIFRoZSBsYXN0IHRpbWUge0BsaW5rIFBJWEkudGlja2VyLlRpY2tlciN1cGRhdGV9IHdhcyBpbnZva2VkLlxuICAgICAqIFRoaXMgdmFsdWUgaXMgYWxzbyByZXNldCBpbnRlcm5hbGx5IG91dHNpZGUgb2YgaW52b2tpbmdcbiAgICAgKiB1cGRhdGUsIGJ1dCBvbmx5IHdoZW4gYSBuZXcgYW5pbWF0aW9uIGZyYW1lIGlzIHJlcXVlc3RlZC5cbiAgICAgKiBJZiB0aGUgcGxhdGZvcm0gc3VwcG9ydHMgRE9NSGlnaFJlc1RpbWVTdGFtcCxcbiAgICAgKiB0aGlzIHZhbHVlIHdpbGwgaGF2ZSBhIHByZWNpc2lvbiBvZiAxIMK1cy5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge0RPTUhpZ2hSZXNUaW1lU3RhbXB8bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDBcbiAgICAgKi9cbiAgICB0aGlzLmxhc3RUaW1lID0gMDtcblxuICAgIC8qKlxuICAgICAqIEZhY3RvciBvZiBjdXJyZW50IHtAbGluayBQSVhJLnRpY2tlci5UaWNrZXIjZGVsdGFUaW1lfS5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIC8vIFNjYWxlcyB0aWNrZXIuZGVsdGFUaW1lIHRvIHdoYXQgd291bGQgYmVcbiAgICAgKiAvLyB0aGUgZXF1aXZhbGVudCBvZiBhcHByb3hpbWF0ZWx5IDEyMCBGUFNcbiAgICAgKiB0aWNrZXIuc3BlZWQgPSAyO1xuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDFcbiAgICAgKi9cbiAgICB0aGlzLnNwZWVkID0gMTtcblxuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgb3Igbm90IHRoaXMgdGlja2VyIGhhcyBiZWVuIHN0YXJ0ZWQuXG4gICAgICogYHRydWVgIGlmIHtAbGluayBQSVhJLnRpY2tlci5UaWNrZXIjc3RhcnR9IGhhcyBiZWVuIGNhbGxlZC5cbiAgICAgKiBgZmFsc2VgIGlmIHtAbGluayBQSVhJLnRpY2tlci5UaWNrZXIjc3RvcH0gaGFzIGJlZW4gY2FsbGVkLlxuICAgICAqIFdoaWxlIGBmYWxzZWAsIHRoaXMgdmFsdWUgbWF5IGNoYW5nZSB0byBgdHJ1ZWAgaW4gdGhlXG4gICAgICogZXZlbnQgb2Yge0BsaW5rIFBJWEkudGlja2VyLlRpY2tlciNhdXRvU3RhcnR9IGJlaW5nIGB0cnVlYFxuICAgICAqIGFuZCBhIGxpc3RlbmVyIGlzIGFkZGVkLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgICAqL1xuICAgIHRoaXMuc3RhcnRlZCA9IGZhbHNlO1xufVxuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhUaWNrZXIucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogVGhlIGZyYW1lcyBwZXIgc2Vjb25kIGF0IHdoaWNoIHRoaXMgdGlja2VyIGlzIHJ1bm5pbmcuXG4gICAgICogVGhlIGRlZmF1bHQgaXMgYXBwcm94aW1hdGVseSA2MCBpbiBtb3N0IG1vZGVybiBicm93c2Vycy5cbiAgICAgKiAqKk5vdGU6KiogVGhpcyBkb2VzIG5vdCBmYWN0b3IgaW4gdGhlIHZhbHVlIG9mXG4gICAgICoge0BsaW5rIFBJWEkudGlja2VyLlRpY2tlciNzcGVlZH0sIHdoaWNoIGlzIHNwZWNpZmljXG4gICAgICogdG8gc2NhbGluZyB7QGxpbmsgUElYSS50aWNrZXIuVGlja2VyI2RlbHRhVGltZX0uXG4gICAgICpcbiAgICAgKiBAbWVtYmVyXG4gICAgICogQG1lbWJlcm9mIFBJWEkudGlja2VyLlRpY2tlciNcbiAgICAgKiBAcmVhZG9ubHlcbiAgICAgKi9cbiAgICBGUFM6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbigpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiAxMDAwIC8gdGhpcy5lbGFwc2VkTVM7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogTWFuYWdlcyB0aGUgbWF4aW11bSBhbW91bnQgb2YgbWlsbGlzZWNvbmRzIGFsbG93ZWQgdG9cbiAgICAgKiBlbGFwc2UgYmV0d2VlbiBpbnZva2luZyB7QGxpbmsgUElYSS50aWNrZXIuVGlja2VyI3VwZGF0ZX0uXG4gICAgICogVGhpcyB2YWx1ZSBpcyB1c2VkIHRvIGNhcCB7QGxpbmsgUElYSS50aWNrZXIuVGlja2VyI2RlbHRhVGltZX0sXG4gICAgICogYnV0IGRvZXMgbm90IGVmZmVjdCB0aGUgbWVhc3VyZWQgdmFsdWUgb2Yge0BsaW5rIFBJWEkudGlja2VyLlRpY2tlciNGUFN9LlxuICAgICAqIFdoZW4gc2V0dGluZyB0aGlzIHByb3BlcnR5IGl0IGlzIGNsYW1wZWQgdG8gYSB2YWx1ZSBiZXR3ZWVuXG4gICAgICogYDBgIGFuZCBgUElYSS5UQVJHRVRfRlBNUyAqIDEwMDBgLlxuICAgICAqXG4gICAgICogQG1lbWJlclxuICAgICAqIEBtZW1iZXJvZiBQSVhJLnRpY2tlci5UaWNrZXIjXG4gICAgICogQGRlZmF1bHQgMTBcbiAgICAgKi9cbiAgICBtaW5GUFM6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbigpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiAxMDAwIC8gdGhpcy5fbWF4RWxhcHNlZE1TO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uKGZwcylcbiAgICAgICAge1xuICAgICAgICAgICAgLy8gQ2xhbXA6IDAgdG8gVEFSR0VUX0ZQTVNcbiAgICAgICAgICAgIHZhciBtaW5GUE1TID0gTWF0aC5taW4oTWF0aC5tYXgoMCwgZnBzKSAvIDEwMDAsIENPTlNULlRBUkdFVF9GUE1TKTtcbiAgICAgICAgICAgIHRoaXMuX21heEVsYXBzZWRNUyA9IDEgLyBtaW5GUE1TO1xuICAgICAgICB9XG4gICAgfVxufSk7XG5cbi8qKlxuICogQ29uZGl0aW9uYWxseSByZXF1ZXN0cyBhIG5ldyBhbmltYXRpb24gZnJhbWUuXG4gKiBJZiBhIGZyYW1lIGhhcyBub3QgYWxyZWFkeSBiZWVuIHJlcXVlc3RlZCwgYW5kIGlmIHRoZSBpbnRlcm5hbFxuICogZW1pdHRlciBoYXMgbGlzdGVuZXJzLCBhIG5ldyBmcmFtZSBpcyByZXF1ZXN0ZWQuXG4gKlxuICogQHByaXZhdGVcbiAqL1xuVGlja2VyLnByb3RvdHlwZS5fcmVxdWVzdElmTmVlZGVkID0gZnVuY3Rpb24gX3JlcXVlc3RJZk5lZWRlZCgpXG57XG4gICAgaWYgKHRoaXMuX3JlcXVlc3RJZCA9PT0gbnVsbCAmJiB0aGlzLl9lbWl0dGVyLmxpc3RlbmVycyhUSUNLLCB0cnVlKSlcbiAgICB7XG4gICAgICAgIC8vIGVuc3VyZSBjYWxsYmFja3MgZ2V0IGNvcnJlY3QgZGVsdGFcbiAgICAgICAgdGhpcy5sYXN0VGltZSA9IHBlcmZvcm1hbmNlLm5vdygpO1xuICAgICAgICB0aGlzLl9yZXF1ZXN0SWQgPSByZXF1ZXN0QW5pbWF0aW9uRnJhbWUodGhpcy5fdGljayk7XG4gICAgfVxufTtcblxuLyoqXG4gKiBDb25kaXRpb25hbGx5IGNhbmNlbHMgYSBwZW5kaW5nIGFuaW1hdGlvbiBmcmFtZS5cbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5UaWNrZXIucHJvdG90eXBlLl9jYW5jZWxJZk5lZWRlZCA9IGZ1bmN0aW9uIF9jYW5jZWxJZk5lZWRlZCgpXG57XG4gICAgaWYgKHRoaXMuX3JlcXVlc3RJZCAhPT0gbnVsbClcbiAgICB7XG4gICAgICAgIGNhbmNlbEFuaW1hdGlvbkZyYW1lKHRoaXMuX3JlcXVlc3RJZCk7XG4gICAgICAgIHRoaXMuX3JlcXVlc3RJZCA9IG51bGw7XG4gICAgfVxufTtcblxuLyoqXG4gKiBDb25kaXRpb25hbGx5IHJlcXVlc3RzIGEgbmV3IGFuaW1hdGlvbiBmcmFtZS5cbiAqIElmIHRoZSB0aWNrZXIgaGFzIGJlZW4gc3RhcnRlZCBpdCBjaGVja3MgaWYgYSBmcmFtZSBoYXMgbm90IGFscmVhZHlcbiAqIGJlZW4gcmVxdWVzdGVkLCBhbmQgaWYgdGhlIGludGVybmFsIGVtaXR0ZXIgaGFzIGxpc3RlbmVycy4gSWYgdGhlc2VcbiAqIGNvbmRpdGlvbnMgYXJlIG1ldCwgYSBuZXcgZnJhbWUgaXMgcmVxdWVzdGVkLiBJZiB0aGUgdGlja2VyIGhhcyBub3RcbiAqIGJlZW4gc3RhcnRlZCwgYnV0IGF1dG9TdGFydCBpcyBgdHJ1ZWAsIHRoZW4gdGhlIHRpY2tlciBzdGFydHMgbm93LFxuICogYW5kIGNvbnRpbnVlcyB3aXRoIHRoZSBwcmV2aW91cyBjb25kaXRpb25zIHRvIHJlcXVlc3QgYSBuZXcgZnJhbWUuXG4gKlxuICogQHByaXZhdGVcbiAqL1xuVGlja2VyLnByb3RvdHlwZS5fc3RhcnRJZlBvc3NpYmxlID0gZnVuY3Rpb24gX3N0YXJ0SWZQb3NzaWJsZSgpXG57XG4gICAgaWYgKHRoaXMuc3RhcnRlZClcbiAgICB7XG4gICAgICAgIHRoaXMuX3JlcXVlc3RJZk5lZWRlZCgpO1xuICAgIH1cbiAgICBlbHNlIGlmICh0aGlzLmF1dG9TdGFydClcbiAgICB7XG4gICAgICAgIHRoaXMuc3RhcnQoKTtcbiAgICB9XG59O1xuXG4vKipcbiAqIENhbGxzIHtAbGluayBtb2R1bGU6ZXZlbnRlbWl0dGVyMy5FdmVudEVtaXR0ZXIjb259IGludGVybmFsbHkgZm9yIHRoZVxuICogaW50ZXJuYWwgJ3RpY2snIGV2ZW50LiBJdCBjaGVja3MgaWYgdGhlIGVtaXR0ZXIgaGFzIGxpc3RlbmVycyxcbiAqIGFuZCBpZiBzbyBpdCByZXF1ZXN0cyBhIG5ldyBhbmltYXRpb24gZnJhbWUgYXQgdGhpcyBwb2ludC5cbiAqXG4gKiBAcGFyYW0gZm4ge0Z1bmN0aW9ufSBUaGUgbGlzdGVuZXIgZnVuY3Rpb24gdG8gYmUgYWRkZWQgZm9yIHVwZGF0ZXNcbiAqIEBwYXJhbSBbY29udGV4dF0ge0Z1bmN0aW9ufSBUaGUgbGlzdGVuZXIgY29udGV4dFxuICogQHJldHVybnMge1BJWEkudGlja2VyLlRpY2tlcn0gdGhpc1xuICovXG5UaWNrZXIucHJvdG90eXBlLmFkZCA9IGZ1bmN0aW9uIGFkZChmbiwgY29udGV4dClcbntcbiAgICB0aGlzLl9lbWl0dGVyLm9uKFRJQ0ssIGZuLCBjb250ZXh0KTtcblxuICAgIHRoaXMuX3N0YXJ0SWZQb3NzaWJsZSgpO1xuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIENhbGxzIHtAbGluayBtb2R1bGU6ZXZlbnRlbWl0dGVyMy5FdmVudEVtaXR0ZXIjb25jZX0gaW50ZXJuYWxseSBmb3IgdGhlXG4gKiBpbnRlcm5hbCAndGljaycgZXZlbnQuIEl0IGNoZWNrcyBpZiB0aGUgZW1pdHRlciBoYXMgbGlzdGVuZXJzLFxuICogYW5kIGlmIHNvIGl0IHJlcXVlc3RzIGEgbmV3IGFuaW1hdGlvbiBmcmFtZSBhdCB0aGlzIHBvaW50LlxuICpcbiAqIEBwYXJhbSBmbiB7RnVuY3Rpb259IFRoZSBsaXN0ZW5lciBmdW5jdGlvbiB0byBiZSBhZGRlZCBmb3Igb25lIHVwZGF0ZVxuICogQHBhcmFtIFtjb250ZXh0XSB7RnVuY3Rpb259IFRoZSBsaXN0ZW5lciBjb250ZXh0XG4gKiBAcmV0dXJucyB7UElYSS50aWNrZXIuVGlja2VyfSB0aGlzXG4gKi9cblRpY2tlci5wcm90b3R5cGUuYWRkT25jZSA9IGZ1bmN0aW9uIGFkZE9uY2UoZm4sIGNvbnRleHQpXG57XG4gICAgdGhpcy5fZW1pdHRlci5vbmNlKFRJQ0ssIGZuLCBjb250ZXh0KTtcblxuICAgIHRoaXMuX3N0YXJ0SWZQb3NzaWJsZSgpO1xuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIENhbGxzIHtAbGluayBtb2R1bGU6ZXZlbnRlbWl0dGVyMy5FdmVudEVtaXR0ZXIjb2ZmfSBpbnRlcm5hbGx5IGZvciAndGljaycgZXZlbnQuXG4gKiBJdCBjaGVja3MgaWYgdGhlIGVtaXR0ZXIgaGFzIGxpc3RlbmVycyBmb3IgJ3RpY2snIGV2ZW50LlxuICogSWYgaXQgZG9lcywgdGhlbiBpdCBjYW5jZWxzIHRoZSBhbmltYXRpb24gZnJhbWUuXG4gKlxuICogQHBhcmFtIFtmbl0ge0Z1bmN0aW9ufSBUaGUgbGlzdGVuZXIgZnVuY3Rpb24gdG8gYmUgcmVtb3ZlZFxuICogQHBhcmFtIFtjb250ZXh0XSB7RnVuY3Rpb259IFRoZSBsaXN0ZW5lciBjb250ZXh0IHRvIGJlIHJlbW92ZWRcbiAqIEByZXR1cm5zIHtQSVhJLnRpY2tlci5UaWNrZXJ9IHRoaXNcbiAqL1xuVGlja2VyLnByb3RvdHlwZS5yZW1vdmUgPSBmdW5jdGlvbiByZW1vdmUoZm4sIGNvbnRleHQpXG57XG4gICAgdGhpcy5fZW1pdHRlci5vZmYoVElDSywgZm4sIGNvbnRleHQpO1xuXG4gICAgaWYgKCF0aGlzLl9lbWl0dGVyLmxpc3RlbmVycyhUSUNLLCB0cnVlKSlcbiAgICB7XG4gICAgICAgIHRoaXMuX2NhbmNlbElmTmVlZGVkKCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIFN0YXJ0cyB0aGUgdGlja2VyLiBJZiB0aGUgdGlja2VyIGhhcyBsaXN0ZW5lcnNcbiAqIGEgbmV3IGFuaW1hdGlvbiBmcmFtZSBpcyByZXF1ZXN0ZWQgYXQgdGhpcyBwb2ludC5cbiAqL1xuVGlja2VyLnByb3RvdHlwZS5zdGFydCA9IGZ1bmN0aW9uIHN0YXJ0KClcbntcbiAgICBpZiAoIXRoaXMuc3RhcnRlZClcbiAgICB7XG4gICAgICAgIHRoaXMuc3RhcnRlZCA9IHRydWU7XG4gICAgICAgIHRoaXMuX3JlcXVlc3RJZk5lZWRlZCgpO1xuICAgIH1cbn07XG5cbi8qKlxuICogU3RvcHMgdGhlIHRpY2tlci4gSWYgdGhlIHRpY2tlciBoYXMgcmVxdWVzdGVkXG4gKiBhbiBhbmltYXRpb24gZnJhbWUgaXQgaXMgY2FuY2VsZWQgYXQgdGhpcyBwb2ludC5cbiAqL1xuVGlja2VyLnByb3RvdHlwZS5zdG9wID0gZnVuY3Rpb24gc3RvcCgpXG57XG4gICAgaWYgKHRoaXMuc3RhcnRlZClcbiAgICB7XG4gICAgICAgIHRoaXMuc3RhcnRlZCA9IGZhbHNlO1xuICAgICAgICB0aGlzLl9jYW5jZWxJZk5lZWRlZCgpO1xuICAgIH1cbn07XG5cbi8qKlxuICogVHJpZ2dlcnMgYW4gdXBkYXRlLiBBbiB1cGRhdGUgZW50YWlscyBzZXR0aW5nIHRoZVxuICogY3VycmVudCB7QGxpbmsgUElYSS50aWNrZXIuVGlja2VyI2VsYXBzZWRNU30sXG4gKiB0aGUgY3VycmVudCB7QGxpbmsgUElYSS50aWNrZXIuVGlja2VyI2RlbHRhVGltZX0sXG4gKiBpbnZva2luZyBhbGwgbGlzdGVuZXJzIHdpdGggY3VycmVudCBkZWx0YVRpbWUsXG4gKiBhbmQgdGhlbiBmaW5hbGx5IHNldHRpbmcge0BsaW5rIFBJWEkudGlja2VyLlRpY2tlciNsYXN0VGltZX1cbiAqIHdpdGggdGhlIHZhbHVlIG9mIGN1cnJlbnRUaW1lIHRoYXQgd2FzIHByb3ZpZGVkLlxuICogVGhpcyBtZXRob2Qgd2lsbCBiZSBjYWxsZWQgYXV0b21hdGljYWxseSBieSBhbmltYXRpb25cbiAqIGZyYW1lIGNhbGxiYWNrcyBpZiB0aGUgdGlja2VyIGluc3RhbmNlIGhhcyBiZWVuIHN0YXJ0ZWRcbiAqIGFuZCBsaXN0ZW5lcnMgYXJlIGFkZGVkLlxuICpcbiAqIEBwYXJhbSBbY3VycmVudFRpbWU9cGVyZm9ybWFuY2Uubm93KCldIHtET01IaWdoUmVzVGltZVN0YW1wfG51bWJlcn0gdGhlIGN1cnJlbnQgdGltZSBvZiBleGVjdXRpb25cbiAqL1xuVGlja2VyLnByb3RvdHlwZS51cGRhdGUgPSBmdW5jdGlvbiB1cGRhdGUoY3VycmVudFRpbWUpXG57XG4gICAgdmFyIGVsYXBzZWRNUztcblxuICAgIC8vIEFsbG93IGNhbGxpbmcgdXBkYXRlIGRpcmVjdGx5IHdpdGggZGVmYXVsdCBjdXJyZW50VGltZS5cbiAgICBjdXJyZW50VGltZSA9IGN1cnJlbnRUaW1lIHx8IHBlcmZvcm1hbmNlLm5vdygpO1xuICAgIC8vIFNhdmUgdW5jYXBwZWQgZWxhcHNlZE1TIGZvciBtZWFzdXJlbWVudFxuICAgIGVsYXBzZWRNUyA9IHRoaXMuZWxhcHNlZE1TID0gY3VycmVudFRpbWUgLSB0aGlzLmxhc3RUaW1lO1xuXG4gICAgLy8gY2FwIHRoZSBtaWxsaXNlY29uZHMgZWxhcHNlZCB1c2VkIGZvciBkZWx0YVRpbWVcbiAgICBpZiAoZWxhcHNlZE1TID4gdGhpcy5fbWF4RWxhcHNlZE1TKVxuICAgIHtcbiAgICAgICAgZWxhcHNlZE1TID0gdGhpcy5fbWF4RWxhcHNlZE1TO1xuICAgIH1cblxuICAgIHRoaXMuZGVsdGFUaW1lID0gZWxhcHNlZE1TICogQ09OU1QuVEFSR0VUX0ZQTVMgKiB0aGlzLnNwZWVkO1xuXG4gICAgLy8gSW52b2tlIGxpc3RlbmVycyBhZGRlZCB0byBpbnRlcm5hbCBlbWl0dGVyXG4gICAgdGhpcy5fZW1pdHRlci5lbWl0KFRJQ0ssIHRoaXMuZGVsdGFUaW1lKTtcblxuICAgIHRoaXMubGFzdFRpbWUgPSBjdXJyZW50VGltZTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gVGlja2VyO1xuIiwidmFyIFRpY2tlciA9IHJlcXVpcmUoJy4vVGlja2VyJyk7XG5cbi8qKlxuICogVGhlIHNoYXJlZCB0aWNrZXIgaW5zdGFuY2UgdXNlZCBieSB7QGxpbmsgUElYSS5leHRyYXMuTW92aWVDbGlwfS5cbiAqIGFuZCBieSB7QGxpbmsgUElYSS5pbnRlcmFjdGlvbi5JbnRlcmFjdGlvbk1hbmFnZXJ9LlxuICogVGhlIHByb3BlcnR5IHtAbGluayBQSVhJLnRpY2tlci5UaWNrZXIjYXV0b1N0YXJ0fSBpcyBzZXQgdG8gYHRydWVgXG4gKiBmb3IgdGhpcyBpbnN0YW5jZS4gUGxlYXNlIGZvbGxvdyB0aGUgZXhhbXBsZXMgZm9yIHVzYWdlLCBpbmNsdWRpbmdcbiAqIGhvdyB0byBvcHQtb3V0IG9mIGF1dG8tc3RhcnRpbmcgdGhlIHNoYXJlZCB0aWNrZXIuXG4gKlxuICogQGV4YW1wbGVcbiAqIHZhciB0aWNrZXIgPSBQSVhJLnRpY2tlci5zaGFyZWQ7XG4gKiAvLyBTZXQgdGhpcyB0byBwcmV2ZW50IHN0YXJ0aW5nIHRoaXMgdGlja2VyIHdoZW4gbGlzdGVuZXJzIGFyZSBhZGRlZC5cbiAqIC8vIEJ5IGRlZmF1bHQgdGhpcyBpcyB0cnVlIG9ubHkgZm9yIHRoZSBQSVhJLnRpY2tlci5zaGFyZWQgaW5zdGFuY2UuXG4gKiB0aWNrZXIuYXV0b1N0YXJ0ID0gZmFsc2U7XG4gKiAvLyBGWUksIGNhbGwgdGhpcyB0byBlbnN1cmUgdGhlIHRpY2tlciBpcyBzdG9wcGVkLiBJdCBzaG91bGQgYmUgc3RvcHBlZFxuICogLy8gaWYgeW91IGhhdmUgbm90IGF0dGVtcHRlZCB0byByZW5kZXIgYW55dGhpbmcgeWV0LlxuICogdGlja2VyLnN0b3AoKTtcbiAqIC8vIENhbGwgdGhpcyB3aGVuIHlvdSBhcmUgcmVhZHkgZm9yIGEgcnVubmluZyBzaGFyZWQgdGlja2VyLlxuICogdGlja2VyLnN0YXJ0KCk7XG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIFlvdSBtYXkgdXNlIHRoZSBzaGFyZWQgdGlja2VyIHRvIHJlbmRlci4uLlxuICogdmFyIHJlbmRlcmVyID0gUElYSS5hdXRvRGV0ZWN0UmVuZGVyZXIoODAwLCA2MDApO1xuICogdmFyIHN0YWdlID0gbmV3IFBJWEkuQ29udGFpbmVyKCk7XG4gKiB2YXIgaW50ZXJhY3Rpb25NYW5hZ2VyID0gUElYSS5pbnRlcmFjdGlvbi5JbnRlcmFjdGlvbk1hbmFnZXIocmVuZGVyZXIpO1xuICogZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChyZW5kZXJlci52aWV3KTtcbiAqIHRpY2tlci5hZGQoZnVuY3Rpb24gKHRpbWUpIHtcbiAqICAgICByZW5kZXJlci5yZW5kZXIoc3RhZ2UpO1xuICogfSk7XG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIE9yIHlvdSBjYW4ganVzdCB1cGRhdGUgaXQgbWFudWFsbHkuXG4gKiB0aWNrZXIuYXV0b1N0YXJ0ID0gZmFsc2U7XG4gKiB0aWNrZXIuc3RvcCgpO1xuICogZnVuY3Rpb24gYW5pbWF0ZSh0aW1lKSB7XG4gKiAgICAgdGlja2VyLnVwZGF0ZSh0aW1lKTtcbiAqICAgICByZW5kZXJlci5yZW5kZXIoc3RhZ2UpO1xuICogICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZShhbmltYXRlKTtcbiAqIH1cbiAqIGFuaW1hdGUocGVyZm9ybWFuY2Uubm93KCkpO1xuICpcbiAqIEB0eXBlIHtQSVhJLnRpY2tlci5UaWNrZXJ9XG4gKiBAbWVtYmVyb2YgUElYSS50aWNrZXJcbiAqL1xudmFyIHNoYXJlZCA9IG5ldyBUaWNrZXIoKTtcbnNoYXJlZC5hdXRvU3RhcnQgPSB0cnVlO1xuXG4vKipcbiAqIEBuYW1lc3BhY2UgUElYSS50aWNrZXJcbiAqL1xubW9kdWxlLmV4cG9ydHMgPSB7XG4gICAgc2hhcmVkOiBzaGFyZWQsXG4gICAgVGlja2VyOiBUaWNrZXJcbn07XG4iLCIvKipcbiAqIEdlbmVyaWMgTWFzayBTdGFjayBkYXRhIHN0cnVjdHVyZVxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICovXG5cbnZhciBHTF9NQVAgPSB7fTtcblxuXG52YXIgY3JlYXRlSW5kaWNlc0ZvclF1YWRzID0gZnVuY3Rpb24gKHNpemUpXG57XG4gICAgLy8gdGhlIHRvdGFsIG51bWJlciBvZiBpbmRpY2VzIGluIG91ciBhcnJheSwgdGhlcmUgYXJlIDYgcG9pbnRzIHBlciBxdWFkLlxuICAgXG4gICAgdmFyIHRvdGFsSW5kaWNlcyA9IHNpemUgKiA2O1xuXG4gICAgdmFyIGluZGljZXMgPSBuZXcgVWludDE2QXJyYXkodG90YWxJbmRpY2VzKTtcblxuXHQvLyBmaWxsIHRoZSBpbmRpY2VzIHdpdGggdGhlIHF1YWRzIHRvIGRyYXdcbiAgICBmb3IgKHZhciBpPTAsIGo9MDsgaSA8IHRvdGFsSW5kaWNlczsgaSArPSA2LCBqICs9IDQpXG4gICAge1xuICAgICAgICBpbmRpY2VzW2kgKyAwXSA9IGogKyAwO1xuICAgICAgICBpbmRpY2VzW2kgKyAxXSA9IGogKyAxO1xuICAgICAgICBpbmRpY2VzW2kgKyAyXSA9IGogKyAyO1xuICAgICAgICBpbmRpY2VzW2kgKyAzXSA9IGogKyAwO1xuICAgICAgICBpbmRpY2VzW2kgKyA0XSA9IGogKyAyO1xuICAgICAgICBpbmRpY2VzW2kgKyA1XSA9IGogKyAzO1xuICAgIH1cblxuICAgIHJldHVybiBpbmRpY2VzO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBjcmVhdGVJbmRpY2VzRm9yUXVhZHM7IiwidmFyIENPTlNUID0gcmVxdWlyZSgnLi4vY29uc3QnKTtcblxuLyoqXG4gKiBAbmFtZXNwYWNlIFBJWEkudXRpbHNcbiAqL1xudmFyIHV0aWxzID0gbW9kdWxlLmV4cG9ydHMgPSB7XG4gICAgX3VpZDogMCxcbiAgICBfc2FpZEhlbGxvOiBmYWxzZSxcblxuICAgIEV2ZW50RW1pdHRlcjogICByZXF1aXJlKCdldmVudGVtaXR0ZXIzJyksXG4gICAgcGx1Z2luVGFyZ2V0OiAgIHJlcXVpcmUoJy4vcGx1Z2luVGFyZ2V0JyksXG4gICAgYXN5bmM6ICAgICAgICAgIHJlcXVpcmUoJ2FzeW5jJyksXG5cbiAgICAvKipcbiAgICAgKiBHZXRzIHRoZSBuZXh0IHVuaXF1ZSBpZGVudGlmaWVyXG4gICAgICpcbiAgICAgKiBAcmV0dXJuIHtudW1iZXJ9IFRoZSBuZXh0IHVuaXF1ZSBpZGVudGlmaWVyIHRvIHVzZS5cbiAgICAgKi9cbiAgICB1aWQ6IGZ1bmN0aW9uICgpXG4gICAge1xuICAgICAgICByZXR1cm4gKyt1dGlscy5fdWlkO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBDb252ZXJ0cyBhIGhleCBjb2xvciBudW1iZXIgdG8gYW4gW1IsIEcsIEJdIGFycmF5XG4gICAgICpcbiAgICAgKiBAcGFyYW0gaGV4IHtudW1iZXJ9XG4gICAgICogQHBhcmFtICB7bnVtYmVyW119IFtvdXQ9W11dXG4gICAgICogQHJldHVybiB7bnVtYmVyW119IEFuIGFycmF5IHJlcHJlc2VudGluZyB0aGUgW1IsIEcsIEJdIG9mIHRoZSBjb2xvci5cbiAgICAgKi9cbiAgICBoZXgycmdiOiBmdW5jdGlvbiAoaGV4LCBvdXQpXG4gICAge1xuICAgICAgICBvdXQgPSBvdXQgfHwgW107XG5cbiAgICAgICAgb3V0WzBdID0gKGhleCA+PiAxNiAmIDB4RkYpIC8gMjU1O1xuICAgICAgICBvdXRbMV0gPSAoaGV4ID4+IDggJiAweEZGKSAvIDI1NTtcbiAgICAgICAgb3V0WzJdID0gKGhleCAmIDB4RkYpIC8gMjU1O1xuXG4gICAgICAgIHJldHVybiBvdXQ7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIENvbnZlcnRzIGEgaGV4IGNvbG9yIG51bWJlciB0byBhIHN0cmluZy5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBoZXgge251bWJlcn1cbiAgICAgKiBAcmV0dXJuIHtzdHJpbmd9IFRoZSBzdHJpbmcgY29sb3IuXG4gICAgICovXG4gICAgaGV4MnN0cmluZzogZnVuY3Rpb24gKGhleClcbiAgICB7XG4gICAgICAgIGhleCA9IGhleC50b1N0cmluZygxNik7XG4gICAgICAgIGhleCA9ICcwMDAwMDAnLnN1YnN0cigwLCA2IC0gaGV4Lmxlbmd0aCkgKyBoZXg7XG5cbiAgICAgICAgcmV0dXJuICcjJyArIGhleDtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQ29udmVydHMgYSBjb2xvciBhcyBhbiBbUiwgRywgQl0gYXJyYXkgdG8gYSBoZXggbnVtYmVyXG4gICAgICpcbiAgICAgKiBAcGFyYW0gcmdiIHtudW1iZXJbXX1cbiAgICAgKiBAcmV0dXJuIHtudW1iZXJ9IFRoZSBjb2xvciBudW1iZXJcbiAgICAgKi9cbiAgICByZ2IyaGV4OiBmdW5jdGlvbiAocmdiKVxuICAgIHtcbiAgICAgICAgcmV0dXJuICgocmdiWzBdKjI1NSA8PCAxNikgKyAocmdiWzFdKjI1NSA8PCA4KSArIHJnYlsyXSoyNTUpO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBDaGVja3Mgd2hldGhlciB0aGUgQ2FudmFzIEJsZW5kTW9kZXMgYXJlIHN1cHBvcnRlZCBieSB0aGUgY3VycmVudCBicm93c2VyXG4gICAgICpcbiAgICAgKiBAcmV0dXJuIHtib29sZWFufSB3aGV0aGVyIHRoZXkgYXJlIHN1cHBvcnRlZFxuICAgICAqL1xuICAgIGNhblVzZU5ld0NhbnZhc0JsZW5kTW9kZXM6IGZ1bmN0aW9uICgpXG4gICAge1xuICAgICAgICBpZiAodHlwZW9mIGRvY3VtZW50ID09PSAndW5kZWZpbmVkJylcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIHBuZ0hlYWQgPSAnZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFBUUFBQUFCQVFNQUFBREQ4cDJPQUFBQUExQk1WRVgvJztcbiAgICAgICAgdmFyIHBuZ0VuZCA9ICdBQUFBQ2tsRVFWUUkxMk5nQUFBQUFnQUI0aUc4TXdBQUFBQkpSVTVFcmtKZ2dnPT0nO1xuXG4gICAgICAgIHZhciBtYWdlbnRhID0gbmV3IEltYWdlKCk7XG4gICAgICAgIG1hZ2VudGEuc3JjID0gcG5nSGVhZCArICdBUDgwNE9hNicgKyBwbmdFbmQ7XG5cbiAgICAgICAgdmFyIHllbGxvdyA9IG5ldyBJbWFnZSgpO1xuICAgICAgICB5ZWxsb3cuc3JjID0gcG5nSGVhZCArICcvd0NLeHZSRicgKyBwbmdFbmQ7XG5cbiAgICAgICAgdmFyIGNhbnZhcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NhbnZhcycpO1xuICAgICAgICBjYW52YXMud2lkdGggPSA2O1xuICAgICAgICBjYW52YXMuaGVpZ2h0ID0gMTtcblxuICAgICAgICB2YXIgY29udGV4dCA9IGNhbnZhcy5nZXRDb250ZXh0KCcyZCcpO1xuICAgICAgICBjb250ZXh0Lmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbiA9ICdtdWx0aXBseSc7XG4gICAgICAgIGNvbnRleHQuZHJhd0ltYWdlKG1hZ2VudGEsIDAsIDApO1xuICAgICAgICBjb250ZXh0LmRyYXdJbWFnZSh5ZWxsb3csIDIsIDApO1xuXG4gICAgICAgIHZhciBkYXRhID0gY29udGV4dC5nZXRJbWFnZURhdGEoMiwwLDEsMSkuZGF0YTtcblxuICAgICAgICByZXR1cm4gKGRhdGFbMF0gPT09IDI1NSAmJiBkYXRhWzFdID09PSAwICYmIGRhdGFbMl0gPT09IDApO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBHaXZlbiBhIG51bWJlciwgdGhpcyBmdW5jdGlvbiByZXR1cm5zIHRoZSBjbG9zZXN0IG51bWJlciB0aGF0IGlzIGEgcG93ZXIgb2YgdHdvXG4gICAgICogdGhpcyBmdW5jdGlvbiBpcyB0YWtlbiBmcm9tIFN0YXJsaW5nIEZyYW1ld29yayBhcyBpdHMgcHJldHR5IG5lYXQgOylcbiAgICAgKlxuICAgICAqIEBwYXJhbSBudW1iZXIge251bWJlcn1cbiAgICAgKiBAcmV0dXJuIHtudW1iZXJ9IHRoZSBjbG9zZXN0IG51bWJlciB0aGF0IGlzIGEgcG93ZXIgb2YgdHdvXG4gICAgICovXG4gICAgZ2V0TmV4dFBvd2VyT2ZUd286IGZ1bmN0aW9uIChudW1iZXIpXG4gICAge1xuICAgICAgICAvLyBzZWU6IGh0dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvUG93ZXJfb2ZfdHdvI0Zhc3RfYWxnb3JpdGhtX3RvX2NoZWNrX2lmX2FfcG9zaXRpdmVfbnVtYmVyX2lzX2FfcG93ZXJfb2ZfdHdvXG4gICAgICAgIGlmIChudW1iZXIgPiAwICYmIChudW1iZXIgJiAobnVtYmVyIC0gMSkpID09PSAwKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gbnVtYmVyO1xuICAgICAgICB9XG4gICAgICAgIGVsc2VcbiAgICAgICAge1xuICAgICAgICAgICAgdmFyIHJlc3VsdCA9IDE7XG5cbiAgICAgICAgICAgIHdoaWxlIChyZXN1bHQgPCBudW1iZXIpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgcmVzdWx0IDw8PSAxO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIGNoZWNrcyBpZiB0aGUgZ2l2ZW4gd2lkdGggYW5kIGhlaWdodCBtYWtlIGEgcG93ZXIgb2YgdHdvIHJlY3RhbmdsZVxuICAgICAqXG4gICAgICogQHBhcmFtIHdpZHRoIHtudW1iZXJ9XG4gICAgICogQHBhcmFtIGhlaWdodCB7bnVtYmVyfVxuICAgICAqIEByZXR1cm4ge2Jvb2xlYW59XG4gICAgICovXG4gICAgaXNQb3dlck9mVHdvOiBmdW5jdGlvbiAod2lkdGgsIGhlaWdodClcbiAgICB7XG4gICAgICAgIHJldHVybiAod2lkdGggPiAwICYmICh3aWR0aCAmICh3aWR0aCAtIDEpKSA9PT0gMCAmJiBoZWlnaHQgPiAwICYmIChoZWlnaHQgJiAoaGVpZ2h0IC0gMSkpID09PSAwKTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogZ2V0IHRoZSByZXNvbHV0aW9uIG9mIGFuIGFzc2V0IGJ5IGxvb2tpbmcgZm9yIHRoZSBwcmVmaXhcbiAgICAgKiB1c2VkIGJ5IHNwcml0ZXNoZWV0cyBhbmQgaW1hZ2UgdXJsc1xuICAgICAqXG4gICAgICogQHBhcmFtIHVybCB7c3RyaW5nfSB0aGUgaW1hZ2UgcGF0aFxuICAgICAqIEByZXR1cm4ge251bWJlcn1cbiAgICAgKi9cbiAgICBnZXRSZXNvbHV0aW9uT2ZVcmw6IGZ1bmN0aW9uICh1cmwpXG4gICAge1xuICAgICAgICB2YXIgcmVzb2x1dGlvbiA9IENPTlNULlJFVElOQV9QUkVGSVguZXhlYyh1cmwpO1xuXG4gICAgICAgIGlmIChyZXNvbHV0aW9uKVxuICAgICAgICB7XG4gICAgICAgICAgIHJldHVybiBwYXJzZUZsb2F0KHJlc29sdXRpb25bMV0pO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIDE7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIExvZ3Mgb3V0IHRoZSB2ZXJzaW9uIGFuZCByZW5kZXJlciBpbmZvcm1hdGlvbiBmb3IgdGhpcyBydW5uaW5nIGluc3RhbmNlIG9mIFBJWEkuXG4gICAgICogSWYgeW91IGRvbid0IHdhbnQgdG8gc2VlIHRoaXMgbWVzc2FnZSB5b3UgY2FuIHNldCBgUElYSS51dGlscy5fc2FpZEhlbGxvID0gdHJ1ZTtgXG4gICAgICogc28gdGhlIGxpYnJhcnkgdGhpbmtzIGl0IGFscmVhZHkgc2FpZCBpdC4gS2VlcCBpbiBtaW5kIHRoYXQgZG9pbmcgdGhhdCB3aWxsIGZvcmV2ZXJcbiAgICAgKiBtYWtlcyB5b3UgYSBqZXJrIGZhY2UuXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gdHlwZSAtIFRoZSBzdHJpbmcgcmVuZGVyZXIgdHlwZSB0byBsb2cuXG4gICAgICogQGNvbnN0YW50XG4gICAgICogQHN0YXRpY1xuICAgICAqL1xuICAgIHNheUhlbGxvOiBmdW5jdGlvbiAodHlwZSlcbiAgICB7XG4gICAgICAgIGlmICh1dGlscy5fc2FpZEhlbGxvKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAobmF2aWdhdG9yLnVzZXJBZ2VudC50b0xvd2VyQ2FzZSgpLmluZGV4T2YoJ2Nocm9tZScpID4gLTEpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHZhciBhcmdzID0gW1xuICAgICAgICAgICAgICAgICdcXG4gJWMgJWMgJWMgUGl4aS5qcyAnICsgQ09OU1QuVkVSU0lPTiArICcgLSDinLAgJyArIHR5cGUgKyAnIOKcsCAgJWMgJyArICcgJWMgJyArICcgaHR0cDovL3d3dy5waXhpanMuY29tLyAgJWMgJWMg4pmlJWPimaUlY+KZpSBcXG5cXG4nLFxuICAgICAgICAgICAgICAgICdiYWNrZ3JvdW5kOiAjZmY2NmE1OyBwYWRkaW5nOjVweCAwOycsXG4gICAgICAgICAgICAgICAgJ2JhY2tncm91bmQ6ICNmZjY2YTU7IHBhZGRpbmc6NXB4IDA7JyxcbiAgICAgICAgICAgICAgICAnY29sb3I6ICNmZjY2YTU7IGJhY2tncm91bmQ6ICMwMzAzMDc7IHBhZGRpbmc6NXB4IDA7JyxcbiAgICAgICAgICAgICAgICAnYmFja2dyb3VuZDogI2ZmNjZhNTsgcGFkZGluZzo1cHggMDsnLFxuICAgICAgICAgICAgICAgICdiYWNrZ3JvdW5kOiAjZmZjM2RjOyBwYWRkaW5nOjVweCAwOycsXG4gICAgICAgICAgICAgICAgJ2JhY2tncm91bmQ6ICNmZjY2YTU7IHBhZGRpbmc6NXB4IDA7JyxcbiAgICAgICAgICAgICAgICAnY29sb3I6ICNmZjI0MjQ7IGJhY2tncm91bmQ6ICNmZmY7IHBhZGRpbmc6NXB4IDA7JyxcbiAgICAgICAgICAgICAgICAnY29sb3I6ICNmZjI0MjQ7IGJhY2tncm91bmQ6ICNmZmY7IHBhZGRpbmc6NXB4IDA7JyxcbiAgICAgICAgICAgICAgICAnY29sb3I6ICNmZjI0MjQ7IGJhY2tncm91bmQ6ICNmZmY7IHBhZGRpbmc6NXB4IDA7J1xuICAgICAgICAgICAgXTtcblxuICAgICAgICAgICAgd2luZG93LmNvbnNvbGUubG9nLmFwcGx5KGNvbnNvbGUsIGFyZ3MpOyAvL2pzaGludCBpZ25vcmU6bGluZVxuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHdpbmRvdy5jb25zb2xlKVxuICAgICAgICB7XG4gICAgICAgICAgICB3aW5kb3cuY29uc29sZS5sb2coJ1BpeGkuanMgJyArIENPTlNULlZFUlNJT04gKyAnIC0gJyArIHR5cGUgKyAnIC0gaHR0cDovL3d3dy5waXhpanMuY29tLycpOyAvL2pzaGludCBpZ25vcmU6bGluZVxuICAgICAgICB9XG5cbiAgICAgICAgdXRpbHMuX3NhaWRIZWxsbyA9IHRydWU7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIEhlbHBlciBmb3IgY2hlY2tpbmcgZm9yIHdlYmdsIHN1cHBvcnRcbiAgICAgKlxuICAgICAqIEByZXR1cm4ge2Jvb2xlYW59XG4gICAgICovXG4gICAgaXNXZWJHTFN1cHBvcnRlZDogZnVuY3Rpb24gKClcbiAgICB7XG4gICAgICAgIHZhciBjb250ZXh0T3B0aW9ucyA9IHsgc3RlbmNpbDogdHJ1ZSB9O1xuICAgICAgICB0cnlcbiAgICAgICAge1xuICAgICAgICAgICAgaWYgKCF3aW5kb3cuV2ViR0xSZW5kZXJpbmdDb250ZXh0KVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdmFyIGNhbnZhcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NhbnZhcycpLFxuICAgICAgICAgICAgICAgIGdsID0gY2FudmFzLmdldENvbnRleHQoJ3dlYmdsJywgY29udGV4dE9wdGlvbnMpIHx8IGNhbnZhcy5nZXRDb250ZXh0KCdleHBlcmltZW50YWwtd2ViZ2wnLCBjb250ZXh0T3B0aW9ucyk7XG5cbiAgICAgICAgICAgIHJldHVybiAhIShnbCAmJiBnbC5nZXRDb250ZXh0QXR0cmlidXRlcygpLnN0ZW5jaWwpO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyBzaWduIG9mIG51bWJlclxuICAgICAqXG4gICAgICogQHBhcmFtIG4ge251bWJlcn1cbiAgICAgKiBAcmV0dXJucyB7bnVtYmVyfSAwIGlmIG4gaXMgMCwgLTEgaWYgbiBpcyBuZWdhdGl2ZSwgMSBpZiBuIGkgcG9zaXRpdmVcbiAgICAgKi9cbiAgICBzaWduOiBmdW5jdGlvbiAobilcbiAgICB7XG4gICAgICAgIHJldHVybiBuID8gKG4gPCAwID8gLTEgOiAxKSA6IDA7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIHJlbW92ZUl0ZW1zXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge2FycmF5fSBhcnIgVGhlIHRhcmdldCBhcnJheVxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBzdGFydElkeCBUaGUgaW5kZXggdG8gYmVnaW4gcmVtb3ZpbmcgZnJvbSAoaW5jbHVzaXZlKVxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSByZW1vdmVDb3VudCBIb3cgbWFueSBpdGVtcyB0byByZW1vdmVcbiAgICAgKi9cbiAgICByZW1vdmVJdGVtczogZnVuY3Rpb24gKGFyciwgc3RhcnRJZHgsIHJlbW92ZUNvdW50KVxuICAgIHtcbiAgICAgICAgdmFyIGxlbmd0aCA9IGFyci5sZW5ndGg7XG5cbiAgICAgICAgaWYgKHN0YXJ0SWR4ID49IGxlbmd0aCB8fCByZW1vdmVDb3VudCA9PT0gMClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgcmVtb3ZlQ291bnQgPSAoc3RhcnRJZHgrcmVtb3ZlQ291bnQgPiBsZW5ndGggPyBsZW5ndGgtc3RhcnRJZHggOiByZW1vdmVDb3VudCk7XG4gICAgICAgIGZvciAodmFyIGkgPSBzdGFydElkeCwgbGVuID0gbGVuZ3RoLXJlbW92ZUNvdW50OyBpIDwgbGVuOyArK2kpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGFycltpXSA9IGFycltpICsgcmVtb3ZlQ291bnRdO1xuICAgICAgICB9XG5cbiAgICAgICAgYXJyLmxlbmd0aCA9IGxlbjtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQHRvZG8gRGVzY3JpYmUgcHJvcGVydHkgdXNhZ2VcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIFRleHR1cmVDYWNoZToge30sXG5cbiAgICAvKipcbiAgICAgKiBAdG9kbyBEZXNjcmliZSBwcm9wZXJ0eSB1c2FnZVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgQmFzZVRleHR1cmVDYWNoZToge31cbn07XG4iLCIvKipcbiAqIE1peGlucyBmdW5jdGlvbmFsaXR5IHRvIG1ha2UgYW4gb2JqZWN0IGhhdmUgXCJwbHVnaW5zXCIuXG4gKlxuICogQG1peGluXG4gKiBAbWVtYmVyb2YgUElYSS51dGlsc1xuICogQHBhcmFtIG9iaiB7b2JqZWN0fSBUaGUgb2JqZWN0IHRvIG1peCBpbnRvLlxuICogQGV4YW1wbGVcbiAqICAgICAgZnVuY3Rpb24gTXlPYmplY3QoKSB7fVxuICpcbiAqICAgICAgcGx1Z2luVGFyZ2V0Lm1peGluKE15T2JqZWN0KTtcbiAqL1xuZnVuY3Rpb24gcGx1Z2luVGFyZ2V0KG9iailcbntcbiAgICBvYmouX19wbHVnaW5zID0ge307XG5cbiAgICAvKipcbiAgICAgKiBBZGRzIGEgcGx1Z2luIHRvIGFuIG9iamVjdFxuICAgICAqXG4gICAgICogQHBhcmFtIHBsdWdpbk5hbWUge3N0cmluZ30gVGhlIGV2ZW50cyB0aGF0IHNob3VsZCBiZSBsaXN0ZWQuXG4gICAgICogQHBhcmFtIGN0b3Ige0Z1bmN0aW9ufSBUaGUgY29uc3RydWN0b3IgZnVuY3Rpb24gZm9yIHRoZSBwbHVnaW4uXG4gICAgICovXG4gICAgb2JqLnJlZ2lzdGVyUGx1Z2luID0gZnVuY3Rpb24gKHBsdWdpbk5hbWUsIGN0b3IpXG4gICAge1xuICAgICAgICBvYmouX19wbHVnaW5zW3BsdWdpbk5hbWVdID0gY3RvcjtcbiAgICB9O1xuXG4gICAgLyoqXG4gICAgICogSW5zdGFudGlhdGVzIGFsbCB0aGUgcGx1Z2lucyBvZiB0aGlzIG9iamVjdFxuICAgICAqXG4gICAgICovXG4gICAgb2JqLnByb3RvdHlwZS5pbml0UGx1Z2lucyA9IGZ1bmN0aW9uICgpXG4gICAge1xuICAgICAgICB0aGlzLnBsdWdpbnMgPSB0aGlzLnBsdWdpbnMgfHwge307XG5cbiAgICAgICAgZm9yICh2YXIgbyBpbiBvYmouX19wbHVnaW5zKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnBsdWdpbnNbb10gPSBuZXcgKG9iai5fX3BsdWdpbnNbb10pKHRoaXMpO1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIC8qKlxuICAgICAqIFJlbW92ZXMgYWxsIHRoZSBwbHVnaW5zIG9mIHRoaXMgb2JqZWN0XG4gICAgICpcbiAgICAgKi9cbiAgICBvYmoucHJvdG90eXBlLmRlc3Ryb3lQbHVnaW5zID0gZnVuY3Rpb24gKClcbiAgICB7XG4gICAgICAgIGZvciAodmFyIG8gaW4gdGhpcy5wbHVnaW5zKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnBsdWdpbnNbb10uZGVzdHJveSgpO1xuICAgICAgICAgICAgdGhpcy5wbHVnaW5zW29dID0gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMucGx1Z2lucyA9IG51bGw7XG4gICAgfTtcbn1cblxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgICAvKipcbiAgICAgKiBNaXhlcyBpbiB0aGUgcHJvcGVydGllcyBvZiB0aGUgcGx1Z2luVGFyZ2V0IGludG8gYW5vdGhlciBvYmplY3RcbiAgICAgKlxuICAgICAqIEBwYXJhbSBvYmplY3Qge29iamVjdH0gVGhlIG9iaiB0byBtaXggaW50b1xuICAgICAqL1xuICAgIG1peGluOiBmdW5jdGlvbiBtaXhpbihvYmopXG4gICAge1xuICAgICAgICBwbHVnaW5UYXJnZXQob2JqKTtcbiAgICB9XG59O1xuIiwiLypnbG9iYWwgY29uc29sZSAqL1xudmFyIGNvcmUgPSByZXF1aXJlKCcuL2NvcmUnKSxcbiAgICBtZXNoID0gcmVxdWlyZSgnLi9tZXNoJyksXG4gICAgZXh0cmFzID0gcmVxdWlyZSgnLi9leHRyYXMnKSxcbiAgICBmaWx0ZXJzID0gcmVxdWlyZSgnLi9maWx0ZXJzJyk7XG5cbi8qKlxuICogQGNsYXNzXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgU3ByaXRlQmF0Y2hcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAc2VlIFBJWEkuUGFydGljbGVDb250YWluZXJcbiAqIEB0aHJvd3Mge1JlZmVyZW5jZUVycm9yfSBTcHJpdGVCYXRjaCBkb2VzIG5vdCBleGlzdCBhbnkgbW9yZSwgcGxlYXNlIHVzZSB0aGUgbmV3IFBhcnRpY2xlQ29udGFpbmVyIGluc3RlYWQuXG4gKiBAZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDMuMC4wXG4gKi9cbmNvcmUuU3ByaXRlQmF0Y2ggPSBmdW5jdGlvbigpXG57XG4gICAgdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKCdTcHJpdGVCYXRjaCBkb2VzIG5vdCBleGlzdCBhbnkgbW9yZSwgcGxlYXNlIHVzZSB0aGUgbmV3IFBhcnRpY2xlQ29udGFpbmVyIGluc3RlYWQuJyk7XG59O1xuXG4vKipcbiAqIEBjbGFzc1xuICogQHByaXZhdGVcbiAqIEBuYW1lIEFzc2V0TG9hZGVyXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHNlZSBQSVhJLmxvYWRlcnMuTG9hZGVyXG4gKiBAdGhyb3dzIHtSZWZlcmVuY2VFcnJvcn0gVGhlIGxvYWRlciBzeXN0ZW0gd2FzIG92ZXJoYXVsZWQgaW4gcGl4aSB2MywgcGxlYXNlIHNlZSB0aGUgbmV3IFBJWEkubG9hZGVycy5Mb2FkZXIgY2xhc3MuXG4gKiBAZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDMuMC4wXG4gKi9cbmNvcmUuQXNzZXRMb2FkZXIgPSBmdW5jdGlvbigpXG57XG4gICAgdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKCdUaGUgbG9hZGVyIHN5c3RlbSB3YXMgb3ZlcmhhdWxlZCBpbiBwaXhpIHYzLCBwbGVhc2Ugc2VlIHRoZSBuZXcgUElYSS5sb2FkZXJzLkxvYWRlciBjbGFzcy4nKTtcbn07XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGNvcmUsIHtcblxuICAgIC8qKlxuICAgICAqIEBjbGFzc1xuICAgICAqIEBwcml2YXRlXG4gICAgICogQG5hbWUgU3RhZ2VcbiAgICAgKiBAbWVtYmVyb2YgUElYSVxuICAgICAqIEBzZWUgUElYSS5Db250YWluZXJcbiAgICAgKiBAZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDMuMC4wXG4gICAgICovXG4gICAgU3RhZ2U6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbigpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignWW91IGRvIG5vdCBuZWVkIHRvIHVzZSBhIFBJWEkgU3RhZ2UgYW55IG1vcmUsIHlvdSBjYW4gc2ltcGx5IHJlbmRlciBhbnkgY29udGFpbmVyLicpO1xuICAgICAgICAgICAgcmV0dXJuIGNvcmUuQ29udGFpbmVyO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIEBjbGFzc1xuICAgICAqIEBwcml2YXRlXG4gICAgICogQG5hbWUgRGlzcGxheU9iamVjdENvbnRhaW5lclxuICAgICAqIEBtZW1iZXJvZiBQSVhJXG4gICAgICogQHNlZSBQSVhJLkNvbnRhaW5lclxuICAgICAqIEBkZXByZWNhdGVkIHNpbmNlIHZlcnNpb24gMy4wLjBcbiAgICAgKi9cbiAgICBEaXNwbGF5T2JqZWN0Q29udGFpbmVyOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24oKVxuICAgICAgICB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ0Rpc3BsYXlPYmplY3RDb250YWluZXIgaGFzIGJlZW4gc2hvcnRlbmVkIHRvIENvbnRhaW5lciwgcGxlYXNlIHVzZSBDb250YWluZXIgZnJvbSBub3cgb24uJyk7XG4gICAgICAgICAgICByZXR1cm4gY29yZS5Db250YWluZXI7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQGNsYXNzXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAbmFtZSBTdHJpcFxuICAgICAqIEBtZW1iZXJvZiBQSVhJXG4gICAgICogQHNlZSBQSVhJLm1lc2guTWVzaFxuICAgICAqIEBkZXByZWNhdGVkIHNpbmNlIHZlcnNpb24gMy4wLjBcbiAgICAgKi9cbiAgICBTdHJpcDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uKClcbiAgICAgICAge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKCdUaGUgU3RyaXAgY2xhc3MgaGFzIGJlZW4gcmVuYW1lZCB0byBNZXNoIGFuZCBtb3ZlZCB0byBtZXNoLk1lc2gsIHBsZWFzZSB1c2UgbWVzaC5NZXNoIGZyb20gbm93IG9uLicpO1xuICAgICAgICAgICAgcmV0dXJuIG1lc2guTWVzaDtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBAY2xhc3NcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBuYW1lIFJvcGVcbiAgICAgKiBAbWVtYmVyb2YgUElYSVxuICAgICAqIEBzZWUgUElYSS5tZXNoLlJvcGVcbiAgICAgKiBAZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDMuMC4wXG4gICAgICovXG4gICAgUm9wZToge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uKClcbiAgICAgICAge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKCdUaGUgUm9wZSBjbGFzcyBoYXMgYmVlbiBtb3ZlZCB0byBtZXNoLlJvcGUsIHBsZWFzZSB1c2UgbWVzaC5Sb3BlIGZyb20gbm93IG9uLicpO1xuICAgICAgICAgICAgcmV0dXJuIG1lc2guUm9wZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBAY2xhc3NcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBuYW1lIE1vdmllQ2xpcFxuICAgICAqIEBtZW1iZXJvZiBQSVhJXG4gICAgICogQHNlZSBQSVhJLmV4dHJhcy5Nb3ZpZUNsaXBcbiAgICAgKiBAZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDMuMC4wXG4gICAgICovXG4gICAgTW92aWVDbGlwOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24oKVxuICAgICAgICB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ1RoZSBNb3ZpZUNsaXAgY2xhc3MgaGFzIGJlZW4gbW92ZWQgdG8gZXh0cmFzLk1vdmllQ2xpcCwgcGxlYXNlIHVzZSBleHRyYXMuTW92aWVDbGlwIGZyb20gbm93IG9uLicpO1xuICAgICAgICAgICAgcmV0dXJuIGV4dHJhcy5Nb3ZpZUNsaXA7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQGNsYXNzXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAbmFtZSBUaWxpbmdTcHJpdGVcbiAgICAgKiBAbWVtYmVyb2YgUElYSVxuICAgICAqIEBzZWUgUElYSS5leHRyYXMuVGlsaW5nU3ByaXRlXG4gICAgICogQGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiAzLjAuMFxuICAgICAqL1xuICAgIFRpbGluZ1Nwcml0ZToge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uKClcbiAgICAgICAge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKCdUaGUgVGlsaW5nU3ByaXRlIGNsYXNzIGhhcyBiZWVuIG1vdmVkIHRvIGV4dHJhcy5UaWxpbmdTcHJpdGUsIHBsZWFzZSB1c2UgZXh0cmFzLlRpbGluZ1Nwcml0ZSBmcm9tIG5vdyBvbi4nKTtcbiAgICAgICAgICAgIHJldHVybiBleHRyYXMuVGlsaW5nU3ByaXRlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIEBjbGFzc1xuICAgICAqIEBwcml2YXRlXG4gICAgICogQG5hbWUgQml0bWFwVGV4dFxuICAgICAqIEBtZW1iZXJvZiBQSVhJXG4gICAgICogQHNlZSBQSVhJLmV4dHJhcy5CaXRtYXBUZXh0XG4gICAgICogQGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiAzLjAuMFxuICAgICAqL1xuICAgIEJpdG1hcFRleHQ6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbigpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignVGhlIEJpdG1hcFRleHQgY2xhc3MgaGFzIGJlZW4gbW92ZWQgdG8gZXh0cmFzLkJpdG1hcFRleHQsIHBsZWFzZSB1c2UgZXh0cmFzLkJpdG1hcFRleHQgZnJvbSBub3cgb24uJyk7XG4gICAgICAgICAgICByZXR1cm4gZXh0cmFzLkJpdG1hcFRleHQ7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQGNsYXNzXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAbmFtZSBibGVuZE1vZGVzXG4gICAgICogQG1lbWJlcm9mIFBJWElcbiAgICAgKiBAc2VlIFBJWEkuQkxFTkRfTU9ERVNcbiAgICAgKiBAZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDMuMC4wXG4gICAgICovXG4gICAgYmxlbmRNb2Rlczoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uKClcbiAgICAgICAge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKCdUaGUgYmxlbmRNb2RlcyBoYXMgYmVlbiBtb3ZlZCB0byBCTEVORF9NT0RFUywgcGxlYXNlIHVzZSBCTEVORF9NT0RFUyBmcm9tIG5vdyBvbi4nKTtcbiAgICAgICAgICAgIHJldHVybiBjb3JlLkJMRU5EX01PREVTO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIEBjbGFzc1xuICAgICAqIEBwcml2YXRlXG4gICAgICogQG5hbWUgc2NhbGVNb2Rlc1xuICAgICAqIEBtZW1iZXJvZiBQSVhJXG4gICAgICogQHNlZSBQSVhJLlNDQUxFX01PREVTXG4gICAgICogQGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiAzLjAuMFxuICAgICAqL1xuICAgIHNjYWxlTW9kZXM6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbigpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignVGhlIHNjYWxlTW9kZXMgaGFzIGJlZW4gbW92ZWQgdG8gU0NBTEVfTU9ERVMsIHBsZWFzZSB1c2UgU0NBTEVfTU9ERVMgZnJvbSBub3cgb24uJyk7XG4gICAgICAgICAgICByZXR1cm4gY29yZS5TQ0FMRV9NT0RFUztcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBAY2xhc3NcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBuYW1lIEJhc2VUZXh0dXJlQ2FjaGVcbiAgICAgKiBAbWVtYmVyb2YgUElYSVxuICAgICAqIEBzZWUgUElYSS51dGlscy5CYXNlVGV4dHVyZUNhY2hlXG4gICAgICogQGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiAzLjAuMFxuICAgICAqL1xuICAgIEJhc2VUZXh0dXJlQ2FjaGU6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ1RoZSBCYXNlVGV4dHVyZUNhY2hlIGNsYXNzIGhhcyBiZWVuIG1vdmVkIHRvIHV0aWxzLkJhc2VUZXh0dXJlQ2FjaGUsIHBsZWFzZSB1c2UgdXRpbHMuQmFzZVRleHR1cmVDYWNoZSBmcm9tIG5vdyBvbi4nKTtcbiAgICAgICAgICAgIHJldHVybiBjb3JlLnV0aWxzLkJhc2VUZXh0dXJlQ2FjaGU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQGNsYXNzXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAbmFtZSBUZXh0dXJlQ2FjaGVcbiAgICAgKiBAbWVtYmVyb2YgUElYSVxuICAgICAqIEBzZWUgUElYSS51dGlscy5UZXh0dXJlQ2FjaGVcbiAgICAgKiBAZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDMuMC4wXG4gICAgICovXG4gICAgVGV4dHVyZUNhY2hlOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKCdUaGUgVGV4dHVyZUNhY2hlIGNsYXNzIGhhcyBiZWVuIG1vdmVkIHRvIHV0aWxzLlRleHR1cmVDYWNoZSwgcGxlYXNlIHVzZSB1dGlscy5UZXh0dXJlQ2FjaGUgZnJvbSBub3cgb24uJyk7XG4gICAgICAgICAgICByZXR1cm4gY29yZS51dGlscy5UZXh0dXJlQ2FjaGU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQG5hbWVzcGFjZVxuICAgICAqIEBwcml2YXRlXG4gICAgICogQG5hbWUgbWF0aFxuICAgICAqIEBtZW1iZXJvZiBQSVhJXG4gICAgICogQHNlZSBQSVhJXG4gICAgICogQGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiAzLjAuNlxuICAgICAqL1xuICAgIG1hdGg6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ1RoZSBtYXRoIG5hbWVzcGFjZSBpcyBkZXByZWNhdGVkLCBwbGVhc2UgYWNjZXNzIG1lbWJlcnMgYWxyZWFkeSBhY2Nlc3NpYmxlIG9uIFBJWEkuJyk7XG4gICAgICAgICAgICByZXR1cm4gY29yZTtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuXG4vKipcbiAqIEBtZXRob2RcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBQSVhJLlNwcml0ZSNzZXRUZXh0dXJlXG4gKiBAc2VlIFBJWEkuU3ByaXRlI3RleHR1cmVcbiAqIEBkZXByZWNhdGVkIHNpbmNlIHZlcnNpb24gMy4wLjBcbiAqL1xuY29yZS5TcHJpdGUucHJvdG90eXBlLnNldFRleHR1cmUgPSBmdW5jdGlvbih0ZXh0dXJlKVxue1xuICAgIHRoaXMudGV4dHVyZSA9IHRleHR1cmU7XG4gICAgY29uc29sZS53YXJuKCdzZXRUZXh0dXJlIGlzIG5vdyBkZXByZWNhdGVkLCBwbGVhc2UgdXNlIHRoZSB0ZXh0dXJlIHByb3BlcnR5LCBlLmcgOiBzcHJpdGUudGV4dHVyZSA9IHRleHR1cmU7Jyk7XG59O1xuXG4vKipcbiAqIEBtZXRob2RcbiAqIEBuYW1lIFBJWEkuZXh0cmFzLkJpdG1hcFRleHQjc2V0VGV4dFxuICogQHNlZSBQSVhJLmV4dHJhcy5CaXRtYXBUZXh0I3RleHRcbiAqIEBkZXByZWNhdGVkIHNpbmNlIHZlcnNpb24gMy4wLjBcbiAqL1xuZXh0cmFzLkJpdG1hcFRleHQucHJvdG90eXBlLnNldFRleHQgPSBmdW5jdGlvbih0ZXh0KVxue1xuICAgIHRoaXMudGV4dCA9IHRleHQ7XG4gICAgY29uc29sZS53YXJuKCdzZXRUZXh0IGlzIG5vdyBkZXByZWNhdGVkLCBwbGVhc2UgdXNlIHRoZSB0ZXh0IHByb3BlcnR5LCBlLmcgOiBteUJpdG1hcFRleHQudGV4dCA9IFxcJ215IHRleHRcXCc7Jyk7XG59O1xuXG4vKipcbiAqIEBtZXRob2RcbiAqIEBuYW1lIFBJWEkuVGV4dCNzZXRUZXh0XG4gKiBAc2VlIFBJWEkuVGV4dCN0ZXh0XG4gKiBAZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDMuMC4wXG4gKi9cbmNvcmUuVGV4dC5wcm90b3R5cGUuc2V0VGV4dCA9IGZ1bmN0aW9uKHRleHQpXG57XG4gICAgdGhpcy50ZXh0ID0gdGV4dDtcbiAgICBjb25zb2xlLndhcm4oJ3NldFRleHQgaXMgbm93IGRlcHJlY2F0ZWQsIHBsZWFzZSB1c2UgdGhlIHRleHQgcHJvcGVydHksIGUuZyA6IG15VGV4dC50ZXh0ID0gXFwnbXkgdGV4dFxcJzsnKTtcbn07XG5cbi8qKlxuICogQG1ldGhvZFxuICogQG5hbWUgUElYSS5UZXh0I3NldFN0eWxlXG4gKiBAc2VlIFBJWEkuVGV4dCNzdHlsZVxuICogQGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiAzLjAuMFxuICovXG5jb3JlLlRleHQucHJvdG90eXBlLnNldFN0eWxlID0gZnVuY3Rpb24oc3R5bGUpXG57XG4gICAgdGhpcy5zdHlsZSA9IHN0eWxlO1xuICAgIGNvbnNvbGUud2Fybignc2V0U3R5bGUgaXMgbm93IGRlcHJlY2F0ZWQsIHBsZWFzZSB1c2UgdGhlIHN0eWxlIHByb3BlcnR5LCBlLmcgOiBteVRleHQuc3R5bGUgPSBzdHlsZTsnKTtcbn07XG5cbi8qKlxuICogQG1ldGhvZFxuICogQG5hbWUgUElYSS5UZXh0dXJlI3NldEZyYW1lXG4gKiBAc2VlIFBJWEkuVGV4dHVyZSNzZXRGcmFtZVxuICogQGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiAzLjAuMFxuICovXG5jb3JlLlRleHR1cmUucHJvdG90eXBlLnNldEZyYW1lID0gZnVuY3Rpb24oZnJhbWUpXG57XG4gICAgdGhpcy5mcmFtZSA9IGZyYW1lO1xuICAgIGNvbnNvbGUud2Fybignc2V0RnJhbWUgaXMgbm93IGRlcHJlY2F0ZWQsIHBsZWFzZSB1c2UgdGhlIGZyYW1lIHByb3BlcnR5LCBlLmcgOiBteVRleHR1cmUuZnJhbWUgPSBmcmFtZTsnKTtcbn07XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGZpbHRlcnMsIHtcblxuICAgIC8qKlxuICAgICAqIEBjbGFzc1xuICAgICAqIEBwcml2YXRlXG4gICAgICogQG5hbWUgUElYSS5maWx0ZXJzLkFic3RyYWN0RmlsdGVyXG4gICAgICogQHNlZSBQSVhJLkFic3RyYWN0RmlsdGVyXG4gICAgICogQGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiAzLjAuNlxuICAgICAqL1xuICAgIEFic3RyYWN0RmlsdGVyOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24oKVxuICAgICAgICB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ2ZpbHRlcnMuQWJzdHJhY3RGaWx0ZXIgaXMgYW4gdW5kb2N1bWVudGVkIGFsaWFzLCBwbGVhc2UgdXNlIEFic3RyYWN0RmlsdGVyIGZyb20gbm93IG9uLicpO1xuICAgICAgICAgICAgcmV0dXJuIGNvcmUuQWJzdHJhY3RGaWx0ZXI7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQGNsYXNzXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAbmFtZSBQSVhJLmZpbHRlcnMuRlhBQUZpbHRlclxuICAgICAqIEBzZWUgUElYSS5GWEFBRmlsdGVyXG4gICAgICogQGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiAzLjAuNlxuICAgICAqL1xuICAgIEZYQUFGaWx0ZXI6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbigpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignZmlsdGVycy5GWEFBRmlsdGVyIGlzIGFuIHVuZG9jdW1lbnRlZCBhbGlhcywgcGxlYXNlIHVzZSBGWEFBRmlsdGVyIGZyb20gbm93IG9uLicpO1xuICAgICAgICAgICAgcmV0dXJuIGNvcmUuRlhBQUZpbHRlcjtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBAY2xhc3NcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBuYW1lIFBJWEkuZmlsdGVycy5TcHJpdGVNYXNrRmlsdGVyXG4gICAgICogQHNlZSBQSVhJLlNwcml0ZU1hc2tGaWx0ZXJcbiAgICAgKiBAZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDMuMC42XG4gICAgICovXG4gICAgU3ByaXRlTWFza0ZpbHRlcjoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uKClcbiAgICAgICAge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKCdmaWx0ZXJzLlNwcml0ZU1hc2tGaWx0ZXIgaXMgYW4gdW5kb2N1bWVudGVkIGFsaWFzLCBwbGVhc2UgdXNlIFNwcml0ZU1hc2tGaWx0ZXIgZnJvbSBub3cgb24uJyk7XG4gICAgICAgICAgICByZXR1cm4gY29yZS5TcHJpdGVNYXNrRmlsdGVyO1xuICAgICAgICB9XG4gICAgfVxufSk7XG5cbi8qKlxuICogQG1ldGhvZFxuICogQG5hbWUgUElYSS51dGlscy51dWlkXG4gKiBAc2VlIFBJWEkudXRpbHMudWlkXG4gKiBAZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDMuMC42XG4gKi9cbmNvcmUudXRpbHMudXVpZCA9IGZ1bmN0aW9uICgpXG57XG4gICAgY29uc29sZS53YXJuKCd1dGlscy51dWlkKCkgaXMgZGVwcmVjYXRlZCwgcGxlYXNlIHVzZSB1dGlscy51aWQoKSBmcm9tIG5vdyBvbi4nKTtcbiAgICByZXR1cm4gY29yZS51dGlscy51aWQoKTtcbn07XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uL2NvcmUnKTtcblxuLyoqXG4gKiBBIEJpdG1hcFRleHQgb2JqZWN0IHdpbGwgY3JlYXRlIGEgbGluZSBvciBtdWx0aXBsZSBsaW5lcyBvZiB0ZXh0IHVzaW5nIGJpdG1hcCBmb250LiBUb1xuICogc3BsaXQgYSBsaW5lIHlvdSBjYW4gdXNlICdcXG4nLCAnXFxyJyBvciAnXFxyXFxuJyBpbiB5b3VyIHN0cmluZy4gWW91IGNhbiBnZW5lcmF0ZSB0aGUgZm50IGZpbGVzIHVzaW5nOlxuICpcbiAqIEEgQml0bWFwVGV4dCBjYW4gb25seSBiZSBjcmVhdGVkIHdoZW4gdGhlIGZvbnQgaXMgbG9hZGVkXG4gKlxuICogYGBganNcbiAqIC8vIGluIHRoaXMgY2FzZSB0aGUgZm9udCBpcyBpbiBhIGZpbGUgY2FsbGVkICdkZXN5cmVsLmZudCdcbiAqIHZhciBiaXRtYXBUZXh0ID0gbmV3IFBJWEkuZXh0cmFzLkJpdG1hcFRleHQoXCJ0ZXh0IHVzaW5nIGEgZmFuY3kgZm9udCFcIiwge2ZvbnQ6IFwiMzVweCBEZXN5cmVsXCIsIGFsaWduOiBcInJpZ2h0XCJ9KTtcbiAqIGBgYFxuICpcbiAqXG4gKiBodHRwOi8vd3d3LmFuZ2VsY29kZS5jb20vcHJvZHVjdHMvYm1mb250LyBmb3Igd2luZG93cyBvclxuICogaHR0cDovL3d3dy5ibWdseXBoLmNvbS8gZm9yIG1hYy5cbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQ29udGFpbmVyXG4gKiBAbWVtYmVyb2YgUElYSS5leHRyYXNcbiAqIEBwYXJhbSB0ZXh0IHtzdHJpbmd9IFRoZSBjb3B5IHRoYXQgeW91IHdvdWxkIGxpa2UgdGhlIHRleHQgdG8gZGlzcGxheVxuICogQHBhcmFtIHN0eWxlIHtvYmplY3R9IFRoZSBzdHlsZSBwYXJhbWV0ZXJzXG4gKiBAcGFyYW0gc3R5bGUuZm9udCB7c3RyaW5nfG9iamVjdH0gVGhlIGZvbnQgZGVzY3JpcHRvciBmb3IgdGhlIG9iamVjdCwgY2FuIGJlIHBhc3NlZCBhcyBhIHN0cmluZyBvZiBmb3JtXG4gKiAgICAgIFwiMjRweCBGb250TmFtZVwiIG9yIFwiRm9udE5hbWVcIiBvciBhcyBhbiBvYmplY3Qgd2l0aCBleHBsaWNpdCBuYW1lL3NpemUgcHJvcGVydGllcy5cbiAqIEBwYXJhbSBbc3R5bGUuZm9udC5uYW1lXSB7c3RyaW5nfSBUaGUgYml0bWFwIGZvbnQgaWRcbiAqIEBwYXJhbSBbc3R5bGUuZm9udC5zaXplXSB7bnVtYmVyfSBUaGUgc2l6ZSBvZiB0aGUgZm9udCBpbiBwaXhlbHMsIGUuZy4gMjRcbiAqIEBwYXJhbSBbc3R5bGUuYWxpZ249J2xlZnQnXSB7c3RyaW5nfSBBbGlnbm1lbnQgZm9yIG11bHRpbGluZSB0ZXh0ICgnbGVmdCcsICdjZW50ZXInIG9yICdyaWdodCcpLCBkb2VzIG5vdCBhZmZlY3RcbiAqICAgICAgc2luZ2xlIGxpbmUgdGV4dFxuICogQHBhcmFtIFtzdHlsZS50aW50PTB4RkZGRkZGXSB7bnVtYmVyfSBUaGUgdGludCBjb2xvclxuICovXG5mdW5jdGlvbiBCaXRtYXBUZXh0KHRleHQsIHN0eWxlKVxue1xuICAgIGNvcmUuQ29udGFpbmVyLmNhbGwodGhpcyk7XG5cbiAgICBzdHlsZSA9IHN0eWxlIHx8IHt9O1xuXG4gICAgLyoqXG4gICAgICogVGhlIHdpZHRoIG9mIHRoZSBvdmVyYWxsIHRleHQsIGRpZmZlcmVudCBmcm9tIGZvbnRTaXplLFxuICAgICAqIHdoaWNoIGlzIGRlZmluZWQgaW4gdGhlIHN0eWxlIG9iamVjdFxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEByZWFkT25seVxuICAgICAqL1xuICAgIHRoaXMudGV4dFdpZHRoID0gMDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBoZWlnaHQgb2YgdGhlIG92ZXJhbGwgdGV4dCwgZGlmZmVyZW50IGZyb20gZm9udFNpemUsXG4gICAgICogd2hpY2ggaXMgZGVmaW5lZCBpbiB0aGUgc3R5bGUgb2JqZWN0XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQHJlYWRPbmx5XG4gICAgICovXG4gICAgdGhpcy50ZXh0SGVpZ2h0ID0gMDtcblxuICAgIC8qKlxuICAgICAqIFByaXZhdGUgdHJhY2tlciBmb3IgdGhlIGxldHRlciBzcHJpdGUgcG9vbC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuU3ByaXRlW119XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9nbHlwaHMgPSBbXTtcblxuICAgIC8qKlxuICAgICAqIFByaXZhdGUgdHJhY2tlciBmb3IgdGhlIGN1cnJlbnQgc3R5bGUuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtvYmplY3R9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9mb250ID0ge1xuICAgICAgICB0aW50OiBzdHlsZS50aW50ICE9PSB1bmRlZmluZWQgPyBzdHlsZS50aW50IDogMHhGRkZGRkYsXG4gICAgICAgIGFsaWduOiBzdHlsZS5hbGlnbiB8fCAnbGVmdCcsXG4gICAgICAgIG5hbWU6IG51bGwsXG4gICAgICAgIHNpemU6IDBcbiAgICB9O1xuXG4gICAgLyoqXG4gICAgICogUHJpdmF0ZSB0cmFja2VyIGZvciB0aGUgY3VycmVudCBmb250LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7b2JqZWN0fVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5mb250ID0gc3R5bGUuZm9udDsgLy8gcnVuIGZvbnQgc2V0dGVyXG5cbiAgICAvKipcbiAgICAgKiBQcml2YXRlIHRyYWNrZXIgZm9yIHRoZSBjdXJyZW50IHRleHQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtzdHJpbmd9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl90ZXh0ID0gdGV4dDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBtYXggd2lkdGggb2YgdGhpcyBiaXRtYXAgdGV4dCBpbiBwaXhlbHMuIElmIHRoZSB0ZXh0IHByb3ZpZGVkIGlzIGxvbmdlciB0aGFuIHRoZSB2YWx1ZSBwcm92aWRlZCwgbGluZSBicmVha3Mgd2lsbCBiZSBhdXRvbWF0aWNhbGx5IGluc2VydGVkIGluIHRoZSBsYXN0IHdoaXRlc3BhY2UuXG4gICAgICogRGlzYWJsZSBieSBzZXR0aW5nIHZhbHVlIHRvIDBcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLm1heFdpZHRoID0gMDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBtYXggbGluZSBoZWlnaHQuIFRoaXMgaXMgdXNlZnVsIHdoZW4gdHJ5aW5nIHRvIHVzZSB0aGUgdG90YWwgaGVpZ2h0IG9mIHRoZSBUZXh0LCBpZTogd2hlbiB0cnlpbmcgdG8gdmVydGljYWxseSBhbGlnbi5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLm1heExpbmVIZWlnaHQgPSAwO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGRpcnR5IHN0YXRlIG9mIHRoaXMgb2JqZWN0LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKi9cbiAgICB0aGlzLmRpcnR5ID0gZmFsc2U7XG5cbiAgICB0aGlzLnVwZGF0ZVRleHQoKTtcbn1cblxuLy8gY29uc3RydWN0b3JcbkJpdG1hcFRleHQucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShjb3JlLkNvbnRhaW5lci5wcm90b3R5cGUpO1xuQml0bWFwVGV4dC5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBCaXRtYXBUZXh0O1xubW9kdWxlLmV4cG9ydHMgPSBCaXRtYXBUZXh0O1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhCaXRtYXBUZXh0LnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFRoZSB0aW50IG9mIHRoZSBCaXRtYXBUZXh0IG9iamVjdFxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmV4dHJhcy5CaXRtYXBUZXh0I1xuICAgICAqL1xuICAgIHRpbnQ6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fZm9udC50aW50O1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5fZm9udC50aW50ID0gKHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicgJiYgdmFsdWUgPj0gMCkgPyB2YWx1ZSA6IDB4RkZGRkZGO1xuXG4gICAgICAgICAgICB0aGlzLmRpcnR5ID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBUaGUgYWxpZ25tZW50IG9mIHRoZSBCaXRtYXBUZXh0IG9iamVjdFxuICAgICAqXG4gICAgICogQG1lbWJlciB7c3RyaW5nfVxuICAgICAqIEBkZWZhdWx0ICdsZWZ0J1xuICAgICAqIEBtZW1iZXJvZiBQSVhJLmV4dHJhcy5CaXRtYXBUZXh0I1xuICAgICAqL1xuICAgIGFsaWduOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2ZvbnQuYWxpZ247XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLl9mb250LmFsaWduID0gdmFsdWUgfHwgJ2xlZnQnO1xuXG4gICAgICAgICAgICB0aGlzLmRpcnR5ID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBUaGUgZm9udCBkZXNjcmlwdG9yIG9mIHRoZSBCaXRtYXBUZXh0IG9iamVjdFxuICAgICAqXG4gICAgICogQG1lbWJlciB7Rm9udH1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5leHRyYXMuQml0bWFwVGV4dCNcbiAgICAgKi9cbiAgICBmb250OiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2ZvbnQ7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICBpZiAoIXZhbHVlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgICAgIHZhbHVlID0gdmFsdWUuc3BsaXQoJyAnKTtcblxuICAgICAgICAgICAgICAgIHRoaXMuX2ZvbnQubmFtZSA9IHZhbHVlLmxlbmd0aCA9PT0gMSA/IHZhbHVlWzBdIDogdmFsdWUuc2xpY2UoMSkuam9pbignICcpO1xuICAgICAgICAgICAgICAgIHRoaXMuX2ZvbnQuc2l6ZSA9IHZhbHVlLmxlbmd0aCA+PSAyID8gcGFyc2VJbnQodmFsdWVbMF0sIDEwKSA6IEJpdG1hcFRleHQuZm9udHNbdGhpcy5fZm9udC5uYW1lXS5zaXplO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fZm9udC5uYW1lID0gdmFsdWUubmFtZTtcbiAgICAgICAgICAgICAgICB0aGlzLl9mb250LnNpemUgPSB0eXBlb2YgdmFsdWUuc2l6ZSA9PT0gJ251bWJlcicgPyB2YWx1ZS5zaXplIDogcGFyc2VJbnQodmFsdWUuc2l6ZSwgMTApO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLmRpcnR5ID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBUaGUgdGV4dCBvZiB0aGUgQml0bWFwVGV4dCBvYmplY3RcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge3N0cmluZ31cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5leHRyYXMuQml0bWFwVGV4dCNcbiAgICAgKi9cbiAgICB0ZXh0OiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3RleHQ7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB2YWx1ZSA9IHZhbHVlLnRvU3RyaW5nKCkgfHwgJyAnO1xuICAgICAgICAgICAgaWYgKHRoaXMuX3RleHQgPT09IHZhbHVlKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuX3RleHQgPSB2YWx1ZTtcbiAgICAgICAgICAgIHRoaXMuZGlydHkgPSB0cnVlO1xuICAgICAgICB9XG4gICAgfVxufSk7XG5cbi8qKlxuICogUmVuZGVycyB0ZXh0IGFuZCB1cGRhdGVzIGl0IHdoZW4gbmVlZGVkXG4gKlxuICogQHByaXZhdGVcbiAqL1xuQml0bWFwVGV4dC5wcm90b3R5cGUudXBkYXRlVGV4dCA9IGZ1bmN0aW9uICgpXG57XG4gICAgdmFyIGRhdGEgPSBCaXRtYXBUZXh0LmZvbnRzW3RoaXMuX2ZvbnQubmFtZV07XG4gICAgdmFyIHBvcyA9IG5ldyBjb3JlLlBvaW50KCk7XG4gICAgdmFyIHByZXZDaGFyQ29kZSA9IG51bGw7XG4gICAgdmFyIGNoYXJzID0gW107XG4gICAgdmFyIGxhc3RMaW5lV2lkdGggPSAwO1xuICAgIHZhciBtYXhMaW5lV2lkdGggPSAwO1xuICAgIHZhciBsaW5lV2lkdGhzID0gW107XG4gICAgdmFyIGxpbmUgPSAwO1xuICAgIHZhciBzY2FsZSA9IHRoaXMuX2ZvbnQuc2l6ZSAvIGRhdGEuc2l6ZTtcbiAgICB2YXIgbGFzdFNwYWNlID0gLTE7XG4gICAgdmFyIG1heExpbmVIZWlnaHQgPSAwO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLnRleHQubGVuZ3RoOyBpKyspXG4gICAge1xuICAgICAgICB2YXIgY2hhckNvZGUgPSB0aGlzLnRleHQuY2hhckNvZGVBdChpKTtcbiAgICAgICAgbGFzdFNwYWNlID0gLyhcXHMpLy50ZXN0KHRoaXMudGV4dC5jaGFyQXQoaSkpID8gaSA6IGxhc3RTcGFjZTtcblxuICAgICAgICBpZiAoLyg/OlxcclxcbnxcXHJ8XFxuKS8udGVzdCh0aGlzLnRleHQuY2hhckF0KGkpKSlcbiAgICAgICAge1xuICAgICAgICAgICAgbGluZVdpZHRocy5wdXNoKGxhc3RMaW5lV2lkdGgpO1xuICAgICAgICAgICAgbWF4TGluZVdpZHRoID0gTWF0aC5tYXgobWF4TGluZVdpZHRoLCBsYXN0TGluZVdpZHRoKTtcbiAgICAgICAgICAgIGxpbmUrKztcblxuICAgICAgICAgICAgcG9zLnggPSAwO1xuICAgICAgICAgICAgcG9zLnkgKz0gZGF0YS5saW5lSGVpZ2h0O1xuICAgICAgICAgICAgcHJldkNoYXJDb2RlID0gbnVsbDtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGxhc3RTcGFjZSAhPT0gLTEgJiYgdGhpcy5tYXhXaWR0aCA+IDAgJiYgcG9zLnggKiBzY2FsZSA+IHRoaXMubWF4V2lkdGgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNvcmUudXRpbHMucmVtb3ZlSXRlbXMoY2hhcnMsIGxhc3RTcGFjZSwgaSAtIGxhc3RTcGFjZSk7XG4gICAgICAgICAgICBpID0gbGFzdFNwYWNlO1xuICAgICAgICAgICAgbGFzdFNwYWNlID0gLTE7XG5cbiAgICAgICAgICAgIGxpbmVXaWR0aHMucHVzaChsYXN0TGluZVdpZHRoKTtcbiAgICAgICAgICAgIG1heExpbmVXaWR0aCA9IE1hdGgubWF4KG1heExpbmVXaWR0aCwgbGFzdExpbmVXaWR0aCk7XG4gICAgICAgICAgICBsaW5lKys7XG5cbiAgICAgICAgICAgIHBvcy54ID0gMDtcbiAgICAgICAgICAgIHBvcy55ICs9IGRhdGEubGluZUhlaWdodDtcbiAgICAgICAgICAgIHByZXZDaGFyQ29kZSA9IG51bGw7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBjaGFyRGF0YSA9IGRhdGEuY2hhcnNbY2hhckNvZGVdO1xuXG4gICAgICAgIGlmICghY2hhckRhdGEpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHByZXZDaGFyQ29kZSAmJiBjaGFyRGF0YS5rZXJuaW5nW3ByZXZDaGFyQ29kZV0pXG4gICAgICAgIHtcbiAgICAgICAgICAgIHBvcy54ICs9IGNoYXJEYXRhLmtlcm5pbmdbcHJldkNoYXJDb2RlXTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNoYXJzLnB1c2goe3RleHR1cmU6Y2hhckRhdGEudGV4dHVyZSwgbGluZTogbGluZSwgY2hhckNvZGU6IGNoYXJDb2RlLCBwb3NpdGlvbjogbmV3IGNvcmUuUG9pbnQocG9zLnggKyBjaGFyRGF0YS54T2Zmc2V0LCBwb3MueSArIGNoYXJEYXRhLnlPZmZzZXQpfSk7XG4gICAgICAgIGxhc3RMaW5lV2lkdGggPSBwb3MueCArIChjaGFyRGF0YS50ZXh0dXJlLndpZHRoICsgY2hhckRhdGEueE9mZnNldCk7XG4gICAgICAgIHBvcy54ICs9IGNoYXJEYXRhLnhBZHZhbmNlO1xuICAgICAgICBtYXhMaW5lSGVpZ2h0ID0gTWF0aC5tYXgobWF4TGluZUhlaWdodCwgKGNoYXJEYXRhLnlPZmZzZXQgKyBjaGFyRGF0YS50ZXh0dXJlLmhlaWdodCkpO1xuICAgICAgICBwcmV2Q2hhckNvZGUgPSBjaGFyQ29kZTtcbiAgICB9XG5cbiAgICBsaW5lV2lkdGhzLnB1c2gobGFzdExpbmVXaWR0aCk7XG4gICAgbWF4TGluZVdpZHRoID0gTWF0aC5tYXgobWF4TGluZVdpZHRoLCBsYXN0TGluZVdpZHRoKTtcblxuICAgIHZhciBsaW5lQWxpZ25PZmZzZXRzID0gW107XG5cbiAgICBmb3IgKGkgPSAwOyBpIDw9IGxpbmU7IGkrKylcbiAgICB7XG4gICAgICAgIHZhciBhbGlnbk9mZnNldCA9IDA7XG5cbiAgICAgICAgaWYgKHRoaXMuX2ZvbnQuYWxpZ24gPT09ICdyaWdodCcpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGFsaWduT2Zmc2V0ID0gbWF4TGluZVdpZHRoIC0gbGluZVdpZHRoc1tpXTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh0aGlzLl9mb250LmFsaWduID09PSAnY2VudGVyJylcbiAgICAgICAge1xuICAgICAgICAgICAgYWxpZ25PZmZzZXQgPSAobWF4TGluZVdpZHRoIC0gbGluZVdpZHRoc1tpXSkgLyAyO1xuICAgICAgICB9XG5cbiAgICAgICAgbGluZUFsaWduT2Zmc2V0cy5wdXNoKGFsaWduT2Zmc2V0KTtcbiAgICB9XG5cbiAgICB2YXIgbGVuQ2hhcnMgPSBjaGFycy5sZW5ndGg7XG4gICAgdmFyIHRpbnQgPSB0aGlzLnRpbnQ7XG5cbiAgICBmb3IgKGkgPSAwOyBpIDwgbGVuQ2hhcnM7IGkrKylcbiAgICB7XG4gICAgICAgIHZhciBjID0gdGhpcy5fZ2x5cGhzW2ldOyAvLyBnZXQgdGhlIG5leHQgZ2x5cGggc3ByaXRlXG5cbiAgICAgICAgaWYgKGMpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGMudGV4dHVyZSA9IGNoYXJzW2ldLnRleHR1cmU7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgICBjID0gbmV3IGNvcmUuU3ByaXRlKGNoYXJzW2ldLnRleHR1cmUpO1xuICAgICAgICAgICAgdGhpcy5fZ2x5cGhzLnB1c2goYyk7XG4gICAgICAgIH1cblxuICAgICAgICBjLnBvc2l0aW9uLnggPSAoY2hhcnNbaV0ucG9zaXRpb24ueCArIGxpbmVBbGlnbk9mZnNldHNbY2hhcnNbaV0ubGluZV0pICogc2NhbGU7XG4gICAgICAgIGMucG9zaXRpb24ueSA9IGNoYXJzW2ldLnBvc2l0aW9uLnkgKiBzY2FsZTtcbiAgICAgICAgYy5zY2FsZS54ID0gYy5zY2FsZS55ID0gc2NhbGU7XG4gICAgICAgIGMudGludCA9IHRpbnQ7XG5cbiAgICAgICAgaWYgKCFjLnBhcmVudClcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5hZGRDaGlsZChjKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIHJlbW92ZSB1bm5lY2Vzc2FyeSBjaGlsZHJlbi5cbiAgICBmb3IgKGkgPSBsZW5DaGFyczsgaSA8IHRoaXMuX2dseXBocy5sZW5ndGg7ICsraSlcbiAgICB7XG4gICAgICAgIHRoaXMucmVtb3ZlQ2hpbGQodGhpcy5fZ2x5cGhzW2ldKTtcbiAgICB9XG5cbiAgICB0aGlzLnRleHRXaWR0aCA9IG1heExpbmVXaWR0aCAqIHNjYWxlO1xuICAgIHRoaXMudGV4dEhlaWdodCA9IChwb3MueSArIGRhdGEubGluZUhlaWdodCkgKiBzY2FsZTtcbiAgICB0aGlzLm1heExpbmVIZWlnaHQgPSBtYXhMaW5lSGVpZ2h0ICogc2NhbGU7XG59O1xuXG4vKipcbiAqIFVwZGF0ZXMgdGhlIHRyYW5zZm9ybSBvZiB0aGlzIG9iamVjdFxuICpcbiAqIEBwcml2YXRlXG4gKi9cbkJpdG1hcFRleHQucHJvdG90eXBlLnVwZGF0ZVRyYW5zZm9ybSA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy52YWxpZGF0ZSgpO1xuICAgIHRoaXMuY29udGFpbmVyVXBkYXRlVHJhbnNmb3JtKCk7XG59O1xuXG4vKipcbiAqIFZhbGlkYXRlcyB0ZXh0IGJlZm9yZSBjYWxsaW5nIHBhcmVudCdzIGdldExvY2FsQm91bmRzXG4gKlxuICogQHJldHVybiB7UElYSS5SZWN0YW5nbGV9IFRoZSByZWN0YW5ndWxhciBib3VuZGluZyBhcmVhXG4gKi9cblxuQml0bWFwVGV4dC5wcm90b3R5cGUuZ2V0TG9jYWxCb3VuZHMgPSBmdW5jdGlvbigpXG57XG4gICAgdGhpcy52YWxpZGF0ZSgpO1xuICAgIHJldHVybiBjb3JlLkNvbnRhaW5lci5wcm90b3R5cGUuZ2V0TG9jYWxCb3VuZHMuY2FsbCh0aGlzKTtcbn07XG5cbi8qKlxuICogVXBkYXRlcyB0ZXh0IHdoZW4gbmVlZGVkXG4gKlxuICogQHByaXZhdGVcbiAqL1xuQml0bWFwVGV4dC5wcm90b3R5cGUudmFsaWRhdGUgPSBmdW5jdGlvbigpXG57XG4gICAgaWYgKHRoaXMuZGlydHkpXG4gICAge1xuICAgICAgICB0aGlzLnVwZGF0ZVRleHQoKTtcbiAgICAgICAgdGhpcy5kaXJ0eSA9IGZhbHNlO1xuICAgIH1cbn07XG5cbkJpdG1hcFRleHQuZm9udHMgPSB7fTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vY29yZScpO1xuXG4vKipcbiAqIEEgTW92aWVDbGlwIGlzIGEgc2ltcGxlIHdheSB0byBkaXNwbGF5IGFuIGFuaW1hdGlvbiBkZXBpY3RlZCBieSBhIGxpc3Qgb2YgdGV4dHVyZXMuXG4gKlxuICogYGBganNcbiAqIHZhciBhbGllbkltYWdlcyA9IFtcImltYWdlX3NlcXVlbmNlXzAxLnBuZ1wiLFwiaW1hZ2Vfc2VxdWVuY2VfMDIucG5nXCIsXCJpbWFnZV9zZXF1ZW5jZV8wMy5wbmdcIixcImltYWdlX3NlcXVlbmNlXzA0LnBuZ1wiXTtcbiAqIHZhciB0ZXh0dXJlQXJyYXkgPSBbXTtcbiAqXG4gKiBmb3IgKHZhciBpPTA7IGkgPCA0OyBpKyspXG4gKiB7XG4gKiAgICAgIHZhciB0ZXh0dXJlID0gUElYSS5UZXh0dXJlLmZyb21JbWFnZShhbGllbkltYWdlc1tpXSk7XG4gKiAgICAgIHRleHR1cmVBcnJheS5wdXNoKHRleHR1cmUpO1xuICogfTtcbiAqXG4gKiB2YXIgbWMgPSBuZXcgUElYSS5Nb3ZpZUNsaXAodGV4dHVyZUFycmF5KTtcbiAqIGBgYFxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5TcHJpdGVcbiAqIEBtZW1iZXJvZiBQSVhJLmV4dHJhc1xuICogQHBhcmFtIHRleHR1cmVzIHtQSVhJLlRleHR1cmVbXXxPYmplY3RbXX0gYW4gYXJyYXkgb2Yge0BsaW5rIFBJWEkuVGV4dHVyZX0gb3IgZnJhbWUgb2JqZWN0cyB0aGF0IG1ha2UgdXAgdGhlIGFuaW1hdGlvblxuICogQHBhcmFtIHRleHR1cmVzW10udGV4dHVyZSB7UElYSS5UZXh0dXJlfSB0aGUge0BsaW5rIFBJWEkuVGV4dHVyZX0gb2YgdGhlIGZyYW1lXG4gKiBAcGFyYW0gdGV4dHVyZXNbXS50aW1lIHtudW1iZXJ9IHRoZSBkdXJhdGlvbiBvZiB0aGUgZnJhbWUgaW4gbXNcbiAqL1xuZnVuY3Rpb24gTW92aWVDbGlwKHRleHR1cmVzKVxue1xuICAgIGNvcmUuU3ByaXRlLmNhbGwodGhpcywgdGV4dHVyZXNbMF0gaW5zdGFuY2VvZiBjb3JlLlRleHR1cmUgPyB0ZXh0dXJlc1swXSA6IHRleHR1cmVzWzBdLnRleHR1cmUpO1xuXG4gICAgLyoqXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl90ZXh0dXJlcyA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX2R1cmF0aW9ucyA9IG51bGw7XG5cbiAgICB0aGlzLnRleHR1cmVzID0gdGV4dHVyZXM7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgc3BlZWQgdGhhdCB0aGUgTW92aWVDbGlwIHdpbGwgcGxheSBhdC4gSGlnaGVyIGlzIGZhc3RlciwgbG93ZXIgaXMgc2xvd2VyXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMVxuICAgICAqL1xuICAgIHRoaXMuYW5pbWF0aW9uU3BlZWQgPSAxO1xuXG4gICAgLyoqXG4gICAgICogV2hldGhlciBvciBub3QgdGhlIG1vdmllIGNsaXAgcmVwZWF0cyBhZnRlciBwbGF5aW5nLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKiBAZGVmYXVsdCB0cnVlXG4gICAgICovXG4gICAgdGhpcy5sb29wID0gdHJ1ZTtcblxuICAgIC8qKlxuICAgICAqIEZ1bmN0aW9uIHRvIGNhbGwgd2hlbiBhIE1vdmllQ2xpcCBmaW5pc2hlcyBwbGF5aW5nXG4gICAgICpcbiAgICAgKiBAbWV0aG9kXG4gICAgICogQG1lbWJlcm9mIFBJWEkuZXh0cmFzLk1vdmllQ2xpcCNcbiAgICAgKi9cbiAgICB0aGlzLm9uQ29tcGxldGUgPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogRWxhcHNlZCB0aW1lIHNpbmNlIGFuaW1hdGlvbiBoYXMgYmVlbiBzdGFydGVkLCB1c2VkIGludGVybmFsbHkgdG8gZGlzcGxheSBjdXJyZW50IHRleHR1cmVcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX2N1cnJlbnRUaW1lID0gMDtcblxuICAgIC8qKlxuICAgICAqIEluZGljYXRlcyBpZiB0aGUgTW92aWVDbGlwIGlzIGN1cnJlbnRseSBwbGF5aW5nXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqIEByZWFkb25seVxuICAgICAqL1xuICAgIHRoaXMucGxheWluZyA9IGZhbHNlO1xufVxuXG4vLyBjb25zdHJ1Y3RvclxuTW92aWVDbGlwLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoY29yZS5TcHJpdGUucHJvdG90eXBlKTtcbk1vdmllQ2xpcC5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBNb3ZpZUNsaXA7XG5tb2R1bGUuZXhwb3J0cyA9IE1vdmllQ2xpcDtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoTW92aWVDbGlwLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIHRvdGFsRnJhbWVzIGlzIHRoZSB0b3RhbCBudW1iZXIgb2YgZnJhbWVzIGluIHRoZSBNb3ZpZUNsaXAuIFRoaXMgaXMgdGhlIHNhbWUgYXMgbnVtYmVyIG9mIHRleHR1cmVzXG4gICAgICogYXNzaWduZWQgdG8gdGhlIE1vdmllQ2xpcC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5leHRyYXMuTW92aWVDbGlwI1xuICAgICAqIEBkZWZhdWx0IDBcbiAgICAgKiBAcmVhZG9ubHlcbiAgICAgKi9cbiAgICB0b3RhbEZyYW1lczoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3RleHR1cmVzLmxlbmd0aDtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBUaGUgYXJyYXkgb2YgdGV4dHVyZXMgdXNlZCBmb3IgdGhpcyBNb3ZpZUNsaXBcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuVGV4dHVyZVtdfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmV4dHJhcy5Nb3ZpZUNsaXAjXG4gICAgICpcbiAgICAgKi9cbiAgICB0ZXh0dXJlczoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl90ZXh0dXJlcztcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGlmKHZhbHVlWzBdIGluc3RhbmNlb2YgY29yZS5UZXh0dXJlKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHRoaXMuX3RleHR1cmVzID0gdmFsdWU7XG4gICAgICAgICAgICAgICAgdGhpcy5fZHVyYXRpb25zID0gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB0aGlzLl90ZXh0dXJlcyA9IFtdO1xuICAgICAgICAgICAgICAgIHRoaXMuX2R1cmF0aW9ucyA9IFtdO1xuICAgICAgICAgICAgICAgIGZvcih2YXIgaSA9IDA7IGkgPCB2YWx1ZS5sZW5ndGg7IGkrKylcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3RleHR1cmVzLnB1c2godmFsdWVbaV0udGV4dHVyZSk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2R1cmF0aW9ucy5wdXNoKHZhbHVlW2ldLnRpbWUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAqIFRoZSBNb3ZpZUNsaXBzIGN1cnJlbnQgZnJhbWUgaW5kZXhcbiAgICAqXG4gICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgKiBAbWVtYmVyb2YgUElYSS5leHRyYXMuTW92aWVDbGlwI1xuICAgICogQHJlYWRvbmx5XG4gICAgKi9cbiAgICBjdXJyZW50RnJhbWU6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICB2YXIgY3VycmVudEZyYW1lID0gTWF0aC5mbG9vcih0aGlzLl9jdXJyZW50VGltZSkgJSB0aGlzLl90ZXh0dXJlcy5sZW5ndGg7XG4gICAgICAgICAgICBpZiAoY3VycmVudEZyYW1lIDwgMClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjdXJyZW50RnJhbWUgKz0gdGhpcy5fdGV4dHVyZXMubGVuZ3RoO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGN1cnJlbnRGcmFtZTtcbiAgICAgICAgfVxuICAgIH1cblxufSk7XG5cbi8qKlxuICogU3RvcHMgdGhlIE1vdmllQ2xpcFxuICpcbiAqL1xuTW92aWVDbGlwLnByb3RvdHlwZS5zdG9wID0gZnVuY3Rpb24gKClcbntcbiAgICBpZighdGhpcy5wbGF5aW5nKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMucGxheWluZyA9IGZhbHNlO1xuICAgIGNvcmUudGlja2VyLnNoYXJlZC5yZW1vdmUodGhpcy51cGRhdGUsIHRoaXMpO1xufTtcblxuLyoqXG4gKiBQbGF5cyB0aGUgTW92aWVDbGlwXG4gKlxuICovXG5Nb3ZpZUNsaXAucHJvdG90eXBlLnBsYXkgPSBmdW5jdGlvbiAoKVxue1xuICAgIGlmKHRoaXMucGxheWluZylcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLnBsYXlpbmcgPSB0cnVlO1xuICAgIGNvcmUudGlja2VyLnNoYXJlZC5hZGQodGhpcy51cGRhdGUsIHRoaXMpO1xufTtcblxuLyoqXG4gKiBTdG9wcyB0aGUgTW92aWVDbGlwIGFuZCBnb2VzIHRvIGEgc3BlY2lmaWMgZnJhbWVcbiAqXG4gKiBAcGFyYW0gZnJhbWVOdW1iZXIge251bWJlcn0gZnJhbWUgaW5kZXggdG8gc3RvcCBhdFxuICovXG5Nb3ZpZUNsaXAucHJvdG90eXBlLmdvdG9BbmRTdG9wID0gZnVuY3Rpb24gKGZyYW1lTnVtYmVyKVxue1xuICAgIHRoaXMuc3RvcCgpO1xuXG4gICAgdGhpcy5fY3VycmVudFRpbWUgPSBmcmFtZU51bWJlcjtcblxuICAgIHRoaXMuX3RleHR1cmUgPSB0aGlzLl90ZXh0dXJlc1t0aGlzLmN1cnJlbnRGcmFtZV07XG59O1xuXG4vKipcbiAqIEdvZXMgdG8gYSBzcGVjaWZpYyBmcmFtZSBhbmQgYmVnaW5zIHBsYXlpbmcgdGhlIE1vdmllQ2xpcFxuICpcbiAqIEBwYXJhbSBmcmFtZU51bWJlciB7bnVtYmVyfSBmcmFtZSBpbmRleCB0byBzdGFydCBhdFxuICovXG5Nb3ZpZUNsaXAucHJvdG90eXBlLmdvdG9BbmRQbGF5ID0gZnVuY3Rpb24gKGZyYW1lTnVtYmVyKVxue1xuICAgIHRoaXMuX2N1cnJlbnRUaW1lID0gZnJhbWVOdW1iZXI7XG5cbiAgICB0aGlzLnBsYXkoKTtcbn07XG5cbi8qXG4gKiBVcGRhdGVzIHRoZSBvYmplY3QgdHJhbnNmb3JtIGZvciByZW5kZXJpbmdcbiAqIEBwcml2YXRlXG4gKi9cbk1vdmllQ2xpcC5wcm90b3R5cGUudXBkYXRlID0gZnVuY3Rpb24gKGRlbHRhVGltZSlcbntcbiAgICB2YXIgZWxhcHNlZCA9IHRoaXMuYW5pbWF0aW9uU3BlZWQgKiBkZWx0YVRpbWU7XG5cbiAgICBpZiAodGhpcy5fZHVyYXRpb25zICE9PSBudWxsKVxuICAgIHtcbiAgICAgICAgdmFyIGxhZyA9IHRoaXMuX2N1cnJlbnRUaW1lICUgMSAqIHRoaXMuX2R1cmF0aW9uc1t0aGlzLmN1cnJlbnRGcmFtZV07XG5cbiAgICAgICAgbGFnICs9IGVsYXBzZWQgLyA2MCAqIDEwMDA7XG5cbiAgICAgICAgd2hpbGUgKGxhZyA8IDApXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuX2N1cnJlbnRUaW1lLS07XG4gICAgICAgICAgICBsYWcgKz0gdGhpcy5fZHVyYXRpb25zW3RoaXMuY3VycmVudEZyYW1lXTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBzaWduID0gTWF0aC5zaWduKHRoaXMuYW5pbWF0aW9uU3BlZWQgKiBkZWx0YVRpbWUpO1xuICAgICAgICB0aGlzLl9jdXJyZW50VGltZSA9IE1hdGguZmxvb3IodGhpcy5fY3VycmVudFRpbWUpO1xuXG4gICAgICAgIHdoaWxlIChsYWcgPj0gdGhpcy5fZHVyYXRpb25zW3RoaXMuY3VycmVudEZyYW1lXSlcbiAgICAgICAge1xuICAgICAgICAgICAgbGFnIC09IHRoaXMuX2R1cmF0aW9uc1t0aGlzLmN1cnJlbnRGcmFtZV0gKiBzaWduO1xuICAgICAgICAgICAgdGhpcy5fY3VycmVudFRpbWUgKz0gc2lnbjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX2N1cnJlbnRUaW1lICs9IGxhZyAvIHRoaXMuX2R1cmF0aW9uc1t0aGlzLmN1cnJlbnRGcmFtZV07XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHRoaXMuX2N1cnJlbnRUaW1lICs9IGVsYXBzZWQ7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX2N1cnJlbnRUaW1lIDwgMCAmJiAhdGhpcy5sb29wKVxuICAgIHtcbiAgICAgICAgdGhpcy5nb3RvQW5kU3RvcCgwKTtcblxuICAgICAgICBpZiAodGhpcy5vbkNvbXBsZXRlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLm9uQ29tcGxldGUoKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBlbHNlIGlmICh0aGlzLl9jdXJyZW50VGltZSA+PSB0aGlzLl90ZXh0dXJlcy5sZW5ndGggJiYgIXRoaXMubG9vcClcbiAgICB7XG4gICAgICAgIHRoaXMuZ290b0FuZFN0b3AodGhpcy5fdGV4dHVyZXMubGVuZ3RoIC0gMSk7XG5cbiAgICAgICAgaWYgKHRoaXMub25Db21wbGV0ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5vbkNvbXBsZXRlKCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgdGhpcy5fdGV4dHVyZSA9IHRoaXMuX3RleHR1cmVzW3RoaXMuY3VycmVudEZyYW1lXTtcbiAgICB9XG5cbn07XG5cbi8qXG4gKiBTdG9wcyB0aGUgTW92aWVDbGlwIGFuZCBkZXN0cm95cyBpdFxuICpcbiAqL1xuTW92aWVDbGlwLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKCApXG57XG4gICAgdGhpcy5zdG9wKCk7XG4gICAgY29yZS5TcHJpdGUucHJvdG90eXBlLmRlc3Ryb3kuY2FsbCh0aGlzKTtcbn07XG5cbi8qKlxuICogQSBzaG9ydCBoYW5kIHdheSBvZiBjcmVhdGluZyBhIG1vdmllY2xpcCBmcm9tIGFuIGFycmF5IG9mIGZyYW1lIGlkc1xuICpcbiAqIEBzdGF0aWNcbiAqIEBwYXJhbSBmcmFtZXMge3N0cmluZ1tdfSB0aGUgYXJyYXkgb2YgZnJhbWVzIGlkcyB0aGUgbW92aWVjbGlwIHdpbGwgdXNlIGFzIGl0cyB0ZXh0dXJlIGZyYW1lc1xuICovXG5Nb3ZpZUNsaXAuZnJvbUZyYW1lcyA9IGZ1bmN0aW9uIChmcmFtZXMpXG57XG4gICAgdmFyIHRleHR1cmVzID0gW107XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGZyYW1lcy5sZW5ndGg7ICsraSlcbiAgICB7XG4gICAgICAgIHRleHR1cmVzLnB1c2gobmV3IGNvcmUuVGV4dHVyZS5mcm9tRnJhbWUoZnJhbWVzW2ldKSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBNb3ZpZUNsaXAodGV4dHVyZXMpO1xufTtcblxuLyoqXG4gKiBBIHNob3J0IGhhbmQgd2F5IG9mIGNyZWF0aW5nIGEgbW92aWVjbGlwIGZyb20gYW4gYXJyYXkgb2YgaW1hZ2UgaWRzXG4gKlxuICogQHN0YXRpY1xuICogQHBhcmFtIGltYWdlcyB7c3RyaW5nW119IHRoZSBhcnJheSBvZiBpbWFnZSB1cmxzIHRoZSBtb3ZpZWNsaXAgd2lsbCB1c2UgYXMgaXRzIHRleHR1cmUgZnJhbWVzXG4gKi9cbk1vdmllQ2xpcC5mcm9tSW1hZ2VzID0gZnVuY3Rpb24gKGltYWdlcylcbntcbiAgICB2YXIgdGV4dHVyZXMgPSBbXTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgaW1hZ2VzLmxlbmd0aDsgKytpKVxuICAgIHtcbiAgICAgICAgdGV4dHVyZXMucHVzaChuZXcgY29yZS5UZXh0dXJlLmZyb21JbWFnZShpbWFnZXNbaV0pKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IE1vdmllQ2xpcCh0ZXh0dXJlcyk7XG59OyIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vY29yZScpLFxuICAgIC8vIGEgc3ByaXRlIHVzZSBkZm9yIHJlbmRlcmluZyB0ZXh0dXJlcy4uXG4gICAgdGVtcFBvaW50ID0gbmV3IGNvcmUuUG9pbnQoKSxcbiAgICBDYW52YXNUaW50ZXIgPSByZXF1aXJlKCcuLi9jb3JlL3JlbmRlcmVycy9jYW52YXMvdXRpbHMvQ2FudmFzVGludGVyJyk7XG5cbi8qKlxuICogQSB0aWxpbmcgc3ByaXRlIGlzIGEgZmFzdCB3YXkgb2YgcmVuZGVyaW5nIGEgdGlsaW5nIGltYWdlXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLlNwcml0ZVxuICogQG1lbWJlcm9mIFBJWEkuZXh0cmFzXG4gKiBAcGFyYW0gdGV4dHVyZSB7VGV4dHVyZX0gdGhlIHRleHR1cmUgb2YgdGhlIHRpbGluZyBzcHJpdGVcbiAqIEBwYXJhbSB3aWR0aCB7bnVtYmVyfSAgdGhlIHdpZHRoIG9mIHRoZSB0aWxpbmcgc3ByaXRlXG4gKiBAcGFyYW0gaGVpZ2h0IHtudW1iZXJ9IHRoZSBoZWlnaHQgb2YgdGhlIHRpbGluZyBzcHJpdGVcbiAqL1xuZnVuY3Rpb24gVGlsaW5nU3ByaXRlKHRleHR1cmUsIHdpZHRoLCBoZWlnaHQpXG57XG4gICAgY29yZS5TcHJpdGUuY2FsbCh0aGlzLCB0ZXh0dXJlKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBzY2FsaW5nIG9mIHRoZSBpbWFnZSB0aGF0IGlzIGJlaW5nIHRpbGVkXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlBvaW50fVxuICAgICAqL1xuICAgIHRoaXMudGlsZVNjYWxlID0gbmV3IGNvcmUuUG9pbnQoMSwxKTtcblxuXG4gICAgLyoqXG4gICAgICogVGhlIG9mZnNldCBwb3NpdGlvbiBvZiB0aGUgaW1hZ2UgdGhhdCBpcyBiZWluZyB0aWxlZFxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5Qb2ludH1cbiAgICAgKi9cbiAgICB0aGlzLnRpbGVQb3NpdGlvbiA9IG5ldyBjb3JlLlBvaW50KDAsMCk7XG5cbiAgICAvLy8vLyBwcml2YXRlXG5cbiAgICAvKipcbiAgICAgKiBUaGUgd2l0aCBvZiB0aGUgdGlsaW5nIHNwcml0ZVxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fd2lkdGggPSB3aWR0aCB8fCAxMDA7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgaGVpZ2h0IG9mIHRoZSB0aWxpbmcgc3ByaXRlXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9oZWlnaHQgPSBoZWlnaHQgfHwgMTAwO1xuXG4gICAgLyoqXG4gICAgICogQW4gaW50ZXJuYWwgV2ViR0wgVVYgY2FjaGUuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlRleHR1cmVVdnN9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl91dnMgPSBuZXcgY29yZS5UZXh0dXJlVXZzKCk7XG5cbiAgICB0aGlzLl9jYW52YXNQYXR0ZXJuID0gbnVsbDtcblxuICAgIC8vVE9ETyBtb3ZlLi5cbiAgICB0aGlzLnNoYWRlciA9IG5ldyBjb3JlLkFic3RyYWN0RmlsdGVyKFxuXG4gICAgICBbXG4gICAgICAgICdwcmVjaXNpb24gbG93cCBmbG9hdDsnLFxuICAgICAgICAnYXR0cmlidXRlIHZlYzIgYVZlcnRleFBvc2l0aW9uOycsXG4gICAgICAgICdhdHRyaWJ1dGUgdmVjMiBhVGV4dHVyZUNvb3JkOycsXG4gICAgICAgICdhdHRyaWJ1dGUgdmVjNCBhQ29sb3I7JyxcblxuICAgICAgICAndW5pZm9ybSBtYXQzIHByb2plY3Rpb25NYXRyaXg7JyxcblxuICAgICAgICAndW5pZm9ybSB2ZWM0IHVGcmFtZTsnLFxuICAgICAgICAndW5pZm9ybSB2ZWM0IHVUcmFuc2Zvcm07JyxcblxuICAgICAgICAndmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7JyxcbiAgICAgICAgJ3ZhcnlpbmcgdmVjNCB2Q29sb3I7JyxcblxuICAgICAgICAndm9pZCBtYWluKHZvaWQpeycsXG4gICAgICAgICcgICBnbF9Qb3NpdGlvbiA9IHZlYzQoKHByb2plY3Rpb25NYXRyaXggKiB2ZWMzKGFWZXJ0ZXhQb3NpdGlvbiwgMS4wKSkueHksIDAuMCwgMS4wKTsnLFxuXG4gICAgICAgICcgICB2ZWMyIGNvb3JkID0gYVRleHR1cmVDb29yZDsnLFxuICAgICAgICAnICAgY29vcmQgLT0gdVRyYW5zZm9ybS54eTsnLFxuICAgICAgICAnICAgY29vcmQgLz0gdVRyYW5zZm9ybS56dzsnLFxuICAgICAgICAnICAgdlRleHR1cmVDb29yZCA9IGNvb3JkOycsXG5cbiAgICAgICAgJyAgIHZDb2xvciA9IHZlYzQoYUNvbG9yLnJnYiAqIGFDb2xvci5hLCBhQ29sb3IuYSk7JyxcbiAgICAgICAgJ30nXG4gICAgICBdLmpvaW4oJ1xcbicpLFxuICAgICAgW1xuICAgICAgICAncHJlY2lzaW9uIGxvd3AgZmxvYXQ7JyxcblxuICAgICAgICAndmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7JyxcbiAgICAgICAgJ3ZhcnlpbmcgdmVjNCB2Q29sb3I7JyxcblxuICAgICAgICAndW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXI7JyxcbiAgICAgICAgJ3VuaWZvcm0gdmVjNCB1RnJhbWU7JyxcbiAgICAgICAgJ3VuaWZvcm0gdmVjMiB1UGl4ZWxTaXplOycsXG5cbiAgICAgICAgJ3ZvaWQgbWFpbih2b2lkKXsnLFxuXG4gICAgICAgICcgICB2ZWMyIGNvb3JkID0gbW9kKHZUZXh0dXJlQ29vcmQsIHVGcmFtZS56dyk7JyxcbiAgICAgICAgJyAgIGNvb3JkID0gY2xhbXAoY29vcmQsIHVQaXhlbFNpemUsIHVGcmFtZS56dyAtIHVQaXhlbFNpemUpOycsXG4gICAgICAgICcgICBjb29yZCArPSB1RnJhbWUueHk7JyxcblxuICAgICAgICAnICAgZ2xfRnJhZ0NvbG9yID0gIHRleHR1cmUyRCh1U2FtcGxlciwgY29vcmQpICogdkNvbG9yIDsnLFxuICAgICAgICAnfSdcbiAgICAgIF0uam9pbignXFxuJyksXG5cbiAgICAgICAgICAgIC8vIHNldCB0aGUgdW5pZm9ybXNcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB1RnJhbWU6IHsgdHlwZTogJzRmdicsIHZhbHVlOiBbMCwwLDEsMV0gfSxcbiAgICAgICAgICAgICAgICB1VHJhbnNmb3JtOiB7IHR5cGU6ICc0ZnYnLCB2YWx1ZTogWzAsMCwxLDFdIH0sXG4gICAgICAgICAgICAgICAgdVBpeGVsU2l6ZSA6IHsgdHlwZSA6ICcyZnYnLCB2YWx1ZTogWzEsIDFdfVxuICAgICAgICAgICAgfVxuICAgICAgKTtcbn1cblxuVGlsaW5nU3ByaXRlLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoY29yZS5TcHJpdGUucHJvdG90eXBlKTtcblRpbGluZ1Nwcml0ZS5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBUaWxpbmdTcHJpdGU7XG5tb2R1bGUuZXhwb3J0cyA9IFRpbGluZ1Nwcml0ZTtcblxuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhUaWxpbmdTcHJpdGUucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogVGhlIHdpZHRoIG9mIHRoZSBzcHJpdGUsIHNldHRpbmcgdGhpcyB3aWxsIGFjdHVhbGx5IG1vZGlmeSB0aGUgc2NhbGUgdG8gYWNoaWV2ZSB0aGUgdmFsdWUgc2V0XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZXh0cmFzLlRpbGluZ1Nwcml0ZSNcbiAgICAgKi9cbiAgICB3aWR0aDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl93aWR0aDtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuX3dpZHRoID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVGhlIGhlaWdodCBvZiB0aGUgVGlsaW5nU3ByaXRlLCBzZXR0aW5nIHRoaXMgd2lsbCBhY3R1YWxseSBtb2RpZnkgdGhlIHNjYWxlIHRvIGFjaGlldmUgdGhlIHZhbHVlIHNldFxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmV4dHJhcy5UaWxpbmdTcHJpdGUjXG4gICAgICovXG4gICAgaGVpZ2h0OiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2hlaWdodDtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuX2hlaWdodCA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfVxufSk7XG5cblRpbGluZ1Nwcml0ZS5wcm90b3R5cGUuX29uVGV4dHVyZVVwZGF0ZSA9IGZ1bmN0aW9uICgpXG57XG4gICAgcmV0dXJuO1xufTtcblxuXG4vKipcbiAqIFJlbmRlcnMgdGhlIG9iamVjdCB1c2luZyB0aGUgV2ViR0wgcmVuZGVyZXJcbiAqXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcn1cbiAqIEBwcml2YXRlXG4gKi9cblRpbGluZ1Nwcml0ZS5wcm90b3R5cGUuX3JlbmRlcldlYkdMID0gZnVuY3Rpb24gKHJlbmRlcmVyKVxue1xuICAgIC8vIHR3ZWFrIG91ciB0ZXh0dXJlIHRlbXBvcmFyaWx5Li5cbiAgICB2YXIgdGV4dHVyZSA9IHRoaXMuX3RleHR1cmU7XG5cbiAgICBpZighdGV4dHVyZSB8fCAhdGV4dHVyZS5fdXZzKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHZhciB0ZW1wVXZzID0gdGV4dHVyZS5fdXZzLFxuICAgICAgICB0ZW1wV2lkdGggPSB0ZXh0dXJlLl9mcmFtZS53aWR0aCxcbiAgICAgICAgdGVtcEhlaWdodCA9IHRleHR1cmUuX2ZyYW1lLmhlaWdodCxcbiAgICAgICAgdHcgPSB0ZXh0dXJlLmJhc2VUZXh0dXJlLndpZHRoLFxuICAgICAgICB0aCA9IHRleHR1cmUuYmFzZVRleHR1cmUuaGVpZ2h0O1xuXG4gICAgdGV4dHVyZS5fdXZzID0gdGhpcy5fdXZzO1xuICAgIHRleHR1cmUuX2ZyYW1lLndpZHRoID0gdGhpcy53aWR0aDtcbiAgICB0ZXh0dXJlLl9mcmFtZS5oZWlnaHQgPSB0aGlzLmhlaWdodDtcblxuICAgIHRoaXMuc2hhZGVyLnVuaWZvcm1zLnVQaXhlbFNpemUudmFsdWVbMF0gPSAxLjAvdHc7XG4gICAgdGhpcy5zaGFkZXIudW5pZm9ybXMudVBpeGVsU2l6ZS52YWx1ZVsxXSA9IDEuMC90aDtcblxuICAgIHRoaXMuc2hhZGVyLnVuaWZvcm1zLnVGcmFtZS52YWx1ZVswXSA9IHRlbXBVdnMueDA7XG4gICAgdGhpcy5zaGFkZXIudW5pZm9ybXMudUZyYW1lLnZhbHVlWzFdID0gdGVtcFV2cy55MDtcbiAgICB0aGlzLnNoYWRlci51bmlmb3Jtcy51RnJhbWUudmFsdWVbMl0gPSB0ZW1wVXZzLngxIC0gdGVtcFV2cy54MDtcbiAgICB0aGlzLnNoYWRlci51bmlmb3Jtcy51RnJhbWUudmFsdWVbM10gPSB0ZW1wVXZzLnkyIC0gdGVtcFV2cy55MDtcblxuICAgIHRoaXMuc2hhZGVyLnVuaWZvcm1zLnVUcmFuc2Zvcm0udmFsdWVbMF0gPSAodGhpcy50aWxlUG9zaXRpb24ueCAlICh0ZW1wV2lkdGggKiB0aGlzLnRpbGVTY2FsZS54KSkgLyB0aGlzLl93aWR0aDtcbiAgICB0aGlzLnNoYWRlci51bmlmb3Jtcy51VHJhbnNmb3JtLnZhbHVlWzFdID0gKHRoaXMudGlsZVBvc2l0aW9uLnkgJSAodGVtcEhlaWdodCAqIHRoaXMudGlsZVNjYWxlLnkpKSAvIHRoaXMuX2hlaWdodDtcbiAgICB0aGlzLnNoYWRlci51bmlmb3Jtcy51VHJhbnNmb3JtLnZhbHVlWzJdID0gKCB0dyAvIHRoaXMuX3dpZHRoICkgKiB0aGlzLnRpbGVTY2FsZS54O1xuICAgIHRoaXMuc2hhZGVyLnVuaWZvcm1zLnVUcmFuc2Zvcm0udmFsdWVbM10gPSAoIHRoIC8gdGhpcy5faGVpZ2h0ICkgKiB0aGlzLnRpbGVTY2FsZS55O1xuXG4gICAgcmVuZGVyZXIuc2V0T2JqZWN0UmVuZGVyZXIocmVuZGVyZXIucGx1Z2lucy5zcHJpdGUpO1xuICAgIHJlbmRlcmVyLnBsdWdpbnMuc3ByaXRlLnJlbmRlcih0aGlzKTtcblxuICAgIHRleHR1cmUuX3V2cyA9IHRlbXBVdnM7XG4gICAgdGV4dHVyZS5fZnJhbWUud2lkdGggPSB0ZW1wV2lkdGg7XG4gICAgdGV4dHVyZS5fZnJhbWUuaGVpZ2h0ID0gdGVtcEhlaWdodDtcbn07XG5cbi8qKlxuICogUmVuZGVycyB0aGUgb2JqZWN0IHVzaW5nIHRoZSBDYW52YXMgcmVuZGVyZXJcbiAqXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuQ2FudmFzUmVuZGVyZXJ9IGEgcmVmZXJlbmNlIHRvIHRoZSBjYW52YXMgcmVuZGVyZXJcbiAqIEBwcml2YXRlXG4gKi9cblRpbGluZ1Nwcml0ZS5wcm90b3R5cGUuX3JlbmRlckNhbnZhcyA9IGZ1bmN0aW9uIChyZW5kZXJlcilcbntcbiAgICB2YXIgdGV4dHVyZSA9IHRoaXMuX3RleHR1cmU7XG5cbiAgICBpZiAoIXRleHR1cmUuYmFzZVRleHR1cmUuaGFzTG9hZGVkKVxuICAgIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB2YXIgY29udGV4dCA9IHJlbmRlcmVyLmNvbnRleHQsXG4gICAgICAgIHRyYW5zZm9ybSA9IHRoaXMud29ybGRUcmFuc2Zvcm0sXG4gICAgICAgIHJlc29sdXRpb24gPSByZW5kZXJlci5yZXNvbHV0aW9uLFxuICAgICAgICBiYXNlVGV4dHVyZSA9IHRleHR1cmUuYmFzZVRleHR1cmUsXG4gICAgICAgIG1vZFggPSAodGhpcy50aWxlUG9zaXRpb24ueCAvIHRoaXMudGlsZVNjYWxlLngpICUgdGV4dHVyZS5fZnJhbWUud2lkdGgsXG4gICAgICAgIG1vZFkgPSAodGhpcy50aWxlUG9zaXRpb24ueSAvIHRoaXMudGlsZVNjYWxlLnkpICUgdGV4dHVyZS5fZnJhbWUuaGVpZ2h0O1xuXG4gICAgLy8gY3JlYXRlIGEgbmljZSBzaGlueSBwYXR0ZXJuIVxuICAgIC8vIFRPRE8gdGhpcyBuZWVkcyB0byBiZSByZWZyZXNoZWQgaWYgdGV4dHVyZSBjaGFuZ2VzLi5cbiAgICBpZighdGhpcy5fY2FudmFzUGF0dGVybilcbiAgICB7XG4gICAgICAgIC8vIGN1dCBhbiBvYmplY3QgZnJvbSBhIHNwcml0ZXNoZWV0Li5cbiAgICAgICAgdmFyIHRlbXBDYW52YXMgPSBuZXcgY29yZS5DYW52YXNCdWZmZXIodGV4dHVyZS5fZnJhbWUud2lkdGgsIHRleHR1cmUuX2ZyYW1lLmhlaWdodCk7XG5cbiAgICAgICAgLy8gVGludCB0aGUgdGlsaW5nIHNwcml0ZVxuICAgICAgICBpZiAodGhpcy50aW50ICE9PSAweEZGRkZGRilcbiAgICAgICAge1xuICAgICAgICAgICAgaWYgKHRoaXMuY2FjaGVkVGludCAhPT0gdGhpcy50aW50KVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHRoaXMuY2FjaGVkVGludCA9IHRoaXMudGludDtcblxuICAgICAgICAgICAgICAgIHRoaXMudGludGVkVGV4dHVyZSA9IENhbnZhc1RpbnRlci5nZXRUaW50ZWRUZXh0dXJlKHRoaXMsIHRoaXMudGludCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0ZW1wQ2FudmFzLmNvbnRleHQuZHJhd0ltYWdlKHRoaXMudGludGVkVGV4dHVyZSwgMCwgMCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgICB0ZW1wQ2FudmFzLmNvbnRleHQuZHJhd0ltYWdlKGJhc2VUZXh0dXJlLnNvdXJjZSwgLXRleHR1cmUuX2ZyYW1lLngsIC10ZXh0dXJlLl9mcmFtZS55KTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9jYW52YXNQYXR0ZXJuID0gdGVtcENhbnZhcy5jb250ZXh0LmNyZWF0ZVBhdHRlcm4oIHRlbXBDYW52YXMuY2FudmFzLCAncmVwZWF0JyApO1xuICAgIH1cblxuICAgIC8vIHNldCBjb250ZXh0IHN0YXRlLi5cbiAgICBjb250ZXh0Lmdsb2JhbEFscGhhID0gdGhpcy53b3JsZEFscGhhO1xuICAgIGNvbnRleHQuc2V0VHJhbnNmb3JtKHRyYW5zZm9ybS5hICogcmVzb2x1dGlvbixcbiAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtLmIgKiByZXNvbHV0aW9uLFxuICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2Zvcm0uYyAqIHJlc29sdXRpb24sXG4gICAgICAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybS5kICogcmVzb2x1dGlvbixcbiAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtLnR4ICogcmVzb2x1dGlvbixcbiAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtLnR5ICogcmVzb2x1dGlvbik7XG5cbiAgICAvLyBUT0RPIC0gdGhpcyBzaG91bGQgYmUgcm9sbGVkIGludG8gdGhlIHNldFRyYW5zZm9ybSBhYm92ZS4uXG4gICAgY29udGV4dC5zY2FsZSh0aGlzLnRpbGVTY2FsZS54LHRoaXMudGlsZVNjYWxlLnkpO1xuXG4gICAgY29udGV4dC50cmFuc2xhdGUobW9kWCArICh0aGlzLmFuY2hvci54ICogLXRoaXMuX3dpZHRoICksXG4gICAgICAgICAgICAgICAgICAgICAgbW9kWSArICh0aGlzLmFuY2hvci55ICogLXRoaXMuX2hlaWdodCkpO1xuXG4gICAgLy8gY2hlY2sgYmxlbmQgbW9kZVxuICAgIHZhciBjb21wb3NpdGVPcGVyYXRpb24gPSByZW5kZXJlci5ibGVuZE1vZGVzW3RoaXMuYmxlbmRNb2RlXTtcbiAgICBpZiAoY29tcG9zaXRlT3BlcmF0aW9uICE9PSByZW5kZXJlci5jb250ZXh0Lmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbilcbiAgICB7XG4gICAgICAgIGNvbnRleHQuZ2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uID0gY29tcG9zaXRlT3BlcmF0aW9uO1xuICAgIH1cblxuICAgIC8vIGZpbGwgdGhlIHBhdHRlcm4hXG4gICAgY29udGV4dC5maWxsU3R5bGUgPSB0aGlzLl9jYW52YXNQYXR0ZXJuO1xuICAgIGNvbnRleHQuZmlsbFJlY3QoLW1vZFgsXG4gICAgICAgICAgICAgICAgICAgICAtbW9kWSxcbiAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3dpZHRoIC8gdGhpcy50aWxlU2NhbGUueCxcbiAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2hlaWdodCAvIHRoaXMudGlsZVNjYWxlLnkpO1xuXG5cbiAgICAvL1RPRE8gLSBwcmV0dHkgc3VyZSB0aGlzIGNhbiBiZSBkZWxldGVkLi4uXG4gICAgLy9jb250ZXh0LnRyYW5zbGF0ZSgtdGhpcy50aWxlUG9zaXRpb24ueCArICh0aGlzLmFuY2hvci54ICogdGhpcy5fd2lkdGgpLCAtdGhpcy50aWxlUG9zaXRpb24ueSArICh0aGlzLmFuY2hvci55ICogdGhpcy5faGVpZ2h0KSk7XG4gICAgLy9jb250ZXh0LnNjYWxlKDEgLyB0aGlzLnRpbGVTY2FsZS54LCAxIC8gdGhpcy50aWxlU2NhbGUueSk7XG59O1xuXG5cbi8qKlxuICogUmV0dXJucyB0aGUgZnJhbWluZyByZWN0YW5nbGUgb2YgdGhlIHNwcml0ZSBhcyBhIFJlY3RhbmdsZSBvYmplY3RcbipcbiAqIEByZXR1cm4ge1BJWEkuUmVjdGFuZ2xlfSB0aGUgZnJhbWluZyByZWN0YW5nbGVcbiAqL1xuVGlsaW5nU3ByaXRlLnByb3RvdHlwZS5nZXRCb3VuZHMgPSBmdW5jdGlvbiAoKVxue1xuICAgIHZhciB3aWR0aCA9IHRoaXMuX3dpZHRoO1xuICAgIHZhciBoZWlnaHQgPSB0aGlzLl9oZWlnaHQ7XG5cbiAgICB2YXIgdzAgPSB3aWR0aCAqICgxLXRoaXMuYW5jaG9yLngpO1xuICAgIHZhciB3MSA9IHdpZHRoICogLXRoaXMuYW5jaG9yLng7XG5cbiAgICB2YXIgaDAgPSBoZWlnaHQgKiAoMS10aGlzLmFuY2hvci55KTtcbiAgICB2YXIgaDEgPSBoZWlnaHQgKiAtdGhpcy5hbmNob3IueTtcblxuICAgIHZhciB3b3JsZFRyYW5zZm9ybSA9IHRoaXMud29ybGRUcmFuc2Zvcm07XG5cbiAgICB2YXIgYSA9IHdvcmxkVHJhbnNmb3JtLmE7XG4gICAgdmFyIGIgPSB3b3JsZFRyYW5zZm9ybS5iO1xuICAgIHZhciBjID0gd29ybGRUcmFuc2Zvcm0uYztcbiAgICB2YXIgZCA9IHdvcmxkVHJhbnNmb3JtLmQ7XG4gICAgdmFyIHR4ID0gd29ybGRUcmFuc2Zvcm0udHg7XG4gICAgdmFyIHR5ID0gd29ybGRUcmFuc2Zvcm0udHk7XG5cbiAgICB2YXIgeDEgPSBhICogdzEgKyBjICogaDEgKyB0eDtcbiAgICB2YXIgeTEgPSBkICogaDEgKyBiICogdzEgKyB0eTtcblxuICAgIHZhciB4MiA9IGEgKiB3MCArIGMgKiBoMSArIHR4O1xuICAgIHZhciB5MiA9IGQgKiBoMSArIGIgKiB3MCArIHR5O1xuXG4gICAgdmFyIHgzID0gYSAqIHcwICsgYyAqIGgwICsgdHg7XG4gICAgdmFyIHkzID0gZCAqIGgwICsgYiAqIHcwICsgdHk7XG5cbiAgICB2YXIgeDQgPSAgYSAqIHcxICsgYyAqIGgwICsgdHg7XG4gICAgdmFyIHk0ID0gIGQgKiBoMCArIGIgKiB3MSArIHR5O1xuXG4gICAgdmFyIG1pblgsXG4gICAgICAgIG1heFgsXG4gICAgICAgIG1pblksXG4gICAgICAgIG1heFk7XG5cbiAgICBtaW5YID0geDE7XG4gICAgbWluWCA9IHgyIDwgbWluWCA/IHgyIDogbWluWDtcbiAgICBtaW5YID0geDMgPCBtaW5YID8geDMgOiBtaW5YO1xuICAgIG1pblggPSB4NCA8IG1pblggPyB4NCA6IG1pblg7XG5cbiAgICBtaW5ZID0geTE7XG4gICAgbWluWSA9IHkyIDwgbWluWSA/IHkyIDogbWluWTtcbiAgICBtaW5ZID0geTMgPCBtaW5ZID8geTMgOiBtaW5ZO1xuICAgIG1pblkgPSB5NCA8IG1pblkgPyB5NCA6IG1pblk7XG5cbiAgICBtYXhYID0geDE7XG4gICAgbWF4WCA9IHgyID4gbWF4WCA/IHgyIDogbWF4WDtcbiAgICBtYXhYID0geDMgPiBtYXhYID8geDMgOiBtYXhYO1xuICAgIG1heFggPSB4NCA+IG1heFggPyB4NCA6IG1heFg7XG5cbiAgICBtYXhZID0geTE7XG4gICAgbWF4WSA9IHkyID4gbWF4WSA/IHkyIDogbWF4WTtcbiAgICBtYXhZID0geTMgPiBtYXhZID8geTMgOiBtYXhZO1xuICAgIG1heFkgPSB5NCA+IG1heFkgPyB5NCA6IG1heFk7XG5cbiAgICB2YXIgYm91bmRzID0gdGhpcy5fYm91bmRzO1xuXG4gICAgYm91bmRzLnggPSBtaW5YO1xuICAgIGJvdW5kcy53aWR0aCA9IG1heFggLSBtaW5YO1xuXG4gICAgYm91bmRzLnkgPSBtaW5ZO1xuICAgIGJvdW5kcy5oZWlnaHQgPSBtYXhZIC0gbWluWTtcblxuICAgIC8vIHN0b3JlIGEgcmVmZXJlbmNlIHNvIHRoYXQgaWYgdGhpcyBmdW5jdGlvbiBnZXRzIGNhbGxlZCBhZ2FpbiBpbiB0aGUgcmVuZGVyIGN5Y2xlIHdlIGRvIG5vdCBoYXZlIHRvIHJlY2FsY3VsYXRlXG4gICAgdGhpcy5fY3VycmVudEJvdW5kcyA9IGJvdW5kcztcblxuICAgIHJldHVybiBib3VuZHM7XG59O1xuXG4vKipcbiAqIENoZWNrcyBpZiBhIHBvaW50IGlzIGluc2lkZSB0aGlzIHRpbGluZyBzcHJpdGVcbiAqIEBwYXJhbSBwb2ludCB7UElYSS5Qb2ludH0gdGhlIHBvaW50IHRvIGNoZWNrXG4gKi9cblRpbGluZ1Nwcml0ZS5wcm90b3R5cGUuY29udGFpbnNQb2ludCA9IGZ1bmN0aW9uKCBwb2ludCApXG57XG4gICAgdGhpcy53b3JsZFRyYW5zZm9ybS5hcHBseUludmVyc2UocG9pbnQsICB0ZW1wUG9pbnQpO1xuXG4gICAgdmFyIHdpZHRoID0gdGhpcy5fd2lkdGg7XG4gICAgdmFyIGhlaWdodCA9IHRoaXMuX2hlaWdodDtcbiAgICB2YXIgeDEgPSAtd2lkdGggKiB0aGlzLmFuY2hvci54O1xuICAgIHZhciB5MTtcblxuICAgIGlmICggdGVtcFBvaW50LnggPiB4MSAmJiB0ZW1wUG9pbnQueCA8IHgxICsgd2lkdGggKVxuICAgIHtcbiAgICAgICAgeTEgPSAtaGVpZ2h0ICogdGhpcy5hbmNob3IueTtcblxuICAgICAgICBpZiAoIHRlbXBQb2ludC55ID4geTEgJiYgdGVtcFBvaW50LnkgPCB5MSArIGhlaWdodCApXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xufTtcblxuLyoqXG4gKiBEZXN0cm95cyB0aGlzIHRpbGluZyBzcHJpdGVcbiAqXG4gKi9cblRpbGluZ1Nwcml0ZS5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uICgpIHtcbiAgICBjb3JlLlNwcml0ZS5wcm90b3R5cGUuZGVzdHJveS5jYWxsKHRoaXMpO1xuXG4gICAgdGhpcy50aWxlU2NhbGUgPSBudWxsO1xuICAgIHRoaXMuX3RpbGVTY2FsZU9mZnNldCA9IG51bGw7XG4gICAgdGhpcy50aWxlUG9zaXRpb24gPSBudWxsO1xuXG4gICAgdGhpcy5fdXZzID0gbnVsbDtcbn07XG5cbi8qKlxuICogSGVscGVyIGZ1bmN0aW9uIHRoYXQgY3JlYXRlcyBhIHRpbGluZyBzcHJpdGUgdGhhdCB3aWxsIHVzZSBhIHRleHR1cmUgZnJvbSB0aGUgVGV4dHVyZUNhY2hlIGJhc2VkIG9uIHRoZSBmcmFtZUlkXG4gKiBUaGUgZnJhbWUgaWRzIGFyZSBjcmVhdGVkIHdoZW4gYSBUZXh0dXJlIHBhY2tlciBmaWxlIGhhcyBiZWVuIGxvYWRlZFxuICpcbiAqIEBzdGF0aWNcbiAqIEBwYXJhbSBmcmFtZUlkIHtzdHJpbmd9IFRoZSBmcmFtZSBJZCBvZiB0aGUgdGV4dHVyZSBpbiB0aGUgY2FjaGVcbiAqIEByZXR1cm4ge1BJWEkuZXh0cmFzLlRpbGluZ1Nwcml0ZX0gQSBuZXcgVGlsaW5nU3ByaXRlIHVzaW5nIGEgdGV4dHVyZSBmcm9tIHRoZSB0ZXh0dXJlIGNhY2hlIG1hdGNoaW5nIHRoZSBmcmFtZUlkXG4gKiBAcGFyYW0gd2lkdGgge251bWJlcn0gIHRoZSB3aWR0aCBvZiB0aGUgdGlsaW5nIHNwcml0ZVxuICogQHBhcmFtIGhlaWdodCB7bnVtYmVyfSB0aGUgaGVpZ2h0IG9mIHRoZSB0aWxpbmcgc3ByaXRlXG4gKi9cblRpbGluZ1Nwcml0ZS5mcm9tRnJhbWUgPSBmdW5jdGlvbiAoZnJhbWVJZCx3aWR0aCxoZWlnaHQpXG57XG4gICAgdmFyIHRleHR1cmUgPSBjb3JlLnV0aWxzLlRleHR1cmVDYWNoZVtmcmFtZUlkXTtcblxuICAgIGlmICghdGV4dHVyZSlcbiAgICB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignVGhlIGZyYW1lSWQgXCInICsgZnJhbWVJZCArICdcIiBkb2VzIG5vdCBleGlzdCBpbiB0aGUgdGV4dHVyZSBjYWNoZSAnICsgdGhpcyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBUaWxpbmdTcHJpdGUodGV4dHVyZSx3aWR0aCxoZWlnaHQpO1xufTtcblxuLyoqXG4gKiBIZWxwZXIgZnVuY3Rpb24gdGhhdCBjcmVhdGVzIGEgc3ByaXRlIHRoYXQgd2lsbCBjb250YWluIGEgdGV4dHVyZSBiYXNlZCBvbiBhbiBpbWFnZSB1cmxcbiAqIElmIHRoZSBpbWFnZSBpcyBub3QgaW4gdGhlIHRleHR1cmUgY2FjaGUgaXQgd2lsbCBiZSBsb2FkZWRcbiAqXG4gKiBAc3RhdGljXG4gKiBAcGFyYW0gaW1hZ2VJZCB7c3RyaW5nfSBUaGUgaW1hZ2UgdXJsIG9mIHRoZSB0ZXh0dXJlXG4gKiBAcGFyYW0gd2lkdGgge251bWJlcn0gIHRoZSB3aWR0aCBvZiB0aGUgdGlsaW5nIHNwcml0ZVxuICogQHBhcmFtIGhlaWdodCB7bnVtYmVyfSB0aGUgaGVpZ2h0IG9mIHRoZSB0aWxpbmcgc3ByaXRlXG4gKiBAcGFyYW0gW2Nyb3Nzb3JpZ2luPShhdXRvKV0ge2Jvb2xlYW59IGlmIHlvdSB3YW50IHRvIHNwZWNpZnkgdGhlIGNyb3NzLW9yaWdpbiBwYXJhbWV0ZXJcbiAqIEBwYXJhbSBbc2NhbGVNb2RlPVBJWEkuU0NBTEVfTU9ERVMuREVGQVVMVF0ge251bWJlcn0gaWYgeW91IHdhbnQgdG8gc3BlY2lmeSB0aGUgc2NhbGUgbW9kZSwgc2VlIHtAbGluayBQSVhJLlNDQUxFX01PREVTfSBmb3IgcG9zc2libGUgdmFsdWVzXG4gKiBAcmV0dXJuIHtQSVhJLmV4dHJhcy5UaWxpbmdTcHJpdGV9IEEgbmV3IFRpbGluZ1Nwcml0ZSB1c2luZyBhIHRleHR1cmUgZnJvbSB0aGUgdGV4dHVyZSBjYWNoZSBtYXRjaGluZyB0aGUgaW1hZ2UgaWRcbiAqL1xuVGlsaW5nU3ByaXRlLmZyb21JbWFnZSA9IGZ1bmN0aW9uIChpbWFnZUlkLCB3aWR0aCwgaGVpZ2h0LCBjcm9zc29yaWdpbiwgc2NhbGVNb2RlKVxue1xuICAgIHJldHVybiBuZXcgVGlsaW5nU3ByaXRlKGNvcmUuVGV4dHVyZS5mcm9tSW1hZ2UoaW1hZ2VJZCwgY3Jvc3NvcmlnaW4sIHNjYWxlTW9kZSksd2lkdGgsaGVpZ2h0KTtcbn07XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uL2NvcmUnKSxcbiAgICBEaXNwbGF5T2JqZWN0ID0gY29yZS5EaXNwbGF5T2JqZWN0LFxuICAgIF90ZW1wTWF0cml4ID0gbmV3IGNvcmUuTWF0cml4KCk7XG5cbkRpc3BsYXlPYmplY3QucHJvdG90eXBlLl9jYWNoZUFzQml0bWFwID0gZmFsc2U7XG5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS5fb3JpZ2luYWxSZW5kZXJXZWJHTCA9IG51bGw7XG5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS5fb3JpZ2luYWxSZW5kZXJDYW52YXMgPSBudWxsO1xuXG5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS5fb3JpZ2luYWxVcGRhdGVUcmFuc2Zvcm0gPSBudWxsO1xuRGlzcGxheU9iamVjdC5wcm90b3R5cGUuX29yaWdpbmFsSGl0VGVzdCA9IG51bGw7XG5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS5fb3JpZ2luYWxEZXN0cm95ID0gbnVsbDtcbkRpc3BsYXlPYmplY3QucHJvdG90eXBlLl9jYWNoZWRTcHJpdGUgPSBudWxsO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhEaXNwbGF5T2JqZWN0LnByb3RvdHlwZSwge1xuXG4gICAgLyoqXG4gICAgICogU2V0IHRoaXMgdG8gdHJ1ZSBpZiB5b3Ugd2FudCB0aGlzIGRpc3BsYXkgb2JqZWN0IHRvIGJlIGNhY2hlZCBhcyBhIGJpdG1hcC5cbiAgICAgKiBUaGlzIGJhc2ljYWxseSB0YWtlcyBhIHNuYXAgc2hvdCBvZiB0aGUgZGlzcGxheSBvYmplY3QgYXMgaXQgaXMgYXQgdGhhdCBtb21lbnQuIEl0IGNhbiBwcm92aWRlIGEgcGVyZm9ybWFuY2UgYmVuZWZpdCBmb3IgY29tcGxleCBzdGF0aWMgZGlzcGxheU9iamVjdHMuXG4gICAgICogVG8gcmVtb3ZlIHNpbXBseSBzZXQgdGhpcyBwcm9wZXJ0eSB0byAnZmFsc2UnXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLkRpc3BsYXlPYmplY3QjXG4gICAgICovXG4gICAgY2FjaGVBc0JpdG1hcDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9jYWNoZUFzQml0bWFwO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgaWYgKHRoaXMuX2NhY2hlQXNCaXRtYXAgPT09IHZhbHVlKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5fY2FjaGVBc0JpdG1hcCA9IHZhbHVlO1xuXG4gICAgICAgICAgICBpZiAodmFsdWUpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdGhpcy5fb3JpZ2luYWxSZW5kZXJXZWJHTCA9IHRoaXMucmVuZGVyV2ViR0w7XG4gICAgICAgICAgICAgICAgdGhpcy5fb3JpZ2luYWxSZW5kZXJDYW52YXMgPSB0aGlzLnJlbmRlckNhbnZhcztcblxuICAgICAgICAgICAgICAgIHRoaXMuX29yaWdpbmFsVXBkYXRlVHJhbnNmb3JtID0gdGhpcy51cGRhdGVUcmFuc2Zvcm07XG4gICAgICAgICAgICAgICAgdGhpcy5fb3JpZ2luYWxHZXRCb3VuZHMgPSB0aGlzLmdldEJvdW5kcztcblxuICAgICAgICAgICAgICAgIHRoaXMuX29yaWdpbmFsRGVzdHJveSA9IHRoaXMuZGVzdHJveTtcblxuICAgICAgICAgICAgICAgIHRoaXMuX29yaWdpbmFsQ29udGFpbnNQb2ludCA9IHRoaXMuY29udGFpbnNQb2ludDtcblxuICAgICAgICAgICAgICAgIHRoaXMucmVuZGVyV2ViR0wgPSB0aGlzLl9yZW5kZXJDYWNoZWRXZWJHTDtcbiAgICAgICAgICAgICAgICB0aGlzLnJlbmRlckNhbnZhcyA9IHRoaXMuX3JlbmRlckNhY2hlZENhbnZhcztcblxuICAgICAgICAgICAgICAgIHRoaXMuZGVzdHJveSA9IHRoaXMuX2NhY2hlQXNCaXRtYXBEZXN0cm95O1xuXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuX2NhY2hlZFNwcml0ZSlcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2Rlc3Ryb3lDYWNoZWREaXNwbGF5T2JqZWN0KCk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgdGhpcy5yZW5kZXJXZWJHTCA9IHRoaXMuX29yaWdpbmFsUmVuZGVyV2ViR0w7XG4gICAgICAgICAgICAgICAgdGhpcy5yZW5kZXJDYW52YXMgPSB0aGlzLl9vcmlnaW5hbFJlbmRlckNhbnZhcztcbiAgICAgICAgICAgICAgICB0aGlzLmdldEJvdW5kcyA9IHRoaXMuX29yaWdpbmFsR2V0Qm91bmRzO1xuXG4gICAgICAgICAgICAgICAgdGhpcy5kZXN0cm95ID0gdGhpcy5fb3JpZ2luYWxEZXN0cm95O1xuXG4gICAgICAgICAgICAgICAgdGhpcy51cGRhdGVUcmFuc2Zvcm0gPSB0aGlzLl9vcmlnaW5hbFVwZGF0ZVRyYW5zZm9ybTtcbiAgICAgICAgICAgICAgICB0aGlzLmNvbnRhaW5zUG9pbnQgPSB0aGlzLl9vcmlnaW5hbENvbnRhaW5zUG9pbnQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG59KTtcbi8qKlxuKiBSZW5kZXJzIGEgY2FjaGVkIHZlcnNpb24gb2YgdGhlIHNwcml0ZSB3aXRoIFdlYkdMXG4qXG4qIEBwYXJhbSByZW5kZXJlciB7UElYSS5XZWJHTFJlbmRlcmVyfSB0aGUgV2ViR0wgcmVuZGVyZXJcbiogQHByaXZhdGVcbiovXG5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS5fcmVuZGVyQ2FjaGVkV2ViR0wgPSBmdW5jdGlvbiAocmVuZGVyZXIpXG57XG4gICAgaWYgKCF0aGlzLnZpc2libGUgfHwgdGhpcy53b3JsZEFscGhhIDw9IDAgfHwgIXRoaXMucmVuZGVyYWJsZSlcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLl9pbml0Q2FjaGVkRGlzcGxheU9iamVjdCggcmVuZGVyZXIgKTtcblxuICAgIHRoaXMuX2NhY2hlZFNwcml0ZS53b3JsZEFscGhhID0gdGhpcy53b3JsZEFscGhhO1xuXG4gICAgcmVuZGVyZXIuc2V0T2JqZWN0UmVuZGVyZXIocmVuZGVyZXIucGx1Z2lucy5zcHJpdGUpO1xuICAgIHJlbmRlcmVyLnBsdWdpbnMuc3ByaXRlLnJlbmRlciggdGhpcy5fY2FjaGVkU3ByaXRlICk7XG59O1xuXG4vKipcbiogUHJlcGFyZXMgdGhlIFdlYkdMIHJlbmRlcmVyIHRvIGNhY2hlIHRoZSBzcHJpdGVcbipcbiogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLldlYkdMUmVuZGVyZXJ9IHRoZSBXZWJHTCByZW5kZXJlclxuKiBAcHJpdmF0ZVxuKi9cbkRpc3BsYXlPYmplY3QucHJvdG90eXBlLl9pbml0Q2FjaGVkRGlzcGxheU9iamVjdCA9IGZ1bmN0aW9uIChyZW5kZXJlcilcbntcbiAgICBpZih0aGlzLl9jYWNoZWRTcHJpdGUpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gZmlyc3Qgd2UgZmx1c2ggYW55dGhpbmcgbGVmdCBpbiB0aGUgcmVuZGVyZXIgKG90aGVyd2lzZSBpdCB3b3VsZCBnZXQgcmVuZGVyZWQgdG8gdGhlIGNhY2hlZCB0ZXh0dXJlKVxuICAgIHJlbmRlcmVyLmN1cnJlbnRSZW5kZXJlci5mbHVzaCgpO1xuICAgIC8vdGhpcy5maWx0ZXJzPSBbXTtcbiAgICAvLyBuZXh0IHdlIGZpbmQgdGhlIGRpbWVuc2lvbnMgb2YgdGhlIHVudHJhbnNmb3JtZWQgb2JqZWN0XG4gICAgLy8gdGhpcyBmdW5jdGlvbiBhbHNvIGNhbGxzIHVwZGF0ZXRyYW5zZm9ybSBvbiBhbGwgaXRzIGNoaWxkcmVuIGFzIHBhcnQgb2YgdGhlIG1lYXN1cmluZy4gVGhpcyBtZWFucyB3ZSBkb24ndCBuZWVkIHRvIHVwZGF0ZSB0aGUgdHJhbnNmb3JtIGFnYWluIGluIHRoaXMgZnVuY3Rpb25cbiAgICAvLyBUT0RPIHBhc3MgYW4gb2JqZWN0IHRvIGNsb25lIHRvbz8gc2F2ZXMgaGF2aW5nIHRvIGNyZWF0ZSBhIG5ldyBvbmUgZWFjaCB0aW1lIVxuICAgIHZhciBib3VuZHMgPSB0aGlzLmdldExvY2FsQm91bmRzKCkuY2xvbmUoKTtcblxuICAgIC8vIGFkZCBzb21lIHBhZGRpbmchXG4gICAgaWYodGhpcy5fZmlsdGVycylcbiAgICB7XG4gICAgICAgIHZhciBwYWRkaW5nID0gdGhpcy5fZmlsdGVyc1swXS5wYWRkaW5nO1xuICAgICAgICBib3VuZHMueCAtPSBwYWRkaW5nO1xuICAgICAgICBib3VuZHMueSAtPSBwYWRkaW5nO1xuXG4gICAgICAgIGJvdW5kcy53aWR0aCArPSBwYWRkaW5nICogMjtcbiAgICAgICAgYm91bmRzLmhlaWdodCArPSBwYWRkaW5nICogMjtcbiAgICB9XG5cbiAgICAvLyBmb3Igbm93IHdlIGNhY2hlIHRoZSBjdXJyZW50IHJlbmRlclRhcmdldCB0aGF0IHRoZSB3ZWJHTCByZW5kZXJlciBpcyBjdXJyZW50bHkgdXNpbmcuXG4gICAgLy8gdGhpcyBjb3VsZCBiZSBtb3JlIGVsZWdlbnQuLlxuICAgIHZhciBjYWNoZWRSZW5kZXJUYXJnZXQgPSByZW5kZXJlci5jdXJyZW50UmVuZGVyVGFyZ2V0O1xuICAgIC8vIFdlIGFsc28gc3RvcmUgdGhlIGZpbHRlciBzdGFjayAtIEkgd2lsbCBkZWZpbml0ZWx5IGxvb2sgdG8gY2hhbmdlIGhvdyB0aGlzIHdvcmtzIGEgbGl0dGxlIGxhdGVyIGRvd24gdGhlIGxpbmUuXG4gICAgdmFyIHN0YWNrID0gcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5maWx0ZXJTdGFjaztcblxuICAgIC8vIHRoaXMgcmVuZGVyVGV4dHVyZSB3aWxsIGJlIHVzZWQgdG8gc3RvcmUgdGhlIGNhY2hlZCBEaXNwbGF5T2JqZWN0XG4gICAgdmFyIHJlbmRlclRleHR1cmUgPSBuZXcgY29yZS5SZW5kZXJUZXh0dXJlKHJlbmRlcmVyLCBib3VuZHMud2lkdGggfCAwLCBib3VuZHMuaGVpZ2h0IHwgMCk7XG5cbiAgICAvLyBuZWVkIHRvIHNldCAvL1xuICAgIHZhciBtID0gX3RlbXBNYXRyaXg7XG5cbiAgICBtLnR4ID0gLWJvdW5kcy54O1xuICAgIG0udHkgPSAtYm91bmRzLnk7XG5cblxuXG4gICAgLy8gc2V0IGFsbCBwcm9wZXJ0aWVzIHRvIHRoZXJlIG9yaWdpbmFsIHNvIHdlIGNhbiByZW5kZXIgdG8gYSB0ZXh0dXJlXG4gICAgdGhpcy5yZW5kZXJXZWJHTCA9IHRoaXMuX29yaWdpbmFsUmVuZGVyV2ViR0w7XG5cbiAgICByZW5kZXJUZXh0dXJlLnJlbmRlcih0aGlzLCBtLCB0cnVlLCB0cnVlKTtcblxuICAgIC8vIG5vdyByZXN0b3JlIHRoZSBzdGF0ZSBiZSBzZXR0aW5nIHRoZSBuZXcgcHJvcGVydGllc1xuICAgIHJlbmRlcmVyLnNldFJlbmRlclRhcmdldChjYWNoZWRSZW5kZXJUYXJnZXQpO1xuICAgIHJlbmRlcmVyLmZpbHRlck1hbmFnZXIuZmlsdGVyU3RhY2sgPSBzdGFjaztcblxuICAgIHRoaXMucmVuZGVyV2ViR0wgICAgID0gdGhpcy5fcmVuZGVyQ2FjaGVkV2ViR0w7XG4gICAgdGhpcy51cGRhdGVUcmFuc2Zvcm0gPSB0aGlzLmRpc3BsYXlPYmplY3RVcGRhdGVUcmFuc2Zvcm07XG4gICAgdGhpcy5nZXRCb3VuZHMgICAgICAgPSB0aGlzLl9nZXRDYWNoZWRCb3VuZHM7XG5cblxuICAgIC8vIGNyZWF0ZSBvdXIgY2FjaGVkIHNwcml0ZVxuICAgIHRoaXMuX2NhY2hlZFNwcml0ZSA9IG5ldyBjb3JlLlNwcml0ZShyZW5kZXJUZXh0dXJlKTtcbiAgICB0aGlzLl9jYWNoZWRTcHJpdGUud29ybGRUcmFuc2Zvcm0gPSB0aGlzLndvcmxkVHJhbnNmb3JtO1xuICAgIHRoaXMuX2NhY2hlZFNwcml0ZS5hbmNob3IueCA9IC0oIGJvdW5kcy54IC8gYm91bmRzLndpZHRoICk7XG4gICAgdGhpcy5fY2FjaGVkU3ByaXRlLmFuY2hvci55ID0gLSggYm91bmRzLnkgLyBib3VuZHMuaGVpZ2h0ICk7XG5cbiAgICAvLyByZXN0b3JlIHRoZSB0cmFuc2Zvcm0gb2YgdGhlIGNhY2hlZCBzcHJpdGUgdG8gYXZvaWQgdGhlIG5hc3R5IGZsaWNrZXIuLlxuICAgIHRoaXMudXBkYXRlVHJhbnNmb3JtKCk7XG5cbiAgICAvLyBtYXAgdGhlIGhpdCB0ZXN0Li5cbiAgICB0aGlzLmNvbnRhaW5zUG9pbnQgPSB0aGlzLl9jYWNoZWRTcHJpdGUuY29udGFpbnNQb2ludC5iaW5kKHRoaXMuX2NhY2hlZFNwcml0ZSk7XG59O1xuXG4vKipcbiogUmVuZGVycyBhIGNhY2hlZCB2ZXJzaW9uIG9mIHRoZSBzcHJpdGUgd2l0aCBjYW52YXNcbipcbiogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLkNhbnZhc1JlbmRlcmVyfSB0aGUgQ2FudmFzIHJlbmRlcmVyXG4qIEBwcml2YXRlXG4qL1xuRGlzcGxheU9iamVjdC5wcm90b3R5cGUuX3JlbmRlckNhY2hlZENhbnZhcyA9IGZ1bmN0aW9uIChyZW5kZXJlcilcbntcbiAgICBpZiAoIXRoaXMudmlzaWJsZSB8fCB0aGlzLndvcmxkQWxwaGEgPD0gMCB8fCAhdGhpcy5yZW5kZXJhYmxlKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuX2luaXRDYWNoZWREaXNwbGF5T2JqZWN0Q2FudmFzKCByZW5kZXJlciApO1xuXG4gICAgdGhpcy5fY2FjaGVkU3ByaXRlLndvcmxkQWxwaGEgPSB0aGlzLndvcmxkQWxwaGE7XG5cbiAgICB0aGlzLl9jYWNoZWRTcHJpdGUucmVuZGVyQ2FudmFzKHJlbmRlcmVyKTtcbn07XG5cbi8vVE9ETyB0aGlzIGNhbiBiZSB0aGUgc2FtZSBhcyB0aGUgd2ViR0wgdmVyaXNvbi4uIHdpbGwgbmVlZCB0byBkbyBhIGxpdHRsZSB0d2Vha2luZyBmaXJzdCB0aG91Z2guLlxuLyoqXG4qIFByZXBhcmVzIHRoZSBDYW52YXMgcmVuZGVyZXIgdG8gY2FjaGUgdGhlIHNwcml0ZVxuKlxuKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuQ2FudmFzUmVuZGVyZXJ9IHRoZSBDYW52YXMgcmVuZGVyZXJcbiogQHByaXZhdGVcbiovXG5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS5faW5pdENhY2hlZERpc3BsYXlPYmplY3RDYW52YXMgPSBmdW5jdGlvbiAocmVuZGVyZXIpXG57XG4gICAgaWYodGhpcy5fY2FjaGVkU3ByaXRlKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vZ2V0IGJvdW5kcyBhY3R1YWxseSB0cmFuc2Zvcm1zIHRoZSBvYmplY3QgZm9yIHVzIGFscmVhZHkhXG4gICAgdmFyIGJvdW5kcyA9IHRoaXMuZ2V0TG9jYWxCb3VuZHMoKTtcblxuICAgIHZhciBjYWNoZWRSZW5kZXJUYXJnZXQgPSByZW5kZXJlci5jb250ZXh0O1xuXG4gICAgdmFyIHJlbmRlclRleHR1cmUgPSBuZXcgY29yZS5SZW5kZXJUZXh0dXJlKHJlbmRlcmVyLCBib3VuZHMud2lkdGggfCAwLCBib3VuZHMuaGVpZ2h0IHwgMCk7XG5cbiAgICAvLyBuZWVkIHRvIHNldCAvL1xuICAgIHZhciBtID0gX3RlbXBNYXRyaXg7XG5cbiAgICBtLnR4ID0gLWJvdW5kcy54O1xuICAgIG0udHkgPSAtYm91bmRzLnk7XG5cbiAgICAvLyBzZXQgYWxsIHByb3BlcnRpZXMgdG8gdGhlcmUgb3JpZ2luYWwgc28gd2UgY2FuIHJlbmRlciB0byBhIHRleHR1cmVcbiAgICB0aGlzLnJlbmRlckNhbnZhcyA9IHRoaXMuX29yaWdpbmFsUmVuZGVyQ2FudmFzO1xuXG4gICAgcmVuZGVyVGV4dHVyZS5yZW5kZXIodGhpcywgbSwgdHJ1ZSk7XG5cbiAgICAvLyBub3cgcmVzdG9yZSB0aGUgc3RhdGUgYmUgc2V0dGluZyB0aGUgbmV3IHByb3BlcnRpZXNcbiAgICByZW5kZXJlci5jb250ZXh0ID0gY2FjaGVkUmVuZGVyVGFyZ2V0O1xuXG4gICAgdGhpcy5yZW5kZXJDYW52YXMgPSB0aGlzLl9yZW5kZXJDYWNoZWRDYW52YXM7XG4gICAgdGhpcy51cGRhdGVUcmFuc2Zvcm0gPSB0aGlzLmRpc3BsYXlPYmplY3RVcGRhdGVUcmFuc2Zvcm07XG4gICAgdGhpcy5nZXRCb3VuZHMgID0gdGhpcy5fZ2V0Q2FjaGVkQm91bmRzO1xuXG5cbiAgICAvLyBjcmVhdGUgb3VyIGNhY2hlZCBzcHJpdGVcbiAgICB0aGlzLl9jYWNoZWRTcHJpdGUgPSBuZXcgY29yZS5TcHJpdGUocmVuZGVyVGV4dHVyZSk7XG4gICAgdGhpcy5fY2FjaGVkU3ByaXRlLndvcmxkVHJhbnNmb3JtID0gdGhpcy53b3JsZFRyYW5zZm9ybTtcbiAgICB0aGlzLl9jYWNoZWRTcHJpdGUuYW5jaG9yLnggPSAtKCBib3VuZHMueCAvIGJvdW5kcy53aWR0aCApO1xuICAgIHRoaXMuX2NhY2hlZFNwcml0ZS5hbmNob3IueSA9IC0oIGJvdW5kcy55IC8gYm91bmRzLmhlaWdodCApO1xuXG4gICAgdGhpcy51cGRhdGVUcmFuc2Zvcm0oKTtcblxuICAgIHRoaXMuY29udGFpbnNQb2ludCA9IHRoaXMuX2NhY2hlZFNwcml0ZS5jb250YWluc1BvaW50LmJpbmQodGhpcy5fY2FjaGVkU3ByaXRlKTtcbn07XG5cbi8qKlxuKiBDYWxjdWxhdGVzIHRoZSBib3VuZHMgb2YgdGhlIGNhY2hlZCBzcHJpdGVcbipcbiogQHByaXZhdGVcbiovXG5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS5fZ2V0Q2FjaGVkQm91bmRzID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLl9jYWNoZWRTcHJpdGUuX2N1cnJlbnRCb3VuZHMgPSBudWxsO1xuXG4gICAgcmV0dXJuIHRoaXMuX2NhY2hlZFNwcml0ZS5nZXRCb3VuZHMoKTtcbn07XG5cbi8qKlxuKiBEZXN0cm95cyB0aGUgY2FjaGVkIHNwcml0ZS5cbipcbiogQHByaXZhdGVcbiovXG5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS5fZGVzdHJveUNhY2hlZERpc3BsYXlPYmplY3QgPSBmdW5jdGlvbiAoKVxue1xuICAgIHRoaXMuX2NhY2hlZFNwcml0ZS5fdGV4dHVyZS5kZXN0cm95KCk7XG4gICAgdGhpcy5fY2FjaGVkU3ByaXRlID0gbnVsbDtcbn07XG5cbkRpc3BsYXlPYmplY3QucHJvdG90eXBlLl9jYWNoZUFzQml0bWFwRGVzdHJveSA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy5jYWNoZUFzQml0bWFwID0gZmFsc2U7XG4gICAgdGhpcy5fb3JpZ2luYWxEZXN0cm95KCk7XG59O1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi9jb3JlJyk7XG5cbi8qKlxuICogVGhlIGluc3RhbmNlIG5hbWUgb2YgdGhlIG9iamVjdC5cbiAqXG4gKiBAbWVtYmVyb2YgUElYSS5EaXNwbGF5T2JqZWN0I1xuICogQG1lbWJlciB7c3RyaW5nfVxuICovXG5jb3JlLkRpc3BsYXlPYmplY3QucHJvdG90eXBlLm5hbWUgPSBudWxsO1xuXG4vKipcbiogUmV0dXJucyB0aGUgZGlzcGxheSBvYmplY3QgaW4gdGhlIGNvbnRhaW5lclxuKlxuKiBAbWVtYmVyb2YgUElYSS5Db250YWluZXIjXG4qIEBwYXJhbSBuYW1lIHtzdHJpbmd9IGluc3RhbmNlIG5hbWVcbiogQHJldHVybiB7UElYSS5EaXNwbGF5T2JqZWN0fVxuKi9cbmNvcmUuQ29udGFpbmVyLnByb3RvdHlwZS5nZXRDaGlsZEJ5TmFtZSA9IGZ1bmN0aW9uIChuYW1lKVxue1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5jaGlsZHJlbi5sZW5ndGg7IGkrKylcbiAgICB7XG4gICAgICAgIGlmICh0aGlzLmNoaWxkcmVuW2ldLm5hbWUgPT09IG5hbWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmNoaWxkcmVuW2ldO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xufTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vY29yZScpO1xuXG4vKipcbiogUmV0dXJucyB0aGUgZ2xvYmFsIHBvc2l0aW9uIG9mIHRoZSBkaXNwbGF5T2JqZWN0XG4qXG4qIEBtZW1iZXJvZiBQSVhJLkRpc3BsYXlPYmplY3QjXG4qIEBwYXJhbSBwb2ludCB7UG9pbnR9IHRoZSBwb2ludCB0byB3cml0ZSB0aGUgZ2xvYmFsIHZhbHVlIHRvLiBJZiBudWxsIGEgbmV3IHBvaW50IHdpbGwgYmUgcmV0dXJuZWRcbiogQHJldHVybiB7UG9pbnR9XG4qL1xuY29yZS5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS5nZXRHbG9iYWxQb3NpdGlvbiA9IGZ1bmN0aW9uIChwb2ludClcbntcbiAgICBwb2ludCA9IHBvaW50IHx8IG5ldyBjb3JlLlBvaW50KCk7XG5cbiAgICBpZih0aGlzLnBhcmVudClcbiAgICB7XG4gICAgICAgIHRoaXMuZGlzcGxheU9iamVjdFVwZGF0ZVRyYW5zZm9ybSgpO1xuXG4gICAgICAgIHBvaW50LnggPSB0aGlzLndvcmxkVHJhbnNmb3JtLnR4O1xuICAgICAgICBwb2ludC55ID0gdGhpcy53b3JsZFRyYW5zZm9ybS50eTtcbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgcG9pbnQueCA9IHRoaXMucG9zaXRpb24ueDtcbiAgICAgICAgcG9pbnQueSA9IHRoaXMucG9zaXRpb24ueTtcbiAgICB9XG5cbiAgICByZXR1cm4gcG9pbnQ7XG59O1xuIiwiLyoqXG4gKiBAZmlsZSAgICAgICAgTWFpbiBleHBvcnQgb2YgdGhlIFBJWEkgZXh0cmFzIGxpYnJhcnlcbiAqIEBhdXRob3IgICAgICBNYXQgR3JvdmVzIDxtYXRAZ29vZGJveWRpZ2l0YWwuY29tPlxuICogQGNvcHlyaWdodCAgIDIwMTMtMjAxNSBHb29kQm95RGlnaXRhbFxuICogQGxpY2Vuc2UgICAgIHtAbGluayBodHRwczovL2dpdGh1Yi5jb20vcGl4aWpzL3BpeGkuanMvYmxvYi9tYXN0ZXIvTElDRU5TRXxNSVQgTGljZW5zZX1cbiAqL1xuXG5yZXF1aXJlKCcuL2NhY2hlQXNCaXRtYXAnKTtcbnJlcXVpcmUoJy4vZ2V0Q2hpbGRCeU5hbWUnKTtcbnJlcXVpcmUoJy4vZ2V0R2xvYmFsUG9zaXRpb24nKTtcblxuLyoqXG4gKiBAbmFtZXNwYWNlIFBJWEkuZXh0cmFzXG4gKi9cbm1vZHVsZS5leHBvcnRzID0ge1xuICAgIE1vdmllQ2xpcDogICAgICByZXF1aXJlKCcuL01vdmllQ2xpcCcpLFxuICAgIFRpbGluZ1Nwcml0ZTogICByZXF1aXJlKCcuL1RpbGluZ1Nwcml0ZScpLFxuICAgIEJpdG1hcFRleHQ6ICAgICByZXF1aXJlKCcuL0JpdG1hcFRleHQnKVxufTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vLi4vY29yZScpO1xuLy8gQHNlZSBodHRwczovL2dpdGh1Yi5jb20vc3Vic3RhY2svYnJmcy9pc3N1ZXMvMjVcblxuXG4vLyBUT0RPIChjZW5nbGVyKSAtIFRoZSBZIGlzIGZsaXBwZWQgaW4gdGhpcyBzaGFkZXIgZm9yIHNvbWUgcmVhc29uLlxuXG4vKipcbiAqIEBhdXRob3IgVmljbyBAdmljb2NvdGVhXG4gKiBvcmlnaW5hbCBzaGFkZXIgOiBodHRwczovL3d3dy5zaGFkZXJ0b3kuY29tL3ZpZXcvbHNzR0RqIGJ5IEBtb3ZBWDEzaFxuICovXG5cbi8qKlxuICogQW4gQVNDSUkgZmlsdGVyLlxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5BYnN0cmFjdEZpbHRlclxuICogQG1lbWJlcm9mIFBJWEkuZmlsdGVyc1xuICovXG5mdW5jdGlvbiBBc2NpaUZpbHRlcigpXG57XG4gICAgY29yZS5BYnN0cmFjdEZpbHRlci5jYWxsKHRoaXMsXG4gICAgICAgIC8vIHZlcnRleCBzaGFkZXJcbiAgICAgICAgbnVsbCxcbiAgICAgICAgLy8gZnJhZ21lbnQgc2hhZGVyXG4gICAgICAgIFwicHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XFxuXFxudW5pZm9ybSB2ZWM0IGRpbWVuc2lvbnM7XFxudW5pZm9ybSBmbG9hdCBwaXhlbFNpemU7XFxudW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXI7XFxuXFxuZmxvYXQgY2hhcmFjdGVyKGZsb2F0IG4sIHZlYzIgcClcXG57XFxuICAgIHAgPSBmbG9vcihwKnZlYzIoNC4wLCAtNC4wKSArIDIuNSk7XFxuICAgIGlmIChjbGFtcChwLngsIDAuMCwgNC4wKSA9PSBwLnggJiYgY2xhbXAocC55LCAwLjAsIDQuMCkgPT0gcC55KVxcbiAgICB7XFxuICAgICAgICBpZiAoaW50KG1vZChuL2V4cDIocC54ICsgNS4wKnAueSksIDIuMCkpID09IDEpIHJldHVybiAxLjA7XFxuICAgIH1cXG4gICAgcmV0dXJuIDAuMDtcXG59XFxuXFxudm9pZCBtYWluKClcXG57XFxuICAgIHZlYzIgdXYgPSBnbF9GcmFnQ29vcmQueHk7XFxuXFxuICAgIHZlYzMgY29sID0gdGV4dHVyZTJEKHVTYW1wbGVyLCBmbG9vciggdXYgLyBwaXhlbFNpemUgKSAqIHBpeGVsU2l6ZSAvIGRpbWVuc2lvbnMueHkpLnJnYjtcXG5cXG4gICAgZmxvYXQgZ3JheSA9IChjb2wuciArIGNvbC5nICsgY29sLmIpIC8gMy4wO1xcblxcbiAgICBmbG9hdCBuID0gIDY1NTM2LjA7ICAgICAgICAgICAgIC8vIC5cXG4gICAgaWYgKGdyYXkgPiAwLjIpIG4gPSA2NTYwMC4wOyAgICAvLyA6XFxuICAgIGlmIChncmF5ID4gMC4zKSBuID0gMzMyNzcyLjA7ICAgLy8gKlxcbiAgICBpZiAoZ3JheSA+IDAuNCkgbiA9IDE1MjU1MDg2LjA7IC8vIG9cXG4gICAgaWYgKGdyYXkgPiAwLjUpIG4gPSAyMzM4NTE2NC4wOyAvLyAmXFxuICAgIGlmIChncmF5ID4gMC42KSBuID0gMTUyNTIwMTQuMDsgLy8gOFxcbiAgICBpZiAoZ3JheSA+IDAuNykgbiA9IDEzMTk5NDUyLjA7IC8vIEBcXG4gICAgaWYgKGdyYXkgPiAwLjgpIG4gPSAxMTUxMjgxMC4wOyAvLyAjXFxuXFxuICAgIHZlYzIgcCA9IG1vZCggdXYgLyAoIHBpeGVsU2l6ZSAqIDAuNSApLCAyLjApIC0gdmVjMigxLjApO1xcbiAgICBjb2wgPSBjb2wgKiBjaGFyYWN0ZXIobiwgcCk7XFxuXFxuICAgIGdsX0ZyYWdDb2xvciA9IHZlYzQoY29sLCAxLjApO1xcbn1cXG5cIixcbiAgICAgICAgLy8gY3VzdG9tIHVuaWZvcm1zXG4gICAgICAgIHtcbiAgICAgICAgICAgIGRpbWVuc2lvbnM6IHsgdHlwZTogJzRmdicsIHZhbHVlOiBuZXcgRmxvYXQzMkFycmF5KFswLCAwLCAwLCAwXSkgfSxcbiAgICAgICAgICAgIHBpeGVsU2l6ZTogIHsgdHlwZTogJzFmJywgdmFsdWU6IDggfVxuICAgICAgICB9XG4gICAgKTtcbn1cblxuQXNjaWlGaWx0ZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShjb3JlLkFic3RyYWN0RmlsdGVyLnByb3RvdHlwZSk7XG5Bc2NpaUZpbHRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBBc2NpaUZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gQXNjaWlGaWx0ZXI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKEFzY2lpRmlsdGVyLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFRoZSBwaXhlbCBzaXplIHVzZWQgYnkgdGhlIGZpbHRlci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLkFzY2lpRmlsdGVyI1xuICAgICAqL1xuICAgIHNpemU6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy51bmlmb3Jtcy5waXhlbFNpemUudmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLnBpeGVsU2l6ZS52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfVxufSk7XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uLy4uL2NvcmUnKSxcbiAgICBCbHVyWEZpbHRlciA9IHJlcXVpcmUoJy4uL2JsdXIvQmx1clhGaWx0ZXInKSxcbiAgICBCbHVyWUZpbHRlciA9IHJlcXVpcmUoJy4uL2JsdXIvQmx1cllGaWx0ZXInKTtcblxuLyoqXG4gKiBUaGUgQmxvb21GaWx0ZXIgYXBwbGllcyBhIEdhdXNzaWFuIGJsdXIgdG8gYW4gb2JqZWN0LlxuICogVGhlIHN0cmVuZ3RoIG9mIHRoZSBibHVyIGNhbiBiZSBzZXQgZm9yIHgtIGFuZCB5LWF4aXMgc2VwYXJhdGVseS5cbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQWJzdHJhY3RGaWx0ZXJcbiAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnNcbiAqL1xuZnVuY3Rpb24gQmxvb21GaWx0ZXIoKVxue1xuICAgIGNvcmUuQWJzdHJhY3RGaWx0ZXIuY2FsbCh0aGlzKTtcblxuICAgIHRoaXMuYmx1clhGaWx0ZXIgPSBuZXcgQmx1clhGaWx0ZXIoKTtcbiAgICB0aGlzLmJsdXJZRmlsdGVyID0gbmV3IEJsdXJZRmlsdGVyKCk7XG5cbiAgICB0aGlzLmRlZmF1bHRGaWx0ZXIgPSBuZXcgY29yZS5BYnN0cmFjdEZpbHRlcigpO1xufVxuXG5CbG9vbUZpbHRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuQWJzdHJhY3RGaWx0ZXIucHJvdG90eXBlKTtcbkJsb29tRmlsdGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IEJsb29tRmlsdGVyO1xubW9kdWxlLmV4cG9ydHMgPSBCbG9vbUZpbHRlcjtcblxuQmxvb21GaWx0ZXIucHJvdG90eXBlLmFwcGx5RmlsdGVyID0gZnVuY3Rpb24gKHJlbmRlcmVyLCBpbnB1dCwgb3V0cHV0KVxue1xuICAgIHZhciByZW5kZXJUYXJnZXQgPSByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLmdldFJlbmRlclRhcmdldCh0cnVlKTtcblxuICAgIC8vVE9ETyAtIGNvcHlUZXhTdWJJbWFnZTJEIGNvdWxkIGJlIHVzZWQgaGVyZT9cbiAgICB0aGlzLmRlZmF1bHRGaWx0ZXIuYXBwbHlGaWx0ZXIocmVuZGVyZXIsIGlucHV0LCBvdXRwdXQpO1xuXG4gICAgdGhpcy5ibHVyWEZpbHRlci5hcHBseUZpbHRlcihyZW5kZXJlciwgaW5wdXQsIHJlbmRlclRhcmdldCk7XG5cbiAgICByZW5kZXJlci5ibGVuZE1vZGVNYW5hZ2VyLnNldEJsZW5kTW9kZShjb3JlLkJMRU5EX01PREVTLlNDUkVFTik7XG5cbiAgICB0aGlzLmJsdXJZRmlsdGVyLmFwcGx5RmlsdGVyKHJlbmRlcmVyLCByZW5kZXJUYXJnZXQsIG91dHB1dCk7XG5cbiAgICByZW5kZXJlci5ibGVuZE1vZGVNYW5hZ2VyLnNldEJsZW5kTW9kZShjb3JlLkJMRU5EX01PREVTLk5PUk1BTCk7XG5cbiAgICByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLnJldHVyblJlbmRlclRhcmdldChyZW5kZXJUYXJnZXQpO1xufTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoQmxvb21GaWx0ZXIucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgc3RyZW5ndGggb2YgYm90aCB0aGUgYmx1clggYW5kIGJsdXJZIHByb3BlcnRpZXMgc2ltdWx0YW5lb3VzbHlcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyT2YgUElYSS5maWx0ZXJzLkJsb29tRmlsdGVyI1xuICAgICAqIEBkZWZhdWx0IDJcbiAgICAgKi9cbiAgICBibHVyOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuYmx1clhGaWx0ZXIuYmx1cjtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuYmx1clhGaWx0ZXIuYmx1ciA9IHRoaXMuYmx1cllGaWx0ZXIuYmx1ciA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIHN0cmVuZ3RoIG9mIHRoZSBibHVyWCBwcm9wZXJ0eVxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJPZiBQSVhJLmZpbHRlcnMuQmxvb21GaWx0ZXIjXG4gICAgICogQGRlZmF1bHQgMlxuICAgICAqL1xuICAgIGJsdXJYOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuYmx1clhGaWx0ZXIuYmx1cjtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuYmx1clhGaWx0ZXIuYmx1ciA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIHN0cmVuZ3RoIG9mIHRoZSBibHVyWSBwcm9wZXJ0eVxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJPZiBQSVhJLmZpbHRlcnMuQmxvb21GaWx0ZXIjXG4gICAgICogQGRlZmF1bHQgMlxuICAgICAqL1xuICAgIGJsdXJZOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuYmx1cllGaWx0ZXIuYmx1cjtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuYmx1cllGaWx0ZXIuYmx1ciA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfVxufSk7XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uLy4uL2NvcmUnKTtcblxuXG4vKipcbiAqIFRoZSBCbHVyRGlyRmlsdGVyIGFwcGxpZXMgYSBHYXVzc2lhbiBibHVyIHRvd2FyZCBhIGRpcmVjdGlvbiB0byBhbiBvYmplY3QuXG4gKlxuICogQGNsYXNzXG4gKiBAcGFyYW0ge251bWJlcn0gZGlyWFxuICogQHBhcmFtIHtudW1iZXJ9IGRpcllcbiAqIEBleHRlbmRzIFBJWEkuQWJzdHJhY3RGaWx0ZXJcbiAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnNcbiAqL1xuZnVuY3Rpb24gQmx1ckRpckZpbHRlcihkaXJYLCBkaXJZKVxue1xuICAgIGNvcmUuQWJzdHJhY3RGaWx0ZXIuY2FsbCh0aGlzLFxuICAgICAgICAvLyB2ZXJ0ZXggc2hhZGVyXG4gICAgICAgIFwiYXR0cmlidXRlIHZlYzIgYVZlcnRleFBvc2l0aW9uO1xcbmF0dHJpYnV0ZSB2ZWMyIGFUZXh0dXJlQ29vcmQ7XFxuYXR0cmlidXRlIHZlYzQgYUNvbG9yO1xcblxcbnVuaWZvcm0gZmxvYXQgc3RyZW5ndGg7XFxudW5pZm9ybSBmbG9hdCBkaXJYO1xcbnVuaWZvcm0gZmxvYXQgZGlyWTtcXG51bmlmb3JtIG1hdDMgcHJvamVjdGlvbk1hdHJpeDtcXG5cXG52YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDtcXG52YXJ5aW5nIHZlYzQgdkNvbG9yO1xcbnZhcnlpbmcgdmVjMiB2Qmx1clRleENvb3Jkc1szXTtcXG5cXG52b2lkIG1haW4odm9pZClcXG57XFxuICAgIGdsX1Bvc2l0aW9uID0gdmVjNCgocHJvamVjdGlvbk1hdHJpeCAqIHZlYzMoKGFWZXJ0ZXhQb3NpdGlvbiksIDEuMCkpLnh5LCAwLjAsIDEuMCk7XFxuICAgIHZUZXh0dXJlQ29vcmQgPSBhVGV4dHVyZUNvb3JkO1xcblxcbiAgICB2Qmx1clRleENvb3Jkc1swXSA9IGFUZXh0dXJlQ29vcmQgKyB2ZWMyKCAoMC4wMDQgKiBzdHJlbmd0aCkgKiBkaXJYLCAoMC4wMDQgKiBzdHJlbmd0aCkgKiBkaXJZICk7XFxuICAgIHZCbHVyVGV4Q29vcmRzWzFdID0gYVRleHR1cmVDb29yZCArIHZlYzIoICgwLjAwOCAqIHN0cmVuZ3RoKSAqIGRpclgsICgwLjAwOCAqIHN0cmVuZ3RoKSAqIGRpclkgKTtcXG4gICAgdkJsdXJUZXhDb29yZHNbMl0gPSBhVGV4dHVyZUNvb3JkICsgdmVjMiggKDAuMDEyICogc3RyZW5ndGgpICogZGlyWCwgKDAuMDEyICogc3RyZW5ndGgpICogZGlyWSApO1xcblxcbiAgICB2Q29sb3IgPSB2ZWM0KGFDb2xvci5yZ2IgKiBhQ29sb3IuYSwgYUNvbG9yLmEpO1xcbn1cXG5cIixcbiAgICAgICAgLy8gZnJhZ21lbnQgc2hhZGVyXG4gICAgICAgIFwicHJlY2lzaW9uIGxvd3AgZmxvYXQ7XFxuXFxudmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7XFxudmFyeWluZyB2ZWMyIHZCbHVyVGV4Q29vcmRzWzNdO1xcbnZhcnlpbmcgdmVjNCB2Q29sb3I7XFxuXFxudW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXI7XFxuXFxudm9pZCBtYWluKHZvaWQpXFxue1xcbiAgICBnbF9GcmFnQ29sb3IgPSB2ZWM0KDAuMCk7XFxuXFxuICAgIGdsX0ZyYWdDb2xvciArPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZUZXh0dXJlQ29vcmQgICAgICkgKiAwLjM5ODk0MjI4MDQwMTQzMjc7XFxuICAgIGdsX0ZyYWdDb2xvciArPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZCbHVyVGV4Q29vcmRzWyAwXSkgKiAwLjI0MTk3MDcyNDUxOTE0NTQ7XFxuICAgIGdsX0ZyYWdDb2xvciArPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZCbHVyVGV4Q29vcmRzWyAxXSkgKiAwLjA1Mzk5MDk2NjUxMzE4OTg1O1xcbiAgICBnbF9GcmFnQ29sb3IgKz0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2Qmx1clRleENvb3Jkc1sgMl0pICogMC4wMDQ0MzE4NDg0MTE5MzgzNDE7XFxufVxcblwiLFxuICAgICAgICAvLyBzZXQgdGhlIHVuaWZvcm1zXG4gICAgICAgIHtcbiAgICAgICAgICAgIHN0cmVuZ3RoOiB7IHR5cGU6ICcxZicsIHZhbHVlOiAxIH0sXG4gICAgICAgICAgICBkaXJYOiB7IHR5cGU6ICcxZicsIHZhbHVlOiBkaXJYIHx8IDAgfSxcbiAgICAgICAgICAgIGRpclk6IHsgdHlwZTogJzFmJywgdmFsdWU6IGRpclkgfHwgMCB9XG4gICAgICAgIH1cbiAgICApO1xuXG4gICAgdGhpcy5kZWZhdWx0RmlsdGVyID0gbmV3IGNvcmUuQWJzdHJhY3RGaWx0ZXIoKTtcblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIG51bWJlciBvZiBwYXNzZXMgZm9yIGJsdXIuIE1vcmUgcGFzc2VzIG1lYW5zIGhpZ2hlciBxdWFpbGl0eSBibHVyaW5nLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDFcbiAgICAgKi9cbiAgICB0aGlzLnBhc3NlcyA9IDE7XG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBYIGRpcmVjdGlvbiBvZiB0aGUgYmx1clxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDBcbiAgICAgKi9cbiAgICB0aGlzLmRpclggPSBkaXJYIHx8IDA7XG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBZIGRpcmVjdGlvbiBvZiB0aGUgYmx1clxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDBcbiAgICAgKi9cbiAgICB0aGlzLmRpclkgPSBkaXJZIHx8IDA7XG5cbiAgICB0aGlzLnN0cmVuZ3RoID0gNDtcbn1cblxuQmx1ckRpckZpbHRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuQWJzdHJhY3RGaWx0ZXIucHJvdG90eXBlKTtcbkJsdXJEaXJGaWx0ZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gQmx1ckRpckZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gQmx1ckRpckZpbHRlcjtcblxuQmx1ckRpckZpbHRlci5wcm90b3R5cGUuYXBwbHlGaWx0ZXIgPSBmdW5jdGlvbiAocmVuZGVyZXIsIGlucHV0LCBvdXRwdXQsIGNsZWFyKSB7XG5cbiAgICB2YXIgc2hhZGVyID0gdGhpcy5nZXRTaGFkZXIocmVuZGVyZXIpO1xuXG4gICAgdGhpcy51bmlmb3Jtcy5zdHJlbmd0aC52YWx1ZSA9IHRoaXMuc3RyZW5ndGggLyA0IC8gdGhpcy5wYXNzZXMgKiAoaW5wdXQuZnJhbWUud2lkdGggLyBpbnB1dC5zaXplLndpZHRoKTtcblxuICAgIGlmICh0aGlzLnBhc3NlcyA9PT0gMSkge1xuICAgICAgICByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLmFwcGx5RmlsdGVyKHNoYWRlciwgaW5wdXQsIG91dHB1dCwgY2xlYXIpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHZhciByZW5kZXJUYXJnZXQgPSByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLmdldFJlbmRlclRhcmdldCh0cnVlKTtcblxuICAgICAgICByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLmFwcGx5RmlsdGVyKHNoYWRlciwgaW5wdXQsIHJlbmRlclRhcmdldCwgY2xlYXIpO1xuXG4gICAgICAgIGZvcih2YXIgaSA9IDA7IGkgPCB0aGlzLnBhc3Nlcy0yOyBpKyspXG4gICAgICAgIHtcbiAgICAgICAgICAgIC8vdGhpcy51bmlmb3Jtcy5zdHJlbmd0aC52YWx1ZSA9IHRoaXMuc3RyZW5ndGggLyA0IC8gKHRoaXMucGFzc2VzKyhpKjIpKSAqIChpbnB1dC5mcmFtZS53aWR0aCAvIGlucHV0LnNpemUud2lkdGgpO1xuICAgICAgICAgICAgcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5hcHBseUZpbHRlcihzaGFkZXIsIHJlbmRlclRhcmdldCwgcmVuZGVyVGFyZ2V0LCBjbGVhcik7XG4gICAgICAgIH1cblxuICAgICAgICByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLmFwcGx5RmlsdGVyKHNoYWRlciwgcmVuZGVyVGFyZ2V0LCBvdXRwdXQsIGNsZWFyKTtcblxuICAgICAgICByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLnJldHVyblJlbmRlclRhcmdldChyZW5kZXJUYXJnZXQpO1xuICAgIH1cbn07XG5cblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoQmx1ckRpckZpbHRlci5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBzdHJlbmd0aCBvZiBib3RoIHRoZSBibHVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuQmx1ckRpckZpbHRlciNcbiAgICAgKiBAZGVmYXVsdCAyXG4gICAgICovXG4gICAgYmx1cjoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnN0cmVuZ3RoO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5wYWRkaW5nID0gdmFsdWUgKiAwLjU7XG4gICAgICAgICAgICB0aGlzLnN0cmVuZ3RoID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9LFxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIFggZGlyZWN0aW9uIG9mIHRoZSBibHVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuQmx1cllGaWx0ZXIjXG4gICAgICogQGRlZmF1bHQgMFxuICAgICAqL1xuICAgIGRpclg6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5kaXJYO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy5kaXJYLnZhbHVlID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9LFxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIFkgZGlyZWN0aW9uIG9mIHRoZSBibHVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuQmx1ckRpckZpbHRlciNcbiAgICAgKiBAZGVmYXVsdCAwXG4gICAgICovXG4gICAgZGlyWToge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmRpclk7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLmRpclkudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi8uLi9jb3JlJyksXG4gICAgQmx1clhGaWx0ZXIgPSByZXF1aXJlKCcuL0JsdXJYRmlsdGVyJyksXG4gICAgQmx1cllGaWx0ZXIgPSByZXF1aXJlKCcuL0JsdXJZRmlsdGVyJyk7XG5cbi8qKlxuICogVGhlIEJsdXJGaWx0ZXIgYXBwbGllcyBhIEdhdXNzaWFuIGJsdXIgdG8gYW4gb2JqZWN0LlxuICogVGhlIHN0cmVuZ3RoIG9mIHRoZSBibHVyIGNhbiBiZSBzZXQgZm9yIHgtIGFuZCB5LWF4aXMgc2VwYXJhdGVseS5cbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQWJzdHJhY3RGaWx0ZXJcbiAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnNcbiAqL1xuZnVuY3Rpb24gQmx1ckZpbHRlcigpXG57XG4gICAgY29yZS5BYnN0cmFjdEZpbHRlci5jYWxsKHRoaXMpO1xuXG4gICAgdGhpcy5ibHVyWEZpbHRlciA9IG5ldyBCbHVyWEZpbHRlcigpO1xuICAgIHRoaXMuYmx1cllGaWx0ZXIgPSBuZXcgQmx1cllGaWx0ZXIoKTtcbn1cblxuQmx1ckZpbHRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuQWJzdHJhY3RGaWx0ZXIucHJvdG90eXBlKTtcbkJsdXJGaWx0ZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gQmx1ckZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gQmx1ckZpbHRlcjtcblxuQmx1ckZpbHRlci5wcm90b3R5cGUuYXBwbHlGaWx0ZXIgPSBmdW5jdGlvbiAocmVuZGVyZXIsIGlucHV0LCBvdXRwdXQpXG57XG4gICAgdmFyIHJlbmRlclRhcmdldCA9IHJlbmRlcmVyLmZpbHRlck1hbmFnZXIuZ2V0UmVuZGVyVGFyZ2V0KHRydWUpO1xuXG4gICAgdGhpcy5ibHVyWEZpbHRlci5hcHBseUZpbHRlcihyZW5kZXJlciwgaW5wdXQsIHJlbmRlclRhcmdldCk7XG4gICAgdGhpcy5ibHVyWUZpbHRlci5hcHBseUZpbHRlcihyZW5kZXJlciwgcmVuZGVyVGFyZ2V0LCBvdXRwdXQpO1xuXG4gICAgcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5yZXR1cm5SZW5kZXJUYXJnZXQocmVuZGVyVGFyZ2V0KTtcbn07XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKEJsdXJGaWx0ZXIucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgc3RyZW5ndGggb2YgYm90aCB0aGUgYmx1clggYW5kIGJsdXJZIHByb3BlcnRpZXMgc2ltdWx0YW5lb3VzbHlcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyT2YgUElYSS5maWx0ZXJzLkJsdXJGaWx0ZXIjXG4gICAgICogQGRlZmF1bHQgMlxuICAgICAqL1xuICAgIGJsdXI6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5ibHVyWEZpbHRlci5ibHVyO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5wYWRkaW5nID0gTWF0aC5hYnModmFsdWUpICogMC41O1xuICAgICAgICAgICAgdGhpcy5ibHVyWEZpbHRlci5ibHVyID0gdGhpcy5ibHVyWUZpbHRlci5ibHVyID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgbnVtYmVyIG9mIHBhc3NlcyBmb3IgYmx1ci4gTW9yZSBwYXNzZXMgbWVhbnMgaGlnaGVyIHF1YWlsaXR5IGJsdXJpbmcuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5CbHVyWUZpbHRlciNcbiAgICAgKiBAZGVmYXVsdCAxXG4gICAgICovXG4gICAgcGFzc2VzOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuICB0aGlzLmJsdXJYRmlsdGVyLnBhc3NlcztcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuYmx1clhGaWx0ZXIucGFzc2VzID0gdGhpcy5ibHVyWUZpbHRlci5wYXNzZXMgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBzdHJlbmd0aCBvZiB0aGUgYmx1clggcHJvcGVydHlcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyT2YgUElYSS5maWx0ZXJzLkJsdXJGaWx0ZXIjXG4gICAgICogQGRlZmF1bHQgMlxuICAgICAqL1xuICAgIGJsdXJYOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuYmx1clhGaWx0ZXIuYmx1cjtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuYmx1clhGaWx0ZXIuYmx1ciA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIHN0cmVuZ3RoIG9mIHRoZSBibHVyWSBwcm9wZXJ0eVxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJPZiBQSVhJLmZpbHRlcnMuQmx1ckZpbHRlciNcbiAgICAgKiBAZGVmYXVsdCAyXG4gICAgICovXG4gICAgYmx1clk6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5ibHVyWUZpbHRlci5ibHVyO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5ibHVyWUZpbHRlci5ibHVyID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG59KTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vLi4vY29yZScpO1xuLy8gQHNlZSBodHRwczovL2dpdGh1Yi5jb20vc3Vic3RhY2svYnJmcy9pc3N1ZXMvMjVcblxuXG4vKipcbiAqIFRoZSBCbHVyWEZpbHRlciBhcHBsaWVzIGEgaG9yaXpvbnRhbCBHYXVzc2lhbiBibHVyIHRvIGFuIG9iamVjdC5cbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQWJzdHJhY3RGaWx0ZXJcbiAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnNcbiAqL1xuZnVuY3Rpb24gQmx1clhGaWx0ZXIoKVxue1xuICAgIGNvcmUuQWJzdHJhY3RGaWx0ZXIuY2FsbCh0aGlzLFxuICAgICAgICAvLyB2ZXJ0ZXggc2hhZGVyXG4gICAgICAgIFwiYXR0cmlidXRlIHZlYzIgYVZlcnRleFBvc2l0aW9uO1xcbmF0dHJpYnV0ZSB2ZWMyIGFUZXh0dXJlQ29vcmQ7XFxuYXR0cmlidXRlIHZlYzQgYUNvbG9yO1xcblxcbnVuaWZvcm0gZmxvYXQgc3RyZW5ndGg7XFxudW5pZm9ybSBtYXQzIHByb2plY3Rpb25NYXRyaXg7XFxuXFxudmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7XFxudmFyeWluZyB2ZWM0IHZDb2xvcjtcXG52YXJ5aW5nIHZlYzIgdkJsdXJUZXhDb29yZHNbNl07XFxuXFxudm9pZCBtYWluKHZvaWQpXFxue1xcbiAgICBnbF9Qb3NpdGlvbiA9IHZlYzQoKHByb2plY3Rpb25NYXRyaXggKiB2ZWMzKChhVmVydGV4UG9zaXRpb24pLCAxLjApKS54eSwgMC4wLCAxLjApO1xcbiAgICB2VGV4dHVyZUNvb3JkID0gYVRleHR1cmVDb29yZDtcXG5cXG4gICAgdkJsdXJUZXhDb29yZHNbIDBdID0gYVRleHR1cmVDb29yZCArIHZlYzIoLTAuMDEyICogc3RyZW5ndGgsIDAuMCk7XFxuICAgIHZCbHVyVGV4Q29vcmRzWyAxXSA9IGFUZXh0dXJlQ29vcmQgKyB2ZWMyKC0wLjAwOCAqIHN0cmVuZ3RoLCAwLjApO1xcbiAgICB2Qmx1clRleENvb3Jkc1sgMl0gPSBhVGV4dHVyZUNvb3JkICsgdmVjMigtMC4wMDQgKiBzdHJlbmd0aCwgMC4wKTtcXG4gICAgdkJsdXJUZXhDb29yZHNbIDNdID0gYVRleHR1cmVDb29yZCArIHZlYzIoIDAuMDA0ICogc3RyZW5ndGgsIDAuMCk7XFxuICAgIHZCbHVyVGV4Q29vcmRzWyA0XSA9IGFUZXh0dXJlQ29vcmQgKyB2ZWMyKCAwLjAwOCAqIHN0cmVuZ3RoLCAwLjApO1xcbiAgICB2Qmx1clRleENvb3Jkc1sgNV0gPSBhVGV4dHVyZUNvb3JkICsgdmVjMiggMC4wMTIgKiBzdHJlbmd0aCwgMC4wKTtcXG5cXG4gICAgdkNvbG9yID0gdmVjNChhQ29sb3IucmdiICogYUNvbG9yLmEsIGFDb2xvci5hKTtcXG59XFxuXCIsXG4gICAgICAgIC8vIGZyYWdtZW50IHNoYWRlclxuICAgICAgICBcInByZWNpc2lvbiBsb3dwIGZsb2F0O1xcblxcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xcbnZhcnlpbmcgdmVjMiB2Qmx1clRleENvb3Jkc1s2XTtcXG52YXJ5aW5nIHZlYzQgdkNvbG9yO1xcblxcbnVuaWZvcm0gc2FtcGxlcjJEIHVTYW1wbGVyO1xcblxcbnZvaWQgbWFpbih2b2lkKVxcbntcXG4gICAgZ2xfRnJhZ0NvbG9yID0gdmVjNCgwLjApO1xcblxcbiAgICBnbF9GcmFnQ29sb3IgKz0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2Qmx1clRleENvb3Jkc1sgMF0pKjAuMDA0NDMxODQ4NDExOTM4MzQxO1xcbiAgICBnbF9GcmFnQ29sb3IgKz0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2Qmx1clRleENvb3Jkc1sgMV0pKjAuMDUzOTkwOTY2NTEzMTg5ODU7XFxuICAgIGdsX0ZyYWdDb2xvciArPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZCbHVyVGV4Q29vcmRzWyAyXSkqMC4yNDE5NzA3MjQ1MTkxNDU0O1xcbiAgICBnbF9GcmFnQ29sb3IgKz0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2VGV4dHVyZUNvb3JkICAgICApKjAuMzk4OTQyMjgwNDAxNDMyNztcXG4gICAgZ2xfRnJhZ0NvbG9yICs9IHRleHR1cmUyRCh1U2FtcGxlciwgdkJsdXJUZXhDb29yZHNbIDNdKSowLjI0MTk3MDcyNDUxOTE0NTQ7XFxuICAgIGdsX0ZyYWdDb2xvciArPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZCbHVyVGV4Q29vcmRzWyA0XSkqMC4wNTM5OTA5NjY1MTMxODk4NTtcXG4gICAgZ2xfRnJhZ0NvbG9yICs9IHRleHR1cmUyRCh1U2FtcGxlciwgdkJsdXJUZXhDb29yZHNbIDVdKSowLjAwNDQzMTg0ODQxMTkzODM0MTtcXG59XFxuXCIsXG4gICAgICAgIC8vIHNldCB0aGUgdW5pZm9ybXNcbiAgICAgICAge1xuICAgICAgICAgICAgc3RyZW5ndGg6IHsgdHlwZTogJzFmJywgdmFsdWU6IDEgfVxuICAgICAgICB9XG4gICAgKTtcblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIG51bWJlciBvZiBwYXNzZXMgZm9yIGJsdXIuIE1vcmUgcGFzc2VzIG1lYW5zIGhpZ2hlciBxdWFpbGl0eSBibHVyaW5nLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDFcbiAgICAgKi9cbiAgICB0aGlzLnBhc3NlcyA9IDE7XG5cbiAgICB0aGlzLnN0cmVuZ3RoID0gNDtcbn1cblxuQmx1clhGaWx0ZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShjb3JlLkFic3RyYWN0RmlsdGVyLnByb3RvdHlwZSk7XG5CbHVyWEZpbHRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBCbHVyWEZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gQmx1clhGaWx0ZXI7XG5cbkJsdXJYRmlsdGVyLnByb3RvdHlwZS5hcHBseUZpbHRlciA9IGZ1bmN0aW9uIChyZW5kZXJlciwgaW5wdXQsIG91dHB1dCwgY2xlYXIpXG57XG4gICAgdmFyIHNoYWRlciA9IHRoaXMuZ2V0U2hhZGVyKHJlbmRlcmVyKTtcblxuICAgIHRoaXMudW5pZm9ybXMuc3RyZW5ndGgudmFsdWUgPSB0aGlzLnN0cmVuZ3RoIC8gNCAvIHRoaXMucGFzc2VzICogKGlucHV0LmZyYW1lLndpZHRoIC8gaW5wdXQuc2l6ZS53aWR0aCk7XG5cbiAgICBpZih0aGlzLnBhc3NlcyA9PT0gMSlcbiAgICB7XG4gICAgICAgIHJlbmRlcmVyLmZpbHRlck1hbmFnZXIuYXBwbHlGaWx0ZXIoc2hhZGVyLCBpbnB1dCwgb3V0cHV0LCBjbGVhcik7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHZhciByZW5kZXJUYXJnZXQgPSByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLmdldFJlbmRlclRhcmdldCh0cnVlKTtcbiAgICAgICAgdmFyIGZsaXAgPSBpbnB1dDtcbiAgICAgICAgdmFyIGZsb3AgPSByZW5kZXJUYXJnZXQ7XG5cbiAgICAgICAgZm9yKHZhciBpID0gMDsgaSA8IHRoaXMucGFzc2VzLTE7IGkrKylcbiAgICAgICAge1xuICAgICAgICAgICAgcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5hcHBseUZpbHRlcihzaGFkZXIsIGZsaXAsIGZsb3AsIHRydWUpO1xuXG4gICAgICAgICAgIHZhciB0ZW1wID0gZmxvcDtcbiAgICAgICAgICAgZmxvcCA9IGZsaXA7XG4gICAgICAgICAgIGZsaXAgPSB0ZW1wO1xuICAgICAgICB9XG5cbiAgICAgICAgcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5hcHBseUZpbHRlcihzaGFkZXIsIGZsaXAsIG91dHB1dCwgY2xlYXIpO1xuXG4gICAgICAgIHJlbmRlcmVyLmZpbHRlck1hbmFnZXIucmV0dXJuUmVuZGVyVGFyZ2V0KHJlbmRlclRhcmdldCk7XG4gICAgfVxufTtcblxuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhCbHVyWEZpbHRlci5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBzdHJlbmd0aCBvZiBib3RoIHRoZSBibHVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuQmx1clhGaWx0ZXIjXG4gICAgICogQGRlZmF1bHQgMlxuICAgICAqL1xuICAgIGJsdXI6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gIHRoaXMuc3RyZW5ndGg7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnBhZGRpbmcgPSAgTWF0aC5hYnModmFsdWUpICogMC41O1xuICAgICAgICAgICAgdGhpcy5zdHJlbmd0aCA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfVxufSk7XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uLy4uL2NvcmUnKTtcbi8vIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL3N1YnN0YWNrL2JyZnMvaXNzdWVzLzI1XG5cblxuLyoqXG4gKiBUaGUgQmx1cllGaWx0ZXIgYXBwbGllcyBhIGhvcml6b250YWwgR2F1c3NpYW4gYmx1ciB0byBhbiBvYmplY3QuXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLkFic3RyYWN0RmlsdGVyXG4gKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzXG4gKi9cbmZ1bmN0aW9uIEJsdXJZRmlsdGVyKClcbntcbiAgICBjb3JlLkFic3RyYWN0RmlsdGVyLmNhbGwodGhpcyxcbiAgICAgICAgLy8gdmVydGV4IHNoYWRlclxuICAgICAgICBcImF0dHJpYnV0ZSB2ZWMyIGFWZXJ0ZXhQb3NpdGlvbjtcXG5hdHRyaWJ1dGUgdmVjMiBhVGV4dHVyZUNvb3JkO1xcbmF0dHJpYnV0ZSB2ZWM0IGFDb2xvcjtcXG5cXG51bmlmb3JtIGZsb2F0IHN0cmVuZ3RoO1xcbnVuaWZvcm0gbWF0MyBwcm9qZWN0aW9uTWF0cml4O1xcblxcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xcbnZhcnlpbmcgdmVjNCB2Q29sb3I7XFxudmFyeWluZyB2ZWMyIHZCbHVyVGV4Q29vcmRzWzZdO1xcblxcbnZvaWQgbWFpbih2b2lkKVxcbntcXG4gICAgZ2xfUG9zaXRpb24gPSB2ZWM0KChwcm9qZWN0aW9uTWF0cml4ICogdmVjMygoYVZlcnRleFBvc2l0aW9uKSwgMS4wKSkueHksIDAuMCwgMS4wKTtcXG4gICAgdlRleHR1cmVDb29yZCA9IGFUZXh0dXJlQ29vcmQ7XFxuXFxuICAgIHZCbHVyVGV4Q29vcmRzWyAwXSA9IGFUZXh0dXJlQ29vcmQgKyB2ZWMyKDAuMCwgLTAuMDEyICogc3RyZW5ndGgpO1xcbiAgICB2Qmx1clRleENvb3Jkc1sgMV0gPSBhVGV4dHVyZUNvb3JkICsgdmVjMigwLjAsIC0wLjAwOCAqIHN0cmVuZ3RoKTtcXG4gICAgdkJsdXJUZXhDb29yZHNbIDJdID0gYVRleHR1cmVDb29yZCArIHZlYzIoMC4wLCAtMC4wMDQgKiBzdHJlbmd0aCk7XFxuICAgIHZCbHVyVGV4Q29vcmRzWyAzXSA9IGFUZXh0dXJlQ29vcmQgKyB2ZWMyKDAuMCwgIDAuMDA0ICogc3RyZW5ndGgpO1xcbiAgICB2Qmx1clRleENvb3Jkc1sgNF0gPSBhVGV4dHVyZUNvb3JkICsgdmVjMigwLjAsICAwLjAwOCAqIHN0cmVuZ3RoKTtcXG4gICAgdkJsdXJUZXhDb29yZHNbIDVdID0gYVRleHR1cmVDb29yZCArIHZlYzIoMC4wLCAgMC4wMTIgKiBzdHJlbmd0aCk7XFxuXFxuICAgdkNvbG9yID0gdmVjNChhQ29sb3IucmdiICogYUNvbG9yLmEsIGFDb2xvci5hKTtcXG59XFxuXCIsXG4gICAgICAgIC8vIGZyYWdtZW50IHNoYWRlclxuICAgICAgICBcInByZWNpc2lvbiBsb3dwIGZsb2F0O1xcblxcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xcbnZhcnlpbmcgdmVjMiB2Qmx1clRleENvb3Jkc1s2XTtcXG52YXJ5aW5nIHZlYzQgdkNvbG9yO1xcblxcbnVuaWZvcm0gc2FtcGxlcjJEIHVTYW1wbGVyO1xcblxcbnZvaWQgbWFpbih2b2lkKVxcbntcXG4gICAgZ2xfRnJhZ0NvbG9yID0gdmVjNCgwLjApO1xcblxcbiAgICBnbF9GcmFnQ29sb3IgKz0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2Qmx1clRleENvb3Jkc1sgMF0pKjAuMDA0NDMxODQ4NDExOTM4MzQxO1xcbiAgICBnbF9GcmFnQ29sb3IgKz0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2Qmx1clRleENvb3Jkc1sgMV0pKjAuMDUzOTkwOTY2NTEzMTg5ODU7XFxuICAgIGdsX0ZyYWdDb2xvciArPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZCbHVyVGV4Q29vcmRzWyAyXSkqMC4yNDE5NzA3MjQ1MTkxNDU0O1xcbiAgICBnbF9GcmFnQ29sb3IgKz0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2VGV4dHVyZUNvb3JkICAgICApKjAuMzk4OTQyMjgwNDAxNDMyNztcXG4gICAgZ2xfRnJhZ0NvbG9yICs9IHRleHR1cmUyRCh1U2FtcGxlciwgdkJsdXJUZXhDb29yZHNbIDNdKSowLjI0MTk3MDcyNDUxOTE0NTQ7XFxuICAgIGdsX0ZyYWdDb2xvciArPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZCbHVyVGV4Q29vcmRzWyA0XSkqMC4wNTM5OTA5NjY1MTMxODk4NTtcXG4gICAgZ2xfRnJhZ0NvbG9yICs9IHRleHR1cmUyRCh1U2FtcGxlciwgdkJsdXJUZXhDb29yZHNbIDVdKSowLjAwNDQzMTg0ODQxMTkzODM0MTtcXG59XFxuXCIsXG4gICAgICAgIC8vIHNldCB0aGUgdW5pZm9ybXNcbiAgICAgICAge1xuICAgICAgICAgICAgc3RyZW5ndGg6IHsgdHlwZTogJzFmJywgdmFsdWU6IDEgfVxuICAgICAgICB9XG4gICAgKTtcblxuICAgIHRoaXMucGFzc2VzID0gMTtcbiAgICB0aGlzLnN0cmVuZ3RoID0gNDtcbn1cblxuQmx1cllGaWx0ZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShjb3JlLkFic3RyYWN0RmlsdGVyLnByb3RvdHlwZSk7XG5CbHVyWUZpbHRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBCbHVyWUZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gQmx1cllGaWx0ZXI7XG5cbkJsdXJZRmlsdGVyLnByb3RvdHlwZS5hcHBseUZpbHRlciA9IGZ1bmN0aW9uIChyZW5kZXJlciwgaW5wdXQsIG91dHB1dCwgY2xlYXIpXG57XG4gICAgdmFyIHNoYWRlciA9IHRoaXMuZ2V0U2hhZGVyKHJlbmRlcmVyKTtcblxuICAgIHRoaXMudW5pZm9ybXMuc3RyZW5ndGgudmFsdWUgPSBNYXRoLmFicyh0aGlzLnN0cmVuZ3RoKSAvIDQgLyB0aGlzLnBhc3NlcyAqIChpbnB1dC5mcmFtZS5oZWlnaHQgLyBpbnB1dC5zaXplLmhlaWdodCk7XG5cbiAgICBpZih0aGlzLnBhc3NlcyA9PT0gMSlcbiAgICB7XG4gICAgICAgIHJlbmRlcmVyLmZpbHRlck1hbmFnZXIuYXBwbHlGaWx0ZXIoc2hhZGVyLCBpbnB1dCwgb3V0cHV0LCBjbGVhcik7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHZhciByZW5kZXJUYXJnZXQgPSByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLmdldFJlbmRlclRhcmdldCh0cnVlKTtcbiAgICAgICAgdmFyIGZsaXAgPSBpbnB1dDtcbiAgICAgICAgdmFyIGZsb3AgPSByZW5kZXJUYXJnZXQ7XG5cbiAgICAgICAgZm9yKHZhciBpID0gMDsgaSA8IHRoaXMucGFzc2VzLTE7IGkrKylcbiAgICAgICAge1xuICAgICAgICAgICAgcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5hcHBseUZpbHRlcihzaGFkZXIsIGZsaXAsIGZsb3AsIHRydWUpO1xuXG4gICAgICAgICAgIHZhciB0ZW1wID0gZmxvcDtcbiAgICAgICAgICAgZmxvcCA9IGZsaXA7XG4gICAgICAgICAgIGZsaXAgPSB0ZW1wO1xuICAgICAgICB9XG5cbiAgICAgICAgcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5hcHBseUZpbHRlcihzaGFkZXIsIGZsaXAsIG91dHB1dCwgY2xlYXIpO1xuXG4gICAgICAgIHJlbmRlcmVyLmZpbHRlck1hbmFnZXIucmV0dXJuUmVuZGVyVGFyZ2V0KHJlbmRlclRhcmdldCk7XG4gICAgfVxufTtcblxuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhCbHVyWUZpbHRlci5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBzdHJlbmd0aCBvZiBib3RoIHRoZSBibHVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuQmx1cllGaWx0ZXIjXG4gICAgICogQGRlZmF1bHQgMlxuICAgICAqL1xuICAgIGJsdXI6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gIHRoaXMuc3RyZW5ndGg7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnBhZGRpbmcgPSBNYXRoLmFicyh2YWx1ZSkgKiAwLjU7XG4gICAgICAgICAgICB0aGlzLnN0cmVuZ3RoID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG59KTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vLi4vY29yZScpO1xuLy8gQHNlZSBodHRwczovL2dpdGh1Yi5jb20vc3Vic3RhY2svYnJmcy9pc3N1ZXMvMjVcblxuXG4vKipcbiAqIEEgU21hcnQgQmx1ciBGaWx0ZXIuXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLkFic3RyYWN0RmlsdGVyXG4gKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzXG4gKi9cbmZ1bmN0aW9uIFNtYXJ0Qmx1ckZpbHRlcigpXG57XG4gICAgY29yZS5BYnN0cmFjdEZpbHRlci5jYWxsKHRoaXMsXG4gICAgICAgIC8vIHZlcnRleCBzaGFkZXJcbiAgICAgICAgbnVsbCxcbiAgICAgICAgLy8gZnJhZ21lbnQgc2hhZGVyXG4gICAgICAgIFwicHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XFxuXFxudmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7XFxuXFxudW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXI7XFxudW5pZm9ybSB2ZWMyIGRlbHRhO1xcblxcbmZsb2F0IHJhbmRvbSh2ZWMzIHNjYWxlLCBmbG9hdCBzZWVkKVxcbntcXG4gICAgcmV0dXJuIGZyYWN0KHNpbihkb3QoZ2xfRnJhZ0Nvb3JkLnh5eiArIHNlZWQsIHNjYWxlKSkgKiA0Mzc1OC41NDUzICsgc2VlZCk7XFxufVxcblxcbnZvaWQgbWFpbih2b2lkKVxcbntcXG4gICAgdmVjNCBjb2xvciA9IHZlYzQoMC4wKTtcXG4gICAgZmxvYXQgdG90YWwgPSAwLjA7XFxuXFxuICAgIGZsb2F0IG9mZnNldCA9IHJhbmRvbSh2ZWMzKDEyLjk4OTgsIDc4LjIzMywgMTUxLjcxODIpLCAwLjApO1xcblxcbiAgICBmb3IgKGZsb2F0IHQgPSAtMzAuMDsgdCA8PSAzMC4wOyB0KyspXFxuICAgIHtcXG4gICAgICAgIGZsb2F0IHBlcmNlbnQgPSAodCArIG9mZnNldCAtIDAuNSkgLyAzMC4wO1xcbiAgICAgICAgZmxvYXQgd2VpZ2h0ID0gMS4wIC0gYWJzKHBlcmNlbnQpO1xcbiAgICAgICAgdmVjNCBzYW1wbGUgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZUZXh0dXJlQ29vcmQgKyBkZWx0YSAqIHBlcmNlbnQpO1xcbiAgICAgICAgc2FtcGxlLnJnYiAqPSBzYW1wbGUuYTtcXG4gICAgICAgIGNvbG9yICs9IHNhbXBsZSAqIHdlaWdodDtcXG4gICAgICAgIHRvdGFsICs9IHdlaWdodDtcXG4gICAgfVxcblxcbiAgICBnbF9GcmFnQ29sb3IgPSBjb2xvciAvIHRvdGFsO1xcbiAgICBnbF9GcmFnQ29sb3IucmdiIC89IGdsX0ZyYWdDb2xvci5hICsgMC4wMDAwMTtcXG59XFxuXCIsXG4gICAgICAgIC8vIHVuaWZvcm1zXG4gICAgICAgIHtcbiAgICAgICAgICBkZWx0YTogeyB0eXBlOiAndjInLCB2YWx1ZTogeyB4OiAwLjEsIHk6IDAuMCB9IH1cbiAgICAgICAgfVxuICAgICk7XG59XG5cblNtYXJ0Qmx1ckZpbHRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuQWJzdHJhY3RGaWx0ZXIucHJvdG90eXBlKTtcblNtYXJ0Qmx1ckZpbHRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBTbWFydEJsdXJGaWx0ZXI7XG5tb2R1bGUuZXhwb3J0cyA9IFNtYXJ0Qmx1ckZpbHRlcjtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vLi4vY29yZScpO1xuLy8gQHNlZSBodHRwczovL2dpdGh1Yi5jb20vc3Vic3RhY2svYnJmcy9pc3N1ZXMvMjVcblxuXG4vKipcbiAqIFRoZSBDb2xvck1hdHJpeEZpbHRlciBjbGFzcyBsZXRzIHlvdSBhcHBseSBhIDV4NCBtYXRyaXggdHJhbnNmb3JtYXRpb24gb24gdGhlIFJHQkFcbiAqIGNvbG9yIGFuZCBhbHBoYSB2YWx1ZXMgb2YgZXZlcnkgcGl4ZWwgb24geW91ciBkaXNwbGF5T2JqZWN0IHRvIHByb2R1Y2UgYSByZXN1bHRcbiAqIHdpdGggYSBuZXcgc2V0IG9mIFJHQkEgY29sb3IgYW5kIGFscGhhIHZhbHVlcy4gSXQncyBwcmV0dHkgcG93ZXJmdWwhXG4gKlxuICogYGBganNcbiAqICB2YXIgY29sb3JNYXRyaXggPSBuZXcgUElYSS5Db2xvck1hdHJpeEZpbHRlcigpO1xuICogIGNvbnRhaW5lci5maWx0ZXJzID0gW2NvbG9yTWF0cml4XTtcbiAqICBjb2xvck1hdHJpeC5jb250cmFzdCgyKTtcbiAqIGBgYFxuICogQGF1dGhvciBDbMOpbWVudCBDaGVuZWJhdWx0IDxjbGVtZW50QGdvb2Rib3lkaWdpdGFsLmNvbT5cbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5BYnN0cmFjdEZpbHRlclxuICogQG1lbWJlcm9mIFBJWEkuZmlsdGVyc1xuICovXG5mdW5jdGlvbiBDb2xvck1hdHJpeEZpbHRlcigpXG57XG4gICAgY29yZS5BYnN0cmFjdEZpbHRlci5jYWxsKHRoaXMsXG4gICAgICAgIC8vIHZlcnRleCBzaGFkZXJcbiAgICAgICAgbnVsbCxcbiAgICAgICAgLy8gZnJhZ21lbnQgc2hhZGVyXG4gICAgICAgIFwicHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XFxuXFxudmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7XFxudW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXI7XFxudW5pZm9ybSBmbG9hdCBtWzI1XTtcXG5cXG52b2lkIG1haW4odm9pZClcXG57XFxuXFxuICAgIHZlYzQgYyA9IHRleHR1cmUyRCh1U2FtcGxlciwgdlRleHR1cmVDb29yZCk7XFxuXFxuICAgIGdsX0ZyYWdDb2xvci5yID0gKG1bMF0gKiBjLnIpO1xcbiAgICAgICAgZ2xfRnJhZ0NvbG9yLnIgKz0gKG1bMV0gKiBjLmcpO1xcbiAgICAgICAgZ2xfRnJhZ0NvbG9yLnIgKz0gKG1bMl0gKiBjLmIpO1xcbiAgICAgICAgZ2xfRnJhZ0NvbG9yLnIgKz0gKG1bM10gKiBjLmEpO1xcbiAgICAgICAgZ2xfRnJhZ0NvbG9yLnIgKz0gbVs0XTtcXG5cXG4gICAgZ2xfRnJhZ0NvbG9yLmcgPSAobVs1XSAqIGMucik7XFxuICAgICAgICBnbF9GcmFnQ29sb3IuZyArPSAobVs2XSAqIGMuZyk7XFxuICAgICAgICBnbF9GcmFnQ29sb3IuZyArPSAobVs3XSAqIGMuYik7XFxuICAgICAgICBnbF9GcmFnQ29sb3IuZyArPSAobVs4XSAqIGMuYSk7XFxuICAgICAgICBnbF9GcmFnQ29sb3IuZyArPSBtWzldO1xcblxcbiAgICAgZ2xfRnJhZ0NvbG9yLmIgPSAobVsxMF0gKiBjLnIpO1xcbiAgICAgICAgZ2xfRnJhZ0NvbG9yLmIgKz0gKG1bMTFdICogYy5nKTtcXG4gICAgICAgIGdsX0ZyYWdDb2xvci5iICs9IChtWzEyXSAqIGMuYik7XFxuICAgICAgICBnbF9GcmFnQ29sb3IuYiArPSAobVsxM10gKiBjLmEpO1xcbiAgICAgICAgZ2xfRnJhZ0NvbG9yLmIgKz0gbVsxNF07XFxuXFxuICAgICBnbF9GcmFnQ29sb3IuYSA9IChtWzE1XSAqIGMucik7XFxuICAgICAgICBnbF9GcmFnQ29sb3IuYSArPSAobVsxNl0gKiBjLmcpO1xcbiAgICAgICAgZ2xfRnJhZ0NvbG9yLmEgKz0gKG1bMTddICogYy5iKTtcXG4gICAgICAgIGdsX0ZyYWdDb2xvci5hICs9IChtWzE4XSAqIGMuYSk7XFxuICAgICAgICBnbF9GcmFnQ29sb3IuYSArPSBtWzE5XTtcXG5cXG59XFxuXCIsXG4gICAgICAgIC8vIGN1c3RvbSB1bmlmb3Jtc1xuICAgICAgICB7XG4gICAgICAgICAgICBtOiB7XG4gICAgICAgICAgICAgICAgdHlwZTogJzFmdicsIHZhbHVlOiBbXG4gICAgICAgICAgICAgICAgICAgIDEsIDAsIDAsIDAsIDAsXG4gICAgICAgICAgICAgICAgICAgIDAsIDEsIDAsIDAsIDAsXG4gICAgICAgICAgICAgICAgICAgIDAsIDAsIDEsIDAsIDAsXG4gICAgICAgICAgICAgICAgICAgIDAsIDAsIDAsIDEsIDBcbiAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICApO1xufVxuXG5Db2xvck1hdHJpeEZpbHRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuQWJzdHJhY3RGaWx0ZXIucHJvdG90eXBlKTtcbkNvbG9yTWF0cml4RmlsdGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IENvbG9yTWF0cml4RmlsdGVyO1xubW9kdWxlLmV4cG9ydHMgPSBDb2xvck1hdHJpeEZpbHRlcjtcblxuXG4vKipcbiAqIFRyYW5zZm9ybXMgY3VycmVudCBtYXRyaXggYW5kIHNldCB0aGUgbmV3IG9uZVxuICpcbiAqIEBwYXJhbSBtYXRyaXgge251bWJlcltdfSAobWF0IDV4NClcbiAqIEBwYXJhbSBtdWx0aXBseSB7Ym9vbGVhbn0gaWYgdHJ1ZSwgY3VycmVudCBtYXRyaXggYW5kIG1hdHJpeCBhcmUgbXVsdGlwbGllZC4gSWYgZmFsc2UsIGp1c3Qgc2V0IHRoZSBjdXJyZW50IG1hdHJpeCB3aXRoIEBwYXJhbSBtYXRyaXhcbiAqL1xuQ29sb3JNYXRyaXhGaWx0ZXIucHJvdG90eXBlLl9sb2FkTWF0cml4ID0gZnVuY3Rpb24gKG1hdHJpeCwgbXVsdGlwbHkpXG57XG4gICAgbXVsdGlwbHkgPSAhIW11bHRpcGx5O1xuXG4gICAgdmFyIG5ld01hdHJpeCA9IG1hdHJpeDtcblxuICAgIGlmIChtdWx0aXBseSkge1xuICAgICAgICB0aGlzLl9tdWx0aXBseShuZXdNYXRyaXgsIHRoaXMudW5pZm9ybXMubS52YWx1ZSwgbWF0cml4KTtcbiAgICAgICAgbmV3TWF0cml4ID0gdGhpcy5fY29sb3JNYXRyaXgobmV3TWF0cml4KTtcbiAgICB9XG5cbiAgICAvLyBzZXQgdGhlIG5ldyBtYXRyaXhcbiAgICB0aGlzLnVuaWZvcm1zLm0udmFsdWUgPSBuZXdNYXRyaXg7XG59O1xuXG4vKipcbiAqIE11bHRpcGxpZXMgdHdvIG1hdDUnc1xuICpcbiAqIEBwYXJhbSBvdXQge251bWJlcltdfSAobWF0IDV4NCkgdGhlIHJlY2VpdmluZyBtYXRyaXhcbiAqIEBwYXJhbSBhIHtudW1iZXJbXX0gKG1hdCA1eDQpIHRoZSBmaXJzdCBvcGVyYW5kXG4gKiBAcGFyYW0gYiB7bnVtYmVyW119IChtYXQgNXg0KSB0aGUgc2Vjb25kIG9wZXJhbmRcbiAqIEByZXR1cm5zIG91dCB7bnVtYmVyW119IChtYXQgNXg0KVxuICovXG5Db2xvck1hdHJpeEZpbHRlci5wcm90b3R5cGUuX211bHRpcGx5ID0gZnVuY3Rpb24gKG91dCwgYSwgYilcbntcblxuICAgIC8vIFJlZCBDaGFubmVsXG4gICAgb3V0WzBdID0gKGFbMF0gKiBiWzBdKSArIChhWzFdICogYls1XSkgKyAoYVsyXSAqIGJbMTBdKSArIChhWzNdICogYlsxNV0pO1xuICAgIG91dFsxXSA9IChhWzBdICogYlsxXSkgKyAoYVsxXSAqIGJbNl0pICsgKGFbMl0gKiBiWzExXSkgKyAoYVszXSAqIGJbMTZdKTtcbiAgICBvdXRbMl0gPSAoYVswXSAqIGJbMl0pICsgKGFbMV0gKiBiWzddKSArIChhWzJdICogYlsxMl0pICsgKGFbM10gKiBiWzE3XSk7XG4gICAgb3V0WzNdID0gKGFbMF0gKiBiWzNdKSArIChhWzFdICogYls4XSkgKyAoYVsyXSAqIGJbMTNdKSArIChhWzNdICogYlsxOF0pO1xuICAgIG91dFs0XSA9IChhWzBdICogYls0XSkgKyAoYVsxXSAqIGJbOV0pICsgKGFbMl0gKiBiWzE0XSkgKyAoYVszXSAqIGJbMTldKTtcblxuICAgIC8vIEdyZWVuIENoYW5uZWxcbiAgICBvdXRbNV0gPSAoYVs1XSAqIGJbMF0pICsgKGFbNl0gKiBiWzVdKSArIChhWzddICogYlsxMF0pICsgKGFbOF0gKiBiWzE1XSk7XG4gICAgb3V0WzZdID0gKGFbNV0gKiBiWzFdKSArIChhWzZdICogYls2XSkgKyAoYVs3XSAqIGJbMTFdKSArIChhWzhdICogYlsxNl0pO1xuICAgIG91dFs3XSA9IChhWzVdICogYlsyXSkgKyAoYVs2XSAqIGJbN10pICsgKGFbN10gKiBiWzEyXSkgKyAoYVs4XSAqIGJbMTddKTtcbiAgICBvdXRbOF0gPSAoYVs1XSAqIGJbM10pICsgKGFbNl0gKiBiWzhdKSArIChhWzddICogYlsxM10pICsgKGFbOF0gKiBiWzE4XSk7XG4gICAgb3V0WzldID0gKGFbNV0gKiBiWzRdKSArIChhWzZdICogYls5XSkgKyAoYVs3XSAqIGJbMTRdKSArIChhWzhdICogYlsxOV0pO1xuXG4gICAgLy8gQmx1ZSBDaGFubmVsXG4gICAgb3V0WzEwXSA9IChhWzEwXSAqIGJbMF0pICsgKGFbMTFdICogYls1XSkgKyAoYVsxMl0gKiBiWzEwXSkgKyAoYVsxM10gKiBiWzE1XSk7XG4gICAgb3V0WzExXSA9IChhWzEwXSAqIGJbMV0pICsgKGFbMTFdICogYls2XSkgKyAoYVsxMl0gKiBiWzExXSkgKyAoYVsxM10gKiBiWzE2XSk7XG4gICAgb3V0WzEyXSA9IChhWzEwXSAqIGJbMl0pICsgKGFbMTFdICogYls3XSkgKyAoYVsxMl0gKiBiWzEyXSkgKyAoYVsxM10gKiBiWzE3XSk7XG4gICAgb3V0WzEzXSA9IChhWzEwXSAqIGJbM10pICsgKGFbMTFdICogYls4XSkgKyAoYVsxMl0gKiBiWzEzXSkgKyAoYVsxM10gKiBiWzE4XSk7XG4gICAgb3V0WzE0XSA9IChhWzEwXSAqIGJbNF0pICsgKGFbMTFdICogYls5XSkgKyAoYVsxMl0gKiBiWzE0XSkgKyAoYVsxM10gKiBiWzE5XSk7XG5cbiAgICAvLyBBbHBoYSBDaGFubmVsXG4gICAgb3V0WzE1XSA9IChhWzE1XSAqIGJbMF0pICsgKGFbMTZdICogYls1XSkgKyAoYVsxN10gKiBiWzEwXSkgKyAoYVsxOF0gKiBiWzE1XSk7XG4gICAgb3V0WzE2XSA9IChhWzE1XSAqIGJbMV0pICsgKGFbMTZdICogYls2XSkgKyAoYVsxN10gKiBiWzExXSkgKyAoYVsxOF0gKiBiWzE2XSk7XG4gICAgb3V0WzE3XSA9IChhWzE1XSAqIGJbMl0pICsgKGFbMTZdICogYls3XSkgKyAoYVsxN10gKiBiWzEyXSkgKyAoYVsxOF0gKiBiWzE3XSk7XG4gICAgb3V0WzE4XSA9IChhWzE1XSAqIGJbM10pICsgKGFbMTZdICogYls4XSkgKyAoYVsxN10gKiBiWzEzXSkgKyAoYVsxOF0gKiBiWzE4XSk7XG4gICAgb3V0WzE5XSA9IChhWzE1XSAqIGJbNF0pICsgKGFbMTZdICogYls5XSkgKyAoYVsxN10gKiBiWzE0XSkgKyAoYVsxOF0gKiBiWzE5XSk7XG5cbiAgICByZXR1cm4gb3V0O1xufTtcblxuLyoqXG4gKiBDcmVhdGUgYSBGbG9hdDMyIEFycmF5IGFuZCBub3JtYWxpemUgdGhlIG9mZnNldCBjb21wb25lbnQgdG8gMC0xXG4gKlxuICogQHBhcmFtIG1hdHJpeCB7bnVtYmVyW119IChtYXQgNXg0KVxuICogQHJldHVybiBtIHtudW1iZXJbXX0gKG1hdCA1eDQpIHdpdGggYWxsIHZhbHVlcyBiZXR3ZWVuIDAtMVxuICovXG5Db2xvck1hdHJpeEZpbHRlci5wcm90b3R5cGUuX2NvbG9yTWF0cml4ID0gZnVuY3Rpb24gKG1hdHJpeClcbntcbiAgICAvLyBDcmVhdGUgYSBGbG9hdDMyIEFycmF5IGFuZCBub3JtYWxpemUgdGhlIG9mZnNldCBjb21wb25lbnQgdG8gMC0xXG4gICAgdmFyIG0gPSBuZXcgRmxvYXQzMkFycmF5KG1hdHJpeCk7XG4gICAgbVs0XSAvPSAyNTU7XG4gICAgbVs5XSAvPSAyNTU7XG4gICAgbVsxNF0gLz0gMjU1O1xuICAgIG1bMTldIC89IDI1NTtcblxuICAgIHJldHVybiBtO1xufTtcblxuLyoqXG4gKiBBZGp1c3RzIGJyaWdodG5lc3NcbiAqXG4gKiBAcGFyYW0gYiB7bnVtYmVyfSB2YWx1ZSBvZiB0aGUgYnJpZ3RobmVzcyAoMCBpcyBibGFjaylcbiAqIEBwYXJhbSBtdWx0aXBseSB7Ym9vbGVhbn0gcmVmZXIgdG8gLl9sb2FkTWF0cml4KCkgbWV0aG9kXG4gKi9cbkNvbG9yTWF0cml4RmlsdGVyLnByb3RvdHlwZS5icmlnaHRuZXNzID0gZnVuY3Rpb24gKGIsIG11bHRpcGx5KVxue1xuICAgIHZhciBtYXRyaXggPSBbXG4gICAgICAgIGIsIDAsIDAsIDAsIDAsXG4gICAgICAgIDAsIGIsIDAsIDAsIDAsXG4gICAgICAgIDAsIDAsIGIsIDAsIDAsXG4gICAgICAgIDAsIDAsIDAsIDEsIDBcbiAgICBdO1xuXG4gICAgdGhpcy5fbG9hZE1hdHJpeChtYXRyaXgsIG11bHRpcGx5KTtcbn07XG5cbi8qKlxuICogU2V0IHRoZSBtYXRyaWNlcyBpbiBncmV5IHNjYWxlc1xuICpcbiAqIEBwYXJhbSBzY2FsZSB7bnVtYmVyfSB2YWx1ZSBvZiB0aGUgZ3JleSAoMCBpcyBibGFjaylcbiAqIEBwYXJhbSBtdWx0aXBseSB7Ym9vbGVhbn0gcmVmZXIgdG8gLl9sb2FkTWF0cml4KCkgbWV0aG9kXG4gKi9cbkNvbG9yTWF0cml4RmlsdGVyLnByb3RvdHlwZS5ncmV5c2NhbGUgPSBmdW5jdGlvbiAoc2NhbGUsIG11bHRpcGx5KVxue1xuICAgIHZhciBtYXRyaXggPSBbXG4gICAgICAgIHNjYWxlLCBzY2FsZSwgc2NhbGUsIDAsIDAsXG4gICAgICAgIHNjYWxlLCBzY2FsZSwgc2NhbGUsIDAsIDAsXG4gICAgICAgIHNjYWxlLCBzY2FsZSwgc2NhbGUsIDAsIDAsXG4gICAgICAgIDAsIDAsIDAsIDEsIDBcbiAgICBdO1xuXG4gICAgdGhpcy5fbG9hZE1hdHJpeChtYXRyaXgsIG11bHRpcGx5KTtcbn07XG4vL0FtZXJpY2FuaXplZCBhbGlhc1xuQ29sb3JNYXRyaXhGaWx0ZXIucHJvdG90eXBlLmdyYXlzY2FsZSA9IENvbG9yTWF0cml4RmlsdGVyLnByb3RvdHlwZS5ncmV5c2NhbGU7XG5cbi8qKlxuICogU2V0IHRoZSBibGFjayBhbmQgd2hpdGUgbWF0cmljZVxuICogTXVsdGlwbHkgdGhlIGN1cnJlbnQgbWF0cml4XG4gKlxuICogQHBhcmFtIG11bHRpcGx5IHtib29sZWFufSByZWZlciB0byAuX2xvYWRNYXRyaXgoKSBtZXRob2RcbiAqL1xuQ29sb3JNYXRyaXhGaWx0ZXIucHJvdG90eXBlLmJsYWNrQW5kV2hpdGUgPSBmdW5jdGlvbiAobXVsdGlwbHkpXG57XG4gICAgdmFyIG1hdHJpeCA9IFtcbiAgICAgICAgMC4zLCAwLjYsIDAuMSwgMCwgMCxcbiAgICAgICAgMC4zLCAwLjYsIDAuMSwgMCwgMCxcbiAgICAgICAgMC4zLCAwLjYsIDAuMSwgMCwgMCxcbiAgICAgICAgMCwgMCwgMCwgMSwgMFxuICAgIF07XG5cbiAgICB0aGlzLl9sb2FkTWF0cml4KG1hdHJpeCwgbXVsdGlwbHkpO1xufTtcblxuLyoqXG4gKiBTZXQgdGhlIGh1ZSBwcm9wZXJ0eSBvZiB0aGUgY29sb3JcbiAqXG4gKiBAcGFyYW0gcm90YXRpb24ge251bWJlcn0gaW4gZGVncmVlc1xuICogQHBhcmFtIG11bHRpcGx5IHtib29sZWFufSByZWZlciB0byAuX2xvYWRNYXRyaXgoKSBtZXRob2RcbiAqL1xuQ29sb3JNYXRyaXhGaWx0ZXIucHJvdG90eXBlLmh1ZSA9IGZ1bmN0aW9uIChyb3RhdGlvbiwgbXVsdGlwbHkpXG57XG4gICAgcm90YXRpb24gPSAocm90YXRpb24gfHwgMCkgLyAxODAgKiBNYXRoLlBJO1xuICAgIHZhciBjb3MgPSBNYXRoLmNvcyhyb3RhdGlvbiksXG4gICAgICAgIHNpbiA9IE1hdGguc2luKHJvdGF0aW9uKTtcblxuICAgIC8vIGx1bWluYW5jZVJlZCwgbHVtaW5hbmNlR3JlZW4sIGx1bWluYW5jZUJsdWVcbiAgICB2YXIgbHVtUiA9IDAuMjEzLCAvLyBvciAwLjMwODZcbiAgICAgICAgbHVtRyA9IDAuNzE1LCAvLyBvciAwLjYwOTRcbiAgICAgICAgbHVtQiA9IDAuMDcyOyAvLyBvciAwLjA4MjBcblxuICAgIHZhciBtYXRyaXggPSBbXG4gICAgICAgIGx1bVIgKyBjb3MgKiAoMSAtIGx1bVIpICsgc2luICogKC1sdW1SKSwgbHVtRyArIGNvcyAqICgtbHVtRykgKyBzaW4gKiAoLWx1bUcpLCBsdW1CICsgY29zICogKC1sdW1CKSArIHNpbiAqICgxIC0gbHVtQiksIDAsIDAsXG4gICAgICAgIGx1bVIgKyBjb3MgKiAoLWx1bVIpICsgc2luICogKDAuMTQzKSwgbHVtRyArIGNvcyAqICgxIC0gbHVtRykgKyBzaW4gKiAoMC4xNDApLCBsdW1CICsgY29zICogKC1sdW1CKSArIHNpbiAqICgtMC4yODMpLCAwLCAwLFxuICAgICAgICBsdW1SICsgY29zICogKC1sdW1SKSArIHNpbiAqICgtKDEgLSBsdW1SKSksIGx1bUcgKyBjb3MgKiAoLWx1bUcpICsgc2luICogKGx1bUcpLCBsdW1CICsgY29zICogKDEgLSBsdW1CKSArIHNpbiAqIChsdW1CKSwgMCwgMCxcbiAgICAgICAgMCwgMCwgMCwgMSwgMFxuICAgIF07XG5cbiAgICB0aGlzLl9sb2FkTWF0cml4KG1hdHJpeCwgbXVsdGlwbHkpO1xufTtcblxuXG4vKipcbiAqIFNldCB0aGUgY29udHJhc3QgbWF0cml4LCBpbmNyZWFzZSB0aGUgc2VwYXJhdGlvbiBiZXR3ZWVuIGRhcmsgYW5kIGJyaWdodFxuICogSW5jcmVhc2UgY29udHJhc3QgOiBzaGFkb3dzIGRhcmtlciBhbmQgaGlnaGxpZ2h0cyBicmlnaHRlclxuICogRGVjcmVhc2UgY29udHJhc3QgOiBicmluZyB0aGUgc2hhZG93cyB1cCBhbmQgdGhlIGhpZ2hsaWdodHMgZG93blxuICpcbiAqIEBwYXJhbSBhbW91bnQge251bWJlcn0gdmFsdWUgb2YgdGhlIGNvbnRyYXN0XG4gKiBAcGFyYW0gbXVsdGlwbHkge2Jvb2xlYW59IHJlZmVyIHRvIC5fbG9hZE1hdHJpeCgpIG1ldGhvZFxuICovXG5Db2xvck1hdHJpeEZpbHRlci5wcm90b3R5cGUuY29udHJhc3QgPSBmdW5jdGlvbiAoYW1vdW50LCBtdWx0aXBseSlcbntcbiAgICB2YXIgdiA9IChhbW91bnQgfHwgMCkgKyAxO1xuICAgIHZhciBvID0gLTEyOCAqICh2IC0gMSk7XG5cbiAgICB2YXIgbWF0cml4ID0gW1xuICAgICAgICB2LCAwLCAwLCAwLCBvLFxuICAgICAgICAwLCB2LCAwLCAwLCBvLFxuICAgICAgICAwLCAwLCB2LCAwLCBvLFxuICAgICAgICAwLCAwLCAwLCAxLCAwXG4gICAgXTtcblxuICAgIHRoaXMuX2xvYWRNYXRyaXgobWF0cml4LCBtdWx0aXBseSk7XG59O1xuXG4vKipcbiAqIFNldCB0aGUgc2F0dXJhdGlvbiBtYXRyaXgsIGluY3JlYXNlIHRoZSBzZXBhcmF0aW9uIGJldHdlZW4gY29sb3JzXG4gKiBJbmNyZWFzZSBzYXR1cmF0aW9uIDogaW5jcmVhc2UgY29udHJhc3QsIGJyaWdodG5lc3MsIGFuZCBzaGFycG5lc3NcbiAqXG4gKiBAcGFyYW0gYW1vdW50IHtudW1iZXJ9XG4gKiBAcGFyYW0gbXVsdGlwbHkge2Jvb2xlYW59IHJlZmVyIHRvIC5fbG9hZE1hdHJpeCgpIG1ldGhvZFxuICovXG5Db2xvck1hdHJpeEZpbHRlci5wcm90b3R5cGUuc2F0dXJhdGUgPSBmdW5jdGlvbiAoYW1vdW50LCBtdWx0aXBseSlcbntcbiAgICB2YXIgeCA9IChhbW91bnQgfHwgMCkgKiAyIC8gMyArIDE7XG4gICAgdmFyIHkgPSAoKHggLSAxKSAqIC0wLjUpO1xuXG4gICAgdmFyIG1hdHJpeCA9IFtcbiAgICAgICAgeCwgeSwgeSwgMCwgMCxcbiAgICAgICAgeSwgeCwgeSwgMCwgMCxcbiAgICAgICAgeSwgeSwgeCwgMCwgMCxcbiAgICAgICAgMCwgMCwgMCwgMSwgMFxuICAgIF07XG5cbiAgICB0aGlzLl9sb2FkTWF0cml4KG1hdHJpeCwgbXVsdGlwbHkpO1xufTtcblxuLyoqXG4gKiBEZXNhdHVyYXRlIGltYWdlIChyZW1vdmUgY29sb3IpXG4gKlxuICogQ2FsbCB0aGUgc2F0dXJhdGUgZnVuY3Rpb25cbiAqXG4gKiBAcGFyYW0gbXVsdGlwbHkge2Jvb2xlYW59IHJlZmVyIHRvIC5fbG9hZE1hdHJpeCgpIG1ldGhvZFxuICovXG5Db2xvck1hdHJpeEZpbHRlci5wcm90b3R5cGUuZGVzYXR1cmF0ZSA9IGZ1bmN0aW9uIChtdWx0aXBseSkgLy8ganNoaW50IHVudXNlZDpmYWxzZVxue1xuICAgIHRoaXMuc2F0dXJhdGUoLTEpO1xufTtcblxuLyoqXG4gKiBOZWdhdGl2ZSBpbWFnZSAoaW52ZXJzZSBvZiBjbGFzc2ljIHJnYiBtYXRyaXgpXG4gKlxuICogQHBhcmFtIG11bHRpcGx5IHtib29sZWFufSByZWZlciB0byAuX2xvYWRNYXRyaXgoKSBtZXRob2RcbiAqL1xuQ29sb3JNYXRyaXhGaWx0ZXIucHJvdG90eXBlLm5lZ2F0aXZlID0gZnVuY3Rpb24gKG11bHRpcGx5KVxue1xuICAgIHZhciBtYXRyaXggPSBbXG4gICAgICAgIDAsIDEsIDEsIDAsIDAsXG4gICAgICAgIDEsIDAsIDEsIDAsIDAsXG4gICAgICAgIDEsIDEsIDAsIDAsIDAsXG4gICAgICAgIDAsIDAsIDAsIDEsIDBcbiAgICBdO1xuXG4gICAgdGhpcy5fbG9hZE1hdHJpeChtYXRyaXgsIG11bHRpcGx5KTtcbn07XG5cbi8qKlxuICogU2VwaWEgaW1hZ2VcbiAqXG4gKiBAcGFyYW0gbXVsdGlwbHkge2Jvb2xlYW59IHJlZmVyIHRvIC5fbG9hZE1hdHJpeCgpIG1ldGhvZFxuICovXG5Db2xvck1hdHJpeEZpbHRlci5wcm90b3R5cGUuc2VwaWEgPSBmdW5jdGlvbiAobXVsdGlwbHkpXG57XG4gICAgdmFyIG1hdHJpeCA9IFtcbiAgICAgICAgMC4zOTMsIDAuNzY4OTk5OSwgMC4xODg5OTk5OSwgMCwgMCxcbiAgICAgICAgMC4zNDksIDAuNjg1OTk5OSwgMC4xNjc5OTk5OSwgMCwgMCxcbiAgICAgICAgMC4yNzIsIDAuNTMzOTk5OSwgMC4xMzA5OTk5OSwgMCwgMCxcbiAgICAgICAgMCwgMCwgMCwgMSwgMFxuICAgIF07XG5cbiAgICB0aGlzLl9sb2FkTWF0cml4KG1hdHJpeCwgbXVsdGlwbHkpO1xufTtcblxuLyoqXG4gKiBDb2xvciBtb3Rpb24gcGljdHVyZSBwcm9jZXNzIGludmVudGVkIGluIDE5MTYgKHRoYW5rcyBEb21pbmljIFN6YWJsZXdza2kpXG4gKlxuICogQHBhcmFtIG11bHRpcGx5IHtib29sZWFufSByZWZlciB0byAuX2xvYWRNYXRyaXgoKSBtZXRob2RcbiAqL1xuQ29sb3JNYXRyaXhGaWx0ZXIucHJvdG90eXBlLnRlY2huaWNvbG9yID0gZnVuY3Rpb24gKG11bHRpcGx5KVxue1xuICAgIHZhciBtYXRyaXggPSBbXG4gICAgICAgIDEuOTEyNTI3Nzg5MTQ1NjA4MywgLTAuODU0NTM0NDk3Njk1MTY0NSwgLTAuMDkxNTU1MDg0ODI3NTU1ODUsIDAsIDExLjc5MzYwMzQzNDM3NzMzNyxcbiAgICAgICAgLTAuMzA4NzgzMzM4NTkyODA5NywgMS43NjU4OTA4NTU1NDU4NDI4LCAtMC4xMDYwMTc0MzA3NDcyMjI0NSwgMCwgLTcwLjM1MjA1MTYxNDYxMzk4LFxuICAgICAgICAtMC4yMzExMDMzNzc1NDg2MTYsIC0wLjc1MDE4OTkxOTc0NDAyMTIsIDEuODQ3NTk3ODE2MTA4MTg5LCAwLCAzMC45NTA5NDA4Njk0OTExMzgsXG4gICAgICAgIDAsIDAsIDAsIDEsIDBcbiAgICBdO1xuXG4gICAgdGhpcy5fbG9hZE1hdHJpeChtYXRyaXgsIG11bHRpcGx5KTtcbn07XG5cbi8qKlxuICogUG9sYXJvaWQgZmlsdGVyXG4gKlxuICogQHBhcmFtIG11bHRpcGx5IHtib29sZWFufSByZWZlciB0byAuX2xvYWRNYXRyaXgoKSBtZXRob2RcbiAqL1xuQ29sb3JNYXRyaXhGaWx0ZXIucHJvdG90eXBlLnBvbGFyb2lkID0gZnVuY3Rpb24gKG11bHRpcGx5KVxue1xuICAgIHZhciBtYXRyaXggPSBbXG4gICAgICAgIDEuNDM4LCAtMC4wNjIsIC0wLjA2MiwgMCwgMCxcbiAgICAgICAgLTAuMTIyLCAxLjM3OCwgLTAuMTIyLCAwLCAwLFxuICAgICAgICAtMC4wMTYsIC0wLjAxNiwgMS40ODMsIDAsIDAsXG4gICAgICAgIDAsIDAsIDAsIDEsIDBcbiAgICBdO1xuXG4gICAgdGhpcy5fbG9hZE1hdHJpeChtYXRyaXgsIG11bHRpcGx5KTtcbn07XG5cbi8qKlxuICogRmlsdGVyIHdobyB0cmFuc2Zvcm1zIDogUmVkIC0+IEJsdWUgYW5kIEJsdWUgLT4gUmVkXG4gKlxuICogQHBhcmFtIG11bHRpcGx5IHtib29sZWFufSByZWZlciB0byAuX2xvYWRNYXRyaXgoKSBtZXRob2RcbiAqL1xuQ29sb3JNYXRyaXhGaWx0ZXIucHJvdG90eXBlLnRvQkdSID0gZnVuY3Rpb24gKG11bHRpcGx5KVxue1xuICAgIHZhciBtYXRyaXggPSBbXG4gICAgICAgIDAsIDAsIDEsIDAsIDAsXG4gICAgICAgIDAsIDEsIDAsIDAsIDAsXG4gICAgICAgIDEsIDAsIDAsIDAsIDAsXG4gICAgICAgIDAsIDAsIDAsIDEsIDBcbiAgICBdO1xuXG4gICAgdGhpcy5fbG9hZE1hdHJpeChtYXRyaXgsIG11bHRpcGx5KTtcbn07XG5cbi8qKlxuICogQ29sb3IgcmV2ZXJzYWwgZmlsbSBpbnRyb2R1Y2VkIGJ5IEVhc3RtYW4gS29kYWsgaW4gMTkzNS4gKHRoYW5rcyBEb21pbmljIFN6YWJsZXdza2kpXG4gKlxuICogQHBhcmFtIG11bHRpcGx5IHtib29sZWFufSByZWZlciB0byAuX2xvYWRNYXRyaXgoKSBtZXRob2RcbiAqL1xuQ29sb3JNYXRyaXhGaWx0ZXIucHJvdG90eXBlLmtvZGFjaHJvbWUgPSBmdW5jdGlvbiAobXVsdGlwbHkpXG57XG4gICAgdmFyIG1hdHJpeCA9IFtcbiAgICAgICAgMS4xMjg1NTgyMzk2NTkzNTI1LCAtMC4zOTY3MzgyMjgzNjAxMzQ4LCAtMC4wMzk5MjU1OTE3MjkyMTc5MywgMCwgNjMuNzI5NTg3NjIxOTY1MDIsXG4gICAgICAgIC0wLjE2NDA0MzM5OTYyMjQ0NjE2LCAxLjA4MzUyNTE1NjYyOTEzMDQsIC0wLjA1NDk4ODA1MTE1NjMzMTMyLCAwLCAyNC43MzI0MDc4OTY3MDYyMDMsXG4gICAgICAgIC0wLjE2Nzg2MDEwNzA2MTU1NzYzLCAtMC41NjAzNDE2Mjc3Njk1MjQ4LCAxLjYwMTQ4NTA3NjE5NjQ5NDMsIDAsIDM1LjYyOTgyODA3NDYwOTQ2LFxuICAgICAgICAwLCAwLCAwLCAxLCAwXG4gICAgXTtcblxuICAgIHRoaXMuX2xvYWRNYXRyaXgobWF0cml4LCBtdWx0aXBseSk7XG59O1xuXG4vKipcbiAqIEJyb3duIGRlbGljaW91cyBicm93bmkgZmlsdGVyICh0aGFua3MgRG9taW5pYyBTemFibGV3c2tpKVxuICpcbiAqIEBwYXJhbSBtdWx0aXBseSB7Ym9vbGVhbn0gcmVmZXIgdG8gLl9sb2FkTWF0cml4KCkgbWV0aG9kXG4gKi9cbkNvbG9yTWF0cml4RmlsdGVyLnByb3RvdHlwZS5icm93bmkgPSBmdW5jdGlvbiAobXVsdGlwbHkpXG57XG4gICAgdmFyIG1hdHJpeCA9IFtcbiAgICAgICAgMC41OTk3MDIzNDk4MTU5NzE1LCAwLjM0NTUzMjQzMDQ4MzkxMjYzLCAtMC4yNzA4Mjk4Njc0NTM4MDQyLCAwLCA0Ny40MzE5Mjg1NTYwMDg3MyxcbiAgICAgICAgLTAuMDM3NzAzMjQ5ODM3NzgzMTU3LCAwLjg2MDk1Nzc1ODc5OTI2NDEsIDAuMTUwNTk1NTIzODg0NTk5MTMsIDAsIC0zNi45Njg0MTQ5ODMxOTEyNyxcbiAgICAgICAgMC4yNDExMzYzNTEyODE1MzMzNSwgLTAuMDc0NDEwMzc5MDg0MjI0OTIsIDAuNDQ5NzIxODIwNjQ4NzcxNTMsIDAsIC03LjU2MjA3NTI3NzU5MTI4MyxcbiAgICAgICAgMCwgMCwgMCwgMSwgMFxuICAgIF07XG5cbiAgICB0aGlzLl9sb2FkTWF0cml4KG1hdHJpeCwgbXVsdGlwbHkpO1xufTtcblxuLypcbiAqIFZpbnRhZ2UgZmlsdGVyICh0aGFua3MgRG9taW5pYyBTemFibGV3c2tpKVxuICpcbiAqIEBwYXJhbSBtdWx0aXBseSB7Ym9vbGVhbn0gcmVmZXIgdG8gLl9sb2FkTWF0cml4KCkgbWV0aG9kXG4gKi9cbkNvbG9yTWF0cml4RmlsdGVyLnByb3RvdHlwZS52aW50YWdlID0gZnVuY3Rpb24gKG11bHRpcGx5KVxue1xuICAgIHZhciBtYXRyaXggPSBbXG4gICAgICAgIDAuNjI3OTM0NTYzNTYwNTk5NCwgMC4zMjAyMTgzNDIwODE5MzY3LCAtMC4wMzk2NTQwODIxMTMxMjQ1MywgMCwgOS42NTEyODU4MzUyOTQxMjMsXG4gICAgICAgIDAuMDI1NzgzOTc3MDQ4MDg4NjgsIDAuNjQ0MTE4ODY0NDM3NDc3MSwgMC4wMzI1OTEyNzYxNjE0OTI5NCwgMCwgNy40NjI4MjkxNzY0NzA1OTEsXG4gICAgICAgIDAuMDQ2NjA1NTU1Njc4MjcxOSwgLTAuMDg1MTIzMjk4NzI0Nzg5MSwgMC41MjQxNjQ4MDE4NzAwNDY1LCAwLCA1LjE1OTE5MDU4ODIzNTI5NixcbiAgICAgICAgMCwgMCwgMCwgMSwgMFxuICAgIF07XG5cbiAgICB0aGlzLl9sb2FkTWF0cml4KG1hdHJpeCwgbXVsdGlwbHkpO1xufTtcblxuLypcbiAqIFdlIGRvbid0IGtub3cgZXhhY3RseSB3aGF0IGl0IGRvZXMsIGtpbmQgb2YgZ3JhZGllbnQgbWFwLCBidXQgZnVubnkgdG8gcGxheSB3aXRoIVxuICpcbiAqIEBwYXJhbSBkZXNhdHVyYXRpb24ge251bWJlcn1cbiAqIEBwYXJhbSB0b25lZCB7bnVtYmVyfVxuICogQHBhcmFtIGxpZ2h0Q29sb3Ige3N0cmluZ30gKGV4YW1wbGUgOiBcIjB4RkZFNTgwXCIpXG4gKiBAcGFyYW0gZGFya0NvbG9yIHtzdHJpbmd9ICAoZXhhbXBsZSA6IFwiMHhGRkU1ODBcIilcbiAqXG4gKiBAcGFyYW0gbXVsdGlwbHkge2Jvb2xlYW59IHJlZmVyIHRvIC5fbG9hZE1hdHJpeCgpIG1ldGhvZFxuICovXG5Db2xvck1hdHJpeEZpbHRlci5wcm90b3R5cGUuY29sb3JUb25lID0gZnVuY3Rpb24gKGRlc2F0dXJhdGlvbiwgdG9uZWQsIGxpZ2h0Q29sb3IsIGRhcmtDb2xvciwgbXVsdGlwbHkpXG57XG4gICAgZGVzYXR1cmF0aW9uID0gZGVzYXR1cmF0aW9uIHx8IDAuMjtcbiAgICB0b25lZCA9IHRvbmVkIHx8IDAuMTU7XG4gICAgbGlnaHRDb2xvciA9IGxpZ2h0Q29sb3IgfHwgMHhGRkU1ODA7XG4gICAgZGFya0NvbG9yID0gZGFya0NvbG9yIHx8IDB4MzM4MDAwO1xuXG4gICAgdmFyIGxSID0gKChsaWdodENvbG9yID4+IDE2KSAmIDB4RkYpIC8gMjU1O1xuICAgIHZhciBsRyA9ICgobGlnaHRDb2xvciA+PiA4KSAmIDB4RkYpIC8gMjU1O1xuICAgIHZhciBsQiA9IChsaWdodENvbG9yICYgMHhGRikgLyAyNTU7XG5cbiAgICB2YXIgZFIgPSAoKGRhcmtDb2xvciA+PiAxNikgJiAweEZGKSAvIDI1NTtcbiAgICB2YXIgZEcgPSAoKGRhcmtDb2xvciA+PiA4KSAmIDB4RkYpIC8gMjU1O1xuICAgIHZhciBkQiA9IChkYXJrQ29sb3IgJiAweEZGKSAvIDI1NTtcblxuICAgIHZhciBtYXRyaXggPSBbXG4gICAgICAgIDAuMywgMC41OSwgMC4xMSwgMCwgMCxcbiAgICAgICAgbFIsIGxHLCBsQiwgZGVzYXR1cmF0aW9uLCAwLFxuICAgICAgICBkUiwgZEcsIGRCLCB0b25lZCwgMCxcbiAgICAgICAgbFIgLSBkUiwgbEcgLSBkRywgbEIgLSBkQiwgMCwgMFxuICAgIF07XG5cbiAgICB0aGlzLl9sb2FkTWF0cml4KG1hdHJpeCwgbXVsdGlwbHkpO1xufTtcblxuLypcbiAqIE5pZ2h0IGVmZmVjdFxuICpcbiAqIEBwYXJhbSBpbnRlbnNpdHkge251bWJlcn1cbiAqIEBwYXJhbSBtdWx0aXBseSB7Ym9vbGVhbn0gcmVmZXIgdG8gLl9sb2FkTWF0cml4KCkgbWV0aG9kXG4gKi9cbkNvbG9yTWF0cml4RmlsdGVyLnByb3RvdHlwZS5uaWdodCA9IGZ1bmN0aW9uIChpbnRlbnNpdHksIG11bHRpcGx5KVxue1xuICAgIGludGVuc2l0eSA9IGludGVuc2l0eSB8fCAwLjE7XG4gICAgdmFyIG1hdHJpeCA9IFtcbiAgICAgICAgaW50ZW5zaXR5ICogKCAtMi4wKSwgLWludGVuc2l0eSwgMCwgMCwgMCxcbiAgICAgICAgLWludGVuc2l0eSwgMCwgaW50ZW5zaXR5LCAwLCAwLFxuICAgICAgICAwLCBpbnRlbnNpdHksIGludGVuc2l0eSAqIDIuMCwgMCwgMCxcbiAgICAgICAgMCwgMCwgMCwgMSwgMFxuICAgIF07XG5cbiAgICB0aGlzLl9sb2FkTWF0cml4KG1hdHJpeCwgbXVsdGlwbHkpO1xufTtcblxuXG4vKlxuICogUHJlZGF0b3IgZWZmZWN0XG4gKlxuICogRXJhc2UgdGhlIGN1cnJlbnQgbWF0cml4IGJ5IHNldHRpbmcgYSBuZXcgaW5kZXBlbnQgb25lXG4gKlxuICogQHBhcmFtIGFtb3VudCB7bnVtYmVyfSBob3cgbXVjaCB0aGUgcHJlZGF0b3IgZmVlbHMgaGlzIGZ1dHVyZSB2aWN0aW1cbiAqIEBwYXJhbSBtdWx0aXBseSB7Ym9vbGVhbn0gcmVmZXIgdG8gLl9sb2FkTWF0cml4KCkgbWV0aG9kXG4gKi9cbkNvbG9yTWF0cml4RmlsdGVyLnByb3RvdHlwZS5wcmVkYXRvciA9IGZ1bmN0aW9uIChhbW91bnQsIG11bHRpcGx5KVxue1xuICAgIHZhciBtYXRyaXggPSBbXG4gICAgICAgIDExLjIyNDEzMDYzMDQ5MzE2NCAqIGFtb3VudCwgLTQuNzk0NDg2OTk5NTExNzE5ICogYW1vdW50LCAtMi44NzQ2MTE4NTQ1NTMyMjI3ICogYW1vdW50LCAwICogYW1vdW50LCAwLjQwMzQyNDM4MjIwOTc3NzgzICogYW1vdW50LFxuICAgICAgICAtMy42MzMwNjk3NTM2NDY4NTA2ICogYW1vdW50LCA5LjE5MzE1NzE5NjA0NDkyMiAqIGFtb3VudCwgLTIuOTUxODEwODM2NzkxOTkyICogYW1vdW50LCAwICogYW1vdW50LCAtMS4zMTYxMzUwNDg4NjYyNzIgKiBhbW91bnQsXG4gICAgICAgIC0zLjIxODQxOTc5MDI2Nzk0NDMgKiBhbW91bnQsIC00LjIzNzUwMzA1MTc1NzgxMjUgKiBhbW91bnQsIDcuNDc2NDQ4MDU5MDgyMDMxICogYW1vdW50LCAwICogYW1vdW50LCAwLjgwNDQ0NTkyMjM3NDcyNTMgKiBhbW91bnQsXG4gICAgICAgIDAsIDAsIDAsIDEsIDBcbiAgICBdO1xuXG4gICAgdGhpcy5fbG9hZE1hdHJpeChtYXRyaXgsIG11bHRpcGx5KTtcbn07XG5cbi8qXG4gKiBMU0QgZWZmZWN0XG4gKlxuICogTXVsdGlwbHkgdGhlIGN1cnJlbnQgbWF0cml4XG4gKlxuICogQHBhcmFtIGFtb3VudCB7bnVtYmVyfSBIb3cgY3JhenkgaXMgeW91ciBlZmZlY3RcbiAqIEBwYXJhbSBtdWx0aXBseSB7Ym9vbGVhbn0gcmVmZXIgdG8gLl9sb2FkTWF0cml4KCkgbWV0aG9kXG4gKi9cbkNvbG9yTWF0cml4RmlsdGVyLnByb3RvdHlwZS5sc2QgPSBmdW5jdGlvbiAobXVsdGlwbHkpXG57XG4gICAgdmFyIG1hdHJpeCA9IFtcbiAgICAgICAgMiwgLTAuNCwgMC41LCAwLCAwLFxuICAgICAgICAtMC41LCAyLCAtMC40LCAwLCAwLFxuICAgICAgICAtMC40LCAtMC41LCAzLCAwLCAwLFxuICAgICAgICAwLCAwLCAwLCAxLCAwXG4gICAgXTtcblxuICAgIHRoaXMuX2xvYWRNYXRyaXgobWF0cml4LCBtdWx0aXBseSk7XG59O1xuXG4vKlxuICogRXJhc2UgdGhlIGN1cnJlbnQgbWF0cml4IGJ5IHNldHRpbmcgdGhlIGRlZmF1bHQgb25lXG4gKlxuICovXG5Db2xvck1hdHJpeEZpbHRlci5wcm90b3R5cGUucmVzZXQgPSBmdW5jdGlvbiAoKVxue1xuICAgIHZhciBtYXRyaXggPSBbXG4gICAgICAgIDEsIDAsIDAsIDAsIDAsXG4gICAgICAgIDAsIDEsIDAsIDAsIDAsXG4gICAgICAgIDAsIDAsIDEsIDAsIDAsXG4gICAgICAgIDAsIDAsIDAsIDEsIDBcbiAgICBdO1xuXG4gICAgdGhpcy5fbG9hZE1hdHJpeChtYXRyaXgsIGZhbHNlKTtcbn07XG5cblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoQ29sb3JNYXRyaXhGaWx0ZXIucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgbWF0cml4IG9mIHRoZSBjb2xvciBtYXRyaXggZmlsdGVyXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJbXX1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLkNvbG9yTWF0cml4RmlsdGVyI1xuICAgICAqIEBkZWZhdWx0IFsxLCAwLCAwLCAwLCAwLCAwLCAxLCAwLCAwLCAwLCAwLCAwLCAxLCAwLCAwLCAwLCAwLCAwLCAxLCAwXVxuICAgICAqL1xuICAgIG1hdHJpeDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVuaWZvcm1zLm0udmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLm0udmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi8uLi9jb3JlJyk7XG4vLyBAc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9zdWJzdGFjay9icmZzL2lzc3Vlcy8yNVxuXG5cbi8qKlxuICogVGhpcyBsb3dlcnMgdGhlIGNvbG9yIGRlcHRoIG9mIHlvdXIgaW1hZ2UgYnkgdGhlIGdpdmVuIGFtb3VudCwgcHJvZHVjaW5nIGFuIGltYWdlIHdpdGggYSBzbWFsbGVyIHBhbGV0dGUuXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLkFic3RyYWN0RmlsdGVyXG4gKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzXG4gKi9cbmZ1bmN0aW9uIENvbG9yU3RlcEZpbHRlcigpXG57XG4gICAgY29yZS5BYnN0cmFjdEZpbHRlci5jYWxsKHRoaXMsXG4gICAgICAgIC8vIHZlcnRleCBzaGFkZXJcbiAgICAgICAgbnVsbCxcbiAgICAgICAgLy8gZnJhZ21lbnQgc2hhZGVyXG4gICAgICAgIFwicHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XFxuXFxudmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7XFxuXFxudW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXI7XFxudW5pZm9ybSBmbG9hdCBzdGVwO1xcblxcbnZvaWQgbWFpbih2b2lkKVxcbntcXG4gICAgdmVjNCBjb2xvciA9IHRleHR1cmUyRCh1U2FtcGxlciwgdlRleHR1cmVDb29yZCk7XFxuXFxuICAgIGNvbG9yID0gZmxvb3IoY29sb3IgKiBzdGVwKSAvIHN0ZXA7XFxuXFxuICAgIGdsX0ZyYWdDb2xvciA9IGNvbG9yO1xcbn1cXG5cIixcbiAgICAgICAgLy8gY3VzdG9tIHVuaWZvcm1zXG4gICAgICAgIHtcbiAgICAgICAgICAgIHN0ZXA6IHsgdHlwZTogJzFmJywgdmFsdWU6IDUgfVxuICAgICAgICB9XG4gICAgKTtcbn1cblxuQ29sb3JTdGVwRmlsdGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoY29yZS5BYnN0cmFjdEZpbHRlci5wcm90b3R5cGUpO1xuQ29sb3JTdGVwRmlsdGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IENvbG9yU3RlcEZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gQ29sb3JTdGVwRmlsdGVyO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhDb2xvclN0ZXBGaWx0ZXIucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogVGhlIG51bWJlciBvZiBzdGVwcyB0byByZWR1Y2UgdGhlIHBhbGV0dGUgYnkuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5Db2xvclN0ZXBGaWx0ZXIjXG4gICAgICovXG4gICAgc3RlcDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVuaWZvcm1zLnN0ZXAudmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLnN0ZXAudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi8uLi9jb3JlJyk7XG4vLyBAc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9zdWJzdGFjay9icmZzL2lzc3Vlcy8yNVxuXG5cbi8qKlxuICogVGhlIENvbnZvbHV0aW9uRmlsdGVyIGNsYXNzIGFwcGxpZXMgYSBtYXRyaXggY29udm9sdXRpb24gZmlsdGVyIGVmZmVjdC5cbiAqIEEgY29udm9sdXRpb24gY29tYmluZXMgcGl4ZWxzIGluIHRoZSBpbnB1dCBpbWFnZSB3aXRoIG5laWdoYm9yaW5nIHBpeGVscyB0byBwcm9kdWNlIGEgbmV3IGltYWdlLlxuICogQSB3aWRlIHZhcmlldHkgb2YgaW1hZ2UgZWZmZWN0cyBjYW4gYmUgYWNoaWV2ZWQgdGhyb3VnaCBjb252b2x1dGlvbnMsIGluY2x1ZGluZyBibHVycmluZywgZWRnZVxuICogZGV0ZWN0aW9uLCBzaGFycGVuaW5nLCBlbWJvc3NpbmcsIGFuZCBiZXZlbGluZy4gVGhlIG1hdHJpeCBzaG91bGQgYmUgc3BlY2lmaWVkIGFzIGEgOSBwb2ludCBBcnJheS5cbiAqIFNlZSBodHRwOi8vZG9jcy5naW1wLm9yZy9lbi9wbHVnLWluLWNvbnZtYXRyaXguaHRtbCBmb3IgbW9yZSBpbmZvLlxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5BYnN0cmFjdEZpbHRlclxuICogQG1lbWJlcm9mIFBJWEkuZmlsdGVyc1xuICogQHBhcmFtIG1hdHJpeCB7bnVtYmVyW119IEFuIGFycmF5IG9mIHZhbHVlcyB1c2VkIGZvciBtYXRyaXggdHJhbnNmb3JtYXRpb24uIFNwZWNpZmllZCBhcyBhIDkgcG9pbnQgQXJyYXkuXG4gKiBAcGFyYW0gd2lkdGgge251bWJlcn0gV2lkdGggb2YgdGhlIG9iamVjdCB5b3UgYXJlIHRyYW5zZm9ybWluZ1xuICogQHBhcmFtIGhlaWdodCB7bnVtYmVyfSBIZWlnaHQgb2YgdGhlIG9iamVjdCB5b3UgYXJlIHRyYW5zZm9ybWluZ1xuICovXG5mdW5jdGlvbiBDb252b2x1dGlvbkZpbHRlcihtYXRyaXgsIHdpZHRoLCBoZWlnaHQpXG57XG4gICAgY29yZS5BYnN0cmFjdEZpbHRlci5jYWxsKHRoaXMsXG4gICAgICAgIC8vIHZlcnRleCBzaGFkZXJcbiAgICAgICAgbnVsbCxcbiAgICAgICAgLy8gZnJhZ21lbnQgc2hhZGVyXG4gICAgICAgIFwicHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XFxuXFxudmFyeWluZyBtZWRpdW1wIHZlYzIgdlRleHR1cmVDb29yZDtcXG5cXG51bmlmb3JtIHNhbXBsZXIyRCB1U2FtcGxlcjtcXG51bmlmb3JtIHZlYzIgdGV4ZWxTaXplO1xcbnVuaWZvcm0gZmxvYXQgbWF0cml4WzldO1xcblxcbnZvaWQgbWFpbih2b2lkKVxcbntcXG4gICB2ZWM0IGMxMSA9IHRleHR1cmUyRCh1U2FtcGxlciwgdlRleHR1cmVDb29yZCAtIHRleGVsU2l6ZSk7IC8vIHRvcCBsZWZ0XFxuICAgdmVjNCBjMTIgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZlYzIodlRleHR1cmVDb29yZC54LCB2VGV4dHVyZUNvb3JkLnkgLSB0ZXhlbFNpemUueSkpOyAvLyB0b3AgY2VudGVyXFxuICAgdmVjNCBjMTMgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZlYzIodlRleHR1cmVDb29yZC54ICsgdGV4ZWxTaXplLngsIHZUZXh0dXJlQ29vcmQueSAtIHRleGVsU2l6ZS55KSk7IC8vIHRvcCByaWdodFxcblxcbiAgIHZlYzQgYzIxID0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2ZWMyKHZUZXh0dXJlQ29vcmQueCAtIHRleGVsU2l6ZS54LCB2VGV4dHVyZUNvb3JkLnkpKTsgLy8gbWlkIGxlZnRcXG4gICB2ZWM0IGMyMiA9IHRleHR1cmUyRCh1U2FtcGxlciwgdlRleHR1cmVDb29yZCk7IC8vIG1pZCBjZW50ZXJcXG4gICB2ZWM0IGMyMyA9IHRleHR1cmUyRCh1U2FtcGxlciwgdmVjMih2VGV4dHVyZUNvb3JkLnggKyB0ZXhlbFNpemUueCwgdlRleHR1cmVDb29yZC55KSk7IC8vIG1pZCByaWdodFxcblxcbiAgIHZlYzQgYzMxID0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2ZWMyKHZUZXh0dXJlQ29vcmQueCAtIHRleGVsU2l6ZS54LCB2VGV4dHVyZUNvb3JkLnkgKyB0ZXhlbFNpemUueSkpOyAvLyBib3R0b20gbGVmdFxcbiAgIHZlYzQgYzMyID0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2ZWMyKHZUZXh0dXJlQ29vcmQueCwgdlRleHR1cmVDb29yZC55ICsgdGV4ZWxTaXplLnkpKTsgLy8gYm90dG9tIGNlbnRlclxcbiAgIHZlYzQgYzMzID0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2VGV4dHVyZUNvb3JkICsgdGV4ZWxTaXplKTsgLy8gYm90dG9tIHJpZ2h0XFxuXFxuICAgZ2xfRnJhZ0NvbG9yID1cXG4gICAgICAgYzExICogbWF0cml4WzBdICsgYzEyICogbWF0cml4WzFdICsgYzEzICogbWF0cml4WzJdICtcXG4gICAgICAgYzIxICogbWF0cml4WzNdICsgYzIyICogbWF0cml4WzRdICsgYzIzICogbWF0cml4WzVdICtcXG4gICAgICAgYzMxICogbWF0cml4WzZdICsgYzMyICogbWF0cml4WzddICsgYzMzICogbWF0cml4WzhdO1xcblxcbiAgIGdsX0ZyYWdDb2xvci5hID0gYzIyLmE7XFxufVxcblwiLFxuICAgICAgICAvLyBjdXN0b20gdW5pZm9ybXNcbiAgICAgICAge1xuICAgICAgICAgICAgbWF0cml4OiAgICAgeyB0eXBlOiAnMWZ2JywgdmFsdWU6IG5ldyBGbG9hdDMyQXJyYXkobWF0cml4KSB9LFxuICAgICAgICAgICAgdGV4ZWxTaXplOiAgeyB0eXBlOiAndjInLCB2YWx1ZTogeyB4OiAxIC8gd2lkdGgsIHk6IDEgLyBoZWlnaHQgfSB9XG4gICAgICAgIH1cbiAgICApO1xufVxuXG5Db252b2x1dGlvbkZpbHRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuQWJzdHJhY3RGaWx0ZXIucHJvdG90eXBlKTtcbkNvbnZvbHV0aW9uRmlsdGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IENvbnZvbHV0aW9uRmlsdGVyO1xubW9kdWxlLmV4cG9ydHMgPSBDb252b2x1dGlvbkZpbHRlcjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoQ29udm9sdXRpb25GaWx0ZXIucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogQW4gYXJyYXkgb2YgdmFsdWVzIHVzZWQgZm9yIG1hdHJpeCB0cmFuc2Zvcm1hdGlvbi4gU3BlY2lmaWVkIGFzIGEgOSBwb2ludCBBcnJheS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcltdfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuQ29udm9sdXRpb25GaWx0ZXIjXG4gICAgICovXG4gICAgbWF0cml4OiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudW5pZm9ybXMubWF0cml4LnZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy5tYXRyaXgudmFsdWUgPSBuZXcgRmxvYXQzMkFycmF5KHZhbHVlKTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBXaWR0aCBvZiB0aGUgb2JqZWN0IHlvdSBhcmUgdHJhbnNmb3JtaW5nXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5Db252b2x1dGlvbkZpbHRlciNcbiAgICAgKi9cbiAgICB3aWR0aDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiAxL3RoaXMudW5pZm9ybXMudGV4ZWxTaXplLnZhbHVlLng7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLnRleGVsU2l6ZS52YWx1ZS54ID0gMS92YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBIZWlnaHQgb2YgdGhlIG9iamVjdCB5b3UgYXJlIHRyYW5zZm9ybWluZ1xuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuQ29udm9sdXRpb25GaWx0ZXIjXG4gICAgICovXG4gICAgaGVpZ2h0OiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIDEvdGhpcy51bmlmb3Jtcy50ZXhlbFNpemUudmFsdWUueTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudW5pZm9ybXMudGV4ZWxTaXplLnZhbHVlLnkgPSAxL3ZhbHVlO1xuICAgICAgICB9XG4gICAgfVxufSk7XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uLy4uL2NvcmUnKTtcbi8vIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL3N1YnN0YWNrL2JyZnMvaXNzdWVzLzI1XG5cblxuLyoqXG4gKiBBIENyb3NzIEhhdGNoIGVmZmVjdCBmaWx0ZXIuXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLkFic3RyYWN0RmlsdGVyXG4gKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzXG4gKi9cbmZ1bmN0aW9uIENyb3NzSGF0Y2hGaWx0ZXIoKVxue1xuICAgIGNvcmUuQWJzdHJhY3RGaWx0ZXIuY2FsbCh0aGlzLFxuICAgICAgICAvLyB2ZXJ0ZXggc2hhZGVyXG4gICAgICAgIG51bGwsXG4gICAgICAgIC8vIGZyYWdtZW50IHNoYWRlclxuICAgICAgICBcInByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xcblxcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xcblxcbnVuaWZvcm0gc2FtcGxlcjJEIHVTYW1wbGVyO1xcblxcbnZvaWQgbWFpbih2b2lkKVxcbntcXG4gICAgZmxvYXQgbHVtID0gbGVuZ3RoKHRleHR1cmUyRCh1U2FtcGxlciwgdlRleHR1cmVDb29yZC54eSkucmdiKTtcXG5cXG4gICAgZ2xfRnJhZ0NvbG9yID0gdmVjNCgxLjAsIDEuMCwgMS4wLCAxLjApO1xcblxcbiAgICBpZiAobHVtIDwgMS4wMClcXG4gICAge1xcbiAgICAgICAgaWYgKG1vZChnbF9GcmFnQ29vcmQueCArIGdsX0ZyYWdDb29yZC55LCAxMC4wKSA9PSAwLjApXFxuICAgICAgICB7XFxuICAgICAgICAgICAgZ2xfRnJhZ0NvbG9yID0gdmVjNCgwLjAsIDAuMCwgMC4wLCAxLjApO1xcbiAgICAgICAgfVxcbiAgICB9XFxuXFxuICAgIGlmIChsdW0gPCAwLjc1KVxcbiAgICB7XFxuICAgICAgICBpZiAobW9kKGdsX0ZyYWdDb29yZC54IC0gZ2xfRnJhZ0Nvb3JkLnksIDEwLjApID09IDAuMClcXG4gICAgICAgIHtcXG4gICAgICAgICAgICBnbF9GcmFnQ29sb3IgPSB2ZWM0KDAuMCwgMC4wLCAwLjAsIDEuMCk7XFxuICAgICAgICB9XFxuICAgIH1cXG5cXG4gICAgaWYgKGx1bSA8IDAuNTApXFxuICAgIHtcXG4gICAgICAgIGlmIChtb2QoZ2xfRnJhZ0Nvb3JkLnggKyBnbF9GcmFnQ29vcmQueSAtIDUuMCwgMTAuMCkgPT0gMC4wKVxcbiAgICAgICAge1xcbiAgICAgICAgICAgIGdsX0ZyYWdDb2xvciA9IHZlYzQoMC4wLCAwLjAsIDAuMCwgMS4wKTtcXG4gICAgICAgIH1cXG4gICAgfVxcblxcbiAgICBpZiAobHVtIDwgMC4zKVxcbiAgICB7XFxuICAgICAgICBpZiAobW9kKGdsX0ZyYWdDb29yZC54IC0gZ2xfRnJhZ0Nvb3JkLnkgLSA1LjAsIDEwLjApID09IDAuMClcXG4gICAgICAgIHtcXG4gICAgICAgICAgICBnbF9GcmFnQ29sb3IgPSB2ZWM0KDAuMCwgMC4wLCAwLjAsIDEuMCk7XFxuICAgICAgICB9XFxuICAgIH1cXG59XFxuXCJcbiAgICApO1xufVxuXG5Dcm9zc0hhdGNoRmlsdGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoY29yZS5BYnN0cmFjdEZpbHRlci5wcm90b3R5cGUpO1xuQ3Jvc3NIYXRjaEZpbHRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBDcm9zc0hhdGNoRmlsdGVyO1xubW9kdWxlLmV4cG9ydHMgPSBDcm9zc0hhdGNoRmlsdGVyO1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi8uLi9jb3JlJyk7XG4vLyBAc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9zdWJzdGFjay9icmZzL2lzc3Vlcy8yNVxuXG5cbi8qKlxuICogVGhlIERpc3BsYWNlbWVudEZpbHRlciBjbGFzcyB1c2VzIHRoZSBwaXhlbCB2YWx1ZXMgZnJvbSB0aGUgc3BlY2lmaWVkIHRleHR1cmUgKGNhbGxlZCB0aGUgZGlzcGxhY2VtZW50IG1hcCkgdG8gcGVyZm9ybSBhIGRpc3BsYWNlbWVudCBvZiBhbiBvYmplY3QuXG4gKiBZb3UgY2FuIHVzZSB0aGlzIGZpbHRlciB0byBhcHBseSBhbGwgbWFub3Igb2YgY3Jhenkgd2FycGluZyBlZmZlY3RzXG4gKiBDdXJyZW50bHkgdGhlIHIgcHJvcGVydHkgb2YgdGhlIHRleHR1cmUgaXMgdXNlZCB0byBvZmZzZXQgdGhlIHggYW5kIHRoZSBnIHByb3BlcnR5IG9mIHRoZSB0ZXh0dXJlIGlzIHVzZWQgdG8gb2Zmc2V0IHRoZSB5LlxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5BYnN0cmFjdEZpbHRlclxuICogQG1lbWJlcm9mIFBJWEkuZmlsdGVyc1xuICogQHBhcmFtIHNwcml0ZSB7UElYSS5TcHJpdGV9IHRoZSBzcHJpdGUgdXNlZCBmb3IgdGhlIGRpc3BsYWNlbWVudCBtYXAuIChtYWtlIHN1cmUgaXRzIGFkZGVkIHRvIHRoZSBzY2VuZSEpXG4gKi9cbmZ1bmN0aW9uIERpc3BsYWNlbWVudEZpbHRlcihzcHJpdGUsIHNjYWxlKVxue1xuICAgIHZhciBtYXNrTWF0cml4ID0gbmV3IGNvcmUuTWF0cml4KCk7XG4gICAgc3ByaXRlLnJlbmRlcmFibGUgPSBmYWxzZTtcblxuICAgIGNvcmUuQWJzdHJhY3RGaWx0ZXIuY2FsbCh0aGlzLFxuICAgICAgICAvLyB2ZXJ0ZXggc2hhZGVyXG4gICAgICAgIFwiYXR0cmlidXRlIHZlYzIgYVZlcnRleFBvc2l0aW9uO1xcbmF0dHJpYnV0ZSB2ZWMyIGFUZXh0dXJlQ29vcmQ7XFxuYXR0cmlidXRlIHZlYzQgYUNvbG9yO1xcblxcbnVuaWZvcm0gbWF0MyBwcm9qZWN0aW9uTWF0cml4O1xcbnVuaWZvcm0gbWF0MyBvdGhlck1hdHJpeDtcXG5cXG52YXJ5aW5nIHZlYzIgdk1hcENvb3JkO1xcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xcbnZhcnlpbmcgdmVjNCB2Q29sb3I7XFxuXFxudm9pZCBtYWluKHZvaWQpXFxue1xcbiAgIGdsX1Bvc2l0aW9uID0gdmVjNCgocHJvamVjdGlvbk1hdHJpeCAqIHZlYzMoYVZlcnRleFBvc2l0aW9uLCAxLjApKS54eSwgMC4wLCAxLjApO1xcbiAgIHZUZXh0dXJlQ29vcmQgPSBhVGV4dHVyZUNvb3JkO1xcbiAgIHZNYXBDb29yZCA9ICggb3RoZXJNYXRyaXggKiB2ZWMzKCBhVGV4dHVyZUNvb3JkLCAxLjApICApLnh5O1xcbiAgIHZDb2xvciA9IHZlYzQoYUNvbG9yLnJnYiAqIGFDb2xvci5hLCBhQ29sb3IuYSk7XFxufVxcblwiLFxuICAgICAgICAvLyBmcmFnbWVudCBzaGFkZXJcbiAgICAgICAgXCJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcXG5cXG52YXJ5aW5nIHZlYzIgdk1hcENvb3JkO1xcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xcbnZhcnlpbmcgdmVjNCB2Q29sb3I7XFxuXFxudW5pZm9ybSB2ZWMyIHNjYWxlO1xcblxcbnVuaWZvcm0gc2FtcGxlcjJEIHVTYW1wbGVyO1xcbnVuaWZvcm0gc2FtcGxlcjJEIG1hcFNhbXBsZXI7XFxuXFxudm9pZCBtYWluKHZvaWQpXFxue1xcbiAgIHZlYzQgbWFwID0gIHRleHR1cmUyRChtYXBTYW1wbGVyLCB2TWFwQ29vcmQpO1xcblxcbiAgIG1hcCAtPSAwLjU7XFxuICAgbWFwLnh5ICo9IHNjYWxlO1xcblxcbiAgIGdsX0ZyYWdDb2xvciA9IHRleHR1cmUyRCh1U2FtcGxlciwgdmVjMih2VGV4dHVyZUNvb3JkLnggKyBtYXAueCwgdlRleHR1cmVDb29yZC55ICsgbWFwLnkpKTtcXG59XFxuXCIsXG4gICAgICAgIC8vIHVuaWZvcm1zXG4gICAgICAgIHtcbiAgICAgICAgICAgIG1hcFNhbXBsZXI6ICAgICB7IHR5cGU6ICdzYW1wbGVyMkQnLCB2YWx1ZTogc3ByaXRlLnRleHR1cmUgfSxcbiAgICAgICAgICAgIG90aGVyTWF0cml4OiAgICB7IHR5cGU6ICdtYXQzJywgdmFsdWU6IG1hc2tNYXRyaXgudG9BcnJheSh0cnVlKSB9LFxuICAgICAgICAgICAgc2NhbGU6ICAgICAgICAgIHsgdHlwZTogJ3YyJywgdmFsdWU6IHsgeDogMSwgeTogMSB9IH1cbiAgICAgICAgfVxuICAgICk7XG5cbiAgICB0aGlzLm1hc2tTcHJpdGUgPSBzcHJpdGU7XG4gICAgdGhpcy5tYXNrTWF0cml4ID0gbWFza01hdHJpeDtcblxuICAgIGlmIChzY2FsZSA9PT0gbnVsbCB8fCBzY2FsZSA9PT0gdW5kZWZpbmVkKVxuICAgIHtcbiAgICAgICAgc2NhbGUgPSAyMDtcbiAgICB9XG5cbiAgICB0aGlzLnNjYWxlID0gbmV3IGNvcmUuUG9pbnQoc2NhbGUsIHNjYWxlKTtcbn1cblxuRGlzcGxhY2VtZW50RmlsdGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoY29yZS5BYnN0cmFjdEZpbHRlci5wcm90b3R5cGUpO1xuRGlzcGxhY2VtZW50RmlsdGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IERpc3BsYWNlbWVudEZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gRGlzcGxhY2VtZW50RmlsdGVyO1xuXG5EaXNwbGFjZW1lbnRGaWx0ZXIucHJvdG90eXBlLmFwcGx5RmlsdGVyID0gZnVuY3Rpb24gKHJlbmRlcmVyLCBpbnB1dCwgb3V0cHV0KVxue1xuICAgIHZhciBmaWx0ZXJNYW5hZ2VyID0gcmVuZGVyZXIuZmlsdGVyTWFuYWdlcjtcblxuICAgIGZpbHRlck1hbmFnZXIuY2FsY3VsYXRlTWFwcGVkTWF0cml4KGlucHV0LmZyYW1lLCB0aGlzLm1hc2tTcHJpdGUsIHRoaXMubWFza01hdHJpeCk7XG5cbiAgICB0aGlzLnVuaWZvcm1zLm90aGVyTWF0cml4LnZhbHVlID0gdGhpcy5tYXNrTWF0cml4LnRvQXJyYXkodHJ1ZSk7XG4gICAgdGhpcy51bmlmb3Jtcy5zY2FsZS52YWx1ZS54ID0gdGhpcy5zY2FsZS54ICogKDEvaW5wdXQuZnJhbWUud2lkdGgpO1xuICAgIHRoaXMudW5pZm9ybXMuc2NhbGUudmFsdWUueSA9IHRoaXMuc2NhbGUueSAqICgxL2lucHV0LmZyYW1lLmhlaWdodCk7XG5cbiAgICB2YXIgc2hhZGVyID0gdGhpcy5nZXRTaGFkZXIocmVuZGVyZXIpO1xuICAgICAvLyBkcmF3IHRoZSBmaWx0ZXIuLi5cbiAgICBmaWx0ZXJNYW5hZ2VyLmFwcGx5RmlsdGVyKHNoYWRlciwgaW5wdXQsIG91dHB1dCk7XG59O1xuXG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKERpc3BsYWNlbWVudEZpbHRlci5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBUaGUgdGV4dHVyZSB1c2VkIGZvciB0aGUgZGlzcGxhY2VtZW50IG1hcC4gTXVzdCBiZSBwb3dlciBvZiAyIHNpemVkIHRleHR1cmUuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlRleHR1cmV9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5EaXNwbGFjZW1lbnRGaWx0ZXIjXG4gICAgICovXG4gICAgbWFwOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudW5pZm9ybXMubWFwU2FtcGxlci52YWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudW5pZm9ybXMubWFwU2FtcGxlci52YWx1ZSA9IHZhbHVlO1xuXG4gICAgICAgIH1cbiAgICB9XG59KTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vLi4vY29yZScpO1xuLy8gQHNlZSBodHRwczovL2dpdGh1Yi5jb20vc3Vic3RhY2svYnJmcy9pc3N1ZXMvMjVcblxuXG4vKipcbiAqIEBhdXRob3IgTWF0IEdyb3ZlcyBodHRwOi8vbWF0Z3JvdmVzLmNvbS8gQERvb3JtYXQyM1xuICogb3JpZ2luYWwgZmlsdGVyOiBodHRwczovL2dpdGh1Yi5jb20vZXZhbncvZ2xmeC5qcy9ibG9iL21hc3Rlci9zcmMvZmlsdGVycy9mdW4vZG90c2NyZWVuLmpzXG4gKi9cblxuLyoqXG4gKiBUaGlzIGZpbHRlciBhcHBsaWVzIGEgZG90c2NyZWVuIGVmZmVjdCBtYWtpbmcgZGlzcGxheSBvYmplY3RzIGFwcGVhciB0byBiZSBtYWRlIG91dCBvZlxuICogYmxhY2sgYW5kIHdoaXRlIGhhbGZ0b25lIGRvdHMgbGlrZSBhbiBvbGQgcHJpbnRlci5cbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQWJzdHJhY3RGaWx0ZXJcbiAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnNcbiAqL1xuZnVuY3Rpb24gRG90U2NyZWVuRmlsdGVyKClcbntcbiAgICBjb3JlLkFic3RyYWN0RmlsdGVyLmNhbGwodGhpcyxcbiAgICAgICAgLy8gdmVydGV4IHNoYWRlclxuICAgICAgICBudWxsLFxuICAgICAgICAvLyBmcmFnbWVudCBzaGFkZXJcbiAgICAgICAgXCJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcXG5cXG52YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDtcXG52YXJ5aW5nIHZlYzQgdkNvbG9yO1xcblxcbnVuaWZvcm0gdmVjNCBkaW1lbnNpb25zO1xcbnVuaWZvcm0gc2FtcGxlcjJEIHVTYW1wbGVyO1xcblxcbnVuaWZvcm0gZmxvYXQgYW5nbGU7XFxudW5pZm9ybSBmbG9hdCBzY2FsZTtcXG5cXG5mbG9hdCBwYXR0ZXJuKClcXG57XFxuICAgZmxvYXQgcyA9IHNpbihhbmdsZSksIGMgPSBjb3MoYW5nbGUpO1xcbiAgIHZlYzIgdGV4ID0gdlRleHR1cmVDb29yZCAqIGRpbWVuc2lvbnMueHk7XFxuICAgdmVjMiBwb2ludCA9IHZlYzIoXFxuICAgICAgIGMgKiB0ZXgueCAtIHMgKiB0ZXgueSxcXG4gICAgICAgcyAqIHRleC54ICsgYyAqIHRleC55XFxuICAgKSAqIHNjYWxlO1xcbiAgIHJldHVybiAoc2luKHBvaW50LngpICogc2luKHBvaW50LnkpKSAqIDQuMDtcXG59XFxuXFxudm9pZCBtYWluKClcXG57XFxuICAgdmVjNCBjb2xvciA9IHRleHR1cmUyRCh1U2FtcGxlciwgdlRleHR1cmVDb29yZCk7XFxuICAgZmxvYXQgYXZlcmFnZSA9IChjb2xvci5yICsgY29sb3IuZyArIGNvbG9yLmIpIC8gMy4wO1xcbiAgIGdsX0ZyYWdDb2xvciA9IHZlYzQodmVjMyhhdmVyYWdlICogMTAuMCAtIDUuMCArIHBhdHRlcm4oKSksIGNvbG9yLmEpO1xcbn1cXG5cIixcbiAgICAgICAgLy8gY3VzdG9tIHVuaWZvcm1zXG4gICAgICAgIHtcbiAgICAgICAgICAgIHNjYWxlOiAgICAgIHsgdHlwZTogJzFmJywgdmFsdWU6IDEgfSxcbiAgICAgICAgICAgIGFuZ2xlOiAgICAgIHsgdHlwZTogJzFmJywgdmFsdWU6IDUgfSxcbiAgICAgICAgICAgIGRpbWVuc2lvbnM6IHsgdHlwZTogJzRmdicsIHZhbHVlOiBbMCwgMCwgMCwgMF0gfVxuICAgICAgICB9XG4gICAgKTtcbn1cblxuRG90U2NyZWVuRmlsdGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoY29yZS5BYnN0cmFjdEZpbHRlci5wcm90b3R5cGUpO1xuRG90U2NyZWVuRmlsdGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IERvdFNjcmVlbkZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gRG90U2NyZWVuRmlsdGVyO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhEb3RTY3JlZW5GaWx0ZXIucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogVGhlIHNjYWxlIG9mIHRoZSBlZmZlY3QuXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuRG90U2NyZWVuRmlsdGVyI1xuICAgICAqL1xuICAgIHNjYWxlOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudW5pZm9ybXMuc2NhbGUudmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLnNjYWxlLnZhbHVlID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVGhlIHJhZGl1cyBvZiB0aGUgZWZmZWN0LlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLkRvdFNjcmVlbkZpbHRlciNcbiAgICAgKi9cbiAgICBhbmdsZToge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVuaWZvcm1zLmFuZ2xlLnZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy5hbmdsZS52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfVxufSk7XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uLy4uL2NvcmUnKTtcblxuLy8gQHNlZSBodHRwczovL2dpdGh1Yi5jb20vc3Vic3RhY2svYnJmcy9pc3N1ZXMvMjVcblxuXG4vKipcbiAqIFRoZSBCbHVyWVRpbnRGaWx0ZXIgYXBwbGllcyBhIHZlcnRpY2FsIEdhdXNzaWFuIGJsdXIgdG8gYW4gb2JqZWN0LlxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5BYnN0cmFjdEZpbHRlclxuICogQG1lbWJlcm9mIFBJWEkuZmlsdGVyc1xuICovXG5mdW5jdGlvbiBCbHVyWVRpbnRGaWx0ZXIoKVxue1xuICAgIGNvcmUuQWJzdHJhY3RGaWx0ZXIuY2FsbCh0aGlzLFxuICAgICAgICAvLyB2ZXJ0ZXggc2hhZGVyXG4gICAgICAgIFwiYXR0cmlidXRlIHZlYzIgYVZlcnRleFBvc2l0aW9uO1xcbmF0dHJpYnV0ZSB2ZWMyIGFUZXh0dXJlQ29vcmQ7XFxuYXR0cmlidXRlIHZlYzQgYUNvbG9yO1xcblxcbnVuaWZvcm0gZmxvYXQgc3RyZW5ndGg7XFxudW5pZm9ybSB2ZWMyIG9mZnNldDtcXG5cXG51bmlmb3JtIG1hdDMgcHJvamVjdGlvbk1hdHJpeDtcXG5cXG52YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDtcXG52YXJ5aW5nIHZlYzQgdkNvbG9yO1xcbnZhcnlpbmcgdmVjMiB2Qmx1clRleENvb3Jkc1s2XTtcXG5cXG52b2lkIG1haW4odm9pZClcXG57XFxuICAgIGdsX1Bvc2l0aW9uID0gdmVjNCgocHJvamVjdGlvbk1hdHJpeCAqIHZlYzMoKGFWZXJ0ZXhQb3NpdGlvbitvZmZzZXQpLCAxLjApKS54eSwgMC4wLCAxLjApO1xcbiAgICB2VGV4dHVyZUNvb3JkID0gYVRleHR1cmVDb29yZDtcXG5cXG4gICAgdkJsdXJUZXhDb29yZHNbIDBdID0gYVRleHR1cmVDb29yZCArIHZlYzIoMC4wLCAtMC4wMTIgKiBzdHJlbmd0aCk7XFxuICAgIHZCbHVyVGV4Q29vcmRzWyAxXSA9IGFUZXh0dXJlQ29vcmQgKyB2ZWMyKDAuMCwgLTAuMDA4ICogc3RyZW5ndGgpO1xcbiAgICB2Qmx1clRleENvb3Jkc1sgMl0gPSBhVGV4dHVyZUNvb3JkICsgdmVjMigwLjAsIC0wLjAwNCAqIHN0cmVuZ3RoKTtcXG4gICAgdkJsdXJUZXhDb29yZHNbIDNdID0gYVRleHR1cmVDb29yZCArIHZlYzIoMC4wLCAgMC4wMDQgKiBzdHJlbmd0aCk7XFxuICAgIHZCbHVyVGV4Q29vcmRzWyA0XSA9IGFUZXh0dXJlQ29vcmQgKyB2ZWMyKDAuMCwgIDAuMDA4ICogc3RyZW5ndGgpO1xcbiAgICB2Qmx1clRleENvb3Jkc1sgNV0gPSBhVGV4dHVyZUNvb3JkICsgdmVjMigwLjAsICAwLjAxMiAqIHN0cmVuZ3RoKTtcXG5cXG4gICB2Q29sb3IgPSB2ZWM0KGFDb2xvci5yZ2IgKiBhQ29sb3IuYSwgYUNvbG9yLmEpO1xcbn1cXG5cIixcbiAgICAgICAgLy8gZnJhZ21lbnQgc2hhZGVyXG4gICAgICAgIFwicHJlY2lzaW9uIGxvd3AgZmxvYXQ7XFxuXFxudmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7XFxudmFyeWluZyB2ZWMyIHZCbHVyVGV4Q29vcmRzWzZdO1xcbnZhcnlpbmcgdmVjNCB2Q29sb3I7XFxuXFxudW5pZm9ybSB2ZWMzIGNvbG9yO1xcbnVuaWZvcm0gZmxvYXQgYWxwaGE7XFxuXFxudW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXI7XFxuXFxudm9pZCBtYWluKHZvaWQpXFxue1xcbiAgICB2ZWM0IHN1bSA9IHZlYzQoMC4wKTtcXG5cXG4gICAgc3VtICs9IHRleHR1cmUyRCh1U2FtcGxlciwgdkJsdXJUZXhDb29yZHNbIDBdKSowLjAwNDQzMTg0ODQxMTkzODM0MTtcXG4gICAgc3VtICs9IHRleHR1cmUyRCh1U2FtcGxlciwgdkJsdXJUZXhDb29yZHNbIDFdKSowLjA1Mzk5MDk2NjUxMzE4OTg1O1xcbiAgICBzdW0gKz0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2Qmx1clRleENvb3Jkc1sgMl0pKjAuMjQxOTcwNzI0NTE5MTQ1NDtcXG4gICAgc3VtICs9IHRleHR1cmUyRCh1U2FtcGxlciwgdlRleHR1cmVDb29yZCAgICAgKSowLjM5ODk0MjI4MDQwMTQzMjc7XFxuICAgIHN1bSArPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZCbHVyVGV4Q29vcmRzWyAzXSkqMC4yNDE5NzA3MjQ1MTkxNDU0O1xcbiAgICBzdW0gKz0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2Qmx1clRleENvb3Jkc1sgNF0pKjAuMDUzOTkwOTY2NTEzMTg5ODU7XFxuICAgIHN1bSArPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZCbHVyVGV4Q29vcmRzWyA1XSkqMC4wMDQ0MzE4NDg0MTE5MzgzNDE7XFxuXFxuICAgIGdsX0ZyYWdDb2xvciA9IHZlYzQoIGNvbG9yLnJnYiAqIHN1bS5hICogYWxwaGEsIHN1bS5hICogYWxwaGEgKTtcXG59XFxuXCIsXG4gICAgICAgIC8vIHNldCB0aGUgdW5pZm9ybXNcbiAgICAgICAge1xuICAgICAgICAgICAgYmx1cjogeyB0eXBlOiAnMWYnLCB2YWx1ZTogMSAvIDUxMiB9LFxuICAgICAgICAgICAgY29sb3I6IHsgdHlwZTogJ2MnLCB2YWx1ZTogWzAsMCwwXX0sXG4gICAgICAgICAgICBhbHBoYTogeyB0eXBlOiAnMWYnLCB2YWx1ZTogMC43IH0sXG4gICAgICAgICAgICBvZmZzZXQ6IHsgdHlwZTogJzJmJywgdmFsdWU6WzUsIDVdfSxcbiAgICAgICAgICAgIHN0cmVuZ3RoOiB7IHR5cGU6ICcxZicsIHZhbHVlOjF9XG4gICAgICAgIH1cbiAgICApO1xuXG4gICAgdGhpcy5wYXNzZXMgPSAxO1xuICAgIHRoaXMuc3RyZW5ndGggPSA0O1xufVxuXG5CbHVyWVRpbnRGaWx0ZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShjb3JlLkFic3RyYWN0RmlsdGVyLnByb3RvdHlwZSk7XG5CbHVyWVRpbnRGaWx0ZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gQmx1cllUaW50RmlsdGVyO1xubW9kdWxlLmV4cG9ydHMgPSBCbHVyWVRpbnRGaWx0ZXI7XG5cbkJsdXJZVGludEZpbHRlci5wcm90b3R5cGUuYXBwbHlGaWx0ZXIgPSBmdW5jdGlvbiAocmVuZGVyZXIsIGlucHV0LCBvdXRwdXQsIGNsZWFyKVxue1xuICAgIHZhciBzaGFkZXIgPSB0aGlzLmdldFNoYWRlcihyZW5kZXJlcik7XG5cbiAgICB0aGlzLnVuaWZvcm1zLnN0cmVuZ3RoLnZhbHVlID0gdGhpcy5zdHJlbmd0aCAvIDQgLyB0aGlzLnBhc3NlcyAqIChpbnB1dC5mcmFtZS5oZWlnaHQgLyBpbnB1dC5zaXplLmhlaWdodCk7XG5cbiAgICBpZih0aGlzLnBhc3NlcyA9PT0gMSlcbiAgICB7XG4gICAgICAgIHJlbmRlcmVyLmZpbHRlck1hbmFnZXIuYXBwbHlGaWx0ZXIoc2hhZGVyLCBpbnB1dCwgb3V0cHV0LCBjbGVhcik7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHZhciByZW5kZXJUYXJnZXQgPSByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLmdldFJlbmRlclRhcmdldCh0cnVlKTtcbiAgICAgICAgdmFyIGZsaXAgPSBpbnB1dDtcbiAgICAgICAgdmFyIGZsb3AgPSByZW5kZXJUYXJnZXQ7XG5cbiAgICAgICAgZm9yKHZhciBpID0gMDsgaSA8IHRoaXMucGFzc2VzLTE7IGkrKylcbiAgICAgICAge1xuICAgICAgICAgICAgcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5hcHBseUZpbHRlcihzaGFkZXIsIGZsaXAsIGZsb3AsIGNsZWFyKTtcblxuICAgICAgICAgICB2YXIgdGVtcCA9IGZsb3A7XG4gICAgICAgICAgIGZsb3AgPSBmbGlwO1xuICAgICAgICAgICBmbGlwID0gdGVtcDtcbiAgICAgICAgfVxuXG4gICAgICAgIHJlbmRlcmVyLmZpbHRlck1hbmFnZXIuYXBwbHlGaWx0ZXIoc2hhZGVyLCBmbGlwLCBvdXRwdXQsIGNsZWFyKTtcblxuICAgICAgICByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLnJldHVyblJlbmRlclRhcmdldChyZW5kZXJUYXJnZXQpO1xuICAgIH1cbn07XG5cblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoQmx1cllUaW50RmlsdGVyLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIHN0cmVuZ3RoIG9mIGJvdGggdGhlIGJsdXIuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5CbHVyWVRpbnRGaWx0ZXIjXG4gICAgICogQGRlZmF1bHQgMlxuICAgICAqL1xuICAgIGJsdXI6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gIHRoaXMuc3RyZW5ndGg7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnBhZGRpbmcgPSB2YWx1ZSAqIDAuNTtcbiAgICAgICAgICAgIHRoaXMuc3RyZW5ndGggPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi8uLi9jb3JlJyksXG4gICAgQmx1clhGaWx0ZXIgPSByZXF1aXJlKCcuLi9ibHVyL0JsdXJYRmlsdGVyJyksXG4gICAgQmx1cllUaW50RmlsdGVyID0gcmVxdWlyZSgnLi9CbHVyWVRpbnRGaWx0ZXInKTtcblxuLyoqXG4gKiBUaGUgRHJvcFNoYWRvd0ZpbHRlciBhcHBsaWVzIGEgR2F1c3NpYW4gYmx1ciB0byBhbiBvYmplY3QuXG4gKiBUaGUgc3RyZW5ndGggb2YgdGhlIGJsdXIgY2FuIGJlIHNldCBmb3IgeC0gYW5kIHktYXhpcyBzZXBhcmF0ZWx5LlxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5BYnN0cmFjdEZpbHRlclxuICogQG1lbWJlcm9mIFBJWEkuZmlsdGVyc1xuICovXG5mdW5jdGlvbiBEcm9wU2hhZG93RmlsdGVyKClcbntcbiAgICBjb3JlLkFic3RyYWN0RmlsdGVyLmNhbGwodGhpcyk7XG5cbiAgICB0aGlzLmJsdXJYRmlsdGVyID0gbmV3IEJsdXJYRmlsdGVyKCk7XG4gICAgdGhpcy5ibHVyWVRpbnRGaWx0ZXIgPSBuZXcgQmx1cllUaW50RmlsdGVyKCk7XG5cbiAgICB0aGlzLmRlZmF1bHRGaWx0ZXIgPSBuZXcgY29yZS5BYnN0cmFjdEZpbHRlcigpO1xuXG4gICAgdGhpcy5wYWRkaW5nID0gMzA7XG5cbiAgICB0aGlzLl9kaXJ0eVBvc2l0aW9uID0gdHJ1ZTtcbiAgICB0aGlzLl9hbmdsZSA9IDQ1ICogTWF0aC5QSSAvIDE4MDtcbiAgICB0aGlzLl9kaXN0YW5jZSA9IDEwO1xuICAgIHRoaXMuYWxwaGEgPSAwLjc1O1xuICAgIHRoaXMuaGlkZU9iamVjdCA9IGZhbHNlO1xuICAgIHRoaXMuYmxlbmRNb2RlID0gY29yZS5CTEVORF9NT0RFUy5NVUxUSVBMWTtcbn1cblxuRHJvcFNoYWRvd0ZpbHRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuQWJzdHJhY3RGaWx0ZXIucHJvdG90eXBlKTtcbkRyb3BTaGFkb3dGaWx0ZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gRHJvcFNoYWRvd0ZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gRHJvcFNoYWRvd0ZpbHRlcjtcblxuRHJvcFNoYWRvd0ZpbHRlci5wcm90b3R5cGUuYXBwbHlGaWx0ZXIgPSBmdW5jdGlvbiAocmVuZGVyZXIsIGlucHV0LCBvdXRwdXQpXG57XG4gICAgdmFyIHJlbmRlclRhcmdldCA9IHJlbmRlcmVyLmZpbHRlck1hbmFnZXIuZ2V0UmVuZGVyVGFyZ2V0KHRydWUpO1xuXG4gICAgLy9UT0RPIC0gY29weVRleFN1YkltYWdlMkQgY291bGQgYmUgdXNlZCBoZXJlP1xuICAgIGlmKHRoaXMuX2RpcnR5UG9zaXRpb24pXG4gICAge1xuICAgICAgICB0aGlzLl9kaXJ0eVBvc2l0aW9uID0gZmFsc2U7XG5cbiAgICAgICAgdGhpcy5ibHVyWVRpbnRGaWx0ZXIudW5pZm9ybXMub2Zmc2V0LnZhbHVlWzBdID0gTWF0aC5zaW4odGhpcy5fYW5nbGUpICogdGhpcy5fZGlzdGFuY2U7XG4gICAgICAgIHRoaXMuYmx1cllUaW50RmlsdGVyLnVuaWZvcm1zLm9mZnNldC52YWx1ZVsxXSA9IE1hdGguY29zKHRoaXMuX2FuZ2xlKSAqIHRoaXMuX2Rpc3RhbmNlO1xuICAgIH1cblxuICAgIHRoaXMuYmx1clhGaWx0ZXIuYXBwbHlGaWx0ZXIocmVuZGVyZXIsIGlucHV0LCByZW5kZXJUYXJnZXQpO1xuXG4gICAgcmVuZGVyZXIuYmxlbmRNb2RlTWFuYWdlci5zZXRCbGVuZE1vZGUodGhpcy5ibGVuZE1vZGUpO1xuXG4gICAgdGhpcy5ibHVyWVRpbnRGaWx0ZXIuYXBwbHlGaWx0ZXIocmVuZGVyZXIsIHJlbmRlclRhcmdldCwgb3V0cHV0KTtcblxuICAgIHJlbmRlcmVyLmJsZW5kTW9kZU1hbmFnZXIuc2V0QmxlbmRNb2RlKGNvcmUuQkxFTkRfTU9ERVMuTk9STUFMKTtcblxuICAgIGlmKCF0aGlzLmhpZGVPYmplY3QpXG4gICAge1xuXG4gICAgICAgIHRoaXMuZGVmYXVsdEZpbHRlci5hcHBseUZpbHRlcihyZW5kZXJlciwgaW5wdXQsIG91dHB1dCk7XG4gICAgfVxuXG5cbiAgICByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLnJldHVyblJlbmRlclRhcmdldChyZW5kZXJUYXJnZXQpO1xufTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoRHJvcFNoYWRvd0ZpbHRlci5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBzdHJlbmd0aCBvZiBib3RoIHRoZSBibHVyWCBhbmQgYmx1clkgcHJvcGVydGllcyBzaW11bHRhbmVvdXNseVxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJPZiBQSVhJLmZpbHRlcnMuRHJvcFNoYWRvd0ZpbHRlciNcbiAgICAgKiBAZGVmYXVsdCAyXG4gICAgICovXG4gICAgYmx1cjoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmJsdXJYRmlsdGVyLmJsdXI7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmJsdXJYRmlsdGVyLmJsdXIgPSB0aGlzLmJsdXJZVGludEZpbHRlci5ibHVyID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgc3RyZW5ndGggb2YgdGhlIGJsdXJYIHByb3BlcnR5XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlck9mIFBJWEkuZmlsdGVycy5Ecm9wU2hhZG93RmlsdGVyI1xuICAgICAqIEBkZWZhdWx0IDJcbiAgICAgKi9cbiAgICBibHVyWDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmJsdXJYRmlsdGVyLmJsdXI7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmJsdXJYRmlsdGVyLmJsdXIgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBzdHJlbmd0aCBvZiB0aGUgYmx1clkgcHJvcGVydHlcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyT2YgUElYSS5maWx0ZXJzLkRyb3BTaGFkb3dGaWx0ZXIjXG4gICAgICogQGRlZmF1bHQgMlxuICAgICAqL1xuICAgIGJsdXJZOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuYmx1cllUaW50RmlsdGVyLmJsdXI7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmJsdXJZVGludEZpbHRlci5ibHVyID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgY29sb3Igb2YgdGhlIHNoYWRvd1xuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJPZiBQSVhJLmZpbHRlcnMuRHJvcFNoYWRvd0ZpbHRlciNcbiAgICAgKi9cbiAgICBjb2xvcjoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiAgY29yZS51dGlscy5yZ2IyaGV4KCB0aGlzLmJsdXJZVGludEZpbHRlci51bmlmb3Jtcy5jb2xvci52YWx1ZSApO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5ibHVyWVRpbnRGaWx0ZXIudW5pZm9ybXMuY29sb3IudmFsdWUgPSBjb3JlLnV0aWxzLmhleDJyZ2IodmFsdWUpO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIGFscGhhIG9mIHRoZSBzaGFkb3dcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyT2YgUElYSS5maWx0ZXJzLkRyb3BTaGFkb3dGaWx0ZXIjXG4gICAgICovXG4gICAgYWxwaGE6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gIHRoaXMuYmx1cllUaW50RmlsdGVyLnVuaWZvcm1zLmFscGhhLnZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5ibHVyWVRpbnRGaWx0ZXIudW5pZm9ybXMuYWxwaGEudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBkaXN0YW5jZSBvZiB0aGUgc2hhZG93XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlck9mIFBJWEkuZmlsdGVycy5Ecm9wU2hhZG93RmlsdGVyI1xuICAgICAqL1xuICAgIGRpc3RhbmNlOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuICB0aGlzLl9kaXN0YW5jZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuX2RpcnR5UG9zaXRpb24gPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy5fZGlzdGFuY2UgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBhbmdsZSBvZiB0aGUgc2hhZG93XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlck9mIFBJWEkuZmlsdGVycy5Ecm9wU2hhZG93RmlsdGVyI1xuICAgICAqL1xuICAgIGFuZ2xlOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuICB0aGlzLl9hbmdsZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuX2RpcnR5UG9zaXRpb24gPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy5fYW5nbGUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi8uLi9jb3JlJyk7XG4vLyBAc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9zdWJzdGFjay9icmZzL2lzc3Vlcy8yNVxuXG5cbi8qKlxuICogVGhpcyBncmV5c2NhbGVzIHRoZSBwYWxldHRlIG9mIHlvdXIgRGlzcGxheSBPYmplY3RzLlxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5BYnN0cmFjdEZpbHRlclxuICogQG1lbWJlcm9mIFBJWEkuZmlsdGVyc1xuICovXG5mdW5jdGlvbiBHcmF5RmlsdGVyKClcbntcbiAgICBjb3JlLkFic3RyYWN0RmlsdGVyLmNhbGwodGhpcyxcbiAgICAgICAgLy8gdmVydGV4IHNoYWRlclxuICAgICAgICBudWxsLFxuICAgICAgICAvLyBmcmFnbWVudCBzaGFkZXJcbiAgICAgICAgXCJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcXG5cXG52YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDtcXG52YXJ5aW5nIHZlYzQgdkNvbG9yO1xcblxcbnVuaWZvcm0gc2FtcGxlcjJEIHVTYW1wbGVyO1xcbnVuaWZvcm0gZmxvYXQgZ3JheTtcXG5cXG52b2lkIG1haW4odm9pZClcXG57XFxuICAgZ2xfRnJhZ0NvbG9yID0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2VGV4dHVyZUNvb3JkKTtcXG4gICBnbF9GcmFnQ29sb3IucmdiID0gbWl4KGdsX0ZyYWdDb2xvci5yZ2IsIHZlYzMoMC4yMTI2KmdsX0ZyYWdDb2xvci5yICsgMC43MTUyKmdsX0ZyYWdDb2xvci5nICsgMC4wNzIyKmdsX0ZyYWdDb2xvci5iKSwgZ3JheSk7XFxufVxcblwiLFxuICAgICAgICAvLyBzZXQgdGhlIHVuaWZvcm1zXG4gICAgICAgIHtcbiAgICAgICAgICAgIGdyYXk6IHsgdHlwZTogJzFmJywgdmFsdWU6IDEgfVxuICAgICAgICB9XG4gICAgKTtcbn1cblxuR3JheUZpbHRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuQWJzdHJhY3RGaWx0ZXIucHJvdG90eXBlKTtcbkdyYXlGaWx0ZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gR3JheUZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gR3JheUZpbHRlcjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoR3JheUZpbHRlci5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBUaGUgc3RyZW5ndGggb2YgdGhlIGdyYXkuIDEgd2lsbCBtYWtlIHRoZSBvYmplY3QgYmxhY2sgYW5kIHdoaXRlLCAwIHdpbGwgbWFrZSB0aGUgb2JqZWN0IGl0cyBub3JtYWwgY29sb3IuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5HcmF5RmlsdGVyI1xuICAgICAqL1xuICAgIGdyYXk6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy51bmlmb3Jtcy5ncmF5LnZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy5ncmF5LnZhbHVlID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG59KTtcbiIsIi8qKlxuICogQGZpbGUgICAgICAgIE1haW4gZXhwb3J0IG9mIHRoZSBQSVhJIGZpbHRlcnMgbGlicmFyeVxuICogQGF1dGhvciAgICAgIE1hdCBHcm92ZXMgPG1hdEBnb29kYm95ZGlnaXRhbC5jb20+XG4gKiBAY29weXJpZ2h0ICAgMjAxMy0yMDE1IEdvb2RCb3lEaWdpdGFsXG4gKiBAbGljZW5zZSAgICAge0BsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9waXhpanMvcGl4aS5qcy9ibG9iL21hc3Rlci9MSUNFTlNFfE1JVCBMaWNlbnNlfVxuICovXG5cbi8qKlxuICogQG5hbWVzcGFjZSBQSVhJLmZpbHRlcnNcbiAqL1xubW9kdWxlLmV4cG9ydHMgPSB7XG4gICAgQXNjaWlGaWx0ZXI6ICAgICAgICByZXF1aXJlKCcuL2FzY2lpL0FzY2lpRmlsdGVyJyksXG4gICAgQmxvb21GaWx0ZXI6ICAgICAgICByZXF1aXJlKCcuL2Jsb29tL0Jsb29tRmlsdGVyJyksXG4gICAgQmx1ckZpbHRlcjogICAgICAgICByZXF1aXJlKCcuL2JsdXIvQmx1ckZpbHRlcicpLFxuICAgIEJsdXJYRmlsdGVyOiAgICAgICAgcmVxdWlyZSgnLi9ibHVyL0JsdXJYRmlsdGVyJyksXG4gICAgQmx1cllGaWx0ZXI6ICAgICAgICByZXF1aXJlKCcuL2JsdXIvQmx1cllGaWx0ZXInKSxcbiAgICBCbHVyRGlyRmlsdGVyOiAgICAgIHJlcXVpcmUoJy4vYmx1ci9CbHVyRGlyRmlsdGVyJyksXG4gICAgQ29sb3JNYXRyaXhGaWx0ZXI6ICByZXF1aXJlKCcuL2NvbG9yL0NvbG9yTWF0cml4RmlsdGVyJyksXG4gICAgQ29sb3JTdGVwRmlsdGVyOiAgICByZXF1aXJlKCcuL2NvbG9yL0NvbG9yU3RlcEZpbHRlcicpLFxuICAgIENvbnZvbHV0aW9uRmlsdGVyOiAgcmVxdWlyZSgnLi9jb252b2x1dGlvbi9Db252b2x1dGlvbkZpbHRlcicpLFxuICAgIENyb3NzSGF0Y2hGaWx0ZXI6ICAgcmVxdWlyZSgnLi9jcm9zc2hhdGNoL0Nyb3NzSGF0Y2hGaWx0ZXInKSxcbiAgICBEaXNwbGFjZW1lbnRGaWx0ZXI6IHJlcXVpcmUoJy4vZGlzcGxhY2VtZW50L0Rpc3BsYWNlbWVudEZpbHRlcicpLFxuICAgIERvdFNjcmVlbkZpbHRlcjogICAgcmVxdWlyZSgnLi9kb3QvRG90U2NyZWVuRmlsdGVyJyksXG4gICAgR3JheUZpbHRlcjogICAgICAgICByZXF1aXJlKCcuL2dyYXkvR3JheUZpbHRlcicpLFxuICAgIERyb3BTaGFkb3dGaWx0ZXI6ICAgcmVxdWlyZSgnLi9kcm9wc2hhZG93L0Ryb3BTaGFkb3dGaWx0ZXInKSxcbiAgICBJbnZlcnRGaWx0ZXI6ICAgICAgIHJlcXVpcmUoJy4vaW52ZXJ0L0ludmVydEZpbHRlcicpLFxuICAgIE5vaXNlRmlsdGVyOiAgICAgICAgcmVxdWlyZSgnLi9ub2lzZS9Ob2lzZUZpbHRlcicpLFxuICAgIFBpeGVsYXRlRmlsdGVyOiAgICAgcmVxdWlyZSgnLi9waXhlbGF0ZS9QaXhlbGF0ZUZpbHRlcicpLFxuICAgIFJHQlNwbGl0RmlsdGVyOiAgICAgcmVxdWlyZSgnLi9yZ2IvUkdCU3BsaXRGaWx0ZXInKSxcbiAgICBTaG9ja3dhdmVGaWx0ZXI6ICAgIHJlcXVpcmUoJy4vc2hvY2t3YXZlL1Nob2Nrd2F2ZUZpbHRlcicpLFxuICAgIFNlcGlhRmlsdGVyOiAgICAgICAgcmVxdWlyZSgnLi9zZXBpYS9TZXBpYUZpbHRlcicpLFxuICAgIFNtYXJ0Qmx1ckZpbHRlcjogICAgcmVxdWlyZSgnLi9ibHVyL1NtYXJ0Qmx1ckZpbHRlcicpLFxuICAgIFRpbHRTaGlmdEZpbHRlcjogICAgcmVxdWlyZSgnLi90aWx0c2hpZnQvVGlsdFNoaWZ0RmlsdGVyJyksXG4gICAgVGlsdFNoaWZ0WEZpbHRlcjogICByZXF1aXJlKCcuL3RpbHRzaGlmdC9UaWx0U2hpZnRYRmlsdGVyJyksXG4gICAgVGlsdFNoaWZ0WUZpbHRlcjogICByZXF1aXJlKCcuL3RpbHRzaGlmdC9UaWx0U2hpZnRZRmlsdGVyJyksXG4gICAgVHdpc3RGaWx0ZXI6ICAgICAgICByZXF1aXJlKCcuL3R3aXN0L1R3aXN0RmlsdGVyJylcbn07XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uLy4uL2NvcmUnKTtcbi8vIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL3N1YnN0YWNrL2JyZnMvaXNzdWVzLzI1XG5cblxuLyoqXG4gKiBUaGlzIGludmVydHMgeW91ciBEaXNwbGF5IE9iamVjdHMgY29sb3JzLlxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5BYnN0cmFjdEZpbHRlclxuICogQG1lbWJlcm9mIFBJWEkuZmlsdGVyc1xuICovXG5mdW5jdGlvbiBJbnZlcnRGaWx0ZXIoKVxue1xuICAgIGNvcmUuQWJzdHJhY3RGaWx0ZXIuY2FsbCh0aGlzLFxuICAgICAgICAvLyB2ZXJ0ZXggc2hhZGVyXG4gICAgICAgIG51bGwsXG4gICAgICAgIC8vIGZyYWdtZW50IHNoYWRlclxuICAgICAgICBcInByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xcblxcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xcblxcbnVuaWZvcm0gZmxvYXQgaW52ZXJ0O1xcbnVuaWZvcm0gc2FtcGxlcjJEIHVTYW1wbGVyO1xcblxcbnZvaWQgbWFpbih2b2lkKVxcbntcXG4gICAgZ2xfRnJhZ0NvbG9yID0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2VGV4dHVyZUNvb3JkKTtcXG5cXG4gICAgZ2xfRnJhZ0NvbG9yLnJnYiA9IG1peCggKHZlYzMoMSktZ2xfRnJhZ0NvbG9yLnJnYikgKiBnbF9GcmFnQ29sb3IuYSwgZ2xfRnJhZ0NvbG9yLnJnYiwgMS4wIC0gaW52ZXJ0KTtcXG59XFxuXCIsXG4gICAgICAgIC8vIGN1c3RvbSB1bmlmb3Jtc1xuICAgICAgICB7XG4gICAgICAgICAgICBpbnZlcnQ6IHsgdHlwZTogJzFmJywgdmFsdWU6IDEgfVxuICAgICAgICB9XG4gICAgKTtcbn1cblxuSW52ZXJ0RmlsdGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoY29yZS5BYnN0cmFjdEZpbHRlci5wcm90b3R5cGUpO1xuSW52ZXJ0RmlsdGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IEludmVydEZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gSW52ZXJ0RmlsdGVyO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhJbnZlcnRGaWx0ZXIucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogVGhlIHN0cmVuZ3RoIG9mIHRoZSBpbnZlcnQuIGAxYCB3aWxsIGZ1bGx5IGludmVydCB0aGUgY29sb3JzLCBhbmRcbiAgICAgKiBgMGAgd2lsbCBtYWtlIHRoZSBvYmplY3QgaXRzIG5vcm1hbCBjb2xvci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLkludmVydEZpbHRlciNcbiAgICAgKi9cbiAgICBpbnZlcnQ6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy51bmlmb3Jtcy5pbnZlcnQudmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLmludmVydC52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfVxufSk7XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uLy4uL2NvcmUnKTtcbi8vIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL3N1YnN0YWNrL2JyZnMvaXNzdWVzLzI1XG5cblxuLyoqXG4gKiBAYXV0aG9yIFZpY28gQHZpY29jb3RlYVxuICogb3JpZ2luYWwgZmlsdGVyOiBodHRwczovL2dpdGh1Yi5jb20vZXZhbncvZ2xmeC5qcy9ibG9iL21hc3Rlci9zcmMvZmlsdGVycy9hZGp1c3Qvbm9pc2UuanNcbiAqL1xuXG4vKipcbiAqIEEgTm9pc2UgZWZmZWN0IGZpbHRlci5cbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQWJzdHJhY3RGaWx0ZXJcbiAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnNcbiAqL1xuZnVuY3Rpb24gTm9pc2VGaWx0ZXIoKVxue1xuICAgIGNvcmUuQWJzdHJhY3RGaWx0ZXIuY2FsbCh0aGlzLFxuICAgICAgICAvLyB2ZXJ0ZXggc2hhZGVyXG4gICAgICAgIG51bGwsXG4gICAgICAgIC8vIGZyYWdtZW50IHNoYWRlclxuICAgICAgICBcInByZWNpc2lvbiBoaWdocCBmbG9hdDtcXG5cXG52YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDtcXG52YXJ5aW5nIHZlYzQgdkNvbG9yO1xcblxcbnVuaWZvcm0gZmxvYXQgbm9pc2U7XFxudW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXI7XFxuXFxuZmxvYXQgcmFuZCh2ZWMyIGNvKVxcbntcXG4gICAgcmV0dXJuIGZyYWN0KHNpbihkb3QoY28ueHksIHZlYzIoMTIuOTg5OCwgNzguMjMzKSkpICogNDM3NTguNTQ1Myk7XFxufVxcblxcbnZvaWQgbWFpbigpXFxue1xcbiAgICB2ZWM0IGNvbG9yID0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2VGV4dHVyZUNvb3JkKTtcXG5cXG4gICAgZmxvYXQgZGlmZiA9IChyYW5kKHZUZXh0dXJlQ29vcmQpIC0gMC41KSAqIG5vaXNlO1xcblxcbiAgICBjb2xvci5yICs9IGRpZmY7XFxuICAgIGNvbG9yLmcgKz0gZGlmZjtcXG4gICAgY29sb3IuYiArPSBkaWZmO1xcblxcbiAgICBnbF9GcmFnQ29sb3IgPSBjb2xvcjtcXG59XFxuXCIsXG4gICAgICAgIC8vIGN1c3RvbSB1bmlmb3Jtc1xuICAgICAgICB7XG4gICAgICAgICAgICBub2lzZTogeyB0eXBlOiAnMWYnLCB2YWx1ZTogMC41IH1cbiAgICAgICAgfVxuICAgICk7XG59XG5cbk5vaXNlRmlsdGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoY29yZS5BYnN0cmFjdEZpbHRlci5wcm90b3R5cGUpO1xuTm9pc2VGaWx0ZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gTm9pc2VGaWx0ZXI7XG5tb2R1bGUuZXhwb3J0cyA9IE5vaXNlRmlsdGVyO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhOb2lzZUZpbHRlci5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBUaGUgYW1vdW50IG9mIG5vaXNlIHRvIGFwcGx5LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuTm9pc2VGaWx0ZXIjXG4gICAgICogQGRlZmF1bHQgMC41XG4gICAgICovXG4gICAgbm9pc2U6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy51bmlmb3Jtcy5ub2lzZS52YWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudW5pZm9ybXMubm9pc2UudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi8uLi9jb3JlJyk7XG4vLyBAc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9zdWJzdGFjay9icmZzL2lzc3Vlcy8yNVxuXG5cbi8qKlxuICogVGhpcyBmaWx0ZXIgYXBwbGllcyBhIHBpeGVsYXRlIGVmZmVjdCBtYWtpbmcgZGlzcGxheSBvYmplY3RzIGFwcGVhciAnYmxvY2t5Jy5cbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQWJzdHJhY3RGaWx0ZXJcbiAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnNcbiAqL1xuZnVuY3Rpb24gUGl4ZWxhdGVGaWx0ZXIoKVxue1xuICAgIGNvcmUuQWJzdHJhY3RGaWx0ZXIuY2FsbCh0aGlzLFxuICAgICAgICAvLyB2ZXJ0ZXggc2hhZGVyXG4gICAgICAgIG51bGwsXG4gICAgICAgIC8vIGZyYWdtZW50IHNoYWRlclxuICAgICAgICBcInByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xcblxcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xcblxcbnVuaWZvcm0gdmVjNCBkaW1lbnNpb25zO1xcbnVuaWZvcm0gdmVjMiBwaXhlbFNpemU7XFxudW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXI7XFxuXFxudm9pZCBtYWluKHZvaWQpXFxue1xcbiAgICB2ZWMyIGNvb3JkID0gdlRleHR1cmVDb29yZDtcXG5cXG4gICAgdmVjMiBzaXplID0gZGltZW5zaW9ucy54eSAvIHBpeGVsU2l6ZTtcXG5cXG4gICAgdmVjMiBjb2xvciA9IGZsb29yKCAoIHZUZXh0dXJlQ29vcmQgKiBzaXplICkgKSAvIHNpemUgKyBwaXhlbFNpemUvZGltZW5zaW9ucy54eSAqIDAuNTtcXG5cXG4gICAgZ2xfRnJhZ0NvbG9yID0gdGV4dHVyZTJEKHVTYW1wbGVyLCBjb2xvcik7XFxufVxcblwiLFxuICAgICAgICAvLyBjdXN0b20gdW5pZm9ybXNcbiAgICAgICAge1xuICAgICAgICAgICAgZGltZW5zaW9uczogeyB0eXBlOiAnNGZ2JywgIHZhbHVlOiBuZXcgRmxvYXQzMkFycmF5KFswLCAwLCAwLCAwXSkgfSxcbiAgICAgICAgICAgIHBpeGVsU2l6ZTogIHsgdHlwZTogJ3YyJywgICB2YWx1ZTogeyB4OiAxMCwgeTogMTAgfSB9XG4gICAgICAgIH1cbiAgICApO1xufVxuXG5QaXhlbGF0ZUZpbHRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuQWJzdHJhY3RGaWx0ZXIucHJvdG90eXBlKTtcblBpeGVsYXRlRmlsdGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFBpeGVsYXRlRmlsdGVyO1xubW9kdWxlLmV4cG9ydHMgPSBQaXhlbGF0ZUZpbHRlcjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoUGl4ZWxhdGVGaWx0ZXIucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogVGhpcyBhIHBvaW50IHRoYXQgZGVzY3JpYmVzIHRoZSBzaXplIG9mIHRoZSBibG9ja3MuXG4gICAgICogeCBpcyB0aGUgd2lkdGggb2YgdGhlIGJsb2NrIGFuZCB5IGlzIHRoZSBoZWlnaHQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlBvaW50fVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuUGl4ZWxhdGVGaWx0ZXIjXG4gICAgICovXG4gICAgc2l6ZToge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVuaWZvcm1zLnBpeGVsU2l6ZS52YWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudW5pZm9ybXMucGl4ZWxTaXplLnZhbHVlID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG59KTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vLi4vY29yZScpO1xuLy8gQHNlZSBodHRwczovL2dpdGh1Yi5jb20vc3Vic3RhY2svYnJmcy9pc3N1ZXMvMjVcblxuXG4vKipcbiAqIEFuIFJHQiBTcGxpdCBGaWx0ZXIuXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLkFic3RyYWN0RmlsdGVyXG4gKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzXG4gKi9cbmZ1bmN0aW9uIFJHQlNwbGl0RmlsdGVyKClcbntcbiAgICBjb3JlLkFic3RyYWN0RmlsdGVyLmNhbGwodGhpcyxcbiAgICAgICAgLy8gdmVydGV4IHNoYWRlclxuICAgICAgICBudWxsLFxuICAgICAgICAvLyBmcmFnbWVudCBzaGFkZXJcbiAgICAgICAgXCJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcXG5cXG52YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDtcXG5cXG51bmlmb3JtIHNhbXBsZXIyRCB1U2FtcGxlcjtcXG51bmlmb3JtIHZlYzQgZGltZW5zaW9ucztcXG51bmlmb3JtIHZlYzIgcmVkO1xcbnVuaWZvcm0gdmVjMiBncmVlbjtcXG51bmlmb3JtIHZlYzIgYmx1ZTtcXG5cXG52b2lkIG1haW4odm9pZClcXG57XFxuICAgZ2xfRnJhZ0NvbG9yLnIgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZUZXh0dXJlQ29vcmQgKyByZWQvZGltZW5zaW9ucy54eSkucjtcXG4gICBnbF9GcmFnQ29sb3IuZyA9IHRleHR1cmUyRCh1U2FtcGxlciwgdlRleHR1cmVDb29yZCArIGdyZWVuL2RpbWVuc2lvbnMueHkpLmc7XFxuICAgZ2xfRnJhZ0NvbG9yLmIgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZUZXh0dXJlQ29vcmQgKyBibHVlL2RpbWVuc2lvbnMueHkpLmI7XFxuICAgZ2xfRnJhZ0NvbG9yLmEgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZUZXh0dXJlQ29vcmQpLmE7XFxufVxcblwiLFxuICAgICAgICAvLyBjdXN0b20gdW5pZm9ybXNcbiAgICAgICAge1xuICAgICAgICAgICAgcmVkOiAgICAgICAgeyB0eXBlOiAndjInLCB2YWx1ZTogeyB4OiAyMCwgeTogMjAgfSB9LFxuICAgICAgICAgICAgZ3JlZW46ICAgICAgeyB0eXBlOiAndjInLCB2YWx1ZTogeyB4OiAtMjAsIHk6IDIwIH0gfSxcbiAgICAgICAgICAgIGJsdWU6ICAgICAgIHsgdHlwZTogJ3YyJywgdmFsdWU6IHsgeDogMjAsIHk6IC0yMCB9IH0sXG4gICAgICAgICAgICBkaW1lbnNpb25zOiB7IHR5cGU6ICc0ZnYnLCB2YWx1ZTogWzAsIDAsIDAsIDBdIH1cbiAgICAgICAgfVxuICAgICk7XG59XG5cblJHQlNwbGl0RmlsdGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoY29yZS5BYnN0cmFjdEZpbHRlci5wcm90b3R5cGUpO1xuUkdCU3BsaXRGaWx0ZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gUkdCU3BsaXRGaWx0ZXI7XG5tb2R1bGUuZXhwb3J0cyA9IFJHQlNwbGl0RmlsdGVyO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhSR0JTcGxpdEZpbHRlci5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBSZWQgY2hhbm5lbCBvZmZzZXQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlBvaW50fVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuUkdCU3BsaXRGaWx0ZXIjXG4gICAgICovXG4gICAgcmVkOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudW5pZm9ybXMucmVkLnZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy5yZWQudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBHcmVlbiBjaGFubmVsIG9mZnNldC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuUG9pbnR9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5SR0JTcGxpdEZpbHRlciNcbiAgICAgKi9cbiAgICBncmVlbjoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVuaWZvcm1zLmdyZWVuLnZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy5ncmVlbi52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIEJsdWUgb2Zmc2V0LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5Qb2ludH1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLlJHQlNwbGl0RmlsdGVyI1xuICAgICAqL1xuICAgIGJsdWU6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy51bmlmb3Jtcy5ibHVlLnZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy5ibHVlLnZhbHVlID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG59KTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vLi4vY29yZScpO1xuLy8gQHNlZSBodHRwczovL2dpdGh1Yi5jb20vc3Vic3RhY2svYnJmcy9pc3N1ZXMvMjVcblxuXG4vKipcbiAqIFRoaXMgYXBwbGllcyBhIHNlcGlhIGVmZmVjdCB0byB5b3VyIERpc3BsYXkgT2JqZWN0cy5cbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQWJzdHJhY3RGaWx0ZXJcbiAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnNcbiAqL1xuZnVuY3Rpb24gU2VwaWFGaWx0ZXIoKVxue1xuICAgIGNvcmUuQWJzdHJhY3RGaWx0ZXIuY2FsbCh0aGlzLFxuICAgICAgICAvLyB2ZXJ0ZXggc2hhZGVyXG4gICAgICAgIG51bGwsXG4gICAgICAgIC8vIGZyYWdtZW50IHNoYWRlclxuICAgICAgICBcInByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xcblxcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xcblxcbnVuaWZvcm0gc2FtcGxlcjJEIHVTYW1wbGVyO1xcbnVuaWZvcm0gZmxvYXQgc2VwaWE7XFxuXFxuY29uc3QgbWF0MyBzZXBpYU1hdHJpeCA9IG1hdDMoMC4zNTg4LCAwLjcwNDQsIDAuMTM2OCwgMC4yOTkwLCAwLjU4NzAsIDAuMTE0MCwgMC4yMzkyLCAwLjQ2OTYsIDAuMDkxMik7XFxuXFxudm9pZCBtYWluKHZvaWQpXFxue1xcbiAgIGdsX0ZyYWdDb2xvciA9IHRleHR1cmUyRCh1U2FtcGxlciwgdlRleHR1cmVDb29yZCk7XFxuICAgZ2xfRnJhZ0NvbG9yLnJnYiA9IG1peCggZ2xfRnJhZ0NvbG9yLnJnYiwgZ2xfRnJhZ0NvbG9yLnJnYiAqIHNlcGlhTWF0cml4LCBzZXBpYSk7XFxufVxcblwiLFxuICAgICAgICAvLyBjdXN0b20gdW5pZm9ybXNcbiAgICAgICAge1xuICAgICAgICAgICAgc2VwaWE6IHsgdHlwZTogJzFmJywgdmFsdWU6IDEgfVxuICAgICAgICB9XG4gICAgKTtcbn1cblxuU2VwaWFGaWx0ZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShjb3JlLkFic3RyYWN0RmlsdGVyLnByb3RvdHlwZSk7XG5TZXBpYUZpbHRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBTZXBpYUZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gU2VwaWFGaWx0ZXI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKFNlcGlhRmlsdGVyLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFRoZSBzdHJlbmd0aCBvZiB0aGUgc2VwaWEuIGAxYCB3aWxsIGFwcGx5IHRoZSBmdWxsIHNlcGlhIGVmZmVjdCwgYW5kXG4gICAgICogYDBgIHdpbGwgbWFrZSB0aGUgb2JqZWN0IGl0cyBub3JtYWwgY29sb3IuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5TZXBpYUZpbHRlciNcbiAgICAgKi9cbiAgICBzZXBpYToge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVuaWZvcm1zLnNlcGlhLnZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy5zZXBpYS52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfVxufSk7XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uLy4uL2NvcmUnKTtcbi8vIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL3N1YnN0YWNrL2JyZnMvaXNzdWVzLzI1XG5cblxuLyoqXG4gKiBUaGUgQ29sb3JNYXRyaXhGaWx0ZXIgY2xhc3MgbGV0cyB5b3UgYXBwbHkgYSA0eDQgbWF0cml4IHRyYW5zZm9ybWF0aW9uIG9uIHRoZSBSR0JBXG4gKiBjb2xvciBhbmQgYWxwaGEgdmFsdWVzIG9mIGV2ZXJ5IHBpeGVsIG9uIHlvdXIgZGlzcGxheU9iamVjdCB0byBwcm9kdWNlIGEgcmVzdWx0XG4gKiB3aXRoIGEgbmV3IHNldCBvZiBSR0JBIGNvbG9yIGFuZCBhbHBoYSB2YWx1ZXMuIEl0J3MgcHJldHR5IHBvd2VyZnVsIVxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5BYnN0cmFjdEZpbHRlclxuICogQG1lbWJlcm9mIFBJWEkuZmlsdGVyc1xuICovXG5mdW5jdGlvbiBTaG9ja3dhdmVGaWx0ZXIoKVxue1xuICAgIGNvcmUuQWJzdHJhY3RGaWx0ZXIuY2FsbCh0aGlzLFxuICAgICAgICAvLyB2ZXJ0ZXggc2hhZGVyXG4gICAgICAgIG51bGwsXG4gICAgICAgIC8vIGZyYWdtZW50IHNoYWRlclxuICAgICAgICBcInByZWNpc2lvbiBsb3dwIGZsb2F0O1xcblxcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xcblxcbnVuaWZvcm0gc2FtcGxlcjJEIHVTYW1wbGVyO1xcblxcbnVuaWZvcm0gdmVjMiBjZW50ZXI7XFxudW5pZm9ybSB2ZWMzIHBhcmFtczsgLy8gMTAuMCwgMC44LCAwLjFcXG51bmlmb3JtIGZsb2F0IHRpbWU7XFxuXFxudm9pZCBtYWluKClcXG57XFxuICAgIHZlYzIgdXYgPSB2VGV4dHVyZUNvb3JkO1xcbiAgICB2ZWMyIHRleENvb3JkID0gdXY7XFxuXFxuICAgIGZsb2F0IGRpc3QgPSBkaXN0YW5jZSh1diwgY2VudGVyKTtcXG5cXG4gICAgaWYgKCAoZGlzdCA8PSAodGltZSArIHBhcmFtcy56KSkgJiYgKGRpc3QgPj0gKHRpbWUgLSBwYXJhbXMueikpIClcXG4gICAge1xcbiAgICAgICAgZmxvYXQgZGlmZiA9IChkaXN0IC0gdGltZSk7XFxuICAgICAgICBmbG9hdCBwb3dEaWZmID0gMS4wIC0gcG93KGFicyhkaWZmKnBhcmFtcy54KSwgcGFyYW1zLnkpO1xcblxcbiAgICAgICAgZmxvYXQgZGlmZlRpbWUgPSBkaWZmICAqIHBvd0RpZmY7XFxuICAgICAgICB2ZWMyIGRpZmZVViA9IG5vcm1hbGl6ZSh1diAtIGNlbnRlcik7XFxuICAgICAgICB0ZXhDb29yZCA9IHV2ICsgKGRpZmZVViAqIGRpZmZUaW1lKTtcXG4gICAgfVxcblxcbiAgICBnbF9GcmFnQ29sb3IgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHRleENvb3JkKTtcXG59XFxuXCIsXG4gICAgICAgIC8vIGN1c3RvbSB1bmlmb3Jtc1xuICAgICAgICB7XG4gICAgICAgICAgICBjZW50ZXI6IHsgdHlwZTogJ3YyJywgdmFsdWU6IHsgeDogMC41LCB5OiAwLjUgfSB9LFxuICAgICAgICAgICAgcGFyYW1zOiB7IHR5cGU6ICd2MycsIHZhbHVlOiB7IHg6IDEwLCB5OiAwLjgsIHo6IDAuMSB9IH0sXG4gICAgICAgICAgICB0aW1lOiB7IHR5cGU6ICcxZicsIHZhbHVlOiAwIH1cbiAgICAgICAgfVxuICAgICk7XG59XG5cblNob2Nrd2F2ZUZpbHRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuQWJzdHJhY3RGaWx0ZXIucHJvdG90eXBlKTtcblNob2Nrd2F2ZUZpbHRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBTaG9ja3dhdmVGaWx0ZXI7XG5tb2R1bGUuZXhwb3J0cyA9IFNob2Nrd2F2ZUZpbHRlcjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoU2hvY2t3YXZlRmlsdGVyLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIGNlbnRlciBvZiB0aGUgc2hvY2t3YXZlIGluIG5vcm1hbGl6ZWQgc2NyZWVuIGNvb3Jkcy4gVGhhdCBpc1xuICAgICAqICgwLDApIGlzIHRoZSB0b3AtbGVmdCBhbmQgKDEsMSkgaXMgdGhlIGJvdHRvbSByaWdodC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge29iamVjdDxzdHJpbmcsIG51bWJlcj59XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5TaG9ja3dhdmVGaWx0ZXIjXG4gICAgICovXG4gICAgY2VudGVyOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudW5pZm9ybXMuY2VudGVyLnZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy5jZW50ZXIudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgcGFyYW1zIG9mIHRoZSBzaG9ja3dhdmUuIFRoZXNlIG1vZGlmeSB0aGUgbG9vayBhbmQgYmVoYXZpb3Igb2ZcbiAgICAgKiB0aGUgc2hvY2t3YXZlIGFzIGl0IHJpcHBsZXMgb3V0LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7b2JqZWN0PHN0cmluZywgbnVtYmVyPn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLlNob2Nrd2F2ZUZpbHRlciNcbiAgICAgKi9cbiAgICBwYXJhbXM6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy51bmlmb3Jtcy5wYXJhbXMudmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLnBhcmFtcy52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfSxcbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBlbGFwc2VkIHRpbWUgb2YgdGhlIHNob2Nrd2F2ZS4gVGhpcyBjb250cm9scyB0aGUgc3BlZWQgYXQgd2hpY2hcbiAgICAgKiB0aGUgc2hvY2t3YXZlIHJpcHBsZXMgb3V0LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuU2hvY2t3YXZlRmlsdGVyI1xuICAgICAqL1xuICAgIHRpbWU6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy51bmlmb3Jtcy50aW1lLnZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy50aW1lLnZhbHVlID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG59KTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vLi4vY29yZScpO1xuLy8gQHNlZSBodHRwczovL2dpdGh1Yi5jb20vc3Vic3RhY2svYnJmcy9pc3N1ZXMvMjVcblxuXG4vKipcbiAqIEBhdXRob3IgVmljbyBAdmljb2NvdGVhXG4gKiBvcmlnaW5hbCBmaWx0ZXIgaHR0cHM6Ly9naXRodWIuY29tL2V2YW53L2dsZnguanMvYmxvYi9tYXN0ZXIvc3JjL2ZpbHRlcnMvYmx1ci90aWx0c2hpZnQuanMgYnkgRXZhbiBXYWxsYWNlIDogaHR0cDovL21hZGVieWV2YW4uY29tL1xuICovXG5cbi8qKlxuICogQSBUaWx0U2hpZnRBeGlzRmlsdGVyLlxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5BYnN0cmFjdEZpbHRlclxuICogQG1lbWJlcm9mIFBJWEkuZmlsdGVyc1xuICovXG5mdW5jdGlvbiBUaWx0U2hpZnRBeGlzRmlsdGVyKClcbntcbiAgICBjb3JlLkFic3RyYWN0RmlsdGVyLmNhbGwodGhpcyxcbiAgICAgICAgLy8gdmVydGV4IHNoYWRlclxuICAgICAgICBudWxsLFxuICAgICAgICAvLyBmcmFnbWVudCBzaGFkZXJcbiAgICAgICAgXCJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcXG5cXG52YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDtcXG5cXG51bmlmb3JtIHNhbXBsZXIyRCB1U2FtcGxlcjtcXG51bmlmb3JtIGZsb2F0IGJsdXI7XFxudW5pZm9ybSBmbG9hdCBncmFkaWVudEJsdXI7XFxudW5pZm9ybSB2ZWMyIHN0YXJ0O1xcbnVuaWZvcm0gdmVjMiBlbmQ7XFxudW5pZm9ybSB2ZWMyIGRlbHRhO1xcbnVuaWZvcm0gdmVjMiB0ZXhTaXplO1xcblxcbmZsb2F0IHJhbmRvbSh2ZWMzIHNjYWxlLCBmbG9hdCBzZWVkKVxcbntcXG4gICAgcmV0dXJuIGZyYWN0KHNpbihkb3QoZ2xfRnJhZ0Nvb3JkLnh5eiArIHNlZWQsIHNjYWxlKSkgKiA0Mzc1OC41NDUzICsgc2VlZCk7XFxufVxcblxcbnZvaWQgbWFpbih2b2lkKVxcbntcXG4gICAgdmVjNCBjb2xvciA9IHZlYzQoMC4wKTtcXG4gICAgZmxvYXQgdG90YWwgPSAwLjA7XFxuXFxuICAgIGZsb2F0IG9mZnNldCA9IHJhbmRvbSh2ZWMzKDEyLjk4OTgsIDc4LjIzMywgMTUxLjcxODIpLCAwLjApO1xcbiAgICB2ZWMyIG5vcm1hbCA9IG5vcm1hbGl6ZSh2ZWMyKHN0YXJ0LnkgLSBlbmQueSwgZW5kLnggLSBzdGFydC54KSk7XFxuICAgIGZsb2F0IHJhZGl1cyA9IHNtb290aHN0ZXAoMC4wLCAxLjAsIGFicyhkb3QodlRleHR1cmVDb29yZCAqIHRleFNpemUgLSBzdGFydCwgbm9ybWFsKSkgLyBncmFkaWVudEJsdXIpICogYmx1cjtcXG5cXG4gICAgZm9yIChmbG9hdCB0ID0gLTMwLjA7IHQgPD0gMzAuMDsgdCsrKVxcbiAgICB7XFxuICAgICAgICBmbG9hdCBwZXJjZW50ID0gKHQgKyBvZmZzZXQgLSAwLjUpIC8gMzAuMDtcXG4gICAgICAgIGZsb2F0IHdlaWdodCA9IDEuMCAtIGFicyhwZXJjZW50KTtcXG4gICAgICAgIHZlYzQgc2FtcGxlID0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2VGV4dHVyZUNvb3JkICsgZGVsdGEgLyB0ZXhTaXplICogcGVyY2VudCAqIHJhZGl1cyk7XFxuICAgICAgICBzYW1wbGUucmdiICo9IHNhbXBsZS5hO1xcbiAgICAgICAgY29sb3IgKz0gc2FtcGxlICogd2VpZ2h0O1xcbiAgICAgICAgdG90YWwgKz0gd2VpZ2h0O1xcbiAgICB9XFxuXFxuICAgIGdsX0ZyYWdDb2xvciA9IGNvbG9yIC8gdG90YWw7XFxuICAgIGdsX0ZyYWdDb2xvci5yZ2IgLz0gZ2xfRnJhZ0NvbG9yLmEgKyAwLjAwMDAxO1xcbn1cXG5cIixcbiAgICAgICAgLy8gY3VzdG9tIHVuaWZvcm1zXG4gICAgICAgIHtcbiAgICAgICAgICAgIGJsdXI6ICAgICAgICAgICB7IHR5cGU6ICcxZicsIHZhbHVlOiAxMDAgfSxcbiAgICAgICAgICAgIGdyYWRpZW50Qmx1cjogICB7IHR5cGU6ICcxZicsIHZhbHVlOiA2MDAgfSxcbiAgICAgICAgICAgIHN0YXJ0OiAgICAgICAgICB7IHR5cGU6ICd2MicsIHZhbHVlOiB7IHg6IDAsICAgIHk6IHdpbmRvdy5pbm5lckhlaWdodCAvIDIgfSB9LFxuICAgICAgICAgICAgZW5kOiAgICAgICAgICAgIHsgdHlwZTogJ3YyJywgdmFsdWU6IHsgeDogNjAwLCAgeTogd2luZG93LmlubmVySGVpZ2h0IC8gMiB9IH0sXG4gICAgICAgICAgICBkZWx0YTogICAgICAgICAgeyB0eXBlOiAndjInLCB2YWx1ZTogeyB4OiAzMCwgICB5OiAzMCB9IH0sXG4gICAgICAgICAgICB0ZXhTaXplOiAgICAgICAgeyB0eXBlOiAndjInLCB2YWx1ZTogeyB4OiB3aW5kb3cuaW5uZXJXaWR0aCwgeTogd2luZG93LmlubmVySGVpZ2h0IH0gfVxuICAgICAgICB9XG4gICAgKTtcblxuICAgIHRoaXMudXBkYXRlRGVsdGEoKTtcbn1cblxuVGlsdFNoaWZ0QXhpc0ZpbHRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuQWJzdHJhY3RGaWx0ZXIucHJvdG90eXBlKTtcblRpbHRTaGlmdEF4aXNGaWx0ZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gVGlsdFNoaWZ0QXhpc0ZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gVGlsdFNoaWZ0QXhpc0ZpbHRlcjtcblxuLyoqXG4gKiBVcGRhdGVzIHRoZSBmaWx0ZXIgZGVsdGEgdmFsdWVzLlxuICogVGhpcyBpcyBvdmVycmlkZGVuIGluIHRoZSBYIGFuZCBZIGZpbHRlcnMsIGRvZXMgbm90aGluZyBmb3IgdGhpcyBjbGFzcy5cbiAqXG4gKi9cblRpbHRTaGlmdEF4aXNGaWx0ZXIucHJvdG90eXBlLnVwZGF0ZURlbHRhID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLnVuaWZvcm1zLmRlbHRhLnZhbHVlLnggPSAwO1xuICAgIHRoaXMudW5pZm9ybXMuZGVsdGEudmFsdWUueSA9IDA7XG59O1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhUaWx0U2hpZnRBeGlzRmlsdGVyLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFRoZSBzdHJlbmd0aCBvZiB0aGUgYmx1ci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLlRpbHRTaGlmdEF4aXNGaWx0ZXIjXG4gICAgICovXG4gICAgYmx1cjoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVuaWZvcm1zLmJsdXIudmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLmJsdXIudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBUaGUgc3RyZW5ndGggb2YgdGhlIGdyYWRpZW50IGJsdXIuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5UaWx0U2hpZnRBeGlzRmlsdGVyI1xuICAgICAqL1xuICAgIGdyYWRpZW50Qmx1cjoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVuaWZvcm1zLmdyYWRpZW50Qmx1ci52YWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudW5pZm9ybXMuZ3JhZGllbnRCbHVyLnZhbHVlID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVGhlIFggdmFsdWUgdG8gc3RhcnQgdGhlIGVmZmVjdCBhdC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuUG9pbnR9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5UaWx0U2hpZnRBeGlzRmlsdGVyI1xuICAgICAqL1xuICAgIHN0YXJ0OiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudW5pZm9ybXMuc3RhcnQudmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLnN0YXJ0LnZhbHVlID0gdmFsdWU7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZURlbHRhKCk7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVGhlIFggdmFsdWUgdG8gZW5kIHRoZSBlZmZlY3QgYXQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlBvaW50fVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuVGlsdFNoaWZ0QXhpc0ZpbHRlciNcbiAgICAgKi9cbiAgICBlbmQ6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy51bmlmb3Jtcy5lbmQudmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLmVuZC52YWx1ZSA9IHZhbHVlO1xuICAgICAgICAgICAgdGhpcy51cGRhdGVEZWx0YSgpO1xuICAgICAgICB9XG4gICAgfVxufSk7XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uLy4uL2NvcmUnKSxcbiAgICBUaWx0U2hpZnRYRmlsdGVyID0gcmVxdWlyZSgnLi9UaWx0U2hpZnRYRmlsdGVyJyksXG4gICAgVGlsdFNoaWZ0WUZpbHRlciA9IHJlcXVpcmUoJy4vVGlsdFNoaWZ0WUZpbHRlcicpO1xuXG4vKipcbiAqIEBhdXRob3IgVmljbyBAdmljb2NvdGVhXG4gKiBvcmlnaW5hbCBmaWx0ZXIgaHR0cHM6Ly9naXRodWIuY29tL2V2YW53L2dsZnguanMvYmxvYi9tYXN0ZXIvc3JjL2ZpbHRlcnMvYmx1ci90aWx0c2hpZnQuanMgYnkgRXZhbiBXYWxsYWNlIDogaHR0cDovL21hZGVieWV2YW4uY29tL1xuICovXG5cbi8qKlxuICogQSBUaWx0U2hpZnQgRmlsdGVyLiBNYW5hZ2VzIHRoZSBwYXNzIG9mIGJvdGggYSBUaWx0U2hpZnRYRmlsdGVyIGFuZCBUaWx0U2hpZnRZRmlsdGVyLlxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5BYnN0cmFjdEZpbHRlclxuICogQG1lbWJlcm9mIFBJWEkuZmlsdGVyc1xuICovXG5mdW5jdGlvbiBUaWx0U2hpZnRGaWx0ZXIoKVxue1xuICAgIGNvcmUuQWJzdHJhY3RGaWx0ZXIuY2FsbCh0aGlzKTtcblxuICAgIHRoaXMudGlsdFNoaWZ0WEZpbHRlciA9IG5ldyBUaWx0U2hpZnRYRmlsdGVyKCk7XG4gICAgdGhpcy50aWx0U2hpZnRZRmlsdGVyID0gbmV3IFRpbHRTaGlmdFlGaWx0ZXIoKTtcbn1cblxuVGlsdFNoaWZ0RmlsdGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoY29yZS5BYnN0cmFjdEZpbHRlci5wcm90b3R5cGUpO1xuVGlsdFNoaWZ0RmlsdGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFRpbHRTaGlmdEZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gVGlsdFNoaWZ0RmlsdGVyO1xuXG5UaWx0U2hpZnRGaWx0ZXIucHJvdG90eXBlLmFwcGx5RmlsdGVyID0gZnVuY3Rpb24gKHJlbmRlcmVyLCBpbnB1dCwgb3V0cHV0KVxue1xuICAgIHZhciByZW5kZXJUYXJnZXQgPSByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLmdldFJlbmRlclRhcmdldCh0cnVlKTtcblxuICAgIHRoaXMudGlsdFNoaWZ0WEZpbHRlci5hcHBseUZpbHRlcihyZW5kZXJlciwgaW5wdXQsIHJlbmRlclRhcmdldCk7XG5cbiAgICB0aGlzLnRpbHRTaGlmdFlGaWx0ZXIuYXBwbHlGaWx0ZXIocmVuZGVyZXIsIHJlbmRlclRhcmdldCwgb3V0cHV0KTtcblxuICAgIHJlbmRlcmVyLmZpbHRlck1hbmFnZXIucmV0dXJuUmVuZGVyVGFyZ2V0KHJlbmRlclRhcmdldCk7XG59O1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhUaWx0U2hpZnRGaWx0ZXIucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogVGhlIHN0cmVuZ3RoIG9mIHRoZSBibHVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuVGlsdFNoaWZ0RmlsdGVyI1xuICAgICAqL1xuICAgIGJsdXI6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy50aWx0U2hpZnRYRmlsdGVyLmJsdXI7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnRpbHRTaGlmdFhGaWx0ZXIuYmx1ciA9IHRoaXMudGlsdFNoaWZ0WUZpbHRlci5ibHVyID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVGhlIHN0cmVuZ3RoIG9mIHRoZSBncmFkaWVudCBibHVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuVGlsdFNoaWZ0RmlsdGVyI1xuICAgICAqL1xuICAgIGdyYWRpZW50Qmx1cjoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnRpbHRTaGlmdFhGaWx0ZXIuZ3JhZGllbnRCbHVyO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy50aWx0U2hpZnRYRmlsdGVyLmdyYWRpZW50Qmx1ciA9IHRoaXMudGlsdFNoaWZ0WUZpbHRlci5ncmFkaWVudEJsdXIgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBUaGUgWSB2YWx1ZSB0byBzdGFydCB0aGUgZWZmZWN0IGF0LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuVGlsdFNoaWZ0RmlsdGVyI1xuICAgICAqL1xuICAgIHN0YXJ0OiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudGlsdFNoaWZ0WEZpbHRlci5zdGFydDtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudGlsdFNoaWZ0WEZpbHRlci5zdGFydCA9IHRoaXMudGlsdFNoaWZ0WUZpbHRlci5zdGFydCA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFRoZSBZIHZhbHVlIHRvIGVuZCB0aGUgZWZmZWN0IGF0LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuVGlsdFNoaWZ0RmlsdGVyI1xuICAgICAqL1xuICAgIGVuZDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnRpbHRTaGlmdFhGaWx0ZXIuZW5kO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy50aWx0U2hpZnRYRmlsdGVyLmVuZCA9IHRoaXMudGlsdFNoaWZ0WUZpbHRlci5lbmQgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuIiwidmFyIFRpbHRTaGlmdEF4aXNGaWx0ZXIgPSByZXF1aXJlKCcuL1RpbHRTaGlmdEF4aXNGaWx0ZXInKTtcblxuLyoqXG4gKiBAYXV0aG9yIFZpY28gQHZpY29jb3RlYVxuICogb3JpZ2luYWwgZmlsdGVyIGh0dHBzOi8vZ2l0aHViLmNvbS9ldmFudy9nbGZ4LmpzL2Jsb2IvbWFzdGVyL3NyYy9maWx0ZXJzL2JsdXIvdGlsdHNoaWZ0LmpzIGJ5IEV2YW4gV2FsbGFjZSA6IGh0dHA6Ly9tYWRlYnlldmFuLmNvbS9cbiAqL1xuXG4vKipcbiAqIEEgVGlsdFNoaWZ0WEZpbHRlci5cbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuVGlsdFNoaWZ0QXhpc0ZpbHRlclxuICogQG1lbWJlcm9mIFBJWEkuZmlsdGVyc1xuICovXG5mdW5jdGlvbiBUaWx0U2hpZnRYRmlsdGVyKClcbntcbiAgICBUaWx0U2hpZnRBeGlzRmlsdGVyLmNhbGwodGhpcyk7XG59XG5cblRpbHRTaGlmdFhGaWx0ZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShUaWx0U2hpZnRBeGlzRmlsdGVyLnByb3RvdHlwZSk7XG5UaWx0U2hpZnRYRmlsdGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFRpbHRTaGlmdFhGaWx0ZXI7XG5tb2R1bGUuZXhwb3J0cyA9IFRpbHRTaGlmdFhGaWx0ZXI7XG5cbi8qKlxuICogVXBkYXRlcyB0aGUgZmlsdGVyIGRlbHRhIHZhbHVlcy5cbiAqXG4gKi9cblRpbHRTaGlmdFhGaWx0ZXIucHJvdG90eXBlLnVwZGF0ZURlbHRhID0gZnVuY3Rpb24gKClcbntcbiAgICB2YXIgZHggPSB0aGlzLnVuaWZvcm1zLmVuZC52YWx1ZS54IC0gdGhpcy51bmlmb3Jtcy5zdGFydC52YWx1ZS54O1xuICAgIHZhciBkeSA9IHRoaXMudW5pZm9ybXMuZW5kLnZhbHVlLnkgLSB0aGlzLnVuaWZvcm1zLnN0YXJ0LnZhbHVlLnk7XG4gICAgdmFyIGQgPSBNYXRoLnNxcnQoZHggKiBkeCArIGR5ICogZHkpO1xuXG4gICAgdGhpcy51bmlmb3Jtcy5kZWx0YS52YWx1ZS54ID0gZHggLyBkO1xuICAgIHRoaXMudW5pZm9ybXMuZGVsdGEudmFsdWUueSA9IGR5IC8gZDtcbn07XG4iLCJ2YXIgVGlsdFNoaWZ0QXhpc0ZpbHRlciA9IHJlcXVpcmUoJy4vVGlsdFNoaWZ0QXhpc0ZpbHRlcicpO1xuXG4vKipcbiAqIEBhdXRob3IgVmljbyBAdmljb2NvdGVhXG4gKiBvcmlnaW5hbCBmaWx0ZXIgaHR0cHM6Ly9naXRodWIuY29tL2V2YW53L2dsZnguanMvYmxvYi9tYXN0ZXIvc3JjL2ZpbHRlcnMvYmx1ci90aWx0c2hpZnQuanMgYnkgRXZhbiBXYWxsYWNlIDogaHR0cDovL21hZGVieWV2YW4uY29tL1xuICovXG5cbi8qKlxuICogQSBUaWx0U2hpZnRZRmlsdGVyLlxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5UaWx0U2hpZnRBeGlzRmlsdGVyXG4gKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzXG4gKi9cbmZ1bmN0aW9uIFRpbHRTaGlmdFlGaWx0ZXIoKVxue1xuICAgIFRpbHRTaGlmdEF4aXNGaWx0ZXIuY2FsbCh0aGlzKTtcbn1cblxuVGlsdFNoaWZ0WUZpbHRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFRpbHRTaGlmdEF4aXNGaWx0ZXIucHJvdG90eXBlKTtcblRpbHRTaGlmdFlGaWx0ZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gVGlsdFNoaWZ0WUZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gVGlsdFNoaWZ0WUZpbHRlcjtcblxuLyoqXG4gKiBVcGRhdGVzIHRoZSBmaWx0ZXIgZGVsdGEgdmFsdWVzLlxuICpcbiAqL1xuVGlsdFNoaWZ0WUZpbHRlci5wcm90b3R5cGUudXBkYXRlRGVsdGEgPSBmdW5jdGlvbiAoKVxue1xuICAgIHZhciBkeCA9IHRoaXMudW5pZm9ybXMuZW5kLnZhbHVlLnggLSB0aGlzLnVuaWZvcm1zLnN0YXJ0LnZhbHVlLng7XG4gICAgdmFyIGR5ID0gdGhpcy51bmlmb3Jtcy5lbmQudmFsdWUueSAtIHRoaXMudW5pZm9ybXMuc3RhcnQudmFsdWUueTtcbiAgICB2YXIgZCA9IE1hdGguc3FydChkeCAqIGR4ICsgZHkgKiBkeSk7XG5cbiAgICB0aGlzLnVuaWZvcm1zLmRlbHRhLnZhbHVlLnggPSAtZHkgLyBkO1xuICAgIHRoaXMudW5pZm9ybXMuZGVsdGEudmFsdWUueSA9IGR4IC8gZDtcbn07XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uLy4uL2NvcmUnKTtcbi8vIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL3N1YnN0YWNrL2JyZnMvaXNzdWVzLzI1XG5cblxuLyoqXG4gKiBUaGlzIGZpbHRlciBhcHBsaWVzIGEgdHdpc3QgZWZmZWN0IG1ha2luZyBkaXNwbGF5IG9iamVjdHMgYXBwZWFyIHR3aXN0ZWQgaW4gdGhlIGdpdmVuIGRpcmVjdGlvbi5cbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQWJzdHJhY3RGaWx0ZXJcbiAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnNcbiAqL1xuZnVuY3Rpb24gVHdpc3RGaWx0ZXIoKVxue1xuICAgIGNvcmUuQWJzdHJhY3RGaWx0ZXIuY2FsbCh0aGlzLFxuICAgICAgICAvLyB2ZXJ0ZXggc2hhZGVyXG4gICAgICAgIG51bGwsXG4gICAgICAgIC8vIGZyYWdtZW50IHNoYWRlclxuICAgICAgICBcInByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xcblxcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xcblxcbnVuaWZvcm0gc2FtcGxlcjJEIHVTYW1wbGVyO1xcbnVuaWZvcm0gZmxvYXQgcmFkaXVzO1xcbnVuaWZvcm0gZmxvYXQgYW5nbGU7XFxudW5pZm9ybSB2ZWMyIG9mZnNldDtcXG5cXG52b2lkIG1haW4odm9pZClcXG57XFxuICAgdmVjMiBjb29yZCA9IHZUZXh0dXJlQ29vcmQgLSBvZmZzZXQ7XFxuICAgZmxvYXQgZGlzdCA9IGxlbmd0aChjb29yZCk7XFxuXFxuICAgaWYgKGRpc3QgPCByYWRpdXMpXFxuICAge1xcbiAgICAgICBmbG9hdCByYXRpbyA9IChyYWRpdXMgLSBkaXN0KSAvIHJhZGl1cztcXG4gICAgICAgZmxvYXQgYW5nbGVNb2QgPSByYXRpbyAqIHJhdGlvICogYW5nbGU7XFxuICAgICAgIGZsb2F0IHMgPSBzaW4oYW5nbGVNb2QpO1xcbiAgICAgICBmbG9hdCBjID0gY29zKGFuZ2xlTW9kKTtcXG4gICAgICAgY29vcmQgPSB2ZWMyKGNvb3JkLnggKiBjIC0gY29vcmQueSAqIHMsIGNvb3JkLnggKiBzICsgY29vcmQueSAqIGMpO1xcbiAgIH1cXG5cXG4gICBnbF9GcmFnQ29sb3IgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIGNvb3JkK29mZnNldCk7XFxufVxcblwiLFxuICAgICAgICAvLyBjdXN0b20gdW5pZm9ybXNcbiAgICAgICAge1xuICAgICAgICAgICAgcmFkaXVzOiAgICAgeyB0eXBlOiAnMWYnLCB2YWx1ZTogMC41IH0sXG4gICAgICAgICAgICBhbmdsZTogICAgICB7IHR5cGU6ICcxZicsIHZhbHVlOiA1IH0sXG4gICAgICAgICAgICBvZmZzZXQ6ICAgICB7IHR5cGU6ICd2MicsIHZhbHVlOiB7IHg6IDAuNSwgeTogMC41IH0gfVxuICAgICAgICB9XG4gICAgKTtcbn1cblxuVHdpc3RGaWx0ZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShjb3JlLkFic3RyYWN0RmlsdGVyLnByb3RvdHlwZSk7XG5Ud2lzdEZpbHRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBUd2lzdEZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gVHdpc3RGaWx0ZXI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKFR3aXN0RmlsdGVyLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFRoaXMgcG9pbnQgZGVzY3JpYmVzIHRoZSB0aGUgb2Zmc2V0IG9mIHRoZSB0d2lzdC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuUG9pbnR9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5Ud2lzdEZpbHRlciNcbiAgICAgKi9cbiAgICBvZmZzZXQ6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy51bmlmb3Jtcy5vZmZzZXQudmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLm9mZnNldC52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFRoaXMgcmFkaXVzIG9mIHRoZSB0d2lzdC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLlR3aXN0RmlsdGVyI1xuICAgICAqL1xuICAgIHJhZGl1czoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVuaWZvcm1zLnJhZGl1cy52YWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudW5pZm9ybXMucmFkaXVzLnZhbHVlID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVGhpcyBhbmdsZSBvZiB0aGUgdHdpc3QuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5Ud2lzdEZpbHRlciNcbiAgICAgKi9cbiAgICBhbmdsZToge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVuaWZvcm1zLmFuZ2xlLnZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy5hbmdsZS52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfVxufSk7XG4iLCIvLyBydW4gdGhlIHBvbHlmaWxsc1xucmVxdWlyZSgnLi9wb2x5ZmlsbCcpO1xuXG52YXIgY29yZSA9IG1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9jb3JlJyk7XG5cbi8vIGFkZCBjb3JlIHBsdWdpbnMuXG5jb3JlLmV4dHJhcyAgICAgICAgID0gcmVxdWlyZSgnLi9leHRyYXMnKTtcbmNvcmUuZmlsdGVycyAgICAgICAgPSByZXF1aXJlKCcuL2ZpbHRlcnMnKTtcbmNvcmUuaW50ZXJhY3Rpb24gICAgPSByZXF1aXJlKCcuL2ludGVyYWN0aW9uJyk7XG5jb3JlLmxvYWRlcnMgICAgICAgID0gcmVxdWlyZSgnLi9sb2FkZXJzJyk7XG5jb3JlLm1lc2ggICAgICAgICAgID0gcmVxdWlyZSgnLi9tZXNoJyk7XG5jb3JlLmFjY2Vzc2liaWxpdHkgID0gcmVxdWlyZSgnLi9hY2Nlc3NpYmlsaXR5Jyk7XG5cbi8vIGV4cG9ydCBhIHByZW1hZGUgbG9hZGVyIGluc3RhbmNlXG4vKipcbiAqIEEgcHJlbWFkZSBpbnN0YW5jZSBvZiB0aGUgbG9hZGVyIHRoYXQgY2FuIGJlIHVzZWQgdG8gbG9hZGVyIHJlc291cmNlcy5cbiAqXG4gKiBAbmFtZSBsb2FkZXJcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcHJvcGVydHkge1BJWEkubG9hZGVycy5Mb2FkZXJ9XG4gKi9cbmNvcmUubG9hZGVyID0gbmV3IGNvcmUubG9hZGVycy5Mb2FkZXIoKTtcblxuLy8gbWl4aW4gdGhlIGRlcHJlY2F0aW9uIGZlYXR1cmVzLlxuT2JqZWN0LmFzc2lnbihjb3JlLCByZXF1aXJlKCcuL2RlcHJlY2F0aW9uJykpO1xuXG4vLyBBbHdheXMgZXhwb3J0IHBpeGkgZ2xvYmFsbHkuXG5nbG9iYWwuUElYSSA9IGNvcmU7XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uL2NvcmUnKTtcblxuLyoqXG4gKiBIb2xkcyBhbGwgaW5mb3JtYXRpb24gcmVsYXRlZCB0byBhbiBJbnRlcmFjdGlvbiBldmVudFxuICpcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWEkuaW50ZXJhY3Rpb25cbiAqL1xuZnVuY3Rpb24gSW50ZXJhY3Rpb25EYXRhKClcbntcbiAgICAvKipcbiAgICAgKiBUaGlzIHBvaW50IHN0b3JlcyB0aGUgZ2xvYmFsIGNvb3JkcyBvZiB3aGVyZSB0aGUgdG91Y2gvbW91c2UgZXZlbnQgaGFwcGVuZWRcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuUG9pbnR9XG4gICAgICovXG4gICAgdGhpcy5nbG9iYWwgPSBuZXcgY29yZS5Qb2ludCgpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHRhcmdldCBTcHJpdGUgdGhhdCB3YXMgaW50ZXJhY3RlZCB3aXRoXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlNwcml0ZX1cbiAgICAgKi9cbiAgICB0aGlzLnRhcmdldCA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBXaGVuIHBhc3NlZCB0byBhbiBldmVudCBoYW5kbGVyLCB0aGlzIHdpbGwgYmUgdGhlIG9yaWdpbmFsIERPTSBFdmVudCB0aGF0IHdhcyBjYXB0dXJlZFxuICAgICAqXG4gICAgICogQG1lbWJlciB7RXZlbnR9XG4gICAgICovXG4gICAgdGhpcy5vcmlnaW5hbEV2ZW50ID0gbnVsbDtcbn1cblxuSW50ZXJhY3Rpb25EYXRhLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IEludGVyYWN0aW9uRGF0YTtcbm1vZHVsZS5leHBvcnRzID0gSW50ZXJhY3Rpb25EYXRhO1xuXG4vKipcbiAqIFRoaXMgd2lsbCByZXR1cm4gdGhlIGxvY2FsIGNvb3JkaW5hdGVzIG9mIHRoZSBzcGVjaWZpZWQgZGlzcGxheU9iamVjdCBmb3IgdGhpcyBJbnRlcmFjdGlvbkRhdGFcbiAqXG4gKiBAcGFyYW0gZGlzcGxheU9iamVjdCB7UElYSS5EaXNwbGF5T2JqZWN0fSBUaGUgRGlzcGxheU9iamVjdCB0aGF0IHlvdSB3b3VsZCBsaWtlIHRoZSBsb2NhbCBjb29yZHMgb2ZmXG4gKiBAcGFyYW0gW3BvaW50XSB7UElYSS5Qb2ludH0gQSBQb2ludCBvYmplY3QgaW4gd2hpY2ggdG8gc3RvcmUgdGhlIHZhbHVlLCBvcHRpb25hbCAob3RoZXJ3aXNlIHdpbGwgY3JlYXRlIGEgbmV3IHBvaW50KVxuICogQHBhcmFtIFtnbG9iYWxQb3NdIHtQSVhJLlBvaW50fSBBIFBvaW50IG9iamVjdCBjb250YWluaW5nIHlvdXIgY3VzdG9tIGdsb2JhbCBjb29yZHMsIG9wdGlvbmFsIChvdGhlcndpc2Ugd2lsbCB1c2UgdGhlIGN1cnJlbnQgZ2xvYmFsIGNvb3JkcylcbiAqIEByZXR1cm4ge1BJWEkuUG9pbnR9IEEgcG9pbnQgY29udGFpbmluZyB0aGUgY29vcmRpbmF0ZXMgb2YgdGhlIEludGVyYWN0aW9uRGF0YSBwb3NpdGlvbiByZWxhdGl2ZSB0byB0aGUgRGlzcGxheU9iamVjdFxuICovXG5JbnRlcmFjdGlvbkRhdGEucHJvdG90eXBlLmdldExvY2FsUG9zaXRpb24gPSBmdW5jdGlvbiAoZGlzcGxheU9iamVjdCwgcG9pbnQsIGdsb2JhbFBvcylcbntcbiAgICByZXR1cm4gZGlzcGxheU9iamVjdC53b3JsZFRyYW5zZm9ybS5hcHBseUludmVyc2UoZ2xvYmFsUG9zIHx8IHRoaXMuZ2xvYmFsLCBwb2ludCk7XG59O1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi9jb3JlJyksXG4gICAgSW50ZXJhY3Rpb25EYXRhID0gcmVxdWlyZSgnLi9JbnRlcmFjdGlvbkRhdGEnKTtcblxuLy8gTWl4IGludGVyYWN0aXZlVGFyZ2V0IGludG8gY29yZS5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZVxuT2JqZWN0LmFzc2lnbihcbiAgICBjb3JlLkRpc3BsYXlPYmplY3QucHJvdG90eXBlLFxuICAgIHJlcXVpcmUoJy4vaW50ZXJhY3RpdmVUYXJnZXQnKVxuKTtcblxuLyoqXG4gKiBUaGUgaW50ZXJhY3Rpb24gbWFuYWdlciBkZWFscyB3aXRoIG1vdXNlIGFuZCB0b3VjaCBldmVudHMuIEFueSBEaXNwbGF5T2JqZWN0IGNhbiBiZSBpbnRlcmFjdGl2ZVxuICogaWYgaXRzIGludGVyYWN0aXZlIHBhcmFtZXRlciBpcyBzZXQgdG8gdHJ1ZVxuICogVGhpcyBtYW5hZ2VyIGFsc28gc3VwcG9ydHMgbXVsdGl0b3VjaC5cbiAqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJLmludGVyYWN0aW9uXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuQ2FudmFzUmVuZGVyZXJ8UElYSS5XZWJHTFJlbmRlcmVyfSBBIHJlZmVyZW5jZSB0byB0aGUgY3VycmVudCByZW5kZXJlclxuICogQHBhcmFtIFtvcHRpb25zXSB7b2JqZWN0fVxuICogQHBhcmFtIFtvcHRpb25zLmF1dG9QcmV2ZW50RGVmYXVsdD10cnVlXSB7Ym9vbGVhbn0gU2hvdWxkIHRoZSBtYW5hZ2VyIGF1dG9tYXRpY2FsbHkgcHJldmVudCBkZWZhdWx0IGJyb3dzZXIgYWN0aW9ucy5cbiAqIEBwYXJhbSBbb3B0aW9ucy5pbnRlcmFjdGlvbkZyZXF1ZW5jeT0xMF0ge251bWJlcn0gRnJlcXVlbmN5IGluY3JlYXNlcyB0aGUgaW50ZXJhY3Rpb24gZXZlbnRzIHdpbGwgYmUgY2hlY2tlZC5cbiAqL1xuZnVuY3Rpb24gSW50ZXJhY3Rpb25NYW5hZ2VyKHJlbmRlcmVyLCBvcHRpb25zKVxue1xuICAgIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuXG4gICAgLyoqXG4gICAgICogVGhlIHJlbmRlcmVyIHRoaXMgaW50ZXJhY3Rpb24gbWFuYWdlciB3b3JrcyBmb3IuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlN5c3RlbVJlbmRlcmVyfVxuICAgICAqL1xuICAgIHRoaXMucmVuZGVyZXIgPSByZW5kZXJlcjtcblxuICAgIC8qKlxuICAgICAqIFNob3VsZCBkZWZhdWx0IGJyb3dzZXIgYWN0aW9ucyBhdXRvbWF0aWNhbGx5IGJlIHByZXZlbnRlZC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICogQGRlZmF1bHQgdHJ1ZVxuICAgICAqL1xuICAgIHRoaXMuYXV0b1ByZXZlbnREZWZhdWx0ID0gb3B0aW9ucy5hdXRvUHJldmVudERlZmF1bHQgIT09IHVuZGVmaW5lZCA/IG9wdGlvbnMuYXV0b1ByZXZlbnREZWZhdWx0IDogdHJ1ZTtcblxuICAgIC8qKlxuICAgICAqIEFzIHRoaXMgZnJlcXVlbmN5IGluY3JlYXNlcyB0aGUgaW50ZXJhY3Rpb24gZXZlbnRzIHdpbGwgYmUgY2hlY2tlZCBtb3JlIG9mdGVuLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDEwXG4gICAgICovXG4gICAgdGhpcy5pbnRlcmFjdGlvbkZyZXF1ZW5jeSA9IG9wdGlvbnMuaW50ZXJhY3Rpb25GcmVxdWVuY3kgfHwgMTA7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgbW91c2UgZGF0YVxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5pbnRlcmFjdGlvbi5JbnRlcmFjdGlvbkRhdGF9XG4gICAgICovXG4gICAgdGhpcy5tb3VzZSA9IG5ldyBJbnRlcmFjdGlvbkRhdGEoKTtcblxuICAgIC8qKlxuICAgICAqIEFuIGV2ZW50IGRhdGEgb2JqZWN0IHRvIGhhbmRsZSBhbGwgdGhlIGV2ZW50IHRyYWNraW5nL2Rpc3BhdGNoaW5nXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtvYmplY3R9XG4gICAgICovXG4gICAgdGhpcy5ldmVudERhdGEgPSB7XG4gICAgICAgIHN0b3BwZWQ6IGZhbHNlLFxuICAgICAgICB0YXJnZXQ6IG51bGwsXG4gICAgICAgIHR5cGU6IG51bGwsXG4gICAgICAgIGRhdGE6IHRoaXMubW91c2UsXG4gICAgICAgIHN0b3BQcm9wYWdhdGlvbjpmdW5jdGlvbigpe1xuICAgICAgICAgICAgdGhpcy5zdG9wcGVkID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH07XG5cbiAgICAvKipcbiAgICAgKiBUaW55IGxpdHRsZSBpbnRlcmFjdGl2ZURhdGEgcG9vbCAhXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLmludGVyYWN0aW9uLkludGVyYWN0aW9uRGF0YVtdfVxuICAgICAqL1xuICAgIHRoaXMuaW50ZXJhY3RpdmVEYXRhUG9vbCA9IFtdO1xuXG4gICAgLyoqXG4gICAgICogVGhlIERPTSBlbGVtZW50IHRvIGJpbmQgdG8uXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtIVE1MRWxlbWVudH1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuaW50ZXJhY3Rpb25ET01FbGVtZW50ID0gbnVsbDtcblxuICAgIC8qKlxuICAgICAqIEhhdmUgZXZlbnRzIGJlZW4gYXR0YWNoZWQgdG8gdGhlIGRvbSBlbGVtZW50P1xuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuZXZlbnRzQWRkZWQgPSBmYWxzZTtcblxuICAgIC8vdGhpcyB3aWxsIG1ha2UgaXQgc28gdGhhdCB5b3UgZG9uJ3QgaGF2ZSB0byBjYWxsIGJpbmQgYWxsIHRoZSB0aW1lXG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtGdW5jdGlvbn1cbiAgICAgKi9cbiAgICB0aGlzLm9uTW91c2VVcCA9IHRoaXMub25Nb3VzZVVwLmJpbmQodGhpcyk7XG4gICAgdGhpcy5wcm9jZXNzTW91c2VVcCA9IHRoaXMucHJvY2Vzc01vdXNlVXAuYmluZCggdGhpcyApO1xuXG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtGdW5jdGlvbn1cbiAgICAgKi9cbiAgICB0aGlzLm9uTW91c2VEb3duID0gdGhpcy5vbk1vdXNlRG93bi5iaW5kKHRoaXMpO1xuICAgIHRoaXMucHJvY2Vzc01vdXNlRG93biA9IHRoaXMucHJvY2Vzc01vdXNlRG93bi5iaW5kKCB0aGlzICk7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtGdW5jdGlvbn1cbiAgICAgKi9cbiAgICB0aGlzLm9uTW91c2VNb3ZlID0gdGhpcy5vbk1vdXNlTW92ZS5iaW5kKCB0aGlzICk7XG4gICAgdGhpcy5wcm9jZXNzTW91c2VNb3ZlID0gdGhpcy5wcm9jZXNzTW91c2VNb3ZlLmJpbmQoIHRoaXMgKTtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge0Z1bmN0aW9ufVxuICAgICAqL1xuICAgIHRoaXMub25Nb3VzZU91dCA9IHRoaXMub25Nb3VzZU91dC5iaW5kKHRoaXMpO1xuICAgIHRoaXMucHJvY2Vzc01vdXNlT3Zlck91dCA9IHRoaXMucHJvY2Vzc01vdXNlT3Zlck91dC5iaW5kKCB0aGlzICk7XG5cblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge0Z1bmN0aW9ufVxuICAgICAqL1xuICAgIHRoaXMub25Ub3VjaFN0YXJ0ID0gdGhpcy5vblRvdWNoU3RhcnQuYmluZCh0aGlzKTtcbiAgICB0aGlzLnByb2Nlc3NUb3VjaFN0YXJ0ID0gdGhpcy5wcm9jZXNzVG91Y2hTdGFydC5iaW5kKHRoaXMpO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7RnVuY3Rpb259XG4gICAgICovXG4gICAgdGhpcy5vblRvdWNoRW5kID0gdGhpcy5vblRvdWNoRW5kLmJpbmQodGhpcyk7XG4gICAgdGhpcy5wcm9jZXNzVG91Y2hFbmQgPSB0aGlzLnByb2Nlc3NUb3VjaEVuZC5iaW5kKHRoaXMpO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7RnVuY3Rpb259XG4gICAgICovXG4gICAgdGhpcy5vblRvdWNoTW92ZSA9IHRoaXMub25Ub3VjaE1vdmUuYmluZCh0aGlzKTtcbiAgICB0aGlzLnByb2Nlc3NUb3VjaE1vdmUgPSB0aGlzLnByb2Nlc3NUb3VjaE1vdmUuYmluZCh0aGlzKTtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLmxhc3QgPSAwO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGNzcyBzdHlsZSBvZiB0aGUgY3Vyc29yIHRoYXQgaXMgYmVpbmcgdXNlZFxuICAgICAqIEBtZW1iZXIge3N0cmluZ31cbiAgICAgKi9cbiAgICB0aGlzLmN1cnJlbnRDdXJzb3JTdHlsZSA9ICdpbmhlcml0JztcblxuICAgIC8qKlxuICAgICAqIEludGVybmFsIGNhY2hlZCB2YXJcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlBvaW50fVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fdGVtcFBvaW50ID0gbmV3IGNvcmUuUG9pbnQoKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBjdXJyZW50IHJlc29sdXRpb25cbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy5yZXNvbHV0aW9uID0gMTtcblxuICAgIHRoaXMuc2V0VGFyZ2V0RWxlbWVudCh0aGlzLnJlbmRlcmVyLnZpZXcsIHRoaXMucmVuZGVyZXIucmVzb2x1dGlvbik7XG59XG5cbkludGVyYWN0aW9uTWFuYWdlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBJbnRlcmFjdGlvbk1hbmFnZXI7XG5tb2R1bGUuZXhwb3J0cyA9IEludGVyYWN0aW9uTWFuYWdlcjtcblxuLyoqXG4gKiBTZXRzIHRoZSBET00gZWxlbWVudCB3aGljaCB3aWxsIHJlY2VpdmUgbW91c2UvdG91Y2ggZXZlbnRzLiBUaGlzIGlzIHVzZWZ1bCBmb3Igd2hlbiB5b3UgaGF2ZVxuICogb3RoZXIgRE9NIGVsZW1lbnRzIG9uIHRvcCBvZiB0aGUgcmVuZGVyZXJzIENhbnZhcyBlbGVtZW50LiBXaXRoIHRoaXMgeW91J2xsIGJlIGJhbGUgdG8gZGVsZXRlZ2F0ZVxuICogYW5vdGhlciBET00gZWxlbWVudCB0byByZWNlaXZlIHRob3NlIGV2ZW50cy5cbiAqXG4gKiBAcGFyYW0gZWxlbWVudCB7SFRNTEVsZW1lbnR9IHRoZSBET00gZWxlbWVudCB3aGljaCB3aWxsIHJlY2VpdmUgbW91c2UgYW5kIHRvdWNoIGV2ZW50cy5cbiAqIEBwYXJhbSBbcmVzb2x1dGlvbj0xXSB7bnVtYmVyfSBUSGUgcmVzb2x1dGlvbiBvZiB0aGUgbmV3IGVsZW1lbnQgKHJlbGF0aXZlIHRvIHRoZSBjYW52YXMpLlxuICogQHByaXZhdGVcbiAqL1xuSW50ZXJhY3Rpb25NYW5hZ2VyLnByb3RvdHlwZS5zZXRUYXJnZXRFbGVtZW50ID0gZnVuY3Rpb24gKGVsZW1lbnQsIHJlc29sdXRpb24pXG57XG4gICAgdGhpcy5yZW1vdmVFdmVudHMoKTtcblxuICAgIHRoaXMuaW50ZXJhY3Rpb25ET01FbGVtZW50ID0gZWxlbWVudDtcblxuICAgIHRoaXMucmVzb2x1dGlvbiA9IHJlc29sdXRpb24gfHwgMTtcblxuICAgIHRoaXMuYWRkRXZlbnRzKCk7XG59O1xuXG4vKipcbiAqIFJlZ2lzdGVycyBhbGwgdGhlIERPTSBldmVudHNcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5JbnRlcmFjdGlvbk1hbmFnZXIucHJvdG90eXBlLmFkZEV2ZW50cyA9IGZ1bmN0aW9uICgpXG57XG4gICAgaWYgKCF0aGlzLmludGVyYWN0aW9uRE9NRWxlbWVudClcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb3JlLnRpY2tlci5zaGFyZWQuYWRkKHRoaXMudXBkYXRlLCB0aGlzKTtcblxuICAgIGlmICh3aW5kb3cubmF2aWdhdG9yLm1zUG9pbnRlckVuYWJsZWQpXG4gICAge1xuICAgICAgICB0aGlzLmludGVyYWN0aW9uRE9NRWxlbWVudC5zdHlsZVsnLW1zLWNvbnRlbnQtem9vbWluZyddID0gJ25vbmUnO1xuICAgICAgICB0aGlzLmludGVyYWN0aW9uRE9NRWxlbWVudC5zdHlsZVsnLW1zLXRvdWNoLWFjdGlvbiddID0gJ25vbmUnO1xuICAgIH1cblxuICAgIHdpbmRvdy5kb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdtb3VzZW1vdmUnLCAgICB0aGlzLm9uTW91c2VNb3ZlLCB0cnVlKTtcbiAgICB0aGlzLmludGVyYWN0aW9uRE9NRWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCdtb3VzZWRvd24nLCAgICB0aGlzLm9uTW91c2VEb3duLCB0cnVlKTtcbiAgICB0aGlzLmludGVyYWN0aW9uRE9NRWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCdtb3VzZW91dCcsICAgICB0aGlzLm9uTW91c2VPdXQsIHRydWUpO1xuXG4gICAgdGhpcy5pbnRlcmFjdGlvbkRPTUVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigndG91Y2hzdGFydCcsICAgdGhpcy5vblRvdWNoU3RhcnQsIHRydWUpO1xuICAgIHRoaXMuaW50ZXJhY3Rpb25ET01FbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ3RvdWNoZW5kJywgICAgIHRoaXMub25Ub3VjaEVuZCwgdHJ1ZSk7XG4gICAgdGhpcy5pbnRlcmFjdGlvbkRPTUVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigndG91Y2htb3ZlJywgICAgdGhpcy5vblRvdWNoTW92ZSwgdHJ1ZSk7XG5cbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignbW91c2V1cCcsICB0aGlzLm9uTW91c2VVcCwgdHJ1ZSk7XG5cbiAgICB0aGlzLmV2ZW50c0FkZGVkID0gdHJ1ZTtcbn07XG5cbi8qKlxuICogUmVtb3ZlcyBhbGwgdGhlIERPTSBldmVudHMgdGhhdCB3ZXJlIHByZXZpb3VzbHkgcmVnaXN0ZXJlZFxuICpcbiAqIEBwcml2YXRlXG4gKi9cbkludGVyYWN0aW9uTWFuYWdlci5wcm90b3R5cGUucmVtb3ZlRXZlbnRzID0gZnVuY3Rpb24gKClcbntcbiAgICBpZiAoIXRoaXMuaW50ZXJhY3Rpb25ET01FbGVtZW50KVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvcmUudGlja2VyLnNoYXJlZC5yZW1vdmUodGhpcy51cGRhdGUpO1xuXG4gICAgaWYgKHdpbmRvdy5uYXZpZ2F0b3IubXNQb2ludGVyRW5hYmxlZClcbiAgICB7XG4gICAgICAgIHRoaXMuaW50ZXJhY3Rpb25ET01FbGVtZW50LnN0eWxlWyctbXMtY29udGVudC16b29taW5nJ10gPSAnJztcbiAgICAgICAgdGhpcy5pbnRlcmFjdGlvbkRPTUVsZW1lbnQuc3R5bGVbJy1tcy10b3VjaC1hY3Rpb24nXSA9ICcnO1xuICAgIH1cblxuICAgIHdpbmRvdy5kb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdtb3VzZW1vdmUnLCB0aGlzLm9uTW91c2VNb3ZlLCB0cnVlKTtcbiAgICB0aGlzLmludGVyYWN0aW9uRE9NRWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdtb3VzZWRvd24nLCB0aGlzLm9uTW91c2VEb3duLCB0cnVlKTtcbiAgICB0aGlzLmludGVyYWN0aW9uRE9NRWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdtb3VzZW91dCcsICB0aGlzLm9uTW91c2VPdXQsIHRydWUpO1xuXG4gICAgdGhpcy5pbnRlcmFjdGlvbkRPTUVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigndG91Y2hzdGFydCcsIHRoaXMub25Ub3VjaFN0YXJ0LCB0cnVlKTtcbiAgICB0aGlzLmludGVyYWN0aW9uRE9NRWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCd0b3VjaGVuZCcsICB0aGlzLm9uVG91Y2hFbmQsIHRydWUpO1xuICAgIHRoaXMuaW50ZXJhY3Rpb25ET01FbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3RvdWNobW92ZScsIHRoaXMub25Ub3VjaE1vdmUsIHRydWUpO1xuXG4gICAgdGhpcy5pbnRlcmFjdGlvbkRPTUVsZW1lbnQgPSBudWxsO1xuXG4gICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21vdXNldXAnLCAgdGhpcy5vbk1vdXNlVXAsIHRydWUpO1xuXG4gICAgdGhpcy5ldmVudHNBZGRlZCA9IGZhbHNlO1xufTtcblxuLyoqXG4gKiBVcGRhdGVzIHRoZSBzdGF0ZSBvZiBpbnRlcmFjdGl2ZSBvYmplY3RzLlxuICogSW52b2tlZCBieSBhIHRocm90dGxlZCB0aWNrZXIgdXBkYXRlIGZyb21cbiAqIHtAbGluayBQSVhJLnRpY2tlci5zaGFyZWR9LlxuICpcbiAqIEBwYXJhbSBkZWx0YVRpbWUge251bWJlcn1cbiAqL1xuSW50ZXJhY3Rpb25NYW5hZ2VyLnByb3RvdHlwZS51cGRhdGUgPSBmdW5jdGlvbiAoZGVsdGFUaW1lKVxue1xuICAgIHRoaXMuX2RlbHRhVGltZSArPSBkZWx0YVRpbWU7XG5cbiAgICBpZiAodGhpcy5fZGVsdGFUaW1lIDwgdGhpcy5pbnRlcmFjdGlvbkZyZXF1ZW5jeSlcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLl9kZWx0YVRpbWUgPSAwO1xuXG4gICAgaWYgKCF0aGlzLmludGVyYWN0aW9uRE9NRWxlbWVudClcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBpZiB0aGUgdXNlciBtb3ZlIHRoZSBtb3VzZSB0aGlzIGNoZWNrIGhhcyBhbHJlYWR5IGJlZW4gZGZvbmUgdXNpbmcgdGhlIG1vdXNlIG1vdmUhXG4gICAgaWYodGhpcy5kaWRNb3ZlKVxuICAgIHtcbiAgICAgICAgdGhpcy5kaWRNb3ZlID0gZmFsc2U7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLmN1cnNvciA9ICdpbmhlcml0JztcblxuICAgIHRoaXMucHJvY2Vzc0ludGVyYWN0aXZlKHRoaXMubW91c2UuZ2xvYmFsLCB0aGlzLnJlbmRlcmVyLl9sYXN0T2JqZWN0UmVuZGVyZWQsIHRoaXMucHJvY2Vzc01vdXNlT3Zlck91dCwgdHJ1ZSApO1xuXG4gICAgaWYgKHRoaXMuY3VycmVudEN1cnNvclN0eWxlICE9PSB0aGlzLmN1cnNvcilcbiAgICB7XG4gICAgICAgIHRoaXMuY3VycmVudEN1cnNvclN0eWxlID0gdGhpcy5jdXJzb3I7XG4gICAgICAgIHRoaXMuaW50ZXJhY3Rpb25ET01FbGVtZW50LnN0eWxlLmN1cnNvciA9IHRoaXMuY3Vyc29yO1xuICAgIH1cblxuICAgIC8vVE9ET1xufTtcblxuLyoqXG4gKiBEaXNwYXRjaGVzIGFuIGV2ZW50IG9uIHRoZSBkaXNwbGF5IG9iamVjdCB0aGF0IHdhcyBpbnRlcmFjdGVkIHdpdGhcbiAqXG4gKiBAcGFyYW0gZGlzcGxheU9iamVjdCB7UElYSS5Db250YWluZXJ8UElYSS5TcHJpdGV8UElYSS5leHRyYXMuVGlsaW5nU3ByaXRlfSB0aGUgZGlzcGxheSBvYmplY3QgaW4gcXVlc3Rpb25cbiAqIEBwYXJhbSBldmVudFN0cmluZyB7c3RyaW5nfSB0aGUgbmFtZSBvZiB0aGUgZXZlbnQgKGUuZywgbW91c2Vkb3duKVxuICogQHBhcmFtIGV2ZW50RGF0YSB7b2JqZWN0fSB0aGUgZXZlbnQgZGF0YSBvYmplY3RcbiAqIEBwcml2YXRlXG4gKi9cbkludGVyYWN0aW9uTWFuYWdlci5wcm90b3R5cGUuZGlzcGF0Y2hFdmVudCA9IGZ1bmN0aW9uICggZGlzcGxheU9iamVjdCwgZXZlbnRTdHJpbmcsIGV2ZW50RGF0YSApXG57XG4gICAgaWYoIWV2ZW50RGF0YS5zdG9wcGVkKVxuICAgIHtcbiAgICAgICAgZXZlbnREYXRhLnRhcmdldCA9IGRpc3BsYXlPYmplY3Q7XG4gICAgICAgIGV2ZW50RGF0YS50eXBlID0gZXZlbnRTdHJpbmc7XG5cbiAgICAgICAgZGlzcGxheU9iamVjdC5lbWl0KCBldmVudFN0cmluZywgZXZlbnREYXRhICk7XG5cbiAgICAgICAgaWYoIGRpc3BsYXlPYmplY3RbZXZlbnRTdHJpbmddIClcbiAgICAgICAge1xuICAgICAgICAgICAgZGlzcGxheU9iamVjdFtldmVudFN0cmluZ10oIGV2ZW50RGF0YSApO1xuICAgICAgICB9XG4gICAgfVxufTtcblxuLyoqXG4gKiBNYXBzIHggYW5kIHkgY29vcmRzIGZyb20gYSBET00gb2JqZWN0IGFuZCBtYXBzIHRoZW0gY29ycmVjdGx5IHRvIHRoZSBwaXhpIHZpZXcuIFRoZSByZXN1bHRpbmcgdmFsdWUgaXMgc3RvcmVkIGluIHRoZSBwb2ludC5cbiAqIFRoaXMgdGFrZXMgaW50byBhY2NvdW50IHRoZSBmYWN0IHRoYXQgdGhlIERPTSBlbGVtZW50IGNvdWxkIGJlIHNjYWxlZCBhbmQgcG9zaXRpb25lZCBhbnl3aGVyZSBvbiB0aGUgc2NyZWVuLlxuICpcbiAqIEBwYXJhbSAge1BJWEkuUG9pbnR9IHBvaW50IHRoZSBwb2ludCB0aGF0IHRoZSByZXN1bHQgd2lsbCBiZSBzdG9yZWQgaW5cbiAqIEBwYXJhbSAge251bWJlcn0geCAgICAgdGhlIHggY29vcmQgb2YgdGhlIHBvc2l0aW9uIHRvIG1hcFxuICogQHBhcmFtICB7bnVtYmVyfSB5ICAgICB0aGUgeSBjb29yZCBvZiB0aGUgcG9zaXRpb24gdG8gbWFwXG4gKi9cbkludGVyYWN0aW9uTWFuYWdlci5wcm90b3R5cGUubWFwUG9zaXRpb25Ub1BvaW50ID0gZnVuY3Rpb24gKCBwb2ludCwgeCwgeSApXG57XG4gICAgdmFyIHJlY3QgPSB0aGlzLmludGVyYWN0aW9uRE9NRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICBwb2ludC54ID0gKCAoIHggLSByZWN0LmxlZnQgKSAqICh0aGlzLmludGVyYWN0aW9uRE9NRWxlbWVudC53aWR0aCAgLyByZWN0LndpZHRoICApICkgLyB0aGlzLnJlc29sdXRpb247XG4gICAgcG9pbnQueSA9ICggKCB5IC0gcmVjdC50b3AgICkgKiAodGhpcy5pbnRlcmFjdGlvbkRPTUVsZW1lbnQuaGVpZ2h0IC8gcmVjdC5oZWlnaHQgKSApIC8gdGhpcy5yZXNvbHV0aW9uO1xufTtcblxuLyoqXG4gKiBUaGlzIGZ1bmN0aW9uIGlzIHByb3ZpZGVzIGEgbmVhdCB3YXkgb2YgY3Jhd2xpbmcgdGhyb3VnaCB0aGUgc2NlbmUgZ3JhcGggYW5kIHJ1bm5pbmcgYSBzcGVjaWZpZWQgZnVuY3Rpb24gb24gYWxsIGludGVyYWN0aXZlIG9iamVjdHMgaXQgZmluZHMuXG4gKiBJdCB3aWxsIGFsc28gdGFrZSBjYXJlIG9mIGhpdCB0ZXN0aW5nIHRoZSBpbnRlcmFjdGl2ZSBvYmplY3RzIGFuZCBwYXNzZXMgdGhlIGhpdCBhY3Jvc3MgaW4gdGhlIGZ1bmN0aW9uLlxuICpcbiAqIEBwYXJhbSAge1BJWEkuUG9pbnR9IHBvaW50IHRoZSBwb2ludCB0aGF0IGlzIHRlc3RlZCBmb3IgY29sbGlzaW9uXG4gKiBAcGFyYW0gIHtQSVhJLkNvbnRhaW5lcnxQSVhJLlNwcml0ZXxQSVhJLmV4dHJhcy5UaWxpbmdTcHJpdGV9IGRpc3BsYXlPYmplY3QgdGhlIGRpc3BsYXlPYmplY3QgdGhhdCB3aWxsIGJlIGhpdCB0ZXN0IChyZWN1cmNzaXZseSBjcmF3bHMgaXRzIGNoaWxkcmVuKVxuICogQHBhcmFtICB7RnVuY3Rpb259IGZ1bmMgdGhlIGZ1bmN0aW9uIHRoYXQgd2lsbCBiZSBjYWxsZWQgb24gZWFjaCBpbnRlcmFjdGl2ZSBvYmplY3QuIFRoZSBkaXNwbGF5T2JqZWN0IGFuZCBoaXQgd2lsbCBiZSBwYXNzZWQgdG8gdGhlIGZ1bmN0aW9uXG4gKiBAcGFyYW0gIHtib29sZWFufSBoaXRUZXN0IHRoaXMgaW5kaWNhdGVzIGlmIHRoZSBvYmplY3RzIGluc2lkZSBzaG91bGQgYmUgaGl0IHRlc3QgYWdhaW5zdCB0aGUgcG9pbnRcbiAqIEByZXR1cm4ge2Jvb2xlYW59IHJldHVybnMgdHJ1ZSBpZiB0aGUgZGlzcGxheU9iamVjdCBoaXQgdGhlIHBvaW50XG4gKi9cbkludGVyYWN0aW9uTWFuYWdlci5wcm90b3R5cGUucHJvY2Vzc0ludGVyYWN0aXZlID0gZnVuY3Rpb24gKHBvaW50LCBkaXNwbGF5T2JqZWN0LCBmdW5jLCBoaXRUZXN0LCBpbnRlcmFjdGl2ZSlcbntcbiAgICBpZighZGlzcGxheU9iamVjdCB8fCAhZGlzcGxheU9iamVjdC52aXNpYmxlKVxuICAgIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIC8vIFRvb2sgYSBsaXR0bGUgd2hpbGUgdG8gcmV3b3JrIHRoaXMgZnVuY3Rpb24gY29ycmVjdGx5ISBCdXQgbm93IGl0IGlzIGRvbmUgYW5kIG5pY2UgYW5kIG9wdGltaXNlZC4gXl9eXG4gICAgLy8gXG4gICAgLy8gVGhpcyBmdW5jdGlvbiB3aWxsIG5vdyBsb29wIHRocm91Z2ggYWxsIG9iamVjdHMgYW5kIHRoZW4gb25seSBoaXQgdGVzdCB0aGUgb2JqZWN0cyBpdCBIQVMgdG8sIG5vdCBhbGwgb2YgdGhlbS4gTVVDSCBmYXN0ZXIuLlxuICAgIC8vIEFuIG9iamVjdCB3aWxsIGJlIGhpdCB0ZXN0IGlmIHRoZSBmb2xsb3dpbmcgaXMgdHJ1ZTpcbiAgICAvLyBcbiAgICAvLyAxOiBJdCBpcyBpbnRlcmFjdGl2ZS5cbiAgICAvLyAyOiBJdCBiZWxvbmdzIHRvIGEgcGFyZW50IHRoYXQgaXMgaW50ZXJhY3RpdmUgQU5EIG9uZSBvZiB0aGUgcGFyZW50cyBjaGlsZHJlbiBoYXZlIG5vdCBhbHJlYWR5IGJlZW4gaGl0LlxuICAgIC8vIFxuICAgIC8vIEFzIGFub3RoZXIgbGl0dGxlIG9wdGltaXNhdGlvbiBvbmNlIGFuIGludGVyYWN0aXZlIG9iamVjdCBoYXMgYmVlbiBoaXQgd2UgY2FuIGNhcnJ5IG9uIHRocm91Z2ggdGhlIHNjZW5lZ3JhcGgsIGJ1dCB3ZSBrbm93IHRoYXQgdGhlcmUgd2lsbCBiZSBubyBtb3JlIGhpdHMhIFNvIHdlIGNhbiBhdm9pZCBleHRyYSBoaXQgdGVzdHNcbiAgICAvLyBBIGZpbmFsIG9wdGltaXNhdGlvbiBpcyB0aGF0IGFuIG9iamVjdCBpcyBub3QgaGl0IHRlc3QgZGlyZWN0bHkgaWYgYSBjaGlsZCBoYXMgYWxyZWFkeSBiZWVuIGhpdC5cbiAgICBcbiAgICB2YXIgaGl0ID0gZmFsc2UsXG4gICAgICAgIGludGVyYWN0aXZlUGFyZW50ID0gaW50ZXJhY3RpdmUgPSBkaXNwbGF5T2JqZWN0LmludGVyYWN0aXZlIHx8IGludGVyYWN0aXZlO1xuXG4gICAgLy8gaWYgdGhlIGRpc3BsYXlvYmplY3QgaGFzIGEgaGl0QXJlYSwgdGhlbiBpdCBkb2VzIG5vdCBuZWVkIHRvIGhpdFRlc3QgY2hpbGRyZW4uXG4gICAgaWYoZGlzcGxheU9iamVjdC5oaXRBcmVhKVxuICAgIHtcbiAgICAgICAgaW50ZXJhY3RpdmVQYXJlbnQgPSBmYWxzZTtcbiAgICB9XG5cbiAgICAvLyAqKiBGUkVFIFRJUCAqKiEgSWYgYW4gb2JqZWN0IGlzIG5vdCBpbnRlcmFjdHRpdmUgb3IgaGFzIG5vIGJ1dHRvbnMgaW4gaXQgKHN1Y2ggYXMgYSBnYW1lIHNjZW5lISkgc2V0IGludGVyYWN0aXZlQ2hpbGRyZW4gdG8gZmFsc2UgZm9yIHRoYXQgZGlzcGxheU9iamVjdC5cbiAgICAvLyBUaGlzIHdpbGwgYWxsb3cgcGl4aSB0byBjb21wbGV0bHkgaWdub3JlIGFuZCBieXBhc3MgY2hlY2tpbmcgdGhlIGRpc3BsYXlPYmplY3RzIGNoaWxkcmVuLlxuICAgIGlmKGRpc3BsYXlPYmplY3QuaW50ZXJhY3RpdmVDaGlsZHJlbilcbiAgICB7ICAgICAgIFxuICAgICAgICB2YXIgY2hpbGRyZW4gPSBkaXNwbGF5T2JqZWN0LmNoaWxkcmVuO1xuICAgICAgICBcbiAgICAgICAgZm9yICh2YXIgaSA9IGNoaWxkcmVuLmxlbmd0aC0xOyBpID49IDA7IGktLSlcbiAgICAgICAge1xuICAgICAgICAgICAgLy8gdGltZSB0byBnZXQgcmVjdXJzaXZlLi4gaWYgdGhpcyBmdW5jdGlvbiB3aWxsIHJldHVybiBpZiBzb210aGluZyBpcyBoaXQuLlxuICAgICAgICAgICAgaWYoIHRoaXMucHJvY2Vzc0ludGVyYWN0aXZlKHBvaW50LCBjaGlsZHJlbltpXSwgZnVuYywgaGl0VGVzdCwgaW50ZXJhY3RpdmVQYXJlbnQpIClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBoaXQgPSB0cnVlO1xuXG4gICAgICAgICAgICAgICAgLy8gd2Ugbm8gbG9uZ2VyIG5lZWQgdG8gaGl0IHRlc3QgYW55IG1vcmUgb2JqZWN0cyBpbiB0aGlzIGNvbnRhaW5lciBhcyB3ZSB3ZSBub3cga25vdyB0aGUgcGFyZW50IGhhcyBiZWVuIGhpdFxuICAgICAgICAgICAgICAgIGludGVyYWN0aXZlUGFyZW50ID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgLy8gSWYgdGhlIGNoaWxkIGlzIGludGVyYWN0aXZlICwgdGhhdCBtZWFucyB0aGF0IHRoZSBvYmplY3QgaGl0IHdhcyBhY3R1YWxseSBpbnRlcmFjdGl2ZSBhbmQgbm90IGp1c3QgdGhlIGNoaWxkIG9mIGFuIGludGVyYWN0aXZlIG9iamVjdC4gXG4gICAgICAgICAgICAgICAgLy8gVGhpcyBtZWFucyB3ZSBubyBsb25nZXIgbmVlZCB0byBoaXQgdGVzdCBhbnl0aGluZyBlbHNlLiBXZSBzdGlsbCBuZWVkIHRvIHJ1biB0aHJvdWdoIGFsbCBvYmplY3RzLCBidXQgd2UgZG9uJ3QgbmVlZCB0byBwZXJmb3JtIGFueSBoaXQgdGVzdHMuXG4gICAgICAgICAgICAgICAgaWYoY2hpbGRyZW5baV0uaW50ZXJhY3RpdmUpXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBoaXRUZXN0ID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gbm8gcG9pbnQgcnVubmluZyB0aGlzIGlmIHRoZSBpdGVtIGlzIG5vdCBpbnRlcmFjdGl2ZSBvciBkb2VzIG5vdCBoYXZlIGFuIGludGVyYWN0aXZlIHBhcmVudC5cbiAgICBpZihpbnRlcmFjdGl2ZSlcbiAgICB7XG4gICAgICAgIC8vIGlmIHdlIGFyZSBoaXQgdGVzdGluZyAoYXMgaW4gd2UgaGF2ZSBubyBoaXQgYW55IG9iamVjdHMgeWV0KVxuICAgICAgICAvLyBXZSBhbHNvIGRvbid0IG5lZWQgdG8gd29ycnkgYWJvdXQgaGl0IHRlc3RpbmcgaWYgb25jZSBvZiB0aGUgZGlzcGxheU9iamVjdHMgY2hpbGRyZW4gaGFzIGFscmVhZHkgYmVlbiBoaXQhXG4gICAgICAgIGlmKGhpdFRlc3QgJiYgIWhpdClcbiAgICAgICAgeyAgXG4gICAgICAgICAgICBpZihkaXNwbGF5T2JqZWN0LmhpdEFyZWEpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgZGlzcGxheU9iamVjdC53b3JsZFRyYW5zZm9ybS5hcHBseUludmVyc2UocG9pbnQsICB0aGlzLl90ZW1wUG9pbnQpO1xuICAgICAgICAgICAgICAgIGhpdCA9IGRpc3BsYXlPYmplY3QuaGl0QXJlYS5jb250YWlucyggdGhpcy5fdGVtcFBvaW50LngsIHRoaXMuX3RlbXBQb2ludC55ICk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmKGRpc3BsYXlPYmplY3QuY29udGFpbnNQb2ludClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBoaXQgPSBkaXNwbGF5T2JqZWN0LmNvbnRhaW5zUG9pbnQocG9pbnQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYoZGlzcGxheU9iamVjdC5pbnRlcmFjdGl2ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgZnVuYyhkaXNwbGF5T2JqZWN0LCBoaXQpOyBcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBoaXQ7XG4gIFxufTtcblxuXG4vKipcbiAqIElzIGNhbGxlZCB3aGVuIHRoZSBtb3VzZSBidXR0b24gaXMgcHJlc3NlZCBkb3duIG9uIHRoZSByZW5kZXJlciBlbGVtZW50XG4gKlxuICogQHBhcmFtIGV2ZW50IHtFdmVudH0gVGhlIERPTSBldmVudCBvZiBhIG1vdXNlIGJ1dHRvbiBiZWluZyBwcmVzc2VkIGRvd25cbiAqIEBwcml2YXRlXG4gKi9cbkludGVyYWN0aW9uTWFuYWdlci5wcm90b3R5cGUub25Nb3VzZURvd24gPSBmdW5jdGlvbiAoZXZlbnQpXG57XG4gICAgdGhpcy5tb3VzZS5vcmlnaW5hbEV2ZW50ID0gZXZlbnQ7XG4gICAgdGhpcy5ldmVudERhdGEuZGF0YSA9IHRoaXMubW91c2U7XG4gICAgdGhpcy5ldmVudERhdGEuc3RvcHBlZCA9IGZhbHNlO1xuXG4gICAgLy8gVXBkYXRlIGludGVybmFsIG1vdXNlIHJlZmVyZW5jZVxuICAgIHRoaXMubWFwUG9zaXRpb25Ub1BvaW50KCB0aGlzLm1vdXNlLmdsb2JhbCwgZXZlbnQuY2xpZW50WCwgZXZlbnQuY2xpZW50WSk7XG5cbiAgICBpZiAodGhpcy5hdXRvUHJldmVudERlZmF1bHQpXG4gICAge1xuICAgICAgICB0aGlzLm1vdXNlLm9yaWdpbmFsRXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICB9XG5cbiAgICB0aGlzLnByb2Nlc3NJbnRlcmFjdGl2ZSh0aGlzLm1vdXNlLmdsb2JhbCwgdGhpcy5yZW5kZXJlci5fbGFzdE9iamVjdFJlbmRlcmVkLCB0aGlzLnByb2Nlc3NNb3VzZURvd24sIHRydWUgKTtcbn07XG5cbi8qKlxuICogUHJvY2Vzc2VzIHRoZSByZXN1bHQgb2YgdGhlIG1vdXNlIGRvd24gY2hlY2sgYW5kIGRpc3BhdGNoZXMgdGhlIGV2ZW50IGlmIG5lZWQgYmVcbiAqXG4gKiBAcGFyYW0gZGlzcGxheU9iamVjdCB7UElYSS5Db250YWluZXJ8UElYSS5TcHJpdGV8UElYSS5leHRyYXMuVGlsaW5nU3ByaXRlfSBUaGUgZGlzcGxheSBvYmplY3QgdGhhdCB3YXMgdGVzdGVkXG4gKiBAcGFyYW0gaGl0IHtib29sZWFufSB0aGUgcmVzdWx0IG9mIHRoZSBoaXQgdGVzdCBvbiB0aGUgZGlzcGF5IG9iamVjdFxuICogQHByaXZhdGVcbiAqL1xuSW50ZXJhY3Rpb25NYW5hZ2VyLnByb3RvdHlwZS5wcm9jZXNzTW91c2VEb3duID0gZnVuY3Rpb24gKCBkaXNwbGF5T2JqZWN0LCBoaXQgKVxue1xuICAgIHZhciBlID0gdGhpcy5tb3VzZS5vcmlnaW5hbEV2ZW50O1xuICAgIFxuICAgIHZhciBpc1JpZ2h0QnV0dG9uID0gZS5idXR0b24gPT09IDIgfHwgZS53aGljaCA9PT0gMztcblxuICAgIGlmKGhpdClcbiAgICB7XG4gICAgICAgIGRpc3BsYXlPYmplY3RbIGlzUmlnaHRCdXR0b24gPyAnX2lzUmlnaHREb3duJyA6ICdfaXNMZWZ0RG93bicgXSA9IHRydWU7XG4gICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudCggZGlzcGxheU9iamVjdCwgaXNSaWdodEJ1dHRvbiA/ICdyaWdodGRvd24nIDogJ21vdXNlZG93bicsIHRoaXMuZXZlbnREYXRhICk7XG4gICAgfVxufTtcblxuXG5cbi8qKlxuICogSXMgY2FsbGVkIHdoZW4gdGhlIG1vdXNlIGJ1dHRvbiBpcyByZWxlYXNlZCBvbiB0aGUgcmVuZGVyZXIgZWxlbWVudFxuICpcbiAqIEBwYXJhbSBldmVudCB7RXZlbnR9IFRoZSBET00gZXZlbnQgb2YgYSBtb3VzZSBidXR0b24gYmVpbmcgcmVsZWFzZWRcbiAqIEBwcml2YXRlXG4gKi9cbkludGVyYWN0aW9uTWFuYWdlci5wcm90b3R5cGUub25Nb3VzZVVwID0gZnVuY3Rpb24gKGV2ZW50KVxue1xuICAgIHRoaXMubW91c2Uub3JpZ2luYWxFdmVudCA9IGV2ZW50O1xuICAgIHRoaXMuZXZlbnREYXRhLmRhdGEgPSB0aGlzLm1vdXNlO1xuICAgIHRoaXMuZXZlbnREYXRhLnN0b3BwZWQgPSBmYWxzZTtcblxuICAgIC8vIFVwZGF0ZSBpbnRlcm5hbCBtb3VzZSByZWZlcmVuY2VcbiAgICB0aGlzLm1hcFBvc2l0aW9uVG9Qb2ludCggdGhpcy5tb3VzZS5nbG9iYWwsIGV2ZW50LmNsaWVudFgsIGV2ZW50LmNsaWVudFkpO1xuXG4gICAgdGhpcy5wcm9jZXNzSW50ZXJhY3RpdmUodGhpcy5tb3VzZS5nbG9iYWwsIHRoaXMucmVuZGVyZXIuX2xhc3RPYmplY3RSZW5kZXJlZCwgdGhpcy5wcm9jZXNzTW91c2VVcCwgdHJ1ZSApO1xufTtcblxuLyoqXG4gKiBQcm9jZXNzZXMgdGhlIHJlc3VsdCBvZiB0aGUgbW91c2UgdXAgY2hlY2sgYW5kIGRpc3BhdGNoZXMgdGhlIGV2ZW50IGlmIG5lZWQgYmVcbiAqXG4gKiBAcGFyYW0gZGlzcGxheU9iamVjdCB7UElYSS5Db250YWluZXJ8UElYSS5TcHJpdGV8UElYSS5leHRyYXMuVGlsaW5nU3ByaXRlfSBUaGUgZGlzcGxheSBvYmplY3QgdGhhdCB3YXMgdGVzdGVkXG4gKiBAcGFyYW0gaGl0IHtib29sZWFufSB0aGUgcmVzdWx0IG9mIHRoZSBoaXQgdGVzdCBvbiB0aGUgZGlzcGxheSBvYmplY3RcbiAqIEBwcml2YXRlXG4gKi9cbkludGVyYWN0aW9uTWFuYWdlci5wcm90b3R5cGUucHJvY2Vzc01vdXNlVXAgPSBmdW5jdGlvbiAoIGRpc3BsYXlPYmplY3QsIGhpdCApXG57XG4gICAgdmFyIGUgPSB0aGlzLm1vdXNlLm9yaWdpbmFsRXZlbnQ7XG5cbiAgICB2YXIgaXNSaWdodEJ1dHRvbiA9IGUuYnV0dG9uID09PSAyIHx8IGUud2hpY2ggPT09IDM7XG4gICAgdmFyIGlzRG93biA9ICBpc1JpZ2h0QnV0dG9uID8gJ19pc1JpZ2h0RG93bicgOiAnX2lzTGVmdERvd24nO1xuXG4gICAgaWYoaGl0KVxuICAgIHtcbiAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50KCBkaXNwbGF5T2JqZWN0LCBpc1JpZ2h0QnV0dG9uID8gJ3JpZ2h0dXAnIDogJ21vdXNldXAnLCB0aGlzLmV2ZW50RGF0YSApO1xuXG4gICAgICAgIGlmKCBkaXNwbGF5T2JqZWN0WyBpc0Rvd24gXSApXG4gICAgICAgIHtcbiAgICAgICAgICAgIGRpc3BsYXlPYmplY3RbIGlzRG93biBdID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLmRpc3BhdGNoRXZlbnQoIGRpc3BsYXlPYmplY3QsIGlzUmlnaHRCdXR0b24gPyAncmlnaHRjbGljaycgOiAnY2xpY2snLCB0aGlzLmV2ZW50RGF0YSApO1xuICAgICAgICB9XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIGlmKCBkaXNwbGF5T2JqZWN0WyBpc0Rvd24gXSApXG4gICAgICAgIHtcbiAgICAgICAgICAgIGRpc3BsYXlPYmplY3RbIGlzRG93biBdID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLmRpc3BhdGNoRXZlbnQoIGRpc3BsYXlPYmplY3QsIGlzUmlnaHRCdXR0b24gPyAncmlnaHR1cG91dHNpZGUnIDogJ21vdXNldXBvdXRzaWRlJywgdGhpcy5ldmVudERhdGEgKTtcbiAgICAgICAgfVxuICAgIH1cbn07XG5cblxuLyoqXG4gKiBJcyBjYWxsZWQgd2hlbiB0aGUgbW91c2UgbW92ZXMgYWNyb3NzIHRoZSByZW5kZXJlciBlbGVtZW50XG4gKlxuICogQHBhcmFtIGV2ZW50IHtFdmVudH0gVGhlIERPTSBldmVudCBvZiB0aGUgbW91c2UgbW92aW5nXG4gKiBAcHJpdmF0ZVxuICovXG5JbnRlcmFjdGlvbk1hbmFnZXIucHJvdG90eXBlLm9uTW91c2VNb3ZlID0gZnVuY3Rpb24gKGV2ZW50KVxue1xuICAgIHRoaXMubW91c2Uub3JpZ2luYWxFdmVudCA9IGV2ZW50O1xuICAgIHRoaXMuZXZlbnREYXRhLmRhdGEgPSB0aGlzLm1vdXNlO1xuICAgIHRoaXMuZXZlbnREYXRhLnN0b3BwZWQgPSBmYWxzZTtcblxuICAgIHRoaXMubWFwUG9zaXRpb25Ub1BvaW50KCB0aGlzLm1vdXNlLmdsb2JhbCwgZXZlbnQuY2xpZW50WCwgZXZlbnQuY2xpZW50WSk7XG5cbiAgICB0aGlzLmRpZE1vdmUgPSB0cnVlO1xuXG4gICAgdGhpcy5jdXJzb3IgPSAnaW5oZXJpdCc7XG5cbiAgICB0aGlzLnByb2Nlc3NJbnRlcmFjdGl2ZSh0aGlzLm1vdXNlLmdsb2JhbCwgdGhpcy5yZW5kZXJlci5fbGFzdE9iamVjdFJlbmRlcmVkLCB0aGlzLnByb2Nlc3NNb3VzZU1vdmUsIHRydWUgKTtcblxuICAgIGlmICh0aGlzLmN1cnJlbnRDdXJzb3JTdHlsZSAhPT0gdGhpcy5jdXJzb3IpXG4gICAge1xuICAgICAgICB0aGlzLmN1cnJlbnRDdXJzb3JTdHlsZSA9IHRoaXMuY3Vyc29yO1xuICAgICAgICB0aGlzLmludGVyYWN0aW9uRE9NRWxlbWVudC5zdHlsZS5jdXJzb3IgPSB0aGlzLmN1cnNvcjtcbiAgICB9XG5cbiAgICAvL1RPRE8gQlVHIGZvciBwYXJlbnRzIGluZXJhY3RpdmUgb2JqZWN0IChib3JkZXIgb3JkZXIgaXNzdWUpXG59O1xuXG4vKipcbiAqIFByb2Nlc3NlcyB0aGUgcmVzdWx0IG9mIHRoZSBtb3VzZSBtb3ZlIGNoZWNrIGFuZCBkaXNwYXRjaGVzIHRoZSBldmVudCBpZiBuZWVkIGJlXG4gKlxuICogQHBhcmFtIGRpc3BsYXlPYmplY3Qge1BJWEkuQ29udGFpbmVyfFBJWEkuU3ByaXRlfFBJWEkuZXh0cmFzLlRpbGluZ1Nwcml0ZX0gVGhlIGRpc3BsYXkgb2JqZWN0IHRoYXQgd2FzIHRlc3RlZFxuICogQHBhcmFtIGhpdCB7Ym9vbGVhbn0gdGhlIHJlc3VsdCBvZiB0aGUgaGl0IHRlc3Qgb24gdGhlIGRpc3BsYXkgb2JqZWN0XG4gKiBAcHJpdmF0ZVxuICovXG5JbnRlcmFjdGlvbk1hbmFnZXIucHJvdG90eXBlLnByb2Nlc3NNb3VzZU1vdmUgPSBmdW5jdGlvbiAoIGRpc3BsYXlPYmplY3QsIGhpdCApXG57XG4gICAgdGhpcy5kaXNwYXRjaEV2ZW50KCBkaXNwbGF5T2JqZWN0LCAnbW91c2Vtb3ZlJywgdGhpcy5ldmVudERhdGEpO1xuICAgIHRoaXMucHJvY2Vzc01vdXNlT3Zlck91dChkaXNwbGF5T2JqZWN0LCBoaXQpO1xufTtcblxuXG4vKipcbiAqIElzIGNhbGxlZCB3aGVuIHRoZSBtb3VzZSBpcyBtb3ZlZCBvdXQgb2YgdGhlIHJlbmRlcmVyIGVsZW1lbnRcbiAqXG4gKiBAcGFyYW0gZXZlbnQge0V2ZW50fSBUaGUgRE9NIGV2ZW50IG9mIGEgbW91c2UgYmVpbmcgbW92ZWQgb3V0XG4gKiBAcHJpdmF0ZVxuICovXG5JbnRlcmFjdGlvbk1hbmFnZXIucHJvdG90eXBlLm9uTW91c2VPdXQgPSBmdW5jdGlvbiAoZXZlbnQpXG57XG4gICAgdGhpcy5tb3VzZS5vcmlnaW5hbEV2ZW50ID0gZXZlbnQ7XG4gICAgdGhpcy5ldmVudERhdGEuc3RvcHBlZCA9IGZhbHNlO1xuXG4gICAgLy8gVXBkYXRlIGludGVybmFsIG1vdXNlIHJlZmVyZW5jZVxuICAgIHRoaXMubWFwUG9zaXRpb25Ub1BvaW50KCB0aGlzLm1vdXNlLmdsb2JhbCwgZXZlbnQuY2xpZW50WCwgZXZlbnQuY2xpZW50WSk7XG5cbiAgICB0aGlzLmludGVyYWN0aW9uRE9NRWxlbWVudC5zdHlsZS5jdXJzb3IgPSAnaW5oZXJpdCc7XG5cbiAgICAvLyBUT0RPIG9wdGltaXplIGJ5IG5vdCBjaGVjayBFVkVSWSBUSU1FISBtYXliZSBoYWxmIGFzIG9mdGVuPyAvL1xuICAgIHRoaXMubWFwUG9zaXRpb25Ub1BvaW50KCB0aGlzLm1vdXNlLmdsb2JhbCwgZXZlbnQuY2xpZW50WCwgZXZlbnQuY2xpZW50WSApO1xuXG4gICAgdGhpcy5wcm9jZXNzSW50ZXJhY3RpdmUoIHRoaXMubW91c2UuZ2xvYmFsLCB0aGlzLnJlbmRlcmVyLl9sYXN0T2JqZWN0UmVuZGVyZWQsIHRoaXMucHJvY2Vzc01vdXNlT3Zlck91dCwgZmFsc2UgKTtcbn07XG5cbi8qKlxuICogUHJvY2Vzc2VzIHRoZSByZXN1bHQgb2YgdGhlIG1vdXNlIG92ZXIvb3V0IGNoZWNrIGFuZCBkaXNwYXRjaGVzIHRoZSBldmVudCBpZiBuZWVkIGJlXG4gKlxuICogQHBhcmFtIGRpc3BsYXlPYmplY3Qge1BJWEkuQ29udGFpbmVyfFBJWEkuU3ByaXRlfFBJWEkuZXh0cmFzLlRpbGluZ1Nwcml0ZX0gVGhlIGRpc3BsYXkgb2JqZWN0IHRoYXQgd2FzIHRlc3RlZFxuICogQHBhcmFtIGhpdCB7Ym9vbGVhbn0gdGhlIHJlc3VsdCBvZiB0aGUgaGl0IHRlc3Qgb24gdGhlIGRpc3BsYXkgb2JqZWN0XG4gKiBAcHJpdmF0ZVxuICovXG5JbnRlcmFjdGlvbk1hbmFnZXIucHJvdG90eXBlLnByb2Nlc3NNb3VzZU92ZXJPdXQgPSBmdW5jdGlvbiAoIGRpc3BsYXlPYmplY3QsIGhpdCApXG57XG4gICAgaWYoaGl0KVxuICAgIHtcbiAgICAgICAgaWYoIWRpc3BsYXlPYmplY3QuX292ZXIpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGRpc3BsYXlPYmplY3QuX292ZXIgPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50KCBkaXNwbGF5T2JqZWN0LCAnbW91c2VvdmVyJywgdGhpcy5ldmVudERhdGEgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChkaXNwbGF5T2JqZWN0LmJ1dHRvbk1vZGUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuY3Vyc29yID0gZGlzcGxheU9iamVjdC5kZWZhdWx0Q3Vyc29yO1xuICAgICAgICB9XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIGlmKGRpc3BsYXlPYmplY3QuX292ZXIpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGRpc3BsYXlPYmplY3QuX292ZXIgPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudCggZGlzcGxheU9iamVjdCwgJ21vdXNlb3V0JywgdGhpcy5ldmVudERhdGEpO1xuICAgICAgICB9XG4gICAgfVxufTtcblxuXG4vKipcbiAqIElzIGNhbGxlZCB3aGVuIGEgdG91Y2ggaXMgc3RhcnRlZCBvbiB0aGUgcmVuZGVyZXIgZWxlbWVudFxuICpcbiAqIEBwYXJhbSBldmVudCB7RXZlbnR9IFRoZSBET00gZXZlbnQgb2YgYSB0b3VjaCBzdGFydGluZyBvbiB0aGUgcmVuZGVyZXIgdmlld1xuICogQHByaXZhdGVcbiAqL1xuSW50ZXJhY3Rpb25NYW5hZ2VyLnByb3RvdHlwZS5vblRvdWNoU3RhcnQgPSBmdW5jdGlvbiAoZXZlbnQpXG57XG4gICAgaWYgKHRoaXMuYXV0b1ByZXZlbnREZWZhdWx0KVxuICAgIHtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICB9XG5cbiAgICB2YXIgY2hhbmdlZFRvdWNoZXMgPSBldmVudC5jaGFuZ2VkVG91Y2hlcztcbiAgICB2YXIgY0xlbmd0aCA9IGNoYW5nZWRUb3VjaGVzLmxlbmd0aDtcblxuICAgIGZvciAodmFyIGk9MDsgaSA8IGNMZW5ndGg7IGkrKylcbiAgICB7XG4gICAgICAgIHZhciB0b3VjaEV2ZW50ID0gY2hhbmdlZFRvdWNoZXNbaV07XG4gICAgICAgIC8vVE9ETyBQT09MXG4gICAgICAgIHZhciB0b3VjaERhdGEgPSB0aGlzLmdldFRvdWNoRGF0YSggdG91Y2hFdmVudCApO1xuXG4gICAgICAgIHRvdWNoRGF0YS5vcmlnaW5hbEV2ZW50ID0gZXZlbnQ7XG5cbiAgICAgICAgdGhpcy5ldmVudERhdGEuZGF0YSA9IHRvdWNoRGF0YTtcbiAgICAgICAgdGhpcy5ldmVudERhdGEuc3RvcHBlZCA9IGZhbHNlO1xuXG4gICAgICAgIHRoaXMucHJvY2Vzc0ludGVyYWN0aXZlKCB0b3VjaERhdGEuZ2xvYmFsLCB0aGlzLnJlbmRlcmVyLl9sYXN0T2JqZWN0UmVuZGVyZWQsIHRoaXMucHJvY2Vzc1RvdWNoU3RhcnQsIHRydWUgKTtcblxuICAgICAgICB0aGlzLnJldHVyblRvdWNoRGF0YSggdG91Y2hEYXRhICk7XG4gICAgfVxufTtcblxuLyoqXG4gKiBQcm9jZXNzZXMgdGhlIHJlc3VsdCBvZiBhIHRvdWNoIGNoZWNrIGFuZCBkaXNwYXRjaGVzIHRoZSBldmVudCBpZiBuZWVkIGJlXG4gKlxuICogQHBhcmFtIGRpc3BsYXlPYmplY3Qge1BJWEkuQ29udGFpbmVyfFBJWEkuU3ByaXRlfFBJWEkuZXh0cmFzLlRpbGluZ1Nwcml0ZX0gVGhlIGRpc3BsYXkgb2JqZWN0IHRoYXQgd2FzIHRlc3RlZFxuICogQHBhcmFtIGhpdCB7Ym9vbGVhbn0gdGhlIHJlc3VsdCBvZiB0aGUgaGl0IHRlc3Qgb24gdGhlIGRpc3BsYXkgb2JqZWN0XG4gKiBAcHJpdmF0ZVxuICovXG5JbnRlcmFjdGlvbk1hbmFnZXIucHJvdG90eXBlLnByb2Nlc3NUb3VjaFN0YXJ0ID0gZnVuY3Rpb24gKCBkaXNwbGF5T2JqZWN0LCBoaXQgKVxue1xuICAgIGlmKGhpdClcbiAgICB7XG4gICAgICAgIGRpc3BsYXlPYmplY3QuX3RvdWNoRG93biA9IHRydWU7XG4gICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudCggZGlzcGxheU9iamVjdCwgJ3RvdWNoc3RhcnQnLCB0aGlzLmV2ZW50RGF0YSApO1xuICAgIH1cbn07XG5cblxuLyoqXG4gKiBJcyBjYWxsZWQgd2hlbiBhIHRvdWNoIGVuZHMgb24gdGhlIHJlbmRlcmVyIGVsZW1lbnRcbiAqXG4gKiBAcGFyYW0gZXZlbnQge0V2ZW50fSBUaGUgRE9NIGV2ZW50IG9mIGEgdG91Y2ggZW5kaW5nIG9uIHRoZSByZW5kZXJlciB2aWV3XG4gKi9cbkludGVyYWN0aW9uTWFuYWdlci5wcm90b3R5cGUub25Ub3VjaEVuZCA9IGZ1bmN0aW9uIChldmVudClcbntcbiAgICBpZiAodGhpcy5hdXRvUHJldmVudERlZmF1bHQpXG4gICAge1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIH1cblxuICAgIHZhciBjaGFuZ2VkVG91Y2hlcyA9IGV2ZW50LmNoYW5nZWRUb3VjaGVzO1xuICAgIHZhciBjTGVuZ3RoID0gY2hhbmdlZFRvdWNoZXMubGVuZ3RoO1xuXG4gICAgZm9yICh2YXIgaT0wOyBpIDwgY0xlbmd0aDsgaSsrKVxuICAgIHtcbiAgICAgICAgdmFyIHRvdWNoRXZlbnQgPSBjaGFuZ2VkVG91Y2hlc1tpXTtcblxuICAgICAgICB2YXIgdG91Y2hEYXRhID0gdGhpcy5nZXRUb3VjaERhdGEoIHRvdWNoRXZlbnQgKTtcblxuICAgICAgICB0b3VjaERhdGEub3JpZ2luYWxFdmVudCA9IGV2ZW50O1xuXG4gICAgICAgIC8vVE9ETyB0aGlzIHNob3VsZCBiZSBwYXNzZWQgYWxvbmcuLiBubyBzZXRcbiAgICAgICAgdGhpcy5ldmVudERhdGEuZGF0YSA9IHRvdWNoRGF0YTtcbiAgICAgICAgdGhpcy5ldmVudERhdGEuc3RvcHBlZCA9IGZhbHNlO1xuXG5cbiAgICAgICAgdGhpcy5wcm9jZXNzSW50ZXJhY3RpdmUoIHRvdWNoRGF0YS5nbG9iYWwsIHRoaXMucmVuZGVyZXIuX2xhc3RPYmplY3RSZW5kZXJlZCwgdGhpcy5wcm9jZXNzVG91Y2hFbmQsIHRydWUgKTtcblxuICAgICAgICB0aGlzLnJldHVyblRvdWNoRGF0YSggdG91Y2hEYXRhICk7XG4gICAgfVxufTtcblxuLyoqXG4gKiBQcm9jZXNzZXMgdGhlIHJlc3VsdCBvZiB0aGUgZW5kIG9mIGEgdG91Y2ggYW5kIGRpc3BhdGNoZXMgdGhlIGV2ZW50IGlmIG5lZWQgYmVcbiAqXG4gKiBAcGFyYW0gZGlzcGxheU9iamVjdCB7UElYSS5Db250YWluZXJ8UElYSS5TcHJpdGV8UElYSS5leHRyYXMuVGlsaW5nU3ByaXRlfSBUaGUgZGlzcGxheSBvYmplY3QgdGhhdCB3YXMgdGVzdGVkXG4gKiBAcGFyYW0gaGl0IHtib29sZWFufSB0aGUgcmVzdWx0IG9mIHRoZSBoaXQgdGVzdCBvbiB0aGUgZGlzcGxheSBvYmplY3RcbiAqIEBwcml2YXRlXG4gKi9cbkludGVyYWN0aW9uTWFuYWdlci5wcm90b3R5cGUucHJvY2Vzc1RvdWNoRW5kID0gZnVuY3Rpb24gKCBkaXNwbGF5T2JqZWN0LCBoaXQgKVxue1xuICAgIGlmKGhpdClcbiAgICB7XG4gICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudCggZGlzcGxheU9iamVjdCwgJ3RvdWNoZW5kJywgdGhpcy5ldmVudERhdGEgKTtcblxuICAgICAgICBpZiggZGlzcGxheU9iamVjdC5fdG91Y2hEb3duIClcbiAgICAgICAge1xuICAgICAgICAgICAgZGlzcGxheU9iamVjdC5fdG91Y2hEb3duID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLmRpc3BhdGNoRXZlbnQoIGRpc3BsYXlPYmplY3QsICd0YXAnLCB0aGlzLmV2ZW50RGF0YSApO1xuICAgICAgICB9XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIGlmKCBkaXNwbGF5T2JqZWN0Ll90b3VjaERvd24gKVxuICAgICAgICB7XG4gICAgICAgICAgICBkaXNwbGF5T2JqZWN0Ll90b3VjaERvd24gPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudCggZGlzcGxheU9iamVjdCwgJ3RvdWNoZW5kb3V0c2lkZScsIHRoaXMuZXZlbnREYXRhICk7XG4gICAgICAgIH1cbiAgICB9XG59O1xuXG4vKipcbiAqIElzIGNhbGxlZCB3aGVuIGEgdG91Y2ggaXMgbW92ZWQgYWNyb3NzIHRoZSByZW5kZXJlciBlbGVtZW50XG4gKlxuICogQHBhcmFtIGV2ZW50IHtFdmVudH0gVGhlIERPTSBldmVudCBvZiBhIHRvdWNoIG1vdmluZyBhY3Jvc3MgdGhlIHJlbmRlcmVyIHZpZXdcbiAqIEBwcml2YXRlXG4gKi9cbkludGVyYWN0aW9uTWFuYWdlci5wcm90b3R5cGUub25Ub3VjaE1vdmUgPSBmdW5jdGlvbiAoZXZlbnQpXG57XG4gICAgaWYgKHRoaXMuYXV0b1ByZXZlbnREZWZhdWx0KVxuICAgIHtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICB9XG5cbiAgICB2YXIgY2hhbmdlZFRvdWNoZXMgPSBldmVudC5jaGFuZ2VkVG91Y2hlcztcbiAgICB2YXIgY0xlbmd0aCA9IGNoYW5nZWRUb3VjaGVzLmxlbmd0aDtcblxuICAgIGZvciAodmFyIGk9MDsgaSA8IGNMZW5ndGg7IGkrKylcbiAgICB7XG4gICAgICAgIHZhciB0b3VjaEV2ZW50ID0gY2hhbmdlZFRvdWNoZXNbaV07XG5cbiAgICAgICAgdmFyIHRvdWNoRGF0YSA9IHRoaXMuZ2V0VG91Y2hEYXRhKCB0b3VjaEV2ZW50ICk7XG5cbiAgICAgICAgdG91Y2hEYXRhLm9yaWdpbmFsRXZlbnQgPSBldmVudDtcblxuICAgICAgICB0aGlzLmV2ZW50RGF0YS5kYXRhID0gdG91Y2hEYXRhO1xuICAgICAgICB0aGlzLmV2ZW50RGF0YS5zdG9wcGVkID0gZmFsc2U7XG5cbiAgICAgICAgdGhpcy5wcm9jZXNzSW50ZXJhY3RpdmUoIHRvdWNoRGF0YS5nbG9iYWwsIHRoaXMucmVuZGVyZXIuX2xhc3RPYmplY3RSZW5kZXJlZCwgdGhpcy5wcm9jZXNzVG91Y2hNb3ZlLCB0cnVlICk7XG5cbiAgICAgICAgdGhpcy5yZXR1cm5Ub3VjaERhdGEoIHRvdWNoRGF0YSApO1xuICAgIH1cbn07XG5cbi8qKlxuICogUHJvY2Vzc2VzIHRoZSByZXN1bHQgb2YgYSB0b3VjaCBtb3ZlIGNoZWNrIGFuZCBkaXNwYXRjaGVzIHRoZSBldmVudCBpZiBuZWVkIGJlXG4gKlxuICogQHBhcmFtIGRpc3BsYXlPYmplY3Qge1BJWEkuQ29udGFpbmVyfFBJWEkuU3ByaXRlfFBJWEkuZXh0cmFzLlRpbGluZ1Nwcml0ZX0gVGhlIGRpc3BsYXkgb2JqZWN0IHRoYXQgd2FzIHRlc3RlZFxuICogQHBhcmFtIGhpdCB7Ym9vbGVhbn0gdGhlIHJlc3VsdCBvZiB0aGUgaGl0IHRlc3Qgb24gdGhlIGRpc3BsYXkgb2JqZWN0XG4gKiBAcHJpdmF0ZVxuICovXG5JbnRlcmFjdGlvbk1hbmFnZXIucHJvdG90eXBlLnByb2Nlc3NUb3VjaE1vdmUgPSBmdW5jdGlvbiAoIGRpc3BsYXlPYmplY3QsIGhpdCApXG57XG4gICAgaGl0ID0gaGl0O1xuICAgIHRoaXMuZGlzcGF0Y2hFdmVudCggZGlzcGxheU9iamVjdCwgJ3RvdWNobW92ZScsIHRoaXMuZXZlbnREYXRhKTtcbn07XG5cbi8qKlxuICogR3JhYnMgYW4gaW50ZXJhY3Rpb24gZGF0YSBvYmplY3QgZnJvbSB0aGUgaW50ZXJuYWwgcG9vbFxuICpcbiAqIEBwYXJhbSB0b3VjaEV2ZW50IHtFdmVudERhdGF9IFRoZSB0b3VjaCBldmVudCB3ZSBuZWVkIHRvIHBhaXIgd2l0aCBhbiBpbnRlcmFjdGlvbkRhdGEgb2JqZWN0XG4gKlxuICogQHByaXZhdGVcbiAqL1xuSW50ZXJhY3Rpb25NYW5hZ2VyLnByb3RvdHlwZS5nZXRUb3VjaERhdGEgPSBmdW5jdGlvbiAodG91Y2hFdmVudClcbntcbiAgICB2YXIgdG91Y2hEYXRhID0gdGhpcy5pbnRlcmFjdGl2ZURhdGFQb29sLnBvcCgpO1xuXG4gICAgaWYoIXRvdWNoRGF0YSlcbiAgICB7XG4gICAgICAgIHRvdWNoRGF0YSA9IG5ldyBJbnRlcmFjdGlvbkRhdGEoKTtcbiAgICB9XG5cbiAgICB0b3VjaERhdGEuaWRlbnRpZmllciA9IHRvdWNoRXZlbnQuaWRlbnRpZmllcjtcbiAgICB0aGlzLm1hcFBvc2l0aW9uVG9Qb2ludCggdG91Y2hEYXRhLmdsb2JhbCwgdG91Y2hFdmVudC5jbGllbnRYLCB0b3VjaEV2ZW50LmNsaWVudFkgKTtcblxuICAgIGlmKG5hdmlnYXRvci5pc0NvY29vbkpTKVxuICAgIHtcbiAgICAgICAgdG91Y2hEYXRhLmdsb2JhbC54ID0gdG91Y2hEYXRhLmdsb2JhbC54IC8gdGhpcy5yZXNvbHV0aW9uO1xuICAgICAgICB0b3VjaERhdGEuZ2xvYmFsLnkgPSB0b3VjaERhdGEuZ2xvYmFsLnkgLyB0aGlzLnJlc29sdXRpb247XG4gICAgfVxuXG4gICAgdG91Y2hFdmVudC5nbG9iYWxYID0gdG91Y2hEYXRhLmdsb2JhbC54O1xuICAgIHRvdWNoRXZlbnQuZ2xvYmFsWSA9IHRvdWNoRGF0YS5nbG9iYWwueTtcblxuICAgIHJldHVybiB0b3VjaERhdGE7XG59O1xuXG4vKipcbiAqIFJldHVybnMgYW4gaW50ZXJhY3Rpb24gZGF0YSBvYmplY3QgdG8gdGhlIGludGVybmFsIHBvb2xcbiAqXG4gKiBAcGFyYW0gdG91Y2hEYXRhIHtQSVhJLmludGVyYWN0aW9uLkludGVyYWN0aW9uRGF0YX0gVGhlIHRvdWNoIGRhdGEgb2JqZWN0IHdlIHdhbnQgdG8gcmV0dXJuIHRvIHRoZSBwb29sXG4gKlxuICogQHByaXZhdGVcbiAqL1xuSW50ZXJhY3Rpb25NYW5hZ2VyLnByb3RvdHlwZS5yZXR1cm5Ub3VjaERhdGEgPSBmdW5jdGlvbiAoIHRvdWNoRGF0YSApXG57XG4gICAgdGhpcy5pbnRlcmFjdGl2ZURhdGFQb29sLnB1c2goIHRvdWNoRGF0YSApO1xufTtcblxuLyoqXG4gKiBEZXN0cm95cyB0aGUgaW50ZXJhY3Rpb24gbWFuYWdlclxuICpcbiAqL1xuSW50ZXJhY3Rpb25NYW5hZ2VyLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKCkge1xuICAgIHRoaXMucmVtb3ZlRXZlbnRzKCk7XG5cbiAgICB0aGlzLnJlbmRlcmVyID0gbnVsbDtcblxuICAgIHRoaXMubW91c2UgPSBudWxsO1xuXG4gICAgdGhpcy5ldmVudERhdGEgPSBudWxsO1xuXG4gICAgdGhpcy5pbnRlcmFjdGl2ZURhdGFQb29sID0gbnVsbDtcblxuICAgIHRoaXMuaW50ZXJhY3Rpb25ET01FbGVtZW50ID0gbnVsbDtcblxuICAgIHRoaXMub25Nb3VzZVVwID0gbnVsbDtcbiAgICB0aGlzLnByb2Nlc3NNb3VzZVVwID0gbnVsbDtcblxuXG4gICAgdGhpcy5vbk1vdXNlRG93biA9IG51bGw7XG4gICAgdGhpcy5wcm9jZXNzTW91c2VEb3duID0gbnVsbDtcblxuICAgIHRoaXMub25Nb3VzZU1vdmUgPSBudWxsO1xuICAgIHRoaXMucHJvY2Vzc01vdXNlTW92ZSA9IG51bGw7XG5cbiAgICB0aGlzLm9uTW91c2VPdXQgPSBudWxsO1xuICAgIHRoaXMucHJvY2Vzc01vdXNlT3Zlck91dCA9IG51bGw7XG5cblxuICAgIHRoaXMub25Ub3VjaFN0YXJ0ID0gbnVsbDtcbiAgICB0aGlzLnByb2Nlc3NUb3VjaFN0YXJ0ID0gbnVsbDtcblxuICAgIHRoaXMub25Ub3VjaEVuZCA9IG51bGw7XG4gICAgdGhpcy5wcm9jZXNzVG91Y2hFbmQgPSBudWxsO1xuXG4gICAgdGhpcy5vblRvdWNoTW92ZSA9IG51bGw7XG4gICAgdGhpcy5wcm9jZXNzVG91Y2hNb3ZlID0gbnVsbDtcblxuICAgIHRoaXMuX3RlbXBQb2ludCA9IG51bGw7XG59O1xuXG5jb3JlLldlYkdMUmVuZGVyZXIucmVnaXN0ZXJQbHVnaW4oJ2ludGVyYWN0aW9uJywgSW50ZXJhY3Rpb25NYW5hZ2VyKTtcbmNvcmUuQ2FudmFzUmVuZGVyZXIucmVnaXN0ZXJQbHVnaW4oJ2ludGVyYWN0aW9uJywgSW50ZXJhY3Rpb25NYW5hZ2VyKTtcbiIsIi8qKlxuICogQGZpbGUgICAgICAgIE1haW4gZXhwb3J0IG9mIHRoZSBQSVhJIGludGVyYWN0aW9ucyBsaWJyYXJ5XG4gKiBAYXV0aG9yICAgICAgTWF0IEdyb3ZlcyA8bWF0QGdvb2Rib3lkaWdpdGFsLmNvbT5cbiAqIEBjb3B5cmlnaHQgICAyMDEzLTIwMTUgR29vZEJveURpZ2l0YWxcbiAqIEBsaWNlbnNlICAgICB7QGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL3BpeGlqcy9waXhpLmpzL2Jsb2IvbWFzdGVyL0xJQ0VOU0V8TUlUIExpY2Vuc2V9XG4gKi9cblxuLyoqXG4gKiBAbmFtZXNwYWNlIFBJWEkuaW50ZXJhY3Rpb25cbiAqL1xubW9kdWxlLmV4cG9ydHMgPSB7XG4gICAgSW50ZXJhY3Rpb25EYXRhOiAgICByZXF1aXJlKCcuL0ludGVyYWN0aW9uRGF0YScpLFxuICAgIEludGVyYWN0aW9uTWFuYWdlcjogcmVxdWlyZSgnLi9JbnRlcmFjdGlvbk1hbmFnZXInKSxcbiAgICBpbnRlcmFjdGl2ZVRhcmdldDogIHJlcXVpcmUoJy4vaW50ZXJhY3RpdmVUYXJnZXQnKVxufTtcbiIsIi8qKlxuICogRGVmYXVsdCBwcm9wZXJ0eSB2YWx1ZXMgb2YgaW50ZXJhY3RpdmUgb2JqZWN0c1xuICogdXNlZCBieSB7QGxpbmsgUElYSS5pbnRlcmFjdGlvbi5JbnRlcmFjdGlvbk1hbmFnZXJ9LlxuICpcbiAqIEBtaXhpblxuICogQG1lbWJlcm9mIFBJWEkuaW50ZXJhY3Rpb25cbiAqIEBleGFtcGxlXG4gKiAgICAgIGZ1bmN0aW9uIE15T2JqZWN0KCkge31cbiAqXG4gKiAgICAgIE9iamVjdC5hc3NpZ24oXG4gKiAgICAgICAgICBNeU9iamVjdC5wcm90b3R5cGUsXG4gKiAgICAgICAgICBQSVhJLmludGVyYWN0aW9uLmludGVyYWN0aXZlVGFyZ2V0XG4gKiAgICAgICk7XG4gKi9cbnZhciBpbnRlcmFjdGl2ZVRhcmdldCA9IHtcbiAgICAvKipcbiAgICAgKiBAdG9kbyBOZWVkcyBkb2NzLlxuICAgICAqL1xuICAgIGludGVyYWN0aXZlOiBmYWxzZSxcbiAgICAvKipcbiAgICAgKiBAdG9kbyBOZWVkcyBkb2NzLlxuICAgICAqL1xuICAgIGJ1dHRvbk1vZGU6IGZhbHNlLFxuICAgIC8qKlxuICAgICAqIEB0b2RvIE5lZWRzIGRvY3MuXG4gICAgICovXG4gICAgaW50ZXJhY3RpdmVDaGlsZHJlbjogdHJ1ZSxcbiAgICAvKipcbiAgICAgKiBAdG9kbyBOZWVkcyBkb2NzLlxuICAgICAqL1xuICAgIGRlZmF1bHRDdXJzb3I6ICdwb2ludGVyJyxcblxuICAgIC8vIHNvbWUgaW50ZXJuYWwgY2hlY2tzLi5cblxuICAgIC8qKlxuICAgICAqIEB0b2RvIE5lZWRzIGRvY3MuXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICBfb3ZlcjogZmFsc2UsXG4gICAgLyoqXG4gICAgICogQHRvZG8gTmVlZHMgZG9jcy5cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIF90b3VjaERvd246IGZhbHNlXG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGludGVyYWN0aXZlVGFyZ2V0O1xuIiwidmFyIFJlc291cmNlID0gcmVxdWlyZSgncmVzb3VyY2UtbG9hZGVyJykuUmVzb3VyY2UsXG4gICAgY29yZSA9IHJlcXVpcmUoJy4uL2NvcmUnKSxcbiAgICBleHRyYXMgPSByZXF1aXJlKCcuLi9leHRyYXMnKSxcbiAgICBwYXRoID0gcmVxdWlyZSgncGF0aCcpO1xuXG5cbmZ1bmN0aW9uIHBhcnNlKHJlc291cmNlLCB0ZXh0dXJlKSB7XG4gICAgdmFyIGRhdGEgPSB7fTtcbiAgICB2YXIgaW5mbyA9IHJlc291cmNlLmRhdGEuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2luZm8nKVswXTtcbiAgICB2YXIgY29tbW9uID0gcmVzb3VyY2UuZGF0YS5nZXRFbGVtZW50c0J5VGFnTmFtZSgnY29tbW9uJylbMF07XG5cbiAgICBkYXRhLmZvbnQgPSBpbmZvLmdldEF0dHJpYnV0ZSgnZmFjZScpO1xuICAgIGRhdGEuc2l6ZSA9IHBhcnNlSW50KGluZm8uZ2V0QXR0cmlidXRlKCdzaXplJyksIDEwKTtcbiAgICBkYXRhLmxpbmVIZWlnaHQgPSBwYXJzZUludChjb21tb24uZ2V0QXR0cmlidXRlKCdsaW5lSGVpZ2h0JyksIDEwKTtcbiAgICBkYXRhLmNoYXJzID0ge307XG5cbiAgICAvL3BhcnNlIGxldHRlcnNcbiAgICB2YXIgbGV0dGVycyA9IHJlc291cmNlLmRhdGEuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2NoYXInKTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGV0dGVycy5sZW5ndGg7IGkrKylcbiAgICB7XG4gICAgICAgIHZhciBjaGFyQ29kZSA9IHBhcnNlSW50KGxldHRlcnNbaV0uZ2V0QXR0cmlidXRlKCdpZCcpLCAxMCk7XG5cbiAgICAgICAgdmFyIHRleHR1cmVSZWN0ID0gbmV3IGNvcmUuUmVjdGFuZ2xlKFxuICAgICAgICAgICAgcGFyc2VJbnQobGV0dGVyc1tpXS5nZXRBdHRyaWJ1dGUoJ3gnKSwgMTApICsgdGV4dHVyZS5mcmFtZS54LFxuICAgICAgICAgICAgcGFyc2VJbnQobGV0dGVyc1tpXS5nZXRBdHRyaWJ1dGUoJ3knKSwgMTApICsgdGV4dHVyZS5mcmFtZS55LFxuICAgICAgICAgICAgcGFyc2VJbnQobGV0dGVyc1tpXS5nZXRBdHRyaWJ1dGUoJ3dpZHRoJyksIDEwKSxcbiAgICAgICAgICAgIHBhcnNlSW50KGxldHRlcnNbaV0uZ2V0QXR0cmlidXRlKCdoZWlnaHQnKSwgMTApXG4gICAgICAgICk7XG5cbiAgICAgICAgZGF0YS5jaGFyc1tjaGFyQ29kZV0gPSB7XG4gICAgICAgICAgICB4T2Zmc2V0OiBwYXJzZUludChsZXR0ZXJzW2ldLmdldEF0dHJpYnV0ZSgneG9mZnNldCcpLCAxMCksXG4gICAgICAgICAgICB5T2Zmc2V0OiBwYXJzZUludChsZXR0ZXJzW2ldLmdldEF0dHJpYnV0ZSgneW9mZnNldCcpLCAxMCksXG4gICAgICAgICAgICB4QWR2YW5jZTogcGFyc2VJbnQobGV0dGVyc1tpXS5nZXRBdHRyaWJ1dGUoJ3hhZHZhbmNlJyksIDEwKSxcbiAgICAgICAgICAgIGtlcm5pbmc6IHt9LFxuICAgICAgICAgICAgdGV4dHVyZTogbmV3IGNvcmUuVGV4dHVyZSh0ZXh0dXJlLmJhc2VUZXh0dXJlLCB0ZXh0dXJlUmVjdClcblxuICAgICAgICB9O1xuICAgIH1cblxuICAgIC8vcGFyc2Uga2VybmluZ3NcbiAgICB2YXIga2VybmluZ3MgPSByZXNvdXJjZS5kYXRhLmdldEVsZW1lbnRzQnlUYWdOYW1lKCdrZXJuaW5nJyk7XG4gICAgZm9yIChpID0gMDsgaSA8IGtlcm5pbmdzLmxlbmd0aDsgaSsrKVxuICAgIHtcbiAgICAgICAgdmFyIGZpcnN0ID0gcGFyc2VJbnQoa2VybmluZ3NbaV0uZ2V0QXR0cmlidXRlKCdmaXJzdCcpLCAxMCk7XG4gICAgICAgIHZhciBzZWNvbmQgPSBwYXJzZUludChrZXJuaW5nc1tpXS5nZXRBdHRyaWJ1dGUoJ3NlY29uZCcpLCAxMCk7XG4gICAgICAgIHZhciBhbW91bnQgPSBwYXJzZUludChrZXJuaW5nc1tpXS5nZXRBdHRyaWJ1dGUoJ2Ftb3VudCcpLCAxMCk7XG5cbiAgICAgICAgZGF0YS5jaGFyc1tzZWNvbmRdLmtlcm5pbmdbZmlyc3RdID0gYW1vdW50O1xuICAgIH1cblxuICAgIHJlc291cmNlLmJpdG1hcEZvbnQgPSBkYXRhO1xuXG4gICAgLy8gSSdtIGxlYXZpbmcgdGhpcyBhcyBhIHRlbXBvcmFyeSBmaXggc28gd2UgY2FuIHRlc3QgdGhlIGJpdG1hcCBmb250cyBpbiB2M1xuICAgIC8vIGJ1dCBpdCdzIHZlcnkgbGlrZWx5IHRvIGNoYW5nZVxuICAgIGV4dHJhcy5CaXRtYXBUZXh0LmZvbnRzW2RhdGEuZm9udF0gPSBkYXRhO1xufVxuXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKClcbntcbiAgICByZXR1cm4gZnVuY3Rpb24gKHJlc291cmNlLCBuZXh0KVxuICAgIHtcbiAgICAgICAgLy8gc2tpcCBpZiBubyBkYXRhIG9yIG5vdCB4bWwgZGF0YVxuICAgICAgICBpZiAoIXJlc291cmNlLmRhdGEgfHwgIXJlc291cmNlLmlzWG1sKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gbmV4dCgpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gc2tpcCBpZiBub3QgYml0bWFwIGZvbnQgZGF0YSwgdXNpbmcgc29tZSBzaWxseSBkdWNrLXR5cGluZ1xuICAgICAgICBpZiAoXG4gICAgICAgICAgICByZXNvdXJjZS5kYXRhLmdldEVsZW1lbnRzQnlUYWdOYW1lKCdwYWdlJykubGVuZ3RoID09PSAwIHx8XG4gICAgICAgICAgICByZXNvdXJjZS5kYXRhLmdldEVsZW1lbnRzQnlUYWdOYW1lKCdpbmZvJykubGVuZ3RoID09PSAwIHx8XG4gICAgICAgICAgICByZXNvdXJjZS5kYXRhLmdldEVsZW1lbnRzQnlUYWdOYW1lKCdpbmZvJylbMF0uZ2V0QXR0cmlidXRlKCdmYWNlJykgPT09IG51bGxcbiAgICAgICAgICAgIClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIG5leHQoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciB4bWxVcmwgPSBwYXRoLmRpcm5hbWUocmVzb3VyY2UudXJsKTtcblxuICAgICAgICBpZiAoeG1sVXJsID09PSAnLicpIHtcbiAgICAgICAgICAgIHhtbFVybCA9ICcnO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuYmFzZVVybCAmJiB4bWxVcmwpIHtcbiAgICAgICAgICAgIC8vIGlmIGJhc2V1cmwgaGFzIGEgdHJhaWxpbmcgc2xhc2ggdGhlbiBhZGQgb25lIHRvIHhtbFVybCBzbyB0aGUgcmVwbGFjZSB3b3JrcyBiZWxvd1xuICAgICAgICAgICAgaWYgKHRoaXMuYmFzZVVybC5jaGFyQXQodGhpcy5iYXNlVXJsLmxlbmd0aCAtIDEpID09PSAnLycpIHtcbiAgICAgICAgICAgICAgICB4bWxVcmwgKz0gJy8nO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyByZW1vdmUgYmFzZVVybCBmcm9tIHhtbFVybFxuICAgICAgICAgICAgeG1sVXJsID0geG1sVXJsLnJlcGxhY2UodGhpcy5iYXNlVXJsLCAnJyk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBpZiB0aGVyZSBpcyBhbiB4bWxVcmwgbm93LCBpdCBuZWVkcyBhIHRyYWlsaW5nIHNsYXNoLiBFbnN1cmUgdGhhdCBpdCBkb2VzIGlmIHRoZSBzdHJpbmcgaXNuJ3QgZW1wdHkuXG4gICAgICAgIGlmICh4bWxVcmwgJiYgeG1sVXJsLmNoYXJBdCh4bWxVcmwubGVuZ3RoIC0gMSkgIT09ICcvJykge1xuICAgICAgICAgICAgeG1sVXJsICs9ICcvJztcbiAgICAgICAgfVxuICAgICAgICB2YXIgdGV4dHVyZVVybCA9IHhtbFVybCArIHJlc291cmNlLmRhdGEuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ3BhZ2UnKVswXS5nZXRBdHRyaWJ1dGUoJ2ZpbGUnKTtcbiAgICAgICAgaWYgKGNvcmUudXRpbHMuVGV4dHVyZUNhY2hlW3RleHR1cmVVcmxdKSB7XG4gICAgICAgICAgICAvL3JldXNlIGV4aXN0aW5nIHRleHR1cmVcbiAgICAgICAgICAgIHBhcnNlKHJlc291cmNlLCBjb3JlLnV0aWxzLlRleHR1cmVDYWNoZVt0ZXh0dXJlVXJsXSk7XG4gICAgICAgICAgICBuZXh0KCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB2YXIgbG9hZE9wdGlvbnMgPSB7XG4gICAgICAgICAgICAgICAgY3Jvc3NPcmlnaW46IHJlc291cmNlLmNyb3NzT3JpZ2luLFxuICAgICAgICAgICAgICAgIGxvYWRUeXBlOiBSZXNvdXJjZS5MT0FEX1RZUEUuSU1BR0UsXG4gICAgICAgICAgICAgICAgbWV0YWRhdGE6IHJlc291cmNlLm1ldGFkYXRhLmltYWdlTWV0YWRhdGFcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICAvLyBsb2FkIHRoZSB0ZXh0dXJlIGZvciB0aGUgZm9udFxuICAgICAgICAgICAgdGhpcy5hZGQocmVzb3VyY2UubmFtZSArICdfaW1hZ2UnLCB0ZXh0dXJlVXJsLCBsb2FkT3B0aW9ucywgZnVuY3Rpb24gKHJlcykge1xuICAgICAgICAgICAgICAgIHBhcnNlKHJlc291cmNlLCByZXMudGV4dHVyZSk7XG4gICAgICAgICAgICAgICAgbmV4dCgpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9O1xufTtcbiIsIi8qKlxuICogQGZpbGUgICAgICAgIE1haW4gZXhwb3J0IG9mIHRoZSBQSVhJIGxvYWRlcnMgbGlicmFyeVxuICogQGF1dGhvciAgICAgIE1hdCBHcm92ZXMgPG1hdEBnb29kYm95ZGlnaXRhbC5jb20+XG4gKiBAY29weXJpZ2h0ICAgMjAxMy0yMDE1IEdvb2RCb3lEaWdpdGFsXG4gKiBAbGljZW5zZSAgICAge0BsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9waXhpanMvcGl4aS5qcy9ibG9iL21hc3Rlci9MSUNFTlNFfE1JVCBMaWNlbnNlfVxuICovXG5cbi8qKlxuICogQG5hbWVzcGFjZSBQSVhJLmxvYWRlcnNcbiAqL1xubW9kdWxlLmV4cG9ydHMgPSB7XG4gICAgTG9hZGVyOiAgICAgICAgICAgICByZXF1aXJlKCcuL2xvYWRlcicpLFxuXG4gICAgLy8gcGFyc2Vyc1xuICAgIGJpdG1hcEZvbnRQYXJzZXI6ICAgcmVxdWlyZSgnLi9iaXRtYXBGb250UGFyc2VyJyksXG4gICAgc3ByaXRlc2hlZXRQYXJzZXI6ICByZXF1aXJlKCcuL3Nwcml0ZXNoZWV0UGFyc2VyJyksXG4gICAgdGV4dHVyZVBhcnNlcjogICAgICByZXF1aXJlKCcuL3RleHR1cmVQYXJzZXInKSxcbiAgICBSZXNvdXJjZTogICAgICAgICAgIHJlcXVpcmUoJ3Jlc291cmNlLWxvYWRlcicpLlJlc291cmNlXG59O1xuIiwidmFyIFJlc291cmNlTG9hZGVyID0gcmVxdWlyZSgncmVzb3VyY2UtbG9hZGVyJyksXG4gICAgdGV4dHVyZVBhcnNlciA9IHJlcXVpcmUoJy4vdGV4dHVyZVBhcnNlcicpLFxuICAgIHNwcml0ZXNoZWV0UGFyc2VyID0gcmVxdWlyZSgnLi9zcHJpdGVzaGVldFBhcnNlcicpLFxuICAgIGJpdG1hcEZvbnRQYXJzZXIgPSByZXF1aXJlKCcuL2JpdG1hcEZvbnRQYXJzZXInKTtcblxuLyoqXG4gKlxuICogVGhlIG5ldyBsb2FkZXIsIGV4dGVuZHMgUmVzb3VyY2UgTG9hZGVyIGJ5IENoYWQgRW5nbGVyIDogaHR0cHM6Ly9naXRodWIuY29tL2VuZ2xlcmNqL3Jlc291cmNlLWxvYWRlclxuICpcbiAqIGBgYGpzXG4gKiB2YXIgbG9hZGVyID0gUElYSS5sb2FkZXI7IC8vIHBpeGkgZXhwb3NlcyBhIHByZW1hZGUgaW5zdGFuY2UgZm9yIHlvdSB0byB1c2UuXG4gKiAvL29yXG4gKiB2YXIgbG9hZGVyID0gbmV3IFBJWEkubG9hZGVycy5Mb2FkZXIoKTsgLy8geW91IGNhbiBhbHNvIGNyZWF0ZSB5b3VyIG93biBpZiB5b3Ugd2FudFxuICpcbiAqIGxvYWRlci5hZGQoJ2J1bm55JyxcImRhdGEvYnVubnkucG5nXCIpO1xuICpcbiAqIGxvYWRlci5vbmNlKCdjb21wbGV0ZScsb25Bc3NldHNMb2FkZWQpO1xuICpcbiAqIGxvYWRlci5sb2FkKCk7XG4gKiBgYGBcbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuUmVzb3VyY2VMb2FkZXJcbiAqIEBtZW1iZXJvZiBQSVhJLmxvYWRlcnNcbiAqIEBwYXJhbSBbYmFzZVVybD0nJ10ge3N0cmluZ30gVGhlIGJhc2UgdXJsIGZvciBhbGwgcmVzb3VyY2VzIGxvYWRlZCBieSB0aGlzIGxvYWRlci5cbiAqIEBwYXJhbSBbY29uY3VycmVuY3k9MTBdIHtudW1iZXJ9IFRoZSBudW1iZXIgb2YgcmVzb3VyY2VzIHRvIGxvYWQgY29uY3VycmVudGx5LlxuICovXG5mdW5jdGlvbiBMb2FkZXIoYmFzZVVybCwgY29uY3VycmVuY3kpXG57XG4gICAgUmVzb3VyY2VMb2FkZXIuY2FsbCh0aGlzLCBiYXNlVXJsLCBjb25jdXJyZW5jeSk7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IExvYWRlci5fcGl4aU1pZGRsZXdhcmUubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgdGhpcy51c2UoTG9hZGVyLl9waXhpTWlkZGxld2FyZVtpXSgpKTtcbiAgICB9XG59XG5cbkxvYWRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFJlc291cmNlTG9hZGVyLnByb3RvdHlwZSk7XG5Mb2FkZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gTG9hZGVyO1xuXG5tb2R1bGUuZXhwb3J0cyA9IExvYWRlcjtcblxuTG9hZGVyLl9waXhpTWlkZGxld2FyZSA9IFtcbiAgICAvLyBwYXJzZSBhbnkgYmxvYiBpbnRvIG1vcmUgdXNhYmxlIG9iamVjdHMgKGUuZy4gSW1hZ2UpXG4gICAgUmVzb3VyY2VMb2FkZXIubWlkZGxld2FyZS5wYXJzaW5nLmJsb2IsXG4gICAgLy8gcGFyc2UgYW55IEltYWdlIG9iamVjdHMgaW50byB0ZXh0dXJlc1xuICAgIHRleHR1cmVQYXJzZXIsXG4gICAgLy8gcGFyc2UgYW55IHNwcml0ZXNoZWV0IGRhdGEgaW50byBtdWx0aXBsZSB0ZXh0dXJlc1xuICAgIHNwcml0ZXNoZWV0UGFyc2VyLFxuICAgIC8vIHBhcnNlIGFueSBzcHJpdGVzaGVldCBkYXRhIGludG8gbXVsdGlwbGUgdGV4dHVyZXNcbiAgICBiaXRtYXBGb250UGFyc2VyXG5dO1xuXG5Mb2FkZXIuYWRkUGl4aU1pZGRsZXdhcmUgPSBmdW5jdGlvbiAoZm4pIHtcbiAgICBMb2FkZXIuX3BpeGlNaWRkbGV3YXJlLnB1c2goZm4pO1xufTtcblxuLy8gQWRkIGN1c3RvbSBleHRlbnRpb25zXG52YXIgUmVzb3VyY2UgPSBSZXNvdXJjZUxvYWRlci5SZXNvdXJjZTtcblxuUmVzb3VyY2Uuc2V0RXh0ZW5zaW9uWGhyVHlwZSgnZm50JywgUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuRE9DVU1FTlQpO1xuIiwidmFyIFJlc291cmNlID0gcmVxdWlyZSgncmVzb3VyY2UtbG9hZGVyJykuUmVzb3VyY2UsXG4gICAgcGF0aCA9IHJlcXVpcmUoJ3BhdGgnKSxcbiAgICBjb3JlID0gcmVxdWlyZSgnLi4vY29yZScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICgpXG57XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChyZXNvdXJjZSwgbmV4dClcbiAgICB7XG4gICAgICAgIC8vIHNraXAgaWYgbm8gZGF0YSwgaXRzIG5vdCBqc29uLCBvciBpdCBpc24ndCBzcHJpdGVzaGVldCBkYXRhXG4gICAgICAgIGlmICghcmVzb3VyY2UuZGF0YSB8fCAhcmVzb3VyY2UuaXNKc29uIHx8ICFyZXNvdXJjZS5kYXRhLmZyYW1lcylcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIG5leHQoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBsb2FkT3B0aW9ucyA9IHtcbiAgICAgICAgICAgIGNyb3NzT3JpZ2luOiByZXNvdXJjZS5jcm9zc09yaWdpbixcbiAgICAgICAgICAgIGxvYWRUeXBlOiBSZXNvdXJjZS5MT0FEX1RZUEUuSU1BR0UsXG4gICAgICAgICAgICBtZXRhZGF0YTogcmVzb3VyY2UubWV0YWRhdGEuaW1hZ2VNZXRhZGF0YVxuICAgICAgICB9O1xuXG4gICAgICAgIHZhciByb3V0ZSA9IHBhdGguZGlybmFtZShyZXNvdXJjZS51cmwucmVwbGFjZSh0aGlzLmJhc2VVcmwsICcnKSk7XG5cbiAgICAgICAgdmFyIHJlc29sdXRpb24gPSBjb3JlLnV0aWxzLmdldFJlc29sdXRpb25PZlVybCggcmVzb3VyY2UudXJsICk7XG5cbiAgICAgICAgLy8gbG9hZCB0aGUgaW1hZ2UgZm9yIHRoaXMgc2hlZXRcbiAgICAgICAgdGhpcy5hZGQocmVzb3VyY2UubmFtZSArICdfaW1hZ2UnLCByb3V0ZSArICcvJyArIHJlc291cmNlLmRhdGEubWV0YS5pbWFnZSwgbG9hZE9wdGlvbnMsIGZ1bmN0aW9uIChyZXMpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJlc291cmNlLnRleHR1cmVzID0ge307XG5cbiAgICAgICAgICAgIHZhciBmcmFtZXMgPSByZXNvdXJjZS5kYXRhLmZyYW1lcztcblxuICAgICAgICAgICAgZm9yICh2YXIgaSBpbiBmcmFtZXMpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdmFyIHJlY3QgPSBmcmFtZXNbaV0uZnJhbWU7XG5cbiAgICAgICAgICAgICAgICBpZiAocmVjdClcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBzaXplID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHRyaW0gPSBudWxsO1xuXG4gICAgICAgICAgICAgICAgICAgIGlmIChmcmFtZXNbaV0ucm90YXRlZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZSA9IG5ldyBjb3JlLlJlY3RhbmdsZShyZWN0LngsIHJlY3QueSwgcmVjdC5oLCByZWN0LncpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZSA9IG5ldyBjb3JlLlJlY3RhbmdsZShyZWN0LngsIHJlY3QueSwgcmVjdC53LCByZWN0LmgpO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgLy8gIENoZWNrIHRvIHNlZSBpZiB0aGUgc3ByaXRlIGlzIHRyaW1tZWRcbiAgICAgICAgICAgICAgICAgICAgaWYgKGZyYW1lc1tpXS50cmltbWVkKVxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0cmltID0gbmV3IGNvcmUuUmVjdGFuZ2xlKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyYW1lc1tpXS5zcHJpdGVTb3VyY2VTaXplLnggLyByZXNvbHV0aW9uLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyYW1lc1tpXS5zcHJpdGVTb3VyY2VTaXplLnkgLyByZXNvbHV0aW9uLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyYW1lc1tpXS5zb3VyY2VTaXplLncgLyByZXNvbHV0aW9uLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyYW1lc1tpXS5zb3VyY2VTaXplLmggLyByZXNvbHV0aW9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIC8vIGZsaXAgdGhlIHdpZHRoIGFuZCBoZWlnaHQhXG4gICAgICAgICAgICAgICAgICAgIGlmIChmcmFtZXNbaV0ucm90YXRlZClcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHRlbXAgPSBzaXplLndpZHRoO1xuICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZS53aWR0aCA9IHNpemUuaGVpZ2h0O1xuICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZS5oZWlnaHQgPSB0ZW1wO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgc2l6ZS54IC89IHJlc29sdXRpb247XG4gICAgICAgICAgICAgICAgICAgIHNpemUueSAvPSByZXNvbHV0aW9uO1xuICAgICAgICAgICAgICAgICAgICBzaXplLndpZHRoIC89IHJlc29sdXRpb247XG4gICAgICAgICAgICAgICAgICAgIHNpemUuaGVpZ2h0IC89IHJlc29sdXRpb247XG5cbiAgICAgICAgICAgICAgICAgICAgcmVzb3VyY2UudGV4dHVyZXNbaV0gPSBuZXcgY29yZS5UZXh0dXJlKHJlcy50ZXh0dXJlLmJhc2VUZXh0dXJlLCBzaXplLCBzaXplLmNsb25lKCksIHRyaW0sIGZyYW1lc1tpXS5yb3RhdGVkKTtcblxuICAgICAgICAgICAgICAgICAgICAvLyBsZXRzIGFsc28gYWRkIHRoZSBmcmFtZSB0byBwaXhpJ3MgZ2xvYmFsIGNhY2hlIGZvciBmcm9tRnJhbWUgYW5kIGZyb21JbWFnZSBmdW5jdGlvbnNcbiAgICAgICAgICAgICAgICAgICAgY29yZS51dGlscy5UZXh0dXJlQ2FjaGVbaV0gPSByZXNvdXJjZS50ZXh0dXJlc1tpXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIG5leHQoKTtcbiAgICAgICAgfSk7XG4gICAgfTtcbn07XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uL2NvcmUnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoKVxue1xuICAgIHJldHVybiBmdW5jdGlvbiAocmVzb3VyY2UsIG5leHQpXG4gICAge1xuICAgICAgICAvLyBjcmVhdGUgYSBuZXcgdGV4dHVyZSBpZiB0aGUgZGF0YSBpcyBhbiBJbWFnZSBvYmplY3RcbiAgICAgICAgaWYgKHJlc291cmNlLmRhdGEgJiYgcmVzb3VyY2UuaXNJbWFnZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdmFyIGJhc2VUZXh0dXJlID0gbmV3IGNvcmUuQmFzZVRleHR1cmUocmVzb3VyY2UuZGF0YSwgbnVsbCwgY29yZS51dGlscy5nZXRSZXNvbHV0aW9uT2ZVcmwocmVzb3VyY2UudXJsKSk7XG4gICAgICAgICAgICBiYXNlVGV4dHVyZS5pbWFnZVVybCA9IHJlc291cmNlLnVybDtcbiAgICAgICAgICAgIHJlc291cmNlLnRleHR1cmUgPSBuZXcgY29yZS5UZXh0dXJlKGJhc2VUZXh0dXJlKTtcbiAgICAgICAgICAgIC8vIGxldHMgYWxzbyBhZGQgdGhlIGZyYW1lIHRvIHBpeGkncyBnbG9iYWwgY2FjaGUgZm9yIGZyb21GcmFtZSBhbmQgZnJvbUltYWdlIGZ1Y250aW9uc1xuICAgICAgICAgICAgY29yZS51dGlscy5CYXNlVGV4dHVyZUNhY2hlW3Jlc291cmNlLnVybF0gPSBiYXNlVGV4dHVyZTtcbiAgICAgICAgICAgIGNvcmUudXRpbHMuVGV4dHVyZUNhY2hlW3Jlc291cmNlLnVybF0gPSByZXNvdXJjZS50ZXh0dXJlO1xuICAgICAgICB9XG5cbiAgICAgICAgbmV4dCgpO1xuICAgIH07XG59O1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi9jb3JlJyksXG4gICAgdGVtcFBvaW50ID0gbmV3IGNvcmUuUG9pbnQoKSxcbiAgICB0ZW1wUG9seWdvbiA9IG5ldyBjb3JlLlBvbHlnb24oKTtcblxuLyoqXG4gKiBCYXNlIG1lc2ggY2xhc3NcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5Db250YWluZXJcbiAqIEBtZW1iZXJvZiBQSVhJLm1lc2hcbiAqIEBwYXJhbSB0ZXh0dXJlIHtQSVhJLlRleHR1cmV9IFRoZSB0ZXh0dXJlIHRvIHVzZVxuICogQHBhcmFtIFt2ZXJ0aWNlc10ge0Zsb2F0MzJBcnJheX0gaWYgeW91IHdhbnQgdG8gc3BlY2lmeSB0aGUgdmVydGljZXNcbiAqIEBwYXJhbSBbdXZzXSB7RmxvYXQzMkFycmF5fSBpZiB5b3Ugd2FudCB0byBzcGVjaWZ5IHRoZSB1dnNcbiAqIEBwYXJhbSBbaW5kaWNlc10ge1VpbnQxNkFycmF5fSBpZiB5b3Ugd2FudCB0byBzcGVjaWZ5IHRoZSBpbmRpY2VzXG4gKiBAcGFyYW0gW2RyYXdNb2RlXSB7bnVtYmVyfSB0aGUgZHJhd01vZGUsIGNhbiBiZSBhbnkgb2YgdGhlIE1lc2guRFJBV19NT0RFUyBjb25zdHNcbiAqL1xuZnVuY3Rpb24gTWVzaCh0ZXh0dXJlLCB2ZXJ0aWNlcywgdXZzLCBpbmRpY2VzLCBkcmF3TW9kZSlcbntcbiAgICBjb3JlLkNvbnRhaW5lci5jYWxsKHRoaXMpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHRleHR1cmUgb2YgdGhlIE1lc2hcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuVGV4dHVyZX1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX3RleHR1cmUgPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogVGhlIFV2cyBvZiB0aGUgTWVzaFxuICAgICAqXG4gICAgICogQG1lbWJlciB7RmxvYXQzMkFycmF5fVxuICAgICAqL1xuICAgIHRoaXMudXZzID0gdXZzIHx8IG5ldyBGbG9hdDMyQXJyYXkoWzAsIDAsXG4gICAgICAgIDEsIDAsXG4gICAgICAgIDEsIDEsXG4gICAgICAgIDAsIDFdKTtcblxuICAgIC8qKlxuICAgICAqIEFuIGFycmF5IG9mIHZlcnRpY2VzXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtGbG9hdDMyQXJyYXl9XG4gICAgICovXG4gICAgdGhpcy52ZXJ0aWNlcyA9IHZlcnRpY2VzIHx8IG5ldyBGbG9hdDMyQXJyYXkoWzAsIDAsXG4gICAgICAgIDEwMCwgMCxcbiAgICAgICAgMTAwLCAxMDAsXG4gICAgICAgIDAsIDEwMF0pO1xuXG4gICAgLypcbiAgICAgKiBAbWVtYmVyIHtVaW50MTZBcnJheX0gQW4gYXJyYXkgY29udGFpbmluZyB0aGUgaW5kaWNlcyBvZiB0aGUgdmVydGljZXNcbiAgICAgKi9cbiAgICAvLyAgVE9ETyBhdXRvIGdlbmVyYXRlIHRoaXMgYmFzZWQgb24gZHJhdyBtb2RlIVxuICAgIHRoaXMuaW5kaWNlcyA9IGluZGljZXMgfHwgbmV3IFVpbnQxNkFycmF5KFswLCAxLCAzLCAyXSk7XG5cbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIHRoZSBNZXNoIGlzIGRpcnR5IG9yIG5vdFxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKi9cbiAgICB0aGlzLmRpcnR5ID0gdHJ1ZTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBibGVuZCBtb2RlIHRvIGJlIGFwcGxpZWQgdG8gdGhlIHNwcml0ZS4gU2V0IHRvIGBQSVhJLkJMRU5EX01PREVTLk5PUk1BTGAgdG8gcmVtb3ZlIGFueSBibGVuZCBtb2RlLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IFBJWEkuQkxFTkRfTU9ERVMuTk9STUFMXG4gICAgICogQHNlZSBQSVhJLkJMRU5EX01PREVTXG4gICAgICovXG4gICAgdGhpcy5ibGVuZE1vZGUgPSBjb3JlLkJMRU5EX01PREVTLk5PUk1BTDtcblxuICAgIC8qKlxuICAgICAqIFRyaWFuZ2xlcyBpbiBjYW52YXMgbW9kZSBhcmUgYXV0b21hdGljYWxseSBhbnRpYWxpYXNlZCwgdXNlIHRoaXMgdmFsdWUgdG8gZm9yY2UgdHJpYW5nbGVzIHRvIG92ZXJsYXAgYSBiaXQgd2l0aCBlYWNoIG90aGVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMuY2FudmFzUGFkZGluZyA9IDA7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgd2F5IHRoZSBNZXNoIHNob3VsZCBiZSBkcmF3biwgY2FuIGJlIGFueSBvZiB0aGUge0BsaW5rIFBJWEkubWVzaC5NZXNoLkRSQVdfTU9ERVN9IGNvbnN0c1xuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBzZWUgUElYSS5tZXNoLk1lc2guRFJBV19NT0RFU1xuICAgICAqL1xuICAgIHRoaXMuZHJhd01vZGUgPSBkcmF3TW9kZSB8fCBNZXNoLkRSQVdfTU9ERVMuVFJJQU5HTEVfTUVTSDtcblxuICAgIC8vIHJ1biB0ZXh0dXJlIHNldHRlcjtcbiAgICB0aGlzLnRleHR1cmUgPSB0ZXh0dXJlO1xuXG4gICAgIC8qKlxuICAgICAqIFRoZSBkZWZhdWx0IHNoYWRlciB0aGF0IGlzIHVzZWQgaWYgYSBtZXNoIGRvZXNuJ3QgaGF2ZSBhIG1vcmUgc3BlY2lmaWMgb25lLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5TaGFkZXJ9XG4gICAgICovXG4gICAgdGhpcy5zaGFkZXIgPSBudWxsO1xufVxuXG4vLyBjb25zdHJ1Y3RvclxuTWVzaC5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuQ29udGFpbmVyLnByb3RvdHlwZSk7XG5NZXNoLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IE1lc2g7XG5tb2R1bGUuZXhwb3J0cyA9IE1lc2g7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKE1lc2gucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogVGhlIHRleHR1cmUgdGhhdCB0aGUgc3ByaXRlIGlzIHVzaW5nXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlRleHR1cmV9XG4gICAgICogQG1lbWJlcm9mIFBJWEkubWVzaC5NZXNoI1xuICAgICAqL1xuICAgIHRleHR1cmU6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gIHRoaXMuX3RleHR1cmU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICBpZiAodGhpcy5fdGV4dHVyZSA9PT0gdmFsdWUpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLl90ZXh0dXJlID0gdmFsdWU7XG5cbiAgICAgICAgICAgIGlmICh2YWx1ZSlcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAvLyB3YWl0IGZvciB0aGUgdGV4dHVyZSB0byBsb2FkXG4gICAgICAgICAgICAgICAgaWYgKHZhbHVlLmJhc2VUZXh0dXJlLmhhc0xvYWRlZClcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX29uVGV4dHVyZVVwZGF0ZSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICB2YWx1ZS5vbmNlKCd1cGRhdGUnLCB0aGlzLl9vblRleHR1cmVVcGRhdGUsIHRoaXMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn0pO1xuXG4vKipcbiAqIFJlbmRlcnMgdGhlIG9iamVjdCB1c2luZyB0aGUgV2ViR0wgcmVuZGVyZXJcbiAqXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcn0gYSByZWZlcmVuY2UgdG8gdGhlIFdlYkdMIHJlbmRlcmVyXG4gKiBAcHJpdmF0ZVxuICovXG5NZXNoLnByb3RvdHlwZS5fcmVuZGVyV2ViR0wgPSBmdW5jdGlvbiAocmVuZGVyZXIpXG57XG4gICAgcmVuZGVyZXIuc2V0T2JqZWN0UmVuZGVyZXIocmVuZGVyZXIucGx1Z2lucy5tZXNoKTtcbiAgICByZW5kZXJlci5wbHVnaW5zLm1lc2gucmVuZGVyKHRoaXMpO1xufTtcblxuLyoqXG4gKiBSZW5kZXJzIHRoZSBvYmplY3QgdXNpbmcgdGhlIENhbnZhcyByZW5kZXJlclxuICpcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5DYW52YXNSZW5kZXJlcn1cbiAqIEBwcml2YXRlXG4gKi9cbk1lc2gucHJvdG90eXBlLl9yZW5kZXJDYW52YXMgPSBmdW5jdGlvbiAocmVuZGVyZXIpXG57XG4gICAgdmFyIGNvbnRleHQgPSByZW5kZXJlci5jb250ZXh0O1xuXG4gICAgdmFyIHRyYW5zZm9ybSA9IHRoaXMud29ybGRUcmFuc2Zvcm07XG5cbiAgICBpZiAocmVuZGVyZXIucm91bmRQaXhlbHMpXG4gICAge1xuICAgICAgICBjb250ZXh0LnNldFRyYW5zZm9ybSh0cmFuc2Zvcm0uYSwgdHJhbnNmb3JtLmIsIHRyYW5zZm9ybS5jLCB0cmFuc2Zvcm0uZCwgdHJhbnNmb3JtLnR4IHwgMCwgdHJhbnNmb3JtLnR5IHwgMCk7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIGNvbnRleHQuc2V0VHJhbnNmb3JtKHRyYW5zZm9ybS5hLCB0cmFuc2Zvcm0uYiwgdHJhbnNmb3JtLmMsIHRyYW5zZm9ybS5kLCB0cmFuc2Zvcm0udHgsIHRyYW5zZm9ybS50eSk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuZHJhd01vZGUgPT09IE1lc2guRFJBV19NT0RFUy5UUklBTkdMRV9NRVNIKVxuICAgIHtcbiAgICAgICAgdGhpcy5fcmVuZGVyQ2FudmFzVHJpYW5nbGVNZXNoKGNvbnRleHQpO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICB0aGlzLl9yZW5kZXJDYW52YXNUcmlhbmdsZXMoY29udGV4dCk7XG4gICAgfVxufTtcblxuLyoqXG4gKiBEcmF3cyB0aGUgb2JqZWN0IGluIFRyaWFuZ2xlIE1lc2ggbW9kZSB1c2luZyBjYW52YXNcbiAqXG4gKiBAcGFyYW0gY29udGV4dCB7Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEfSB0aGUgY3VycmVudCBkcmF3aW5nIGNvbnRleHRcbiAqIEBwcml2YXRlXG4gKi9cbk1lc2gucHJvdG90eXBlLl9yZW5kZXJDYW52YXNUcmlhbmdsZU1lc2ggPSBmdW5jdGlvbiAoY29udGV4dClcbntcbiAgICAvLyBkcmF3IHRyaWFuZ2xlcyEhXG4gICAgdmFyIHZlcnRpY2VzID0gdGhpcy52ZXJ0aWNlcztcbiAgICB2YXIgdXZzID0gdGhpcy51dnM7XG5cbiAgICB2YXIgbGVuZ3RoID0gdmVydGljZXMubGVuZ3RoIC8gMjtcbiAgICAvLyB0aGlzLmNvdW50Kys7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aCAtIDI7IGkrKylcbiAgICB7XG4gICAgICAgIC8vIGRyYXcgc29tZSB0cmlhbmdsZXMhXG4gICAgICAgIHZhciBpbmRleCA9IGkgKiAyO1xuICAgICAgICB0aGlzLl9yZW5kZXJDYW52YXNEcmF3VHJpYW5nbGUoY29udGV4dCwgdmVydGljZXMsIHV2cywgaW5kZXgsIChpbmRleCArIDIpLCAoaW5kZXggKyA0KSk7XG4gICAgfVxufTtcblxuLyoqXG4gKiBEcmF3cyB0aGUgb2JqZWN0IGluIHRyaWFuZ2xlIG1vZGUgdXNpbmcgY2FudmFzXG4gKlxuICogQHBhcmFtIGNvbnRleHQge0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRH0gdGhlIGN1cnJlbnQgZHJhd2luZyBjb250ZXh0XG4gKiBAcHJpdmF0ZVxuICovXG5NZXNoLnByb3RvdHlwZS5fcmVuZGVyQ2FudmFzVHJpYW5nbGVzID0gZnVuY3Rpb24gKGNvbnRleHQpXG57XG4gICAgLy8gZHJhdyB0cmlhbmdsZXMhIVxuICAgIHZhciB2ZXJ0aWNlcyA9IHRoaXMudmVydGljZXM7XG4gICAgdmFyIHV2cyA9IHRoaXMudXZzO1xuICAgIHZhciBpbmRpY2VzID0gdGhpcy5pbmRpY2VzO1xuXG4gICAgdmFyIGxlbmd0aCA9IGluZGljZXMubGVuZ3RoO1xuICAgIC8vIHRoaXMuY291bnQrKztcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyBpICs9IDMpXG4gICAge1xuICAgICAgICAvLyBkcmF3IHNvbWUgdHJpYW5nbGVzIVxuICAgICAgICB2YXIgaW5kZXgwID0gaW5kaWNlc1tpXSAqIDIsIGluZGV4MSA9IGluZGljZXNbaSArIDFdICogMiwgaW5kZXgyID0gaW5kaWNlc1tpICsgMl0gKiAyO1xuICAgICAgICB0aGlzLl9yZW5kZXJDYW52YXNEcmF3VHJpYW5nbGUoY29udGV4dCwgdmVydGljZXMsIHV2cywgaW5kZXgwLCBpbmRleDEsIGluZGV4Mik7XG4gICAgfVxufTtcblxuLyoqXG4gKiBEcmF3cyBvbmUgb2YgdGhlIHRyaWFuZ2xlcyB0aGF0IGZvcm0gdGhpcyBNZXNoXG4gKlxuICogQHBhcmFtIGNvbnRleHQge0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRH0gdGhlIGN1cnJlbnQgZHJhd2luZyBjb250ZXh0XG4gKiBAcGFyYW0gdmVydGljZXMge0Zsb2F0MzJBcnJheX0gYSByZWZlcmVuY2UgdG8gdGhlIHZlcnRpY2VzIG9mIHRoZSBNZXNoXG4gKiBAcGFyYW0gdXZzIHtGbG9hdDMyQXJyYXl9IGEgcmVmZXJlbmNlIHRvIHRoZSB1dnMgb2YgdGhlIE1lc2hcbiAqIEBwYXJhbSBpbmRleDAge251bWJlcn0gdGhlIGluZGV4IG9mIHRoZSBmaXJzdCB2ZXJ0ZXhcbiAqIEBwYXJhbSBpbmRleDEge251bWJlcn0gdGhlIGluZGV4IG9mIHRoZSBzZWNvbmQgdmVydGV4XG4gKiBAcGFyYW0gaW5kZXgyIHtudW1iZXJ9IHRoZSBpbmRleCBvZiB0aGUgdGhpcmQgdmVydGV4XG4gKiBAcHJpdmF0ZVxuICovXG5NZXNoLnByb3RvdHlwZS5fcmVuZGVyQ2FudmFzRHJhd1RyaWFuZ2xlID0gZnVuY3Rpb24gKGNvbnRleHQsIHZlcnRpY2VzLCB1dnMsIGluZGV4MCwgaW5kZXgxLCBpbmRleDIpXG57XG4gICAgdmFyIHRleHR1cmVTb3VyY2UgPSB0aGlzLl90ZXh0dXJlLmJhc2VUZXh0dXJlLnNvdXJjZTtcbiAgICB2YXIgdGV4dHVyZVdpZHRoID0gdGhpcy5fdGV4dHVyZS5iYXNlVGV4dHVyZS53aWR0aDtcbiAgICB2YXIgdGV4dHVyZUhlaWdodCA9IHRoaXMuX3RleHR1cmUuYmFzZVRleHR1cmUuaGVpZ2h0O1xuXG4gICAgdmFyIHgwID0gdmVydGljZXNbaW5kZXgwXSwgeDEgPSB2ZXJ0aWNlc1tpbmRleDFdLCB4MiA9IHZlcnRpY2VzW2luZGV4Ml07XG4gICAgdmFyIHkwID0gdmVydGljZXNbaW5kZXgwICsgMV0sIHkxID0gdmVydGljZXNbaW5kZXgxICsgMV0sIHkyID0gdmVydGljZXNbaW5kZXgyICsgMV07XG5cbiAgICB2YXIgdTAgPSB1dnNbaW5kZXgwXSAqIHRleHR1cmVXaWR0aCwgdTEgPSB1dnNbaW5kZXgxXSAqIHRleHR1cmVXaWR0aCwgdTIgPSB1dnNbaW5kZXgyXSAqIHRleHR1cmVXaWR0aDtcbiAgICB2YXIgdjAgPSB1dnNbaW5kZXgwICsgMV0gKiB0ZXh0dXJlSGVpZ2h0LCB2MSA9IHV2c1tpbmRleDEgKyAxXSAqIHRleHR1cmVIZWlnaHQsIHYyID0gdXZzW2luZGV4MiArIDFdICogdGV4dHVyZUhlaWdodDtcblxuICAgIGlmICh0aGlzLmNhbnZhc1BhZGRpbmcgPiAwKVxuICAgIHtcbiAgICAgICAgdmFyIHBhZGRpbmdYID0gdGhpcy5jYW52YXNQYWRkaW5nIC8gdGhpcy53b3JsZFRyYW5zZm9ybS5hO1xuICAgICAgICB2YXIgcGFkZGluZ1kgPSB0aGlzLmNhbnZhc1BhZGRpbmcgLyB0aGlzLndvcmxkVHJhbnNmb3JtLmQ7XG4gICAgICAgIHZhciBjZW50ZXJYID0gKHgwICsgeDEgKyB4MikgLyAzO1xuICAgICAgICB2YXIgY2VudGVyWSA9ICh5MCArIHkxICsgeTIpIC8gMztcblxuICAgICAgICB2YXIgbm9ybVggPSB4MCAtIGNlbnRlclg7XG4gICAgICAgIHZhciBub3JtWSA9IHkwIC0gY2VudGVyWTtcblxuICAgICAgICB2YXIgZGlzdCA9IE1hdGguc3FydChub3JtWCAqIG5vcm1YICsgbm9ybVkgKiBub3JtWSk7XG4gICAgICAgIHgwID0gY2VudGVyWCArIChub3JtWCAvIGRpc3QpICogKGRpc3QgKyBwYWRkaW5nWCk7XG4gICAgICAgIHkwID0gY2VudGVyWSArIChub3JtWSAvIGRpc3QpICogKGRpc3QgKyBwYWRkaW5nWSk7XG5cbiAgICAgICAgLy9cblxuICAgICAgICBub3JtWCA9IHgxIC0gY2VudGVyWDtcbiAgICAgICAgbm9ybVkgPSB5MSAtIGNlbnRlclk7XG5cbiAgICAgICAgZGlzdCA9IE1hdGguc3FydChub3JtWCAqIG5vcm1YICsgbm9ybVkgKiBub3JtWSk7XG4gICAgICAgIHgxID0gY2VudGVyWCArIChub3JtWCAvIGRpc3QpICogKGRpc3QgKyBwYWRkaW5nWCk7XG4gICAgICAgIHkxID0gY2VudGVyWSArIChub3JtWSAvIGRpc3QpICogKGRpc3QgKyBwYWRkaW5nWSk7XG5cbiAgICAgICAgbm9ybVggPSB4MiAtIGNlbnRlclg7XG4gICAgICAgIG5vcm1ZID0geTIgLSBjZW50ZXJZO1xuXG4gICAgICAgIGRpc3QgPSBNYXRoLnNxcnQobm9ybVggKiBub3JtWCArIG5vcm1ZICogbm9ybVkpO1xuICAgICAgICB4MiA9IGNlbnRlclggKyAobm9ybVggLyBkaXN0KSAqIChkaXN0ICsgcGFkZGluZ1gpO1xuICAgICAgICB5MiA9IGNlbnRlclkgKyAobm9ybVkgLyBkaXN0KSAqIChkaXN0ICsgcGFkZGluZ1kpO1xuICAgIH1cblxuICAgIGNvbnRleHQuc2F2ZSgpO1xuICAgIGNvbnRleHQuYmVnaW5QYXRoKCk7XG5cblxuICAgIGNvbnRleHQubW92ZVRvKHgwLCB5MCk7XG4gICAgY29udGV4dC5saW5lVG8oeDEsIHkxKTtcbiAgICBjb250ZXh0LmxpbmVUbyh4MiwgeTIpO1xuXG4gICAgY29udGV4dC5jbG9zZVBhdGgoKTtcblxuICAgIGNvbnRleHQuY2xpcCgpO1xuXG4gICAgLy8gQ29tcHV0ZSBtYXRyaXggdHJhbnNmb3JtXG4gICAgdmFyIGRlbHRhID0gICh1MCAqIHYxKSAgICAgICsgKHYwICogdTIpICAgICAgKyAodTEgKiB2MikgICAgICAtICh2MSAqIHUyKSAgICAgIC0gKHYwICogdTEpICAgICAgLSAodTAgKiB2Mik7XG4gICAgdmFyIGRlbHRhQSA9ICh4MCAqIHYxKSAgICAgICsgKHYwICogeDIpICAgICAgKyAoeDEgKiB2MikgICAgICAtICh2MSAqIHgyKSAgICAgIC0gKHYwICogeDEpICAgICAgLSAoeDAgKiB2Mik7XG4gICAgdmFyIGRlbHRhQiA9ICh1MCAqIHgxKSAgICAgICsgKHgwICogdTIpICAgICAgKyAodTEgKiB4MikgICAgICAtICh4MSAqIHUyKSAgICAgIC0gKHgwICogdTEpICAgICAgLSAodTAgKiB4Mik7XG4gICAgdmFyIGRlbHRhQyA9ICh1MCAqIHYxICogeDIpICsgKHYwICogeDEgKiB1MikgKyAoeDAgKiB1MSAqIHYyKSAtICh4MCAqIHYxICogdTIpIC0gKHYwICogdTEgKiB4MikgLSAodTAgKiB4MSAqIHYyKTtcbiAgICB2YXIgZGVsdGFEID0gKHkwICogdjEpICAgICAgKyAodjAgKiB5MikgICAgICArICh5MSAqIHYyKSAgICAgIC0gKHYxICogeTIpICAgICAgLSAodjAgKiB5MSkgICAgICAtICh5MCAqIHYyKTtcbiAgICB2YXIgZGVsdGFFID0gKHUwICogeTEpICAgICAgKyAoeTAgKiB1MikgICAgICArICh1MSAqIHkyKSAgICAgIC0gKHkxICogdTIpICAgICAgLSAoeTAgKiB1MSkgICAgICAtICh1MCAqIHkyKTtcbiAgICB2YXIgZGVsdGFGID0gKHUwICogdjEgKiB5MikgKyAodjAgKiB5MSAqIHUyKSArICh5MCAqIHUxICogdjIpIC0gKHkwICogdjEgKiB1MikgLSAodjAgKiB1MSAqIHkyKSAtICh1MCAqIHkxICogdjIpO1xuXG4gICAgY29udGV4dC50cmFuc2Zvcm0oZGVsdGFBIC8gZGVsdGEsIGRlbHRhRCAvIGRlbHRhLFxuICAgICAgICBkZWx0YUIgLyBkZWx0YSwgZGVsdGFFIC8gZGVsdGEsXG4gICAgICAgIGRlbHRhQyAvIGRlbHRhLCBkZWx0YUYgLyBkZWx0YSk7XG5cbiAgICBjb250ZXh0LmRyYXdJbWFnZSh0ZXh0dXJlU291cmNlLCAwLCAwKTtcbiAgICBjb250ZXh0LnJlc3RvcmUoKTtcbn07XG5cblxuXG4vKipcbiAqIFJlbmRlcnMgYSBmbGF0IE1lc2hcbiAqXG4gKiBAcGFyYW0gTWVzaCB7UElYSS5tZXNoLk1lc2h9IFRoZSBNZXNoIHRvIHJlbmRlclxuICogQHByaXZhdGVcbiAqL1xuTWVzaC5wcm90b3R5cGUucmVuZGVyTWVzaEZsYXQgPSBmdW5jdGlvbiAoTWVzaClcbntcbiAgICB2YXIgY29udGV4dCA9IHRoaXMuY29udGV4dDtcbiAgICB2YXIgdmVydGljZXMgPSBNZXNoLnZlcnRpY2VzO1xuXG4gICAgdmFyIGxlbmd0aCA9IHZlcnRpY2VzLmxlbmd0aC8yO1xuICAgIC8vIHRoaXMuY291bnQrKztcblxuICAgIGNvbnRleHQuYmVnaW5QYXRoKCk7XG4gICAgZm9yICh2YXIgaT0xOyBpIDwgbGVuZ3RoLTI7IGkrKylcbiAgICB7XG4gICAgICAgIC8vIGRyYXcgc29tZSB0cmlhbmdsZXMhXG4gICAgICAgIHZhciBpbmRleCA9IGkqMjtcblxuICAgICAgICB2YXIgeDAgPSB2ZXJ0aWNlc1tpbmRleF0sICAgeDEgPSB2ZXJ0aWNlc1tpbmRleCsyXSwgeDIgPSB2ZXJ0aWNlc1tpbmRleCs0XTtcbiAgICAgICAgdmFyIHkwID0gdmVydGljZXNbaW5kZXgrMV0sIHkxID0gdmVydGljZXNbaW5kZXgrM10sIHkyID0gdmVydGljZXNbaW5kZXgrNV07XG5cbiAgICAgICAgY29udGV4dC5tb3ZlVG8oeDAsIHkwKTtcbiAgICAgICAgY29udGV4dC5saW5lVG8oeDEsIHkxKTtcbiAgICAgICAgY29udGV4dC5saW5lVG8oeDIsIHkyKTtcbiAgICB9XG5cbiAgICBjb250ZXh0LmZpbGxTdHlsZSA9ICcjRkYwMDAwJztcbiAgICBjb250ZXh0LmZpbGwoKTtcbiAgICBjb250ZXh0LmNsb3NlUGF0aCgpO1xufTtcblxuLyoqXG4gKiBXaGVuIHRoZSB0ZXh0dXJlIGlzIHVwZGF0ZWQsIHRoaXMgZXZlbnQgd2lsbCBmaXJlIHRvIHVwZGF0ZSB0aGUgc2NhbGUgYW5kIGZyYW1lXG4gKlxuICogQHBhcmFtIGV2ZW50XG4gKiBAcHJpdmF0ZVxuICovXG5NZXNoLnByb3RvdHlwZS5fb25UZXh0dXJlVXBkYXRlID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLnVwZGF0ZUZyYW1lID0gdHJ1ZTtcbn07XG5cbi8qKlxuICogUmV0dXJucyB0aGUgYm91bmRzIG9mIHRoZSBtZXNoIGFzIGEgcmVjdGFuZ2xlLiBUaGUgYm91bmRzIGNhbGN1bGF0aW9uIHRha2VzIHRoZSB3b3JsZFRyYW5zZm9ybSBpbnRvIGFjY291bnQuXG4gKlxuICogQHBhcmFtIG1hdHJpeCB7UElYSS5NYXRyaXh9IHRoZSB0cmFuc2Zvcm1hdGlvbiBtYXRyaXggb2YgdGhlIHNwcml0ZVxuICogQHJldHVybiB7UElYSS5SZWN0YW5nbGV9IHRoZSBmcmFtaW5nIHJlY3RhbmdsZVxuICovXG5NZXNoLnByb3RvdHlwZS5nZXRCb3VuZHMgPSBmdW5jdGlvbiAobWF0cml4KVxue1xuICAgIGlmICghdGhpcy5fY3VycmVudEJvdW5kcykge1xuICAgICAgICB2YXIgd29ybGRUcmFuc2Zvcm0gPSBtYXRyaXggfHwgdGhpcy53b3JsZFRyYW5zZm9ybTtcblxuICAgICAgICB2YXIgYSA9IHdvcmxkVHJhbnNmb3JtLmE7XG4gICAgICAgIHZhciBiID0gd29ybGRUcmFuc2Zvcm0uYjtcbiAgICAgICAgdmFyIGMgPSB3b3JsZFRyYW5zZm9ybS5jO1xuICAgICAgICB2YXIgZCA9IHdvcmxkVHJhbnNmb3JtLmQ7XG4gICAgICAgIHZhciB0eCA9IHdvcmxkVHJhbnNmb3JtLnR4O1xuICAgICAgICB2YXIgdHkgPSB3b3JsZFRyYW5zZm9ybS50eTtcblxuICAgICAgICB2YXIgbWF4WCA9IC1JbmZpbml0eTtcbiAgICAgICAgdmFyIG1heFkgPSAtSW5maW5pdHk7XG5cbiAgICAgICAgdmFyIG1pblggPSBJbmZpbml0eTtcbiAgICAgICAgdmFyIG1pblkgPSBJbmZpbml0eTtcblxuICAgICAgICB2YXIgdmVydGljZXMgPSB0aGlzLnZlcnRpY2VzO1xuICAgICAgICBmb3IgKHZhciBpID0gMCwgbiA9IHZlcnRpY2VzLmxlbmd0aDsgaSA8IG47IGkgKz0gMikge1xuICAgICAgICAgICAgdmFyIHJhd1ggPSB2ZXJ0aWNlc1tpXSwgcmF3WSA9IHZlcnRpY2VzW2kgKyAxXTtcbiAgICAgICAgICAgIHZhciB4ID0gKGEgKiByYXdYKSArIChjICogcmF3WSkgKyB0eDtcbiAgICAgICAgICAgIHZhciB5ID0gKGQgKiByYXdZKSArIChiICogcmF3WCkgKyB0eTtcblxuICAgICAgICAgICAgbWluWCA9IHggPCBtaW5YID8geCA6IG1pblg7XG4gICAgICAgICAgICBtaW5ZID0geSA8IG1pblkgPyB5IDogbWluWTtcblxuICAgICAgICAgICAgbWF4WCA9IHggPiBtYXhYID8geCA6IG1heFg7XG4gICAgICAgICAgICBtYXhZID0geSA+IG1heFkgPyB5IDogbWF4WTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChtaW5YID09PSAtSW5maW5pdHkgfHwgbWF4WSA9PT0gSW5maW5pdHkpIHtcbiAgICAgICAgICAgIHJldHVybiBjb3JlLlJlY3RhbmdsZS5FTVBUWTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBib3VuZHMgPSB0aGlzLl9ib3VuZHM7XG5cbiAgICAgICAgYm91bmRzLnggPSBtaW5YO1xuICAgICAgICBib3VuZHMud2lkdGggPSBtYXhYIC0gbWluWDtcblxuICAgICAgICBib3VuZHMueSA9IG1pblk7XG4gICAgICAgIGJvdW5kcy5oZWlnaHQgPSBtYXhZIC0gbWluWTtcblxuICAgICAgICAvLyBzdG9yZSBhIHJlZmVyZW5jZSBzbyB0aGF0IGlmIHRoaXMgZnVuY3Rpb24gZ2V0cyBjYWxsZWQgYWdhaW4gaW4gdGhlIHJlbmRlciBjeWNsZSB3ZSBkbyBub3QgaGF2ZSB0byByZWNhbGN1bGF0ZVxuICAgICAgICB0aGlzLl9jdXJyZW50Qm91bmRzID0gYm91bmRzO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLl9jdXJyZW50Qm91bmRzO1xufTtcblxuLyoqXG4gKiBUZXN0cyBpZiBhIHBvaW50IGlzIGluc2lkZSB0aGlzIG1lc2guIFdvcmtzIG9ubHkgZm9yIFRSSUFOR0xFX01FU0hcbiAqXG4gKiBAcGFyYW0gcG9pbnQge1BJWEkuUG9pbnR9IHRoZSBwb2ludCB0byB0ZXN0XG4gKiBAcmV0dXJuIHtib29sZWFufSB0aGUgcmVzdWx0IG9mIHRoZSB0ZXN0XG4gKi9cbk1lc2gucHJvdG90eXBlLmNvbnRhaW5zUG9pbnQgPSBmdW5jdGlvbiggcG9pbnQgKSB7XG4gICAgaWYgKCF0aGlzLmdldEJvdW5kcygpLmNvbnRhaW5zKHBvaW50LngsIHBvaW50LnkpKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgdGhpcy53b3JsZFRyYW5zZm9ybS5hcHBseUludmVyc2UocG9pbnQsICB0ZW1wUG9pbnQpO1xuXG4gICAgdmFyIHZlcnRpY2VzID0gdGhpcy52ZXJ0aWNlcztcbiAgICB2YXIgcG9pbnRzID0gdGVtcFBvbHlnb24ucG9pbnRzO1xuICAgIHZhciBpLCBsZW47XG5cbiAgICBpZiAodGhpcy5kcmF3TW9kZSA9PT0gTWVzaC5EUkFXX01PREVTLlRSSUFOR0xFUykge1xuICAgICAgICB2YXIgaW5kaWNlcyA9IHRoaXMuaW5kaWNlcztcbiAgICAgICAgbGVuID0gdGhpcy5pbmRpY2VzLmxlbmd0aDtcbiAgICAgICAgLy9UT0RPOiBpbmxpbmUgdGhpcy5cbiAgICAgICAgZm9yIChpPTA7aTxsZW47aSs9Mykge1xuICAgICAgICAgICAgdmFyIGluZDAgPSBpbmRpY2VzW2ldKjIsIGluZDEgPSBpbmRpY2VzW2krMV0qMiwgaW5kMiA9IGluZGljZXNbaSsyXSoyO1xuICAgICAgICAgICAgcG9pbnRzWzBdID0gdmVydGljZXNbaW5kMF07XG4gICAgICAgICAgICBwb2ludHNbMV0gPSB2ZXJ0aWNlc1tpbmQwKzFdO1xuICAgICAgICAgICAgcG9pbnRzWzJdID0gdmVydGljZXNbaW5kMV07XG4gICAgICAgICAgICBwb2ludHNbM10gPSB2ZXJ0aWNlc1tpbmQxKzFdO1xuICAgICAgICAgICAgcG9pbnRzWzRdID0gdmVydGljZXNbaW5kMl07XG4gICAgICAgICAgICBwb2ludHNbNV0gPSB2ZXJ0aWNlc1tpbmQyKzFdO1xuICAgICAgICAgICAgaWYgKHRlbXBQb2x5Z29uLmNvbnRhaW5zKHRlbXBQb2ludC54LCB0ZW1wUG9pbnQueSkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAgIGxlbiA9IHZlcnRpY2VzLmxlbmd0aDtcbiAgICAgICAgZm9yIChpPTA7aTxsZW47aSs9Nikge1xuICAgICAgICAgICAgcG9pbnRzWzBdID0gdmVydGljZXNbaV07XG4gICAgICAgICAgICBwb2ludHNbMV0gPSB2ZXJ0aWNlc1tpKzFdO1xuICAgICAgICAgICAgcG9pbnRzWzJdID0gdmVydGljZXNbaSsyXTtcbiAgICAgICAgICAgIHBvaW50c1szXSA9IHZlcnRpY2VzW2krM107XG4gICAgICAgICAgICBwb2ludHNbNF0gPSB2ZXJ0aWNlc1tpKzRdO1xuICAgICAgICAgICAgcG9pbnRzWzVdID0gdmVydGljZXNbaSs1XTtcbiAgICAgICAgICAgIGlmICh0ZW1wUG9seWdvbi5jb250YWlucyh0ZW1wUG9pbnQueCwgdGVtcFBvaW50LnkpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xufTtcblxuLyoqXG4gKiBEaWZmZXJlbnQgZHJhd2luZyBidWZmZXIgbW9kZXMgc3VwcG9ydGVkXG4gKlxuICogQHN0YXRpY1xuICogQGNvbnN0YW50XG4gKiBAcHJvcGVydHkge29iamVjdH0gRFJBV19NT0RFU1xuICogQHByb3BlcnR5IHtudW1iZXJ9IERSQVdfTU9ERVMuVFJJQU5HTEVfTUVTSFxuICogQHByb3BlcnR5IHtudW1iZXJ9IERSQVdfTU9ERVMuVFJJQU5HTEVTXG4gKi9cbk1lc2guRFJBV19NT0RFUyA9IHtcbiAgICBUUklBTkdMRV9NRVNIOiAwLFxuICAgIFRSSUFOR0xFUzogMVxufTtcbiIsInZhciBNZXNoID0gcmVxdWlyZSgnLi9NZXNoJyk7XG5cbi8qKlxuICogVGhlIFBsYW5lIGFsbG93cyB5b3UgdG8gZHJhdyBhIHRleHR1cmUgYWNyb3NzIHNldmVyYWwgcG9pbnRzIGFuZCB0aGVtIG1hbmlwdWxhdGUgdGhlc2UgcG9pbnRzXG4gKlxuICpgYGBqc1xuICogZm9yICh2YXIgaSA9IDA7IGkgPCAyMDsgaSsrKSB7XG4gKiAgICAgcG9pbnRzLnB1c2gobmV3IFBJWEkuUG9pbnQoaSAqIDUwLCAwKSk7XG4gKiB9O1xuICogdmFyIFBsYW5lID0gbmV3IFBJWEkuUGxhbmUoUElYSS5UZXh0dXJlLmZyb21JbWFnZShcInNuYWtlLnBuZ1wiKSwgcG9pbnRzKTtcbiAqICBgYGBcbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkubWVzaC5NZXNoXG4gKiBAbWVtYmVyb2YgUElYSS5tZXNoXG4gKiBAcGFyYW0ge1BJWEkuVGV4dHVyZX0gdGV4dHVyZSAtIFRoZSB0ZXh0dXJlIHRvIHVzZSBvbiB0aGUgUGxhbmUuXG4gKiBAcGFyYW0ge2ludH0gc2VnbWVudHNYIC0gVGhlIG51bWJlciBveCB4IHNlZ21lbnRzXG4gKiBAcGFyYW0ge2ludH0gc2VnbWVudHNZIC0gVGhlIG51bWJlciBvZiB5IHNlZ21lbnRzXG4gKlxuICovXG5mdW5jdGlvbiBQbGFuZSh0ZXh0dXJlLCBzZWdtZW50c1gsIHNlZ21lbnRzWSlcbntcbiAgICBNZXNoLmNhbGwodGhpcywgdGV4dHVyZSk7XG5cbiAgICAvKipcbiAgICAgKiBUcmFja2VyIGZvciBpZiB0aGUgUGxhbmUgaXMgcmVhZHkgdG8gYmUgZHJhd24uIE5lZWRlZCBiZWNhdXNlIE1lc2ggY3RvciBjYW5cbiAgICAgKiBjYWxsIF9vblRleHR1cmVVcGRhdGVkIHdoaWNoIGNvdWxkIGNhbGwgcmVmcmVzaCB0b28gZWFybHkuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fcmVhZHkgPSB0cnVlO1xuXG4gICAgdGhpcy5zZWdtZW50c1ggPSAgc2VnbWVudHNYIHx8IDEwO1xuICAgIHRoaXMuc2VnbWVudHNZID0gc2VnbWVudHNZIHx8IDEwO1xuXG4gICAgdGhpcy5kcmF3TW9kZSA9IE1lc2guRFJBV19NT0RFUy5UUklBTkdMRVM7XG4gICAgdGhpcy5yZWZyZXNoKCk7XG5cbn1cblxuXG4vLyBjb25zdHJ1Y3RvclxuUGxhbmUucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZSggTWVzaC5wcm90b3R5cGUgKTtcblBsYW5lLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFBsYW5lO1xubW9kdWxlLmV4cG9ydHMgPSBQbGFuZTtcblxuLyoqXG4gKiBSZWZyZXNoZXNcbiAqXG4gKi9cblBsYW5lLnByb3RvdHlwZS5yZWZyZXNoID0gZnVuY3Rpb24oKVxue1xuICAgIHZhciB0b3RhbCA9IHRoaXMuc2VnbWVudHNYICogdGhpcy5zZWdtZW50c1k7XG4gICAgdmFyIHZlcnRzID0gW107XG4gICAgdmFyIGNvbG9ycyA9IFtdO1xuICAgIHZhciB1dnMgPSBbXTtcbiAgICB2YXIgaW5kaWNlcyA9IFtdO1xuICAgIHZhciB0ZXh0dXJlID0gdGhpcy50ZXh0dXJlO1xuXG4gIC8vICB0ZXh0dXJlLndpZHRoID0gODAwIHRleHR1cmUud2lkdGggfHwgODAwO1xuIC8vICAgdGV4dHVyZS5oZWlnaHQgPSA4MDAvL3RleHR1cmUuaGVpZ2h0IHx8IDgwMDtcblxuICAgIHZhciBzZWdtZW50c1hTdWIgPSB0aGlzLnNlZ21lbnRzWCAtIDE7XG4gICAgdmFyIHNlZ21lbnRzWVN1YiA9IHRoaXMuc2VnbWVudHNZIC0gMTtcbiAgICB2YXIgaSA9IDA7XG5cbiAgICB2YXIgc2l6ZVggPSB0ZXh0dXJlLndpZHRoIC8gc2VnbWVudHNYU3ViO1xuICAgIHZhciBzaXplWSA9IHRleHR1cmUuaGVpZ2h0IC8gc2VnbWVudHNZU3ViO1xuXG4gICAgZm9yIChpID0gMDsgaSA8IHRvdGFsOyBpKyspIHtcblxuICAgICAgICB2YXIgeCA9IChpICUgdGhpcy5zZWdtZW50c1gpO1xuICAgICAgICB2YXIgeSA9ICggKGkgLyB0aGlzLnNlZ21lbnRzWCApIHwgMCApO1xuXG5cbiAgICAgICAgdmVydHMucHVzaCgoeCAqIHNpemVYKSxcbiAgICAgICAgICAgICAgICAgICAoeSAqIHNpemVZKSk7XG5cbiAgICAgICAgLy8gdGhpcyB3b3JrcyBmb3IgcmVjdGFuZ3VsYXIgdGV4dHVyZXMuIFxuICAgICAgICB1dnMucHVzaCh0ZXh0dXJlLl91dnMueDAgKyAodGV4dHVyZS5fdXZzLngxIC0gdGV4dHVyZS5fdXZzLngwKSAqICh4IC8gKHRoaXMuc2VnbWVudHNYLTEpKSwgdGV4dHVyZS5fdXZzLnkwICsgKHRleHR1cmUuX3V2cy55My10ZXh0dXJlLl91dnMueTApICogKHkvICh0aGlzLnNlZ21lbnRzWS0xKSkpO1xuICAgICAgfVxuXG4gICAgLy8gIGNvbnNcblxuICAgIHZhciB0b3RhbFN1YiA9IHNlZ21lbnRzWFN1YiAqIHNlZ21lbnRzWVN1YjtcblxuICAgIGZvciAoaSA9IDA7IGkgPCB0b3RhbFN1YjsgaSsrKSB7XG5cbiAgICAgICAgdmFyIHhwb3MgPSBpICUgc2VnbWVudHNYU3ViO1xuICAgICAgICB2YXIgeXBvcyA9IChpIC8gc2VnbWVudHNYU3ViICkgfCAwO1xuXG5cbiAgICAgICAgdmFyICB2YWx1ZSA9ICh5cG9zICogdGhpcy5zZWdtZW50c1gpICsgeHBvcztcbiAgICAgICAgdmFyICB2YWx1ZTIgPSAoeXBvcyAqIHRoaXMuc2VnbWVudHNYKSArIHhwb3MgKyAxO1xuICAgICAgICB2YXIgIHZhbHVlMyA9ICgoeXBvcysxKSAqIHRoaXMuc2VnbWVudHNYKSArIHhwb3M7XG4gICAgICAgIHZhciAgdmFsdWU0ID0gKCh5cG9zKzEpICogdGhpcy5zZWdtZW50c1gpICsgeHBvcyArIDE7XG5cbiAgICAgICAgaW5kaWNlcy5wdXNoKHZhbHVlLCB2YWx1ZTIsIHZhbHVlMyk7XG4gICAgICAgIGluZGljZXMucHVzaCh2YWx1ZTIsIHZhbHVlNCwgdmFsdWUzKTtcbiAgICB9XG5cblxuICAgIC8vY29uc29sZS5sb2coaW5kaWNlcylcbiAgICB0aGlzLnZlcnRpY2VzID0gbmV3IEZsb2F0MzJBcnJheSh2ZXJ0cyk7XG4gICAgdGhpcy51dnMgPSBuZXcgRmxvYXQzMkFycmF5KHV2cyk7XG4gICAgdGhpcy5jb2xvcnMgPSBuZXcgRmxvYXQzMkFycmF5KGNvbG9ycyk7XG4gICAgdGhpcy5pbmRpY2VzID0gbmV3IFVpbnQxNkFycmF5KGluZGljZXMpO1xufTtcblxuLyoqXG4gKiBDbGVhciB0ZXh0dXJlIFVWcyB3aGVuIG5ldyB0ZXh0dXJlIGlzIHNldFxuICpcbiAqIEBwcml2YXRlXG4gKi9cblBsYW5lLnByb3RvdHlwZS5fb25UZXh0dXJlVXBkYXRlID0gZnVuY3Rpb24gKClcbntcbiAgICBNZXNoLnByb3RvdHlwZS5fb25UZXh0dXJlVXBkYXRlLmNhbGwodGhpcyk7XG5cbiAgICAvLyB3YWl0IGZvciB0aGUgUGxhbmUgY3RvciB0byBmaW5pc2ggYmVmb3JlIGNhbGxpbmcgcmVmcmVzaFxuICAgIGlmICh0aGlzLl9yZWFkeSkge1xuICAgICAgICB0aGlzLnJlZnJlc2goKTtcbiAgICB9XG59O1xuIiwidmFyIE1lc2ggPSByZXF1aXJlKCcuL01lc2gnKTtcbnZhciBjb3JlID0gcmVxdWlyZSgnLi4vY29yZScpO1xuXG4vKipcbiAqIFRoZSByb3BlIGFsbG93cyB5b3UgdG8gZHJhdyBhIHRleHR1cmUgYWNyb3NzIHNldmVyYWwgcG9pbnRzIGFuZCB0aGVtIG1hbmlwdWxhdGUgdGhlc2UgcG9pbnRzXG4gKlxuICpgYGBqc1xuICogZm9yICh2YXIgaSA9IDA7IGkgPCAyMDsgaSsrKSB7XG4gKiAgICAgcG9pbnRzLnB1c2gobmV3IFBJWEkuUG9pbnQoaSAqIDUwLCAwKSk7XG4gKiB9O1xuICogdmFyIHJvcGUgPSBuZXcgUElYSS5Sb3BlKFBJWEkuVGV4dHVyZS5mcm9tSW1hZ2UoXCJzbmFrZS5wbmdcIiksIHBvaW50cyk7XG4gKiAgYGBgXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLm1lc2guTWVzaFxuICogQG1lbWJlcm9mIFBJWEkubWVzaFxuICogQHBhcmFtIHtQSVhJLlRleHR1cmV9IHRleHR1cmUgLSBUaGUgdGV4dHVyZSB0byB1c2Ugb24gdGhlIHJvcGUuXG4gKiBAcGFyYW0ge1BJWEkuUG9pbnRbXX0gcG9pbnRzIC0gQW4gYXJyYXkgb2Yge0BsaW5rIFBJWEkuUG9pbnR9IG9iamVjdHMgdG8gY29uc3RydWN0IHRoaXMgcm9wZS5cbiAqXG4gKi9cbmZ1bmN0aW9uIFJvcGUodGV4dHVyZSwgcG9pbnRzKVxue1xuICAgIE1lc2guY2FsbCh0aGlzLCB0ZXh0dXJlKTtcblxuICAgIC8qXG4gICAgICogQG1lbWJlciB7UElYSS5Qb2ludFtdfSBBbiBhcnJheSBvZiBwb2ludHMgdGhhdCBkZXRlcm1pbmUgdGhlIHJvcGVcbiAgICAgKi9cbiAgICB0aGlzLnBvaW50cyA9IHBvaW50cztcblxuICAgIC8qXG4gICAgICogQG1lbWJlciB7RmxvYXQzMkFycmF5fSBBbiBhcnJheSBvZiB2ZXJ0aWNlcyB1c2VkIHRvIGNvbnN0cnVjdCB0aGlzIHJvcGUuXG4gICAgICovXG4gICAgdGhpcy52ZXJ0aWNlcyA9IG5ldyBGbG9hdDMyQXJyYXkocG9pbnRzLmxlbmd0aCAqIDQpO1xuXG4gICAgLypcbiAgICAgKiBAbWVtYmVyIHtGbG9hdDMyQXJyYXl9IFRoZSBXZWJHTCBVdnMgb2YgdGhlIHJvcGUuXG4gICAgICovXG4gICAgdGhpcy51dnMgPSBuZXcgRmxvYXQzMkFycmF5KHBvaW50cy5sZW5ndGggKiA0KTtcblxuICAgIC8qXG4gICAgICogQG1lbWJlciB7RmxvYXQzMkFycmF5fSBBbiBhcnJheSBjb250YWluaW5nIHRoZSBjb2xvciBjb21wb25lbnRzXG4gICAgICovXG4gICAgdGhpcy5jb2xvcnMgPSBuZXcgRmxvYXQzMkFycmF5KHBvaW50cy5sZW5ndGggKiAyKTtcblxuICAgIC8qXG4gICAgICogQG1lbWJlciB7VWludDE2QXJyYXl9IEFuIGFycmF5IGNvbnRhaW5pbmcgdGhlIGluZGljZXMgb2YgdGhlIHZlcnRpY2VzXG4gICAgICovXG4gICAgdGhpcy5pbmRpY2VzID0gbmV3IFVpbnQxNkFycmF5KHBvaW50cy5sZW5ndGggKiAyKTtcblxuICAgIC8qKlxuICAgICAqIFRyYWNrZXIgZm9yIGlmIHRoZSByb3BlIGlzIHJlYWR5IHRvIGJlIGRyYXduLiBOZWVkZWQgYmVjYXVzZSBNZXNoIGN0b3IgY2FuXG4gICAgICogY2FsbCBfb25UZXh0dXJlVXBkYXRlZCB3aGljaCBjb3VsZCBjYWxsIHJlZnJlc2ggdG9vIGVhcmx5LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgICB0aGlzLl9yZWFkeSA9IHRydWU7XG5cbiAgICAgdGhpcy5yZWZyZXNoKCk7XG59XG5cblxuLy8gY29uc3RydWN0b3JcblJvcGUucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShNZXNoLnByb3RvdHlwZSk7XG5Sb3BlLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFJvcGU7XG5tb2R1bGUuZXhwb3J0cyA9IFJvcGU7XG5cbi8qKlxuICogUmVmcmVzaGVzXG4gKlxuICovXG5Sb3BlLnByb3RvdHlwZS5yZWZyZXNoID0gZnVuY3Rpb24gKClcbntcbiAgICB2YXIgcG9pbnRzID0gdGhpcy5wb2ludHM7XG5cbiAgICAvLyBpZiB0b28gbGl0dGxlIHBvaW50cywgb3IgdGV4dHVyZSBoYXNuJ3QgZ290IFVWcyBzZXQgeWV0IGp1c3QgbW92ZSBvbi5cbiAgICBpZiAocG9pbnRzLmxlbmd0aCA8IDEgfHwgIXRoaXMuX3RleHR1cmUuX3V2cylcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB2YXIgdXZzID0gdGhpcy51dnM7XG5cbiAgICB2YXIgaW5kaWNlcyA9IHRoaXMuaW5kaWNlcztcbiAgICB2YXIgY29sb3JzID0gdGhpcy5jb2xvcnM7XG5cbiAgICB2YXIgdGV4dHVyZVV2cyA9IHRoaXMuX3RleHR1cmUuX3V2cztcbiAgICB2YXIgb2Zmc2V0ID0gbmV3IGNvcmUuUG9pbnQodGV4dHVyZVV2cy54MCwgdGV4dHVyZVV2cy55MCk7XG4gICAgdmFyIGZhY3RvciA9IG5ldyBjb3JlLlBvaW50KHRleHR1cmVVdnMueDIgLSB0ZXh0dXJlVXZzLngwLCB0ZXh0dXJlVXZzLnkyIC0gdGV4dHVyZVV2cy55MCk7XG5cbiAgICB1dnNbMF0gPSAwICsgb2Zmc2V0Lng7XG4gICAgdXZzWzFdID0gMCArIG9mZnNldC55O1xuICAgIHV2c1syXSA9IDAgKyBvZmZzZXQueDtcbiAgICB1dnNbM10gPSAxICogZmFjdG9yLnkgKyBvZmZzZXQueTtcblxuICAgIGNvbG9yc1swXSA9IDE7XG4gICAgY29sb3JzWzFdID0gMTtcblxuICAgIGluZGljZXNbMF0gPSAwO1xuICAgIGluZGljZXNbMV0gPSAxO1xuXG4gICAgdmFyIHRvdGFsID0gcG9pbnRzLmxlbmd0aCxcbiAgICAgICAgcG9pbnQsIGluZGV4LCBhbW91bnQ7XG5cbiAgICBmb3IgKHZhciBpID0gMTsgaSA8IHRvdGFsOyBpKyspXG4gICAge1xuICAgICAgICBwb2ludCA9IHBvaW50c1tpXTtcbiAgICAgICAgaW5kZXggPSBpICogNDtcbiAgICAgICAgLy8gdGltZSB0byBkbyBzb21lIHNtYXJ0IGRyYXdpbmchXG4gICAgICAgIGFtb3VudCA9IGkgLyAodG90YWwtMSk7XG5cbiAgICAgICAgdXZzW2luZGV4XSA9IGFtb3VudCAqIGZhY3Rvci54ICsgb2Zmc2V0Lng7XG4gICAgICAgIHV2c1tpbmRleCsxXSA9IDAgKyBvZmZzZXQueTtcblxuICAgICAgICB1dnNbaW5kZXgrMl0gPSBhbW91bnQgKiBmYWN0b3IueCArIG9mZnNldC54O1xuICAgICAgICB1dnNbaW5kZXgrM10gPSAxICogZmFjdG9yLnkgKyBvZmZzZXQueTtcblxuICAgICAgICBpbmRleCA9IGkgKiAyO1xuICAgICAgICBjb2xvcnNbaW5kZXhdID0gMTtcbiAgICAgICAgY29sb3JzW2luZGV4KzFdID0gMTtcblxuICAgICAgICBpbmRleCA9IGkgKiAyO1xuICAgICAgICBpbmRpY2VzW2luZGV4XSA9IGluZGV4O1xuICAgICAgICBpbmRpY2VzW2luZGV4ICsgMV0gPSBpbmRleCArIDE7XG4gICAgfVxuXG4gICAgdGhpcy5kaXJ0eSA9IHRydWU7XG59O1xuXG4vKipcbiAqIENsZWFyIHRleHR1cmUgVVZzIHdoZW4gbmV3IHRleHR1cmUgaXMgc2V0XG4gKlxuICogQHByaXZhdGVcbiAqL1xuUm9wZS5wcm90b3R5cGUuX29uVGV4dHVyZVVwZGF0ZSA9IGZ1bmN0aW9uICgpXG57XG4gICAgTWVzaC5wcm90b3R5cGUuX29uVGV4dHVyZVVwZGF0ZS5jYWxsKHRoaXMpO1xuXG4gICAgLy8gd2FpdCBmb3IgdGhlIFJvcGUgY3RvciB0byBmaW5pc2ggYmVmb3JlIGNhbGxpbmcgcmVmcmVzaFxuICAgIGlmICh0aGlzLl9yZWFkeSkge1xuICAgICAgICB0aGlzLnJlZnJlc2goKTtcbiAgICB9XG59O1xuXG4vKipcbiAqIFVwZGF0ZXMgdGhlIG9iamVjdCB0cmFuc2Zvcm0gZm9yIHJlbmRlcmluZ1xuICpcbiAqIEBwcml2YXRlXG4gKi9cblJvcGUucHJvdG90eXBlLnVwZGF0ZVRyYW5zZm9ybSA9IGZ1bmN0aW9uICgpXG57XG4gICAgdmFyIHBvaW50cyA9IHRoaXMucG9pbnRzO1xuXG4gICAgaWYgKHBvaW50cy5sZW5ndGggPCAxKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHZhciBsYXN0UG9pbnQgPSBwb2ludHNbMF07XG4gICAgdmFyIG5leHRQb2ludDtcbiAgICB2YXIgcGVycFggPSAwO1xuICAgIHZhciBwZXJwWSA9IDA7XG5cbiAgICAvLyB0aGlzLmNvdW50IC09IDAuMjtcblxuICAgIHZhciB2ZXJ0aWNlcyA9IHRoaXMudmVydGljZXM7XG4gICAgdmFyIHRvdGFsID0gcG9pbnRzLmxlbmd0aCxcbiAgICAgICAgcG9pbnQsIGluZGV4LCByYXRpbywgcGVycExlbmd0aCwgbnVtO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0b3RhbDsgaSsrKVxuICAgIHtcbiAgICAgICAgcG9pbnQgPSBwb2ludHNbaV07XG4gICAgICAgIGluZGV4ID0gaSAqIDQ7XG5cbiAgICAgICAgaWYgKGkgPCBwb2ludHMubGVuZ3RoLTEpXG4gICAgICAgIHtcbiAgICAgICAgICAgIG5leHRQb2ludCA9IHBvaW50c1tpKzFdO1xuICAgICAgICB9XG4gICAgICAgIGVsc2VcbiAgICAgICAge1xuICAgICAgICAgICAgbmV4dFBvaW50ID0gcG9pbnQ7XG4gICAgICAgIH1cblxuICAgICAgICBwZXJwWSA9IC0obmV4dFBvaW50LnggLSBsYXN0UG9pbnQueCk7XG4gICAgICAgIHBlcnBYID0gbmV4dFBvaW50LnkgLSBsYXN0UG9pbnQueTtcblxuICAgICAgICByYXRpbyA9ICgxIC0gKGkgLyAodG90YWwtMSkpKSAqIDEwO1xuXG4gICAgICAgIGlmIChyYXRpbyA+IDEpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJhdGlvID0gMTtcbiAgICAgICAgfVxuXG4gICAgICAgIHBlcnBMZW5ndGggPSBNYXRoLnNxcnQocGVycFggKiBwZXJwWCArIHBlcnBZICogcGVycFkpO1xuICAgICAgICBudW0gPSB0aGlzLl90ZXh0dXJlLmhlaWdodCAvIDI7IC8vKDIwICsgTWF0aC5hYnMoTWF0aC5zaW4oKGkgKyB0aGlzLmNvdW50KSAqIDAuMykgKiA1MCkgKSogcmF0aW87XG4gICAgICAgIHBlcnBYIC89IHBlcnBMZW5ndGg7XG4gICAgICAgIHBlcnBZIC89IHBlcnBMZW5ndGg7XG5cbiAgICAgICAgcGVycFggKj0gbnVtO1xuICAgICAgICBwZXJwWSAqPSBudW07XG5cbiAgICAgICAgdmVydGljZXNbaW5kZXhdID0gcG9pbnQueCArIHBlcnBYO1xuICAgICAgICB2ZXJ0aWNlc1tpbmRleCsxXSA9IHBvaW50LnkgKyBwZXJwWTtcbiAgICAgICAgdmVydGljZXNbaW5kZXgrMl0gPSBwb2ludC54IC0gcGVycFg7XG4gICAgICAgIHZlcnRpY2VzW2luZGV4KzNdID0gcG9pbnQueSAtIHBlcnBZO1xuXG4gICAgICAgIGxhc3RQb2ludCA9IHBvaW50O1xuICAgIH1cblxuICAgIHRoaXMuY29udGFpbmVyVXBkYXRlVHJhbnNmb3JtKCk7XG59O1xuIiwiLyoqXG4gKiBAZmlsZSAgICAgICAgTWFpbiBleHBvcnQgb2YgdGhlIFBJWEkgZXh0cmFzIGxpYnJhcnlcbiAqIEBhdXRob3IgICAgICBNYXQgR3JvdmVzIDxtYXRAZ29vZGJveWRpZ2l0YWwuY29tPlxuICogQGNvcHlyaWdodCAgIDIwMTMtMjAxNSBHb29kQm95RGlnaXRhbFxuICogQGxpY2Vuc2UgICAgIHtAbGluayBodHRwczovL2dpdGh1Yi5jb20vcGl4aWpzL3BpeGkuanMvYmxvYi9tYXN0ZXIvTElDRU5TRXxNSVQgTGljZW5zZX1cbiAqL1xuXG4vKipcbiAqIEBuYW1lc3BhY2UgUElYSS5tZXNoXG4gKi9cbm1vZHVsZS5leHBvcnRzID0ge1xuICAgIE1lc2g6ICAgICAgICAgICByZXF1aXJlKCcuL01lc2gnKSxcbiAgICBQbGFuZTogICAgICAgICAgIHJlcXVpcmUoJy4vUGxhbmUnKSxcbiAgICBSb3BlOiAgICAgICAgICAgcmVxdWlyZSgnLi9Sb3BlJyksXG4gICAgTWVzaFJlbmRlcmVyOiAgIHJlcXVpcmUoJy4vd2ViZ2wvTWVzaFJlbmRlcmVyJyksXG4gICAgTWVzaFNoYWRlcjogICAgIHJlcXVpcmUoJy4vd2ViZ2wvTWVzaFNoYWRlcicpXG59O1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi8uLi9jb3JlJyksXG4gICAgTWVzaCA9IHJlcXVpcmUoJy4uL01lc2gnKTtcblxuLyoqXG4gKiBAYXV0aG9yIE1hdCBHcm92ZXNcbiAqXG4gKiBCaWcgdGhhbmtzIHRvIHRoZSB2ZXJ5IGNsZXZlciBNYXR0IERlc0xhdXJpZXJzIDxtYXR0ZGVzbD4gaHR0cHM6Ly9naXRodWIuY29tL21hdHRkZXNsL1xuICogZm9yIGNyZWF0aW5nIHRoZSBvcmlnaW5hbCBwaXhpIHZlcnNpb24hXG4gKiBBbHNvIGEgdGhhbmtzIHRvIGh0dHBzOi8vZ2l0aHViLmNvbS9iY2hldmFsaWVyIGZvciB0d2Vha2luZyB0aGUgdGludCBhbmQgYWxwaGEgc28gdGhhdCB0aGV5IG5vdyBzaGFyZSA0IGJ5dGVzIG9uIHRoZSB2ZXJ0ZXggYnVmZmVyXG4gKlxuICogSGVhdmlseSBpbnNwaXJlZCBieSBMaWJHRFgncyBNZXNoUmVuZGVyZXI6XG4gKiBodHRwczovL2dpdGh1Yi5jb20vbGliZ2R4L2xpYmdkeC9ibG9iL21hc3Rlci9nZHgvc3JjL2NvbS9iYWRsb2dpYy9nZHgvZ3JhcGhpY3MvZzJkL01lc2hSZW5kZXJlci5qYXZhXG4gKi9cblxuLyoqXG4gKlxuICogQGNsYXNzXG4gKiBAcHJpdmF0ZVxuICogQG1lbWJlcm9mIFBJWEkubWVzaFxuICogQGV4dGVuZHMgUElYSS5PYmplY3RSZW5kZXJlclxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLldlYkdMUmVuZGVyZXJ9IFRoZSByZW5kZXJlciB0aGlzIHNwcml0ZSBiYXRjaCB3b3JrcyBmb3IuXG4gKi9cbmZ1bmN0aW9uIE1lc2hSZW5kZXJlcihyZW5kZXJlcilcbntcbiAgICBjb3JlLk9iamVjdFJlbmRlcmVyLmNhbGwodGhpcywgcmVuZGVyZXIpO1xuXG5cbiAgICAvKipcbiAgICAgKiBIb2xkcyB0aGUgaW5kaWNlc1xuICAgICAqXG4gICAgICogQG1lbWJlciB7VWludDE2QXJyYXl9XG4gICAgICovXG4gICAgXG4gICAgdGhpcy5pbmRpY2VzID0gbmV3IFVpbnQxNkFycmF5KDE1MDAwKTtcblxuICAgIC8vVE9ETyB0aGlzIGNvdWxkIGJlIGEgc2luZ2xlIGJ1ZmZlciBzaGFyZWQgYW1vbmdzdCBhbGwgcmVuZGVyZXJzIGFzIHdlIHJldXNlIHRoaXMgc2V0IHVwIGluIG1vc3QgcmVuZGVyZXJzXG4gICAgZm9yICh2YXIgaT0wLCBqPTA7IGkgPCAxNTAwMDsgaSArPSA2LCBqICs9IDQpXG4gICAge1xuICAgICAgICB0aGlzLmluZGljZXNbaSArIDBdID0gaiArIDA7XG4gICAgICAgIHRoaXMuaW5kaWNlc1tpICsgMV0gPSBqICsgMTtcbiAgICAgICAgdGhpcy5pbmRpY2VzW2kgKyAyXSA9IGogKyAyO1xuICAgICAgICB0aGlzLmluZGljZXNbaSArIDNdID0gaiArIDA7XG4gICAgICAgIHRoaXMuaW5kaWNlc1tpICsgNF0gPSBqICsgMjtcbiAgICAgICAgdGhpcy5pbmRpY2VzW2kgKyA1XSA9IGogKyAzO1xuICAgIH1cblxuICAgIHRoaXMuY3VycmVudFNoYWRlciA9IG51bGw7XG59XG5cbk1lc2hSZW5kZXJlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuT2JqZWN0UmVuZGVyZXIucHJvdG90eXBlKTtcbk1lc2hSZW5kZXJlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBNZXNoUmVuZGVyZXI7XG5tb2R1bGUuZXhwb3J0cyA9IE1lc2hSZW5kZXJlcjtcblxuY29yZS5XZWJHTFJlbmRlcmVyLnJlZ2lzdGVyUGx1Z2luKCdtZXNoJywgTWVzaFJlbmRlcmVyKTtcblxuLyoqXG4gKiBTZXRzIHVwIHRoZSByZW5kZXJlciBjb250ZXh0IGFuZCBuZWNlc3NhcnkgYnVmZmVycy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIGdsIHtXZWJHTFJlbmRlcmluZ0NvbnRleHR9IHRoZSBjdXJyZW50IFdlYkdMIGRyYXdpbmcgY29udGV4dFxuICovXG5NZXNoUmVuZGVyZXIucHJvdG90eXBlLm9uQ29udGV4dENoYW5nZSA9IGZ1bmN0aW9uICgpXG57XG5cbn07XG5cbi8qKlxuICogUmVuZGVycyB0aGUgc3ByaXRlIG9iamVjdC5cbiAqXG4gKiBAcGFyYW0gbWVzaCB7UElYSS5tZXNoLk1lc2h9IHRoZSBtZXNoIHRvIHJlbmRlclxuICovXG5NZXNoUmVuZGVyZXIucHJvdG90eXBlLnJlbmRlciA9IGZ1bmN0aW9uIChtZXNoKVxue1xuICAgIGlmKCFtZXNoLl92ZXJ0ZXhCdWZmZXIpXG4gICAge1xuICAgICAgICB0aGlzLl9pbml0V2ViR0wobWVzaCk7XG4gICAgfVxuXG4gICAgdmFyIHJlbmRlcmVyID0gdGhpcy5yZW5kZXJlcixcbiAgICAgICAgZ2wgPSByZW5kZXJlci5nbCxcbiAgICAgICAgdGV4dHVyZSA9IG1lc2guX3RleHR1cmUuYmFzZVRleHR1cmUsXG4gICAgICAgIHNoYWRlciA9IG1lc2guc2hhZGVyOy8vIHx8IHJlbmRlcmVyLnNoYWRlck1hbmFnZXIucGx1Z2lucy5tZXNoU2hhZGVyO1xuXG4gICAgdmFyIGRyYXdNb2RlID0gbWVzaC5kcmF3TW9kZSA9PT0gTWVzaC5EUkFXX01PREVTLlRSSUFOR0xFX01FU0ggPyBnbC5UUklBTkdMRV9TVFJJUCA6IGdsLlRSSUFOR0xFUztcblxuICAgIHJlbmRlcmVyLmJsZW5kTW9kZU1hbmFnZXIuc2V0QmxlbmRNb2RlKG1lc2guYmxlbmRNb2RlKTtcblxuICAgIC8vVE9ETyBjYWNoZSBjdXN0b20gc3RhdGUuLlxuICAgIGlmICghc2hhZGVyKVxuICAgIHtcbiAgICAgICAgc2hhZGVyID0gcmVuZGVyZXIuc2hhZGVyTWFuYWdlci5wbHVnaW5zLm1lc2hTaGFkZXI7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHNoYWRlciA9IHNoYWRlci5zaGFkZXJzW2dsLmlkXSB8fCBzaGFkZXIuZ2V0U2hhZGVyKHJlbmRlcmVyKTsvLyA6IHNoYWRlcjtcbiAgICB9XG5cbiAgICB0aGlzLnJlbmRlcmVyLnNoYWRlck1hbmFnZXIuc2V0U2hhZGVyKHNoYWRlcik7XG5cbiAgICBzaGFkZXIudW5pZm9ybXMudHJhbnNsYXRpb25NYXRyaXgudmFsdWUgPSBtZXNoLndvcmxkVHJhbnNmb3JtLnRvQXJyYXkodHJ1ZSk7XG4gICAgc2hhZGVyLnVuaWZvcm1zLnByb2plY3Rpb25NYXRyaXgudmFsdWUgPSByZW5kZXJlci5jdXJyZW50UmVuZGVyVGFyZ2V0LnByb2plY3Rpb25NYXRyaXgudG9BcnJheSh0cnVlKTtcbiAgICBzaGFkZXIudW5pZm9ybXMuYWxwaGEudmFsdWUgPSBtZXNoLndvcmxkQWxwaGE7XG5cbiAgICBzaGFkZXIuc3luY1VuaWZvcm1zKCk7XG5cbiAgICBpZiAoIW1lc2guZGlydHkpXG4gICAge1xuXG4gICAgICAgIGdsLmJpbmRCdWZmZXIoZ2wuQVJSQVlfQlVGRkVSLCBtZXNoLl92ZXJ0ZXhCdWZmZXIpO1xuICAgICAgICBnbC5idWZmZXJTdWJEYXRhKGdsLkFSUkFZX0JVRkZFUiwgMCwgbWVzaC52ZXJ0aWNlcyk7XG4gICAgICAgIGdsLnZlcnRleEF0dHJpYlBvaW50ZXIoc2hhZGVyLmF0dHJpYnV0ZXMuYVZlcnRleFBvc2l0aW9uLCAyLCBnbC5GTE9BVCwgZmFsc2UsIDAsIDApO1xuXG4gICAgICAgIC8vIHVwZGF0ZSB0aGUgdXZzXG4gICAgICAgIGdsLmJpbmRCdWZmZXIoZ2wuQVJSQVlfQlVGRkVSLCBtZXNoLl91dkJ1ZmZlcik7XG4gICAgICAgIGdsLnZlcnRleEF0dHJpYlBvaW50ZXIoc2hhZGVyLmF0dHJpYnV0ZXMuYVRleHR1cmVDb29yZCwgMiwgZ2wuRkxPQVQsIGZhbHNlLCAwLCAwKTtcblxuXG4gICAgICAgIGdsLmFjdGl2ZVRleHR1cmUoZ2wuVEVYVFVSRTApO1xuXG4gICAgICAgaWYgKCF0ZXh0dXJlLl9nbFRleHR1cmVzW2dsLmlkXSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5yZW5kZXJlci51cGRhdGVUZXh0dXJlKHRleHR1cmUpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2VcbiAgICAgICAge1xuICAgICAgICAgICAgLy8gYmluZCB0aGUgY3VycmVudCB0ZXh0dXJlXG4gICAgICAgICAgICBnbC5iaW5kVGV4dHVyZShnbC5URVhUVVJFXzJELCB0ZXh0dXJlLl9nbFRleHR1cmVzW2dsLmlkXSk7XG4gICAgICAgIH1cblxuICAgICAgICBnbC5iaW5kQnVmZmVyKGdsLkVMRU1FTlRfQVJSQVlfQlVGRkVSLCBtZXNoLl9pbmRleEJ1ZmZlcik7XG4gICAgICAgIGdsLmJ1ZmZlclN1YkRhdGEoZ2wuRUxFTUVOVF9BUlJBWV9CVUZGRVIsIDAsIG1lc2guaW5kaWNlcyk7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG5cbiAgICAgICAgbWVzaC5kaXJ0eSA9IGZhbHNlO1xuICAgICAgICBnbC5iaW5kQnVmZmVyKGdsLkFSUkFZX0JVRkZFUiwgbWVzaC5fdmVydGV4QnVmZmVyKTtcbiAgICAgICAgZ2wuYnVmZmVyRGF0YShnbC5BUlJBWV9CVUZGRVIsIG1lc2gudmVydGljZXMsIGdsLlNUQVRJQ19EUkFXKTtcbiAgICAgICAgZ2wudmVydGV4QXR0cmliUG9pbnRlcihzaGFkZXIuYXR0cmlidXRlcy5hVmVydGV4UG9zaXRpb24sIDIsIGdsLkZMT0FULCBmYWxzZSwgMCwgMCk7XG5cbiAgICAgICAgLy8gdXBkYXRlIHRoZSB1dnNcbiAgICAgICAgZ2wuYmluZEJ1ZmZlcihnbC5BUlJBWV9CVUZGRVIsIG1lc2guX3V2QnVmZmVyKTtcbiAgICAgICAgZ2wuYnVmZmVyRGF0YShnbC5BUlJBWV9CVUZGRVIsIG1lc2gudXZzLCBnbC5TVEFUSUNfRFJBVyk7XG4gICAgICAgIGdsLnZlcnRleEF0dHJpYlBvaW50ZXIoc2hhZGVyLmF0dHJpYnV0ZXMuYVRleHR1cmVDb29yZCwgMiwgZ2wuRkxPQVQsIGZhbHNlLCAwLCAwKTtcblxuICAgICAgICAgZ2wuYWN0aXZlVGV4dHVyZShnbC5URVhUVVJFMCk7XG5cbiAgICAgICAgaWYgKCF0ZXh0dXJlLl9nbFRleHR1cmVzW2dsLmlkXSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5yZW5kZXJlci51cGRhdGVUZXh0dXJlKHRleHR1cmUpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2VcbiAgICAgICAge1xuICAgICAgICAgICAgLy8gYmluZCB0aGUgY3VycmVudCB0ZXh0dXJlXG4gICAgICAgICAgICBnbC5iaW5kVGV4dHVyZShnbC5URVhUVVJFXzJELCB0ZXh0dXJlLl9nbFRleHR1cmVzW2dsLmlkXSk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBkb250IG5lZWQgdG8gdXBsb2FkIVxuICAgICAgICBnbC5iaW5kQnVmZmVyKGdsLkVMRU1FTlRfQVJSQVlfQlVGRkVSLCBtZXNoLl9pbmRleEJ1ZmZlcik7XG4gICAgICAgIGdsLmJ1ZmZlckRhdGEoZ2wuRUxFTUVOVF9BUlJBWV9CVUZGRVIsIG1lc2guaW5kaWNlcywgZ2wuU1RBVElDX0RSQVcpO1xuXG4gICAgfVxuXG4gICAgZ2wuZHJhd0VsZW1lbnRzKGRyYXdNb2RlLCBtZXNoLmluZGljZXMubGVuZ3RoLCBnbC5VTlNJR05FRF9TSE9SVCwgMCk7XG5cbn07XG5cbi8qKlxuICogUHJlcGFyZXMgYWxsIHRoZSBidWZmZXJzIHRvIHJlbmRlciB0aGlzIG1lc2hcbiAqIEBwYXJhbSBtZXNoIHtQSVhJLm1lc2guTWVzaH0gdGhlIG1lc2ggdG8gcmVuZGVyXG4gKi9cbk1lc2hSZW5kZXJlci5wcm90b3R5cGUuX2luaXRXZWJHTCA9IGZ1bmN0aW9uIChtZXNoKVxue1xuICAgIC8vIGJ1aWxkIHRoZSBzdHJpcCFcbiAgICB2YXIgZ2wgPSB0aGlzLnJlbmRlcmVyLmdsO1xuXG4gICAgbWVzaC5fdmVydGV4QnVmZmVyID0gZ2wuY3JlYXRlQnVmZmVyKCk7XG4gICAgbWVzaC5faW5kZXhCdWZmZXIgPSBnbC5jcmVhdGVCdWZmZXIoKTtcbiAgICBtZXNoLl91dkJ1ZmZlciA9IGdsLmNyZWF0ZUJ1ZmZlcigpO1xuXG5cblxuICAgIGdsLmJpbmRCdWZmZXIoZ2wuQVJSQVlfQlVGRkVSLCBtZXNoLl92ZXJ0ZXhCdWZmZXIpO1xuICAgIGdsLmJ1ZmZlckRhdGEoZ2wuQVJSQVlfQlVGRkVSLCBtZXNoLnZlcnRpY2VzLCBnbC5EWU5BTUlDX0RSQVcpO1xuXG4gICAgZ2wuYmluZEJ1ZmZlcihnbC5BUlJBWV9CVUZGRVIsIG1lc2guX3V2QnVmZmVyKTtcbiAgICBnbC5idWZmZXJEYXRhKGdsLkFSUkFZX0JVRkZFUiwgIG1lc2gudXZzLCBnbC5TVEFUSUNfRFJBVyk7XG5cbiAgICBpZihtZXNoLmNvbG9ycyl7XG4gICAgICAgIG1lc2guX2NvbG9yQnVmZmVyID0gZ2wuY3JlYXRlQnVmZmVyKCk7XG4gICAgICAgIGdsLmJpbmRCdWZmZXIoZ2wuQVJSQVlfQlVGRkVSLCBtZXNoLl9jb2xvckJ1ZmZlcik7XG4gICAgICAgIGdsLmJ1ZmZlckRhdGEoZ2wuQVJSQVlfQlVGRkVSLCBtZXNoLmNvbG9ycywgZ2wuU1RBVElDX0RSQVcpO1xuICAgIH1cblxuICAgIGdsLmJpbmRCdWZmZXIoZ2wuRUxFTUVOVF9BUlJBWV9CVUZGRVIsIG1lc2guX2luZGV4QnVmZmVyKTtcbiAgICBnbC5idWZmZXJEYXRhKGdsLkVMRU1FTlRfQVJSQVlfQlVGRkVSLCBtZXNoLmluZGljZXMsIGdsLlNUQVRJQ19EUkFXKTtcbn07XG5cblxuLyoqXG4gKiBFbXB0aWVzIHRoZSBjdXJyZW50IGJhdGNoLlxuICpcbiAqL1xuTWVzaFJlbmRlcmVyLnByb3RvdHlwZS5mbHVzaCA9IGZ1bmN0aW9uICgpXG57XG5cbn07XG5cbi8qKlxuICogU3RhcnRzIGEgbmV3IG1lc2ggcmVuZGVyZXIuXG4gKlxuICovXG5NZXNoUmVuZGVyZXIucHJvdG90eXBlLnN0YXJ0ID0gZnVuY3Rpb24gKClcbntcbiAgICBcblxuICAgIHRoaXMuY3VycmVudFNoYWRlciA9IG51bGw7XG59O1xuXG4vKipcbiAqIERlc3Ryb3lzIHRoZSBNZXNoIHJlbmRlcmVyXG4gKlxuICovXG5NZXNoUmVuZGVyZXIucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoKVxue1xuICAgIGNvcmUuT2JqZWN0UmVuZGVyZXIucHJvdG90eXBlLmRlc3Ryb3kuY2FsbCh0aGlzKTtcbn07XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uLy4uL2NvcmUnKTtcblxuLyoqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuU2hhZGVyXG4gKiBAbWVtYmVyb2YgUElYSS5tZXNoXG4gKiBAcGFyYW0gc2hhZGVyTWFuYWdlciB7UElYSS5TaGFkZXJNYW5hZ2VyfSBUaGUgV2ViR0wgc2hhZGVyIG1hbmFnZXIgdGhpcyBzaGFkZXIgd29ya3MgZm9yLlxuICovXG5mdW5jdGlvbiBNZXNoU2hhZGVyKHNoYWRlck1hbmFnZXIpXG57XG4gICAgY29yZS5TaGFkZXIuY2FsbCh0aGlzLFxuICAgICAgICBzaGFkZXJNYW5hZ2VyLFxuICAgICAgICAvLyB2ZXJ0ZXggc2hhZGVyXG4gICAgICAgIFtcbiAgICAgICAgICAgICdwcmVjaXNpb24gbG93cCBmbG9hdDsnLFxuICAgICAgICAgICAgJ2F0dHJpYnV0ZSB2ZWMyIGFWZXJ0ZXhQb3NpdGlvbjsnLFxuICAgICAgICAgICAgJ2F0dHJpYnV0ZSB2ZWMyIGFUZXh0dXJlQ29vcmQ7JyxcblxuICAgICAgICAgICAgJ3VuaWZvcm0gbWF0MyB0cmFuc2xhdGlvbk1hdHJpeDsnLFxuICAgICAgICAgICAgJ3VuaWZvcm0gbWF0MyBwcm9qZWN0aW9uTWF0cml4OycsXG5cbiAgICAgICAgICAgICd2YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDsnLFxuXG4gICAgICAgICAgICAndm9pZCBtYWluKHZvaWQpeycsXG4gICAgICAgICAgICAnICAgZ2xfUG9zaXRpb24gPSB2ZWM0KChwcm9qZWN0aW9uTWF0cml4ICogdHJhbnNsYXRpb25NYXRyaXggKiB2ZWMzKGFWZXJ0ZXhQb3NpdGlvbiwgMS4wKSkueHksIDAuMCwgMS4wKTsnLFxuICAgICAgICAgICAgJyAgIHZUZXh0dXJlQ29vcmQgPSBhVGV4dHVyZUNvb3JkOycsXG4gICAgICAgICAgICAnfSdcbiAgICAgICAgXS5qb2luKCdcXG4nKSxcbiAgICAgICAgW1xuICAgICAgICAgICAgJ3ByZWNpc2lvbiBsb3dwIGZsb2F0OycsXG5cbiAgICAgICAgICAgICd2YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDsnLFxuICAgICAgICAgICAgJ3VuaWZvcm0gZmxvYXQgYWxwaGE7JyxcblxuICAgICAgICAgICAgJ3VuaWZvcm0gc2FtcGxlcjJEIHVTYW1wbGVyOycsXG5cbiAgICAgICAgICAgICd2b2lkIG1haW4odm9pZCl7JyxcbiAgICAgICAgICAgICcgICBnbF9GcmFnQ29sb3IgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZUZXh0dXJlQ29vcmQpICogYWxwaGEgOycsXG4gICAgICAgICAgICAnfSdcbiAgICAgICAgXS5qb2luKCdcXG4nKSxcbiAgICAgICAgLy8gY3VzdG9tIHVuaWZvcm1zXG4gICAgICAgIHtcbiAgICAgICAgICAgIGFscGhhOiAgeyB0eXBlOiAnMWYnLCB2YWx1ZTogMCB9LFxuICAgICAgICAgICAgdHJhbnNsYXRpb25NYXRyaXg6IHsgdHlwZTogJ21hdDMnLCB2YWx1ZTogbmV3IEZsb2F0MzJBcnJheSg5KSB9LFxuICAgICAgICAgICAgcHJvamVjdGlvbk1hdHJpeDogeyB0eXBlOiAnbWF0MycsIHZhbHVlOiBuZXcgRmxvYXQzMkFycmF5KDkpIH1cbiAgICAgICAgfSxcbiAgICAgICAgLy8gY3VzdG9tIGF0dHJpYnV0ZXNcbiAgICAgICAge1xuICAgICAgICAgICAgYVZlcnRleFBvc2l0aW9uOjAsXG4gICAgICAgICAgICBhVGV4dHVyZUNvb3JkOjBcbiAgICAgICAgfVxuICAgICk7XG59XG5cbk1lc2hTaGFkZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShjb3JlLlNoYWRlci5wcm90b3R5cGUpO1xuTWVzaFNoYWRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBNZXNoU2hhZGVyO1xubW9kdWxlLmV4cG9ydHMgPSBNZXNoU2hhZGVyO1xuXG5jb3JlLlNoYWRlck1hbmFnZXIucmVnaXN0ZXJQbHVnaW4oJ21lc2hTaGFkZXInLCBNZXNoU2hhZGVyKTtcbiIsIi8vIFJlZmVyZW5jZXM6XG4vLyBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9KYXZhU2NyaXB0L1JlZmVyZW5jZS9HbG9iYWxfT2JqZWN0cy9NYXRoL3NpZ25cblxuaWYgKCFNYXRoLnNpZ24pXG57XG4gICAgTWF0aC5zaWduID0gZnVuY3Rpb24gKHgpIHtcbiAgICAgICAgeCA9ICt4O1xuICAgICAgICBpZiAoeCA9PT0gMCB8fCBpc05hTih4KSlcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHg7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHggPiAwID8gMSA6IC0xO1xuICAgIH07XG59XG4iLCIvLyBSZWZlcmVuY2VzOlxuLy8gaHR0cHM6Ly9naXRodWIuY29tL3NpbmRyZXNvcmh1cy9vYmplY3QtYXNzaWduXG4vLyBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9KYXZhU2NyaXB0L1JlZmVyZW5jZS9HbG9iYWxfT2JqZWN0cy9PYmplY3QvYXNzaWduXG5cbmlmICghT2JqZWN0LmFzc2lnbilcbntcbiAgICBPYmplY3QuYXNzaWduID0gcmVxdWlyZSgnb2JqZWN0LWFzc2lnbicpO1xufVxuIiwicmVxdWlyZSgnLi9PYmplY3QuYXNzaWduJyk7XG5yZXF1aXJlKCcuL3JlcXVlc3RBbmltYXRpb25GcmFtZScpO1xucmVxdWlyZSgnLi9NYXRoLnNpZ24nKTtcbiIsIi8vIFJlZmVyZW5jZXM6XG4vLyBodHRwOi8vcGF1bGlyaXNoLmNvbS8yMDExL3JlcXVlc3RhbmltYXRpb25mcmFtZS1mb3Itc21hcnQtYW5pbWF0aW5nL1xuLy8gaHR0cHM6Ly9naXN0LmdpdGh1Yi5jb20vMTU3OTY3MVxuLy8gaHR0cDovL3VwZGF0ZXMuaHRtbDVyb2Nrcy5jb20vMjAxMi8wNS9yZXF1ZXN0QW5pbWF0aW9uRnJhbWUtQVBJLW5vdy13aXRoLXN1Yi1taWxsaXNlY29uZC1wcmVjaXNpb25cbi8vIGh0dHBzOi8vZ2lzdC5naXRodWIuY29tL3RpbWhhbGwvNDA3ODYxNFxuLy8gaHR0cHM6Ly9naXRodWIuY29tL0ZpbmFuY2lhbC1UaW1lcy9wb2x5ZmlsbC1zZXJ2aWNlL3RyZWUvbWFzdGVyL3BvbHlmaWxscy9yZXF1ZXN0QW5pbWF0aW9uRnJhbWVcblxuLy8gRXhwZWN0ZWQgdG8gYmUgdXNlZCB3aXRoIEJyb3dzZXJmaXlcbi8vIEJyb3dzZXJpZnkgYXV0b21hdGljYWxseSBkZXRlY3RzIHRoZSB1c2Ugb2YgYGdsb2JhbGAgYW5kIHBhc3NlcyB0aGVcbi8vIGNvcnJlY3QgcmVmZXJlbmNlIG9mIGBnbG9iYWxgLCBgc2VsZmAsIGFuZCBmaW5hbGx5IGB3aW5kb3dgXG5cbi8vIERhdGUubm93XG5pZiAoIShEYXRlLm5vdyAmJiBEYXRlLnByb3RvdHlwZS5nZXRUaW1lKSkge1xuICAgIERhdGUubm93ID0gZnVuY3Rpb24gbm93KCkge1xuICAgICAgICByZXR1cm4gbmV3IERhdGUoKS5nZXRUaW1lKCk7XG4gICAgfTtcbn1cblxuLy8gcGVyZm9ybWFuY2Uubm93XG5pZiAoIShnbG9iYWwucGVyZm9ybWFuY2UgJiYgZ2xvYmFsLnBlcmZvcm1hbmNlLm5vdykpIHtcbiAgICB2YXIgc3RhcnRUaW1lID0gRGF0ZS5ub3coKTtcbiAgICBpZiAoIWdsb2JhbC5wZXJmb3JtYW5jZSkge1xuICAgICAgICBnbG9iYWwucGVyZm9ybWFuY2UgPSB7fTtcbiAgICB9XG4gICAgZ2xvYmFsLnBlcmZvcm1hbmNlLm5vdyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIERhdGUubm93KCkgLSBzdGFydFRpbWU7XG4gICAgfTtcbn1cblxuLy8gcmVxdWVzdEFuaW1hdGlvbkZyYW1lXG52YXIgbGFzdFRpbWUgPSBEYXRlLm5vdygpO1xudmFyIHZlbmRvcnMgPSBbJ21zJywgJ21veicsICd3ZWJraXQnLCAnbyddO1xuXG5mb3IodmFyIHggPSAwOyB4IDwgdmVuZG9ycy5sZW5ndGggJiYgIWdsb2JhbC5yZXF1ZXN0QW5pbWF0aW9uRnJhbWU7ICsreCkge1xuICAgIGdsb2JhbC5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUgPSBnbG9iYWxbdmVuZG9yc1t4XSArICdSZXF1ZXN0QW5pbWF0aW9uRnJhbWUnXTtcbiAgICBnbG9iYWwuY2FuY2VsQW5pbWF0aW9uRnJhbWUgPSBnbG9iYWxbdmVuZG9yc1t4XSArICdDYW5jZWxBbmltYXRpb25GcmFtZSddIHx8XG4gICAgICAgIGdsb2JhbFt2ZW5kb3JzW3hdICsgJ0NhbmNlbFJlcXVlc3RBbmltYXRpb25GcmFtZSddO1xufVxuXG5pZiAoIWdsb2JhbC5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUpIHtcbiAgICBnbG9iYWwucmVxdWVzdEFuaW1hdGlvbkZyYW1lID0gZnVuY3Rpb24gKGNhbGxiYWNrKSB7XG4gICAgICAgIGlmICh0eXBlb2YgY2FsbGJhY2sgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoY2FsbGJhY2sgKyAnaXMgbm90IGEgZnVuY3Rpb24nKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBjdXJyZW50VGltZSA9IERhdGUubm93KCksXG4gICAgICAgICAgICBkZWxheSA9IDE2ICsgbGFzdFRpbWUgLSBjdXJyZW50VGltZTtcblxuICAgICAgICBpZiAoZGVsYXkgPCAwKSB7XG4gICAgICAgICAgICBkZWxheSA9IDA7XG4gICAgICAgIH1cblxuICAgICAgICBsYXN0VGltZSA9IGN1cnJlbnRUaW1lO1xuXG4gICAgICAgIHJldHVybiBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGxhc3RUaW1lID0gRGF0ZS5ub3coKTtcbiAgICAgICAgICAgIGNhbGxiYWNrKHBlcmZvcm1hbmNlLm5vdygpKTtcbiAgICAgICAgfSwgZGVsYXkpO1xuICAgIH07XG59XG5cbmlmICghZ2xvYmFsLmNhbmNlbEFuaW1hdGlvbkZyYW1lKSB7XG4gICAgZ2xvYmFsLmNhbmNlbEFuaW1hdGlvbkZyYW1lID0gZnVuY3Rpb24oaWQpIHtcbiAgICAgICAgY2xlYXJUaW1lb3V0KGlkKTtcbiAgICB9O1xufVxuIl19 +//# sourceMappingURL=data:application/json;charset:utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIm5vZGVfbW9kdWxlcy9icm93c2VyaWZ5L25vZGVfbW9kdWxlcy9icm93c2VyLXBhY2svX3ByZWx1ZGUuanMiLCIuLi9waXhpLWdsLWNvcmUvaW5kZXguanMiLCIuLi9waXhpLWdsLWNvcmUvbGliL0dMQnVmZmVyLmpzIiwiLi4vcGl4aS1nbC1jb3JlL2xpYi9HTEZyYW1lYnVmZmVyLmpzIiwiLi4vcGl4aS1nbC1jb3JlL2xpYi9HTFNoYWRlci5qcyIsIi4uL3BpeGktZ2wtY29yZS9saWIvR0xUZXh0dXJlLmpzIiwiLi4vcGl4aS1nbC1jb3JlL2xpYi9WZXJ0ZXhBcnJheU9iamVjdC5qcyIsIi4uL3BpeGktZ2wtY29yZS9saWIvY3JlYXRlQ29udGV4dC5qcyIsIi4uL3BpeGktZ2wtY29yZS9saWIvc2V0VmVydGV4QXR0cmliQXJyYXlzLmpzIiwiLi4vcGl4aS1nbC1jb3JlL2xpYi9zaGFkZXIvY29tcGlsZVByb2dyYW0uanMiLCIuLi9waXhpLWdsLWNvcmUvbGliL3NoYWRlci9kZWZhdWx0VmFsdWUuanMiLCIuLi9waXhpLWdsLWNvcmUvbGliL3NoYWRlci9leHRyYWN0QXR0cmlidXRlcy5qcyIsIi4uL3BpeGktZ2wtY29yZS9saWIvc2hhZGVyL2V4dHJhY3RVbmlmb3Jtcy5qcyIsIi4uL3BpeGktZ2wtY29yZS9saWIvc2hhZGVyL2dlbmVyYXRlVW5pZm9ybUFjY2Vzc09iamVjdC5qcyIsIi4uL3BpeGktZ2wtY29yZS9saWIvc2hhZGVyL21hcFNpemUuanMiLCIuLi9waXhpLWdsLWNvcmUvbGliL3NoYWRlci9tYXBUeXBlLmpzIiwibm9kZV9tb2R1bGVzL2FzeW5jL2xpYi9hc3luYy5qcyIsIm5vZGVfbW9kdWxlcy9icm93c2VyaWZ5L25vZGVfbW9kdWxlcy9wYXRoLWJyb3dzZXJpZnkvaW5kZXguanMiLCJub2RlX21vZHVsZXMvYnJvd3NlcmlmeS9ub2RlX21vZHVsZXMvcHJvY2Vzcy9icm93c2VyLmpzIiwibm9kZV9tb2R1bGVzL2Jyb3dzZXJpZnkvbm9kZV9tb2R1bGVzL3B1bnljb2RlL3B1bnljb2RlLmpzIiwibm9kZV9tb2R1bGVzL2Jyb3dzZXJpZnkvbm9kZV9tb2R1bGVzL3F1ZXJ5c3RyaW5nLWVzMy9kZWNvZGUuanMiLCJub2RlX21vZHVsZXMvYnJvd3NlcmlmeS9ub2RlX21vZHVsZXMvcXVlcnlzdHJpbmctZXMzL2VuY29kZS5qcyIsIm5vZGVfbW9kdWxlcy9icm93c2VyaWZ5L25vZGVfbW9kdWxlcy9xdWVyeXN0cmluZy1lczMvaW5kZXguanMiLCJub2RlX21vZHVsZXMvYnJvd3NlcmlmeS9ub2RlX21vZHVsZXMvdXJsL3VybC5qcyIsIm5vZGVfbW9kdWxlcy9lYXJjdXQvc3JjL2VhcmN1dC5qcyIsIm5vZGVfbW9kdWxlcy9ldmVudGVtaXR0ZXIzL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL29iamVjdC1hc3NpZ24vaW5kZXguanMiLCJub2RlX21vZHVsZXMvcmVzb3VyY2UtbG9hZGVyL25vZGVfbW9kdWxlcy9hc3luYy9saWIvYXN5bmMuanMiLCJub2RlX21vZHVsZXMvcmVzb3VyY2UtbG9hZGVyL3NyYy9Mb2FkZXIuanMiLCJub2RlX21vZHVsZXMvcmVzb3VyY2UtbG9hZGVyL3NyYy9SZXNvdXJjZS5qcyIsIm5vZGVfbW9kdWxlcy9yZXNvdXJjZS1sb2FkZXIvc3JjL2I2NC5qcyIsIm5vZGVfbW9kdWxlcy9yZXNvdXJjZS1sb2FkZXIvc3JjL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL3Jlc291cmNlLWxvYWRlci9zcmMvbWlkZGxld2FyZXMvY2FjaGluZy9tZW1vcnkuanMiLCJub2RlX21vZHVsZXMvcmVzb3VyY2UtbG9hZGVyL3NyYy9taWRkbGV3YXJlcy9wYXJzaW5nL2Jsb2IuanMiLCJwYWNrYWdlLmpzb24iLCJzcmMvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5TWFuYWdlci5qcyIsInNyYy9hY2Nlc3NpYmlsaXR5L2FjY2Vzc2libGVUYXJnZXQuanMiLCJzcmMvYWNjZXNzaWJpbGl0eS9pbmRleC5qcyIsInNyYy9jb3JlL2NvbnN0LmpzIiwic3JjL2NvcmUvZGlzcGxheS9Db250YWluZXIuanMiLCJzcmMvY29yZS9kaXNwbGF5L0Rpc3BsYXlPYmplY3QuanMiLCJzcmMvY29yZS9ncmFwaGljcy9HcmFwaGljcy5qcyIsInNyYy9jb3JlL2dyYXBoaWNzL0dyYXBoaWNzRGF0YS5qcyIsInNyYy9jb3JlL2dyYXBoaWNzL3dlYmdsL0dyYXBoaWNzUmVuZGVyZXIuanMiLCJzcmMvY29yZS9ncmFwaGljcy93ZWJnbC9XZWJHTEdyYXBoaWNzRGF0YS5qcyIsInNyYy9jb3JlL2dyYXBoaWNzL3dlYmdsL3NoYWRlcnMvUHJpbWl0aXZlU2hhZGVyLmpzIiwic3JjL2NvcmUvZ3JhcGhpY3Mvd2ViZ2wvdXRpbHMvYnVpbGRDaXJjbGUuanMiLCJzcmMvY29yZS9ncmFwaGljcy93ZWJnbC91dGlscy9idWlsZENvbXBsZXhQb2x5LmpzIiwic3JjL2NvcmUvZ3JhcGhpY3Mvd2ViZ2wvdXRpbHMvYnVpbGRMaW5lLmpzIiwic3JjL2NvcmUvZ3JhcGhpY3Mvd2ViZ2wvdXRpbHMvYnVpbGRQb2x5LmpzIiwic3JjL2NvcmUvZ3JhcGhpY3Mvd2ViZ2wvdXRpbHMvYnVpbGRSZWN0YW5nbGUuanMiLCJzcmMvY29yZS9ncmFwaGljcy93ZWJnbC91dGlscy9idWlsZFJvdW5kZWRSZWN0YW5nbGUuanMiLCJzcmMvY29yZS9pbmRleC5qcyIsInNyYy9jb3JlL21hdGgvTWF0cml4LmpzIiwic3JjL2NvcmUvbWF0aC9Qb2ludC5qcyIsInNyYy9jb3JlL21hdGgvaW5kZXguanMiLCJzcmMvY29yZS9tYXRoL3NoYXBlcy9DaXJjbGUuanMiLCJzcmMvY29yZS9tYXRoL3NoYXBlcy9FbGxpcHNlLmpzIiwic3JjL2NvcmUvbWF0aC9zaGFwZXMvUG9seWdvbi5qcyIsInNyYy9jb3JlL21hdGgvc2hhcGVzL1JlY3RhbmdsZS5qcyIsInNyYy9jb3JlL21hdGgvc2hhcGVzL1JvdW5kZWRSZWN0YW5nbGUuanMiLCJzcmMvY29yZS9wYXJ0aWNsZXMvUGFydGljbGVDb250YWluZXIuanMiLCJzcmMvY29yZS9wYXJ0aWNsZXMvd2ViZ2wvUGFydGljbGVCdWZmZXIuanMiLCJzcmMvY29yZS9wYXJ0aWNsZXMvd2ViZ2wvUGFydGljbGVSZW5kZXJlci5qcyIsInNyYy9jb3JlL3BhcnRpY2xlcy93ZWJnbC9QYXJ0aWNsZVNoYWRlci5qcyIsInNyYy9jb3JlL3JlbmRlcmVycy9TeXN0ZW1SZW5kZXJlci5qcyIsInNyYy9jb3JlL3JlbmRlcmVycy9jYW52YXMvQ2FudmFzUmVuZGVyZXIuanMiLCJzcmMvY29yZS9yZW5kZXJlcnMvY2FudmFzL3V0aWxzL0NhbnZhc0J1ZmZlci5qcyIsInNyYy9jb3JlL3JlbmRlcmVycy9jYW52YXMvdXRpbHMvQ2FudmFzR3JhcGhpY3MuanMiLCJzcmMvY29yZS9yZW5kZXJlcnMvY2FudmFzL3V0aWxzL0NhbnZhc01hc2tNYW5hZ2VyLmpzIiwic3JjL2NvcmUvcmVuZGVyZXJzL2NhbnZhcy91dGlscy9DYW52YXNUaW50ZXIuanMiLCJzcmMvY29yZS9yZW5kZXJlcnMvd2ViZ2wvVGV4dHVyZU1hbmFnZXIuanMiLCJzcmMvY29yZS9yZW5kZXJlcnMvd2ViZ2wvV2ViR0xSZW5kZXJlci5qcyIsInNyYy9jb3JlL3JlbmRlcmVycy93ZWJnbC9maWx0ZXJzL0Fic3RyYWN0RmlsdGVyLmpzIiwic3JjL2NvcmUvcmVuZGVyZXJzL3dlYmdsL2ZpbHRlcnMvRlhBQUZpbHRlci5qcyIsInNyYy9jb3JlL3JlbmRlcmVycy93ZWJnbC9maWx0ZXJzL1Nwcml0ZU1hc2tGaWx0ZXIuanMiLCJzcmMvY29yZS9yZW5kZXJlcnMvd2ViZ2wvbWFuYWdlcnMvQmxlbmRNb2RlTWFuYWdlci5qcyIsInNyYy9jb3JlL3JlbmRlcmVycy93ZWJnbC9tYW5hZ2Vycy9GaWx0ZXJNYW5hZ2VyLmpzIiwic3JjL2NvcmUvcmVuZGVyZXJzL3dlYmdsL21hbmFnZXJzL01hc2tNYW5hZ2VyLmpzIiwic3JjL2NvcmUvcmVuZGVyZXJzL3dlYmdsL21hbmFnZXJzL1NoYWRlck1hbmFnZXIuanMiLCJzcmMvY29yZS9yZW5kZXJlcnMvd2ViZ2wvbWFuYWdlcnMvU3RlbmNpbE1hbmFnZXIuanMiLCJzcmMvY29yZS9yZW5kZXJlcnMvd2ViZ2wvbWFuYWdlcnMvV2ViR0xNYW5hZ2VyLmpzIiwic3JjL2NvcmUvcmVuZGVyZXJzL3dlYmdsL3NoYWRlcnMvQ29tcGxleFByaW1pdGl2ZVNoYWRlci5qcyIsInNyYy9jb3JlL3JlbmRlcmVycy93ZWJnbC9zaGFkZXJzL1ByaW1pdGl2ZVNoYWRlci5qcyIsInNyYy9jb3JlL3JlbmRlcmVycy93ZWJnbC9zaGFkZXJzL1NoYWRlci5qcyIsInNyYy9jb3JlL3JlbmRlcmVycy93ZWJnbC9zaGFkZXJzL1RleHR1cmVTaGFkZXIuanMiLCJzcmMvY29yZS9yZW5kZXJlcnMvd2ViZ2wvc2hhZGVycy9fVGV4dHVyZVNoYWRlci5qcyIsInNyYy9jb3JlL3JlbmRlcmVycy93ZWJnbC91dGlscy9PYmplY3RSZW5kZXJlci5qcyIsInNyYy9jb3JlL3JlbmRlcmVycy93ZWJnbC91dGlscy9RdWFkLmpzIiwic3JjL2NvcmUvcmVuZGVyZXJzL3dlYmdsL3V0aWxzL1JlbmRlclRhcmdldC5qcyIsInNyYy9jb3JlL3JlbmRlcmVycy93ZWJnbC91dGlscy9TdGVuY2lsTWFza1N0YWNrLmpzIiwic3JjL2NvcmUvcmVuZGVyZXJzL3dlYmdsL3V0aWxzL21hcFdlYkdMQmxlbmRNb2Rlc1RvUGl4aS5qcyIsInNyYy9jb3JlL3JlbmRlcmVycy93ZWJnbC91dGlscy9tYXBXZWJHTERyYXdNb2Rlc1RvUGl4aS5qcyIsInNyYy9jb3JlL3Nwcml0ZXMvU3ByaXRlLmpzIiwic3JjL2NvcmUvc3ByaXRlcy93ZWJnbC9TcHJpdGVSZW5kZXJlci5qcyIsInNyYy9jb3JlL3Nwcml0ZXMvd2ViZ2wvZ2VuZXJhdGVNdWx0aVRleHR1cmVTaGFkZXIuanMiLCJzcmMvY29yZS90ZXh0L1RleHQuanMiLCJzcmMvY29yZS90ZXh0dXJlcy9CYXNlVGV4dHVyZS5qcyIsInNyYy9jb3JlL3RleHR1cmVzL1JlbmRlclRleHR1cmUuanMiLCJzcmMvY29yZS90ZXh0dXJlcy9UZXh0dXJlLmpzIiwic3JjL2NvcmUvdGV4dHVyZXMvVGV4dHVyZVV2cy5qcyIsInNyYy9jb3JlL3RleHR1cmVzL1ZpZGVvQmFzZVRleHR1cmUuanMiLCJzcmMvY29yZS90aWNrZXIvVGlja2VyLmpzIiwic3JjL2NvcmUvdGlja2VyL2luZGV4LmpzIiwic3JjL2NvcmUvdXRpbHMvY3JlYXRlSW5kaWNlc0ZvclF1YWRzLmpzIiwic3JjL2NvcmUvdXRpbHMvaW5kZXguanMiLCJzcmMvY29yZS91dGlscy9wbHVnaW5UYXJnZXQuanMiLCJzcmMvZGVwcmVjYXRpb24uanMiLCJzcmMvZXh0cmFzL0JpdG1hcFRleHQuanMiLCJzcmMvZXh0cmFzL01vdmllQ2xpcC5qcyIsInNyYy9leHRyYXMvVGlsaW5nU3ByaXRlLmpzIiwic3JjL2V4dHJhcy9jYWNoZUFzQml0bWFwLmpzIiwic3JjL2V4dHJhcy9nZXRDaGlsZEJ5TmFtZS5qcyIsInNyYy9leHRyYXMvZ2V0R2xvYmFsUG9zaXRpb24uanMiLCJzcmMvZXh0cmFzL2luZGV4LmpzIiwic3JjL2ZpbHRlcnMvYXNjaWkvQXNjaWlGaWx0ZXIuanMiLCJzcmMvZmlsdGVycy9ibG9vbS9CbG9vbUZpbHRlci5qcyIsInNyYy9maWx0ZXJzL2JsdXIvQmx1ckRpckZpbHRlci5qcyIsInNyYy9maWx0ZXJzL2JsdXIvQmx1ckZpbHRlci5qcyIsInNyYy9maWx0ZXJzL2JsdXIvQmx1clhGaWx0ZXIuanMiLCJzcmMvZmlsdGVycy9ibHVyL0JsdXJZRmlsdGVyLmpzIiwic3JjL2ZpbHRlcnMvYmx1ci9TbWFydEJsdXJGaWx0ZXIuanMiLCJzcmMvZmlsdGVycy9jb2xvci9Db2xvck1hdHJpeEZpbHRlci5qcyIsInNyYy9maWx0ZXJzL2NvbG9yL0NvbG9yU3RlcEZpbHRlci5qcyIsInNyYy9maWx0ZXJzL2NvbnZvbHV0aW9uL0NvbnZvbHV0aW9uRmlsdGVyLmpzIiwic3JjL2ZpbHRlcnMvY3Jvc3NoYXRjaC9Dcm9zc0hhdGNoRmlsdGVyLmpzIiwic3JjL2ZpbHRlcnMvZGlzcGxhY2VtZW50L0Rpc3BsYWNlbWVudEZpbHRlci5qcyIsInNyYy9maWx0ZXJzL2RvdC9Eb3RTY3JlZW5GaWx0ZXIuanMiLCJzcmMvZmlsdGVycy9kcm9wc2hhZG93L0JsdXJZVGludEZpbHRlci5qcyIsInNyYy9maWx0ZXJzL2Ryb3BzaGFkb3cvRHJvcFNoYWRvd0ZpbHRlci5qcyIsInNyYy9maWx0ZXJzL2dyYXkvR3JheUZpbHRlci5qcyIsInNyYy9maWx0ZXJzL2luZGV4LmpzIiwic3JjL2ZpbHRlcnMvaW52ZXJ0L0ludmVydEZpbHRlci5qcyIsInNyYy9maWx0ZXJzL25vaXNlL05vaXNlRmlsdGVyLmpzIiwic3JjL2ZpbHRlcnMvcGl4ZWxhdGUvUGl4ZWxhdGVGaWx0ZXIuanMiLCJzcmMvZmlsdGVycy9yZ2IvUkdCU3BsaXRGaWx0ZXIuanMiLCJzcmMvZmlsdGVycy9zZXBpYS9TZXBpYUZpbHRlci5qcyIsInNyYy9maWx0ZXJzL3Nob2Nrd2F2ZS9TaG9ja3dhdmVGaWx0ZXIuanMiLCJzcmMvZmlsdGVycy90aWx0c2hpZnQvVGlsdFNoaWZ0QXhpc0ZpbHRlci5qcyIsInNyYy9maWx0ZXJzL3RpbHRzaGlmdC9UaWx0U2hpZnRGaWx0ZXIuanMiLCJzcmMvZmlsdGVycy90aWx0c2hpZnQvVGlsdFNoaWZ0WEZpbHRlci5qcyIsInNyYy9maWx0ZXJzL3RpbHRzaGlmdC9UaWx0U2hpZnRZRmlsdGVyLmpzIiwic3JjL2ZpbHRlcnMvdHdpc3QvVHdpc3RGaWx0ZXIuanMiLCJzcmMvc3JjL2luZGV4LmpzIiwic3JjL2ludGVyYWN0aW9uL0ludGVyYWN0aW9uRGF0YS5qcyIsInNyYy9pbnRlcmFjdGlvbi9JbnRlcmFjdGlvbk1hbmFnZXIuanMiLCJzcmMvaW50ZXJhY3Rpb24vaW5kZXguanMiLCJzcmMvaW50ZXJhY3Rpb24vaW50ZXJhY3RpdmVUYXJnZXQuanMiLCJzcmMvbG9hZGVycy9iaXRtYXBGb250UGFyc2VyLmpzIiwic3JjL2xvYWRlcnMvaW5kZXguanMiLCJzcmMvbG9hZGVycy9sb2FkZXIuanMiLCJzcmMvbG9hZGVycy9zcHJpdGVzaGVldFBhcnNlci5qcyIsInNyYy9sb2FkZXJzL3RleHR1cmVQYXJzZXIuanMiLCJzcmMvbWVzaC9NZXNoLmpzIiwic3JjL21lc2gvUGxhbmUuanMiLCJzcmMvbWVzaC9Sb3BlLmpzIiwic3JjL21lc2gvaW5kZXguanMiLCJzcmMvbWVzaC93ZWJnbC9NZXNoUmVuZGVyZXIuanMiLCJzcmMvbWVzaC93ZWJnbC9NZXNoU2hhZGVyLmpzIiwic3JjL3BvbHlmaWxsL01hdGguc2lnbi5qcyIsInNyYy9wb2x5ZmlsbC9PYmplY3QuYXNzaWduLmpzIiwic3JjL3BvbHlmaWxsL2luZGV4LmpzIiwic3JjL3BvbHlmaWxsL3JlcXVlc3RBbmltYXRpb25GcmFtZS5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQ0FBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDMUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN4Q0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN2TUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2pIQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM5QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdERBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3pEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDMUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbENBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM3QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3RJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDaENBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQzlDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7QUM1dUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7OztBQ2hPQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUMzRkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7O0FDcmhCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNwRkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNyRkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNKQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbnNCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0a0JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdFFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUN2Q0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7OztBQ25tQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDeGNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNoeUJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDaEVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ1pBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNwQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMxREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ25aQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDN05BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3JvQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdm1CQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0b0NBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDM0ZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzlUQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDcEhBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNsREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNyRkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDckVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMxTkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM3REE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDckVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzlIQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM3RkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdGJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNwRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3BCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdEZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzdGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDckdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM1RkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDMUZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM3VEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzFOQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMxZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM1RUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuUUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzFRQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbEdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDaFdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzVEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzFQQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMxSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzNZQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDOUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNyREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQy9GQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMxQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbGNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNqSEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDeEtBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM3V0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdkNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzVEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzdEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzlnQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM3R0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMvRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3hEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN6SkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNqU0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMvQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ25DQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3RCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDem1CQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdldBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDN0RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDM21CQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuYkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDN2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDeGFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDL0VBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDM09BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNqV0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdERBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDL0JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuUkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3BFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzdWQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbFlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzlUQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNsY0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDOVFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNUJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNUJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbkJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdkRBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ25HQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzVHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzNGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNwRkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM1QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdGhCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDL0NBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN6RkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDeEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbEZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdEVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN6RkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQy9MQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDL0NBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDckNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2hEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDckRBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDakRBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3BGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNoREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3RGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMzSEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3BDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNwQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUNuRkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7OztBQzVCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDL0NBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDMTJCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNmQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDL0NBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN2SEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNURBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbEZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNwQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDMWRBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNUhBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbk5BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNqQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ25PQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDM0RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDUkE7QUFDQTtBQUNBO0FBQ0E7OztBQ0hBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6ImdlbmVyYXRlZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzQ29udGVudCI6WyIoZnVuY3Rpb24gZSh0LG4scil7ZnVuY3Rpb24gcyhvLHUpe2lmKCFuW29dKXtpZighdFtvXSl7dmFyIGE9dHlwZW9mIHJlcXVpcmU9PVwiZnVuY3Rpb25cIiYmcmVxdWlyZTtpZighdSYmYSlyZXR1cm4gYShvLCEwKTtpZihpKXJldHVybiBpKG8sITApO3ZhciBmPW5ldyBFcnJvcihcIkNhbm5vdCBmaW5kIG1vZHVsZSAnXCIrbytcIidcIik7dGhyb3cgZi5jb2RlPVwiTU9EVUxFX05PVF9GT1VORFwiLGZ9dmFyIGw9bltvXT17ZXhwb3J0czp7fX07dFtvXVswXS5jYWxsKGwuZXhwb3J0cyxmdW5jdGlvbihlKXt2YXIgbj10W29dWzFdW2VdO3JldHVybiBzKG4/bjplKX0sbCxsLmV4cG9ydHMsZSx0LG4scil9cmV0dXJuIG5bb10uZXhwb3J0c312YXIgaT10eXBlb2YgcmVxdWlyZT09XCJmdW5jdGlvblwiJiZyZXF1aXJlO2Zvcih2YXIgbz0wO288ci5sZW5ndGg7bysrKXMocltvXSk7cmV0dXJuIHN9KSIsIlxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcblxuICAgIGNyZWF0ZUNvbnRleHQ6IFx0XHRcdHJlcXVpcmUoJy4vbGliL2NyZWF0ZUNvbnRleHQnKSxcbiAgICBzZXRWZXJ0ZXhBdHRyaWJBcnJheXM6IFx0cmVxdWlyZSgnLi9saWIvc2V0VmVydGV4QXR0cmliQXJyYXlzJyksXG4gICAgXG4gICAgR0xCdWZmZXI6IFx0XHRcdFx0cmVxdWlyZSgnLi9saWIvR0xCdWZmZXInKSxcbiAgICBHTEZyYW1lYnVmZmVyOiBcdFx0XHRyZXF1aXJlKCcuL2xpYi9HTEZyYW1lYnVmZmVyJyksXG4gICAgR0xTaGFkZXI6IFx0XHRcdFx0cmVxdWlyZSgnLi9saWIvR0xTaGFkZXInKSxcbiAgICBHTFRleHR1cmU6IFx0XHRcdFx0cmVxdWlyZSgnLi9saWIvR0xUZXh0dXJlJyksXG4gICAgXG4gICAgVmVydGV4QXJyYXlPYmplY3Q6IFx0XHRyZXF1aXJlKCcuL2xpYi9WZXJ0ZXhBcnJheU9iamVjdCcpXG5cbn07IiwiXG4vKipcbiAqIEhlbHBlciBjbGFzcyB0byBjcmVhdGUgYSB3ZWJHTCBidWZmZXJcbiAqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gZ2wge1dlYkdMUmVuZGVyaW5nQ29udGV4dH1cbiAqL1xuXG52YXIgRU1QVFlfQVJSQVlfQlVGRkVSID0gbmV3IEFycmF5QnVmZmVyKDApO1xuXG52YXIgQnVmZmVyID0gZnVuY3Rpb24oZ2wsIHR5cGUsIGRhdGEsIGRyYXdUeXBlKVxue1xuXHR0aGlzLmdsID0gZ2w7XG5cblx0dGhpcy5idWZmZXIgPSBnbC5jcmVhdGVCdWZmZXIoKTtcblx0dGhpcy50eXBlID0gdHlwZSB8fCBnbC5BUlJBWV9CVUZGRVI7XG5cdHRoaXMuZHJhd1R5cGUgPSBkcmF3VHlwZSB8fCBnbC5TVEFUSUNfRFJBVztcblx0dGhpcy5kYXRhID0gRU1QVFlfQVJSQVlfQlVGRkVSO1xuXG5cdGlmKGRhdGEpXG5cdHtcblx0XHR0aGlzLnVwbG9hZChkYXRhKTtcblx0fVxufVxuXG5CdWZmZXIucHJvdG90eXBlLnVwbG9hZCA9IGZ1bmN0aW9uKGRhdGEsIG9mZnNldCwgZG9udEJpbmQpXG57XG5cdC8vIHRvZG8gLSBuZWVkZWQ/XG5cdC8vaWYoIWRvbnRCaW5kKVxuXHR0aGlzLmJpbmQoKTtcblxuXHR2YXIgZ2wgPSB0aGlzLmdsO1xuXHRcblx0ZGF0YSA9IGRhdGEgfHwgdGhpcy5kYXRhO1xuXHRvZmZzZXQgPSBvZmZzZXQgfHwgMDtcblxuXHRpZih0aGlzLmRhdGEuYnl0ZUxlbmd0aCA+PSBkYXRhLmJ5dGVMZW5ndGgpXG5cdHtcdFxuXHRcdGdsLmJ1ZmZlclN1YkRhdGEodGhpcy50eXBlLCBvZmZzZXQsIGRhdGEpO1xuXHR9XG5cdGVsc2Vcblx0e1xuXHRcdGdsLmJ1ZmZlckRhdGEodGhpcy50eXBlLCBkYXRhLCB0aGlzLmRyYXdUeXBlKTtcblx0fVxuXG5cdHRoaXMuZGF0YSA9IGRhdGE7XG59XG5cbkJ1ZmZlci5wcm90b3R5cGUuYmluZCA9IGZ1bmN0aW9uKClcbntcblx0dmFyIGdsID0gdGhpcy5nbDtcblx0Z2wuYmluZEJ1ZmZlcih0aGlzLnR5cGUsIHRoaXMuYnVmZmVyKTtcbn1cblxuQnVmZmVyLmNyZWF0ZVZlcnRleEJ1ZmZlciA9IGZ1bmN0aW9uKGdsLCBkYXRhLCBkcmF3VHlwZSlcbntcblx0cmV0dXJuIG5ldyBCdWZmZXIoZ2wsIGdsLkFSUkFZX0JVRkZFUiwgZGF0YSwgZHJhd1R5cGUpO1xufVxuXG5CdWZmZXIuY3JlYXRlSW5kZXhCdWZmZXIgPSBmdW5jdGlvbihnbCwgZGF0YSwgZHJhd1R5cGUpXG57XG5cdHJldHVybiBuZXcgQnVmZmVyKGdsLCBnbC5FTEVNRU5UX0FSUkFZX0JVRkZFUiwgZGF0YSwgZHJhd1R5cGUpO1xufVxuXG5CdWZmZXIuY3JlYXRlID0gZnVuY3Rpb24oZ2wsIHR5cGUsIGRhdGEsIGRyYXdUeXBlKVxue1xuXHRyZXR1cm4gbmV3IEJ1ZmZlcihnbCwgdHlwZSwgZHJhd1R5cGUpO1xufVxuXG4vL1RPRE8gRGVzdHJveS4uXG5cbm1vZHVsZS5leHBvcnRzID0gQnVmZmVyO1xuXG4iLCJcbnZhciBUZXh0dXJlID0gcmVxdWlyZSgnLi9HTFRleHR1cmUnKTtcblxuLyoqXG4gKiBIZWxwZXIgY2xhc3MgdG8gY3JlYXRlIGEgd2ViR0wgRnJhbWVidWZmZXJcbiAqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gZ2wge1dlYkdMUmVuZGVyaW5nQ29udGV4dH1cbiAqL1xuXG52YXIgRnJhbWVidWZmZXIgPSBmdW5jdGlvbihnbCwgd2lkdGgsIGhlaWdodClcbntcblx0dGhpcy5nbCA9IGdsO1xuXG5cdHRoaXMuZnJhbWVidWZmZXIgPSBnbC5jcmVhdGVGcmFtZWJ1ZmZlcigpO1xuXHRcblx0dGhpcy5zdGVuY2lsID0gbnVsbDtcblx0dGhpcy50ZXh0dXJlID0gbnVsbDtcblxuXHR0aGlzLndpZHRoID0gd2lkdGggfHwgMTAwO1xuXHR0aGlzLmhlaWdodCA9IGhlaWdodCB8fCAxMDA7XG59XG5cbkZyYW1lYnVmZmVyLnByb3RvdHlwZS5lbmFibGVUZXh0dXJlID0gZnVuY3Rpb24odGV4dHVyZSlcbntcblx0dmFyIGdsID0gdGhpcy5nbDtcblxuXHR0aGlzLnRleHR1cmUgPSB0ZXh0dXJlIHx8IG5ldyBUZXh0dXJlKGdsKTtcblxuXHR0aGlzLnRleHR1cmUuYmluZCgpO1xuXG5cdC8vZ2wudGV4SW1hZ2UyRChnbC5URVhUVVJFXzJELCAwLCBnbC5SR0JBLCAgdGhpcy53aWR0aCwgdGhpcy5oZWlnaHQsIDAsIGdsLlJHQkEsIGdsLlVOU0lHTkVEX0JZVEUsIG51bGwpO1xuXG5cdHRoaXMuYmluZCgpO1xuXG5cdGdsLmZyYW1lYnVmZmVyVGV4dHVyZTJEKGdsLkZSQU1FQlVGRkVSLCBnbC5DT0xPUl9BVFRBQ0hNRU5UMCwgZ2wuVEVYVFVSRV8yRCwgdGhpcy50ZXh0dXJlLnRleHR1cmUsIDApO1xufVxuXG5GcmFtZWJ1ZmZlci5wcm90b3R5cGUuZW5hYmxlU3RlbmNpbCA9IGZ1bmN0aW9uKClcbntcblx0aWYodGhpcy5zdGVuY2lsKXJldHVybjtcblxuXHR2YXIgZ2wgPSB0aGlzLmdsO1xuXG5cdHRoaXMuc3RlbmNpbCA9IGdsLmNyZWF0ZVJlbmRlcmJ1ZmZlcigpO1xuICAgIFxuICAgIGdsLmJpbmRSZW5kZXJidWZmZXIoZ2wuUkVOREVSQlVGRkVSLCB0aGlzLnN0ZW5jaWwpO1xuICAgIFxuICAgIC8vIFRPRE8uLiB0aGlzIGlzIGRlcHRoIEFORCBzdGVuY2lsP1xuICAgIGdsLmZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyKGdsLkZSQU1FQlVGRkVSLCBnbC5ERVBUSF9TVEVOQ0lMX0FUVEFDSE1FTlQsIGdsLlJFTkRFUkJVRkZFUiwgdGhpcy5zdGVuY2lsKTtcbiAgICBnbC5yZW5kZXJidWZmZXJTdG9yYWdlKGdsLlJFTkRFUkJVRkZFUiwgZ2wuREVQVEhfU1RFTkNJTCwgIHRoaXMud2lkdGggICwgdGhpcy5oZWlnaHQgKTtcbn1cblxuRnJhbWVidWZmZXIucHJvdG90eXBlLmNsZWFyID0gZnVuY3Rpb24oIHIsIGcsIGIsIGEgKVxue1xuXHR0aGlzLmJpbmQoKTtcblxuXHR2YXIgZ2wgPSB0aGlzLmdsO1xuICAgIFxuICAgIGdsLmNsZWFyQ29sb3IociwgZywgYiwgYSk7XG4gICAgZ2wuY2xlYXIoZ2wuQ09MT1JfQlVGRkVSX0JJVCk7XG59XG5cbkZyYW1lYnVmZmVyLnByb3RvdHlwZS5iaW5kID0gZnVuY3Rpb24oKVxue1xuXHR2YXIgZ2wgPSB0aGlzLmdsO1xuXHRnbC5iaW5kRnJhbWVidWZmZXIoZ2wuRlJBTUVCVUZGRVIsIHRoaXMuZnJhbWVidWZmZXIgKTtcdFxufVxuXG5GcmFtZWJ1ZmZlci5wcm90b3R5cGUudW5iaW5kID0gZnVuY3Rpb24oKVxue1xuXHRnbC5iaW5kRnJhbWVidWZmZXIoZ2wuRlJBTUVCVUZGRVIsIG51bGwgKTtcdFxufVxuXG5GcmFtZWJ1ZmZlci5wcm90b3R5cGUucmVzaXplID0gZnVuY3Rpb24od2lkdGgsIGhlaWdodClcbntcblx0dmFyIGdsID0gdGhpcy5nbDtcblxuXHR0aGlzLndpZHRoID0gd2lkdGg7XG5cdHRoaXMuaGVpZ2h0ID0gaGVpZ2h0O1xuXG5cdGlmICggdGhpcy50ZXh0dXJlIClcbiAgICB7XG4gICAgXHR0aGlzLnRleHR1cmUudXBsb2FkRGF0YShudWxsLCB3aWR0aCwgaGVpZ2h0KTtcblx0fVxuXG5cdGlmICggdGhpcy5zdGVuY2lsIClcbiAgICB7XG4gICAgICAgIC8vIHVwZGF0ZSB0aGUgc3RlbmNpbCBidWZmZXIgd2lkdGggYW5kIGhlaWdodFxuICAgICAgICBnbC5iaW5kUmVuZGVyYnVmZmVyKGdsLlJFTkRFUkJVRkZFUiwgdGhpcy5zdGVuY2lsKTtcbiAgICAgICAgZ2wucmVuZGVyYnVmZmVyU3RvcmFnZShnbC5SRU5ERVJCVUZGRVIsIGdsLkRFUFRIX1NURU5DSUwsIHdpZHRoLCBoZWlnaHQpO1xuICAgIH1cbn1cblxuRnJhbWVidWZmZXIucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbigpXG57XG5cdHZhciBnbCA9IHRoaXMuZ2w7XG5cdC8vVE9ET1xuXHRnbC5kZWxldGVGcmFtZWJ1ZmZlcih0aGlzLmZyYW1lYnVmZmVyKTtcbn1cblxuRnJhbWVidWZmZXIuY3JlYXRlUkdCQSA9IGZ1bmN0aW9uKGdsLCB3aWR0aCwgaGVpZ2h0LCBkYXRhKVxue1xuXHR2YXIgdGV4dHVyZSA9IFRleHR1cmUuZnJvbURhdGEoZ2wsIG51bGwsIHdpZHRoLCBoZWlnaHQpO1xuXHR0ZXh0dXJlLmVuYWJsZU5lYXJlc3RTY2FsaW5nKCk7XG4gICAgdGV4dHVyZS5lbmFibGVXcmFwQ2xhbXAoKTtcblxuICAgIC8vbm93IGNyZWF0ZSB0aGUgZnJhbWVidWZmZXIgb2JqZWN0IGFuZCBhdHRhY2ggdGhlIHRleHR1cmUgdG8gaXQuXG4gICAgdmFyIGZibyA9IG5ldyBGcmFtZWJ1ZmZlcihnbCwgd2lkdGgsIGhlaWdodCk7XG4gICAgZmJvLmVuYWJsZVRleHR1cmUodGV4dHVyZSk7XG5cbiAgICByZXR1cm4gZmJvO1xufVxuXG5GcmFtZWJ1ZmZlci5jcmVhdGVGbG9hdDMyID0gZnVuY3Rpb24oZ2wsIHdpZHRoLCBoZWlnaHQsIGRhdGEpXG57XG5cdC8vIGNyZWF0ZSBhIG5ldyB0ZXh0dXJlLi5cbiAgICB2YXIgdGV4dHVyZSA9IG5ldyBUZXh0dXJlLmZyb21EYXRhKGdsLCBkYXRhLCB3aWR0aCwgaGVpZ2h0KTtcbiAgICB0ZXh0dXJlLmVuYWJsZU5lYXJlc3RTY2FsaW5nKCk7XG4gICAgdGV4dHVyZS5lbmFibGVXcmFwQ2xhbXAoKTtcblxuICAgIC8vbm93IGNyZWF0ZSB0aGUgZnJhbWVidWZmZXIgb2JqZWN0IGFuZCBhdHRhY2ggdGhlIHRleHR1cmUgdG8gaXQuXG4gICAgdmFyIGZibyA9IG5ldyBGcmFtZWJ1ZmZlcihnbCwgd2lkdGgsIGhlaWdodCk7XG4gICAgZmJvLmVuYWJsZVRleHR1cmUodGV4dHVyZSlcblxuICAgIHJldHVybiBmYm87XG59XG5cbm1vZHVsZS5leHBvcnRzID0gRnJhbWVidWZmZXI7XG5cbiIsIlxudmFyIGNvbXBpbGVQcm9ncmFtID0gcmVxdWlyZSgnLi9zaGFkZXIvY29tcGlsZVByb2dyYW0nKSxcblx0ZXh0cmFjdEF0dHJpYnV0ZXMgPSByZXF1aXJlKCcuL3NoYWRlci9leHRyYWN0QXR0cmlidXRlcycpLFxuXHRleHRyYWN0VW5pZm9ybXMgPSByZXF1aXJlKCcuL3NoYWRlci9leHRyYWN0VW5pZm9ybXMnKSxcblx0Z2VuZXJhdGVVbmlmb3JtQWNjZXNzT2JqZWN0ID0gcmVxdWlyZSgnLi9zaGFkZXIvZ2VuZXJhdGVVbmlmb3JtQWNjZXNzT2JqZWN0Jyk7XG5cbi8qKlxuICogSGVscGVyIGNsYXNzIHRvIGNyZWF0ZSBhIHdlYkdMIFNoYWRlclxuICpcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqIEBwYXJhbSBnbCB7V2ViR0xSZW5kZXJpbmdDb250ZXh0fVxuICovXG52YXIgU2hhZGVyID0gZnVuY3Rpb24oZ2wsIHZlcnRleFNyYywgZnJhZ21lbnRTcmMpXG57XG5cdHRoaXMuZ2wgPSBnbDtcblxuXHQvLyBGaXJzdCBjb21waWxlIHRoZSBwcm9ncmFtLi5cblx0dGhpcy5wcm9ncmFtID0gY29tcGlsZVByb2dyYW0oZ2wsIHZlcnRleFNyYywgZnJhZ21lbnRTcmMpO1xuXG5cdC8vIG5leHQgZXh0cmFjdCB0aGUgYXR0cmlidXRlc1xuXHR0aGlzLmF0dHJpYnV0ZXMgPSBleHRyYWN0QXR0cmlidXRlcyhnbCwgdGhpcy5wcm9ncmFtKTsgXG5cbiAgICB2YXIgdW5pZm9ybURhdGEgPSBleHRyYWN0VW5pZm9ybXMoZ2wsIHRoaXMucHJvZ3JhbSk7XG5cbiAgICB0aGlzLnVuaWZvcm1zID0gZ2VuZXJhdGVVbmlmb3JtQWNjZXNzT2JqZWN0KCBnbCwgdW5pZm9ybURhdGEgKTtcbn1cblxuU2hhZGVyLnByb3RvdHlwZS5iaW5kID0gZnVuY3Rpb24oKVxue1xuXHR0aGlzLmdsLnVzZVByb2dyYW0odGhpcy5wcm9ncmFtKTtcbn1cblxuU2hhZGVyLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24oKVxue1xuXHR2YXIgZ2wgPSB0aGlzLmdsO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IFNoYWRlcjtcblxuIiwiXG4vKipcbiAqIEhlbHBlciBjbGFzcyB0byBjcmVhdGUgYSB3ZWJHTCBUZXh0dXJlXG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIGdsIHtXZWJHTFJlbmRlcmluZ0NvbnRleHR9IGEgV2ViR0wgY29udGV4dFxuICogQHBhcmFtIHdpZHRoIHtudW1iZXJ9IHRoZSB3aWR0aCBvZiB0aGUgdGV4dHVyZSBcbiAqIEBwYXJhbSBoZWlnaHQge251bWJlcn0gdGhlIGhlaWdodCBvZiB0aGUgdGV4dHVyZSBcbiAqIEBwYXJhbSBmb3JtYXQge251bWJlcn0gdGhlIHBpeGVsIGZvcm1hdCBvZiB0aGUgdGV4dHVyZS4gZGVmYXVsdHMgdG8gZ2wuUkdCQVxuICogQHBhcmFtIHR5cGUge251bWJlcn0gdGhlIGdsIHR5cGUgb2YgdGhlIHRleHR1cmUuIGRlZmF1bHRzIHRvIGdsLlVOU0lHTkVEX0JZVEVcbiAqL1xudmFyIFRleHR1cmUgPSBmdW5jdGlvbihnbCwgd2lkdGgsIGhlaWdodCwgZm9ybWF0LCB0eXBlKVxue1xuXHR0aGlzLmdsID0gZ2w7XG5cblx0dGhpcy50ZXh0dXJlID0gZ2wuY3JlYXRlVGV4dHVyZSgpO1xuXG5cdC8vIHNvbWUgc2V0dGluZ3MuLlxuXHR0aGlzLm1pcG1hcCA9IGZhbHNlO1xuXG5cdHRoaXMucHJlbXVsdGlwbHlBbHBoYSA9IGZhbHNlO1xuXG5cdHRoaXMud2lkdGggPSB3aWR0aCB8fCAwO1xuXHR0aGlzLmhlaWdodCA9IGhlaWdodCB8fCAwO1xuXG5cdHRoaXMuZm9ybWF0ID0gZm9ybWF0IHx8IGdsLlJHQkE7XG5cdHRoaXMudHlwZSA9IHR5cGUgfHwgZ2wuVU5TSUdORURfQllURTtcblxuXG59XG5cbi8qKlxuICogQHBhcmFtIHtQSVhJLmdsQ29yZS5UZXh0dXJlfSBbdmFybmFtZV0gW2Rlc2NyaXB0aW9uXVxuICovXG5UZXh0dXJlLnByb3RvdHlwZS51cGxvYWQgPSBmdW5jdGlvbihzb3VyY2UpXG57XG5cdHRoaXMuYmluZCgpO1xuXG5cdHZhciBnbCA9IHRoaXMuZ2w7XG5cblx0dGhpcy53aWR0aCA9IHNvdXJjZS53aWR0aDtcblx0dGhpcy5oZWlnaHQgPSBzb3VyY2UuaGVpZ2h0O1xuXG5cdGdsLnBpeGVsU3RvcmVpKGdsLlVOUEFDS19QUkVNVUxUSVBMWV9BTFBIQV9XRUJHTCwgdGhpcy5wcmVtdWx0aXBseUFscGhhKTtcbiAgICBnbC50ZXhJbWFnZTJEKGdsLlRFWFRVUkVfMkQsIDAsIHRoaXMuZm9ybWF0LCB0aGlzLmZvcm1hdCwgdGhpcy50eXBlLCBzb3VyY2UpO1xufVxuXG52YXIgRkxPQVRJTkdfUE9JTlRfQVZBSUxBQkxFID0gZmFsc2U7XG5cblRleHR1cmUucHJvdG90eXBlLnVwbG9hZERhdGEgPSBmdW5jdGlvbihkYXRhLCB3aWR0aCwgaGVpZ2h0KVxue1xuXHR0aGlzLmJpbmQoKTtcblx0XG5cdHRoaXMud2lkdGggPSB3aWR0aCB8fCB0aGlzLndpZHRoO1xuXHR0aGlzLmhlaWdodCA9IGhlaWdodCB8fCB0aGlzLmhlaWdodDtcblxuXHRpZihkYXRhIGluc3RhbmNlb2YgRmxvYXQzMkFycmF5KVxuXHR7XG5cdFx0aWYoIUZMT0FUSU5HX1BPSU5UX0FWQUlMQUJMRSlcblx0XHR7XG5cdFx0XHR2YXIgZXh0ID0gZ2wuZ2V0RXh0ZW5zaW9uKFwiT0VTX3RleHR1cmVfZmxvYXRcIik7XG5cdFx0XHRcblx0XHRcdGlmKGV4dClcblx0XHRcdHtcblx0XHRcdFx0RkxPQVRJTkdfUE9JTlRfQVZBSUxBQkxFID0gdHJ1ZTtcblx0XHRcdH1cblx0XHRcdGVsc2Vcblx0XHRcdHtcblx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKCdmbG9hdGluZyBwb2ludCB0ZXh0dXJlcyBub3QgYXZhaWxhYmxlJyk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0dGhpcy50eXBlID0gZ2wuRkxPQVQ7XG5cdH1cblx0ZWxzZVxuXHR7XG5cdFx0Ly8gVE9ETyBzdXBwb3J0IGZvciBvdGhlciB0eXBlc1xuXHRcdHRoaXMudHlwZSA9IGdsLlVOU0lHTkVEX0JZVEU7XG5cdH1cblxuXHQvLyB3aGF0IHR5cGUgb2YgZGF0YT9cblx0Z2wucGl4ZWxTdG9yZWkoZ2wuVU5QQUNLX1BSRU1VTFRJUExZX0FMUEhBX1dFQkdMLCB0aGlzLnByZW11bHRpcGx5QWxwaGEpO1xuXHRnbC50ZXhJbWFnZTJEKGdsLlRFWFRVUkVfMkQsIDAsIHRoaXMuZm9ybWF0LCAgdGhpcy53aWR0aCwgdGhpcy5oZWlnaHQsIDAsIHRoaXMuZm9ybWF0LCB0aGlzLnR5cGUsIGRhdGEgfHwgbnVsbCk7XG5cbn1cblxuVGV4dHVyZS5wcm90b3R5cGUuYmluZCA9IGZ1bmN0aW9uKGxvY2F0aW9uKVxue1xuXHR2YXIgZ2wgPSB0aGlzLmdsO1xuXG5cdGlmKGxvY2F0aW9uICE9PSB1bmRlZmluZWQpXG5cdHtcblx0XHRnbC5hY3RpdmVUZXh0dXJlKGdsLlRFWFRVUkUwICsgbG9jYXRpb24pO1xuXHR9XG5cblx0Z2wuYmluZFRleHR1cmUoZ2wuVEVYVFVSRV8yRCwgdGhpcy50ZXh0dXJlKTtcbn1cblxuVGV4dHVyZS5wcm90b3R5cGUudW5iaW5kID0gZnVuY3Rpb24oKVxue1xuXHR2YXIgZ2wgPSB0aGlzLmdsO1xuXHRnbC5iaW5kVGV4dHVyZShnbC5URVhUVVJFXzJELCBudWxsKTtcbn1cblxuVGV4dHVyZS5wcm90b3R5cGUubWluRmlsdGVyID0gZnVuY3Rpb24oIGxpbmVhciApXG57XG5cdHZhciBnbCA9IHRoaXMuZ2w7XG5cblx0dGhpcy5iaW5kKCk7XG5cblx0aWYodGhpcy5taXBtYXApXG5cdHtcblx0XHRnbC50ZXhQYXJhbWV0ZXJpKGdsLlRFWFRVUkVfMkQsIGdsLlRFWFRVUkVfTUlOX0ZJTFRFUiwgbGluZWFyID8gZ2wuTElORUFSX01JUE1BUF9MSU5FQVIgOiBnbC5ORUFSRVNUX01JUE1BUF9ORUFSRVNUKTtcblx0fVxuXHRlbHNlXG5cdHtcblx0XHRnbC50ZXhQYXJhbWV0ZXJpKGdsLlRFWFRVUkVfMkQsIGdsLlRFWFRVUkVfTUlOX0ZJTFRFUiwgbGluZWFyID8gZ2wuTElORUFSIDogZ2wuTkVBUkVTVCk7XG5cdH1cdFxufVxuXG5UZXh0dXJlLnByb3RvdHlwZS5tYWdGaWx0ZXIgPSBmdW5jdGlvbiggbGluZWFyIClcbntcblx0dmFyIGdsID0gdGhpcy5nbDtcblxuXHR0aGlzLmJpbmQoKTtcblxuXHRnbC50ZXhQYXJhbWV0ZXJpKGdsLlRFWFRVUkVfMkQsIGdsLlRFWFRVUkVfTUFHX0ZJTFRFUiwgbGluZWFyID8gZ2wuTElORUFSIDogZ2wuTkVBUkVTVCk7XG59XG5cblRleHR1cmUucHJvdG90eXBlLmVuYWJsZU1pcG1hcCA9IGZ1bmN0aW9uKClcbntcblx0dGhpcy5iaW5kKCk7XG5cblx0dGhpcy5taXBtYXAgPSB0cnVlO1xuXHRnbC5nZW5lcmF0ZU1pcG1hcChnbC5URVhUVVJFXzJEKTtcbn1cblxuVGV4dHVyZS5wcm90b3R5cGUuZW5hYmxlTGluZWFyU2NhbGluZyA9IGZ1bmN0aW9uKClcbntcblx0dGhpcy5taW5GaWx0ZXIodHJ1ZSk7XG5cdHRoaXMubWFnRmlsdGVyKHRydWUpO1xufVxuXG5UZXh0dXJlLnByb3RvdHlwZS5lbmFibGVOZWFyZXN0U2NhbGluZyA9IGZ1bmN0aW9uKClcbntcblx0dGhpcy5taW5GaWx0ZXIoZmFsc2UpO1xuXHR0aGlzLm1hZ0ZpbHRlcihmYWxzZSk7XG59XG5cblRleHR1cmUucHJvdG90eXBlLmVuYWJsZVdyYXBDbGFtcCA9IGZ1bmN0aW9uKClcbntcblx0dmFyIGdsID0gdGhpcy5nbDtcblxuXHR0aGlzLmJpbmQoKTtcblxuXHRnbC50ZXhQYXJhbWV0ZXJpKGdsLlRFWFRVUkVfMkQsIGdsLlRFWFRVUkVfV1JBUF9TLCBnbC5DTEFNUF9UT19FREdFKTtcbiAgICBnbC50ZXhQYXJhbWV0ZXJpKGdsLlRFWFRVUkVfMkQsIGdsLlRFWFRVUkVfV1JBUF9ULCBnbC5DTEFNUF9UT19FREdFKTtcbn1cblxuVGV4dHVyZS5wcm90b3R5cGUuZW5hYmxlV3JhcFJlcGVhdCA9IGZ1bmN0aW9uKClcbntcblx0dmFyIGdsID0gdGhpcy5nbDtcblxuXHR0aGlzLmJpbmQoKTtcblx0XG5cdGdsLnRleFBhcmFtZXRlcmkoZ2wuVEVYVFVSRV8yRCwgZ2wuVEVYVFVSRV9XUkFQX1MsIGdsLlJFUEVBVCk7XG4gICAgZ2wudGV4UGFyYW1ldGVyaShnbC5URVhUVVJFXzJELCBnbC5URVhUVVJFX1dSQVBfVCwgZ2wuUkVQRUFUKTtcbn1cblxuVGV4dHVyZS5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uKClcbntcblx0dmFyIGdsID0gdGhpcy5nbDtcblx0Ly9UT0RPXG5cdGdsLmRlbGV0ZVRleHR1cmUodGhpcy50ZXh0dXJlKTtcbn1cblxuLy9UZXh0dXJlLlxuVGV4dHVyZS5mcm9tU291cmNlID0gZnVuY3Rpb24oZ2wsIHNvdXJjZSwgcHJlbXVsdGlwbHlBbHBoYSlcbntcblx0dmFyIHRleHR1cmUgPSBuZXcgVGV4dHVyZShnbCk7XG5cdHRleHR1cmUucHJlbXVsdGlwbHlBbHBoYSA9IHByZW11bHRpcGx5QWxwaGEgfHwgZmFsc2U7XG5cdHRleHR1cmUudXBsb2FkKHNvdXJjZSk7XG5cblx0cmV0dXJuIHRleHR1cmU7XG59XG5cblRleHR1cmUuZnJvbURhdGEgPSBmdW5jdGlvbihnbCwgZGF0YSwgd2lkdGgsIGhlaWdodClcbntcblx0Ly9jb25zb2xlLmxvZyhkYXRhLCB3aWR0aCwgaGVpZ2h0KTtcblx0dmFyIHRleHR1cmUgPSBuZXcgVGV4dHVyZShnbCk7XG5cdHRleHR1cmUudXBsb2FkRGF0YShkYXRhLCB3aWR0aCwgaGVpZ2h0KTtcblxuXHRyZXR1cm4gdGV4dHVyZTtcbn1cblxuXG5tb2R1bGUuZXhwb3J0cyA9IFRleHR1cmU7XG5cbiIsIlxuLyoqXG4gKiBHZW5lcmljIE1hc2sgU3RhY2sgZGF0YSBzdHJ1Y3R1cmVcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqL1xuXG4vLyBzdGF0ZSBvYmplY3QvL1xuXG5cbmZ1bmN0aW9uIFZlcnRleEFycmF5T2JqZWN0KGdsKVxue1xuXHRcblx0dGhpcy5uYXRpdmVWYW9FeHRlbnNpb24gPSAoXG4gICAgICBnbC5nZXRFeHRlbnNpb24oJ09FU192ZXJ0ZXhfYXJyYXlfb2JqZWN0JykgfHxcbiAgICAgIGdsLmdldEV4dGVuc2lvbignTU9aX09FU192ZXJ0ZXhfYXJyYXlfb2JqZWN0JykgfHxcbiAgICAgIGdsLmdldEV4dGVuc2lvbignV0VCS0lUX09FU192ZXJ0ZXhfYXJyYXlfb2JqZWN0JylcbiAgICApO1xuXG4vL1x0dGhpcy5uYXRpdmVWYW9FeHRlbnNpb24gPSBudWxsO1xuXG5cdGlmKHRoaXMubmF0aXZlVmFvRXh0ZW5zaW9uKVxuXHR7XG5cdFx0dGhpcy5uYXRpdmVWYW8gPSB0aGlzLm5hdGl2ZVZhb0V4dGVuc2lvbi5jcmVhdGVWZXJ0ZXhBcnJheU9FUygpOyAgXG5cdH1cblxuXHR0aGlzLmdsID0gZ2w7XG5cblx0dGhpcy5hdHRyaWJ1dGVzID0gW107XG5cblx0dGhpcy5pbmRleEJ1ZmZlciA9IG51bGw7XG5cblx0dGhpcy5kaXJ0eSA9IGZhbHNlO1xuXG5cdFxufVxuXG5WZXJ0ZXhBcnJheU9iamVjdC5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBWZXJ0ZXhBcnJheU9iamVjdDtcbm1vZHVsZS5leHBvcnRzID0gVmVydGV4QXJyYXlPYmplY3Q7XG5cblZlcnRleEFycmF5T2JqZWN0LnByb3RvdHlwZS5iaW5kID0gZnVuY3Rpb24oKVxue1xuXHRpZih0aGlzLm5hdGl2ZVZhbylcblx0e1xuXHRcdHRoaXMubmF0aXZlVmFvRXh0ZW5zaW9uLmJpbmRWZXJ0ZXhBcnJheU9FUyh0aGlzLm5hdGl2ZVZhbyk7ICBcblxuXHRcdGlmKHRoaXMuZGlydHkpXG5cdFx0e1xuXHRcdFx0dGhpcy5kaXJ0eSA9IGZhbHNlO1xuXHRcdFx0dGhpcy5hY3RpdmF0ZSgpO1xuXHRcdH1cblx0fVxuXHRlbHNlXG5cdHtcblx0XHR0aGlzLmFjdGl2YXRlKCk7XG5cdH1cbn1cblxuVmVydGV4QXJyYXlPYmplY3QucHJvdG90eXBlLnVuYmluZCA9IGZ1bmN0aW9uKClcbntcblx0aWYodGhpcy5uYXRpdmVWYW8pXG5cdHtcblx0XHR0aGlzLm5hdGl2ZVZhb0V4dGVuc2lvbi5iaW5kVmVydGV4QXJyYXlPRVMobnVsbCk7XG5cdH1cbn1cblxuVmVydGV4QXJyYXlPYmplY3QucHJvdG90eXBlLmFjdGl2YXRlID0gZnVuY3Rpb24oKVxue1xuXHR2YXIgZ2wgPSB0aGlzLmdsO1xuXG5cdGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5hdHRyaWJ1dGVzLmxlbmd0aDsgaSsrKSBcblx0e1xuXHRcdHZhciBhdHRyaWIgPSB0aGlzLmF0dHJpYnV0ZXNbaV07XG5cdFx0YXR0cmliLmJ1ZmZlci5iaW5kKCk7XHRcblxuXHRcdGF0dHJpYi5hdHRyaWJ1dGUucG9pbnRlcihhdHRyaWIudHlwZSwgYXR0cmliLm5vcm1hbGl6ZWQsIGF0dHJpYi5zdHJpZGUsIGF0dHJpYi5zdGFydCk7IFxuXHRcdFxuXHRcdGdsLmVuYWJsZVZlcnRleEF0dHJpYkFycmF5KGF0dHJpYi5hdHRyaWJ1dGUubG9jYXRpb24pO1xuXHR9O1xuXG5cdHRoaXMuaW5kZXhCdWZmZXIuYmluZCgpO1xufVxuXG5WZXJ0ZXhBcnJheU9iamVjdC5wcm90b3R5cGUuYWRkQXR0cmlidXRlID0gZnVuY3Rpb24oYnVmZmVyLCBhdHRyaWJ1dGUsIHR5cGUsIG5vcm1hbGl6ZWQsIHN0cmlkZSwgc3RhcnQpXG57XG4gICAgdGhpcy5hdHRyaWJ1dGVzLnB1c2goe1xuICAgIFx0YnVmZmVyOiBcdGJ1ZmZlcixcbiAgICBcdGF0dHJpYnV0ZTogXHRhdHRyaWJ1dGUsXG5cbiAgICBcdGxvY2F0aW9uOiBcdGF0dHJpYnV0ZS5sb2NhdGlvbixcblx0IFx0dHlwZTogXHRcdHR5cGUgfHwgdGhpcy5nbC5GTE9BVCxcblx0IFx0bm9ybWFsaXplZDogbm9ybWFsaXplZCB8fCBmYWxzZSxcblx0IFx0c3RyaWRlOiBcdHN0cmlkZSB8fCAwLFxuXHQgXHRzdGFydDogXHRcdHN0YXJ0IHx8IDBcblx0fSlcblxuXHR0aGlzLmRpcnR5ID0gdHJ1ZTtcbn1cblxuXG5WZXJ0ZXhBcnJheU9iamVjdC5wcm90b3R5cGUuYWRkSW5kZXggPSBmdW5jdGlvbihidWZmZXIsIG9wdGlvbnMpXG57XG4gICAgdGhpcy5pbmRleEJ1ZmZlciA9IGJ1ZmZlcjtcblxuICAgIHRoaXMuZGlydHkgPSB0cnVlO1xufVxuXG5WZXJ0ZXhBcnJheU9iamVjdC5wcm90b3R5cGUuZHJhdyA9IGZ1bmN0aW9uKHR5cGUsIHNpemUsIHN0YXJ0KVxue1xuXHR2YXIgZ2wgPSB0aGlzLmdsO1xuXHRnbC5kcmF3RWxlbWVudHModHlwZSwgc2l6ZSwgZ2wuVU5TSUdORURfU0hPUlQsIHN0YXJ0KTtcbn1cblxuIiwiXG4vKipcbiAqIEhlbHBlciBjbGFzcyB0byBjcmVhdGUgYSB3ZWJHTCBDb250ZXh0XG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIGdsIHtXZWJHTFJlbmRlcmluZ0NvbnRleHR9XG4gKi9cblxudmFyIENPTlRFWFRfVUlEID0gMDtcblxudmFyIGNyZWF0ZUNvbnRleHQgPSBmdW5jdGlvbihjYW52YXMsIG9wdGlvbnMpXG57XG4gICAgZ2wgPSBjYW52YXMuZ2V0Q29udGV4dCgnd2ViZ2wnLCBvcHRpb25zKSB8fCBcbiAgICBcdCBjYW52YXMuZ2V0Q29udGV4dCgnZXhwZXJpbWVudGFsLXdlYmdsJywgb3B0aW9ucyk7XG5cbiAgICBpZiAoIWdsKVxuICAgIHtcbiAgICAgICAgLy8gZmFpbCwgbm90IGFibGUgdG8gZ2V0IGEgY29udGV4dFxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RoaXMgYnJvd3NlciBkb2VzIG5vdCBzdXBwb3J0IHdlYkdMLiBUcnkgdXNpbmcgdGhlIGNhbnZhcyByZW5kZXJlcicpO1xuICAgIH1cblxuICAgIC8vIG1pZ2h0IHdhbnQgdG8gcGhhc2UgdGhpcyBvdXQ/XG4gICAgZ2wuaWQgPSBDT05URVhUX1VJRCsrO1xuXG4gICAgcmV0dXJuIGdsO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGNyZWF0ZUNvbnRleHQ7XG5cbiIsIi8qKlxuICogR2VuZXJpYyBNYXNrIFN0YWNrIGRhdGEgc3RydWN0dXJlXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKi9cblxudmFyIEdMX01BUCA9IHt9O1xuXG5cbnZhciBzZXRWZXJ0ZXhBdHRyaWJBcnJheXMgPSBmdW5jdGlvbiAoZ2wsIGF0dHJpYnMpXG57XHRcbiAgIC8vIGNvbnNvbGUubG9nKGdsLmlkKVxuICAgIHZhciBkYXRhID0gR0xfTUFQW2dsLmlkXTtcblxuICAgIGlmKCFkYXRhKVxuICAgIHtcblx0ICAgdmFyIG1heEF0dHJpYnMgPSBnbC5nZXRQYXJhbWV0ZXIoZ2wuTUFYX1ZFUlRFWF9BVFRSSUJTKTtcblx0XHRkYXRhID0gR0xfTUFQW2dsLmlkXSA9IHt0ZW1wQXR0cmliU3RhdGU6bmV3IEFycmF5KG1heEF0dHJpYnMpXG5cdFx0XHRcdCBcdCBcdFx0ICAgLGF0dHJpYlN0YXRlOm5ldyBBcnJheShtYXhBdHRyaWJzKX07XG5cdH1cblx0XG4gICAgdmFyIGksXG4gICAgXHR0ZW1wQXR0cmliU3RhdGUgPSBkYXRhLnRlbXBBdHRyaWJTdGF0ZSxcbiAgICBcdGF0dHJpYlN0YXRlID0gZGF0YS5hdHRyaWJTdGF0ZTtcblxuICAgIGZvciAoaSA9IDA7IGkgPCB0ZW1wQXR0cmliU3RhdGUubGVuZ3RoOyBpKyspXG4gICAge1xuICAgICAgICB0ZW1wQXR0cmliU3RhdGVbaV0gPSBmYWxzZTtcbiAgICB9XG5cbiAgICAvLyBzZXQgdGhlIG5ldyBhdHRyaWJzXG4gICAgZm9yIChpIGluIGF0dHJpYnMpXG4gICAge1xuICAgICAgICB0ZW1wQXR0cmliU3RhdGVbYXR0cmlic1tpXS5sb2NhdGlvbl0gPSB0cnVlO1xuICAgIH1cblxuICAgIGZvciAoaSA9IDE7IGkgPCBhdHRyaWJTdGF0ZS5sZW5ndGg7IGkrKylcbiAgICB7XG4gICAgICAgIGlmIChhdHRyaWJTdGF0ZVtpXSAhPT0gdGVtcEF0dHJpYlN0YXRlW2ldKVxuICAgICAgICB7XG4gICAgICAgICAgICBhdHRyaWJTdGF0ZVtpXSA9IHRlbXBBdHRyaWJTdGF0ZVtpXTtcblxuICAgICAgICAgICAgaWYgKGRhdGEuYXR0cmliU3RhdGVbaV0pXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgZ2wuZW5hYmxlVmVydGV4QXR0cmliQXJyYXkoaSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgZ2wuZGlzYWJsZVZlcnRleEF0dHJpYkFycmF5KGkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxufTtcblxubW9kdWxlLmV4cG9ydHMgPSBzZXRWZXJ0ZXhBdHRyaWJBcnJheXM7IiwiXG5cblxuXG5jb21waWxlUHJvZ3JhbSA9IGZ1bmN0aW9uKGdsLCB2ZXJ0ZXhTcmMsIGZyYWdtZW50U3JjKVxue1xuICAgIHZhciBnbFZlcnRTaGFkZXIgPSBjb21waWxlU2hhZGVyKGdsLCBnbC5WRVJURVhfU0hBREVSLCB2ZXJ0ZXhTcmMpO1xuICAgIHZhciBnbEZyYWdTaGFkZXIgPSBjb21waWxlU2hhZGVyKGdsLCBnbC5GUkFHTUVOVF9TSEFERVIsIGZyYWdtZW50U3JjKTtcblxuICAgIHZhciBwcm9ncmFtID0gZ2wuY3JlYXRlUHJvZ3JhbSgpO1xuXG4gICAgZ2wuYXR0YWNoU2hhZGVyKHByb2dyYW0sIGdsVmVydFNoYWRlcik7XG4gICAgZ2wuYXR0YWNoU2hhZGVyKHByb2dyYW0sIGdsRnJhZ1NoYWRlcik7XG4gICAgZ2wubGlua1Byb2dyYW0ocHJvZ3JhbSk7XG5cbiAgICAvLyBpZiBsaW5raW5nIGZhaWxzLCB0aGVuIGxvZyBhbmQgY2xlYW51cFxuICAgIGlmICghZ2wuZ2V0UHJvZ3JhbVBhcmFtZXRlcihwcm9ncmFtLCBnbC5MSU5LX1NUQVRVUykpXG4gICAge1xuICAgICAgICBjb25zb2xlLmVycm9yKCdQaXhpLmpzIEVycm9yOiBDb3VsZCBub3QgaW5pdGlhbGl6ZSBzaGFkZXIuJyk7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ2dsLlZBTElEQVRFX1NUQVRVUycsIGdsLmdldFByb2dyYW1QYXJhbWV0ZXIocHJvZ3JhbSwgZ2wuVkFMSURBVEVfU1RBVFVTKSk7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ2dsLmdldEVycm9yKCknLCBnbC5nZXRFcnJvcigpKTtcblxuICAgICAgICAvLyBpZiB0aGVyZSBpcyBhIHByb2dyYW0gaW5mbyBsb2csIGxvZyBpdFxuICAgICAgICBpZiAoZ2wuZ2V0UHJvZ3JhbUluZm9Mb2cocHJvZ3JhbSkgIT09ICcnKVxuICAgICAgICB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ1BpeGkuanMgV2FybmluZzogZ2wuZ2V0UHJvZ3JhbUluZm9Mb2coKScsIGdsLmdldFByb2dyYW1JbmZvTG9nKHByb2dyYW0pKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGdsLmRlbGV0ZVByb2dyYW0ocHJvZ3JhbSk7XG4gICAgICAgIHByb2dyYW0gPSBudWxsO1xuICAgIH1cblxuICAgIC8vIGNsZWFuIHVwIHNvbWUgc2hhZGVyc1xuICAgIGdsLmRlbGV0ZVNoYWRlcihnbFZlcnRTaGFkZXIpO1xuICAgIGdsLmRlbGV0ZVNoYWRlcihnbEZyYWdTaGFkZXIpO1xuXG4gICAgcmV0dXJuIHByb2dyYW07XG59XG5cbnZhciBjb21waWxlU2hhZGVyID0gZnVuY3Rpb24gKGdsLCB0eXBlLCBzcmMpXG57XG4gICAgdmFyIHNoYWRlciA9IGdsLmNyZWF0ZVNoYWRlcih0eXBlKTtcblxuICAgIGdsLnNoYWRlclNvdXJjZShzaGFkZXIsIHNyYyk7XG4gICAgZ2wuY29tcGlsZVNoYWRlcihzaGFkZXIpO1xuXG4gICAgaWYgKCFnbC5nZXRTaGFkZXJQYXJhbWV0ZXIoc2hhZGVyLCBnbC5DT01QSUxFX1NUQVRVUykpXG4gICAge1xuICAgICAgICBjb25zb2xlLmxvZyhnbC5nZXRTaGFkZXJJbmZvTG9nKHNoYWRlcikpO1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICByZXR1cm4gc2hhZGVyO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBjb21waWxlUHJvZ3JhbTtcblxuIiwiXG5cbnZhciBkZWZhdWx0VmFsdWUgPSBmdW5jdGlvbih0eXBlLCBzaXplKSBcbntcbiAgICBzd2l0Y2ggKHR5cGUpXG4gICAge1xuICAgICAgICBjYXNlICdmbG9hdCc6XG4gICAgICAgICAgICByZXR1cm4gMDtcblxuICAgICAgICBjYXNlICd2ZWMyJzogXG4gICAgICAgICAgICByZXR1cm4gbmV3IEZsb2F0MzJBcnJheSgyICogc2l6ZSk7XG5cbiAgICAgICAgY2FzZSAndmVjMyc6XG4gICAgICAgICAgICByZXR1cm4gbmV3IEZsb2F0MzJBcnJheSgzICogc2l6ZSk7XG5cbiAgICAgICAgY2FzZSAndmVjNCc6ICAgICBcbiAgICAgICAgICAgIHJldHVybiBuZXcgRmxvYXQzMkFycmF5KDQgKiBzaXplKTtcbiAgICAgICAgICAgIFxuICAgICAgICBjYXNlICdpbnQnOlxuICAgICAgICBjYXNlICdzYW1wbGVyMkQnOlxuICAgICAgICAgICAgcmV0dXJuIDA7XG5cbiAgICAgICAgY2FzZSAnaXZlYzInOiAgIFxuICAgICAgICAgICAgcmV0dXJuIG5ldyBJbnQzMkFycmF5KDIgKiBzaXplKTtcblxuICAgICAgICBjYXNlICdpdmVjMyc6XG4gICAgICAgICAgICByZXR1cm4gbmV3IEludDMyQXJyYXkoMyAqIHNpemUpO1xuXG4gICAgICAgIGNhc2UgJ2l2ZWM0JzogXG4gICAgICAgICAgICByZXR1cm4gbmV3IEludDMyQXJyYXkoNCAqIHNpemUpO1xuXG4gICAgICAgIGNhc2UgJ2Jvb2wnOiAgICAgXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG5cbiAgICAgICAgY2FzZSAnYnZlYzInOlxuXG4gICAgICAgICAgICByZXR1cm4gYm9vbGVhbkFycmF5KCAyICogc2l6ZSk7XG5cbiAgICAgICAgY2FzZSAnYnZlYzMnOlxuICAgICAgICAgICAgcmV0dXJuIGJvb2xlYW5BcnJheSgzICogc2l6ZSk7XG5cbiAgICAgICAgY2FzZSAnYnZlYzQnOlxuICAgICAgICAgICAgcmV0dXJuIGJvb2xlYW5BcnJheSg0ICogc2l6ZSk7XG5cbiAgICAgICAgY2FzZSAnbWF0Mic6XG4gICAgICAgICAgICByZXR1cm4gbmV3IEZsb2F0MzJBcnJheShbMSwgMFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLDAsIDFdKTtcblxuICAgICAgICBjYXNlICdtYXQzJzogXG4gICAgICAgICAgICByZXR1cm4gbmV3IEZsb2F0MzJBcnJheShbMSwgMCwgMFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLDAsIDEsIDBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwwLCAwLCAxXSk7XG5cbiAgICAgICAgY2FzZSAnbWF0NCc6XG4gICAgICAgICAgICByZXR1cm4gbmV3IEZsb2F0MzJBcnJheShbMSwgMCwgMCwgMFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLDAsIDEsIDAsIDBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwwLCAwLCAxLCAwXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsMCwgMCwgMCwgMV0pO1xuICAgIH1cbn1cblxudmFyIGJvb2xlYW5BcnJheSA9IGZ1bmN0aW9uKHNpemUpXG57XG4gICAgdmFyIGFycmF5ID0gbmV3IEFycmF5KHNpemUpO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcnJheS5sZW5ndGg7IGkrKykgXG4gICAge1xuICAgICAgICBhcnJheVtpXSA9IGZhbHNlO1xuICAgIH07XG5cbiAgICByZXR1cm4gYXJyYXk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZGVmYXVsdFZhbHVlO1xuIiwiXG52YXIgbWFwVHlwZSA9IHJlcXVpcmUoJy4vbWFwVHlwZScpO1xudmFyIG1hcFNpemUgPSByZXF1aXJlKCcuL21hcFNpemUnKTtcblxudmFyIGV4dHJhY3RBdHRyaWJ1dGVzID0gZnVuY3Rpb24oZ2wsIHByb2dyYW0pXG57XG4gICAgdmFyIGF0dHJpYnV0ZXMgPSB7fTtcblxuICAgIHZhciB0b3RhbEF0dHJpYnV0ZXMgPSBnbC5nZXRQcm9ncmFtUGFyYW1ldGVyKHByb2dyYW0sIGdsLkFDVElWRV9BVFRSSUJVVEVTKVxuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0b3RhbEF0dHJpYnV0ZXM7IGkrKykgXG4gICAge1xuICAgICAgICB2YXIgYXR0cmliRGF0YSA9IGdsLmdldEFjdGl2ZUF0dHJpYihwcm9ncmFtLCBpKTtcbiAgICAgICAgdmFyIHR5cGUgPSBtYXBUeXBlKGdsLCBhdHRyaWJEYXRhLnR5cGUpO1xuXG4gICAgICAgIGF0dHJpYnV0ZXNbYXR0cmliRGF0YS5uYW1lXSA9IHtcbiAgICAgICAgICAgIHR5cGU6dHlwZSxcbiAgICAgICAgICAgIHNpemU6bWFwU2l6ZSh0eXBlKSxcbiAgICAgICAgICAgIGxvY2F0aW9uOmdsLmdldEF0dHJpYkxvY2F0aW9uKHByb2dyYW0sIGF0dHJpYkRhdGEubmFtZSksXG4gICAgICAgICAgICAvL1RPRE8gLSBtYWtlIGFuIGF0dHJpYnV0ZSBvYmplY3RcbiAgICAgICAgICAgIHBvaW50ZXI6ZnVuY3Rpb24odHlwZSwgbm9ybWFsaXplZCwgc3RyaWRlLCBzdGFydCl7XG5cbiAgICAgICAgICAgICAvLyAgIGNvbnNvbGUubG9nKHRoaXMubG9jYXRpb24pXG4gICAgICAgICAgICAgICAgZ2wudmVydGV4QXR0cmliUG9pbnRlcih0aGlzLmxvY2F0aW9uLHRoaXMuc2l6ZSwgdHlwZSB8fCBnbC5GTE9BVCwgbm9ybWFsaXplZCB8fCBmYWxzZSwgc3RyaWRlIHx8IDAsIHN0YXJ0IHx8IDApOyBcblxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfTtcblxuICAgIHJldHVybiBhdHRyaWJ1dGVzOyAgXG59XG5cbm1vZHVsZS5leHBvcnRzID0gZXh0cmFjdEF0dHJpYnV0ZXM7XG5cbiIsInZhciBtYXBUeXBlID0gcmVxdWlyZSgnLi9tYXBUeXBlJyk7XG52YXIgZGVmYXVsdFZhbHVlID0gcmVxdWlyZSgnLi9kZWZhdWx0VmFsdWUnKTtcblxuXG52YXIgZXh0cmFjdFVuaWZvcm1zID0gZnVuY3Rpb24oZ2wsIHByb2dyYW0pXG57XG5cdHZhciB1bmlmb3JtcyA9IHt9O1xuXHRcbiAgICB2YXIgdG90YWxVbmlmb3JtcyA9IGdsLmdldFByb2dyYW1QYXJhbWV0ZXIocHJvZ3JhbSwgZ2wuQUNUSVZFX1VOSUZPUk1TKVxuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0b3RhbFVuaWZvcm1zOyBpKyspIFxuICAgIHtcbiAgICBcdHZhciB1bmlmb3JtRGF0YSA9IGdsLmdldEFjdGl2ZVVuaWZvcm0ocHJvZ3JhbSwgaSk7XG4gICAgXHR2YXIgbmFtZSA9IHVuaWZvcm1EYXRhLm5hbWUucmVwbGFjZSgvXFxbLio/XFxdLywgXCJcIik7XG4gICAgICAgIHZhciB0eXBlID0gbWFwVHlwZShnbCwgdW5pZm9ybURhdGEudHlwZSApO1xuXG4gICAgXHR1bmlmb3Jtc1tuYW1lXSA9IHtcbiAgICBcdFx0dHlwZTp0eXBlLFxuICAgIFx0XHRzaXplOnVuaWZvcm1EYXRhLnNpemUsXG4gICAgXHRcdGxvY2F0aW9uOmdsLmdldFVuaWZvcm1Mb2NhdGlvbihwcm9ncmFtLCBuYW1lKSxcbiAgICBcdFx0dmFsdWU6ZGVmYXVsdFZhbHVlKHR5cGUsIHVuaWZvcm1EYXRhLnNpemUpXG4gICAgXHR9XG4gICAgfTtcblx0XG5cdHJldHVybiB1bmlmb3JtcztcdFxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGV4dHJhY3RVbmlmb3JtcztcblxuIiwiXG52YXIgZ2VuZXJhdGVVbmlmb3JtQWNjZXNzT2JqZWN0ID0gZnVuY3Rpb24oZ2wsIHVuaWZvcm1EYXRhKVxue1xuICAgIC8vIHRoaXMgaXMgdGhlIG9iamVjdCB3ZSB3aWxsIGJlIHNlbmRpbmcgYmFjay5cbiAgICAvLyBhbiBvYmplY3QgaGllcmFjaHkgd2lsbCBiZSBjcmVhdGVkIGZvciBzdHJ1Y3RzXG4gICAgdmFyIHVuaWZvcm1zID0ge2RhdGE6e319O1xuXG4gICAgdW5pZm9ybXMuZ2wgPSBnbDtcbiAgICBcbiAgICB2YXIgdW5pZm9ybUtleXM9IE9iamVjdC5rZXlzKHVuaWZvcm1EYXRhKTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdW5pZm9ybUtleXMubGVuZ3RoOyBpKyspIFxuICAgIHtcbiAgICAgICAgdmFyIGZ1bGxOYW1lID0gdW5pZm9ybUtleXNbaV1cblxuICAgICAgICB2YXIgbmFtZVRva2VucyA9IGZ1bGxOYW1lLnNwbGl0KCcuJyk7XG4gICAgICAgIHZhciBuYW1lID0gbmFtZVRva2Vuc1tuYW1lVG9rZW5zLmxlbmd0aCAtIDFdO1xuXG4gICAgICAgIHZhciB1bmlmb3JtR3JvdXAgPSBnZXRVbmlmb3JtR3JvdXAobmFtZVRva2VucywgdW5pZm9ybXMpO1xuXG4gICAgICAgIHZhciB1bmlmb3JtID0gIHVuaWZvcm1EYXRhW2Z1bGxOYW1lXTtcbiAgICAgICAgdW5pZm9ybUdyb3VwLmRhdGFbbmFtZV0gPSB1bmlmb3JtO1xuXG4gICAgICAgIHVuaWZvcm1Hcm91cC5nbCA9IGdsO1xuXG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh1bmlmb3JtR3JvdXAsIG5hbWUsIHtcbiAgICAgICAgICAgIGdldDogZ2VuZXJhdGVHZXR0ZXIobmFtZSksXG4gICAgICAgICAgICBzZXQ6IGdlbmVyYXRlU2V0dGVyKG5hbWUsIHVuaWZvcm0pXG4gICAgICAgIH0pXG4gICAgfTtcblxuICAgIHJldHVybiB1bmlmb3Jtcztcbn1cblxudmFyIGdlbmVyYXRlR2V0dGVyID0gZnVuY3Rpb24obmFtZSlcbntcblx0dmFyIHRlbXBsYXRlID0gZ2V0dGVyVGVtcGxhdGUucmVwbGFjZSgnJSUnLCBuYW1lKTtcblx0cmV0dXJuIG5ldyBGdW5jdGlvbih0ZW1wbGF0ZSk7XG59XG5cbnZhciBnZW5lcmF0ZVNldHRlciA9IGZ1bmN0aW9uKG5hbWUsIHVuaWZvcm0pXG57XG4gICAgdmFyIHRlbXBsYXRlID0gc2V0dGVyVGVtcGxhdGUucmVwbGFjZSgvJSUvZywgbmFtZSk7XG4gICAgdmFyIHNldFRlbXBsYXRlXG4gICAgXG4gICAgaWYodW5pZm9ybS5zaXplID09PSAxKVxuICAgIHtcbiAgICAgICAgc2V0VGVtcGxhdGUgPSBHTFNMX1RPX1NJTkdMRV9TRVRURVJTW3VuaWZvcm0udHlwZV07XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHNldFRlbXBsYXRlID0gR0xTTF9UT19BUlJBWV9TRVRURVJTW3VuaWZvcm0udHlwZV07XG4gICAgfVxuXG4gICAgaWYoc2V0VGVtcGxhdGUpXG4gICAge1xuICAgICAgICB0ZW1wbGF0ZSArPSBcIlxcbnRoaXMuZ2wuXCIgKyBzZXRUZW1wbGF0ZSArIFwiO1wiO1xuICAgIH1cblxuICBcdHJldHVybiBuZXcgRnVuY3Rpb24oJ3ZhbHVlJywgdGVtcGxhdGUpO1xufVxuXG52YXIgZ2V0VW5pZm9ybUdyb3VwID0gZnVuY3Rpb24obmFtZVRva2VucywgdW5pZm9ybSlcbntcbiAgICB2YXIgY3VyID0gdW5pZm9ybTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbmFtZVRva2Vucy5sZW5ndGggLSAxOyBpKyspIFxuICAgIHtcbiAgICAgICAgdmFyIG8gPSBjdXJbbmFtZVRva2Vuc1tpXV0gfHwge2RhdGE6e319O1xuICAgICAgICBjdXJbbmFtZVRva2Vuc1tpXV0gPSBvO1xuICAgICAgICBjdXIgPSBvO1xuICAgIH07XG5cbiAgICByZXR1cm4gY3VyXG59XG5cbnZhciBnZXR0ZXJUZW1wbGF0ZSA9IFtcbiAgICAncmV0dXJuIHRoaXMuZGF0YS4lJS52YWx1ZTsnLFxuXS5qb2luKCdcXG4nKTtcblxudmFyIHNldHRlclRlbXBsYXRlID0gW1xuICAgICd0aGlzLmRhdGEuJSUudmFsdWUgPSB2YWx1ZTsnLFxuICAgICd2YXIgbG9jYXRpb24gPSB0aGlzLmRhdGEuJSUubG9jYXRpb247J1xuXS5qb2luKCdcXG4nKTtcblxuXG52YXIgR0xTTF9UT19TSU5HTEVfU0VUVEVSUyA9IHtcblxuICAgICdmbG9hdCc6ICAgICd1bmlmb3JtMWYobG9jYXRpb24sIHZhbHVlKScsXG5cbiAgICAndmVjMic6ICAgICAndW5pZm9ybTJmKGxvY2F0aW9uLCB2YWx1ZVswXSwgdmFsdWVbMV0pJyxcbiAgICAndmVjMyc6ICAgICAndW5pZm9ybTNmKGxvY2F0aW9uLCB2YWx1ZVswXSwgdmFsdWVbMV0sIHZhbHVlWzJdKScsXG4gICAgJ3ZlYzQnOiAgICAgJ3VuaWZvcm00Zihsb2NhdGlvbiwgdmFsdWVbMF0sIHZhbHVlWzFdLCB2YWx1ZVsyXSwgdmFsdWVbM10pJyxcbiAgICBcdFxuICAgICdpbnQnOiAgICAgICd1bmlmb3JtMWkobG9jYXRpb24sIHZhbHVlKScsXG4gICAgJ2l2ZWMyJzogICAgJ3VuaWZvcm0yaShsb2NhdGlvbiwgdmFsdWVbMF0sIHZhbHVlWzFdKScsXG4gICAgJ2l2ZWMzJzogICAgJ3VuaWZvcm0zaShsb2NhdGlvbiwgdmFsdWVbMF0sIHZhbHVlWzFdLCB2YWx1ZVsyXSknLFxuICAgICdpdmVjNCc6ICAgICd1bmlmb3JtNGkobG9jYXRpb24sIHZhbHVlWzBdLCB2YWx1ZVsxXSwgdmFsdWVbMl0sIHZhbHVlWzNdKScsXG5cbiAgICAnYm9vbCc6ICAgICAndW5pZm9ybTFpKGxvY2F0aW9uLCB2YWx1ZSknLFxuICAgICdidmVjMic6ICAgICd1bmlmb3JtMmkobG9jYXRpb24sIHZhbHVlWzBdLCB2YWx1ZVsxXSknLFxuICAgICdidmVjMyc6ICAgICd1bmlmb3JtM2kobG9jYXRpb24sIHZhbHVlWzBdLCB2YWx1ZVsxXSwgdmFsdWVbMl0pJyxcbiAgICAnYnZlYzQnOiAgICAndW5pZm9ybTRpKGxvY2F0aW9uLCB2YWx1ZVswXSwgdmFsdWVbMV0sIHZhbHVlWzJdLCB2YWx1ZVszXSknLFxuXG4gICAgJ21hdDInOiAgICAgJ3VuaWZvcm1NYXRyaXgyZnYobG9jYXRpb24sIGZhbHNlLCB2YWx1ZSknLFxuICAgICdtYXQzJzogICAgICd1bmlmb3JtTWF0cml4M2Z2KGxvY2F0aW9uLCBmYWxzZSwgdmFsdWUpJyxcbiAgICAnbWF0NCc6ICAgICAndW5pZm9ybU1hdHJpeDRmdihsb2NhdGlvbiwgZmFsc2UsIHZhbHVlKScsXG5cbiAgICAnc2FtcGxlcjJEJzondW5pZm9ybTFpKGxvY2F0aW9uLCB2YWx1ZSknXG59XG5cbnZhciBHTFNMX1RPX0FSUkFZX1NFVFRFUlMgPSB7XG5cbiAgICAnZmxvYXQnOiAgICAndW5pZm9ybTFmdihsb2NhdGlvbiwgdmFsdWUpJyxcblxuICAgICd2ZWMyJzogICAgICd1bmlmb3JtMmZ2KGxvY2F0aW9uLCB2YWx1ZSknLFxuICAgICd2ZWMzJzogICAgICd1bmlmb3JtM2Z2KGxvY2F0aW9uLCB2YWx1ZSknLFxuICAgICd2ZWM0JzogICAgICd1bmlmb3JtNGZ2KGxvY2F0aW9uLCB2YWx1ZSknLFxuICAgIFx0XG4gICAgJ2ludCc6ICAgICAgJ3VuaWZvcm0xaXYobG9jYXRpb24sIHZhbHVlKScsXG4gICAgJ2l2ZWMyJzogICAgJ3VuaWZvcm0yaXYobG9jYXRpb24sIHZhbHVlKScsXG4gICAgJ2l2ZWMzJzogICAgJ3VuaWZvcm0zaXYobG9jYXRpb24sIHZhbHVlKScsXG4gICAgJ2l2ZWM0JzogICAgJ3VuaWZvcm00aXYobG9jYXRpb24sIHZhbHVlKScsXG5cbiAgICAnYm9vbCc6ICAgICAndW5pZm9ybTFpdihsb2NhdGlvbiwgdmFsdWUpJyxcbiAgICAnYnZlYzInOiAgICAndW5pZm9ybTJpdihsb2NhdGlvbiwgdmFsdWUpJyxcbiAgICAnYnZlYzMnOiAgICAndW5pZm9ybTNpdihsb2NhdGlvbiwgdmFsdWUpJyxcbiAgICAnYnZlYzQnOiAgICAndW5pZm9ybTRpdihsb2NhdGlvbiwgdmFsdWUpJyxcbiAgIFxuICAgICdzYW1wbGVyMkQnOid1bmlmb3JtMWl2KGxvY2F0aW9uLCB2YWx1ZSknXG59XG5cbm1vZHVsZS5leHBvcnRzID0gZ2VuZXJhdGVVbmlmb3JtQWNjZXNzT2JqZWN0O1xuXG4iLCJcblxudmFyIG1hcFNpemUgPSBmdW5jdGlvbih0eXBlKSBcbnsgXG4gICAgcmV0dXJuIEdMU0xfVE9fU0laRVt0eXBlXTtcbn1cblxuXG52YXIgR0xTTF9UT19TSVpFID0ge1xuICAgICdmbG9hdCc6ICAgIDEsXG4gICAgJ3ZlYzInOiAgICAgMixcbiAgICAndmVjMyc6ICAgICAzLFxuICAgICd2ZWM0JzogICAgIDQsXG5cbiAgICAnaW50JzogICAgICAxLFxuICAgICdpdmVjMic6ICAgIDIsXG4gICAgJ2l2ZWMzJzogICAgMyxcbiAgICAnaXZlYzQnOiAgICA0LFxuXG4gICAgJ2Jvb2wnOiAgICAgMSxcbiAgICAnYnZlYzInOiAgICAyLFxuICAgICdidmVjMyc6ICAgIDMsXG4gICAgJ2J2ZWM0JzogICAgNCxcblxuICAgICdtYXQyJzogICAgIDQsXG4gICAgJ21hdDMnOiAgICAgOSxcbiAgICAnbWF0NCc6ICAgICAxNixcblxuICAgICdzYW1wbGVyMkQnOiAgMVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IG1hcFNpemU7XG4iLCJcblxudmFyIG1hcFNpemUgPSBmdW5jdGlvbihnbCwgdHlwZSkgXG57XG4gICAgaWYoIUdMX1RBQkxFKSBcbiAgICB7XG4gICAgICAgIHZhciB0eXBlTmFtZXMgPSBPYmplY3Qua2V5cyhHTF9UT19HTFNMX1RZUEVTKTtcblxuICAgICAgICBHTF9UQUJMRSA9IHt9O1xuXG4gICAgICAgIGZvcih2YXIgaSA9IDA7IGkgPCB0eXBlTmFtZXMubGVuZ3RoOyArK2kpIFxuICAgICAgICB7XG4gICAgICAgICAgICB2YXIgdG4gPSB0eXBlTmFtZXNbaV07XG4gICAgICAgICAgICBHTF9UQUJMRVsgZ2xbdG5dIF0gPSBHTF9UT19HTFNMX1RZUEVTW3RuXTtcbiAgICAgICAgfVxuICAgIH1cblxuICByZXR1cm4gR0xfVEFCTEVbdHlwZV07XG59XG5cbnZhciBHTF9UQUJMRSA9IG51bGw7XG5cbnZhciBHTF9UT19HTFNMX1RZUEVTID0ge1xuICAnRkxPQVQnOiAgICAgICAnZmxvYXQnLFxuICAnRkxPQVRfVkVDMic6ICAndmVjMicsXG4gICdGTE9BVF9WRUMzJzogICd2ZWMzJyxcbiAgJ0ZMT0FUX1ZFQzQnOiAgJ3ZlYzQnLFxuXG4gICdJTlQnOiAgICAgICAgICdpbnQnLFxuICAnSU5UX1ZFQzInOiAgICAnaXZlYzInLFxuICAnSU5UX1ZFQzMnOiAgICAnaXZlYzMnLFxuICAnSU5UX1ZFQzQnOiAgICAnaXZlYzQnLFxuICBcbiAgJ0JPT0wnOiAgICAgICAgJ2Jvb2wnLFxuICAnQk9PTF9WRUMyJzogICAnYnZlYzInLFxuICAnQk9PTF9WRUMzJzogICAnYnZlYzMnLFxuICAnQk9PTF9WRUM0JzogICAnYnZlYzQnLFxuICBcbiAgJ0ZMT0FUX01BVDInOiAgJ21hdDInLFxuICAnRkxPQVRfTUFUMyc6ICAnbWF0MycsXG4gICdGTE9BVF9NQVQ0JzogICdtYXQ0JyxcbiAgXG4gICdTQU1QTEVSXzJEJzogICdzYW1wbGVyMkQnICBcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBtYXBTaXplO1xuIiwiLyohXG4gKiBhc3luY1xuICogaHR0cHM6Ly9naXRodWIuY29tL2Nhb2xhbi9hc3luY1xuICpcbiAqIENvcHlyaWdodCAyMDEwLTIwMTQgQ2FvbGFuIE1jTWFob25cbiAqIFJlbGVhc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZVxuICovXG4oZnVuY3Rpb24gKCkge1xuXG4gICAgdmFyIGFzeW5jID0ge307XG4gICAgZnVuY3Rpb24gbm9vcCgpIHt9XG4gICAgZnVuY3Rpb24gaWRlbnRpdHkodikge1xuICAgICAgICByZXR1cm4gdjtcbiAgICB9XG4gICAgZnVuY3Rpb24gdG9Cb29sKHYpIHtcbiAgICAgICAgcmV0dXJuICEhdjtcbiAgICB9XG4gICAgZnVuY3Rpb24gbm90SWQodikge1xuICAgICAgICByZXR1cm4gIXY7XG4gICAgfVxuXG4gICAgLy8gZ2xvYmFsIG9uIHRoZSBzZXJ2ZXIsIHdpbmRvdyBpbiB0aGUgYnJvd3NlclxuICAgIHZhciBwcmV2aW91c19hc3luYztcblxuICAgIC8vIEVzdGFibGlzaCB0aGUgcm9vdCBvYmplY3QsIGB3aW5kb3dgIChgc2VsZmApIGluIHRoZSBicm93c2VyLCBgZ2xvYmFsYFxuICAgIC8vIG9uIHRoZSBzZXJ2ZXIsIG9yIGB0aGlzYCBpbiBzb21lIHZpcnR1YWwgbWFjaGluZXMuIFdlIHVzZSBgc2VsZmBcbiAgICAvLyBpbnN0ZWFkIG9mIGB3aW5kb3dgIGZvciBgV2ViV29ya2VyYCBzdXBwb3J0LlxuICAgIHZhciByb290ID0gdHlwZW9mIHNlbGYgPT09ICdvYmplY3QnICYmIHNlbGYuc2VsZiA9PT0gc2VsZiAmJiBzZWxmIHx8XG4gICAgICAgICAgICB0eXBlb2YgZ2xvYmFsID09PSAnb2JqZWN0JyAmJiBnbG9iYWwuZ2xvYmFsID09PSBnbG9iYWwgJiYgZ2xvYmFsIHx8XG4gICAgICAgICAgICB0aGlzO1xuXG4gICAgaWYgKHJvb3QgIT0gbnVsbCkge1xuICAgICAgICBwcmV2aW91c19hc3luYyA9IHJvb3QuYXN5bmM7XG4gICAgfVxuXG4gICAgYXN5bmMubm9Db25mbGljdCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcm9vdC5hc3luYyA9IHByZXZpb3VzX2FzeW5jO1xuICAgICAgICByZXR1cm4gYXN5bmM7XG4gICAgfTtcblxuICAgIGZ1bmN0aW9uIG9ubHlfb25jZShmbikge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICBpZiAoZm4gPT09IG51bGwpIHRocm93IG5ldyBFcnJvcihcIkNhbGxiYWNrIHdhcyBhbHJlYWR5IGNhbGxlZC5cIik7XG4gICAgICAgICAgICBmbi5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgICAgICAgICAgZm4gPSBudWxsO1xuICAgICAgICB9O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIF9vbmNlKGZuKSB7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIGlmIChmbiA9PT0gbnVsbCkgcmV0dXJuO1xuICAgICAgICAgICAgZm4uYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICAgICAgICAgIGZuID0gbnVsbDtcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICAvLy8vIGNyb3NzLWJyb3dzZXIgY29tcGF0aWJsaXR5IGZ1bmN0aW9ucyAvLy8vXG5cbiAgICB2YXIgX3RvU3RyaW5nID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZztcblxuICAgIHZhciBfaXNBcnJheSA9IEFycmF5LmlzQXJyYXkgfHwgZnVuY3Rpb24gKG9iaikge1xuICAgICAgICByZXR1cm4gX3RvU3RyaW5nLmNhbGwob2JqKSA9PT0gJ1tvYmplY3QgQXJyYXldJztcbiAgICB9O1xuXG4gICAgLy8gUG9ydGVkIGZyb20gdW5kZXJzY29yZS5qcyBpc09iamVjdFxuICAgIHZhciBfaXNPYmplY3QgPSBmdW5jdGlvbihvYmopIHtcbiAgICAgICAgdmFyIHR5cGUgPSB0eXBlb2Ygb2JqO1xuICAgICAgICByZXR1cm4gdHlwZSA9PT0gJ2Z1bmN0aW9uJyB8fCB0eXBlID09PSAnb2JqZWN0JyAmJiAhIW9iajtcbiAgICB9O1xuXG4gICAgZnVuY3Rpb24gX2lzQXJyYXlMaWtlKGFycikge1xuICAgICAgICByZXR1cm4gX2lzQXJyYXkoYXJyKSB8fCAoXG4gICAgICAgICAgICAvLyBoYXMgYSBwb3NpdGl2ZSBpbnRlZ2VyIGxlbmd0aCBwcm9wZXJ0eVxuICAgICAgICAgICAgdHlwZW9mIGFyci5sZW5ndGggPT09IFwibnVtYmVyXCIgJiZcbiAgICAgICAgICAgIGFyci5sZW5ndGggPj0gMCAmJlxuICAgICAgICAgICAgYXJyLmxlbmd0aCAlIDEgPT09IDBcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBfYXJyYXlFYWNoKGFyciwgaXRlcmF0b3IpIHtcbiAgICAgICAgdmFyIGluZGV4ID0gLTEsXG4gICAgICAgICAgICBsZW5ndGggPSBhcnIubGVuZ3RoO1xuXG4gICAgICAgIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgICAgICAgICBpdGVyYXRvcihhcnJbaW5kZXhdLCBpbmRleCwgYXJyKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIF9tYXAoYXJyLCBpdGVyYXRvcikge1xuICAgICAgICB2YXIgaW5kZXggPSAtMSxcbiAgICAgICAgICAgIGxlbmd0aCA9IGFyci5sZW5ndGgsXG4gICAgICAgICAgICByZXN1bHQgPSBBcnJheShsZW5ndGgpO1xuXG4gICAgICAgIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgICAgICAgICByZXN1bHRbaW5kZXhdID0gaXRlcmF0b3IoYXJyW2luZGV4XSwgaW5kZXgsIGFycik7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBfcmFuZ2UoY291bnQpIHtcbiAgICAgICAgcmV0dXJuIF9tYXAoQXJyYXkoY291bnQpLCBmdW5jdGlvbiAodiwgaSkgeyByZXR1cm4gaTsgfSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gX3JlZHVjZShhcnIsIGl0ZXJhdG9yLCBtZW1vKSB7XG4gICAgICAgIF9hcnJheUVhY2goYXJyLCBmdW5jdGlvbiAoeCwgaSwgYSkge1xuICAgICAgICAgICAgbWVtbyA9IGl0ZXJhdG9yKG1lbW8sIHgsIGksIGEpO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIG1lbW87XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gX2ZvckVhY2hPZihvYmplY3QsIGl0ZXJhdG9yKSB7XG4gICAgICAgIF9hcnJheUVhY2goX2tleXMob2JqZWN0KSwgZnVuY3Rpb24gKGtleSkge1xuICAgICAgICAgICAgaXRlcmF0b3Iob2JqZWN0W2tleV0sIGtleSk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIF9pbmRleE9mKGFyciwgaXRlbSkge1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFyci5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgaWYgKGFycltpXSA9PT0gaXRlbSkgcmV0dXJuIGk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIC0xO1xuICAgIH1cblxuICAgIHZhciBfa2V5cyA9IE9iamVjdC5rZXlzIHx8IGZ1bmN0aW9uIChvYmopIHtcbiAgICAgICAgdmFyIGtleXMgPSBbXTtcbiAgICAgICAgZm9yICh2YXIgayBpbiBvYmopIHtcbiAgICAgICAgICAgIGlmIChvYmouaGFzT3duUHJvcGVydHkoaykpIHtcbiAgICAgICAgICAgICAgICBrZXlzLnB1c2goayk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGtleXM7XG4gICAgfTtcblxuICAgIGZ1bmN0aW9uIF9rZXlJdGVyYXRvcihjb2xsKSB7XG4gICAgICAgIHZhciBpID0gLTE7XG4gICAgICAgIHZhciBsZW47XG4gICAgICAgIHZhciBrZXlzO1xuICAgICAgICBpZiAoX2lzQXJyYXlMaWtlKGNvbGwpKSB7XG4gICAgICAgICAgICBsZW4gPSBjb2xsLmxlbmd0aDtcbiAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbiBuZXh0KCkge1xuICAgICAgICAgICAgICAgIGkrKztcbiAgICAgICAgICAgICAgICByZXR1cm4gaSA8IGxlbiA/IGkgOiBudWxsO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGtleXMgPSBfa2V5cyhjb2xsKTtcbiAgICAgICAgICAgIGxlbiA9IGtleXMubGVuZ3RoO1xuICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIG5leHQoKSB7XG4gICAgICAgICAgICAgICAgaSsrO1xuICAgICAgICAgICAgICAgIHJldHVybiBpIDwgbGVuID8ga2V5c1tpXSA6IG51bGw7XG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gU2ltaWxhciB0byBFUzYncyByZXN0IHBhcmFtIChodHRwOi8vYXJpeWEub2ZpbGFicy5jb20vMjAxMy8wMy9lczYtYW5kLXJlc3QtcGFyYW1ldGVyLmh0bWwpXG4gICAgLy8gVGhpcyBhY2N1bXVsYXRlcyB0aGUgYXJndW1lbnRzIHBhc3NlZCBpbnRvIGFuIGFycmF5LCBhZnRlciBhIGdpdmVuIGluZGV4LlxuICAgIC8vIEZyb20gdW5kZXJzY29yZS5qcyAoaHR0cHM6Ly9naXRodWIuY29tL2phc2hrZW5hcy91bmRlcnNjb3JlL3B1bGwvMjE0MCkuXG4gICAgZnVuY3Rpb24gX3Jlc3RQYXJhbShmdW5jLCBzdGFydEluZGV4KSB7XG4gICAgICAgIHN0YXJ0SW5kZXggPSBzdGFydEluZGV4ID09IG51bGwgPyBmdW5jLmxlbmd0aCAtIDEgOiArc3RhcnRJbmRleDtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgdmFyIGxlbmd0aCA9IE1hdGgubWF4KGFyZ3VtZW50cy5sZW5ndGggLSBzdGFydEluZGV4LCAwKTtcbiAgICAgICAgICAgIHZhciByZXN0ID0gQXJyYXkobGVuZ3RoKTtcbiAgICAgICAgICAgIGZvciAodmFyIGluZGV4ID0gMDsgaW5kZXggPCBsZW5ndGg7IGluZGV4KyspIHtcbiAgICAgICAgICAgICAgICByZXN0W2luZGV4XSA9IGFyZ3VtZW50c1tpbmRleCArIHN0YXJ0SW5kZXhdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgc3dpdGNoIChzdGFydEluZGV4KSB7XG4gICAgICAgICAgICAgICAgY2FzZSAwOiByZXR1cm4gZnVuYy5jYWxsKHRoaXMsIHJlc3QpO1xuICAgICAgICAgICAgICAgIGNhc2UgMTogcmV0dXJuIGZ1bmMuY2FsbCh0aGlzLCBhcmd1bWVudHNbMF0sIHJlc3QpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gQ3VycmVudGx5IHVudXNlZCBidXQgaGFuZGxlIGNhc2VzIG91dHNpZGUgb2YgdGhlIHN3aXRjaCBzdGF0ZW1lbnQ6XG4gICAgICAgICAgICAvLyB2YXIgYXJncyA9IEFycmF5KHN0YXJ0SW5kZXggKyAxKTtcbiAgICAgICAgICAgIC8vIGZvciAoaW5kZXggPSAwOyBpbmRleCA8IHN0YXJ0SW5kZXg7IGluZGV4KyspIHtcbiAgICAgICAgICAgIC8vICAgICBhcmdzW2luZGV4XSA9IGFyZ3VtZW50c1tpbmRleF07XG4gICAgICAgICAgICAvLyB9XG4gICAgICAgICAgICAvLyBhcmdzW3N0YXJ0SW5kZXhdID0gcmVzdDtcbiAgICAgICAgICAgIC8vIHJldHVybiBmdW5jLmFwcGx5KHRoaXMsIGFyZ3MpO1xuICAgICAgICB9O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIF93aXRob3V0SW5kZXgoaXRlcmF0b3IpIHtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICh2YWx1ZSwgaW5kZXgsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICByZXR1cm4gaXRlcmF0b3IodmFsdWUsIGNhbGxiYWNrKTtcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICAvLy8vIGV4cG9ydGVkIGFzeW5jIG1vZHVsZSBmdW5jdGlvbnMgLy8vL1xuXG4gICAgLy8vLyBuZXh0VGljayBpbXBsZW1lbnRhdGlvbiB3aXRoIGJyb3dzZXItY29tcGF0aWJsZSBmYWxsYmFjayAvLy8vXG5cbiAgICAvLyBjYXB0dXJlIHRoZSBnbG9iYWwgcmVmZXJlbmNlIHRvIGd1YXJkIGFnYWluc3QgZmFrZVRpbWVyIG1vY2tzXG4gICAgdmFyIF9zZXRJbW1lZGlhdGUgPSB0eXBlb2Ygc2V0SW1tZWRpYXRlID09PSAnZnVuY3Rpb24nICYmIHNldEltbWVkaWF0ZTtcblxuICAgIHZhciBfZGVsYXkgPSBfc2V0SW1tZWRpYXRlID8gZnVuY3Rpb24oZm4pIHtcbiAgICAgICAgLy8gbm90IGEgZGlyZWN0IGFsaWFzIGZvciBJRTEwIGNvbXBhdGliaWxpdHlcbiAgICAgICAgX3NldEltbWVkaWF0ZShmbik7XG4gICAgfSA6IGZ1bmN0aW9uKGZuKSB7XG4gICAgICAgIHNldFRpbWVvdXQoZm4sIDApO1xuICAgIH07XG5cbiAgICBpZiAodHlwZW9mIHByb2Nlc3MgPT09ICdvYmplY3QnICYmIHR5cGVvZiBwcm9jZXNzLm5leHRUaWNrID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIGFzeW5jLm5leHRUaWNrID0gcHJvY2Vzcy5uZXh0VGljaztcbiAgICB9IGVsc2Uge1xuICAgICAgICBhc3luYy5uZXh0VGljayA9IF9kZWxheTtcbiAgICB9XG4gICAgYXN5bmMuc2V0SW1tZWRpYXRlID0gX3NldEltbWVkaWF0ZSA/IF9kZWxheSA6IGFzeW5jLm5leHRUaWNrO1xuXG5cbiAgICBhc3luYy5mb3JFYWNoID1cbiAgICBhc3luYy5lYWNoID0gZnVuY3Rpb24gKGFyciwgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgIHJldHVybiBhc3luYy5lYWNoT2YoYXJyLCBfd2l0aG91dEluZGV4KGl0ZXJhdG9yKSwgY2FsbGJhY2spO1xuICAgIH07XG5cbiAgICBhc3luYy5mb3JFYWNoU2VyaWVzID1cbiAgICBhc3luYy5lYWNoU2VyaWVzID0gZnVuY3Rpb24gKGFyciwgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgIHJldHVybiBhc3luYy5lYWNoT2ZTZXJpZXMoYXJyLCBfd2l0aG91dEluZGV4KGl0ZXJhdG9yKSwgY2FsbGJhY2spO1xuICAgIH07XG5cblxuICAgIGFzeW5jLmZvckVhY2hMaW1pdCA9XG4gICAgYXN5bmMuZWFjaExpbWl0ID0gZnVuY3Rpb24gKGFyciwgbGltaXQsIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICByZXR1cm4gX2VhY2hPZkxpbWl0KGxpbWl0KShhcnIsIF93aXRob3V0SW5kZXgoaXRlcmF0b3IpLCBjYWxsYmFjayk7XG4gICAgfTtcblxuICAgIGFzeW5jLmZvckVhY2hPZiA9XG4gICAgYXN5bmMuZWFjaE9mID0gZnVuY3Rpb24gKG9iamVjdCwgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgIGNhbGxiYWNrID0gX29uY2UoY2FsbGJhY2sgfHwgbm9vcCk7XG4gICAgICAgIG9iamVjdCA9IG9iamVjdCB8fCBbXTtcblxuICAgICAgICB2YXIgaXRlciA9IF9rZXlJdGVyYXRvcihvYmplY3QpO1xuICAgICAgICB2YXIga2V5LCBjb21wbGV0ZWQgPSAwO1xuXG4gICAgICAgIHdoaWxlICgoa2V5ID0gaXRlcigpKSAhPSBudWxsKSB7XG4gICAgICAgICAgICBjb21wbGV0ZWQgKz0gMTtcbiAgICAgICAgICAgIGl0ZXJhdG9yKG9iamVjdFtrZXldLCBrZXksIG9ubHlfb25jZShkb25lKSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoY29tcGxldGVkID09PSAwKSBjYWxsYmFjayhudWxsKTtcblxuICAgICAgICBmdW5jdGlvbiBkb25lKGVycikge1xuICAgICAgICAgICAgY29tcGxldGVkLS07XG4gICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIENoZWNrIGtleSBpcyBudWxsIGluIGNhc2UgaXRlcmF0b3IgaXNuJ3QgZXhoYXVzdGVkXG4gICAgICAgICAgICAvLyBhbmQgZG9uZSByZXNvbHZlZCBzeW5jaHJvbm91c2x5LlxuICAgICAgICAgICAgZWxzZSBpZiAoa2V5ID09PSBudWxsICYmIGNvbXBsZXRlZCA8PSAwKSB7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2sobnVsbCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgYXN5bmMuZm9yRWFjaE9mU2VyaWVzID1cbiAgICBhc3luYy5lYWNoT2ZTZXJpZXMgPSBmdW5jdGlvbiAob2JqLCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgY2FsbGJhY2sgPSBfb25jZShjYWxsYmFjayB8fCBub29wKTtcbiAgICAgICAgb2JqID0gb2JqIHx8IFtdO1xuICAgICAgICB2YXIgbmV4dEtleSA9IF9rZXlJdGVyYXRvcihvYmopO1xuICAgICAgICB2YXIga2V5ID0gbmV4dEtleSgpO1xuICAgICAgICBmdW5jdGlvbiBpdGVyYXRlKCkge1xuICAgICAgICAgICAgdmFyIHN5bmMgPSB0cnVlO1xuICAgICAgICAgICAgaWYgKGtleSA9PT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBjYWxsYmFjayhudWxsKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGl0ZXJhdG9yKG9ialtrZXldLCBrZXksIG9ubHlfb25jZShmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAga2V5ID0gbmV4dEtleSgpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoa2V5ID09PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gY2FsbGJhY2sobnVsbCk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3luYykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFzeW5jLnNldEltbWVkaWF0ZShpdGVyYXRlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlcmF0ZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSkpO1xuICAgICAgICAgICAgc3luYyA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGl0ZXJhdGUoKTtcbiAgICB9O1xuXG5cblxuICAgIGFzeW5jLmZvckVhY2hPZkxpbWl0ID1cbiAgICBhc3luYy5lYWNoT2ZMaW1pdCA9IGZ1bmN0aW9uIChvYmosIGxpbWl0LCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgX2VhY2hPZkxpbWl0KGxpbWl0KShvYmosIGl0ZXJhdG9yLCBjYWxsYmFjayk7XG4gICAgfTtcblxuICAgIGZ1bmN0aW9uIF9lYWNoT2ZMaW1pdChsaW1pdCkge1xuXG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAob2JqLCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIGNhbGxiYWNrID0gX29uY2UoY2FsbGJhY2sgfHwgbm9vcCk7XG4gICAgICAgICAgICBvYmogPSBvYmogfHwgW107XG4gICAgICAgICAgICB2YXIgbmV4dEtleSA9IF9rZXlJdGVyYXRvcihvYmopO1xuICAgICAgICAgICAgaWYgKGxpbWl0IDw9IDApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gY2FsbGJhY2sobnVsbCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB2YXIgZG9uZSA9IGZhbHNlO1xuICAgICAgICAgICAgdmFyIHJ1bm5pbmcgPSAwO1xuICAgICAgICAgICAgdmFyIGVycm9yZWQgPSBmYWxzZTtcblxuICAgICAgICAgICAgKGZ1bmN0aW9uIHJlcGxlbmlzaCAoKSB7XG4gICAgICAgICAgICAgICAgaWYgKGRvbmUgJiYgcnVubmluZyA8PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBjYWxsYmFjayhudWxsKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB3aGlsZSAocnVubmluZyA8IGxpbWl0ICYmICFlcnJvcmVkKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBrZXkgPSBuZXh0S2V5KCk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChrZXkgPT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRvbmUgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJ1bm5pbmcgPD0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKG51bGwpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJ1bm5pbmcgKz0gMTtcbiAgICAgICAgICAgICAgICAgICAgaXRlcmF0b3Iob2JqW2tleV0sIGtleSwgb25seV9vbmNlKGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJ1bm5pbmcgLT0gMTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVwbGVuaXNoKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KSgpO1xuICAgICAgICB9O1xuICAgIH1cblxuXG4gICAgZnVuY3Rpb24gZG9QYXJhbGxlbChmbikge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKG9iaiwgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICByZXR1cm4gZm4oYXN5bmMuZWFjaE9mLCBvYmosIGl0ZXJhdG9yLCBjYWxsYmFjayk7XG4gICAgICAgIH07XG4gICAgfVxuICAgIGZ1bmN0aW9uIGRvUGFyYWxsZWxMaW1pdChmbikge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKG9iaiwgbGltaXQsIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICAgICAgcmV0dXJuIGZuKF9lYWNoT2ZMaW1pdChsaW1pdCksIG9iaiwgaXRlcmF0b3IsIGNhbGxiYWNrKTtcbiAgICAgICAgfTtcbiAgICB9XG4gICAgZnVuY3Rpb24gZG9TZXJpZXMoZm4pIHtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChvYmosIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICAgICAgcmV0dXJuIGZuKGFzeW5jLmVhY2hPZlNlcmllcywgb2JqLCBpdGVyYXRvciwgY2FsbGJhY2spO1xuICAgICAgICB9O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIF9hc3luY01hcChlYWNoZm4sIGFyciwgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgIGNhbGxiYWNrID0gX29uY2UoY2FsbGJhY2sgfHwgbm9vcCk7XG4gICAgICAgIGFyciA9IGFyciB8fCBbXTtcbiAgICAgICAgdmFyIHJlc3VsdHMgPSBfaXNBcnJheUxpa2UoYXJyKSA/IFtdIDoge307XG4gICAgICAgIGVhY2hmbihhcnIsIGZ1bmN0aW9uICh2YWx1ZSwgaW5kZXgsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICBpdGVyYXRvcih2YWx1ZSwgZnVuY3Rpb24gKGVyciwgdikge1xuICAgICAgICAgICAgICAgIHJlc3VsdHNbaW5kZXhdID0gdjtcbiAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgIGNhbGxiYWNrKGVyciwgcmVzdWx0cyk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGFzeW5jLm1hcCA9IGRvUGFyYWxsZWwoX2FzeW5jTWFwKTtcbiAgICBhc3luYy5tYXBTZXJpZXMgPSBkb1NlcmllcyhfYXN5bmNNYXApO1xuICAgIGFzeW5jLm1hcExpbWl0ID0gZG9QYXJhbGxlbExpbWl0KF9hc3luY01hcCk7XG5cbiAgICAvLyByZWR1Y2Ugb25seSBoYXMgYSBzZXJpZXMgdmVyc2lvbiwgYXMgZG9pbmcgcmVkdWNlIGluIHBhcmFsbGVsIHdvbid0XG4gICAgLy8gd29yayBpbiBtYW55IHNpdHVhdGlvbnMuXG4gICAgYXN5bmMuaW5qZWN0ID1cbiAgICBhc3luYy5mb2xkbCA9XG4gICAgYXN5bmMucmVkdWNlID0gZnVuY3Rpb24gKGFyciwgbWVtbywgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgIGFzeW5jLmVhY2hPZlNlcmllcyhhcnIsIGZ1bmN0aW9uICh4LCBpLCBjYWxsYmFjaykge1xuICAgICAgICAgICAgaXRlcmF0b3IobWVtbywgeCwgZnVuY3Rpb24gKGVyciwgdikge1xuICAgICAgICAgICAgICAgIG1lbW8gPSB2O1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSwgZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgY2FsbGJhY2soZXJyLCBtZW1vKTtcbiAgICAgICAgfSk7XG4gICAgfTtcblxuICAgIGFzeW5jLmZvbGRyID1cbiAgICBhc3luYy5yZWR1Y2VSaWdodCA9IGZ1bmN0aW9uIChhcnIsIG1lbW8sIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICB2YXIgcmV2ZXJzZWQgPSBfbWFwKGFyciwgaWRlbnRpdHkpLnJldmVyc2UoKTtcbiAgICAgICAgYXN5bmMucmVkdWNlKHJldmVyc2VkLCBtZW1vLCBpdGVyYXRvciwgY2FsbGJhY2spO1xuICAgIH07XG5cbiAgICBhc3luYy50cmFuc2Zvcm0gPSBmdW5jdGlvbiAoYXJyLCBtZW1vLCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDMpIHtcbiAgICAgICAgICAgIGNhbGxiYWNrID0gaXRlcmF0b3I7XG4gICAgICAgICAgICBpdGVyYXRvciA9IG1lbW87XG4gICAgICAgICAgICBtZW1vID0gX2lzQXJyYXkoYXJyKSA/IFtdIDoge307XG4gICAgICAgIH1cblxuICAgICAgICBhc3luYy5lYWNoT2YoYXJyLCBmdW5jdGlvbih2LCBrLCBjYikge1xuICAgICAgICAgICAgaXRlcmF0b3IobWVtbywgdiwgaywgY2IpO1xuICAgICAgICB9LCBmdW5jdGlvbihlcnIpIHtcbiAgICAgICAgICAgIGNhbGxiYWNrKGVyciwgbWVtbyk7XG4gICAgICAgIH0pO1xuICAgIH07XG5cbiAgICBmdW5jdGlvbiBfZmlsdGVyKGVhY2hmbiwgYXJyLCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgdmFyIHJlc3VsdHMgPSBbXTtcbiAgICAgICAgZWFjaGZuKGFyciwgZnVuY3Rpb24gKHgsIGluZGV4LCBjYWxsYmFjaykge1xuICAgICAgICAgICAgaXRlcmF0b3IoeCwgZnVuY3Rpb24gKHYpIHtcbiAgICAgICAgICAgICAgICBpZiAodikge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHRzLnB1c2goe2luZGV4OiBpbmRleCwgdmFsdWU6IHh9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2FsbGJhY2soKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBjYWxsYmFjayhfbWFwKHJlc3VsdHMuc29ydChmdW5jdGlvbiAoYSwgYikge1xuICAgICAgICAgICAgICAgIHJldHVybiBhLmluZGV4IC0gYi5pbmRleDtcbiAgICAgICAgICAgIH0pLCBmdW5jdGlvbiAoeCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB4LnZhbHVlO1xuICAgICAgICAgICAgfSkpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBhc3luYy5zZWxlY3QgPVxuICAgIGFzeW5jLmZpbHRlciA9IGRvUGFyYWxsZWwoX2ZpbHRlcik7XG5cbiAgICBhc3luYy5zZWxlY3RMaW1pdCA9XG4gICAgYXN5bmMuZmlsdGVyTGltaXQgPSBkb1BhcmFsbGVsTGltaXQoX2ZpbHRlcik7XG5cbiAgICBhc3luYy5zZWxlY3RTZXJpZXMgPVxuICAgIGFzeW5jLmZpbHRlclNlcmllcyA9IGRvU2VyaWVzKF9maWx0ZXIpO1xuXG4gICAgZnVuY3Rpb24gX3JlamVjdChlYWNoZm4sIGFyciwgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgIF9maWx0ZXIoZWFjaGZuLCBhcnIsIGZ1bmN0aW9uKHZhbHVlLCBjYikge1xuICAgICAgICAgICAgaXRlcmF0b3IodmFsdWUsIGZ1bmN0aW9uKHYpIHtcbiAgICAgICAgICAgICAgICBjYighdik7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSwgY2FsbGJhY2spO1xuICAgIH1cbiAgICBhc3luYy5yZWplY3QgPSBkb1BhcmFsbGVsKF9yZWplY3QpO1xuICAgIGFzeW5jLnJlamVjdExpbWl0ID0gZG9QYXJhbGxlbExpbWl0KF9yZWplY3QpO1xuICAgIGFzeW5jLnJlamVjdFNlcmllcyA9IGRvU2VyaWVzKF9yZWplY3QpO1xuXG4gICAgZnVuY3Rpb24gX2NyZWF0ZVRlc3RlcihlYWNoZm4sIGNoZWNrLCBnZXRSZXN1bHQpIHtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKGFyciwgbGltaXQsIGl0ZXJhdG9yLCBjYikge1xuICAgICAgICAgICAgZnVuY3Rpb24gZG9uZSgpIHtcbiAgICAgICAgICAgICAgICBpZiAoY2IpIGNiKGdldFJlc3VsdChmYWxzZSwgdm9pZCAwKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmdW5jdGlvbiBpdGVyYXRlZSh4LCBfLCBjYWxsYmFjaykge1xuICAgICAgICAgICAgICAgIGlmICghY2IpIHJldHVybiBjYWxsYmFjaygpO1xuICAgICAgICAgICAgICAgIGl0ZXJhdG9yKHgsIGZ1bmN0aW9uICh2KSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChjYiAmJiBjaGVjayh2KSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY2IoZ2V0UmVzdWx0KHRydWUsIHgpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNiID0gaXRlcmF0b3IgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPiAzKSB7XG4gICAgICAgICAgICAgICAgZWFjaGZuKGFyciwgbGltaXQsIGl0ZXJhdGVlLCBkb25lKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgY2IgPSBpdGVyYXRvcjtcbiAgICAgICAgICAgICAgICBpdGVyYXRvciA9IGxpbWl0O1xuICAgICAgICAgICAgICAgIGVhY2hmbihhcnIsIGl0ZXJhdGVlLCBkb25lKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBhc3luYy5hbnkgPVxuICAgIGFzeW5jLnNvbWUgPSBfY3JlYXRlVGVzdGVyKGFzeW5jLmVhY2hPZiwgdG9Cb29sLCBpZGVudGl0eSk7XG5cbiAgICBhc3luYy5zb21lTGltaXQgPSBfY3JlYXRlVGVzdGVyKGFzeW5jLmVhY2hPZkxpbWl0LCB0b0Jvb2wsIGlkZW50aXR5KTtcblxuICAgIGFzeW5jLmFsbCA9XG4gICAgYXN5bmMuZXZlcnkgPSBfY3JlYXRlVGVzdGVyKGFzeW5jLmVhY2hPZiwgbm90SWQsIG5vdElkKTtcblxuICAgIGFzeW5jLmV2ZXJ5TGltaXQgPSBfY3JlYXRlVGVzdGVyKGFzeW5jLmVhY2hPZkxpbWl0LCBub3RJZCwgbm90SWQpO1xuXG4gICAgZnVuY3Rpb24gX2ZpbmRHZXRSZXN1bHQodiwgeCkge1xuICAgICAgICByZXR1cm4geDtcbiAgICB9XG4gICAgYXN5bmMuZGV0ZWN0ID0gX2NyZWF0ZVRlc3Rlcihhc3luYy5lYWNoT2YsIGlkZW50aXR5LCBfZmluZEdldFJlc3VsdCk7XG4gICAgYXN5bmMuZGV0ZWN0U2VyaWVzID0gX2NyZWF0ZVRlc3Rlcihhc3luYy5lYWNoT2ZTZXJpZXMsIGlkZW50aXR5LCBfZmluZEdldFJlc3VsdCk7XG4gICAgYXN5bmMuZGV0ZWN0TGltaXQgPSBfY3JlYXRlVGVzdGVyKGFzeW5jLmVhY2hPZkxpbWl0LCBpZGVudGl0eSwgX2ZpbmRHZXRSZXN1bHQpO1xuXG4gICAgYXN5bmMuc29ydEJ5ID0gZnVuY3Rpb24gKGFyciwgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgIGFzeW5jLm1hcChhcnIsIGZ1bmN0aW9uICh4LCBjYWxsYmFjaykge1xuICAgICAgICAgICAgaXRlcmF0b3IoeCwgZnVuY3Rpb24gKGVyciwgY3JpdGVyaWEpIHtcbiAgICAgICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhudWxsLCB7dmFsdWU6IHgsIGNyaXRlcmlhOiBjcml0ZXJpYX0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LCBmdW5jdGlvbiAoZXJyLCByZXN1bHRzKSB7XG4gICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBjYWxsYmFjayhudWxsLCBfbWFwKHJlc3VsdHMuc29ydChjb21wYXJhdG9yKSwgZnVuY3Rpb24gKHgpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHgudmFsdWU7XG4gICAgICAgICAgICAgICAgfSkpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGZ1bmN0aW9uIGNvbXBhcmF0b3IobGVmdCwgcmlnaHQpIHtcbiAgICAgICAgICAgIHZhciBhID0gbGVmdC5jcml0ZXJpYSwgYiA9IHJpZ2h0LmNyaXRlcmlhO1xuICAgICAgICAgICAgcmV0dXJuIGEgPCBiID8gLTEgOiBhID4gYiA/IDEgOiAwO1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIGFzeW5jLmF1dG8gPSBmdW5jdGlvbiAodGFza3MsIGNvbmN1cnJlbmN5LCBjYWxsYmFjaykge1xuICAgICAgICBpZiAoIWNhbGxiYWNrKSB7XG4gICAgICAgICAgICAvLyBjb25jdXJyZW5jeSBpcyBvcHRpb25hbCwgc2hpZnQgdGhlIGFyZ3MuXG4gICAgICAgICAgICBjYWxsYmFjayA9IGNvbmN1cnJlbmN5O1xuICAgICAgICAgICAgY29uY3VycmVuY3kgPSBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGNhbGxiYWNrID0gX29uY2UoY2FsbGJhY2sgfHwgbm9vcCk7XG4gICAgICAgIHZhciBrZXlzID0gX2tleXModGFza3MpO1xuICAgICAgICB2YXIgcmVtYWluaW5nVGFza3MgPSBrZXlzLmxlbmd0aDtcbiAgICAgICAgaWYgKCFyZW1haW5pbmdUYXNrcykge1xuICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKG51bGwpO1xuICAgICAgICB9XG4gICAgICAgIGlmICghY29uY3VycmVuY3kpIHtcbiAgICAgICAgICAgIGNvbmN1cnJlbmN5ID0gcmVtYWluaW5nVGFza3M7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgcmVzdWx0cyA9IHt9O1xuICAgICAgICB2YXIgcnVubmluZ1Rhc2tzID0gMDtcblxuICAgICAgICB2YXIgbGlzdGVuZXJzID0gW107XG4gICAgICAgIGZ1bmN0aW9uIGFkZExpc3RlbmVyKGZuKSB7XG4gICAgICAgICAgICBsaXN0ZW5lcnMudW5zaGlmdChmbik7XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gcmVtb3ZlTGlzdGVuZXIoZm4pIHtcbiAgICAgICAgICAgIHZhciBpZHggPSBfaW5kZXhPZihsaXN0ZW5lcnMsIGZuKTtcbiAgICAgICAgICAgIGlmIChpZHggPj0gMCkgbGlzdGVuZXJzLnNwbGljZShpZHgsIDEpO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIHRhc2tDb21wbGV0ZSgpIHtcbiAgICAgICAgICAgIHJlbWFpbmluZ1Rhc2tzLS07XG4gICAgICAgICAgICBfYXJyYXlFYWNoKGxpc3RlbmVycy5zbGljZSgwKSwgZnVuY3Rpb24gKGZuKSB7XG4gICAgICAgICAgICAgICAgZm4oKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgYWRkTGlzdGVuZXIoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgaWYgKCFyZW1haW5pbmdUYXNrcykge1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrKG51bGwsIHJlc3VsdHMpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICBfYXJyYXlFYWNoKGtleXMsIGZ1bmN0aW9uIChrKSB7XG4gICAgICAgICAgICB2YXIgdGFzayA9IF9pc0FycmF5KHRhc2tzW2tdKSA/IHRhc2tzW2tdOiBbdGFza3Nba11dO1xuICAgICAgICAgICAgdmFyIHRhc2tDYWxsYmFjayA9IF9yZXN0UGFyYW0oZnVuY3Rpb24oZXJyLCBhcmdzKSB7XG4gICAgICAgICAgICAgICAgcnVubmluZ1Rhc2tzLS07XG4gICAgICAgICAgICAgICAgaWYgKGFyZ3MubGVuZ3RoIDw9IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgYXJncyA9IGFyZ3NbMF07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHNhZmVSZXN1bHRzID0ge307XG4gICAgICAgICAgICAgICAgICAgIF9mb3JFYWNoT2YocmVzdWx0cywgZnVuY3Rpb24odmFsLCBya2V5KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzYWZlUmVzdWx0c1tya2V5XSA9IHZhbDtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIHNhZmVSZXN1bHRzW2tdID0gYXJncztcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soZXJyLCBzYWZlUmVzdWx0cyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHRzW2tdID0gYXJncztcbiAgICAgICAgICAgICAgICAgICAgYXN5bmMuc2V0SW1tZWRpYXRlKHRhc2tDb21wbGV0ZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB2YXIgcmVxdWlyZXMgPSB0YXNrLnNsaWNlKDAsIHRhc2subGVuZ3RoIC0gMSk7XG4gICAgICAgICAgICAvLyBwcmV2ZW50IGRlYWQtbG9ja3NcbiAgICAgICAgICAgIHZhciBsZW4gPSByZXF1aXJlcy5sZW5ndGg7XG4gICAgICAgICAgICB2YXIgZGVwO1xuICAgICAgICAgICAgd2hpbGUgKGxlbi0tKSB7XG4gICAgICAgICAgICAgICAgaWYgKCEoZGVwID0gdGFza3NbcmVxdWlyZXNbbGVuXV0pKSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignSGFzIGluZXhpc3RhbnQgZGVwZW5kZW5jeScpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoX2lzQXJyYXkoZGVwKSAmJiBfaW5kZXhPZihkZXAsIGspID49IDApIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdIYXMgY3ljbGljIGRlcGVuZGVuY2llcycpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZ1bmN0aW9uIHJlYWR5KCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBydW5uaW5nVGFza3MgPCBjb25jdXJyZW5jeSAmJiBfcmVkdWNlKHJlcXVpcmVzLCBmdW5jdGlvbiAoYSwgeCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gKGEgJiYgcmVzdWx0cy5oYXNPd25Qcm9wZXJ0eSh4KSk7XG4gICAgICAgICAgICAgICAgfSwgdHJ1ZSkgJiYgIXJlc3VsdHMuaGFzT3duUHJvcGVydHkoayk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAocmVhZHkoKSkge1xuICAgICAgICAgICAgICAgIHJ1bm5pbmdUYXNrcysrO1xuICAgICAgICAgICAgICAgIHRhc2tbdGFzay5sZW5ndGggLSAxXSh0YXNrQ2FsbGJhY2ssIHJlc3VsdHMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgYWRkTGlzdGVuZXIobGlzdGVuZXIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZnVuY3Rpb24gbGlzdGVuZXIoKSB7XG4gICAgICAgICAgICAgICAgaWYgKHJlYWR5KCkpIHtcbiAgICAgICAgICAgICAgICAgICAgcnVubmluZ1Rhc2tzKys7XG4gICAgICAgICAgICAgICAgICAgIHJlbW92ZUxpc3RlbmVyKGxpc3RlbmVyKTtcbiAgICAgICAgICAgICAgICAgICAgdGFza1t0YXNrLmxlbmd0aCAtIDFdKHRhc2tDYWxsYmFjaywgcmVzdWx0cyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9O1xuXG5cblxuICAgIGFzeW5jLnJldHJ5ID0gZnVuY3Rpb24odGltZXMsIHRhc2ssIGNhbGxiYWNrKSB7XG4gICAgICAgIHZhciBERUZBVUxUX1RJTUVTID0gNTtcbiAgICAgICAgdmFyIERFRkFVTFRfSU5URVJWQUwgPSAwO1xuXG4gICAgICAgIHZhciBhdHRlbXB0cyA9IFtdO1xuXG4gICAgICAgIHZhciBvcHRzID0ge1xuICAgICAgICAgICAgdGltZXM6IERFRkFVTFRfVElNRVMsXG4gICAgICAgICAgICBpbnRlcnZhbDogREVGQVVMVF9JTlRFUlZBTFxuICAgICAgICB9O1xuXG4gICAgICAgIGZ1bmN0aW9uIHBhcnNlVGltZXMoYWNjLCB0KXtcbiAgICAgICAgICAgIGlmKHR5cGVvZiB0ID09PSAnbnVtYmVyJyl7XG4gICAgICAgICAgICAgICAgYWNjLnRpbWVzID0gcGFyc2VJbnQodCwgMTApIHx8IERFRkFVTFRfVElNRVM7XG4gICAgICAgICAgICB9IGVsc2UgaWYodHlwZW9mIHQgPT09ICdvYmplY3QnKXtcbiAgICAgICAgICAgICAgICBhY2MudGltZXMgPSBwYXJzZUludCh0LnRpbWVzLCAxMCkgfHwgREVGQVVMVF9USU1FUztcbiAgICAgICAgICAgICAgICBhY2MuaW50ZXJ2YWwgPSBwYXJzZUludCh0LmludGVydmFsLCAxMCkgfHwgREVGQVVMVF9JTlRFUlZBTDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdVbnN1cHBvcnRlZCBhcmd1bWVudCB0eXBlIGZvciBcXCd0aW1lc1xcJzogJyArIHR5cGVvZiB0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBsZW5ndGggPSBhcmd1bWVudHMubGVuZ3RoO1xuICAgICAgICBpZiAobGVuZ3RoIDwgMSB8fCBsZW5ndGggPiAzKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgYXJndW1lbnRzIC0gbXVzdCBiZSBlaXRoZXIgKHRhc2spLCAodGFzaywgY2FsbGJhY2spLCAodGltZXMsIHRhc2spIG9yICh0aW1lcywgdGFzaywgY2FsbGJhY2spJyk7XG4gICAgICAgIH0gZWxzZSBpZiAobGVuZ3RoIDw9IDIgJiYgdHlwZW9mIHRpbWVzID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICBjYWxsYmFjayA9IHRhc2s7XG4gICAgICAgICAgICB0YXNrID0gdGltZXM7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHR5cGVvZiB0aW1lcyAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgcGFyc2VUaW1lcyhvcHRzLCB0aW1lcyk7XG4gICAgICAgIH1cbiAgICAgICAgb3B0cy5jYWxsYmFjayA9IGNhbGxiYWNrO1xuICAgICAgICBvcHRzLnRhc2sgPSB0YXNrO1xuXG4gICAgICAgIGZ1bmN0aW9uIHdyYXBwZWRUYXNrKHdyYXBwZWRDYWxsYmFjaywgd3JhcHBlZFJlc3VsdHMpIHtcbiAgICAgICAgICAgIGZ1bmN0aW9uIHJldHJ5QXR0ZW1wdCh0YXNrLCBmaW5hbEF0dGVtcHQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24oc2VyaWVzQ2FsbGJhY2spIHtcbiAgICAgICAgICAgICAgICAgICAgdGFzayhmdW5jdGlvbihlcnIsIHJlc3VsdCl7XG4gICAgICAgICAgICAgICAgICAgICAgICBzZXJpZXNDYWxsYmFjayghZXJyIHx8IGZpbmFsQXR0ZW1wdCwge2VycjogZXJyLCByZXN1bHQ6IHJlc3VsdH0pO1xuICAgICAgICAgICAgICAgICAgICB9LCB3cmFwcGVkUmVzdWx0cyk7XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZnVuY3Rpb24gcmV0cnlJbnRlcnZhbChpbnRlcnZhbCl7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKHNlcmllc0NhbGxiYWNrKXtcbiAgICAgICAgICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpe1xuICAgICAgICAgICAgICAgICAgICAgICAgc2VyaWVzQ2FsbGJhY2sobnVsbCk7XG4gICAgICAgICAgICAgICAgICAgIH0sIGludGVydmFsKTtcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB3aGlsZSAob3B0cy50aW1lcykge1xuXG4gICAgICAgICAgICAgICAgdmFyIGZpbmFsQXR0ZW1wdCA9ICEob3B0cy50aW1lcy09MSk7XG4gICAgICAgICAgICAgICAgYXR0ZW1wdHMucHVzaChyZXRyeUF0dGVtcHQob3B0cy50YXNrLCBmaW5hbEF0dGVtcHQpKTtcbiAgICAgICAgICAgICAgICBpZighZmluYWxBdHRlbXB0ICYmIG9wdHMuaW50ZXJ2YWwgPiAwKXtcbiAgICAgICAgICAgICAgICAgICAgYXR0ZW1wdHMucHVzaChyZXRyeUludGVydmFsKG9wdHMuaW50ZXJ2YWwpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGFzeW5jLnNlcmllcyhhdHRlbXB0cywgZnVuY3Rpb24oZG9uZSwgZGF0YSl7XG4gICAgICAgICAgICAgICAgZGF0YSA9IGRhdGFbZGF0YS5sZW5ndGggLSAxXTtcbiAgICAgICAgICAgICAgICAod3JhcHBlZENhbGxiYWNrIHx8IG9wdHMuY2FsbGJhY2spKGRhdGEuZXJyLCBkYXRhLnJlc3VsdCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIElmIGEgY2FsbGJhY2sgaXMgcGFzc2VkLCBydW4gdGhpcyBhcyBhIGNvbnRyb2xsIGZsb3dcbiAgICAgICAgcmV0dXJuIG9wdHMuY2FsbGJhY2sgPyB3cmFwcGVkVGFzaygpIDogd3JhcHBlZFRhc2s7XG4gICAgfTtcblxuICAgIGFzeW5jLndhdGVyZmFsbCA9IGZ1bmN0aW9uICh0YXNrcywgY2FsbGJhY2spIHtcbiAgICAgICAgY2FsbGJhY2sgPSBfb25jZShjYWxsYmFjayB8fCBub29wKTtcbiAgICAgICAgaWYgKCFfaXNBcnJheSh0YXNrcykpIHtcbiAgICAgICAgICAgIHZhciBlcnIgPSBuZXcgRXJyb3IoJ0ZpcnN0IGFyZ3VtZW50IHRvIHdhdGVyZmFsbCBtdXN0IGJlIGFuIGFycmF5IG9mIGZ1bmN0aW9ucycpO1xuICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKGVycik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCF0YXNrcy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHJldHVybiBjYWxsYmFjaygpO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIHdyYXBJdGVyYXRvcihpdGVyYXRvcikge1xuICAgICAgICAgICAgcmV0dXJuIF9yZXN0UGFyYW0oZnVuY3Rpb24gKGVyciwgYXJncykge1xuICAgICAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2suYXBwbHkobnVsbCwgW2Vycl0uY29uY2F0KGFyZ3MpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBuZXh0ID0gaXRlcmF0b3IubmV4dCgpO1xuICAgICAgICAgICAgICAgICAgICBpZiAobmV4dCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgYXJncy5wdXNoKHdyYXBJdGVyYXRvcihuZXh0KSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhcmdzLnB1c2goY2FsbGJhY2spO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVuc3VyZUFzeW5jKGl0ZXJhdG9yKS5hcHBseShudWxsLCBhcmdzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICB3cmFwSXRlcmF0b3IoYXN5bmMuaXRlcmF0b3IodGFza3MpKSgpO1xuICAgIH07XG5cbiAgICBmdW5jdGlvbiBfcGFyYWxsZWwoZWFjaGZuLCB0YXNrcywgY2FsbGJhY2spIHtcbiAgICAgICAgY2FsbGJhY2sgPSBjYWxsYmFjayB8fCBub29wO1xuICAgICAgICB2YXIgcmVzdWx0cyA9IF9pc0FycmF5TGlrZSh0YXNrcykgPyBbXSA6IHt9O1xuXG4gICAgICAgIGVhY2hmbih0YXNrcywgZnVuY3Rpb24gKHRhc2ssIGtleSwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIHRhc2soX3Jlc3RQYXJhbShmdW5jdGlvbiAoZXJyLCBhcmdzKSB7XG4gICAgICAgICAgICAgICAgaWYgKGFyZ3MubGVuZ3RoIDw9IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgYXJncyA9IGFyZ3NbMF07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJlc3VsdHNba2V5XSA9IGFyZ3M7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgfSwgZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgY2FsbGJhY2soZXJyLCByZXN1bHRzKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgYXN5bmMucGFyYWxsZWwgPSBmdW5jdGlvbiAodGFza3MsIGNhbGxiYWNrKSB7XG4gICAgICAgIF9wYXJhbGxlbChhc3luYy5lYWNoT2YsIHRhc2tzLCBjYWxsYmFjayk7XG4gICAgfTtcblxuICAgIGFzeW5jLnBhcmFsbGVsTGltaXQgPSBmdW5jdGlvbih0YXNrcywgbGltaXQsIGNhbGxiYWNrKSB7XG4gICAgICAgIF9wYXJhbGxlbChfZWFjaE9mTGltaXQobGltaXQpLCB0YXNrcywgY2FsbGJhY2spO1xuICAgIH07XG5cbiAgICBhc3luYy5zZXJpZXMgPSBmdW5jdGlvbih0YXNrcywgY2FsbGJhY2spIHtcbiAgICAgICAgX3BhcmFsbGVsKGFzeW5jLmVhY2hPZlNlcmllcywgdGFza3MsIGNhbGxiYWNrKTtcbiAgICB9O1xuXG4gICAgYXN5bmMuaXRlcmF0b3IgPSBmdW5jdGlvbiAodGFza3MpIHtcbiAgICAgICAgZnVuY3Rpb24gbWFrZUNhbGxiYWNrKGluZGV4KSB7XG4gICAgICAgICAgICBmdW5jdGlvbiBmbigpIHtcbiAgICAgICAgICAgICAgICBpZiAodGFza3MubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgIHRhc2tzW2luZGV4XS5hcHBseShudWxsLCBhcmd1bWVudHMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gZm4ubmV4dCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZm4ubmV4dCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gKGluZGV4IDwgdGFza3MubGVuZ3RoIC0gMSkgPyBtYWtlQ2FsbGJhY2soaW5kZXggKyAxKTogbnVsbDtcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICByZXR1cm4gZm47XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG1ha2VDYWxsYmFjaygwKTtcbiAgICB9O1xuXG4gICAgYXN5bmMuYXBwbHkgPSBfcmVzdFBhcmFtKGZ1bmN0aW9uIChmbiwgYXJncykge1xuICAgICAgICByZXR1cm4gX3Jlc3RQYXJhbShmdW5jdGlvbiAoY2FsbEFyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybiBmbi5hcHBseShcbiAgICAgICAgICAgICAgICBudWxsLCBhcmdzLmNvbmNhdChjYWxsQXJncylcbiAgICAgICAgICAgICk7XG4gICAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgZnVuY3Rpb24gX2NvbmNhdChlYWNoZm4sIGFyciwgZm4sIGNhbGxiYWNrKSB7XG4gICAgICAgIHZhciByZXN1bHQgPSBbXTtcbiAgICAgICAgZWFjaGZuKGFyciwgZnVuY3Rpb24gKHgsIGluZGV4LCBjYikge1xuICAgICAgICAgICAgZm4oeCwgZnVuY3Rpb24gKGVyciwgeSkge1xuICAgICAgICAgICAgICAgIHJlc3VsdCA9IHJlc3VsdC5jb25jYXQoeSB8fCBbXSk7XG4gICAgICAgICAgICAgICAgY2IoZXJyKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICBjYWxsYmFjayhlcnIsIHJlc3VsdCk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBhc3luYy5jb25jYXQgPSBkb1BhcmFsbGVsKF9jb25jYXQpO1xuICAgIGFzeW5jLmNvbmNhdFNlcmllcyA9IGRvU2VyaWVzKF9jb25jYXQpO1xuXG4gICAgYXN5bmMud2hpbHN0ID0gZnVuY3Rpb24gKHRlc3QsIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICBjYWxsYmFjayA9IGNhbGxiYWNrIHx8IG5vb3A7XG4gICAgICAgIGlmICh0ZXN0KCkpIHtcbiAgICAgICAgICAgIHZhciBuZXh0ID0gX3Jlc3RQYXJhbShmdW5jdGlvbihlcnIsIGFyZ3MpIHtcbiAgICAgICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0ZXN0LmFwcGx5KHRoaXMsIGFyZ3MpKSB7XG4gICAgICAgICAgICAgICAgICAgIGl0ZXJhdG9yKG5leHQpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKG51bGwpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgaXRlcmF0b3IobmV4dCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjYWxsYmFjayhudWxsKTtcbiAgICAgICAgfVxuICAgIH07XG5cbiAgICBhc3luYy5kb1doaWxzdCA9IGZ1bmN0aW9uIChpdGVyYXRvciwgdGVzdCwgY2FsbGJhY2spIHtcbiAgICAgICAgdmFyIGNhbGxzID0gMDtcbiAgICAgICAgcmV0dXJuIGFzeW5jLndoaWxzdChmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIHJldHVybiArK2NhbGxzIDw9IDEgfHwgdGVzdC5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgICAgICB9LCBpdGVyYXRvciwgY2FsbGJhY2spO1xuICAgIH07XG5cbiAgICBhc3luYy51bnRpbCA9IGZ1bmN0aW9uICh0ZXN0LCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgcmV0dXJuIGFzeW5jLndoaWxzdChmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIHJldHVybiAhdGVzdC5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgICAgICB9LCBpdGVyYXRvciwgY2FsbGJhY2spO1xuICAgIH07XG5cbiAgICBhc3luYy5kb1VudGlsID0gZnVuY3Rpb24gKGl0ZXJhdG9yLCB0ZXN0LCBjYWxsYmFjaykge1xuICAgICAgICByZXR1cm4gYXN5bmMuZG9XaGlsc3QoaXRlcmF0b3IsIGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgcmV0dXJuICF0ZXN0LmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgICAgIH0sIGNhbGxiYWNrKTtcbiAgICB9O1xuXG4gICAgYXN5bmMuZHVyaW5nID0gZnVuY3Rpb24gKHRlc3QsIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICBjYWxsYmFjayA9IGNhbGxiYWNrIHx8IG5vb3A7XG5cbiAgICAgICAgdmFyIG5leHQgPSBfcmVzdFBhcmFtKGZ1bmN0aW9uKGVyciwgYXJncykge1xuICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGFyZ3MucHVzaChjaGVjayk7XG4gICAgICAgICAgICAgICAgdGVzdC5hcHBseSh0aGlzLCBhcmdzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgdmFyIGNoZWNrID0gZnVuY3Rpb24oZXJyLCB0cnV0aCkge1xuICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHRydXRoKSB7XG4gICAgICAgICAgICAgICAgaXRlcmF0b3IobmV4dCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrKG51bGwpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuXG4gICAgICAgIHRlc3QoY2hlY2spO1xuICAgIH07XG5cbiAgICBhc3luYy5kb0R1cmluZyA9IGZ1bmN0aW9uIChpdGVyYXRvciwgdGVzdCwgY2FsbGJhY2spIHtcbiAgICAgICAgdmFyIGNhbGxzID0gMDtcbiAgICAgICAgYXN5bmMuZHVyaW5nKGZ1bmN0aW9uKG5leHQpIHtcbiAgICAgICAgICAgIGlmIChjYWxscysrIDwgMSkge1xuICAgICAgICAgICAgICAgIG5leHQobnVsbCwgdHJ1ZSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRlc3QuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSwgaXRlcmF0b3IsIGNhbGxiYWNrKTtcbiAgICB9O1xuXG4gICAgZnVuY3Rpb24gX3F1ZXVlKHdvcmtlciwgY29uY3VycmVuY3ksIHBheWxvYWQpIHtcbiAgICAgICAgaWYgKGNvbmN1cnJlbmN5ID09IG51bGwpIHtcbiAgICAgICAgICAgIGNvbmN1cnJlbmN5ID0gMTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmKGNvbmN1cnJlbmN5ID09PSAwKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0NvbmN1cnJlbmN5IG11c3Qgbm90IGJlIHplcm8nKTtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBfaW5zZXJ0KHEsIGRhdGEsIHBvcywgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIGlmIChjYWxsYmFjayAhPSBudWxsICYmIHR5cGVvZiBjYWxsYmFjayAhPT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwidGFzayBjYWxsYmFjayBtdXN0IGJlIGEgZnVuY3Rpb25cIik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBxLnN0YXJ0ZWQgPSB0cnVlO1xuICAgICAgICAgICAgaWYgKCFfaXNBcnJheShkYXRhKSkge1xuICAgICAgICAgICAgICAgIGRhdGEgPSBbZGF0YV07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZihkYXRhLmxlbmd0aCA9PT0gMCAmJiBxLmlkbGUoKSkge1xuICAgICAgICAgICAgICAgIC8vIGNhbGwgZHJhaW4gaW1tZWRpYXRlbHkgaWYgdGhlcmUgYXJlIG5vIHRhc2tzXG4gICAgICAgICAgICAgICAgcmV0dXJuIGFzeW5jLnNldEltbWVkaWF0ZShmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgICAgcS5kcmFpbigpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgX2FycmF5RWFjaChkYXRhLCBmdW5jdGlvbih0YXNrKSB7XG4gICAgICAgICAgICAgICAgdmFyIGl0ZW0gPSB7XG4gICAgICAgICAgICAgICAgICAgIGRhdGE6IHRhc2ssXG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrOiBjYWxsYmFjayB8fCBub29wXG4gICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgIGlmIChwb3MpIHtcbiAgICAgICAgICAgICAgICAgICAgcS50YXNrcy51bnNoaWZ0KGl0ZW0pO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHEudGFza3MucHVzaChpdGVtKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAocS50YXNrcy5sZW5ndGggPT09IHEuY29uY3VycmVuY3kpIHtcbiAgICAgICAgICAgICAgICAgICAgcS5zYXR1cmF0ZWQoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGFzeW5jLnNldEltbWVkaWF0ZShxLnByb2Nlc3MpO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIF9uZXh0KHEsIHRhc2tzKSB7XG4gICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24oKXtcbiAgICAgICAgICAgICAgICB3b3JrZXJzIC09IDE7XG5cbiAgICAgICAgICAgICAgICB2YXIgcmVtb3ZlZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHZhciBhcmdzID0gYXJndW1lbnRzO1xuICAgICAgICAgICAgICAgIF9hcnJheUVhY2godGFza3MsIGZ1bmN0aW9uICh0YXNrKSB7XG4gICAgICAgICAgICAgICAgICAgIF9hcnJheUVhY2god29ya2Vyc0xpc3QsIGZ1bmN0aW9uICh3b3JrZXIsIGluZGV4KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAod29ya2VyID09PSB0YXNrICYmICFyZW1vdmVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd29ya2Vyc0xpc3Quc3BsaWNlKGluZGV4LCAxKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZW1vdmVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICAgICAgdGFzay5jYWxsYmFjay5hcHBseSh0YXNrLCBhcmdzKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBpZiAocS50YXNrcy5sZW5ndGggKyB3b3JrZXJzID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIHEuZHJhaW4oKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcS5wcm9jZXNzKCk7XG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIHdvcmtlcnMgPSAwO1xuICAgICAgICB2YXIgd29ya2Vyc0xpc3QgPSBbXTtcbiAgICAgICAgdmFyIHEgPSB7XG4gICAgICAgICAgICB0YXNrczogW10sXG4gICAgICAgICAgICBjb25jdXJyZW5jeTogY29uY3VycmVuY3ksXG4gICAgICAgICAgICBwYXlsb2FkOiBwYXlsb2FkLFxuICAgICAgICAgICAgc2F0dXJhdGVkOiBub29wLFxuICAgICAgICAgICAgZW1wdHk6IG5vb3AsXG4gICAgICAgICAgICBkcmFpbjogbm9vcCxcbiAgICAgICAgICAgIHN0YXJ0ZWQ6IGZhbHNlLFxuICAgICAgICAgICAgcGF1c2VkOiBmYWxzZSxcbiAgICAgICAgICAgIHB1c2g6IGZ1bmN0aW9uIChkYXRhLCBjYWxsYmFjaykge1xuICAgICAgICAgICAgICAgIF9pbnNlcnQocSwgZGF0YSwgZmFsc2UsIGNhbGxiYWNrKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBraWxsOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgcS5kcmFpbiA9IG5vb3A7XG4gICAgICAgICAgICAgICAgcS50YXNrcyA9IFtdO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHVuc2hpZnQ6IGZ1bmN0aW9uIChkYXRhLCBjYWxsYmFjaykge1xuICAgICAgICAgICAgICAgIF9pbnNlcnQocSwgZGF0YSwgdHJ1ZSwgY2FsbGJhY2spO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHByb2Nlc3M6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBpZiAoIXEucGF1c2VkICYmIHdvcmtlcnMgPCBxLmNvbmN1cnJlbmN5ICYmIHEudGFza3MubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgIHdoaWxlKHdvcmtlcnMgPCBxLmNvbmN1cnJlbmN5ICYmIHEudGFza3MubGVuZ3RoKXtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0YXNrcyA9IHEucGF5bG9hZCA/XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcS50YXNrcy5zcGxpY2UoMCwgcS5wYXlsb2FkKSA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcS50YXNrcy5zcGxpY2UoMCwgcS50YXNrcy5sZW5ndGgpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgZGF0YSA9IF9tYXAodGFza3MsIGZ1bmN0aW9uICh0YXNrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRhc2suZGF0YTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocS50YXNrcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBxLmVtcHR5KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB3b3JrZXJzICs9IDE7XG4gICAgICAgICAgICAgICAgICAgICAgICB3b3JrZXJzTGlzdC5wdXNoKHRhc2tzWzBdKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjYiA9IG9ubHlfb25jZShfbmV4dChxLCB0YXNrcykpO1xuICAgICAgICAgICAgICAgICAgICAgICAgd29ya2VyKGRhdGEsIGNiKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBsZW5ndGg6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcS50YXNrcy5sZW5ndGg7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcnVubmluZzogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB3b3JrZXJzO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHdvcmtlcnNMaXN0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHdvcmtlcnNMaXN0O1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGlkbGU6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBxLnRhc2tzLmxlbmd0aCArIHdvcmtlcnMgPT09IDA7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcGF1c2U6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBxLnBhdXNlZCA9IHRydWU7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcmVzdW1lOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgaWYgKHEucGF1c2VkID09PSBmYWxzZSkgeyByZXR1cm47IH1cbiAgICAgICAgICAgICAgICBxLnBhdXNlZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHZhciByZXN1bWVDb3VudCA9IE1hdGgubWluKHEuY29uY3VycmVuY3ksIHEudGFza3MubGVuZ3RoKTtcbiAgICAgICAgICAgICAgICAvLyBOZWVkIHRvIGNhbGwgcS5wcm9jZXNzIG9uY2UgcGVyIGNvbmN1cnJlbnRcbiAgICAgICAgICAgICAgICAvLyB3b3JrZXIgdG8gcHJlc2VydmUgZnVsbCBjb25jdXJyZW5jeSBhZnRlciBwYXVzZVxuICAgICAgICAgICAgICAgIGZvciAodmFyIHcgPSAxOyB3IDw9IHJlc3VtZUNvdW50OyB3KyspIHtcbiAgICAgICAgICAgICAgICAgICAgYXN5bmMuc2V0SW1tZWRpYXRlKHEucHJvY2Vzcyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gcTtcbiAgICB9XG5cbiAgICBhc3luYy5xdWV1ZSA9IGZ1bmN0aW9uICh3b3JrZXIsIGNvbmN1cnJlbmN5KSB7XG4gICAgICAgIHZhciBxID0gX3F1ZXVlKGZ1bmN0aW9uIChpdGVtcywgY2IpIHtcbiAgICAgICAgICAgIHdvcmtlcihpdGVtc1swXSwgY2IpO1xuICAgICAgICB9LCBjb25jdXJyZW5jeSwgMSk7XG5cbiAgICAgICAgcmV0dXJuIHE7XG4gICAgfTtcblxuICAgIGFzeW5jLnByaW9yaXR5UXVldWUgPSBmdW5jdGlvbiAod29ya2VyLCBjb25jdXJyZW5jeSkge1xuXG4gICAgICAgIGZ1bmN0aW9uIF9jb21wYXJlVGFza3MoYSwgYil7XG4gICAgICAgICAgICByZXR1cm4gYS5wcmlvcml0eSAtIGIucHJpb3JpdHk7XG4gICAgICAgIH1cblxuICAgICAgICBmdW5jdGlvbiBfYmluYXJ5U2VhcmNoKHNlcXVlbmNlLCBpdGVtLCBjb21wYXJlKSB7XG4gICAgICAgICAgICB2YXIgYmVnID0gLTEsXG4gICAgICAgICAgICAgICAgZW5kID0gc2VxdWVuY2UubGVuZ3RoIC0gMTtcbiAgICAgICAgICAgIHdoaWxlIChiZWcgPCBlbmQpIHtcbiAgICAgICAgICAgICAgICB2YXIgbWlkID0gYmVnICsgKChlbmQgLSBiZWcgKyAxKSA+Pj4gMSk7XG4gICAgICAgICAgICAgICAgaWYgKGNvbXBhcmUoaXRlbSwgc2VxdWVuY2VbbWlkXSkgPj0gMCkge1xuICAgICAgICAgICAgICAgICAgICBiZWcgPSBtaWQ7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgZW5kID0gbWlkIC0gMTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gYmVnO1xuICAgICAgICB9XG5cbiAgICAgICAgZnVuY3Rpb24gX2luc2VydChxLCBkYXRhLCBwcmlvcml0eSwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIGlmIChjYWxsYmFjayAhPSBudWxsICYmIHR5cGVvZiBjYWxsYmFjayAhPT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwidGFzayBjYWxsYmFjayBtdXN0IGJlIGEgZnVuY3Rpb25cIik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBxLnN0YXJ0ZWQgPSB0cnVlO1xuICAgICAgICAgICAgaWYgKCFfaXNBcnJheShkYXRhKSkge1xuICAgICAgICAgICAgICAgIGRhdGEgPSBbZGF0YV07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZihkYXRhLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICAgIC8vIGNhbGwgZHJhaW4gaW1tZWRpYXRlbHkgaWYgdGhlcmUgYXJlIG5vIHRhc2tzXG4gICAgICAgICAgICAgICAgcmV0dXJuIGFzeW5jLnNldEltbWVkaWF0ZShmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgICAgcS5kcmFpbigpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgX2FycmF5RWFjaChkYXRhLCBmdW5jdGlvbih0YXNrKSB7XG4gICAgICAgICAgICAgICAgdmFyIGl0ZW0gPSB7XG4gICAgICAgICAgICAgICAgICAgIGRhdGE6IHRhc2ssXG4gICAgICAgICAgICAgICAgICAgIHByaW9yaXR5OiBwcmlvcml0eSxcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2s6IHR5cGVvZiBjYWxsYmFjayA9PT0gJ2Z1bmN0aW9uJyA/IGNhbGxiYWNrIDogbm9vcFxuICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICBxLnRhc2tzLnNwbGljZShfYmluYXJ5U2VhcmNoKHEudGFza3MsIGl0ZW0sIF9jb21wYXJlVGFza3MpICsgMSwgMCwgaXRlbSk7XG5cbiAgICAgICAgICAgICAgICBpZiAocS50YXNrcy5sZW5ndGggPT09IHEuY29uY3VycmVuY3kpIHtcbiAgICAgICAgICAgICAgICAgICAgcS5zYXR1cmF0ZWQoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYXN5bmMuc2V0SW1tZWRpYXRlKHEucHJvY2Vzcyk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFN0YXJ0IHdpdGggYSBub3JtYWwgcXVldWVcbiAgICAgICAgdmFyIHEgPSBhc3luYy5xdWV1ZSh3b3JrZXIsIGNvbmN1cnJlbmN5KTtcblxuICAgICAgICAvLyBPdmVycmlkZSBwdXNoIHRvIGFjY2VwdCBzZWNvbmQgcGFyYW1ldGVyIHJlcHJlc2VudGluZyBwcmlvcml0eVxuICAgICAgICBxLnB1c2ggPSBmdW5jdGlvbiAoZGF0YSwgcHJpb3JpdHksIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICBfaW5zZXJ0KHEsIGRhdGEsIHByaW9yaXR5LCBjYWxsYmFjayk7XG4gICAgICAgIH07XG5cbiAgICAgICAgLy8gUmVtb3ZlIHVuc2hpZnQgZnVuY3Rpb25cbiAgICAgICAgZGVsZXRlIHEudW5zaGlmdDtcblxuICAgICAgICByZXR1cm4gcTtcbiAgICB9O1xuXG4gICAgYXN5bmMuY2FyZ28gPSBmdW5jdGlvbiAod29ya2VyLCBwYXlsb2FkKSB7XG4gICAgICAgIHJldHVybiBfcXVldWUod29ya2VyLCAxLCBwYXlsb2FkKTtcbiAgICB9O1xuXG4gICAgZnVuY3Rpb24gX2NvbnNvbGVfZm4obmFtZSkge1xuICAgICAgICByZXR1cm4gX3Jlc3RQYXJhbShmdW5jdGlvbiAoZm4sIGFyZ3MpIHtcbiAgICAgICAgICAgIGZuLmFwcGx5KG51bGwsIGFyZ3MuY29uY2F0KFtfcmVzdFBhcmFtKGZ1bmN0aW9uIChlcnIsIGFyZ3MpIHtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGNvbnNvbGUgPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb25zb2xlLmVycm9yKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihlcnIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKGNvbnNvbGVbbmFtZV0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIF9hcnJheUVhY2goYXJncywgZnVuY3Rpb24gKHgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlW25hbWVdKHgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KV0pKTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGFzeW5jLmxvZyA9IF9jb25zb2xlX2ZuKCdsb2cnKTtcbiAgICBhc3luYy5kaXIgPSBfY29uc29sZV9mbignZGlyJyk7XG4gICAgLyphc3luYy5pbmZvID0gX2NvbnNvbGVfZm4oJ2luZm8nKTtcbiAgICBhc3luYy53YXJuID0gX2NvbnNvbGVfZm4oJ3dhcm4nKTtcbiAgICBhc3luYy5lcnJvciA9IF9jb25zb2xlX2ZuKCdlcnJvcicpOyovXG5cbiAgICBhc3luYy5tZW1vaXplID0gZnVuY3Rpb24gKGZuLCBoYXNoZXIpIHtcbiAgICAgICAgdmFyIG1lbW8gPSB7fTtcbiAgICAgICAgdmFyIHF1ZXVlcyA9IHt9O1xuICAgICAgICBoYXNoZXIgPSBoYXNoZXIgfHwgaWRlbnRpdHk7XG4gICAgICAgIHZhciBtZW1vaXplZCA9IF9yZXN0UGFyYW0oZnVuY3Rpb24gbWVtb2l6ZWQoYXJncykge1xuICAgICAgICAgICAgdmFyIGNhbGxiYWNrID0gYXJncy5wb3AoKTtcbiAgICAgICAgICAgIHZhciBrZXkgPSBoYXNoZXIuYXBwbHkobnVsbCwgYXJncyk7XG4gICAgICAgICAgICBpZiAoa2V5IGluIG1lbW8pIHtcbiAgICAgICAgICAgICAgICBhc3luYy5zZXRJbW1lZGlhdGUoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjay5hcHBseShudWxsLCBtZW1vW2tleV0pO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoa2V5IGluIHF1ZXVlcykge1xuICAgICAgICAgICAgICAgIHF1ZXVlc1trZXldLnB1c2goY2FsbGJhY2spO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgcXVldWVzW2tleV0gPSBbY2FsbGJhY2tdO1xuICAgICAgICAgICAgICAgIGZuLmFwcGx5KG51bGwsIGFyZ3MuY29uY2F0KFtfcmVzdFBhcmFtKGZ1bmN0aW9uIChhcmdzKSB7XG4gICAgICAgICAgICAgICAgICAgIG1lbW9ba2V5XSA9IGFyZ3M7XG4gICAgICAgICAgICAgICAgICAgIHZhciBxID0gcXVldWVzW2tleV07XG4gICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBxdWV1ZXNba2V5XTtcbiAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDAsIGwgPSBxLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgcVtpXS5hcHBseShudWxsLCBhcmdzKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pXSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgbWVtb2l6ZWQubWVtbyA9IG1lbW87XG4gICAgICAgIG1lbW9pemVkLnVubWVtb2l6ZWQgPSBmbjtcbiAgICAgICAgcmV0dXJuIG1lbW9pemVkO1xuICAgIH07XG5cbiAgICBhc3luYy51bm1lbW9pemUgPSBmdW5jdGlvbiAoZm4pIHtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiAoZm4udW5tZW1vaXplZCB8fCBmbikuYXBwbHkobnVsbCwgYXJndW1lbnRzKTtcbiAgICAgICAgfTtcbiAgICB9O1xuXG4gICAgZnVuY3Rpb24gX3RpbWVzKG1hcHBlcikge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKGNvdW50LCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIG1hcHBlcihfcmFuZ2UoY291bnQpLCBpdGVyYXRvciwgY2FsbGJhY2spO1xuICAgICAgICB9O1xuICAgIH1cblxuICAgIGFzeW5jLnRpbWVzID0gX3RpbWVzKGFzeW5jLm1hcCk7XG4gICAgYXN5bmMudGltZXNTZXJpZXMgPSBfdGltZXMoYXN5bmMubWFwU2VyaWVzKTtcbiAgICBhc3luYy50aW1lc0xpbWl0ID0gZnVuY3Rpb24gKGNvdW50LCBsaW1pdCwgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgIHJldHVybiBhc3luYy5tYXBMaW1pdChfcmFuZ2UoY291bnQpLCBsaW1pdCwgaXRlcmF0b3IsIGNhbGxiYWNrKTtcbiAgICB9O1xuXG4gICAgYXN5bmMuc2VxID0gZnVuY3Rpb24gKC8qIGZ1bmN0aW9ucy4uLiAqLykge1xuICAgICAgICB2YXIgZm5zID0gYXJndW1lbnRzO1xuICAgICAgICByZXR1cm4gX3Jlc3RQYXJhbShmdW5jdGlvbiAoYXJncykge1xuICAgICAgICAgICAgdmFyIHRoYXQgPSB0aGlzO1xuXG4gICAgICAgICAgICB2YXIgY2FsbGJhY2sgPSBhcmdzW2FyZ3MubGVuZ3RoIC0gMV07XG4gICAgICAgICAgICBpZiAodHlwZW9mIGNhbGxiYWNrID09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICBhcmdzLnBvcCgpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBjYWxsYmFjayA9IG5vb3A7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGFzeW5jLnJlZHVjZShmbnMsIGFyZ3MsIGZ1bmN0aW9uIChuZXdhcmdzLCBmbiwgY2IpIHtcbiAgICAgICAgICAgICAgICBmbi5hcHBseSh0aGF0LCBuZXdhcmdzLmNvbmNhdChbX3Jlc3RQYXJhbShmdW5jdGlvbiAoZXJyLCBuZXh0YXJncykge1xuICAgICAgICAgICAgICAgICAgICBjYihlcnIsIG5leHRhcmdzKTtcbiAgICAgICAgICAgICAgICB9KV0pKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBmdW5jdGlvbiAoZXJyLCByZXN1bHRzKSB7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2suYXBwbHkodGhhdCwgW2Vycl0uY29uY2F0KHJlc3VsdHMpKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9O1xuXG4gICAgYXN5bmMuY29tcG9zZSA9IGZ1bmN0aW9uICgvKiBmdW5jdGlvbnMuLi4gKi8pIHtcbiAgICAgICAgcmV0dXJuIGFzeW5jLnNlcS5hcHBseShudWxsLCBBcnJheS5wcm90b3R5cGUucmV2ZXJzZS5jYWxsKGFyZ3VtZW50cykpO1xuICAgIH07XG5cblxuICAgIGZ1bmN0aW9uIF9hcHBseUVhY2goZWFjaGZuKSB7XG4gICAgICAgIHJldHVybiBfcmVzdFBhcmFtKGZ1bmN0aW9uKGZucywgYXJncykge1xuICAgICAgICAgICAgdmFyIGdvID0gX3Jlc3RQYXJhbShmdW5jdGlvbihhcmdzKSB7XG4gICAgICAgICAgICAgICAgdmFyIHRoYXQgPSB0aGlzO1xuICAgICAgICAgICAgICAgIHZhciBjYWxsYmFjayA9IGFyZ3MucG9wKCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGVhY2hmbihmbnMsIGZ1bmN0aW9uIChmbiwgXywgY2IpIHtcbiAgICAgICAgICAgICAgICAgICAgZm4uYXBwbHkodGhhdCwgYXJncy5jb25jYXQoW2NiXSkpO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgY2FsbGJhY2spO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBpZiAoYXJncy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZ28uYXBwbHkodGhpcywgYXJncyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZ287XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGFzeW5jLmFwcGx5RWFjaCA9IF9hcHBseUVhY2goYXN5bmMuZWFjaE9mKTtcbiAgICBhc3luYy5hcHBseUVhY2hTZXJpZXMgPSBfYXBwbHlFYWNoKGFzeW5jLmVhY2hPZlNlcmllcyk7XG5cblxuICAgIGFzeW5jLmZvcmV2ZXIgPSBmdW5jdGlvbiAoZm4sIGNhbGxiYWNrKSB7XG4gICAgICAgIHZhciBkb25lID0gb25seV9vbmNlKGNhbGxiYWNrIHx8IG5vb3ApO1xuICAgICAgICB2YXIgdGFzayA9IGVuc3VyZUFzeW5jKGZuKTtcbiAgICAgICAgZnVuY3Rpb24gbmV4dChlcnIpIHtcbiAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZG9uZShlcnIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGFzayhuZXh0KTtcbiAgICAgICAgfVxuICAgICAgICBuZXh0KCk7XG4gICAgfTtcblxuICAgIGZ1bmN0aW9uIGVuc3VyZUFzeW5jKGZuKSB7XG4gICAgICAgIHJldHVybiBfcmVzdFBhcmFtKGZ1bmN0aW9uIChhcmdzKSB7XG4gICAgICAgICAgICB2YXIgY2FsbGJhY2sgPSBhcmdzLnBvcCgpO1xuICAgICAgICAgICAgYXJncy5wdXNoKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICB2YXIgaW5uZXJBcmdzID0gYXJndW1lbnRzO1xuICAgICAgICAgICAgICAgIGlmIChzeW5jKSB7XG4gICAgICAgICAgICAgICAgICAgIGFzeW5jLnNldEltbWVkaWF0ZShmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjYWxsYmFjay5hcHBseShudWxsLCBpbm5lckFyZ3MpO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjay5hcHBseShudWxsLCBpbm5lckFyZ3MpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdmFyIHN5bmMgPSB0cnVlO1xuICAgICAgICAgICAgZm4uYXBwbHkodGhpcywgYXJncyk7XG4gICAgICAgICAgICBzeW5jID0gZmFsc2U7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGFzeW5jLmVuc3VyZUFzeW5jID0gZW5zdXJlQXN5bmM7XG5cbiAgICBhc3luYy5jb25zdGFudCA9IF9yZXN0UGFyYW0oZnVuY3Rpb24odmFsdWVzKSB7XG4gICAgICAgIHZhciBhcmdzID0gW251bGxdLmNvbmNhdCh2YWx1ZXMpO1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKGNhbGxiYWNrKSB7XG4gICAgICAgICAgICByZXR1cm4gY2FsbGJhY2suYXBwbHkodGhpcywgYXJncyk7XG4gICAgICAgIH07XG4gICAgfSk7XG5cbiAgICBhc3luYy53cmFwU3luYyA9XG4gICAgYXN5bmMuYXN5bmNpZnkgPSBmdW5jdGlvbiBhc3luY2lmeShmdW5jKSB7XG4gICAgICAgIHJldHVybiBfcmVzdFBhcmFtKGZ1bmN0aW9uIChhcmdzKSB7XG4gICAgICAgICAgICB2YXIgY2FsbGJhY2sgPSBhcmdzLnBvcCgpO1xuICAgICAgICAgICAgdmFyIHJlc3VsdDtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0ID0gZnVuYy5hcHBseSh0aGlzLCBhcmdzKTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gY2FsbGJhY2soZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBpZiByZXN1bHQgaXMgUHJvbWlzZSBvYmplY3RcbiAgICAgICAgICAgIGlmIChfaXNPYmplY3QocmVzdWx0KSAmJiB0eXBlb2YgcmVzdWx0LnRoZW4gPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICAgICAgICAgIHJlc3VsdC50aGVuKGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKG51bGwsIHZhbHVlKTtcbiAgICAgICAgICAgICAgICB9KVtcImNhdGNoXCJdKGZ1bmN0aW9uKGVycikge1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnIubWVzc2FnZSA/IGVyciA6IG5ldyBFcnJvcihlcnIpKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2sobnVsbCwgcmVzdWx0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfTtcblxuICAgIC8vIE5vZGUuanNcbiAgICBpZiAodHlwZW9mIG1vZHVsZSA9PT0gJ29iamVjdCcgJiYgbW9kdWxlLmV4cG9ydHMpIHtcbiAgICAgICAgbW9kdWxlLmV4cG9ydHMgPSBhc3luYztcbiAgICB9XG4gICAgLy8gQU1EIC8gUmVxdWlyZUpTXG4gICAgZWxzZSBpZiAodHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kKSB7XG4gICAgICAgIGRlZmluZShbXSwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIGFzeW5jO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgLy8gaW5jbHVkZWQgZGlyZWN0bHkgdmlhIDxzY3JpcHQ+IHRhZ1xuICAgIGVsc2Uge1xuICAgICAgICByb290LmFzeW5jID0gYXN5bmM7XG4gICAgfVxuXG59KCkpO1xuIiwiLy8gQ29weXJpZ2h0IEpveWVudCwgSW5jLiBhbmQgb3RoZXIgTm9kZSBjb250cmlidXRvcnMuXG4vL1xuLy8gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGFcbi8vIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGVcbi8vIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZ1xuLy8gd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLFxuLy8gZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdFxuLy8gcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlXG4vLyBmb2xsb3dpbmcgY29uZGl0aW9uczpcbi8vXG4vLyBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZFxuLy8gaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4vL1xuLy8gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTU1xuLy8gT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRlxuLy8gTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTlxuLy8gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sXG4vLyBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1Jcbi8vIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEVcbi8vIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG5cbi8vIHJlc29sdmVzIC4gYW5kIC4uIGVsZW1lbnRzIGluIGEgcGF0aCBhcnJheSB3aXRoIGRpcmVjdG9yeSBuYW1lcyB0aGVyZVxuLy8gbXVzdCBiZSBubyBzbGFzaGVzLCBlbXB0eSBlbGVtZW50cywgb3IgZGV2aWNlIG5hbWVzIChjOlxcKSBpbiB0aGUgYXJyYXlcbi8vIChzbyBhbHNvIG5vIGxlYWRpbmcgYW5kIHRyYWlsaW5nIHNsYXNoZXMgLSBpdCBkb2VzIG5vdCBkaXN0aW5ndWlzaFxuLy8gcmVsYXRpdmUgYW5kIGFic29sdXRlIHBhdGhzKVxuZnVuY3Rpb24gbm9ybWFsaXplQXJyYXkocGFydHMsIGFsbG93QWJvdmVSb290KSB7XG4gIC8vIGlmIHRoZSBwYXRoIHRyaWVzIHRvIGdvIGFib3ZlIHRoZSByb290LCBgdXBgIGVuZHMgdXAgPiAwXG4gIHZhciB1cCA9IDA7XG4gIGZvciAodmFyIGkgPSBwYXJ0cy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgIHZhciBsYXN0ID0gcGFydHNbaV07XG4gICAgaWYgKGxhc3QgPT09ICcuJykge1xuICAgICAgcGFydHMuc3BsaWNlKGksIDEpO1xuICAgIH0gZWxzZSBpZiAobGFzdCA9PT0gJy4uJykge1xuICAgICAgcGFydHMuc3BsaWNlKGksIDEpO1xuICAgICAgdXArKztcbiAgICB9IGVsc2UgaWYgKHVwKSB7XG4gICAgICBwYXJ0cy5zcGxpY2UoaSwgMSk7XG4gICAgICB1cC0tO1xuICAgIH1cbiAgfVxuXG4gIC8vIGlmIHRoZSBwYXRoIGlzIGFsbG93ZWQgdG8gZ28gYWJvdmUgdGhlIHJvb3QsIHJlc3RvcmUgbGVhZGluZyAuLnNcbiAgaWYgKGFsbG93QWJvdmVSb290KSB7XG4gICAgZm9yICg7IHVwLS07IHVwKSB7XG4gICAgICBwYXJ0cy51bnNoaWZ0KCcuLicpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBwYXJ0cztcbn1cblxuLy8gU3BsaXQgYSBmaWxlbmFtZSBpbnRvIFtyb290LCBkaXIsIGJhc2VuYW1lLCBleHRdLCB1bml4IHZlcnNpb25cbi8vICdyb290JyBpcyBqdXN0IGEgc2xhc2gsIG9yIG5vdGhpbmcuXG52YXIgc3BsaXRQYXRoUmUgPVxuICAgIC9eKFxcLz98KShbXFxzXFxTXSo/KSgoPzpcXC57MSwyfXxbXlxcL10rP3wpKFxcLlteLlxcL10qfCkpKD86W1xcL10qKSQvO1xudmFyIHNwbGl0UGF0aCA9IGZ1bmN0aW9uKGZpbGVuYW1lKSB7XG4gIHJldHVybiBzcGxpdFBhdGhSZS5leGVjKGZpbGVuYW1lKS5zbGljZSgxKTtcbn07XG5cbi8vIHBhdGgucmVzb2x2ZShbZnJvbSAuLi5dLCB0bylcbi8vIHBvc2l4IHZlcnNpb25cbmV4cG9ydHMucmVzb2x2ZSA9IGZ1bmN0aW9uKCkge1xuICB2YXIgcmVzb2x2ZWRQYXRoID0gJycsXG4gICAgICByZXNvbHZlZEFic29sdXRlID0gZmFsc2U7XG5cbiAgZm9yICh2YXIgaSA9IGFyZ3VtZW50cy5sZW5ndGggLSAxOyBpID49IC0xICYmICFyZXNvbHZlZEFic29sdXRlOyBpLS0pIHtcbiAgICB2YXIgcGF0aCA9IChpID49IDApID8gYXJndW1lbnRzW2ldIDogcHJvY2Vzcy5jd2QoKTtcblxuICAgIC8vIFNraXAgZW1wdHkgYW5kIGludmFsaWQgZW50cmllc1xuICAgIGlmICh0eXBlb2YgcGF0aCAhPT0gJ3N0cmluZycpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0FyZ3VtZW50cyB0byBwYXRoLnJlc29sdmUgbXVzdCBiZSBzdHJpbmdzJyk7XG4gICAgfSBlbHNlIGlmICghcGF0aCkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgcmVzb2x2ZWRQYXRoID0gcGF0aCArICcvJyArIHJlc29sdmVkUGF0aDtcbiAgICByZXNvbHZlZEFic29sdXRlID0gcGF0aC5jaGFyQXQoMCkgPT09ICcvJztcbiAgfVxuXG4gIC8vIEF0IHRoaXMgcG9pbnQgdGhlIHBhdGggc2hvdWxkIGJlIHJlc29sdmVkIHRvIGEgZnVsbCBhYnNvbHV0ZSBwYXRoLCBidXRcbiAgLy8gaGFuZGxlIHJlbGF0aXZlIHBhdGhzIHRvIGJlIHNhZmUgKG1pZ2h0IGhhcHBlbiB3aGVuIHByb2Nlc3MuY3dkKCkgZmFpbHMpXG5cbiAgLy8gTm9ybWFsaXplIHRoZSBwYXRoXG4gIHJlc29sdmVkUGF0aCA9IG5vcm1hbGl6ZUFycmF5KGZpbHRlcihyZXNvbHZlZFBhdGguc3BsaXQoJy8nKSwgZnVuY3Rpb24ocCkge1xuICAgIHJldHVybiAhIXA7XG4gIH0pLCAhcmVzb2x2ZWRBYnNvbHV0ZSkuam9pbignLycpO1xuXG4gIHJldHVybiAoKHJlc29sdmVkQWJzb2x1dGUgPyAnLycgOiAnJykgKyByZXNvbHZlZFBhdGgpIHx8ICcuJztcbn07XG5cbi8vIHBhdGgubm9ybWFsaXplKHBhdGgpXG4vLyBwb3NpeCB2ZXJzaW9uXG5leHBvcnRzLm5vcm1hbGl6ZSA9IGZ1bmN0aW9uKHBhdGgpIHtcbiAgdmFyIGlzQWJzb2x1dGUgPSBleHBvcnRzLmlzQWJzb2x1dGUocGF0aCksXG4gICAgICB0cmFpbGluZ1NsYXNoID0gc3Vic3RyKHBhdGgsIC0xKSA9PT0gJy8nO1xuXG4gIC8vIE5vcm1hbGl6ZSB0aGUgcGF0aFxuICBwYXRoID0gbm9ybWFsaXplQXJyYXkoZmlsdGVyKHBhdGguc3BsaXQoJy8nKSwgZnVuY3Rpb24ocCkge1xuICAgIHJldHVybiAhIXA7XG4gIH0pLCAhaXNBYnNvbHV0ZSkuam9pbignLycpO1xuXG4gIGlmICghcGF0aCAmJiAhaXNBYnNvbHV0ZSkge1xuICAgIHBhdGggPSAnLic7XG4gIH1cbiAgaWYgKHBhdGggJiYgdHJhaWxpbmdTbGFzaCkge1xuICAgIHBhdGggKz0gJy8nO1xuICB9XG5cbiAgcmV0dXJuIChpc0Fic29sdXRlID8gJy8nIDogJycpICsgcGF0aDtcbn07XG5cbi8vIHBvc2l4IHZlcnNpb25cbmV4cG9ydHMuaXNBYnNvbHV0ZSA9IGZ1bmN0aW9uKHBhdGgpIHtcbiAgcmV0dXJuIHBhdGguY2hhckF0KDApID09PSAnLyc7XG59O1xuXG4vLyBwb3NpeCB2ZXJzaW9uXG5leHBvcnRzLmpvaW4gPSBmdW5jdGlvbigpIHtcbiAgdmFyIHBhdGhzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAwKTtcbiAgcmV0dXJuIGV4cG9ydHMubm9ybWFsaXplKGZpbHRlcihwYXRocywgZnVuY3Rpb24ocCwgaW5kZXgpIHtcbiAgICBpZiAodHlwZW9mIHAgIT09ICdzdHJpbmcnKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdBcmd1bWVudHMgdG8gcGF0aC5qb2luIG11c3QgYmUgc3RyaW5ncycpO1xuICAgIH1cbiAgICByZXR1cm4gcDtcbiAgfSkuam9pbignLycpKTtcbn07XG5cblxuLy8gcGF0aC5yZWxhdGl2ZShmcm9tLCB0bylcbi8vIHBvc2l4IHZlcnNpb25cbmV4cG9ydHMucmVsYXRpdmUgPSBmdW5jdGlvbihmcm9tLCB0bykge1xuICBmcm9tID0gZXhwb3J0cy5yZXNvbHZlKGZyb20pLnN1YnN0cigxKTtcbiAgdG8gPSBleHBvcnRzLnJlc29sdmUodG8pLnN1YnN0cigxKTtcblxuICBmdW5jdGlvbiB0cmltKGFycikge1xuICAgIHZhciBzdGFydCA9IDA7XG4gICAgZm9yICg7IHN0YXJ0IDwgYXJyLmxlbmd0aDsgc3RhcnQrKykge1xuICAgICAgaWYgKGFycltzdGFydF0gIT09ICcnKSBicmVhaztcbiAgICB9XG5cbiAgICB2YXIgZW5kID0gYXJyLmxlbmd0aCAtIDE7XG4gICAgZm9yICg7IGVuZCA+PSAwOyBlbmQtLSkge1xuICAgICAgaWYgKGFycltlbmRdICE9PSAnJykgYnJlYWs7XG4gICAgfVxuXG4gICAgaWYgKHN0YXJ0ID4gZW5kKSByZXR1cm4gW107XG4gICAgcmV0dXJuIGFyci5zbGljZShzdGFydCwgZW5kIC0gc3RhcnQgKyAxKTtcbiAgfVxuXG4gIHZhciBmcm9tUGFydHMgPSB0cmltKGZyb20uc3BsaXQoJy8nKSk7XG4gIHZhciB0b1BhcnRzID0gdHJpbSh0by5zcGxpdCgnLycpKTtcblxuICB2YXIgbGVuZ3RoID0gTWF0aC5taW4oZnJvbVBhcnRzLmxlbmd0aCwgdG9QYXJ0cy5sZW5ndGgpO1xuICB2YXIgc2FtZVBhcnRzTGVuZ3RoID0gbGVuZ3RoO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgaWYgKGZyb21QYXJ0c1tpXSAhPT0gdG9QYXJ0c1tpXSkge1xuICAgICAgc2FtZVBhcnRzTGVuZ3RoID0gaTtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuXG4gIHZhciBvdXRwdXRQYXJ0cyA9IFtdO1xuICBmb3IgKHZhciBpID0gc2FtZVBhcnRzTGVuZ3RoOyBpIDwgZnJvbVBhcnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgb3V0cHV0UGFydHMucHVzaCgnLi4nKTtcbiAgfVxuXG4gIG91dHB1dFBhcnRzID0gb3V0cHV0UGFydHMuY29uY2F0KHRvUGFydHMuc2xpY2Uoc2FtZVBhcnRzTGVuZ3RoKSk7XG5cbiAgcmV0dXJuIG91dHB1dFBhcnRzLmpvaW4oJy8nKTtcbn07XG5cbmV4cG9ydHMuc2VwID0gJy8nO1xuZXhwb3J0cy5kZWxpbWl0ZXIgPSAnOic7XG5cbmV4cG9ydHMuZGlybmFtZSA9IGZ1bmN0aW9uKHBhdGgpIHtcbiAgdmFyIHJlc3VsdCA9IHNwbGl0UGF0aChwYXRoKSxcbiAgICAgIHJvb3QgPSByZXN1bHRbMF0sXG4gICAgICBkaXIgPSByZXN1bHRbMV07XG5cbiAgaWYgKCFyb290ICYmICFkaXIpIHtcbiAgICAvLyBObyBkaXJuYW1lIHdoYXRzb2V2ZXJcbiAgICByZXR1cm4gJy4nO1xuICB9XG5cbiAgaWYgKGRpcikge1xuICAgIC8vIEl0IGhhcyBhIGRpcm5hbWUsIHN0cmlwIHRyYWlsaW5nIHNsYXNoXG4gICAgZGlyID0gZGlyLnN1YnN0cigwLCBkaXIubGVuZ3RoIC0gMSk7XG4gIH1cblxuICByZXR1cm4gcm9vdCArIGRpcjtcbn07XG5cblxuZXhwb3J0cy5iYXNlbmFtZSA9IGZ1bmN0aW9uKHBhdGgsIGV4dCkge1xuICB2YXIgZiA9IHNwbGl0UGF0aChwYXRoKVsyXTtcbiAgLy8gVE9ETzogbWFrZSB0aGlzIGNvbXBhcmlzb24gY2FzZS1pbnNlbnNpdGl2ZSBvbiB3aW5kb3dzP1xuICBpZiAoZXh0ICYmIGYuc3Vic3RyKC0xICogZXh0Lmxlbmd0aCkgPT09IGV4dCkge1xuICAgIGYgPSBmLnN1YnN0cigwLCBmLmxlbmd0aCAtIGV4dC5sZW5ndGgpO1xuICB9XG4gIHJldHVybiBmO1xufTtcblxuXG5leHBvcnRzLmV4dG5hbWUgPSBmdW5jdGlvbihwYXRoKSB7XG4gIHJldHVybiBzcGxpdFBhdGgocGF0aClbM107XG59O1xuXG5mdW5jdGlvbiBmaWx0ZXIgKHhzLCBmKSB7XG4gICAgaWYgKHhzLmZpbHRlcikgcmV0dXJuIHhzLmZpbHRlcihmKTtcbiAgICB2YXIgcmVzID0gW107XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB4cy5sZW5ndGg7IGkrKykge1xuICAgICAgICBpZiAoZih4c1tpXSwgaSwgeHMpKSByZXMucHVzaCh4c1tpXSk7XG4gICAgfVxuICAgIHJldHVybiByZXM7XG59XG5cbi8vIFN0cmluZy5wcm90b3R5cGUuc3Vic3RyIC0gbmVnYXRpdmUgaW5kZXggZG9uJ3Qgd29yayBpbiBJRThcbnZhciBzdWJzdHIgPSAnYWInLnN1YnN0cigtMSkgPT09ICdiJ1xuICAgID8gZnVuY3Rpb24gKHN0ciwgc3RhcnQsIGxlbikgeyByZXR1cm4gc3RyLnN1YnN0cihzdGFydCwgbGVuKSB9XG4gICAgOiBmdW5jdGlvbiAoc3RyLCBzdGFydCwgbGVuKSB7XG4gICAgICAgIGlmIChzdGFydCA8IDApIHN0YXJ0ID0gc3RyLmxlbmd0aCArIHN0YXJ0O1xuICAgICAgICByZXR1cm4gc3RyLnN1YnN0cihzdGFydCwgbGVuKTtcbiAgICB9XG47XG4iLCIvLyBzaGltIGZvciB1c2luZyBwcm9jZXNzIGluIGJyb3dzZXJcblxudmFyIHByb2Nlc3MgPSBtb2R1bGUuZXhwb3J0cyA9IHt9O1xudmFyIHF1ZXVlID0gW107XG52YXIgZHJhaW5pbmcgPSBmYWxzZTtcbnZhciBjdXJyZW50UXVldWU7XG52YXIgcXVldWVJbmRleCA9IC0xO1xuXG5mdW5jdGlvbiBjbGVhblVwTmV4dFRpY2soKSB7XG4gICAgZHJhaW5pbmcgPSBmYWxzZTtcbiAgICBpZiAoY3VycmVudFF1ZXVlLmxlbmd0aCkge1xuICAgICAgICBxdWV1ZSA9IGN1cnJlbnRRdWV1ZS5jb25jYXQocXVldWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHF1ZXVlSW5kZXggPSAtMTtcbiAgICB9XG4gICAgaWYgKHF1ZXVlLmxlbmd0aCkge1xuICAgICAgICBkcmFpblF1ZXVlKCk7XG4gICAgfVxufVxuXG5mdW5jdGlvbiBkcmFpblF1ZXVlKCkge1xuICAgIGlmIChkcmFpbmluZykge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIHZhciB0aW1lb3V0ID0gc2V0VGltZW91dChjbGVhblVwTmV4dFRpY2spO1xuICAgIGRyYWluaW5nID0gdHJ1ZTtcblxuICAgIHZhciBsZW4gPSBxdWV1ZS5sZW5ndGg7XG4gICAgd2hpbGUobGVuKSB7XG4gICAgICAgIGN1cnJlbnRRdWV1ZSA9IHF1ZXVlO1xuICAgICAgICBxdWV1ZSA9IFtdO1xuICAgICAgICB3aGlsZSAoKytxdWV1ZUluZGV4IDwgbGVuKSB7XG4gICAgICAgICAgICBpZiAoY3VycmVudFF1ZXVlKSB7XG4gICAgICAgICAgICAgICAgY3VycmVudFF1ZXVlW3F1ZXVlSW5kZXhdLnJ1bigpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHF1ZXVlSW5kZXggPSAtMTtcbiAgICAgICAgbGVuID0gcXVldWUubGVuZ3RoO1xuICAgIH1cbiAgICBjdXJyZW50UXVldWUgPSBudWxsO1xuICAgIGRyYWluaW5nID0gZmFsc2U7XG4gICAgY2xlYXJUaW1lb3V0KHRpbWVvdXQpO1xufVxuXG5wcm9jZXNzLm5leHRUaWNrID0gZnVuY3Rpb24gKGZ1bikge1xuICAgIHZhciBhcmdzID0gbmV3IEFycmF5KGFyZ3VtZW50cy5sZW5ndGggLSAxKTtcbiAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGFyZ3NbaSAtIDFdID0gYXJndW1lbnRzW2ldO1xuICAgICAgICB9XG4gICAgfVxuICAgIHF1ZXVlLnB1c2gobmV3IEl0ZW0oZnVuLCBhcmdzKSk7XG4gICAgaWYgKHF1ZXVlLmxlbmd0aCA9PT0gMSAmJiAhZHJhaW5pbmcpIHtcbiAgICAgICAgc2V0VGltZW91dChkcmFpblF1ZXVlLCAwKTtcbiAgICB9XG59O1xuXG4vLyB2OCBsaWtlcyBwcmVkaWN0aWJsZSBvYmplY3RzXG5mdW5jdGlvbiBJdGVtKGZ1biwgYXJyYXkpIHtcbiAgICB0aGlzLmZ1biA9IGZ1bjtcbiAgICB0aGlzLmFycmF5ID0gYXJyYXk7XG59XG5JdGVtLnByb3RvdHlwZS5ydW4gPSBmdW5jdGlvbiAoKSB7XG4gICAgdGhpcy5mdW4uYXBwbHkobnVsbCwgdGhpcy5hcnJheSk7XG59O1xucHJvY2Vzcy50aXRsZSA9ICdicm93c2VyJztcbnByb2Nlc3MuYnJvd3NlciA9IHRydWU7XG5wcm9jZXNzLmVudiA9IHt9O1xucHJvY2Vzcy5hcmd2ID0gW107XG5wcm9jZXNzLnZlcnNpb24gPSAnJzsgLy8gZW1wdHkgc3RyaW5nIHRvIGF2b2lkIHJlZ2V4cCBpc3N1ZXNcbnByb2Nlc3MudmVyc2lvbnMgPSB7fTtcblxuZnVuY3Rpb24gbm9vcCgpIHt9XG5cbnByb2Nlc3Mub24gPSBub29wO1xucHJvY2Vzcy5hZGRMaXN0ZW5lciA9IG5vb3A7XG5wcm9jZXNzLm9uY2UgPSBub29wO1xucHJvY2Vzcy5vZmYgPSBub29wO1xucHJvY2Vzcy5yZW1vdmVMaXN0ZW5lciA9IG5vb3A7XG5wcm9jZXNzLnJlbW92ZUFsbExpc3RlbmVycyA9IG5vb3A7XG5wcm9jZXNzLmVtaXQgPSBub29wO1xuXG5wcm9jZXNzLmJpbmRpbmcgPSBmdW5jdGlvbiAobmFtZSkge1xuICAgIHRocm93IG5ldyBFcnJvcigncHJvY2Vzcy5iaW5kaW5nIGlzIG5vdCBzdXBwb3J0ZWQnKTtcbn07XG5cbnByb2Nlc3MuY3dkID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gJy8nIH07XG5wcm9jZXNzLmNoZGlyID0gZnVuY3Rpb24gKGRpcikge1xuICAgIHRocm93IG5ldyBFcnJvcigncHJvY2Vzcy5jaGRpciBpcyBub3Qgc3VwcG9ydGVkJyk7XG59O1xucHJvY2Vzcy51bWFzayA9IGZ1bmN0aW9uKCkgeyByZXR1cm4gMDsgfTtcbiIsIi8qISBodHRwczovL210aHMuYmUvcHVueWNvZGUgdjEuNC4wIGJ5IEBtYXRoaWFzICovXG47KGZ1bmN0aW9uKHJvb3QpIHtcblxuXHQvKiogRGV0ZWN0IGZyZWUgdmFyaWFibGVzICovXG5cdHZhciBmcmVlRXhwb3J0cyA9IHR5cGVvZiBleHBvcnRzID09ICdvYmplY3QnICYmIGV4cG9ydHMgJiZcblx0XHQhZXhwb3J0cy5ub2RlVHlwZSAmJiBleHBvcnRzO1xuXHR2YXIgZnJlZU1vZHVsZSA9IHR5cGVvZiBtb2R1bGUgPT0gJ29iamVjdCcgJiYgbW9kdWxlICYmXG5cdFx0IW1vZHVsZS5ub2RlVHlwZSAmJiBtb2R1bGU7XG5cdHZhciBmcmVlR2xvYmFsID0gdHlwZW9mIGdsb2JhbCA9PSAnb2JqZWN0JyAmJiBnbG9iYWw7XG5cdGlmIChcblx0XHRmcmVlR2xvYmFsLmdsb2JhbCA9PT0gZnJlZUdsb2JhbCB8fFxuXHRcdGZyZWVHbG9iYWwud2luZG93ID09PSBmcmVlR2xvYmFsIHx8XG5cdFx0ZnJlZUdsb2JhbC5zZWxmID09PSBmcmVlR2xvYmFsXG5cdCkge1xuXHRcdHJvb3QgPSBmcmVlR2xvYmFsO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoZSBgcHVueWNvZGVgIG9iamVjdC5cblx0ICogQG5hbWUgcHVueWNvZGVcblx0ICogQHR5cGUgT2JqZWN0XG5cdCAqL1xuXHR2YXIgcHVueWNvZGUsXG5cblx0LyoqIEhpZ2hlc3QgcG9zaXRpdmUgc2lnbmVkIDMyLWJpdCBmbG9hdCB2YWx1ZSAqL1xuXHRtYXhJbnQgPSAyMTQ3NDgzNjQ3LCAvLyBha2EuIDB4N0ZGRkZGRkYgb3IgMl4zMS0xXG5cblx0LyoqIEJvb3RzdHJpbmcgcGFyYW1ldGVycyAqL1xuXHRiYXNlID0gMzYsXG5cdHRNaW4gPSAxLFxuXHR0TWF4ID0gMjYsXG5cdHNrZXcgPSAzOCxcblx0ZGFtcCA9IDcwMCxcblx0aW5pdGlhbEJpYXMgPSA3Mixcblx0aW5pdGlhbE4gPSAxMjgsIC8vIDB4ODBcblx0ZGVsaW1pdGVyID0gJy0nLCAvLyAnXFx4MkQnXG5cblx0LyoqIFJlZ3VsYXIgZXhwcmVzc2lvbnMgKi9cblx0cmVnZXhQdW55Y29kZSA9IC9eeG4tLS8sXG5cdHJlZ2V4Tm9uQVNDSUkgPSAvW15cXHgyMC1cXHg3RV0vLCAvLyB1bnByaW50YWJsZSBBU0NJSSBjaGFycyArIG5vbi1BU0NJSSBjaGFyc1xuXHRyZWdleFNlcGFyYXRvcnMgPSAvW1xceDJFXFx1MzAwMlxcdUZGMEVcXHVGRjYxXS9nLCAvLyBSRkMgMzQ5MCBzZXBhcmF0b3JzXG5cblx0LyoqIEVycm9yIG1lc3NhZ2VzICovXG5cdGVycm9ycyA9IHtcblx0XHQnb3ZlcmZsb3cnOiAnT3ZlcmZsb3c6IGlucHV0IG5lZWRzIHdpZGVyIGludGVnZXJzIHRvIHByb2Nlc3MnLFxuXHRcdCdub3QtYmFzaWMnOiAnSWxsZWdhbCBpbnB1dCA+PSAweDgwIChub3QgYSBiYXNpYyBjb2RlIHBvaW50KScsXG5cdFx0J2ludmFsaWQtaW5wdXQnOiAnSW52YWxpZCBpbnB1dCdcblx0fSxcblxuXHQvKiogQ29udmVuaWVuY2Ugc2hvcnRjdXRzICovXG5cdGJhc2VNaW51c1RNaW4gPSBiYXNlIC0gdE1pbixcblx0Zmxvb3IgPSBNYXRoLmZsb29yLFxuXHRzdHJpbmdGcm9tQ2hhckNvZGUgPSBTdHJpbmcuZnJvbUNoYXJDb2RlLFxuXG5cdC8qKiBUZW1wb3JhcnkgdmFyaWFibGUgKi9cblx0a2V5O1xuXG5cdC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuXG5cdC8qKlxuXHQgKiBBIGdlbmVyaWMgZXJyb3IgdXRpbGl0eSBmdW5jdGlvbi5cblx0ICogQHByaXZhdGVcblx0ICogQHBhcmFtIHtTdHJpbmd9IHR5cGUgVGhlIGVycm9yIHR5cGUuXG5cdCAqIEByZXR1cm5zIHtFcnJvcn0gVGhyb3dzIGEgYFJhbmdlRXJyb3JgIHdpdGggdGhlIGFwcGxpY2FibGUgZXJyb3IgbWVzc2FnZS5cblx0ICovXG5cdGZ1bmN0aW9uIGVycm9yKHR5cGUpIHtcblx0XHR0aHJvdyBuZXcgUmFuZ2VFcnJvcihlcnJvcnNbdHlwZV0pO1xuXHR9XG5cblx0LyoqXG5cdCAqIEEgZ2VuZXJpYyBgQXJyYXkjbWFwYCB1dGlsaXR5IGZ1bmN0aW9uLlxuXHQgKiBAcHJpdmF0ZVxuXHQgKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gaXRlcmF0ZSBvdmVyLlxuXHQgKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFjayBUaGUgZnVuY3Rpb24gdGhhdCBnZXRzIGNhbGxlZCBmb3IgZXZlcnkgYXJyYXlcblx0ICogaXRlbS5cblx0ICogQHJldHVybnMge0FycmF5fSBBIG5ldyBhcnJheSBvZiB2YWx1ZXMgcmV0dXJuZWQgYnkgdGhlIGNhbGxiYWNrIGZ1bmN0aW9uLlxuXHQgKi9cblx0ZnVuY3Rpb24gbWFwKGFycmF5LCBmbikge1xuXHRcdHZhciBsZW5ndGggPSBhcnJheS5sZW5ndGg7XG5cdFx0dmFyIHJlc3VsdCA9IFtdO1xuXHRcdHdoaWxlIChsZW5ndGgtLSkge1xuXHRcdFx0cmVzdWx0W2xlbmd0aF0gPSBmbihhcnJheVtsZW5ndGhdKTtcblx0XHR9XG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fVxuXG5cdC8qKlxuXHQgKiBBIHNpbXBsZSBgQXJyYXkjbWFwYC1saWtlIHdyYXBwZXIgdG8gd29yayB3aXRoIGRvbWFpbiBuYW1lIHN0cmluZ3Mgb3IgZW1haWxcblx0ICogYWRkcmVzc2VzLlxuXHQgKiBAcHJpdmF0ZVxuXHQgKiBAcGFyYW0ge1N0cmluZ30gZG9tYWluIFRoZSBkb21haW4gbmFtZSBvciBlbWFpbCBhZGRyZXNzLlxuXHQgKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFjayBUaGUgZnVuY3Rpb24gdGhhdCBnZXRzIGNhbGxlZCBmb3IgZXZlcnlcblx0ICogY2hhcmFjdGVyLlxuXHQgKiBAcmV0dXJucyB7QXJyYXl9IEEgbmV3IHN0cmluZyBvZiBjaGFyYWN0ZXJzIHJldHVybmVkIGJ5IHRoZSBjYWxsYmFja1xuXHQgKiBmdW5jdGlvbi5cblx0ICovXG5cdGZ1bmN0aW9uIG1hcERvbWFpbihzdHJpbmcsIGZuKSB7XG5cdFx0dmFyIHBhcnRzID0gc3RyaW5nLnNwbGl0KCdAJyk7XG5cdFx0dmFyIHJlc3VsdCA9ICcnO1xuXHRcdGlmIChwYXJ0cy5sZW5ndGggPiAxKSB7XG5cdFx0XHQvLyBJbiBlbWFpbCBhZGRyZXNzZXMsIG9ubHkgdGhlIGRvbWFpbiBuYW1lIHNob3VsZCBiZSBwdW55Y29kZWQuIExlYXZlXG5cdFx0XHQvLyB0aGUgbG9jYWwgcGFydCAoaS5lLiBldmVyeXRoaW5nIHVwIHRvIGBAYCkgaW50YWN0LlxuXHRcdFx0cmVzdWx0ID0gcGFydHNbMF0gKyAnQCc7XG5cdFx0XHRzdHJpbmcgPSBwYXJ0c1sxXTtcblx0XHR9XG5cdFx0Ly8gQXZvaWQgYHNwbGl0KHJlZ2V4KWAgZm9yIElFOCBjb21wYXRpYmlsaXR5LiBTZWUgIzE3LlxuXHRcdHN0cmluZyA9IHN0cmluZy5yZXBsYWNlKHJlZ2V4U2VwYXJhdG9ycywgJ1xceDJFJyk7XG5cdFx0dmFyIGxhYmVscyA9IHN0cmluZy5zcGxpdCgnLicpO1xuXHRcdHZhciBlbmNvZGVkID0gbWFwKGxhYmVscywgZm4pLmpvaW4oJy4nKTtcblx0XHRyZXR1cm4gcmVzdWx0ICsgZW5jb2RlZDtcblx0fVxuXG5cdC8qKlxuXHQgKiBDcmVhdGVzIGFuIGFycmF5IGNvbnRhaW5pbmcgdGhlIG51bWVyaWMgY29kZSBwb2ludHMgb2YgZWFjaCBVbmljb2RlXG5cdCAqIGNoYXJhY3RlciBpbiB0aGUgc3RyaW5nLiBXaGlsZSBKYXZhU2NyaXB0IHVzZXMgVUNTLTIgaW50ZXJuYWxseSxcblx0ICogdGhpcyBmdW5jdGlvbiB3aWxsIGNvbnZlcnQgYSBwYWlyIG9mIHN1cnJvZ2F0ZSBoYWx2ZXMgKGVhY2ggb2Ygd2hpY2hcblx0ICogVUNTLTIgZXhwb3NlcyBhcyBzZXBhcmF0ZSBjaGFyYWN0ZXJzKSBpbnRvIGEgc2luZ2xlIGNvZGUgcG9pbnQsXG5cdCAqIG1hdGNoaW5nIFVURi0xNi5cblx0ICogQHNlZSBgcHVueWNvZGUudWNzMi5lbmNvZGVgXG5cdCAqIEBzZWUgPGh0dHBzOi8vbWF0aGlhc2J5bmVucy5iZS9ub3Rlcy9qYXZhc2NyaXB0LWVuY29kaW5nPlxuXHQgKiBAbWVtYmVyT2YgcHVueWNvZGUudWNzMlxuXHQgKiBAbmFtZSBkZWNvZGVcblx0ICogQHBhcmFtIHtTdHJpbmd9IHN0cmluZyBUaGUgVW5pY29kZSBpbnB1dCBzdHJpbmcgKFVDUy0yKS5cblx0ICogQHJldHVybnMge0FycmF5fSBUaGUgbmV3IGFycmF5IG9mIGNvZGUgcG9pbnRzLlxuXHQgKi9cblx0ZnVuY3Rpb24gdWNzMmRlY29kZShzdHJpbmcpIHtcblx0XHR2YXIgb3V0cHV0ID0gW10sXG5cdFx0ICAgIGNvdW50ZXIgPSAwLFxuXHRcdCAgICBsZW5ndGggPSBzdHJpbmcubGVuZ3RoLFxuXHRcdCAgICB2YWx1ZSxcblx0XHQgICAgZXh0cmE7XG5cdFx0d2hpbGUgKGNvdW50ZXIgPCBsZW5ndGgpIHtcblx0XHRcdHZhbHVlID0gc3RyaW5nLmNoYXJDb2RlQXQoY291bnRlcisrKTtcblx0XHRcdGlmICh2YWx1ZSA+PSAweEQ4MDAgJiYgdmFsdWUgPD0gMHhEQkZGICYmIGNvdW50ZXIgPCBsZW5ndGgpIHtcblx0XHRcdFx0Ly8gaGlnaCBzdXJyb2dhdGUsIGFuZCB0aGVyZSBpcyBhIG5leHQgY2hhcmFjdGVyXG5cdFx0XHRcdGV4dHJhID0gc3RyaW5nLmNoYXJDb2RlQXQoY291bnRlcisrKTtcblx0XHRcdFx0aWYgKChleHRyYSAmIDB4RkMwMCkgPT0gMHhEQzAwKSB7IC8vIGxvdyBzdXJyb2dhdGVcblx0XHRcdFx0XHRvdXRwdXQucHVzaCgoKHZhbHVlICYgMHgzRkYpIDw8IDEwKSArIChleHRyYSAmIDB4M0ZGKSArIDB4MTAwMDApO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdC8vIHVubWF0Y2hlZCBzdXJyb2dhdGU7IG9ubHkgYXBwZW5kIHRoaXMgY29kZSB1bml0LCBpbiBjYXNlIHRoZSBuZXh0XG5cdFx0XHRcdFx0Ly8gY29kZSB1bml0IGlzIHRoZSBoaWdoIHN1cnJvZ2F0ZSBvZiBhIHN1cnJvZ2F0ZSBwYWlyXG5cdFx0XHRcdFx0b3V0cHV0LnB1c2godmFsdWUpO1xuXHRcdFx0XHRcdGNvdW50ZXItLTtcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0b3V0cHV0LnB1c2godmFsdWUpO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gb3V0cHV0O1xuXHR9XG5cblx0LyoqXG5cdCAqIENyZWF0ZXMgYSBzdHJpbmcgYmFzZWQgb24gYW4gYXJyYXkgb2YgbnVtZXJpYyBjb2RlIHBvaW50cy5cblx0ICogQHNlZSBgcHVueWNvZGUudWNzMi5kZWNvZGVgXG5cdCAqIEBtZW1iZXJPZiBwdW55Y29kZS51Y3MyXG5cdCAqIEBuYW1lIGVuY29kZVxuXHQgKiBAcGFyYW0ge0FycmF5fSBjb2RlUG9pbnRzIFRoZSBhcnJheSBvZiBudW1lcmljIGNvZGUgcG9pbnRzLlxuXHQgKiBAcmV0dXJucyB7U3RyaW5nfSBUaGUgbmV3IFVuaWNvZGUgc3RyaW5nIChVQ1MtMikuXG5cdCAqL1xuXHRmdW5jdGlvbiB1Y3MyZW5jb2RlKGFycmF5KSB7XG5cdFx0cmV0dXJuIG1hcChhcnJheSwgZnVuY3Rpb24odmFsdWUpIHtcblx0XHRcdHZhciBvdXRwdXQgPSAnJztcblx0XHRcdGlmICh2YWx1ZSA+IDB4RkZGRikge1xuXHRcdFx0XHR2YWx1ZSAtPSAweDEwMDAwO1xuXHRcdFx0XHRvdXRwdXQgKz0gc3RyaW5nRnJvbUNoYXJDb2RlKHZhbHVlID4+PiAxMCAmIDB4M0ZGIHwgMHhEODAwKTtcblx0XHRcdFx0dmFsdWUgPSAweERDMDAgfCB2YWx1ZSAmIDB4M0ZGO1xuXHRcdFx0fVxuXHRcdFx0b3V0cHV0ICs9IHN0cmluZ0Zyb21DaGFyQ29kZSh2YWx1ZSk7XG5cdFx0XHRyZXR1cm4gb3V0cHV0O1xuXHRcdH0pLmpvaW4oJycpO1xuXHR9XG5cblx0LyoqXG5cdCAqIENvbnZlcnRzIGEgYmFzaWMgY29kZSBwb2ludCBpbnRvIGEgZGlnaXQvaW50ZWdlci5cblx0ICogQHNlZSBgZGlnaXRUb0Jhc2ljKClgXG5cdCAqIEBwcml2YXRlXG5cdCAqIEBwYXJhbSB7TnVtYmVyfSBjb2RlUG9pbnQgVGhlIGJhc2ljIG51bWVyaWMgY29kZSBwb2ludCB2YWx1ZS5cblx0ICogQHJldHVybnMge051bWJlcn0gVGhlIG51bWVyaWMgdmFsdWUgb2YgYSBiYXNpYyBjb2RlIHBvaW50IChmb3IgdXNlIGluXG5cdCAqIHJlcHJlc2VudGluZyBpbnRlZ2VycykgaW4gdGhlIHJhbmdlIGAwYCB0byBgYmFzZSAtIDFgLCBvciBgYmFzZWAgaWZcblx0ICogdGhlIGNvZGUgcG9pbnQgZG9lcyBub3QgcmVwcmVzZW50IGEgdmFsdWUuXG5cdCAqL1xuXHRmdW5jdGlvbiBiYXNpY1RvRGlnaXQoY29kZVBvaW50KSB7XG5cdFx0aWYgKGNvZGVQb2ludCAtIDQ4IDwgMTApIHtcblx0XHRcdHJldHVybiBjb2RlUG9pbnQgLSAyMjtcblx0XHR9XG5cdFx0aWYgKGNvZGVQb2ludCAtIDY1IDwgMjYpIHtcblx0XHRcdHJldHVybiBjb2RlUG9pbnQgLSA2NTtcblx0XHR9XG5cdFx0aWYgKGNvZGVQb2ludCAtIDk3IDwgMjYpIHtcblx0XHRcdHJldHVybiBjb2RlUG9pbnQgLSA5Nztcblx0XHR9XG5cdFx0cmV0dXJuIGJhc2U7XG5cdH1cblxuXHQvKipcblx0ICogQ29udmVydHMgYSBkaWdpdC9pbnRlZ2VyIGludG8gYSBiYXNpYyBjb2RlIHBvaW50LlxuXHQgKiBAc2VlIGBiYXNpY1RvRGlnaXQoKWBcblx0ICogQHByaXZhdGVcblx0ICogQHBhcmFtIHtOdW1iZXJ9IGRpZ2l0IFRoZSBudW1lcmljIHZhbHVlIG9mIGEgYmFzaWMgY29kZSBwb2ludC5cblx0ICogQHJldHVybnMge051bWJlcn0gVGhlIGJhc2ljIGNvZGUgcG9pbnQgd2hvc2UgdmFsdWUgKHdoZW4gdXNlZCBmb3Jcblx0ICogcmVwcmVzZW50aW5nIGludGVnZXJzKSBpcyBgZGlnaXRgLCB3aGljaCBuZWVkcyB0byBiZSBpbiB0aGUgcmFuZ2Vcblx0ICogYDBgIHRvIGBiYXNlIC0gMWAuIElmIGBmbGFnYCBpcyBub24temVybywgdGhlIHVwcGVyY2FzZSBmb3JtIGlzXG5cdCAqIHVzZWQ7IGVsc2UsIHRoZSBsb3dlcmNhc2UgZm9ybSBpcyB1c2VkLiBUaGUgYmVoYXZpb3IgaXMgdW5kZWZpbmVkXG5cdCAqIGlmIGBmbGFnYCBpcyBub24temVybyBhbmQgYGRpZ2l0YCBoYXMgbm8gdXBwZXJjYXNlIGZvcm0uXG5cdCAqL1xuXHRmdW5jdGlvbiBkaWdpdFRvQmFzaWMoZGlnaXQsIGZsYWcpIHtcblx0XHQvLyAgMC4uMjUgbWFwIHRvIEFTQ0lJIGEuLnogb3IgQS4uWlxuXHRcdC8vIDI2Li4zNSBtYXAgdG8gQVNDSUkgMC4uOVxuXHRcdHJldHVybiBkaWdpdCArIDIyICsgNzUgKiAoZGlnaXQgPCAyNikgLSAoKGZsYWcgIT0gMCkgPDwgNSk7XG5cdH1cblxuXHQvKipcblx0ICogQmlhcyBhZGFwdGF0aW9uIGZ1bmN0aW9uIGFzIHBlciBzZWN0aW9uIDMuNCBvZiBSRkMgMzQ5Mi5cblx0ICogaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzM0OTIjc2VjdGlvbi0zLjRcblx0ICogQHByaXZhdGVcblx0ICovXG5cdGZ1bmN0aW9uIGFkYXB0KGRlbHRhLCBudW1Qb2ludHMsIGZpcnN0VGltZSkge1xuXHRcdHZhciBrID0gMDtcblx0XHRkZWx0YSA9IGZpcnN0VGltZSA/IGZsb29yKGRlbHRhIC8gZGFtcCkgOiBkZWx0YSA+PiAxO1xuXHRcdGRlbHRhICs9IGZsb29yKGRlbHRhIC8gbnVtUG9pbnRzKTtcblx0XHRmb3IgKC8qIG5vIGluaXRpYWxpemF0aW9uICovOyBkZWx0YSA+IGJhc2VNaW51c1RNaW4gKiB0TWF4ID4+IDE7IGsgKz0gYmFzZSkge1xuXHRcdFx0ZGVsdGEgPSBmbG9vcihkZWx0YSAvIGJhc2VNaW51c1RNaW4pO1xuXHRcdH1cblx0XHRyZXR1cm4gZmxvb3IoayArIChiYXNlTWludXNUTWluICsgMSkgKiBkZWx0YSAvIChkZWx0YSArIHNrZXcpKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBDb252ZXJ0cyBhIFB1bnljb2RlIHN0cmluZyBvZiBBU0NJSS1vbmx5IHN5bWJvbHMgdG8gYSBzdHJpbmcgb2YgVW5pY29kZVxuXHQgKiBzeW1ib2xzLlxuXHQgKiBAbWVtYmVyT2YgcHVueWNvZGVcblx0ICogQHBhcmFtIHtTdHJpbmd9IGlucHV0IFRoZSBQdW55Y29kZSBzdHJpbmcgb2YgQVNDSUktb25seSBzeW1ib2xzLlxuXHQgKiBAcmV0dXJucyB7U3RyaW5nfSBUaGUgcmVzdWx0aW5nIHN0cmluZyBvZiBVbmljb2RlIHN5bWJvbHMuXG5cdCAqL1xuXHRmdW5jdGlvbiBkZWNvZGUoaW5wdXQpIHtcblx0XHQvLyBEb24ndCB1c2UgVUNTLTJcblx0XHR2YXIgb3V0cHV0ID0gW10sXG5cdFx0ICAgIGlucHV0TGVuZ3RoID0gaW5wdXQubGVuZ3RoLFxuXHRcdCAgICBvdXQsXG5cdFx0ICAgIGkgPSAwLFxuXHRcdCAgICBuID0gaW5pdGlhbE4sXG5cdFx0ICAgIGJpYXMgPSBpbml0aWFsQmlhcyxcblx0XHQgICAgYmFzaWMsXG5cdFx0ICAgIGosXG5cdFx0ICAgIGluZGV4LFxuXHRcdCAgICBvbGRpLFxuXHRcdCAgICB3LFxuXHRcdCAgICBrLFxuXHRcdCAgICBkaWdpdCxcblx0XHQgICAgdCxcblx0XHQgICAgLyoqIENhY2hlZCBjYWxjdWxhdGlvbiByZXN1bHRzICovXG5cdFx0ICAgIGJhc2VNaW51c1Q7XG5cblx0XHQvLyBIYW5kbGUgdGhlIGJhc2ljIGNvZGUgcG9pbnRzOiBsZXQgYGJhc2ljYCBiZSB0aGUgbnVtYmVyIG9mIGlucHV0IGNvZGVcblx0XHQvLyBwb2ludHMgYmVmb3JlIHRoZSBsYXN0IGRlbGltaXRlciwgb3IgYDBgIGlmIHRoZXJlIGlzIG5vbmUsIHRoZW4gY29weVxuXHRcdC8vIHRoZSBmaXJzdCBiYXNpYyBjb2RlIHBvaW50cyB0byB0aGUgb3V0cHV0LlxuXG5cdFx0YmFzaWMgPSBpbnB1dC5sYXN0SW5kZXhPZihkZWxpbWl0ZXIpO1xuXHRcdGlmIChiYXNpYyA8IDApIHtcblx0XHRcdGJhc2ljID0gMDtcblx0XHR9XG5cblx0XHRmb3IgKGogPSAwOyBqIDwgYmFzaWM7ICsraikge1xuXHRcdFx0Ly8gaWYgaXQncyBub3QgYSBiYXNpYyBjb2RlIHBvaW50XG5cdFx0XHRpZiAoaW5wdXQuY2hhckNvZGVBdChqKSA+PSAweDgwKSB7XG5cdFx0XHRcdGVycm9yKCdub3QtYmFzaWMnKTtcblx0XHRcdH1cblx0XHRcdG91dHB1dC5wdXNoKGlucHV0LmNoYXJDb2RlQXQoaikpO1xuXHRcdH1cblxuXHRcdC8vIE1haW4gZGVjb2RpbmcgbG9vcDogc3RhcnQganVzdCBhZnRlciB0aGUgbGFzdCBkZWxpbWl0ZXIgaWYgYW55IGJhc2ljIGNvZGVcblx0XHQvLyBwb2ludHMgd2VyZSBjb3BpZWQ7IHN0YXJ0IGF0IHRoZSBiZWdpbm5pbmcgb3RoZXJ3aXNlLlxuXG5cdFx0Zm9yIChpbmRleCA9IGJhc2ljID4gMCA/IGJhc2ljICsgMSA6IDA7IGluZGV4IDwgaW5wdXRMZW5ndGg7IC8qIG5vIGZpbmFsIGV4cHJlc3Npb24gKi8pIHtcblxuXHRcdFx0Ly8gYGluZGV4YCBpcyB0aGUgaW5kZXggb2YgdGhlIG5leHQgY2hhcmFjdGVyIHRvIGJlIGNvbnN1bWVkLlxuXHRcdFx0Ly8gRGVjb2RlIGEgZ2VuZXJhbGl6ZWQgdmFyaWFibGUtbGVuZ3RoIGludGVnZXIgaW50byBgZGVsdGFgLFxuXHRcdFx0Ly8gd2hpY2ggZ2V0cyBhZGRlZCB0byBgaWAuIFRoZSBvdmVyZmxvdyBjaGVja2luZyBpcyBlYXNpZXJcblx0XHRcdC8vIGlmIHdlIGluY3JlYXNlIGBpYCBhcyB3ZSBnbywgdGhlbiBzdWJ0cmFjdCBvZmYgaXRzIHN0YXJ0aW5nXG5cdFx0XHQvLyB2YWx1ZSBhdCB0aGUgZW5kIHRvIG9idGFpbiBgZGVsdGFgLlxuXHRcdFx0Zm9yIChvbGRpID0gaSwgdyA9IDEsIGsgPSBiYXNlOyAvKiBubyBjb25kaXRpb24gKi87IGsgKz0gYmFzZSkge1xuXG5cdFx0XHRcdGlmIChpbmRleCA+PSBpbnB1dExlbmd0aCkge1xuXHRcdFx0XHRcdGVycm9yKCdpbnZhbGlkLWlucHV0Jyk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRkaWdpdCA9IGJhc2ljVG9EaWdpdChpbnB1dC5jaGFyQ29kZUF0KGluZGV4KyspKTtcblxuXHRcdFx0XHRpZiAoZGlnaXQgPj0gYmFzZSB8fCBkaWdpdCA+IGZsb29yKChtYXhJbnQgLSBpKSAvIHcpKSB7XG5cdFx0XHRcdFx0ZXJyb3IoJ292ZXJmbG93Jyk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpICs9IGRpZ2l0ICogdztcblx0XHRcdFx0dCA9IGsgPD0gYmlhcyA/IHRNaW4gOiAoayA+PSBiaWFzICsgdE1heCA/IHRNYXggOiBrIC0gYmlhcyk7XG5cblx0XHRcdFx0aWYgKGRpZ2l0IDwgdCkge1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0YmFzZU1pbnVzVCA9IGJhc2UgLSB0O1xuXHRcdFx0XHRpZiAodyA+IGZsb29yKG1heEludCAvIGJhc2VNaW51c1QpKSB7XG5cdFx0XHRcdFx0ZXJyb3IoJ292ZXJmbG93Jyk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHR3ICo9IGJhc2VNaW51c1Q7XG5cblx0XHRcdH1cblxuXHRcdFx0b3V0ID0gb3V0cHV0Lmxlbmd0aCArIDE7XG5cdFx0XHRiaWFzID0gYWRhcHQoaSAtIG9sZGksIG91dCwgb2xkaSA9PSAwKTtcblxuXHRcdFx0Ly8gYGlgIHdhcyBzdXBwb3NlZCB0byB3cmFwIGFyb3VuZCBmcm9tIGBvdXRgIHRvIGAwYCxcblx0XHRcdC8vIGluY3JlbWVudGluZyBgbmAgZWFjaCB0aW1lLCBzbyB3ZSdsbCBmaXggdGhhdCBub3c6XG5cdFx0XHRpZiAoZmxvb3IoaSAvIG91dCkgPiBtYXhJbnQgLSBuKSB7XG5cdFx0XHRcdGVycm9yKCdvdmVyZmxvdycpO1xuXHRcdFx0fVxuXG5cdFx0XHRuICs9IGZsb29yKGkgLyBvdXQpO1xuXHRcdFx0aSAlPSBvdXQ7XG5cblx0XHRcdC8vIEluc2VydCBgbmAgYXQgcG9zaXRpb24gYGlgIG9mIHRoZSBvdXRwdXRcblx0XHRcdG91dHB1dC5zcGxpY2UoaSsrLCAwLCBuKTtcblxuXHRcdH1cblxuXHRcdHJldHVybiB1Y3MyZW5jb2RlKG91dHB1dCk7XG5cdH1cblxuXHQvKipcblx0ICogQ29udmVydHMgYSBzdHJpbmcgb2YgVW5pY29kZSBzeW1ib2xzIChlLmcuIGEgZG9tYWluIG5hbWUgbGFiZWwpIHRvIGFcblx0ICogUHVueWNvZGUgc3RyaW5nIG9mIEFTQ0lJLW9ubHkgc3ltYm9scy5cblx0ICogQG1lbWJlck9mIHB1bnljb2RlXG5cdCAqIEBwYXJhbSB7U3RyaW5nfSBpbnB1dCBUaGUgc3RyaW5nIG9mIFVuaWNvZGUgc3ltYm9scy5cblx0ICogQHJldHVybnMge1N0cmluZ30gVGhlIHJlc3VsdGluZyBQdW55Y29kZSBzdHJpbmcgb2YgQVNDSUktb25seSBzeW1ib2xzLlxuXHQgKi9cblx0ZnVuY3Rpb24gZW5jb2RlKGlucHV0KSB7XG5cdFx0dmFyIG4sXG5cdFx0ICAgIGRlbHRhLFxuXHRcdCAgICBoYW5kbGVkQ1BDb3VudCxcblx0XHQgICAgYmFzaWNMZW5ndGgsXG5cdFx0ICAgIGJpYXMsXG5cdFx0ICAgIGosXG5cdFx0ICAgIG0sXG5cdFx0ICAgIHEsXG5cdFx0ICAgIGssXG5cdFx0ICAgIHQsXG5cdFx0ICAgIGN1cnJlbnRWYWx1ZSxcblx0XHQgICAgb3V0cHV0ID0gW10sXG5cdFx0ICAgIC8qKiBgaW5wdXRMZW5ndGhgIHdpbGwgaG9sZCB0aGUgbnVtYmVyIG9mIGNvZGUgcG9pbnRzIGluIGBpbnB1dGAuICovXG5cdFx0ICAgIGlucHV0TGVuZ3RoLFxuXHRcdCAgICAvKiogQ2FjaGVkIGNhbGN1bGF0aW9uIHJlc3VsdHMgKi9cblx0XHQgICAgaGFuZGxlZENQQ291bnRQbHVzT25lLFxuXHRcdCAgICBiYXNlTWludXNULFxuXHRcdCAgICBxTWludXNUO1xuXG5cdFx0Ly8gQ29udmVydCB0aGUgaW5wdXQgaW4gVUNTLTIgdG8gVW5pY29kZVxuXHRcdGlucHV0ID0gdWNzMmRlY29kZShpbnB1dCk7XG5cblx0XHQvLyBDYWNoZSB0aGUgbGVuZ3RoXG5cdFx0aW5wdXRMZW5ndGggPSBpbnB1dC5sZW5ndGg7XG5cblx0XHQvLyBJbml0aWFsaXplIHRoZSBzdGF0ZVxuXHRcdG4gPSBpbml0aWFsTjtcblx0XHRkZWx0YSA9IDA7XG5cdFx0YmlhcyA9IGluaXRpYWxCaWFzO1xuXG5cdFx0Ly8gSGFuZGxlIHRoZSBiYXNpYyBjb2RlIHBvaW50c1xuXHRcdGZvciAoaiA9IDA7IGogPCBpbnB1dExlbmd0aDsgKytqKSB7XG5cdFx0XHRjdXJyZW50VmFsdWUgPSBpbnB1dFtqXTtcblx0XHRcdGlmIChjdXJyZW50VmFsdWUgPCAweDgwKSB7XG5cdFx0XHRcdG91dHB1dC5wdXNoKHN0cmluZ0Zyb21DaGFyQ29kZShjdXJyZW50VmFsdWUpKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRoYW5kbGVkQ1BDb3VudCA9IGJhc2ljTGVuZ3RoID0gb3V0cHV0Lmxlbmd0aDtcblxuXHRcdC8vIGBoYW5kbGVkQ1BDb3VudGAgaXMgdGhlIG51bWJlciBvZiBjb2RlIHBvaW50cyB0aGF0IGhhdmUgYmVlbiBoYW5kbGVkO1xuXHRcdC8vIGBiYXNpY0xlbmd0aGAgaXMgdGhlIG51bWJlciBvZiBiYXNpYyBjb2RlIHBvaW50cy5cblxuXHRcdC8vIEZpbmlzaCB0aGUgYmFzaWMgc3RyaW5nIC0gaWYgaXQgaXMgbm90IGVtcHR5IC0gd2l0aCBhIGRlbGltaXRlclxuXHRcdGlmIChiYXNpY0xlbmd0aCkge1xuXHRcdFx0b3V0cHV0LnB1c2goZGVsaW1pdGVyKTtcblx0XHR9XG5cblx0XHQvLyBNYWluIGVuY29kaW5nIGxvb3A6XG5cdFx0d2hpbGUgKGhhbmRsZWRDUENvdW50IDwgaW5wdXRMZW5ndGgpIHtcblxuXHRcdFx0Ly8gQWxsIG5vbi1iYXNpYyBjb2RlIHBvaW50cyA8IG4gaGF2ZSBiZWVuIGhhbmRsZWQgYWxyZWFkeS4gRmluZCB0aGUgbmV4dFxuXHRcdFx0Ly8gbGFyZ2VyIG9uZTpcblx0XHRcdGZvciAobSA9IG1heEludCwgaiA9IDA7IGogPCBpbnB1dExlbmd0aDsgKytqKSB7XG5cdFx0XHRcdGN1cnJlbnRWYWx1ZSA9IGlucHV0W2pdO1xuXHRcdFx0XHRpZiAoY3VycmVudFZhbHVlID49IG4gJiYgY3VycmVudFZhbHVlIDwgbSkge1xuXHRcdFx0XHRcdG0gPSBjdXJyZW50VmFsdWU7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0Ly8gSW5jcmVhc2UgYGRlbHRhYCBlbm91Z2ggdG8gYWR2YW5jZSB0aGUgZGVjb2RlcidzIDxuLGk+IHN0YXRlIHRvIDxtLDA+LFxuXHRcdFx0Ly8gYnV0IGd1YXJkIGFnYWluc3Qgb3ZlcmZsb3dcblx0XHRcdGhhbmRsZWRDUENvdW50UGx1c09uZSA9IGhhbmRsZWRDUENvdW50ICsgMTtcblx0XHRcdGlmIChtIC0gbiA+IGZsb29yKChtYXhJbnQgLSBkZWx0YSkgLyBoYW5kbGVkQ1BDb3VudFBsdXNPbmUpKSB7XG5cdFx0XHRcdGVycm9yKCdvdmVyZmxvdycpO1xuXHRcdFx0fVxuXG5cdFx0XHRkZWx0YSArPSAobSAtIG4pICogaGFuZGxlZENQQ291bnRQbHVzT25lO1xuXHRcdFx0biA9IG07XG5cblx0XHRcdGZvciAoaiA9IDA7IGogPCBpbnB1dExlbmd0aDsgKytqKSB7XG5cdFx0XHRcdGN1cnJlbnRWYWx1ZSA9IGlucHV0W2pdO1xuXG5cdFx0XHRcdGlmIChjdXJyZW50VmFsdWUgPCBuICYmICsrZGVsdGEgPiBtYXhJbnQpIHtcblx0XHRcdFx0XHRlcnJvcignb3ZlcmZsb3cnKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGlmIChjdXJyZW50VmFsdWUgPT0gbikge1xuXHRcdFx0XHRcdC8vIFJlcHJlc2VudCBkZWx0YSBhcyBhIGdlbmVyYWxpemVkIHZhcmlhYmxlLWxlbmd0aCBpbnRlZ2VyXG5cdFx0XHRcdFx0Zm9yIChxID0gZGVsdGEsIGsgPSBiYXNlOyAvKiBubyBjb25kaXRpb24gKi87IGsgKz0gYmFzZSkge1xuXHRcdFx0XHRcdFx0dCA9IGsgPD0gYmlhcyA/IHRNaW4gOiAoayA+PSBiaWFzICsgdE1heCA/IHRNYXggOiBrIC0gYmlhcyk7XG5cdFx0XHRcdFx0XHRpZiAocSA8IHQpIHtcblx0XHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRxTWludXNUID0gcSAtIHQ7XG5cdFx0XHRcdFx0XHRiYXNlTWludXNUID0gYmFzZSAtIHQ7XG5cdFx0XHRcdFx0XHRvdXRwdXQucHVzaChcblx0XHRcdFx0XHRcdFx0c3RyaW5nRnJvbUNoYXJDb2RlKGRpZ2l0VG9CYXNpYyh0ICsgcU1pbnVzVCAlIGJhc2VNaW51c1QsIDApKVxuXHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdHEgPSBmbG9vcihxTWludXNUIC8gYmFzZU1pbnVzVCk7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0b3V0cHV0LnB1c2goc3RyaW5nRnJvbUNoYXJDb2RlKGRpZ2l0VG9CYXNpYyhxLCAwKSkpO1xuXHRcdFx0XHRcdGJpYXMgPSBhZGFwdChkZWx0YSwgaGFuZGxlZENQQ291bnRQbHVzT25lLCBoYW5kbGVkQ1BDb3VudCA9PSBiYXNpY0xlbmd0aCk7XG5cdFx0XHRcdFx0ZGVsdGEgPSAwO1xuXHRcdFx0XHRcdCsraGFuZGxlZENQQ291bnQ7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0KytkZWx0YTtcblx0XHRcdCsrbjtcblxuXHRcdH1cblx0XHRyZXR1cm4gb3V0cHV0LmpvaW4oJycpO1xuXHR9XG5cblx0LyoqXG5cdCAqIENvbnZlcnRzIGEgUHVueWNvZGUgc3RyaW5nIHJlcHJlc2VudGluZyBhIGRvbWFpbiBuYW1lIG9yIGFuIGVtYWlsIGFkZHJlc3Ncblx0ICogdG8gVW5pY29kZS4gT25seSB0aGUgUHVueWNvZGVkIHBhcnRzIG9mIHRoZSBpbnB1dCB3aWxsIGJlIGNvbnZlcnRlZCwgaS5lLlxuXHQgKiBpdCBkb2Vzbid0IG1hdHRlciBpZiB5b3UgY2FsbCBpdCBvbiBhIHN0cmluZyB0aGF0IGhhcyBhbHJlYWR5IGJlZW5cblx0ICogY29udmVydGVkIHRvIFVuaWNvZGUuXG5cdCAqIEBtZW1iZXJPZiBwdW55Y29kZVxuXHQgKiBAcGFyYW0ge1N0cmluZ30gaW5wdXQgVGhlIFB1bnljb2RlZCBkb21haW4gbmFtZSBvciBlbWFpbCBhZGRyZXNzIHRvXG5cdCAqIGNvbnZlcnQgdG8gVW5pY29kZS5cblx0ICogQHJldHVybnMge1N0cmluZ30gVGhlIFVuaWNvZGUgcmVwcmVzZW50YXRpb24gb2YgdGhlIGdpdmVuIFB1bnljb2RlXG5cdCAqIHN0cmluZy5cblx0ICovXG5cdGZ1bmN0aW9uIHRvVW5pY29kZShpbnB1dCkge1xuXHRcdHJldHVybiBtYXBEb21haW4oaW5wdXQsIGZ1bmN0aW9uKHN0cmluZykge1xuXHRcdFx0cmV0dXJuIHJlZ2V4UHVueWNvZGUudGVzdChzdHJpbmcpXG5cdFx0XHRcdD8gZGVjb2RlKHN0cmluZy5zbGljZSg0KS50b0xvd2VyQ2FzZSgpKVxuXHRcdFx0XHQ6IHN0cmluZztcblx0XHR9KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBDb252ZXJ0cyBhIFVuaWNvZGUgc3RyaW5nIHJlcHJlc2VudGluZyBhIGRvbWFpbiBuYW1lIG9yIGFuIGVtYWlsIGFkZHJlc3MgdG9cblx0ICogUHVueWNvZGUuIE9ubHkgdGhlIG5vbi1BU0NJSSBwYXJ0cyBvZiB0aGUgZG9tYWluIG5hbWUgd2lsbCBiZSBjb252ZXJ0ZWQsXG5cdCAqIGkuZS4gaXQgZG9lc24ndCBtYXR0ZXIgaWYgeW91IGNhbGwgaXQgd2l0aCBhIGRvbWFpbiB0aGF0J3MgYWxyZWFkeSBpblxuXHQgKiBBU0NJSS5cblx0ICogQG1lbWJlck9mIHB1bnljb2RlXG5cdCAqIEBwYXJhbSB7U3RyaW5nfSBpbnB1dCBUaGUgZG9tYWluIG5hbWUgb3IgZW1haWwgYWRkcmVzcyB0byBjb252ZXJ0LCBhcyBhXG5cdCAqIFVuaWNvZGUgc3RyaW5nLlxuXHQgKiBAcmV0dXJucyB7U3RyaW5nfSBUaGUgUHVueWNvZGUgcmVwcmVzZW50YXRpb24gb2YgdGhlIGdpdmVuIGRvbWFpbiBuYW1lIG9yXG5cdCAqIGVtYWlsIGFkZHJlc3MuXG5cdCAqL1xuXHRmdW5jdGlvbiB0b0FTQ0lJKGlucHV0KSB7XG5cdFx0cmV0dXJuIG1hcERvbWFpbihpbnB1dCwgZnVuY3Rpb24oc3RyaW5nKSB7XG5cdFx0XHRyZXR1cm4gcmVnZXhOb25BU0NJSS50ZXN0KHN0cmluZylcblx0XHRcdFx0PyAneG4tLScgKyBlbmNvZGUoc3RyaW5nKVxuXHRcdFx0XHQ6IHN0cmluZztcblx0XHR9KTtcblx0fVxuXG5cdC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuXG5cdC8qKiBEZWZpbmUgdGhlIHB1YmxpYyBBUEkgKi9cblx0cHVueWNvZGUgPSB7XG5cdFx0LyoqXG5cdFx0ICogQSBzdHJpbmcgcmVwcmVzZW50aW5nIHRoZSBjdXJyZW50IFB1bnljb2RlLmpzIHZlcnNpb24gbnVtYmVyLlxuXHRcdCAqIEBtZW1iZXJPZiBwdW55Y29kZVxuXHRcdCAqIEB0eXBlIFN0cmluZ1xuXHRcdCAqL1xuXHRcdCd2ZXJzaW9uJzogJzEuMy4yJyxcblx0XHQvKipcblx0XHQgKiBBbiBvYmplY3Qgb2YgbWV0aG9kcyB0byBjb252ZXJ0IGZyb20gSmF2YVNjcmlwdCdzIGludGVybmFsIGNoYXJhY3RlclxuXHRcdCAqIHJlcHJlc2VudGF0aW9uIChVQ1MtMikgdG8gVW5pY29kZSBjb2RlIHBvaW50cywgYW5kIGJhY2suXG5cdFx0ICogQHNlZSA8aHR0cHM6Ly9tYXRoaWFzYnluZW5zLmJlL25vdGVzL2phdmFzY3JpcHQtZW5jb2Rpbmc+XG5cdFx0ICogQG1lbWJlck9mIHB1bnljb2RlXG5cdFx0ICogQHR5cGUgT2JqZWN0XG5cdFx0ICovXG5cdFx0J3VjczInOiB7XG5cdFx0XHQnZGVjb2RlJzogdWNzMmRlY29kZSxcblx0XHRcdCdlbmNvZGUnOiB1Y3MyZW5jb2RlXG5cdFx0fSxcblx0XHQnZGVjb2RlJzogZGVjb2RlLFxuXHRcdCdlbmNvZGUnOiBlbmNvZGUsXG5cdFx0J3RvQVNDSUknOiB0b0FTQ0lJLFxuXHRcdCd0b1VuaWNvZGUnOiB0b1VuaWNvZGVcblx0fTtcblxuXHQvKiogRXhwb3NlIGBwdW55Y29kZWAgKi9cblx0Ly8gU29tZSBBTUQgYnVpbGQgb3B0aW1pemVycywgbGlrZSByLmpzLCBjaGVjayBmb3Igc3BlY2lmaWMgY29uZGl0aW9uIHBhdHRlcm5zXG5cdC8vIGxpa2UgdGhlIGZvbGxvd2luZzpcblx0aWYgKFxuXHRcdHR5cGVvZiBkZWZpbmUgPT0gJ2Z1bmN0aW9uJyAmJlxuXHRcdHR5cGVvZiBkZWZpbmUuYW1kID09ICdvYmplY3QnICYmXG5cdFx0ZGVmaW5lLmFtZFxuXHQpIHtcblx0XHRkZWZpbmUoJ3B1bnljb2RlJywgZnVuY3Rpb24oKSB7XG5cdFx0XHRyZXR1cm4gcHVueWNvZGU7XG5cdFx0fSk7XG5cdH0gZWxzZSBpZiAoZnJlZUV4cG9ydHMgJiYgZnJlZU1vZHVsZSkge1xuXHRcdGlmIChtb2R1bGUuZXhwb3J0cyA9PSBmcmVlRXhwb3J0cykge1xuXHRcdFx0Ly8gaW4gTm9kZS5qcywgaW8uanMsIG9yIFJpbmdvSlMgdjAuOC4wK1xuXHRcdFx0ZnJlZU1vZHVsZS5leHBvcnRzID0gcHVueWNvZGU7XG5cdFx0fSBlbHNlIHtcblx0XHRcdC8vIGluIE5hcndoYWwgb3IgUmluZ29KUyB2MC43LjAtXG5cdFx0XHRmb3IgKGtleSBpbiBwdW55Y29kZSkge1xuXHRcdFx0XHRwdW55Y29kZS5oYXNPd25Qcm9wZXJ0eShrZXkpICYmIChmcmVlRXhwb3J0c1trZXldID0gcHVueWNvZGVba2V5XSk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9IGVsc2Uge1xuXHRcdC8vIGluIFJoaW5vIG9yIGEgd2ViIGJyb3dzZXJcblx0XHRyb290LnB1bnljb2RlID0gcHVueWNvZGU7XG5cdH1cblxufSh0aGlzKSk7XG4iLCIvLyBDb3B5cmlnaHQgSm95ZW50LCBJbmMuIGFuZCBvdGhlciBOb2RlIGNvbnRyaWJ1dG9ycy5cbi8vXG4vLyBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYVxuLy8gY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZVxuLy8gXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nXG4vLyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsXG4vLyBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0XG4vLyBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGVcbi8vIGZvbGxvd2luZyBjb25kaXRpb25zOlxuLy9cbi8vIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkXG4vLyBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbi8vXG4vLyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTXG4vLyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GXG4vLyBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOXG4vLyBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSxcbi8vIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUlxuLy8gT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRVxuLy8gVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cblxuJ3VzZSBzdHJpY3QnO1xuXG4vLyBJZiBvYmouaGFzT3duUHJvcGVydHkgaGFzIGJlZW4gb3ZlcnJpZGRlbiwgdGhlbiBjYWxsaW5nXG4vLyBvYmouaGFzT3duUHJvcGVydHkocHJvcCkgd2lsbCBicmVhay5cbi8vIFNlZTogaHR0cHM6Ly9naXRodWIuY29tL2pveWVudC9ub2RlL2lzc3Vlcy8xNzA3XG5mdW5jdGlvbiBoYXNPd25Qcm9wZXJ0eShvYmosIHByb3ApIHtcbiAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmosIHByb3ApO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKHFzLCBzZXAsIGVxLCBvcHRpb25zKSB7XG4gIHNlcCA9IHNlcCB8fCAnJic7XG4gIGVxID0gZXEgfHwgJz0nO1xuICB2YXIgb2JqID0ge307XG5cbiAgaWYgKHR5cGVvZiBxcyAhPT0gJ3N0cmluZycgfHwgcXMubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIG9iajtcbiAgfVxuXG4gIHZhciByZWdleHAgPSAvXFwrL2c7XG4gIHFzID0gcXMuc3BsaXQoc2VwKTtcblxuICB2YXIgbWF4S2V5cyA9IDEwMDA7XG4gIGlmIChvcHRpb25zICYmIHR5cGVvZiBvcHRpb25zLm1heEtleXMgPT09ICdudW1iZXInKSB7XG4gICAgbWF4S2V5cyA9IG9wdGlvbnMubWF4S2V5cztcbiAgfVxuXG4gIHZhciBsZW4gPSBxcy5sZW5ndGg7XG4gIC8vIG1heEtleXMgPD0gMCBtZWFucyB0aGF0IHdlIHNob3VsZCBub3QgbGltaXQga2V5cyBjb3VudFxuICBpZiAobWF4S2V5cyA+IDAgJiYgbGVuID4gbWF4S2V5cykge1xuICAgIGxlbiA9IG1heEtleXM7XG4gIH1cblxuICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgKytpKSB7XG4gICAgdmFyIHggPSBxc1tpXS5yZXBsYWNlKHJlZ2V4cCwgJyUyMCcpLFxuICAgICAgICBpZHggPSB4LmluZGV4T2YoZXEpLFxuICAgICAgICBrc3RyLCB2c3RyLCBrLCB2O1xuXG4gICAgaWYgKGlkeCA+PSAwKSB7XG4gICAgICBrc3RyID0geC5zdWJzdHIoMCwgaWR4KTtcbiAgICAgIHZzdHIgPSB4LnN1YnN0cihpZHggKyAxKTtcbiAgICB9IGVsc2Uge1xuICAgICAga3N0ciA9IHg7XG4gICAgICB2c3RyID0gJyc7XG4gICAgfVxuXG4gICAgayA9IGRlY29kZVVSSUNvbXBvbmVudChrc3RyKTtcbiAgICB2ID0gZGVjb2RlVVJJQ29tcG9uZW50KHZzdHIpO1xuXG4gICAgaWYgKCFoYXNPd25Qcm9wZXJ0eShvYmosIGspKSB7XG4gICAgICBvYmpba10gPSB2O1xuICAgIH0gZWxzZSBpZiAoaXNBcnJheShvYmpba10pKSB7XG4gICAgICBvYmpba10ucHVzaCh2KTtcbiAgICB9IGVsc2Uge1xuICAgICAgb2JqW2tdID0gW29ialtrXSwgdl07XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG9iajtcbn07XG5cbnZhciBpc0FycmF5ID0gQXJyYXkuaXNBcnJheSB8fCBmdW5jdGlvbiAoeHMpIHtcbiAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh4cykgPT09ICdbb2JqZWN0IEFycmF5XSc7XG59O1xuIiwiLy8gQ29weXJpZ2h0IEpveWVudCwgSW5jLiBhbmQgb3RoZXIgTm9kZSBjb250cmlidXRvcnMuXG4vL1xuLy8gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGFcbi8vIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGVcbi8vIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZ1xuLy8gd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLFxuLy8gZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdFxuLy8gcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlXG4vLyBmb2xsb3dpbmcgY29uZGl0aW9uczpcbi8vXG4vLyBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZFxuLy8gaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4vL1xuLy8gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTU1xuLy8gT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRlxuLy8gTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTlxuLy8gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sXG4vLyBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1Jcbi8vIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEVcbi8vIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG5cbid1c2Ugc3RyaWN0JztcblxudmFyIHN0cmluZ2lmeVByaW1pdGl2ZSA9IGZ1bmN0aW9uKHYpIHtcbiAgc3dpdGNoICh0eXBlb2Ygdikge1xuICAgIGNhc2UgJ3N0cmluZyc6XG4gICAgICByZXR1cm4gdjtcblxuICAgIGNhc2UgJ2Jvb2xlYW4nOlxuICAgICAgcmV0dXJuIHYgPyAndHJ1ZScgOiAnZmFsc2UnO1xuXG4gICAgY2FzZSAnbnVtYmVyJzpcbiAgICAgIHJldHVybiBpc0Zpbml0ZSh2KSA/IHYgOiAnJztcblxuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gJyc7XG4gIH1cbn07XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24ob2JqLCBzZXAsIGVxLCBuYW1lKSB7XG4gIHNlcCA9IHNlcCB8fCAnJic7XG4gIGVxID0gZXEgfHwgJz0nO1xuICBpZiAob2JqID09PSBudWxsKSB7XG4gICAgb2JqID0gdW5kZWZpbmVkO1xuICB9XG5cbiAgaWYgKHR5cGVvZiBvYmogPT09ICdvYmplY3QnKSB7XG4gICAgcmV0dXJuIG1hcChvYmplY3RLZXlzKG9iaiksIGZ1bmN0aW9uKGspIHtcbiAgICAgIHZhciBrcyA9IGVuY29kZVVSSUNvbXBvbmVudChzdHJpbmdpZnlQcmltaXRpdmUoaykpICsgZXE7XG4gICAgICBpZiAoaXNBcnJheShvYmpba10pKSB7XG4gICAgICAgIHJldHVybiBtYXAob2JqW2tdLCBmdW5jdGlvbih2KSB7XG4gICAgICAgICAgcmV0dXJuIGtzICsgZW5jb2RlVVJJQ29tcG9uZW50KHN0cmluZ2lmeVByaW1pdGl2ZSh2KSk7XG4gICAgICAgIH0pLmpvaW4oc2VwKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBrcyArIGVuY29kZVVSSUNvbXBvbmVudChzdHJpbmdpZnlQcmltaXRpdmUob2JqW2tdKSk7XG4gICAgICB9XG4gICAgfSkuam9pbihzZXApO1xuXG4gIH1cblxuICBpZiAoIW5hbWUpIHJldHVybiAnJztcbiAgcmV0dXJuIGVuY29kZVVSSUNvbXBvbmVudChzdHJpbmdpZnlQcmltaXRpdmUobmFtZSkpICsgZXEgK1xuICAgICAgICAgZW5jb2RlVVJJQ29tcG9uZW50KHN0cmluZ2lmeVByaW1pdGl2ZShvYmopKTtcbn07XG5cbnZhciBpc0FycmF5ID0gQXJyYXkuaXNBcnJheSB8fCBmdW5jdGlvbiAoeHMpIHtcbiAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh4cykgPT09ICdbb2JqZWN0IEFycmF5XSc7XG59O1xuXG5mdW5jdGlvbiBtYXAgKHhzLCBmKSB7XG4gIGlmICh4cy5tYXApIHJldHVybiB4cy5tYXAoZik7XG4gIHZhciByZXMgPSBbXTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCB4cy5sZW5ndGg7IGkrKykge1xuICAgIHJlcy5wdXNoKGYoeHNbaV0sIGkpKTtcbiAgfVxuICByZXR1cm4gcmVzO1xufVxuXG52YXIgb2JqZWN0S2V5cyA9IE9iamVjdC5rZXlzIHx8IGZ1bmN0aW9uIChvYmopIHtcbiAgdmFyIHJlcyA9IFtdO1xuICBmb3IgKHZhciBrZXkgaW4gb2JqKSB7XG4gICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmosIGtleSkpIHJlcy5wdXNoKGtleSk7XG4gIH1cbiAgcmV0dXJuIHJlcztcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbmV4cG9ydHMuZGVjb2RlID0gZXhwb3J0cy5wYXJzZSA9IHJlcXVpcmUoJy4vZGVjb2RlJyk7XG5leHBvcnRzLmVuY29kZSA9IGV4cG9ydHMuc3RyaW5naWZ5ID0gcmVxdWlyZSgnLi9lbmNvZGUnKTtcbiIsIi8vIENvcHlyaWdodCBKb3llbnQsIEluYy4gYW5kIG90aGVyIE5vZGUgY29udHJpYnV0b3JzLlxuLy9cbi8vIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhXG4vLyBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlXG4vLyBcIlNvZnR3YXJlXCIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmdcbi8vIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCxcbi8vIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXRcbi8vIHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZVxuLy8gZm9sbG93aW5nIGNvbmRpdGlvbnM6XG4vL1xuLy8gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWRcbi8vIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuLy9cbi8vIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1Ncbi8vIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0Zcbi8vIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU5cbi8vIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLFxuLy8gREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SXG4vLyBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFXG4vLyBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLlxuXG52YXIgcHVueWNvZGUgPSByZXF1aXJlKCdwdW55Y29kZScpO1xuXG5leHBvcnRzLnBhcnNlID0gdXJsUGFyc2U7XG5leHBvcnRzLnJlc29sdmUgPSB1cmxSZXNvbHZlO1xuZXhwb3J0cy5yZXNvbHZlT2JqZWN0ID0gdXJsUmVzb2x2ZU9iamVjdDtcbmV4cG9ydHMuZm9ybWF0ID0gdXJsRm9ybWF0O1xuXG5leHBvcnRzLlVybCA9IFVybDtcblxuZnVuY3Rpb24gVXJsKCkge1xuICB0aGlzLnByb3RvY29sID0gbnVsbDtcbiAgdGhpcy5zbGFzaGVzID0gbnVsbDtcbiAgdGhpcy5hdXRoID0gbnVsbDtcbiAgdGhpcy5ob3N0ID0gbnVsbDtcbiAgdGhpcy5wb3J0ID0gbnVsbDtcbiAgdGhpcy5ob3N0bmFtZSA9IG51bGw7XG4gIHRoaXMuaGFzaCA9IG51bGw7XG4gIHRoaXMuc2VhcmNoID0gbnVsbDtcbiAgdGhpcy5xdWVyeSA9IG51bGw7XG4gIHRoaXMucGF0aG5hbWUgPSBudWxsO1xuICB0aGlzLnBhdGggPSBudWxsO1xuICB0aGlzLmhyZWYgPSBudWxsO1xufVxuXG4vLyBSZWZlcmVuY2U6IFJGQyAzOTg2LCBSRkMgMTgwOCwgUkZDIDIzOTZcblxuLy8gZGVmaW5lIHRoZXNlIGhlcmUgc28gYXQgbGVhc3QgdGhleSBvbmx5IGhhdmUgdG8gYmVcbi8vIGNvbXBpbGVkIG9uY2Ugb24gdGhlIGZpcnN0IG1vZHVsZSBsb2FkLlxudmFyIHByb3RvY29sUGF0dGVybiA9IC9eKFthLXowLTkuKy1dKzopL2ksXG4gICAgcG9ydFBhdHRlcm4gPSAvOlswLTldKiQvLFxuXG4gICAgLy8gUkZDIDIzOTY6IGNoYXJhY3RlcnMgcmVzZXJ2ZWQgZm9yIGRlbGltaXRpbmcgVVJMcy5cbiAgICAvLyBXZSBhY3R1YWxseSBqdXN0IGF1dG8tZXNjYXBlIHRoZXNlLlxuICAgIGRlbGltcyA9IFsnPCcsICc+JywgJ1wiJywgJ2AnLCAnICcsICdcXHInLCAnXFxuJywgJ1xcdCddLFxuXG4gICAgLy8gUkZDIDIzOTY6IGNoYXJhY3RlcnMgbm90IGFsbG93ZWQgZm9yIHZhcmlvdXMgcmVhc29ucy5cbiAgICB1bndpc2UgPSBbJ3snLCAnfScsICd8JywgJ1xcXFwnLCAnXicsICdgJ10uY29uY2F0KGRlbGltcyksXG5cbiAgICAvLyBBbGxvd2VkIGJ5IFJGQ3MsIGJ1dCBjYXVzZSBvZiBYU1MgYXR0YWNrcy4gIEFsd2F5cyBlc2NhcGUgdGhlc2UuXG4gICAgYXV0b0VzY2FwZSA9IFsnXFwnJ10uY29uY2F0KHVud2lzZSksXG4gICAgLy8gQ2hhcmFjdGVycyB0aGF0IGFyZSBuZXZlciBldmVyIGFsbG93ZWQgaW4gYSBob3N0bmFtZS5cbiAgICAvLyBOb3RlIHRoYXQgYW55IGludmFsaWQgY2hhcnMgYXJlIGFsc28gaGFuZGxlZCwgYnV0IHRoZXNlXG4gICAgLy8gYXJlIHRoZSBvbmVzIHRoYXQgYXJlICpleHBlY3RlZCogdG8gYmUgc2Vlbiwgc28gd2UgZmFzdC1wYXRoXG4gICAgLy8gdGhlbS5cbiAgICBub25Ib3N0Q2hhcnMgPSBbJyUnLCAnLycsICc/JywgJzsnLCAnIyddLmNvbmNhdChhdXRvRXNjYXBlKSxcbiAgICBob3N0RW5kaW5nQ2hhcnMgPSBbJy8nLCAnPycsICcjJ10sXG4gICAgaG9zdG5hbWVNYXhMZW4gPSAyNTUsXG4gICAgaG9zdG5hbWVQYXJ0UGF0dGVybiA9IC9eW2EtejAtOUEtWl8tXXswLDYzfSQvLFxuICAgIGhvc3RuYW1lUGFydFN0YXJ0ID0gL14oW2EtejAtOUEtWl8tXXswLDYzfSkoLiopJC8sXG4gICAgLy8gcHJvdG9jb2xzIHRoYXQgY2FuIGFsbG93IFwidW5zYWZlXCIgYW5kIFwidW53aXNlXCIgY2hhcnMuXG4gICAgdW5zYWZlUHJvdG9jb2wgPSB7XG4gICAgICAnamF2YXNjcmlwdCc6IHRydWUsXG4gICAgICAnamF2YXNjcmlwdDonOiB0cnVlXG4gICAgfSxcbiAgICAvLyBwcm90b2NvbHMgdGhhdCBuZXZlciBoYXZlIGEgaG9zdG5hbWUuXG4gICAgaG9zdGxlc3NQcm90b2NvbCA9IHtcbiAgICAgICdqYXZhc2NyaXB0JzogdHJ1ZSxcbiAgICAgICdqYXZhc2NyaXB0Oic6IHRydWVcbiAgICB9LFxuICAgIC8vIHByb3RvY29scyB0aGF0IGFsd2F5cyBjb250YWluIGEgLy8gYml0LlxuICAgIHNsYXNoZWRQcm90b2NvbCA9IHtcbiAgICAgICdodHRwJzogdHJ1ZSxcbiAgICAgICdodHRwcyc6IHRydWUsXG4gICAgICAnZnRwJzogdHJ1ZSxcbiAgICAgICdnb3BoZXInOiB0cnVlLFxuICAgICAgJ2ZpbGUnOiB0cnVlLFxuICAgICAgJ2h0dHA6JzogdHJ1ZSxcbiAgICAgICdodHRwczonOiB0cnVlLFxuICAgICAgJ2Z0cDonOiB0cnVlLFxuICAgICAgJ2dvcGhlcjonOiB0cnVlLFxuICAgICAgJ2ZpbGU6JzogdHJ1ZVxuICAgIH0sXG4gICAgcXVlcnlzdHJpbmcgPSByZXF1aXJlKCdxdWVyeXN0cmluZycpO1xuXG5mdW5jdGlvbiB1cmxQYXJzZSh1cmwsIHBhcnNlUXVlcnlTdHJpbmcsIHNsYXNoZXNEZW5vdGVIb3N0KSB7XG4gIGlmICh1cmwgJiYgaXNPYmplY3QodXJsKSAmJiB1cmwgaW5zdGFuY2VvZiBVcmwpIHJldHVybiB1cmw7XG5cbiAgdmFyIHUgPSBuZXcgVXJsO1xuICB1LnBhcnNlKHVybCwgcGFyc2VRdWVyeVN0cmluZywgc2xhc2hlc0Rlbm90ZUhvc3QpO1xuICByZXR1cm4gdTtcbn1cblxuVXJsLnByb3RvdHlwZS5wYXJzZSA9IGZ1bmN0aW9uKHVybCwgcGFyc2VRdWVyeVN0cmluZywgc2xhc2hlc0Rlbm90ZUhvc3QpIHtcbiAgaWYgKCFpc1N0cmluZyh1cmwpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlBhcmFtZXRlciAndXJsJyBtdXN0IGJlIGEgc3RyaW5nLCBub3QgXCIgKyB0eXBlb2YgdXJsKTtcbiAgfVxuXG4gIHZhciByZXN0ID0gdXJsO1xuXG4gIC8vIHRyaW0gYmVmb3JlIHByb2NlZWRpbmcuXG4gIC8vIFRoaXMgaXMgdG8gc3VwcG9ydCBwYXJzZSBzdHVmZiBsaWtlIFwiICBodHRwOi8vZm9vLmNvbSAgXFxuXCJcbiAgcmVzdCA9IHJlc3QudHJpbSgpO1xuXG4gIHZhciBwcm90byA9IHByb3RvY29sUGF0dGVybi5leGVjKHJlc3QpO1xuICBpZiAocHJvdG8pIHtcbiAgICBwcm90byA9IHByb3RvWzBdO1xuICAgIHZhciBsb3dlclByb3RvID0gcHJvdG8udG9Mb3dlckNhc2UoKTtcbiAgICB0aGlzLnByb3RvY29sID0gbG93ZXJQcm90bztcbiAgICByZXN0ID0gcmVzdC5zdWJzdHIocHJvdG8ubGVuZ3RoKTtcbiAgfVxuXG4gIC8vIGZpZ3VyZSBvdXQgaWYgaXQncyBnb3QgYSBob3N0XG4gIC8vIHVzZXJAc2VydmVyIGlzICphbHdheXMqIGludGVycHJldGVkIGFzIGEgaG9zdG5hbWUsIGFuZCB1cmxcbiAgLy8gcmVzb2x1dGlvbiB3aWxsIHRyZWF0IC8vZm9vL2JhciBhcyBob3N0PWZvbyxwYXRoPWJhciBiZWNhdXNlIHRoYXQnc1xuICAvLyBob3cgdGhlIGJyb3dzZXIgcmVzb2x2ZXMgcmVsYXRpdmUgVVJMcy5cbiAgaWYgKHNsYXNoZXNEZW5vdGVIb3N0IHx8IHByb3RvIHx8IHJlc3QubWF0Y2goL15cXC9cXC9bXkBcXC9dK0BbXkBcXC9dKy8pKSB7XG4gICAgdmFyIHNsYXNoZXMgPSByZXN0LnN1YnN0cigwLCAyKSA9PT0gJy8vJztcbiAgICBpZiAoc2xhc2hlcyAmJiAhKHByb3RvICYmIGhvc3RsZXNzUHJvdG9jb2xbcHJvdG9dKSkge1xuICAgICAgcmVzdCA9IHJlc3Quc3Vic3RyKDIpO1xuICAgICAgdGhpcy5zbGFzaGVzID0gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICBpZiAoIWhvc3RsZXNzUHJvdG9jb2xbcHJvdG9dICYmXG4gICAgICAoc2xhc2hlcyB8fCAocHJvdG8gJiYgIXNsYXNoZWRQcm90b2NvbFtwcm90b10pKSkge1xuXG4gICAgLy8gdGhlcmUncyBhIGhvc3RuYW1lLlxuICAgIC8vIHRoZSBmaXJzdCBpbnN0YW5jZSBvZiAvLCA/LCA7LCBvciAjIGVuZHMgdGhlIGhvc3QuXG4gICAgLy9cbiAgICAvLyBJZiB0aGVyZSBpcyBhbiBAIGluIHRoZSBob3N0bmFtZSwgdGhlbiBub24taG9zdCBjaGFycyAqYXJlKiBhbGxvd2VkXG4gICAgLy8gdG8gdGhlIGxlZnQgb2YgdGhlIGxhc3QgQCBzaWduLCB1bmxlc3Mgc29tZSBob3N0LWVuZGluZyBjaGFyYWN0ZXJcbiAgICAvLyBjb21lcyAqYmVmb3JlKiB0aGUgQC1zaWduLlxuICAgIC8vIFVSTHMgYXJlIG9ibm94aW91cy5cbiAgICAvL1xuICAgIC8vIGV4OlxuICAgIC8vIGh0dHA6Ly9hQGJAYy8gPT4gdXNlcjphQGIgaG9zdDpjXG4gICAgLy8gaHR0cDovL2FAYj9AYyA9PiB1c2VyOmEgaG9zdDpjIHBhdGg6Lz9AY1xuXG4gICAgLy8gdjAuMTIgVE9ETyhpc2FhY3MpOiBUaGlzIGlzIG5vdCBxdWl0ZSBob3cgQ2hyb21lIGRvZXMgdGhpbmdzLlxuICAgIC8vIFJldmlldyBvdXIgdGVzdCBjYXNlIGFnYWluc3QgYnJvd3NlcnMgbW9yZSBjb21wcmVoZW5zaXZlbHkuXG5cbiAgICAvLyBmaW5kIHRoZSBmaXJzdCBpbnN0YW5jZSBvZiBhbnkgaG9zdEVuZGluZ0NoYXJzXG4gICAgdmFyIGhvc3RFbmQgPSAtMTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGhvc3RFbmRpbmdDaGFycy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGhlYyA9IHJlc3QuaW5kZXhPZihob3N0RW5kaW5nQ2hhcnNbaV0pO1xuICAgICAgaWYgKGhlYyAhPT0gLTEgJiYgKGhvc3RFbmQgPT09IC0xIHx8IGhlYyA8IGhvc3RFbmQpKVxuICAgICAgICBob3N0RW5kID0gaGVjO1xuICAgIH1cblxuICAgIC8vIGF0IHRoaXMgcG9pbnQsIGVpdGhlciB3ZSBoYXZlIGFuIGV4cGxpY2l0IHBvaW50IHdoZXJlIHRoZVxuICAgIC8vIGF1dGggcG9ydGlvbiBjYW5ub3QgZ28gcGFzdCwgb3IgdGhlIGxhc3QgQCBjaGFyIGlzIHRoZSBkZWNpZGVyLlxuICAgIHZhciBhdXRoLCBhdFNpZ247XG4gICAgaWYgKGhvc3RFbmQgPT09IC0xKSB7XG4gICAgICAvLyBhdFNpZ24gY2FuIGJlIGFueXdoZXJlLlxuICAgICAgYXRTaWduID0gcmVzdC5sYXN0SW5kZXhPZignQCcpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBhdFNpZ24gbXVzdCBiZSBpbiBhdXRoIHBvcnRpb24uXG4gICAgICAvLyBodHRwOi8vYUBiL2NAZCA9PiBob3N0OmIgYXV0aDphIHBhdGg6L2NAZFxuICAgICAgYXRTaWduID0gcmVzdC5sYXN0SW5kZXhPZignQCcsIGhvc3RFbmQpO1xuICAgIH1cblxuICAgIC8vIE5vdyB3ZSBoYXZlIGEgcG9ydGlvbiB3aGljaCBpcyBkZWZpbml0ZWx5IHRoZSBhdXRoLlxuICAgIC8vIFB1bGwgdGhhdCBvZmYuXG4gICAgaWYgKGF0U2lnbiAhPT0gLTEpIHtcbiAgICAgIGF1dGggPSByZXN0LnNsaWNlKDAsIGF0U2lnbik7XG4gICAgICByZXN0ID0gcmVzdC5zbGljZShhdFNpZ24gKyAxKTtcbiAgICAgIHRoaXMuYXV0aCA9IGRlY29kZVVSSUNvbXBvbmVudChhdXRoKTtcbiAgICB9XG5cbiAgICAvLyB0aGUgaG9zdCBpcyB0aGUgcmVtYWluaW5nIHRvIHRoZSBsZWZ0IG9mIHRoZSBmaXJzdCBub24taG9zdCBjaGFyXG4gICAgaG9zdEVuZCA9IC0xO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbm9uSG9zdENoYXJzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgaGVjID0gcmVzdC5pbmRleE9mKG5vbkhvc3RDaGFyc1tpXSk7XG4gICAgICBpZiAoaGVjICE9PSAtMSAmJiAoaG9zdEVuZCA9PT0gLTEgfHwgaGVjIDwgaG9zdEVuZCkpXG4gICAgICAgIGhvc3RFbmQgPSBoZWM7XG4gICAgfVxuICAgIC8vIGlmIHdlIHN0aWxsIGhhdmUgbm90IGhpdCBpdCwgdGhlbiB0aGUgZW50aXJlIHRoaW5nIGlzIGEgaG9zdC5cbiAgICBpZiAoaG9zdEVuZCA9PT0gLTEpXG4gICAgICBob3N0RW5kID0gcmVzdC5sZW5ndGg7XG5cbiAgICB0aGlzLmhvc3QgPSByZXN0LnNsaWNlKDAsIGhvc3RFbmQpO1xuICAgIHJlc3QgPSByZXN0LnNsaWNlKGhvc3RFbmQpO1xuXG4gICAgLy8gcHVsbCBvdXQgcG9ydC5cbiAgICB0aGlzLnBhcnNlSG9zdCgpO1xuXG4gICAgLy8gd2UndmUgaW5kaWNhdGVkIHRoYXQgdGhlcmUgaXMgYSBob3N0bmFtZSxcbiAgICAvLyBzbyBldmVuIGlmIGl0J3MgZW1wdHksIGl0IGhhcyB0byBiZSBwcmVzZW50LlxuICAgIHRoaXMuaG9zdG5hbWUgPSB0aGlzLmhvc3RuYW1lIHx8ICcnO1xuXG4gICAgLy8gaWYgaG9zdG5hbWUgYmVnaW5zIHdpdGggWyBhbmQgZW5kcyB3aXRoIF1cbiAgICAvLyBhc3N1bWUgdGhhdCBpdCdzIGFuIElQdjYgYWRkcmVzcy5cbiAgICB2YXIgaXB2Nkhvc3RuYW1lID0gdGhpcy5ob3N0bmFtZVswXSA9PT0gJ1snICYmXG4gICAgICAgIHRoaXMuaG9zdG5hbWVbdGhpcy5ob3N0bmFtZS5sZW5ndGggLSAxXSA9PT0gJ10nO1xuXG4gICAgLy8gdmFsaWRhdGUgYSBsaXR0bGUuXG4gICAgaWYgKCFpcHY2SG9zdG5hbWUpIHtcbiAgICAgIHZhciBob3N0cGFydHMgPSB0aGlzLmhvc3RuYW1lLnNwbGl0KC9cXC4vKTtcbiAgICAgIGZvciAodmFyIGkgPSAwLCBsID0gaG9zdHBhcnRzLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgICAgICB2YXIgcGFydCA9IGhvc3RwYXJ0c1tpXTtcbiAgICAgICAgaWYgKCFwYXJ0KSBjb250aW51ZTtcbiAgICAgICAgaWYgKCFwYXJ0Lm1hdGNoKGhvc3RuYW1lUGFydFBhdHRlcm4pKSB7XG4gICAgICAgICAgdmFyIG5ld3BhcnQgPSAnJztcbiAgICAgICAgICBmb3IgKHZhciBqID0gMCwgayA9IHBhcnQubGVuZ3RoOyBqIDwgazsgaisrKSB7XG4gICAgICAgICAgICBpZiAocGFydC5jaGFyQ29kZUF0KGopID4gMTI3KSB7XG4gICAgICAgICAgICAgIC8vIHdlIHJlcGxhY2Ugbm9uLUFTQ0lJIGNoYXIgd2l0aCBhIHRlbXBvcmFyeSBwbGFjZWhvbGRlclxuICAgICAgICAgICAgICAvLyB3ZSBuZWVkIHRoaXMgdG8gbWFrZSBzdXJlIHNpemUgb2YgaG9zdG5hbWUgaXMgbm90XG4gICAgICAgICAgICAgIC8vIGJyb2tlbiBieSByZXBsYWNpbmcgbm9uLUFTQ0lJIGJ5IG5vdGhpbmdcbiAgICAgICAgICAgICAgbmV3cGFydCArPSAneCc7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBuZXdwYXJ0ICs9IHBhcnRbal07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIC8vIHdlIHRlc3QgYWdhaW4gd2l0aCBBU0NJSSBjaGFyIG9ubHlcbiAgICAgICAgICBpZiAoIW5ld3BhcnQubWF0Y2goaG9zdG5hbWVQYXJ0UGF0dGVybikpIHtcbiAgICAgICAgICAgIHZhciB2YWxpZFBhcnRzID0gaG9zdHBhcnRzLnNsaWNlKDAsIGkpO1xuICAgICAgICAgICAgdmFyIG5vdEhvc3QgPSBob3N0cGFydHMuc2xpY2UoaSArIDEpO1xuICAgICAgICAgICAgdmFyIGJpdCA9IHBhcnQubWF0Y2goaG9zdG5hbWVQYXJ0U3RhcnQpO1xuICAgICAgICAgICAgaWYgKGJpdCkge1xuICAgICAgICAgICAgICB2YWxpZFBhcnRzLnB1c2goYml0WzFdKTtcbiAgICAgICAgICAgICAgbm90SG9zdC51bnNoaWZ0KGJpdFsyXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAobm90SG9zdC5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgcmVzdCA9ICcvJyArIG5vdEhvc3Quam9pbignLicpICsgcmVzdDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuaG9zdG5hbWUgPSB2YWxpZFBhcnRzLmpvaW4oJy4nKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0aGlzLmhvc3RuYW1lLmxlbmd0aCA+IGhvc3RuYW1lTWF4TGVuKSB7XG4gICAgICB0aGlzLmhvc3RuYW1lID0gJyc7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIGhvc3RuYW1lcyBhcmUgYWx3YXlzIGxvd2VyIGNhc2UuXG4gICAgICB0aGlzLmhvc3RuYW1lID0gdGhpcy5ob3N0bmFtZS50b0xvd2VyQ2FzZSgpO1xuICAgIH1cblxuICAgIGlmICghaXB2Nkhvc3RuYW1lKSB7XG4gICAgICAvLyBJRE5BIFN1cHBvcnQ6IFJldHVybnMgYSBwdW55IGNvZGVkIHJlcHJlc2VudGF0aW9uIG9mIFwiZG9tYWluXCIuXG4gICAgICAvLyBJdCBvbmx5IGNvbnZlcnRzIHRoZSBwYXJ0IG9mIHRoZSBkb21haW4gbmFtZSB0aGF0XG4gICAgICAvLyBoYXMgbm9uIEFTQ0lJIGNoYXJhY3RlcnMuIEkuZS4gaXQgZG9zZW50IG1hdHRlciBpZlxuICAgICAgLy8geW91IGNhbGwgaXQgd2l0aCBhIGRvbWFpbiB0aGF0IGFscmVhZHkgaXMgaW4gQVNDSUkuXG4gICAgICB2YXIgZG9tYWluQXJyYXkgPSB0aGlzLmhvc3RuYW1lLnNwbGl0KCcuJyk7XG4gICAgICB2YXIgbmV3T3V0ID0gW107XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGRvbWFpbkFycmF5Lmxlbmd0aDsgKytpKSB7XG4gICAgICAgIHZhciBzID0gZG9tYWluQXJyYXlbaV07XG4gICAgICAgIG5ld091dC5wdXNoKHMubWF0Y2goL1teQS1aYS16MC05Xy1dLykgP1xuICAgICAgICAgICAgJ3huLS0nICsgcHVueWNvZGUuZW5jb2RlKHMpIDogcyk7XG4gICAgICB9XG4gICAgICB0aGlzLmhvc3RuYW1lID0gbmV3T3V0LmpvaW4oJy4nKTtcbiAgICB9XG5cbiAgICB2YXIgcCA9IHRoaXMucG9ydCA/ICc6JyArIHRoaXMucG9ydCA6ICcnO1xuICAgIHZhciBoID0gdGhpcy5ob3N0bmFtZSB8fCAnJztcbiAgICB0aGlzLmhvc3QgPSBoICsgcDtcbiAgICB0aGlzLmhyZWYgKz0gdGhpcy5ob3N0O1xuXG4gICAgLy8gc3RyaXAgWyBhbmQgXSBmcm9tIHRoZSBob3N0bmFtZVxuICAgIC8vIHRoZSBob3N0IGZpZWxkIHN0aWxsIHJldGFpbnMgdGhlbSwgdGhvdWdoXG4gICAgaWYgKGlwdjZIb3N0bmFtZSkge1xuICAgICAgdGhpcy5ob3N0bmFtZSA9IHRoaXMuaG9zdG5hbWUuc3Vic3RyKDEsIHRoaXMuaG9zdG5hbWUubGVuZ3RoIC0gMik7XG4gICAgICBpZiAocmVzdFswXSAhPT0gJy8nKSB7XG4gICAgICAgIHJlc3QgPSAnLycgKyByZXN0O1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIG5vdyByZXN0IGlzIHNldCB0byB0aGUgcG9zdC1ob3N0IHN0dWZmLlxuICAvLyBjaG9wIG9mZiBhbnkgZGVsaW0gY2hhcnMuXG4gIGlmICghdW5zYWZlUHJvdG9jb2xbbG93ZXJQcm90b10pIHtcblxuICAgIC8vIEZpcnN0LCBtYWtlIDEwMCUgc3VyZSB0aGF0IGFueSBcImF1dG9Fc2NhcGVcIiBjaGFycyBnZXRcbiAgICAvLyBlc2NhcGVkLCBldmVuIGlmIGVuY29kZVVSSUNvbXBvbmVudCBkb2Vzbid0IHRoaW5rIHRoZXlcbiAgICAvLyBuZWVkIHRvIGJlLlxuICAgIGZvciAodmFyIGkgPSAwLCBsID0gYXV0b0VzY2FwZS5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICAgIHZhciBhZSA9IGF1dG9Fc2NhcGVbaV07XG4gICAgICB2YXIgZXNjID0gZW5jb2RlVVJJQ29tcG9uZW50KGFlKTtcbiAgICAgIGlmIChlc2MgPT09IGFlKSB7XG4gICAgICAgIGVzYyA9IGVzY2FwZShhZSk7XG4gICAgICB9XG4gICAgICByZXN0ID0gcmVzdC5zcGxpdChhZSkuam9pbihlc2MpO1xuICAgIH1cbiAgfVxuXG5cbiAgLy8gY2hvcCBvZmYgZnJvbSB0aGUgdGFpbCBmaXJzdC5cbiAgdmFyIGhhc2ggPSByZXN0LmluZGV4T2YoJyMnKTtcbiAgaWYgKGhhc2ggIT09IC0xKSB7XG4gICAgLy8gZ290IGEgZnJhZ21lbnQgc3RyaW5nLlxuICAgIHRoaXMuaGFzaCA9IHJlc3Quc3Vic3RyKGhhc2gpO1xuICAgIHJlc3QgPSByZXN0LnNsaWNlKDAsIGhhc2gpO1xuICB9XG4gIHZhciBxbSA9IHJlc3QuaW5kZXhPZignPycpO1xuICBpZiAocW0gIT09IC0xKSB7XG4gICAgdGhpcy5zZWFyY2ggPSByZXN0LnN1YnN0cihxbSk7XG4gICAgdGhpcy5xdWVyeSA9IHJlc3Quc3Vic3RyKHFtICsgMSk7XG4gICAgaWYgKHBhcnNlUXVlcnlTdHJpbmcpIHtcbiAgICAgIHRoaXMucXVlcnkgPSBxdWVyeXN0cmluZy5wYXJzZSh0aGlzLnF1ZXJ5KTtcbiAgICB9XG4gICAgcmVzdCA9IHJlc3Quc2xpY2UoMCwgcW0pO1xuICB9IGVsc2UgaWYgKHBhcnNlUXVlcnlTdHJpbmcpIHtcbiAgICAvLyBubyBxdWVyeSBzdHJpbmcsIGJ1dCBwYXJzZVF1ZXJ5U3RyaW5nIHN0aWxsIHJlcXVlc3RlZFxuICAgIHRoaXMuc2VhcmNoID0gJyc7XG4gICAgdGhpcy5xdWVyeSA9IHt9O1xuICB9XG4gIGlmIChyZXN0KSB0aGlzLnBhdGhuYW1lID0gcmVzdDtcbiAgaWYgKHNsYXNoZWRQcm90b2NvbFtsb3dlclByb3RvXSAmJlxuICAgICAgdGhpcy5ob3N0bmFtZSAmJiAhdGhpcy5wYXRobmFtZSkge1xuICAgIHRoaXMucGF0aG5hbWUgPSAnLyc7XG4gIH1cblxuICAvL3RvIHN1cHBvcnQgaHR0cC5yZXF1ZXN0XG4gIGlmICh0aGlzLnBhdGhuYW1lIHx8IHRoaXMuc2VhcmNoKSB7XG4gICAgdmFyIHAgPSB0aGlzLnBhdGhuYW1lIHx8ICcnO1xuICAgIHZhciBzID0gdGhpcy5zZWFyY2ggfHwgJyc7XG4gICAgdGhpcy5wYXRoID0gcCArIHM7XG4gIH1cblxuICAvLyBmaW5hbGx5LCByZWNvbnN0cnVjdCB0aGUgaHJlZiBiYXNlZCBvbiB3aGF0IGhhcyBiZWVuIHZhbGlkYXRlZC5cbiAgdGhpcy5ocmVmID0gdGhpcy5mb3JtYXQoKTtcbiAgcmV0dXJuIHRoaXM7XG59O1xuXG4vLyBmb3JtYXQgYSBwYXJzZWQgb2JqZWN0IGludG8gYSB1cmwgc3RyaW5nXG5mdW5jdGlvbiB1cmxGb3JtYXQob2JqKSB7XG4gIC8vIGVuc3VyZSBpdCdzIGFuIG9iamVjdCwgYW5kIG5vdCBhIHN0cmluZyB1cmwuXG4gIC8vIElmIGl0J3MgYW4gb2JqLCB0aGlzIGlzIGEgbm8tb3AuXG4gIC8vIHRoaXMgd2F5LCB5b3UgY2FuIGNhbGwgdXJsX2Zvcm1hdCgpIG9uIHN0cmluZ3NcbiAgLy8gdG8gY2xlYW4gdXAgcG90ZW50aWFsbHkgd29ua3kgdXJscy5cbiAgaWYgKGlzU3RyaW5nKG9iaikpIG9iaiA9IHVybFBhcnNlKG9iaik7XG4gIGlmICghKG9iaiBpbnN0YW5jZW9mIFVybCkpIHJldHVybiBVcmwucHJvdG90eXBlLmZvcm1hdC5jYWxsKG9iaik7XG4gIHJldHVybiBvYmouZm9ybWF0KCk7XG59XG5cblVybC5wcm90b3R5cGUuZm9ybWF0ID0gZnVuY3Rpb24oKSB7XG4gIHZhciBhdXRoID0gdGhpcy5hdXRoIHx8ICcnO1xuICBpZiAoYXV0aCkge1xuICAgIGF1dGggPSBlbmNvZGVVUklDb21wb25lbnQoYXV0aCk7XG4gICAgYXV0aCA9IGF1dGgucmVwbGFjZSgvJTNBL2ksICc6Jyk7XG4gICAgYXV0aCArPSAnQCc7XG4gIH1cblxuICB2YXIgcHJvdG9jb2wgPSB0aGlzLnByb3RvY29sIHx8ICcnLFxuICAgICAgcGF0aG5hbWUgPSB0aGlzLnBhdGhuYW1lIHx8ICcnLFxuICAgICAgaGFzaCA9IHRoaXMuaGFzaCB8fCAnJyxcbiAgICAgIGhvc3QgPSBmYWxzZSxcbiAgICAgIHF1ZXJ5ID0gJyc7XG5cbiAgaWYgKHRoaXMuaG9zdCkge1xuICAgIGhvc3QgPSBhdXRoICsgdGhpcy5ob3N0O1xuICB9IGVsc2UgaWYgKHRoaXMuaG9zdG5hbWUpIHtcbiAgICBob3N0ID0gYXV0aCArICh0aGlzLmhvc3RuYW1lLmluZGV4T2YoJzonKSA9PT0gLTEgP1xuICAgICAgICB0aGlzLmhvc3RuYW1lIDpcbiAgICAgICAgJ1snICsgdGhpcy5ob3N0bmFtZSArICddJyk7XG4gICAgaWYgKHRoaXMucG9ydCkge1xuICAgICAgaG9zdCArPSAnOicgKyB0aGlzLnBvcnQ7XG4gICAgfVxuICB9XG5cbiAgaWYgKHRoaXMucXVlcnkgJiZcbiAgICAgIGlzT2JqZWN0KHRoaXMucXVlcnkpICYmXG4gICAgICBPYmplY3Qua2V5cyh0aGlzLnF1ZXJ5KS5sZW5ndGgpIHtcbiAgICBxdWVyeSA9IHF1ZXJ5c3RyaW5nLnN0cmluZ2lmeSh0aGlzLnF1ZXJ5KTtcbiAgfVxuXG4gIHZhciBzZWFyY2ggPSB0aGlzLnNlYXJjaCB8fCAocXVlcnkgJiYgKCc/JyArIHF1ZXJ5KSkgfHwgJyc7XG5cbiAgaWYgKHByb3RvY29sICYmIHByb3RvY29sLnN1YnN0cigtMSkgIT09ICc6JykgcHJvdG9jb2wgKz0gJzonO1xuXG4gIC8vIG9ubHkgdGhlIHNsYXNoZWRQcm90b2NvbHMgZ2V0IHRoZSAvLy4gIE5vdCBtYWlsdG86LCB4bXBwOiwgZXRjLlxuICAvLyB1bmxlc3MgdGhleSBoYWQgdGhlbSB0byBiZWdpbiB3aXRoLlxuICBpZiAodGhpcy5zbGFzaGVzIHx8XG4gICAgICAoIXByb3RvY29sIHx8IHNsYXNoZWRQcm90b2NvbFtwcm90b2NvbF0pICYmIGhvc3QgIT09IGZhbHNlKSB7XG4gICAgaG9zdCA9ICcvLycgKyAoaG9zdCB8fCAnJyk7XG4gICAgaWYgKHBhdGhuYW1lICYmIHBhdGhuYW1lLmNoYXJBdCgwKSAhPT0gJy8nKSBwYXRobmFtZSA9ICcvJyArIHBhdGhuYW1lO1xuICB9IGVsc2UgaWYgKCFob3N0KSB7XG4gICAgaG9zdCA9ICcnO1xuICB9XG5cbiAgaWYgKGhhc2ggJiYgaGFzaC5jaGFyQXQoMCkgIT09ICcjJykgaGFzaCA9ICcjJyArIGhhc2g7XG4gIGlmIChzZWFyY2ggJiYgc2VhcmNoLmNoYXJBdCgwKSAhPT0gJz8nKSBzZWFyY2ggPSAnPycgKyBzZWFyY2g7XG5cbiAgcGF0aG5hbWUgPSBwYXRobmFtZS5yZXBsYWNlKC9bPyNdL2csIGZ1bmN0aW9uKG1hdGNoKSB7XG4gICAgcmV0dXJuIGVuY29kZVVSSUNvbXBvbmVudChtYXRjaCk7XG4gIH0pO1xuICBzZWFyY2ggPSBzZWFyY2gucmVwbGFjZSgnIycsICclMjMnKTtcblxuICByZXR1cm4gcHJvdG9jb2wgKyBob3N0ICsgcGF0aG5hbWUgKyBzZWFyY2ggKyBoYXNoO1xufTtcblxuZnVuY3Rpb24gdXJsUmVzb2x2ZShzb3VyY2UsIHJlbGF0aXZlKSB7XG4gIHJldHVybiB1cmxQYXJzZShzb3VyY2UsIGZhbHNlLCB0cnVlKS5yZXNvbHZlKHJlbGF0aXZlKTtcbn1cblxuVXJsLnByb3RvdHlwZS5yZXNvbHZlID0gZnVuY3Rpb24ocmVsYXRpdmUpIHtcbiAgcmV0dXJuIHRoaXMucmVzb2x2ZU9iamVjdCh1cmxQYXJzZShyZWxhdGl2ZSwgZmFsc2UsIHRydWUpKS5mb3JtYXQoKTtcbn07XG5cbmZ1bmN0aW9uIHVybFJlc29sdmVPYmplY3Qoc291cmNlLCByZWxhdGl2ZSkge1xuICBpZiAoIXNvdXJjZSkgcmV0dXJuIHJlbGF0aXZlO1xuICByZXR1cm4gdXJsUGFyc2Uoc291cmNlLCBmYWxzZSwgdHJ1ZSkucmVzb2x2ZU9iamVjdChyZWxhdGl2ZSk7XG59XG5cblVybC5wcm90b3R5cGUucmVzb2x2ZU9iamVjdCA9IGZ1bmN0aW9uKHJlbGF0aXZlKSB7XG4gIGlmIChpc1N0cmluZyhyZWxhdGl2ZSkpIHtcbiAgICB2YXIgcmVsID0gbmV3IFVybCgpO1xuICAgIHJlbC5wYXJzZShyZWxhdGl2ZSwgZmFsc2UsIHRydWUpO1xuICAgIHJlbGF0aXZlID0gcmVsO1xuICB9XG5cbiAgdmFyIHJlc3VsdCA9IG5ldyBVcmwoKTtcbiAgT2JqZWN0LmtleXModGhpcykuZm9yRWFjaChmdW5jdGlvbihrKSB7XG4gICAgcmVzdWx0W2tdID0gdGhpc1trXTtcbiAgfSwgdGhpcyk7XG5cbiAgLy8gaGFzaCBpcyBhbHdheXMgb3ZlcnJpZGRlbiwgbm8gbWF0dGVyIHdoYXQuXG4gIC8vIGV2ZW4gaHJlZj1cIlwiIHdpbGwgcmVtb3ZlIGl0LlxuICByZXN1bHQuaGFzaCA9IHJlbGF0aXZlLmhhc2g7XG5cbiAgLy8gaWYgdGhlIHJlbGF0aXZlIHVybCBpcyBlbXB0eSwgdGhlbiB0aGVyZSdzIG5vdGhpbmcgbGVmdCB0byBkbyBoZXJlLlxuICBpZiAocmVsYXRpdmUuaHJlZiA9PT0gJycpIHtcbiAgICByZXN1bHQuaHJlZiA9IHJlc3VsdC5mb3JtYXQoKTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgLy8gaHJlZnMgbGlrZSAvL2Zvby9iYXIgYWx3YXlzIGN1dCB0byB0aGUgcHJvdG9jb2wuXG4gIGlmIChyZWxhdGl2ZS5zbGFzaGVzICYmICFyZWxhdGl2ZS5wcm90b2NvbCkge1xuICAgIC8vIHRha2UgZXZlcnl0aGluZyBleGNlcHQgdGhlIHByb3RvY29sIGZyb20gcmVsYXRpdmVcbiAgICBPYmplY3Qua2V5cyhyZWxhdGl2ZSkuZm9yRWFjaChmdW5jdGlvbihrKSB7XG4gICAgICBpZiAoayAhPT0gJ3Byb3RvY29sJylcbiAgICAgICAgcmVzdWx0W2tdID0gcmVsYXRpdmVba107XG4gICAgfSk7XG5cbiAgICAvL3VybFBhcnNlIGFwcGVuZHMgdHJhaWxpbmcgLyB0byB1cmxzIGxpa2UgaHR0cDovL3d3dy5leGFtcGxlLmNvbVxuICAgIGlmIChzbGFzaGVkUHJvdG9jb2xbcmVzdWx0LnByb3RvY29sXSAmJlxuICAgICAgICByZXN1bHQuaG9zdG5hbWUgJiYgIXJlc3VsdC5wYXRobmFtZSkge1xuICAgICAgcmVzdWx0LnBhdGggPSByZXN1bHQucGF0aG5hbWUgPSAnLyc7XG4gICAgfVxuXG4gICAgcmVzdWx0LmhyZWYgPSByZXN1bHQuZm9ybWF0KCk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIGlmIChyZWxhdGl2ZS5wcm90b2NvbCAmJiByZWxhdGl2ZS5wcm90b2NvbCAhPT0gcmVzdWx0LnByb3RvY29sKSB7XG4gICAgLy8gaWYgaXQncyBhIGtub3duIHVybCBwcm90b2NvbCwgdGhlbiBjaGFuZ2luZ1xuICAgIC8vIHRoZSBwcm90b2NvbCBkb2VzIHdlaXJkIHRoaW5nc1xuICAgIC8vIGZpcnN0LCBpZiBpdCdzIG5vdCBmaWxlOiwgdGhlbiB3ZSBNVVNUIGhhdmUgYSBob3N0LFxuICAgIC8vIGFuZCBpZiB0aGVyZSB3YXMgYSBwYXRoXG4gICAgLy8gdG8gYmVnaW4gd2l0aCwgdGhlbiB3ZSBNVVNUIGhhdmUgYSBwYXRoLlxuICAgIC8vIGlmIGl0IGlzIGZpbGU6LCB0aGVuIHRoZSBob3N0IGlzIGRyb3BwZWQsXG4gICAgLy8gYmVjYXVzZSB0aGF0J3Mga25vd24gdG8gYmUgaG9zdGxlc3MuXG4gICAgLy8gYW55dGhpbmcgZWxzZSBpcyBhc3N1bWVkIHRvIGJlIGFic29sdXRlLlxuICAgIGlmICghc2xhc2hlZFByb3RvY29sW3JlbGF0aXZlLnByb3RvY29sXSkge1xuICAgICAgT2JqZWN0LmtleXMocmVsYXRpdmUpLmZvckVhY2goZnVuY3Rpb24oaykge1xuICAgICAgICByZXN1bHRba10gPSByZWxhdGl2ZVtrXTtcbiAgICAgIH0pO1xuICAgICAgcmVzdWx0LmhyZWYgPSByZXN1bHQuZm9ybWF0KCk7XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIHJlc3VsdC5wcm90b2NvbCA9IHJlbGF0aXZlLnByb3RvY29sO1xuICAgIGlmICghcmVsYXRpdmUuaG9zdCAmJiAhaG9zdGxlc3NQcm90b2NvbFtyZWxhdGl2ZS5wcm90b2NvbF0pIHtcbiAgICAgIHZhciByZWxQYXRoID0gKHJlbGF0aXZlLnBhdGhuYW1lIHx8ICcnKS5zcGxpdCgnLycpO1xuICAgICAgd2hpbGUgKHJlbFBhdGgubGVuZ3RoICYmICEocmVsYXRpdmUuaG9zdCA9IHJlbFBhdGguc2hpZnQoKSkpO1xuICAgICAgaWYgKCFyZWxhdGl2ZS5ob3N0KSByZWxhdGl2ZS5ob3N0ID0gJyc7XG4gICAgICBpZiAoIXJlbGF0aXZlLmhvc3RuYW1lKSByZWxhdGl2ZS5ob3N0bmFtZSA9ICcnO1xuICAgICAgaWYgKHJlbFBhdGhbMF0gIT09ICcnKSByZWxQYXRoLnVuc2hpZnQoJycpO1xuICAgICAgaWYgKHJlbFBhdGgubGVuZ3RoIDwgMikgcmVsUGF0aC51bnNoaWZ0KCcnKTtcbiAgICAgIHJlc3VsdC5wYXRobmFtZSA9IHJlbFBhdGguam9pbignLycpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXN1bHQucGF0aG5hbWUgPSByZWxhdGl2ZS5wYXRobmFtZTtcbiAgICB9XG4gICAgcmVzdWx0LnNlYXJjaCA9IHJlbGF0aXZlLnNlYXJjaDtcbiAgICByZXN1bHQucXVlcnkgPSByZWxhdGl2ZS5xdWVyeTtcbiAgICByZXN1bHQuaG9zdCA9IHJlbGF0aXZlLmhvc3QgfHwgJyc7XG4gICAgcmVzdWx0LmF1dGggPSByZWxhdGl2ZS5hdXRoO1xuICAgIHJlc3VsdC5ob3N0bmFtZSA9IHJlbGF0aXZlLmhvc3RuYW1lIHx8IHJlbGF0aXZlLmhvc3Q7XG4gICAgcmVzdWx0LnBvcnQgPSByZWxhdGl2ZS5wb3J0O1xuICAgIC8vIHRvIHN1cHBvcnQgaHR0cC5yZXF1ZXN0XG4gICAgaWYgKHJlc3VsdC5wYXRobmFtZSB8fCByZXN1bHQuc2VhcmNoKSB7XG4gICAgICB2YXIgcCA9IHJlc3VsdC5wYXRobmFtZSB8fCAnJztcbiAgICAgIHZhciBzID0gcmVzdWx0LnNlYXJjaCB8fCAnJztcbiAgICAgIHJlc3VsdC5wYXRoID0gcCArIHM7XG4gICAgfVxuICAgIHJlc3VsdC5zbGFzaGVzID0gcmVzdWx0LnNsYXNoZXMgfHwgcmVsYXRpdmUuc2xhc2hlcztcbiAgICByZXN1bHQuaHJlZiA9IHJlc3VsdC5mb3JtYXQoKTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgdmFyIGlzU291cmNlQWJzID0gKHJlc3VsdC5wYXRobmFtZSAmJiByZXN1bHQucGF0aG5hbWUuY2hhckF0KDApID09PSAnLycpLFxuICAgICAgaXNSZWxBYnMgPSAoXG4gICAgICAgICAgcmVsYXRpdmUuaG9zdCB8fFxuICAgICAgICAgIHJlbGF0aXZlLnBhdGhuYW1lICYmIHJlbGF0aXZlLnBhdGhuYW1lLmNoYXJBdCgwKSA9PT0gJy8nXG4gICAgICApLFxuICAgICAgbXVzdEVuZEFicyA9IChpc1JlbEFicyB8fCBpc1NvdXJjZUFicyB8fFxuICAgICAgICAgICAgICAgICAgICAocmVzdWx0Lmhvc3QgJiYgcmVsYXRpdmUucGF0aG5hbWUpKSxcbiAgICAgIHJlbW92ZUFsbERvdHMgPSBtdXN0RW5kQWJzLFxuICAgICAgc3JjUGF0aCA9IHJlc3VsdC5wYXRobmFtZSAmJiByZXN1bHQucGF0aG5hbWUuc3BsaXQoJy8nKSB8fCBbXSxcbiAgICAgIHJlbFBhdGggPSByZWxhdGl2ZS5wYXRobmFtZSAmJiByZWxhdGl2ZS5wYXRobmFtZS5zcGxpdCgnLycpIHx8IFtdLFxuICAgICAgcHN5Y2hvdGljID0gcmVzdWx0LnByb3RvY29sICYmICFzbGFzaGVkUHJvdG9jb2xbcmVzdWx0LnByb3RvY29sXTtcblxuICAvLyBpZiB0aGUgdXJsIGlzIGEgbm9uLXNsYXNoZWQgdXJsLCB0aGVuIHJlbGF0aXZlXG4gIC8vIGxpbmtzIGxpa2UgLi4vLi4gc2hvdWxkIGJlIGFibGVcbiAgLy8gdG8gY3Jhd2wgdXAgdG8gdGhlIGhvc3RuYW1lLCBhcyB3ZWxsLiAgVGhpcyBpcyBzdHJhbmdlLlxuICAvLyByZXN1bHQucHJvdG9jb2wgaGFzIGFscmVhZHkgYmVlbiBzZXQgYnkgbm93LlxuICAvLyBMYXRlciBvbiwgcHV0IHRoZSBmaXJzdCBwYXRoIHBhcnQgaW50byB0aGUgaG9zdCBmaWVsZC5cbiAgaWYgKHBzeWNob3RpYykge1xuICAgIHJlc3VsdC5ob3N0bmFtZSA9ICcnO1xuICAgIHJlc3VsdC5wb3J0ID0gbnVsbDtcbiAgICBpZiAocmVzdWx0Lmhvc3QpIHtcbiAgICAgIGlmIChzcmNQYXRoWzBdID09PSAnJykgc3JjUGF0aFswXSA9IHJlc3VsdC5ob3N0O1xuICAgICAgZWxzZSBzcmNQYXRoLnVuc2hpZnQocmVzdWx0Lmhvc3QpO1xuICAgIH1cbiAgICByZXN1bHQuaG9zdCA9ICcnO1xuICAgIGlmIChyZWxhdGl2ZS5wcm90b2NvbCkge1xuICAgICAgcmVsYXRpdmUuaG9zdG5hbWUgPSBudWxsO1xuICAgICAgcmVsYXRpdmUucG9ydCA9IG51bGw7XG4gICAgICBpZiAocmVsYXRpdmUuaG9zdCkge1xuICAgICAgICBpZiAocmVsUGF0aFswXSA9PT0gJycpIHJlbFBhdGhbMF0gPSByZWxhdGl2ZS5ob3N0O1xuICAgICAgICBlbHNlIHJlbFBhdGgudW5zaGlmdChyZWxhdGl2ZS5ob3N0KTtcbiAgICAgIH1cbiAgICAgIHJlbGF0aXZlLmhvc3QgPSBudWxsO1xuICAgIH1cbiAgICBtdXN0RW5kQWJzID0gbXVzdEVuZEFicyAmJiAocmVsUGF0aFswXSA9PT0gJycgfHwgc3JjUGF0aFswXSA9PT0gJycpO1xuICB9XG5cbiAgaWYgKGlzUmVsQWJzKSB7XG4gICAgLy8gaXQncyBhYnNvbHV0ZS5cbiAgICByZXN1bHQuaG9zdCA9IChyZWxhdGl2ZS5ob3N0IHx8IHJlbGF0aXZlLmhvc3QgPT09ICcnKSA/XG4gICAgICAgICAgICAgICAgICByZWxhdGl2ZS5ob3N0IDogcmVzdWx0Lmhvc3Q7XG4gICAgcmVzdWx0Lmhvc3RuYW1lID0gKHJlbGF0aXZlLmhvc3RuYW1lIHx8IHJlbGF0aXZlLmhvc3RuYW1lID09PSAnJykgP1xuICAgICAgICAgICAgICAgICAgICAgIHJlbGF0aXZlLmhvc3RuYW1lIDogcmVzdWx0Lmhvc3RuYW1lO1xuICAgIHJlc3VsdC5zZWFyY2ggPSByZWxhdGl2ZS5zZWFyY2g7XG4gICAgcmVzdWx0LnF1ZXJ5ID0gcmVsYXRpdmUucXVlcnk7XG4gICAgc3JjUGF0aCA9IHJlbFBhdGg7XG4gICAgLy8gZmFsbCB0aHJvdWdoIHRvIHRoZSBkb3QtaGFuZGxpbmcgYmVsb3cuXG4gIH0gZWxzZSBpZiAocmVsUGF0aC5sZW5ndGgpIHtcbiAgICAvLyBpdCdzIHJlbGF0aXZlXG4gICAgLy8gdGhyb3cgYXdheSB0aGUgZXhpc3RpbmcgZmlsZSwgYW5kIHRha2UgdGhlIG5ldyBwYXRoIGluc3RlYWQuXG4gICAgaWYgKCFzcmNQYXRoKSBzcmNQYXRoID0gW107XG4gICAgc3JjUGF0aC5wb3AoKTtcbiAgICBzcmNQYXRoID0gc3JjUGF0aC5jb25jYXQocmVsUGF0aCk7XG4gICAgcmVzdWx0LnNlYXJjaCA9IHJlbGF0aXZlLnNlYXJjaDtcbiAgICByZXN1bHQucXVlcnkgPSByZWxhdGl2ZS5xdWVyeTtcbiAgfSBlbHNlIGlmICghaXNOdWxsT3JVbmRlZmluZWQocmVsYXRpdmUuc2VhcmNoKSkge1xuICAgIC8vIGp1c3QgcHVsbCBvdXQgdGhlIHNlYXJjaC5cbiAgICAvLyBsaWtlIGhyZWY9Jz9mb28nLlxuICAgIC8vIFB1dCB0aGlzIGFmdGVyIHRoZSBvdGhlciB0d28gY2FzZXMgYmVjYXVzZSBpdCBzaW1wbGlmaWVzIHRoZSBib29sZWFuc1xuICAgIGlmIChwc3ljaG90aWMpIHtcbiAgICAgIHJlc3VsdC5ob3N0bmFtZSA9IHJlc3VsdC5ob3N0ID0gc3JjUGF0aC5zaGlmdCgpO1xuICAgICAgLy9vY2NhdGlvbmFseSB0aGUgYXV0aCBjYW4gZ2V0IHN0dWNrIG9ubHkgaW4gaG9zdFxuICAgICAgLy90aGlzIGVzcGVjaWFseSBoYXBwZW5zIGluIGNhc2VzIGxpa2VcbiAgICAgIC8vdXJsLnJlc29sdmVPYmplY3QoJ21haWx0bzpsb2NhbDFAZG9tYWluMScsICdsb2NhbDJAZG9tYWluMicpXG4gICAgICB2YXIgYXV0aEluSG9zdCA9IHJlc3VsdC5ob3N0ICYmIHJlc3VsdC5ob3N0LmluZGV4T2YoJ0AnKSA+IDAgP1xuICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQuaG9zdC5zcGxpdCgnQCcpIDogZmFsc2U7XG4gICAgICBpZiAoYXV0aEluSG9zdCkge1xuICAgICAgICByZXN1bHQuYXV0aCA9IGF1dGhJbkhvc3Quc2hpZnQoKTtcbiAgICAgICAgcmVzdWx0Lmhvc3QgPSByZXN1bHQuaG9zdG5hbWUgPSBhdXRoSW5Ib3N0LnNoaWZ0KCk7XG4gICAgICB9XG4gICAgfVxuICAgIHJlc3VsdC5zZWFyY2ggPSByZWxhdGl2ZS5zZWFyY2g7XG4gICAgcmVzdWx0LnF1ZXJ5ID0gcmVsYXRpdmUucXVlcnk7XG4gICAgLy90byBzdXBwb3J0IGh0dHAucmVxdWVzdFxuICAgIGlmICghaXNOdWxsKHJlc3VsdC5wYXRobmFtZSkgfHwgIWlzTnVsbChyZXN1bHQuc2VhcmNoKSkge1xuICAgICAgcmVzdWx0LnBhdGggPSAocmVzdWx0LnBhdGhuYW1lID8gcmVzdWx0LnBhdGhuYW1lIDogJycpICtcbiAgICAgICAgICAgICAgICAgICAgKHJlc3VsdC5zZWFyY2ggPyByZXN1bHQuc2VhcmNoIDogJycpO1xuICAgIH1cbiAgICByZXN1bHQuaHJlZiA9IHJlc3VsdC5mb3JtYXQoKTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgaWYgKCFzcmNQYXRoLmxlbmd0aCkge1xuICAgIC8vIG5vIHBhdGggYXQgYWxsLiAgZWFzeS5cbiAgICAvLyB3ZSd2ZSBhbHJlYWR5IGhhbmRsZWQgdGhlIG90aGVyIHN0dWZmIGFib3ZlLlxuICAgIHJlc3VsdC5wYXRobmFtZSA9IG51bGw7XG4gICAgLy90byBzdXBwb3J0IGh0dHAucmVxdWVzdFxuICAgIGlmIChyZXN1bHQuc2VhcmNoKSB7XG4gICAgICByZXN1bHQucGF0aCA9ICcvJyArIHJlc3VsdC5zZWFyY2g7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJlc3VsdC5wYXRoID0gbnVsbDtcbiAgICB9XG4gICAgcmVzdWx0LmhyZWYgPSByZXN1bHQuZm9ybWF0KCk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIC8vIGlmIGEgdXJsIEVORHMgaW4gLiBvciAuLiwgdGhlbiBpdCBtdXN0IGdldCBhIHRyYWlsaW5nIHNsYXNoLlxuICAvLyBob3dldmVyLCBpZiBpdCBlbmRzIGluIGFueXRoaW5nIGVsc2Ugbm9uLXNsYXNoeSxcbiAgLy8gdGhlbiBpdCBtdXN0IE5PVCBnZXQgYSB0cmFpbGluZyBzbGFzaC5cbiAgdmFyIGxhc3QgPSBzcmNQYXRoLnNsaWNlKC0xKVswXTtcbiAgdmFyIGhhc1RyYWlsaW5nU2xhc2ggPSAoXG4gICAgICAocmVzdWx0Lmhvc3QgfHwgcmVsYXRpdmUuaG9zdCkgJiYgKGxhc3QgPT09ICcuJyB8fCBsYXN0ID09PSAnLi4nKSB8fFxuICAgICAgbGFzdCA9PT0gJycpO1xuXG4gIC8vIHN0cmlwIHNpbmdsZSBkb3RzLCByZXNvbHZlIGRvdWJsZSBkb3RzIHRvIHBhcmVudCBkaXJcbiAgLy8gaWYgdGhlIHBhdGggdHJpZXMgdG8gZ28gYWJvdmUgdGhlIHJvb3QsIGB1cGAgZW5kcyB1cCA+IDBcbiAgdmFyIHVwID0gMDtcbiAgZm9yICh2YXIgaSA9IHNyY1BhdGgubGVuZ3RoOyBpID49IDA7IGktLSkge1xuICAgIGxhc3QgPSBzcmNQYXRoW2ldO1xuICAgIGlmIChsYXN0ID09ICcuJykge1xuICAgICAgc3JjUGF0aC5zcGxpY2UoaSwgMSk7XG4gICAgfSBlbHNlIGlmIChsYXN0ID09PSAnLi4nKSB7XG4gICAgICBzcmNQYXRoLnNwbGljZShpLCAxKTtcbiAgICAgIHVwKys7XG4gICAgfSBlbHNlIGlmICh1cCkge1xuICAgICAgc3JjUGF0aC5zcGxpY2UoaSwgMSk7XG4gICAgICB1cC0tO1xuICAgIH1cbiAgfVxuXG4gIC8vIGlmIHRoZSBwYXRoIGlzIGFsbG93ZWQgdG8gZ28gYWJvdmUgdGhlIHJvb3QsIHJlc3RvcmUgbGVhZGluZyAuLnNcbiAgaWYgKCFtdXN0RW5kQWJzICYmICFyZW1vdmVBbGxEb3RzKSB7XG4gICAgZm9yICg7IHVwLS07IHVwKSB7XG4gICAgICBzcmNQYXRoLnVuc2hpZnQoJy4uJyk7XG4gICAgfVxuICB9XG5cbiAgaWYgKG11c3RFbmRBYnMgJiYgc3JjUGF0aFswXSAhPT0gJycgJiZcbiAgICAgICghc3JjUGF0aFswXSB8fCBzcmNQYXRoWzBdLmNoYXJBdCgwKSAhPT0gJy8nKSkge1xuICAgIHNyY1BhdGgudW5zaGlmdCgnJyk7XG4gIH1cblxuICBpZiAoaGFzVHJhaWxpbmdTbGFzaCAmJiAoc3JjUGF0aC5qb2luKCcvJykuc3Vic3RyKC0xKSAhPT0gJy8nKSkge1xuICAgIHNyY1BhdGgucHVzaCgnJyk7XG4gIH1cblxuICB2YXIgaXNBYnNvbHV0ZSA9IHNyY1BhdGhbMF0gPT09ICcnIHx8XG4gICAgICAoc3JjUGF0aFswXSAmJiBzcmNQYXRoWzBdLmNoYXJBdCgwKSA9PT0gJy8nKTtcblxuICAvLyBwdXQgdGhlIGhvc3QgYmFja1xuICBpZiAocHN5Y2hvdGljKSB7XG4gICAgcmVzdWx0Lmhvc3RuYW1lID0gcmVzdWx0Lmhvc3QgPSBpc0Fic29sdXRlID8gJycgOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjUGF0aC5sZW5ndGggPyBzcmNQYXRoLnNoaWZ0KCkgOiAnJztcbiAgICAvL29jY2F0aW9uYWx5IHRoZSBhdXRoIGNhbiBnZXQgc3R1Y2sgb25seSBpbiBob3N0XG4gICAgLy90aGlzIGVzcGVjaWFseSBoYXBwZW5zIGluIGNhc2VzIGxpa2VcbiAgICAvL3VybC5yZXNvbHZlT2JqZWN0KCdtYWlsdG86bG9jYWwxQGRvbWFpbjEnLCAnbG9jYWwyQGRvbWFpbjInKVxuICAgIHZhciBhdXRoSW5Ib3N0ID0gcmVzdWx0Lmhvc3QgJiYgcmVzdWx0Lmhvc3QuaW5kZXhPZignQCcpID4gMCA/XG4gICAgICAgICAgICAgICAgICAgICByZXN1bHQuaG9zdC5zcGxpdCgnQCcpIDogZmFsc2U7XG4gICAgaWYgKGF1dGhJbkhvc3QpIHtcbiAgICAgIHJlc3VsdC5hdXRoID0gYXV0aEluSG9zdC5zaGlmdCgpO1xuICAgICAgcmVzdWx0Lmhvc3QgPSByZXN1bHQuaG9zdG5hbWUgPSBhdXRoSW5Ib3N0LnNoaWZ0KCk7XG4gICAgfVxuICB9XG5cbiAgbXVzdEVuZEFicyA9IG11c3RFbmRBYnMgfHwgKHJlc3VsdC5ob3N0ICYmIHNyY1BhdGgubGVuZ3RoKTtcblxuICBpZiAobXVzdEVuZEFicyAmJiAhaXNBYnNvbHV0ZSkge1xuICAgIHNyY1BhdGgudW5zaGlmdCgnJyk7XG4gIH1cblxuICBpZiAoIXNyY1BhdGgubGVuZ3RoKSB7XG4gICAgcmVzdWx0LnBhdGhuYW1lID0gbnVsbDtcbiAgICByZXN1bHQucGF0aCA9IG51bGw7XG4gIH0gZWxzZSB7XG4gICAgcmVzdWx0LnBhdGhuYW1lID0gc3JjUGF0aC5qb2luKCcvJyk7XG4gIH1cblxuICAvL3RvIHN1cHBvcnQgcmVxdWVzdC5odHRwXG4gIGlmICghaXNOdWxsKHJlc3VsdC5wYXRobmFtZSkgfHwgIWlzTnVsbChyZXN1bHQuc2VhcmNoKSkge1xuICAgIHJlc3VsdC5wYXRoID0gKHJlc3VsdC5wYXRobmFtZSA/IHJlc3VsdC5wYXRobmFtZSA6ICcnKSArXG4gICAgICAgICAgICAgICAgICAocmVzdWx0LnNlYXJjaCA/IHJlc3VsdC5zZWFyY2ggOiAnJyk7XG4gIH1cbiAgcmVzdWx0LmF1dGggPSByZWxhdGl2ZS5hdXRoIHx8IHJlc3VsdC5hdXRoO1xuICByZXN1bHQuc2xhc2hlcyA9IHJlc3VsdC5zbGFzaGVzIHx8IHJlbGF0aXZlLnNsYXNoZXM7XG4gIHJlc3VsdC5ocmVmID0gcmVzdWx0LmZvcm1hdCgpO1xuICByZXR1cm4gcmVzdWx0O1xufTtcblxuVXJsLnByb3RvdHlwZS5wYXJzZUhvc3QgPSBmdW5jdGlvbigpIHtcbiAgdmFyIGhvc3QgPSB0aGlzLmhvc3Q7XG4gIHZhciBwb3J0ID0gcG9ydFBhdHRlcm4uZXhlYyhob3N0KTtcbiAgaWYgKHBvcnQpIHtcbiAgICBwb3J0ID0gcG9ydFswXTtcbiAgICBpZiAocG9ydCAhPT0gJzonKSB7XG4gICAgICB0aGlzLnBvcnQgPSBwb3J0LnN1YnN0cigxKTtcbiAgICB9XG4gICAgaG9zdCA9IGhvc3Quc3Vic3RyKDAsIGhvc3QubGVuZ3RoIC0gcG9ydC5sZW5ndGgpO1xuICB9XG4gIGlmIChob3N0KSB0aGlzLmhvc3RuYW1lID0gaG9zdDtcbn07XG5cbmZ1bmN0aW9uIGlzU3RyaW5nKGFyZykge1xuICByZXR1cm4gdHlwZW9mIGFyZyA9PT0gXCJzdHJpbmdcIjtcbn1cblxuZnVuY3Rpb24gaXNPYmplY3QoYXJnKSB7XG4gIHJldHVybiB0eXBlb2YgYXJnID09PSAnb2JqZWN0JyAmJiBhcmcgIT09IG51bGw7XG59XG5cbmZ1bmN0aW9uIGlzTnVsbChhcmcpIHtcbiAgcmV0dXJuIGFyZyA9PT0gbnVsbDtcbn1cbmZ1bmN0aW9uIGlzTnVsbE9yVW5kZWZpbmVkKGFyZykge1xuICByZXR1cm4gIGFyZyA9PSBudWxsO1xufVxuIiwiJ3VzZSBzdHJpY3QnO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGVhcmN1dDtcblxuZnVuY3Rpb24gZWFyY3V0KGRhdGEsIGhvbGVJbmRpY2VzLCBkaW0pIHtcblxuICAgIGRpbSA9IGRpbSB8fCAyO1xuXG4gICAgdmFyIGhhc0hvbGVzID0gaG9sZUluZGljZXMgJiYgaG9sZUluZGljZXMubGVuZ3RoLFxuICAgICAgICBvdXRlckxlbiA9IGhhc0hvbGVzID8gaG9sZUluZGljZXNbMF0gKiBkaW0gOiBkYXRhLmxlbmd0aCxcbiAgICAgICAgb3V0ZXJOb2RlID0gbGlua2VkTGlzdChkYXRhLCAwLCBvdXRlckxlbiwgZGltLCB0cnVlKSxcbiAgICAgICAgdHJpYW5nbGVzID0gW107XG5cbiAgICBpZiAoIW91dGVyTm9kZSkgcmV0dXJuIHRyaWFuZ2xlcztcblxuICAgIHZhciBtaW5YLCBtaW5ZLCBtYXhYLCBtYXhZLCB4LCB5LCBzaXplO1xuXG4gICAgaWYgKGhhc0hvbGVzKSBvdXRlck5vZGUgPSBlbGltaW5hdGVIb2xlcyhkYXRhLCBob2xlSW5kaWNlcywgb3V0ZXJOb2RlLCBkaW0pO1xuXG4gICAgLy8gaWYgdGhlIHNoYXBlIGlzIG5vdCB0b28gc2ltcGxlLCB3ZSdsbCB1c2Ugei1vcmRlciBjdXJ2ZSBoYXNoIGxhdGVyOyBjYWxjdWxhdGUgcG9seWdvbiBiYm94XG4gICAgaWYgKGRhdGEubGVuZ3RoID4gODAgKiBkaW0pIHtcbiAgICAgICAgbWluWCA9IG1heFggPSBkYXRhWzBdO1xuICAgICAgICBtaW5ZID0gbWF4WSA9IGRhdGFbMV07XG5cbiAgICAgICAgZm9yICh2YXIgaSA9IGRpbTsgaSA8IG91dGVyTGVuOyBpICs9IGRpbSkge1xuICAgICAgICAgICAgeCA9IGRhdGFbaV07XG4gICAgICAgICAgICB5ID0gZGF0YVtpICsgMV07XG4gICAgICAgICAgICBpZiAoeCA8IG1pblgpIG1pblggPSB4O1xuICAgICAgICAgICAgaWYgKHkgPCBtaW5ZKSBtaW5ZID0geTtcbiAgICAgICAgICAgIGlmICh4ID4gbWF4WCkgbWF4WCA9IHg7XG4gICAgICAgICAgICBpZiAoeSA+IG1heFkpIG1heFkgPSB5O1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gbWluWCwgbWluWSBhbmQgc2l6ZSBhcmUgbGF0ZXIgdXNlZCB0byB0cmFuc2Zvcm0gY29vcmRzIGludG8gaW50ZWdlcnMgZm9yIHotb3JkZXIgY2FsY3VsYXRpb25cbiAgICAgICAgc2l6ZSA9IE1hdGgubWF4KG1heFggLSBtaW5YLCBtYXhZIC0gbWluWSk7XG4gICAgfVxuXG4gICAgZWFyY3V0TGlua2VkKG91dGVyTm9kZSwgdHJpYW5nbGVzLCBkaW0sIG1pblgsIG1pblksIHNpemUpO1xuXG4gICAgcmV0dXJuIHRyaWFuZ2xlcztcbn1cblxuLy8gY3JlYXRlIGEgY2lyY3VsYXIgZG91Ymx5IGxpbmtlZCBsaXN0IGZyb20gcG9seWdvbiBwb2ludHMgaW4gdGhlIHNwZWNpZmllZCB3aW5kaW5nIG9yZGVyXG5mdW5jdGlvbiBsaW5rZWRMaXN0KGRhdGEsIHN0YXJ0LCBlbmQsIGRpbSwgY2xvY2t3aXNlKSB7XG4gICAgdmFyIHN1bSA9IDAsXG4gICAgICAgIGksIGosIGxhc3Q7XG5cbiAgICAvLyBjYWxjdWxhdGUgb3JpZ2luYWwgd2luZGluZyBvcmRlciBvZiBhIHBvbHlnb24gcmluZ1xuICAgIGZvciAoaSA9IHN0YXJ0LCBqID0gZW5kIC0gZGltOyBpIDwgZW5kOyBpICs9IGRpbSkge1xuICAgICAgICBzdW0gKz0gKGRhdGFbal0gLSBkYXRhW2ldKSAqIChkYXRhW2kgKyAxXSArIGRhdGFbaiArIDFdKTtcbiAgICAgICAgaiA9IGk7XG4gICAgfVxuXG4gICAgLy8gbGluayBwb2ludHMgaW50byBjaXJjdWxhciBkb3VibHktbGlua2VkIGxpc3QgaW4gdGhlIHNwZWNpZmllZCB3aW5kaW5nIG9yZGVyXG4gICAgaWYgKGNsb2Nrd2lzZSA9PT0gKHN1bSA+IDApKSB7XG4gICAgICAgIGZvciAoaSA9IHN0YXJ0OyBpIDwgZW5kOyBpICs9IGRpbSkgbGFzdCA9IGluc2VydE5vZGUoaSwgZGF0YVtpXSwgZGF0YVtpICsgMV0sIGxhc3QpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIGZvciAoaSA9IGVuZCAtIGRpbTsgaSA+PSBzdGFydDsgaSAtPSBkaW0pIGxhc3QgPSBpbnNlcnROb2RlKGksIGRhdGFbaV0sIGRhdGFbaSArIDFdLCBsYXN0KTtcbiAgICB9XG5cbiAgICByZXR1cm4gbGFzdDtcbn1cblxuLy8gZWxpbWluYXRlIGNvbGluZWFyIG9yIGR1cGxpY2F0ZSBwb2ludHNcbmZ1bmN0aW9uIGZpbHRlclBvaW50cyhzdGFydCwgZW5kKSB7XG4gICAgaWYgKCFzdGFydCkgcmV0dXJuIHN0YXJ0O1xuICAgIGlmICghZW5kKSBlbmQgPSBzdGFydDtcblxuICAgIHZhciBwID0gc3RhcnQsXG4gICAgICAgIGFnYWluO1xuICAgIGRvIHtcbiAgICAgICAgYWdhaW4gPSBmYWxzZTtcblxuICAgICAgICBpZiAoIXAuc3RlaW5lciAmJiAoZXF1YWxzKHAsIHAubmV4dCkgfHwgYXJlYShwLnByZXYsIHAsIHAubmV4dCkgPT09IDApKSB7XG4gICAgICAgICAgICByZW1vdmVOb2RlKHApO1xuICAgICAgICAgICAgcCA9IGVuZCA9IHAucHJldjtcbiAgICAgICAgICAgIGlmIChwID09PSBwLm5leHQpIHJldHVybiBudWxsO1xuICAgICAgICAgICAgYWdhaW4gPSB0cnVlO1xuXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBwID0gcC5uZXh0O1xuICAgICAgICB9XG4gICAgfSB3aGlsZSAoYWdhaW4gfHwgcCAhPT0gZW5kKTtcblxuICAgIHJldHVybiBlbmQ7XG59XG5cbi8vIG1haW4gZWFyIHNsaWNpbmcgbG9vcCB3aGljaCB0cmlhbmd1bGF0ZXMgYSBwb2x5Z29uIChnaXZlbiBhcyBhIGxpbmtlZCBsaXN0KVxuZnVuY3Rpb24gZWFyY3V0TGlua2VkKGVhciwgdHJpYW5nbGVzLCBkaW0sIG1pblgsIG1pblksIHNpemUsIHBhc3MpIHtcbiAgICBpZiAoIWVhcikgcmV0dXJuO1xuXG4gICAgLy8gaW50ZXJsaW5rIHBvbHlnb24gbm9kZXMgaW4gei1vcmRlclxuICAgIGlmICghcGFzcyAmJiBzaXplKSBpbmRleEN1cnZlKGVhciwgbWluWCwgbWluWSwgc2l6ZSk7XG5cbiAgICB2YXIgc3RvcCA9IGVhcixcbiAgICAgICAgcHJldiwgbmV4dDtcblxuICAgIC8vIGl0ZXJhdGUgdGhyb3VnaCBlYXJzLCBzbGljaW5nIHRoZW0gb25lIGJ5IG9uZVxuICAgIHdoaWxlIChlYXIucHJldiAhPT0gZWFyLm5leHQpIHtcbiAgICAgICAgcHJldiA9IGVhci5wcmV2O1xuICAgICAgICBuZXh0ID0gZWFyLm5leHQ7XG5cbiAgICAgICAgaWYgKHNpemUgPyBpc0Vhckhhc2hlZChlYXIsIG1pblgsIG1pblksIHNpemUpIDogaXNFYXIoZWFyKSkge1xuICAgICAgICAgICAgLy8gY3V0IG9mZiB0aGUgdHJpYW5nbGVcbiAgICAgICAgICAgIHRyaWFuZ2xlcy5wdXNoKHByZXYuaSAvIGRpbSk7XG4gICAgICAgICAgICB0cmlhbmdsZXMucHVzaChlYXIuaSAvIGRpbSk7XG4gICAgICAgICAgICB0cmlhbmdsZXMucHVzaChuZXh0LmkgLyBkaW0pO1xuXG4gICAgICAgICAgICByZW1vdmVOb2RlKGVhcik7XG5cbiAgICAgICAgICAgIC8vIHNraXBwaW5nIHRoZSBuZXh0IHZlcnRpY2UgbGVhZHMgdG8gbGVzcyBzbGl2ZXIgdHJpYW5nbGVzXG4gICAgICAgICAgICBlYXIgPSBuZXh0Lm5leHQ7XG4gICAgICAgICAgICBzdG9wID0gbmV4dC5uZXh0O1xuXG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGVhciA9IG5leHQ7XG5cbiAgICAgICAgLy8gaWYgd2UgbG9vcGVkIHRocm91Z2ggdGhlIHdob2xlIHJlbWFpbmluZyBwb2x5Z29uIGFuZCBjYW4ndCBmaW5kIGFueSBtb3JlIGVhcnNcbiAgICAgICAgaWYgKGVhciA9PT0gc3RvcCkge1xuICAgICAgICAgICAgLy8gdHJ5IGZpbHRlcmluZyBwb2ludHMgYW5kIHNsaWNpbmcgYWdhaW5cbiAgICAgICAgICAgIGlmICghcGFzcykge1xuICAgICAgICAgICAgICAgIGVhcmN1dExpbmtlZChmaWx0ZXJQb2ludHMoZWFyKSwgdHJpYW5nbGVzLCBkaW0sIG1pblgsIG1pblksIHNpemUsIDEpO1xuXG4gICAgICAgICAgICAvLyBpZiB0aGlzIGRpZG4ndCB3b3JrLCB0cnkgY3VyaW5nIGFsbCBzbWFsbCBzZWxmLWludGVyc2VjdGlvbnMgbG9jYWxseVxuICAgICAgICAgICAgfSBlbHNlIGlmIChwYXNzID09PSAxKSB7XG4gICAgICAgICAgICAgICAgZWFyID0gY3VyZUxvY2FsSW50ZXJzZWN0aW9ucyhlYXIsIHRyaWFuZ2xlcywgZGltKTtcbiAgICAgICAgICAgICAgICBlYXJjdXRMaW5rZWQoZWFyLCB0cmlhbmdsZXMsIGRpbSwgbWluWCwgbWluWSwgc2l6ZSwgMik7XG5cbiAgICAgICAgICAgIC8vIGFzIGEgbGFzdCByZXNvcnQsIHRyeSBzcGxpdHRpbmcgdGhlIHJlbWFpbmluZyBwb2x5Z29uIGludG8gdHdvXG4gICAgICAgICAgICB9IGVsc2UgaWYgKHBhc3MgPT09IDIpIHtcbiAgICAgICAgICAgICAgICBzcGxpdEVhcmN1dChlYXIsIHRyaWFuZ2xlcywgZGltLCBtaW5YLCBtaW5ZLCBzaXplKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbi8vIGNoZWNrIHdoZXRoZXIgYSBwb2x5Z29uIG5vZGUgZm9ybXMgYSB2YWxpZCBlYXIgd2l0aCBhZGphY2VudCBub2Rlc1xuZnVuY3Rpb24gaXNFYXIoZWFyKSB7XG4gICAgdmFyIGEgPSBlYXIucHJldixcbiAgICAgICAgYiA9IGVhcixcbiAgICAgICAgYyA9IGVhci5uZXh0O1xuXG4gICAgaWYgKGFyZWEoYSwgYiwgYykgPj0gMCkgcmV0dXJuIGZhbHNlOyAvLyByZWZsZXgsIGNhbid0IGJlIGFuIGVhclxuXG4gICAgLy8gbm93IG1ha2Ugc3VyZSB3ZSBkb24ndCBoYXZlIG90aGVyIHBvaW50cyBpbnNpZGUgdGhlIHBvdGVudGlhbCBlYXJcbiAgICB2YXIgcCA9IGVhci5uZXh0Lm5leHQ7XG5cbiAgICB3aGlsZSAocCAhPT0gZWFyLnByZXYpIHtcbiAgICAgICAgaWYgKHBvaW50SW5UcmlhbmdsZShhLngsIGEueSwgYi54LCBiLnksIGMueCwgYy55LCBwLngsIHAueSkgJiZcbiAgICAgICAgICAgIGFyZWEocC5wcmV2LCBwLCBwLm5leHQpID49IDApIHJldHVybiBmYWxzZTtcbiAgICAgICAgcCA9IHAubmV4dDtcbiAgICB9XG5cbiAgICByZXR1cm4gdHJ1ZTtcbn1cblxuZnVuY3Rpb24gaXNFYXJIYXNoZWQoZWFyLCBtaW5YLCBtaW5ZLCBzaXplKSB7XG4gICAgdmFyIGEgPSBlYXIucHJldixcbiAgICAgICAgYiA9IGVhcixcbiAgICAgICAgYyA9IGVhci5uZXh0O1xuXG4gICAgaWYgKGFyZWEoYSwgYiwgYykgPj0gMCkgcmV0dXJuIGZhbHNlOyAvLyByZWZsZXgsIGNhbid0IGJlIGFuIGVhclxuXG4gICAgLy8gdHJpYW5nbGUgYmJveDsgbWluICYgbWF4IGFyZSBjYWxjdWxhdGVkIGxpa2UgdGhpcyBmb3Igc3BlZWRcbiAgICB2YXIgbWluVFggPSBhLnggPCBiLnggPyAoYS54IDwgYy54ID8gYS54IDogYy54KSA6IChiLnggPCBjLnggPyBiLnggOiBjLngpLFxuICAgICAgICBtaW5UWSA9IGEueSA8IGIueSA/IChhLnkgPCBjLnkgPyBhLnkgOiBjLnkpIDogKGIueSA8IGMueSA/IGIueSA6IGMueSksXG4gICAgICAgIG1heFRYID0gYS54ID4gYi54ID8gKGEueCA+IGMueCA/IGEueCA6IGMueCkgOiAoYi54ID4gYy54ID8gYi54IDogYy54KSxcbiAgICAgICAgbWF4VFkgPSBhLnkgPiBiLnkgPyAoYS55ID4gYy55ID8gYS55IDogYy55KSA6IChiLnkgPiBjLnkgPyBiLnkgOiBjLnkpO1xuXG4gICAgLy8gei1vcmRlciByYW5nZSBmb3IgdGhlIGN1cnJlbnQgdHJpYW5nbGUgYmJveDtcbiAgICB2YXIgbWluWiA9IHpPcmRlcihtaW5UWCwgbWluVFksIG1pblgsIG1pblksIHNpemUpLFxuICAgICAgICBtYXhaID0gek9yZGVyKG1heFRYLCBtYXhUWSwgbWluWCwgbWluWSwgc2l6ZSk7XG5cbiAgICAvLyBmaXJzdCBsb29rIGZvciBwb2ludHMgaW5zaWRlIHRoZSB0cmlhbmdsZSBpbiBpbmNyZWFzaW5nIHotb3JkZXJcbiAgICB2YXIgcCA9IGVhci5uZXh0WjtcblxuICAgIHdoaWxlIChwICYmIHAueiA8PSBtYXhaKSB7XG4gICAgICAgIGlmIChwICE9PSBlYXIucHJldiAmJiBwICE9PSBlYXIubmV4dCAmJlxuICAgICAgICAgICAgcG9pbnRJblRyaWFuZ2xlKGEueCwgYS55LCBiLngsIGIueSwgYy54LCBjLnksIHAueCwgcC55KSAmJlxuICAgICAgICAgICAgYXJlYShwLnByZXYsIHAsIHAubmV4dCkgPj0gMCkgcmV0dXJuIGZhbHNlO1xuICAgICAgICBwID0gcC5uZXh0WjtcbiAgICB9XG5cbiAgICAvLyB0aGVuIGxvb2sgZm9yIHBvaW50cyBpbiBkZWNyZWFzaW5nIHotb3JkZXJcbiAgICBwID0gZWFyLnByZXZaO1xuXG4gICAgd2hpbGUgKHAgJiYgcC56ID49IG1pblopIHtcbiAgICAgICAgaWYgKHAgIT09IGVhci5wcmV2ICYmIHAgIT09IGVhci5uZXh0ICYmXG4gICAgICAgICAgICBwb2ludEluVHJpYW5nbGUoYS54LCBhLnksIGIueCwgYi55LCBjLngsIGMueSwgcC54LCBwLnkpICYmXG4gICAgICAgICAgICBhcmVhKHAucHJldiwgcCwgcC5uZXh0KSA+PSAwKSByZXR1cm4gZmFsc2U7XG4gICAgICAgIHAgPSBwLnByZXZaO1xuICAgIH1cblxuICAgIHJldHVybiB0cnVlO1xufVxuXG4vLyBnbyB0aHJvdWdoIGFsbCBwb2x5Z29uIG5vZGVzIGFuZCBjdXJlIHNtYWxsIGxvY2FsIHNlbGYtaW50ZXJzZWN0aW9uc1xuZnVuY3Rpb24gY3VyZUxvY2FsSW50ZXJzZWN0aW9ucyhzdGFydCwgdHJpYW5nbGVzLCBkaW0pIHtcbiAgICB2YXIgcCA9IHN0YXJ0O1xuICAgIGRvIHtcbiAgICAgICAgdmFyIGEgPSBwLnByZXYsXG4gICAgICAgICAgICBiID0gcC5uZXh0Lm5leHQ7XG5cbiAgICAgICAgLy8gYSBzZWxmLWludGVyc2VjdGlvbiB3aGVyZSBlZGdlICh2W2ktMV0sdltpXSkgaW50ZXJzZWN0cyAodltpKzFdLHZbaSsyXSlcbiAgICAgICAgaWYgKGludGVyc2VjdHMoYSwgcCwgcC5uZXh0LCBiKSAmJiBsb2NhbGx5SW5zaWRlKGEsIGIpICYmIGxvY2FsbHlJbnNpZGUoYiwgYSkpIHtcblxuICAgICAgICAgICAgdHJpYW5nbGVzLnB1c2goYS5pIC8gZGltKTtcbiAgICAgICAgICAgIHRyaWFuZ2xlcy5wdXNoKHAuaSAvIGRpbSk7XG4gICAgICAgICAgICB0cmlhbmdsZXMucHVzaChiLmkgLyBkaW0pO1xuXG4gICAgICAgICAgICAvLyByZW1vdmUgdHdvIG5vZGVzIGludm9sdmVkXG4gICAgICAgICAgICByZW1vdmVOb2RlKHApO1xuICAgICAgICAgICAgcmVtb3ZlTm9kZShwLm5leHQpO1xuXG4gICAgICAgICAgICBwID0gc3RhcnQgPSBiO1xuICAgICAgICB9XG4gICAgICAgIHAgPSBwLm5leHQ7XG4gICAgfSB3aGlsZSAocCAhPT0gc3RhcnQpO1xuXG4gICAgcmV0dXJuIHA7XG59XG5cbi8vIHRyeSBzcGxpdHRpbmcgcG9seWdvbiBpbnRvIHR3byBhbmQgdHJpYW5ndWxhdGUgdGhlbSBpbmRlcGVuZGVudGx5XG5mdW5jdGlvbiBzcGxpdEVhcmN1dChzdGFydCwgdHJpYW5nbGVzLCBkaW0sIG1pblgsIG1pblksIHNpemUpIHtcbiAgICAvLyBsb29rIGZvciBhIHZhbGlkIGRpYWdvbmFsIHRoYXQgZGl2aWRlcyB0aGUgcG9seWdvbiBpbnRvIHR3b1xuICAgIHZhciBhID0gc3RhcnQ7XG4gICAgZG8ge1xuICAgICAgICB2YXIgYiA9IGEubmV4dC5uZXh0O1xuICAgICAgICB3aGlsZSAoYiAhPT0gYS5wcmV2KSB7XG4gICAgICAgICAgICBpZiAoYS5pICE9PSBiLmkgJiYgaXNWYWxpZERpYWdvbmFsKGEsIGIpKSB7XG4gICAgICAgICAgICAgICAgLy8gc3BsaXQgdGhlIHBvbHlnb24gaW4gdHdvIGJ5IHRoZSBkaWFnb25hbFxuICAgICAgICAgICAgICAgIHZhciBjID0gc3BsaXRQb2x5Z29uKGEsIGIpO1xuXG4gICAgICAgICAgICAgICAgLy8gZmlsdGVyIGNvbGluZWFyIHBvaW50cyBhcm91bmQgdGhlIGN1dHNcbiAgICAgICAgICAgICAgICBhID0gZmlsdGVyUG9pbnRzKGEsIGEubmV4dCk7XG4gICAgICAgICAgICAgICAgYyA9IGZpbHRlclBvaW50cyhjLCBjLm5leHQpO1xuXG4gICAgICAgICAgICAgICAgLy8gcnVuIGVhcmN1dCBvbiBlYWNoIGhhbGZcbiAgICAgICAgICAgICAgICBlYXJjdXRMaW5rZWQoYSwgdHJpYW5nbGVzLCBkaW0sIG1pblgsIG1pblksIHNpemUpO1xuICAgICAgICAgICAgICAgIGVhcmN1dExpbmtlZChjLCB0cmlhbmdsZXMsIGRpbSwgbWluWCwgbWluWSwgc2l6ZSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYiA9IGIubmV4dDtcbiAgICAgICAgfVxuICAgICAgICBhID0gYS5uZXh0O1xuICAgIH0gd2hpbGUgKGEgIT09IHN0YXJ0KTtcbn1cblxuLy8gbGluayBldmVyeSBob2xlIGludG8gdGhlIG91dGVyIGxvb3AsIHByb2R1Y2luZyBhIHNpbmdsZS1yaW5nIHBvbHlnb24gd2l0aG91dCBob2xlc1xuZnVuY3Rpb24gZWxpbWluYXRlSG9sZXMoZGF0YSwgaG9sZUluZGljZXMsIG91dGVyTm9kZSwgZGltKSB7XG4gICAgdmFyIHF1ZXVlID0gW10sXG4gICAgICAgIGksIGxlbiwgc3RhcnQsIGVuZCwgbGlzdDtcblxuICAgIGZvciAoaSA9IDAsIGxlbiA9IGhvbGVJbmRpY2VzLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICAgIHN0YXJ0ID0gaG9sZUluZGljZXNbaV0gKiBkaW07XG4gICAgICAgIGVuZCA9IGkgPCBsZW4gLSAxID8gaG9sZUluZGljZXNbaSArIDFdICogZGltIDogZGF0YS5sZW5ndGg7XG4gICAgICAgIGxpc3QgPSBsaW5rZWRMaXN0KGRhdGEsIHN0YXJ0LCBlbmQsIGRpbSwgZmFsc2UpO1xuICAgICAgICBpZiAobGlzdCA9PT0gbGlzdC5uZXh0KSBsaXN0LnN0ZWluZXIgPSB0cnVlO1xuICAgICAgICBxdWV1ZS5wdXNoKGdldExlZnRtb3N0KGxpc3QpKTtcbiAgICB9XG5cbiAgICBxdWV1ZS5zb3J0KGNvbXBhcmVYKTtcblxuICAgIC8vIHByb2Nlc3MgaG9sZXMgZnJvbSBsZWZ0IHRvIHJpZ2h0XG4gICAgZm9yIChpID0gMDsgaSA8IHF1ZXVlLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGVsaW1pbmF0ZUhvbGUocXVldWVbaV0sIG91dGVyTm9kZSk7XG4gICAgICAgIG91dGVyTm9kZSA9IGZpbHRlclBvaW50cyhvdXRlck5vZGUsIG91dGVyTm9kZS5uZXh0KTtcbiAgICB9XG5cbiAgICByZXR1cm4gb3V0ZXJOb2RlO1xufVxuXG5mdW5jdGlvbiBjb21wYXJlWChhLCBiKSB7XG4gICAgcmV0dXJuIGEueCAtIGIueDtcbn1cblxuLy8gZmluZCBhIGJyaWRnZSBiZXR3ZWVuIHZlcnRpY2VzIHRoYXQgY29ubmVjdHMgaG9sZSB3aXRoIGFuIG91dGVyIHJpbmcgYW5kIGFuZCBsaW5rIGl0XG5mdW5jdGlvbiBlbGltaW5hdGVIb2xlKGhvbGUsIG91dGVyTm9kZSkge1xuICAgIG91dGVyTm9kZSA9IGZpbmRIb2xlQnJpZGdlKGhvbGUsIG91dGVyTm9kZSk7XG4gICAgaWYgKG91dGVyTm9kZSkge1xuICAgICAgICB2YXIgYiA9IHNwbGl0UG9seWdvbihvdXRlck5vZGUsIGhvbGUpO1xuICAgICAgICBmaWx0ZXJQb2ludHMoYiwgYi5uZXh0KTtcbiAgICB9XG59XG5cbi8vIERhdmlkIEViZXJseSdzIGFsZ29yaXRobSBmb3IgZmluZGluZyBhIGJyaWRnZSBiZXR3ZWVuIGhvbGUgYW5kIG91dGVyIHBvbHlnb25cbmZ1bmN0aW9uIGZpbmRIb2xlQnJpZGdlKGhvbGUsIG91dGVyTm9kZSkge1xuICAgIHZhciBwID0gb3V0ZXJOb2RlLFxuICAgICAgICBoeCA9IGhvbGUueCxcbiAgICAgICAgaHkgPSBob2xlLnksXG4gICAgICAgIHF4ID0gLUluZmluaXR5LFxuICAgICAgICBtO1xuXG4gICAgLy8gZmluZCBhIHNlZ21lbnQgaW50ZXJzZWN0ZWQgYnkgYSByYXkgZnJvbSB0aGUgaG9sZSdzIGxlZnRtb3N0IHBvaW50IHRvIHRoZSBsZWZ0O1xuICAgIC8vIHNlZ21lbnQncyBlbmRwb2ludCB3aXRoIGxlc3NlciB4IHdpbGwgYmUgcG90ZW50aWFsIGNvbm5lY3Rpb24gcG9pbnRcbiAgICBkbyB7XG4gICAgICAgIGlmIChoeSA8PSBwLnkgJiYgaHkgPj0gcC5uZXh0LnkpIHtcbiAgICAgICAgICAgIHZhciB4ID0gcC54ICsgKGh5IC0gcC55KSAqIChwLm5leHQueCAtIHAueCkgLyAocC5uZXh0LnkgLSBwLnkpO1xuICAgICAgICAgICAgaWYgKHggPD0gaHggJiYgeCA+IHF4KSB7XG4gICAgICAgICAgICAgICAgcXggPSB4O1xuICAgICAgICAgICAgICAgIG0gPSBwLnggPCBwLm5leHQueCA/IHAgOiBwLm5leHQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcCA9IHAubmV4dDtcbiAgICB9IHdoaWxlIChwICE9PSBvdXRlck5vZGUpO1xuXG4gICAgaWYgKCFtKSByZXR1cm4gbnVsbDtcblxuICAgIC8vIGxvb2sgZm9yIHBvaW50cyBpbnNpZGUgdGhlIHRyaWFuZ2xlIG9mIGhvbGUgcG9pbnQsIHNlZ21lbnQgaW50ZXJzZWN0aW9uIGFuZCBlbmRwb2ludDtcbiAgICAvLyBpZiB0aGVyZSBhcmUgbm8gcG9pbnRzIGZvdW5kLCB3ZSBoYXZlIGEgdmFsaWQgY29ubmVjdGlvbjtcbiAgICAvLyBvdGhlcndpc2UgY2hvb3NlIHRoZSBwb2ludCBvZiB0aGUgbWluaW11bSBhbmdsZSB3aXRoIHRoZSByYXkgYXMgY29ubmVjdGlvbiBwb2ludFxuXG4gICAgdmFyIHN0b3AgPSBtLFxuICAgICAgICB0YW5NaW4gPSBJbmZpbml0eSxcbiAgICAgICAgdGFuO1xuXG4gICAgcCA9IG0ubmV4dDtcblxuICAgIHdoaWxlIChwICE9PSBzdG9wKSB7XG4gICAgICAgIGlmIChoeCA+PSBwLnggJiYgcC54ID49IG0ueCAmJlxuICAgICAgICAgICAgICAgIHBvaW50SW5UcmlhbmdsZShoeSA8IG0ueSA/IGh4IDogcXgsIGh5LCBtLngsIG0ueSwgaHkgPCBtLnkgPyBxeCA6IGh4LCBoeSwgcC54LCBwLnkpKSB7XG5cbiAgICAgICAgICAgIHRhbiA9IE1hdGguYWJzKGh5IC0gcC55KSAvIChoeCAtIHAueCk7IC8vIHRhbmdlbnRpYWxcblxuICAgICAgICAgICAgaWYgKCh0YW4gPCB0YW5NaW4gfHwgKHRhbiA9PT0gdGFuTWluICYmIHAueCA+IG0ueCkpICYmIGxvY2FsbHlJbnNpZGUocCwgaG9sZSkpIHtcbiAgICAgICAgICAgICAgICBtID0gcDtcbiAgICAgICAgICAgICAgICB0YW5NaW4gPSB0YW47XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBwID0gcC5uZXh0O1xuICAgIH1cblxuICAgIHJldHVybiBtO1xufVxuXG4vLyBpbnRlcmxpbmsgcG9seWdvbiBub2RlcyBpbiB6LW9yZGVyXG5mdW5jdGlvbiBpbmRleEN1cnZlKHN0YXJ0LCBtaW5YLCBtaW5ZLCBzaXplKSB7XG4gICAgdmFyIHAgPSBzdGFydDtcbiAgICBkbyB7XG4gICAgICAgIGlmIChwLnogPT09IG51bGwpIHAueiA9IHpPcmRlcihwLngsIHAueSwgbWluWCwgbWluWSwgc2l6ZSk7XG4gICAgICAgIHAucHJldlogPSBwLnByZXY7XG4gICAgICAgIHAubmV4dFogPSBwLm5leHQ7XG4gICAgICAgIHAgPSBwLm5leHQ7XG4gICAgfSB3aGlsZSAocCAhPT0gc3RhcnQpO1xuXG4gICAgcC5wcmV2Wi5uZXh0WiA9IG51bGw7XG4gICAgcC5wcmV2WiA9IG51bGw7XG5cbiAgICBzb3J0TGlua2VkKHApO1xufVxuXG4vLyBTaW1vbiBUYXRoYW0ncyBsaW5rZWQgbGlzdCBtZXJnZSBzb3J0IGFsZ29yaXRobVxuLy8gaHR0cDovL3d3dy5jaGlhcmsuZ3JlZW5lbmQub3JnLnVrL35zZ3RhdGhhbS9hbGdvcml0aG1zL2xpc3Rzb3J0Lmh0bWxcbmZ1bmN0aW9uIHNvcnRMaW5rZWQobGlzdCkge1xuICAgIHZhciBpLCBwLCBxLCBlLCB0YWlsLCBudW1NZXJnZXMsIHBTaXplLCBxU2l6ZSxcbiAgICAgICAgaW5TaXplID0gMTtcblxuICAgIGRvIHtcbiAgICAgICAgcCA9IGxpc3Q7XG4gICAgICAgIGxpc3QgPSBudWxsO1xuICAgICAgICB0YWlsID0gbnVsbDtcbiAgICAgICAgbnVtTWVyZ2VzID0gMDtcblxuICAgICAgICB3aGlsZSAocCkge1xuICAgICAgICAgICAgbnVtTWVyZ2VzKys7XG4gICAgICAgICAgICBxID0gcDtcbiAgICAgICAgICAgIHBTaXplID0gMDtcbiAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBpblNpemU7IGkrKykge1xuICAgICAgICAgICAgICAgIHBTaXplKys7XG4gICAgICAgICAgICAgICAgcSA9IHEubmV4dFo7XG4gICAgICAgICAgICAgICAgaWYgKCFxKSBicmVhaztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcVNpemUgPSBpblNpemU7XG5cbiAgICAgICAgICAgIHdoaWxlIChwU2l6ZSA+IDAgfHwgKHFTaXplID4gMCAmJiBxKSkge1xuXG4gICAgICAgICAgICAgICAgaWYgKHBTaXplID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIGUgPSBxO1xuICAgICAgICAgICAgICAgICAgICBxID0gcS5uZXh0WjtcbiAgICAgICAgICAgICAgICAgICAgcVNpemUtLTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHFTaXplID09PSAwIHx8ICFxKSB7XG4gICAgICAgICAgICAgICAgICAgIGUgPSBwO1xuICAgICAgICAgICAgICAgICAgICBwID0gcC5uZXh0WjtcbiAgICAgICAgICAgICAgICAgICAgcFNpemUtLTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHAueiA8PSBxLnopIHtcbiAgICAgICAgICAgICAgICAgICAgZSA9IHA7XG4gICAgICAgICAgICAgICAgICAgIHAgPSBwLm5leHRaO1xuICAgICAgICAgICAgICAgICAgICBwU2l6ZS0tO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGUgPSBxO1xuICAgICAgICAgICAgICAgICAgICBxID0gcS5uZXh0WjtcbiAgICAgICAgICAgICAgICAgICAgcVNpemUtLTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAodGFpbCkgdGFpbC5uZXh0WiA9IGU7XG4gICAgICAgICAgICAgICAgZWxzZSBsaXN0ID0gZTtcblxuICAgICAgICAgICAgICAgIGUucHJldlogPSB0YWlsO1xuICAgICAgICAgICAgICAgIHRhaWwgPSBlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBwID0gcTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRhaWwubmV4dFogPSBudWxsO1xuICAgICAgICBpblNpemUgKj0gMjtcblxuICAgIH0gd2hpbGUgKG51bU1lcmdlcyA+IDEpO1xuXG4gICAgcmV0dXJuIGxpc3Q7XG59XG5cbi8vIHotb3JkZXIgb2YgYSBwb2ludCBnaXZlbiBjb29yZHMgYW5kIHNpemUgb2YgdGhlIGRhdGEgYm91bmRpbmcgYm94XG5mdW5jdGlvbiB6T3JkZXIoeCwgeSwgbWluWCwgbWluWSwgc2l6ZSkge1xuICAgIC8vIGNvb3JkcyBhcmUgdHJhbnNmb3JtZWQgaW50byBub24tbmVnYXRpdmUgMTUtYml0IGludGVnZXIgcmFuZ2VcbiAgICB4ID0gMzI3NjcgKiAoeCAtIG1pblgpIC8gc2l6ZTtcbiAgICB5ID0gMzI3NjcgKiAoeSAtIG1pblkpIC8gc2l6ZTtcblxuICAgIHggPSAoeCB8ICh4IDw8IDgpKSAmIDB4MDBGRjAwRkY7XG4gICAgeCA9ICh4IHwgKHggPDwgNCkpICYgMHgwRjBGMEYwRjtcbiAgICB4ID0gKHggfCAoeCA8PCAyKSkgJiAweDMzMzMzMzMzO1xuICAgIHggPSAoeCB8ICh4IDw8IDEpKSAmIDB4NTU1NTU1NTU7XG5cbiAgICB5ID0gKHkgfCAoeSA8PCA4KSkgJiAweDAwRkYwMEZGO1xuICAgIHkgPSAoeSB8ICh5IDw8IDQpKSAmIDB4MEYwRjBGMEY7XG4gICAgeSA9ICh5IHwgKHkgPDwgMikpICYgMHgzMzMzMzMzMztcbiAgICB5ID0gKHkgfCAoeSA8PCAxKSkgJiAweDU1NTU1NTU1O1xuXG4gICAgcmV0dXJuIHggfCAoeSA8PCAxKTtcbn1cblxuLy8gZmluZCB0aGUgbGVmdG1vc3Qgbm9kZSBvZiBhIHBvbHlnb24gcmluZ1xuZnVuY3Rpb24gZ2V0TGVmdG1vc3Qoc3RhcnQpIHtcbiAgICB2YXIgcCA9IHN0YXJ0LFxuICAgICAgICBsZWZ0bW9zdCA9IHN0YXJ0O1xuICAgIGRvIHtcbiAgICAgICAgaWYgKHAueCA8IGxlZnRtb3N0LngpIGxlZnRtb3N0ID0gcDtcbiAgICAgICAgcCA9IHAubmV4dDtcbiAgICB9IHdoaWxlIChwICE9PSBzdGFydCk7XG5cbiAgICByZXR1cm4gbGVmdG1vc3Q7XG59XG5cbi8vIGNoZWNrIGlmIGEgcG9pbnQgbGllcyB3aXRoaW4gYSBjb252ZXggdHJpYW5nbGVcbmZ1bmN0aW9uIHBvaW50SW5UcmlhbmdsZShheCwgYXksIGJ4LCBieSwgY3gsIGN5LCBweCwgcHkpIHtcbiAgICByZXR1cm4gKGN4IC0gcHgpICogKGF5IC0gcHkpIC0gKGF4IC0gcHgpICogKGN5IC0gcHkpID49IDAgJiZcbiAgICAgICAgICAgKGF4IC0gcHgpICogKGJ5IC0gcHkpIC0gKGJ4IC0gcHgpICogKGF5IC0gcHkpID49IDAgJiZcbiAgICAgICAgICAgKGJ4IC0gcHgpICogKGN5IC0gcHkpIC0gKGN4IC0gcHgpICogKGJ5IC0gcHkpID49IDA7XG59XG5cbi8vIGNoZWNrIGlmIGEgZGlhZ29uYWwgYmV0d2VlbiB0d28gcG9seWdvbiBub2RlcyBpcyB2YWxpZCAobGllcyBpbiBwb2x5Z29uIGludGVyaW9yKVxuZnVuY3Rpb24gaXNWYWxpZERpYWdvbmFsKGEsIGIpIHtcbiAgICByZXR1cm4gZXF1YWxzKGEsIGIpIHx8IGEubmV4dC5pICE9PSBiLmkgJiYgYS5wcmV2LmkgIT09IGIuaSAmJiAhaW50ZXJzZWN0c1BvbHlnb24oYSwgYikgJiZcbiAgICAgICAgICAgbG9jYWxseUluc2lkZShhLCBiKSAmJiBsb2NhbGx5SW5zaWRlKGIsIGEpICYmIG1pZGRsZUluc2lkZShhLCBiKTtcbn1cblxuLy8gc2lnbmVkIGFyZWEgb2YgYSB0cmlhbmdsZVxuZnVuY3Rpb24gYXJlYShwLCBxLCByKSB7XG4gICAgcmV0dXJuIChxLnkgLSBwLnkpICogKHIueCAtIHEueCkgLSAocS54IC0gcC54KSAqIChyLnkgLSBxLnkpO1xufVxuXG4vLyBjaGVjayBpZiB0d28gcG9pbnRzIGFyZSBlcXVhbFxuZnVuY3Rpb24gZXF1YWxzKHAxLCBwMikge1xuICAgIHJldHVybiBwMS54ID09PSBwMi54ICYmIHAxLnkgPT09IHAyLnk7XG59XG5cbi8vIGNoZWNrIGlmIHR3byBzZWdtZW50cyBpbnRlcnNlY3RcbmZ1bmN0aW9uIGludGVyc2VjdHMocDEsIHExLCBwMiwgcTIpIHtcbiAgICByZXR1cm4gYXJlYShwMSwgcTEsIHAyKSA+IDAgIT09IGFyZWEocDEsIHExLCBxMikgPiAwICYmXG4gICAgICAgICAgIGFyZWEocDIsIHEyLCBwMSkgPiAwICE9PSBhcmVhKHAyLCBxMiwgcTEpID4gMDtcbn1cblxuLy8gY2hlY2sgaWYgYSBwb2x5Z29uIGRpYWdvbmFsIGludGVyc2VjdHMgYW55IHBvbHlnb24gc2VnbWVudHNcbmZ1bmN0aW9uIGludGVyc2VjdHNQb2x5Z29uKGEsIGIpIHtcbiAgICB2YXIgcCA9IGE7XG4gICAgZG8ge1xuICAgICAgICBpZiAocC5pICE9PSBhLmkgJiYgcC5uZXh0LmkgIT09IGEuaSAmJiBwLmkgIT09IGIuaSAmJiBwLm5leHQuaSAhPT0gYi5pICYmXG4gICAgICAgICAgICAgICAgaW50ZXJzZWN0cyhwLCBwLm5leHQsIGEsIGIpKSByZXR1cm4gdHJ1ZTtcbiAgICAgICAgcCA9IHAubmV4dDtcbiAgICB9IHdoaWxlIChwICE9PSBhKTtcblxuICAgIHJldHVybiBmYWxzZTtcbn1cblxuLy8gY2hlY2sgaWYgYSBwb2x5Z29uIGRpYWdvbmFsIGlzIGxvY2FsbHkgaW5zaWRlIHRoZSBwb2x5Z29uXG5mdW5jdGlvbiBsb2NhbGx5SW5zaWRlKGEsIGIpIHtcbiAgICByZXR1cm4gYXJlYShhLnByZXYsIGEsIGEubmV4dCkgPCAwID9cbiAgICAgICAgYXJlYShhLCBiLCBhLm5leHQpID49IDAgJiYgYXJlYShhLCBhLnByZXYsIGIpID49IDAgOlxuICAgICAgICBhcmVhKGEsIGIsIGEucHJldikgPCAwIHx8IGFyZWEoYSwgYS5uZXh0LCBiKSA8IDA7XG59XG5cbi8vIGNoZWNrIGlmIHRoZSBtaWRkbGUgcG9pbnQgb2YgYSBwb2x5Z29uIGRpYWdvbmFsIGlzIGluc2lkZSB0aGUgcG9seWdvblxuZnVuY3Rpb24gbWlkZGxlSW5zaWRlKGEsIGIpIHtcbiAgICB2YXIgcCA9IGEsXG4gICAgICAgIGluc2lkZSA9IGZhbHNlLFxuICAgICAgICBweCA9IChhLnggKyBiLngpIC8gMixcbiAgICAgICAgcHkgPSAoYS55ICsgYi55KSAvIDI7XG4gICAgZG8ge1xuICAgICAgICBpZiAoKChwLnkgPiBweSkgIT09IChwLm5leHQueSA+IHB5KSkgJiYgKHB4IDwgKHAubmV4dC54IC0gcC54KSAqIChweSAtIHAueSkgLyAocC5uZXh0LnkgLSBwLnkpICsgcC54KSlcbiAgICAgICAgICAgIGluc2lkZSA9ICFpbnNpZGU7XG4gICAgICAgIHAgPSBwLm5leHQ7XG4gICAgfSB3aGlsZSAocCAhPT0gYSk7XG5cbiAgICByZXR1cm4gaW5zaWRlO1xufVxuXG4vLyBsaW5rIHR3byBwb2x5Z29uIHZlcnRpY2VzIHdpdGggYSBicmlkZ2U7IGlmIHRoZSB2ZXJ0aWNlcyBiZWxvbmcgdG8gdGhlIHNhbWUgcmluZywgaXQgc3BsaXRzIHBvbHlnb24gaW50byB0d287XG4vLyBpZiBvbmUgYmVsb25ncyB0byB0aGUgb3V0ZXIgcmluZyBhbmQgYW5vdGhlciB0byBhIGhvbGUsIGl0IG1lcmdlcyBpdCBpbnRvIGEgc2luZ2xlIHJpbmdcbmZ1bmN0aW9uIHNwbGl0UG9seWdvbihhLCBiKSB7XG4gICAgdmFyIGEyID0gbmV3IE5vZGUoYS5pLCBhLngsIGEueSksXG4gICAgICAgIGIyID0gbmV3IE5vZGUoYi5pLCBiLngsIGIueSksXG4gICAgICAgIGFuID0gYS5uZXh0LFxuICAgICAgICBicCA9IGIucHJldjtcblxuICAgIGEubmV4dCA9IGI7XG4gICAgYi5wcmV2ID0gYTtcblxuICAgIGEyLm5leHQgPSBhbjtcbiAgICBhbi5wcmV2ID0gYTI7XG5cbiAgICBiMi5uZXh0ID0gYTI7XG4gICAgYTIucHJldiA9IGIyO1xuXG4gICAgYnAubmV4dCA9IGIyO1xuICAgIGIyLnByZXYgPSBicDtcblxuICAgIHJldHVybiBiMjtcbn1cblxuLy8gY3JlYXRlIGEgbm9kZSBhbmQgb3B0aW9uYWxseSBsaW5rIGl0IHdpdGggcHJldmlvdXMgb25lIChpbiBhIGNpcmN1bGFyIGRvdWJseSBsaW5rZWQgbGlzdClcbmZ1bmN0aW9uIGluc2VydE5vZGUoaSwgeCwgeSwgbGFzdCkge1xuICAgIHZhciBwID0gbmV3IE5vZGUoaSwgeCwgeSk7XG5cbiAgICBpZiAoIWxhc3QpIHtcbiAgICAgICAgcC5wcmV2ID0gcDtcbiAgICAgICAgcC5uZXh0ID0gcDtcblxuICAgIH0gZWxzZSB7XG4gICAgICAgIHAubmV4dCA9IGxhc3QubmV4dDtcbiAgICAgICAgcC5wcmV2ID0gbGFzdDtcbiAgICAgICAgbGFzdC5uZXh0LnByZXYgPSBwO1xuICAgICAgICBsYXN0Lm5leHQgPSBwO1xuICAgIH1cbiAgICByZXR1cm4gcDtcbn1cblxuZnVuY3Rpb24gcmVtb3ZlTm9kZShwKSB7XG4gICAgcC5uZXh0LnByZXYgPSBwLnByZXY7XG4gICAgcC5wcmV2Lm5leHQgPSBwLm5leHQ7XG5cbiAgICBpZiAocC5wcmV2WikgcC5wcmV2Wi5uZXh0WiA9IHAubmV4dFo7XG4gICAgaWYgKHAubmV4dFopIHAubmV4dFoucHJldlogPSBwLnByZXZaO1xufVxuXG5mdW5jdGlvbiBOb2RlKGksIHgsIHkpIHtcbiAgICAvLyB2ZXJ0aWNlIGluZGV4IGluIGNvb3JkaW5hdGVzIGFycmF5XG4gICAgdGhpcy5pID0gaTtcblxuICAgIC8vIHZlcnRleCBjb29yZGluYXRlc1xuICAgIHRoaXMueCA9IHg7XG4gICAgdGhpcy55ID0geTtcblxuICAgIC8vIHByZXZpb3VzIGFuZCBuZXh0IHZlcnRpY2Ugbm9kZXMgaW4gYSBwb2x5Z29uIHJpbmdcbiAgICB0aGlzLnByZXYgPSBudWxsO1xuICAgIHRoaXMubmV4dCA9IG51bGw7XG5cbiAgICAvLyB6LW9yZGVyIGN1cnZlIHZhbHVlXG4gICAgdGhpcy56ID0gbnVsbDtcblxuICAgIC8vIHByZXZpb3VzIGFuZCBuZXh0IG5vZGVzIGluIHotb3JkZXJcbiAgICB0aGlzLnByZXZaID0gbnVsbDtcbiAgICB0aGlzLm5leHRaID0gbnVsbDtcblxuICAgIC8vIGluZGljYXRlcyB3aGV0aGVyIHRoaXMgaXMgYSBzdGVpbmVyIHBvaW50XG4gICAgdGhpcy5zdGVpbmVyID0gZmFsc2U7XG59XG4iLCIndXNlIHN0cmljdCc7XG5cbi8vXG4vLyBXZSBzdG9yZSBvdXIgRUUgb2JqZWN0cyBpbiBhIHBsYWluIG9iamVjdCB3aG9zZSBwcm9wZXJ0aWVzIGFyZSBldmVudCBuYW1lcy5cbi8vIElmIGBPYmplY3QuY3JlYXRlKG51bGwpYCBpcyBub3Qgc3VwcG9ydGVkIHdlIHByZWZpeCB0aGUgZXZlbnQgbmFtZXMgd2l0aCBhXG4vLyBgfmAgdG8gbWFrZSBzdXJlIHRoYXQgdGhlIGJ1aWx0LWluIG9iamVjdCBwcm9wZXJ0aWVzIGFyZSBub3Qgb3ZlcnJpZGRlbiBvclxuLy8gdXNlZCBhcyBhbiBhdHRhY2sgdmVjdG9yLlxuLy8gV2UgYWxzbyBhc3N1bWUgdGhhdCBgT2JqZWN0LmNyZWF0ZShudWxsKWAgaXMgYXZhaWxhYmxlIHdoZW4gdGhlIGV2ZW50IG5hbWVcbi8vIGlzIGFuIEVTNiBTeW1ib2wuXG4vL1xudmFyIHByZWZpeCA9IHR5cGVvZiBPYmplY3QuY3JlYXRlICE9PSAnZnVuY3Rpb24nID8gJ34nIDogZmFsc2U7XG5cbi8qKlxuICogUmVwcmVzZW50YXRpb24gb2YgYSBzaW5nbGUgRXZlbnRFbWl0dGVyIGZ1bmN0aW9uLlxuICpcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZuIEV2ZW50IGhhbmRsZXIgdG8gYmUgY2FsbGVkLlxuICogQHBhcmFtIHtNaXhlZH0gY29udGV4dCBDb250ZXh0IGZvciBmdW5jdGlvbiBleGVjdXRpb24uXG4gKiBAcGFyYW0ge0Jvb2xlYW59IG9uY2UgT25seSBlbWl0IG9uY2VcbiAqIEBhcGkgcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBFRShmbiwgY29udGV4dCwgb25jZSkge1xuICB0aGlzLmZuID0gZm47XG4gIHRoaXMuY29udGV4dCA9IGNvbnRleHQ7XG4gIHRoaXMub25jZSA9IG9uY2UgfHwgZmFsc2U7XG59XG5cbi8qKlxuICogTWluaW1hbCBFdmVudEVtaXR0ZXIgaW50ZXJmYWNlIHRoYXQgaXMgbW9sZGVkIGFnYWluc3QgdGhlIE5vZGUuanNcbiAqIEV2ZW50RW1pdHRlciBpbnRlcmZhY2UuXG4gKlxuICogQGNvbnN0cnVjdG9yXG4gKiBAYXBpIHB1YmxpY1xuICovXG5mdW5jdGlvbiBFdmVudEVtaXR0ZXIoKSB7IC8qIE5vdGhpbmcgdG8gc2V0ICovIH1cblxuLyoqXG4gKiBIb2xkcyB0aGUgYXNzaWduZWQgRXZlbnRFbWl0dGVycyBieSBuYW1lLlxuICpcbiAqIEB0eXBlIHtPYmplY3R9XG4gKiBAcHJpdmF0ZVxuICovXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLl9ldmVudHMgPSB1bmRlZmluZWQ7XG5cbi8qKlxuICogUmV0dXJuIGEgbGlzdCBvZiBhc3NpZ25lZCBldmVudCBsaXN0ZW5lcnMuXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IGV2ZW50IFRoZSBldmVudHMgdGhhdCBzaG91bGQgYmUgbGlzdGVkLlxuICogQHBhcmFtIHtCb29sZWFufSBleGlzdHMgV2Ugb25seSBuZWVkIHRvIGtub3cgaWYgdGhlcmUgYXJlIGxpc3RlbmVycy5cbiAqIEByZXR1cm5zIHtBcnJheXxCb29sZWFufVxuICogQGFwaSBwdWJsaWNcbiAqL1xuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5saXN0ZW5lcnMgPSBmdW5jdGlvbiBsaXN0ZW5lcnMoZXZlbnQsIGV4aXN0cykge1xuICB2YXIgZXZ0ID0gcHJlZml4ID8gcHJlZml4ICsgZXZlbnQgOiBldmVudFxuICAgICwgYXZhaWxhYmxlID0gdGhpcy5fZXZlbnRzICYmIHRoaXMuX2V2ZW50c1tldnRdO1xuXG4gIGlmIChleGlzdHMpIHJldHVybiAhIWF2YWlsYWJsZTtcbiAgaWYgKCFhdmFpbGFibGUpIHJldHVybiBbXTtcbiAgaWYgKGF2YWlsYWJsZS5mbikgcmV0dXJuIFthdmFpbGFibGUuZm5dO1xuXG4gIGZvciAodmFyIGkgPSAwLCBsID0gYXZhaWxhYmxlLmxlbmd0aCwgZWUgPSBuZXcgQXJyYXkobCk7IGkgPCBsOyBpKyspIHtcbiAgICBlZVtpXSA9IGF2YWlsYWJsZVtpXS5mbjtcbiAgfVxuXG4gIHJldHVybiBlZTtcbn07XG5cbi8qKlxuICogRW1pdCBhbiBldmVudCB0byBhbGwgcmVnaXN0ZXJlZCBldmVudCBsaXN0ZW5lcnMuXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IGV2ZW50IFRoZSBuYW1lIG9mIHRoZSBldmVudC5cbiAqIEByZXR1cm5zIHtCb29sZWFufSBJbmRpY2F0aW9uIGlmIHdlJ3ZlIGVtaXR0ZWQgYW4gZXZlbnQuXG4gKiBAYXBpIHB1YmxpY1xuICovXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLmVtaXQgPSBmdW5jdGlvbiBlbWl0KGV2ZW50LCBhMSwgYTIsIGEzLCBhNCwgYTUpIHtcbiAgdmFyIGV2dCA9IHByZWZpeCA/IHByZWZpeCArIGV2ZW50IDogZXZlbnQ7XG5cbiAgaWYgKCF0aGlzLl9ldmVudHMgfHwgIXRoaXMuX2V2ZW50c1tldnRdKSByZXR1cm4gZmFsc2U7XG5cbiAgdmFyIGxpc3RlbmVycyA9IHRoaXMuX2V2ZW50c1tldnRdXG4gICAgLCBsZW4gPSBhcmd1bWVudHMubGVuZ3RoXG4gICAgLCBhcmdzXG4gICAgLCBpO1xuXG4gIGlmICgnZnVuY3Rpb24nID09PSB0eXBlb2YgbGlzdGVuZXJzLmZuKSB7XG4gICAgaWYgKGxpc3RlbmVycy5vbmNlKSB0aGlzLnJlbW92ZUxpc3RlbmVyKGV2ZW50LCBsaXN0ZW5lcnMuZm4sIHVuZGVmaW5lZCwgdHJ1ZSk7XG5cbiAgICBzd2l0Y2ggKGxlbikge1xuICAgICAgY2FzZSAxOiByZXR1cm4gbGlzdGVuZXJzLmZuLmNhbGwobGlzdGVuZXJzLmNvbnRleHQpLCB0cnVlO1xuICAgICAgY2FzZSAyOiByZXR1cm4gbGlzdGVuZXJzLmZuLmNhbGwobGlzdGVuZXJzLmNvbnRleHQsIGExKSwgdHJ1ZTtcbiAgICAgIGNhc2UgMzogcmV0dXJuIGxpc3RlbmVycy5mbi5jYWxsKGxpc3RlbmVycy5jb250ZXh0LCBhMSwgYTIpLCB0cnVlO1xuICAgICAgY2FzZSA0OiByZXR1cm4gbGlzdGVuZXJzLmZuLmNhbGwobGlzdGVuZXJzLmNvbnRleHQsIGExLCBhMiwgYTMpLCB0cnVlO1xuICAgICAgY2FzZSA1OiByZXR1cm4gbGlzdGVuZXJzLmZuLmNhbGwobGlzdGVuZXJzLmNvbnRleHQsIGExLCBhMiwgYTMsIGE0KSwgdHJ1ZTtcbiAgICAgIGNhc2UgNjogcmV0dXJuIGxpc3RlbmVycy5mbi5jYWxsKGxpc3RlbmVycy5jb250ZXh0LCBhMSwgYTIsIGEzLCBhNCwgYTUpLCB0cnVlO1xuICAgIH1cblxuICAgIGZvciAoaSA9IDEsIGFyZ3MgPSBuZXcgQXJyYXkobGVuIC0xKTsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICBhcmdzW2kgLSAxXSA9IGFyZ3VtZW50c1tpXTtcbiAgICB9XG5cbiAgICBsaXN0ZW5lcnMuZm4uYXBwbHkobGlzdGVuZXJzLmNvbnRleHQsIGFyZ3MpO1xuICB9IGVsc2Uge1xuICAgIHZhciBsZW5ndGggPSBsaXN0ZW5lcnMubGVuZ3RoXG4gICAgICAsIGo7XG5cbiAgICBmb3IgKGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmIChsaXN0ZW5lcnNbaV0ub25jZSkgdGhpcy5yZW1vdmVMaXN0ZW5lcihldmVudCwgbGlzdGVuZXJzW2ldLmZuLCB1bmRlZmluZWQsIHRydWUpO1xuXG4gICAgICBzd2l0Y2ggKGxlbikge1xuICAgICAgICBjYXNlIDE6IGxpc3RlbmVyc1tpXS5mbi5jYWxsKGxpc3RlbmVyc1tpXS5jb250ZXh0KTsgYnJlYWs7XG4gICAgICAgIGNhc2UgMjogbGlzdGVuZXJzW2ldLmZuLmNhbGwobGlzdGVuZXJzW2ldLmNvbnRleHQsIGExKTsgYnJlYWs7XG4gICAgICAgIGNhc2UgMzogbGlzdGVuZXJzW2ldLmZuLmNhbGwobGlzdGVuZXJzW2ldLmNvbnRleHQsIGExLCBhMik7IGJyZWFrO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIGlmICghYXJncykgZm9yIChqID0gMSwgYXJncyA9IG5ldyBBcnJheShsZW4gLTEpOyBqIDwgbGVuOyBqKyspIHtcbiAgICAgICAgICAgIGFyZ3NbaiAtIDFdID0gYXJndW1lbnRzW2pdO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGxpc3RlbmVyc1tpXS5mbi5hcHBseShsaXN0ZW5lcnNbaV0uY29udGV4dCwgYXJncyk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHRydWU7XG59O1xuXG4vKipcbiAqIFJlZ2lzdGVyIGEgbmV3IEV2ZW50TGlzdGVuZXIgZm9yIHRoZSBnaXZlbiBldmVudC5cbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gZXZlbnQgTmFtZSBvZiB0aGUgZXZlbnQuXG4gKiBAcGFyYW0ge0Z1bmN0b259IGZuIENhbGxiYWNrIGZ1bmN0aW9uLlxuICogQHBhcmFtIHtNaXhlZH0gY29udGV4dCBUaGUgY29udGV4dCBvZiB0aGUgZnVuY3Rpb24uXG4gKiBAYXBpIHB1YmxpY1xuICovXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLm9uID0gZnVuY3Rpb24gb24oZXZlbnQsIGZuLCBjb250ZXh0KSB7XG4gIHZhciBsaXN0ZW5lciA9IG5ldyBFRShmbiwgY29udGV4dCB8fCB0aGlzKVxuICAgICwgZXZ0ID0gcHJlZml4ID8gcHJlZml4ICsgZXZlbnQgOiBldmVudDtcblxuICBpZiAoIXRoaXMuX2V2ZW50cykgdGhpcy5fZXZlbnRzID0gcHJlZml4ID8ge30gOiBPYmplY3QuY3JlYXRlKG51bGwpO1xuICBpZiAoIXRoaXMuX2V2ZW50c1tldnRdKSB0aGlzLl9ldmVudHNbZXZ0XSA9IGxpc3RlbmVyO1xuICBlbHNlIHtcbiAgICBpZiAoIXRoaXMuX2V2ZW50c1tldnRdLmZuKSB0aGlzLl9ldmVudHNbZXZ0XS5wdXNoKGxpc3RlbmVyKTtcbiAgICBlbHNlIHRoaXMuX2V2ZW50c1tldnRdID0gW1xuICAgICAgdGhpcy5fZXZlbnRzW2V2dF0sIGxpc3RlbmVyXG4gICAgXTtcbiAgfVxuXG4gIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBBZGQgYW4gRXZlbnRMaXN0ZW5lciB0aGF0J3Mgb25seSBjYWxsZWQgb25jZS5cbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gZXZlbnQgTmFtZSBvZiB0aGUgZXZlbnQuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmbiBDYWxsYmFjayBmdW5jdGlvbi5cbiAqIEBwYXJhbSB7TWl4ZWR9IGNvbnRleHQgVGhlIGNvbnRleHQgb2YgdGhlIGZ1bmN0aW9uLlxuICogQGFwaSBwdWJsaWNcbiAqL1xuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5vbmNlID0gZnVuY3Rpb24gb25jZShldmVudCwgZm4sIGNvbnRleHQpIHtcbiAgdmFyIGxpc3RlbmVyID0gbmV3IEVFKGZuLCBjb250ZXh0IHx8IHRoaXMsIHRydWUpXG4gICAgLCBldnQgPSBwcmVmaXggPyBwcmVmaXggKyBldmVudCA6IGV2ZW50O1xuXG4gIGlmICghdGhpcy5fZXZlbnRzKSB0aGlzLl9ldmVudHMgPSBwcmVmaXggPyB7fSA6IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gIGlmICghdGhpcy5fZXZlbnRzW2V2dF0pIHRoaXMuX2V2ZW50c1tldnRdID0gbGlzdGVuZXI7XG4gIGVsc2Uge1xuICAgIGlmICghdGhpcy5fZXZlbnRzW2V2dF0uZm4pIHRoaXMuX2V2ZW50c1tldnRdLnB1c2gobGlzdGVuZXIpO1xuICAgIGVsc2UgdGhpcy5fZXZlbnRzW2V2dF0gPSBbXG4gICAgICB0aGlzLl9ldmVudHNbZXZ0XSwgbGlzdGVuZXJcbiAgICBdO1xuICB9XG5cbiAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIFJlbW92ZSBldmVudCBsaXN0ZW5lcnMuXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IGV2ZW50IFRoZSBldmVudCB3ZSB3YW50IHRvIHJlbW92ZS5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZuIFRoZSBsaXN0ZW5lciB0aGF0IHdlIG5lZWQgdG8gZmluZC5cbiAqIEBwYXJhbSB7TWl4ZWR9IGNvbnRleHQgT25seSByZW1vdmUgbGlzdGVuZXJzIG1hdGNoaW5nIHRoaXMgY29udGV4dC5cbiAqIEBwYXJhbSB7Qm9vbGVhbn0gb25jZSBPbmx5IHJlbW92ZSBvbmNlIGxpc3RlbmVycy5cbiAqIEBhcGkgcHVibGljXG4gKi9cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUucmVtb3ZlTGlzdGVuZXIgPSBmdW5jdGlvbiByZW1vdmVMaXN0ZW5lcihldmVudCwgZm4sIGNvbnRleHQsIG9uY2UpIHtcbiAgdmFyIGV2dCA9IHByZWZpeCA/IHByZWZpeCArIGV2ZW50IDogZXZlbnQ7XG5cbiAgaWYgKCF0aGlzLl9ldmVudHMgfHwgIXRoaXMuX2V2ZW50c1tldnRdKSByZXR1cm4gdGhpcztcblxuICB2YXIgbGlzdGVuZXJzID0gdGhpcy5fZXZlbnRzW2V2dF1cbiAgICAsIGV2ZW50cyA9IFtdO1xuXG4gIGlmIChmbikge1xuICAgIGlmIChsaXN0ZW5lcnMuZm4pIHtcbiAgICAgIGlmIChcbiAgICAgICAgICAgbGlzdGVuZXJzLmZuICE9PSBmblxuICAgICAgICB8fCAob25jZSAmJiAhbGlzdGVuZXJzLm9uY2UpXG4gICAgICAgIHx8IChjb250ZXh0ICYmIGxpc3RlbmVycy5jb250ZXh0ICE9PSBjb250ZXh0KVxuICAgICAgKSB7XG4gICAgICAgIGV2ZW50cy5wdXNoKGxpc3RlbmVycyk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGZvciAodmFyIGkgPSAwLCBsZW5ndGggPSBsaXN0ZW5lcnMubGVuZ3RoOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgIGxpc3RlbmVyc1tpXS5mbiAhPT0gZm5cbiAgICAgICAgICB8fCAob25jZSAmJiAhbGlzdGVuZXJzW2ldLm9uY2UpXG4gICAgICAgICAgfHwgKGNvbnRleHQgJiYgbGlzdGVuZXJzW2ldLmNvbnRleHQgIT09IGNvbnRleHQpXG4gICAgICAgICkge1xuICAgICAgICAgIGV2ZW50cy5wdXNoKGxpc3RlbmVyc1tpXSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvL1xuICAvLyBSZXNldCB0aGUgYXJyYXksIG9yIHJlbW92ZSBpdCBjb21wbGV0ZWx5IGlmIHdlIGhhdmUgbm8gbW9yZSBsaXN0ZW5lcnMuXG4gIC8vXG4gIGlmIChldmVudHMubGVuZ3RoKSB7XG4gICAgdGhpcy5fZXZlbnRzW2V2dF0gPSBldmVudHMubGVuZ3RoID09PSAxID8gZXZlbnRzWzBdIDogZXZlbnRzO1xuICB9IGVsc2Uge1xuICAgIGRlbGV0ZSB0aGlzLl9ldmVudHNbZXZ0XTtcbiAgfVxuXG4gIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBSZW1vdmUgYWxsIGxpc3RlbmVycyBvciBvbmx5IHRoZSBsaXN0ZW5lcnMgZm9yIHRoZSBzcGVjaWZpZWQgZXZlbnQuXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IGV2ZW50IFRoZSBldmVudCB3YW50IHRvIHJlbW92ZSBhbGwgbGlzdGVuZXJzIGZvci5cbiAqIEBhcGkgcHVibGljXG4gKi9cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUucmVtb3ZlQWxsTGlzdGVuZXJzID0gZnVuY3Rpb24gcmVtb3ZlQWxsTGlzdGVuZXJzKGV2ZW50KSB7XG4gIGlmICghdGhpcy5fZXZlbnRzKSByZXR1cm4gdGhpcztcblxuICBpZiAoZXZlbnQpIGRlbGV0ZSB0aGlzLl9ldmVudHNbcHJlZml4ID8gcHJlZml4ICsgZXZlbnQgOiBldmVudF07XG4gIGVsc2UgdGhpcy5fZXZlbnRzID0gcHJlZml4ID8ge30gOiBPYmplY3QuY3JlYXRlKG51bGwpO1xuXG4gIHJldHVybiB0aGlzO1xufTtcblxuLy9cbi8vIEFsaWFzIG1ldGhvZHMgbmFtZXMgYmVjYXVzZSBwZW9wbGUgcm9sbCBsaWtlIHRoYXQuXG4vL1xuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5vZmYgPSBFdmVudEVtaXR0ZXIucHJvdG90eXBlLnJlbW92ZUxpc3RlbmVyO1xuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5hZGRMaXN0ZW5lciA9IEV2ZW50RW1pdHRlci5wcm90b3R5cGUub247XG5cbi8vXG4vLyBUaGlzIGZ1bmN0aW9uIGRvZXNuJ3QgYXBwbHkgYW55bW9yZS5cbi8vXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLnNldE1heExpc3RlbmVycyA9IGZ1bmN0aW9uIHNldE1heExpc3RlbmVycygpIHtcbiAgcmV0dXJuIHRoaXM7XG59O1xuXG4vL1xuLy8gRXhwb3NlIHRoZSBwcmVmaXguXG4vL1xuRXZlbnRFbWl0dGVyLnByZWZpeGVkID0gcHJlZml4O1xuXG4vL1xuLy8gRXhwb3NlIHRoZSBtb2R1bGUuXG4vL1xuaWYgKCd1bmRlZmluZWQnICE9PSB0eXBlb2YgbW9kdWxlKSB7XG4gIG1vZHVsZS5leHBvcnRzID0gRXZlbnRFbWl0dGVyO1xufVxuIiwiLyogZXNsaW50LWRpc2FibGUgbm8tdW51c2VkLXZhcnMgKi9cbid1c2Ugc3RyaWN0JztcbnZhciBoYXNPd25Qcm9wZXJ0eSA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7XG52YXIgcHJvcElzRW51bWVyYWJsZSA9IE9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGU7XG5cbmZ1bmN0aW9uIHRvT2JqZWN0KHZhbCkge1xuXHRpZiAodmFsID09PSBudWxsIHx8IHZhbCA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0dGhyb3cgbmV3IFR5cGVFcnJvcignT2JqZWN0LmFzc2lnbiBjYW5ub3QgYmUgY2FsbGVkIHdpdGggbnVsbCBvciB1bmRlZmluZWQnKTtcblx0fVxuXG5cdHJldHVybiBPYmplY3QodmFsKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQsIHNvdXJjZSkge1xuXHR2YXIgZnJvbTtcblx0dmFyIHRvID0gdG9PYmplY3QodGFyZ2V0KTtcblx0dmFyIHN5bWJvbHM7XG5cblx0Zm9yICh2YXIgcyA9IDE7IHMgPCBhcmd1bWVudHMubGVuZ3RoOyBzKyspIHtcblx0XHRmcm9tID0gT2JqZWN0KGFyZ3VtZW50c1tzXSk7XG5cblx0XHRmb3IgKHZhciBrZXkgaW4gZnJvbSkge1xuXHRcdFx0aWYgKGhhc093blByb3BlcnR5LmNhbGwoZnJvbSwga2V5KSkge1xuXHRcdFx0XHR0b1trZXldID0gZnJvbVtrZXldO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7XG5cdFx0XHRzeW1ib2xzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhmcm9tKTtcblx0XHRcdGZvciAodmFyIGkgPSAwOyBpIDwgc3ltYm9scy5sZW5ndGg7IGkrKykge1xuXHRcdFx0XHRpZiAocHJvcElzRW51bWVyYWJsZS5jYWxsKGZyb20sIHN5bWJvbHNbaV0pKSB7XG5cdFx0XHRcdFx0dG9bc3ltYm9sc1tpXV0gPSBmcm9tW3N5bWJvbHNbaV1dO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIHRvO1xufTtcbiIsIi8qIVxuICogYXN5bmNcbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS9jYW9sYW4vYXN5bmNcbiAqXG4gKiBDb3B5cmlnaHQgMjAxMC0yMDE0IENhb2xhbiBNY01haG9uXG4gKiBSZWxlYXNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2VcbiAqL1xuLypqc2hpbnQgb25ldmFyOiBmYWxzZSwgaW5kZW50OjQgKi9cbi8qZ2xvYmFsIHNldEltbWVkaWF0ZTogZmFsc2UsIHNldFRpbWVvdXQ6IGZhbHNlLCBjb25zb2xlOiBmYWxzZSAqL1xuKGZ1bmN0aW9uICgpIHtcblxuICAgIHZhciBhc3luYyA9IHt9O1xuXG4gICAgLy8gZ2xvYmFsIG9uIHRoZSBzZXJ2ZXIsIHdpbmRvdyBpbiB0aGUgYnJvd3NlclxuICAgIHZhciByb290LCBwcmV2aW91c19hc3luYztcblxuICAgIHJvb3QgPSB0aGlzO1xuICAgIGlmIChyb290ICE9IG51bGwpIHtcbiAgICAgIHByZXZpb3VzX2FzeW5jID0gcm9vdC5hc3luYztcbiAgICB9XG5cbiAgICBhc3luYy5ub0NvbmZsaWN0ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByb290LmFzeW5jID0gcHJldmlvdXNfYXN5bmM7XG4gICAgICAgIHJldHVybiBhc3luYztcbiAgICB9O1xuXG4gICAgZnVuY3Rpb24gb25seV9vbmNlKGZuKSB7XG4gICAgICAgIHZhciBjYWxsZWQgPSBmYWxzZTtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgaWYgKGNhbGxlZCkgdGhyb3cgbmV3IEVycm9yKFwiQ2FsbGJhY2sgd2FzIGFscmVhZHkgY2FsbGVkLlwiKTtcbiAgICAgICAgICAgIGNhbGxlZCA9IHRydWU7XG4gICAgICAgICAgICBmbi5hcHBseShyb290LCBhcmd1bWVudHMpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8vLyBjcm9zcy1icm93c2VyIGNvbXBhdGlibGl0eSBmdW5jdGlvbnMgLy8vL1xuXG4gICAgdmFyIF90b1N0cmluZyA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7XG5cbiAgICB2YXIgX2lzQXJyYXkgPSBBcnJheS5pc0FycmF5IHx8IGZ1bmN0aW9uIChvYmopIHtcbiAgICAgICAgcmV0dXJuIF90b1N0cmluZy5jYWxsKG9iaikgPT09ICdbb2JqZWN0IEFycmF5XSc7XG4gICAgfTtcblxuICAgIHZhciBfZWFjaCA9IGZ1bmN0aW9uIChhcnIsIGl0ZXJhdG9yKSB7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXJyLmxlbmd0aDsgaSArPSAxKSB7XG4gICAgICAgICAgICBpdGVyYXRvcihhcnJbaV0sIGksIGFycik7XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgdmFyIF9tYXAgPSBmdW5jdGlvbiAoYXJyLCBpdGVyYXRvcikge1xuICAgICAgICBpZiAoYXJyLm1hcCkge1xuICAgICAgICAgICAgcmV0dXJuIGFyci5tYXAoaXRlcmF0b3IpO1xuICAgICAgICB9XG4gICAgICAgIHZhciByZXN1bHRzID0gW107XG4gICAgICAgIF9lYWNoKGFyciwgZnVuY3Rpb24gKHgsIGksIGEpIHtcbiAgICAgICAgICAgIHJlc3VsdHMucHVzaChpdGVyYXRvcih4LCBpLCBhKSk7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gcmVzdWx0cztcbiAgICB9O1xuXG4gICAgdmFyIF9yZWR1Y2UgPSBmdW5jdGlvbiAoYXJyLCBpdGVyYXRvciwgbWVtbykge1xuICAgICAgICBpZiAoYXJyLnJlZHVjZSkge1xuICAgICAgICAgICAgcmV0dXJuIGFyci5yZWR1Y2UoaXRlcmF0b3IsIG1lbW8pO1xuICAgICAgICB9XG4gICAgICAgIF9lYWNoKGFyciwgZnVuY3Rpb24gKHgsIGksIGEpIHtcbiAgICAgICAgICAgIG1lbW8gPSBpdGVyYXRvcihtZW1vLCB4LCBpLCBhKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBtZW1vO1xuICAgIH07XG5cbiAgICB2YXIgX2tleXMgPSBmdW5jdGlvbiAob2JqKSB7XG4gICAgICAgIGlmIChPYmplY3Qua2V5cykge1xuICAgICAgICAgICAgcmV0dXJuIE9iamVjdC5rZXlzKG9iaik7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIGtleXMgPSBbXTtcbiAgICAgICAgZm9yICh2YXIgayBpbiBvYmopIHtcbiAgICAgICAgICAgIGlmIChvYmouaGFzT3duUHJvcGVydHkoaykpIHtcbiAgICAgICAgICAgICAgICBrZXlzLnB1c2goayk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGtleXM7XG4gICAgfTtcblxuICAgIC8vLy8gZXhwb3J0ZWQgYXN5bmMgbW9kdWxlIGZ1bmN0aW9ucyAvLy8vXG5cbiAgICAvLy8vIG5leHRUaWNrIGltcGxlbWVudGF0aW9uIHdpdGggYnJvd3Nlci1jb21wYXRpYmxlIGZhbGxiYWNrIC8vLy9cbiAgICBpZiAodHlwZW9mIHByb2Nlc3MgPT09ICd1bmRlZmluZWQnIHx8ICEocHJvY2Vzcy5uZXh0VGljaykpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBzZXRJbW1lZGlhdGUgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIGFzeW5jLm5leHRUaWNrID0gZnVuY3Rpb24gKGZuKSB7XG4gICAgICAgICAgICAgICAgLy8gbm90IGEgZGlyZWN0IGFsaWFzIGZvciBJRTEwIGNvbXBhdGliaWxpdHlcbiAgICAgICAgICAgICAgICBzZXRJbW1lZGlhdGUoZm4pO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGFzeW5jLnNldEltbWVkaWF0ZSA9IGFzeW5jLm5leHRUaWNrO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgYXN5bmMubmV4dFRpY2sgPSBmdW5jdGlvbiAoZm4pIHtcbiAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KGZuLCAwKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBhc3luYy5zZXRJbW1lZGlhdGUgPSBhc3luYy5uZXh0VGljaztcbiAgICAgICAgfVxuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgYXN5bmMubmV4dFRpY2sgPSBwcm9jZXNzLm5leHRUaWNrO1xuICAgICAgICBpZiAodHlwZW9mIHNldEltbWVkaWF0ZSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgIGFzeW5jLnNldEltbWVkaWF0ZSA9IGZ1bmN0aW9uIChmbikge1xuICAgICAgICAgICAgICAvLyBub3QgYSBkaXJlY3QgYWxpYXMgZm9yIElFMTAgY29tcGF0aWJpbGl0eVxuICAgICAgICAgICAgICBzZXRJbW1lZGlhdGUoZm4pO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGFzeW5jLnNldEltbWVkaWF0ZSA9IGFzeW5jLm5leHRUaWNrO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgYXN5bmMuZWFjaCA9IGZ1bmN0aW9uIChhcnIsIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICBjYWxsYmFjayA9IGNhbGxiYWNrIHx8IGZ1bmN0aW9uICgpIHt9O1xuICAgICAgICBpZiAoIWFyci5sZW5ndGgpIHtcbiAgICAgICAgICAgIHJldHVybiBjYWxsYmFjaygpO1xuICAgICAgICB9XG4gICAgICAgIHZhciBjb21wbGV0ZWQgPSAwO1xuICAgICAgICBfZWFjaChhcnIsIGZ1bmN0aW9uICh4KSB7XG4gICAgICAgICAgICBpdGVyYXRvcih4LCBvbmx5X29uY2UoZG9uZSkgKTtcbiAgICAgICAgfSk7XG4gICAgICAgIGZ1bmN0aW9uIGRvbmUoZXJyKSB7XG4gICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgICBjYWxsYmFjayA9IGZ1bmN0aW9uICgpIHt9O1xuICAgICAgICAgIH1cbiAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgY29tcGxldGVkICs9IDE7XG4gICAgICAgICAgICAgIGlmIChjb21wbGV0ZWQgPj0gYXJyLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgY2FsbGJhY2soKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH07XG4gICAgYXN5bmMuZm9yRWFjaCA9IGFzeW5jLmVhY2g7XG5cbiAgICBhc3luYy5lYWNoU2VyaWVzID0gZnVuY3Rpb24gKGFyciwgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgIGNhbGxiYWNrID0gY2FsbGJhY2sgfHwgZnVuY3Rpb24gKCkge307XG4gICAgICAgIGlmICghYXJyLmxlbmd0aCkge1xuICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKCk7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIGNvbXBsZXRlZCA9IDA7XG4gICAgICAgIHZhciBpdGVyYXRlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgaXRlcmF0b3IoYXJyW2NvbXBsZXRlZF0sIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrID0gZnVuY3Rpb24gKCkge307XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBjb21wbGV0ZWQgKz0gMTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNvbXBsZXRlZCA+PSBhcnIubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgaXRlcmF0ZSgpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH07XG4gICAgICAgIGl0ZXJhdGUoKTtcbiAgICB9O1xuICAgIGFzeW5jLmZvckVhY2hTZXJpZXMgPSBhc3luYy5lYWNoU2VyaWVzO1xuXG4gICAgYXN5bmMuZWFjaExpbWl0ID0gZnVuY3Rpb24gKGFyciwgbGltaXQsIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICB2YXIgZm4gPSBfZWFjaExpbWl0KGxpbWl0KTtcbiAgICAgICAgZm4uYXBwbHkobnVsbCwgW2FyciwgaXRlcmF0b3IsIGNhbGxiYWNrXSk7XG4gICAgfTtcbiAgICBhc3luYy5mb3JFYWNoTGltaXQgPSBhc3luYy5lYWNoTGltaXQ7XG5cbiAgICB2YXIgX2VhY2hMaW1pdCA9IGZ1bmN0aW9uIChsaW1pdCkge1xuXG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAoYXJyLCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIGNhbGxiYWNrID0gY2FsbGJhY2sgfHwgZnVuY3Rpb24gKCkge307XG4gICAgICAgICAgICBpZiAoIWFyci5sZW5ndGggfHwgbGltaXQgPD0gMCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBjYWxsYmFjaygpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdmFyIGNvbXBsZXRlZCA9IDA7XG4gICAgICAgICAgICB2YXIgc3RhcnRlZCA9IDA7XG4gICAgICAgICAgICB2YXIgcnVubmluZyA9IDA7XG5cbiAgICAgICAgICAgIChmdW5jdGlvbiByZXBsZW5pc2ggKCkge1xuICAgICAgICAgICAgICAgIGlmIChjb21wbGV0ZWQgPj0gYXJyLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gY2FsbGJhY2soKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB3aGlsZSAocnVubmluZyA8IGxpbWl0ICYmIHN0YXJ0ZWQgPCBhcnIubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgIHN0YXJ0ZWQgKz0gMTtcbiAgICAgICAgICAgICAgICAgICAgcnVubmluZyArPSAxO1xuICAgICAgICAgICAgICAgICAgICBpdGVyYXRvcihhcnJbc3RhcnRlZCAtIDFdLCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayA9IGZ1bmN0aW9uICgpIHt9O1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcGxldGVkICs9IDE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcnVubmluZyAtPSAxO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb21wbGV0ZWQgPj0gYXJyLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVwbGVuaXNoKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KSgpO1xuICAgICAgICB9O1xuICAgIH07XG5cblxuICAgIHZhciBkb1BhcmFsbGVsID0gZnVuY3Rpb24gKGZuKSB7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7XG4gICAgICAgICAgICByZXR1cm4gZm4uYXBwbHkobnVsbCwgW2FzeW5jLmVhY2hdLmNvbmNhdChhcmdzKSk7XG4gICAgICAgIH07XG4gICAgfTtcbiAgICB2YXIgZG9QYXJhbGxlbExpbWl0ID0gZnVuY3Rpb24obGltaXQsIGZuKSB7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7XG4gICAgICAgICAgICByZXR1cm4gZm4uYXBwbHkobnVsbCwgW19lYWNoTGltaXQobGltaXQpXS5jb25jYXQoYXJncykpO1xuICAgICAgICB9O1xuICAgIH07XG4gICAgdmFyIGRvU2VyaWVzID0gZnVuY3Rpb24gKGZuKSB7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7XG4gICAgICAgICAgICByZXR1cm4gZm4uYXBwbHkobnVsbCwgW2FzeW5jLmVhY2hTZXJpZXNdLmNvbmNhdChhcmdzKSk7XG4gICAgICAgIH07XG4gICAgfTtcblxuXG4gICAgdmFyIF9hc3luY01hcCA9IGZ1bmN0aW9uIChlYWNoZm4sIGFyciwgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgIGFyciA9IF9tYXAoYXJyLCBmdW5jdGlvbiAoeCwgaSkge1xuICAgICAgICAgICAgcmV0dXJuIHtpbmRleDogaSwgdmFsdWU6IHh9O1xuICAgICAgICB9KTtcbiAgICAgICAgaWYgKCFjYWxsYmFjaykge1xuICAgICAgICAgICAgZWFjaGZuKGFyciwgZnVuY3Rpb24gKHgsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICAgICAgaXRlcmF0b3IoeC52YWx1ZSwgZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB2YXIgcmVzdWx0cyA9IFtdO1xuICAgICAgICAgICAgZWFjaGZuKGFyciwgZnVuY3Rpb24gKHgsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICAgICAgaXRlcmF0b3IoeC52YWx1ZSwgZnVuY3Rpb24gKGVyciwgdikge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHRzW3guaW5kZXhdID0gdjtcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0sIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnIsIHJlc3VsdHMpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIGFzeW5jLm1hcCA9IGRvUGFyYWxsZWwoX2FzeW5jTWFwKTtcbiAgICBhc3luYy5tYXBTZXJpZXMgPSBkb1NlcmllcyhfYXN5bmNNYXApO1xuICAgIGFzeW5jLm1hcExpbWl0ID0gZnVuY3Rpb24gKGFyciwgbGltaXQsIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICByZXR1cm4gX21hcExpbWl0KGxpbWl0KShhcnIsIGl0ZXJhdG9yLCBjYWxsYmFjayk7XG4gICAgfTtcblxuICAgIHZhciBfbWFwTGltaXQgPSBmdW5jdGlvbihsaW1pdCkge1xuICAgICAgICByZXR1cm4gZG9QYXJhbGxlbExpbWl0KGxpbWl0LCBfYXN5bmNNYXApO1xuICAgIH07XG5cbiAgICAvLyByZWR1Y2Ugb25seSBoYXMgYSBzZXJpZXMgdmVyc2lvbiwgYXMgZG9pbmcgcmVkdWNlIGluIHBhcmFsbGVsIHdvbid0XG4gICAgLy8gd29yayBpbiBtYW55IHNpdHVhdGlvbnMuXG4gICAgYXN5bmMucmVkdWNlID0gZnVuY3Rpb24gKGFyciwgbWVtbywgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgIGFzeW5jLmVhY2hTZXJpZXMoYXJyLCBmdW5jdGlvbiAoeCwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIGl0ZXJhdG9yKG1lbW8sIHgsIGZ1bmN0aW9uIChlcnIsIHYpIHtcbiAgICAgICAgICAgICAgICBtZW1vID0gdjtcbiAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgIGNhbGxiYWNrKGVyciwgbWVtbyk7XG4gICAgICAgIH0pO1xuICAgIH07XG4gICAgLy8gaW5qZWN0IGFsaWFzXG4gICAgYXN5bmMuaW5qZWN0ID0gYXN5bmMucmVkdWNlO1xuICAgIC8vIGZvbGRsIGFsaWFzXG4gICAgYXN5bmMuZm9sZGwgPSBhc3luYy5yZWR1Y2U7XG5cbiAgICBhc3luYy5yZWR1Y2VSaWdodCA9IGZ1bmN0aW9uIChhcnIsIG1lbW8sIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICB2YXIgcmV2ZXJzZWQgPSBfbWFwKGFyciwgZnVuY3Rpb24gKHgpIHtcbiAgICAgICAgICAgIHJldHVybiB4O1xuICAgICAgICB9KS5yZXZlcnNlKCk7XG4gICAgICAgIGFzeW5jLnJlZHVjZShyZXZlcnNlZCwgbWVtbywgaXRlcmF0b3IsIGNhbGxiYWNrKTtcbiAgICB9O1xuICAgIC8vIGZvbGRyIGFsaWFzXG4gICAgYXN5bmMuZm9sZHIgPSBhc3luYy5yZWR1Y2VSaWdodDtcblxuICAgIHZhciBfZmlsdGVyID0gZnVuY3Rpb24gKGVhY2hmbiwgYXJyLCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgdmFyIHJlc3VsdHMgPSBbXTtcbiAgICAgICAgYXJyID0gX21hcChhcnIsIGZ1bmN0aW9uICh4LCBpKSB7XG4gICAgICAgICAgICByZXR1cm4ge2luZGV4OiBpLCB2YWx1ZTogeH07XG4gICAgICAgIH0pO1xuICAgICAgICBlYWNoZm4oYXJyLCBmdW5jdGlvbiAoeCwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIGl0ZXJhdG9yKHgudmFsdWUsIGZ1bmN0aW9uICh2KSB7XG4gICAgICAgICAgICAgICAgaWYgKHYpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0cy5wdXNoKHgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgIGNhbGxiYWNrKF9tYXAocmVzdWx0cy5zb3J0KGZ1bmN0aW9uIChhLCBiKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGEuaW5kZXggLSBiLmluZGV4O1xuICAgICAgICAgICAgfSksIGZ1bmN0aW9uICh4KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHgudmFsdWU7XG4gICAgICAgICAgICB9KSk7XG4gICAgICAgIH0pO1xuICAgIH07XG4gICAgYXN5bmMuZmlsdGVyID0gZG9QYXJhbGxlbChfZmlsdGVyKTtcbiAgICBhc3luYy5maWx0ZXJTZXJpZXMgPSBkb1NlcmllcyhfZmlsdGVyKTtcbiAgICAvLyBzZWxlY3QgYWxpYXNcbiAgICBhc3luYy5zZWxlY3QgPSBhc3luYy5maWx0ZXI7XG4gICAgYXN5bmMuc2VsZWN0U2VyaWVzID0gYXN5bmMuZmlsdGVyU2VyaWVzO1xuXG4gICAgdmFyIF9yZWplY3QgPSBmdW5jdGlvbiAoZWFjaGZuLCBhcnIsIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICB2YXIgcmVzdWx0cyA9IFtdO1xuICAgICAgICBhcnIgPSBfbWFwKGFyciwgZnVuY3Rpb24gKHgsIGkpIHtcbiAgICAgICAgICAgIHJldHVybiB7aW5kZXg6IGksIHZhbHVlOiB4fTtcbiAgICAgICAgfSk7XG4gICAgICAgIGVhY2hmbihhcnIsIGZ1bmN0aW9uICh4LCBjYWxsYmFjaykge1xuICAgICAgICAgICAgaXRlcmF0b3IoeC52YWx1ZSwgZnVuY3Rpb24gKHYpIHtcbiAgICAgICAgICAgICAgICBpZiAoIXYpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0cy5wdXNoKHgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgIGNhbGxiYWNrKF9tYXAocmVzdWx0cy5zb3J0KGZ1bmN0aW9uIChhLCBiKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGEuaW5kZXggLSBiLmluZGV4O1xuICAgICAgICAgICAgfSksIGZ1bmN0aW9uICh4KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHgudmFsdWU7XG4gICAgICAgICAgICB9KSk7XG4gICAgICAgIH0pO1xuICAgIH07XG4gICAgYXN5bmMucmVqZWN0ID0gZG9QYXJhbGxlbChfcmVqZWN0KTtcbiAgICBhc3luYy5yZWplY3RTZXJpZXMgPSBkb1NlcmllcyhfcmVqZWN0KTtcblxuICAgIHZhciBfZGV0ZWN0ID0gZnVuY3Rpb24gKGVhY2hmbiwgYXJyLCBpdGVyYXRvciwgbWFpbl9jYWxsYmFjaykge1xuICAgICAgICBlYWNoZm4oYXJyLCBmdW5jdGlvbiAoeCwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIGl0ZXJhdG9yKHgsIGZ1bmN0aW9uIChyZXN1bHQpIHtcbiAgICAgICAgICAgICAgICBpZiAocmVzdWx0KSB7XG4gICAgICAgICAgICAgICAgICAgIG1haW5fY2FsbGJhY2soeCk7XG4gICAgICAgICAgICAgICAgICAgIG1haW5fY2FsbGJhY2sgPSBmdW5jdGlvbiAoKSB7fTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgIG1haW5fY2FsbGJhY2soKTtcbiAgICAgICAgfSk7XG4gICAgfTtcbiAgICBhc3luYy5kZXRlY3QgPSBkb1BhcmFsbGVsKF9kZXRlY3QpO1xuICAgIGFzeW5jLmRldGVjdFNlcmllcyA9IGRvU2VyaWVzKF9kZXRlY3QpO1xuXG4gICAgYXN5bmMuc29tZSA9IGZ1bmN0aW9uIChhcnIsIGl0ZXJhdG9yLCBtYWluX2NhbGxiYWNrKSB7XG4gICAgICAgIGFzeW5jLmVhY2goYXJyLCBmdW5jdGlvbiAoeCwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIGl0ZXJhdG9yKHgsIGZ1bmN0aW9uICh2KSB7XG4gICAgICAgICAgICAgICAgaWYgKHYpIHtcbiAgICAgICAgICAgICAgICAgICAgbWFpbl9jYWxsYmFjayh0cnVlKTtcbiAgICAgICAgICAgICAgICAgICAgbWFpbl9jYWxsYmFjayA9IGZ1bmN0aW9uICgpIHt9O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgIG1haW5fY2FsbGJhY2soZmFsc2UpO1xuICAgICAgICB9KTtcbiAgICB9O1xuICAgIC8vIGFueSBhbGlhc1xuICAgIGFzeW5jLmFueSA9IGFzeW5jLnNvbWU7XG5cbiAgICBhc3luYy5ldmVyeSA9IGZ1bmN0aW9uIChhcnIsIGl0ZXJhdG9yLCBtYWluX2NhbGxiYWNrKSB7XG4gICAgICAgIGFzeW5jLmVhY2goYXJyLCBmdW5jdGlvbiAoeCwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIGl0ZXJhdG9yKHgsIGZ1bmN0aW9uICh2KSB7XG4gICAgICAgICAgICAgICAgaWYgKCF2KSB7XG4gICAgICAgICAgICAgICAgICAgIG1haW5fY2FsbGJhY2soZmFsc2UpO1xuICAgICAgICAgICAgICAgICAgICBtYWluX2NhbGxiYWNrID0gZnVuY3Rpb24gKCkge307XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhbGxiYWNrKCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSwgZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgbWFpbl9jYWxsYmFjayh0cnVlKTtcbiAgICAgICAgfSk7XG4gICAgfTtcbiAgICAvLyBhbGwgYWxpYXNcbiAgICBhc3luYy5hbGwgPSBhc3luYy5ldmVyeTtcblxuICAgIGFzeW5jLnNvcnRCeSA9IGZ1bmN0aW9uIChhcnIsIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICBhc3luYy5tYXAoYXJyLCBmdW5jdGlvbiAoeCwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIGl0ZXJhdG9yKHgsIGZ1bmN0aW9uIChlcnIsIGNyaXRlcmlhKSB7XG4gICAgICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2sobnVsbCwge3ZhbHVlOiB4LCBjcml0ZXJpYTogY3JpdGVyaWF9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSwgZnVuY3Rpb24gKGVyciwgcmVzdWx0cykge1xuICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAgIHJldHVybiBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgdmFyIGZuID0gZnVuY3Rpb24gKGxlZnQsIHJpZ2h0KSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBhID0gbGVmdC5jcml0ZXJpYSwgYiA9IHJpZ2h0LmNyaXRlcmlhO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYSA8IGIgPyAtMSA6IGEgPiBiID8gMSA6IDA7XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICBjYWxsYmFjayhudWxsLCBfbWFwKHJlc3VsdHMuc29ydChmbiksIGZ1bmN0aW9uICh4KSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB4LnZhbHVlO1xuICAgICAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfTtcblxuICAgIGFzeW5jLmF1dG8gPSBmdW5jdGlvbiAodGFza3MsIGNhbGxiYWNrKSB7XG4gICAgICAgIGNhbGxiYWNrID0gY2FsbGJhY2sgfHwgZnVuY3Rpb24gKCkge307XG4gICAgICAgIHZhciBrZXlzID0gX2tleXModGFza3MpO1xuICAgICAgICB2YXIgcmVtYWluaW5nVGFza3MgPSBrZXlzLmxlbmd0aFxuICAgICAgICBpZiAoIXJlbWFpbmluZ1Rhc2tzKSB7XG4gICAgICAgICAgICByZXR1cm4gY2FsbGJhY2soKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciByZXN1bHRzID0ge307XG5cbiAgICAgICAgdmFyIGxpc3RlbmVycyA9IFtdO1xuICAgICAgICB2YXIgYWRkTGlzdGVuZXIgPSBmdW5jdGlvbiAoZm4pIHtcbiAgICAgICAgICAgIGxpc3RlbmVycy51bnNoaWZ0KGZuKTtcbiAgICAgICAgfTtcbiAgICAgICAgdmFyIHJlbW92ZUxpc3RlbmVyID0gZnVuY3Rpb24gKGZuKSB7XG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxpc3RlbmVycy5sZW5ndGg7IGkgKz0gMSkge1xuICAgICAgICAgICAgICAgIGlmIChsaXN0ZW5lcnNbaV0gPT09IGZuKSB7XG4gICAgICAgICAgICAgICAgICAgIGxpc3RlbmVycy5zcGxpY2UoaSwgMSk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIHZhciB0YXNrQ29tcGxldGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZW1haW5pbmdUYXNrcy0tXG4gICAgICAgICAgICBfZWFjaChsaXN0ZW5lcnMuc2xpY2UoMCksIGZ1bmN0aW9uIChmbikge1xuICAgICAgICAgICAgICAgIGZuKCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfTtcblxuICAgICAgICBhZGRMaXN0ZW5lcihmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBpZiAoIXJlbWFpbmluZ1Rhc2tzKSB7XG4gICAgICAgICAgICAgICAgdmFyIHRoZUNhbGxiYWNrID0gY2FsbGJhY2s7XG4gICAgICAgICAgICAgICAgLy8gcHJldmVudCBmaW5hbCBjYWxsYmFjayBmcm9tIGNhbGxpbmcgaXRzZWxmIGlmIGl0IGVycm9yc1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrID0gZnVuY3Rpb24gKCkge307XG5cbiAgICAgICAgICAgICAgICB0aGVDYWxsYmFjayhudWxsLCByZXN1bHRzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgX2VhY2goa2V5cywgZnVuY3Rpb24gKGspIHtcbiAgICAgICAgICAgIHZhciB0YXNrID0gX2lzQXJyYXkodGFza3Nba10pID8gdGFza3Nba106IFt0YXNrc1trXV07XG4gICAgICAgICAgICB2YXIgdGFza0NhbGxiYWNrID0gZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgICAgIHZhciBhcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKTtcbiAgICAgICAgICAgICAgICBpZiAoYXJncy5sZW5ndGggPD0gMSkge1xuICAgICAgICAgICAgICAgICAgICBhcmdzID0gYXJnc1swXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAgICAgICB2YXIgc2FmZVJlc3VsdHMgPSB7fTtcbiAgICAgICAgICAgICAgICAgICAgX2VhY2goX2tleXMocmVzdWx0cyksIGZ1bmN0aW9uKHJrZXkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNhZmVSZXN1bHRzW3JrZXldID0gcmVzdWx0c1tya2V5XTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIHNhZmVSZXN1bHRzW2tdID0gYXJncztcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soZXJyLCBzYWZlUmVzdWx0cyk7XG4gICAgICAgICAgICAgICAgICAgIC8vIHN0b3Agc3Vic2VxdWVudCBlcnJvcnMgaGl0dGluZyBjYWxsYmFjayBtdWx0aXBsZSB0aW1lc1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayA9IGZ1bmN0aW9uICgpIHt9O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0c1trXSA9IGFyZ3M7XG4gICAgICAgICAgICAgICAgICAgIGFzeW5jLnNldEltbWVkaWF0ZSh0YXNrQ29tcGxldGUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICB2YXIgcmVxdWlyZXMgPSB0YXNrLnNsaWNlKDAsIE1hdGguYWJzKHRhc2subGVuZ3RoIC0gMSkpIHx8IFtdO1xuICAgICAgICAgICAgdmFyIHJlYWR5ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBfcmVkdWNlKHJlcXVpcmVzLCBmdW5jdGlvbiAoYSwgeCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gKGEgJiYgcmVzdWx0cy5oYXNPd25Qcm9wZXJ0eSh4KSk7XG4gICAgICAgICAgICAgICAgfSwgdHJ1ZSkgJiYgIXJlc3VsdHMuaGFzT3duUHJvcGVydHkoayk7XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgaWYgKHJlYWR5KCkpIHtcbiAgICAgICAgICAgICAgICB0YXNrW3Rhc2subGVuZ3RoIC0gMV0odGFza0NhbGxiYWNrLCByZXN1bHRzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHZhciBsaXN0ZW5lciA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlYWR5KCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlbW92ZUxpc3RlbmVyKGxpc3RlbmVyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRhc2tbdGFzay5sZW5ndGggLSAxXSh0YXNrQ2FsbGJhY2ssIHJlc3VsdHMpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICBhZGRMaXN0ZW5lcihsaXN0ZW5lcik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH07XG5cbiAgICBhc3luYy5yZXRyeSA9IGZ1bmN0aW9uKHRpbWVzLCB0YXNrLCBjYWxsYmFjaykge1xuICAgICAgICB2YXIgREVGQVVMVF9USU1FUyA9IDU7XG4gICAgICAgIHZhciBhdHRlbXB0cyA9IFtdO1xuICAgICAgICAvLyBVc2UgZGVmYXVsdHMgaWYgdGltZXMgbm90IHBhc3NlZFxuICAgICAgICBpZiAodHlwZW9mIHRpbWVzID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICBjYWxsYmFjayA9IHRhc2s7XG4gICAgICAgICAgICB0YXNrID0gdGltZXM7XG4gICAgICAgICAgICB0aW1lcyA9IERFRkFVTFRfVElNRVM7XG4gICAgICAgIH1cbiAgICAgICAgLy8gTWFrZSBzdXJlIHRpbWVzIGlzIGEgbnVtYmVyXG4gICAgICAgIHRpbWVzID0gcGFyc2VJbnQodGltZXMsIDEwKSB8fCBERUZBVUxUX1RJTUVTO1xuICAgICAgICB2YXIgd3JhcHBlZFRhc2sgPSBmdW5jdGlvbih3cmFwcGVkQ2FsbGJhY2ssIHdyYXBwZWRSZXN1bHRzKSB7XG4gICAgICAgICAgICB2YXIgcmV0cnlBdHRlbXB0ID0gZnVuY3Rpb24odGFzaywgZmluYWxBdHRlbXB0KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKHNlcmllc0NhbGxiYWNrKSB7XG4gICAgICAgICAgICAgICAgICAgIHRhc2soZnVuY3Rpb24oZXJyLCByZXN1bHQpe1xuICAgICAgICAgICAgICAgICAgICAgICAgc2VyaWVzQ2FsbGJhY2soIWVyciB8fCBmaW5hbEF0dGVtcHQsIHtlcnI6IGVyciwgcmVzdWx0OiByZXN1bHR9KTtcbiAgICAgICAgICAgICAgICAgICAgfSwgd3JhcHBlZFJlc3VsdHMpO1xuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgd2hpbGUgKHRpbWVzKSB7XG4gICAgICAgICAgICAgICAgYXR0ZW1wdHMucHVzaChyZXRyeUF0dGVtcHQodGFzaywgISh0aW1lcy09MSkpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGFzeW5jLnNlcmllcyhhdHRlbXB0cywgZnVuY3Rpb24oZG9uZSwgZGF0YSl7XG4gICAgICAgICAgICAgICAgZGF0YSA9IGRhdGFbZGF0YS5sZW5ndGggLSAxXTtcbiAgICAgICAgICAgICAgICAod3JhcHBlZENhbGxiYWNrIHx8IGNhbGxiYWNrKShkYXRhLmVyciwgZGF0YS5yZXN1bHQpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gSWYgYSBjYWxsYmFjayBpcyBwYXNzZWQsIHJ1biB0aGlzIGFzIGEgY29udHJvbGwgZmxvd1xuICAgICAgICByZXR1cm4gY2FsbGJhY2sgPyB3cmFwcGVkVGFzaygpIDogd3JhcHBlZFRhc2tcbiAgICB9O1xuXG4gICAgYXN5bmMud2F0ZXJmYWxsID0gZnVuY3Rpb24gKHRhc2tzLCBjYWxsYmFjaykge1xuICAgICAgICBjYWxsYmFjayA9IGNhbGxiYWNrIHx8IGZ1bmN0aW9uICgpIHt9O1xuICAgICAgICBpZiAoIV9pc0FycmF5KHRhc2tzKSkge1xuICAgICAgICAgIHZhciBlcnIgPSBuZXcgRXJyb3IoJ0ZpcnN0IGFyZ3VtZW50IHRvIHdhdGVyZmFsbCBtdXN0IGJlIGFuIGFycmF5IG9mIGZ1bmN0aW9ucycpO1xuICAgICAgICAgIHJldHVybiBjYWxsYmFjayhlcnIpO1xuICAgICAgICB9XG4gICAgICAgIGlmICghdGFza3MubGVuZ3RoKSB7XG4gICAgICAgICAgICByZXR1cm4gY2FsbGJhY2soKTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgd3JhcEl0ZXJhdG9yID0gZnVuY3Rpb24gKGl0ZXJhdG9yKSB7XG4gICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2suYXBwbHkobnVsbCwgYXJndW1lbnRzKTtcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2sgPSBmdW5jdGlvbiAoKSB7fTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBhcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKTtcbiAgICAgICAgICAgICAgICAgICAgdmFyIG5leHQgPSBpdGVyYXRvci5uZXh0KCk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChuZXh0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhcmdzLnB1c2god3JhcEl0ZXJhdG9yKG5leHQpKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3MucHVzaChjYWxsYmFjayk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgYXN5bmMuc2V0SW1tZWRpYXRlKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGl0ZXJhdG9yLmFwcGx5KG51bGwsIGFyZ3MpO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9O1xuICAgICAgICB9O1xuICAgICAgICB3cmFwSXRlcmF0b3IoYXN5bmMuaXRlcmF0b3IodGFza3MpKSgpO1xuICAgIH07XG5cbiAgICB2YXIgX3BhcmFsbGVsID0gZnVuY3Rpb24oZWFjaGZuLCB0YXNrcywgY2FsbGJhY2spIHtcbiAgICAgICAgY2FsbGJhY2sgPSBjYWxsYmFjayB8fCBmdW5jdGlvbiAoKSB7fTtcbiAgICAgICAgaWYgKF9pc0FycmF5KHRhc2tzKSkge1xuICAgICAgICAgICAgZWFjaGZuLm1hcCh0YXNrcywgZnVuY3Rpb24gKGZuLCBjYWxsYmFjaykge1xuICAgICAgICAgICAgICAgIGlmIChmbikge1xuICAgICAgICAgICAgICAgICAgICBmbihmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoYXJncy5sZW5ndGggPD0gMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3MgPSBhcmdzWzBdO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2suY2FsbChudWxsLCBlcnIsIGFyZ3MpO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LCBjYWxsYmFjayk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB2YXIgcmVzdWx0cyA9IHt9O1xuICAgICAgICAgICAgZWFjaGZuLmVhY2goX2tleXModGFza3MpLCBmdW5jdGlvbiAoaywgY2FsbGJhY2spIHtcbiAgICAgICAgICAgICAgICB0YXNrc1trXShmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBhcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGFyZ3MubGVuZ3RoIDw9IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3MgPSBhcmdzWzBdO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdHNba10gPSBhcmdzO1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSwgZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrKGVyciwgcmVzdWx0cyk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH07XG5cbiAgICBhc3luYy5wYXJhbGxlbCA9IGZ1bmN0aW9uICh0YXNrcywgY2FsbGJhY2spIHtcbiAgICAgICAgX3BhcmFsbGVsKHsgbWFwOiBhc3luYy5tYXAsIGVhY2g6IGFzeW5jLmVhY2ggfSwgdGFza3MsIGNhbGxiYWNrKTtcbiAgICB9O1xuXG4gICAgYXN5bmMucGFyYWxsZWxMaW1pdCA9IGZ1bmN0aW9uKHRhc2tzLCBsaW1pdCwgY2FsbGJhY2spIHtcbiAgICAgICAgX3BhcmFsbGVsKHsgbWFwOiBfbWFwTGltaXQobGltaXQpLCBlYWNoOiBfZWFjaExpbWl0KGxpbWl0KSB9LCB0YXNrcywgY2FsbGJhY2spO1xuICAgIH07XG5cbiAgICBhc3luYy5zZXJpZXMgPSBmdW5jdGlvbiAodGFza3MsIGNhbGxiYWNrKSB7XG4gICAgICAgIGNhbGxiYWNrID0gY2FsbGJhY2sgfHwgZnVuY3Rpb24gKCkge307XG4gICAgICAgIGlmIChfaXNBcnJheSh0YXNrcykpIHtcbiAgICAgICAgICAgIGFzeW5jLm1hcFNlcmllcyh0YXNrcywgZnVuY3Rpb24gKGZuLCBjYWxsYmFjaykge1xuICAgICAgICAgICAgICAgIGlmIChmbikge1xuICAgICAgICAgICAgICAgICAgICBmbihmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoYXJncy5sZW5ndGggPD0gMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3MgPSBhcmdzWzBdO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2suY2FsbChudWxsLCBlcnIsIGFyZ3MpO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LCBjYWxsYmFjayk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB2YXIgcmVzdWx0cyA9IHt9O1xuICAgICAgICAgICAgYXN5bmMuZWFjaFNlcmllcyhfa2V5cyh0YXNrcyksIGZ1bmN0aW9uIChrLCBjYWxsYmFjaykge1xuICAgICAgICAgICAgICAgIHRhc2tzW2tdKGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGFyZ3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsIDEpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoYXJncy5sZW5ndGggPD0gMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgYXJncyA9IGFyZ3NbMF07XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0c1trXSA9IGFyZ3M7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9LCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2soZXJyLCByZXN1bHRzKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIGFzeW5jLml0ZXJhdG9yID0gZnVuY3Rpb24gKHRhc2tzKSB7XG4gICAgICAgIHZhciBtYWtlQ2FsbGJhY2sgPSBmdW5jdGlvbiAoaW5kZXgpIHtcbiAgICAgICAgICAgIHZhciBmbiA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBpZiAodGFza3MubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgIHRhc2tzW2luZGV4XS5hcHBseShudWxsLCBhcmd1bWVudHMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gZm4ubmV4dCgpO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGZuLm5leHQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIChpbmRleCA8IHRhc2tzLmxlbmd0aCAtIDEpID8gbWFrZUNhbGxiYWNrKGluZGV4ICsgMSk6IG51bGw7XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgcmV0dXJuIGZuO1xuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gbWFrZUNhbGxiYWNrKDApO1xuICAgIH07XG5cbiAgICBhc3luYy5hcHBseSA9IGZ1bmN0aW9uIChmbikge1xuICAgICAgICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMSk7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gZm4uYXBwbHkoXG4gICAgICAgICAgICAgICAgbnVsbCwgYXJncy5jb25jYXQoQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKSlcbiAgICAgICAgICAgICk7XG4gICAgICAgIH07XG4gICAgfTtcblxuICAgIHZhciBfY29uY2F0ID0gZnVuY3Rpb24gKGVhY2hmbiwgYXJyLCBmbiwgY2FsbGJhY2spIHtcbiAgICAgICAgdmFyIHIgPSBbXTtcbiAgICAgICAgZWFjaGZuKGFyciwgZnVuY3Rpb24gKHgsIGNiKSB7XG4gICAgICAgICAgICBmbih4LCBmdW5jdGlvbiAoZXJyLCB5KSB7XG4gICAgICAgICAgICAgICAgciA9IHIuY29uY2F0KHkgfHwgW10pO1xuICAgICAgICAgICAgICAgIGNiKGVycik7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSwgZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgY2FsbGJhY2soZXJyLCByKTtcbiAgICAgICAgfSk7XG4gICAgfTtcbiAgICBhc3luYy5jb25jYXQgPSBkb1BhcmFsbGVsKF9jb25jYXQpO1xuICAgIGFzeW5jLmNvbmNhdFNlcmllcyA9IGRvU2VyaWVzKF9jb25jYXQpO1xuXG4gICAgYXN5bmMud2hpbHN0ID0gZnVuY3Rpb24gKHRlc3QsIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICBpZiAodGVzdCgpKSB7XG4gICAgICAgICAgICBpdGVyYXRvcihmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYXN5bmMud2hpbHN0KHRlc3QsIGl0ZXJhdG9yLCBjYWxsYmFjayk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGNhbGxiYWNrKCk7XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgYXN5bmMuZG9XaGlsc3QgPSBmdW5jdGlvbiAoaXRlcmF0b3IsIHRlc3QsIGNhbGxiYWNrKSB7XG4gICAgICAgIGl0ZXJhdG9yKGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHZhciBhcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKTtcbiAgICAgICAgICAgIGlmICh0ZXN0LmFwcGx5KG51bGwsIGFyZ3MpKSB7XG4gICAgICAgICAgICAgICAgYXN5bmMuZG9XaGlsc3QoaXRlcmF0b3IsIHRlc3QsIGNhbGxiYWNrKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH07XG5cbiAgICBhc3luYy51bnRpbCA9IGZ1bmN0aW9uICh0ZXN0LCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgaWYgKCF0ZXN0KCkpIHtcbiAgICAgICAgICAgIGl0ZXJhdG9yKGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBhc3luYy51bnRpbCh0ZXN0LCBpdGVyYXRvciwgY2FsbGJhY2spO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIGFzeW5jLmRvVW50aWwgPSBmdW5jdGlvbiAoaXRlcmF0b3IsIHRlc3QsIGNhbGxiYWNrKSB7XG4gICAgICAgIGl0ZXJhdG9yKGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHZhciBhcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKTtcbiAgICAgICAgICAgIGlmICghdGVzdC5hcHBseShudWxsLCBhcmdzKSkge1xuICAgICAgICAgICAgICAgIGFzeW5jLmRvVW50aWwoaXRlcmF0b3IsIHRlc3QsIGNhbGxiYWNrKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH07XG5cbiAgICBhc3luYy5xdWV1ZSA9IGZ1bmN0aW9uICh3b3JrZXIsIGNvbmN1cnJlbmN5KSB7XG4gICAgICAgIGlmIChjb25jdXJyZW5jeSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBjb25jdXJyZW5jeSA9IDE7XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gX2luc2VydChxLCBkYXRhLCBwb3MsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgaWYgKCFxLnN0YXJ0ZWQpe1xuICAgICAgICAgICAgcS5zdGFydGVkID0gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKCFfaXNBcnJheShkYXRhKSkge1xuICAgICAgICAgICAgICBkYXRhID0gW2RhdGFdO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZihkYXRhLmxlbmd0aCA9PSAwKSB7XG4gICAgICAgICAgICAgLy8gY2FsbCBkcmFpbiBpbW1lZGlhdGVseSBpZiB0aGVyZSBhcmUgbm8gdGFza3NcbiAgICAgICAgICAgICByZXR1cm4gYXN5bmMuc2V0SW1tZWRpYXRlKGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgICBpZiAocS5kcmFpbikge1xuICAgICAgICAgICAgICAgICAgICAgcS5kcmFpbigpO1xuICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIF9lYWNoKGRhdGEsIGZ1bmN0aW9uKHRhc2spIHtcbiAgICAgICAgICAgICAgdmFyIGl0ZW0gPSB7XG4gICAgICAgICAgICAgICAgICBkYXRhOiB0YXNrLFxuICAgICAgICAgICAgICAgICAgY2FsbGJhY2s6IHR5cGVvZiBjYWxsYmFjayA9PT0gJ2Z1bmN0aW9uJyA/IGNhbGxiYWNrIDogbnVsbFxuICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgIGlmIChwb3MpIHtcbiAgICAgICAgICAgICAgICBxLnRhc2tzLnVuc2hpZnQoaXRlbSk7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcS50YXNrcy5wdXNoKGl0ZW0pO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgaWYgKHEuc2F0dXJhdGVkICYmIHEudGFza3MubGVuZ3RoID09PSBxLmNvbmN1cnJlbmN5KSB7XG4gICAgICAgICAgICAgICAgICBxLnNhdHVyYXRlZCgpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGFzeW5jLnNldEltbWVkaWF0ZShxLnByb2Nlc3MpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIHdvcmtlcnMgPSAwO1xuICAgICAgICB2YXIgcSA9IHtcbiAgICAgICAgICAgIHRhc2tzOiBbXSxcbiAgICAgICAgICAgIGNvbmN1cnJlbmN5OiBjb25jdXJyZW5jeSxcbiAgICAgICAgICAgIHNhdHVyYXRlZDogbnVsbCxcbiAgICAgICAgICAgIGVtcHR5OiBudWxsLFxuICAgICAgICAgICAgZHJhaW46IG51bGwsXG4gICAgICAgICAgICBzdGFydGVkOiBmYWxzZSxcbiAgICAgICAgICAgIHBhdXNlZDogZmFsc2UsXG4gICAgICAgICAgICBwdXNoOiBmdW5jdGlvbiAoZGF0YSwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgICAgX2luc2VydChxLCBkYXRhLCBmYWxzZSwgY2FsbGJhY2spO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGtpbGw6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgcS5kcmFpbiA9IG51bGw7XG4gICAgICAgICAgICAgIHEudGFza3MgPSBbXTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB1bnNoaWZ0OiBmdW5jdGlvbiAoZGF0YSwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgICAgX2luc2VydChxLCBkYXRhLCB0cnVlLCBjYWxsYmFjayk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcHJvY2VzczogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGlmICghcS5wYXVzZWQgJiYgd29ya2VycyA8IHEuY29uY3VycmVuY3kgJiYgcS50YXNrcy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHRhc2sgPSBxLnRhc2tzLnNoaWZ0KCk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChxLmVtcHR5ICYmIHEudGFza3MubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBxLmVtcHR5KCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgd29ya2VycyArPSAxO1xuICAgICAgICAgICAgICAgICAgICB2YXIgbmV4dCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHdvcmtlcnMgLT0gMTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0YXNrLmNhbGxiYWNrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFzay5jYWxsYmFjay5hcHBseSh0YXNrLCBhcmd1bWVudHMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHEuZHJhaW4gJiYgcS50YXNrcy5sZW5ndGggKyB3b3JrZXJzID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcS5kcmFpbigpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgcS5wcm9jZXNzKCk7XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIHZhciBjYiA9IG9ubHlfb25jZShuZXh0KTtcbiAgICAgICAgICAgICAgICAgICAgd29ya2VyKHRhc2suZGF0YSwgY2IpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBsZW5ndGg6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcS50YXNrcy5sZW5ndGg7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcnVubmluZzogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB3b3JrZXJzO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGlkbGU6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBxLnRhc2tzLmxlbmd0aCArIHdvcmtlcnMgPT09IDA7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcGF1c2U6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBpZiAocS5wYXVzZWQgPT09IHRydWUpIHsgcmV0dXJuOyB9XG4gICAgICAgICAgICAgICAgcS5wYXVzZWQgPSB0cnVlO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHJlc3VtZTogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGlmIChxLnBhdXNlZCA9PT0gZmFsc2UpIHsgcmV0dXJuOyB9XG4gICAgICAgICAgICAgICAgcS5wYXVzZWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAvLyBOZWVkIHRvIGNhbGwgcS5wcm9jZXNzIG9uY2UgcGVyIGNvbmN1cnJlbnRcbiAgICAgICAgICAgICAgICAvLyB3b3JrZXIgdG8gcHJlc2VydmUgZnVsbCBjb25jdXJyZW5jeSBhZnRlciBwYXVzZVxuICAgICAgICAgICAgICAgIGZvciAodmFyIHcgPSAxOyB3IDw9IHEuY29uY3VycmVuY3k7IHcrKykge1xuICAgICAgICAgICAgICAgICAgICBhc3luYy5zZXRJbW1lZGlhdGUocS5wcm9jZXNzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiBxO1xuICAgIH07XG5cbiAgICBhc3luYy5wcmlvcml0eVF1ZXVlID0gZnVuY3Rpb24gKHdvcmtlciwgY29uY3VycmVuY3kpIHtcblxuICAgICAgICBmdW5jdGlvbiBfY29tcGFyZVRhc2tzKGEsIGIpe1xuICAgICAgICAgIHJldHVybiBhLnByaW9yaXR5IC0gYi5wcmlvcml0eTtcbiAgICAgICAgfTtcblxuICAgICAgICBmdW5jdGlvbiBfYmluYXJ5U2VhcmNoKHNlcXVlbmNlLCBpdGVtLCBjb21wYXJlKSB7XG4gICAgICAgICAgdmFyIGJlZyA9IC0xLFxuICAgICAgICAgICAgICBlbmQgPSBzZXF1ZW5jZS5sZW5ndGggLSAxO1xuICAgICAgICAgIHdoaWxlIChiZWcgPCBlbmQpIHtcbiAgICAgICAgICAgIHZhciBtaWQgPSBiZWcgKyAoKGVuZCAtIGJlZyArIDEpID4+PiAxKTtcbiAgICAgICAgICAgIGlmIChjb21wYXJlKGl0ZW0sIHNlcXVlbmNlW21pZF0pID49IDApIHtcbiAgICAgICAgICAgICAgYmVnID0gbWlkO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgZW5kID0gbWlkIC0gMTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIGJlZztcbiAgICAgICAgfVxuXG4gICAgICAgIGZ1bmN0aW9uIF9pbnNlcnQocSwgZGF0YSwgcHJpb3JpdHksIGNhbGxiYWNrKSB7XG4gICAgICAgICAgaWYgKCFxLnN0YXJ0ZWQpe1xuICAgICAgICAgICAgcS5zdGFydGVkID0gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKCFfaXNBcnJheShkYXRhKSkge1xuICAgICAgICAgICAgICBkYXRhID0gW2RhdGFdO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZihkYXRhLmxlbmd0aCA9PSAwKSB7XG4gICAgICAgICAgICAgLy8gY2FsbCBkcmFpbiBpbW1lZGlhdGVseSBpZiB0aGVyZSBhcmUgbm8gdGFza3NcbiAgICAgICAgICAgICByZXR1cm4gYXN5bmMuc2V0SW1tZWRpYXRlKGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgICBpZiAocS5kcmFpbikge1xuICAgICAgICAgICAgICAgICAgICAgcS5kcmFpbigpO1xuICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIF9lYWNoKGRhdGEsIGZ1bmN0aW9uKHRhc2spIHtcbiAgICAgICAgICAgICAgdmFyIGl0ZW0gPSB7XG4gICAgICAgICAgICAgICAgICBkYXRhOiB0YXNrLFxuICAgICAgICAgICAgICAgICAgcHJpb3JpdHk6IHByaW9yaXR5LFxuICAgICAgICAgICAgICAgICAgY2FsbGJhY2s6IHR5cGVvZiBjYWxsYmFjayA9PT0gJ2Z1bmN0aW9uJyA/IGNhbGxiYWNrIDogbnVsbFxuICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgIHEudGFza3Muc3BsaWNlKF9iaW5hcnlTZWFyY2gocS50YXNrcywgaXRlbSwgX2NvbXBhcmVUYXNrcykgKyAxLCAwLCBpdGVtKTtcblxuICAgICAgICAgICAgICBpZiAocS5zYXR1cmF0ZWQgJiYgcS50YXNrcy5sZW5ndGggPT09IHEuY29uY3VycmVuY3kpIHtcbiAgICAgICAgICAgICAgICAgIHEuc2F0dXJhdGVkKCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgYXN5bmMuc2V0SW1tZWRpYXRlKHEucHJvY2Vzcyk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBTdGFydCB3aXRoIGEgbm9ybWFsIHF1ZXVlXG4gICAgICAgIHZhciBxID0gYXN5bmMucXVldWUod29ya2VyLCBjb25jdXJyZW5jeSk7XG5cbiAgICAgICAgLy8gT3ZlcnJpZGUgcHVzaCB0byBhY2NlcHQgc2Vjb25kIHBhcmFtZXRlciByZXByZXNlbnRpbmcgcHJpb3JpdHlcbiAgICAgICAgcS5wdXNoID0gZnVuY3Rpb24gKGRhdGEsIHByaW9yaXR5LCBjYWxsYmFjaykge1xuICAgICAgICAgIF9pbnNlcnQocSwgZGF0YSwgcHJpb3JpdHksIGNhbGxiYWNrKTtcbiAgICAgICAgfTtcblxuICAgICAgICAvLyBSZW1vdmUgdW5zaGlmdCBmdW5jdGlvblxuICAgICAgICBkZWxldGUgcS51bnNoaWZ0O1xuXG4gICAgICAgIHJldHVybiBxO1xuICAgIH07XG5cbiAgICBhc3luYy5jYXJnbyA9IGZ1bmN0aW9uICh3b3JrZXIsIHBheWxvYWQpIHtcbiAgICAgICAgdmFyIHdvcmtpbmcgICAgID0gZmFsc2UsXG4gICAgICAgICAgICB0YXNrcyAgICAgICA9IFtdO1xuXG4gICAgICAgIHZhciBjYXJnbyA9IHtcbiAgICAgICAgICAgIHRhc2tzOiB0YXNrcyxcbiAgICAgICAgICAgIHBheWxvYWQ6IHBheWxvYWQsXG4gICAgICAgICAgICBzYXR1cmF0ZWQ6IG51bGwsXG4gICAgICAgICAgICBlbXB0eTogbnVsbCxcbiAgICAgICAgICAgIGRyYWluOiBudWxsLFxuICAgICAgICAgICAgZHJhaW5lZDogdHJ1ZSxcbiAgICAgICAgICAgIHB1c2g6IGZ1bmN0aW9uIChkYXRhLCBjYWxsYmFjaykge1xuICAgICAgICAgICAgICAgIGlmICghX2lzQXJyYXkoZGF0YSkpIHtcbiAgICAgICAgICAgICAgICAgICAgZGF0YSA9IFtkYXRhXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgX2VhY2goZGF0YSwgZnVuY3Rpb24odGFzaykge1xuICAgICAgICAgICAgICAgICAgICB0YXNrcy5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGE6IHRhc2ssXG4gICAgICAgICAgICAgICAgICAgICAgICBjYWxsYmFjazogdHlwZW9mIGNhbGxiYWNrID09PSAnZnVuY3Rpb24nID8gY2FsbGJhY2sgOiBudWxsXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICBjYXJnby5kcmFpbmVkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIGlmIChjYXJnby5zYXR1cmF0ZWQgJiYgdGFza3MubGVuZ3RoID09PSBwYXlsb2FkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjYXJnby5zYXR1cmF0ZWQoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGFzeW5jLnNldEltbWVkaWF0ZShjYXJnby5wcm9jZXNzKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBwcm9jZXNzOiBmdW5jdGlvbiBwcm9jZXNzKCkge1xuICAgICAgICAgICAgICAgIGlmICh3b3JraW5nKSByZXR1cm47XG4gICAgICAgICAgICAgICAgaWYgKHRhc2tzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICBpZihjYXJnby5kcmFpbiAmJiAhY2FyZ28uZHJhaW5lZCkgY2FyZ28uZHJhaW4oKTtcbiAgICAgICAgICAgICAgICAgICAgY2FyZ28uZHJhaW5lZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB2YXIgdHMgPSB0eXBlb2YgcGF5bG9hZCA9PT0gJ251bWJlcidcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IHRhc2tzLnNwbGljZSgwLCBwYXlsb2FkKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogdGFza3Muc3BsaWNlKDAsIHRhc2tzLmxlbmd0aCk7XG5cbiAgICAgICAgICAgICAgICB2YXIgZHMgPSBfbWFwKHRzLCBmdW5jdGlvbiAodGFzaykge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGFzay5kYXRhO1xuICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgaWYoY2FyZ28uZW1wdHkpIGNhcmdvLmVtcHR5KCk7XG4gICAgICAgICAgICAgICAgd29ya2luZyA9IHRydWU7XG4gICAgICAgICAgICAgICAgd29ya2VyKGRzLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIHdvcmtpbmcgPSBmYWxzZTtcblxuICAgICAgICAgICAgICAgICAgICB2YXIgYXJncyA9IGFyZ3VtZW50cztcbiAgICAgICAgICAgICAgICAgICAgX2VhY2godHMsIGZ1bmN0aW9uIChkYXRhKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZGF0YS5jYWxsYmFjaykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEuY2FsbGJhY2suYXBwbHkobnVsbCwgYXJncyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgICAgIHByb2Nlc3MoKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBsZW5ndGg6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGFza3MubGVuZ3RoO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHJ1bm5pbmc6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gd29ya2luZztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIGNhcmdvO1xuICAgIH07XG5cbiAgICB2YXIgX2NvbnNvbGVfZm4gPSBmdW5jdGlvbiAobmFtZSkge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKGZuKSB7XG4gICAgICAgICAgICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMSk7XG4gICAgICAgICAgICBmbi5hcHBseShudWxsLCBhcmdzLmNvbmNhdChbZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgICAgIHZhciBhcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKTtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGNvbnNvbGUgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb25zb2xlLmVycm9yKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihlcnIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKGNvbnNvbGVbbmFtZV0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIF9lYWNoKGFyZ3MsIGZ1bmN0aW9uICh4KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZVtuYW1lXSh4KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfV0pKTtcbiAgICAgICAgfTtcbiAgICB9O1xuICAgIGFzeW5jLmxvZyA9IF9jb25zb2xlX2ZuKCdsb2cnKTtcbiAgICBhc3luYy5kaXIgPSBfY29uc29sZV9mbignZGlyJyk7XG4gICAgLyphc3luYy5pbmZvID0gX2NvbnNvbGVfZm4oJ2luZm8nKTtcbiAgICBhc3luYy53YXJuID0gX2NvbnNvbGVfZm4oJ3dhcm4nKTtcbiAgICBhc3luYy5lcnJvciA9IF9jb25zb2xlX2ZuKCdlcnJvcicpOyovXG5cbiAgICBhc3luYy5tZW1vaXplID0gZnVuY3Rpb24gKGZuLCBoYXNoZXIpIHtcbiAgICAgICAgdmFyIG1lbW8gPSB7fTtcbiAgICAgICAgdmFyIHF1ZXVlcyA9IHt9O1xuICAgICAgICBoYXNoZXIgPSBoYXNoZXIgfHwgZnVuY3Rpb24gKHgpIHtcbiAgICAgICAgICAgIHJldHVybiB4O1xuICAgICAgICB9O1xuICAgICAgICB2YXIgbWVtb2l6ZWQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7XG4gICAgICAgICAgICB2YXIgY2FsbGJhY2sgPSBhcmdzLnBvcCgpO1xuICAgICAgICAgICAgdmFyIGtleSA9IGhhc2hlci5hcHBseShudWxsLCBhcmdzKTtcbiAgICAgICAgICAgIGlmIChrZXkgaW4gbWVtbykge1xuICAgICAgICAgICAgICAgIGFzeW5jLm5leHRUaWNrKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2suYXBwbHkobnVsbCwgbWVtb1trZXldKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGtleSBpbiBxdWV1ZXMpIHtcbiAgICAgICAgICAgICAgICBxdWV1ZXNba2V5XS5wdXNoKGNhbGxiYWNrKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHF1ZXVlc1trZXldID0gW2NhbGxiYWNrXTtcbiAgICAgICAgICAgICAgICBmbi5hcHBseShudWxsLCBhcmdzLmNvbmNhdChbZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICBtZW1vW2tleV0gPSBhcmd1bWVudHM7XG4gICAgICAgICAgICAgICAgICAgIHZhciBxID0gcXVldWVzW2tleV07XG4gICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBxdWV1ZXNba2V5XTtcbiAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDAsIGwgPSBxLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICAgIHFbaV0uYXBwbHkobnVsbCwgYXJndW1lbnRzKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1dKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIG1lbW9pemVkLm1lbW8gPSBtZW1vO1xuICAgICAgICBtZW1vaXplZC51bm1lbW9pemVkID0gZm47XG4gICAgICAgIHJldHVybiBtZW1vaXplZDtcbiAgICB9O1xuXG4gICAgYXN5bmMudW5tZW1vaXplID0gZnVuY3Rpb24gKGZuKSB7XG4gICAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gKGZuLnVubWVtb2l6ZWQgfHwgZm4pLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7XG4gICAgICB9O1xuICAgIH07XG5cbiAgICBhc3luYy50aW1lcyA9IGZ1bmN0aW9uIChjb3VudCwgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgIHZhciBjb3VudGVyID0gW107XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY291bnQ7IGkrKykge1xuICAgICAgICAgICAgY291bnRlci5wdXNoKGkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBhc3luYy5tYXAoY291bnRlciwgaXRlcmF0b3IsIGNhbGxiYWNrKTtcbiAgICB9O1xuXG4gICAgYXN5bmMudGltZXNTZXJpZXMgPSBmdW5jdGlvbiAoY291bnQsIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICB2YXIgY291bnRlciA9IFtdO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNvdW50OyBpKyspIHtcbiAgICAgICAgICAgIGNvdW50ZXIucHVzaChpKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYXN5bmMubWFwU2VyaWVzKGNvdW50ZXIsIGl0ZXJhdG9yLCBjYWxsYmFjayk7XG4gICAgfTtcblxuICAgIGFzeW5jLnNlcSA9IGZ1bmN0aW9uICgvKiBmdW5jdGlvbnMuLi4gKi8pIHtcbiAgICAgICAgdmFyIGZucyA9IGFyZ3VtZW50cztcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHZhciB0aGF0ID0gdGhpcztcbiAgICAgICAgICAgIHZhciBhcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKTtcbiAgICAgICAgICAgIHZhciBjYWxsYmFjayA9IGFyZ3MucG9wKCk7XG4gICAgICAgICAgICBhc3luYy5yZWR1Y2UoZm5zLCBhcmdzLCBmdW5jdGlvbiAobmV3YXJncywgZm4sIGNiKSB7XG4gICAgICAgICAgICAgICAgZm4uYXBwbHkodGhhdCwgbmV3YXJncy5jb25jYXQoW2Z1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGVyciA9IGFyZ3VtZW50c1swXTtcbiAgICAgICAgICAgICAgICAgICAgdmFyIG5leHRhcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKTtcbiAgICAgICAgICAgICAgICAgICAgY2IoZXJyLCBuZXh0YXJncyk7XG4gICAgICAgICAgICAgICAgfV0pKVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGZ1bmN0aW9uIChlcnIsIHJlc3VsdHMpIHtcbiAgICAgICAgICAgICAgICBjYWxsYmFjay5hcHBseSh0aGF0LCBbZXJyXS5jb25jYXQocmVzdWx0cykpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH07XG4gICAgfTtcblxuICAgIGFzeW5jLmNvbXBvc2UgPSBmdW5jdGlvbiAoLyogZnVuY3Rpb25zLi4uICovKSB7XG4gICAgICByZXR1cm4gYXN5bmMuc2VxLmFwcGx5KG51bGwsIEFycmF5LnByb3RvdHlwZS5yZXZlcnNlLmNhbGwoYXJndW1lbnRzKSk7XG4gICAgfTtcblxuICAgIHZhciBfYXBwbHlFYWNoID0gZnVuY3Rpb24gKGVhY2hmbiwgZm5zIC8qYXJncy4uLiovKSB7XG4gICAgICAgIHZhciBnbyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHZhciB0aGF0ID0gdGhpcztcbiAgICAgICAgICAgIHZhciBhcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKTtcbiAgICAgICAgICAgIHZhciBjYWxsYmFjayA9IGFyZ3MucG9wKCk7XG4gICAgICAgICAgICByZXR1cm4gZWFjaGZuKGZucywgZnVuY3Rpb24gKGZuLCBjYikge1xuICAgICAgICAgICAgICAgIGZuLmFwcGx5KHRoYXQsIGFyZ3MuY29uY2F0KFtjYl0pKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjYWxsYmFjayk7XG4gICAgICAgIH07XG4gICAgICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID4gMikge1xuICAgICAgICAgICAgdmFyIGFyZ3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsIDIpO1xuICAgICAgICAgICAgcmV0dXJuIGdvLmFwcGx5KHRoaXMsIGFyZ3MpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIGdvO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBhc3luYy5hcHBseUVhY2ggPSBkb1BhcmFsbGVsKF9hcHBseUVhY2gpO1xuICAgIGFzeW5jLmFwcGx5RWFjaFNlcmllcyA9IGRvU2VyaWVzKF9hcHBseUVhY2gpO1xuXG4gICAgYXN5bmMuZm9yZXZlciA9IGZ1bmN0aW9uIChmbiwgY2FsbGJhY2spIHtcbiAgICAgICAgZnVuY3Rpb24gbmV4dChlcnIpIHtcbiAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICBpZiAoY2FsbGJhY2spIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRocm93IGVycjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZuKG5leHQpO1xuICAgICAgICB9XG4gICAgICAgIG5leHQoKTtcbiAgICB9O1xuXG4gICAgLy8gTm9kZS5qc1xuICAgIGlmICh0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJyAmJiBtb2R1bGUuZXhwb3J0cykge1xuICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IGFzeW5jO1xuICAgIH1cbiAgICAvLyBBTUQgLyBSZXF1aXJlSlNcbiAgICBlbHNlIGlmICh0eXBlb2YgZGVmaW5lICE9PSAndW5kZWZpbmVkJyAmJiBkZWZpbmUuYW1kKSB7XG4gICAgICAgIGRlZmluZShbXSwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIGFzeW5jO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgLy8gaW5jbHVkZWQgZGlyZWN0bHkgdmlhIDxzY3JpcHQ+IHRhZ1xuICAgIGVsc2Uge1xuICAgICAgICByb290LmFzeW5jID0gYXN5bmM7XG4gICAgfVxuXG59KCkpO1xuIiwidmFyIGFzeW5jICAgICAgID0gcmVxdWlyZSgnYXN5bmMnKSxcbiAgICB1cmxQYXJzZXIgICA9IHJlcXVpcmUoJ3VybCcpLFxuICAgIFJlc291cmNlICAgID0gcmVxdWlyZSgnLi9SZXNvdXJjZScpLFxuICAgIEV2ZW50RW1pdHRlciA9IHJlcXVpcmUoJ2V2ZW50ZW1pdHRlcjMnKTtcblxuLyoqXG4gKiBNYW5hZ2VzIHRoZSBzdGF0ZSBhbmQgbG9hZGluZyBvZiBtdWx0aXBsZSByZXNvdXJjZXMgdG8gbG9hZC5cbiAqXG4gKiBAY2xhc3NcbiAqIEBwYXJhbSBbYmFzZVVybD0nJ10ge3N0cmluZ30gVGhlIGJhc2UgdXJsIGZvciBhbGwgcmVzb3VyY2VzIGxvYWRlZCBieSB0aGlzIGxvYWRlci5cbiAqIEBwYXJhbSBbY29uY3VycmVuY3k9MTBdIHtudW1iZXJ9IFRoZSBudW1iZXIgb2YgcmVzb3VyY2VzIHRvIGxvYWQgY29uY3VycmVudGx5LlxuICovXG5mdW5jdGlvbiBMb2FkZXIoYmFzZVVybCwgY29uY3VycmVuY3kpIHtcbiAgICBFdmVudEVtaXR0ZXIuY2FsbCh0aGlzKTtcblxuICAgIGNvbmN1cnJlbmN5ID0gY29uY3VycmVuY3kgfHwgMTA7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYmFzZSB1cmwgZm9yIGFsbCByZXNvdXJjZXMgbG9hZGVkIGJ5IHRoaXMgbG9hZGVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7c3RyaW5nfVxuICAgICAqL1xuICAgIHRoaXMuYmFzZVVybCA9IGJhc2VVcmwgfHwgJyc7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgcHJvZ3Jlc3MgcGVyY2VudCBvZiB0aGUgbG9hZGVyIGdvaW5nIHRocm91Z2ggdGhlIHF1ZXVlLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMucHJvZ3Jlc3MgPSAwO1xuXG4gICAgLyoqXG4gICAgICogTG9hZGluZyBzdGF0ZSBvZiB0aGUgbG9hZGVyLCB0cnVlIGlmIGl0IGlzIGN1cnJlbnRseSBsb2FkaW5nIHJlc291cmNlcy5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICovXG4gICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgcGVyY2VudGFnZSBvZiB0b3RhbCBwcm9ncmVzcyB0aGF0IGEgc2luZ2xlIHJlc291cmNlIHJlcHJlc2VudHMuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy5fcHJvZ3Jlc3NDaHVuayA9IDA7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgbWlkZGxld2FyZSB0byBydW4gYmVmb3JlIGxvYWRpbmcgZWFjaCByZXNvdXJjZS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Z1bmN0aW9uW119XG4gICAgICovXG4gICAgdGhpcy5fYmVmb3JlTWlkZGxld2FyZSA9IFtdO1xuXG4gICAgLyoqXG4gICAgICogVGhlIG1pZGRsZXdhcmUgdG8gcnVuIGFmdGVyIGxvYWRpbmcgZWFjaCByZXNvdXJjZS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Z1bmN0aW9uW119XG4gICAgICovXG4gICAgdGhpcy5fYWZ0ZXJNaWRkbGV3YXJlID0gW107XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYF9sb2FkUmVzb3VyY2VgIGZ1bmN0aW9uIGJvdW5kIHdpdGggdGhpcyBvYmplY3QgY29udGV4dC5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQG1lbWJlciB7ZnVuY3Rpb259XG4gICAgICovXG4gICAgdGhpcy5fYm91bmRMb2FkUmVzb3VyY2UgPSB0aGlzLl9sb2FkUmVzb3VyY2UuYmluZCh0aGlzKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBgX29uTG9hZGAgZnVuY3Rpb24gYm91bmQgd2l0aCB0aGlzIG9iamVjdCBjb250ZXh0LlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAbWVtYmVyIHtmdW5jdGlvbn1cbiAgICAgKi9cbiAgICB0aGlzLl9ib3VuZE9uTG9hZCA9IHRoaXMuX29uTG9hZC5iaW5kKHRoaXMpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHJlc291cmNlIGJ1ZmZlciB0aGF0IGZpbGxzIHVudGlsIGBsb2FkYCBpcyBjYWxsZWQgdG8gc3RhcnQgbG9hZGluZyByZXNvdXJjZXMuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBtZW1iZXIge1Jlc291cmNlW119XG4gICAgICovXG4gICAgdGhpcy5fYnVmZmVyID0gW107XG5cbiAgICAvKipcbiAgICAgKiBVc2VkIHRvIHRyYWNrIGxvYWQgY29tcGxldGlvbi5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMuX251bVRvTG9hZCA9IDA7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgcmVzb3VyY2VzIHdhaXRpbmcgdG8gYmUgbG9hZGVkLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAbWVtYmVyIHtSZXNvdXJjZVtdfVxuICAgICAqL1xuICAgIHRoaXMuX3F1ZXVlID0gYXN5bmMucXVldWUodGhpcy5fYm91bmRMb2FkUmVzb3VyY2UsIGNvbmN1cnJlbmN5KTtcblxuICAgIC8qKlxuICAgICAqIEFsbCB0aGUgcmVzb3VyY2VzIGZvciB0aGlzIGxvYWRlciBrZXllZCBieSBuYW1lLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7b2JqZWN0PHN0cmluZywgUmVzb3VyY2U+fVxuICAgICAqL1xuICAgIHRoaXMucmVzb3VyY2VzID0ge307XG5cbiAgICAvKipcbiAgICAgKiBFbWl0dGVkIG9uY2UgcGVyIGxvYWRlZCBvciBlcnJvcmVkIHJlc291cmNlLlxuICAgICAqXG4gICAgICogQGV2ZW50IHByb2dyZXNzXG4gICAgICogQG1lbWJlcm9mIExvYWRlciNcbiAgICAgKi9cblxuICAgIC8qKlxuICAgICAqIEVtaXR0ZWQgb25jZSBwZXIgZXJyb3JlZCByZXNvdXJjZS5cbiAgICAgKlxuICAgICAqIEBldmVudCBlcnJvclxuICAgICAqIEBtZW1iZXJvZiBMb2FkZXIjXG4gICAgICovXG5cbiAgICAvKipcbiAgICAgKiBFbWl0dGVkIG9uY2UgcGVyIGxvYWRlZCByZXNvdXJjZS5cbiAgICAgKlxuICAgICAqIEBldmVudCBsb2FkXG4gICAgICogQG1lbWJlcm9mIExvYWRlciNcbiAgICAgKi9cblxuICAgIC8qKlxuICAgICAqIEVtaXR0ZWQgd2hlbiB0aGUgbG9hZGVyIGJlZ2lucyB0byBwcm9jZXNzIHRoZSBxdWV1ZS5cbiAgICAgKlxuICAgICAqIEBldmVudCBzdGFydFxuICAgICAqIEBtZW1iZXJvZiBMb2FkZXIjXG4gICAgICovXG5cbiAgICAvKipcbiAgICAgKiBFbWl0dGVkIHdoZW4gdGhlIHF1ZXVlZCByZXNvdXJjZXMgYWxsIGxvYWQuXG4gICAgICpcbiAgICAgKiBAZXZlbnQgY29tcGxldGVcbiAgICAgKiBAbWVtYmVyb2YgTG9hZGVyI1xuICAgICAqL1xufVxuXG5Mb2FkZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShFdmVudEVtaXR0ZXIucHJvdG90eXBlKTtcbkxvYWRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBMb2FkZXI7XG5tb2R1bGUuZXhwb3J0cyA9IExvYWRlcjtcblxuLyoqXG4gKiBBZGRzIGEgcmVzb3VyY2UgKG9yIG11bHRpcGxlIHJlc291cmNlcykgdG8gdGhlIGxvYWRlciBxdWV1ZS5cbiAqXG4gKiBUaGlzIGZ1bmN0aW9uIGNhbiB0YWtlIGEgd2lkZSB2YXJpZXR5IG9mIGRpZmZlcmVudCBwYXJhbWV0ZXJzLiBUaGUgb25seSB0aGluZyB0aGF0IGlzIGFsd2F5c1xuICogcmVxdWlyZWQgdGhlIHVybCB0byBsb2FkLiBBbGwgdGhlIGZvbGxvd2luZyB3aWxsIHdvcms6XG4gKlxuICogYGBganNcbiAqIGxvYWRlclxuICogICAgIC8vIG5vcm1hbCBwYXJhbSBzeW50YXhcbiAqICAgICAuYWRkKCdrZXknLCAnaHR0cDovLy4uLicsIGZ1bmN0aW9uICgpIHt9KVxuICogICAgIC5hZGQoJ2h0dHA6Ly8uLi4nLCBmdW5jdGlvbiAoKSB7fSlcbiAqICAgICAuYWRkKCdodHRwOi8vLi4uJylcbiAqXG4gKiAgICAgLy8gb2JqZWN0IHN5bnRheFxuICogICAgIC5hZGQoe1xuICogICAgICAgICBuYW1lOiAna2V5MicsXG4gKiAgICAgICAgIHVybDogJ2h0dHA6Ly8uLi4nXG4gKiAgICAgfSwgZnVuY3Rpb24gKCkge30pXG4gKiAgICAgLmFkZCh7XG4gKiAgICAgICAgIHVybDogJ2h0dHA6Ly8uLi4nXG4gKiAgICAgfSwgZnVuY3Rpb24gKCkge30pXG4gKiAgICAgLmFkZCh7XG4gKiAgICAgICAgIG5hbWU6ICdrZXkzJyxcbiAqICAgICAgICAgdXJsOiAnaHR0cDovLy4uLidcbiAqICAgICAgICAgb25Db21wbGV0ZTogZnVuY3Rpb24gKCkge31cbiAqICAgICB9KVxuICogICAgIC5hZGQoe1xuICogICAgICAgICB1cmw6ICdodHRwczovLy4uLicsXG4gKiAgICAgICAgIG9uQ29tcGxldGU6IGZ1bmN0aW9uICgpIHt9LFxuICogICAgICAgICBjcm9zc09yaWdpbjogdHJ1ZVxuICogICAgIH0pXG4gKlxuICogICAgIC8vIHlvdSBjYW4gYWxzbyBwYXNzIGFuIGFycmF5IG9mIG9iamVjdHMgb3IgdXJscyBvciBib3RoXG4gKiAgICAgLmFkZChbXG4gKiAgICAgICAgIHsgbmFtZTogJ2tleTQnLCB1cmw6ICdodHRwOi8vLi4uJywgb25Db21wbGV0ZTogZnVuY3Rpb24gKCkge30gfSxcbiAqICAgICAgICAgeyB1cmw6ICdodHRwOi8vLi4uJywgb25Db21wbGV0ZTogZnVuY3Rpb24gKCkge30gfSxcbiAqICAgICAgICAgJ2h0dHA6Ly8uLi4nXG4gKiAgICAgXSk7XG4gKiBgYGBcbiAqXG4gKiBAYWxpYXMgZW5xdWV1ZVxuICogQHBhcmFtIFtuYW1lXSB7c3RyaW5nfSBUaGUgbmFtZSBvZiB0aGUgcmVzb3VyY2UgdG8gbG9hZCwgaWYgbm90IHBhc3NlZCB0aGUgdXJsIGlzIHVzZWQuXG4gKiBAcGFyYW0gdXJsIHtzdHJpbmd9IFRoZSB1cmwgZm9yIHRoaXMgcmVzb3VyY2UsIHJlbGF0aXZlIHRvIHRoZSBiYXNlVXJsIG9mIHRoaXMgbG9hZGVyLlxuICogQHBhcmFtIFtvcHRpb25zXSB7b2JqZWN0fSBUaGUgb3B0aW9ucyBmb3IgdGhlIGxvYWQuXG4gKiBAcGFyYW0gW29wdGlvbnMuY3Jvc3NPcmlnaW5dIHtib29sZWFufSBJcyB0aGlzIHJlcXVlc3QgY3Jvc3Mtb3JpZ2luPyBEZWZhdWx0IGlzIHRvIGRldGVybWluZSBhdXRvbWF0aWNhbGx5LlxuICogQHBhcmFtIFtvcHRpb25zLmxvYWRUeXBlPVJlc291cmNlLkxPQURfVFlQRS5YSFJdIHtSZXNvdXJjZS5YSFJfTE9BRF9UWVBFfSBIb3cgc2hvdWxkIHRoaXMgcmVzb3VyY2UgYmUgbG9hZGVkP1xuICogQHBhcmFtIFtvcHRpb25zLnhoclR5cGU9UmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuREVGQVVMVF0ge1Jlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFfSBIb3cgc2hvdWxkIHRoZSBkYXRhIGJlaW5nXG4gKiAgICAgIGxvYWRlZCBiZSBpbnRlcnByZXRlZCB3aGVuIHVzaW5nIFhIUj9cbiAqIEBwYXJhbSBbY2FsbGJhY2tdIHtmdW5jdGlvbn0gRnVuY3Rpb24gdG8gY2FsbCB3aGVuIHRoaXMgc3BlY2lmaWMgcmVzb3VyY2UgY29tcGxldGVzIGxvYWRpbmcuXG4gKiBAcmV0dXJuIHtMb2FkZXJ9XG4gKi9cbkxvYWRlci5wcm90b3R5cGUuYWRkID0gTG9hZGVyLnByb3RvdHlwZS5lbnF1ZXVlID0gZnVuY3Rpb24gKG5hbWUsIHVybCwgb3B0aW9ucywgY2IpIHtcbiAgICAvLyBzcGVjaWFsIGNhc2Ugb2YgYW4gYXJyYXkgb2Ygb2JqZWN0cyBvciB1cmxzXG4gICAgaWYgKEFycmF5LmlzQXJyYXkobmFtZSkpIHtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBuYW1lLmxlbmd0aDsgKytpKSB7XG4gICAgICAgICAgICB0aGlzLmFkZChuYW1lW2ldKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIC8vIGlmIGFuIG9iamVjdCBpcyBwYXNzZWQgaW5zdGVhZCBvZiBwYXJhbXNcbiAgICBpZiAodHlwZW9mIG5hbWUgPT09ICdvYmplY3QnKSB7XG4gICAgICAgIGNiID0gdXJsIHx8IG5hbWUuY2FsbGJhY2sgfHwgbmFtZS5vbkNvbXBsZXRlO1xuICAgICAgICBvcHRpb25zID0gbmFtZTtcbiAgICAgICAgdXJsID0gbmFtZS51cmw7XG4gICAgICAgIG5hbWUgPSBuYW1lLm5hbWUgfHwgbmFtZS5rZXkgfHwgbmFtZS51cmw7XG4gICAgfVxuXG4gICAgLy8gY2FzZSB3aGVyZSBubyBuYW1lIGlzIHBhc3NlZCBzaGlmdCBhbGwgYXJncyBvdmVyIGJ5IG9uZS5cbiAgICBpZiAodHlwZW9mIHVybCAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgY2IgPSBvcHRpb25zO1xuICAgICAgICBvcHRpb25zID0gdXJsO1xuICAgICAgICB1cmwgPSBuYW1lO1xuICAgIH1cblxuICAgIC8vIG5vdyB0aGF0IHdlIHNoaWZ0ZWQgbWFrZSBzdXJlIHdlIGhhdmUgYSBwcm9wZXIgdXJsLlxuICAgIGlmICh0eXBlb2YgdXJsICE9PSAnc3RyaW5nJykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ05vIHVybCBwYXNzZWQgdG8gYWRkIHJlc291cmNlIHRvIGxvYWRlci4nKTtcbiAgICB9XG5cbiAgICAvLyBvcHRpb25zIGFyZSBvcHRpb25hbCBzbyBwZW9wbGUgbWlnaHQgcGFzcyBhIGZ1bmN0aW9uIGFuZCBubyBvcHRpb25zXG4gICAgaWYgKHR5cGVvZiBvcHRpb25zID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIGNiID0gb3B0aW9ucztcbiAgICAgICAgb3B0aW9ucyA9IG51bGw7XG4gICAgfVxuXG4gICAgLy8gY2hlY2sgaWYgcmVzb3VyY2UgYWxyZWFkeSBleGlzdHMuXG4gICAgaWYgKHRoaXMucmVzb3VyY2VzW25hbWVdKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignUmVzb3VyY2Ugd2l0aCBuYW1lIFwiJyArIG5hbWUgKyAnXCIgYWxyZWFkeSBleGlzdHMuJyk7XG4gICAgfVxuXG4gICAgLy8gYWRkIGJhc2UgdXJsIGlmIHRoaXMgaXNuJ3QgYW4gYWJzb2x1dGUgdXJsXG4gICAgdXJsID0gdGhpcy5faGFuZGxlQmFzZVVybCh1cmwpO1xuXG4gICAgLy8gY3JlYXRlIHRoZSBzdG9yZSB0aGUgcmVzb3VyY2VcbiAgICB0aGlzLnJlc291cmNlc1tuYW1lXSA9IG5ldyBSZXNvdXJjZShuYW1lLCB1cmwsIG9wdGlvbnMpO1xuXG4gICAgaWYgKHR5cGVvZiBjYiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB0aGlzLnJlc291cmNlc1tuYW1lXS5vbmNlKCdhZnRlck1pZGRsZXdhcmUnLCBjYik7XG4gICAgfVxuXG4gICAgdGhpcy5fbnVtVG9Mb2FkKys7XG5cbiAgICAvLyBpZiBhbHJlYWR5IGxvYWRpbmcgYWRkIGl0IHRvIHRoZSB3b3JrZXIgcXVldWVcbiAgICBpZiAodGhpcy5fcXVldWUuc3RhcnRlZCkge1xuICAgICAgICB0aGlzLl9xdWV1ZS5wdXNoKHRoaXMucmVzb3VyY2VzW25hbWVdKTtcbiAgICAgICAgdGhpcy5fcHJvZ3Jlc3NDaHVuayA9ICgxMDAgLSB0aGlzLnByb2dyZXNzKSAvICh0aGlzLl9xdWV1ZS5sZW5ndGgoKSArIHRoaXMuX3F1ZXVlLnJ1bm5pbmcoKSk7XG4gICAgfVxuICAgIC8vIG90aGVyd2lzZSBidWZmZXIgaXQgdG8gYmUgYWRkZWQgdG8gdGhlIHF1ZXVlIGxhdGVyXG4gICAgZWxzZSB7XG4gICAgICAgIHRoaXMuX2J1ZmZlci5wdXNoKHRoaXMucmVzb3VyY2VzW25hbWVdKTtcbiAgICAgICAgdGhpcy5fcHJvZ3Jlc3NDaHVuayA9IDEwMCAvIHRoaXMuX2J1ZmZlci5sZW5ndGg7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG5Mb2FkZXIucHJvdG90eXBlLl9oYW5kbGVCYXNlVXJsID0gZnVuY3Rpb24gKHVybCkge1xuICAgIHZhciBwYXJzZWRVcmwgPSB1cmxQYXJzZXIucGFyc2UodXJsKTtcblxuICAgIC8vIGFic29sdXRlIHVybCwganVzdCB1c2UgaXQgYXMgaXMuXG4gICAgaWYgKHBhcnNlZFVybC5wcm90b2NvbCB8fCBwYXJzZWRVcmwucGF0aG5hbWUuaW5kZXhPZignLy8nKSA9PT0gMCkge1xuICAgICAgICByZXR1cm4gdXJsO1xuICAgIH1cblxuICAgIC8vIGlmIGJhc2VVcmwgZG9lc24ndCBlbmQgaW4gc2xhc2ggYW5kIHVybCBkb2Vzbid0IHN0YXJ0IHdpdGggc2xhc2gsIHRoZW4gYWRkIGEgc2xhc2ggaW5iZXR3ZWVuXG4gICAgaWYgKFxuICAgICAgICB0aGlzLmJhc2VVcmwubGVuZ3RoICYmXG4gICAgICAgIHRoaXMuYmFzZVVybC5sYXN0SW5kZXhPZignLycpICE9PSB0aGlzLmJhc2VVcmwubGVuZ3RoIC0gMSAmJlxuICAgICAgICB1cmwuY2hhckF0KDApICE9PSAnLydcbiAgICApIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYmFzZVVybCArICcvJyArIHVybDtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHJldHVybiB0aGlzLmJhc2VVcmwgKyB1cmw7XG4gICAgfVxufTtcblxuXG4vKipcbiAqIFNldHMgdXAgYSBtaWRkbGV3YXJlIGZ1bmN0aW9uIHRoYXQgd2lsbCBydW4gKmJlZm9yZSogdGhlXG4gKiByZXNvdXJjZSBpcyBsb2FkZWQuXG4gKlxuICogQGFsaWFzIHByZVxuICogQHBhcmFtIG1pZGRsZXdhcmUge2Z1bmN0aW9ufSBUaGUgbWlkZGxld2FyZSBmdW5jdGlvbiB0byByZWdpc3Rlci5cbiAqIEByZXR1cm4ge0xvYWRlcn1cbiAqL1xuTG9hZGVyLnByb3RvdHlwZS5iZWZvcmUgPSBMb2FkZXIucHJvdG90eXBlLnByZSA9IGZ1bmN0aW9uIChmbikge1xuICAgIHRoaXMuX2JlZm9yZU1pZGRsZXdhcmUucHVzaChmbik7XG5cbiAgICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogU2V0cyB1cCBhIG1pZGRsZXdhcmUgZnVuY3Rpb24gdGhhdCB3aWxsIHJ1biAqYWZ0ZXIqIHRoZVxuICogcmVzb3VyY2UgaXMgbG9hZGVkLlxuICpcbiAqIEBhbGlhcyB1c2VcbiAqIEBwYXJhbSBtaWRkbGV3YXJlIHtmdW5jdGlvbn0gVGhlIG1pZGRsZXdhcmUgZnVuY3Rpb24gdG8gcmVnaXN0ZXIuXG4gKiBAcmV0dXJuIHtMb2FkZXJ9XG4gKi9cbkxvYWRlci5wcm90b3R5cGUuYWZ0ZXIgPSBMb2FkZXIucHJvdG90eXBlLnVzZSA9IGZ1bmN0aW9uIChmbikge1xuICAgIHRoaXMuX2FmdGVyTWlkZGxld2FyZS5wdXNoKGZuKTtcblxuICAgIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBSZXNldHMgdGhlIHF1ZXVlIG9mIHRoZSBsb2FkZXIgdG8gcHJlcGFyZSBmb3IgYSBuZXcgbG9hZC5cbiAqXG4gKiBAcmV0dXJuIHtMb2FkZXJ9XG4gKi9cbkxvYWRlci5wcm90b3R5cGUucmVzZXQgPSBmdW5jdGlvbiAoKSB7XG4gICAgLy8gdGhpcy5iYXNlVXJsID0gYmFzZVVybCB8fCAnJztcblxuICAgIHRoaXMucHJvZ3Jlc3MgPSAwO1xuXG4gICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XG5cbiAgICB0aGlzLl9wcm9ncmVzc0NodW5rID0gMDtcblxuICAgIC8vIHRoaXMuX2JlZm9yZU1pZGRsZXdhcmUubGVuZ3RoID0gMDtcbiAgICAvLyB0aGlzLl9hZnRlck1pZGRsZXdhcmUubGVuZ3RoID0gMDtcblxuICAgIHRoaXMuX2J1ZmZlci5sZW5ndGggPSAwO1xuXG4gICAgdGhpcy5fbnVtVG9Mb2FkID0gMDtcblxuICAgIHRoaXMuX3F1ZXVlLmtpbGwoKTtcbiAgICB0aGlzLl9xdWV1ZS5zdGFydGVkID0gZmFsc2U7XG5cbiAgICB0aGlzLnJlc291cmNlcyA9IHt9O1xufTtcblxuLyoqXG4gKiBTdGFydHMgbG9hZGluZyB0aGUgcXVldWVkIHJlc291cmNlcy5cbiAqXG4gKiBAZmlyZXMgc3RhcnRcbiAqIEBwYXJhbSBbY2FsbGJhY2tdIHtmdW5jdGlvbn0gT3B0aW9uYWwgY2FsbGJhY2sgdGhhdCB3aWxsIGJlIGJvdW5kIHRvIHRoZSBgY29tcGxldGVgIGV2ZW50LlxuICogQHJldHVybiB7TG9hZGVyfVxuICovXG5Mb2FkZXIucHJvdG90eXBlLmxvYWQgPSBmdW5jdGlvbiAoY2IpIHtcbiAgICAvLyByZWdpc3RlciBjb21wbGV0ZSBjYWxsYmFjayBpZiB0aGV5IHBhc3Mgb25lXG4gICAgaWYgKHR5cGVvZiBjYiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB0aGlzLm9uY2UoJ2NvbXBsZXRlJywgY2IpO1xuICAgIH1cblxuICAgIC8vIGlmIHRoZSBxdWV1ZSBoYXMgYWxyZWFkeSBzdGFydGVkIHdlIGFyZSBkb25lIGhlcmVcbiAgICBpZiAodGhpcy5fcXVldWUuc3RhcnRlZCkge1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICAvLyBub3RpZnkgb2Ygc3RhcnRcbiAgICB0aGlzLmVtaXQoJ3N0YXJ0JywgdGhpcyk7XG5cbiAgICAvLyBzdGFydCB0aGUgaW50ZXJuYWwgcXVldWVcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuX2J1ZmZlci5sZW5ndGg7ICsraSkge1xuICAgICAgICB0aGlzLl9xdWV1ZS5wdXNoKHRoaXMuX2J1ZmZlcltpXSk7XG4gICAgfVxuXG4gICAgLy8gZW1wdHkgdGhlIGJ1ZmZlclxuICAgIHRoaXMuX2J1ZmZlci5sZW5ndGggPSAwO1xuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIExvYWRzIGEgc2luZ2xlIHJlc291cmNlLlxuICpcbiAqIEBmaXJlcyBwcm9ncmVzc1xuICogQHByaXZhdGVcbiAqL1xuTG9hZGVyLnByb3RvdHlwZS5fbG9hZFJlc291cmNlID0gZnVuY3Rpb24gKHJlc291cmNlLCBkZXF1ZXVlKSB7XG4gICAgdmFyIHNlbGYgPSB0aGlzO1xuXG4gICAgcmVzb3VyY2UuX2RlcXVldWUgPSBkZXF1ZXVlO1xuXG4gICAgdGhpcy5fcnVuTWlkZGxld2FyZShyZXNvdXJjZSwgdGhpcy5fYmVmb3JlTWlkZGxld2FyZSwgZnVuY3Rpb24gKCkge1xuICAgICAgICAvLyByZXNvdXJjZS5vbigncHJvZ3Jlc3MnLCBzZWxmLmVtaXQuYmluZChzZWxmLCAncHJvZ3Jlc3MnKSk7XG5cbiAgICAgICAgcmVzb3VyY2UubG9hZChzZWxmLl9ib3VuZE9uTG9hZCk7XG4gICAgfSk7XG59O1xuXG4vKipcbiAqIENhbGxlZCBvbmNlIGVhY2ggcmVzb3VyY2UgaGFzIGxvYWRlZC5cbiAqXG4gKiBAZmlyZXMgY29tcGxldGVcbiAqIEBwcml2YXRlXG4gKi9cbkxvYWRlci5wcm90b3R5cGUuX29uQ29tcGxldGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgdGhpcy5lbWl0KCdjb21wbGV0ZScsIHRoaXMsIHRoaXMucmVzb3VyY2VzKTtcbn07XG5cbi8qKlxuICogQ2FsbGVkIGVhY2ggdGltZSBhIHJlc291cmNlcyBpcyBsb2FkZWQuXG4gKlxuICogQGZpcmVzIHByb2dyZXNzXG4gKiBAZmlyZXMgZXJyb3JcbiAqIEBmaXJlcyBsb2FkXG4gKiBAcHJpdmF0ZVxuICovXG5Mb2FkZXIucHJvdG90eXBlLl9vbkxvYWQgPSBmdW5jdGlvbiAocmVzb3VyY2UpIHtcbiAgICB0aGlzLnByb2dyZXNzICs9IHRoaXMuX3Byb2dyZXNzQ2h1bms7XG5cbiAgICB0aGlzLmVtaXQoJ3Byb2dyZXNzJywgdGhpcywgcmVzb3VyY2UpO1xuXG4gICAgLy8gcnVuIG1pZGRsZXdhcmUsIHRoaXMgKm11c3QqIGhhcHBlbiBiZWZvcmUgZGVxdWV1ZSBzbyBzdWItYXNzZXRzIGdldCBhZGRlZCBwcm9wZXJseVxuICAgIHRoaXMuX3J1bk1pZGRsZXdhcmUocmVzb3VyY2UsIHRoaXMuX2FmdGVyTWlkZGxld2FyZSwgZnVuY3Rpb24gKCkge1xuICAgICAgICByZXNvdXJjZS5lbWl0KCdhZnRlck1pZGRsZXdhcmUnLCByZXNvdXJjZSk7XG5cbiAgICAgICAgdGhpcy5fbnVtVG9Mb2FkLS07XG5cbiAgICAgICAgLy8gZG8gY29tcGxldGlvbiBjaGVja1xuICAgICAgICBpZiAodGhpcy5fbnVtVG9Mb2FkID09PSAwKSB7XG4gICAgICAgICAgICB0aGlzLnByb2dyZXNzID0gMTAwO1xuICAgICAgICAgICAgdGhpcy5fb25Db21wbGV0ZSgpO1xuICAgICAgICB9XG4gICAgICAgIFxuICAgICAgICBpZiAocmVzb3VyY2UuZXJyb3IpIHtcbiAgICAgICAgICAgIHRoaXMuZW1pdCgnZXJyb3InLCByZXNvdXJjZS5lcnJvciwgdGhpcywgcmVzb3VyY2UpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5lbWl0KCdsb2FkJywgdGhpcywgcmVzb3VyY2UpO1xuICAgICAgICB9XG4gICAgfSk7XG4gICAgXG5cblxuICAgIC8vIHJlbW92ZSB0aGlzIHJlc291cmNlIGZyb20gdGhlIGFzeW5jIHF1ZXVlXG4gICAgcmVzb3VyY2UuX2RlcXVldWUoKTtcbn07XG5cbi8qKlxuICogUnVuIG1pZGRsZXdhcmUgZnVuY3Rpb25zIG9uIGEgcmVzb3VyY2UuXG4gKlxuICogQHByaXZhdGVcbiAqL1xuTG9hZGVyLnByb3RvdHlwZS5fcnVuTWlkZGxld2FyZSA9IGZ1bmN0aW9uIChyZXNvdXJjZSwgZm5zLCBjYikge1xuICAgIHZhciBzZWxmID0gdGhpcztcblxuICAgIGFzeW5jLmVhY2hTZXJpZXMoZm5zLCBmdW5jdGlvbiAoZm4sIG5leHQpIHtcbiAgICAgICAgZm4uY2FsbChzZWxmLCByZXNvdXJjZSwgbmV4dCk7XG4gICAgfSwgY2IuYmluZCh0aGlzLCByZXNvdXJjZSkpO1xufTtcblxuTG9hZGVyLkxPQURfVFlQRSA9IFJlc291cmNlLkxPQURfVFlQRTtcbkxvYWRlci5YSFJfUkVBRFlfU1RBVEUgPSBSZXNvdXJjZS5YSFJfUkVBRFlfU1RBVEU7XG5Mb2FkZXIuWEhSX1JFU1BPTlNFX1RZUEUgPSBSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRTtcbiIsInZhciBFdmVudEVtaXR0ZXIgPSByZXF1aXJlKCdldmVudGVtaXR0ZXIzJyksXG4gICAgX3VybCA9IHJlcXVpcmUoJ3VybCcpLFxuICAgIC8vIHRlc3RzIGlzIENPUlMgaXMgc3VwcG9ydGVkIGluIFhIUiwgaWYgbm90IHdlIG5lZWQgdG8gdXNlIFhEUlxuICAgIHVzZVhkciA9ICEhKHdpbmRvdy5YRG9tYWluUmVxdWVzdCAmJiAhKCd3aXRoQ3JlZGVudGlhbHMnIGluIChuZXcgWE1MSHR0cFJlcXVlc3QoKSkpKSxcbiAgICB0ZW1wQW5jaG9yID0gbnVsbDtcblxuLyoqXG4gKiBNYW5hZ2VzIHRoZSBzdGF0ZSBhbmQgbG9hZGluZyBvZiBhIHNpbmdsZSByZXNvdXJjZSByZXByZXNlbnRlZCBieVxuICogYSBzaW5nbGUgVVJMLlxuICpcbiAqIEBjbGFzc1xuICogQHBhcmFtIG5hbWUge3N0cmluZ30gVGhlIG5hbWUgb2YgdGhlIHJlc291cmNlIHRvIGxvYWQuXG4gKiBAcGFyYW0gdXJsIHtzdHJpbmd8c3RyaW5nW119IFRoZSB1cmwgZm9yIHRoaXMgcmVzb3VyY2UsIGZvciBhdWRpby92aWRlbyBsb2FkcyB5b3UgY2FuIHBhc3MgYW4gYXJyYXkgb2Ygc291cmNlcy5cbiAqIEBwYXJhbSBbb3B0aW9uc10ge29iamVjdH0gVGhlIG9wdGlvbnMgZm9yIHRoZSBsb2FkLlxuICogQHBhcmFtIFtvcHRpb25zLmNyb3NzT3JpZ2luXSB7c3RyaW5nfGJvb2xlYW59IElzIHRoaXMgcmVxdWVzdCBjcm9zcy1vcmlnaW4/IERlZmF1bHQgaXMgdG8gZGV0ZXJtaW5lIGF1dG9tYXRpY2FsbHkuXG4gKiBAcGFyYW0gW29wdGlvbnMubG9hZFR5cGU9UmVzb3VyY2UuTE9BRF9UWVBFLlhIUl0ge1Jlc291cmNlLkxPQURfVFlQRX0gSG93IHNob3VsZCB0aGlzIHJlc291cmNlIGJlIGxvYWRlZD9cbiAqIEBwYXJhbSBbb3B0aW9ucy54aHJUeXBlPVJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkRFRkFVTFRdIHtSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRX0gSG93IHNob3VsZCB0aGUgZGF0YSBiZWluZ1xuICogICAgICBsb2FkZWQgYmUgaW50ZXJwcmV0ZWQgd2hlbiB1c2luZyBYSFI/XG4gKiBAcGFyYW0gW29wdGlvbnMubWV0YWRhdGFdIHtvYmplY3R9IEV4dHJhIGluZm8gZm9yIG1pZGRsZXdhcmUuXG4gKi9cbmZ1bmN0aW9uIFJlc291cmNlKG5hbWUsIHVybCwgb3B0aW9ucykge1xuICAgIEV2ZW50RW1pdHRlci5jYWxsKHRoaXMpO1xuXG4gICAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG5cbiAgICBpZiAodHlwZW9mIG5hbWUgIT09ICdzdHJpbmcnIHx8IHR5cGVvZiB1cmwgIT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignQm90aCBuYW1lIGFuZCB1cmwgYXJlIHJlcXVpcmVkIGZvciBjb25zdHJ1Y3RpbmcgYSByZXNvdXJjZS4nKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGUgbmFtZSBvZiB0aGlzIHJlc291cmNlLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7c3RyaW5nfVxuICAgICAqIEByZWFkb25seVxuICAgICAqL1xuICAgIHRoaXMubmFtZSA9IG5hbWU7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgdXJsIHVzZWQgdG8gbG9hZCB0aGlzIHJlc291cmNlLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7c3RyaW5nfVxuICAgICAqIEByZWFkb25seVxuICAgICAqL1xuICAgIHRoaXMudXJsID0gdXJsO1xuXG4gICAgLyoqXG4gICAgICogU3RvcmVzIHdoZXRoZXIgb3Igbm90IHRoaXMgdXJsIGlzIGEgZGF0YSB1cmwuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqIEByZWFkb25seVxuICAgICAqL1xuICAgIHRoaXMuaXNEYXRhVXJsID0gdGhpcy51cmwuaW5kZXhPZignZGF0YTonKSA9PT0gMDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBkYXRhIHRoYXQgd2FzIGxvYWRlZCBieSB0aGUgcmVzb3VyY2UuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHthbnl9XG4gICAgICovXG4gICAgdGhpcy5kYXRhID0gbnVsbDtcblxuICAgIC8qKlxuICAgICAqIElzIHRoaXMgcmVxdWVzdCBjcm9zcy1vcmlnaW4/IElmIHVuc2V0LCBkZXRlcm1pbmVkIGF1dG9tYXRpY2FsbHkuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtzdHJpbmd9XG4gICAgICovXG4gICAgdGhpcy5jcm9zc09yaWdpbiA9IG9wdGlvbnMuY3Jvc3NPcmlnaW4gPT09IHRydWUgPyAnYW5vbnltb3VzJyA6IG9wdGlvbnMuY3Jvc3NPcmlnaW47XG5cbiAgICAvKipcbiAgICAgKiBUaGUgbWV0aG9kIG9mIGxvYWRpbmcgdG8gdXNlIGZvciB0aGlzIHJlc291cmNlLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UmVzb3VyY2UuTE9BRF9UWVBFfVxuICAgICAqL1xuICAgIHRoaXMubG9hZFR5cGUgPSBvcHRpb25zLmxvYWRUeXBlIHx8IHRoaXMuX2RldGVybWluZUxvYWRUeXBlKCk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgdHlwZSB1c2VkIHRvIGxvYWQgdGhlIHJlc291cmNlIHZpYSBYSFIuIElmIHVuc2V0LCBkZXRlcm1pbmVkIGF1dG9tYXRpY2FsbHkuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtzdHJpbmd9XG4gICAgICovXG4gICAgdGhpcy54aHJUeXBlID0gb3B0aW9ucy54aHJUeXBlO1xuXG4gICAgLyoqXG4gICAgICogRXh0cmEgaW5mbyBmb3IgbWlkZGxld2FyZVxuICAgICAqXG4gICAgICogQG1lbWJlciB7b2JqZWN0fVxuICAgICAqL1xuICAgIHRoaXMubWV0YWRhdGEgPSBvcHRpb25zLm1ldGFkYXRhIHx8IHt9O1xuXG4gICAgLyoqXG4gICAgICogVGhlIGVycm9yIHRoYXQgb2NjdXJyZWQgd2hpbGUgbG9hZGluZyAoaWYgYW55KS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge0Vycm9yfVxuICAgICAqIEByZWFkb25seVxuICAgICAqL1xuICAgIHRoaXMuZXJyb3IgPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogVGhlIFhIUiBvYmplY3QgdGhhdCB3YXMgdXNlZCB0byBsb2FkIHRoaXMgcmVzb3VyY2UuIFRoaXMgaXMgb25seSBzZXRcbiAgICAgKiB3aGVuIGBsb2FkVHlwZWAgaXMgYFJlc291cmNlLkxPQURfVFlQRS5YSFJgLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7WE1MSHR0cFJlcXVlc3R9XG4gICAgICovXG4gICAgdGhpcy54aHIgPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogRGVzY3JpYmVzIGlmIHRoaXMgcmVzb3VyY2Ugd2FzIGxvYWRlZCBhcyBqc29uLiBPbmx5IHZhbGlkIGFmdGVyIHRoZSByZXNvdXJjZVxuICAgICAqIGhhcyBjb21wbGV0ZWx5IGxvYWRlZC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICovXG4gICAgdGhpcy5pc0pzb24gPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIERlc2NyaWJlcyBpZiB0aGlzIHJlc291cmNlIHdhcyBsb2FkZWQgYXMgeG1sLiBPbmx5IHZhbGlkIGFmdGVyIHRoZSByZXNvdXJjZVxuICAgICAqIGhhcyBjb21wbGV0ZWx5IGxvYWRlZC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICovXG4gICAgdGhpcy5pc1htbCA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogRGVzY3JpYmVzIGlmIHRoaXMgcmVzb3VyY2Ugd2FzIGxvYWRlZCBhcyBhbiBpbWFnZSB0YWcuIE9ubHkgdmFsaWQgYWZ0ZXIgdGhlIHJlc291cmNlXG4gICAgICogaGFzIGNvbXBsZXRlbHkgbG9hZGVkLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKi9cbiAgICB0aGlzLmlzSW1hZ2UgPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIERlc2NyaWJlcyBpZiB0aGlzIHJlc291cmNlIHdhcyBsb2FkZWQgYXMgYW4gYXVkaW8gdGFnLiBPbmx5IHZhbGlkIGFmdGVyIHRoZSByZXNvdXJjZVxuICAgICAqIGhhcyBjb21wbGV0ZWx5IGxvYWRlZC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICovXG4gICAgdGhpcy5pc0F1ZGlvID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBEZXNjcmliZXMgaWYgdGhpcyByZXNvdXJjZSB3YXMgbG9hZGVkIGFzIGEgdmlkZW8gdGFnLiBPbmx5IHZhbGlkIGFmdGVyIHRoZSByZXNvdXJjZVxuICAgICAqIGhhcyBjb21wbGV0ZWx5IGxvYWRlZC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICovXG4gICAgdGhpcy5pc1ZpZGVvID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYGRlcXVldWVgIG1ldGhvZCB0aGF0IHdpbGwgYmUgdXNlZCBhIHN0b3JhZ2UgcGxhY2UgZm9yIHRoZSBhc3luYyBxdWV1ZSBkZXF1ZXVlIG1ldGhvZFxuICAgICAqIHVzZWQgcHJpdmF0ZWx5IGJ5IHRoZSBsb2FkZXIuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtmdW5jdGlvbn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX2RlcXVldWUgPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGBjb21wbGV0ZWAgZnVuY3Rpb24gYm91bmQgdG8gdGhpcyByZXNvdXJjZSdzIGNvbnRleHQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtmdW5jdGlvbn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX2JvdW5kQ29tcGxldGUgPSB0aGlzLmNvbXBsZXRlLmJpbmQodGhpcyk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYF9vbkVycm9yYCBmdW5jdGlvbiBib3VuZCB0byB0aGlzIHJlc291cmNlJ3MgY29udGV4dC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Z1bmN0aW9ufVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fYm91bmRPbkVycm9yID0gdGhpcy5fb25FcnJvci5iaW5kKHRoaXMpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGBfb25Qcm9ncmVzc2AgZnVuY3Rpb24gYm91bmQgdG8gdGhpcyByZXNvdXJjZSdzIGNvbnRleHQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtmdW5jdGlvbn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX2JvdW5kT25Qcm9ncmVzcyA9IHRoaXMuX29uUHJvZ3Jlc3MuYmluZCh0aGlzKTtcblxuICAgIC8vIHhociBjYWxsYmFja3NcbiAgICB0aGlzLl9ib3VuZFhock9uRXJyb3IgPSB0aGlzLl94aHJPbkVycm9yLmJpbmQodGhpcyk7XG4gICAgdGhpcy5fYm91bmRYaHJPbkFib3J0ID0gdGhpcy5feGhyT25BYm9ydC5iaW5kKHRoaXMpO1xuICAgIHRoaXMuX2JvdW5kWGhyT25Mb2FkID0gdGhpcy5feGhyT25Mb2FkLmJpbmQodGhpcyk7XG4gICAgdGhpcy5fYm91bmRYZHJPblRpbWVvdXQgPSB0aGlzLl94ZHJPblRpbWVvdXQuYmluZCh0aGlzKTtcblxuICAgIC8qKlxuICAgICAqIEVtaXR0ZWQgd2hlbiB0aGUgcmVzb3VyY2UgYmVpbmdzIHRvIGxvYWQuXG4gICAgICpcbiAgICAgKiBAZXZlbnQgc3RhcnRcbiAgICAgKiBAbWVtYmVyb2YgUmVzb3VyY2UjXG4gICAgICovXG5cbiAgICAvKipcbiAgICAgKiBFbWl0dGVkIGVhY2ggdGltZSBwcm9ncmVzcyBvZiB0aGlzIHJlc291cmNlIGxvYWQgdXBkYXRlcy5cbiAgICAgKiBOb3QgYWxsIHJlc291cmNlcyB0eXBlcyBhbmQgbG9hZGVyIHN5c3RlbXMgY2FuIHN1cHBvcnQgdGhpcyBldmVudFxuICAgICAqIHNvIHNvbWV0aW1lcyBpdCBtYXkgbm90IGJlIGF2YWlsYWJsZS4gSWYgdGhlIHJlc291cmNlXG4gICAgICogaXMgYmVpbmcgbG9hZGVkIG9uIGEgbW9kZXJuIGJyb3dzZXIsIHVzaW5nIFhIUiwgYW5kIHRoZSByZW1vdGUgc2VydmVyXG4gICAgICogcHJvcGVybHkgc2V0cyBDb250ZW50LUxlbmd0aCBoZWFkZXJzLCB0aGVuIHRoaXMgd2lsbCBiZSBhdmFpbGFibGUuXG4gICAgICpcbiAgICAgKiBAZXZlbnQgcHJvZ3Jlc3NcbiAgICAgKiBAbWVtYmVyb2YgUmVzb3VyY2UjXG4gICAgICovXG5cbiAgICAvKipcbiAgICAgKiBFbWl0dGVkIG9uY2UgdGhpcyByZXNvdXJjZSBoYXMgbG9hZGVkLCBpZiB0aGVyZSB3YXMgYW4gZXJyb3IgaXQgd2lsbFxuICAgICAqIGJlIGluIHRoZSBgZXJyb3JgIHByb3BlcnR5LlxuICAgICAqXG4gICAgICogQGV2ZW50IGNvbXBsZXRlXG4gICAgICogQG1lbWJlcm9mIFJlc291cmNlI1xuICAgICAqL1xufVxuXG5SZXNvdXJjZS5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKEV2ZW50RW1pdHRlci5wcm90b3R5cGUpO1xuUmVzb3VyY2UucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gUmVzb3VyY2U7XG5tb2R1bGUuZXhwb3J0cyA9IFJlc291cmNlO1xuXG4vKipcbiAqIE1hcmtzIHRoZSByZXNvdXJjZSBhcyBjb21wbGV0ZS5cbiAqXG4gKiBAZmlyZXMgY29tcGxldGVcbiAqL1xuUmVzb3VyY2UucHJvdG90eXBlLmNvbXBsZXRlID0gZnVuY3Rpb24gKCkge1xuICAgIC8vIFRPRE86IENsZWFuIHRoaXMgdXAgaW4gYSB3cmFwcGVyIG9yIHNvbWV0aGluZy4uLmdyb3NzLi4uLlxuICAgIGlmICh0aGlzLmRhdGEgJiYgdGhpcy5kYXRhLnJlbW92ZUV2ZW50TGlzdGVuZXIpIHtcbiAgICAgICAgdGhpcy5kYXRhLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2Vycm9yJywgdGhpcy5fYm91bmRPbkVycm9yKTtcbiAgICAgICAgdGhpcy5kYXRhLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2xvYWQnLCB0aGlzLl9ib3VuZENvbXBsZXRlKTtcbiAgICAgICAgdGhpcy5kYXRhLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3Byb2dyZXNzJywgdGhpcy5fYm91bmRPblByb2dyZXNzKTtcbiAgICAgICAgdGhpcy5kYXRhLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2NhbnBsYXl0aHJvdWdoJywgdGhpcy5fYm91bmRDb21wbGV0ZSk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMueGhyKSB7XG4gICAgICAgIGlmICh0aGlzLnhoci5yZW1vdmVFdmVudExpc3RlbmVyKSB7XG4gICAgICAgICAgICB0aGlzLnhoci5yZW1vdmVFdmVudExpc3RlbmVyKCdlcnJvcicsIHRoaXMuX2JvdW5kWGhyT25FcnJvcik7XG4gICAgICAgICAgICB0aGlzLnhoci5yZW1vdmVFdmVudExpc3RlbmVyKCdhYm9ydCcsIHRoaXMuX2JvdW5kWGhyT25BYm9ydCk7XG4gICAgICAgICAgICB0aGlzLnhoci5yZW1vdmVFdmVudExpc3RlbmVyKCdwcm9ncmVzcycsIHRoaXMuX2JvdW5kT25Qcm9ncmVzcyk7XG4gICAgICAgICAgICB0aGlzLnhoci5yZW1vdmVFdmVudExpc3RlbmVyKCdsb2FkJywgdGhpcy5fYm91bmRYaHJPbkxvYWQpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy54aHIub25lcnJvciA9IG51bGw7XG4gICAgICAgICAgICB0aGlzLnhoci5vbnRpbWVvdXQgPSBudWxsO1xuICAgICAgICAgICAgdGhpcy54aHIub25wcm9ncmVzcyA9IG51bGw7XG4gICAgICAgICAgICB0aGlzLnhoci5vbmxvYWQgPSBudWxsO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5lbWl0KCdjb21wbGV0ZScsIHRoaXMpO1xufTtcblxuLyoqXG4gKiBLaWNrcyBvZmYgbG9hZGluZyBvZiB0aGlzIHJlc291cmNlLlxuICpcbiAqIEBmaXJlcyBzdGFydFxuICogQHBhcmFtIFtjYWxsYmFja10ge2Z1bmN0aW9ufSBPcHRpb25hbCBjYWxsYmFjayB0byBjYWxsIG9uY2UgdGhlIHJlc291cmNlIGlzIGxvYWRlZC5cbiAqL1xuUmVzb3VyY2UucHJvdG90eXBlLmxvYWQgPSBmdW5jdGlvbiAoY2IpIHtcbiAgICB0aGlzLmVtaXQoJ3N0YXJ0JywgdGhpcyk7XG5cbiAgICAvLyBpZiBhIGNhbGxiYWNrIGlzIHNldCwgbGlzdGVuIGZvciBjb21wbGV0ZSBldmVudFxuICAgIGlmIChjYikge1xuICAgICAgICB0aGlzLm9uY2UoJ2NvbXBsZXRlJywgY2IpO1xuICAgIH1cblxuICAgIC8vIGlmIHVuc2V0LCBkZXRlcm1pbmUgdGhlIHZhbHVlXG4gICAgaWYgKHRoaXMuY3Jvc3NPcmlnaW4gPT09IGZhbHNlIHx8IHR5cGVvZiB0aGlzLmNyb3NzT3JpZ2luICE9PSAnc3RyaW5nJykge1xuICAgICAgICB0aGlzLmNyb3NzT3JpZ2luID0gdGhpcy5fZGV0ZXJtaW5lQ3Jvc3NPcmlnaW4odGhpcy51cmwpO1xuICAgIH1cblxuICAgIHN3aXRjaCh0aGlzLmxvYWRUeXBlKSB7XG4gICAgICAgIGNhc2UgUmVzb3VyY2UuTE9BRF9UWVBFLklNQUdFOlxuICAgICAgICAgICAgdGhpcy5fbG9hZEltYWdlKCk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIFJlc291cmNlLkxPQURfVFlQRS5BVURJTzpcbiAgICAgICAgICAgIHRoaXMuX2xvYWRFbGVtZW50KCdhdWRpbycpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSBSZXNvdXJjZS5MT0FEX1RZUEUuVklERU86XG4gICAgICAgICAgICB0aGlzLl9sb2FkRWxlbWVudCgndmlkZW8nKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgUmVzb3VyY2UuTE9BRF9UWVBFLlhIUjpcbiAgICAgICAgICAgIC8qIGZhbGxzIHRocm91Z2ggKi9cbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIGlmICh1c2VYZHIgJiYgdGhpcy5jcm9zc09yaWdpbikge1xuICAgICAgICAgICAgICAgIHRoaXMuX2xvYWRYZHIoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuX2xvYWRYaHIoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGJyZWFrO1xuICAgIH1cbn07XG5cbi8qKlxuICogTG9hZHMgdGhpcyByZXNvdXJjZXMgdXNpbmcgYW4gSW1hZ2Ugb2JqZWN0LlxuICpcbiAqIEBwcml2YXRlXG4gKi9cblJlc291cmNlLnByb3RvdHlwZS5fbG9hZEltYWdlID0gZnVuY3Rpb24gKCkge1xuICAgIHRoaXMuZGF0YSA9IG5ldyBJbWFnZSgpO1xuXG4gICAgaWYgKHRoaXMuY3Jvc3NPcmlnaW4pIHtcbiAgICAgICAgdGhpcy5kYXRhLmNyb3NzT3JpZ2luID0gdGhpcy5jcm9zc09yaWdpbjtcbiAgICB9XG5cbiAgICB0aGlzLmRhdGEuc3JjID0gdGhpcy51cmw7XG5cbiAgICB0aGlzLmlzSW1hZ2UgPSB0cnVlO1xuXG4gICAgdGhpcy5kYXRhLmFkZEV2ZW50TGlzdGVuZXIoJ2Vycm9yJywgdGhpcy5fYm91bmRPbkVycm9yLCBmYWxzZSk7XG4gICAgdGhpcy5kYXRhLmFkZEV2ZW50TGlzdGVuZXIoJ2xvYWQnLCB0aGlzLl9ib3VuZENvbXBsZXRlLCBmYWxzZSk7XG4gICAgdGhpcy5kYXRhLmFkZEV2ZW50TGlzdGVuZXIoJ3Byb2dyZXNzJywgdGhpcy5fYm91bmRPblByb2dyZXNzLCBmYWxzZSk7XG59O1xuXG4vKipcbiAqIExvYWRzIHRoaXMgcmVzb3VyY2VzIHVzaW5nIGFuIEhUTUxBdWRpb0VsZW1lbnQgb3IgSFRNTFZpZGVvRWxlbWVudC5cbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5SZXNvdXJjZS5wcm90b3R5cGUuX2xvYWRFbGVtZW50ID0gZnVuY3Rpb24gKHR5cGUpIHtcbiAgICBpZiAodHlwZSA9PT0gJ2F1ZGlvJyAmJiB0eXBlb2YgQXVkaW8gIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIHRoaXMuZGF0YSA9IG5ldyBBdWRpbygpO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgdGhpcy5kYXRhID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCh0eXBlKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5kYXRhID09PSBudWxsKSB7XG4gICAgICAgIHRoaXMuZXJyb3IgPSBuZXcgRXJyb3IoJ1Vuc3VwcG9ydGVkIGVsZW1lbnQgJyArIHR5cGUpO1xuICAgICAgICB0aGlzLmNvbXBsZXRlKCk7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBzdXBwb3J0IGZvciBDb2Nvb25KUyBDYW52YXMrIHJ1bnRpbWUsIGxhY2tzIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NvdXJjZScpXG4gICAgaWYgKG5hdmlnYXRvci5pc0NvY29vbkpTKSB7XG4gICAgICAgIHRoaXMuZGF0YS5zcmMgPSBBcnJheS5pc0FycmF5KHRoaXMudXJsKSA/IHRoaXMudXJsWzBdIDogdGhpcy51cmw7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSh0aGlzLnVybCkpIHtcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy51cmwubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmRhdGEuYXBwZW5kQ2hpbGQodGhpcy5fY3JlYXRlU291cmNlKHR5cGUsIHRoaXMudXJsW2ldKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmRhdGEuYXBwZW5kQ2hpbGQodGhpcy5fY3JlYXRlU291cmNlKHR5cGUsIHRoaXMudXJsKSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzWydpcycgKyB0eXBlWzBdLnRvVXBwZXJDYXNlKCkgKyB0eXBlLnN1YnN0cmluZygxKV0gPSB0cnVlO1xuXG4gICAgdGhpcy5kYXRhLmFkZEV2ZW50TGlzdGVuZXIoJ2Vycm9yJywgdGhpcy5fYm91bmRPbkVycm9yLCBmYWxzZSk7XG4gICAgdGhpcy5kYXRhLmFkZEV2ZW50TGlzdGVuZXIoJ2xvYWQnLCB0aGlzLl9ib3VuZENvbXBsZXRlLCBmYWxzZSk7XG4gICAgdGhpcy5kYXRhLmFkZEV2ZW50TGlzdGVuZXIoJ3Byb2dyZXNzJywgdGhpcy5fYm91bmRPblByb2dyZXNzLCBmYWxzZSk7XG4gICAgdGhpcy5kYXRhLmFkZEV2ZW50TGlzdGVuZXIoJ2NhbnBsYXl0aHJvdWdoJywgdGhpcy5fYm91bmRDb21wbGV0ZSwgZmFsc2UpO1xuXG4gICAgdGhpcy5kYXRhLmxvYWQoKTtcbn07XG5cbi8qKlxuICogTG9hZHMgdGhpcyByZXNvdXJjZXMgdXNpbmcgYW4gWE1MSHR0cFJlcXVlc3QuXG4gKlxuICogQHByaXZhdGVcbiAqL1xuUmVzb3VyY2UucHJvdG90eXBlLl9sb2FkWGhyID0gZnVuY3Rpb24gKCkge1xuICAgIC8vIGlmIHVuc2V0LCBkZXRlcm1pbmUgdGhlIHZhbHVlXG4gICAgaWYgKHR5cGVvZiB0aGlzLnhoclR5cGUgIT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHRoaXMueGhyVHlwZSA9IHRoaXMuX2RldGVybWluZVhoclR5cGUoKTtcbiAgICB9XG5cbiAgICB2YXIgeGhyID0gdGhpcy54aHIgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTtcblxuICAgIC8vIHNldCB0aGUgcmVxdWVzdCB0eXBlIGFuZCB1cmxcbiAgICB4aHIub3BlbignR0VUJywgdGhpcy51cmwsIHRydWUpO1xuXG4gICAgLy8gbG9hZCBqc29uIGFzIHRleHQgYW5kIHBhcnNlIGl0IG91cnNlbHZlcy4gV2UgZG8gdGhpcyBiZWNhdXNlIHNvbWUgYnJvd3NlcnNcbiAgICAvLyAqY291Z2gqIHNhZmFyaSAqY291Z2gqIGNhbid0IGRlYWwgd2l0aCBpdC5cbiAgICBpZiAodGhpcy54aHJUeXBlID09PSBSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRS5KU09OIHx8IHRoaXMueGhyVHlwZSA9PT0gUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuRE9DVU1FTlQpIHtcbiAgICAgICAgeGhyLnJlc3BvbnNlVHlwZSA9IFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLlRFWFQ7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICB4aHIucmVzcG9uc2VUeXBlID0gdGhpcy54aHJUeXBlO1xuICAgIH1cblxuICAgIHhoci5hZGRFdmVudExpc3RlbmVyKCdlcnJvcicsIHRoaXMuX2JvdW5kWGhyT25FcnJvciwgZmFsc2UpO1xuICAgIHhoci5hZGRFdmVudExpc3RlbmVyKCdhYm9ydCcsIHRoaXMuX2JvdW5kWGhyT25BYm9ydCwgZmFsc2UpO1xuICAgIHhoci5hZGRFdmVudExpc3RlbmVyKCdwcm9ncmVzcycsIHRoaXMuX2JvdW5kT25Qcm9ncmVzcywgZmFsc2UpO1xuICAgIHhoci5hZGRFdmVudExpc3RlbmVyKCdsb2FkJywgdGhpcy5fYm91bmRYaHJPbkxvYWQsIGZhbHNlKTtcblxuICAgIHhoci5zZW5kKCk7XG59O1xuXG4vKipcbiAqIExvYWRzIHRoaXMgcmVzb3VyY2VzIHVzaW5nIGFuIFhEb21haW5SZXF1ZXN0LiBUaGlzIGlzIGhlcmUgYmVjYXVzZSB3ZSBuZWVkIHRvIHN1cHBvcnQgSUU5IChncm9zcykuXG4gKlxuICogQHByaXZhdGVcbiAqL1xuUmVzb3VyY2UucHJvdG90eXBlLl9sb2FkWGRyID0gZnVuY3Rpb24gKCkge1xuICAgIC8vIGlmIHVuc2V0LCBkZXRlcm1pbmUgdGhlIHZhbHVlXG4gICAgaWYgKHR5cGVvZiB0aGlzLnhoclR5cGUgIT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHRoaXMueGhyVHlwZSA9IHRoaXMuX2RldGVybWluZVhoclR5cGUoKTtcbiAgICB9XG5cbiAgICB2YXIgeGRyID0gdGhpcy54aHIgPSBuZXcgWERvbWFpblJlcXVlc3QoKTtcblxuICAgIC8vIFhEb21haW5SZXF1ZXN0IGhhcyBhIGZldyBxdWlya3MuIE9jY2FzaW9uYWxseSBpdCB3aWxsIGFib3J0IHJlcXVlc3RzXG4gICAgLy8gQSB3YXkgdG8gYXZvaWQgdGhpcyBpcyB0byBtYWtlIHN1cmUgQUxMIGNhbGxiYWNrcyBhcmUgc2V0IGV2ZW4gaWYgbm90IHVzZWRcbiAgICAvLyBNb3JlIGluZm8gaGVyZTogaHR0cDovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy8xNTc4Njk2Ni94ZG9tYWlucmVxdWVzdC1hYm9ydHMtcG9zdC1vbi1pZS05XG4gICAgeGRyLnRpbWVvdXQgPSA1MDAwO1xuXG4gICAgeGRyLm9uZXJyb3IgPSB0aGlzLl9ib3VuZFhock9uRXJyb3I7XG4gICAgeGRyLm9udGltZW91dCA9IHRoaXMuX2JvdW5kWGRyT25UaW1lb3V0O1xuICAgIHhkci5vbnByb2dyZXNzID0gdGhpcy5fYm91bmRPblByb2dyZXNzO1xuICAgIHhkci5vbmxvYWQgPSB0aGlzLl9ib3VuZFhock9uTG9hZDtcblxuICAgIHhkci5vcGVuKCdHRVQnLCB0aGlzLnVybCwgdHJ1ZSk7XG5cbiAgICAvLyAgTm90ZTogVGhlIHhkci5zZW5kKCkgY2FsbCBpcyB3cmFwcGVkIGluIGEgdGltZW91dCB0byBwcmV2ZW50IGFuIGlzc3VlIHdpdGggdGhlIGludGVyZmFjZSB3aGVyZSBzb21lIHJlcXVlc3RzIGFyZSBsb3N0XG4gICAgLy8gIGlmIG11bHRpcGxlIFhEb21haW5SZXF1ZXN0cyBhcmUgYmVpbmcgc2VudCBhdCB0aGUgc2FtZSB0aW1lLlxuICAgIC8vIFNvbWUgaW5mbyBoZXJlOiBodHRwczovL2dpdGh1Yi5jb20vcGhvdG9uc3Rvcm0vcGhhc2VyL2lzc3Vlcy8xMjQ4XG4gICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICAgIHhkci5zZW5kKCk7XG4gICAgfSwgMCk7XG59O1xuXG4vKipcbiAqIENyZWF0ZXMgYSBzb3VyY2UgdXNlZCBpbiBsb2FkaW5nIHZpYSBhbiBlbGVtZW50LlxuICpcbiAqIEBwYXJhbSB0eXBlIHtzdHJpbmd9IFRoZSBlbGVtZW50IHR5cGUgKHZpZGVvIG9yIGF1ZGlvKS5cbiAqIEBwYXJhbSB1cmwge3N0cmluZ30gVGhlIHNvdXJjZSBVUkwgdG8gbG9hZCBmcm9tLlxuICogQHBhcmFtIFttaW1lXSB7c3RyaW5nfSBUaGUgbWltZSB0eXBlIG9mIHRoZSB2aWRlb1xuICogQHByaXZhdGVcbiAqL1xuUmVzb3VyY2UucHJvdG90eXBlLl9jcmVhdGVTb3VyY2UgPSBmdW5jdGlvbiAodHlwZSwgdXJsLCBtaW1lKSB7XG4gICAgaWYgKCFtaW1lKSB7XG4gICAgICAgIG1pbWUgPSB0eXBlICsgJy8nICsgdXJsLnN1YnN0cih1cmwubGFzdEluZGV4T2YoJy4nKSArIDEpO1xuICAgIH1cblxuICAgIHZhciBzb3VyY2UgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzb3VyY2UnKTtcblxuICAgIHNvdXJjZS5zcmMgPSB1cmw7XG4gICAgc291cmNlLnR5cGUgPSBtaW1lO1xuXG4gICAgcmV0dXJuIHNvdXJjZTtcbn07XG5cbi8qKlxuICogQ2FsbGVkIGlmIGEgbG9hZCBlcnJvcnMgb3V0LlxuICpcbiAqIEBwYXJhbSBldmVudCB7RXZlbnR9IFRoZSBlcnJvciBldmVudCBmcm9tIHRoZSBlbGVtZW50IHRoYXQgZW1pdHMgaXQuXG4gKiBAcHJpdmF0ZVxuICovXG5SZXNvdXJjZS5wcm90b3R5cGUuX29uRXJyb3IgPSBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICB0aGlzLmVycm9yID0gbmV3IEVycm9yKCdGYWlsZWQgdG8gbG9hZCBlbGVtZW50IHVzaW5nICcgKyBldmVudC50YXJnZXQubm9kZU5hbWUpO1xuICAgIHRoaXMuY29tcGxldGUoKTtcbn07XG5cbi8qKlxuICogQ2FsbGVkIGlmIGEgbG9hZCBwcm9ncmVzcyBldmVudCBmaXJlcyBmb3IgeGhyL3hkci5cbiAqXG4gKiBAZmlyZXMgcHJvZ3Jlc3NcbiAqIEBwYXJhbSBldmVudCB7WE1MSHR0cFJlcXVlc3RQcm9ncmVzc0V2ZW50fEV2ZW50fVxuICogQHByaXZhdGVcbiAqL1xuUmVzb3VyY2UucHJvdG90eXBlLl9vblByb2dyZXNzID0gIGZ1bmN0aW9uIChldmVudCkge1xuICAgIGlmIChldmVudCAmJiBldmVudC5sZW5ndGhDb21wdXRhYmxlKSB7XG4gICAgICAgIHRoaXMuZW1pdCgncHJvZ3Jlc3MnLCB0aGlzLCBldmVudC5sb2FkZWQgLyBldmVudC50b3RhbCk7XG4gICAgfVxufTtcblxuLyoqXG4gKiBDYWxsZWQgaWYgYW4gZXJyb3IgZXZlbnQgZmlyZXMgZm9yIHhoci94ZHIuXG4gKlxuICogQHBhcmFtIGV2ZW50IHtYTUxIdHRwUmVxdWVzdEVycm9yRXZlbnR8RXZlbnR9XG4gKiBAcHJpdmF0ZVxuICovXG5SZXNvdXJjZS5wcm90b3R5cGUuX3hock9uRXJyb3IgPSBmdW5jdGlvbiAoKSB7XG4gICAgdGhpcy5lcnJvciA9IG5ldyBFcnJvcihcbiAgICAgICAgcmVxVHlwZSh0aGlzLnhocikgKyAnIFJlcXVlc3QgZmFpbGVkLiAnICtcbiAgICAgICAgJ1N0YXR1czogJyArIHRoaXMueGhyLnN0YXR1cyArICcsIHRleHQ6IFwiJyArIHRoaXMueGhyLnN0YXR1c1RleHQgKyAnXCInXG4gICAgKTtcblxuICAgIHRoaXMuY29tcGxldGUoKTtcbn07XG5cbi8qKlxuICogQ2FsbGVkIGlmIGFuIGFib3J0IGV2ZW50IGZpcmVzIGZvciB4aHIuXG4gKlxuICogQHBhcmFtIGV2ZW50IHtYTUxIdHRwUmVxdWVzdEFib3J0RXZlbnR9XG4gKiBAcHJpdmF0ZVxuICovXG5SZXNvdXJjZS5wcm90b3R5cGUuX3hock9uQWJvcnQgPSBmdW5jdGlvbiAoKSB7XG4gICAgdGhpcy5lcnJvciA9IG5ldyBFcnJvcihyZXFUeXBlKHRoaXMueGhyKSArICcgUmVxdWVzdCB3YXMgYWJvcnRlZCBieSB0aGUgdXNlci4nKTtcbiAgICB0aGlzLmNvbXBsZXRlKCk7XG59O1xuXG4vKipcbiAqIENhbGxlZCBpZiBhIHRpbWVvdXQgZXZlbnQgZmlyZXMgZm9yIHhkci5cbiAqXG4gKiBAcGFyYW0gZXZlbnQge0V2ZW50fVxuICogQHByaXZhdGVcbiAqL1xuUmVzb3VyY2UucHJvdG90eXBlLl94ZHJPblRpbWVvdXQgPSBmdW5jdGlvbiAoKSB7XG4gICAgdGhpcy5lcnJvciA9IG5ldyBFcnJvcihyZXFUeXBlKHRoaXMueGhyKSArICcgUmVxdWVzdCB0aW1lZCBvdXQuJyk7XG4gICAgdGhpcy5jb21wbGV0ZSgpO1xufTtcblxuLyoqXG4gKiBDYWxsZWQgd2hlbiBkYXRhIHN1Y2Nlc3NmdWxseSBsb2FkcyBmcm9tIGFuIHhoci94ZHIgcmVxdWVzdC5cbiAqXG4gKiBAcGFyYW0gZXZlbnQge1hNTEh0dHBSZXF1ZXN0TG9hZEV2ZW50fEV2ZW50fVxuICogQHByaXZhdGVcbiAqL1xuUmVzb3VyY2UucHJvdG90eXBlLl94aHJPbkxvYWQgPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHhociA9IHRoaXMueGhyLFxuICAgICAgICBzdGF0dXMgPSB4aHIuc3RhdHVzICE9PSB1bmRlZmluZWQgPyB4aHIuc3RhdHVzIDogMjAwOyAvL1hEUiBoYXMgbm8gYC5zdGF0dXNgLCBhc3N1bWUgMjAwLlxuXG4gICAgLy8gc3RhdHVzIGNhbiBiZSAwIHdoZW4gdXNpbmcgdGhlIGZpbGU6Ly8gcHJvdG9jb2wsIGFsc28gY2hlY2sgaWYgYSByZXNwb25zZSB3YXMgZm91bmRcbiAgICBpZiAoc3RhdHVzID09PSAyMDAgfHwgc3RhdHVzID09PSAyMDQgfHwgKHN0YXR1cyA9PT0gMCAmJiB4aHIucmVzcG9uc2VUZXh0Lmxlbmd0aCA+IDApKSB7XG4gICAgICAgIC8vIGlmIHRleHQsIGp1c3QgcmV0dXJuIGl0XG4gICAgICAgIGlmICh0aGlzLnhoclR5cGUgPT09IFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLlRFWFQpIHtcbiAgICAgICAgICAgIHRoaXMuZGF0YSA9IHhoci5yZXNwb25zZVRleHQ7XG4gICAgICAgIH1cbiAgICAgICAgLy8gaWYganNvbiwgcGFyc2UgaW50byBqc29uIG9iamVjdFxuICAgICAgICBlbHNlIGlmICh0aGlzLnhoclR5cGUgPT09IFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkpTT04pIHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgdGhpcy5kYXRhID0gSlNPTi5wYXJzZSh4aHIucmVzcG9uc2VUZXh0KTtcbiAgICAgICAgICAgICAgICB0aGlzLmlzSnNvbiA9IHRydWU7XG4gICAgICAgICAgICB9IGNhdGNoKGUpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmVycm9yID0gbmV3IEVycm9yKCdFcnJvciB0cnlpbmcgdG8gcGFyc2UgbG9hZGVkIGpzb246JywgZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8gaWYgeG1sLCBwYXJzZSBpbnRvIGFuIHhtbCBkb2N1bWVudCBvciBkaXYgZWxlbWVudFxuICAgICAgICBlbHNlIGlmICh0aGlzLnhoclR5cGUgPT09IFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkRPQ1VNRU5UKSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGlmICh3aW5kb3cuRE9NUGFyc2VyKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBkb21wYXJzZXIgPSBuZXcgRE9NUGFyc2VyKCk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGF0YSA9IGRvbXBhcnNlci5wYXJzZUZyb21TdHJpbmcoeGhyLnJlc3BvbnNlVGV4dCwgJ3RleHQveG1sJyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB2YXIgZGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgICAgICAgICAgICAgIGRpdi5pbm5lckhUTUwgPSB4aHIucmVzcG9uc2VUZXh0O1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmRhdGEgPSBkaXY7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXMuaXNYbWwgPSB0cnVlO1xuICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgIHRoaXMuZXJyb3IgPSBuZXcgRXJyb3IoJ0Vycm9yIHRyeWluZyB0byBwYXJzZSBsb2FkZWQgeG1sOicsIGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIG90aGVyIHR5cGVzIGp1c3QgcmV0dXJuIHRoZSByZXNwb25zZVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuZGF0YSA9IHhoci5yZXNwb25zZSB8fCB4aHIucmVzcG9uc2VUZXh0O1xuICAgICAgICB9XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICB0aGlzLmVycm9yID0gbmV3IEVycm9yKCdbJyArIHhoci5zdGF0dXMgKyAnXScgKyB4aHIuc3RhdHVzVGV4dCArICc6JyArIHhoci5yZXNwb25zZVVSTCk7XG4gICAgfVxuXG4gICAgdGhpcy5jb21wbGV0ZSgpO1xufTtcblxuZnVuY3Rpb24gcmVxVHlwZSh4aHIpIHtcbiAgICByZXR1cm4geGhyLnRvU3RyaW5nKCkucmVwbGFjZSgnb2JqZWN0ICcsICcnKTtcbn1cblxuLyoqXG4gKiBTZXRzIHRoZSBgY3Jvc3NPcmlnaW5gIHByb3BlcnR5IGZvciB0aGlzIHJlc291cmNlIGJhc2VkIG9uIGlmIHRoZSB1cmxcbiAqIGZvciB0aGlzIHJlc291cmNlIGlzIGNyb3NzLW9yaWdpbi4gSWYgY3Jvc3NPcmlnaW4gd2FzIG1hbnVhbGx5IHNldCwgdGhpc1xuICogZnVuY3Rpb24gZG9lcyBub3RoaW5nLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0gdXJsIHtzdHJpbmd9IFRoZSB1cmwgdG8gdGVzdC5cbiAqIEBwYXJhbSBbbG9jYXRpb249d2luZG93LmxvY2F0aW9uXSB7b2JqZWN0fSBUaGUgbG9jYXRpb24gb2JqZWN0IHRvIHRlc3QgYWdhaW5zdC5cbiAqIEByZXR1cm4ge3N0cmluZ30gVGhlIGNyb3NzT3JpZ2luIHZhbHVlIHRvIHVzZSAob3IgZW1wdHkgc3RyaW5nIGZvciBub25lKS5cbiAqL1xuUmVzb3VyY2UucHJvdG90eXBlLl9kZXRlcm1pbmVDcm9zc09yaWdpbiA9IGZ1bmN0aW9uICh1cmwsIGxvYykge1xuICAgIC8vIGRhdGE6IGFuZCBqYXZhc2NyaXB0OiB1cmxzIGFyZSBjb25zaWRlcmVkIHNhbWUtb3JpZ2luXG4gICAgaWYgKHVybC5pbmRleE9mKCdkYXRhOicpID09PSAwKSB7XG4gICAgICAgIHJldHVybiAnJztcbiAgICB9XG5cbiAgICAvLyBkZWZhdWx0IGlzIHdpbmRvdy5sb2NhdGlvblxuICAgIGxvYyA9IGxvYyB8fCB3aW5kb3cubG9jYXRpb247XG5cbiAgICBpZiAoIXRlbXBBbmNob3IpIHtcbiAgICAgICAgdGVtcEFuY2hvciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2EnKTtcbiAgICB9XG5cbiAgICAvLyBsZXQgdGhlIGJyb3dzZXIgZGV0ZXJtaW5lIHRoZSBmdWxsIGhyZWYgZm9yIHRoZSB1cmwgb2YgdGhpcyByZXNvdXJjZSBhbmQgdGhlblxuICAgIC8vIHBhcnNlIHdpdGggdGhlIG5vZGUgdXJsIGxpYiwgd2UgY2FuJ3QgdXNlIHRoZSBwcm9wZXJ0aWVzIG9mIHRoZSBhbmNob3IgZWxlbWVudFxuICAgIC8vIGJlY2F1c2UgdGhleSBkb24ndCB3b3JrIGluIElFOSA6KFxuICAgIHRlbXBBbmNob3IuaHJlZiA9IHVybDtcbiAgICB1cmwgPSBfdXJsLnBhcnNlKHRlbXBBbmNob3IuaHJlZik7XG5cbiAgICB2YXIgc2FtZVBvcnQgPSAoIXVybC5wb3J0ICYmIGxvYy5wb3J0ID09PSAnJykgfHwgKHVybC5wb3J0ID09PSBsb2MucG9ydCk7XG5cbiAgICAvLyBpZiBjcm9zcyBvcmlnaW5cbiAgICBpZiAodXJsLmhvc3RuYW1lICE9PSBsb2MuaG9zdG5hbWUgfHwgIXNhbWVQb3J0IHx8IHVybC5wcm90b2NvbCAhPT0gbG9jLnByb3RvY29sKSB7XG4gICAgICAgIHJldHVybiAnYW5vbnltb3VzJztcbiAgICB9XG5cbiAgICByZXR1cm4gJyc7XG59O1xuXG4vKipcbiAqIERldGVybWluZXMgdGhlIHJlc3BvbnNlVHlwZSBvZiBhbiBYSFIgcmVxdWVzdCBiYXNlZCBvbiB0aGUgZXh0ZW5zaW9uIG9mIHRoZVxuICogcmVzb3VyY2UgYmVpbmcgbG9hZGVkLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcmV0dXJuIHtSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRX0gVGhlIHJlc3BvbnNlVHlwZSB0byB1c2UuXG4gKi9cblJlc291cmNlLnByb3RvdHlwZS5fZGV0ZXJtaW5lWGhyVHlwZSA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gUmVzb3VyY2UuX3hoclR5cGVNYXBbdGhpcy5fZ2V0RXh0ZW5zaW9uKCldIHx8IFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLlRFWFQ7XG59O1xuXG5SZXNvdXJjZS5wcm90b3R5cGUuX2RldGVybWluZUxvYWRUeXBlID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBSZXNvdXJjZS5fbG9hZFR5cGVNYXBbdGhpcy5fZ2V0RXh0ZW5zaW9uKCldIHx8IFJlc291cmNlLkxPQURfVFlQRS5YSFI7XG59O1xuXG5SZXNvdXJjZS5wcm90b3R5cGUuX2dldEV4dGVuc2lvbiA9IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgdXJsID0gdGhpcy51cmwsXG4gICAgICAgIGV4dDtcblxuICAgIGlmICh0aGlzLmlzRGF0YVVybCkge1xuICAgICAgICB2YXIgc2xhc2hJbmRleCA9IHVybC5pbmRleE9mKCcvJyk7XG4gICAgICAgIGV4dCA9IHVybC5zdWJzdHJpbmcoc2xhc2hJbmRleCArIDEsIHVybC5pbmRleE9mKCc7Jywgc2xhc2hJbmRleCkpO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgdmFyIHF1ZXJ5U3RhcnQgPSB1cmwuaW5kZXhPZignPycpO1xuICAgICAgICBpZiAocXVlcnlTdGFydCAhPT0gLTEpIHtcbiAgICAgICAgICAgIHVybCA9IHVybC5zdWJzdHJpbmcoMCwgcXVlcnlTdGFydCk7XG4gICAgICAgIH1cblxuICAgICAgICBleHQgPSB1cmwuc3Vic3RyaW5nKHVybC5sYXN0SW5kZXhPZignLicpICsgMSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGV4dDtcbn07XG5cbi8qKlxuICogRGV0ZXJtaW5lcyB0aGUgbWltZSB0eXBlIG9mIGFuIFhIUiByZXF1ZXN0IGJhc2VkIG9uIHRoZSByZXNwb25zZVR5cGUgb2ZcbiAqIHJlc291cmNlIGJlaW5nIGxvYWRlZC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHJldHVybiB7c3RyaW5nfSBUaGUgbWltZSB0eXBlIHRvIHVzZS5cbiAqL1xuUmVzb3VyY2UucHJvdG90eXBlLl9nZXRNaW1lRnJvbVhoclR5cGUgPSBmdW5jdGlvbiAodHlwZSkge1xuICAgIHN3aXRjaCh0eXBlKSB7XG4gICAgICAgIGNhc2UgUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuQlVGRkVSOlxuICAgICAgICAgICAgcmV0dXJuICdhcHBsaWNhdGlvbi9vY3RldC1iaW5hcnknO1xuXG4gICAgICAgIGNhc2UgUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuQkxPQjpcbiAgICAgICAgICAgIHJldHVybiAnYXBwbGljYXRpb24vYmxvYic7XG5cbiAgICAgICAgY2FzZSBSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRS5ET0NVTUVOVDpcbiAgICAgICAgICAgIHJldHVybiAnYXBwbGljYXRpb24veG1sJztcblxuICAgICAgICBjYXNlIFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkpTT046XG4gICAgICAgICAgICByZXR1cm4gJ2FwcGxpY2F0aW9uL2pzb24nO1xuXG4gICAgICAgIGNhc2UgUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuREVGQVVMVDpcbiAgICAgICAgY2FzZSBSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRS5URVhUOlxuICAgICAgICAgICAgLyogZmFsbHMgdGhyb3VnaCAqL1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgcmV0dXJuICd0ZXh0L3BsYWluJztcblxuICAgIH1cbn07XG5cbi8qKlxuICogVGhlIHR5cGVzIG9mIGxvYWRpbmcgYSByZXNvdXJjZSBjYW4gdXNlLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBjb25zdGFudFxuICogQHByb3BlcnR5IHtvYmplY3R9IExPQURfVFlQRVxuICogQHByb3BlcnR5IHtudW1iZXJ9IExPQURfVFlQRS5YSFIgLSBVc2VzIFhNTEh0dHBSZXF1ZXN0IHRvIGxvYWQgdGhlIHJlc291cmNlLlxuICogQHByb3BlcnR5IHtudW1iZXJ9IExPQURfVFlQRS5JTUFHRSAtIFVzZXMgYW4gYEltYWdlYCBvYmplY3QgdG8gbG9hZCB0aGUgcmVzb3VyY2UuXG4gKiBAcHJvcGVydHkge251bWJlcn0gTE9BRF9UWVBFLkFVRElPIC0gVXNlcyBhbiBgQXVkaW9gIG9iamVjdCB0byBsb2FkIHRoZSByZXNvdXJjZS5cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBMT0FEX1RZUEUuVklERU8gLSBVc2VzIGEgYFZpZGVvYCBvYmplY3QgdG8gbG9hZCB0aGUgcmVzb3VyY2UuXG4gKi9cblJlc291cmNlLkxPQURfVFlQRSA9IHtcbiAgICBYSFI6ICAgIDEsXG4gICAgSU1BR0U6ICAyLFxuICAgIEFVRElPOiAgMyxcbiAgICBWSURFTzogIDRcbn07XG5cbi8qKlxuICogVGhlIFhIUiByZWFkeSBzdGF0ZXMsIHVzZWQgaW50ZXJuYWxseS5cbiAqXG4gKiBAc3RhdGljXG4gKiBAY29uc3RhbnRcbiAqIEBwcm9wZXJ0eSB7b2JqZWN0fSBYSFJfUkVBRFlfU1RBVEVcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBYSFJfUkVBRFlfU1RBVEUuVU5TRU5UIC0gb3BlbigpaGFzIG5vdCBiZWVuIGNhbGxlZCB5ZXQuXG4gKiBAcHJvcGVydHkge251bWJlcn0gWEhSX1JFQURZX1NUQVRFLk9QRU5FRCAtIHNlbmQoKWhhcyBub3QgYmVlbiBjYWxsZWQgeWV0LlxuICogQHByb3BlcnR5IHtudW1iZXJ9IFhIUl9SRUFEWV9TVEFURS5IRUFERVJTX1JFQ0VJVkVEIC0gc2VuZCgpIGhhcyBiZWVuIGNhbGxlZCwgYW5kIGhlYWRlcnMgYW5kIHN0YXR1cyBhcmUgYXZhaWxhYmxlLlxuICogQHByb3BlcnR5IHtudW1iZXJ9IFhIUl9SRUFEWV9TVEFURS5MT0FESU5HIC0gRG93bmxvYWRpbmc7IHJlc3BvbnNlVGV4dCBob2xkcyBwYXJ0aWFsIGRhdGEuXG4gKiBAcHJvcGVydHkge251bWJlcn0gWEhSX1JFQURZX1NUQVRFLkRPTkUgLSBUaGUgb3BlcmF0aW9uIGlzIGNvbXBsZXRlLlxuICovXG5SZXNvdXJjZS5YSFJfUkVBRFlfU1RBVEUgPSB7XG4gICAgVU5TRU5UOiAwLFxuICAgIE9QRU5FRDogMSxcbiAgICBIRUFERVJTX1JFQ0VJVkVEOiAyLFxuICAgIExPQURJTkc6IDMsXG4gICAgRE9ORTogNFxufTtcblxuLyoqXG4gKiBUaGUgWEhSIHJlYWR5IHN0YXRlcywgdXNlZCBpbnRlcm5hbGx5LlxuICpcbiAqIEBzdGF0aWNcbiAqIEBjb25zdGFudFxuICogQHByb3BlcnR5IHtvYmplY3R9IFhIUl9SRVNQT05TRV9UWVBFXG4gKiBAcHJvcGVydHkge3N0cmluZ30gWEhSX1JFU1BPTlNFX1RZUEUuREVGQVVMVCAtIGRlZmF1bHRzIHRvIHRleHRcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBYSFJfUkVTUE9OU0VfVFlQRS5CVUZGRVIgLSBBcnJheUJ1ZmZlclxuICogQHByb3BlcnR5IHtzdHJpbmd9IFhIUl9SRVNQT05TRV9UWVBFLkJMT0IgLSBCbG9iXG4gKiBAcHJvcGVydHkge3N0cmluZ30gWEhSX1JFU1BPTlNFX1RZUEUuRE9DVU1FTlQgLSBEb2N1bWVudFxuICogQHByb3BlcnR5IHtzdHJpbmd9IFhIUl9SRVNQT05TRV9UWVBFLkpTT04gLSBPYmplY3RcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBYSFJfUkVTUE9OU0VfVFlQRS5URVhUIC0gU3RyaW5nXG4gKi9cblJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFID0ge1xuICAgIERFRkFVTFQ6ICAgICd0ZXh0JyxcbiAgICBCVUZGRVI6ICAgICAnYXJyYXlidWZmZXInLFxuICAgIEJMT0I6ICAgICAgICdibG9iJyxcbiAgICBET0NVTUVOVDogICAnZG9jdW1lbnQnLFxuICAgIEpTT046ICAgICAgICdqc29uJyxcbiAgICBURVhUOiAgICAgICAndGV4dCdcbn07XG5cblJlc291cmNlLl9sb2FkVHlwZU1hcCA9IHtcbiAgICAnZ2lmJzogICAgICBSZXNvdXJjZS5MT0FEX1RZUEUuSU1BR0UsXG4gICAgJ3BuZyc6ICAgICAgUmVzb3VyY2UuTE9BRF9UWVBFLklNQUdFLFxuICAgICdibXAnOiAgICAgIFJlc291cmNlLkxPQURfVFlQRS5JTUFHRSxcbiAgICAnanBnJzogICAgICBSZXNvdXJjZS5MT0FEX1RZUEUuSU1BR0UsXG4gICAgJ2pwZWcnOiAgICAgUmVzb3VyY2UuTE9BRF9UWVBFLklNQUdFLFxuICAgICd0aWYnOiAgICAgIFJlc291cmNlLkxPQURfVFlQRS5JTUFHRSxcbiAgICAndGlmZic6ICAgICBSZXNvdXJjZS5MT0FEX1RZUEUuSU1BR0UsXG4gICAgJ3dlYnAnOiAgICAgUmVzb3VyY2UuTE9BRF9UWVBFLklNQUdFLFxuICAgICd0Z2EnOiAgICAgIFJlc291cmNlLkxPQURfVFlQRS5JTUFHRVxufTtcblxuUmVzb3VyY2UuX3hoclR5cGVNYXAgPSB7XG4gICAgLy8geG1sXG4gICAgJ3hodG1sJzogICAgUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuRE9DVU1FTlQsXG4gICAgJ2h0bWwnOiAgICAgUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuRE9DVU1FTlQsXG4gICAgJ2h0bSc6ICAgICAgUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuRE9DVU1FTlQsXG4gICAgJ3htbCc6ICAgICAgUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuRE9DVU1FTlQsXG4gICAgJ3RteCc6ICAgICAgUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuRE9DVU1FTlQsXG4gICAgJ3RzeCc6ICAgICAgUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuRE9DVU1FTlQsXG4gICAgJ3N2Zyc6ICAgICAgUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuRE9DVU1FTlQsXG5cbiAgICAvLyBpbWFnZXNcbiAgICAnZ2lmJzogICAgICBSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRS5CTE9CLFxuICAgICdwbmcnOiAgICAgIFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkJMT0IsXG4gICAgJ2JtcCc6ICAgICAgUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuQkxPQixcbiAgICAnanBnJzogICAgICBSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRS5CTE9CLFxuICAgICdqcGVnJzogICAgIFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkJMT0IsXG4gICAgJ3RpZic6ICAgICAgUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuQkxPQixcbiAgICAndGlmZic6ICAgICBSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRS5CTE9CLFxuICAgICd3ZWJwJzogICAgIFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkJMT0IsXG4gICAgJ3RnYSc6ICAgICAgUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuQkxPQixcblxuICAgIC8vIGpzb25cbiAgICAnanNvbic6ICAgICBSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRS5KU09OLFxuXG4gICAgLy8gdGV4dFxuICAgICd0ZXh0JzogICAgIFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLlRFWFQsXG4gICAgJ3R4dCc6ICAgICAgUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuVEVYVFxufTtcblxuLyoqXG4gKiBTZXRzIHRoZSBsb2FkIHR5cGUgdG8gYmUgdXNlZCBmb3IgYSBzcGVjaWZpYyBleHRlbnNpb24uXG4gKlxuICogQHN0YXRpY1xuICogQHBhcmFtIGV4dG5hbWUge3N0cmluZ30gVGhlIGV4dGVuc2lvbiB0byBzZXQgdGhlIHR5cGUgZm9yLCBlLmcuIFwicG5nXCIgb3IgXCJmbnRcIlxuICogQHBhcmFtIGxvYWRUeXBlIHtSZXNvdXJjZS5MT0FEX1RZUEV9IFRoZSBsb2FkIHR5cGUgdG8gc2V0IGl0IHRvLlxuICovXG5SZXNvdXJjZS5zZXRFeHRlbnNpb25Mb2FkVHlwZSA9IGZ1bmN0aW9uIChleHRuYW1lLCBsb2FkVHlwZSkge1xuICAgIHNldEV4dE1hcChSZXNvdXJjZS5fbG9hZFR5cGVNYXAsIGV4dG5hbWUsIGxvYWRUeXBlKTtcbn07XG5cbi8qKlxuICogU2V0cyB0aGUgbG9hZCB0eXBlIHRvIGJlIHVzZWQgZm9yIGEgc3BlY2lmaWMgZXh0ZW5zaW9uLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBwYXJhbSBleHRuYW1lIHtzdHJpbmd9IFRoZSBleHRlbnNpb24gdG8gc2V0IHRoZSB0eXBlIGZvciwgZS5nLiBcInBuZ1wiIG9yIFwiZm50XCJcbiAqIEBwYXJhbSB4aHJUeXBlIHtSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRX0gVGhlIHhociB0eXBlIHRvIHNldCBpdCB0by5cbiAqL1xuUmVzb3VyY2Uuc2V0RXh0ZW5zaW9uWGhyVHlwZSA9IGZ1bmN0aW9uIChleHRuYW1lLCB4aHJUeXBlKSB7XG4gICAgc2V0RXh0TWFwKFJlc291cmNlLl94aHJUeXBlTWFwLCBleHRuYW1lLCB4aHJUeXBlKTtcbn07XG5cbmZ1bmN0aW9uIHNldEV4dE1hcChtYXAsIGV4dG5hbWUsIHZhbCkge1xuICAgIGlmIChleHRuYW1lICYmIGV4dG5hbWUuaW5kZXhPZignLicpID09PSAwKSB7XG4gICAgICAgIGV4dG5hbWUgPSBleHRuYW1lLnN1YnN0cmluZygxKTtcbiAgICB9XG5cbiAgICBpZiAoIWV4dG5hbWUpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIG1hcFtleHRuYW1lXSA9IHZhbDtcbn1cbiIsIm1vZHVsZS5leHBvcnRzID0ge1xuXG4gICAgLy8gcHJpdmF0ZSBwcm9wZXJ0eVxuICAgIF9rZXlTdHI6IFwiQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkrLz1cIixcblxuICAgIGVuY29kZUJpbmFyeTogZnVuY3Rpb24gKGlucHV0KSB7XG4gICAgICAgIHZhciBvdXRwdXQgPSBcIlwiO1xuICAgICAgICB2YXIgYnl0ZWJ1ZmZlcjtcbiAgICAgICAgdmFyIGVuY29kZWRDaGFySW5kZXhlcyA9IG5ldyBBcnJheSg0KTtcbiAgICAgICAgdmFyIGlueCA9IDA7XG4gICAgICAgIHZhciBqbnggPSAwO1xuICAgICAgICB2YXIgcGFkZGluZ0J5dGVzID0gMDtcblxuICAgICAgICB3aGlsZSAoaW54IDwgaW5wdXQubGVuZ3RoKSB7XG4gICAgICAgICAgICAvLyBGaWxsIGJ5dGUgYnVmZmVyIGFycmF5XG4gICAgICAgICAgICBieXRlYnVmZmVyID0gbmV3IEFycmF5KDMpO1xuICAgICAgICAgICAgZm9yIChqbnggPSAwOyBqbnggPCBieXRlYnVmZmVyLmxlbmd0aDsgam54KyspIHtcbiAgICAgICAgICAgICAgICBpZiAoaW54IDwgaW5wdXQubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIHRocm93IGF3YXkgaGlnaC1vcmRlciBieXRlLCBhcyBkb2N1bWVudGVkIGF0OlxuICAgICAgICAgICAgICAgICAgICAvLyBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9Fbi9Vc2luZ19YTUxIdHRwUmVxdWVzdCNIYW5kbGluZ19iaW5hcnlfZGF0YVxuICAgICAgICAgICAgICAgICAgICBieXRlYnVmZmVyW2pueF0gPSBpbnB1dC5jaGFyQ29kZUF0KGlueCsrKSAmIDB4ZmY7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBieXRlYnVmZmVyW2pueF0gPSAwO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gR2V0IGVhY2ggZW5jb2RlZCBjaGFyYWN0ZXIsIDYgYml0cyBhdCBhIHRpbWVcbiAgICAgICAgICAgIC8vIGluZGV4IDE6IGZpcnN0IDYgYml0c1xuICAgICAgICAgICAgZW5jb2RlZENoYXJJbmRleGVzWzBdID0gYnl0ZWJ1ZmZlclswXSA+PiAyO1xuICAgICAgICAgICAgLy8gaW5kZXggMjogc2Vjb25kIDYgYml0cyAoMiBsZWFzdCBzaWduaWZpY2FudCBiaXRzIGZyb20gaW5wdXQgYnl0ZSAxICsgNCBtb3N0IHNpZ25pZmljYW50IGJpdHMgZnJvbSBieXRlIDIpXG4gICAgICAgICAgICBlbmNvZGVkQ2hhckluZGV4ZXNbMV0gPSAoKGJ5dGVidWZmZXJbMF0gJiAweDMpIDw8IDQpIHwgKGJ5dGVidWZmZXJbMV0gPj4gNCk7XG4gICAgICAgICAgICAvLyBpbmRleCAzOiB0aGlyZCA2IGJpdHMgKDQgbGVhc3Qgc2lnbmlmaWNhbnQgYml0cyBmcm9tIGlucHV0IGJ5dGUgMiArIDIgbW9zdCBzaWduaWZpY2FudCBiaXRzIGZyb20gYnl0ZSAzKVxuICAgICAgICAgICAgZW5jb2RlZENoYXJJbmRleGVzWzJdID0gKChieXRlYnVmZmVyWzFdICYgMHgwZikgPDwgMikgfCAoYnl0ZWJ1ZmZlclsyXSA+PiA2KTtcbiAgICAgICAgICAgIC8vIGluZGV4IDM6IGZvcnRoIDYgYml0cyAoNiBsZWFzdCBzaWduaWZpY2FudCBiaXRzIGZyb20gaW5wdXQgYnl0ZSAzKVxuICAgICAgICAgICAgZW5jb2RlZENoYXJJbmRleGVzWzNdID0gYnl0ZWJ1ZmZlclsyXSAmIDB4M2Y7XG5cbiAgICAgICAgICAgIC8vIERldGVybWluZSB3aGV0aGVyIHBhZGRpbmcgaGFwcGVuZWQsIGFuZCBhZGp1c3QgYWNjb3JkaW5nbHlcbiAgICAgICAgICAgIHBhZGRpbmdCeXRlcyA9IGlueCAtIChpbnB1dC5sZW5ndGggLSAxKTtcbiAgICAgICAgICAgIHN3aXRjaCAocGFkZGluZ0J5dGVzKSB7XG4gICAgICAgICAgICAgICAgY2FzZSAyOlxuICAgICAgICAgICAgICAgICAgICAvLyBTZXQgbGFzdCAyIGNoYXJhY3RlcnMgdG8gcGFkZGluZyBjaGFyXG4gICAgICAgICAgICAgICAgICAgIGVuY29kZWRDaGFySW5kZXhlc1szXSA9IDY0O1xuICAgICAgICAgICAgICAgICAgICBlbmNvZGVkQ2hhckluZGV4ZXNbMl0gPSA2NDtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICAgICAgICAgIC8vIFNldCBsYXN0IGNoYXJhY3RlciB0byBwYWRkaW5nIGNoYXJcbiAgICAgICAgICAgICAgICAgICAgZW5jb2RlZENoYXJJbmRleGVzWzNdID0gNjQ7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7IC8vIE5vIHBhZGRpbmcgLSBwcm9jZWVkXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIE5vdyB3ZSB3aWxsIGdyYWIgZWFjaCBhcHByb3ByaWF0ZSBjaGFyYWN0ZXIgb3V0IG9mIG91ciBrZXlzdHJpbmdcbiAgICAgICAgICAgIC8vIGJhc2VkIG9uIG91ciBpbmRleCBhcnJheSBhbmQgYXBwZW5kIGl0IHRvIHRoZSBvdXRwdXQgc3RyaW5nXG4gICAgICAgICAgICBmb3IgKGpueCA9IDA7IGpueCA8IGVuY29kZWRDaGFySW5kZXhlcy5sZW5ndGg7IGpueCsrKSB7XG4gICAgICAgICAgICAgICAgb3V0cHV0ICs9IHRoaXMuX2tleVN0ci5jaGFyQXQoZW5jb2RlZENoYXJJbmRleGVzW2pueF0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBvdXRwdXQ7XG4gICAgfVxufTtcbiIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9Mb2FkZXInKTtcblxubW9kdWxlLmV4cG9ydHMuUmVzb3VyY2UgPSByZXF1aXJlKCcuL1Jlc291cmNlJyk7XG5cbm1vZHVsZS5leHBvcnRzLm1pZGRsZXdhcmUgPSB7XG4gICAgY2FjaGluZzoge1xuICAgICAgICBtZW1vcnk6IHJlcXVpcmUoJy4vbWlkZGxld2FyZXMvY2FjaGluZy9tZW1vcnknKVxuICAgIH0sXG4gICAgcGFyc2luZzoge1xuICAgICAgICBibG9iOiByZXF1aXJlKCcuL21pZGRsZXdhcmVzL3BhcnNpbmcvYmxvYicpXG4gICAgfVxufTtcbiIsIi8vIGEgc2ltcGxlIGluLW1lbW9yeSBjYWNoZSBmb3IgcmVzb3VyY2VzXG52YXIgY2FjaGUgPSB7fTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChyZXNvdXJjZSwgbmV4dCkge1xuICAgICAgICAvLyBpZiBjYWNoZWQsIHRoZW4gc2V0IGRhdGEgYW5kIGNvbXBsZXRlIHRoZSByZXNvdXJjZVxuICAgICAgICBpZiAoY2FjaGVbcmVzb3VyY2UudXJsXSkge1xuICAgICAgICAgICAgcmVzb3VyY2UuZGF0YSA9IGNhY2hlW3Jlc291cmNlLnVybF07XG4gICAgICAgICAgICByZXNvdXJjZS5jb21wbGV0ZSgpO1xuICAgICAgICB9XG4gICAgICAgIC8vIGlmIG5vdCBjYWNoZWQsIHdhaXQgZm9yIGNvbXBsZXRlIGFuZCBzdG9yZSBpdCBpbiB0aGUgY2FjaGUuXG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcmVzb3VyY2Uub25jZSgnY29tcGxldGUnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICBjYWNoZVt0aGlzLnVybF0gPSB0aGlzLmRhdGE7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBcbiAgICAgICAgbmV4dCgpO1xuICAgIH07XG59O1xuIiwidmFyIFJlc291cmNlID0gcmVxdWlyZSgnLi4vLi4vUmVzb3VyY2UnKSxcbiAgICBiNjQgPSByZXF1aXJlKCcuLi8uLi9iNjQnKTtcblxud2luZG93LlVSTCA9IHdpbmRvdy5VUkwgfHwgd2luZG93LndlYmtpdFVSTDtcblxuLy8gYSBtaWRkbGV3YXJlIGZvciB0cmFuc2Zvcm1pbmcgWEhSIGxvYWRlZCBCbG9icyBpbnRvIG1vcmUgdXNlZnVsIG9iamVjdHNcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChyZXNvdXJjZSwgbmV4dCkge1xuICAgICAgICBpZiAoIXJlc291cmNlLmRhdGEpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXh0KCk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBpZiB0aGlzIHdhcyBhbiBYSFIgbG9hZCBvZiBhIGJsb2JcbiAgICAgICAgaWYgKHJlc291cmNlLnhociAmJiByZXNvdXJjZS54aHJUeXBlID09PSBSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRS5CTE9CKSB7XG4gICAgICAgICAgICAvLyBpZiB0aGVyZSBpcyBubyBibG9iIHN1cHBvcnQgd2UgcHJvYmFibHkgZ290IGEgYmluYXJ5IHN0cmluZyBiYWNrXG4gICAgICAgICAgICBpZiAoIXdpbmRvdy5CbG9iIHx8IHR5cGVvZiByZXNvdXJjZS5kYXRhID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgICAgIHZhciB0eXBlID0gcmVzb3VyY2UueGhyLmdldFJlc3BvbnNlSGVhZGVyKCdjb250ZW50LXR5cGUnKTtcblxuICAgICAgICAgICAgICAgIC8vIHRoaXMgaXMgYW4gaW1hZ2UsIGNvbnZlcnQgdGhlIGJpbmFyeSBzdHJpbmcgaW50byBhIGRhdGEgdXJsXG4gICAgICAgICAgICAgICAgaWYgKHR5cGUgJiYgdHlwZS5pbmRleE9mKCdpbWFnZScpID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc291cmNlLmRhdGEgPSBuZXcgSW1hZ2UoKTtcbiAgICAgICAgICAgICAgICAgICAgcmVzb3VyY2UuZGF0YS5zcmMgPSAnZGF0YTonICsgdHlwZSArICc7YmFzZTY0LCcgKyBiNjQuZW5jb2RlQmluYXJ5KHJlc291cmNlLnhoci5yZXNwb25zZVRleHQpO1xuXG4gICAgICAgICAgICAgICAgICAgIHJlc291cmNlLmlzSW1hZ2UgPSB0cnVlO1xuXG4gICAgICAgICAgICAgICAgICAgIC8vIHdhaXQgdW50aWwgdGhlIGltYWdlIGxvYWRzIGFuZCB0aGVuIGNhbGxiYWNrXG4gICAgICAgICAgICAgICAgICAgIHJlc291cmNlLmRhdGEub25sb2FkID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVzb3VyY2UuZGF0YS5vbmxvYWQgPSBudWxsO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBuZXh0KCk7XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gaWYgY29udGVudCB0eXBlIHNheXMgdGhpcyBpcyBhbiBpbWFnZSwgdGhlbiB3ZSBzaG91bGQgdHJhbnNmb3JtIHRoZSBibG9iIGludG8gYW4gSW1hZ2Ugb2JqZWN0XG4gICAgICAgICAgICBlbHNlIGlmIChyZXNvdXJjZS5kYXRhLnR5cGUuaW5kZXhPZignaW1hZ2UnKSA9PT0gMCkge1xuICAgICAgICAgICAgICAgIHZhciBzcmMgPSBVUkwuY3JlYXRlT2JqZWN0VVJMKHJlc291cmNlLmRhdGEpO1xuXG4gICAgICAgICAgICAgICAgcmVzb3VyY2UuYmxvYiA9IHJlc291cmNlLmRhdGE7XG4gICAgICAgICAgICAgICAgcmVzb3VyY2UuZGF0YSA9IG5ldyBJbWFnZSgpO1xuICAgICAgICAgICAgICAgIHJlc291cmNlLmRhdGEuc3JjID0gc3JjO1xuXG4gICAgICAgICAgICAgICAgcmVzb3VyY2UuaXNJbWFnZSA9IHRydWU7XG5cbiAgICAgICAgICAgICAgICAvLyBjbGVhbnVwIHRoZSBubyBsb25nZXIgdXNlZCBibG9iIGFmdGVyIHRoZSBpbWFnZSBsb2Fkc1xuICAgICAgICAgICAgICAgIHJlc291cmNlLmRhdGEub25sb2FkID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICBVUkwucmV2b2tlT2JqZWN0VVJMKHNyYyk7XG4gICAgICAgICAgICAgICAgICAgIHJlc291cmNlLmRhdGEub25sb2FkID0gbnVsbDtcblxuICAgICAgICAgICAgICAgICAgICBuZXh0KCk7XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIG5leHQoKTtcbiAgICAgICAgfVxuICAgIH07XG59O1xuIiwibW9kdWxlLmV4cG9ydHM9e1xuICBcIm5hbWVcIjogXCJwaXhpLmpzXCIsXG4gIFwidmVyc2lvblwiOiBcIjMuMC4xMC1kZXZcIixcbiAgXCJkZXNjcmlwdGlvblwiOiBcIlBpeGkuanMgaXMgYSBmYXN0IGxpZ2h0d2VpZ2h0IDJEIGxpYnJhcnkgdGhhdCB3b3JrcyBhY3Jvc3MgYWxsIGRldmljZXMuXCIsXG4gIFwiYXV0aG9yXCI6IFwiTWF0IEdyb3Zlc1wiLFxuICBcImNvbnRyaWJ1dG9yc1wiOiBbXG4gICAgXCJDaGFkIEVuZ2xlciA8Y2hhZEBwYW50aGVyZGV2LmNvbT5cIixcbiAgICBcIlJpY2hhcmQgRGF2ZXkgPHJkYXZleUBnbWFpbC5jb20+XCJcbiAgXSxcbiAgXCJtYWluXCI6IFwiLi9zcmMvaW5kZXguanNcIixcbiAgXCJob21lcGFnZVwiOiBcImh0dHA6Ly9nb29kYm95ZGlnaXRhbC5jb20vXCIsXG4gIFwiYnVnc1wiOiBcImh0dHBzOi8vZ2l0aHViLmNvbS9waXhpanMvcGl4aS5qcy9pc3N1ZXNcIixcbiAgXCJsaWNlbnNlXCI6IFwiTUlUXCIsXG4gIFwicmVwb3NpdG9yeVwiOiB7XG4gICAgXCJ0eXBlXCI6IFwiZ2l0XCIsXG4gICAgXCJ1cmxcIjogXCJodHRwczovL2dpdGh1Yi5jb20vcGl4aWpzL3BpeGkuanMuZ2l0XCJcbiAgfSxcbiAgXCJzY3JpcHRzXCI6IHtcbiAgICBcInN0YXJ0XCI6IFwiZ3VscCAmJiBndWxwIHdhdGNoXCIsXG4gICAgXCJ0ZXN0XCI6IFwiZ3VscCAmJiB0ZXN0ZW0gY2lcIixcbiAgICBcImJ1aWxkXCI6IFwiZ3VscFwiLFxuICAgIFwiZG9jc1wiOiBcImpzZG9jIC1jIC4vZ3VscC91dGlsL2pzZG9jLmNvbmYuanNvbiAtUiBSRUFETUUubWRcIlxuICB9LFxuICBcImZpbGVzXCI6IFtcbiAgICBcImJpbi9cIixcbiAgICBcInNyYy9cIixcbiAgICBcIkNPTlRSSUJVVElORy5tZFwiLFxuICAgIFwiTElDRU5TRVwiLFxuICAgIFwicGFja2FnZS5qc29uXCIsXG4gICAgXCJSRUFETUUubWRcIlxuICBdLFxuICBcImRlcGVuZGVuY2llc1wiOiB7XG4gICAgXCJhc3luY1wiOiBcIl4xLjUuMFwiLFxuICAgIFwiYnJmc1wiOiBcIl4xLjQuMVwiLFxuICAgIFwiZWFyY3V0XCI6IFwiXjIuMC43XCIsXG4gICAgXCJldmVudGVtaXR0ZXIzXCI6IFwiXjEuMS4xXCIsXG4gICAgXCJvYmplY3QtYXNzaWduXCI6IFwiXjQuMC4xXCIsXG4gICAgXCJwaXhpLWdsLWNvcmVcIjogXCJnaXQraHR0cHM6Ly9naXRodWIuY29tL0dvb2RCb3lEaWdpdGFsL3BpeGktZ2wtY29yZS5naXRcIixcbiAgICBcInJlc291cmNlLWxvYWRlclwiOiBcIl4xLjYuNFwiXG4gIH0sXG4gIFwiZGV2RGVwZW5kZW5jaWVzXCI6IHtcbiAgICBcImJyb3dzZXJpZnlcIjogXCJeMTEuMS4wXCIsXG4gICAgXCJjaGFpXCI6IFwiXjMuMi4wXCIsXG4gICAgXCJkZWxcIjogXCJeMi4wLjJcIixcbiAgICBcImd1bHBcIjogXCJeMy45LjBcIixcbiAgICBcImd1bHAtY2FjaGVkXCI6IFwiXjEuMS4wXCIsXG4gICAgXCJndWxwLWNvbmNhdFwiOiBcIl4yLjYuMFwiLFxuICAgIFwiZ3VscC1kZWJ1Z1wiOiBcIl4yLjEuMFwiLFxuICAgIFwiZ3VscC1oZWFkZXJcIjogXCJeMS43LjFcIixcbiAgICBcImd1bHAtanNoaW50XCI6IFwiXjEuMTEuMlwiLFxuICAgIFwiZ3VscC1taXJyb3JcIjogXCJeMC40LjBcIixcbiAgICBcImd1bHAtcGx1bWJlclwiOiBcIl4xLjAuMVwiLFxuICAgIFwiZ3VscC1yZW5hbWVcIjogXCJeMS4yLjJcIixcbiAgICBcImd1bHAtc291cmNlbWFwc1wiOiBcIl4xLjUuMlwiLFxuICAgIFwiZ3VscC11Z2xpZnlcIjogXCJeMS40LjFcIixcbiAgICBcImd1bHAtdXRpbFwiOiBcIl4zLjAuNlwiLFxuICAgIFwiamFndWFyanMtanNkb2NcIjogXCJnaXQraHR0cHM6Ly9naXRodWIuY29tL2Rhdmlkc2hpbWpzL2phZ3VhcmpzLWpzZG9jLmdpdFwiLFxuICAgIFwianNkb2NcIjogXCJeMy4zLjJcIixcbiAgICBcImpzaGludC1zdW1tYXJ5XCI6IFwiXjAuNC4wXCIsXG4gICAgXCJtaW5pbWlzdFwiOiBcIl4xLjIuMFwiLFxuICAgIFwibW9jaGFcIjogXCJeMi4zLjJcIixcbiAgICBcInJlcXVpcmUtZGlyXCI6IFwiXjAuMy4wXCIsXG4gICAgXCJydW4tc2VxdWVuY2VcIjogXCJeMS4xLjJcIixcbiAgICBcInRlc3RlbVwiOiBcIl4wLjkuNFwiLFxuICAgIFwidmlueWwtYnVmZmVyXCI6IFwiXjEuMC4wXCIsXG4gICAgXCJ2aW55bC1zb3VyY2Utc3RyZWFtXCI6IFwiXjEuMS4wXCIsXG4gICAgXCJ3YXRjaGlmeVwiOiBcIl4zLjQuMFwiXG4gIH0sXG4gIFwiYnJvd3NlcmlmeVwiOiB7XG4gICAgXCJ0cmFuc2Zvcm1cIjogW1xuICAgICAgXCJicmZzXCJcbiAgICBdXG4gIH1cbn1cbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vY29yZScpO1xuXG4vLyBhZGQgc29tZSBleHRyYSB2YXJpYWJsZXMgdG8gdGhlIGNvbnRhaW5lci4uXG5PYmplY3QuYXNzaWduKFxuICAgIGNvcmUuRGlzcGxheU9iamVjdC5wcm90b3R5cGUsXG4gICAgcmVxdWlyZSgnLi9hY2Nlc3NpYmxlVGFyZ2V0Jylcbik7XG5cblxuLyoqXG4gKiBUaGUgQWNjZXNzaWJpbGl0eSBtYW5hZ2VyIHJlYWNyZWF0ZXMgdGhlIGFiaWxpdHkgdG8gdGFiIGFuZCBhbmQgaGF2ZSBjb250ZW50IHJlYWQgYnkgc2NyZWVuIHJlYWRlcnMuIFRoaXMgaXMgdmVyeSBpbXBvcnRhbnQgYXMgaXQgY2FuIHBvc3NpYmx5IGhlbHAgcGVvcGxlIHdpdGggZGlzYWJpbGl0aWVzIGFjY2VzcyBwaXhpIGNvbnRlbnQuXG4gKiBNdWNoIGxpa2UgaW50ZXJhY3Rpb24gYW55IERpc3BsYXlPYmplY3QgY2FuIGJlIG1hZGUgYWNjZXNzaWJsZS4gVGhpcyBtYW5hZ2VyIHdpbGwgbWFwIHRoZSBldmVudHMgYXMgaWYgdGhlIG1vdXNlIHdhcyBiZWluZyB1c2VkLCBtaW5pbWl6aW5nIHRoZSBlZmZlcm90IHJlcXVpcmVkIHRvIGltcGxlbWVudC5cbiAqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuQ2FudmFzUmVuZGVyZXJ8UElYSS5XZWJHTFJlbmRlcmVyfSBBIHJlZmVyZW5jZSB0byB0aGUgY3VycmVudCByZW5kZXJlclxuICovXG5mdW5jdGlvbiBBY2Nlc3NpYmlsaXR5TWFuYWdlcihyZW5kZXJlcilcbntcblx0Ly8gZmlyc3Qgd2UgY3JlYXRlIGEgZGl2IHRoYXQgd2lsbCBzaXQgb3ZlciB0aGUgcGl4aSBlbGVtZW50LiBUaGlzIGlzIHdoZXJlIHRoZSBkaXYgb3ZlcmxheXMgd2lsbCBnby5cbiAgICB2YXIgZGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgXG4gICAgZGl2LnN0eWxlLndpZHRoID0gMTAwICsgJ3B4JztcbiAgICBkaXYuc3R5bGUuaGVpZ2h0ID0gMTAwICsgJ3B4JztcbiAgICBkaXYuc3R5bGUucG9zaXRpb24gPSAnYWJzb2x1dGUnO1xuICAgIGRpdi5zdHlsZS50b3AgPSAwO1xuICAgIGRpdi5zdHlsZS5sZWZ0ID0gMDtcbiAgIC8vXG4gICAgZGl2LnN0eWxlLnpJbmRleCA9IDI7XG4gICBcdFxuICAgXHQvKipcbiAgIFx0ICogVGhpcyBpcyB0aGUgZG9tIGVsZW1lbnQgdGhhdCB3aWxsIHNpdCBvdmVyIHRoZSBwaXhpIGVsZW1lbnQuIFRoaXMgaXMgd2hlcmUgdGhlIGRpdiBvdmVybGF5cyB3aWxsIGdvLlxuICAgXHQgKiBcbiAgIFx0ICogQHR5cGUge0hUTUxFbGVtZW50fVxuICAgXHQgKiBAcHJpdmF0ZVxuICAgXHQgKi9cbiAgIFx0dGhpcy5kaXYgPSBkaXY7XG5cbiAgIFx0LyoqXG4gICBcdCAqIEEgc2ltcGxlIHBvb2wgZm9yIHN0b3JpbmcgZGl2cy5cbiAgIFx0ICogXG4gICBcdCAqIEB0eXBlIHtBcnJheX1cbiAgIFx0ICogQHByaXZhdGVcbiAgIFx0ICovXG4gXHR0aGlzLnBvb2wgPSBbXTtcblxuIFx0LyoqXG4gXHQgKiBUaGlzIGlzIGEgdGljayB1c2VkIHRvIGNoZWNrIGlmIGFuIG9iamVjdCBpcyBubyBsb25nZXIgYmVpbmcgcmVuZGVyZWQuXG4gXHQgKiBcbiBcdCAqIEB0eXBlIHtOdW1iZXJ9XG4gXHQgKiBAcHJpdmF0ZVxuIFx0ICovXG4gICBcdHRoaXMucmVuZGVySWQgPSAwO1xuXG4gICBcdC8qKlxuICAgXHQgKiBTZXR0aW5nIHRoaXMgdG8gdHJ1ZSB3aWxsIHZpc3VhbGx5IHNob3cgdGhlIGRpdnNcbiAgIFx0ICogXG4gICBcdCAqIEB0eXBlIHtCb29sZWFufVxuICAgXHQgKi9cbiAgIFx0dGhpcy5kZWJ1ZyA9IGZhbHNlO1xuXG4gIFx0LyoqXG4gICAgICogVGhlIHJlbmRlcmVyIHRoaXMgYWNjZXNzaWJpbGl0eSBtYW5hZ2VyIHdvcmtzIGZvci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuU3lzdGVtUmVuZGVyZXJ9XG4gICAgICovXG4gICBcdHRoaXMucmVuZGVyZXIgPSByZW5kZXJlcjtcblxuICAgXHQvKipcbiAgICAgKiBUaGUgYXJyYXkgb2YgY3VycmVudGx5IGFjdGl2ZSBhY2Nlc3NpYmxlIGl0ZW1zLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7QXJyYXl9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgIFx0dGhpcy5jaGlsZHJlbiA9IFtdO1xuICAgXHRcbiAgIFx0LyoqXG4gICAgICogcHJlIGJpbmQgdGhlIGZ1bmN0aW9ucy4uXG4gICAgICovXG4gICBcdHRoaXMuX29uS2V5RG93biA9IHRoaXMuX29uS2V5RG93bi5iaW5kKHRoaXMpO1xuICAgXHR0aGlzLl9vbk1vdXNlTW92ZSA9IHRoaXMuX29uTW91c2VNb3ZlLmJpbmQodGhpcyk7XG4gICBcdFxuICAgXHQvKipcbiAgICAgKiBzdG9yZXMgdGhlIHN0YXRlIG9mIHRoZSBtYW5hZ2VyLiBJZiB0aGVyZSBhcmUgbm8gYWNjZXNzaWJsZSBvYmplY3RzIG9yIHRoZSBtb3VzZSBpcyBtb3ZpbmcgdGhlIHdpbGwgYmUgZmFsc2UuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtBcnJheX1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgXHR0aGlzLmlzQWN0aXZlID0gZmFsc2U7XG5cblxuICAgXHQvLyBsZXQgbGlzdGVuIGZvciB0YWIuLiBvbmNlIHByZXNzZWQgd2UgY2FuIGZpcmUgdXAgYW5kIHNob3cgdGhlIGFjY2Vzc2liaWxpdHkgbGF5ZXJcbiAgIFx0d2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLCB0aGlzLl9vbktleURvd24sIGZhbHNlKTtcbn1cblxuXG5BY2Nlc3NpYmlsaXR5TWFuYWdlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBBY2Nlc3NpYmlsaXR5TWFuYWdlcjtcbm1vZHVsZS5leHBvcnRzID0gQWNjZXNzaWJpbGl0eU1hbmFnZXI7XG5cbi8qKlxuICogQWN0aXZhdGluZyB3aWxsIGNhdXNlIHRoZSBBY2Nlc3NpYmlsaXR5IGxheWVyIHRvIGJlIHNob3duLiBUaGlzIGlzIGNhbGxlZCB3aGVuIGEgdXNlciBwcmVzZXMgdGhlIHRhYiBrZXlcbiAqIEBwcml2YXRlXG4gKi9cbkFjY2Vzc2liaWxpdHlNYW5hZ2VyLnByb3RvdHlwZS5hY3RpdmF0ZSA9IGZ1bmN0aW9uKClcbntcblx0aWYodGhpcy5pc0FjdGl2ZSlcblx0e1xuXHRcdHJldHVybjtcblx0fVxuXG5cdHRoaXMuaXNBY3RpdmUgPSB0cnVlO1xuXG5cdHdpbmRvdy5kb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdtb3VzZW1vdmUnLCB0aGlzLl9vbk1vdXNlTW92ZSwgdHJ1ZSk7XG5cdHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdrZXlkb3duJywgdGhpcy5fb25LZXlEb3duLCBmYWxzZSk7XG5cblx0dGhpcy5yZW5kZXJlci5vbigncG9zdHJlbmRlcicsIHRoaXMudXBkYXRlLCB0aGlzKTtcblxuXHR0aGlzLnJlbmRlcmVyLnZpZXcucGFyZW50Tm9kZS5hcHBlbmRDaGlsZCh0aGlzLmRpdik7XHRcbn07XG5cbi8qKlxuICogRGVhY3RpdmF0aW5nIHdpbGwgY2F1c2UgdGhlIEFjY2Vzc2liaWxpdHkgbGF5ZXIgdG8gYmUgaGlkZGVuLiBUaGlzIGlzIGNhbGxlZCB3aGVuIGEgdXNlciBtb3ZlcyB0aGUgbW91c2VcbiAqIEBwcml2YXRlXG4gKi9cbkFjY2Vzc2liaWxpdHlNYW5hZ2VyLnByb3RvdHlwZS5kZWFjdGl2YXRlID0gZnVuY3Rpb24oKVxue1xuXHRpZighdGhpcy5pc0FjdGl2ZSlcblx0e1xuXHRcdHJldHVybjtcblx0fVxuXG5cdHRoaXMuaXNBY3RpdmUgPSBmYWxzZTtcblxuXHR3aW5kb3cuZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignbW91c2Vtb3ZlJywgdGhpcy5fb25Nb3VzZU1vdmUpO1xuXHR3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsIHRoaXMuX29uS2V5RG93biwgZmFsc2UpO1xuXG5cdHRoaXMucmVuZGVyZXIub2ZmKCdwb3N0cmVuZGVyJywgdGhpcy51cGRhdGUpO1xuXG5cdHRoaXMuZGl2LnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodGhpcy5kaXYpO1xuXG59O1xuXG4vKipcbiAqIFRoaXMgcmVjdXJzaXZlIGZ1bmN0aW9uIHdpbGwgcnVuIHRocm91Z2h0IGhlIHNjZW5lIGdyYXBoIGFuZCBhZGQgYW55IG5ldyBhY2Nlc3NpYmxlIG9iamVjdHMgdG8gdGhlIERPTSBsYXllci5cbiAqIEBwYXJhbSBlbGVtZW50IHtQSVhJLkNvbnRhaW5lcnxQSVhJLlNwcml0ZXxQSVhJLmV4dHJhcy5UaWxpbmdTcHJpdGV9IHRoZSBEaXNwbGF5T2JqZWN0IHRvIGNoZWNrLlxuICogQHByaXZhdGVcbiAqL1xuQWNjZXNzaWJpbGl0eU1hbmFnZXIucHJvdG90eXBlLnVwZGF0ZUFjY2Vzc2libGVPYmplY3RzID0gZnVuY3Rpb24oZGlzcGxheU9iamVjdClcbntcblx0aWYoIWRpc3BsYXlPYmplY3QudmlzaWJsZSlcblx0e1xuXHRcdHJldHVybjtcblx0fVxuXG5cdGlmKGRpc3BsYXlPYmplY3QuYWNjZXNzaWJsZSAmJiBkaXNwbGF5T2JqZWN0LmludGVyYWN0aXZlKVxuXHR7XG5cdFx0aWYoIWRpc3BsYXlPYmplY3QuX2FjY2Vzc2libGVBY3RpdmUpXG5cdFx0e1xuXHRcdFx0dGhpcy5hZGRDaGlsZChkaXNwbGF5T2JqZWN0KTtcblx0XHR9XG5cdCAgIFx0XG5cdCAgIFx0ZGlzcGxheU9iamVjdC5yZW5kZXJJZCA9IHRoaXMucmVuZGVySWQ7XG5cdH1cblxuXHR2YXIgY2hpbGRyZW4gPSBkaXNwbGF5T2JqZWN0LmNoaWxkcmVuO1xuXG5cdGZvciAodmFyIGkgPSBjaGlsZHJlbi5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuXHRcdFxuXHRcdHRoaXMudXBkYXRlQWNjZXNzaWJsZU9iamVjdHMoY2hpbGRyZW5baV0pO1xuXHR9XG59O1xuXG5cbi8qKlxuICogQmVmb3JlIGVhY2ggcmVuZGVyIHRoaXMgZnVuY3Rpb24gd2lsbCBlbnN1cmUgdGhhdCBhbGwgZGl2cyBhcmUgbWFwcGVkIGNvcnJlY3RseSB0byB0aGVpciBEaXNwbGF5T2JqZWN0c1xuICogQHByaXZhdGVcbiAqL1xuQWNjZXNzaWJpbGl0eU1hbmFnZXIucHJvdG90eXBlLnVwZGF0ZSA9IGZ1bmN0aW9uKClcbntcblxuXHQvLyB1cGRhdGUgY2hpbGRyZW4uLi5cblx0dGhpcy51cGRhdGVBY2Nlc3NpYmxlT2JqZWN0cyh0aGlzLnJlbmRlcmVyLl9sYXN0T2JqZWN0UmVuZGVyZWQpO1xuXG5cdHZhciByZWN0ID0gdGhpcy5yZW5kZXJlci52aWV3LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuXHR2YXIgc3ggPSByZWN0LndpZHRoICAvIHRoaXMucmVuZGVyZXIud2lkdGg7XG5cdHZhciBzeSA9IHJlY3QuaGVpZ2h0IC8gdGhpcy5yZW5kZXJlci5oZWlnaHQ7XG5cblx0dmFyIGRpdiA9IHRoaXMuZGl2O1xuXG5cdGRpdi5zdHlsZS5sZWZ0ID0gcmVjdC5sZWZ0ICsgJ3B4Jztcblx0ZGl2LnN0eWxlLnRvcCA9IHJlY3QudG9wICsgJ3B4Jztcblx0ZGl2LnN0eWxlLndpZHRoID0gdGhpcy5yZW5kZXJlci53aWR0aCArICdweCc7XG5cdGRpdi5zdHlsZS5oZWlnaHQgPSB0aGlzLnJlbmRlcmVyLmhlaWdodCArICdweCc7XG5cblx0Zm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmNoaWxkcmVuLmxlbmd0aDsgaSsrKVxuXHR7XG5cblx0XHR2YXIgY2hpbGQgPSB0aGlzLmNoaWxkcmVuW2ldO1xuXG5cdFx0aWYoY2hpbGQucmVuZGVySWQgIT09IHRoaXMucmVuZGVySWQpXG5cdFx0e1xuXHRcdFx0Y2hpbGQuX2FjY2Vzc2libGVBY3RpdmUgPSBmYWxzZTtcblxuICAgICAgICAgICAgY29yZS51dGlscy5yZW1vdmVJdGVtcyh0aGlzLmNoaWxkcmVuLCBpLCAxKTtcblx0XHRcdHRoaXMuZGl2LnJlbW92ZUNoaWxkKCBjaGlsZC5fYWNjZXNzaWJsZURpdiApO1xuXHRcdFx0dGhpcy5wb29sLnB1c2goY2hpbGQuX2FjY2Vzc2libGVEaXYpO1xuXHRcdFx0Y2hpbGQuX2FjY2Vzc2libGVEaXYgPSBudWxsO1xuXG5cdFx0XHRpLS07XG5cblx0XHRcdGlmKHRoaXMuY2hpbGRyZW4ubGVuZ3RoID09PSAwKVxuXHRcdFx0e1xuXHRcdFx0XHR0aGlzLmRlYWN0aXZhdGUoKTtcblx0XHRcdH1cblx0XHR9XG5cdFx0ZWxzZVxuXHRcdHtcblx0XHRcdC8vIG1hcCBkaXYgdG8gZGlzcGxheS4uXG5cdFx0XHRkaXYgPSBjaGlsZC5fYWNjZXNzaWJsZURpdjtcblx0XHRcdHZhciBoaXRBcmVhID0gY2hpbGQuaGl0QXJlYTtcblx0XHRcdHZhciB3dCA9IGNoaWxkLndvcmxkVHJhbnNmb3JtO1xuXG5cdFx0XHRpZihjaGlsZC5oaXRBcmVhKVxuXHRcdFx0e1xuXHRcdFx0XHRkaXYuc3R5bGUubGVmdCA9ICgod3QudHggKyAoaGl0QXJlYS54ICogd3QuYSkpICogc3gpICsgJ3B4Jztcblx0XHRcdFx0ZGl2LnN0eWxlLnRvcCA9ICAoKHd0LnR5ICsgKGhpdEFyZWEueSAqIHd0LmQpKSAqIHN5KSArICAncHgnO1xuXG5cdFx0XHRcdGRpdi5zdHlsZS53aWR0aCA9IChoaXRBcmVhLndpZHRoICogd3QuYSAqIHN4KSArICdweCc7XG5cdFx0XHRcdGRpdi5zdHlsZS5oZWlnaHQgPSAoaGl0QXJlYS5oZWlnaHQgKiB3dC5kICogc3kpICsgJ3B4Jztcblx0XHRcdFxuXHRcdFx0fVxuXHRcdFx0ZWxzZVxuXHRcdFx0e1xuXHRcdFx0XHRoaXRBcmVhID0gY2hpbGQuZ2V0Qm91bmRzKCk7XG5cblx0XHRcdFx0dGhpcy5jYXBIaXRBcmVhKGhpdEFyZWEpO1xuXG5cdFx0XHRcdGRpdi5zdHlsZS5sZWZ0ID0gKGhpdEFyZWEueCAqIHN4KSArICdweCc7XG5cdFx0XHRcdGRpdi5zdHlsZS50b3AgPSAgKGhpdEFyZWEueSAqIHN5KSArICAncHgnO1xuXG5cdFx0XHRcdGRpdi5zdHlsZS53aWR0aCA9IChoaXRBcmVhLndpZHRoICogc3gpICsgJ3B4Jztcblx0XHRcdFx0ZGl2LnN0eWxlLmhlaWdodCA9IChoaXRBcmVhLmhlaWdodCAqIHN5KSArICdweCc7XG5cdFx0XHR9XHRcdFxuXHRcdH1cblx0fVxuXG5cdC8vIGluY3JlbWVudCB0aGUgcmVuZGVyIGlkLi5cblx0dGhpcy5yZW5kZXJJZCsrO1xufTtcblxuQWNjZXNzaWJpbGl0eU1hbmFnZXIucHJvdG90eXBlLmNhcEhpdEFyZWEgPSBmdW5jdGlvbiAoaGl0QXJlYSlcbntcbiAgICBpZiAoaGl0QXJlYS54IDwgMClcbiAgICB7XG4gICAgICAgIGhpdEFyZWEud2lkdGggKz0gaGl0QXJlYS54O1xuICAgICAgICBoaXRBcmVhLnggPSAwO1xuICAgIH1cblxuICAgIGlmIChoaXRBcmVhLnkgPCAwKVxuICAgIHtcbiAgICAgICAgaGl0QXJlYS5oZWlnaHQgKz0gaGl0QXJlYS55O1xuICAgICAgICBoaXRBcmVhLnkgPSAwO1xuICAgIH1cblxuICAgIGlmICggaGl0QXJlYS54ICsgaGl0QXJlYS53aWR0aCA+IHRoaXMucmVuZGVyZXIud2lkdGggKVxuICAgIHtcbiAgICAgICAgaGl0QXJlYS53aWR0aCA9IHRoaXMucmVuZGVyZXIud2lkdGggLSBoaXRBcmVhLng7XG4gICAgfVxuXG4gICAgaWYgKCBoaXRBcmVhLnkgKyBoaXRBcmVhLmhlaWdodCA+IHRoaXMucmVuZGVyZXIuaGVpZ2h0IClcbiAgICB7XG4gICAgICAgIGhpdEFyZWEuaGVpZ2h0ID0gdGhpcy5yZW5kZXJlci5oZWlnaHQgLSBoaXRBcmVhLnk7XG4gICAgfVxufTtcblxuXG4vKipcbiAqIEFkZHMgYSBEaXNwbGF5T2JqZWN0IHRvIHRoZSBhY2Nlc3NpYmlsaXR5IG1hbmFnZXJcbiAqIEBwcml2YXRlXG4gKi9cbkFjY2Vzc2liaWxpdHlNYW5hZ2VyLnByb3RvdHlwZS5hZGRDaGlsZCA9IGZ1bmN0aW9uKGRpc3BsYXlPYmplY3QpXG57XG4vL1x0dGhpcy5hY3RpdmF0ZSgpO1xuXHRcblx0dmFyIGRpdiA9IHRoaXMucG9vbC5wb3AoKTtcblxuXHRpZighZGl2KVxuXHR7XG5cdFx0ZGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYnV0dG9uJyk7IFxuXG5cdCAgICBkaXYuc3R5bGUud2lkdGggPSAxMDAgKyAncHgnO1xuXHQgICAgZGl2LnN0eWxlLmhlaWdodCA9IDEwMCArICdweCc7XG5cdCAgICBkaXYuc3R5bGUuYmFja2dyb3VuZENvbG9yID0gdGhpcy5kZWJ1ZyA/ICdyZ2JhKDI1NSwwLDAsMC41KScgOiAndHJhbnNwYXJlbnQnO1xuXHQgICAgZGl2LnN0eWxlLnBvc2l0aW9uID0gJ2Fic29sdXRlJztcblx0ICAgIGRpdi5zdHlsZS56SW5kZXggPSAyO1xuXHQgICAgZGl2LnN0eWxlLmJvcmRlclN0eWxlID0gJ25vbmUnO1xuXG5cdCAgICBcblx0ICAgIGRpdi5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIHRoaXMuX29uQ2xpY2suYmluZCh0aGlzKSk7XG5cdCAgICBkaXYuYWRkRXZlbnRMaXN0ZW5lcignZm9jdXMnLCB0aGlzLl9vbkZvY3VzLmJpbmQodGhpcykpO1xuXHQgICAgZGl2LmFkZEV2ZW50TGlzdGVuZXIoJ2ZvY3Vzb3V0JywgdGhpcy5fb25Gb2N1c091dC5iaW5kKHRoaXMpKTtcblx0fVxuXHQgICBcdFxuXG5cblxuXHRkaXYudGl0bGUgPSBkaXNwbGF5T2JqZWN0LmFjY2Vzc2libGVUaXRsZSB8fCAnZGlzcGxheU9iamVjdCAnICsgdGhpcy50YWJJbmRleDtcblxuXHQvL1xuXHRcblx0ZGlzcGxheU9iamVjdC5fYWNjZXNzaWJsZUFjdGl2ZSA9IHRydWU7XG5cdGRpc3BsYXlPYmplY3QuX2FjY2Vzc2libGVEaXYgPSBkaXY7XG5cdGRpdi5kaXNwbGF5T2JqZWN0ID0gZGlzcGxheU9iamVjdDtcblxuXG5cdHRoaXMuY2hpbGRyZW4ucHVzaChkaXNwbGF5T2JqZWN0KTtcblx0dGhpcy5kaXYuYXBwZW5kQ2hpbGQoIGRpc3BsYXlPYmplY3QuX2FjY2Vzc2libGVEaXYgKTtcblx0ZGlzcGxheU9iamVjdC5fYWNjZXNzaWJsZURpdi50YWJJbmRleCA9IGRpc3BsYXlPYmplY3QudGFiSW5kZXg7XG59O1xuXG5cbi8qKlxuICogTWFwcyB0aGUgZGl2IGJ1dHRvbiBwcmVzcyB0byBwaXhpJ3MgSW50ZXJhY3Rpb25NYW5hZ2VyIChjbGljaylcbiAqIEBwcml2YXRlXG4gKi9cbkFjY2Vzc2liaWxpdHlNYW5hZ2VyLnByb3RvdHlwZS5fb25DbGljayA9IGZ1bmN0aW9uKGUpXG57XG5cdHZhciBpbnRlcmFjdGlvbk1hbmFnZXIgPSB0aGlzLnJlbmRlcmVyLnBsdWdpbnMuaW50ZXJhY3Rpb247XG5cdGludGVyYWN0aW9uTWFuYWdlci5kaXNwYXRjaEV2ZW50KGUudGFyZ2V0LmRpc3BsYXlPYmplY3QsICdjbGljaycsIGludGVyYWN0aW9uTWFuYWdlci5ldmVudERhdGEpO1xufTtcblxuLyoqXG4gKiBNYXBzIHRoZSBkaXYgZm9jdXMgZXZlbnRzIHRvIHBpeGlzIEludGVyYWN0aW9uTWFuYWdlciAobW91c2VvdmVyKVxuICogQHByaXZhdGVcbiAqL1xuQWNjZXNzaWJpbGl0eU1hbmFnZXIucHJvdG90eXBlLl9vbkZvY3VzID0gZnVuY3Rpb24oZSlcbntcblx0dmFyIGludGVyYWN0aW9uTWFuYWdlciA9IHRoaXMucmVuZGVyZXIucGx1Z2lucy5pbnRlcmFjdGlvbjtcblx0aW50ZXJhY3Rpb25NYW5hZ2VyLmRpc3BhdGNoRXZlbnQoZS50YXJnZXQuZGlzcGxheU9iamVjdCwgJ21vdXNlb3ZlcicsIGludGVyYWN0aW9uTWFuYWdlci5ldmVudERhdGEpO1xufTtcblxuLyoqXG4gKiBNYXBzIHRoZSBkaXYgZm9jdXMgZXZlbnRzIHRvIHBpeGlzIEludGVyYWN0aW9uTWFuYWdlciAobW91c2VvdXQpXG4gKiBAcHJpdmF0ZVxuICovXG5BY2Nlc3NpYmlsaXR5TWFuYWdlci5wcm90b3R5cGUuX29uRm9jdXNPdXQgPSBmdW5jdGlvbihlKVxue1xuXHR2YXIgaW50ZXJhY3Rpb25NYW5hZ2VyID0gdGhpcy5yZW5kZXJlci5wbHVnaW5zLmludGVyYWN0aW9uO1xuXHRpbnRlcmFjdGlvbk1hbmFnZXIuZGlzcGF0Y2hFdmVudChlLnRhcmdldC5kaXNwbGF5T2JqZWN0LCAnbW91c2VvdXQnLCBpbnRlcmFjdGlvbk1hbmFnZXIuZXZlbnREYXRhKTtcbn07XG5cbi8qKlxuICogSXMgY2FsbGVkIHdoZW4gYSBrZXkgaXMgcHJlc3NlZFxuICpcbiAqIEBwcml2YXRlXG4gKi9cbkFjY2Vzc2liaWxpdHlNYW5hZ2VyLnByb3RvdHlwZS5fb25LZXlEb3duID0gZnVuY3Rpb24oZSlcbntcblx0aWYoZS5rZXlDb2RlICE9PSA5KVxuXHR7XG5cdFx0cmV0dXJuO1xuXHR9XG5cblx0dGhpcy5hY3RpdmF0ZSgpO1xufTtcblxuLyoqXG4gKiBJcyBjYWxsZWQgd2hlbiB0aGUgbW91c2UgbW92ZXMgYWNyb3NzIHRoZSByZW5kZXJlciBlbGVtZW50XG4gKlxuICogQHByaXZhdGVcbiAqL1xuQWNjZXNzaWJpbGl0eU1hbmFnZXIucHJvdG90eXBlLl9vbk1vdXNlTW92ZSA9IGZ1bmN0aW9uKClcbntcblx0dGhpcy5kZWFjdGl2YXRlKCk7XG59O1xuXG5cbi8qKlxuICogRGVzdHJveXMgdGhlIGFjY2Vzc2liaWxpdHkgbWFuYWdlclxuICpcbiAqL1xuQWNjZXNzaWJpbGl0eU1hbmFnZXIucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoKSBcbntcblx0dGhpcy5kaXYgPSBudWxsO1xuXG5cdGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5jaGlsZHJlbi5sZW5ndGg7IGkrKylcblx0e1xuXHRcdHRoaXMuY2hpbGRyZW5baV0uZGl2ID0gbnVsbDtcblx0fVxuXG5cdFxuXHR3aW5kb3cuZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignbW91c2Vtb3ZlJywgdGhpcy5fb25Nb3VzZU1vdmUpO1xuXHR3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsIHRoaXMuX29uS2V5RG93bik7XG5cdFx0XG5cdHRoaXMucG9vbCA9IG51bGw7XG5cdHRoaXMuY2hpbGRyZW4gPSBudWxsO1xuXHR0aGlzLnJlbmRlcmVyID0gbnVsbDtcblxufTtcblxuY29yZS5XZWJHTFJlbmRlcmVyLnJlZ2lzdGVyUGx1Z2luKCdhY2Nlc3NpYmlsaXR5JywgQWNjZXNzaWJpbGl0eU1hbmFnZXIpO1xuY29yZS5DYW52YXNSZW5kZXJlci5yZWdpc3RlclBsdWdpbignYWNjZXNzaWJpbGl0eScsIEFjY2Vzc2liaWxpdHlNYW5hZ2VyKTtcblxuIiwiLyoqXG4gKiBEZWZhdWx0IHByb3BlcnR5IHZhbHVlcyBvZiBhY2Nlc3NpYmxlIG9iamVjdHNcbiAqIHVzZWQgYnkge0BsaW5rIFBJWEkuYWNjZXNzaWJpbGl0eS5BY2Nlc3NpYmlsaXR5TWFuYWdlcn0uXG4gKlxuICogQG1peGluXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQGV4YW1wbGVcbiAqICAgICAgZnVuY3Rpb24gTXlPYmplY3QoKSB7fVxuICpcbiAqICAgICAgT2JqZWN0LmFzc2lnbihcbiAqICAgICAgICAgIE15T2JqZWN0LnByb3RvdHlwZSxcbiAqICAgICAgICAgIFBJWEkuYWNjZXNzaWJpbGl0eS5hY2Nlc3NpYmxlVGFyZ2V0XG4gKiAgICAgICk7XG4gKi9cbnZhciBhY2Nlc3NpYmxlVGFyZ2V0ID0ge1xuICAgIFxuICAgIC8qKlxuICAgICAqIEB0b2RvIE5lZWRzIGRvY3MuXG4gICAgICovXG4gICAgYWNjZXNzaWJsZTpmYWxzZSxcblxuICAgIC8qKlxuICAgICAqIEB0b2RvIE5lZWRzIGRvY3MuXG4gICAgICovXG4gICAgYWNjZXNzaWJsZVRpdGxlOm51bGwsXG5cbiAgICAvKipcbiAgICAgKiBAdG9kbyBOZWVkcyBkb2NzLlxuICAgICAqL1xuICAgIHRhYkluZGV4OjAsXG5cbiAgICAvKipcbiAgICAgKiBAdG9kbyBOZWVkcyBkb2NzLlxuICAgICAqL1xuICAgIF9hY2Nlc3NpYmxlQWN0aXZlOmZhbHNlLFxuXG4gICAgLyoqXG4gICAgICogQHRvZG8gTmVlZHMgZG9jcy5cbiAgICAgKi9cbiAgICBfYWNjZXNzaWJsZURpdjpmYWxzZVxuXG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGFjY2Vzc2libGVUYXJnZXQ7XG4iLCIvKipcbiAqIEBmaWxlICAgICAgICBNYWluIGV4cG9ydCBvZiB0aGUgUElYSSBhY2Nlc3NpYmlsaXR5IGxpYnJhcnlcbiAqIEBhdXRob3IgICAgICBNYXQgR3JvdmVzIDxtYXRAZ29vZGJveWRpZ2l0YWwuY29tPlxuICogQGNvcHlyaWdodCAgIDIwMTMtMjAxNSBHb29kQm95RGlnaXRhbFxuICogQGxpY2Vuc2UgICAgIHtAbGluayBodHRwczovL2dpdGh1Yi5jb20vcGl4aWpzL3BpeGkuanMvYmxvYi9tYXN0ZXIvTElDRU5TRXxNSVQgTGljZW5zZX1cbiAqL1xuXG4vKipcbiAqIEBuYW1lc3BhY2UgUElYSS5pbnRlcmFjdGlvblxuICovXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgICBhY2Nlc3NpYmxlVGFyZ2V0OiAgICAgcmVxdWlyZSgnLi9hY2Nlc3NpYmxlVGFyZ2V0JyksXG4gICAgQWNjZXNzaWJpbGl0eU1hbmFnZXI6IHJlcXVpcmUoJy4vQWNjZXNzaWJpbGl0eU1hbmFnZXInKVxufTtcbiIsIi8qKlxuICogQ29uc3RhbnQgdmFsdWVzIHVzZWQgaW4gcGl4aVxuICpcbiAqIEBsZW5kcyBQSVhJXG4gKi9cbnZhciBDT05TVCA9IHtcbiAgICAvKipcbiAgICAgKiBTdHJpbmcgb2YgdGhlIGN1cnJlbnQgUElYSSB2ZXJzaW9uXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQGNvbnN0YW50XG4gICAgICogQHByb3BlcnR5IHtzdHJpbmd9IFZFUlNJT05cbiAgICAgKi9cbiAgICBWRVJTSU9OOiByZXF1aXJlKCcuLi8uLi9wYWNrYWdlLmpzb24nKS52ZXJzaW9uLFxuXG4gICAgLyoqXG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IFBJXzIgLSBUd28gUGlcbiAgICAgKiBAY29uc3RhbnRcbiAgICAgKiBAc3RhdGljXG4gICAgICovXG4gICAgUElfMjogTWF0aC5QSSAqIDIsXG5cbiAgICAvKipcbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gUkFEX1RPX0RFRyAtIENvbnN0YW50IGNvbnZlcnNpb24gZmFjdG9yIGZvciBjb252ZXJ0aW5nIHJhZGlhbnMgdG8gZGVncmVlc1xuICAgICAqIEBjb25zdGFudFxuICAgICAqIEBzdGF0aWNcbiAgICAgKi9cbiAgICBSQURfVE9fREVHOiAxODAgLyBNYXRoLlBJLFxuXG4gICAgLyoqXG4gICAgICogQHByb3BlcnR5IHtOdW1iZXJ9IERFR19UT19SQUQgLSBDb25zdGFudCBjb252ZXJzaW9uIGZhY3RvciBmb3IgY29udmVydGluZyBkZWdyZWVzIHRvIHJhZGlhbnNcbiAgICAgKiBAY29uc3RhbnRcbiAgICAgKiBAc3RhdGljXG4gICAgICovXG4gICAgREVHX1RPX1JBRDogTWF0aC5QSSAvIDE4MCxcblxuICAgIC8qKlxuICAgICAqIFRhcmdldCBmcmFtZXMgcGVyIG1pbGxpc2Vjb25kLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBjb25zdGFudFxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBUQVJHRVRfRlBNUz0wLjA2XG4gICAgICovXG4gICAgVEFSR0VUX0ZQTVM6IDAuMDYsXG5cbiAgICAvKipcbiAgICAgKiBDb25zdGFudCB0byBpZGVudGlmeSB0aGUgUmVuZGVyZXIgVHlwZS5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAY29uc3RhbnRcbiAgICAgKiBAcHJvcGVydHkge29iamVjdH0gUkVOREVSRVJfVFlQRVxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBSRU5ERVJFUl9UWVBFLlVOS05PV05cbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gUkVOREVSRVJfVFlQRS5XRUJHTFxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBSRU5ERVJFUl9UWVBFLkNBTlZBU1xuICAgICAqL1xuICAgIFJFTkRFUkVSX1RZUEU6IHtcbiAgICAgICAgVU5LTk9XTjogICAgMCxcbiAgICAgICAgV0VCR0w6ICAgICAgMSxcbiAgICAgICAgQ0FOVkFTOiAgICAgMlxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBWYXJpb3VzIGJsZW5kIG1vZGVzIHN1cHBvcnRlZCBieSBQSVhJLiBJTVBPUlRBTlQgLSBUaGUgV2ViR0wgcmVuZGVyZXIgb25seSBzdXBwb3J0c1xuICAgICAqIHRoZSBOT1JNQUwsIEFERCwgTVVMVElQTFkgYW5kIFNDUkVFTiBibGVuZCBtb2Rlcy4gQW55dGhpbmcgZWxzZSB3aWxsIHNpbGVudGx5IGFjdCBsaWtlXG4gICAgICogTk9STUFMLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBjb25zdGFudFxuICAgICAqIEBwcm9wZXJ0eSB7b2JqZWN0fSBCTEVORF9NT0RFU1xuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBCTEVORF9NT0RFUy5OT1JNQUxcbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gQkxFTkRfTU9ERVMuQUREXG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IEJMRU5EX01PREVTLk1VTFRJUExZXG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IEJMRU5EX01PREVTLlNDUkVFTlxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBCTEVORF9NT0RFUy5PVkVSTEFZXG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IEJMRU5EX01PREVTLkRBUktFTlxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBCTEVORF9NT0RFUy5MSUdIVEVOXG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IEJMRU5EX01PREVTLkNPTE9SX0RPREdFXG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IEJMRU5EX01PREVTLkNPTE9SX0JVUk5cbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gQkxFTkRfTU9ERVMuSEFSRF9MSUdIVFxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBCTEVORF9NT0RFUy5TT0ZUX0xJR0hUXG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IEJMRU5EX01PREVTLkRJRkZFUkVOQ0VcbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gQkxFTkRfTU9ERVMuRVhDTFVTSU9OXG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IEJMRU5EX01PREVTLkhVRVxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBCTEVORF9NT0RFUy5TQVRVUkFUSU9OXG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IEJMRU5EX01PREVTLkNPTE9SXG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IEJMRU5EX01PREVTLkxVTUlOT1NJVFlcbiAgICAgKi9cbiAgICBCTEVORF9NT0RFUzoge1xuICAgICAgICBOT1JNQUw6ICAgICAgICAgMCxcbiAgICAgICAgQUREOiAgICAgICAgICAgIDEsXG4gICAgICAgIE1VTFRJUExZOiAgICAgICAyLFxuICAgICAgICBTQ1JFRU46ICAgICAgICAgMyxcbiAgICAgICAgT1ZFUkxBWTogICAgICAgIDQsXG4gICAgICAgIERBUktFTjogICAgICAgICA1LFxuICAgICAgICBMSUdIVEVOOiAgICAgICAgNixcbiAgICAgICAgQ09MT1JfRE9ER0U6ICAgIDcsXG4gICAgICAgIENPTE9SX0JVUk46ICAgICA4LFxuICAgICAgICBIQVJEX0xJR0hUOiAgICAgOSxcbiAgICAgICAgU09GVF9MSUdIVDogICAgIDEwLFxuICAgICAgICBESUZGRVJFTkNFOiAgICAgMTEsXG4gICAgICAgIEVYQ0xVU0lPTjogICAgICAxMixcbiAgICAgICAgSFVFOiAgICAgICAgICAgIDEzLFxuICAgICAgICBTQVRVUkFUSU9OOiAgICAgMTQsXG4gICAgICAgIENPTE9SOiAgICAgICAgICAxNSxcbiAgICAgICAgTFVNSU5PU0lUWTogICAgIDE2XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFZhcmlvdXMgd2ViZ2wgZHJhdyBtb2Rlcy4gVGhlc2UgY2FuIGJlIHVzZWQgdG8gc3BlY2lmeSB3aGljaCBHTCBkcmF3TW9kZSB0byB1c2VcbiAgICAgKiB1bmRlciBjZXJ0YWluIHNpdHVhdGlvbnMgYW5kIHJlbmRlcmVycy5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAY29uc3RhbnRcbiAgICAgKiBAcHJvcGVydHkge29iamVjdH0gRFJBV19NT0RFU1xuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBEUkFXX01PREVTLlBPSU5UU1xuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBEUkFXX01PREVTLkxJTkVTXG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IERSQVdfTU9ERVMuTElORV9MT09QXG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IERSQVdfTU9ERVMuTElORV9TVFJJUFxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBEUkFXX01PREVTLlRSSUFOR0xFU1xuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBEUkFXX01PREVTLlRSSUFOR0xFX1NUUklQXG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IERSQVdfTU9ERVMuVFJJQU5HTEVfRkFOXG4gICAgICovXG4gICAgRFJBV19NT0RFUzoge1xuICAgICAgICBQT0lOVFM6ICAgICAgICAgMCxcbiAgICAgICAgTElORVM6ICAgICAgICAgIDEsXG4gICAgICAgIExJTkVfTE9PUDogICAgICAyLFxuICAgICAgICBMSU5FX1NUUklQOiAgICAgMyxcbiAgICAgICAgVFJJQU5HTEVTOiAgICAgIDQsXG4gICAgICAgIFRSSUFOR0xFX1NUUklQOiA1LFxuICAgICAgICBUUklBTkdMRV9GQU46ICAgNlxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBUaGUgc2NhbGUgbW9kZXMgdGhhdCBhcmUgc3VwcG9ydGVkIGJ5IHBpeGkuXG4gICAgICpcbiAgICAgKiBUaGUgREVGQVVMVCBzY2FsZSBtb2RlIGFmZmVjdHMgdGhlIGRlZmF1bHQgc2NhbGluZyBtb2RlIG9mIGZ1dHVyZSBvcGVyYXRpb25zLlxuICAgICAqIEl0IGNhbiBiZSByZS1hc3NpZ25lZCB0byBlaXRoZXIgTElORUFSIG9yIE5FQVJFU1QsIGRlcGVuZGluZyB1cG9uIHN1aXRhYmlsaXR5LlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBjb25zdGFudFxuICAgICAqIEBwcm9wZXJ0eSB7b2JqZWN0fSBTQ0FMRV9NT0RFU1xuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBTQ0FMRV9NT0RFUy5ERUZBVUxUPUxJTkVBUlxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBTQ0FMRV9NT0RFUy5MSU5FQVIgU21vb3RoIHNjYWxpbmdcbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gU0NBTEVfTU9ERVMuTkVBUkVTVCBQaXhlbGF0aW5nIHNjYWxpbmdcbiAgICAgKi9cbiAgICBTQ0FMRV9NT0RFUzoge1xuICAgICAgICBERUZBVUxUOiAgICAwLFxuICAgICAgICBMSU5FQVI6ICAgICAwLFxuICAgICAgICBORUFSRVNUOiAgICAxXG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFRoZSBwcmVmaXggdGhhdCBkZW5vdGVzIGEgVVJMIGlzIGZvciBhIHJldGluYSBhc3NldFxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBjb25zdGFudFxuICAgICAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBSRVRJTkFfUFJFRklYXG4gICAgICovXG4gICAgLy9leGFtcGxlOiAnQDJ4JyxcbiAgICBSRVRJTkFfUFJFRklYOiAvQCguKyl4LyxcblxuICAgIFJFU09MVVRJT046MSxcblxuICAgIEZJTFRFUl9SRVNPTFVUSU9OOjEsXG5cbiAgICAvKipcbiAgICAgKiBUaGUgZGVmYXVsdCByZW5kZXIgb3B0aW9ucyBpZiBub25lIGFyZSBzdXBwbGllZCB0byB7QGxpbmsgUElYSS5XZWJHTFJlbmRlcmVyfVxuICAgICAqIG9yIHtAbGluayBQSVhJLkNhbnZhc1JlbmRlcmVyfS5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAY29uc3RhbnRcbiAgICAgKiBAcHJvcGVydHkge29iamVjdH0gREVGQVVMVF9SRU5ERVJfT1BUSU9OU1xuICAgICAqIEBwcm9wZXJ0eSB7SFRNTENhbnZhc0VsZW1lbnR9IERFRkFVTFRfUkVOREVSX09QVElPTlMudmlldz1udWxsXG4gICAgICogQHByb3BlcnR5IHtib29sZWFufSBERUZBVUxUX1JFTkRFUl9PUFRJT05TLnRyYW5zcGFyZW50PWZhbHNlXG4gICAgICogQHByb3BlcnR5IHtib29sZWFufSBERUZBVUxUX1JFTkRFUl9PUFRJT05TLmFudGlhbGlhcz1mYWxzZVxuICAgICAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gREVGQVVMVF9SRU5ERVJfT1BUSU9OUy5mb3JjZUZYQUE9ZmFsc2VcbiAgICAgKiBAcHJvcGVydHkge2Jvb2xlYW59IERFRkFVTFRfUkVOREVSX09QVElPTlMucHJlc2VydmVEcmF3aW5nQnVmZmVyPWZhbHNlXG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IERFRkFVTFRfUkVOREVSX09QVElPTlMucmVzb2x1dGlvbj0xXG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IERFRkFVTFRfUkVOREVSX09QVElPTlMuYmFja2dyb3VuZENvbG9yPTB4MDAwMDAwXG4gICAgICogQHByb3BlcnR5IHtib29sZWFufSBERUZBVUxUX1JFTkRFUl9PUFRJT05TLmNsZWFyQmVmb3JlUmVuZGVyPXRydWVcbiAgICAgKiBAcHJvcGVydHkge2Jvb2xlYW59IERFRkFVTFRfUkVOREVSX09QVElPTlMuYXV0b1Jlc2l6ZT1mYWxzZVxuICAgICAqL1xuICAgIERFRkFVTFRfUkVOREVSX09QVElPTlM6IHtcbiAgICAgICAgdmlldzogbnVsbCxcbiAgICAgICAgcmVzb2x1dGlvbjogMSxcbiAgICAgICAgYW50aWFsaWFzOiBmYWxzZSxcbiAgICAgICAgZm9yY2VGWEFBOiBmYWxzZSxcbiAgICAgICAgYXV0b1Jlc2l6ZTogZmFsc2UsXG4gICAgICAgIHRyYW5zcGFyZW50OiBmYWxzZSxcbiAgICAgICAgYmFja2dyb3VuZENvbG9yOiAweDAwMDAwMCxcbiAgICAgICAgY2xlYXJCZWZvcmVSZW5kZXI6IHRydWUsXG4gICAgICAgIHByZXNlcnZlRHJhd2luZ0J1ZmZlcjogZmFsc2UsXG4gICAgICAgIHJvdW5kUGl4ZWxzOiBmYWxzZVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBDb25zdGFudHMgdGhhdCBpZGVudGlmeSBzaGFwZXMsIG1haW5seSB0byBwcmV2ZW50IGBpbnN0YW5jZW9mYCBjYWxscy5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAY29uc3RhbnRcbiAgICAgKiBAcHJvcGVydHkge29iamVjdH0gU0hBUEVTXG4gICAgICogQHByb3BlcnR5IHtvYmplY3R9IFNIQVBFUy5QT0xZPTBcbiAgICAgKiBAcHJvcGVydHkge29iamVjdH0gU0hBUEVTLlJFQ1Q9MVxuICAgICAqIEBwcm9wZXJ0eSB7b2JqZWN0fSBTSEFQRVMuQ0lSQz0yXG4gICAgICogQHByb3BlcnR5IHtvYmplY3R9IFNIQVBFUy5FTElQPTNcbiAgICAgKiBAcHJvcGVydHkge29iamVjdH0gU0hBUEVTLlJSRUM9NFxuICAgICAqL1xuICAgIFNIQVBFUzoge1xuICAgICAgICBQT0xZOiAwLFxuICAgICAgICBSRUNUOiAxLFxuICAgICAgICBDSVJDOiAyLFxuICAgICAgICBFTElQOiAzLFxuICAgICAgICBSUkVDOiA0XG4gICAgfSxcblxuICAgIC8vIFRPRE86IG1heWJlIGNoYW5nZSB0byBTUFJJVEUuQkFUQ0hfU0laRTogMjAwMFxuICAgIC8vIFRPRE86IG1heWJlIGFkZCBQQVJUSUNMRS5CQVRDSF9TSVpFOiAxNTAwMFxuICAgIFNQUklURV9CQVRDSF9TSVpFOiAyMDAwIC8vbmljZSBiYWxhbmNlIGJldHdlZW4gbW9iaWxlIGFuZCBkZXNrdG9wIG1hY2hpbmVzXG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IENPTlNUO1xuIiwidmFyIG1hdGggPSByZXF1aXJlKCcuLi9tYXRoJyksXG4gICAgdXRpbHMgPSByZXF1aXJlKCcuLi91dGlscycpLFxuICAgIERpc3BsYXlPYmplY3QgPSByZXF1aXJlKCcuL0Rpc3BsYXlPYmplY3QnKSxcbiAgICBSZW5kZXJUZXh0dXJlID0gcmVxdWlyZSgnLi4vdGV4dHVyZXMvUmVuZGVyVGV4dHVyZScpLFxuICAgIF90ZW1wTWF0cml4ID0gbmV3IG1hdGguTWF0cml4KCk7XG5cbi8qKlxuICogQSBDb250YWluZXIgcmVwcmVzZW50cyBhIGNvbGxlY3Rpb24gb2YgZGlzcGxheSBvYmplY3RzLlxuICogSXQgaXMgdGhlIGJhc2UgY2xhc3Mgb2YgYWxsIGRpc3BsYXkgb2JqZWN0cyB0aGF0IGFjdCBhcyBhIGNvbnRhaW5lciBmb3Igb3RoZXIgb2JqZWN0cy5cbiAqXG4gKmBgYGpzXG4gKiB2YXIgY29udGFpbmVyID0gbmV3IFBJWEkuQ29udGFpbmVyKCk7XG4gKiBjb250YWluZXIuYWRkQ2hpbGQoc3ByaXRlKTtcbiAqIGBgYFxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLkRpc3BsYXlPYmplY3RcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKi9cbmZ1bmN0aW9uIENvbnRhaW5lcigpXG57XG4gICAgRGlzcGxheU9iamVjdC5jYWxsKHRoaXMpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGFycmF5IG9mIGNoaWxkcmVuIG9mIHRoaXMgY29udGFpbmVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5EaXNwbGF5T2JqZWN0W119XG4gICAgICogQHJlYWRvbmx5XG4gICAgICovXG4gICAgdGhpcy5jaGlsZHJlbiA9IFtdO1xufVxuXG4vLyBjb25zdHJ1Y3RvclxuQ29udGFpbmVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoRGlzcGxheU9iamVjdC5wcm90b3R5cGUpO1xuQ29udGFpbmVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IENvbnRhaW5lcjtcbm1vZHVsZS5leHBvcnRzID0gQ29udGFpbmVyO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhDb250YWluZXIucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogVGhlIHdpZHRoIG9mIHRoZSBDb250YWluZXIsIHNldHRpbmcgdGhpcyB3aWxsIGFjdHVhbGx5IG1vZGlmeSB0aGUgc2NhbGUgdG8gYWNoaWV2ZSB0aGUgdmFsdWUgc2V0XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuQ29udGFpbmVyI1xuICAgICAqL1xuICAgIHdpZHRoOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuc2NhbGUueCAqIHRoaXMuZ2V0TG9jYWxCb3VuZHMoKS53aWR0aDtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcblxuICAgICAgICAgICAgdmFyIHdpZHRoID0gdGhpcy5nZXRMb2NhbEJvdW5kcygpLndpZHRoO1xuXG4gICAgICAgICAgICBpZiAod2lkdGggIT09IDApXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdGhpcy5zY2FsZS54ID0gdmFsdWUgLyB3aWR0aDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNjYWxlLnggPSAxO1xuICAgICAgICAgICAgfVxuXG5cbiAgICAgICAgICAgIHRoaXMuX3dpZHRoID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVGhlIGhlaWdodCBvZiB0aGUgQ29udGFpbmVyLCBzZXR0aW5nIHRoaXMgd2lsbCBhY3R1YWxseSBtb2RpZnkgdGhlIHNjYWxlIHRvIGFjaGlldmUgdGhlIHZhbHVlIHNldFxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLkNvbnRhaW5lciNcbiAgICAgKi9cbiAgICBoZWlnaHQ6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gIHRoaXMuc2NhbGUueSAqIHRoaXMuZ2V0TG9jYWxCb3VuZHMoKS5oZWlnaHQ7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG5cbiAgICAgICAgICAgIHZhciBoZWlnaHQgPSB0aGlzLmdldExvY2FsQm91bmRzKCkuaGVpZ2h0O1xuXG4gICAgICAgICAgICBpZiAoaGVpZ2h0ICE9PSAwKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHRoaXMuc2NhbGUueSA9IHZhbHVlIC8gaGVpZ2h0IDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNjYWxlLnkgPSAxO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLl9oZWlnaHQgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuXG4vKipcbiAqIE92ZXJyaWRhYmxlIG1ldGhvZCB0aGF0IGNhbiBiZSB1c2VkIGJ5IENvbnRhaW5lciBzdWJjbGFzc2VzIHdoZW5ldmVyIHRoZSBjaGlsZHJlbiBhcnJheSBpcyBtb2RpZmllZFxuICpcbiAqIEBwcml2YXRlXG4gKi9cbkNvbnRhaW5lci5wcm90b3R5cGUub25DaGlsZHJlbkNoYW5nZSA9IGZ1bmN0aW9uICgpIHt9O1xuXG4vKipcbiAqIEFkZHMgYSBjaGlsZCB0byB0aGUgY29udGFpbmVyLlxuICogXG4gKiBZb3UgY2FuIGFsc28gYWRkIG11bHRwbGUgaXRlbXMgbGlrZSBzbzogbXlDb250YWluZXIuYWRkQ2hpbGQodGhpbmtPbmUsIHRoaW5nVHdvLCB0aGluZ1RocmVlKVxuICogQHBhcmFtIGNoaWxkIHtQSVhJLkRpc3BsYXlPYmplY3R9IFRoZSBEaXNwbGF5T2JqZWN0IHRvIGFkZCB0byB0aGUgY29udGFpbmVyXG4gKiBAcmV0dXJuIHtQSVhJLkRpc3BsYXlPYmplY3R9IFRoZSBjaGlsZCB0aGF0IHdhcyBhZGRlZC5cbiAqL1xuQ29udGFpbmVyLnByb3RvdHlwZS5hZGRDaGlsZCA9IGZ1bmN0aW9uIChjaGlsZClcbnsgXG4gICAgdmFyIGFyZ3VtZW50c0xlbmd0aCA9IGFyZ3VtZW50cy5sZW5ndGg7XG5cbiAgICAvLyBpZiB0aGVyZSBpcyBvbmx5IG9uZSBhcmd1bWVudCB3ZSBjYW4gYnlwYXNzIGxvb3BpbmcgdGhyb3VnaCB0aGUgdGhlbVxuICAgIGlmKGFyZ3VtZW50c0xlbmd0aCA+IDEpXG4gICAge1xuICAgICAgICAvLyBsb29wIHRocm91Z2ggdGhlIGFyZ3VtZW50cyBwcm9wZXJ0eSBhbmQgYWRkIGFsbCBjaGlsZHJlblxuICAgICAgICAvLyB1c2UgaXQgdGhlIHJpZ2h0IHdheSAoLmxlbmd0aCBhbmQgW2ldKSBzbyB0aGF0IHRoaXMgZnVuY3Rpb24gY2FuIHN0aWxsIGJlIG9wdGltaXNlZCBieSBKUyBydW50aW1lc1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFyZ3VtZW50c0xlbmd0aDsgaSsrKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmFkZENoaWxkKCBhcmd1bWVudHNbaV0gKTtcbiAgICAgICAgfVxuICAgIH0gICAgIFxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIC8vIGlmIHRoZSBjaGlsZCBoYXMgYSBwYXJlbnQgdGhlbiBsZXRzIHJlbW92ZSBpdCBhcyBQaXhpIG9iamVjdHMgY2FuIG9ubHkgZXhpc3QgaW4gb25lIHBsYWNlXG4gICAgICAgIGlmIChjaGlsZC5wYXJlbnQpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNoaWxkLnBhcmVudC5yZW1vdmVDaGlsZChjaGlsZCk7XG4gICAgICAgIH1cblxuICAgICAgICBjaGlsZC5wYXJlbnQgPSB0aGlzO1xuICAgICAgICBcbiAgICAgICAgdGhpcy5jaGlsZHJlbi5wdXNoKGNoaWxkKTtcblxuICAgICAgICAvLyBUT0RPIC0gbGV0cyBlaXRoZXIgZG8gYWxsIGNhbGxiYWNrcyBvciBhbGwgZXZlbnRzLi4gbm90IGJvdGghXG4gICAgICAgIHRoaXMub25DaGlsZHJlbkNoYW5nZSh0aGlzLmNoaWxkcmVuLmxlbmd0aC0xKTtcbiAgICAgICAgY2hpbGQuZW1pdCgnYWRkZWQnLCB0aGlzKTtcbiAgICB9XG5cbiAgICByZXR1cm4gY2hpbGQ7XG59O1xuXG4vKipcbiAqIEFkZHMgYSBjaGlsZCB0byB0aGUgY29udGFpbmVyIGF0IGEgc3BlY2lmaWVkIGluZGV4LiBJZiB0aGUgaW5kZXggaXMgb3V0IG9mIGJvdW5kcyBhbiBlcnJvciB3aWxsIGJlIHRocm93blxuICpcbiAqIEBwYXJhbSBjaGlsZCB7UElYSS5EaXNwbGF5T2JqZWN0fSBUaGUgY2hpbGQgdG8gYWRkXG4gKiBAcGFyYW0gaW5kZXgge251bWJlcn0gVGhlIGluZGV4IHRvIHBsYWNlIHRoZSBjaGlsZCBpblxuICogQHJldHVybiB7UElYSS5EaXNwbGF5T2JqZWN0fSBUaGUgY2hpbGQgdGhhdCB3YXMgYWRkZWQuXG4gKi9cbkNvbnRhaW5lci5wcm90b3R5cGUuYWRkQ2hpbGRBdCA9IGZ1bmN0aW9uIChjaGlsZCwgaW5kZXgpXG57XG4gICAgaWYgKGluZGV4ID49IDAgJiYgaW5kZXggPD0gdGhpcy5jaGlsZHJlbi5sZW5ndGgpXG4gICAge1xuICAgICAgICBpZiAoY2hpbGQucGFyZW50KVxuICAgICAgICB7XG4gICAgICAgICAgICBjaGlsZC5wYXJlbnQucmVtb3ZlQ2hpbGQoY2hpbGQpO1xuICAgICAgICB9XG5cbiAgICAgICAgY2hpbGQucGFyZW50ID0gdGhpcztcblxuICAgICAgICB0aGlzLmNoaWxkcmVuLnNwbGljZShpbmRleCwgMCwgY2hpbGQpO1xuXG4gICAgICAgIC8vIFRPRE8gLSBsZXRzIGVpdGhlciBkbyBhbGwgY2FsbGJhY2tzIG9yIGFsbCBldmVudHMuLiBub3QgYm90aCFcbiAgICAgICAgdGhpcy5vbkNoaWxkcmVuQ2hhbmdlKGluZGV4KTtcbiAgICAgICAgY2hpbGQuZW1pdCgnYWRkZWQnLCB0aGlzKTtcblxuICAgICAgICByZXR1cm4gY2hpbGQ7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihjaGlsZCArICdhZGRDaGlsZEF0OiBUaGUgaW5kZXggJysgaW5kZXggKycgc3VwcGxpZWQgaXMgb3V0IG9mIGJvdW5kcyAnICsgdGhpcy5jaGlsZHJlbi5sZW5ndGgpO1xuICAgIH1cbn07XG5cbi8qKlxuICogU3dhcHMgdGhlIHBvc2l0aW9uIG9mIDIgRGlzcGxheSBPYmplY3RzIHdpdGhpbiB0aGlzIGNvbnRhaW5lci5cbiAqXG4gKiBAcGFyYW0gY2hpbGQge1BJWEkuRGlzcGxheU9iamVjdH1cbiAqIEBwYXJhbSBjaGlsZDIge1BJWEkuRGlzcGxheU9iamVjdH1cbiAqL1xuQ29udGFpbmVyLnByb3RvdHlwZS5zd2FwQ2hpbGRyZW4gPSBmdW5jdGlvbiAoY2hpbGQsIGNoaWxkMilcbntcbiAgICBpZiAoY2hpbGQgPT09IGNoaWxkMilcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB2YXIgaW5kZXgxID0gdGhpcy5nZXRDaGlsZEluZGV4KGNoaWxkKTtcbiAgICB2YXIgaW5kZXgyID0gdGhpcy5nZXRDaGlsZEluZGV4KGNoaWxkMik7XG5cbiAgICBpZiAoaW5kZXgxIDwgMCB8fCBpbmRleDIgPCAwKVxuICAgIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdzd2FwQ2hpbGRyZW46IEJvdGggdGhlIHN1cHBsaWVkIERpc3BsYXlPYmplY3RzIG11c3QgYmUgY2hpbGRyZW4gb2YgdGhlIGNhbGxlci4nKTtcbiAgICB9XG5cbiAgICB0aGlzLmNoaWxkcmVuW2luZGV4MV0gPSBjaGlsZDI7XG4gICAgdGhpcy5jaGlsZHJlbltpbmRleDJdID0gY2hpbGQ7XG4gICAgdGhpcy5vbkNoaWxkcmVuQ2hhbmdlKGluZGV4MSA8IGluZGV4MiA/IGluZGV4MSA6IGluZGV4Mik7XG59O1xuXG4vKipcbiAqIFJldHVybnMgdGhlIGluZGV4IHBvc2l0aW9uIG9mIGEgY2hpbGQgRGlzcGxheU9iamVjdCBpbnN0YW5jZVxuICpcbiAqIEBwYXJhbSBjaGlsZCB7UElYSS5EaXNwbGF5T2JqZWN0fSBUaGUgRGlzcGxheU9iamVjdCBpbnN0YW5jZSB0byBpZGVudGlmeVxuICogQHJldHVybiB7bnVtYmVyfSBUaGUgaW5kZXggcG9zaXRpb24gb2YgdGhlIGNoaWxkIGRpc3BsYXkgb2JqZWN0IHRvIGlkZW50aWZ5XG4gKi9cbkNvbnRhaW5lci5wcm90b3R5cGUuZ2V0Q2hpbGRJbmRleCA9IGZ1bmN0aW9uIChjaGlsZClcbntcbiAgICB2YXIgaW5kZXggPSB0aGlzLmNoaWxkcmVuLmluZGV4T2YoY2hpbGQpO1xuXG4gICAgaWYgKGluZGV4ID09PSAtMSlcbiAgICB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignVGhlIHN1cHBsaWVkIERpc3BsYXlPYmplY3QgbXVzdCBiZSBhIGNoaWxkIG9mIHRoZSBjYWxsZXInKTtcbiAgICB9XG5cbiAgICByZXR1cm4gaW5kZXg7XG59O1xuXG4vKipcbiAqIENoYW5nZXMgdGhlIHBvc2l0aW9uIG9mIGFuIGV4aXN0aW5nIGNoaWxkIGluIHRoZSBkaXNwbGF5IG9iamVjdCBjb250YWluZXJcbiAqXG4gKiBAcGFyYW0gY2hpbGQge1BJWEkuRGlzcGxheU9iamVjdH0gVGhlIGNoaWxkIERpc3BsYXlPYmplY3QgaW5zdGFuY2UgZm9yIHdoaWNoIHlvdSB3YW50IHRvIGNoYW5nZSB0aGUgaW5kZXggbnVtYmVyXG4gKiBAcGFyYW0gaW5kZXgge251bWJlcn0gVGhlIHJlc3VsdGluZyBpbmRleCBudW1iZXIgZm9yIHRoZSBjaGlsZCBkaXNwbGF5IG9iamVjdFxuICovXG5Db250YWluZXIucHJvdG90eXBlLnNldENoaWxkSW5kZXggPSBmdW5jdGlvbiAoY2hpbGQsIGluZGV4KVxue1xuICAgIGlmIChpbmRleCA8IDAgfHwgaW5kZXggPj0gdGhpcy5jaGlsZHJlbi5sZW5ndGgpXG4gICAge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RoZSBzdXBwbGllZCBpbmRleCBpcyBvdXQgb2YgYm91bmRzJyk7XG4gICAgfVxuXG4gICAgdmFyIGN1cnJlbnRJbmRleCA9IHRoaXMuZ2V0Q2hpbGRJbmRleChjaGlsZCk7XG5cbiAgICB1dGlscy5yZW1vdmVJdGVtcyh0aGlzLmNoaWxkcmVuLCBjdXJyZW50SW5kZXgsIDEpOyAvLyByZW1vdmUgZnJvbSBvbGQgcG9zaXRpb25cbiAgICB0aGlzLmNoaWxkcmVuLnNwbGljZShpbmRleCwgMCwgY2hpbGQpOyAvL2FkZCBhdCBuZXcgcG9zaXRpb25cbiAgICB0aGlzLm9uQ2hpbGRyZW5DaGFuZ2UoaW5kZXgpO1xufTtcblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBjaGlsZCBhdCB0aGUgc3BlY2lmaWVkIGluZGV4XG4gKlxuICogQHBhcmFtIGluZGV4IHtudW1iZXJ9IFRoZSBpbmRleCB0byBnZXQgdGhlIGNoaWxkIGF0XG4gKiBAcmV0dXJuIHtQSVhJLkRpc3BsYXlPYmplY3R9IFRoZSBjaGlsZCBhdCB0aGUgZ2l2ZW4gaW5kZXgsIGlmIGFueS5cbiAqL1xuQ29udGFpbmVyLnByb3RvdHlwZS5nZXRDaGlsZEF0ID0gZnVuY3Rpb24gKGluZGV4KVxue1xuICAgIGlmIChpbmRleCA8IDAgfHwgaW5kZXggPj0gdGhpcy5jaGlsZHJlbi5sZW5ndGgpXG4gICAge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2dldENoaWxkQXQ6IFN1cHBsaWVkIGluZGV4ICcgKyBpbmRleCArICcgZG9lcyBub3QgZXhpc3QgaW4gdGhlIGNoaWxkIGxpc3QsIG9yIHRoZSBzdXBwbGllZCBEaXNwbGF5T2JqZWN0IGlzIG5vdCBhIGNoaWxkIG9mIHRoZSBjYWxsZXInKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5jaGlsZHJlbltpbmRleF07XG59O1xuXG4vKipcbiAqIFJlbW92ZXMgYSBjaGlsZCBmcm9tIHRoZSBjb250YWluZXIuXG4gKlxuICogQHBhcmFtIGNoaWxkIHtQSVhJLkRpc3BsYXlPYmplY3R9IFRoZSBEaXNwbGF5T2JqZWN0IHRvIHJlbW92ZVxuICogQHJldHVybiB7UElYSS5EaXNwbGF5T2JqZWN0fSBUaGUgY2hpbGQgdGhhdCB3YXMgcmVtb3ZlZC5cbiAqL1xuQ29udGFpbmVyLnByb3RvdHlwZS5yZW1vdmVDaGlsZCA9IGZ1bmN0aW9uIChjaGlsZClcbntcbiAgICB2YXIgYXJndW1lbnRzTGVuZ3RoID0gYXJndW1lbnRzLmxlbmd0aDtcblxuICAgIC8vIGlmIHRoZXJlIGlzIG9ubHkgb25lIGFyZ3VtZW50IHdlIGNhbiBieXBhc3MgbG9vcGluZyB0aHJvdWdoIHRoZSB0aGVtXG4gICAgaWYoYXJndW1lbnRzTGVuZ3RoID4gMSlcbiAgICB7XG4gICAgICAgIC8vIGxvb3AgdGhyb3VnaCB0aGUgYXJndW1lbnRzIHByb3BlcnR5IGFuZCBhZGQgYWxsIGNoaWxkcmVuXG4gICAgICAgIC8vIHVzZSBpdCB0aGUgcmlnaHQgd2F5ICgubGVuZ3RoIGFuZCBbaV0pIHNvIHRoYXQgdGhpcyBmdW5jdGlvbiBjYW4gc3RpbGwgYmUgb3B0aW1pc2VkIGJ5IEpTIHJ1bnRpbWVzXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXJndW1lbnRzTGVuZ3RoOyBpKyspXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMucmVtb3ZlQ2hpbGQoIGFyZ3VtZW50c1tpXSApO1xuICAgICAgICB9XG4gICAgfSAgICAgXG4gICAgZWxzZVxuICAgIHsgICBcbiAgICAgICAgdmFyIGluZGV4ID0gdGhpcy5jaGlsZHJlbi5pbmRleE9mKGNoaWxkKTtcblxuICAgICAgICBpZiAoaW5kZXggPT09IC0xKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjaGlsZC5wYXJlbnQgPSBudWxsO1xuICAgICAgICB1dGlscy5yZW1vdmVJdGVtcyh0aGlzLmNoaWxkcmVuLCBpbmRleCwgMSk7XG5cbiAgICAgICAgLy8gVE9ETyAtIGxldHMgZWl0aGVyIGRvIGFsbCBjYWxsYmFja3Mgb3IgYWxsIGV2ZW50cy4uIG5vdCBib3RoIVxuICAgICAgICB0aGlzLm9uQ2hpbGRyZW5DaGFuZ2UoaW5kZXgpO1xuICAgICAgICBjaGlsZC5lbWl0KCdyZW1vdmVkJywgdGhpcyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGNoaWxkO1xufTtcblxuLyoqXG4gKiBSZW1vdmVzIGEgY2hpbGQgZnJvbSB0aGUgc3BlY2lmaWVkIGluZGV4IHBvc2l0aW9uLlxuICpcbiAqIEBwYXJhbSBpbmRleCB7bnVtYmVyfSBUaGUgaW5kZXggdG8gZ2V0IHRoZSBjaGlsZCBmcm9tXG4gKiBAcmV0dXJuIHtQSVhJLkRpc3BsYXlPYmplY3R9IFRoZSBjaGlsZCB0aGF0IHdhcyByZW1vdmVkLlxuICovXG5Db250YWluZXIucHJvdG90eXBlLnJlbW92ZUNoaWxkQXQgPSBmdW5jdGlvbiAoaW5kZXgpXG57XG4gICAgdmFyIGNoaWxkID0gdGhpcy5nZXRDaGlsZEF0KGluZGV4KTtcblxuICAgIGNoaWxkLnBhcmVudCA9IG51bGw7XG4gICAgdXRpbHMucmVtb3ZlSXRlbXModGhpcy5jaGlsZHJlbiwgaW5kZXgsIDEpO1xuXG4gICAgLy8gVE9ETyAtIGxldHMgZWl0aGVyIGRvIGFsbCBjYWxsYmFja3Mgb3IgYWxsIGV2ZW50cy4uIG5vdCBib3RoIVxuICAgIHRoaXMub25DaGlsZHJlbkNoYW5nZShpbmRleCk7XG4gICAgY2hpbGQuZW1pdCgncmVtb3ZlZCcsIHRoaXMpO1xuXG4gICAgcmV0dXJuIGNoaWxkO1xufTtcblxuLyoqXG4gKiBSZW1vdmVzIGFsbCBjaGlsZHJlbiBmcm9tIHRoaXMgY29udGFpbmVyIHRoYXQgYXJlIHdpdGhpbiB0aGUgYmVnaW4gYW5kIGVuZCBpbmRleGVzLlxuICpcbiAqIEBwYXJhbSBiZWdpbkluZGV4IHtudW1iZXJ9IFRoZSBiZWdpbm5pbmcgcG9zaXRpb24uIERlZmF1bHQgdmFsdWUgaXMgMC5cbiAqIEBwYXJhbSBlbmRJbmRleCB7bnVtYmVyfSBUaGUgZW5kaW5nIHBvc2l0aW9uLiBEZWZhdWx0IHZhbHVlIGlzIHNpemUgb2YgdGhlIGNvbnRhaW5lci5cbiAqL1xuQ29udGFpbmVyLnByb3RvdHlwZS5yZW1vdmVDaGlsZHJlbiA9IGZ1bmN0aW9uIChiZWdpbkluZGV4LCBlbmRJbmRleClcbntcbiAgICB2YXIgYmVnaW4gPSBiZWdpbkluZGV4IHx8IDA7XG4gICAgdmFyIGVuZCA9IHR5cGVvZiBlbmRJbmRleCA9PT0gJ251bWJlcicgPyBlbmRJbmRleCA6IHRoaXMuY2hpbGRyZW4ubGVuZ3RoO1xuICAgIHZhciByYW5nZSA9IGVuZCAtIGJlZ2luO1xuICAgIHZhciByZW1vdmVkLCBpO1xuXG4gICAgaWYgKHJhbmdlID4gMCAmJiByYW5nZSA8PSBlbmQpXG4gICAge1xuICAgICAgICByZW1vdmVkID0gdGhpcy5jaGlsZHJlbi5zcGxpY2UoYmVnaW4sIHJhbmdlKTtcblxuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgcmVtb3ZlZC5sZW5ndGg7ICsraSlcbiAgICAgICAge1xuICAgICAgICAgICAgcmVtb3ZlZFtpXS5wYXJlbnQgPSBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5vbkNoaWxkcmVuQ2hhbmdlKGJlZ2luSW5kZXgpO1xuXG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCByZW1vdmVkLmxlbmd0aDsgKytpKVxuICAgICAgICB7XG4gICAgICAgICAgICByZW1vdmVkW2ldLmVtaXQoJ3JlbW92ZWQnLCB0aGlzKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiByZW1vdmVkO1xuICAgIH1cbiAgICBlbHNlIGlmIChyYW5nZSA9PT0gMCAmJiB0aGlzLmNoaWxkcmVuLmxlbmd0aCA9PT0gMClcbiAgICB7XG4gICAgICAgIHJldHVybiBbXTtcbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ3JlbW92ZUNoaWxkcmVuOiBudW1lcmljIHZhbHVlcyBhcmUgb3V0c2lkZSB0aGUgYWNjZXB0YWJsZSByYW5nZS4nKTtcbiAgICB9XG59O1xuXG4vKipcbiAqIFVzZWZ1bCBmdW5jdGlvbiB0aGF0IHJldHVybnMgYSB0ZXh0dXJlIG9mIHRoZSBkaXNwbGF5IG9iamVjdCB0aGF0IGNhbiB0aGVuIGJlIHVzZWQgdG8gY3JlYXRlIHNwcml0ZXNcbiAqIFRoaXMgY2FuIGJlIHF1aXRlIHVzZWZ1bCBpZiB5b3VyIGRpc3BsYXlPYmplY3QgaXMgc3RhdGljIC8gY29tcGxpY2F0ZWQgYW5kIG5lZWRzIHRvIGJlIHJldXNlZCBtdWx0aXBsZSB0aW1lcy5cbiAqXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuQ2FudmFzUmVuZGVyZXJ8UElYSS5XZWJHTFJlbmRlcmVyfSBUaGUgcmVuZGVyZXIgdXNlZCB0byBnZW5lcmF0ZSB0aGUgdGV4dHVyZS5cbiAqIEBwYXJhbSByZXNvbHV0aW9uIHtudW1iZXJ9IFRoZSByZXNvbHV0aW9uIG9mIHRoZSB0ZXh0dXJlIGJlaW5nIGdlbmVyYXRlZFxuICogQHBhcmFtIHNjYWxlTW9kZSB7bnVtYmVyfSBTZWUge0BsaW5rIFBJWEkuU0NBTEVfTU9ERVN9IGZvciBwb3NzaWJsZSB2YWx1ZXNcbiAqIEByZXR1cm4ge1BJWEkuVGV4dHVyZX0gYSB0ZXh0dXJlIG9mIHRoZSBkaXNwbGF5IG9iamVjdFxuICovXG5Db250YWluZXIucHJvdG90eXBlLmdlbmVyYXRlVGV4dHVyZSA9IGZ1bmN0aW9uIChyZW5kZXJlciwgcmVzb2x1dGlvbiwgc2NhbGVNb2RlKVxue1xuICAgIHZhciBib3VuZHMgPSB0aGlzLmdldExvY2FsQm91bmRzKCk7XG5cbiAgICB2YXIgcmVuZGVyVGV4dHVyZSA9IG5ldyBSZW5kZXJUZXh0dXJlKHJlbmRlcmVyLCBib3VuZHMud2lkdGggfCAwLCBib3VuZHMuaGVpZ2h0IHwgMCwgc2NhbGVNb2RlLCByZXNvbHV0aW9uKTtcblxuICAgIF90ZW1wTWF0cml4LnR4ID0gLWJvdW5kcy54O1xuICAgIF90ZW1wTWF0cml4LnR5ID0gLWJvdW5kcy55O1xuXG4gICAgcmVuZGVyVGV4dHVyZS5yZW5kZXIodGhpcywgX3RlbXBNYXRyaXgpO1xuXG4gICAgcmV0dXJuIHJlbmRlclRleHR1cmU7XG59O1xuXG4vKlxuICogVXBkYXRlcyB0aGUgdHJhbnNmb3JtIG9uIGFsbCBjaGlsZHJlbiBvZiB0aGlzIGNvbnRhaW5lciBmb3IgcmVuZGVyaW5nXG4gKlxuICogQHByaXZhdGVcbiAqL1xuQ29udGFpbmVyLnByb3RvdHlwZS51cGRhdGVUcmFuc2Zvcm0gPSBmdW5jdGlvbiAoKVxue1xuICAgIGlmICghdGhpcy52aXNpYmxlKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuZGlzcGxheU9iamVjdFVwZGF0ZVRyYW5zZm9ybSgpO1xuXG4gICAgZm9yICh2YXIgaSA9IDAsIGogPSB0aGlzLmNoaWxkcmVuLmxlbmd0aDsgaSA8IGo7ICsraSlcbiAgICB7XG4gICAgICAgIHRoaXMuY2hpbGRyZW5baV0udXBkYXRlVHJhbnNmb3JtKCk7XG4gICAgfVxuXG4gICAgdGhpcy5kaXJ0eVRyYW5zZm9ybSA9IGZhbHNlO1xufTtcblxuLy8gcGVyZm9ybWFuY2UgaW5jcmVhc2UgdG8gYXZvaWQgdXNpbmcgY2FsbC4uICgxMHggZmFzdGVyKVxuQ29udGFpbmVyLnByb3RvdHlwZS5jb250YWluZXJVcGRhdGVUcmFuc2Zvcm0gPSBDb250YWluZXIucHJvdG90eXBlLnVwZGF0ZVRyYW5zZm9ybTtcblxuLyoqXG4gKiBSZXRyaWV2ZXMgdGhlIGJvdW5kcyBvZiB0aGUgQ29udGFpbmVyIGFzIGEgcmVjdGFuZ2xlLiBUaGUgYm91bmRzIGNhbGN1bGF0aW9uIHRha2VzIGFsbCB2aXNpYmxlIGNoaWxkcmVuIGludG8gY29uc2lkZXJhdGlvbi5cbiAqXG4gKiBAcmV0dXJuIHtQSVhJLlJlY3RhbmdsZX0gVGhlIHJlY3Rhbmd1bGFyIGJvdW5kaW5nIGFyZWFcbiAqL1xuQ29udGFpbmVyLnByb3RvdHlwZS5nZXRCb3VuZHMgPSBmdW5jdGlvbiAoKVxue1xuICAgIGlmKCF0aGlzLl9jdXJyZW50Qm91bmRzKVxuICAgIHtcblxuICAgICAgICBpZiAodGhpcy5jaGlsZHJlbi5sZW5ndGggPT09IDApXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiBtYXRoLlJlY3RhbmdsZS5FTVBUWTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFRPRE8gdGhlIGJvdW5kcyBoYXZlIGFscmVhZHkgYmVlbiBjYWxjdWxhdGVkIHRoaXMgcmVuZGVyIHNlc3Npb24gc28gcmV0dXJuIHdoYXQgd2UgaGF2ZVxuXG4gICAgICAgIHZhciBtaW5YID0gSW5maW5pdHk7XG4gICAgICAgIHZhciBtaW5ZID0gSW5maW5pdHk7XG5cbiAgICAgICAgdmFyIG1heFggPSAtSW5maW5pdHk7XG4gICAgICAgIHZhciBtYXhZID0gLUluZmluaXR5O1xuXG4gICAgICAgIHZhciBjaGlsZEJvdW5kcztcbiAgICAgICAgdmFyIGNoaWxkTWF4WDtcbiAgICAgICAgdmFyIGNoaWxkTWF4WTtcblxuICAgICAgICB2YXIgY2hpbGRWaXNpYmxlID0gZmFsc2U7XG5cbiAgICAgICAgZm9yICh2YXIgaSA9IDAsIGogPSB0aGlzLmNoaWxkcmVuLmxlbmd0aDsgaSA8IGo7ICsraSlcbiAgICAgICAge1xuICAgICAgICAgICAgdmFyIGNoaWxkID0gdGhpcy5jaGlsZHJlbltpXTtcblxuICAgICAgICAgICAgaWYgKCFjaGlsZC52aXNpYmxlKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjaGlsZFZpc2libGUgPSB0cnVlO1xuXG4gICAgICAgICAgICBjaGlsZEJvdW5kcyA9IHRoaXMuY2hpbGRyZW5baV0uZ2V0Qm91bmRzKCk7XG5cbiAgICAgICAgICAgIG1pblggPSBtaW5YIDwgY2hpbGRCb3VuZHMueCA/IG1pblggOiBjaGlsZEJvdW5kcy54O1xuICAgICAgICAgICAgbWluWSA9IG1pblkgPCBjaGlsZEJvdW5kcy55ID8gbWluWSA6IGNoaWxkQm91bmRzLnk7XG5cbiAgICAgICAgICAgIGNoaWxkTWF4WCA9IGNoaWxkQm91bmRzLndpZHRoICsgY2hpbGRCb3VuZHMueDtcbiAgICAgICAgICAgIGNoaWxkTWF4WSA9IGNoaWxkQm91bmRzLmhlaWdodCArIGNoaWxkQm91bmRzLnk7XG5cbiAgICAgICAgICAgIG1heFggPSBtYXhYID4gY2hpbGRNYXhYID8gbWF4WCA6IGNoaWxkTWF4WDtcbiAgICAgICAgICAgIG1heFkgPSBtYXhZID4gY2hpbGRNYXhZID8gbWF4WSA6IGNoaWxkTWF4WTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghY2hpbGRWaXNpYmxlKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gbWF0aC5SZWN0YW5nbGUuRU1QVFk7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgYm91bmRzID0gdGhpcy5fYm91bmRzO1xuXG4gICAgICAgIGJvdW5kcy54ID0gbWluWDtcbiAgICAgICAgYm91bmRzLnkgPSBtaW5ZO1xuICAgICAgICBib3VuZHMud2lkdGggPSBtYXhYIC0gbWluWDtcbiAgICAgICAgYm91bmRzLmhlaWdodCA9IG1heFkgLSBtaW5ZO1xuXG4gICAgICAgIHRoaXMuX2N1cnJlbnRCb3VuZHMgPSBib3VuZHM7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuX2N1cnJlbnRCb3VuZHM7XG59O1xuXG5Db250YWluZXIucHJvdG90eXBlLmNvbnRhaW5lckdldEJvdW5kcyA9IENvbnRhaW5lci5wcm90b3R5cGUuZ2V0Qm91bmRzO1xuXG4vKipcbiAqIFJldHJpZXZlcyB0aGUgbm9uLWdsb2JhbCBsb2NhbCBib3VuZHMgb2YgdGhlIENvbnRhaW5lciBhcyBhIHJlY3RhbmdsZS5cbiAqIFRoZSBjYWxjdWxhdGlvbiB0YWtlcyBhbGwgdmlzaWJsZSBjaGlsZHJlbiBpbnRvIGNvbnNpZGVyYXRpb24uXG4gKlxuICogQHJldHVybiB7UElYSS5SZWN0YW5nbGV9IFRoZSByZWN0YW5ndWxhciBib3VuZGluZyBhcmVhXG4gKi9cbkNvbnRhaW5lci5wcm90b3R5cGUuZ2V0TG9jYWxCb3VuZHMgPSBmdW5jdGlvbiAoKVxue1xuICAgIHZhciBtYXRyaXhDYWNoZSA9IHRoaXMud29ybGRUcmFuc2Zvcm07XG5cbiAgICB0aGlzLndvcmxkVHJhbnNmb3JtID0gbWF0aC5NYXRyaXguSURFTlRJVFk7XG5cbiAgICBmb3IgKHZhciBpID0gMCwgaiA9IHRoaXMuY2hpbGRyZW4ubGVuZ3RoOyBpIDwgajsgKytpKVxuICAgIHtcbiAgICAgICAgdGhpcy5jaGlsZHJlbltpXS51cGRhdGVUcmFuc2Zvcm0oKTtcbiAgICB9XG5cbiAgICB0aGlzLndvcmxkVHJhbnNmb3JtID0gbWF0cml4Q2FjaGU7XG5cbiAgICB0aGlzLl9jdXJyZW50Qm91bmRzID0gbnVsbDtcblxuICAgIHJldHVybiB0aGlzLmdldEJvdW5kcyggbWF0aC5NYXRyaXguSURFTlRJVFkgKTtcbn07XG5cbi8qKlxuICogUmVuZGVycyB0aGUgb2JqZWN0IHVzaW5nIHRoZSBXZWJHTCByZW5kZXJlclxuICpcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5XZWJHTFJlbmRlcmVyfSBUaGUgcmVuZGVyZXJcbiAqL1xuQ29udGFpbmVyLnByb3RvdHlwZS5yZW5kZXJXZWJHTCA9IGZ1bmN0aW9uIChyZW5kZXJlcilcbntcblxuICAgIC8vIGlmIHRoZSBvYmplY3QgaXMgbm90IHZpc2libGUgb3IgdGhlIGFscGhhIGlzIDAgdGhlbiBubyBuZWVkIHRvIHJlbmRlciB0aGlzIGVsZW1lbnRcbiAgICBpZiAoIXRoaXMudmlzaWJsZSB8fCB0aGlzLndvcmxkQWxwaGEgPD0gMCB8fCAhdGhpcy5yZW5kZXJhYmxlKVxuICAgIHtcbiAgICAgIFxuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFyIGksIGo7XG5cbiAgICAvLyBkbyBhIHF1aWNrIGNoZWNrIHRvIHNlZSBpZiB0aGlzIGVsZW1lbnQgaGFzIGEgbWFzayBvciBhIGZpbHRlci5cbiAgICBpZiAodGhpcy5fbWFzayB8fCB0aGlzLl9maWx0ZXJzKVxuICAgIHtcbiAgICAgICAgcmVuZGVyZXIuY3VycmVudFJlbmRlcmVyLmZsdXNoKCk7XG5cbiAgICAgICAgLy8gcHVzaCBmaWx0ZXIgZmlyc3QgYXMgd2UgbmVlZCB0byBlbnN1cmUgdGhlIHN0ZW5jaWwgYnVmZmVyIGlzIGNvcnJlY3QgZm9yIGFueSBtYXNraW5nXG4gICAgICAgIGlmICh0aGlzLl9maWx0ZXJzICYmIHRoaXMuX2ZpbHRlcnMubGVuZ3RoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLnB1c2hGaWx0ZXIodGhpcywgdGhpcy5fZmlsdGVycyk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5fbWFzaylcbiAgICAgICAge1xuICAgICAgICAgICAgcmVuZGVyZXIubWFza01hbmFnZXIucHVzaE1hc2sodGhpcywgdGhpcy5fbWFzayk7XG4gICAgICAgIH1cblxuICAgICAgICByZW5kZXJlci5jdXJyZW50UmVuZGVyZXIuc3RhcnQoKTtcblxuICAgICAgICAvLyBhZGQgdGhpcyBvYmplY3QgdG8gdGhlIGJhdGNoLCBvbmx5IHJlbmRlcmVkIGlmIGl0IGhhcyBhIHRleHR1cmUuXG4gICAgICAgIHRoaXMuX3JlbmRlcldlYkdMKHJlbmRlcmVyKTtcblxuICAgICAgICAvLyBub3cgbG9vcCB0aHJvdWdoIHRoZSBjaGlsZHJlbiBhbmQgbWFrZSBzdXJlIHRoZXkgZ2V0IHJlbmRlcmVkXG4gICAgICAgIGZvciAoaSA9IDAsIGogPSB0aGlzLmNoaWxkcmVuLmxlbmd0aDsgaSA8IGo7IGkrKylcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5jaGlsZHJlbltpXS5yZW5kZXJXZWJHTChyZW5kZXJlcik7XG4gICAgICAgIH1cblxuICAgICAgICByZW5kZXJlci5jdXJyZW50UmVuZGVyZXIuZmx1c2goKTtcblxuICAgICAgICBpZiAodGhpcy5fbWFzaylcbiAgICAgICAge1xuICAgICAgICAgICAgcmVuZGVyZXIubWFza01hbmFnZXIucG9wTWFzayh0aGlzLCB0aGlzLl9tYXNrKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLl9maWx0ZXJzKVxuICAgICAgICB7XG4gICAgICAgICAgICByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLnBvcEZpbHRlcigpO1xuXG4gICAgICAgIH1cbiAgICAgICAgcmVuZGVyZXIuY3VycmVudFJlbmRlcmVyLnN0YXJ0KCk7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHRoaXMuX3JlbmRlcldlYkdMKHJlbmRlcmVyKTtcblxuICAgICAgICAvLyBzaW1wbGUgcmVuZGVyIGNoaWxkcmVuIVxuICAgICAgICBmb3IgKGkgPSAwLCBqID0gdGhpcy5jaGlsZHJlbi5sZW5ndGg7IGkgPCBqOyArK2kpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuY2hpbGRyZW5baV0ucmVuZGVyV2ViR0wocmVuZGVyZXIpO1xuICAgICAgICB9XG4gICAgfVxufTtcblxuLyoqXG4gKiBUbyBiZSBvdmVycmlkZGVuIGJ5IHRoZSBzdWJjbGFzc1xuICpcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5XZWJHTFJlbmRlcmVyfSBUaGUgcmVuZGVyZXJcbiAqIEBwcml2YXRlXG4gKi9cbkNvbnRhaW5lci5wcm90b3R5cGUuX3JlbmRlcldlYkdMID0gZnVuY3Rpb24gKHJlbmRlcmVyKSAvLyBqc2hpbnQgdW51c2VkOmZhbHNlXG57XG4gICAgLy8gdGhpcyBpcyB3aGVyZSBjb250ZW50IGl0c2VsZiBnZXRzIHJlbmRlcmVkLi4uXG59O1xuXG4vKipcbiAqIFRvIGJlIG92ZXJyaWRkZW4gYnkgdGhlIHN1YmNsYXNzXG4gKlxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLkNhbnZhc1JlbmRlcmVyfSBUaGUgcmVuZGVyZXJcbiAqIEBwcml2YXRlXG4gKi9cbkNvbnRhaW5lci5wcm90b3R5cGUuX3JlbmRlckNhbnZhcyA9IGZ1bmN0aW9uIChyZW5kZXJlcikgLy8ganNoaW50IHVudXNlZDpmYWxzZVxue1xuICAgIC8vIHRoaXMgaXMgd2hlcmUgY29udGVudCBpdHNlbGYgZ2V0cyByZW5kZXJlZC4uLlxufTtcblxuXG4vKipcbiAqIFJlbmRlcnMgdGhlIG9iamVjdCB1c2luZyB0aGUgQ2FudmFzIHJlbmRlcmVyXG4gKlxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLkNhbnZhc1JlbmRlcmVyfSBUaGUgcmVuZGVyZXJcbiAqL1xuQ29udGFpbmVyLnByb3RvdHlwZS5yZW5kZXJDYW52YXMgPSBmdW5jdGlvbiAocmVuZGVyZXIpXG57XG4gICAgLy8gaWYgbm90IHZpc2libGUgb3IgdGhlIGFscGhhIGlzIDAgdGhlbiBubyBuZWVkIHRvIHJlbmRlciB0aGlzXG4gICAgaWYgKCF0aGlzLnZpc2libGUgfHwgdGhpcy5hbHBoYSA8PSAwIHx8ICF0aGlzLnJlbmRlcmFibGUpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX21hc2spXG4gICAge1xuICAgICAgICByZW5kZXJlci5tYXNrTWFuYWdlci5wdXNoTWFzayh0aGlzLl9tYXNrLCByZW5kZXJlcik7XG4gICAgfVxuXG4gICAgdGhpcy5fcmVuZGVyQ2FudmFzKHJlbmRlcmVyKTtcbiAgICBmb3IgKHZhciBpID0gMCwgaiA9IHRoaXMuY2hpbGRyZW4ubGVuZ3RoOyBpIDwgajsgKytpKVxuICAgIHtcbiAgICAgICAgdGhpcy5jaGlsZHJlbltpXS5yZW5kZXJDYW52YXMocmVuZGVyZXIpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLl9tYXNrKVxuICAgIHtcbiAgICAgICAgcmVuZGVyZXIubWFza01hbmFnZXIucG9wTWFzayhyZW5kZXJlcik7XG4gICAgfVxufTtcblxuLyoqXG4gKiBEZXN0cm95cyB0aGUgY29udGFpbmVyXG4gKiBAcGFyYW0gW2Rlc3Ryb3lDaGlsZHJlbj1mYWxzZV0ge2Jvb2xlYW59IGlmIHNldCB0byB0cnVlLCBhbGwgdGhlIGNoaWxkcmVuIHdpbGwgaGF2ZSB0aGVpciBkZXN0cm95IG1ldGhvZCBjYWxsZWQgYXMgd2VsbFxuICovXG5Db250YWluZXIucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoZGVzdHJveUNoaWxkcmVuKVxue1xuICAgIERpc3BsYXlPYmplY3QucHJvdG90eXBlLmRlc3Ryb3kuY2FsbCh0aGlzKTtcblxuICAgIGlmIChkZXN0cm95Q2hpbGRyZW4pXG4gICAge1xuICAgICAgICBmb3IgKHZhciBpID0gMCwgaiA9IHRoaXMuY2hpbGRyZW4ubGVuZ3RoOyBpIDwgajsgKytpKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmNoaWxkcmVuW2ldLmRlc3Ryb3koZGVzdHJveUNoaWxkcmVuKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMucmVtb3ZlQ2hpbGRyZW4oKTtcblxuICAgIHRoaXMuY2hpbGRyZW4gPSBudWxsO1xufTtcbiIsInZhciBtYXRoID0gcmVxdWlyZSgnLi4vbWF0aCcpLFxuICAgIFJlbmRlclRleHR1cmUgPSByZXF1aXJlKCcuLi90ZXh0dXJlcy9SZW5kZXJUZXh0dXJlJyksXG4gICAgRXZlbnRFbWl0dGVyID0gcmVxdWlyZSgnZXZlbnRlbWl0dGVyMycpLFxuICAgIENPTlNUID0gcmVxdWlyZSgnLi4vY29uc3QnKSxcbiAgICBfdGVtcE1hdHJpeCA9IG5ldyBtYXRoLk1hdHJpeCgpLFxuICAgIF90ZW1wRGlzcGxheU9iamVjdFBhcmVudCA9IHt3b3JsZFRyYW5zZm9ybTpuZXcgbWF0aC5NYXRyaXgoKSwgd29ybGRBbHBoYToxLCBjaGlsZHJlbjpbXX07XG5cblxuLyoqXG4gKiBUaGUgYmFzZSBjbGFzcyBmb3IgYWxsIG9iamVjdHMgdGhhdCBhcmUgcmVuZGVyZWQgb24gdGhlIHNjcmVlbi5cbiAqIFRoaXMgaXMgYW4gYWJzdHJhY3QgY2xhc3MgYW5kIHNob3VsZCBub3QgYmUgdXNlZCBvbiBpdHMgb3duIHJhdGhlciBpdCBzaG91bGQgYmUgZXh0ZW5kZWQuXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBFdmVudEVtaXR0ZXJcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKi9cbmZ1bmN0aW9uIERpc3BsYXlPYmplY3QoKVxue1xuICAgIEV2ZW50RW1pdHRlci5jYWxsKHRoaXMpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGNvb3JkaW5hdGUgb2YgdGhlIG9iamVjdCByZWxhdGl2ZSB0byB0aGUgbG9jYWwgY29vcmRpbmF0ZXMgb2YgdGhlIHBhcmVudC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuUG9pbnR9XG4gICAgICovXG4gICAgdGhpcy5wb3NpdGlvbiA9IG5ldyBtYXRoLlBvaW50KCk7XG4gICAgdGhpcy5fcG9zaXRpb24gPSBuZXcgQ2FjaGVQb2ludCh0aGlzKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBzY2FsZSBmYWN0b3Igb2YgdGhlIG9iamVjdC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuUG9pbnR9XG4gICAgICovXG4gICAgdGhpcy5zY2FsZSA9IG5ldyBtYXRoLlBvaW50KDEsIDEpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHBpdm90IHBvaW50IG9mIHRoZSBkaXNwbGF5T2JqZWN0IHRoYXQgaXQgcm90YXRlcyBhcm91bmRcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuUG9pbnR9XG4gICAgICovXG4gICAgdGhpcy5waXZvdCA9IG5ldyBtYXRoLlBvaW50KDAsIDApO1xuXG5cbiAgICAvKipcbiAgICAgKiBUaGUgc2tldyBmYWN0b3IgZm9yIHRoZSBvYmplY3QgaW4gcmFkaWFucy5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuUG9pbnR9XG4gICAgICovXG4gICAgdGhpcy5za2V3ID0gbmV3IG1hdGguUG9pbnQoMCwgMCk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgcm90YXRpb24gb2YgdGhlIG9iamVjdCBpbiByYWRpYW5zLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMuX3JvdGF0aW9uID0gMDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBvcGFjaXR5IG9mIHRoZSBvYmplY3QuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy5hbHBoYSA9IDE7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgdmlzaWJpbGl0eSBvZiB0aGUgb2JqZWN0LiBJZiBmYWxzZSB0aGUgb2JqZWN0IHdpbGwgbm90IGJlIGRyYXduLCBhbmRcbiAgICAgKiB0aGUgdXBkYXRlVHJhbnNmb3JtIGZ1bmN0aW9uIHdpbGwgbm90IGJlIGNhbGxlZC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICovXG4gICAgdGhpcy52aXNpYmxlID0gdHJ1ZTtcblxuICAgIC8qKlxuICAgICAqIENhbiB0aGlzIG9iamVjdCBiZSByZW5kZXJlZCwgaWYgZmFsc2UgdGhlIG9iamVjdCB3aWxsIG5vdCBiZSBkcmF3biBidXQgdGhlIHVwZGF0ZVRyYW5zZm9ybVxuICAgICAqIG1ldGhvZHMgd2lsbCBzdGlsbCBiZSBjYWxsZWQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqL1xuICAgIHRoaXMucmVuZGVyYWJsZSA9IHRydWU7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgZGlzcGxheSBvYmplY3QgY29udGFpbmVyIHRoYXQgY29udGFpbnMgdGhpcyBkaXNwbGF5IG9iamVjdC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuQ29udGFpbmVyfVxuICAgICAqIEByZWFkT25seVxuICAgICAqL1xuICAgIHRoaXMucGFyZW50ID0gbnVsbDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBtdWx0aXBsaWVkIGFscGhhIG9mIHRoZSBkaXNwbGF5T2JqZWN0XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQHJlYWRPbmx5XG4gICAgICovXG4gICAgdGhpcy53b3JsZEFscGhhID0gMTtcblxuICAgIC8qKlxuICAgICAqIEN1cnJlbnQgdHJhbnNmb3JtIG9mIHRoZSBvYmplY3QgYmFzZWQgb24gd29ybGQgKHBhcmVudCkgZmFjdG9yc1xuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5NYXRyaXh9XG4gICAgICogQHJlYWRPbmx5XG4gICAgICovXG4gICAgdGhpcy53b3JsZFRyYW5zZm9ybSA9IG5ldyBtYXRoLk1hdHJpeCgpO1xuICAgIHRoaXMubG9jYWxUcmFuc2Zvcm0gPSBuZXcgbWF0aC5NYXRyaXgoKTtcblxuXG4gICAgLyoqXG4gICAgICogVGhlIGFyZWEgdGhlIGZpbHRlciBpcyBhcHBsaWVkIHRvLiBUaGlzIGlzIHVzZWQgYXMgbW9yZSBvZiBhbiBvcHRpbWlzYXRpb25cbiAgICAgKiByYXRoZXIgdGhhbiBmaWd1cmluZyBvdXQgdGhlIGRpbWVuc2lvbnMgb2YgdGhlIGRpc3BsYXlPYmplY3QgZWFjaCBmcmFtZSB5b3UgY2FuIHNldCB0aGlzIHJlY3RhbmdsZVxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5SZWN0YW5nbGV9XG4gICAgICovXG4gICAgdGhpcy5maWx0ZXJBcmVhID0gbnVsbDtcblxuICAgIC8qKlxuICAgICAqIGNhY2hlZCBzaW4gcm90YXRpb25cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX3NyID0gMDtcblxuICAgIC8qKlxuICAgICAqIGNhY2hlZCBjb3Mgcm90YXRpb25cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX2NyID0gMTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBvcmlnaW5hbCwgY2FjaGVkIGJvdW5kcyBvZiB0aGUgb2JqZWN0XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlJlY3RhbmdsZX1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX2JvdW5kcyA9IG5ldyBtYXRoLlJlY3RhbmdsZSgwLCAwLCAxLCAxKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBtb3N0IHVwLXRvLWRhdGUgYm91bmRzIG9mIHRoZSBvYmplY3RcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuUmVjdGFuZ2xlfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fY3VycmVudEJvdW5kcyA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgb3JpZ2luYWwsIGNhY2hlZCBtYXNrIG9mIHRoZSBvYmplY3RcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuUmVjdGFuZ2xlfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fbWFzayA9IG51bGw7XG5cbiAgICB0aGlzLmRpcnR5VHJhbnNmb3JtID0gdHJ1ZTtcbn1cblxuLy8gY29uc3RydWN0b3JcbkRpc3BsYXlPYmplY3QucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShFdmVudEVtaXR0ZXIucHJvdG90eXBlKTtcbkRpc3BsYXlPYmplY3QucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gRGlzcGxheU9iamVjdDtcbm1vZHVsZS5leHBvcnRzID0gRGlzcGxheU9iamVjdDtcblxudmFyIENhY2hlUG9pbnQgPSBmdW5jdGlvbihkb2Mpe1xuICAgIFxuICAgIHRoaXMuZG9jID0gZG9jO1xuXG4gICAgdGhpcy54ID0gMDtcbiAgICB0aGlzLnkgPSAwO1xufVxuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhDYWNoZVBvaW50LnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFRoZSBwb3NpdGlvbiBvZiB0aGUgZGlzcGxheU9iamVjdCBvbiB0aGUgeCBheGlzIHJlbGF0aXZlIHRvIHRoZSBsb2NhbCBjb29yZGluYXRlcyBvZiB0aGUgcGFyZW50LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLkRpc3BsYXlPYmplY3QjXG4gICAgICovXG4gICAgeDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmRvYy5wb3NpdGlvbi54O1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5kb2MucG9zaXRpb24ueCA9IHZhbHVlO1xuICAgICAgICAgICAgdGhpcy5kb2MuZGlydHlUcmFuc2Zvcm0gPSB0cnVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIHk6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5kb2MucG9zaWl0b24ueTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuZG9jLnBvc2l0aW9uLnkgPSB2YWx1ZTtcbiAgICAgICAgICAgIHRoaXMuZG9jLmRpcnR5VHJhbnNmb3JtID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuXG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKERpc3BsYXlPYmplY3QucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogVGhlIHBvc2l0aW9uIG9mIHRoZSBkaXNwbGF5T2JqZWN0IG9uIHRoZSB4IGF4aXMgcmVsYXRpdmUgdG8gdGhlIGxvY2FsIGNvb3JkaW5hdGVzIG9mIHRoZSBwYXJlbnQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuRGlzcGxheU9iamVjdCNcbiAgICAgKi9cbiAgICB4OiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMucG9zaXRpb24ueDtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMucG9zaXRpb24ueCA9IHZhbHVlO1xuICAgICAgICAgICAgdGhpcy5kaXJ0eVRyYW5zZm9ybSA9IHRydWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVGhlIHBvc2l0aW9uIG9mIHRoZSBkaXNwbGF5T2JqZWN0IG9uIHRoZSB5IGF4aXMgcmVsYXRpdmUgdG8gdGhlIGxvY2FsIGNvb3JkaW5hdGVzIG9mIHRoZSBwYXJlbnQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuRGlzcGxheU9iamVjdCNcbiAgICAgKi9cbiAgICB5OiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMucG9zaXRpb24ueTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMucG9zaXRpb24ueSA9IHZhbHVlO1xuICAgICAgICAgICAgdGhpcy5kaXJ0eVRyYW5zZm9ybSA9IHRydWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgc2NhbGVYOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuc2NhbGUueDtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuc2NhbGUueCA9IHZhbHVlO1xuICAgICAgICAgICAgdGhpcy5kaXJ0eVRyYW5zZm9ybSA9IHRydWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVGhlIHBvc2l0aW9uIG9mIHRoZSBkaXNwbGF5T2JqZWN0IG9uIHRoZSB5IGF4aXMgcmVsYXRpdmUgdG8gdGhlIGxvY2FsIGNvb3JkaW5hdGVzIG9mIHRoZSBwYXJlbnQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuRGlzcGxheU9iamVjdCNcbiAgICAgKi9cbiAgICBzY2FsZVk6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5zY2FsZS55O1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5zY2FsZS55ID0gdmFsdWU7XG4gICAgICAgICAgICB0aGlzLmRpcnR5VHJhbnNmb3JtID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICByb3RhdGlvbjoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9yb3RhdGlvbjtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuX3JvdGF0aW9uID0gdmFsdWU7XG4gICAgICAgICAgICB0aGlzLmRpcnR5VHJhbnNmb3JtID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMuX3NyID0gTWF0aC5zaW4odmFsdWUpO1xuICAgICAgICAgICAgdGhpcy5fY3IgPSBNYXRoLmNvcyh2YWx1ZSk7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVGhlIHBvc2l0aW9uIG9mIHRoZSBkaXNwbGF5T2JqZWN0IG9uIHRoZSB5IGF4aXMgcmVsYXRpdmUgdG8gdGhlIGxvY2FsIGNvb3JkaW5hdGVzIG9mIHRoZSBwYXJlbnQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuRGlzcGxheU9iamVjdCNcbiAgICAgKi9cbiAgICBzY2FsZVk6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5zY2FsZS55O1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5zY2FsZS55ID0gdmFsdWU7XG4gICAgICAgICAgICB0aGlzLmRpcnR5VHJhbnNmb3JtID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBJbmRpY2F0ZXMgaWYgdGhlIHNwcml0ZSBpcyBnbG9iYWxseSB2aXNpYmxlLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5EaXNwbGF5T2JqZWN0I1xuICAgICAqIEByZWFkb25seVxuICAgICAqL1xuICAgIHdvcmxkVmlzaWJsZToge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHZhciBpdGVtID0gdGhpcztcblxuICAgICAgICAgICAgZG8ge1xuICAgICAgICAgICAgICAgIGlmICghaXRlbS52aXNpYmxlKVxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGl0ZW0gPSBpdGVtLnBhcmVudDtcbiAgICAgICAgICAgIH0gd2hpbGUgKGl0ZW0pO1xuXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBTZXRzIGEgbWFzayBmb3IgdGhlIGRpc3BsYXlPYmplY3QuIEEgbWFzayBpcyBhbiBvYmplY3QgdGhhdCBsaW1pdHMgdGhlIHZpc2liaWxpdHkgb2YgYW4gb2JqZWN0IHRvIHRoZSBzaGFwZSBvZiB0aGUgbWFzayBhcHBsaWVkIHRvIGl0LlxuICAgICAqIEluIFBJWEkgYSByZWd1bGFyIG1hc2sgbXVzdCBiZSBhIFBJWEkuR3JhcGhpY3Mgb3IgYSBQSVhJLlNwcml0ZSBvYmplY3QuIFRoaXMgYWxsb3dzIGZvciBtdWNoIGZhc3RlciBtYXNraW5nIGluIGNhbnZhcyBhcyBpdCB1dGlsaXNlcyBzaGFwZSBjbGlwcGluZy5cbiAgICAgKiBUbyByZW1vdmUgYSBtYXNrLCBzZXQgdGhpcyBwcm9wZXJ0eSB0byBudWxsLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5HcmFwaGljc3xQSVhJLlNwcml0ZX1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5EaXNwbGF5T2JqZWN0I1xuICAgICAqL1xuICAgIG1hc2s6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fbWFzaztcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGlmICh0aGlzLl9tYXNrKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHRoaXMuX21hc2sucmVuZGVyYWJsZSA9IHRydWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuX21hc2sgPSB2YWx1ZTtcblxuICAgICAgICAgICAgaWYgKHRoaXMuX21hc2spXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdGhpcy5fbWFzay5yZW5kZXJhYmxlID0gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgZmlsdGVycyBmb3IgdGhlIGRpc3BsYXlPYmplY3QuXG4gICAgICogKiBJTVBPUlRBTlQ6IFRoaXMgaXMgYSB3ZWJHTCBvbmx5IGZlYXR1cmUgYW5kIHdpbGwgYmUgaWdub3JlZCBieSB0aGUgY2FudmFzIHJlbmRlcmVyLlxuICAgICAqIFRvIHJlbW92ZSBmaWx0ZXJzIHNpbXBseSBzZXQgdGhpcyBwcm9wZXJ0eSB0byAnbnVsbCdcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuQWJzdHJhY3RGaWx0ZXJbXX1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5EaXNwbGF5T2JqZWN0I1xuICAgICAqL1xuICAgIGZpbHRlcnM6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fZmlsdGVycyAmJiB0aGlzLl9maWx0ZXJzLnNsaWNlKCk7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLl9maWx0ZXJzID0gdmFsdWUgJiYgdmFsdWUuc2xpY2UoKTtcbiAgICAgICAgfVxuICAgIH1cblxufSk7XG5cbi8qXG4gKiBVcGRhdGVzIHRoZSBvYmplY3QgdHJhbnNmb3JtIGZvciByZW5kZXJpbmdcbiAqXG4gKiBUT0RPIC0gT3B0aW1pemF0aW9uIHBhc3MhXG4gKi9cbkRpc3BsYXlPYmplY3QucHJvdG90eXBlLnVwZGF0ZVRyYW5zZm9ybSA9IGZ1bmN0aW9uICgpXG57XG4gICAgdmFyIHB0ID0gdGhpcy5wYXJlbnQud29ybGRUcmFuc2Zvcm07XG4gICAgdmFyIHd0ID0gdGhpcy53b3JsZFRyYW5zZm9ybTtcbiAgICB2YXIgbHQgPSB0aGlzLmxvY2FsVHJhbnNmb3JtO1xuXG4gICAgaWYodGhpcy5kaXJ0eVRyYW5zZm9ybSlcbiAgICB7XG4gICAgICAgIC8vIGdldCB0aGUgbWF0cml4IHZhbHVlcyBvZiB0aGUgZGlzcGxheW9iamVjdCBiYXNlZCBvbiBpdHMgdHJhbnNmb3JtIHByb3BlcnRpZXMuLlxuICAgICAgICBsdC5hICA9ICB0aGlzLl9jciAqIHRoaXMuc2NhbGUueDtcbiAgICAgICAgbHQuYiAgPSAgdGhpcy5fc3IgKiB0aGlzLnNjYWxlLng7XG4gICAgICAgIGx0LmMgID0gLXRoaXMuX3NyICogdGhpcy5zY2FsZS55O1xuICAgICAgICBsdC5kICA9ICB0aGlzLl9jciAqIHRoaXMuc2NhbGUueTtcbiAgICAgICAgbHQudHggPSAgdGhpcy5wb3NpdGlvbi54IC0gKHRoaXMucGl2b3QueCAqIGx0LmEgKyB0aGlzLnBpdm90LnkgKiBsdC5jKTtcbiAgICAgICAgbHQudHkgPSAgdGhpcy5wb3NpdGlvbi55IC0gKHRoaXMucGl2b3QueCAqIGx0LmIgKyB0aGlzLnBpdm90LnkgKiBsdC5kKTtcbiAgICB9XG5cbiAgICBpZih0aGlzLmRpcnR5VHJhbnNmb3JtIHx8IHRoaXMucGFyZW50LmRpcnR5VHJhbnNmb3JtKVxuICAgIHsgICAgICBcbiAgICAgICAgLy8gY29uY2F0IHRoZSBwYXJlbnQgbWF0cml4IHdpdGggdGhlIG9iamVjdHMgdHJhbnNmb3JtLlxuICAgICAgICB3dC5hICA9IGx0LmEgICogcHQuYSArIGx0LmIgICogcHQuYztcbiAgICAgICAgd3QuYiAgPSBsdC5hICAqIHB0LmIgKyBsdC5iICAqIHB0LmQ7XG4gICAgICAgIHd0LmMgID0gbHQuYyAgKiBwdC5hICsgbHQuZCAgKiBwdC5jO1xuICAgICAgICB3dC5kICA9IGx0LmMgICogcHQuYiArIGx0LmQgICogcHQuZDtcbiAgICAgICAgd3QudHggPSBsdC50eCAqIHB0LmEgKyBsdC50eSAqIHB0LmMgKyBwdC50eDtcbiAgICAgICAgd3QudHkgPSBsdC50eCAqIHB0LmIgKyBsdC50eSAqIHB0LmQgKyBwdC50eTsgICAgICAgXG4gICAgXG4gICAgICAgIHRoaXMuX2N1cnJlbnRCb3VuZHMgPSBudWxsO1xuICAgIH1cblxuICAgIC8vIG11bHRpcGx5IHRoZSBhbHBoYXMuLlxuICAgIHRoaXMud29ybGRBbHBoYSA9IHRoaXMuYWxwaGEgKiB0aGlzLnBhcmVudC53b3JsZEFscGhhO1xuXG4gICAgLy8gcmVzZXQgdGhlIGJvdW5kcyBlYWNoIHRpbWUgdGhpcyBpcyBjYWxsZWQhXG4gICAgXG59O1xuXG4vLyBwZXJmb3JtYW5jZSBpbmNyZWFzZSB0byBhdm9pZCB1c2luZyBjYWxsLi4gKDEweCBmYXN0ZXIpXG5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS5kaXNwbGF5T2JqZWN0VXBkYXRlVHJhbnNmb3JtID0gRGlzcGxheU9iamVjdC5wcm90b3R5cGUudXBkYXRlVHJhbnNmb3JtO1xuXG4vKipcbiAqXG4gKlxuICogUmV0cmlldmVzIHRoZSBib3VuZHMgb2YgdGhlIGRpc3BsYXlPYmplY3QgYXMgYSByZWN0YW5nbGUgb2JqZWN0XG4gKlxuICogQHBhcmFtIG1hdHJpeCB7UElYSS5NYXRyaXh9XG4gKiBAcmV0dXJuIHtQSVhJLlJlY3RhbmdsZX0gdGhlIHJlY3Rhbmd1bGFyIGJvdW5kaW5nIGFyZWFcbiAqL1xuRGlzcGxheU9iamVjdC5wcm90b3R5cGUuZ2V0Qm91bmRzID0gZnVuY3Rpb24gKG1hdHJpeCkgLy8ganNoaW50IHVudXNlZDpmYWxzZVxue1xuICAgIHJldHVybiBtYXRoLlJlY3RhbmdsZS5FTVBUWTtcbn07XG5cbi8qKlxuICogUmV0cmlldmVzIHRoZSBsb2NhbCBib3VuZHMgb2YgdGhlIGRpc3BsYXlPYmplY3QgYXMgYSByZWN0YW5nbGUgb2JqZWN0XG4gKlxuICogQHJldHVybiB7UElYSS5SZWN0YW5nbGV9IHRoZSByZWN0YW5ndWxhciBib3VuZGluZyBhcmVhXG4gKi9cbkRpc3BsYXlPYmplY3QucHJvdG90eXBlLmdldExvY2FsQm91bmRzID0gZnVuY3Rpb24gKClcbntcbiAgICByZXR1cm4gdGhpcy5nZXRCb3VuZHMobWF0aC5NYXRyaXguSURFTlRJVFkpO1xufTtcblxuLyoqXG4gKiBDYWxjdWxhdGVzIHRoZSBnbG9iYWwgcG9zaXRpb24gb2YgdGhlIGRpc3BsYXkgb2JqZWN0XG4gKlxuICogQHBhcmFtIHBvc2l0aW9uIHtQSVhJLlBvaW50fSBUaGUgd29ybGQgb3JpZ2luIHRvIGNhbGN1bGF0ZSBmcm9tXG4gKiBAcmV0dXJuIHtQSVhJLlBvaW50fSBBIHBvaW50IG9iamVjdCByZXByZXNlbnRpbmcgdGhlIHBvc2l0aW9uIG9mIHRoaXMgb2JqZWN0XG4gKi9cbkRpc3BsYXlPYmplY3QucHJvdG90eXBlLnRvR2xvYmFsID0gZnVuY3Rpb24gKHBvc2l0aW9uKVxue1xuICAgIC8vIHRoaXMgcGFyZW50IGNoZWNrIGlzIGZvciBqdXN0IGluIGNhc2UgdGhlIGl0ZW0gaXMgYSByb290IG9iamVjdC5cbiAgICAvLyBJZiBpdCBpcyB3ZSBuZWVkIHRvIGdpdmUgaXQgYSB0ZW1wb3JhcnkgcGFyZW50IHNvIHRoYXQgZGlzcGxheU9iamVjdFVwZGF0ZVRyYW5zZm9ybSB3b3JrcyBjb3JyZWN0bHlcbiAgICAvLyB0aGlzIGlzIG1haW5seSB0byBhdm9pZCBhIHBhcmVudCBjaGVjayBpbiB0aGUgbWFpbiBsb29wLiBFdmVyeSBsaXR0bGUgaGVscHMgZm9yIHBlcmZvcm1hbmNlIDopXG4gICAgaWYoIXRoaXMucGFyZW50KVxuICAgIHtcbiAgICAgICAgdGhpcy5wYXJlbnQgPSBfdGVtcERpc3BsYXlPYmplY3RQYXJlbnQ7XG4gICAgICAgIHRoaXMuZGlzcGxheU9iamVjdFVwZGF0ZVRyYW5zZm9ybSgpO1xuICAgICAgICB0aGlzLnBhcmVudCA9IG51bGw7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHRoaXMuZGlzcGxheU9iamVjdFVwZGF0ZVRyYW5zZm9ybSgpO1xuICAgIH1cblxuICAgIC8vIGRvbid0IG5lZWQgdG8gdXBkYXRlIHRoZSBsb3RcbiAgICByZXR1cm4gdGhpcy53b3JsZFRyYW5zZm9ybS5hcHBseShwb3NpdGlvbik7XG59O1xuXG4vKipcbiAqIENhbGN1bGF0ZXMgdGhlIGxvY2FsIHBvc2l0aW9uIG9mIHRoZSBkaXNwbGF5IG9iamVjdCByZWxhdGl2ZSB0byBhbm90aGVyIHBvaW50XG4gKlxuICogQHBhcmFtIHBvc2l0aW9uIHtQSVhJLlBvaW50fSBUaGUgd29ybGQgb3JpZ2luIHRvIGNhbGN1bGF0ZSBmcm9tXG4gKiBAcGFyYW0gW2Zyb21dIHtQSVhJLkRpc3BsYXlPYmplY3R9IFRoZSBEaXNwbGF5T2JqZWN0IHRvIGNhbGN1bGF0ZSB0aGUgZ2xvYmFsIHBvc2l0aW9uIGZyb21cbiAqIEBwYXJhbSBbcG9pbnRdIHtQSVhJLlBvaW50fSBBIFBvaW50IG9iamVjdCBpbiB3aGljaCB0byBzdG9yZSB0aGUgdmFsdWUsIG9wdGlvbmFsIChvdGhlcndpc2Ugd2lsbCBjcmVhdGUgYSBuZXcgUG9pbnQpXG4gKiBAcmV0dXJuIHtQSVhJLlBvaW50fSBBIHBvaW50IG9iamVjdCByZXByZXNlbnRpbmcgdGhlIHBvc2l0aW9uIG9mIHRoaXMgb2JqZWN0XG4gKi9cbkRpc3BsYXlPYmplY3QucHJvdG90eXBlLnRvTG9jYWwgPSBmdW5jdGlvbiAocG9zaXRpb24sIGZyb20sIHBvaW50KVxue1xuICAgIGlmIChmcm9tKVxuICAgIHtcbiAgICAgICAgcG9zaXRpb24gPSBmcm9tLnRvR2xvYmFsKHBvc2l0aW9uKTtcbiAgICB9XG5cbiAgICAvLyB0aGlzIHBhcmVudCBjaGVjayBpcyBmb3IganVzdCBpbiBjYXNlIHRoZSBpdGVtIGlzIGEgcm9vdCBvYmplY3QuXG4gICAgLy8gSWYgaXQgaXMgd2UgbmVlZCB0byBnaXZlIGl0IGEgdGVtcG9yYXJ5IHBhcmVudCBzbyB0aGF0IGRpc3BsYXlPYmplY3RVcGRhdGVUcmFuc2Zvcm0gd29ya3MgY29ycmVjdGx5XG4gICAgLy8gdGhpcyBpcyBtYWlubHkgdG8gYXZvaWQgYSBwYXJlbnQgY2hlY2sgaW4gdGhlIG1haW4gbG9vcC4gRXZlcnkgbGl0dGxlIGhlbHBzIGZvciBwZXJmb3JtYW5jZSA6KVxuICAgIGlmKCF0aGlzLnBhcmVudClcbiAgICB7XG4gICAgICAgIHRoaXMucGFyZW50ID0gX3RlbXBEaXNwbGF5T2JqZWN0UGFyZW50O1xuICAgICAgICB0aGlzLmRpc3BsYXlPYmplY3RVcGRhdGVUcmFuc2Zvcm0oKTtcbiAgICAgICAgdGhpcy5wYXJlbnQgPSBudWxsO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICB0aGlzLmRpc3BsYXlPYmplY3RVcGRhdGVUcmFuc2Zvcm0oKTtcbiAgICB9XG5cbiAgICAvLyBzaW1wbHkgYXBwbHkgdGhlIG1hdHJpeC4uXG4gICAgcmV0dXJuIHRoaXMud29ybGRUcmFuc2Zvcm0uYXBwbHlJbnZlcnNlKHBvc2l0aW9uLCBwb2ludCk7XG59O1xuXG4vKipcbiAqIFJlbmRlcnMgdGhlIG9iamVjdCB1c2luZyB0aGUgV2ViR0wgcmVuZGVyZXJcbiAqXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcn0gVGhlIHJlbmRlcmVyXG4gKiBAcHJpdmF0ZVxuICovXG5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS5yZW5kZXJXZWJHTCA9IGZ1bmN0aW9uIChyZW5kZXJlcikgLy8ganNoaW50IHVudXNlZDpmYWxzZVxue1xuICAgIC8vIE9WRVJXUklURTtcbn07XG5cbi8qKlxuICogUmVuZGVycyB0aGUgb2JqZWN0IHVzaW5nIHRoZSBDYW52YXMgcmVuZGVyZXJcbiAqXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuQ2FudmFzUmVuZGVyZXJ9IFRoZSByZW5kZXJlclxuICogQHByaXZhdGVcbiAqL1xuRGlzcGxheU9iamVjdC5wcm90b3R5cGUucmVuZGVyQ2FudmFzID0gZnVuY3Rpb24gKHJlbmRlcmVyKSAvLyBqc2hpbnQgdW51c2VkOmZhbHNlXG57XG4gICAgLy8gT1ZFUldSSVRFO1xufTtcbi8qKlxuICogVXNlZnVsIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyBhIHRleHR1cmUgb2YgdGhlIGRpc3BsYXkgb2JqZWN0IHRoYXQgY2FuIHRoZW4gYmUgdXNlZCB0byBjcmVhdGUgc3ByaXRlc1xuICogVGhpcyBjYW4gYmUgcXVpdGUgdXNlZnVsIGlmIHlvdXIgZGlzcGxheU9iamVjdCBpcyBzdGF0aWMgLyBjb21wbGljYXRlZCBhbmQgbmVlZHMgdG8gYmUgcmV1c2VkIG11bHRpcGxlIHRpbWVzLlxuICpcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5DYW52YXNSZW5kZXJlcnxQSVhJLldlYkdMUmVuZGVyZXJ9IFRoZSByZW5kZXJlciB1c2VkIHRvIGdlbmVyYXRlIHRoZSB0ZXh0dXJlLlxuICogQHBhcmFtIHNjYWxlTW9kZSB7bnVtYmVyfSBTZWUge0BsaW5rIFBJWEkuU0NBTEVfTU9ERVN9IGZvciBwb3NzaWJsZSB2YWx1ZXNcbiAqIEBwYXJhbSByZXNvbHV0aW9uIHtudW1iZXJ9IFRoZSByZXNvbHV0aW9uIG9mIHRoZSB0ZXh0dXJlIGJlaW5nIGdlbmVyYXRlZFxuICogQHJldHVybiB7UElYSS5UZXh0dXJlfSBhIHRleHR1cmUgb2YgdGhlIGRpc3BsYXkgb2JqZWN0XG4gKi9cbkRpc3BsYXlPYmplY3QucHJvdG90eXBlLmdlbmVyYXRlVGV4dHVyZSA9IGZ1bmN0aW9uIChyZW5kZXJlciwgc2NhbGVNb2RlLCByZXNvbHV0aW9uKVxue1xuICAgIHZhciBib3VuZHMgPSB0aGlzLmdldExvY2FsQm91bmRzKCk7XG5cbiAgICB2YXIgcmVuZGVyVGV4dHVyZSA9IG5ldyBSZW5kZXJUZXh0dXJlKHJlbmRlcmVyLCBib3VuZHMud2lkdGggfCAwLCBib3VuZHMuaGVpZ2h0IHwgMCwgc2NhbGVNb2RlLCByZXNvbHV0aW9uKTtcblxuICAgIF90ZW1wTWF0cml4LnR4ID0gLWJvdW5kcy54O1xuICAgIF90ZW1wTWF0cml4LnR5ID0gLWJvdW5kcy55O1xuXG4gICAgcmVuZGVyVGV4dHVyZS5yZW5kZXIodGhpcywgX3RlbXBNYXRyaXgpO1xuXG4gICAgcmV0dXJuIHJlbmRlclRleHR1cmU7XG59O1xuXG4vKipcbiAqIFNldCB0aGUgcGFyZW50IENvbnRhaW5lciBvZiB0aGlzIERpc3BsYXlPYmplY3RcbiAqXG4gKiBAcGFyYW0gY29udGFpbmVyIHtDb250YWluZXJ9IFRoZSBDb250YWluZXIgdG8gYWRkIHRoaXMgRGlzcGxheU9iamVjdCB0b1xuICogQHJldHVybiB7Q29udGFpbmVyfSBUaGUgQ29udGFpbmVyIHRoYXQgdGhpcyBEaXNwbGF5T2JqZWN0IHdhcyBhZGRlZCB0b1xuICovXG5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS5zZXRQYXJlbnQgPSBmdW5jdGlvbiAoY29udGFpbmVyKVxue1xuICAgIGlmICghY29udGFpbmVyIHx8ICFjb250YWluZXIuYWRkQ2hpbGQpXG4gICAge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3NldFBhcmVudDogQXJndW1lbnQgbXVzdCBiZSBhIENvbnRhaW5lcicpO1xuICAgIH1cblxuICAgIGNvbnRhaW5lci5hZGRDaGlsZCh0aGlzKTtcbiAgICByZXR1cm4gY29udGFpbmVyO1xufTtcblxuLyoqXG4gKiBDb252ZW5pZW5jZSBmdW5jdGlvbiB0byBzZXQgdGhlIHBvc3Rpb24sIHNjYWxlLCBza2V3IGFuZCBwaXZvdCBhdCBvbmNlLlxuICpcbiAqIEBwYXJhbSBbeD0wXSB7bnVtYmVyfSBUaGUgWCBwb3NpdGlvblxuICogQHBhcmFtIFt5PTBdIHtudW1iZXJ9IFRoZSBZIHBvc2l0aW9uXG4gKiBAcGFyYW0gW3NjYWxlWD0xXSB7bnVtYmVyfSBUaGUgWCBzY2FsZSB2YWx1ZVxuICogQHBhcmFtIFtzY2FsZVk9MV0ge251bWJlcn0gVGhlIFkgc2NhbGUgdmFsdWVcbiAqIEBwYXJhbSBbcm90YXRpb249MF0ge251bWJlcn0gVGhlIHJvdGF0aW9uXG4gKiBAcGFyYW0gW3NrZXdYPTBdIHtudW1iZXJ9IFRoZSBYIHNrZXcgdmFsdWVcbiAqIEBwYXJhbSBbc2tld1k9MF0ge251bWJlcn0gVGhlIFkgc2tldyB2YWx1ZVxuICogQHBhcmFtIFtwaXZvdFg9MF0ge251bWJlcn0gVGhlIFggcGl2b3QgdmFsdWVcbiAqIEBwYXJhbSBbcGl2b3RZPTBdIHtudW1iZXJ9IFRoZSBZIHBpdm90IHZhbHVlXG4gKiBAcmV0dXJuIHtQSVhJLkRpc3BsYXlPYmplY3R9XG4gKi9cbkRpc3BsYXlPYmplY3QucHJvdG90eXBlLnNldFRyYW5zZm9ybSA9IGZ1bmN0aW9uKHgsIHksIHNjYWxlWCwgc2NhbGVZLCByb3RhdGlvbiwgc2tld1gsIHNrZXdZLCBwaXZvdFgsIHBpdm90WSkgLy9qc2hpbnQgaWdub3JlOmxpbmVcbntcbiAgICB0aGlzLnBvc2l0aW9uLnggPSB4IHx8IDA7XG4gICAgdGhpcy5wb3NpdGlvbi55ID0geSB8fCAwO1xuICAgIHRoaXMuc2NhbGUueCA9ICFzY2FsZVggPyAxIDogc2NhbGVYO1xuICAgIHRoaXMuc2NhbGUueSA9ICFzY2FsZVkgPyAxIDogc2NhbGVZO1xuICAgIHRoaXMucm90YXRpb24gPSByb3RhdGlvbiB8fCAwO1xuICAgIHRoaXMuc2tldy54ID0gc2tld1ggfHwgMDtcbiAgICB0aGlzLnNrZXcueSA9IHNrZXdZIHx8IDA7XG4gICAgdGhpcy5waXZvdC54ID0gcGl2b3RYIHx8IDA7XG4gICAgdGhpcy5waXZvdC55ID0gcGl2b3RZIHx8IDA7XG4gICAgdGhpcy5kaXJ0eVRyYW5zZm9ybSA9IHRydWU7XG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIEJhc2UgZGVzdHJveSBtZXRob2QgZm9yIGdlbmVyaWMgZGlzcGxheSBvYmplY3RzXG4gKlxuICovXG5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKClcbntcblxuICAgIHRoaXMucG9zaXRpb24gPSBudWxsO1xuICAgIHRoaXMuc2NhbGUgPSBudWxsO1xuICAgIHRoaXMucGl2b3QgPSBudWxsO1xuICAgIHRoaXMuc2tldyA9IG51bGw7XG5cbiAgICB0aGlzLnBhcmVudCA9IG51bGw7XG5cbiAgICB0aGlzLl9ib3VuZHMgPSBudWxsO1xuICAgIHRoaXMuX2N1cnJlbnRCb3VuZHMgPSBudWxsO1xuICAgIHRoaXMuX21hc2sgPSBudWxsO1xuXG4gICAgdGhpcy53b3JsZFRyYW5zZm9ybSA9IG51bGw7XG4gICAgdGhpcy5maWx0ZXJBcmVhID0gbnVsbDtcbn07XG4iLCJ2YXIgQ29udGFpbmVyID0gcmVxdWlyZSgnLi4vZGlzcGxheS9Db250YWluZXInKSxcbiAgICBUZXh0dXJlID0gcmVxdWlyZSgnLi4vdGV4dHVyZXMvVGV4dHVyZScpLFxuICAgIENhbnZhc0J1ZmZlciA9IHJlcXVpcmUoJy4uL3JlbmRlcmVycy9jYW52YXMvdXRpbHMvQ2FudmFzQnVmZmVyJyksXG4gICAgQ2FudmFzR3JhcGhpY3MgPSByZXF1aXJlKCcuLi9yZW5kZXJlcnMvY2FudmFzL3V0aWxzL0NhbnZhc0dyYXBoaWNzJyksXG4gICAgR3JhcGhpY3NEYXRhID0gcmVxdWlyZSgnLi9HcmFwaGljc0RhdGEnKSxcbiAgICBtYXRoID0gcmVxdWlyZSgnLi4vbWF0aCcpLFxuICAgIENPTlNUID0gcmVxdWlyZSgnLi4vY29uc3QnKSxcbiAgICB0ZW1wUG9pbnQgPSBuZXcgbWF0aC5Qb2ludCgpO1xuXG4vKipcbiAqIFRoZSBHcmFwaGljcyBjbGFzcyBjb250YWlucyBtZXRob2RzIHVzZWQgdG8gZHJhdyBwcmltaXRpdmUgc2hhcGVzIHN1Y2ggYXMgbGluZXMsIGNpcmNsZXMgYW5kXG4gKiByZWN0YW5nbGVzIHRvIHRoZSBkaXNwbGF5LCBhbmQgdG8gY29sb3IgYW5kIGZpbGwgdGhlbS5cbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQ29udGFpbmVyXG4gKiBAbWVtYmVyb2YgUElYSVxuICovXG5mdW5jdGlvbiBHcmFwaGljcygpXG57XG4gICAgQ29udGFpbmVyLmNhbGwodGhpcyk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYWxwaGEgdmFsdWUgdXNlZCB3aGVuIGZpbGxpbmcgdGhlIEdyYXBoaWNzIG9iamVjdC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAxXG4gICAgICovXG4gICAgdGhpcy5maWxsQWxwaGEgPSAxO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHdpZHRoICh0aGlja25lc3MpIG9mIGFueSBsaW5lcyBkcmF3bi5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAwXG4gICAgICovXG4gICAgdGhpcy5saW5lV2lkdGggPSAwO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGNvbG9yIG9mIGFueSBsaW5lcyBkcmF3bi5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge3N0cmluZ31cbiAgICAgKiBAZGVmYXVsdCAwXG4gICAgICovXG4gICAgdGhpcy5saW5lQ29sb3IgPSAwO1xuXG4gICAgLyoqXG4gICAgICogR3JhcGhpY3MgZGF0YVxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5HcmFwaGljc0RhdGFbXX1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuZ3JhcGhpY3NEYXRhID0gW107XG5cbiAgICAvKipcbiAgICAgKiBUaGUgdGludCBhcHBsaWVkIHRvIHRoZSBncmFwaGljIHNoYXBlLiBUaGlzIGlzIGEgaGV4IHZhbHVlLiBBcHBseSBhIHZhbHVlIG9mIDB4RkZGRkZGIHRvIHJlc2V0IHRoZSB0aW50LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDB4RkZGRkZGXG4gICAgICovXG4gICAgdGhpcy50aW50ID0gMHhGRkZGRkY7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgcHJldmlvdXMgdGludCBhcHBsaWVkIHRvIHRoZSBncmFwaGljIHNoYXBlLiBVc2VkIHRvIGNvbXBhcmUgdG8gdGhlIGN1cnJlbnQgdGludCBhbmQgY2hlY2sgaWYgdGhlcmVzIGNoYW5nZS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBkZWZhdWx0IDB4RkZGRkZGXG4gICAgICovXG4gICAgdGhpcy5fcHJldlRpbnQgPSAweEZGRkZGRjtcblxuICAgIC8qKlxuICAgICAqIFRoZSBibGVuZCBtb2RlIHRvIGJlIGFwcGxpZWQgdG8gdGhlIGdyYXBoaWMgc2hhcGUuIEFwcGx5IGEgdmFsdWUgb2YgYFBJWEkuQkxFTkRfTU9ERVMuTk9STUFMYCB0byByZXNldCB0aGUgYmxlbmQgbW9kZS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCBQSVhJLkJMRU5EX01PREVTLk5PUk1BTDtcbiAgICAgKiBAc2VlIFBJWEkuQkxFTkRfTU9ERVNcbiAgICAgKi9cbiAgICB0aGlzLmJsZW5kTW9kZSA9IENPTlNULkJMRU5EX01PREVTLk5PUk1BTDtcblxuICAgIC8qKlxuICAgICAqIEN1cnJlbnQgcGF0aFxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5HcmFwaGljc0RhdGF9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLmN1cnJlbnRQYXRoID0gbnVsbDtcblxuICAgIC8qKlxuICAgICAqIEFycmF5IGNvbnRhaW5pbmcgc29tZSBXZWJHTC1yZWxhdGVkIHByb3BlcnRpZXMgdXNlZCBieSB0aGUgV2ViR0wgcmVuZGVyZXIuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtvYmplY3Q8bnVtYmVyLCBvYmplY3Q+fVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgLy8gVE9ETyAtIF93ZWJnbCBzaG91bGQgdXNlIGEgcHJvdG90eXBlIG9iamVjdCwgbm90IGEgcmFuZG9tIHVuZG9jdW1lbnRlZCBvYmplY3QuLi5cbiAgICB0aGlzLl93ZWJHTCA9IHt9O1xuXG4gICAgLyoqXG4gICAgICogV2hldGhlciB0aGlzIHNoYXBlIGlzIGJlaW5nIHVzZWQgYXMgYSBtYXNrLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKi9cbiAgICB0aGlzLmlzTWFzayA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGJvdW5kcycgcGFkZGluZyB1c2VkIGZvciBib3VuZHMgY2FsY3VsYXRpb24uXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy5ib3VuZHNQYWRkaW5nID0gMDtcblxuICAgIC8qKlxuICAgICAqIEEgY2FjaGUgb2YgdGhlIGxvY2FsIGJvdW5kcyB0byBwcmV2ZW50IHJlY2FsY3VsYXRpb24uXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlJlY3RhbmdsZX1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX2xvY2FsQm91bmRzID0gbmV3IG1hdGguUmVjdGFuZ2xlKDAsMCwxLDEpO1xuXG4gICAgLyoqXG4gICAgICogVXNlZCB0byBkZXRlY3QgaWYgdGhlIGdyYXBoaWNzIG9iamVjdCBoYXMgY2hhbmdlZC4gSWYgdGhpcyBpcyBzZXQgdG8gdHJ1ZSB0aGVuIHRoZSBncmFwaGljc1xuICAgICAqIG9iamVjdCB3aWxsIGJlIHJlY2FsY3VsYXRlZC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLmRpcnR5ID0gdHJ1ZTtcblxuICAgIC8qKlxuICAgICAqIFVzZWQgdG8gZGV0ZWN0IGlmIHRoZSBXZWJHTCBncmFwaGljcyBvYmplY3QgaGFzIGNoYW5nZWQuIElmIHRoaXMgaXMgc2V0IHRvIHRydWUgdGhlbiB0aGVcbiAgICAgKiBncmFwaGljcyBvYmplY3Qgd2lsbCBiZSByZWNhbGN1bGF0ZWQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5nbERpcnR5ID0gZmFsc2U7XG5cbiAgICB0aGlzLmJvdW5kc0RpcnR5ID0gdHJ1ZTtcblxuICAgIC8qKlxuICAgICAqIFVzZWQgdG8gZGV0ZWN0IGlmIHRoZSBjYWNoZWQgc3ByaXRlIG9iamVjdCBuZWVkcyB0byBiZSB1cGRhdGVkLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuY2FjaGVkU3ByaXRlRGlydHkgPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIFdoZW4gY2FjaGVBc0JpdG1hcCBpcyBzZXQgdG8gdHJ1ZSB0aGUgZ3JhcGhpY3Mgb2JqZWN0IHdpbGwgYmUgcmVuZGVyZWQgYXMgaWYgaXQgd2FzIGEgc3ByaXRlLlxuICAgICAqIFRoaXMgaXMgdXNlZnVsIGlmIHlvdXIgZ3JhcGhpY3MgZWxlbWVudCBkb2VzIG5vdCBjaGFuZ2Ugb2Z0ZW4sIGFzIGl0IHdpbGwgc3BlZWQgdXAgdGhlIHJlbmRlcmluZ1xuICAgICAqIG9mIHRoZSBvYmplY3QgaW4gZXhjaGFuZ2UgZm9yIHRha2luZyB1cCB0ZXh0dXJlIG1lbW9yeS4gSXQgaXMgYWxzbyB1c2VmdWwgaWYgeW91IG5lZWQgdGhlIGdyYXBoaWNzXG4gICAgICogb2JqZWN0IHRvIGJlIGFudGktYWxpYXNlZCwgYmVjYXVzZSBpdCB3aWxsIGJlIHJlbmRlcmVkIHVzaW5nIGNhbnZhcy4gVGhpcyBpcyBub3QgcmVjb21tZW5kZWQgaWZcbiAgICAgKiB5b3UgYXJlIGNvbnN0YW50bHkgcmVkcmF3aW5nIHRoZSBncmFwaGljcyBlbGVtZW50LlxuICAgICAqXG4gICAgICogQG5hbWUgY2FjaGVBc0JpdG1hcFxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICogQG1lbWJlcm9mIFBJWEkuR3JhcGhpY3MjXG4gICAgICogQGRlZmF1bHQgZmFsc2VcbiAgICAgKi9cbn1cblxuLy8gY29uc3RydWN0b3JcbkdyYXBoaWNzLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoQ29udGFpbmVyLnByb3RvdHlwZSk7XG5HcmFwaGljcy5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBHcmFwaGljcztcbm1vZHVsZS5leHBvcnRzID0gR3JhcGhpY3M7XG5cbi8qKlxuICogQ3JlYXRlcyBhIG5ldyBHcmFwaGljcyBvYmplY3Qgd2l0aCB0aGUgc2FtZSB2YWx1ZXMgYXMgdGhpcyBvbmUuXG4gKiBOb3RlIHRoYXQgdGhlIG9ubHkgdGhlIHByb3BlcnRpZXMgb2YgdGhlIG9iamVjdCBhcmUgY2xvbmVkLCBub3QgaXRzIHRyYW5zZm9ybSAocG9zaXRpb24sc2NhbGUsZXRjKVxuICpcbiAqIEByZXR1cm4ge1BJWEkuR3JhcGhpY3N9XG4gKi9cbkdyYXBoaWNzLnByb3RvdHlwZS5jbG9uZSA9IGZ1bmN0aW9uICgpXG57XG4gICAgdmFyIGNsb25lID0gbmV3IEdyYXBoaWNzKCk7XG5cbiAgICBjbG9uZS5yZW5kZXJhYmxlICAgID0gdGhpcy5yZW5kZXJhYmxlO1xuICAgIGNsb25lLmZpbGxBbHBoYSAgICAgPSB0aGlzLmZpbGxBbHBoYTtcbiAgICBjbG9uZS5saW5lV2lkdGggICAgID0gdGhpcy5saW5lV2lkdGg7XG4gICAgY2xvbmUubGluZUNvbG9yICAgICA9IHRoaXMubGluZUNvbG9yO1xuICAgIGNsb25lLnRpbnQgICAgICAgICAgPSB0aGlzLnRpbnQ7XG4gICAgY2xvbmUuYmxlbmRNb2RlICAgICA9IHRoaXMuYmxlbmRNb2RlO1xuICAgIGNsb25lLmlzTWFzayAgICAgICAgPSB0aGlzLmlzTWFzaztcbiAgICBjbG9uZS5ib3VuZHNQYWRkaW5nID0gdGhpcy5ib3VuZHNQYWRkaW5nO1xuICAgIGNsb25lLmRpcnR5ICAgICAgICAgPSB0cnVlO1xuICAgIGNsb25lLmdsRGlydHkgICAgICAgPSB0cnVlO1xuICAgIGNsb25lLmNhY2hlZFNwcml0ZURpcnR5ID0gdGhpcy5jYWNoZWRTcHJpdGVEaXJ0eTtcblxuICAgIC8vIGNvcHkgZ3JhcGhpY3MgZGF0YVxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5ncmFwaGljc0RhdGEubGVuZ3RoOyArK2kpXG4gICAge1xuICAgICAgICBjbG9uZS5ncmFwaGljc0RhdGEucHVzaCh0aGlzLmdyYXBoaWNzRGF0YVtpXS5jbG9uZSgpKTtcbiAgICB9XG5cbiAgICBjbG9uZS5jdXJyZW50UGF0aCA9IGNsb25lLmdyYXBoaWNzRGF0YVtjbG9uZS5ncmFwaGljc0RhdGEubGVuZ3RoIC0gMV07XG5cbiAgICBjbG9uZS51cGRhdGVMb2NhbEJvdW5kcygpO1xuXG4gICAgcmV0dXJuIGNsb25lO1xufTtcblxuLyoqXG4gKiBTcGVjaWZpZXMgdGhlIGxpbmUgc3R5bGUgdXNlZCBmb3Igc3Vic2VxdWVudCBjYWxscyB0byBHcmFwaGljcyBtZXRob2RzIHN1Y2ggYXMgdGhlIGxpbmVUbygpIG1ldGhvZCBvciB0aGUgZHJhd0NpcmNsZSgpIG1ldGhvZC5cbiAqXG4gKiBAcGFyYW0gbGluZVdpZHRoIHtudW1iZXJ9IHdpZHRoIG9mIHRoZSBsaW5lIHRvIGRyYXcsIHdpbGwgdXBkYXRlIHRoZSBvYmplY3RzIHN0b3JlZCBzdHlsZVxuICogQHBhcmFtIGNvbG9yIHtudW1iZXJ9IGNvbG9yIG9mIHRoZSBsaW5lIHRvIGRyYXcsIHdpbGwgdXBkYXRlIHRoZSBvYmplY3RzIHN0b3JlZCBzdHlsZVxuICogQHBhcmFtIGFscGhhIHtudW1iZXJ9IGFscGhhIG9mIHRoZSBsaW5lIHRvIGRyYXcsIHdpbGwgdXBkYXRlIHRoZSBvYmplY3RzIHN0b3JlZCBzdHlsZVxuICogQHJldHVybiB7UElYSS5HcmFwaGljc31cbiAqL1xuR3JhcGhpY3MucHJvdG90eXBlLmxpbmVTdHlsZSA9IGZ1bmN0aW9uIChsaW5lV2lkdGgsIGNvbG9yLCBhbHBoYSlcbntcbiAgICB0aGlzLmxpbmVXaWR0aCA9IGxpbmVXaWR0aCB8fCAwO1xuICAgIHRoaXMubGluZUNvbG9yID0gY29sb3IgfHwgMDtcbiAgICB0aGlzLmxpbmVBbHBoYSA9IChhbHBoYSA9PT0gdW5kZWZpbmVkKSA/IDEgOiBhbHBoYTtcblxuICAgIGlmICh0aGlzLmN1cnJlbnRQYXRoKVxuICAgIHtcbiAgICAgICAgaWYgKHRoaXMuY3VycmVudFBhdGguc2hhcGUucG9pbnRzLmxlbmd0aClcbiAgICAgICAge1xuICAgICAgICAgICAgLy8gaGFsZndheSB0aHJvdWdoIGEgbGluZT8gc3RhcnQgYSBuZXcgb25lIVxuICAgICAgICAgICAgdmFyIHNoYXBlID0gbmV3IG1hdGguUG9seWdvbih0aGlzLmN1cnJlbnRQYXRoLnNoYXBlLnBvaW50cy5zbGljZSgtMikpO1xuICAgICAgICAgICAgc2hhcGUuY2xvc2VkID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLmRyYXdTaGFwZShzaGFwZSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgICAvLyBvdGhlcndpc2UgaXRzIGVtcHR5IHNvIGxldHMganVzdCBzZXQgdGhlIGxpbmUgcHJvcGVydGllc1xuICAgICAgICAgICAgdGhpcy5jdXJyZW50UGF0aC5saW5lV2lkdGggPSB0aGlzLmxpbmVXaWR0aDtcbiAgICAgICAgICAgIHRoaXMuY3VycmVudFBhdGgubGluZUNvbG9yID0gdGhpcy5saW5lQ29sb3I7XG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRQYXRoLmxpbmVBbHBoYSA9IHRoaXMubGluZUFscGhhO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIE1vdmVzIHRoZSBjdXJyZW50IGRyYXdpbmcgcG9zaXRpb24gdG8geCwgeS5cbiAqXG4gKiBAcGFyYW0geCB7bnVtYmVyfSB0aGUgWCBjb29yZGluYXRlIHRvIG1vdmUgdG9cbiAqIEBwYXJhbSB5IHtudW1iZXJ9IHRoZSBZIGNvb3JkaW5hdGUgdG8gbW92ZSB0b1xuICogQHJldHVybiB7UElYSS5HcmFwaGljc31cbiAgKi9cbkdyYXBoaWNzLnByb3RvdHlwZS5tb3ZlVG8gPSBmdW5jdGlvbiAoeCwgeSlcbntcbiAgICB2YXIgc2hhcGUgPSBuZXcgbWF0aC5Qb2x5Z29uKFt4LHldKTtcbiAgICBzaGFwZS5jbG9zZWQgPSBmYWxzZTtcbiAgICB0aGlzLmRyYXdTaGFwZShzaGFwZSk7XG5cbiAgICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogRHJhd3MgYSBsaW5lIHVzaW5nIHRoZSBjdXJyZW50IGxpbmUgc3R5bGUgZnJvbSB0aGUgY3VycmVudCBkcmF3aW5nIHBvc2l0aW9uIHRvICh4LCB5KTtcbiAqIFRoZSBjdXJyZW50IGRyYXdpbmcgcG9zaXRpb24gaXMgdGhlbiBzZXQgdG8gKHgsIHkpLlxuICpcbiAqIEBwYXJhbSB4IHtudW1iZXJ9IHRoZSBYIGNvb3JkaW5hdGUgdG8gZHJhdyB0b1xuICogQHBhcmFtIHkge251bWJlcn0gdGhlIFkgY29vcmRpbmF0ZSB0byBkcmF3IHRvXG4gKiBAcmV0dXJuIHtQSVhJLkdyYXBoaWNzfVxuICovXG5HcmFwaGljcy5wcm90b3R5cGUubGluZVRvID0gZnVuY3Rpb24gKHgsIHkpXG57XG4gICAgdGhpcy5jdXJyZW50UGF0aC5zaGFwZS5wb2ludHMucHVzaCh4LCB5KTtcbiAgICB0aGlzLmRpcnR5ID0gdHJ1ZTtcblxuICAgIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBDYWxjdWxhdGUgdGhlIHBvaW50cyBmb3IgYSBxdWFkcmF0aWMgYmV6aWVyIGN1cnZlIGFuZCB0aGVuIGRyYXdzIGl0LlxuICogQmFzZWQgb246IGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vcXVlc3Rpb25zLzc4NTA5Ny9ob3ctZG8taS1pbXBsZW1lbnQtYS1iZXppZXItY3VydmUtaW4tY1xuICpcbiAqIEBwYXJhbSBjcFgge251bWJlcn0gQ29udHJvbCBwb2ludCB4XG4gKiBAcGFyYW0gY3BZIHtudW1iZXJ9IENvbnRyb2wgcG9pbnQgeVxuICogQHBhcmFtIHRvWCB7bnVtYmVyfSBEZXN0aW5hdGlvbiBwb2ludCB4XG4gKiBAcGFyYW0gdG9ZIHtudW1iZXJ9IERlc3RpbmF0aW9uIHBvaW50IHlcbiAqIEByZXR1cm4ge1BJWEkuR3JhcGhpY3N9XG4gKi9cbkdyYXBoaWNzLnByb3RvdHlwZS5xdWFkcmF0aWNDdXJ2ZVRvID0gZnVuY3Rpb24gKGNwWCwgY3BZLCB0b1gsIHRvWSlcbntcbiAgICBpZiAodGhpcy5jdXJyZW50UGF0aClcbiAgICB7XG4gICAgICAgIGlmICh0aGlzLmN1cnJlbnRQYXRoLnNoYXBlLnBvaW50cy5sZW5ndGggPT09IDApXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuY3VycmVudFBhdGguc2hhcGUucG9pbnRzID0gWzAsIDBdO1xuICAgICAgICB9XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHRoaXMubW92ZVRvKDAsMCk7XG4gICAgfVxuXG4gICAgdmFyIHhhLFxuICAgICAgICB5YSxcbiAgICAgICAgbiA9IDIwLFxuICAgICAgICBwb2ludHMgPSB0aGlzLmN1cnJlbnRQYXRoLnNoYXBlLnBvaW50cztcblxuICAgIGlmIChwb2ludHMubGVuZ3RoID09PSAwKVxuICAgIHtcbiAgICAgICAgdGhpcy5tb3ZlVG8oMCwgMCk7XG4gICAgfVxuXG4gICAgdmFyIGZyb21YID0gcG9pbnRzW3BvaW50cy5sZW5ndGgtMl07XG4gICAgdmFyIGZyb21ZID0gcG9pbnRzW3BvaW50cy5sZW5ndGgtMV07XG5cbiAgICB2YXIgaiA9IDA7XG4gICAgZm9yICh2YXIgaSA9IDE7IGkgPD0gbjsgKytpKVxuICAgIHtcbiAgICAgICAgaiA9IGkgLyBuO1xuXG4gICAgICAgIHhhID0gZnJvbVggKyAoIChjcFggLSBmcm9tWCkgKiBqICk7XG4gICAgICAgIHlhID0gZnJvbVkgKyAoIChjcFkgLSBmcm9tWSkgKiBqICk7XG5cbiAgICAgICAgcG9pbnRzLnB1c2goIHhhICsgKCAoKGNwWCArICggKHRvWCAtIGNwWCkgKiBqICkpIC0geGEpICogaiApLFxuICAgICAgICAgICAgICAgICAgICAgeWEgKyAoICgoY3BZICsgKCAodG9ZIC0gY3BZKSAqIGogKSkgLSB5YSkgKiBqICkgKTtcbiAgICB9XG5cbiAgICB0aGlzLmRpcnR5ID0gdGhpcy5ib3VuZHNEaXJ0eSA9IHRydWU7XG5cbiAgICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogQ2FsY3VsYXRlIHRoZSBwb2ludHMgZm9yIGEgYmV6aWVyIGN1cnZlIGFuZCB0aGVuIGRyYXdzIGl0LlxuICpcbiAqIEBwYXJhbSBjcFgge251bWJlcn0gQ29udHJvbCBwb2ludCB4XG4gKiBAcGFyYW0gY3BZIHtudW1iZXJ9IENvbnRyb2wgcG9pbnQgeVxuICogQHBhcmFtIGNwWDIge251bWJlcn0gU2Vjb25kIENvbnRyb2wgcG9pbnQgeFxuICogQHBhcmFtIGNwWTIge251bWJlcn0gU2Vjb25kIENvbnRyb2wgcG9pbnQgeVxuICogQHBhcmFtIHRvWCB7bnVtYmVyfSBEZXN0aW5hdGlvbiBwb2ludCB4XG4gKiBAcGFyYW0gdG9ZIHtudW1iZXJ9IERlc3RpbmF0aW9uIHBvaW50IHlcbiAqIEByZXR1cm4ge1BJWEkuR3JhcGhpY3N9XG4gKi9cbkdyYXBoaWNzLnByb3RvdHlwZS5iZXppZXJDdXJ2ZVRvID0gZnVuY3Rpb24gKGNwWCwgY3BZLCBjcFgyLCBjcFkyLCB0b1gsIHRvWSlcbntcbiAgICBpZiAodGhpcy5jdXJyZW50UGF0aClcbiAgICB7XG4gICAgICAgIGlmICh0aGlzLmN1cnJlbnRQYXRoLnNoYXBlLnBvaW50cy5sZW5ndGggPT09IDApXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuY3VycmVudFBhdGguc2hhcGUucG9pbnRzID0gWzAsIDBdO1xuICAgICAgICB9XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHRoaXMubW92ZVRvKDAsMCk7XG4gICAgfVxuXG4gICAgdmFyIG4gPSAyMCxcbiAgICAgICAgZHQsXG4gICAgICAgIGR0MixcbiAgICAgICAgZHQzLFxuICAgICAgICB0MixcbiAgICAgICAgdDMsXG4gICAgICAgIHBvaW50cyA9IHRoaXMuY3VycmVudFBhdGguc2hhcGUucG9pbnRzO1xuXG4gICAgdmFyIGZyb21YID0gcG9pbnRzW3BvaW50cy5sZW5ndGgtMl07XG4gICAgdmFyIGZyb21ZID0gcG9pbnRzW3BvaW50cy5sZW5ndGgtMV07XG5cbiAgICB2YXIgaiA9IDA7XG5cbiAgICBmb3IgKHZhciBpID0gMTsgaSA8PSBuOyArK2kpXG4gICAge1xuICAgICAgICBqID0gaSAvIG47XG5cbiAgICAgICAgZHQgPSAoMSAtIGopO1xuICAgICAgICBkdDIgPSBkdCAqIGR0O1xuICAgICAgICBkdDMgPSBkdDIgKiBkdDtcblxuICAgICAgICB0MiA9IGogKiBqO1xuICAgICAgICB0MyA9IHQyICogajtcblxuICAgICAgICBwb2ludHMucHVzaCggZHQzICogZnJvbVggKyAzICogZHQyICogaiAqIGNwWCArIDMgKiBkdCAqIHQyICogY3BYMiArIHQzICogdG9YLFxuICAgICAgICAgICAgICAgICAgICAgZHQzICogZnJvbVkgKyAzICogZHQyICogaiAqIGNwWSArIDMgKiBkdCAqIHQyICogY3BZMiArIHQzICogdG9ZKTtcbiAgICB9XG5cbiAgICB0aGlzLmRpcnR5ID0gdGhpcy5ib3VuZHNEaXJ0eSA9IHRydWU7XG5cbiAgICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogVGhlIGFyY1RvKCkgbWV0aG9kIGNyZWF0ZXMgYW4gYXJjL2N1cnZlIGJldHdlZW4gdHdvIHRhbmdlbnRzIG9uIHRoZSBjYW52YXMuXG4gKlxuICogXCJib3Jyb3dlZFwiIGZyb20gaHR0cHM6Ly9jb2RlLmdvb2dsZS5jb20vcC9meGNhbnZhcy8gLSB0aGFua3MgZ29vZ2xlIVxuICpcbiAqIEBwYXJhbSB4MSB7bnVtYmVyfSBUaGUgeC1jb29yZGluYXRlIG9mIHRoZSBiZWdpbm5pbmcgb2YgdGhlIGFyY1xuICogQHBhcmFtIHkxIHtudW1iZXJ9IFRoZSB5LWNvb3JkaW5hdGUgb2YgdGhlIGJlZ2lubmluZyBvZiB0aGUgYXJjXG4gKiBAcGFyYW0geDIge251bWJlcn0gVGhlIHgtY29vcmRpbmF0ZSBvZiB0aGUgZW5kIG9mIHRoZSBhcmNcbiAqIEBwYXJhbSB5MiB7bnVtYmVyfSBUaGUgeS1jb29yZGluYXRlIG9mIHRoZSBlbmQgb2YgdGhlIGFyY1xuICogQHBhcmFtIHJhZGl1cyB7bnVtYmVyfSBUaGUgcmFkaXVzIG9mIHRoZSBhcmNcbiAqIEByZXR1cm4ge1BJWEkuR3JhcGhpY3N9XG4gKi9cbkdyYXBoaWNzLnByb3RvdHlwZS5hcmNUbyA9IGZ1bmN0aW9uICh4MSwgeTEsIHgyLCB5MiwgcmFkaXVzKVxue1xuICAgIGlmICh0aGlzLmN1cnJlbnRQYXRoKVxuICAgIHtcbiAgICAgICAgaWYgKHRoaXMuY3VycmVudFBhdGguc2hhcGUucG9pbnRzLmxlbmd0aCA9PT0gMClcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5jdXJyZW50UGF0aC5zaGFwZS5wb2ludHMucHVzaCh4MSwgeTEpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHRoaXMubW92ZVRvKHgxLCB5MSk7XG4gICAgfVxuXG4gICAgdmFyIHBvaW50cyA9IHRoaXMuY3VycmVudFBhdGguc2hhcGUucG9pbnRzLFxuICAgICAgICBmcm9tWCA9IHBvaW50c1twb2ludHMubGVuZ3RoLTJdLFxuICAgICAgICBmcm9tWSA9IHBvaW50c1twb2ludHMubGVuZ3RoLTFdLFxuICAgICAgICBhMSA9IGZyb21ZIC0geTEsXG4gICAgICAgIGIxID0gZnJvbVggLSB4MSxcbiAgICAgICAgYTIgPSB5MiAgIC0geTEsXG4gICAgICAgIGIyID0geDIgICAtIHgxLFxuICAgICAgICBtbSA9IE1hdGguYWJzKGExICogYjIgLSBiMSAqIGEyKTtcblxuICAgIGlmIChtbSA8IDEuMGUtOCB8fCByYWRpdXMgPT09IDApXG4gICAge1xuICAgICAgICBpZiAocG9pbnRzW3BvaW50cy5sZW5ndGgtMl0gIT09IHgxIHx8IHBvaW50c1twb2ludHMubGVuZ3RoLTFdICE9PSB5MSlcbiAgICAgICAge1xuICAgICAgICAgICAgcG9pbnRzLnB1c2goeDEsIHkxKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICB2YXIgZGQgPSBhMSAqIGExICsgYjEgKiBiMSxcbiAgICAgICAgICAgIGNjID0gYTIgKiBhMiArIGIyICogYjIsXG4gICAgICAgICAgICB0dCA9IGExICogYTIgKyBiMSAqIGIyLFxuICAgICAgICAgICAgazEgPSByYWRpdXMgKiBNYXRoLnNxcnQoZGQpIC8gbW0sXG4gICAgICAgICAgICBrMiA9IHJhZGl1cyAqIE1hdGguc3FydChjYykgLyBtbSxcbiAgICAgICAgICAgIGoxID0gazEgKiB0dCAvIGRkLFxuICAgICAgICAgICAgajIgPSBrMiAqIHR0IC8gY2MsXG4gICAgICAgICAgICBjeCA9IGsxICogYjIgKyBrMiAqIGIxLFxuICAgICAgICAgICAgY3kgPSBrMSAqIGEyICsgazIgKiBhMSxcbiAgICAgICAgICAgIHB4ID0gYjEgKiAoazIgKyBqMSksXG4gICAgICAgICAgICBweSA9IGExICogKGsyICsgajEpLFxuICAgICAgICAgICAgcXggPSBiMiAqIChrMSArIGoyKSxcbiAgICAgICAgICAgIHF5ID0gYTIgKiAoazEgKyBqMiksXG4gICAgICAgICAgICBzdGFydEFuZ2xlID0gTWF0aC5hdGFuMihweSAtIGN5LCBweCAtIGN4KSxcbiAgICAgICAgICAgIGVuZEFuZ2xlICAgPSBNYXRoLmF0YW4yKHF5IC0gY3ksIHF4IC0gY3gpO1xuXG4gICAgICAgIHRoaXMuYXJjKGN4ICsgeDEsIGN5ICsgeTEsIHJhZGl1cywgc3RhcnRBbmdsZSwgZW5kQW5nbGUsIGIxICogYTIgPiBiMiAqIGExKTtcbiAgICB9XG5cbiAgICB0aGlzLmRpcnR5ID0gdGhpcy5ib3VuZHNEaXJ0eSA9IHRydWU7XG5cbiAgICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogVGhlIGFyYyBtZXRob2QgY3JlYXRlcyBhbiBhcmMvY3VydmUgKHVzZWQgdG8gY3JlYXRlIGNpcmNsZXMsIG9yIHBhcnRzIG9mIGNpcmNsZXMpLlxuICpcbiAqIEBwYXJhbSBjeCB7bnVtYmVyfSBUaGUgeC1jb29yZGluYXRlIG9mIHRoZSBjZW50ZXIgb2YgdGhlIGNpcmNsZVxuICogQHBhcmFtIGN5IHtudW1iZXJ9IFRoZSB5LWNvb3JkaW5hdGUgb2YgdGhlIGNlbnRlciBvZiB0aGUgY2lyY2xlXG4gKiBAcGFyYW0gcmFkaXVzIHtudW1iZXJ9IFRoZSByYWRpdXMgb2YgdGhlIGNpcmNsZVxuICogQHBhcmFtIHN0YXJ0QW5nbGUge251bWJlcn0gVGhlIHN0YXJ0aW5nIGFuZ2xlLCBpbiByYWRpYW5zICgwIGlzIGF0IHRoZSAzIG8nY2xvY2sgcG9zaXRpb24gb2YgdGhlIGFyYydzIGNpcmNsZSlcbiAqIEBwYXJhbSBlbmRBbmdsZSB7bnVtYmVyfSBUaGUgZW5kaW5nIGFuZ2xlLCBpbiByYWRpYW5zXG4gKiBAcGFyYW0gYW50aWNsb2Nrd2lzZSB7Ym9vbGVhbn0gT3B0aW9uYWwuIFNwZWNpZmllcyB3aGV0aGVyIHRoZSBkcmF3aW5nIHNob3VsZCBiZSBjb3VudGVyY2xvY2t3aXNlIG9yIGNsb2Nrd2lzZS4gRmFsc2UgaXMgZGVmYXVsdCwgYW5kIGluZGljYXRlcyBjbG9ja3dpc2UsIHdoaWxlIHRydWUgaW5kaWNhdGVzIGNvdW50ZXItY2xvY2t3aXNlLlxuICogQHJldHVybiB7UElYSS5HcmFwaGljc31cbiAqL1xuR3JhcGhpY3MucHJvdG90eXBlLmFyYyA9IGZ1bmN0aW9uKGN4LCBjeSwgcmFkaXVzLCBzdGFydEFuZ2xlLCBlbmRBbmdsZSwgYW50aWNsb2Nrd2lzZSlcbntcbiAgICBhbnRpY2xvY2t3aXNlID0gYW50aWNsb2Nrd2lzZSB8fCBmYWxzZTtcblxuICAgIGlmIChzdGFydEFuZ2xlID09PSBlbmRBbmdsZSlcbiAgICB7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIGlmKCAhYW50aWNsb2Nrd2lzZSAmJiBlbmRBbmdsZSA8PSBzdGFydEFuZ2xlIClcbiAgICB7XG4gICAgICAgIGVuZEFuZ2xlICs9IE1hdGguUEkgKiAyO1xuICAgIH1cbiAgICBlbHNlIGlmKCBhbnRpY2xvY2t3aXNlICYmIHN0YXJ0QW5nbGUgPD0gZW5kQW5nbGUgKVxuICAgIHtcbiAgICAgICAgc3RhcnRBbmdsZSArPSBNYXRoLlBJICogMjtcbiAgICB9XG5cbiAgICB2YXIgc3dlZXAgPSBhbnRpY2xvY2t3aXNlID8gKHN0YXJ0QW5nbGUgLSBlbmRBbmdsZSkgKiAtMSA6IChlbmRBbmdsZSAtIHN0YXJ0QW5nbGUpO1xuICAgIHZhciBzZWdzID0gIE1hdGguY2VpbChNYXRoLmFicyhzd2VlcCkgLyAoTWF0aC5QSSAqIDIpKSAqIDQwO1xuXG4gICAgaWYoc3dlZXAgPT09IDApXG4gICAge1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICB2YXIgc3RhcnRYID0gY3ggKyBNYXRoLmNvcyhzdGFydEFuZ2xlKSAqIHJhZGl1cztcbiAgICB2YXIgc3RhcnRZID0gY3kgKyBNYXRoLnNpbihzdGFydEFuZ2xlKSAqIHJhZGl1cztcblxuICAgIGlmICh0aGlzLmN1cnJlbnRQYXRoKVxuICAgIHtcbiAgICAgICAgdGhpcy5jdXJyZW50UGF0aC5zaGFwZS5wb2ludHMucHVzaChzdGFydFgsIHN0YXJ0WSk7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHRoaXMubW92ZVRvKHN0YXJ0WCwgc3RhcnRZKTtcbiAgICB9XG5cbiAgICB2YXIgcG9pbnRzID0gdGhpcy5jdXJyZW50UGF0aC5zaGFwZS5wb2ludHM7XG5cbiAgICB2YXIgdGhldGEgPSBzd2VlcC8oc2VncyoyKTtcbiAgICB2YXIgdGhldGEyID0gdGhldGEqMjtcblxuICAgIHZhciBjVGhldGEgPSBNYXRoLmNvcyh0aGV0YSk7XG4gICAgdmFyIHNUaGV0YSA9IE1hdGguc2luKHRoZXRhKTtcblxuICAgIHZhciBzZWdNaW51cyA9IHNlZ3MgLSAxO1xuXG4gICAgdmFyIHJlbWFpbmRlciA9ICggc2VnTWludXMgJSAxICkgLyBzZWdNaW51cztcblxuICAgIGZvcih2YXIgaT0wOyBpPD1zZWdNaW51czsgaSsrKVxuICAgIHtcbiAgICAgICAgdmFyIHJlYWwgPSAgaSArIHJlbWFpbmRlciAqIGk7XG5cblxuICAgICAgICB2YXIgYW5nbGUgPSAoKHRoZXRhKSArIHN0YXJ0QW5nbGUgKyAodGhldGEyICogcmVhbCkpO1xuXG4gICAgICAgIHZhciBjID0gTWF0aC5jb3MoYW5nbGUpO1xuICAgICAgICB2YXIgcyA9IC1NYXRoLnNpbihhbmdsZSk7XG5cbiAgICAgICAgcG9pbnRzLnB1c2goKCAoY1RoZXRhICogIGMpICsgKHNUaGV0YSAqIHMpICkgKiByYWRpdXMgKyBjeCxcbiAgICAgICAgICAgICAgICAgICAgKCAoY1RoZXRhICogLXMpICsgKHNUaGV0YSAqIGMpICkgKiByYWRpdXMgKyBjeSk7XG4gICAgfVxuXG4gICAgdGhpcy5kaXJ0eSA9IHRoaXMuYm91bmRzRGlydHkgPSB0cnVlO1xuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIFNwZWNpZmllcyBhIHNpbXBsZSBvbmUtY29sb3IgZmlsbCB0aGF0IHN1YnNlcXVlbnQgY2FsbHMgdG8gb3RoZXIgR3JhcGhpY3MgbWV0aG9kc1xuICogKHN1Y2ggYXMgbGluZVRvKCkgb3IgZHJhd0NpcmNsZSgpKSB1c2Ugd2hlbiBkcmF3aW5nLlxuICpcbiAqIEBwYXJhbSBjb2xvciB7bnVtYmVyfSB0aGUgY29sb3Igb2YgdGhlIGZpbGxcbiAqIEBwYXJhbSBhbHBoYSB7bnVtYmVyfSB0aGUgYWxwaGEgb2YgdGhlIGZpbGxcbiAqIEByZXR1cm4ge1BJWEkuR3JhcGhpY3N9XG4gKi9cbkdyYXBoaWNzLnByb3RvdHlwZS5iZWdpbkZpbGwgPSBmdW5jdGlvbiAoY29sb3IsIGFscGhhKVxue1xuICAgIHRoaXMuZmlsbGluZyA9IHRydWU7XG4gICAgdGhpcy5maWxsQ29sb3IgPSBjb2xvciB8fCAwO1xuICAgIHRoaXMuZmlsbEFscGhhID0gKGFscGhhID09PSB1bmRlZmluZWQpID8gMSA6IGFscGhhO1xuXG4gICAgaWYgKHRoaXMuY3VycmVudFBhdGgpXG4gICAge1xuICAgICAgICBpZiAodGhpcy5jdXJyZW50UGF0aC5zaGFwZS5wb2ludHMubGVuZ3RoIDw9IDIpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuY3VycmVudFBhdGguZmlsbCA9IHRoaXMuZmlsbGluZztcbiAgICAgICAgICAgIHRoaXMuY3VycmVudFBhdGguZmlsbENvbG9yID0gdGhpcy5maWxsQ29sb3I7XG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRQYXRoLmZpbGxBbHBoYSA9IHRoaXMuZmlsbEFscGhhO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBBcHBsaWVzIGEgZmlsbCB0byB0aGUgbGluZXMgYW5kIHNoYXBlcyB0aGF0IHdlcmUgYWRkZWQgc2luY2UgdGhlIGxhc3QgY2FsbCB0byB0aGUgYmVnaW5GaWxsKCkgbWV0aG9kLlxuICpcbiAqIEByZXR1cm4ge0dyYXBoaWNzfVxuICovXG5HcmFwaGljcy5wcm90b3R5cGUuZW5kRmlsbCA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy5maWxsaW5nID0gZmFsc2U7XG4gICAgdGhpcy5maWxsQ29sb3IgPSBudWxsO1xuICAgIHRoaXMuZmlsbEFscGhhID0gMTtcblxuICAgIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKlxuICogQHBhcmFtIHgge251bWJlcn0gVGhlIFggY29vcmQgb2YgdGhlIHRvcC1sZWZ0IG9mIHRoZSByZWN0YW5nbGVcbiAqIEBwYXJhbSB5IHtudW1iZXJ9IFRoZSBZIGNvb3JkIG9mIHRoZSB0b3AtbGVmdCBvZiB0aGUgcmVjdGFuZ2xlXG4gKiBAcGFyYW0gd2lkdGgge251bWJlcn0gVGhlIHdpZHRoIG9mIHRoZSByZWN0YW5nbGVcbiAqIEBwYXJhbSBoZWlnaHQge251bWJlcn0gVGhlIGhlaWdodCBvZiB0aGUgcmVjdGFuZ2xlXG4gKiBAcmV0dXJuIHtQSVhJLkdyYXBoaWNzfVxuICovXG5HcmFwaGljcy5wcm90b3R5cGUuZHJhd1JlY3QgPSBmdW5jdGlvbiAoIHgsIHksIHdpZHRoLCBoZWlnaHQgKVxue1xuICAgIHRoaXMuZHJhd1NoYXBlKG5ldyBtYXRoLlJlY3RhbmdsZSh4LHksIHdpZHRoLCBoZWlnaHQpKTtcblxuICAgIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKlxuICogQHBhcmFtIHgge251bWJlcn0gVGhlIFggY29vcmQgb2YgdGhlIHRvcC1sZWZ0IG9mIHRoZSByZWN0YW5nbGVcbiAqIEBwYXJhbSB5IHtudW1iZXJ9IFRoZSBZIGNvb3JkIG9mIHRoZSB0b3AtbGVmdCBvZiB0aGUgcmVjdGFuZ2xlXG4gKiBAcGFyYW0gd2lkdGgge251bWJlcn0gVGhlIHdpZHRoIG9mIHRoZSByZWN0YW5nbGVcbiAqIEBwYXJhbSBoZWlnaHQge251bWJlcn0gVGhlIGhlaWdodCBvZiB0aGUgcmVjdGFuZ2xlXG4gKiBAcGFyYW0gcmFkaXVzIHtudW1iZXJ9IFJhZGl1cyBvZiB0aGUgcmVjdGFuZ2xlIGNvcm5lcnNcbiAqIEByZXR1cm4ge1BJWEkuR3JhcGhpY3N9XG4gKi9cbkdyYXBoaWNzLnByb3RvdHlwZS5kcmF3Um91bmRlZFJlY3QgPSBmdW5jdGlvbiAoIHgsIHksIHdpZHRoLCBoZWlnaHQsIHJhZGl1cyApXG57XG4gICAgdGhpcy5kcmF3U2hhcGUobmV3IG1hdGguUm91bmRlZFJlY3RhbmdsZSh4LCB5LCB3aWR0aCwgaGVpZ2h0LCByYWRpdXMpKTtcblxuICAgIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBEcmF3cyBhIGNpcmNsZS5cbiAqXG4gKiBAcGFyYW0geCB7bnVtYmVyfSBUaGUgWCBjb29yZGluYXRlIG9mIHRoZSBjZW50ZXIgb2YgdGhlIGNpcmNsZVxuICogQHBhcmFtIHkge251bWJlcn0gVGhlIFkgY29vcmRpbmF0ZSBvZiB0aGUgY2VudGVyIG9mIHRoZSBjaXJjbGVcbiAqIEBwYXJhbSByYWRpdXMge251bWJlcn0gVGhlIHJhZGl1cyBvZiB0aGUgY2lyY2xlXG4gKiBAcmV0dXJuIHtQSVhJLkdyYXBoaWNzfVxuICovXG5HcmFwaGljcy5wcm90b3R5cGUuZHJhd0NpcmNsZSA9IGZ1bmN0aW9uICh4LCB5LCByYWRpdXMpXG57XG4gICAgdGhpcy5kcmF3U2hhcGUobmV3IG1hdGguQ2lyY2xlKHgseSwgcmFkaXVzKSk7XG5cbiAgICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogRHJhd3MgYW4gZWxsaXBzZS5cbiAqXG4gKiBAcGFyYW0geCB7bnVtYmVyfSBUaGUgWCBjb29yZGluYXRlIG9mIHRoZSBjZW50ZXIgb2YgdGhlIGVsbGlwc2VcbiAqIEBwYXJhbSB5IHtudW1iZXJ9IFRoZSBZIGNvb3JkaW5hdGUgb2YgdGhlIGNlbnRlciBvZiB0aGUgZWxsaXBzZVxuICogQHBhcmFtIHdpZHRoIHtudW1iZXJ9IFRoZSBoYWxmIHdpZHRoIG9mIHRoZSBlbGxpcHNlXG4gKiBAcGFyYW0gaGVpZ2h0IHtudW1iZXJ9IFRoZSBoYWxmIGhlaWdodCBvZiB0aGUgZWxsaXBzZVxuICogQHJldHVybiB7UElYSS5HcmFwaGljc31cbiAqL1xuR3JhcGhpY3MucHJvdG90eXBlLmRyYXdFbGxpcHNlID0gZnVuY3Rpb24gKHgsIHksIHdpZHRoLCBoZWlnaHQpXG57XG4gICAgdGhpcy5kcmF3U2hhcGUobmV3IG1hdGguRWxsaXBzZSh4LCB5LCB3aWR0aCwgaGVpZ2h0KSk7XG5cbiAgICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogRHJhd3MgYSBwb2x5Z29uIHVzaW5nIHRoZSBnaXZlbiBwYXRoLlxuICpcbiAqIEBwYXJhbSBwYXRoIHtudW1iZXJbXXxQSVhJLlBvaW50W119IFRoZSBwYXRoIGRhdGEgdXNlZCB0byBjb25zdHJ1Y3QgdGhlIHBvbHlnb24uXG4gKiBAcmV0dXJuIHtQSVhJLkdyYXBoaWNzfVxuICovXG5HcmFwaGljcy5wcm90b3R5cGUuZHJhd1BvbHlnb24gPSBmdW5jdGlvbiAocGF0aClcbntcbiAgICAvLyBwcmV2ZW50cyBhbiBhcmd1bWVudCBhc3NpZ25tZW50IGRlb3B0XG4gICAgLy8gc2VlIHNlY3Rpb24gMy4xOiBodHRwczovL2dpdGh1Yi5jb20vcGV0a2FhbnRvbm92L2JsdWViaXJkL3dpa2kvT3B0aW1pemF0aW9uLWtpbGxlcnMjMy1tYW5hZ2luZy1hcmd1bWVudHNcbiAgICB2YXIgcG9pbnRzID0gcGF0aDtcblxuICAgIHZhciBjbG9zZWQgPSB0cnVlO1xuXG4gICAgaWYgKHBvaW50cyBpbnN0YW5jZW9mIG1hdGguUG9seWdvbilcbiAgICB7XG4gICAgICAgIGNsb3NlZCA9IHBvaW50cy5jbG9zZWQ7XG4gICAgICAgIHBvaW50cyA9IHBvaW50cy5wb2ludHM7XG4gICAgfVxuXG4gICAgaWYgKCFBcnJheS5pc0FycmF5KHBvaW50cykpXG4gICAge1xuICAgICAgICAvLyBwcmV2ZW50cyBhbiBhcmd1bWVudCBsZWFrIGRlb3B0XG4gICAgICAgIC8vIHNlZSBzZWN0aW9uIDMuMjogaHR0cHM6Ly9naXRodWIuY29tL3BldGthYW50b25vdi9ibHVlYmlyZC93aWtpL09wdGltaXphdGlvbi1raWxsZXJzIzMtbWFuYWdpbmctYXJndW1lbnRzXG4gICAgICAgIHBvaW50cyA9IG5ldyBBcnJheShhcmd1bWVudHMubGVuZ3RoKTtcblxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHBvaW50cy5sZW5ndGg7ICsraSlcbiAgICAgICAge1xuICAgICAgICAgICAgcG9pbnRzW2ldID0gYXJndW1lbnRzW2ldO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgdmFyIHNoYXBlID0gbmV3IG1hdGguUG9seWdvbihwb2ludHMpO1xuICAgIHNoYXBlLmNsb3NlZCA9IGNsb3NlZDtcblxuICAgIHRoaXMuZHJhd1NoYXBlKHNoYXBlKTtcblxuICAgIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBDbGVhcnMgdGhlIGdyYXBoaWNzIHRoYXQgd2VyZSBkcmF3biB0byB0aGlzIEdyYXBoaWNzIG9iamVjdCwgYW5kIHJlc2V0cyBmaWxsIGFuZCBsaW5lIHN0eWxlIHNldHRpbmdzLlxuICpcbiAqIEByZXR1cm4ge1BJWEkuR3JhcGhpY3N9XG4gKi9cbkdyYXBoaWNzLnByb3RvdHlwZS5jbGVhciA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy5saW5lV2lkdGggPSAwO1xuICAgIHRoaXMuZmlsbGluZyA9IGZhbHNlO1xuXG4gICAgdGhpcy5kaXJ0eSA9IHRydWU7XG4gICAgdGhpcy5jbGVhckRpcnR5ID0gdHJ1ZTtcbiAgICB0aGlzLmdyYXBoaWNzRGF0YSA9IFtdO1xuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIFVzZWZ1bCBmdW5jdGlvbiB0aGF0IHJldHVybnMgYSB0ZXh0dXJlIG9mIHRoZSBncmFwaGljcyBvYmplY3QgdGhhdCBjYW4gdGhlbiBiZSB1c2VkIHRvIGNyZWF0ZSBzcHJpdGVzXG4gKiBUaGlzIGNhbiBiZSBxdWl0ZSB1c2VmdWwgaWYgeW91ciBnZW9tZXRyeSBpcyBjb21wbGljYXRlZCBhbmQgbmVlZHMgdG8gYmUgcmV1c2VkIG11bHRpcGxlIHRpbWVzLlxuICpcbiAqIEBwYXJhbSByZXNvbHV0aW9uIHtudW1iZXJ9IFRoZSByZXNvbHV0aW9uIG9mIHRoZSB0ZXh0dXJlIGJlaW5nIGdlbmVyYXRlZFxuICogQHBhcmFtIHNjYWxlTW9kZSB7bnVtYmVyfSBTaG91bGQgYmUgb25lIG9mIHRoZSBzY2FsZU1vZGUgY29uc3RzXG4gKiBAcmV0dXJuIHtQSVhJLlRleHR1cmV9IGEgdGV4dHVyZSBvZiB0aGUgZ3JhcGhpY3Mgb2JqZWN0XG4gKi9cbkdyYXBoaWNzLnByb3RvdHlwZS5nZW5lcmF0ZVRleHR1cmUgPSBmdW5jdGlvbiAocmVuZGVyZXIsIHJlc29sdXRpb24sIHNjYWxlTW9kZSlcbntcblxuICAgIHJlc29sdXRpb24gPSByZXNvbHV0aW9uIHx8IDE7XG5cbiAgICB2YXIgYm91bmRzID0gdGhpcy5nZXRMb2NhbEJvdW5kcygpO1xuXG4gICAgdmFyIGNhbnZhc0J1ZmZlciA9IG5ldyBDYW52YXNCdWZmZXIoYm91bmRzLndpZHRoICogcmVzb2x1dGlvbiwgYm91bmRzLmhlaWdodCAqIHJlc29sdXRpb24pO1xuXG4gICAgdmFyIHRleHR1cmUgPSBUZXh0dXJlLmZyb21DYW52YXMoY2FudmFzQnVmZmVyLmNhbnZhcywgc2NhbGVNb2RlKTtcbiAgICB0ZXh0dXJlLmJhc2VUZXh0dXJlLnJlc29sdXRpb24gPSByZXNvbHV0aW9uO1xuXG4gICAgY2FudmFzQnVmZmVyLmNvbnRleHQuc2NhbGUocmVzb2x1dGlvbiwgcmVzb2x1dGlvbik7XG5cbiAgICBjYW52YXNCdWZmZXIuY29udGV4dC50cmFuc2xhdGUoLWJvdW5kcy54LC1ib3VuZHMueSk7XG5cbiAgICBDYW52YXNHcmFwaGljcy5yZW5kZXJHcmFwaGljcyh0aGlzLCBjYW52YXNCdWZmZXIuY29udGV4dCk7XG5cbiAgICByZXR1cm4gdGV4dHVyZTtcbn07XG5cbi8qKlxuICogUmVuZGVycyB0aGUgb2JqZWN0IHVzaW5nIHRoZSBXZWJHTCByZW5kZXJlclxuICpcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5XZWJHTFJlbmRlcmVyfVxuICogQHByaXZhdGVcbiAqL1xuR3JhcGhpY3MucHJvdG90eXBlLl9yZW5kZXJXZWJHTCA9IGZ1bmN0aW9uIChyZW5kZXJlcilcbntcbiAgICAvLyBpZiB0aGUgc3ByaXRlIGlzIG5vdCB2aXNpYmxlIG9yIHRoZSBhbHBoYSBpcyAwIHRoZW4gbm8gbmVlZCB0byByZW5kZXIgdGhpcyBlbGVtZW50XG5cbiAgICBpZiAodGhpcy5nbERpcnR5KVxuICAgIHtcbiAgICAgICAgdGhpcy5kaXJ0eSA9IHRydWU7XG4gICAgICAgIHRoaXMuZ2xEaXJ0eSA9IGZhbHNlO1xuICAgIH1cblxuICAgIHJlbmRlcmVyLnNldE9iamVjdFJlbmRlcmVyKHJlbmRlcmVyLnBsdWdpbnMuZ3JhcGhpY3MpO1xuICAgIHJlbmRlcmVyLnBsdWdpbnMuZ3JhcGhpY3MucmVuZGVyKHRoaXMpO1xuXG59O1xuXG4vKipcbiAqIFJlbmRlcnMgdGhlIG9iamVjdCB1c2luZyB0aGUgQ2FudmFzIHJlbmRlcmVyXG4gKlxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLkNhbnZhc1JlbmRlcmVyfVxuICogQHByaXZhdGVcbiAqL1xuR3JhcGhpY3MucHJvdG90eXBlLl9yZW5kZXJDYW52YXMgPSBmdW5jdGlvbiAocmVuZGVyZXIpXG57XG4gICAgaWYgKHRoaXMuaXNNYXNrID09PSB0cnVlKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIGlmIHRoZSB0aW50IGhhcyBjaGFuZ2VkLCBzZXQgdGhlIGdyYXBoaWNzIG9iamVjdCB0byBkaXJ0eS5cbiAgICBpZiAodGhpcy5fcHJldlRpbnQgIT09IHRoaXMudGludCkge1xuICAgICAgICB0aGlzLmRpcnR5ID0gdHJ1ZTtcbiAgICB9XG5cbiAgICAvLyB0aGlzIGNvZGUgbWF5IHN0aWxsIGJlIG5lZWRlZCBzbyBsZWF2aW5nIGZvciBub3cuLlxuICAgIC8vXG4gICAgLypcbiAgICBpZiAodGhpcy5fY2FjaGVBc0JpdG1hcClcbiAgICB7XG4gICAgICAgIGlmICh0aGlzLmRpcnR5IHx8IHRoaXMuY2FjaGVkU3ByaXRlRGlydHkpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuX2dlbmVyYXRlQ2FjaGVkU3ByaXRlKCk7XG5cbiAgICAgICAgICAgIC8vIHdlIHdpbGwgYWxzbyBuZWVkIHRvIHVwZGF0ZSB0aGUgdGV4dHVyZVxuICAgICAgICAgICAgdGhpcy51cGRhdGVDYWNoZWRTcHJpdGVUZXh0dXJlKCk7XG5cbiAgICAgICAgICAgIHRoaXMuY2FjaGVkU3ByaXRlRGlydHkgPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMuZGlydHkgPSBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX2NhY2hlZFNwcml0ZS5hbHBoYSA9IHRoaXMuYWxwaGE7XG5cbiAgICAgICAgU3ByaXRlLnByb3RvdHlwZS5fcmVuZGVyQ2FudmFzLmNhbGwodGhpcy5fY2FjaGVkU3ByaXRlLCByZW5kZXJlcik7XG5cbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICAqL1xuICAgIHZhciBjb250ZXh0ID0gcmVuZGVyZXIuY29udGV4dDtcbiAgICB2YXIgdHJhbnNmb3JtID0gdGhpcy53b3JsZFRyYW5zZm9ybTtcblxuICAgIHZhciBjb21wb3NpdGVPcGVyYXRpb24gPSByZW5kZXJlci5ibGVuZE1vZGVzW3RoaXMuYmxlbmRNb2RlXTtcbiAgICBpZiAoY29tcG9zaXRlT3BlcmF0aW9uICE9PSBjb250ZXh0Lmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbilcbiAgICB7XG4gICAgICAgIGNvbnRleHQuZ2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uID0gY29tcG9zaXRlT3BlcmF0aW9uO1xuICAgIH1cblxuICAgIHZhciByZXNvbHV0aW9uID0gcmVuZGVyZXIucmVzb2x1dGlvbjtcbiAgICBjb250ZXh0LnNldFRyYW5zZm9ybShcbiAgICAgICAgdHJhbnNmb3JtLmEgKiByZXNvbHV0aW9uLFxuICAgICAgICB0cmFuc2Zvcm0uYiAqIHJlc29sdXRpb24sXG4gICAgICAgIHRyYW5zZm9ybS5jICogcmVzb2x1dGlvbixcbiAgICAgICAgdHJhbnNmb3JtLmQgKiByZXNvbHV0aW9uLFxuICAgICAgICB0cmFuc2Zvcm0udHggKiByZXNvbHV0aW9uLFxuICAgICAgICB0cmFuc2Zvcm0udHkgKiByZXNvbHV0aW9uXG4gICAgKTtcblxuICAgIENhbnZhc0dyYXBoaWNzLnJlbmRlckdyYXBoaWNzKHRoaXMsIGNvbnRleHQpO1xufTtcblxuLyoqXG4gKiBSZXRyaWV2ZXMgdGhlIGJvdW5kcyBvZiB0aGUgZ3JhcGhpYyBzaGFwZSBhcyBhIHJlY3RhbmdsZSBvYmplY3RcbiAqXG4gKiBAcGFyYW0gW21hdHJpeF0ge1BJWEkuTWF0cml4fSBUaGUgd29ybGQgdHJhbnNmb3JtIG1hdHJpeCB0byB1c2UsIGRlZmF1bHRzIHRvIHRoaXNcbiAqICBvYmplY3QncyB3b3JsZFRyYW5zZm9ybS5cbiAqIEByZXR1cm4ge1BJWEkuUmVjdGFuZ2xlfSB0aGUgcmVjdGFuZ3VsYXIgYm91bmRpbmcgYXJlYVxuICovXG5HcmFwaGljcy5wcm90b3R5cGUuZ2V0Qm91bmRzID0gZnVuY3Rpb24gKG1hdHJpeClcbntcbiAgICBpZighdGhpcy5fY3VycmVudEJvdW5kcylcbiAgICB7XG5cbiAgICAgICAgLy8gcmV0dXJuIGFuIGVtcHR5IG9iamVjdCBpZiB0aGUgaXRlbSBpcyBhIG1hc2shXG4gICAgICAgIGlmICghdGhpcy5yZW5kZXJhYmxlKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gbWF0aC5SZWN0YW5nbGUuRU1QVFk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5ib3VuZHNEaXJ0eSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51cGRhdGVMb2NhbEJvdW5kcygpO1xuXG4gICAgICAgICAgICB0aGlzLmdsRGlydHkgPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy5jYWNoZWRTcHJpdGVEaXJ0eSA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLmJvdW5kc0RpcnR5ID0gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgYm91bmRzID0gdGhpcy5fbG9jYWxCb3VuZHM7XG5cbiAgICAgICAgdmFyIHcwID0gYm91bmRzLng7XG4gICAgICAgIHZhciB3MSA9IGJvdW5kcy53aWR0aCArIGJvdW5kcy54O1xuXG4gICAgICAgIHZhciBoMCA9IGJvdW5kcy55O1xuICAgICAgICB2YXIgaDEgPSBib3VuZHMuaGVpZ2h0ICsgYm91bmRzLnk7XG5cbiAgICAgICAgdmFyIHdvcmxkVHJhbnNmb3JtID0gbWF0cml4IHx8IHRoaXMud29ybGRUcmFuc2Zvcm07XG5cbiAgICAgICAgdmFyIGEgPSB3b3JsZFRyYW5zZm9ybS5hO1xuICAgICAgICB2YXIgYiA9IHdvcmxkVHJhbnNmb3JtLmI7XG4gICAgICAgIHZhciBjID0gd29ybGRUcmFuc2Zvcm0uYztcbiAgICAgICAgdmFyIGQgPSB3b3JsZFRyYW5zZm9ybS5kO1xuICAgICAgICB2YXIgdHggPSB3b3JsZFRyYW5zZm9ybS50eDtcbiAgICAgICAgdmFyIHR5ID0gd29ybGRUcmFuc2Zvcm0udHk7XG5cbiAgICAgICAgdmFyIHgxID0gYSAqIHcxICsgYyAqIGgxICsgdHg7XG4gICAgICAgIHZhciB5MSA9IGQgKiBoMSArIGIgKiB3MSArIHR5O1xuXG4gICAgICAgIHZhciB4MiA9IGEgKiB3MCArIGMgKiBoMSArIHR4O1xuICAgICAgICB2YXIgeTIgPSBkICogaDEgKyBiICogdzAgKyB0eTtcblxuICAgICAgICB2YXIgeDMgPSBhICogdzAgKyBjICogaDAgKyB0eDtcbiAgICAgICAgdmFyIHkzID0gZCAqIGgwICsgYiAqIHcwICsgdHk7XG5cbiAgICAgICAgdmFyIHg0ID0gIGEgKiB3MSArIGMgKiBoMCArIHR4O1xuICAgICAgICB2YXIgeTQgPSAgZCAqIGgwICsgYiAqIHcxICsgdHk7XG5cbiAgICAgICAgdmFyIG1heFggPSB4MTtcbiAgICAgICAgdmFyIG1heFkgPSB5MTtcblxuICAgICAgICB2YXIgbWluWCA9IHgxO1xuICAgICAgICB2YXIgbWluWSA9IHkxO1xuXG4gICAgICAgIG1pblggPSB4MiA8IG1pblggPyB4MiA6IG1pblg7XG4gICAgICAgIG1pblggPSB4MyA8IG1pblggPyB4MyA6IG1pblg7XG4gICAgICAgIG1pblggPSB4NCA8IG1pblggPyB4NCA6IG1pblg7XG5cbiAgICAgICAgbWluWSA9IHkyIDwgbWluWSA/IHkyIDogbWluWTtcbiAgICAgICAgbWluWSA9IHkzIDwgbWluWSA/IHkzIDogbWluWTtcbiAgICAgICAgbWluWSA9IHk0IDwgbWluWSA/IHk0IDogbWluWTtcblxuICAgICAgICBtYXhYID0geDIgPiBtYXhYID8geDIgOiBtYXhYO1xuICAgICAgICBtYXhYID0geDMgPiBtYXhYID8geDMgOiBtYXhYO1xuICAgICAgICBtYXhYID0geDQgPiBtYXhYID8geDQgOiBtYXhYO1xuXG4gICAgICAgIG1heFkgPSB5MiA+IG1heFkgPyB5MiA6IG1heFk7XG4gICAgICAgIG1heFkgPSB5MyA+IG1heFkgPyB5MyA6IG1heFk7XG4gICAgICAgIG1heFkgPSB5NCA+IG1heFkgPyB5NCA6IG1heFk7XG5cbiAgICAgICAgdGhpcy5fYm91bmRzLnggPSBtaW5YO1xuICAgICAgICB0aGlzLl9ib3VuZHMud2lkdGggPSBtYXhYIC0gbWluWDtcblxuICAgICAgICB0aGlzLl9ib3VuZHMueSA9IG1pblk7XG4gICAgICAgIHRoaXMuX2JvdW5kcy5oZWlnaHQgPSBtYXhZIC0gbWluWTtcblxuICAgICAgICB0aGlzLl9jdXJyZW50Qm91bmRzID0gdGhpcy5fYm91bmRzO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLl9jdXJyZW50Qm91bmRzO1xufTtcblxuLyoqXG4qIFRlc3RzIGlmIGEgcG9pbnQgaXMgaW5zaWRlIHRoaXMgZ3JhcGhpY3Mgb2JqZWN0XG4qXG4qIEBwYXJhbSBwb2ludCB7UElYSS5Qb2ludH0gdGhlIHBvaW50IHRvIHRlc3RcbiogQHJldHVybiB7Ym9vbGVhbn0gdGhlIHJlc3VsdCBvZiB0aGUgdGVzdFxuKi9cbkdyYXBoaWNzLnByb3RvdHlwZS5jb250YWluc1BvaW50ID0gZnVuY3Rpb24oIHBvaW50IClcbntcbiAgICB0aGlzLndvcmxkVHJhbnNmb3JtLmFwcGx5SW52ZXJzZShwb2ludCwgIHRlbXBQb2ludCk7XG5cbiAgICB2YXIgZ3JhcGhpY3NEYXRhID0gdGhpcy5ncmFwaGljc0RhdGE7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGdyYXBoaWNzRGF0YS5sZW5ndGg7IGkrKylcbiAgICB7XG4gICAgICAgIHZhciBkYXRhID0gZ3JhcGhpY3NEYXRhW2ldO1xuXG4gICAgICAgIGlmICghZGF0YS5maWxsKVxuICAgICAgICB7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIG9ubHkgZGVhbCB3aXRoIGZpbGxzLi5cbiAgICAgICAgaWYgKGRhdGEuc2hhcGUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGlmICggZGF0YS5zaGFwZS5jb250YWlucyggdGVtcFBvaW50LngsIHRlbXBQb2ludC55ICkgKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xufTtcblxuLyoqXG4gKiBVcGRhdGUgdGhlIGJvdW5kcyBvZiB0aGUgb2JqZWN0XG4gKlxuICovXG5HcmFwaGljcy5wcm90b3R5cGUudXBkYXRlTG9jYWxCb3VuZHMgPSBmdW5jdGlvbiAoKVxue1xuICAgIHZhciBtaW5YID0gSW5maW5pdHk7XG4gICAgdmFyIG1heFggPSAtSW5maW5pdHk7XG5cbiAgICB2YXIgbWluWSA9IEluZmluaXR5O1xuICAgIHZhciBtYXhZID0gLUluZmluaXR5O1xuXG4gICAgaWYgKHRoaXMuZ3JhcGhpY3NEYXRhLmxlbmd0aClcbiAgICB7XG4gICAgICAgIHZhciBzaGFwZSwgcG9pbnRzLCB4LCB5LCB3LCBoO1xuXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5ncmFwaGljc0RhdGEubGVuZ3RoOyBpKyspXG4gICAgICAgIHtcbiAgICAgICAgICAgIHZhciBkYXRhID0gdGhpcy5ncmFwaGljc0RhdGFbaV07XG4gICAgICAgICAgICB2YXIgdHlwZSA9IGRhdGEudHlwZTtcbiAgICAgICAgICAgIHZhciBsaW5lV2lkdGggPSBkYXRhLmxpbmVXaWR0aDtcbiAgICAgICAgICAgIHNoYXBlID0gZGF0YS5zaGFwZTtcblxuICAgICAgICAgICAgaWYgKHR5cGUgPT09IENPTlNULlNIQVBFUy5SRUNUIHx8IHR5cGUgPT09IENPTlNULlNIQVBFUy5SUkVDKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHggPSBzaGFwZS54IC0gbGluZVdpZHRoLzI7XG4gICAgICAgICAgICAgICAgeSA9IHNoYXBlLnkgLSBsaW5lV2lkdGgvMjtcbiAgICAgICAgICAgICAgICB3ID0gc2hhcGUud2lkdGggKyBsaW5lV2lkdGg7XG4gICAgICAgICAgICAgICAgaCA9IHNoYXBlLmhlaWdodCArIGxpbmVXaWR0aDtcblxuICAgICAgICAgICAgICAgIG1pblggPSB4IDwgbWluWCA/IHggOiBtaW5YO1xuICAgICAgICAgICAgICAgIG1heFggPSB4ICsgdyA+IG1heFggPyB4ICsgdyA6IG1heFg7XG5cbiAgICAgICAgICAgICAgICBtaW5ZID0geSA8IG1pblkgPyB5IDogbWluWTtcbiAgICAgICAgICAgICAgICBtYXhZID0geSArIGggPiBtYXhZID8geSArIGggOiBtYXhZO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAodHlwZSA9PT0gQ09OU1QuU0hBUEVTLkNJUkMpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgeCA9IHNoYXBlLng7XG4gICAgICAgICAgICAgICAgeSA9IHNoYXBlLnk7XG4gICAgICAgICAgICAgICAgdyA9IHNoYXBlLnJhZGl1cyArIGxpbmVXaWR0aC8yO1xuICAgICAgICAgICAgICAgIGggPSBzaGFwZS5yYWRpdXMgKyBsaW5lV2lkdGgvMjtcblxuICAgICAgICAgICAgICAgIG1pblggPSB4IC0gdyA8IG1pblggPyB4IC0gdyA6IG1pblg7XG4gICAgICAgICAgICAgICAgbWF4WCA9IHggKyB3ID4gbWF4WCA/IHggKyB3IDogbWF4WDtcblxuICAgICAgICAgICAgICAgIG1pblkgPSB5IC0gaCA8IG1pblkgPyB5IC0gaCA6IG1pblk7XG4gICAgICAgICAgICAgICAgbWF4WSA9IHkgKyBoID4gbWF4WSA/IHkgKyBoIDogbWF4WTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKHR5cGUgPT09IENPTlNULlNIQVBFUy5FTElQKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHggPSBzaGFwZS54O1xuICAgICAgICAgICAgICAgIHkgPSBzaGFwZS55O1xuICAgICAgICAgICAgICAgIHcgPSBzaGFwZS53aWR0aCArIGxpbmVXaWR0aC8yO1xuICAgICAgICAgICAgICAgIGggPSBzaGFwZS5oZWlnaHQgKyBsaW5lV2lkdGgvMjtcblxuICAgICAgICAgICAgICAgIG1pblggPSB4IC0gdyA8IG1pblggPyB4IC0gdyA6IG1pblg7XG4gICAgICAgICAgICAgICAgbWF4WCA9IHggKyB3ID4gbWF4WCA/IHggKyB3IDogbWF4WDtcblxuICAgICAgICAgICAgICAgIG1pblkgPSB5IC0gaCA8IG1pblkgPyB5IC0gaCA6IG1pblk7XG4gICAgICAgICAgICAgICAgbWF4WSA9IHkgKyBoID4gbWF4WSA/IHkgKyBoIDogbWF4WTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAvLyBQT0xZXG4gICAgICAgICAgICAgICAgcG9pbnRzID0gc2hhcGUucG9pbnRzO1xuXG4gICAgICAgICAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBwb2ludHMubGVuZ3RoOyBqICs9IDIpXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICB4ID0gcG9pbnRzW2pdO1xuICAgICAgICAgICAgICAgICAgICB5ID0gcG9pbnRzW2orMV07XG5cbiAgICAgICAgICAgICAgICAgICAgbWluWCA9IHgtbGluZVdpZHRoIDwgbWluWCA/IHgtbGluZVdpZHRoIDogbWluWDtcbiAgICAgICAgICAgICAgICAgICAgbWF4WCA9IHgrbGluZVdpZHRoID4gbWF4WCA/IHgrbGluZVdpZHRoIDogbWF4WDtcblxuICAgICAgICAgICAgICAgICAgICBtaW5ZID0geS1saW5lV2lkdGggPCBtaW5ZID8geS1saW5lV2lkdGggOiBtaW5ZO1xuICAgICAgICAgICAgICAgICAgICBtYXhZID0geStsaW5lV2lkdGggPiBtYXhZID8geStsaW5lV2lkdGggOiBtYXhZO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICBtaW5YID0gMDtcbiAgICAgICAgbWF4WCA9IDA7XG4gICAgICAgIG1pblkgPSAwO1xuICAgICAgICBtYXhZID0gMDtcbiAgICB9XG5cbiAgICB2YXIgcGFkZGluZyA9IHRoaXMuYm91bmRzUGFkZGluZztcblxuICAgIHRoaXMuX2xvY2FsQm91bmRzLnggPSBtaW5YIC0gcGFkZGluZztcbiAgICB0aGlzLl9sb2NhbEJvdW5kcy53aWR0aCA9IChtYXhYIC0gbWluWCkgKyBwYWRkaW5nICogMjtcblxuICAgIHRoaXMuX2xvY2FsQm91bmRzLnkgPSBtaW5ZIC0gcGFkZGluZztcbiAgICB0aGlzLl9sb2NhbEJvdW5kcy5oZWlnaHQgPSAobWF4WSAtIG1pblkpICsgcGFkZGluZyAqIDI7XG59O1xuXG4vKipcbiAqIEdlbmVyYXRlcyB0aGUgY2FjaGVkIHNwcml0ZSB3aGVuIHRoZSBzcHJpdGUgaGFzIGNhY2hlQXNCaXRtYXAgPSB0cnVlXG4gKlxuICogQHByaXZhdGVcbiAqL1xuLypcbkdyYXBoaWNzLnByb3RvdHlwZS5fZ2VuZXJhdGVDYWNoZWRTcHJpdGUgPSBmdW5jdGlvbiAoKVxue1xuICAgIHZhciBib3VuZHMgPSB0aGlzLmdldExvY2FsQm91bmRzKCk7XG5cbiAgICBpZiAoIXRoaXMuX2NhY2hlZFNwcml0ZSlcbiAgICB7XG4gICAgICAgIHZhciBjYW52YXNCdWZmZXIgPSBuZXcgQ2FudmFzQnVmZmVyKGJvdW5kcy53aWR0aCwgYm91bmRzLmhlaWdodCk7XG4gICAgICAgIHZhciB0ZXh0dXJlID0gVGV4dHVyZS5mcm9tQ2FudmFzKGNhbnZhc0J1ZmZlci5jYW52YXMpO1xuXG4gICAgICAgIHRoaXMuX2NhY2hlZFNwcml0ZSA9IG5ldyBTcHJpdGUodGV4dHVyZSk7XG4gICAgICAgIHRoaXMuX2NhY2hlZFNwcml0ZS5idWZmZXIgPSBjYW52YXNCdWZmZXI7XG5cbiAgICAgICAgdGhpcy5fY2FjaGVkU3ByaXRlLndvcmxkVHJhbnNmb3JtID0gdGhpcy53b3JsZFRyYW5zZm9ybTtcbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgdGhpcy5fY2FjaGVkU3ByaXRlLmJ1ZmZlci5yZXNpemUoYm91bmRzLndpZHRoLCBib3VuZHMuaGVpZ2h0KTtcbiAgICB9XG5cbiAgICAvLyBsZXZlcmFnZSB0aGUgYW5jaG9yIHRvIGFjY291bnQgZm9yIHRoZSBvZmZzZXQgb2YgdGhlIGVsZW1lbnRcbiAgICB0aGlzLl9jYWNoZWRTcHJpdGUuYW5jaG9yLnggPSAtKCBib3VuZHMueCAvIGJvdW5kcy53aWR0aCApO1xuICAgIHRoaXMuX2NhY2hlZFNwcml0ZS5hbmNob3IueSA9IC0oIGJvdW5kcy55IC8gYm91bmRzLmhlaWdodCApO1xuXG4gICAgLy8gdGhpcy5fY2FjaGVkU3ByaXRlLmJ1ZmZlci5jb250ZXh0LnNhdmUoKTtcbiAgICB0aGlzLl9jYWNoZWRTcHJpdGUuYnVmZmVyLmNvbnRleHQudHJhbnNsYXRlKC1ib3VuZHMueCwtYm91bmRzLnkpO1xuXG4gICAgLy8gbWFrZSBzdXJlIHdlIHNldCB0aGUgYWxwaGEgb2YgdGhlIGdyYXBoaWNzIHRvIDEgZm9yIHRoZSByZW5kZXIuLlxuICAgIHRoaXMud29ybGRBbHBoYSA9IDE7XG5cbiAgICAvLyBub3cgcmVuZGVyIHRoZSBncmFwaGljLi5cbiAgICBDYW52YXNHcmFwaGljcy5yZW5kZXJHcmFwaGljcyh0aGlzLCB0aGlzLl9jYWNoZWRTcHJpdGUuYnVmZmVyLmNvbnRleHQpO1xuXG4gICAgdGhpcy5fY2FjaGVkU3ByaXRlLmFscGhhID0gdGhpcy5hbHBoYTtcbn07XG4qL1xuLyoqXG4gKiBVcGRhdGVzIHRleHR1cmUgc2l6ZSBiYXNlZCBvbiBjYW52YXMgc2l6ZVxuICpcbiAqIEBwcml2YXRlXG4gKi9cbi8qXG5HcmFwaGljcy5wcm90b3R5cGUudXBkYXRlQ2FjaGVkU3ByaXRlVGV4dHVyZSA9IGZ1bmN0aW9uICgpXG57XG4gICAgdmFyIGNhY2hlZFNwcml0ZSA9IHRoaXMuX2NhY2hlZFNwcml0ZTtcbiAgICB2YXIgdGV4dHVyZSA9IGNhY2hlZFNwcml0ZS50ZXh0dXJlO1xuICAgIHZhciBjYW52YXMgPSBjYWNoZWRTcHJpdGUuYnVmZmVyLmNhbnZhcztcblxuICAgIHRleHR1cmUuYmFzZVRleHR1cmUud2lkdGggPSBjYW52YXMud2lkdGg7XG4gICAgdGV4dHVyZS5iYXNlVGV4dHVyZS5oZWlnaHQgPSBjYW52YXMuaGVpZ2h0O1xuICAgIHRleHR1cmUuY3JvcC53aWR0aCA9IHRleHR1cmUuZnJhbWUud2lkdGggPSBjYW52YXMud2lkdGg7XG4gICAgdGV4dHVyZS5jcm9wLmhlaWdodCA9IHRleHR1cmUuZnJhbWUuaGVpZ2h0ID0gY2FudmFzLmhlaWdodDtcblxuICAgIGNhY2hlZFNwcml0ZS5fd2lkdGggPSBjYW52YXMud2lkdGg7XG4gICAgY2FjaGVkU3ByaXRlLl9oZWlnaHQgPSBjYW52YXMuaGVpZ2h0O1xuXG4gICAgLy8gdXBkYXRlIHRoZSBkaXJ0eSBiYXNlIHRleHR1cmVzXG4gICAgdGV4dHVyZS5iYXNlVGV4dHVyZS5kaXJ0eSgpO1xufTsqL1xuXG4vKipcbiAqIERlc3Ryb3lzIGEgcHJldmlvdXMgY2FjaGVkIHNwcml0ZS5cbiAqXG4gKi9cbi8qXG5HcmFwaGljcy5wcm90b3R5cGUuZGVzdHJveUNhY2hlZFNwcml0ZSA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy5fY2FjaGVkU3ByaXRlLnRleHR1cmUuZGVzdHJveSh0cnVlKTtcblxuICAgIC8vIGxldCB0aGUgZ2MgY29sbGVjdCB0aGUgdW51c2VkIHNwcml0ZVxuICAgIC8vIFRPRE8gY291bGQgYmUgb2JqZWN0IHBvb2xlZCFcbiAgICB0aGlzLl9jYWNoZWRTcHJpdGUgPSBudWxsO1xufTsqL1xuXG4vKipcbiAqIERyYXdzIHRoZSBnaXZlbiBzaGFwZSB0byB0aGlzIEdyYXBoaWNzIG9iamVjdC4gQ2FuIGJlIGFueSBvZiBDaXJjbGUsIFJlY3RhbmdsZSwgRWxsaXBzZSwgTGluZSBvciBQb2x5Z29uLlxuICpcbiAqIEBwYXJhbSBzaGFwZSB7UElYSS5DaXJjbGV8UElYSS5SZWN0YW5nbGV8UElYSS5FbGxpcHNlfFBJWEkuTGluZXxQSVhJLlBvbHlnb259IFRoZSBzaGFwZSBvYmplY3QgdG8gZHJhdy5cbiAqIEByZXR1cm4ge1BJWEkuR3JhcGhpY3NEYXRhfSBUaGUgZ2VuZXJhdGVkIEdyYXBoaWNzRGF0YSBvYmplY3QuXG4gKi9cbkdyYXBoaWNzLnByb3RvdHlwZS5kcmF3U2hhcGUgPSBmdW5jdGlvbiAoc2hhcGUpXG57XG4gICAgaWYgKHRoaXMuY3VycmVudFBhdGgpXG4gICAge1xuICAgICAgICAvLyBjaGVjayBjdXJyZW50IHBhdGghXG4gICAgICAgIGlmICh0aGlzLmN1cnJlbnRQYXRoLnNoYXBlLnBvaW50cy5sZW5ndGggPD0gMilcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5ncmFwaGljc0RhdGEucG9wKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLmN1cnJlbnRQYXRoID0gbnVsbDtcblxuICAgIHZhciBkYXRhID0gbmV3IEdyYXBoaWNzRGF0YSh0aGlzLmxpbmVXaWR0aCwgdGhpcy5saW5lQ29sb3IsIHRoaXMubGluZUFscGhhLCB0aGlzLmZpbGxDb2xvciwgdGhpcy5maWxsQWxwaGEsIHRoaXMuZmlsbGluZywgc2hhcGUpO1xuXG4gICAgdGhpcy5ncmFwaGljc0RhdGEucHVzaChkYXRhKTtcblxuICAgIGlmIChkYXRhLnR5cGUgPT09IENPTlNULlNIQVBFUy5QT0xZKVxuICAgIHtcbiAgICAgICAgZGF0YS5zaGFwZS5jbG9zZWQgPSBkYXRhLnNoYXBlLmNsb3NlZCB8fCB0aGlzLmZpbGxpbmc7XG4gICAgICAgIHRoaXMuY3VycmVudFBhdGggPSBkYXRhO1xuICAgIH1cblxuICAgIHRoaXMuZGlydHkgPSB0aGlzLmJvdW5kc0RpcnR5ID0gdHJ1ZTtcblxuICAgIHJldHVybiBkYXRhO1xufTtcblxuLyoqXG4gKiBEZXN0cm95cyB0aGUgR3JhcGhpY3Mgb2JqZWN0LlxuICovXG5HcmFwaGljcy5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uICgpIHtcbiAgICBDb250YWluZXIucHJvdG90eXBlLmRlc3Ryb3kuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcblxuICAgIC8vIGRlc3Ryb3kgZWFjaCBvZiB0aGUgR3JhcGhpY3NEYXRhIG9iamVjdHNcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuZ3JhcGhpY3NEYXRhLmxlbmd0aDsgKytpKSB7XG4gICAgICAgIHRoaXMuZ3JhcGhpY3NEYXRhW2ldLmRlc3Ryb3koKTtcbiAgICB9XG5cbiAgICAvLyBmb3IgZWFjaCB3ZWJnbCBkYXRhIGVudHJ5LCBkZXN0cm95IHRoZSBXZWJHTEdyYXBoaWNzRGF0YVxuICAgIGZvciAodmFyIGlkIGluIHRoaXMuX3dlYmdsKSB7XG4gICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgdGhpcy5fd2ViZ2xbaWRdLmRhdGEubGVuZ3RoOyArK2opIHtcbiAgICAgICAgICAgIHRoaXMuX3dlYmdsW2lkXS5kYXRhW2pdLmRlc3Ryb3koKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMuZ3JhcGhpY3NEYXRhID0gbnVsbDtcblxuICAgIHRoaXMuY3VycmVudFBhdGggPSBudWxsO1xuICAgIHRoaXMuX3dlYmdsID0gbnVsbDtcbiAgICB0aGlzLl9sb2NhbEJvdW5kcyA9IG51bGw7XG59O1xuIiwiLyoqXG4gKiBBIEdyYXBoaWNzRGF0YSBvYmplY3QuXG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIGxpbmVXaWR0aCB7bnVtYmVyfSB0aGUgd2lkdGggb2YgdGhlIGxpbmUgdG8gZHJhd1xuICogQHBhcmFtIGxpbmVDb2xvciB7bnVtYmVyfSB0aGUgY29sb3Igb2YgdGhlIGxpbmUgdG8gZHJhd1xuICogQHBhcmFtIGxpbmVBbHBoYSB7bnVtYmVyfSB0aGUgYWxwaGEgb2YgdGhlIGxpbmUgdG8gZHJhd1xuICogQHBhcmFtIGZpbGxDb2xvciB7bnVtYmVyfSB0aGUgY29sb3Igb2YgdGhlIGZpbGxcbiAqIEBwYXJhbSBmaWxsQWxwaGEge251bWJlcn0gdGhlIGFscGhhIG9mIHRoZSBmaWxsXG4gKiBAcGFyYW0gZmlsbCAgICAgIHtib29sZWFufSB3aGV0aGVyIG9yIG5vdCB0aGUgc2hhcGUgaXMgZmlsbGVkIHdpdGggYSBjb2xvdXJcbiAqIEBwYXJhbSBzaGFwZSAgICAge0NpcmNsZXxSZWN0YW5nbGV8RWxsaXBzZXxMaW5lfFBvbHlnb259IFRoZSBzaGFwZSBvYmplY3QgdG8gZHJhdy5cbiAqL1xuZnVuY3Rpb24gR3JhcGhpY3NEYXRhKGxpbmVXaWR0aCwgbGluZUNvbG9yLCBsaW5lQWxwaGEsIGZpbGxDb2xvciwgZmlsbEFscGhhLCBmaWxsLCBzaGFwZSlcbntcbiAgICAvKlxuICAgICAqIEBtZW1iZXIge251bWJlcn0gdGhlIHdpZHRoIG9mIHRoZSBsaW5lIHRvIGRyYXdcbiAgICAgKi9cbiAgICB0aGlzLmxpbmVXaWR0aCA9IGxpbmVXaWR0aDtcblxuICAgIC8qXG4gICAgICogQG1lbWJlciB7bnVtYmVyfSB0aGUgY29sb3Igb2YgdGhlIGxpbmUgdG8gZHJhd1xuICAgICAqL1xuICAgIHRoaXMubGluZUNvbG9yID0gbGluZUNvbG9yO1xuICAgIC8qXG4gICAgICogQG1lbWJlciB7bnVtYmVyfSB0aGUgYWxwaGEgb2YgdGhlIGxpbmUgdG8gZHJhd1xuICAgICAqL1xuICAgIHRoaXMubGluZUFscGhhID0gbGluZUFscGhhO1xuICAgIC8qXG4gICAgICogQG1lbWJlciB7bnVtYmVyfSBjYWNoZWQgdGludCBvZiB0aGUgbGluZSB0byBkcmF3XG4gICAgICovXG4gICAgdGhpcy5fbGluZVRpbnQgPSBsaW5lQ29sb3I7XG5cbiAgICAvKlxuICAgICAqIEBtZW1iZXIge251bWJlcn0gdGhlIGNvbG9yIG9mIHRoZSBmaWxsXG4gICAgICovXG4gICAgdGhpcy5maWxsQ29sb3IgPSBmaWxsQ29sb3I7XG5cbiAgICAvKlxuICAgICAqIEBtZW1iZXIge251bWJlcn0gdGhlIGFscGhhIG9mIHRoZSBmaWxsXG4gICAgICovXG4gICAgdGhpcy5maWxsQWxwaGEgPSBmaWxsQWxwaGE7XG5cbiAgICAvKlxuICAgICAqIEBtZW1iZXIge251bWJlcn0gY2FjaGVkIHRpbnQgb2YgdGhlIGZpbGxcbiAgICAgKi9cbiAgICB0aGlzLl9maWxsVGludCA9IGZpbGxDb2xvcjtcblxuICAgIC8qXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn0gd2hldGhlciBvciBub3QgdGhlIHNoYXBlIGlzIGZpbGxlZCB3aXRoIGEgY29sb3VyXG4gICAgICovXG4gICAgdGhpcy5maWxsID0gZmlsbDtcblxuICAgIC8qXG4gICAgICogQG1lbWJlciB7UElYSS5DaXJjbGV8UElYSS5SZWN0YW5nbGV8UElYSS5FbGxpcHNlfFBJWEkuTGluZXxQSVhJLlBvbHlnb259IFRoZSBzaGFwZSBvYmplY3QgdG8gZHJhdy5cbiAgICAgKi9cbiAgICB0aGlzLnNoYXBlID0gc2hhcGU7XG5cbiAgICAvKlxuICAgICAqIEBtZW1iZXIge251bWJlcn0gVGhlIHR5cGUgb2YgdGhlIHNoYXBlLCBzZWUgdGhlIENvbnN0LlNoYXBlcyBmaWxlIGZvciBhbGwgdGhlIGV4aXN0aW5nIHR5cGVzLFxuICAgICAqL1xuICAgIHRoaXMudHlwZSA9IHNoYXBlLnR5cGU7XG59XG5cbkdyYXBoaWNzRGF0YS5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBHcmFwaGljc0RhdGE7XG5tb2R1bGUuZXhwb3J0cyA9IEdyYXBoaWNzRGF0YTtcblxuLyoqXG4gKiBDcmVhdGVzIGEgbmV3IEdyYXBoaWNzRGF0YSBvYmplY3Qgd2l0aCB0aGUgc2FtZSB2YWx1ZXMgYXMgdGhpcyBvbmUuXG4gKlxuICogQHJldHVybiB7UElYSS5HcmFwaGljc0RhdGF9XG4gKi9cbkdyYXBoaWNzRGF0YS5wcm90b3R5cGUuY2xvbmUgPSBmdW5jdGlvbiAoKVxue1xuICAgIHJldHVybiBuZXcgR3JhcGhpY3NEYXRhKFxuICAgICAgICB0aGlzLmxpbmVXaWR0aCxcbiAgICAgICAgdGhpcy5saW5lQ29sb3IsXG4gICAgICAgIHRoaXMubGluZUFscGhhLFxuICAgICAgICB0aGlzLmZpbGxDb2xvcixcbiAgICAgICAgdGhpcy5maWxsQWxwaGEsXG4gICAgICAgIHRoaXMuZmlsbCxcbiAgICAgICAgdGhpcy5zaGFwZVxuICAgICk7XG59O1xuXG4vKipcbiAqIERlc3Ryb3lzIHRoZSBHcmFwaGljcyBkYXRhLlxuICovXG5HcmFwaGljc0RhdGEucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoKSB7XG4gICAgdGhpcy5zaGFwZSA9IG51bGw7XG59O1xuIiwidmFyIHV0aWxzID0gcmVxdWlyZSgnLi4vLi4vdXRpbHMnKSxcbiAgICBtYXRoID0gcmVxdWlyZSgnLi4vLi4vbWF0aCcpLFxuICAgIENPTlNUID0gcmVxdWlyZSgnLi4vLi4vY29uc3QnKSxcbiAgICBPYmplY3RSZW5kZXJlciA9IHJlcXVpcmUoJy4uLy4uL3JlbmRlcmVycy93ZWJnbC91dGlscy9PYmplY3RSZW5kZXJlcicpLFxuICAgIFdlYkdMUmVuZGVyZXIgPSByZXF1aXJlKCcuLi8uLi9yZW5kZXJlcnMvd2ViZ2wvV2ViR0xSZW5kZXJlcicpLFxuICAgIFdlYkdMR3JhcGhpY3NEYXRhID0gcmVxdWlyZSgnLi9XZWJHTEdyYXBoaWNzRGF0YScpLFxuICAgIFByaW1pdGl2ZVNoYWRlciA9IHJlcXVpcmUoJy4vc2hhZGVycy9QcmltaXRpdmVTaGFkZXInKSxcblxuICAgIC8vIHNvbWUgZHJhd2luZyBmdW5jdGlvbnMuLlxuICAgIGJ1aWxkTGluZSA9IHJlcXVpcmUoJy4vdXRpbHMvYnVpbGRMaW5lJyk7XG4gICAgYnVpbGRQb2x5ID0gcmVxdWlyZSgnLi91dGlscy9idWlsZFBvbHknKTtcbiAgICBidWlsZENvbXBsZXhQb2x5ID0gcmVxdWlyZSgnLi91dGlscy9idWlsZENvbXBsZXhQb2x5Jyk7XG4gICAgYnVpbGRSZWN0YW5nbGUgPSByZXF1aXJlKCcuL3V0aWxzL2J1aWxkUmVjdGFuZ2xlJyk7XG4gICAgYnVpbGRSb3VuZGVkUmVjdGFuZ2xlID0gcmVxdWlyZSgnLi91dGlscy9idWlsZFJvdW5kZWRSZWN0YW5nbGUnKTtcbiAgICBidWlsZENpcmNsZSA9IHJlcXVpcmUoJy4vdXRpbHMvYnVpbGRDaXJjbGUnKTtcblxuICAgIGVhcmN1dCA9IHJlcXVpcmUoJ2VhcmN1dCcpO1xuXG4vKipcbiAqIFJlbmRlcnMgdGhlIGdyYXBoaWNzIG9iamVjdC5cbiAqXG4gKiBAY2xhc3NcbiAqIEBwcml2YXRlXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQGV4dGVuZHMgUElYSS5PYmplY3RSZW5kZXJlclxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLldlYkdMUmVuZGVyZXJ9IFRoZSByZW5kZXJlciB0aGlzIG9iamVjdCByZW5kZXJlciB3b3JrcyBmb3IuXG4gKi9cbmZ1bmN0aW9uIEdyYXBoaWNzUmVuZGVyZXIocmVuZGVyZXIpXG57XG4gICAgT2JqZWN0UmVuZGVyZXIuY2FsbCh0aGlzLCByZW5kZXJlcik7XG5cbiAgICB0aGlzLmdyYXBoaWNzRGF0YVBvb2wgPSBbXTtcblxuICAgIHRoaXMucHJpbWl0aXZlU2hhZGVyID0gbnVsbDtcbiAgICB0aGlzLmNvbXBsZXhQcmltaXRpdmVTaGFkZXIgPSBudWxsO1xuXG4gICAgdGhpcy5nbCA9IHJlbmRlcmVyLmdsO1xuXG4gICAgLyoqXG4gICAgICogVGhpcyBpcyB0aGUgbWF4aW11bSBudW1iZXIgb2YgcG9pbnRzIGEgcG9seSBjYW4gY29udGFpbiBiZWZvcmUgaXQgaXMgcmVuZGVyZWQgYXMgYSBjb21wbGV4IHBvbHlnb24gKHVzaW5nIHRoZSBzdGVuY2lsIGJ1ZmZlcilcbiAgICAgKiBAdHlwZSB7TnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMubWF4aW11bVNpbXBsZVBvbHlTaXplID0gMjAwO1xufVxuXG5HcmFwaGljc1JlbmRlcmVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoT2JqZWN0UmVuZGVyZXIucHJvdG90eXBlKTtcbkdyYXBoaWNzUmVuZGVyZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gR3JhcGhpY3NSZW5kZXJlcjtcbm1vZHVsZS5leHBvcnRzID0gR3JhcGhpY3NSZW5kZXJlcjtcblxuV2ViR0xSZW5kZXJlci5yZWdpc3RlclBsdWdpbignZ3JhcGhpY3MnLCBHcmFwaGljc1JlbmRlcmVyKTtcblxuLyoqXG4gKiBDYWxsZWQgd2hlbiB0aGVyZSBpcyBhIFdlYkdMIGNvbnRleHQgY2hhbmdlXG4gKlxuICogQHByaXZhdGVcbiAqXG4gKi9cbkdyYXBoaWNzUmVuZGVyZXIucHJvdG90eXBlLm9uQ29udGV4dENoYW5nZSA9IGZ1bmN0aW9uKClcbntcbiAgICB0aGlzLmdsID0gdGhpcy5yZW5kZXJlci5nbDtcbiAgICB0aGlzLnByaW1pdGl2ZVNoYWRlciA9IG5ldyBQcmltaXRpdmVTaGFkZXIodGhpcy5nbClcbn07XG5cbi8qKlxuICogRGVzdHJveXMgdGhpcyByZW5kZXJlci5cbiAqXG4gKi9cbkdyYXBoaWNzUmVuZGVyZXIucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoKSB7XG4gICAgT2JqZWN0UmVuZGVyZXIucHJvdG90eXBlLmRlc3Ryb3kuY2FsbCh0aGlzKTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5ncmFwaGljc0RhdGFQb29sLmxlbmd0aDsgKytpKSB7XG4gICAgICAgIHRoaXMuZ3JhcGhpY3NEYXRhUG9vbFtpXS5kZXN0cm95KCk7XG4gICAgfVxuXG4gICAgdGhpcy5ncmFwaGljc0RhdGFQb29sID0gbnVsbDtcbn07XG5cbi8qKlxuICogUmVuZGVycyBhIGdyYXBoaWNzIG9iamVjdC5cbiAqXG4gKiBAcGFyYW0gZ3JhcGhpY3Mge1BJWEkuR3JhcGhpY3N9IFRoZSBncmFwaGljcyBvYmplY3QgdG8gcmVuZGVyLlxuICovXG5HcmFwaGljc1JlbmRlcmVyLnByb3RvdHlwZS5yZW5kZXIgPSBmdW5jdGlvbihncmFwaGljcylcbntcbiAgICB2YXIgcmVuZGVyZXIgPSB0aGlzLnJlbmRlcmVyO1xuICAgIHZhciBnbCA9IHJlbmRlcmVyLmdsO1xuXG4gICAgdmFyIHdlYkdMRGF0YTtcbiAgLy8gIGNvbnNvbGUubG9nKGdyYXBoaWNzKVxuICAgIGlmIChncmFwaGljcy5kaXJ0eSB8fCAhZ3JhcGhpY3MuX3dlYkdMW2dsLmlkXSlcbiAgICB7XG4gICAgICAgIHRoaXMudXBkYXRlR3JhcGhpY3MoZ3JhcGhpY3MpO1xuICAgIH1cblxuICAgIHZhciB3ZWJHTCA9IGdyYXBoaWNzLl93ZWJHTFtnbC5pZF07XG5cbiAgICAvLyBUaGlzICBjb3VsZCBiZSBzcGVlZGVkIHVwIGZvciBzdXJlIVxuXG4gICAgcmVuZGVyZXIuYmxlbmRNb2RlTWFuYWdlci5zZXRCbGVuZE1vZGUoIGdyYXBoaWNzLmJsZW5kTW9kZSApO1xuXG4vLyAgICB2YXIgbWF0cml4ID0gIGdyYXBoaWNzLndvcmxkVHJhbnNmb3JtLmNsb25lKCk7XG4vLyAgICB2YXIgbWF0cml4ID0gIHJlbmRlcmVyLmN1cnJlbnRSZW5kZXJUYXJnZXQucHJvamVjdGlvbk1hdHJpeC5jbG9uZSgpO1xuLy8gICAgbWF0cml4LmFwcGVuZChncmFwaGljcy53b3JsZFRyYW5zZm9ybSk7XG5cbiAgICBmb3IgKHZhciBpID0gMCwgbiA9IHdlYkdMLmRhdGEubGVuZ3RoOyBpIDwgbjsgaSsrKVxuICAgIHtcbiAgICAgICAgd2ViR0xEYXRhID0gd2ViR0wuZGF0YVtpXTtcblxuICAgICAgICBpZiAod2ViR0wuZGF0YVtpXS5tb2RlID09PSAxKVxuICAgICAgICB7XG4gICAgICAgICAgICAvL1RPRE8gZml4IHRoaXMgb25lIVxuICAgICAgICAgICAgXG4gICAgICAgICAgICAvKlxuICAgICAgICAgICAgcmVuZGVyZXIuc3RlbmNpbE1hbmFnZXIucHVzaFN0ZW5jaWwoZ3JhcGhpY3MsIHdlYkdMRGF0YSk7XG5cbiAgICAgICAgICAgIGdsLnVuaWZvcm0xZihyZW5kZXJlci5zaGFkZXJNYW5hZ2VyLmNvbXBsZXhQcmltaXRpdmVTaGFkZXIudW5pZm9ybXMuYWxwaGEuX2xvY2F0aW9uLCBncmFwaGljcy53b3JsZEFscGhhICogd2ViR0xEYXRhLmFscGhhKTtcblxuICAgICAgICAgICAgLy8gcmVuZGVyIHF1YWQuLlxuICAgICAgICAgICAgZ2wuZHJhd0VsZW1lbnRzKGdsLlRSSUFOR0xFX0ZBTiwgNCwgZ2wuVU5TSUdORURfU0hPUlQsICggd2ViR0xEYXRhLmluZGljZXMubGVuZ3RoIC0gNCApICogMiApO1xuXG4gICAgICAgICAgICByZW5kZXJlci5zdGVuY2lsTWFuYWdlci5wb3BTdGVuY2lsKGdyYXBoaWNzLCB3ZWJHTERhdGEpO1xuICAgICAgICAgICAgKi9cbiAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgIHtcblxuICAgICAgICAgICAgc2hhZGVyID0gdGhpcy5wcmltaXRpdmVTaGFkZXI7XG5cbiAgICAgICAgICAgIHJlbmRlcmVyLmJpbmRTaGFkZXIoc2hhZGVyKVxuXG4gICAgICAgICAgICBzaGFkZXIudW5pZm9ybXMudHJhbnNsYXRpb25NYXRyaXggPSBncmFwaGljcy53b3JsZFRyYW5zZm9ybS50b0FycmF5KHRydWUpO1xuICAgICAgICAgICAgc2hhZGVyLnVuaWZvcm1zLnRpbnQgPSB1dGlscy5oZXgycmdiKGdyYXBoaWNzLnRpbnQpO1xuICAgICAgICAgICAgc2hhZGVyLnVuaWZvcm1zLmFscGhhID0gZ3JhcGhpY3Mud29ybGRBbHBoYTtcblxuXG4gICAgICAgICAgICBnbC5iaW5kQnVmZmVyKGdsLkFSUkFZX0JVRkZFUiwgd2ViR0xEYXRhLmJ1ZmZlcik7XG5cbiAgICAgICAgICAgIHNoYWRlciA9IHRoaXMucHJpbWl0aXZlU2hhZGVyO1xuXG4gICAgICAgICAgICBzaGFkZXIuYXR0cmlidXRlcy5hVmVydGV4UG9zaXRpb24ucG9pbnRlcihnbC5GTE9BVCwgZmFsc2UsIDQgKiA2LCAwKTtcbiAgICAgICAgICAgIHNoYWRlci5hdHRyaWJ1dGVzLmFDb2xvci5wb2ludGVyKGdsLkZMT0FULCBmYWxzZSwgNCAqIDYsIDIgKiA0KTtcblxuICAgICAgICAgICAgZ2wuZW5hYmxlVmVydGV4QXR0cmliQXJyYXkoc2hhZGVyLmF0dHJpYnV0ZXMuYVZlcnRleFBvc2l0aW9uLmxvY2F0aW9uKTtcbiAgICAgICAgICAgIGdsLmVuYWJsZVZlcnRleEF0dHJpYkFycmF5KHNoYWRlci5hdHRyaWJ1dGVzLmFDb2xvci5sb2NhdGlvbik7XG5cbiAgICAgICAgICAgIC8vIHNldCB0aGUgaW5kZXggYnVmZmVyIVxuICAgICAgICAgICAgZ2wuYmluZEJ1ZmZlcihnbC5FTEVNRU5UX0FSUkFZX0JVRkZFUiwgd2ViR0xEYXRhLmluZGV4QnVmZmVyKTtcbiAgICAgICAgICAgIGdsLmRyYXdFbGVtZW50cyhnbC5UUklBTkdMRV9TVFJJUCwgIHdlYkdMRGF0YS5pbmRpY2VzLmxlbmd0aCwgZ2wuVU5TSUdORURfU0hPUlQsIDAgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJlbmRlcmVyLmRyYXdDb3VudCsrO1xuICAgIH1cbn07XG5cbi8qKlxuICogVXBkYXRlcyB0aGUgZ3JhcGhpY3Mgb2JqZWN0XG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSBncmFwaGljcyB7UElYSS5HcmFwaGljc30gVGhlIGdyYXBoaWNzIG9iamVjdCB0byB1cGRhdGVcbiAqL1xuR3JhcGhpY3NSZW5kZXJlci5wcm90b3R5cGUudXBkYXRlR3JhcGhpY3MgPSBmdW5jdGlvbihncmFwaGljcylcbntcbiAgICB2YXIgZ2wgPSB0aGlzLnJlbmRlcmVyLmdsO1xuXG4gICAgIC8vIGdldCB0aGUgY29udGV4dHMgZ3JhcGhpY3Mgb2JqZWN0XG4gICAgdmFyIHdlYkdMID0gZ3JhcGhpY3MuX3dlYkdMW2dsLmlkXTtcblxuICAgIC8vIGlmIHRoZSBncmFwaGljcyBvYmplY3QgZG9lcyBub3QgZXhpc3QgaW4gdGhlIHdlYkdMIGNvbnRleHQgdGltZSB0byBjcmVhdGUgaXQhXG4gICAgaWYgKCF3ZWJHTClcbiAgICB7XG4gICAgICAgIHdlYkdMID0gZ3JhcGhpY3MuX3dlYkdMW2dsLmlkXSA9IHtsYXN0SW5kZXg6MCwgZGF0YTpbXSwgZ2w6Z2x9O1xuICAgIH1cblxuICAgXG4gICAgLy8gZmxhZyB0aGUgZ3JhcGhpY3MgYXMgbm90IGRpcnR5IGFzIHdlIGFyZSBhYm91dCB0byB1cGRhdGUgaXQuLi5cbiAgICBncmFwaGljcy5kaXJ0eSA9IGZhbHNlO1xuXG4gICAgdmFyIGk7XG5cbiAgICAvLyBpZiB0aGUgdXNlciBjbGVhcmVkIHRoZSBncmFwaGljcyBvYmplY3Qgd2Ugd2lsbCBuZWVkIHRvIGNsZWFyIGV2ZXJ5IG9iamVjdFxuICAgIGlmIChncmFwaGljcy5jbGVhckRpcnR5KVxuICAgIHtcbiAgICAgICAgZ3JhcGhpY3MuY2xlYXJEaXJ0eSA9IGZhbHNlO1xuXG4gICAgICAgIC8vIGxvb3AgdGhyb3VnaCBhbmQgcmV0dXJuIGFsbCB0aGUgd2ViR0xEYXRhcyB0byB0aGUgb2JqZWN0IHBvb2wgc28gdGhhbiBjYW4gYmUgcmV1c2VkIGxhdGVyIG9uXG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCB3ZWJHTC5kYXRhLmxlbmd0aDsgaSsrKVxuICAgICAgICB7XG4gICAgICAgICAgICB2YXIgZ3JhcGhpY3NEYXRhID0gd2ViR0wuZGF0YVtpXTtcbiAgICAgICAgICAgIGdyYXBoaWNzRGF0YS5yZXNldCgpO1xuICAgICAgICAgICAgdGhpcy5ncmFwaGljc0RhdGFQb29sLnB1c2goIGdyYXBoaWNzRGF0YSApO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gY2xlYXIgdGhlIGFycmF5IGFuZCByZXNldCB0aGUgaW5kZXguLlxuICAgICAgICB3ZWJHTC5kYXRhID0gW107XG4gICAgICAgIHdlYkdMLmxhc3RJbmRleCA9IDA7XG4gICAgfVxuXG4gICAgdmFyIHdlYkdMRGF0YTtcblxuICAgIC8vIGxvb3AgdGhyb3VnaCB0aGUgZ3JhcGhpY3MgZGF0YXMgYW5kIGNvbnN0cnVjdCBlYWNoIG9uZS4uXG4gICAgLy8gaWYgdGhlIG9iamVjdCBpcyBhIGNvbXBsZXggZmlsbCB0aGVuIHRoZSBuZXcgc3RlbmNpbCBidWZmZXIgdGVjaG5pcXVlIHdpbGwgYmUgdXNlZFxuICAgIC8vIG90aGVyIHdpc2UgZ3JhcGhpY3Mgb2JqZWN0cyB3aWxsIGJlIHB1c2hlZCBpbnRvIGEgYmF0Y2guLlxuICAgIGZvciAoaSA9IHdlYkdMLmxhc3RJbmRleDsgaSA8IGdyYXBoaWNzLmdyYXBoaWNzRGF0YS5sZW5ndGg7IGkrKylcbiAgICB7XG4gICAgICAgIHZhciBkYXRhID0gZ3JhcGhpY3MuZ3JhcGhpY3NEYXRhW2ldO1xuXG4gICAgICAgIGlmIChkYXRhLnR5cGUgPT09IENPTlNULlNIQVBFUy5QT0xZKVxuICAgICAgICB7XG4gICAgICAgICAgICAvLyBuZWVkIHRvIGFkZCB0aGUgcG9pbnRzIHRoZSB0aGUgZ3JhcGhpY3Mgb2JqZWN0Li5cbiAgICAgICAgICAgIGRhdGEucG9pbnRzID0gZGF0YS5zaGFwZS5wb2ludHMuc2xpY2UoKTtcbiAgICAgICAgICAgIGlmIChkYXRhLnNoYXBlLmNsb3NlZClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAvLyBjbG9zZSB0aGUgcG9seSBpZiB0aGUgdmFsdWUgaXMgdHJ1ZSFcbiAgICAgICAgICAgICAgICBpZiAoZGF0YS5wb2ludHNbMF0gIT09IGRhdGEucG9pbnRzW2RhdGEucG9pbnRzLmxlbmd0aC0yXSB8fCBkYXRhLnBvaW50c1sxXSAhPT0gZGF0YS5wb2ludHNbZGF0YS5wb2ludHMubGVuZ3RoLTFdKVxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgZGF0YS5wb2ludHMucHVzaChkYXRhLnBvaW50c1swXSwgZGF0YS5wb2ludHNbMV0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gTUFLRSBTVVJFIFdFIEhBVkUgVEhFIENPUlJFQ1QgVFlQRS4uXG4gICAgICAgICAgICBpZiAoZGF0YS5maWxsKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGlmIChkYXRhLnBvaW50cy5sZW5ndGggPj0gNilcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChkYXRhLnBvaW50cy5sZW5ndGggPCB0aGlzLm1heGltdW1TaW1wbGVQb2x5U2l6ZSAqIDIpXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHdlYkdMRGF0YSA9IHRoaXMuc3dpdGNoTW9kZSh3ZWJHTCwgMCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjYW5EcmF3VXNpbmdTaW1wbGUgPSBidWlsZFBvbHkoZGF0YSwgd2ViR0xEYXRhKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFjYW5EcmF3VXNpbmdTaW1wbGUpXG4gICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd2ViR0xEYXRhID0gdGhpcy5zd2l0Y2hNb2RlKHdlYkdMLCAxKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWlsZENvbXBsZXhQb2x5KGRhdGEsIHdlYkdMRGF0YSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHdlYkdMRGF0YSA9IHRoaXMuc3dpdGNoTW9kZSh3ZWJHTCwgMSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBidWlsZENvbXBsZXhQb2x5KGRhdGEsIHdlYkdMRGF0YSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChkYXRhLmxpbmVXaWR0aCA+IDApXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgd2ViR0xEYXRhID0gdGhpcy5zd2l0Y2hNb2RlKHdlYkdMLCAwKTtcbiAgICAgICAgICAgICAgICBidWlsZExpbmUoZGF0YSwgd2ViR0xEYXRhKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgIHtcbiAgICAgICAgICAgIHdlYkdMRGF0YSA9IHRoaXMuc3dpdGNoTW9kZSh3ZWJHTCwgMCk7XG5cbiAgICAgICAgICAgIGlmIChkYXRhLnR5cGUgPT09IENPTlNULlNIQVBFUy5SRUNUKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGJ1aWxkUmVjdGFuZ2xlKGRhdGEsIHdlYkdMRGF0YSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChkYXRhLnR5cGUgPT09IENPTlNULlNIQVBFUy5DSVJDIHx8IGRhdGEudHlwZSA9PT0gQ09OU1QuU0hBUEVTLkVMSVApXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgYnVpbGRDaXJjbGUoZGF0YSwgd2ViR0xEYXRhKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGRhdGEudHlwZSA9PT0gQ09OU1QuU0hBUEVTLlJSRUMpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgYnVpbGRSb3VuZGVkUmVjdGFuZ2xlKGRhdGEsIHdlYkdMRGF0YSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICB3ZWJHTC5sYXN0SW5kZXgrKztcbiAgICB9XG5cbiAgICAvLyB1cGxvYWQgYWxsIHRoZSBkaXJ0eSBkYXRhLi4uXG4gICAgZm9yIChpID0gMDsgaSA8IHdlYkdMLmRhdGEubGVuZ3RoOyBpKyspXG4gICAge1xuICAgICAgICB3ZWJHTERhdGEgPSB3ZWJHTC5kYXRhW2ldO1xuXG4gICAgICAgIGlmICh3ZWJHTERhdGEuZGlydHkpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHdlYkdMRGF0YS51cGxvYWQoKTtcbiAgICAgICAgfVxuICAgIH1cbn07XG5cbi8qKlxuICpcbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHdlYkdMIHtXZWJHTFJlbmRlcmluZ0NvbnRleHR9IHRoZSBjdXJyZW50IFdlYkdMIGRyYXdpbmcgY29udGV4dFxuICogQHBhcmFtIHR5cGUge251bWJlcn0gVE9ETyBAQWx2aW5cbiAqL1xuR3JhcGhpY3NSZW5kZXJlci5wcm90b3R5cGUuc3dpdGNoTW9kZSA9IGZ1bmN0aW9uICh3ZWJHTCwgdHlwZSlcbntcbiAgICB2YXIgd2ViR0xEYXRhO1xuXG4gICAgaWYgKCF3ZWJHTC5kYXRhLmxlbmd0aClcbiAgICB7XG4gICAgICAgIHdlYkdMRGF0YSA9IHRoaXMuZ3JhcGhpY3NEYXRhUG9vbC5wb3AoKSB8fCBuZXcgV2ViR0xHcmFwaGljc0RhdGEod2ViR0wuZ2wpO1xuICAgICAgICB3ZWJHTERhdGEubW9kZSA9IHR5cGU7XG4gICAgICAgIHdlYkdMLmRhdGEucHVzaCh3ZWJHTERhdGEpO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICB3ZWJHTERhdGEgPSB3ZWJHTC5kYXRhW3dlYkdMLmRhdGEubGVuZ3RoLTFdO1xuXG4gICAgICAgIGlmICgod2ViR0xEYXRhLnBvaW50cy5sZW5ndGggPiAzMjAwMDApIHx8IHdlYkdMRGF0YS5tb2RlICE9PSB0eXBlIHx8IHR5cGUgPT09IDEpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHdlYkdMRGF0YSA9IHRoaXMuZ3JhcGhpY3NEYXRhUG9vbC5wb3AoKSB8fCBuZXcgV2ViR0xHcmFwaGljc0RhdGEod2ViR0wuZ2wpO1xuICAgICAgICAgICAgd2ViR0xEYXRhLm1vZGUgPSB0eXBlO1xuICAgICAgICAgICAgd2ViR0wuZGF0YS5wdXNoKHdlYkdMRGF0YSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB3ZWJHTERhdGEuZGlydHkgPSB0cnVlO1xuXG4gICAgcmV0dXJuIHdlYkdMRGF0YTtcbn07XG5cbiIsIi8qKlxuICogQW4gb2JqZWN0IGNvbnRhaW5pbmcgV2ViR0wgc3BlY2lmaWMgcHJvcGVydGllcyB0byBiZSB1c2VkIGJ5IHRoZSBXZWJHTCByZW5kZXJlclxuICpcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqIEBwYXJhbSBnbCB7V2ViR0xSZW5kZXJpbmdDb250ZXh0fSB0aGUgY3VycmVudCBXZWJHTCBkcmF3aW5nIGNvbnRleHRcbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIFdlYkdMR3JhcGhpY3NEYXRhKGdsKSB7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgY3VycmVudCBXZWJHTCBkcmF3aW5nIGNvbnRleHRcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1dlYkdMUmVuZGVyaW5nQ29udGV4dH1cbiAgICAgKi9cbiAgICB0aGlzLmdsID0gZ2w7XG5cbiAgICAvL1RPRE8gZG9lcyB0aGlzIG5lZWQgdG8gYmUgc3BsaXQgYmVmb3JlIHVwbG9kaW5nPz9cbiAgICAvKipcbiAgICAgKiBBbiBhcnJheSBvZiBjb2xvciBjb21wb25lbnRzIChyLGcsYilcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJbXX1cbiAgICAgKi9cbiAgICB0aGlzLmNvbG9yID0gWzAsMCwwXTsgLy8gY29sb3Igc3BsaXQhXG5cbiAgICAvKipcbiAgICAgKiBBbiBhcnJheSBvZiBwb2ludHMgdG8gZHJhd1xuICAgICAqIEBtZW1iZXIge1BJWEkuUG9pbnRbXX1cbiAgICAgKi9cbiAgICB0aGlzLnBvaW50cyA9IFtdO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGluZGljZXMgb2YgdGhlIHZlcnRpY2VzXG4gICAgICogQG1lbWJlciB7bnVtYmVyW119XG4gICAgICovXG4gICAgdGhpcy5pbmRpY2VzID0gW107XG4gICAgLyoqXG4gICAgICogVGhlIG1haW4gYnVmZmVyXG4gICAgICogQG1lbWJlciB7V2ViR0xCdWZmZXJ9XG4gICAgICovXG4gICAgdGhpcy5idWZmZXIgPSBnbC5jcmVhdGVCdWZmZXIoKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBpbmRleCBidWZmZXJcbiAgICAgKiBAbWVtYmVyIHtXZWJHTEJ1ZmZlcn1cbiAgICAgKi9cbiAgICB0aGlzLmluZGV4QnVmZmVyID0gZ2wuY3JlYXRlQnVmZmVyKCk7XG5cbiAgICAvKipcbiAgICAgKiB0b2RvIEBhbHZpblxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLm1vZGUgPSAxO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGFscGhhIG9mIHRoZSBncmFwaGljc1xuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLmFscGhhID0gMTtcblxuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgdGhpcyBncmFwaGljcyBpcyBkaXJ0eSBvciBub3RcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqL1xuICAgIHRoaXMuZGlydHkgPSB0cnVlO1xuXG4gICAgdGhpcy5nbFBvaW50cyA9IG51bGw7XG4gICAgdGhpcy5nbEluZGljZXMgPSBudWxsO1xufVxuXG5XZWJHTEdyYXBoaWNzRGF0YS5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBXZWJHTEdyYXBoaWNzRGF0YTtcbm1vZHVsZS5leHBvcnRzID0gV2ViR0xHcmFwaGljc0RhdGE7XG5cbi8qKlxuICogUmVzZXRzIHRoZSB2ZXJ0aWNlcyBhbmQgdGhlIGluZGljZXNcbiAqL1xuV2ViR0xHcmFwaGljc0RhdGEucHJvdG90eXBlLnJlc2V0ID0gZnVuY3Rpb24gKCkge1xuICAgIHRoaXMucG9pbnRzLmxlbmd0aCA9IDA7XG4gICAgdGhpcy5pbmRpY2VzLmxlbmd0aCA9IDA7XG59O1xuXG4vKipcbiAqIEJpbmRzIHRoZSBidWZmZXJzIGFuZCB1cGxvYWRzIHRoZSBkYXRhXG4gKi9cbldlYkdMR3JhcGhpY3NEYXRhLnByb3RvdHlwZS51cGxvYWQgPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGdsID0gdGhpcy5nbDtcblxuLy8gICAgdGhpcy5sYXN0SW5kZXggPSBncmFwaGljcy5ncmFwaGljc0RhdGEubGVuZ3RoO1xuICAgIHRoaXMuZ2xQb2ludHMgPSBuZXcgRmxvYXQzMkFycmF5KHRoaXMucG9pbnRzKTtcblxuICAgIGdsLmJpbmRCdWZmZXIoZ2wuQVJSQVlfQlVGRkVSLCB0aGlzLmJ1ZmZlcik7XG4gICAgZ2wuYnVmZmVyRGF0YShnbC5BUlJBWV9CVUZGRVIsIHRoaXMuZ2xQb2ludHMsIGdsLlNUQVRJQ19EUkFXKTtcblxuICAgIHRoaXMuZ2xJbmRpY2VzID0gbmV3IFVpbnQxNkFycmF5KHRoaXMuaW5kaWNlcyk7XG5cbiAgICBnbC5iaW5kQnVmZmVyKGdsLkVMRU1FTlRfQVJSQVlfQlVGRkVSLCB0aGlzLmluZGV4QnVmZmVyKTtcbiAgICBnbC5idWZmZXJEYXRhKGdsLkVMRU1FTlRfQVJSQVlfQlVGRkVSLCB0aGlzLmdsSW5kaWNlcywgZ2wuU1RBVElDX0RSQVcpO1xuXG4gICAgdGhpcy5kaXJ0eSA9IGZhbHNlO1xufTtcblxuV2ViR0xHcmFwaGljc0RhdGEucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoKSB7XG4gICAgdGhpcy5jb2xvciA9IG51bGw7XG4gICAgdGhpcy5wb2ludHMgPSBudWxsO1xuICAgIHRoaXMuaW5kaWNlcyA9IG51bGw7XG5cbiAgICB0aGlzLmdsLmRlbGV0ZUJ1ZmZlcih0aGlzLmJ1ZmZlcik7XG4gICAgdGhpcy5nbC5kZWxldGVCdWZmZXIodGhpcy5pbmRleEJ1ZmZlcik7XG4gICAgXG4gICAgdGhpcy5nbCA9IG51bGw7XG5cbiAgICB0aGlzLmJ1ZmZlciA9IG51bGw7XG4gICAgdGhpcy5pbmRleEJ1ZmZlciA9IG51bGw7XG5cbiAgICB0aGlzLmdsUG9pbnRzID0gbnVsbDtcbiAgICB0aGlzLmdsSW5kaWNlcyA9IG51bGw7XG59O1xuIiwidmFyIFNoYWRlciA9IHJlcXVpcmUoJ3BpeGktZ2wtY29yZScpLkdMU2hhZGVyO1xuXG4vKipcbiAqIFRoaXMgc2hhZGVyIGlzIHVzZWQgdG8gZHJhdyBzaW1wbGUgcHJpbWl0aXZlIHNoYXBlcyBmb3Ige0BsaW5rIFBJWEkuR3JhcGhpY3N9LlxuICpcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqIEBleHRlbmRzIFBJWEkuU2hhZGVyXG4gKiBAcGFyYW0gc2hhZGVyTWFuYWdlciB7U2hhZGVyTWFuYWdlcn0gVGhlIHdlYmdsIHNoYWRlciBtYW5hZ2VyIHRoaXMgc2hhZGVyIHdvcmtzIGZvci5cbiAqL1xuZnVuY3Rpb24gUHJpbWl0aXZlU2hhZGVyKGdsKVxue1xuICAgIFNoYWRlci5jYWxsKHRoaXMsXG4gICAgICAgIGdsLFxuICAgICAgICAvLyB2ZXJ0ZXggc2hhZGVyXG4gICAgICAgIFtcbiAgICAgICAgICAgICdhdHRyaWJ1dGUgdmVjMiBhVmVydGV4UG9zaXRpb247JyxcbiAgICAgICAgICAgICdhdHRyaWJ1dGUgdmVjNCBhQ29sb3I7JyxcblxuICAgICAgICAgICAgJ3VuaWZvcm0gbWF0MyB0cmFuc2xhdGlvbk1hdHJpeDsnLFxuICAgICAgICAgICAgJ3VuaWZvcm0gbWF0MyBwcm9qZWN0aW9uTWF0cml4OycsXG5cbiAgICAgICAgICAgICd1bmlmb3JtIGZsb2F0IGFscGhhOycsXG4gICAgICAgICAgICAndW5pZm9ybSBmbG9hdCBmbGlwWTsnLFxuICAgICAgICAgICAgJ3VuaWZvcm0gdmVjMyB0aW50OycsXG5cbiAgICAgICAgICAgICd2YXJ5aW5nIHZlYzQgdkNvbG9yOycsXG5cbiAgICAgICAgICAgICd2b2lkIG1haW4odm9pZCl7JyxcbiAgICAgICAgICAgICcgICBnbF9Qb3NpdGlvbiA9IHZlYzQoKHByb2plY3Rpb25NYXRyaXggKiB0cmFuc2xhdGlvbk1hdHJpeCAqIHZlYzMoYVZlcnRleFBvc2l0aW9uLCAxLjApKS54eSwgMC4wLCAxLjApOycsXG4gICAgICAgICAgICAnICAgdkNvbG9yID0gYUNvbG9yICogdmVjNCh0aW50ICogYWxwaGEsIGFscGhhKTsnLFxuICAgICAgICAgICAgJ30nXG4gICAgICAgIF0uam9pbignXFxuJyksXG4gICAgICAgIC8vIGZyYWdtZW50IHNoYWRlclxuICAgICAgICBbXG4gICAgICAgICAgICAncHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7JyxcblxuICAgICAgICAgICAgJ3ZhcnlpbmcgdmVjNCB2Q29sb3I7JyxcblxuICAgICAgICAgICAgJ3ZvaWQgbWFpbih2b2lkKXsnLFxuICAgICAgICAgICAgJyAgIGdsX0ZyYWdDb2xvciA9IHZDb2xvcjsnLFxuICAgICAgICAgICAgJ30nXG4gICAgICAgIF0uam9pbignXFxuJylcbiAgICApO1xufVxuXG5QcmltaXRpdmVTaGFkZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShTaGFkZXIucHJvdG90eXBlKTtcblByaW1pdGl2ZVNoYWRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBQcmltaXRpdmVTaGFkZXI7XG5cbm1vZHVsZS5leHBvcnRzID0gUHJpbWl0aXZlU2hhZGVyO1xuIiwidmFyIGJ1aWxkTGluZSA9IHJlcXVpcmUoJy4vYnVpbGRMaW5lJyksXG4gICAgdXRpbHMgPSByZXF1aXJlKCcuLi8uLi8uLi91dGlscycpO1xuXG4vKipcbiAqIEJ1aWxkcyBhIGNpcmNsZSB0byBkcmF3XG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSBncmFwaGljc0RhdGEge1BJWEkuR3JhcGhpY3N9IFRoZSBncmFwaGljcyBvYmplY3QgdG8gZHJhd1xuICogQHBhcmFtIHdlYkdMRGF0YSB7b2JqZWN0fSBhbiBvYmplY3QgY29udGFpbmluZyBhbGwgdGhlIHdlYkdMLXNwZWNpZmljIGluZm9ybWF0aW9uIHRvIGNyZWF0ZSB0aGlzIHNoYXBlXG4gKi9cbnZhciBidWlsZENpcmNsZSA9IGZ1bmN0aW9uIChncmFwaGljc0RhdGEsIHdlYkdMRGF0YSlcbntcbiAgICAvLyBuZWVkIHRvIGNvbnZlcnQgcG9pbnRzIHRvIGEgbmljZSByZWd1bGFyIGRhdGFcbiAgICB2YXIgY2lyY2xlRGF0YSA9IGdyYXBoaWNzRGF0YS5zaGFwZTtcbiAgICB2YXIgeCA9IGNpcmNsZURhdGEueDtcbiAgICB2YXIgeSA9IGNpcmNsZURhdGEueTtcbiAgICB2YXIgd2lkdGg7XG4gICAgdmFyIGhlaWdodDtcblxuICAgIC8vIFRPRE8gLSBiaXQgaGFja3k/P1xuICAgIGlmIChncmFwaGljc0RhdGEudHlwZSA9PT0gQ09OU1QuU0hBUEVTLkNJUkMpXG4gICAge1xuICAgICAgICB3aWR0aCA9IGNpcmNsZURhdGEucmFkaXVzO1xuICAgICAgICBoZWlnaHQgPSBjaXJjbGVEYXRhLnJhZGl1cztcbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgd2lkdGggPSBjaXJjbGVEYXRhLndpZHRoO1xuICAgICAgICBoZWlnaHQgPSBjaXJjbGVEYXRhLmhlaWdodDtcbiAgICB9XG5cbiAgICB2YXIgdG90YWxTZWdzID0gTWF0aC5mbG9vcigzMCAqIE1hdGguc3FydChjaXJjbGVEYXRhLnJhZGl1cykpIHx8IE1hdGguZmxvb3IoMTUgKiBNYXRoLnNxcnQoY2lyY2xlRGF0YS53aWR0aCArIGNpcmNsZURhdGEuaGVpZ2h0KSk7XG4gICAgdmFyIHNlZyA9IChNYXRoLlBJICogMikgLyB0b3RhbFNlZ3MgO1xuXG4gICAgdmFyIGkgPSAwO1xuXG4gICAgaWYgKGdyYXBoaWNzRGF0YS5maWxsKVxuICAgIHtcbiAgICAgICAgdmFyIGNvbG9yID0gdXRpbHMuaGV4MnJnYihncmFwaGljc0RhdGEuZmlsbENvbG9yKTtcbiAgICAgICAgdmFyIGFscGhhID0gZ3JhcGhpY3NEYXRhLmZpbGxBbHBoYTtcblxuICAgICAgICB2YXIgciA9IGNvbG9yWzBdICogYWxwaGE7XG4gICAgICAgIHZhciBnID0gY29sb3JbMV0gKiBhbHBoYTtcbiAgICAgICAgdmFyIGIgPSBjb2xvclsyXSAqIGFscGhhO1xuXG4gICAgICAgIHZhciB2ZXJ0cyA9IHdlYkdMRGF0YS5wb2ludHM7XG4gICAgICAgIHZhciBpbmRpY2VzID0gd2ViR0xEYXRhLmluZGljZXM7XG5cbiAgICAgICAgdmFyIHZlY1BvcyA9IHZlcnRzLmxlbmd0aC82O1xuXG4gICAgICAgIGluZGljZXMucHVzaCh2ZWNQb3MpO1xuXG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCB0b3RhbFNlZ3MgKyAxIDsgaSsrKVxuICAgICAgICB7XG4gICAgICAgICAgICB2ZXJ0cy5wdXNoKHgseSwgciwgZywgYiwgYWxwaGEpO1xuXG4gICAgICAgICAgICB2ZXJ0cy5wdXNoKHggKyBNYXRoLnNpbihzZWcgKiBpKSAqIHdpZHRoLFxuICAgICAgICAgICAgICAgICAgICAgICB5ICsgTWF0aC5jb3Moc2VnICogaSkgKiBoZWlnaHQsXG4gICAgICAgICAgICAgICAgICAgICAgIHIsIGcsIGIsIGFscGhhKTtcblxuICAgICAgICAgICAgaW5kaWNlcy5wdXNoKHZlY1BvcysrLCB2ZWNQb3MrKyk7XG4gICAgICAgIH1cblxuICAgICAgICBpbmRpY2VzLnB1c2godmVjUG9zLTEpO1xuICAgIH1cblxuICAgIGlmIChncmFwaGljc0RhdGEubGluZVdpZHRoKVxuICAgIHtcbiAgICAgICAgdmFyIHRlbXBQb2ludHMgPSBncmFwaGljc0RhdGEucG9pbnRzO1xuXG4gICAgICAgIGdyYXBoaWNzRGF0YS5wb2ludHMgPSBbXTtcblxuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgdG90YWxTZWdzICsgMTsgaSsrKVxuICAgICAgICB7XG4gICAgICAgICAgICBncmFwaGljc0RhdGEucG9pbnRzLnB1c2goeCArIE1hdGguc2luKHNlZyAqIGkpICogd2lkdGgsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeSArIE1hdGguY29zKHNlZyAqIGkpICogaGVpZ2h0KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGJ1aWxkTGluZShncmFwaGljc0RhdGEsIHdlYkdMRGF0YSk7XG5cbiAgICAgICAgZ3JhcGhpY3NEYXRhLnBvaW50cyA9IHRlbXBQb2ludHM7XG4gICAgfVxufTtcblxuXG5tb2R1bGUuZXhwb3J0cyA9IGJ1aWxkQ2lyY2xlOyIsInZhciBidWlsZExpbmUgPSByZXF1aXJlKCcuL2J1aWxkTGluZScpLFxuICAgIHV0aWxzID0gcmVxdWlyZSgnLi4vLi4vLi4vdXRpbHMnKTtcbiAgICBcblxuXG4vKipcbiAqIEJ1aWxkcyBhIGNvbXBsZXggcG9seWdvbiB0byBkcmF3XG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSBncmFwaGljc0RhdGEge1BJWEkuR3JhcGhpY3N9IFRoZSBncmFwaGljcyBvYmplY3QgY29udGFpbmluZyBhbGwgdGhlIG5lY2Vzc2FyeSBwcm9wZXJ0aWVzXG4gKiBAcGFyYW0gd2ViR0xEYXRhIHtvYmplY3R9IGFuIG9iamVjdCBjb250YWluaW5nIGFsbCB0aGUgd2ViR0wtc3BlY2lmaWMgaW5mb3JtYXRpb24gdG8gY3JlYXRlIHRoaXMgc2hhcGVcbiAqL1xudmFyIGJ1aWxkQ29tcGxleFBvbHkgPSBmdW5jdGlvbiAoZ3JhcGhpY3NEYXRhLCB3ZWJHTERhdGEpXG57XG4gICAgLy9UT0RPIC0gbm8gbmVlZCB0byBjb3B5IHRoaXMgYXMgaXQgZ2V0cyB0dXJuZWQgaW50byBhIEZMb2F0MzJBcnJheSBhbnl3YXlzLi5cbiAgICB2YXIgcG9pbnRzID0gZ3JhcGhpY3NEYXRhLnBvaW50cy5zbGljZSgpO1xuXG4gICAgaWYgKHBvaW50cy5sZW5ndGggPCA2KVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIGdldCBmaXJzdCBhbmQgbGFzdCBwb2ludC4uIGZpZ3VyZSBvdXQgdGhlIG1pZGRsZSFcbiAgICB2YXIgaW5kaWNlcyA9IHdlYkdMRGF0YS5pbmRpY2VzO1xuICAgIHdlYkdMRGF0YS5wb2ludHMgPSBwb2ludHM7XG4gICAgd2ViR0xEYXRhLmFscGhhID0gZ3JhcGhpY3NEYXRhLmZpbGxBbHBoYTtcbiAgICB3ZWJHTERhdGEuY29sb3IgPSB1dGlscy5oZXgycmdiKGdyYXBoaWNzRGF0YS5maWxsQ29sb3IpO1xuXG4gICAgLy8gY2FsY2xhdGUgdGhlIGJvdW5kcy4uXG4gICAgdmFyIG1pblggPSBJbmZpbml0eTtcbiAgICB2YXIgbWF4WCA9IC1JbmZpbml0eTtcblxuICAgIHZhciBtaW5ZID0gSW5maW5pdHk7XG4gICAgdmFyIG1heFkgPSAtSW5maW5pdHk7XG5cbiAgICB2YXIgeCx5O1xuXG4gICAgLy8gZ2V0IHNpemUuLlxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcG9pbnRzLmxlbmd0aDsgaSs9MilcbiAgICB7XG4gICAgICAgIHggPSBwb2ludHNbaV07XG4gICAgICAgIHkgPSBwb2ludHNbaSsxXTtcblxuICAgICAgICBtaW5YID0geCA8IG1pblggPyB4IDogbWluWDtcbiAgICAgICAgbWF4WCA9IHggPiBtYXhYID8geCA6IG1heFg7XG5cbiAgICAgICAgbWluWSA9IHkgPCBtaW5ZID8geSA6IG1pblk7XG4gICAgICAgIG1heFkgPSB5ID4gbWF4WSA/IHkgOiBtYXhZO1xuICAgIH1cblxuICAgIC8vIGFkZCBhIHF1YWQgdG8gdGhlIGVuZCBjb3MgdGhlcmUgaXMgbm8gcG9pbnQgbWFraW5nIGFub3RoZXIgYnVmZmVyIVxuICAgIHBvaW50cy5wdXNoKG1pblgsIG1pblksXG4gICAgICAgICAgICAgICAgbWF4WCwgbWluWSxcbiAgICAgICAgICAgICAgICBtYXhYLCBtYXhZLFxuICAgICAgICAgICAgICAgIG1pblgsIG1heFkpO1xuXG4gICAgLy8gcHVzaCBhIHF1YWQgb250byB0aGUgZW5kLi5cblxuICAgIC8vVE9ETyAtIHRoaXMgYWludCBuZWVkZWQhXG4gICAgdmFyIGxlbmd0aCA9IHBvaW50cy5sZW5ndGggLyAyO1xuICAgIGZvciAoaSA9IDA7IGkgPCBsZW5ndGg7IGkrKylcbiAgICB7XG4gICAgICAgIGluZGljZXMucHVzaCggaSApO1xuICAgIH1cblxufTtcblxuXG5cbm1vZHVsZS5leHBvcnRzID0gYnVpbGRDb21wbGV4UG9seTsiLCJ2YXIgbWF0aCA9IHJlcXVpcmUoJy4uLy4uLy4uL21hdGgnKSxcbiAgICB1dGlscyA9IHJlcXVpcmUoJy4uLy4uLy4uL3V0aWxzJyk7XG5cbi8qKlxuICogQnVpbGRzIGEgbGluZSB0byBkcmF3XG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSBncmFwaGljc0RhdGEge1BJWEkuR3JhcGhpY3N9IFRoZSBncmFwaGljcyBvYmplY3QgY29udGFpbmluZyBhbGwgdGhlIG5lY2Vzc2FyeSBwcm9wZXJ0aWVzXG4gKiBAcGFyYW0gd2ViR0xEYXRhIHtvYmplY3R9IGFuIG9iamVjdCBjb250YWluaW5nIGFsbCB0aGUgd2ViR0wtc3BlY2lmaWMgaW5mb3JtYXRpb24gdG8gY3JlYXRlIHRoaXMgc2hhcGVcbiAqL1xudmFyIGJ1aWxkTGluZSA9IGZ1bmN0aW9uIChncmFwaGljc0RhdGEsIHdlYkdMRGF0YSlcbntcbiAgICAvLyBUT0RPIE9QVElNSVNFIVxuICAgIHZhciBpID0gMDtcbiAgICB2YXIgcG9pbnRzID0gZ3JhcGhpY3NEYXRhLnBvaW50cztcblxuICAgIGlmIChwb2ludHMubGVuZ3RoID09PSAwKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICAvLyBpZiB0aGUgbGluZSB3aWR0aCBpcyBhbiBvZGQgbnVtYmVyIGFkZCAwLjUgdG8gYWxpZ24gdG8gYSB3aG9sZSBwaXhlbFxuICAgIC8vIGNvbW1lbnRpbmcgdGhpcyBvdXQgZml4ZXMgIzcxMSBhbmQgIzE2MjBcbiAgICAvLyBpZiAoZ3JhcGhpY3NEYXRhLmxpbmVXaWR0aCUyKVxuICAgIC8vIHtcbiAgICAvLyAgICAgZm9yIChpID0gMDsgaSA8IHBvaW50cy5sZW5ndGg7IGkrKylcbiAgICAvLyAgICAge1xuICAgIC8vICAgICAgICAgcG9pbnRzW2ldICs9IDAuNTtcbiAgICAvLyAgICAgfVxuICAgIC8vIH1cblxuICAgIC8vIGdldCBmaXJzdCBhbmQgbGFzdCBwb2ludC4uIGZpZ3VyZSBvdXQgdGhlIG1pZGRsZSFcbiAgICB2YXIgZmlyc3RQb2ludCA9IG5ldyBtYXRoLlBvaW50KHBvaW50c1swXSwgcG9pbnRzWzFdKTtcbiAgICB2YXIgbGFzdFBvaW50ID0gbmV3IG1hdGguUG9pbnQocG9pbnRzW3BvaW50cy5sZW5ndGggLSAyXSwgcG9pbnRzW3BvaW50cy5sZW5ndGggLSAxXSk7XG5cbiAgICAvLyBpZiB0aGUgZmlyc3QgcG9pbnQgaXMgdGhlIGxhc3QgcG9pbnQgLSBnb25uYSBoYXZlIGlzc3VlcyA6KVxuICAgIGlmIChmaXJzdFBvaW50LnggPT09IGxhc3RQb2ludC54ICYmIGZpcnN0UG9pbnQueSA9PT0gbGFzdFBvaW50LnkpXG4gICAge1xuICAgICAgICAvLyBuZWVkIHRvIGNsb25lIGFzIHdlIGFyZSBnb2luZyB0byBzbGlnaHRseSBtb2RpZnkgdGhlIHNoYXBlLi5cbiAgICAgICAgcG9pbnRzID0gcG9pbnRzLnNsaWNlKCk7XG5cbiAgICAgICAgcG9pbnRzLnBvcCgpO1xuICAgICAgICBwb2ludHMucG9wKCk7XG5cbiAgICAgICAgbGFzdFBvaW50ID0gbmV3IG1hdGguUG9pbnQocG9pbnRzW3BvaW50cy5sZW5ndGggLSAyXSwgcG9pbnRzW3BvaW50cy5sZW5ndGggLSAxXSk7XG5cbiAgICAgICAgdmFyIG1pZFBvaW50WCA9IGxhc3RQb2ludC54ICsgKGZpcnN0UG9pbnQueCAtIGxhc3RQb2ludC54KSAqMC41O1xuICAgICAgICB2YXIgbWlkUG9pbnRZID0gbGFzdFBvaW50LnkgKyAoZmlyc3RQb2ludC55IC0gbGFzdFBvaW50LnkpICowLjU7XG5cbiAgICAgICAgcG9pbnRzLnVuc2hpZnQobWlkUG9pbnRYLCBtaWRQb2ludFkpO1xuICAgICAgICBwb2ludHMucHVzaChtaWRQb2ludFgsIG1pZFBvaW50WSk7XG4gICAgfVxuXG4gICAgdmFyIHZlcnRzID0gd2ViR0xEYXRhLnBvaW50cztcbiAgICB2YXIgaW5kaWNlcyA9IHdlYkdMRGF0YS5pbmRpY2VzO1xuICAgIHZhciBsZW5ndGggPSBwb2ludHMubGVuZ3RoIC8gMjtcbiAgICB2YXIgaW5kZXhDb3VudCA9IHBvaW50cy5sZW5ndGg7XG4gICAgdmFyIGluZGV4U3RhcnQgPSB2ZXJ0cy5sZW5ndGgvNjtcblxuICAgIC8vIERSQVcgdGhlIExpbmVcbiAgICB2YXIgd2lkdGggPSBncmFwaGljc0RhdGEubGluZVdpZHRoIC8gMjtcblxuICAgIC8vIHNvcnQgY29sb3JcbiAgICB2YXIgY29sb3IgPSB1dGlscy5oZXgycmdiKGdyYXBoaWNzRGF0YS5saW5lQ29sb3IpO1xuICAgIHZhciBhbHBoYSA9IGdyYXBoaWNzRGF0YS5saW5lQWxwaGE7XG4gICAgdmFyIHIgPSBjb2xvclswXSAqIGFscGhhO1xuICAgIHZhciBnID0gY29sb3JbMV0gKiBhbHBoYTtcbiAgICB2YXIgYiA9IGNvbG9yWzJdICogYWxwaGE7XG5cbiAgICB2YXIgcHgsIHB5LCBwMXgsIHAxeSwgcDJ4LCBwMnksIHAzeCwgcDN5O1xuICAgIHZhciBwZXJweCwgcGVycHksIHBlcnAyeCwgcGVycDJ5LCBwZXJwM3gsIHBlcnAzeTtcbiAgICB2YXIgYTEsIGIxLCBjMSwgYTIsIGIyLCBjMjtcbiAgICB2YXIgZGVub20sIHBkaXN0LCBkaXN0O1xuXG4gICAgcDF4ID0gcG9pbnRzWzBdO1xuICAgIHAxeSA9IHBvaW50c1sxXTtcblxuICAgIHAyeCA9IHBvaW50c1syXTtcbiAgICBwMnkgPSBwb2ludHNbM107XG5cbiAgICBwZXJweCA9IC0ocDF5IC0gcDJ5KTtcbiAgICBwZXJweSA9ICBwMXggLSBwMng7XG5cbiAgICBkaXN0ID0gTWF0aC5zcXJ0KHBlcnB4KnBlcnB4ICsgcGVycHkqcGVycHkpO1xuXG4gICAgcGVycHggLz0gZGlzdDtcbiAgICBwZXJweSAvPSBkaXN0O1xuICAgIHBlcnB4ICo9IHdpZHRoO1xuICAgIHBlcnB5ICo9IHdpZHRoO1xuXG4gICAgLy8gc3RhcnRcbiAgICB2ZXJ0cy5wdXNoKHAxeCAtIHBlcnB4ICwgcDF5IC0gcGVycHksXG4gICAgICAgICAgICAgICAgciwgZywgYiwgYWxwaGEpO1xuXG4gICAgdmVydHMucHVzaChwMXggKyBwZXJweCAsIHAxeSArIHBlcnB5LFxuICAgICAgICAgICAgICAgIHIsIGcsIGIsIGFscGhhKTtcblxuICAgIGZvciAoaSA9IDE7IGkgPCBsZW5ndGgtMTsgaSsrKVxuICAgIHtcbiAgICAgICAgcDF4ID0gcG9pbnRzWyhpLTEpKjJdO1xuICAgICAgICBwMXkgPSBwb2ludHNbKGktMSkqMiArIDFdO1xuXG4gICAgICAgIHAyeCA9IHBvaW50c1soaSkqMl07XG4gICAgICAgIHAyeSA9IHBvaW50c1soaSkqMiArIDFdO1xuXG4gICAgICAgIHAzeCA9IHBvaW50c1soaSsxKSoyXTtcbiAgICAgICAgcDN5ID0gcG9pbnRzWyhpKzEpKjIgKyAxXTtcblxuICAgICAgICBwZXJweCA9IC0ocDF5IC0gcDJ5KTtcbiAgICAgICAgcGVycHkgPSBwMXggLSBwMng7XG5cbiAgICAgICAgZGlzdCA9IE1hdGguc3FydChwZXJweCpwZXJweCArIHBlcnB5KnBlcnB5KTtcbiAgICAgICAgcGVycHggLz0gZGlzdDtcbiAgICAgICAgcGVycHkgLz0gZGlzdDtcbiAgICAgICAgcGVycHggKj0gd2lkdGg7XG4gICAgICAgIHBlcnB5ICo9IHdpZHRoO1xuXG4gICAgICAgIHBlcnAyeCA9IC0ocDJ5IC0gcDN5KTtcbiAgICAgICAgcGVycDJ5ID0gcDJ4IC0gcDN4O1xuXG4gICAgICAgIGRpc3QgPSBNYXRoLnNxcnQocGVycDJ4KnBlcnAyeCArIHBlcnAyeSpwZXJwMnkpO1xuICAgICAgICBwZXJwMnggLz0gZGlzdDtcbiAgICAgICAgcGVycDJ5IC89IGRpc3Q7XG4gICAgICAgIHBlcnAyeCAqPSB3aWR0aDtcbiAgICAgICAgcGVycDJ5ICo9IHdpZHRoO1xuXG4gICAgICAgIGExID0gKC1wZXJweSArIHAxeSkgLSAoLXBlcnB5ICsgcDJ5KTtcbiAgICAgICAgYjEgPSAoLXBlcnB4ICsgcDJ4KSAtICgtcGVycHggKyBwMXgpO1xuICAgICAgICBjMSA9ICgtcGVycHggKyBwMXgpICogKC1wZXJweSArIHAyeSkgLSAoLXBlcnB4ICsgcDJ4KSAqICgtcGVycHkgKyBwMXkpO1xuICAgICAgICBhMiA9ICgtcGVycDJ5ICsgcDN5KSAtICgtcGVycDJ5ICsgcDJ5KTtcbiAgICAgICAgYjIgPSAoLXBlcnAyeCArIHAyeCkgLSAoLXBlcnAyeCArIHAzeCk7XG4gICAgICAgIGMyID0gKC1wZXJwMnggKyBwM3gpICogKC1wZXJwMnkgKyBwMnkpIC0gKC1wZXJwMnggKyBwMngpICogKC1wZXJwMnkgKyBwM3kpO1xuXG4gICAgICAgIGRlbm9tID0gYTEqYjIgLSBhMipiMTtcblxuICAgICAgICBpZiAoTWF0aC5hYnMoZGVub20pIDwgMC4xIClcbiAgICAgICAge1xuXG4gICAgICAgICAgICBkZW5vbSs9MTAuMTtcbiAgICAgICAgICAgIHZlcnRzLnB1c2gocDJ4IC0gcGVycHggLCBwMnkgLSBwZXJweSxcbiAgICAgICAgICAgICAgICByLCBnLCBiLCBhbHBoYSk7XG5cbiAgICAgICAgICAgIHZlcnRzLnB1c2gocDJ4ICsgcGVycHggLCBwMnkgKyBwZXJweSxcbiAgICAgICAgICAgICAgICByLCBnLCBiLCBhbHBoYSk7XG5cbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgcHggPSAoYjEqYzIgLSBiMipjMSkvZGVub207XG4gICAgICAgIHB5ID0gKGEyKmMxIC0gYTEqYzIpL2Rlbm9tO1xuXG5cbiAgICAgICAgcGRpc3QgPSAocHggLXAyeCkgKiAocHggLXAyeCkgKyAocHkgLXAyeSkgKiAocHkgLXAyeSk7XG5cblxuICAgICAgICBpZiAocGRpc3QgPiAxNDAgKiAxNDApXG4gICAgICAgIHtcbiAgICAgICAgICAgIHBlcnAzeCA9IHBlcnB4IC0gcGVycDJ4O1xuICAgICAgICAgICAgcGVycDN5ID0gcGVycHkgLSBwZXJwMnk7XG5cbiAgICAgICAgICAgIGRpc3QgPSBNYXRoLnNxcnQocGVycDN4KnBlcnAzeCArIHBlcnAzeSpwZXJwM3kpO1xuICAgICAgICAgICAgcGVycDN4IC89IGRpc3Q7XG4gICAgICAgICAgICBwZXJwM3kgLz0gZGlzdDtcbiAgICAgICAgICAgIHBlcnAzeCAqPSB3aWR0aDtcbiAgICAgICAgICAgIHBlcnAzeSAqPSB3aWR0aDtcblxuICAgICAgICAgICAgdmVydHMucHVzaChwMnggLSBwZXJwM3gsIHAyeSAtcGVycDN5KTtcbiAgICAgICAgICAgIHZlcnRzLnB1c2gociwgZywgYiwgYWxwaGEpO1xuXG4gICAgICAgICAgICB2ZXJ0cy5wdXNoKHAyeCArIHBlcnAzeCwgcDJ5ICtwZXJwM3kpO1xuICAgICAgICAgICAgdmVydHMucHVzaChyLCBnLCBiLCBhbHBoYSk7XG5cbiAgICAgICAgICAgIHZlcnRzLnB1c2gocDJ4IC0gcGVycDN4LCBwMnkgLXBlcnAzeSk7XG4gICAgICAgICAgICB2ZXJ0cy5wdXNoKHIsIGcsIGIsIGFscGhhKTtcblxuICAgICAgICAgICAgaW5kZXhDb3VudCsrO1xuICAgICAgICB9XG4gICAgICAgIGVsc2VcbiAgICAgICAge1xuXG4gICAgICAgICAgICB2ZXJ0cy5wdXNoKHB4ICwgcHkpO1xuICAgICAgICAgICAgdmVydHMucHVzaChyLCBnLCBiLCBhbHBoYSk7XG5cbiAgICAgICAgICAgIHZlcnRzLnB1c2gocDJ4IC0gKHB4LXAyeCksIHAyeSAtIChweSAtIHAyeSkpO1xuICAgICAgICAgICAgdmVydHMucHVzaChyLCBnLCBiLCBhbHBoYSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwMXggPSBwb2ludHNbKGxlbmd0aC0yKSoyXTtcbiAgICBwMXkgPSBwb2ludHNbKGxlbmd0aC0yKSoyICsgMV07XG5cbiAgICBwMnggPSBwb2ludHNbKGxlbmd0aC0xKSoyXTtcbiAgICBwMnkgPSBwb2ludHNbKGxlbmd0aC0xKSoyICsgMV07XG5cbiAgICBwZXJweCA9IC0ocDF5IC0gcDJ5KTtcbiAgICBwZXJweSA9IHAxeCAtIHAyeDtcblxuICAgIGRpc3QgPSBNYXRoLnNxcnQocGVycHgqcGVycHggKyBwZXJweSpwZXJweSk7XG4gICAgcGVycHggLz0gZGlzdDtcbiAgICBwZXJweSAvPSBkaXN0O1xuICAgIHBlcnB4ICo9IHdpZHRoO1xuICAgIHBlcnB5ICo9IHdpZHRoO1xuXG4gICAgdmVydHMucHVzaChwMnggLSBwZXJweCAsIHAyeSAtIHBlcnB5KTtcbiAgICB2ZXJ0cy5wdXNoKHIsIGcsIGIsIGFscGhhKTtcblxuICAgIHZlcnRzLnB1c2gocDJ4ICsgcGVycHggLCBwMnkgKyBwZXJweSk7XG4gICAgdmVydHMucHVzaChyLCBnLCBiLCBhbHBoYSk7XG5cbiAgICBpbmRpY2VzLnB1c2goaW5kZXhTdGFydCk7XG5cbiAgICBmb3IgKGkgPSAwOyBpIDwgaW5kZXhDb3VudDsgaSsrKVxuICAgIHtcbiAgICAgICAgaW5kaWNlcy5wdXNoKGluZGV4U3RhcnQrKyk7XG4gICAgfVxuXG4gICAgaW5kaWNlcy5wdXNoKGluZGV4U3RhcnQtMSk7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGJ1aWxkTGluZTsiLCJ2YXIgdXRpbHMgPSByZXF1aXJlKCcuLi8uLi8uLi91dGlscycpO1xuXG4vKipcbiAqIEJ1aWxkcyBhIHBvbHlnb24gdG8gZHJhd1xuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0gZ3JhcGhpY3NEYXRhIHtQSVhJLldlYkdMR3JhcGhpY3NEYXRhfSBUaGUgZ3JhcGhpY3Mgb2JqZWN0IGNvbnRhaW5pbmcgYWxsIHRoZSBuZWNlc3NhcnkgcHJvcGVydGllc1xuICogQHBhcmFtIHdlYkdMRGF0YSB7b2JqZWN0fSBhbiBvYmplY3QgY29udGFpbmluZyBhbGwgdGhlIHdlYkdMLXNwZWNpZmljIGluZm9ybWF0aW9uIHRvIGNyZWF0ZSB0aGlzIHNoYXBlXG4gKi9cbnZhciBidWlsZFBvbHkgPSBmdW5jdGlvbiAoZ3JhcGhpY3NEYXRhLCB3ZWJHTERhdGEpXG57XG4gICAgdmFyIHBvaW50cyA9IGdyYXBoaWNzRGF0YS5wb2ludHM7XG5cbiAgICBpZiAocG9pbnRzLmxlbmd0aCA8IDYpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gZ2V0IGZpcnN0IGFuZCBsYXN0IHBvaW50Li4gZmlndXJlIG91dCB0aGUgbWlkZGxlIVxuICAgIHZhciB2ZXJ0cyA9IHdlYkdMRGF0YS5wb2ludHM7XG4gICAgdmFyIGluZGljZXMgPSB3ZWJHTERhdGEuaW5kaWNlcztcblxuICAgIHZhciBsZW5ndGggPSBwb2ludHMubGVuZ3RoIC8gMjtcblxuICAgIC8vIHNvcnQgY29sb3JcbiAgICB2YXIgY29sb3IgPSB1dGlscy5oZXgycmdiKGdyYXBoaWNzRGF0YS5maWxsQ29sb3IpO1xuICAgIHZhciBhbHBoYSA9IGdyYXBoaWNzRGF0YS5maWxsQWxwaGE7XG4gICAgdmFyIHIgPSBjb2xvclswXSAqIGFscGhhO1xuICAgIHZhciBnID0gY29sb3JbMV0gKiBhbHBoYTtcbiAgICB2YXIgYiA9IGNvbG9yWzJdICogYWxwaGE7XG5cbiAgICB2YXIgdHJpYW5nbGVzID0gZWFyY3V0KHBvaW50cywgbnVsbCwgMik7XG5cbiAgICBpZiAoIXRyaWFuZ2xlcykge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgdmFyIHZlcnRQb3MgPSB2ZXJ0cy5sZW5ndGggLyA2O1xuXG4gICAgdmFyIGkgPSAwO1xuXG4gICAgZm9yIChpID0gMDsgaSA8IHRyaWFuZ2xlcy5sZW5ndGg7IGkrPTMpXG4gICAge1xuICAgICAgICBpbmRpY2VzLnB1c2godHJpYW5nbGVzW2ldICsgdmVydFBvcyk7XG4gICAgICAgIGluZGljZXMucHVzaCh0cmlhbmdsZXNbaV0gKyB2ZXJ0UG9zKTtcbiAgICAgICAgaW5kaWNlcy5wdXNoKHRyaWFuZ2xlc1tpKzFdICsgdmVydFBvcyk7XG4gICAgICAgIGluZGljZXMucHVzaCh0cmlhbmdsZXNbaSsyXSArdmVydFBvcyk7XG4gICAgICAgIGluZGljZXMucHVzaCh0cmlhbmdsZXNbaSsyXSArIHZlcnRQb3MpO1xuICAgIH1cblxuICAgIGZvciAoaSA9IDA7IGkgPCBsZW5ndGg7IGkrKylcbiAgICB7XG4gICAgICAgIHZlcnRzLnB1c2gocG9pbnRzW2kgKiAyXSwgcG9pbnRzW2kgKiAyICsgMV0sXG4gICAgICAgICAgICAgICAgICAgciwgZywgYiwgYWxwaGEpO1xuICAgIH1cblxuICAgIHJldHVybiB0cnVlO1xufTtcblxuXG5tb2R1bGUuZXhwb3J0cyA9IGJ1aWxkUG9seTtcbiIsInZhciBidWlsZExpbmUgPSByZXF1aXJlKCcuL2J1aWxkTGluZScpLFxuICAgIHV0aWxzID0gcmVxdWlyZSgnLi4vLi4vLi4vdXRpbHMnKTtcblxuLyoqXG4gKiBCdWlsZHMgYSByZWN0YW5nbGUgdG8gZHJhd1xuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0gZ3JhcGhpY3NEYXRhIHtQSVhJLkdyYXBoaWNzfSBUaGUgZ3JhcGhpY3Mgb2JqZWN0IGNvbnRhaW5pbmcgYWxsIHRoZSBuZWNlc3NhcnkgcHJvcGVydGllc1xuICogQHBhcmFtIHdlYkdMRGF0YSB7b2JqZWN0fSBhbiBvYmplY3QgY29udGFpbmluZyBhbGwgdGhlIHdlYkdMLXNwZWNpZmljIGluZm9ybWF0aW9uIHRvIGNyZWF0ZSB0aGlzIHNoYXBlXG4gKi9cbnZhciBidWlsZFJlY3RhbmdsZSA9IGZ1bmN0aW9uIChncmFwaGljc0RhdGEsIHdlYkdMRGF0YSlcbntcbiAgICAvLyAtLS0gLy9cbiAgICAvLyBuZWVkIHRvIGNvbnZlcnQgcG9pbnRzIHRvIGEgbmljZSByZWd1bGFyIGRhdGFcbiAgICAvL1xuICAgIHZhciByZWN0RGF0YSA9IGdyYXBoaWNzRGF0YS5zaGFwZTtcbiAgICB2YXIgeCA9IHJlY3REYXRhLng7XG4gICAgdmFyIHkgPSByZWN0RGF0YS55O1xuICAgIHZhciB3aWR0aCA9IHJlY3REYXRhLndpZHRoO1xuICAgIHZhciBoZWlnaHQgPSByZWN0RGF0YS5oZWlnaHQ7XG5cbiAgICBpZiAoZ3JhcGhpY3NEYXRhLmZpbGwpXG4gICAge1xuICAgICAgICB2YXIgY29sb3IgPSB1dGlscy5oZXgycmdiKGdyYXBoaWNzRGF0YS5maWxsQ29sb3IpO1xuICAgICAgICB2YXIgYWxwaGEgPSBncmFwaGljc0RhdGEuZmlsbEFscGhhO1xuXG4gICAgICAgIHZhciByID0gY29sb3JbMF0gKiBhbHBoYTtcbiAgICAgICAgdmFyIGcgPSBjb2xvclsxXSAqIGFscGhhO1xuICAgICAgICB2YXIgYiA9IGNvbG9yWzJdICogYWxwaGE7XG5cbiAgICAgICAgdmFyIHZlcnRzID0gd2ViR0xEYXRhLnBvaW50cztcbiAgICAgICAgdmFyIGluZGljZXMgPSB3ZWJHTERhdGEuaW5kaWNlcztcblxuICAgICAgICB2YXIgdmVydFBvcyA9IHZlcnRzLmxlbmd0aC82O1xuXG4gICAgICAgIC8vIHN0YXJ0XG4gICAgICAgIHZlcnRzLnB1c2goeCwgeSk7XG4gICAgICAgIHZlcnRzLnB1c2gociwgZywgYiwgYWxwaGEpO1xuXG4gICAgICAgIHZlcnRzLnB1c2goeCArIHdpZHRoLCB5KTtcbiAgICAgICAgdmVydHMucHVzaChyLCBnLCBiLCBhbHBoYSk7XG5cbiAgICAgICAgdmVydHMucHVzaCh4ICwgeSArIGhlaWdodCk7XG4gICAgICAgIHZlcnRzLnB1c2gociwgZywgYiwgYWxwaGEpO1xuXG4gICAgICAgIHZlcnRzLnB1c2goeCArIHdpZHRoLCB5ICsgaGVpZ2h0KTtcbiAgICAgICAgdmVydHMucHVzaChyLCBnLCBiLCBhbHBoYSk7XG5cbiAgICAgICAgLy8gaW5zZXJ0IDIgZGVhZCB0cmlhbmdsZXMuLlxuICAgICAgICBpbmRpY2VzLnB1c2godmVydFBvcywgdmVydFBvcywgdmVydFBvcysxLCB2ZXJ0UG9zKzIsIHZlcnRQb3MrMywgdmVydFBvcyszKTtcbiAgICB9XG5cbiAgICBpZiAoZ3JhcGhpY3NEYXRhLmxpbmVXaWR0aClcbiAgICB7XG4gICAgICAgIHZhciB0ZW1wUG9pbnRzID0gZ3JhcGhpY3NEYXRhLnBvaW50cztcblxuICAgICAgICBncmFwaGljc0RhdGEucG9pbnRzID0gW3gsIHksXG4gICAgICAgICAgICAgICAgICB4ICsgd2lkdGgsIHksXG4gICAgICAgICAgICAgICAgICB4ICsgd2lkdGgsIHkgKyBoZWlnaHQsXG4gICAgICAgICAgICAgICAgICB4LCB5ICsgaGVpZ2h0LFxuICAgICAgICAgICAgICAgICAgeCwgeV07XG5cblxuICAgICAgICBidWlsZExpbmUoZ3JhcGhpY3NEYXRhLCB3ZWJHTERhdGEpO1xuXG4gICAgICAgIGdyYXBoaWNzRGF0YS5wb2ludHMgPSB0ZW1wUG9pbnRzO1xuICAgIH1cbn07XG5cbm1vZHVsZS5leHBvcnRzID0gYnVpbGRSZWN0YW5nbGU7IiwidmFyIGJ1aWxkTGluZSA9IHJlcXVpcmUoJy4vYnVpbGRMaW5lJyksXG4gICAgdXRpbHMgPSByZXF1aXJlKCcuLi8uLi8uLi91dGlscycpO1xuICAgIFxuLyoqXG4gKiBCdWlsZHMgYSByb3VuZGVkIHJlY3RhbmdsZSB0byBkcmF3XG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSBncmFwaGljc0RhdGEge1BJWEkuR3JhcGhpY3N9IFRoZSBncmFwaGljcyBvYmplY3QgY29udGFpbmluZyBhbGwgdGhlIG5lY2Vzc2FyeSBwcm9wZXJ0aWVzXG4gKiBAcGFyYW0gd2ViR0xEYXRhIHtvYmplY3R9IGFuIG9iamVjdCBjb250YWluaW5nIGFsbCB0aGUgd2ViR0wtc3BlY2lmaWMgaW5mb3JtYXRpb24gdG8gY3JlYXRlIHRoaXMgc2hhcGVcbiAqL1xuYnVpbGRSb3VuZGVkUmVjdGFuZ2xlID0gZnVuY3Rpb24gKGdyYXBoaWNzRGF0YSwgd2ViR0xEYXRhKVxue1xuICAgIHZhciBycmVjdERhdGEgPSBncmFwaGljc0RhdGEuc2hhcGU7XG4gICAgdmFyIHggPSBycmVjdERhdGEueDtcbiAgICB2YXIgeSA9IHJyZWN0RGF0YS55O1xuICAgIHZhciB3aWR0aCA9IHJyZWN0RGF0YS53aWR0aDtcbiAgICB2YXIgaGVpZ2h0ID0gcnJlY3REYXRhLmhlaWdodDtcblxuICAgIHZhciByYWRpdXMgPSBycmVjdERhdGEucmFkaXVzO1xuXG4gICAgdmFyIHJlY1BvaW50cyA9IFtdO1xuICAgIHJlY1BvaW50cy5wdXNoKHgsIHkgKyByYWRpdXMpO1xuICAgIHRoaXMucXVhZHJhdGljQmV6aWVyQ3VydmUoeCwgeSArIGhlaWdodCAtIHJhZGl1cywgeCwgeSArIGhlaWdodCwgeCArIHJhZGl1cywgeSArIGhlaWdodCwgcmVjUG9pbnRzKTtcbiAgICB0aGlzLnF1YWRyYXRpY0JlemllckN1cnZlKHggKyB3aWR0aCAtIHJhZGl1cywgeSArIGhlaWdodCwgeCArIHdpZHRoLCB5ICsgaGVpZ2h0LCB4ICsgd2lkdGgsIHkgKyBoZWlnaHQgLSByYWRpdXMsIHJlY1BvaW50cyk7XG4gICAgdGhpcy5xdWFkcmF0aWNCZXppZXJDdXJ2ZSh4ICsgd2lkdGgsIHkgKyByYWRpdXMsIHggKyB3aWR0aCwgeSwgeCArIHdpZHRoIC0gcmFkaXVzLCB5LCByZWNQb2ludHMpO1xuICAgIHRoaXMucXVhZHJhdGljQmV6aWVyQ3VydmUoeCArIHJhZGl1cywgeSwgeCwgeSwgeCwgeSArIHJhZGl1cyArIDAuMDAwMDAwMDAwMSwgcmVjUG9pbnRzKTtcblxuICAgIC8vIHRoaXMgdGlueSBudW1iZXIgZGVhbHMgd2l0aCB0aGUgaXNzdWUgdGhhdCBvY2N1cnMgd2hlbiBwb2ludHMgb3ZlcmxhcCBhbmQgZWFyY3V0IGZhaWxzIHRvIHRyaWFuZ3VsYXRlIHRoZSBpdGVtLlxuICAgIC8vIFRPRE8gLSBmaXggdGhpcyBwcm9wZXJseSwgdGhpcyBpcyBub3QgdmVyeSBlbGVnYW50Li4gYnV0IGl0IHdvcmtzIGZvciBub3cuXG5cbiAgICBpZiAoZ3JhcGhpY3NEYXRhLmZpbGwpXG4gICAge1xuICAgICAgICB2YXIgY29sb3IgPSB1dGlscy5oZXgycmdiKGdyYXBoaWNzRGF0YS5maWxsQ29sb3IpO1xuICAgICAgICB2YXIgYWxwaGEgPSBncmFwaGljc0RhdGEuZmlsbEFscGhhO1xuXG4gICAgICAgIHZhciByID0gY29sb3JbMF0gKiBhbHBoYTtcbiAgICAgICAgdmFyIGcgPSBjb2xvclsxXSAqIGFscGhhO1xuICAgICAgICB2YXIgYiA9IGNvbG9yWzJdICogYWxwaGE7XG5cbiAgICAgICAgdmFyIHZlcnRzID0gd2ViR0xEYXRhLnBvaW50cztcbiAgICAgICAgdmFyIGluZGljZXMgPSB3ZWJHTERhdGEuaW5kaWNlcztcblxuICAgICAgICB2YXIgdmVjUG9zID0gdmVydHMubGVuZ3RoLzY7XG5cbiAgICAgICAgdmFyIHRyaWFuZ2xlcyA9IGVhcmN1dChyZWNQb2ludHMsIG51bGwsIDIpO1xuXG4gICAgICAgIHZhciBpID0gMDtcbiAgICAgICAgZm9yIChpID0gMDsgaSA8IHRyaWFuZ2xlcy5sZW5ndGg7IGkrPTMpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGluZGljZXMucHVzaCh0cmlhbmdsZXNbaV0gKyB2ZWNQb3MpO1xuICAgICAgICAgICAgaW5kaWNlcy5wdXNoKHRyaWFuZ2xlc1tpXSArIHZlY1Bvcyk7XG4gICAgICAgICAgICBpbmRpY2VzLnB1c2godHJpYW5nbGVzW2krMV0gKyB2ZWNQb3MpO1xuICAgICAgICAgICAgaW5kaWNlcy5wdXNoKHRyaWFuZ2xlc1tpKzJdICsgdmVjUG9zKTtcbiAgICAgICAgICAgIGluZGljZXMucHVzaCh0cmlhbmdsZXNbaSsyXSArIHZlY1Bvcyk7XG4gICAgICAgIH1cblxuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgcmVjUG9pbnRzLmxlbmd0aDsgaSsrKVxuICAgICAgICB7XG4gICAgICAgICAgICB2ZXJ0cy5wdXNoKHJlY1BvaW50c1tpXSwgcmVjUG9pbnRzWysraV0sIHIsIGcsIGIsIGFscGhhKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGlmIChncmFwaGljc0RhdGEubGluZVdpZHRoKVxuICAgIHtcbiAgICAgICAgdmFyIHRlbXBQb2ludHMgPSBncmFwaGljc0RhdGEucG9pbnRzO1xuXG4gICAgICAgIGdyYXBoaWNzRGF0YS5wb2ludHMgPSByZWNQb2ludHM7XG5cbiAgICAgICAgdGhpcy5idWlsZExpbmUoZ3JhcGhpY3NEYXRhLCB3ZWJHTERhdGEpO1xuXG4gICAgICAgIGdyYXBoaWNzRGF0YS5wb2ludHMgPSB0ZW1wUG9pbnRzO1xuICAgIH1cbn07XG5cbi8qKlxuICogQ2FsY3VsYXRlIHRoZSBwb2ludHMgZm9yIGEgcXVhZHJhdGljIGJlemllciBjdXJ2ZS4gKGhlbHBlciBmdW5jdGlvbi4uKVxuICogQmFzZWQgb246IGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vcXVlc3Rpb25zLzc4NTA5Ny9ob3ctZG8taS1pbXBsZW1lbnQtYS1iZXppZXItY3VydmUtaW4tY1xuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0gZnJvbVgge251bWJlcn0gT3JpZ2luIHBvaW50IHhcbiAqIEBwYXJhbSBmcm9tWSB7bnVtYmVyfSBPcmlnaW4gcG9pbnQgeFxuICogQHBhcmFtIGNwWCB7bnVtYmVyfSBDb250cm9sIHBvaW50IHhcbiAqIEBwYXJhbSBjcFkge251bWJlcn0gQ29udHJvbCBwb2ludCB5XG4gKiBAcGFyYW0gdG9YIHtudW1iZXJ9IERlc3RpbmF0aW9uIHBvaW50IHhcbiAqIEBwYXJhbSB0b1kge251bWJlcn0gRGVzdGluYXRpb24gcG9pbnQgeVxuICogQHBhcmFtIFtvdXRdIHtudW1iZXJbXX0gVGhlIG91dHB1dCBhcnJheSB0byBhZGQgcG9pbnRzIGludG8uIElmIG5vdCBwYXNzZWQsIGEgbmV3IGFycmF5IGlzIGNyZWF0ZWQuXG4gKiBAcmV0dXJuIHtudW1iZXJbXX0gYW4gYXJyYXkgb2YgcG9pbnRzXG4gKi9cbnF1YWRyYXRpY0JlemllckN1cnZlID0gZnVuY3Rpb24gKGZyb21YLCBmcm9tWSwgY3BYLCBjcFksIHRvWCwgdG9ZLCBvdXQpXG57XG4gICAgdmFyIHhhLFxuICAgICAgICB5YSxcbiAgICAgICAgeGIsXG4gICAgICAgIHliLFxuICAgICAgICB4LFxuICAgICAgICB5LFxuICAgICAgICBuID0gMjAsXG4gICAgICAgIHBvaW50cyA9IG91dCB8fCBbXTtcblxuICAgIGZ1bmN0aW9uIGdldFB0KG4xICwgbjIsIHBlcmMpIHtcbiAgICAgICAgdmFyIGRpZmYgPSBuMiAtIG4xO1xuXG4gICAgICAgIHJldHVybiBuMSArICggZGlmZiAqIHBlcmMgKTtcbiAgICB9XG5cbiAgICB2YXIgaiA9IDA7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPD0gbjsgaSsrICkge1xuICAgICAgICBqID0gaSAvIG47XG5cbiAgICAgICAgLy8gVGhlIEdyZWVuIExpbmVcbiAgICAgICAgeGEgPSBnZXRQdCggZnJvbVggLCBjcFggLCBqICk7XG4gICAgICAgIHlhID0gZ2V0UHQoIGZyb21ZICwgY3BZICwgaiApO1xuICAgICAgICB4YiA9IGdldFB0KCBjcFggLCB0b1ggLCBqICk7XG4gICAgICAgIHliID0gZ2V0UHQoIGNwWSAsIHRvWSAsIGogKTtcblxuICAgICAgICAvLyBUaGUgQmxhY2sgRG90XG4gICAgICAgIHggPSBnZXRQdCggeGEgLCB4YiAsIGogKTtcbiAgICAgICAgeSA9IGdldFB0KCB5YSAsIHliICwgaiApO1xuXG4gICAgICAgIHBvaW50cy5wdXNoKHgsIHkpO1xuICAgIH1cblxuICAgIHJldHVybiBwb2ludHM7XG59O1xuXG5cbm1vZHVsZS5leHBvcnRzID0gYnVpbGRSb3VuZGVkUmVjdGFuZ2xlOyIsIi8qKlxuICogQGZpbGUgICAgICAgIE1haW4gZXhwb3J0IG9mIHRoZSBQSVhJIGNvcmUgbGlicmFyeVxuICogQGF1dGhvciAgICAgIE1hdCBHcm92ZXMgPG1hdEBnb29kYm95ZGlnaXRhbC5jb20+XG4gKiBAY29weXJpZ2h0ICAgMjAxMy0yMDE1IEdvb2RCb3lEaWdpdGFsXG4gKiBAbGljZW5zZSAgICAge0BsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9waXhpanMvcGl4aS5qcy9ibG9iL21hc3Rlci9MSUNFTlNFfE1JVCBMaWNlbnNlfVxuICovXG5cbi8qKlxuICogQG5hbWVzcGFjZSBQSVhJXG4gKi9cbi8vIGV4cG9ydCBjb3JlIGFuZCBjb25zdC4gV2UgYXNzaWduIGNvcmUgdG8gY29uc3Qgc28gdGhhdCB0aGUgbm9uLXJlZmVyZW5jZSB0eXBlcyBpbiBjb25zdCByZW1haW4gaW4tdGFjdFxudmFyIGNvcmUgPSBtb2R1bGUuZXhwb3J0cyA9IE9iamVjdC5hc3NpZ24ocmVxdWlyZSgnLi9jb25zdCcpLCByZXF1aXJlKCcuL21hdGgnKSwge1xuICAgIC8vIHV0aWxzXG4gICAgdXRpbHM6IHJlcXVpcmUoJy4vdXRpbHMnKSxcbiAgICB0aWNrZXI6IHJlcXVpcmUoJy4vdGlja2VyJyksXG5cbiAgICAvLyBkaXNwbGF5XG4gICAgRGlzcGxheU9iamVjdDogICAgICAgICAgcmVxdWlyZSgnLi9kaXNwbGF5L0Rpc3BsYXlPYmplY3QnKSxcbiAgICBDb250YWluZXI6ICAgICAgICAgICAgICByZXF1aXJlKCcuL2Rpc3BsYXkvQ29udGFpbmVyJyksXG5cbiAgICAvLyBzcHJpdGVzXG4gICAgU3ByaXRlOiAgICAgICAgICAgICAgICAgcmVxdWlyZSgnLi9zcHJpdGVzL1Nwcml0ZScpLFxuICAgIFBhcnRpY2xlQ29udGFpbmVyOiAgICAgIHJlcXVpcmUoJy4vcGFydGljbGVzL1BhcnRpY2xlQ29udGFpbmVyJyksXG4gICAgU3ByaXRlUmVuZGVyZXI6ICAgICAgICAgcmVxdWlyZSgnLi9zcHJpdGVzL3dlYmdsL1Nwcml0ZVJlbmRlcmVyJyksXG4gICAgUGFydGljbGVSZW5kZXJlcjogICAgICAgcmVxdWlyZSgnLi9wYXJ0aWNsZXMvd2ViZ2wvUGFydGljbGVSZW5kZXJlcicpLFxuXG4gICAgLy8gdGV4dFxuICAgIFRleHQ6ICAgICAgICAgICAgICAgICAgIHJlcXVpcmUoJy4vdGV4dC9UZXh0JyksXG5cbiAgICAvLyBwcmltaXRpdmVzXG4gICAgR3JhcGhpY3M6ICAgICAgICAgICAgICAgcmVxdWlyZSgnLi9ncmFwaGljcy9HcmFwaGljcycpLFxuICAgIEdyYXBoaWNzRGF0YTogICAgICAgICAgIHJlcXVpcmUoJy4vZ3JhcGhpY3MvR3JhcGhpY3NEYXRhJyksXG4gICAgR3JhcGhpY3NSZW5kZXJlcjogICAgICAgcmVxdWlyZSgnLi9ncmFwaGljcy93ZWJnbC9HcmFwaGljc1JlbmRlcmVyJyksXG5cbiAgICAvLyB0ZXh0dXJlc1xuICAgIFRleHR1cmU6ICAgICAgICAgICAgICAgIHJlcXVpcmUoJy4vdGV4dHVyZXMvVGV4dHVyZScpLFxuICAgIEJhc2VUZXh0dXJlOiAgICAgICAgICAgIHJlcXVpcmUoJy4vdGV4dHVyZXMvQmFzZVRleHR1cmUnKSxcbiAgICBSZW5kZXJUZXh0dXJlOiAgICAgICAgICByZXF1aXJlKCcuL3RleHR1cmVzL1JlbmRlclRleHR1cmUnKSxcbiAgICBWaWRlb0Jhc2VUZXh0dXJlOiAgICAgICByZXF1aXJlKCcuL3RleHR1cmVzL1ZpZGVvQmFzZVRleHR1cmUnKSxcbiAgICBUZXh0dXJlVXZzOiAgICAgICAgICAgICByZXF1aXJlKCcuL3RleHR1cmVzL1RleHR1cmVVdnMnKSxcblxuICAgIC8vIHJlbmRlcmVycyAtIGNhbnZhc1xuICAgIENhbnZhc1JlbmRlcmVyOiAgICAgICAgIHJlcXVpcmUoJy4vcmVuZGVyZXJzL2NhbnZhcy9DYW52YXNSZW5kZXJlcicpLFxuICAgIENhbnZhc0dyYXBoaWNzOiAgICAgICAgIHJlcXVpcmUoJy4vcmVuZGVyZXJzL2NhbnZhcy91dGlscy9DYW52YXNHcmFwaGljcycpLFxuICAgIENhbnZhc0J1ZmZlcjogICAgICAgICAgIHJlcXVpcmUoJy4vcmVuZGVyZXJzL2NhbnZhcy91dGlscy9DYW52YXNCdWZmZXInKSxcblxuICAgIC8vIHJlbmRlcmVycyAtIHdlYmdsXG4gICAgV2ViR0xSZW5kZXJlcjogICAgICAgICAgcmVxdWlyZSgnLi9yZW5kZXJlcnMvd2ViZ2wvV2ViR0xSZW5kZXJlcicpLFxuICAgIFdlYkdMTWFuYWdlcjogICAgICAgICAgcmVxdWlyZSgnLi9yZW5kZXJlcnMvd2ViZ2wvbWFuYWdlcnMvV2ViR0xNYW5hZ2VyJyksXG4gICAgU2hhZGVyTWFuYWdlcjogICAgICAgICAgcmVxdWlyZSgnLi9yZW5kZXJlcnMvd2ViZ2wvbWFuYWdlcnMvU2hhZGVyTWFuYWdlcicpLFxuICAgIFNoYWRlcjogICAgICAgICAgICAgICAgIHJlcXVpcmUoJy4vcmVuZGVyZXJzL3dlYmdsL3NoYWRlcnMvU2hhZGVyJyksXG4gICAgT2JqZWN0UmVuZGVyZXI6ICAgICAgICAgcmVxdWlyZSgnLi9yZW5kZXJlcnMvd2ViZ2wvdXRpbHMvT2JqZWN0UmVuZGVyZXInKSxcbiAgICBSZW5kZXJUYXJnZXQ6ICAgICAgICAgICByZXF1aXJlKCcuL3JlbmRlcmVycy93ZWJnbC91dGlscy9SZW5kZXJUYXJnZXQnKSxcblxuICAgIC8vIGZpbHRlcnMgLSB3ZWJnbFxuICAgIEFic3RyYWN0RmlsdGVyOiAgICAgICAgIHJlcXVpcmUoJy4vcmVuZGVyZXJzL3dlYmdsL2ZpbHRlcnMvQWJzdHJhY3RGaWx0ZXInKSxcbiAgICBGWEFBRmlsdGVyOiAgICAgICAgICAgICByZXF1aXJlKCcuL3JlbmRlcmVycy93ZWJnbC9maWx0ZXJzL0ZYQUFGaWx0ZXInKSxcbiAgICBTcHJpdGVNYXNrRmlsdGVyOiAgICAgICByZXF1aXJlKCcuL3JlbmRlcmVycy93ZWJnbC9maWx0ZXJzL1Nwcml0ZU1hc2tGaWx0ZXInKSxcblxuICAgIGdsQ29yZTogICAgICAgICAgICAgICAgICAgcmVxdWlyZSgncGl4aS1nbC1jb3JlJyksXG5cbiAgICAvKipcbiAgICAgKiBUaGlzIGhlbHBlciBmdW5jdGlvbiB3aWxsIGF1dG9tYXRpY2FsbHkgZGV0ZWN0IHdoaWNoIHJlbmRlcmVyIHlvdSBzaG91bGQgYmUgdXNpbmcuXG4gICAgICogV2ViR0wgaXMgdGhlIHByZWZlcnJlZCByZW5kZXJlciBhcyBpdCBpcyBhIGxvdCBmYXN0ZXIuIElmIHdlYkdMIGlzIG5vdCBzdXBwb3J0ZWQgYnlcbiAgICAgKiB0aGUgYnJvd3NlciB0aGVuIHRoaXMgZnVuY3Rpb24gd2lsbCByZXR1cm4gYSBjYW52YXMgcmVuZGVyZXJcbiAgICAgKlxuICAgICAqIEBtZW1iZXJvZiBQSVhJXG4gICAgICogQHBhcmFtIHdpZHRoPTgwMCB7bnVtYmVyfSB0aGUgd2lkdGggb2YgdGhlIHJlbmRlcmVycyB2aWV3XG4gICAgICogQHBhcmFtIGhlaWdodD02MDAge251bWJlcn0gdGhlIGhlaWdodCBvZiB0aGUgcmVuZGVyZXJzIHZpZXdcbiAgICAgKiBAcGFyYW0gW29wdGlvbnNdIHtvYmplY3R9IFRoZSBvcHRpb25hbCByZW5kZXJlciBwYXJhbWV0ZXJzXG4gICAgICogQHBhcmFtIFtvcHRpb25zLnZpZXddIHtIVE1MQ2FudmFzRWxlbWVudH0gdGhlIGNhbnZhcyB0byB1c2UgYXMgYSB2aWV3LCBvcHRpb25hbFxuICAgICAqIEBwYXJhbSBbb3B0aW9ucy50cmFuc3BhcmVudD1mYWxzZV0ge2Jvb2xlYW59IElmIHRoZSByZW5kZXIgdmlldyBpcyB0cmFuc3BhcmVudCwgZGVmYXVsdCBmYWxzZVxuICAgICAqIEBwYXJhbSBbb3B0aW9ucy5hbnRpYWxpYXM9ZmFsc2VdIHtib29sZWFufSBzZXRzIGFudGlhbGlhcyAob25seSBhcHBsaWNhYmxlIGluIGNocm9tZSBhdCB0aGUgbW9tZW50KVxuICAgICAqIEBwYXJhbSBbb3B0aW9ucy5wcmVzZXJ2ZURyYXdpbmdCdWZmZXI9ZmFsc2VdIHtib29sZWFufSBlbmFibGVzIGRyYXdpbmcgYnVmZmVyIHByZXNlcnZhdGlvbiwgZW5hYmxlIHRoaXMgaWYgeW91XG4gICAgICogICAgICBuZWVkIHRvIGNhbGwgdG9EYXRhVXJsIG9uIHRoZSB3ZWJnbCBjb250ZXh0XG4gICAgICogQHBhcmFtIFtvcHRpb25zLnJlc29sdXRpb249MV0ge251bWJlcn0gdGhlIHJlc29sdXRpb24gb2YgdGhlIHJlbmRlcmVyLCByZXRpbmEgd291bGQgYmUgMlxuICAgICAqIEBwYXJhbSBbbm9XZWJHTD1mYWxzZV0ge2Jvb2xlYW59IHByZXZlbnRzIHNlbGVjdGlvbiBvZiBXZWJHTCByZW5kZXJlciwgZXZlbiBpZiBzdWNoIGlzIHByZXNlbnRcbiAgICAgKlxuICAgICAqIEByZXR1cm4ge1dlYkdMUmVuZGVyZXJ8Q2FudmFzUmVuZGVyZXJ9IFJldHVybnMgV2ViR0wgcmVuZGVyZXIgaWYgYXZhaWxhYmxlLCBvdGhlcndpc2UgQ2FudmFzUmVuZGVyZXJcbiAgICAgKi9cbiAgICBhdXRvRGV0ZWN0UmVuZGVyZXI6IGZ1bmN0aW9uICh3aWR0aCwgaGVpZ2h0LCBvcHRpb25zLCBub1dlYkdMKVxuICAgIHtcbiAgICAgICAgd2lkdGggPSB3aWR0aCB8fCA4MDA7XG4gICAgICAgIGhlaWdodCA9IGhlaWdodCB8fCA2MDA7XG5cbiAgICAgICAgaWYgKCFub1dlYkdMICYmIGNvcmUudXRpbHMuaXNXZWJHTFN1cHBvcnRlZCgpKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IGNvcmUuV2ViR0xSZW5kZXJlcih3aWR0aCwgaGVpZ2h0LCBvcHRpb25zKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBuZXcgY29yZS5DYW52YXNSZW5kZXJlcih3aWR0aCwgaGVpZ2h0LCBvcHRpb25zKTtcbiAgICB9XG59KTtcbiIsIi8vIEB0b2RvIC0gaWdub3JlIHRoZSB0b28gbWFueSBwYXJhbWV0ZXJzIHdhcm5pbmcgZm9yIG5vd1xuLy8gc2hvdWxkIGVpdGhlciBmaXggaXQgb3IgY2hhbmdlIHRoZSBqc2hpbnQgY29uZmlnXG4vLyBqc2hpbnQgLVcwNzJcblxudmFyIFBvaW50ID0gcmVxdWlyZSgnLi9Qb2ludCcpO1xuXG4vKipcbiAqIFRoZSBwaXhpIE1hdHJpeCBjbGFzcyBhcyBhbiBvYmplY3QsIHdoaWNoIG1ha2VzIGl0IGEgbG90IGZhc3RlcixcbiAqIGhlcmUgaXMgYSByZXByZXNlbnRhdGlvbiBvZiBpdCA6XG4gKiB8IGEgfCBiIHwgdHh8XG4gKiB8IGMgfCBkIHwgdHl8XG4gKiB8IDAgfCAwIHwgMSB8XG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICovXG5mdW5jdGlvbiBNYXRyaXgoKVxue1xuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAxXG4gICAgICovXG4gICAgdGhpcy5hID0gMTtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAwXG4gICAgICovXG4gICAgdGhpcy5iID0gMDtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAwXG4gICAgICovXG4gICAgdGhpcy5jID0gMDtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAxXG4gICAgICovXG4gICAgdGhpcy5kID0gMTtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAwXG4gICAgICovXG4gICAgdGhpcy50eCA9IDA7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMFxuICAgICAqL1xuICAgIHRoaXMudHkgPSAwO1xufVxuXG5NYXRyaXgucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gTWF0cml4O1xubW9kdWxlLmV4cG9ydHMgPSBNYXRyaXg7XG5cbi8qKlxuICogQ3JlYXRlcyBhIE1hdHJpeCBvYmplY3QgYmFzZWQgb24gdGhlIGdpdmVuIGFycmF5LiBUaGUgRWxlbWVudCB0byBNYXRyaXggbWFwcGluZyBvcmRlciBpcyBhcyBmb2xsb3dzOlxuICpcbiAqIGEgPSBhcnJheVswXVxuICogYiA9IGFycmF5WzFdXG4gKiBjID0gYXJyYXlbM11cbiAqIGQgPSBhcnJheVs0XVxuICogdHggPSBhcnJheVsyXVxuICogdHkgPSBhcnJheVs1XVxuICpcbiAqIEBwYXJhbSBhcnJheSB7bnVtYmVyW119IFRoZSBhcnJheSB0aGF0IHRoZSBtYXRyaXggd2lsbCBiZSBwb3B1bGF0ZWQgZnJvbS5cbiAqL1xuTWF0cml4LnByb3RvdHlwZS5mcm9tQXJyYXkgPSBmdW5jdGlvbiAoYXJyYXkpXG57XG4gICAgdGhpcy5hID0gYXJyYXlbMF07XG4gICAgdGhpcy5iID0gYXJyYXlbMV07XG4gICAgdGhpcy5jID0gYXJyYXlbM107XG4gICAgdGhpcy5kID0gYXJyYXlbNF07XG4gICAgdGhpcy50eCA9IGFycmF5WzJdO1xuICAgIHRoaXMudHkgPSBhcnJheVs1XTtcbn07XG5cblxuLyoqXG4gKiBzZXRzIHRoZSBtYXRyaXggcHJvcGVydGllc1xuICpcbiAqIEBwYXJhbSB7bnVtYmVyfSBhXG4gKiBAcGFyYW0ge251bWJlcn0gYlxuICogQHBhcmFtIHtudW1iZXJ9IGNcbiAqIEBwYXJhbSB7bnVtYmVyfSBkXG4gKiBAcGFyYW0ge251bWJlcn0gdHhcbiAqIEBwYXJhbSB7bnVtYmVyfSB0eVxuICpcbiAqIEByZXR1cm4ge1BJWEkuTWF0cml4fSBUaGlzIG1hdHJpeC4gR29vZCBmb3IgY2hhaW5pbmcgbWV0aG9kIGNhbGxzLlxuICovXG5NYXRyaXgucHJvdG90eXBlLnNldCA9IGZ1bmN0aW9uIChhLCBiLCBjLCBkLCB0eCwgdHkpXG57XG4gICAgdGhpcy5hID0gYTtcbiAgICB0aGlzLmIgPSBiO1xuICAgIHRoaXMuYyA9IGM7XG4gICAgdGhpcy5kID0gZDtcbiAgICB0aGlzLnR4ID0gdHg7XG4gICAgdGhpcy50eSA9IHR5O1xuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG5cbi8qKlxuICogQ3JlYXRlcyBhbiBhcnJheSBmcm9tIHRoZSBjdXJyZW50IE1hdHJpeCBvYmplY3QuXG4gKlxuICogQHBhcmFtIHRyYW5zcG9zZSB7Ym9vbGVhbn0gV2hldGhlciB3ZSBuZWVkIHRvIHRyYW5zcG9zZSB0aGUgbWF0cml4IG9yIG5vdFxuICogQHBhcmFtIFtvdXRdIHtBcnJheX0gSWYgcHJvdmlkZWQgdGhlIGFycmF5IHdpbGwgYmUgYXNzaWduZWQgdG8gb3V0XG4gKiBAcmV0dXJuIHtudW1iZXJbXX0gdGhlIG5ld2x5IGNyZWF0ZWQgYXJyYXkgd2hpY2ggY29udGFpbnMgdGhlIG1hdHJpeFxuICovXG5NYXRyaXgucHJvdG90eXBlLnRvQXJyYXkgPSBmdW5jdGlvbiAodHJhbnNwb3NlLCBvdXQpXG57XG4gICAgaWYgKCF0aGlzLmFycmF5KVxuICAgIHtcbiAgICAgICAgdGhpcy5hcnJheSA9IG5ldyBGbG9hdDMyQXJyYXkoOSk7XG4gICAgfVxuXG4gICAgdmFyIGFycmF5ID0gb3V0IHx8IHRoaXMuYXJyYXk7XG5cbiAgICBpZiAodHJhbnNwb3NlKVxuICAgIHtcbiAgICAgICAgYXJyYXlbMF0gPSB0aGlzLmE7XG4gICAgICAgIGFycmF5WzFdID0gdGhpcy5iO1xuICAgICAgICBhcnJheVsyXSA9IDA7XG4gICAgICAgIGFycmF5WzNdID0gdGhpcy5jO1xuICAgICAgICBhcnJheVs0XSA9IHRoaXMuZDtcbiAgICAgICAgYXJyYXlbNV0gPSAwO1xuICAgICAgICBhcnJheVs2XSA9IHRoaXMudHg7XG4gICAgICAgIGFycmF5WzddID0gdGhpcy50eTtcbiAgICAgICAgYXJyYXlbOF0gPSAxO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICBhcnJheVswXSA9IHRoaXMuYTtcbiAgICAgICAgYXJyYXlbMV0gPSB0aGlzLmM7XG4gICAgICAgIGFycmF5WzJdID0gdGhpcy50eDtcbiAgICAgICAgYXJyYXlbM10gPSB0aGlzLmI7XG4gICAgICAgIGFycmF5WzRdID0gdGhpcy5kO1xuICAgICAgICBhcnJheVs1XSA9IHRoaXMudHk7XG4gICAgICAgIGFycmF5WzZdID0gMDtcbiAgICAgICAgYXJyYXlbN10gPSAwO1xuICAgICAgICBhcnJheVs4XSA9IDE7XG4gICAgfVxuXG4gICAgcmV0dXJuIGFycmF5O1xufTtcblxuLyoqXG4gKiBHZXQgYSBuZXcgcG9zaXRpb24gd2l0aCB0aGUgY3VycmVudCB0cmFuc2Zvcm1hdGlvbiBhcHBsaWVkLlxuICogQ2FuIGJlIHVzZWQgdG8gZ28gZnJvbSBhIGNoaWxkJ3MgY29vcmRpbmF0ZSBzcGFjZSB0byB0aGUgd29ybGQgY29vcmRpbmF0ZSBzcGFjZS4gKGUuZy4gcmVuZGVyaW5nKVxuICpcbiAqIEBwYXJhbSBwb3Mge1BJWEkuUG9pbnR9IFRoZSBvcmlnaW5cbiAqIEBwYXJhbSBbbmV3UG9zXSB7UElYSS5Qb2ludH0gVGhlIHBvaW50IHRoYXQgdGhlIG5ldyBwb3NpdGlvbiBpcyBhc3NpZ25lZCB0byAoYWxsb3dlZCB0byBiZSBzYW1lIGFzIGlucHV0KVxuICogQHJldHVybiB7UElYSS5Qb2ludH0gVGhlIG5ldyBwb2ludCwgdHJhbnNmb3JtZWQgdGhyb3VnaCB0aGlzIG1hdHJpeFxuICovXG5NYXRyaXgucHJvdG90eXBlLmFwcGx5ID0gZnVuY3Rpb24gKHBvcywgbmV3UG9zKVxue1xuICAgIG5ld1BvcyA9IG5ld1BvcyB8fCBuZXcgUG9pbnQoKTtcblxuICAgIHZhciB4ID0gcG9zLng7XG4gICAgdmFyIHkgPSBwb3MueTtcblxuICAgIG5ld1Bvcy54ID0gdGhpcy5hICogeCArIHRoaXMuYyAqIHkgKyB0aGlzLnR4O1xuICAgIG5ld1Bvcy55ID0gdGhpcy5iICogeCArIHRoaXMuZCAqIHkgKyB0aGlzLnR5O1xuXG4gICAgcmV0dXJuIG5ld1Bvcztcbn07XG5cbi8qKlxuICogR2V0IGEgbmV3IHBvc2l0aW9uIHdpdGggdGhlIGludmVyc2Ugb2YgdGhlIGN1cnJlbnQgdHJhbnNmb3JtYXRpb24gYXBwbGllZC5cbiAqIENhbiBiZSB1c2VkIHRvIGdvIGZyb20gdGhlIHdvcmxkIGNvb3JkaW5hdGUgc3BhY2UgdG8gYSBjaGlsZCdzIGNvb3JkaW5hdGUgc3BhY2UuIChlLmcuIGlucHV0KVxuICpcbiAqIEBwYXJhbSBwb3Mge1BJWEkuUG9pbnR9IFRoZSBvcmlnaW5cbiAqIEBwYXJhbSBbbmV3UG9zXSB7UElYSS5Qb2ludH0gVGhlIHBvaW50IHRoYXQgdGhlIG5ldyBwb3NpdGlvbiBpcyBhc3NpZ25lZCB0byAoYWxsb3dlZCB0byBiZSBzYW1lIGFzIGlucHV0KVxuICogQHJldHVybiB7UElYSS5Qb2ludH0gVGhlIG5ldyBwb2ludCwgaW52ZXJzZS10cmFuc2Zvcm1lZCB0aHJvdWdoIHRoaXMgbWF0cml4XG4gKi9cbk1hdHJpeC5wcm90b3R5cGUuYXBwbHlJbnZlcnNlID0gZnVuY3Rpb24gKHBvcywgbmV3UG9zKVxue1xuICAgIG5ld1BvcyA9IG5ld1BvcyB8fCBuZXcgUG9pbnQoKTtcblxuICAgIHZhciBpZCA9IDEgLyAodGhpcy5hICogdGhpcy5kICsgdGhpcy5jICogLXRoaXMuYik7XG5cbiAgICB2YXIgeCA9IHBvcy54O1xuICAgIHZhciB5ID0gcG9zLnk7XG5cbiAgICBuZXdQb3MueCA9IHRoaXMuZCAqIGlkICogeCArIC10aGlzLmMgKiBpZCAqIHkgKyAodGhpcy50eSAqIHRoaXMuYyAtIHRoaXMudHggKiB0aGlzLmQpICogaWQ7XG4gICAgbmV3UG9zLnkgPSB0aGlzLmEgKiBpZCAqIHkgKyAtdGhpcy5iICogaWQgKiB4ICsgKC10aGlzLnR5ICogdGhpcy5hICsgdGhpcy50eCAqIHRoaXMuYikgKiBpZDtcblxuICAgIHJldHVybiBuZXdQb3M7XG59O1xuXG4vKipcbiAqIFRyYW5zbGF0ZXMgdGhlIG1hdHJpeCBvbiB0aGUgeCBhbmQgeS5cbiAqXG4gKiBAcGFyYW0ge251bWJlcn0geFxuICogQHBhcmFtIHtudW1iZXJ9IHlcbiAqIEByZXR1cm4ge1BJWEkuTWF0cml4fSBUaGlzIG1hdHJpeC4gR29vZCBmb3IgY2hhaW5pbmcgbWV0aG9kIGNhbGxzLlxuICovXG5NYXRyaXgucHJvdG90eXBlLnRyYW5zbGF0ZSA9IGZ1bmN0aW9uICh4LCB5KVxue1xuICAgIHRoaXMudHggKz0geDtcbiAgICB0aGlzLnR5ICs9IHk7XG5cbiAgICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogQXBwbGllcyBhIHNjYWxlIHRyYW5zZm9ybWF0aW9uIHRvIHRoZSBtYXRyaXguXG4gKlxuICogQHBhcmFtIHtudW1iZXJ9IHggVGhlIGFtb3VudCB0byBzY2FsZSBob3Jpem9udGFsbHlcbiAqIEBwYXJhbSB7bnVtYmVyfSB5IFRoZSBhbW91bnQgdG8gc2NhbGUgdmVydGljYWxseVxuICogQHJldHVybiB7UElYSS5NYXRyaXh9IFRoaXMgbWF0cml4LiBHb29kIGZvciBjaGFpbmluZyBtZXRob2QgY2FsbHMuXG4gKi9cbk1hdHJpeC5wcm90b3R5cGUuc2NhbGUgPSBmdW5jdGlvbiAoeCwgeSlcbntcbiAgICB0aGlzLmEgKj0geDtcbiAgICB0aGlzLmQgKj0geTtcbiAgICB0aGlzLmMgKj0geDtcbiAgICB0aGlzLmIgKj0geTtcbiAgICB0aGlzLnR4ICo9IHg7XG4gICAgdGhpcy50eSAqPSB5O1xuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG5cbi8qKlxuICogQXBwbGllcyBhIHJvdGF0aW9uIHRyYW5zZm9ybWF0aW9uIHRvIHRoZSBtYXRyaXguXG4gKlxuICogQHBhcmFtIHtudW1iZXJ9IGFuZ2xlIC0gVGhlIGFuZ2xlIGluIHJhZGlhbnMuXG4gKiBAcmV0dXJuIHtQSVhJLk1hdHJpeH0gVGhpcyBtYXRyaXguIEdvb2QgZm9yIGNoYWluaW5nIG1ldGhvZCBjYWxscy5cbiAqL1xuTWF0cml4LnByb3RvdHlwZS5yb3RhdGUgPSBmdW5jdGlvbiAoYW5nbGUpXG57XG4gICAgdmFyIGNvcyA9IE1hdGguY29zKCBhbmdsZSApO1xuICAgIHZhciBzaW4gPSBNYXRoLnNpbiggYW5nbGUgKTtcblxuICAgIHZhciBhMSA9IHRoaXMuYTtcbiAgICB2YXIgYzEgPSB0aGlzLmM7XG4gICAgdmFyIHR4MSA9IHRoaXMudHg7XG5cbiAgICB0aGlzLmEgPSBhMSAqIGNvcy10aGlzLmIgKiBzaW47XG4gICAgdGhpcy5iID0gYTEgKiBzaW4rdGhpcy5iICogY29zO1xuICAgIHRoaXMuYyA9IGMxICogY29zLXRoaXMuZCAqIHNpbjtcbiAgICB0aGlzLmQgPSBjMSAqIHNpbit0aGlzLmQgKiBjb3M7XG4gICAgdGhpcy50eCA9IHR4MSAqIGNvcyAtIHRoaXMudHkgKiBzaW47XG4gICAgdGhpcy50eSA9IHR4MSAqIHNpbiArIHRoaXMudHkgKiBjb3M7XG5cbiAgICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogQXBwZW5kcyB0aGUgZ2l2ZW4gTWF0cml4IHRvIHRoaXMgTWF0cml4LlxuICpcbiAqIEBwYXJhbSB7UElYSS5NYXRyaXh9IG1hdHJpeFxuICogQHJldHVybiB7UElYSS5NYXRyaXh9IFRoaXMgbWF0cml4LiBHb29kIGZvciBjaGFpbmluZyBtZXRob2QgY2FsbHMuXG4gKi9cbk1hdHJpeC5wcm90b3R5cGUuYXBwZW5kID0gZnVuY3Rpb24gKG1hdHJpeClcbntcbiAgICB2YXIgYTEgPSB0aGlzLmE7XG4gICAgdmFyIGIxID0gdGhpcy5iO1xuICAgIHZhciBjMSA9IHRoaXMuYztcbiAgICB2YXIgZDEgPSB0aGlzLmQ7XG5cbiAgICB0aGlzLmEgID0gbWF0cml4LmEgKiBhMSArIG1hdHJpeC5iICogYzE7XG4gICAgdGhpcy5iICA9IG1hdHJpeC5hICogYjEgKyBtYXRyaXguYiAqIGQxO1xuICAgIHRoaXMuYyAgPSBtYXRyaXguYyAqIGExICsgbWF0cml4LmQgKiBjMTtcbiAgICB0aGlzLmQgID0gbWF0cml4LmMgKiBiMSArIG1hdHJpeC5kICogZDE7XG5cbiAgICB0aGlzLnR4ID0gbWF0cml4LnR4ICogYTEgKyBtYXRyaXgudHkgKiBjMSArIHRoaXMudHg7XG4gICAgdGhpcy50eSA9IG1hdHJpeC50eCAqIGIxICsgbWF0cml4LnR5ICogZDEgKyB0aGlzLnR5O1xuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIFNldHMgdGhlIG1hdHJpeCBiYXNlZCBvbiBhbGwgdGhlIGF2YWlsYWJsZSBwcm9wZXJ0aWVzXG4gKlxuICogQHBhcmFtIHtudW1iZXJ9IHhcbiAqIEBwYXJhbSB7bnVtYmVyfSB5XG4gKiBAcGFyYW0ge251bWJlcn0gcGl2b3RYXG4gKiBAcGFyYW0ge251bWJlcn0gcGl2b3RZXG4gKiBAcGFyYW0ge251bWJlcn0gc2NhbGVYXG4gKiBAcGFyYW0ge251bWJlcn0gc2NhbGVZXG4gKiBAcGFyYW0ge251bWJlcn0gcm90YXRpb25cbiAqIEBwYXJhbSB7bnVtYmVyfSBza2V3WFxuICogQHBhcmFtIHtudW1iZXJ9IHNrZXdZXG4gKlxuICogQHJldHVybiB7UElYSS5NYXRyaXh9IFRoaXMgbWF0cml4LiBHb29kIGZvciBjaGFpbmluZyBtZXRob2QgY2FsbHMuXG4gKi9cbk1hdHJpeC5wcm90b3R5cGUuc2V0VHJhbnNmb3JtID0gZnVuY3Rpb24gKHgsIHksIHBpdm90WCwgcGl2b3RZLCBzY2FsZVgsIHNjYWxlWSwgcm90YXRpb24sIHNrZXdYLCBza2V3WSlcbntcbiAgICB2YXIgYSwgYiwgYywgZCwgc3IsIGNyLCBjeSwgc3ksIG5zeCwgY3g7XG5cbiAgICBzciAgPSBNYXRoLnNpbihyb3RhdGlvbik7XG4gICAgY3IgID0gTWF0aC5jb3Mocm90YXRpb24pO1xuICAgIGN5ICA9IE1hdGguY29zKHNrZXdZKTtcbiAgICBzeSAgPSBNYXRoLnNpbihza2V3WSk7XG4gICAgbnN4ID0gLU1hdGguc2luKHNrZXdYKTtcbiAgICBjeCAgPSAgTWF0aC5jb3Moc2tld1gpO1xuXG4gICAgYSAgPSAgY3IgKiBzY2FsZVg7XG4gICAgYiAgPSAgc3IgKiBzY2FsZVg7XG4gICAgYyAgPSAtc3IgKiBzY2FsZVk7XG4gICAgZCAgPSAgY3IgKiBzY2FsZVk7XG5cbiAgICB0aGlzLmEgID0gY3kgKiBhICsgc3kgKiBjO1xuICAgIHRoaXMuYiAgPSBjeSAqIGIgKyBzeSAqIGQ7XG4gICAgdGhpcy5jICA9IG5zeCAqIGEgKyBjeCAqIGM7XG4gICAgdGhpcy5kICA9IG5zeCAqIGIgKyBjeCAqIGQ7XG5cbiAgICB0aGlzLnR4ID0geCArICggcGl2b3RYICogYSArIHBpdm90WSAqIGMgKTtcbiAgICB0aGlzLnR5ID0geSArICggcGl2b3RYICogYiArIHBpdm90WSAqIGQgKTtcblxuICAgIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBQcmVwZW5kcyB0aGUgZ2l2ZW4gTWF0cml4IHRvIHRoaXMgTWF0cml4LlxuICpcbiAqIEBwYXJhbSB7UElYSS5NYXRyaXh9IG1hdHJpeFxuICogQHJldHVybiB7UElYSS5NYXRyaXh9IFRoaXMgbWF0cml4LiBHb29kIGZvciBjaGFpbmluZyBtZXRob2QgY2FsbHMuXG4gKi9cbk1hdHJpeC5wcm90b3R5cGUucHJlcGVuZCA9IGZ1bmN0aW9uKG1hdHJpeClcbntcbiAgICB2YXIgdHgxID0gdGhpcy50eDtcblxuICAgIGlmIChtYXRyaXguYSAhPT0gMSB8fCBtYXRyaXguYiAhPT0gMCB8fCBtYXRyaXguYyAhPT0gMCB8fCBtYXRyaXguZCAhPT0gMSlcbiAgICB7XG4gICAgICAgIHZhciBhMSA9IHRoaXMuYTtcbiAgICAgICAgdmFyIGMxID0gdGhpcy5jO1xuICAgICAgICB0aGlzLmEgID0gYTEqbWF0cml4LmErdGhpcy5iKm1hdHJpeC5jO1xuICAgICAgICB0aGlzLmIgID0gYTEqbWF0cml4LmIrdGhpcy5iKm1hdHJpeC5kO1xuICAgICAgICB0aGlzLmMgID0gYzEqbWF0cml4LmErdGhpcy5kKm1hdHJpeC5jO1xuICAgICAgICB0aGlzLmQgID0gYzEqbWF0cml4LmIrdGhpcy5kKm1hdHJpeC5kO1xuICAgIH1cblxuICAgIHRoaXMudHggPSB0eDEqbWF0cml4LmErdGhpcy50eSptYXRyaXguYyttYXRyaXgudHg7XG4gICAgdGhpcy50eSA9IHR4MSptYXRyaXguYit0aGlzLnR5Km1hdHJpeC5kK21hdHJpeC50eTtcblxuICAgIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBJbnZlcnRzIHRoaXMgbWF0cml4XG4gKlxuICogQHJldHVybiB7UElYSS5NYXRyaXh9IFRoaXMgbWF0cml4LiBHb29kIGZvciBjaGFpbmluZyBtZXRob2QgY2FsbHMuXG4gKi9cbk1hdHJpeC5wcm90b3R5cGUuaW52ZXJ0ID0gZnVuY3Rpb24oKVxue1xuICAgIHZhciBhMSA9IHRoaXMuYTtcbiAgICB2YXIgYjEgPSB0aGlzLmI7XG4gICAgdmFyIGMxID0gdGhpcy5jO1xuICAgIHZhciBkMSA9IHRoaXMuZDtcbiAgICB2YXIgdHgxID0gdGhpcy50eDtcbiAgICB2YXIgbiA9IGExKmQxLWIxKmMxO1xuXG4gICAgdGhpcy5hID0gZDEvbjtcbiAgICB0aGlzLmIgPSAtYjEvbjtcbiAgICB0aGlzLmMgPSAtYzEvbjtcbiAgICB0aGlzLmQgPSBhMS9uO1xuICAgIHRoaXMudHggPSAoYzEqdGhpcy50eS1kMSp0eDEpL247XG4gICAgdGhpcy50eSA9IC0oYTEqdGhpcy50eS1iMSp0eDEpL247XG5cbiAgICByZXR1cm4gdGhpcztcbn07XG5cblxuLyoqXG4gKiBSZXNldHMgdGhpcyBNYXRpeCB0byBhbiBpZGVudGl0eSAoZGVmYXVsdCkgbWF0cml4LlxuICpcbiAqIEByZXR1cm4ge1BJWEkuTWF0cml4fSBUaGlzIG1hdHJpeC4gR29vZCBmb3IgY2hhaW5pbmcgbWV0aG9kIGNhbGxzLlxuICovXG5NYXRyaXgucHJvdG90eXBlLmlkZW50aXR5ID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLmEgPSAxO1xuICAgIHRoaXMuYiA9IDA7XG4gICAgdGhpcy5jID0gMDtcbiAgICB0aGlzLmQgPSAxO1xuICAgIHRoaXMudHggPSAwO1xuICAgIHRoaXMudHkgPSAwO1xuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIENyZWF0ZXMgYSBuZXcgTWF0cml4IG9iamVjdCB3aXRoIHRoZSBzYW1lIHZhbHVlcyBhcyB0aGlzIG9uZS5cbiAqXG4gKiBAcmV0dXJuIHtQSVhJLk1hdHJpeH0gQSBjb3B5IG9mIHRoaXMgbWF0cml4LiBHb29kIGZvciBjaGFpbmluZyBtZXRob2QgY2FsbHMuXG4gKi9cbk1hdHJpeC5wcm90b3R5cGUuY2xvbmUgPSBmdW5jdGlvbiAoKVxue1xuICAgIHZhciBtYXRyaXggPSBuZXcgTWF0cml4KCk7XG4gICAgbWF0cml4LmEgPSB0aGlzLmE7XG4gICAgbWF0cml4LmIgPSB0aGlzLmI7XG4gICAgbWF0cml4LmMgPSB0aGlzLmM7XG4gICAgbWF0cml4LmQgPSB0aGlzLmQ7XG4gICAgbWF0cml4LnR4ID0gdGhpcy50eDtcbiAgICBtYXRyaXgudHkgPSB0aGlzLnR5O1xuXG4gICAgcmV0dXJuIG1hdHJpeDtcbn07XG5cbi8qKlxuICogQ2hhbmdlcyB0aGUgdmFsdWVzIG9mIHRoZSBnaXZlbiBtYXRyaXggdG8gYmUgdGhlIHNhbWUgYXMgdGhlIG9uZXMgaW4gdGhpcyBtYXRyaXhcbiAqXG4gKiBAcmV0dXJuIHtQSVhJLk1hdHJpeH0gVGhlIG1hdHJpeCBnaXZlbiBpbiBwYXJhbWV0ZXIgd2l0aCBpdHMgdmFsdWVzIHVwZGF0ZWQuXG4gKi9cbk1hdHJpeC5wcm90b3R5cGUuY29weSA9IGZ1bmN0aW9uIChtYXRyaXgpXG57XG4gICAgbWF0cml4LmEgPSB0aGlzLmE7XG4gICAgbWF0cml4LmIgPSB0aGlzLmI7XG4gICAgbWF0cml4LmMgPSB0aGlzLmM7XG4gICAgbWF0cml4LmQgPSB0aGlzLmQ7XG4gICAgbWF0cml4LnR4ID0gdGhpcy50eDtcbiAgICBtYXRyaXgudHkgPSB0aGlzLnR5O1xuXG4gICAgcmV0dXJuIG1hdHJpeDtcbn07XG5cbi8qKlxuICogQSBkZWZhdWx0IChpZGVudGl0eSkgbWF0cml4XG4gKlxuICogQHN0YXRpY1xuICogQGNvbnN0XG4gKi9cbk1hdHJpeC5JREVOVElUWSA9IG5ldyBNYXRyaXgoKTtcblxuLyoqXG4gKiBBIHRlbXAgbWF0cml4XG4gKlxuICogQHN0YXRpY1xuICogQGNvbnN0XG4gKi9cbk1hdHJpeC5URU1QX01BVFJJWCA9IG5ldyBNYXRyaXgoKTtcbiIsIi8qKlxuICogVGhlIFBvaW50IG9iamVjdCByZXByZXNlbnRzIGEgbG9jYXRpb24gaW4gYSB0d28tZGltZW5zaW9uYWwgY29vcmRpbmF0ZSBzeXN0ZW0sIHdoZXJlIHggcmVwcmVzZW50c1xuICogdGhlIGhvcml6b250YWwgYXhpcyBhbmQgeSByZXByZXNlbnRzIHRoZSB2ZXJ0aWNhbCBheGlzLlxuICpcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqIEBwYXJhbSBbeD0wXSB7bnVtYmVyfSBwb3NpdGlvbiBvZiB0aGUgcG9pbnQgb24gdGhlIHggYXhpc1xuICogQHBhcmFtIFt5PTBdIHtudW1iZXJ9IHBvc2l0aW9uIG9mIHRoZSBwb2ludCBvbiB0aGUgeSBheGlzXG4gKi9cbmZ1bmN0aW9uIFBvaW50KHgsIHkpXG57XG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDBcbiAgICAgKi9cbiAgICB0aGlzLnggPSB4IHx8IDA7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMFxuICAgICAqL1xuICAgIHRoaXMueSA9IHkgfHwgMDtcbn1cblxuUG9pbnQucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gUG9pbnQ7XG5tb2R1bGUuZXhwb3J0cyA9IFBvaW50O1xuXG4vKipcbiAqIENyZWF0ZXMgYSBjbG9uZSBvZiB0aGlzIHBvaW50XG4gKlxuICogQHJldHVybiB7UElYSS5Qb2ludH0gYSBjb3B5IG9mIHRoZSBwb2ludFxuICovXG5Qb2ludC5wcm90b3R5cGUuY2xvbmUgPSBmdW5jdGlvbiAoKVxue1xuICAgIHJldHVybiBuZXcgUG9pbnQodGhpcy54LCB0aGlzLnkpO1xufTtcblxuLyoqXG4gKiBDb3BpZXMgeCBhbmQgeSBmcm9tIHRoZSBnaXZlbiBwb2ludFxuICpcbiAqIEBwYXJhbSBwIHtQSVhJLlBvaW50fVxuICovXG5Qb2ludC5wcm90b3R5cGUuY29weSA9IGZ1bmN0aW9uIChwKSB7XG4gICAgdGhpcy5zZXQocC54LCBwLnkpO1xufTtcblxuLyoqXG4gKiBSZXR1cm5zIHRydWUgaWYgdGhlIGdpdmVuIHBvaW50IGlzIGVxdWFsIHRvIHRoaXMgcG9pbnRcbiAqXG4gKiBAcGFyYW0gcCB7UElYSS5Qb2ludH1cbiAqIEByZXR1cm5zIHtib29sZWFufVxuICovXG5Qb2ludC5wcm90b3R5cGUuZXF1YWxzID0gZnVuY3Rpb24gKHApIHtcbiAgICByZXR1cm4gKHAueCA9PT0gdGhpcy54KSAmJiAocC55ID09PSB0aGlzLnkpO1xufTtcblxuLyoqXG4gKiBTZXRzIHRoZSBwb2ludCB0byBhIG5ldyB4IGFuZCB5IHBvc2l0aW9uLlxuICogSWYgeSBpcyBvbWl0dGVkLCBib3RoIHggYW5kIHkgd2lsbCBiZSBzZXQgdG8geC5cbiAqXG4gKiBAcGFyYW0gW3g9MF0ge251bWJlcn0gcG9zaXRpb24gb2YgdGhlIHBvaW50IG9uIHRoZSB4IGF4aXNcbiAqIEBwYXJhbSBbeT0wXSB7bnVtYmVyfSBwb3NpdGlvbiBvZiB0aGUgcG9pbnQgb24gdGhlIHkgYXhpc1xuICovXG5Qb2ludC5wcm90b3R5cGUuc2V0ID0gZnVuY3Rpb24gKHgsIHkpXG57XG4gICAgdGhpcy54ID0geCB8fCAwO1xuICAgIHRoaXMueSA9IHkgfHwgKCAoeSAhPT0gMCkgPyB0aGlzLnggOiAwICkgO1xufTtcbiIsIi8qKlxuICogTWF0aCBjbGFzc2VzIGFuZCB1dGlsaXRpZXMgbWl4ZWQgaW50byBQSVhJIG5hbWVzcGFjZS5cbiAqXG4gKiBAbGVuZHMgUElYSVxuICovXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgICAvLyBUaGVzZSB3aWxsIGJlIG1peGVkIHRvIGJlIG1hZGUgcHVibGljbHkgYXZhaWxhYmxlLFxuICAgIC8vIHdoaWxlIHRoaXMgbW9kdWxlIGlzIHVzZWQgaW50ZXJuYWxseSBpbiBjb3JlXG4gICAgLy8gdG8gYXZvaWQgY2lyY3VsYXIgZGVwZW5kZW5jaWVzIGFuZCBjdXQgZG93biBvblxuICAgIC8vIGludGVybmFsIG1vZHVsZSByZXF1aXJlcy5cblxuICAgIFBvaW50OiAgICAgIHJlcXVpcmUoJy4vUG9pbnQnKSxcbiAgICBNYXRyaXg6ICAgICByZXF1aXJlKCcuL01hdHJpeCcpLFxuXG4gICAgQ2lyY2xlOiAgICAgcmVxdWlyZSgnLi9zaGFwZXMvQ2lyY2xlJyksXG4gICAgRWxsaXBzZTogICAgcmVxdWlyZSgnLi9zaGFwZXMvRWxsaXBzZScpLFxuICAgIFBvbHlnb246ICAgIHJlcXVpcmUoJy4vc2hhcGVzL1BvbHlnb24nKSxcbiAgICBSZWN0YW5nbGU6ICByZXF1aXJlKCcuL3NoYXBlcy9SZWN0YW5nbGUnKSxcbiAgICBSb3VuZGVkUmVjdGFuZ2xlOiByZXF1aXJlKCcuL3NoYXBlcy9Sb3VuZGVkUmVjdGFuZ2xlJylcbn07XG4iLCJ2YXIgUmVjdGFuZ2xlID0gcmVxdWlyZSgnLi9SZWN0YW5nbGUnKSxcbiAgICBDT05TVCA9IHJlcXVpcmUoJy4uLy4uL2NvbnN0Jyk7XG5cbi8qKlxuICogVGhlIENpcmNsZSBvYmplY3QgY2FuIGJlIHVzZWQgdG8gc3BlY2lmeSBhIGhpdCBhcmVhIGZvciBkaXNwbGF5T2JqZWN0c1xuICpcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqIEBwYXJhbSB4IHtudW1iZXJ9IFRoZSBYIGNvb3JkaW5hdGUgb2YgdGhlIGNlbnRlciBvZiB0aGlzIGNpcmNsZVxuICogQHBhcmFtIHkge251bWJlcn0gVGhlIFkgY29vcmRpbmF0ZSBvZiB0aGUgY2VudGVyIG9mIHRoaXMgY2lyY2xlXG4gKiBAcGFyYW0gcmFkaXVzIHtudW1iZXJ9IFRoZSByYWRpdXMgb2YgdGhlIGNpcmNsZVxuICovXG5mdW5jdGlvbiBDaXJjbGUoeCwgeSwgcmFkaXVzKVxue1xuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAwXG4gICAgICovXG4gICAgdGhpcy54ID0geCB8fCAwO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDBcbiAgICAgKi9cbiAgICB0aGlzLnkgPSB5IHx8IDA7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMFxuICAgICAqL1xuICAgIHRoaXMucmFkaXVzID0gcmFkaXVzIHx8IDA7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgdHlwZSBvZiB0aGUgb2JqZWN0LCBtYWlubHkgdXNlZCB0byBhdm9pZCBgaW5zdGFuY2VvZmAgY2hlY2tzXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy50eXBlID0gQ09OU1QuU0hBUEVTLkNJUkM7XG59XG5cbkNpcmNsZS5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBDaXJjbGU7XG5tb2R1bGUuZXhwb3J0cyA9IENpcmNsZTtcblxuLyoqXG4gKiBDcmVhdGVzIGEgY2xvbmUgb2YgdGhpcyBDaXJjbGUgaW5zdGFuY2VcbiAqXG4gKiBAcmV0dXJuIHtQSVhJLkNpcmNsZX0gYSBjb3B5IG9mIHRoZSBDaXJjbGVcbiAqL1xuQ2lyY2xlLnByb3RvdHlwZS5jbG9uZSA9IGZ1bmN0aW9uICgpXG57XG4gICAgcmV0dXJuIG5ldyBDaXJjbGUodGhpcy54LCB0aGlzLnksIHRoaXMucmFkaXVzKTtcbn07XG5cbi8qKlxuICogQ2hlY2tzIHdoZXRoZXIgdGhlIHggYW5kIHkgY29vcmRpbmF0ZXMgZ2l2ZW4gYXJlIGNvbnRhaW5lZCB3aXRoaW4gdGhpcyBjaXJjbGVcbiAqXG4gKiBAcGFyYW0geCB7bnVtYmVyfSBUaGUgWCBjb29yZGluYXRlIG9mIHRoZSBwb2ludCB0byB0ZXN0XG4gKiBAcGFyYW0geSB7bnVtYmVyfSBUaGUgWSBjb29yZGluYXRlIG9mIHRoZSBwb2ludCB0byB0ZXN0XG4gKiBAcmV0dXJuIHtib29sZWFufSBXaGV0aGVyIHRoZSB4L3kgY29vcmRpbmF0ZXMgYXJlIHdpdGhpbiB0aGlzIENpcmNsZVxuICovXG5DaXJjbGUucHJvdG90eXBlLmNvbnRhaW5zID0gZnVuY3Rpb24gKHgsIHkpXG57XG4gICAgaWYgKHRoaXMucmFkaXVzIDw9IDApXG4gICAge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgdmFyIGR4ID0gKHRoaXMueCAtIHgpLFxuICAgICAgICBkeSA9ICh0aGlzLnkgLSB5KSxcbiAgICAgICAgcjIgPSB0aGlzLnJhZGl1cyAqIHRoaXMucmFkaXVzO1xuXG4gICAgZHggKj0gZHg7XG4gICAgZHkgKj0gZHk7XG5cbiAgICByZXR1cm4gKGR4ICsgZHkgPD0gcjIpO1xufTtcblxuLyoqXG4qIFJldHVybnMgdGhlIGZyYW1pbmcgcmVjdGFuZ2xlIG9mIHRoZSBjaXJjbGUgYXMgYSBSZWN0YW5nbGUgb2JqZWN0XG4qXG4qIEByZXR1cm4ge1BJWEkuUmVjdGFuZ2xlfSB0aGUgZnJhbWluZyByZWN0YW5nbGVcbiovXG5DaXJjbGUucHJvdG90eXBlLmdldEJvdW5kcyA9IGZ1bmN0aW9uICgpXG57XG4gICAgcmV0dXJuIG5ldyBSZWN0YW5nbGUodGhpcy54IC0gdGhpcy5yYWRpdXMsIHRoaXMueSAtIHRoaXMucmFkaXVzLCB0aGlzLnJhZGl1cyAqIDIsIHRoaXMucmFkaXVzICogMik7XG59O1xuIiwidmFyIFJlY3RhbmdsZSA9IHJlcXVpcmUoJy4vUmVjdGFuZ2xlJyksXG4gICAgQ09OU1QgPSByZXF1aXJlKCcuLi8uLi9jb25zdCcpO1xuXG4vKipcbiAqIFRoZSBFbGxpcHNlIG9iamVjdCBjYW4gYmUgdXNlZCB0byBzcGVjaWZ5IGEgaGl0IGFyZWEgZm9yIGRpc3BsYXlPYmplY3RzXG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIHgge251bWJlcn0gVGhlIFggY29vcmRpbmF0ZSBvZiB0aGUgY2VudGVyIG9mIHRoZSBlbGxpcHNlXG4gKiBAcGFyYW0geSB7bnVtYmVyfSBUaGUgWSBjb29yZGluYXRlIG9mIHRoZSBjZW50ZXIgb2YgdGhlIGVsbGlwc2VcbiAqIEBwYXJhbSB3aWR0aCB7bnVtYmVyfSBUaGUgaGFsZiB3aWR0aCBvZiB0aGlzIGVsbGlwc2VcbiAqIEBwYXJhbSBoZWlnaHQge251bWJlcn0gVGhlIGhhbGYgaGVpZ2h0IG9mIHRoaXMgZWxsaXBzZVxuICovXG5mdW5jdGlvbiBFbGxpcHNlKHgsIHksIHdpZHRoLCBoZWlnaHQpXG57XG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDBcbiAgICAgKi9cbiAgICB0aGlzLnggPSB4IHx8IDA7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMFxuICAgICAqL1xuICAgIHRoaXMueSA9IHkgfHwgMDtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAwXG4gICAgICovXG4gICAgdGhpcy53aWR0aCA9IHdpZHRoIHx8IDA7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMFxuICAgICAqL1xuICAgIHRoaXMuaGVpZ2h0ID0gaGVpZ2h0IHx8IDA7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgdHlwZSBvZiB0aGUgb2JqZWN0LCBtYWlubHkgdXNlZCB0byBhdm9pZCBgaW5zdGFuY2VvZmAgY2hlY2tzXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy50eXBlID0gQ09OU1QuU0hBUEVTLkVMSVA7XG59XG5cbkVsbGlwc2UucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gRWxsaXBzZTtcbm1vZHVsZS5leHBvcnRzID0gRWxsaXBzZTtcblxuLyoqXG4gKiBDcmVhdGVzIGEgY2xvbmUgb2YgdGhpcyBFbGxpcHNlIGluc3RhbmNlXG4gKlxuICogQHJldHVybiB7UElYSS5FbGxpcHNlfSBhIGNvcHkgb2YgdGhlIGVsbGlwc2VcbiAqL1xuRWxsaXBzZS5wcm90b3R5cGUuY2xvbmUgPSBmdW5jdGlvbiAoKVxue1xuICAgIHJldHVybiBuZXcgRWxsaXBzZSh0aGlzLngsIHRoaXMueSwgdGhpcy53aWR0aCwgdGhpcy5oZWlnaHQpO1xufTtcblxuLyoqXG4gKiBDaGVja3Mgd2hldGhlciB0aGUgeCBhbmQgeSBjb29yZGluYXRlcyBnaXZlbiBhcmUgY29udGFpbmVkIHdpdGhpbiB0aGlzIGVsbGlwc2VcbiAqXG4gKiBAcGFyYW0geCB7bnVtYmVyfSBUaGUgWCBjb29yZGluYXRlIG9mIHRoZSBwb2ludCB0byB0ZXN0XG4gKiBAcGFyYW0geSB7bnVtYmVyfSBUaGUgWSBjb29yZGluYXRlIG9mIHRoZSBwb2ludCB0byB0ZXN0XG4gKiBAcmV0dXJuIHtib29sZWFufSBXaGV0aGVyIHRoZSB4L3kgY29vcmRzIGFyZSB3aXRoaW4gdGhpcyBlbGxpcHNlXG4gKi9cbkVsbGlwc2UucHJvdG90eXBlLmNvbnRhaW5zID0gZnVuY3Rpb24gKHgsIHkpXG57XG4gICAgaWYgKHRoaXMud2lkdGggPD0gMCB8fCB0aGlzLmhlaWdodCA8PSAwKVxuICAgIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIC8vbm9ybWFsaXplIHRoZSBjb29yZHMgdG8gYW4gZWxsaXBzZSB3aXRoIGNlbnRlciAwLDBcbiAgICB2YXIgbm9ybXggPSAoKHggLSB0aGlzLngpIC8gdGhpcy53aWR0aCksXG4gICAgICAgIG5vcm15ID0gKCh5IC0gdGhpcy55KSAvIHRoaXMuaGVpZ2h0KTtcblxuICAgIG5vcm14ICo9IG5vcm14O1xuICAgIG5vcm15ICo9IG5vcm15O1xuXG4gICAgcmV0dXJuIChub3JteCArIG5vcm15IDw9IDEpO1xufTtcblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBmcmFtaW5nIHJlY3RhbmdsZSBvZiB0aGUgZWxsaXBzZSBhcyBhIFJlY3RhbmdsZSBvYmplY3RcbiAqXG4gKiBAcmV0dXJuIHtQSVhJLlJlY3RhbmdsZX0gdGhlIGZyYW1pbmcgcmVjdGFuZ2xlXG4gKi9cbkVsbGlwc2UucHJvdG90eXBlLmdldEJvdW5kcyA9IGZ1bmN0aW9uICgpXG57XG4gICAgcmV0dXJuIG5ldyBSZWN0YW5nbGUodGhpcy54IC0gdGhpcy53aWR0aCwgdGhpcy55IC0gdGhpcy5oZWlnaHQsIHRoaXMud2lkdGgsIHRoaXMuaGVpZ2h0KTtcbn07XG4iLCJ2YXIgUG9pbnQgPSByZXF1aXJlKCcuLi9Qb2ludCcpLFxuICAgIENPTlNUID0gcmVxdWlyZSgnLi4vLi4vY29uc3QnKTtcblxuLyoqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gcG9pbnRzIHtQSVhJLlBvaW50W118bnVtYmVyW118Li4uUElYSS5Qb2ludHwuLi5udW1iZXJ9IFRoaXMgY2FuIGJlIGFuIGFycmF5IG9mIFBvaW50cyB0aGF0IGZvcm0gdGhlIHBvbHlnb24sXG4gKiAgICAgIGEgZmxhdCBhcnJheSBvZiBudW1iZXJzIHRoYXQgd2lsbCBiZSBpbnRlcnByZXRlZCBhcyBbeCx5LCB4LHksIC4uLl0sIG9yIHRoZSBhcmd1bWVudHMgcGFzc2VkIGNhbiBiZVxuICogICAgICBhbGwgdGhlIHBvaW50cyBvZiB0aGUgcG9seWdvbiBlLmcuIGBuZXcgUElYSS5Qb2x5Z29uKG5ldyBQSVhJLlBvaW50KCksIG5ldyBQSVhJLlBvaW50KCksIC4uLilgLCBvciB0aGVcbiAqICAgICAgYXJndW1lbnRzIHBhc3NlZCBjYW4gYmUgZmxhdCB4LHkgdmFsdWVzIGUuZy4gYG5ldyBQb2x5Z29uKHgseSwgeCx5LCB4LHksIC4uLilgIHdoZXJlIGB4YCBhbmQgYHlgIGFyZVxuICogICAgICBOdW1iZXJzLlxuICovXG5mdW5jdGlvbiBQb2x5Z29uKHBvaW50c18pXG57XG4gICAgLy8gcHJldmVudHMgYW4gYXJndW1lbnQgYXNzaWdubWVudCBkZW9wdFxuICAgIC8vIHNlZSBzZWN0aW9uIDMuMTogaHR0cHM6Ly9naXRodWIuY29tL3BldGthYW50b25vdi9ibHVlYmlyZC93aWtpL09wdGltaXphdGlvbi1raWxsZXJzIzMtbWFuYWdpbmctYXJndW1lbnRzXG4gICAgdmFyIHBvaW50cyA9IHBvaW50c187XG5cbiAgICAvL2lmIHBvaW50cyBpc24ndCBhbiBhcnJheSwgdXNlIGFyZ3VtZW50cyBhcyB0aGUgYXJyYXlcbiAgICBpZiAoIUFycmF5LmlzQXJyYXkocG9pbnRzKSlcbiAgICB7XG4gICAgICAgIC8vIHByZXZlbnRzIGFuIGFyZ3VtZW50IGxlYWsgZGVvcHRcbiAgICAgICAgLy8gc2VlIHNlY3Rpb24gMy4yOiBodHRwczovL2dpdGh1Yi5jb20vcGV0a2FhbnRvbm92L2JsdWViaXJkL3dpa2kvT3B0aW1pemF0aW9uLWtpbGxlcnMjMy1tYW5hZ2luZy1hcmd1bWVudHNcbiAgICAgICAgcG9pbnRzID0gbmV3IEFycmF5KGFyZ3VtZW50cy5sZW5ndGgpO1xuXG4gICAgICAgIGZvciAodmFyIGEgPSAwOyBhIDwgcG9pbnRzLmxlbmd0aDsgKythKSB7XG4gICAgICAgICAgICBwb2ludHNbYV0gPSBhcmd1bWVudHNbYV07XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBpZiB0aGlzIGlzIGFuIGFycmF5IG9mIHBvaW50cywgY29udmVydCBpdCB0byBhIGZsYXQgYXJyYXkgb2YgbnVtYmVyc1xuICAgIGlmIChwb2ludHNbMF0gaW5zdGFuY2VvZiBQb2ludClcbiAgICB7XG4gICAgICAgIHZhciBwID0gW107XG4gICAgICAgIGZvciAodmFyIGkgPSAwLCBpbCA9IHBvaW50cy5sZW5ndGg7IGkgPCBpbDsgaSsrKVxuICAgICAgICB7XG4gICAgICAgICAgICBwLnB1c2gocG9pbnRzW2ldLngsIHBvaW50c1tpXS55KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHBvaW50cyA9IHA7XG4gICAgfVxuXG4gICAgdGhpcy5jbG9zZWQgPSB0cnVlO1xuXG4gICAgLyoqXG4gICAgICogQW4gYXJyYXkgb2YgdGhlIHBvaW50cyBvZiB0aGlzIHBvbHlnb25cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcltdfVxuICAgICAqL1xuICAgIHRoaXMucG9pbnRzID0gcG9pbnRzO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHR5cGUgb2YgdGhlIG9iamVjdCwgbWFpbmx5IHVzZWQgdG8gYXZvaWQgYGluc3RhbmNlb2ZgIGNoZWNrc1xuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMudHlwZSA9IENPTlNULlNIQVBFUy5QT0xZO1xufVxuXG5Qb2x5Z29uLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFBvbHlnb247XG5tb2R1bGUuZXhwb3J0cyA9IFBvbHlnb247XG5cbi8qKlxuICogQ3JlYXRlcyBhIGNsb25lIG9mIHRoaXMgcG9seWdvblxuICpcbiAqIEByZXR1cm4ge1BJWEkuUG9seWdvbn0gYSBjb3B5IG9mIHRoZSBwb2x5Z29uXG4gKi9cblBvbHlnb24ucHJvdG90eXBlLmNsb25lID0gZnVuY3Rpb24gKClcbntcbiAgICByZXR1cm4gbmV3IFBvbHlnb24odGhpcy5wb2ludHMuc2xpY2UoKSk7XG59O1xuXG4vKipcbiAqIENoZWNrcyB3aGV0aGVyIHRoZSB4IGFuZCB5IGNvb3JkaW5hdGVzIHBhc3NlZCB0byB0aGlzIGZ1bmN0aW9uIGFyZSBjb250YWluZWQgd2l0aGluIHRoaXMgcG9seWdvblxuICpcbiAqIEBwYXJhbSB4IHtudW1iZXJ9IFRoZSBYIGNvb3JkaW5hdGUgb2YgdGhlIHBvaW50IHRvIHRlc3RcbiAqIEBwYXJhbSB5IHtudW1iZXJ9IFRoZSBZIGNvb3JkaW5hdGUgb2YgdGhlIHBvaW50IHRvIHRlc3RcbiAqIEByZXR1cm4ge2Jvb2xlYW59IFdoZXRoZXIgdGhlIHgveSBjb29yZGluYXRlcyBhcmUgd2l0aGluIHRoaXMgcG9seWdvblxuICovXG5Qb2x5Z29uLnByb3RvdHlwZS5jb250YWlucyA9IGZ1bmN0aW9uICh4LCB5KVxue1xuICAgIHZhciBpbnNpZGUgPSBmYWxzZTtcblxuICAgIC8vIHVzZSBzb21lIHJheWNhc3RpbmcgdG8gdGVzdCBoaXRzXG4gICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL3N1YnN0YWNrL3BvaW50LWluLXBvbHlnb24vYmxvYi9tYXN0ZXIvaW5kZXguanNcbiAgICB2YXIgbGVuZ3RoID0gdGhpcy5wb2ludHMubGVuZ3RoIC8gMjtcblxuICAgIGZvciAodmFyIGkgPSAwLCBqID0gbGVuZ3RoIC0gMTsgaSA8IGxlbmd0aDsgaiA9IGkrKylcbiAgICB7XG4gICAgICAgIHZhciB4aSA9IHRoaXMucG9pbnRzW2kgKiAyXSwgeWkgPSB0aGlzLnBvaW50c1tpICogMiArIDFdLFxuICAgICAgICAgICAgeGogPSB0aGlzLnBvaW50c1tqICogMl0sIHlqID0gdGhpcy5wb2ludHNbaiAqIDIgKyAxXSxcbiAgICAgICAgICAgIGludGVyc2VjdCA9ICgoeWkgPiB5KSAhPT0gKHlqID4geSkpICYmICh4IDwgKHhqIC0geGkpICogKHkgLSB5aSkgLyAoeWogLSB5aSkgKyB4aSk7XG5cbiAgICAgICAgaWYgKGludGVyc2VjdClcbiAgICAgICAge1xuICAgICAgICAgICAgaW5zaWRlID0gIWluc2lkZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBpbnNpZGU7XG59O1xuIiwidmFyIENPTlNUID0gcmVxdWlyZSgnLi4vLi4vY29uc3QnKTtcblxuLyoqXG4gKiB0aGUgUmVjdGFuZ2xlIG9iamVjdCBpcyBhbiBhcmVhIGRlZmluZWQgYnkgaXRzIHBvc2l0aW9uLCBhcyBpbmRpY2F0ZWQgYnkgaXRzIHRvcC1sZWZ0IGNvcm5lciBwb2ludCAoeCwgeSkgYW5kIGJ5IGl0cyB3aWR0aCBhbmQgaXRzIGhlaWdodC5cbiAqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0geCB7bnVtYmVyfSBUaGUgWCBjb29yZGluYXRlIG9mIHRoZSB1cHBlci1sZWZ0IGNvcm5lciBvZiB0aGUgcmVjdGFuZ2xlXG4gKiBAcGFyYW0geSB7bnVtYmVyfSBUaGUgWSBjb29yZGluYXRlIG9mIHRoZSB1cHBlci1sZWZ0IGNvcm5lciBvZiB0aGUgcmVjdGFuZ2xlXG4gKiBAcGFyYW0gd2lkdGgge251bWJlcn0gVGhlIG92ZXJhbGwgd2lkdGggb2YgdGhpcyByZWN0YW5nbGVcbiAqIEBwYXJhbSBoZWlnaHQge251bWJlcn0gVGhlIG92ZXJhbGwgaGVpZ2h0IG9mIHRoaXMgcmVjdGFuZ2xlXG4gKi9cbmZ1bmN0aW9uIFJlY3RhbmdsZSh4LCB5LCB3aWR0aCwgaGVpZ2h0KVxue1xuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAwXG4gICAgICovXG4gICAgdGhpcy54ID0geCB8fCAwO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDBcbiAgICAgKi9cbiAgICB0aGlzLnkgPSB5IHx8IDA7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMFxuICAgICAqL1xuICAgIHRoaXMud2lkdGggPSB3aWR0aCB8fCAwO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDBcbiAgICAgKi9cbiAgICB0aGlzLmhlaWdodCA9IGhlaWdodCB8fCAwO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHR5cGUgb2YgdGhlIG9iamVjdCwgbWFpbmx5IHVzZWQgdG8gYXZvaWQgYGluc3RhbmNlb2ZgIGNoZWNrc1xuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMudHlwZSA9IENPTlNULlNIQVBFUy5SRUNUO1xufVxuXG5SZWN0YW5nbGUucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gUmVjdGFuZ2xlO1xubW9kdWxlLmV4cG9ydHMgPSBSZWN0YW5nbGU7XG5cbi8qKlxuICogQSBjb25zdGFudCBlbXB0eSByZWN0YW5nbGUuXG4gKlxuICogQHN0YXRpY1xuICogQGNvbnN0YW50XG4gKi9cblJlY3RhbmdsZS5FTVBUWSA9IG5ldyBSZWN0YW5nbGUoMCwgMCwgMCwgMCk7XG5cblxuLyoqXG4gKiBDcmVhdGVzIGEgY2xvbmUgb2YgdGhpcyBSZWN0YW5nbGVcbiAqXG4gKiBAcmV0dXJuIHtQSVhJLlJlY3RhbmdsZX0gYSBjb3B5IG9mIHRoZSByZWN0YW5nbGVcbiAqL1xuUmVjdGFuZ2xlLnByb3RvdHlwZS5jbG9uZSA9IGZ1bmN0aW9uICgpXG57XG4gICAgcmV0dXJuIG5ldyBSZWN0YW5nbGUodGhpcy54LCB0aGlzLnksIHRoaXMud2lkdGgsIHRoaXMuaGVpZ2h0KTtcbn07XG5cbi8qKlxuICogQ2hlY2tzIHdoZXRoZXIgdGhlIHggYW5kIHkgY29vcmRpbmF0ZXMgZ2l2ZW4gYXJlIGNvbnRhaW5lZCB3aXRoaW4gdGhpcyBSZWN0YW5nbGVcbiAqXG4gKiBAcGFyYW0geCB7bnVtYmVyfSBUaGUgWCBjb29yZGluYXRlIG9mIHRoZSBwb2ludCB0byB0ZXN0XG4gKiBAcGFyYW0geSB7bnVtYmVyfSBUaGUgWSBjb29yZGluYXRlIG9mIHRoZSBwb2ludCB0byB0ZXN0XG4gKiBAcmV0dXJuIHtib29sZWFufSBXaGV0aGVyIHRoZSB4L3kgY29vcmRpbmF0ZXMgYXJlIHdpdGhpbiB0aGlzIFJlY3RhbmdsZVxuICovXG5SZWN0YW5nbGUucHJvdG90eXBlLmNvbnRhaW5zID0gZnVuY3Rpb24gKHgsIHkpXG57XG4gICAgaWYgKHRoaXMud2lkdGggPD0gMCB8fCB0aGlzLmhlaWdodCA8PSAwKVxuICAgIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGlmICh4ID49IHRoaXMueCAmJiB4IDwgdGhpcy54ICsgdGhpcy53aWR0aClcbiAgICB7XG4gICAgICAgIGlmICh5ID49IHRoaXMueSAmJiB5IDwgdGhpcy55ICsgdGhpcy5oZWlnaHQpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xufTtcbiIsInZhciBDT05TVCA9IHJlcXVpcmUoJy4uLy4uL2NvbnN0Jyk7XG5cbi8qKlxuICogVGhlIFJvdW5kZWQgUmVjdGFuZ2xlIG9iamVjdCBpcyBhbiBhcmVhIHRoYXQgaGFzIG5pY2Ugcm91bmRlZCBjb3JuZXJzLCBhcyBpbmRpY2F0ZWQgYnkgaXRzIHRvcC1sZWZ0IGNvcm5lciBwb2ludCAoeCwgeSkgYW5kIGJ5IGl0cyB3aWR0aCBhbmQgaXRzIGhlaWdodCBhbmQgaXRzIHJhZGl1cy5cbiAqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0geCB7bnVtYmVyfSBUaGUgWCBjb29yZGluYXRlIG9mIHRoZSB1cHBlci1sZWZ0IGNvcm5lciBvZiB0aGUgcm91bmRlZCByZWN0YW5nbGVcbiAqIEBwYXJhbSB5IHtudW1iZXJ9IFRoZSBZIGNvb3JkaW5hdGUgb2YgdGhlIHVwcGVyLWxlZnQgY29ybmVyIG9mIHRoZSByb3VuZGVkIHJlY3RhbmdsZVxuICogQHBhcmFtIHdpZHRoIHtudW1iZXJ9IFRoZSBvdmVyYWxsIHdpZHRoIG9mIHRoaXMgcm91bmRlZCByZWN0YW5nbGVcbiAqIEBwYXJhbSBoZWlnaHQge251bWJlcn0gVGhlIG92ZXJhbGwgaGVpZ2h0IG9mIHRoaXMgcm91bmRlZCByZWN0YW5nbGVcbiAqIEBwYXJhbSByYWRpdXMge251bWJlcn0gQ29udHJvbHMgdGhlIHJhZGl1cyBvZiB0aGUgcm91bmRlZCBjb3JuZXJzXG4gKi9cbmZ1bmN0aW9uIFJvdW5kZWRSZWN0YW5nbGUoeCwgeSwgd2lkdGgsIGhlaWdodCwgcmFkaXVzKVxue1xuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAwXG4gICAgICovXG4gICAgdGhpcy54ID0geCB8fCAwO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDBcbiAgICAgKi9cbiAgICB0aGlzLnkgPSB5IHx8IDA7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMFxuICAgICAqL1xuICAgIHRoaXMud2lkdGggPSB3aWR0aCB8fCAwO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDBcbiAgICAgKi9cbiAgICB0aGlzLmhlaWdodCA9IGhlaWdodCB8fCAwO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDIwXG4gICAgICovXG4gICAgdGhpcy5yYWRpdXMgPSByYWRpdXMgfHwgMjA7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgdHlwZSBvZiB0aGUgb2JqZWN0LCBtYWlubHkgdXNlZCB0byBhdm9pZCBgaW5zdGFuY2VvZmAgY2hlY2tzXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy50eXBlID0gQ09OU1QuU0hBUEVTLlJSRUM7XG59XG5cblJvdW5kZWRSZWN0YW5nbGUucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gUm91bmRlZFJlY3RhbmdsZTtcbm1vZHVsZS5leHBvcnRzID0gUm91bmRlZFJlY3RhbmdsZTtcblxuLyoqXG4gKiBDcmVhdGVzIGEgY2xvbmUgb2YgdGhpcyBSb3VuZGVkIFJlY3RhbmdsZVxuICpcbiAqIEByZXR1cm4ge1BJWEkuUm91bmRlZFJlY3RhbmdsZX0gYSBjb3B5IG9mIHRoZSByb3VuZGVkIHJlY3RhbmdsZVxuICovXG5Sb3VuZGVkUmVjdGFuZ2xlLnByb3RvdHlwZS5jbG9uZSA9IGZ1bmN0aW9uICgpXG57XG4gICAgcmV0dXJuIG5ldyBSb3VuZGVkUmVjdGFuZ2xlKHRoaXMueCwgdGhpcy55LCB0aGlzLndpZHRoLCB0aGlzLmhlaWdodCwgdGhpcy5yYWRpdXMpO1xufTtcblxuLyoqXG4gKiBDaGVja3Mgd2hldGhlciB0aGUgeCBhbmQgeSBjb29yZGluYXRlcyBnaXZlbiBhcmUgY29udGFpbmVkIHdpdGhpbiB0aGlzIFJvdW5kZWQgUmVjdGFuZ2xlXG4gKlxuICogQHBhcmFtIHgge251bWJlcn0gVGhlIFggY29vcmRpbmF0ZSBvZiB0aGUgcG9pbnQgdG8gdGVzdFxuICogQHBhcmFtIHkge251bWJlcn0gVGhlIFkgY29vcmRpbmF0ZSBvZiB0aGUgcG9pbnQgdG8gdGVzdFxuICogQHJldHVybiB7Ym9vbGVhbn0gV2hldGhlciB0aGUgeC95IGNvb3JkaW5hdGVzIGFyZSB3aXRoaW4gdGhpcyBSb3VuZGVkIFJlY3RhbmdsZVxuICovXG5Sb3VuZGVkUmVjdGFuZ2xlLnByb3RvdHlwZS5jb250YWlucyA9IGZ1bmN0aW9uICh4LCB5KVxue1xuICAgIGlmICh0aGlzLndpZHRoIDw9IDAgfHwgdGhpcy5oZWlnaHQgPD0gMClcbiAgICB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBpZiAoeCA+PSB0aGlzLnggJiYgeCA8PSB0aGlzLnggKyB0aGlzLndpZHRoKVxuICAgIHtcbiAgICAgICAgaWYgKHkgPj0gdGhpcy55ICYmIHkgPD0gdGhpcy55ICsgdGhpcy5oZWlnaHQpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xufTtcbiIsInZhciBDb250YWluZXIgPSByZXF1aXJlKCcuLi9kaXNwbGF5L0NvbnRhaW5lcicpLFxuICAgIENPTlNUID0gcmVxdWlyZSgnLi4vY29uc3QnKTtcblxuLyoqXG4gKiBUaGUgUGFydGljbGVDb250YWluZXIgY2xhc3MgaXMgYSByZWFsbHkgZmFzdCB2ZXJzaW9uIG9mIHRoZSBDb250YWluZXIgYnVpbHQgc29sZWx5IGZvciBzcGVlZCxcbiAqIHNvIHVzZSB3aGVuIHlvdSBuZWVkIGEgbG90IG9mIHNwcml0ZXMgb3IgcGFydGljbGVzLiBUaGUgdHJhZGVvZmYgb2YgdGhlIFBhcnRpY2xlQ29udGFpbmVyIGlzIHRoYXQgYWR2YW5jZWRcbiAqIGZ1bmN0aW9uYWxpdHkgd2lsbCBub3Qgd29yay4gUGFydGljbGVDb250YWluZXIgaW1wbGVtZW50cyBvbmx5IHRoZSBiYXNpYyBvYmplY3QgdHJhbnNmb3JtIChwb3NpdGlvbiwgc2NhbGUsIHJvdGF0aW9uKS5cbiAqIEFueSBvdGhlciBmdW5jdGlvbmFsaXR5IGxpa2UgdGludGluZywgbWFza2luZywgZXRjIHdpbGwgbm90IHdvcmsgb24gc3ByaXRlcyBpbiB0aGlzIGJhdGNoLlxuICpcbiAqIEl0J3MgZXh0cmVtZWx5IGVhc3kgdG8gdXNlIDpcbiAqXG4gKiBgYGBqc1xuICogdmFyIGNvbnRhaW5lciA9IG5ldyBQYXJ0aWNsZUNvbnRhaW5lcigpO1xuICpcbiAqIGZvciAodmFyIGkgPSAwOyBpIDwgMTAwOyArK2kpXG4gKiB7XG4gKiAgICAgdmFyIHNwcml0ZSA9IG5ldyBQSVhJLlNwcml0ZS5mcm9tSW1hZ2UoXCJteUltYWdlLnBuZ1wiKTtcbiAqICAgICBjb250YWluZXIuYWRkQ2hpbGQoc3ByaXRlKTtcbiAqIH1cbiAqIGBgYFxuICpcbiAqIEFuZCBoZXJlIHlvdSBoYXZlIGEgaHVuZHJlZCBzcHJpdGVzIHRoYXQgd2lsbCBiZSByZW5kZXJlciBhdCB0aGUgc3BlZWQgb2YgbGlnaHQuXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLkNvbnRhaW5lclxuICogQG1lbWJlcm9mIFBJWElcbiAqIEBwYXJhbSBbbWF4U2l6ZT0xNTAwMF0ge251bWJlcn0gVGhlIG1heGltdW0gbnVtYmVyIG9mIHBhcnRpY2xlcyB0aGF0IGNhbiBiZSByZW5kZXJlciBieSB0aGUgY29udGFpbmVyLlxuICogQHBhcmFtIFtwcm9wZXJ0aWVzXSB7b2JqZWN0fSBUaGUgcHJvcGVydGllcyBvZiBjaGlsZHJlbiB0aGF0IHNob3VsZCBiZSB1cGxvYWRlZCB0byB0aGUgZ3B1IGFuZCBhcHBsaWVkLlxuICogQHBhcmFtIFtwcm9wZXJ0aWVzLnNjYWxlPWZhbHNlXSB7Ym9vbGVhbn0gV2hlbiB0cnVlLCBzY2FsZSBiZSB1cGxvYWRlZCBhbmQgYXBwbGllZC5cbiAqIEBwYXJhbSBbcHJvcGVydGllcy5wb3NpdGlvbj10cnVlXSB7Ym9vbGVhbn0gV2hlbiB0cnVlLCBwb3NpdGlvbiBiZSB1cGxvYWRlZCBhbmQgYXBwbGllZC5cbiAqIEBwYXJhbSBbcHJvcGVydGllcy5yb3RhdGlvbj1mYWxzZV0ge2Jvb2xlYW59IFdoZW4gdHJ1ZSwgcm90YXRpb24gYmUgdXBsb2FkZWQgYW5kIGFwcGxpZWQuXG4gKiBAcGFyYW0gW3Byb3BlcnRpZXMudXZzPWZhbHNlXSB7Ym9vbGVhbn0gV2hlbiB0cnVlLCB1dnMgYmUgdXBsb2FkZWQgYW5kIGFwcGxpZWQuXG4gKiBAcGFyYW0gW3Byb3BlcnRpZXMuYWxwaGE9ZmFsc2VdIHtib29sZWFufSBXaGVuIHRydWUsIGFscGhhIGJlIHVwbG9hZGVkIGFuZCBhcHBsaWVkLlxuICogQHBhcmFtIFtiYXRjaFNpemU9MTUwMDBdIHtudW1iZXJ9IE51bWJlciBvZiBwYXJ0aWNsZXMgcGVyIGJhdGNoLlxuICovXG5mdW5jdGlvbiBQYXJ0aWNsZUNvbnRhaW5lcihtYXhTaXplLCBwcm9wZXJ0aWVzLCBiYXRjaFNpemUpXG57XG4gICAgQ29udGFpbmVyLmNhbGwodGhpcyk7XG5cbiAgICBiYXRjaFNpemUgPSBiYXRjaFNpemUgfHwgMTUwMDA7IC8vQ09OU1QuU1BSSVRFX0JBVENIX1NJWkU7IC8vIDIwMDAgaXMgYSBuaWNlIGJhbGFuY2UgYmV0d2VlbiBtb2JpbGUgLyBkZXNrdG9wXG4gICAgbWF4U2l6ZSA9IG1heFNpemUgfHwgMTUwMDA7XG5cbiAgICAvLyBNYWtpbmcgc3VyZSB0aGUgYmF0Y2ggc2l6ZSBpcyB2YWxpZFxuICAgIC8vIDY1NTM1IGlzIG1heCB2ZXJ0ZXggaW5kZXggaW4gdGhlIGluZGV4IGJ1ZmZlciAoc2VlIFBhcnRpY2xlUmVuZGVyZXIpXG4gICAgLy8gc28gbWF4IG51bWJlciBvZiBwYXJ0aWNsZXMgaXMgNjU1MzYgLyA0ID0gMTYzODRcbiAgICB2YXIgbWF4QmF0Y2hTaXplID0gMTYzODQ7XG4gICAgaWYgKGJhdGNoU2l6ZSA+IG1heEJhdGNoU2l6ZSkge1xuICAgICAgICBiYXRjaFNpemUgPSBtYXhCYXRjaFNpemU7XG4gICAgfVxuXG4gICAgaWYgKGJhdGNoU2l6ZSA+IG1heFNpemUpIHtcbiAgICAgICAgYmF0Y2hTaXplID0gbWF4U2l6ZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTZXQgcHJvcGVydGllcyB0byBiZSBkeW5hbWljICh0cnVlKSAvIHN0YXRpYyAoZmFsc2UpXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFuW119XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9wcm9wZXJ0aWVzID0gW2ZhbHNlLCB0cnVlLCBmYWxzZSwgZmFsc2UsIGZhbHNlXTtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX21heFNpemUgPSBtYXhTaXplO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fYmF0Y2hTaXplID0gYmF0Y2hTaXplO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7V2ViR0xCdWZmZXJ9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9idWZmZXJzID0gbnVsbDtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX2J1ZmZlclRvVXBkYXRlID0gMDtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICpcbiAgICAgKi9cbiAgICB0aGlzLmludGVyYWN0aXZlQ2hpbGRyZW4gPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBibGVuZCBtb2RlIHRvIGJlIGFwcGxpZWQgdG8gdGhlIHNwcml0ZS4gQXBwbHkgYSB2YWx1ZSBvZiBgUElYSS5CTEVORF9NT0RFUy5OT1JNQUxgIHRvIHJlc2V0IHRoZSBibGVuZCBtb2RlLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IFBJWEkuQkxFTkRfTU9ERVMuTk9STUFMXG4gICAgICogQHNlZSBQSVhJLkJMRU5EX01PREVTXG4gICAgICovXG4gICAgdGhpcy5ibGVuZE1vZGUgPSBDT05TVC5CTEVORF9NT0RFUy5OT1JNQUw7XG5cbiAgICAvKipcbiAgICAgKiBVc2VkIGZvciBjYW52YXMgcmVuZGVyZXJpbmcuIElmIHRydWUgdGhlbiB0aGUgZWxlbWVudHMgd2lsbCBiZSBwb3NpdGlvbmVkIGF0IHRoZSBuZWFyZXN0IHBpeGVsLiBUaGlzIHByb3ZpZGVzIGEgbmljZSBzcGVlZCBib29zdC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICogQGRlZmF1bHQgdHJ1ZTtcbiAgICAgKi9cbiAgICB0aGlzLnJvdW5kUGl4ZWxzID0gdHJ1ZTtcblxuICAgIHRoaXMuc2V0UHJvcGVydGllcyhwcm9wZXJ0aWVzKTtcbn1cblxuUGFydGljbGVDb250YWluZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShDb250YWluZXIucHJvdG90eXBlKTtcblBhcnRpY2xlQ29udGFpbmVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFBhcnRpY2xlQ29udGFpbmVyO1xubW9kdWxlLmV4cG9ydHMgPSBQYXJ0aWNsZUNvbnRhaW5lcjtcblxuLyoqXG4gKiBTZXRzIHRoZSBwcml2YXRlIHByb3BlcnRpZXMgYXJyYXkgdG8gZHluYW1pYyAvIHN0YXRpYyBiYXNlZCBvbiB0aGUgcGFzc2VkIHByb3BlcnRpZXMgb2JqZWN0XG4gKlxuICogQHBhcmFtIHByb3BlcnRpZXMge29iamVjdH0gVGhlIHByb3BlcnRpZXMgdG8gYmUgdXBsb2FkZWRcbiAqL1xuUGFydGljbGVDb250YWluZXIucHJvdG90eXBlLnNldFByb3BlcnRpZXMgPSBmdW5jdGlvbihwcm9wZXJ0aWVzKVxue1xuICAgIGlmICggcHJvcGVydGllcyApIHtcbiAgICAgICAgdGhpcy5fcHJvcGVydGllc1swXSA9ICdzY2FsZScgaW4gcHJvcGVydGllcyA/ICEhcHJvcGVydGllcy5zY2FsZSA6IHRoaXMuX3Byb3BlcnRpZXNbMF07XG4gICAgICAgIHRoaXMuX3Byb3BlcnRpZXNbMV0gPSAncG9zaXRpb24nIGluIHByb3BlcnRpZXMgPyAhIXByb3BlcnRpZXMucG9zaXRpb24gOiB0aGlzLl9wcm9wZXJ0aWVzWzFdO1xuICAgICAgICB0aGlzLl9wcm9wZXJ0aWVzWzJdID0gJ3JvdGF0aW9uJyBpbiBwcm9wZXJ0aWVzID8gISFwcm9wZXJ0aWVzLnJvdGF0aW9uIDogdGhpcy5fcHJvcGVydGllc1syXTtcbiAgICAgICAgdGhpcy5fcHJvcGVydGllc1szXSA9ICd1dnMnIGluIHByb3BlcnRpZXMgPyAhIXByb3BlcnRpZXMudXZzIDogdGhpcy5fcHJvcGVydGllc1szXTtcbiAgICAgICAgdGhpcy5fcHJvcGVydGllc1s0XSA9ICdhbHBoYScgaW4gcHJvcGVydGllcyA/ICEhcHJvcGVydGllcy5hbHBoYSA6IHRoaXMuX3Byb3BlcnRpZXNbNF07XG4gICAgfVxufTtcblxuLyoqXG4gKiBVcGRhdGVzIHRoZSBvYmplY3QgdHJhbnNmb3JtIGZvciByZW5kZXJpbmdcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5QYXJ0aWNsZUNvbnRhaW5lci5wcm90b3R5cGUudXBkYXRlVHJhbnNmb3JtID0gZnVuY3Rpb24gKClcbntcblxuICAgIC8vIFRPRE8gZG9uJ3QgbmVlZCB0byFcbiAgICB0aGlzLmRpc3BsYXlPYmplY3RVcGRhdGVUcmFuc2Zvcm0oKTtcbiAgICAvLyAgUElYSS5Db250YWluZXIucHJvdG90eXBlLnVwZGF0ZVRyYW5zZm9ybS5jYWxsKCB0aGlzICk7XG59O1xuXG4vKipcbiAqIFJlbmRlcnMgdGhlIGNvbnRhaW5lciB1c2luZyB0aGUgV2ViR0wgcmVuZGVyZXJcbiAqXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcn0gVGhlIHdlYmdsIHJlbmRlcmVyXG4gKiBAcHJpdmF0ZVxuICovXG5QYXJ0aWNsZUNvbnRhaW5lci5wcm90b3R5cGUucmVuZGVyV2ViR0wgPSBmdW5jdGlvbiAocmVuZGVyZXIpXG57XG4gICAgaWYgKCF0aGlzLnZpc2libGUgfHwgdGhpcy53b3JsZEFscGhhIDw9IDAgfHwgIXRoaXMuY2hpbGRyZW4ubGVuZ3RoIHx8ICF0aGlzLnJlbmRlcmFibGUpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgcmVuZGVyZXIuc2V0T2JqZWN0UmVuZGVyZXIoIHJlbmRlcmVyLnBsdWdpbnMucGFydGljbGUgKTtcbiAgICByZW5kZXJlci5wbHVnaW5zLnBhcnRpY2xlLnJlbmRlciggdGhpcyApO1xufTtcblxuLyoqXG4gKiBTZXQgdGhlIGZsYWcgdGhhdCBzdGF0aWMgZGF0YSBzaG91bGQgYmUgdXBkYXRlZCB0byB0cnVlXG4gKlxuICogQHByaXZhdGVcbiAqL1xuUGFydGljbGVDb250YWluZXIucHJvdG90eXBlLm9uQ2hpbGRyZW5DaGFuZ2UgPSBmdW5jdGlvbiAoc21hbGxlc3RDaGlsZEluZGV4KVxue1xuICAgIHZhciBidWZmZXJJbmRleCA9IE1hdGguZmxvb3Ioc21hbGxlc3RDaGlsZEluZGV4IC8gdGhpcy5fYmF0Y2hTaXplKTtcbiAgICBpZiAoYnVmZmVySW5kZXggPCB0aGlzLl9idWZmZXJUb1VwZGF0ZSkge1xuICAgICAgICB0aGlzLl9idWZmZXJUb1VwZGF0ZSA9IGJ1ZmZlckluZGV4O1xuICAgIH1cbn07XG5cbi8qKlxuICogUmVuZGVycyB0aGUgb2JqZWN0IHVzaW5nIHRoZSBDYW52YXMgcmVuZGVyZXJcbiAqXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuQ2FudmFzUmVuZGVyZXJ9IFRoZSBjYW52YXMgcmVuZGVyZXJcbiAqIEBwcml2YXRlXG4gKi9cblBhcnRpY2xlQ29udGFpbmVyLnByb3RvdHlwZS5yZW5kZXJDYW52YXMgPSBmdW5jdGlvbiAocmVuZGVyZXIpXG57XG4gICAgaWYgKCF0aGlzLnZpc2libGUgfHwgdGhpcy53b3JsZEFscGhhIDw9IDAgfHwgIXRoaXMuY2hpbGRyZW4ubGVuZ3RoIHx8ICF0aGlzLnJlbmRlcmFibGUpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFyIGNvbnRleHQgPSByZW5kZXJlci5jb250ZXh0O1xuICAgIHZhciB0cmFuc2Zvcm0gPSB0aGlzLndvcmxkVHJhbnNmb3JtO1xuICAgIHZhciBpc1JvdGF0ZWQgPSB0cnVlO1xuXG4gICAgdmFyIHBvc2l0aW9uWCA9IDA7XG4gICAgdmFyIHBvc2l0aW9uWSA9IDA7XG5cbiAgICB2YXIgZmluYWxXaWR0aCA9IDA7XG4gICAgdmFyIGZpbmFsSGVpZ2h0ID0gMDtcblxuICAgIHZhciBjb21wb3NpdGVPcGVyYXRpb24gPSByZW5kZXJlci5ibGVuZE1vZGVzW3RoaXMuYmxlbmRNb2RlXTtcbiAgICBpZiAoY29tcG9zaXRlT3BlcmF0aW9uICE9PSBjb250ZXh0Lmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbilcbiAgICB7XG4gICAgICAgIGNvbnRleHQuZ2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uID0gY29tcG9zaXRlT3BlcmF0aW9uO1xuICAgIH1cblxuICAgIGNvbnRleHQuZ2xvYmFsQWxwaGEgPSB0aGlzLndvcmxkQWxwaGE7XG5cbiAgICB0aGlzLmRpc3BsYXlPYmplY3RVcGRhdGVUcmFuc2Zvcm0oKTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5jaGlsZHJlbi5sZW5ndGg7ICsraSlcbiAgICB7XG4gICAgICAgIHZhciBjaGlsZCA9IHRoaXMuY2hpbGRyZW5baV07XG5cbiAgICAgICAgaWYgKCFjaGlsZC52aXNpYmxlKVxuICAgICAgICB7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBmcmFtZSA9IGNoaWxkLnRleHR1cmUuZnJhbWU7XG5cbiAgICAgICAgY29udGV4dC5nbG9iYWxBbHBoYSA9IHRoaXMud29ybGRBbHBoYSAqIGNoaWxkLmFscGhhO1xuXG4gICAgICAgIGlmIChjaGlsZC5yb3RhdGlvbiAlIChNYXRoLlBJICogMikgPT09IDApXG4gICAgICAgIHtcbiAgICAgICAgICAgIC8vIHRoaXMgaXMgdGhlIGZhc3Rlc3QgIHdheSB0byBvcHRpbWlzZSEgLSBpZiByb3RhdGlvbiBpcyAwIHRoZW4gd2UgY2FuIGF2b2lkIGFueSBraW5kIG9mIHNldFRyYW5zZm9ybSBjYWxsXG4gICAgICAgICAgICBpZiAoaXNSb3RhdGVkKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGNvbnRleHQuc2V0VHJhbnNmb3JtKFxuICAgICAgICAgICAgICAgICAgICB0cmFuc2Zvcm0uYSxcbiAgICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtLmIsXG4gICAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybS5jLFxuICAgICAgICAgICAgICAgICAgICB0cmFuc2Zvcm0uZCxcbiAgICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtLnR4LFxuICAgICAgICAgICAgICAgICAgICB0cmFuc2Zvcm0udHlcbiAgICAgICAgICAgICAgICApO1xuXG4gICAgICAgICAgICAgICAgaXNSb3RhdGVkID0gZmFsc2U7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHBvc2l0aW9uWCA9ICgoY2hpbGQuYW5jaG9yLngpICogKC1mcmFtZS53aWR0aCAqIGNoaWxkLnNjYWxlLngpICsgY2hpbGQucG9zaXRpb24ueCAgKyAwLjUpO1xuICAgICAgICAgICAgcG9zaXRpb25ZID0gKChjaGlsZC5hbmNob3IueSkgKiAoLWZyYW1lLmhlaWdodCAqIGNoaWxkLnNjYWxlLnkpICsgY2hpbGQucG9zaXRpb24ueSAgKyAwLjUpO1xuXG4gICAgICAgICAgICBmaW5hbFdpZHRoID0gZnJhbWUud2lkdGggKiBjaGlsZC5zY2FsZS54O1xuICAgICAgICAgICAgZmluYWxIZWlnaHQgPSBmcmFtZS5oZWlnaHQgKiBjaGlsZC5zY2FsZS55O1xuXG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgICBpZiAoIWlzUm90YXRlZClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBpc1JvdGF0ZWQgPSB0cnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjaGlsZC5kaXNwbGF5T2JqZWN0VXBkYXRlVHJhbnNmb3JtKCk7XG5cbiAgICAgICAgICAgIHZhciBjaGlsZFRyYW5zZm9ybSA9IGNoaWxkLndvcmxkVHJhbnNmb3JtO1xuXG4gICAgICAgICAgICBpZiAocmVuZGVyZXIucm91bmRQaXhlbHMpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29udGV4dC5zZXRUcmFuc2Zvcm0oXG4gICAgICAgICAgICAgICAgICAgIGNoaWxkVHJhbnNmb3JtLmEsXG4gICAgICAgICAgICAgICAgICAgIGNoaWxkVHJhbnNmb3JtLmIsXG4gICAgICAgICAgICAgICAgICAgIGNoaWxkVHJhbnNmb3JtLmMsXG4gICAgICAgICAgICAgICAgICAgIGNoaWxkVHJhbnNmb3JtLmQsXG4gICAgICAgICAgICAgICAgICAgIGNoaWxkVHJhbnNmb3JtLnR4IHwgMCxcbiAgICAgICAgICAgICAgICAgICAgY2hpbGRUcmFuc2Zvcm0udHkgfCAwXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb250ZXh0LnNldFRyYW5zZm9ybShcbiAgICAgICAgICAgICAgICAgICAgY2hpbGRUcmFuc2Zvcm0uYSxcbiAgICAgICAgICAgICAgICAgICAgY2hpbGRUcmFuc2Zvcm0uYixcbiAgICAgICAgICAgICAgICAgICAgY2hpbGRUcmFuc2Zvcm0uYyxcbiAgICAgICAgICAgICAgICAgICAgY2hpbGRUcmFuc2Zvcm0uZCxcbiAgICAgICAgICAgICAgICAgICAgY2hpbGRUcmFuc2Zvcm0udHgsXG4gICAgICAgICAgICAgICAgICAgIGNoaWxkVHJhbnNmb3JtLnR5XG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcG9zaXRpb25YID0gKChjaGlsZC5hbmNob3IueCkgKiAoLWZyYW1lLndpZHRoKSArIDAuNSk7XG4gICAgICAgICAgICBwb3NpdGlvblkgPSAoKGNoaWxkLmFuY2hvci55KSAqICgtZnJhbWUuaGVpZ2h0KSArIDAuNSk7XG5cbiAgICAgICAgICAgIGZpbmFsV2lkdGggPSBmcmFtZS53aWR0aDtcbiAgICAgICAgICAgIGZpbmFsSGVpZ2h0ID0gZnJhbWUuaGVpZ2h0O1xuICAgICAgICB9XG5cbiAgICAgICAgY29udGV4dC5kcmF3SW1hZ2UoXG4gICAgICAgICAgICBjaGlsZC50ZXh0dXJlLmJhc2VUZXh0dXJlLnNvdXJjZSxcbiAgICAgICAgICAgIGZyYW1lLngsXG4gICAgICAgICAgICBmcmFtZS55LFxuICAgICAgICAgICAgZnJhbWUud2lkdGgsXG4gICAgICAgICAgICBmcmFtZS5oZWlnaHQsXG4gICAgICAgICAgICBwb3NpdGlvblgsXG4gICAgICAgICAgICBwb3NpdGlvblksXG4gICAgICAgICAgICBmaW5hbFdpZHRoLFxuICAgICAgICAgICAgZmluYWxIZWlnaHRcbiAgICAgICAgKTtcbiAgICB9XG59O1xuXG4vKipcbiAqIERlc3Ryb3lzIHRoZSBjb250YWluZXJcbiAqXG4gKiBAcGFyYW0gW2Rlc3Ryb3lDaGlsZHJlbj1mYWxzZV0ge2Jvb2xlYW59IGlmIHNldCB0byB0cnVlLCBhbGwgdGhlIGNoaWxkcmVuIHdpbGwgaGF2ZSB0aGVpciBkZXN0cm95IG1ldGhvZCBjYWxsZWQgYXMgd2VsbFxuICovXG5QYXJ0aWNsZUNvbnRhaW5lci5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uICgpIHtcbiAgICBDb250YWluZXIucHJvdG90eXBlLmRlc3Ryb3kuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcblxuICAgIGlmICh0aGlzLl9idWZmZXJzKSB7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5fYnVmZmVycy5sZW5ndGg7ICsraSkge1xuICAgICAgICAgICAgdGhpcy5fYnVmZmVyc1tpXS5kZXN0cm95KCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLl9wcm9wZXJ0aWVzID0gbnVsbDtcbiAgICB0aGlzLl9idWZmZXJzID0gbnVsbDtcbn07XG4iLCJcbi8qKlxuICogQGF1dGhvciBNYXQgR3JvdmVzXG4gKlxuICogQmlnIHRoYW5rcyB0byB0aGUgdmVyeSBjbGV2ZXIgTWF0dCBEZXNMYXVyaWVycyA8bWF0dGRlc2w+IGh0dHBzOi8vZ2l0aHViLmNvbS9tYXR0ZGVzbC9cbiAqIGZvciBjcmVhdGluZyB0aGUgb3JpZ2luYWwgcGl4aSB2ZXJzaW9uIVxuICogQWxzbyBhIHRoYW5rcyB0byBodHRwczovL2dpdGh1Yi5jb20vYmNoZXZhbGllciBmb3IgdHdlYWtpbmcgdGhlIHRpbnQgYW5kIGFscGhhIHNvIHRoYXQgdGhleSBub3cgc2hhcmUgNCBieXRlcyBvbiB0aGUgdmVydGV4IGJ1ZmZlclxuICpcbiAqIEhlYXZpbHkgaW5zcGlyZWQgYnkgTGliR0RYJ3MgUGFydGljbGVCdWZmZXI6XG4gKiBodHRwczovL2dpdGh1Yi5jb20vbGliZ2R4L2xpYmdkeC9ibG9iL21hc3Rlci9nZHgvc3JjL2NvbS9iYWRsb2dpYy9nZHgvZ3JhcGhpY3MvZzJkL1BhcnRpY2xlQnVmZmVyLmphdmFcbiAqL1xuXG4vKipcbiAqIFRoZSBwYXJ0aWNsZSBidWZmZXIgbWFuYWdlcyB0aGUgc3RhdGljIGFuZCBkeW5hbWljIGJ1ZmZlcnMgZm9yIGEgcGFydGljbGUgY29udGFpbmVyLlxuICpcbiAqIEBjbGFzc1xuICogQHByaXZhdGVcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKi9cbmZ1bmN0aW9uIFBhcnRpY2xlQnVmZmVyKGdsLCBwcm9wZXJ0aWVzLCBkeW5hbWljUHJvcGVydHlGbGFncywgc2l6ZSlcbntcbiAgICAvKipcbiAgICAgKiBUaGUgY3VycmVudCBXZWJHTCBkcmF3aW5nIGNvbnRleHQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtXZWJHTFJlbmRlcmluZ0NvbnRleHR9XG4gICAgICovXG4gICAgdGhpcy5nbCA9IGdsO1xuXG4gICAgLyoqXG4gICAgICogU2l6ZSBvZiBhIHNpbmdsZSB2ZXJ0ZXguXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy52ZXJ0U2l6ZSA9IDI7XG5cbiAgICAvKipcbiAgICAgKiBTaXplIG9mIGEgc2luZ2xlIHZlcnRleCBpbiBieXRlcy5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLnZlcnRCeXRlU2l6ZSA9IHRoaXMudmVydFNpemUgKiA0O1xuXG4gICAgLyoqXG4gICAgICogVGhlIG51bWJlciBvZiBwYXJ0aWNsZXMgdGhlIGJ1ZmZlciBjYW4gaG9sZFxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMuc2l6ZSA9IHNpemU7XG5cbiAgICAvKipcbiAgICAgKiBBIGxpc3Qgb2YgdGhlIHByb3BlcnRpZXMgdGhhdCBhcmUgZHluYW1pYy5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge29iamVjdFtdfVxuICAgICAqL1xuICAgIHRoaXMuZHluYW1pY1Byb3BlcnRpZXMgPSBbXTtcblxuICAgIC8qKlxuICAgICAqIEEgbGlzdCBvZiB0aGUgcHJvcGVydGllcyB0aGF0IGFyZSBzdGF0aWMuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtvYmplY3RbXX1cbiAgICAgKi9cbiAgICB0aGlzLnN0YXRpY1Byb3BlcnRpZXMgPSBbXTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcGVydGllcy5sZW5ndGg7IGkrKylcbiAgICB7XG4gICAgICAgIHZhciBwcm9wZXJ0eSA9IHByb3BlcnRpZXNbaV07XG5cbiAgICAgICAgaWYoZHluYW1pY1Byb3BlcnR5RmxhZ3NbaV0pXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuZHluYW1pY1Byb3BlcnRpZXMucHVzaChwcm9wZXJ0eSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnN0YXRpY1Byb3BlcnRpZXMucHVzaChwcm9wZXJ0eSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLnN0YXRpY1N0cmlkZSA9IDA7XG4gICAgdGhpcy5zdGF0aWNCdWZmZXIgPSBudWxsO1xuICAgIHRoaXMuc3RhdGljRGF0YSA9IG51bGw7XG5cbiAgICB0aGlzLmR5bmFtaWNTdHJpZGUgPSAwO1xuICAgIHRoaXMuZHluYW1pY0J1ZmZlciA9IG51bGw7XG4gICAgdGhpcy5keW5hbWljRGF0YSA9IG51bGw7XG5cbiAgICB0aGlzLmluaXRCdWZmZXJzKCk7XG5cbn1cblxuUGFydGljbGVCdWZmZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gUGFydGljbGVCdWZmZXI7XG5tb2R1bGUuZXhwb3J0cyA9IFBhcnRpY2xlQnVmZmVyO1xuXG4vKipcbiAqIFNldHMgdXAgdGhlIHJlbmRlcmVyIGNvbnRleHQgYW5kIG5lY2Vzc2FyeSBidWZmZXJzLlxuICpcbiAqIEBwcml2YXRlXG4gKi9cblBhcnRpY2xlQnVmZmVyLnByb3RvdHlwZS5pbml0QnVmZmVycyA9IGZ1bmN0aW9uICgpXG57XG4gICAgdmFyIGdsID0gdGhpcy5nbDtcbiAgICB2YXIgaTtcbiAgICB2YXIgcHJvcGVydHk7XG5cbiAgICB2YXIgZHluYW1pY09mZnNldCA9IDA7XG4gICAgdGhpcy5keW5hbWljU3RyaWRlID0gMDtcblxuICAgIGZvciAoaSA9IDA7IGkgPCB0aGlzLmR5bmFtaWNQcm9wZXJ0aWVzLmxlbmd0aDsgaSsrKVxuICAgIHtcbiAgICAgICAgcHJvcGVydHkgPSB0aGlzLmR5bmFtaWNQcm9wZXJ0aWVzW2ldO1xuXG4gICAgICAgIHByb3BlcnR5Lm9mZnNldCA9IGR5bmFtaWNPZmZzZXQ7XG4gICAgICAgIGR5bmFtaWNPZmZzZXQgKz0gcHJvcGVydHkuc2l6ZTtcbiAgICAgICAgdGhpcy5keW5hbWljU3RyaWRlICs9IHByb3BlcnR5LnNpemU7XG4gICAgfVxuXG4gICAgdGhpcy5keW5hbWljRGF0YSA9IG5ldyBGbG9hdDMyQXJyYXkoIHRoaXMuc2l6ZSAqIHRoaXMuZHluYW1pY1N0cmlkZSAqIDQpO1xuICAgIHRoaXMuZHluYW1pY0J1ZmZlciA9IGdsLmNyZWF0ZUJ1ZmZlcigpO1xuXG4gICAgZ2wuYmluZEJ1ZmZlcihnbC5BUlJBWV9CVUZGRVIsIHRoaXMuZHluYW1pY0J1ZmZlcik7XG4gICAgZ2wuYnVmZmVyRGF0YShnbC5BUlJBWV9CVUZGRVIsIHRoaXMuZHluYW1pY0RhdGEsIGdsLkRZTkFNSUNfRFJBVyk7XG5cblxuICAgIC8vIHN0YXRpYyAvL1xuICAgIHZhciBzdGF0aWNPZmZzZXQgPSAwO1xuICAgIHRoaXMuc3RhdGljU3RyaWRlID0gMDtcblxuICAgIGZvciAoaSA9IDA7IGkgPCB0aGlzLnN0YXRpY1Byb3BlcnRpZXMubGVuZ3RoOyBpKyspXG4gICAge1xuICAgICAgICBwcm9wZXJ0eSA9IHRoaXMuc3RhdGljUHJvcGVydGllc1tpXTtcblxuICAgICAgICBwcm9wZXJ0eS5vZmZzZXQgPSBzdGF0aWNPZmZzZXQ7XG4gICAgICAgIHN0YXRpY09mZnNldCArPSBwcm9wZXJ0eS5zaXplO1xuICAgICAgICB0aGlzLnN0YXRpY1N0cmlkZSArPSBwcm9wZXJ0eS5zaXplO1xuICAgIH1cblxuICAgIHRoaXMuc3RhdGljRGF0YSA9IG5ldyBGbG9hdDMyQXJyYXkoIHRoaXMuc2l6ZSAqIHRoaXMuc3RhdGljU3RyaWRlICogNCk7XG4gICAgdGhpcy5zdGF0aWNCdWZmZXIgPSBnbC5jcmVhdGVCdWZmZXIoKTtcblxuICAgIGdsLmJpbmRCdWZmZXIoZ2wuQVJSQVlfQlVGRkVSLCB0aGlzLnN0YXRpY0J1ZmZlcik7XG4gICAgZ2wuYnVmZmVyRGF0YShnbC5BUlJBWV9CVUZGRVIsIHRoaXMuc3RhdGljRGF0YSwgZ2wuRFlOQU1JQ19EUkFXKTtcbn07XG5cbi8qKlxuICogVXBsb2FkcyB0aGUgZHluYW1pYyBwcm9wZXJ0aWVzLlxuICpcbiAqL1xuUGFydGljbGVCdWZmZXIucHJvdG90eXBlLnVwbG9hZER5bmFtaWMgPSBmdW5jdGlvbihjaGlsZHJlbiwgc3RhcnRJbmRleCwgYW1vdW50KVxue1xuICAgIHZhciBnbCA9IHRoaXMuZ2w7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuZHluYW1pY1Byb3BlcnRpZXMubGVuZ3RoOyBpKyspXG4gICAge1xuICAgICAgICB2YXIgcHJvcGVydHkgPSB0aGlzLmR5bmFtaWNQcm9wZXJ0aWVzW2ldO1xuICAgICAgICBwcm9wZXJ0eS51cGxvYWRGdW5jdGlvbihjaGlsZHJlbiwgc3RhcnRJbmRleCwgYW1vdW50LCB0aGlzLmR5bmFtaWNEYXRhLCB0aGlzLmR5bmFtaWNTdHJpZGUsIHByb3BlcnR5Lm9mZnNldCk7XG4gICAgfVxuXG4gICAgZ2wuYmluZEJ1ZmZlcihnbC5BUlJBWV9CVUZGRVIsIHRoaXMuZHluYW1pY0J1ZmZlcik7XG4gICAgZ2wuYnVmZmVyU3ViRGF0YShnbC5BUlJBWV9CVUZGRVIsIDAsIHRoaXMuZHluYW1pY0RhdGEpO1xufTtcblxuLyoqXG4gKiBVcGxvYWRzIHRoZSBzdGF0aWMgcHJvcGVydGllcy5cbiAqXG4gKi9cblBhcnRpY2xlQnVmZmVyLnByb3RvdHlwZS51cGxvYWRTdGF0aWMgPSBmdW5jdGlvbihjaGlsZHJlbiwgc3RhcnRJbmRleCwgYW1vdW50KVxue1xuICAgIHZhciBnbCA9IHRoaXMuZ2w7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuc3RhdGljUHJvcGVydGllcy5sZW5ndGg7IGkrKylcbiAgICB7XG4gICAgICAgIHZhciBwcm9wZXJ0eSA9IHRoaXMuc3RhdGljUHJvcGVydGllc1tpXTtcbiAgICAgICAgcHJvcGVydHkudXBsb2FkRnVuY3Rpb24oY2hpbGRyZW4sIHN0YXJ0SW5kZXgsIGFtb3VudCwgdGhpcy5zdGF0aWNEYXRhLCB0aGlzLnN0YXRpY1N0cmlkZSwgcHJvcGVydHkub2Zmc2V0KTtcbiAgICB9XG5cbiAgICBnbC5iaW5kQnVmZmVyKGdsLkFSUkFZX0JVRkZFUiwgdGhpcy5zdGF0aWNCdWZmZXIpO1xuICAgIGdsLmJ1ZmZlclN1YkRhdGEoZ2wuQVJSQVlfQlVGRkVSLCAwLCB0aGlzLnN0YXRpY0RhdGEpO1xufTtcblxuLyoqXG4gKiBCaW5kcyB0aGUgYnVmZmVycyB0byB0aGUgR1BVXG4gKlxuICovXG5QYXJ0aWNsZUJ1ZmZlci5wcm90b3R5cGUuYmluZCA9IGZ1bmN0aW9uICgpXG57XG4gICAgdmFyIGdsID0gdGhpcy5nbDtcbiAgICB2YXIgaSwgcHJvcGVydHk7XG5cbiAgICBnbC5iaW5kQnVmZmVyKGdsLkFSUkFZX0JVRkZFUiwgdGhpcy5keW5hbWljQnVmZmVyKTtcblxuICAgIGZvciAoaSA9IDA7IGkgPCB0aGlzLmR5bmFtaWNQcm9wZXJ0aWVzLmxlbmd0aDsgaSsrKVxuICAgIHtcbiAgICAgICAgcHJvcGVydHkgPSB0aGlzLmR5bmFtaWNQcm9wZXJ0aWVzW2ldO1xuICAgICAgICBnbC52ZXJ0ZXhBdHRyaWJQb2ludGVyKHByb3BlcnR5LmF0dHJpYnV0ZSwgcHJvcGVydHkuc2l6ZSwgZ2wuRkxPQVQsIGZhbHNlLCB0aGlzLmR5bmFtaWNTdHJpZGUgKiA0LCBwcm9wZXJ0eS5vZmZzZXQgKiA0KTtcbiAgICB9XG5cbiAgICBnbC5iaW5kQnVmZmVyKGdsLkFSUkFZX0JVRkZFUiwgdGhpcy5zdGF0aWNCdWZmZXIpO1xuXG4gICAgZm9yIChpID0gMDsgaSA8IHRoaXMuc3RhdGljUHJvcGVydGllcy5sZW5ndGg7IGkrKylcbiAgICB7XG4gICAgICAgIHByb3BlcnR5ID0gdGhpcy5zdGF0aWNQcm9wZXJ0aWVzW2ldO1xuICAgICAgICBnbC52ZXJ0ZXhBdHRyaWJQb2ludGVyKHByb3BlcnR5LmF0dHJpYnV0ZSwgcHJvcGVydHkuc2l6ZSwgZ2wuRkxPQVQsIGZhbHNlLCB0aGlzLnN0YXRpY1N0cmlkZSAqIDQsIHByb3BlcnR5Lm9mZnNldCAqIDQpO1xuICAgIH1cbn07XG5cbi8qKlxuICogRGVzdHJveXMgdGhlIFBhcnRpY2xlQnVmZmVyLlxuICpcbiAqL1xuUGFydGljbGVCdWZmZXIucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoKVxue1xuICAgIHRoaXMuZHluYW1pY1Byb3BlcnRpZXMgPSBudWxsO1xuICAgIHRoaXMuZHluYW1pY0RhdGEgPSBudWxsO1xuICAgIHRoaXMuZ2wuZGVsZXRlQnVmZmVyKHRoaXMuZHluYW1pY0J1ZmZlcik7XG5cbiAgICB0aGlzLnN0YXRpY1Byb3BlcnRpZXMgPSBudWxsO1xuICAgIHRoaXMuc3RhdGljRGF0YSA9IG51bGw7XG4gICAgdGhpcy5nbC5kZWxldGVCdWZmZXIodGhpcy5zdGF0aWNCdWZmZXIpO1xufTtcbiIsInZhciBPYmplY3RSZW5kZXJlciA9IHJlcXVpcmUoJy4uLy4uL3JlbmRlcmVycy93ZWJnbC91dGlscy9PYmplY3RSZW5kZXJlcicpLFxuICAgIFdlYkdMUmVuZGVyZXIgPSByZXF1aXJlKCcuLi8uLi9yZW5kZXJlcnMvd2ViZ2wvV2ViR0xSZW5kZXJlcicpLFxuICAgIFBhcnRpY2xlU2hhZGVyID0gcmVxdWlyZSgnLi9QYXJ0aWNsZVNoYWRlcicpLFxuICAgIFBhcnRpY2xlQnVmZmVyID0gcmVxdWlyZSgnLi9QYXJ0aWNsZUJ1ZmZlcicpLFxuICAgIG1hdGggICAgICAgICAgICA9IHJlcXVpcmUoJy4uLy4uL21hdGgnKTtcblxuLyoqXG4gKiBAYXV0aG9yIE1hdCBHcm92ZXNcbiAqXG4gKiBCaWcgdGhhbmtzIHRvIHRoZSB2ZXJ5IGNsZXZlciBNYXR0IERlc0xhdXJpZXJzIDxtYXR0ZGVzbD4gaHR0cHM6Ly9naXRodWIuY29tL21hdHRkZXNsL1xuICogZm9yIGNyZWF0aW5nIHRoZSBvcmlnaW5hbCBwaXhpIHZlcnNpb24hXG4gKiBBbHNvIGEgdGhhbmtzIHRvIGh0dHBzOi8vZ2l0aHViLmNvbS9iY2hldmFsaWVyIGZvciB0d2Vha2luZyB0aGUgdGludCBhbmQgYWxwaGEgc28gdGhhdCB0aGV5IG5vdyBzaGFyZSA0IGJ5dGVzIG9uIHRoZSB2ZXJ0ZXggYnVmZmVyXG4gKlxuICogSGVhdmlseSBpbnNwaXJlZCBieSBMaWJHRFgncyBQYXJ0aWNsZVJlbmRlcmVyOlxuICogaHR0cHM6Ly9naXRodWIuY29tL2xpYmdkeC9saWJnZHgvYmxvYi9tYXN0ZXIvZ2R4L3NyYy9jb20vYmFkbG9naWMvZ2R4L2dyYXBoaWNzL2cyZC9QYXJ0aWNsZVJlbmRlcmVyLmphdmFcbiAqL1xuXG4vKipcbiAqXG4gKiBAY2xhc3NcbiAqIEBwcml2YXRlXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLldlYkdMUmVuZGVyZXJ9IFRoZSByZW5kZXJlciB0aGlzIHNwcml0ZSBiYXRjaCB3b3JrcyBmb3IuXG4gKi9cbmZ1bmN0aW9uIFBhcnRpY2xlUmVuZGVyZXIocmVuZGVyZXIpXG57XG4gICAgT2JqZWN0UmVuZGVyZXIuY2FsbCh0aGlzLCByZW5kZXJlcik7XG5cbiAgICAvLyA2NTUzNSBpcyBtYXggdmVydGV4IGluZGV4IGluIHRoZSBpbmRleCBidWZmZXIgKHNlZSBQYXJ0aWNsZVJlbmRlcmVyKVxuICAgIC8vIHNvIG1heCBudW1iZXIgb2YgcGFydGljbGVzIGlzIDY1NTM2IC8gNCA9IDE2Mzg0XG4gICAgLy8gYW5kIG1heCBudW1iZXIgb2YgZWxlbWVudCBpbiB0aGUgaW5kZXggYnVmZmVyIGlzIDE2Mzg0ICogNiA9IDk4MzA0XG4gICAgLy8gQ3JlYXRpbmcgYSBmdWxsIGluZGV4IGJ1ZmZlciwgb3ZlcmhlYWQgaXMgOTgzMDQgKiAyID0gMTk2S29cbiAgICB2YXIgbnVtSW5kaWNlcyA9IDk4MzA0O1xuXG4gICAgLyoqXG4gICAgICogSG9sZHMgdGhlIGluZGljZXNcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1VpbnQxNkFycmF5fVxuICAgICAqL1xuICAgIHRoaXMuaW5kaWNlcyA9IG5ldyBVaW50MTZBcnJheShudW1JbmRpY2VzKTtcblxuICAgIGZvciAodmFyIGk9MCwgaj0wOyBpIDwgbnVtSW5kaWNlczsgaSArPSA2LCBqICs9IDQpXG4gICAge1xuICAgICAgICB0aGlzLmluZGljZXNbaSArIDBdID0gaiArIDA7XG4gICAgICAgIHRoaXMuaW5kaWNlc1tpICsgMV0gPSBqICsgMTtcbiAgICAgICAgdGhpcy5pbmRpY2VzW2kgKyAyXSA9IGogKyAyO1xuICAgICAgICB0aGlzLmluZGljZXNbaSArIDNdID0gaiArIDA7XG4gICAgICAgIHRoaXMuaW5kaWNlc1tpICsgNF0gPSBqICsgMjtcbiAgICAgICAgdGhpcy5pbmRpY2VzW2kgKyA1XSA9IGogKyAzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoZSBkZWZhdWx0IHNoYWRlciB0aGF0IGlzIHVzZWQgaWYgYSBzcHJpdGUgZG9lc24ndCBoYXZlIGEgbW9yZSBzcGVjaWZpYyBvbmUuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlNoYWRlcn1cbiAgICAgKi9cbiAgICB0aGlzLnNoYWRlciA9IG51bGw7XG5cbiAgICB0aGlzLmluZGV4QnVmZmVyID0gbnVsbDtcblxuICAgIHRoaXMucHJvcGVydGllcyA9IG51bGw7XG5cbiAgICB0aGlzLnRlbXBNYXRyaXggPSBuZXcgbWF0aC5NYXRyaXgoKTtcbn1cblxuUGFydGljbGVSZW5kZXJlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKE9iamVjdFJlbmRlcmVyLnByb3RvdHlwZSk7XG5QYXJ0aWNsZVJlbmRlcmVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFBhcnRpY2xlUmVuZGVyZXI7XG5tb2R1bGUuZXhwb3J0cyA9IFBhcnRpY2xlUmVuZGVyZXI7XG5cbldlYkdMUmVuZGVyZXIucmVnaXN0ZXJQbHVnaW4oJ3BhcnRpY2xlJywgUGFydGljbGVSZW5kZXJlcik7XG5cbi8qKlxuICogV2hlbiB0aGVyZSBpcyBhIFdlYkdMIGNvbnRleHQgY2hhbmdlXG4gKlxuICogQHByaXZhdGVcbiAqL1xuUGFydGljbGVSZW5kZXJlci5wcm90b3R5cGUub25Db250ZXh0Q2hhbmdlID0gZnVuY3Rpb24gKClcbntcbiAgICB2YXIgZ2wgPSB0aGlzLnJlbmRlcmVyLmdsO1xuXG4gICAgLy8gc2V0dXAgZGVmYXVsdCBzaGFkZXJcbiAgICB0aGlzLnNoYWRlciA9IG5ldyBQYXJ0aWNsZVNoYWRlcih0aGlzLnJlbmRlcmVyLnNoYWRlck1hbmFnZXIpO1xuXG4gICAgdGhpcy5pbmRleEJ1ZmZlciA9IGdsLmNyZWF0ZUJ1ZmZlcigpO1xuXG4gICAgLy8gNjU1MzUgaXMgbWF4IGluZGV4LCBzbyA2NTUzNSAvIDYgPSAxMDkyMi5cblxuICAgIC8vdXBsb2FkIHRoZSBpbmRleCBkYXRhXG4gICAgZ2wuYmluZEJ1ZmZlcihnbC5FTEVNRU5UX0FSUkFZX0JVRkZFUiwgdGhpcy5pbmRleEJ1ZmZlcik7XG4gICAgZ2wuYnVmZmVyRGF0YShnbC5FTEVNRU5UX0FSUkFZX0JVRkZFUiwgdGhpcy5pbmRpY2VzLCBnbC5TVEFUSUNfRFJBVyk7XG5cbiAgICB0aGlzLnByb3BlcnRpZXMgPSBbXG4gICAgICAgIC8vIHZlcnRpY2VzRGF0YVxuICAgICAgICB7XG4gICAgICAgICAgICBhdHRyaWJ1dGU6dGhpcy5zaGFkZXIuYXR0cmlidXRlcy5hVmVydGV4UG9zaXRpb24sXG4gICAgICAgICAgICBzaXplOjIsXG4gICAgICAgICAgICB1cGxvYWRGdW5jdGlvbjp0aGlzLnVwbG9hZFZlcnRpY2VzLFxuICAgICAgICAgICAgb2Zmc2V0OjBcbiAgICAgICAgfSxcbiAgICAgICAgLy8gcG9zaXRpb25EYXRhXG4gICAgICAgIHtcbiAgICAgICAgICAgIGF0dHJpYnV0ZTp0aGlzLnNoYWRlci5hdHRyaWJ1dGVzLmFQb3NpdGlvbkNvb3JkLFxuICAgICAgICAgICAgc2l6ZToyLFxuICAgICAgICAgICAgdXBsb2FkRnVuY3Rpb246dGhpcy51cGxvYWRQb3NpdGlvbixcbiAgICAgICAgICAgIG9mZnNldDowXG4gICAgICAgIH0sXG4gICAgICAgIC8vIHJvdGF0aW9uRGF0YVxuICAgICAgICB7XG4gICAgICAgICAgICBhdHRyaWJ1dGU6dGhpcy5zaGFkZXIuYXR0cmlidXRlcy5hUm90YXRpb24sXG4gICAgICAgICAgICBzaXplOjEsXG4gICAgICAgICAgICB1cGxvYWRGdW5jdGlvbjp0aGlzLnVwbG9hZFJvdGF0aW9uLFxuICAgICAgICAgICAgb2Zmc2V0OjBcbiAgICAgICAgfSxcbiAgICAgICAgLy8gdXZzRGF0YVxuICAgICAgICB7XG4gICAgICAgICAgICBhdHRyaWJ1dGU6dGhpcy5zaGFkZXIuYXR0cmlidXRlcy5hVGV4dHVyZUNvb3JkLFxuICAgICAgICAgICAgc2l6ZToyLFxuICAgICAgICAgICAgdXBsb2FkRnVuY3Rpb246dGhpcy51cGxvYWRVdnMsXG4gICAgICAgICAgICBvZmZzZXQ6MFxuICAgICAgICB9LFxuICAgICAgICAvLyBhbHBoYURhdGFcbiAgICAgICAge1xuICAgICAgICAgICAgYXR0cmlidXRlOnRoaXMuc2hhZGVyLmF0dHJpYnV0ZXMuYUNvbG9yLFxuICAgICAgICAgICAgc2l6ZToxLFxuICAgICAgICAgICAgdXBsb2FkRnVuY3Rpb246dGhpcy51cGxvYWRBbHBoYSxcbiAgICAgICAgICAgIG9mZnNldDowXG4gICAgICAgIH1cbiAgICBdO1xufTtcblxuLyoqXG4gKiBTdGFydHMgYSBuZXcgcGFydGljbGUgYmF0Y2guXG4gKlxuICovXG5QYXJ0aWNsZVJlbmRlcmVyLnByb3RvdHlwZS5zdGFydCA9IGZ1bmN0aW9uICgpXG57XG4gICAgdmFyIGdsID0gdGhpcy5yZW5kZXJlci5nbDtcblxuICAgIC8vIGJpbmQgdGhlIG1haW4gdGV4dHVyZVxuICAgIGdsLmFjdGl2ZVRleHR1cmUoZ2wuVEVYVFVSRTApO1xuXG4gICAgLy8gYmluZCB0aGUgYnVmZmVyc1xuXG4gICAgZ2wuYmluZEJ1ZmZlcihnbC5FTEVNRU5UX0FSUkFZX0JVRkZFUiwgdGhpcy5pbmRleEJ1ZmZlcik7XG5cbiAgICB2YXIgc2hhZGVyID0gdGhpcy5zaGFkZXI7XG5cbiAgICB0aGlzLnJlbmRlcmVyLnNoYWRlck1hbmFnZXIuc2V0U2hhZGVyKHNoYWRlcik7XG59O1xuXG5cbi8qKlxuICogUmVuZGVycyB0aGUgcGFydGljbGUgY29udGFpbmVyIG9iamVjdC5cbiAqXG4gKiBAcGFyYW0gY29udGFpbmVyIHtQSVhJLlBhcnRpY2xlQ29udGFpbmVyfSBUaGUgY29udGFpbmVyIHRvIHJlbmRlciB1c2luZyB0aGlzIFBhcnRpY2xlUmVuZGVyZXJcbiAqL1xuUGFydGljbGVSZW5kZXJlci5wcm90b3R5cGUucmVuZGVyID0gZnVuY3Rpb24gKGNvbnRhaW5lcilcbntcbiAgICB2YXIgY2hpbGRyZW4gPSBjb250YWluZXIuY2hpbGRyZW4sXG4gICAgICAgIHRvdGFsQ2hpbGRyZW4gPSBjaGlsZHJlbi5sZW5ndGgsXG4gICAgICAgIG1heFNpemUgPSBjb250YWluZXIuX21heFNpemUsXG4gICAgICAgIGJhdGNoU2l6ZSA9IGNvbnRhaW5lci5fYmF0Y2hTaXplO1xuXG4gICAgaWYodG90YWxDaGlsZHJlbiA9PT0gMClcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgZWxzZSBpZih0b3RhbENoaWxkcmVuID4gbWF4U2l6ZSlcbiAgICB7XG4gICAgICAgIHRvdGFsQ2hpbGRyZW4gPSBtYXhTaXplO1xuICAgIH1cblxuICAgIGlmKCFjb250YWluZXIuX2J1ZmZlcnMpXG4gICAge1xuICAgICAgICBjb250YWluZXIuX2J1ZmZlcnMgPSB0aGlzLmdlbmVyYXRlQnVmZmVycyggY29udGFpbmVyICk7XG4gICAgfVxuXG4gICAgLy8gaWYgdGhlIHV2cyBoYXZlIG5vdCB1cGRhdGVkIHRoZW4gbm8gcG9pbnQgcmVuZGVyaW5nIGp1c3QgeWV0IVxuICAgIHRoaXMucmVuZGVyZXIuYmxlbmRNb2RlTWFuYWdlci5zZXRCbGVuZE1vZGUoY29udGFpbmVyLmJsZW5kTW9kZSk7XG5cbiAgICB2YXIgZ2wgPSB0aGlzLnJlbmRlcmVyLmdsO1xuXG4gICAgdmFyIG0gPSAgY29udGFpbmVyLndvcmxkVHJhbnNmb3JtLmNvcHkoIHRoaXMudGVtcE1hdHJpeCApO1xuICAgIG0ucHJlcGVuZCggdGhpcy5yZW5kZXJlci5jdXJyZW50UmVuZGVyVGFyZ2V0LnByb2plY3Rpb25NYXRyaXggKTtcbiAgICBnbC51bmlmb3JtTWF0cml4M2Z2KHRoaXMuc2hhZGVyLnVuaWZvcm1zLnByb2plY3Rpb25NYXRyaXguX2xvY2F0aW9uLCBmYWxzZSwgbS50b0FycmF5KHRydWUpKTtcbiAgICBnbC51bmlmb3JtMWYodGhpcy5zaGFkZXIudW5pZm9ybXMudUFscGhhLl9sb2NhdGlvbiwgY29udGFpbmVyLndvcmxkQWxwaGEpO1xuXG5cbiAgICAvLyBtYWtlIHN1cmUgdGhlIHRleHR1cmUgaXMgYm91bmQuLlxuICAgIHZhciBiYXNlVGV4dHVyZSA9IGNoaWxkcmVuWzBdLl90ZXh0dXJlLmJhc2VUZXh0dXJlO1xuXG4gICAgaWYgKCFiYXNlVGV4dHVyZS5fZ2xUZXh0dXJlc1tnbC5pZF0pXG4gICAge1xuICAgICAgICAvLyBpZiB0aGUgdGV4dHVyZSBoYXMgbm90IHVwZGF0ZWQgdGhlbiBsZXRzIG5vdCB1cGxvYWQgYW55IHN0YXRpYyBwcm9wZXJ0aWVzXG4gICAgICAgIGlmKCF0aGlzLnJlbmRlcmVyLnVwZGF0ZVRleHR1cmUoYmFzZVRleHR1cmUpKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZighY29udGFpbmVyLl9wcm9wZXJ0aWVzWzBdIHx8ICFjb250YWluZXIuX3Byb3BlcnRpZXNbM10pXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNvbnRhaW5lci5fYnVmZmVyVG9VcGRhdGUgPSAwO1xuICAgICAgICB9XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIGdsLmJpbmRUZXh0dXJlKGdsLlRFWFRVUkVfMkQsIGJhc2VUZXh0dXJlLl9nbFRleHR1cmVzW2dsLmlkXSk7XG4gICAgfVxuXG4gICAgLy8gbm93IGxldHMgdXBsb2FkIGFuZCByZW5kZXIgdGhlIGJ1ZmZlcnMuLlxuICAgIGZvciAodmFyIGkgPSAwLCBqID0gMDsgaSA8IHRvdGFsQ2hpbGRyZW47IGkgKz0gYmF0Y2hTaXplLCBqICs9IDEpXG4gICAge1xuICAgICAgICB2YXIgYW1vdW50ID0gKCB0b3RhbENoaWxkcmVuIC0gaSk7XG4gICAgICAgIGlmKGFtb3VudCA+IGJhdGNoU2l6ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgYW1vdW50ID0gYmF0Y2hTaXplO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGJ1ZmZlciA9IGNvbnRhaW5lci5fYnVmZmVyc1tqXTtcblxuICAgICAgICAvLyB3ZSBhbHdheXMgdXBsb2FkIHRoZSBkeW5hbWljXG4gICAgICAgIGJ1ZmZlci51cGxvYWREeW5hbWljKGNoaWxkcmVuLCBpLCBhbW91bnQpO1xuXG4gICAgICAgIC8vIHdlIG9ubHkgdXBsb2FkIHRoZSBzdGF0aWMgY29udGVudCB3aGVuIHdlIGhhdmUgdG8hXG4gICAgICAgIGlmKGNvbnRhaW5lci5fYnVmZmVyVG9VcGRhdGUgPT09IGopXG4gICAgICAgIHtcbiAgICAgICAgICAgIGJ1ZmZlci51cGxvYWRTdGF0aWMoY2hpbGRyZW4sIGksIGFtb3VudCk7XG4gICAgICAgICAgICBjb250YWluZXIuX2J1ZmZlclRvVXBkYXRlID0gaiArIDE7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBiaW5kIHRoZSBidWZmZXJcbiAgICAgICAgYnVmZmVyLmJpbmQoIHRoaXMuc2hhZGVyICk7XG5cbiAgICAgICAgIC8vIG5vdyBkcmF3IHRob3NlIHN1Y2thcyFcbiAgICAgICAgZ2wuZHJhd0VsZW1lbnRzKGdsLlRSSUFOR0xFUywgYW1vdW50ICogNiwgZ2wuVU5TSUdORURfU0hPUlQsIDApO1xuICAgICAgICB0aGlzLnJlbmRlcmVyLmRyYXdDb3VudCsrO1xuICAgIH1cbn07XG5cbi8qKlxuICogQ3JlYXRlcyBvbmUgcGFydGljbGUgYnVmZmVyIGZvciBlYWNoIGNoaWxkIGluIHRoZSBjb250YWluZXIgd2Ugd2FudCB0byByZW5kZXIgYW5kIHVwZGF0ZXMgaW50ZXJuYWwgcHJvcGVydGllc1xuICpcbiAqIEBwYXJhbSBjb250YWluZXIge1BJWEkuUGFydGljbGVDb250YWluZXJ9IFRoZSBjb250YWluZXIgdG8gcmVuZGVyIHVzaW5nIHRoaXMgUGFydGljbGVSZW5kZXJlclxuICovXG5QYXJ0aWNsZVJlbmRlcmVyLnByb3RvdHlwZS5nZW5lcmF0ZUJ1ZmZlcnMgPSBmdW5jdGlvbiAoY29udGFpbmVyKVxue1xuICAgIHZhciBnbCA9IHRoaXMucmVuZGVyZXIuZ2wsXG4gICAgICAgIGJ1ZmZlcnMgPSBbXSxcbiAgICAgICAgc2l6ZSA9IGNvbnRhaW5lci5fbWF4U2l6ZSxcbiAgICAgICAgYmF0Y2hTaXplID0gY29udGFpbmVyLl9iYXRjaFNpemUsXG4gICAgICAgIGR5bmFtaWNQcm9wZXJ0eUZsYWdzID0gY29udGFpbmVyLl9wcm9wZXJ0aWVzLFxuICAgICAgICBpO1xuXG4gICAgZm9yIChpID0gMDsgaSA8IHNpemU7IGkgKz0gYmF0Y2hTaXplKVxuICAgIHtcbiAgICAgICAgYnVmZmVycy5wdXNoKG5ldyBQYXJ0aWNsZUJ1ZmZlcihnbCwgdGhpcy5wcm9wZXJ0aWVzLCBkeW5hbWljUHJvcGVydHlGbGFncywgYmF0Y2hTaXplKSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGJ1ZmZlcnM7XG59O1xuXG4vKipcbiAqIFVwbG9hZHMgdGhlIHZlcnRpY2llcy5cbiAqXG4gKiBAcGFyYW0gY2hpbGRyZW4ge1BJWEkuRGlzcGxheU9iamVjdFtdfSB0aGUgYXJyYXkgb2YgZGlzcGxheSBvYmplY3RzIHRvIHJlbmRlclxuICogQHBhcmFtIHN0YXJ0SW5kZXgge251bWJlcn0gdGhlIGluZGV4IHRvIHN0YXJ0IGZyb20gaW4gdGhlIGNoaWxkcmVuIGFycmF5XG4gKiBAcGFyYW0gYW1vdW50IHtudW1iZXJ9IHRoZSBhbW91bnQgb2YgY2hpbGRyZW4gdGhhdCB3aWxsIGhhdmUgdGhlaXIgdmVydGljZXMgdXBsb2FkZWRcbiAqIEBwYXJhbSBhcnJheSB7bnVtYmVyW119XG4gKiBAcGFyYW0gc3RyaWRlIHtudW1iZXJ9XG4gKiBAcGFyYW0gb2Zmc2V0IHtudW1iZXJ9XG4gKi9cblBhcnRpY2xlUmVuZGVyZXIucHJvdG90eXBlLnVwbG9hZFZlcnRpY2VzID0gZnVuY3Rpb24gKGNoaWxkcmVuLCBzdGFydEluZGV4LCBhbW91bnQsIGFycmF5LCBzdHJpZGUsIG9mZnNldClcbntcbiAgICB2YXIgc3ByaXRlLFxuICAgICAgICB0ZXh0dXJlLFxuICAgICAgICB0cmltLFxuICAgICAgICBzeCxcbiAgICAgICAgc3ksXG4gICAgICAgIHcwLCB3MSwgaDAsIGgxO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhbW91bnQ7IGkrKykge1xuXG4gICAgICAgIHNwcml0ZSA9IGNoaWxkcmVuW3N0YXJ0SW5kZXggKyBpXTtcbiAgICAgICAgdGV4dHVyZSA9IHNwcml0ZS5fdGV4dHVyZTtcbiAgICAgICAgc3ggPSBzcHJpdGUuc2NhbGUueDtcbiAgICAgICAgc3kgPSBzcHJpdGUuc2NhbGUueTtcblxuICAgICAgICBpZiAodGV4dHVyZS50cmltKVxuICAgICAgICB7XG4gICAgICAgICAgICAvLyBpZiB0aGUgc3ByaXRlIGlzIHRyaW1tZWQgdGhlbiB3ZSBuZWVkIHRvIGFkZCB0aGUgZXh0cmEgc3BhY2UgYmVmb3JlIHRyYW5zZm9ybWluZyB0aGUgc3ByaXRlIGNvb3Jkcy4uXG4gICAgICAgICAgICB0cmltID0gdGV4dHVyZS50cmltO1xuXG4gICAgICAgICAgICB3MSA9IHRyaW0ueCAtIHNwcml0ZS5hbmNob3IueCAqIHRyaW0ud2lkdGg7XG4gICAgICAgICAgICB3MCA9IHcxICsgdGV4dHVyZS5jcm9wLndpZHRoO1xuXG4gICAgICAgICAgICBoMSA9IHRyaW0ueSAtIHNwcml0ZS5hbmNob3IueSAqIHRyaW0uaGVpZ2h0O1xuICAgICAgICAgICAgaDAgPSBoMSArIHRleHR1cmUuY3JvcC5oZWlnaHQ7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgICB3MCA9ICh0ZXh0dXJlLl9mcmFtZS53aWR0aCApICogKDEtc3ByaXRlLmFuY2hvci54KTtcbiAgICAgICAgICAgIHcxID0gKHRleHR1cmUuX2ZyYW1lLndpZHRoICkgKiAtc3ByaXRlLmFuY2hvci54O1xuXG4gICAgICAgICAgICBoMCA9IHRleHR1cmUuX2ZyYW1lLmhlaWdodCAqICgxLXNwcml0ZS5hbmNob3IueSk7XG4gICAgICAgICAgICBoMSA9IHRleHR1cmUuX2ZyYW1lLmhlaWdodCAqIC1zcHJpdGUuYW5jaG9yLnk7XG4gICAgICAgIH1cblxuICAgICAgICBhcnJheVtvZmZzZXRdID0gdzEgKiBzeDtcbiAgICAgICAgYXJyYXlbb2Zmc2V0ICsgMV0gPSBoMSAqIHN5O1xuXG4gICAgICAgIGFycmF5W29mZnNldCArIHN0cmlkZV0gPSB3MCAqIHN4O1xuICAgICAgICBhcnJheVtvZmZzZXQgKyBzdHJpZGUgKyAxXSA9IGgxICogc3k7XG5cbiAgICAgICAgYXJyYXlbb2Zmc2V0ICsgc3RyaWRlICogMl0gPSB3MCAqIHN4O1xuICAgICAgICBhcnJheVtvZmZzZXQgKyBzdHJpZGUgKiAyICsgMV0gPSBoMCAqIHN5O1xuXG4gICAgICAgIGFycmF5W29mZnNldCArIHN0cmlkZSAqIDNdID0gdzEgKiBzeDtcbiAgICAgICAgYXJyYXlbb2Zmc2V0ICsgc3RyaWRlICogMyArIDFdID0gaDAgKiBzeTtcblxuICAgICAgICBvZmZzZXQgKz0gc3RyaWRlICogNDtcbiAgICB9XG5cbn07XG5cbi8qKlxuICpcbiAqIEBwYXJhbSBjaGlsZHJlbiB7UElYSS5EaXNwbGF5T2JqZWN0W119IHRoZSBhcnJheSBvZiBkaXNwbGF5IG9iamVjdHMgdG8gcmVuZGVyXG4gKiBAcGFyYW0gc3RhcnRJbmRleCB7bnVtYmVyfSB0aGUgaW5kZXggdG8gc3RhcnQgZnJvbSBpbiB0aGUgY2hpbGRyZW4gYXJyYXlcbiAqIEBwYXJhbSBhbW91bnQge251bWJlcn0gdGhlIGFtb3VudCBvZiBjaGlsZHJlbiB0aGF0IHdpbGwgaGF2ZSB0aGVpciBwb3NpdGlvbnMgdXBsb2FkZWRcbiAqIEBwYXJhbSBhcnJheSB7bnVtYmVyW119XG4gKiBAcGFyYW0gc3RyaWRlIHtudW1iZXJ9XG4gKiBAcGFyYW0gb2Zmc2V0IHtudW1iZXJ9XG4gKi9cblBhcnRpY2xlUmVuZGVyZXIucHJvdG90eXBlLnVwbG9hZFBvc2l0aW9uID0gZnVuY3Rpb24gKGNoaWxkcmVuLHN0YXJ0SW5kZXgsIGFtb3VudCwgYXJyYXksIHN0cmlkZSwgb2Zmc2V0KVxue1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYW1vdW50OyBpKyspXG4gICAge1xuICAgICAgICB2YXIgc3ByaXRlUG9zaXRpb24gPSBjaGlsZHJlbltzdGFydEluZGV4ICsgaV0ucG9zaXRpb247XG5cbiAgICAgICAgYXJyYXlbb2Zmc2V0XSA9IHNwcml0ZVBvc2l0aW9uLng7XG4gICAgICAgIGFycmF5W29mZnNldCArIDFdID0gc3ByaXRlUG9zaXRpb24ueTtcblxuICAgICAgICBhcnJheVtvZmZzZXQgKyBzdHJpZGVdID0gc3ByaXRlUG9zaXRpb24ueDtcbiAgICAgICAgYXJyYXlbb2Zmc2V0ICsgc3RyaWRlICsgMV0gPSBzcHJpdGVQb3NpdGlvbi55O1xuXG4gICAgICAgIGFycmF5W29mZnNldCArIHN0cmlkZSAqIDJdID0gc3ByaXRlUG9zaXRpb24ueDtcbiAgICAgICAgYXJyYXlbb2Zmc2V0ICsgc3RyaWRlICogMiArIDFdID0gc3ByaXRlUG9zaXRpb24ueTtcblxuICAgICAgICBhcnJheVtvZmZzZXQgKyBzdHJpZGUgKiAzXSA9IHNwcml0ZVBvc2l0aW9uLng7XG4gICAgICAgIGFycmF5W29mZnNldCArIHN0cmlkZSAqIDMgKyAxXSA9IHNwcml0ZVBvc2l0aW9uLnk7XG5cbiAgICAgICAgb2Zmc2V0ICs9IHN0cmlkZSAqIDQ7XG4gICAgfVxuXG59O1xuXG4vKipcbiAqXG4gKiBAcGFyYW0gY2hpbGRyZW4ge1BJWEkuRGlzcGxheU9iamVjdFtdfSB0aGUgYXJyYXkgb2YgZGlzcGxheSBvYmplY3RzIHRvIHJlbmRlclxuICogQHBhcmFtIHN0YXJ0SW5kZXgge251bWJlcn0gdGhlIGluZGV4IHRvIHN0YXJ0IGZyb20gaW4gdGhlIGNoaWxkcmVuIGFycmF5XG4gKiBAcGFyYW0gYW1vdW50IHtudW1iZXJ9IHRoZSBhbW91bnQgb2YgY2hpbGRyZW4gdGhhdCB3aWxsIGhhdmUgdGhlaXIgcm90YXRpb24gdXBsb2FkZWRcbiAqIEBwYXJhbSBhcnJheSB7bnVtYmVyW119XG4gKiBAcGFyYW0gc3RyaWRlIHtudW1iZXJ9XG4gKiBAcGFyYW0gb2Zmc2V0IHtudW1iZXJ9XG4gKi9cblBhcnRpY2xlUmVuZGVyZXIucHJvdG90eXBlLnVwbG9hZFJvdGF0aW9uID0gZnVuY3Rpb24gKGNoaWxkcmVuLHN0YXJ0SW5kZXgsIGFtb3VudCwgYXJyYXksIHN0cmlkZSwgb2Zmc2V0KVxue1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYW1vdW50OyBpKyspXG4gICAge1xuICAgICAgICB2YXIgc3ByaXRlUm90YXRpb24gPSBjaGlsZHJlbltzdGFydEluZGV4ICsgaV0ucm90YXRpb247XG5cblxuICAgICAgICBhcnJheVtvZmZzZXRdID0gc3ByaXRlUm90YXRpb247XG4gICAgICAgIGFycmF5W29mZnNldCArIHN0cmlkZV0gPSBzcHJpdGVSb3RhdGlvbjtcbiAgICAgICAgYXJyYXlbb2Zmc2V0ICsgc3RyaWRlICogMl0gPSBzcHJpdGVSb3RhdGlvbjtcbiAgICAgICAgYXJyYXlbb2Zmc2V0ICsgc3RyaWRlICogM10gPSBzcHJpdGVSb3RhdGlvbjtcblxuICAgICAgICBvZmZzZXQgKz0gc3RyaWRlICogNDtcbiAgICB9XG59O1xuXG4vKipcbiAqXG4gKiBAcGFyYW0gY2hpbGRyZW4ge1BJWEkuRGlzcGxheU9iamVjdFtdfSB0aGUgYXJyYXkgb2YgZGlzcGxheSBvYmplY3RzIHRvIHJlbmRlclxuICogQHBhcmFtIHN0YXJ0SW5kZXgge251bWJlcn0gdGhlIGluZGV4IHRvIHN0YXJ0IGZyb20gaW4gdGhlIGNoaWxkcmVuIGFycmF5XG4gKiBAcGFyYW0gYW1vdW50IHtudW1iZXJ9IHRoZSBhbW91bnQgb2YgY2hpbGRyZW4gdGhhdCB3aWxsIGhhdmUgdGhlaXIgVXZzIHVwbG9hZGVkXG4gKiBAcGFyYW0gYXJyYXkge251bWJlcltdfVxuICogQHBhcmFtIHN0cmlkZSB7bnVtYmVyfVxuICogQHBhcmFtIG9mZnNldCB7bnVtYmVyfVxuICovXG5QYXJ0aWNsZVJlbmRlcmVyLnByb3RvdHlwZS51cGxvYWRVdnMgPSBmdW5jdGlvbiAoY2hpbGRyZW4sc3RhcnRJbmRleCwgYW1vdW50LCBhcnJheSwgc3RyaWRlLCBvZmZzZXQpXG57XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhbW91bnQ7IGkrKylcbiAgICB7XG4gICAgICAgIHZhciB0ZXh0dXJlVXZzID0gY2hpbGRyZW5bc3RhcnRJbmRleCArIGldLl90ZXh0dXJlLl91dnM7XG5cbiAgICAgICAgaWYgKHRleHR1cmVVdnMpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGFycmF5W29mZnNldF0gPSB0ZXh0dXJlVXZzLngwO1xuICAgICAgICAgICAgYXJyYXlbb2Zmc2V0ICsgMV0gPSB0ZXh0dXJlVXZzLnkwO1xuXG4gICAgICAgICAgICBhcnJheVtvZmZzZXQgKyBzdHJpZGVdID0gdGV4dHVyZVV2cy54MTtcbiAgICAgICAgICAgIGFycmF5W29mZnNldCArIHN0cmlkZSArIDFdID0gdGV4dHVyZVV2cy55MTtcblxuICAgICAgICAgICAgYXJyYXlbb2Zmc2V0ICsgc3RyaWRlICogMl0gPSB0ZXh0dXJlVXZzLngyO1xuICAgICAgICAgICAgYXJyYXlbb2Zmc2V0ICsgc3RyaWRlICogMiArIDFdID0gdGV4dHVyZVV2cy55MjtcblxuICAgICAgICAgICAgYXJyYXlbb2Zmc2V0ICsgc3RyaWRlICogM10gPSB0ZXh0dXJlVXZzLngzO1xuICAgICAgICAgICAgYXJyYXlbb2Zmc2V0ICsgc3RyaWRlICogMyArIDFdID0gdGV4dHVyZVV2cy55MztcblxuICAgICAgICAgICAgb2Zmc2V0ICs9IHN0cmlkZSAqIDQ7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgICAvL1RPRE8geW91IGtub3cgdGhpcyBjYW4gYmUgZWFzaWVyIVxuICAgICAgICAgICAgYXJyYXlbb2Zmc2V0XSA9IDA7XG4gICAgICAgICAgICBhcnJheVtvZmZzZXQgKyAxXSA9IDA7XG5cbiAgICAgICAgICAgIGFycmF5W29mZnNldCArIHN0cmlkZV0gPSAwO1xuICAgICAgICAgICAgYXJyYXlbb2Zmc2V0ICsgc3RyaWRlICsgMV0gPSAwO1xuXG4gICAgICAgICAgICBhcnJheVtvZmZzZXQgKyBzdHJpZGUgKiAyXSA9IDA7XG4gICAgICAgICAgICBhcnJheVtvZmZzZXQgKyBzdHJpZGUgKiAyICsgMV0gPSAwO1xuXG4gICAgICAgICAgICBhcnJheVtvZmZzZXQgKyBzdHJpZGUgKiAzXSA9IDA7XG4gICAgICAgICAgICBhcnJheVtvZmZzZXQgKyBzdHJpZGUgKiAzICsgMV0gPSAwO1xuXG4gICAgICAgICAgICBvZmZzZXQgKz0gc3RyaWRlICogNDtcbiAgICAgICAgfVxuICAgIH1cbn07XG5cbi8qKlxuICpcbiAqIEBwYXJhbSBjaGlsZHJlbiB7UElYSS5EaXNwbGF5T2JqZWN0W119IHRoZSBhcnJheSBvZiBkaXNwbGF5IG9iamVjdHMgdG8gcmVuZGVyXG4gKiBAcGFyYW0gc3RhcnRJbmRleCB7bnVtYmVyfSB0aGUgaW5kZXggdG8gc3RhcnQgZnJvbSBpbiB0aGUgY2hpbGRyZW4gYXJyYXlcbiAqIEBwYXJhbSBhbW91bnQge251bWJlcn0gdGhlIGFtb3VudCBvZiBjaGlsZHJlbiB0aGF0IHdpbGwgaGF2ZSB0aGVpciBhbHBoYSB1cGxvYWRlZFxuICogQHBhcmFtIGFycmF5IHtudW1iZXJbXX1cbiAqIEBwYXJhbSBzdHJpZGUge251bWJlcn1cbiAqIEBwYXJhbSBvZmZzZXQge251bWJlcn1cbiAqL1xuUGFydGljbGVSZW5kZXJlci5wcm90b3R5cGUudXBsb2FkQWxwaGEgPSBmdW5jdGlvbiAoY2hpbGRyZW4sc3RhcnRJbmRleCwgYW1vdW50LCBhcnJheSwgc3RyaWRlLCBvZmZzZXQpXG57XG4gICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYW1vdW50OyBpKyspXG4gICAgIHtcbiAgICAgICAgdmFyIHNwcml0ZUFscGhhID0gY2hpbGRyZW5bc3RhcnRJbmRleCArIGldLmFscGhhO1xuXG4gICAgICAgIGFycmF5W29mZnNldF0gPSBzcHJpdGVBbHBoYTtcbiAgICAgICAgYXJyYXlbb2Zmc2V0ICsgc3RyaWRlXSA9IHNwcml0ZUFscGhhO1xuICAgICAgICBhcnJheVtvZmZzZXQgKyBzdHJpZGUgKiAyXSA9IHNwcml0ZUFscGhhO1xuICAgICAgICBhcnJheVtvZmZzZXQgKyBzdHJpZGUgKiAzXSA9IHNwcml0ZUFscGhhO1xuXG4gICAgICAgIG9mZnNldCArPSBzdHJpZGUgKiA0O1xuICAgIH1cbn07XG5cblxuLyoqXG4gKiBEZXN0cm95cyB0aGUgUGFydGljbGVSZW5kZXJlci5cbiAqXG4gKi9cblBhcnRpY2xlUmVuZGVyZXIucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoKVxue1xuICAgIGlmICh0aGlzLnJlbmRlcmVyLmdsKSB7XG4gICAgICAgIHRoaXMucmVuZGVyZXIuZ2wuZGVsZXRlQnVmZmVyKHRoaXMuaW5kZXhCdWZmZXIpO1xuICAgIH1cblxuICAgIE9iamVjdFJlbmRlcmVyLnByb3RvdHlwZS5kZXN0cm95LmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG5cbiAgICB0aGlzLnNoYWRlci5kZXN0cm95KCk7XG5cbiAgICB0aGlzLmluZGljZXMgPSBudWxsO1xuICAgIHRoaXMudGVtcE1hdHJpeCA9IG51bGw7XG59O1xuIiwidmFyIFRleHR1cmVTaGFkZXIgPSByZXF1aXJlKCcuLi8uLi9yZW5kZXJlcnMvd2ViZ2wvc2hhZGVycy9UZXh0dXJlU2hhZGVyJyk7XG5cbi8qKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLlRleHR1cmVTaGFkZXJcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gc2hhZGVyTWFuYWdlciB7U2hhZGVyTWFuYWdlcn0gVGhlIHdlYmdsIHNoYWRlciBtYW5hZ2VyIHRoaXMgc2hhZGVyIHdvcmtzIGZvci5cbiAqL1xuZnVuY3Rpb24gUGFydGljbGVTaGFkZXIoc2hhZGVyTWFuYWdlcilcbntcbiAgICBUZXh0dXJlU2hhZGVyLmNhbGwodGhpcyxcbiAgICAgICAgc2hhZGVyTWFuYWdlcixcbiAgICAgICAgLy8gdmVydGV4IHNoYWRlclxuICAgICAgICBbXG4gICAgICAgICAgICAnYXR0cmlidXRlIHZlYzIgYVZlcnRleFBvc2l0aW9uOycsXG4gICAgICAgICAgICAnYXR0cmlidXRlIHZlYzIgYVRleHR1cmVDb29yZDsnLFxuICAgICAgICAgICAgJ2F0dHJpYnV0ZSBmbG9hdCBhQ29sb3I7JyxcblxuICAgICAgICAgICAgJ2F0dHJpYnV0ZSB2ZWMyIGFQb3NpdGlvbkNvb3JkOycsXG4gICAgICAgICAgICAnYXR0cmlidXRlIHZlYzIgYVNjYWxlOycsXG4gICAgICAgICAgICAnYXR0cmlidXRlIGZsb2F0IGFSb3RhdGlvbjsnLFxuXG4gICAgICAgICAgICAndW5pZm9ybSBtYXQzIHByb2plY3Rpb25NYXRyaXg7JyxcblxuICAgICAgICAgICAgJ3ZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkOycsXG4gICAgICAgICAgICAndmFyeWluZyBmbG9hdCB2Q29sb3I7JyxcblxuICAgICAgICAgICAgJ3ZvaWQgbWFpbih2b2lkKXsnLFxuICAgICAgICAgICAgJyAgIHZlYzIgdiA9IGFWZXJ0ZXhQb3NpdGlvbjsnLFxuXG4gICAgICAgICAgICAnICAgdi54ID0gKGFWZXJ0ZXhQb3NpdGlvbi54KSAqIGNvcyhhUm90YXRpb24pIC0gKGFWZXJ0ZXhQb3NpdGlvbi55KSAqIHNpbihhUm90YXRpb24pOycsXG4gICAgICAgICAgICAnICAgdi55ID0gKGFWZXJ0ZXhQb3NpdGlvbi54KSAqIHNpbihhUm90YXRpb24pICsgKGFWZXJ0ZXhQb3NpdGlvbi55KSAqIGNvcyhhUm90YXRpb24pOycsXG4gICAgICAgICAgICAnICAgdiA9IHYgKyBhUG9zaXRpb25Db29yZDsnLFxuXG4gICAgICAgICAgICAnICAgZ2xfUG9zaXRpb24gPSB2ZWM0KChwcm9qZWN0aW9uTWF0cml4ICogdmVjMyh2LCAxLjApKS54eSwgMC4wLCAxLjApOycsXG5cbiAgICAgICAgICAgICcgICB2VGV4dHVyZUNvb3JkID0gYVRleHR1cmVDb29yZDsnLFxuICAgICAgICAgICAgJyAgIHZDb2xvciA9IGFDb2xvcjsnLFxuICAgICAgICAgICAgJ30nXG4gICAgICAgIF0uam9pbignXFxuJyksXG4gICAgICAgIC8vIGhlbGxvXG4gICAgICAgICBbXG4gICAgICAgICAgICAncHJlY2lzaW9uIGxvd3AgZmxvYXQ7JyxcblxuICAgICAgICAgICAgJ3ZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkOycsXG4gICAgICAgICAgICAndmFyeWluZyBmbG9hdCB2Q29sb3I7JyxcblxuICAgICAgICAgICAgJ3VuaWZvcm0gc2FtcGxlcjJEIHVTYW1wbGVyOycsXG4gICAgICAgICAgICAndW5pZm9ybSBmbG9hdCB1QWxwaGE7JyxcblxuICAgICAgICAgICAgJ3ZvaWQgbWFpbih2b2lkKXsnLFxuICAgICAgICAgICAgJyAgdmVjNCBjb2xvciA9IHRleHR1cmUyRCh1U2FtcGxlciwgdlRleHR1cmVDb29yZCkgKiB2Q29sb3IgKiB1QWxwaGE7JyxcbiAgICAgICAgICAgICcgIGlmIChjb2xvci5hID09IDAuMCkgZGlzY2FyZDsnLFxuICAgICAgICAgICAgJyAgZ2xfRnJhZ0NvbG9yID0gY29sb3I7JyxcbiAgICAgICAgICAgICd9J1xuICAgICAgICBdLmpvaW4oJ1xcbicpLFxuICAgICAgICAvLyBjdXN0b20gdW5pZm9ybXNcbiAgICAgICAge1xuICAgICAgICAgICAgdUFscGhhOiAgeyB0eXBlOiAnMWYnLCB2YWx1ZTogMSB9XG4gICAgICAgIH0sXG4gICAgICAgIC8vIGN1c3RvbSBhdHRyaWJ1dGVzXG4gICAgICAgIHtcbiAgICAgICAgICAgIGFQb3NpdGlvbkNvb3JkOiAwLFxuICAgICAgICAgICAvLyBhU2NhbGU6ICAgICAgICAgMCxcbiAgICAgICAgICAgIGFSb3RhdGlvbjogICAgICAwXG4gICAgICAgIH1cbiAgICApO1xuXG4gICAgLy8gVEVNUCBIQUNLXG5cbn1cblxuUGFydGljbGVTaGFkZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShUZXh0dXJlU2hhZGVyLnByb3RvdHlwZSk7XG5QYXJ0aWNsZVNoYWRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBQYXJ0aWNsZVNoYWRlcjtcblxubW9kdWxlLmV4cG9ydHMgPSBQYXJ0aWNsZVNoYWRlcjtcbiIsInZhciB1dGlscyA9IHJlcXVpcmUoJy4uL3V0aWxzJyksXG4gICAgbWF0aCA9IHJlcXVpcmUoJy4uL21hdGgnKSxcbiAgICBDT05TVCA9IHJlcXVpcmUoJy4uL2NvbnN0JyksXG4gICAgRXZlbnRFbWl0dGVyID0gcmVxdWlyZSgnZXZlbnRlbWl0dGVyMycpO1xuXG4vKipcbiAqIFRoZSBDYW52YXNSZW5kZXJlciBkcmF3cyB0aGUgc2NlbmUgYW5kIGFsbCBpdHMgY29udGVudCBvbnRvIGEgMmQgY2FudmFzLiBUaGlzIHJlbmRlcmVyIHNob3VsZCBiZSB1c2VkIGZvciBicm93c2VycyB0aGF0IGRvIG5vdCBzdXBwb3J0IHdlYkdMLlxuICogRG9uJ3QgZm9yZ2V0IHRvIGFkZCB0aGUgQ2FudmFzUmVuZGVyZXIudmlldyB0byB5b3VyIERPTSBvciB5b3Ugd2lsbCBub3Qgc2VlIGFueXRoaW5nIDopXG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIHN5c3RlbSB7c3RyaW5nfSBUaGUgbmFtZSBvZiB0aGUgc3lzdGVtIHRoaXMgcmVuZGVyZXIgaXMgZm9yLlxuICogQHBhcmFtIFt3aWR0aD04MDBdIHtudW1iZXJ9IHRoZSB3aWR0aCBvZiB0aGUgY2FudmFzIHZpZXdcbiAqIEBwYXJhbSBbaGVpZ2h0PTYwMF0ge251bWJlcn0gdGhlIGhlaWdodCBvZiB0aGUgY2FudmFzIHZpZXdcbiAqIEBwYXJhbSBbb3B0aW9uc10ge29iamVjdH0gVGhlIG9wdGlvbmFsIHJlbmRlcmVyIHBhcmFtZXRlcnNcbiAqIEBwYXJhbSBbb3B0aW9ucy52aWV3XSB7SFRNTENhbnZhc0VsZW1lbnR9IHRoZSBjYW52YXMgdG8gdXNlIGFzIGEgdmlldywgb3B0aW9uYWxcbiAqIEBwYXJhbSBbb3B0aW9ucy50cmFuc3BhcmVudD1mYWxzZV0ge2Jvb2xlYW59IElmIHRoZSByZW5kZXIgdmlldyBpcyB0cmFuc3BhcmVudCwgZGVmYXVsdCBmYWxzZVxuICogQHBhcmFtIFtvcHRpb25zLmF1dG9SZXNpemU9ZmFsc2VdIHtib29sZWFufSBJZiB0aGUgcmVuZGVyIHZpZXcgaXMgYXV0b21hdGljYWxseSByZXNpemVkLCBkZWZhdWx0IGZhbHNlXG4gKiBAcGFyYW0gW29wdGlvbnMuYW50aWFsaWFzPWZhbHNlXSB7Ym9vbGVhbn0gc2V0cyBhbnRpYWxpYXMgKG9ubHkgYXBwbGljYWJsZSBpbiBjaHJvbWUgYXQgdGhlIG1vbWVudClcbiAqIEBwYXJhbSBbb3B0aW9ucy5yZXNvbHV0aW9uPTFdIHtudW1iZXJ9IHRoZSByZXNvbHV0aW9uIG9mIHRoZSByZW5kZXJlciByZXRpbmEgd291bGQgYmUgMlxuICogQHBhcmFtIFtvcHRpb25zLmNsZWFyQmVmb3JlUmVuZGVyPXRydWVdIHtib29sZWFufSBUaGlzIHNldHMgaWYgdGhlIENhbnZhc1JlbmRlcmVyIHdpbGwgY2xlYXIgdGhlIGNhbnZhcyBvclxuICogICAgICBub3QgYmVmb3JlIHRoZSBuZXcgcmVuZGVyIHBhc3MuXG4gKiBAcGFyYW0gW29wdGlvbnMuYmFja2dyb3VuZENvbG9yPTB4MDAwMDAwXSB7bnVtYmVyfSBUaGUgYmFja2dyb3VuZCBjb2xvciBvZiB0aGUgcmVuZGVyZWQgYXJlYSAoc2hvd24gaWYgbm90IHRyYW5zcGFyZW50KS5cbiAqIEBwYXJhbSBbb3B0aW9ucy5yb3VuZFBpeGVscz1mYWxzZV0ge2Jvb2xlYW59IElmIHRydWUgUGl4aSB3aWxsIE1hdGguZmxvb3IoKSB4L3kgdmFsdWVzIHdoZW4gcmVuZGVyaW5nLCBzdG9wcGluZyBwaXhlbCBpbnRlcnBvbGF0aW9uLlxuICovXG5mdW5jdGlvbiBTeXN0ZW1SZW5kZXJlcihzeXN0ZW0sIHdpZHRoLCBoZWlnaHQsIG9wdGlvbnMpXG57XG4gICAgRXZlbnRFbWl0dGVyLmNhbGwodGhpcyk7XG5cbiAgICB1dGlscy5zYXlIZWxsbyhzeXN0ZW0pO1xuXG4gICAgLy8gcHJlcGFyZSBvcHRpb25zXG4gICAgaWYgKG9wdGlvbnMpXG4gICAge1xuICAgICAgICBmb3IgKHZhciBpIGluIENPTlNULkRFRkFVTFRfUkVOREVSX09QVElPTlMpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGlmICh0eXBlb2Ygb3B0aW9uc1tpXSA9PT0gJ3VuZGVmaW5lZCcpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgb3B0aW9uc1tpXSA9IENPTlNULkRFRkFVTFRfUkVOREVSX09QVElPTlNbaV07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgb3B0aW9ucyA9IENPTlNULkRFRkFVTFRfUkVOREVSX09QVElPTlM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhlIHR5cGUgb2YgdGhlIHJlbmRlcmVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IFBJWEkuUkVOREVSRVJfVFlQRS5VTktOT1dOXG4gICAgICogQHNlZSBQSVhJLlJFTkRFUkVSX1RZUEVcbiAgICAgKi9cbiAgICB0aGlzLnR5cGUgPSBDT05TVC5SRU5ERVJFUl9UWVBFLlVOS05PV047XG5cbiAgICAvKipcbiAgICAgKiBUaGUgd2lkdGggb2YgdGhlIGNhbnZhcyB2aWV3XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgODAwXG4gICAgICovXG4gICAgdGhpcy53aWR0aCA9IHdpZHRoIHx8IDgwMDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBoZWlnaHQgb2YgdGhlIGNhbnZhcyB2aWV3XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgNjAwXG4gICAgICovXG4gICAgdGhpcy5oZWlnaHQgPSBoZWlnaHQgfHwgNjAwO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGNhbnZhcyBlbGVtZW50IHRoYXQgZXZlcnl0aGluZyBpcyBkcmF3biB0b1xuICAgICAqXG4gICAgICogQG1lbWJlciB7SFRNTENhbnZhc0VsZW1lbnR9XG4gICAgICovXG4gICAgdGhpcy52aWV3ID0gb3B0aW9ucy52aWV3IHx8IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NhbnZhcycpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHJlc29sdXRpb24gb2YgdGhlIHJlbmRlcmVyXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMVxuICAgICAqL1xuICAgIHRoaXMucmVzb2x1dGlvbiA9IG9wdGlvbnMucmVzb2x1dGlvbjtcblxuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgdGhlIHJlbmRlciB2aWV3IGlzIHRyYW5zcGFyZW50XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqL1xuICAgIHRoaXMudHJhbnNwYXJlbnQgPSBvcHRpb25zLnRyYW5zcGFyZW50O1xuXG4gICAgLyoqXG4gICAgICogV2hldGhlciB0aGUgcmVuZGVyIHZpZXcgc2hvdWxkIGJlIHJlc2l6ZWQgYXV0b21hdGljYWxseVxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKi9cbiAgICB0aGlzLmF1dG9SZXNpemUgPSBvcHRpb25zLmF1dG9SZXNpemUgfHwgZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBUcmFja3MgdGhlIGJsZW5kIG1vZGVzIHVzZWZ1bCBmb3IgdGhpcyByZW5kZXJlci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge29iamVjdDxzdHJpbmcsIG1peGVkPn1cbiAgICAgKi9cbiAgICB0aGlzLmJsZW5kTW9kZXMgPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHZhbHVlIG9mIHRoZSBwcmVzZXJ2ZURyYXdpbmdCdWZmZXIgZmxhZyBhZmZlY3RzIHdoZXRoZXIgb3Igbm90IHRoZSBjb250ZW50cyBvZiB0aGUgc3RlbmNpbCBidWZmZXIgaXMgcmV0YWluZWQgYWZ0ZXIgcmVuZGVyaW5nLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKi9cbiAgICB0aGlzLnByZXNlcnZlRHJhd2luZ0J1ZmZlciA9IG9wdGlvbnMucHJlc2VydmVEcmF3aW5nQnVmZmVyO1xuXG4gICAgLyoqXG4gICAgICogVGhpcyBzZXRzIGlmIHRoZSBDYW52YXNSZW5kZXJlciB3aWxsIGNsZWFyIHRoZSBjYW52YXMgb3Igbm90IGJlZm9yZSB0aGUgbmV3IHJlbmRlciBwYXNzLlxuICAgICAqIElmIHRoZSBzY2VuZSBpcyBOT1QgdHJhbnNwYXJlbnQgUGl4aSB3aWxsIHVzZSBhIGNhbnZhcyBzaXplZCBmaWxsUmVjdCBvcGVyYXRpb24gZXZlcnkgZnJhbWUgdG8gc2V0IHRoZSBjYW52YXMgYmFja2dyb3VuZCBjb2xvci5cbiAgICAgKiBJZiB0aGUgc2NlbmUgaXMgdHJhbnNwYXJlbnQgUGl4aSB3aWxsIHVzZSBjbGVhclJlY3QgdG8gY2xlYXIgdGhlIGNhbnZhcyBldmVyeSBmcmFtZS5cbiAgICAgKiBEaXNhYmxlIHRoaXMgYnkgc2V0dGluZyB0aGlzIHRvIGZhbHNlLiBGb3IgZXhhbXBsZSBpZiB5b3VyIGdhbWUgaGFzIGEgY2FudmFzIGZpbGxpbmcgYmFja2dyb3VuZCBpbWFnZSB5b3Ugb2Z0ZW4gZG9uJ3QgbmVlZCB0aGlzIHNldC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICogQGRlZmF1bHRcbiAgICAgKi9cbiAgICB0aGlzLmNsZWFyQmVmb3JlUmVuZGVyID0gb3B0aW9ucy5jbGVhckJlZm9yZVJlbmRlcjtcblxuICAgIC8qKlxuICAgICAqIElmIHRydWUgUGl4aSB3aWxsIE1hdGguZmxvb3IoKSB4L3kgdmFsdWVzIHdoZW4gcmVuZGVyaW5nLCBzdG9wcGluZyBwaXhlbCBpbnRlcnBvbGF0aW9uLlxuICAgICAqIEhhbmR5IGZvciBjcmlzcCBwaXhlbCBhcnQgYW5kIHNwZWVkIG9uIGxlZ2FjeSBkZXZpY2VzLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKi9cbiAgICB0aGlzLnJvdW5kUGl4ZWxzID0gb3B0aW9ucy5yb3VuZFBpeGVscztcblxuICAgIC8qKlxuICAgICAqIFRoZSBiYWNrZ3JvdW5kIGNvbG9yIGFzIGEgbnVtYmVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fYmFja2dyb3VuZENvbG9yID0gMHgwMDAwMDA7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYmFja2dyb3VuZCBjb2xvciBhcyBhbiBbUiwgRywgQl0gYXJyYXkuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJbXX1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX2JhY2tncm91bmRDb2xvclJnYmEgPSBbMCwgMCwgMCwgMF07XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYmFja2dyb3VuZCBjb2xvciBhcyBhIHN0cmluZy5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge3N0cmluZ31cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX2JhY2tncm91bmRDb2xvclN0cmluZyA9ICcjMDAwMDAwJztcblxuICAgIHRoaXMuYmFja2dyb3VuZENvbG9yID0gb3B0aW9ucy5iYWNrZ3JvdW5kQ29sb3IgfHwgdGhpcy5fYmFja2dyb3VuZENvbG9yOyAvLyBydW4gYmcgY29sb3Igc2V0dGVyXG5cbiAgICAvKipcbiAgICAgKiBUaGlzIHRlbXBvcmFyeSBkaXNwbGF5IG9iamVjdCB1c2VkIGFzIHRoZSBwYXJlbnQgb2YgdGhlIGN1cnJlbnRseSBiZWluZyByZW5kZXJlZCBpdGVtXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLkRpc3BsYXlPYmplY3R9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl90ZW1wRGlzcGxheU9iamVjdFBhcmVudCA9IHt3b3JsZFRyYW5zZm9ybTpuZXcgbWF0aC5NYXRyaXgoKSwgd29ybGRBbHBoYToxLCBjaGlsZHJlbjpbXX07XG5cbiAgICAvKipcbiAgICAgKiBUaGUgbGFzdCByb290IG9iamVjdCB0aGF0IHRoZSByZW5kZXJlciB0cmllZCB0byByZW5kZXIuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLkRpc3BsYXlPYmplY3R9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9sYXN0T2JqZWN0UmVuZGVyZWQgPSB0aGlzLl90ZW1wRGlzcGxheU9iamVjdFBhcmVudDtcbn1cblxuLy8gY29uc3RydWN0b3JcblN5c3RlbVJlbmRlcmVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoRXZlbnRFbWl0dGVyLnByb3RvdHlwZSk7XG5TeXN0ZW1SZW5kZXJlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBTeXN0ZW1SZW5kZXJlcjtcbm1vZHVsZS5leHBvcnRzID0gU3lzdGVtUmVuZGVyZXI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKFN5c3RlbVJlbmRlcmVyLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFRoZSBiYWNrZ3JvdW5kIGNvbG9yIHRvIGZpbGwgaWYgbm90IHRyYW5zcGFyZW50XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuU3lzdGVtUmVuZGVyZXIjXG4gICAgICovXG4gICAgYmFja2dyb3VuZENvbG9yOlxuICAgIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fYmFja2dyb3VuZENvbG9yO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWwpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuX2JhY2tncm91bmRDb2xvciA9IHZhbDtcbiAgICAgICAgICAgIHRoaXMuX2JhY2tncm91bmRDb2xvclN0cmluZyA9IHV0aWxzLmhleDJzdHJpbmcodmFsKTtcbiAgICAgICAgICAgIHV0aWxzLmhleDJyZ2IodmFsLCB0aGlzLl9iYWNrZ3JvdW5kQ29sb3JSZ2JhKTtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuXG4vKipcbiAqIFJlc2l6ZXMgdGhlIGNhbnZhcyB2aWV3IHRvIHRoZSBzcGVjaWZpZWQgd2lkdGggYW5kIGhlaWdodFxuICpcbiAqIEBwYXJhbSB3aWR0aCB7bnVtYmVyfSB0aGUgbmV3IHdpZHRoIG9mIHRoZSBjYW52YXMgdmlld1xuICogQHBhcmFtIGhlaWdodCB7bnVtYmVyfSB0aGUgbmV3IGhlaWdodCBvZiB0aGUgY2FudmFzIHZpZXdcbiAqL1xuU3lzdGVtUmVuZGVyZXIucHJvdG90eXBlLnJlc2l6ZSA9IGZ1bmN0aW9uICh3aWR0aCwgaGVpZ2h0KSB7XG4gICAgdGhpcy53aWR0aCA9IHdpZHRoICogdGhpcy5yZXNvbHV0aW9uO1xuICAgIHRoaXMuaGVpZ2h0ID0gaGVpZ2h0ICogdGhpcy5yZXNvbHV0aW9uO1xuXG4gICAgdGhpcy52aWV3LndpZHRoID0gdGhpcy53aWR0aDtcbiAgICB0aGlzLnZpZXcuaGVpZ2h0ID0gdGhpcy5oZWlnaHQ7XG5cbiAgICBpZiAodGhpcy5hdXRvUmVzaXplKVxuICAgIHtcbiAgICAgICAgdGhpcy52aWV3LnN0eWxlLndpZHRoID0gdGhpcy53aWR0aCAvIHRoaXMucmVzb2x1dGlvbiArICdweCc7XG4gICAgICAgIHRoaXMudmlldy5zdHlsZS5oZWlnaHQgPSB0aGlzLmhlaWdodCAvIHRoaXMucmVzb2x1dGlvbiArICdweCc7XG4gICAgfVxufTtcblxuLyoqXG4gKiBSZW1vdmVzIGV2ZXJ5dGhpbmcgZnJvbSB0aGUgcmVuZGVyZXIgYW5kIG9wdGlvbmFsbHkgcmVtb3ZlcyB0aGUgQ2FudmFzIERPTSBlbGVtZW50LlxuICpcbiAqIEBwYXJhbSBbcmVtb3ZlVmlldz1mYWxzZV0ge2Jvb2xlYW59IFJlbW92ZXMgdGhlIENhbnZhcyBlbGVtZW50IGZyb20gdGhlIERPTS5cbiAqL1xuU3lzdGVtUmVuZGVyZXIucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAocmVtb3ZlVmlldykge1xuICAgIGlmIChyZW1vdmVWaWV3ICYmIHRoaXMudmlldy5wYXJlbnROb2RlKVxuICAgIHtcbiAgICAgICAgdGhpcy52aWV3LnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodGhpcy52aWV3KTtcbiAgICB9XG5cbiAgICB0aGlzLnR5cGUgPSBDT05TVC5SRU5ERVJFUl9UWVBFLlVOS05PV047XG5cbiAgICB0aGlzLndpZHRoID0gMDtcbiAgICB0aGlzLmhlaWdodCA9IDA7XG5cbiAgICB0aGlzLnZpZXcgPSBudWxsO1xuXG4gICAgdGhpcy5yZXNvbHV0aW9uID0gMDtcblxuICAgIHRoaXMudHJhbnNwYXJlbnQgPSBmYWxzZTtcblxuICAgIHRoaXMuYXV0b1Jlc2l6ZSA9IGZhbHNlO1xuXG4gICAgdGhpcy5ibGVuZE1vZGVzID0gbnVsbDtcblxuICAgIHRoaXMucHJlc2VydmVEcmF3aW5nQnVmZmVyID0gZmFsc2U7XG4gICAgdGhpcy5jbGVhckJlZm9yZVJlbmRlciA9IGZhbHNlO1xuXG4gICAgdGhpcy5yb3VuZFBpeGVscyA9IGZhbHNlO1xuXG4gICAgdGhpcy5fYmFja2dyb3VuZENvbG9yID0gMDtcbiAgICB0aGlzLl9iYWNrZ3JvdW5kQ29sb3JSZ2JhID0gbnVsbDtcbiAgICB0aGlzLl9iYWNrZ3JvdW5kQ29sb3JTdHJpbmcgPSBudWxsO1xufTtcbiIsInZhciBTeXN0ZW1SZW5kZXJlciA9IHJlcXVpcmUoJy4uL1N5c3RlbVJlbmRlcmVyJyksXG4gICAgQ2FudmFzTWFza01hbmFnZXIgPSByZXF1aXJlKCcuL3V0aWxzL0NhbnZhc01hc2tNYW5hZ2VyJyksXG4gICAgdXRpbHMgPSByZXF1aXJlKCcuLi8uLi91dGlscycpLFxuICAgIG1hdGggPSByZXF1aXJlKCcuLi8uLi9tYXRoJyksXG4gICAgQ09OU1QgPSByZXF1aXJlKCcuLi8uLi9jb25zdCcpO1xuXG4vKipcbiAqIFRoZSBDYW52YXNSZW5kZXJlciBkcmF3cyB0aGUgc2NlbmUgYW5kIGFsbCBpdHMgY29udGVudCBvbnRvIGEgMmQgY2FudmFzLiBUaGlzIHJlbmRlcmVyIHNob3VsZCBiZSB1c2VkIGZvciBicm93c2VycyB0aGF0IGRvIG5vdCBzdXBwb3J0IHdlYkdMLlxuICogRG9uJ3QgZm9yZ2V0IHRvIGFkZCB0aGUgQ2FudmFzUmVuZGVyZXIudmlldyB0byB5b3VyIERPTSBvciB5b3Ugd2lsbCBub3Qgc2VlIGFueXRoaW5nIDopXG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQGV4dGVuZHMgUElYSS5TeXN0ZW1SZW5kZXJlclxuICogQHBhcmFtIFt3aWR0aD04MDBdIHtudW1iZXJ9IHRoZSB3aWR0aCBvZiB0aGUgY2FudmFzIHZpZXdcbiAqIEBwYXJhbSBbaGVpZ2h0PTYwMF0ge251bWJlcn0gdGhlIGhlaWdodCBvZiB0aGUgY2FudmFzIHZpZXdcbiAqIEBwYXJhbSBbb3B0aW9uc10ge29iamVjdH0gVGhlIG9wdGlvbmFsIHJlbmRlcmVyIHBhcmFtZXRlcnNcbiAqIEBwYXJhbSBbb3B0aW9ucy52aWV3XSB7SFRNTENhbnZhc0VsZW1lbnR9IHRoZSBjYW52YXMgdG8gdXNlIGFzIGEgdmlldywgb3B0aW9uYWxcbiAqIEBwYXJhbSBbb3B0aW9ucy50cmFuc3BhcmVudD1mYWxzZV0ge2Jvb2xlYW59IElmIHRoZSByZW5kZXIgdmlldyBpcyB0cmFuc3BhcmVudCwgZGVmYXVsdCBmYWxzZVxuICogQHBhcmFtIFtvcHRpb25zLmF1dG9SZXNpemU9ZmFsc2VdIHtib29sZWFufSBJZiB0aGUgcmVuZGVyIHZpZXcgaXMgYXV0b21hdGljYWxseSByZXNpemVkLCBkZWZhdWx0IGZhbHNlXG4gKiBAcGFyYW0gW29wdGlvbnMuYW50aWFsaWFzPWZhbHNlXSB7Ym9vbGVhbn0gc2V0cyBhbnRpYWxpYXMgKG9ubHkgYXBwbGljYWJsZSBpbiBjaHJvbWUgYXQgdGhlIG1vbWVudClcbiAqIEBwYXJhbSBbb3B0aW9ucy5yZXNvbHV0aW9uPTFdIHtudW1iZXJ9IHRoZSByZXNvbHV0aW9uIG9mIHRoZSByZW5kZXJlciByZXRpbmEgd291bGQgYmUgMlxuICogQHBhcmFtIFtvcHRpb25zLmNsZWFyQmVmb3JlUmVuZGVyPXRydWVdIHtib29sZWFufSBUaGlzIHNldHMgaWYgdGhlIENhbnZhc1JlbmRlcmVyIHdpbGwgY2xlYXIgdGhlIGNhbnZhcyBvclxuICogICAgICBub3QgYmVmb3JlIHRoZSBuZXcgcmVuZGVyIHBhc3MuXG4gKiBAcGFyYW0gW29wdGlvbnMucm91bmRQaXhlbHM9ZmFsc2VdIHtib29sZWFufSBJZiB0cnVlIFBpeGkgd2lsbCBNYXRoLmZsb29yKCkgeC95IHZhbHVlcyB3aGVuIHJlbmRlcmluZywgc3RvcHBpbmcgcGl4ZWwgaW50ZXJwb2xhdGlvbi5cbiAqL1xuZnVuY3Rpb24gQ2FudmFzUmVuZGVyZXIod2lkdGgsIGhlaWdodCwgb3B0aW9ucylcbntcbiAgICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcblxuICAgIFN5c3RlbVJlbmRlcmVyLmNhbGwodGhpcywgJ0NhbnZhcycsIHdpZHRoLCBoZWlnaHQsIG9wdGlvbnMpO1xuXG4gICAgdGhpcy50eXBlID0gQ09OU1QuUkVOREVSRVJfVFlQRS5DQU5WQVM7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgY2FudmFzIDJkIGNvbnRleHQgdGhhdCBldmVyeXRoaW5nIGlzIGRyYXduIHdpdGguXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtDYW52YXNSZW5kZXJpbmdDb250ZXh0MkR9XG4gICAgICovXG4gICAgdGhpcy5jb250ZXh0ID0gdGhpcy52aWV3LmdldENvbnRleHQoJzJkJywgeyBhbHBoYTogdGhpcy50cmFuc3BhcmVudCB9KTtcblxuICAgIC8qKlxuICAgICAqIEJvb2xlYW4gZmxhZyBjb250cm9sbGluZyBjYW52YXMgcmVmcmVzaC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICovXG4gICAgdGhpcy5yZWZyZXNoID0gdHJ1ZTtcblxuICAgIC8qKlxuICAgICAqIEluc3RhbmNlIG9mIGEgQ2FudmFzTWFza01hbmFnZXIsIGhhbmRsZXMgbWFza2luZyB3aGVuIHVzaW5nIHRoZSBjYW52YXMgcmVuZGVyZXIuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLkNhbnZhc01hc2tNYW5hZ2VyfVxuICAgICAqL1xuICAgIHRoaXMubWFza01hbmFnZXIgPSBuZXcgQ2FudmFzTWFza01hbmFnZXIoKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBjYW52YXMgcHJvcGVydHkgdXNlZCB0byBzZXQgdGhlIGNhbnZhcyBzbW9vdGhpbmcgcHJvcGVydHkuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtzdHJpbmd9XG4gICAgICovXG4gICAgdGhpcy5zbW9vdGhQcm9wZXJ0eSA9ICdpbWFnZVNtb290aGluZ0VuYWJsZWQnO1xuXG4gICAgaWYgKCF0aGlzLmNvbnRleHQuaW1hZ2VTbW9vdGhpbmdFbmFibGVkKVxuICAgIHtcbiAgICAgICAgaWYgKHRoaXMuY29udGV4dC53ZWJraXRJbWFnZVNtb290aGluZ0VuYWJsZWQpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuc21vb3RoUHJvcGVydHkgPSAnd2Via2l0SW1hZ2VTbW9vdGhpbmdFbmFibGVkJztcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh0aGlzLmNvbnRleHQubW96SW1hZ2VTbW9vdGhpbmdFbmFibGVkKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnNtb290aFByb3BlcnR5ID0gJ21vekltYWdlU21vb3RoaW5nRW5hYmxlZCc7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodGhpcy5jb250ZXh0Lm9JbWFnZVNtb290aGluZ0VuYWJsZWQpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuc21vb3RoUHJvcGVydHkgPSAnb0ltYWdlU21vb3RoaW5nRW5hYmxlZCc7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodGhpcy5jb250ZXh0Lm1zSW1hZ2VTbW9vdGhpbmdFbmFibGVkKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnNtb290aFByb3BlcnR5ID0gJ21zSW1hZ2VTbW9vdGhpbmdFbmFibGVkJztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMuaW5pdFBsdWdpbnMoKTtcblxuICAgIHRoaXMuX21hcEJsZW5kTW9kZXMoKTtcblxuICAgIC8qKlxuICAgICAqIFRoaXMgdGVtcG9yYXJ5IGRpc3BsYXkgb2JqZWN0IHVzZWQgYXMgdGhlIHBhcmVudCBvZiB0aGUgY3VycmVudGx5IGJlaW5nIHJlbmRlcmVkIGl0ZW1cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuRGlzcGxheU9iamVjdH1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX3RlbXBEaXNwbGF5T2JqZWN0UGFyZW50ID0ge1xuICAgICAgICB3b3JsZFRyYW5zZm9ybTogbmV3IG1hdGguTWF0cml4KCksXG4gICAgICAgIHdvcmxkQWxwaGE6IDFcbiAgICB9O1xuXG5cbiAgICB0aGlzLnJlc2l6ZSh3aWR0aCwgaGVpZ2h0KTtcbn1cblxuLy8gY29uc3RydWN0b3JcbkNhbnZhc1JlbmRlcmVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoU3lzdGVtUmVuZGVyZXIucHJvdG90eXBlKTtcbkNhbnZhc1JlbmRlcmVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IENhbnZhc1JlbmRlcmVyO1xubW9kdWxlLmV4cG9ydHMgPSBDYW52YXNSZW5kZXJlcjtcbnV0aWxzLnBsdWdpblRhcmdldC5taXhpbihDYW52YXNSZW5kZXJlcik7XG5cbi8qKlxuICogUmVuZGVycyB0aGUgb2JqZWN0IHRvIHRoaXMgY2FudmFzIHZpZXdcbiAqXG4gKiBAcGFyYW0gb2JqZWN0IHtQSVhJLkRpc3BsYXlPYmplY3R9IHRoZSBvYmplY3QgdG8gYmUgcmVuZGVyZWRcbiAqL1xuQ2FudmFzUmVuZGVyZXIucHJvdG90eXBlLnJlbmRlciA9IGZ1bmN0aW9uIChvYmplY3QpXG57XG4gICAgdGhpcy5lbWl0KCdwcmVyZW5kZXInKTtcblxuICAgIHZhciBjYWNoZVBhcmVudCA9IG9iamVjdC5wYXJlbnQ7XG5cbiAgICB0aGlzLl9sYXN0T2JqZWN0UmVuZGVyZWQgPSBvYmplY3Q7XG5cbiAgICBvYmplY3QucGFyZW50ID0gdGhpcy5fdGVtcERpc3BsYXlPYmplY3RQYXJlbnQ7XG5cbiAgICAvLyB1cGRhdGUgdGhlIHNjZW5lIGdyYXBoXG4gICAgb2JqZWN0LnVwZGF0ZVRyYW5zZm9ybSgpO1xuXG4gICAgb2JqZWN0LnBhcmVudCA9IGNhY2hlUGFyZW50O1xuXG4gICAgdGhpcy5jb250ZXh0LnNldFRyYW5zZm9ybSgxLCAwLCAwLCAxLCAwLCAwKTtcblxuICAgIHRoaXMuY29udGV4dC5nbG9iYWxBbHBoYSA9IDE7XG5cbiAgICB0aGlzLmNvbnRleHQuZ2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uID0gdGhpcy5ibGVuZE1vZGVzW0NPTlNULkJMRU5EX01PREVTLk5PUk1BTF07XG5cbiAgICBpZiAobmF2aWdhdG9yLmlzQ29jb29uSlMgJiYgdGhpcy52aWV3LnNjcmVlbmNhbnZhcylcbiAgICB7XG4gICAgICAgIHRoaXMuY29udGV4dC5maWxsU3R5bGUgPSAnYmxhY2snO1xuICAgICAgICB0aGlzLmNvbnRleHQuY2xlYXIoKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5jbGVhckJlZm9yZVJlbmRlcilcbiAgICB7XG4gICAgICAgIGlmICh0aGlzLnRyYW5zcGFyZW50KVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmNvbnRleHQuY2xlYXJSZWN0KDAsIDAsIHRoaXMud2lkdGgsIHRoaXMuaGVpZ2h0KTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuY29udGV4dC5maWxsU3R5bGUgPSB0aGlzLl9iYWNrZ3JvdW5kQ29sb3JTdHJpbmc7XG4gICAgICAgICAgICB0aGlzLmNvbnRleHQuZmlsbFJlY3QoMCwgMCwgdGhpcy53aWR0aCAsIHRoaXMuaGVpZ2h0KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMucmVuZGVyRGlzcGxheU9iamVjdChvYmplY3QsIHRoaXMuY29udGV4dCk7XG5cbiAgICB0aGlzLmVtaXQoJ3Bvc3RyZW5kZXInKTtcbn07XG5cbi8qKlxuICogUmVtb3ZlcyBldmVyeXRoaW5nIGZyb20gdGhlIHJlbmRlcmVyIGFuZCBvcHRpb25hbGx5IHJlbW92ZXMgdGhlIENhbnZhcyBET00gZWxlbWVudC5cbiAqXG4gKiBAcGFyYW0gW3JlbW92ZVZpZXc9ZmFsc2VdIHtib29sZWFufSBSZW1vdmVzIHRoZSBDYW52YXMgZWxlbWVudCBmcm9tIHRoZSBET00uXG4gKi9cbkNhbnZhc1JlbmRlcmVyLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKHJlbW92ZVZpZXcpXG57XG4gICAgdGhpcy5kZXN0cm95UGx1Z2lucygpO1xuXG4gICAgLy8gY2FsbCB0aGUgYmFzZSBkZXN0cm95XG4gICAgU3lzdGVtUmVuZGVyZXIucHJvdG90eXBlLmRlc3Ryb3kuY2FsbCh0aGlzLCByZW1vdmVWaWV3KTtcblxuICAgIHRoaXMuY29udGV4dCA9IG51bGw7XG5cbiAgICB0aGlzLnJlZnJlc2ggPSB0cnVlO1xuXG4gICAgdGhpcy5tYXNrTWFuYWdlci5kZXN0cm95KCk7XG4gICAgdGhpcy5tYXNrTWFuYWdlciA9IG51bGw7XG5cbiAgICB0aGlzLnNtb290aFByb3BlcnR5ID0gbnVsbDtcbn07XG5cbi8qKlxuICogUmVuZGVycyBhIGRpc3BsYXkgb2JqZWN0XG4gKlxuICogQHBhcmFtIGRpc3BsYXlPYmplY3Qge1BJWEkuRGlzcGxheU9iamVjdH0gVGhlIGRpc3BsYXlPYmplY3QgdG8gcmVuZGVyXG4gKiBAcHJpdmF0ZVxuICovXG5DYW52YXNSZW5kZXJlci5wcm90b3R5cGUucmVuZGVyRGlzcGxheU9iamVjdCA9IGZ1bmN0aW9uIChkaXNwbGF5T2JqZWN0LCBjb250ZXh0KVxue1xuICAgIHZhciB0ZW1wQ29udGV4dCA9IHRoaXMuY29udGV4dDtcblxuICAgIHRoaXMuY29udGV4dCA9IGNvbnRleHQ7XG4gICAgZGlzcGxheU9iamVjdC5yZW5kZXJDYW52YXModGhpcyk7XG4gICAgdGhpcy5jb250ZXh0ID0gdGVtcENvbnRleHQ7XG59O1xuXG4vKipcbiAqIEBleHRlbmRzIFBJWEkuU3lzdGVtUmVuZGVyZXIjcmVzaXplXG4gKlxuICogQHBhcmFtIHtudW1iZXJ9IHdcbiAqIEBwYXJhbSB7bnVtYmVyfSBoXG4gKi9cbkNhbnZhc1JlbmRlcmVyLnByb3RvdHlwZS5yZXNpemUgPSBmdW5jdGlvbiAodywgaClcbntcbiAgICBTeXN0ZW1SZW5kZXJlci5wcm90b3R5cGUucmVzaXplLmNhbGwodGhpcywgdywgaCk7XG5cbiAgICAvL3Jlc2V0IHRoZSBzY2FsZSBtb2RlLi4gb2RkbHkgdGhpcyBzZWVtcyB0byBiZSByZXNldCB3aGVuIHRoZSBjYW52YXMgaXMgcmVzaXplZC5cbiAgICAvL3N1cmVseSBhIGJyb3dzZXIgYnVnPz8gTGV0IHBpeGkgZml4IHRoYXQgZm9yIHlvdS4uXG4gICAgaWYodGhpcy5zbW9vdGhQcm9wZXJ0eSlcbiAgICB7XG4gICAgICAgIHRoaXMuY29udGV4dFt0aGlzLnNtb290aFByb3BlcnR5XSA9IChDT05TVC5TQ0FMRV9NT0RFUy5ERUZBVUxUID09PSBDT05TVC5TQ0FMRV9NT0RFUy5MSU5FQVIpO1xuICAgIH1cblxufTtcblxuLyoqXG4gKiBNYXBzIFBpeGkgYmxlbmQgbW9kZXMgdG8gY2FudmFzIGJsZW5kIG1vZGVzLlxuICpcbiAqIEBwcml2YXRlXG4gKi9cbkNhbnZhc1JlbmRlcmVyLnByb3RvdHlwZS5fbWFwQmxlbmRNb2RlcyA9IGZ1bmN0aW9uICgpXG57XG4gICAgaWYgKCF0aGlzLmJsZW5kTW9kZXMpXG4gICAge1xuICAgICAgICB0aGlzLmJsZW5kTW9kZXMgPSB7fTtcblxuICAgICAgICBpZiAodXRpbHMuY2FuVXNlTmV3Q2FudmFzQmxlbmRNb2RlcygpKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuTk9STUFMXSAgICAgICAgPSAnc291cmNlLW92ZXInO1xuICAgICAgICAgICAgdGhpcy5ibGVuZE1vZGVzW0NPTlNULkJMRU5EX01PREVTLkFERF0gICAgICAgICAgID0gJ2xpZ2h0ZXInOyAvL0lTIFRISVMgT0s/Pz9cbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5NVUxUSVBMWV0gICAgICA9ICdtdWx0aXBseSc7XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuU0NSRUVOXSAgICAgICAgPSAnc2NyZWVuJztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5PVkVSTEFZXSAgICAgICA9ICdvdmVybGF5JztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5EQVJLRU5dICAgICAgICA9ICdkYXJrZW4nO1xuICAgICAgICAgICAgdGhpcy5ibGVuZE1vZGVzW0NPTlNULkJMRU5EX01PREVTLkxJR0hURU5dICAgICAgID0gJ2xpZ2h0ZW4nO1xuICAgICAgICAgICAgdGhpcy5ibGVuZE1vZGVzW0NPTlNULkJMRU5EX01PREVTLkNPTE9SX0RPREdFXSAgID0gJ2NvbG9yLWRvZGdlJztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5DT0xPUl9CVVJOXSAgICA9ICdjb2xvci1idXJuJztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5IQVJEX0xJR0hUXSAgICA9ICdoYXJkLWxpZ2h0JztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5TT0ZUX0xJR0hUXSAgICA9ICdzb2Z0LWxpZ2h0JztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5ESUZGRVJFTkNFXSAgICA9ICdkaWZmZXJlbmNlJztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5FWENMVVNJT05dICAgICA9ICdleGNsdXNpb24nO1xuICAgICAgICAgICAgdGhpcy5ibGVuZE1vZGVzW0NPTlNULkJMRU5EX01PREVTLkhVRV0gICAgICAgICAgID0gJ2h1ZSc7XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuU0FUVVJBVElPTl0gICAgPSAnc2F0dXJhdGUnO1xuICAgICAgICAgICAgdGhpcy5ibGVuZE1vZGVzW0NPTlNULkJMRU5EX01PREVTLkNPTE9SXSAgICAgICAgID0gJ2NvbG9yJztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5MVU1JTk9TSVRZXSAgICA9ICdsdW1pbm9zaXR5JztcbiAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgIHtcbiAgICAgICAgICAgIC8vIHRoaXMgbWVhbnMgdGhhdCB0aGUgYnJvd3NlciBkb2VzIG5vdCBzdXBwb3J0IHRoZSBjb29sIG5ldyBibGVuZCBtb2RlcyBpbiBjYW52YXMgJ2NvdWdoJyBpZSAnY291Z2gnXG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuTk9STUFMXSAgICAgICAgPSAnc291cmNlLW92ZXInO1xuICAgICAgICAgICAgdGhpcy5ibGVuZE1vZGVzW0NPTlNULkJMRU5EX01PREVTLkFERF0gICAgICAgICAgID0gJ2xpZ2h0ZXInOyAvL0lTIFRISVMgT0s/Pz9cbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5NVUxUSVBMWV0gICAgICA9ICdzb3VyY2Utb3Zlcic7XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuU0NSRUVOXSAgICAgICAgPSAnc291cmNlLW92ZXInO1xuICAgICAgICAgICAgdGhpcy5ibGVuZE1vZGVzW0NPTlNULkJMRU5EX01PREVTLk9WRVJMQVldICAgICAgID0gJ3NvdXJjZS1vdmVyJztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5EQVJLRU5dICAgICAgICA9ICdzb3VyY2Utb3Zlcic7XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuTElHSFRFTl0gICAgICAgPSAnc291cmNlLW92ZXInO1xuICAgICAgICAgICAgdGhpcy5ibGVuZE1vZGVzW0NPTlNULkJMRU5EX01PREVTLkNPTE9SX0RPREdFXSAgID0gJ3NvdXJjZS1vdmVyJztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5DT0xPUl9CVVJOXSAgICA9ICdzb3VyY2Utb3Zlcic7XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuSEFSRF9MSUdIVF0gICAgPSAnc291cmNlLW92ZXInO1xuICAgICAgICAgICAgdGhpcy5ibGVuZE1vZGVzW0NPTlNULkJMRU5EX01PREVTLlNPRlRfTElHSFRdICAgID0gJ3NvdXJjZS1vdmVyJztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5ESUZGRVJFTkNFXSAgICA9ICdzb3VyY2Utb3Zlcic7XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuRVhDTFVTSU9OXSAgICAgPSAnc291cmNlLW92ZXInO1xuICAgICAgICAgICAgdGhpcy5ibGVuZE1vZGVzW0NPTlNULkJMRU5EX01PREVTLkhVRV0gICAgICAgICAgID0gJ3NvdXJjZS1vdmVyJztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5TQVRVUkFUSU9OXSAgICA9ICdzb3VyY2Utb3Zlcic7XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuQ09MT1JdICAgICAgICAgPSAnc291cmNlLW92ZXInO1xuICAgICAgICAgICAgdGhpcy5ibGVuZE1vZGVzW0NPTlNULkJMRU5EX01PREVTLkxVTUlOT1NJVFldICAgID0gJ3NvdXJjZS1vdmVyJztcbiAgICAgICAgfVxuICAgIH1cbn07XG4iLCIvKipcbiAqIENyZWF0ZXMgYSBDYW52YXMgZWxlbWVudCBvZiB0aGUgZ2l2ZW4gc2l6ZS5cbiAqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gd2lkdGgge251bWJlcn0gdGhlIHdpZHRoIGZvciB0aGUgbmV3bHkgY3JlYXRlZCBjYW52YXNcbiAqIEBwYXJhbSBoZWlnaHQge251bWJlcn0gdGhlIGhlaWdodCBmb3IgdGhlIG5ld2x5IGNyZWF0ZWQgY2FudmFzXG4gKi9cbmZ1bmN0aW9uIENhbnZhc0J1ZmZlcih3aWR0aCwgaGVpZ2h0KVxue1xuICAgIC8qKlxuICAgICAqIFRoZSBDYW52YXMgb2JqZWN0IHRoYXQgYmVsb25ncyB0byB0aGlzIENhbnZhc0J1ZmZlci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge0hUTUxDYW52YXNFbGVtZW50fVxuICAgICAqL1xuICAgIHRoaXMuY2FudmFzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnY2FudmFzJyk7XG5cbiAgICAvKipcbiAgICAgKiBBIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRCBvYmplY3QgcmVwcmVzZW50aW5nIGEgdHdvLWRpbWVuc2lvbmFsIHJlbmRlcmluZyBjb250ZXh0LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEfVxuICAgICAqL1xuICAgIHRoaXMuY29udGV4dCA9IHRoaXMuY2FudmFzLmdldENvbnRleHQoJzJkJyk7XG5cbiAgICB0aGlzLmNhbnZhcy53aWR0aCA9IHdpZHRoO1xuICAgIHRoaXMuY2FudmFzLmhlaWdodCA9IGhlaWdodDtcbn1cblxuQ2FudmFzQnVmZmVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IENhbnZhc0J1ZmZlcjtcbm1vZHVsZS5leHBvcnRzID0gQ2FudmFzQnVmZmVyO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhDYW52YXNCdWZmZXIucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogVGhlIHdpZHRoIG9mIHRoZSBjYW52YXMgYnVmZmVyIGluIHBpeGVscy5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5DYW52YXNCdWZmZXIjXG4gICAgICovXG4gICAgd2lkdGg6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jYW52YXMud2lkdGg7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbClcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5jYW52YXMud2lkdGggPSB2YWw7XG4gICAgICAgIH1cbiAgICB9LFxuICAgIC8qKlxuICAgICAqIFRoZSBoZWlnaHQgb2YgdGhlIGNhbnZhcyBidWZmZXIgaW4gcGl4ZWxzLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLkNhbnZhc0J1ZmZlciNcbiAgICAgKi9cbiAgICBoZWlnaHQ6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jYW52YXMuaGVpZ2h0O1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWwpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuY2FudmFzLmhlaWdodCA9IHZhbDtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuXG4vKipcbiAqIENsZWFycyB0aGUgY2FudmFzIHRoYXQgd2FzIGNyZWF0ZWQgYnkgdGhlIENhbnZhc0J1ZmZlciBjbGFzcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5DYW52YXNCdWZmZXIucHJvdG90eXBlLmNsZWFyID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLmNvbnRleHQuc2V0VHJhbnNmb3JtKDEsIDAsIDAsIDEsIDAsIDApO1xuICAgIHRoaXMuY29udGV4dC5jbGVhclJlY3QoMCwwLCB0aGlzLmNhbnZhcy53aWR0aCwgdGhpcy5jYW52YXMuaGVpZ2h0KTtcbn07XG5cbi8qKlxuICogUmVzaXplcyB0aGUgY2FudmFzIHRvIHRoZSBzcGVjaWZpZWQgd2lkdGggYW5kIGhlaWdodC5cbiAqXG4gKiBAcGFyYW0gd2lkdGgge251bWJlcn0gdGhlIG5ldyB3aWR0aCBvZiB0aGUgY2FudmFzXG4gKiBAcGFyYW0gaGVpZ2h0IHtudW1iZXJ9IHRoZSBuZXcgaGVpZ2h0IG9mIHRoZSBjYW52YXNcbiAqL1xuQ2FudmFzQnVmZmVyLnByb3RvdHlwZS5yZXNpemUgPSBmdW5jdGlvbiAod2lkdGgsIGhlaWdodClcbntcbiAgICB0aGlzLmNhbnZhcy53aWR0aCA9IHdpZHRoO1xuICAgIHRoaXMuY2FudmFzLmhlaWdodCA9IGhlaWdodDtcbn07XG5cbi8qKlxuICogRGVzdHJveXMgdGhpcyBjYW52YXMuXG4gKlxuICovXG5DYW52YXNCdWZmZXIucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoKVxue1xuICAgIHRoaXMuY29udGV4dCA9IG51bGw7XG4gICAgdGhpcy5jYW52YXMgPSBudWxsO1xufTtcbiIsInZhciBDT05TVCA9IHJlcXVpcmUoJy4uLy4uLy4uL2NvbnN0Jyk7XG5cbi8qKlxuICogQSBzZXQgb2YgZnVuY3Rpb25zIHVzZWQgYnkgdGhlIGNhbnZhcyByZW5kZXJlciB0byBkcmF3IHRoZSBwcmltaXRpdmUgZ3JhcGhpY3MgZGF0YS5cbiAqIEBzdGF0aWNcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqL1xudmFyIENhbnZhc0dyYXBoaWNzID0ge307XG5tb2R1bGUuZXhwb3J0cyA9IENhbnZhc0dyYXBoaWNzO1xuXG4vKlxuICogUmVuZGVycyBhIEdyYXBoaWNzIG9iamVjdCB0byBhIGNhbnZhcy5cbiAqXG4gKiBAcGFyYW0gZ3JhcGhpY3Mge1BJWEkuR3JhcGhpY3N9IHRoZSBhY3R1YWwgZ3JhcGhpY3Mgb2JqZWN0IHRvIHJlbmRlclxuICogQHBhcmFtIGNvbnRleHQge0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRH0gdGhlIDJkIGRyYXdpbmcgbWV0aG9kIG9mIHRoZSBjYW52YXNcbiAqL1xuQ2FudmFzR3JhcGhpY3MucmVuZGVyR3JhcGhpY3MgPSBmdW5jdGlvbiAoZ3JhcGhpY3MsIGNvbnRleHQpXG57XG4gICAgdmFyIHdvcmxkQWxwaGEgPSBncmFwaGljcy53b3JsZEFscGhhO1xuXG4gICAgaWYgKGdyYXBoaWNzLmRpcnR5KVxuICAgIHtcbiAgICAgICAgdGhpcy51cGRhdGVHcmFwaGljc1RpbnQoZ3JhcGhpY3MpO1xuICAgICAgICBncmFwaGljcy5kaXJ0eSA9IGZhbHNlO1xuICAgIH1cblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZ3JhcGhpY3MuZ3JhcGhpY3NEYXRhLmxlbmd0aDsgaSsrKVxuICAgIHtcbiAgICAgICAgdmFyIGRhdGEgPSBncmFwaGljcy5ncmFwaGljc0RhdGFbaV07XG4gICAgICAgIHZhciBzaGFwZSA9IGRhdGEuc2hhcGU7XG5cbiAgICAgICAgdmFyIGZpbGxDb2xvciA9IGRhdGEuX2ZpbGxUaW50O1xuICAgICAgICB2YXIgbGluZUNvbG9yID0gZGF0YS5fbGluZVRpbnQ7XG5cbiAgICAgICAgY29udGV4dC5saW5lV2lkdGggPSBkYXRhLmxpbmVXaWR0aDtcblxuICAgICAgICBpZiAoZGF0YS50eXBlID09PSBDT05TVC5TSEFQRVMuUE9MWSlcbiAgICAgICAge1xuICAgICAgICAgICAgY29udGV4dC5iZWdpblBhdGgoKTtcblxuICAgICAgICAgICAgdmFyIHBvaW50cyA9IHNoYXBlLnBvaW50cztcblxuICAgICAgICAgICAgY29udGV4dC5tb3ZlVG8ocG9pbnRzWzBdLCBwb2ludHNbMV0pO1xuXG4gICAgICAgICAgICBmb3IgKHZhciBqPTE7IGogPCBwb2ludHMubGVuZ3RoLzI7IGorKylcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb250ZXh0LmxpbmVUbyhwb2ludHNbaiAqIDJdLCBwb2ludHNbaiAqIDIgKyAxXSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChzaGFwZS5jbG9zZWQpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29udGV4dC5saW5lVG8ocG9pbnRzWzBdLCBwb2ludHNbMV0pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBpZiB0aGUgZmlyc3QgYW5kIGxhc3QgcG9pbnQgYXJlIHRoZSBzYW1lIGNsb3NlIHRoZSBwYXRoIC0gbXVjaCBuZWF0ZXIgOilcbiAgICAgICAgICAgIGlmIChwb2ludHNbMF0gPT09IHBvaW50c1twb2ludHMubGVuZ3RoLTJdICYmIHBvaW50c1sxXSA9PT0gcG9pbnRzW3BvaW50cy5sZW5ndGgtMV0pXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29udGV4dC5jbG9zZVBhdGgoKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGRhdGEuZmlsbClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb250ZXh0Lmdsb2JhbEFscGhhID0gZGF0YS5maWxsQWxwaGEgKiB3b3JsZEFscGhhO1xuICAgICAgICAgICAgICAgIGNvbnRleHQuZmlsbFN0eWxlID0gJyMnICsgKCcwMDAwMCcgKyAoIGZpbGxDb2xvciB8IDApLnRvU3RyaW5nKDE2KSkuc3Vic3RyKC02KTtcbiAgICAgICAgICAgICAgICBjb250ZXh0LmZpbGwoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChkYXRhLmxpbmVXaWR0aClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb250ZXh0Lmdsb2JhbEFscGhhID0gZGF0YS5saW5lQWxwaGEgKiB3b3JsZEFscGhhO1xuICAgICAgICAgICAgICAgIGNvbnRleHQuc3Ryb2tlU3R5bGUgPSAnIycgKyAoJzAwMDAwJyArICggbGluZUNvbG9yIHwgMCkudG9TdHJpbmcoMTYpKS5zdWJzdHIoLTYpO1xuICAgICAgICAgICAgICAgIGNvbnRleHQuc3Ryb2tlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoZGF0YS50eXBlID09PSBDT05TVC5TSEFQRVMuUkVDVClcbiAgICAgICAge1xuXG4gICAgICAgICAgICBpZiAoZGF0YS5maWxsQ29sb3IgfHwgZGF0YS5maWxsQ29sb3IgPT09IDApXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29udGV4dC5nbG9iYWxBbHBoYSA9IGRhdGEuZmlsbEFscGhhICogd29ybGRBbHBoYTtcbiAgICAgICAgICAgICAgICBjb250ZXh0LmZpbGxTdHlsZSA9ICcjJyArICgnMDAwMDAnICsgKCBmaWxsQ29sb3IgfCAwKS50b1N0cmluZygxNikpLnN1YnN0cigtNik7XG4gICAgICAgICAgICAgICAgY29udGV4dC5maWxsUmVjdChzaGFwZS54LCBzaGFwZS55LCBzaGFwZS53aWR0aCwgc2hhcGUuaGVpZ2h0KTtcblxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGRhdGEubGluZVdpZHRoKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGNvbnRleHQuZ2xvYmFsQWxwaGEgPSBkYXRhLmxpbmVBbHBoYSAqIHdvcmxkQWxwaGE7XG4gICAgICAgICAgICAgICAgY29udGV4dC5zdHJva2VTdHlsZSA9ICcjJyArICgnMDAwMDAnICsgKCBsaW5lQ29sb3IgfCAwKS50b1N0cmluZygxNikpLnN1YnN0cigtNik7XG4gICAgICAgICAgICAgICAgY29udGV4dC5zdHJva2VSZWN0KHNoYXBlLngsIHNoYXBlLnksIHNoYXBlLndpZHRoLCBzaGFwZS5oZWlnaHQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGRhdGEudHlwZSA9PT0gQ09OU1QuU0hBUEVTLkNJUkMpXG4gICAgICAgIHtcbiAgICAgICAgICAgIC8vIFRPRE8gLSBuZWVkIHRvIGJlIFVuZGVmaW5lZCFcbiAgICAgICAgICAgIGNvbnRleHQuYmVnaW5QYXRoKCk7XG4gICAgICAgICAgICBjb250ZXh0LmFyYyhzaGFwZS54LCBzaGFwZS55LCBzaGFwZS5yYWRpdXMsMCwyKk1hdGguUEkpO1xuICAgICAgICAgICAgY29udGV4dC5jbG9zZVBhdGgoKTtcblxuICAgICAgICAgICAgaWYgKGRhdGEuZmlsbClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb250ZXh0Lmdsb2JhbEFscGhhID0gZGF0YS5maWxsQWxwaGEgKiB3b3JsZEFscGhhO1xuICAgICAgICAgICAgICAgIGNvbnRleHQuZmlsbFN0eWxlID0gJyMnICsgKCcwMDAwMCcgKyAoIGZpbGxDb2xvciB8IDApLnRvU3RyaW5nKDE2KSkuc3Vic3RyKC02KTtcbiAgICAgICAgICAgICAgICBjb250ZXh0LmZpbGwoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChkYXRhLmxpbmVXaWR0aClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb250ZXh0Lmdsb2JhbEFscGhhID0gZGF0YS5saW5lQWxwaGEgKiB3b3JsZEFscGhhO1xuICAgICAgICAgICAgICAgIGNvbnRleHQuc3Ryb2tlU3R5bGUgPSAnIycgKyAoJzAwMDAwJyArICggbGluZUNvbG9yIHwgMCkudG9TdHJpbmcoMTYpKS5zdWJzdHIoLTYpO1xuICAgICAgICAgICAgICAgIGNvbnRleHQuc3Ryb2tlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoZGF0YS50eXBlID09PSBDT05TVC5TSEFQRVMuRUxJUClcbiAgICAgICAge1xuICAgICAgICAgICAgLy8gZWxsaXBzZSBjb2RlIHRha2VuIGZyb206IGh0dHA6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvMjE3Mjc5OC9ob3ctdG8tZHJhdy1hbi1vdmFsLWluLWh0bWw1LWNhbnZhc1xuXG4gICAgICAgICAgICB2YXIgdyA9IHNoYXBlLndpZHRoICogMjtcbiAgICAgICAgICAgIHZhciBoID0gc2hhcGUuaGVpZ2h0ICogMjtcblxuICAgICAgICAgICAgdmFyIHggPSBzaGFwZS54IC0gdy8yO1xuICAgICAgICAgICAgdmFyIHkgPSBzaGFwZS55IC0gaC8yO1xuXG4gICAgICAgICAgICBjb250ZXh0LmJlZ2luUGF0aCgpO1xuXG4gICAgICAgICAgICB2YXIga2FwcGEgPSAwLjU1MjI4NDgsXG4gICAgICAgICAgICAgICAgb3ggPSAodyAvIDIpICoga2FwcGEsIC8vIGNvbnRyb2wgcG9pbnQgb2Zmc2V0IGhvcml6b250YWxcbiAgICAgICAgICAgICAgICBveSA9IChoIC8gMikgKiBrYXBwYSwgLy8gY29udHJvbCBwb2ludCBvZmZzZXQgdmVydGljYWxcbiAgICAgICAgICAgICAgICB4ZSA9IHggKyB3LCAgICAgICAgICAgLy8geC1lbmRcbiAgICAgICAgICAgICAgICB5ZSA9IHkgKyBoLCAgICAgICAgICAgLy8geS1lbmRcbiAgICAgICAgICAgICAgICB4bSA9IHggKyB3IC8gMiwgICAgICAgLy8geC1taWRkbGVcbiAgICAgICAgICAgICAgICB5bSA9IHkgKyBoIC8gMjsgICAgICAgLy8geS1taWRkbGVcblxuICAgICAgICAgICAgY29udGV4dC5tb3ZlVG8oeCwgeW0pO1xuICAgICAgICAgICAgY29udGV4dC5iZXppZXJDdXJ2ZVRvKHgsIHltIC0gb3ksIHhtIC0gb3gsIHksIHhtLCB5KTtcbiAgICAgICAgICAgIGNvbnRleHQuYmV6aWVyQ3VydmVUbyh4bSArIG94LCB5LCB4ZSwgeW0gLSBveSwgeGUsIHltKTtcbiAgICAgICAgICAgIGNvbnRleHQuYmV6aWVyQ3VydmVUbyh4ZSwgeW0gKyBveSwgeG0gKyBveCwgeWUsIHhtLCB5ZSk7XG4gICAgICAgICAgICBjb250ZXh0LmJlemllckN1cnZlVG8oeG0gLSBveCwgeWUsIHgsIHltICsgb3ksIHgsIHltKTtcblxuICAgICAgICAgICAgY29udGV4dC5jbG9zZVBhdGgoKTtcblxuICAgICAgICAgICAgaWYgKGRhdGEuZmlsbClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb250ZXh0Lmdsb2JhbEFscGhhID0gZGF0YS5maWxsQWxwaGEgKiB3b3JsZEFscGhhO1xuICAgICAgICAgICAgICAgIGNvbnRleHQuZmlsbFN0eWxlID0gJyMnICsgKCcwMDAwMCcgKyAoIGZpbGxDb2xvciB8IDApLnRvU3RyaW5nKDE2KSkuc3Vic3RyKC02KTtcbiAgICAgICAgICAgICAgICBjb250ZXh0LmZpbGwoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChkYXRhLmxpbmVXaWR0aClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb250ZXh0Lmdsb2JhbEFscGhhID0gZGF0YS5saW5lQWxwaGEgKiB3b3JsZEFscGhhO1xuICAgICAgICAgICAgICAgIGNvbnRleHQuc3Ryb2tlU3R5bGUgPSAnIycgKyAoJzAwMDAwJyArICggbGluZUNvbG9yIHwgMCkudG9TdHJpbmcoMTYpKS5zdWJzdHIoLTYpO1xuICAgICAgICAgICAgICAgIGNvbnRleHQuc3Ryb2tlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoZGF0YS50eXBlID09PSBDT05TVC5TSEFQRVMuUlJFQylcbiAgICAgICAge1xuICAgICAgICAgICAgdmFyIHJ4ID0gc2hhcGUueDtcbiAgICAgICAgICAgIHZhciByeSA9IHNoYXBlLnk7XG4gICAgICAgICAgICB2YXIgd2lkdGggPSBzaGFwZS53aWR0aDtcbiAgICAgICAgICAgIHZhciBoZWlnaHQgPSBzaGFwZS5oZWlnaHQ7XG4gICAgICAgICAgICB2YXIgcmFkaXVzID0gc2hhcGUucmFkaXVzO1xuXG4gICAgICAgICAgICB2YXIgbWF4UmFkaXVzID0gTWF0aC5taW4od2lkdGgsIGhlaWdodCkgLyAyIHwgMDtcbiAgICAgICAgICAgIHJhZGl1cyA9IHJhZGl1cyA+IG1heFJhZGl1cyA/IG1heFJhZGl1cyA6IHJhZGl1cztcblxuICAgICAgICAgICAgY29udGV4dC5iZWdpblBhdGgoKTtcbiAgICAgICAgICAgIGNvbnRleHQubW92ZVRvKHJ4LCByeSArIHJhZGl1cyk7XG4gICAgICAgICAgICBjb250ZXh0LmxpbmVUbyhyeCwgcnkgKyBoZWlnaHQgLSByYWRpdXMpO1xuICAgICAgICAgICAgY29udGV4dC5xdWFkcmF0aWNDdXJ2ZVRvKHJ4LCByeSArIGhlaWdodCwgcnggKyByYWRpdXMsIHJ5ICsgaGVpZ2h0KTtcbiAgICAgICAgICAgIGNvbnRleHQubGluZVRvKHJ4ICsgd2lkdGggLSByYWRpdXMsIHJ5ICsgaGVpZ2h0KTtcbiAgICAgICAgICAgIGNvbnRleHQucXVhZHJhdGljQ3VydmVUbyhyeCArIHdpZHRoLCByeSArIGhlaWdodCwgcnggKyB3aWR0aCwgcnkgKyBoZWlnaHQgLSByYWRpdXMpO1xuICAgICAgICAgICAgY29udGV4dC5saW5lVG8ocnggKyB3aWR0aCwgcnkgKyByYWRpdXMpO1xuICAgICAgICAgICAgY29udGV4dC5xdWFkcmF0aWNDdXJ2ZVRvKHJ4ICsgd2lkdGgsIHJ5LCByeCArIHdpZHRoIC0gcmFkaXVzLCByeSk7XG4gICAgICAgICAgICBjb250ZXh0LmxpbmVUbyhyeCArIHJhZGl1cywgcnkpO1xuICAgICAgICAgICAgY29udGV4dC5xdWFkcmF0aWNDdXJ2ZVRvKHJ4LCByeSwgcngsIHJ5ICsgcmFkaXVzKTtcbiAgICAgICAgICAgIGNvbnRleHQuY2xvc2VQYXRoKCk7XG5cbiAgICAgICAgICAgIGlmIChkYXRhLmZpbGxDb2xvciB8fCBkYXRhLmZpbGxDb2xvciA9PT0gMClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb250ZXh0Lmdsb2JhbEFscGhhID0gZGF0YS5maWxsQWxwaGEgKiB3b3JsZEFscGhhO1xuICAgICAgICAgICAgICAgIGNvbnRleHQuZmlsbFN0eWxlID0gJyMnICsgKCcwMDAwMCcgKyAoIGZpbGxDb2xvciB8IDApLnRvU3RyaW5nKDE2KSkuc3Vic3RyKC02KTtcbiAgICAgICAgICAgICAgICBjb250ZXh0LmZpbGwoKTtcblxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGRhdGEubGluZVdpZHRoKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGNvbnRleHQuZ2xvYmFsQWxwaGEgPSBkYXRhLmxpbmVBbHBoYSAqIHdvcmxkQWxwaGE7XG4gICAgICAgICAgICAgICAgY29udGV4dC5zdHJva2VTdHlsZSA9ICcjJyArICgnMDAwMDAnICsgKCBsaW5lQ29sb3IgfCAwKS50b1N0cmluZygxNikpLnN1YnN0cigtNik7XG4gICAgICAgICAgICAgICAgY29udGV4dC5zdHJva2UoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn07XG5cbi8qXG4gKiBSZW5kZXJzIGEgZ3JhcGhpY3MgbWFza1xuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0gZ3JhcGhpY3Mge1BJWEkuR3JhcGhpY3N9IHRoZSBncmFwaGljcyB3aGljaCB3aWxsIGJlIHVzZWQgYXMgYSBtYXNrXG4gKiBAcGFyYW0gY29udGV4dCB7Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEfSB0aGUgY29udGV4dCAyZCBtZXRob2Qgb2YgdGhlIGNhbnZhc1xuICovXG5DYW52YXNHcmFwaGljcy5yZW5kZXJHcmFwaGljc01hc2sgPSBmdW5jdGlvbiAoZ3JhcGhpY3MsIGNvbnRleHQpXG57XG4gICAgdmFyIGxlbiA9IGdyYXBoaWNzLmdyYXBoaWNzRGF0YS5sZW5ndGg7XG5cbiAgICBpZiAobGVuID09PSAwKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnRleHQuYmVnaW5QYXRoKCk7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgaSsrKVxuICAgIHtcbiAgICAgICAgdmFyIGRhdGEgPSBncmFwaGljcy5ncmFwaGljc0RhdGFbaV07XG4gICAgICAgIHZhciBzaGFwZSA9IGRhdGEuc2hhcGU7XG5cbiAgICAgICAgaWYgKGRhdGEudHlwZSA9PT0gQ09OU1QuU0hBUEVTLlBPTFkpXG4gICAgICAgIHtcblxuICAgICAgICAgICAgdmFyIHBvaW50cyA9IHNoYXBlLnBvaW50cztcblxuICAgICAgICAgICAgY29udGV4dC5tb3ZlVG8ocG9pbnRzWzBdLCBwb2ludHNbMV0pO1xuXG4gICAgICAgICAgICBmb3IgKHZhciBqPTE7IGogPCBwb2ludHMubGVuZ3RoLzI7IGorKylcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb250ZXh0LmxpbmVUbyhwb2ludHNbaiAqIDJdLCBwb2ludHNbaiAqIDIgKyAxXSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIGlmIHRoZSBmaXJzdCBhbmQgbGFzdCBwb2ludCBhcmUgdGhlIHNhbWUgY2xvc2UgdGhlIHBhdGggLSBtdWNoIG5lYXRlciA6KVxuICAgICAgICAgICAgaWYgKHBvaW50c1swXSA9PT0gcG9pbnRzW3BvaW50cy5sZW5ndGgtMl0gJiYgcG9pbnRzWzFdID09PSBwb2ludHNbcG9pbnRzLmxlbmd0aC0xXSlcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb250ZXh0LmNsb3NlUGF0aCgpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoZGF0YS50eXBlID09PSBDT05TVC5TSEFQRVMuUkVDVClcbiAgICAgICAge1xuICAgICAgICAgICAgY29udGV4dC5yZWN0KHNoYXBlLngsIHNoYXBlLnksIHNoYXBlLndpZHRoLCBzaGFwZS5oZWlnaHQpO1xuICAgICAgICAgICAgY29udGV4dC5jbG9zZVBhdGgoKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChkYXRhLnR5cGUgPT09IENPTlNULlNIQVBFUy5DSVJDKVxuICAgICAgICB7XG4gICAgICAgICAgICAvLyBUT0RPIC0gbmVlZCB0byBiZSBVbmRlZmluZWQhXG4gICAgICAgICAgICBjb250ZXh0LmFyYyhzaGFwZS54LCBzaGFwZS55LCBzaGFwZS5yYWRpdXMsIDAsIDIgKiBNYXRoLlBJKTtcbiAgICAgICAgICAgIGNvbnRleHQuY2xvc2VQYXRoKCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoZGF0YS50eXBlID09PSBDT05TVC5TSEFQRVMuRUxJUClcbiAgICAgICAge1xuXG4gICAgICAgICAgICAvLyBlbGxpcHNlIGNvZGUgdGFrZW4gZnJvbTogaHR0cDovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy8yMTcyNzk4L2hvdy10by1kcmF3LWFuLW92YWwtaW4taHRtbDUtY2FudmFzXG5cbiAgICAgICAgICAgIHZhciB3ID0gc2hhcGUud2lkdGggKiAyO1xuICAgICAgICAgICAgdmFyIGggPSBzaGFwZS5oZWlnaHQgKiAyO1xuXG4gICAgICAgICAgICB2YXIgeCA9IHNoYXBlLnggLSB3LzI7XG4gICAgICAgICAgICB2YXIgeSA9IHNoYXBlLnkgLSBoLzI7XG5cbiAgICAgICAgICAgIHZhciBrYXBwYSA9IDAuNTUyMjg0OCxcbiAgICAgICAgICAgICAgICBveCA9ICh3IC8gMikgKiBrYXBwYSwgLy8gY29udHJvbCBwb2ludCBvZmZzZXQgaG9yaXpvbnRhbFxuICAgICAgICAgICAgICAgIG95ID0gKGggLyAyKSAqIGthcHBhLCAvLyBjb250cm9sIHBvaW50IG9mZnNldCB2ZXJ0aWNhbFxuICAgICAgICAgICAgICAgIHhlID0geCArIHcsICAgICAgICAgICAvLyB4LWVuZFxuICAgICAgICAgICAgICAgIHllID0geSArIGgsICAgICAgICAgICAvLyB5LWVuZFxuICAgICAgICAgICAgICAgIHhtID0geCArIHcgLyAyLCAgICAgICAvLyB4LW1pZGRsZVxuICAgICAgICAgICAgICAgIHltID0geSArIGggLyAyOyAgICAgICAvLyB5LW1pZGRsZVxuXG4gICAgICAgICAgICBjb250ZXh0Lm1vdmVUbyh4LCB5bSk7XG4gICAgICAgICAgICBjb250ZXh0LmJlemllckN1cnZlVG8oeCwgeW0gLSBveSwgeG0gLSBveCwgeSwgeG0sIHkpO1xuICAgICAgICAgICAgY29udGV4dC5iZXppZXJDdXJ2ZVRvKHhtICsgb3gsIHksIHhlLCB5bSAtIG95LCB4ZSwgeW0pO1xuICAgICAgICAgICAgY29udGV4dC5iZXppZXJDdXJ2ZVRvKHhlLCB5bSArIG95LCB4bSArIG94LCB5ZSwgeG0sIHllKTtcbiAgICAgICAgICAgIGNvbnRleHQuYmV6aWVyQ3VydmVUbyh4bSAtIG94LCB5ZSwgeCwgeW0gKyBveSwgeCwgeW0pO1xuICAgICAgICAgICAgY29udGV4dC5jbG9zZVBhdGgoKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChkYXRhLnR5cGUgPT09IENPTlNULlNIQVBFUy5SUkVDKVxuICAgICAgICB7XG5cbiAgICAgICAgICAgIHZhciByeCA9IHNoYXBlLng7XG4gICAgICAgICAgICB2YXIgcnkgPSBzaGFwZS55O1xuICAgICAgICAgICAgdmFyIHdpZHRoID0gc2hhcGUud2lkdGg7XG4gICAgICAgICAgICB2YXIgaGVpZ2h0ID0gc2hhcGUuaGVpZ2h0O1xuICAgICAgICAgICAgdmFyIHJhZGl1cyA9IHNoYXBlLnJhZGl1cztcblxuICAgICAgICAgICAgdmFyIG1heFJhZGl1cyA9IE1hdGgubWluKHdpZHRoLCBoZWlnaHQpIC8gMiB8IDA7XG4gICAgICAgICAgICByYWRpdXMgPSByYWRpdXMgPiBtYXhSYWRpdXMgPyBtYXhSYWRpdXMgOiByYWRpdXM7XG5cbiAgICAgICAgICAgIGNvbnRleHQubW92ZVRvKHJ4LCByeSArIHJhZGl1cyk7XG4gICAgICAgICAgICBjb250ZXh0LmxpbmVUbyhyeCwgcnkgKyBoZWlnaHQgLSByYWRpdXMpO1xuICAgICAgICAgICAgY29udGV4dC5xdWFkcmF0aWNDdXJ2ZVRvKHJ4LCByeSArIGhlaWdodCwgcnggKyByYWRpdXMsIHJ5ICsgaGVpZ2h0KTtcbiAgICAgICAgICAgIGNvbnRleHQubGluZVRvKHJ4ICsgd2lkdGggLSByYWRpdXMsIHJ5ICsgaGVpZ2h0KTtcbiAgICAgICAgICAgIGNvbnRleHQucXVhZHJhdGljQ3VydmVUbyhyeCArIHdpZHRoLCByeSArIGhlaWdodCwgcnggKyB3aWR0aCwgcnkgKyBoZWlnaHQgLSByYWRpdXMpO1xuICAgICAgICAgICAgY29udGV4dC5saW5lVG8ocnggKyB3aWR0aCwgcnkgKyByYWRpdXMpO1xuICAgICAgICAgICAgY29udGV4dC5xdWFkcmF0aWNDdXJ2ZVRvKHJ4ICsgd2lkdGgsIHJ5LCByeCArIHdpZHRoIC0gcmFkaXVzLCByeSk7XG4gICAgICAgICAgICBjb250ZXh0LmxpbmVUbyhyeCArIHJhZGl1cywgcnkpO1xuICAgICAgICAgICAgY29udGV4dC5xdWFkcmF0aWNDdXJ2ZVRvKHJ4LCByeSwgcngsIHJ5ICsgcmFkaXVzKTtcbiAgICAgICAgICAgIGNvbnRleHQuY2xvc2VQYXRoKCk7XG4gICAgICAgIH1cbiAgICB9XG59O1xuXG4vKlxuICogVXBkYXRlcyB0aGUgdGludCBvZiBhIGdyYXBoaWNzIG9iamVjdFxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0gZ3JhcGhpY3Mge1BJWEkuR3JhcGhpY3N9IHRoZSBncmFwaGljcyB0aGF0IHdpbGwgaGF2ZSBpdHMgdGludCB1cGRhdGVkXG4gKlxuICovXG5DYW52YXNHcmFwaGljcy51cGRhdGVHcmFwaGljc1RpbnQgPSBmdW5jdGlvbiAoZ3JhcGhpY3MpXG57XG4gICAgaWYgKGdyYXBoaWNzLnRpbnQgPT09IDB4RkZGRkZGICYmIGdyYXBoaWNzLl9wcmV2VGludCA9PT0gZ3JhcGhpY3MudGludClcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgZ3JhcGhpY3MuX3ByZXZUaW50ID0gZ3JhcGhpY3MudGludDtcblxuICAgIHZhciB0aW50UiA9IChncmFwaGljcy50aW50ID4+IDE2ICYgMHhGRikgLyAyNTU7XG4gICAgdmFyIHRpbnRHID0gKGdyYXBoaWNzLnRpbnQgPj4gOCAmIDB4RkYpIC8gMjU1O1xuICAgIHZhciB0aW50QiA9IChncmFwaGljcy50aW50ICYgMHhGRikvIDI1NTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZ3JhcGhpY3MuZ3JhcGhpY3NEYXRhLmxlbmd0aDsgaSsrKVxuICAgIHtcbiAgICAgICAgdmFyIGRhdGEgPSBncmFwaGljcy5ncmFwaGljc0RhdGFbaV07XG5cbiAgICAgICAgdmFyIGZpbGxDb2xvciA9IGRhdGEuZmlsbENvbG9yIHwgMDtcbiAgICAgICAgdmFyIGxpbmVDb2xvciA9IGRhdGEubGluZUNvbG9yIHwgMDtcblxuICAgICAgICAvKlxuICAgICAgICB2YXIgY29sb3JSID0gKGZpbGxDb2xvciA+PiAxNiAmIDB4RkYpIC8gMjU1O1xuICAgICAgICB2YXIgY29sb3JHID0gKGZpbGxDb2xvciA+PiA4ICYgMHhGRikgLyAyNTU7XG4gICAgICAgIHZhciBjb2xvckIgPSAoZmlsbENvbG9yICYgMHhGRikgLyAyNTU7XG5cbiAgICAgICAgY29sb3JSICo9IHRpbnRSO1xuICAgICAgICBjb2xvckcgKj0gdGludEc7XG4gICAgICAgIGNvbG9yQiAqPSB0aW50QjtcblxuICAgICAgICBmaWxsQ29sb3IgPSAoKGNvbG9yUioyNTUgPDwgMTYpICsgKGNvbG9yRyoyNTUgPDwgOCkgKyBjb2xvckIqMjU1KTtcblxuICAgICAgICBjb2xvclIgPSAobGluZUNvbG9yID4+IDE2ICYgMHhGRikgLyAyNTU7XG4gICAgICAgIGNvbG9yRyA9IChsaW5lQ29sb3IgPj4gOCAmIDB4RkYpIC8gMjU1O1xuICAgICAgICBjb2xvckIgPSAobGluZUNvbG9yICYgMHhGRikgLyAyNTU7XG5cbiAgICAgICAgY29sb3JSICo9IHRpbnRSO1xuICAgICAgICBjb2xvckcgKj0gdGludEc7XG4gICAgICAgIGNvbG9yQiAqPSB0aW50QjtcblxuICAgICAgICBsaW5lQ29sb3IgPSAoKGNvbG9yUioyNTUgPDwgMTYpICsgKGNvbG9yRyoyNTUgPDwgOCkgKyBjb2xvckIqMjU1KTtcbiAgICAgICAgKi9cblxuICAgICAgICAvLyBzdXBlciBpbmxpbmUgY29zIGltIGFuIG9wdGltaXphdGlvbiBOQVpJIDopXG4gICAgICAgIGRhdGEuX2ZpbGxUaW50ID0gKCgoZmlsbENvbG9yID4+IDE2ICYgMHhGRikgLyAyNTUgKiB0aW50UioyNTUgPDwgMTYpICsgKChmaWxsQ29sb3IgPj4gOCAmIDB4RkYpIC8gMjU1ICogdGludEcqMjU1IDw8IDgpICsgIChmaWxsQ29sb3IgJiAweEZGKSAvIDI1NSAqIHRpbnRCKjI1NSk7XG4gICAgICAgIGRhdGEuX2xpbmVUaW50ID0gKCgobGluZUNvbG9yID4+IDE2ICYgMHhGRikgLyAyNTUgKiB0aW50UioyNTUgPDwgMTYpICsgKChsaW5lQ29sb3IgPj4gOCAmIDB4RkYpIC8gMjU1ICogdGludEcqMjU1IDw8IDgpICsgIChsaW5lQ29sb3IgJiAweEZGKSAvIDI1NSAqIHRpbnRCKjI1NSk7XG5cbiAgICB9XG59O1xuXG4iLCJ2YXIgQ2FudmFzR3JhcGhpY3MgPSByZXF1aXJlKCcuL0NhbnZhc0dyYXBoaWNzJyk7XG5cbi8qKlxuICogQSBzZXQgb2YgZnVuY3Rpb25zIHVzZWQgdG8gaGFuZGxlIG1hc2tpbmcuXG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICovXG5mdW5jdGlvbiBDYW52YXNNYXNrTWFuYWdlcigpXG57fVxuXG5DYW52YXNNYXNrTWFuYWdlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBDYW52YXNNYXNrTWFuYWdlcjtcbm1vZHVsZS5leHBvcnRzID0gQ2FudmFzTWFza01hbmFnZXI7XG5cbi8qKlxuICogVGhpcyBtZXRob2QgYWRkcyBpdCB0byB0aGUgY3VycmVudCBzdGFjayBvZiBtYXNrcy5cbiAqXG4gKiBAcGFyYW0gbWFza0RhdGEge29iamVjdH0gdGhlIG1hc2tEYXRhIHRoYXQgd2lsbCBiZSBwdXNoZWRcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5XZWJHTFJlbmRlcmVyfFBJWEkuQ2FudmFzUmVuZGVyZXJ9IFRoZSByZW5kZXJlciBjb250ZXh0IHRvIHVzZS5cbiAqL1xuQ2FudmFzTWFza01hbmFnZXIucHJvdG90eXBlLnB1c2hNYXNrID0gZnVuY3Rpb24gKG1hc2tEYXRhLCByZW5kZXJlcilcbntcblxuICAgIHJlbmRlcmVyLmNvbnRleHQuc2F2ZSgpO1xuXG4gICAgdmFyIGNhY2hlQWxwaGEgPSBtYXNrRGF0YS5hbHBoYTtcbiAgICB2YXIgdHJhbnNmb3JtID0gbWFza0RhdGEud29ybGRUcmFuc2Zvcm07XG4gICAgdmFyIHJlc29sdXRpb24gPSByZW5kZXJlci5yZXNvbHV0aW9uO1xuXG4gICAgcmVuZGVyZXIuY29udGV4dC5zZXRUcmFuc2Zvcm0oXG4gICAgICAgIHRyYW5zZm9ybS5hICogcmVzb2x1dGlvbixcbiAgICAgICAgdHJhbnNmb3JtLmIgKiByZXNvbHV0aW9uLFxuICAgICAgICB0cmFuc2Zvcm0uYyAqIHJlc29sdXRpb24sXG4gICAgICAgIHRyYW5zZm9ybS5kICogcmVzb2x1dGlvbixcbiAgICAgICAgdHJhbnNmb3JtLnR4ICogcmVzb2x1dGlvbixcbiAgICAgICAgdHJhbnNmb3JtLnR5ICogcmVzb2x1dGlvblxuICAgICk7XG5cbiAgICAvL1RPRE8gc3Vwb3J0IHNwcml0ZSBhbHBoYSBtYXNrcz8/XG4gICAgLy9sb3RzIG9mIGVmZm9ydCByZXF1aXJlZC4gSWYgZGVtYW5kIGlzIGdyZWF0IGVub3VnaC4uXG4gICAgaWYoIW1hc2tEYXRhLnRleHR1cmUpXG4gICAge1xuICAgICAgICBDYW52YXNHcmFwaGljcy5yZW5kZXJHcmFwaGljc01hc2sobWFza0RhdGEsIHJlbmRlcmVyLmNvbnRleHQpO1xuICAgICAgICByZW5kZXJlci5jb250ZXh0LmNsaXAoKTtcbiAgICB9XG5cbiAgICBtYXNrRGF0YS53b3JsZEFscGhhID0gY2FjaGVBbHBoYTtcbn07XG5cbi8qKlxuICogUmVzdG9yZXMgdGhlIGN1cnJlbnQgZHJhd2luZyBjb250ZXh0IHRvIHRoZSBzdGF0ZSBpdCB3YXMgYmVmb3JlIHRoZSBtYXNrIHdhcyBhcHBsaWVkLlxuICpcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5XZWJHTFJlbmRlcmVyfFBJWEkuQ2FudmFzUmVuZGVyZXJ9IFRoZSByZW5kZXJlciBjb250ZXh0IHRvIHVzZS5cbiAqL1xuQ2FudmFzTWFza01hbmFnZXIucHJvdG90eXBlLnBvcE1hc2sgPSBmdW5jdGlvbiAocmVuZGVyZXIpXG57XG4gICAgcmVuZGVyZXIuY29udGV4dC5yZXN0b3JlKCk7XG59O1xuXG5DYW52YXNNYXNrTWFuYWdlci5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uICgpIHt9O1xuIiwidmFyIHV0aWxzID0gcmVxdWlyZSgnLi4vLi4vLi4vdXRpbHMnKTtcblxuLyoqXG4gKiBVdGlsaXR5IG1ldGhvZHMgZm9yIFNwcml0ZS9UZXh0dXJlIHRpbnRpbmcuXG4gKiBAc3RhdGljXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKi9cbnZhciBDYW52YXNUaW50ZXIgPSB7fTtcbm1vZHVsZS5leHBvcnRzID0gQ2FudmFzVGludGVyO1xuXG4vKipcbiAqIEJhc2ljYWxseSB0aGlzIG1ldGhvZCBqdXN0IG5lZWRzIGEgc3ByaXRlIGFuZCBhIGNvbG9yIGFuZCB0aW50cyB0aGUgc3ByaXRlIHdpdGggdGhlIGdpdmVuIGNvbG9yLlxuICpcbiAqIEBwYXJhbSBzcHJpdGUge1BJWEkuU3ByaXRlfSB0aGUgc3ByaXRlIHRvIHRpbnRcbiAqIEBwYXJhbSBjb2xvciB7bnVtYmVyfSB0aGUgY29sb3IgdG8gdXNlIHRvIHRpbnQgdGhlIHNwcml0ZSB3aXRoXG4gKiBAcmV0dXJuIHtIVE1MQ2FudmFzRWxlbWVudH0gVGhlIHRpbnRlZCBjYW52YXNcbiAqL1xuQ2FudmFzVGludGVyLmdldFRpbnRlZFRleHR1cmUgPSBmdW5jdGlvbiAoc3ByaXRlLCBjb2xvcilcbntcbiAgICB2YXIgdGV4dHVyZSA9IHNwcml0ZS50ZXh0dXJlO1xuXG4gICAgY29sb3IgPSBDYW52YXNUaW50ZXIucm91bmRDb2xvcihjb2xvcik7XG5cbiAgICB2YXIgc3RyaW5nQ29sb3IgPSAnIycgKyAoJzAwMDAwJyArICggY29sb3IgfCAwKS50b1N0cmluZygxNikpLnN1YnN0cigtNik7XG5cbiAgICB0ZXh0dXJlLnRpbnRDYWNoZSA9IHRleHR1cmUudGludENhY2hlIHx8IHt9O1xuXG4gICAgaWYgKHRleHR1cmUudGludENhY2hlW3N0cmluZ0NvbG9yXSlcbiAgICB7XG4gICAgICAgIHJldHVybiB0ZXh0dXJlLnRpbnRDYWNoZVtzdHJpbmdDb2xvcl07XG4gICAgfVxuXG4gICAgIC8vIGNsb25lIHRleHR1cmUuLlxuICAgIHZhciBjYW52YXMgPSBDYW52YXNUaW50ZXIuY2FudmFzIHx8IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NhbnZhcycpO1xuXG4gICAgLy9DYW52YXNUaW50ZXIudGludFdpdGhQZXJQaXhlbCh0ZXh0dXJlLCBzdHJpbmdDb2xvciwgY2FudmFzKTtcbiAgICBDYW52YXNUaW50ZXIudGludE1ldGhvZCh0ZXh0dXJlLCBjb2xvciwgY2FudmFzKTtcblxuICAgIGlmIChDYW52YXNUaW50ZXIuY29udmVydFRpbnRUb0ltYWdlKVxuICAgIHtcbiAgICAgICAgLy8gaXMgdGhpcyBiZXR0ZXI/XG4gICAgICAgIHZhciB0aW50SW1hZ2UgPSBuZXcgSW1hZ2UoKTtcbiAgICAgICAgdGludEltYWdlLnNyYyA9IGNhbnZhcy50b0RhdGFVUkwoKTtcblxuICAgICAgICB0ZXh0dXJlLnRpbnRDYWNoZVtzdHJpbmdDb2xvcl0gPSB0aW50SW1hZ2U7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHRleHR1cmUudGludENhY2hlW3N0cmluZ0NvbG9yXSA9IGNhbnZhcztcbiAgICAgICAgLy8gaWYgd2UgYXJlIG5vdCBjb252ZXJ0aW5nIHRoZSB0ZXh0dXJlIHRvIGFuIGltYWdlIHRoZW4gd2UgbmVlZCB0byBsb3NlIHRoZSByZWZlcmVuY2UgdG8gdGhlIGNhbnZhc1xuICAgICAgICBDYW52YXNUaW50ZXIuY2FudmFzID0gbnVsbDtcbiAgICB9XG5cbiAgICByZXR1cm4gY2FudmFzO1xufTtcblxuLyoqXG4gKiBUaW50IGEgdGV4dHVyZSB1c2luZyB0aGUgJ211bHRpcGx5JyBvcGVyYXRpb24uXG4gKlxuICogQHBhcmFtIHRleHR1cmUge1BJWEkuVGV4dHVyZX0gdGhlIHRleHR1cmUgdG8gdGludFxuICogQHBhcmFtIGNvbG9yIHtudW1iZXJ9IHRoZSBjb2xvciB0byB1c2UgdG8gdGludCB0aGUgc3ByaXRlIHdpdGhcbiAqIEBwYXJhbSBjYW52YXMge0hUTUxDYW52YXNFbGVtZW50fSB0aGUgY3VycmVudCBjYW52YXNcbiAqL1xuQ2FudmFzVGludGVyLnRpbnRXaXRoTXVsdGlwbHkgPSBmdW5jdGlvbiAodGV4dHVyZSwgY29sb3IsIGNhbnZhcylcbntcbiAgICB2YXIgY29udGV4dCA9IGNhbnZhcy5nZXRDb250ZXh0KCAnMmQnICk7XG5cbiAgICB2YXIgcmVzb2x1dGlvbiA9IHRleHR1cmUuYmFzZVRleHR1cmUucmVzb2x1dGlvbjtcblxuICAgIHZhciBjcm9wID0gdGV4dHVyZS5jcm9wLmNsb25lKCk7XG4gICAgY3JvcC54ICo9IHJlc29sdXRpb247XG4gICAgY3JvcC55ICo9IHJlc29sdXRpb247XG4gICAgY3JvcC53aWR0aCAqPSByZXNvbHV0aW9uO1xuICAgIGNyb3AuaGVpZ2h0ICo9IHJlc29sdXRpb247XG5cbiAgICBjYW52YXMud2lkdGggPSBjcm9wLndpZHRoO1xuICAgIGNhbnZhcy5oZWlnaHQgPSBjcm9wLmhlaWdodDtcblxuICAgIGNvbnRleHQuZmlsbFN0eWxlID0gJyMnICsgKCcwMDAwMCcgKyAoIGNvbG9yIHwgMCkudG9TdHJpbmcoMTYpKS5zdWJzdHIoLTYpO1xuXG4gICAgY29udGV4dC5maWxsUmVjdCgwLCAwLCBjcm9wLndpZHRoLCBjcm9wLmhlaWdodCk7XG5cbiAgICBjb250ZXh0Lmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbiA9ICdtdWx0aXBseSc7XG5cbiAgICBjb250ZXh0LmRyYXdJbWFnZShcbiAgICAgICAgdGV4dHVyZS5iYXNlVGV4dHVyZS5zb3VyY2UsXG4gICAgICAgIGNyb3AueCxcbiAgICAgICAgY3JvcC55LFxuICAgICAgICBjcm9wLndpZHRoLFxuICAgICAgICBjcm9wLmhlaWdodCxcbiAgICAgICAgMCxcbiAgICAgICAgMCxcbiAgICAgICAgY3JvcC53aWR0aCxcbiAgICAgICAgY3JvcC5oZWlnaHRcbiAgICApO1xuXG4gICAgY29udGV4dC5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb24gPSAnZGVzdGluYXRpb24tYXRvcCc7XG5cbiAgICBjb250ZXh0LmRyYXdJbWFnZShcbiAgICAgICAgdGV4dHVyZS5iYXNlVGV4dHVyZS5zb3VyY2UsXG4gICAgICAgIGNyb3AueCxcbiAgICAgICAgY3JvcC55LFxuICAgICAgICBjcm9wLndpZHRoLFxuICAgICAgICBjcm9wLmhlaWdodCxcbiAgICAgICAgMCxcbiAgICAgICAgMCxcbiAgICAgICAgY3JvcC53aWR0aCxcbiAgICAgICAgY3JvcC5oZWlnaHRcbiAgICApO1xufTtcblxuLyoqXG4gKiBUaW50IGEgdGV4dHVyZSB1c2luZyB0aGUgJ292ZXJsYXknIG9wZXJhdGlvbi5cbiAqXG4gKiBAcGFyYW0gdGV4dHVyZSB7UElYSS5UZXh0dXJlfSB0aGUgdGV4dHVyZSB0byB0aW50XG4gKiBAcGFyYW0gY29sb3Ige251bWJlcn0gdGhlIGNvbG9yIHRvIHVzZSB0byB0aW50IHRoZSBzcHJpdGUgd2l0aFxuICogQHBhcmFtIGNhbnZhcyB7SFRNTENhbnZhc0VsZW1lbnR9IHRoZSBjdXJyZW50IGNhbnZhc1xuICovXG5DYW52YXNUaW50ZXIudGludFdpdGhPdmVybGF5ID0gZnVuY3Rpb24gKHRleHR1cmUsIGNvbG9yLCBjYW52YXMpXG57XG4gICAgdmFyIGNvbnRleHQgPSBjYW52YXMuZ2V0Q29udGV4dCggJzJkJyApO1xuXG4gICAgdmFyIHJlc29sdXRpb24gPSB0ZXh0dXJlLmJhc2VUZXh0dXJlLnJlc29sdXRpb247XG5cbiAgICB2YXIgY3JvcCA9IHRleHR1cmUuY3JvcC5jbG9uZSgpO1xuICAgIGNyb3AueCAqPSByZXNvbHV0aW9uO1xuICAgIGNyb3AueSAqPSByZXNvbHV0aW9uO1xuICAgIGNyb3Aud2lkdGggKj0gcmVzb2x1dGlvbjtcbiAgICBjcm9wLmhlaWdodCAqPSByZXNvbHV0aW9uO1xuXG4gICAgY2FudmFzLndpZHRoID0gY3JvcC53aWR0aDtcbiAgICBjYW52YXMuaGVpZ2h0ID0gY3JvcC5oZWlnaHQ7XG5cbiAgICBjb250ZXh0Lmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbiA9ICdjb3B5JztcbiAgICBjb250ZXh0LmZpbGxTdHlsZSA9ICcjJyArICgnMDAwMDAnICsgKCBjb2xvciB8IDApLnRvU3RyaW5nKDE2KSkuc3Vic3RyKC02KTtcbiAgICBjb250ZXh0LmZpbGxSZWN0KDAsIDAsIGNyb3Aud2lkdGgsIGNyb3AuaGVpZ2h0KTtcblxuICAgIGNvbnRleHQuZ2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uID0gJ2Rlc3RpbmF0aW9uLWF0b3AnO1xuICAgIGNvbnRleHQuZHJhd0ltYWdlKFxuICAgICAgICB0ZXh0dXJlLmJhc2VUZXh0dXJlLnNvdXJjZSxcbiAgICAgICAgY3JvcC54LFxuICAgICAgICBjcm9wLnksXG4gICAgICAgIGNyb3Aud2lkdGgsXG4gICAgICAgIGNyb3AuaGVpZ2h0LFxuICAgICAgICAwLFxuICAgICAgICAwLFxuICAgICAgICBjcm9wLndpZHRoLFxuICAgICAgICBjcm9wLmhlaWdodFxuICAgICk7XG5cbiAgICAvLyBjb250ZXh0Lmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbiA9ICdjb3B5Jztcbn07XG5cbi8qKlxuICogVGludCBhIHRleHR1cmUgcGl4ZWwgcGVyIHBpeGVsLlxuICpcbiAqIEBwYXJhbSB0ZXh0dXJlIHtQSVhJLlRleHR1cmV9IHRoZSB0ZXh0dXJlIHRvIHRpbnRcbiAqIEBwYXJhbSBjb2xvciB7bnVtYmVyfSB0aGUgY29sb3IgdG8gdXNlIHRvIHRpbnQgdGhlIHNwcml0ZSB3aXRoXG4gKiBAcGFyYW0gY2FudmFzIHtIVE1MQ2FudmFzRWxlbWVudH0gdGhlIGN1cnJlbnQgY2FudmFzXG4gKi9cbkNhbnZhc1RpbnRlci50aW50V2l0aFBlclBpeGVsID0gZnVuY3Rpb24gKHRleHR1cmUsIGNvbG9yLCBjYW52YXMpXG57XG4gICAgdmFyIGNvbnRleHQgPSBjYW52YXMuZ2V0Q29udGV4dCggJzJkJyApO1xuXG4gICAgdmFyIHJlc29sdXRpb24gPSB0ZXh0dXJlLmJhc2VUZXh0dXJlLnJlc29sdXRpb247XG5cbiAgICB2YXIgY3JvcCA9IHRleHR1cmUuY3JvcC5jbG9uZSgpO1xuICAgIGNyb3AueCAqPSByZXNvbHV0aW9uO1xuICAgIGNyb3AueSAqPSByZXNvbHV0aW9uO1xuICAgIGNyb3Aud2lkdGggKj0gcmVzb2x1dGlvbjtcbiAgICBjcm9wLmhlaWdodCAqPSByZXNvbHV0aW9uO1xuXG4gICAgY2FudmFzLndpZHRoID0gY3JvcC53aWR0aDtcbiAgICBjYW52YXMuaGVpZ2h0ID0gY3JvcC5oZWlnaHQ7XG5cbiAgICBjb250ZXh0Lmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbiA9ICdjb3B5JztcbiAgICBjb250ZXh0LmRyYXdJbWFnZShcbiAgICAgICAgdGV4dHVyZS5iYXNlVGV4dHVyZS5zb3VyY2UsXG4gICAgICAgIGNyb3AueCxcbiAgICAgICAgY3JvcC55LFxuICAgICAgICBjcm9wLndpZHRoLFxuICAgICAgICBjcm9wLmhlaWdodCxcbiAgICAgICAgMCxcbiAgICAgICAgMCxcbiAgICAgICAgY3JvcC53aWR0aCxcbiAgICAgICAgY3JvcC5oZWlnaHRcbiAgICApO1xuXG4gICAgdmFyIHJnYlZhbHVlcyA9IHV0aWxzLmhleDJyZ2IoY29sb3IpO1xuICAgIHZhciByID0gcmdiVmFsdWVzWzBdLCBnID0gcmdiVmFsdWVzWzFdLCBiID0gcmdiVmFsdWVzWzJdO1xuXG4gICAgdmFyIHBpeGVsRGF0YSA9IGNvbnRleHQuZ2V0SW1hZ2VEYXRhKDAsIDAsIGNyb3Aud2lkdGgsIGNyb3AuaGVpZ2h0KTtcblxuICAgIHZhciBwaXhlbHMgPSBwaXhlbERhdGEuZGF0YTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcGl4ZWxzLmxlbmd0aDsgaSArPSA0KVxuICAgIHtcbiAgICAgICAgcGl4ZWxzW2krMF0gKj0gcjtcbiAgICAgICAgcGl4ZWxzW2krMV0gKj0gZztcbiAgICAgICAgcGl4ZWxzW2krMl0gKj0gYjtcbiAgICB9XG5cbiAgICBjb250ZXh0LnB1dEltYWdlRGF0YShwaXhlbERhdGEsIDAsIDApO1xufTtcblxuLyoqXG4gKiBSb3VuZHMgdGhlIHNwZWNpZmllZCBjb2xvciBhY2NvcmRpbmcgdG8gdGhlIENhbnZhc1RpbnRlci5jYWNoZVN0ZXBzUGVyQ29sb3JDaGFubmVsLlxuICpcbiAqIEBwYXJhbSBjb2xvciB7bnVtYmVyfSB0aGUgY29sb3IgdG8gcm91bmQsIHNob3VsZCBiZSBhIGhleCBjb2xvclxuICovXG5DYW52YXNUaW50ZXIucm91bmRDb2xvciA9IGZ1bmN0aW9uIChjb2xvcilcbntcbiAgICB2YXIgc3RlcCA9IENhbnZhc1RpbnRlci5jYWNoZVN0ZXBzUGVyQ29sb3JDaGFubmVsO1xuXG4gICAgdmFyIHJnYlZhbHVlcyA9IHV0aWxzLmhleDJyZ2IoY29sb3IpO1xuXG4gICAgcmdiVmFsdWVzWzBdID0gTWF0aC5taW4oMjU1LCAocmdiVmFsdWVzWzBdIC8gc3RlcCkgKiBzdGVwKTtcbiAgICByZ2JWYWx1ZXNbMV0gPSBNYXRoLm1pbigyNTUsIChyZ2JWYWx1ZXNbMV0gLyBzdGVwKSAqIHN0ZXApO1xuICAgIHJnYlZhbHVlc1syXSA9IE1hdGgubWluKDI1NSwgKHJnYlZhbHVlc1syXSAvIHN0ZXApICogc3RlcCk7XG5cbiAgICByZXR1cm4gdXRpbHMucmdiMmhleChyZ2JWYWx1ZXMpO1xufTtcblxuLyoqXG4gKiBOdW1iZXIgb2Ygc3RlcHMgd2hpY2ggd2lsbCBiZSB1c2VkIGFzIGEgY2FwIHdoZW4gcm91bmRpbmcgY29sb3JzLlxuICpcbiAqIEBtZW1iZXJcbiAqL1xuQ2FudmFzVGludGVyLmNhY2hlU3RlcHNQZXJDb2xvckNoYW5uZWwgPSA4O1xuXG4vKipcbiAqIFRpbnQgY2FjaGUgYm9vbGVhbiBmbGFnLlxuICpcbiAqIEBtZW1iZXJcbiAqL1xuQ2FudmFzVGludGVyLmNvbnZlcnRUaW50VG9JbWFnZSA9IGZhbHNlO1xuXG4vKipcbiAqIFdoZXRoZXIgb3Igbm90IHRoZSBDYW52YXMgQmxlbmRNb2RlcyBhcmUgc3VwcG9ydGVkLCBjb25zZXF1ZW50bHkgdGhlIGFiaWxpdHkgdG8gdGludCB1c2luZyB0aGUgbXVsdGlwbHkgbWV0aG9kLlxuICpcbiAqIEBtZW1iZXJcbiAqL1xuQ2FudmFzVGludGVyLmNhblVzZU11bHRpcGx5ID0gdXRpbHMuY2FuVXNlTmV3Q2FudmFzQmxlbmRNb2RlcygpO1xuXG4vKipcbiAqIFRoZSB0aW50aW5nIG1ldGhvZCB0aGF0IHdpbGwgYmUgdXNlZC5cbiAqXG4gKi9cbkNhbnZhc1RpbnRlci50aW50TWV0aG9kID0gQ2FudmFzVGludGVyLmNhblVzZU11bHRpcGx5ID8gQ2FudmFzVGludGVyLnRpbnRXaXRoTXVsdGlwbHkgOiAgQ2FudmFzVGludGVyLnRpbnRXaXRoUGVyUGl4ZWw7XG4iLCJ2YXIgR0xUZXh0dXJlID0gcmVxdWlyZSgncGl4aS1nbC1jb3JlJykuR0xUZXh0dXJlLFxuXHR1dGlscyA9IHJlcXVpcmUoJy4uLy4uL3V0aWxzJyk7XG5cbi8qKlxuICogSGVscGVyIGNsYXNzIHRvIGNyZWF0ZSBhIHdlYkdMIFRleHR1cmVcbiAqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gZ2wge1dlYkdMUmVuZGVyaW5nQ29udGV4dH1cbiAqL1xuXG52YXIgVGV4dHVyZU1hbmFnZXIgPSBmdW5jdGlvbihnbClcbntcblx0dGhpcy5nbCA9IGdsO1xuXG5cdC8vIHRyYWNrIHRleHR1cmVzIGluIHRoZSByZW5kZXJlciBzbyB3ZSBjYW4gbm8gbG9uZ2VyIGxpc3RlbiB0byB0aGVtIG9uIGRlc3RydWN0aW9uLlxuXHR0aGlzLl9tYW5hZ2VkVGV4dHVyZXMgPSBbXTtcbiAgICB0aGlzLmdsVGV4dHVyZXMgPSB7fTtcblxufVxuXG5UZXh0dXJlTWFuYWdlci5wcm90b3R5cGUuYmluZFRleHR1cmUgPSBmdW5jdGlvbih0ZXh0dXJlKVxue1xuXG59XG5cblxuVGV4dHVyZU1hbmFnZXIucHJvdG90eXBlLmdldFRleHR1cmUgPSBmdW5jdGlvbih0ZXh0dXJlKVxue1xuXG59XG5cbi8qKlxuICogVXBkYXRlcyBhbmQvb3IgQ3JlYXRlcyBhIFdlYkdMIHRleHR1cmUgZm9yIHRoZSByZW5kZXJlcidzIGNvbnRleHQuXG4gKlxuICogQHBhcmFtIHRleHR1cmUge1BJWEkuQmFzZVRleHR1cmV8UElYSS5UZXh0dXJlfSB0aGUgdGV4dHVyZSB0byB1cGRhdGVcbiAqL1xuVGV4dHVyZU1hbmFnZXIucHJvdG90eXBlLnVwZGF0ZVRleHR1cmUgPSBmdW5jdGlvbih0ZXh0dXJlKVxue1xuXHR0ZXh0dXJlID0gdGV4dHVyZS5iYXNlVGV4dHVyZSB8fCB0ZXh0dXJlO1xuXG5cdGlmICghdGV4dHVyZS5oYXNMb2FkZWQpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgXG4gICAgdmFyIGdsID0gdGhpcy5nbDtcbiAgICB2YXIgZ2xUZXh0dXJlID0gdGhpcy5nbFRleHR1cmVzW3RleHR1cmUudWlkXS8vdGV4dHVyZS5fZ2xUZXh0dXJlc1tnbC5pZF07XG5cbiAgICBpZiAoIWdsVGV4dHVyZSlcbiAgICB7XG4gICAgICAgIGdsVGV4dHVyZSA9IG5ldyBHTFRleHR1cmUoZ2wpO1xuICAgICAgICBnbFRleHR1cmUucHJlbXVsdGlwbHlBbHBoYSA9IHRydWVcbiAgICAgICAgdGV4dHVyZS5fZ2xUZXh0dXJlc1tnbC5pZF0gPSBnbFRleHR1cmU7XG5cbiAgICAgICAvLyB0aGlzLmdsVGV4dHVyZXNbdGV4dHVyZS51aWRdID0gZ2xUZXh0dXJlO1xuXG4gICAgICAgIHRleHR1cmUub24oJ3VwZGF0ZScsIHRoaXMudXBkYXRlVGV4dHVyZSwgdGhpcyk7XG4gICAgICAgIHRleHR1cmUub24oJ2Rpc3Bvc2UnLCB0aGlzLmRlc3Ryb3lUZXh0dXJlLCB0aGlzKTtcbiAgICAgICAgXG4gICAgICAgIHRoaXMuX21hbmFnZWRUZXh0dXJlcy5wdXNoKHRleHR1cmUpO1xuICAgIH1cblxuICAgIGdsVGV4dHVyZS51cGxvYWQodGV4dHVyZS5zb3VyY2UpO1xuICAgIFxuICAgIC8vVE9ETyBjaGVjayBpcyBwb3dlciBvZiB0d28uLlxuICAgIGdsVGV4dHVyZS5lbmFibGVXcmFwQ2xhbXAoKTtcblxuXG4gICAgLy8gVE9ETyBjaGVjayBmb3Igc2NhbGluZyB0eXBlXG4gICAgZ2xUZXh0dXJlLmVuYWJsZUxpbmVhclNjYWxpbmcoKTtcblxuICAgIHJldHVybiAgdGV4dHVyZS5fZ2xUZXh0dXJlc1tnbC5pZF07XG59XG5cbi8qKlxuICogRGVsZXRlcyB0aGUgdGV4dHVyZSBmcm9tIFdlYkdMXG4gKlxuICogQHBhcmFtIHRleHR1cmUge1BJWEkuQmFzZVRleHR1cmV8UElYSS5UZXh0dXJlfSB0aGUgdGV4dHVyZSB0byBkZXN0cm95XG4gKi9cblRleHR1cmVNYW5hZ2VyLnByb3RvdHlwZS5kZXN0cm95VGV4dHVyZSA9IGZ1bmN0aW9uKHRleHR1cmUsIF9za2lwUmVtb3ZlKVxue1xuXHR0ZXh0dXJlID0gdGV4dHVyZS5iYXNlVGV4dHVyZSB8fCB0ZXh0dXJlO1xuXG4gICAgaWYgKCF0ZXh0dXJlLmhhc0xvYWRlZClcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAodGV4dHVyZS5fZ2xUZXh0dXJlc1t0aGlzLmdsLmlkXSlcbiAgICB7XG4gICAgICAgIHRleHR1cmUuX2dsVGV4dHVyZXNbdGhpcy5nbC5pZF0uZGVzdHJveSgpO1xuICAgICAgICB0ZXh0dXJlLm9mZigndXBkYXRlJywgdGhpcy51cGRhdGVUZXh0dXJlLCB0aGlzKTtcbiAgICAgICAgdGV4dHVyZS5vZmYoJ2Rpc3Bvc2UnLCB0aGlzLmRlc3Ryb3lUZXh0dXJlLCB0aGlzKTtcblxuXG4gICAgICAgIGRlbGV0ZSB0ZXh0dXJlLl9nbFRleHR1cmVzW3RoaXMuZ2wuaWRdO1xuXG4gICAgICAgIGlmICghX3NraXBSZW1vdmUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHZhciBpID0gdGhpcy5fbWFuYWdlZFRleHR1cmVzLmluZGV4T2YodGV4dHVyZSk7XG4gICAgICAgICAgICBpZiAoaSAhPT0gLTEpIHtcbiAgICAgICAgICAgICAgICB1dGlscy5yZW1vdmVJdGVtcyh0aGlzLl9tYW5hZ2VkVGV4dHVyZXMsIGksIDEpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxufVxuXG5UZXh0dXJlTWFuYWdlci5wcm90b3R5cGUucmVtb3ZlQWxsID0gZnVuY3Rpb24oKVxue1xuXHQvLyBlbXB0eSBhbGwgdGhlIG9sZCBnbCB0ZXh0dXJlcyBhcyB0aGV5IGFyZSB1c2VsZXNzIG5vd1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5fbWFuYWdlZFRleHR1cmVzLmxlbmd0aDsgKytpKVxuICAgIHtcbiAgICAgICAgdmFyIHRleHR1cmUgPSB0aGlzLl9tYW5hZ2VkVGV4dHVyZXNbaV07XG4gICAgICAgIGlmICh0ZXh0dXJlLl9nbFRleHR1cmVzW3RoaXMuZ2wuaWRdKVxuICAgICAgICB7XG4gICAgICAgICAgICBkZWxldGUgdGV4dHVyZS5fZ2xUZXh0dXJlc1t0aGlzLmdsLmlkXTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuVGV4dHVyZU1hbmFnZXIucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbigpXG57XG4gICAgLy8gZGVzdHJveSBtYW5hZ2VkIHRleHR1cmVzXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLl9tYW5hZ2VkVGV4dHVyZXMubGVuZ3RoOyArK2kpXG4gICAge1xuICAgICAgICB2YXIgdGV4dHVyZSA9IHRoaXMuX21hbmFnZWRUZXh0dXJlc1tpXTtcbiAgICAgICAgdGhpcy5kZXN0cm95VGV4dHVyZSh0ZXh0dXJlLCB0cnVlKTtcbiAgICAgICAgdGV4dHVyZS5vZmYoJ3VwZGF0ZScsIHRoaXMudXBkYXRlVGV4dHVyZSwgdGhpcyk7XG4gICAgICAgIHRleHR1cmUub2ZmKCdkaXNwb3NlJywgdGhpcy5kZXN0cm95VGV4dHVyZSwgdGhpcyk7XG4gICAgfVxuXG4gICAgdGhpcy5fbWFuYWdlZFRleHR1cmVzID0gbnVsbDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBUZXh0dXJlTWFuYWdlcjtcblxuIiwidmFyIFN5c3RlbVJlbmRlcmVyID0gcmVxdWlyZSgnLi4vU3lzdGVtUmVuZGVyZXInKSxcbiAgICBTaGFkZXJNYW5hZ2VyID0gcmVxdWlyZSgnLi9tYW5hZ2Vycy9TaGFkZXJNYW5hZ2VyJyksXG4gICAgTWFza01hbmFnZXIgPSByZXF1aXJlKCcuL21hbmFnZXJzL01hc2tNYW5hZ2VyJyksXG4gICAgU3RlbmNpbE1hbmFnZXIgPSByZXF1aXJlKCcuL21hbmFnZXJzL1N0ZW5jaWxNYW5hZ2VyJyksXG4gICAgRmlsdGVyTWFuYWdlciA9IHJlcXVpcmUoJy4vbWFuYWdlcnMvRmlsdGVyTWFuYWdlcicpLFxuICAgIEJsZW5kTW9kZU1hbmFnZXIgPSByZXF1aXJlKCcuL21hbmFnZXJzL0JsZW5kTW9kZU1hbmFnZXInKSxcbiAgICBSZW5kZXJUYXJnZXQgPSByZXF1aXJlKCcuL3V0aWxzL1JlbmRlclRhcmdldCcpLFxuICAgIE9iamVjdFJlbmRlcmVyID0gcmVxdWlyZSgnLi91dGlscy9PYmplY3RSZW5kZXJlcicpLFxuICAgIEZYQUFGaWx0ZXIgPSByZXF1aXJlKCcuL2ZpbHRlcnMvRlhBQUZpbHRlcicpLFxuICAgIFRleHR1cmVNYW5hZ2VyID0gcmVxdWlyZSgnLi9UZXh0dXJlTWFuYWdlcicpLFxuICAgIGNyZWF0ZUNvbnRleHQgPSByZXF1aXJlKCdwaXhpLWdsLWNvcmUnKS5jcmVhdGVDb250ZXh0LFxuICAgIG1hcFdlYkdMQmxlbmRNb2Rlc1RvUGl4aSA9IHJlcXVpcmUoJy4vdXRpbHMvbWFwV2ViR0xCbGVuZE1vZGVzVG9QaXhpJyksXG4gICAgbWFwV2ViR0xEcmF3TW9kZXNUb1BpeGkgPSByZXF1aXJlKCcuL3V0aWxzL21hcFdlYkdMRHJhd01vZGVzVG9QaXhpJyksXG4gICAgdXRpbHMgPSByZXF1aXJlKCcuLi8uLi91dGlscycpLFxuICAgIENPTlNUID0gcmVxdWlyZSgnLi4vLi4vY29uc3QnKTtcblxuLyoqXG4gKiBUaGUgV2ViR0xSZW5kZXJlciBkcmF3cyB0aGUgc2NlbmUgYW5kIGFsbCBpdHMgY29udGVudCBvbnRvIGEgd2ViR0wgZW5hYmxlZCBjYW52YXMuIFRoaXMgcmVuZGVyZXJcbiAqIHNob3VsZCBiZSB1c2VkIGZvciBicm93c2VycyB0aGF0IHN1cHBvcnQgd2ViR0wuIFRoaXMgUmVuZGVyIHdvcmtzIGJ5IGF1dG9tYXRpY2FsbHkgbWFuYWdpbmcgd2ViR0xCYXRjaHMuXG4gKiBTbyBubyBuZWVkIGZvciBTcHJpdGUgQmF0Y2hlcyBvciBTcHJpdGUgQ2xvdWRzLlxuICogRG9uJ3QgZm9yZ2V0IHRvIGFkZCB0aGUgdmlldyB0byB5b3VyIERPTSBvciB5b3Ugd2lsbCBub3Qgc2VlIGFueXRoaW5nIDopXG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQGV4dGVuZHMgUElYSS5TeXN0ZW1SZW5kZXJlclxuICogQHBhcmFtIFt3aWR0aD0wXSB7bnVtYmVyfSB0aGUgd2lkdGggb2YgdGhlIGNhbnZhcyB2aWV3XG4gKiBAcGFyYW0gW2hlaWdodD0wXSB7bnVtYmVyfSB0aGUgaGVpZ2h0IG9mIHRoZSBjYW52YXMgdmlld1xuICogQHBhcmFtIFtvcHRpb25zXSB7b2JqZWN0fSBUaGUgb3B0aW9uYWwgcmVuZGVyZXIgcGFyYW1ldGVyc1xuICogQHBhcmFtIFtvcHRpb25zLnZpZXddIHtIVE1MQ2FudmFzRWxlbWVudH0gdGhlIGNhbnZhcyB0byB1c2UgYXMgYSB2aWV3LCBvcHRpb25hbFxuICogQHBhcmFtIFtvcHRpb25zLnRyYW5zcGFyZW50PWZhbHNlXSB7Ym9vbGVhbn0gSWYgdGhlIHJlbmRlciB2aWV3IGlzIHRyYW5zcGFyZW50LCBkZWZhdWx0IGZhbHNlXG4gKiBAcGFyYW0gW29wdGlvbnMuYXV0b1Jlc2l6ZT1mYWxzZV0ge2Jvb2xlYW59IElmIHRoZSByZW5kZXIgdmlldyBpcyBhdXRvbWF0aWNhbGx5IHJlc2l6ZWQsIGRlZmF1bHQgZmFsc2VcbiAqIEBwYXJhbSBbb3B0aW9ucy5hbnRpYWxpYXM9ZmFsc2VdIHtib29sZWFufSBzZXRzIGFudGlhbGlhcy4gSWYgbm90IGF2YWlsYWJsZSBuYXRpdmVseSB0aGVuIEZYQUEgYW50aWFsaWFzaW5nIGlzIHVzZWRcbiAqIEBwYXJhbSBbb3B0aW9ucy5mb3JjZUZYQUE9ZmFsc2VdIHtib29sZWFufSBmb3JjZXMgRlhBQSBhbnRpYWxpYXNpbmcgdG8gYmUgdXNlZCBvdmVyIG5hdGl2ZS4gRlhBQSBpcyBmYXN0ZXIsIGJ1dCBtYXkgbm90IGFsd2F5cyBsb29rIGFzIGdyZWF0XG4gKiBAcGFyYW0gW29wdGlvbnMucmVzb2x1dGlvbj0xXSB7bnVtYmVyfSB0aGUgcmVzb2x1dGlvbiBvZiB0aGUgcmVuZGVyZXIgcmV0aW5hIHdvdWxkIGJlIDJcbiAqIEBwYXJhbSBbb3B0aW9ucy5jbGVhckJlZm9yZVJlbmRlcj10cnVlXSB7Ym9vbGVhbn0gVGhpcyBzZXRzIGlmIHRoZSBDYW52YXNSZW5kZXJlciB3aWxsIGNsZWFyIHRoZSBjYW52YXMgb3JcbiAqICAgICAgbm90IGJlZm9yZSB0aGUgbmV3IHJlbmRlciBwYXNzLiBJZiB5b3Ugd2lzaCB0byBzZXQgdGhpcyB0byBmYWxzZSwgeW91ICptdXN0KiBzZXQgcHJlc2VydmVEcmF3aW5nQnVmZmVyIHRvIGB0cnVlYC5cbiAqIEBwYXJhbSBbb3B0aW9ucy5wcmVzZXJ2ZURyYXdpbmdCdWZmZXI9ZmFsc2VdIHtib29sZWFufSBlbmFibGVzIGRyYXdpbmcgYnVmZmVyIHByZXNlcnZhdGlvbiwgZW5hYmxlIHRoaXMgaWZcbiAqICAgICAgeW91IG5lZWQgdG8gY2FsbCB0b0RhdGFVcmwgb24gdGhlIHdlYmdsIGNvbnRleHQuXG4gKiBAcGFyYW0gW29wdGlvbnMucm91bmRQaXhlbHM9ZmFsc2VdIHtib29sZWFufSBJZiB0cnVlIFBpeGkgd2lsbCBNYXRoLmZsb29yKCkgeC95IHZhbHVlcyB3aGVuIHJlbmRlcmluZywgc3RvcHBpbmcgcGl4ZWwgaW50ZXJwb2xhdGlvbi5cbiAqL1xuZnVuY3Rpb24gV2ViR0xSZW5kZXJlcih3aWR0aCwgaGVpZ2h0LCBvcHRpb25zKVxue1xuICAgIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuXG4gICAgU3lzdGVtUmVuZGVyZXIuY2FsbCh0aGlzLCAnV2ViR0wnLCB3aWR0aCwgaGVpZ2h0LCBvcHRpb25zKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSB0eXBlIG9mIHRoaXMgcmVuZGVyZXIgYXMgYSBzdGFuZGFyZGlzZWQgY29uc3RcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn0vL1xuICAgICAqXG4gICAgICovXG4gICAgdGhpcy50eXBlID0gQ09OU1QuUkVOREVSRVJfVFlQRS5XRUJHTDtcblxuICAgIHRoaXMuaGFuZGxlQ29udGV4dExvc3QgPSB0aGlzLmhhbmRsZUNvbnRleHRMb3N0LmJpbmQodGhpcyk7XG4gICAgdGhpcy5oYW5kbGVDb250ZXh0UmVzdG9yZWQgPSB0aGlzLmhhbmRsZUNvbnRleHRSZXN0b3JlZC5iaW5kKHRoaXMpO1xuXG4gICAgdGhpcy52aWV3LmFkZEV2ZW50TGlzdGVuZXIoJ3dlYmdsY29udGV4dGxvc3QnLCB0aGlzLmhhbmRsZUNvbnRleHRMb3N0LCBmYWxzZSk7XG4gICAgdGhpcy52aWV3LmFkZEV2ZW50TGlzdGVuZXIoJ3dlYmdsY29udGV4dHJlc3RvcmVkJywgdGhpcy5oYW5kbGVDb250ZXh0UmVzdG9yZWQsIGZhbHNlKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBvcHRpb25zIHBhc3NlZCBpbiB0byBjcmVhdGUgYSBuZXcgd2ViZ2wgY29udGV4dC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge29iamVjdH1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX2NvbnRleHRPcHRpb25zID0ge1xuICAgICAgICBhbHBoYTogdGhpcy50cmFuc3BhcmVudCxcbiAgICAgICAgYW50aWFsaWFzOiBvcHRpb25zLmFudGlhbGlhcyxcbiAgICAgICAgcHJlbXVsdGlwbGllZEFscGhhOiB0aGlzLnRyYW5zcGFyZW50ICYmIHRoaXMudHJhbnNwYXJlbnQgIT09ICdub3RNdWx0aXBsaWVkJyxcbiAgICAgICAgc3RlbmNpbDogdHJ1ZSxcbiAgICAgICAgcHJlc2VydmVEcmF3aW5nQnVmZmVyOiBvcHRpb25zLnByZXNlcnZlRHJhd2luZ0J1ZmZlclxuICAgIH07XG5cbiAgICB0aGlzLl9iYWNrZ3JvdW5kQ29sb3JSZ2JhWzNdID0gdGhpcy50cmFuc3BhcmVudCA/IDAgOiAxO1xuXG4gICAgLyoqXG4gICAgICogRGVhbHMgd2l0aCBtYW5hZ2luZyB0aGUgc2hhZGVyIHByb2dyYW1zIGFuZCB0aGVpciBhdHRyaWJzLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5TaGFkZXJNYW5hZ2VyfVxuICAgICAqL1xuICAgIHRoaXMuc2hhZGVyTWFuYWdlciA9IG5ldyBTaGFkZXJNYW5hZ2VyKHRoaXMpO1xuXG4gICAgLyoqXG4gICAgICogTWFuYWdlcyB0aGUgbWFza3MgdXNpbmcgdGhlIHN0ZW5jaWwgYnVmZmVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5NYXNrTWFuYWdlcn1cbiAgICAgKi9cbiAgICB0aGlzLm1hc2tNYW5hZ2VyID0gbmV3IE1hc2tNYW5hZ2VyKHRoaXMpO1xuXG4gICAgLyoqXG4gICAgICogTWFuYWdlcyB0aGUgc3RlbmNpbCBidWZmZXIuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlN0ZW5jaWxNYW5hZ2VyfVxuICAgICAqL1xuICAgIHRoaXMuc3RlbmNpbE1hbmFnZXIgPSBuZXcgU3RlbmNpbE1hbmFnZXIodGhpcyk7XG5cbiAgICAvKipcbiAgICAgKiBNYW5hZ2VzIHRoZSBmaWx0ZXJzLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5GaWx0ZXJNYW5hZ2VyfVxuICAgICAqL1xuICAgIHRoaXMuZmlsdGVyTWFuYWdlciA9IG5ldyBGaWx0ZXJNYW5hZ2VyKHRoaXMpO1xuXG4gICAgLyoqXG4gICAgICogTWFuYWdlcyB0aGUgYmxlbmRNb2Rlc1xuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5CbGVuZE1vZGVNYW5hZ2VyfVxuICAgICAqL1xuICAgIHRoaXMuYmxlbmRNb2RlTWFuYWdlciA9IG5ldyBCbGVuZE1vZGVNYW5hZ2VyKHRoaXMpO1xuXG4gICAgXG4gICAgLyoqXG4gICAgICogVGhlIGN1cnJlbnRseSBhY3RpdmUgT2JqZWN0UmVuZGVyZXIuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLk9iamVjdFJlbmRlcmVyfVxuICAgICAqL1xuICAgIHRoaXMuY3VycmVudFJlbmRlcmVyID0gbmV3IE9iamVjdFJlbmRlcmVyKHRoaXMpO1xuXG4gICAgdGhpcy5pbml0UGx1Z2lucygpO1xuXG4gICAgLy8gaW5pdGlhbGl6ZSB0aGUgY29udGV4dCBzbyBpdCBpcyByZWFkeSBmb3IgdGhlIG1hbmFnZXJzLlxuICAgIHRoaXMuZ2wgPSBjcmVhdGVDb250ZXh0KHRoaXMudmlldywgdGhpcy5fY29udGV4dE9wdGlvbnMpO1xuXG4gICAgdGhpcy5faW5pdENvbnRleHQoKTtcblxuICAgIC8vIG1hcCBzb21lIHdlYkdMIGJsZW5kIGFuZCBkcmF3bW9kZXMuLlxuICAgIHRoaXMuYmxlbmRNb2RlcyA9IG1hcFdlYkdMQmxlbmRNb2Rlc1RvUGl4aShnbCk7XG4gICAgdGhpcy5kcmF3TW9kZXMgPSBtYXBXZWJHTERyYXdNb2Rlc1RvUGl4aShnbClcblxuICAgIHRoaXMuX2FjdGl2ZVNoYWRlciA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBIb2xkcyB0aGUgY3VycmVudCByZW5kZXIgdGFyZ2V0XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlJlbmRlclRhcmdldH1cbiAgICAgKi9cbiAgICB0aGlzLl9hY3RpdmVSZW5kZXJUYXJnZXQgPSBudWxsO1xuICAgIHRoaXMuX2FjdGl2ZVRleHR1cmVMb2NhdGlvbiA9IG51bGw7XG4gICAgdGhpcy5fYWN0aXZlVGV4dHVyZSA9IG51bGw7XG59XG5cbi8vIGNvbnN0cnVjdG9yXG5XZWJHTFJlbmRlcmVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoU3lzdGVtUmVuZGVyZXIucHJvdG90eXBlKTtcbldlYkdMUmVuZGVyZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gV2ViR0xSZW5kZXJlcjtcbm1vZHVsZS5leHBvcnRzID0gV2ViR0xSZW5kZXJlcjtcbnV0aWxzLnBsdWdpblRhcmdldC5taXhpbihXZWJHTFJlbmRlcmVyKTtcblxuLyoqXG4gKiBDcmVhdGVzIHRoZSBXZWJHTCBjb250ZXh0XG4gKlxuICogQHByaXZhdGVcbiAqL1xuV2ViR0xSZW5kZXJlci5wcm90b3R5cGUuX2luaXRDb250ZXh0ID0gZnVuY3Rpb24gKClcbntcbiAgICB2YXIgZ2wgPSB0aGlzLmdsO1xuXG4gICAgLy8gY3JlYXRlIGEgdGV4dHVyZSBtYW5hZ2VyLi4uXG4gICAgdGhpcy50ZXh0dXJlTWFuYWdlciA9IG5ldyBUZXh0dXJlTWFuYWdlcihnbCk7XG5cbiAgICAvLyBzZXQgdXAgdGhlIGRlZmF1bHQgcGl4aSBzZXR0aW5ncy4uXG4gICAgZ2wuZGlzYWJsZShnbC5ERVBUSF9URVNUKTtcbiAgICBnbC5kaXNhYmxlKGdsLkNVTExfRkFDRSk7XG4gICAgZ2wuZW5hYmxlKGdsLkJMRU5EKTtcblxuXG4gICAgdGhpcy5yb290UmVuZGVyVGFyZ2V0ID0gbmV3IFJlbmRlclRhcmdldChnbCwgdGhpcy53aWR0aCwgdGhpcy5oZWlnaHQsIG51bGwsIHRoaXMucmVzb2x1dGlvbiwgdHJ1ZSk7XG4gICAgdGhpcy5yb290UmVuZGVyVGFyZ2V0LmNsZWFyQ29sb3IgPSB0aGlzLl9iYWNrZ3JvdW5kQ29sb3JSZ2JhO1xuICAgIFxuICAgIHRoaXMuYmluZFJlbmRlclRhcmdldCh0aGlzLnJvb3RSZW5kZXJUYXJnZXQpO1xuXG4gICAgdGhpcy5lbWl0KCdjb250ZXh0JywgZ2wpO1xuXG4gICAgLy8gc2V0dXAgdGhlIHdpZHRoL2hlaWdodCBwcm9wZXJ0aWVzIGFuZCBnbCB2aWV3cG9ydFxuICAgIHRoaXMucmVzaXplKHRoaXMud2lkdGgsIHRoaXMuaGVpZ2h0KTsgICAgXG59O1xuXG4vKipcbiAqIFJlbmRlcnMgdGhlIG9iamVjdCB0byBpdHMgd2ViR0wgdmlld1xuICpcbiAqIEBwYXJhbSBvYmplY3Qge1BJWEkuRGlzcGxheU9iamVjdH0gdGhlIG9iamVjdCB0byBiZSByZW5kZXJlZFxuICovXG5XZWJHTFJlbmRlcmVyLnByb3RvdHlwZS5yZW5kZXIgPSBmdW5jdGlvbiAoZGlzcGxheU9iamVjdClcbntcbiAgICB0aGlzLmVtaXQoJ3ByZXJlbmRlcicpO1xuXG4gICAgLy8gbm8gcG9pbnQgcmVuZGVyaW5nIGlmIG91ciBjb250ZXh0IGhhcyBiZWVuIGJsb3duIHVwIVxuICAgIGlmICh0aGlzLmdsLmlzQ29udGV4dExvc3QoKSlcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLl9sYXN0T2JqZWN0UmVuZGVyZWQgPSBkaXNwbGF5T2JqZWN0O1xuXG4gICAgdmFyIGNhY2hlUGFyZW50ID0gZGlzcGxheU9iamVjdC5wYXJlbnQ7XG4gICAgZGlzcGxheU9iamVjdC5wYXJlbnQgPSB0aGlzLl90ZW1wRGlzcGxheU9iamVjdFBhcmVudDtcbiAgICAvLyB1cGRhdGUgdGhlIHNjZW5lIGdyYXBoXG4gICAgZGlzcGxheU9iamVjdC51cGRhdGVUcmFuc2Zvcm0oKTtcbiAgICBkaXNwbGF5T2JqZWN0LnBhcmVudCA9IGNhY2hlUGFyZW50O1xuXG4gICAgdGhpcy5yZW5kZXJEaXNwbGF5T2JqZWN0KGRpc3BsYXlPYmplY3QsIHRoaXMucm9vdFJlbmRlclRhcmdldCwgdGhpcy5jbGVhckJlZm9yZVJlbmRlcik7Ly90aGlzLnByb2plY3Rpb24pO1xuXG4gICAgdGhpcy5lbWl0KCdwb3N0cmVuZGVyJyk7XG59O1xuXG4vKipcbiAqIFJlbmRlcnMgYSBEaXNwbGF5IE9iamVjdC5cbiAqXG4gKiBAcGFyYW0gZGlzcGxheU9iamVjdCB7UElYSS5EaXNwbGF5T2JqZWN0fSBUaGUgRGlzcGxheU9iamVjdCB0byByZW5kZXJcbiAqIEBwYXJhbSByZW5kZXJUYXJnZXQge1BJWEkuUmVuZGVyVGFyZ2V0fSBUaGUgcmVuZGVyIHRhcmdldCB0byB1c2UgdG8gcmVuZGVyIHRoaXMgZGlzcGxheSBvYmplY3RcbiAqXG4gKi9cbldlYkdMUmVuZGVyZXIucHJvdG90eXBlLnJlbmRlckRpc3BsYXlPYmplY3QgPSBmdW5jdGlvbiAoZGlzcGxheU9iamVjdCwgcmVuZGVyVGFyZ2V0LCBjbGVhcikvL3Byb2plY3Rpb24sIGJ1ZmZlcilcbntcbiAgICB0aGlzLmJpbmRSZW5kZXJUYXJnZXQocmVuZGVyVGFyZ2V0KTtcblxuICAgIGlmKGNsZWFyKVxuICAgIHtcbiAgICAgICAgcmVuZGVyVGFyZ2V0LmNsZWFyKCk7XG4gICAgfVxuXG4gICAgLy8gc3RhcnQgdGhlIGZpbHRlciBtYW5hZ2VyXG4gICAgdGhpcy5maWx0ZXJNYW5hZ2VyLnNldEZpbHRlclN0YWNrKCByZW5kZXJUYXJnZXQuZmlsdGVyU3RhY2sgKTtcblxuICAgIC8vIHJlbmRlciB0aGUgc2NlbmUhXG4gICAgZGlzcGxheU9iamVjdC5yZW5kZXJXZWJHTCh0aGlzKTtcblxuICAgIC8vIGZpbmlzaCB0aGUgY3VycmVudCByZW5kZXJlci4uXG4gICAgdGhpcy5jdXJyZW50UmVuZGVyZXIuZmx1c2goKTtcbn07XG5cbi8qKlxuICogQ2hhbmdlcyB0aGUgY3VycmVudCByZW5kZXJlciB0byB0aGUgb25lIGdpdmVuIGluIHBhcmFtZXRlclxuICpcbiAqIEBwYXJhbSBvYmplY3RSZW5kZXJlciB7UElYSS5PYmplY3RSZW5kZXJlcn0gVGhlIG9iamVjdCByZW5kZXJlciB0byB1c2UuXG4gKi9cbldlYkdMUmVuZGVyZXIucHJvdG90eXBlLnNldE9iamVjdFJlbmRlcmVyID0gZnVuY3Rpb24gKG9iamVjdFJlbmRlcmVyKVxue1xuICAgIGlmICh0aGlzLmN1cnJlbnRSZW5kZXJlciA9PT0gb2JqZWN0UmVuZGVyZXIpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5jdXJyZW50UmVuZGVyZXIuc3RvcCgpO1xuICAgIHRoaXMuY3VycmVudFJlbmRlcmVyID0gb2JqZWN0UmVuZGVyZXI7XG4gICAgdGhpcy5jdXJyZW50UmVuZGVyZXIuc3RhcnQoKTtcbn07XG5cbi8qKlxuICogUmVzaXplcyB0aGUgd2ViR0wgdmlldyB0byB0aGUgc3BlY2lmaWVkIHdpZHRoIGFuZCBoZWlnaHQuXG4gKlxuICogQHBhcmFtIHdpZHRoIHtudW1iZXJ9IHRoZSBuZXcgd2lkdGggb2YgdGhlIHdlYkdMIHZpZXdcbiAqIEBwYXJhbSBoZWlnaHQge251bWJlcn0gdGhlIG5ldyBoZWlnaHQgb2YgdGhlIHdlYkdMIHZpZXdcbiAqL1xuV2ViR0xSZW5kZXJlci5wcm90b3R5cGUucmVzaXplID0gZnVuY3Rpb24gKHdpZHRoLCBoZWlnaHQpXG57XG4gICAgU3lzdGVtUmVuZGVyZXIucHJvdG90eXBlLnJlc2l6ZS5jYWxsKHRoaXMsIHdpZHRoLCBoZWlnaHQpO1xuXG4gICAgdGhpcy5maWx0ZXJNYW5hZ2VyLnJlc2l6ZSh3aWR0aCwgaGVpZ2h0KTtcbiAgICB0aGlzLnJvb3RSZW5kZXJUYXJnZXQucmVzaXplKHdpZHRoLCBoZWlnaHQpO1xuXG4gICAgaWYodGhpcy5jdXJyZW50UmVuZGVyVGFyZ2V0ID09PSB0aGlzLnJlbmRlclRhcmdldClcbiAgICB7XG4gICAgICAgIHRoaXMucm9vdFJlbmRlclRhcmdldC5hY3RpdmF0ZSgpO1xuICAgIH1cbn07XG5cbi8qKlxuICogQ2hhbmdlcyB0aGUgY3VycmVudCByZW5kZXIgdGFyZ2V0IHRvIHRoZSBvbmUgZ2l2ZW4gaW4gcGFyYW1ldGVyXG4gKlxuICogQHBhcmFtIHJlbmRlclRhcmdldCB7UElYSS5SZW5kZXJUYXJnZXR9IHRoZSBuZXcgcmVuZGVyIHRhcmdldFxuICovXG5XZWJHTFJlbmRlcmVyLnByb3RvdHlwZS5iaW5kUmVuZGVyVGFyZ2V0ID0gZnVuY3Rpb24gKHJlbmRlclRhcmdldCkvL3Byb2plY3Rpb24sIGJ1ZmZlcilcbntcbiAgICBpZihyZW5kZXJUYXJnZXQgIT09IHRoaXMuX2FjdGl2ZVJlbmRlclRhcmdldClcbiAgICB7XG4gICAgICAgIHRoaXMuX2FjdGl2ZVJlbmRlclRhcmdldCA9IHJlbmRlclRhcmdldDtcblxuICAgICAgICBpZih0aGlzLl9hY3RpdmVTaGFkZXIpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuX2FjdGl2ZVNoYWRlci51bmlmb3Jtcy5wcm9qZWN0aW9uTWF0cml4ID0gcmVuZGVyVGFyZ2V0LnByb2plY3Rpb25NYXRyaXgudG9BcnJheSh0cnVlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJlbmRlclRhcmdldC5hY3RpdmF0ZSgpO1xuXG4gICAgICAgIHRoaXMuc3RlbmNpbE1hbmFnZXIuc2V0TWFza1N0YWNrKCByZW5kZXJUYXJnZXQuc3RlbmNpbE1hc2tTdGFjayApO1xuICAgIH1cbn1cblxuV2ViR0xSZW5kZXJlci5wcm90b3R5cGUuYmluZFNoYWRlciA9IGZ1bmN0aW9uIChzaGFkZXIpLy9wcm9qZWN0aW9uLCBidWZmZXIpXG57XG4gICAgLy9UT0RPIGNhY2hlXG4gICAgaWYodGhpcy5fYWN0aXZlU2hhZGVyICE9PSBzaGFkZXIpXG4gICAge1xuICAgICAgICB0aGlzLl9hY3RpdmVTaGFkZXIgPSBzaGFkZXI7XG4gICAgICAgIHNoYWRlci5iaW5kKCk7XG5cbiAgICAgICAgLy8gYXV0b21hdGljYWxseSBzZXQgdGhlIHByb2plY3Rpb24gbWF0cml4XG4gICAgICAgIHNoYWRlci51bmlmb3Jtcy5wcm9qZWN0aW9uTWF0cml4ID0gdGhpcy5fYWN0aXZlUmVuZGVyVGFyZ2V0LnByb2plY3Rpb25NYXRyaXgudG9BcnJheSh0cnVlKTtcbiAgICB9XG59XG5cblxuV2ViR0xSZW5kZXJlci5wcm90b3R5cGUuYmluZFRleHR1cmUgPSBmdW5jdGlvbiAodGV4dHVyZSwgbG9jYXRpb24pXG57XG4gICAgdmFyIGdsID0gdGhpcy5nbDtcblxuICAgIC8vVE9ETyB0ZXN0IHBlcmYgb2YgY2FjaGU/XG4gICAgbG9jYXRpb24gPSBsb2NhdGlvbiB8fCAwO1xuXG4gICAgaWYodGhpcy5fYWN0aXZlVGV4dHVyZUxvY2F0aW9uICE9PSBsb2NhdGlvbikvL1xuICAgIHtcbiAgICAgICAgdGhpcy5fYWN0aXZlVGV4dHVyZUxvY2F0aW9uID0gbG9jYXRpb25cbiAgICAgICAgZ2wuYWN0aXZlVGV4dHVyZShnbC5URVhUVVJFMCArIGxvY2F0aW9uICk7XG4gICAgfVxuXG4gICAgLy9UT0RPIC0gY2FuIHdlIGNhY2hlIHRoaXMgdGV4dHVyZSB0b28/XG4gICAgdGhpcy5fYWN0aXZlVGV4dHVyZSA9IHRleHR1cmU7ICAgICAgXG4gICAgXG4gICAgaWYgKCF0ZXh0dXJlLl9nbFRleHR1cmVzW2dsLmlkXSlcbiAgICB7XG4gICAgICAgIC8vIHRoaXMgd2lsbCBhbHNvIGJpbmQgdGhlIHRleHR1cmUuLlxuICAgICAgICB0aGlzLnRleHR1cmVNYW5hZ2VyLnVwZGF0ZVRleHR1cmUodGV4dHVyZSk7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7ICAgXG4gICAgICAgIC8vIGJpbmQgdGhlIGN1cnJlbnQgdGV4dHVyZVxuICAgICAgICB0ZXh0dXJlLl9nbFRleHR1cmVzW2dsLmlkXS5iaW5kKCk7XG4gICAgfVxufVxuXG5cbi8qKlxuICogSGFuZGxlcyBhIGxvc3Qgd2ViZ2wgY29udGV4dFxuICpcbiAqIEBwcml2YXRlXG4gKi9cbldlYkdMUmVuZGVyZXIucHJvdG90eXBlLmhhbmRsZUNvbnRleHRMb3N0ID0gZnVuY3Rpb24gKGV2ZW50KVxue1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG59O1xuXG4vKipcbiAqIEhhbmRsZXMgYSByZXN0b3JlZCB3ZWJnbCBjb250ZXh0XG4gKlxuICogQHByaXZhdGVcbiAqL1xuV2ViR0xSZW5kZXJlci5wcm90b3R5cGUuaGFuZGxlQ29udGV4dFJlc3RvcmVkID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLl9pbml0Q29udGV4dCgpO1xuICAgIHRoaXMudGV4dHVyZU1hbmFnZXIucmVtb3ZlQWxsKCk7XG59O1xuXG4vKipcbiAqIFJlbW92ZXMgZXZlcnl0aGluZyBmcm9tIHRoZSByZW5kZXJlciAoZXZlbnQgbGlzdGVuZXJzLCBzcHJpdGViYXRjaCwgZXRjLi4uKVxuICpcbiAqIEBwYXJhbSBbcmVtb3ZlVmlldz1mYWxzZV0ge2Jvb2xlYW59IFJlbW92ZXMgdGhlIENhbnZhcyBlbGVtZW50IGZyb20gdGhlIERPTS5cbiAqL1xuV2ViR0xSZW5kZXJlci5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uIChyZW1vdmVWaWV3KVxue1xuICAgIHRoaXMuZGVzdHJveVBsdWdpbnMoKTtcblxuICAgIC8vIHJlbW92ZSBsaXN0ZW5lcnNcbiAgICB0aGlzLnZpZXcucmVtb3ZlRXZlbnRMaXN0ZW5lcignd2ViZ2xjb250ZXh0bG9zdCcsIHRoaXMuaGFuZGxlQ29udGV4dExvc3QpO1xuICAgIHRoaXMudmlldy5yZW1vdmVFdmVudExpc3RlbmVyKCd3ZWJnbGNvbnRleHRyZXN0b3JlZCcsIHRoaXMuaGFuZGxlQ29udGV4dFJlc3RvcmVkKTtcblxuICAgIHRoaXMudGV4dHVyZU1hbmFnZXIuZGVzdHJveUFsbCgpO1xuXG4gICAgLy8gY2FsbCBiYXNlIGRlc3Ryb3lcbiAgICBTeXN0ZW1SZW5kZXJlci5wcm90b3R5cGUuZGVzdHJveS5jYWxsKHRoaXMsIHJlbW92ZVZpZXcpO1xuXG4gICAgdGhpcy51aWQgPSAwO1xuXG4gICAgLy8gZGVzdHJveSB0aGUgbWFuYWdlcnNcbiAgICB0aGlzLnNoYWRlck1hbmFnZXIuZGVzdHJveSgpO1xuICAgIHRoaXMubWFza01hbmFnZXIuZGVzdHJveSgpO1xuICAgIHRoaXMuc3RlbmNpbE1hbmFnZXIuZGVzdHJveSgpO1xuICAgIHRoaXMuZmlsdGVyTWFuYWdlci5kZXN0cm95KCk7XG4gICAgdGhpcy5ibGVuZE1vZGVNYW5hZ2VyLmRlc3Ryb3koKTtcblxuICAgIHRoaXMuc2hhZGVyTWFuYWdlciA9IG51bGw7XG4gICAgdGhpcy5tYXNrTWFuYWdlciA9IG51bGw7XG4gICAgdGhpcy5maWx0ZXJNYW5hZ2VyID0gbnVsbDtcbiAgICB0aGlzLmJsZW5kTW9kZU1hbmFnZXIgPSBudWxsO1xuICAgIHRoaXMuY3VycmVudFJlbmRlcmVyID0gbnVsbDtcblxuICAgIHRoaXMuaGFuZGxlQ29udGV4dExvc3QgPSBudWxsO1xuICAgIHRoaXMuaGFuZGxlQ29udGV4dFJlc3RvcmVkID0gbnVsbDtcblxuICAgIHRoaXMuX2NvbnRleHRPcHRpb25zID0gbnVsbDtcblxuICAgIHRoaXMuZ2wudXNlUHJvZ3JhbShudWxsKTtcbiAgICB0aGlzLmdsID0gbnVsbDtcbn07XG5cbiIsInZhciBEZWZhdWx0U2hhZGVyID0gcmVxdWlyZSgnLi4vc2hhZGVycy9UZXh0dXJlU2hhZGVyJyk7XG5cbi8qKlxuICogVGhpcyBpcyB0aGUgYmFzZSBjbGFzcyBmb3IgY3JlYXRpbmcgYSBQSVhJIGZpbHRlci4gQ3VycmVudGx5IG9ubHkgV2ViR0wgc3VwcG9ydHMgZmlsdGVycy5cbiAqIElmIHlvdSB3YW50IHRvIG1ha2UgYSBjdXN0b20gZmlsdGVyIHRoaXMgc2hvdWxkIGJlIHlvdXIgYmFzZSBjbGFzcy5cbiAqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gdmVydGV4U3JjIHtzdHJpbmd8c3RyaW5nW119IFRoZSB2ZXJ0ZXggc2hhZGVyIHNvdXJjZSBhcyBhbiBhcnJheSBvZiBzdHJpbmdzLlxuICogQHBhcmFtIGZyYWdtZW50U3JjIHtzdHJpbmd8c3RyaW5nW119IFRoZSBmcmFnbWVudCBzaGFkZXIgc291cmNlIGFzIGFuIGFycmF5IG9mIHN0cmluZ3MuXG4gKiBAcGFyYW0gdW5pZm9ybXMge29iamVjdH0gQW4gb2JqZWN0IGNvbnRhaW5pbmcgdGhlIHVuaWZvcm1zIGZvciB0aGlzIGZpbHRlci5cbiAqL1xuZnVuY3Rpb24gQWJzdHJhY3RGaWx0ZXIodmVydGV4U3JjLCBmcmFnbWVudFNyYywgdW5pZm9ybXMpXG57XG5cbiAgICAvKipcbiAgICAgKiBBbiBhcnJheSBvZiBzaGFkZXJzXG4gICAgICogQG1lbWJlciB7UElYSS5TaGFkZXJbXX1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuc2hhZGVycyA9IFtdO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGV4dHJhIHBhZGRpbmcgdGhhdCB0aGUgZmlsdGVyIG1pZ2h0IG5lZWRcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy5wYWRkaW5nID0gMDtcblxuICAgIC8qKlxuICAgICAqIFRoZSB1bmlmb3JtcyBhcyBhbiBvYmplY3RcbiAgICAgKiBAbWVtYmVyIHtvYmplY3R9XG4gICAgICovXG4gICAgdGhpcy51bmlmb3JtcyA9IHVuaWZvcm1zIHx8IHt9O1xuXG5cbiAgICAvKipcbiAgICAgKiBUaGUgY29kZSBvZiB0aGUgdmVydGV4IHNoYWRlclxuICAgICAqIEBtZW1iZXIge3N0cmluZ1tdfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy52ZXJ0ZXhTcmMgPSB2ZXJ0ZXhTcmMgfHwgRGVmYXVsdFNoYWRlci5kZWZhdWx0VmVydGV4U3JjO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGNvZGUgb2YgdGhlIGZyYW1lbnQgc2hhZGVyXG4gICAgICogQG1lbWJlciB7c3RyaW5nW119XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLmZyYWdtZW50U3JjID0gZnJhZ21lbnRTcmMgfHwgRGVmYXVsdFNoYWRlci5kZWZhdWx0RnJhZ21lbnRTcmM7XG5cbiAgICAvL1RPRE8gYSByZW1pbmRlciAtIHdvdWxkIGJlIGNvb2wgdG8gaGF2ZSBsb3dlciByZXMgZmlsdGVycyBhcyB0aGlzIHdvdWxkIGdpdmUgYmV0dGVyIHBlcmZvcm1hbmNlLlxuXG4gICAgLy90eXBlb2YgZnJhZ21lbnRTcmMgPT09ICdzdHJpbmcnID8gZnJhZ21lbnRTcmMuc3BsaXQoJycpIDogKGZyYWdtZW50U3JjIHx8IFtdKTtcblxufVxuXG5BYnN0cmFjdEZpbHRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBBYnN0cmFjdEZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gQWJzdHJhY3RGaWx0ZXI7XG5cbi8qKlxuICogR3JhYnMgYSBzaGFkZXIgZnJvbSB0aGUgY3VycmVudCByZW5kZXJlclxuICpcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5XZWJHTFJlbmRlcmVyfSBUaGUgcmVuZGVyZXIgdG8gcmV0cmlldmUgdGhlIHNoYWRlciBmcm9tXG4gKi9cbkFic3RyYWN0RmlsdGVyLnByb3RvdHlwZS5nZXRTaGFkZXIgPSBmdW5jdGlvbiAocmVuZGVyZXIpXG57XG4gICAgdmFyIGdsID0gcmVuZGVyZXIuZ2w7XG5cbiAgICB2YXIgc2hhZGVyID0gdGhpcy5zaGFkZXJzW2dsLmlkXTtcblxuICAgIGlmICghc2hhZGVyKVxuICAgIHtcbiAgICAgICAgc2hhZGVyID0gbmV3IERlZmF1bHRTaGFkZXIocmVuZGVyZXIuc2hhZGVyTWFuYWdlcixcbiAgICAgICAgICAgIHRoaXMudmVydGV4U3JjLFxuICAgICAgICAgICAgdGhpcy5mcmFnbWVudFNyYyxcbiAgICAgICAgICAgIHRoaXMudW5pZm9ybXMsXG4gICAgICAgICAgICB0aGlzLmF0dHJpYnV0ZXNcbiAgICAgICAgKTtcblxuICAgICAgICB0aGlzLnNoYWRlcnNbZ2wuaWRdID0gc2hhZGVyO1xuICAgIH1cblxuICAgIHJldHVybiBzaGFkZXI7XG59O1xuXG4vKipcbiAqIEFwcGxpZXMgdGhlIGZpbHRlclxuICpcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5XZWJHTFJlbmRlcmVyfSBUaGUgcmVuZGVyZXIgdG8gcmV0cmlldmUgdGhlIGZpbHRlciBmcm9tXG4gKiBAcGFyYW0gaW5wdXQge1BJWEkuUmVuZGVyVGFyZ2V0fVxuICogQHBhcmFtIG91dHB1dCB7UElYSS5SZW5kZXJUYXJnZXR9XG4gKiBAcGFyYW0gY2xlYXIge2Jvb2xlYW59IFdoZXRoZXIgb3Igbm90IHdlIHdhbnQgdG8gY2xlYXIgdGhlIG91dHB1dFRhcmdldFxuICovXG5BYnN0cmFjdEZpbHRlci5wcm90b3R5cGUuYXBwbHlGaWx0ZXIgPSBmdW5jdGlvbiAocmVuZGVyZXIsIGlucHV0LCBvdXRwdXQsIGNsZWFyKVxue1xuICAgIHZhciBzaGFkZXIgPSB0aGlzLmdldFNoYWRlcihyZW5kZXJlcik7XG5cbiAgICByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLmFwcGx5RmlsdGVyKHNoYWRlciwgaW5wdXQsIG91dHB1dCwgY2xlYXIpO1xufTtcblxuLyoqXG4gKiBTeW5jcyBhIHVuaWZvcm0gYmV0d2VlbiB0aGUgY2xhc3Mgb2JqZWN0IGFuZCB0aGUgc2hhZGVycy5cbiAqXG4gKi9cbkFic3RyYWN0RmlsdGVyLnByb3RvdHlwZS5zeW5jVW5pZm9ybSA9IGZ1bmN0aW9uICh1bmlmb3JtKVxue1xuICAgIGZvciAodmFyIGkgPSAwLCBqID0gdGhpcy5zaGFkZXJzLmxlbmd0aDsgaSA8IGo7ICsraSlcbiAgICB7XG4gICAgICAgIHRoaXMuc2hhZGVyc1tpXS5zeW5jVW5pZm9ybSh1bmlmb3JtKTtcbiAgICB9XG59O1xuIiwidmFyIEFic3RyYWN0RmlsdGVyID0gcmVxdWlyZSgnLi9BYnN0cmFjdEZpbHRlcicpO1xuLy8gQHNlZSBodHRwczovL2dpdGh1Yi5jb20vc3Vic3RhY2svYnJmcy9pc3N1ZXMvMjVcblxuXG4vKipcbiAqXG4gKiBCYXNpYyBGWEFBIGltcGxlbWVudGF0aW9uIGJhc2VkIG9uIHRoZSBjb2RlIG9uIGdlZWtzM2QuY29tIHdpdGggdGhlXG4gKiBtb2RpZmljYXRpb24gdGhhdCB0aGUgdGV4dHVyZTJETG9kIHN0dWZmIHdhcyByZW1vdmVkIHNpbmNlIGl0J3NcbiAqIHVuc3VwcG9ydGVkIGJ5IFdlYkdMLlxuICpcbiAqIC0tXG4gKiBGcm9tOlxuICogaHR0cHM6Ly9naXRodWIuY29tL21pdHN1aGlrby93ZWJnbC1tZWluY3JhZnRcbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQWJzdHJhY3RGaWx0ZXJcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKlxuICovXG5mdW5jdGlvbiBGWEFBRmlsdGVyKClcbntcbiAgICBBYnN0cmFjdEZpbHRlci5jYWxsKHRoaXMsXG4gICAgICAgIC8vIHZlcnRleCBzaGFkZXJcbiAgICAgICAgXCJcXG5wcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcXG5cXG5hdHRyaWJ1dGUgdmVjMiBhVmVydGV4UG9zaXRpb247XFxuYXR0cmlidXRlIHZlYzIgYVRleHR1cmVDb29yZDtcXG5hdHRyaWJ1dGUgdmVjNCBhQ29sb3I7XFxuXFxudW5pZm9ybSBtYXQzIHByb2plY3Rpb25NYXRyaXg7XFxudW5pZm9ybSB2ZWMyIHJlc29sdXRpb247XFxuXFxudmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7XFxudmFyeWluZyB2ZWM0IHZDb2xvcjtcXG5cXG52YXJ5aW5nIHZlYzIgdlJlc29sdXRpb247XFxuXFxuLy90ZXhjb29yZHMgY29tcHV0ZWQgaW4gdmVydGV4IHN0ZXBcXG4vL3RvIGF2b2lkIGRlcGVuZGVudCB0ZXh0dXJlIHJlYWRzXFxudmFyeWluZyB2ZWMyIHZfcmdiTlc7XFxudmFyeWluZyB2ZWMyIHZfcmdiTkU7XFxudmFyeWluZyB2ZWMyIHZfcmdiU1c7XFxudmFyeWluZyB2ZWMyIHZfcmdiU0U7XFxudmFyeWluZyB2ZWMyIHZfcmdiTTtcXG5cXG5cXG52b2lkIHRleGNvb3Jkcyh2ZWMyIGZyYWdDb29yZCwgdmVjMiByZXNvbHV0aW9uLFxcbiAgICAgICAgICAgIG91dCB2ZWMyIHZfcmdiTlcsIG91dCB2ZWMyIHZfcmdiTkUsXFxuICAgICAgICAgICAgb3V0IHZlYzIgdl9yZ2JTVywgb3V0IHZlYzIgdl9yZ2JTRSxcXG4gICAgICAgICAgICBvdXQgdmVjMiB2X3JnYk0pIHtcXG4gICAgdmVjMiBpbnZlcnNlVlAgPSAxLjAgLyByZXNvbHV0aW9uLnh5O1xcbiAgICB2X3JnYk5XID0gKGZyYWdDb29yZCArIHZlYzIoLTEuMCwgLTEuMCkpICogaW52ZXJzZVZQO1xcbiAgICB2X3JnYk5FID0gKGZyYWdDb29yZCArIHZlYzIoMS4wLCAtMS4wKSkgKiBpbnZlcnNlVlA7XFxuICAgIHZfcmdiU1cgPSAoZnJhZ0Nvb3JkICsgdmVjMigtMS4wLCAxLjApKSAqIGludmVyc2VWUDtcXG4gICAgdl9yZ2JTRSA9IChmcmFnQ29vcmQgKyB2ZWMyKDEuMCwgMS4wKSkgKiBpbnZlcnNlVlA7XFxuICAgIHZfcmdiTSA9IHZlYzIoZnJhZ0Nvb3JkICogaW52ZXJzZVZQKTtcXG59XFxuXFxudm9pZCBtYWluKHZvaWQpe1xcbiAgIGdsX1Bvc2l0aW9uID0gdmVjNCgocHJvamVjdGlvbk1hdHJpeCAqIHZlYzMoYVZlcnRleFBvc2l0aW9uLCAxLjApKS54eSwgMC4wLCAxLjApO1xcbiAgIHZUZXh0dXJlQ29vcmQgPSBhVGV4dHVyZUNvb3JkO1xcbiAgIHZDb2xvciA9IHZlYzQoYUNvbG9yLnJnYiAqIGFDb2xvci5hLCBhQ29sb3IuYSk7XFxuICAgdlJlc29sdXRpb24gPSByZXNvbHV0aW9uO1xcblxcbiAgIC8vY29tcHV0ZSB0aGUgdGV4dHVyZSBjb29yZHMgYW5kIHNlbmQgdGhlbSB0byB2YXJ5aW5nc1xcbiAgIHRleGNvb3JkcyhhVGV4dHVyZUNvb3JkICogcmVzb2x1dGlvbiwgcmVzb2x1dGlvbiwgdl9yZ2JOVywgdl9yZ2JORSwgdl9yZ2JTVywgdl9yZ2JTRSwgdl9yZ2JNKTtcXG59XFxuXCIsXG4gICAgICAgIC8vIGZyYWdtZW50IHNoYWRlclxuICAgICAgICBcInByZWNpc2lvbiBsb3dwIGZsb2F0O1xcblxcblxcbi8qKlxcbkJhc2ljIEZYQUEgaW1wbGVtZW50YXRpb24gYmFzZWQgb24gdGhlIGNvZGUgb24gZ2Vla3MzZC5jb20gd2l0aCB0aGVcXG5tb2RpZmljYXRpb24gdGhhdCB0aGUgdGV4dHVyZTJETG9kIHN0dWZmIHdhcyByZW1vdmVkIHNpbmNlIGl0J3NcXG51bnN1cHBvcnRlZCBieSBXZWJHTC5cXG5cXG4tLVxcblxcbkZyb206XFxuaHR0cHM6Ly9naXRodWIuY29tL21pdHN1aGlrby93ZWJnbC1tZWluY3JhZnRcXG5cXG5Db3B5cmlnaHQgKGMpIDIwMTEgYnkgQXJtaW4gUm9uYWNoZXIuXFxuXFxuU29tZSByaWdodHMgcmVzZXJ2ZWQuXFxuXFxuUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0XFxubW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZVxcbm1ldDpcXG5cXG4gICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodFxcbiAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci5cXG5cXG4gICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlXFxuICAgICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmdcXG4gICAgICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWRcXG4gICAgICB3aXRoIHRoZSBkaXN0cmlidXRpb24uXFxuXFxuICAgICogVGhlIG5hbWVzIG9mIHRoZSBjb250cmlidXRvcnMgbWF5IG5vdCBiZSB1c2VkIHRvIGVuZG9yc2Ugb3JcXG4gICAgICBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWNcXG4gICAgICBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uXFxuXFxuVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SU1xcblxcXCJBUyBJU1xcXCIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UXFxuTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SXFxuQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFRcXG5PV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCxcXG5TUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UXFxuTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsXFxuREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZXFxuVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVFxcbihJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRVxcbk9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuXFxuKi9cXG5cXG4jaWZuZGVmIEZYQUFfUkVEVUNFX01JTlxcbiAgICAjZGVmaW5lIEZYQUFfUkVEVUNFX01JTiAgICgxLjAvIDEyOC4wKVxcbiNlbmRpZlxcbiNpZm5kZWYgRlhBQV9SRURVQ0VfTVVMXFxuICAgICNkZWZpbmUgRlhBQV9SRURVQ0VfTVVMICAgKDEuMCAvIDguMClcXG4jZW5kaWZcXG4jaWZuZGVmIEZYQUFfU1BBTl9NQVhcXG4gICAgI2RlZmluZSBGWEFBX1NQQU5fTUFYICAgICA4LjBcXG4jZW5kaWZcXG5cXG4vL29wdGltaXplZCB2ZXJzaW9uIGZvciBtb2JpbGUsIHdoZXJlIGRlcGVuZGVudFxcbi8vdGV4dHVyZSByZWFkcyBjYW4gYmUgYSBib3R0bGVuZWNrXFxudmVjNCBmeGFhKHNhbXBsZXIyRCB0ZXgsIHZlYzIgZnJhZ0Nvb3JkLCB2ZWMyIHJlc29sdXRpb24sXFxuICAgICAgICAgICAgdmVjMiB2X3JnYk5XLCB2ZWMyIHZfcmdiTkUsXFxuICAgICAgICAgICAgdmVjMiB2X3JnYlNXLCB2ZWMyIHZfcmdiU0UsXFxuICAgICAgICAgICAgdmVjMiB2X3JnYk0pIHtcXG4gICAgdmVjNCBjb2xvcjtcXG4gICAgbWVkaXVtcCB2ZWMyIGludmVyc2VWUCA9IHZlYzIoMS4wIC8gcmVzb2x1dGlvbi54LCAxLjAgLyByZXNvbHV0aW9uLnkpO1xcbiAgICB2ZWMzIHJnYk5XID0gdGV4dHVyZTJEKHRleCwgdl9yZ2JOVykueHl6O1xcbiAgICB2ZWMzIHJnYk5FID0gdGV4dHVyZTJEKHRleCwgdl9yZ2JORSkueHl6O1xcbiAgICB2ZWMzIHJnYlNXID0gdGV4dHVyZTJEKHRleCwgdl9yZ2JTVykueHl6O1xcbiAgICB2ZWMzIHJnYlNFID0gdGV4dHVyZTJEKHRleCwgdl9yZ2JTRSkueHl6O1xcbiAgICB2ZWM0IHRleENvbG9yID0gdGV4dHVyZTJEKHRleCwgdl9yZ2JNKTtcXG4gICAgdmVjMyByZ2JNICA9IHRleENvbG9yLnh5ejtcXG4gICAgdmVjMyBsdW1hID0gdmVjMygwLjI5OSwgMC41ODcsIDAuMTE0KTtcXG4gICAgZmxvYXQgbHVtYU5XID0gZG90KHJnYk5XLCBsdW1hKTtcXG4gICAgZmxvYXQgbHVtYU5FID0gZG90KHJnYk5FLCBsdW1hKTtcXG4gICAgZmxvYXQgbHVtYVNXID0gZG90KHJnYlNXLCBsdW1hKTtcXG4gICAgZmxvYXQgbHVtYVNFID0gZG90KHJnYlNFLCBsdW1hKTtcXG4gICAgZmxvYXQgbHVtYU0gID0gZG90KHJnYk0sICBsdW1hKTtcXG4gICAgZmxvYXQgbHVtYU1pbiA9IG1pbihsdW1hTSwgbWluKG1pbihsdW1hTlcsIGx1bWFORSksIG1pbihsdW1hU1csIGx1bWFTRSkpKTtcXG4gICAgZmxvYXQgbHVtYU1heCA9IG1heChsdW1hTSwgbWF4KG1heChsdW1hTlcsIGx1bWFORSksIG1heChsdW1hU1csIGx1bWFTRSkpKTtcXG5cXG4gICAgbWVkaXVtcCB2ZWMyIGRpcjtcXG4gICAgZGlyLnggPSAtKChsdW1hTlcgKyBsdW1hTkUpIC0gKGx1bWFTVyArIGx1bWFTRSkpO1xcbiAgICBkaXIueSA9ICAoKGx1bWFOVyArIGx1bWFTVykgLSAobHVtYU5FICsgbHVtYVNFKSk7XFxuXFxuICAgIGZsb2F0IGRpclJlZHVjZSA9IG1heCgobHVtYU5XICsgbHVtYU5FICsgbHVtYVNXICsgbHVtYVNFKSAqXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAoMC4yNSAqIEZYQUFfUkVEVUNFX01VTCksIEZYQUFfUkVEVUNFX01JTik7XFxuXFxuICAgIGZsb2F0IHJjcERpck1pbiA9IDEuMCAvIChtaW4oYWJzKGRpci54KSwgYWJzKGRpci55KSkgKyBkaXJSZWR1Y2UpO1xcbiAgICBkaXIgPSBtaW4odmVjMihGWEFBX1NQQU5fTUFYLCBGWEFBX1NQQU5fTUFYKSxcXG4gICAgICAgICAgICAgIG1heCh2ZWMyKC1GWEFBX1NQQU5fTUFYLCAtRlhBQV9TUEFOX01BWCksXFxuICAgICAgICAgICAgICBkaXIgKiByY3BEaXJNaW4pKSAqIGludmVyc2VWUDtcXG5cXG4gICAgdmVjMyByZ2JBID0gMC41ICogKFxcbiAgICAgICAgdGV4dHVyZTJEKHRleCwgZnJhZ0Nvb3JkICogaW52ZXJzZVZQICsgZGlyICogKDEuMCAvIDMuMCAtIDAuNSkpLnh5eiArXFxuICAgICAgICB0ZXh0dXJlMkQodGV4LCBmcmFnQ29vcmQgKiBpbnZlcnNlVlAgKyBkaXIgKiAoMi4wIC8gMy4wIC0gMC41KSkueHl6KTtcXG4gICAgdmVjMyByZ2JCID0gcmdiQSAqIDAuNSArIDAuMjUgKiAoXFxuICAgICAgICB0ZXh0dXJlMkQodGV4LCBmcmFnQ29vcmQgKiBpbnZlcnNlVlAgKyBkaXIgKiAtMC41KS54eXogK1xcbiAgICAgICAgdGV4dHVyZTJEKHRleCwgZnJhZ0Nvb3JkICogaW52ZXJzZVZQICsgZGlyICogMC41KS54eXopO1xcblxcbiAgICBmbG9hdCBsdW1hQiA9IGRvdChyZ2JCLCBsdW1hKTtcXG4gICAgaWYgKChsdW1hQiA8IGx1bWFNaW4pIHx8IChsdW1hQiA+IGx1bWFNYXgpKVxcbiAgICAgICAgY29sb3IgPSB2ZWM0KHJnYkEsIHRleENvbG9yLmEpO1xcbiAgICBlbHNlXFxuICAgICAgICBjb2xvciA9IHZlYzQocmdiQiwgdGV4Q29sb3IuYSk7XFxuICAgIHJldHVybiBjb2xvcjtcXG59XFxuXFxuXFxudmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7XFxudmFyeWluZyB2ZWM0IHZDb2xvcjtcXG52YXJ5aW5nIHZlYzIgdlJlc29sdXRpb247XFxuXFxuLy90ZXhjb29yZHMgY29tcHV0ZWQgaW4gdmVydGV4IHN0ZXBcXG4vL3RvIGF2b2lkIGRlcGVuZGVudCB0ZXh0dXJlIHJlYWRzXFxudmFyeWluZyB2ZWMyIHZfcmdiTlc7XFxudmFyeWluZyB2ZWMyIHZfcmdiTkU7XFxudmFyeWluZyB2ZWMyIHZfcmdiU1c7XFxudmFyeWluZyB2ZWMyIHZfcmdiU0U7XFxudmFyeWluZyB2ZWMyIHZfcmdiTTtcXG5cXG51bmlmb3JtIHNhbXBsZXIyRCB1U2FtcGxlcjtcXG5cXG5cXG52b2lkIG1haW4odm9pZCl7XFxuXFxuICAgIGdsX0ZyYWdDb2xvciA9IGZ4YWEodVNhbXBsZXIsIHZUZXh0dXJlQ29vcmQgKiB2UmVzb2x1dGlvbiwgdlJlc29sdXRpb24sIHZfcmdiTlcsIHZfcmdiTkUsIHZfcmdiU1csIHZfcmdiU0UsIHZfcmdiTSk7XFxuXFxufVxcblwiLFxuICAgICAgICAvLyB1bmlmb3Jtc1xuICAgICAgICB7XG4gICAgICAgICAgICByZXNvbHV0aW9uOiB7IHR5cGU6ICd2MicsIHZhbHVlOiB7IHg6IDEsIHk6IDEgfSB9XG4gICAgICAgIH1cbiAgICApO1xuXG59XG5cbkZYQUFGaWx0ZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShBYnN0cmFjdEZpbHRlci5wcm90b3R5cGUpO1xuRlhBQUZpbHRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBGWEFBRmlsdGVyO1xubW9kdWxlLmV4cG9ydHMgPSBGWEFBRmlsdGVyO1xuXG4vKipcbiAqIEFwcGxpZXMgdGhlIGZpbHRlclxuICpcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5XZWJHTFJlbmRlcmVyfSBUaGUgcmVuZGVyZXIgdG8gcmV0cmlldmUgdGhlIGZpbHRlciBmcm9tXG4gKiBAcGFyYW0gaW5wdXQge1BJWEkuUmVuZGVyVGFyZ2V0fVxuICogQHBhcmFtIG91dHB1dCB7UElYSS5SZW5kZXJUYXJnZXR9XG4gKi9cbkZYQUFGaWx0ZXIucHJvdG90eXBlLmFwcGx5RmlsdGVyID0gZnVuY3Rpb24gKHJlbmRlcmVyLCBpbnB1dCwgb3V0cHV0KVxue1xuICAgIHZhciBmaWx0ZXJNYW5hZ2VyID0gcmVuZGVyZXIuZmlsdGVyTWFuYWdlcjtcblxuICAgIHZhciBzaGFkZXIgPSB0aGlzLmdldFNoYWRlciggcmVuZGVyZXIgKTtcbiAgICAgLy8gZHJhdyB0aGUgZmlsdGVyLi4uXG4gICAgZmlsdGVyTWFuYWdlci5hcHBseUZpbHRlcihzaGFkZXIsIGlucHV0LCBvdXRwdXQpO1xufTtcbiIsInZhciBBYnN0cmFjdEZpbHRlciA9IHJlcXVpcmUoJy4vQWJzdHJhY3RGaWx0ZXInKSxcbiAgICBtYXRoID0gIHJlcXVpcmUoJy4uLy4uLy4uL21hdGgnKTtcblxuLy8gQHNlZSBodHRwczovL2dpdGh1Yi5jb20vc3Vic3RhY2svYnJmcy9pc3N1ZXMvMjVcblxuXG4vKipcbiAqIFRoZSBTcHJpdGVNYXNrRmlsdGVyIGNsYXNzXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLkFic3RyYWN0RmlsdGVyXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIHNwcml0ZSB7UElYSS5TcHJpdGV9IHRoZSB0YXJnZXQgc3ByaXRlXG4gKi9cbmZ1bmN0aW9uIFNwcml0ZU1hc2tGaWx0ZXIoc3ByaXRlKVxue1xuICAgIHZhciBtYXNrTWF0cml4ID0gbmV3IG1hdGguTWF0cml4KCk7XG5cbiAgICBBYnN0cmFjdEZpbHRlci5jYWxsKHRoaXMsXG4gICAgICAgIFwiYXR0cmlidXRlIHZlYzIgYVZlcnRleFBvc2l0aW9uO1xcbmF0dHJpYnV0ZSB2ZWMyIGFUZXh0dXJlQ29vcmQ7XFxuYXR0cmlidXRlIHZlYzQgYUNvbG9yO1xcblxcbnVuaWZvcm0gbWF0MyBwcm9qZWN0aW9uTWF0cml4O1xcbnVuaWZvcm0gbWF0MyBvdGhlck1hdHJpeDtcXG5cXG52YXJ5aW5nIHZlYzIgdk1hc2tDb29yZDtcXG52YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDtcXG52YXJ5aW5nIHZlYzQgdkNvbG9yO1xcblxcbnZvaWQgbWFpbih2b2lkKVxcbntcXG4gICAgZ2xfUG9zaXRpb24gPSB2ZWM0KChwcm9qZWN0aW9uTWF0cml4ICogdmVjMyhhVmVydGV4UG9zaXRpb24sIDEuMCkpLnh5LCAwLjAsIDEuMCk7XFxuICAgIHZUZXh0dXJlQ29vcmQgPSBhVGV4dHVyZUNvb3JkO1xcbiAgICB2TWFza0Nvb3JkID0gKCBvdGhlck1hdHJpeCAqIHZlYzMoIGFUZXh0dXJlQ29vcmQsIDEuMCkgICkueHk7XFxuICAgIHZDb2xvciA9IHZlYzQoYUNvbG9yLnJnYiAqIGFDb2xvci5hLCBhQ29sb3IuYSk7XFxufVxcblwiLFxuICAgICAgICBcInByZWNpc2lvbiBsb3dwIGZsb2F0O1xcblxcbnZhcnlpbmcgdmVjMiB2TWFza0Nvb3JkO1xcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xcbnZhcnlpbmcgdmVjNCB2Q29sb3I7XFxuXFxudW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXI7XFxudW5pZm9ybSBmbG9hdCBhbHBoYTtcXG51bmlmb3JtIHNhbXBsZXIyRCBtYXNrO1xcblxcbnZvaWQgbWFpbih2b2lkKVxcbntcXG4gICAgLy8gY2hlY2sgY2xpcCEgdGhpcyB3aWxsIHN0b3AgdGhlIG1hc2sgYmxlZWRpbmcgb3V0IGZyb20gdGhlIGVkZ2VzXFxuICAgIHZlYzIgdGV4dCA9IGFicyggdk1hc2tDb29yZCAtIDAuNSApO1xcbiAgICB0ZXh0ID0gc3RlcCgwLjUsIHRleHQpO1xcbiAgICBmbG9hdCBjbGlwID0gMS4wIC0gbWF4KHRleHQueSwgdGV4dC54KTtcXG4gICAgdmVjNCBvcmlnaW5hbCA9IHRleHR1cmUyRCh1U2FtcGxlciwgdlRleHR1cmVDb29yZCk7XFxuICAgIHZlYzQgbWFza3kgPSB0ZXh0dXJlMkQobWFzaywgdk1hc2tDb29yZCk7XFxuICAgIG9yaWdpbmFsICo9IChtYXNreS5yICogbWFza3kuYSAqIGFscGhhICogY2xpcCk7XFxuICAgIGdsX0ZyYWdDb2xvciA9IG9yaWdpbmFsO1xcbn1cXG5cIixcbiAgICAgICAge1xuICAgICAgICAgICAgbWFzazogICAgICAgICAgIHsgdHlwZTogJ3NhbXBsZXIyRCcsIHZhbHVlOiBzcHJpdGUuX3RleHR1cmUgfSxcbiAgICAgICAgICAgIGFscGhhOiAgICAgICAgICB7IHR5cGU6ICdmJywgdmFsdWU6IDF9LFxuICAgICAgICAgICAgb3RoZXJNYXRyaXg6ICAgIHsgdHlwZTogJ21hdDMnLCB2YWx1ZTogbWFza01hdHJpeC50b0FycmF5KHRydWUpIH1cbiAgICAgICAgfVxuICAgICk7XG5cbiAgICB0aGlzLm1hc2tTcHJpdGUgPSBzcHJpdGU7XG4gICAgdGhpcy5tYXNrTWF0cml4ID0gbWFza01hdHJpeDtcbn1cblxuU3ByaXRlTWFza0ZpbHRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKEFic3RyYWN0RmlsdGVyLnByb3RvdHlwZSk7XG5TcHJpdGVNYXNrRmlsdGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFNwcml0ZU1hc2tGaWx0ZXI7XG5tb2R1bGUuZXhwb3J0cyA9IFNwcml0ZU1hc2tGaWx0ZXI7XG5cbi8qKlxuICogQXBwbGllcyB0aGUgZmlsdGVyXG4gKlxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLldlYkdMUmVuZGVyZXJ9IFRoZSByZW5kZXJlciB0byByZXRyaWV2ZSB0aGUgZmlsdGVyIGZyb21cbiAqIEBwYXJhbSBpbnB1dCB7UElYSS5SZW5kZXJUYXJnZXR9XG4gKiBAcGFyYW0gb3V0cHV0IHtQSVhJLlJlbmRlclRhcmdldH1cbiAqL1xuU3ByaXRlTWFza0ZpbHRlci5wcm90b3R5cGUuYXBwbHlGaWx0ZXIgPSBmdW5jdGlvbiAocmVuZGVyZXIsIGlucHV0LCBvdXRwdXQpXG57XG4gICAgdmFyIGZpbHRlck1hbmFnZXIgPSByZW5kZXJlci5maWx0ZXJNYW5hZ2VyO1xuXG4gICAgdGhpcy51bmlmb3Jtcy5tYXNrLnZhbHVlID0gdGhpcy5tYXNrU3ByaXRlLl90ZXh0dXJlO1xuXG4gICAgZmlsdGVyTWFuYWdlci5jYWxjdWxhdGVNYXBwZWRNYXRyaXgoaW5wdXQuZnJhbWUsIHRoaXMubWFza1Nwcml0ZSwgdGhpcy5tYXNrTWF0cml4KTtcblxuICAgIHRoaXMudW5pZm9ybXMub3RoZXJNYXRyaXgudmFsdWUgPSB0aGlzLm1hc2tNYXRyaXgudG9BcnJheSh0cnVlKTtcbiAgICB0aGlzLnVuaWZvcm1zLmFscGhhLnZhbHVlID0gdGhpcy5tYXNrU3ByaXRlLndvcmxkQWxwaGE7XG5cbiAgICB2YXIgc2hhZGVyID0gdGhpcy5nZXRTaGFkZXIocmVuZGVyZXIpO1xuICAgICAvLyBkcmF3IHRoZSBmaWx0ZXIuLi5cbiAgICBmaWx0ZXJNYW5hZ2VyLmFwcGx5RmlsdGVyKHNoYWRlciwgaW5wdXQsIG91dHB1dCk7XG59O1xuXG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKFNwcml0ZU1hc2tGaWx0ZXIucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogVGhlIHRleHR1cmUgdXNlZCBmb3IgdGhlIGRpc3BsYWNlbWVudCBtYXAuIE11c3QgYmUgcG93ZXIgb2YgMiBzaXplZCB0ZXh0dXJlLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5UZXh0dXJlfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLlNwcml0ZU1hc2tGaWx0ZXIjXG4gICAgICovXG4gICAgbWFwOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudW5pZm9ybXMubWFzay52YWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudW5pZm9ybXMubWFzay52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFRoZSBvZmZzZXQgdXNlZCB0byBtb3ZlIHRoZSBkaXNwbGFjZW1lbnQgbWFwLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5Qb2ludH1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5TcHJpdGVNYXNrRmlsdGVyI1xuICAgICAqL1xuICAgIG9mZnNldDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudW5pZm9ybXMub2Zmc2V0LnZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLm9mZnNldC52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfVxufSk7XG4iLCJ2YXIgV2ViR0xNYW5hZ2VyID0gcmVxdWlyZSgnLi9XZWJHTE1hbmFnZXInKTtcblxuLyoqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAZXh0ZW5kcyBQSVhJLldlYkdsTWFuYWdlclxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLldlYkdMUmVuZGVyZXJ9IFRoZSByZW5kZXJlciB0aGlzIG1hbmFnZXIgd29ya3MgZm9yLlxuICovXG5mdW5jdGlvbiBCbGVuZE1vZGVNYW5hZ2VyKHJlbmRlcmVyKVxue1xuICAgIFdlYkdMTWFuYWdlci5jYWxsKHRoaXMsIHJlbmRlcmVyKTtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLmN1cnJlbnRCbGVuZE1vZGUgPSA5OTk5OTtcbn1cblxuQmxlbmRNb2RlTWFuYWdlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFdlYkdMTWFuYWdlci5wcm90b3R5cGUpO1xuQmxlbmRNb2RlTWFuYWdlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBCbGVuZE1vZGVNYW5hZ2VyO1xubW9kdWxlLmV4cG9ydHMgPSBCbGVuZE1vZGVNYW5hZ2VyO1xuXG4vKipcbiAqIFNldHMtdXAgdGhlIGdpdmVuIGJsZW5kTW9kZSBmcm9tIFdlYkdMJ3MgcG9pbnQgb2Ygdmlldy5cbiAqXG4gKiBAcGFyYW0gYmxlbmRNb2RlIHtudW1iZXJ9IHRoZSBibGVuZE1vZGUsIHNob3VsZCBiZSBhIFBpeGkgY29uc3QsIHN1Y2ggYXMgYFBJWEkuQkxFTkRfTU9ERVMuQUREYC4gU2VlXG4gKiAge0BsaW5rIFBJWEkuQkxFTkRfTU9ERVN9IGZvciBwb3NzaWJsZSB2YWx1ZXMuXG4gKi9cbkJsZW5kTW9kZU1hbmFnZXIucHJvdG90eXBlLnNldEJsZW5kTW9kZSA9IGZ1bmN0aW9uIChibGVuZE1vZGUpXG57XG4gICAgaWYgKHRoaXMuY3VycmVudEJsZW5kTW9kZSA9PT0gYmxlbmRNb2RlKVxuICAgIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHRoaXMuY3VycmVudEJsZW5kTW9kZSA9IGJsZW5kTW9kZTtcblxuICAgIHZhciBtb2RlID0gdGhpcy5yZW5kZXJlci5ibGVuZE1vZGVzW3RoaXMuY3VycmVudEJsZW5kTW9kZV07XG4gICAgdGhpcy5yZW5kZXJlci5nbC5ibGVuZEZ1bmMobW9kZVswXSwgbW9kZVsxXSk7XG5cbiAgICByZXR1cm4gdHJ1ZTtcbn07XG4iLCJ2YXIgV2ViR0xNYW5hZ2VyID0gcmVxdWlyZSgnLi9XZWJHTE1hbmFnZXInKSxcbiAgICBSZW5kZXJUYXJnZXQgPSByZXF1aXJlKCcuLi91dGlscy9SZW5kZXJUYXJnZXQnKSxcbiAgICBDT05TVCA9IHJlcXVpcmUoJy4uLy4uLy4uL2NvbnN0JyksXG4gICAgUXVhZCA9IHJlcXVpcmUoJy4uL3V0aWxzL1F1YWQnKSxcbiAgICBtYXRoID0gIHJlcXVpcmUoJy4uLy4uLy4uL21hdGgnKTtcblxuLyoqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAZXh0ZW5kcyBQSVhJLldlYkdMTWFuYWdlclxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLldlYkdMUmVuZGVyZXJ9IFRoZSByZW5kZXJlciB0aGlzIG1hbmFnZXIgd29ya3MgZm9yLlxuICovXG5mdW5jdGlvbiBGaWx0ZXJNYW5hZ2VyKHJlbmRlcmVyKVxue1xuICAgIFdlYkdMTWFuYWdlci5jYWxsKHRoaXMsIHJlbmRlcmVyKTtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge29iamVjdFtdfVxuICAgICAqL1xuICAgIHRoaXMuZmlsdGVyU3RhY2sgPSBbXTtcblxuICAgIHRoaXMuZmlsdGVyU3RhY2sucHVzaCh7XG4gICAgICAgIHJlbmRlclRhcmdldDpyZW5kZXJlci5jdXJyZW50UmVuZGVyVGFyZ2V0LFxuICAgICAgICBmaWx0ZXI6W10sXG4gICAgICAgIGJvdW5kczpudWxsXG4gICAgfSk7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlJlbmRlclRhcmdldFtdfVxuICAgICAqL1xuICAgIHRoaXMudGV4dHVyZVBvb2wgPSBbXTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBzaXplIG9mIHRoZSB0ZXh0dXJlXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlJlY3RhbmdsZX1cbiAgICAgKi9cbiAgICAvLyBsaXN0ZW4gZm9yIGNvbnRleHQgYW5kIHVwZGF0ZSBuZWNlc3NhcnkgYnVmZmVyc1xuICAgIC8vVE9ETyBtYWtlIHRoaXMgZHluYW1pYyFcbiAgICAvL1RPRE8gdGVzdCB0aGlzIG91dCBieSBmb3JjZXMgcG93ZXIgb2YgdHdvP1xuICAgIHRoaXMudGV4dHVyZVNpemUgPSBuZXcgbWF0aC5SZWN0YW5nbGUoMCwgMCwgcmVuZGVyZXIud2lkdGgsIHJlbmRlcmVyLmhlaWdodCk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgY3VycmVudCBmcmFtZVxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5SZWN0YW5nbGV9XG4gICAgICovXG4gICAgdGhpcy5jdXJyZW50RnJhbWUgPSBudWxsO1xufVxuXG5GaWx0ZXJNYW5hZ2VyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoV2ViR0xNYW5hZ2VyLnByb3RvdHlwZSk7XG5GaWx0ZXJNYW5hZ2VyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IEZpbHRlck1hbmFnZXI7XG5tb2R1bGUuZXhwb3J0cyA9IEZpbHRlck1hbmFnZXI7XG5cblxuLyoqXG4gKiBDYWxsZWQgd2hlbiB0aGVyZSBpcyBhIFdlYkdMIGNvbnRleHQgY2hhbmdlLlxuICpcbiAqL1xuRmlsdGVyTWFuYWdlci5wcm90b3R5cGUub25Db250ZXh0Q2hhbmdlID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLnRleHR1cmVQb29sLmxlbmd0aCA9IDA7XG5cbiAgICB2YXIgZ2wgPSB0aGlzLnJlbmRlcmVyLmdsO1xuICAgIHRoaXMucXVhZCA9IG5ldyBRdWFkKGdsKTtcbn07XG5cbi8qKlxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLldlYkdMUmVuZGVyZXJ9XG4gKiBAcGFyYW0gYnVmZmVyIHtBcnJheUJ1ZmZlcn1cbiAqL1xuRmlsdGVyTWFuYWdlci5wcm90b3R5cGUuc2V0RmlsdGVyU3RhY2sgPSBmdW5jdGlvbiAoIGZpbHRlclN0YWNrIClcbntcbiAgICB0aGlzLmZpbHRlclN0YWNrID0gZmlsdGVyU3RhY2s7XG59O1xuXG4vKipcbiAqIEFwcGxpZXMgdGhlIGZpbHRlciBhbmQgYWRkcyBpdCB0byB0aGUgY3VycmVudCBmaWx0ZXIgc3RhY2suXG4gKlxuICogQHBhcmFtIHRhcmdldCB7UElYSS5EaXNwbGF5T2JqZWN0fVxuICogQHBhcmFtIGZpbHRlcnMge1BJWEkuQWJzdHJhY3RGaWxlcltdfSB0aGUgZmlsdGVycyB0aGF0IHdpbGwgYmUgcHVzaGVkIHRvIHRoZSBjdXJyZW50IGZpbHRlciBzdGFja1xuICovXG5GaWx0ZXJNYW5hZ2VyLnByb3RvdHlwZS5wdXNoRmlsdGVyID0gZnVuY3Rpb24gKHRhcmdldCwgZmlsdGVycylcbntcbiAgICAvLyBnZXQgdGhlIGJvdW5kcyBvZiB0aGUgb2JqZWN0Li5cbiAgICAvLyBUT0RPIHJlcGxhY2UgY2xvbmUgd2l0aCBhIGNvcHkgdG8gc2F2ZSBvYmplY3QgY3JlYXRpb25cbiAgICB2YXIgYm91bmRzID0gdGFyZ2V0LmZpbHRlckFyZWEgPyB0YXJnZXQuZmlsdGVyQXJlYS5jbG9uZSgpIDogdGFyZ2V0LmdldEJvdW5kcygpO1xuXG4gICAgLy9ib3VuZHMgPSBib3VuZHMuY2xvbmUoKTtcblxuICAgIC8vIHJvdW5kIG9mZiB0aGUgcmVjdGFuZ2xlIHRvIGdldCBhIG5pY2Ugc21vb29vb29vdGggZmlsdGVyIDopXG4gICAgYm91bmRzLnggPSBib3VuZHMueCB8IDA7XG4gICAgYm91bmRzLnkgPSBib3VuZHMueSB8IDA7XG4gICAgYm91bmRzLndpZHRoID0gYm91bmRzLndpZHRoIHwgMDtcbiAgICBib3VuZHMuaGVpZ2h0ID0gYm91bmRzLmhlaWdodCB8IDA7XG5cblxuICAgIC8vIHBhZGRpbmchXG4gICAgdmFyIHBhZGRpbmcgPSBmaWx0ZXJzWzBdLnBhZGRpbmcgfCAwO1xuICAgIGJvdW5kcy54IC09IHBhZGRpbmc7XG4gICAgYm91bmRzLnkgLT0gcGFkZGluZztcbiAgICBib3VuZHMud2lkdGggKz0gcGFkZGluZyAqIDI7XG4gICAgYm91bmRzLmhlaWdodCArPSBwYWRkaW5nICogMjtcblxuXG4gICAgaWYodGhpcy5yZW5kZXJlci5jdXJyZW50UmVuZGVyVGFyZ2V0LnRyYW5zZm9ybSlcbiAgICB7XG4gICAgICAgIC8vVE9ETyB0aGlzIHdpbGwgYnJlYWsgaWYgdGhlIHJlbmRlclRleHR1cmUgdHJhbnNmb3JtIGlzIGFueXRoaW5nIG90aGVyIHRoYW4gYSB0cmFuc2xhdGlvbi5cbiAgICAgICAgLy9XaWxsIG5lZWQgdG8gdGFrZSB0aGUgZnVsbCBtYXRyaXggdHJhbnNmb3JtIGludG8gYWNvdW50Li5cbiAgICAgICAgdmFyIHRyYW5zZm9ybSA9IHRoaXMucmVuZGVyZXIuY3VycmVudFJlbmRlclRhcmdldC50cmFuc2Zvcm07XG5cbiAgICAgICAgYm91bmRzLnggKz0gdHJhbnNmb3JtLnR4O1xuICAgICAgICBib3VuZHMueSArPSB0cmFuc2Zvcm0udHk7XG5cbiAgICAgICAgdGhpcy5jYXBGaWx0ZXJBcmVhKCBib3VuZHMgKTtcblxuICAgICAgICBib3VuZHMueCAtPSB0cmFuc2Zvcm0udHg7XG4gICAgICAgIGJvdW5kcy55IC09IHRyYW5zZm9ybS50eTtcbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgIHRoaXMuY2FwRmlsdGVyQXJlYSggYm91bmRzICk7XG4gICAgfVxuXG4gICAgaWYoYm91bmRzLndpZHRoID4gMCAmJiBib3VuZHMuaGVpZ2h0ID4gMClcbiAgICB7XG4gICAgICAgIHRoaXMuY3VycmVudEZyYW1lID0gYm91bmRzO1xuXG4gICAgICAgIHZhciB0ZXh0dXJlID0gdGhpcy5nZXRSZW5kZXJUYXJnZXQoKTtcblxuICAgICAgICB0aGlzLnJlbmRlcmVyLnNldFJlbmRlclRhcmdldCh0ZXh0dXJlKTtcblxuICAgICAgICAvLyBjbGVhciB0aGUgdGV4dHVyZS4uXG4gICAgICAgIHRleHR1cmUuY2xlYXIoKTtcblxuICAgICAgICAvLyBUT0RPIGdldCByaWQgb2Ygb2JqZWN0IGNyZWF0aW9uIVxuICAgICAgICB0aGlzLmZpbHRlclN0YWNrLnB1c2goe1xuICAgICAgICAgICAgcmVuZGVyVGFyZ2V0OiB0ZXh0dXJlLFxuICAgICAgICAgICAgZmlsdGVyOiBmaWx0ZXJzXG4gICAgICAgIH0pO1xuXG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIC8vIHB1c2ggc29tdGhpbmcgb24gdG8gdGhlIHN0YWNrIHRoYXQgaXMgZW1wdHlcbiAgICAgICAgdGhpcy5maWx0ZXJTdGFjay5wdXNoKHtcbiAgICAgICAgICAgIHJlbmRlclRhcmdldDogbnVsbCxcbiAgICAgICAgICAgIGZpbHRlcjogZmlsdGVyc1xuICAgICAgICB9KTtcbiAgICB9XG59O1xuXG5cbi8qKlxuICogUmVtb3ZlcyB0aGUgbGFzdCBmaWx0ZXIgZnJvbSB0aGUgZmlsdGVyIHN0YWNrIGFuZCByZXR1cm5zIGl0LlxuICpcbiAqL1xuRmlsdGVyTWFuYWdlci5wcm90b3R5cGUucG9wRmlsdGVyID0gZnVuY3Rpb24gKClcbntcbiAgICB2YXIgZmlsdGVyRGF0YSA9IHRoaXMuZmlsdGVyU3RhY2sucG9wKCk7XG4gICAgdmFyIHByZXZpb3VzRmlsdGVyRGF0YSA9IHRoaXMuZmlsdGVyU3RhY2tbdGhpcy5maWx0ZXJTdGFjay5sZW5ndGgtMV07XG5cbiAgICB2YXIgaW5wdXQgPSBmaWx0ZXJEYXRhLnJlbmRlclRhcmdldDtcblxuICAgIC8vIGlmIHRoZSByZW5kZXJUYXJnZXQgaXMgbnVsbCB0aGVuIHdlIGRvbid0IGFwcGx5IHRoZSBmaWx0ZXIgYXMgaXRzIG9mZnNjcmVlblxuICAgIGlmKCFmaWx0ZXJEYXRhLnJlbmRlclRhcmdldClcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB2YXIgb3V0cHV0ID0gcHJldmlvdXNGaWx0ZXJEYXRhLnJlbmRlclRhcmdldDtcblxuICAgIC8vIHVzZSBwcm9ncmFtXG4gICAgdmFyIGdsID0gdGhpcy5yZW5kZXJlci5nbDtcblxuXG4gICAgdGhpcy5jdXJyZW50RnJhbWUgPSBpbnB1dC5mcmFtZTtcblxuICAgIHRoaXMucXVhZC5tYXAodGhpcy50ZXh0dXJlU2l6ZSwgaW5wdXQuZnJhbWUpO1xuXG5cbiAgICAvLyBUT0RPLi4gdGhpcyBwcm9iYWJseSBvbmx5IG5lZWRzIHRvIGJlIGRvbmUgb25jZSFcbiAgICBnbC5iaW5kQnVmZmVyKGdsLkFSUkFZX0JVRkZFUiwgdGhpcy5xdWFkLnZlcnRleEJ1ZmZlcik7XG4gICAgZ2wuYmluZEJ1ZmZlcihnbC5FTEVNRU5UX0FSUkFZX0JVRkZFUiwgdGhpcy5xdWFkLmluZGV4QnVmZmVyKTtcblxuICAgIHZhciBmaWx0ZXJzID0gZmlsdGVyRGF0YS5maWx0ZXI7XG5cbiAgICAvLyBhc3N1bWluZyBhbGwgZmlsdGVycyBmb2xsb3cgdGhlIGNvcnJlY3QgZm9ybWF0Pz9cbiAgICBnbC52ZXJ0ZXhBdHRyaWJQb2ludGVyKHRoaXMucmVuZGVyZXIuc2hhZGVyTWFuYWdlci5kZWZhdWx0U2hhZGVyLmF0dHJpYnV0ZXMuYVZlcnRleFBvc2l0aW9uLCAyLCBnbC5GTE9BVCwgZmFsc2UsIDAsIDApO1xuICAgIGdsLnZlcnRleEF0dHJpYlBvaW50ZXIodGhpcy5yZW5kZXJlci5zaGFkZXJNYW5hZ2VyLmRlZmF1bHRTaGFkZXIuYXR0cmlidXRlcy5hVGV4dHVyZUNvb3JkLCAyLCBnbC5GTE9BVCwgZmFsc2UsIDAsIDIgKiA0ICogNCk7XG4gICAgZ2wudmVydGV4QXR0cmliUG9pbnRlcih0aGlzLnJlbmRlcmVyLnNoYWRlck1hbmFnZXIuZGVmYXVsdFNoYWRlci5hdHRyaWJ1dGVzLmFDb2xvciwgNCwgZ2wuRkxPQVQsIGZhbHNlLCAwLCA0ICogNCAqIDQpO1xuXG4gICAgLy8gcmVzdG9yZSB0aGUgbm9ybWFsIGJsZW5kbW9kZSFcbiAgICB0aGlzLnJlbmRlcmVyLmJsZW5kTW9kZU1hbmFnZXIuc2V0QmxlbmRNb2RlKENPTlNULkJMRU5EX01PREVTLk5PUk1BTCk7XG5cbiAgICBpZiAoZmlsdGVycy5sZW5ndGggPT09IDEpXG4gICAge1xuICAgICAgICAvLyBUT0RPIChjZW5nbGVyKSAtIFRoZXJlIGhhcyB0byBiZSBhIGJldHRlciB3YXkgdGhlbiBzZXR0aW5nIHRoaXMgZWFjaCB0aW1lP1xuICAgICAgICBpZiAoZmlsdGVyc1swXS51bmlmb3Jtcy5kaW1lbnNpb25zKVxuICAgICAgICB7XG4gICAgICAgICAgICBmaWx0ZXJzWzBdLnVuaWZvcm1zLmRpbWVuc2lvbnMudmFsdWVbMF0gPSB0aGlzLnJlbmRlcmVyLndpZHRoO1xuICAgICAgICAgICAgZmlsdGVyc1swXS51bmlmb3Jtcy5kaW1lbnNpb25zLnZhbHVlWzFdID0gdGhpcy5yZW5kZXJlci5oZWlnaHQ7XG4gICAgICAgICAgICBmaWx0ZXJzWzBdLnVuaWZvcm1zLmRpbWVuc2lvbnMudmFsdWVbMl0gPSB0aGlzLnF1YWQudmVydGljZXNbMF07XG4gICAgICAgICAgICBmaWx0ZXJzWzBdLnVuaWZvcm1zLmRpbWVuc2lvbnMudmFsdWVbM10gPSB0aGlzLnF1YWQudmVydGljZXNbNV07XG4gICAgICAgIH1cblxuICAgICAgICBmaWx0ZXJzWzBdLmFwcGx5RmlsdGVyKCB0aGlzLnJlbmRlcmVyLCBpbnB1dCwgb3V0cHV0ICk7XG4gICAgICAgIHRoaXMucmV0dXJuUmVuZGVyVGFyZ2V0KCBpbnB1dCApO1xuXG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHZhciBmbGlwVGV4dHVyZSA9IGlucHV0O1xuICAgICAgICB2YXIgZmxvcFRleHR1cmUgPSB0aGlzLmdldFJlbmRlclRhcmdldCh0cnVlKTtcblxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGZpbHRlcnMubGVuZ3RoLTE7IGkrKylcbiAgICAgICAge1xuICAgICAgICAgICAgdmFyIGZpbHRlciA9IGZpbHRlcnNbaV07XG5cbiAgICAgICAgICAgIC8vIFRPRE8gKGNlbmdsZXIpIC0gVGhlcmUgaGFzIHRvIGJlIGEgYmV0dGVyIHdheSB0aGVuIHNldHRpbmcgdGhpcyBlYWNoIHRpbWU/XG4gICAgICAgICAgICBpZiAoZmlsdGVyLnVuaWZvcm1zLmRpbWVuc2lvbnMpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgZmlsdGVyLnVuaWZvcm1zLmRpbWVuc2lvbnMudmFsdWVbMF0gPSB0aGlzLnJlbmRlcmVyLndpZHRoO1xuICAgICAgICAgICAgICAgIGZpbHRlci51bmlmb3Jtcy5kaW1lbnNpb25zLnZhbHVlWzFdID0gdGhpcy5yZW5kZXJlci5oZWlnaHQ7XG4gICAgICAgICAgICAgICAgZmlsdGVyLnVuaWZvcm1zLmRpbWVuc2lvbnMudmFsdWVbMl0gPSB0aGlzLnF1YWQudmVydGljZXNbMF07XG4gICAgICAgICAgICAgICAgZmlsdGVyLnVuaWZvcm1zLmRpbWVuc2lvbnMudmFsdWVbM10gPSB0aGlzLnF1YWQudmVydGljZXNbNV07XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGZpbHRlci5hcHBseUZpbHRlciggdGhpcy5yZW5kZXJlciwgZmxpcFRleHR1cmUsIGZsb3BUZXh0dXJlICk7XG5cbiAgICAgICAgICAgIHZhciB0ZW1wID0gZmxpcFRleHR1cmU7XG4gICAgICAgICAgICBmbGlwVGV4dHVyZSA9IGZsb3BUZXh0dXJlO1xuICAgICAgICAgICAgZmxvcFRleHR1cmUgPSB0ZW1wO1xuICAgICAgICB9XG5cbiAgICAgICAgZmlsdGVyc1tmaWx0ZXJzLmxlbmd0aC0xXS5hcHBseUZpbHRlciggdGhpcy5yZW5kZXJlciwgZmxpcFRleHR1cmUsIG91dHB1dCApO1xuXG4gICAgICAgIHRoaXMucmV0dXJuUmVuZGVyVGFyZ2V0KCBmbGlwVGV4dHVyZSApO1xuICAgICAgICB0aGlzLnJldHVyblJlbmRlclRhcmdldCggZmxvcFRleHR1cmUgKTtcbiAgICB9XG5cbiAgICByZXR1cm4gZmlsdGVyRGF0YS5maWx0ZXI7XG59O1xuXG4vKipcbiAqIEdyYWJzIGFuIHJlbmRlciB0YXJnZXQgZnJvbSB0aGUgaW50ZXJuYWwgcG9vbFxuICpcbiAqIEBwYXJhbSBjbGVhciB7Ym9vbGVhbn0gV2hldGhlciBvciBub3Qgd2UgbmVlZCB0byBjbGVhciB0aGUgUmVuZGVyVGFyZ2V0XG4gKiBAcmV0dXJuIHtSZW5kZXJUYXJnZXR9XG4gKi9cbkZpbHRlck1hbmFnZXIucHJvdG90eXBlLmdldFJlbmRlclRhcmdldCA9IGZ1bmN0aW9uICggY2xlYXIgKVxue1xuICAgIHZhciByZW5kZXJUYXJnZXQgPSB0aGlzLnRleHR1cmVQb29sLnBvcCgpIHx8IG5ldyBSZW5kZXJUYXJnZXQodGhpcy5yZW5kZXJlci5nbCwgdGhpcy50ZXh0dXJlU2l6ZS53aWR0aCwgdGhpcy50ZXh0dXJlU2l6ZS5oZWlnaHQsIENPTlNULlNDQUxFX01PREVTLkxJTkVBUiwgdGhpcy5yZW5kZXJlci5yZXNvbHV0aW9uICogQ09OU1QuRklMVEVSX1JFU09MVVRJT04pO1xuICAgIHJlbmRlclRhcmdldC5mcmFtZSA9IHRoaXMuY3VycmVudEZyYW1lO1xuXG4gICAgaWYgKGNsZWFyKVxuICAgIHtcbiAgICAgICAgcmVuZGVyVGFyZ2V0LmNsZWFyKHRydWUpO1xuICAgIH1cblxuICAgIHJldHVybiByZW5kZXJUYXJnZXQ7XG59O1xuXG4vKlxuICogUmV0dXJucyBhIFJlbmRlclRhcmdldCB0byB0aGUgaW50ZXJuYWwgcG9vbFxuICogQHBhcmFtIHJlbmRlclRhcmdldCB7UmVuZGVyVGFyZ2V0fSBUaGUgUmVuZGVyVGFyZ2V0IHdlIHdhbnQgdG8gcmV0dXJuIHRvIHRoZSBwb29sXG4gKi9cbkZpbHRlck1hbmFnZXIucHJvdG90eXBlLnJldHVyblJlbmRlclRhcmdldCA9IGZ1bmN0aW9uIChyZW5kZXJUYXJnZXQpXG57XG4gICAgdGhpcy50ZXh0dXJlUG9vbC5wdXNoKCByZW5kZXJUYXJnZXQgKTtcbn07XG5cbi8qXG4gKiBBcHBsaWVzIHRoZSBmaWx0ZXJcbiAqIEBwYXJhbSBzaGFkZXIge1NoYWRlcn0gVGhlIHNoYWRlciB0byB1cGxvYWRcbiAqIEBwYXJhbSBpbnB1dFRhcmdldCB7UmVuZGVyVGFyZ2V0fVxuICogQHBhcmFtIG91dHB1dFRhcmdldCB7UmVuZGVyVGFyZ2V0fVxuICogQHBhcmFtIGNsZWFyIHtib29sZWFufSBXaGV0aGVyIG9yIG5vdCB3ZSB3YW50IHRvIGNsZWFyIHRoZSBvdXRwdXRUYXJnZXRcbiAqL1xuRmlsdGVyTWFuYWdlci5wcm90b3R5cGUuYXBwbHlGaWx0ZXIgPSBmdW5jdGlvbiAoc2hhZGVyLCBpbnB1dFRhcmdldCwgb3V0cHV0VGFyZ2V0LCBjbGVhcilcbntcbiAgICB2YXIgZ2wgPSB0aGlzLnJlbmRlcmVyLmdsO1xuXG4gICAgdGhpcy5yZW5kZXJlci5zZXRSZW5kZXJUYXJnZXQob3V0cHV0VGFyZ2V0KTtcblxuICAgIGlmIChjbGVhcilcbiAgICB7XG4gICAgICAgIG91dHB1dFRhcmdldC5jbGVhcigpO1xuICAgIH1cblxuICAgIC8vIHNldCB0aGUgc2hhZGVyXG4gICAgdGhpcy5yZW5kZXJlci5zaGFkZXJNYW5hZ2VyLnNldFNoYWRlcihzaGFkZXIpO1xuXG4gICAgLy8gVE9ETyAoY2VuZ2xlcikgLSBDYW4gdGhpcyBiZSBjYWNoZWQgYW5kIG5vdCBgdG9BcnJheWBlZCBlYWNoIGZyYW1lP1xuICAgIHNoYWRlci51bmlmb3Jtcy5wcm9qZWN0aW9uTWF0cml4LnZhbHVlID0gdGhpcy5yZW5kZXJlci5jdXJyZW50UmVuZGVyVGFyZ2V0LnByb2plY3Rpb25NYXRyaXgudG9BcnJheSh0cnVlKTtcblxuICAgIC8vVE9ETyBjYW4gdGhpcyBiZSBvcHRpbWlzZWQ/XG4gICAgc2hhZGVyLnN5bmNVbmlmb3JtcygpO1xuLypcbiAgICBnbC52ZXJ0ZXhBdHRyaWJQb2ludGVyKHNoYWRlci5hdHRyaWJ1dGVzLmFWZXJ0ZXhQb3NpdGlvbiwgMiwgZ2wuRkxPQVQsIGZhbHNlLCAwLCAwKTtcbiAgICBnbC52ZXJ0ZXhBdHRyaWJQb2ludGVyKHNoYWRlci5hdHRyaWJ1dGVzLmFUZXh0dXJlQ29vcmQsIDIsIGdsLkZMT0FULCBmYWxzZSwgMCwgMiAqIDQgKiA0KTtcbiAgICBnbC52ZXJ0ZXhBdHRyaWJQb2ludGVyKHNoYWRlci5hdHRyaWJ1dGVzLmFDb2xvciwgNCwgZ2wuRkxPQVQsIGZhbHNlLCAwLCA0ICogNCAqIDQpO1xuKi9cblxuICAgIGdsLmFjdGl2ZVRleHR1cmUoZ2wuVEVYVFVSRTApO1xuICAgIGdsLmJpbmRUZXh0dXJlKGdsLlRFWFRVUkVfMkQsIGlucHV0VGFyZ2V0LnRleHR1cmUpO1xuXG4gICAgZ2wuZHJhd0VsZW1lbnRzKGdsLlRSSUFOR0xFUywgNiwgZ2wuVU5TSUdORURfU0hPUlQsIDAgKTtcbiAgICB0aGlzLnJlbmRlcmVyLmRyYXdDb3VudCsrO1xufTtcblxuLypcbiAqIENhbGN1bGF0ZXMgdGhlIG1hcHBlZCBtYXRyaXhcbiAqIEBwYXJhbSBmaWx0ZXJBcmVhIHtSZWN0YW5nbGV9IFRoZSBmaWx0ZXIgYXJlYVxuICogQHBhcmFtIHNwcml0ZSB7U3ByaXRlfSB0aGUgdGFyZ2V0IHNwcml0ZVxuICogQHBhcmFtIG91dHB1dE1hdHJpeCB7TWF0cml4fSBAYWx2aW5cbiAqL1xuLy8gVE9ETyBwbGF5aW5nIGFyb3VuZCBoZXJlLi4gdGhpcyBpcyB0ZW1wb3JhcnkgLSAod2lsbCBlbmQgdXAgaW4gdGhlIHNoYWRlcilcbkZpbHRlck1hbmFnZXIucHJvdG90eXBlLmNhbGN1bGF0ZU1hcHBlZE1hdHJpeCA9IGZ1bmN0aW9uIChmaWx0ZXJBcmVhLCBzcHJpdGUsIG91dHB1dE1hdHJpeClcbntcbiAgICB2YXIgd29ybGRUcmFuc2Zvcm0gPSBzcHJpdGUud29ybGRUcmFuc2Zvcm0uY29weShtYXRoLk1hdHJpeC5URU1QX01BVFJJWCksXG4gICAgdGV4dHVyZSA9IHNwcml0ZS5fdGV4dHVyZS5iYXNlVGV4dHVyZTtcblxuICAgIHZhciBtYXBwZWRNYXRyaXggPSBvdXRwdXRNYXRyaXguaWRlbnRpdHkoKTtcblxuICAgIC8vIHNjYWxlLi5cbiAgICB2YXIgcmF0aW8gPSB0aGlzLnRleHR1cmVTaXplLmhlaWdodCAvIHRoaXMudGV4dHVyZVNpemUud2lkdGg7XG5cbiAgICBtYXBwZWRNYXRyaXgudHJhbnNsYXRlKGZpbHRlckFyZWEueCAvIHRoaXMudGV4dHVyZVNpemUud2lkdGgsIGZpbHRlckFyZWEueSAvIHRoaXMudGV4dHVyZVNpemUuaGVpZ2h0ICk7XG5cbiAgICBtYXBwZWRNYXRyaXguc2NhbGUoMSAsIHJhdGlvKTtcblxuICAgIHZhciB0cmFuc2xhdGVTY2FsZVggPSAodGhpcy50ZXh0dXJlU2l6ZS53aWR0aCAvIHRleHR1cmUud2lkdGgpO1xuICAgIHZhciB0cmFuc2xhdGVTY2FsZVkgPSAodGhpcy50ZXh0dXJlU2l6ZS5oZWlnaHQgLyB0ZXh0dXJlLmhlaWdodCk7XG5cbiAgICB3b3JsZFRyYW5zZm9ybS50eCAvPSB0ZXh0dXJlLndpZHRoICogdHJhbnNsYXRlU2NhbGVYO1xuICAgIHdvcmxkVHJhbnNmb3JtLnR5IC89IHRleHR1cmUud2lkdGggKiB0cmFuc2xhdGVTY2FsZVg7XG5cbiAgICB3b3JsZFRyYW5zZm9ybS5pbnZlcnQoKTtcblxuICAgIG1hcHBlZE1hdHJpeC5wcmVwZW5kKHdvcmxkVHJhbnNmb3JtKTtcblxuICAgIC8vIGFwcGx5IGludmVyc2Ugc2NhbGUuLlxuICAgIG1hcHBlZE1hdHJpeC5zY2FsZSgxICwgMS9yYXRpbyk7XG5cbiAgICBtYXBwZWRNYXRyaXguc2NhbGUoIHRyYW5zbGF0ZVNjYWxlWCAsIHRyYW5zbGF0ZVNjYWxlWSApO1xuXG4gICAgbWFwcGVkTWF0cml4LnRyYW5zbGF0ZShzcHJpdGUuYW5jaG9yLngsIHNwcml0ZS5hbmNob3IueSk7XG5cbiAgICByZXR1cm4gbWFwcGVkTWF0cml4O1xuXG4gICAgLy8gS2VlcGluZyB0aGUgb3JnaW5hbCBhcyBhIHJlbWluZGVyIHRvIG1lIG9uIGhvdyB0aGlzIHdvcmtzIVxuICAgIC8vXG4gICAgLy8gdmFyIG0gPSBuZXcgbWF0aC5NYXRyaXgoKTtcblxuICAgIC8vIC8vIHNjYWxlLi5cbiAgICAvLyB2YXIgcmF0aW8gPSB0aGlzLnRleHR1cmVTaXplLmhlaWdodCAvIHRoaXMudGV4dHVyZVNpemUud2lkdGg7XG5cbiAgICAvLyBtLnRyYW5zbGF0ZShmaWx0ZXJBcmVhLnggLyB0aGlzLnRleHR1cmVTaXplLndpZHRoLCBmaWx0ZXJBcmVhLnkgLyB0aGlzLnRleHR1cmVTaXplLmhlaWdodCk7XG5cblxuICAgIC8vIG0uc2NhbGUoMSAsIHJhdGlvKTtcblxuXG4gICAgLy8gdmFyIHRyYW5zZm9ybSA9IHd0LmNsb25lKCk7XG5cbiAgICAvLyB2YXIgdHJhbnNsYXRlU2NhbGVYID0gKHRoaXMudGV4dHVyZVNpemUud2lkdGggLyA2MjApO1xuICAgIC8vIHZhciB0cmFuc2xhdGVTY2FsZVkgPSAodGhpcy50ZXh0dXJlU2l6ZS5oZWlnaHQgLyAzODApO1xuXG4gICAgLy8gdHJhbnNmb3JtLnR4IC89IDYyMCAqIHRyYW5zbGF0ZVNjYWxlWDtcbiAgICAvLyB0cmFuc2Zvcm0udHkgLz0gNjIwICogdHJhbnNsYXRlU2NhbGVYO1xuXG4gICAgLy8gdHJhbnNmb3JtLmludmVydCgpO1xuXG4gICAgLy8gdHJhbnNmb3JtLmFwcGVuZChtKTtcblxuICAgIC8vIC8vIGFwcGx5IGludmVyc2Ugc2NhbGUuLlxuICAgIC8vIHRyYW5zZm9ybS5zY2FsZSgxICwgMS9yYXRpbyk7XG5cbiAgICAvLyB0cmFuc2Zvcm0uc2NhbGUoIHRyYW5zbGF0ZVNjYWxlWCAsIHRyYW5zbGF0ZVNjYWxlWSApO1xuXG4gICAgLy8gcmV0dXJuIHRyYW5zZm9ybTtcbn07XG5cbi8qXG4gKiBDb25zdHJhaW5zIHRoZSBmaWx0ZXIgYXJlYSB0byB0aGUgdGV4dHVyZSBzaXplXG4gKiBAcGFyYW0gZmlsdGVyQXJlYSB7UmVjdGFuZ2xlfSBUaGUgZmlsdGVyIGFyZWEgd2Ugd2FudCB0byBjYXBcbiAqL1xuRmlsdGVyTWFuYWdlci5wcm90b3R5cGUuY2FwRmlsdGVyQXJlYSA9IGZ1bmN0aW9uIChmaWx0ZXJBcmVhKVxue1xuICAgIGlmIChmaWx0ZXJBcmVhLnggPCAwKVxuICAgIHtcbiAgICAgICAgZmlsdGVyQXJlYS53aWR0aCArPSBmaWx0ZXJBcmVhLng7XG4gICAgICAgIGZpbHRlckFyZWEueCA9IDA7XG4gICAgfVxuXG4gICAgaWYgKGZpbHRlckFyZWEueSA8IDApXG4gICAge1xuICAgICAgICBmaWx0ZXJBcmVhLmhlaWdodCArPSBmaWx0ZXJBcmVhLnk7XG4gICAgICAgIGZpbHRlckFyZWEueSA9IDA7XG4gICAgfVxuXG4gICAgaWYgKCBmaWx0ZXJBcmVhLnggKyBmaWx0ZXJBcmVhLndpZHRoID4gdGhpcy50ZXh0dXJlU2l6ZS53aWR0aCApXG4gICAge1xuICAgICAgICBmaWx0ZXJBcmVhLndpZHRoID0gdGhpcy50ZXh0dXJlU2l6ZS53aWR0aCAtIGZpbHRlckFyZWEueDtcbiAgICB9XG5cbiAgICBpZiAoIGZpbHRlckFyZWEueSArIGZpbHRlckFyZWEuaGVpZ2h0ID4gdGhpcy50ZXh0dXJlU2l6ZS5oZWlnaHQgKVxuICAgIHtcbiAgICAgICAgZmlsdGVyQXJlYS5oZWlnaHQgPSB0aGlzLnRleHR1cmVTaXplLmhlaWdodCAtIGZpbHRlckFyZWEueTtcbiAgICB9XG59O1xuXG4vKlxuICogUmVzaXplcyBhbGwgdGhlIHJlbmRlciB0YXJnZXRzIGluIHRoZSBwb29sXG4gKiBAcGFyYW0gd2lkdGgge251bWJlcn0gdGhlIG5ldyB3aWR0aFxuICogQHBhcmFtIGhlaWdodCB7bnVtYmVyfSB0aGUgbmV3IGhlaWdodFxuICovXG5GaWx0ZXJNYW5hZ2VyLnByb3RvdHlwZS5yZXNpemUgPSBmdW5jdGlvbiAoIHdpZHRoLCBoZWlnaHQgKVxue1xuICAgIHRoaXMudGV4dHVyZVNpemUud2lkdGggPSB3aWR0aDtcbiAgICB0aGlzLnRleHR1cmVTaXplLmhlaWdodCA9IGhlaWdodDtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy50ZXh0dXJlUG9vbC5sZW5ndGg7IGkrKylcbiAgICB7XG4gICAgICAgIHRoaXMudGV4dHVyZVBvb2xbaV0ucmVzaXplKCB3aWR0aCwgaGVpZ2h0ICk7XG4gICAgfVxufTtcblxuLyoqXG4gKiBEZXN0cm95cyB0aGUgZmlsdGVyIGFuZCByZW1vdmVzIGl0IGZyb20gdGhlIGZpbHRlciBzdGFjay5cbiAqXG4gKi9cbkZpbHRlck1hbmFnZXIucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoKVxue1xuICAgIHRoaXMucXVhZC5kZXN0cm95KCk7XG4gICAgXG4gICAgV2ViR0xNYW5hZ2VyLnByb3RvdHlwZS5kZXN0cm95LmNhbGwodGhpcyk7XG4gICAgXG4gICAgdGhpcy5maWx0ZXJTdGFjayA9IG51bGw7XG4gICAgdGhpcy5vZmZzZXRZID0gMDtcblxuICAgIC8vIGRlc3Ryb3kgdGV4dHVyZXNcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMudGV4dHVyZVBvb2wubGVuZ3RoOyBpKyspXG4gICAge1xuICAgICAgICB0aGlzLnRleHR1cmVQb29sW2ldLmRlc3Ryb3koKTtcbiAgICB9XG5cbiAgICB0aGlzLnRleHR1cmVQb29sID0gbnVsbDtcbn07XG4iLCJ2YXIgV2ViR0xNYW5hZ2VyID0gcmVxdWlyZSgnLi9XZWJHTE1hbmFnZXInKSxcbiAgICBBbHBoYU1hc2tGaWx0ZXIgPSByZXF1aXJlKCcuLi9maWx0ZXJzL1Nwcml0ZU1hc2tGaWx0ZXInKTtcblxuLyoqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcn0gVGhlIHJlbmRlcmVyIHRoaXMgbWFuYWdlciB3b3JrcyBmb3IuXG4gKi9cbmZ1bmN0aW9uIE1hc2tNYW5hZ2VyKHJlbmRlcmVyKVxue1xuICAgIFdlYkdMTWFuYWdlci5jYWxsKHRoaXMsIHJlbmRlcmVyKTtcblxuICAgIHRoaXMuc3RlbmNpbFN0YWNrID0gW107XG4gICAgdGhpcy5yZXZlcnNlID0gdHJ1ZTtcbiAgICB0aGlzLmNvdW50ID0gMDtcblxuICAgIHRoaXMuYWxwaGFNYXNrUG9vbCA9IFtdO1xufVxuXG5NYXNrTWFuYWdlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFdlYkdMTWFuYWdlci5wcm90b3R5cGUpO1xuTWFza01hbmFnZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gTWFza01hbmFnZXI7XG5tb2R1bGUuZXhwb3J0cyA9IE1hc2tNYW5hZ2VyO1xuXG4vKipcbiAqIEFwcGxpZXMgdGhlIE1hc2sgYW5kIGFkZHMgaXQgdG8gdGhlIGN1cnJlbnQgZmlsdGVyIHN0YWNrLlxuICpcbiAqIEBwYXJhbSBncmFwaGljcyB7UElYSS5HcmFwaGljc31cbiAqIEBwYXJhbSB3ZWJHTERhdGEge2FueVtdfVxuICovXG5NYXNrTWFuYWdlci5wcm90b3R5cGUucHVzaE1hc2sgPSBmdW5jdGlvbiAodGFyZ2V0LCBtYXNrRGF0YSlcbntcbiAgICBpZiAobWFza0RhdGEudGV4dHVyZSlcbiAgICB7XG4gICAgICAgIHRoaXMucHVzaFNwcml0ZU1hc2sodGFyZ2V0LCBtYXNrRGF0YSk7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHRoaXMucHVzaFN0ZW5jaWxNYXNrKHRhcmdldCwgbWFza0RhdGEpO1xuICAgIH1cblxufTtcblxuLyoqXG4gKiBSZW1vdmVzIHRoZSBsYXN0IG1hc2sgZnJvbSB0aGUgbWFzayBzdGFjayBhbmQgZG9lc24ndCByZXR1cm4gaXQuXG4gKlxuICogQHBhcmFtIHRhcmdldCB7UElYSS5SZW5kZXJUYXJnZXR9XG4gKiBAcGFyYW0gbWFza0RhdGEge2FueVtdfVxuICovXG5NYXNrTWFuYWdlci5wcm90b3R5cGUucG9wTWFzayA9IGZ1bmN0aW9uICh0YXJnZXQsIG1hc2tEYXRhKVxue1xuICAgIGlmIChtYXNrRGF0YS50ZXh0dXJlKVxuICAgIHtcbiAgICAgICAgdGhpcy5wb3BTcHJpdGVNYXNrKHRhcmdldCwgbWFza0RhdGEpO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICB0aGlzLnBvcFN0ZW5jaWxNYXNrKHRhcmdldCwgbWFza0RhdGEpO1xuICAgIH1cbn07XG5cbi8qKlxuICogQXBwbGllcyB0aGUgTWFzayBhbmQgYWRkcyBpdCB0byB0aGUgY3VycmVudCBmaWx0ZXIgc3RhY2suXG4gKlxuICogQHBhcmFtIHRhcmdldCB7UElYSS5SZW5kZXJUYXJnZXR9XG4gKiBAcGFyYW0gbWFza0RhdGEge2FueVtdfVxuICovXG5NYXNrTWFuYWdlci5wcm90b3R5cGUucHVzaFNwcml0ZU1hc2sgPSBmdW5jdGlvbiAodGFyZ2V0LCBtYXNrRGF0YSlcbntcbiAgICB2YXIgYWxwaGFNYXNrRmlsdGVyID0gdGhpcy5hbHBoYU1hc2tQb29sLnBvcCgpO1xuXG4gICAgaWYgKCFhbHBoYU1hc2tGaWx0ZXIpXG4gICAge1xuICAgICAgICBhbHBoYU1hc2tGaWx0ZXIgPSBbbmV3IEFscGhhTWFza0ZpbHRlcihtYXNrRGF0YSldO1xuICAgIH1cblxuICAgIGFscGhhTWFza0ZpbHRlclswXS5tYXNrU3ByaXRlID0gbWFza0RhdGE7XG4gICAgdGhpcy5yZW5kZXJlci5maWx0ZXJNYW5hZ2VyLnB1c2hGaWx0ZXIodGFyZ2V0LCBhbHBoYU1hc2tGaWx0ZXIpO1xufTtcblxuLyoqXG4gKiBSZW1vdmVzIHRoZSBsYXN0IGZpbHRlciBmcm9tIHRoZSBmaWx0ZXIgc3RhY2sgYW5kIGRvZXNuJ3QgcmV0dXJuIGl0LlxuICpcbiAqL1xuTWFza01hbmFnZXIucHJvdG90eXBlLnBvcFNwcml0ZU1hc2sgPSBmdW5jdGlvbiAoKVxue1xuICAgIHZhciBmaWx0ZXJzID0gdGhpcy5yZW5kZXJlci5maWx0ZXJNYW5hZ2VyLnBvcEZpbHRlcigpO1xuXG4gICAgdGhpcy5hbHBoYU1hc2tQb29sLnB1c2goZmlsdGVycyk7XG59O1xuXG5cbi8qKlxuICogQXBwbGllcyB0aGUgTWFzayBhbmQgYWRkcyBpdCB0byB0aGUgY3VycmVudCBmaWx0ZXIgc3RhY2suXG4gKlxuICogQHBhcmFtIHRhcmdldCB7UElYSS5SZW5kZXJUYXJnZXR9XG4gKiBAcGFyYW0gbWFza0RhdGEge2FueVtdfVxuICovXG5NYXNrTWFuYWdlci5wcm90b3R5cGUucHVzaFN0ZW5jaWxNYXNrID0gZnVuY3Rpb24gKHRhcmdldCwgbWFza0RhdGEpXG57XG4gICAgdGhpcy5yZW5kZXJlci5zdGVuY2lsTWFuYWdlci5wdXNoTWFzayhtYXNrRGF0YSk7XG59O1xuXG4vKipcbiAqIFJlbW92ZXMgdGhlIGxhc3QgZmlsdGVyIGZyb20gdGhlIGZpbHRlciBzdGFjayBhbmQgZG9lc24ndCByZXR1cm4gaXQuXG4gKlxuICogQHBhcmFtIHRhcmdldCB7UElYSS5SZW5kZXJUYXJnZXR9XG4gKiBAcGFyYW0gbWFza0RhdGEge2FueVtdfVxuICovXG5NYXNrTWFuYWdlci5wcm90b3R5cGUucG9wU3RlbmNpbE1hc2sgPSBmdW5jdGlvbiAodGFyZ2V0LCBtYXNrRGF0YSlcbntcbiAgICB0aGlzLnJlbmRlcmVyLnN0ZW5jaWxNYW5hZ2VyLnBvcE1hc2sobWFza0RhdGEpO1xufTtcblxuIiwidmFyIFdlYkdMTWFuYWdlciA9IHJlcXVpcmUoJy4vV2ViR0xNYW5hZ2VyJyksXG4gICAgVGV4dHVyZVNoYWRlciA9IHJlcXVpcmUoJy4uL3NoYWRlcnMvVGV4dHVyZVNoYWRlcicpLFxuICAgIENvbXBsZXhQcmltaXRpdmVTaGFkZXIgPSByZXF1aXJlKCcuLi9zaGFkZXJzL0NvbXBsZXhQcmltaXRpdmVTaGFkZXInKSxcbiAgICBQcmltaXRpdmVTaGFkZXIgPSByZXF1aXJlKCcuLi9zaGFkZXJzL1ByaW1pdGl2ZVNoYWRlcicpLFxuICAgIHV0aWxzID0gcmVxdWlyZSgnLi4vLi4vLi4vdXRpbHMnKTtcblxuLyoqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAZXh0ZW5kcyBQSVhJLldlYkdMTWFuYWdlclxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLldlYkdMUmVuZGVyZXJ9IFRoZSByZW5kZXJlciB0aGlzIG1hbmFnZXIgd29ya3MgZm9yLlxuICovXG5mdW5jdGlvbiBTaGFkZXJNYW5hZ2VyKHJlbmRlcmVyKVxue1xuICAgIFdlYkdMTWFuYWdlci5jYWxsKHRoaXMsIHJlbmRlcmVyKTtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLm1heEF0dGlicyA9IDEwO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7YW55W119XG4gICAgICovXG4gICAgdGhpcy5hdHRyaWJTdGF0ZSA9IFtdO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7YW55W119XG4gICAgICovXG4gICAgdGhpcy50ZW1wQXR0cmliU3RhdGUgPSBbXTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5tYXhBdHRpYnM7IGkrKylcbiAgICB7XG4gICAgICAgIHRoaXMuYXR0cmliU3RhdGVbaV0gPSBmYWxzZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHthbnlbXX1cbiAgICAgKi9cbiAgICB0aGlzLnN0YWNrID0gW107XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9jdXJyZW50SWQgPSAtMTtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge1BJWEkuU2hhZGVyfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5jdXJyZW50U2hhZGVyID0gbnVsbDtcblxuLy8gICAgdGhpcy5pbml0UGx1Z2lucygpO1xufVxuXG5TaGFkZXJNYW5hZ2VyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoV2ViR0xNYW5hZ2VyLnByb3RvdHlwZSk7XG5TaGFkZXJNYW5hZ2VyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFNoYWRlck1hbmFnZXI7XG51dGlscy5wbHVnaW5UYXJnZXQubWl4aW4oU2hhZGVyTWFuYWdlcik7XG5cbm1vZHVsZS5leHBvcnRzID0gU2hhZGVyTWFuYWdlcjtcblxuLyoqXG4gKiBDYWxsZWQgd2hlbiB0aGVyZSBpcyBhIFdlYkdMIGNvbnRleHQgY2hhbmdlLlxuICpcbiAqL1xuU2hhZGVyTWFuYWdlci5wcm90b3R5cGUub25Db250ZXh0Q2hhbmdlID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLmluaXRQbHVnaW5zKCk7XG5cbiAgICB2YXIgZ2wgPSB0aGlzLnJlbmRlcmVyLmdsO1xuXG4gICAgLy8gZ2V0IHRoZSBtYXhpbXVtIG51bWJlciBvZiBhdHRyaWJ1dGUgY29ycmVjdGx5IGFzIHRoaXMgdGVuZHMgdG8gdmFyeVxuICAgIHRoaXMubWF4QXR0aWJzID0gZ2wuZ2V0UGFyYW1ldGVyKGdsLk1BWF9WRVJURVhfQVRUUklCUyk7XG5cbiAgICB0aGlzLmF0dHJpYlN0YXRlID0gW107XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMubWF4QXR0aWJzOyBpKyspXG4gICAge1xuICAgICAgICB0aGlzLmF0dHJpYlN0YXRlW2ldID0gZmFsc2U7XG4gICAgfVxuXG4gICAgLy8gVE9ETyAtIFdoeSBhcmUgdGhlc2Ugbm90IHBsdWdpbnM/IFdlIGNhbid0IGRlY291cGxlIHByaW1pdGl2ZXMgdW5sZXNzIHRoZXkgYXJlLi4uLlxuICAgIHRoaXMuZGVmYXVsdFNoYWRlciA9IG5ldyBUZXh0dXJlU2hhZGVyKHRoaXMpO1xuICAgIHRoaXMucHJpbWl0aXZlU2hhZGVyID0gbmV3IFByaW1pdGl2ZVNoYWRlcih0aGlzKTtcbiAgICB0aGlzLmNvbXBsZXhQcmltaXRpdmVTaGFkZXIgPSBuZXcgQ29tcGxleFByaW1pdGl2ZVNoYWRlcih0aGlzKTtcbn07XG5cbi8qKlxuICogVGFrZXMgdGhlIGF0dHJpYnV0ZXMgZ2l2ZW4gaW4gcGFyYW1ldGVycyBhbmQgdXBsb2FkcyB0aGVtLlxuICpcbiAqIEBwYXJhbSBhdHRyaWJzIHthbnlbXX0gYXR0cmlic1xuICovXG5TaGFkZXJNYW5hZ2VyLnByb3RvdHlwZS5zZXRBdHRyaWJzID0gZnVuY3Rpb24gKGF0dHJpYnMpXG57XG4gICAgLy8gcmVzZXQgdGVtcCBzdGF0ZVxuICAgIHZhciBpO1xuXG4gICAgZm9yIChpID0gMDsgaSA8IHRoaXMudGVtcEF0dHJpYlN0YXRlLmxlbmd0aDsgaSsrKVxuICAgIHtcbiAgICAgICAgdGhpcy50ZW1wQXR0cmliU3RhdGVbaV0gPSBmYWxzZTtcbiAgICB9XG5cbiAgICAvLyBzZXQgdGhlIG5ldyBhdHRyaWJzXG4gICAgZm9yICh2YXIgYSBpbiBhdHRyaWJzKVxuICAgIHtcbiAgICAgICAgdGhpcy50ZW1wQXR0cmliU3RhdGVbYXR0cmlic1thXV0gPSB0cnVlO1xuICAgIH1cblxuICAgIHZhciBnbCA9IHRoaXMucmVuZGVyZXIuZ2w7XG5cbiAgICBmb3IgKGkgPSAwOyBpIDwgdGhpcy5hdHRyaWJTdGF0ZS5sZW5ndGg7IGkrKylcbiAgICB7XG4gICAgICAgIGlmICh0aGlzLmF0dHJpYlN0YXRlW2ldICE9PSB0aGlzLnRlbXBBdHRyaWJTdGF0ZVtpXSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5hdHRyaWJTdGF0ZVtpXSA9IHRoaXMudGVtcEF0dHJpYlN0YXRlW2ldO1xuXG4gICAgICAgICAgICBpZiAodGhpcy5hdHRyaWJTdGF0ZVtpXSlcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBnbC5lbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBnbC5kaXNhYmxlVmVydGV4QXR0cmliQXJyYXkoaSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG59O1xuXG4vKipcbiAqIFNldHMgdGhlIGN1cnJlbnQgc2hhZGVyLlxuICpcbiAqIEBwYXJhbSBzaGFkZXIge1BJWEkuU2hhZGVyfSB0aGUgc2hhZGVyIHRvIHVwbG9hZFxuICovXG5TaGFkZXJNYW5hZ2VyLnByb3RvdHlwZS5zZXRTaGFkZXIgPSBmdW5jdGlvbiAoc2hhZGVyKVxue1xuICAgIHJldHVybjtcbiAgICBpZiAodGhpcy5fY3VycmVudElkID09PSBzaGFkZXIudWlkKVxuICAgIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHRoaXMuX2N1cnJlbnRJZCA9IHNoYWRlci51aWQ7XG5cbiAgICB0aGlzLmN1cnJlbnRTaGFkZXIgPSBzaGFkZXI7XG5cbiAgICB0aGlzLnJlbmRlcmVyLmdsLnVzZVByb2dyYW0oc2hhZGVyLnByb2dyYW0pO1xuICAgIHRoaXMuc2V0QXR0cmlicyhzaGFkZXIuYXR0cmlidXRlcyk7XG5cbiAgICByZXR1cm4gdHJ1ZTtcbn07XG5cbi8qKlxuICogRGVzdHJveXMgdGhpcyBvYmplY3QuXG4gKlxuICovXG5TaGFkZXJNYW5hZ2VyLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLnByaW1pdGl2ZVNoYWRlci5kZXN0cm95KCk7XG4gICAgdGhpcy5jb21wbGV4UHJpbWl0aXZlU2hhZGVyLmRlc3Ryb3koKTtcbiAgICBXZWJHTE1hbmFnZXIucHJvdG90eXBlLmRlc3Ryb3kuY2FsbCh0aGlzKTtcblxuICAgIHRoaXMuZGVzdHJveVBsdWdpbnMoKTtcblxuICAgIHRoaXMuYXR0cmliU3RhdGUgPSBudWxsO1xuXG4gICAgdGhpcy50ZW1wQXR0cmliU3RhdGUgPSBudWxsO1xufTtcbiIsInZhciBXZWJHTE1hbmFnZXIgPSByZXF1aXJlKCcuL1dlYkdMTWFuYWdlcicpLFxuICAgIHV0aWxzID0gcmVxdWlyZSgnLi4vLi4vLi4vdXRpbHMnKTtcblxuLyoqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcn0gVGhlIHJlbmRlcmVyIHRoaXMgbWFuYWdlciB3b3JrcyBmb3IuXG4gKi9cbmZ1bmN0aW9uIFdlYkdMTWFza01hbmFnZXIocmVuZGVyZXIpXG57XG4gICAgV2ViR0xNYW5hZ2VyLmNhbGwodGhpcywgcmVuZGVyZXIpO1xuICAgIHRoaXMuc3RlbmNpbE1hc2tTdGFjayA9IG51bGw7XG59XG5cbldlYkdMTWFza01hbmFnZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShXZWJHTE1hbmFnZXIucHJvdG90eXBlKTtcbldlYkdMTWFza01hbmFnZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gV2ViR0xNYXNrTWFuYWdlcjtcbm1vZHVsZS5leHBvcnRzID0gV2ViR0xNYXNrTWFuYWdlcjtcblxuLyoqXG4gKiBDaGFuZ2VzIHRoZSBtYXNrIHN0YWNrIHRoYXQgaXMgdXNlZCBieSB0aGlzIG1hbmFnZXIuXG4gKlxuICogQHBhcmFtIHN0ZW5jaWxNYXNrU3RhY2sge1BJWEkuU3RlbmNpbE1hc2tTdGFja30gVGhlIG1hc2sgc3RhY2tcbiAqL1xuV2ViR0xNYXNrTWFuYWdlci5wcm90b3R5cGUuc2V0TWFza1N0YWNrID0gZnVuY3Rpb24gKCBzdGVuY2lsTWFza1N0YWNrIClcbntcbiAgICB0aGlzLnN0ZW5jaWxNYXNrU3RhY2sgPSBzdGVuY2lsTWFza1N0YWNrO1xuXG4gICAgdmFyIGdsID0gdGhpcy5yZW5kZXJlci5nbDtcblxuICAgIGlmIChzdGVuY2lsTWFza1N0YWNrLnN0ZW5jaWxTdGFjay5sZW5ndGggPT09IDApXG4gICAge1xuICAgICAgICBnbC5kaXNhYmxlKGdsLlNURU5DSUxfVEVTVCk7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIGdsLmVuYWJsZShnbC5TVEVOQ0lMX1RFU1QpO1xuICAgIH1cbn07XG5cbi8qKlxuICogQXBwbGllcyB0aGUgTWFzayBhbmQgYWRkcyBpdCB0byB0aGUgY3VycmVudCBmaWx0ZXIgc3RhY2suIEBhbHZpblxuICpcbiAqIEBwYXJhbSBncmFwaGljcyB7UElYSS5HcmFwaGljc31cbiAqIEBwYXJhbSB3ZWJHTERhdGEge2FueVtdfVxuICovXG5XZWJHTE1hc2tNYW5hZ2VyLnByb3RvdHlwZS5wdXNoU3RlbmNpbCA9IGZ1bmN0aW9uIChncmFwaGljcywgd2ViR0xEYXRhKVxue1xuICAgIHRoaXMucmVuZGVyZXIuX2FjdGl2ZVJlbmRlclRhcmdldC5hdHRhY2hTdGVuY2lsQnVmZmVyKCk7XG5cbiAgICB2YXIgZ2wgPSB0aGlzLnJlbmRlcmVyLmdsLFxuICAgICAgICBzbXMgPSB0aGlzLnN0ZW5jaWxNYXNrU3RhY2s7XG5cbiAgICB0aGlzLmJpbmRHcmFwaGljcyhncmFwaGljcywgd2ViR0xEYXRhKTtcblxuICAgIGlmIChzbXMuc3RlbmNpbFN0YWNrLmxlbmd0aCA9PT0gMClcbiAgICB7XG4gICAgICAgIGdsLmVuYWJsZShnbC5TVEVOQ0lMX1RFU1QpO1xuICAgICAgICBnbC5jbGVhcihnbC5TVEVOQ0lMX0JVRkZFUl9CSVQpO1xuICAgICAgICBzbXMucmV2ZXJzZSA9IHRydWU7XG4gICAgICAgIHNtcy5jb3VudCA9IDA7XG4gICAgfVxuXG4gICAgc21zLnN0ZW5jaWxTdGFjay5wdXNoKHdlYkdMRGF0YSk7XG5cbiAgICB2YXIgbGV2ZWwgPSBzbXMuY291bnQ7XG5cbiAgICBnbC5jb2xvck1hc2soZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UpO1xuXG4gICAgZ2wuc3RlbmNpbEZ1bmMoZ2wuQUxXQVlTLDAsMHhGRik7XG4gICAgZ2wuc3RlbmNpbE9wKGdsLktFRVAsZ2wuS0VFUCxnbC5JTlZFUlQpO1xuXG4gICAgLy8gZHJhdyB0aGUgdHJpYW5nbGUgc3RyaXAhXG5cbiAgICBpZiAod2ViR0xEYXRhLm1vZGUgPT09IDEpXG4gICAge1xuICAgICAgICBnbC5kcmF3RWxlbWVudHMoZ2wuVFJJQU5HTEVfRkFOLCAgd2ViR0xEYXRhLmluZGljZXMubGVuZ3RoIC0gNCwgZ2wuVU5TSUdORURfU0hPUlQsIDAgKTtcblxuICAgICAgICBpZiAoc21zLnJldmVyc2UpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGdsLnN0ZW5jaWxGdW5jKGdsLkVRVUFMLCAweEZGIC0gbGV2ZWwsIDB4RkYpO1xuICAgICAgICAgICAgZ2wuc3RlbmNpbE9wKGdsLktFRVAsZ2wuS0VFUCxnbC5ERUNSKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgIHtcbiAgICAgICAgICAgIGdsLnN0ZW5jaWxGdW5jKGdsLkVRVUFMLGxldmVsLCAweEZGKTtcbiAgICAgICAgICAgIGdsLnN0ZW5jaWxPcChnbC5LRUVQLGdsLktFRVAsZ2wuSU5DUik7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBkcmF3IGEgcXVhZCB0byBpbmNyZW1lbnQuLlxuICAgICAgICBnbC5kcmF3RWxlbWVudHMoZ2wuVFJJQU5HTEVfRkFOLCA0LCBnbC5VTlNJR05FRF9TSE9SVCwgKCB3ZWJHTERhdGEuaW5kaWNlcy5sZW5ndGggLSA0ICkgKiAyICk7XG5cbiAgICAgICAgaWYgKHNtcy5yZXZlcnNlKVxuICAgICAgICB7XG4gICAgICAgICAgICBnbC5zdGVuY2lsRnVuYyhnbC5FUVVBTCwweEZGLShsZXZlbCsxKSwgMHhGRik7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgICBnbC5zdGVuY2lsRnVuYyhnbC5FUVVBTCxsZXZlbCsxLCAweEZGKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHNtcy5yZXZlcnNlID0gIXNtcy5yZXZlcnNlO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICBpZiAoIXNtcy5yZXZlcnNlKVxuICAgICAgICB7XG4gICAgICAgICAgICBnbC5zdGVuY2lsRnVuYyhnbC5FUVVBTCwgMHhGRiAtIGxldmVsLCAweEZGKTtcbiAgICAgICAgICAgIGdsLnN0ZW5jaWxPcChnbC5LRUVQLGdsLktFRVAsZ2wuREVDUik7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgICBnbC5zdGVuY2lsRnVuYyhnbC5FUVVBTCxsZXZlbCwgMHhGRik7XG4gICAgICAgICAgICBnbC5zdGVuY2lsT3AoZ2wuS0VFUCxnbC5LRUVQLGdsLklOQ1IpO1xuICAgICAgICB9XG5cbiAgICAgICAgZ2wuZHJhd0VsZW1lbnRzKGdsLlRSSUFOR0xFX1NUUklQLCAgd2ViR0xEYXRhLmluZGljZXMubGVuZ3RoLCBnbC5VTlNJR05FRF9TSE9SVCwgMCApO1xuXG4gICAgICAgIGlmICghc21zLnJldmVyc2UpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGdsLnN0ZW5jaWxGdW5jKGdsLkVRVUFMLDB4RkYtKGxldmVsKzEpLCAweEZGKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgIHtcbiAgICAgICAgICAgIGdsLnN0ZW5jaWxGdW5jKGdsLkVRVUFMLGxldmVsKzEsIDB4RkYpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZ2wuY29sb3JNYXNrKHRydWUsIHRydWUsIHRydWUsIHRydWUpO1xuICAgIGdsLnN0ZW5jaWxPcChnbC5LRUVQLGdsLktFRVAsZ2wuS0VFUCk7XG5cbiAgICBzbXMuY291bnQrKztcbn07XG5cbi8qKlxuICogVE9ETyB0aGlzIGRvZXMgbm90IGJlbG9uZyBoZXJlIVxuICpcbiAqIEBwYXJhbSBncmFwaGljcyB7UElYSS5HcmFwaGljc31cbiAqIEBwYXJhbSB3ZWJHTERhdGEge2FueVtdfVxuICovXG5XZWJHTE1hc2tNYW5hZ2VyLnByb3RvdHlwZS5iaW5kR3JhcGhpY3MgPSBmdW5jdGlvbiAoZ3JhcGhpY3MsIHdlYkdMRGF0YSlcbntcbiAgICAvL2lmICh0aGlzLl9jdXJyZW50R3JhcGhpY3MgPT09IGdyYXBoaWNzKXJldHVybjtcbiAgICB2YXIgZ2wgPSB0aGlzLnJlbmRlcmVyLmdsO1xuXG4gICAgIC8vIGJpbmQgdGhlIGdyYXBoaWNzIG9iamVjdC4uXG4gICAgdmFyIHNoYWRlciA9IHRoaXMucmVuZGVyZXIucGx1Z2lucy5ncmFwaGljcy5wcmltaXRpdmVTaGFkZXI7XG5cbiAgICBpZiAod2ViR0xEYXRhLm1vZGUgPT09IDEpXG4gICAge1xuICAgICAgICAvKlxuICAgICAgICBzaGFkZXIgPSB0aGlzLnJlbmRlcmVyLnNoYWRlck1hbmFnZXIuY29tcGxleFByaW1pdGl2ZVNoYWRlcjtcblxuICAgICAgICB0aGlzLnJlbmRlcmVyLnNoYWRlck1hbmFnZXIuc2V0U2hhZGVyKHNoYWRlcik7XG5cbiAgICAgICAgZ2wudW5pZm9ybU1hdHJpeDNmdihzaGFkZXIudW5pZm9ybXMudHJhbnNsYXRpb25NYXRyaXguX2xvY2F0aW9uLCBmYWxzZSwgZ3JhcGhpY3Mud29ybGRUcmFuc2Zvcm0udG9BcnJheSh0cnVlKSk7XG5cbiAgICAgICAgZ2wudW5pZm9ybU1hdHJpeDNmdihzaGFkZXIudW5pZm9ybXMucHJvamVjdGlvbk1hdHJpeC5fbG9jYXRpb24sIGZhbHNlLCB0aGlzLnJlbmRlcmVyLmN1cnJlbnRSZW5kZXJUYXJnZXQucHJvamVjdGlvbk1hdHJpeC50b0FycmF5KHRydWUpKTtcblxuICAgICAgICBnbC51bmlmb3JtM2Z2KHNoYWRlci51bmlmb3Jtcy50aW50Ll9sb2NhdGlvbiwgdXRpbHMuaGV4MnJnYihncmFwaGljcy50aW50KSk7XG5cbiAgICAgICAgZ2wudW5pZm9ybTNmdihzaGFkZXIudW5pZm9ybXMuY29sb3IuX2xvY2F0aW9uLCB3ZWJHTERhdGEuY29sb3IpO1xuXG4gICAgICAgIGdsLnVuaWZvcm0xZihzaGFkZXIudW5pZm9ybXMuYWxwaGEuX2xvY2F0aW9uLCBncmFwaGljcy53b3JsZEFscGhhKTtcblxuICAgICAgICBnbC5iaW5kQnVmZmVyKGdsLkFSUkFZX0JVRkZFUiwgd2ViR0xEYXRhLmJ1ZmZlcik7XG5cbiAgICAgICAgZ2wudmVydGV4QXR0cmliUG9pbnRlcihzaGFkZXIuYXR0cmlidXRlcy5hVmVydGV4UG9zaXRpb24sIDIsIGdsLkZMT0FULCBmYWxzZSwgNCAqIDIsIDApO1xuXG4gICAgICAgIC8vIG5vdyBkbyB0aGUgcmVzdC4uXG4gICAgICAgIC8vIHNldCB0aGUgaW5kZXggYnVmZmVyIVxuICAgICAgICBnbC5iaW5kQnVmZmVyKGdsLkVMRU1FTlRfQVJSQVlfQlVGRkVSLCB3ZWJHTERhdGEuaW5kZXhCdWZmZXIpO1xuICAgICovXG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIC8vdGhpcy5yZW5kZXJlci5zaGFkZXJNYW5hZ2VyLmFjdGl2YXRlUHJpbWl0aXZlU2hhZGVyKCk7XG4vLyAgICAgICAgc2hhZGVyID0gdGhpcy5yZW5kZXJlci5zaGFkZXJNYW5hZ2VyLnByaW1pdGl2ZVNoYWRlcjtcbiAgICAgICBcbiAgICAgICAgdGhpcy5yZW5kZXJlci5iaW5kU2hhZGVyKHNoYWRlcilcblxuICAgICAgICBzaGFkZXIudW5pZm9ybXMudHJhbnNsYXRpb25NYXRyaXggPSBncmFwaGljcy53b3JsZFRyYW5zZm9ybS50b0FycmF5KHRydWUpO1xuICAgICAgICBzaGFkZXIudW5pZm9ybXMudGludCA9IHV0aWxzLmhleDJyZ2IoZ3JhcGhpY3MudGludCk7XG4gICAgICAgIHNoYWRlci51bmlmb3Jtcy5hbHBoYSA9IGdyYXBoaWNzLndvcmxkQWxwaGE7XG5cblxuICAgICAgICBnbC5iaW5kQnVmZmVyKGdsLkFSUkFZX0JVRkZFUiwgd2ViR0xEYXRhLmJ1ZmZlcik7XG5cblxuICAgICAgICBzaGFkZXIuYXR0cmlidXRlcy5hVmVydGV4UG9zaXRpb24ucG9pbnRlcihnbC5GTE9BVCwgZmFsc2UsIDQgKiA2LCAwKTtcbiAgICAgICAgc2hhZGVyLmF0dHJpYnV0ZXMuYUNvbG9yLnBvaW50ZXIoZ2wuRkxPQVQsIGZhbHNlLCA0ICogNiwgMiAqIDQpO1xuXG4gICAgICAgIGdsLmVuYWJsZVZlcnRleEF0dHJpYkFycmF5KHNoYWRlci5hdHRyaWJ1dGVzLmFWZXJ0ZXhQb3NpdGlvbi5sb2NhdGlvbik7XG4gICAgICAgIGdsLmVuYWJsZVZlcnRleEF0dHJpYkFycmF5KHNoYWRlci5hdHRyaWJ1dGVzLmFDb2xvci5sb2NhdGlvbik7XG5cbiAgICAgICAgLy8gc2V0IHRoZSBpbmRleCBidWZmZXIhXG4gICAgICAgIGdsLmJpbmRCdWZmZXIoZ2wuRUxFTUVOVF9BUlJBWV9CVUZGRVIsIHdlYkdMRGF0YS5pbmRleEJ1ZmZlcik7XG4vLyAgICAgICAgZ2wuZHJhd0VsZW1lbnRzKGdsLlRSSUFOR0xFX1NUUklQLCAgd2ViR0xEYXRhLmluZGljZXMubGVuZ3RoLCBnbC5VTlNJR05FRF9TSE9SVCwgMCApO1xuXG5cbiAgICAgIC8qICB0aGlzLnJlbmRlcmVyLnNoYWRlck1hbmFnZXIuc2V0U2hhZGVyKHNoYWRlcik7XG5cbiAgICAgICAgZ2wudW5pZm9ybU1hdHJpeDNmdihzaGFkZXIudW5pZm9ybXMudHJhbnNsYXRpb25NYXRyaXguX2xvY2F0aW9uLCBmYWxzZSwgZ3JhcGhpY3Mud29ybGRUcmFuc2Zvcm0udG9BcnJheSh0cnVlKSk7XG5cbiAgICAgICAgZ2wudW5pZm9ybU1hdHJpeDNmdihzaGFkZXIudW5pZm9ybXMucHJvamVjdGlvbk1hdHJpeC5fbG9jYXRpb24sIGZhbHNlLCB0aGlzLnJlbmRlcmVyLmN1cnJlbnRSZW5kZXJUYXJnZXQucHJvamVjdGlvbk1hdHJpeC50b0FycmF5KHRydWUpKTtcblxuICAgICAgICBnbC51bmlmb3JtM2Z2KHNoYWRlci51bmlmb3Jtcy50aW50Ll9sb2NhdGlvbiwgdXRpbHMuaGV4MnJnYihncmFwaGljcy50aW50KSk7XG5cbiAgICAgICAgZ2wudW5pZm9ybTFmKHNoYWRlci51bmlmb3Jtcy5hbHBoYS5fbG9jYXRpb24sIGdyYXBoaWNzLndvcmxkQWxwaGEpO1xuXG4gICAgICAgIGdsLmJpbmRCdWZmZXIoZ2wuQVJSQVlfQlVGRkVSLCB3ZWJHTERhdGEuYnVmZmVyKTtcblxuICAgICAgICBnbC52ZXJ0ZXhBdHRyaWJQb2ludGVyKHNoYWRlci5hdHRyaWJ1dGVzLmFWZXJ0ZXhQb3NpdGlvbiwgMiwgZ2wuRkxPQVQsIGZhbHNlLCA0ICogNiwgMCk7XG4gICAgICAgIGdsLnZlcnRleEF0dHJpYlBvaW50ZXIoc2hhZGVyLmF0dHJpYnV0ZXMuYUNvbG9yLCA0LCBnbC5GTE9BVCwgZmFsc2UsNCAqIDYsIDIgKiA0KTtcblxuICAgICAgICAvLyBzZXQgdGhlIGluZGV4IGJ1ZmZlciFcbiAgICAgICAgZ2wuYmluZEJ1ZmZlcihnbC5FTEVNRU5UX0FSUkFZX0JVRkZFUiwgd2ViR0xEYXRhLmluZGV4QnVmZmVyKTsqL1xuICAgIH1cbn07XG5cbi8qKlxuICogVE9ETyBAYWx2aW5cbiAqIEBwYXJhbSBncmFwaGljcyB7UElYSS5HcmFwaGljc31cbiAqIEBwYXJhbSB3ZWJHTERhdGEge2FueVtdfVxuICovXG5XZWJHTE1hc2tNYW5hZ2VyLnByb3RvdHlwZS5wb3BTdGVuY2lsID0gZnVuY3Rpb24gKGdyYXBoaWNzLCB3ZWJHTERhdGEpXG57XG4gICAgdmFyIGdsID0gdGhpcy5yZW5kZXJlci5nbCxcbiAgICAgICAgc21zID0gdGhpcy5zdGVuY2lsTWFza1N0YWNrO1xuXG4gICAgc21zLnN0ZW5jaWxTdGFjay5wb3AoKTtcblxuICAgIHNtcy5jb3VudC0tO1xuXG4gICAgaWYgKHNtcy5zdGVuY2lsU3RhY2subGVuZ3RoID09PSAwKVxuICAgIHtcbiAgICAgICAgLy8gdGhlIHN0YWNrIGlzIGVtcHR5IVxuICAgICAgICBnbC5kaXNhYmxlKGdsLlNURU5DSUxfVEVTVCk7XG5cbiAgICB9XG4gICAgZWxzZVxuICAgIHtcblxuICAgICAgICB2YXIgbGV2ZWwgPSBzbXMuY291bnQ7XG5cbiAgICAgICAgdGhpcy5iaW5kR3JhcGhpY3MoZ3JhcGhpY3MsIHdlYkdMRGF0YSk7XG5cbiAgICAgICAgZ2wuY29sb3JNYXNrKGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlKTtcblxuICAgICAgICBpZiAod2ViR0xEYXRhLm1vZGUgPT09IDEpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHNtcy5yZXZlcnNlID0gIXNtcy5yZXZlcnNlO1xuXG4gICAgICAgICAgICBpZiAoc21zLnJldmVyc2UpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgZ2wuc3RlbmNpbEZ1bmMoZ2wuRVFVQUwsIDB4RkYgLSAobGV2ZWwrMSksIDB4RkYpO1xuICAgICAgICAgICAgICAgIGdsLnN0ZW5jaWxPcChnbC5LRUVQLGdsLktFRVAsZ2wuSU5DUik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgZ2wuc3RlbmNpbEZ1bmMoZ2wuRVFVQUwsbGV2ZWwrMSwgMHhGRik7XG4gICAgICAgICAgICAgICAgZ2wuc3RlbmNpbE9wKGdsLktFRVAsZ2wuS0VFUCxnbC5ERUNSKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gZHJhdyBhIHF1YWQgdG8gaW5jcmVtZW50Li5cbiAgICAgICAgICAgIGdsLmRyYXdFbGVtZW50cyhnbC5UUklBTkdMRV9GQU4sIDQsIGdsLlVOU0lHTkVEX1NIT1JULCAoIHdlYkdMRGF0YS5pbmRpY2VzLmxlbmd0aCAtIDQgKSAqIDIgKTtcblxuICAgICAgICAgICAgZ2wuc3RlbmNpbEZ1bmMoZ2wuQUxXQVlTLDAsMHhGRik7XG4gICAgICAgICAgICBnbC5zdGVuY2lsT3AoZ2wuS0VFUCxnbC5LRUVQLGdsLklOVkVSVCk7XG5cbiAgICAgICAgICAgIC8vIGRyYXcgdGhlIHRyaWFuZ2xlIHN0cmlwIVxuICAgICAgICAgICAgZ2wuZHJhd0VsZW1lbnRzKGdsLlRSSUFOR0xFX0ZBTiwgIHdlYkdMRGF0YS5pbmRpY2VzLmxlbmd0aCAtIDQsIGdsLlVOU0lHTkVEX1NIT1JULCAwICk7XG5cbiAgICAgICAgICAgIHRoaXMucmVuZGVyZXIuZHJhd0NvdW50ICs9IDI7XG5cbiAgICAgICAgICAgIGlmICghc21zLnJldmVyc2UpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgZ2wuc3RlbmNpbEZ1bmMoZ2wuRVFVQUwsMHhGRi0obGV2ZWwpLCAweEZGKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBnbC5zdGVuY2lsRnVuYyhnbC5FUVVBTCxsZXZlbCwgMHhGRik7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgIHtcbiAgICAgICAgICAvLyAgY29uc29sZS5sb2coXCI8PD4+XCIpXG4gICAgICAgICAgICBpZiAoIXNtcy5yZXZlcnNlKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGdsLnN0ZW5jaWxGdW5jKGdsLkVRVUFMLCAweEZGIC0gKGxldmVsKzEpLCAweEZGKTtcbiAgICAgICAgICAgICAgICBnbC5zdGVuY2lsT3AoZ2wuS0VFUCxnbC5LRUVQLGdsLklOQ1IpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGdsLnN0ZW5jaWxGdW5jKGdsLkVRVUFMLGxldmVsKzEsIDB4RkYpO1xuICAgICAgICAgICAgICAgIGdsLnN0ZW5jaWxPcChnbC5LRUVQLGdsLktFRVAsZ2wuREVDUik7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGdsLmRyYXdFbGVtZW50cyhnbC5UUklBTkdMRV9TVFJJUCwgIHdlYkdMRGF0YS5pbmRpY2VzLmxlbmd0aCwgZ2wuVU5TSUdORURfU0hPUlQsIDAgKTtcblxuICAgICAgICAgICAgdGhpcy5yZW5kZXJlci5kcmF3Q291bnQrKztcblxuICAgICAgICAgICAgaWYgKCFzbXMucmV2ZXJzZSlcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBnbC5zdGVuY2lsRnVuYyhnbC5FUVVBTCwweEZGLShsZXZlbCksIDB4RkYpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGdsLnN0ZW5jaWxGdW5jKGdsLkVRVUFMLGxldmVsLCAweEZGKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGdsLmNvbG9yTWFzayh0cnVlLCB0cnVlLCB0cnVlLCB0cnVlKTtcbiAgICAgICAgZ2wuc3RlbmNpbE9wKGdsLktFRVAsZ2wuS0VFUCxnbC5LRUVQKTtcblxuXG4gICAgfVxufTtcblxuLyoqXG4gKiBEZXN0cm95cyB0aGUgbWFzayBzdGFjay5cbiAqXG4gKi9cbldlYkdMTWFza01hbmFnZXIucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoKVxue1xuICAgIFdlYkdMTWFuYWdlci5wcm90b3R5cGUuZGVzdHJveS5jYWxsKHRoaXMpO1xuXG4gICAgdGhpcy5zdGVuY2lsTWFza1N0YWNrLnN0ZW5jaWxTdGFjayA9IG51bGw7XG59O1xuXG4vKipcbiAqIEFwcGxpZXMgdGhlIE1hc2sgYW5kIGFkZHMgaXQgdG8gdGhlIGN1cnJlbnQgZmlsdGVyIHN0YWNrLlxuICpcbiAqIEBwYXJhbSBtYXNrRGF0YSB7YW55W119IFRoZSBtYXNrIGRhdGEgc3RydWN0dXJlIHRvIHVzZVxuICovXG5XZWJHTE1hc2tNYW5hZ2VyLnByb3RvdHlwZS5wdXNoTWFzayA9IGZ1bmN0aW9uIChtYXNrRGF0YSlcbntcbiAgICB0aGlzLnJlbmRlcmVyLnNldE9iamVjdFJlbmRlcmVyKHRoaXMucmVuZGVyZXIucGx1Z2lucy5ncmFwaGljcyk7XG4gICAgXG4gICAgLy9UT0RPIEZJWFxuICAgIGlmIChtYXNrRGF0YS5kaXJ0eSlcbiAgICB7XG4gICAgICAgIHRoaXMucmVuZGVyZXIucGx1Z2lucy5ncmFwaGljcy51cGRhdGVHcmFwaGljcyhtYXNrRGF0YSwgdGhpcy5yZW5kZXJlci5nbCk7XG4gICAgfVxuXG4gICAgaWYgKCFtYXNrRGF0YS5fd2ViR0xbdGhpcy5yZW5kZXJlci5nbC5pZF0uZGF0YS5sZW5ndGgpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5wdXNoU3RlbmNpbChtYXNrRGF0YSwgbWFza0RhdGEuX3dlYkdMW3RoaXMucmVuZGVyZXIuZ2wuaWRdLmRhdGFbMF0pO1xufTtcblxuLyoqXG4gKiBSZW1vdmVzIHRoZSBsYXN0IGZpbHRlciBmcm9tIHRoZSBmaWx0ZXIgc3RhY2sgYW5kIGRvZXNuJ3QgcmV0dXJuIGl0LlxuICpcbiAqIEBwYXJhbSBtYXNrRGF0YSB7YW55W119XG4gKi9cbldlYkdMTWFza01hbmFnZXIucHJvdG90eXBlLnBvcE1hc2sgPSBmdW5jdGlvbiAobWFza0RhdGEpXG57XG4gICAgdGhpcy5yZW5kZXJlci5zZXRPYmplY3RSZW5kZXJlcih0aGlzLnJlbmRlcmVyLnBsdWdpbnMuZ3JhcGhpY3MpO1xuXG4gICAgdGhpcy5wb3BTdGVuY2lsKG1hc2tEYXRhLCBtYXNrRGF0YS5fd2ViR0xbdGhpcy5yZW5kZXJlci5nbC5pZF0uZGF0YVswXSk7XG59O1xuXG4iLCIvKipcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5XZWJHTFJlbmRlcmVyfSBUaGUgcmVuZGVyZXIgdGhpcyBtYW5hZ2VyIHdvcmtzIGZvci5cbiAqL1xuZnVuY3Rpb24gV2ViR0xNYW5hZ2VyKHJlbmRlcmVyKVxue1xuICAgIC8qKlxuICAgICAqIFRoZSByZW5kZXJlciB0aGlzIG1hbmFnZXIgd29ya3MgZm9yLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5XZWJHTFJlbmRlcmVyfVxuICAgICAqL1xuICAgIHRoaXMucmVuZGVyZXIgPSByZW5kZXJlcjtcblxuICAgIHRoaXMucmVuZGVyZXIub24oJ2NvbnRleHQnLCB0aGlzLm9uQ29udGV4dENoYW5nZSwgdGhpcyk7XG59XG5cbldlYkdMTWFuYWdlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBXZWJHTE1hbmFnZXI7XG5tb2R1bGUuZXhwb3J0cyA9IFdlYkdMTWFuYWdlcjtcblxuLyoqXG4gKiBHZW5lcmljIG1ldGhvZCBjYWxsZWQgd2hlbiB0aGVyZSBpcyBhIFdlYkdMIGNvbnRleHQgY2hhbmdlLlxuICpcbiAqL1xuV2ViR0xNYW5hZ2VyLnByb3RvdHlwZS5vbkNvbnRleHRDaGFuZ2UgPSBmdW5jdGlvbiAoKVxue1xuXHQvLyBkbyBzb21lIGNvZGVzIGluaXQhXG59O1xuXG4vKipcbiAqIEdlbmVyaWMgZGVzdHJveSBtZXRob2RzIHRvIGJlIG92ZXJyaWRkZW4gYnkgdGhlIHN1YmNsYXNzXG4gKlxuICovXG5XZWJHTE1hbmFnZXIucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoKVxue1xuICAgIHRoaXMucmVuZGVyZXIub2ZmKCdjb250ZXh0JywgdGhpcy5vbkNvbnRleHRDaGFuZ2UsIHRoaXMpO1xuXG4gICAgdGhpcy5yZW5kZXJlciA9IG51bGw7XG59O1xuIiwidmFyIFNoYWRlciA9IHJlcXVpcmUoJy4vU2hhZGVyJyk7XG5cbi8qKlxuICogVGhpcyBzaGFkZXIgaXMgdXNlZCB0byBkcmF3IGNvbXBsZXggcHJpbWl0aXZlIHNoYXBlcyBmb3Ige0BsaW5rIFBJWEkuR3JhcGhpY3N9LlxuICpcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqIEBleHRlbmRzIFBJWEkuU2hhZGVyXG4gKiBAcGFyYW0gc2hhZGVyTWFuYWdlciB7UElYSS5TaGFkZXJNYW5hZ2VyfSBUaGUgd2ViZ2wgc2hhZGVyIG1hbmFnZXIgdGhpcyBzaGFkZXIgd29ya3MgZm9yLlxuICovXG5mdW5jdGlvbiBDb21wbGV4UHJpbWl0aXZlU2hhZGVyKHNoYWRlck1hbmFnZXIpXG57XG4gICAgU2hhZGVyLmNhbGwodGhpcyxcbiAgICAgICAgc2hhZGVyTWFuYWdlcixcbiAgICAgICAgLy8gdmVydGV4IHNoYWRlclxuICAgICAgICBbXG4gICAgICAgICAgICAnYXR0cmlidXRlIHZlYzIgYVZlcnRleFBvc2l0aW9uOycsXG5cbiAgICAgICAgICAgICd1bmlmb3JtIG1hdDMgdHJhbnNsYXRpb25NYXRyaXg7JyxcbiAgICAgICAgICAgICd1bmlmb3JtIG1hdDMgcHJvamVjdGlvbk1hdHJpeDsnLFxuXG4gICAgICAgICAgICAndW5pZm9ybSB2ZWMzIHRpbnQ7JyxcbiAgICAgICAgICAgICd1bmlmb3JtIGZsb2F0IGFscGhhOycsXG4gICAgICAgICAgICAndW5pZm9ybSB2ZWMzIGNvbG9yOycsXG5cbiAgICAgICAgICAgICd2YXJ5aW5nIHZlYzQgdkNvbG9yOycsXG5cbiAgICAgICAgICAgICd2b2lkIG1haW4odm9pZCl7JyxcbiAgICAgICAgICAgICcgICBnbF9Qb3NpdGlvbiA9IHZlYzQoKHByb2plY3Rpb25NYXRyaXggKiB0cmFuc2xhdGlvbk1hdHJpeCAqIHZlYzMoYVZlcnRleFBvc2l0aW9uLCAxLjApKS54eSwgMC4wLCAxLjApOycsXG4gICAgICAgICAgICAnICAgdkNvbG9yID0gdmVjNChjb2xvciAqIGFscGhhICogdGludCwgYWxwaGEpOycsLy9cIiAqIHZlYzQodGludCAqIGFscGhhLCBhbHBoYSk7JyxcbiAgICAgICAgICAgICd9J1xuICAgICAgICBdLmpvaW4oJ1xcbicpLFxuICAgICAgICAvLyBmcmFnbWVudCBzaGFkZXJcbiAgICAgICAgW1xuICAgICAgICAgICAgJ3ByZWNpc2lvbiBtZWRpdW1wIGZsb2F0OycsXG5cbiAgICAgICAgICAgICd2YXJ5aW5nIHZlYzQgdkNvbG9yOycsXG5cbiAgICAgICAgICAgICd2b2lkIG1haW4odm9pZCl7JyxcbiAgICAgICAgICAgICcgICBnbF9GcmFnQ29sb3IgPSB2Q29sb3I7JyxcbiAgICAgICAgICAgICd9J1xuICAgICAgICBdLmpvaW4oJ1xcbicpLFxuICAgICAgICAvLyBjdXN0b20gdW5pZm9ybXNcbiAgICAgICAge1xuICAgICAgICAgICAgdGludDogICB7IHR5cGU6ICczZicsIHZhbHVlOiBbMCwgMCwgMF0gfSxcbiAgICAgICAgICAgIGFscGhhOiAgeyB0eXBlOiAnMWYnLCB2YWx1ZTogMCB9LFxuICAgICAgICAgICAgY29sb3I6ICB7IHR5cGU6ICczZicsIHZhbHVlOiBbMCwwLDBdIH0sXG4gICAgICAgICAgICB0cmFuc2xhdGlvbk1hdHJpeDogeyB0eXBlOiAnbWF0MycsIHZhbHVlOiBuZXcgRmxvYXQzMkFycmF5KDkpIH0sXG4gICAgICAgICAgICBwcm9qZWN0aW9uTWF0cml4OiB7IHR5cGU6ICdtYXQzJywgdmFsdWU6IG5ldyBGbG9hdDMyQXJyYXkoOSkgfVxuICAgICAgICB9LFxuICAgICAgICAvLyBhdHRyaWJ1dGVzXG4gICAgICAgIHtcbiAgICAgICAgICAgIGFWZXJ0ZXhQb3NpdGlvbjowXG4gICAgICAgIH1cbiAgICApO1xufVxuXG5Db21wbGV4UHJpbWl0aXZlU2hhZGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoU2hhZGVyLnByb3RvdHlwZSk7XG5Db21wbGV4UHJpbWl0aXZlU2hhZGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IENvbXBsZXhQcmltaXRpdmVTaGFkZXI7XG5tb2R1bGUuZXhwb3J0cyA9IENvbXBsZXhQcmltaXRpdmVTaGFkZXI7XG4iLCJ2YXIgU2hhZGVyID0gcmVxdWlyZSgnLi9TaGFkZXInKTtcblxuLyoqXG4gKiBUaGlzIHNoYWRlciBpcyB1c2VkIHRvIGRyYXcgc2ltcGxlIHByaW1pdGl2ZSBzaGFwZXMgZm9yIHtAbGluayBQSVhJLkdyYXBoaWNzfS5cbiAqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAZXh0ZW5kcyBQSVhJLlNoYWRlclxuICogQHBhcmFtIHNoYWRlck1hbmFnZXIge1NoYWRlck1hbmFnZXJ9IFRoZSB3ZWJnbCBzaGFkZXIgbWFuYWdlciB0aGlzIHNoYWRlciB3b3JrcyBmb3IuXG4gKi9cbmZ1bmN0aW9uIFByaW1pdGl2ZVNoYWRlcihzaGFkZXJNYW5hZ2VyKVxue1xuICAgIFNoYWRlci5jYWxsKHRoaXMsXG4gICAgICAgIHNoYWRlck1hbmFnZXIsXG4gICAgICAgIC8vIHZlcnRleCBzaGFkZXJcbiAgICAgICAgW1xuICAgICAgICAgICAgJ2F0dHJpYnV0ZSB2ZWMyIGFWZXJ0ZXhQb3NpdGlvbjsnLFxuICAgICAgICAgICAgJ2F0dHJpYnV0ZSB2ZWM0IGFDb2xvcjsnLFxuXG4gICAgICAgICAgICAndW5pZm9ybSBtYXQzIHRyYW5zbGF0aW9uTWF0cml4OycsXG4gICAgICAgICAgICAndW5pZm9ybSBtYXQzIHByb2plY3Rpb25NYXRyaXg7JyxcblxuICAgICAgICAgICAgJ3VuaWZvcm0gZmxvYXQgYWxwaGE7JyxcbiAgICAgICAgICAgICd1bmlmb3JtIGZsb2F0IGZsaXBZOycsXG4gICAgICAgICAgICAndW5pZm9ybSB2ZWMzIHRpbnQ7JyxcblxuICAgICAgICAgICAgJ3ZhcnlpbmcgdmVjNCB2Q29sb3I7JyxcblxuICAgICAgICAgICAgJ3ZvaWQgbWFpbih2b2lkKXsnLFxuICAgICAgICAgICAgJyAgIGdsX1Bvc2l0aW9uID0gdmVjNCgocHJvamVjdGlvbk1hdHJpeCAqIHRyYW5zbGF0aW9uTWF0cml4ICogdmVjMyhhVmVydGV4UG9zaXRpb24sIDEuMCkpLnh5LCAwLjAsIDEuMCk7JyxcbiAgICAgICAgICAgICcgICB2Q29sb3IgPSBhQ29sb3IgKiB2ZWM0KHRpbnQgKiBhbHBoYSwgYWxwaGEpOycsXG4gICAgICAgICAgICAnfSdcbiAgICAgICAgXS5qb2luKCdcXG4nKSxcbiAgICAgICAgLy8gZnJhZ21lbnQgc2hhZGVyXG4gICAgICAgIFtcbiAgICAgICAgICAgICdwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDsnLFxuXG4gICAgICAgICAgICAndmFyeWluZyB2ZWM0IHZDb2xvcjsnLFxuXG4gICAgICAgICAgICAndm9pZCBtYWluKHZvaWQpeycsXG4gICAgICAgICAgICAnICAgZ2xfRnJhZ0NvbG9yID0gdkNvbG9yOycsXG4gICAgICAgICAgICAnfSdcbiAgICAgICAgXS5qb2luKCdcXG4nKSxcbiAgICAgICAgLy8gY3VzdG9tIHVuaWZvcm1zXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRpbnQ6ICAgeyB0eXBlOiAnM2YnLCB2YWx1ZTogWzAsIDAsIDBdIH0sXG4gICAgICAgICAgICBhbHBoYTogIHsgdHlwZTogJzFmJywgdmFsdWU6IDAgfSxcbiAgICAgICAgICAgIHRyYW5zbGF0aW9uTWF0cml4OiB7IHR5cGU6ICdtYXQzJywgdmFsdWU6IG5ldyBGbG9hdDMyQXJyYXkoOSkgfSxcbiAgICAgICAgICAgIHByb2plY3Rpb25NYXRyaXg6IHsgdHlwZTogJ21hdDMnLCB2YWx1ZTogbmV3IEZsb2F0MzJBcnJheSg5KSB9XG4gICAgICAgIH0sXG4gICAgICAgIC8vIGN1c3RvbSBhdHRyaWJ1dGVzXG4gICAgICAgIHtcbiAgICAgICAgICAgIGFWZXJ0ZXhQb3NpdGlvbjowLFxuICAgICAgICAgICAgYUNvbG9yOjBcbiAgICAgICAgfVxuICAgICk7XG59XG5cblByaW1pdGl2ZVNoYWRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFNoYWRlci5wcm90b3R5cGUpO1xuUHJpbWl0aXZlU2hhZGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFByaW1pdGl2ZVNoYWRlcjtcbm1vZHVsZS5leHBvcnRzID0gUHJpbWl0aXZlU2hhZGVyO1xuIiwiLypnbG9iYWwgY29uc29sZSAqL1xudmFyIHV0aWxzID0gcmVxdWlyZSgnLi4vLi4vLi4vdXRpbHMnKTtcblxuLyoqXG4gKiBCYXNlIHNoYWRlciBjbGFzcyBmb3IgUElYSSBtYW5hZ2VkIHNoYWRlcnMuXG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIHNoYWRlck1hbmFnZXIge1BJWEkuU2hhZGVyTWFuYWdlcn0gVGhlIHdlYmdsIHNoYWRlciBtYW5hZ2VyIHRoaXMgc2hhZGVyIHdvcmtzIGZvci5cbiAqIEBwYXJhbSBbdmVydGV4U3JjXSB7c3RyaW5nfSBUaGUgc291cmNlIG9mIHRoZSB2ZXJ0ZXggc2hhZGVyLlxuICogQHBhcmFtIFtmcmFnbWVudFNyY10ge3N0cmluZ30gVGhlIHNvdXJjZSBvZiB0aGUgZnJhZ21lbnQgc2hhZGVyLlxuICogQHBhcmFtIFt1bmlmb3Jtc10ge29iamVjdH0gVW5pZm9ybXMgZm9yIHRoaXMgc2hhZGVyLlxuICogQHBhcmFtIFthdHRyaWJ1dGVzXSB7b2JqZWN0fSBBdHRyaWJ1dGVzIGZvciB0aGlzIHNoYWRlci5cbiAqL1xuZnVuY3Rpb24gU2hhZGVyKHNoYWRlck1hbmFnZXIsIHZlcnRleFNyYywgZnJhZ21lbnRTcmMsIHVuaWZvcm1zLCBhdHRyaWJ1dGVzKVxue1xuICAgIGlmICghdmVydGV4U3JjIHx8ICFmcmFnbWVudFNyYylcbiAgICB7XG4gICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1BpeGkuanMgRXJyb3IuIFNoYWRlciByZXF1aXJlcyB2ZXJ0ZXhTcmMgYW5kIGZyYWdtZW50U3JjJyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQSB1bmlxdWUgaWRcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQHJlYWRvbmx5XG4gICAgICovXG4gICAgdGhpcy51aWQgPSB1dGlscy51aWQoKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBjdXJyZW50IFdlYkdMIGRyYXdpbmcgY29udGV4dFxuICAgICAqIEBtZW1iZXIge1dlYkdMUmVuZGVyaW5nQ29udGV4dH1cbiAgICAgKiBAcmVhZG9ubHlcbiAgICAgKi9cbiAgICB0aGlzLmdsID0gc2hhZGVyTWFuYWdlci5yZW5kZXJlci5nbDtcblxuICAgIC8vVE9ETyBtYXliZSB3ZSBzaG91bGQgcGFzcyByZW5kZXJlciByYXRoZXIgdGhhbiBzaGFkZXIgbWFuZ2VyPz8gZm9vZCBmb3IgdGhvdWdodC4uXG4gICAgdGhpcy5zaGFkZXJNYW5hZ2VyID0gc2hhZGVyTWFuYWdlcjtcblxuICAgIC8qKlxuICAgICAqIFRoZSBXZWJHTCBwcm9ncmFtLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7V2ViR0xQcm9ncmFtfVxuICAgICAqIEByZWFkb25seVxuICAgICAqL1xuICAgIHRoaXMucHJvZ3JhbSA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgdW5pZm9ybXMgYXMgYW4gb2JqZWN0XG4gICAgICogQG1lbWJlciB7b2JqZWN0fVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy51bmlmb3JtcyA9IHVuaWZvcm1zIHx8IHt9O1xuXG4gICAgLyoqXG4gICAgICogVGhlIGF0dHJpYnV0ZXMgYXMgYW4gb2JqZWN0XG4gICAgICogQG1lbWJlciB7b2JqZWN0fVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5hdHRyaWJ1dGVzID0gYXR0cmlidXRlcyB8fCB7fTtcblxuICAgIC8qKlxuICAgICAqIEludGVybmFsIHRleHR1cmUgY291bnRlclxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMudGV4dHVyZUNvdW50ID0gMTtcblxuICAgIC8qKlxuICAgICAqIFRoZSB2ZXJ0ZXggc2hhZGVyIGFzIGFuIGFycmF5IG9mIHN0cmluZ3NcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge3N0cmluZ31cbiAgICAgKi9cbiAgICB0aGlzLnZlcnRleFNyYyA9IHZlcnRleFNyYztcblxuICAgIC8qKlxuICAgICAqIFRoZSBmcmFnbWVudCBzaGFkZXIgYXMgYW4gYXJyYXkgb2Ygc3RyaW5nc1xuICAgICAqXG4gICAgICogQG1lbWJlciB7c3RyaW5nfVxuICAgICAqL1xuICAgIHRoaXMuZnJhZ21lbnRTcmMgPSBmcmFnbWVudFNyYztcblxuICAgIHRoaXMuaW5pdCgpO1xufVxuXG5TaGFkZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gU2hhZGVyO1xubW9kdWxlLmV4cG9ydHMgPSBTaGFkZXI7XG5cbi8qKlxuICogQ3JlYXRlcyB0aGUgc2hhZGVyIGFuZCB1c2VzIGl0XG4gKlxuICovXG5TaGFkZXIucHJvdG90eXBlLmluaXQgPSBmdW5jdGlvbiAoKVxue1xuICAgIHRoaXMuY29tcGlsZSgpO1xuXG4gICAgdGhpcy5nbC51c2VQcm9ncmFtKHRoaXMucHJvZ3JhbSk7XG5cbiAgICB0aGlzLmNhY2hlVW5pZm9ybUxvY2F0aW9ucyhPYmplY3Qua2V5cyh0aGlzLnVuaWZvcm1zKSk7XG4gICAgdGhpcy5jYWNoZUF0dHJpYnV0ZUxvY2F0aW9ucyhPYmplY3Qua2V5cyh0aGlzLmF0dHJpYnV0ZXMpKTtcbn07XG5cbi8qKlxuICogQ2FjaGVzIHRoZSBsb2NhdGlvbnMgb2YgdGhlIHVuaWZvcm0gZm9yIHJldXNlLlxuICpcbiAqIEBwYXJhbSBrZXlzIHtzdHJpbmd9IHRoZSB1bmlmb3JtcyB0byBjYWNoZVxuICovXG5TaGFkZXIucHJvdG90eXBlLmNhY2hlVW5pZm9ybUxvY2F0aW9ucyA9IGZ1bmN0aW9uIChrZXlzKVxue1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7ICsraSlcbiAgICB7XG4gICAgICAgIHRoaXMudW5pZm9ybXNba2V5c1tpXV0uX2xvY2F0aW9uID0gdGhpcy5nbC5nZXRVbmlmb3JtTG9jYXRpb24odGhpcy5wcm9ncmFtLCBrZXlzW2ldKTtcbiAgICB9XG59O1xuXG4vKipcbiAqIENhY2hlcyB0aGUgbG9jYXRpb25zIG9mIHRoZSBhdHRyaWJ1dGUgZm9yIHJldXNlLlxuICpcbiAqIEBwYXJhbSBrZXlzIHtzdHJpbmd9IHRoZSBhdHRyaWJ1dGVzIHRvIGNhY2hlXG4gKi9cblNoYWRlci5wcm90b3R5cGUuY2FjaGVBdHRyaWJ1dGVMb2NhdGlvbnMgPSBmdW5jdGlvbiAoa2V5cylcbntcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyArK2kpXG4gICAge1xuICAgICAgICB0aGlzLmF0dHJpYnV0ZXNba2V5c1tpXV0gPSB0aGlzLmdsLmdldEF0dHJpYkxvY2F0aW9uKHRoaXMucHJvZ3JhbSwga2V5c1tpXSk7XG4gICAgfVxuXG4gICAgLy8gVE9ETzogQ2hlY2sgaWYgdGhpcyBpcyBuZWVkZWQgYW55bW9yZS4uLlxuXG4gICAgLy8gQmVnaW4gd29yc3QgaGFjayBldmEgLy9cblxuICAgIC8vIFdIWT8/PyBPTkxZIG9uIG15IGNocm9tZSBwaXhlbCB0aGUgbGluZSBhYm92ZSByZXR1cm5zIC0xIHdoZW4gdXNpbmcgZmlsdGVycz9cbiAgICAvLyBtYXliZSBpdHMgc29tZXRoaW5nIHRvIGRvIHdpdGggdGhlIGN1cnJlbnQgc3RhdGUgb2YgdGhlIGdsIGNvbnRleHQuXG4gICAgLy8gSSdtIGNvbnZpbmNlZCB0aGlzIGlzIGEgYnVnIGluIHRoZSBjaHJvbWUgYnJvd3NlciBhcyB0aGVyZSBpcyBOTyByZWFzb24gd2h5IHRoaXMgc2hvdWxkIGJlIHJldHVybmluZyAtMSBlc3BlY2lhbGx5IGFzIGl0IG9ubHkgbWFuaWZlc3RzIG9uIG15IGNocm9tZSBwaXhlbFxuICAgIC8vIElmIHRoZXJlcyBhbnkgd2ViR0wgcGVvcGxlIHRoYXQga25vdyB3aHkgY291bGQgaGFwcGVuIHBsZWFzZSBoZWxwIDopXG4gICAgLy8gaWYgKHRoaXMuYXR0cmlidXRlcy5hQ29sb3IgPT09IC0xKXtcbiAgICAvLyAgICAgdGhpcy5hdHRyaWJ1dGVzLmFDb2xvciA9IDI7XG4gICAgLy8gfVxuXG4gICAgLy8gRW5kIHdvcnN0IGhhY2sgZXZhIC8vXG59O1xuXG4vKipcbiAqIEF0dGFjaGVzIHRoZSBzaGFkZXJzIGFuZCBjcmVhdGVzIHRoZSBwcm9ncmFtLlxuICpcbiAqIEByZXR1cm4ge1dlYkdMUHJvZ3JhbX1cbiAqL1xuU2hhZGVyLnByb3RvdHlwZS5jb21waWxlID0gZnVuY3Rpb24gKClcbntcbiAgICB2YXIgZ2wgPSB0aGlzLmdsO1xuXG4gICAgdmFyIGdsVmVydFNoYWRlciA9IHRoaXMuX2dsQ29tcGlsZShnbC5WRVJURVhfU0hBREVSLCB0aGlzLnZlcnRleFNyYyk7XG4gICAgdmFyIGdsRnJhZ1NoYWRlciA9IHRoaXMuX2dsQ29tcGlsZShnbC5GUkFHTUVOVF9TSEFERVIsIHRoaXMuZnJhZ21lbnRTcmMpO1xuXG4gICAgdmFyIHByb2dyYW0gPSBnbC5jcmVhdGVQcm9ncmFtKCk7XG5cbiAgICBnbC5hdHRhY2hTaGFkZXIocHJvZ3JhbSwgZ2xWZXJ0U2hhZGVyKTtcbiAgICBnbC5hdHRhY2hTaGFkZXIocHJvZ3JhbSwgZ2xGcmFnU2hhZGVyKTtcbiAgICBnbC5saW5rUHJvZ3JhbShwcm9ncmFtKTtcblxuICAgIC8vIGlmIGxpbmtpbmcgZmFpbHMsIHRoZW4gbG9nIGFuZCBjbGVhbnVwXG4gICAgaWYgKCFnbC5nZXRQcm9ncmFtUGFyYW1ldGVyKHByb2dyYW0sIGdsLkxJTktfU1RBVFVTKSlcbiAgICB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ1BpeGkuanMgRXJyb3I6IENvdWxkIG5vdCBpbml0aWFsaXplIHNoYWRlci4nKTtcbiAgICAgICAgY29uc29sZS5lcnJvcignZ2wuVkFMSURBVEVfU1RBVFVTJywgZ2wuZ2V0UHJvZ3JhbVBhcmFtZXRlcihwcm9ncmFtLCBnbC5WQUxJREFURV9TVEFUVVMpKTtcbiAgICAgICAgY29uc29sZS5lcnJvcignZ2wuZ2V0RXJyb3IoKScsIGdsLmdldEVycm9yKCkpO1xuXG4gICAgICAgIC8vIGlmIHRoZXJlIGlzIGEgcHJvZ3JhbSBpbmZvIGxvZywgbG9nIGl0XG4gICAgICAgIGlmIChnbC5nZXRQcm9ncmFtSW5mb0xvZyhwcm9ncmFtKSAhPT0gJycpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignUGl4aS5qcyBXYXJuaW5nOiBnbC5nZXRQcm9ncmFtSW5mb0xvZygpJywgZ2wuZ2V0UHJvZ3JhbUluZm9Mb2cocHJvZ3JhbSkpO1xuICAgICAgICB9XG5cbiAgICAgICAgZ2wuZGVsZXRlUHJvZ3JhbShwcm9ncmFtKTtcbiAgICAgICAgcHJvZ3JhbSA9IG51bGw7XG4gICAgfVxuXG4gICAgLy8gY2xlYW4gdXAgc29tZSBzaGFkZXJzXG4gICAgZ2wuZGVsZXRlU2hhZGVyKGdsVmVydFNoYWRlcik7XG4gICAgZ2wuZGVsZXRlU2hhZGVyKGdsRnJhZ1NoYWRlcik7XG5cbiAgICByZXR1cm4gKHRoaXMucHJvZ3JhbSA9IHByb2dyYW0pO1xufTtcblxuLyoqXG4qIEFkZHMgYSBuZXcgdW5pZm9ybVxuKlxuKiBAcGFyYW0gdW5pZm9ybSB7b2JqZWN0fSB0aGUgbmV3IHVuaWZvcm0gdG8gYXR0YWNoXG4qL1xuU2hhZGVyLnByb3RvdHlwZS5zeW5jVW5pZm9ybSA9IGZ1bmN0aW9uICh1bmlmb3JtKVxue1xuICAgIHZhciBsb2NhdGlvbiA9IHVuaWZvcm0uX2xvY2F0aW9uLFxuICAgICAgICB2YWx1ZSA9IHVuaWZvcm0udmFsdWUsXG4gICAgICAgIGdsID0gdGhpcy5nbCxcbiAgICAgICAgaSwgaWw7XG5cbiAgICBzd2l0Y2ggKHVuaWZvcm0udHlwZSlcbiAgICB7XG4gICAgICAgIGNhc2UgJ2InOlxuICAgICAgICBjYXNlICdib29sJzpcbiAgICAgICAgY2FzZSAnYm9vbGVhbic6XG4gICAgICAgICAgICBnbC51bmlmb3JtMWkobG9jYXRpb24sIHZhbHVlID8gMSA6IDApO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLy8gc2luZ2xlIGludCB2YWx1ZVxuICAgICAgICBjYXNlICdpJzpcbiAgICAgICAgY2FzZSAnMWknOlxuICAgICAgICAgICAgZ2wudW5pZm9ybTFpKGxvY2F0aW9uLCB2YWx1ZSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAvLyBzaW5nbGUgZmxvYXQgdmFsdWVcbiAgICAgICAgY2FzZSAnZic6XG4gICAgICAgIGNhc2UgJzFmJzpcbiAgICAgICAgICAgIGdsLnVuaWZvcm0xZihsb2NhdGlvbiwgdmFsdWUpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLy8gRmxvYXQzMkFycmF5KDIpIG9yIEpTIEFycnJheVxuICAgICAgICBjYXNlICcyZic6XG4gICAgICAgICAgICBnbC51bmlmb3JtMmYobG9jYXRpb24sIHZhbHVlWzBdLCB2YWx1ZVsxXSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAvLyBGbG9hdDMyQXJyYXkoMykgb3IgSlMgQXJycmF5XG4gICAgICAgIGNhc2UgJzNmJzpcbiAgICAgICAgICAgIGdsLnVuaWZvcm0zZihsb2NhdGlvbiwgdmFsdWVbMF0sIHZhbHVlWzFdLCB2YWx1ZVsyXSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAvLyBGbG9hdDMyQXJyYXkoNCkgb3IgSlMgQXJycmF5XG4gICAgICAgIGNhc2UgJzRmJzpcbiAgICAgICAgICAgIGdsLnVuaWZvcm00Zihsb2NhdGlvbiwgdmFsdWVbMF0sIHZhbHVlWzFdLCB2YWx1ZVsyXSwgdmFsdWVbM10pO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLy8gYSAyRCBQb2ludCBvYmplY3RcbiAgICAgICAgY2FzZSAndjInOlxuICAgICAgICAgICAgZ2wudW5pZm9ybTJmKGxvY2F0aW9uLCB2YWx1ZS54LCB2YWx1ZS55KTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIC8vIGEgM0QgUG9pbnQgb2JqZWN0XG4gICAgICAgIGNhc2UgJ3YzJzpcbiAgICAgICAgICAgIGdsLnVuaWZvcm0zZihsb2NhdGlvbiwgdmFsdWUueCwgdmFsdWUueSwgdmFsdWUueik7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAvLyBhIDREIFBvaW50IG9iamVjdFxuICAgICAgICBjYXNlICd2NCc6XG4gICAgICAgICAgICBnbC51bmlmb3JtNGYobG9jYXRpb24sIHZhbHVlLngsIHZhbHVlLnksIHZhbHVlLnosIHZhbHVlLncpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLy8gSW50MzJBcnJheSBvciBKUyBBcnJheVxuICAgICAgICBjYXNlICcxaXYnOlxuICAgICAgICAgICAgZ2wudW5pZm9ybTFpdihsb2NhdGlvbiwgdmFsdWUpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLy8gSW50MzJBcnJheSBvciBKUyBBcnJheVxuICAgICAgICBjYXNlICcyaXYnOlxuICAgICAgICAgICAgZ2wudW5pZm9ybTJpdihsb2NhdGlvbiwgdmFsdWUpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLy8gSW50MzJBcnJheSBvciBKUyBBcnJheVxuICAgICAgICBjYXNlICczaXYnOlxuICAgICAgICAgICAgZ2wudW5pZm9ybTNpdihsb2NhdGlvbiwgdmFsdWUpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLy8gSW50MzJBcnJheSBvciBKUyBBcnJheVxuICAgICAgICBjYXNlICc0aXYnOlxuICAgICAgICAgICAgZ2wudW5pZm9ybTRpdihsb2NhdGlvbiwgdmFsdWUpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLy8gRmxvYXQzMkFycmF5IG9yIEpTIEFycmF5XG4gICAgICAgIGNhc2UgJzFmdic6XG4gICAgICAgICAgICBnbC51bmlmb3JtMWZ2KGxvY2F0aW9uLCB2YWx1ZSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAvLyBGbG9hdDMyQXJyYXkgb3IgSlMgQXJyYXlcbiAgICAgICAgY2FzZSAnMmZ2JzpcbiAgICAgICAgICAgIGdsLnVuaWZvcm0yZnYobG9jYXRpb24sIHZhbHVlKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIC8vIEZsb2F0MzJBcnJheSBvciBKUyBBcnJheVxuICAgICAgICBjYXNlICczZnYnOlxuICAgICAgICAgICAgZ2wudW5pZm9ybTNmdihsb2NhdGlvbiwgdmFsdWUpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLy8gRmxvYXQzMkFycmF5IG9yIEpTIEFycmF5XG4gICAgICAgIGNhc2UgJzRmdic6XG4gICAgICAgICAgICBnbC51bmlmb3JtNGZ2KGxvY2F0aW9uLCB2YWx1ZSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAvLyBGbG9hdDMyQXJyYXkgb3IgSlMgQXJyYXlcbiAgICAgICAgY2FzZSAnbTInOlxuICAgICAgICBjYXNlICdtYXQyJzpcbiAgICAgICAgY2FzZSAnTWF0cml4MmZ2JzpcbiAgICAgICAgICAgIGdsLnVuaWZvcm1NYXRyaXgyZnYobG9jYXRpb24sIHVuaWZvcm0udHJhbnNwb3NlLCB2YWx1ZSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAvLyBGbG9hdDMyQXJyYXkgb3IgSlMgQXJyYXlcbiAgICAgICAgY2FzZSAnbTMnOlxuICAgICAgICBjYXNlICdtYXQzJzpcbiAgICAgICAgY2FzZSAnTWF0cml4M2Z2JzpcblxuICAgICAgICAgICAgZ2wudW5pZm9ybU1hdHJpeDNmdihsb2NhdGlvbiwgdW5pZm9ybS50cmFuc3Bvc2UsIHZhbHVlKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIC8vIEZsb2F0MzJBcnJheSBvciBKUyBBcnJheVxuICAgICAgICBjYXNlICdtNCc6XG4gICAgICAgIGNhc2UgJ21hdDQnOlxuICAgICAgICBjYXNlICdNYXRyaXg0ZnYnOlxuICAgICAgICAgICAgZ2wudW5pZm9ybU1hdHJpeDRmdihsb2NhdGlvbiwgdW5pZm9ybS50cmFuc3Bvc2UsIHZhbHVlKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIC8vIGEgQ29sb3IgVmFsdWVcbiAgICAgICAgY2FzZSAnYyc6XG4gICAgICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJylcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB2YWx1ZSA9IHV0aWxzLmhleDJyZ2IodmFsdWUpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBnbC51bmlmb3JtM2YobG9jYXRpb24sIHZhbHVlWzBdLCB2YWx1ZVsxXSwgdmFsdWVbMl0pO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLy8gZmxhdCBhcnJheSBvZiBpbnRlZ2VycyAoSlMgb3IgdHlwZWQgYXJyYXkpXG4gICAgICAgIGNhc2UgJ2l2MSc6XG4gICAgICAgICAgICBnbC51bmlmb3JtMWl2KGxvY2F0aW9uLCB2YWx1ZSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAvLyBmbGF0IGFycmF5IG9mIGludGVnZXJzIHdpdGggMyB4IE4gc2l6ZSAoSlMgb3IgdHlwZWQgYXJyYXkpXG4gICAgICAgIGNhc2UgJ2l2JzpcbiAgICAgICAgICAgIGdsLnVuaWZvcm0zaXYobG9jYXRpb24sIHZhbHVlKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIC8vIGZsYXQgYXJyYXkgb2YgZmxvYXRzIChKUyBvciB0eXBlZCBhcnJheSlcbiAgICAgICAgY2FzZSAnZnYxJzpcbiAgICAgICAgICAgIGdsLnVuaWZvcm0xZnYobG9jYXRpb24sIHZhbHVlKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIC8vIGZsYXQgYXJyYXkgb2YgZmxvYXRzIHdpdGggMyB4IE4gc2l6ZSAoSlMgb3IgdHlwZWQgYXJyYXkpXG4gICAgICAgIGNhc2UgJ2Z2JzpcbiAgICAgICAgICAgIGdsLnVuaWZvcm0zZnYobG9jYXRpb24sIHZhbHVlKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIC8vIGFycmF5IG9mIDJEIFBvaW50IG9iamVjdHNcbiAgICAgICAgY2FzZSAndjJ2JzpcbiAgICAgICAgICAgIGlmICghdW5pZm9ybS5fYXJyYXkpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdW5pZm9ybS5fYXJyYXkgPSBuZXcgRmxvYXQzMkFycmF5KDIgKiB2YWx1ZS5sZW5ndGgpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBmb3IgKGkgPSAwLCBpbCA9IHZhbHVlLmxlbmd0aDsgaSA8IGlsOyArK2kpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdW5pZm9ybS5fYXJyYXlbaSAqIDJdICAgICAgID0gdmFsdWVbaV0ueDtcbiAgICAgICAgICAgICAgICB1bmlmb3JtLl9hcnJheVtpICogMiArIDFdICAgPSB2YWx1ZVtpXS55O1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBnbC51bmlmb3JtMmZ2KGxvY2F0aW9uLCB1bmlmb3JtLl9hcnJheSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAvLyBhcnJheSBvZiAzRCBQb2ludCBvYmplY3RzXG4gICAgICAgIGNhc2UgJ3Yzdic6XG4gICAgICAgICAgICBpZiAoIXVuaWZvcm0uX2FycmF5KVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHVuaWZvcm0uX2FycmF5ID0gbmV3IEZsb2F0MzJBcnJheSgzICogdmFsdWUubGVuZ3RoKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZm9yIChpID0gMCwgaWwgPSB2YWx1ZS5sZW5ndGg7IGkgPCBpbDsgKytpKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHVuaWZvcm0uX2FycmF5W2kgKiAzXSAgICAgICA9IHZhbHVlW2ldLng7XG4gICAgICAgICAgICAgICAgdW5pZm9ybS5fYXJyYXlbaSAqIDMgKyAxXSAgID0gdmFsdWVbaV0ueTtcbiAgICAgICAgICAgICAgICB1bmlmb3JtLl9hcnJheVtpICogMyArIDJdICAgPSB2YWx1ZVtpXS56O1xuXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGdsLnVuaWZvcm0zZnYobG9jYXRpb24sIHVuaWZvcm0uX2FycmF5KTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIC8vIGFycmF5IG9mIDREIFBvaW50IG9iamVjdHNcbiAgICAgICAgY2FzZSAndjR2JzpcbiAgICAgICAgICAgIGlmICghdW5pZm9ybS5fYXJyYXkpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdW5pZm9ybS5fYXJyYXkgPSBuZXcgRmxvYXQzMkFycmF5KDQgKiB2YWx1ZS5sZW5ndGgpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBmb3IgKGkgPSAwLCBpbCA9IHZhbHVlLmxlbmd0aDsgaSA8IGlsOyArK2kpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdW5pZm9ybS5fYXJyYXlbaSAqIDRdICAgICAgID0gdmFsdWVbaV0ueDtcbiAgICAgICAgICAgICAgICB1bmlmb3JtLl9hcnJheVtpICogNCArIDFdICAgPSB2YWx1ZVtpXS55O1xuICAgICAgICAgICAgICAgIHVuaWZvcm0uX2FycmF5W2kgKiA0ICsgMl0gICA9IHZhbHVlW2ldLno7XG4gICAgICAgICAgICAgICAgdW5pZm9ybS5fYXJyYXlbaSAqIDQgKyAzXSAgID0gdmFsdWVbaV0udztcblxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBnbC51bmlmb3JtNGZ2KGxvY2F0aW9uLCB1bmlmb3JtLl9hcnJheSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAvLyBQSVhJLlRleHR1cmVcbiAgICAgICAgY2FzZSAndCc6XG4gICAgICAgIGNhc2UgJ3NhbXBsZXIyRCc6XG5cbiAgICAgICAgICAgIGlmICghdW5pZm9ybS52YWx1ZSB8fCAhdW5pZm9ybS52YWx1ZS5iYXNlVGV4dHVyZS5oYXNMb2FkZWQpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIGFjdGl2YXRlIHRoaXMgdGV4dHVyZVxuICAgICAgICAgICAgZ2wuYWN0aXZlVGV4dHVyZShnbFsnVEVYVFVSRScgKyB0aGlzLnRleHR1cmVDb3VudF0pO1xuXG4gICAgICAgICAgICB2YXIgdGV4dHVyZSA9IHVuaWZvcm0udmFsdWUuYmFzZVRleHR1cmUuX2dsVGV4dHVyZXNbZ2wuaWRdO1xuXG4gICAgICAgICAgICBpZiAoIXRleHR1cmUpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdGhpcy5pbml0U2FtcGxlcjJEKHVuaWZvcm0pO1xuXG4gICAgICAgICAgICAgICAgLy8gc2V0IHRoZSB0ZXh0dXIgdG8gdGhlIG5ld2x5IGNyZWF0ZWQgb25lLi5cbiAgICAgICAgICAgICAgICB0ZXh0dXJlID0gdW5pZm9ybS52YWx1ZS5iYXNlVGV4dHVyZS5fZ2xUZXh0dXJlc1tnbC5pZF07XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIGJpbmQgdGhlIHRleHR1cmVcbiAgICAgICAgICAgIGdsLmJpbmRUZXh0dXJlKGdsLlRFWFRVUkVfMkQsIHRleHR1cmUpO1xuXG4gICAgICAgICAgICAvLyBzZXQgdW5pZm9ybSB0byB0ZXh0dXJlIGluZGV4XG4gICAgICAgICAgICBnbC51bmlmb3JtMWkodW5pZm9ybS5fbG9jYXRpb24sIHRoaXMudGV4dHVyZUNvdW50KTtcblxuICAgICAgICAgICAgLy8gaW5jcmVtZW50IG5leHQgdGV4dHVyZSBpZFxuICAgICAgICAgICAgdGhpcy50ZXh0dXJlQ291bnQrKztcblxuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignUGl4aS5qcyBTaGFkZXIgV2FybmluZzogVW5rbm93biB1bmlmb3JtIHR5cGU6ICcgKyB1bmlmb3JtLnR5cGUpO1xuICAgIH1cbn07XG5cbi8qKlxuICogVXBkYXRlcyB0aGUgc2hhZGVyIHVuaWZvcm0gdmFsdWVzLlxuICpcbiAqL1xuU2hhZGVyLnByb3RvdHlwZS5zeW5jVW5pZm9ybXMgPSBmdW5jdGlvbiAoKVxue1xuICAgIHRoaXMudGV4dHVyZUNvdW50ID0gMTtcblxuICAgIGZvciAodmFyIGtleSBpbiB0aGlzLnVuaWZvcm1zKVxuICAgIHtcbiAgICAgICAgdGhpcy5zeW5jVW5pZm9ybSh0aGlzLnVuaWZvcm1zW2tleV0pO1xuICAgIH1cbn07XG5cblxuLyoqXG4gKiBJbml0aWFsaXNlcyBhIFNhbXBsZXIyRCB1bmlmb3JtICh3aGljaCBtYXkgb25seSBiZSBhdmFpbGFibGUgbGF0ZXIgb24gYWZ0ZXIgaW5pdFVuaWZvcm1zIG9uY2UgdGhlIHRleHR1cmUgaGFzIGxvYWRlZClcbiAqXG4gKi9cblNoYWRlci5wcm90b3R5cGUuaW5pdFNhbXBsZXIyRCA9IGZ1bmN0aW9uICh1bmlmb3JtKVxue1xuICAgIHZhciBnbCA9IHRoaXMuZ2w7XG5cbiAgICB2YXIgdGV4dHVyZSA9IHVuaWZvcm0udmFsdWUuYmFzZVRleHR1cmU7XG5cbiAgICBpZighdGV4dHVyZS5oYXNMb2FkZWQpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG5cblxuICAgIGlmICh1bmlmb3JtLnRleHR1cmVEYXRhKVxuICAgIHtcblxuICAgICAgICAvL1RPRE8gbW92ZSB0aGlzLi4uXG4gICAgICAgIHZhciBkYXRhID0gdW5pZm9ybS50ZXh0dXJlRGF0YTtcblxuICAgICAgICB0ZXh0dXJlLl9nbFRleHR1cmVzW2dsLmlkXSA9IGdsLmNyZWF0ZVRleHR1cmUoKTtcblxuICAgICAgICBnbC5iaW5kVGV4dHVyZShnbC5URVhUVVJFXzJELCB0ZXh0dXJlLl9nbFRleHR1cmVzW2dsLmlkXSk7XG5cbiAgICAgICAgZ2wucGl4ZWxTdG9yZWkoZ2wuVU5QQUNLX1BSRU1VTFRJUExZX0FMUEhBX1dFQkdMLCB0ZXh0dXJlLnByZW11bHRpcGxpZWRBbHBoYSk7XG4gICAgICAgIC8vIEdMVGV4dHVyZSA9IG1hZyBsaW5lYXIsIG1pbiBsaW5lYXJfbWlwbWFwX2xpbmVhciwgd3JhcCByZXBlYXQgKyBnbC5nZW5lcmF0ZU1pcG1hcChnbC5URVhUVVJFXzJEKTtcbiAgICAgICAgLy8gR0xUZXh0dXJlTGluZWFyID0gbWFnL21pbiBsaW5lYXIsIHdyYXAgY2xhbXBcbiAgICAgICAgLy8gR0xUZXh0dXJlTmVhcmVzdFJlcGVhdCA9IG1hZy9taW4gTkVBUkVTVCwgd3JhcCByZXBlYXRcbiAgICAgICAgLy8gR0xUZXh0dXJlTmVhcmVzdCA9IG1hZy9taW4gbmVhcmVzdCwgd3JhcCBjbGFtcFxuICAgICAgICAvLyBBdWRpb1RleHR1cmUgPSB3aGF0ZXZlciArIGx1bWluYW5jZSArIHdpZHRoIDUxMiwgaGVpZ2h0IDIsIGJvcmRlciAwXG4gICAgICAgIC8vIEtleVRleHR1cmUgPSB3aGF0ZXZlciArIGx1bWluYW5jZSArIHdpZHRoIDI1NiwgaGVpZ2h0IDIsIGJvcmRlciAwXG5cbiAgICAgICAgLy8gIG1hZ0ZpbHRlciBjYW4gYmU6IGdsLkxJTkVBUiwgZ2wuTElORUFSX01JUE1BUF9MSU5FQVIgb3IgZ2wuTkVBUkVTVFxuICAgICAgICAvLyAgd3JhcFMvVCBjYW4gYmU6IGdsLkNMQU1QX1RPX0VER0Ugb3IgZ2wuUkVQRUFUXG5cbiAgICAgICAgZ2wudGV4SW1hZ2UyRChnbC5URVhUVVJFXzJELCAwLCBkYXRhLmx1bWluYW5jZSA/IGdsLkxVTUlOQU5DRSA6IGdsLlJHQkEsIGdsLlJHQkEsIGdsLlVOU0lHTkVEX0JZVEUsIHRleHR1cmUuc291cmNlKTtcblxuICAgICAgICBnbC50ZXhQYXJhbWV0ZXJpKGdsLlRFWFRVUkVfMkQsIGdsLlRFWFRVUkVfTUFHX0ZJTFRFUiwgZGF0YS5tYWdGaWx0ZXIgPyBkYXRhLm1hZ0ZpbHRlciA6IGdsLkxJTkVBUiApO1xuICAgICAgICBnbC50ZXhQYXJhbWV0ZXJpKGdsLlRFWFRVUkVfMkQsIGdsLlRFWFRVUkVfTUlOX0ZJTFRFUiwgZGF0YS53cmFwUyA/IGRhdGEud3JhcFMgOiBnbC5DTEFNUF9UT19FREdFICk7XG5cbiAgICAgICAgZ2wudGV4UGFyYW1ldGVyaShnbC5URVhUVVJFXzJELCBnbC5URVhUVVJFX1dSQVBfVCwgZGF0YS53cmFwUyA/IGRhdGEud3JhcFMgOiBnbC5DTEFNUF9UT19FREdFKTtcbiAgICAgICAgZ2wudGV4UGFyYW1ldGVyaShnbC5URVhUVVJFXzJELCBnbC5URVhUVVJFX1dSQVBfUywgZGF0YS53cmFwVCA/IGRhdGEud3JhcFQgOiBnbC5DTEFNUF9UT19FREdFKTtcbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgdGhpcy5zaGFkZXJNYW5hZ2VyLnJlbmRlcmVyLnVwZGF0ZVRleHR1cmUodGV4dHVyZSk7XG4gICAgfVxufTtcblxuLyoqXG4gKiBEZXN0cm95cyB0aGUgc2hhZGVyLlxuICpcbiAqL1xuU2hhZGVyLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLmdsLmRlbGV0ZVByb2dyYW0odGhpcy5wcm9ncmFtKTtcblxuICAgIHRoaXMuZ2wgPSBudWxsO1xuICAgIHRoaXMudW5pZm9ybXMgPSBudWxsO1xuICAgIHRoaXMuYXR0cmlidXRlcyA9IG51bGw7XG5cbiAgICB0aGlzLnZlcnRleFNyYyA9IG51bGw7XG4gICAgdGhpcy5mcmFnbWVudFNyYyA9IG51bGw7XG59O1xuXG5TaGFkZXIucHJvdG90eXBlLl9nbENvbXBpbGUgPSBmdW5jdGlvbiAodHlwZSwgc3JjKVxue1xuICAgIHZhciBzaGFkZXIgPSB0aGlzLmdsLmNyZWF0ZVNoYWRlcih0eXBlKTtcblxuICAgIHRoaXMuZ2wuc2hhZGVyU291cmNlKHNoYWRlciwgc3JjKTtcbiAgICB0aGlzLmdsLmNvbXBpbGVTaGFkZXIoc2hhZGVyKTtcblxuICAgIGlmICghdGhpcy5nbC5nZXRTaGFkZXJQYXJhbWV0ZXIoc2hhZGVyLCB0aGlzLmdsLkNPTVBJTEVfU1RBVFVTKSlcbiAgICB7XG4gICAgICAgIGNvbnNvbGUubG9nKHRoaXMuZ2wuZ2V0U2hhZGVySW5mb0xvZyhzaGFkZXIpKTtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgcmV0dXJuIHNoYWRlcjtcbn07XG4iLCJ2YXIgU2hhZGVyID0gcmVxdWlyZSgnLi9TaGFkZXInKTtcblxuLyoqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAZXh0ZW5kcyBQSVhJLlNoYWRlclxuICogQHBhcmFtIHNoYWRlck1hbmFnZXIge1BJWEkuU2hhZGVyTWFuYWdlcn0gVGhlIHdlYmdsIHNoYWRlciBtYW5hZ2VyIHRoaXMgc2hhZGVyIHdvcmtzIGZvci5cbiAqIEBwYXJhbSBbdmVydGV4U3JjXSB7c3RyaW5nfSBUaGUgc291cmNlIG9mIHRoZSB2ZXJ0ZXggc2hhZGVyLlxuICogQHBhcmFtIFtmcmFnbWVudFNyY10ge3N0cmluZ30gVGhlIHNvdXJjZSBvZiB0aGUgZnJhZ21lbnQgc2hhZGVyLlxuICogQHBhcmFtIFtjdXN0b21Vbmlmb3Jtc10ge29iamVjdH0gQ3VzdG9tIHVuaWZvcm1zIHRvIHVzZSB0byBhdWdtZW50IHRoZSBidWlsdC1pbiBvbmVzLlxuICogQHBhcmFtIFtmcmFnbWVudFNyY10ge3N0cmluZ30gVGhlIHNvdXJjZSBvZiB0aGUgZnJhZ21lbnQgc2hhZGVyLlxuICovXG5mdW5jdGlvbiBUZXh0dXJlU2hhZGVyKHNoYWRlck1hbmFnZXIsIHZlcnRleFNyYywgZnJhZ21lbnRTcmMsIGN1c3RvbVVuaWZvcm1zLCBjdXN0b21BdHRyaWJ1dGVzKVxue1xuICAgIHZhciB1bmlmb3JtcyA9IHtcblxuICAgICAgICB1U2FtcGxlcjogICAgICAgICAgIHsgdHlwZTogJ3NhbXBsZXIyRCcsIHZhbHVlOiAwIH0sXG4gICAgICAgIHByb2plY3Rpb25NYXRyaXg6ICAgeyB0eXBlOiAnbWF0MycsIHZhbHVlOiBuZXcgRmxvYXQzMkFycmF5KFsxLCAwLCAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgMSwgMCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsIDAsIDFdKSB9XG4gICAgfTtcblxuICAgIGlmIChjdXN0b21Vbmlmb3JtcylcbiAgICB7XG4gICAgICAgIGZvciAodmFyIHUgaW4gY3VzdG9tVW5pZm9ybXMpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHVuaWZvcm1zW3VdID0gY3VzdG9tVW5pZm9ybXNbdV07XG4gICAgICAgIH1cbiAgICB9XG5cblxuICAgIHZhciBhdHRyaWJ1dGVzID0ge1xuICAgICAgICBhVmVydGV4UG9zaXRpb246ICAgIDAsXG4gICAgICAgIGFUZXh0dXJlQ29vcmQ6ICAgICAgMCxcbiAgICAgICAgYUNvbG9yOiAgICAgICAgICAgICAwXG4gICAgfTtcblxuICAgIGlmIChjdXN0b21BdHRyaWJ1dGVzKVxuICAgIHtcbiAgICAgICAgZm9yICh2YXIgYSBpbiBjdXN0b21BdHRyaWJ1dGVzKVxuICAgICAgICB7XG4gICAgICAgICAgICBhdHRyaWJ1dGVzW2FdID0gY3VzdG9tQXR0cmlidXRlc1thXTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoZSB2ZXJ0ZXggc2hhZGVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7c3RyaW5nfVxuICAgICAqL1xuICAgIHZlcnRleFNyYyA9IHZlcnRleFNyYyB8fCBUZXh0dXJlU2hhZGVyLmRlZmF1bHRWZXJ0ZXhTcmM7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgZnJhZ21lbnQgc2hhZGVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7c3RyaW5nfVxuICAgICAqL1xuICAgIGZyYWdtZW50U3JjID0gZnJhZ21lbnRTcmMgfHwgVGV4dHVyZVNoYWRlci5kZWZhdWx0RnJhZ21lbnRTcmM7XG5cbiAgICBTaGFkZXIuY2FsbCh0aGlzLCBzaGFkZXJNYW5hZ2VyLCB2ZXJ0ZXhTcmMsIGZyYWdtZW50U3JjLCB1bmlmb3JtcywgYXR0cmlidXRlcyk7XG59XG5cbi8vIGNvbnN0cnVjdG9yXG5UZXh0dXJlU2hhZGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoU2hhZGVyLnByb3RvdHlwZSk7XG5UZXh0dXJlU2hhZGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFRleHR1cmVTaGFkZXI7XG5tb2R1bGUuZXhwb3J0cyA9IFRleHR1cmVTaGFkZXI7XG5cbi8qKlxuICogVGhlIGRlZmF1bHQgdmVydGV4IHNoYWRlciBzb3VyY2VcbiAqXG4gKiBAc3RhdGljXG4gKiBAY29uc3RhbnRcbiAqL1xuVGV4dHVyZVNoYWRlci5kZWZhdWx0VmVydGV4U3JjID0gW1xuICAgICdwcmVjaXNpb24gbG93cCBmbG9hdDsnLFxuICAgICdhdHRyaWJ1dGUgdmVjMiBhVmVydGV4UG9zaXRpb247JyxcbiAgICAnYXR0cmlidXRlIHZlYzIgYVRleHR1cmVDb29yZDsnLFxuICAgICdhdHRyaWJ1dGUgdmVjNCBhQ29sb3I7JyxcblxuICAgICd1bmlmb3JtIG1hdDMgcHJvamVjdGlvbk1hdHJpeDsnLFxuXG4gICAgJ3ZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkOycsXG4gICAgJ3ZhcnlpbmcgdmVjNCB2Q29sb3I7JyxcblxuICAgICd2b2lkIG1haW4odm9pZCl7JyxcbiAgICAnICAgZ2xfUG9zaXRpb24gPSB2ZWM0KChwcm9qZWN0aW9uTWF0cml4ICogdmVjMyhhVmVydGV4UG9zaXRpb24sIDEuMCkpLnh5LCAwLjAsIDEuMCk7JyxcbiAgICAnICAgdlRleHR1cmVDb29yZCA9IGFUZXh0dXJlQ29vcmQ7JyxcbiAgICAnICAgdkNvbG9yID0gdmVjNChhQ29sb3IucmdiICogYUNvbG9yLmEsIGFDb2xvci5hKTsnLFxuICAgICd9J1xuXS5qb2luKCdcXG4nKTtcblxuLyoqXG4gKiBUaGUgZGVmYXVsdCBmcmFnbWVudCBzaGFkZXIgc291cmNlXG4gKlxuICogQHN0YXRpY1xuICogQGNvbnN0YW50XG4gKi9cblRleHR1cmVTaGFkZXIuZGVmYXVsdEZyYWdtZW50U3JjID0gW1xuICAgICdwcmVjaXNpb24gbG93cCBmbG9hdDsnLFxuXG4gICAgJ3ZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkOycsXG4gICAgJ3ZhcnlpbmcgdmVjNCB2Q29sb3I7JyxcblxuICAgICd1bmlmb3JtIHNhbXBsZXIyRCB1U2FtcGxlcjsnLFxuXG4gICAgJ3ZvaWQgbWFpbih2b2lkKXsnLFxuICAgICcgICBnbF9GcmFnQ29sb3IgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZUZXh0dXJlQ29vcmQpICogdkNvbG9yIDsnLFxuICAgICd9J1xuXS5qb2luKCdcXG4nKTtcbiIsInZhciBTaGFkZXIgPSByZXF1aXJlKCdwaXhpLWdsLWNvcmUnKS5HTFNoYWRlcjtcblxuLyoqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAZXh0ZW5kcyBQSVhJLlNoYWRlclxuICogQHBhcmFtIHNoYWRlck1hbmFnZXIge1BJWEkuU2hhZGVyTWFuYWdlcn0gVGhlIHdlYmdsIHNoYWRlciBtYW5hZ2VyIHRoaXMgc2hhZGVyIHdvcmtzIGZvci5cbiAqIEBwYXJhbSBbdmVydGV4U3JjXSB7c3RyaW5nfSBUaGUgc291cmNlIG9mIHRoZSB2ZXJ0ZXggc2hhZGVyLlxuICogQHBhcmFtIFtmcmFnbWVudFNyY10ge3N0cmluZ30gVGhlIHNvdXJjZSBvZiB0aGUgZnJhZ21lbnQgc2hhZGVyLlxuICogQHBhcmFtIFtjdXN0b21Vbmlmb3Jtc10ge29iamVjdH0gQ3VzdG9tIHVuaWZvcm1zIHRvIHVzZSB0byBhdWdtZW50IHRoZSBidWlsdC1pbiBvbmVzLlxuICogQHBhcmFtIFtmcmFnbWVudFNyY10ge3N0cmluZ30gVGhlIHNvdXJjZSBvZiB0aGUgZnJhZ21lbnQgc2hhZGVyLlxuICovXG5mdW5jdGlvbiBUZXh0dXJlU2hhZGVyKGdsKVxue1xuICAgIC8qKlxuICAgICAqIFRoZSB2ZXJ0ZXggc2hhZGVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7c3RyaW5nfVxuICAgICAqL1xuICAgIHZlcnRleFNyYyA9IFRleHR1cmVTaGFkZXIuZGVmYXVsdFZlcnRleFNyYztcblxuICAgIC8qKlxuICAgICAqIFRoZSBmcmFnbWVudCBzaGFkZXIuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtzdHJpbmd9XG4gICAgICovXG4gICAgZnJhZ21lbnRTcmMgPSBUZXh0dXJlU2hhZGVyLmRlZmF1bHRGcmFnbWVudFNyYztcblxuICAgIFNoYWRlci5jYWxsKHRoaXMsIGdsLCB2ZXJ0ZXhTcmMsIGZyYWdtZW50U3JjKTsvLywgdW5pZm9ybXMsIGF0dHJpYnV0ZXMpO1xuXG59XG5cbi8vIGNvbnN0cnVjdG9yXG5UZXh0dXJlU2hhZGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoU2hhZGVyLnByb3RvdHlwZSk7XG5UZXh0dXJlU2hhZGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFRleHR1cmVTaGFkZXI7XG5tb2R1bGUuZXhwb3J0cyA9IFRleHR1cmVTaGFkZXI7XG5cbi8qKlxuICogVGhlIGRlZmF1bHQgdmVydGV4IHNoYWRlciBzb3VyY2VcbiAqXG4gKiBAc3RhdGljXG4gKiBAY29uc3RhbnRcbiAqL1xuVGV4dHVyZVNoYWRlci5kZWZhdWx0VmVydGV4U3JjID0gW1xuICAgICdwcmVjaXNpb24gbG93cCBmbG9hdDsnLFxuICAgICdhdHRyaWJ1dGUgdmVjMiBhVmVydGV4UG9zaXRpb247JyxcbiAgICAnYXR0cmlidXRlIHZlYzIgYVRleHR1cmVDb29yZDsnLFxuICAgICdhdHRyaWJ1dGUgdmVjNCBhQ29sb3I7JyxcblxuICAgICd1bmlmb3JtIG1hdDMgcHJvamVjdGlvbk1hdHJpeDsnLFxuXG4gICAgJ3ZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkOycsXG4gICAgJ3ZhcnlpbmcgdmVjNCB2Q29sb3I7JyxcblxuICAgICd2b2lkIG1haW4odm9pZCl7JyxcbiAgICAnICAgZ2xfUG9zaXRpb24gPSB2ZWM0KChwcm9qZWN0aW9uTWF0cml4ICogdmVjMyhhVmVydGV4UG9zaXRpb24sIDEuMCkpLnh5LCAwLjAsIDEuMCk7JyxcbiAgICAnICAgdlRleHR1cmVDb29yZCA9IGFUZXh0dXJlQ29vcmQ7JyxcbiAgICAnICAgdkNvbG9yID0gdmVjNChhQ29sb3IucmdiICogYUNvbG9yLmEsIGFDb2xvci5hKTsnLFxuICAgICd9J1xuXS5qb2luKCdcXG4nKTtcblxuLyoqXG4gKiBUaGUgZGVmYXVsdCBmcmFnbWVudCBzaGFkZXIgc291cmNlXG4gKlxuICogQHN0YXRpY1xuICogQGNvbnN0YW50XG4gKi9cblRleHR1cmVTaGFkZXIuZGVmYXVsdEZyYWdtZW50U3JjID0gW1xuICAgICdwcmVjaXNpb24gbG93cCBmbG9hdDsnLFxuXG4gICAgJ3ZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkOycsXG4gICAgJ3ZhcnlpbmcgdmVjNCB2Q29sb3I7JyxcblxuICAgICd1bmlmb3JtIHNhbXBsZXIyRCB1U2FtcGxlcjsnLFxuXG4gICAgJ3ZvaWQgbWFpbih2b2lkKXsnLFxuICAgICcgICBnbF9GcmFnQ29sb3IgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZUZXh0dXJlQ29vcmQpICogdkNvbG9yIDsnLFxuICAgICd9J1xuXS5qb2luKCdcXG4nKTtcbiIsInZhciBXZWJHTE1hbmFnZXIgPSByZXF1aXJlKCcuLi9tYW5hZ2Vycy9XZWJHTE1hbmFnZXInKTtcblxuLyoqXG4gKiBCYXNlIGZvciBhIGNvbW1vbiBvYmplY3QgcmVuZGVyZXIgdGhhdCBjYW4gYmUgdXNlZCBhcyBhIHN5c3RlbSByZW5kZXJlciBwbHVnaW4uXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLldlYkdMTWFuYWdlclxuICogQG1lbWJlcm9mIFBJWElcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5XZWJHTFJlbmRlcmVyfSBUaGUgcmVuZGVyZXIgdGhpcyBvYmplY3QgcmVuZGVyZXIgd29ya3MgZm9yLlxuICovXG5mdW5jdGlvbiBPYmplY3RSZW5kZXJlcihyZW5kZXJlcilcbntcbiAgICBXZWJHTE1hbmFnZXIuY2FsbCh0aGlzLCByZW5kZXJlcik7XG59XG5cblxuT2JqZWN0UmVuZGVyZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShXZWJHTE1hbmFnZXIucHJvdG90eXBlKTtcbk9iamVjdFJlbmRlcmVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IE9iamVjdFJlbmRlcmVyO1xubW9kdWxlLmV4cG9ydHMgPSBPYmplY3RSZW5kZXJlcjtcblxuLyoqXG4gKiBTdGFydHMgdGhlIHJlbmRlcmVyIGFuZCBzZXRzIHRoZSBzaGFkZXJcbiAqXG4gKi9cbk9iamVjdFJlbmRlcmVyLnByb3RvdHlwZS5zdGFydCA9IGZ1bmN0aW9uICgpXG57XG4gICAgLy8gc2V0IHRoZSBzaGFkZXIuLlxufTtcblxuLyoqXG4gKiBTdG9wcyB0aGUgcmVuZGVyZXJcbiAqXG4gKi9cbk9iamVjdFJlbmRlcmVyLnByb3RvdHlwZS5zdG9wID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLmZsdXNoKCk7XG59O1xuXG4vKipcbiAqIGZsdXNoZXNcbiAqXG4gKi9cbk9iamVjdFJlbmRlcmVyLnByb3RvdHlwZS5mbHVzaCA9IGZ1bmN0aW9uICgpXG57XG4gICAgLy8gZmx1c2ghXG59O1xuXG4vKipcbiAqIFJlbmRlcnMgYW4gb2JqZWN0XG4gKlxuICogQHBhcmFtIG9iamVjdCB7UElYSS5EaXNwbGF5T2JqZWN0fSBUaGUgb2JqZWN0IHRvIHJlbmRlci5cbiAqL1xuT2JqZWN0UmVuZGVyZXIucHJvdG90eXBlLnJlbmRlciA9IGZ1bmN0aW9uIChvYmplY3QpIC8vIGpzaGludCB1bnVzZWQ6ZmFsc2VcbntcbiAgICAvLyByZW5kZXIgdGhlIG9iamVjdFxufTtcbiIsIi8qKlxuICogSGVscGVyIGNsYXNzIHRvIGNyZWF0ZSBhIHF1YWRcbiAqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gZ2wge1dlYkdMUmVuZGVyaW5nQ29udGV4dH0gVGhlIGdsIGNvbnRleHQgZm9yIHRoaXMgcXVhZCB0byB1c2UuXG4gKi9cbmZ1bmN0aW9uIFF1YWQoZ2wpXG57XG4gICAgLypcbiAgICAgKiB0aGUgY3VycmVudCBXZWJHTCBkcmF3aW5nIGNvbnRleHRcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1dlYkdMUmVuZGVyaW5nQ29udGV4dH1cbiAgICAgKi9cbiAgICB0aGlzLmdsID0gZ2w7XG5cbi8vICAgIHRoaXMudGV4dHVyZXMgPSBuZXcgVGV4dHVyZVV2cygpO1xuXG4gICAgLyoqXG4gICAgICogQW4gYXJyYXkgb2YgdmVydGljZXNcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge0Zsb2F0MzJBcnJheX1cbiAgICAgKi9cbiAgICB0aGlzLnZlcnRpY2VzID0gbmV3IEZsb2F0MzJBcnJheShbXG4gICAgICAgIDAsMCxcbiAgICAgICAgMjAwLDAsXG4gICAgICAgIDIwMCwyMDAsXG4gICAgICAgIDAsMjAwXG4gICAgXSk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgVXZzIG9mIHRoZSBxdWFkXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtGbG9hdDMyQXJyYXl9XG4gICAgICovXG4gICAgdGhpcy51dnMgPSBuZXcgRmxvYXQzMkFycmF5KFtcbiAgICAgICAgMCwwLFxuICAgICAgICAxLDAsXG4gICAgICAgIDEsMSxcbiAgICAgICAgMCwxXG4gICAgXSk7XG5cbi8vICAgIHZhciB3aGl0ZSA9ICgweEZGRkZGRiA+PiAxNikgKyAoMHhGRkZGRkYgJiAweGZmMDApICsgKCgweEZGRkZGRiAmIDB4ZmYpIDw8IDE2KSArICgxICogMjU1IDw8IDI0KTtcbiAgICAvL1RPRE8gY29udmVydCB0aGlzIHRvIGEgMzIgdW5zaWduZWQgaW50IGFycmF5XG4gICAgLyoqXG4gICAgICogVGhlIGNvbG9yIGNvbXBvbmVudHMgb2YgdGhlIHRyaWFuZ2xlc1xuICAgICAqXG4gICAgICogQG1lbWJlciB7RmxvYXQzMkFycmF5fVxuICAgICAqL1xuICAgIHRoaXMuY29sb3JzID0gbmV3IEZsb2F0MzJBcnJheShbXG4gICAgICAgIDEsMSwxLDEsXG4gICAgICAgIDEsMSwxLDEsXG4gICAgICAgIDEsMSwxLDEsXG4gICAgICAgIDEsMSwxLDFcbiAgICBdKTtcblxuICAgIC8qXG4gICAgICogQG1lbWJlciB7VWludDE2QXJyYXl9IEFuIGFycmF5IGNvbnRhaW5pbmcgdGhlIGluZGljZXMgb2YgdGhlIHZlcnRpY2VzXG4gICAgICovXG4gICAgdGhpcy5pbmRpY2VzID0gbmV3IFVpbnQxNkFycmF5KFtcbiAgICAgICAgMCwgMSwgMiwgMCwgMywgMlxuICAgIF0pO1xuXG4gICAgLypcbiAgICAgKiBAbWVtYmVyIHtXZWJHTEJ1ZmZlcn0gVGhlIHZlcnRleCBidWZmZXJcbiAgICAgKi9cbiAgICB0aGlzLnZlcnRleEJ1ZmZlciA9IGdsLmNyZWF0ZUJ1ZmZlcigpO1xuXG4gICAgLypcbiAgICAgKiBAbWVtYmVyIHtXZWJHTEJ1ZmZlcn0gVGhlIGluZGV4IGJ1ZmZlclxuICAgICAqL1xuICAgIHRoaXMuaW5kZXhCdWZmZXIgPSBnbC5jcmVhdGVCdWZmZXIoKTtcblxuICAgIGdsLmJpbmRCdWZmZXIoZ2wuQVJSQVlfQlVGRkVSLCB0aGlzLnZlcnRleEJ1ZmZlcik7XG4gICAgZ2wuYnVmZmVyRGF0YShnbC5BUlJBWV9CVUZGRVIsICg4ICsgOCArIDE2KSAqIDQsIGdsLkRZTkFNSUNfRFJBVyk7XG5cbiAgICBnbC5iaW5kQnVmZmVyKGdsLkVMRU1FTlRfQVJSQVlfQlVGRkVSLCB0aGlzLmluZGV4QnVmZmVyKTtcbiAgICBnbC5idWZmZXJEYXRhKGdsLkVMRU1FTlRfQVJSQVlfQlVGRkVSLCB0aGlzLmluZGljZXMsIGdsLlNUQVRJQ19EUkFXKTtcblxuICAgIHRoaXMudXBsb2FkKCk7XG59XG5cblF1YWQucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gUXVhZDtcblxuLyoqXG4gKiBNYXBzIHR3byBSZWN0YW5nbGUgdG8gdGhlIHF1YWRcbiAqIEBwYXJhbSByZWN0IHtQSVhJLlJlY3RhbmdsZX0gdGhlIGZpcnN0IHJlY3RhbmdsZVxuICogQHBhcmFtIHJlY3QyIHtQSVhJLlJlY3RhbmdsZX0gdGhlIHNlY29uZCByZWN0YW5nbGVcbiAqL1xuUXVhZC5wcm90b3R5cGUubWFwID0gZnVuY3Rpb24ocmVjdCwgcmVjdDIpXG57XG4gICAgdmFyIHggPSAwOyAvL3JlY3QyLnggLyByZWN0LndpZHRoO1xuICAgIHZhciB5ID0gMDsgLy9yZWN0Mi55IC8gcmVjdC5oZWlnaHQ7XG5cbiAgICB0aGlzLnV2c1swXSA9IHg7XG4gICAgdGhpcy51dnNbMV0gPSB5O1xuXG4gICAgdGhpcy51dnNbMl0gPSB4ICsgcmVjdDIud2lkdGggLyByZWN0LndpZHRoO1xuICAgIHRoaXMudXZzWzNdID0geTtcblxuICAgIHRoaXMudXZzWzRdID0geCArIHJlY3QyLndpZHRoIC8gcmVjdC53aWR0aDtcbiAgICB0aGlzLnV2c1s1XSA9IHkgKyByZWN0Mi5oZWlnaHQgLyByZWN0LmhlaWdodDtcblxuICAgIHRoaXMudXZzWzZdID0geDtcbiAgICB0aGlzLnV2c1s3XSA9IHkgKyByZWN0Mi5oZWlnaHQgLyByZWN0LmhlaWdodDtcblxuICAgIC8vLyAtLS0tLVxuICAgIHggPSByZWN0Mi54O1xuICAgIHkgPSByZWN0Mi55O1xuXG4gICAgdGhpcy52ZXJ0aWNlc1swXSA9IHg7XG4gICAgdGhpcy52ZXJ0aWNlc1sxXSA9IHk7XG5cbiAgICB0aGlzLnZlcnRpY2VzWzJdID0geCArIHJlY3QyLndpZHRoO1xuICAgIHRoaXMudmVydGljZXNbM10gPSB5O1xuXG4gICAgdGhpcy52ZXJ0aWNlc1s0XSA9IHggKyByZWN0Mi53aWR0aDtcbiAgICB0aGlzLnZlcnRpY2VzWzVdID0geSArIHJlY3QyLmhlaWdodDtcblxuICAgIHRoaXMudmVydGljZXNbNl0gPSB4O1xuICAgIHRoaXMudmVydGljZXNbN10gPSB5ICsgcmVjdDIuaGVpZ2h0O1xuXG4gICAgdGhpcy51cGxvYWQoKTtcbn07XG5cbi8qKlxuICogQmluZHMgdGhlIGJ1ZmZlciBhbmQgdXBsb2FkcyB0aGUgZGF0YVxuICovXG5RdWFkLnByb3RvdHlwZS51cGxvYWQgPSBmdW5jdGlvbigpXG57XG4gICAgdmFyIGdsID0gdGhpcy5nbDtcblxuICAgIC8vIFRPRE8gY291bGQgcHJvYmFibHkgYmUgcHVzaGVkIGludG8gb25lIHVwbG9hZCFcbiAgICBnbC5iaW5kQnVmZmVyKCBnbC5BUlJBWV9CVUZGRVIsIHRoaXMudmVydGV4QnVmZmVyICk7XG5cbiAgICBnbC5idWZmZXJTdWJEYXRhKGdsLkFSUkFZX0JVRkZFUiwgMCwgdGhpcy52ZXJ0aWNlcyk7XG5cbiAgICBnbC5idWZmZXJTdWJEYXRhKGdsLkFSUkFZX0JVRkZFUiwgOCAqIDQsIHRoaXMudXZzKTtcblxuICAgIGdsLmJ1ZmZlclN1YkRhdGEoZ2wuQVJSQVlfQlVGRkVSLCAoOCArIDgpICogNCwgdGhpcy5jb2xvcnMpO1xufTtcblxuUXVhZC5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uKClcbntcbiAgICB2YXIgZ2wgPSB0aGlzLmdsO1xuICAgIFxuICAgICBnbC5kZWxldGVCdWZmZXIodGhpcy52ZXJ0ZXhCdWZmZXIpO1xuICAgICBnbC5kZWxldGVCdWZmZXIodGhpcy5pbmRleEJ1ZmZlcik7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IFF1YWQ7XG5cblxuIiwidmFyIG1hdGggPSByZXF1aXJlKCcuLi8uLi8uLi9tYXRoJyksXG4gICAgdXRpbHMgPSByZXF1aXJlKCcuLi8uLi8uLi91dGlscycpLFxuICAgIENPTlNUID0gcmVxdWlyZSgnLi4vLi4vLi4vY29uc3QnKSxcbiAgICAgICAgXG4gICAgR0xUZXh0dXJlID0gcmVxdWlyZSgncGl4aS1nbC1jb3JlJykuR0xUZXh0dXJlLFxuICAgIEdMRnJhbWVidWZmZXIgPSByZXF1aXJlKCdwaXhpLWdsLWNvcmUnKS5HTEZyYW1lYnVmZmVyLFxuICAgIFxuICAgIFN0ZW5jaWxNYXNrU3RhY2sgPSByZXF1aXJlKCcuL1N0ZW5jaWxNYXNrU3RhY2snKTtcblxuLyoqXG4gKiBAYXV0aG9yIE1hdCBHcm92ZXMgaHR0cDovL21hdGdyb3Zlcy5jb20vIEBEb29ybWF0MjNcbiAqL1xuXG4vKipcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqIEBwYXJhbSBnbCB7V2ViR0xSZW5kZXJpbmdDb250ZXh0fSB0aGUgY3VycmVudCBXZWJHTCBkcmF3aW5nIGNvbnRleHRcbiAqIEBwYXJhbSB3aWR0aCB7bnVtYmVyfSB0aGUgaG9yaXpvbnRhbCByYW5nZSBvZiB0aGUgZmlsdGVyXG4gKiBAcGFyYW0gaGVpZ2h0IHtudW1iZXJ9IHRoZSB2ZXJ0aWNhbCByYW5nZSBvZiB0aGUgZmlsdGVyXG4gKiBAcGFyYW0gc2NhbGVNb2RlIHtudW1iZXJ9IFNlZSB7QGxpbmsgUElYSS5TQ0FMRV9NT0RFU30gZm9yIHBvc3NpYmxlIHZhbHVlc1xuICogQHBhcmFtIHJlc29sdXRpb24ge251bWJlcn0gdGhlIGN1cnJlbnQgcmVzb2x1dGlvblxuICogQHBhcmFtIHJvb3Qge2Jvb2xlYW59IFdoZXRoZXIgdGhpcyBvYmplY3QgaXMgdGhlIHJvb3QgZWxlbWVudCBvciBub3RcbiAqL1xudmFyIFJlbmRlclRhcmdldCA9IGZ1bmN0aW9uKGdsLCB3aWR0aCwgaGVpZ2h0LCBzY2FsZU1vZGUsIHJlc29sdXRpb24sIHJvb3QpXG57XG4gICAgLy9UT0RPIFJlc29sdXRpb24gY291bGQgZ28gaGVyZSAoIGVnIGxvdyByZXMgYmx1cnMgKVxuXG4gICAgLyoqXG4gICAgICogVGhlIGN1cnJlbnQgV2ViR0wgZHJhd2luZyBjb250ZXh0LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7V2ViR0xSZW5kZXJpbmdDb250ZXh0fVxuICAgICAqL1xuICAgIHRoaXMuZ2wgPSBnbDtcblxuICAgIC8vIG5leHQgdGltZSB0byBjcmVhdGUgYSBmcmFtZSBidWZmZXIgYW5kIHRleHR1cmVcblxuICAgIC8qKlxuICAgICAqIEEgZnJhbWUgYnVmZmVyXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtXZWJHTEZyYW1lQnVmZmVyfVxuICAgICAqL1xuICAgIHRoaXMuZnJhbWVCdWZmZXIgPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHRleHR1cmVcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuVGV4dHVyZX1cbiAgICAgKi9cbiAgICB0aGlzLnRleHR1cmUgPSBudWxsO1xuXG4gICAgdGhpcy5jbGVhckNvbG9yID0gWzAsIDAsIDAsIDBdO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHNpemUgb2YgdGhlIG9iamVjdCBhcyBhIHJlY3RhbmdsZVxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5SZWN0YW5nbGV9XG4gICAgICovXG4gICAgdGhpcy5zaXplID0gbmV3IG1hdGguUmVjdGFuZ2xlKDAsIDAsIDEsIDEpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGN1cnJlbnQgcmVzb2x1dGlvblxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMucmVzb2x1dGlvbiA9IHJlc29sdXRpb24gfHwgQ09OU1QuUkVTT0xVVElPTjtcblxuICAgIC8qKlxuICAgICAqIFRoZSBwcm9qZWN0aW9uIG1hdHJpeFxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5NYXRyaXh9XG4gICAgICovXG4gICAgdGhpcy5wcm9qZWN0aW9uTWF0cml4ID0gbmV3IG1hdGguTWF0cml4KCk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgb2JqZWN0J3MgdHJhbnNmb3JtXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLk1hdHJpeH1cbiAgICAgKi9cbiAgICB0aGlzLnRyYW5zZm9ybSA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgZnJhbWUuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlJlY3RhbmdsZX1cbiAgICAgKi9cbiAgICB0aGlzLmZyYW1lID0gbnVsbDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBzdGVuY2lsIGJ1ZmZlciBzdG9yZXMgbWFza2luZyBkYXRhIGZvciB0aGUgcmVuZGVyIHRhcmdldFxuICAgICAqXG4gICAgICogQG1lbWJlciB7V2ViR0xSZW5kZXJCdWZmZXJ9XG4gICAgICovXG4gICAgdGhpcy5zdGVuY2lsQnVmZmVyID0gbnVsbDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBkYXRhIHN0cnVjdHVyZSBmb3IgdGhlIHN0ZW5jaWwgbWFza3NcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuU3RlbmNpbE1hc2tTdGFja31cbiAgICAgKi9cbiAgICB0aGlzLnN0ZW5jaWxNYXNrU3RhY2sgPSBuZXcgU3RlbmNpbE1hc2tTdGFjaygpO1xuXG4gICAgLyoqXG4gICAgICogU3RvcmVzIGZpbHRlciBkYXRhIGZvciB0aGUgcmVuZGVyIHRhcmdldFxuICAgICAqXG4gICAgICogQG1lbWJlciB7b2JqZWN0W119XG4gICAgICovXG4gICAgdGhpcy5maWx0ZXJTdGFjayA9IFtcbiAgICAgICAge1xuICAgICAgICAgICAgcmVuZGVyVGFyZ2V0OnRoaXMsXG4gICAgICAgICAgICBmaWx0ZXI6W10sXG4gICAgICAgICAgICBib3VuZHM6dGhpcy5zaXplXG4gICAgICAgIH1cbiAgICBdO1xuXG5cbiAgICAvKipcbiAgICAgKiBUaGUgc2NhbGUgbW9kZS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCBQSVhJLlNDQUxFX01PREVTLkRFRkFVTFRcbiAgICAgKiBAc2VlIFBJWEkuU0NBTEVfTU9ERVNcbiAgICAgKi9cbiAgICB0aGlzLnNjYWxlTW9kZSA9IHNjYWxlTW9kZSB8fCBDT05TVC5TQ0FMRV9NT0RFUy5ERUZBVUxUO1xuXG4gICAgLyoqXG4gICAgICogV2hldGhlciB0aGlzIG9iamVjdCBpcyB0aGUgcm9vdCBlbGVtZW50IG9yIG5vdFxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKi9cbiAgICB0aGlzLnJvb3QgPSByb290O1xuXG4gICAgdGhpcy5mcmFtZUJ1ZmZlciA9IEdMRnJhbWVidWZmZXIuY3JlYXRlUkdCQShnbCwgMTAwLCAxMDApO1xuICAgIGlmKHRoaXMuZnJhbWVCdWZmZXIpdGhpcy5mcmFtZUJ1ZmZlci51bmJpbmQoKTtcblxuICAgLy8gdGhpcy5mcmFtZUJ1ZmZlciA9IHtmcmFtZWJ1ZmZlcjpudWxsLCBiaW5kOmZ1bmN0aW9uKCl7fSwgY2xlYXI6ZnVuY3Rpb24oKXt9LCByZXNpemU6ZnVuY3Rpb24oKXt9fS8vbmV3IEdMRnJhbWVidWZmZXIuY3JlYXRlUkdCQShnbCwgMTAwLCAxMDApO1xuXG5cblxuICAgIGlmICghdGhpcy5yb290KVxuICAgIHtcbiAgICAgICAgLypcbiAgICAgICAgICAgIEEgZnJhbWUgYnVmZmVyIG5lZWRzIGEgdGFyZ2V0IHRvIHJlbmRlciB0by4uXG4gICAgICAgICAgICBjcmVhdGUgYSB0ZXh0dXJlIGFuZCBiaW5kIGl0IGF0dGFjaCBpdCB0byB0aGUgZnJhbWVidWZmZXIuLlxuICAgICAgICAgKi9cbiAgICAgICAgXG4gICAgICAgIC8vIGNyZWF0ZSBhIHRleHR1cmUgdG8gYmluZCBhdHRhY2ggdG8gdGhlIGZyYW1lQnVmZmVyLi5cbiAgICAgICAgdmFyIHRleHR1cmUgPSBuZXcgR0xUZXh0dXJlKGdsKTtcblxuICAgICAgICB0ZXh0dXJlLmVuYWJsZUxpbmVhclNjYWxpbmcoKVxuICAgICAgICB0ZXh0dXJlLmVuYWJsZVdyYXBDbGFtcCgpXG5cbiAgICAgICAgdGhpcy5mcmFtZUJ1ZmZlci5lbmFibGVUZXh0dXJlKHRleHR1cmUpO1xuXG4gICAgICAgIC8vIFRPRE8gY2hhbmdlIVxuICAgICAgICAvLyB0aGlzIGlzIHVzZWQgYnkgdGhlIGJhc2UgdGV4dHVyZVxuICAgICAgICB0aGlzLnRleHR1cmUgPSB0ZXh0dXJlLnRleHR1cmU7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIC8vIG1ha2UgaXQgYSBudWxsIGZyYW1lYnVmZmVyLi5cbiAgICAgICAgdGhpcy5mcmFtZUJ1ZmZlci5mcmFtZWJ1ZmZlciA9IG51bGw7XG4gICAgfVxuXG4gICAgdGhpcy5yZXNpemUod2lkdGgsIGhlaWdodCk7XG59O1xuXG5SZW5kZXJUYXJnZXQucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gUmVuZGVyVGFyZ2V0O1xubW9kdWxlLmV4cG9ydHMgPSBSZW5kZXJUYXJnZXQ7XG5cbi8qKlxuICogQ2xlYXJzIHRoZSBmaWx0ZXIgdGV4dHVyZS5cbiAqXG4gKiBAcGFyYW0gW2JpbmQ9ZmFsc2VdIHtib29sZWFufSBTaG91bGQgd2UgYmluZCBvdXIgZnJhbWVidWZmZXIgYmVmb3JlIGNsZWFyaW5nP1xuICovXG5SZW5kZXJUYXJnZXQucHJvdG90eXBlLmNsZWFyID0gZnVuY3Rpb24oY2xlYXJDb2xvcilcbntcbiAgICB2YXIgY2MgPSBjbGVhckNvbG9yIHx8IHRoaXMuY2xlYXJDb2xvclxuICAgIHRoaXMuZnJhbWVCdWZmZXIuY2xlYXIoY2NbMF0sY2NbMV0sY2NbMl0sY2NbM10pLy9yLGcsYixhKTtcbn07XG5cbi8qKlxuICogQmluZHMgdGhlIHN0ZW5jaWwgYnVmZmVyLlxuICpcbiAqL1xuUmVuZGVyVGFyZ2V0LnByb3RvdHlwZS5hdHRhY2hTdGVuY2lsQnVmZmVyID0gZnVuY3Rpb24oKVxue1xuICAgIC8vVE9ETyBjaGVjayBpZiBzdGVuY2lsIGlzIGRvbmU/XG4gICAgLyoqXG4gICAgICogVGhlIHN0ZW5jaWwgYnVmZmVyIGlzIHVzZWQgZm9yIG1hc2tpbmcgaW4gcGl4aVxuICAgICAqIGxldHMgY3JlYXRlIG9uZSBhbmQgdGhlbiBhZGQgYXR0YWNoIGl0IHRvIHRoZSBmcmFtZWJ1ZmZlci4uXG4gICAgICovXG4gICAgaWYgKCF0aGlzLnJvb3QpXG4gICAge1xuICAgICAgICB0aGlzLmZyYW1lQnVmZmVyLmVuYWJsZVN0ZW5jaWwoKTtcbiAgICB9XG59O1xuXG4vKipcbiAqIEJpbmRzIHRoZSBidWZmZXJzIGFuZCBpbml0aWFsaXNlcyB0aGUgdmlld3BvcnQuXG4gKlxuICovXG5SZW5kZXJUYXJnZXQucHJvdG90eXBlLmFjdGl2YXRlID0gZnVuY3Rpb24oKVxue1xuICAgIC8vVE9PRCByZWZhY3RvciB1c2FnZSBvZiBmcmFtZS4uXG4gICAgdmFyIGdsID0gdGhpcy5nbDtcblxuICAgIHRoaXMuZnJhbWVCdWZmZXIuYmluZCgpO1xuXG5cbiAgICB2YXIgcHJvamVjdGlvbkZyYW1lID0gdGhpcy5mcmFtZSB8fCB0aGlzLnNpemU7XG5cbiAgICAvLyBUT0RPIGFkZCBhIGRpcnR5IGZsYWcgdG8gdGhpcyBvZiBhIHNldHRlciBmb3IgdGhlIGZyYW1lP1xuICAgIHRoaXMuY2FsY3VsYXRlUHJvamVjdGlvbiggcHJvamVjdGlvbkZyYW1lICk7XG5cbiAgICBpZih0aGlzLnRyYW5zZm9ybSlcbiAgICB7XG4gICAgICAgIHRoaXMucHJvamVjdGlvbk1hdHJpeC5hcHBlbmQodGhpcy50cmFuc2Zvcm0pO1xuICAgIH1cblxuICAgIGdsLnZpZXdwb3J0KDAsMCwgcHJvamVjdGlvbkZyYW1lLndpZHRoICogdGhpcy5yZXNvbHV0aW9uLCBwcm9qZWN0aW9uRnJhbWUuaGVpZ2h0ICogdGhpcy5yZXNvbHV0aW9uKTtcbn07XG5cbi8qKlxuICogVXBkYXRlcyB0aGUgcHJvamVjdGlvbiBtYXRyaXggYmFzZWQgb24gYSBwcm9qZWN0aW9uIGZyYW1lICh3aGljaCBpcyBhIHJlY3RhbmdsZSlcbiAqXG4gKi9cblJlbmRlclRhcmdldC5wcm90b3R5cGUuY2FsY3VsYXRlUHJvamVjdGlvbiA9IGZ1bmN0aW9uIChwcm9qZWN0aW9uRnJhbWUpXG57XG4gICAgdmFyIHBtID0gdGhpcy5wcm9qZWN0aW9uTWF0cml4O1xuXG4gICAgcG0uaWRlbnRpdHkoKTtcblxuICAgIGlmICghdGhpcy5yb290KVxuICAgIHtcbiAgICAgICAgcG0uYSA9IDEgLyBwcm9qZWN0aW9uRnJhbWUud2lkdGgqMjtcbiAgICAgICAgcG0uZCA9IDEgLyBwcm9qZWN0aW9uRnJhbWUuaGVpZ2h0KjI7XG5cbiAgICAgICAgcG0udHggPSAtMSAtIHByb2plY3Rpb25GcmFtZS54ICogcG0uYTtcbiAgICAgICAgcG0udHkgPSAtMSAtIHByb2plY3Rpb25GcmFtZS55ICogcG0uZDtcbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgcG0uYSA9IDEgLyBwcm9qZWN0aW9uRnJhbWUud2lkdGgqMjtcbiAgICAgICAgcG0uZCA9IC0xIC8gcHJvamVjdGlvbkZyYW1lLmhlaWdodCoyO1xuXG4gICAgICAgIHBtLnR4ID0gLTEgLSBwcm9qZWN0aW9uRnJhbWUueCAqIHBtLmE7XG4gICAgICAgIHBtLnR5ID0gMSAtIHByb2plY3Rpb25GcmFtZS55ICogcG0uZDtcbiAgICB9XG59O1xuXG4vKipcbiAqIFJlc2l6ZXMgdGhlIHRleHR1cmUgdG8gdGhlIHNwZWNpZmllZCB3aWR0aCBhbmQgaGVpZ2h0XG4gKlxuICogQHBhcmFtIHdpZHRoIHtOdW1iZXJ9IHRoZSBuZXcgd2lkdGggb2YgdGhlIHRleHR1cmVcbiAqIEBwYXJhbSBoZWlnaHQge051bWJlcn0gdGhlIG5ldyBoZWlnaHQgb2YgdGhlIHRleHR1cmVcbiAqL1xuUmVuZGVyVGFyZ2V0LnByb3RvdHlwZS5yZXNpemUgPSBmdW5jdGlvbiAod2lkdGgsIGhlaWdodClcbntcbiAgICB3aWR0aCA9IHdpZHRoIHwgMDtcbiAgICBoZWlnaHQgPSBoZWlnaHQgfCAwO1xuXG4gICAgaWYgKHRoaXMuc2l6ZS53aWR0aCA9PT0gd2lkdGggJiYgdGhpcy5zaXplLmhlaWdodCA9PT0gaGVpZ2h0KSBcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLnNpemUud2lkdGggPSB3aWR0aDtcbiAgICB0aGlzLnNpemUuaGVpZ2h0ID0gaGVpZ2h0O1xuXG4gICAgdGhpcy5mcmFtZUJ1ZmZlci5yZXNpemUod2lkdGggKiB0aGlzLnJlc29sdXRpb24sIGhlaWdodCAqIHRoaXMucmVzb2x1dGlvbik7XG4gICAgXG4gICAgdmFyIHByb2plY3Rpb25GcmFtZSA9IHRoaXMuZnJhbWUgfHwgdGhpcy5zaXplO1xuXG4gICAgdGhpcy5jYWxjdWxhdGVQcm9qZWN0aW9uKCBwcm9qZWN0aW9uRnJhbWUgKTtcbn07XG5cbi8qKlxuICogRGVzdHJveXMgdGhlIHJlbmRlciB0YXJnZXQuXG4gKlxuICovXG5SZW5kZXJUYXJnZXQucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoKVxue1xuICAgIHZhciBnbCA9IHRoaXMuZ2w7XG4gICAgXG4gICAgdGhpcy5mcmFtZUJ1ZmZlci5kZXN0cm95KCk7XG5cbiAgICB0aGlzLmZyYW1lQnVmZmVyID0gbnVsbDtcbiAgICB0aGlzLnRleHR1cmUgPSBudWxsO1xufTtcbiIsIi8qKlxuICogR2VuZXJpYyBNYXNrIFN0YWNrIGRhdGEgc3RydWN0dXJlXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKi9cbmZ1bmN0aW9uIFN0ZW5jaWxNYXNrU3RhY2soKVxue1xuXHQvKipcbiAgICAgKiBUaGUgYWN0dWFsIHN0YWNrXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHthbnlbXX1cbiAgICAgKi9cbiAgICB0aGlzLnN0ZW5jaWxTdGFjayA9IFtdO1xuXG4gICAgLyoqXG4gICAgICogVE9ETyBAYWx2aW5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICovXG4gICAgdGhpcy5yZXZlcnNlID0gdHJ1ZTtcblxuICAgIC8qKlxuICAgICAqIEludGVybmFsIGNvdW50XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy5jb3VudCA9IDA7XG59XG5cblN0ZW5jaWxNYXNrU3RhY2sucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gU3RlbmNpbE1hc2tTdGFjaztcbm1vZHVsZS5leHBvcnRzID0gU3RlbmNpbE1hc2tTdGFjaztcbiIsIkNPTlNUID0gcmVxdWlyZSgnLi4vLi4vLi4vY29uc3QnKTtcblxuLyoqXG4gKiBNYXBzIGdsIGJsZW5kIGNvbWJpbmF0aW9ucyB0byBXZWJHTFxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICovXG5mdW5jdGlvbiBtYXBXZWJHTEJsZW5kTW9kZXNUb1BpeGkoZ2wsIG9iamVjdClcbntcbiAgICBvYmplY3QgPSBvYmplY3QgfHwge307XG5cbiAgICAvL1RPRE8gLSBwcmVtdWx0aXBseSBhbHBoYSB3b3VsZCBiZSBkaWZmZXJlbnQuXG4gICAgLy9hZGQgYSBib29sZWFuIGZvciB0aGF0IVxuICAgIG9iamVjdFtDT05TVC5CTEVORF9NT0RFUy5OT1JNQUxdICAgICAgICA9IFtnbC5PTkUsICAgICAgIGdsLk9ORV9NSU5VU19TUkNfQUxQSEFdO1xuICAgIG9iamVjdFtDT05TVC5CTEVORF9NT0RFUy5BRERdICAgICAgICAgICA9IFtnbC5TUkNfQUxQSEEsIGdsLkRTVF9BTFBIQV07XG4gICAgb2JqZWN0W0NPTlNULkJMRU5EX01PREVTLk1VTFRJUExZXSAgICAgID0gW2dsLkRTVF9DT0xPUiwgZ2wuT05FX01JTlVTX1NSQ19BTFBIQV07XG4gICAgb2JqZWN0W0NPTlNULkJMRU5EX01PREVTLlNDUkVFTl0gICAgICAgID0gW2dsLlNSQ19BTFBIQSwgZ2wuT05FXTtcbiAgICBvYmplY3RbQ09OU1QuQkxFTkRfTU9ERVMuT1ZFUkxBWV0gICAgICAgPSBbZ2wuT05FLCAgICAgICBnbC5PTkVfTUlOVVNfU1JDX0FMUEhBXTtcbiAgICBvYmplY3RbQ09OU1QuQkxFTkRfTU9ERVMuREFSS0VOXSAgICAgICAgPSBbZ2wuT05FLCAgICAgICBnbC5PTkVfTUlOVVNfU1JDX0FMUEhBXTtcbiAgICBvYmplY3RbQ09OU1QuQkxFTkRfTU9ERVMuTElHSFRFTl0gICAgICAgPSBbZ2wuT05FLCAgICAgICBnbC5PTkVfTUlOVVNfU1JDX0FMUEhBXTtcbiAgICBvYmplY3RbQ09OU1QuQkxFTkRfTU9ERVMuQ09MT1JfRE9ER0VdICAgPSBbZ2wuT05FLCAgICAgICBnbC5PTkVfTUlOVVNfU1JDX0FMUEhBXTtcbiAgICBvYmplY3RbQ09OU1QuQkxFTkRfTU9ERVMuQ09MT1JfQlVSTl0gICAgPSBbZ2wuT05FLCAgICAgICBnbC5PTkVfTUlOVVNfU1JDX0FMUEhBXTtcbiAgICBvYmplY3RbQ09OU1QuQkxFTkRfTU9ERVMuSEFSRF9MSUdIVF0gICAgPSBbZ2wuT05FLCAgICAgICBnbC5PTkVfTUlOVVNfU1JDX0FMUEhBXTtcbiAgICBvYmplY3RbQ09OU1QuQkxFTkRfTU9ERVMuU09GVF9MSUdIVF0gICAgPSBbZ2wuT05FLCAgICAgICBnbC5PTkVfTUlOVVNfU1JDX0FMUEhBXTtcbiAgICBvYmplY3RbQ09OU1QuQkxFTkRfTU9ERVMuRElGRkVSRU5DRV0gICAgPSBbZ2wuT05FLCAgICAgICBnbC5PTkVfTUlOVVNfU1JDX0FMUEhBXTtcbiAgICBvYmplY3RbQ09OU1QuQkxFTkRfTU9ERVMuRVhDTFVTSU9OXSAgICAgPSBbZ2wuT05FLCAgICAgICBnbC5PTkVfTUlOVVNfU1JDX0FMUEhBXTtcbiAgICBvYmplY3RbQ09OU1QuQkxFTkRfTU9ERVMuSFVFXSAgICAgICAgICAgPSBbZ2wuT05FLCAgICAgICBnbC5PTkVfTUlOVVNfU1JDX0FMUEhBXTtcbiAgICBvYmplY3RbQ09OU1QuQkxFTkRfTU9ERVMuU0FUVVJBVElPTl0gICAgPSBbZ2wuT05FLCAgICAgICBnbC5PTkVfTUlOVVNfU1JDX0FMUEhBXTtcbiAgICBvYmplY3RbQ09OU1QuQkxFTkRfTU9ERVMuQ09MT1JdICAgICAgICAgPSBbZ2wuT05FLCAgICAgICBnbC5PTkVfTUlOVVNfU1JDX0FMUEhBXTtcbiAgICBvYmplY3RbQ09OU1QuQkxFTkRfTU9ERVMuTFVNSU5PU0lUWV0gICAgPSBbZ2wuT05FLCAgICAgICBnbC5PTkVfTUlOVVNfU1JDX0FMUEhBXTtcblxuICAgIHJldHVybiBvYmplY3Q7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gbWFwV2ViR0xCbGVuZE1vZGVzVG9QaXhpO1xuIiwiQ09OU1QgPSByZXF1aXJlKCcuLi8uLi8uLi9jb25zdCcpO1xuXG4vKipcbiAqIEdlbmVyaWMgTWFzayBTdGFjayBkYXRhIHN0cnVjdHVyZVxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICovXG5mdW5jdGlvbiBtYXBXZWJHTERyYXdNb2Rlc1RvUGl4aShnbCwgb2JqZWN0KVxue1xuXHRvYmplY3Q9IG9iamVjdCB8fCB7fTtcblxuICAgIG9iamVjdFtDT05TVC5EUkFXX01PREVTLlBPSU5UU10gICAgICAgICA9IGdsLlBPSU5UUztcbiAgICBvYmplY3RbQ09OU1QuRFJBV19NT0RFUy5MSU5FU10gICAgICAgICAgPSBnbC5MSU5FUztcbiAgICBvYmplY3RbQ09OU1QuRFJBV19NT0RFUy5MSU5FX0xPT1BdICAgICAgPSBnbC5MSU5FX0xPT1A7XG4gICAgb2JqZWN0W0NPTlNULkRSQVdfTU9ERVMuTElORV9TVFJJUF0gICAgID0gZ2wuTElORV9TVFJJUDtcbiAgICBvYmplY3RbQ09OU1QuRFJBV19NT0RFUy5UUklBTkdMRVNdICAgICAgPSBnbC5UUklBTkdMRVM7XG4gICAgb2JqZWN0W0NPTlNULkRSQVdfTU9ERVMuVFJJQU5HTEVfU1RSSVBdID0gZ2wuVFJJQU5HTEVfU1RSSVA7XG4gICAgb2JqZWN0W0NPTlNULkRSQVdfTU9ERVMuVFJJQU5HTEVfRkFOXSAgID0gZ2wuVFJJQU5HTEVfRkFOO1xuXG59XG5cbm1vZHVsZS5leHBvcnRzID0gbWFwV2ViR0xEcmF3TW9kZXNUb1BpeGk7XG4iLCJ2YXIgbWF0aCA9IHJlcXVpcmUoJy4uL21hdGgnKSxcbiAgICBUZXh0dXJlID0gcmVxdWlyZSgnLi4vdGV4dHVyZXMvVGV4dHVyZScpLFxuICAgIENvbnRhaW5lciA9IHJlcXVpcmUoJy4uL2Rpc3BsYXkvQ29udGFpbmVyJyksXG4gICAgQ2FudmFzVGludGVyID0gcmVxdWlyZSgnLi4vcmVuZGVyZXJzL2NhbnZhcy91dGlscy9DYW52YXNUaW50ZXInKSxcbiAgICB1dGlscyA9IHJlcXVpcmUoJy4uL3V0aWxzJyksXG4gICAgQ09OU1QgPSByZXF1aXJlKCcuLi9jb25zdCcpLFxuICAgIHRlbXBQb2ludCA9IG5ldyBtYXRoLlBvaW50KCk7XG5cbi8qKlxuICogVGhlIFNwcml0ZSBvYmplY3QgaXMgdGhlIGJhc2UgZm9yIGFsbCB0ZXh0dXJlZCBvYmplY3RzIHRoYXQgYXJlIHJlbmRlcmVkIHRvIHRoZSBzY3JlZW5cbiAqXG4gKiBBIHNwcml0ZSBjYW4gYmUgY3JlYXRlZCBkaXJlY3RseSBmcm9tIGFuIGltYWdlIGxpa2UgdGhpczpcbiAqXG4gKiBgYGBqc1xuICogdmFyIHNwcml0ZSA9IG5ldyBQSVhJLlNwcml0ZS5mcm9tSW1hZ2UoJ2Fzc2V0cy9pbWFnZS5wbmcnKTtcbiAqIGBgYFxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5Db250YWluZXJcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gdGV4dHVyZSB7UElYSS5UZXh0dXJlfSBUaGUgdGV4dHVyZSBmb3IgdGhpcyBzcHJpdGVcbiAqL1xuZnVuY3Rpb24gU3ByaXRlKHRleHR1cmUpXG57XG4gICAgQ29udGFpbmVyLmNhbGwodGhpcyk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYW5jaG9yIHNldHMgdGhlIG9yaWdpbiBwb2ludCBvZiB0aGUgdGV4dHVyZS5cbiAgICAgKiBUaGUgZGVmYXVsdCBpcyAwLDAgdGhpcyBtZWFucyB0aGUgdGV4dHVyZSdzIG9yaWdpbiBpcyB0aGUgdG9wIGxlZnRcbiAgICAgKiBTZXR0aW5nIHRoZSBhbmNob3IgdG8gMC41LDAuNSBtZWFucyB0aGUgdGV4dHVyZSdzIG9yaWdpbiBpcyBjZW50ZXJlZFxuICAgICAqIFNldHRpbmcgdGhlIGFuY2hvciB0byAxLDEgd291bGQgbWVhbiB0aGUgdGV4dHVyZSdzIG9yaWdpbiBwb2ludCB3aWxsIGJlIHRoZSBib3R0b20gcmlnaHQgY29ybmVyXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlBvaW50fVxuICAgICAqL1xuICAgIHRoaXMuYW5jaG9yID0gbmV3IG1hdGguUG9pbnQoKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSB0ZXh0dXJlIHRoYXQgdGhlIHNwcml0ZSBpcyB1c2luZ1xuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5UZXh0dXJlfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fdGV4dHVyZSA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgd2lkdGggb2YgdGhlIHNwcml0ZSAodGhpcyBpcyBpbml0aWFsbHkgc2V0IGJ5IHRoZSB0ZXh0dXJlKVxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fd2lkdGggPSAwO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGhlaWdodCBvZiB0aGUgc3ByaXRlICh0aGlzIGlzIGluaXRpYWxseSBzZXQgYnkgdGhlIHRleHR1cmUpXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9oZWlnaHQgPSAwO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHRpbnQgYXBwbGllZCB0byB0aGUgc3ByaXRlLiBUaGlzIGlzIGEgaGV4IHZhbHVlLiBBIHZhbHVlIG9mIDB4RkZGRkZGIHdpbGwgcmVtb3ZlIGFueSB0aW50IGVmZmVjdC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAweEZGRkZGRlxuICAgICAqL1xuICAgIHRoaXMudGludCA9IDB4RkZGRkZGO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGJsZW5kIG1vZGUgdG8gYmUgYXBwbGllZCB0byB0aGUgc3ByaXRlLiBBcHBseSBhIHZhbHVlIG9mIGBQSVhJLkJMRU5EX01PREVTLk5PUk1BTGAgdG8gcmVzZXQgdGhlIGJsZW5kIG1vZGUuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgUElYSS5CTEVORF9NT0RFUy5OT1JNQUxcbiAgICAgKiBAc2VlIFBJWEkuQkxFTkRfTU9ERVNcbiAgICAgKi9cbiAgICB0aGlzLmJsZW5kTW9kZSA9IENPTlNULkJMRU5EX01PREVTLk5PUk1BTDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBzaGFkZXIgdGhhdCB3aWxsIGJlIHVzZWQgdG8gcmVuZGVyIHRoZSBzcHJpdGUuIFNldCB0byBudWxsIHRvIHJlbW92ZSBhIGN1cnJlbnQgc2hhZGVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5BYnN0cmFjdEZpbHRlcnxQSVhJLlNoYWRlcn1cbiAgICAgKi9cbiAgICB0aGlzLnNoYWRlciA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBBbiBpbnRlcm5hbCBjYWNoZWQgdmFsdWUgb2YgdGhlIHRpbnQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMHhGRkZGRkZcbiAgICAgKi9cbiAgICB0aGlzLmNhY2hlZFRpbnQgPSAweEZGRkZGRjtcblxuICAgIC8vIGNhbGwgdGV4dHVyZSBzZXR0ZXJcbiAgICB0aGlzLnRleHR1cmUgPSB0ZXh0dXJlIHx8IFRleHR1cmUuRU1QVFk7XG4gICAgdGhpcy50ZXh0dXJlRGlydHkgPSB0cnVlXG4gICAgdGhpcy52ZXJ0ZXhEaXJ0eSA9IHRydWU7XG4gICAgdGhpcy52ZXJ0ZXhEYXRhID0gbmV3IEZsb2F0MzJBcnJheSg4KTtcbn1cblxuLy8gY29uc3RydWN0b3JcblNwcml0ZS5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKENvbnRhaW5lci5wcm90b3R5cGUpO1xuU3ByaXRlLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFNwcml0ZTtcbm1vZHVsZS5leHBvcnRzID0gU3ByaXRlO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhTcHJpdGUucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogVGhlIHdpZHRoIG9mIHRoZSBzcHJpdGUsIHNldHRpbmcgdGhpcyB3aWxsIGFjdHVhbGx5IG1vZGlmeSB0aGUgc2NhbGUgdG8gYWNoaWV2ZSB0aGUgdmFsdWUgc2V0XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuU3ByaXRlI1xuICAgICAqL1xuICAgIHdpZHRoOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIE1hdGguYWJzKHRoaXMuc2NhbGUueCkgKiB0aGlzLnRleHR1cmUuX2ZyYW1lLndpZHRoO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdmFyIHNpZ24gPSB1dGlscy5zaWduKHRoaXMuc2NhbGUueCkgfHwgMTtcbiAgICAgICAgICAgIHRoaXMuc2NhbGUueCA9IHNpZ24gKiB2YWx1ZSAvIHRoaXMudGV4dHVyZS5fZnJhbWUud2lkdGg7XG4gICAgICAgICAgICB0aGlzLl93aWR0aCA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFRoZSBoZWlnaHQgb2YgdGhlIHNwcml0ZSwgc2V0dGluZyB0aGlzIHdpbGwgYWN0dWFsbHkgbW9kaWZ5IHRoZSBzY2FsZSB0byBhY2hpZXZlIHRoZSB2YWx1ZSBzZXRcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5TcHJpdGUjXG4gICAgICovXG4gICAgaGVpZ2h0OiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuICBNYXRoLmFicyh0aGlzLnNjYWxlLnkpICogdGhpcy50ZXh0dXJlLl9mcmFtZS5oZWlnaHQ7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB2YXIgc2lnbiA9IHV0aWxzLnNpZ24odGhpcy5zY2FsZS55KSB8fCAxO1xuICAgICAgICAgICAgdGhpcy5zY2FsZS55ID0gc2lnbiAqIHZhbHVlIC8gdGhpcy50ZXh0dXJlLl9mcmFtZS5oZWlnaHQ7XG4gICAgICAgICAgICB0aGlzLl9oZWlnaHQgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBUaGUgdGV4dHVyZSB0aGF0IHRoZSBzcHJpdGUgaXMgdXNpbmdcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuVGV4dHVyZX1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5TcHJpdGUjXG4gICAgICovXG4gICAgdGV4dHVyZToge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiAgdGhpcy5fdGV4dHVyZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGlmICh0aGlzLl90ZXh0dXJlID09PSB2YWx1ZSlcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuX3RleHR1cmUgPSB2YWx1ZTtcbiAgICAgICAgICAgIHRoaXMuY2FjaGVkVGludCA9IDB4RkZGRkZGO1xuXG4gICAgICAgICAgICB0aGlzLnRleHR1cmVEaXJ0eSA9IHRydWU7XG5cbiAgICAgICAgICAgIGlmICh2YWx1ZSlcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAvLyB3YWl0IGZvciB0aGUgdGV4dHVyZSB0byBsb2FkXG4gICAgICAgICAgICAgICAgaWYgKHZhbHVlLmJhc2VUZXh0dXJlLmhhc0xvYWRlZClcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX29uVGV4dHVyZVVwZGF0ZSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICB2YWx1ZS5vbmNlKCd1cGRhdGUnLCB0aGlzLl9vblRleHR1cmVVcGRhdGUsIHRoaXMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn0pO1xuXG4vKipcbiAqIFdoZW4gdGhlIHRleHR1cmUgaXMgdXBkYXRlZCwgdGhpcyBldmVudCB3aWxsIGZpcmUgdG8gdXBkYXRlIHRoZSBzY2FsZSBhbmQgZnJhbWVcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5TcHJpdGUucHJvdG90eXBlLl9vblRleHR1cmVVcGRhdGUgPSBmdW5jdGlvbiAoKVxue1xuICAgIHRoaXMudGV4dHVyZURpcnR5ID0gdHJ1ZTtcblxuICAgIC8vIHNvIGlmIF93aWR0aCBpcyAwIHRoZW4gd2lkdGggd2FzIG5vdCBzZXQuLlxuICAgIGlmICh0aGlzLl93aWR0aClcbiAgICB7XG4gICAgICAgIHRoaXMuc2NhbGUueCA9IHV0aWxzLnNpZ24odGhpcy5zY2FsZS54KSAqIHRoaXMuX3dpZHRoIC8gdGhpcy50ZXh0dXJlLmZyYW1lLndpZHRoO1xuICAgIH1cblxuICAgIGlmICh0aGlzLl9oZWlnaHQpXG4gICAge1xuICAgICAgICB0aGlzLnNjYWxlLnkgPSB1dGlscy5zaWduKHRoaXMuc2NhbGUueSkgKiB0aGlzLl9oZWlnaHQgLyB0aGlzLnRleHR1cmUuZnJhbWUuaGVpZ2h0O1xuICAgIH1cbn07XG5cblNwcml0ZS5wcm90b3R5cGUuY2FjbHVsYXRlVmVydGljZXMgPSBmdW5jdGlvbiAoKVxue1xuXG4gICAgdmFyIHRleHR1cmUgPSB0aGlzLl90ZXh0dXJlLFxuICAgICAgICB3dCA9IHRoaXMud29ybGRUcmFuc2Zvcm0sXG4gICAgICAgIGEgPSB3dC5hLCBiID0gd3QuYiwgYyA9IHd0LmMsIGQgPSB3dC5kLCB0eCA9IHd0LnR4LCB0eSA9IHd0LnR5LFxuICAgICAgICB2ZXJ0ZXhEYXRhID0gdGhpcy52ZXJ0ZXhEYXRhLFxuICAgICAgICB3MCwgdzEsIGgwLCBoMSxcbiAgICAgICAgdHJpbSA9IHRleHR1cmUudHJpbTtcbiAgICBcbiAgICBpZiAodHJpbSlcbiAgICB7XG4gICAgICAgIC8vIGlmIHRoZSBzcHJpdGUgaXMgdHJpbW1lZCBhbmQgaXMgbm90IGEgdGlsaW5nc3ByaXRlIHRoZW4gd2UgbmVlZCB0byBhZGQgdGhlIGV4dHJhIHNwYWNlIGJlZm9yZSB0cmFuc2Zvcm1pbmcgdGhlIHNwcml0ZSBjb29yZHMuLlxuICAgICAgICB3MSA9IHRyaW0ueCAtIHRoaXMuYW5jaG9yLnggKiB0cmltLndpZHRoO1xuICAgICAgICB3MCA9IHcxICsgdGV4dHVyZS5jcm9wLndpZHRoO1xuXG4gICAgICAgIGgxID0gdHJpbS55IC0gdGhpcy5hbmNob3IueSAqIHRyaW0uaGVpZ2h0O1xuICAgICAgICBoMCA9IGgxICsgdGV4dHVyZS5jcm9wLmhlaWdodDtcblxuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICB3MCA9ICh0ZXh0dXJlLl9mcmFtZS53aWR0aCApICogKDEtdGhpcy5hbmNob3IueCk7XG4gICAgICAgIHcxID0gKHRleHR1cmUuX2ZyYW1lLndpZHRoICkgKiAtdGhpcy5hbmNob3IueDtcblxuICAgICAgICBoMCA9IHRleHR1cmUuX2ZyYW1lLmhlaWdodCAqICgxLXRoaXMuYW5jaG9yLnkpO1xuICAgICAgICBoMSA9IHRleHR1cmUuX2ZyYW1lLmhlaWdodCAqIC10aGlzLmFuY2hvci55O1xuICAgIH1cblxuICAgIC8vIHh5XG4gICAgdmVydGV4RGF0YVswXSA9IGEgKiB3MSArIGMgKiBoMSArIHR4O1xuICAgIHZlcnRleERhdGFbMV0gPSBkICogaDEgKyBiICogdzEgKyB0eTtcblxuICAgIC8vIHh5XG4gICAgdmVydGV4RGF0YVsyXSA9IGEgKiB3MCArIGMgKiBoMSArIHR4O1xuICAgIHZlcnRleERhdGFbM10gPSBkICogaDEgKyBiICogdzAgKyB0eTtcblxuICAgICAvLyB4eVxuICAgIHZlcnRleERhdGFbNF0gPSBhICogdzAgKyBjICogaDAgKyB0eDtcbiAgICB2ZXJ0ZXhEYXRhWzVdID0gZCAqIGgwICsgYiAqIHcwICsgdHk7XG5cbiAgICAvLyB4eVxuICAgIHZlcnRleERhdGFbNl0gPSBhICogdzEgKyBjICogaDAgKyB0eDtcbiAgICB2ZXJ0ZXhEYXRhWzddID0gZCAqIGgwICsgYiAqIHcxICsgdHk7XG5cblxufVxuXG4vKipcbipcbiogUmVuZGVycyB0aGUgb2JqZWN0IHVzaW5nIHRoZSBXZWJHTCByZW5kZXJlclxuKlxuKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcn1cbiogQHByaXZhdGVcbiovXG5TcHJpdGUucHJvdG90eXBlLl9yZW5kZXJXZWJHTCA9IGZ1bmN0aW9uIChyZW5kZXJlcilcbntcbiAgICBpZih0aGlzLnRleHR1cmVEaXJ0eSlcbiAgICB7XG4gICAgICAgIHRoaXMudGV4dHVyZURpcnR5ID0gZmFsc2U7XG5cbiAgICAgICAgdGhpcy5fb25UZXh0dXJlVXBkYXRlKCk7XG4gICAgICAgIFxuICAgICAgICB0aGlzLnZlcnRleERpcnR5ID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBpZih0aGlzLnZlcnRleERpcnR5KVxuICAgIHtcbiAgICAgICAgdGhpcy52ZXJ0ZXhEaXJ0eSA9IGZhbHNlO1xuXG4gICAgICAgIC8vIHNldCB0aGUgdmVydGV4IGRhdGFcbiAgICAgICAgdGhpcy5jYWNsdWxhdGVWZXJ0aWNlcygpO1xuXG4gICAgfVxuICAgIFxuICAgIHJlbmRlcmVyLnNldE9iamVjdFJlbmRlcmVyKHJlbmRlcmVyLnBsdWdpbnMuc3ByaXRlKTtcbiAgICByZW5kZXJlci5wbHVnaW5zLnNwcml0ZS5yZW5kZXIodGhpcyk7XG59O1xuXG4vKipcbiAqIFJldHVybnMgdGhlIGJvdW5kcyBvZiB0aGUgU3ByaXRlIGFzIGEgcmVjdGFuZ2xlLiBUaGUgYm91bmRzIGNhbGN1bGF0aW9uIHRha2VzIHRoZSB3b3JsZFRyYW5zZm9ybSBpbnRvIGFjY291bnQuXG4gKlxuICogQHBhcmFtIG1hdHJpeCB7UElYSS5NYXRyaXh9IHRoZSB0cmFuc2Zvcm1hdGlvbiBtYXRyaXggb2YgdGhlIHNwcml0ZVxuICogQHJldHVybiB7UElYSS5SZWN0YW5nbGV9IHRoZSBmcmFtaW5nIHJlY3RhbmdsZVxuICovXG5TcHJpdGUucHJvdG90eXBlLmdldEJvdW5kcyA9IGZ1bmN0aW9uIChtYXRyaXgpXG57XG4gICAgaWYoIXRoaXMuX2N1cnJlbnRCb3VuZHMpXG4gICAge1xuICAgICAgICBpZih0aGlzLnZlcnRleERpcnR5KVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnZlcnRleERpcnR5ID0gZmFsc2U7XG5cbiAgICAgICAgICAgIC8vIHNldCB0aGUgdmVydGV4IGRhdGFcbiAgICAgICAgICAgIHRoaXMuY2FjbHVsYXRlVmVydGljZXMoKTtcblxuICAgICAgICB9XG5cbiAgICAgICAgdmFyIG1pblgsXG4gICAgICAgICAgICBtYXhYLFxuICAgICAgICAgICAgbWluWSxcbiAgICAgICAgICAgIG1heFksXG4gICAgICAgICAgICB2ZXJ0ZXhEYXRhID0gdGhpcy52ZXJ0ZXhEYXRhO1xuXG4gICAgICAgIHZhciB4MSA9IHZlcnRleERhdGFbMF1cbiAgICAgICAgdmFyIHkxID0gdmVydGV4RGF0YVsxXVxuXG4gICAgICAgIHZhciB4MiA9IHZlcnRleERhdGFbMl1cbiAgICAgICAgdmFyIHkyID0gdmVydGV4RGF0YVszXVxuXG4gICAgICAgIHZhciB4MyA9IHZlcnRleERhdGFbNF1cbiAgICAgICAgdmFyIHkzID0gdmVydGV4RGF0YVs1XVxuXG4gICAgICAgIHZhciB4NCA9IHZlcnRleERhdGFbNl1cbiAgICAgICAgdmFyIHk0ID0gdmVydGV4RGF0YVs3XVxuXG4gICAgICAgIG1pblggPSB4MTtcbiAgICAgICAgbWluWCA9IHgyIDwgbWluWCA/IHgyIDogbWluWDtcbiAgICAgICAgbWluWCA9IHgzIDwgbWluWCA/IHgzIDogbWluWDtcbiAgICAgICAgbWluWCA9IHg0IDwgbWluWCA/IHg0IDogbWluWDtcblxuICAgICAgICBtaW5ZID0geTE7XG4gICAgICAgIG1pblkgPSB5MiA8IG1pblkgPyB5MiA6IG1pblk7XG4gICAgICAgIG1pblkgPSB5MyA8IG1pblkgPyB5MyA6IG1pblk7XG4gICAgICAgIG1pblkgPSB5NCA8IG1pblkgPyB5NCA6IG1pblk7XG5cbiAgICAgICAgbWF4WCA9IHgxO1xuICAgICAgICBtYXhYID0geDIgPiBtYXhYID8geDIgOiBtYXhYO1xuICAgICAgICBtYXhYID0geDMgPiBtYXhYID8geDMgOiBtYXhYO1xuICAgICAgICBtYXhYID0geDQgPiBtYXhYID8geDQgOiBtYXhYO1xuXG4gICAgICAgIG1heFkgPSB5MTtcbiAgICAgICAgbWF4WSA9IHkyID4gbWF4WSA/IHkyIDogbWF4WTtcbiAgICAgICAgbWF4WSA9IHkzID4gbWF4WSA/IHkzIDogbWF4WTtcbiAgICAgICAgbWF4WSA9IHk0ID4gbWF4WSA/IHk0IDogbWF4WTtcblxuICAgICAgICAvLyBjaGVjayBmb3IgY2hpbGRyZW5cbiAgICAgICAgaWYodGhpcy5jaGlsZHJlbi5sZW5ndGgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHZhciBjaGlsZEJvdW5kcyA9IHRoaXMuY29udGFpbmVyR2V0Qm91bmRzKCk7XG5cbiAgICAgICAgICAgIHcwID0gY2hpbGRCb3VuZHMueDtcbiAgICAgICAgICAgIHcxID0gY2hpbGRCb3VuZHMueCArIGNoaWxkQm91bmRzLndpZHRoO1xuICAgICAgICAgICAgaDAgPSBjaGlsZEJvdW5kcy55O1xuICAgICAgICAgICAgaDEgPSBjaGlsZEJvdW5kcy55ICsgY2hpbGRCb3VuZHMuaGVpZ2h0O1xuXG4gICAgICAgICAgICBtaW5YID0gKG1pblggPCB3MCkgPyBtaW5YIDogdzA7XG4gICAgICAgICAgICBtaW5ZID0gKG1pblkgPCBoMCkgPyBtaW5ZIDogaDA7XG5cbiAgICAgICAgICAgIG1heFggPSAobWF4WCA+IHcxKSA/IG1heFggOiB3MTtcbiAgICAgICAgICAgIG1heFkgPSAobWF4WSA+IGgxKSA/IG1heFkgOiBoMTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBib3VuZHMgPSB0aGlzLl9ib3VuZHM7XG5cbiAgICAgICAgYm91bmRzLnggPSBtaW5YO1xuICAgICAgICBib3VuZHMud2lkdGggPSBtYXhYIC0gbWluWDtcblxuICAgICAgICBib3VuZHMueSA9IG1pblk7XG4gICAgICAgIGJvdW5kcy5oZWlnaHQgPSBtYXhZIC0gbWluWTtcblxuICAgICAgICAvLyBzdG9yZSBhIHJlZmVyZW5jZSBzbyB0aGF0IGlmIHRoaXMgZnVuY3Rpb24gZ2V0cyBjYWxsZWQgYWdhaW4gaW4gdGhlIHJlbmRlciBjeWNsZSB3ZSBkbyBub3QgaGF2ZSB0byByZWNhbGN1bGF0ZVxuICAgICAgICB0aGlzLl9jdXJyZW50Qm91bmRzID0gYm91bmRzO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLl9jdXJyZW50Qm91bmRzO1xufTtcblxuLyoqXG4gKiBHZXRzIHRoZSBsb2NhbCBib3VuZHMgb2YgdGhlIHNwcml0ZSBvYmplY3QuXG4gKlxuICovXG5TcHJpdGUucHJvdG90eXBlLmdldExvY2FsQm91bmRzID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLl9ib3VuZHMueCA9IC10aGlzLl90ZXh0dXJlLl9mcmFtZS53aWR0aCAqIHRoaXMuYW5jaG9yLng7XG4gICAgdGhpcy5fYm91bmRzLnkgPSAtdGhpcy5fdGV4dHVyZS5fZnJhbWUuaGVpZ2h0ICogdGhpcy5hbmNob3IueTtcbiAgICB0aGlzLl9ib3VuZHMud2lkdGggPSB0aGlzLl90ZXh0dXJlLl9mcmFtZS53aWR0aDtcbiAgICB0aGlzLl9ib3VuZHMuaGVpZ2h0ID0gdGhpcy5fdGV4dHVyZS5fZnJhbWUuaGVpZ2h0O1xuICAgIHJldHVybiB0aGlzLl9ib3VuZHM7XG59O1xuXG4vKipcbiogVGVzdHMgaWYgYSBwb2ludCBpcyBpbnNpZGUgdGhpcyBzcHJpdGVcbipcbiogQHBhcmFtIHBvaW50IHtQSVhJLlBvaW50fSB0aGUgcG9pbnQgdG8gdGVzdFxuKiBAcmV0dXJuIHtib29sZWFufSB0aGUgcmVzdWx0IG9mIHRoZSB0ZXN0XG4qL1xuU3ByaXRlLnByb3RvdHlwZS5jb250YWluc1BvaW50ID0gZnVuY3Rpb24oIHBvaW50IClcbntcbiAgICB0aGlzLndvcmxkVHJhbnNmb3JtLmFwcGx5SW52ZXJzZShwb2ludCwgIHRlbXBQb2ludCk7XG5cbiAgICB2YXIgd2lkdGggPSB0aGlzLl90ZXh0dXJlLl9mcmFtZS53aWR0aDtcbiAgICB2YXIgaGVpZ2h0ID0gdGhpcy5fdGV4dHVyZS5fZnJhbWUuaGVpZ2h0O1xuICAgIHZhciB4MSA9IC13aWR0aCAqIHRoaXMuYW5jaG9yLng7XG4gICAgdmFyIHkxO1xuXG4gICAgaWYgKCB0ZW1wUG9pbnQueCA+IHgxICYmIHRlbXBQb2ludC54IDwgeDEgKyB3aWR0aCApXG4gICAge1xuICAgICAgICB5MSA9IC1oZWlnaHQgKiB0aGlzLmFuY2hvci55O1xuXG4gICAgICAgIGlmICggdGVtcFBvaW50LnkgPiB5MSAmJiB0ZW1wUG9pbnQueSA8IHkxICsgaGVpZ2h0IClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2U7XG59O1xuXG4vKipcbiogUmVuZGVycyB0aGUgb2JqZWN0IHVzaW5nIHRoZSBDYW52YXMgcmVuZGVyZXJcbipcbiogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLkNhbnZhc1JlbmRlcmVyfSBUaGUgcmVuZGVyZXJcbiogQHByaXZhdGVcbiovXG5TcHJpdGUucHJvdG90eXBlLl9yZW5kZXJDYW52YXMgPSBmdW5jdGlvbiAocmVuZGVyZXIpXG57XG4gICAgaWYgKHRoaXMudGV4dHVyZS5jcm9wLndpZHRoIDw9IDAgfHwgdGhpcy50ZXh0dXJlLmNyb3AuaGVpZ2h0IDw9IDApXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFyIGNvbXBvc2l0ZU9wZXJhdGlvbiA9IHJlbmRlcmVyLmJsZW5kTW9kZXNbdGhpcy5ibGVuZE1vZGVdO1xuICAgIGlmIChjb21wb3NpdGVPcGVyYXRpb24gIT09IHJlbmRlcmVyLmNvbnRleHQuZ2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uKVxuICAgIHtcbiAgICAgICAgcmVuZGVyZXIuY29udGV4dC5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb24gPSBjb21wb3NpdGVPcGVyYXRpb247XG4gICAgfVxuXG4gICAgLy8gIElnbm9yZSBudWxsIHNvdXJjZXNcbiAgICBpZiAodGhpcy50ZXh0dXJlLnZhbGlkKVxuICAgIHtcbiAgICAgICAgdmFyIHRleHR1cmUgPSB0aGlzLl90ZXh0dXJlLFxuICAgICAgICAgICAgd3QgPSB0aGlzLndvcmxkVHJhbnNmb3JtLFxuICAgICAgICAgICAgZHgsXG4gICAgICAgICAgICBkeSxcbiAgICAgICAgICAgIHdpZHRoLFxuICAgICAgICAgICAgaGVpZ2h0O1xuXG4gICAgICAgIHJlbmRlcmVyLmNvbnRleHQuZ2xvYmFsQWxwaGEgPSB0aGlzLndvcmxkQWxwaGE7XG5cbiAgICAgICAgLy8gSWYgc21vb3RoaW5nRW5hYmxlZCBpcyBzdXBwb3J0ZWQgYW5kIHdlIG5lZWQgdG8gY2hhbmdlIHRoZSBzbW9vdGhpbmcgcHJvcGVydHkgZm9yIHRoaXMgdGV4dHVyZVxuICAgICAgICB2YXIgc21vb3RoaW5nRW5hYmxlZCA9IHRleHR1cmUuYmFzZVRleHR1cmUuc2NhbGVNb2RlID09PSBDT05TVC5TQ0FMRV9NT0RFUy5MSU5FQVI7XG4gICAgICAgIGlmIChyZW5kZXJlci5zbW9vdGhQcm9wZXJ0eSAmJiByZW5kZXJlci5jb250ZXh0W3JlbmRlcmVyLnNtb290aFByb3BlcnR5XSAhPT0gc21vb3RoaW5nRW5hYmxlZClcbiAgICAgICAge1xuICAgICAgICAgICAgcmVuZGVyZXIuY29udGV4dFtyZW5kZXJlci5zbW9vdGhQcm9wZXJ0eV0gPSBzbW9vdGhpbmdFbmFibGVkO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gSWYgdGhlIHRleHR1cmUgaXMgdHJpbW1lZCB3ZSBvZmZzZXQgYnkgdGhlIHRyaW0geC95LCBvdGhlcndpc2Ugd2UgdXNlIHRoZSBmcmFtZSBkaW1lbnNpb25zXG5cbiAgICAgICAgaWYodGV4dHVyZS5yb3RhdGUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHdpZHRoID0gdGV4dHVyZS5jcm9wLmhlaWdodDtcbiAgICAgICAgICAgIGhlaWdodCA9IHRleHR1cmUuY3JvcC53aWR0aDtcblxuICAgICAgICAgICAgZHggPSAodGV4dHVyZS50cmltKSA/IHRleHR1cmUudHJpbS55IC0gdGhpcy5hbmNob3IueSAqIHRleHR1cmUudHJpbS5oZWlnaHQgOiB0aGlzLmFuY2hvci55ICogLXRleHR1cmUuX2ZyYW1lLmhlaWdodDtcbiAgICAgICAgICAgIGR5ID0gKHRleHR1cmUudHJpbSkgPyB0ZXh0dXJlLnRyaW0ueCAtIHRoaXMuYW5jaG9yLnggKiB0ZXh0dXJlLnRyaW0ud2lkdGggOiB0aGlzLmFuY2hvci54ICogLXRleHR1cmUuX2ZyYW1lLndpZHRoO1xuICAgICAgIFxuICAgICAgICAgICAgZHggKz0gd2lkdGg7XG5cbiAgICAgICAgICAgIHd0LnR4ID0gZHkgKiB3dC5hICsgZHggKiB3dC5jICsgd3QudHg7XG4gICAgICAgICAgICB3dC50eSA9IGR5ICogd3QuYiArIGR4ICogd3QuZCArIHd0LnR5O1xuXG4gICAgICAgICAgICB2YXIgdGVtcCA9IHd0LmE7XG4gICAgICAgICAgICB3dC5hICA9IC13dC5jO1xuICAgICAgICAgICAgd3QuYyAgPSAgdGVtcDtcblxuICAgICAgICAgICAgdGVtcCA9IHd0LmI7XG4gICAgICAgICAgICB3dC5iICA9IC13dC5kO1xuICAgICAgICAgICAgd3QuZCAgPSAgdGVtcDtcblxuICAgICAgICAgICAgLy8gdGhlIGFuY2hvciBoYXMgYWxyZWFkeSBiZWVuIGFwcGxpZWQgYWJvdmUsIHNvIGxldHMgc2V0IGl0IHRvIHplcm9cbiAgICAgICAgICAgIGR4ID0gMDtcbiAgICAgICAgICAgIGR5ID0gMDtcblxuICAgICAgICB9XG4gICAgICAgIGVsc2VcbiAgICAgICAge1xuICAgICAgICAgICAgd2lkdGggPSB0ZXh0dXJlLmNyb3Aud2lkdGg7XG4gICAgICAgICAgICBoZWlnaHQgPSB0ZXh0dXJlLmNyb3AuaGVpZ2h0O1xuXG4gICAgICAgICAgICBkeCA9ICh0ZXh0dXJlLnRyaW0pID8gdGV4dHVyZS50cmltLnggLSB0aGlzLmFuY2hvci54ICogdGV4dHVyZS50cmltLndpZHRoIDogdGhpcy5hbmNob3IueCAqIC10ZXh0dXJlLl9mcmFtZS53aWR0aDtcbiAgICAgICAgICAgIGR5ID0gKHRleHR1cmUudHJpbSkgPyB0ZXh0dXJlLnRyaW0ueSAtIHRoaXMuYW5jaG9yLnkgKiB0ZXh0dXJlLnRyaW0uaGVpZ2h0IDogdGhpcy5hbmNob3IueSAqIC10ZXh0dXJlLl9mcmFtZS5oZWlnaHQ7XG4gICAgICAgIH1cblxuXG5cbiAgICAgICAgLy8gQWxsb3cgZm9yIHBpeGVsIHJvdW5kaW5nXG4gICAgICAgIGlmIChyZW5kZXJlci5yb3VuZFBpeGVscylcbiAgICAgICAge1xuICAgICAgICAgICAgcmVuZGVyZXIuY29udGV4dC5zZXRUcmFuc2Zvcm0oXG4gICAgICAgICAgICAgICAgd3QuYSxcbiAgICAgICAgICAgICAgICB3dC5iLFxuICAgICAgICAgICAgICAgIHd0LmMsXG4gICAgICAgICAgICAgICAgd3QuZCxcbiAgICAgICAgICAgICAgICAod3QudHggKiByZW5kZXJlci5yZXNvbHV0aW9uKSB8IDAsXG4gICAgICAgICAgICAgICAgKHd0LnR5ICogcmVuZGVyZXIucmVzb2x1dGlvbikgfCAwXG4gICAgICAgICAgICApO1xuXG4gICAgICAgICAgICBkeCA9IGR4IHwgMDtcbiAgICAgICAgICAgIGR5ID0gZHkgfCAwO1xuICAgICAgICB9XG4gICAgICAgIGVsc2VcbiAgICAgICAge1xuXG4gICAgICAgICAgICByZW5kZXJlci5jb250ZXh0LnNldFRyYW5zZm9ybShcbiAgICAgICAgICAgICAgICB3dC5hLFxuICAgICAgICAgICAgICAgIHd0LmIsXG4gICAgICAgICAgICAgICAgd3QuYyxcbiAgICAgICAgICAgICAgICB3dC5kLFxuICAgICAgICAgICAgICAgIHd0LnR4ICogcmVuZGVyZXIucmVzb2x1dGlvbixcbiAgICAgICAgICAgICAgICB3dC50eSAqIHJlbmRlcmVyLnJlc29sdXRpb25cbiAgICAgICAgICAgICk7XG5cblxuICAgICAgICB9XG5cbiAgICAgICAgdmFyIHJlc29sdXRpb24gPSB0ZXh0dXJlLmJhc2VUZXh0dXJlLnJlc29sdXRpb247XG5cbiAgICAgICAgaWYgKHRoaXMudGludCAhPT0gMHhGRkZGRkYpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmNhY2hlZFRpbnQgIT09IHRoaXMudGludClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB0aGlzLmNhY2hlZFRpbnQgPSB0aGlzLnRpbnQ7XG5cbiAgICAgICAgICAgICAgICAvLyBUT0RPIGNsZWFuIHVwIGNhY2hpbmcgLSBob3cgdG8gY2xlYW4gdXAgdGhlIGNhY2hlcz9cbiAgICAgICAgICAgICAgICB0aGlzLnRpbnRlZFRleHR1cmUgPSBDYW52YXNUaW50ZXIuZ2V0VGludGVkVGV4dHVyZSh0aGlzLCB0aGlzLnRpbnQpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZW5kZXJlci5jb250ZXh0LmRyYXdJbWFnZShcbiAgICAgICAgICAgICAgICB0aGlzLnRpbnRlZFRleHR1cmUsXG4gICAgICAgICAgICAgICAgMCxcbiAgICAgICAgICAgICAgICAwLFxuICAgICAgICAgICAgICAgIHdpZHRoICogcmVzb2x1dGlvbixcbiAgICAgICAgICAgICAgICBoZWlnaHQgKiByZXNvbHV0aW9uLFxuICAgICAgICAgICAgICAgIGR4ICogcmVuZGVyZXIucmVzb2x1dGlvbixcbiAgICAgICAgICAgICAgICBkeSAqIHJlbmRlcmVyLnJlc29sdXRpb24sXG4gICAgICAgICAgICAgICAgd2lkdGggKiByZW5kZXJlci5yZXNvbHV0aW9uLFxuICAgICAgICAgICAgICAgIGhlaWdodCAqIHJlbmRlcmVyLnJlc29sdXRpb25cbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgICByZW5kZXJlci5jb250ZXh0LmRyYXdJbWFnZShcbiAgICAgICAgICAgICAgICB0ZXh0dXJlLmJhc2VUZXh0dXJlLnNvdXJjZSxcbiAgICAgICAgICAgICAgICB0ZXh0dXJlLmNyb3AueCAqIHJlc29sdXRpb24sXG4gICAgICAgICAgICAgICAgdGV4dHVyZS5jcm9wLnkgKiByZXNvbHV0aW9uLFxuICAgICAgICAgICAgICAgIHdpZHRoICogcmVzb2x1dGlvbixcbiAgICAgICAgICAgICAgICBoZWlnaHQgKiByZXNvbHV0aW9uLFxuICAgICAgICAgICAgICAgIGR4ICAqIHJlbmRlcmVyLnJlc29sdXRpb24sXG4gICAgICAgICAgICAgICAgZHkgICogcmVuZGVyZXIucmVzb2x1dGlvbixcbiAgICAgICAgICAgICAgICB3aWR0aCAqIHJlbmRlcmVyLnJlc29sdXRpb24sXG4gICAgICAgICAgICAgICAgaGVpZ2h0ICogcmVuZGVyZXIucmVzb2x1dGlvblxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgIH1cbn07XG5cbi8qKlxuICogRGVzdHJveXMgdGhpcyBzcHJpdGUgYW5kIG9wdGlvbmFsbHkgaXRzIHRleHR1cmVcbiAqXG4gKiBAcGFyYW0gW2Rlc3Ryb3lUZXh0dXJlPWZhbHNlXSB7Ym9vbGVhbn0gU2hvdWxkIGl0IGRlc3Ryb3kgdGhlIGN1cnJlbnQgdGV4dHVyZSBvZiB0aGUgc3ByaXRlIGFzIHdlbGxcbiAqIEBwYXJhbSBbZGVzdHJveUJhc2VUZXh0dXJlPWZhbHNlXSB7Ym9vbGVhbn0gU2hvdWxkIGl0IGRlc3Ryb3kgdGhlIGJhc2UgdGV4dHVyZSBvZiB0aGUgc3ByaXRlIGFzIHdlbGxcbiAqL1xuU3ByaXRlLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKGRlc3Ryb3lUZXh0dXJlLCBkZXN0cm95QmFzZVRleHR1cmUpXG57XG4gICAgQ29udGFpbmVyLnByb3RvdHlwZS5kZXN0cm95LmNhbGwodGhpcyk7XG5cbiAgICB0aGlzLmFuY2hvciA9IG51bGw7XG5cbiAgICBpZiAoZGVzdHJveVRleHR1cmUpXG4gICAge1xuICAgICAgICB0aGlzLl90ZXh0dXJlLmRlc3Ryb3koZGVzdHJveUJhc2VUZXh0dXJlKTtcbiAgICB9XG5cbiAgICB0aGlzLl90ZXh0dXJlID0gbnVsbDtcbiAgICB0aGlzLnNoYWRlciA9IG51bGw7XG59O1xuXG4vLyBzb21lIGhlbHBlciBmdW5jdGlvbnMuLlxuXG4vKipcbiAqIEhlbHBlciBmdW5jdGlvbiB0aGF0IGNyZWF0ZXMgYSBzcHJpdGUgdGhhdCB3aWxsIGNvbnRhaW4gYSB0ZXh0dXJlIGZyb20gdGhlIFRleHR1cmVDYWNoZSBiYXNlZCBvbiB0aGUgZnJhbWVJZFxuICogVGhlIGZyYW1lIGlkcyBhcmUgY3JlYXRlZCB3aGVuIGEgVGV4dHVyZSBwYWNrZXIgZmlsZSBoYXMgYmVlbiBsb2FkZWRcbiAqXG4gKiBAc3RhdGljXG4gKiBAcGFyYW0gZnJhbWVJZCB7c3RyaW5nfSBUaGUgZnJhbWUgSWQgb2YgdGhlIHRleHR1cmUgaW4gdGhlIGNhY2hlXG4gKiBAcGFyYW0gW2Nyb3Nzb3JpZ2luPShhdXRvKV0ge2Jvb2xlYW59IGlmIHlvdSB3YW50IHRvIHNwZWNpZnkgdGhlIGNyb3NzLW9yaWdpbiBwYXJhbWV0ZXJcbiAqIEBwYXJhbSBbc2NhbGVNb2RlPVBJWEkuU0NBTEVfTU9ERVMuREVGQVVMVF0ge251bWJlcn0gaWYgeW91IHdhbnQgdG8gc3BlY2lmeSB0aGUgc2NhbGUgbW9kZSwgc2VlIHtAbGluayBQSVhJLlNDQUxFX01PREVTfSBmb3IgcG9zc2libGUgdmFsdWVzXG4gKiBAcmV0dXJuIHtQSVhJLlNwcml0ZX0gQSBuZXcgU3ByaXRlIHVzaW5nIGEgdGV4dHVyZSBmcm9tIHRoZSB0ZXh0dXJlIGNhY2hlIG1hdGNoaW5nIHRoZSBmcmFtZUlkXG4gKi9cblNwcml0ZS5mcm9tRnJhbWUgPSBmdW5jdGlvbiAoZnJhbWVJZClcbntcbiAgICB2YXIgdGV4dHVyZSA9IHV0aWxzLlRleHR1cmVDYWNoZVtmcmFtZUlkXTtcblxuICAgIGlmICghdGV4dHVyZSlcbiAgICB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignVGhlIGZyYW1lSWQgXCInICsgZnJhbWVJZCArICdcIiBkb2VzIG5vdCBleGlzdCBpbiB0aGUgdGV4dHVyZSBjYWNoZScpO1xuICAgIH1cblxuICAgIHJldHVybiBuZXcgU3ByaXRlKHRleHR1cmUpO1xufTtcblxuLyoqXG4gKiBIZWxwZXIgZnVuY3Rpb24gdGhhdCBjcmVhdGVzIGEgc3ByaXRlIHRoYXQgd2lsbCBjb250YWluIGEgdGV4dHVyZSBiYXNlZCBvbiBhbiBpbWFnZSB1cmxcbiAqIElmIHRoZSBpbWFnZSBpcyBub3QgaW4gdGhlIHRleHR1cmUgY2FjaGUgaXQgd2lsbCBiZSBsb2FkZWRcbiAqXG4gKiBAc3RhdGljXG4gKiBAcGFyYW0gaW1hZ2VJZCB7c3RyaW5nfSBUaGUgaW1hZ2UgdXJsIG9mIHRoZSB0ZXh0dXJlXG4gKiBAcmV0dXJuIHtQSVhJLlNwcml0ZX0gQSBuZXcgU3ByaXRlIHVzaW5nIGEgdGV4dHVyZSBmcm9tIHRoZSB0ZXh0dXJlIGNhY2hlIG1hdGNoaW5nIHRoZSBpbWFnZSBpZFxuICovXG5TcHJpdGUuZnJvbUltYWdlID0gZnVuY3Rpb24gKGltYWdlSWQsIGNyb3Nzb3JpZ2luLCBzY2FsZU1vZGUpXG57XG4gICAgcmV0dXJuIG5ldyBTcHJpdGUoVGV4dHVyZS5mcm9tSW1hZ2UoaW1hZ2VJZCwgY3Jvc3NvcmlnaW4sIHNjYWxlTW9kZSkpO1xufTtcbiIsInZhciBPYmplY3RSZW5kZXJlciA9IHJlcXVpcmUoJy4uLy4uL3JlbmRlcmVycy93ZWJnbC91dGlscy9PYmplY3RSZW5kZXJlcicpLFxuICAgIFdlYkdMUmVuZGVyZXIgPSByZXF1aXJlKCcuLi8uLi9yZW5kZXJlcnMvd2ViZ2wvV2ViR0xSZW5kZXJlcicpLFxuICAgIFRleHR1cmVTaGFkZXIgPSByZXF1aXJlKCcuLi8uLi9yZW5kZXJlcnMvd2ViZ2wvc2hhZGVycy9fVGV4dHVyZVNoYWRlcicpLFxuICAgIGNyZWF0ZUluZGljZXNGb3JRdWFkcyA9IHJlcXVpcmUoJy4uLy4uL3V0aWxzL2NyZWF0ZUluZGljZXNGb3JRdWFkcycpLFxuICAgIGdlbmVyYXRlTXVsdGlUZXh0dXJlU2hhZGVyID0gcmVxdWlyZSgnLi9nZW5lcmF0ZU11bHRpVGV4dHVyZVNoYWRlcicpLFxuICAgIENPTlNUID0gcmVxdWlyZSgnLi4vLi4vY29uc3QnKSxcbiAgICBnbENvcmUgPSByZXF1aXJlKCdwaXhpLWdsLWNvcmUnKTtcblxuLyoqXG4gKiBAYXV0aG9yIE1hdCBHcm92ZXNcbiAqXG4gKiBCaWcgdGhhbmtzIHRvIHRoZSB2ZXJ5IGNsZXZlciBNYXR0IERlc0xhdXJpZXJzIDxtYXR0ZGVzbD4gaHR0cHM6Ly9naXRodWIuY29tL21hdHRkZXNsL1xuICogZm9yIGNyZWF0aW5nIHRoZSBvcmlnaW5hbCBwaXhpIHZlcnNpb24hXG4gKiBBbHNvIGEgdGhhbmtzIHRvIGh0dHBzOi8vZ2l0aHViLmNvbS9iY2hldmFsaWVyIGZvciB0d2Vha2luZyB0aGUgdGludCBhbmQgYWxwaGEgc28gdGhhdCB0aGV5IG5vdyBzaGFyZSA0IGJ5dGVzIG9uIHRoZSB2ZXJ0ZXggYnVmZmVyXG4gKlxuICogSGVhdmlseSBpbnNwaXJlZCBieSBMaWJHRFgncyBTcHJpdGVSZW5kZXJlcjpcbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS9saWJnZHgvbGliZ2R4L2Jsb2IvbWFzdGVyL2dkeC9zcmMvY29tL2JhZGxvZ2ljL2dkeC9ncmFwaGljcy9nMmQvU3ByaXRlUmVuZGVyZXIuamF2YVxuICovXG5cbi8qKlxuICogUmVuZGVyZXIgZGVkaWNhdGVkIHRvIGRyYXdpbmcgYW5kIGJhdGNoaW5nIHNwcml0ZXMuXG4gKlxuICogQGNsYXNzXG4gKiBAcHJpdmF0ZVxuICogQG1lbWJlcm9mIFBJWElcbiAqIEBleHRlbmRzIFBJWEkuT2JqZWN0UmVuZGVyZXJcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5XZWJHTFJlbmRlcmVyfSBUaGUgcmVuZGVyZXIgdGhpcyBzcHJpdGUgYmF0Y2ggd29ya3MgZm9yLlxuICovXG5mdW5jdGlvbiBTcHJpdGVSZW5kZXJlcihyZW5kZXJlcilcbntcbiAgICBPYmplY3RSZW5kZXJlci5jYWxsKHRoaXMsIHJlbmRlcmVyKTtcblxuICAgIC8qKlxuICAgICAqIE51bWJlciBvZiB2YWx1ZXMgc2VudCBpbiB0aGUgdmVydGV4IGJ1ZmZlci5cbiAgICAgKiBwb3NpdGlvblgsIHBvc2l0aW9uWSwgY29sb3JSLCBjb2xvckcsIGNvbG9yQiA9IDVcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLnZlcnRTaXplID0gNTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBzaXplIG9mIHRoZSB2ZXJ0ZXggaW5mb3JtYXRpb24gaW4gYnl0ZXMuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy52ZXJ0Qnl0ZVNpemUgPSB0aGlzLnZlcnRTaXplICogNDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBudW1iZXIgb2YgaW1hZ2VzIGluIHRoZSBTcHJpdGVCYXRjaCBiZWZvcmUgaXQgZmx1c2hlcy5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLnNpemUgPSBDT05TVC5TUFJJVEVfQkFUQ0hfU0laRTsgLy8gMjAwMCBpcyBhIG5pY2UgYmFsYW5jZSBiZXR3ZWVuIG1vYmlsZSAvIGRlc2t0b3BcblxuICAgIC8vIHRoZSB0b3RhbCBudW1iZXIgb2YgYnl0ZXMgaW4gb3VyIGJhdGNoXG4gICAgdmFyIG51bVZlcnRzID0gKHRoaXMuc2l6ZSAqIDQpICogdGhpcy52ZXJ0Qnl0ZVNpemU7XG5cbiAgICAvLyB0aGUgdG90YWwgbnVtYmVyIG9mIGluZGljZXMgaW4gb3VyIGJhdGNoLCB0aGVyZSBhcmUgNiBwb2ludHMgcGVyIHF1YWQuXG4gICAgdmFyIG51bUluZGljZXMgPSB0aGlzLnNpemUgKiA2O1xuXG4gICAgLyoqXG4gICAgICogSG9sZHMgdGhlIHZlcnRleCBkYXRhIHRoYXQgd2lsbCBiZSBzZW50IHRvIHRoZSB2ZXJ0ZXggc2hhZGVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7QXJyYXlCdWZmZXJ9XG4gICAgICovXG4gICAgdGhpcy52ZXJ0aWNlcyA9IG5ldyBBcnJheUJ1ZmZlcihudW1WZXJ0cyk7XG5cbiAgICAvKipcbiAgICAgKiBWaWV3IG9uIHRoZSB2ZXJ0aWNlcyBhcyBhIEZsb2F0MzJBcnJheSBmb3IgcG9zaXRpb25zXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtGbG9hdDMyQXJyYXl9XG4gICAgICovXG4gICAgdGhpcy5wb3NpdGlvbnMgPSBuZXcgRmxvYXQzMkFycmF5KHRoaXMudmVydGljZXMpO1xuICAgIFxuICAgIC8qKlxuICAgICAqIFZpZXcgb24gdGhlIHZlcnRpY2VzIGFzIGEgVWludDMyQXJyYXkgZm9yIHV2c1xuICAgICAqXG4gICAgICogQG1lbWJlciB7RmxvYXQzMkFycmF5fVxuICAgICAqL1xuICAgIHRoaXMudXZzID0gbmV3IFVpbnQzMkFycmF5KHRoaXMudmVydGljZXMpO1xuXG4gICAgLyoqXG4gICAgICogVmlldyBvbiB0aGUgdmVydGljZXMgYXMgYSBVaW50MzJBcnJheSBmb3IgY29sb3JzXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtVaW50MzJBcnJheX1cbiAgICAgKi9cbiAgICB0aGlzLmNvbG9ycyA9IG5ldyBVaW50MzJBcnJheSh0aGlzLnZlcnRpY2VzKTtcblxuICAgIC8qKlxuICAgICAqIEhvbGRzIHRoZSBpbmRpY2VzIG9mIHRoZSBnZW9tZXRyeSAocXVhZHMpIHRvIGRyYXdcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1VpbnQxNkFycmF5fVxuICAgICAqL1xuICAgIHRoaXMuaW5kaWNlcyA9IGNyZWF0ZUluZGljZXNGb3JRdWFkcyh0aGlzLnNpemUpXG5cbiAgICAvKipcbiAgICAgKiBUaGUgZGVmYXVsdCBzaGFkZXIgdGhhdCBpcyB1c2VkIGlmIGEgc3ByaXRlIGRvZXNuJ3QgaGF2ZSBhIG1vcmUgc3BlY2lmaWMgb25lLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5TaGFkZXJ9XG4gICAgICovXG4gICAgdGhpcy5zaGFkZXIgPSBudWxsO1xuXG4gICAgdGhpcy50ZXh0dXJlQ291bnQgPSAwO1xuICAgIHRoaXMuY3VycmVudEluZGV4ID0gMDtcbiAgXG4gICAgdGhpcy5ncm91cENvdW50ID0gMDtcbiAgICB0aGlzLmdyb3VwcyA9IFtdO1xuICAgIFxuICAgIC8vVE9ETyAtIDMwMCBpcyBhIGJpdCBtYWdpYywgZmlndXJlIG91dCBhIG5pY2VyIGFtb3VudCFcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuc2l6ZTsgaSsrKSBcbiAgICB7XG4gICAgICAgIHRoaXMuZ3JvdXBzW2ldID0ge3RleHR1cmVzOltdLCB0ZXh0dXJlQ291bnQ6MCwgaWRzOltdLCBzaXplOjAsIHN0YXJ0OjAsIGJsZW5kOjB9OyBcbiAgICB9O1xuICAgIFxuICAgIHRoaXMuY3VycmVudEdyb3VwID0gdGhpcy5ncm91cHNbdGhpcy5ncm91cENvdW50KytdO1xuXG4gICAgdGhpcy5jdXJyZW50VGV4dHVyZSA9IG51bGw7ICAgIFxufVxuXG5cblNwcml0ZVJlbmRlcmVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoT2JqZWN0UmVuZGVyZXIucHJvdG90eXBlKTtcblNwcml0ZVJlbmRlcmVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFNwcml0ZVJlbmRlcmVyO1xubW9kdWxlLmV4cG9ydHMgPSBTcHJpdGVSZW5kZXJlcjtcblxuV2ViR0xSZW5kZXJlci5yZWdpc3RlclBsdWdpbignc3ByaXRlJywgU3ByaXRlUmVuZGVyZXIpO1xuXG4vKipcbiAqIFNldHMgdXAgdGhlIHJlbmRlcmVyIGNvbnRleHQgYW5kIG5lY2Vzc2FyeSBidWZmZXJzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0gZ2wge1dlYkdMUmVuZGVyaW5nQ29udGV4dH0gdGhlIGN1cnJlbnQgV2ViR0wgZHJhd2luZyBjb250ZXh0XG4gKi9cblNwcml0ZVJlbmRlcmVyLnByb3RvdHlwZS5vbkNvbnRleHRDaGFuZ2UgPSBmdW5jdGlvbiAoKVxue1xuICAgIHZhciBnbCA9IHRoaXMucmVuZGVyZXIuZ2w7XG5cbiAgICB0aGlzLk1BWF9URVhUVUVTID0gZ2wuZ2V0UGFyYW1ldGVyKGdsLk1BWF9URVhUVVJFX0lNQUdFX1VOSVRTKTtcblxuICAgIHRoaXMuX3NoYWRlciA9IGdlbmVyYXRlTXVsdGlUZXh0dXJlU2hhZGVyKGdsLCB0aGlzLk1BWF9URVhUVUVTKS8vbmV3IFRleHR1cmVTaGFkZXIoZ2wpO1xuXG4gICAgLy8gc2V0dXAgZGVmYXVsdCBzaGFkZXJcbiAgICB0aGlzLnNoYWRlciA9IHRoaXMucmVuZGVyZXIuc2hhZGVyTWFuYWdlci5kZWZhdWx0U2hhZGVyO1xuXG4gICAgLy8gY3JlYXRlIGEgY291cGxlIG9mIGJ1ZmZlcnNcbiAgICB0aGlzLnZlcnRleEJ1ZmZlciA9IGdsQ29yZS5HTEJ1ZmZlci5jcmVhdGVWZXJ0ZXhCdWZmZXIoZ2wsIG51bGwsIGdsLkRZTkFNSUNfRFJBVyk7XG4gICAgdGhpcy5pbmRleEJ1ZmZlciA9IGdsQ29yZS5HTEJ1ZmZlci5jcmVhdGVJbmRleEJ1ZmZlcihnbCwgdGhpcy5pbmRpY2VzLCBnbC5TVEFUSUNfRFJBVyk7XG5cbiAgICAvLyBidWlsZCB0aGUgdmFvIG9iamVjdCB0aGF0IHdpbGwgcmVuZGVyLi5cbiAgICB0aGlzLnZhbyA9IG5ldyBnbENvcmUuVmVydGV4QXJyYXlPYmplY3QoZ2wpO1xuXG4gICAgdGhpcy52YW8uYWRkSW5kZXgodGhpcy5pbmRleEJ1ZmZlcik7XG4gICAgdGhpcy52YW8uYWRkQXR0cmlidXRlKHRoaXMudmVydGV4QnVmZmVyLCB0aGlzLl9zaGFkZXIuYXR0cmlidXRlcy5hVmVydGV4UG9zaXRpb24sIGdsLkZMT0FULCBmYWxzZSwgdGhpcy52ZXJ0Qnl0ZVNpemUsIDApO1xuICAgIHRoaXMudmFvLmFkZEF0dHJpYnV0ZSh0aGlzLnZlcnRleEJ1ZmZlciwgdGhpcy5fc2hhZGVyLmF0dHJpYnV0ZXMuYVRleHR1cmVDb29yZCwgZ2wuVU5TSUdORURfU0hPUlQsIHRydWUsIHRoaXMudmVydEJ5dGVTaXplLCAyICogNCk7XG4gICAgdGhpcy52YW8uYWRkQXR0cmlidXRlKHRoaXMudmVydGV4QnVmZmVyLCB0aGlzLl9zaGFkZXIuYXR0cmlidXRlcy5hQ29sb3IsIGdsLlVOU0lHTkVEX0JZVEUsIHRydWUsIHRoaXMudmVydEJ5dGVTaXplLCAzICogNCk7XG4gICAgdGhpcy52YW8uYWRkQXR0cmlidXRlKHRoaXMudmVydGV4QnVmZmVyLCB0aGlzLl9zaGFkZXIuYXR0cmlidXRlcy5hVGV4dHVyZUlkLCBnbC5GTE9BVCwgZmFsc2UsIHRoaXMudmVydEJ5dGVTaXplLCA0ICogNCk7XG5cbiAgICB0aGlzLmN1cnJlbnRCbGVuZE1vZGUgPSA5OTk5OTtcbn07XG5cbi8qKlxuICogUmVuZGVycyB0aGUgc3ByaXRlIG9iamVjdC5cbiAqXG4gKiBAcGFyYW0gc3ByaXRlIHtQSVhJLlNwcml0ZX0gdGhlIHNwcml0ZSB0byByZW5kZXIgd2hlbiB1c2luZyB0aGlzIHNwcml0ZWJhdGNoXG4gKi9cblNwcml0ZVJlbmRlcmVyLnByb3RvdHlwZS5yZW5kZXIgPSBmdW5jdGlvbiAoc3ByaXRlKVxue1xuICAgIC8vVE9ETyBzZXQgYmxlbmQgbW9kZXMuLlxuICAgIC8vIGNoZWNrIHRleHR1cmUuLlxuICAgIGlmICh0aGlzLmN1cnJlbnRJbmRleCA+PSB0aGlzLnNpemUpXG4gICAge1xuICAgICAgICB0aGlzLmZsdXNoKCk7XG4gICAgfVxuXG4gIFxuICAgIC8vIGdldCB0aGUgdXZzIGZvciB0aGUgdGV4dHVyZVxuICAgXG5cbiAgICAvLyBpZiB0aGUgdXZzIGhhdmUgbm90IHVwZGF0ZWQgdGhlbiBubyBwb2ludCByZW5kZXJpbmcganVzdCB5ZXQhXG4gICAgaWYgKCFzcHJpdGUudGV4dHVyZS5fdXZzKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgICAvLyBwdXNoIGEgdGV4dHVyZS5cbiAgICAvLyBpbmNyZW1lbnQgdGhlIGJhdGNoc2l6ZVxuICAgIHZhciBuZXh0VGV4dHVyZSA9ICBzcHJpdGUudGV4dHVyZS5iYXNlVGV4dHVyZTtcbiAgICB2YXIgY3VycmVudEdyb3VwID0gdGhpcy5jdXJyZW50R3JvdXA7XG4gICAgdmFyIGk7XG5cbiAgICBpZih0aGlzLmN1cnJlbnRUZXh0dXJlICE9PSBuZXh0VGV4dHVyZSlcbiAgICB7XG4gICAgICAgIHRoaXMuY3VycmVudFRleHR1cmUgPSBuZXh0VGV4dHVyZTtcbiAgICAgICAgXG4gICAgICAgIGlmKCFuZXh0VGV4dHVyZS5fZW5hYmxlZClcbiAgICAgICAge1xuICAgICAgICAgICAgbmV4dFRleHR1cmUuX2VuYWJsZWQgPSB0cnVlO1xuICAgICAgICAgICAgbmV4dFRleHR1cmUuX2lkID0gdGhpcy50ZXh0dXJlQ291bnQ7XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIGlmKHRoaXMudGV4dHVyZUNvdW50ID09PSB0aGlzLk1BWF9URVhUVUVTKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGZvciAoIGkgPSAwOyBpIDwgY3VycmVudEdyb3VwLnRleHR1cmVDb3VudDsgaSsrKSBcbiAgICAgICAgICAgICAgICB7ICAgICBcbiAgICAgICAgICAgICAgICAgICAgY3VycmVudEdyb3VwLnRleHR1cmVzW2ldLl9lbmFibGVkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgIHRoaXMudGV4dHVyZUNvdW50ID0gMDtcblxuICAgICAgICAgICAgICAgIGN1cnJlbnRHcm91cC5zaXplID0gdGhpcy5jdXJyZW50SW5kZXggLSBjdXJyZW50R3JvdXAuc3RhcnQ7XG4gICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICBjdXJyZW50R3JvdXAgPSB0aGlzLmN1cnJlbnRHcm91cCA9IHRoaXMuZ3JvdXBzW3RoaXMuZ3JvdXBDb3VudCsrXTtcbiAgICAgICAgICAgICAgICBjdXJyZW50R3JvdXAudGV4dHVyZUNvdW50ID0gMDtcbiAgICAgICAgICAgICAgICBjdXJyZW50R3JvdXAuc3RhcnQgPSB0aGlzLmN1cnJlbnRJbmRleDtcbiAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY3VycmVudEdyb3VwLnRleHR1cmVzW2N1cnJlbnRHcm91cC50ZXh0dXJlQ291bnQrK10gPSBuZXh0VGV4dHVyZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMudGV4dHVyZUNvdW50Kys7XG4gICAgfVxuXG4gICAgLy8gVE9ETyB0cmltPz9cbiAgICB2YXIgaW5kZXggPSB0aGlzLmN1cnJlbnRJbmRleCAqIHRoaXMudmVydEJ5dGVTaXplO1xuXG4gICAgdGhpcy5jdXJyZW50SW5kZXgrKztcblxuICAgIC8vIHVwbG9hZCB0aGUgc3ByaXRlIGVsZW1ldG5zLi4uXG4gICAgLy8gdGhleSBoYXZlIGFsbCByZWFkeSBiZWVuIGNhbGN1bGF0ZWQgc28gd2UganVzdCBuZWVkIHRvIHB1c2ggdGhlbSBpbnRvIHRoZSBidWZmZXIuXG4gICAgdmFyIGNvbG9ycyA9IHRoaXMuY29sb3JzO1xuICAgIHZhciBwb3NpdGlvbnMgPSB0aGlzLnBvc2l0aW9ucztcbiAgICB2YXIgdmVydGV4RGF0YSA9IHNwcml0ZS52ZXJ0ZXhEYXRhXG4gICAgdmFyIHRpbnQgPSAoc3ByaXRlLnRpbnQgPj4gMTYpICsgKHNwcml0ZS50aW50ICYgMHhmZjAwKSArICgoc3ByaXRlLnRpbnQgJiAweGZmKSA8PCAxNikgKyAoc3ByaXRlLndvcmxkQWxwaGEgKiAyNTUgPDwgMjQpO1xuICAgIHZhciB1dnMgPSBzcHJpdGUudGV4dHVyZS5fdXZzLnV2c191aW50MzI7XG4gICAgLy94eVxuICAgIHBvc2l0aW9uc1tpbmRleCsrXSA9IHZlcnRleERhdGFbMF07XG4gICAgcG9zaXRpb25zW2luZGV4KytdID0gdmVydGV4RGF0YVsxXTtcbiAgICB0aGlzLnV2c1tpbmRleCsrXSA9IHV2c1swXTtcbiAgICBjb2xvcnNbaW5kZXgrK10gPSB0aW50O1xuICAgIHBvc2l0aW9uc1tpbmRleCsrXSA9IG5leHRUZXh0dXJlLl9pZDsgXG4gICAgXG4gICAgLy8geHlcbiAgICBwb3NpdGlvbnNbaW5kZXgrK10gPSB2ZXJ0ZXhEYXRhWzJdO1xuICAgIHBvc2l0aW9uc1tpbmRleCsrXSA9IHZlcnRleERhdGFbM107XG4gICAgdGhpcy51dnNbaW5kZXgrK10gPSB1dnNbMV07XG4gICAgY29sb3JzW2luZGV4KytdID0gdGludDtcbiAgICBwb3NpdGlvbnNbaW5kZXgrK10gPSBuZXh0VGV4dHVyZS5faWQ7XG5cbiAgICAgLy8geHlcbiAgICBwb3NpdGlvbnNbaW5kZXgrK10gPSB2ZXJ0ZXhEYXRhWzRdO1xuICAgIHBvc2l0aW9uc1tpbmRleCsrXSA9IHZlcnRleERhdGFbNV07XG4gICAgdGhpcy51dnNbaW5kZXgrK10gPSB1dnNbMl07XG4gICAgY29sb3JzW2luZGV4KytdID0gdGludDtcbiAgICBwb3NpdGlvbnNbaW5kZXgrK10gPSBuZXh0VGV4dHVyZS5faWQ7XG5cbiAgICAvLyB4eVxuICAgIHBvc2l0aW9uc1tpbmRleCsrXSA9IHZlcnRleERhdGFbNl07XG4gICAgcG9zaXRpb25zW2luZGV4KytdID0gdmVydGV4RGF0YVs3XTtcbiAgICB0aGlzLnV2c1tpbmRleCsrXSA9IHV2c1szXTtcbiAgICBjb2xvcnNbaW5kZXgrK10gPSB0aW50O1xuICAgIHBvc2l0aW9uc1tpbmRleCsrXSA9IG5leHRUZXh0dXJlLl9pZDtcbn07XG5cbi8qKlxuICogUmVuZGVycyB0aGUgY29udGVudCBhbmQgZW1wdGllcyB0aGUgY3VycmVudCBiYXRjaC5cbiAqXG4gKi9cblNwcml0ZVJlbmRlcmVyLnByb3RvdHlwZS5mbHVzaCA9IGZ1bmN0aW9uICgpXG57XG4gICAgaWYgKHRoaXMuY3VycmVudEluZGV4ID09PSAwKXJldHVybjtcblxuICAgIHZhciBnbCA9IHRoaXMucmVuZGVyZXIuZ2w7XG5cblxuICAgIHRoaXMuY3VycmVudEdyb3VwLnNpemUgPSB0aGlzLmN1cnJlbnRJbmRleCAtIHRoaXMuY3VycmVudEdyb3VwLnN0YXJ0O1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5jdXJyZW50R3JvdXAudGV4dHVyZUNvdW50OyBpKyspIFxuICAgIHsgICAgIFxuICAgICAgICB0aGlzLmN1cnJlbnRHcm91cC50ZXh0dXJlc1tpXS5fZW5hYmxlZCA9IGZhbHNlO1xuICAgIH07XG4gICBcbiAgICAvLyBkbyBzb21lIHNtYXJ0IGFycmF5IHN0dWZmLi5cbiAgICAvLyBkb3VibGUgc2l6ZSBzbyB3ZSBkb250IGFsd2F5IHN1YmFycmF5IHRoZSBlbGVtZW50cy4uXG4gICAgLy8gdXBsb2FkIHRoZSB2ZXJ0cyB0byB0aGUgYnVmZmVyXG4gICAgaWYgKHRoaXMuY3VycmVudEJhdGNoU2l6ZSA+ICggdGhpcy5zaXplICogMC41ICkgKVxuICAgIHtcbiAgICAgICAgdGhpcy52ZXJ0ZXhCdWZmZXIudXBsb2FkKHRoaXMudmVydGljZXMsIDAsIHRydWUpO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICAvLyBvIGsgLi4gc3ViIGFycmF5IGlzIFNMT1c+P1xuICAgICAgICB2YXIgdmlldyA9IHRoaXMucG9zaXRpb25zLnN1YmFycmF5KDAsIHRoaXMuY3VycmVudEluZGV4ICogdGhpcy52ZXJ0Qnl0ZVNpemUpO1xuICAgICAgICB0aGlzLnZlcnRleEJ1ZmZlci51cGxvYWQodmlldywgMCwgdHJ1ZSk7XG4gICAgfVxuXG4gICAgLy8gYmluZCBzaGFkZXIuLlxuICAgIHRoaXMucmVuZGVyZXIuYmluZFNoYWRlcih0aGlzLl9zaGFkZXIpO1xuICAgIHRoaXMucmVuZGVyZXIuYmxlbmRNb2RlTWFuYWdlci5zZXRCbGVuZE1vZGUoIDAgKTtcblxuICAgIC8vLyByZW5kZXIgdGhlIGdyb3Vwcy4uXG4gICAgZm9yIChpID0gMDsgaSA8IHRoaXMuZ3JvdXBDb3VudDsgaSsrKSB7XG4gICAgICAgIFxuICAgICAgICB2YXIgZ3JvdXAgPSB0aGlzLmdyb3Vwc1tpXTtcblxuICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IGdyb3VwLnRleHR1cmVDb3VudDsgaisrKSB7XG4gICAgICAgICAgICB0aGlzLnJlbmRlcmVyLmJpbmRUZXh0dXJlKGdyb3VwLnRleHR1cmVzW2pdLCBqKTtcbiAgICAgICAgfTtcblxuICAgICAgICBnbC5kcmF3RWxlbWVudHMoZ2wuVFJJQU5HTEVTLCBncm91cC5zaXplICogNiwgZ2wuVU5TSUdORURfU0hPUlQsIGdyb3VwLnN0YXJ0ICogNiAqIDIpO1xuICAgIH07XG5cbiAgICAvLyByZXNldCBlbGVtZW50cyBmb3IgdGhlIG5leHQgZmx1c2hcbiAgICB0aGlzLmN1cnJlbnRUZXh0dXJlID0gbnVsbDtcbiAgICB0aGlzLmN1cnJlbnRJbmRleCA9IDA7XG4gICAgdGhpcy50ZXh0dXJlQ291bnQgPSAwO1xuICAgIHRoaXMuZ3JvdXBDb3VudCA9IDA7XG4gICAgXG4gICAgdGhpcy5jdXJyZW50R3JvdXAgPSB0aGlzLmdyb3Vwc1t0aGlzLmdyb3VwQ291bnQrK107XG4gICAgdGhpcy5jdXJyZW50R3JvdXAudGV4dHVyZUNvdW50ID0gMDtcbn07XG5cbi8qKlxuICogU3RhcnRzIGEgbmV3IHNwcml0ZSBiYXRjaC5cbiAqXG4gKi9cblNwcml0ZVJlbmRlcmVyLnByb3RvdHlwZS5zdGFydCA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy52YW8uYmluZCgpO1xufTtcblxuU3ByaXRlUmVuZGVyZXIucHJvdG90eXBlLnN0b3AgPSBmdW5jdGlvbiAoKVxue1xuICAgIHRoaXMuZmx1c2goKTtcbiAgICB0aGlzLnZhby51bmJpbmQoKTtcbn07XG4vKipcbiAqIERlc3Ryb3lzIHRoZSBTcHJpdGVCYXRjaC5cbiAqXG4gKi9cblNwcml0ZVJlbmRlcmVyLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLnZlcnRleEJ1ZmZlci5kZXN0cm95KCk7XG4gICAgdGhpcy5pbmRleEJ1ZmZlci5kZXN0cm95KCk7XG5cbiAgICBPYmplY3RSZW5kZXJlci5wcm90b3R5cGUuZGVzdHJveS5jYWxsKHRoaXMpO1xuXG4gICAgdGhpcy5zaGFkZXIuZGVzdHJveSgpO1xuXG4gICAgdGhpcy5yZW5kZXJlciA9IG51bGw7XG5cbiAgICB0aGlzLnZlcnRpY2VzID0gbnVsbDtcbiAgICB0aGlzLnBvc2l0aW9ucyA9IG51bGw7XG4gICAgdGhpcy5jb2xvcnMgPSBudWxsO1xuICAgIHRoaXMuaW5kaWNlcyA9IG51bGw7XG5cbiAgICB0aGlzLnZlcnRleEJ1ZmZlciA9IG51bGw7XG4gICAgdGhpcy5pbmRleEJ1ZmZlciA9IG51bGw7XG5cbiAgICB0aGlzLnNwcml0ZXMgPSBudWxsO1xuICAgIHRoaXMuc2hhZGVyID0gbnVsbDtcbn07XG4iLCJ2YXIgU2hhZGVyID0gcmVxdWlyZSgncGl4aS1nbC1jb3JlJykuR0xTaGFkZXI7XG5cblxuZnVuY3Rpb24gZ2VuZXJhdGVNdWx0aVRleHR1cmVTaGFkZXIoZ2wsIG1heFRleHR1cmVzKVxue1xuICAgIHZhciB2ZXJ0ZXhTcmMgPSBcInByZWNpc2lvbiBsb3dwIGZsb2F0O1xcbmF0dHJpYnV0ZSB2ZWMyIGFWZXJ0ZXhQb3NpdGlvbjtcXG5hdHRyaWJ1dGUgdmVjMiBhVGV4dHVyZUNvb3JkO1xcbmF0dHJpYnV0ZSB2ZWM0IGFDb2xvcjtcXG5hdHRyaWJ1dGUgZmxvYXQgYVRleHR1cmVJZDtcXG5cXG51bmlmb3JtIG1hdDMgcHJvamVjdGlvbk1hdHJpeDtcXG5cXG52YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDtcXG52YXJ5aW5nIHZlYzQgdkNvbG9yO1xcbnZhcnlpbmcgZmxvYXQgdlRleHR1cmVJZDtcXG5cXG52b2lkIG1haW4odm9pZCl7XFxuICAgZ2xfUG9zaXRpb24gPSB2ZWM0KChwcm9qZWN0aW9uTWF0cml4ICogdmVjMyhhVmVydGV4UG9zaXRpb24sIDEuMCkpLnh5LCAwLjAsIDEuMCk7XFxuICAgdlRleHR1cmVDb29yZCA9IGFUZXh0dXJlQ29vcmQ7XFxuICAgdlRleHR1cmVJZCA9IGFUZXh0dXJlSWQ7XFxuICAgdkNvbG9yID0gdmVjNChhQ29sb3IucmdiICogYUNvbG9yLmEsIGFDb2xvci5hKTtcXG59XCI7XG4gICAgdmFyIGZyYWdtZW50U3JjID0gJ3ByZWNpc2lvbiBsb3dwIGZsb2F0O1xcblxcbicgKyBnZW5lcmF0ZVNhbXBsZVNyYyhtYXhUZXh0dXJlcykgKyBcIlxcblxcblwiICsgZnJhZ1RlbXBsYXRlXG5cbiAgICBmcmFnbWVudFNyYyA9IGZyYWdtZW50U3JjLnJlcGxhY2UoL1xcJVxcJS9naSwgJzE2Jyk7XG5cbiAgICB2YXIgc2hhZGVyID0gbmV3IFNoYWRlcihnbCwgdmVydGV4U3JjLCBmcmFnbWVudFNyYyk7XG5cblxuICAgIHZhciBzYW1wbGVWYWx1ZXMgPSBbXTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG1heFRleHR1cmVzOyBpKyspIHtcbiAgICAgICAgc2FtcGxlVmFsdWVzW2ldID0gaTtcbiAgICB9O1xuXG4gICAgc2hhZGVyLmJpbmQoKTtcbiAgICBzaGFkZXIudW5pZm9ybXMudVNhbXBsZXJzID0gc2FtcGxlVmFsdWVzO1xuXG4gICAgcmV0dXJuIHNoYWRlcjtcbn1cblxuZnVuY3Rpb24gZ2VuZXJhdGVTYW1wbGVTcmMobWF4VGV4dHVyZXMpXG57XG4gICAgdmFyIHNyYyA9ICd2ZWM0IGdldFNhbXBsZUZyb21BcnJheShzYW1wbGVyMkQgdGV4dHVyZXNbJSVdLCBpbnQgbmR4LCB2ZWMyIHV2KSB7XFxuXFxudmVjNCBjb2xvcjsnXG5cbiAgICBzcmMgKz0gJ1xcbic7XG4gICAgc3JjICs9ICdcXG4nO1xuICAgIFxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbWF4VGV4dHVyZXM7IGkrKykgXG4gICAge1xuICAgICAgICBpZihpID4gMClzcmMgKz0gJ1xcbmVsc2UgJztcbiAgICAgICAgaWYoaSA8IG1heFRleHR1cmVzLTEpc3JjICs9ICdpZihuZHggPT0gJyArIGkgKyAnKSc7XG4gICAgICAgIHNyYyArPSAnXFxueyc7XG4gICAgICAgIHNyYyArPSAnXFxuXFx0Y29sb3IgPSB0ZXh0dXJlMkQodGV4dHVyZXNbJytpKyddLCB1dik7JztcbiAgICAgICAgc3JjICs9ICdcXG59JztcbiAgICB9O1xuXG4gICAgc3JjICs9ICdcXG4nO1xuICAgIHNyYyArPSAnXFxuJztcbiAgICBzcmMgKz0gJ3JldHVybiBjb2xvcjsnO1xuICAgIHNyYyArPSAnXFxufSc7XG5cbiAgICByZXR1cm4gc3JjO1xufVxuXG52YXIgZnJhZ1RlbXBsYXRlID0gW1xuXG4gICAgJ3ZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkOycsXG4gICAgJ3ZhcnlpbmcgdmVjNCB2Q29sb3I7JyxcbiAgICAndmFyeWluZyBmbG9hdCB2VGV4dHVyZUlkOycsXG4gICAgJ3VuaWZvcm0gc2FtcGxlcjJEIHVTYW1wbGVyc1slJV07JyxcblxuICAgICd2b2lkIG1haW4odm9pZCl7JyxcbiAgICAgICAgJ2dsX0ZyYWdDb2xvciA9IGdldFNhbXBsZUZyb21BcnJheSh1U2FtcGxlcnMsIGludCh2VGV4dHVyZUlkKSwgdlRleHR1cmVDb29yZCkgKiB2Q29sb3I7JyxcbiAgICAnfSdcbl0uam9pbignXFxuJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZ2VuZXJhdGVNdWx0aVRleHR1cmVTaGFkZXI7XG4iLCJ2YXIgU3ByaXRlID0gcmVxdWlyZSgnLi4vc3ByaXRlcy9TcHJpdGUnKSxcbiAgICBUZXh0dXJlID0gcmVxdWlyZSgnLi4vdGV4dHVyZXMvVGV4dHVyZScpLFxuICAgIG1hdGggPSByZXF1aXJlKCcuLi9tYXRoJyksXG4gICAgdXRpbHMgPSByZXF1aXJlKCcuLi91dGlscycpLFxuICAgIENPTlNUID0gcmVxdWlyZSgnLi4vY29uc3QnKTtcblxuLyoqXG4gKiBBIFRleHQgT2JqZWN0IHdpbGwgY3JlYXRlIGEgbGluZSBvciBtdWx0aXBsZSBsaW5lcyBvZiB0ZXh0LiBUbyBzcGxpdCBhIGxpbmUgeW91IGNhbiB1c2UgJ1xcbicgaW4geW91ciB0ZXh0IHN0cmluZyxcbiAqIG9yIGFkZCBhIHdvcmRXcmFwIHByb3BlcnR5IHNldCB0byB0cnVlIGFuZCBhbmQgd29yZFdyYXBXaWR0aCBwcm9wZXJ0eSB3aXRoIGEgdmFsdWUgaW4gdGhlIHN0eWxlIG9iamVjdC5cbiAqXG4gKiBBIFRleHQgY2FuIGJlIGNyZWF0ZWQgZGlyZWN0bHkgZnJvbSBhIHN0cmluZyBhbmQgYSBzdHlsZSBvYmplY3RcbiAqXG4gKiBgYGBqc1xuICogdmFyIHRleHQgPSBuZXcgUElYSS5UZXh0KCdUaGlzIGlzIGEgcGl4aSB0ZXh0Jyx7Zm9udCA6ICcyNHB4IEFyaWFsJywgZmlsbCA6IDB4ZmYxMDEwLCBhbGlnbiA6ICdjZW50ZXInfSk7XG4gKiBgYGBcbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuU3ByaXRlXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIHRleHQge3N0cmluZ30gVGhlIGNvcHkgdGhhdCB5b3Ugd291bGQgbGlrZSB0aGUgdGV4dCB0byBkaXNwbGF5XG4gKiBAcGFyYW0gW3N0eWxlXSB7b2JqZWN0fSBUaGUgc3R5bGUgcGFyYW1ldGVyc1xuICogQHBhcmFtIFtzdHlsZS5mb250XSB7c3RyaW5nfSBkZWZhdWx0ICdib2xkIDIwcHggQXJpYWwnIFRoZSBzdHlsZSBhbmQgc2l6ZSBvZiB0aGUgZm9udFxuICogQHBhcmFtIFtzdHlsZS5maWxsPSdibGFjayddIHtTdHJpbmd8TnVtYmVyfSBBIGNhbnZhcyBmaWxsc3R5bGUgdGhhdCB3aWxsIGJlIHVzZWQgb24gdGhlIHRleHQgZS5nICdyZWQnLCAnIzAwRkYwMCdcbiAqIEBwYXJhbSBbc3R5bGUuYWxpZ249J2xlZnQnXSB7c3RyaW5nfSBBbGlnbm1lbnQgZm9yIG11bHRpbGluZSB0ZXh0ICgnbGVmdCcsICdjZW50ZXInIG9yICdyaWdodCcpLCBkb2VzIG5vdCBhZmZlY3Qgc2luZ2xlIGxpbmUgdGV4dFxuICogQHBhcmFtIFtzdHlsZS5zdHJva2VdIHtTdHJpbmd8TnVtYmVyfSBBIGNhbnZhcyBmaWxsc3R5bGUgdGhhdCB3aWxsIGJlIHVzZWQgb24gdGhlIHRleHQgc3Ryb2tlIGUuZyAnYmx1ZScsICcjRkNGRjAwJ1xuICogQHBhcmFtIFtzdHlsZS5zdHJva2VUaGlja25lc3M9MF0ge251bWJlcn0gQSBudW1iZXIgdGhhdCByZXByZXNlbnRzIHRoZSB0aGlja25lc3Mgb2YgdGhlIHN0cm9rZS4gRGVmYXVsdCBpcyAwIChubyBzdHJva2UpXG4gKiBAcGFyYW0gW3N0eWxlLndvcmRXcmFwPWZhbHNlXSB7Ym9vbGVhbn0gSW5kaWNhdGVzIGlmIHdvcmQgd3JhcCBzaG91bGQgYmUgdXNlZFxuICogQHBhcmFtIFtzdHlsZS53b3JkV3JhcFdpZHRoPTEwMF0ge251bWJlcn0gVGhlIHdpZHRoIGF0IHdoaWNoIHRleHQgd2lsbCB3cmFwLCBpdCBuZWVkcyB3b3JkV3JhcCB0byBiZSBzZXQgdG8gdHJ1ZVxuICogQHBhcmFtIFtzdHlsZS5saW5lSGVpZ2h0XSB7bnVtYmVyfSBUaGUgbGluZSBoZWlnaHQsIGEgbnVtYmVyIHRoYXQgcmVwcmVzZW50cyB0aGUgdmVydGljYWwgc3BhY2UgdGhhdCBhIGxldHRlciB1c2VzXG4gKiBAcGFyYW0gW3N0eWxlLmRyb3BTaGFkb3c9ZmFsc2VdIHtib29sZWFufSBTZXQgYSBkcm9wIHNoYWRvdyBmb3IgdGhlIHRleHRcbiAqIEBwYXJhbSBbc3R5bGUuZHJvcFNoYWRvd0NvbG9yPScjMDAwMDAwJ10ge3N0cmluZ30gQSBmaWxsIHN0eWxlIHRvIGJlIHVzZWQgb24gdGhlIGRyb3BzaGFkb3cgZS5nICdyZWQnLCAnIzAwRkYwMCdcbiAqIEBwYXJhbSBbc3R5bGUuZHJvcFNoYWRvd0FuZ2xlPU1hdGguUEkvNF0ge251bWJlcn0gU2V0IGEgYW5nbGUgb2YgdGhlIGRyb3Agc2hhZG93XG4gKiBAcGFyYW0gW3N0eWxlLmRyb3BTaGFkb3dEaXN0YW5jZT01XSB7bnVtYmVyfSBTZXQgYSBkaXN0YW5jZSBvZiB0aGUgZHJvcCBzaGFkb3dcbiAqIEBwYXJhbSBbc3R5bGUuZHJvcFNoYWRvd0JsdXI9MF0ge251bWJlcn0gU2V0IGEgc2hhZG93IGJsdXIgcmFkaXVzXG4gKiBAcGFyYW0gW3N0eWxlLnBhZGRpbmc9MF0ge251bWJlcn0gT2NjYXNpb25hbGx5IHNvbWUgZm9udHMgYXJlIGNyb3BwZWQgb24gdG9wIG9yIGJvdHRvbS4gQWRkaW5nIHNvbWUgcGFkZGluZyB3aWxsXG4gKiAgICAgIHByZXZlbnQgdGhpcyBmcm9tIGhhcHBlbmluZyBieSBhZGRpbmcgcGFkZGluZyB0byB0aGUgdG9wIGFuZCBib3R0b20gb2YgdGV4dCBoZWlnaHQuXG4gKiBAcGFyYW0gW3N0eWxlLnRleHRCYXNlbGluZT0nYWxwaGFiZXRpYyddIHtzdHJpbmd9IFRoZSBiYXNlbGluZSBvZiB0aGUgdGV4dCB0aGF0IGlzIHJlbmRlcmVkLlxuICogQHBhcmFtIFtzdHlsZS5saW5lSm9pbj0nbWl0ZXInXSB7c3RyaW5nfSBUaGUgbGluZUpvaW4gcHJvcGVydHkgc2V0cyB0aGUgdHlwZSBvZiBjb3JuZXIgY3JlYXRlZCwgaXQgY2FuIHJlc29sdmVcbiAqICAgICAgc3Bpa2VkIHRleHQgaXNzdWVzLiBEZWZhdWx0IGlzICdtaXRlcicgKGNyZWF0ZXMgYSBzaGFycCBjb3JuZXIpLlxuICogQHBhcmFtIFtzdHlsZS5taXRlckxpbWl0PTEwXSB7bnVtYmVyfSBUaGUgbWl0ZXIgbGltaXQgdG8gdXNlIHdoZW4gdXNpbmcgdGhlICdtaXRlcicgbGluZUpvaW4gbW9kZS4gVGhpcyBjYW4gcmVkdWNlXG4gKiAgICAgIG9yIGluY3JlYXNlIHRoZSBzcGlraW5lc3Mgb2YgcmVuZGVyZWQgdGV4dC5cbiAqL1xuZnVuY3Rpb24gVGV4dCh0ZXh0LCBzdHlsZSwgcmVzb2x1dGlvbilcbntcbiAgICAvKipcbiAgICAgKiBUaGUgY2FudmFzIGVsZW1lbnQgdGhhdCBldmVyeXRoaW5nIGlzIGRyYXduIHRvXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtIVE1MQ2FudmFzRWxlbWVudH1cbiAgICAgKi9cbiAgICB0aGlzLmNhbnZhcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NhbnZhcycpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGNhbnZhcyAyZCBjb250ZXh0IHRoYXQgZXZlcnl0aGluZyBpcyBkcmF3biB3aXRoXG4gICAgICogQG1lbWJlciB7SFRNTENhbnZhc0VsZW1lbnR9XG4gICAgICovXG4gICAgdGhpcy5jb250ZXh0ID0gdGhpcy5jYW52YXMuZ2V0Q29udGV4dCgnMmQnKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSByZXNvbHV0aW9uIG9mIHRoZSBjYW52YXMuXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMucmVzb2x1dGlvbiA9IHJlc29sdXRpb24gfHwgQ09OU1QuUkVTT0xVVElPTjtcblxuICAgIC8qKlxuICAgICAqIFByaXZhdGUgdHJhY2tlciBmb3IgdGhlIGN1cnJlbnQgdGV4dC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge3N0cmluZ31cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX3RleHQgPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogUHJpdmF0ZSB0cmFja2VyIGZvciB0aGUgY3VycmVudCBzdHlsZS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge29iamVjdH1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX3N0eWxlID0gbnVsbDtcblxuICAgIHZhciB0ZXh0dXJlID0gVGV4dHVyZS5mcm9tQ2FudmFzKHRoaXMuY2FudmFzKTtcbiAgICB0ZXh0dXJlLnRyaW0gPSBuZXcgbWF0aC5SZWN0YW5nbGUoKTtcbiAgICBTcHJpdGUuY2FsbCh0aGlzLCB0ZXh0dXJlKTtcblxuICAgIHRoaXMudGV4dCA9IHRleHQ7XG4gICAgdGhpcy5zdHlsZSA9IHN0eWxlO1xufVxuXG4vLyBjb25zdHJ1Y3RvclxuVGV4dC5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFNwcml0ZS5wcm90b3R5cGUpO1xuVGV4dC5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBUZXh0O1xubW9kdWxlLmV4cG9ydHMgPSBUZXh0O1xuXG5UZXh0LmZvbnRQcm9wZXJ0aWVzQ2FjaGUgPSB7fTtcblRleHQuZm9udFByb3BlcnRpZXNDYW52YXMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdjYW52YXMnKTtcblRleHQuZm9udFByb3BlcnRpZXNDb250ZXh0ID0gVGV4dC5mb250UHJvcGVydGllc0NhbnZhcy5nZXRDb250ZXh0KCcyZCcpO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhUZXh0LnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFRoZSB3aWR0aCBvZiB0aGUgVGV4dCwgc2V0dGluZyB0aGlzIHdpbGwgYWN0dWFsbHkgbW9kaWZ5IHRoZSBzY2FsZSB0byBhY2hpZXZlIHRoZSB2YWx1ZSBzZXRcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5UZXh0I1xuICAgICAqL1xuICAgIHdpZHRoOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgaWYgKHRoaXMuZGlydHkpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdGhpcy51cGRhdGVUZXh0KCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiB0aGlzLnNjYWxlLnggKiB0aGlzLl90ZXh0dXJlLl9mcmFtZS53aWR0aDtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuc2NhbGUueCA9IHZhbHVlIC8gdGhpcy5fdGV4dHVyZS5fZnJhbWUud2lkdGg7XG4gICAgICAgICAgICB0aGlzLl93aWR0aCA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFRoZSBoZWlnaHQgb2YgdGhlIFRleHQsIHNldHRpbmcgdGhpcyB3aWxsIGFjdHVhbGx5IG1vZGlmeSB0aGUgc2NhbGUgdG8gYWNoaWV2ZSB0aGUgdmFsdWUgc2V0XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuVGV4dCNcbiAgICAgKi9cbiAgICBoZWlnaHQ6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICBpZiAodGhpcy5kaXJ0eSlcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZVRleHQoKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuICB0aGlzLnNjYWxlLnkgKiB0aGlzLl90ZXh0dXJlLl9mcmFtZS5oZWlnaHQ7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnNjYWxlLnkgPSB2YWx1ZSAvIHRoaXMuX3RleHR1cmUuX2ZyYW1lLmhlaWdodDtcbiAgICAgICAgICAgIHRoaXMuX2hlaWdodCA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFNldCB0aGUgc3R5bGUgb2YgdGhlIHRleHRcbiAgICAgKlxuICAgICAqIEBwYXJhbSBbc3R5bGVdIHtvYmplY3R9IFRoZSBzdHlsZSBwYXJhbWV0ZXJzXG4gICAgICogQHBhcmFtIFtzdHlsZS5mb250PSdib2xkIDIwcHQgQXJpYWwnXSB7c3RyaW5nfSBUaGUgc3R5bGUgYW5kIHNpemUgb2YgdGhlIGZvbnRcbiAgICAgKiBAcGFyYW0gW3N0eWxlLmZpbGw9J2JsYWNrJ10ge3N0cmluZ3xudW1iZXJ9IEEgY2FudmFzIGZpbGxzdHlsZSB0aGF0IHdpbGwgYmUgdXNlZCBvbiB0aGUgdGV4dCBlZyAncmVkJywgJyMwMEZGMDAnXG4gICAgICogQHBhcmFtIFtzdHlsZS5hbGlnbj0nbGVmdCddIHtzdHJpbmd9IEFsaWdubWVudCBmb3IgbXVsdGlsaW5lIHRleHQgKCdsZWZ0JywgJ2NlbnRlcicgb3IgJ3JpZ2h0JyksIGRvZXMgbm90IGFmZmVjdCBzaW5nbGUgbGluZSB0ZXh0XG4gICAgICogQHBhcmFtIFtzdHlsZS5zdHJva2U9J2JsYWNrJ10ge3N0cmluZ3xudW1iZXJ9IEEgY2FudmFzIGZpbGxzdHlsZSB0aGF0IHdpbGwgYmUgdXNlZCBvbiB0aGUgdGV4dCBzdHJva2UgZWcgJ2JsdWUnLCAnI0ZDRkYwMCdcbiAgICAgKiBAcGFyYW0gW3N0eWxlLnN0cm9rZVRoaWNrbmVzcz0wXSB7bnVtYmVyfSBBIG51bWJlciB0aGF0IHJlcHJlc2VudHMgdGhlIHRoaWNrbmVzcyBvZiB0aGUgc3Ryb2tlLiBEZWZhdWx0IGlzIDAgKG5vIHN0cm9rZSlcbiAgICAgKiBAcGFyYW0gW3N0eWxlLndvcmRXcmFwPWZhbHNlXSB7Ym9vbGVhbn0gSW5kaWNhdGVzIGlmIHdvcmQgd3JhcCBzaG91bGQgYmUgdXNlZFxuICAgICAqIEBwYXJhbSBbc3R5bGUud29yZFdyYXBXaWR0aD0xMDBdIHtudW1iZXJ9IFRoZSB3aWR0aCBhdCB3aGljaCB0ZXh0IHdpbGwgd3JhcFxuICAgICAqIEBwYXJhbSBbc3R5bGUubGluZUhlaWdodF0ge251bWJlcn0gVGhlIGxpbmUgaGVpZ2h0LCBhIG51bWJlciB0aGF0IHJlcHJlc2VudHMgdGhlIHZlcnRpY2FsIHNwYWNlIHRoYXQgYSBsZXR0ZXIgdXNlc1xuICAgICAqIEBwYXJhbSBbc3R5bGUuZHJvcFNoYWRvdz1mYWxzZV0ge2Jvb2xlYW59IFNldCBhIGRyb3Agc2hhZG93IGZvciB0aGUgdGV4dFxuICAgICAqIEBwYXJhbSBbc3R5bGUuZHJvcFNoYWRvd0NvbG9yPScjMDAwMDAwJ10ge3N0cmluZ3xudW1iZXJ9IEEgZmlsbCBzdHlsZSB0byBiZSB1c2VkIG9uIHRoZSBkcm9wc2hhZG93IGUuZyAncmVkJywgJyMwMEZGMDAnXG4gICAgICogQHBhcmFtIFtzdHlsZS5kcm9wU2hhZG93QW5nbGU9TWF0aC5QSS82XSB7bnVtYmVyfSBTZXQgYSBhbmdsZSBvZiB0aGUgZHJvcCBzaGFkb3dcbiAgICAgKiBAcGFyYW0gW3N0eWxlLmRyb3BTaGFkb3dEaXN0YW5jZT01XSB7bnVtYmVyfSBTZXQgYSBkaXN0YW5jZSBvZiB0aGUgZHJvcCBzaGFkb3dcbiAgICAgKiBAcGFyYW0gW3N0eWxlLmRyb3BTaGFkb3dCbHVyPTBdIHtudW1iZXJ9IFNldCBhIHNoYWRvdyBibHVyIHJhZGl1c1xuICAgICAqIEBwYXJhbSBbc3R5bGUucGFkZGluZz0wXSB7bnVtYmVyfSBPY2Nhc2lvbmFsbHkgc29tZSBmb250cyBhcmUgY3JvcHBlZCBvbiB0b3Agb3IgYm90dG9tLiBBZGRpbmcgc29tZSBwYWRkaW5nIHdpbGxcbiAgICAgKiAgICAgIHByZXZlbnQgdGhpcyBmcm9tIGhhcHBlbmluZyBieSBhZGRpbmcgcGFkZGluZyB0byB0aGUgdG9wIGFuZCBib3R0b20gb2YgdGV4dCBoZWlnaHQuXG4gICAgICogQHBhcmFtIFtzdHlsZS50ZXh0QmFzZWxpbmU9J2FscGhhYmV0aWMnXSB7c3RyaW5nfSBUaGUgYmFzZWxpbmUgb2YgdGhlIHRleHQgdGhhdCBpcyByZW5kZXJlZC5cbiAgICAgKiBAcGFyYW0gW3N0eWxlLmxpbmVKb2luPSdtaXRlciddIHtzdHJpbmd9IFRoZSBsaW5lSm9pbiBwcm9wZXJ0eSBzZXRzIHRoZSB0eXBlIG9mIGNvcm5lciBjcmVhdGVkLCBpdCBjYW4gcmVzb2x2ZVxuICAgICAqICAgICAgc3Bpa2VkIHRleHQgaXNzdWVzLiBEZWZhdWx0IGlzICdtaXRlcicgKGNyZWF0ZXMgYSBzaGFycCBjb3JuZXIpLlxuICAgICAqIEBwYXJhbSBbc3R5bGUubWl0ZXJMaW1pdD0xMF0ge251bWJlcn0gVGhlIG1pdGVyIGxpbWl0IHRvIHVzZSB3aGVuIHVzaW5nIHRoZSAnbWl0ZXInIGxpbmVKb2luIG1vZGUuIFRoaXMgY2FuIHJlZHVjZVxuICAgICAqICAgICAgb3IgaW5jcmVhc2UgdGhlIHNwaWtpbmVzcyBvZiByZW5kZXJlZCB0ZXh0LlxuICAgICAqIEBtZW1iZXJvZiBQSVhJLlRleHQjXG4gICAgICovXG4gICAgc3R5bGU6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fc3R5bGU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHN0eWxlKVxuICAgICAgICB7XG4gICAgICAgICAgICBzdHlsZSA9IHN0eWxlIHx8IHt9O1xuXG4gICAgICAgICAgICBpZiAodHlwZW9mIHN0eWxlLmZpbGwgPT09ICdudW1iZXInKSB7XG4gICAgICAgICAgICAgICAgc3R5bGUuZmlsbCA9IHV0aWxzLmhleDJzdHJpbmcoc3R5bGUuZmlsbCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICh0eXBlb2Ygc3R5bGUuc3Ryb2tlID09PSAnbnVtYmVyJykge1xuICAgICAgICAgICAgICAgIHN0eWxlLnN0cm9rZSA9IHV0aWxzLmhleDJzdHJpbmcoc3R5bGUuc3Ryb2tlKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHR5cGVvZiBzdHlsZS5kcm9wU2hhZG93Q29sb3IgPT09ICdudW1iZXInKSB7XG4gICAgICAgICAgICAgICAgc3R5bGUuZHJvcFNoYWRvd0NvbG9yID0gdXRpbHMuaGV4MnN0cmluZyhzdHlsZS5kcm9wU2hhZG93Q29sb3IpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBzdHlsZS5mb250ID0gc3R5bGUuZm9udCB8fCAnYm9sZCAyMHB0IEFyaWFsJztcbiAgICAgICAgICAgIHN0eWxlLmZpbGwgPSBzdHlsZS5maWxsIHx8ICdibGFjayc7XG4gICAgICAgICAgICBzdHlsZS5hbGlnbiA9IHN0eWxlLmFsaWduIHx8ICdsZWZ0JztcbiAgICAgICAgICAgIHN0eWxlLnN0cm9rZSA9IHN0eWxlLnN0cm9rZSB8fCAnYmxhY2snOyAvL3Byb3ZpZGUgYSBkZWZhdWx0LCBzZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9waXhpanMvcGl4aS5qcy9pc3N1ZXMvMTM2XG4gICAgICAgICAgICBzdHlsZS5zdHJva2VUaGlja25lc3MgPSBzdHlsZS5zdHJva2VUaGlja25lc3MgfHwgMDtcbiAgICAgICAgICAgIHN0eWxlLndvcmRXcmFwID0gc3R5bGUud29yZFdyYXAgfHwgZmFsc2U7XG4gICAgICAgICAgICBzdHlsZS53b3JkV3JhcFdpZHRoID0gc3R5bGUud29yZFdyYXBXaWR0aCB8fCAxMDA7XG5cbiAgICAgICAgICAgIHN0eWxlLmRyb3BTaGFkb3cgPSBzdHlsZS5kcm9wU2hhZG93IHx8IGZhbHNlO1xuICAgICAgICAgICAgc3R5bGUuZHJvcFNoYWRvd0NvbG9yID0gc3R5bGUuZHJvcFNoYWRvd0NvbG9yIHx8ICcjMDAwMDAwJztcbiAgICAgICAgICAgIHN0eWxlLmRyb3BTaGFkb3dBbmdsZSA9IHN0eWxlLmRyb3BTaGFkb3dBbmdsZSAhPT0gdW5kZWZpbmVkID8gc3R5bGUuZHJvcFNoYWRvd0FuZ2xlIDogTWF0aC5QSSAvIDY7XG4gICAgICAgICAgICBzdHlsZS5kcm9wU2hhZG93RGlzdGFuY2UgPSBzdHlsZS5kcm9wU2hhZG93RGlzdGFuY2UgIT09IHVuZGVmaW5lZCA/IHN0eWxlLmRyb3BTaGFkb3dEaXN0YW5jZSA6IDU7XG4gICAgICAgICAgICBzdHlsZS5kcm9wU2hhZG93Qmx1ciA9IHN0eWxlLmRyb3BTaGFkb3dCbHVyICE9PSB1bmRlZmluZWQgPyBzdHlsZS5kcm9wU2hhZG93Qmx1ciA6IDA7IC8vc2hhZG93Qmx1ciBpcyAnMCcgYnkgZGVmYXVsdCBhY2NvcmRpbmcgdG8gSFRNTFxuXG4gICAgICAgICAgICBzdHlsZS5wYWRkaW5nID0gc3R5bGUucGFkZGluZyB8fCAwO1xuXG4gICAgICAgICAgICBzdHlsZS50ZXh0QmFzZWxpbmUgPSBzdHlsZS50ZXh0QmFzZWxpbmUgfHwgJ2FscGhhYmV0aWMnO1xuXG4gICAgICAgICAgICBzdHlsZS5saW5lSm9pbiA9IHN0eWxlLmxpbmVKb2luIHx8ICdtaXRlcic7XG4gICAgICAgICAgICBzdHlsZS5taXRlckxpbWl0ID0gc3R5bGUubWl0ZXJMaW1pdCB8fCAxMDtcblxuICAgICAgICAgICAgdGhpcy5fc3R5bGUgPSBzdHlsZTtcbiAgICAgICAgICAgIHRoaXMuZGlydHkgPSB0cnVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFNldCB0aGUgY29weSBmb3IgdGhlIHRleHQgb2JqZWN0LiBUbyBzcGxpdCBhIGxpbmUgeW91IGNhbiB1c2UgJ1xcbicuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gdGV4dCB7c3RyaW5nfSBUaGUgY29weSB0aGF0IHlvdSB3b3VsZCBsaWtlIHRoZSB0ZXh0IHRvIGRpc3BsYXlcbiAgICAgKiBAbWVtYmVyb2YgUElYSS5UZXh0I1xuICAgICAqL1xuICAgIHRleHQ6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbigpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl90ZXh0O1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh0ZXh0KXtcbiAgICAgICAgICAgIHRleHQgPSB0ZXh0LnRvU3RyaW5nKCkgfHwgJyAnO1xuICAgICAgICAgICAgaWYgKHRoaXMuX3RleHQgPT09IHRleHQpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5fdGV4dCA9IHRleHQ7XG4gICAgICAgICAgICB0aGlzLmRpcnR5ID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuXG4vKipcbiAqIFJlbmRlcnMgdGV4dCBhbmQgdXBkYXRlcyBpdCB3aGVuIG5lZWRlZFxuICpcbiAqIEBwcml2YXRlXG4gKi9cblRleHQucHJvdG90eXBlLnVwZGF0ZVRleHQgPSBmdW5jdGlvbiAoKVxue1xuICAgIHZhciBzdHlsZSA9IHRoaXMuX3N0eWxlO1xuICAgIHRoaXMuY29udGV4dC5mb250ID0gc3R5bGUuZm9udDtcblxuICAgIC8vIHdvcmQgd3JhcFxuICAgIC8vIHByZXNlcnZlIG9yaWdpbmFsIHRleHRcbiAgICB2YXIgb3V0cHV0VGV4dCA9IHN0eWxlLndvcmRXcmFwID8gdGhpcy53b3JkV3JhcCh0aGlzLl90ZXh0KSA6IHRoaXMuX3RleHQ7XG5cbiAgICAvLyBzcGxpdCB0ZXh0IGludG8gbGluZXNcbiAgICB2YXIgbGluZXMgPSBvdXRwdXRUZXh0LnNwbGl0KC8oPzpcXHJcXG58XFxyfFxcbikvKTtcblxuICAgIC8vIGNhbGN1bGF0ZSB0ZXh0IHdpZHRoXG4gICAgdmFyIGxpbmVXaWR0aHMgPSBuZXcgQXJyYXkobGluZXMubGVuZ3RoKTtcbiAgICB2YXIgbWF4TGluZVdpZHRoID0gMDtcbiAgICB2YXIgZm9udFByb3BlcnRpZXMgPSB0aGlzLmRldGVybWluZUZvbnRQcm9wZXJ0aWVzKHN0eWxlLmZvbnQpO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGluZXMubGVuZ3RoOyBpKyspXG4gICAge1xuICAgICAgICB2YXIgbGluZVdpZHRoID0gdGhpcy5jb250ZXh0Lm1lYXN1cmVUZXh0KGxpbmVzW2ldKS53aWR0aDtcbiAgICAgICAgbGluZVdpZHRoc1tpXSA9IGxpbmVXaWR0aDtcbiAgICAgICAgbWF4TGluZVdpZHRoID0gTWF0aC5tYXgobWF4TGluZVdpZHRoLCBsaW5lV2lkdGgpO1xuICAgIH1cblxuICAgIHZhciB3aWR0aCA9IG1heExpbmVXaWR0aCArIHN0eWxlLnN0cm9rZVRoaWNrbmVzcztcbiAgICBpZiAoc3R5bGUuZHJvcFNoYWRvdylcbiAgICB7XG4gICAgICAgIHdpZHRoICs9IHN0eWxlLmRyb3BTaGFkb3dEaXN0YW5jZTtcbiAgICB9XG5cbiAgICB0aGlzLmNhbnZhcy53aWR0aCA9ICggd2lkdGggKyB0aGlzLmNvbnRleHQubGluZVdpZHRoICkgKiB0aGlzLnJlc29sdXRpb247XG5cbiAgICAvLyBjYWxjdWxhdGUgdGV4dCBoZWlnaHRcbiAgICB2YXIgbGluZUhlaWdodCA9IHRoaXMuc3R5bGUubGluZUhlaWdodCB8fCBmb250UHJvcGVydGllcy5mb250U2l6ZSArIHN0eWxlLnN0cm9rZVRoaWNrbmVzcztcblxuICAgIHZhciBoZWlnaHQgPSBsaW5lSGVpZ2h0ICogbGluZXMubGVuZ3RoO1xuICAgIGlmIChzdHlsZS5kcm9wU2hhZG93KVxuICAgIHtcbiAgICAgICAgaGVpZ2h0ICs9IHN0eWxlLmRyb3BTaGFkb3dEaXN0YW5jZTtcbiAgICB9XG5cbiAgICB0aGlzLmNhbnZhcy5oZWlnaHQgPSAoIGhlaWdodCArIHRoaXMuX3N0eWxlLnBhZGRpbmcgKiAyICkgKiB0aGlzLnJlc29sdXRpb247XG5cbiAgICB0aGlzLmNvbnRleHQuc2NhbGUoIHRoaXMucmVzb2x1dGlvbiwgdGhpcy5yZXNvbHV0aW9uKTtcblxuICAgIGlmIChuYXZpZ2F0b3IuaXNDb2Nvb25KUylcbiAgICB7XG4gICAgICAgIHRoaXMuY29udGV4dC5jbGVhclJlY3QoMCwgMCwgdGhpcy5jYW52YXMud2lkdGgsIHRoaXMuY2FudmFzLmhlaWdodCk7XG5cbiAgICB9XG5cbiAgICAvL3RoaXMuY29udGV4dC5maWxsU3R5bGU9XCIjRkYwMDAwXCI7XG4gICAgLy90aGlzLmNvbnRleHQuZmlsbFJlY3QoMCwgMCwgdGhpcy5jYW52YXMud2lkdGgsIHRoaXMuY2FudmFzLmhlaWdodCk7XG5cbiAgICB0aGlzLmNvbnRleHQuZm9udCA9IHN0eWxlLmZvbnQ7XG4gICAgdGhpcy5jb250ZXh0LnN0cm9rZVN0eWxlID0gc3R5bGUuc3Ryb2tlO1xuICAgIHRoaXMuY29udGV4dC5saW5lV2lkdGggPSBzdHlsZS5zdHJva2VUaGlja25lc3M7XG4gICAgdGhpcy5jb250ZXh0LnRleHRCYXNlbGluZSA9IHN0eWxlLnRleHRCYXNlbGluZTtcbiAgICB0aGlzLmNvbnRleHQubGluZUpvaW4gPSBzdHlsZS5saW5lSm9pbjtcbiAgICB0aGlzLmNvbnRleHQubWl0ZXJMaW1pdCA9IHN0eWxlLm1pdGVyTGltaXQ7XG5cbiAgICB2YXIgbGluZVBvc2l0aW9uWDtcbiAgICB2YXIgbGluZVBvc2l0aW9uWTtcblxuICAgIGlmIChzdHlsZS5kcm9wU2hhZG93KVxuICAgIHtcbiAgICAgICAgaWYgKHN0eWxlLmRyb3BTaGFkb3dCbHVyID4gMCkge1xuICAgICAgICAgICAgdGhpcy5jb250ZXh0LnNoYWRvd0NvbG9yID0gc3R5bGUuZHJvcFNoYWRvd0NvbG9yO1xuICAgICAgICAgICAgdGhpcy5jb250ZXh0LnNoYWRvd0JsdXIgPSBzdHlsZS5kcm9wU2hhZG93Qmx1cjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuY29udGV4dC5maWxsU3R5bGUgPSBzdHlsZS5kcm9wU2hhZG93Q29sb3I7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgeFNoYWRvd09mZnNldCA9IE1hdGguY29zKHN0eWxlLmRyb3BTaGFkb3dBbmdsZSkgKiBzdHlsZS5kcm9wU2hhZG93RGlzdGFuY2U7XG4gICAgICAgIHZhciB5U2hhZG93T2Zmc2V0ID0gTWF0aC5zaW4oc3R5bGUuZHJvcFNoYWRvd0FuZ2xlKSAqIHN0eWxlLmRyb3BTaGFkb3dEaXN0YW5jZTtcblxuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbGluZXMubGVuZ3RoOyBpKyspXG4gICAgICAgIHtcbiAgICAgICAgICAgIGxpbmVQb3NpdGlvblggPSBzdHlsZS5zdHJva2VUaGlja25lc3MgLyAyO1xuICAgICAgICAgICAgbGluZVBvc2l0aW9uWSA9IChzdHlsZS5zdHJva2VUaGlja25lc3MgLyAyICsgaSAqIGxpbmVIZWlnaHQpICsgZm9udFByb3BlcnRpZXMuYXNjZW50O1xuXG4gICAgICAgICAgICBpZiAoc3R5bGUuYWxpZ24gPT09ICdyaWdodCcpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgbGluZVBvc2l0aW9uWCArPSBtYXhMaW5lV2lkdGggLSBsaW5lV2lkdGhzW2ldO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoc3R5bGUuYWxpZ24gPT09ICdjZW50ZXInKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGxpbmVQb3NpdGlvblggKz0gKG1heExpbmVXaWR0aCAtIGxpbmVXaWR0aHNbaV0pIC8gMjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHN0eWxlLmZpbGwpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdGhpcy5jb250ZXh0LmZpbGxUZXh0KGxpbmVzW2ldLCBsaW5lUG9zaXRpb25YICsgeFNoYWRvd09mZnNldCwgbGluZVBvc2l0aW9uWSArIHlTaGFkb3dPZmZzZXQgKyB0aGlzLl9zdHlsZS5wYWRkaW5nKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vc2V0IGNhbnZhcyB0ZXh0IHN0eWxlc1xuICAgIHRoaXMuY29udGV4dC5maWxsU3R5bGUgPSBzdHlsZS5maWxsO1xuXG4gICAgLy9kcmF3IGxpbmVzIGxpbmUgYnkgbGluZVxuICAgIGZvciAoaSA9IDA7IGkgPCBsaW5lcy5sZW5ndGg7IGkrKylcbiAgICB7XG4gICAgICAgIGxpbmVQb3NpdGlvblggPSBzdHlsZS5zdHJva2VUaGlja25lc3MgLyAyO1xuICAgICAgICBsaW5lUG9zaXRpb25ZID0gKHN0eWxlLnN0cm9rZVRoaWNrbmVzcyAvIDIgKyBpICogbGluZUhlaWdodCkgKyBmb250UHJvcGVydGllcy5hc2NlbnQ7XG5cbiAgICAgICAgaWYgKHN0eWxlLmFsaWduID09PSAncmlnaHQnKVxuICAgICAgICB7XG4gICAgICAgICAgICBsaW5lUG9zaXRpb25YICs9IG1heExpbmVXaWR0aCAtIGxpbmVXaWR0aHNbaV07XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoc3R5bGUuYWxpZ24gPT09ICdjZW50ZXInKVxuICAgICAgICB7XG4gICAgICAgICAgICBsaW5lUG9zaXRpb25YICs9IChtYXhMaW5lV2lkdGggLSBsaW5lV2lkdGhzW2ldKSAvIDI7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoc3R5bGUuc3Ryb2tlICYmIHN0eWxlLnN0cm9rZVRoaWNrbmVzcylcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5jb250ZXh0LnN0cm9rZVRleHQobGluZXNbaV0sIGxpbmVQb3NpdGlvblgsIGxpbmVQb3NpdGlvblkgKyB0aGlzLl9zdHlsZS5wYWRkaW5nKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChzdHlsZS5maWxsKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmNvbnRleHQuZmlsbFRleHQobGluZXNbaV0sIGxpbmVQb3NpdGlvblgsIGxpbmVQb3NpdGlvblkgKyB0aGlzLl9zdHlsZS5wYWRkaW5nKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMudXBkYXRlVGV4dHVyZSgpO1xufTtcblxuLyoqXG4gKiBVcGRhdGVzIHRleHR1cmUgc2l6ZSBiYXNlZCBvbiBjYW52YXMgc2l6ZVxuICpcbiAqIEBwcml2YXRlXG4gKi9cblRleHQucHJvdG90eXBlLnVwZGF0ZVRleHR1cmUgPSBmdW5jdGlvbiAoKVxue1xuICAgIHZhciB0ZXh0dXJlID0gdGhpcy5fdGV4dHVyZTtcblxuICAgIHRleHR1cmUuYmFzZVRleHR1cmUuaGFzTG9hZGVkID0gdHJ1ZTtcbiAgICB0ZXh0dXJlLmJhc2VUZXh0dXJlLnJlc29sdXRpb24gPSB0aGlzLnJlc29sdXRpb247XG5cbiAgICB0ZXh0dXJlLmJhc2VUZXh0dXJlLndpZHRoID0gdGhpcy5jYW52YXMud2lkdGggLyB0aGlzLnJlc29sdXRpb247XG4gICAgdGV4dHVyZS5iYXNlVGV4dHVyZS5oZWlnaHQgPSB0aGlzLmNhbnZhcy5oZWlnaHQgLyB0aGlzLnJlc29sdXRpb247XG4gICAgdGV4dHVyZS5jcm9wLndpZHRoID0gdGV4dHVyZS5fZnJhbWUud2lkdGggPSB0aGlzLmNhbnZhcy53aWR0aCAvIHRoaXMucmVzb2x1dGlvbjtcbiAgICB0ZXh0dXJlLmNyb3AuaGVpZ2h0ID0gdGV4dHVyZS5fZnJhbWUuaGVpZ2h0ID0gdGhpcy5jYW52YXMuaGVpZ2h0IC8gdGhpcy5yZXNvbHV0aW9uO1xuXG4gICAgdGV4dHVyZS50cmltLnggPSAwO1xuICAgIHRleHR1cmUudHJpbS55ID0gLXRoaXMuX3N0eWxlLnBhZGRpbmc7XG5cbiAgICB0ZXh0dXJlLnRyaW0ud2lkdGggPSB0ZXh0dXJlLl9mcmFtZS53aWR0aDtcbiAgICB0ZXh0dXJlLnRyaW0uaGVpZ2h0ID0gdGV4dHVyZS5fZnJhbWUuaGVpZ2h0IC0gdGhpcy5fc3R5bGUucGFkZGluZyoyO1xuXG4gICAgdGhpcy5fd2lkdGggPSB0aGlzLmNhbnZhcy53aWR0aCAvIHRoaXMucmVzb2x1dGlvbjtcbiAgICB0aGlzLl9oZWlnaHQgPSB0aGlzLmNhbnZhcy5oZWlnaHQgLyB0aGlzLnJlc29sdXRpb247XG5cbiAgICB0ZXh0dXJlLmJhc2VUZXh0dXJlLmVtaXQoJ3VwZGF0ZScsICB0ZXh0dXJlLmJhc2VUZXh0dXJlKTtcblxuICAgIHRoaXMuZGlydHkgPSBmYWxzZTtcbn07XG5cbi8qKlxuICogUmVuZGVycyB0aGUgb2JqZWN0IHVzaW5nIHRoZSBXZWJHTCByZW5kZXJlclxuICpcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5XZWJHTFJlbmRlcmVyfVxuICovXG5UZXh0LnByb3RvdHlwZS5yZW5kZXJXZWJHTCA9IGZ1bmN0aW9uIChyZW5kZXJlcilcbntcbiAgICBpZiAodGhpcy5kaXJ0eSlcbiAgICB7XG4gICAgICAgIC8vdGhpcy5yZXNvbHV0aW9uID0gMS8vcmVuZGVyZXIucmVzb2x1dGlvbjtcblxuICAgICAgICB0aGlzLnVwZGF0ZVRleHQoKTtcbiAgICB9XG5cbiAgICBTcHJpdGUucHJvdG90eXBlLnJlbmRlcldlYkdMLmNhbGwodGhpcywgcmVuZGVyZXIpO1xufTtcblxuLyoqXG4gKiBSZW5kZXJzIHRoZSBvYmplY3QgdXNpbmcgdGhlIENhbnZhcyByZW5kZXJlclxuICpcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5DYW52YXNSZW5kZXJlcn1cbiAqIEBwcml2YXRlXG4gKi9cblRleHQucHJvdG90eXBlLl9yZW5kZXJDYW52YXMgPSBmdW5jdGlvbiAocmVuZGVyZXIpXG57XG4gICAgaWYgKHRoaXMuZGlydHkpXG4gICAge1xuICAgICAvLyAgIHRoaXMucmVzb2x1dGlvbiA9IDEvL3JlbmRlcmVyLnJlc29sdXRpb247XG5cbiAgICAgICAgdGhpcy51cGRhdGVUZXh0KCk7XG4gICAgfVxuXG4gICAgU3ByaXRlLnByb3RvdHlwZS5fcmVuZGVyQ2FudmFzLmNhbGwodGhpcywgcmVuZGVyZXIpO1xufTtcblxuLyoqXG4gKiBDYWxjdWxhdGVzIHRoZSBhc2NlbnQsIGRlc2NlbnQgYW5kIGZvbnRTaXplIG9mIGEgZ2l2ZW4gZm9udFN0eWxlXG4gKlxuICogQHBhcmFtIGZvbnRTdHlsZSB7b2JqZWN0fVxuICogQHByaXZhdGVcbiAqL1xuVGV4dC5wcm90b3R5cGUuZGV0ZXJtaW5lRm9udFByb3BlcnRpZXMgPSBmdW5jdGlvbiAoZm9udFN0eWxlKVxue1xuICAgIHZhciBwcm9wZXJ0aWVzID0gVGV4dC5mb250UHJvcGVydGllc0NhY2hlW2ZvbnRTdHlsZV07XG5cbiAgICBpZiAoIXByb3BlcnRpZXMpXG4gICAge1xuICAgICAgICBwcm9wZXJ0aWVzID0ge307XG5cbiAgICAgICAgdmFyIGNhbnZhcyA9IFRleHQuZm9udFByb3BlcnRpZXNDYW52YXM7XG4gICAgICAgIHZhciBjb250ZXh0ID0gVGV4dC5mb250UHJvcGVydGllc0NvbnRleHQ7XG5cbiAgICAgICAgY29udGV4dC5mb250ID0gZm9udFN0eWxlO1xuXG4gICAgICAgIHZhciB3aWR0aCA9IE1hdGguY2VpbChjb250ZXh0Lm1lYXN1cmVUZXh0KCd8TcOJcScpLndpZHRoKTtcbiAgICAgICAgdmFyIGJhc2VsaW5lID0gTWF0aC5jZWlsKGNvbnRleHQubWVhc3VyZVRleHQoJ00nKS53aWR0aCk7XG4gICAgICAgIHZhciBoZWlnaHQgPSAyICogYmFzZWxpbmU7XG5cbiAgICAgICAgYmFzZWxpbmUgPSBiYXNlbGluZSAqIDEuNCB8IDA7XG5cbiAgICAgICAgY2FudmFzLndpZHRoID0gd2lkdGg7XG4gICAgICAgIGNhbnZhcy5oZWlnaHQgPSBoZWlnaHQ7XG5cbiAgICAgICAgY29udGV4dC5maWxsU3R5bGUgPSAnI2YwMCc7XG4gICAgICAgIGNvbnRleHQuZmlsbFJlY3QoMCwgMCwgd2lkdGgsIGhlaWdodCk7XG5cbiAgICAgICAgY29udGV4dC5mb250ID0gZm9udFN0eWxlO1xuXG4gICAgICAgIGNvbnRleHQudGV4dEJhc2VsaW5lID0gJ2FscGhhYmV0aWMnO1xuICAgICAgICBjb250ZXh0LmZpbGxTdHlsZSA9ICcjMDAwJztcbiAgICAgICAgY29udGV4dC5maWxsVGV4dCgnfE3DiXEnLCAwLCBiYXNlbGluZSk7XG5cbiAgICAgICAgdmFyIGltYWdlZGF0YSA9IGNvbnRleHQuZ2V0SW1hZ2VEYXRhKDAsIDAsIHdpZHRoLCBoZWlnaHQpLmRhdGE7XG4gICAgICAgIHZhciBwaXhlbHMgPSBpbWFnZWRhdGEubGVuZ3RoO1xuICAgICAgICB2YXIgbGluZSA9IHdpZHRoICogNDtcblxuICAgICAgICB2YXIgaSwgajtcblxuICAgICAgICB2YXIgaWR4ID0gMDtcbiAgICAgICAgdmFyIHN0b3AgPSBmYWxzZTtcblxuICAgICAgICAvLyBhc2NlbnQuIHNjYW4gZnJvbSB0b3AgdG8gYm90dG9tIHVudGlsIHdlIGZpbmQgYSBub24gcmVkIHBpeGVsXG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCBiYXNlbGluZTsgaSsrKVxuICAgICAgICB7XG4gICAgICAgICAgICBmb3IgKGogPSAwOyBqIDwgbGluZTsgaiArPSA0KVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGlmIChpbWFnZWRhdGFbaWR4ICsgal0gIT09IDI1NSlcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIHN0b3AgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIXN0b3ApXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgaWR4ICs9IGxpbmU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBwcm9wZXJ0aWVzLmFzY2VudCA9IGJhc2VsaW5lIC0gaTtcblxuICAgICAgICBpZHggPSBwaXhlbHMgLSBsaW5lO1xuICAgICAgICBzdG9wID0gZmFsc2U7XG5cbiAgICAgICAgLy8gZGVzY2VudC4gc2NhbiBmcm9tIGJvdHRvbSB0byB0b3AgdW50aWwgd2UgZmluZCBhIG5vbiByZWQgcGl4ZWxcbiAgICAgICAgZm9yIChpID0gaGVpZ2h0OyBpID4gYmFzZWxpbmU7IGktLSlcbiAgICAgICAge1xuICAgICAgICAgICAgZm9yIChqID0gMDsgaiA8IGxpbmU7IGogKz0gNClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBpZiAoaW1hZ2VkYXRhW2lkeCArIGpdICE9PSAyNTUpXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBzdG9wID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCFzdG9wKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGlkeCAtPSBsaW5lO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcHJvcGVydGllcy5kZXNjZW50ID0gaSAtIGJhc2VsaW5lO1xuICAgICAgICBwcm9wZXJ0aWVzLmZvbnRTaXplID0gcHJvcGVydGllcy5hc2NlbnQgKyBwcm9wZXJ0aWVzLmRlc2NlbnQ7XG5cbiAgICAgICAgVGV4dC5mb250UHJvcGVydGllc0NhY2hlW2ZvbnRTdHlsZV0gPSBwcm9wZXJ0aWVzO1xuICAgIH1cblxuICAgIHJldHVybiBwcm9wZXJ0aWVzO1xufTtcblxuLyoqXG4gKiBBcHBsaWVzIG5ld2xpbmVzIHRvIGEgc3RyaW5nIHRvIGhhdmUgaXQgb3B0aW1hbGx5IGZpdCBpbnRvIHRoZSBob3Jpem9udGFsXG4gKiBib3VuZHMgc2V0IGJ5IHRoZSBUZXh0IG9iamVjdCdzIHdvcmRXcmFwV2lkdGggcHJvcGVydHkuXG4gKlxuICogQHBhcmFtIHRleHQge3N0cmluZ31cbiAqIEBwcml2YXRlXG4gKi9cblRleHQucHJvdG90eXBlLndvcmRXcmFwID0gZnVuY3Rpb24gKHRleHQpXG57XG4gICAgLy8gR3JlZWR5IHdyYXBwaW5nIGFsZ29yaXRobSB0aGF0IHdpbGwgd3JhcCB3b3JkcyBhcyB0aGUgbGluZSBncm93cyBsb25nZXJcbiAgICAvLyB0aGFuIGl0cyBob3Jpem9udGFsIGJvdW5kcy5cbiAgICB2YXIgcmVzdWx0ID0gJyc7XG4gICAgdmFyIGxpbmVzID0gdGV4dC5zcGxpdCgnXFxuJyk7XG4gICAgdmFyIHdvcmRXcmFwV2lkdGggPSB0aGlzLl9zdHlsZS53b3JkV3JhcFdpZHRoO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGluZXMubGVuZ3RoOyBpKyspXG4gICAge1xuICAgICAgICB2YXIgc3BhY2VMZWZ0ID0gd29yZFdyYXBXaWR0aDtcbiAgICAgICAgdmFyIHdvcmRzID0gbGluZXNbaV0uc3BsaXQoJyAnKTtcbiAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCB3b3Jkcy5sZW5ndGg7IGorKylcbiAgICAgICAge1xuICAgICAgICAgICAgdmFyIHdvcmRXaWR0aCA9IHRoaXMuY29udGV4dC5tZWFzdXJlVGV4dCh3b3Jkc1tqXSkud2lkdGg7XG4gICAgICAgICAgICB2YXIgd29yZFdpZHRoV2l0aFNwYWNlID0gd29yZFdpZHRoICsgdGhpcy5jb250ZXh0Lm1lYXN1cmVUZXh0KCcgJykud2lkdGg7XG4gICAgICAgICAgICBpZiAoaiA9PT0gMCB8fCB3b3JkV2lkdGhXaXRoU3BhY2UgPiBzcGFjZUxlZnQpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgLy8gU2tpcCBwcmludGluZyB0aGUgbmV3bGluZSBpZiBpdCdzIHRoZSBmaXJzdCB3b3JkIG9mIHRoZSBsaW5lIHRoYXQgaXNcbiAgICAgICAgICAgICAgICAvLyBncmVhdGVyIHRoYW4gdGhlIHdvcmQgd3JhcCB3aWR0aC5cbiAgICAgICAgICAgICAgICBpZiAoaiA+IDApXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQgKz0gJ1xcbic7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJlc3VsdCArPSB3b3Jkc1tqXTtcbiAgICAgICAgICAgICAgICBzcGFjZUxlZnQgPSB3b3JkV3JhcFdpZHRoIC0gd29yZFdpZHRoO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHNwYWNlTGVmdCAtPSB3b3JkV2lkdGhXaXRoU3BhY2U7XG4gICAgICAgICAgICAgICAgcmVzdWx0ICs9ICcgJyArIHdvcmRzW2pdO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGkgPCBsaW5lcy5sZW5ndGgtMSlcbiAgICAgICAge1xuICAgICAgICAgICAgcmVzdWx0ICs9ICdcXG4nO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG59O1xuXG4vKipcbiAqIFJldHVybnMgdGhlIGJvdW5kcyBvZiB0aGUgVGV4dCBhcyBhIHJlY3RhbmdsZS4gVGhlIGJvdW5kcyBjYWxjdWxhdGlvbiB0YWtlcyB0aGUgd29ybGRUcmFuc2Zvcm0gaW50byBhY2NvdW50LlxuICpcbiAqIEBwYXJhbSBtYXRyaXgge1BJWEkuTWF0cml4fSB0aGUgdHJhbnNmb3JtYXRpb24gbWF0cml4IG9mIHRoZSBUZXh0XG4gKiBAcmV0dXJuIHtQSVhJLlJlY3RhbmdsZX0gdGhlIGZyYW1pbmcgcmVjdGFuZ2xlXG4gKi9cblRleHQucHJvdG90eXBlLmdldEJvdW5kcyA9IGZ1bmN0aW9uIChtYXRyaXgpXG57XG4gICAgaWYgKHRoaXMuZGlydHkpXG4gICAge1xuICAgICAgICB0aGlzLnVwZGF0ZVRleHQoKTtcbiAgICB9XG5cbiAgICByZXR1cm4gU3ByaXRlLnByb3RvdHlwZS5nZXRCb3VuZHMuY2FsbCh0aGlzLCBtYXRyaXgpO1xufTtcblxuLyoqXG4gKiBEZXN0cm95cyB0aGlzIHRleHQgb2JqZWN0LlxuICpcbiAqIEBwYXJhbSBbZGVzdHJveUJhc2VUZXh0dXJlPXRydWVdIHtib29sZWFufSB3aGV0aGVyIHRvIGRlc3Ryb3kgdGhlIGJhc2UgdGV4dHVyZSBhcyB3ZWxsXG4gKi9cblRleHQucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoZGVzdHJveUJhc2VUZXh0dXJlKVxue1xuICAgIC8vIG1ha2Ugc3VyZSB0byByZXNldCB0aGUgdGhlIGNvbnRleHQgYW5kIGNhbnZhcy4uIGRvbnQgd2FudCB0aGlzIGhhbmdpbmcgYXJvdW5kIGluIG1lbW9yeSFcbiAgICB0aGlzLmNvbnRleHQgPSBudWxsO1xuICAgIHRoaXMuY2FudmFzID0gbnVsbDtcblxuICAgIHRoaXMuX3N0eWxlID0gbnVsbDtcblxuICAgIHRoaXMuX3RleHR1cmUuZGVzdHJveShkZXN0cm95QmFzZVRleHR1cmUgPT09IHVuZGVmaW5lZCA/IHRydWUgOiBkZXN0cm95QmFzZVRleHR1cmUpO1xufTtcbiIsInZhciB1dGlscyA9IHJlcXVpcmUoJy4uL3V0aWxzJyksXG4gICAgQ09OU1QgPSByZXF1aXJlKCcuLi9jb25zdCcpLFxuICAgIEV2ZW50RW1pdHRlciA9IHJlcXVpcmUoJ2V2ZW50ZW1pdHRlcjMnKTtcblxuLyoqXG4gKiBBIHRleHR1cmUgc3RvcmVzIHRoZSBpbmZvcm1hdGlvbiB0aGF0IHJlcHJlc2VudHMgYW4gaW1hZ2UuIEFsbCB0ZXh0dXJlcyBoYXZlIGEgYmFzZSB0ZXh0dXJlLlxuICpcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqIEBwYXJhbSBzb3VyY2Uge0ltYWdlfENhbnZhc30gdGhlIHNvdXJjZSBvYmplY3Qgb2YgdGhlIHRleHR1cmUuXG4gKiBAcGFyYW0gW3NjYWxlTW9kZT1QSVhJLlNDQUxFX01PREVTLkRFRkFVTFRdIHtudW1iZXJ9IFNlZSB7QGxpbmsgUElYSS5TQ0FMRV9NT0RFU30gZm9yIHBvc3NpYmxlIHZhbHVlc1xuICogQHBhcmFtIHJlc29sdXRpb24ge251bWJlcn0gdGhlIHJlc29sdXRpb24gb2YgdGhlIHRleHR1cmUgZm9yIGRldmljZXMgd2l0aCBkaWZmZXJlbnQgcGl4ZWwgcmF0aW9zXG4gKi9cbmZ1bmN0aW9uIEJhc2VUZXh0dXJlKHNvdXJjZSwgc2NhbGVNb2RlLCByZXNvbHV0aW9uKVxue1xuICAgIEV2ZW50RW1pdHRlci5jYWxsKHRoaXMpO1xuXG4gICAgdGhpcy51aWQgPSB1dGlscy51aWQoKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBSZXNvbHV0aW9uIG9mIHRoZSB0ZXh0dXJlLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMucmVzb2x1dGlvbiA9IHJlc29sdXRpb24gfHwgMTtcblxuICAgIC8qKlxuICAgICAqIFRoZSB3aWR0aCBvZiB0aGUgYmFzZSB0ZXh0dXJlIHNldCB3aGVuIHRoZSBpbWFnZSBoYXMgbG9hZGVkXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQHJlYWRPbmx5XG4gICAgICovXG4gICAgdGhpcy53aWR0aCA9IDEwMDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBoZWlnaHQgb2YgdGhlIGJhc2UgdGV4dHVyZSBzZXQgd2hlbiB0aGUgaW1hZ2UgaGFzIGxvYWRlZFxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEByZWFkT25seVxuICAgICAqL1xuICAgIHRoaXMuaGVpZ2h0ID0gMTAwO1xuXG4gICAgLy8gVE9ETyBkb2NzXG4gICAgLy8gdXNlZCB0byBzdG9yZSB0aGUgYWN0dWFsIGRpbWVuc2lvbnMgb2YgdGhlIHNvdXJjZVxuICAgIC8qKlxuICAgICAqIFVzZWQgdG8gc3RvcmUgdGhlIGFjdHVhbCB3aWR0aCBvZiB0aGUgc291cmNlIG9mIHRoaXMgdGV4dHVyZVxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEByZWFkT25seVxuICAgICAqL1xuICAgIHRoaXMucmVhbFdpZHRoID0gMTAwO1xuICAgIC8qKlxuICAgICAqIFVzZWQgdG8gc3RvcmUgdGhlIGFjdHVhbCBoZWlnaHQgb2YgdGhlIHNvdXJjZSBvZiB0aGlzIHRleHR1cmVcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAcmVhZE9ubHlcbiAgICAgKi9cbiAgICB0aGlzLnJlYWxIZWlnaHQgPSAxMDA7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgc2NhbGUgbW9kZSB0byBhcHBseSB3aGVuIHNjYWxpbmcgdGhpcyB0ZXh0dXJlXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgUElYSS5TQ0FMRV9NT0RFUy5MSU5FQVJcbiAgICAgKiBAc2VlIFBJWEkuU0NBTEVfTU9ERVNcbiAgICAgKi9cbiAgICB0aGlzLnNjYWxlTW9kZSA9IHNjYWxlTW9kZSB8fCBDT05TVC5TQ0FMRV9NT0RFUy5ERUZBVUxUO1xuXG4gICAgLyoqXG4gICAgICogU2V0IHRvIHRydWUgb25jZSB0aGUgYmFzZSB0ZXh0dXJlIGhhcyBzdWNjZXNzZnVsbHkgbG9hZGVkLlxuICAgICAqXG4gICAgICogVGhpcyBpcyBuZXZlciB0cnVlIGlmIHRoZSB1bmRlcmx5aW5nIHNvdXJjZSBmYWlscyB0byBsb2FkIG9yIGhhcyBubyB0ZXh0dXJlIGRhdGEuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqIEByZWFkT25seVxuICAgICAqL1xuICAgIHRoaXMuaGFzTG9hZGVkID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBTZXQgdG8gdHJ1ZSBpZiB0aGUgc291cmNlIGlzIGN1cnJlbnRseSBsb2FkaW5nLlxuICAgICAqXG4gICAgICogSWYgYW4gSW1hZ2Ugc291cmNlIGlzIGxvYWRpbmcgdGhlICdsb2FkZWQnIG9yICdlcnJvcicgZXZlbnQgd2lsbCBiZVxuICAgICAqIGRpc3BhdGNoZWQgd2hlbiB0aGUgb3BlcmF0aW9uIGVuZHMuIEFuIHVuZGVyeWxpbmcgc291cmNlIHRoYXQgaXNcbiAgICAgKiBpbW1lZGlhdGVseS1hdmFpbGFibGUgYnlwYXNzZXMgbG9hZGluZyBlbnRpcmVseS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICogQHJlYWRvbmx5XG4gICAgICovXG4gICAgdGhpcy5pc0xvYWRpbmcgPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBpbWFnZSBzb3VyY2UgdGhhdCBpcyB1c2VkIHRvIGNyZWF0ZSB0aGUgdGV4dHVyZS5cbiAgICAgKlxuICAgICAqIFRPRE86IE1ha2UgdGhpcyBhIHNldHRlciB0aGF0IGNhbGxzIGxvYWRTb3VyY2UoKTtcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge0ltYWdlfENhbnZhc31cbiAgICAgKiBAcmVhZG9ubHlcbiAgICAgKi9cbiAgICB0aGlzLnNvdXJjZSA9IG51bGw7IC8vIHNldCBpbiBsb2FkU291cmNlLCBpZiBhdCBhbGxcblxuICAgIC8qKlxuICAgICAqIENvbnRyb2xzIGlmIFJHQiBjaGFubmVscyBzaG91bGQgYmUgcHJlLW11bHRpcGxpZWQgYnkgQWxwaGEgIChXZWJHTCBvbmx5KVxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKiBAZGVmYXVsdCB0cnVlXG4gICAgICovXG4gICAgdGhpcy5wcmVtdWx0aXBsaWVkQWxwaGEgPSB0cnVlO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7c3RyaW5nfVxuICAgICAqL1xuICAgIHRoaXMuaW1hZ2VVcmwgPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogV2V0aGVyIG9yIG5vdCB0aGUgdGV4dHVyZSBpcyBhIHBvd2VyIG9mIHR3bywgdHJ5IHRvIHVzZSBwb3dlciBvZiB0d28gdGV4dHVyZXMgYXMgbXVjaCBhcyB5b3UgY2FuXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuaXNQb3dlck9mVHdvID0gZmFsc2U7XG5cbiAgICAvLyB1c2VkIGZvciB3ZWJHTFxuXG4gICAgLyoqXG4gICAgICpcbiAgICAgKiBTZXQgdGhpcyB0byB0cnVlIGlmIGEgbWlwbWFwIG9mIHRoaXMgdGV4dHVyZSBuZWVkcyB0byBiZSBnZW5lcmF0ZWQuIFRoaXMgdmFsdWUgbmVlZHMgdG8gYmUgc2V0IGJlZm9yZSB0aGUgdGV4dHVyZSBpcyB1c2VkXG4gICAgICogQWxzbyB0aGUgdGV4dHVyZSBtdXN0IGJlIGEgcG93ZXIgb2YgdHdvIHNpemUgdG8gd29ya1xuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKi9cbiAgICB0aGlzLm1pcG1hcCA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogQSBtYXAgb2YgcmVuZGVyZXIgSURzIHRvIHdlYmdsIHRleHR1cmVzXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtvYmplY3Q8bnVtYmVyLCBXZWJHTFRleHR1cmU+fVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fZ2xUZXh0dXJlcyA9IHt9O1xuICAgIHRoaXMuX2FjdGl2ZSA9IGZhbHNlO1xuICAgIHRoaXMuX2lkID0gMDtcbiAgICBcbiAgICAvLyBpZiBubyBzb3VyY2UgcGFzc2VkIGRvbid0IHRyeSB0byBsb2FkXG4gICAgaWYgKHNvdXJjZSlcbiAgICB7XG4gICAgICAgIHRoaXMubG9hZFNvdXJjZShzb3VyY2UpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEZpcmVkIHdoZW4gYSBub3QtaW1tZWRpYXRlbHktYXZhaWxhYmxlIHNvdXJjZSBmaW5pc2hlcyBsb2FkaW5nLlxuICAgICAqXG4gICAgICogQGV2ZW50IGxvYWRlZFxuICAgICAqIEBtZW1iZXJvZiBQSVhJLkJhc2VUZXh0dXJlI1xuICAgICAqIEBwcm90ZWN0ZWRcbiAgICAgKi9cblxuICAgIC8qKlxuICAgICAqIEZpcmVkIHdoZW4gYSBub3QtaW1tZWRpYXRlbHktYXZhaWxhYmxlIHNvdXJjZSBmYWlscyB0byBsb2FkLlxuICAgICAqXG4gICAgICogQGV2ZW50IGVycm9yXG4gICAgICogQG1lbWJlcm9mIFBJWEkuQmFzZVRleHR1cmUjXG4gICAgICogQHByb3RlY3RlZFxuICAgICAqL1xufVxuXG5CYXNlVGV4dHVyZS5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKEV2ZW50RW1pdHRlci5wcm90b3R5cGUpO1xuQmFzZVRleHR1cmUucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gQmFzZVRleHR1cmU7XG5tb2R1bGUuZXhwb3J0cyA9IEJhc2VUZXh0dXJlO1xuXG4vKipcbiAqIFVwZGF0ZXMgdGhlIHRleHR1cmUgb24gYWxsIHRoZSB3ZWJnbCByZW5kZXJlcnMsIHRoaXMgYWxzbyBhc3N1bWVzIHRoZSBzcmMgaGFzIGNoYW5nZWQuXG4gKlxuICogQGZpcmVzIHVwZGF0ZVxuICovXG5CYXNlVGV4dHVyZS5wcm90b3R5cGUudXBkYXRlID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLnJlYWxXaWR0aCA9IHRoaXMuc291cmNlLm5hdHVyYWxXaWR0aCB8fCB0aGlzLnNvdXJjZS53aWR0aDtcbiAgICB0aGlzLnJlYWxIZWlnaHQgPSB0aGlzLnNvdXJjZS5uYXR1cmFsSGVpZ2h0IHx8IHRoaXMuc291cmNlLmhlaWdodDtcblxuICAgIHRoaXMud2lkdGggPSB0aGlzLnJlYWxXaWR0aCAvIHRoaXMucmVzb2x1dGlvbjtcbiAgICB0aGlzLmhlaWdodCA9IHRoaXMucmVhbEhlaWdodCAvIHRoaXMucmVzb2x1dGlvbjtcblxuICAgIHRoaXMuaXNQb3dlck9mVHdvID0gdXRpbHMuaXNQb3dlck9mVHdvKHRoaXMucmVhbFdpZHRoLCB0aGlzLnJlYWxIZWlnaHQpO1xuXG4gICAgdGhpcy5lbWl0KCd1cGRhdGUnLCB0aGlzKTtcbn07XG5cbi8qKlxuICogTG9hZCBhIHNvdXJjZS5cbiAqXG4gKiBJZiB0aGUgc291cmNlIGlzIG5vdC1pbW1lZGlhdGVseS1hdmFpbGFibGUsIHN1Y2ggYXMgYW4gaW1hZ2UgdGhhdCBuZWVkcyB0byBiZVxuICogZG93bmxvYWRlZCwgdGhlbiB0aGUgJ2xvYWRlZCcgb3IgJ2Vycm9yJyBldmVudCB3aWxsIGJlIGRpc3BhdGNoZWQgaW4gdGhlIGZ1dHVyZVxuICogYW5kIGBoYXNMb2FkZWRgIHdpbGwgcmVtYWluIGZhbHNlIGFmdGVyIHRoaXMgY2FsbC5cbiAqXG4gKiBUaGUgbG9naWMgc3RhdGUgYWZ0ZXIgY2FsbGluZyBgbG9hZFNvdXJjZWAgZGlyZWN0bHkgb3IgaW5kaXJlY3RseSAoZWcuIGBmcm9tSW1hZ2VgLCBgbmV3IEJhc2VUZXh0dXJlYCkgaXM6XG4gKlxuICogICAgIGlmICh0ZXh0dXJlLmhhc0xvYWRlZClcbiB7XG4gKiAgICAgICAgLy8gdGV4dHVyZSByZWFkeSBmb3IgdXNlXG4gKiAgICAgfSBlbHNlIGlmICh0ZXh0dXJlLmlzTG9hZGluZylcbiB7XG4gKiAgICAgICAgLy8gbGlzdGVuIHRvICdsb2FkZWQnIGFuZC9vciAnZXJyb3InIGV2ZW50cyBvbiB0ZXh0dXJlXG4gKiAgICAgfSBlbHNlIHtcbiAqICAgICAgICAvLyBub3QgbG9hZGluZywgbm90IGdvaW5nIHRvIGxvYWQgVU5MRVNTIHRoZSBzb3VyY2UgaXMgcmVsb2FkZWRcbiAqICAgICAgICAvLyAoaXQgbWF5IHN0aWxsIG1ha2Ugc2Vuc2UgdG8gbGlzdGVuIHRvIHRoZSBldmVudHMpXG4gKiAgICAgfVxuICpcbiAqIEBwcm90ZWN0ZWRcbiAqIEBwYXJhbSBzb3VyY2Uge0ltYWdlfENhbnZhc30gdGhlIHNvdXJjZSBvYmplY3Qgb2YgdGhlIHRleHR1cmUuXG4gKi9cbkJhc2VUZXh0dXJlLnByb3RvdHlwZS5sb2FkU291cmNlID0gZnVuY3Rpb24gKHNvdXJjZSlcbntcbiAgICB2YXIgd2FzTG9hZGluZyA9IHRoaXMuaXNMb2FkaW5nO1xuICAgIHRoaXMuaGFzTG9hZGVkID0gZmFsc2U7XG4gICAgdGhpcy5pc0xvYWRpbmcgPSBmYWxzZTtcblxuICAgIGlmICh3YXNMb2FkaW5nICYmIHRoaXMuc291cmNlKVxuICAgIHtcbiAgICAgICAgdGhpcy5zb3VyY2Uub25sb2FkID0gbnVsbDtcbiAgICAgICAgdGhpcy5zb3VyY2Uub25lcnJvciA9IG51bGw7XG4gICAgfVxuXG4gICAgdGhpcy5zb3VyY2UgPSBzb3VyY2U7XG5cbiAgICAvLyBBcHBseSBzb3VyY2UgaWYgbG9hZGVkLiBPdGhlcndpc2Ugc2V0dXAgYXBwcm9wcmlhdGUgbG9hZGluZyBtb25pdG9ycy5cbiAgICBpZiAoKHRoaXMuc291cmNlLmNvbXBsZXRlIHx8IHRoaXMuc291cmNlLmdldENvbnRleHQpICYmIHRoaXMuc291cmNlLndpZHRoICYmIHRoaXMuc291cmNlLmhlaWdodClcbiAgICB7XG4gICAgICAgIHRoaXMuX3NvdXJjZUxvYWRlZCgpO1xuICAgIH1cbiAgICBlbHNlIGlmICghc291cmNlLmdldENvbnRleHQpXG4gICAge1xuXG4gICAgICAgIC8vIEltYWdlIGZhaWwgLyBub3QgcmVhZHlcbiAgICAgICAgdGhpcy5pc0xvYWRpbmcgPSB0cnVlO1xuXG4gICAgICAgIHZhciBzY29wZSA9IHRoaXM7XG5cbiAgICAgICAgc291cmNlLm9ubG9hZCA9IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHNvdXJjZS5vbmxvYWQgPSBudWxsO1xuICAgICAgICAgICAgc291cmNlLm9uZXJyb3IgPSBudWxsO1xuXG4gICAgICAgICAgICBpZiAoIXNjb3BlLmlzTG9hZGluZylcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHNjb3BlLmlzTG9hZGluZyA9IGZhbHNlO1xuICAgICAgICAgICAgc2NvcGUuX3NvdXJjZUxvYWRlZCgpO1xuXG4gICAgICAgICAgICBzY29wZS5lbWl0KCdsb2FkZWQnLCBzY29wZSk7XG4gICAgICAgIH07XG5cbiAgICAgICAgc291cmNlLm9uZXJyb3IgPSBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICBzb3VyY2Uub25sb2FkID0gbnVsbDtcbiAgICAgICAgICAgIHNvdXJjZS5vbmVycm9yID0gbnVsbDtcblxuICAgICAgICAgICAgaWYgKCFzY29wZS5pc0xvYWRpbmcpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBzY29wZS5pc0xvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgICAgIHNjb3BlLmVtaXQoJ2Vycm9yJywgc2NvcGUpO1xuICAgICAgICB9O1xuXG4gICAgICAgIC8vIFBlciBodHRwOi8vd3d3LnczLm9yZy9UUi9odG1sNS9lbWJlZGRlZC1jb250ZW50LTAuaHRtbCN0aGUtaW1nLWVsZW1lbnRcbiAgICAgICAgLy8gICBcIlRoZSB2YWx1ZSBvZiBgY29tcGxldGVgIGNhbiB0aHVzIGNoYW5nZSB3aGlsZSBhIHNjcmlwdCBpcyBleGVjdXRpbmcuXCJcbiAgICAgICAgLy8gU28gY29tcGxldGUgbmVlZHMgdG8gYmUgcmUtY2hlY2tlZCBhZnRlciB0aGUgY2FsbGJhY2tzIGhhdmUgYmVlbiBhZGRlZC4uXG4gICAgICAgIC8vIE5PVEU6IGNvbXBsZXRlIHdpbGwgYmUgdHJ1ZSBpZiB0aGUgaW1hZ2UgaGFzIG5vIHNyYyBzbyBiZXN0IHRvIGNoZWNrIGlmIHRoZSBzcmMgaXMgc2V0LlxuICAgICAgICBpZiAoc291cmNlLmNvbXBsZXRlICYmIHNvdXJjZS5zcmMpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuaXNMb2FkaW5nID0gZmFsc2U7XG5cbiAgICAgICAgICAgIC8vIC4uYW5kIGlmIHdlJ3JlIGNvbXBsZXRlIG5vdywgbm8gbmVlZCBmb3IgY2FsbGJhY2tzXG4gICAgICAgICAgICBzb3VyY2Uub25sb2FkID0gbnVsbDtcbiAgICAgICAgICAgIHNvdXJjZS5vbmVycm9yID0gbnVsbDtcblxuICAgICAgICAgICAgaWYgKHNvdXJjZS53aWR0aCAmJiBzb3VyY2UuaGVpZ2h0KVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHRoaXMuX3NvdXJjZUxvYWRlZCgpO1xuXG4gICAgICAgICAgICAgICAgLy8gSWYgYW55IHByZXZpb3VzIHN1YnNjcmliZXJzIHBvc3NpYmxlXG4gICAgICAgICAgICAgICAgaWYgKHdhc0xvYWRpbmcpXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmVtaXQoJ2xvYWRlZCcsIHRoaXMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAvLyBJZiBhbnkgcHJldmlvdXMgc3Vic2NyaWJlcnMgcG9zc2libGVcbiAgICAgICAgICAgICAgICBpZiAod2FzTG9hZGluZylcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZW1pdCgnZXJyb3InLCB0aGlzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG59O1xuXG4vKipcbiAqIFVzZWQgaW50ZXJuYWxseSB0byB1cGRhdGUgdGhlIHdpZHRoLCBoZWlnaHQsIGFuZCBzb21lIG90aGVyIHRyYWNraW5nIHZhcnMgb25jZVxuICogYSBzb3VyY2UgaGFzIHN1Y2Nlc3NmdWxseSBsb2FkZWQuXG4gKlxuICogQHByaXZhdGVcbiAqL1xuQmFzZVRleHR1cmUucHJvdG90eXBlLl9zb3VyY2VMb2FkZWQgPSBmdW5jdGlvbiAoKVxue1xuICAgIHRoaXMuaGFzTG9hZGVkID0gdHJ1ZTtcbiAgICB0aGlzLnVwZGF0ZSgpO1xufTtcblxuLyoqXG4gKiBEZXN0cm95cyB0aGlzIGJhc2UgdGV4dHVyZVxuICpcbiAqL1xuQmFzZVRleHR1cmUucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoKVxue1xuICAgIGlmICh0aGlzLmltYWdlVXJsKVxuICAgIHtcbiAgICAgICAgZGVsZXRlIHV0aWxzLkJhc2VUZXh0dXJlQ2FjaGVbdGhpcy5pbWFnZVVybF07XG4gICAgICAgIGRlbGV0ZSB1dGlscy5UZXh0dXJlQ2FjaGVbdGhpcy5pbWFnZVVybF07XG5cbiAgICAgICAgdGhpcy5pbWFnZVVybCA9IG51bGw7XG5cbiAgICAgICAgaWYgKCFuYXZpZ2F0b3IuaXNDb2Nvb25KUylcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5zb3VyY2Uuc3JjID0gJyc7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZWxzZSBpZiAodGhpcy5zb3VyY2UgJiYgdGhpcy5zb3VyY2UuX3BpeGlJZClcbiAgICB7XG4gICAgICAgIGRlbGV0ZSB1dGlscy5CYXNlVGV4dHVyZUNhY2hlW3RoaXMuc291cmNlLl9waXhpSWRdO1xuICAgIH1cblxuICAgIHRoaXMuc291cmNlID0gbnVsbDtcblxuICAgIHRoaXMuZGlzcG9zZSgpO1xufTtcblxuLyoqXG4gKiBGcmVlcyB0aGUgdGV4dHVyZSBmcm9tIFdlYkdMIG1lbW9yeSB3aXRob3V0IGRlc3Ryb3lpbmcgdGhpcyB0ZXh0dXJlIG9iamVjdC5cbiAqIFRoaXMgbWVhbnMgeW91IGNhbiBzdGlsbCB1c2UgdGhlIHRleHR1cmUgbGF0ZXIgd2hpY2ggd2lsbCB1cGxvYWQgaXQgdG8gR1BVXG4gKiBtZW1vcnkgYWdhaW4uXG4gKlxuICovXG5CYXNlVGV4dHVyZS5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy5lbWl0KCdkaXNwb3NlJywgdGhpcyk7XG5cbiAgICAvLyB0aGlzIHNob3VsZCBubyBsb25nZXIgYmUgbmVlZGVkLCB0aGUgcmVuZGVyZXJzIHNob3VsZCBjbGVhbnVwIGFsbCB0aGUgZ2wgdGV4dHVyZXMuXG4gICAgLy8gdGhpcy5fZ2xUZXh0dXJlcyA9IHt9O1xufTtcblxuLyoqXG4gKiBDaGFuZ2VzIHRoZSBzb3VyY2UgaW1hZ2Ugb2YgdGhlIHRleHR1cmUuXG4gKiBUaGUgb3JpZ2luYWwgc291cmNlIG11c3QgYmUgYW4gSW1hZ2UgZWxlbWVudC5cbiAqXG4gKiBAcGFyYW0gbmV3U3JjIHtzdHJpbmd9IHRoZSBwYXRoIG9mIHRoZSBpbWFnZVxuICovXG5CYXNlVGV4dHVyZS5wcm90b3R5cGUudXBkYXRlU291cmNlSW1hZ2UgPSBmdW5jdGlvbiAobmV3U3JjKVxue1xuICAgIHRoaXMuc291cmNlLnNyYyA9IG5ld1NyYztcblxuICAgIHRoaXMubG9hZFNvdXJjZSh0aGlzLnNvdXJjZSk7XG59O1xuXG4vKipcbiAqIEhlbHBlciBmdW5jdGlvbiB0aGF0IGNyZWF0ZXMgYSBiYXNlIHRleHR1cmUgZnJvbSB0aGUgZ2l2ZW4gaW1hZ2UgdXJsLlxuICogSWYgdGhlIGltYWdlIGlzIG5vdCBpbiB0aGUgYmFzZSB0ZXh0dXJlIGNhY2hlIGl0IHdpbGwgYmUgY3JlYXRlZCBhbmQgbG9hZGVkLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBwYXJhbSBpbWFnZVVybCB7c3RyaW5nfSBUaGUgaW1hZ2UgdXJsIG9mIHRoZSB0ZXh0dXJlXG4gKiBAcGFyYW0gW2Nyb3Nzb3JpZ2luPShhdXRvKV0ge2Jvb2xlYW59IFNob3VsZCB1c2UgYW5vbnltb3VzIENPUlM/IERlZmF1bHRzIHRvIHRydWUgaWYgdGhlIFVSTCBpcyBub3QgYSBkYXRhLVVSSS5cbiAqIEBwYXJhbSBbc2NhbGVNb2RlPVBJWEkuU0NBTEVfTU9ERVMuREVGQVVMVF0ge251bWJlcn0gU2VlIHtAbGluayBQSVhJLlNDQUxFX01PREVTfSBmb3IgcG9zc2libGUgdmFsdWVzXG4gKiBAcmV0dXJuIFBJWEkuQmFzZVRleHR1cmVcbiAqL1xuQmFzZVRleHR1cmUuZnJvbUltYWdlID0gZnVuY3Rpb24gKGltYWdlVXJsLCBjcm9zc29yaWdpbiwgc2NhbGVNb2RlKVxue1xuICAgIHZhciBiYXNlVGV4dHVyZSA9IHV0aWxzLkJhc2VUZXh0dXJlQ2FjaGVbaW1hZ2VVcmxdO1xuXG4gICAgaWYgKGNyb3Nzb3JpZ2luID09PSB1bmRlZmluZWQgJiYgaW1hZ2VVcmwuaW5kZXhPZignZGF0YTonKSAhPT0gMClcbiAgICB7XG4gICAgICAgIGNyb3Nzb3JpZ2luID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBpZiAoIWJhc2VUZXh0dXJlKVxuICAgIHtcbiAgICAgICAgLy8gbmV3IEltYWdlKCkgYnJlYWtzIHRleCBsb2FkaW5nIGluIHNvbWUgdmVyc2lvbnMgb2YgQ2hyb21lLlxuICAgICAgICAvLyBTZWUgaHR0cHM6Ly9jb2RlLmdvb2dsZS5jb20vcC9jaHJvbWl1bS9pc3N1ZXMvZGV0YWlsP2lkPTIzODA3MVxuICAgICAgICB2YXIgaW1hZ2UgPSBuZXcgSW1hZ2UoKTsvL2RvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2ltZycpO1xuICAgICAgICBpZiAoY3Jvc3NvcmlnaW4pXG4gICAgICAgIHtcbiAgICAgICAgICAgIGltYWdlLmNyb3NzT3JpZ2luID0gJyc7XG4gICAgICAgIH1cblxuICAgICAgICBiYXNlVGV4dHVyZSA9IG5ldyBCYXNlVGV4dHVyZShpbWFnZSwgc2NhbGVNb2RlKTtcbiAgICAgICAgYmFzZVRleHR1cmUuaW1hZ2VVcmwgPSBpbWFnZVVybDtcblxuICAgICAgICBpbWFnZS5zcmMgPSBpbWFnZVVybDtcblxuICAgICAgICB1dGlscy5CYXNlVGV4dHVyZUNhY2hlW2ltYWdlVXJsXSA9IGJhc2VUZXh0dXJlO1xuXG4gICAgICAgIC8vIGlmIHRoZXJlIGlzIGFuIEAyeCBhdCB0aGUgZW5kIG9mIHRoZSB1cmwgd2UgYXJlIGdvaW5nIHRvIGFzc3VtZSBpdHMgYSBoaWdocmVzIGltYWdlXG4gICAgICAgIGJhc2VUZXh0dXJlLnJlc29sdXRpb24gPSB1dGlscy5nZXRSZXNvbHV0aW9uT2ZVcmwoaW1hZ2VVcmwpO1xuICAgIH1cblxuICAgIHJldHVybiBiYXNlVGV4dHVyZTtcbn07XG5cbi8qKlxuICogSGVscGVyIGZ1bmN0aW9uIHRoYXQgY3JlYXRlcyBhIGJhc2UgdGV4dHVyZSBmcm9tIHRoZSBnaXZlbiBjYW52YXMgZWxlbWVudC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAcGFyYW0gY2FudmFzIHtDYW52YXN9IFRoZSBjYW52YXMgZWxlbWVudCBzb3VyY2Ugb2YgdGhlIHRleHR1cmVcbiAqIEBwYXJhbSBzY2FsZU1vZGUge251bWJlcn0gU2VlIHtAbGluayBQSVhJLlNDQUxFX01PREVTfSBmb3IgcG9zc2libGUgdmFsdWVzXG4gKiBAcmV0dXJuIFBJWEkuQmFzZVRleHR1cmVcbiAqL1xuQmFzZVRleHR1cmUuZnJvbUNhbnZhcyA9IGZ1bmN0aW9uIChjYW52YXMsIHNjYWxlTW9kZSlcbntcbiAgICBpZiAoIWNhbnZhcy5fcGl4aUlkKVxuICAgIHtcbiAgICAgICAgY2FudmFzLl9waXhpSWQgPSAnY2FudmFzXycgKyB1dGlscy51aWQoKTtcbiAgICB9XG5cbiAgICB2YXIgYmFzZVRleHR1cmUgPSB1dGlscy5CYXNlVGV4dHVyZUNhY2hlW2NhbnZhcy5fcGl4aUlkXTtcblxuICAgIGlmICghYmFzZVRleHR1cmUpXG4gICAge1xuICAgICAgICBiYXNlVGV4dHVyZSA9IG5ldyBCYXNlVGV4dHVyZShjYW52YXMsIHNjYWxlTW9kZSk7XG4gICAgICAgIHV0aWxzLkJhc2VUZXh0dXJlQ2FjaGVbY2FudmFzLl9waXhpSWRdID0gYmFzZVRleHR1cmU7XG4gICAgfVxuXG4gICAgcmV0dXJuIGJhc2VUZXh0dXJlO1xufTtcbiIsInZhciBCYXNlVGV4dHVyZSA9IHJlcXVpcmUoJy4vQmFzZVRleHR1cmUnKSxcbiAgICBUZXh0dXJlID0gcmVxdWlyZSgnLi9UZXh0dXJlJyksXG4gICAgUmVuZGVyVGFyZ2V0ID0gcmVxdWlyZSgnLi4vcmVuZGVyZXJzL3dlYmdsL3V0aWxzL1JlbmRlclRhcmdldCcpLFxuICAgIEZpbHRlck1hbmFnZXIgPSByZXF1aXJlKCcuLi9yZW5kZXJlcnMvd2ViZ2wvbWFuYWdlcnMvRmlsdGVyTWFuYWdlcicpLFxuICAgIENhbnZhc0J1ZmZlciA9IHJlcXVpcmUoJy4uL3JlbmRlcmVycy9jYW52YXMvdXRpbHMvQ2FudmFzQnVmZmVyJyksXG4gICAgbWF0aCA9IHJlcXVpcmUoJy4uL21hdGgnKSxcbiAgICBDT05TVCA9IHJlcXVpcmUoJy4uL2NvbnN0JyksXG4gICAgdGVtcE1hdHJpeCA9IG5ldyBtYXRoLk1hdHJpeCgpO1xuXG4vKipcbiAqIEEgUmVuZGVyVGV4dHVyZSBpcyBhIHNwZWNpYWwgdGV4dHVyZSB0aGF0IGFsbG93cyBhbnkgUGl4aSBkaXNwbGF5IG9iamVjdCB0byBiZSByZW5kZXJlZCB0byBpdC5cbiAqXG4gKiBfX0hpbnRfXzogQWxsIERpc3BsYXlPYmplY3RzIChpLmUuIFNwcml0ZXMpIHRoYXQgcmVuZGVyIHRvIGEgUmVuZGVyVGV4dHVyZSBzaG91bGQgYmUgcHJlbG9hZGVkXG4gKiBvdGhlcndpc2UgYmxhY2sgcmVjdGFuZ2xlcyB3aWxsIGJlIGRyYXduIGluc3RlYWQuXG4gKlxuICogQSBSZW5kZXJUZXh0dXJlIHRha2VzIGEgc25hcHNob3Qgb2YgYW55IERpc3BsYXkgT2JqZWN0IGdpdmVuIHRvIGl0cyByZW5kZXIgbWV0aG9kLiBUaGUgcG9zaXRpb25cbiAqIGFuZCByb3RhdGlvbiBvZiB0aGUgZ2l2ZW4gRGlzcGxheSBPYmplY3RzIGlzIGlnbm9yZWQuIEZvciBleGFtcGxlOlxuICpcbiAqIGBgYGpzXG4gKiB2YXIgcmVuZGVyZXIgPSBQSVhJLmF1dG9EZXRlY3RSZW5kZXJlcigxMDI0LCAxMDI0LCB7IHZpZXc6IGNhbnZhcywgcmF0aW86IDEgfSk7XG4gKiB2YXIgcmVuZGVyVGV4dHVyZSA9IG5ldyBQSVhJLlJlbmRlclRleHR1cmUocmVuZGVyZXIsIDgwMCwgNjAwKTtcbiAqIHZhciBzcHJpdGUgPSBQSVhJLlNwcml0ZS5mcm9tSW1hZ2UoXCJzcGluT2JqXzAxLnBuZ1wiKTtcbiAqXG4gKiBzcHJpdGUucG9zaXRpb24ueCA9IDgwMC8yO1xuICogc3ByaXRlLnBvc2l0aW9uLnkgPSA2MDAvMjtcbiAqIHNwcml0ZS5hbmNob3IueCA9IDAuNTtcbiAqIHNwcml0ZS5hbmNob3IueSA9IDAuNTtcbiAqXG4gKiByZW5kZXJUZXh0dXJlLnJlbmRlcihzcHJpdGUpO1xuICogYGBgXG4gKlxuICogVGhlIFNwcml0ZSBpbiB0aGlzIGNhc2Ugd2lsbCBiZSByZW5kZXJlZCB0byBhIHBvc2l0aW9uIG9mIDAsMC4gVG8gcmVuZGVyIHRoaXMgc3ByaXRlIGF0IGl0cyBhY3R1YWxcbiAqIHBvc2l0aW9uIGEgQ29udGFpbmVyIHNob3VsZCBiZSB1c2VkOlxuICpcbiAqIGBgYGpzXG4gKiB2YXIgZG9jID0gbmV3IFBJWEkuQ29udGFpbmVyKCk7XG4gKlxuICogZG9jLmFkZENoaWxkKHNwcml0ZSk7XG4gKlxuICogcmVuZGVyVGV4dHVyZS5yZW5kZXIoZG9jKTsgIC8vIFJlbmRlcnMgdG8gY2VudGVyIG9mIHJlbmRlclRleHR1cmVcbiAqIGBgYFxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5UZXh0dXJlXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLkNhbnZhc1JlbmRlcmVyfFBJWEkuV2ViR0xSZW5kZXJlcn0gVGhlIHJlbmRlcmVyIHVzZWQgZm9yIHRoaXMgUmVuZGVyVGV4dHVyZVxuICogQHBhcmFtIFt3aWR0aD0xMDBdIHtudW1iZXJ9IFRoZSB3aWR0aCBvZiB0aGUgcmVuZGVyIHRleHR1cmVcbiAqIEBwYXJhbSBbaGVpZ2h0PTEwMF0ge251bWJlcn0gVGhlIGhlaWdodCBvZiB0aGUgcmVuZGVyIHRleHR1cmVcbiAqIEBwYXJhbSBbc2NhbGVNb2RlXSB7bnVtYmVyfSBTZWUge0BsaW5rIFBJWEkuU0NBTEVfTU9ERVN9IGZvciBwb3NzaWJsZSB2YWx1ZXNcbiAqIEBwYXJhbSBbcmVzb2x1dGlvbj0xXSB7bnVtYmVyfSBUaGUgcmVzb2x1dGlvbiBvZiB0aGUgdGV4dHVyZSBiZWluZyBnZW5lcmF0ZWRcbiAqL1xuZnVuY3Rpb24gUmVuZGVyVGV4dHVyZShyZW5kZXJlciwgd2lkdGgsIGhlaWdodCwgc2NhbGVNb2RlLCByZXNvbHV0aW9uKVxue1xuICAgIGlmICghcmVuZGVyZXIpXG4gICAge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1VuYWJsZSB0byBjcmVhdGUgUmVuZGVyVGV4dHVyZSwgeW91IG11c3QgcGFzcyBhIHJlbmRlcmVyIGludG8gdGhlIGNvbnN0cnVjdG9yLicpO1xuICAgIH1cblxuICAgIHdpZHRoID0gd2lkdGggfHwgMTAwO1xuICAgIGhlaWdodCA9IGhlaWdodCB8fCAxMDA7XG4gICAgcmVzb2x1dGlvbiA9IHJlc29sdXRpb24gfHwgQ09OU1QuUkVTT0xVVElPTjtcblxuICAgIC8qKlxuICAgICAqIFRoZSBiYXNlIHRleHR1cmUgb2JqZWN0IHRoYXQgdGhpcyB0ZXh0dXJlIHVzZXNcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge0Jhc2VUZXh0dXJlfVxuICAgICAqL1xuICAgIHZhciBiYXNlVGV4dHVyZSA9IG5ldyBCYXNlVGV4dHVyZSgpO1xuICAgIGJhc2VUZXh0dXJlLndpZHRoID0gd2lkdGg7XG4gICAgYmFzZVRleHR1cmUuaGVpZ2h0ID0gaGVpZ2h0O1xuICAgIGJhc2VUZXh0dXJlLnJlc29sdXRpb24gPSByZXNvbHV0aW9uO1xuICAgIGJhc2VUZXh0dXJlLnNjYWxlTW9kZSA9IHNjYWxlTW9kZSB8fCBDT05TVC5TQ0FMRV9NT0RFUy5ERUZBVUxUO1xuICAgIGJhc2VUZXh0dXJlLmhhc0xvYWRlZCA9IHRydWU7XG5cblxuICAgIFRleHR1cmUuY2FsbCh0aGlzLFxuICAgICAgICBiYXNlVGV4dHVyZSxcbiAgICAgICAgbmV3IG1hdGguUmVjdGFuZ2xlKDAsIDAsIHdpZHRoLCBoZWlnaHQpXG4gICAgKTtcblxuXG4gICAgLyoqXG4gICAgICogVGhlIHdpdGggb2YgdGhlIHJlbmRlciB0ZXh0dXJlXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy53aWR0aCA9IHdpZHRoO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGhlaWdodCBvZiB0aGUgcmVuZGVyIHRleHR1cmVcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLmhlaWdodCA9IGhlaWdodDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBSZXNvbHV0aW9uIG9mIHRoZSB0ZXh0dXJlLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMucmVzb2x1dGlvbiA9IHJlc29sdXRpb247XG5cbiAgICAvKipcbiAgICAgKiBEcmF3L3JlbmRlciB0aGUgZ2l2ZW4gRGlzcGxheU9iamVjdCBvbnRvIHRoZSB0ZXh0dXJlLlxuICAgICAqXG4gICAgICogVGhlIGRpc3BsYXlPYmplY3QgYW5kIGRlc2NlbmRlbnRzIGFyZSB0cmFuc2Zvcm1lZCBkdXJpbmcgdGhpcyBvcGVyYXRpb24uXG4gICAgICogSWYgYHVwZGF0ZVRyYW5zZm9ybWAgaXMgdHJ1ZSB0aGVuIHRoZSB0cmFuc2Zvcm1hdGlvbnMgd2lsbCBiZSByZXN0b3JlZCBiZWZvcmUgdGhlXG4gICAgICogbWV0aG9kIHJldHVybnMuIE90aGVyd2lzZSBpdCBpcyB1cCB0byB0aGUgY2FsbGluZyBjb2RlIHRvIGNvcnJlY3RseSB1c2Ugb3IgcmVzZXRcbiAgICAgKiB0aGUgdHJhbnNmb3JtZWQgZGlzcGxheSBvYmplY3RzLlxuICAgICAqXG4gICAgICogVGhlIGRpc3BsYXkgb2JqZWN0IGlzIGFsd2F5cyByZW5kZXJlZCB3aXRoIGEgd29ybGRBbHBoYSB2YWx1ZSBvZiAxLlxuICAgICAqXG4gICAgICogQG1ldGhvZFxuICAgICAqIEBwYXJhbSBkaXNwbGF5T2JqZWN0IHtQSVhJLkRpc3BsYXlPYmplY3R9IFRoZSBkaXNwbGF5IG9iamVjdCB0byByZW5kZXIgdGhpcyB0ZXh0dXJlIG9uXG4gICAgICogQHBhcmFtIFttYXRyaXhdIHtQSVhJLk1hdHJpeH0gT3B0aW9uYWwgbWF0cml4IHRvIGFwcGx5IHRvIHRoZSBkaXNwbGF5IG9iamVjdCBiZWZvcmUgcmVuZGVyaW5nLlxuICAgICAqIEBwYXJhbSBbY2xlYXI9ZmFsc2VdIHtib29sZWFufSBJZiB0cnVlIHRoZSB0ZXh0dXJlIHdpbGwgYmUgY2xlYXJlZCBiZWZvcmUgdGhlIGRpc3BsYXlPYmplY3QgaXMgZHJhd25cbiAgICAgKiBAcGFyYW0gW3VwZGF0ZVRyYW5zZm9ybT10cnVlXSB7Ym9vbGVhbn0gSWYgdHJ1ZSB0aGUgZGlzcGxheU9iamVjdCdzIHdvcmxkVHJhbnNmb3JtL3dvcmxkQWxwaGEgYW5kIGFsbCBjaGlsZHJlblxuICAgICAqICB0cmFuc2Zvcm1hdGlvbnMgd2lsbCBiZSByZXN0b3JlZC4gTm90IHJlc3RvcmluZyB0aGlzIGluZm9ybWF0aW9uIHdpbGwgYmUgYSBsaXR0bGUgZmFzdGVyLlxuICAgICAqL1xuICAgIHRoaXMucmVuZGVyID0gbnVsbDtcblxuICAgIC8qKlxuICAgICAqIFRoZSByZW5kZXJlciB0aGlzIFJlbmRlclRleHR1cmUgdXNlcy4gQSBSZW5kZXJUZXh0dXJlIGNhbiBvbmx5IGJlbG9uZyB0byBvbmUgcmVuZGVyZXIgYXQgdGhlIG1vbWVudCBpZiBpdHMgd2ViR0wuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLkNhbnZhc1JlbmRlcmVyfFBJWEkuV2ViR0xSZW5kZXJlcn1cbiAgICAgKi9cbiAgICB0aGlzLnJlbmRlcmVyID0gcmVuZGVyZXI7XG5cbiAgICBpZiAodGhpcy5yZW5kZXJlci50eXBlID09PSBDT05TVC5SRU5ERVJFUl9UWVBFLldFQkdMKVxuICAgIHtcbiAgICAgICAgdmFyIGdsID0gdGhpcy5yZW5kZXJlci5nbDtcblxuICAgICAgICB0aGlzLnRleHR1cmVCdWZmZXIgPSBuZXcgUmVuZGVyVGFyZ2V0KGdsLCB0aGlzLndpZHRoLCB0aGlzLmhlaWdodCwgYmFzZVRleHR1cmUuc2NhbGVNb2RlLCB0aGlzLnJlc29sdXRpb24pOy8vLCB0aGlzLmJhc2VUZXh0dXJlLnNjYWxlTW9kZSk7XG4gICAgICAgIHRoaXMuYmFzZVRleHR1cmUuX2dsVGV4dHVyZXNbZ2wuaWRdID0gdGhpcy50ZXh0dXJlQnVmZmVyLnRleHR1cmU7XG5cbiAgICAgICAgLy9UT0RPIHJlZmFjdG9yIGZpbHRlciBtYW5hZ2VyLi4gYXMgcmVhbGx5IGl0cyBubyBsb25nZXIgYSBtYW5hZ2VyIGlmIHdlIHVzZSBpdCBoZXJlLi5cbiAgICAgICAgdGhpcy5maWx0ZXJNYW5hZ2VyID0gbmV3IEZpbHRlck1hbmFnZXIodGhpcy5yZW5kZXJlcik7XG4gICAgICAgIHRoaXMuZmlsdGVyTWFuYWdlci5vbkNvbnRleHRDaGFuZ2UoKTtcbiAgICAgICAgdGhpcy5maWx0ZXJNYW5hZ2VyLnJlc2l6ZSh3aWR0aCwgaGVpZ2h0KTtcbiAgICAgICAgdGhpcy5yZW5kZXIgPSB0aGlzLnJlbmRlcldlYkdMO1xuXG4gICAgICAgIC8vIHRoZSBjcmVhdGlvbiBvZiBhIGZpbHRlciBtYW5hZ2VyIHVuYmluZHMgdGhlIGJ1ZmZlcnMuLlxuICAgICAgICB0aGlzLnJlbmRlcmVyLmN1cnJlbnRSZW5kZXJlci5zdGFydCgpO1xuICAgICAgICB0aGlzLnJlbmRlcmVyLmN1cnJlbnRSZW5kZXJUYXJnZXQuYWN0aXZhdGUoKTtcbiAgICB9XG4gICAgZWxzZVxuICAgIHtcblxuICAgICAgICB0aGlzLnJlbmRlciA9IHRoaXMucmVuZGVyQ2FudmFzO1xuICAgICAgICB0aGlzLnRleHR1cmVCdWZmZXIgPSBuZXcgQ2FudmFzQnVmZmVyKHRoaXMud2lkdGgqIHRoaXMucmVzb2x1dGlvbiwgdGhpcy5oZWlnaHQqIHRoaXMucmVzb2x1dGlvbik7XG4gICAgICAgIHRoaXMuYmFzZVRleHR1cmUuc291cmNlID0gdGhpcy50ZXh0dXJlQnVmZmVyLmNhbnZhcztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqL1xuICAgIHRoaXMudmFsaWQgPSB0cnVlO1xuXG4gICAgdGhpcy5fdXBkYXRlVXZzKCk7XG59XG5cblJlbmRlclRleHR1cmUucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShUZXh0dXJlLnByb3RvdHlwZSk7XG5SZW5kZXJUZXh0dXJlLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFJlbmRlclRleHR1cmU7XG5tb2R1bGUuZXhwb3J0cyA9IFJlbmRlclRleHR1cmU7XG5cbi8qKlxuICogUmVzaXplcyB0aGUgUmVuZGVyVGV4dHVyZS5cbiAqXG4gKiBAcGFyYW0gd2lkdGgge251bWJlcn0gVGhlIHdpZHRoIHRvIHJlc2l6ZSB0by5cbiAqIEBwYXJhbSBoZWlnaHQge251bWJlcn0gVGhlIGhlaWdodCB0byByZXNpemUgdG8uXG4gKiBAcGFyYW0gdXBkYXRlQmFzZSB7Ym9vbGVhbn0gU2hvdWxkIHRoZSBiYXNlVGV4dHVyZS53aWR0aCBhbmQgaGVpZ2h0IHZhbHVlcyBiZSByZXNpemVkIGFzIHdlbGw/XG4gKi9cblJlbmRlclRleHR1cmUucHJvdG90eXBlLnJlc2l6ZSA9IGZ1bmN0aW9uICh3aWR0aCwgaGVpZ2h0LCB1cGRhdGVCYXNlKVxue1xuICAgIGlmICh3aWR0aCA9PT0gdGhpcy53aWR0aCAmJiBoZWlnaHQgPT09IHRoaXMuaGVpZ2h0KVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMudmFsaWQgPSAod2lkdGggPiAwICYmIGhlaWdodCA+IDApO1xuXG4gICAgdGhpcy53aWR0aCA9IHRoaXMuX2ZyYW1lLndpZHRoID0gdGhpcy5jcm9wLndpZHRoID0gd2lkdGg7XG4gICAgdGhpcy5oZWlnaHQgPSAgdGhpcy5fZnJhbWUuaGVpZ2h0ID0gdGhpcy5jcm9wLmhlaWdodCA9IGhlaWdodDtcblxuICAgIGlmICh1cGRhdGVCYXNlKVxuICAgIHtcbiAgICAgICAgdGhpcy5iYXNlVGV4dHVyZS53aWR0aCA9IHRoaXMud2lkdGg7XG4gICAgICAgIHRoaXMuYmFzZVRleHR1cmUuaGVpZ2h0ID0gdGhpcy5oZWlnaHQ7XG4gICAgfVxuXG4gICAgaWYgKCF0aGlzLnZhbGlkKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMudGV4dHVyZUJ1ZmZlci5yZXNpemUodGhpcy53aWR0aCwgdGhpcy5oZWlnaHQpO1xuXG4gICAgaWYodGhpcy5maWx0ZXJNYW5hZ2VyKVxuICAgIHtcbiAgICAgICAgdGhpcy5maWx0ZXJNYW5hZ2VyLnJlc2l6ZSh0aGlzLndpZHRoLCB0aGlzLmhlaWdodCk7XG4gICAgfVxufTtcblxuLyoqXG4gKiBDbGVhcnMgdGhlIFJlbmRlclRleHR1cmUuXG4gKlxuICovXG5SZW5kZXJUZXh0dXJlLnByb3RvdHlwZS5jbGVhciA9IGZ1bmN0aW9uICgpXG57XG4gICAgaWYgKCF0aGlzLnZhbGlkKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnJlbmRlcmVyLnR5cGUgPT09IENPTlNULlJFTkRFUkVSX1RZUEUuV0VCR0wpXG4gICAge1xuICAgICAgICB0aGlzLnJlbmRlcmVyLmdsLmJpbmRGcmFtZWJ1ZmZlcih0aGlzLnJlbmRlcmVyLmdsLkZSQU1FQlVGRkVSLCB0aGlzLnRleHR1cmVCdWZmZXIuZnJhbWVCdWZmZXIpO1xuICAgIH1cblxuICAgIHRoaXMudGV4dHVyZUJ1ZmZlci5jbGVhcigpO1xufTtcblxuLyoqXG4gKiBJbnRlcm5hbCBtZXRob2QgYXNzaWduZWQgdG8gdGhlIGByZW5kZXJgIHByb3BlcnR5IGlmIHVzaW5nIGEgQ2FudmFzUmVuZGVyZXIuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSBkaXNwbGF5T2JqZWN0IHtQSVhJLkRpc3BsYXlPYmplY3R9IFRoZSBkaXNwbGF5IG9iamVjdCB0byByZW5kZXIgdGhpcyB0ZXh0dXJlIG9uXG4gKiBAcGFyYW0gW21hdHJpeF0ge1BJWEkuTWF0cml4fSBPcHRpb25hbCBtYXRyaXggdG8gYXBwbHkgdG8gdGhlIGRpc3BsYXkgb2JqZWN0IGJlZm9yZSByZW5kZXJpbmcuXG4gKiBAcGFyYW0gW2NsZWFyPWZhbHNlXSB7Ym9vbGVhbn0gSWYgdHJ1ZSB0aGUgdGV4dHVyZSB3aWxsIGJlIGNsZWFyZWQgYmVmb3JlIHRoZSBkaXNwbGF5T2JqZWN0IGlzIGRyYXduXG4gKiBAcGFyYW0gW3VwZGF0ZVRyYW5zZm9ybT10cnVlXSB7Ym9vbGVhbn0gSWYgdHJ1ZSB0aGUgZGlzcGxheU9iamVjdCdzIHdvcmxkVHJhbnNmb3JtL3dvcmxkQWxwaGEgYW5kIGFsbCBjaGlsZHJlblxuICogIHRyYW5zZm9ybWF0aW9ucyB3aWxsIGJlIHJlc3RvcmVkLiBOb3QgcmVzdG9yaW5nIHRoaXMgaW5mb3JtYXRpb24gd2lsbCBiZSBhIGxpdHRsZSBmYXN0ZXIuXG4gKi9cblJlbmRlclRleHR1cmUucHJvdG90eXBlLnJlbmRlcldlYkdMID0gZnVuY3Rpb24gKGRpc3BsYXlPYmplY3QsIG1hdHJpeCwgY2xlYXIsIHVwZGF0ZVRyYW5zZm9ybSlcbntcbiAgICBpZiAoIXRoaXMudmFsaWQpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG5cbiAgICB1cGRhdGVUcmFuc2Zvcm0gPSAodXBkYXRlVHJhbnNmb3JtICE9PSB1bmRlZmluZWQpID8gdXBkYXRlVHJhbnNmb3JtIDogdHJ1ZTsvLyF1cGRhdGVUcmFuc2Zvcm07XG5cbiAgICB0aGlzLnRleHR1cmVCdWZmZXIudHJhbnNmb3JtID0gbWF0cml4O1xuXG4gICAgLy9UT0RPIG5vdCBhIGZhbiB0aGF0IHRoaXMgaXMgaGVyZS4uLiBpdCB3aWxsIG1vdmUhXG4gICAgdGhpcy50ZXh0dXJlQnVmZmVyLmFjdGl2YXRlKCk7XG5cbiAgICAvLyBzZXRXb3JsZCBBbHBoYSB0byBlbnN1cmUgdGhhdCB0aGUgb2JqZWN0IGlzIHJlbmRlcmVyIGF0IGZ1bGwgb3BhY2l0eVxuICAgIGRpc3BsYXlPYmplY3Qud29ybGRBbHBoYSA9IDE7XG5cbiAgICBpZiAodXBkYXRlVHJhbnNmb3JtKVxuICAgIHtcblxuICAgICAgICAvLyByZXNldCB0aGUgbWF0cml4IG9mIHRoZSBkaXNwbGF0eU9iamVjdC4uXG4gICAgICAgIGRpc3BsYXlPYmplY3Qud29ybGRUcmFuc2Zvcm0uaWRlbnRpdHkoKTtcblxuICAgICAgICBkaXNwbGF5T2JqZWN0LmN1cnJlbnRCb3VuZHMgPSBudWxsO1xuXG4gICAgICAgIC8vIFRpbWUgdG8gdXBkYXRlIGFsbCB0aGUgY2hpbGRyZW4gb2YgdGhlIGRpc3BsYXlPYmplY3Qgd2l0aCB0aGUgbmV3IG1hdHJpeC4uXG4gICAgICAgIHZhciBjaGlsZHJlbiA9IGRpc3BsYXlPYmplY3QuY2hpbGRyZW47XG4gICAgICAgIHZhciBpLCBqO1xuXG4gICAgICAgIGZvciAoaSA9IDAsIGogPSBjaGlsZHJlbi5sZW5ndGg7IGkgPCBqOyArK2kpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNoaWxkcmVuW2ldLnVwZGF0ZVRyYW5zZm9ybSgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy9UT0RPIHJlbmFtZSB0ZXh0dXJlQnVmZmVyIHRvIHJlbmRlclRhcmdldC4uXG4gICAgdmFyIHRlbXAgPSAgdGhpcy5yZW5kZXJlci5maWx0ZXJNYW5hZ2VyO1xuXG4gICAgdGhpcy5yZW5kZXJlci5maWx0ZXJNYW5hZ2VyID0gdGhpcy5maWx0ZXJNYW5hZ2VyO1xuICAgIHRoaXMucmVuZGVyZXIucmVuZGVyRGlzcGxheU9iamVjdChkaXNwbGF5T2JqZWN0LCB0aGlzLnRleHR1cmVCdWZmZXIsIGNsZWFyKTtcblxuICAgIHRoaXMucmVuZGVyZXIuZmlsdGVyTWFuYWdlciA9IHRlbXA7XG59O1xuXG5cbi8qKlxuICogSW50ZXJuYWwgbWV0aG9kIGFzc2lnbmVkIHRvIHRoZSBgcmVuZGVyYCBwcm9wZXJ0eSBpZiB1c2luZyBhIENhbnZhc1JlbmRlcmVyLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0gZGlzcGxheU9iamVjdCB7UElYSS5EaXNwbGF5T2JqZWN0fSBUaGUgZGlzcGxheSBvYmplY3QgdG8gcmVuZGVyIHRoaXMgdGV4dHVyZSBvblxuICogQHBhcmFtIFttYXRyaXhdIHtQSVhJLk1hdHJpeH0gT3B0aW9uYWwgbWF0cml4IHRvIGFwcGx5IHRvIHRoZSBkaXNwbGF5IG9iamVjdCBiZWZvcmUgcmVuZGVyaW5nLlxuICogQHBhcmFtIFtjbGVhcl0ge2Jvb2xlYW59IElmIHRydWUgdGhlIHRleHR1cmUgd2lsbCBiZSBjbGVhcmVkIGJlZm9yZSB0aGUgZGlzcGxheU9iamVjdCBpcyBkcmF3blxuICovXG5SZW5kZXJUZXh0dXJlLnByb3RvdHlwZS5yZW5kZXJDYW52YXMgPSBmdW5jdGlvbiAoZGlzcGxheU9iamVjdCwgbWF0cml4LCBjbGVhciwgdXBkYXRlVHJhbnNmb3JtKVxue1xuICAgIGlmICghdGhpcy52YWxpZClcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB1cGRhdGVUcmFuc2Zvcm0gPSAhIXVwZGF0ZVRyYW5zZm9ybTtcblxuICAgIHZhciB3dCA9IHRlbXBNYXRyaXg7XG5cbiAgICB3dC5pZGVudGl0eSgpO1xuXG4gICAgaWYgKG1hdHJpeClcbiAgICB7XG4gICAgICAgIHd0LmFwcGVuZChtYXRyaXgpO1xuICAgIH1cblxuICAgIHZhciBjYWNoZWRXdCA9IGRpc3BsYXlPYmplY3Qud29ybGRUcmFuc2Zvcm07XG4gICAgZGlzcGxheU9iamVjdC53b3JsZFRyYW5zZm9ybSA9IHd0O1xuXG4gICAgLy8gc2V0V29ybGQgQWxwaGEgdG8gZW5zdXJlIHRoYXQgdGhlIG9iamVjdCBpcyByZW5kZXJlciBhdCBmdWxsIG9wYWNpdHlcbiAgICBkaXNwbGF5T2JqZWN0LndvcmxkQWxwaGEgPSAxO1xuXG4gICAgLy8gVGltZSB0byB1cGRhdGUgYWxsIHRoZSBjaGlsZHJlbiBvZiB0aGUgZGlzcGxheU9iamVjdCB3aXRoIHRoZSBuZXcgbWF0cml4Li5cbiAgICB2YXIgY2hpbGRyZW4gPSBkaXNwbGF5T2JqZWN0LmNoaWxkcmVuO1xuICAgIHZhciBpLCBqO1xuXG4gICAgZm9yIChpID0gMCwgaiA9IGNoaWxkcmVuLmxlbmd0aDsgaSA8IGo7ICsraSlcbiAgICB7XG4gICAgICAgIGNoaWxkcmVuW2ldLnVwZGF0ZVRyYW5zZm9ybSgpO1xuICAgIH1cblxuICAgIGlmIChjbGVhcilcbiAgICB7XG4gICAgICAgIHRoaXMudGV4dHVyZUJ1ZmZlci5jbGVhcigpO1xuICAgIH1cblxuXG4vLyAgICB0aGlzLnRleHR1cmVCdWZmZXIuXG4gICAgdmFyIGNvbnRleHQgPSB0aGlzLnRleHR1cmVCdWZmZXIuY29udGV4dDtcblxuICAgIHZhciByZWFsUmVzb2x1dGlvbiA9IHRoaXMucmVuZGVyZXIucmVzb2x1dGlvbjtcblxuICAgIHRoaXMucmVuZGVyZXIucmVzb2x1dGlvbiA9IHRoaXMucmVzb2x1dGlvbjtcblxuICAgIHRoaXMucmVuZGVyZXIucmVuZGVyRGlzcGxheU9iamVjdChkaXNwbGF5T2JqZWN0LCBjb250ZXh0KTtcblxuICAgIHRoaXMucmVuZGVyZXIucmVzb2x1dGlvbiA9IHJlYWxSZXNvbHV0aW9uO1xuXG4gICAgaWYoZGlzcGxheU9iamVjdC53b3JsZFRyYW5zZm9ybSA9PT0gd3QpXG4gICAge1xuICAgICAgICAvLyBmaXhlcyBjYWNoZUFzQml0bWFwIEhhcHBlbmluZyBkdXJpbmcgdGhlIGFib3ZlLi5cbiAgICAgICAgZGlzcGxheU9iamVjdC53b3JsZFRyYW5zZm9ybSA9IGNhY2hlZFd0O1xuICAgIH1cblxufTtcblxuLyoqXG4gKiBEZXN0cm95cyB0aGlzIHRleHR1cmVcbiAqXG4gKiBAcGFyYW0gZGVzdHJveUJhc2Uge2Jvb2xlYW59IFdoZXRoZXIgdG8gZGVzdHJveSB0aGUgYmFzZSB0ZXh0dXJlIGFzIHdlbGxcbiAqL1xuUmVuZGVyVGV4dHVyZS5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uICgpXG57XG4gICAgVGV4dHVyZS5wcm90b3R5cGUuZGVzdHJveS5jYWxsKHRoaXMsIHRydWUpO1xuXG4gICAgdGhpcy50ZXh0dXJlQnVmZmVyLmRlc3Ryb3koKTtcblxuICAgIC8vIGRlc3Ryb3kgdGhlIGZpbHRlcm1hbmFnZXIuLlxuICAgIGlmKHRoaXMuZmlsdGVyTWFuYWdlcilcbiAgICB7XG4gICAgICAgIHRoaXMuZmlsdGVyTWFuYWdlci5kZXN0cm95KCk7XG4gICAgfVxuXG4gICAgdGhpcy5yZW5kZXJlciA9IG51bGw7XG59O1xuXG4vKipcbiAqIFdpbGwgcmV0dXJuIGEgSFRNTCBJbWFnZSBvZiB0aGUgdGV4dHVyZVxuICpcbiAqIEByZXR1cm4ge0ltYWdlfVxuICovXG5SZW5kZXJUZXh0dXJlLnByb3RvdHlwZS5nZXRJbWFnZSA9IGZ1bmN0aW9uICgpXG57XG4gICAgdmFyIGltYWdlID0gbmV3IEltYWdlKCk7XG4gICAgaW1hZ2Uuc3JjID0gdGhpcy5nZXRCYXNlNjQoKTtcbiAgICByZXR1cm4gaW1hZ2U7XG59O1xuXG4vKipcbiAqIFdpbGwgcmV0dXJuIGEgYSBiYXNlNjQgZW5jb2RlZCBzdHJpbmcgb2YgdGhpcyB0ZXh0dXJlLiBJdCB3b3JrcyBieSBjYWxsaW5nIFJlbmRlclRleHR1cmUuZ2V0Q2FudmFzIGFuZCB0aGVuIHJ1bm5pbmcgdG9EYXRhVVJMIG9uIHRoYXQuXG4gKlxuICogQHJldHVybiB7c3RyaW5nfSBBIGJhc2U2NCBlbmNvZGVkIHN0cmluZyBvZiB0aGUgdGV4dHVyZS5cbiAqL1xuUmVuZGVyVGV4dHVyZS5wcm90b3R5cGUuZ2V0QmFzZTY0ID0gZnVuY3Rpb24gKClcbntcbiAgICByZXR1cm4gdGhpcy5nZXRDYW52YXMoKS50b0RhdGFVUkwoKTtcbn07XG5cbi8qKlxuICogQ3JlYXRlcyBhIENhbnZhcyBlbGVtZW50LCByZW5kZXJzIHRoaXMgUmVuZGVyVGV4dHVyZSB0byBpdCBhbmQgdGhlbiByZXR1cm5zIGl0LlxuICpcbiAqIEByZXR1cm4ge0hUTUxDYW52YXNFbGVtZW50fSBBIENhbnZhcyBlbGVtZW50IHdpdGggdGhlIHRleHR1cmUgcmVuZGVyZWQgb24uXG4gKi9cblJlbmRlclRleHR1cmUucHJvdG90eXBlLmdldENhbnZhcyA9IGZ1bmN0aW9uICgpXG57XG4gICAgaWYgKHRoaXMucmVuZGVyZXIudHlwZSA9PT0gQ09OU1QuUkVOREVSRVJfVFlQRS5XRUJHTClcbiAgICB7XG4gICAgICAgIHZhciBnbCA9IHRoaXMucmVuZGVyZXIuZ2w7XG4gICAgICAgIHZhciB3aWR0aCA9IHRoaXMudGV4dHVyZUJ1ZmZlci5zaXplLndpZHRoO1xuICAgICAgICB2YXIgaGVpZ2h0ID0gdGhpcy50ZXh0dXJlQnVmZmVyLnNpemUuaGVpZ2h0O1xuXG4gICAgICAgIHZhciB3ZWJHTFBpeGVscyA9IG5ldyBVaW50OEFycmF5KDQgKiB3aWR0aCAqIGhlaWdodCk7XG5cbiAgICAgICAgZ2wuYmluZEZyYW1lYnVmZmVyKGdsLkZSQU1FQlVGRkVSLCB0aGlzLnRleHR1cmVCdWZmZXIuZnJhbWVCdWZmZXIpO1xuICAgICAgICBnbC5yZWFkUGl4ZWxzKDAsIDAsIHdpZHRoLCBoZWlnaHQsIGdsLlJHQkEsIGdsLlVOU0lHTkVEX0JZVEUsIHdlYkdMUGl4ZWxzKTtcbiAgICAgICAgZ2wuYmluZEZyYW1lYnVmZmVyKGdsLkZSQU1FQlVGRkVSLCBudWxsKTtcblxuICAgICAgICB2YXIgdGVtcENhbnZhcyA9IG5ldyBDYW52YXNCdWZmZXIod2lkdGgsIGhlaWdodCk7XG4gICAgICAgIHZhciBjYW52YXNEYXRhID0gdGVtcENhbnZhcy5jb250ZXh0LmdldEltYWdlRGF0YSgwLCAwLCB3aWR0aCwgaGVpZ2h0KTtcbiAgICAgICAgY2FudmFzRGF0YS5kYXRhLnNldCh3ZWJHTFBpeGVscyk7XG5cbiAgICAgICAgdGVtcENhbnZhcy5jb250ZXh0LnB1dEltYWdlRGF0YShjYW52YXNEYXRhLCAwLCAwKTtcblxuICAgICAgICByZXR1cm4gdGVtcENhbnZhcy5jYW52YXM7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHJldHVybiB0aGlzLnRleHR1cmVCdWZmZXIuY2FudmFzO1xuICAgIH1cbn07XG5cbi8qKlxuICogV2lsbCByZXR1cm4gYSBvbmUtZGltZW5zaW9uYWwgYXJyYXkgY29udGFpbmluZyB0aGUgcGl4ZWwgZGF0YSBvZiB0aGUgZW50aXJlIHRleHR1cmUgaW4gUkdCQSBvcmRlciwgd2l0aCBpbnRlZ2VyIHZhbHVlcyBiZXR3ZWVuIDAgYW5kIDI1NSAoaW5jbHVkZWQpLlxuICpcbiAqIEByZXR1cm4ge1VpbnQ4Q2xhbXBlZEFycmF5fVxuICovXG5SZW5kZXJUZXh0dXJlLnByb3RvdHlwZS5nZXRQaXhlbHMgPSBmdW5jdGlvbiAoKVxue1xuICAgIHZhciB3aWR0aCwgaGVpZ2h0O1xuXG4gICAgaWYgKHRoaXMucmVuZGVyZXIudHlwZSA9PT0gQ09OU1QuUkVOREVSRVJfVFlQRS5XRUJHTClcbiAgICB7XG4gICAgICAgIHZhciBnbCA9IHRoaXMucmVuZGVyZXIuZ2w7XG4gICAgICAgIHdpZHRoID0gdGhpcy50ZXh0dXJlQnVmZmVyLnNpemUud2lkdGg7XG4gICAgICAgIGhlaWdodCA9IHRoaXMudGV4dHVyZUJ1ZmZlci5zaXplLmhlaWdodDtcblxuICAgICAgICB2YXIgd2ViR0xQaXhlbHMgPSBuZXcgVWludDhBcnJheSg0ICogd2lkdGggKiBoZWlnaHQpO1xuXG4gICAgICAgIGdsLmJpbmRGcmFtZWJ1ZmZlcihnbC5GUkFNRUJVRkZFUiwgdGhpcy50ZXh0dXJlQnVmZmVyLmZyYW1lQnVmZmVyKTtcbiAgICAgICAgZ2wucmVhZFBpeGVscygwLCAwLCB3aWR0aCwgaGVpZ2h0LCBnbC5SR0JBLCBnbC5VTlNJR05FRF9CWVRFLCB3ZWJHTFBpeGVscyk7XG4gICAgICAgIGdsLmJpbmRGcmFtZWJ1ZmZlcihnbC5GUkFNRUJVRkZFUiwgbnVsbCk7XG5cbiAgICAgICAgcmV0dXJuIHdlYkdMUGl4ZWxzO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICB3aWR0aCA9IHRoaXMudGV4dHVyZUJ1ZmZlci5jYW52YXMud2lkdGg7XG4gICAgICAgIGhlaWdodCA9IHRoaXMudGV4dHVyZUJ1ZmZlci5jYW52YXMuaGVpZ2h0O1xuXG4gICAgICAgIHJldHVybiB0aGlzLnRleHR1cmVCdWZmZXIuY2FudmFzLmdldENvbnRleHQoJzJkJykuZ2V0SW1hZ2VEYXRhKDAsIDAsIHdpZHRoLCBoZWlnaHQpLmRhdGE7XG4gICAgfVxufTtcblxuLyoqXG4gKiBXaWxsIHJldHVybiBhIG9uZS1kaW1lbnNpb25hbCBhcnJheSBjb250YWluaW5nIHRoZSBwaXhlbCBkYXRhIG9mIGEgcGl4ZWwgd2l0aGluIHRoZSB0ZXh0dXJlIGluIFJHQkEgb3JkZXIsIHdpdGggaW50ZWdlciB2YWx1ZXMgYmV0d2VlbiAwIGFuZCAyNTUgKGluY2x1ZGVkKS5cbiAqXG4gKiBAcGFyYW0geCB7bnVtYmVyfSBUaGUgeCBjb29yZGluYXRlIG9mIHRoZSBwaXhlbCB0byByZXRyaWV2ZS5cbiAqIEBwYXJhbSB5IHtudW1iZXJ9IFRoZSB5IGNvb3JkaW5hdGUgb2YgdGhlIHBpeGVsIHRvIHJldHJpZXZlLlxuICogQHJldHVybiB7VWludDhDbGFtcGVkQXJyYXl9XG4gKi9cblJlbmRlclRleHR1cmUucHJvdG90eXBlLmdldFBpeGVsID0gZnVuY3Rpb24gKHgsIHkpXG57XG4gICAgaWYgKHRoaXMucmVuZGVyZXIudHlwZSA9PT0gQ09OU1QuUkVOREVSRVJfVFlQRS5XRUJHTClcbiAgICB7XG4gICAgICAgIHZhciBnbCA9IHRoaXMucmVuZGVyZXIuZ2w7XG5cbiAgICAgICAgdmFyIHdlYkdMUGl4ZWxzID0gbmV3IFVpbnQ4QXJyYXkoNCk7XG5cbiAgICAgICAgZ2wuYmluZEZyYW1lYnVmZmVyKGdsLkZSQU1FQlVGRkVSLCB0aGlzLnRleHR1cmVCdWZmZXIuZnJhbWVCdWZmZXIpO1xuICAgICAgICBnbC5yZWFkUGl4ZWxzKHgsIHksIDEsIDEsIGdsLlJHQkEsIGdsLlVOU0lHTkVEX0JZVEUsIHdlYkdMUGl4ZWxzKTtcbiAgICAgICAgZ2wuYmluZEZyYW1lYnVmZmVyKGdsLkZSQU1FQlVGRkVSLCBudWxsKTtcblxuICAgICAgICByZXR1cm4gd2ViR0xQaXhlbHM7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHJldHVybiB0aGlzLnRleHR1cmVCdWZmZXIuY2FudmFzLmdldENvbnRleHQoJzJkJykuZ2V0SW1hZ2VEYXRhKHgsIHksIDEsIDEpLmRhdGE7XG4gICAgfVxufTtcbiIsInZhciBCYXNlVGV4dHVyZSA9IHJlcXVpcmUoJy4vQmFzZVRleHR1cmUnKSxcbiAgICBWaWRlb0Jhc2VUZXh0dXJlID0gcmVxdWlyZSgnLi9WaWRlb0Jhc2VUZXh0dXJlJyksXG4gICAgVGV4dHVyZVV2cyA9IHJlcXVpcmUoJy4vVGV4dHVyZVV2cycpLFxuICAgIEV2ZW50RW1pdHRlciA9IHJlcXVpcmUoJ2V2ZW50ZW1pdHRlcjMnKSxcbiAgICBtYXRoID0gcmVxdWlyZSgnLi4vbWF0aCcpLFxuICAgIHV0aWxzID0gcmVxdWlyZSgnLi4vdXRpbHMnKTtcblxuLyoqXG4gKiBBIHRleHR1cmUgc3RvcmVzIHRoZSBpbmZvcm1hdGlvbiB0aGF0IHJlcHJlc2VudHMgYW4gaW1hZ2Ugb3IgcGFydCBvZiBhbiBpbWFnZS4gSXQgY2Fubm90IGJlIGFkZGVkXG4gKiB0byB0aGUgZGlzcGxheSBsaXN0IGRpcmVjdGx5LiBJbnN0ZWFkIHVzZSBpdCBhcyB0aGUgdGV4dHVyZSBmb3IgYSBTcHJpdGUuIElmIG5vIGZyYW1lIGlzIHByb3ZpZGVkIHRoZW4gdGhlIHdob2xlIGltYWdlIGlzIHVzZWQuXG4gKlxuICogWW91IGNhbiBkaXJlY3RseSBjcmVhdGUgYSB0ZXh0dXJlIGZyb20gYW4gaW1hZ2UgYW5kIHRoZW4gcmV1c2UgaXQgbXVsdGlwbGUgdGltZXMgbGlrZSB0aGlzIDpcbiAqXG4gKiBgYGBqc1xuICogdmFyIHRleHR1cmUgPSBQSVhJLlRleHR1cmUuZnJvbUltYWdlKCdhc3NldHMvaW1hZ2UucG5nJyk7XG4gKiB2YXIgc3ByaXRlMSA9IG5ldyBQSVhJLlNwcml0ZSh0ZXh0dXJlKTtcbiAqIHZhciBzcHJpdGUyID0gbmV3IFBJWEkuU3ByaXRlKHRleHR1cmUpO1xuICogYGBgXG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIGJhc2VUZXh0dXJlIHtQSVhJLkJhc2VUZXh0dXJlfSBUaGUgYmFzZSB0ZXh0dXJlIHNvdXJjZSB0byBjcmVhdGUgdGhlIHRleHR1cmUgZnJvbVxuICogQHBhcmFtIFtmcmFtZV0ge1BJWEkuUmVjdGFuZ2xlfSBUaGUgcmVjdGFuZ2xlIGZyYW1lIG9mIHRoZSB0ZXh0dXJlIHRvIHNob3dcbiAqIEBwYXJhbSBbY3JvcF0ge1BJWEkuUmVjdGFuZ2xlfSBUaGUgYXJlYSBvZiBvcmlnaW5hbCB0ZXh0dXJlXG4gKiBAcGFyYW0gW3RyaW1dIHtQSVhJLlJlY3RhbmdsZX0gVHJpbW1lZCB0ZXh0dXJlIHJlY3RhbmdsZVxuICogQHBhcmFtIFtyb3RhdGVdIHtib29sZWFufSBpbmRpY2F0ZXMgd2hldGhlciB0aGUgdGV4dHVyZSBzaG91bGQgYmUgcm90YXRlZCBieSA5MCBkZWdyZWVzICggdXNlZCBieSB0ZXh0dXJlIHBhY2tlciApXG4gKi9cbmZ1bmN0aW9uIFRleHR1cmUoYmFzZVRleHR1cmUsIGZyYW1lLCBjcm9wLCB0cmltLCByb3RhdGUpXG57XG4gICAgRXZlbnRFbWl0dGVyLmNhbGwodGhpcyk7XG5cbiAgICAvKipcbiAgICAgKiBEb2VzIHRoaXMgVGV4dHVyZSBoYXZlIGFueSBmcmFtZSBkYXRhIGFzc2lnbmVkIHRvIGl0P1xuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKi9cbiAgICB0aGlzLm5vRnJhbWUgPSBmYWxzZTtcblxuICAgIGlmICghZnJhbWUpXG4gICAge1xuICAgICAgICB0aGlzLm5vRnJhbWUgPSB0cnVlO1xuICAgICAgICBmcmFtZSA9IG5ldyBtYXRoLlJlY3RhbmdsZSgwLCAwLCAxLCAxKTtcbiAgICB9XG5cbiAgICBpZiAoYmFzZVRleHR1cmUgaW5zdGFuY2VvZiBUZXh0dXJlKVxuICAgIHtcbiAgICAgICAgYmFzZVRleHR1cmUgPSBiYXNlVGV4dHVyZS5iYXNlVGV4dHVyZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYmFzZSB0ZXh0dXJlIHRoYXQgdGhpcyB0ZXh0dXJlIHVzZXMuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLkJhc2VUZXh0dXJlfVxuICAgICAqL1xuICAgIHRoaXMuYmFzZVRleHR1cmUgPSBiYXNlVGV4dHVyZTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBmcmFtZSBzcGVjaWZpZXMgdGhlIHJlZ2lvbiBvZiB0aGUgYmFzZSB0ZXh0dXJlIHRoYXQgdGhpcyB0ZXh0dXJlIHVzZXNcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuUmVjdGFuZ2xlfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fZnJhbWUgPSBmcmFtZTtcblxuICAgIC8qKlxuICAgICAqIFRoZSB0ZXh0dXJlIHRyaW0gZGF0YS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuUmVjdGFuZ2xlfVxuICAgICAqL1xuICAgIHRoaXMudHJpbSA9IHRyaW07XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIHdpbGwgbGV0IHRoZSByZW5kZXJlciBrbm93IGlmIHRoZSB0ZXh0dXJlIGlzIHZhbGlkLiBJZiBpdCdzIG5vdCB0aGVuIGl0IGNhbm5vdCBiZSByZW5kZXJlZC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICovXG4gICAgdGhpcy52YWxpZCA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogVGhpcyB3aWxsIGxldCBhIHJlbmRlcmVyIGtub3cgdGhhdCBhIHRleHR1cmUgaGFzIGJlZW4gdXBkYXRlZCAodXNlZCBtYWlubHkgZm9yIHdlYkdMIHV2IHVwZGF0ZXMpXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqL1xuICAgIHRoaXMucmVxdWlyZXNVcGRhdGUgPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBXZWJHTCBVViBkYXRhIGNhY2hlLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5UZXh0dXJlVXZzfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fdXZzID0gbnVsbDtcblxuICAgIC8qKlxuICAgICAqIFRoZSB3aWR0aCBvZiB0aGUgVGV4dHVyZSBpbiBwaXhlbHMuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy53aWR0aCA9IDA7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgaGVpZ2h0IG9mIHRoZSBUZXh0dXJlIGluIHBpeGVscy5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLmhlaWdodCA9IDA7XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIGlzIHRoZSBhcmVhIG9mIHRoZSBCYXNlVGV4dHVyZSBpbWFnZSB0byBhY3R1YWxseSBjb3B5IHRvIHRoZSBDYW52YXMgLyBXZWJHTCB3aGVuIHJlbmRlcmluZyxcbiAgICAgKiBpcnJlc3BlY3RpdmUgb2YgdGhlIGFjdHVhbCBmcmFtZSBzaXplIG9yIHBsYWNlbWVudCAod2hpY2ggY2FuIGJlIGluZmx1ZW5jZWQgYnkgdHJpbW1lZCB0ZXh0dXJlIGF0bGFzZXMpXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlJlY3RhbmdsZX1cbiAgICAgKi9cbiAgICB0aGlzLmNyb3AgPSBjcm9wIHx8IGZyYW1lOy8vbmV3IG1hdGguUmVjdGFuZ2xlKDAsIDAsIDEsIDEpO1xuXG4gICAgLyoqXG4gICAgICogSW5kaWNhdGVzIHdoZXRoZXIgdGhlIHRleHR1cmUgc2hvdWxkIGJlIHJvdGF0ZWQgYnkgOTAgZGVncmVlc1xuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqL1xuICAgIHRoaXMucm90YXRlID0gISFyb3RhdGU7XG5cbiAgICBpZiAoYmFzZVRleHR1cmUuaGFzTG9hZGVkKVxuICAgIHtcbiAgICAgICAgaWYgKHRoaXMubm9GcmFtZSlcbiAgICAgICAge1xuICAgICAgICAgICAgZnJhbWUgPSBuZXcgbWF0aC5SZWN0YW5nbGUoMCwgMCwgYmFzZVRleHR1cmUud2lkdGgsIGJhc2VUZXh0dXJlLmhlaWdodCk7XG5cbiAgICAgICAgICAgIC8vIGlmIHRoZXJlIGlzIG5vIGZyYW1lIHdlIHNob3VsZCBtb25pdG9yIGZvciBhbnkgYmFzZSB0ZXh0dXJlIGNoYW5nZXMuLlxuICAgICAgICAgICAgYmFzZVRleHR1cmUub24oJ3VwZGF0ZScsIHRoaXMub25CYXNlVGV4dHVyZVVwZGF0ZWQsIHRoaXMpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZnJhbWUgPSBmcmFtZTtcbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgYmFzZVRleHR1cmUub25jZSgnbG9hZGVkJywgdGhpcy5vbkJhc2VUZXh0dXJlTG9hZGVkLCB0aGlzKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBGaXJlZCB3aGVuIHRoZSB0ZXh0dXJlIGlzIHVwZGF0ZWQuIFRoaXMgaGFwcGVucyBpZiB0aGUgZnJhbWUgb3IgdGhlIGJhc2VUZXh0dXJlIGlzIHVwZGF0ZWQuXG4gICAgICpcbiAgICAgKiBAZXZlbnQgdXBkYXRlXG4gICAgICogQG1lbWJlcm9mIFBJWEkuVGV4dHVyZSNcbiAgICAgKiBAcHJvdGVjdGVkXG4gICAgICovXG59XG5cblRleHR1cmUucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShFdmVudEVtaXR0ZXIucHJvdG90eXBlKTtcblRleHR1cmUucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gVGV4dHVyZTtcbm1vZHVsZS5leHBvcnRzID0gVGV4dHVyZTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoVGV4dHVyZS5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBUaGUgZnJhbWUgc3BlY2lmaWVzIHRoZSByZWdpb24gb2YgdGhlIGJhc2UgdGV4dHVyZSB0aGF0IHRoaXMgdGV4dHVyZSB1c2VzLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5SZWN0YW5nbGV9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuVGV4dHVyZSNcbiAgICAgKi9cbiAgICBmcmFtZToge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9mcmFtZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAoZnJhbWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuX2ZyYW1lID0gZnJhbWU7XG5cbiAgICAgICAgICAgIHRoaXMubm9GcmFtZSA9IGZhbHNlO1xuXG4gICAgICAgICAgICB0aGlzLndpZHRoID0gZnJhbWUud2lkdGg7XG4gICAgICAgICAgICB0aGlzLmhlaWdodCA9IGZyYW1lLmhlaWdodDtcblxuICAgICAgICAgICAgaWYgKCF0aGlzLnRyaW0gJiYgIXRoaXMucm90YXRlICYmIChmcmFtZS54ICsgZnJhbWUud2lkdGggPiB0aGlzLmJhc2VUZXh0dXJlLndpZHRoIHx8IGZyYW1lLnkgKyBmcmFtZS5oZWlnaHQgPiB0aGlzLmJhc2VUZXh0dXJlLmhlaWdodCkpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdUZXh0dXJlIEVycm9yOiBmcmFtZSBkb2VzIG5vdCBmaXQgaW5zaWRlIHRoZSBiYXNlIFRleHR1cmUgZGltZW5zaW9ucyAnICsgdGhpcyk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vdGhpcy52YWxpZCA9IGZyYW1lICYmIGZyYW1lLndpZHRoICYmIGZyYW1lLmhlaWdodCAmJiB0aGlzLmJhc2VUZXh0dXJlLnNvdXJjZSAmJiB0aGlzLmJhc2VUZXh0dXJlLmhhc0xvYWRlZDtcbiAgICAgICAgICAgIHRoaXMudmFsaWQgPSBmcmFtZSAmJiBmcmFtZS53aWR0aCAmJiBmcmFtZS5oZWlnaHQgJiYgdGhpcy5iYXNlVGV4dHVyZS5oYXNMb2FkZWQ7XG5cbiAgICAgICAgICAgIGlmICh0aGlzLnRyaW0pXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdGhpcy53aWR0aCA9IHRoaXMudHJpbS53aWR0aDtcbiAgICAgICAgICAgICAgICB0aGlzLmhlaWdodCA9IHRoaXMudHJpbS5oZWlnaHQ7XG4gICAgICAgICAgICAgICAgdGhpcy5fZnJhbWUud2lkdGggPSB0aGlzLnRyaW0ud2lkdGg7XG4gICAgICAgICAgICAgICAgdGhpcy5fZnJhbWUuaGVpZ2h0ID0gdGhpcy50cmltLmhlaWdodDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB0aGlzLmNyb3AgPSBmcmFtZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHRoaXMudmFsaWQpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdGhpcy5fdXBkYXRlVXZzKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG59KTtcblxuLyoqXG4gKiBVcGRhdGVzIHRoaXMgdGV4dHVyZSBvbiB0aGUgZ3B1LlxuICpcbiAqL1xuVGV4dHVyZS5wcm90b3R5cGUudXBkYXRlID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLmJhc2VUZXh0dXJlLnVwZGF0ZSgpO1xufTtcblxuLyoqXG4gKiBDYWxsZWQgd2hlbiB0aGUgYmFzZSB0ZXh0dXJlIGlzIGxvYWRlZFxuICpcbiAqIEBwcml2YXRlXG4gKi9cblRleHR1cmUucHJvdG90eXBlLm9uQmFzZVRleHR1cmVMb2FkZWQgPSBmdW5jdGlvbiAoYmFzZVRleHR1cmUpXG57XG4gICAgLy8gVE9ETyB0aGlzIGNvZGUgbG9va3MgY29uZnVzaW5nLi4gYm9vIHRvIGFidXNpbmcgZ2V0dGVycyBhbmQgc2V0dGVyc3MhXG4gICAgaWYgKHRoaXMubm9GcmFtZSlcbiAgICB7XG4gICAgICAgIHRoaXMuZnJhbWUgPSBuZXcgbWF0aC5SZWN0YW5nbGUoMCwgMCwgYmFzZVRleHR1cmUud2lkdGgsIGJhc2VUZXh0dXJlLmhlaWdodCk7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHRoaXMuZnJhbWUgPSB0aGlzLl9mcmFtZTtcbiAgICB9XG5cbiAgICB0aGlzLmVtaXQoJ3VwZGF0ZScsIHRoaXMpO1xufTtcblxuLyoqXG4gKiBDYWxsZWQgd2hlbiB0aGUgYmFzZSB0ZXh0dXJlIGlzIHVwZGF0ZWRcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5UZXh0dXJlLnByb3RvdHlwZS5vbkJhc2VUZXh0dXJlVXBkYXRlZCA9IGZ1bmN0aW9uIChiYXNlVGV4dHVyZSlcbntcbiAgICB0aGlzLl9mcmFtZS53aWR0aCA9IGJhc2VUZXh0dXJlLndpZHRoO1xuICAgIHRoaXMuX2ZyYW1lLmhlaWdodCA9IGJhc2VUZXh0dXJlLmhlaWdodDtcblxuICAgIHRoaXMuZW1pdCgndXBkYXRlJywgdGhpcyk7XG59O1xuXG4vKipcbiAqIERlc3Ryb3lzIHRoaXMgdGV4dHVyZVxuICpcbiAqIEBwYXJhbSBbZGVzdHJveUJhc2U9ZmFsc2VdIHtib29sZWFufSBXaGV0aGVyIHRvIGRlc3Ryb3kgdGhlIGJhc2UgdGV4dHVyZSBhcyB3ZWxsXG4gKi9cblRleHR1cmUucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoZGVzdHJveUJhc2UpXG57XG4gICAgaWYgKHRoaXMuYmFzZVRleHR1cmUpXG4gICAge1xuICAgICAgICBpZiAoZGVzdHJveUJhc2UpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuYmFzZVRleHR1cmUuZGVzdHJveSgpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5iYXNlVGV4dHVyZS5vZmYoJ3VwZGF0ZScsIHRoaXMub25CYXNlVGV4dHVyZVVwZGF0ZWQsIHRoaXMpO1xuICAgICAgICB0aGlzLmJhc2VUZXh0dXJlLm9mZignbG9hZGVkJywgdGhpcy5vbkJhc2VUZXh0dXJlTG9hZGVkLCB0aGlzKTtcblxuICAgICAgICB0aGlzLmJhc2VUZXh0dXJlID0gbnVsbDtcbiAgICB9XG5cbiAgICB0aGlzLl9mcmFtZSA9IG51bGw7XG4gICAgdGhpcy5fdXZzID0gbnVsbDtcbiAgICB0aGlzLnRyaW0gPSBudWxsO1xuICAgIHRoaXMuY3JvcCA9IG51bGw7XG5cbiAgICB0aGlzLnZhbGlkID0gZmFsc2U7XG5cbiAgICB0aGlzLm9mZignZGlzcG9zZScsIHRoaXMuZGlzcG9zZSwgdGhpcyk7XG4gICAgdGhpcy5vZmYoJ3VwZGF0ZScsIHRoaXMudXBkYXRlLCB0aGlzKTtcbn07XG5cbi8qKlxuICogQ3JlYXRlcyBhIG5ldyB0ZXh0dXJlIG9iamVjdCB0aGF0IGFjdHMgdGhlIHNhbWUgYXMgdGhpcyBvbmUuXG4gKlxuICogQHJldHVybiB7UElYSS5UZXh0dXJlfVxuICovXG5UZXh0dXJlLnByb3RvdHlwZS5jbG9uZSA9IGZ1bmN0aW9uICgpXG57XG4gICAgcmV0dXJuIG5ldyBUZXh0dXJlKHRoaXMuYmFzZVRleHR1cmUsIHRoaXMuZnJhbWUsIHRoaXMuY3JvcCwgdGhpcy50cmltLCB0aGlzLnJvdGF0ZSk7XG59O1xuXG4vKipcbiAqIFVwZGF0ZXMgdGhlIGludGVybmFsIFdlYkdMIFVWIGNhY2hlLlxuICpcbiAqIEBwcml2YXRlXG4gKi9cblRleHR1cmUucHJvdG90eXBlLl91cGRhdGVVdnMgPSBmdW5jdGlvbiAoKVxue1xuICAgIGlmICghdGhpcy5fdXZzKVxuICAgIHtcbiAgICAgICAgdGhpcy5fdXZzID0gbmV3IFRleHR1cmVVdnMoKTtcbiAgICB9XG5cbiAgICB0aGlzLl91dnMuc2V0KHRoaXMuY3JvcCwgdGhpcy5iYXNlVGV4dHVyZSwgdGhpcy5yb3RhdGUpO1xufTtcblxuLyoqXG4gKiBIZWxwZXIgZnVuY3Rpb24gdGhhdCBjcmVhdGVzIGEgVGV4dHVyZSBvYmplY3QgZnJvbSB0aGUgZ2l2ZW4gaW1hZ2UgdXJsLlxuICogSWYgdGhlIGltYWdlIGlzIG5vdCBpbiB0aGUgdGV4dHVyZSBjYWNoZSBpdCB3aWxsIGJlICBjcmVhdGVkIGFuZCBsb2FkZWQuXG4gKlxuICogQHN0YXRpY1xuICogQHBhcmFtIGltYWdlVXJsIHtzdHJpbmd9IFRoZSBpbWFnZSB1cmwgb2YgdGhlIHRleHR1cmVcbiAqIEBwYXJhbSBjcm9zc29yaWdpbiB7Ym9vbGVhbn0gV2hldGhlciByZXF1ZXN0cyBzaG91bGQgYmUgdHJlYXRlZCBhcyBjcm9zc29yaWdpblxuICogQHBhcmFtIHNjYWxlTW9kZSB7bnVtYmVyfSBTZWUge0BsaW5rIFBJWEkuU0NBTEVfTU9ERVN9IGZvciBwb3NzaWJsZSB2YWx1ZXNcbiAqIEByZXR1cm4ge1BJWEkuVGV4dHVyZX0gVGhlIG5ld2x5IGNyZWF0ZWQgdGV4dHVyZVxuICovXG5UZXh0dXJlLmZyb21JbWFnZSA9IGZ1bmN0aW9uIChpbWFnZVVybCwgY3Jvc3NvcmlnaW4sIHNjYWxlTW9kZSlcbntcbiAgICB2YXIgdGV4dHVyZSA9IHV0aWxzLlRleHR1cmVDYWNoZVtpbWFnZVVybF07XG5cbiAgICBpZiAoIXRleHR1cmUpXG4gICAge1xuICAgICAgICB0ZXh0dXJlID0gbmV3IFRleHR1cmUoQmFzZVRleHR1cmUuZnJvbUltYWdlKGltYWdlVXJsLCBjcm9zc29yaWdpbiwgc2NhbGVNb2RlKSk7XG4gICAgICAgIHV0aWxzLlRleHR1cmVDYWNoZVtpbWFnZVVybF0gPSB0ZXh0dXJlO1xuICAgIH1cblxuICAgIHJldHVybiB0ZXh0dXJlO1xufTtcblxuLyoqXG4gKiBIZWxwZXIgZnVuY3Rpb24gdGhhdCBjcmVhdGVzIGEgc3ByaXRlIHRoYXQgd2lsbCBjb250YWluIGEgdGV4dHVyZSBmcm9tIHRoZSBUZXh0dXJlQ2FjaGUgYmFzZWQgb24gdGhlIGZyYW1lSWRcbiAqIFRoZSBmcmFtZSBpZHMgYXJlIGNyZWF0ZWQgd2hlbiBhIFRleHR1cmUgcGFja2VyIGZpbGUgaGFzIGJlZW4gbG9hZGVkXG4gKlxuICogQHN0YXRpY1xuICogQHBhcmFtIGZyYW1lSWQge3N0cmluZ30gVGhlIGZyYW1lIElkIG9mIHRoZSB0ZXh0dXJlIGluIHRoZSBjYWNoZVxuICogQHJldHVybiB7UElYSS5UZXh0dXJlfSBUaGUgbmV3bHkgY3JlYXRlZCB0ZXh0dXJlXG4gKi9cblRleHR1cmUuZnJvbUZyYW1lID0gZnVuY3Rpb24gKGZyYW1lSWQpXG57XG4gICAgdmFyIHRleHR1cmUgPSB1dGlscy5UZXh0dXJlQ2FjaGVbZnJhbWVJZF07XG5cbiAgICBpZiAoIXRleHR1cmUpXG4gICAge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RoZSBmcmFtZUlkIFwiJyArIGZyYW1lSWQgKyAnXCIgZG9lcyBub3QgZXhpc3QgaW4gdGhlIHRleHR1cmUgY2FjaGUnKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGV4dHVyZTtcbn07XG5cbi8qKlxuICogSGVscGVyIGZ1bmN0aW9uIHRoYXQgY3JlYXRlcyBhIG5ldyBUZXh0dXJlIGJhc2VkIG9uIHRoZSBnaXZlbiBjYW52YXMgZWxlbWVudC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAcGFyYW0gY2FudmFzIHtDYW52YXN9IFRoZSBjYW52YXMgZWxlbWVudCBzb3VyY2Ugb2YgdGhlIHRleHR1cmVcbiAqIEBwYXJhbSBzY2FsZU1vZGUge251bWJlcn0gU2VlIHtAbGluayBQSVhJLlNDQUxFX01PREVTfSBmb3IgcG9zc2libGUgdmFsdWVzXG4gKiBAcmV0dXJuIHtQSVhJLlRleHR1cmV9XG4gKi9cblRleHR1cmUuZnJvbUNhbnZhcyA9IGZ1bmN0aW9uIChjYW52YXMsIHNjYWxlTW9kZSlcbntcbiAgICByZXR1cm4gbmV3IFRleHR1cmUoQmFzZVRleHR1cmUuZnJvbUNhbnZhcyhjYW52YXMsIHNjYWxlTW9kZSkpO1xufTtcblxuLyoqXG4gKiBIZWxwZXIgZnVuY3Rpb24gdGhhdCBjcmVhdGVzIGEgbmV3IFRleHR1cmUgYmFzZWQgb24gdGhlIGdpdmVuIHZpZGVvIGVsZW1lbnQuXG4gKlxuICogQHN0YXRpY1xuICogQHBhcmFtIHZpZGVvIHtIVE1MVmlkZW9FbGVtZW50fVxuICogQHBhcmFtIHNjYWxlTW9kZSB7bnVtYmVyfSBTZWUge0BsaW5rIFBJWEkuU0NBTEVfTU9ERVN9IGZvciBwb3NzaWJsZSB2YWx1ZXNcbiAqIEByZXR1cm4ge1BJWEkuVGV4dHVyZX0gQSBUZXh0dXJlXG4gKi9cblRleHR1cmUuZnJvbVZpZGVvID0gZnVuY3Rpb24gKHZpZGVvLCBzY2FsZU1vZGUpXG57XG4gICAgaWYgKHR5cGVvZiB2aWRlbyA9PT0gJ3N0cmluZycpXG4gICAge1xuICAgICAgICByZXR1cm4gVGV4dHVyZS5mcm9tVmlkZW9VcmwodmlkZW8sIHNjYWxlTW9kZSk7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHJldHVybiBuZXcgVGV4dHVyZShWaWRlb0Jhc2VUZXh0dXJlLmZyb21WaWRlbyh2aWRlbywgc2NhbGVNb2RlKSk7XG4gICAgfVxufTtcblxuLyoqXG4gKiBIZWxwZXIgZnVuY3Rpb24gdGhhdCBjcmVhdGVzIGEgbmV3IFRleHR1cmUgYmFzZWQgb24gdGhlIHZpZGVvIHVybC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAcGFyYW0gdmlkZW9Vcmwge3N0cmluZ31cbiAqIEBwYXJhbSBzY2FsZU1vZGUge251bWJlcn0gU2VlIHtAbGluayBQSVhJLlNDQUxFX01PREVTfSBmb3IgcG9zc2libGUgdmFsdWVzXG4gKiBAcmV0dXJuIHtQSVhJLlRleHR1cmV9IEEgVGV4dHVyZVxuICovXG5UZXh0dXJlLmZyb21WaWRlb1VybCA9IGZ1bmN0aW9uICh2aWRlb1VybCwgc2NhbGVNb2RlKVxue1xuICAgIHJldHVybiBuZXcgVGV4dHVyZShWaWRlb0Jhc2VUZXh0dXJlLmZyb21VcmwodmlkZW9VcmwsIHNjYWxlTW9kZSkpO1xufTtcblxuLyoqXG4gKiBBZGRzIGEgdGV4dHVyZSB0byB0aGUgZ2xvYmFsIHV0aWxzLlRleHR1cmVDYWNoZS4gVGhpcyBjYWNoZSBpcyBzaGFyZWQgYWNyb3NzIHRoZSB3aG9sZSBQSVhJIG9iamVjdC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAcGFyYW0gdGV4dHVyZSB7UElYSS5UZXh0dXJlfSBUaGUgVGV4dHVyZSB0byBhZGQgdG8gdGhlIGNhY2hlLlxuICogQHBhcmFtIGlkIHtzdHJpbmd9IFRoZSBpZCB0aGF0IHRoZSB0ZXh0dXJlIHdpbGwgYmUgc3RvcmVkIGFnYWluc3QuXG4gKi9cblRleHR1cmUuYWRkVGV4dHVyZVRvQ2FjaGUgPSBmdW5jdGlvbiAodGV4dHVyZSwgaWQpXG57XG4gICAgdXRpbHMuVGV4dHVyZUNhY2hlW2lkXSA9IHRleHR1cmU7XG59O1xuXG4vKipcbiAqIFJlbW92ZSBhIHRleHR1cmUgZnJvbSB0aGUgZ2xvYmFsIHV0aWxzLlRleHR1cmVDYWNoZS5cbiAqXG4gKiBAc3RhdGljXG4gKiBAcGFyYW0gaWQge3N0cmluZ30gVGhlIGlkIG9mIHRoZSB0ZXh0dXJlIHRvIGJlIHJlbW92ZWRcbiAqIEByZXR1cm4ge1BJWEkuVGV4dHVyZX0gVGhlIHRleHR1cmUgdGhhdCB3YXMgcmVtb3ZlZFxuICovXG5UZXh0dXJlLnJlbW92ZVRleHR1cmVGcm9tQ2FjaGUgPSBmdW5jdGlvbiAoaWQpXG57XG4gICAgdmFyIHRleHR1cmUgPSB1dGlscy5UZXh0dXJlQ2FjaGVbaWRdO1xuXG4gICAgZGVsZXRlIHV0aWxzLlRleHR1cmVDYWNoZVtpZF07XG4gICAgZGVsZXRlIHV0aWxzLkJhc2VUZXh0dXJlQ2FjaGVbaWRdO1xuXG4gICAgcmV0dXJuIHRleHR1cmU7XG59O1xuXG4vKipcbiAqIEFuIGVtcHR5IHRleHR1cmUsIHVzZWQgb2Z0ZW4gdG8gbm90IGhhdmUgdG8gY3JlYXRlIG11bHRpcGxlIGVtcHR5IHRleHR1cmVzLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBjb25zdGFudFxuICovXG5UZXh0dXJlLkVNUFRZID0gbmV3IFRleHR1cmUobmV3IEJhc2VUZXh0dXJlKCkpO1xuIiwiXG4vKipcbiAqIEEgc3RhbmRhcmQgb2JqZWN0IHRvIHN0b3JlIHRoZSBVdnMgb2YgYSB0ZXh0dXJlXG4gKlxuICogQGNsYXNzXG4gKiBAcHJpdmF0ZVxuICogQG1lbWJlcm9mIFBJWElcbiAqL1xuZnVuY3Rpb24gVGV4dHVyZVV2cygpXG57XG4gICAgdGhpcy54MCA9IDA7XG4gICAgdGhpcy55MCA9IDA7XG5cbiAgICB0aGlzLngxID0gMTtcbiAgICB0aGlzLnkxID0gMDtcblxuICAgIHRoaXMueDIgPSAxO1xuICAgIHRoaXMueTIgPSAxO1xuXG4gICAgdGhpcy54MyA9IDA7XG4gICAgdGhpcy55MyA9IDE7XG5cbiAgICB0aGlzLnh5MF91aW50MzIgPSAwO1xuICAgIHRoaXMueHkxX3VpbnQzMiA9IDA7XG4gICAgdGhpcy54eTJfdWludDMyID0gMDtcbiAgICB0aGlzLnh5M191aW50MzIgPSAwO1xuXG4gICAgdGhpcy51dnNfdWludDMyID0gbmV3IFVpbnQzMkFycmF5KDQpXG59XG5cbm1vZHVsZS5leHBvcnRzID0gVGV4dHVyZVV2cztcblxuLyoqXG4gKiBTZXRzIHRoZSB0ZXh0dXJlIFV2cyBiYXNlZCBvbiB0aGUgZ2l2ZW4gZnJhbWUgaW5mb3JtYXRpb25cbiAqIEBwYXJhbSBmcmFtZSB7UElYSS5SZWN0YW5nbGV9XG4gKiBAcGFyYW0gYmFzZUZyYW1lIHtQSVhJLlJlY3RhbmdsZX1cbiAqIEBwYXJhbSByb3RhdGUge2Jvb2xlYW59IFdoZXRoZXIgb3Igbm90IHRoZSBmcmFtZSBpcyByb3RhdGVkXG4gKiBAcHJpdmF0ZVxuICovXG5UZXh0dXJlVXZzLnByb3RvdHlwZS5zZXQgPSBmdW5jdGlvbiAoZnJhbWUsIGJhc2VGcmFtZSwgcm90YXRlKVxue1xuICAgIHZhciB0dyA9IGJhc2VGcmFtZS53aWR0aDtcbiAgICB2YXIgdGggPSBiYXNlRnJhbWUuaGVpZ2h0O1xuXG4gICAgaWYocm90YXRlKVxuICAgIHtcbiAgICAgICAgdGhpcy54MCA9IChmcmFtZS54ICsgZnJhbWUuaGVpZ2h0KSAvIHR3O1xuICAgICAgICB0aGlzLnkwID0gZnJhbWUueSAvIHRoO1xuXG4gICAgICAgIHRoaXMueDEgPSAoZnJhbWUueCArIGZyYW1lLmhlaWdodCkgLyB0dztcbiAgICAgICAgdGhpcy55MSA9IChmcmFtZS55ICsgZnJhbWUud2lkdGgpIC8gdGg7XG5cbiAgICAgICAgdGhpcy54MiA9IGZyYW1lLnggLyB0dztcbiAgICAgICAgdGhpcy55MiA9IChmcmFtZS55ICsgZnJhbWUud2lkdGgpIC8gdGg7XG5cbiAgICAgICAgdGhpcy54MyA9IGZyYW1lLnggLyB0dztcbiAgICAgICAgdGhpcy55MyA9IGZyYW1lLnkgLyB0aDtcbiAgICB9XG4gICAgZWxzZVxuICAgIHtcblxuICAgICAgICB0aGlzLngwID0gZnJhbWUueCAvIHR3O1xuICAgICAgICB0aGlzLnkwID0gZnJhbWUueSAvIHRoO1xuXG4gICAgICAgIHRoaXMueDEgPSAoZnJhbWUueCArIGZyYW1lLndpZHRoKSAvIHR3O1xuICAgICAgICB0aGlzLnkxID0gZnJhbWUueSAvIHRoO1xuXG4gICAgICAgIHRoaXMueDIgPSAoZnJhbWUueCArIGZyYW1lLndpZHRoKSAvIHR3O1xuICAgICAgICB0aGlzLnkyID0gKGZyYW1lLnkgKyBmcmFtZS5oZWlnaHQpIC8gdGg7XG5cbiAgICAgICAgdGhpcy54MyA9IGZyYW1lLnggLyB0dztcbiAgICAgICAgdGhpcy55MyA9IChmcmFtZS55ICsgZnJhbWUuaGVpZ2h0KSAvIHRoO1xuICAgIH1cblxuICAgIHRoaXMudXZzX3VpbnQzMlswXSA9ICgoKHRoaXMueTAgKiA2NTUzNSkgJiAweEZGRkYpIDw8IDE2KSB8ICgodGhpcy54MCAqIDY1NTM1KSAmIDB4RkZGRik7XG4gICAgdGhpcy51dnNfdWludDMyWzFdID0gKCgodGhpcy55MSAqIDY1NTM1KSAmIDB4RkZGRikgPDwgMTYpIHwgKCh0aGlzLngxICogNjU1MzUpICYgMHhGRkZGKTtcbiAgICB0aGlzLnV2c191aW50MzJbMl0gPSAoKCh0aGlzLnkyICogNjU1MzUpICYgMHhGRkZGKSA8PCAxNikgfCAoKHRoaXMueDIgKiA2NTUzNSkgJiAweEZGRkYpO1xuICAgIHRoaXMudXZzX3VpbnQzMlszXSA9ICgoKHRoaXMueTMgKiA2NTUzNSkgJiAweEZGRkYpIDw8IDE2KSB8ICgodGhpcy54MyAqIDY1NTM1KSAmIDB4RkZGRik7XG59O1xuIiwidmFyIEJhc2VUZXh0dXJlID0gcmVxdWlyZSgnLi9CYXNlVGV4dHVyZScpLFxuICAgIHV0aWxzID0gcmVxdWlyZSgnLi4vdXRpbHMnKTtcblxuLyoqXG4gKiBBIHRleHR1cmUgb2YgYSBbcGxheWluZ10gVmlkZW8uXG4gKlxuICogVmlkZW8gYmFzZSB0ZXh0dXJlcyBtaW1pYyBQaXhpIEJhc2VUZXh0dXJlLmZyb20uLi4uIG1ldGhvZCBpbiB0aGVpciBjcmVhdGlvbiBwcm9jZXNzLlxuICpcbiAqIFRoaXMgY2FuIGJlIHVzZWQgaW4gc2V2ZXJhbCB3YXlzLCBzdWNoIGFzOlxuICpcbiAqIGBgYGpzXG4gKiB2YXIgdGV4dHVyZSA9IFBJWEkuVmlkZW9CYXNlVGV4dHVyZS5mcm9tVXJsKCdodHRwOi8vbXlkb21haW4uY29tL3ZpZGVvLm1wNCcpO1xuICpcbiAqIHZhciB0ZXh0dXJlID0gUElYSS5WaWRlb0Jhc2VUZXh0dXJlLmZyb21VcmwoeyBzcmM6ICdodHRwOi8vbXlkb21haW4uY29tL3ZpZGVvLm1wNCcsIG1pbWU6ICd2aWRlby9tcDQnIH0pO1xuICpcbiAqIHZhciB0ZXh0dXJlID0gUElYSS5WaWRlb0Jhc2VUZXh0dXJlLmZyb21VcmxzKFsnL3ZpZGVvLndlYm0nLCAnL3ZpZGVvLm1wNCddKTtcbiAqXG4gKiB2YXIgdGV4dHVyZSA9IFBJWEkuVmlkZW9CYXNlVGV4dHVyZS5mcm9tVXJscyhbXG4gKiAgICAgeyBzcmM6ICcvdmlkZW8ud2VibScsIG1pbWU6ICd2aWRlby93ZWJtJyB9LFxuICogICAgIHsgc3JjOiAnL3ZpZGVvLm1wNCcsIG1pbWU6ICd2aWRlby9tcDQnIH1cbiAqIF0pO1xuICogYGBgXG4gKlxuICogU2VlIHRoZSBbXCJkZXVzXCIgZGVtb10oaHR0cDovL3d3dy5nb29kYm95ZGlnaXRhbC5jb20vcGl4aWpzL2V4YW1wbGVzL2RldXMvKS5cbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQmFzZVRleHR1cmVcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gc291cmNlIHtIVE1MVmlkZW9FbGVtZW50fVxuICogQHBhcmFtIFtzY2FsZU1vZGVdIHtudW1iZXJ9IFNlZSB7QGxpbmsgUElYSS5TQ0FMRV9NT0RFU30gZm9yIHBvc3NpYmxlIHZhbHVlc1xuICovXG5mdW5jdGlvbiBWaWRlb0Jhc2VUZXh0dXJlKHNvdXJjZSwgc2NhbGVNb2RlKVxue1xuICAgIGlmICghc291cmNlKVxuICAgIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdObyB2aWRlbyBzb3VyY2UgZWxlbWVudCBzcGVjaWZpZWQuJyk7XG4gICAgfVxuXG4gICAgLy8gaG9vayBpbiBoZXJlIHRvIGNoZWNrIGlmIHZpZGVvIGlzIGFscmVhZHkgYXZhaWxhYmxlLlxuICAgIC8vIEJhc2VUZXh0dXJlIGxvb2tzIGZvciBhIHNvdXJjZS5jb21wbGV0ZSBib29sZWFuLCBwbHVzIHdpZHRoICYgaGVpZ2h0LlxuXG4gICAgaWYgKChzb3VyY2UucmVhZHlTdGF0ZSA9PT0gc291cmNlLkhBVkVfRU5PVUdIX0RBVEEgfHwgc291cmNlLnJlYWR5U3RhdGUgPT09IHNvdXJjZS5IQVZFX0ZVVFVSRV9EQVRBKSAmJiBzb3VyY2Uud2lkdGggJiYgc291cmNlLmhlaWdodClcbiAgICB7XG4gICAgICAgIHNvdXJjZS5jb21wbGV0ZSA9IHRydWU7XG4gICAgfVxuXG4gICAgQmFzZVRleHR1cmUuY2FsbCh0aGlzLCBzb3VyY2UsIHNjYWxlTW9kZSk7XG5cbiAgICAvKipcbiAgICAgKiBTaG91bGQgdGhlIGJhc2UgdGV4dHVyZSBhdXRvbWF0aWNhbGx5IHVwZGF0ZSBpdHNlbGYsIHNldCB0byB0cnVlIGJ5IGRlZmF1bHRcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICogQGRlZmF1bHQgdHJ1ZVxuICAgICAqL1xuICAgIHRoaXMuYXV0b1VwZGF0ZSA9IGZhbHNlO1xuXG4gICAgdGhpcy5fb25VcGRhdGUgPSB0aGlzLl9vblVwZGF0ZS5iaW5kKHRoaXMpO1xuICAgIHRoaXMuX29uQ2FuUGxheSA9IHRoaXMuX29uQ2FuUGxheS5iaW5kKHRoaXMpO1xuXG4gICAgaWYgKCFzb3VyY2UuY29tcGxldGUpXG4gICAge1xuICAgICAgICBzb3VyY2UuYWRkRXZlbnRMaXN0ZW5lcignY2FucGxheScsIHRoaXMuX29uQ2FuUGxheSk7XG4gICAgICAgIHNvdXJjZS5hZGRFdmVudExpc3RlbmVyKCdjYW5wbGF5dGhyb3VnaCcsIHRoaXMuX29uQ2FuUGxheSk7XG5cbiAgICAgICAgLy8gc3RhcnRlZCBwbGF5aW5nLi5cbiAgICAgICAgc291cmNlLmFkZEV2ZW50TGlzdGVuZXIoJ3BsYXknLCB0aGlzLl9vblBsYXlTdGFydC5iaW5kKHRoaXMpKTtcbiAgICAgICAgc291cmNlLmFkZEV2ZW50TGlzdGVuZXIoJ3BhdXNlJywgdGhpcy5fb25QbGF5U3RvcC5iaW5kKHRoaXMpKTtcbiAgICB9XG5cbiAgICB0aGlzLl9fbG9hZGVkID0gZmFsc2U7XG59XG5cblZpZGVvQmFzZVRleHR1cmUucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShCYXNlVGV4dHVyZS5wcm90b3R5cGUpO1xuVmlkZW9CYXNlVGV4dHVyZS5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBWaWRlb0Jhc2VUZXh0dXJlO1xubW9kdWxlLmV4cG9ydHMgPSBWaWRlb0Jhc2VUZXh0dXJlO1xuXG4vKipcbiAqIFRoZSBpbnRlcm5hbCB1cGRhdGUgbG9vcCBvZiB0aGUgdmlkZW8gYmFzZSB0ZXh0dXJlLCBvbmx5IHJ1bnMgd2hlbiBhdXRvVXBkYXRlIGlzIHNldCB0byB0cnVlXG4gKlxuICogQHByaXZhdGVcbiAqL1xuVmlkZW9CYXNlVGV4dHVyZS5wcm90b3R5cGUuX29uVXBkYXRlID0gZnVuY3Rpb24gKClcbntcbiAgICBpZiAodGhpcy5hdXRvVXBkYXRlKVxuICAgIHtcbiAgICAgICAgd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZSh0aGlzLl9vblVwZGF0ZSk7XG4gICAgICAgIHRoaXMudXBkYXRlKCk7XG4gICAgfVxufTtcblxuLyoqXG4gKiBSdW5zIHRoZSB1cGRhdGUgbG9vcCB3aGVuIHRoZSB2aWRlbyBpcyByZWFkeSB0byBwbGF5XG4gKlxuICogQHByaXZhdGVcbiAqL1xuVmlkZW9CYXNlVGV4dHVyZS5wcm90b3R5cGUuX29uUGxheVN0YXJ0ID0gZnVuY3Rpb24gKClcbntcbiAgICBpZiAoIXRoaXMuYXV0b1VwZGF0ZSlcbiAgICB7XG4gICAgICAgIHdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUodGhpcy5fb25VcGRhdGUpO1xuICAgICAgICB0aGlzLmF1dG9VcGRhdGUgPSB0cnVlO1xuICAgIH1cbn07XG5cbi8qKlxuICogRmlyZWQgd2hlbiBhIHBhdXNlIGV2ZW50IGlzIHRyaWdnZXJlZCwgc3RvcHMgdGhlIHVwZGF0ZSBsb29wXG4gKlxuICogQHByaXZhdGVcbiAqL1xuVmlkZW9CYXNlVGV4dHVyZS5wcm90b3R5cGUuX29uUGxheVN0b3AgPSBmdW5jdGlvbiAoKVxue1xuICAgIHRoaXMuYXV0b1VwZGF0ZSA9IGZhbHNlO1xufTtcblxuLyoqXG4gKiBGaXJlZCB3aGVuIHRoZSB2aWRlbyBpcyBsb2FkZWQgYW5kIHJlYWR5IHRvIHBsYXlcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5WaWRlb0Jhc2VUZXh0dXJlLnByb3RvdHlwZS5fb25DYW5QbGF5ID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLmhhc0xvYWRlZCA9IHRydWU7XG5cbiAgICBpZiAodGhpcy5zb3VyY2UpXG4gICAge1xuICAgICAgICB0aGlzLnNvdXJjZS5yZW1vdmVFdmVudExpc3RlbmVyKCdjYW5wbGF5JywgdGhpcy5fb25DYW5QbGF5KTtcbiAgICAgICAgdGhpcy5zb3VyY2UucmVtb3ZlRXZlbnRMaXN0ZW5lcignY2FucGxheXRocm91Z2gnLCB0aGlzLl9vbkNhblBsYXkpO1xuXG4gICAgICAgIHRoaXMud2lkdGggPSB0aGlzLnNvdXJjZS52aWRlb1dpZHRoO1xuICAgICAgICB0aGlzLmhlaWdodCA9IHRoaXMuc291cmNlLnZpZGVvSGVpZ2h0O1xuXG4gICAgICAgIHRoaXMuc291cmNlLnBsYXkoKTtcblxuICAgICAgICAvLyBwcmV2ZW50IG11bHRpcGxlIGxvYWRlZCBkaXNwYXRjaGVzLi5cbiAgICAgICAgaWYgKCF0aGlzLl9fbG9hZGVkKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLl9fbG9hZGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMuZW1pdCgnbG9hZGVkJywgdGhpcyk7XG4gICAgICAgIH1cbiAgICB9XG59O1xuXG4vKipcbiAqIERlc3Ryb3lzIHRoaXMgdGV4dHVyZVxuICpcbiAqL1xuVmlkZW9CYXNlVGV4dHVyZS5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uICgpXG57XG4gICAgaWYgKHRoaXMuc291cmNlICYmIHRoaXMuc291cmNlLl9waXhpSWQpXG4gICAge1xuICAgICAgICBkZWxldGUgdXRpbHMuQmFzZVRleHR1cmVDYWNoZVsgdGhpcy5zb3VyY2UuX3BpeGlJZCBdO1xuICAgICAgICBkZWxldGUgdGhpcy5zb3VyY2UuX3BpeGlJZDtcbiAgICB9XG5cbiAgICBCYXNlVGV4dHVyZS5wcm90b3R5cGUuZGVzdHJveS5jYWxsKHRoaXMpO1xufTtcblxuLyoqXG4gKiBNaW1pYyBQaXhpIEJhc2VUZXh0dXJlLmZyb20uLi4uIG1ldGhvZC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAcGFyYW0gdmlkZW8ge0hUTUxWaWRlb0VsZW1lbnR9XG4gKiBAcGFyYW0gc2NhbGVNb2RlIHtudW1iZXJ9IFNlZSB7QGxpbmsgUElYSS5TQ0FMRV9NT0RFU30gZm9yIHBvc3NpYmxlIHZhbHVlc1xuICogQHJldHVybiB7UElYSS5WaWRlb0Jhc2VUZXh0dXJlfVxuICovXG5WaWRlb0Jhc2VUZXh0dXJlLmZyb21WaWRlbyA9IGZ1bmN0aW9uICh2aWRlbywgc2NhbGVNb2RlKVxue1xuICAgIGlmICghdmlkZW8uX3BpeGlJZClcbiAgICB7XG4gICAgICAgIHZpZGVvLl9waXhpSWQgPSAndmlkZW9fJyArIHV0aWxzLnVpZCgpO1xuICAgIH1cblxuICAgIHZhciBiYXNlVGV4dHVyZSA9IHV0aWxzLkJhc2VUZXh0dXJlQ2FjaGVbdmlkZW8uX3BpeGlJZF07XG5cbiAgICBpZiAoIWJhc2VUZXh0dXJlKVxuICAgIHtcbiAgICAgICAgYmFzZVRleHR1cmUgPSBuZXcgVmlkZW9CYXNlVGV4dHVyZSh2aWRlbywgc2NhbGVNb2RlKTtcbiAgICAgICAgdXRpbHMuQmFzZVRleHR1cmVDYWNoZVsgdmlkZW8uX3BpeGlJZCBdID0gYmFzZVRleHR1cmU7XG4gICAgfVxuXG4gICAgcmV0dXJuIGJhc2VUZXh0dXJlO1xufTtcblxuLyoqXG4gKiBIZWxwZXIgZnVuY3Rpb24gdGhhdCBjcmVhdGVzIGEgbmV3IEJhc2VUZXh0dXJlIGJhc2VkIG9uIHRoZSBnaXZlbiB2aWRlbyBlbGVtZW50LlxuICogVGhpcyBCYXNlVGV4dHVyZSBjYW4gdGhlbiBiZSB1c2VkIHRvIGNyZWF0ZSBhIHRleHR1cmVcbiAqXG4gKiBAc3RhdGljXG4gKiBAcGFyYW0gdmlkZW9TcmMge3N0cmluZ3xvYmplY3R8c3RyaW5nW118b2JqZWN0W119IFRoZSBVUkwocykgZm9yIHRoZSB2aWRlby5cbiAqIEBwYXJhbSBbdmlkZW9TcmMuc3JjXSB7c3RyaW5nfSBPbmUgb2YgdGhlIHNvdXJjZSB1cmxzIGZvciB0aGUgdmlkZW9cbiAqIEBwYXJhbSBbdmlkZW9TcmMubWltZV0ge3N0cmluZ30gVGhlIG1pbWV0eXBlIG9mIHRoZSB2aWRlbyAoZS5nLiAndmlkZW8vbXA0JykuIElmIG5vdCBzcGVjaWZpZWRcbiAqICB0aGUgdXJsJ3MgZXh0ZW5zaW9uIHdpbGwgYmUgdXNlZCBhcyB0aGUgc2Vjb25kIHBhcnQgb2YgdGhlIG1pbWUgdHlwZS5cbiAqIEBwYXJhbSBzY2FsZU1vZGUge251bWJlcn0gU2VlIHtAbGluayBQSVhJLlNDQUxFX01PREVTfSBmb3IgcG9zc2libGUgdmFsdWVzXG4gKiBAcmV0dXJuIHtQSVhJLlZpZGVvQmFzZVRleHR1cmV9XG4gKi9cblZpZGVvQmFzZVRleHR1cmUuZnJvbVVybCA9IGZ1bmN0aW9uICh2aWRlb1NyYywgc2NhbGVNb2RlKVxue1xuICAgIHZhciB2aWRlbyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3ZpZGVvJyk7XG5cbiAgICAvLyBhcnJheSBvZiBvYmplY3RzIG9yIHN0cmluZ3NcbiAgICBpZiAoQXJyYXkuaXNBcnJheSh2aWRlb1NyYykpXG4gICAge1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHZpZGVvU3JjLmxlbmd0aDsgKytpKVxuICAgICAgICB7XG4gICAgICAgICAgICB2aWRlby5hcHBlbmRDaGlsZChjcmVhdGVTb3VyY2UodmlkZW9TcmNbaV0uc3JjIHx8IHZpZGVvU3JjW2ldLCB2aWRlb1NyY1tpXS5taW1lKSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLy8gc2luZ2xlIG9iamVjdCBvciBzdHJpbmdcbiAgICBlbHNlXG4gICAge1xuICAgICAgICB2aWRlby5hcHBlbmRDaGlsZChjcmVhdGVTb3VyY2UodmlkZW9TcmMuc3JjIHx8IHZpZGVvU3JjLCB2aWRlb1NyYy5taW1lKSk7XG4gICAgfVxuXG4gICAgdmlkZW8ubG9hZCgpO1xuICAgIHZpZGVvLnBsYXkoKTtcblxuICAgIHJldHVybiBWaWRlb0Jhc2VUZXh0dXJlLmZyb21WaWRlbyh2aWRlbywgc2NhbGVNb2RlKTtcbn07XG5cblZpZGVvQmFzZVRleHR1cmUuZnJvbVVybHMgPSBWaWRlb0Jhc2VUZXh0dXJlLmZyb21Vcmw7XG5cbmZ1bmN0aW9uIGNyZWF0ZVNvdXJjZShwYXRoLCB0eXBlKVxue1xuICAgIGlmICghdHlwZSlcbiAgICB7XG4gICAgICAgIHR5cGUgPSAndmlkZW8vJyArIHBhdGguc3Vic3RyKHBhdGgubGFzdEluZGV4T2YoJy4nKSArIDEpO1xuICAgIH1cblxuICAgIHZhciBzb3VyY2UgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzb3VyY2UnKTtcblxuICAgIHNvdXJjZS5zcmMgPSBwYXRoO1xuICAgIHNvdXJjZS50eXBlID0gdHlwZTtcblxuICAgIHJldHVybiBzb3VyY2U7XG59XG4iLCJ2YXIgQ09OU1QgPSByZXF1aXJlKCcuLi9jb25zdCcpLFxuICAgIEV2ZW50RW1pdHRlciA9IHJlcXVpcmUoJ2V2ZW50ZW1pdHRlcjMnKSxcbiAgICAvLyBJbnRlcm5hbCBldmVudCB1c2VkIGJ5IGNvbXBvc2VkIGVtaXR0ZXJcbiAgICBUSUNLID0gJ3RpY2snO1xuXG4vKipcbiAqIEEgVGlja2VyIGNsYXNzIHRoYXQgcnVucyBhbiB1cGRhdGUgbG9vcCB0aGF0IG90aGVyIG9iamVjdHMgbGlzdGVuIHRvLlxuICogVGhpcyBjbGFzcyBpcyBjb21wb3NlZCBhcm91bmQgYW4gRXZlbnRFbWl0dGVyIG9iamVjdCB0byBhZGQgbGlzdGVuZXJzXG4gKiBtZWFudCBmb3IgZXhlY3V0aW9uIG9uIHRoZSBuZXh0IHJlcXVlc3RlZCBhbmltYXRpb24gZnJhbWUuXG4gKiBBbmltYXRpb24gZnJhbWVzIGFyZSByZXF1ZXN0ZWQgb25seSB3aGVuIG5lY2Vzc2FyeSxcbiAqIGUuZy4gV2hlbiB0aGUgdGlja2VyIGlzIHN0YXJ0ZWQgYW5kIHRoZSBlbWl0dGVyIGhhcyBsaXN0ZW5lcnMuXG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSS50aWNrZXJcbiAqL1xuZnVuY3Rpb24gVGlja2VyKClcbntcbiAgICB2YXIgX3RoaXMgPSB0aGlzO1xuXG4gICAgLyoqXG4gICAgICogSW50ZXJuYWwgdGljayBtZXRob2QgYm91bmQgdG8gdGlja2VyIGluc3RhbmNlLlxuICAgICAqIFRoaXMgaXMgYmVjYXVzZSBpbiBlYXJseSAyMDE1LCBGdW5jdGlvbi5iaW5kXG4gICAgICogaXMgc3RpbGwgNjAlIHNsb3dlciBpbiBoaWdoIHBlcmZvcm1hbmNlIHNjZW5hcmlvcy5cbiAgICAgKiBBbHNvIHNlcGFyYXRpbmcgZnJhbWUgcmVxdWVzdHMgZnJvbSB1cGRhdGUgbWV0aG9kXG4gICAgICogc28gbGlzdGVuZXJzIG1heSBiZSBjYWxsZWQgYXQgYW55IHRpbWUgYW5kIHdpdGhcbiAgICAgKiBhbnkgYW5pbWF0aW9uIEFQSSwganVzdCBpbnZva2UgdGlja2VyLnVwZGF0ZSh0aW1lKS5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fdGljayA9IGZ1bmN0aW9uIF90aWNrKHRpbWUpIHtcblxuICAgICAgICBfdGhpcy5fcmVxdWVzdElkID0gbnVsbDtcblxuICAgICAgICBpZiAoX3RoaXMuc3RhcnRlZClcbiAgICAgICAge1xuICAgICAgICAgICAgLy8gSW52b2tlIGxpc3RlbmVycyBub3dcbiAgICAgICAgICAgIF90aGlzLnVwZGF0ZSh0aW1lKTtcbiAgICAgICAgICAgIC8vIExpc3RlbmVyIHNpZGUgZWZmZWN0cyBtYXkgaGF2ZSBtb2RpZmllZCB0aWNrZXIgc3RhdGUuXG4gICAgICAgICAgICBpZiAoX3RoaXMuc3RhcnRlZCAmJiBfdGhpcy5fcmVxdWVzdElkID09PSBudWxsICYmIF90aGlzLl9lbWl0dGVyLmxpc3RlbmVycyhUSUNLLCB0cnVlKSlcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBfdGhpcy5fcmVxdWVzdElkID0gcmVxdWVzdEFuaW1hdGlvbkZyYW1lKF90aGlzLl90aWNrKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH07XG5cbiAgICAvKipcbiAgICAgKiBJbnRlcm5hbCBlbWl0dGVyIHVzZWQgdG8gZmlyZSAndGljaycgZXZlbnRcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX2VtaXR0ZXIgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgICAvKipcbiAgICAgKiBJbnRlcm5hbCBjdXJyZW50IGZyYW1lIHJlcXVlc3QgSURcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX3JlcXVlc3RJZCA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBJbnRlcm5hbCB2YWx1ZSBtYW5hZ2VkIGJ5IG1pbkZQUyBwcm9wZXJ0eSBzZXR0ZXIgYW5kIGdldHRlci5cbiAgICAgKiBUaGlzIGlzIHRoZSBtYXhpbXVtIGFsbG93ZWQgbWlsbGlzZWNvbmRzIGJldHdlZW4gdXBkYXRlcy5cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX21heEVsYXBzZWRNUyA9IDEwMDtcblxuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgb3Igbm90IHRoaXMgdGlja2VyIHNob3VsZCBpbnZva2UgdGhlIG1ldGhvZFxuICAgICAqIHtAbGluayBQSVhJLnRpY2tlci5UaWNrZXIjc3RhcnR9IGF1dG9tYXRpY2FsbHlcbiAgICAgKiB3aGVuIGEgbGlzdGVuZXIgaXMgYWRkZWQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqIEBkZWZhdWx0IGZhbHNlXG4gICAgICovXG4gICAgdGhpcy5hdXRvU3RhcnQgPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIFNjYWxhciB0aW1lIHZhbHVlIGZyb20gbGFzdCBmcmFtZSB0byB0aGlzIGZyYW1lLlxuICAgICAqIFRoaXMgdmFsdWUgaXMgY2FwcGVkIGJ5IHNldHRpbmcge0BsaW5rIFBJWEkudGlja2VyLlRpY2tlciNtaW5GUFN9XG4gICAgICogYW5kIGlzIHNjYWxlZCB3aXRoIHtAbGluayBQSVhJLnRpY2tlci5UaWNrZXIjc3BlZWR9LlxuICAgICAqICoqTm90ZToqKiBUaGUgY2FwIG1heSBiZSBleGNlZWRlZCBieSBzY2FsaW5nLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDFcbiAgICAgKi9cbiAgICB0aGlzLmRlbHRhVGltZSA9IDE7XG5cbiAgICAvKipcbiAgICAgKiBUaW1lIGVsYXBzZWQgaW4gbWlsbGlzZWNvbmRzIGZyb20gbGFzdCBmcmFtZSB0byB0aGlzIGZyYW1lLlxuICAgICAqIE9wcG9zZWQgdG8gd2hhdCB0aGUgc2NhbGFyIHtAbGluayBQSVhJLnRpY2tlci5UaWNrZXIjZGVsdGFUaW1lfVxuICAgICAqIGlzIGJhc2VkLCB0aGlzIHZhbHVlIGlzIG5laXRoZXIgY2FwcGVkIG5vciBzY2FsZWQuXG4gICAgICogSWYgdGhlIHBsYXRmb3JtIHN1cHBvcnRzIERPTUhpZ2hSZXNUaW1lU3RhbXAsXG4gICAgICogdGhpcyB2YWx1ZSB3aWxsIGhhdmUgYSBwcmVjaXNpb24gb2YgMSDCtXMuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtET01IaWdoUmVzVGltZVN0YW1wfG51bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAxIC8gVEFSR0VUX0ZQTVNcbiAgICAgKi9cbiAgICB0aGlzLmVsYXBzZWRNUyA9IDEgLyBDT05TVC5UQVJHRVRfRlBNUzsgLy8gZGVmYXVsdCB0byB0YXJnZXQgZnJhbWUgdGltZVxuXG4gICAgLyoqXG4gICAgICogVGhlIGxhc3QgdGltZSB7QGxpbmsgUElYSS50aWNrZXIuVGlja2VyI3VwZGF0ZX0gd2FzIGludm9rZWQuXG4gICAgICogVGhpcyB2YWx1ZSBpcyBhbHNvIHJlc2V0IGludGVybmFsbHkgb3V0c2lkZSBvZiBpbnZva2luZ1xuICAgICAqIHVwZGF0ZSwgYnV0IG9ubHkgd2hlbiBhIG5ldyBhbmltYXRpb24gZnJhbWUgaXMgcmVxdWVzdGVkLlxuICAgICAqIElmIHRoZSBwbGF0Zm9ybSBzdXBwb3J0cyBET01IaWdoUmVzVGltZVN0YW1wLFxuICAgICAqIHRoaXMgdmFsdWUgd2lsbCBoYXZlIGEgcHJlY2lzaW9uIG9mIDEgwrVzLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7RE9NSGlnaFJlc1RpbWVTdGFtcHxudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMFxuICAgICAqL1xuICAgIHRoaXMubGFzdFRpbWUgPSAwO1xuXG4gICAgLyoqXG4gICAgICogRmFjdG9yIG9mIGN1cnJlbnQge0BsaW5rIFBJWEkudGlja2VyLlRpY2tlciNkZWx0YVRpbWV9LlxuICAgICAqIEBleGFtcGxlXG4gICAgICogLy8gU2NhbGVzIHRpY2tlci5kZWx0YVRpbWUgdG8gd2hhdCB3b3VsZCBiZVxuICAgICAqIC8vIHRoZSBlcXVpdmFsZW50IG9mIGFwcHJveGltYXRlbHkgMTIwIEZQU1xuICAgICAqIHRpY2tlci5zcGVlZCA9IDI7XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMVxuICAgICAqL1xuICAgIHRoaXMuc3BlZWQgPSAxO1xuXG4gICAgLyoqXG4gICAgICogV2hldGhlciBvciBub3QgdGhpcyB0aWNrZXIgaGFzIGJlZW4gc3RhcnRlZC5cbiAgICAgKiBgdHJ1ZWAgaWYge0BsaW5rIFBJWEkudGlja2VyLlRpY2tlciNzdGFydH0gaGFzIGJlZW4gY2FsbGVkLlxuICAgICAqIGBmYWxzZWAgaWYge0BsaW5rIFBJWEkudGlja2VyLlRpY2tlciNzdG9wfSBoYXMgYmVlbiBjYWxsZWQuXG4gICAgICogV2hpbGUgYGZhbHNlYCwgdGhpcyB2YWx1ZSBtYXkgY2hhbmdlIHRvIGB0cnVlYCBpbiB0aGVcbiAgICAgKiBldmVudCBvZiB7QGxpbmsgUElYSS50aWNrZXIuVGlja2VyI2F1dG9TdGFydH0gYmVpbmcgYHRydWVgXG4gICAgICogYW5kIGEgbGlzdGVuZXIgaXMgYWRkZWQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqIEBkZWZhdWx0IGZhbHNlXG4gICAgICovXG4gICAgdGhpcy5zdGFydGVkID0gZmFsc2U7XG59XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKFRpY2tlci5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBUaGUgZnJhbWVzIHBlciBzZWNvbmQgYXQgd2hpY2ggdGhpcyB0aWNrZXIgaXMgcnVubmluZy5cbiAgICAgKiBUaGUgZGVmYXVsdCBpcyBhcHByb3hpbWF0ZWx5IDYwIGluIG1vc3QgbW9kZXJuIGJyb3dzZXJzLlxuICAgICAqICoqTm90ZToqKiBUaGlzIGRvZXMgbm90IGZhY3RvciBpbiB0aGUgdmFsdWUgb2ZcbiAgICAgKiB7QGxpbmsgUElYSS50aWNrZXIuVGlja2VyI3NwZWVkfSwgd2hpY2ggaXMgc3BlY2lmaWNcbiAgICAgKiB0byBzY2FsaW5nIHtAbGluayBQSVhJLnRpY2tlci5UaWNrZXIjZGVsdGFUaW1lfS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXJcbiAgICAgKiBAbWVtYmVyb2YgUElYSS50aWNrZXIuVGlja2VyI1xuICAgICAqIEByZWFkb25seVxuICAgICAqL1xuICAgIEZQUzoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIDEwMDAgLyB0aGlzLmVsYXBzZWRNUztcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBNYW5hZ2VzIHRoZSBtYXhpbXVtIGFtb3VudCBvZiBtaWxsaXNlY29uZHMgYWxsb3dlZCB0b1xuICAgICAqIGVsYXBzZSBiZXR3ZWVuIGludm9raW5nIHtAbGluayBQSVhJLnRpY2tlci5UaWNrZXIjdXBkYXRlfS5cbiAgICAgKiBUaGlzIHZhbHVlIGlzIHVzZWQgdG8gY2FwIHtAbGluayBQSVhJLnRpY2tlci5UaWNrZXIjZGVsdGFUaW1lfSxcbiAgICAgKiBidXQgZG9lcyBub3QgZWZmZWN0IHRoZSBtZWFzdXJlZCB2YWx1ZSBvZiB7QGxpbmsgUElYSS50aWNrZXIuVGlja2VyI0ZQU30uXG4gICAgICogV2hlbiBzZXR0aW5nIHRoaXMgcHJvcGVydHkgaXQgaXMgY2xhbXBlZCB0byBhIHZhbHVlIGJldHdlZW5cbiAgICAgKiBgMGAgYW5kIGBQSVhJLlRBUkdFVF9GUE1TICogMTAwMGAuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyXG4gICAgICogQG1lbWJlcm9mIFBJWEkudGlja2VyLlRpY2tlciNcbiAgICAgKiBAZGVmYXVsdCAxMFxuICAgICAqL1xuICAgIG1pbkZQUzoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIDEwMDAgLyB0aGlzLl9tYXhFbGFwc2VkTVM7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24oZnBzKVxuICAgICAgICB7XG4gICAgICAgICAgICAvLyBDbGFtcDogMCB0byBUQVJHRVRfRlBNU1xuICAgICAgICAgICAgdmFyIG1pbkZQTVMgPSBNYXRoLm1pbihNYXRoLm1heCgwLCBmcHMpIC8gMTAwMCwgQ09OU1QuVEFSR0VUX0ZQTVMpO1xuICAgICAgICAgICAgdGhpcy5fbWF4RWxhcHNlZE1TID0gMSAvIG1pbkZQTVM7XG4gICAgICAgIH1cbiAgICB9XG59KTtcblxuLyoqXG4gKiBDb25kaXRpb25hbGx5IHJlcXVlc3RzIGEgbmV3IGFuaW1hdGlvbiBmcmFtZS5cbiAqIElmIGEgZnJhbWUgaGFzIG5vdCBhbHJlYWR5IGJlZW4gcmVxdWVzdGVkLCBhbmQgaWYgdGhlIGludGVybmFsXG4gKiBlbWl0dGVyIGhhcyBsaXN0ZW5lcnMsIGEgbmV3IGZyYW1lIGlzIHJlcXVlc3RlZC5cbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5UaWNrZXIucHJvdG90eXBlLl9yZXF1ZXN0SWZOZWVkZWQgPSBmdW5jdGlvbiBfcmVxdWVzdElmTmVlZGVkKClcbntcbiAgICBpZiAodGhpcy5fcmVxdWVzdElkID09PSBudWxsICYmIHRoaXMuX2VtaXR0ZXIubGlzdGVuZXJzKFRJQ0ssIHRydWUpKVxuICAgIHtcbiAgICAgICAgLy8gZW5zdXJlIGNhbGxiYWNrcyBnZXQgY29ycmVjdCBkZWx0YVxuICAgICAgICB0aGlzLmxhc3RUaW1lID0gcGVyZm9ybWFuY2Uubm93KCk7XG4gICAgICAgIHRoaXMuX3JlcXVlc3RJZCA9IHJlcXVlc3RBbmltYXRpb25GcmFtZSh0aGlzLl90aWNrKTtcbiAgICB9XG59O1xuXG4vKipcbiAqIENvbmRpdGlvbmFsbHkgY2FuY2VscyBhIHBlbmRpbmcgYW5pbWF0aW9uIGZyYW1lLlxuICpcbiAqIEBwcml2YXRlXG4gKi9cblRpY2tlci5wcm90b3R5cGUuX2NhbmNlbElmTmVlZGVkID0gZnVuY3Rpb24gX2NhbmNlbElmTmVlZGVkKClcbntcbiAgICBpZiAodGhpcy5fcmVxdWVzdElkICE9PSBudWxsKVxuICAgIHtcbiAgICAgICAgY2FuY2VsQW5pbWF0aW9uRnJhbWUodGhpcy5fcmVxdWVzdElkKTtcbiAgICAgICAgdGhpcy5fcmVxdWVzdElkID0gbnVsbDtcbiAgICB9XG59O1xuXG4vKipcbiAqIENvbmRpdGlvbmFsbHkgcmVxdWVzdHMgYSBuZXcgYW5pbWF0aW9uIGZyYW1lLlxuICogSWYgdGhlIHRpY2tlciBoYXMgYmVlbiBzdGFydGVkIGl0IGNoZWNrcyBpZiBhIGZyYW1lIGhhcyBub3QgYWxyZWFkeVxuICogYmVlbiByZXF1ZXN0ZWQsIGFuZCBpZiB0aGUgaW50ZXJuYWwgZW1pdHRlciBoYXMgbGlzdGVuZXJzLiBJZiB0aGVzZVxuICogY29uZGl0aW9ucyBhcmUgbWV0LCBhIG5ldyBmcmFtZSBpcyByZXF1ZXN0ZWQuIElmIHRoZSB0aWNrZXIgaGFzIG5vdFxuICogYmVlbiBzdGFydGVkLCBidXQgYXV0b1N0YXJ0IGlzIGB0cnVlYCwgdGhlbiB0aGUgdGlja2VyIHN0YXJ0cyBub3csXG4gKiBhbmQgY29udGludWVzIHdpdGggdGhlIHByZXZpb3VzIGNvbmRpdGlvbnMgdG8gcmVxdWVzdCBhIG5ldyBmcmFtZS5cbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5UaWNrZXIucHJvdG90eXBlLl9zdGFydElmUG9zc2libGUgPSBmdW5jdGlvbiBfc3RhcnRJZlBvc3NpYmxlKClcbntcbiAgICBpZiAodGhpcy5zdGFydGVkKVxuICAgIHtcbiAgICAgICAgdGhpcy5fcmVxdWVzdElmTmVlZGVkKCk7XG4gICAgfVxuICAgIGVsc2UgaWYgKHRoaXMuYXV0b1N0YXJ0KVxuICAgIHtcbiAgICAgICAgdGhpcy5zdGFydCgpO1xuICAgIH1cbn07XG5cbi8qKlxuICogQ2FsbHMge0BsaW5rIG1vZHVsZTpldmVudGVtaXR0ZXIzLkV2ZW50RW1pdHRlciNvbn0gaW50ZXJuYWxseSBmb3IgdGhlXG4gKiBpbnRlcm5hbCAndGljaycgZXZlbnQuIEl0IGNoZWNrcyBpZiB0aGUgZW1pdHRlciBoYXMgbGlzdGVuZXJzLFxuICogYW5kIGlmIHNvIGl0IHJlcXVlc3RzIGEgbmV3IGFuaW1hdGlvbiBmcmFtZSBhdCB0aGlzIHBvaW50LlxuICpcbiAqIEBwYXJhbSBmbiB7RnVuY3Rpb259IFRoZSBsaXN0ZW5lciBmdW5jdGlvbiB0byBiZSBhZGRlZCBmb3IgdXBkYXRlc1xuICogQHBhcmFtIFtjb250ZXh0XSB7RnVuY3Rpb259IFRoZSBsaXN0ZW5lciBjb250ZXh0XG4gKiBAcmV0dXJucyB7UElYSS50aWNrZXIuVGlja2VyfSB0aGlzXG4gKi9cblRpY2tlci5wcm90b3R5cGUuYWRkID0gZnVuY3Rpb24gYWRkKGZuLCBjb250ZXh0KVxue1xuICAgIHRoaXMuX2VtaXR0ZXIub24oVElDSywgZm4sIGNvbnRleHQpO1xuXG4gICAgdGhpcy5fc3RhcnRJZlBvc3NpYmxlKCk7XG5cbiAgICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogQ2FsbHMge0BsaW5rIG1vZHVsZTpldmVudGVtaXR0ZXIzLkV2ZW50RW1pdHRlciNvbmNlfSBpbnRlcm5hbGx5IGZvciB0aGVcbiAqIGludGVybmFsICd0aWNrJyBldmVudC4gSXQgY2hlY2tzIGlmIHRoZSBlbWl0dGVyIGhhcyBsaXN0ZW5lcnMsXG4gKiBhbmQgaWYgc28gaXQgcmVxdWVzdHMgYSBuZXcgYW5pbWF0aW9uIGZyYW1lIGF0IHRoaXMgcG9pbnQuXG4gKlxuICogQHBhcmFtIGZuIHtGdW5jdGlvbn0gVGhlIGxpc3RlbmVyIGZ1bmN0aW9uIHRvIGJlIGFkZGVkIGZvciBvbmUgdXBkYXRlXG4gKiBAcGFyYW0gW2NvbnRleHRdIHtGdW5jdGlvbn0gVGhlIGxpc3RlbmVyIGNvbnRleHRcbiAqIEByZXR1cm5zIHtQSVhJLnRpY2tlci5UaWNrZXJ9IHRoaXNcbiAqL1xuVGlja2VyLnByb3RvdHlwZS5hZGRPbmNlID0gZnVuY3Rpb24gYWRkT25jZShmbiwgY29udGV4dClcbntcbiAgICB0aGlzLl9lbWl0dGVyLm9uY2UoVElDSywgZm4sIGNvbnRleHQpO1xuXG4gICAgdGhpcy5fc3RhcnRJZlBvc3NpYmxlKCk7XG5cbiAgICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogQ2FsbHMge0BsaW5rIG1vZHVsZTpldmVudGVtaXR0ZXIzLkV2ZW50RW1pdHRlciNvZmZ9IGludGVybmFsbHkgZm9yICd0aWNrJyBldmVudC5cbiAqIEl0IGNoZWNrcyBpZiB0aGUgZW1pdHRlciBoYXMgbGlzdGVuZXJzIGZvciAndGljaycgZXZlbnQuXG4gKiBJZiBpdCBkb2VzLCB0aGVuIGl0IGNhbmNlbHMgdGhlIGFuaW1hdGlvbiBmcmFtZS5cbiAqXG4gKiBAcGFyYW0gW2ZuXSB7RnVuY3Rpb259IFRoZSBsaXN0ZW5lciBmdW5jdGlvbiB0byBiZSByZW1vdmVkXG4gKiBAcGFyYW0gW2NvbnRleHRdIHtGdW5jdGlvbn0gVGhlIGxpc3RlbmVyIGNvbnRleHQgdG8gYmUgcmVtb3ZlZFxuICogQHJldHVybnMge1BJWEkudGlja2VyLlRpY2tlcn0gdGhpc1xuICovXG5UaWNrZXIucHJvdG90eXBlLnJlbW92ZSA9IGZ1bmN0aW9uIHJlbW92ZShmbiwgY29udGV4dClcbntcbiAgICB0aGlzLl9lbWl0dGVyLm9mZihUSUNLLCBmbiwgY29udGV4dCk7XG5cbiAgICBpZiAoIXRoaXMuX2VtaXR0ZXIubGlzdGVuZXJzKFRJQ0ssIHRydWUpKVxuICAgIHtcbiAgICAgICAgdGhpcy5fY2FuY2VsSWZOZWVkZWQoKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogU3RhcnRzIHRoZSB0aWNrZXIuIElmIHRoZSB0aWNrZXIgaGFzIGxpc3RlbmVyc1xuICogYSBuZXcgYW5pbWF0aW9uIGZyYW1lIGlzIHJlcXVlc3RlZCBhdCB0aGlzIHBvaW50LlxuICovXG5UaWNrZXIucHJvdG90eXBlLnN0YXJ0ID0gZnVuY3Rpb24gc3RhcnQoKVxue1xuICAgIGlmICghdGhpcy5zdGFydGVkKVxuICAgIHtcbiAgICAgICAgdGhpcy5zdGFydGVkID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5fcmVxdWVzdElmTmVlZGVkKCk7XG4gICAgfVxufTtcblxuLyoqXG4gKiBTdG9wcyB0aGUgdGlja2VyLiBJZiB0aGUgdGlja2VyIGhhcyByZXF1ZXN0ZWRcbiAqIGFuIGFuaW1hdGlvbiBmcmFtZSBpdCBpcyBjYW5jZWxlZCBhdCB0aGlzIHBvaW50LlxuICovXG5UaWNrZXIucHJvdG90eXBlLnN0b3AgPSBmdW5jdGlvbiBzdG9wKClcbntcbiAgICBpZiAodGhpcy5zdGFydGVkKVxuICAgIHtcbiAgICAgICAgdGhpcy5zdGFydGVkID0gZmFsc2U7XG4gICAgICAgIHRoaXMuX2NhbmNlbElmTmVlZGVkKCk7XG4gICAgfVxufTtcblxuLyoqXG4gKiBUcmlnZ2VycyBhbiB1cGRhdGUuIEFuIHVwZGF0ZSBlbnRhaWxzIHNldHRpbmcgdGhlXG4gKiBjdXJyZW50IHtAbGluayBQSVhJLnRpY2tlci5UaWNrZXIjZWxhcHNlZE1TfSxcbiAqIHRoZSBjdXJyZW50IHtAbGluayBQSVhJLnRpY2tlci5UaWNrZXIjZGVsdGFUaW1lfSxcbiAqIGludm9raW5nIGFsbCBsaXN0ZW5lcnMgd2l0aCBjdXJyZW50IGRlbHRhVGltZSxcbiAqIGFuZCB0aGVuIGZpbmFsbHkgc2V0dGluZyB7QGxpbmsgUElYSS50aWNrZXIuVGlja2VyI2xhc3RUaW1lfVxuICogd2l0aCB0aGUgdmFsdWUgb2YgY3VycmVudFRpbWUgdGhhdCB3YXMgcHJvdmlkZWQuXG4gKiBUaGlzIG1ldGhvZCB3aWxsIGJlIGNhbGxlZCBhdXRvbWF0aWNhbGx5IGJ5IGFuaW1hdGlvblxuICogZnJhbWUgY2FsbGJhY2tzIGlmIHRoZSB0aWNrZXIgaW5zdGFuY2UgaGFzIGJlZW4gc3RhcnRlZFxuICogYW5kIGxpc3RlbmVycyBhcmUgYWRkZWQuXG4gKlxuICogQHBhcmFtIFtjdXJyZW50VGltZT1wZXJmb3JtYW5jZS5ub3coKV0ge0RPTUhpZ2hSZXNUaW1lU3RhbXB8bnVtYmVyfSB0aGUgY3VycmVudCB0aW1lIG9mIGV4ZWN1dGlvblxuICovXG5UaWNrZXIucHJvdG90eXBlLnVwZGF0ZSA9IGZ1bmN0aW9uIHVwZGF0ZShjdXJyZW50VGltZSlcbntcbiAgICB2YXIgZWxhcHNlZE1TO1xuXG4gICAgLy8gQWxsb3cgY2FsbGluZyB1cGRhdGUgZGlyZWN0bHkgd2l0aCBkZWZhdWx0IGN1cnJlbnRUaW1lLlxuICAgIGN1cnJlbnRUaW1lID0gY3VycmVudFRpbWUgfHwgcGVyZm9ybWFuY2Uubm93KCk7XG4gICAgLy8gU2F2ZSB1bmNhcHBlZCBlbGFwc2VkTVMgZm9yIG1lYXN1cmVtZW50XG4gICAgZWxhcHNlZE1TID0gdGhpcy5lbGFwc2VkTVMgPSBjdXJyZW50VGltZSAtIHRoaXMubGFzdFRpbWU7XG5cbiAgICAvLyBjYXAgdGhlIG1pbGxpc2Vjb25kcyBlbGFwc2VkIHVzZWQgZm9yIGRlbHRhVGltZVxuICAgIGlmIChlbGFwc2VkTVMgPiB0aGlzLl9tYXhFbGFwc2VkTVMpXG4gICAge1xuICAgICAgICBlbGFwc2VkTVMgPSB0aGlzLl9tYXhFbGFwc2VkTVM7XG4gICAgfVxuXG4gICAgdGhpcy5kZWx0YVRpbWUgPSBlbGFwc2VkTVMgKiBDT05TVC5UQVJHRVRfRlBNUyAqIHRoaXMuc3BlZWQ7XG5cbiAgICAvLyBJbnZva2UgbGlzdGVuZXJzIGFkZGVkIHRvIGludGVybmFsIGVtaXR0ZXJcbiAgICB0aGlzLl9lbWl0dGVyLmVtaXQoVElDSywgdGhpcy5kZWx0YVRpbWUpO1xuXG4gICAgdGhpcy5sYXN0VGltZSA9IGN1cnJlbnRUaW1lO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBUaWNrZXI7XG4iLCJ2YXIgVGlja2VyID0gcmVxdWlyZSgnLi9UaWNrZXInKTtcblxuLyoqXG4gKiBUaGUgc2hhcmVkIHRpY2tlciBpbnN0YW5jZSB1c2VkIGJ5IHtAbGluayBQSVhJLmV4dHJhcy5Nb3ZpZUNsaXB9LlxuICogYW5kIGJ5IHtAbGluayBQSVhJLmludGVyYWN0aW9uLkludGVyYWN0aW9uTWFuYWdlcn0uXG4gKiBUaGUgcHJvcGVydHkge0BsaW5rIFBJWEkudGlja2VyLlRpY2tlciNhdXRvU3RhcnR9IGlzIHNldCB0byBgdHJ1ZWBcbiAqIGZvciB0aGlzIGluc3RhbmNlLiBQbGVhc2UgZm9sbG93IHRoZSBleGFtcGxlcyBmb3IgdXNhZ2UsIGluY2x1ZGluZ1xuICogaG93IHRvIG9wdC1vdXQgb2YgYXV0by1zdGFydGluZyB0aGUgc2hhcmVkIHRpY2tlci5cbiAqXG4gKiBAZXhhbXBsZVxuICogdmFyIHRpY2tlciA9IFBJWEkudGlja2VyLnNoYXJlZDtcbiAqIC8vIFNldCB0aGlzIHRvIHByZXZlbnQgc3RhcnRpbmcgdGhpcyB0aWNrZXIgd2hlbiBsaXN0ZW5lcnMgYXJlIGFkZGVkLlxuICogLy8gQnkgZGVmYXVsdCB0aGlzIGlzIHRydWUgb25seSBmb3IgdGhlIFBJWEkudGlja2VyLnNoYXJlZCBpbnN0YW5jZS5cbiAqIHRpY2tlci5hdXRvU3RhcnQgPSBmYWxzZTtcbiAqIC8vIEZZSSwgY2FsbCB0aGlzIHRvIGVuc3VyZSB0aGUgdGlja2VyIGlzIHN0b3BwZWQuIEl0IHNob3VsZCBiZSBzdG9wcGVkXG4gKiAvLyBpZiB5b3UgaGF2ZSBub3QgYXR0ZW1wdGVkIHRvIHJlbmRlciBhbnl0aGluZyB5ZXQuXG4gKiB0aWNrZXIuc3RvcCgpO1xuICogLy8gQ2FsbCB0aGlzIHdoZW4geW91IGFyZSByZWFkeSBmb3IgYSBydW5uaW5nIHNoYXJlZCB0aWNrZXIuXG4gKiB0aWNrZXIuc3RhcnQoKTtcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gWW91IG1heSB1c2UgdGhlIHNoYXJlZCB0aWNrZXIgdG8gcmVuZGVyLi4uXG4gKiB2YXIgcmVuZGVyZXIgPSBQSVhJLmF1dG9EZXRlY3RSZW5kZXJlcig4MDAsIDYwMCk7XG4gKiB2YXIgc3RhZ2UgPSBuZXcgUElYSS5Db250YWluZXIoKTtcbiAqIHZhciBpbnRlcmFjdGlvbk1hbmFnZXIgPSBQSVhJLmludGVyYWN0aW9uLkludGVyYWN0aW9uTWFuYWdlcihyZW5kZXJlcik7XG4gKiBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKHJlbmRlcmVyLnZpZXcpO1xuICogdGlja2VyLmFkZChmdW5jdGlvbiAodGltZSkge1xuICogICAgIHJlbmRlcmVyLnJlbmRlcihzdGFnZSk7XG4gKiB9KTtcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gT3IgeW91IGNhbiBqdXN0IHVwZGF0ZSBpdCBtYW51YWxseS5cbiAqIHRpY2tlci5hdXRvU3RhcnQgPSBmYWxzZTtcbiAqIHRpY2tlci5zdG9wKCk7XG4gKiBmdW5jdGlvbiBhbmltYXRlKHRpbWUpIHtcbiAqICAgICB0aWNrZXIudXBkYXRlKHRpbWUpO1xuICogICAgIHJlbmRlcmVyLnJlbmRlcihzdGFnZSk7XG4gKiAgICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKGFuaW1hdGUpO1xuICogfVxuICogYW5pbWF0ZShwZXJmb3JtYW5jZS5ub3coKSk7XG4gKlxuICogQHR5cGUge1BJWEkudGlja2VyLlRpY2tlcn1cbiAqIEBtZW1iZXJvZiBQSVhJLnRpY2tlclxuICovXG52YXIgc2hhcmVkID0gbmV3IFRpY2tlcigpO1xuc2hhcmVkLmF1dG9TdGFydCA9IHRydWU7XG5cbi8qKlxuICogQG5hbWVzcGFjZSBQSVhJLnRpY2tlclxuICovXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgICBzaGFyZWQ6IHNoYXJlZCxcbiAgICBUaWNrZXI6IFRpY2tlclxufTtcbiIsIi8qKlxuICogR2VuZXJpYyBNYXNrIFN0YWNrIGRhdGEgc3RydWN0dXJlXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKi9cblxudmFyIEdMX01BUCA9IHt9O1xuXG5cbnZhciBjcmVhdGVJbmRpY2VzRm9yUXVhZHMgPSBmdW5jdGlvbiAoc2l6ZSlcbntcbiAgICAvLyB0aGUgdG90YWwgbnVtYmVyIG9mIGluZGljZXMgaW4gb3VyIGFycmF5LCB0aGVyZSBhcmUgNiBwb2ludHMgcGVyIHF1YWQuXG4gICBcbiAgICB2YXIgdG90YWxJbmRpY2VzID0gc2l6ZSAqIDY7XG5cbiAgICB2YXIgaW5kaWNlcyA9IG5ldyBVaW50MTZBcnJheSh0b3RhbEluZGljZXMpO1xuXG5cdC8vIGZpbGwgdGhlIGluZGljZXMgd2l0aCB0aGUgcXVhZHMgdG8gZHJhd1xuICAgIGZvciAodmFyIGk9MCwgaj0wOyBpIDwgdG90YWxJbmRpY2VzOyBpICs9IDYsIGogKz0gNClcbiAgICB7XG4gICAgICAgIGluZGljZXNbaSArIDBdID0gaiArIDA7XG4gICAgICAgIGluZGljZXNbaSArIDFdID0gaiArIDE7XG4gICAgICAgIGluZGljZXNbaSArIDJdID0gaiArIDI7XG4gICAgICAgIGluZGljZXNbaSArIDNdID0gaiArIDA7XG4gICAgICAgIGluZGljZXNbaSArIDRdID0gaiArIDI7XG4gICAgICAgIGluZGljZXNbaSArIDVdID0gaiArIDM7XG4gICAgfVxuXG4gICAgcmV0dXJuIGluZGljZXM7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGNyZWF0ZUluZGljZXNGb3JRdWFkczsiLCJ2YXIgQ09OU1QgPSByZXF1aXJlKCcuLi9jb25zdCcpO1xuXG4vKipcbiAqIEBuYW1lc3BhY2UgUElYSS51dGlsc1xuICovXG52YXIgdXRpbHMgPSBtb2R1bGUuZXhwb3J0cyA9IHtcbiAgICBfdWlkOiAwLFxuICAgIF9zYWlkSGVsbG86IGZhbHNlLFxuXG4gICAgRXZlbnRFbWl0dGVyOiAgIHJlcXVpcmUoJ2V2ZW50ZW1pdHRlcjMnKSxcbiAgICBwbHVnaW5UYXJnZXQ6ICAgcmVxdWlyZSgnLi9wbHVnaW5UYXJnZXQnKSxcbiAgICBhc3luYzogICAgICAgICAgcmVxdWlyZSgnYXN5bmMnKSxcblxuICAgIC8qKlxuICAgICAqIEdldHMgdGhlIG5leHQgdW5pcXVlIGlkZW50aWZpZXJcbiAgICAgKlxuICAgICAqIEByZXR1cm4ge251bWJlcn0gVGhlIG5leHQgdW5pcXVlIGlkZW50aWZpZXIgdG8gdXNlLlxuICAgICAqL1xuICAgIHVpZDogZnVuY3Rpb24gKClcbiAgICB7XG4gICAgICAgIHJldHVybiArK3V0aWxzLl91aWQ7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIENvbnZlcnRzIGEgaGV4IGNvbG9yIG51bWJlciB0byBhbiBbUiwgRywgQl0gYXJyYXlcbiAgICAgKlxuICAgICAqIEBwYXJhbSBoZXgge251bWJlcn1cbiAgICAgKiBAcGFyYW0gIHtudW1iZXJbXX0gW291dD1bXV1cbiAgICAgKiBAcmV0dXJuIHtudW1iZXJbXX0gQW4gYXJyYXkgcmVwcmVzZW50aW5nIHRoZSBbUiwgRywgQl0gb2YgdGhlIGNvbG9yLlxuICAgICAqL1xuICAgIGhleDJyZ2I6IGZ1bmN0aW9uIChoZXgsIG91dClcbiAgICB7XG4gICAgICAgIG91dCA9IG91dCB8fCBbXTtcblxuICAgICAgICBvdXRbMF0gPSAoaGV4ID4+IDE2ICYgMHhGRikgLyAyNTU7XG4gICAgICAgIG91dFsxXSA9IChoZXggPj4gOCAmIDB4RkYpIC8gMjU1O1xuICAgICAgICBvdXRbMl0gPSAoaGV4ICYgMHhGRikgLyAyNTU7XG5cbiAgICAgICAgcmV0dXJuIG91dDtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQ29udmVydHMgYSBoZXggY29sb3IgbnVtYmVyIHRvIGEgc3RyaW5nLlxuICAgICAqXG4gICAgICogQHBhcmFtIGhleCB7bnVtYmVyfVxuICAgICAqIEByZXR1cm4ge3N0cmluZ30gVGhlIHN0cmluZyBjb2xvci5cbiAgICAgKi9cbiAgICBoZXgyc3RyaW5nOiBmdW5jdGlvbiAoaGV4KVxuICAgIHtcbiAgICAgICAgaGV4ID0gaGV4LnRvU3RyaW5nKDE2KTtcbiAgICAgICAgaGV4ID0gJzAwMDAwMCcuc3Vic3RyKDAsIDYgLSBoZXgubGVuZ3RoKSArIGhleDtcblxuICAgICAgICByZXR1cm4gJyMnICsgaGV4O1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBDb252ZXJ0cyBhIGNvbG9yIGFzIGFuIFtSLCBHLCBCXSBhcnJheSB0byBhIGhleCBudW1iZXJcbiAgICAgKlxuICAgICAqIEBwYXJhbSByZ2Ige251bWJlcltdfVxuICAgICAqIEByZXR1cm4ge251bWJlcn0gVGhlIGNvbG9yIG51bWJlclxuICAgICAqL1xuICAgIHJnYjJoZXg6IGZ1bmN0aW9uIChyZ2IpXG4gICAge1xuICAgICAgICByZXR1cm4gKChyZ2JbMF0qMjU1IDw8IDE2KSArIChyZ2JbMV0qMjU1IDw8IDgpICsgcmdiWzJdKjI1NSk7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIENoZWNrcyB3aGV0aGVyIHRoZSBDYW52YXMgQmxlbmRNb2RlcyBhcmUgc3VwcG9ydGVkIGJ5IHRoZSBjdXJyZW50IGJyb3dzZXJcbiAgICAgKlxuICAgICAqIEByZXR1cm4ge2Jvb2xlYW59IHdoZXRoZXIgdGhleSBhcmUgc3VwcG9ydGVkXG4gICAgICovXG4gICAgY2FuVXNlTmV3Q2FudmFzQmxlbmRNb2RlczogZnVuY3Rpb24gKClcbiAgICB7XG4gICAgICAgIGlmICh0eXBlb2YgZG9jdW1lbnQgPT09ICd1bmRlZmluZWQnKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgcG5nSGVhZCA9ICdkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQUFRQUFBQUJBUU1BQUFERDhwMk9BQUFBQTFCTVZFWC8nO1xuICAgICAgICB2YXIgcG5nRW5kID0gJ0FBQUFDa2xFUVZRSTEyTmdBQUFBQWdBQjRpRzhNd0FBQUFCSlJVNUVya0pnZ2c9PSc7XG5cbiAgICAgICAgdmFyIG1hZ2VudGEgPSBuZXcgSW1hZ2UoKTtcbiAgICAgICAgbWFnZW50YS5zcmMgPSBwbmdIZWFkICsgJ0FQODA0T2E2JyArIHBuZ0VuZDtcblxuICAgICAgICB2YXIgeWVsbG93ID0gbmV3IEltYWdlKCk7XG4gICAgICAgIHllbGxvdy5zcmMgPSBwbmdIZWFkICsgJy93Q0t4dlJGJyArIHBuZ0VuZDtcblxuICAgICAgICB2YXIgY2FudmFzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnY2FudmFzJyk7XG4gICAgICAgIGNhbnZhcy53aWR0aCA9IDY7XG4gICAgICAgIGNhbnZhcy5oZWlnaHQgPSAxO1xuXG4gICAgICAgIHZhciBjb250ZXh0ID0gY2FudmFzLmdldENvbnRleHQoJzJkJyk7XG4gICAgICAgIGNvbnRleHQuZ2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uID0gJ211bHRpcGx5JztcbiAgICAgICAgY29udGV4dC5kcmF3SW1hZ2UobWFnZW50YSwgMCwgMCk7XG4gICAgICAgIGNvbnRleHQuZHJhd0ltYWdlKHllbGxvdywgMiwgMCk7XG5cbiAgICAgICAgdmFyIGRhdGEgPSBjb250ZXh0LmdldEltYWdlRGF0YSgyLDAsMSwxKS5kYXRhO1xuXG4gICAgICAgIHJldHVybiAoZGF0YVswXSA9PT0gMjU1ICYmIGRhdGFbMV0gPT09IDAgJiYgZGF0YVsyXSA9PT0gMCk7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIEdpdmVuIGEgbnVtYmVyLCB0aGlzIGZ1bmN0aW9uIHJldHVybnMgdGhlIGNsb3Nlc3QgbnVtYmVyIHRoYXQgaXMgYSBwb3dlciBvZiB0d29cbiAgICAgKiB0aGlzIGZ1bmN0aW9uIGlzIHRha2VuIGZyb20gU3RhcmxpbmcgRnJhbWV3b3JrIGFzIGl0cyBwcmV0dHkgbmVhdCA7KVxuICAgICAqXG4gICAgICogQHBhcmFtIG51bWJlciB7bnVtYmVyfVxuICAgICAqIEByZXR1cm4ge251bWJlcn0gdGhlIGNsb3Nlc3QgbnVtYmVyIHRoYXQgaXMgYSBwb3dlciBvZiB0d29cbiAgICAgKi9cbiAgICBnZXROZXh0UG93ZXJPZlR3bzogZnVuY3Rpb24gKG51bWJlcilcbiAgICB7XG4gICAgICAgIC8vIHNlZTogaHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9Qb3dlcl9vZl90d28jRmFzdF9hbGdvcml0aG1fdG9fY2hlY2tfaWZfYV9wb3NpdGl2ZV9udW1iZXJfaXNfYV9wb3dlcl9vZl90d29cbiAgICAgICAgaWYgKG51bWJlciA+IDAgJiYgKG51bWJlciAmIChudW1iZXIgLSAxKSkgPT09IDApXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiBudW1iZXI7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgICB2YXIgcmVzdWx0ID0gMTtcblxuICAgICAgICAgICAgd2hpbGUgKHJlc3VsdCA8IG51bWJlcilcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICByZXN1bHQgPDw9IDE7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogY2hlY2tzIGlmIHRoZSBnaXZlbiB3aWR0aCBhbmQgaGVpZ2h0IG1ha2UgYSBwb3dlciBvZiB0d28gcmVjdGFuZ2xlXG4gICAgICpcbiAgICAgKiBAcGFyYW0gd2lkdGgge251bWJlcn1cbiAgICAgKiBAcGFyYW0gaGVpZ2h0IHtudW1iZXJ9XG4gICAgICogQHJldHVybiB7Ym9vbGVhbn1cbiAgICAgKi9cbiAgICBpc1Bvd2VyT2ZUd286IGZ1bmN0aW9uICh3aWR0aCwgaGVpZ2h0KVxuICAgIHtcbiAgICAgICAgcmV0dXJuICh3aWR0aCA+IDAgJiYgKHdpZHRoICYgKHdpZHRoIC0gMSkpID09PSAwICYmIGhlaWdodCA+IDAgJiYgKGhlaWdodCAmIChoZWlnaHQgLSAxKSkgPT09IDApO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBnZXQgdGhlIHJlc29sdXRpb24gb2YgYW4gYXNzZXQgYnkgbG9va2luZyBmb3IgdGhlIHByZWZpeFxuICAgICAqIHVzZWQgYnkgc3ByaXRlc2hlZXRzIGFuZCBpbWFnZSB1cmxzXG4gICAgICpcbiAgICAgKiBAcGFyYW0gdXJsIHtzdHJpbmd9IHRoZSBpbWFnZSBwYXRoXG4gICAgICogQHJldHVybiB7bnVtYmVyfVxuICAgICAqL1xuICAgIGdldFJlc29sdXRpb25PZlVybDogZnVuY3Rpb24gKHVybClcbiAgICB7XG4gICAgICAgIHZhciByZXNvbHV0aW9uID0gQ09OU1QuUkVUSU5BX1BSRUZJWC5leGVjKHVybCk7XG5cbiAgICAgICAgaWYgKHJlc29sdXRpb24pXG4gICAgICAgIHtcbiAgICAgICAgICAgcmV0dXJuIHBhcnNlRmxvYXQocmVzb2x1dGlvblsxXSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gMTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogTG9ncyBvdXQgdGhlIHZlcnNpb24gYW5kIHJlbmRlcmVyIGluZm9ybWF0aW9uIGZvciB0aGlzIHJ1bm5pbmcgaW5zdGFuY2Ugb2YgUElYSS5cbiAgICAgKiBJZiB5b3UgZG9uJ3Qgd2FudCB0byBzZWUgdGhpcyBtZXNzYWdlIHlvdSBjYW4gc2V0IGBQSVhJLnV0aWxzLl9zYWlkSGVsbG8gPSB0cnVlO2BcbiAgICAgKiBzbyB0aGUgbGlicmFyeSB0aGlua3MgaXQgYWxyZWFkeSBzYWlkIGl0LiBLZWVwIGluIG1pbmQgdGhhdCBkb2luZyB0aGF0IHdpbGwgZm9yZXZlclxuICAgICAqIG1ha2VzIHlvdSBhIGplcmsgZmFjZS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSB0eXBlIC0gVGhlIHN0cmluZyByZW5kZXJlciB0eXBlIHRvIGxvZy5cbiAgICAgKiBAY29uc3RhbnRcbiAgICAgKiBAc3RhdGljXG4gICAgICovXG4gICAgc2F5SGVsbG86IGZ1bmN0aW9uICh0eXBlKVxuICAgIHtcbiAgICAgICAgaWYgKHV0aWxzLl9zYWlkSGVsbG8pXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChuYXZpZ2F0b3IudXNlckFnZW50LnRvTG93ZXJDYXNlKCkuaW5kZXhPZignY2hyb21lJykgPiAtMSlcbiAgICAgICAge1xuICAgICAgICAgICAgdmFyIGFyZ3MgPSBbXG4gICAgICAgICAgICAgICAgJ1xcbiAlYyAlYyAlYyBQaXhpLmpzICcgKyBDT05TVC5WRVJTSU9OICsgJyAtIOKcsCAnICsgdHlwZSArICcg4pywICAlYyAnICsgJyAlYyAnICsgJyBodHRwOi8vd3d3LnBpeGlqcy5jb20vICAlYyAlYyDimaUlY+KZpSVj4pmlIFxcblxcbicsXG4gICAgICAgICAgICAgICAgJ2JhY2tncm91bmQ6ICNmZjY2YTU7IHBhZGRpbmc6NXB4IDA7JyxcbiAgICAgICAgICAgICAgICAnYmFja2dyb3VuZDogI2ZmNjZhNTsgcGFkZGluZzo1cHggMDsnLFxuICAgICAgICAgICAgICAgICdjb2xvcjogI2ZmNjZhNTsgYmFja2dyb3VuZDogIzAzMDMwNzsgcGFkZGluZzo1cHggMDsnLFxuICAgICAgICAgICAgICAgICdiYWNrZ3JvdW5kOiAjZmY2NmE1OyBwYWRkaW5nOjVweCAwOycsXG4gICAgICAgICAgICAgICAgJ2JhY2tncm91bmQ6ICNmZmMzZGM7IHBhZGRpbmc6NXB4IDA7JyxcbiAgICAgICAgICAgICAgICAnYmFja2dyb3VuZDogI2ZmNjZhNTsgcGFkZGluZzo1cHggMDsnLFxuICAgICAgICAgICAgICAgICdjb2xvcjogI2ZmMjQyNDsgYmFja2dyb3VuZDogI2ZmZjsgcGFkZGluZzo1cHggMDsnLFxuICAgICAgICAgICAgICAgICdjb2xvcjogI2ZmMjQyNDsgYmFja2dyb3VuZDogI2ZmZjsgcGFkZGluZzo1cHggMDsnLFxuICAgICAgICAgICAgICAgICdjb2xvcjogI2ZmMjQyNDsgYmFja2dyb3VuZDogI2ZmZjsgcGFkZGluZzo1cHggMDsnXG4gICAgICAgICAgICBdO1xuXG4gICAgICAgICAgICB3aW5kb3cuY29uc29sZS5sb2cuYXBwbHkoY29uc29sZSwgYXJncyk7IC8vanNoaW50IGlnbm9yZTpsaW5lXG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAod2luZG93LmNvbnNvbGUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHdpbmRvdy5jb25zb2xlLmxvZygnUGl4aS5qcyAnICsgQ09OU1QuVkVSU0lPTiArICcgLSAnICsgdHlwZSArICcgLSBodHRwOi8vd3d3LnBpeGlqcy5jb20vJyk7IC8vanNoaW50IGlnbm9yZTpsaW5lXG4gICAgICAgIH1cblxuICAgICAgICB1dGlscy5fc2FpZEhlbGxvID0gdHJ1ZTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogSGVscGVyIGZvciBjaGVja2luZyBmb3Igd2ViZ2wgc3VwcG9ydFxuICAgICAqXG4gICAgICogQHJldHVybiB7Ym9vbGVhbn1cbiAgICAgKi9cbiAgICBpc1dlYkdMU3VwcG9ydGVkOiBmdW5jdGlvbiAoKVxuICAgIHtcbiAgICAgICAgdmFyIGNvbnRleHRPcHRpb25zID0geyBzdGVuY2lsOiB0cnVlIH07XG4gICAgICAgIHRyeVxuICAgICAgICB7XG4gICAgICAgICAgICBpZiAoIXdpbmRvdy5XZWJHTFJlbmRlcmluZ0NvbnRleHQpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB2YXIgY2FudmFzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnY2FudmFzJyksXG4gICAgICAgICAgICAgICAgZ2wgPSBjYW52YXMuZ2V0Q29udGV4dCgnd2ViZ2wnLCBjb250ZXh0T3B0aW9ucykgfHwgY2FudmFzLmdldENvbnRleHQoJ2V4cGVyaW1lbnRhbC13ZWJnbCcsIGNvbnRleHRPcHRpb25zKTtcblxuICAgICAgICAgICAgcmV0dXJuICEhKGdsICYmIGdsLmdldENvbnRleHRBdHRyaWJ1dGVzKCkuc3RlbmNpbCk7XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHNpZ24gb2YgbnVtYmVyXG4gICAgICpcbiAgICAgKiBAcGFyYW0gbiB7bnVtYmVyfVxuICAgICAqIEByZXR1cm5zIHtudW1iZXJ9IDAgaWYgbiBpcyAwLCAtMSBpZiBuIGlzIG5lZ2F0aXZlLCAxIGlmIG4gaSBwb3NpdGl2ZVxuICAgICAqL1xuICAgIHNpZ246IGZ1bmN0aW9uIChuKVxuICAgIHtcbiAgICAgICAgcmV0dXJuIG4gPyAobiA8IDAgPyAtMSA6IDEpIDogMDtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogcmVtb3ZlSXRlbXNcbiAgICAgKlxuICAgICAqIEBwYXJhbSB7YXJyYXl9IGFyciBUaGUgdGFyZ2V0IGFycmF5XG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHN0YXJ0SWR4IFRoZSBpbmRleCB0byBiZWdpbiByZW1vdmluZyBmcm9tIChpbmNsdXNpdmUpXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHJlbW92ZUNvdW50IEhvdyBtYW55IGl0ZW1zIHRvIHJlbW92ZVxuICAgICAqL1xuICAgIHJlbW92ZUl0ZW1zOiBmdW5jdGlvbiAoYXJyLCBzdGFydElkeCwgcmVtb3ZlQ291bnQpXG4gICAge1xuICAgICAgICB2YXIgbGVuZ3RoID0gYXJyLmxlbmd0aDtcblxuICAgICAgICBpZiAoc3RhcnRJZHggPj0gbGVuZ3RoIHx8IHJlbW92ZUNvdW50ID09PSAwKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICByZW1vdmVDb3VudCA9IChzdGFydElkeCtyZW1vdmVDb3VudCA+IGxlbmd0aCA/IGxlbmd0aC1zdGFydElkeCA6IHJlbW92ZUNvdW50KTtcbiAgICAgICAgZm9yICh2YXIgaSA9IHN0YXJ0SWR4LCBsZW4gPSBsZW5ndGgtcmVtb3ZlQ291bnQ7IGkgPCBsZW47ICsraSlcbiAgICAgICAge1xuICAgICAgICAgICAgYXJyW2ldID0gYXJyW2kgKyByZW1vdmVDb3VudF07XG4gICAgICAgIH1cblxuICAgICAgICBhcnIubGVuZ3RoID0gbGVuO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBAdG9kbyBEZXNjcmliZSBwcm9wZXJ0eSB1c2FnZVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgVGV4dHVyZUNhY2hlOiB7fSxcblxuICAgIC8qKlxuICAgICAqIEB0b2RvIERlc2NyaWJlIHByb3BlcnR5IHVzYWdlXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICBCYXNlVGV4dHVyZUNhY2hlOiB7fVxufTtcbiIsIi8qKlxuICogTWl4aW5zIGZ1bmN0aW9uYWxpdHkgdG8gbWFrZSBhbiBvYmplY3QgaGF2ZSBcInBsdWdpbnNcIi5cbiAqXG4gKiBAbWl4aW5cbiAqIEBtZW1iZXJvZiBQSVhJLnV0aWxzXG4gKiBAcGFyYW0gb2JqIHtvYmplY3R9IFRoZSBvYmplY3QgdG8gbWl4IGludG8uXG4gKiBAZXhhbXBsZVxuICogICAgICBmdW5jdGlvbiBNeU9iamVjdCgpIHt9XG4gKlxuICogICAgICBwbHVnaW5UYXJnZXQubWl4aW4oTXlPYmplY3QpO1xuICovXG5mdW5jdGlvbiBwbHVnaW5UYXJnZXQob2JqKVxue1xuICAgIG9iai5fX3BsdWdpbnMgPSB7fTtcblxuICAgIC8qKlxuICAgICAqIEFkZHMgYSBwbHVnaW4gdG8gYW4gb2JqZWN0XG4gICAgICpcbiAgICAgKiBAcGFyYW0gcGx1Z2luTmFtZSB7c3RyaW5nfSBUaGUgZXZlbnRzIHRoYXQgc2hvdWxkIGJlIGxpc3RlZC5cbiAgICAgKiBAcGFyYW0gY3RvciB7RnVuY3Rpb259IFRoZSBjb25zdHJ1Y3RvciBmdW5jdGlvbiBmb3IgdGhlIHBsdWdpbi5cbiAgICAgKi9cbiAgICBvYmoucmVnaXN0ZXJQbHVnaW4gPSBmdW5jdGlvbiAocGx1Z2luTmFtZSwgY3RvcilcbiAgICB7XG4gICAgICAgIG9iai5fX3BsdWdpbnNbcGx1Z2luTmFtZV0gPSBjdG9yO1xuICAgIH07XG5cbiAgICAvKipcbiAgICAgKiBJbnN0YW50aWF0ZXMgYWxsIHRoZSBwbHVnaW5zIG9mIHRoaXMgb2JqZWN0XG4gICAgICpcbiAgICAgKi9cbiAgICBvYmoucHJvdG90eXBlLmluaXRQbHVnaW5zID0gZnVuY3Rpb24gKClcbiAgICB7XG4gICAgICAgIHRoaXMucGx1Z2lucyA9IHRoaXMucGx1Z2lucyB8fCB7fTtcblxuICAgICAgICBmb3IgKHZhciBvIGluIG9iai5fX3BsdWdpbnMpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMucGx1Z2luc1tvXSA9IG5ldyAob2JqLl9fcGx1Z2luc1tvXSkodGhpcyk7XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgLyoqXG4gICAgICogUmVtb3ZlcyBhbGwgdGhlIHBsdWdpbnMgb2YgdGhpcyBvYmplY3RcbiAgICAgKlxuICAgICAqL1xuICAgIG9iai5wcm90b3R5cGUuZGVzdHJveVBsdWdpbnMgPSBmdW5jdGlvbiAoKVxuICAgIHtcbiAgICAgICAgZm9yICh2YXIgbyBpbiB0aGlzLnBsdWdpbnMpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMucGx1Z2luc1tvXS5kZXN0cm95KCk7XG4gICAgICAgICAgICB0aGlzLnBsdWdpbnNbb10gPSBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5wbHVnaW5zID0gbnVsbDtcbiAgICB9O1xufVxuXG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICAgIC8qKlxuICAgICAqIE1peGVzIGluIHRoZSBwcm9wZXJ0aWVzIG9mIHRoZSBwbHVnaW5UYXJnZXQgaW50byBhbm90aGVyIG9iamVjdFxuICAgICAqXG4gICAgICogQHBhcmFtIG9iamVjdCB7b2JqZWN0fSBUaGUgb2JqIHRvIG1peCBpbnRvXG4gICAgICovXG4gICAgbWl4aW46IGZ1bmN0aW9uIG1peGluKG9iailcbiAgICB7XG4gICAgICAgIHBsdWdpblRhcmdldChvYmopO1xuICAgIH1cbn07XG4iLCIvKmdsb2JhbCBjb25zb2xlICovXG52YXIgY29yZSA9IHJlcXVpcmUoJy4vY29yZScpLFxuICAgIG1lc2ggPSByZXF1aXJlKCcuL21lc2gnKSxcbiAgICBleHRyYXMgPSByZXF1aXJlKCcuL2V4dHJhcycpLFxuICAgIGZpbHRlcnMgPSByZXF1aXJlKCcuL2ZpbHRlcnMnKTtcblxuLyoqXG4gKiBAY2xhc3NcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBTcHJpdGVCYXRjaFxuICogQG1lbWJlcm9mIFBJWElcbiAqIEBzZWUgUElYSS5QYXJ0aWNsZUNvbnRhaW5lclxuICogQHRocm93cyB7UmVmZXJlbmNlRXJyb3J9IFNwcml0ZUJhdGNoIGRvZXMgbm90IGV4aXN0IGFueSBtb3JlLCBwbGVhc2UgdXNlIHRoZSBuZXcgUGFydGljbGVDb250YWluZXIgaW5zdGVhZC5cbiAqIEBkZXByZWNhdGVkIHNpbmNlIHZlcnNpb24gMy4wLjBcbiAqL1xuY29yZS5TcHJpdGVCYXRjaCA9IGZ1bmN0aW9uKClcbntcbiAgICB0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoJ1Nwcml0ZUJhdGNoIGRvZXMgbm90IGV4aXN0IGFueSBtb3JlLCBwbGVhc2UgdXNlIHRoZSBuZXcgUGFydGljbGVDb250YWluZXIgaW5zdGVhZC4nKTtcbn07XG5cbi8qKlxuICogQGNsYXNzXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgQXNzZXRMb2FkZXJcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAc2VlIFBJWEkubG9hZGVycy5Mb2FkZXJcbiAqIEB0aHJvd3Mge1JlZmVyZW5jZUVycm9yfSBUaGUgbG9hZGVyIHN5c3RlbSB3YXMgb3ZlcmhhdWxlZCBpbiBwaXhpIHYzLCBwbGVhc2Ugc2VlIHRoZSBuZXcgUElYSS5sb2FkZXJzLkxvYWRlciBjbGFzcy5cbiAqIEBkZXByZWNhdGVkIHNpbmNlIHZlcnNpb24gMy4wLjBcbiAqL1xuY29yZS5Bc3NldExvYWRlciA9IGZ1bmN0aW9uKClcbntcbiAgICB0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoJ1RoZSBsb2FkZXIgc3lzdGVtIHdhcyBvdmVyaGF1bGVkIGluIHBpeGkgdjMsIHBsZWFzZSBzZWUgdGhlIG5ldyBQSVhJLmxvYWRlcnMuTG9hZGVyIGNsYXNzLicpO1xufTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoY29yZSwge1xuXG4gICAgLyoqXG4gICAgICogQGNsYXNzXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAbmFtZSBTdGFnZVxuICAgICAqIEBtZW1iZXJvZiBQSVhJXG4gICAgICogQHNlZSBQSVhJLkNvbnRhaW5lclxuICAgICAqIEBkZXByZWNhdGVkIHNpbmNlIHZlcnNpb24gMy4wLjBcbiAgICAgKi9cbiAgICBTdGFnZToge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uKClcbiAgICAgICAge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKCdZb3UgZG8gbm90IG5lZWQgdG8gdXNlIGEgUElYSSBTdGFnZSBhbnkgbW9yZSwgeW91IGNhbiBzaW1wbHkgcmVuZGVyIGFueSBjb250YWluZXIuJyk7XG4gICAgICAgICAgICByZXR1cm4gY29yZS5Db250YWluZXI7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQGNsYXNzXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAbmFtZSBEaXNwbGF5T2JqZWN0Q29udGFpbmVyXG4gICAgICogQG1lbWJlcm9mIFBJWElcbiAgICAgKiBAc2VlIFBJWEkuQ29udGFpbmVyXG4gICAgICogQGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiAzLjAuMFxuICAgICAqL1xuICAgIERpc3BsYXlPYmplY3RDb250YWluZXI6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbigpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignRGlzcGxheU9iamVjdENvbnRhaW5lciBoYXMgYmVlbiBzaG9ydGVuZWQgdG8gQ29udGFpbmVyLCBwbGVhc2UgdXNlIENvbnRhaW5lciBmcm9tIG5vdyBvbi4nKTtcbiAgICAgICAgICAgIHJldHVybiBjb3JlLkNvbnRhaW5lcjtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBAY2xhc3NcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBuYW1lIFN0cmlwXG4gICAgICogQG1lbWJlcm9mIFBJWElcbiAgICAgKiBAc2VlIFBJWEkubWVzaC5NZXNoXG4gICAgICogQGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiAzLjAuMFxuICAgICAqL1xuICAgIFN0cmlwOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24oKVxuICAgICAgICB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ1RoZSBTdHJpcCBjbGFzcyBoYXMgYmVlbiByZW5hbWVkIHRvIE1lc2ggYW5kIG1vdmVkIHRvIG1lc2guTWVzaCwgcGxlYXNlIHVzZSBtZXNoLk1lc2ggZnJvbSBub3cgb24uJyk7XG4gICAgICAgICAgICByZXR1cm4gbWVzaC5NZXNoO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIEBjbGFzc1xuICAgICAqIEBwcml2YXRlXG4gICAgICogQG5hbWUgUm9wZVxuICAgICAqIEBtZW1iZXJvZiBQSVhJXG4gICAgICogQHNlZSBQSVhJLm1lc2guUm9wZVxuICAgICAqIEBkZXByZWNhdGVkIHNpbmNlIHZlcnNpb24gMy4wLjBcbiAgICAgKi9cbiAgICBSb3BlOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24oKVxuICAgICAgICB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ1RoZSBSb3BlIGNsYXNzIGhhcyBiZWVuIG1vdmVkIHRvIG1lc2guUm9wZSwgcGxlYXNlIHVzZSBtZXNoLlJvcGUgZnJvbSBub3cgb24uJyk7XG4gICAgICAgICAgICByZXR1cm4gbWVzaC5Sb3BlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIEBjbGFzc1xuICAgICAqIEBwcml2YXRlXG4gICAgICogQG5hbWUgTW92aWVDbGlwXG4gICAgICogQG1lbWJlcm9mIFBJWElcbiAgICAgKiBAc2VlIFBJWEkuZXh0cmFzLk1vdmllQ2xpcFxuICAgICAqIEBkZXByZWNhdGVkIHNpbmNlIHZlcnNpb24gMy4wLjBcbiAgICAgKi9cbiAgICBNb3ZpZUNsaXA6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbigpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignVGhlIE1vdmllQ2xpcCBjbGFzcyBoYXMgYmVlbiBtb3ZlZCB0byBleHRyYXMuTW92aWVDbGlwLCBwbGVhc2UgdXNlIGV4dHJhcy5Nb3ZpZUNsaXAgZnJvbSBub3cgb24uJyk7XG4gICAgICAgICAgICByZXR1cm4gZXh0cmFzLk1vdmllQ2xpcDtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBAY2xhc3NcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBuYW1lIFRpbGluZ1Nwcml0ZVxuICAgICAqIEBtZW1iZXJvZiBQSVhJXG4gICAgICogQHNlZSBQSVhJLmV4dHJhcy5UaWxpbmdTcHJpdGVcbiAgICAgKiBAZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDMuMC4wXG4gICAgICovXG4gICAgVGlsaW5nU3ByaXRlOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24oKVxuICAgICAgICB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ1RoZSBUaWxpbmdTcHJpdGUgY2xhc3MgaGFzIGJlZW4gbW92ZWQgdG8gZXh0cmFzLlRpbGluZ1Nwcml0ZSwgcGxlYXNlIHVzZSBleHRyYXMuVGlsaW5nU3ByaXRlIGZyb20gbm93IG9uLicpO1xuICAgICAgICAgICAgcmV0dXJuIGV4dHJhcy5UaWxpbmdTcHJpdGU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQGNsYXNzXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAbmFtZSBCaXRtYXBUZXh0XG4gICAgICogQG1lbWJlcm9mIFBJWElcbiAgICAgKiBAc2VlIFBJWEkuZXh0cmFzLkJpdG1hcFRleHRcbiAgICAgKiBAZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDMuMC4wXG4gICAgICovXG4gICAgQml0bWFwVGV4dDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uKClcbiAgICAgICAge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKCdUaGUgQml0bWFwVGV4dCBjbGFzcyBoYXMgYmVlbiBtb3ZlZCB0byBleHRyYXMuQml0bWFwVGV4dCwgcGxlYXNlIHVzZSBleHRyYXMuQml0bWFwVGV4dCBmcm9tIG5vdyBvbi4nKTtcbiAgICAgICAgICAgIHJldHVybiBleHRyYXMuQml0bWFwVGV4dDtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBAY2xhc3NcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBuYW1lIGJsZW5kTW9kZXNcbiAgICAgKiBAbWVtYmVyb2YgUElYSVxuICAgICAqIEBzZWUgUElYSS5CTEVORF9NT0RFU1xuICAgICAqIEBkZXByZWNhdGVkIHNpbmNlIHZlcnNpb24gMy4wLjBcbiAgICAgKi9cbiAgICBibGVuZE1vZGVzOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24oKVxuICAgICAgICB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ1RoZSBibGVuZE1vZGVzIGhhcyBiZWVuIG1vdmVkIHRvIEJMRU5EX01PREVTLCBwbGVhc2UgdXNlIEJMRU5EX01PREVTIGZyb20gbm93IG9uLicpO1xuICAgICAgICAgICAgcmV0dXJuIGNvcmUuQkxFTkRfTU9ERVM7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQGNsYXNzXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAbmFtZSBzY2FsZU1vZGVzXG4gICAgICogQG1lbWJlcm9mIFBJWElcbiAgICAgKiBAc2VlIFBJWEkuU0NBTEVfTU9ERVNcbiAgICAgKiBAZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDMuMC4wXG4gICAgICovXG4gICAgc2NhbGVNb2Rlczoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uKClcbiAgICAgICAge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKCdUaGUgc2NhbGVNb2RlcyBoYXMgYmVlbiBtb3ZlZCB0byBTQ0FMRV9NT0RFUywgcGxlYXNlIHVzZSBTQ0FMRV9NT0RFUyBmcm9tIG5vdyBvbi4nKTtcbiAgICAgICAgICAgIHJldHVybiBjb3JlLlNDQUxFX01PREVTO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIEBjbGFzc1xuICAgICAqIEBwcml2YXRlXG4gICAgICogQG5hbWUgQmFzZVRleHR1cmVDYWNoZVxuICAgICAqIEBtZW1iZXJvZiBQSVhJXG4gICAgICogQHNlZSBQSVhJLnV0aWxzLkJhc2VUZXh0dXJlQ2FjaGVcbiAgICAgKiBAZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDMuMC4wXG4gICAgICovXG4gICAgQmFzZVRleHR1cmVDYWNoZToge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignVGhlIEJhc2VUZXh0dXJlQ2FjaGUgY2xhc3MgaGFzIGJlZW4gbW92ZWQgdG8gdXRpbHMuQmFzZVRleHR1cmVDYWNoZSwgcGxlYXNlIHVzZSB1dGlscy5CYXNlVGV4dHVyZUNhY2hlIGZyb20gbm93IG9uLicpO1xuICAgICAgICAgICAgcmV0dXJuIGNvcmUudXRpbHMuQmFzZVRleHR1cmVDYWNoZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBAY2xhc3NcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBuYW1lIFRleHR1cmVDYWNoZVxuICAgICAqIEBtZW1iZXJvZiBQSVhJXG4gICAgICogQHNlZSBQSVhJLnV0aWxzLlRleHR1cmVDYWNoZVxuICAgICAqIEBkZXByZWNhdGVkIHNpbmNlIHZlcnNpb24gMy4wLjBcbiAgICAgKi9cbiAgICBUZXh0dXJlQ2FjaGU6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ1RoZSBUZXh0dXJlQ2FjaGUgY2xhc3MgaGFzIGJlZW4gbW92ZWQgdG8gdXRpbHMuVGV4dHVyZUNhY2hlLCBwbGVhc2UgdXNlIHV0aWxzLlRleHR1cmVDYWNoZSBmcm9tIG5vdyBvbi4nKTtcbiAgICAgICAgICAgIHJldHVybiBjb3JlLnV0aWxzLlRleHR1cmVDYWNoZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBAbmFtZXNwYWNlXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAbmFtZSBtYXRoXG4gICAgICogQG1lbWJlcm9mIFBJWElcbiAgICAgKiBAc2VlIFBJWElcbiAgICAgKiBAZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDMuMC42XG4gICAgICovXG4gICAgbWF0aDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignVGhlIG1hdGggbmFtZXNwYWNlIGlzIGRlcHJlY2F0ZWQsIHBsZWFzZSBhY2Nlc3MgbWVtYmVycyBhbHJlYWR5IGFjY2Vzc2libGUgb24gUElYSS4nKTtcbiAgICAgICAgICAgIHJldHVybiBjb3JlO1xuICAgICAgICB9XG4gICAgfVxufSk7XG5cbi8qKlxuICogQG1ldGhvZFxuICogQHByaXZhdGVcbiAqIEBuYW1lIFBJWEkuU3ByaXRlI3NldFRleHR1cmVcbiAqIEBzZWUgUElYSS5TcHJpdGUjdGV4dHVyZVxuICogQGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiAzLjAuMFxuICovXG5jb3JlLlNwcml0ZS5wcm90b3R5cGUuc2V0VGV4dHVyZSA9IGZ1bmN0aW9uKHRleHR1cmUpXG57XG4gICAgdGhpcy50ZXh0dXJlID0gdGV4dHVyZTtcbiAgICBjb25zb2xlLndhcm4oJ3NldFRleHR1cmUgaXMgbm93IGRlcHJlY2F0ZWQsIHBsZWFzZSB1c2UgdGhlIHRleHR1cmUgcHJvcGVydHksIGUuZyA6IHNwcml0ZS50ZXh0dXJlID0gdGV4dHVyZTsnKTtcbn07XG5cbi8qKlxuICogQG1ldGhvZFxuICogQG5hbWUgUElYSS5leHRyYXMuQml0bWFwVGV4dCNzZXRUZXh0XG4gKiBAc2VlIFBJWEkuZXh0cmFzLkJpdG1hcFRleHQjdGV4dFxuICogQGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiAzLjAuMFxuICovXG5leHRyYXMuQml0bWFwVGV4dC5wcm90b3R5cGUuc2V0VGV4dCA9IGZ1bmN0aW9uKHRleHQpXG57XG4gICAgdGhpcy50ZXh0ID0gdGV4dDtcbiAgICBjb25zb2xlLndhcm4oJ3NldFRleHQgaXMgbm93IGRlcHJlY2F0ZWQsIHBsZWFzZSB1c2UgdGhlIHRleHQgcHJvcGVydHksIGUuZyA6IG15Qml0bWFwVGV4dC50ZXh0ID0gXFwnbXkgdGV4dFxcJzsnKTtcbn07XG5cbi8qKlxuICogQG1ldGhvZFxuICogQG5hbWUgUElYSS5UZXh0I3NldFRleHRcbiAqIEBzZWUgUElYSS5UZXh0I3RleHRcbiAqIEBkZXByZWNhdGVkIHNpbmNlIHZlcnNpb24gMy4wLjBcbiAqL1xuY29yZS5UZXh0LnByb3RvdHlwZS5zZXRUZXh0ID0gZnVuY3Rpb24odGV4dClcbntcbiAgICB0aGlzLnRleHQgPSB0ZXh0O1xuICAgIGNvbnNvbGUud2Fybignc2V0VGV4dCBpcyBub3cgZGVwcmVjYXRlZCwgcGxlYXNlIHVzZSB0aGUgdGV4dCBwcm9wZXJ0eSwgZS5nIDogbXlUZXh0LnRleHQgPSBcXCdteSB0ZXh0XFwnOycpO1xufTtcblxuLyoqXG4gKiBAbWV0aG9kXG4gKiBAbmFtZSBQSVhJLlRleHQjc2V0U3R5bGVcbiAqIEBzZWUgUElYSS5UZXh0I3N0eWxlXG4gKiBAZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDMuMC4wXG4gKi9cbmNvcmUuVGV4dC5wcm90b3R5cGUuc2V0U3R5bGUgPSBmdW5jdGlvbihzdHlsZSlcbntcbiAgICB0aGlzLnN0eWxlID0gc3R5bGU7XG4gICAgY29uc29sZS53YXJuKCdzZXRTdHlsZSBpcyBub3cgZGVwcmVjYXRlZCwgcGxlYXNlIHVzZSB0aGUgc3R5bGUgcHJvcGVydHksIGUuZyA6IG15VGV4dC5zdHlsZSA9IHN0eWxlOycpO1xufTtcblxuLyoqXG4gKiBAbWV0aG9kXG4gKiBAbmFtZSBQSVhJLlRleHR1cmUjc2V0RnJhbWVcbiAqIEBzZWUgUElYSS5UZXh0dXJlI3NldEZyYW1lXG4gKiBAZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDMuMC4wXG4gKi9cbmNvcmUuVGV4dHVyZS5wcm90b3R5cGUuc2V0RnJhbWUgPSBmdW5jdGlvbihmcmFtZSlcbntcbiAgICB0aGlzLmZyYW1lID0gZnJhbWU7XG4gICAgY29uc29sZS53YXJuKCdzZXRGcmFtZSBpcyBub3cgZGVwcmVjYXRlZCwgcGxlYXNlIHVzZSB0aGUgZnJhbWUgcHJvcGVydHksIGUuZyA6IG15VGV4dHVyZS5mcmFtZSA9IGZyYW1lOycpO1xufTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoZmlsdGVycywge1xuXG4gICAgLyoqXG4gICAgICogQGNsYXNzXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAbmFtZSBQSVhJLmZpbHRlcnMuQWJzdHJhY3RGaWx0ZXJcbiAgICAgKiBAc2VlIFBJWEkuQWJzdHJhY3RGaWx0ZXJcbiAgICAgKiBAZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDMuMC42XG4gICAgICovXG4gICAgQWJzdHJhY3RGaWx0ZXI6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbigpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignZmlsdGVycy5BYnN0cmFjdEZpbHRlciBpcyBhbiB1bmRvY3VtZW50ZWQgYWxpYXMsIHBsZWFzZSB1c2UgQWJzdHJhY3RGaWx0ZXIgZnJvbSBub3cgb24uJyk7XG4gICAgICAgICAgICByZXR1cm4gY29yZS5BYnN0cmFjdEZpbHRlcjtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBAY2xhc3NcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBuYW1lIFBJWEkuZmlsdGVycy5GWEFBRmlsdGVyXG4gICAgICogQHNlZSBQSVhJLkZYQUFGaWx0ZXJcbiAgICAgKiBAZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDMuMC42XG4gICAgICovXG4gICAgRlhBQUZpbHRlcjoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uKClcbiAgICAgICAge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKCdmaWx0ZXJzLkZYQUFGaWx0ZXIgaXMgYW4gdW5kb2N1bWVudGVkIGFsaWFzLCBwbGVhc2UgdXNlIEZYQUFGaWx0ZXIgZnJvbSBub3cgb24uJyk7XG4gICAgICAgICAgICByZXR1cm4gY29yZS5GWEFBRmlsdGVyO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIEBjbGFzc1xuICAgICAqIEBwcml2YXRlXG4gICAgICogQG5hbWUgUElYSS5maWx0ZXJzLlNwcml0ZU1hc2tGaWx0ZXJcbiAgICAgKiBAc2VlIFBJWEkuU3ByaXRlTWFza0ZpbHRlclxuICAgICAqIEBkZXByZWNhdGVkIHNpbmNlIHZlcnNpb24gMy4wLjZcbiAgICAgKi9cbiAgICBTcHJpdGVNYXNrRmlsdGVyOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24oKVxuICAgICAgICB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ2ZpbHRlcnMuU3ByaXRlTWFza0ZpbHRlciBpcyBhbiB1bmRvY3VtZW50ZWQgYWxpYXMsIHBsZWFzZSB1c2UgU3ByaXRlTWFza0ZpbHRlciBmcm9tIG5vdyBvbi4nKTtcbiAgICAgICAgICAgIHJldHVybiBjb3JlLlNwcml0ZU1hc2tGaWx0ZXI7XG4gICAgICAgIH1cbiAgICB9XG59KTtcblxuLyoqXG4gKiBAbWV0aG9kXG4gKiBAbmFtZSBQSVhJLnV0aWxzLnV1aWRcbiAqIEBzZWUgUElYSS51dGlscy51aWRcbiAqIEBkZXByZWNhdGVkIHNpbmNlIHZlcnNpb24gMy4wLjZcbiAqL1xuY29yZS51dGlscy51dWlkID0gZnVuY3Rpb24gKClcbntcbiAgICBjb25zb2xlLndhcm4oJ3V0aWxzLnV1aWQoKSBpcyBkZXByZWNhdGVkLCBwbGVhc2UgdXNlIHV0aWxzLnVpZCgpIGZyb20gbm93IG9uLicpO1xuICAgIHJldHVybiBjb3JlLnV0aWxzLnVpZCgpO1xufTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vY29yZScpO1xuXG4vKipcbiAqIEEgQml0bWFwVGV4dCBvYmplY3Qgd2lsbCBjcmVhdGUgYSBsaW5lIG9yIG11bHRpcGxlIGxpbmVzIG9mIHRleHQgdXNpbmcgYml0bWFwIGZvbnQuIFRvXG4gKiBzcGxpdCBhIGxpbmUgeW91IGNhbiB1c2UgJ1xcbicsICdcXHInIG9yICdcXHJcXG4nIGluIHlvdXIgc3RyaW5nLiBZb3UgY2FuIGdlbmVyYXRlIHRoZSBmbnQgZmlsZXMgdXNpbmc6XG4gKlxuICogQSBCaXRtYXBUZXh0IGNhbiBvbmx5IGJlIGNyZWF0ZWQgd2hlbiB0aGUgZm9udCBpcyBsb2FkZWRcbiAqXG4gKiBgYGBqc1xuICogLy8gaW4gdGhpcyBjYXNlIHRoZSBmb250IGlzIGluIGEgZmlsZSBjYWxsZWQgJ2Rlc3lyZWwuZm50J1xuICogdmFyIGJpdG1hcFRleHQgPSBuZXcgUElYSS5leHRyYXMuQml0bWFwVGV4dChcInRleHQgdXNpbmcgYSBmYW5jeSBmb250IVwiLCB7Zm9udDogXCIzNXB4IERlc3lyZWxcIiwgYWxpZ246IFwicmlnaHRcIn0pO1xuICogYGBgXG4gKlxuICpcbiAqIGh0dHA6Ly93d3cuYW5nZWxjb2RlLmNvbS9wcm9kdWN0cy9ibWZvbnQvIGZvciB3aW5kb3dzIG9yXG4gKiBodHRwOi8vd3d3LmJtZ2x5cGguY29tLyBmb3IgbWFjLlxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5Db250YWluZXJcbiAqIEBtZW1iZXJvZiBQSVhJLmV4dHJhc1xuICogQHBhcmFtIHRleHQge3N0cmluZ30gVGhlIGNvcHkgdGhhdCB5b3Ugd291bGQgbGlrZSB0aGUgdGV4dCB0byBkaXNwbGF5XG4gKiBAcGFyYW0gc3R5bGUge29iamVjdH0gVGhlIHN0eWxlIHBhcmFtZXRlcnNcbiAqIEBwYXJhbSBzdHlsZS5mb250IHtzdHJpbmd8b2JqZWN0fSBUaGUgZm9udCBkZXNjcmlwdG9yIGZvciB0aGUgb2JqZWN0LCBjYW4gYmUgcGFzc2VkIGFzIGEgc3RyaW5nIG9mIGZvcm1cbiAqICAgICAgXCIyNHB4IEZvbnROYW1lXCIgb3IgXCJGb250TmFtZVwiIG9yIGFzIGFuIG9iamVjdCB3aXRoIGV4cGxpY2l0IG5hbWUvc2l6ZSBwcm9wZXJ0aWVzLlxuICogQHBhcmFtIFtzdHlsZS5mb250Lm5hbWVdIHtzdHJpbmd9IFRoZSBiaXRtYXAgZm9udCBpZFxuICogQHBhcmFtIFtzdHlsZS5mb250LnNpemVdIHtudW1iZXJ9IFRoZSBzaXplIG9mIHRoZSBmb250IGluIHBpeGVscywgZS5nLiAyNFxuICogQHBhcmFtIFtzdHlsZS5hbGlnbj0nbGVmdCddIHtzdHJpbmd9IEFsaWdubWVudCBmb3IgbXVsdGlsaW5lIHRleHQgKCdsZWZ0JywgJ2NlbnRlcicgb3IgJ3JpZ2h0JyksIGRvZXMgbm90IGFmZmVjdFxuICogICAgICBzaW5nbGUgbGluZSB0ZXh0XG4gKiBAcGFyYW0gW3N0eWxlLnRpbnQ9MHhGRkZGRkZdIHtudW1iZXJ9IFRoZSB0aW50IGNvbG9yXG4gKi9cbmZ1bmN0aW9uIEJpdG1hcFRleHQodGV4dCwgc3R5bGUpXG57XG4gICAgY29yZS5Db250YWluZXIuY2FsbCh0aGlzKTtcblxuICAgIHN0eWxlID0gc3R5bGUgfHwge307XG5cbiAgICAvKipcbiAgICAgKiBUaGUgd2lkdGggb2YgdGhlIG92ZXJhbGwgdGV4dCwgZGlmZmVyZW50IGZyb20gZm9udFNpemUsXG4gICAgICogd2hpY2ggaXMgZGVmaW5lZCBpbiB0aGUgc3R5bGUgb2JqZWN0XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQHJlYWRPbmx5XG4gICAgICovXG4gICAgdGhpcy50ZXh0V2lkdGggPSAwO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGhlaWdodCBvZiB0aGUgb3ZlcmFsbCB0ZXh0LCBkaWZmZXJlbnQgZnJvbSBmb250U2l6ZSxcbiAgICAgKiB3aGljaCBpcyBkZWZpbmVkIGluIHRoZSBzdHlsZSBvYmplY3RcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAcmVhZE9ubHlcbiAgICAgKi9cbiAgICB0aGlzLnRleHRIZWlnaHQgPSAwO1xuXG4gICAgLyoqXG4gICAgICogUHJpdmF0ZSB0cmFja2VyIGZvciB0aGUgbGV0dGVyIHNwcml0ZSBwb29sLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5TcHJpdGVbXX1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX2dseXBocyA9IFtdO1xuXG4gICAgLyoqXG4gICAgICogUHJpdmF0ZSB0cmFja2VyIGZvciB0aGUgY3VycmVudCBzdHlsZS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge29iamVjdH1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX2ZvbnQgPSB7XG4gICAgICAgIHRpbnQ6IHN0eWxlLnRpbnQgIT09IHVuZGVmaW5lZCA/IHN0eWxlLnRpbnQgOiAweEZGRkZGRixcbiAgICAgICAgYWxpZ246IHN0eWxlLmFsaWduIHx8ICdsZWZ0JyxcbiAgICAgICAgbmFtZTogbnVsbCxcbiAgICAgICAgc2l6ZTogMFxuICAgIH07XG5cbiAgICAvKipcbiAgICAgKiBQcml2YXRlIHRyYWNrZXIgZm9yIHRoZSBjdXJyZW50IGZvbnQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtvYmplY3R9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLmZvbnQgPSBzdHlsZS5mb250OyAvLyBydW4gZm9udCBzZXR0ZXJcblxuICAgIC8qKlxuICAgICAqIFByaXZhdGUgdHJhY2tlciBmb3IgdGhlIGN1cnJlbnQgdGV4dC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge3N0cmluZ31cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX3RleHQgPSB0ZXh0O1xuXG4gICAgLyoqXG4gICAgICogVGhlIG1heCB3aWR0aCBvZiB0aGlzIGJpdG1hcCB0ZXh0IGluIHBpeGVscy4gSWYgdGhlIHRleHQgcHJvdmlkZWQgaXMgbG9uZ2VyIHRoYW4gdGhlIHZhbHVlIHByb3ZpZGVkLCBsaW5lIGJyZWFrcyB3aWxsIGJlIGF1dG9tYXRpY2FsbHkgaW5zZXJ0ZWQgaW4gdGhlIGxhc3Qgd2hpdGVzcGFjZS5cbiAgICAgKiBEaXNhYmxlIGJ5IHNldHRpbmcgdmFsdWUgdG8gMFxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMubWF4V2lkdGggPSAwO1xuXG4gICAgLyoqXG4gICAgICogVGhlIG1heCBsaW5lIGhlaWdodC4gVGhpcyBpcyB1c2VmdWwgd2hlbiB0cnlpbmcgdG8gdXNlIHRoZSB0b3RhbCBoZWlnaHQgb2YgdGhlIFRleHQsIGllOiB3aGVuIHRyeWluZyB0byB2ZXJ0aWNhbGx5IGFsaWduLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMubWF4TGluZUhlaWdodCA9IDA7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgZGlydHkgc3RhdGUgb2YgdGhpcyBvYmplY3QuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqL1xuICAgIHRoaXMuZGlydHkgPSBmYWxzZTtcblxuICAgIHRoaXMudXBkYXRlVGV4dCgpO1xufVxuXG4vLyBjb25zdHJ1Y3RvclxuQml0bWFwVGV4dC5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuQ29udGFpbmVyLnByb3RvdHlwZSk7XG5CaXRtYXBUZXh0LnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IEJpdG1hcFRleHQ7XG5tb2R1bGUuZXhwb3J0cyA9IEJpdG1hcFRleHQ7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKEJpdG1hcFRleHQucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogVGhlIHRpbnQgb2YgdGhlIEJpdG1hcFRleHQgb2JqZWN0XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZXh0cmFzLkJpdG1hcFRleHQjXG4gICAgICovXG4gICAgdGludDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9mb250LnRpbnQ7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLl9mb250LnRpbnQgPSAodHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJyAmJiB2YWx1ZSA+PSAwKSA/IHZhbHVlIDogMHhGRkZGRkY7XG5cbiAgICAgICAgICAgIHRoaXMuZGlydHkgPSB0cnVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFRoZSBhbGlnbm1lbnQgb2YgdGhlIEJpdG1hcFRleHQgb2JqZWN0XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtzdHJpbmd9XG4gICAgICogQGRlZmF1bHQgJ2xlZnQnXG4gICAgICogQG1lbWJlcm9mIFBJWEkuZXh0cmFzLkJpdG1hcFRleHQjXG4gICAgICovXG4gICAgYWxpZ246IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fZm9udC5hbGlnbjtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuX2ZvbnQuYWxpZ24gPSB2YWx1ZSB8fCAnbGVmdCc7XG5cbiAgICAgICAgICAgIHRoaXMuZGlydHkgPSB0cnVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFRoZSBmb250IGRlc2NyaXB0b3Igb2YgdGhlIEJpdG1hcFRleHQgb2JqZWN0XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtGb250fVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmV4dHJhcy5CaXRtYXBUZXh0I1xuICAgICAqL1xuICAgIGZvbnQ6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fZm9udDtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGlmICghdmFsdWUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICAgICAgdmFsdWUgPSB2YWx1ZS5zcGxpdCgnICcpO1xuXG4gICAgICAgICAgICAgICAgdGhpcy5fZm9udC5uYW1lID0gdmFsdWUubGVuZ3RoID09PSAxID8gdmFsdWVbMF0gOiB2YWx1ZS5zbGljZSgxKS5qb2luKCcgJyk7XG4gICAgICAgICAgICAgICAgdGhpcy5fZm9udC5zaXplID0gdmFsdWUubGVuZ3RoID49IDIgPyBwYXJzZUludCh2YWx1ZVswXSwgMTApIDogQml0bWFwVGV4dC5mb250c1t0aGlzLl9mb250Lm5hbWVdLnNpemU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9mb250Lm5hbWUgPSB2YWx1ZS5uYW1lO1xuICAgICAgICAgICAgICAgIHRoaXMuX2ZvbnQuc2l6ZSA9IHR5cGVvZiB2YWx1ZS5zaXplID09PSAnbnVtYmVyJyA/IHZhbHVlLnNpemUgOiBwYXJzZUludCh2YWx1ZS5zaXplLCAxMCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuZGlydHkgPSB0cnVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFRoZSB0ZXh0IG9mIHRoZSBCaXRtYXBUZXh0IG9iamVjdFxuICAgICAqXG4gICAgICogQG1lbWJlciB7c3RyaW5nfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmV4dHJhcy5CaXRtYXBUZXh0I1xuICAgICAqL1xuICAgIHRleHQ6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fdGV4dDtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHZhbHVlID0gdmFsdWUudG9TdHJpbmcoKSB8fCAnICc7XG4gICAgICAgICAgICBpZiAodGhpcy5fdGV4dCA9PT0gdmFsdWUpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5fdGV4dCA9IHZhbHVlO1xuICAgICAgICAgICAgdGhpcy5kaXJ0eSA9IHRydWU7XG4gICAgICAgIH1cbiAgICB9XG59KTtcblxuLyoqXG4gKiBSZW5kZXJzIHRleHQgYW5kIHVwZGF0ZXMgaXQgd2hlbiBuZWVkZWRcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5CaXRtYXBUZXh0LnByb3RvdHlwZS51cGRhdGVUZXh0ID0gZnVuY3Rpb24gKClcbntcbiAgICB2YXIgZGF0YSA9IEJpdG1hcFRleHQuZm9udHNbdGhpcy5fZm9udC5uYW1lXTtcbiAgICB2YXIgcG9zID0gbmV3IGNvcmUuUG9pbnQoKTtcbiAgICB2YXIgcHJldkNoYXJDb2RlID0gbnVsbDtcbiAgICB2YXIgY2hhcnMgPSBbXTtcbiAgICB2YXIgbGFzdExpbmVXaWR0aCA9IDA7XG4gICAgdmFyIG1heExpbmVXaWR0aCA9IDA7XG4gICAgdmFyIGxpbmVXaWR0aHMgPSBbXTtcbiAgICB2YXIgbGluZSA9IDA7XG4gICAgdmFyIHNjYWxlID0gdGhpcy5fZm9udC5zaXplIC8gZGF0YS5zaXplO1xuICAgIHZhciBsYXN0U3BhY2UgPSAtMTtcbiAgICB2YXIgbWF4TGluZUhlaWdodCA9IDA7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMudGV4dC5sZW5ndGg7IGkrKylcbiAgICB7XG4gICAgICAgIHZhciBjaGFyQ29kZSA9IHRoaXMudGV4dC5jaGFyQ29kZUF0KGkpO1xuICAgICAgICBsYXN0U3BhY2UgPSAvKFxccykvLnRlc3QodGhpcy50ZXh0LmNoYXJBdChpKSkgPyBpIDogbGFzdFNwYWNlO1xuXG4gICAgICAgIGlmICgvKD86XFxyXFxufFxccnxcXG4pLy50ZXN0KHRoaXMudGV4dC5jaGFyQXQoaSkpKVxuICAgICAgICB7XG4gICAgICAgICAgICBsaW5lV2lkdGhzLnB1c2gobGFzdExpbmVXaWR0aCk7XG4gICAgICAgICAgICBtYXhMaW5lV2lkdGggPSBNYXRoLm1heChtYXhMaW5lV2lkdGgsIGxhc3RMaW5lV2lkdGgpO1xuICAgICAgICAgICAgbGluZSsrO1xuXG4gICAgICAgICAgICBwb3MueCA9IDA7XG4gICAgICAgICAgICBwb3MueSArPSBkYXRhLmxpbmVIZWlnaHQ7XG4gICAgICAgICAgICBwcmV2Q2hhckNvZGUgPSBudWxsO1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAobGFzdFNwYWNlICE9PSAtMSAmJiB0aGlzLm1heFdpZHRoID4gMCAmJiBwb3MueCAqIHNjYWxlID4gdGhpcy5tYXhXaWR0aClcbiAgICAgICAge1xuICAgICAgICAgICAgY29yZS51dGlscy5yZW1vdmVJdGVtcyhjaGFycywgbGFzdFNwYWNlLCBpIC0gbGFzdFNwYWNlKTtcbiAgICAgICAgICAgIGkgPSBsYXN0U3BhY2U7XG4gICAgICAgICAgICBsYXN0U3BhY2UgPSAtMTtcblxuICAgICAgICAgICAgbGluZVdpZHRocy5wdXNoKGxhc3RMaW5lV2lkdGgpO1xuICAgICAgICAgICAgbWF4TGluZVdpZHRoID0gTWF0aC5tYXgobWF4TGluZVdpZHRoLCBsYXN0TGluZVdpZHRoKTtcbiAgICAgICAgICAgIGxpbmUrKztcblxuICAgICAgICAgICAgcG9zLnggPSAwO1xuICAgICAgICAgICAgcG9zLnkgKz0gZGF0YS5saW5lSGVpZ2h0O1xuICAgICAgICAgICAgcHJldkNoYXJDb2RlID0gbnVsbDtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGNoYXJEYXRhID0gZGF0YS5jaGFyc1tjaGFyQ29kZV07XG5cbiAgICAgICAgaWYgKCFjaGFyRGF0YSlcbiAgICAgICAge1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAocHJldkNoYXJDb2RlICYmIGNoYXJEYXRhLmtlcm5pbmdbcHJldkNoYXJDb2RlXSlcbiAgICAgICAge1xuICAgICAgICAgICAgcG9zLnggKz0gY2hhckRhdGEua2VybmluZ1twcmV2Q2hhckNvZGVdO1xuICAgICAgICB9XG5cbiAgICAgICAgY2hhcnMucHVzaCh7dGV4dHVyZTpjaGFyRGF0YS50ZXh0dXJlLCBsaW5lOiBsaW5lLCBjaGFyQ29kZTogY2hhckNvZGUsIHBvc2l0aW9uOiBuZXcgY29yZS5Qb2ludChwb3MueCArIGNoYXJEYXRhLnhPZmZzZXQsIHBvcy55ICsgY2hhckRhdGEueU9mZnNldCl9KTtcbiAgICAgICAgbGFzdExpbmVXaWR0aCA9IHBvcy54ICsgKGNoYXJEYXRhLnRleHR1cmUud2lkdGggKyBjaGFyRGF0YS54T2Zmc2V0KTtcbiAgICAgICAgcG9zLnggKz0gY2hhckRhdGEueEFkdmFuY2U7XG4gICAgICAgIG1heExpbmVIZWlnaHQgPSBNYXRoLm1heChtYXhMaW5lSGVpZ2h0LCAoY2hhckRhdGEueU9mZnNldCArIGNoYXJEYXRhLnRleHR1cmUuaGVpZ2h0KSk7XG4gICAgICAgIHByZXZDaGFyQ29kZSA9IGNoYXJDb2RlO1xuICAgIH1cblxuICAgIGxpbmVXaWR0aHMucHVzaChsYXN0TGluZVdpZHRoKTtcbiAgICBtYXhMaW5lV2lkdGggPSBNYXRoLm1heChtYXhMaW5lV2lkdGgsIGxhc3RMaW5lV2lkdGgpO1xuXG4gICAgdmFyIGxpbmVBbGlnbk9mZnNldHMgPSBbXTtcblxuICAgIGZvciAoaSA9IDA7IGkgPD0gbGluZTsgaSsrKVxuICAgIHtcbiAgICAgICAgdmFyIGFsaWduT2Zmc2V0ID0gMDtcblxuICAgICAgICBpZiAodGhpcy5fZm9udC5hbGlnbiA9PT0gJ3JpZ2h0JylcbiAgICAgICAge1xuICAgICAgICAgICAgYWxpZ25PZmZzZXQgPSBtYXhMaW5lV2lkdGggLSBsaW5lV2lkdGhzW2ldO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHRoaXMuX2ZvbnQuYWxpZ24gPT09ICdjZW50ZXInKVxuICAgICAgICB7XG4gICAgICAgICAgICBhbGlnbk9mZnNldCA9IChtYXhMaW5lV2lkdGggLSBsaW5lV2lkdGhzW2ldKSAvIDI7XG4gICAgICAgIH1cblxuICAgICAgICBsaW5lQWxpZ25PZmZzZXRzLnB1c2goYWxpZ25PZmZzZXQpO1xuICAgIH1cblxuICAgIHZhciBsZW5DaGFycyA9IGNoYXJzLmxlbmd0aDtcbiAgICB2YXIgdGludCA9IHRoaXMudGludDtcblxuICAgIGZvciAoaSA9IDA7IGkgPCBsZW5DaGFyczsgaSsrKVxuICAgIHtcbiAgICAgICAgdmFyIGMgPSB0aGlzLl9nbHlwaHNbaV07IC8vIGdldCB0aGUgbmV4dCBnbHlwaCBzcHJpdGVcblxuICAgICAgICBpZiAoYylcbiAgICAgICAge1xuICAgICAgICAgICAgYy50ZXh0dXJlID0gY2hhcnNbaV0udGV4dHVyZTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgIHtcbiAgICAgICAgICAgIGMgPSBuZXcgY29yZS5TcHJpdGUoY2hhcnNbaV0udGV4dHVyZSk7XG4gICAgICAgICAgICB0aGlzLl9nbHlwaHMucHVzaChjKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGMucG9zaXRpb24ueCA9IChjaGFyc1tpXS5wb3NpdGlvbi54ICsgbGluZUFsaWduT2Zmc2V0c1tjaGFyc1tpXS5saW5lXSkgKiBzY2FsZTtcbiAgICAgICAgYy5wb3NpdGlvbi55ID0gY2hhcnNbaV0ucG9zaXRpb24ueSAqIHNjYWxlO1xuICAgICAgICBjLnNjYWxlLnggPSBjLnNjYWxlLnkgPSBzY2FsZTtcbiAgICAgICAgYy50aW50ID0gdGludDtcblxuICAgICAgICBpZiAoIWMucGFyZW50KVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmFkZENoaWxkKGMpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gcmVtb3ZlIHVubmVjZXNzYXJ5IGNoaWxkcmVuLlxuICAgIGZvciAoaSA9IGxlbkNoYXJzOyBpIDwgdGhpcy5fZ2x5cGhzLmxlbmd0aDsgKytpKVxuICAgIHtcbiAgICAgICAgdGhpcy5yZW1vdmVDaGlsZCh0aGlzLl9nbHlwaHNbaV0pO1xuICAgIH1cblxuICAgIHRoaXMudGV4dFdpZHRoID0gbWF4TGluZVdpZHRoICogc2NhbGU7XG4gICAgdGhpcy50ZXh0SGVpZ2h0ID0gKHBvcy55ICsgZGF0YS5saW5lSGVpZ2h0KSAqIHNjYWxlO1xuICAgIHRoaXMubWF4TGluZUhlaWdodCA9IG1heExpbmVIZWlnaHQgKiBzY2FsZTtcbn07XG5cbi8qKlxuICogVXBkYXRlcyB0aGUgdHJhbnNmb3JtIG9mIHRoaXMgb2JqZWN0XG4gKlxuICogQHByaXZhdGVcbiAqL1xuQml0bWFwVGV4dC5wcm90b3R5cGUudXBkYXRlVHJhbnNmb3JtID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLnZhbGlkYXRlKCk7XG4gICAgdGhpcy5jb250YWluZXJVcGRhdGVUcmFuc2Zvcm0oKTtcbn07XG5cbi8qKlxuICogVmFsaWRhdGVzIHRleHQgYmVmb3JlIGNhbGxpbmcgcGFyZW50J3MgZ2V0TG9jYWxCb3VuZHNcbiAqXG4gKiBAcmV0dXJuIHtQSVhJLlJlY3RhbmdsZX0gVGhlIHJlY3Rhbmd1bGFyIGJvdW5kaW5nIGFyZWFcbiAqL1xuXG5CaXRtYXBUZXh0LnByb3RvdHlwZS5nZXRMb2NhbEJvdW5kcyA9IGZ1bmN0aW9uKClcbntcbiAgICB0aGlzLnZhbGlkYXRlKCk7XG4gICAgcmV0dXJuIGNvcmUuQ29udGFpbmVyLnByb3RvdHlwZS5nZXRMb2NhbEJvdW5kcy5jYWxsKHRoaXMpO1xufTtcblxuLyoqXG4gKiBVcGRhdGVzIHRleHQgd2hlbiBuZWVkZWRcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5CaXRtYXBUZXh0LnByb3RvdHlwZS52YWxpZGF0ZSA9IGZ1bmN0aW9uKClcbntcbiAgICBpZiAodGhpcy5kaXJ0eSlcbiAgICB7XG4gICAgICAgIHRoaXMudXBkYXRlVGV4dCgpO1xuICAgICAgICB0aGlzLmRpcnR5ID0gZmFsc2U7XG4gICAgfVxufTtcblxuQml0bWFwVGV4dC5mb250cyA9IHt9O1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi9jb3JlJyk7XG5cbi8qKlxuICogQSBNb3ZpZUNsaXAgaXMgYSBzaW1wbGUgd2F5IHRvIGRpc3BsYXkgYW4gYW5pbWF0aW9uIGRlcGljdGVkIGJ5IGEgbGlzdCBvZiB0ZXh0dXJlcy5cbiAqXG4gKiBgYGBqc1xuICogdmFyIGFsaWVuSW1hZ2VzID0gW1wiaW1hZ2Vfc2VxdWVuY2VfMDEucG5nXCIsXCJpbWFnZV9zZXF1ZW5jZV8wMi5wbmdcIixcImltYWdlX3NlcXVlbmNlXzAzLnBuZ1wiLFwiaW1hZ2Vfc2VxdWVuY2VfMDQucG5nXCJdO1xuICogdmFyIHRleHR1cmVBcnJheSA9IFtdO1xuICpcbiAqIGZvciAodmFyIGk9MDsgaSA8IDQ7IGkrKylcbiAqIHtcbiAqICAgICAgdmFyIHRleHR1cmUgPSBQSVhJLlRleHR1cmUuZnJvbUltYWdlKGFsaWVuSW1hZ2VzW2ldKTtcbiAqICAgICAgdGV4dHVyZUFycmF5LnB1c2godGV4dHVyZSk7XG4gKiB9O1xuICpcbiAqIHZhciBtYyA9IG5ldyBQSVhJLk1vdmllQ2xpcCh0ZXh0dXJlQXJyYXkpO1xuICogYGBgXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLlNwcml0ZVxuICogQG1lbWJlcm9mIFBJWEkuZXh0cmFzXG4gKiBAcGFyYW0gdGV4dHVyZXMge1BJWEkuVGV4dHVyZVtdfE9iamVjdFtdfSBhbiBhcnJheSBvZiB7QGxpbmsgUElYSS5UZXh0dXJlfSBvciBmcmFtZSBvYmplY3RzIHRoYXQgbWFrZSB1cCB0aGUgYW5pbWF0aW9uXG4gKiBAcGFyYW0gdGV4dHVyZXNbXS50ZXh0dXJlIHtQSVhJLlRleHR1cmV9IHRoZSB7QGxpbmsgUElYSS5UZXh0dXJlfSBvZiB0aGUgZnJhbWVcbiAqIEBwYXJhbSB0ZXh0dXJlc1tdLnRpbWUge251bWJlcn0gdGhlIGR1cmF0aW9uIG9mIHRoZSBmcmFtZSBpbiBtc1xuICovXG5mdW5jdGlvbiBNb3ZpZUNsaXAodGV4dHVyZXMpXG57XG4gICAgY29yZS5TcHJpdGUuY2FsbCh0aGlzLCB0ZXh0dXJlc1swXSBpbnN0YW5jZW9mIGNvcmUuVGV4dHVyZSA/IHRleHR1cmVzWzBdIDogdGV4dHVyZXNbMF0udGV4dHVyZSk7XG5cbiAgICAvKipcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX3RleHR1cmVzID0gbnVsbDtcblxuICAgIC8qKlxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fZHVyYXRpb25zID0gbnVsbDtcblxuICAgIHRoaXMudGV4dHVyZXMgPSB0ZXh0dXJlcztcblxuICAgIC8qKlxuICAgICAqIFRoZSBzcGVlZCB0aGF0IHRoZSBNb3ZpZUNsaXAgd2lsbCBwbGF5IGF0LiBIaWdoZXIgaXMgZmFzdGVyLCBsb3dlciBpcyBzbG93ZXJcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAxXG4gICAgICovXG4gICAgdGhpcy5hbmltYXRpb25TcGVlZCA9IDE7XG5cbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIG9yIG5vdCB0aGUgbW92aWUgY2xpcCByZXBlYXRzIGFmdGVyIHBsYXlpbmcuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqIEBkZWZhdWx0IHRydWVcbiAgICAgKi9cbiAgICB0aGlzLmxvb3AgPSB0cnVlO1xuXG4gICAgLyoqXG4gICAgICogRnVuY3Rpb24gdG8gY2FsbCB3aGVuIGEgTW92aWVDbGlwIGZpbmlzaGVzIHBsYXlpbmdcbiAgICAgKlxuICAgICAqIEBtZXRob2RcbiAgICAgKiBAbWVtYmVyb2YgUElYSS5leHRyYXMuTW92aWVDbGlwI1xuICAgICAqL1xuICAgIHRoaXMub25Db21wbGV0ZSA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBFbGFwc2VkIHRpbWUgc2luY2UgYW5pbWF0aW9uIGhhcyBiZWVuIHN0YXJ0ZWQsIHVzZWQgaW50ZXJuYWxseSB0byBkaXNwbGF5IGN1cnJlbnQgdGV4dHVyZVxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fY3VycmVudFRpbWUgPSAwO1xuXG4gICAgLyoqXG4gICAgICogSW5kaWNhdGVzIGlmIHRoZSBNb3ZpZUNsaXAgaXMgY3VycmVudGx5IHBsYXlpbmdcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICogQHJlYWRvbmx5XG4gICAgICovXG4gICAgdGhpcy5wbGF5aW5nID0gZmFsc2U7XG59XG5cbi8vIGNvbnN0cnVjdG9yXG5Nb3ZpZUNsaXAucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShjb3JlLlNwcml0ZS5wcm90b3R5cGUpO1xuTW92aWVDbGlwLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IE1vdmllQ2xpcDtcbm1vZHVsZS5leHBvcnRzID0gTW92aWVDbGlwO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhNb3ZpZUNsaXAucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogdG90YWxGcmFtZXMgaXMgdGhlIHRvdGFsIG51bWJlciBvZiBmcmFtZXMgaW4gdGhlIE1vdmllQ2xpcC4gVGhpcyBpcyB0aGUgc2FtZSBhcyBudW1iZXIgb2YgdGV4dHVyZXNcbiAgICAgKiBhc3NpZ25lZCB0byB0aGUgTW92aWVDbGlwLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmV4dHJhcy5Nb3ZpZUNsaXAjXG4gICAgICogQGRlZmF1bHQgMFxuICAgICAqIEByZWFkb25seVxuICAgICAqL1xuICAgIHRvdGFsRnJhbWVzOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24oKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fdGV4dHVyZXMubGVuZ3RoO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFRoZSBhcnJheSBvZiB0ZXh0dXJlcyB1c2VkIGZvciB0aGlzIE1vdmllQ2xpcFxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5UZXh0dXJlW119XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZXh0cmFzLk1vdmllQ2xpcCNcbiAgICAgKlxuICAgICAqL1xuICAgIHRleHR1cmVzOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3RleHR1cmVzO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgaWYodmFsdWVbMF0gaW5zdGFuY2VvZiBjb3JlLlRleHR1cmUpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdGhpcy5fdGV4dHVyZXMgPSB2YWx1ZTtcbiAgICAgICAgICAgICAgICB0aGlzLl9kdXJhdGlvbnMgPSBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHRoaXMuX3RleHR1cmVzID0gW107XG4gICAgICAgICAgICAgICAgdGhpcy5fZHVyYXRpb25zID0gW107XG4gICAgICAgICAgICAgICAgZm9yKHZhciBpID0gMDsgaSA8IHZhbHVlLmxlbmd0aDsgaSsrKVxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fdGV4dHVyZXMucHVzaCh2YWx1ZVtpXS50ZXh0dXJlKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fZHVyYXRpb25zLnB1c2godmFsdWVbaV0udGltZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICogVGhlIE1vdmllQ2xpcHMgY3VycmVudCBmcmFtZSBpbmRleFxuICAgICpcbiAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAqIEBtZW1iZXJvZiBQSVhJLmV4dHJhcy5Nb3ZpZUNsaXAjXG4gICAgKiBAcmVhZG9ubHlcbiAgICAqL1xuICAgIGN1cnJlbnRGcmFtZToge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHZhciBjdXJyZW50RnJhbWUgPSBNYXRoLmZsb29yKHRoaXMuX2N1cnJlbnRUaW1lKSAlIHRoaXMuX3RleHR1cmVzLmxlbmd0aDtcbiAgICAgICAgICAgIGlmIChjdXJyZW50RnJhbWUgPCAwKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGN1cnJlbnRGcmFtZSArPSB0aGlzLl90ZXh0dXJlcy5sZW5ndGg7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gY3VycmVudEZyYW1lO1xuICAgICAgICB9XG4gICAgfVxuXG59KTtcblxuLyoqXG4gKiBTdG9wcyB0aGUgTW92aWVDbGlwXG4gKlxuICovXG5Nb3ZpZUNsaXAucHJvdG90eXBlLnN0b3AgPSBmdW5jdGlvbiAoKVxue1xuICAgIGlmKCF0aGlzLnBsYXlpbmcpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5wbGF5aW5nID0gZmFsc2U7XG4gICAgY29yZS50aWNrZXIuc2hhcmVkLnJlbW92ZSh0aGlzLnVwZGF0ZSwgdGhpcyk7XG59O1xuXG4vKipcbiAqIFBsYXlzIHRoZSBNb3ZpZUNsaXBcbiAqXG4gKi9cbk1vdmllQ2xpcC5wcm90b3R5cGUucGxheSA9IGZ1bmN0aW9uICgpXG57XG4gICAgaWYodGhpcy5wbGF5aW5nKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMucGxheWluZyA9IHRydWU7XG4gICAgY29yZS50aWNrZXIuc2hhcmVkLmFkZCh0aGlzLnVwZGF0ZSwgdGhpcyk7XG59O1xuXG4vKipcbiAqIFN0b3BzIHRoZSBNb3ZpZUNsaXAgYW5kIGdvZXMgdG8gYSBzcGVjaWZpYyBmcmFtZVxuICpcbiAqIEBwYXJhbSBmcmFtZU51bWJlciB7bnVtYmVyfSBmcmFtZSBpbmRleCB0byBzdG9wIGF0XG4gKi9cbk1vdmllQ2xpcC5wcm90b3R5cGUuZ290b0FuZFN0b3AgPSBmdW5jdGlvbiAoZnJhbWVOdW1iZXIpXG57XG4gICAgdGhpcy5zdG9wKCk7XG5cbiAgICB0aGlzLl9jdXJyZW50VGltZSA9IGZyYW1lTnVtYmVyO1xuXG4gICAgdGhpcy5fdGV4dHVyZSA9IHRoaXMuX3RleHR1cmVzW3RoaXMuY3VycmVudEZyYW1lXTtcbn07XG5cbi8qKlxuICogR29lcyB0byBhIHNwZWNpZmljIGZyYW1lIGFuZCBiZWdpbnMgcGxheWluZyB0aGUgTW92aWVDbGlwXG4gKlxuICogQHBhcmFtIGZyYW1lTnVtYmVyIHtudW1iZXJ9IGZyYW1lIGluZGV4IHRvIHN0YXJ0IGF0XG4gKi9cbk1vdmllQ2xpcC5wcm90b3R5cGUuZ290b0FuZFBsYXkgPSBmdW5jdGlvbiAoZnJhbWVOdW1iZXIpXG57XG4gICAgdGhpcy5fY3VycmVudFRpbWUgPSBmcmFtZU51bWJlcjtcblxuICAgIHRoaXMucGxheSgpO1xufTtcblxuLypcbiAqIFVwZGF0ZXMgdGhlIG9iamVjdCB0cmFuc2Zvcm0gZm9yIHJlbmRlcmluZ1xuICogQHByaXZhdGVcbiAqL1xuTW92aWVDbGlwLnByb3RvdHlwZS51cGRhdGUgPSBmdW5jdGlvbiAoZGVsdGFUaW1lKVxue1xuICAgIHZhciBlbGFwc2VkID0gdGhpcy5hbmltYXRpb25TcGVlZCAqIGRlbHRhVGltZTtcblxuICAgIGlmICh0aGlzLl9kdXJhdGlvbnMgIT09IG51bGwpXG4gICAge1xuICAgICAgICB2YXIgbGFnID0gdGhpcy5fY3VycmVudFRpbWUgJSAxICogdGhpcy5fZHVyYXRpb25zW3RoaXMuY3VycmVudEZyYW1lXTtcblxuICAgICAgICBsYWcgKz0gZWxhcHNlZCAvIDYwICogMTAwMDtcblxuICAgICAgICB3aGlsZSAobGFnIDwgMClcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5fY3VycmVudFRpbWUtLTtcbiAgICAgICAgICAgIGxhZyArPSB0aGlzLl9kdXJhdGlvbnNbdGhpcy5jdXJyZW50RnJhbWVdO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIHNpZ24gPSBNYXRoLnNpZ24odGhpcy5hbmltYXRpb25TcGVlZCAqIGRlbHRhVGltZSk7XG4gICAgICAgIHRoaXMuX2N1cnJlbnRUaW1lID0gTWF0aC5mbG9vcih0aGlzLl9jdXJyZW50VGltZSk7XG5cbiAgICAgICAgd2hpbGUgKGxhZyA+PSB0aGlzLl9kdXJhdGlvbnNbdGhpcy5jdXJyZW50RnJhbWVdKVxuICAgICAgICB7XG4gICAgICAgICAgICBsYWcgLT0gdGhpcy5fZHVyYXRpb25zW3RoaXMuY3VycmVudEZyYW1lXSAqIHNpZ247XG4gICAgICAgICAgICB0aGlzLl9jdXJyZW50VGltZSArPSBzaWduO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fY3VycmVudFRpbWUgKz0gbGFnIC8gdGhpcy5fZHVyYXRpb25zW3RoaXMuY3VycmVudEZyYW1lXTtcbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgdGhpcy5fY3VycmVudFRpbWUgKz0gZWxhcHNlZDtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5fY3VycmVudFRpbWUgPCAwICYmICF0aGlzLmxvb3ApXG4gICAge1xuICAgICAgICB0aGlzLmdvdG9BbmRTdG9wKDApO1xuXG4gICAgICAgIGlmICh0aGlzLm9uQ29tcGxldGUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMub25Db21wbGV0ZSgpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGVsc2UgaWYgKHRoaXMuX2N1cnJlbnRUaW1lID49IHRoaXMuX3RleHR1cmVzLmxlbmd0aCAmJiAhdGhpcy5sb29wKVxuICAgIHtcbiAgICAgICAgdGhpcy5nb3RvQW5kU3RvcCh0aGlzLl90ZXh0dXJlcy5sZW5ndGggLSAxKTtcblxuICAgICAgICBpZiAodGhpcy5vbkNvbXBsZXRlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLm9uQ29tcGxldGUoKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICB0aGlzLl90ZXh0dXJlID0gdGhpcy5fdGV4dHVyZXNbdGhpcy5jdXJyZW50RnJhbWVdO1xuICAgIH1cblxufTtcblxuLypcbiAqIFN0b3BzIHRoZSBNb3ZpZUNsaXAgYW5kIGRlc3Ryb3lzIGl0XG4gKlxuICovXG5Nb3ZpZUNsaXAucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoIClcbntcbiAgICB0aGlzLnN0b3AoKTtcbiAgICBjb3JlLlNwcml0ZS5wcm90b3R5cGUuZGVzdHJveS5jYWxsKHRoaXMpO1xufTtcblxuLyoqXG4gKiBBIHNob3J0IGhhbmQgd2F5IG9mIGNyZWF0aW5nIGEgbW92aWVjbGlwIGZyb20gYW4gYXJyYXkgb2YgZnJhbWUgaWRzXG4gKlxuICogQHN0YXRpY1xuICogQHBhcmFtIGZyYW1lcyB7c3RyaW5nW119IHRoZSBhcnJheSBvZiBmcmFtZXMgaWRzIHRoZSBtb3ZpZWNsaXAgd2lsbCB1c2UgYXMgaXRzIHRleHR1cmUgZnJhbWVzXG4gKi9cbk1vdmllQ2xpcC5mcm9tRnJhbWVzID0gZnVuY3Rpb24gKGZyYW1lcylcbntcbiAgICB2YXIgdGV4dHVyZXMgPSBbXTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZnJhbWVzLmxlbmd0aDsgKytpKVxuICAgIHtcbiAgICAgICAgdGV4dHVyZXMucHVzaChuZXcgY29yZS5UZXh0dXJlLmZyb21GcmFtZShmcmFtZXNbaV0pKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IE1vdmllQ2xpcCh0ZXh0dXJlcyk7XG59O1xuXG4vKipcbiAqIEEgc2hvcnQgaGFuZCB3YXkgb2YgY3JlYXRpbmcgYSBtb3ZpZWNsaXAgZnJvbSBhbiBhcnJheSBvZiBpbWFnZSBpZHNcbiAqXG4gKiBAc3RhdGljXG4gKiBAcGFyYW0gaW1hZ2VzIHtzdHJpbmdbXX0gdGhlIGFycmF5IG9mIGltYWdlIHVybHMgdGhlIG1vdmllY2xpcCB3aWxsIHVzZSBhcyBpdHMgdGV4dHVyZSBmcmFtZXNcbiAqL1xuTW92aWVDbGlwLmZyb21JbWFnZXMgPSBmdW5jdGlvbiAoaW1hZ2VzKVxue1xuICAgIHZhciB0ZXh0dXJlcyA9IFtdO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBpbWFnZXMubGVuZ3RoOyArK2kpXG4gICAge1xuICAgICAgICB0ZXh0dXJlcy5wdXNoKG5ldyBjb3JlLlRleHR1cmUuZnJvbUltYWdlKGltYWdlc1tpXSkpO1xuICAgIH1cblxuICAgIHJldHVybiBuZXcgTW92aWVDbGlwKHRleHR1cmVzKTtcbn07IiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi9jb3JlJyksXG4gICAgLy8gYSBzcHJpdGUgdXNlIGRmb3IgcmVuZGVyaW5nIHRleHR1cmVzLi5cbiAgICB0ZW1wUG9pbnQgPSBuZXcgY29yZS5Qb2ludCgpLFxuICAgIENhbnZhc1RpbnRlciA9IHJlcXVpcmUoJy4uL2NvcmUvcmVuZGVyZXJzL2NhbnZhcy91dGlscy9DYW52YXNUaW50ZXInKTtcblxuLyoqXG4gKiBBIHRpbGluZyBzcHJpdGUgaXMgYSBmYXN0IHdheSBvZiByZW5kZXJpbmcgYSB0aWxpbmcgaW1hZ2VcbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuU3ByaXRlXG4gKiBAbWVtYmVyb2YgUElYSS5leHRyYXNcbiAqIEBwYXJhbSB0ZXh0dXJlIHtUZXh0dXJlfSB0aGUgdGV4dHVyZSBvZiB0aGUgdGlsaW5nIHNwcml0ZVxuICogQHBhcmFtIHdpZHRoIHtudW1iZXJ9ICB0aGUgd2lkdGggb2YgdGhlIHRpbGluZyBzcHJpdGVcbiAqIEBwYXJhbSBoZWlnaHQge251bWJlcn0gdGhlIGhlaWdodCBvZiB0aGUgdGlsaW5nIHNwcml0ZVxuICovXG5mdW5jdGlvbiBUaWxpbmdTcHJpdGUodGV4dHVyZSwgd2lkdGgsIGhlaWdodClcbntcbiAgICBjb3JlLlNwcml0ZS5jYWxsKHRoaXMsIHRleHR1cmUpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHNjYWxpbmcgb2YgdGhlIGltYWdlIHRoYXQgaXMgYmVpbmcgdGlsZWRcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuUG9pbnR9XG4gICAgICovXG4gICAgdGhpcy50aWxlU2NhbGUgPSBuZXcgY29yZS5Qb2ludCgxLDEpO1xuXG5cbiAgICAvKipcbiAgICAgKiBUaGUgb2Zmc2V0IHBvc2l0aW9uIG9mIHRoZSBpbWFnZSB0aGF0IGlzIGJlaW5nIHRpbGVkXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlBvaW50fVxuICAgICAqL1xuICAgIHRoaXMudGlsZVBvc2l0aW9uID0gbmV3IGNvcmUuUG9pbnQoMCwwKTtcblxuICAgIC8vLy8vIHByaXZhdGVcblxuICAgIC8qKlxuICAgICAqIFRoZSB3aXRoIG9mIHRoZSB0aWxpbmcgc3ByaXRlXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl93aWR0aCA9IHdpZHRoIHx8IDEwMDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBoZWlnaHQgb2YgdGhlIHRpbGluZyBzcHJpdGVcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX2hlaWdodCA9IGhlaWdodCB8fCAxMDA7XG5cbiAgICAvKipcbiAgICAgKiBBbiBpbnRlcm5hbCBXZWJHTCBVViBjYWNoZS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuVGV4dHVyZVV2c31cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX3V2cyA9IG5ldyBjb3JlLlRleHR1cmVVdnMoKTtcblxuICAgIHRoaXMuX2NhbnZhc1BhdHRlcm4gPSBudWxsO1xuXG4gICAgLy9UT0RPIG1vdmUuLlxuICAgIHRoaXMuc2hhZGVyID0gbmV3IGNvcmUuQWJzdHJhY3RGaWx0ZXIoXG5cbiAgICAgIFtcbiAgICAgICAgJ3ByZWNpc2lvbiBsb3dwIGZsb2F0OycsXG4gICAgICAgICdhdHRyaWJ1dGUgdmVjMiBhVmVydGV4UG9zaXRpb247JyxcbiAgICAgICAgJ2F0dHJpYnV0ZSB2ZWMyIGFUZXh0dXJlQ29vcmQ7JyxcbiAgICAgICAgJ2F0dHJpYnV0ZSB2ZWM0IGFDb2xvcjsnLFxuXG4gICAgICAgICd1bmlmb3JtIG1hdDMgcHJvamVjdGlvbk1hdHJpeDsnLFxuXG4gICAgICAgICd1bmlmb3JtIHZlYzQgdUZyYW1lOycsXG4gICAgICAgICd1bmlmb3JtIHZlYzQgdVRyYW5zZm9ybTsnLFxuXG4gICAgICAgICd2YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDsnLFxuICAgICAgICAndmFyeWluZyB2ZWM0IHZDb2xvcjsnLFxuXG4gICAgICAgICd2b2lkIG1haW4odm9pZCl7JyxcbiAgICAgICAgJyAgIGdsX1Bvc2l0aW9uID0gdmVjNCgocHJvamVjdGlvbk1hdHJpeCAqIHZlYzMoYVZlcnRleFBvc2l0aW9uLCAxLjApKS54eSwgMC4wLCAxLjApOycsXG5cbiAgICAgICAgJyAgIHZlYzIgY29vcmQgPSBhVGV4dHVyZUNvb3JkOycsXG4gICAgICAgICcgICBjb29yZCAtPSB1VHJhbnNmb3JtLnh5OycsXG4gICAgICAgICcgICBjb29yZCAvPSB1VHJhbnNmb3JtLnp3OycsXG4gICAgICAgICcgICB2VGV4dHVyZUNvb3JkID0gY29vcmQ7JyxcblxuICAgICAgICAnICAgdkNvbG9yID0gdmVjNChhQ29sb3IucmdiICogYUNvbG9yLmEsIGFDb2xvci5hKTsnLFxuICAgICAgICAnfSdcbiAgICAgIF0uam9pbignXFxuJyksXG4gICAgICBbXG4gICAgICAgICdwcmVjaXNpb24gbG93cCBmbG9hdDsnLFxuXG4gICAgICAgICd2YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDsnLFxuICAgICAgICAndmFyeWluZyB2ZWM0IHZDb2xvcjsnLFxuXG4gICAgICAgICd1bmlmb3JtIHNhbXBsZXIyRCB1U2FtcGxlcjsnLFxuICAgICAgICAndW5pZm9ybSB2ZWM0IHVGcmFtZTsnLFxuICAgICAgICAndW5pZm9ybSB2ZWMyIHVQaXhlbFNpemU7JyxcblxuICAgICAgICAndm9pZCBtYWluKHZvaWQpeycsXG5cbiAgICAgICAgJyAgIHZlYzIgY29vcmQgPSBtb2QodlRleHR1cmVDb29yZCwgdUZyYW1lLnp3KTsnLFxuICAgICAgICAnICAgY29vcmQgPSBjbGFtcChjb29yZCwgdVBpeGVsU2l6ZSwgdUZyYW1lLnp3IC0gdVBpeGVsU2l6ZSk7JyxcbiAgICAgICAgJyAgIGNvb3JkICs9IHVGcmFtZS54eTsnLFxuXG4gICAgICAgICcgICBnbF9GcmFnQ29sb3IgPSAgdGV4dHVyZTJEKHVTYW1wbGVyLCBjb29yZCkgKiB2Q29sb3IgOycsXG4gICAgICAgICd9J1xuICAgICAgXS5qb2luKCdcXG4nKSxcblxuICAgICAgICAgICAgLy8gc2V0IHRoZSB1bmlmb3Jtc1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHVGcmFtZTogeyB0eXBlOiAnNGZ2JywgdmFsdWU6IFswLDAsMSwxXSB9LFxuICAgICAgICAgICAgICAgIHVUcmFuc2Zvcm06IHsgdHlwZTogJzRmdicsIHZhbHVlOiBbMCwwLDEsMV0gfSxcbiAgICAgICAgICAgICAgICB1UGl4ZWxTaXplIDogeyB0eXBlIDogJzJmdicsIHZhbHVlOiBbMSwgMV19XG4gICAgICAgICAgICB9XG4gICAgICApO1xufVxuXG5UaWxpbmdTcHJpdGUucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShjb3JlLlNwcml0ZS5wcm90b3R5cGUpO1xuVGlsaW5nU3ByaXRlLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFRpbGluZ1Nwcml0ZTtcbm1vZHVsZS5leHBvcnRzID0gVGlsaW5nU3ByaXRlO1xuXG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKFRpbGluZ1Nwcml0ZS5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBUaGUgd2lkdGggb2YgdGhlIHNwcml0ZSwgc2V0dGluZyB0aGlzIHdpbGwgYWN0dWFsbHkgbW9kaWZ5IHRoZSBzY2FsZSB0byBhY2hpZXZlIHRoZSB2YWx1ZSBzZXRcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5leHRyYXMuVGlsaW5nU3ByaXRlI1xuICAgICAqL1xuICAgIHdpZHRoOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3dpZHRoO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5fd2lkdGggPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBUaGUgaGVpZ2h0IG9mIHRoZSBUaWxpbmdTcHJpdGUsIHNldHRpbmcgdGhpcyB3aWxsIGFjdHVhbGx5IG1vZGlmeSB0aGUgc2NhbGUgdG8gYWNoaWV2ZSB0aGUgdmFsdWUgc2V0XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZXh0cmFzLlRpbGluZ1Nwcml0ZSNcbiAgICAgKi9cbiAgICBoZWlnaHQ6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5faGVpZ2h0O1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5faGVpZ2h0ID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG59KTtcblxuVGlsaW5nU3ByaXRlLnByb3RvdHlwZS5fb25UZXh0dXJlVXBkYXRlID0gZnVuY3Rpb24gKClcbntcbiAgICByZXR1cm47XG59O1xuXG5cbi8qKlxuICogUmVuZGVycyB0aGUgb2JqZWN0IHVzaW5nIHRoZSBXZWJHTCByZW5kZXJlclxuICpcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5XZWJHTFJlbmRlcmVyfVxuICogQHByaXZhdGVcbiAqL1xuVGlsaW5nU3ByaXRlLnByb3RvdHlwZS5fcmVuZGVyV2ViR0wgPSBmdW5jdGlvbiAocmVuZGVyZXIpXG57XG4gICAgLy8gdHdlYWsgb3VyIHRleHR1cmUgdGVtcG9yYXJpbHkuLlxuICAgIHZhciB0ZXh0dXJlID0gdGhpcy5fdGV4dHVyZTtcblxuICAgIGlmKCF0ZXh0dXJlIHx8ICF0ZXh0dXJlLl91dnMpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFyIHRlbXBVdnMgPSB0ZXh0dXJlLl91dnMsXG4gICAgICAgIHRlbXBXaWR0aCA9IHRleHR1cmUuX2ZyYW1lLndpZHRoLFxuICAgICAgICB0ZW1wSGVpZ2h0ID0gdGV4dHVyZS5fZnJhbWUuaGVpZ2h0LFxuICAgICAgICB0dyA9IHRleHR1cmUuYmFzZVRleHR1cmUud2lkdGgsXG4gICAgICAgIHRoID0gdGV4dHVyZS5iYXNlVGV4dHVyZS5oZWlnaHQ7XG5cbiAgICB0ZXh0dXJlLl91dnMgPSB0aGlzLl91dnM7XG4gICAgdGV4dHVyZS5fZnJhbWUud2lkdGggPSB0aGlzLndpZHRoO1xuICAgIHRleHR1cmUuX2ZyYW1lLmhlaWdodCA9IHRoaXMuaGVpZ2h0O1xuXG4gICAgdGhpcy5zaGFkZXIudW5pZm9ybXMudVBpeGVsU2l6ZS52YWx1ZVswXSA9IDEuMC90dztcbiAgICB0aGlzLnNoYWRlci51bmlmb3Jtcy51UGl4ZWxTaXplLnZhbHVlWzFdID0gMS4wL3RoO1xuXG4gICAgdGhpcy5zaGFkZXIudW5pZm9ybXMudUZyYW1lLnZhbHVlWzBdID0gdGVtcFV2cy54MDtcbiAgICB0aGlzLnNoYWRlci51bmlmb3Jtcy51RnJhbWUudmFsdWVbMV0gPSB0ZW1wVXZzLnkwO1xuICAgIHRoaXMuc2hhZGVyLnVuaWZvcm1zLnVGcmFtZS52YWx1ZVsyXSA9IHRlbXBVdnMueDEgLSB0ZW1wVXZzLngwO1xuICAgIHRoaXMuc2hhZGVyLnVuaWZvcm1zLnVGcmFtZS52YWx1ZVszXSA9IHRlbXBVdnMueTIgLSB0ZW1wVXZzLnkwO1xuXG4gICAgdGhpcy5zaGFkZXIudW5pZm9ybXMudVRyYW5zZm9ybS52YWx1ZVswXSA9ICh0aGlzLnRpbGVQb3NpdGlvbi54ICUgKHRlbXBXaWR0aCAqIHRoaXMudGlsZVNjYWxlLngpKSAvIHRoaXMuX3dpZHRoO1xuICAgIHRoaXMuc2hhZGVyLnVuaWZvcm1zLnVUcmFuc2Zvcm0udmFsdWVbMV0gPSAodGhpcy50aWxlUG9zaXRpb24ueSAlICh0ZW1wSGVpZ2h0ICogdGhpcy50aWxlU2NhbGUueSkpIC8gdGhpcy5faGVpZ2h0O1xuICAgIHRoaXMuc2hhZGVyLnVuaWZvcm1zLnVUcmFuc2Zvcm0udmFsdWVbMl0gPSAoIHR3IC8gdGhpcy5fd2lkdGggKSAqIHRoaXMudGlsZVNjYWxlLng7XG4gICAgdGhpcy5zaGFkZXIudW5pZm9ybXMudVRyYW5zZm9ybS52YWx1ZVszXSA9ICggdGggLyB0aGlzLl9oZWlnaHQgKSAqIHRoaXMudGlsZVNjYWxlLnk7XG5cbiAgICByZW5kZXJlci5zZXRPYmplY3RSZW5kZXJlcihyZW5kZXJlci5wbHVnaW5zLnNwcml0ZSk7XG4gICAgcmVuZGVyZXIucGx1Z2lucy5zcHJpdGUucmVuZGVyKHRoaXMpO1xuXG4gICAgdGV4dHVyZS5fdXZzID0gdGVtcFV2cztcbiAgICB0ZXh0dXJlLl9mcmFtZS53aWR0aCA9IHRlbXBXaWR0aDtcbiAgICB0ZXh0dXJlLl9mcmFtZS5oZWlnaHQgPSB0ZW1wSGVpZ2h0O1xufTtcblxuLyoqXG4gKiBSZW5kZXJzIHRoZSBvYmplY3QgdXNpbmcgdGhlIENhbnZhcyByZW5kZXJlclxuICpcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5DYW52YXNSZW5kZXJlcn0gYSByZWZlcmVuY2UgdG8gdGhlIGNhbnZhcyByZW5kZXJlclxuICogQHByaXZhdGVcbiAqL1xuVGlsaW5nU3ByaXRlLnByb3RvdHlwZS5fcmVuZGVyQ2FudmFzID0gZnVuY3Rpb24gKHJlbmRlcmVyKVxue1xuICAgIHZhciB0ZXh0dXJlID0gdGhpcy5fdGV4dHVyZTtcblxuICAgIGlmICghdGV4dHVyZS5iYXNlVGV4dHVyZS5oYXNMb2FkZWQpXG4gICAge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHZhciBjb250ZXh0ID0gcmVuZGVyZXIuY29udGV4dCxcbiAgICAgICAgdHJhbnNmb3JtID0gdGhpcy53b3JsZFRyYW5zZm9ybSxcbiAgICAgICAgcmVzb2x1dGlvbiA9IHJlbmRlcmVyLnJlc29sdXRpb24sXG4gICAgICAgIGJhc2VUZXh0dXJlID0gdGV4dHVyZS5iYXNlVGV4dHVyZSxcbiAgICAgICAgbW9kWCA9ICh0aGlzLnRpbGVQb3NpdGlvbi54IC8gdGhpcy50aWxlU2NhbGUueCkgJSB0ZXh0dXJlLl9mcmFtZS53aWR0aCxcbiAgICAgICAgbW9kWSA9ICh0aGlzLnRpbGVQb3NpdGlvbi55IC8gdGhpcy50aWxlU2NhbGUueSkgJSB0ZXh0dXJlLl9mcmFtZS5oZWlnaHQ7XG5cbiAgICAvLyBjcmVhdGUgYSBuaWNlIHNoaW55IHBhdHRlcm4hXG4gICAgLy8gVE9ETyB0aGlzIG5lZWRzIHRvIGJlIHJlZnJlc2hlZCBpZiB0ZXh0dXJlIGNoYW5nZXMuLlxuICAgIGlmKCF0aGlzLl9jYW52YXNQYXR0ZXJuKVxuICAgIHtcbiAgICAgICAgLy8gY3V0IGFuIG9iamVjdCBmcm9tIGEgc3ByaXRlc2hlZXQuLlxuICAgICAgICB2YXIgdGVtcENhbnZhcyA9IG5ldyBjb3JlLkNhbnZhc0J1ZmZlcih0ZXh0dXJlLl9mcmFtZS53aWR0aCwgdGV4dHVyZS5fZnJhbWUuaGVpZ2h0KTtcblxuICAgICAgICAvLyBUaW50IHRoZSB0aWxpbmcgc3ByaXRlXG4gICAgICAgIGlmICh0aGlzLnRpbnQgIT09IDB4RkZGRkZGKVxuICAgICAgICB7XG4gICAgICAgICAgICBpZiAodGhpcy5jYWNoZWRUaW50ICE9PSB0aGlzLnRpbnQpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdGhpcy5jYWNoZWRUaW50ID0gdGhpcy50aW50O1xuXG4gICAgICAgICAgICAgICAgdGhpcy50aW50ZWRUZXh0dXJlID0gQ2FudmFzVGludGVyLmdldFRpbnRlZFRleHR1cmUodGhpcywgdGhpcy50aW50KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRlbXBDYW52YXMuY29udGV4dC5kcmF3SW1hZ2UodGhpcy50aW50ZWRUZXh0dXJlLCAwLCAwKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRlbXBDYW52YXMuY29udGV4dC5kcmF3SW1hZ2UoYmFzZVRleHR1cmUuc291cmNlLCAtdGV4dHVyZS5fZnJhbWUueCwgLXRleHR1cmUuX2ZyYW1lLnkpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX2NhbnZhc1BhdHRlcm4gPSB0ZW1wQ2FudmFzLmNvbnRleHQuY3JlYXRlUGF0dGVybiggdGVtcENhbnZhcy5jYW52YXMsICdyZXBlYXQnICk7XG4gICAgfVxuXG4gICAgLy8gc2V0IGNvbnRleHQgc3RhdGUuLlxuICAgIGNvbnRleHQuZ2xvYmFsQWxwaGEgPSB0aGlzLndvcmxkQWxwaGE7XG4gICAgY29udGV4dC5zZXRUcmFuc2Zvcm0odHJhbnNmb3JtLmEgKiByZXNvbHV0aW9uLFxuICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2Zvcm0uYiAqIHJlc29sdXRpb24sXG4gICAgICAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybS5jICogcmVzb2x1dGlvbixcbiAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtLmQgKiByZXNvbHV0aW9uLFxuICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2Zvcm0udHggKiByZXNvbHV0aW9uLFxuICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2Zvcm0udHkgKiByZXNvbHV0aW9uKTtcblxuICAgIC8vIFRPRE8gLSB0aGlzIHNob3VsZCBiZSByb2xsZWQgaW50byB0aGUgc2V0VHJhbnNmb3JtIGFib3ZlLi5cbiAgICBjb250ZXh0LnNjYWxlKHRoaXMudGlsZVNjYWxlLngsdGhpcy50aWxlU2NhbGUueSk7XG5cbiAgICBjb250ZXh0LnRyYW5zbGF0ZShtb2RYICsgKHRoaXMuYW5jaG9yLnggKiAtdGhpcy5fd2lkdGggKSxcbiAgICAgICAgICAgICAgICAgICAgICBtb2RZICsgKHRoaXMuYW5jaG9yLnkgKiAtdGhpcy5faGVpZ2h0KSk7XG5cbiAgICAvLyBjaGVjayBibGVuZCBtb2RlXG4gICAgdmFyIGNvbXBvc2l0ZU9wZXJhdGlvbiA9IHJlbmRlcmVyLmJsZW5kTW9kZXNbdGhpcy5ibGVuZE1vZGVdO1xuICAgIGlmIChjb21wb3NpdGVPcGVyYXRpb24gIT09IHJlbmRlcmVyLmNvbnRleHQuZ2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uKVxuICAgIHtcbiAgICAgICAgY29udGV4dC5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb24gPSBjb21wb3NpdGVPcGVyYXRpb247XG4gICAgfVxuXG4gICAgLy8gZmlsbCB0aGUgcGF0dGVybiFcbiAgICBjb250ZXh0LmZpbGxTdHlsZSA9IHRoaXMuX2NhbnZhc1BhdHRlcm47XG4gICAgY29udGV4dC5maWxsUmVjdCgtbW9kWCxcbiAgICAgICAgICAgICAgICAgICAgIC1tb2RZLFxuICAgICAgICAgICAgICAgICAgICAgdGhpcy5fd2lkdGggLyB0aGlzLnRpbGVTY2FsZS54LFxuICAgICAgICAgICAgICAgICAgICAgdGhpcy5faGVpZ2h0IC8gdGhpcy50aWxlU2NhbGUueSk7XG5cblxuICAgIC8vVE9ETyAtIHByZXR0eSBzdXJlIHRoaXMgY2FuIGJlIGRlbGV0ZWQuLi5cbiAgICAvL2NvbnRleHQudHJhbnNsYXRlKC10aGlzLnRpbGVQb3NpdGlvbi54ICsgKHRoaXMuYW5jaG9yLnggKiB0aGlzLl93aWR0aCksIC10aGlzLnRpbGVQb3NpdGlvbi55ICsgKHRoaXMuYW5jaG9yLnkgKiB0aGlzLl9oZWlnaHQpKTtcbiAgICAvL2NvbnRleHQuc2NhbGUoMSAvIHRoaXMudGlsZVNjYWxlLngsIDEgLyB0aGlzLnRpbGVTY2FsZS55KTtcbn07XG5cblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBmcmFtaW5nIHJlY3RhbmdsZSBvZiB0aGUgc3ByaXRlIGFzIGEgUmVjdGFuZ2xlIG9iamVjdFxuKlxuICogQHJldHVybiB7UElYSS5SZWN0YW5nbGV9IHRoZSBmcmFtaW5nIHJlY3RhbmdsZVxuICovXG5UaWxpbmdTcHJpdGUucHJvdG90eXBlLmdldEJvdW5kcyA9IGZ1bmN0aW9uICgpXG57XG4gICAgdmFyIHdpZHRoID0gdGhpcy5fd2lkdGg7XG4gICAgdmFyIGhlaWdodCA9IHRoaXMuX2hlaWdodDtcblxuICAgIHZhciB3MCA9IHdpZHRoICogKDEtdGhpcy5hbmNob3IueCk7XG4gICAgdmFyIHcxID0gd2lkdGggKiAtdGhpcy5hbmNob3IueDtcblxuICAgIHZhciBoMCA9IGhlaWdodCAqICgxLXRoaXMuYW5jaG9yLnkpO1xuICAgIHZhciBoMSA9IGhlaWdodCAqIC10aGlzLmFuY2hvci55O1xuXG4gICAgdmFyIHdvcmxkVHJhbnNmb3JtID0gdGhpcy53b3JsZFRyYW5zZm9ybTtcblxuICAgIHZhciBhID0gd29ybGRUcmFuc2Zvcm0uYTtcbiAgICB2YXIgYiA9IHdvcmxkVHJhbnNmb3JtLmI7XG4gICAgdmFyIGMgPSB3b3JsZFRyYW5zZm9ybS5jO1xuICAgIHZhciBkID0gd29ybGRUcmFuc2Zvcm0uZDtcbiAgICB2YXIgdHggPSB3b3JsZFRyYW5zZm9ybS50eDtcbiAgICB2YXIgdHkgPSB3b3JsZFRyYW5zZm9ybS50eTtcblxuICAgIHZhciB4MSA9IGEgKiB3MSArIGMgKiBoMSArIHR4O1xuICAgIHZhciB5MSA9IGQgKiBoMSArIGIgKiB3MSArIHR5O1xuXG4gICAgdmFyIHgyID0gYSAqIHcwICsgYyAqIGgxICsgdHg7XG4gICAgdmFyIHkyID0gZCAqIGgxICsgYiAqIHcwICsgdHk7XG5cbiAgICB2YXIgeDMgPSBhICogdzAgKyBjICogaDAgKyB0eDtcbiAgICB2YXIgeTMgPSBkICogaDAgKyBiICogdzAgKyB0eTtcblxuICAgIHZhciB4NCA9ICBhICogdzEgKyBjICogaDAgKyB0eDtcbiAgICB2YXIgeTQgPSAgZCAqIGgwICsgYiAqIHcxICsgdHk7XG5cbiAgICB2YXIgbWluWCxcbiAgICAgICAgbWF4WCxcbiAgICAgICAgbWluWSxcbiAgICAgICAgbWF4WTtcblxuICAgIG1pblggPSB4MTtcbiAgICBtaW5YID0geDIgPCBtaW5YID8geDIgOiBtaW5YO1xuICAgIG1pblggPSB4MyA8IG1pblggPyB4MyA6IG1pblg7XG4gICAgbWluWCA9IHg0IDwgbWluWCA/IHg0IDogbWluWDtcblxuICAgIG1pblkgPSB5MTtcbiAgICBtaW5ZID0geTIgPCBtaW5ZID8geTIgOiBtaW5ZO1xuICAgIG1pblkgPSB5MyA8IG1pblkgPyB5MyA6IG1pblk7XG4gICAgbWluWSA9IHk0IDwgbWluWSA/IHk0IDogbWluWTtcblxuICAgIG1heFggPSB4MTtcbiAgICBtYXhYID0geDIgPiBtYXhYID8geDIgOiBtYXhYO1xuICAgIG1heFggPSB4MyA+IG1heFggPyB4MyA6IG1heFg7XG4gICAgbWF4WCA9IHg0ID4gbWF4WCA/IHg0IDogbWF4WDtcblxuICAgIG1heFkgPSB5MTtcbiAgICBtYXhZID0geTIgPiBtYXhZID8geTIgOiBtYXhZO1xuICAgIG1heFkgPSB5MyA+IG1heFkgPyB5MyA6IG1heFk7XG4gICAgbWF4WSA9IHk0ID4gbWF4WSA/IHk0IDogbWF4WTtcblxuICAgIHZhciBib3VuZHMgPSB0aGlzLl9ib3VuZHM7XG5cbiAgICBib3VuZHMueCA9IG1pblg7XG4gICAgYm91bmRzLndpZHRoID0gbWF4WCAtIG1pblg7XG5cbiAgICBib3VuZHMueSA9IG1pblk7XG4gICAgYm91bmRzLmhlaWdodCA9IG1heFkgLSBtaW5ZO1xuXG4gICAgLy8gc3RvcmUgYSByZWZlcmVuY2Ugc28gdGhhdCBpZiB0aGlzIGZ1bmN0aW9uIGdldHMgY2FsbGVkIGFnYWluIGluIHRoZSByZW5kZXIgY3ljbGUgd2UgZG8gbm90IGhhdmUgdG8gcmVjYWxjdWxhdGVcbiAgICB0aGlzLl9jdXJyZW50Qm91bmRzID0gYm91bmRzO1xuXG4gICAgcmV0dXJuIGJvdW5kcztcbn07XG5cbi8qKlxuICogQ2hlY2tzIGlmIGEgcG9pbnQgaXMgaW5zaWRlIHRoaXMgdGlsaW5nIHNwcml0ZVxuICogQHBhcmFtIHBvaW50IHtQSVhJLlBvaW50fSB0aGUgcG9pbnQgdG8gY2hlY2tcbiAqL1xuVGlsaW5nU3ByaXRlLnByb3RvdHlwZS5jb250YWluc1BvaW50ID0gZnVuY3Rpb24oIHBvaW50IClcbntcbiAgICB0aGlzLndvcmxkVHJhbnNmb3JtLmFwcGx5SW52ZXJzZShwb2ludCwgIHRlbXBQb2ludCk7XG5cbiAgICB2YXIgd2lkdGggPSB0aGlzLl93aWR0aDtcbiAgICB2YXIgaGVpZ2h0ID0gdGhpcy5faGVpZ2h0O1xuICAgIHZhciB4MSA9IC13aWR0aCAqIHRoaXMuYW5jaG9yLng7XG4gICAgdmFyIHkxO1xuXG4gICAgaWYgKCB0ZW1wUG9pbnQueCA+IHgxICYmIHRlbXBQb2ludC54IDwgeDEgKyB3aWR0aCApXG4gICAge1xuICAgICAgICB5MSA9IC1oZWlnaHQgKiB0aGlzLmFuY2hvci55O1xuXG4gICAgICAgIGlmICggdGVtcFBvaW50LnkgPiB5MSAmJiB0ZW1wUG9pbnQueSA8IHkxICsgaGVpZ2h0IClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2U7XG59O1xuXG4vKipcbiAqIERlc3Ryb3lzIHRoaXMgdGlsaW5nIHNwcml0ZVxuICpcbiAqL1xuVGlsaW5nU3ByaXRlLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKCkge1xuICAgIGNvcmUuU3ByaXRlLnByb3RvdHlwZS5kZXN0cm95LmNhbGwodGhpcyk7XG5cbiAgICB0aGlzLnRpbGVTY2FsZSA9IG51bGw7XG4gICAgdGhpcy5fdGlsZVNjYWxlT2Zmc2V0ID0gbnVsbDtcbiAgICB0aGlzLnRpbGVQb3NpdGlvbiA9IG51bGw7XG5cbiAgICB0aGlzLl91dnMgPSBudWxsO1xufTtcblxuLyoqXG4gKiBIZWxwZXIgZnVuY3Rpb24gdGhhdCBjcmVhdGVzIGEgdGlsaW5nIHNwcml0ZSB0aGF0IHdpbGwgdXNlIGEgdGV4dHVyZSBmcm9tIHRoZSBUZXh0dXJlQ2FjaGUgYmFzZWQgb24gdGhlIGZyYW1lSWRcbiAqIFRoZSBmcmFtZSBpZHMgYXJlIGNyZWF0ZWQgd2hlbiBhIFRleHR1cmUgcGFja2VyIGZpbGUgaGFzIGJlZW4gbG9hZGVkXG4gKlxuICogQHN0YXRpY1xuICogQHBhcmFtIGZyYW1lSWQge3N0cmluZ30gVGhlIGZyYW1lIElkIG9mIHRoZSB0ZXh0dXJlIGluIHRoZSBjYWNoZVxuICogQHJldHVybiB7UElYSS5leHRyYXMuVGlsaW5nU3ByaXRlfSBBIG5ldyBUaWxpbmdTcHJpdGUgdXNpbmcgYSB0ZXh0dXJlIGZyb20gdGhlIHRleHR1cmUgY2FjaGUgbWF0Y2hpbmcgdGhlIGZyYW1lSWRcbiAqIEBwYXJhbSB3aWR0aCB7bnVtYmVyfSAgdGhlIHdpZHRoIG9mIHRoZSB0aWxpbmcgc3ByaXRlXG4gKiBAcGFyYW0gaGVpZ2h0IHtudW1iZXJ9IHRoZSBoZWlnaHQgb2YgdGhlIHRpbGluZyBzcHJpdGVcbiAqL1xuVGlsaW5nU3ByaXRlLmZyb21GcmFtZSA9IGZ1bmN0aW9uIChmcmFtZUlkLHdpZHRoLGhlaWdodClcbntcbiAgICB2YXIgdGV4dHVyZSA9IGNvcmUudXRpbHMuVGV4dHVyZUNhY2hlW2ZyYW1lSWRdO1xuXG4gICAgaWYgKCF0ZXh0dXJlKVxuICAgIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdUaGUgZnJhbWVJZCBcIicgKyBmcmFtZUlkICsgJ1wiIGRvZXMgbm90IGV4aXN0IGluIHRoZSB0ZXh0dXJlIGNhY2hlICcgKyB0aGlzKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IFRpbGluZ1Nwcml0ZSh0ZXh0dXJlLHdpZHRoLGhlaWdodCk7XG59O1xuXG4vKipcbiAqIEhlbHBlciBmdW5jdGlvbiB0aGF0IGNyZWF0ZXMgYSBzcHJpdGUgdGhhdCB3aWxsIGNvbnRhaW4gYSB0ZXh0dXJlIGJhc2VkIG9uIGFuIGltYWdlIHVybFxuICogSWYgdGhlIGltYWdlIGlzIG5vdCBpbiB0aGUgdGV4dHVyZSBjYWNoZSBpdCB3aWxsIGJlIGxvYWRlZFxuICpcbiAqIEBzdGF0aWNcbiAqIEBwYXJhbSBpbWFnZUlkIHtzdHJpbmd9IFRoZSBpbWFnZSB1cmwgb2YgdGhlIHRleHR1cmVcbiAqIEBwYXJhbSB3aWR0aCB7bnVtYmVyfSAgdGhlIHdpZHRoIG9mIHRoZSB0aWxpbmcgc3ByaXRlXG4gKiBAcGFyYW0gaGVpZ2h0IHtudW1iZXJ9IHRoZSBoZWlnaHQgb2YgdGhlIHRpbGluZyBzcHJpdGVcbiAqIEBwYXJhbSBbY3Jvc3NvcmlnaW49KGF1dG8pXSB7Ym9vbGVhbn0gaWYgeW91IHdhbnQgdG8gc3BlY2lmeSB0aGUgY3Jvc3Mtb3JpZ2luIHBhcmFtZXRlclxuICogQHBhcmFtIFtzY2FsZU1vZGU9UElYSS5TQ0FMRV9NT0RFUy5ERUZBVUxUXSB7bnVtYmVyfSBpZiB5b3Ugd2FudCB0byBzcGVjaWZ5IHRoZSBzY2FsZSBtb2RlLCBzZWUge0BsaW5rIFBJWEkuU0NBTEVfTU9ERVN9IGZvciBwb3NzaWJsZSB2YWx1ZXNcbiAqIEByZXR1cm4ge1BJWEkuZXh0cmFzLlRpbGluZ1Nwcml0ZX0gQSBuZXcgVGlsaW5nU3ByaXRlIHVzaW5nIGEgdGV4dHVyZSBmcm9tIHRoZSB0ZXh0dXJlIGNhY2hlIG1hdGNoaW5nIHRoZSBpbWFnZSBpZFxuICovXG5UaWxpbmdTcHJpdGUuZnJvbUltYWdlID0gZnVuY3Rpb24gKGltYWdlSWQsIHdpZHRoLCBoZWlnaHQsIGNyb3Nzb3JpZ2luLCBzY2FsZU1vZGUpXG57XG4gICAgcmV0dXJuIG5ldyBUaWxpbmdTcHJpdGUoY29yZS5UZXh0dXJlLmZyb21JbWFnZShpbWFnZUlkLCBjcm9zc29yaWdpbiwgc2NhbGVNb2RlKSx3aWR0aCxoZWlnaHQpO1xufTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vY29yZScpLFxuICAgIERpc3BsYXlPYmplY3QgPSBjb3JlLkRpc3BsYXlPYmplY3QsXG4gICAgX3RlbXBNYXRyaXggPSBuZXcgY29yZS5NYXRyaXgoKTtcblxuRGlzcGxheU9iamVjdC5wcm90b3R5cGUuX2NhY2hlQXNCaXRtYXAgPSBmYWxzZTtcbkRpc3BsYXlPYmplY3QucHJvdG90eXBlLl9vcmlnaW5hbFJlbmRlcldlYkdMID0gbnVsbDtcbkRpc3BsYXlPYmplY3QucHJvdG90eXBlLl9vcmlnaW5hbFJlbmRlckNhbnZhcyA9IG51bGw7XG5cbkRpc3BsYXlPYmplY3QucHJvdG90eXBlLl9vcmlnaW5hbFVwZGF0ZVRyYW5zZm9ybSA9IG51bGw7XG5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS5fb3JpZ2luYWxIaXRUZXN0ID0gbnVsbDtcbkRpc3BsYXlPYmplY3QucHJvdG90eXBlLl9vcmlnaW5hbERlc3Ryb3kgPSBudWxsO1xuRGlzcGxheU9iamVjdC5wcm90b3R5cGUuX2NhY2hlZFNwcml0ZSA9IG51bGw7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKERpc3BsYXlPYmplY3QucHJvdG90eXBlLCB7XG5cbiAgICAvKipcbiAgICAgKiBTZXQgdGhpcyB0byB0cnVlIGlmIHlvdSB3YW50IHRoaXMgZGlzcGxheSBvYmplY3QgdG8gYmUgY2FjaGVkIGFzIGEgYml0bWFwLlxuICAgICAqIFRoaXMgYmFzaWNhbGx5IHRha2VzIGEgc25hcCBzaG90IG9mIHRoZSBkaXNwbGF5IG9iamVjdCBhcyBpdCBpcyBhdCB0aGF0IG1vbWVudC4gSXQgY2FuIHByb3ZpZGUgYSBwZXJmb3JtYW5jZSBiZW5lZml0IGZvciBjb21wbGV4IHN0YXRpYyBkaXNwbGF5T2JqZWN0cy5cbiAgICAgKiBUbyByZW1vdmUgc2ltcGx5IHNldCB0aGlzIHByb3BlcnR5IHRvICdmYWxzZSdcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICogQG1lbWJlcm9mIFBJWEkuRGlzcGxheU9iamVjdCNcbiAgICAgKi9cbiAgICBjYWNoZUFzQml0bWFwOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2NhY2hlQXNCaXRtYXA7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICBpZiAodGhpcy5fY2FjaGVBc0JpdG1hcCA9PT0gdmFsdWUpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLl9jYWNoZUFzQml0bWFwID0gdmFsdWU7XG5cbiAgICAgICAgICAgIGlmICh2YWx1ZSlcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9vcmlnaW5hbFJlbmRlcldlYkdMID0gdGhpcy5yZW5kZXJXZWJHTDtcbiAgICAgICAgICAgICAgICB0aGlzLl9vcmlnaW5hbFJlbmRlckNhbnZhcyA9IHRoaXMucmVuZGVyQ2FudmFzO1xuXG4gICAgICAgICAgICAgICAgdGhpcy5fb3JpZ2luYWxVcGRhdGVUcmFuc2Zvcm0gPSB0aGlzLnVwZGF0ZVRyYW5zZm9ybTtcbiAgICAgICAgICAgICAgICB0aGlzLl9vcmlnaW5hbEdldEJvdW5kcyA9IHRoaXMuZ2V0Qm91bmRzO1xuXG4gICAgICAgICAgICAgICAgdGhpcy5fb3JpZ2luYWxEZXN0cm95ID0gdGhpcy5kZXN0cm95O1xuXG4gICAgICAgICAgICAgICAgdGhpcy5fb3JpZ2luYWxDb250YWluc1BvaW50ID0gdGhpcy5jb250YWluc1BvaW50O1xuXG4gICAgICAgICAgICAgICAgdGhpcy5yZW5kZXJXZWJHTCA9IHRoaXMuX3JlbmRlckNhY2hlZFdlYkdMO1xuICAgICAgICAgICAgICAgIHRoaXMucmVuZGVyQ2FudmFzID0gdGhpcy5fcmVuZGVyQ2FjaGVkQ2FudmFzO1xuXG4gICAgICAgICAgICAgICAgdGhpcy5kZXN0cm95ID0gdGhpcy5fY2FjaGVBc0JpdG1hcERlc3Ryb3k7XG5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5fY2FjaGVkU3ByaXRlKVxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fZGVzdHJveUNhY2hlZERpc3BsYXlPYmplY3QoKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB0aGlzLnJlbmRlcldlYkdMID0gdGhpcy5fb3JpZ2luYWxSZW5kZXJXZWJHTDtcbiAgICAgICAgICAgICAgICB0aGlzLnJlbmRlckNhbnZhcyA9IHRoaXMuX29yaWdpbmFsUmVuZGVyQ2FudmFzO1xuICAgICAgICAgICAgICAgIHRoaXMuZ2V0Qm91bmRzID0gdGhpcy5fb3JpZ2luYWxHZXRCb3VuZHM7XG5cbiAgICAgICAgICAgICAgICB0aGlzLmRlc3Ryb3kgPSB0aGlzLl9vcmlnaW5hbERlc3Ryb3k7XG5cbiAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZVRyYW5zZm9ybSA9IHRoaXMuX29yaWdpbmFsVXBkYXRlVHJhbnNmb3JtO1xuICAgICAgICAgICAgICAgIHRoaXMuY29udGFpbnNQb2ludCA9IHRoaXMuX29yaWdpbmFsQ29udGFpbnNQb2ludDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn0pO1xuLyoqXG4qIFJlbmRlcnMgYSBjYWNoZWQgdmVyc2lvbiBvZiB0aGUgc3ByaXRlIHdpdGggV2ViR0xcbipcbiogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLldlYkdMUmVuZGVyZXJ9IHRoZSBXZWJHTCByZW5kZXJlclxuKiBAcHJpdmF0ZVxuKi9cbkRpc3BsYXlPYmplY3QucHJvdG90eXBlLl9yZW5kZXJDYWNoZWRXZWJHTCA9IGZ1bmN0aW9uIChyZW5kZXJlcilcbntcbiAgICBpZiAoIXRoaXMudmlzaWJsZSB8fCB0aGlzLndvcmxkQWxwaGEgPD0gMCB8fCAhdGhpcy5yZW5kZXJhYmxlKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuX2luaXRDYWNoZWREaXNwbGF5T2JqZWN0KCByZW5kZXJlciApO1xuXG4gICAgdGhpcy5fY2FjaGVkU3ByaXRlLndvcmxkQWxwaGEgPSB0aGlzLndvcmxkQWxwaGE7XG5cbiAgICByZW5kZXJlci5zZXRPYmplY3RSZW5kZXJlcihyZW5kZXJlci5wbHVnaW5zLnNwcml0ZSk7XG4gICAgcmVuZGVyZXIucGx1Z2lucy5zcHJpdGUucmVuZGVyKCB0aGlzLl9jYWNoZWRTcHJpdGUgKTtcbn07XG5cbi8qKlxuKiBQcmVwYXJlcyB0aGUgV2ViR0wgcmVuZGVyZXIgdG8gY2FjaGUgdGhlIHNwcml0ZVxuKlxuKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcn0gdGhlIFdlYkdMIHJlbmRlcmVyXG4qIEBwcml2YXRlXG4qL1xuRGlzcGxheU9iamVjdC5wcm90b3R5cGUuX2luaXRDYWNoZWREaXNwbGF5T2JqZWN0ID0gZnVuY3Rpb24gKHJlbmRlcmVyKVxue1xuICAgIGlmKHRoaXMuX2NhY2hlZFNwcml0ZSlcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBmaXJzdCB3ZSBmbHVzaCBhbnl0aGluZyBsZWZ0IGluIHRoZSByZW5kZXJlciAob3RoZXJ3aXNlIGl0IHdvdWxkIGdldCByZW5kZXJlZCB0byB0aGUgY2FjaGVkIHRleHR1cmUpXG4gICAgcmVuZGVyZXIuY3VycmVudFJlbmRlcmVyLmZsdXNoKCk7XG4gICAgLy90aGlzLmZpbHRlcnM9IFtdO1xuICAgIC8vIG5leHQgd2UgZmluZCB0aGUgZGltZW5zaW9ucyBvZiB0aGUgdW50cmFuc2Zvcm1lZCBvYmplY3RcbiAgICAvLyB0aGlzIGZ1bmN0aW9uIGFsc28gY2FsbHMgdXBkYXRldHJhbnNmb3JtIG9uIGFsbCBpdHMgY2hpbGRyZW4gYXMgcGFydCBvZiB0aGUgbWVhc3VyaW5nLiBUaGlzIG1lYW5zIHdlIGRvbid0IG5lZWQgdG8gdXBkYXRlIHRoZSB0cmFuc2Zvcm0gYWdhaW4gaW4gdGhpcyBmdW5jdGlvblxuICAgIC8vIFRPRE8gcGFzcyBhbiBvYmplY3QgdG8gY2xvbmUgdG9vPyBzYXZlcyBoYXZpbmcgdG8gY3JlYXRlIGEgbmV3IG9uZSBlYWNoIHRpbWUhXG4gICAgdmFyIGJvdW5kcyA9IHRoaXMuZ2V0TG9jYWxCb3VuZHMoKS5jbG9uZSgpO1xuXG4gICAgLy8gYWRkIHNvbWUgcGFkZGluZyFcbiAgICBpZih0aGlzLl9maWx0ZXJzKVxuICAgIHtcbiAgICAgICAgdmFyIHBhZGRpbmcgPSB0aGlzLl9maWx0ZXJzWzBdLnBhZGRpbmc7XG4gICAgICAgIGJvdW5kcy54IC09IHBhZGRpbmc7XG4gICAgICAgIGJvdW5kcy55IC09IHBhZGRpbmc7XG5cbiAgICAgICAgYm91bmRzLndpZHRoICs9IHBhZGRpbmcgKiAyO1xuICAgICAgICBib3VuZHMuaGVpZ2h0ICs9IHBhZGRpbmcgKiAyO1xuICAgIH1cblxuICAgIC8vIGZvciBub3cgd2UgY2FjaGUgdGhlIGN1cnJlbnQgcmVuZGVyVGFyZ2V0IHRoYXQgdGhlIHdlYkdMIHJlbmRlcmVyIGlzIGN1cnJlbnRseSB1c2luZy5cbiAgICAvLyB0aGlzIGNvdWxkIGJlIG1vcmUgZWxlZ2VudC4uXG4gICAgdmFyIGNhY2hlZFJlbmRlclRhcmdldCA9IHJlbmRlcmVyLmN1cnJlbnRSZW5kZXJUYXJnZXQ7XG4gICAgLy8gV2UgYWxzbyBzdG9yZSB0aGUgZmlsdGVyIHN0YWNrIC0gSSB3aWxsIGRlZmluaXRlbHkgbG9vayB0byBjaGFuZ2UgaG93IHRoaXMgd29ya3MgYSBsaXR0bGUgbGF0ZXIgZG93biB0aGUgbGluZS5cbiAgICB2YXIgc3RhY2sgPSByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLmZpbHRlclN0YWNrO1xuXG4gICAgLy8gdGhpcyByZW5kZXJUZXh0dXJlIHdpbGwgYmUgdXNlZCB0byBzdG9yZSB0aGUgY2FjaGVkIERpc3BsYXlPYmplY3RcbiAgICB2YXIgcmVuZGVyVGV4dHVyZSA9IG5ldyBjb3JlLlJlbmRlclRleHR1cmUocmVuZGVyZXIsIGJvdW5kcy53aWR0aCB8IDAsIGJvdW5kcy5oZWlnaHQgfCAwKTtcblxuICAgIC8vIG5lZWQgdG8gc2V0IC8vXG4gICAgdmFyIG0gPSBfdGVtcE1hdHJpeDtcblxuICAgIG0udHggPSAtYm91bmRzLng7XG4gICAgbS50eSA9IC1ib3VuZHMueTtcblxuXG5cbiAgICAvLyBzZXQgYWxsIHByb3BlcnRpZXMgdG8gdGhlcmUgb3JpZ2luYWwgc28gd2UgY2FuIHJlbmRlciB0byBhIHRleHR1cmVcbiAgICB0aGlzLnJlbmRlcldlYkdMID0gdGhpcy5fb3JpZ2luYWxSZW5kZXJXZWJHTDtcblxuICAgIHJlbmRlclRleHR1cmUucmVuZGVyKHRoaXMsIG0sIHRydWUsIHRydWUpO1xuXG4gICAgLy8gbm93IHJlc3RvcmUgdGhlIHN0YXRlIGJlIHNldHRpbmcgdGhlIG5ldyBwcm9wZXJ0aWVzXG4gICAgcmVuZGVyZXIuc2V0UmVuZGVyVGFyZ2V0KGNhY2hlZFJlbmRlclRhcmdldCk7XG4gICAgcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5maWx0ZXJTdGFjayA9IHN0YWNrO1xuXG4gICAgdGhpcy5yZW5kZXJXZWJHTCAgICAgPSB0aGlzLl9yZW5kZXJDYWNoZWRXZWJHTDtcbiAgICB0aGlzLnVwZGF0ZVRyYW5zZm9ybSA9IHRoaXMuZGlzcGxheU9iamVjdFVwZGF0ZVRyYW5zZm9ybTtcbiAgICB0aGlzLmdldEJvdW5kcyAgICAgICA9IHRoaXMuX2dldENhY2hlZEJvdW5kcztcblxuXG4gICAgLy8gY3JlYXRlIG91ciBjYWNoZWQgc3ByaXRlXG4gICAgdGhpcy5fY2FjaGVkU3ByaXRlID0gbmV3IGNvcmUuU3ByaXRlKHJlbmRlclRleHR1cmUpO1xuICAgIHRoaXMuX2NhY2hlZFNwcml0ZS53b3JsZFRyYW5zZm9ybSA9IHRoaXMud29ybGRUcmFuc2Zvcm07XG4gICAgdGhpcy5fY2FjaGVkU3ByaXRlLmFuY2hvci54ID0gLSggYm91bmRzLnggLyBib3VuZHMud2lkdGggKTtcbiAgICB0aGlzLl9jYWNoZWRTcHJpdGUuYW5jaG9yLnkgPSAtKCBib3VuZHMueSAvIGJvdW5kcy5oZWlnaHQgKTtcblxuICAgIC8vIHJlc3RvcmUgdGhlIHRyYW5zZm9ybSBvZiB0aGUgY2FjaGVkIHNwcml0ZSB0byBhdm9pZCB0aGUgbmFzdHkgZmxpY2tlci4uXG4gICAgdGhpcy51cGRhdGVUcmFuc2Zvcm0oKTtcblxuICAgIC8vIG1hcCB0aGUgaGl0IHRlc3QuLlxuICAgIHRoaXMuY29udGFpbnNQb2ludCA9IHRoaXMuX2NhY2hlZFNwcml0ZS5jb250YWluc1BvaW50LmJpbmQodGhpcy5fY2FjaGVkU3ByaXRlKTtcbn07XG5cbi8qKlxuKiBSZW5kZXJzIGEgY2FjaGVkIHZlcnNpb24gb2YgdGhlIHNwcml0ZSB3aXRoIGNhbnZhc1xuKlxuKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuQ2FudmFzUmVuZGVyZXJ9IHRoZSBDYW52YXMgcmVuZGVyZXJcbiogQHByaXZhdGVcbiovXG5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS5fcmVuZGVyQ2FjaGVkQ2FudmFzID0gZnVuY3Rpb24gKHJlbmRlcmVyKVxue1xuICAgIGlmICghdGhpcy52aXNpYmxlIHx8IHRoaXMud29ybGRBbHBoYSA8PSAwIHx8ICF0aGlzLnJlbmRlcmFibGUpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5faW5pdENhY2hlZERpc3BsYXlPYmplY3RDYW52YXMoIHJlbmRlcmVyICk7XG5cbiAgICB0aGlzLl9jYWNoZWRTcHJpdGUud29ybGRBbHBoYSA9IHRoaXMud29ybGRBbHBoYTtcblxuICAgIHRoaXMuX2NhY2hlZFNwcml0ZS5yZW5kZXJDYW52YXMocmVuZGVyZXIpO1xufTtcblxuLy9UT0RPIHRoaXMgY2FuIGJlIHRoZSBzYW1lIGFzIHRoZSB3ZWJHTCB2ZXJpc29uLi4gd2lsbCBuZWVkIHRvIGRvIGEgbGl0dGxlIHR3ZWFraW5nIGZpcnN0IHRob3VnaC4uXG4vKipcbiogUHJlcGFyZXMgdGhlIENhbnZhcyByZW5kZXJlciB0byBjYWNoZSB0aGUgc3ByaXRlXG4qXG4qIEBwYXJhbSByZW5kZXJlciB7UElYSS5DYW52YXNSZW5kZXJlcn0gdGhlIENhbnZhcyByZW5kZXJlclxuKiBAcHJpdmF0ZVxuKi9cbkRpc3BsYXlPYmplY3QucHJvdG90eXBlLl9pbml0Q2FjaGVkRGlzcGxheU9iamVjdENhbnZhcyA9IGZ1bmN0aW9uIChyZW5kZXJlcilcbntcbiAgICBpZih0aGlzLl9jYWNoZWRTcHJpdGUpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy9nZXQgYm91bmRzIGFjdHVhbGx5IHRyYW5zZm9ybXMgdGhlIG9iamVjdCBmb3IgdXMgYWxyZWFkeSFcbiAgICB2YXIgYm91bmRzID0gdGhpcy5nZXRMb2NhbEJvdW5kcygpO1xuXG4gICAgdmFyIGNhY2hlZFJlbmRlclRhcmdldCA9IHJlbmRlcmVyLmNvbnRleHQ7XG5cbiAgICB2YXIgcmVuZGVyVGV4dHVyZSA9IG5ldyBjb3JlLlJlbmRlclRleHR1cmUocmVuZGVyZXIsIGJvdW5kcy53aWR0aCB8IDAsIGJvdW5kcy5oZWlnaHQgfCAwKTtcblxuICAgIC8vIG5lZWQgdG8gc2V0IC8vXG4gICAgdmFyIG0gPSBfdGVtcE1hdHJpeDtcblxuICAgIG0udHggPSAtYm91bmRzLng7XG4gICAgbS50eSA9IC1ib3VuZHMueTtcblxuICAgIC8vIHNldCBhbGwgcHJvcGVydGllcyB0byB0aGVyZSBvcmlnaW5hbCBzbyB3ZSBjYW4gcmVuZGVyIHRvIGEgdGV4dHVyZVxuICAgIHRoaXMucmVuZGVyQ2FudmFzID0gdGhpcy5fb3JpZ2luYWxSZW5kZXJDYW52YXM7XG5cbiAgICByZW5kZXJUZXh0dXJlLnJlbmRlcih0aGlzLCBtLCB0cnVlKTtcblxuICAgIC8vIG5vdyByZXN0b3JlIHRoZSBzdGF0ZSBiZSBzZXR0aW5nIHRoZSBuZXcgcHJvcGVydGllc1xuICAgIHJlbmRlcmVyLmNvbnRleHQgPSBjYWNoZWRSZW5kZXJUYXJnZXQ7XG5cbiAgICB0aGlzLnJlbmRlckNhbnZhcyA9IHRoaXMuX3JlbmRlckNhY2hlZENhbnZhcztcbiAgICB0aGlzLnVwZGF0ZVRyYW5zZm9ybSA9IHRoaXMuZGlzcGxheU9iamVjdFVwZGF0ZVRyYW5zZm9ybTtcbiAgICB0aGlzLmdldEJvdW5kcyAgPSB0aGlzLl9nZXRDYWNoZWRCb3VuZHM7XG5cblxuICAgIC8vIGNyZWF0ZSBvdXIgY2FjaGVkIHNwcml0ZVxuICAgIHRoaXMuX2NhY2hlZFNwcml0ZSA9IG5ldyBjb3JlLlNwcml0ZShyZW5kZXJUZXh0dXJlKTtcbiAgICB0aGlzLl9jYWNoZWRTcHJpdGUud29ybGRUcmFuc2Zvcm0gPSB0aGlzLndvcmxkVHJhbnNmb3JtO1xuICAgIHRoaXMuX2NhY2hlZFNwcml0ZS5hbmNob3IueCA9IC0oIGJvdW5kcy54IC8gYm91bmRzLndpZHRoICk7XG4gICAgdGhpcy5fY2FjaGVkU3ByaXRlLmFuY2hvci55ID0gLSggYm91bmRzLnkgLyBib3VuZHMuaGVpZ2h0ICk7XG5cbiAgICB0aGlzLnVwZGF0ZVRyYW5zZm9ybSgpO1xuXG4gICAgdGhpcy5jb250YWluc1BvaW50ID0gdGhpcy5fY2FjaGVkU3ByaXRlLmNvbnRhaW5zUG9pbnQuYmluZCh0aGlzLl9jYWNoZWRTcHJpdGUpO1xufTtcblxuLyoqXG4qIENhbGN1bGF0ZXMgdGhlIGJvdW5kcyBvZiB0aGUgY2FjaGVkIHNwcml0ZVxuKlxuKiBAcHJpdmF0ZVxuKi9cbkRpc3BsYXlPYmplY3QucHJvdG90eXBlLl9nZXRDYWNoZWRCb3VuZHMgPSBmdW5jdGlvbiAoKVxue1xuICAgIHRoaXMuX2NhY2hlZFNwcml0ZS5fY3VycmVudEJvdW5kcyA9IG51bGw7XG5cbiAgICByZXR1cm4gdGhpcy5fY2FjaGVkU3ByaXRlLmdldEJvdW5kcygpO1xufTtcblxuLyoqXG4qIERlc3Ryb3lzIHRoZSBjYWNoZWQgc3ByaXRlLlxuKlxuKiBAcHJpdmF0ZVxuKi9cbkRpc3BsYXlPYmplY3QucHJvdG90eXBlLl9kZXN0cm95Q2FjaGVkRGlzcGxheU9iamVjdCA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy5fY2FjaGVkU3ByaXRlLl90ZXh0dXJlLmRlc3Ryb3koKTtcbiAgICB0aGlzLl9jYWNoZWRTcHJpdGUgPSBudWxsO1xufTtcblxuRGlzcGxheU9iamVjdC5wcm90b3R5cGUuX2NhY2hlQXNCaXRtYXBEZXN0cm95ID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLmNhY2hlQXNCaXRtYXAgPSBmYWxzZTtcbiAgICB0aGlzLl9vcmlnaW5hbERlc3Ryb3koKTtcbn07XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uL2NvcmUnKTtcblxuLyoqXG4gKiBUaGUgaW5zdGFuY2UgbmFtZSBvZiB0aGUgb2JqZWN0LlxuICpcbiAqIEBtZW1iZXJvZiBQSVhJLkRpc3BsYXlPYmplY3QjXG4gKiBAbWVtYmVyIHtzdHJpbmd9XG4gKi9cbmNvcmUuRGlzcGxheU9iamVjdC5wcm90b3R5cGUubmFtZSA9IG51bGw7XG5cbi8qKlxuKiBSZXR1cm5zIHRoZSBkaXNwbGF5IG9iamVjdCBpbiB0aGUgY29udGFpbmVyXG4qXG4qIEBtZW1iZXJvZiBQSVhJLkNvbnRhaW5lciNcbiogQHBhcmFtIG5hbWUge3N0cmluZ30gaW5zdGFuY2UgbmFtZVxuKiBAcmV0dXJuIHtQSVhJLkRpc3BsYXlPYmplY3R9XG4qL1xuY29yZS5Db250YWluZXIucHJvdG90eXBlLmdldENoaWxkQnlOYW1lID0gZnVuY3Rpb24gKG5hbWUpXG57XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmNoaWxkcmVuLmxlbmd0aDsgaSsrKVxuICAgIHtcbiAgICAgICAgaWYgKHRoaXMuY2hpbGRyZW5baV0ubmFtZSA9PT0gbmFtZSlcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY2hpbGRyZW5baV07XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG59O1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi9jb3JlJyk7XG5cbi8qKlxuKiBSZXR1cm5zIHRoZSBnbG9iYWwgcG9zaXRpb24gb2YgdGhlIGRpc3BsYXlPYmplY3RcbipcbiogQG1lbWJlcm9mIFBJWEkuRGlzcGxheU9iamVjdCNcbiogQHBhcmFtIHBvaW50IHtQb2ludH0gdGhlIHBvaW50IHRvIHdyaXRlIHRoZSBnbG9iYWwgdmFsdWUgdG8uIElmIG51bGwgYSBuZXcgcG9pbnQgd2lsbCBiZSByZXR1cm5lZFxuKiBAcmV0dXJuIHtQb2ludH1cbiovXG5jb3JlLkRpc3BsYXlPYmplY3QucHJvdG90eXBlLmdldEdsb2JhbFBvc2l0aW9uID0gZnVuY3Rpb24gKHBvaW50KVxue1xuICAgIHBvaW50ID0gcG9pbnQgfHwgbmV3IGNvcmUuUG9pbnQoKTtcblxuICAgIGlmKHRoaXMucGFyZW50KVxuICAgIHtcbiAgICAgICAgdGhpcy5kaXNwbGF5T2JqZWN0VXBkYXRlVHJhbnNmb3JtKCk7XG5cbiAgICAgICAgcG9pbnQueCA9IHRoaXMud29ybGRUcmFuc2Zvcm0udHg7XG4gICAgICAgIHBvaW50LnkgPSB0aGlzLndvcmxkVHJhbnNmb3JtLnR5O1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICBwb2ludC54ID0gdGhpcy5wb3NpdGlvbi54O1xuICAgICAgICBwb2ludC55ID0gdGhpcy5wb3NpdGlvbi55O1xuICAgIH1cblxuICAgIHJldHVybiBwb2ludDtcbn07XG4iLCIvKipcbiAqIEBmaWxlICAgICAgICBNYWluIGV4cG9ydCBvZiB0aGUgUElYSSBleHRyYXMgbGlicmFyeVxuICogQGF1dGhvciAgICAgIE1hdCBHcm92ZXMgPG1hdEBnb29kYm95ZGlnaXRhbC5jb20+XG4gKiBAY29weXJpZ2h0ICAgMjAxMy0yMDE1IEdvb2RCb3lEaWdpdGFsXG4gKiBAbGljZW5zZSAgICAge0BsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9waXhpanMvcGl4aS5qcy9ibG9iL21hc3Rlci9MSUNFTlNFfE1JVCBMaWNlbnNlfVxuICovXG5cbnJlcXVpcmUoJy4vY2FjaGVBc0JpdG1hcCcpO1xucmVxdWlyZSgnLi9nZXRDaGlsZEJ5TmFtZScpO1xucmVxdWlyZSgnLi9nZXRHbG9iYWxQb3NpdGlvbicpO1xuXG4vKipcbiAqIEBuYW1lc3BhY2UgUElYSS5leHRyYXNcbiAqL1xubW9kdWxlLmV4cG9ydHMgPSB7XG4gICAgTW92aWVDbGlwOiAgICAgIHJlcXVpcmUoJy4vTW92aWVDbGlwJyksXG4gICAgVGlsaW5nU3ByaXRlOiAgIHJlcXVpcmUoJy4vVGlsaW5nU3ByaXRlJyksXG4gICAgQml0bWFwVGV4dDogICAgIHJlcXVpcmUoJy4vQml0bWFwVGV4dCcpXG59O1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi8uLi9jb3JlJyk7XG4vLyBAc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9zdWJzdGFjay9icmZzL2lzc3Vlcy8yNVxuXG5cbi8vIFRPRE8gKGNlbmdsZXIpIC0gVGhlIFkgaXMgZmxpcHBlZCBpbiB0aGlzIHNoYWRlciBmb3Igc29tZSByZWFzb24uXG5cbi8qKlxuICogQGF1dGhvciBWaWNvIEB2aWNvY290ZWFcbiAqIG9yaWdpbmFsIHNoYWRlciA6IGh0dHBzOi8vd3d3LnNoYWRlcnRveS5jb20vdmlldy9sc3NHRGogYnkgQG1vdkFYMTNoXG4gKi9cblxuLyoqXG4gKiBBbiBBU0NJSSBmaWx0ZXIuXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLkFic3RyYWN0RmlsdGVyXG4gKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzXG4gKi9cbmZ1bmN0aW9uIEFzY2lpRmlsdGVyKClcbntcbiAgICBjb3JlLkFic3RyYWN0RmlsdGVyLmNhbGwodGhpcyxcbiAgICAgICAgLy8gdmVydGV4IHNoYWRlclxuICAgICAgICBudWxsLFxuICAgICAgICAvLyBmcmFnbWVudCBzaGFkZXJcbiAgICAgICAgXCJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcXG5cXG51bmlmb3JtIHZlYzQgZGltZW5zaW9ucztcXG51bmlmb3JtIGZsb2F0IHBpeGVsU2l6ZTtcXG51bmlmb3JtIHNhbXBsZXIyRCB1U2FtcGxlcjtcXG5cXG5mbG9hdCBjaGFyYWN0ZXIoZmxvYXQgbiwgdmVjMiBwKVxcbntcXG4gICAgcCA9IGZsb29yKHAqdmVjMig0LjAsIC00LjApICsgMi41KTtcXG4gICAgaWYgKGNsYW1wKHAueCwgMC4wLCA0LjApID09IHAueCAmJiBjbGFtcChwLnksIDAuMCwgNC4wKSA9PSBwLnkpXFxuICAgIHtcXG4gICAgICAgIGlmIChpbnQobW9kKG4vZXhwMihwLnggKyA1LjAqcC55KSwgMi4wKSkgPT0gMSkgcmV0dXJuIDEuMDtcXG4gICAgfVxcbiAgICByZXR1cm4gMC4wO1xcbn1cXG5cXG52b2lkIG1haW4oKVxcbntcXG4gICAgdmVjMiB1diA9IGdsX0ZyYWdDb29yZC54eTtcXG5cXG4gICAgdmVjMyBjb2wgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIGZsb29yKCB1diAvIHBpeGVsU2l6ZSApICogcGl4ZWxTaXplIC8gZGltZW5zaW9ucy54eSkucmdiO1xcblxcbiAgICBmbG9hdCBncmF5ID0gKGNvbC5yICsgY29sLmcgKyBjb2wuYikgLyAzLjA7XFxuXFxuICAgIGZsb2F0IG4gPSAgNjU1MzYuMDsgICAgICAgICAgICAgLy8gLlxcbiAgICBpZiAoZ3JheSA+IDAuMikgbiA9IDY1NjAwLjA7ICAgIC8vIDpcXG4gICAgaWYgKGdyYXkgPiAwLjMpIG4gPSAzMzI3NzIuMDsgICAvLyAqXFxuICAgIGlmIChncmF5ID4gMC40KSBuID0gMTUyNTUwODYuMDsgLy8gb1xcbiAgICBpZiAoZ3JheSA+IDAuNSkgbiA9IDIzMzg1MTY0LjA7IC8vICZcXG4gICAgaWYgKGdyYXkgPiAwLjYpIG4gPSAxNTI1MjAxNC4wOyAvLyA4XFxuICAgIGlmIChncmF5ID4gMC43KSBuID0gMTMxOTk0NTIuMDsgLy8gQFxcbiAgICBpZiAoZ3JheSA+IDAuOCkgbiA9IDExNTEyODEwLjA7IC8vICNcXG5cXG4gICAgdmVjMiBwID0gbW9kKCB1diAvICggcGl4ZWxTaXplICogMC41ICksIDIuMCkgLSB2ZWMyKDEuMCk7XFxuICAgIGNvbCA9IGNvbCAqIGNoYXJhY3RlcihuLCBwKTtcXG5cXG4gICAgZ2xfRnJhZ0NvbG9yID0gdmVjNChjb2wsIDEuMCk7XFxufVxcblwiLFxuICAgICAgICAvLyBjdXN0b20gdW5pZm9ybXNcbiAgICAgICAge1xuICAgICAgICAgICAgZGltZW5zaW9uczogeyB0eXBlOiAnNGZ2JywgdmFsdWU6IG5ldyBGbG9hdDMyQXJyYXkoWzAsIDAsIDAsIDBdKSB9LFxuICAgICAgICAgICAgcGl4ZWxTaXplOiAgeyB0eXBlOiAnMWYnLCB2YWx1ZTogOCB9XG4gICAgICAgIH1cbiAgICApO1xufVxuXG5Bc2NpaUZpbHRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuQWJzdHJhY3RGaWx0ZXIucHJvdG90eXBlKTtcbkFzY2lpRmlsdGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IEFzY2lpRmlsdGVyO1xubW9kdWxlLmV4cG9ydHMgPSBBc2NpaUZpbHRlcjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoQXNjaWlGaWx0ZXIucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogVGhlIHBpeGVsIHNpemUgdXNlZCBieSB0aGUgZmlsdGVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuQXNjaWlGaWx0ZXIjXG4gICAgICovXG4gICAgc2l6ZToge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVuaWZvcm1zLnBpeGVsU2l6ZS52YWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudW5pZm9ybXMucGl4ZWxTaXplLnZhbHVlID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG59KTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vLi4vY29yZScpLFxuICAgIEJsdXJYRmlsdGVyID0gcmVxdWlyZSgnLi4vYmx1ci9CbHVyWEZpbHRlcicpLFxuICAgIEJsdXJZRmlsdGVyID0gcmVxdWlyZSgnLi4vYmx1ci9CbHVyWUZpbHRlcicpO1xuXG4vKipcbiAqIFRoZSBCbG9vbUZpbHRlciBhcHBsaWVzIGEgR2F1c3NpYW4gYmx1ciB0byBhbiBvYmplY3QuXG4gKiBUaGUgc3RyZW5ndGggb2YgdGhlIGJsdXIgY2FuIGJlIHNldCBmb3IgeC0gYW5kIHktYXhpcyBzZXBhcmF0ZWx5LlxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5BYnN0cmFjdEZpbHRlclxuICogQG1lbWJlcm9mIFBJWEkuZmlsdGVyc1xuICovXG5mdW5jdGlvbiBCbG9vbUZpbHRlcigpXG57XG4gICAgY29yZS5BYnN0cmFjdEZpbHRlci5jYWxsKHRoaXMpO1xuXG4gICAgdGhpcy5ibHVyWEZpbHRlciA9IG5ldyBCbHVyWEZpbHRlcigpO1xuICAgIHRoaXMuYmx1cllGaWx0ZXIgPSBuZXcgQmx1cllGaWx0ZXIoKTtcblxuICAgIHRoaXMuZGVmYXVsdEZpbHRlciA9IG5ldyBjb3JlLkFic3RyYWN0RmlsdGVyKCk7XG59XG5cbkJsb29tRmlsdGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoY29yZS5BYnN0cmFjdEZpbHRlci5wcm90b3R5cGUpO1xuQmxvb21GaWx0ZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gQmxvb21GaWx0ZXI7XG5tb2R1bGUuZXhwb3J0cyA9IEJsb29tRmlsdGVyO1xuXG5CbG9vbUZpbHRlci5wcm90b3R5cGUuYXBwbHlGaWx0ZXIgPSBmdW5jdGlvbiAocmVuZGVyZXIsIGlucHV0LCBvdXRwdXQpXG57XG4gICAgdmFyIHJlbmRlclRhcmdldCA9IHJlbmRlcmVyLmZpbHRlck1hbmFnZXIuZ2V0UmVuZGVyVGFyZ2V0KHRydWUpO1xuXG4gICAgLy9UT0RPIC0gY29weVRleFN1YkltYWdlMkQgY291bGQgYmUgdXNlZCBoZXJlP1xuICAgIHRoaXMuZGVmYXVsdEZpbHRlci5hcHBseUZpbHRlcihyZW5kZXJlciwgaW5wdXQsIG91dHB1dCk7XG5cbiAgICB0aGlzLmJsdXJYRmlsdGVyLmFwcGx5RmlsdGVyKHJlbmRlcmVyLCBpbnB1dCwgcmVuZGVyVGFyZ2V0KTtcblxuICAgIHJlbmRlcmVyLmJsZW5kTW9kZU1hbmFnZXIuc2V0QmxlbmRNb2RlKGNvcmUuQkxFTkRfTU9ERVMuU0NSRUVOKTtcblxuICAgIHRoaXMuYmx1cllGaWx0ZXIuYXBwbHlGaWx0ZXIocmVuZGVyZXIsIHJlbmRlclRhcmdldCwgb3V0cHV0KTtcblxuICAgIHJlbmRlcmVyLmJsZW5kTW9kZU1hbmFnZXIuc2V0QmxlbmRNb2RlKGNvcmUuQkxFTkRfTU9ERVMuTk9STUFMKTtcblxuICAgIHJlbmRlcmVyLmZpbHRlck1hbmFnZXIucmV0dXJuUmVuZGVyVGFyZ2V0KHJlbmRlclRhcmdldCk7XG59O1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhCbG9vbUZpbHRlci5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBzdHJlbmd0aCBvZiBib3RoIHRoZSBibHVyWCBhbmQgYmx1clkgcHJvcGVydGllcyBzaW11bHRhbmVvdXNseVxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJPZiBQSVhJLmZpbHRlcnMuQmxvb21GaWx0ZXIjXG4gICAgICogQGRlZmF1bHQgMlxuICAgICAqL1xuICAgIGJsdXI6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5ibHVyWEZpbHRlci5ibHVyO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5ibHVyWEZpbHRlci5ibHVyID0gdGhpcy5ibHVyWUZpbHRlci5ibHVyID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgc3RyZW5ndGggb2YgdGhlIGJsdXJYIHByb3BlcnR5XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlck9mIFBJWEkuZmlsdGVycy5CbG9vbUZpbHRlciNcbiAgICAgKiBAZGVmYXVsdCAyXG4gICAgICovXG4gICAgYmx1clg6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5ibHVyWEZpbHRlci5ibHVyO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5ibHVyWEZpbHRlci5ibHVyID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgc3RyZW5ndGggb2YgdGhlIGJsdXJZIHByb3BlcnR5XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlck9mIFBJWEkuZmlsdGVycy5CbG9vbUZpbHRlciNcbiAgICAgKiBAZGVmYXVsdCAyXG4gICAgICovXG4gICAgYmx1clk6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5ibHVyWUZpbHRlci5ibHVyO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5ibHVyWUZpbHRlci5ibHVyID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG59KTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vLi4vY29yZScpO1xuXG5cbi8qKlxuICogVGhlIEJsdXJEaXJGaWx0ZXIgYXBwbGllcyBhIEdhdXNzaWFuIGJsdXIgdG93YXJkIGEgZGlyZWN0aW9uIHRvIGFuIG9iamVjdC5cbiAqXG4gKiBAY2xhc3NcbiAqIEBwYXJhbSB7bnVtYmVyfSBkaXJYXG4gKiBAcGFyYW0ge251bWJlcn0gZGlyWVxuICogQGV4dGVuZHMgUElYSS5BYnN0cmFjdEZpbHRlclxuICogQG1lbWJlcm9mIFBJWEkuZmlsdGVyc1xuICovXG5mdW5jdGlvbiBCbHVyRGlyRmlsdGVyKGRpclgsIGRpclkpXG57XG4gICAgY29yZS5BYnN0cmFjdEZpbHRlci5jYWxsKHRoaXMsXG4gICAgICAgIC8vIHZlcnRleCBzaGFkZXJcbiAgICAgICAgXCJhdHRyaWJ1dGUgdmVjMiBhVmVydGV4UG9zaXRpb247XFxuYXR0cmlidXRlIHZlYzIgYVRleHR1cmVDb29yZDtcXG5hdHRyaWJ1dGUgdmVjNCBhQ29sb3I7XFxuXFxudW5pZm9ybSBmbG9hdCBzdHJlbmd0aDtcXG51bmlmb3JtIGZsb2F0IGRpclg7XFxudW5pZm9ybSBmbG9hdCBkaXJZO1xcbnVuaWZvcm0gbWF0MyBwcm9qZWN0aW9uTWF0cml4O1xcblxcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xcbnZhcnlpbmcgdmVjNCB2Q29sb3I7XFxudmFyeWluZyB2ZWMyIHZCbHVyVGV4Q29vcmRzWzNdO1xcblxcbnZvaWQgbWFpbih2b2lkKVxcbntcXG4gICAgZ2xfUG9zaXRpb24gPSB2ZWM0KChwcm9qZWN0aW9uTWF0cml4ICogdmVjMygoYVZlcnRleFBvc2l0aW9uKSwgMS4wKSkueHksIDAuMCwgMS4wKTtcXG4gICAgdlRleHR1cmVDb29yZCA9IGFUZXh0dXJlQ29vcmQ7XFxuXFxuICAgIHZCbHVyVGV4Q29vcmRzWzBdID0gYVRleHR1cmVDb29yZCArIHZlYzIoICgwLjAwNCAqIHN0cmVuZ3RoKSAqIGRpclgsICgwLjAwNCAqIHN0cmVuZ3RoKSAqIGRpclkgKTtcXG4gICAgdkJsdXJUZXhDb29yZHNbMV0gPSBhVGV4dHVyZUNvb3JkICsgdmVjMiggKDAuMDA4ICogc3RyZW5ndGgpICogZGlyWCwgKDAuMDA4ICogc3RyZW5ndGgpICogZGlyWSApO1xcbiAgICB2Qmx1clRleENvb3Jkc1syXSA9IGFUZXh0dXJlQ29vcmQgKyB2ZWMyKCAoMC4wMTIgKiBzdHJlbmd0aCkgKiBkaXJYLCAoMC4wMTIgKiBzdHJlbmd0aCkgKiBkaXJZICk7XFxuXFxuICAgIHZDb2xvciA9IHZlYzQoYUNvbG9yLnJnYiAqIGFDb2xvci5hLCBhQ29sb3IuYSk7XFxufVxcblwiLFxuICAgICAgICAvLyBmcmFnbWVudCBzaGFkZXJcbiAgICAgICAgXCJwcmVjaXNpb24gbG93cCBmbG9hdDtcXG5cXG52YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDtcXG52YXJ5aW5nIHZlYzIgdkJsdXJUZXhDb29yZHNbM107XFxudmFyeWluZyB2ZWM0IHZDb2xvcjtcXG5cXG51bmlmb3JtIHNhbXBsZXIyRCB1U2FtcGxlcjtcXG5cXG52b2lkIG1haW4odm9pZClcXG57XFxuICAgIGdsX0ZyYWdDb2xvciA9IHZlYzQoMC4wKTtcXG5cXG4gICAgZ2xfRnJhZ0NvbG9yICs9IHRleHR1cmUyRCh1U2FtcGxlciwgdlRleHR1cmVDb29yZCAgICAgKSAqIDAuMzk4OTQyMjgwNDAxNDMyNztcXG4gICAgZ2xfRnJhZ0NvbG9yICs9IHRleHR1cmUyRCh1U2FtcGxlciwgdkJsdXJUZXhDb29yZHNbIDBdKSAqIDAuMjQxOTcwNzI0NTE5MTQ1NDtcXG4gICAgZ2xfRnJhZ0NvbG9yICs9IHRleHR1cmUyRCh1U2FtcGxlciwgdkJsdXJUZXhDb29yZHNbIDFdKSAqIDAuMDUzOTkwOTY2NTEzMTg5ODU7XFxuICAgIGdsX0ZyYWdDb2xvciArPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZCbHVyVGV4Q29vcmRzWyAyXSkgKiAwLjAwNDQzMTg0ODQxMTkzODM0MTtcXG59XFxuXCIsXG4gICAgICAgIC8vIHNldCB0aGUgdW5pZm9ybXNcbiAgICAgICAge1xuICAgICAgICAgICAgc3RyZW5ndGg6IHsgdHlwZTogJzFmJywgdmFsdWU6IDEgfSxcbiAgICAgICAgICAgIGRpclg6IHsgdHlwZTogJzFmJywgdmFsdWU6IGRpclggfHwgMCB9LFxuICAgICAgICAgICAgZGlyWTogeyB0eXBlOiAnMWYnLCB2YWx1ZTogZGlyWSB8fCAwIH1cbiAgICAgICAgfVxuICAgICk7XG5cbiAgICB0aGlzLmRlZmF1bHRGaWx0ZXIgPSBuZXcgY29yZS5BYnN0cmFjdEZpbHRlcigpO1xuXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgbnVtYmVyIG9mIHBhc3NlcyBmb3IgYmx1ci4gTW9yZSBwYXNzZXMgbWVhbnMgaGlnaGVyIHF1YWlsaXR5IGJsdXJpbmcuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMVxuICAgICAqL1xuICAgIHRoaXMucGFzc2VzID0gMTtcblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIFggZGlyZWN0aW9uIG9mIHRoZSBibHVyXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMFxuICAgICAqL1xuICAgIHRoaXMuZGlyWCA9IGRpclggfHwgMDtcblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIFkgZGlyZWN0aW9uIG9mIHRoZSBibHVyXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMFxuICAgICAqL1xuICAgIHRoaXMuZGlyWSA9IGRpclkgfHwgMDtcblxuICAgIHRoaXMuc3RyZW5ndGggPSA0O1xufVxuXG5CbHVyRGlyRmlsdGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoY29yZS5BYnN0cmFjdEZpbHRlci5wcm90b3R5cGUpO1xuQmx1ckRpckZpbHRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBCbHVyRGlyRmlsdGVyO1xubW9kdWxlLmV4cG9ydHMgPSBCbHVyRGlyRmlsdGVyO1xuXG5CbHVyRGlyRmlsdGVyLnByb3RvdHlwZS5hcHBseUZpbHRlciA9IGZ1bmN0aW9uIChyZW5kZXJlciwgaW5wdXQsIG91dHB1dCwgY2xlYXIpIHtcblxuICAgIHZhciBzaGFkZXIgPSB0aGlzLmdldFNoYWRlcihyZW5kZXJlcik7XG5cbiAgICB0aGlzLnVuaWZvcm1zLnN0cmVuZ3RoLnZhbHVlID0gdGhpcy5zdHJlbmd0aCAvIDQgLyB0aGlzLnBhc3NlcyAqIChpbnB1dC5mcmFtZS53aWR0aCAvIGlucHV0LnNpemUud2lkdGgpO1xuXG4gICAgaWYgKHRoaXMucGFzc2VzID09PSAxKSB7XG4gICAgICAgIHJlbmRlcmVyLmZpbHRlck1hbmFnZXIuYXBwbHlGaWx0ZXIoc2hhZGVyLCBpbnB1dCwgb3V0cHV0LCBjbGVhcik7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgdmFyIHJlbmRlclRhcmdldCA9IHJlbmRlcmVyLmZpbHRlck1hbmFnZXIuZ2V0UmVuZGVyVGFyZ2V0KHRydWUpO1xuXG4gICAgICAgIHJlbmRlcmVyLmZpbHRlck1hbmFnZXIuYXBwbHlGaWx0ZXIoc2hhZGVyLCBpbnB1dCwgcmVuZGVyVGFyZ2V0LCBjbGVhcik7XG5cbiAgICAgICAgZm9yKHZhciBpID0gMDsgaSA8IHRoaXMucGFzc2VzLTI7IGkrKylcbiAgICAgICAge1xuICAgICAgICAgICAgLy90aGlzLnVuaWZvcm1zLnN0cmVuZ3RoLnZhbHVlID0gdGhpcy5zdHJlbmd0aCAvIDQgLyAodGhpcy5wYXNzZXMrKGkqMikpICogKGlucHV0LmZyYW1lLndpZHRoIC8gaW5wdXQuc2l6ZS53aWR0aCk7XG4gICAgICAgICAgICByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLmFwcGx5RmlsdGVyKHNoYWRlciwgcmVuZGVyVGFyZ2V0LCByZW5kZXJUYXJnZXQsIGNsZWFyKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJlbmRlcmVyLmZpbHRlck1hbmFnZXIuYXBwbHlGaWx0ZXIoc2hhZGVyLCByZW5kZXJUYXJnZXQsIG91dHB1dCwgY2xlYXIpO1xuXG4gICAgICAgIHJlbmRlcmVyLmZpbHRlck1hbmFnZXIucmV0dXJuUmVuZGVyVGFyZ2V0KHJlbmRlclRhcmdldCk7XG4gICAgfVxufTtcblxuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhCbHVyRGlyRmlsdGVyLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIHN0cmVuZ3RoIG9mIGJvdGggdGhlIGJsdXIuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5CbHVyRGlyRmlsdGVyI1xuICAgICAqIEBkZWZhdWx0IDJcbiAgICAgKi9cbiAgICBibHVyOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuc3RyZW5ndGg7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnBhZGRpbmcgPSB2YWx1ZSAqIDAuNTtcbiAgICAgICAgICAgIHRoaXMuc3RyZW5ndGggPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgWCBkaXJlY3Rpb24gb2YgdGhlIGJsdXIuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5CbHVyWUZpbHRlciNcbiAgICAgKiBAZGVmYXVsdCAwXG4gICAgICovXG4gICAgZGlyWDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmRpclg7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLmRpclgudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgWSBkaXJlY3Rpb24gb2YgdGhlIGJsdXIuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5CbHVyRGlyRmlsdGVyI1xuICAgICAqIEBkZWZhdWx0IDBcbiAgICAgKi9cbiAgICBkaXJZOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZGlyWTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudW5pZm9ybXMuZGlyWS52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfVxufSk7XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uLy4uL2NvcmUnKSxcbiAgICBCbHVyWEZpbHRlciA9IHJlcXVpcmUoJy4vQmx1clhGaWx0ZXInKSxcbiAgICBCbHVyWUZpbHRlciA9IHJlcXVpcmUoJy4vQmx1cllGaWx0ZXInKTtcblxuLyoqXG4gKiBUaGUgQmx1ckZpbHRlciBhcHBsaWVzIGEgR2F1c3NpYW4gYmx1ciB0byBhbiBvYmplY3QuXG4gKiBUaGUgc3RyZW5ndGggb2YgdGhlIGJsdXIgY2FuIGJlIHNldCBmb3IgeC0gYW5kIHktYXhpcyBzZXBhcmF0ZWx5LlxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5BYnN0cmFjdEZpbHRlclxuICogQG1lbWJlcm9mIFBJWEkuZmlsdGVyc1xuICovXG5mdW5jdGlvbiBCbHVyRmlsdGVyKClcbntcbiAgICBjb3JlLkFic3RyYWN0RmlsdGVyLmNhbGwodGhpcyk7XG5cbiAgICB0aGlzLmJsdXJYRmlsdGVyID0gbmV3IEJsdXJYRmlsdGVyKCk7XG4gICAgdGhpcy5ibHVyWUZpbHRlciA9IG5ldyBCbHVyWUZpbHRlcigpO1xufVxuXG5CbHVyRmlsdGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoY29yZS5BYnN0cmFjdEZpbHRlci5wcm90b3R5cGUpO1xuQmx1ckZpbHRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBCbHVyRmlsdGVyO1xubW9kdWxlLmV4cG9ydHMgPSBCbHVyRmlsdGVyO1xuXG5CbHVyRmlsdGVyLnByb3RvdHlwZS5hcHBseUZpbHRlciA9IGZ1bmN0aW9uIChyZW5kZXJlciwgaW5wdXQsIG91dHB1dClcbntcbiAgICB2YXIgcmVuZGVyVGFyZ2V0ID0gcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5nZXRSZW5kZXJUYXJnZXQodHJ1ZSk7XG5cbiAgICB0aGlzLmJsdXJYRmlsdGVyLmFwcGx5RmlsdGVyKHJlbmRlcmVyLCBpbnB1dCwgcmVuZGVyVGFyZ2V0KTtcbiAgICB0aGlzLmJsdXJZRmlsdGVyLmFwcGx5RmlsdGVyKHJlbmRlcmVyLCByZW5kZXJUYXJnZXQsIG91dHB1dCk7XG5cbiAgICByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLnJldHVyblJlbmRlclRhcmdldChyZW5kZXJUYXJnZXQpO1xufTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoQmx1ckZpbHRlci5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBzdHJlbmd0aCBvZiBib3RoIHRoZSBibHVyWCBhbmQgYmx1clkgcHJvcGVydGllcyBzaW11bHRhbmVvdXNseVxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJPZiBQSVhJLmZpbHRlcnMuQmx1ckZpbHRlciNcbiAgICAgKiBAZGVmYXVsdCAyXG4gICAgICovXG4gICAgYmx1cjoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmJsdXJYRmlsdGVyLmJsdXI7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnBhZGRpbmcgPSBNYXRoLmFicyh2YWx1ZSkgKiAwLjU7XG4gICAgICAgICAgICB0aGlzLmJsdXJYRmlsdGVyLmJsdXIgPSB0aGlzLmJsdXJZRmlsdGVyLmJsdXIgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBudW1iZXIgb2YgcGFzc2VzIGZvciBibHVyLiBNb3JlIHBhc3NlcyBtZWFucyBoaWdoZXIgcXVhaWxpdHkgYmx1cmluZy5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLkJsdXJZRmlsdGVyI1xuICAgICAqIEBkZWZhdWx0IDFcbiAgICAgKi9cbiAgICBwYXNzZXM6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gIHRoaXMuYmx1clhGaWx0ZXIucGFzc2VzO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5ibHVyWEZpbHRlci5wYXNzZXMgPSB0aGlzLmJsdXJZRmlsdGVyLnBhc3NlcyA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIHN0cmVuZ3RoIG9mIHRoZSBibHVyWCBwcm9wZXJ0eVxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJPZiBQSVhJLmZpbHRlcnMuQmx1ckZpbHRlciNcbiAgICAgKiBAZGVmYXVsdCAyXG4gICAgICovXG4gICAgYmx1clg6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5ibHVyWEZpbHRlci5ibHVyO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5ibHVyWEZpbHRlci5ibHVyID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgc3RyZW5ndGggb2YgdGhlIGJsdXJZIHByb3BlcnR5XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlck9mIFBJWEkuZmlsdGVycy5CbHVyRmlsdGVyI1xuICAgICAqIEBkZWZhdWx0IDJcbiAgICAgKi9cbiAgICBibHVyWToge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmJsdXJZRmlsdGVyLmJsdXI7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmJsdXJZRmlsdGVyLmJsdXIgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi8uLi9jb3JlJyk7XG4vLyBAc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9zdWJzdGFjay9icmZzL2lzc3Vlcy8yNVxuXG5cbi8qKlxuICogVGhlIEJsdXJYRmlsdGVyIGFwcGxpZXMgYSBob3Jpem9udGFsIEdhdXNzaWFuIGJsdXIgdG8gYW4gb2JqZWN0LlxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5BYnN0cmFjdEZpbHRlclxuICogQG1lbWJlcm9mIFBJWEkuZmlsdGVyc1xuICovXG5mdW5jdGlvbiBCbHVyWEZpbHRlcigpXG57XG4gICAgY29yZS5BYnN0cmFjdEZpbHRlci5jYWxsKHRoaXMsXG4gICAgICAgIC8vIHZlcnRleCBzaGFkZXJcbiAgICAgICAgXCJhdHRyaWJ1dGUgdmVjMiBhVmVydGV4UG9zaXRpb247XFxuYXR0cmlidXRlIHZlYzIgYVRleHR1cmVDb29yZDtcXG5hdHRyaWJ1dGUgdmVjNCBhQ29sb3I7XFxuXFxudW5pZm9ybSBmbG9hdCBzdHJlbmd0aDtcXG51bmlmb3JtIG1hdDMgcHJvamVjdGlvbk1hdHJpeDtcXG5cXG52YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDtcXG52YXJ5aW5nIHZlYzQgdkNvbG9yO1xcbnZhcnlpbmcgdmVjMiB2Qmx1clRleENvb3Jkc1s2XTtcXG5cXG52b2lkIG1haW4odm9pZClcXG57XFxuICAgIGdsX1Bvc2l0aW9uID0gdmVjNCgocHJvamVjdGlvbk1hdHJpeCAqIHZlYzMoKGFWZXJ0ZXhQb3NpdGlvbiksIDEuMCkpLnh5LCAwLjAsIDEuMCk7XFxuICAgIHZUZXh0dXJlQ29vcmQgPSBhVGV4dHVyZUNvb3JkO1xcblxcbiAgICB2Qmx1clRleENvb3Jkc1sgMF0gPSBhVGV4dHVyZUNvb3JkICsgdmVjMigtMC4wMTIgKiBzdHJlbmd0aCwgMC4wKTtcXG4gICAgdkJsdXJUZXhDb29yZHNbIDFdID0gYVRleHR1cmVDb29yZCArIHZlYzIoLTAuMDA4ICogc3RyZW5ndGgsIDAuMCk7XFxuICAgIHZCbHVyVGV4Q29vcmRzWyAyXSA9IGFUZXh0dXJlQ29vcmQgKyB2ZWMyKC0wLjAwNCAqIHN0cmVuZ3RoLCAwLjApO1xcbiAgICB2Qmx1clRleENvb3Jkc1sgM10gPSBhVGV4dHVyZUNvb3JkICsgdmVjMiggMC4wMDQgKiBzdHJlbmd0aCwgMC4wKTtcXG4gICAgdkJsdXJUZXhDb29yZHNbIDRdID0gYVRleHR1cmVDb29yZCArIHZlYzIoIDAuMDA4ICogc3RyZW5ndGgsIDAuMCk7XFxuICAgIHZCbHVyVGV4Q29vcmRzWyA1XSA9IGFUZXh0dXJlQ29vcmQgKyB2ZWMyKCAwLjAxMiAqIHN0cmVuZ3RoLCAwLjApO1xcblxcbiAgICB2Q29sb3IgPSB2ZWM0KGFDb2xvci5yZ2IgKiBhQ29sb3IuYSwgYUNvbG9yLmEpO1xcbn1cXG5cIixcbiAgICAgICAgLy8gZnJhZ21lbnQgc2hhZGVyXG4gICAgICAgIFwicHJlY2lzaW9uIGxvd3AgZmxvYXQ7XFxuXFxudmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7XFxudmFyeWluZyB2ZWMyIHZCbHVyVGV4Q29vcmRzWzZdO1xcbnZhcnlpbmcgdmVjNCB2Q29sb3I7XFxuXFxudW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXI7XFxuXFxudm9pZCBtYWluKHZvaWQpXFxue1xcbiAgICBnbF9GcmFnQ29sb3IgPSB2ZWM0KDAuMCk7XFxuXFxuICAgIGdsX0ZyYWdDb2xvciArPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZCbHVyVGV4Q29vcmRzWyAwXSkqMC4wMDQ0MzE4NDg0MTE5MzgzNDE7XFxuICAgIGdsX0ZyYWdDb2xvciArPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZCbHVyVGV4Q29vcmRzWyAxXSkqMC4wNTM5OTA5NjY1MTMxODk4NTtcXG4gICAgZ2xfRnJhZ0NvbG9yICs9IHRleHR1cmUyRCh1U2FtcGxlciwgdkJsdXJUZXhDb29yZHNbIDJdKSowLjI0MTk3MDcyNDUxOTE0NTQ7XFxuICAgIGdsX0ZyYWdDb2xvciArPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZUZXh0dXJlQ29vcmQgICAgICkqMC4zOTg5NDIyODA0MDE0MzI3O1xcbiAgICBnbF9GcmFnQ29sb3IgKz0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2Qmx1clRleENvb3Jkc1sgM10pKjAuMjQxOTcwNzI0NTE5MTQ1NDtcXG4gICAgZ2xfRnJhZ0NvbG9yICs9IHRleHR1cmUyRCh1U2FtcGxlciwgdkJsdXJUZXhDb29yZHNbIDRdKSowLjA1Mzk5MDk2NjUxMzE4OTg1O1xcbiAgICBnbF9GcmFnQ29sb3IgKz0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2Qmx1clRleENvb3Jkc1sgNV0pKjAuMDA0NDMxODQ4NDExOTM4MzQxO1xcbn1cXG5cIixcbiAgICAgICAgLy8gc2V0IHRoZSB1bmlmb3Jtc1xuICAgICAgICB7XG4gICAgICAgICAgICBzdHJlbmd0aDogeyB0eXBlOiAnMWYnLCB2YWx1ZTogMSB9XG4gICAgICAgIH1cbiAgICApO1xuXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgbnVtYmVyIG9mIHBhc3NlcyBmb3IgYmx1ci4gTW9yZSBwYXNzZXMgbWVhbnMgaGlnaGVyIHF1YWlsaXR5IGJsdXJpbmcuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMVxuICAgICAqL1xuICAgIHRoaXMucGFzc2VzID0gMTtcblxuICAgIHRoaXMuc3RyZW5ndGggPSA0O1xufVxuXG5CbHVyWEZpbHRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuQWJzdHJhY3RGaWx0ZXIucHJvdG90eXBlKTtcbkJsdXJYRmlsdGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IEJsdXJYRmlsdGVyO1xubW9kdWxlLmV4cG9ydHMgPSBCbHVyWEZpbHRlcjtcblxuQmx1clhGaWx0ZXIucHJvdG90eXBlLmFwcGx5RmlsdGVyID0gZnVuY3Rpb24gKHJlbmRlcmVyLCBpbnB1dCwgb3V0cHV0LCBjbGVhcilcbntcbiAgICB2YXIgc2hhZGVyID0gdGhpcy5nZXRTaGFkZXIocmVuZGVyZXIpO1xuXG4gICAgdGhpcy51bmlmb3Jtcy5zdHJlbmd0aC52YWx1ZSA9IHRoaXMuc3RyZW5ndGggLyA0IC8gdGhpcy5wYXNzZXMgKiAoaW5wdXQuZnJhbWUud2lkdGggLyBpbnB1dC5zaXplLndpZHRoKTtcblxuICAgIGlmKHRoaXMucGFzc2VzID09PSAxKVxuICAgIHtcbiAgICAgICAgcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5hcHBseUZpbHRlcihzaGFkZXIsIGlucHV0LCBvdXRwdXQsIGNsZWFyKTtcbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgdmFyIHJlbmRlclRhcmdldCA9IHJlbmRlcmVyLmZpbHRlck1hbmFnZXIuZ2V0UmVuZGVyVGFyZ2V0KHRydWUpO1xuICAgICAgICB2YXIgZmxpcCA9IGlucHV0O1xuICAgICAgICB2YXIgZmxvcCA9IHJlbmRlclRhcmdldDtcblxuICAgICAgICBmb3IodmFyIGkgPSAwOyBpIDwgdGhpcy5wYXNzZXMtMTsgaSsrKVxuICAgICAgICB7XG4gICAgICAgICAgICByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLmFwcGx5RmlsdGVyKHNoYWRlciwgZmxpcCwgZmxvcCwgdHJ1ZSk7XG5cbiAgICAgICAgICAgdmFyIHRlbXAgPSBmbG9wO1xuICAgICAgICAgICBmbG9wID0gZmxpcDtcbiAgICAgICAgICAgZmxpcCA9IHRlbXA7XG4gICAgICAgIH1cblxuICAgICAgICByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLmFwcGx5RmlsdGVyKHNoYWRlciwgZmxpcCwgb3V0cHV0LCBjbGVhcik7XG5cbiAgICAgICAgcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5yZXR1cm5SZW5kZXJUYXJnZXQocmVuZGVyVGFyZ2V0KTtcbiAgICB9XG59O1xuXG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKEJsdXJYRmlsdGVyLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIHN0cmVuZ3RoIG9mIGJvdGggdGhlIGJsdXIuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5CbHVyWEZpbHRlciNcbiAgICAgKiBAZGVmYXVsdCAyXG4gICAgICovXG4gICAgYmx1cjoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiAgdGhpcy5zdHJlbmd0aDtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMucGFkZGluZyA9ICBNYXRoLmFicyh2YWx1ZSkgKiAwLjU7XG4gICAgICAgICAgICB0aGlzLnN0cmVuZ3RoID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG59KTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vLi4vY29yZScpO1xuLy8gQHNlZSBodHRwczovL2dpdGh1Yi5jb20vc3Vic3RhY2svYnJmcy9pc3N1ZXMvMjVcblxuXG4vKipcbiAqIFRoZSBCbHVyWUZpbHRlciBhcHBsaWVzIGEgaG9yaXpvbnRhbCBHYXVzc2lhbiBibHVyIHRvIGFuIG9iamVjdC5cbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQWJzdHJhY3RGaWx0ZXJcbiAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnNcbiAqL1xuZnVuY3Rpb24gQmx1cllGaWx0ZXIoKVxue1xuICAgIGNvcmUuQWJzdHJhY3RGaWx0ZXIuY2FsbCh0aGlzLFxuICAgICAgICAvLyB2ZXJ0ZXggc2hhZGVyXG4gICAgICAgIFwiYXR0cmlidXRlIHZlYzIgYVZlcnRleFBvc2l0aW9uO1xcbmF0dHJpYnV0ZSB2ZWMyIGFUZXh0dXJlQ29vcmQ7XFxuYXR0cmlidXRlIHZlYzQgYUNvbG9yO1xcblxcbnVuaWZvcm0gZmxvYXQgc3RyZW5ndGg7XFxudW5pZm9ybSBtYXQzIHByb2plY3Rpb25NYXRyaXg7XFxuXFxudmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7XFxudmFyeWluZyB2ZWM0IHZDb2xvcjtcXG52YXJ5aW5nIHZlYzIgdkJsdXJUZXhDb29yZHNbNl07XFxuXFxudm9pZCBtYWluKHZvaWQpXFxue1xcbiAgICBnbF9Qb3NpdGlvbiA9IHZlYzQoKHByb2plY3Rpb25NYXRyaXggKiB2ZWMzKChhVmVydGV4UG9zaXRpb24pLCAxLjApKS54eSwgMC4wLCAxLjApO1xcbiAgICB2VGV4dHVyZUNvb3JkID0gYVRleHR1cmVDb29yZDtcXG5cXG4gICAgdkJsdXJUZXhDb29yZHNbIDBdID0gYVRleHR1cmVDb29yZCArIHZlYzIoMC4wLCAtMC4wMTIgKiBzdHJlbmd0aCk7XFxuICAgIHZCbHVyVGV4Q29vcmRzWyAxXSA9IGFUZXh0dXJlQ29vcmQgKyB2ZWMyKDAuMCwgLTAuMDA4ICogc3RyZW5ndGgpO1xcbiAgICB2Qmx1clRleENvb3Jkc1sgMl0gPSBhVGV4dHVyZUNvb3JkICsgdmVjMigwLjAsIC0wLjAwNCAqIHN0cmVuZ3RoKTtcXG4gICAgdkJsdXJUZXhDb29yZHNbIDNdID0gYVRleHR1cmVDb29yZCArIHZlYzIoMC4wLCAgMC4wMDQgKiBzdHJlbmd0aCk7XFxuICAgIHZCbHVyVGV4Q29vcmRzWyA0XSA9IGFUZXh0dXJlQ29vcmQgKyB2ZWMyKDAuMCwgIDAuMDA4ICogc3RyZW5ndGgpO1xcbiAgICB2Qmx1clRleENvb3Jkc1sgNV0gPSBhVGV4dHVyZUNvb3JkICsgdmVjMigwLjAsICAwLjAxMiAqIHN0cmVuZ3RoKTtcXG5cXG4gICB2Q29sb3IgPSB2ZWM0KGFDb2xvci5yZ2IgKiBhQ29sb3IuYSwgYUNvbG9yLmEpO1xcbn1cXG5cIixcbiAgICAgICAgLy8gZnJhZ21lbnQgc2hhZGVyXG4gICAgICAgIFwicHJlY2lzaW9uIGxvd3AgZmxvYXQ7XFxuXFxudmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7XFxudmFyeWluZyB2ZWMyIHZCbHVyVGV4Q29vcmRzWzZdO1xcbnZhcnlpbmcgdmVjNCB2Q29sb3I7XFxuXFxudW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXI7XFxuXFxudm9pZCBtYWluKHZvaWQpXFxue1xcbiAgICBnbF9GcmFnQ29sb3IgPSB2ZWM0KDAuMCk7XFxuXFxuICAgIGdsX0ZyYWdDb2xvciArPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZCbHVyVGV4Q29vcmRzWyAwXSkqMC4wMDQ0MzE4NDg0MTE5MzgzNDE7XFxuICAgIGdsX0ZyYWdDb2xvciArPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZCbHVyVGV4Q29vcmRzWyAxXSkqMC4wNTM5OTA5NjY1MTMxODk4NTtcXG4gICAgZ2xfRnJhZ0NvbG9yICs9IHRleHR1cmUyRCh1U2FtcGxlciwgdkJsdXJUZXhDb29yZHNbIDJdKSowLjI0MTk3MDcyNDUxOTE0NTQ7XFxuICAgIGdsX0ZyYWdDb2xvciArPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZUZXh0dXJlQ29vcmQgICAgICkqMC4zOTg5NDIyODA0MDE0MzI3O1xcbiAgICBnbF9GcmFnQ29sb3IgKz0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2Qmx1clRleENvb3Jkc1sgM10pKjAuMjQxOTcwNzI0NTE5MTQ1NDtcXG4gICAgZ2xfRnJhZ0NvbG9yICs9IHRleHR1cmUyRCh1U2FtcGxlciwgdkJsdXJUZXhDb29yZHNbIDRdKSowLjA1Mzk5MDk2NjUxMzE4OTg1O1xcbiAgICBnbF9GcmFnQ29sb3IgKz0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2Qmx1clRleENvb3Jkc1sgNV0pKjAuMDA0NDMxODQ4NDExOTM4MzQxO1xcbn1cXG5cIixcbiAgICAgICAgLy8gc2V0IHRoZSB1bmlmb3Jtc1xuICAgICAgICB7XG4gICAgICAgICAgICBzdHJlbmd0aDogeyB0eXBlOiAnMWYnLCB2YWx1ZTogMSB9XG4gICAgICAgIH1cbiAgICApO1xuXG4gICAgdGhpcy5wYXNzZXMgPSAxO1xuICAgIHRoaXMuc3RyZW5ndGggPSA0O1xufVxuXG5CbHVyWUZpbHRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuQWJzdHJhY3RGaWx0ZXIucHJvdG90eXBlKTtcbkJsdXJZRmlsdGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IEJsdXJZRmlsdGVyO1xubW9kdWxlLmV4cG9ydHMgPSBCbHVyWUZpbHRlcjtcblxuQmx1cllGaWx0ZXIucHJvdG90eXBlLmFwcGx5RmlsdGVyID0gZnVuY3Rpb24gKHJlbmRlcmVyLCBpbnB1dCwgb3V0cHV0LCBjbGVhcilcbntcbiAgICB2YXIgc2hhZGVyID0gdGhpcy5nZXRTaGFkZXIocmVuZGVyZXIpO1xuXG4gICAgdGhpcy51bmlmb3Jtcy5zdHJlbmd0aC52YWx1ZSA9IE1hdGguYWJzKHRoaXMuc3RyZW5ndGgpIC8gNCAvIHRoaXMucGFzc2VzICogKGlucHV0LmZyYW1lLmhlaWdodCAvIGlucHV0LnNpemUuaGVpZ2h0KTtcblxuICAgIGlmKHRoaXMucGFzc2VzID09PSAxKVxuICAgIHtcbiAgICAgICAgcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5hcHBseUZpbHRlcihzaGFkZXIsIGlucHV0LCBvdXRwdXQsIGNsZWFyKTtcbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgdmFyIHJlbmRlclRhcmdldCA9IHJlbmRlcmVyLmZpbHRlck1hbmFnZXIuZ2V0UmVuZGVyVGFyZ2V0KHRydWUpO1xuICAgICAgICB2YXIgZmxpcCA9IGlucHV0O1xuICAgICAgICB2YXIgZmxvcCA9IHJlbmRlclRhcmdldDtcblxuICAgICAgICBmb3IodmFyIGkgPSAwOyBpIDwgdGhpcy5wYXNzZXMtMTsgaSsrKVxuICAgICAgICB7XG4gICAgICAgICAgICByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLmFwcGx5RmlsdGVyKHNoYWRlciwgZmxpcCwgZmxvcCwgdHJ1ZSk7XG5cbiAgICAgICAgICAgdmFyIHRlbXAgPSBmbG9wO1xuICAgICAgICAgICBmbG9wID0gZmxpcDtcbiAgICAgICAgICAgZmxpcCA9IHRlbXA7XG4gICAgICAgIH1cblxuICAgICAgICByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLmFwcGx5RmlsdGVyKHNoYWRlciwgZmxpcCwgb3V0cHV0LCBjbGVhcik7XG5cbiAgICAgICAgcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5yZXR1cm5SZW5kZXJUYXJnZXQocmVuZGVyVGFyZ2V0KTtcbiAgICB9XG59O1xuXG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKEJsdXJZRmlsdGVyLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIHN0cmVuZ3RoIG9mIGJvdGggdGhlIGJsdXIuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5CbHVyWUZpbHRlciNcbiAgICAgKiBAZGVmYXVsdCAyXG4gICAgICovXG4gICAgYmx1cjoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiAgdGhpcy5zdHJlbmd0aDtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMucGFkZGluZyA9IE1hdGguYWJzKHZhbHVlKSAqIDAuNTtcbiAgICAgICAgICAgIHRoaXMuc3RyZW5ndGggPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi8uLi9jb3JlJyk7XG4vLyBAc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9zdWJzdGFjay9icmZzL2lzc3Vlcy8yNVxuXG5cbi8qKlxuICogQSBTbWFydCBCbHVyIEZpbHRlci5cbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQWJzdHJhY3RGaWx0ZXJcbiAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnNcbiAqL1xuZnVuY3Rpb24gU21hcnRCbHVyRmlsdGVyKClcbntcbiAgICBjb3JlLkFic3RyYWN0RmlsdGVyLmNhbGwodGhpcyxcbiAgICAgICAgLy8gdmVydGV4IHNoYWRlclxuICAgICAgICBudWxsLFxuICAgICAgICAvLyBmcmFnbWVudCBzaGFkZXJcbiAgICAgICAgXCJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcXG5cXG52YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDtcXG5cXG51bmlmb3JtIHNhbXBsZXIyRCB1U2FtcGxlcjtcXG51bmlmb3JtIHZlYzIgZGVsdGE7XFxuXFxuZmxvYXQgcmFuZG9tKHZlYzMgc2NhbGUsIGZsb2F0IHNlZWQpXFxue1xcbiAgICByZXR1cm4gZnJhY3Qoc2luKGRvdChnbF9GcmFnQ29vcmQueHl6ICsgc2VlZCwgc2NhbGUpKSAqIDQzNzU4LjU0NTMgKyBzZWVkKTtcXG59XFxuXFxudm9pZCBtYWluKHZvaWQpXFxue1xcbiAgICB2ZWM0IGNvbG9yID0gdmVjNCgwLjApO1xcbiAgICBmbG9hdCB0b3RhbCA9IDAuMDtcXG5cXG4gICAgZmxvYXQgb2Zmc2V0ID0gcmFuZG9tKHZlYzMoMTIuOTg5OCwgNzguMjMzLCAxNTEuNzE4MiksIDAuMCk7XFxuXFxuICAgIGZvciAoZmxvYXQgdCA9IC0zMC4wOyB0IDw9IDMwLjA7IHQrKylcXG4gICAge1xcbiAgICAgICAgZmxvYXQgcGVyY2VudCA9ICh0ICsgb2Zmc2V0IC0gMC41KSAvIDMwLjA7XFxuICAgICAgICBmbG9hdCB3ZWlnaHQgPSAxLjAgLSBhYnMocGVyY2VudCk7XFxuICAgICAgICB2ZWM0IHNhbXBsZSA9IHRleHR1cmUyRCh1U2FtcGxlciwgdlRleHR1cmVDb29yZCArIGRlbHRhICogcGVyY2VudCk7XFxuICAgICAgICBzYW1wbGUucmdiICo9IHNhbXBsZS5hO1xcbiAgICAgICAgY29sb3IgKz0gc2FtcGxlICogd2VpZ2h0O1xcbiAgICAgICAgdG90YWwgKz0gd2VpZ2h0O1xcbiAgICB9XFxuXFxuICAgIGdsX0ZyYWdDb2xvciA9IGNvbG9yIC8gdG90YWw7XFxuICAgIGdsX0ZyYWdDb2xvci5yZ2IgLz0gZ2xfRnJhZ0NvbG9yLmEgKyAwLjAwMDAxO1xcbn1cXG5cIixcbiAgICAgICAgLy8gdW5pZm9ybXNcbiAgICAgICAge1xuICAgICAgICAgIGRlbHRhOiB7IHR5cGU6ICd2MicsIHZhbHVlOiB7IHg6IDAuMSwgeTogMC4wIH0gfVxuICAgICAgICB9XG4gICAgKTtcbn1cblxuU21hcnRCbHVyRmlsdGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoY29yZS5BYnN0cmFjdEZpbHRlci5wcm90b3R5cGUpO1xuU21hcnRCbHVyRmlsdGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFNtYXJ0Qmx1ckZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gU21hcnRCbHVyRmlsdGVyO1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi8uLi9jb3JlJyk7XG4vLyBAc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9zdWJzdGFjay9icmZzL2lzc3Vlcy8yNVxuXG5cbi8qKlxuICogVGhlIENvbG9yTWF0cml4RmlsdGVyIGNsYXNzIGxldHMgeW91IGFwcGx5IGEgNXg0IG1hdHJpeCB0cmFuc2Zvcm1hdGlvbiBvbiB0aGUgUkdCQVxuICogY29sb3IgYW5kIGFscGhhIHZhbHVlcyBvZiBldmVyeSBwaXhlbCBvbiB5b3VyIGRpc3BsYXlPYmplY3QgdG8gcHJvZHVjZSBhIHJlc3VsdFxuICogd2l0aCBhIG5ldyBzZXQgb2YgUkdCQSBjb2xvciBhbmQgYWxwaGEgdmFsdWVzLiBJdCdzIHByZXR0eSBwb3dlcmZ1bCFcbiAqXG4gKiBgYGBqc1xuICogIHZhciBjb2xvck1hdHJpeCA9IG5ldyBQSVhJLkNvbG9yTWF0cml4RmlsdGVyKCk7XG4gKiAgY29udGFpbmVyLmZpbHRlcnMgPSBbY29sb3JNYXRyaXhdO1xuICogIGNvbG9yTWF0cml4LmNvbnRyYXN0KDIpO1xuICogYGBgXG4gKiBAYXV0aG9yIENsw6ltZW50IENoZW5lYmF1bHQgPGNsZW1lbnRAZ29vZGJveWRpZ2l0YWwuY29tPlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLkFic3RyYWN0RmlsdGVyXG4gKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzXG4gKi9cbmZ1bmN0aW9uIENvbG9yTWF0cml4RmlsdGVyKClcbntcbiAgICBjb3JlLkFic3RyYWN0RmlsdGVyLmNhbGwodGhpcyxcbiAgICAgICAgLy8gdmVydGV4IHNoYWRlclxuICAgICAgICBudWxsLFxuICAgICAgICAvLyBmcmFnbWVudCBzaGFkZXJcbiAgICAgICAgXCJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcXG5cXG52YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDtcXG51bmlmb3JtIHNhbXBsZXIyRCB1U2FtcGxlcjtcXG51bmlmb3JtIGZsb2F0IG1bMjVdO1xcblxcbnZvaWQgbWFpbih2b2lkKVxcbntcXG5cXG4gICAgdmVjNCBjID0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2VGV4dHVyZUNvb3JkKTtcXG5cXG4gICAgZ2xfRnJhZ0NvbG9yLnIgPSAobVswXSAqIGMucik7XFxuICAgICAgICBnbF9GcmFnQ29sb3IuciArPSAobVsxXSAqIGMuZyk7XFxuICAgICAgICBnbF9GcmFnQ29sb3IuciArPSAobVsyXSAqIGMuYik7XFxuICAgICAgICBnbF9GcmFnQ29sb3IuciArPSAobVszXSAqIGMuYSk7XFxuICAgICAgICBnbF9GcmFnQ29sb3IuciArPSBtWzRdO1xcblxcbiAgICBnbF9GcmFnQ29sb3IuZyA9IChtWzVdICogYy5yKTtcXG4gICAgICAgIGdsX0ZyYWdDb2xvci5nICs9IChtWzZdICogYy5nKTtcXG4gICAgICAgIGdsX0ZyYWdDb2xvci5nICs9IChtWzddICogYy5iKTtcXG4gICAgICAgIGdsX0ZyYWdDb2xvci5nICs9IChtWzhdICogYy5hKTtcXG4gICAgICAgIGdsX0ZyYWdDb2xvci5nICs9IG1bOV07XFxuXFxuICAgICBnbF9GcmFnQ29sb3IuYiA9IChtWzEwXSAqIGMucik7XFxuICAgICAgICBnbF9GcmFnQ29sb3IuYiArPSAobVsxMV0gKiBjLmcpO1xcbiAgICAgICAgZ2xfRnJhZ0NvbG9yLmIgKz0gKG1bMTJdICogYy5iKTtcXG4gICAgICAgIGdsX0ZyYWdDb2xvci5iICs9IChtWzEzXSAqIGMuYSk7XFxuICAgICAgICBnbF9GcmFnQ29sb3IuYiArPSBtWzE0XTtcXG5cXG4gICAgIGdsX0ZyYWdDb2xvci5hID0gKG1bMTVdICogYy5yKTtcXG4gICAgICAgIGdsX0ZyYWdDb2xvci5hICs9IChtWzE2XSAqIGMuZyk7XFxuICAgICAgICBnbF9GcmFnQ29sb3IuYSArPSAobVsxN10gKiBjLmIpO1xcbiAgICAgICAgZ2xfRnJhZ0NvbG9yLmEgKz0gKG1bMThdICogYy5hKTtcXG4gICAgICAgIGdsX0ZyYWdDb2xvci5hICs9IG1bMTldO1xcblxcbn1cXG5cIixcbiAgICAgICAgLy8gY3VzdG9tIHVuaWZvcm1zXG4gICAgICAgIHtcbiAgICAgICAgICAgIG06IHtcbiAgICAgICAgICAgICAgICB0eXBlOiAnMWZ2JywgdmFsdWU6IFtcbiAgICAgICAgICAgICAgICAgICAgMSwgMCwgMCwgMCwgMCxcbiAgICAgICAgICAgICAgICAgICAgMCwgMSwgMCwgMCwgMCxcbiAgICAgICAgICAgICAgICAgICAgMCwgMCwgMSwgMCwgMCxcbiAgICAgICAgICAgICAgICAgICAgMCwgMCwgMCwgMSwgMFxuICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICk7XG59XG5cbkNvbG9yTWF0cml4RmlsdGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoY29yZS5BYnN0cmFjdEZpbHRlci5wcm90b3R5cGUpO1xuQ29sb3JNYXRyaXhGaWx0ZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gQ29sb3JNYXRyaXhGaWx0ZXI7XG5tb2R1bGUuZXhwb3J0cyA9IENvbG9yTWF0cml4RmlsdGVyO1xuXG5cbi8qKlxuICogVHJhbnNmb3JtcyBjdXJyZW50IG1hdHJpeCBhbmQgc2V0IHRoZSBuZXcgb25lXG4gKlxuICogQHBhcmFtIG1hdHJpeCB7bnVtYmVyW119IChtYXQgNXg0KVxuICogQHBhcmFtIG11bHRpcGx5IHtib29sZWFufSBpZiB0cnVlLCBjdXJyZW50IG1hdHJpeCBhbmQgbWF0cml4IGFyZSBtdWx0aXBsaWVkLiBJZiBmYWxzZSwganVzdCBzZXQgdGhlIGN1cnJlbnQgbWF0cml4IHdpdGggQHBhcmFtIG1hdHJpeFxuICovXG5Db2xvck1hdHJpeEZpbHRlci5wcm90b3R5cGUuX2xvYWRNYXRyaXggPSBmdW5jdGlvbiAobWF0cml4LCBtdWx0aXBseSlcbntcbiAgICBtdWx0aXBseSA9ICEhbXVsdGlwbHk7XG5cbiAgICB2YXIgbmV3TWF0cml4ID0gbWF0cml4O1xuXG4gICAgaWYgKG11bHRpcGx5KSB7XG4gICAgICAgIHRoaXMuX211bHRpcGx5KG5ld01hdHJpeCwgdGhpcy51bmlmb3Jtcy5tLnZhbHVlLCBtYXRyaXgpO1xuICAgICAgICBuZXdNYXRyaXggPSB0aGlzLl9jb2xvck1hdHJpeChuZXdNYXRyaXgpO1xuICAgIH1cblxuICAgIC8vIHNldCB0aGUgbmV3IG1hdHJpeFxuICAgIHRoaXMudW5pZm9ybXMubS52YWx1ZSA9IG5ld01hdHJpeDtcbn07XG5cbi8qKlxuICogTXVsdGlwbGllcyB0d28gbWF0NSdzXG4gKlxuICogQHBhcmFtIG91dCB7bnVtYmVyW119IChtYXQgNXg0KSB0aGUgcmVjZWl2aW5nIG1hdHJpeFxuICogQHBhcmFtIGEge251bWJlcltdfSAobWF0IDV4NCkgdGhlIGZpcnN0IG9wZXJhbmRcbiAqIEBwYXJhbSBiIHtudW1iZXJbXX0gKG1hdCA1eDQpIHRoZSBzZWNvbmQgb3BlcmFuZFxuICogQHJldHVybnMgb3V0IHtudW1iZXJbXX0gKG1hdCA1eDQpXG4gKi9cbkNvbG9yTWF0cml4RmlsdGVyLnByb3RvdHlwZS5fbXVsdGlwbHkgPSBmdW5jdGlvbiAob3V0LCBhLCBiKVxue1xuXG4gICAgLy8gUmVkIENoYW5uZWxcbiAgICBvdXRbMF0gPSAoYVswXSAqIGJbMF0pICsgKGFbMV0gKiBiWzVdKSArIChhWzJdICogYlsxMF0pICsgKGFbM10gKiBiWzE1XSk7XG4gICAgb3V0WzFdID0gKGFbMF0gKiBiWzFdKSArIChhWzFdICogYls2XSkgKyAoYVsyXSAqIGJbMTFdKSArIChhWzNdICogYlsxNl0pO1xuICAgIG91dFsyXSA9IChhWzBdICogYlsyXSkgKyAoYVsxXSAqIGJbN10pICsgKGFbMl0gKiBiWzEyXSkgKyAoYVszXSAqIGJbMTddKTtcbiAgICBvdXRbM10gPSAoYVswXSAqIGJbM10pICsgKGFbMV0gKiBiWzhdKSArIChhWzJdICogYlsxM10pICsgKGFbM10gKiBiWzE4XSk7XG4gICAgb3V0WzRdID0gKGFbMF0gKiBiWzRdKSArIChhWzFdICogYls5XSkgKyAoYVsyXSAqIGJbMTRdKSArIChhWzNdICogYlsxOV0pO1xuXG4gICAgLy8gR3JlZW4gQ2hhbm5lbFxuICAgIG91dFs1XSA9IChhWzVdICogYlswXSkgKyAoYVs2XSAqIGJbNV0pICsgKGFbN10gKiBiWzEwXSkgKyAoYVs4XSAqIGJbMTVdKTtcbiAgICBvdXRbNl0gPSAoYVs1XSAqIGJbMV0pICsgKGFbNl0gKiBiWzZdKSArIChhWzddICogYlsxMV0pICsgKGFbOF0gKiBiWzE2XSk7XG4gICAgb3V0WzddID0gKGFbNV0gKiBiWzJdKSArIChhWzZdICogYls3XSkgKyAoYVs3XSAqIGJbMTJdKSArIChhWzhdICogYlsxN10pO1xuICAgIG91dFs4XSA9IChhWzVdICogYlszXSkgKyAoYVs2XSAqIGJbOF0pICsgKGFbN10gKiBiWzEzXSkgKyAoYVs4XSAqIGJbMThdKTtcbiAgICBvdXRbOV0gPSAoYVs1XSAqIGJbNF0pICsgKGFbNl0gKiBiWzldKSArIChhWzddICogYlsxNF0pICsgKGFbOF0gKiBiWzE5XSk7XG5cbiAgICAvLyBCbHVlIENoYW5uZWxcbiAgICBvdXRbMTBdID0gKGFbMTBdICogYlswXSkgKyAoYVsxMV0gKiBiWzVdKSArIChhWzEyXSAqIGJbMTBdKSArIChhWzEzXSAqIGJbMTVdKTtcbiAgICBvdXRbMTFdID0gKGFbMTBdICogYlsxXSkgKyAoYVsxMV0gKiBiWzZdKSArIChhWzEyXSAqIGJbMTFdKSArIChhWzEzXSAqIGJbMTZdKTtcbiAgICBvdXRbMTJdID0gKGFbMTBdICogYlsyXSkgKyAoYVsxMV0gKiBiWzddKSArIChhWzEyXSAqIGJbMTJdKSArIChhWzEzXSAqIGJbMTddKTtcbiAgICBvdXRbMTNdID0gKGFbMTBdICogYlszXSkgKyAoYVsxMV0gKiBiWzhdKSArIChhWzEyXSAqIGJbMTNdKSArIChhWzEzXSAqIGJbMThdKTtcbiAgICBvdXRbMTRdID0gKGFbMTBdICogYls0XSkgKyAoYVsxMV0gKiBiWzldKSArIChhWzEyXSAqIGJbMTRdKSArIChhWzEzXSAqIGJbMTldKTtcblxuICAgIC8vIEFscGhhIENoYW5uZWxcbiAgICBvdXRbMTVdID0gKGFbMTVdICogYlswXSkgKyAoYVsxNl0gKiBiWzVdKSArIChhWzE3XSAqIGJbMTBdKSArIChhWzE4XSAqIGJbMTVdKTtcbiAgICBvdXRbMTZdID0gKGFbMTVdICogYlsxXSkgKyAoYVsxNl0gKiBiWzZdKSArIChhWzE3XSAqIGJbMTFdKSArIChhWzE4XSAqIGJbMTZdKTtcbiAgICBvdXRbMTddID0gKGFbMTVdICogYlsyXSkgKyAoYVsxNl0gKiBiWzddKSArIChhWzE3XSAqIGJbMTJdKSArIChhWzE4XSAqIGJbMTddKTtcbiAgICBvdXRbMThdID0gKGFbMTVdICogYlszXSkgKyAoYVsxNl0gKiBiWzhdKSArIChhWzE3XSAqIGJbMTNdKSArIChhWzE4XSAqIGJbMThdKTtcbiAgICBvdXRbMTldID0gKGFbMTVdICogYls0XSkgKyAoYVsxNl0gKiBiWzldKSArIChhWzE3XSAqIGJbMTRdKSArIChhWzE4XSAqIGJbMTldKTtcblxuICAgIHJldHVybiBvdXQ7XG59O1xuXG4vKipcbiAqIENyZWF0ZSBhIEZsb2F0MzIgQXJyYXkgYW5kIG5vcm1hbGl6ZSB0aGUgb2Zmc2V0IGNvbXBvbmVudCB0byAwLTFcbiAqXG4gKiBAcGFyYW0gbWF0cml4IHtudW1iZXJbXX0gKG1hdCA1eDQpXG4gKiBAcmV0dXJuIG0ge251bWJlcltdfSAobWF0IDV4NCkgd2l0aCBhbGwgdmFsdWVzIGJldHdlZW4gMC0xXG4gKi9cbkNvbG9yTWF0cml4RmlsdGVyLnByb3RvdHlwZS5fY29sb3JNYXRyaXggPSBmdW5jdGlvbiAobWF0cml4KVxue1xuICAgIC8vIENyZWF0ZSBhIEZsb2F0MzIgQXJyYXkgYW5kIG5vcm1hbGl6ZSB0aGUgb2Zmc2V0IGNvbXBvbmVudCB0byAwLTFcbiAgICB2YXIgbSA9IG5ldyBGbG9hdDMyQXJyYXkobWF0cml4KTtcbiAgICBtWzRdIC89IDI1NTtcbiAgICBtWzldIC89IDI1NTtcbiAgICBtWzE0XSAvPSAyNTU7XG4gICAgbVsxOV0gLz0gMjU1O1xuXG4gICAgcmV0dXJuIG07XG59O1xuXG4vKipcbiAqIEFkanVzdHMgYnJpZ2h0bmVzc1xuICpcbiAqIEBwYXJhbSBiIHtudW1iZXJ9IHZhbHVlIG9mIHRoZSBicmlndGhuZXNzICgwIGlzIGJsYWNrKVxuICogQHBhcmFtIG11bHRpcGx5IHtib29sZWFufSByZWZlciB0byAuX2xvYWRNYXRyaXgoKSBtZXRob2RcbiAqL1xuQ29sb3JNYXRyaXhGaWx0ZXIucHJvdG90eXBlLmJyaWdodG5lc3MgPSBmdW5jdGlvbiAoYiwgbXVsdGlwbHkpXG57XG4gICAgdmFyIG1hdHJpeCA9IFtcbiAgICAgICAgYiwgMCwgMCwgMCwgMCxcbiAgICAgICAgMCwgYiwgMCwgMCwgMCxcbiAgICAgICAgMCwgMCwgYiwgMCwgMCxcbiAgICAgICAgMCwgMCwgMCwgMSwgMFxuICAgIF07XG5cbiAgICB0aGlzLl9sb2FkTWF0cml4KG1hdHJpeCwgbXVsdGlwbHkpO1xufTtcblxuLyoqXG4gKiBTZXQgdGhlIG1hdHJpY2VzIGluIGdyZXkgc2NhbGVzXG4gKlxuICogQHBhcmFtIHNjYWxlIHtudW1iZXJ9IHZhbHVlIG9mIHRoZSBncmV5ICgwIGlzIGJsYWNrKVxuICogQHBhcmFtIG11bHRpcGx5IHtib29sZWFufSByZWZlciB0byAuX2xvYWRNYXRyaXgoKSBtZXRob2RcbiAqL1xuQ29sb3JNYXRyaXhGaWx0ZXIucHJvdG90eXBlLmdyZXlzY2FsZSA9IGZ1bmN0aW9uIChzY2FsZSwgbXVsdGlwbHkpXG57XG4gICAgdmFyIG1hdHJpeCA9IFtcbiAgICAgICAgc2NhbGUsIHNjYWxlLCBzY2FsZSwgMCwgMCxcbiAgICAgICAgc2NhbGUsIHNjYWxlLCBzY2FsZSwgMCwgMCxcbiAgICAgICAgc2NhbGUsIHNjYWxlLCBzY2FsZSwgMCwgMCxcbiAgICAgICAgMCwgMCwgMCwgMSwgMFxuICAgIF07XG5cbiAgICB0aGlzLl9sb2FkTWF0cml4KG1hdHJpeCwgbXVsdGlwbHkpO1xufTtcbi8vQW1lcmljYW5pemVkIGFsaWFzXG5Db2xvck1hdHJpeEZpbHRlci5wcm90b3R5cGUuZ3JheXNjYWxlID0gQ29sb3JNYXRyaXhGaWx0ZXIucHJvdG90eXBlLmdyZXlzY2FsZTtcblxuLyoqXG4gKiBTZXQgdGhlIGJsYWNrIGFuZCB3aGl0ZSBtYXRyaWNlXG4gKiBNdWx0aXBseSB0aGUgY3VycmVudCBtYXRyaXhcbiAqXG4gKiBAcGFyYW0gbXVsdGlwbHkge2Jvb2xlYW59IHJlZmVyIHRvIC5fbG9hZE1hdHJpeCgpIG1ldGhvZFxuICovXG5Db2xvck1hdHJpeEZpbHRlci5wcm90b3R5cGUuYmxhY2tBbmRXaGl0ZSA9IGZ1bmN0aW9uIChtdWx0aXBseSlcbntcbiAgICB2YXIgbWF0cml4ID0gW1xuICAgICAgICAwLjMsIDAuNiwgMC4xLCAwLCAwLFxuICAgICAgICAwLjMsIDAuNiwgMC4xLCAwLCAwLFxuICAgICAgICAwLjMsIDAuNiwgMC4xLCAwLCAwLFxuICAgICAgICAwLCAwLCAwLCAxLCAwXG4gICAgXTtcblxuICAgIHRoaXMuX2xvYWRNYXRyaXgobWF0cml4LCBtdWx0aXBseSk7XG59O1xuXG4vKipcbiAqIFNldCB0aGUgaHVlIHByb3BlcnR5IG9mIHRoZSBjb2xvclxuICpcbiAqIEBwYXJhbSByb3RhdGlvbiB7bnVtYmVyfSBpbiBkZWdyZWVzXG4gKiBAcGFyYW0gbXVsdGlwbHkge2Jvb2xlYW59IHJlZmVyIHRvIC5fbG9hZE1hdHJpeCgpIG1ldGhvZFxuICovXG5Db2xvck1hdHJpeEZpbHRlci5wcm90b3R5cGUuaHVlID0gZnVuY3Rpb24gKHJvdGF0aW9uLCBtdWx0aXBseSlcbntcbiAgICByb3RhdGlvbiA9IChyb3RhdGlvbiB8fCAwKSAvIDE4MCAqIE1hdGguUEk7XG4gICAgdmFyIGNvcyA9IE1hdGguY29zKHJvdGF0aW9uKSxcbiAgICAgICAgc2luID0gTWF0aC5zaW4ocm90YXRpb24pO1xuXG4gICAgLy8gbHVtaW5hbmNlUmVkLCBsdW1pbmFuY2VHcmVlbiwgbHVtaW5hbmNlQmx1ZVxuICAgIHZhciBsdW1SID0gMC4yMTMsIC8vIG9yIDAuMzA4NlxuICAgICAgICBsdW1HID0gMC43MTUsIC8vIG9yIDAuNjA5NFxuICAgICAgICBsdW1CID0gMC4wNzI7IC8vIG9yIDAuMDgyMFxuXG4gICAgdmFyIG1hdHJpeCA9IFtcbiAgICAgICAgbHVtUiArIGNvcyAqICgxIC0gbHVtUikgKyBzaW4gKiAoLWx1bVIpLCBsdW1HICsgY29zICogKC1sdW1HKSArIHNpbiAqICgtbHVtRyksIGx1bUIgKyBjb3MgKiAoLWx1bUIpICsgc2luICogKDEgLSBsdW1CKSwgMCwgMCxcbiAgICAgICAgbHVtUiArIGNvcyAqICgtbHVtUikgKyBzaW4gKiAoMC4xNDMpLCBsdW1HICsgY29zICogKDEgLSBsdW1HKSArIHNpbiAqICgwLjE0MCksIGx1bUIgKyBjb3MgKiAoLWx1bUIpICsgc2luICogKC0wLjI4MyksIDAsIDAsXG4gICAgICAgIGx1bVIgKyBjb3MgKiAoLWx1bVIpICsgc2luICogKC0oMSAtIGx1bVIpKSwgbHVtRyArIGNvcyAqICgtbHVtRykgKyBzaW4gKiAobHVtRyksIGx1bUIgKyBjb3MgKiAoMSAtIGx1bUIpICsgc2luICogKGx1bUIpLCAwLCAwLFxuICAgICAgICAwLCAwLCAwLCAxLCAwXG4gICAgXTtcblxuICAgIHRoaXMuX2xvYWRNYXRyaXgobWF0cml4LCBtdWx0aXBseSk7XG59O1xuXG5cbi8qKlxuICogU2V0IHRoZSBjb250cmFzdCBtYXRyaXgsIGluY3JlYXNlIHRoZSBzZXBhcmF0aW9uIGJldHdlZW4gZGFyayBhbmQgYnJpZ2h0XG4gKiBJbmNyZWFzZSBjb250cmFzdCA6IHNoYWRvd3MgZGFya2VyIGFuZCBoaWdobGlnaHRzIGJyaWdodGVyXG4gKiBEZWNyZWFzZSBjb250cmFzdCA6IGJyaW5nIHRoZSBzaGFkb3dzIHVwIGFuZCB0aGUgaGlnaGxpZ2h0cyBkb3duXG4gKlxuICogQHBhcmFtIGFtb3VudCB7bnVtYmVyfSB2YWx1ZSBvZiB0aGUgY29udHJhc3RcbiAqIEBwYXJhbSBtdWx0aXBseSB7Ym9vbGVhbn0gcmVmZXIgdG8gLl9sb2FkTWF0cml4KCkgbWV0aG9kXG4gKi9cbkNvbG9yTWF0cml4RmlsdGVyLnByb3RvdHlwZS5jb250cmFzdCA9IGZ1bmN0aW9uIChhbW91bnQsIG11bHRpcGx5KVxue1xuICAgIHZhciB2ID0gKGFtb3VudCB8fCAwKSArIDE7XG4gICAgdmFyIG8gPSAtMTI4ICogKHYgLSAxKTtcblxuICAgIHZhciBtYXRyaXggPSBbXG4gICAgICAgIHYsIDAsIDAsIDAsIG8sXG4gICAgICAgIDAsIHYsIDAsIDAsIG8sXG4gICAgICAgIDAsIDAsIHYsIDAsIG8sXG4gICAgICAgIDAsIDAsIDAsIDEsIDBcbiAgICBdO1xuXG4gICAgdGhpcy5fbG9hZE1hdHJpeChtYXRyaXgsIG11bHRpcGx5KTtcbn07XG5cbi8qKlxuICogU2V0IHRoZSBzYXR1cmF0aW9uIG1hdHJpeCwgaW5jcmVhc2UgdGhlIHNlcGFyYXRpb24gYmV0d2VlbiBjb2xvcnNcbiAqIEluY3JlYXNlIHNhdHVyYXRpb24gOiBpbmNyZWFzZSBjb250cmFzdCwgYnJpZ2h0bmVzcywgYW5kIHNoYXJwbmVzc1xuICpcbiAqIEBwYXJhbSBhbW91bnQge251bWJlcn1cbiAqIEBwYXJhbSBtdWx0aXBseSB7Ym9vbGVhbn0gcmVmZXIgdG8gLl9sb2FkTWF0cml4KCkgbWV0aG9kXG4gKi9cbkNvbG9yTWF0cml4RmlsdGVyLnByb3RvdHlwZS5zYXR1cmF0ZSA9IGZ1bmN0aW9uIChhbW91bnQsIG11bHRpcGx5KVxue1xuICAgIHZhciB4ID0gKGFtb3VudCB8fCAwKSAqIDIgLyAzICsgMTtcbiAgICB2YXIgeSA9ICgoeCAtIDEpICogLTAuNSk7XG5cbiAgICB2YXIgbWF0cml4ID0gW1xuICAgICAgICB4LCB5LCB5LCAwLCAwLFxuICAgICAgICB5LCB4LCB5LCAwLCAwLFxuICAgICAgICB5LCB5LCB4LCAwLCAwLFxuICAgICAgICAwLCAwLCAwLCAxLCAwXG4gICAgXTtcblxuICAgIHRoaXMuX2xvYWRNYXRyaXgobWF0cml4LCBtdWx0aXBseSk7XG59O1xuXG4vKipcbiAqIERlc2F0dXJhdGUgaW1hZ2UgKHJlbW92ZSBjb2xvcilcbiAqXG4gKiBDYWxsIHRoZSBzYXR1cmF0ZSBmdW5jdGlvblxuICpcbiAqIEBwYXJhbSBtdWx0aXBseSB7Ym9vbGVhbn0gcmVmZXIgdG8gLl9sb2FkTWF0cml4KCkgbWV0aG9kXG4gKi9cbkNvbG9yTWF0cml4RmlsdGVyLnByb3RvdHlwZS5kZXNhdHVyYXRlID0gZnVuY3Rpb24gKG11bHRpcGx5KSAvLyBqc2hpbnQgdW51c2VkOmZhbHNlXG57XG4gICAgdGhpcy5zYXR1cmF0ZSgtMSk7XG59O1xuXG4vKipcbiAqIE5lZ2F0aXZlIGltYWdlIChpbnZlcnNlIG9mIGNsYXNzaWMgcmdiIG1hdHJpeClcbiAqXG4gKiBAcGFyYW0gbXVsdGlwbHkge2Jvb2xlYW59IHJlZmVyIHRvIC5fbG9hZE1hdHJpeCgpIG1ldGhvZFxuICovXG5Db2xvck1hdHJpeEZpbHRlci5wcm90b3R5cGUubmVnYXRpdmUgPSBmdW5jdGlvbiAobXVsdGlwbHkpXG57XG4gICAgdmFyIG1hdHJpeCA9IFtcbiAgICAgICAgMCwgMSwgMSwgMCwgMCxcbiAgICAgICAgMSwgMCwgMSwgMCwgMCxcbiAgICAgICAgMSwgMSwgMCwgMCwgMCxcbiAgICAgICAgMCwgMCwgMCwgMSwgMFxuICAgIF07XG5cbiAgICB0aGlzLl9sb2FkTWF0cml4KG1hdHJpeCwgbXVsdGlwbHkpO1xufTtcblxuLyoqXG4gKiBTZXBpYSBpbWFnZVxuICpcbiAqIEBwYXJhbSBtdWx0aXBseSB7Ym9vbGVhbn0gcmVmZXIgdG8gLl9sb2FkTWF0cml4KCkgbWV0aG9kXG4gKi9cbkNvbG9yTWF0cml4RmlsdGVyLnByb3RvdHlwZS5zZXBpYSA9IGZ1bmN0aW9uIChtdWx0aXBseSlcbntcbiAgICB2YXIgbWF0cml4ID0gW1xuICAgICAgICAwLjM5MywgMC43Njg5OTk5LCAwLjE4ODk5OTk5LCAwLCAwLFxuICAgICAgICAwLjM0OSwgMC42ODU5OTk5LCAwLjE2Nzk5OTk5LCAwLCAwLFxuICAgICAgICAwLjI3MiwgMC41MzM5OTk5LCAwLjEzMDk5OTk5LCAwLCAwLFxuICAgICAgICAwLCAwLCAwLCAxLCAwXG4gICAgXTtcblxuICAgIHRoaXMuX2xvYWRNYXRyaXgobWF0cml4LCBtdWx0aXBseSk7XG59O1xuXG4vKipcbiAqIENvbG9yIG1vdGlvbiBwaWN0dXJlIHByb2Nlc3MgaW52ZW50ZWQgaW4gMTkxNiAodGhhbmtzIERvbWluaWMgU3phYmxld3NraSlcbiAqXG4gKiBAcGFyYW0gbXVsdGlwbHkge2Jvb2xlYW59IHJlZmVyIHRvIC5fbG9hZE1hdHJpeCgpIG1ldGhvZFxuICovXG5Db2xvck1hdHJpeEZpbHRlci5wcm90b3R5cGUudGVjaG5pY29sb3IgPSBmdW5jdGlvbiAobXVsdGlwbHkpXG57XG4gICAgdmFyIG1hdHJpeCA9IFtcbiAgICAgICAgMS45MTI1Mjc3ODkxNDU2MDgzLCAtMC44NTQ1MzQ0OTc2OTUxNjQ1LCAtMC4wOTE1NTUwODQ4Mjc1NTU4NSwgMCwgMTEuNzkzNjAzNDM0Mzc3MzM3LFxuICAgICAgICAtMC4zMDg3ODMzMzg1OTI4MDk3LCAxLjc2NTg5MDg1NTU0NTg0MjgsIC0wLjEwNjAxNzQzMDc0NzIyMjQ1LCAwLCAtNzAuMzUyMDUxNjE0NjEzOTgsXG4gICAgICAgIC0wLjIzMTEwMzM3NzU0ODYxNiwgLTAuNzUwMTg5OTE5NzQ0MDIxMiwgMS44NDc1OTc4MTYxMDgxODksIDAsIDMwLjk1MDk0MDg2OTQ5MTEzOCxcbiAgICAgICAgMCwgMCwgMCwgMSwgMFxuICAgIF07XG5cbiAgICB0aGlzLl9sb2FkTWF0cml4KG1hdHJpeCwgbXVsdGlwbHkpO1xufTtcblxuLyoqXG4gKiBQb2xhcm9pZCBmaWx0ZXJcbiAqXG4gKiBAcGFyYW0gbXVsdGlwbHkge2Jvb2xlYW59IHJlZmVyIHRvIC5fbG9hZE1hdHJpeCgpIG1ldGhvZFxuICovXG5Db2xvck1hdHJpeEZpbHRlci5wcm90b3R5cGUucG9sYXJvaWQgPSBmdW5jdGlvbiAobXVsdGlwbHkpXG57XG4gICAgdmFyIG1hdHJpeCA9IFtcbiAgICAgICAgMS40MzgsIC0wLjA2MiwgLTAuMDYyLCAwLCAwLFxuICAgICAgICAtMC4xMjIsIDEuMzc4LCAtMC4xMjIsIDAsIDAsXG4gICAgICAgIC0wLjAxNiwgLTAuMDE2LCAxLjQ4MywgMCwgMCxcbiAgICAgICAgMCwgMCwgMCwgMSwgMFxuICAgIF07XG5cbiAgICB0aGlzLl9sb2FkTWF0cml4KG1hdHJpeCwgbXVsdGlwbHkpO1xufTtcblxuLyoqXG4gKiBGaWx0ZXIgd2hvIHRyYW5zZm9ybXMgOiBSZWQgLT4gQmx1ZSBhbmQgQmx1ZSAtPiBSZWRcbiAqXG4gKiBAcGFyYW0gbXVsdGlwbHkge2Jvb2xlYW59IHJlZmVyIHRvIC5fbG9hZE1hdHJpeCgpIG1ldGhvZFxuICovXG5Db2xvck1hdHJpeEZpbHRlci5wcm90b3R5cGUudG9CR1IgPSBmdW5jdGlvbiAobXVsdGlwbHkpXG57XG4gICAgdmFyIG1hdHJpeCA9IFtcbiAgICAgICAgMCwgMCwgMSwgMCwgMCxcbiAgICAgICAgMCwgMSwgMCwgMCwgMCxcbiAgICAgICAgMSwgMCwgMCwgMCwgMCxcbiAgICAgICAgMCwgMCwgMCwgMSwgMFxuICAgIF07XG5cbiAgICB0aGlzLl9sb2FkTWF0cml4KG1hdHJpeCwgbXVsdGlwbHkpO1xufTtcblxuLyoqXG4gKiBDb2xvciByZXZlcnNhbCBmaWxtIGludHJvZHVjZWQgYnkgRWFzdG1hbiBLb2RhayBpbiAxOTM1LiAodGhhbmtzIERvbWluaWMgU3phYmxld3NraSlcbiAqXG4gKiBAcGFyYW0gbXVsdGlwbHkge2Jvb2xlYW59IHJlZmVyIHRvIC5fbG9hZE1hdHJpeCgpIG1ldGhvZFxuICovXG5Db2xvck1hdHJpeEZpbHRlci5wcm90b3R5cGUua29kYWNocm9tZSA9IGZ1bmN0aW9uIChtdWx0aXBseSlcbntcbiAgICB2YXIgbWF0cml4ID0gW1xuICAgICAgICAxLjEyODU1ODIzOTY1OTM1MjUsIC0wLjM5NjczODIyODM2MDEzNDgsIC0wLjAzOTkyNTU5MTcyOTIxNzkzLCAwLCA2My43Mjk1ODc2MjE5NjUwMixcbiAgICAgICAgLTAuMTY0MDQzMzk5NjIyNDQ2MTYsIDEuMDgzNTI1MTU2NjI5MTMwNCwgLTAuMDU0OTg4MDUxMTU2MzMxMzIsIDAsIDI0LjczMjQwNzg5NjcwNjIwMyxcbiAgICAgICAgLTAuMTY3ODYwMTA3MDYxNTU3NjMsIC0wLjU2MDM0MTYyNzc2OTUyNDgsIDEuNjAxNDg1MDc2MTk2NDk0MywgMCwgMzUuNjI5ODI4MDc0NjA5NDYsXG4gICAgICAgIDAsIDAsIDAsIDEsIDBcbiAgICBdO1xuXG4gICAgdGhpcy5fbG9hZE1hdHJpeChtYXRyaXgsIG11bHRpcGx5KTtcbn07XG5cbi8qKlxuICogQnJvd24gZGVsaWNpb3VzIGJyb3duaSBmaWx0ZXIgKHRoYW5rcyBEb21pbmljIFN6YWJsZXdza2kpXG4gKlxuICogQHBhcmFtIG11bHRpcGx5IHtib29sZWFufSByZWZlciB0byAuX2xvYWRNYXRyaXgoKSBtZXRob2RcbiAqL1xuQ29sb3JNYXRyaXhGaWx0ZXIucHJvdG90eXBlLmJyb3duaSA9IGZ1bmN0aW9uIChtdWx0aXBseSlcbntcbiAgICB2YXIgbWF0cml4ID0gW1xuICAgICAgICAwLjU5OTcwMjM0OTgxNTk3MTUsIDAuMzQ1NTMyNDMwNDgzOTEyNjMsIC0wLjI3MDgyOTg2NzQ1MzgwNDIsIDAsIDQ3LjQzMTkyODU1NjAwODczLFxuICAgICAgICAtMC4wMzc3MDMyNDk4Mzc3ODMxNTcsIDAuODYwOTU3NzU4Nzk5MjY0MSwgMC4xNTA1OTU1MjM4ODQ1OTkxMywgMCwgLTM2Ljk2ODQxNDk4MzE5MTI3LFxuICAgICAgICAwLjI0MTEzNjM1MTI4MTUzMzM1LCAtMC4wNzQ0MTAzNzkwODQyMjQ5MiwgMC40NDk3MjE4MjA2NDg3NzE1MywgMCwgLTcuNTYyMDc1Mjc3NTkxMjgzLFxuICAgICAgICAwLCAwLCAwLCAxLCAwXG4gICAgXTtcblxuICAgIHRoaXMuX2xvYWRNYXRyaXgobWF0cml4LCBtdWx0aXBseSk7XG59O1xuXG4vKlxuICogVmludGFnZSBmaWx0ZXIgKHRoYW5rcyBEb21pbmljIFN6YWJsZXdza2kpXG4gKlxuICogQHBhcmFtIG11bHRpcGx5IHtib29sZWFufSByZWZlciB0byAuX2xvYWRNYXRyaXgoKSBtZXRob2RcbiAqL1xuQ29sb3JNYXRyaXhGaWx0ZXIucHJvdG90eXBlLnZpbnRhZ2UgPSBmdW5jdGlvbiAobXVsdGlwbHkpXG57XG4gICAgdmFyIG1hdHJpeCA9IFtcbiAgICAgICAgMC42Mjc5MzQ1NjM1NjA1OTk0LCAwLjMyMDIxODM0MjA4MTkzNjcsIC0wLjAzOTY1NDA4MjExMzEyNDUzLCAwLCA5LjY1MTI4NTgzNTI5NDEyMyxcbiAgICAgICAgMC4wMjU3ODM5NzcwNDgwODg2OCwgMC42NDQxMTg4NjQ0Mzc0NzcxLCAwLjAzMjU5MTI3NjE2MTQ5Mjk0LCAwLCA3LjQ2MjgyOTE3NjQ3MDU5MSxcbiAgICAgICAgMC4wNDY2MDU1NTU2NzgyNzE5LCAtMC4wODUxMjMyOTg3MjQ3ODkxLCAwLjUyNDE2NDgwMTg3MDA0NjUsIDAsIDUuMTU5MTkwNTg4MjM1Mjk2LFxuICAgICAgICAwLCAwLCAwLCAxLCAwXG4gICAgXTtcblxuICAgIHRoaXMuX2xvYWRNYXRyaXgobWF0cml4LCBtdWx0aXBseSk7XG59O1xuXG4vKlxuICogV2UgZG9uJ3Qga25vdyBleGFjdGx5IHdoYXQgaXQgZG9lcywga2luZCBvZiBncmFkaWVudCBtYXAsIGJ1dCBmdW5ueSB0byBwbGF5IHdpdGghXG4gKlxuICogQHBhcmFtIGRlc2F0dXJhdGlvbiB7bnVtYmVyfVxuICogQHBhcmFtIHRvbmVkIHtudW1iZXJ9XG4gKiBAcGFyYW0gbGlnaHRDb2xvciB7c3RyaW5nfSAoZXhhbXBsZSA6IFwiMHhGRkU1ODBcIilcbiAqIEBwYXJhbSBkYXJrQ29sb3Ige3N0cmluZ30gIChleGFtcGxlIDogXCIweEZGRTU4MFwiKVxuICpcbiAqIEBwYXJhbSBtdWx0aXBseSB7Ym9vbGVhbn0gcmVmZXIgdG8gLl9sb2FkTWF0cml4KCkgbWV0aG9kXG4gKi9cbkNvbG9yTWF0cml4RmlsdGVyLnByb3RvdHlwZS5jb2xvclRvbmUgPSBmdW5jdGlvbiAoZGVzYXR1cmF0aW9uLCB0b25lZCwgbGlnaHRDb2xvciwgZGFya0NvbG9yLCBtdWx0aXBseSlcbntcbiAgICBkZXNhdHVyYXRpb24gPSBkZXNhdHVyYXRpb24gfHwgMC4yO1xuICAgIHRvbmVkID0gdG9uZWQgfHwgMC4xNTtcbiAgICBsaWdodENvbG9yID0gbGlnaHRDb2xvciB8fCAweEZGRTU4MDtcbiAgICBkYXJrQ29sb3IgPSBkYXJrQ29sb3IgfHwgMHgzMzgwMDA7XG5cbiAgICB2YXIgbFIgPSAoKGxpZ2h0Q29sb3IgPj4gMTYpICYgMHhGRikgLyAyNTU7XG4gICAgdmFyIGxHID0gKChsaWdodENvbG9yID4+IDgpICYgMHhGRikgLyAyNTU7XG4gICAgdmFyIGxCID0gKGxpZ2h0Q29sb3IgJiAweEZGKSAvIDI1NTtcblxuICAgIHZhciBkUiA9ICgoZGFya0NvbG9yID4+IDE2KSAmIDB4RkYpIC8gMjU1O1xuICAgIHZhciBkRyA9ICgoZGFya0NvbG9yID4+IDgpICYgMHhGRikgLyAyNTU7XG4gICAgdmFyIGRCID0gKGRhcmtDb2xvciAmIDB4RkYpIC8gMjU1O1xuXG4gICAgdmFyIG1hdHJpeCA9IFtcbiAgICAgICAgMC4zLCAwLjU5LCAwLjExLCAwLCAwLFxuICAgICAgICBsUiwgbEcsIGxCLCBkZXNhdHVyYXRpb24sIDAsXG4gICAgICAgIGRSLCBkRywgZEIsIHRvbmVkLCAwLFxuICAgICAgICBsUiAtIGRSLCBsRyAtIGRHLCBsQiAtIGRCLCAwLCAwXG4gICAgXTtcblxuICAgIHRoaXMuX2xvYWRNYXRyaXgobWF0cml4LCBtdWx0aXBseSk7XG59O1xuXG4vKlxuICogTmlnaHQgZWZmZWN0XG4gKlxuICogQHBhcmFtIGludGVuc2l0eSB7bnVtYmVyfVxuICogQHBhcmFtIG11bHRpcGx5IHtib29sZWFufSByZWZlciB0byAuX2xvYWRNYXRyaXgoKSBtZXRob2RcbiAqL1xuQ29sb3JNYXRyaXhGaWx0ZXIucHJvdG90eXBlLm5pZ2h0ID0gZnVuY3Rpb24gKGludGVuc2l0eSwgbXVsdGlwbHkpXG57XG4gICAgaW50ZW5zaXR5ID0gaW50ZW5zaXR5IHx8IDAuMTtcbiAgICB2YXIgbWF0cml4ID0gW1xuICAgICAgICBpbnRlbnNpdHkgKiAoIC0yLjApLCAtaW50ZW5zaXR5LCAwLCAwLCAwLFxuICAgICAgICAtaW50ZW5zaXR5LCAwLCBpbnRlbnNpdHksIDAsIDAsXG4gICAgICAgIDAsIGludGVuc2l0eSwgaW50ZW5zaXR5ICogMi4wLCAwLCAwLFxuICAgICAgICAwLCAwLCAwLCAxLCAwXG4gICAgXTtcblxuICAgIHRoaXMuX2xvYWRNYXRyaXgobWF0cml4LCBtdWx0aXBseSk7XG59O1xuXG5cbi8qXG4gKiBQcmVkYXRvciBlZmZlY3RcbiAqXG4gKiBFcmFzZSB0aGUgY3VycmVudCBtYXRyaXggYnkgc2V0dGluZyBhIG5ldyBpbmRlcGVudCBvbmVcbiAqXG4gKiBAcGFyYW0gYW1vdW50IHtudW1iZXJ9IGhvdyBtdWNoIHRoZSBwcmVkYXRvciBmZWVscyBoaXMgZnV0dXJlIHZpY3RpbVxuICogQHBhcmFtIG11bHRpcGx5IHtib29sZWFufSByZWZlciB0byAuX2xvYWRNYXRyaXgoKSBtZXRob2RcbiAqL1xuQ29sb3JNYXRyaXhGaWx0ZXIucHJvdG90eXBlLnByZWRhdG9yID0gZnVuY3Rpb24gKGFtb3VudCwgbXVsdGlwbHkpXG57XG4gICAgdmFyIG1hdHJpeCA9IFtcbiAgICAgICAgMTEuMjI0MTMwNjMwNDkzMTY0ICogYW1vdW50LCAtNC43OTQ0ODY5OTk1MTE3MTkgKiBhbW91bnQsIC0yLjg3NDYxMTg1NDU1MzIyMjcgKiBhbW91bnQsIDAgKiBhbW91bnQsIDAuNDAzNDI0MzgyMjA5Nzc3ODMgKiBhbW91bnQsXG4gICAgICAgIC0zLjYzMzA2OTc1MzY0Njg1MDYgKiBhbW91bnQsIDkuMTkzMTU3MTk2MDQ0OTIyICogYW1vdW50LCAtMi45NTE4MTA4MzY3OTE5OTIgKiBhbW91bnQsIDAgKiBhbW91bnQsIC0xLjMxNjEzNTA0ODg2NjI3MiAqIGFtb3VudCxcbiAgICAgICAgLTMuMjE4NDE5NzkwMjY3OTQ0MyAqIGFtb3VudCwgLTQuMjM3NTAzMDUxNzU3ODEyNSAqIGFtb3VudCwgNy40NzY0NDgwNTkwODIwMzEgKiBhbW91bnQsIDAgKiBhbW91bnQsIDAuODA0NDQ1OTIyMzc0NzI1MyAqIGFtb3VudCxcbiAgICAgICAgMCwgMCwgMCwgMSwgMFxuICAgIF07XG5cbiAgICB0aGlzLl9sb2FkTWF0cml4KG1hdHJpeCwgbXVsdGlwbHkpO1xufTtcblxuLypcbiAqIExTRCBlZmZlY3RcbiAqXG4gKiBNdWx0aXBseSB0aGUgY3VycmVudCBtYXRyaXhcbiAqXG4gKiBAcGFyYW0gYW1vdW50IHtudW1iZXJ9IEhvdyBjcmF6eSBpcyB5b3VyIGVmZmVjdFxuICogQHBhcmFtIG11bHRpcGx5IHtib29sZWFufSByZWZlciB0byAuX2xvYWRNYXRyaXgoKSBtZXRob2RcbiAqL1xuQ29sb3JNYXRyaXhGaWx0ZXIucHJvdG90eXBlLmxzZCA9IGZ1bmN0aW9uIChtdWx0aXBseSlcbntcbiAgICB2YXIgbWF0cml4ID0gW1xuICAgICAgICAyLCAtMC40LCAwLjUsIDAsIDAsXG4gICAgICAgIC0wLjUsIDIsIC0wLjQsIDAsIDAsXG4gICAgICAgIC0wLjQsIC0wLjUsIDMsIDAsIDAsXG4gICAgICAgIDAsIDAsIDAsIDEsIDBcbiAgICBdO1xuXG4gICAgdGhpcy5fbG9hZE1hdHJpeChtYXRyaXgsIG11bHRpcGx5KTtcbn07XG5cbi8qXG4gKiBFcmFzZSB0aGUgY3VycmVudCBtYXRyaXggYnkgc2V0dGluZyB0aGUgZGVmYXVsdCBvbmVcbiAqXG4gKi9cbkNvbG9yTWF0cml4RmlsdGVyLnByb3RvdHlwZS5yZXNldCA9IGZ1bmN0aW9uICgpXG57XG4gICAgdmFyIG1hdHJpeCA9IFtcbiAgICAgICAgMSwgMCwgMCwgMCwgMCxcbiAgICAgICAgMCwgMSwgMCwgMCwgMCxcbiAgICAgICAgMCwgMCwgMSwgMCwgMCxcbiAgICAgICAgMCwgMCwgMCwgMSwgMFxuICAgIF07XG5cbiAgICB0aGlzLl9sb2FkTWF0cml4KG1hdHJpeCwgZmFsc2UpO1xufTtcblxuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhDb2xvck1hdHJpeEZpbHRlci5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBtYXRyaXggb2YgdGhlIGNvbG9yIG1hdHJpeCBmaWx0ZXJcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcltdfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuQ29sb3JNYXRyaXhGaWx0ZXIjXG4gICAgICogQGRlZmF1bHQgWzEsIDAsIDAsIDAsIDAsIDAsIDEsIDAsIDAsIDAsIDAsIDAsIDEsIDAsIDAsIDAsIDAsIDAsIDEsIDBdXG4gICAgICovXG4gICAgbWF0cml4OiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudW5pZm9ybXMubS52YWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudW5pZm9ybXMubS52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfVxufSk7XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uLy4uL2NvcmUnKTtcbi8vIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL3N1YnN0YWNrL2JyZnMvaXNzdWVzLzI1XG5cblxuLyoqXG4gKiBUaGlzIGxvd2VycyB0aGUgY29sb3IgZGVwdGggb2YgeW91ciBpbWFnZSBieSB0aGUgZ2l2ZW4gYW1vdW50LCBwcm9kdWNpbmcgYW4gaW1hZ2Ugd2l0aCBhIHNtYWxsZXIgcGFsZXR0ZS5cbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQWJzdHJhY3RGaWx0ZXJcbiAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnNcbiAqL1xuZnVuY3Rpb24gQ29sb3JTdGVwRmlsdGVyKClcbntcbiAgICBjb3JlLkFic3RyYWN0RmlsdGVyLmNhbGwodGhpcyxcbiAgICAgICAgLy8gdmVydGV4IHNoYWRlclxuICAgICAgICBudWxsLFxuICAgICAgICAvLyBmcmFnbWVudCBzaGFkZXJcbiAgICAgICAgXCJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcXG5cXG52YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDtcXG5cXG51bmlmb3JtIHNhbXBsZXIyRCB1U2FtcGxlcjtcXG51bmlmb3JtIGZsb2F0IHN0ZXA7XFxuXFxudm9pZCBtYWluKHZvaWQpXFxue1xcbiAgICB2ZWM0IGNvbG9yID0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2VGV4dHVyZUNvb3JkKTtcXG5cXG4gICAgY29sb3IgPSBmbG9vcihjb2xvciAqIHN0ZXApIC8gc3RlcDtcXG5cXG4gICAgZ2xfRnJhZ0NvbG9yID0gY29sb3I7XFxufVxcblwiLFxuICAgICAgICAvLyBjdXN0b20gdW5pZm9ybXNcbiAgICAgICAge1xuICAgICAgICAgICAgc3RlcDogeyB0eXBlOiAnMWYnLCB2YWx1ZTogNSB9XG4gICAgICAgIH1cbiAgICApO1xufVxuXG5Db2xvclN0ZXBGaWx0ZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShjb3JlLkFic3RyYWN0RmlsdGVyLnByb3RvdHlwZSk7XG5Db2xvclN0ZXBGaWx0ZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gQ29sb3JTdGVwRmlsdGVyO1xubW9kdWxlLmV4cG9ydHMgPSBDb2xvclN0ZXBGaWx0ZXI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKENvbG9yU3RlcEZpbHRlci5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBUaGUgbnVtYmVyIG9mIHN0ZXBzIHRvIHJlZHVjZSB0aGUgcGFsZXR0ZSBieS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLkNvbG9yU3RlcEZpbHRlciNcbiAgICAgKi9cbiAgICBzdGVwOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudW5pZm9ybXMuc3RlcC52YWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudW5pZm9ybXMuc3RlcC52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfVxufSk7XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uLy4uL2NvcmUnKTtcbi8vIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL3N1YnN0YWNrL2JyZnMvaXNzdWVzLzI1XG5cblxuLyoqXG4gKiBUaGUgQ29udm9sdXRpb25GaWx0ZXIgY2xhc3MgYXBwbGllcyBhIG1hdHJpeCBjb252b2x1dGlvbiBmaWx0ZXIgZWZmZWN0LlxuICogQSBjb252b2x1dGlvbiBjb21iaW5lcyBwaXhlbHMgaW4gdGhlIGlucHV0IGltYWdlIHdpdGggbmVpZ2hib3JpbmcgcGl4ZWxzIHRvIHByb2R1Y2UgYSBuZXcgaW1hZ2UuXG4gKiBBIHdpZGUgdmFyaWV0eSBvZiBpbWFnZSBlZmZlY3RzIGNhbiBiZSBhY2hpZXZlZCB0aHJvdWdoIGNvbnZvbHV0aW9ucywgaW5jbHVkaW5nIGJsdXJyaW5nLCBlZGdlXG4gKiBkZXRlY3Rpb24sIHNoYXJwZW5pbmcsIGVtYm9zc2luZywgYW5kIGJldmVsaW5nLiBUaGUgbWF0cml4IHNob3VsZCBiZSBzcGVjaWZpZWQgYXMgYSA5IHBvaW50IEFycmF5LlxuICogU2VlIGh0dHA6Ly9kb2NzLmdpbXAub3JnL2VuL3BsdWctaW4tY29udm1hdHJpeC5odG1sIGZvciBtb3JlIGluZm8uXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLkFic3RyYWN0RmlsdGVyXG4gKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzXG4gKiBAcGFyYW0gbWF0cml4IHtudW1iZXJbXX0gQW4gYXJyYXkgb2YgdmFsdWVzIHVzZWQgZm9yIG1hdHJpeCB0cmFuc2Zvcm1hdGlvbi4gU3BlY2lmaWVkIGFzIGEgOSBwb2ludCBBcnJheS5cbiAqIEBwYXJhbSB3aWR0aCB7bnVtYmVyfSBXaWR0aCBvZiB0aGUgb2JqZWN0IHlvdSBhcmUgdHJhbnNmb3JtaW5nXG4gKiBAcGFyYW0gaGVpZ2h0IHtudW1iZXJ9IEhlaWdodCBvZiB0aGUgb2JqZWN0IHlvdSBhcmUgdHJhbnNmb3JtaW5nXG4gKi9cbmZ1bmN0aW9uIENvbnZvbHV0aW9uRmlsdGVyKG1hdHJpeCwgd2lkdGgsIGhlaWdodClcbntcbiAgICBjb3JlLkFic3RyYWN0RmlsdGVyLmNhbGwodGhpcyxcbiAgICAgICAgLy8gdmVydGV4IHNoYWRlclxuICAgICAgICBudWxsLFxuICAgICAgICAvLyBmcmFnbWVudCBzaGFkZXJcbiAgICAgICAgXCJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcXG5cXG52YXJ5aW5nIG1lZGl1bXAgdmVjMiB2VGV4dHVyZUNvb3JkO1xcblxcbnVuaWZvcm0gc2FtcGxlcjJEIHVTYW1wbGVyO1xcbnVuaWZvcm0gdmVjMiB0ZXhlbFNpemU7XFxudW5pZm9ybSBmbG9hdCBtYXRyaXhbOV07XFxuXFxudm9pZCBtYWluKHZvaWQpXFxue1xcbiAgIHZlYzQgYzExID0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2VGV4dHVyZUNvb3JkIC0gdGV4ZWxTaXplKTsgLy8gdG9wIGxlZnRcXG4gICB2ZWM0IGMxMiA9IHRleHR1cmUyRCh1U2FtcGxlciwgdmVjMih2VGV4dHVyZUNvb3JkLngsIHZUZXh0dXJlQ29vcmQueSAtIHRleGVsU2l6ZS55KSk7IC8vIHRvcCBjZW50ZXJcXG4gICB2ZWM0IGMxMyA9IHRleHR1cmUyRCh1U2FtcGxlciwgdmVjMih2VGV4dHVyZUNvb3JkLnggKyB0ZXhlbFNpemUueCwgdlRleHR1cmVDb29yZC55IC0gdGV4ZWxTaXplLnkpKTsgLy8gdG9wIHJpZ2h0XFxuXFxuICAgdmVjNCBjMjEgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZlYzIodlRleHR1cmVDb29yZC54IC0gdGV4ZWxTaXplLngsIHZUZXh0dXJlQ29vcmQueSkpOyAvLyBtaWQgbGVmdFxcbiAgIHZlYzQgYzIyID0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2VGV4dHVyZUNvb3JkKTsgLy8gbWlkIGNlbnRlclxcbiAgIHZlYzQgYzIzID0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2ZWMyKHZUZXh0dXJlQ29vcmQueCArIHRleGVsU2l6ZS54LCB2VGV4dHVyZUNvb3JkLnkpKTsgLy8gbWlkIHJpZ2h0XFxuXFxuICAgdmVjNCBjMzEgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZlYzIodlRleHR1cmVDb29yZC54IC0gdGV4ZWxTaXplLngsIHZUZXh0dXJlQ29vcmQueSArIHRleGVsU2l6ZS55KSk7IC8vIGJvdHRvbSBsZWZ0XFxuICAgdmVjNCBjMzIgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZlYzIodlRleHR1cmVDb29yZC54LCB2VGV4dHVyZUNvb3JkLnkgKyB0ZXhlbFNpemUueSkpOyAvLyBib3R0b20gY2VudGVyXFxuICAgdmVjNCBjMzMgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZUZXh0dXJlQ29vcmQgKyB0ZXhlbFNpemUpOyAvLyBib3R0b20gcmlnaHRcXG5cXG4gICBnbF9GcmFnQ29sb3IgPVxcbiAgICAgICBjMTEgKiBtYXRyaXhbMF0gKyBjMTIgKiBtYXRyaXhbMV0gKyBjMTMgKiBtYXRyaXhbMl0gK1xcbiAgICAgICBjMjEgKiBtYXRyaXhbM10gKyBjMjIgKiBtYXRyaXhbNF0gKyBjMjMgKiBtYXRyaXhbNV0gK1xcbiAgICAgICBjMzEgKiBtYXRyaXhbNl0gKyBjMzIgKiBtYXRyaXhbN10gKyBjMzMgKiBtYXRyaXhbOF07XFxuXFxuICAgZ2xfRnJhZ0NvbG9yLmEgPSBjMjIuYTtcXG59XFxuXCIsXG4gICAgICAgIC8vIGN1c3RvbSB1bmlmb3Jtc1xuICAgICAgICB7XG4gICAgICAgICAgICBtYXRyaXg6ICAgICB7IHR5cGU6ICcxZnYnLCB2YWx1ZTogbmV3IEZsb2F0MzJBcnJheShtYXRyaXgpIH0sXG4gICAgICAgICAgICB0ZXhlbFNpemU6ICB7IHR5cGU6ICd2MicsIHZhbHVlOiB7IHg6IDEgLyB3aWR0aCwgeTogMSAvIGhlaWdodCB9IH1cbiAgICAgICAgfVxuICAgICk7XG59XG5cbkNvbnZvbHV0aW9uRmlsdGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoY29yZS5BYnN0cmFjdEZpbHRlci5wcm90b3R5cGUpO1xuQ29udm9sdXRpb25GaWx0ZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gQ29udm9sdXRpb25GaWx0ZXI7XG5tb2R1bGUuZXhwb3J0cyA9IENvbnZvbHV0aW9uRmlsdGVyO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhDb252b2x1dGlvbkZpbHRlci5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBBbiBhcnJheSBvZiB2YWx1ZXMgdXNlZCBmb3IgbWF0cml4IHRyYW5zZm9ybWF0aW9uLiBTcGVjaWZpZWQgYXMgYSA5IHBvaW50IEFycmF5LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyW119XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5Db252b2x1dGlvbkZpbHRlciNcbiAgICAgKi9cbiAgICBtYXRyaXg6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy51bmlmb3Jtcy5tYXRyaXgudmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLm1hdHJpeC52YWx1ZSA9IG5ldyBGbG9hdDMyQXJyYXkodmFsdWUpO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFdpZHRoIG9mIHRoZSBvYmplY3QgeW91IGFyZSB0cmFuc2Zvcm1pbmdcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLkNvbnZvbHV0aW9uRmlsdGVyI1xuICAgICAqL1xuICAgIHdpZHRoOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIDEvdGhpcy51bmlmb3Jtcy50ZXhlbFNpemUudmFsdWUueDtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudW5pZm9ybXMudGV4ZWxTaXplLnZhbHVlLnggPSAxL3ZhbHVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIEhlaWdodCBvZiB0aGUgb2JqZWN0IHlvdSBhcmUgdHJhbnNmb3JtaW5nXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5Db252b2x1dGlvbkZpbHRlciNcbiAgICAgKi9cbiAgICBoZWlnaHQ6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gMS90aGlzLnVuaWZvcm1zLnRleGVsU2l6ZS52YWx1ZS55O1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy50ZXhlbFNpemUudmFsdWUueSA9IDEvdmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG59KTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vLi4vY29yZScpO1xuLy8gQHNlZSBodHRwczovL2dpdGh1Yi5jb20vc3Vic3RhY2svYnJmcy9pc3N1ZXMvMjVcblxuXG4vKipcbiAqIEEgQ3Jvc3MgSGF0Y2ggZWZmZWN0IGZpbHRlci5cbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQWJzdHJhY3RGaWx0ZXJcbiAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnNcbiAqL1xuZnVuY3Rpb24gQ3Jvc3NIYXRjaEZpbHRlcigpXG57XG4gICAgY29yZS5BYnN0cmFjdEZpbHRlci5jYWxsKHRoaXMsXG4gICAgICAgIC8vIHZlcnRleCBzaGFkZXJcbiAgICAgICAgbnVsbCxcbiAgICAgICAgLy8gZnJhZ21lbnQgc2hhZGVyXG4gICAgICAgIFwicHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XFxuXFxudmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7XFxuXFxudW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXI7XFxuXFxudm9pZCBtYWluKHZvaWQpXFxue1xcbiAgICBmbG9hdCBsdW0gPSBsZW5ndGgodGV4dHVyZTJEKHVTYW1wbGVyLCB2VGV4dHVyZUNvb3JkLnh5KS5yZ2IpO1xcblxcbiAgICBnbF9GcmFnQ29sb3IgPSB2ZWM0KDEuMCwgMS4wLCAxLjAsIDEuMCk7XFxuXFxuICAgIGlmIChsdW0gPCAxLjAwKVxcbiAgICB7XFxuICAgICAgICBpZiAobW9kKGdsX0ZyYWdDb29yZC54ICsgZ2xfRnJhZ0Nvb3JkLnksIDEwLjApID09IDAuMClcXG4gICAgICAgIHtcXG4gICAgICAgICAgICBnbF9GcmFnQ29sb3IgPSB2ZWM0KDAuMCwgMC4wLCAwLjAsIDEuMCk7XFxuICAgICAgICB9XFxuICAgIH1cXG5cXG4gICAgaWYgKGx1bSA8IDAuNzUpXFxuICAgIHtcXG4gICAgICAgIGlmIChtb2QoZ2xfRnJhZ0Nvb3JkLnggLSBnbF9GcmFnQ29vcmQueSwgMTAuMCkgPT0gMC4wKVxcbiAgICAgICAge1xcbiAgICAgICAgICAgIGdsX0ZyYWdDb2xvciA9IHZlYzQoMC4wLCAwLjAsIDAuMCwgMS4wKTtcXG4gICAgICAgIH1cXG4gICAgfVxcblxcbiAgICBpZiAobHVtIDwgMC41MClcXG4gICAge1xcbiAgICAgICAgaWYgKG1vZChnbF9GcmFnQ29vcmQueCArIGdsX0ZyYWdDb29yZC55IC0gNS4wLCAxMC4wKSA9PSAwLjApXFxuICAgICAgICB7XFxuICAgICAgICAgICAgZ2xfRnJhZ0NvbG9yID0gdmVjNCgwLjAsIDAuMCwgMC4wLCAxLjApO1xcbiAgICAgICAgfVxcbiAgICB9XFxuXFxuICAgIGlmIChsdW0gPCAwLjMpXFxuICAgIHtcXG4gICAgICAgIGlmIChtb2QoZ2xfRnJhZ0Nvb3JkLnggLSBnbF9GcmFnQ29vcmQueSAtIDUuMCwgMTAuMCkgPT0gMC4wKVxcbiAgICAgICAge1xcbiAgICAgICAgICAgIGdsX0ZyYWdDb2xvciA9IHZlYzQoMC4wLCAwLjAsIDAuMCwgMS4wKTtcXG4gICAgICAgIH1cXG4gICAgfVxcbn1cXG5cIlxuICAgICk7XG59XG5cbkNyb3NzSGF0Y2hGaWx0ZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShjb3JlLkFic3RyYWN0RmlsdGVyLnByb3RvdHlwZSk7XG5Dcm9zc0hhdGNoRmlsdGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IENyb3NzSGF0Y2hGaWx0ZXI7XG5tb2R1bGUuZXhwb3J0cyA9IENyb3NzSGF0Y2hGaWx0ZXI7XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uLy4uL2NvcmUnKTtcbi8vIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL3N1YnN0YWNrL2JyZnMvaXNzdWVzLzI1XG5cblxuLyoqXG4gKiBUaGUgRGlzcGxhY2VtZW50RmlsdGVyIGNsYXNzIHVzZXMgdGhlIHBpeGVsIHZhbHVlcyBmcm9tIHRoZSBzcGVjaWZpZWQgdGV4dHVyZSAoY2FsbGVkIHRoZSBkaXNwbGFjZW1lbnQgbWFwKSB0byBwZXJmb3JtIGEgZGlzcGxhY2VtZW50IG9mIGFuIG9iamVjdC5cbiAqIFlvdSBjYW4gdXNlIHRoaXMgZmlsdGVyIHRvIGFwcGx5IGFsbCBtYW5vciBvZiBjcmF6eSB3YXJwaW5nIGVmZmVjdHNcbiAqIEN1cnJlbnRseSB0aGUgciBwcm9wZXJ0eSBvZiB0aGUgdGV4dHVyZSBpcyB1c2VkIHRvIG9mZnNldCB0aGUgeCBhbmQgdGhlIGcgcHJvcGVydHkgb2YgdGhlIHRleHR1cmUgaXMgdXNlZCB0byBvZmZzZXQgdGhlIHkuXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLkFic3RyYWN0RmlsdGVyXG4gKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzXG4gKiBAcGFyYW0gc3ByaXRlIHtQSVhJLlNwcml0ZX0gdGhlIHNwcml0ZSB1c2VkIGZvciB0aGUgZGlzcGxhY2VtZW50IG1hcC4gKG1ha2Ugc3VyZSBpdHMgYWRkZWQgdG8gdGhlIHNjZW5lISlcbiAqL1xuZnVuY3Rpb24gRGlzcGxhY2VtZW50RmlsdGVyKHNwcml0ZSwgc2NhbGUpXG57XG4gICAgdmFyIG1hc2tNYXRyaXggPSBuZXcgY29yZS5NYXRyaXgoKTtcbiAgICBzcHJpdGUucmVuZGVyYWJsZSA9IGZhbHNlO1xuXG4gICAgY29yZS5BYnN0cmFjdEZpbHRlci5jYWxsKHRoaXMsXG4gICAgICAgIC8vIHZlcnRleCBzaGFkZXJcbiAgICAgICAgXCJhdHRyaWJ1dGUgdmVjMiBhVmVydGV4UG9zaXRpb247XFxuYXR0cmlidXRlIHZlYzIgYVRleHR1cmVDb29yZDtcXG5hdHRyaWJ1dGUgdmVjNCBhQ29sb3I7XFxuXFxudW5pZm9ybSBtYXQzIHByb2plY3Rpb25NYXRyaXg7XFxudW5pZm9ybSBtYXQzIG90aGVyTWF0cml4O1xcblxcbnZhcnlpbmcgdmVjMiB2TWFwQ29vcmQ7XFxudmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7XFxudmFyeWluZyB2ZWM0IHZDb2xvcjtcXG5cXG52b2lkIG1haW4odm9pZClcXG57XFxuICAgZ2xfUG9zaXRpb24gPSB2ZWM0KChwcm9qZWN0aW9uTWF0cml4ICogdmVjMyhhVmVydGV4UG9zaXRpb24sIDEuMCkpLnh5LCAwLjAsIDEuMCk7XFxuICAgdlRleHR1cmVDb29yZCA9IGFUZXh0dXJlQ29vcmQ7XFxuICAgdk1hcENvb3JkID0gKCBvdGhlck1hdHJpeCAqIHZlYzMoIGFUZXh0dXJlQ29vcmQsIDEuMCkgICkueHk7XFxuICAgdkNvbG9yID0gdmVjNChhQ29sb3IucmdiICogYUNvbG9yLmEsIGFDb2xvci5hKTtcXG59XFxuXCIsXG4gICAgICAgIC8vIGZyYWdtZW50IHNoYWRlclxuICAgICAgICBcInByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xcblxcbnZhcnlpbmcgdmVjMiB2TWFwQ29vcmQ7XFxudmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7XFxudmFyeWluZyB2ZWM0IHZDb2xvcjtcXG5cXG51bmlmb3JtIHZlYzIgc2NhbGU7XFxuXFxudW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXI7XFxudW5pZm9ybSBzYW1wbGVyMkQgbWFwU2FtcGxlcjtcXG5cXG52b2lkIG1haW4odm9pZClcXG57XFxuICAgdmVjNCBtYXAgPSAgdGV4dHVyZTJEKG1hcFNhbXBsZXIsIHZNYXBDb29yZCk7XFxuXFxuICAgbWFwIC09IDAuNTtcXG4gICBtYXAueHkgKj0gc2NhbGU7XFxuXFxuICAgZ2xfRnJhZ0NvbG9yID0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2ZWMyKHZUZXh0dXJlQ29vcmQueCArIG1hcC54LCB2VGV4dHVyZUNvb3JkLnkgKyBtYXAueSkpO1xcbn1cXG5cIixcbiAgICAgICAgLy8gdW5pZm9ybXNcbiAgICAgICAge1xuICAgICAgICAgICAgbWFwU2FtcGxlcjogICAgIHsgdHlwZTogJ3NhbXBsZXIyRCcsIHZhbHVlOiBzcHJpdGUudGV4dHVyZSB9LFxuICAgICAgICAgICAgb3RoZXJNYXRyaXg6ICAgIHsgdHlwZTogJ21hdDMnLCB2YWx1ZTogbWFza01hdHJpeC50b0FycmF5KHRydWUpIH0sXG4gICAgICAgICAgICBzY2FsZTogICAgICAgICAgeyB0eXBlOiAndjInLCB2YWx1ZTogeyB4OiAxLCB5OiAxIH0gfVxuICAgICAgICB9XG4gICAgKTtcblxuICAgIHRoaXMubWFza1Nwcml0ZSA9IHNwcml0ZTtcbiAgICB0aGlzLm1hc2tNYXRyaXggPSBtYXNrTWF0cml4O1xuXG4gICAgaWYgKHNjYWxlID09PSBudWxsIHx8IHNjYWxlID09PSB1bmRlZmluZWQpXG4gICAge1xuICAgICAgICBzY2FsZSA9IDIwO1xuICAgIH1cblxuICAgIHRoaXMuc2NhbGUgPSBuZXcgY29yZS5Qb2ludChzY2FsZSwgc2NhbGUpO1xufVxuXG5EaXNwbGFjZW1lbnRGaWx0ZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShjb3JlLkFic3RyYWN0RmlsdGVyLnByb3RvdHlwZSk7XG5EaXNwbGFjZW1lbnRGaWx0ZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gRGlzcGxhY2VtZW50RmlsdGVyO1xubW9kdWxlLmV4cG9ydHMgPSBEaXNwbGFjZW1lbnRGaWx0ZXI7XG5cbkRpc3BsYWNlbWVudEZpbHRlci5wcm90b3R5cGUuYXBwbHlGaWx0ZXIgPSBmdW5jdGlvbiAocmVuZGVyZXIsIGlucHV0LCBvdXRwdXQpXG57XG4gICAgdmFyIGZpbHRlck1hbmFnZXIgPSByZW5kZXJlci5maWx0ZXJNYW5hZ2VyO1xuXG4gICAgZmlsdGVyTWFuYWdlci5jYWxjdWxhdGVNYXBwZWRNYXRyaXgoaW5wdXQuZnJhbWUsIHRoaXMubWFza1Nwcml0ZSwgdGhpcy5tYXNrTWF0cml4KTtcblxuICAgIHRoaXMudW5pZm9ybXMub3RoZXJNYXRyaXgudmFsdWUgPSB0aGlzLm1hc2tNYXRyaXgudG9BcnJheSh0cnVlKTtcbiAgICB0aGlzLnVuaWZvcm1zLnNjYWxlLnZhbHVlLnggPSB0aGlzLnNjYWxlLnggKiAoMS9pbnB1dC5mcmFtZS53aWR0aCk7XG4gICAgdGhpcy51bmlmb3Jtcy5zY2FsZS52YWx1ZS55ID0gdGhpcy5zY2FsZS55ICogKDEvaW5wdXQuZnJhbWUuaGVpZ2h0KTtcblxuICAgIHZhciBzaGFkZXIgPSB0aGlzLmdldFNoYWRlcihyZW5kZXJlcik7XG4gICAgIC8vIGRyYXcgdGhlIGZpbHRlci4uLlxuICAgIGZpbHRlck1hbmFnZXIuYXBwbHlGaWx0ZXIoc2hhZGVyLCBpbnB1dCwgb3V0cHV0KTtcbn07XG5cblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoRGlzcGxhY2VtZW50RmlsdGVyLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFRoZSB0ZXh0dXJlIHVzZWQgZm9yIHRoZSBkaXNwbGFjZW1lbnQgbWFwLiBNdXN0IGJlIHBvd2VyIG9mIDIgc2l6ZWQgdGV4dHVyZS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuVGV4dHVyZX1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLkRpc3BsYWNlbWVudEZpbHRlciNcbiAgICAgKi9cbiAgICBtYXA6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy51bmlmb3Jtcy5tYXBTYW1wbGVyLnZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy5tYXBTYW1wbGVyLnZhbHVlID0gdmFsdWU7XG5cbiAgICAgICAgfVxuICAgIH1cbn0pO1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi8uLi9jb3JlJyk7XG4vLyBAc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9zdWJzdGFjay9icmZzL2lzc3Vlcy8yNVxuXG5cbi8qKlxuICogQGF1dGhvciBNYXQgR3JvdmVzIGh0dHA6Ly9tYXRncm92ZXMuY29tLyBARG9vcm1hdDIzXG4gKiBvcmlnaW5hbCBmaWx0ZXI6IGh0dHBzOi8vZ2l0aHViLmNvbS9ldmFudy9nbGZ4LmpzL2Jsb2IvbWFzdGVyL3NyYy9maWx0ZXJzL2Z1bi9kb3RzY3JlZW4uanNcbiAqL1xuXG4vKipcbiAqIFRoaXMgZmlsdGVyIGFwcGxpZXMgYSBkb3RzY3JlZW4gZWZmZWN0IG1ha2luZyBkaXNwbGF5IG9iamVjdHMgYXBwZWFyIHRvIGJlIG1hZGUgb3V0IG9mXG4gKiBibGFjayBhbmQgd2hpdGUgaGFsZnRvbmUgZG90cyBsaWtlIGFuIG9sZCBwcmludGVyLlxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5BYnN0cmFjdEZpbHRlclxuICogQG1lbWJlcm9mIFBJWEkuZmlsdGVyc1xuICovXG5mdW5jdGlvbiBEb3RTY3JlZW5GaWx0ZXIoKVxue1xuICAgIGNvcmUuQWJzdHJhY3RGaWx0ZXIuY2FsbCh0aGlzLFxuICAgICAgICAvLyB2ZXJ0ZXggc2hhZGVyXG4gICAgICAgIG51bGwsXG4gICAgICAgIC8vIGZyYWdtZW50IHNoYWRlclxuICAgICAgICBcInByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xcblxcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xcbnZhcnlpbmcgdmVjNCB2Q29sb3I7XFxuXFxudW5pZm9ybSB2ZWM0IGRpbWVuc2lvbnM7XFxudW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXI7XFxuXFxudW5pZm9ybSBmbG9hdCBhbmdsZTtcXG51bmlmb3JtIGZsb2F0IHNjYWxlO1xcblxcbmZsb2F0IHBhdHRlcm4oKVxcbntcXG4gICBmbG9hdCBzID0gc2luKGFuZ2xlKSwgYyA9IGNvcyhhbmdsZSk7XFxuICAgdmVjMiB0ZXggPSB2VGV4dHVyZUNvb3JkICogZGltZW5zaW9ucy54eTtcXG4gICB2ZWMyIHBvaW50ID0gdmVjMihcXG4gICAgICAgYyAqIHRleC54IC0gcyAqIHRleC55LFxcbiAgICAgICBzICogdGV4LnggKyBjICogdGV4LnlcXG4gICApICogc2NhbGU7XFxuICAgcmV0dXJuIChzaW4ocG9pbnQueCkgKiBzaW4ocG9pbnQueSkpICogNC4wO1xcbn1cXG5cXG52b2lkIG1haW4oKVxcbntcXG4gICB2ZWM0IGNvbG9yID0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2VGV4dHVyZUNvb3JkKTtcXG4gICBmbG9hdCBhdmVyYWdlID0gKGNvbG9yLnIgKyBjb2xvci5nICsgY29sb3IuYikgLyAzLjA7XFxuICAgZ2xfRnJhZ0NvbG9yID0gdmVjNCh2ZWMzKGF2ZXJhZ2UgKiAxMC4wIC0gNS4wICsgcGF0dGVybigpKSwgY29sb3IuYSk7XFxufVxcblwiLFxuICAgICAgICAvLyBjdXN0b20gdW5pZm9ybXNcbiAgICAgICAge1xuICAgICAgICAgICAgc2NhbGU6ICAgICAgeyB0eXBlOiAnMWYnLCB2YWx1ZTogMSB9LFxuICAgICAgICAgICAgYW5nbGU6ICAgICAgeyB0eXBlOiAnMWYnLCB2YWx1ZTogNSB9LFxuICAgICAgICAgICAgZGltZW5zaW9uczogeyB0eXBlOiAnNGZ2JywgdmFsdWU6IFswLCAwLCAwLCAwXSB9XG4gICAgICAgIH1cbiAgICApO1xufVxuXG5Eb3RTY3JlZW5GaWx0ZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShjb3JlLkFic3RyYWN0RmlsdGVyLnByb3RvdHlwZSk7XG5Eb3RTY3JlZW5GaWx0ZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gRG90U2NyZWVuRmlsdGVyO1xubW9kdWxlLmV4cG9ydHMgPSBEb3RTY3JlZW5GaWx0ZXI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKERvdFNjcmVlbkZpbHRlci5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBUaGUgc2NhbGUgb2YgdGhlIGVmZmVjdC5cbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5Eb3RTY3JlZW5GaWx0ZXIjXG4gICAgICovXG4gICAgc2NhbGU6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy51bmlmb3Jtcy5zY2FsZS52YWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudW5pZm9ybXMuc2NhbGUudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBUaGUgcmFkaXVzIG9mIHRoZSBlZmZlY3QuXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuRG90U2NyZWVuRmlsdGVyI1xuICAgICAqL1xuICAgIGFuZ2xlOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudW5pZm9ybXMuYW5nbGUudmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLmFuZ2xlLnZhbHVlID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG59KTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vLi4vY29yZScpO1xuXG4vLyBAc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9zdWJzdGFjay9icmZzL2lzc3Vlcy8yNVxuXG5cbi8qKlxuICogVGhlIEJsdXJZVGludEZpbHRlciBhcHBsaWVzIGEgdmVydGljYWwgR2F1c3NpYW4gYmx1ciB0byBhbiBvYmplY3QuXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLkFic3RyYWN0RmlsdGVyXG4gKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzXG4gKi9cbmZ1bmN0aW9uIEJsdXJZVGludEZpbHRlcigpXG57XG4gICAgY29yZS5BYnN0cmFjdEZpbHRlci5jYWxsKHRoaXMsXG4gICAgICAgIC8vIHZlcnRleCBzaGFkZXJcbiAgICAgICAgXCJhdHRyaWJ1dGUgdmVjMiBhVmVydGV4UG9zaXRpb247XFxuYXR0cmlidXRlIHZlYzIgYVRleHR1cmVDb29yZDtcXG5hdHRyaWJ1dGUgdmVjNCBhQ29sb3I7XFxuXFxudW5pZm9ybSBmbG9hdCBzdHJlbmd0aDtcXG51bmlmb3JtIHZlYzIgb2Zmc2V0O1xcblxcbnVuaWZvcm0gbWF0MyBwcm9qZWN0aW9uTWF0cml4O1xcblxcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xcbnZhcnlpbmcgdmVjNCB2Q29sb3I7XFxudmFyeWluZyB2ZWMyIHZCbHVyVGV4Q29vcmRzWzZdO1xcblxcbnZvaWQgbWFpbih2b2lkKVxcbntcXG4gICAgZ2xfUG9zaXRpb24gPSB2ZWM0KChwcm9qZWN0aW9uTWF0cml4ICogdmVjMygoYVZlcnRleFBvc2l0aW9uK29mZnNldCksIDEuMCkpLnh5LCAwLjAsIDEuMCk7XFxuICAgIHZUZXh0dXJlQ29vcmQgPSBhVGV4dHVyZUNvb3JkO1xcblxcbiAgICB2Qmx1clRleENvb3Jkc1sgMF0gPSBhVGV4dHVyZUNvb3JkICsgdmVjMigwLjAsIC0wLjAxMiAqIHN0cmVuZ3RoKTtcXG4gICAgdkJsdXJUZXhDb29yZHNbIDFdID0gYVRleHR1cmVDb29yZCArIHZlYzIoMC4wLCAtMC4wMDggKiBzdHJlbmd0aCk7XFxuICAgIHZCbHVyVGV4Q29vcmRzWyAyXSA9IGFUZXh0dXJlQ29vcmQgKyB2ZWMyKDAuMCwgLTAuMDA0ICogc3RyZW5ndGgpO1xcbiAgICB2Qmx1clRleENvb3Jkc1sgM10gPSBhVGV4dHVyZUNvb3JkICsgdmVjMigwLjAsICAwLjAwNCAqIHN0cmVuZ3RoKTtcXG4gICAgdkJsdXJUZXhDb29yZHNbIDRdID0gYVRleHR1cmVDb29yZCArIHZlYzIoMC4wLCAgMC4wMDggKiBzdHJlbmd0aCk7XFxuICAgIHZCbHVyVGV4Q29vcmRzWyA1XSA9IGFUZXh0dXJlQ29vcmQgKyB2ZWMyKDAuMCwgIDAuMDEyICogc3RyZW5ndGgpO1xcblxcbiAgIHZDb2xvciA9IHZlYzQoYUNvbG9yLnJnYiAqIGFDb2xvci5hLCBhQ29sb3IuYSk7XFxufVxcblwiLFxuICAgICAgICAvLyBmcmFnbWVudCBzaGFkZXJcbiAgICAgICAgXCJwcmVjaXNpb24gbG93cCBmbG9hdDtcXG5cXG52YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDtcXG52YXJ5aW5nIHZlYzIgdkJsdXJUZXhDb29yZHNbNl07XFxudmFyeWluZyB2ZWM0IHZDb2xvcjtcXG5cXG51bmlmb3JtIHZlYzMgY29sb3I7XFxudW5pZm9ybSBmbG9hdCBhbHBoYTtcXG5cXG51bmlmb3JtIHNhbXBsZXIyRCB1U2FtcGxlcjtcXG5cXG52b2lkIG1haW4odm9pZClcXG57XFxuICAgIHZlYzQgc3VtID0gdmVjNCgwLjApO1xcblxcbiAgICBzdW0gKz0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2Qmx1clRleENvb3Jkc1sgMF0pKjAuMDA0NDMxODQ4NDExOTM4MzQxO1xcbiAgICBzdW0gKz0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2Qmx1clRleENvb3Jkc1sgMV0pKjAuMDUzOTkwOTY2NTEzMTg5ODU7XFxuICAgIHN1bSArPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZCbHVyVGV4Q29vcmRzWyAyXSkqMC4yNDE5NzA3MjQ1MTkxNDU0O1xcbiAgICBzdW0gKz0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2VGV4dHVyZUNvb3JkICAgICApKjAuMzk4OTQyMjgwNDAxNDMyNztcXG4gICAgc3VtICs9IHRleHR1cmUyRCh1U2FtcGxlciwgdkJsdXJUZXhDb29yZHNbIDNdKSowLjI0MTk3MDcyNDUxOTE0NTQ7XFxuICAgIHN1bSArPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZCbHVyVGV4Q29vcmRzWyA0XSkqMC4wNTM5OTA5NjY1MTMxODk4NTtcXG4gICAgc3VtICs9IHRleHR1cmUyRCh1U2FtcGxlciwgdkJsdXJUZXhDb29yZHNbIDVdKSowLjAwNDQzMTg0ODQxMTkzODM0MTtcXG5cXG4gICAgZ2xfRnJhZ0NvbG9yID0gdmVjNCggY29sb3IucmdiICogc3VtLmEgKiBhbHBoYSwgc3VtLmEgKiBhbHBoYSApO1xcbn1cXG5cIixcbiAgICAgICAgLy8gc2V0IHRoZSB1bmlmb3Jtc1xuICAgICAgICB7XG4gICAgICAgICAgICBibHVyOiB7IHR5cGU6ICcxZicsIHZhbHVlOiAxIC8gNTEyIH0sXG4gICAgICAgICAgICBjb2xvcjogeyB0eXBlOiAnYycsIHZhbHVlOiBbMCwwLDBdfSxcbiAgICAgICAgICAgIGFscGhhOiB7IHR5cGU6ICcxZicsIHZhbHVlOiAwLjcgfSxcbiAgICAgICAgICAgIG9mZnNldDogeyB0eXBlOiAnMmYnLCB2YWx1ZTpbNSwgNV19LFxuICAgICAgICAgICAgc3RyZW5ndGg6IHsgdHlwZTogJzFmJywgdmFsdWU6MX1cbiAgICAgICAgfVxuICAgICk7XG5cbiAgICB0aGlzLnBhc3NlcyA9IDE7XG4gICAgdGhpcy5zdHJlbmd0aCA9IDQ7XG59XG5cbkJsdXJZVGludEZpbHRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuQWJzdHJhY3RGaWx0ZXIucHJvdG90eXBlKTtcbkJsdXJZVGludEZpbHRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBCbHVyWVRpbnRGaWx0ZXI7XG5tb2R1bGUuZXhwb3J0cyA9IEJsdXJZVGludEZpbHRlcjtcblxuQmx1cllUaW50RmlsdGVyLnByb3RvdHlwZS5hcHBseUZpbHRlciA9IGZ1bmN0aW9uIChyZW5kZXJlciwgaW5wdXQsIG91dHB1dCwgY2xlYXIpXG57XG4gICAgdmFyIHNoYWRlciA9IHRoaXMuZ2V0U2hhZGVyKHJlbmRlcmVyKTtcblxuICAgIHRoaXMudW5pZm9ybXMuc3RyZW5ndGgudmFsdWUgPSB0aGlzLnN0cmVuZ3RoIC8gNCAvIHRoaXMucGFzc2VzICogKGlucHV0LmZyYW1lLmhlaWdodCAvIGlucHV0LnNpemUuaGVpZ2h0KTtcblxuICAgIGlmKHRoaXMucGFzc2VzID09PSAxKVxuICAgIHtcbiAgICAgICAgcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5hcHBseUZpbHRlcihzaGFkZXIsIGlucHV0LCBvdXRwdXQsIGNsZWFyKTtcbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgdmFyIHJlbmRlclRhcmdldCA9IHJlbmRlcmVyLmZpbHRlck1hbmFnZXIuZ2V0UmVuZGVyVGFyZ2V0KHRydWUpO1xuICAgICAgICB2YXIgZmxpcCA9IGlucHV0O1xuICAgICAgICB2YXIgZmxvcCA9IHJlbmRlclRhcmdldDtcblxuICAgICAgICBmb3IodmFyIGkgPSAwOyBpIDwgdGhpcy5wYXNzZXMtMTsgaSsrKVxuICAgICAgICB7XG4gICAgICAgICAgICByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLmFwcGx5RmlsdGVyKHNoYWRlciwgZmxpcCwgZmxvcCwgY2xlYXIpO1xuXG4gICAgICAgICAgIHZhciB0ZW1wID0gZmxvcDtcbiAgICAgICAgICAgZmxvcCA9IGZsaXA7XG4gICAgICAgICAgIGZsaXAgPSB0ZW1wO1xuICAgICAgICB9XG5cbiAgICAgICAgcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5hcHBseUZpbHRlcihzaGFkZXIsIGZsaXAsIG91dHB1dCwgY2xlYXIpO1xuXG4gICAgICAgIHJlbmRlcmVyLmZpbHRlck1hbmFnZXIucmV0dXJuUmVuZGVyVGFyZ2V0KHJlbmRlclRhcmdldCk7XG4gICAgfVxufTtcblxuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhCbHVyWVRpbnRGaWx0ZXIucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgc3RyZW5ndGggb2YgYm90aCB0aGUgYmx1ci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLkJsdXJZVGludEZpbHRlciNcbiAgICAgKiBAZGVmYXVsdCAyXG4gICAgICovXG4gICAgYmx1cjoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiAgdGhpcy5zdHJlbmd0aDtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMucGFkZGluZyA9IHZhbHVlICogMC41O1xuICAgICAgICAgICAgdGhpcy5zdHJlbmd0aCA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfVxufSk7XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uLy4uL2NvcmUnKSxcbiAgICBCbHVyWEZpbHRlciA9IHJlcXVpcmUoJy4uL2JsdXIvQmx1clhGaWx0ZXInKSxcbiAgICBCbHVyWVRpbnRGaWx0ZXIgPSByZXF1aXJlKCcuL0JsdXJZVGludEZpbHRlcicpO1xuXG4vKipcbiAqIFRoZSBEcm9wU2hhZG93RmlsdGVyIGFwcGxpZXMgYSBHYXVzc2lhbiBibHVyIHRvIGFuIG9iamVjdC5cbiAqIFRoZSBzdHJlbmd0aCBvZiB0aGUgYmx1ciBjYW4gYmUgc2V0IGZvciB4LSBhbmQgeS1heGlzIHNlcGFyYXRlbHkuXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLkFic3RyYWN0RmlsdGVyXG4gKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzXG4gKi9cbmZ1bmN0aW9uIERyb3BTaGFkb3dGaWx0ZXIoKVxue1xuICAgIGNvcmUuQWJzdHJhY3RGaWx0ZXIuY2FsbCh0aGlzKTtcblxuICAgIHRoaXMuYmx1clhGaWx0ZXIgPSBuZXcgQmx1clhGaWx0ZXIoKTtcbiAgICB0aGlzLmJsdXJZVGludEZpbHRlciA9IG5ldyBCbHVyWVRpbnRGaWx0ZXIoKTtcblxuICAgIHRoaXMuZGVmYXVsdEZpbHRlciA9IG5ldyBjb3JlLkFic3RyYWN0RmlsdGVyKCk7XG5cbiAgICB0aGlzLnBhZGRpbmcgPSAzMDtcblxuICAgIHRoaXMuX2RpcnR5UG9zaXRpb24gPSB0cnVlO1xuICAgIHRoaXMuX2FuZ2xlID0gNDUgKiBNYXRoLlBJIC8gMTgwO1xuICAgIHRoaXMuX2Rpc3RhbmNlID0gMTA7XG4gICAgdGhpcy5hbHBoYSA9IDAuNzU7XG4gICAgdGhpcy5oaWRlT2JqZWN0ID0gZmFsc2U7XG4gICAgdGhpcy5ibGVuZE1vZGUgPSBjb3JlLkJMRU5EX01PREVTLk1VTFRJUExZO1xufVxuXG5Ecm9wU2hhZG93RmlsdGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoY29yZS5BYnN0cmFjdEZpbHRlci5wcm90b3R5cGUpO1xuRHJvcFNoYWRvd0ZpbHRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBEcm9wU2hhZG93RmlsdGVyO1xubW9kdWxlLmV4cG9ydHMgPSBEcm9wU2hhZG93RmlsdGVyO1xuXG5Ecm9wU2hhZG93RmlsdGVyLnByb3RvdHlwZS5hcHBseUZpbHRlciA9IGZ1bmN0aW9uIChyZW5kZXJlciwgaW5wdXQsIG91dHB1dClcbntcbiAgICB2YXIgcmVuZGVyVGFyZ2V0ID0gcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5nZXRSZW5kZXJUYXJnZXQodHJ1ZSk7XG5cbiAgICAvL1RPRE8gLSBjb3B5VGV4U3ViSW1hZ2UyRCBjb3VsZCBiZSB1c2VkIGhlcmU/XG4gICAgaWYodGhpcy5fZGlydHlQb3NpdGlvbilcbiAgICB7XG4gICAgICAgIHRoaXMuX2RpcnR5UG9zaXRpb24gPSBmYWxzZTtcblxuICAgICAgICB0aGlzLmJsdXJZVGludEZpbHRlci51bmlmb3Jtcy5vZmZzZXQudmFsdWVbMF0gPSBNYXRoLnNpbih0aGlzLl9hbmdsZSkgKiB0aGlzLl9kaXN0YW5jZTtcbiAgICAgICAgdGhpcy5ibHVyWVRpbnRGaWx0ZXIudW5pZm9ybXMub2Zmc2V0LnZhbHVlWzFdID0gTWF0aC5jb3ModGhpcy5fYW5nbGUpICogdGhpcy5fZGlzdGFuY2U7XG4gICAgfVxuXG4gICAgdGhpcy5ibHVyWEZpbHRlci5hcHBseUZpbHRlcihyZW5kZXJlciwgaW5wdXQsIHJlbmRlclRhcmdldCk7XG5cbiAgICByZW5kZXJlci5ibGVuZE1vZGVNYW5hZ2VyLnNldEJsZW5kTW9kZSh0aGlzLmJsZW5kTW9kZSk7XG5cbiAgICB0aGlzLmJsdXJZVGludEZpbHRlci5hcHBseUZpbHRlcihyZW5kZXJlciwgcmVuZGVyVGFyZ2V0LCBvdXRwdXQpO1xuXG4gICAgcmVuZGVyZXIuYmxlbmRNb2RlTWFuYWdlci5zZXRCbGVuZE1vZGUoY29yZS5CTEVORF9NT0RFUy5OT1JNQUwpO1xuXG4gICAgaWYoIXRoaXMuaGlkZU9iamVjdClcbiAgICB7XG5cbiAgICAgICAgdGhpcy5kZWZhdWx0RmlsdGVyLmFwcGx5RmlsdGVyKHJlbmRlcmVyLCBpbnB1dCwgb3V0cHV0KTtcbiAgICB9XG5cblxuICAgIHJlbmRlcmVyLmZpbHRlck1hbmFnZXIucmV0dXJuUmVuZGVyVGFyZ2V0KHJlbmRlclRhcmdldCk7XG59O1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhEcm9wU2hhZG93RmlsdGVyLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIHN0cmVuZ3RoIG9mIGJvdGggdGhlIGJsdXJYIGFuZCBibHVyWSBwcm9wZXJ0aWVzIHNpbXVsdGFuZW91c2x5XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlck9mIFBJWEkuZmlsdGVycy5Ecm9wU2hhZG93RmlsdGVyI1xuICAgICAqIEBkZWZhdWx0IDJcbiAgICAgKi9cbiAgICBibHVyOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuYmx1clhGaWx0ZXIuYmx1cjtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuYmx1clhGaWx0ZXIuYmx1ciA9IHRoaXMuYmx1cllUaW50RmlsdGVyLmJsdXIgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBzdHJlbmd0aCBvZiB0aGUgYmx1clggcHJvcGVydHlcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyT2YgUElYSS5maWx0ZXJzLkRyb3BTaGFkb3dGaWx0ZXIjXG4gICAgICogQGRlZmF1bHQgMlxuICAgICAqL1xuICAgIGJsdXJYOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuYmx1clhGaWx0ZXIuYmx1cjtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuYmx1clhGaWx0ZXIuYmx1ciA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIHN0cmVuZ3RoIG9mIHRoZSBibHVyWSBwcm9wZXJ0eVxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJPZiBQSVhJLmZpbHRlcnMuRHJvcFNoYWRvd0ZpbHRlciNcbiAgICAgKiBAZGVmYXVsdCAyXG4gICAgICovXG4gICAgYmx1clk6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5ibHVyWVRpbnRGaWx0ZXIuYmx1cjtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuYmx1cllUaW50RmlsdGVyLmJsdXIgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBjb2xvciBvZiB0aGUgc2hhZG93XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlck9mIFBJWEkuZmlsdGVycy5Ecm9wU2hhZG93RmlsdGVyI1xuICAgICAqL1xuICAgIGNvbG9yOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuICBjb3JlLnV0aWxzLnJnYjJoZXgoIHRoaXMuYmx1cllUaW50RmlsdGVyLnVuaWZvcm1zLmNvbG9yLnZhbHVlICk7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmJsdXJZVGludEZpbHRlci51bmlmb3Jtcy5jb2xvci52YWx1ZSA9IGNvcmUudXRpbHMuaGV4MnJnYih2YWx1ZSk7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgYWxwaGEgb2YgdGhlIHNoYWRvd1xuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJPZiBQSVhJLmZpbHRlcnMuRHJvcFNoYWRvd0ZpbHRlciNcbiAgICAgKi9cbiAgICBhbHBoYToge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiAgdGhpcy5ibHVyWVRpbnRGaWx0ZXIudW5pZm9ybXMuYWxwaGEudmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmJsdXJZVGludEZpbHRlci51bmlmb3Jtcy5hbHBoYS52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIGRpc3RhbmNlIG9mIHRoZSBzaGFkb3dcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyT2YgUElYSS5maWx0ZXJzLkRyb3BTaGFkb3dGaWx0ZXIjXG4gICAgICovXG4gICAgZGlzdGFuY2U6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gIHRoaXMuX2Rpc3RhbmNlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5fZGlydHlQb3NpdGlvbiA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLl9kaXN0YW5jZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIGFuZ2xlIG9mIHRoZSBzaGFkb3dcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyT2YgUElYSS5maWx0ZXJzLkRyb3BTaGFkb3dGaWx0ZXIjXG4gICAgICovXG4gICAgYW5nbGU6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gIHRoaXMuX2FuZ2xlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5fZGlydHlQb3NpdGlvbiA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLl9hbmdsZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfVxufSk7XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uLy4uL2NvcmUnKTtcbi8vIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL3N1YnN0YWNrL2JyZnMvaXNzdWVzLzI1XG5cblxuLyoqXG4gKiBUaGlzIGdyZXlzY2FsZXMgdGhlIHBhbGV0dGUgb2YgeW91ciBEaXNwbGF5IE9iamVjdHMuXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLkFic3RyYWN0RmlsdGVyXG4gKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzXG4gKi9cbmZ1bmN0aW9uIEdyYXlGaWx0ZXIoKVxue1xuICAgIGNvcmUuQWJzdHJhY3RGaWx0ZXIuY2FsbCh0aGlzLFxuICAgICAgICAvLyB2ZXJ0ZXggc2hhZGVyXG4gICAgICAgIG51bGwsXG4gICAgICAgIC8vIGZyYWdtZW50IHNoYWRlclxuICAgICAgICBcInByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xcblxcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xcbnZhcnlpbmcgdmVjNCB2Q29sb3I7XFxuXFxudW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXI7XFxudW5pZm9ybSBmbG9hdCBncmF5O1xcblxcbnZvaWQgbWFpbih2b2lkKVxcbntcXG4gICBnbF9GcmFnQ29sb3IgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZUZXh0dXJlQ29vcmQpO1xcbiAgIGdsX0ZyYWdDb2xvci5yZ2IgPSBtaXgoZ2xfRnJhZ0NvbG9yLnJnYiwgdmVjMygwLjIxMjYqZ2xfRnJhZ0NvbG9yLnIgKyAwLjcxNTIqZ2xfRnJhZ0NvbG9yLmcgKyAwLjA3MjIqZ2xfRnJhZ0NvbG9yLmIpLCBncmF5KTtcXG59XFxuXCIsXG4gICAgICAgIC8vIHNldCB0aGUgdW5pZm9ybXNcbiAgICAgICAge1xuICAgICAgICAgICAgZ3JheTogeyB0eXBlOiAnMWYnLCB2YWx1ZTogMSB9XG4gICAgICAgIH1cbiAgICApO1xufVxuXG5HcmF5RmlsdGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoY29yZS5BYnN0cmFjdEZpbHRlci5wcm90b3R5cGUpO1xuR3JheUZpbHRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBHcmF5RmlsdGVyO1xubW9kdWxlLmV4cG9ydHMgPSBHcmF5RmlsdGVyO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhHcmF5RmlsdGVyLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFRoZSBzdHJlbmd0aCBvZiB0aGUgZ3JheS4gMSB3aWxsIG1ha2UgdGhlIG9iamVjdCBibGFjayBhbmQgd2hpdGUsIDAgd2lsbCBtYWtlIHRoZSBvYmplY3QgaXRzIG5vcm1hbCBjb2xvci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLkdyYXlGaWx0ZXIjXG4gICAgICovXG4gICAgZ3JheToge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVuaWZvcm1zLmdyYXkudmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLmdyYXkudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuIiwiLyoqXG4gKiBAZmlsZSAgICAgICAgTWFpbiBleHBvcnQgb2YgdGhlIFBJWEkgZmlsdGVycyBsaWJyYXJ5XG4gKiBAYXV0aG9yICAgICAgTWF0IEdyb3ZlcyA8bWF0QGdvb2Rib3lkaWdpdGFsLmNvbT5cbiAqIEBjb3B5cmlnaHQgICAyMDEzLTIwMTUgR29vZEJveURpZ2l0YWxcbiAqIEBsaWNlbnNlICAgICB7QGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL3BpeGlqcy9waXhpLmpzL2Jsb2IvbWFzdGVyL0xJQ0VOU0V8TUlUIExpY2Vuc2V9XG4gKi9cblxuLyoqXG4gKiBAbmFtZXNwYWNlIFBJWEkuZmlsdGVyc1xuICovXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgICBBc2NpaUZpbHRlcjogICAgICAgIHJlcXVpcmUoJy4vYXNjaWkvQXNjaWlGaWx0ZXInKSxcbiAgICBCbG9vbUZpbHRlcjogICAgICAgIHJlcXVpcmUoJy4vYmxvb20vQmxvb21GaWx0ZXInKSxcbiAgICBCbHVyRmlsdGVyOiAgICAgICAgIHJlcXVpcmUoJy4vYmx1ci9CbHVyRmlsdGVyJyksXG4gICAgQmx1clhGaWx0ZXI6ICAgICAgICByZXF1aXJlKCcuL2JsdXIvQmx1clhGaWx0ZXInKSxcbiAgICBCbHVyWUZpbHRlcjogICAgICAgIHJlcXVpcmUoJy4vYmx1ci9CbHVyWUZpbHRlcicpLFxuICAgIEJsdXJEaXJGaWx0ZXI6ICAgICAgcmVxdWlyZSgnLi9ibHVyL0JsdXJEaXJGaWx0ZXInKSxcbiAgICBDb2xvck1hdHJpeEZpbHRlcjogIHJlcXVpcmUoJy4vY29sb3IvQ29sb3JNYXRyaXhGaWx0ZXInKSxcbiAgICBDb2xvclN0ZXBGaWx0ZXI6ICAgIHJlcXVpcmUoJy4vY29sb3IvQ29sb3JTdGVwRmlsdGVyJyksXG4gICAgQ29udm9sdXRpb25GaWx0ZXI6ICByZXF1aXJlKCcuL2NvbnZvbHV0aW9uL0NvbnZvbHV0aW9uRmlsdGVyJyksXG4gICAgQ3Jvc3NIYXRjaEZpbHRlcjogICByZXF1aXJlKCcuL2Nyb3NzaGF0Y2gvQ3Jvc3NIYXRjaEZpbHRlcicpLFxuICAgIERpc3BsYWNlbWVudEZpbHRlcjogcmVxdWlyZSgnLi9kaXNwbGFjZW1lbnQvRGlzcGxhY2VtZW50RmlsdGVyJyksXG4gICAgRG90U2NyZWVuRmlsdGVyOiAgICByZXF1aXJlKCcuL2RvdC9Eb3RTY3JlZW5GaWx0ZXInKSxcbiAgICBHcmF5RmlsdGVyOiAgICAgICAgIHJlcXVpcmUoJy4vZ3JheS9HcmF5RmlsdGVyJyksXG4gICAgRHJvcFNoYWRvd0ZpbHRlcjogICByZXF1aXJlKCcuL2Ryb3BzaGFkb3cvRHJvcFNoYWRvd0ZpbHRlcicpLFxuICAgIEludmVydEZpbHRlcjogICAgICAgcmVxdWlyZSgnLi9pbnZlcnQvSW52ZXJ0RmlsdGVyJyksXG4gICAgTm9pc2VGaWx0ZXI6ICAgICAgICByZXF1aXJlKCcuL25vaXNlL05vaXNlRmlsdGVyJyksXG4gICAgUGl4ZWxhdGVGaWx0ZXI6ICAgICByZXF1aXJlKCcuL3BpeGVsYXRlL1BpeGVsYXRlRmlsdGVyJyksXG4gICAgUkdCU3BsaXRGaWx0ZXI6ICAgICByZXF1aXJlKCcuL3JnYi9SR0JTcGxpdEZpbHRlcicpLFxuICAgIFNob2Nrd2F2ZUZpbHRlcjogICAgcmVxdWlyZSgnLi9zaG9ja3dhdmUvU2hvY2t3YXZlRmlsdGVyJyksXG4gICAgU2VwaWFGaWx0ZXI6ICAgICAgICByZXF1aXJlKCcuL3NlcGlhL1NlcGlhRmlsdGVyJyksXG4gICAgU21hcnRCbHVyRmlsdGVyOiAgICByZXF1aXJlKCcuL2JsdXIvU21hcnRCbHVyRmlsdGVyJyksXG4gICAgVGlsdFNoaWZ0RmlsdGVyOiAgICByZXF1aXJlKCcuL3RpbHRzaGlmdC9UaWx0U2hpZnRGaWx0ZXInKSxcbiAgICBUaWx0U2hpZnRYRmlsdGVyOiAgIHJlcXVpcmUoJy4vdGlsdHNoaWZ0L1RpbHRTaGlmdFhGaWx0ZXInKSxcbiAgICBUaWx0U2hpZnRZRmlsdGVyOiAgIHJlcXVpcmUoJy4vdGlsdHNoaWZ0L1RpbHRTaGlmdFlGaWx0ZXInKSxcbiAgICBUd2lzdEZpbHRlcjogICAgICAgIHJlcXVpcmUoJy4vdHdpc3QvVHdpc3RGaWx0ZXInKVxufTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vLi4vY29yZScpO1xuLy8gQHNlZSBodHRwczovL2dpdGh1Yi5jb20vc3Vic3RhY2svYnJmcy9pc3N1ZXMvMjVcblxuXG4vKipcbiAqIFRoaXMgaW52ZXJ0cyB5b3VyIERpc3BsYXkgT2JqZWN0cyBjb2xvcnMuXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLkFic3RyYWN0RmlsdGVyXG4gKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzXG4gKi9cbmZ1bmN0aW9uIEludmVydEZpbHRlcigpXG57XG4gICAgY29yZS5BYnN0cmFjdEZpbHRlci5jYWxsKHRoaXMsXG4gICAgICAgIC8vIHZlcnRleCBzaGFkZXJcbiAgICAgICAgbnVsbCxcbiAgICAgICAgLy8gZnJhZ21lbnQgc2hhZGVyXG4gICAgICAgIFwicHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XFxuXFxudmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7XFxuXFxudW5pZm9ybSBmbG9hdCBpbnZlcnQ7XFxudW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXI7XFxuXFxudm9pZCBtYWluKHZvaWQpXFxue1xcbiAgICBnbF9GcmFnQ29sb3IgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZUZXh0dXJlQ29vcmQpO1xcblxcbiAgICBnbF9GcmFnQ29sb3IucmdiID0gbWl4KCAodmVjMygxKS1nbF9GcmFnQ29sb3IucmdiKSAqIGdsX0ZyYWdDb2xvci5hLCBnbF9GcmFnQ29sb3IucmdiLCAxLjAgLSBpbnZlcnQpO1xcbn1cXG5cIixcbiAgICAgICAgLy8gY3VzdG9tIHVuaWZvcm1zXG4gICAgICAgIHtcbiAgICAgICAgICAgIGludmVydDogeyB0eXBlOiAnMWYnLCB2YWx1ZTogMSB9XG4gICAgICAgIH1cbiAgICApO1xufVxuXG5JbnZlcnRGaWx0ZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShjb3JlLkFic3RyYWN0RmlsdGVyLnByb3RvdHlwZSk7XG5JbnZlcnRGaWx0ZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gSW52ZXJ0RmlsdGVyO1xubW9kdWxlLmV4cG9ydHMgPSBJbnZlcnRGaWx0ZXI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKEludmVydEZpbHRlci5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBUaGUgc3RyZW5ndGggb2YgdGhlIGludmVydC4gYDFgIHdpbGwgZnVsbHkgaW52ZXJ0IHRoZSBjb2xvcnMsIGFuZFxuICAgICAqIGAwYCB3aWxsIG1ha2UgdGhlIG9iamVjdCBpdHMgbm9ybWFsIGNvbG9yLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuSW52ZXJ0RmlsdGVyI1xuICAgICAqL1xuICAgIGludmVydDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVuaWZvcm1zLmludmVydC52YWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudW5pZm9ybXMuaW52ZXJ0LnZhbHVlID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG59KTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vLi4vY29yZScpO1xuLy8gQHNlZSBodHRwczovL2dpdGh1Yi5jb20vc3Vic3RhY2svYnJmcy9pc3N1ZXMvMjVcblxuXG4vKipcbiAqIEBhdXRob3IgVmljbyBAdmljb2NvdGVhXG4gKiBvcmlnaW5hbCBmaWx0ZXI6IGh0dHBzOi8vZ2l0aHViLmNvbS9ldmFudy9nbGZ4LmpzL2Jsb2IvbWFzdGVyL3NyYy9maWx0ZXJzL2FkanVzdC9ub2lzZS5qc1xuICovXG5cbi8qKlxuICogQSBOb2lzZSBlZmZlY3QgZmlsdGVyLlxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5BYnN0cmFjdEZpbHRlclxuICogQG1lbWJlcm9mIFBJWEkuZmlsdGVyc1xuICovXG5mdW5jdGlvbiBOb2lzZUZpbHRlcigpXG57XG4gICAgY29yZS5BYnN0cmFjdEZpbHRlci5jYWxsKHRoaXMsXG4gICAgICAgIC8vIHZlcnRleCBzaGFkZXJcbiAgICAgICAgbnVsbCxcbiAgICAgICAgLy8gZnJhZ21lbnQgc2hhZGVyXG4gICAgICAgIFwicHJlY2lzaW9uIGhpZ2hwIGZsb2F0O1xcblxcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xcbnZhcnlpbmcgdmVjNCB2Q29sb3I7XFxuXFxudW5pZm9ybSBmbG9hdCBub2lzZTtcXG51bmlmb3JtIHNhbXBsZXIyRCB1U2FtcGxlcjtcXG5cXG5mbG9hdCByYW5kKHZlYzIgY28pXFxue1xcbiAgICByZXR1cm4gZnJhY3Qoc2luKGRvdChjby54eSwgdmVjMigxMi45ODk4LCA3OC4yMzMpKSkgKiA0Mzc1OC41NDUzKTtcXG59XFxuXFxudm9pZCBtYWluKClcXG57XFxuICAgIHZlYzQgY29sb3IgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZUZXh0dXJlQ29vcmQpO1xcblxcbiAgICBmbG9hdCBkaWZmID0gKHJhbmQodlRleHR1cmVDb29yZCkgLSAwLjUpICogbm9pc2U7XFxuXFxuICAgIGNvbG9yLnIgKz0gZGlmZjtcXG4gICAgY29sb3IuZyArPSBkaWZmO1xcbiAgICBjb2xvci5iICs9IGRpZmY7XFxuXFxuICAgIGdsX0ZyYWdDb2xvciA9IGNvbG9yO1xcbn1cXG5cIixcbiAgICAgICAgLy8gY3VzdG9tIHVuaWZvcm1zXG4gICAgICAgIHtcbiAgICAgICAgICAgIG5vaXNlOiB7IHR5cGU6ICcxZicsIHZhbHVlOiAwLjUgfVxuICAgICAgICB9XG4gICAgKTtcbn1cblxuTm9pc2VGaWx0ZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShjb3JlLkFic3RyYWN0RmlsdGVyLnByb3RvdHlwZSk7XG5Ob2lzZUZpbHRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBOb2lzZUZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gTm9pc2VGaWx0ZXI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKE5vaXNlRmlsdGVyLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFRoZSBhbW91bnQgb2Ygbm9pc2UgdG8gYXBwbHkuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5Ob2lzZUZpbHRlciNcbiAgICAgKiBAZGVmYXVsdCAwLjVcbiAgICAgKi9cbiAgICBub2lzZToge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVuaWZvcm1zLm5vaXNlLnZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy5ub2lzZS52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfVxufSk7XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uLy4uL2NvcmUnKTtcbi8vIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL3N1YnN0YWNrL2JyZnMvaXNzdWVzLzI1XG5cblxuLyoqXG4gKiBUaGlzIGZpbHRlciBhcHBsaWVzIGEgcGl4ZWxhdGUgZWZmZWN0IG1ha2luZyBkaXNwbGF5IG9iamVjdHMgYXBwZWFyICdibG9ja3knLlxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5BYnN0cmFjdEZpbHRlclxuICogQG1lbWJlcm9mIFBJWEkuZmlsdGVyc1xuICovXG5mdW5jdGlvbiBQaXhlbGF0ZUZpbHRlcigpXG57XG4gICAgY29yZS5BYnN0cmFjdEZpbHRlci5jYWxsKHRoaXMsXG4gICAgICAgIC8vIHZlcnRleCBzaGFkZXJcbiAgICAgICAgbnVsbCxcbiAgICAgICAgLy8gZnJhZ21lbnQgc2hhZGVyXG4gICAgICAgIFwicHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XFxuXFxudmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7XFxuXFxudW5pZm9ybSB2ZWM0IGRpbWVuc2lvbnM7XFxudW5pZm9ybSB2ZWMyIHBpeGVsU2l6ZTtcXG51bmlmb3JtIHNhbXBsZXIyRCB1U2FtcGxlcjtcXG5cXG52b2lkIG1haW4odm9pZClcXG57XFxuICAgIHZlYzIgY29vcmQgPSB2VGV4dHVyZUNvb3JkO1xcblxcbiAgICB2ZWMyIHNpemUgPSBkaW1lbnNpb25zLnh5IC8gcGl4ZWxTaXplO1xcblxcbiAgICB2ZWMyIGNvbG9yID0gZmxvb3IoICggdlRleHR1cmVDb29yZCAqIHNpemUgKSApIC8gc2l6ZSArIHBpeGVsU2l6ZS9kaW1lbnNpb25zLnh5ICogMC41O1xcblxcbiAgICBnbF9GcmFnQ29sb3IgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIGNvbG9yKTtcXG59XFxuXCIsXG4gICAgICAgIC8vIGN1c3RvbSB1bmlmb3Jtc1xuICAgICAgICB7XG4gICAgICAgICAgICBkaW1lbnNpb25zOiB7IHR5cGU6ICc0ZnYnLCAgdmFsdWU6IG5ldyBGbG9hdDMyQXJyYXkoWzAsIDAsIDAsIDBdKSB9LFxuICAgICAgICAgICAgcGl4ZWxTaXplOiAgeyB0eXBlOiAndjInLCAgIHZhbHVlOiB7IHg6IDEwLCB5OiAxMCB9IH1cbiAgICAgICAgfVxuICAgICk7XG59XG5cblBpeGVsYXRlRmlsdGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoY29yZS5BYnN0cmFjdEZpbHRlci5wcm90b3R5cGUpO1xuUGl4ZWxhdGVGaWx0ZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gUGl4ZWxhdGVGaWx0ZXI7XG5tb2R1bGUuZXhwb3J0cyA9IFBpeGVsYXRlRmlsdGVyO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhQaXhlbGF0ZUZpbHRlci5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBUaGlzIGEgcG9pbnQgdGhhdCBkZXNjcmliZXMgdGhlIHNpemUgb2YgdGhlIGJsb2Nrcy5cbiAgICAgKiB4IGlzIHRoZSB3aWR0aCBvZiB0aGUgYmxvY2sgYW5kIHkgaXMgdGhlIGhlaWdodC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuUG9pbnR9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5QaXhlbGF0ZUZpbHRlciNcbiAgICAgKi9cbiAgICBzaXplOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudW5pZm9ybXMucGl4ZWxTaXplLnZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy5waXhlbFNpemUudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi8uLi9jb3JlJyk7XG4vLyBAc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9zdWJzdGFjay9icmZzL2lzc3Vlcy8yNVxuXG5cbi8qKlxuICogQW4gUkdCIFNwbGl0IEZpbHRlci5cbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQWJzdHJhY3RGaWx0ZXJcbiAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnNcbiAqL1xuZnVuY3Rpb24gUkdCU3BsaXRGaWx0ZXIoKVxue1xuICAgIGNvcmUuQWJzdHJhY3RGaWx0ZXIuY2FsbCh0aGlzLFxuICAgICAgICAvLyB2ZXJ0ZXggc2hhZGVyXG4gICAgICAgIG51bGwsXG4gICAgICAgIC8vIGZyYWdtZW50IHNoYWRlclxuICAgICAgICBcInByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xcblxcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xcblxcbnVuaWZvcm0gc2FtcGxlcjJEIHVTYW1wbGVyO1xcbnVuaWZvcm0gdmVjNCBkaW1lbnNpb25zO1xcbnVuaWZvcm0gdmVjMiByZWQ7XFxudW5pZm9ybSB2ZWMyIGdyZWVuO1xcbnVuaWZvcm0gdmVjMiBibHVlO1xcblxcbnZvaWQgbWFpbih2b2lkKVxcbntcXG4gICBnbF9GcmFnQ29sb3IuciA9IHRleHR1cmUyRCh1U2FtcGxlciwgdlRleHR1cmVDb29yZCArIHJlZC9kaW1lbnNpb25zLnh5KS5yO1xcbiAgIGdsX0ZyYWdDb2xvci5nID0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2VGV4dHVyZUNvb3JkICsgZ3JlZW4vZGltZW5zaW9ucy54eSkuZztcXG4gICBnbF9GcmFnQ29sb3IuYiA9IHRleHR1cmUyRCh1U2FtcGxlciwgdlRleHR1cmVDb29yZCArIGJsdWUvZGltZW5zaW9ucy54eSkuYjtcXG4gICBnbF9GcmFnQ29sb3IuYSA9IHRleHR1cmUyRCh1U2FtcGxlciwgdlRleHR1cmVDb29yZCkuYTtcXG59XFxuXCIsXG4gICAgICAgIC8vIGN1c3RvbSB1bmlmb3Jtc1xuICAgICAgICB7XG4gICAgICAgICAgICByZWQ6ICAgICAgICB7IHR5cGU6ICd2MicsIHZhbHVlOiB7IHg6IDIwLCB5OiAyMCB9IH0sXG4gICAgICAgICAgICBncmVlbjogICAgICB7IHR5cGU6ICd2MicsIHZhbHVlOiB7IHg6IC0yMCwgeTogMjAgfSB9LFxuICAgICAgICAgICAgYmx1ZTogICAgICAgeyB0eXBlOiAndjInLCB2YWx1ZTogeyB4OiAyMCwgeTogLTIwIH0gfSxcbiAgICAgICAgICAgIGRpbWVuc2lvbnM6IHsgdHlwZTogJzRmdicsIHZhbHVlOiBbMCwgMCwgMCwgMF0gfVxuICAgICAgICB9XG4gICAgKTtcbn1cblxuUkdCU3BsaXRGaWx0ZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShjb3JlLkFic3RyYWN0RmlsdGVyLnByb3RvdHlwZSk7XG5SR0JTcGxpdEZpbHRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBSR0JTcGxpdEZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gUkdCU3BsaXRGaWx0ZXI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKFJHQlNwbGl0RmlsdGVyLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFJlZCBjaGFubmVsIG9mZnNldC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuUG9pbnR9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5SR0JTcGxpdEZpbHRlciNcbiAgICAgKi9cbiAgICByZWQ6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy51bmlmb3Jtcy5yZWQudmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLnJlZC52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIEdyZWVuIGNoYW5uZWwgb2Zmc2V0LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5Qb2ludH1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLlJHQlNwbGl0RmlsdGVyI1xuICAgICAqL1xuICAgIGdyZWVuOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudW5pZm9ybXMuZ3JlZW4udmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLmdyZWVuLnZhbHVlID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQmx1ZSBvZmZzZXQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlBvaW50fVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuUkdCU3BsaXRGaWx0ZXIjXG4gICAgICovXG4gICAgYmx1ZToge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVuaWZvcm1zLmJsdWUudmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLmJsdWUudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi8uLi9jb3JlJyk7XG4vLyBAc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9zdWJzdGFjay9icmZzL2lzc3Vlcy8yNVxuXG5cbi8qKlxuICogVGhpcyBhcHBsaWVzIGEgc2VwaWEgZWZmZWN0IHRvIHlvdXIgRGlzcGxheSBPYmplY3RzLlxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5BYnN0cmFjdEZpbHRlclxuICogQG1lbWJlcm9mIFBJWEkuZmlsdGVyc1xuICovXG5mdW5jdGlvbiBTZXBpYUZpbHRlcigpXG57XG4gICAgY29yZS5BYnN0cmFjdEZpbHRlci5jYWxsKHRoaXMsXG4gICAgICAgIC8vIHZlcnRleCBzaGFkZXJcbiAgICAgICAgbnVsbCxcbiAgICAgICAgLy8gZnJhZ21lbnQgc2hhZGVyXG4gICAgICAgIFwicHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XFxuXFxudmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7XFxuXFxudW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXI7XFxudW5pZm9ybSBmbG9hdCBzZXBpYTtcXG5cXG5jb25zdCBtYXQzIHNlcGlhTWF0cml4ID0gbWF0MygwLjM1ODgsIDAuNzA0NCwgMC4xMzY4LCAwLjI5OTAsIDAuNTg3MCwgMC4xMTQwLCAwLjIzOTIsIDAuNDY5NiwgMC4wOTEyKTtcXG5cXG52b2lkIG1haW4odm9pZClcXG57XFxuICAgZ2xfRnJhZ0NvbG9yID0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2VGV4dHVyZUNvb3JkKTtcXG4gICBnbF9GcmFnQ29sb3IucmdiID0gbWl4KCBnbF9GcmFnQ29sb3IucmdiLCBnbF9GcmFnQ29sb3IucmdiICogc2VwaWFNYXRyaXgsIHNlcGlhKTtcXG59XFxuXCIsXG4gICAgICAgIC8vIGN1c3RvbSB1bmlmb3Jtc1xuICAgICAgICB7XG4gICAgICAgICAgICBzZXBpYTogeyB0eXBlOiAnMWYnLCB2YWx1ZTogMSB9XG4gICAgICAgIH1cbiAgICApO1xufVxuXG5TZXBpYUZpbHRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuQWJzdHJhY3RGaWx0ZXIucHJvdG90eXBlKTtcblNlcGlhRmlsdGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFNlcGlhRmlsdGVyO1xubW9kdWxlLmV4cG9ydHMgPSBTZXBpYUZpbHRlcjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoU2VwaWFGaWx0ZXIucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogVGhlIHN0cmVuZ3RoIG9mIHRoZSBzZXBpYS4gYDFgIHdpbGwgYXBwbHkgdGhlIGZ1bGwgc2VwaWEgZWZmZWN0LCBhbmRcbiAgICAgKiBgMGAgd2lsbCBtYWtlIHRoZSBvYmplY3QgaXRzIG5vcm1hbCBjb2xvci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLlNlcGlhRmlsdGVyI1xuICAgICAqL1xuICAgIHNlcGlhOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudW5pZm9ybXMuc2VwaWEudmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLnNlcGlhLnZhbHVlID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG59KTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vLi4vY29yZScpO1xuLy8gQHNlZSBodHRwczovL2dpdGh1Yi5jb20vc3Vic3RhY2svYnJmcy9pc3N1ZXMvMjVcblxuXG4vKipcbiAqIFRoZSBDb2xvck1hdHJpeEZpbHRlciBjbGFzcyBsZXRzIHlvdSBhcHBseSBhIDR4NCBtYXRyaXggdHJhbnNmb3JtYXRpb24gb24gdGhlIFJHQkFcbiAqIGNvbG9yIGFuZCBhbHBoYSB2YWx1ZXMgb2YgZXZlcnkgcGl4ZWwgb24geW91ciBkaXNwbGF5T2JqZWN0IHRvIHByb2R1Y2UgYSByZXN1bHRcbiAqIHdpdGggYSBuZXcgc2V0IG9mIFJHQkEgY29sb3IgYW5kIGFscGhhIHZhbHVlcy4gSXQncyBwcmV0dHkgcG93ZXJmdWwhXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLkFic3RyYWN0RmlsdGVyXG4gKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzXG4gKi9cbmZ1bmN0aW9uIFNob2Nrd2F2ZUZpbHRlcigpXG57XG4gICAgY29yZS5BYnN0cmFjdEZpbHRlci5jYWxsKHRoaXMsXG4gICAgICAgIC8vIHZlcnRleCBzaGFkZXJcbiAgICAgICAgbnVsbCxcbiAgICAgICAgLy8gZnJhZ21lbnQgc2hhZGVyXG4gICAgICAgIFwicHJlY2lzaW9uIGxvd3AgZmxvYXQ7XFxuXFxudmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7XFxuXFxudW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXI7XFxuXFxudW5pZm9ybSB2ZWMyIGNlbnRlcjtcXG51bmlmb3JtIHZlYzMgcGFyYW1zOyAvLyAxMC4wLCAwLjgsIDAuMVxcbnVuaWZvcm0gZmxvYXQgdGltZTtcXG5cXG52b2lkIG1haW4oKVxcbntcXG4gICAgdmVjMiB1diA9IHZUZXh0dXJlQ29vcmQ7XFxuICAgIHZlYzIgdGV4Q29vcmQgPSB1djtcXG5cXG4gICAgZmxvYXQgZGlzdCA9IGRpc3RhbmNlKHV2LCBjZW50ZXIpO1xcblxcbiAgICBpZiAoIChkaXN0IDw9ICh0aW1lICsgcGFyYW1zLnopKSAmJiAoZGlzdCA+PSAodGltZSAtIHBhcmFtcy56KSkgKVxcbiAgICB7XFxuICAgICAgICBmbG9hdCBkaWZmID0gKGRpc3QgLSB0aW1lKTtcXG4gICAgICAgIGZsb2F0IHBvd0RpZmYgPSAxLjAgLSBwb3coYWJzKGRpZmYqcGFyYW1zLngpLCBwYXJhbXMueSk7XFxuXFxuICAgICAgICBmbG9hdCBkaWZmVGltZSA9IGRpZmYgICogcG93RGlmZjtcXG4gICAgICAgIHZlYzIgZGlmZlVWID0gbm9ybWFsaXplKHV2IC0gY2VudGVyKTtcXG4gICAgICAgIHRleENvb3JkID0gdXYgKyAoZGlmZlVWICogZGlmZlRpbWUpO1xcbiAgICB9XFxuXFxuICAgIGdsX0ZyYWdDb2xvciA9IHRleHR1cmUyRCh1U2FtcGxlciwgdGV4Q29vcmQpO1xcbn1cXG5cIixcbiAgICAgICAgLy8gY3VzdG9tIHVuaWZvcm1zXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNlbnRlcjogeyB0eXBlOiAndjInLCB2YWx1ZTogeyB4OiAwLjUsIHk6IDAuNSB9IH0sXG4gICAgICAgICAgICBwYXJhbXM6IHsgdHlwZTogJ3YzJywgdmFsdWU6IHsgeDogMTAsIHk6IDAuOCwgejogMC4xIH0gfSxcbiAgICAgICAgICAgIHRpbWU6IHsgdHlwZTogJzFmJywgdmFsdWU6IDAgfVxuICAgICAgICB9XG4gICAgKTtcbn1cblxuU2hvY2t3YXZlRmlsdGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoY29yZS5BYnN0cmFjdEZpbHRlci5wcm90b3R5cGUpO1xuU2hvY2t3YXZlRmlsdGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFNob2Nrd2F2ZUZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gU2hvY2t3YXZlRmlsdGVyO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhTaG9ja3dhdmVGaWx0ZXIucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgY2VudGVyIG9mIHRoZSBzaG9ja3dhdmUgaW4gbm9ybWFsaXplZCBzY3JlZW4gY29vcmRzLiBUaGF0IGlzXG4gICAgICogKDAsMCkgaXMgdGhlIHRvcC1sZWZ0IGFuZCAoMSwxKSBpcyB0aGUgYm90dG9tIHJpZ2h0LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7b2JqZWN0PHN0cmluZywgbnVtYmVyPn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLlNob2Nrd2F2ZUZpbHRlciNcbiAgICAgKi9cbiAgICBjZW50ZXI6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy51bmlmb3Jtcy5jZW50ZXIudmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLmNlbnRlci52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfSxcbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBwYXJhbXMgb2YgdGhlIHNob2Nrd2F2ZS4gVGhlc2UgbW9kaWZ5IHRoZSBsb29rIGFuZCBiZWhhdmlvciBvZlxuICAgICAqIHRoZSBzaG9ja3dhdmUgYXMgaXQgcmlwcGxlcyBvdXQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtvYmplY3Q8c3RyaW5nLCBudW1iZXI+fVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuU2hvY2t3YXZlRmlsdGVyI1xuICAgICAqL1xuICAgIHBhcmFtczoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVuaWZvcm1zLnBhcmFtcy52YWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudW5pZm9ybXMucGFyYW1zLnZhbHVlID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9LFxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIGVsYXBzZWQgdGltZSBvZiB0aGUgc2hvY2t3YXZlLiBUaGlzIGNvbnRyb2xzIHRoZSBzcGVlZCBhdCB3aGljaFxuICAgICAqIHRoZSBzaG9ja3dhdmUgcmlwcGxlcyBvdXQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5TaG9ja3dhdmVGaWx0ZXIjXG4gICAgICovXG4gICAgdGltZToge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVuaWZvcm1zLnRpbWUudmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLnRpbWUudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi8uLi9jb3JlJyk7XG4vLyBAc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9zdWJzdGFjay9icmZzL2lzc3Vlcy8yNVxuXG5cbi8qKlxuICogQGF1dGhvciBWaWNvIEB2aWNvY290ZWFcbiAqIG9yaWdpbmFsIGZpbHRlciBodHRwczovL2dpdGh1Yi5jb20vZXZhbncvZ2xmeC5qcy9ibG9iL21hc3Rlci9zcmMvZmlsdGVycy9ibHVyL3RpbHRzaGlmdC5qcyBieSBFdmFuIFdhbGxhY2UgOiBodHRwOi8vbWFkZWJ5ZXZhbi5jb20vXG4gKi9cblxuLyoqXG4gKiBBIFRpbHRTaGlmdEF4aXNGaWx0ZXIuXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLkFic3RyYWN0RmlsdGVyXG4gKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzXG4gKi9cbmZ1bmN0aW9uIFRpbHRTaGlmdEF4aXNGaWx0ZXIoKVxue1xuICAgIGNvcmUuQWJzdHJhY3RGaWx0ZXIuY2FsbCh0aGlzLFxuICAgICAgICAvLyB2ZXJ0ZXggc2hhZGVyXG4gICAgICAgIG51bGwsXG4gICAgICAgIC8vIGZyYWdtZW50IHNoYWRlclxuICAgICAgICBcInByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xcblxcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xcblxcbnVuaWZvcm0gc2FtcGxlcjJEIHVTYW1wbGVyO1xcbnVuaWZvcm0gZmxvYXQgYmx1cjtcXG51bmlmb3JtIGZsb2F0IGdyYWRpZW50Qmx1cjtcXG51bmlmb3JtIHZlYzIgc3RhcnQ7XFxudW5pZm9ybSB2ZWMyIGVuZDtcXG51bmlmb3JtIHZlYzIgZGVsdGE7XFxudW5pZm9ybSB2ZWMyIHRleFNpemU7XFxuXFxuZmxvYXQgcmFuZG9tKHZlYzMgc2NhbGUsIGZsb2F0IHNlZWQpXFxue1xcbiAgICByZXR1cm4gZnJhY3Qoc2luKGRvdChnbF9GcmFnQ29vcmQueHl6ICsgc2VlZCwgc2NhbGUpKSAqIDQzNzU4LjU0NTMgKyBzZWVkKTtcXG59XFxuXFxudm9pZCBtYWluKHZvaWQpXFxue1xcbiAgICB2ZWM0IGNvbG9yID0gdmVjNCgwLjApO1xcbiAgICBmbG9hdCB0b3RhbCA9IDAuMDtcXG5cXG4gICAgZmxvYXQgb2Zmc2V0ID0gcmFuZG9tKHZlYzMoMTIuOTg5OCwgNzguMjMzLCAxNTEuNzE4MiksIDAuMCk7XFxuICAgIHZlYzIgbm9ybWFsID0gbm9ybWFsaXplKHZlYzIoc3RhcnQueSAtIGVuZC55LCBlbmQueCAtIHN0YXJ0LngpKTtcXG4gICAgZmxvYXQgcmFkaXVzID0gc21vb3Roc3RlcCgwLjAsIDEuMCwgYWJzKGRvdCh2VGV4dHVyZUNvb3JkICogdGV4U2l6ZSAtIHN0YXJ0LCBub3JtYWwpKSAvIGdyYWRpZW50Qmx1cikgKiBibHVyO1xcblxcbiAgICBmb3IgKGZsb2F0IHQgPSAtMzAuMDsgdCA8PSAzMC4wOyB0KyspXFxuICAgIHtcXG4gICAgICAgIGZsb2F0IHBlcmNlbnQgPSAodCArIG9mZnNldCAtIDAuNSkgLyAzMC4wO1xcbiAgICAgICAgZmxvYXQgd2VpZ2h0ID0gMS4wIC0gYWJzKHBlcmNlbnQpO1xcbiAgICAgICAgdmVjNCBzYW1wbGUgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZUZXh0dXJlQ29vcmQgKyBkZWx0YSAvIHRleFNpemUgKiBwZXJjZW50ICogcmFkaXVzKTtcXG4gICAgICAgIHNhbXBsZS5yZ2IgKj0gc2FtcGxlLmE7XFxuICAgICAgICBjb2xvciArPSBzYW1wbGUgKiB3ZWlnaHQ7XFxuICAgICAgICB0b3RhbCArPSB3ZWlnaHQ7XFxuICAgIH1cXG5cXG4gICAgZ2xfRnJhZ0NvbG9yID0gY29sb3IgLyB0b3RhbDtcXG4gICAgZ2xfRnJhZ0NvbG9yLnJnYiAvPSBnbF9GcmFnQ29sb3IuYSArIDAuMDAwMDE7XFxufVxcblwiLFxuICAgICAgICAvLyBjdXN0b20gdW5pZm9ybXNcbiAgICAgICAge1xuICAgICAgICAgICAgYmx1cjogICAgICAgICAgIHsgdHlwZTogJzFmJywgdmFsdWU6IDEwMCB9LFxuICAgICAgICAgICAgZ3JhZGllbnRCbHVyOiAgIHsgdHlwZTogJzFmJywgdmFsdWU6IDYwMCB9LFxuICAgICAgICAgICAgc3RhcnQ6ICAgICAgICAgIHsgdHlwZTogJ3YyJywgdmFsdWU6IHsgeDogMCwgICAgeTogd2luZG93LmlubmVySGVpZ2h0IC8gMiB9IH0sXG4gICAgICAgICAgICBlbmQ6ICAgICAgICAgICAgeyB0eXBlOiAndjInLCB2YWx1ZTogeyB4OiA2MDAsICB5OiB3aW5kb3cuaW5uZXJIZWlnaHQgLyAyIH0gfSxcbiAgICAgICAgICAgIGRlbHRhOiAgICAgICAgICB7IHR5cGU6ICd2MicsIHZhbHVlOiB7IHg6IDMwLCAgIHk6IDMwIH0gfSxcbiAgICAgICAgICAgIHRleFNpemU6ICAgICAgICB7IHR5cGU6ICd2MicsIHZhbHVlOiB7IHg6IHdpbmRvdy5pbm5lcldpZHRoLCB5OiB3aW5kb3cuaW5uZXJIZWlnaHQgfSB9XG4gICAgICAgIH1cbiAgICApO1xuXG4gICAgdGhpcy51cGRhdGVEZWx0YSgpO1xufVxuXG5UaWx0U2hpZnRBeGlzRmlsdGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoY29yZS5BYnN0cmFjdEZpbHRlci5wcm90b3R5cGUpO1xuVGlsdFNoaWZ0QXhpc0ZpbHRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBUaWx0U2hpZnRBeGlzRmlsdGVyO1xubW9kdWxlLmV4cG9ydHMgPSBUaWx0U2hpZnRBeGlzRmlsdGVyO1xuXG4vKipcbiAqIFVwZGF0ZXMgdGhlIGZpbHRlciBkZWx0YSB2YWx1ZXMuXG4gKiBUaGlzIGlzIG92ZXJyaWRkZW4gaW4gdGhlIFggYW5kIFkgZmlsdGVycywgZG9lcyBub3RoaW5nIGZvciB0aGlzIGNsYXNzLlxuICpcbiAqL1xuVGlsdFNoaWZ0QXhpc0ZpbHRlci5wcm90b3R5cGUudXBkYXRlRGVsdGEgPSBmdW5jdGlvbiAoKVxue1xuICAgIHRoaXMudW5pZm9ybXMuZGVsdGEudmFsdWUueCA9IDA7XG4gICAgdGhpcy51bmlmb3Jtcy5kZWx0YS52YWx1ZS55ID0gMDtcbn07XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKFRpbHRTaGlmdEF4aXNGaWx0ZXIucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogVGhlIHN0cmVuZ3RoIG9mIHRoZSBibHVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuVGlsdFNoaWZ0QXhpc0ZpbHRlciNcbiAgICAgKi9cbiAgICBibHVyOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudW5pZm9ybXMuYmx1ci52YWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudW5pZm9ybXMuYmx1ci52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFRoZSBzdHJlbmd0aCBvZiB0aGUgZ3JhZGllbnQgYmx1ci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLlRpbHRTaGlmdEF4aXNGaWx0ZXIjXG4gICAgICovXG4gICAgZ3JhZGllbnRCbHVyOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudW5pZm9ybXMuZ3JhZGllbnRCbHVyLnZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy5ncmFkaWVudEJsdXIudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBUaGUgWCB2YWx1ZSB0byBzdGFydCB0aGUgZWZmZWN0IGF0LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5Qb2ludH1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLlRpbHRTaGlmdEF4aXNGaWx0ZXIjXG4gICAgICovXG4gICAgc3RhcnQ6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy51bmlmb3Jtcy5zdGFydC52YWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudW5pZm9ybXMuc3RhcnQudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlRGVsdGEoKTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBUaGUgWCB2YWx1ZSB0byBlbmQgdGhlIGVmZmVjdCBhdC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuUG9pbnR9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5UaWx0U2hpZnRBeGlzRmlsdGVyI1xuICAgICAqL1xuICAgIGVuZDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVuaWZvcm1zLmVuZC52YWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudW5pZm9ybXMuZW5kLnZhbHVlID0gdmFsdWU7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZURlbHRhKCk7XG4gICAgICAgIH1cbiAgICB9XG59KTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vLi4vY29yZScpLFxuICAgIFRpbHRTaGlmdFhGaWx0ZXIgPSByZXF1aXJlKCcuL1RpbHRTaGlmdFhGaWx0ZXInKSxcbiAgICBUaWx0U2hpZnRZRmlsdGVyID0gcmVxdWlyZSgnLi9UaWx0U2hpZnRZRmlsdGVyJyk7XG5cbi8qKlxuICogQGF1dGhvciBWaWNvIEB2aWNvY290ZWFcbiAqIG9yaWdpbmFsIGZpbHRlciBodHRwczovL2dpdGh1Yi5jb20vZXZhbncvZ2xmeC5qcy9ibG9iL21hc3Rlci9zcmMvZmlsdGVycy9ibHVyL3RpbHRzaGlmdC5qcyBieSBFdmFuIFdhbGxhY2UgOiBodHRwOi8vbWFkZWJ5ZXZhbi5jb20vXG4gKi9cblxuLyoqXG4gKiBBIFRpbHRTaGlmdCBGaWx0ZXIuIE1hbmFnZXMgdGhlIHBhc3Mgb2YgYm90aCBhIFRpbHRTaGlmdFhGaWx0ZXIgYW5kIFRpbHRTaGlmdFlGaWx0ZXIuXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLkFic3RyYWN0RmlsdGVyXG4gKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzXG4gKi9cbmZ1bmN0aW9uIFRpbHRTaGlmdEZpbHRlcigpXG57XG4gICAgY29yZS5BYnN0cmFjdEZpbHRlci5jYWxsKHRoaXMpO1xuXG4gICAgdGhpcy50aWx0U2hpZnRYRmlsdGVyID0gbmV3IFRpbHRTaGlmdFhGaWx0ZXIoKTtcbiAgICB0aGlzLnRpbHRTaGlmdFlGaWx0ZXIgPSBuZXcgVGlsdFNoaWZ0WUZpbHRlcigpO1xufVxuXG5UaWx0U2hpZnRGaWx0ZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShjb3JlLkFic3RyYWN0RmlsdGVyLnByb3RvdHlwZSk7XG5UaWx0U2hpZnRGaWx0ZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gVGlsdFNoaWZ0RmlsdGVyO1xubW9kdWxlLmV4cG9ydHMgPSBUaWx0U2hpZnRGaWx0ZXI7XG5cblRpbHRTaGlmdEZpbHRlci5wcm90b3R5cGUuYXBwbHlGaWx0ZXIgPSBmdW5jdGlvbiAocmVuZGVyZXIsIGlucHV0LCBvdXRwdXQpXG57XG4gICAgdmFyIHJlbmRlclRhcmdldCA9IHJlbmRlcmVyLmZpbHRlck1hbmFnZXIuZ2V0UmVuZGVyVGFyZ2V0KHRydWUpO1xuXG4gICAgdGhpcy50aWx0U2hpZnRYRmlsdGVyLmFwcGx5RmlsdGVyKHJlbmRlcmVyLCBpbnB1dCwgcmVuZGVyVGFyZ2V0KTtcblxuICAgIHRoaXMudGlsdFNoaWZ0WUZpbHRlci5hcHBseUZpbHRlcihyZW5kZXJlciwgcmVuZGVyVGFyZ2V0LCBvdXRwdXQpO1xuXG4gICAgcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5yZXR1cm5SZW5kZXJUYXJnZXQocmVuZGVyVGFyZ2V0KTtcbn07XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKFRpbHRTaGlmdEZpbHRlci5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBUaGUgc3RyZW5ndGggb2YgdGhlIGJsdXIuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5UaWx0U2hpZnRGaWx0ZXIjXG4gICAgICovXG4gICAgYmx1cjoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnRpbHRTaGlmdFhGaWx0ZXIuYmx1cjtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudGlsdFNoaWZ0WEZpbHRlci5ibHVyID0gdGhpcy50aWx0U2hpZnRZRmlsdGVyLmJsdXIgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBUaGUgc3RyZW5ndGggb2YgdGhlIGdyYWRpZW50IGJsdXIuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5UaWx0U2hpZnRGaWx0ZXIjXG4gICAgICovXG4gICAgZ3JhZGllbnRCbHVyOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudGlsdFNoaWZ0WEZpbHRlci5ncmFkaWVudEJsdXI7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnRpbHRTaGlmdFhGaWx0ZXIuZ3JhZGllbnRCbHVyID0gdGhpcy50aWx0U2hpZnRZRmlsdGVyLmdyYWRpZW50Qmx1ciA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFRoZSBZIHZhbHVlIHRvIHN0YXJ0IHRoZSBlZmZlY3QgYXQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5UaWx0U2hpZnRGaWx0ZXIjXG4gICAgICovXG4gICAgc3RhcnQ6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy50aWx0U2hpZnRYRmlsdGVyLnN0YXJ0O1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy50aWx0U2hpZnRYRmlsdGVyLnN0YXJ0ID0gdGhpcy50aWx0U2hpZnRZRmlsdGVyLnN0YXJ0ID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVGhlIFkgdmFsdWUgdG8gZW5kIHRoZSBlZmZlY3QgYXQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5UaWx0U2hpZnRGaWx0ZXIjXG4gICAgICovXG4gICAgZW5kOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudGlsdFNoaWZ0WEZpbHRlci5lbmQ7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnRpbHRTaGlmdFhGaWx0ZXIuZW5kID0gdGhpcy50aWx0U2hpZnRZRmlsdGVyLmVuZCA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfVxufSk7XG4iLCJ2YXIgVGlsdFNoaWZ0QXhpc0ZpbHRlciA9IHJlcXVpcmUoJy4vVGlsdFNoaWZ0QXhpc0ZpbHRlcicpO1xuXG4vKipcbiAqIEBhdXRob3IgVmljbyBAdmljb2NvdGVhXG4gKiBvcmlnaW5hbCBmaWx0ZXIgaHR0cHM6Ly9naXRodWIuY29tL2V2YW53L2dsZnguanMvYmxvYi9tYXN0ZXIvc3JjL2ZpbHRlcnMvYmx1ci90aWx0c2hpZnQuanMgYnkgRXZhbiBXYWxsYWNlIDogaHR0cDovL21hZGVieWV2YW4uY29tL1xuICovXG5cbi8qKlxuICogQSBUaWx0U2hpZnRYRmlsdGVyLlxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5UaWx0U2hpZnRBeGlzRmlsdGVyXG4gKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzXG4gKi9cbmZ1bmN0aW9uIFRpbHRTaGlmdFhGaWx0ZXIoKVxue1xuICAgIFRpbHRTaGlmdEF4aXNGaWx0ZXIuY2FsbCh0aGlzKTtcbn1cblxuVGlsdFNoaWZ0WEZpbHRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFRpbHRTaGlmdEF4aXNGaWx0ZXIucHJvdG90eXBlKTtcblRpbHRTaGlmdFhGaWx0ZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gVGlsdFNoaWZ0WEZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gVGlsdFNoaWZ0WEZpbHRlcjtcblxuLyoqXG4gKiBVcGRhdGVzIHRoZSBmaWx0ZXIgZGVsdGEgdmFsdWVzLlxuICpcbiAqL1xuVGlsdFNoaWZ0WEZpbHRlci5wcm90b3R5cGUudXBkYXRlRGVsdGEgPSBmdW5jdGlvbiAoKVxue1xuICAgIHZhciBkeCA9IHRoaXMudW5pZm9ybXMuZW5kLnZhbHVlLnggLSB0aGlzLnVuaWZvcm1zLnN0YXJ0LnZhbHVlLng7XG4gICAgdmFyIGR5ID0gdGhpcy51bmlmb3Jtcy5lbmQudmFsdWUueSAtIHRoaXMudW5pZm9ybXMuc3RhcnQudmFsdWUueTtcbiAgICB2YXIgZCA9IE1hdGguc3FydChkeCAqIGR4ICsgZHkgKiBkeSk7XG5cbiAgICB0aGlzLnVuaWZvcm1zLmRlbHRhLnZhbHVlLnggPSBkeCAvIGQ7XG4gICAgdGhpcy51bmlmb3Jtcy5kZWx0YS52YWx1ZS55ID0gZHkgLyBkO1xufTtcbiIsInZhciBUaWx0U2hpZnRBeGlzRmlsdGVyID0gcmVxdWlyZSgnLi9UaWx0U2hpZnRBeGlzRmlsdGVyJyk7XG5cbi8qKlxuICogQGF1dGhvciBWaWNvIEB2aWNvY290ZWFcbiAqIG9yaWdpbmFsIGZpbHRlciBodHRwczovL2dpdGh1Yi5jb20vZXZhbncvZ2xmeC5qcy9ibG9iL21hc3Rlci9zcmMvZmlsdGVycy9ibHVyL3RpbHRzaGlmdC5qcyBieSBFdmFuIFdhbGxhY2UgOiBodHRwOi8vbWFkZWJ5ZXZhbi5jb20vXG4gKi9cblxuLyoqXG4gKiBBIFRpbHRTaGlmdFlGaWx0ZXIuXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLlRpbHRTaGlmdEF4aXNGaWx0ZXJcbiAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnNcbiAqL1xuZnVuY3Rpb24gVGlsdFNoaWZ0WUZpbHRlcigpXG57XG4gICAgVGlsdFNoaWZ0QXhpc0ZpbHRlci5jYWxsKHRoaXMpO1xufVxuXG5UaWx0U2hpZnRZRmlsdGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoVGlsdFNoaWZ0QXhpc0ZpbHRlci5wcm90b3R5cGUpO1xuVGlsdFNoaWZ0WUZpbHRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBUaWx0U2hpZnRZRmlsdGVyO1xubW9kdWxlLmV4cG9ydHMgPSBUaWx0U2hpZnRZRmlsdGVyO1xuXG4vKipcbiAqIFVwZGF0ZXMgdGhlIGZpbHRlciBkZWx0YSB2YWx1ZXMuXG4gKlxuICovXG5UaWx0U2hpZnRZRmlsdGVyLnByb3RvdHlwZS51cGRhdGVEZWx0YSA9IGZ1bmN0aW9uICgpXG57XG4gICAgdmFyIGR4ID0gdGhpcy51bmlmb3Jtcy5lbmQudmFsdWUueCAtIHRoaXMudW5pZm9ybXMuc3RhcnQudmFsdWUueDtcbiAgICB2YXIgZHkgPSB0aGlzLnVuaWZvcm1zLmVuZC52YWx1ZS55IC0gdGhpcy51bmlmb3Jtcy5zdGFydC52YWx1ZS55O1xuICAgIHZhciBkID0gTWF0aC5zcXJ0KGR4ICogZHggKyBkeSAqIGR5KTtcblxuICAgIHRoaXMudW5pZm9ybXMuZGVsdGEudmFsdWUueCA9IC1keSAvIGQ7XG4gICAgdGhpcy51bmlmb3Jtcy5kZWx0YS52YWx1ZS55ID0gZHggLyBkO1xufTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vLi4vY29yZScpO1xuLy8gQHNlZSBodHRwczovL2dpdGh1Yi5jb20vc3Vic3RhY2svYnJmcy9pc3N1ZXMvMjVcblxuXG4vKipcbiAqIFRoaXMgZmlsdGVyIGFwcGxpZXMgYSB0d2lzdCBlZmZlY3QgbWFraW5nIGRpc3BsYXkgb2JqZWN0cyBhcHBlYXIgdHdpc3RlZCBpbiB0aGUgZ2l2ZW4gZGlyZWN0aW9uLlxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5BYnN0cmFjdEZpbHRlclxuICogQG1lbWJlcm9mIFBJWEkuZmlsdGVyc1xuICovXG5mdW5jdGlvbiBUd2lzdEZpbHRlcigpXG57XG4gICAgY29yZS5BYnN0cmFjdEZpbHRlci5jYWxsKHRoaXMsXG4gICAgICAgIC8vIHZlcnRleCBzaGFkZXJcbiAgICAgICAgbnVsbCxcbiAgICAgICAgLy8gZnJhZ21lbnQgc2hhZGVyXG4gICAgICAgIFwicHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XFxuXFxudmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7XFxuXFxudW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXI7XFxudW5pZm9ybSBmbG9hdCByYWRpdXM7XFxudW5pZm9ybSBmbG9hdCBhbmdsZTtcXG51bmlmb3JtIHZlYzIgb2Zmc2V0O1xcblxcbnZvaWQgbWFpbih2b2lkKVxcbntcXG4gICB2ZWMyIGNvb3JkID0gdlRleHR1cmVDb29yZCAtIG9mZnNldDtcXG4gICBmbG9hdCBkaXN0ID0gbGVuZ3RoKGNvb3JkKTtcXG5cXG4gICBpZiAoZGlzdCA8IHJhZGl1cylcXG4gICB7XFxuICAgICAgIGZsb2F0IHJhdGlvID0gKHJhZGl1cyAtIGRpc3QpIC8gcmFkaXVzO1xcbiAgICAgICBmbG9hdCBhbmdsZU1vZCA9IHJhdGlvICogcmF0aW8gKiBhbmdsZTtcXG4gICAgICAgZmxvYXQgcyA9IHNpbihhbmdsZU1vZCk7XFxuICAgICAgIGZsb2F0IGMgPSBjb3MoYW5nbGVNb2QpO1xcbiAgICAgICBjb29yZCA9IHZlYzIoY29vcmQueCAqIGMgLSBjb29yZC55ICogcywgY29vcmQueCAqIHMgKyBjb29yZC55ICogYyk7XFxuICAgfVxcblxcbiAgIGdsX0ZyYWdDb2xvciA9IHRleHR1cmUyRCh1U2FtcGxlciwgY29vcmQrb2Zmc2V0KTtcXG59XFxuXCIsXG4gICAgICAgIC8vIGN1c3RvbSB1bmlmb3Jtc1xuICAgICAgICB7XG4gICAgICAgICAgICByYWRpdXM6ICAgICB7IHR5cGU6ICcxZicsIHZhbHVlOiAwLjUgfSxcbiAgICAgICAgICAgIGFuZ2xlOiAgICAgIHsgdHlwZTogJzFmJywgdmFsdWU6IDUgfSxcbiAgICAgICAgICAgIG9mZnNldDogICAgIHsgdHlwZTogJ3YyJywgdmFsdWU6IHsgeDogMC41LCB5OiAwLjUgfSB9XG4gICAgICAgIH1cbiAgICApO1xufVxuXG5Ud2lzdEZpbHRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuQWJzdHJhY3RGaWx0ZXIucHJvdG90eXBlKTtcblR3aXN0RmlsdGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFR3aXN0RmlsdGVyO1xubW9kdWxlLmV4cG9ydHMgPSBUd2lzdEZpbHRlcjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoVHdpc3RGaWx0ZXIucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogVGhpcyBwb2ludCBkZXNjcmliZXMgdGhlIHRoZSBvZmZzZXQgb2YgdGhlIHR3aXN0LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5Qb2ludH1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLlR3aXN0RmlsdGVyI1xuICAgICAqL1xuICAgIG9mZnNldDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVuaWZvcm1zLm9mZnNldC52YWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudW5pZm9ybXMub2Zmc2V0LnZhbHVlID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVGhpcyByYWRpdXMgb2YgdGhlIHR3aXN0LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuVHdpc3RGaWx0ZXIjXG4gICAgICovXG4gICAgcmFkaXVzOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudW5pZm9ybXMucmFkaXVzLnZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy5yYWRpdXMudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBUaGlzIGFuZ2xlIG9mIHRoZSB0d2lzdC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLlR3aXN0RmlsdGVyI1xuICAgICAqL1xuICAgIGFuZ2xlOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudW5pZm9ybXMuYW5nbGUudmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLmFuZ2xlLnZhbHVlID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG59KTtcbiIsIi8vIHJ1biB0aGUgcG9seWZpbGxzXG5yZXF1aXJlKCcuL3BvbHlmaWxsJyk7XG5cbnZhciBjb3JlID0gbW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL2NvcmUnKTtcblxuLy8gYWRkIGNvcmUgcGx1Z2lucy5cbmNvcmUuZXh0cmFzICAgICAgICAgPSByZXF1aXJlKCcuL2V4dHJhcycpO1xuY29yZS5maWx0ZXJzICAgICAgICA9IHJlcXVpcmUoJy4vZmlsdGVycycpO1xuY29yZS5pbnRlcmFjdGlvbiAgICA9IHJlcXVpcmUoJy4vaW50ZXJhY3Rpb24nKTtcbmNvcmUubG9hZGVycyAgICAgICAgPSByZXF1aXJlKCcuL2xvYWRlcnMnKTtcbmNvcmUubWVzaCAgICAgICAgICAgPSByZXF1aXJlKCcuL21lc2gnKTtcbmNvcmUuYWNjZXNzaWJpbGl0eSAgPSByZXF1aXJlKCcuL2FjY2Vzc2liaWxpdHknKTtcblxuLy8gZXhwb3J0IGEgcHJlbWFkZSBsb2FkZXIgaW5zdGFuY2Vcbi8qKlxuICogQSBwcmVtYWRlIGluc3RhbmNlIG9mIHRoZSBsb2FkZXIgdGhhdCBjYW4gYmUgdXNlZCB0byBsb2FkZXIgcmVzb3VyY2VzLlxuICpcbiAqIEBuYW1lIGxvYWRlclxuICogQG1lbWJlcm9mIFBJWElcbiAqIEBwcm9wZXJ0eSB7UElYSS5sb2FkZXJzLkxvYWRlcn1cbiAqL1xuY29yZS5sb2FkZXIgPSBuZXcgY29yZS5sb2FkZXJzLkxvYWRlcigpO1xuXG4vLyBtaXhpbiB0aGUgZGVwcmVjYXRpb24gZmVhdHVyZXMuXG5PYmplY3QuYXNzaWduKGNvcmUsIHJlcXVpcmUoJy4vZGVwcmVjYXRpb24nKSk7XG5cbi8vIEFsd2F5cyBleHBvcnQgcGl4aSBnbG9iYWxseS5cbmdsb2JhbC5QSVhJID0gY29yZTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vY29yZScpO1xuXG4vKipcbiAqIEhvbGRzIGFsbCBpbmZvcm1hdGlvbiByZWxhdGVkIHRvIGFuIEludGVyYWN0aW9uIGV2ZW50XG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSS5pbnRlcmFjdGlvblxuICovXG5mdW5jdGlvbiBJbnRlcmFjdGlvbkRhdGEoKVxue1xuICAgIC8qKlxuICAgICAqIFRoaXMgcG9pbnQgc3RvcmVzIHRoZSBnbG9iYWwgY29vcmRzIG9mIHdoZXJlIHRoZSB0b3VjaC9tb3VzZSBldmVudCBoYXBwZW5lZFxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5Qb2ludH1cbiAgICAgKi9cbiAgICB0aGlzLmdsb2JhbCA9IG5ldyBjb3JlLlBvaW50KCk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgdGFyZ2V0IFNwcml0ZSB0aGF0IHdhcyBpbnRlcmFjdGVkIHdpdGhcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuU3ByaXRlfVxuICAgICAqL1xuICAgIHRoaXMudGFyZ2V0ID0gbnVsbDtcblxuICAgIC8qKlxuICAgICAqIFdoZW4gcGFzc2VkIHRvIGFuIGV2ZW50IGhhbmRsZXIsIHRoaXMgd2lsbCBiZSB0aGUgb3JpZ2luYWwgRE9NIEV2ZW50IHRoYXQgd2FzIGNhcHR1cmVkXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtFdmVudH1cbiAgICAgKi9cbiAgICB0aGlzLm9yaWdpbmFsRXZlbnQgPSBudWxsO1xufVxuXG5JbnRlcmFjdGlvbkRhdGEucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gSW50ZXJhY3Rpb25EYXRhO1xubW9kdWxlLmV4cG9ydHMgPSBJbnRlcmFjdGlvbkRhdGE7XG5cbi8qKlxuICogVGhpcyB3aWxsIHJldHVybiB0aGUgbG9jYWwgY29vcmRpbmF0ZXMgb2YgdGhlIHNwZWNpZmllZCBkaXNwbGF5T2JqZWN0IGZvciB0aGlzIEludGVyYWN0aW9uRGF0YVxuICpcbiAqIEBwYXJhbSBkaXNwbGF5T2JqZWN0IHtQSVhJLkRpc3BsYXlPYmplY3R9IFRoZSBEaXNwbGF5T2JqZWN0IHRoYXQgeW91IHdvdWxkIGxpa2UgdGhlIGxvY2FsIGNvb3JkcyBvZmZcbiAqIEBwYXJhbSBbcG9pbnRdIHtQSVhJLlBvaW50fSBBIFBvaW50IG9iamVjdCBpbiB3aGljaCB0byBzdG9yZSB0aGUgdmFsdWUsIG9wdGlvbmFsIChvdGhlcndpc2Ugd2lsbCBjcmVhdGUgYSBuZXcgcG9pbnQpXG4gKiBAcGFyYW0gW2dsb2JhbFBvc10ge1BJWEkuUG9pbnR9IEEgUG9pbnQgb2JqZWN0IGNvbnRhaW5pbmcgeW91ciBjdXN0b20gZ2xvYmFsIGNvb3Jkcywgb3B0aW9uYWwgKG90aGVyd2lzZSB3aWxsIHVzZSB0aGUgY3VycmVudCBnbG9iYWwgY29vcmRzKVxuICogQHJldHVybiB7UElYSS5Qb2ludH0gQSBwb2ludCBjb250YWluaW5nIHRoZSBjb29yZGluYXRlcyBvZiB0aGUgSW50ZXJhY3Rpb25EYXRhIHBvc2l0aW9uIHJlbGF0aXZlIHRvIHRoZSBEaXNwbGF5T2JqZWN0XG4gKi9cbkludGVyYWN0aW9uRGF0YS5wcm90b3R5cGUuZ2V0TG9jYWxQb3NpdGlvbiA9IGZ1bmN0aW9uIChkaXNwbGF5T2JqZWN0LCBwb2ludCwgZ2xvYmFsUG9zKVxue1xuICAgIHJldHVybiBkaXNwbGF5T2JqZWN0LndvcmxkVHJhbnNmb3JtLmFwcGx5SW52ZXJzZShnbG9iYWxQb3MgfHwgdGhpcy5nbG9iYWwsIHBvaW50KTtcbn07XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uL2NvcmUnKSxcbiAgICBJbnRlcmFjdGlvbkRhdGEgPSByZXF1aXJlKCcuL0ludGVyYWN0aW9uRGF0YScpO1xuXG4vLyBNaXggaW50ZXJhY3RpdmVUYXJnZXQgaW50byBjb3JlLkRpc3BsYXlPYmplY3QucHJvdG90eXBlXG5PYmplY3QuYXNzaWduKFxuICAgIGNvcmUuRGlzcGxheU9iamVjdC5wcm90b3R5cGUsXG4gICAgcmVxdWlyZSgnLi9pbnRlcmFjdGl2ZVRhcmdldCcpXG4pO1xuXG4vKipcbiAqIFRoZSBpbnRlcmFjdGlvbiBtYW5hZ2VyIGRlYWxzIHdpdGggbW91c2UgYW5kIHRvdWNoIGV2ZW50cy4gQW55IERpc3BsYXlPYmplY3QgY2FuIGJlIGludGVyYWN0aXZlXG4gKiBpZiBpdHMgaW50ZXJhY3RpdmUgcGFyYW1ldGVyIGlzIHNldCB0byB0cnVlXG4gKiBUaGlzIG1hbmFnZXIgYWxzbyBzdXBwb3J0cyBtdWx0aXRvdWNoLlxuICpcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWEkuaW50ZXJhY3Rpb25cbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5DYW52YXNSZW5kZXJlcnxQSVhJLldlYkdMUmVuZGVyZXJ9IEEgcmVmZXJlbmNlIHRvIHRoZSBjdXJyZW50IHJlbmRlcmVyXG4gKiBAcGFyYW0gW29wdGlvbnNdIHtvYmplY3R9XG4gKiBAcGFyYW0gW29wdGlvbnMuYXV0b1ByZXZlbnREZWZhdWx0PXRydWVdIHtib29sZWFufSBTaG91bGQgdGhlIG1hbmFnZXIgYXV0b21hdGljYWxseSBwcmV2ZW50IGRlZmF1bHQgYnJvd3NlciBhY3Rpb25zLlxuICogQHBhcmFtIFtvcHRpb25zLmludGVyYWN0aW9uRnJlcXVlbmN5PTEwXSB7bnVtYmVyfSBGcmVxdWVuY3kgaW5jcmVhc2VzIHRoZSBpbnRlcmFjdGlvbiBldmVudHMgd2lsbCBiZSBjaGVja2VkLlxuICovXG5mdW5jdGlvbiBJbnRlcmFjdGlvbk1hbmFnZXIocmVuZGVyZXIsIG9wdGlvbnMpXG57XG4gICAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG5cbiAgICAvKipcbiAgICAgKiBUaGUgcmVuZGVyZXIgdGhpcyBpbnRlcmFjdGlvbiBtYW5hZ2VyIHdvcmtzIGZvci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuU3lzdGVtUmVuZGVyZXJ9XG4gICAgICovXG4gICAgdGhpcy5yZW5kZXJlciA9IHJlbmRlcmVyO1xuXG4gICAgLyoqXG4gICAgICogU2hvdWxkIGRlZmF1bHQgYnJvd3NlciBhY3Rpb25zIGF1dG9tYXRpY2FsbHkgYmUgcHJldmVudGVkLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKiBAZGVmYXVsdCB0cnVlXG4gICAgICovXG4gICAgdGhpcy5hdXRvUHJldmVudERlZmF1bHQgPSBvcHRpb25zLmF1dG9QcmV2ZW50RGVmYXVsdCAhPT0gdW5kZWZpbmVkID8gb3B0aW9ucy5hdXRvUHJldmVudERlZmF1bHQgOiB0cnVlO1xuXG4gICAgLyoqXG4gICAgICogQXMgdGhpcyBmcmVxdWVuY3kgaW5jcmVhc2VzIHRoZSBpbnRlcmFjdGlvbiBldmVudHMgd2lsbCBiZSBjaGVja2VkIG1vcmUgb2Z0ZW4uXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMTBcbiAgICAgKi9cbiAgICB0aGlzLmludGVyYWN0aW9uRnJlcXVlbmN5ID0gb3B0aW9ucy5pbnRlcmFjdGlvbkZyZXF1ZW5jeSB8fCAxMDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBtb3VzZSBkYXRhXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLmludGVyYWN0aW9uLkludGVyYWN0aW9uRGF0YX1cbiAgICAgKi9cbiAgICB0aGlzLm1vdXNlID0gbmV3IEludGVyYWN0aW9uRGF0YSgpO1xuXG4gICAgLyoqXG4gICAgICogQW4gZXZlbnQgZGF0YSBvYmplY3QgdG8gaGFuZGxlIGFsbCB0aGUgZXZlbnQgdHJhY2tpbmcvZGlzcGF0Y2hpbmdcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge29iamVjdH1cbiAgICAgKi9cbiAgICB0aGlzLmV2ZW50RGF0YSA9IHtcbiAgICAgICAgc3RvcHBlZDogZmFsc2UsXG4gICAgICAgIHRhcmdldDogbnVsbCxcbiAgICAgICAgdHlwZTogbnVsbCxcbiAgICAgICAgZGF0YTogdGhpcy5tb3VzZSxcbiAgICAgICAgc3RvcFByb3BhZ2F0aW9uOmZ1bmN0aW9uKCl7XG4gICAgICAgICAgICB0aGlzLnN0b3BwZWQgPSB0cnVlO1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIC8qKlxuICAgICAqIFRpbnkgbGl0dGxlIGludGVyYWN0aXZlRGF0YSBwb29sICFcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuaW50ZXJhY3Rpb24uSW50ZXJhY3Rpb25EYXRhW119XG4gICAgICovXG4gICAgdGhpcy5pbnRlcmFjdGl2ZURhdGFQb29sID0gW107XG5cbiAgICAvKipcbiAgICAgKiBUaGUgRE9NIGVsZW1lbnQgdG8gYmluZCB0by5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge0hUTUxFbGVtZW50fVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5pbnRlcmFjdGlvbkRPTUVsZW1lbnQgPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogSGF2ZSBldmVudHMgYmVlbiBhdHRhY2hlZCB0byB0aGUgZG9tIGVsZW1lbnQ/XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5ldmVudHNBZGRlZCA9IGZhbHNlO1xuXG4gICAgLy90aGlzIHdpbGwgbWFrZSBpdCBzbyB0aGF0IHlvdSBkb24ndCBoYXZlIHRvIGNhbGwgYmluZCBhbGwgdGhlIHRpbWVcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge0Z1bmN0aW9ufVxuICAgICAqL1xuICAgIHRoaXMub25Nb3VzZVVwID0gdGhpcy5vbk1vdXNlVXAuYmluZCh0aGlzKTtcbiAgICB0aGlzLnByb2Nlc3NNb3VzZVVwID0gdGhpcy5wcm9jZXNzTW91c2VVcC5iaW5kKCB0aGlzICk7XG5cblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge0Z1bmN0aW9ufVxuICAgICAqL1xuICAgIHRoaXMub25Nb3VzZURvd24gPSB0aGlzLm9uTW91c2VEb3duLmJpbmQodGhpcyk7XG4gICAgdGhpcy5wcm9jZXNzTW91c2VEb3duID0gdGhpcy5wcm9jZXNzTW91c2VEb3duLmJpbmQoIHRoaXMgKTtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge0Z1bmN0aW9ufVxuICAgICAqL1xuICAgIHRoaXMub25Nb3VzZU1vdmUgPSB0aGlzLm9uTW91c2VNb3ZlLmJpbmQoIHRoaXMgKTtcbiAgICB0aGlzLnByb2Nlc3NNb3VzZU1vdmUgPSB0aGlzLnByb2Nlc3NNb3VzZU1vdmUuYmluZCggdGhpcyApO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7RnVuY3Rpb259XG4gICAgICovXG4gICAgdGhpcy5vbk1vdXNlT3V0ID0gdGhpcy5vbk1vdXNlT3V0LmJpbmQodGhpcyk7XG4gICAgdGhpcy5wcm9jZXNzTW91c2VPdmVyT3V0ID0gdGhpcy5wcm9jZXNzTW91c2VPdmVyT3V0LmJpbmQoIHRoaXMgKTtcblxuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7RnVuY3Rpb259XG4gICAgICovXG4gICAgdGhpcy5vblRvdWNoU3RhcnQgPSB0aGlzLm9uVG91Y2hTdGFydC5iaW5kKHRoaXMpO1xuICAgIHRoaXMucHJvY2Vzc1RvdWNoU3RhcnQgPSB0aGlzLnByb2Nlc3NUb3VjaFN0YXJ0LmJpbmQodGhpcyk7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtGdW5jdGlvbn1cbiAgICAgKi9cbiAgICB0aGlzLm9uVG91Y2hFbmQgPSB0aGlzLm9uVG91Y2hFbmQuYmluZCh0aGlzKTtcbiAgICB0aGlzLnByb2Nlc3NUb3VjaEVuZCA9IHRoaXMucHJvY2Vzc1RvdWNoRW5kLmJpbmQodGhpcyk7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtGdW5jdGlvbn1cbiAgICAgKi9cbiAgICB0aGlzLm9uVG91Y2hNb3ZlID0gdGhpcy5vblRvdWNoTW92ZS5iaW5kKHRoaXMpO1xuICAgIHRoaXMucHJvY2Vzc1RvdWNoTW92ZSA9IHRoaXMucHJvY2Vzc1RvdWNoTW92ZS5iaW5kKHRoaXMpO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMubGFzdCA9IDA7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgY3NzIHN0eWxlIG9mIHRoZSBjdXJzb3IgdGhhdCBpcyBiZWluZyB1c2VkXG4gICAgICogQG1lbWJlciB7c3RyaW5nfVxuICAgICAqL1xuICAgIHRoaXMuY3VycmVudEN1cnNvclN0eWxlID0gJ2luaGVyaXQnO1xuXG4gICAgLyoqXG4gICAgICogSW50ZXJuYWwgY2FjaGVkIHZhclxuICAgICAqIEBtZW1iZXIge1BJWEkuUG9pbnR9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl90ZW1wUG9pbnQgPSBuZXcgY29yZS5Qb2ludCgpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGN1cnJlbnQgcmVzb2x1dGlvblxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLnJlc29sdXRpb24gPSAxO1xuXG4gICAgdGhpcy5zZXRUYXJnZXRFbGVtZW50KHRoaXMucmVuZGVyZXIudmlldywgdGhpcy5yZW5kZXJlci5yZXNvbHV0aW9uKTtcbn1cblxuSW50ZXJhY3Rpb25NYW5hZ2VyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IEludGVyYWN0aW9uTWFuYWdlcjtcbm1vZHVsZS5leHBvcnRzID0gSW50ZXJhY3Rpb25NYW5hZ2VyO1xuXG4vKipcbiAqIFNldHMgdGhlIERPTSBlbGVtZW50IHdoaWNoIHdpbGwgcmVjZWl2ZSBtb3VzZS90b3VjaCBldmVudHMuIFRoaXMgaXMgdXNlZnVsIGZvciB3aGVuIHlvdSBoYXZlXG4gKiBvdGhlciBET00gZWxlbWVudHMgb24gdG9wIG9mIHRoZSByZW5kZXJlcnMgQ2FudmFzIGVsZW1lbnQuIFdpdGggdGhpcyB5b3UnbGwgYmUgYmFsZSB0byBkZWxldGVnYXRlXG4gKiBhbm90aGVyIERPTSBlbGVtZW50IHRvIHJlY2VpdmUgdGhvc2UgZXZlbnRzLlxuICpcbiAqIEBwYXJhbSBlbGVtZW50IHtIVE1MRWxlbWVudH0gdGhlIERPTSBlbGVtZW50IHdoaWNoIHdpbGwgcmVjZWl2ZSBtb3VzZSBhbmQgdG91Y2ggZXZlbnRzLlxuICogQHBhcmFtIFtyZXNvbHV0aW9uPTFdIHtudW1iZXJ9IFRIZSByZXNvbHV0aW9uIG9mIHRoZSBuZXcgZWxlbWVudCAocmVsYXRpdmUgdG8gdGhlIGNhbnZhcykuXG4gKiBAcHJpdmF0ZVxuICovXG5JbnRlcmFjdGlvbk1hbmFnZXIucHJvdG90eXBlLnNldFRhcmdldEVsZW1lbnQgPSBmdW5jdGlvbiAoZWxlbWVudCwgcmVzb2x1dGlvbilcbntcbiAgICB0aGlzLnJlbW92ZUV2ZW50cygpO1xuXG4gICAgdGhpcy5pbnRlcmFjdGlvbkRPTUVsZW1lbnQgPSBlbGVtZW50O1xuXG4gICAgdGhpcy5yZXNvbHV0aW9uID0gcmVzb2x1dGlvbiB8fCAxO1xuXG4gICAgdGhpcy5hZGRFdmVudHMoKTtcbn07XG5cbi8qKlxuICogUmVnaXN0ZXJzIGFsbCB0aGUgRE9NIGV2ZW50c1xuICpcbiAqIEBwcml2YXRlXG4gKi9cbkludGVyYWN0aW9uTWFuYWdlci5wcm90b3R5cGUuYWRkRXZlbnRzID0gZnVuY3Rpb24gKClcbntcbiAgICBpZiAoIXRoaXMuaW50ZXJhY3Rpb25ET01FbGVtZW50KVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvcmUudGlja2VyLnNoYXJlZC5hZGQodGhpcy51cGRhdGUsIHRoaXMpO1xuXG4gICAgaWYgKHdpbmRvdy5uYXZpZ2F0b3IubXNQb2ludGVyRW5hYmxlZClcbiAgICB7XG4gICAgICAgIHRoaXMuaW50ZXJhY3Rpb25ET01FbGVtZW50LnN0eWxlWyctbXMtY29udGVudC16b29taW5nJ10gPSAnbm9uZSc7XG4gICAgICAgIHRoaXMuaW50ZXJhY3Rpb25ET01FbGVtZW50LnN0eWxlWyctbXMtdG91Y2gtYWN0aW9uJ10gPSAnbm9uZSc7XG4gICAgfVxuXG4gICAgd2luZG93LmRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlbW92ZScsICAgIHRoaXMub25Nb3VzZU1vdmUsIHRydWUpO1xuICAgIHRoaXMuaW50ZXJhY3Rpb25ET01FbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlZG93bicsICAgIHRoaXMub25Nb3VzZURvd24sIHRydWUpO1xuICAgIHRoaXMuaW50ZXJhY3Rpb25ET01FbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlb3V0JywgICAgIHRoaXMub25Nb3VzZU91dCwgdHJ1ZSk7XG5cbiAgICB0aGlzLmludGVyYWN0aW9uRE9NRWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCd0b3VjaHN0YXJ0JywgICB0aGlzLm9uVG91Y2hTdGFydCwgdHJ1ZSk7XG4gICAgdGhpcy5pbnRlcmFjdGlvbkRPTUVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigndG91Y2hlbmQnLCAgICAgdGhpcy5vblRvdWNoRW5kLCB0cnVlKTtcbiAgICB0aGlzLmludGVyYWN0aW9uRE9NRWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCd0b3VjaG1vdmUnLCAgICB0aGlzLm9uVG91Y2hNb3ZlLCB0cnVlKTtcblxuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdtb3VzZXVwJywgIHRoaXMub25Nb3VzZVVwLCB0cnVlKTtcblxuICAgIHRoaXMuZXZlbnRzQWRkZWQgPSB0cnVlO1xufTtcblxuLyoqXG4gKiBSZW1vdmVzIGFsbCB0aGUgRE9NIGV2ZW50cyB0aGF0IHdlcmUgcHJldmlvdXNseSByZWdpc3RlcmVkXG4gKlxuICogQHByaXZhdGVcbiAqL1xuSW50ZXJhY3Rpb25NYW5hZ2VyLnByb3RvdHlwZS5yZW1vdmVFdmVudHMgPSBmdW5jdGlvbiAoKVxue1xuICAgIGlmICghdGhpcy5pbnRlcmFjdGlvbkRPTUVsZW1lbnQpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29yZS50aWNrZXIuc2hhcmVkLnJlbW92ZSh0aGlzLnVwZGF0ZSk7XG5cbiAgICBpZiAod2luZG93Lm5hdmlnYXRvci5tc1BvaW50ZXJFbmFibGVkKVxuICAgIHtcbiAgICAgICAgdGhpcy5pbnRlcmFjdGlvbkRPTUVsZW1lbnQuc3R5bGVbJy1tcy1jb250ZW50LXpvb21pbmcnXSA9ICcnO1xuICAgICAgICB0aGlzLmludGVyYWN0aW9uRE9NRWxlbWVudC5zdHlsZVsnLW1zLXRvdWNoLWFjdGlvbiddID0gJyc7XG4gICAgfVxuXG4gICAgd2luZG93LmRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21vdXNlbW92ZScsIHRoaXMub25Nb3VzZU1vdmUsIHRydWUpO1xuICAgIHRoaXMuaW50ZXJhY3Rpb25ET01FbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21vdXNlZG93bicsIHRoaXMub25Nb3VzZURvd24sIHRydWUpO1xuICAgIHRoaXMuaW50ZXJhY3Rpb25ET01FbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21vdXNlb3V0JywgIHRoaXMub25Nb3VzZU91dCwgdHJ1ZSk7XG5cbiAgICB0aGlzLmludGVyYWN0aW9uRE9NRWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCd0b3VjaHN0YXJ0JywgdGhpcy5vblRvdWNoU3RhcnQsIHRydWUpO1xuICAgIHRoaXMuaW50ZXJhY3Rpb25ET01FbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3RvdWNoZW5kJywgIHRoaXMub25Ub3VjaEVuZCwgdHJ1ZSk7XG4gICAgdGhpcy5pbnRlcmFjdGlvbkRPTUVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigndG91Y2htb3ZlJywgdGhpcy5vblRvdWNoTW92ZSwgdHJ1ZSk7XG5cbiAgICB0aGlzLmludGVyYWN0aW9uRE9NRWxlbWVudCA9IG51bGw7XG5cbiAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcignbW91c2V1cCcsICB0aGlzLm9uTW91c2VVcCwgdHJ1ZSk7XG5cbiAgICB0aGlzLmV2ZW50c0FkZGVkID0gZmFsc2U7XG59O1xuXG4vKipcbiAqIFVwZGF0ZXMgdGhlIHN0YXRlIG9mIGludGVyYWN0aXZlIG9iamVjdHMuXG4gKiBJbnZva2VkIGJ5IGEgdGhyb3R0bGVkIHRpY2tlciB1cGRhdGUgZnJvbVxuICoge0BsaW5rIFBJWEkudGlja2VyLnNoYXJlZH0uXG4gKlxuICogQHBhcmFtIGRlbHRhVGltZSB7bnVtYmVyfVxuICovXG5JbnRlcmFjdGlvbk1hbmFnZXIucHJvdG90eXBlLnVwZGF0ZSA9IGZ1bmN0aW9uIChkZWx0YVRpbWUpXG57XG4gICAgdGhpcy5fZGVsdGFUaW1lICs9IGRlbHRhVGltZTtcblxuICAgIGlmICh0aGlzLl9kZWx0YVRpbWUgPCB0aGlzLmludGVyYWN0aW9uRnJlcXVlbmN5KVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuX2RlbHRhVGltZSA9IDA7XG5cbiAgICBpZiAoIXRoaXMuaW50ZXJhY3Rpb25ET01FbGVtZW50KVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIGlmIHRoZSB1c2VyIG1vdmUgdGhlIG1vdXNlIHRoaXMgY2hlY2sgaGFzIGFscmVhZHkgYmVlbiBkZm9uZSB1c2luZyB0aGUgbW91c2UgbW92ZSFcbiAgICBpZih0aGlzLmRpZE1vdmUpXG4gICAge1xuICAgICAgICB0aGlzLmRpZE1vdmUgPSBmYWxzZTtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuY3Vyc29yID0gJ2luaGVyaXQnO1xuXG4gICAgdGhpcy5wcm9jZXNzSW50ZXJhY3RpdmUodGhpcy5tb3VzZS5nbG9iYWwsIHRoaXMucmVuZGVyZXIuX2xhc3RPYmplY3RSZW5kZXJlZCwgdGhpcy5wcm9jZXNzTW91c2VPdmVyT3V0LCB0cnVlICk7XG5cbiAgICBpZiAodGhpcy5jdXJyZW50Q3Vyc29yU3R5bGUgIT09IHRoaXMuY3Vyc29yKVxuICAgIHtcbiAgICAgICAgdGhpcy5jdXJyZW50Q3Vyc29yU3R5bGUgPSB0aGlzLmN1cnNvcjtcbiAgICAgICAgdGhpcy5pbnRlcmFjdGlvbkRPTUVsZW1lbnQuc3R5bGUuY3Vyc29yID0gdGhpcy5jdXJzb3I7XG4gICAgfVxuXG4gICAgLy9UT0RPXG59O1xuXG4vKipcbiAqIERpc3BhdGNoZXMgYW4gZXZlbnQgb24gdGhlIGRpc3BsYXkgb2JqZWN0IHRoYXQgd2FzIGludGVyYWN0ZWQgd2l0aFxuICpcbiAqIEBwYXJhbSBkaXNwbGF5T2JqZWN0IHtQSVhJLkNvbnRhaW5lcnxQSVhJLlNwcml0ZXxQSVhJLmV4dHJhcy5UaWxpbmdTcHJpdGV9IHRoZSBkaXNwbGF5IG9iamVjdCBpbiBxdWVzdGlvblxuICogQHBhcmFtIGV2ZW50U3RyaW5nIHtzdHJpbmd9IHRoZSBuYW1lIG9mIHRoZSBldmVudCAoZS5nLCBtb3VzZWRvd24pXG4gKiBAcGFyYW0gZXZlbnREYXRhIHtvYmplY3R9IHRoZSBldmVudCBkYXRhIG9iamVjdFxuICogQHByaXZhdGVcbiAqL1xuSW50ZXJhY3Rpb25NYW5hZ2VyLnByb3RvdHlwZS5kaXNwYXRjaEV2ZW50ID0gZnVuY3Rpb24gKCBkaXNwbGF5T2JqZWN0LCBldmVudFN0cmluZywgZXZlbnREYXRhIClcbntcbiAgICBpZighZXZlbnREYXRhLnN0b3BwZWQpXG4gICAge1xuICAgICAgICBldmVudERhdGEudGFyZ2V0ID0gZGlzcGxheU9iamVjdDtcbiAgICAgICAgZXZlbnREYXRhLnR5cGUgPSBldmVudFN0cmluZztcblxuICAgICAgICBkaXNwbGF5T2JqZWN0LmVtaXQoIGV2ZW50U3RyaW5nLCBldmVudERhdGEgKTtcblxuICAgICAgICBpZiggZGlzcGxheU9iamVjdFtldmVudFN0cmluZ10gKVxuICAgICAgICB7XG4gICAgICAgICAgICBkaXNwbGF5T2JqZWN0W2V2ZW50U3RyaW5nXSggZXZlbnREYXRhICk7XG4gICAgICAgIH1cbiAgICB9XG59O1xuXG4vKipcbiAqIE1hcHMgeCBhbmQgeSBjb29yZHMgZnJvbSBhIERPTSBvYmplY3QgYW5kIG1hcHMgdGhlbSBjb3JyZWN0bHkgdG8gdGhlIHBpeGkgdmlldy4gVGhlIHJlc3VsdGluZyB2YWx1ZSBpcyBzdG9yZWQgaW4gdGhlIHBvaW50LlxuICogVGhpcyB0YWtlcyBpbnRvIGFjY291bnQgdGhlIGZhY3QgdGhhdCB0aGUgRE9NIGVsZW1lbnQgY291bGQgYmUgc2NhbGVkIGFuZCBwb3NpdGlvbmVkIGFueXdoZXJlIG9uIHRoZSBzY3JlZW4uXG4gKlxuICogQHBhcmFtICB7UElYSS5Qb2ludH0gcG9pbnQgdGhlIHBvaW50IHRoYXQgdGhlIHJlc3VsdCB3aWxsIGJlIHN0b3JlZCBpblxuICogQHBhcmFtICB7bnVtYmVyfSB4ICAgICB0aGUgeCBjb29yZCBvZiB0aGUgcG9zaXRpb24gdG8gbWFwXG4gKiBAcGFyYW0gIHtudW1iZXJ9IHkgICAgIHRoZSB5IGNvb3JkIG9mIHRoZSBwb3NpdGlvbiB0byBtYXBcbiAqL1xuSW50ZXJhY3Rpb25NYW5hZ2VyLnByb3RvdHlwZS5tYXBQb3NpdGlvblRvUG9pbnQgPSBmdW5jdGlvbiAoIHBvaW50LCB4LCB5IClcbntcbiAgICB2YXIgcmVjdCA9IHRoaXMuaW50ZXJhY3Rpb25ET01FbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgIHBvaW50LnggPSAoICggeCAtIHJlY3QubGVmdCApICogKHRoaXMuaW50ZXJhY3Rpb25ET01FbGVtZW50LndpZHRoICAvIHJlY3Qud2lkdGggICkgKSAvIHRoaXMucmVzb2x1dGlvbjtcbiAgICBwb2ludC55ID0gKCAoIHkgLSByZWN0LnRvcCAgKSAqICh0aGlzLmludGVyYWN0aW9uRE9NRWxlbWVudC5oZWlnaHQgLyByZWN0LmhlaWdodCApICkgLyB0aGlzLnJlc29sdXRpb247XG59O1xuXG4vKipcbiAqIFRoaXMgZnVuY3Rpb24gaXMgcHJvdmlkZXMgYSBuZWF0IHdheSBvZiBjcmF3bGluZyB0aHJvdWdoIHRoZSBzY2VuZSBncmFwaCBhbmQgcnVubmluZyBhIHNwZWNpZmllZCBmdW5jdGlvbiBvbiBhbGwgaW50ZXJhY3RpdmUgb2JqZWN0cyBpdCBmaW5kcy5cbiAqIEl0IHdpbGwgYWxzbyB0YWtlIGNhcmUgb2YgaGl0IHRlc3RpbmcgdGhlIGludGVyYWN0aXZlIG9iamVjdHMgYW5kIHBhc3NlcyB0aGUgaGl0IGFjcm9zcyBpbiB0aGUgZnVuY3Rpb24uXG4gKlxuICogQHBhcmFtICB7UElYSS5Qb2ludH0gcG9pbnQgdGhlIHBvaW50IHRoYXQgaXMgdGVzdGVkIGZvciBjb2xsaXNpb25cbiAqIEBwYXJhbSAge1BJWEkuQ29udGFpbmVyfFBJWEkuU3ByaXRlfFBJWEkuZXh0cmFzLlRpbGluZ1Nwcml0ZX0gZGlzcGxheU9iamVjdCB0aGUgZGlzcGxheU9iamVjdCB0aGF0IHdpbGwgYmUgaGl0IHRlc3QgKHJlY3VyY3Npdmx5IGNyYXdscyBpdHMgY2hpbGRyZW4pXG4gKiBAcGFyYW0gIHtGdW5jdGlvbn0gZnVuYyB0aGUgZnVuY3Rpb24gdGhhdCB3aWxsIGJlIGNhbGxlZCBvbiBlYWNoIGludGVyYWN0aXZlIG9iamVjdC4gVGhlIGRpc3BsYXlPYmplY3QgYW5kIGhpdCB3aWxsIGJlIHBhc3NlZCB0byB0aGUgZnVuY3Rpb25cbiAqIEBwYXJhbSAge2Jvb2xlYW59IGhpdFRlc3QgdGhpcyBpbmRpY2F0ZXMgaWYgdGhlIG9iamVjdHMgaW5zaWRlIHNob3VsZCBiZSBoaXQgdGVzdCBhZ2FpbnN0IHRoZSBwb2ludFxuICogQHJldHVybiB7Ym9vbGVhbn0gcmV0dXJucyB0cnVlIGlmIHRoZSBkaXNwbGF5T2JqZWN0IGhpdCB0aGUgcG9pbnRcbiAqL1xuSW50ZXJhY3Rpb25NYW5hZ2VyLnByb3RvdHlwZS5wcm9jZXNzSW50ZXJhY3RpdmUgPSBmdW5jdGlvbiAocG9pbnQsIGRpc3BsYXlPYmplY3QsIGZ1bmMsIGhpdFRlc3QsIGludGVyYWN0aXZlKVxue1xuICAgIGlmKCFkaXNwbGF5T2JqZWN0IHx8ICFkaXNwbGF5T2JqZWN0LnZpc2libGUpXG4gICAge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgLy8gVG9vayBhIGxpdHRsZSB3aGlsZSB0byByZXdvcmsgdGhpcyBmdW5jdGlvbiBjb3JyZWN0bHkhIEJ1dCBub3cgaXQgaXMgZG9uZSBhbmQgbmljZSBhbmQgb3B0aW1pc2VkLiBeX15cbiAgICAvLyBcbiAgICAvLyBUaGlzIGZ1bmN0aW9uIHdpbGwgbm93IGxvb3AgdGhyb3VnaCBhbGwgb2JqZWN0cyBhbmQgdGhlbiBvbmx5IGhpdCB0ZXN0IHRoZSBvYmplY3RzIGl0IEhBUyB0bywgbm90IGFsbCBvZiB0aGVtLiBNVUNIIGZhc3Rlci4uXG4gICAgLy8gQW4gb2JqZWN0IHdpbGwgYmUgaGl0IHRlc3QgaWYgdGhlIGZvbGxvd2luZyBpcyB0cnVlOlxuICAgIC8vIFxuICAgIC8vIDE6IEl0IGlzIGludGVyYWN0aXZlLlxuICAgIC8vIDI6IEl0IGJlbG9uZ3MgdG8gYSBwYXJlbnQgdGhhdCBpcyBpbnRlcmFjdGl2ZSBBTkQgb25lIG9mIHRoZSBwYXJlbnRzIGNoaWxkcmVuIGhhdmUgbm90IGFscmVhZHkgYmVlbiBoaXQuXG4gICAgLy8gXG4gICAgLy8gQXMgYW5vdGhlciBsaXR0bGUgb3B0aW1pc2F0aW9uIG9uY2UgYW4gaW50ZXJhY3RpdmUgb2JqZWN0IGhhcyBiZWVuIGhpdCB3ZSBjYW4gY2Fycnkgb24gdGhyb3VnaCB0aGUgc2NlbmVncmFwaCwgYnV0IHdlIGtub3cgdGhhdCB0aGVyZSB3aWxsIGJlIG5vIG1vcmUgaGl0cyEgU28gd2UgY2FuIGF2b2lkIGV4dHJhIGhpdCB0ZXN0c1xuICAgIC8vIEEgZmluYWwgb3B0aW1pc2F0aW9uIGlzIHRoYXQgYW4gb2JqZWN0IGlzIG5vdCBoaXQgdGVzdCBkaXJlY3RseSBpZiBhIGNoaWxkIGhhcyBhbHJlYWR5IGJlZW4gaGl0LlxuICAgIFxuICAgIHZhciBoaXQgPSBmYWxzZSxcbiAgICAgICAgaW50ZXJhY3RpdmVQYXJlbnQgPSBpbnRlcmFjdGl2ZSA9IGRpc3BsYXlPYmplY3QuaW50ZXJhY3RpdmUgfHwgaW50ZXJhY3RpdmU7XG5cbiAgICAvLyBpZiB0aGUgZGlzcGxheW9iamVjdCBoYXMgYSBoaXRBcmVhLCB0aGVuIGl0IGRvZXMgbm90IG5lZWQgdG8gaGl0VGVzdCBjaGlsZHJlbi5cbiAgICBpZihkaXNwbGF5T2JqZWN0LmhpdEFyZWEpXG4gICAge1xuICAgICAgICBpbnRlcmFjdGl2ZVBhcmVudCA9IGZhbHNlO1xuICAgIH1cblxuICAgIC8vICoqIEZSRUUgVElQICoqISBJZiBhbiBvYmplY3QgaXMgbm90IGludGVyYWN0dGl2ZSBvciBoYXMgbm8gYnV0dG9ucyBpbiBpdCAoc3VjaCBhcyBhIGdhbWUgc2NlbmUhKSBzZXQgaW50ZXJhY3RpdmVDaGlsZHJlbiB0byBmYWxzZSBmb3IgdGhhdCBkaXNwbGF5T2JqZWN0LlxuICAgIC8vIFRoaXMgd2lsbCBhbGxvdyBwaXhpIHRvIGNvbXBsZXRseSBpZ25vcmUgYW5kIGJ5cGFzcyBjaGVja2luZyB0aGUgZGlzcGxheU9iamVjdHMgY2hpbGRyZW4uXG4gICAgaWYoZGlzcGxheU9iamVjdC5pbnRlcmFjdGl2ZUNoaWxkcmVuKVxuICAgIHsgICAgICAgXG4gICAgICAgIHZhciBjaGlsZHJlbiA9IGRpc3BsYXlPYmplY3QuY2hpbGRyZW47XG4gICAgICAgIFxuICAgICAgICBmb3IgKHZhciBpID0gY2hpbGRyZW4ubGVuZ3RoLTE7IGkgPj0gMDsgaS0tKVxuICAgICAgICB7XG4gICAgICAgICAgICAvLyB0aW1lIHRvIGdldCByZWN1cnNpdmUuLiBpZiB0aGlzIGZ1bmN0aW9uIHdpbGwgcmV0dXJuIGlmIHNvbXRoaW5nIGlzIGhpdC4uXG4gICAgICAgICAgICBpZiggdGhpcy5wcm9jZXNzSW50ZXJhY3RpdmUocG9pbnQsIGNoaWxkcmVuW2ldLCBmdW5jLCBoaXRUZXN0LCBpbnRlcmFjdGl2ZVBhcmVudCkgKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGhpdCA9IHRydWU7XG5cbiAgICAgICAgICAgICAgICAvLyB3ZSBubyBsb25nZXIgbmVlZCB0byBoaXQgdGVzdCBhbnkgbW9yZSBvYmplY3RzIGluIHRoaXMgY29udGFpbmVyIGFzIHdlIHdlIG5vdyBrbm93IHRoZSBwYXJlbnQgaGFzIGJlZW4gaGl0XG4gICAgICAgICAgICAgICAgaW50ZXJhY3RpdmVQYXJlbnQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAvLyBJZiB0aGUgY2hpbGQgaXMgaW50ZXJhY3RpdmUgLCB0aGF0IG1lYW5zIHRoYXQgdGhlIG9iamVjdCBoaXQgd2FzIGFjdHVhbGx5IGludGVyYWN0aXZlIGFuZCBub3QganVzdCB0aGUgY2hpbGQgb2YgYW4gaW50ZXJhY3RpdmUgb2JqZWN0LiBcbiAgICAgICAgICAgICAgICAvLyBUaGlzIG1lYW5zIHdlIG5vIGxvbmdlciBuZWVkIHRvIGhpdCB0ZXN0IGFueXRoaW5nIGVsc2UuIFdlIHN0aWxsIG5lZWQgdG8gcnVuIHRocm91Z2ggYWxsIG9iamVjdHMsIGJ1dCB3ZSBkb24ndCBuZWVkIHRvIHBlcmZvcm0gYW55IGhpdCB0ZXN0cy5cbiAgICAgICAgICAgICAgICBpZihjaGlsZHJlbltpXS5pbnRlcmFjdGl2ZSlcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIGhpdFRlc3QgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBubyBwb2ludCBydW5uaW5nIHRoaXMgaWYgdGhlIGl0ZW0gaXMgbm90IGludGVyYWN0aXZlIG9yIGRvZXMgbm90IGhhdmUgYW4gaW50ZXJhY3RpdmUgcGFyZW50LlxuICAgIGlmKGludGVyYWN0aXZlKVxuICAgIHtcbiAgICAgICAgLy8gaWYgd2UgYXJlIGhpdCB0ZXN0aW5nIChhcyBpbiB3ZSBoYXZlIG5vIGhpdCBhbnkgb2JqZWN0cyB5ZXQpXG4gICAgICAgIC8vIFdlIGFsc28gZG9uJ3QgbmVlZCB0byB3b3JyeSBhYm91dCBoaXQgdGVzdGluZyBpZiBvbmNlIG9mIHRoZSBkaXNwbGF5T2JqZWN0cyBjaGlsZHJlbiBoYXMgYWxyZWFkeSBiZWVuIGhpdCFcbiAgICAgICAgaWYoaGl0VGVzdCAmJiAhaGl0KVxuICAgICAgICB7ICBcbiAgICAgICAgICAgIGlmKGRpc3BsYXlPYmplY3QuaGl0QXJlYSlcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBkaXNwbGF5T2JqZWN0LndvcmxkVHJhbnNmb3JtLmFwcGx5SW52ZXJzZShwb2ludCwgIHRoaXMuX3RlbXBQb2ludCk7XG4gICAgICAgICAgICAgICAgaGl0ID0gZGlzcGxheU9iamVjdC5oaXRBcmVhLmNvbnRhaW5zKCB0aGlzLl90ZW1wUG9pbnQueCwgdGhpcy5fdGVtcFBvaW50LnkgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYoZGlzcGxheU9iamVjdC5jb250YWluc1BvaW50KVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGhpdCA9IGRpc3BsYXlPYmplY3QuY29udGFpbnNQb2ludChwb2ludCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZihkaXNwbGF5T2JqZWN0LmludGVyYWN0aXZlKVxuICAgICAgICB7XG4gICAgICAgICAgICBmdW5jKGRpc3BsYXlPYmplY3QsIGhpdCk7IFxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGhpdDtcbiAgXG59O1xuXG5cbi8qKlxuICogSXMgY2FsbGVkIHdoZW4gdGhlIG1vdXNlIGJ1dHRvbiBpcyBwcmVzc2VkIGRvd24gb24gdGhlIHJlbmRlcmVyIGVsZW1lbnRcbiAqXG4gKiBAcGFyYW0gZXZlbnQge0V2ZW50fSBUaGUgRE9NIGV2ZW50IG9mIGEgbW91c2UgYnV0dG9uIGJlaW5nIHByZXNzZWQgZG93blxuICogQHByaXZhdGVcbiAqL1xuSW50ZXJhY3Rpb25NYW5hZ2VyLnByb3RvdHlwZS5vbk1vdXNlRG93biA9IGZ1bmN0aW9uIChldmVudClcbntcbiAgICB0aGlzLm1vdXNlLm9yaWdpbmFsRXZlbnQgPSBldmVudDtcbiAgICB0aGlzLmV2ZW50RGF0YS5kYXRhID0gdGhpcy5tb3VzZTtcbiAgICB0aGlzLmV2ZW50RGF0YS5zdG9wcGVkID0gZmFsc2U7XG5cbiAgICAvLyBVcGRhdGUgaW50ZXJuYWwgbW91c2UgcmVmZXJlbmNlXG4gICAgdGhpcy5tYXBQb3NpdGlvblRvUG9pbnQoIHRoaXMubW91c2UuZ2xvYmFsLCBldmVudC5jbGllbnRYLCBldmVudC5jbGllbnRZKTtcblxuICAgIGlmICh0aGlzLmF1dG9QcmV2ZW50RGVmYXVsdClcbiAgICB7XG4gICAgICAgIHRoaXMubW91c2Uub3JpZ2luYWxFdmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIH1cblxuICAgIHRoaXMucHJvY2Vzc0ludGVyYWN0aXZlKHRoaXMubW91c2UuZ2xvYmFsLCB0aGlzLnJlbmRlcmVyLl9sYXN0T2JqZWN0UmVuZGVyZWQsIHRoaXMucHJvY2Vzc01vdXNlRG93biwgdHJ1ZSApO1xufTtcblxuLyoqXG4gKiBQcm9jZXNzZXMgdGhlIHJlc3VsdCBvZiB0aGUgbW91c2UgZG93biBjaGVjayBhbmQgZGlzcGF0Y2hlcyB0aGUgZXZlbnQgaWYgbmVlZCBiZVxuICpcbiAqIEBwYXJhbSBkaXNwbGF5T2JqZWN0IHtQSVhJLkNvbnRhaW5lcnxQSVhJLlNwcml0ZXxQSVhJLmV4dHJhcy5UaWxpbmdTcHJpdGV9IFRoZSBkaXNwbGF5IG9iamVjdCB0aGF0IHdhcyB0ZXN0ZWRcbiAqIEBwYXJhbSBoaXQge2Jvb2xlYW59IHRoZSByZXN1bHQgb2YgdGhlIGhpdCB0ZXN0IG9uIHRoZSBkaXNwYXkgb2JqZWN0XG4gKiBAcHJpdmF0ZVxuICovXG5JbnRlcmFjdGlvbk1hbmFnZXIucHJvdG90eXBlLnByb2Nlc3NNb3VzZURvd24gPSBmdW5jdGlvbiAoIGRpc3BsYXlPYmplY3QsIGhpdCApXG57XG4gICAgdmFyIGUgPSB0aGlzLm1vdXNlLm9yaWdpbmFsRXZlbnQ7XG4gICAgXG4gICAgdmFyIGlzUmlnaHRCdXR0b24gPSBlLmJ1dHRvbiA9PT0gMiB8fCBlLndoaWNoID09PSAzO1xuXG4gICAgaWYoaGl0KVxuICAgIHtcbiAgICAgICAgZGlzcGxheU9iamVjdFsgaXNSaWdodEJ1dHRvbiA/ICdfaXNSaWdodERvd24nIDogJ19pc0xlZnREb3duJyBdID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50KCBkaXNwbGF5T2JqZWN0LCBpc1JpZ2h0QnV0dG9uID8gJ3JpZ2h0ZG93bicgOiAnbW91c2Vkb3duJywgdGhpcy5ldmVudERhdGEgKTtcbiAgICB9XG59O1xuXG5cblxuLyoqXG4gKiBJcyBjYWxsZWQgd2hlbiB0aGUgbW91c2UgYnV0dG9uIGlzIHJlbGVhc2VkIG9uIHRoZSByZW5kZXJlciBlbGVtZW50XG4gKlxuICogQHBhcmFtIGV2ZW50IHtFdmVudH0gVGhlIERPTSBldmVudCBvZiBhIG1vdXNlIGJ1dHRvbiBiZWluZyByZWxlYXNlZFxuICogQHByaXZhdGVcbiAqL1xuSW50ZXJhY3Rpb25NYW5hZ2VyLnByb3RvdHlwZS5vbk1vdXNlVXAgPSBmdW5jdGlvbiAoZXZlbnQpXG57XG4gICAgdGhpcy5tb3VzZS5vcmlnaW5hbEV2ZW50ID0gZXZlbnQ7XG4gICAgdGhpcy5ldmVudERhdGEuZGF0YSA9IHRoaXMubW91c2U7XG4gICAgdGhpcy5ldmVudERhdGEuc3RvcHBlZCA9IGZhbHNlO1xuXG4gICAgLy8gVXBkYXRlIGludGVybmFsIG1vdXNlIHJlZmVyZW5jZVxuICAgIHRoaXMubWFwUG9zaXRpb25Ub1BvaW50KCB0aGlzLm1vdXNlLmdsb2JhbCwgZXZlbnQuY2xpZW50WCwgZXZlbnQuY2xpZW50WSk7XG5cbiAgICB0aGlzLnByb2Nlc3NJbnRlcmFjdGl2ZSh0aGlzLm1vdXNlLmdsb2JhbCwgdGhpcy5yZW5kZXJlci5fbGFzdE9iamVjdFJlbmRlcmVkLCB0aGlzLnByb2Nlc3NNb3VzZVVwLCB0cnVlICk7XG59O1xuXG4vKipcbiAqIFByb2Nlc3NlcyB0aGUgcmVzdWx0IG9mIHRoZSBtb3VzZSB1cCBjaGVjayBhbmQgZGlzcGF0Y2hlcyB0aGUgZXZlbnQgaWYgbmVlZCBiZVxuICpcbiAqIEBwYXJhbSBkaXNwbGF5T2JqZWN0IHtQSVhJLkNvbnRhaW5lcnxQSVhJLlNwcml0ZXxQSVhJLmV4dHJhcy5UaWxpbmdTcHJpdGV9IFRoZSBkaXNwbGF5IG9iamVjdCB0aGF0IHdhcyB0ZXN0ZWRcbiAqIEBwYXJhbSBoaXQge2Jvb2xlYW59IHRoZSByZXN1bHQgb2YgdGhlIGhpdCB0ZXN0IG9uIHRoZSBkaXNwbGF5IG9iamVjdFxuICogQHByaXZhdGVcbiAqL1xuSW50ZXJhY3Rpb25NYW5hZ2VyLnByb3RvdHlwZS5wcm9jZXNzTW91c2VVcCA9IGZ1bmN0aW9uICggZGlzcGxheU9iamVjdCwgaGl0IClcbntcbiAgICB2YXIgZSA9IHRoaXMubW91c2Uub3JpZ2luYWxFdmVudDtcblxuICAgIHZhciBpc1JpZ2h0QnV0dG9uID0gZS5idXR0b24gPT09IDIgfHwgZS53aGljaCA9PT0gMztcbiAgICB2YXIgaXNEb3duID0gIGlzUmlnaHRCdXR0b24gPyAnX2lzUmlnaHREb3duJyA6ICdfaXNMZWZ0RG93bic7XG5cbiAgICBpZihoaXQpXG4gICAge1xuICAgICAgICB0aGlzLmRpc3BhdGNoRXZlbnQoIGRpc3BsYXlPYmplY3QsIGlzUmlnaHRCdXR0b24gPyAncmlnaHR1cCcgOiAnbW91c2V1cCcsIHRoaXMuZXZlbnREYXRhICk7XG5cbiAgICAgICAgaWYoIGRpc3BsYXlPYmplY3RbIGlzRG93biBdIClcbiAgICAgICAge1xuICAgICAgICAgICAgZGlzcGxheU9iamVjdFsgaXNEb3duIF0gPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudCggZGlzcGxheU9iamVjdCwgaXNSaWdodEJ1dHRvbiA/ICdyaWdodGNsaWNrJyA6ICdjbGljaycsIHRoaXMuZXZlbnREYXRhICk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgaWYoIGRpc3BsYXlPYmplY3RbIGlzRG93biBdIClcbiAgICAgICAge1xuICAgICAgICAgICAgZGlzcGxheU9iamVjdFsgaXNEb3duIF0gPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudCggZGlzcGxheU9iamVjdCwgaXNSaWdodEJ1dHRvbiA/ICdyaWdodHVwb3V0c2lkZScgOiAnbW91c2V1cG91dHNpZGUnLCB0aGlzLmV2ZW50RGF0YSApO1xuICAgICAgICB9XG4gICAgfVxufTtcblxuXG4vKipcbiAqIElzIGNhbGxlZCB3aGVuIHRoZSBtb3VzZSBtb3ZlcyBhY3Jvc3MgdGhlIHJlbmRlcmVyIGVsZW1lbnRcbiAqXG4gKiBAcGFyYW0gZXZlbnQge0V2ZW50fSBUaGUgRE9NIGV2ZW50IG9mIHRoZSBtb3VzZSBtb3ZpbmdcbiAqIEBwcml2YXRlXG4gKi9cbkludGVyYWN0aW9uTWFuYWdlci5wcm90b3R5cGUub25Nb3VzZU1vdmUgPSBmdW5jdGlvbiAoZXZlbnQpXG57XG4gICAgdGhpcy5tb3VzZS5vcmlnaW5hbEV2ZW50ID0gZXZlbnQ7XG4gICAgdGhpcy5ldmVudERhdGEuZGF0YSA9IHRoaXMubW91c2U7XG4gICAgdGhpcy5ldmVudERhdGEuc3RvcHBlZCA9IGZhbHNlO1xuXG4gICAgdGhpcy5tYXBQb3NpdGlvblRvUG9pbnQoIHRoaXMubW91c2UuZ2xvYmFsLCBldmVudC5jbGllbnRYLCBldmVudC5jbGllbnRZKTtcblxuICAgIHRoaXMuZGlkTW92ZSA9IHRydWU7XG5cbiAgICB0aGlzLmN1cnNvciA9ICdpbmhlcml0JztcblxuICAgIHRoaXMucHJvY2Vzc0ludGVyYWN0aXZlKHRoaXMubW91c2UuZ2xvYmFsLCB0aGlzLnJlbmRlcmVyLl9sYXN0T2JqZWN0UmVuZGVyZWQsIHRoaXMucHJvY2Vzc01vdXNlTW92ZSwgdHJ1ZSApO1xuXG4gICAgaWYgKHRoaXMuY3VycmVudEN1cnNvclN0eWxlICE9PSB0aGlzLmN1cnNvcilcbiAgICB7XG4gICAgICAgIHRoaXMuY3VycmVudEN1cnNvclN0eWxlID0gdGhpcy5jdXJzb3I7XG4gICAgICAgIHRoaXMuaW50ZXJhY3Rpb25ET01FbGVtZW50LnN0eWxlLmN1cnNvciA9IHRoaXMuY3Vyc29yO1xuICAgIH1cblxuICAgIC8vVE9ETyBCVUcgZm9yIHBhcmVudHMgaW5lcmFjdGl2ZSBvYmplY3QgKGJvcmRlciBvcmRlciBpc3N1ZSlcbn07XG5cbi8qKlxuICogUHJvY2Vzc2VzIHRoZSByZXN1bHQgb2YgdGhlIG1vdXNlIG1vdmUgY2hlY2sgYW5kIGRpc3BhdGNoZXMgdGhlIGV2ZW50IGlmIG5lZWQgYmVcbiAqXG4gKiBAcGFyYW0gZGlzcGxheU9iamVjdCB7UElYSS5Db250YWluZXJ8UElYSS5TcHJpdGV8UElYSS5leHRyYXMuVGlsaW5nU3ByaXRlfSBUaGUgZGlzcGxheSBvYmplY3QgdGhhdCB3YXMgdGVzdGVkXG4gKiBAcGFyYW0gaGl0IHtib29sZWFufSB0aGUgcmVzdWx0IG9mIHRoZSBoaXQgdGVzdCBvbiB0aGUgZGlzcGxheSBvYmplY3RcbiAqIEBwcml2YXRlXG4gKi9cbkludGVyYWN0aW9uTWFuYWdlci5wcm90b3R5cGUucHJvY2Vzc01vdXNlTW92ZSA9IGZ1bmN0aW9uICggZGlzcGxheU9iamVjdCwgaGl0IClcbntcbiAgICB0aGlzLmRpc3BhdGNoRXZlbnQoIGRpc3BsYXlPYmplY3QsICdtb3VzZW1vdmUnLCB0aGlzLmV2ZW50RGF0YSk7XG4gICAgdGhpcy5wcm9jZXNzTW91c2VPdmVyT3V0KGRpc3BsYXlPYmplY3QsIGhpdCk7XG59O1xuXG5cbi8qKlxuICogSXMgY2FsbGVkIHdoZW4gdGhlIG1vdXNlIGlzIG1vdmVkIG91dCBvZiB0aGUgcmVuZGVyZXIgZWxlbWVudFxuICpcbiAqIEBwYXJhbSBldmVudCB7RXZlbnR9IFRoZSBET00gZXZlbnQgb2YgYSBtb3VzZSBiZWluZyBtb3ZlZCBvdXRcbiAqIEBwcml2YXRlXG4gKi9cbkludGVyYWN0aW9uTWFuYWdlci5wcm90b3R5cGUub25Nb3VzZU91dCA9IGZ1bmN0aW9uIChldmVudClcbntcbiAgICB0aGlzLm1vdXNlLm9yaWdpbmFsRXZlbnQgPSBldmVudDtcbiAgICB0aGlzLmV2ZW50RGF0YS5zdG9wcGVkID0gZmFsc2U7XG5cbiAgICAvLyBVcGRhdGUgaW50ZXJuYWwgbW91c2UgcmVmZXJlbmNlXG4gICAgdGhpcy5tYXBQb3NpdGlvblRvUG9pbnQoIHRoaXMubW91c2UuZ2xvYmFsLCBldmVudC5jbGllbnRYLCBldmVudC5jbGllbnRZKTtcblxuICAgIHRoaXMuaW50ZXJhY3Rpb25ET01FbGVtZW50LnN0eWxlLmN1cnNvciA9ICdpbmhlcml0JztcblxuICAgIC8vIFRPRE8gb3B0aW1pemUgYnkgbm90IGNoZWNrIEVWRVJZIFRJTUUhIG1heWJlIGhhbGYgYXMgb2Z0ZW4/IC8vXG4gICAgdGhpcy5tYXBQb3NpdGlvblRvUG9pbnQoIHRoaXMubW91c2UuZ2xvYmFsLCBldmVudC5jbGllbnRYLCBldmVudC5jbGllbnRZICk7XG5cbiAgICB0aGlzLnByb2Nlc3NJbnRlcmFjdGl2ZSggdGhpcy5tb3VzZS5nbG9iYWwsIHRoaXMucmVuZGVyZXIuX2xhc3RPYmplY3RSZW5kZXJlZCwgdGhpcy5wcm9jZXNzTW91c2VPdmVyT3V0LCBmYWxzZSApO1xufTtcblxuLyoqXG4gKiBQcm9jZXNzZXMgdGhlIHJlc3VsdCBvZiB0aGUgbW91c2Ugb3Zlci9vdXQgY2hlY2sgYW5kIGRpc3BhdGNoZXMgdGhlIGV2ZW50IGlmIG5lZWQgYmVcbiAqXG4gKiBAcGFyYW0gZGlzcGxheU9iamVjdCB7UElYSS5Db250YWluZXJ8UElYSS5TcHJpdGV8UElYSS5leHRyYXMuVGlsaW5nU3ByaXRlfSBUaGUgZGlzcGxheSBvYmplY3QgdGhhdCB3YXMgdGVzdGVkXG4gKiBAcGFyYW0gaGl0IHtib29sZWFufSB0aGUgcmVzdWx0IG9mIHRoZSBoaXQgdGVzdCBvbiB0aGUgZGlzcGxheSBvYmplY3RcbiAqIEBwcml2YXRlXG4gKi9cbkludGVyYWN0aW9uTWFuYWdlci5wcm90b3R5cGUucHJvY2Vzc01vdXNlT3Zlck91dCA9IGZ1bmN0aW9uICggZGlzcGxheU9iamVjdCwgaGl0IClcbntcbiAgICBpZihoaXQpXG4gICAge1xuICAgICAgICBpZighZGlzcGxheU9iamVjdC5fb3ZlcilcbiAgICAgICAge1xuICAgICAgICAgICAgZGlzcGxheU9iamVjdC5fb3ZlciA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLmRpc3BhdGNoRXZlbnQoIGRpc3BsYXlPYmplY3QsICdtb3VzZW92ZXInLCB0aGlzLmV2ZW50RGF0YSApO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGRpc3BsYXlPYmplY3QuYnV0dG9uTW9kZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5jdXJzb3IgPSBkaXNwbGF5T2JqZWN0LmRlZmF1bHRDdXJzb3I7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgaWYoZGlzcGxheU9iamVjdC5fb3ZlcilcbiAgICAgICAge1xuICAgICAgICAgICAgZGlzcGxheU9iamVjdC5fb3ZlciA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50KCBkaXNwbGF5T2JqZWN0LCAnbW91c2VvdXQnLCB0aGlzLmV2ZW50RGF0YSk7XG4gICAgICAgIH1cbiAgICB9XG59O1xuXG5cbi8qKlxuICogSXMgY2FsbGVkIHdoZW4gYSB0b3VjaCBpcyBzdGFydGVkIG9uIHRoZSByZW5kZXJlciBlbGVtZW50XG4gKlxuICogQHBhcmFtIGV2ZW50IHtFdmVudH0gVGhlIERPTSBldmVudCBvZiBhIHRvdWNoIHN0YXJ0aW5nIG9uIHRoZSByZW5kZXJlciB2aWV3XG4gKiBAcHJpdmF0ZVxuICovXG5JbnRlcmFjdGlvbk1hbmFnZXIucHJvdG90eXBlLm9uVG91Y2hTdGFydCA9IGZ1bmN0aW9uIChldmVudClcbntcbiAgICBpZiAodGhpcy5hdXRvUHJldmVudERlZmF1bHQpXG4gICAge1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIH1cblxuICAgIHZhciBjaGFuZ2VkVG91Y2hlcyA9IGV2ZW50LmNoYW5nZWRUb3VjaGVzO1xuICAgIHZhciBjTGVuZ3RoID0gY2hhbmdlZFRvdWNoZXMubGVuZ3RoO1xuXG4gICAgZm9yICh2YXIgaT0wOyBpIDwgY0xlbmd0aDsgaSsrKVxuICAgIHtcbiAgICAgICAgdmFyIHRvdWNoRXZlbnQgPSBjaGFuZ2VkVG91Y2hlc1tpXTtcbiAgICAgICAgLy9UT0RPIFBPT0xcbiAgICAgICAgdmFyIHRvdWNoRGF0YSA9IHRoaXMuZ2V0VG91Y2hEYXRhKCB0b3VjaEV2ZW50ICk7XG5cbiAgICAgICAgdG91Y2hEYXRhLm9yaWdpbmFsRXZlbnQgPSBldmVudDtcblxuICAgICAgICB0aGlzLmV2ZW50RGF0YS5kYXRhID0gdG91Y2hEYXRhO1xuICAgICAgICB0aGlzLmV2ZW50RGF0YS5zdG9wcGVkID0gZmFsc2U7XG5cbiAgICAgICAgdGhpcy5wcm9jZXNzSW50ZXJhY3RpdmUoIHRvdWNoRGF0YS5nbG9iYWwsIHRoaXMucmVuZGVyZXIuX2xhc3RPYmplY3RSZW5kZXJlZCwgdGhpcy5wcm9jZXNzVG91Y2hTdGFydCwgdHJ1ZSApO1xuXG4gICAgICAgIHRoaXMucmV0dXJuVG91Y2hEYXRhKCB0b3VjaERhdGEgKTtcbiAgICB9XG59O1xuXG4vKipcbiAqIFByb2Nlc3NlcyB0aGUgcmVzdWx0IG9mIGEgdG91Y2ggY2hlY2sgYW5kIGRpc3BhdGNoZXMgdGhlIGV2ZW50IGlmIG5lZWQgYmVcbiAqXG4gKiBAcGFyYW0gZGlzcGxheU9iamVjdCB7UElYSS5Db250YWluZXJ8UElYSS5TcHJpdGV8UElYSS5leHRyYXMuVGlsaW5nU3ByaXRlfSBUaGUgZGlzcGxheSBvYmplY3QgdGhhdCB3YXMgdGVzdGVkXG4gKiBAcGFyYW0gaGl0IHtib29sZWFufSB0aGUgcmVzdWx0IG9mIHRoZSBoaXQgdGVzdCBvbiB0aGUgZGlzcGxheSBvYmplY3RcbiAqIEBwcml2YXRlXG4gKi9cbkludGVyYWN0aW9uTWFuYWdlci5wcm90b3R5cGUucHJvY2Vzc1RvdWNoU3RhcnQgPSBmdW5jdGlvbiAoIGRpc3BsYXlPYmplY3QsIGhpdCApXG57XG4gICAgaWYoaGl0KVxuICAgIHtcbiAgICAgICAgZGlzcGxheU9iamVjdC5fdG91Y2hEb3duID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50KCBkaXNwbGF5T2JqZWN0LCAndG91Y2hzdGFydCcsIHRoaXMuZXZlbnREYXRhICk7XG4gICAgfVxufTtcblxuXG4vKipcbiAqIElzIGNhbGxlZCB3aGVuIGEgdG91Y2ggZW5kcyBvbiB0aGUgcmVuZGVyZXIgZWxlbWVudFxuICpcbiAqIEBwYXJhbSBldmVudCB7RXZlbnR9IFRoZSBET00gZXZlbnQgb2YgYSB0b3VjaCBlbmRpbmcgb24gdGhlIHJlbmRlcmVyIHZpZXdcbiAqL1xuSW50ZXJhY3Rpb25NYW5hZ2VyLnByb3RvdHlwZS5vblRvdWNoRW5kID0gZnVuY3Rpb24gKGV2ZW50KVxue1xuICAgIGlmICh0aGlzLmF1dG9QcmV2ZW50RGVmYXVsdClcbiAgICB7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgfVxuXG4gICAgdmFyIGNoYW5nZWRUb3VjaGVzID0gZXZlbnQuY2hhbmdlZFRvdWNoZXM7XG4gICAgdmFyIGNMZW5ndGggPSBjaGFuZ2VkVG91Y2hlcy5sZW5ndGg7XG5cbiAgICBmb3IgKHZhciBpPTA7IGkgPCBjTGVuZ3RoOyBpKyspXG4gICAge1xuICAgICAgICB2YXIgdG91Y2hFdmVudCA9IGNoYW5nZWRUb3VjaGVzW2ldO1xuXG4gICAgICAgIHZhciB0b3VjaERhdGEgPSB0aGlzLmdldFRvdWNoRGF0YSggdG91Y2hFdmVudCApO1xuXG4gICAgICAgIHRvdWNoRGF0YS5vcmlnaW5hbEV2ZW50ID0gZXZlbnQ7XG5cbiAgICAgICAgLy9UT0RPIHRoaXMgc2hvdWxkIGJlIHBhc3NlZCBhbG9uZy4uIG5vIHNldFxuICAgICAgICB0aGlzLmV2ZW50RGF0YS5kYXRhID0gdG91Y2hEYXRhO1xuICAgICAgICB0aGlzLmV2ZW50RGF0YS5zdG9wcGVkID0gZmFsc2U7XG5cblxuICAgICAgICB0aGlzLnByb2Nlc3NJbnRlcmFjdGl2ZSggdG91Y2hEYXRhLmdsb2JhbCwgdGhpcy5yZW5kZXJlci5fbGFzdE9iamVjdFJlbmRlcmVkLCB0aGlzLnByb2Nlc3NUb3VjaEVuZCwgdHJ1ZSApO1xuXG4gICAgICAgIHRoaXMucmV0dXJuVG91Y2hEYXRhKCB0b3VjaERhdGEgKTtcbiAgICB9XG59O1xuXG4vKipcbiAqIFByb2Nlc3NlcyB0aGUgcmVzdWx0IG9mIHRoZSBlbmQgb2YgYSB0b3VjaCBhbmQgZGlzcGF0Y2hlcyB0aGUgZXZlbnQgaWYgbmVlZCBiZVxuICpcbiAqIEBwYXJhbSBkaXNwbGF5T2JqZWN0IHtQSVhJLkNvbnRhaW5lcnxQSVhJLlNwcml0ZXxQSVhJLmV4dHJhcy5UaWxpbmdTcHJpdGV9IFRoZSBkaXNwbGF5IG9iamVjdCB0aGF0IHdhcyB0ZXN0ZWRcbiAqIEBwYXJhbSBoaXQge2Jvb2xlYW59IHRoZSByZXN1bHQgb2YgdGhlIGhpdCB0ZXN0IG9uIHRoZSBkaXNwbGF5IG9iamVjdFxuICogQHByaXZhdGVcbiAqL1xuSW50ZXJhY3Rpb25NYW5hZ2VyLnByb3RvdHlwZS5wcm9jZXNzVG91Y2hFbmQgPSBmdW5jdGlvbiAoIGRpc3BsYXlPYmplY3QsIGhpdCApXG57XG4gICAgaWYoaGl0KVxuICAgIHtcbiAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50KCBkaXNwbGF5T2JqZWN0LCAndG91Y2hlbmQnLCB0aGlzLmV2ZW50RGF0YSApO1xuXG4gICAgICAgIGlmKCBkaXNwbGF5T2JqZWN0Ll90b3VjaERvd24gKVxuICAgICAgICB7XG4gICAgICAgICAgICBkaXNwbGF5T2JqZWN0Ll90b3VjaERvd24gPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudCggZGlzcGxheU9iamVjdCwgJ3RhcCcsIHRoaXMuZXZlbnREYXRhICk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgaWYoIGRpc3BsYXlPYmplY3QuX3RvdWNoRG93biApXG4gICAgICAgIHtcbiAgICAgICAgICAgIGRpc3BsYXlPYmplY3QuX3RvdWNoRG93biA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50KCBkaXNwbGF5T2JqZWN0LCAndG91Y2hlbmRvdXRzaWRlJywgdGhpcy5ldmVudERhdGEgKTtcbiAgICAgICAgfVxuICAgIH1cbn07XG5cbi8qKlxuICogSXMgY2FsbGVkIHdoZW4gYSB0b3VjaCBpcyBtb3ZlZCBhY3Jvc3MgdGhlIHJlbmRlcmVyIGVsZW1lbnRcbiAqXG4gKiBAcGFyYW0gZXZlbnQge0V2ZW50fSBUaGUgRE9NIGV2ZW50IG9mIGEgdG91Y2ggbW92aW5nIGFjcm9zcyB0aGUgcmVuZGVyZXIgdmlld1xuICogQHByaXZhdGVcbiAqL1xuSW50ZXJhY3Rpb25NYW5hZ2VyLnByb3RvdHlwZS5vblRvdWNoTW92ZSA9IGZ1bmN0aW9uIChldmVudClcbntcbiAgICBpZiAodGhpcy5hdXRvUHJldmVudERlZmF1bHQpXG4gICAge1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIH1cblxuICAgIHZhciBjaGFuZ2VkVG91Y2hlcyA9IGV2ZW50LmNoYW5nZWRUb3VjaGVzO1xuICAgIHZhciBjTGVuZ3RoID0gY2hhbmdlZFRvdWNoZXMubGVuZ3RoO1xuXG4gICAgZm9yICh2YXIgaT0wOyBpIDwgY0xlbmd0aDsgaSsrKVxuICAgIHtcbiAgICAgICAgdmFyIHRvdWNoRXZlbnQgPSBjaGFuZ2VkVG91Y2hlc1tpXTtcblxuICAgICAgICB2YXIgdG91Y2hEYXRhID0gdGhpcy5nZXRUb3VjaERhdGEoIHRvdWNoRXZlbnQgKTtcblxuICAgICAgICB0b3VjaERhdGEub3JpZ2luYWxFdmVudCA9IGV2ZW50O1xuXG4gICAgICAgIHRoaXMuZXZlbnREYXRhLmRhdGEgPSB0b3VjaERhdGE7XG4gICAgICAgIHRoaXMuZXZlbnREYXRhLnN0b3BwZWQgPSBmYWxzZTtcblxuICAgICAgICB0aGlzLnByb2Nlc3NJbnRlcmFjdGl2ZSggdG91Y2hEYXRhLmdsb2JhbCwgdGhpcy5yZW5kZXJlci5fbGFzdE9iamVjdFJlbmRlcmVkLCB0aGlzLnByb2Nlc3NUb3VjaE1vdmUsIHRydWUgKTtcblxuICAgICAgICB0aGlzLnJldHVyblRvdWNoRGF0YSggdG91Y2hEYXRhICk7XG4gICAgfVxufTtcblxuLyoqXG4gKiBQcm9jZXNzZXMgdGhlIHJlc3VsdCBvZiBhIHRvdWNoIG1vdmUgY2hlY2sgYW5kIGRpc3BhdGNoZXMgdGhlIGV2ZW50IGlmIG5lZWQgYmVcbiAqXG4gKiBAcGFyYW0gZGlzcGxheU9iamVjdCB7UElYSS5Db250YWluZXJ8UElYSS5TcHJpdGV8UElYSS5leHRyYXMuVGlsaW5nU3ByaXRlfSBUaGUgZGlzcGxheSBvYmplY3QgdGhhdCB3YXMgdGVzdGVkXG4gKiBAcGFyYW0gaGl0IHtib29sZWFufSB0aGUgcmVzdWx0IG9mIHRoZSBoaXQgdGVzdCBvbiB0aGUgZGlzcGxheSBvYmplY3RcbiAqIEBwcml2YXRlXG4gKi9cbkludGVyYWN0aW9uTWFuYWdlci5wcm90b3R5cGUucHJvY2Vzc1RvdWNoTW92ZSA9IGZ1bmN0aW9uICggZGlzcGxheU9iamVjdCwgaGl0IClcbntcbiAgICBoaXQgPSBoaXQ7XG4gICAgdGhpcy5kaXNwYXRjaEV2ZW50KCBkaXNwbGF5T2JqZWN0LCAndG91Y2htb3ZlJywgdGhpcy5ldmVudERhdGEpO1xufTtcblxuLyoqXG4gKiBHcmFicyBhbiBpbnRlcmFjdGlvbiBkYXRhIG9iamVjdCBmcm9tIHRoZSBpbnRlcm5hbCBwb29sXG4gKlxuICogQHBhcmFtIHRvdWNoRXZlbnQge0V2ZW50RGF0YX0gVGhlIHRvdWNoIGV2ZW50IHdlIG5lZWQgdG8gcGFpciB3aXRoIGFuIGludGVyYWN0aW9uRGF0YSBvYmplY3RcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5JbnRlcmFjdGlvbk1hbmFnZXIucHJvdG90eXBlLmdldFRvdWNoRGF0YSA9IGZ1bmN0aW9uICh0b3VjaEV2ZW50KVxue1xuICAgIHZhciB0b3VjaERhdGEgPSB0aGlzLmludGVyYWN0aXZlRGF0YVBvb2wucG9wKCk7XG5cbiAgICBpZighdG91Y2hEYXRhKVxuICAgIHtcbiAgICAgICAgdG91Y2hEYXRhID0gbmV3IEludGVyYWN0aW9uRGF0YSgpO1xuICAgIH1cblxuICAgIHRvdWNoRGF0YS5pZGVudGlmaWVyID0gdG91Y2hFdmVudC5pZGVudGlmaWVyO1xuICAgIHRoaXMubWFwUG9zaXRpb25Ub1BvaW50KCB0b3VjaERhdGEuZ2xvYmFsLCB0b3VjaEV2ZW50LmNsaWVudFgsIHRvdWNoRXZlbnQuY2xpZW50WSApO1xuXG4gICAgaWYobmF2aWdhdG9yLmlzQ29jb29uSlMpXG4gICAge1xuICAgICAgICB0b3VjaERhdGEuZ2xvYmFsLnggPSB0b3VjaERhdGEuZ2xvYmFsLnggLyB0aGlzLnJlc29sdXRpb247XG4gICAgICAgIHRvdWNoRGF0YS5nbG9iYWwueSA9IHRvdWNoRGF0YS5nbG9iYWwueSAvIHRoaXMucmVzb2x1dGlvbjtcbiAgICB9XG5cbiAgICB0b3VjaEV2ZW50Lmdsb2JhbFggPSB0b3VjaERhdGEuZ2xvYmFsLng7XG4gICAgdG91Y2hFdmVudC5nbG9iYWxZID0gdG91Y2hEYXRhLmdsb2JhbC55O1xuXG4gICAgcmV0dXJuIHRvdWNoRGF0YTtcbn07XG5cbi8qKlxuICogUmV0dXJucyBhbiBpbnRlcmFjdGlvbiBkYXRhIG9iamVjdCB0byB0aGUgaW50ZXJuYWwgcG9vbFxuICpcbiAqIEBwYXJhbSB0b3VjaERhdGEge1BJWEkuaW50ZXJhY3Rpb24uSW50ZXJhY3Rpb25EYXRhfSBUaGUgdG91Y2ggZGF0YSBvYmplY3Qgd2Ugd2FudCB0byByZXR1cm4gdG8gdGhlIHBvb2xcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5JbnRlcmFjdGlvbk1hbmFnZXIucHJvdG90eXBlLnJldHVyblRvdWNoRGF0YSA9IGZ1bmN0aW9uICggdG91Y2hEYXRhIClcbntcbiAgICB0aGlzLmludGVyYWN0aXZlRGF0YVBvb2wucHVzaCggdG91Y2hEYXRhICk7XG59O1xuXG4vKipcbiAqIERlc3Ryb3lzIHRoZSBpbnRlcmFjdGlvbiBtYW5hZ2VyXG4gKlxuICovXG5JbnRlcmFjdGlvbk1hbmFnZXIucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoKSB7XG4gICAgdGhpcy5yZW1vdmVFdmVudHMoKTtcblxuICAgIHRoaXMucmVuZGVyZXIgPSBudWxsO1xuXG4gICAgdGhpcy5tb3VzZSA9IG51bGw7XG5cbiAgICB0aGlzLmV2ZW50RGF0YSA9IG51bGw7XG5cbiAgICB0aGlzLmludGVyYWN0aXZlRGF0YVBvb2wgPSBudWxsO1xuXG4gICAgdGhpcy5pbnRlcmFjdGlvbkRPTUVsZW1lbnQgPSBudWxsO1xuXG4gICAgdGhpcy5vbk1vdXNlVXAgPSBudWxsO1xuICAgIHRoaXMucHJvY2Vzc01vdXNlVXAgPSBudWxsO1xuXG5cbiAgICB0aGlzLm9uTW91c2VEb3duID0gbnVsbDtcbiAgICB0aGlzLnByb2Nlc3NNb3VzZURvd24gPSBudWxsO1xuXG4gICAgdGhpcy5vbk1vdXNlTW92ZSA9IG51bGw7XG4gICAgdGhpcy5wcm9jZXNzTW91c2VNb3ZlID0gbnVsbDtcblxuICAgIHRoaXMub25Nb3VzZU91dCA9IG51bGw7XG4gICAgdGhpcy5wcm9jZXNzTW91c2VPdmVyT3V0ID0gbnVsbDtcblxuXG4gICAgdGhpcy5vblRvdWNoU3RhcnQgPSBudWxsO1xuICAgIHRoaXMucHJvY2Vzc1RvdWNoU3RhcnQgPSBudWxsO1xuXG4gICAgdGhpcy5vblRvdWNoRW5kID0gbnVsbDtcbiAgICB0aGlzLnByb2Nlc3NUb3VjaEVuZCA9IG51bGw7XG5cbiAgICB0aGlzLm9uVG91Y2hNb3ZlID0gbnVsbDtcbiAgICB0aGlzLnByb2Nlc3NUb3VjaE1vdmUgPSBudWxsO1xuXG4gICAgdGhpcy5fdGVtcFBvaW50ID0gbnVsbDtcbn07XG5cbmNvcmUuV2ViR0xSZW5kZXJlci5yZWdpc3RlclBsdWdpbignaW50ZXJhY3Rpb24nLCBJbnRlcmFjdGlvbk1hbmFnZXIpO1xuY29yZS5DYW52YXNSZW5kZXJlci5yZWdpc3RlclBsdWdpbignaW50ZXJhY3Rpb24nLCBJbnRlcmFjdGlvbk1hbmFnZXIpO1xuIiwiLyoqXG4gKiBAZmlsZSAgICAgICAgTWFpbiBleHBvcnQgb2YgdGhlIFBJWEkgaW50ZXJhY3Rpb25zIGxpYnJhcnlcbiAqIEBhdXRob3IgICAgICBNYXQgR3JvdmVzIDxtYXRAZ29vZGJveWRpZ2l0YWwuY29tPlxuICogQGNvcHlyaWdodCAgIDIwMTMtMjAxNSBHb29kQm95RGlnaXRhbFxuICogQGxpY2Vuc2UgICAgIHtAbGluayBodHRwczovL2dpdGh1Yi5jb20vcGl4aWpzL3BpeGkuanMvYmxvYi9tYXN0ZXIvTElDRU5TRXxNSVQgTGljZW5zZX1cbiAqL1xuXG4vKipcbiAqIEBuYW1lc3BhY2UgUElYSS5pbnRlcmFjdGlvblxuICovXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgICBJbnRlcmFjdGlvbkRhdGE6ICAgIHJlcXVpcmUoJy4vSW50ZXJhY3Rpb25EYXRhJyksXG4gICAgSW50ZXJhY3Rpb25NYW5hZ2VyOiByZXF1aXJlKCcuL0ludGVyYWN0aW9uTWFuYWdlcicpLFxuICAgIGludGVyYWN0aXZlVGFyZ2V0OiAgcmVxdWlyZSgnLi9pbnRlcmFjdGl2ZVRhcmdldCcpXG59O1xuIiwiLyoqXG4gKiBEZWZhdWx0IHByb3BlcnR5IHZhbHVlcyBvZiBpbnRlcmFjdGl2ZSBvYmplY3RzXG4gKiB1c2VkIGJ5IHtAbGluayBQSVhJLmludGVyYWN0aW9uLkludGVyYWN0aW9uTWFuYWdlcn0uXG4gKlxuICogQG1peGluXG4gKiBAbWVtYmVyb2YgUElYSS5pbnRlcmFjdGlvblxuICogQGV4YW1wbGVcbiAqICAgICAgZnVuY3Rpb24gTXlPYmplY3QoKSB7fVxuICpcbiAqICAgICAgT2JqZWN0LmFzc2lnbihcbiAqICAgICAgICAgIE15T2JqZWN0LnByb3RvdHlwZSxcbiAqICAgICAgICAgIFBJWEkuaW50ZXJhY3Rpb24uaW50ZXJhY3RpdmVUYXJnZXRcbiAqICAgICAgKTtcbiAqL1xudmFyIGludGVyYWN0aXZlVGFyZ2V0ID0ge1xuICAgIC8qKlxuICAgICAqIEB0b2RvIE5lZWRzIGRvY3MuXG4gICAgICovXG4gICAgaW50ZXJhY3RpdmU6IGZhbHNlLFxuICAgIC8qKlxuICAgICAqIEB0b2RvIE5lZWRzIGRvY3MuXG4gICAgICovXG4gICAgYnV0dG9uTW9kZTogZmFsc2UsXG4gICAgLyoqXG4gICAgICogQHRvZG8gTmVlZHMgZG9jcy5cbiAgICAgKi9cbiAgICBpbnRlcmFjdGl2ZUNoaWxkcmVuOiB0cnVlLFxuICAgIC8qKlxuICAgICAqIEB0b2RvIE5lZWRzIGRvY3MuXG4gICAgICovXG4gICAgZGVmYXVsdEN1cnNvcjogJ3BvaW50ZXInLFxuXG4gICAgLy8gc29tZSBpbnRlcm5hbCBjaGVja3MuLlxuXG4gICAgLyoqXG4gICAgICogQHRvZG8gTmVlZHMgZG9jcy5cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIF9vdmVyOiBmYWxzZSxcbiAgICAvKipcbiAgICAgKiBAdG9kbyBOZWVkcyBkb2NzLlxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgX3RvdWNoRG93bjogZmFsc2Vcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gaW50ZXJhY3RpdmVUYXJnZXQ7XG4iLCJ2YXIgUmVzb3VyY2UgPSByZXF1aXJlKCdyZXNvdXJjZS1sb2FkZXInKS5SZXNvdXJjZSxcbiAgICBjb3JlID0gcmVxdWlyZSgnLi4vY29yZScpLFxuICAgIGV4dHJhcyA9IHJlcXVpcmUoJy4uL2V4dHJhcycpLFxuICAgIHBhdGggPSByZXF1aXJlKCdwYXRoJyk7XG5cblxuZnVuY3Rpb24gcGFyc2UocmVzb3VyY2UsIHRleHR1cmUpIHtcbiAgICB2YXIgZGF0YSA9IHt9O1xuICAgIHZhciBpbmZvID0gcmVzb3VyY2UuZGF0YS5nZXRFbGVtZW50c0J5VGFnTmFtZSgnaW5mbycpWzBdO1xuICAgIHZhciBjb21tb24gPSByZXNvdXJjZS5kYXRhLmdldEVsZW1lbnRzQnlUYWdOYW1lKCdjb21tb24nKVswXTtcblxuICAgIGRhdGEuZm9udCA9IGluZm8uZ2V0QXR0cmlidXRlKCdmYWNlJyk7XG4gICAgZGF0YS5zaXplID0gcGFyc2VJbnQoaW5mby5nZXRBdHRyaWJ1dGUoJ3NpemUnKSwgMTApO1xuICAgIGRhdGEubGluZUhlaWdodCA9IHBhcnNlSW50KGNvbW1vbi5nZXRBdHRyaWJ1dGUoJ2xpbmVIZWlnaHQnKSwgMTApO1xuICAgIGRhdGEuY2hhcnMgPSB7fTtcblxuICAgIC8vcGFyc2UgbGV0dGVyc1xuICAgIHZhciBsZXR0ZXJzID0gcmVzb3VyY2UuZGF0YS5nZXRFbGVtZW50c0J5VGFnTmFtZSgnY2hhcicpO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZXR0ZXJzLmxlbmd0aDsgaSsrKVxuICAgIHtcbiAgICAgICAgdmFyIGNoYXJDb2RlID0gcGFyc2VJbnQobGV0dGVyc1tpXS5nZXRBdHRyaWJ1dGUoJ2lkJyksIDEwKTtcblxuICAgICAgICB2YXIgdGV4dHVyZVJlY3QgPSBuZXcgY29yZS5SZWN0YW5nbGUoXG4gICAgICAgICAgICBwYXJzZUludChsZXR0ZXJzW2ldLmdldEF0dHJpYnV0ZSgneCcpLCAxMCkgKyB0ZXh0dXJlLmZyYW1lLngsXG4gICAgICAgICAgICBwYXJzZUludChsZXR0ZXJzW2ldLmdldEF0dHJpYnV0ZSgneScpLCAxMCkgKyB0ZXh0dXJlLmZyYW1lLnksXG4gICAgICAgICAgICBwYXJzZUludChsZXR0ZXJzW2ldLmdldEF0dHJpYnV0ZSgnd2lkdGgnKSwgMTApLFxuICAgICAgICAgICAgcGFyc2VJbnQobGV0dGVyc1tpXS5nZXRBdHRyaWJ1dGUoJ2hlaWdodCcpLCAxMClcbiAgICAgICAgKTtcblxuICAgICAgICBkYXRhLmNoYXJzW2NoYXJDb2RlXSA9IHtcbiAgICAgICAgICAgIHhPZmZzZXQ6IHBhcnNlSW50KGxldHRlcnNbaV0uZ2V0QXR0cmlidXRlKCd4b2Zmc2V0JyksIDEwKSxcbiAgICAgICAgICAgIHlPZmZzZXQ6IHBhcnNlSW50KGxldHRlcnNbaV0uZ2V0QXR0cmlidXRlKCd5b2Zmc2V0JyksIDEwKSxcbiAgICAgICAgICAgIHhBZHZhbmNlOiBwYXJzZUludChsZXR0ZXJzW2ldLmdldEF0dHJpYnV0ZSgneGFkdmFuY2UnKSwgMTApLFxuICAgICAgICAgICAga2VybmluZzoge30sXG4gICAgICAgICAgICB0ZXh0dXJlOiBuZXcgY29yZS5UZXh0dXJlKHRleHR1cmUuYmFzZVRleHR1cmUsIHRleHR1cmVSZWN0KVxuXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgLy9wYXJzZSBrZXJuaW5nc1xuICAgIHZhciBrZXJuaW5ncyA9IHJlc291cmNlLmRhdGEuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2tlcm5pbmcnKTtcbiAgICBmb3IgKGkgPSAwOyBpIDwga2VybmluZ3MubGVuZ3RoOyBpKyspXG4gICAge1xuICAgICAgICB2YXIgZmlyc3QgPSBwYXJzZUludChrZXJuaW5nc1tpXS5nZXRBdHRyaWJ1dGUoJ2ZpcnN0JyksIDEwKTtcbiAgICAgICAgdmFyIHNlY29uZCA9IHBhcnNlSW50KGtlcm5pbmdzW2ldLmdldEF0dHJpYnV0ZSgnc2Vjb25kJyksIDEwKTtcbiAgICAgICAgdmFyIGFtb3VudCA9IHBhcnNlSW50KGtlcm5pbmdzW2ldLmdldEF0dHJpYnV0ZSgnYW1vdW50JyksIDEwKTtcblxuICAgICAgICBkYXRhLmNoYXJzW3NlY29uZF0ua2VybmluZ1tmaXJzdF0gPSBhbW91bnQ7XG4gICAgfVxuXG4gICAgcmVzb3VyY2UuYml0bWFwRm9udCA9IGRhdGE7XG5cbiAgICAvLyBJJ20gbGVhdmluZyB0aGlzIGFzIGEgdGVtcG9yYXJ5IGZpeCBzbyB3ZSBjYW4gdGVzdCB0aGUgYml0bWFwIGZvbnRzIGluIHYzXG4gICAgLy8gYnV0IGl0J3MgdmVyeSBsaWtlbHkgdG8gY2hhbmdlXG4gICAgZXh0cmFzLkJpdG1hcFRleHQuZm9udHNbZGF0YS5mb250XSA9IGRhdGE7XG59XG5cblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoKVxue1xuICAgIHJldHVybiBmdW5jdGlvbiAocmVzb3VyY2UsIG5leHQpXG4gICAge1xuICAgICAgICAvLyBza2lwIGlmIG5vIGRhdGEgb3Igbm90IHhtbCBkYXRhXG4gICAgICAgIGlmICghcmVzb3VyY2UuZGF0YSB8fCAhcmVzb3VyY2UuaXNYbWwpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiBuZXh0KCk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBza2lwIGlmIG5vdCBiaXRtYXAgZm9udCBkYXRhLCB1c2luZyBzb21lIHNpbGx5IGR1Y2stdHlwaW5nXG4gICAgICAgIGlmIChcbiAgICAgICAgICAgIHJlc291cmNlLmRhdGEuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ3BhZ2UnKS5sZW5ndGggPT09IDAgfHxcbiAgICAgICAgICAgIHJlc291cmNlLmRhdGEuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2luZm8nKS5sZW5ndGggPT09IDAgfHxcbiAgICAgICAgICAgIHJlc291cmNlLmRhdGEuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2luZm8nKVswXS5nZXRBdHRyaWJ1dGUoJ2ZhY2UnKSA9PT0gbnVsbFxuICAgICAgICAgICAgKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gbmV4dCgpO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIHhtbFVybCA9IHBhdGguZGlybmFtZShyZXNvdXJjZS51cmwpO1xuXG4gICAgICAgIGlmICh4bWxVcmwgPT09ICcuJykge1xuICAgICAgICAgICAgeG1sVXJsID0gJyc7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5iYXNlVXJsICYmIHhtbFVybCkge1xuICAgICAgICAgICAgLy8gaWYgYmFzZXVybCBoYXMgYSB0cmFpbGluZyBzbGFzaCB0aGVuIGFkZCBvbmUgdG8geG1sVXJsIHNvIHRoZSByZXBsYWNlIHdvcmtzIGJlbG93XG4gICAgICAgICAgICBpZiAodGhpcy5iYXNlVXJsLmNoYXJBdCh0aGlzLmJhc2VVcmwubGVuZ3RoIC0gMSkgPT09ICcvJykge1xuICAgICAgICAgICAgICAgIHhtbFVybCArPSAnLyc7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIHJlbW92ZSBiYXNlVXJsIGZyb20geG1sVXJsXG4gICAgICAgICAgICB4bWxVcmwgPSB4bWxVcmwucmVwbGFjZSh0aGlzLmJhc2VVcmwsICcnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGlmIHRoZXJlIGlzIGFuIHhtbFVybCBub3csIGl0IG5lZWRzIGEgdHJhaWxpbmcgc2xhc2guIEVuc3VyZSB0aGF0IGl0IGRvZXMgaWYgdGhlIHN0cmluZyBpc24ndCBlbXB0eS5cbiAgICAgICAgaWYgKHhtbFVybCAmJiB4bWxVcmwuY2hhckF0KHhtbFVybC5sZW5ndGggLSAxKSAhPT0gJy8nKSB7XG4gICAgICAgICAgICB4bWxVcmwgKz0gJy8nO1xuICAgICAgICB9XG4gICAgICAgIHZhciB0ZXh0dXJlVXJsID0geG1sVXJsICsgcmVzb3VyY2UuZGF0YS5nZXRFbGVtZW50c0J5VGFnTmFtZSgncGFnZScpWzBdLmdldEF0dHJpYnV0ZSgnZmlsZScpO1xuICAgICAgICBpZiAoY29yZS51dGlscy5UZXh0dXJlQ2FjaGVbdGV4dHVyZVVybF0pIHtcbiAgICAgICAgICAgIC8vcmV1c2UgZXhpc3RpbmcgdGV4dHVyZVxuICAgICAgICAgICAgcGFyc2UocmVzb3VyY2UsIGNvcmUudXRpbHMuVGV4dHVyZUNhY2hlW3RleHR1cmVVcmxdKTtcbiAgICAgICAgICAgIG5leHQoKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHZhciBsb2FkT3B0aW9ucyA9IHtcbiAgICAgICAgICAgICAgICBjcm9zc09yaWdpbjogcmVzb3VyY2UuY3Jvc3NPcmlnaW4sXG4gICAgICAgICAgICAgICAgbG9hZFR5cGU6IFJlc291cmNlLkxPQURfVFlQRS5JTUFHRSxcbiAgICAgICAgICAgICAgICBtZXRhZGF0YTogcmVzb3VyY2UubWV0YWRhdGEuaW1hZ2VNZXRhZGF0YVxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIC8vIGxvYWQgdGhlIHRleHR1cmUgZm9yIHRoZSBmb250XG4gICAgICAgICAgICB0aGlzLmFkZChyZXNvdXJjZS5uYW1lICsgJ19pbWFnZScsIHRleHR1cmVVcmwsIGxvYWRPcHRpb25zLCBmdW5jdGlvbiAocmVzKSB7XG4gICAgICAgICAgICAgICAgcGFyc2UocmVzb3VyY2UsIHJlcy50ZXh0dXJlKTtcbiAgICAgICAgICAgICAgICBuZXh0KCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH07XG59O1xuIiwiLyoqXG4gKiBAZmlsZSAgICAgICAgTWFpbiBleHBvcnQgb2YgdGhlIFBJWEkgbG9hZGVycyBsaWJyYXJ5XG4gKiBAYXV0aG9yICAgICAgTWF0IEdyb3ZlcyA8bWF0QGdvb2Rib3lkaWdpdGFsLmNvbT5cbiAqIEBjb3B5cmlnaHQgICAyMDEzLTIwMTUgR29vZEJveURpZ2l0YWxcbiAqIEBsaWNlbnNlICAgICB7QGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL3BpeGlqcy9waXhpLmpzL2Jsb2IvbWFzdGVyL0xJQ0VOU0V8TUlUIExpY2Vuc2V9XG4gKi9cblxuLyoqXG4gKiBAbmFtZXNwYWNlIFBJWEkubG9hZGVyc1xuICovXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgICBMb2FkZXI6ICAgICAgICAgICAgIHJlcXVpcmUoJy4vbG9hZGVyJyksXG5cbiAgICAvLyBwYXJzZXJzXG4gICAgYml0bWFwRm9udFBhcnNlcjogICByZXF1aXJlKCcuL2JpdG1hcEZvbnRQYXJzZXInKSxcbiAgICBzcHJpdGVzaGVldFBhcnNlcjogIHJlcXVpcmUoJy4vc3ByaXRlc2hlZXRQYXJzZXInKSxcbiAgICB0ZXh0dXJlUGFyc2VyOiAgICAgIHJlcXVpcmUoJy4vdGV4dHVyZVBhcnNlcicpLFxuICAgIFJlc291cmNlOiAgICAgICAgICAgcmVxdWlyZSgncmVzb3VyY2UtbG9hZGVyJykuUmVzb3VyY2Vcbn07XG4iLCJ2YXIgUmVzb3VyY2VMb2FkZXIgPSByZXF1aXJlKCdyZXNvdXJjZS1sb2FkZXInKSxcbiAgICB0ZXh0dXJlUGFyc2VyID0gcmVxdWlyZSgnLi90ZXh0dXJlUGFyc2VyJyksXG4gICAgc3ByaXRlc2hlZXRQYXJzZXIgPSByZXF1aXJlKCcuL3Nwcml0ZXNoZWV0UGFyc2VyJyksXG4gICAgYml0bWFwRm9udFBhcnNlciA9IHJlcXVpcmUoJy4vYml0bWFwRm9udFBhcnNlcicpO1xuXG4vKipcbiAqXG4gKiBUaGUgbmV3IGxvYWRlciwgZXh0ZW5kcyBSZXNvdXJjZSBMb2FkZXIgYnkgQ2hhZCBFbmdsZXIgOiBodHRwczovL2dpdGh1Yi5jb20vZW5nbGVyY2ovcmVzb3VyY2UtbG9hZGVyXG4gKlxuICogYGBganNcbiAqIHZhciBsb2FkZXIgPSBQSVhJLmxvYWRlcjsgLy8gcGl4aSBleHBvc2VzIGEgcHJlbWFkZSBpbnN0YW5jZSBmb3IgeW91IHRvIHVzZS5cbiAqIC8vb3JcbiAqIHZhciBsb2FkZXIgPSBuZXcgUElYSS5sb2FkZXJzLkxvYWRlcigpOyAvLyB5b3UgY2FuIGFsc28gY3JlYXRlIHlvdXIgb3duIGlmIHlvdSB3YW50XG4gKlxuICogbG9hZGVyLmFkZCgnYnVubnknLFwiZGF0YS9idW5ueS5wbmdcIik7XG4gKlxuICogbG9hZGVyLm9uY2UoJ2NvbXBsZXRlJyxvbkFzc2V0c0xvYWRlZCk7XG4gKlxuICogbG9hZGVyLmxvYWQoKTtcbiAqIGBgYFxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5SZXNvdXJjZUxvYWRlclxuICogQG1lbWJlcm9mIFBJWEkubG9hZGVyc1xuICogQHBhcmFtIFtiYXNlVXJsPScnXSB7c3RyaW5nfSBUaGUgYmFzZSB1cmwgZm9yIGFsbCByZXNvdXJjZXMgbG9hZGVkIGJ5IHRoaXMgbG9hZGVyLlxuICogQHBhcmFtIFtjb25jdXJyZW5jeT0xMF0ge251bWJlcn0gVGhlIG51bWJlciBvZiByZXNvdXJjZXMgdG8gbG9hZCBjb25jdXJyZW50bHkuXG4gKi9cbmZ1bmN0aW9uIExvYWRlcihiYXNlVXJsLCBjb25jdXJyZW5jeSlcbntcbiAgICBSZXNvdXJjZUxvYWRlci5jYWxsKHRoaXMsIGJhc2VVcmwsIGNvbmN1cnJlbmN5KTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgTG9hZGVyLl9waXhpTWlkZGxld2FyZS5sZW5ndGg7ICsraSkge1xuICAgICAgICB0aGlzLnVzZShMb2FkZXIuX3BpeGlNaWRkbGV3YXJlW2ldKCkpO1xuICAgIH1cbn1cblxuTG9hZGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoUmVzb3VyY2VMb2FkZXIucHJvdG90eXBlKTtcbkxvYWRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBMb2FkZXI7XG5cbm1vZHVsZS5leHBvcnRzID0gTG9hZGVyO1xuXG5Mb2FkZXIuX3BpeGlNaWRkbGV3YXJlID0gW1xuICAgIC8vIHBhcnNlIGFueSBibG9iIGludG8gbW9yZSB1c2FibGUgb2JqZWN0cyAoZS5nLiBJbWFnZSlcbiAgICBSZXNvdXJjZUxvYWRlci5taWRkbGV3YXJlLnBhcnNpbmcuYmxvYixcbiAgICAvLyBwYXJzZSBhbnkgSW1hZ2Ugb2JqZWN0cyBpbnRvIHRleHR1cmVzXG4gICAgdGV4dHVyZVBhcnNlcixcbiAgICAvLyBwYXJzZSBhbnkgc3ByaXRlc2hlZXQgZGF0YSBpbnRvIG11bHRpcGxlIHRleHR1cmVzXG4gICAgc3ByaXRlc2hlZXRQYXJzZXIsXG4gICAgLy8gcGFyc2UgYW55IHNwcml0ZXNoZWV0IGRhdGEgaW50byBtdWx0aXBsZSB0ZXh0dXJlc1xuICAgIGJpdG1hcEZvbnRQYXJzZXJcbl07XG5cbkxvYWRlci5hZGRQaXhpTWlkZGxld2FyZSA9IGZ1bmN0aW9uIChmbikge1xuICAgIExvYWRlci5fcGl4aU1pZGRsZXdhcmUucHVzaChmbik7XG59O1xuXG4vLyBBZGQgY3VzdG9tIGV4dGVudGlvbnNcbnZhciBSZXNvdXJjZSA9IFJlc291cmNlTG9hZGVyLlJlc291cmNlO1xuXG5SZXNvdXJjZS5zZXRFeHRlbnNpb25YaHJUeXBlKCdmbnQnLCBSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRS5ET0NVTUVOVCk7XG4iLCJ2YXIgUmVzb3VyY2UgPSByZXF1aXJlKCdyZXNvdXJjZS1sb2FkZXInKS5SZXNvdXJjZSxcbiAgICBwYXRoID0gcmVxdWlyZSgncGF0aCcpLFxuICAgIGNvcmUgPSByZXF1aXJlKCcuLi9jb3JlJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKClcbntcbiAgICByZXR1cm4gZnVuY3Rpb24gKHJlc291cmNlLCBuZXh0KVxuICAgIHtcbiAgICAgICAgLy8gc2tpcCBpZiBubyBkYXRhLCBpdHMgbm90IGpzb24sIG9yIGl0IGlzbid0IHNwcml0ZXNoZWV0IGRhdGFcbiAgICAgICAgaWYgKCFyZXNvdXJjZS5kYXRhIHx8ICFyZXNvdXJjZS5pc0pzb24gfHwgIXJlc291cmNlLmRhdGEuZnJhbWVzKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gbmV4dCgpO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGxvYWRPcHRpb25zID0ge1xuICAgICAgICAgICAgY3Jvc3NPcmlnaW46IHJlc291cmNlLmNyb3NzT3JpZ2luLFxuICAgICAgICAgICAgbG9hZFR5cGU6IFJlc291cmNlLkxPQURfVFlQRS5JTUFHRSxcbiAgICAgICAgICAgIG1ldGFkYXRhOiByZXNvdXJjZS5tZXRhZGF0YS5pbWFnZU1ldGFkYXRhXG4gICAgICAgIH07XG5cbiAgICAgICAgdmFyIHJvdXRlID0gcGF0aC5kaXJuYW1lKHJlc291cmNlLnVybC5yZXBsYWNlKHRoaXMuYmFzZVVybCwgJycpKTtcblxuICAgICAgICB2YXIgcmVzb2x1dGlvbiA9IGNvcmUudXRpbHMuZ2V0UmVzb2x1dGlvbk9mVXJsKCByZXNvdXJjZS51cmwgKTtcblxuICAgICAgICAvLyBsb2FkIHRoZSBpbWFnZSBmb3IgdGhpcyBzaGVldFxuICAgICAgICB0aGlzLmFkZChyZXNvdXJjZS5uYW1lICsgJ19pbWFnZScsIHJvdXRlICsgJy8nICsgcmVzb3VyY2UuZGF0YS5tZXRhLmltYWdlLCBsb2FkT3B0aW9ucywgZnVuY3Rpb24gKHJlcylcbiAgICAgICAge1xuICAgICAgICAgICAgcmVzb3VyY2UudGV4dHVyZXMgPSB7fTtcblxuICAgICAgICAgICAgdmFyIGZyYW1lcyA9IHJlc291cmNlLmRhdGEuZnJhbWVzO1xuXG4gICAgICAgICAgICBmb3IgKHZhciBpIGluIGZyYW1lcylcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB2YXIgcmVjdCA9IGZyYW1lc1tpXS5mcmFtZTtcblxuICAgICAgICAgICAgICAgIGlmIChyZWN0KVxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHNpemUgPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICB2YXIgdHJpbSA9IG51bGw7XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKGZyYW1lc1tpXS5yb3RhdGVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzaXplID0gbmV3IGNvcmUuUmVjdGFuZ2xlKHJlY3QueCwgcmVjdC55LCByZWN0LmgsIHJlY3Qudyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzaXplID0gbmV3IGNvcmUuUmVjdGFuZ2xlKHJlY3QueCwgcmVjdC55LCByZWN0LncsIHJlY3QuaCk7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAvLyAgQ2hlY2sgdG8gc2VlIGlmIHRoZSBzcHJpdGUgaXMgdHJpbW1lZFxuICAgICAgICAgICAgICAgICAgICBpZiAoZnJhbWVzW2ldLnRyaW1tZWQpXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRyaW0gPSBuZXcgY29yZS5SZWN0YW5nbGUoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJhbWVzW2ldLnNwcml0ZVNvdXJjZVNpemUueCAvIHJlc29sdXRpb24sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJhbWVzW2ldLnNwcml0ZVNvdXJjZVNpemUueSAvIHJlc29sdXRpb24sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJhbWVzW2ldLnNvdXJjZVNpemUudyAvIHJlc29sdXRpb24sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJhbWVzW2ldLnNvdXJjZVNpemUuaCAvIHJlc29sdXRpb25cbiAgICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgLy8gZmxpcCB0aGUgd2lkdGggYW5kIGhlaWdodCFcbiAgICAgICAgICAgICAgICAgICAgaWYgKGZyYW1lc1tpXS5yb3RhdGVkKVxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgdGVtcCA9IHNpemUud2lkdGg7XG4gICAgICAgICAgICAgICAgICAgICAgICBzaXplLndpZHRoID0gc2l6ZS5oZWlnaHQ7XG4gICAgICAgICAgICAgICAgICAgICAgICBzaXplLmhlaWdodCA9IHRlbXA7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBzaXplLnggLz0gcmVzb2x1dGlvbjtcbiAgICAgICAgICAgICAgICAgICAgc2l6ZS55IC89IHJlc29sdXRpb247XG4gICAgICAgICAgICAgICAgICAgIHNpemUud2lkdGggLz0gcmVzb2x1dGlvbjtcbiAgICAgICAgICAgICAgICAgICAgc2l6ZS5oZWlnaHQgLz0gcmVzb2x1dGlvbjtcblxuICAgICAgICAgICAgICAgICAgICByZXNvdXJjZS50ZXh0dXJlc1tpXSA9IG5ldyBjb3JlLlRleHR1cmUocmVzLnRleHR1cmUuYmFzZVRleHR1cmUsIHNpemUsIHNpemUuY2xvbmUoKSwgdHJpbSwgZnJhbWVzW2ldLnJvdGF0ZWQpO1xuXG4gICAgICAgICAgICAgICAgICAgIC8vIGxldHMgYWxzbyBhZGQgdGhlIGZyYW1lIHRvIHBpeGkncyBnbG9iYWwgY2FjaGUgZm9yIGZyb21GcmFtZSBhbmQgZnJvbUltYWdlIGZ1bmN0aW9uc1xuICAgICAgICAgICAgICAgICAgICBjb3JlLnV0aWxzLlRleHR1cmVDYWNoZVtpXSA9IHJlc291cmNlLnRleHR1cmVzW2ldO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgbmV4dCgpO1xuICAgICAgICB9KTtcbiAgICB9O1xufTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vY29yZScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICgpXG57XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChyZXNvdXJjZSwgbmV4dClcbiAgICB7XG4gICAgICAgIC8vIGNyZWF0ZSBhIG5ldyB0ZXh0dXJlIGlmIHRoZSBkYXRhIGlzIGFuIEltYWdlIG9iamVjdFxuICAgICAgICBpZiAocmVzb3VyY2UuZGF0YSAmJiByZXNvdXJjZS5pc0ltYWdlKVxuICAgICAgICB7XG4gICAgICAgICAgICB2YXIgYmFzZVRleHR1cmUgPSBuZXcgY29yZS5CYXNlVGV4dHVyZShyZXNvdXJjZS5kYXRhLCBudWxsLCBjb3JlLnV0aWxzLmdldFJlc29sdXRpb25PZlVybChyZXNvdXJjZS51cmwpKTtcbiAgICAgICAgICAgIGJhc2VUZXh0dXJlLmltYWdlVXJsID0gcmVzb3VyY2UudXJsO1xuICAgICAgICAgICAgcmVzb3VyY2UudGV4dHVyZSA9IG5ldyBjb3JlLlRleHR1cmUoYmFzZVRleHR1cmUpO1xuICAgICAgICAgICAgLy8gbGV0cyBhbHNvIGFkZCB0aGUgZnJhbWUgdG8gcGl4aSdzIGdsb2JhbCBjYWNoZSBmb3IgZnJvbUZyYW1lIGFuZCBmcm9tSW1hZ2UgZnVjbnRpb25zXG4gICAgICAgICAgICBjb3JlLnV0aWxzLkJhc2VUZXh0dXJlQ2FjaGVbcmVzb3VyY2UudXJsXSA9IGJhc2VUZXh0dXJlO1xuICAgICAgICAgICAgY29yZS51dGlscy5UZXh0dXJlQ2FjaGVbcmVzb3VyY2UudXJsXSA9IHJlc291cmNlLnRleHR1cmU7XG4gICAgICAgIH1cblxuICAgICAgICBuZXh0KCk7XG4gICAgfTtcbn07XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uL2NvcmUnKSxcbiAgICB0ZW1wUG9pbnQgPSBuZXcgY29yZS5Qb2ludCgpLFxuICAgIHRlbXBQb2x5Z29uID0gbmV3IGNvcmUuUG9seWdvbigpO1xuXG4vKipcbiAqIEJhc2UgbWVzaCBjbGFzc1xuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLkNvbnRhaW5lclxuICogQG1lbWJlcm9mIFBJWEkubWVzaFxuICogQHBhcmFtIHRleHR1cmUge1BJWEkuVGV4dHVyZX0gVGhlIHRleHR1cmUgdG8gdXNlXG4gKiBAcGFyYW0gW3ZlcnRpY2VzXSB7RmxvYXQzMkFycmF5fSBpZiB5b3Ugd2FudCB0byBzcGVjaWZ5IHRoZSB2ZXJ0aWNlc1xuICogQHBhcmFtIFt1dnNdIHtGbG9hdDMyQXJyYXl9IGlmIHlvdSB3YW50IHRvIHNwZWNpZnkgdGhlIHV2c1xuICogQHBhcmFtIFtpbmRpY2VzXSB7VWludDE2QXJyYXl9IGlmIHlvdSB3YW50IHRvIHNwZWNpZnkgdGhlIGluZGljZXNcbiAqIEBwYXJhbSBbZHJhd01vZGVdIHtudW1iZXJ9IHRoZSBkcmF3TW9kZSwgY2FuIGJlIGFueSBvZiB0aGUgTWVzaC5EUkFXX01PREVTIGNvbnN0c1xuICovXG5mdW5jdGlvbiBNZXNoKHRleHR1cmUsIHZlcnRpY2VzLCB1dnMsIGluZGljZXMsIGRyYXdNb2RlKVxue1xuICAgIGNvcmUuQ29udGFpbmVyLmNhbGwodGhpcyk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgdGV4dHVyZSBvZiB0aGUgTWVzaFxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5UZXh0dXJlfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fdGV4dHVyZSA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgVXZzIG9mIHRoZSBNZXNoXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtGbG9hdDMyQXJyYXl9XG4gICAgICovXG4gICAgdGhpcy51dnMgPSB1dnMgfHwgbmV3IEZsb2F0MzJBcnJheShbMCwgMCxcbiAgICAgICAgMSwgMCxcbiAgICAgICAgMSwgMSxcbiAgICAgICAgMCwgMV0pO1xuXG4gICAgLyoqXG4gICAgICogQW4gYXJyYXkgb2YgdmVydGljZXNcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge0Zsb2F0MzJBcnJheX1cbiAgICAgKi9cbiAgICB0aGlzLnZlcnRpY2VzID0gdmVydGljZXMgfHwgbmV3IEZsb2F0MzJBcnJheShbMCwgMCxcbiAgICAgICAgMTAwLCAwLFxuICAgICAgICAxMDAsIDEwMCxcbiAgICAgICAgMCwgMTAwXSk7XG5cbiAgICAvKlxuICAgICAqIEBtZW1iZXIge1VpbnQxNkFycmF5fSBBbiBhcnJheSBjb250YWluaW5nIHRoZSBpbmRpY2VzIG9mIHRoZSB2ZXJ0aWNlc1xuICAgICAqL1xuICAgIC8vICBUT0RPIGF1dG8gZ2VuZXJhdGUgdGhpcyBiYXNlZCBvbiBkcmF3IG1vZGUhXG4gICAgdGhpcy5pbmRpY2VzID0gaW5kaWNlcyB8fCBuZXcgVWludDE2QXJyYXkoWzAsIDEsIDMsIDJdKTtcblxuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgdGhlIE1lc2ggaXMgZGlydHkgb3Igbm90XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqL1xuICAgIHRoaXMuZGlydHkgPSB0cnVlO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGJsZW5kIG1vZGUgdG8gYmUgYXBwbGllZCB0byB0aGUgc3ByaXRlLiBTZXQgdG8gYFBJWEkuQkxFTkRfTU9ERVMuTk9STUFMYCB0byByZW1vdmUgYW55IGJsZW5kIG1vZGUuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgUElYSS5CTEVORF9NT0RFUy5OT1JNQUxcbiAgICAgKiBAc2VlIFBJWEkuQkxFTkRfTU9ERVNcbiAgICAgKi9cbiAgICB0aGlzLmJsZW5kTW9kZSA9IGNvcmUuQkxFTkRfTU9ERVMuTk9STUFMO1xuXG4gICAgLyoqXG4gICAgICogVHJpYW5nbGVzIGluIGNhbnZhcyBtb2RlIGFyZSBhdXRvbWF0aWNhbGx5IGFudGlhbGlhc2VkLCB1c2UgdGhpcyB2YWx1ZSB0byBmb3JjZSB0cmlhbmdsZXMgdG8gb3ZlcmxhcCBhIGJpdCB3aXRoIGVhY2ggb3RoZXIuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy5jYW52YXNQYWRkaW5nID0gMDtcblxuICAgIC8qKlxuICAgICAqIFRoZSB3YXkgdGhlIE1lc2ggc2hvdWxkIGJlIGRyYXduLCBjYW4gYmUgYW55IG9mIHRoZSB7QGxpbmsgUElYSS5tZXNoLk1lc2guRFJBV19NT0RFU30gY29uc3RzXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQHNlZSBQSVhJLm1lc2guTWVzaC5EUkFXX01PREVTXG4gICAgICovXG4gICAgdGhpcy5kcmF3TW9kZSA9IGRyYXdNb2RlIHx8IE1lc2guRFJBV19NT0RFUy5UUklBTkdMRV9NRVNIO1xuXG4gICAgLy8gcnVuIHRleHR1cmUgc2V0dGVyO1xuICAgIHRoaXMudGV4dHVyZSA9IHRleHR1cmU7XG5cbiAgICAgLyoqXG4gICAgICogVGhlIGRlZmF1bHQgc2hhZGVyIHRoYXQgaXMgdXNlZCBpZiBhIG1lc2ggZG9lc24ndCBoYXZlIGEgbW9yZSBzcGVjaWZpYyBvbmUuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlNoYWRlcn1cbiAgICAgKi9cbiAgICB0aGlzLnNoYWRlciA9IG51bGw7XG59XG5cbi8vIGNvbnN0cnVjdG9yXG5NZXNoLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoY29yZS5Db250YWluZXIucHJvdG90eXBlKTtcbk1lc2gucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gTWVzaDtcbm1vZHVsZS5leHBvcnRzID0gTWVzaDtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoTWVzaC5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBUaGUgdGV4dHVyZSB0aGF0IHRoZSBzcHJpdGUgaXMgdXNpbmdcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuVGV4dHVyZX1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5tZXNoLk1lc2gjXG4gICAgICovXG4gICAgdGV4dHVyZToge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiAgdGhpcy5fdGV4dHVyZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGlmICh0aGlzLl90ZXh0dXJlID09PSB2YWx1ZSlcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuX3RleHR1cmUgPSB2YWx1ZTtcblxuICAgICAgICAgICAgaWYgKHZhbHVlKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIC8vIHdhaXQgZm9yIHRoZSB0ZXh0dXJlIHRvIGxvYWRcbiAgICAgICAgICAgICAgICBpZiAodmFsdWUuYmFzZVRleHR1cmUuaGFzTG9hZGVkKVxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fb25UZXh0dXJlVXBkYXRlKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlLm9uY2UoJ3VwZGF0ZScsIHRoaXMuX29uVGV4dHVyZVVwZGF0ZSwgdGhpcyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxufSk7XG5cbi8qKlxuICogUmVuZGVycyB0aGUgb2JqZWN0IHVzaW5nIHRoZSBXZWJHTCByZW5kZXJlclxuICpcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5XZWJHTFJlbmRlcmVyfSBhIHJlZmVyZW5jZSB0byB0aGUgV2ViR0wgcmVuZGVyZXJcbiAqIEBwcml2YXRlXG4gKi9cbk1lc2gucHJvdG90eXBlLl9yZW5kZXJXZWJHTCA9IGZ1bmN0aW9uIChyZW5kZXJlcilcbntcbiAgICByZW5kZXJlci5zZXRPYmplY3RSZW5kZXJlcihyZW5kZXJlci5wbHVnaW5zLm1lc2gpO1xuICAgIHJlbmRlcmVyLnBsdWdpbnMubWVzaC5yZW5kZXIodGhpcyk7XG59O1xuXG4vKipcbiAqIFJlbmRlcnMgdGhlIG9iamVjdCB1c2luZyB0aGUgQ2FudmFzIHJlbmRlcmVyXG4gKlxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLkNhbnZhc1JlbmRlcmVyfVxuICogQHByaXZhdGVcbiAqL1xuTWVzaC5wcm90b3R5cGUuX3JlbmRlckNhbnZhcyA9IGZ1bmN0aW9uIChyZW5kZXJlcilcbntcbiAgICB2YXIgY29udGV4dCA9IHJlbmRlcmVyLmNvbnRleHQ7XG5cbiAgICB2YXIgdHJhbnNmb3JtID0gdGhpcy53b3JsZFRyYW5zZm9ybTtcblxuICAgIGlmIChyZW5kZXJlci5yb3VuZFBpeGVscylcbiAgICB7XG4gICAgICAgIGNvbnRleHQuc2V0VHJhbnNmb3JtKHRyYW5zZm9ybS5hLCB0cmFuc2Zvcm0uYiwgdHJhbnNmb3JtLmMsIHRyYW5zZm9ybS5kLCB0cmFuc2Zvcm0udHggfCAwLCB0cmFuc2Zvcm0udHkgfCAwKTtcbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgY29udGV4dC5zZXRUcmFuc2Zvcm0odHJhbnNmb3JtLmEsIHRyYW5zZm9ybS5iLCB0cmFuc2Zvcm0uYywgdHJhbnNmb3JtLmQsIHRyYW5zZm9ybS50eCwgdHJhbnNmb3JtLnR5KTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5kcmF3TW9kZSA9PT0gTWVzaC5EUkFXX01PREVTLlRSSUFOR0xFX01FU0gpXG4gICAge1xuICAgICAgICB0aGlzLl9yZW5kZXJDYW52YXNUcmlhbmdsZU1lc2goY29udGV4dCk7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHRoaXMuX3JlbmRlckNhbnZhc1RyaWFuZ2xlcyhjb250ZXh0KTtcbiAgICB9XG59O1xuXG4vKipcbiAqIERyYXdzIHRoZSBvYmplY3QgaW4gVHJpYW5nbGUgTWVzaCBtb2RlIHVzaW5nIGNhbnZhc1xuICpcbiAqIEBwYXJhbSBjb250ZXh0IHtDYW52YXNSZW5kZXJpbmdDb250ZXh0MkR9IHRoZSBjdXJyZW50IGRyYXdpbmcgY29udGV4dFxuICogQHByaXZhdGVcbiAqL1xuTWVzaC5wcm90b3R5cGUuX3JlbmRlckNhbnZhc1RyaWFuZ2xlTWVzaCA9IGZ1bmN0aW9uIChjb250ZXh0KVxue1xuICAgIC8vIGRyYXcgdHJpYW5nbGVzISFcbiAgICB2YXIgdmVydGljZXMgPSB0aGlzLnZlcnRpY2VzO1xuICAgIHZhciB1dnMgPSB0aGlzLnV2cztcblxuICAgIHZhciBsZW5ndGggPSB2ZXJ0aWNlcy5sZW5ndGggLyAyO1xuICAgIC8vIHRoaXMuY291bnQrKztcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoIC0gMjsgaSsrKVxuICAgIHtcbiAgICAgICAgLy8gZHJhdyBzb21lIHRyaWFuZ2xlcyFcbiAgICAgICAgdmFyIGluZGV4ID0gaSAqIDI7XG4gICAgICAgIHRoaXMuX3JlbmRlckNhbnZhc0RyYXdUcmlhbmdsZShjb250ZXh0LCB2ZXJ0aWNlcywgdXZzLCBpbmRleCwgKGluZGV4ICsgMiksIChpbmRleCArIDQpKTtcbiAgICB9XG59O1xuXG4vKipcbiAqIERyYXdzIHRoZSBvYmplY3QgaW4gdHJpYW5nbGUgbW9kZSB1c2luZyBjYW52YXNcbiAqXG4gKiBAcGFyYW0gY29udGV4dCB7Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEfSB0aGUgY3VycmVudCBkcmF3aW5nIGNvbnRleHRcbiAqIEBwcml2YXRlXG4gKi9cbk1lc2gucHJvdG90eXBlLl9yZW5kZXJDYW52YXNUcmlhbmdsZXMgPSBmdW5jdGlvbiAoY29udGV4dClcbntcbiAgICAvLyBkcmF3IHRyaWFuZ2xlcyEhXG4gICAgdmFyIHZlcnRpY2VzID0gdGhpcy52ZXJ0aWNlcztcbiAgICB2YXIgdXZzID0gdGhpcy51dnM7XG4gICAgdmFyIGluZGljZXMgPSB0aGlzLmluZGljZXM7XG5cbiAgICB2YXIgbGVuZ3RoID0gaW5kaWNlcy5sZW5ndGg7XG4gICAgLy8gdGhpcy5jb3VudCsrO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7IGkgKz0gMylcbiAgICB7XG4gICAgICAgIC8vIGRyYXcgc29tZSB0cmlhbmdsZXMhXG4gICAgICAgIHZhciBpbmRleDAgPSBpbmRpY2VzW2ldICogMiwgaW5kZXgxID0gaW5kaWNlc1tpICsgMV0gKiAyLCBpbmRleDIgPSBpbmRpY2VzW2kgKyAyXSAqIDI7XG4gICAgICAgIHRoaXMuX3JlbmRlckNhbnZhc0RyYXdUcmlhbmdsZShjb250ZXh0LCB2ZXJ0aWNlcywgdXZzLCBpbmRleDAsIGluZGV4MSwgaW5kZXgyKTtcbiAgICB9XG59O1xuXG4vKipcbiAqIERyYXdzIG9uZSBvZiB0aGUgdHJpYW5nbGVzIHRoYXQgZm9ybSB0aGlzIE1lc2hcbiAqXG4gKiBAcGFyYW0gY29udGV4dCB7Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEfSB0aGUgY3VycmVudCBkcmF3aW5nIGNvbnRleHRcbiAqIEBwYXJhbSB2ZXJ0aWNlcyB7RmxvYXQzMkFycmF5fSBhIHJlZmVyZW5jZSB0byB0aGUgdmVydGljZXMgb2YgdGhlIE1lc2hcbiAqIEBwYXJhbSB1dnMge0Zsb2F0MzJBcnJheX0gYSByZWZlcmVuY2UgdG8gdGhlIHV2cyBvZiB0aGUgTWVzaFxuICogQHBhcmFtIGluZGV4MCB7bnVtYmVyfSB0aGUgaW5kZXggb2YgdGhlIGZpcnN0IHZlcnRleFxuICogQHBhcmFtIGluZGV4MSB7bnVtYmVyfSB0aGUgaW5kZXggb2YgdGhlIHNlY29uZCB2ZXJ0ZXhcbiAqIEBwYXJhbSBpbmRleDIge251bWJlcn0gdGhlIGluZGV4IG9mIHRoZSB0aGlyZCB2ZXJ0ZXhcbiAqIEBwcml2YXRlXG4gKi9cbk1lc2gucHJvdG90eXBlLl9yZW5kZXJDYW52YXNEcmF3VHJpYW5nbGUgPSBmdW5jdGlvbiAoY29udGV4dCwgdmVydGljZXMsIHV2cywgaW5kZXgwLCBpbmRleDEsIGluZGV4MilcbntcbiAgICB2YXIgdGV4dHVyZVNvdXJjZSA9IHRoaXMuX3RleHR1cmUuYmFzZVRleHR1cmUuc291cmNlO1xuICAgIHZhciB0ZXh0dXJlV2lkdGggPSB0aGlzLl90ZXh0dXJlLmJhc2VUZXh0dXJlLndpZHRoO1xuICAgIHZhciB0ZXh0dXJlSGVpZ2h0ID0gdGhpcy5fdGV4dHVyZS5iYXNlVGV4dHVyZS5oZWlnaHQ7XG5cbiAgICB2YXIgeDAgPSB2ZXJ0aWNlc1tpbmRleDBdLCB4MSA9IHZlcnRpY2VzW2luZGV4MV0sIHgyID0gdmVydGljZXNbaW5kZXgyXTtcbiAgICB2YXIgeTAgPSB2ZXJ0aWNlc1tpbmRleDAgKyAxXSwgeTEgPSB2ZXJ0aWNlc1tpbmRleDEgKyAxXSwgeTIgPSB2ZXJ0aWNlc1tpbmRleDIgKyAxXTtcblxuICAgIHZhciB1MCA9IHV2c1tpbmRleDBdICogdGV4dHVyZVdpZHRoLCB1MSA9IHV2c1tpbmRleDFdICogdGV4dHVyZVdpZHRoLCB1MiA9IHV2c1tpbmRleDJdICogdGV4dHVyZVdpZHRoO1xuICAgIHZhciB2MCA9IHV2c1tpbmRleDAgKyAxXSAqIHRleHR1cmVIZWlnaHQsIHYxID0gdXZzW2luZGV4MSArIDFdICogdGV4dHVyZUhlaWdodCwgdjIgPSB1dnNbaW5kZXgyICsgMV0gKiB0ZXh0dXJlSGVpZ2h0O1xuXG4gICAgaWYgKHRoaXMuY2FudmFzUGFkZGluZyA+IDApXG4gICAge1xuICAgICAgICB2YXIgcGFkZGluZ1ggPSB0aGlzLmNhbnZhc1BhZGRpbmcgLyB0aGlzLndvcmxkVHJhbnNmb3JtLmE7XG4gICAgICAgIHZhciBwYWRkaW5nWSA9IHRoaXMuY2FudmFzUGFkZGluZyAvIHRoaXMud29ybGRUcmFuc2Zvcm0uZDtcbiAgICAgICAgdmFyIGNlbnRlclggPSAoeDAgKyB4MSArIHgyKSAvIDM7XG4gICAgICAgIHZhciBjZW50ZXJZID0gKHkwICsgeTEgKyB5MikgLyAzO1xuXG4gICAgICAgIHZhciBub3JtWCA9IHgwIC0gY2VudGVyWDtcbiAgICAgICAgdmFyIG5vcm1ZID0geTAgLSBjZW50ZXJZO1xuXG4gICAgICAgIHZhciBkaXN0ID0gTWF0aC5zcXJ0KG5vcm1YICogbm9ybVggKyBub3JtWSAqIG5vcm1ZKTtcbiAgICAgICAgeDAgPSBjZW50ZXJYICsgKG5vcm1YIC8gZGlzdCkgKiAoZGlzdCArIHBhZGRpbmdYKTtcbiAgICAgICAgeTAgPSBjZW50ZXJZICsgKG5vcm1ZIC8gZGlzdCkgKiAoZGlzdCArIHBhZGRpbmdZKTtcblxuICAgICAgICAvL1xuXG4gICAgICAgIG5vcm1YID0geDEgLSBjZW50ZXJYO1xuICAgICAgICBub3JtWSA9IHkxIC0gY2VudGVyWTtcblxuICAgICAgICBkaXN0ID0gTWF0aC5zcXJ0KG5vcm1YICogbm9ybVggKyBub3JtWSAqIG5vcm1ZKTtcbiAgICAgICAgeDEgPSBjZW50ZXJYICsgKG5vcm1YIC8gZGlzdCkgKiAoZGlzdCArIHBhZGRpbmdYKTtcbiAgICAgICAgeTEgPSBjZW50ZXJZICsgKG5vcm1ZIC8gZGlzdCkgKiAoZGlzdCArIHBhZGRpbmdZKTtcblxuICAgICAgICBub3JtWCA9IHgyIC0gY2VudGVyWDtcbiAgICAgICAgbm9ybVkgPSB5MiAtIGNlbnRlclk7XG5cbiAgICAgICAgZGlzdCA9IE1hdGguc3FydChub3JtWCAqIG5vcm1YICsgbm9ybVkgKiBub3JtWSk7XG4gICAgICAgIHgyID0gY2VudGVyWCArIChub3JtWCAvIGRpc3QpICogKGRpc3QgKyBwYWRkaW5nWCk7XG4gICAgICAgIHkyID0gY2VudGVyWSArIChub3JtWSAvIGRpc3QpICogKGRpc3QgKyBwYWRkaW5nWSk7XG4gICAgfVxuXG4gICAgY29udGV4dC5zYXZlKCk7XG4gICAgY29udGV4dC5iZWdpblBhdGgoKTtcblxuXG4gICAgY29udGV4dC5tb3ZlVG8oeDAsIHkwKTtcbiAgICBjb250ZXh0LmxpbmVUbyh4MSwgeTEpO1xuICAgIGNvbnRleHQubGluZVRvKHgyLCB5Mik7XG5cbiAgICBjb250ZXh0LmNsb3NlUGF0aCgpO1xuXG4gICAgY29udGV4dC5jbGlwKCk7XG5cbiAgICAvLyBDb21wdXRlIG1hdHJpeCB0cmFuc2Zvcm1cbiAgICB2YXIgZGVsdGEgPSAgKHUwICogdjEpICAgICAgKyAodjAgKiB1MikgICAgICArICh1MSAqIHYyKSAgICAgIC0gKHYxICogdTIpICAgICAgLSAodjAgKiB1MSkgICAgICAtICh1MCAqIHYyKTtcbiAgICB2YXIgZGVsdGFBID0gKHgwICogdjEpICAgICAgKyAodjAgKiB4MikgICAgICArICh4MSAqIHYyKSAgICAgIC0gKHYxICogeDIpICAgICAgLSAodjAgKiB4MSkgICAgICAtICh4MCAqIHYyKTtcbiAgICB2YXIgZGVsdGFCID0gKHUwICogeDEpICAgICAgKyAoeDAgKiB1MikgICAgICArICh1MSAqIHgyKSAgICAgIC0gKHgxICogdTIpICAgICAgLSAoeDAgKiB1MSkgICAgICAtICh1MCAqIHgyKTtcbiAgICB2YXIgZGVsdGFDID0gKHUwICogdjEgKiB4MikgKyAodjAgKiB4MSAqIHUyKSArICh4MCAqIHUxICogdjIpIC0gKHgwICogdjEgKiB1MikgLSAodjAgKiB1MSAqIHgyKSAtICh1MCAqIHgxICogdjIpO1xuICAgIHZhciBkZWx0YUQgPSAoeTAgKiB2MSkgICAgICArICh2MCAqIHkyKSAgICAgICsgKHkxICogdjIpICAgICAgLSAodjEgKiB5MikgICAgICAtICh2MCAqIHkxKSAgICAgIC0gKHkwICogdjIpO1xuICAgIHZhciBkZWx0YUUgPSAodTAgKiB5MSkgICAgICArICh5MCAqIHUyKSAgICAgICsgKHUxICogeTIpICAgICAgLSAoeTEgKiB1MikgICAgICAtICh5MCAqIHUxKSAgICAgIC0gKHUwICogeTIpO1xuICAgIHZhciBkZWx0YUYgPSAodTAgKiB2MSAqIHkyKSArICh2MCAqIHkxICogdTIpICsgKHkwICogdTEgKiB2MikgLSAoeTAgKiB2MSAqIHUyKSAtICh2MCAqIHUxICogeTIpIC0gKHUwICogeTEgKiB2Mik7XG5cbiAgICBjb250ZXh0LnRyYW5zZm9ybShkZWx0YUEgLyBkZWx0YSwgZGVsdGFEIC8gZGVsdGEsXG4gICAgICAgIGRlbHRhQiAvIGRlbHRhLCBkZWx0YUUgLyBkZWx0YSxcbiAgICAgICAgZGVsdGFDIC8gZGVsdGEsIGRlbHRhRiAvIGRlbHRhKTtcblxuICAgIGNvbnRleHQuZHJhd0ltYWdlKHRleHR1cmVTb3VyY2UsIDAsIDApO1xuICAgIGNvbnRleHQucmVzdG9yZSgpO1xufTtcblxuXG5cbi8qKlxuICogUmVuZGVycyBhIGZsYXQgTWVzaFxuICpcbiAqIEBwYXJhbSBNZXNoIHtQSVhJLm1lc2guTWVzaH0gVGhlIE1lc2ggdG8gcmVuZGVyXG4gKiBAcHJpdmF0ZVxuICovXG5NZXNoLnByb3RvdHlwZS5yZW5kZXJNZXNoRmxhdCA9IGZ1bmN0aW9uIChNZXNoKVxue1xuICAgIHZhciBjb250ZXh0ID0gdGhpcy5jb250ZXh0O1xuICAgIHZhciB2ZXJ0aWNlcyA9IE1lc2gudmVydGljZXM7XG5cbiAgICB2YXIgbGVuZ3RoID0gdmVydGljZXMubGVuZ3RoLzI7XG4gICAgLy8gdGhpcy5jb3VudCsrO1xuXG4gICAgY29udGV4dC5iZWdpblBhdGgoKTtcbiAgICBmb3IgKHZhciBpPTE7IGkgPCBsZW5ndGgtMjsgaSsrKVxuICAgIHtcbiAgICAgICAgLy8gZHJhdyBzb21lIHRyaWFuZ2xlcyFcbiAgICAgICAgdmFyIGluZGV4ID0gaSoyO1xuXG4gICAgICAgIHZhciB4MCA9IHZlcnRpY2VzW2luZGV4XSwgICB4MSA9IHZlcnRpY2VzW2luZGV4KzJdLCB4MiA9IHZlcnRpY2VzW2luZGV4KzRdO1xuICAgICAgICB2YXIgeTAgPSB2ZXJ0aWNlc1tpbmRleCsxXSwgeTEgPSB2ZXJ0aWNlc1tpbmRleCszXSwgeTIgPSB2ZXJ0aWNlc1tpbmRleCs1XTtcblxuICAgICAgICBjb250ZXh0Lm1vdmVUbyh4MCwgeTApO1xuICAgICAgICBjb250ZXh0LmxpbmVUbyh4MSwgeTEpO1xuICAgICAgICBjb250ZXh0LmxpbmVUbyh4MiwgeTIpO1xuICAgIH1cblxuICAgIGNvbnRleHQuZmlsbFN0eWxlID0gJyNGRjAwMDAnO1xuICAgIGNvbnRleHQuZmlsbCgpO1xuICAgIGNvbnRleHQuY2xvc2VQYXRoKCk7XG59O1xuXG4vKipcbiAqIFdoZW4gdGhlIHRleHR1cmUgaXMgdXBkYXRlZCwgdGhpcyBldmVudCB3aWxsIGZpcmUgdG8gdXBkYXRlIHRoZSBzY2FsZSBhbmQgZnJhbWVcbiAqXG4gKiBAcGFyYW0gZXZlbnRcbiAqIEBwcml2YXRlXG4gKi9cbk1lc2gucHJvdG90eXBlLl9vblRleHR1cmVVcGRhdGUgPSBmdW5jdGlvbiAoKVxue1xuICAgIHRoaXMudXBkYXRlRnJhbWUgPSB0cnVlO1xufTtcblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBib3VuZHMgb2YgdGhlIG1lc2ggYXMgYSByZWN0YW5nbGUuIFRoZSBib3VuZHMgY2FsY3VsYXRpb24gdGFrZXMgdGhlIHdvcmxkVHJhbnNmb3JtIGludG8gYWNjb3VudC5cbiAqXG4gKiBAcGFyYW0gbWF0cml4IHtQSVhJLk1hdHJpeH0gdGhlIHRyYW5zZm9ybWF0aW9uIG1hdHJpeCBvZiB0aGUgc3ByaXRlXG4gKiBAcmV0dXJuIHtQSVhJLlJlY3RhbmdsZX0gdGhlIGZyYW1pbmcgcmVjdGFuZ2xlXG4gKi9cbk1lc2gucHJvdG90eXBlLmdldEJvdW5kcyA9IGZ1bmN0aW9uIChtYXRyaXgpXG57XG4gICAgaWYgKCF0aGlzLl9jdXJyZW50Qm91bmRzKSB7XG4gICAgICAgIHZhciB3b3JsZFRyYW5zZm9ybSA9IG1hdHJpeCB8fCB0aGlzLndvcmxkVHJhbnNmb3JtO1xuXG4gICAgICAgIHZhciBhID0gd29ybGRUcmFuc2Zvcm0uYTtcbiAgICAgICAgdmFyIGIgPSB3b3JsZFRyYW5zZm9ybS5iO1xuICAgICAgICB2YXIgYyA9IHdvcmxkVHJhbnNmb3JtLmM7XG4gICAgICAgIHZhciBkID0gd29ybGRUcmFuc2Zvcm0uZDtcbiAgICAgICAgdmFyIHR4ID0gd29ybGRUcmFuc2Zvcm0udHg7XG4gICAgICAgIHZhciB0eSA9IHdvcmxkVHJhbnNmb3JtLnR5O1xuXG4gICAgICAgIHZhciBtYXhYID0gLUluZmluaXR5O1xuICAgICAgICB2YXIgbWF4WSA9IC1JbmZpbml0eTtcblxuICAgICAgICB2YXIgbWluWCA9IEluZmluaXR5O1xuICAgICAgICB2YXIgbWluWSA9IEluZmluaXR5O1xuXG4gICAgICAgIHZhciB2ZXJ0aWNlcyA9IHRoaXMudmVydGljZXM7XG4gICAgICAgIGZvciAodmFyIGkgPSAwLCBuID0gdmVydGljZXMubGVuZ3RoOyBpIDwgbjsgaSArPSAyKSB7XG4gICAgICAgICAgICB2YXIgcmF3WCA9IHZlcnRpY2VzW2ldLCByYXdZID0gdmVydGljZXNbaSArIDFdO1xuICAgICAgICAgICAgdmFyIHggPSAoYSAqIHJhd1gpICsgKGMgKiByYXdZKSArIHR4O1xuICAgICAgICAgICAgdmFyIHkgPSAoZCAqIHJhd1kpICsgKGIgKiByYXdYKSArIHR5O1xuXG4gICAgICAgICAgICBtaW5YID0geCA8IG1pblggPyB4IDogbWluWDtcbiAgICAgICAgICAgIG1pblkgPSB5IDwgbWluWSA/IHkgOiBtaW5ZO1xuXG4gICAgICAgICAgICBtYXhYID0geCA+IG1heFggPyB4IDogbWF4WDtcbiAgICAgICAgICAgIG1heFkgPSB5ID4gbWF4WSA/IHkgOiBtYXhZO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG1pblggPT09IC1JbmZpbml0eSB8fCBtYXhZID09PSBJbmZpbml0eSkge1xuICAgICAgICAgICAgcmV0dXJuIGNvcmUuUmVjdGFuZ2xlLkVNUFRZO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGJvdW5kcyA9IHRoaXMuX2JvdW5kcztcblxuICAgICAgICBib3VuZHMueCA9IG1pblg7XG4gICAgICAgIGJvdW5kcy53aWR0aCA9IG1heFggLSBtaW5YO1xuXG4gICAgICAgIGJvdW5kcy55ID0gbWluWTtcbiAgICAgICAgYm91bmRzLmhlaWdodCA9IG1heFkgLSBtaW5ZO1xuXG4gICAgICAgIC8vIHN0b3JlIGEgcmVmZXJlbmNlIHNvIHRoYXQgaWYgdGhpcyBmdW5jdGlvbiBnZXRzIGNhbGxlZCBhZ2FpbiBpbiB0aGUgcmVuZGVyIGN5Y2xlIHdlIGRvIG5vdCBoYXZlIHRvIHJlY2FsY3VsYXRlXG4gICAgICAgIHRoaXMuX2N1cnJlbnRCb3VuZHMgPSBib3VuZHM7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuX2N1cnJlbnRCb3VuZHM7XG59O1xuXG4vKipcbiAqIFRlc3RzIGlmIGEgcG9pbnQgaXMgaW5zaWRlIHRoaXMgbWVzaC4gV29ya3Mgb25seSBmb3IgVFJJQU5HTEVfTUVTSFxuICpcbiAqIEBwYXJhbSBwb2ludCB7UElYSS5Qb2ludH0gdGhlIHBvaW50IHRvIHRlc3RcbiAqIEByZXR1cm4ge2Jvb2xlYW59IHRoZSByZXN1bHQgb2YgdGhlIHRlc3RcbiAqL1xuTWVzaC5wcm90b3R5cGUuY29udGFpbnNQb2ludCA9IGZ1bmN0aW9uKCBwb2ludCApIHtcbiAgICBpZiAoIXRoaXMuZ2V0Qm91bmRzKCkuY29udGFpbnMocG9pbnQueCwgcG9pbnQueSkpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICB0aGlzLndvcmxkVHJhbnNmb3JtLmFwcGx5SW52ZXJzZShwb2ludCwgIHRlbXBQb2ludCk7XG5cbiAgICB2YXIgdmVydGljZXMgPSB0aGlzLnZlcnRpY2VzO1xuICAgIHZhciBwb2ludHMgPSB0ZW1wUG9seWdvbi5wb2ludHM7XG4gICAgdmFyIGksIGxlbjtcblxuICAgIGlmICh0aGlzLmRyYXdNb2RlID09PSBNZXNoLkRSQVdfTU9ERVMuVFJJQU5HTEVTKSB7XG4gICAgICAgIHZhciBpbmRpY2VzID0gdGhpcy5pbmRpY2VzO1xuICAgICAgICBsZW4gPSB0aGlzLmluZGljZXMubGVuZ3RoO1xuICAgICAgICAvL1RPRE86IGlubGluZSB0aGlzLlxuICAgICAgICBmb3IgKGk9MDtpPGxlbjtpKz0zKSB7XG4gICAgICAgICAgICB2YXIgaW5kMCA9IGluZGljZXNbaV0qMiwgaW5kMSA9IGluZGljZXNbaSsxXSoyLCBpbmQyID0gaW5kaWNlc1tpKzJdKjI7XG4gICAgICAgICAgICBwb2ludHNbMF0gPSB2ZXJ0aWNlc1tpbmQwXTtcbiAgICAgICAgICAgIHBvaW50c1sxXSA9IHZlcnRpY2VzW2luZDArMV07XG4gICAgICAgICAgICBwb2ludHNbMl0gPSB2ZXJ0aWNlc1tpbmQxXTtcbiAgICAgICAgICAgIHBvaW50c1szXSA9IHZlcnRpY2VzW2luZDErMV07XG4gICAgICAgICAgICBwb2ludHNbNF0gPSB2ZXJ0aWNlc1tpbmQyXTtcbiAgICAgICAgICAgIHBvaW50c1s1XSA9IHZlcnRpY2VzW2luZDIrMV07XG4gICAgICAgICAgICBpZiAodGVtcFBvbHlnb24uY29udGFpbnModGVtcFBvaW50LngsIHRlbXBQb2ludC55KSkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgICAgbGVuID0gdmVydGljZXMubGVuZ3RoO1xuICAgICAgICBmb3IgKGk9MDtpPGxlbjtpKz02KSB7XG4gICAgICAgICAgICBwb2ludHNbMF0gPSB2ZXJ0aWNlc1tpXTtcbiAgICAgICAgICAgIHBvaW50c1sxXSA9IHZlcnRpY2VzW2krMV07XG4gICAgICAgICAgICBwb2ludHNbMl0gPSB2ZXJ0aWNlc1tpKzJdO1xuICAgICAgICAgICAgcG9pbnRzWzNdID0gdmVydGljZXNbaSszXTtcbiAgICAgICAgICAgIHBvaW50c1s0XSA9IHZlcnRpY2VzW2krNF07XG4gICAgICAgICAgICBwb2ludHNbNV0gPSB2ZXJ0aWNlc1tpKzVdO1xuICAgICAgICAgICAgaWYgKHRlbXBQb2x5Z29uLmNvbnRhaW5zKHRlbXBQb2ludC54LCB0ZW1wUG9pbnQueSkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG59O1xuXG4vKipcbiAqIERpZmZlcmVudCBkcmF3aW5nIGJ1ZmZlciBtb2RlcyBzdXBwb3J0ZWRcbiAqXG4gKiBAc3RhdGljXG4gKiBAY29uc3RhbnRcbiAqIEBwcm9wZXJ0eSB7b2JqZWN0fSBEUkFXX01PREVTXG4gKiBAcHJvcGVydHkge251bWJlcn0gRFJBV19NT0RFUy5UUklBTkdMRV9NRVNIXG4gKiBAcHJvcGVydHkge251bWJlcn0gRFJBV19NT0RFUy5UUklBTkdMRVNcbiAqL1xuTWVzaC5EUkFXX01PREVTID0ge1xuICAgIFRSSUFOR0xFX01FU0g6IDAsXG4gICAgVFJJQU5HTEVTOiAxXG59O1xuIiwidmFyIE1lc2ggPSByZXF1aXJlKCcuL01lc2gnKTtcblxuLyoqXG4gKiBUaGUgUGxhbmUgYWxsb3dzIHlvdSB0byBkcmF3IGEgdGV4dHVyZSBhY3Jvc3Mgc2V2ZXJhbCBwb2ludHMgYW5kIHRoZW0gbWFuaXB1bGF0ZSB0aGVzZSBwb2ludHNcbiAqXG4gKmBgYGpzXG4gKiBmb3IgKHZhciBpID0gMDsgaSA8IDIwOyBpKyspIHtcbiAqICAgICBwb2ludHMucHVzaChuZXcgUElYSS5Qb2ludChpICogNTAsIDApKTtcbiAqIH07XG4gKiB2YXIgUGxhbmUgPSBuZXcgUElYSS5QbGFuZShQSVhJLlRleHR1cmUuZnJvbUltYWdlKFwic25ha2UucG5nXCIpLCBwb2ludHMpO1xuICogIGBgYFxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5tZXNoLk1lc2hcbiAqIEBtZW1iZXJvZiBQSVhJLm1lc2hcbiAqIEBwYXJhbSB7UElYSS5UZXh0dXJlfSB0ZXh0dXJlIC0gVGhlIHRleHR1cmUgdG8gdXNlIG9uIHRoZSBQbGFuZS5cbiAqIEBwYXJhbSB7aW50fSBzZWdtZW50c1ggLSBUaGUgbnVtYmVyIG94IHggc2VnbWVudHNcbiAqIEBwYXJhbSB7aW50fSBzZWdtZW50c1kgLSBUaGUgbnVtYmVyIG9mIHkgc2VnbWVudHNcbiAqXG4gKi9cbmZ1bmN0aW9uIFBsYW5lKHRleHR1cmUsIHNlZ21lbnRzWCwgc2VnbWVudHNZKVxue1xuICAgIE1lc2guY2FsbCh0aGlzLCB0ZXh0dXJlKTtcblxuICAgIC8qKlxuICAgICAqIFRyYWNrZXIgZm9yIGlmIHRoZSBQbGFuZSBpcyByZWFkeSB0byBiZSBkcmF3bi4gTmVlZGVkIGJlY2F1c2UgTWVzaCBjdG9yIGNhblxuICAgICAqIGNhbGwgX29uVGV4dHVyZVVwZGF0ZWQgd2hpY2ggY291bGQgY2FsbCByZWZyZXNoIHRvbyBlYXJseS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9yZWFkeSA9IHRydWU7XG5cbiAgICB0aGlzLnNlZ21lbnRzWCA9ICBzZWdtZW50c1ggfHwgMTA7XG4gICAgdGhpcy5zZWdtZW50c1kgPSBzZWdtZW50c1kgfHwgMTA7XG5cbiAgICB0aGlzLmRyYXdNb2RlID0gTWVzaC5EUkFXX01PREVTLlRSSUFOR0xFUztcbiAgICB0aGlzLnJlZnJlc2goKTtcblxufVxuXG5cbi8vIGNvbnN0cnVjdG9yXG5QbGFuZS5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKCBNZXNoLnByb3RvdHlwZSApO1xuUGxhbmUucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gUGxhbmU7XG5tb2R1bGUuZXhwb3J0cyA9IFBsYW5lO1xuXG4vKipcbiAqIFJlZnJlc2hlc1xuICpcbiAqL1xuUGxhbmUucHJvdG90eXBlLnJlZnJlc2ggPSBmdW5jdGlvbigpXG57XG4gICAgdmFyIHRvdGFsID0gdGhpcy5zZWdtZW50c1ggKiB0aGlzLnNlZ21lbnRzWTtcbiAgICB2YXIgdmVydHMgPSBbXTtcbiAgICB2YXIgY29sb3JzID0gW107XG4gICAgdmFyIHV2cyA9IFtdO1xuICAgIHZhciBpbmRpY2VzID0gW107XG4gICAgdmFyIHRleHR1cmUgPSB0aGlzLnRleHR1cmU7XG5cbiAgLy8gIHRleHR1cmUud2lkdGggPSA4MDAgdGV4dHVyZS53aWR0aCB8fCA4MDA7XG4gLy8gICB0ZXh0dXJlLmhlaWdodCA9IDgwMC8vdGV4dHVyZS5oZWlnaHQgfHwgODAwO1xuXG4gICAgdmFyIHNlZ21lbnRzWFN1YiA9IHRoaXMuc2VnbWVudHNYIC0gMTtcbiAgICB2YXIgc2VnbWVudHNZU3ViID0gdGhpcy5zZWdtZW50c1kgLSAxO1xuICAgIHZhciBpID0gMDtcblxuICAgIHZhciBzaXplWCA9IHRleHR1cmUud2lkdGggLyBzZWdtZW50c1hTdWI7XG4gICAgdmFyIHNpemVZID0gdGV4dHVyZS5oZWlnaHQgLyBzZWdtZW50c1lTdWI7XG5cbiAgICBmb3IgKGkgPSAwOyBpIDwgdG90YWw7IGkrKykge1xuXG4gICAgICAgIHZhciB4ID0gKGkgJSB0aGlzLnNlZ21lbnRzWCk7XG4gICAgICAgIHZhciB5ID0gKCAoaSAvIHRoaXMuc2VnbWVudHNYICkgfCAwICk7XG5cblxuICAgICAgICB2ZXJ0cy5wdXNoKCh4ICogc2l6ZVgpLFxuICAgICAgICAgICAgICAgICAgICh5ICogc2l6ZVkpKTtcblxuICAgICAgICAvLyB0aGlzIHdvcmtzIGZvciByZWN0YW5ndWxhciB0ZXh0dXJlcy4gXG4gICAgICAgIHV2cy5wdXNoKHRleHR1cmUuX3V2cy54MCArICh0ZXh0dXJlLl91dnMueDEgLSB0ZXh0dXJlLl91dnMueDApICogKHggLyAodGhpcy5zZWdtZW50c1gtMSkpLCB0ZXh0dXJlLl91dnMueTAgKyAodGV4dHVyZS5fdXZzLnkzLXRleHR1cmUuX3V2cy55MCkgKiAoeS8gKHRoaXMuc2VnbWVudHNZLTEpKSk7XG4gICAgICB9XG5cbiAgICAvLyAgY29uc1xuXG4gICAgdmFyIHRvdGFsU3ViID0gc2VnbWVudHNYU3ViICogc2VnbWVudHNZU3ViO1xuXG4gICAgZm9yIChpID0gMDsgaSA8IHRvdGFsU3ViOyBpKyspIHtcblxuICAgICAgICB2YXIgeHBvcyA9IGkgJSBzZWdtZW50c1hTdWI7XG4gICAgICAgIHZhciB5cG9zID0gKGkgLyBzZWdtZW50c1hTdWIgKSB8IDA7XG5cblxuICAgICAgICB2YXIgIHZhbHVlID0gKHlwb3MgKiB0aGlzLnNlZ21lbnRzWCkgKyB4cG9zO1xuICAgICAgICB2YXIgIHZhbHVlMiA9ICh5cG9zICogdGhpcy5zZWdtZW50c1gpICsgeHBvcyArIDE7XG4gICAgICAgIHZhciAgdmFsdWUzID0gKCh5cG9zKzEpICogdGhpcy5zZWdtZW50c1gpICsgeHBvcztcbiAgICAgICAgdmFyICB2YWx1ZTQgPSAoKHlwb3MrMSkgKiB0aGlzLnNlZ21lbnRzWCkgKyB4cG9zICsgMTtcblxuICAgICAgICBpbmRpY2VzLnB1c2godmFsdWUsIHZhbHVlMiwgdmFsdWUzKTtcbiAgICAgICAgaW5kaWNlcy5wdXNoKHZhbHVlMiwgdmFsdWU0LCB2YWx1ZTMpO1xuICAgIH1cblxuXG4gICAgLy9jb25zb2xlLmxvZyhpbmRpY2VzKVxuICAgIHRoaXMudmVydGljZXMgPSBuZXcgRmxvYXQzMkFycmF5KHZlcnRzKTtcbiAgICB0aGlzLnV2cyA9IG5ldyBGbG9hdDMyQXJyYXkodXZzKTtcbiAgICB0aGlzLmNvbG9ycyA9IG5ldyBGbG9hdDMyQXJyYXkoY29sb3JzKTtcbiAgICB0aGlzLmluZGljZXMgPSBuZXcgVWludDE2QXJyYXkoaW5kaWNlcyk7XG59O1xuXG4vKipcbiAqIENsZWFyIHRleHR1cmUgVVZzIHdoZW4gbmV3IHRleHR1cmUgaXMgc2V0XG4gKlxuICogQHByaXZhdGVcbiAqL1xuUGxhbmUucHJvdG90eXBlLl9vblRleHR1cmVVcGRhdGUgPSBmdW5jdGlvbiAoKVxue1xuICAgIE1lc2gucHJvdG90eXBlLl9vblRleHR1cmVVcGRhdGUuY2FsbCh0aGlzKTtcblxuICAgIC8vIHdhaXQgZm9yIHRoZSBQbGFuZSBjdG9yIHRvIGZpbmlzaCBiZWZvcmUgY2FsbGluZyByZWZyZXNoXG4gICAgaWYgKHRoaXMuX3JlYWR5KSB7XG4gICAgICAgIHRoaXMucmVmcmVzaCgpO1xuICAgIH1cbn07XG4iLCJ2YXIgTWVzaCA9IHJlcXVpcmUoJy4vTWVzaCcpO1xudmFyIGNvcmUgPSByZXF1aXJlKCcuLi9jb3JlJyk7XG5cbi8qKlxuICogVGhlIHJvcGUgYWxsb3dzIHlvdSB0byBkcmF3IGEgdGV4dHVyZSBhY3Jvc3Mgc2V2ZXJhbCBwb2ludHMgYW5kIHRoZW0gbWFuaXB1bGF0ZSB0aGVzZSBwb2ludHNcbiAqXG4gKmBgYGpzXG4gKiBmb3IgKHZhciBpID0gMDsgaSA8IDIwOyBpKyspIHtcbiAqICAgICBwb2ludHMucHVzaChuZXcgUElYSS5Qb2ludChpICogNTAsIDApKTtcbiAqIH07XG4gKiB2YXIgcm9wZSA9IG5ldyBQSVhJLlJvcGUoUElYSS5UZXh0dXJlLmZyb21JbWFnZShcInNuYWtlLnBuZ1wiKSwgcG9pbnRzKTtcbiAqICBgYGBcbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkubWVzaC5NZXNoXG4gKiBAbWVtYmVyb2YgUElYSS5tZXNoXG4gKiBAcGFyYW0ge1BJWEkuVGV4dHVyZX0gdGV4dHVyZSAtIFRoZSB0ZXh0dXJlIHRvIHVzZSBvbiB0aGUgcm9wZS5cbiAqIEBwYXJhbSB7UElYSS5Qb2ludFtdfSBwb2ludHMgLSBBbiBhcnJheSBvZiB7QGxpbmsgUElYSS5Qb2ludH0gb2JqZWN0cyB0byBjb25zdHJ1Y3QgdGhpcyByb3BlLlxuICpcbiAqL1xuZnVuY3Rpb24gUm9wZSh0ZXh0dXJlLCBwb2ludHMpXG57XG4gICAgTWVzaC5jYWxsKHRoaXMsIHRleHR1cmUpO1xuXG4gICAgLypcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlBvaW50W119IEFuIGFycmF5IG9mIHBvaW50cyB0aGF0IGRldGVybWluZSB0aGUgcm9wZVxuICAgICAqL1xuICAgIHRoaXMucG9pbnRzID0gcG9pbnRzO1xuXG4gICAgLypcbiAgICAgKiBAbWVtYmVyIHtGbG9hdDMyQXJyYXl9IEFuIGFycmF5IG9mIHZlcnRpY2VzIHVzZWQgdG8gY29uc3RydWN0IHRoaXMgcm9wZS5cbiAgICAgKi9cbiAgICB0aGlzLnZlcnRpY2VzID0gbmV3IEZsb2F0MzJBcnJheShwb2ludHMubGVuZ3RoICogNCk7XG5cbiAgICAvKlxuICAgICAqIEBtZW1iZXIge0Zsb2F0MzJBcnJheX0gVGhlIFdlYkdMIFV2cyBvZiB0aGUgcm9wZS5cbiAgICAgKi9cbiAgICB0aGlzLnV2cyA9IG5ldyBGbG9hdDMyQXJyYXkocG9pbnRzLmxlbmd0aCAqIDQpO1xuXG4gICAgLypcbiAgICAgKiBAbWVtYmVyIHtGbG9hdDMyQXJyYXl9IEFuIGFycmF5IGNvbnRhaW5pbmcgdGhlIGNvbG9yIGNvbXBvbmVudHNcbiAgICAgKi9cbiAgICB0aGlzLmNvbG9ycyA9IG5ldyBGbG9hdDMyQXJyYXkocG9pbnRzLmxlbmd0aCAqIDIpO1xuXG4gICAgLypcbiAgICAgKiBAbWVtYmVyIHtVaW50MTZBcnJheX0gQW4gYXJyYXkgY29udGFpbmluZyB0aGUgaW5kaWNlcyBvZiB0aGUgdmVydGljZXNcbiAgICAgKi9cbiAgICB0aGlzLmluZGljZXMgPSBuZXcgVWludDE2QXJyYXkocG9pbnRzLmxlbmd0aCAqIDIpO1xuXG4gICAgLyoqXG4gICAgICogVHJhY2tlciBmb3IgaWYgdGhlIHJvcGUgaXMgcmVhZHkgdG8gYmUgZHJhd24uIE5lZWRlZCBiZWNhdXNlIE1lc2ggY3RvciBjYW5cbiAgICAgKiBjYWxsIF9vblRleHR1cmVVcGRhdGVkIHdoaWNoIGNvdWxkIGNhbGwgcmVmcmVzaCB0b28gZWFybHkuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgIHRoaXMuX3JlYWR5ID0gdHJ1ZTtcblxuICAgICB0aGlzLnJlZnJlc2goKTtcbn1cblxuXG4vLyBjb25zdHJ1Y3RvclxuUm9wZS5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKE1lc2gucHJvdG90eXBlKTtcblJvcGUucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gUm9wZTtcbm1vZHVsZS5leHBvcnRzID0gUm9wZTtcblxuLyoqXG4gKiBSZWZyZXNoZXNcbiAqXG4gKi9cblJvcGUucHJvdG90eXBlLnJlZnJlc2ggPSBmdW5jdGlvbiAoKVxue1xuICAgIHZhciBwb2ludHMgPSB0aGlzLnBvaW50cztcblxuICAgIC8vIGlmIHRvbyBsaXR0bGUgcG9pbnRzLCBvciB0ZXh0dXJlIGhhc24ndCBnb3QgVVZzIHNldCB5ZXQganVzdCBtb3ZlIG9uLlxuICAgIGlmIChwb2ludHMubGVuZ3RoIDwgMSB8fCAhdGhpcy5fdGV4dHVyZS5fdXZzKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHZhciB1dnMgPSB0aGlzLnV2cztcblxuICAgIHZhciBpbmRpY2VzID0gdGhpcy5pbmRpY2VzO1xuICAgIHZhciBjb2xvcnMgPSB0aGlzLmNvbG9ycztcblxuICAgIHZhciB0ZXh0dXJlVXZzID0gdGhpcy5fdGV4dHVyZS5fdXZzO1xuICAgIHZhciBvZmZzZXQgPSBuZXcgY29yZS5Qb2ludCh0ZXh0dXJlVXZzLngwLCB0ZXh0dXJlVXZzLnkwKTtcbiAgICB2YXIgZmFjdG9yID0gbmV3IGNvcmUuUG9pbnQodGV4dHVyZVV2cy54MiAtIHRleHR1cmVVdnMueDAsIHRleHR1cmVVdnMueTIgLSB0ZXh0dXJlVXZzLnkwKTtcblxuICAgIHV2c1swXSA9IDAgKyBvZmZzZXQueDtcbiAgICB1dnNbMV0gPSAwICsgb2Zmc2V0Lnk7XG4gICAgdXZzWzJdID0gMCArIG9mZnNldC54O1xuICAgIHV2c1szXSA9IDEgKiBmYWN0b3IueSArIG9mZnNldC55O1xuXG4gICAgY29sb3JzWzBdID0gMTtcbiAgICBjb2xvcnNbMV0gPSAxO1xuXG4gICAgaW5kaWNlc1swXSA9IDA7XG4gICAgaW5kaWNlc1sxXSA9IDE7XG5cbiAgICB2YXIgdG90YWwgPSBwb2ludHMubGVuZ3RoLFxuICAgICAgICBwb2ludCwgaW5kZXgsIGFtb3VudDtcblxuICAgIGZvciAodmFyIGkgPSAxOyBpIDwgdG90YWw7IGkrKylcbiAgICB7XG4gICAgICAgIHBvaW50ID0gcG9pbnRzW2ldO1xuICAgICAgICBpbmRleCA9IGkgKiA0O1xuICAgICAgICAvLyB0aW1lIHRvIGRvIHNvbWUgc21hcnQgZHJhd2luZyFcbiAgICAgICAgYW1vdW50ID0gaSAvICh0b3RhbC0xKTtcblxuICAgICAgICB1dnNbaW5kZXhdID0gYW1vdW50ICogZmFjdG9yLnggKyBvZmZzZXQueDtcbiAgICAgICAgdXZzW2luZGV4KzFdID0gMCArIG9mZnNldC55O1xuXG4gICAgICAgIHV2c1tpbmRleCsyXSA9IGFtb3VudCAqIGZhY3Rvci54ICsgb2Zmc2V0Lng7XG4gICAgICAgIHV2c1tpbmRleCszXSA9IDEgKiBmYWN0b3IueSArIG9mZnNldC55O1xuXG4gICAgICAgIGluZGV4ID0gaSAqIDI7XG4gICAgICAgIGNvbG9yc1tpbmRleF0gPSAxO1xuICAgICAgICBjb2xvcnNbaW5kZXgrMV0gPSAxO1xuXG4gICAgICAgIGluZGV4ID0gaSAqIDI7XG4gICAgICAgIGluZGljZXNbaW5kZXhdID0gaW5kZXg7XG4gICAgICAgIGluZGljZXNbaW5kZXggKyAxXSA9IGluZGV4ICsgMTtcbiAgICB9XG5cbiAgICB0aGlzLmRpcnR5ID0gdHJ1ZTtcbn07XG5cbi8qKlxuICogQ2xlYXIgdGV4dHVyZSBVVnMgd2hlbiBuZXcgdGV4dHVyZSBpcyBzZXRcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5Sb3BlLnByb3RvdHlwZS5fb25UZXh0dXJlVXBkYXRlID0gZnVuY3Rpb24gKClcbntcbiAgICBNZXNoLnByb3RvdHlwZS5fb25UZXh0dXJlVXBkYXRlLmNhbGwodGhpcyk7XG5cbiAgICAvLyB3YWl0IGZvciB0aGUgUm9wZSBjdG9yIHRvIGZpbmlzaCBiZWZvcmUgY2FsbGluZyByZWZyZXNoXG4gICAgaWYgKHRoaXMuX3JlYWR5KSB7XG4gICAgICAgIHRoaXMucmVmcmVzaCgpO1xuICAgIH1cbn07XG5cbi8qKlxuICogVXBkYXRlcyB0aGUgb2JqZWN0IHRyYW5zZm9ybSBmb3IgcmVuZGVyaW5nXG4gKlxuICogQHByaXZhdGVcbiAqL1xuUm9wZS5wcm90b3R5cGUudXBkYXRlVHJhbnNmb3JtID0gZnVuY3Rpb24gKClcbntcbiAgICB2YXIgcG9pbnRzID0gdGhpcy5wb2ludHM7XG5cbiAgICBpZiAocG9pbnRzLmxlbmd0aCA8IDEpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFyIGxhc3RQb2ludCA9IHBvaW50c1swXTtcbiAgICB2YXIgbmV4dFBvaW50O1xuICAgIHZhciBwZXJwWCA9IDA7XG4gICAgdmFyIHBlcnBZID0gMDtcblxuICAgIC8vIHRoaXMuY291bnQgLT0gMC4yO1xuXG4gICAgdmFyIHZlcnRpY2VzID0gdGhpcy52ZXJ0aWNlcztcbiAgICB2YXIgdG90YWwgPSBwb2ludHMubGVuZ3RoLFxuICAgICAgICBwb2ludCwgaW5kZXgsIHJhdGlvLCBwZXJwTGVuZ3RoLCBudW07XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRvdGFsOyBpKyspXG4gICAge1xuICAgICAgICBwb2ludCA9IHBvaW50c1tpXTtcbiAgICAgICAgaW5kZXggPSBpICogNDtcblxuICAgICAgICBpZiAoaSA8IHBvaW50cy5sZW5ndGgtMSlcbiAgICAgICAge1xuICAgICAgICAgICAgbmV4dFBvaW50ID0gcG9pbnRzW2krMV07XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgICBuZXh0UG9pbnQgPSBwb2ludDtcbiAgICAgICAgfVxuXG4gICAgICAgIHBlcnBZID0gLShuZXh0UG9pbnQueCAtIGxhc3RQb2ludC54KTtcbiAgICAgICAgcGVycFggPSBuZXh0UG9pbnQueSAtIGxhc3RQb2ludC55O1xuXG4gICAgICAgIHJhdGlvID0gKDEgLSAoaSAvICh0b3RhbC0xKSkpICogMTA7XG5cbiAgICAgICAgaWYgKHJhdGlvID4gMSlcbiAgICAgICAge1xuICAgICAgICAgICAgcmF0aW8gPSAxO1xuICAgICAgICB9XG5cbiAgICAgICAgcGVycExlbmd0aCA9IE1hdGguc3FydChwZXJwWCAqIHBlcnBYICsgcGVycFkgKiBwZXJwWSk7XG4gICAgICAgIG51bSA9IHRoaXMuX3RleHR1cmUuaGVpZ2h0IC8gMjsgLy8oMjAgKyBNYXRoLmFicyhNYXRoLnNpbigoaSArIHRoaXMuY291bnQpICogMC4zKSAqIDUwKSApKiByYXRpbztcbiAgICAgICAgcGVycFggLz0gcGVycExlbmd0aDtcbiAgICAgICAgcGVycFkgLz0gcGVycExlbmd0aDtcblxuICAgICAgICBwZXJwWCAqPSBudW07XG4gICAgICAgIHBlcnBZICo9IG51bTtcblxuICAgICAgICB2ZXJ0aWNlc1tpbmRleF0gPSBwb2ludC54ICsgcGVycFg7XG4gICAgICAgIHZlcnRpY2VzW2luZGV4KzFdID0gcG9pbnQueSArIHBlcnBZO1xuICAgICAgICB2ZXJ0aWNlc1tpbmRleCsyXSA9IHBvaW50LnggLSBwZXJwWDtcbiAgICAgICAgdmVydGljZXNbaW5kZXgrM10gPSBwb2ludC55IC0gcGVycFk7XG5cbiAgICAgICAgbGFzdFBvaW50ID0gcG9pbnQ7XG4gICAgfVxuXG4gICAgdGhpcy5jb250YWluZXJVcGRhdGVUcmFuc2Zvcm0oKTtcbn07XG4iLCIvKipcbiAqIEBmaWxlICAgICAgICBNYWluIGV4cG9ydCBvZiB0aGUgUElYSSBleHRyYXMgbGlicmFyeVxuICogQGF1dGhvciAgICAgIE1hdCBHcm92ZXMgPG1hdEBnb29kYm95ZGlnaXRhbC5jb20+XG4gKiBAY29weXJpZ2h0ICAgMjAxMy0yMDE1IEdvb2RCb3lEaWdpdGFsXG4gKiBAbGljZW5zZSAgICAge0BsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9waXhpanMvcGl4aS5qcy9ibG9iL21hc3Rlci9MSUNFTlNFfE1JVCBMaWNlbnNlfVxuICovXG5cbi8qKlxuICogQG5hbWVzcGFjZSBQSVhJLm1lc2hcbiAqL1xubW9kdWxlLmV4cG9ydHMgPSB7XG4gICAgTWVzaDogICAgICAgICAgIHJlcXVpcmUoJy4vTWVzaCcpLFxuICAgIFBsYW5lOiAgICAgICAgICAgcmVxdWlyZSgnLi9QbGFuZScpLFxuICAgIFJvcGU6ICAgICAgICAgICByZXF1aXJlKCcuL1JvcGUnKSxcbiAgICBNZXNoUmVuZGVyZXI6ICAgcmVxdWlyZSgnLi93ZWJnbC9NZXNoUmVuZGVyZXInKSxcbiAgICBNZXNoU2hhZGVyOiAgICAgcmVxdWlyZSgnLi93ZWJnbC9NZXNoU2hhZGVyJylcbn07XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uLy4uL2NvcmUnKSxcbiAgICBNZXNoID0gcmVxdWlyZSgnLi4vTWVzaCcpO1xuXG4vKipcbiAqIEBhdXRob3IgTWF0IEdyb3Zlc1xuICpcbiAqIEJpZyB0aGFua3MgdG8gdGhlIHZlcnkgY2xldmVyIE1hdHQgRGVzTGF1cmllcnMgPG1hdHRkZXNsPiBodHRwczovL2dpdGh1Yi5jb20vbWF0dGRlc2wvXG4gKiBmb3IgY3JlYXRpbmcgdGhlIG9yaWdpbmFsIHBpeGkgdmVyc2lvbiFcbiAqIEFsc28gYSB0aGFua3MgdG8gaHR0cHM6Ly9naXRodWIuY29tL2JjaGV2YWxpZXIgZm9yIHR3ZWFraW5nIHRoZSB0aW50IGFuZCBhbHBoYSBzbyB0aGF0IHRoZXkgbm93IHNoYXJlIDQgYnl0ZXMgb24gdGhlIHZlcnRleCBidWZmZXJcbiAqXG4gKiBIZWF2aWx5IGluc3BpcmVkIGJ5IExpYkdEWCdzIE1lc2hSZW5kZXJlcjpcbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS9saWJnZHgvbGliZ2R4L2Jsb2IvbWFzdGVyL2dkeC9zcmMvY29tL2JhZGxvZ2ljL2dkeC9ncmFwaGljcy9nMmQvTWVzaFJlbmRlcmVyLmphdmFcbiAqL1xuXG4vKipcbiAqXG4gKiBAY2xhc3NcbiAqIEBwcml2YXRlXG4gKiBAbWVtYmVyb2YgUElYSS5tZXNoXG4gKiBAZXh0ZW5kcyBQSVhJLk9iamVjdFJlbmRlcmVyXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcn0gVGhlIHJlbmRlcmVyIHRoaXMgc3ByaXRlIGJhdGNoIHdvcmtzIGZvci5cbiAqL1xuZnVuY3Rpb24gTWVzaFJlbmRlcmVyKHJlbmRlcmVyKVxue1xuICAgIGNvcmUuT2JqZWN0UmVuZGVyZXIuY2FsbCh0aGlzLCByZW5kZXJlcik7XG5cblxuICAgIC8qKlxuICAgICAqIEhvbGRzIHRoZSBpbmRpY2VzXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtVaW50MTZBcnJheX1cbiAgICAgKi9cbiAgICBcbiAgICB0aGlzLmluZGljZXMgPSBuZXcgVWludDE2QXJyYXkoMTUwMDApO1xuXG4gICAgLy9UT0RPIHRoaXMgY291bGQgYmUgYSBzaW5nbGUgYnVmZmVyIHNoYXJlZCBhbW9uZ3N0IGFsbCByZW5kZXJlcnMgYXMgd2UgcmV1c2UgdGhpcyBzZXQgdXAgaW4gbW9zdCByZW5kZXJlcnNcbiAgICBmb3IgKHZhciBpPTAsIGo9MDsgaSA8IDE1MDAwOyBpICs9IDYsIGogKz0gNClcbiAgICB7XG4gICAgICAgIHRoaXMuaW5kaWNlc1tpICsgMF0gPSBqICsgMDtcbiAgICAgICAgdGhpcy5pbmRpY2VzW2kgKyAxXSA9IGogKyAxO1xuICAgICAgICB0aGlzLmluZGljZXNbaSArIDJdID0gaiArIDI7XG4gICAgICAgIHRoaXMuaW5kaWNlc1tpICsgM10gPSBqICsgMDtcbiAgICAgICAgdGhpcy5pbmRpY2VzW2kgKyA0XSA9IGogKyAyO1xuICAgICAgICB0aGlzLmluZGljZXNbaSArIDVdID0gaiArIDM7XG4gICAgfVxuXG4gICAgdGhpcy5jdXJyZW50U2hhZGVyID0gbnVsbDtcbn1cblxuTWVzaFJlbmRlcmVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoY29yZS5PYmplY3RSZW5kZXJlci5wcm90b3R5cGUpO1xuTWVzaFJlbmRlcmVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IE1lc2hSZW5kZXJlcjtcbm1vZHVsZS5leHBvcnRzID0gTWVzaFJlbmRlcmVyO1xuXG5jb3JlLldlYkdMUmVuZGVyZXIucmVnaXN0ZXJQbHVnaW4oJ21lc2gnLCBNZXNoUmVuZGVyZXIpO1xuXG4vKipcbiAqIFNldHMgdXAgdGhlIHJlbmRlcmVyIGNvbnRleHQgYW5kIG5lY2Vzc2FyeSBidWZmZXJzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0gZ2wge1dlYkdMUmVuZGVyaW5nQ29udGV4dH0gdGhlIGN1cnJlbnQgV2ViR0wgZHJhd2luZyBjb250ZXh0XG4gKi9cbk1lc2hSZW5kZXJlci5wcm90b3R5cGUub25Db250ZXh0Q2hhbmdlID0gZnVuY3Rpb24gKClcbntcblxufTtcblxuLyoqXG4gKiBSZW5kZXJzIHRoZSBzcHJpdGUgb2JqZWN0LlxuICpcbiAqIEBwYXJhbSBtZXNoIHtQSVhJLm1lc2guTWVzaH0gdGhlIG1lc2ggdG8gcmVuZGVyXG4gKi9cbk1lc2hSZW5kZXJlci5wcm90b3R5cGUucmVuZGVyID0gZnVuY3Rpb24gKG1lc2gpXG57XG4gICAgaWYoIW1lc2guX3ZlcnRleEJ1ZmZlcilcbiAgICB7XG4gICAgICAgIHRoaXMuX2luaXRXZWJHTChtZXNoKTtcbiAgICB9XG5cbiAgICB2YXIgcmVuZGVyZXIgPSB0aGlzLnJlbmRlcmVyLFxuICAgICAgICBnbCA9IHJlbmRlcmVyLmdsLFxuICAgICAgICB0ZXh0dXJlID0gbWVzaC5fdGV4dHVyZS5iYXNlVGV4dHVyZSxcbiAgICAgICAgc2hhZGVyID0gbWVzaC5zaGFkZXI7Ly8gfHwgcmVuZGVyZXIuc2hhZGVyTWFuYWdlci5wbHVnaW5zLm1lc2hTaGFkZXI7XG5cbiAgICB2YXIgZHJhd01vZGUgPSBtZXNoLmRyYXdNb2RlID09PSBNZXNoLkRSQVdfTU9ERVMuVFJJQU5HTEVfTUVTSCA/IGdsLlRSSUFOR0xFX1NUUklQIDogZ2wuVFJJQU5HTEVTO1xuXG4gICAgcmVuZGVyZXIuYmxlbmRNb2RlTWFuYWdlci5zZXRCbGVuZE1vZGUobWVzaC5ibGVuZE1vZGUpO1xuXG4gICAgLy9UT0RPIGNhY2hlIGN1c3RvbSBzdGF0ZS4uXG4gICAgaWYgKCFzaGFkZXIpXG4gICAge1xuICAgICAgICBzaGFkZXIgPSByZW5kZXJlci5zaGFkZXJNYW5hZ2VyLnBsdWdpbnMubWVzaFNoYWRlcjtcbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgc2hhZGVyID0gc2hhZGVyLnNoYWRlcnNbZ2wuaWRdIHx8IHNoYWRlci5nZXRTaGFkZXIocmVuZGVyZXIpOy8vIDogc2hhZGVyO1xuICAgIH1cblxuICAgIHRoaXMucmVuZGVyZXIuc2hhZGVyTWFuYWdlci5zZXRTaGFkZXIoc2hhZGVyKTtcblxuICAgIHNoYWRlci51bmlmb3Jtcy50cmFuc2xhdGlvbk1hdHJpeC52YWx1ZSA9IG1lc2gud29ybGRUcmFuc2Zvcm0udG9BcnJheSh0cnVlKTtcbiAgICBzaGFkZXIudW5pZm9ybXMucHJvamVjdGlvbk1hdHJpeC52YWx1ZSA9IHJlbmRlcmVyLmN1cnJlbnRSZW5kZXJUYXJnZXQucHJvamVjdGlvbk1hdHJpeC50b0FycmF5KHRydWUpO1xuICAgIHNoYWRlci51bmlmb3Jtcy5hbHBoYS52YWx1ZSA9IG1lc2gud29ybGRBbHBoYTtcblxuICAgIHNoYWRlci5zeW5jVW5pZm9ybXMoKTtcblxuICAgIGlmICghbWVzaC5kaXJ0eSlcbiAgICB7XG5cbiAgICAgICAgZ2wuYmluZEJ1ZmZlcihnbC5BUlJBWV9CVUZGRVIsIG1lc2guX3ZlcnRleEJ1ZmZlcik7XG4gICAgICAgIGdsLmJ1ZmZlclN1YkRhdGEoZ2wuQVJSQVlfQlVGRkVSLCAwLCBtZXNoLnZlcnRpY2VzKTtcbiAgICAgICAgZ2wudmVydGV4QXR0cmliUG9pbnRlcihzaGFkZXIuYXR0cmlidXRlcy5hVmVydGV4UG9zaXRpb24sIDIsIGdsLkZMT0FULCBmYWxzZSwgMCwgMCk7XG5cbiAgICAgICAgLy8gdXBkYXRlIHRoZSB1dnNcbiAgICAgICAgZ2wuYmluZEJ1ZmZlcihnbC5BUlJBWV9CVUZGRVIsIG1lc2guX3V2QnVmZmVyKTtcbiAgICAgICAgZ2wudmVydGV4QXR0cmliUG9pbnRlcihzaGFkZXIuYXR0cmlidXRlcy5hVGV4dHVyZUNvb3JkLCAyLCBnbC5GTE9BVCwgZmFsc2UsIDAsIDApO1xuXG5cbiAgICAgICAgZ2wuYWN0aXZlVGV4dHVyZShnbC5URVhUVVJFMCk7XG5cbiAgICAgICBpZiAoIXRleHR1cmUuX2dsVGV4dHVyZXNbZ2wuaWRdKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnJlbmRlcmVyLnVwZGF0ZVRleHR1cmUodGV4dHVyZSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgICAvLyBiaW5kIHRoZSBjdXJyZW50IHRleHR1cmVcbiAgICAgICAgICAgIGdsLmJpbmRUZXh0dXJlKGdsLlRFWFRVUkVfMkQsIHRleHR1cmUuX2dsVGV4dHVyZXNbZ2wuaWRdKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGdsLmJpbmRCdWZmZXIoZ2wuRUxFTUVOVF9BUlJBWV9CVUZGRVIsIG1lc2guX2luZGV4QnVmZmVyKTtcbiAgICAgICAgZ2wuYnVmZmVyU3ViRGF0YShnbC5FTEVNRU5UX0FSUkFZX0JVRkZFUiwgMCwgbWVzaC5pbmRpY2VzKTtcbiAgICB9XG4gICAgZWxzZVxuICAgIHtcblxuICAgICAgICBtZXNoLmRpcnR5ID0gZmFsc2U7XG4gICAgICAgIGdsLmJpbmRCdWZmZXIoZ2wuQVJSQVlfQlVGRkVSLCBtZXNoLl92ZXJ0ZXhCdWZmZXIpO1xuICAgICAgICBnbC5idWZmZXJEYXRhKGdsLkFSUkFZX0JVRkZFUiwgbWVzaC52ZXJ0aWNlcywgZ2wuU1RBVElDX0RSQVcpO1xuICAgICAgICBnbC52ZXJ0ZXhBdHRyaWJQb2ludGVyKHNoYWRlci5hdHRyaWJ1dGVzLmFWZXJ0ZXhQb3NpdGlvbiwgMiwgZ2wuRkxPQVQsIGZhbHNlLCAwLCAwKTtcblxuICAgICAgICAvLyB1cGRhdGUgdGhlIHV2c1xuICAgICAgICBnbC5iaW5kQnVmZmVyKGdsLkFSUkFZX0JVRkZFUiwgbWVzaC5fdXZCdWZmZXIpO1xuICAgICAgICBnbC5idWZmZXJEYXRhKGdsLkFSUkFZX0JVRkZFUiwgbWVzaC51dnMsIGdsLlNUQVRJQ19EUkFXKTtcbiAgICAgICAgZ2wudmVydGV4QXR0cmliUG9pbnRlcihzaGFkZXIuYXR0cmlidXRlcy5hVGV4dHVyZUNvb3JkLCAyLCBnbC5GTE9BVCwgZmFsc2UsIDAsIDApO1xuXG4gICAgICAgICBnbC5hY3RpdmVUZXh0dXJlKGdsLlRFWFRVUkUwKTtcblxuICAgICAgICBpZiAoIXRleHR1cmUuX2dsVGV4dHVyZXNbZ2wuaWRdKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnJlbmRlcmVyLnVwZGF0ZVRleHR1cmUodGV4dHVyZSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgICAvLyBiaW5kIHRoZSBjdXJyZW50IHRleHR1cmVcbiAgICAgICAgICAgIGdsLmJpbmRUZXh0dXJlKGdsLlRFWFRVUkVfMkQsIHRleHR1cmUuX2dsVGV4dHVyZXNbZ2wuaWRdKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGRvbnQgbmVlZCB0byB1cGxvYWQhXG4gICAgICAgIGdsLmJpbmRCdWZmZXIoZ2wuRUxFTUVOVF9BUlJBWV9CVUZGRVIsIG1lc2guX2luZGV4QnVmZmVyKTtcbiAgICAgICAgZ2wuYnVmZmVyRGF0YShnbC5FTEVNRU5UX0FSUkFZX0JVRkZFUiwgbWVzaC5pbmRpY2VzLCBnbC5TVEFUSUNfRFJBVyk7XG5cbiAgICB9XG5cbiAgICBnbC5kcmF3RWxlbWVudHMoZHJhd01vZGUsIG1lc2guaW5kaWNlcy5sZW5ndGgsIGdsLlVOU0lHTkVEX1NIT1JULCAwKTtcblxufTtcblxuLyoqXG4gKiBQcmVwYXJlcyBhbGwgdGhlIGJ1ZmZlcnMgdG8gcmVuZGVyIHRoaXMgbWVzaFxuICogQHBhcmFtIG1lc2gge1BJWEkubWVzaC5NZXNofSB0aGUgbWVzaCB0byByZW5kZXJcbiAqL1xuTWVzaFJlbmRlcmVyLnByb3RvdHlwZS5faW5pdFdlYkdMID0gZnVuY3Rpb24gKG1lc2gpXG57XG4gICAgLy8gYnVpbGQgdGhlIHN0cmlwIVxuICAgIHZhciBnbCA9IHRoaXMucmVuZGVyZXIuZ2w7XG5cbiAgICBtZXNoLl92ZXJ0ZXhCdWZmZXIgPSBnbC5jcmVhdGVCdWZmZXIoKTtcbiAgICBtZXNoLl9pbmRleEJ1ZmZlciA9IGdsLmNyZWF0ZUJ1ZmZlcigpO1xuICAgIG1lc2guX3V2QnVmZmVyID0gZ2wuY3JlYXRlQnVmZmVyKCk7XG5cblxuXG4gICAgZ2wuYmluZEJ1ZmZlcihnbC5BUlJBWV9CVUZGRVIsIG1lc2guX3ZlcnRleEJ1ZmZlcik7XG4gICAgZ2wuYnVmZmVyRGF0YShnbC5BUlJBWV9CVUZGRVIsIG1lc2gudmVydGljZXMsIGdsLkRZTkFNSUNfRFJBVyk7XG5cbiAgICBnbC5iaW5kQnVmZmVyKGdsLkFSUkFZX0JVRkZFUiwgbWVzaC5fdXZCdWZmZXIpO1xuICAgIGdsLmJ1ZmZlckRhdGEoZ2wuQVJSQVlfQlVGRkVSLCAgbWVzaC51dnMsIGdsLlNUQVRJQ19EUkFXKTtcblxuICAgIGlmKG1lc2guY29sb3JzKXtcbiAgICAgICAgbWVzaC5fY29sb3JCdWZmZXIgPSBnbC5jcmVhdGVCdWZmZXIoKTtcbiAgICAgICAgZ2wuYmluZEJ1ZmZlcihnbC5BUlJBWV9CVUZGRVIsIG1lc2guX2NvbG9yQnVmZmVyKTtcbiAgICAgICAgZ2wuYnVmZmVyRGF0YShnbC5BUlJBWV9CVUZGRVIsIG1lc2guY29sb3JzLCBnbC5TVEFUSUNfRFJBVyk7XG4gICAgfVxuXG4gICAgZ2wuYmluZEJ1ZmZlcihnbC5FTEVNRU5UX0FSUkFZX0JVRkZFUiwgbWVzaC5faW5kZXhCdWZmZXIpO1xuICAgIGdsLmJ1ZmZlckRhdGEoZ2wuRUxFTUVOVF9BUlJBWV9CVUZGRVIsIG1lc2guaW5kaWNlcywgZ2wuU1RBVElDX0RSQVcpO1xufTtcblxuXG4vKipcbiAqIEVtcHRpZXMgdGhlIGN1cnJlbnQgYmF0Y2guXG4gKlxuICovXG5NZXNoUmVuZGVyZXIucHJvdG90eXBlLmZsdXNoID0gZnVuY3Rpb24gKClcbntcblxufTtcblxuLyoqXG4gKiBTdGFydHMgYSBuZXcgbWVzaCByZW5kZXJlci5cbiAqXG4gKi9cbk1lc2hSZW5kZXJlci5wcm90b3R5cGUuc3RhcnQgPSBmdW5jdGlvbiAoKVxue1xuICAgIFxuXG4gICAgdGhpcy5jdXJyZW50U2hhZGVyID0gbnVsbDtcbn07XG5cbi8qKlxuICogRGVzdHJveXMgdGhlIE1lc2ggcmVuZGVyZXJcbiAqXG4gKi9cbk1lc2hSZW5kZXJlci5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uICgpXG57XG4gICAgY29yZS5PYmplY3RSZW5kZXJlci5wcm90b3R5cGUuZGVzdHJveS5jYWxsKHRoaXMpO1xufTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vLi4vY29yZScpO1xuXG4vKipcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5TaGFkZXJcbiAqIEBtZW1iZXJvZiBQSVhJLm1lc2hcbiAqIEBwYXJhbSBzaGFkZXJNYW5hZ2VyIHtQSVhJLlNoYWRlck1hbmFnZXJ9IFRoZSBXZWJHTCBzaGFkZXIgbWFuYWdlciB0aGlzIHNoYWRlciB3b3JrcyBmb3IuXG4gKi9cbmZ1bmN0aW9uIE1lc2hTaGFkZXIoc2hhZGVyTWFuYWdlcilcbntcbiAgICBjb3JlLlNoYWRlci5jYWxsKHRoaXMsXG4gICAgICAgIHNoYWRlck1hbmFnZXIsXG4gICAgICAgIC8vIHZlcnRleCBzaGFkZXJcbiAgICAgICAgW1xuICAgICAgICAgICAgJ3ByZWNpc2lvbiBsb3dwIGZsb2F0OycsXG4gICAgICAgICAgICAnYXR0cmlidXRlIHZlYzIgYVZlcnRleFBvc2l0aW9uOycsXG4gICAgICAgICAgICAnYXR0cmlidXRlIHZlYzIgYVRleHR1cmVDb29yZDsnLFxuXG4gICAgICAgICAgICAndW5pZm9ybSBtYXQzIHRyYW5zbGF0aW9uTWF0cml4OycsXG4gICAgICAgICAgICAndW5pZm9ybSBtYXQzIHByb2plY3Rpb25NYXRyaXg7JyxcblxuICAgICAgICAgICAgJ3ZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkOycsXG5cbiAgICAgICAgICAgICd2b2lkIG1haW4odm9pZCl7JyxcbiAgICAgICAgICAgICcgICBnbF9Qb3NpdGlvbiA9IHZlYzQoKHByb2plY3Rpb25NYXRyaXggKiB0cmFuc2xhdGlvbk1hdHJpeCAqIHZlYzMoYVZlcnRleFBvc2l0aW9uLCAxLjApKS54eSwgMC4wLCAxLjApOycsXG4gICAgICAgICAgICAnICAgdlRleHR1cmVDb29yZCA9IGFUZXh0dXJlQ29vcmQ7JyxcbiAgICAgICAgICAgICd9J1xuICAgICAgICBdLmpvaW4oJ1xcbicpLFxuICAgICAgICBbXG4gICAgICAgICAgICAncHJlY2lzaW9uIGxvd3AgZmxvYXQ7JyxcblxuICAgICAgICAgICAgJ3ZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkOycsXG4gICAgICAgICAgICAndW5pZm9ybSBmbG9hdCBhbHBoYTsnLFxuXG4gICAgICAgICAgICAndW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXI7JyxcblxuICAgICAgICAgICAgJ3ZvaWQgbWFpbih2b2lkKXsnLFxuICAgICAgICAgICAgJyAgIGdsX0ZyYWdDb2xvciA9IHRleHR1cmUyRCh1U2FtcGxlciwgdlRleHR1cmVDb29yZCkgKiBhbHBoYSA7JyxcbiAgICAgICAgICAgICd9J1xuICAgICAgICBdLmpvaW4oJ1xcbicpLFxuICAgICAgICAvLyBjdXN0b20gdW5pZm9ybXNcbiAgICAgICAge1xuICAgICAgICAgICAgYWxwaGE6ICB7IHR5cGU6ICcxZicsIHZhbHVlOiAwIH0sXG4gICAgICAgICAgICB0cmFuc2xhdGlvbk1hdHJpeDogeyB0eXBlOiAnbWF0MycsIHZhbHVlOiBuZXcgRmxvYXQzMkFycmF5KDkpIH0sXG4gICAgICAgICAgICBwcm9qZWN0aW9uTWF0cml4OiB7IHR5cGU6ICdtYXQzJywgdmFsdWU6IG5ldyBGbG9hdDMyQXJyYXkoOSkgfVxuICAgICAgICB9LFxuICAgICAgICAvLyBjdXN0b20gYXR0cmlidXRlc1xuICAgICAgICB7XG4gICAgICAgICAgICBhVmVydGV4UG9zaXRpb246MCxcbiAgICAgICAgICAgIGFUZXh0dXJlQ29vcmQ6MFxuICAgICAgICB9XG4gICAgKTtcbn1cblxuTWVzaFNoYWRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuU2hhZGVyLnByb3RvdHlwZSk7XG5NZXNoU2hhZGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IE1lc2hTaGFkZXI7XG5tb2R1bGUuZXhwb3J0cyA9IE1lc2hTaGFkZXI7XG5cbmNvcmUuU2hhZGVyTWFuYWdlci5yZWdpc3RlclBsdWdpbignbWVzaFNoYWRlcicsIE1lc2hTaGFkZXIpO1xuIiwiLy8gUmVmZXJlbmNlczpcbi8vIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0phdmFTY3JpcHQvUmVmZXJlbmNlL0dsb2JhbF9PYmplY3RzL01hdGgvc2lnblxuXG5pZiAoIU1hdGguc2lnbilcbntcbiAgICBNYXRoLnNpZ24gPSBmdW5jdGlvbiAoeCkge1xuICAgICAgICB4ID0gK3g7XG4gICAgICAgIGlmICh4ID09PSAwIHx8IGlzTmFOKHgpKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4geDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4geCA+IDAgPyAxIDogLTE7XG4gICAgfTtcbn1cbiIsIi8vIFJlZmVyZW5jZXM6XG4vLyBodHRwczovL2dpdGh1Yi5jb20vc2luZHJlc29yaHVzL29iamVjdC1hc3NpZ25cbi8vIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0phdmFTY3JpcHQvUmVmZXJlbmNlL0dsb2JhbF9PYmplY3RzL09iamVjdC9hc3NpZ25cblxuaWYgKCFPYmplY3QuYXNzaWduKVxue1xuICAgIE9iamVjdC5hc3NpZ24gPSByZXF1aXJlKCdvYmplY3QtYXNzaWduJyk7XG59XG4iLCJyZXF1aXJlKCcuL09iamVjdC5hc3NpZ24nKTtcbnJlcXVpcmUoJy4vcmVxdWVzdEFuaW1hdGlvbkZyYW1lJyk7XG5yZXF1aXJlKCcuL01hdGguc2lnbicpO1xuIiwiLy8gUmVmZXJlbmNlczpcbi8vIGh0dHA6Ly9wYXVsaXJpc2guY29tLzIwMTEvcmVxdWVzdGFuaW1hdGlvbmZyYW1lLWZvci1zbWFydC1hbmltYXRpbmcvXG4vLyBodHRwczovL2dpc3QuZ2l0aHViLmNvbS8xNTc5NjcxXG4vLyBodHRwOi8vdXBkYXRlcy5odG1sNXJvY2tzLmNvbS8yMDEyLzA1L3JlcXVlc3RBbmltYXRpb25GcmFtZS1BUEktbm93LXdpdGgtc3ViLW1pbGxpc2Vjb25kLXByZWNpc2lvblxuLy8gaHR0cHM6Ly9naXN0LmdpdGh1Yi5jb20vdGltaGFsbC80MDc4NjE0XG4vLyBodHRwczovL2dpdGh1Yi5jb20vRmluYW5jaWFsLVRpbWVzL3BvbHlmaWxsLXNlcnZpY2UvdHJlZS9tYXN0ZXIvcG9seWZpbGxzL3JlcXVlc3RBbmltYXRpb25GcmFtZVxuXG4vLyBFeHBlY3RlZCB0byBiZSB1c2VkIHdpdGggQnJvd3NlcmZpeVxuLy8gQnJvd3NlcmlmeSBhdXRvbWF0aWNhbGx5IGRldGVjdHMgdGhlIHVzZSBvZiBgZ2xvYmFsYCBhbmQgcGFzc2VzIHRoZVxuLy8gY29ycmVjdCByZWZlcmVuY2Ugb2YgYGdsb2JhbGAsIGBzZWxmYCwgYW5kIGZpbmFsbHkgYHdpbmRvd2BcblxuLy8gRGF0ZS5ub3dcbmlmICghKERhdGUubm93ICYmIERhdGUucHJvdG90eXBlLmdldFRpbWUpKSB7XG4gICAgRGF0ZS5ub3cgPSBmdW5jdGlvbiBub3coKSB7XG4gICAgICAgIHJldHVybiBuZXcgRGF0ZSgpLmdldFRpbWUoKTtcbiAgICB9O1xufVxuXG4vLyBwZXJmb3JtYW5jZS5ub3dcbmlmICghKGdsb2JhbC5wZXJmb3JtYW5jZSAmJiBnbG9iYWwucGVyZm9ybWFuY2Uubm93KSkge1xuICAgIHZhciBzdGFydFRpbWUgPSBEYXRlLm5vdygpO1xuICAgIGlmICghZ2xvYmFsLnBlcmZvcm1hbmNlKSB7XG4gICAgICAgIGdsb2JhbC5wZXJmb3JtYW5jZSA9IHt9O1xuICAgIH1cbiAgICBnbG9iYWwucGVyZm9ybWFuY2Uubm93ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gRGF0ZS5ub3coKSAtIHN0YXJ0VGltZTtcbiAgICB9O1xufVxuXG4vLyByZXF1ZXN0QW5pbWF0aW9uRnJhbWVcbnZhciBsYXN0VGltZSA9IERhdGUubm93KCk7XG52YXIgdmVuZG9ycyA9IFsnbXMnLCAnbW96JywgJ3dlYmtpdCcsICdvJ107XG5cbmZvcih2YXIgeCA9IDA7IHggPCB2ZW5kb3JzLmxlbmd0aCAmJiAhZ2xvYmFsLnJlcXVlc3RBbmltYXRpb25GcmFtZTsgKyt4KSB7XG4gICAgZ2xvYmFsLnJlcXVlc3RBbmltYXRpb25GcmFtZSA9IGdsb2JhbFt2ZW5kb3JzW3hdICsgJ1JlcXVlc3RBbmltYXRpb25GcmFtZSddO1xuICAgIGdsb2JhbC5jYW5jZWxBbmltYXRpb25GcmFtZSA9IGdsb2JhbFt2ZW5kb3JzW3hdICsgJ0NhbmNlbEFuaW1hdGlvbkZyYW1lJ10gfHxcbiAgICAgICAgZ2xvYmFsW3ZlbmRvcnNbeF0gKyAnQ2FuY2VsUmVxdWVzdEFuaW1hdGlvbkZyYW1lJ107XG59XG5cbmlmICghZ2xvYmFsLnJlcXVlc3RBbmltYXRpb25GcmFtZSkge1xuICAgIGdsb2JhbC5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUgPSBmdW5jdGlvbiAoY2FsbGJhY2spIHtcbiAgICAgICAgaWYgKHR5cGVvZiBjYWxsYmFjayAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihjYWxsYmFjayArICdpcyBub3QgYSBmdW5jdGlvbicpO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGN1cnJlbnRUaW1lID0gRGF0ZS5ub3coKSxcbiAgICAgICAgICAgIGRlbGF5ID0gMTYgKyBsYXN0VGltZSAtIGN1cnJlbnRUaW1lO1xuXG4gICAgICAgIGlmIChkZWxheSA8IDApIHtcbiAgICAgICAgICAgIGRlbGF5ID0gMDtcbiAgICAgICAgfVxuXG4gICAgICAgIGxhc3RUaW1lID0gY3VycmVudFRpbWU7XG5cbiAgICAgICAgcmV0dXJuIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgbGFzdFRpbWUgPSBEYXRlLm5vdygpO1xuICAgICAgICAgICAgY2FsbGJhY2socGVyZm9ybWFuY2Uubm93KCkpO1xuICAgICAgICB9LCBkZWxheSk7XG4gICAgfTtcbn1cblxuaWYgKCFnbG9iYWwuY2FuY2VsQW5pbWF0aW9uRnJhbWUpIHtcbiAgICBnbG9iYWwuY2FuY2VsQW5pbWF0aW9uRnJhbWUgPSBmdW5jdGlvbihpZCkge1xuICAgICAgICBjbGVhclRpbWVvdXQoaWQpO1xuICAgIH07XG59XG4iXX0= //# sourceMappingURL=pixi.js.map diff --git a/bin/pixi.min.js b/bin/pixi.min.js index f7a788e..d59cd98 100644 --- a/bin/pixi.min.js +++ b/bin/pixi.min.js @@ -1,11 +1,11 @@ -!function(t){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=t();else if("function"==typeof define&&define.amd)define([],t);else{var e;e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:this,e.PIXI=t()}}(function(){var t;return function e(t,r,i){function n(s,a){if(!r[s]){if(!t[s]){var h="function"==typeof require&&require;if(!a&&h)return h(s,!0);if(o)return o(s,!0);var u=new Error("Cannot find module '"+s+"'");throw u.code="MODULE_NOT_FOUND",u}var l=r[s]={exports:{}};t[s][0].call(l.exports,function(e){var r=t[s][1][e];return n(r?r:e)},l,l.exports,e,t,r,i)}return r[s].exports}for(var o="function"==typeof require&&require,s=0;s=t.byteLength?i.bufferSubData(this.type,e,t):i.bufferData(this.type,t,this.drawType),this.data=t},n.prototype.bind=function(){var t=this.gl;t.bindBuffer(this.type,this.buffer)},n.createVertexBuffer=function(t,e,r){return new n(t,t.ARRAY_BUFFER,e,r)},n.createIndexBuffer=function(t,e,r){return new n(t,t.ELEMENT_ARRAY_BUFFER,e,r)},n.create=function(t,e,r,i){return new n(t,e,i)},e.exports=n},{}],3:[function(t,e,r){var i=t("./GLTexture"),n=function(t,e,r){this.gl=t,this.framebuffer=t.createFramebuffer(),this.stencil=null,this.texture=null,this.width=e||100,this.height=r||100};n.prototype.enableTexture=function(t){var e=this.gl;this.texture=t||new i(e),this.texture.bind(),this.bind(),e.framebufferTexture2D(e.FRAMEBUFFER,e.COLOR_ATTACHMENT0,e.TEXTURE_2D,this.texture.texture,0)},n.prototype.enableStencil=function(){if(!this.stencil){var t=this.gl;this.stencil=t.createRenderbuffer(),t.bindRenderbuffer(t.RENDERBUFFER,this.stencil),t.framebufferRenderbuffer(t.FRAMEBUFFER,t.DEPTH_STENCIL_ATTACHMENT,t.RENDERBUFFER,this.stencil),t.renderbufferStorage(t.RENDERBUFFER,t.DEPTH_STENCIL,this.width,this.height)}},n.prototype.clear=function(t,e,r,i){this.bind();var n=this.gl;n.clearColor(t,e,r,i),n.clear(n.COLOR_BUFFER_BIT)},n.prototype.bind=function(){var t=this.gl;t.bindFramebuffer(t.FRAMEBUFFER,this.framebuffer)},n.prototype.unbind=function(){gl.bindFramebuffer(gl.FRAMEBUFFER,null)},n.prototype.resize=function(t,e){var r=this.gl;this.width=t,this.height=e,this.texture&&(this.texture.bind(),r.texImage2D(r.TEXTURE_2D,0,this.format,t,e,0,this.format,this.type,null)),this.stencil&&(r.bindRenderbuffer(r.RENDERBUFFER,this.stencil),r.renderbufferStorage(r.RENDERBUFFER,r.DEPTH_STENCIL,t,e))},n.prototype.destroy=function(){var t=this.gl;t.deleteFramebuffer(this.framebuffer)},n.createRGBA=function(t,e,r,o){var s=new i(t,e,r);s.enableNearestScaling(),s.enableWrapClamp(),t.texImage2D(t.TEXTURE_2D,0,t.RGBA,e,r,0,t.RGBA,t.UNSIGNED_BYTE,o);var a=new n(t,e,r);return a.enableTexture(s),a},n.createFloat32=function(t,e,r,o){var s=new i.fromData(t,o,e,r);s.enableNearestScaling(),s.enableWrapClamp();var a=new n(t,e,r);return a.enableTexture(s),a},e.exports=n},{"./GLTexture":5}],4:[function(t,e,r){var i=t("./shader/compileProgram"),n=t("./shader/extractAttributes"),o=t("./shader/extractUniforms"),s=t("./shader/generateUniformAccessObject"),a=function(t,e,r){this.gl=t,this.program=i(t,e,r),this.attributes=n(t,this.program);var a=o(t,this.program);this.uniforms=s(t,a)};a.prototype.bind=function(){this.gl.useProgram(this.program)},a.prototype.destroy=function(){this.gl},e.exports=a},{"./shader/compileProgram":9,"./shader/extractAttributes":11,"./shader/extractUniforms":12,"./shader/generateUniformAccessObject":13}],5:[function(t,e,r){var i=function(t,e,r,i,n){this.gl=t,this.texture=t.createTexture(),this.mipmap=!1,this.premultiplyAlpha=!1,this.width=e||0,this.height=r||0,this.format=i||t.RGBA,this.type=n||t.UNSIGNED_BYTE};i.prototype.upload=function(t){this.bind();var e=this.gl;this.width=t.width,this.height=t.height,e.pixelStorei(e.UNPACK_PREMULTIPLY_ALPHA_WEBGL,this.premultiplyAlpha),e.texImage2D(e.TEXTURE_2D,0,this.format,this.format,this.type,t)};var n=!1;i.prototype.uploadData=function(t,e,r){if(this.bind(),this.width=e||this.width,this.height=r||this.height,t instanceof Float32Array){if(!n){var i=gl.getExtension("OES_texture_float");if(!i)throw new Error("floating point textures not available");n=!0}this.type=gl.FLOAT}else this.type=gl.UNSIGNED_BYTE;gl.pixelStorei(gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL,this.premultiplyAlpha),gl.texImage2D(gl.TEXTURE_2D,0,this.format,this.width,this.height,0,this.format,this.type,t)},i.prototype.bind=function(t){var e=this.gl;void 0!==t&&e.activeTexture(e.TEXTURE0+t),e.bindTexture(e.TEXTURE_2D,this.texture)},i.prototype.unbind=function(){var t=this.gl;t.bindTexture(t.TEXTURE_2D,null)},i.prototype.minFilter=function(t){var e=this.gl;this.bind(),this.mipmap?e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MIN_FILTER,t?e.LINEAR_MIPMAP_LINEAR:e.NEAREST_MIPMAP_NEAREST):e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MIN_FILTER,t?e.LINEAR:e.NEAREST)},i.prototype.magFilter=function(t){var e=this.gl;this.bind(),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MAG_FILTER,t?e.LINEAR:e.NEAREST)},i.prototype.enableMipmap=function(){this.bind(),this.mipmap=!0,gl.generateMipmap(gl.TEXTURE_2D)},i.prototype.enableLinearScaling=function(){this.minFilter(!0),this.magFilter(!0)},i.prototype.enableNearestScaling=function(){this.minFilter(!1),this.magFilter(!1)},i.prototype.enableWrapClamp=function(){var t=this.gl;this.bind(),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_WRAP_S,t.CLAMP_TO_EDGE),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_WRAP_T,t.CLAMP_TO_EDGE)},i.prototype.enableWrapRepeat=function(){var t=this.gl;this.bind(),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_WRAP_S,t.REPEAT),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_WRAP_T,t.REPEAT)},i.prototype.destroy=function(){var t=this.gl;t.deleteTexture(this.texture)},i.fromSource=function(t,e,r){var n=new i(t);return n.premultiplyAlpha=r||!1,n.upload(e),n},i.fromData=function(t,e,r,n){var o=new i(t);return o.uploadData(e,r,n),o},e.exports=i},{}],6:[function(t,e,r){function i(t){this.nativeVaoExtension=t.getExtension("OES_vertex_array_object")||t.getExtension("MOZ_OES_vertex_array_object")||t.getExtension("WEBKIT_OES_vertex_array_object"),this.nativeVaoExtension&&(this.nativeVao=this.nativeVaoExtension.createVertexArrayOES()),this.gl=t,this.attributes=[],this.indexBuffer=null,this.dirty=!1}i.prototype.constructor=i,e.exports=i,i.prototype.bind=function(){this.nativeVao?(this.nativeVaoExtension.bindVertexArrayOES(this.nativeVao),this.dirty&&(this.dirty=!1,this.activate())):this.activate()},i.prototype.unbind=function(){this.nativeVao&&this.nativeVaoExtension.bindVertexArrayOES(null)},i.prototype.activate=function(){for(var t=this.gl,e=0;es;s++){var a=t.getActiveAttrib(e,s),h=i(t,a.type);r[a.name]={type:h,size:n(h),location:t.getAttribLocation(e,a.name),pointer:function(e,r,i,n){t.vertexAttribPointer(this.location,this.size,e||t.FLOAT,r||!1,i||0,n||0)}}}return r};e.exports=o},{"./mapSize":14,"./mapType":15}],12:[function(t,e,r){var i=t("./mapType"),n=t("./defaultValue"),o=function(t,e){for(var r={},o=t.getProgramParameter(e,t.ACTIVE_UNIFORMS),s=0;o>s;s++){var a=t.getActiveUniform(e,s),h=a.name.replace(/\[.*?\]/,""),u=i(t,a.type);r[h]={type:u,size:a.size,location:t.getUniformLocation(e,h),value:n(u,a.size)}}return r};e.exports=o},{"./defaultValue":10,"./mapType":15}],13:[function(t,e,r){var i=function(t,e){var r={data:{}};r.gl=t;for(var i=Object.keys(e),a=0;a=0&&t.length%1===0}function c(t,e){for(var r=-1,i=t.length;++ri?i:null}):(r=Y(t),e=r.length,function(){return i++,e>i?r[i]:null})}function y(t,e){return e=null==e?t.length-1:+e,function(){for(var r=Math.max(arguments.length-e,0),i=Array(r),n=0;r>n;n++)i[n]=arguments[n+e];switch(e){case 0:return t.call(this,i);case 1:return t.call(this,arguments[0],i)}}}function x(t){return function(e,r,i){return t(e,i)}}function b(t){return function(e,r,i){i=u(i||n),e=e||[];var o=m(e);if(0>=t)return i(null);var s=!1,a=0,l=!1;!function c(){if(s&&0>=a)return i(null);for(;t>a&&!l;){var n=o();if(null===n)return s=!0,void(0>=a&&i(null));a+=1,r(e[n],n,h(function(t){a-=1,t?(i(t),l=!0):c()}))}}()}}function _(t){return function(e,r,i){return t(N.eachOf,e,r,i)}}function T(t){return function(e,r,i,n){return t(b(r),e,i,n)}}function E(t){return function(e,r,i){return t(N.eachOfSeries,e,r,i)}}function S(t,e,r,i){i=u(i||n),e=e||[];var o=l(e)?[]:{};t(e,function(t,e,i){r(t,function(t,r){o[e]=r,i(t)})},function(t){i(t,o)})}function w(t,e,r,i){var n=[];t(e,function(t,e,i){r(t,function(r){r&&n.push({index:e,value:t}),i()})},function(){i(p(n.sort(function(t,e){return t.index-e.index}),function(t){return t.value}))})}function C(t,e,r,i){w(t,e,function(t,e){r(t,function(t){e(!t)})},i)}function A(t,e,r){return function(i,n,o,s){function a(){s&&s(r(!1,void 0))}function h(t,i,n){return s?void o(t,function(i){s&&e(i)&&(s(r(!0,t)),s=o=!1),n()}):n()}arguments.length>3?t(i,n,h,a):(s=o,o=n,t(i,h,a))}}function M(t,e){return e}function R(t,e,r){r=r||n;var i=l(e)?[]:{};t(e,function(t,e,r){t(y(function(t,n){n.length<=1&&(n=n[0]),i[e]=n,r(t)}))},function(t){r(t,i)})}function O(t,e,r,i){var n=[];t(e,function(t,e,i){r(t,function(t,e){n=n.concat(e||[]),i(t)})},function(t){i(t,n)})}function D(t,e,r){function i(t,e,r,i){if(null!=i&&"function"!=typeof i)throw new Error("task callback must be a function");return t.started=!0,j(e)||(e=[e]),0===e.length&&t.idle()?N.setImmediate(function(){t.drain()}):(c(e,function(e){var o={data:e,callback:i||n};r?t.tasks.unshift(o):t.tasks.push(o),t.tasks.length===t.concurrency&&t.saturated()}),void N.setImmediate(t.process))}function o(t,e){return function(){s-=1;var r=!1,i=arguments;c(e,function(t){c(a,function(e,i){e!==t||r||(a.splice(i,1),r=!0)}),t.callback.apply(t,i)}),t.tasks.length+s===0&&t.drain(),t.process()}}if(null==e)e=1;else if(0===e)throw new Error("Concurrency must not be zero");var s=0,a=[],u={tasks:[],concurrency:e,payload:r,saturated:n,empty:n,drain:n,started:!1,paused:!1,push:function(t,e){i(u,t,!1,e)},kill:function(){u.drain=n,u.tasks=[]},unshift:function(t,e){i(u,t,!0,e)},process:function(){if(!u.paused&&s=e;e++)N.setImmediate(u.process)}}};return u}function P(t){return y(function(e,r){e.apply(null,r.concat([y(function(e,r){"object"==typeof console&&(e?console.error&&console.error(e):console[t]&&c(r,function(e){console[t](e)}))})]))})}function F(t){return function(e,r,i){t(d(e),r,i)}}function L(t){return y(function(e,r){var i=y(function(r){var i=this,n=r.pop();return t(e,function(t,e,n){t.apply(i,r.concat([n]))},n)});return r.length?i.apply(this,r):i})}function B(t){return y(function(e){var r=e.pop();e.push(function(){var t=arguments;i?N.setImmediate(function(){r.apply(null,t)}):r.apply(null,t)});var i=!0;t.apply(this,e),i=!1})}var I,N={},U="object"==typeof self&&self.self===self&&self||"object"==typeof i&&i.global===i&&i||this;null!=U&&(I=U.async),N.noConflict=function(){return U.async=I,N};var k=Object.prototype.toString,j=Array.isArray||function(t){return"[object Array]"===k.call(t)},G=function(t){var e=typeof t;return"function"===e||"object"===e&&!!t},Y=Object.keys||function(t){var e=[];for(var r in t)t.hasOwnProperty(r)&&e.push(r);return e},X="function"==typeof setImmediate&&setImmediate,z=X?function(t){X(t)}:function(t){setTimeout(t,0)};"object"==typeof e&&"function"==typeof e.nextTick?N.nextTick=e.nextTick:N.nextTick=z,N.setImmediate=X?z:N.nextTick,N.forEach=N.each=function(t,e,r){return N.eachOf(t,x(e),r)},N.forEachSeries=N.eachSeries=function(t,e,r){return N.eachOfSeries(t,x(e),r)},N.forEachLimit=N.eachLimit=function(t,e,r,i){return b(e)(t,x(r),i)},N.forEachOf=N.eachOf=function(t,e,r){function i(t){a--,t?r(t):null===o&&0>=a&&r(null)}r=u(r||n),t=t||[];for(var o,s=m(t),a=0;null!=(o=s());)a+=1,e(t[o],o,h(i));0===a&&r(null)},N.forEachOfSeries=N.eachOfSeries=function(t,e,r){function i(){var n=!0;return null===s?r(null):(e(t[s],s,h(function(t){if(t)r(t);else{if(s=o(),null===s)return r(null);n?N.setImmediate(i):i()}})),void(n=!1))}r=u(r||n),t=t||[];var o=m(t),s=o();i()},N.forEachOfLimit=N.eachOfLimit=function(t,e,r,i){b(e)(t,r,i)},N.map=_(S),N.mapSeries=E(S),N.mapLimit=T(S),N.inject=N.foldl=N.reduce=function(t,e,r,i){N.eachOfSeries(t,function(t,i,n){r(e,t,function(t,r){e=r,n(t)})},function(t){i(t,e)})},N.foldr=N.reduceRight=function(t,e,r,i){var n=p(t,o).reverse();N.reduce(n,e,r,i)},N.transform=function(t,e,r,i){3===arguments.length&&(i=r,r=e,e=j(t)?[]:{}),N.eachOf(t,function(t,i,n){r(e,t,i,n)},function(t){i(t,e)})},N.select=N.filter=_(w),N.selectLimit=N.filterLimit=T(w),N.selectSeries=N.filterSeries=E(w),N.reject=_(C),N.rejectLimit=T(C),N.rejectSeries=E(C),N.any=N.some=A(N.eachOf,s,o),N.someLimit=A(N.eachOfLimit,s,o),N.all=N.every=A(N.eachOf,a,a),N.everyLimit=A(N.eachOfLimit,a,a),N.detect=A(N.eachOf,o,M),N.detectSeries=A(N.eachOfSeries,o,M),N.detectLimit=A(N.eachOfLimit,o,M),N.sortBy=function(t,e,r){function i(t,e){var r=t.criteria,i=e.criteria;return i>r?-1:r>i?1:0}N.map(t,function(t,r){e(t,function(e,i){e?r(e):r(null,{value:t,criteria:i})})},function(t,e){return t?r(t):void r(null,p(e.sort(i),function(t){return t.value}))})},N.auto=function(t,e,r){function i(t){d.unshift(t)}function o(t){var e=g(d,t);e>=0&&d.splice(e,1)}function s(){h--,c(d.slice(0),function(t){t()})}r||(r=e,e=null),r=u(r||n);var a=Y(t),h=a.length;if(!h)return r(null);e||(e=h);var l={},p=0,d=[];i(function(){h||r(null,l)}),c(a,function(n){function a(){return e>p&&f(m,function(t,e){return t&&l.hasOwnProperty(e)},!0)&&!l.hasOwnProperty(n)}function h(){a()&&(p++,o(h),c[c.length-1](d,l))}for(var u,c=j(t[n])?t[n]:[t[n]],d=y(function(t,e){if(p--,e.length<=1&&(e=e[0]),t){var i={};v(l,function(t,e){i[e]=t}),i[n]=e,r(t,i)}else l[n]=e,N.setImmediate(s)}),m=c.slice(0,c.length-1),x=m.length;x--;){if(!(u=t[m[x]]))throw new Error("Has inexistant dependency");if(j(u)&&g(u,n)>=0)throw new Error("Has cyclic dependencies")}a()?(p++,c[c.length-1](d,l)):i(h)})},N.retry=function(t,e,r){function i(t,e){if("number"==typeof e)t.times=parseInt(e,10)||o;else{if("object"!=typeof e)throw new Error("Unsupported argument type for 'times': "+typeof e);t.times=parseInt(e.times,10)||o,t.interval=parseInt(e.interval,10)||s}}function n(t,e){function r(t,r){return function(i){t(function(t,e){i(!t||r,{err:t,result:e})},e)}}function i(t){return function(e){setTimeout(function(){e(null)},t)}}for(;h.times;){var n=!(h.times-=1);a.push(r(h.task,n)),!n&&h.interval>0&&a.push(i(h.interval))}N.series(a,function(e,r){r=r[r.length-1],(t||h.callback)(r.err,r.result)})}var o=5,s=0,a=[],h={times:o,interval:s},u=arguments.length;if(1>u||u>3)throw new Error("Invalid arguments - must be either (task), (task, callback), (times, task) or (times, task, callback)");return 2>=u&&"function"==typeof t&&(r=e,e=t),"function"!=typeof t&&i(h,t),h.callback=r,h.task=e,h.callback?n():n},N.waterfall=function(t,e){function r(t){return y(function(i,n){if(i)e.apply(null,[i].concat(n));else{var o=t.next();o?n.push(r(o)):n.push(e),B(t).apply(null,n)}})}if(e=u(e||n),!j(t)){var i=new Error("First argument to waterfall must be an array of functions");return e(i)}return t.length?void r(N.iterator(t))():e()},N.parallel=function(t,e){R(N.eachOf,t,e)},N.parallelLimit=function(t,e,r){R(b(e),t,r)},N.series=function(t,e){R(N.eachOfSeries,t,e)},N.iterator=function(t){function e(r){function i(){return t.length&&t[r].apply(null,arguments),i.next()}return i.next=function(){return ri;){var o=i+(n-i+1>>>1);r(e,t[o])>=0?i=o:n=o-1}return i}function o(t,e,o,s){if(null!=s&&"function"!=typeof s)throw new Error("task callback must be a function");return t.started=!0,j(e)||(e=[e]),0===e.length?N.setImmediate(function(){t.drain()}):void c(e,function(e){var a={data:e,priority:o,callback:"function"==typeof s?s:n};t.tasks.splice(i(t.tasks,a,r)+1,0,a),t.tasks.length===t.concurrency&&t.saturated(),N.setImmediate(t.process)})}var s=N.queue(t,e);return s.push=function(t,e,r){o(s,t,e,r)},delete s.unshift,s},N.cargo=function(t,e){return D(t,1,e)},N.log=P("log"),N.dir=P("dir"),N.memoize=function(t,e){var r={},i={};e=e||o;var n=y(function(n){var o=n.pop(),s=e.apply(null,n);s in r?N.setImmediate(function(){o.apply(null,r[s])}):s in i?i[s].push(o):(i[s]=[o],t.apply(null,n.concat([y(function(t){r[s]=t;var e=i[s];delete i[s];for(var n=0,o=e.length;o>n;n++)e[n].apply(null,t)})])))});return n.memo=r,n.unmemoized=t,n},N.unmemoize=function(t){return function(){return(t.unmemoized||t).apply(null,arguments)}},N.times=F(N.map),N.timesSeries=F(N.mapSeries),N.timesLimit=function(t,e,r,i){return N.mapLimit(d(t),e,r,i)},N.seq=function(){var t=arguments;return y(function(e){var r=this,i=e[e.length-1];"function"==typeof i?e.pop():i=n,N.reduce(t,e,function(t,e,i){e.apply(r,t.concat([y(function(t,e){i(t,e)})]))},function(t,e){i.apply(r,[t].concat(e))})})},N.compose=function(){return N.seq.apply(null,Array.prototype.reverse.call(arguments))},N.applyEach=L(N.eachOf),N.applyEachSeries=L(N.eachOfSeries),N.forever=function(t,e){function r(t){return t?i(t):void o(r)}var i=h(e||n),o=B(t);r()},N.ensureAsync=B,N.constant=y(function(t){var e=[null].concat(t);return function(t){return t.apply(this,e)}}),N.wrapSync=N.asyncify=function(t){return y(function(e){var r,i=e.pop();try{r=t.apply(this,e)}catch(n){return i(n)}G(r)&&"function"==typeof r.then?r.then(function(t){i(null,t)})["catch"](function(t){i(t.message?t:new Error(t))}):i(null,r)})},"object"==typeof r&&r.exports?r.exports=N:"function"==typeof t&&t.amd?t([],function(){return N}):U.async=N}()}).call(this,e("_process"),"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{_process:18}],17:[function(t,e,r){(function(t){function e(t,e){for(var r=0,i=t.length-1;i>=0;i--){var n=t[i];"."===n?t.splice(i,1):".."===n?(t.splice(i,1),r++):r&&(t.splice(i,1),r--)}if(e)for(;r--;r)t.unshift("..");return t}function i(t,e){if(t.filter)return t.filter(e);for(var r=[],i=0;i=-1&&!n;o--){var s=o>=0?arguments[o]:t.cwd();if("string"!=typeof s)throw new TypeError("Arguments to path.resolve must be strings");s&&(r=s+"/"+r,n="/"===s.charAt(0))}return r=e(i(r.split("/"),function(t){return!!t}),!n).join("/"),(n?"/":"")+r||"."},r.normalize=function(t){var n=r.isAbsolute(t),o="/"===s(t,-1);return t=e(i(t.split("/"),function(t){return!!t}),!n).join("/"),t||n||(t="."),t&&o&&(t+="/"),(n?"/":"")+t},r.isAbsolute=function(t){return"/"===t.charAt(0)},r.join=function(){var t=Array.prototype.slice.call(arguments,0);return r.normalize(i(t,function(t,e){if("string"!=typeof t)throw new TypeError("Arguments to path.join must be strings");return t}).join("/"))},r.relative=function(t,e){function i(t){for(var e=0;e=0&&""===t[r];r--);return e>r?[]:t.slice(e,r-e+1)}t=r.resolve(t).substr(1),e=r.resolve(e).substr(1);for(var n=i(t.split("/")),o=i(e.split("/")),s=Math.min(n.length,o.length),a=s,h=0;s>h;h++)if(n[h]!==o[h]){a=h;break}for(var u=[],h=a;he&&(e=t.length+e),t.substr(e,r)}}).call(this,t("_process"))},{_process:18}],18:[function(t,e,r){function i(){l=!1,a.length?u=a.concat(u):c=-1,u.length&&n()}function n(){if(!l){var t=setTimeout(i);l=!0;for(var e=u.length;e;){for(a=u,u=[];++c1)for(var r=1;r1&&(i=r[0]+"@",t=r[1]),t=t.replace(F,".");var n=t.split("."),o=s(n,e).join(".");return i+o}function h(t){for(var e,r,i=[],n=0,o=t.length;o>n;)e=t.charCodeAt(n++),e>=55296&&56319>=e&&o>n?(r=t.charCodeAt(n++),56320==(64512&r)?i.push(((1023&e)<<10)+(1023&r)+65536):(i.push(e),n--)):i.push(e);return i}function u(t){return s(t,function(t){var e="";return t>65535&&(t-=65536,e+=N(t>>>10&1023|55296),t=56320|1023&t),e+=N(t)}).join("")}function l(t){return 10>t-48?t-22:26>t-65?t-65:26>t-97?t-97:E}function c(t,e){return t+22+75*(26>t)-((0!=e)<<5)}function p(t,e,r){var i=0;for(t=r?I(t/A):t>>1,t+=I(t/e);t>B*w>>1;i+=E)t=I(t/B);return I(i+(B+1)*t/(t+C))}function d(t){var e,r,i,n,s,a,h,c,d,f,v=[],g=t.length,m=0,y=R,x=M;for(r=t.lastIndexOf(O),0>r&&(r=0),i=0;r>i;++i)t.charCodeAt(i)>=128&&o("not-basic"),v.push(t.charCodeAt(i));for(n=r>0?r+1:0;g>n;){for(s=m,a=1,h=E;n>=g&&o("invalid-input"),c=l(t.charCodeAt(n++)),(c>=E||c>I((T-m)/a))&&o("overflow"),m+=c*a,d=x>=h?S:h>=x+w?w:h-x,!(d>c);h+=E)f=E-d,a>I(T/f)&&o("overflow"),a*=f;e=v.length+1,x=p(m-s,e,0==s),I(m/e)>T-y&&o("overflow"),y+=I(m/e),m%=e,v.splice(m++,0,y)}return u(v)}function f(t){var e,r,i,n,s,a,u,l,d,f,v,g,m,y,x,b=[];for(t=h(t),g=t.length,e=R,r=0,s=M,a=0;g>a;++a)v=t[a],128>v&&b.push(N(v));for(i=n=b.length,n&&b.push(O);g>i;){for(u=T,a=0;g>a;++a)v=t[a],v>=e&&u>v&&(u=v);for(m=i+1,u-e>I((T-r)/m)&&o("overflow"),r+=(u-e)*m,e=u,a=0;g>a;++a)if(v=t[a],e>v&&++r>T&&o("overflow"),v==e){for(l=r,d=E;f=s>=d?S:d>=s+w?w:d-s,!(f>l);d+=E)x=l-f,y=E-f,b.push(N(c(f+x%y,0))),l=I(x/y);b.push(N(c(l,0))),s=p(r,m,i==n),r=0,++i}++r,++e}return b.join("")}function v(t){return a(t,function(t){return D.test(t)?d(t.slice(4).toLowerCase()):t})}function g(t){return a(t,function(t){return P.test(t)?"xn--"+f(t):t})}var m="object"==typeof i&&i&&!i.nodeType&&i,y="object"==typeof r&&r&&!r.nodeType&&r,x="object"==typeof e&&e;(x.global===x||x.window===x||x.self===x)&&(n=x);var b,_,T=2147483647,E=36,S=1,w=26,C=38,A=700,M=72,R=128,O="-",D=/^xn--/,P=/[^\x20-\x7E]/,F=/[\x2E\u3002\uFF0E\uFF61]/g,L={overflow:"Overflow: input needs wider integers to process","not-basic":"Illegal input >= 0x80 (not a basic code point)","invalid-input":"Invalid input"},B=E-S,I=Math.floor,N=String.fromCharCode;if(b={version:"1.3.2",ucs2:{decode:h,encode:u},decode:d,encode:f,toASCII:g,toUnicode:v},"function"==typeof t&&"object"==typeof t.amd&&t.amd)t("punycode",function(){return b});else if(m&&y)if(r.exports==m)y.exports=b;else for(_ in b)b.hasOwnProperty(_)&&(m[_]=b[_]);else n.punycode=b}(this)}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{}],20:[function(t,e,r){"use strict";function i(t,e){return Object.prototype.hasOwnProperty.call(t,e)}e.exports=function(t,e,r,o){e=e||"&",r=r||"=";var s={};if("string"!=typeof t||0===t.length)return s;var a=/\+/g;t=t.split(e);var h=1e3;o&&"number"==typeof o.maxKeys&&(h=o.maxKeys);var u=t.length;h>0&&u>h&&(u=h);for(var l=0;u>l;++l){var c,p,d,f,v=t[l].replace(a,"%20"),g=v.indexOf(r);g>=0?(c=v.substr(0,g),p=v.substr(g+1)):(c=v, -p=""),d=decodeURIComponent(c),f=decodeURIComponent(p),i(s,d)?n(s[d])?s[d].push(f):s[d]=[s[d],f]:s[d]=f}return s};var n=Array.isArray||function(t){return"[object Array]"===Object.prototype.toString.call(t)}},{}],21:[function(t,e,r){"use strict";function i(t,e){if(t.map)return t.map(e);for(var r=[],i=0;i",'"',"`"," ","\r","\n"," "],g=["{","}","|","\\","^","`"].concat(v),m=["'"].concat(g),y=["%","/","?",";","#"].concat(m),x=["/","?","#"],b=255,_=/^[a-z0-9A-Z_-]{0,63}$/,T=/^([a-z0-9A-Z_-]{0,63})(.*)$/,E={javascript:!0,"javascript:":!0},S={javascript:!0,"javascript:":!0},w={http:!0,https:!0,ftp:!0,gopher:!0,file:!0,"http:":!0,"https:":!0,"ftp:":!0,"gopher:":!0,"file:":!0},C=t("querystring");i.prototype.parse=function(t,e,r){if(!h(t))throw new TypeError("Parameter 'url' must be a string, not "+typeof t);var i=t;i=i.trim();var n=d.exec(i);if(n){n=n[0];var o=n.toLowerCase();this.protocol=o,i=i.substr(n.length)}if(r||n||i.match(/^\/\/[^@\/]+@[^@\/]+/)){var s="//"===i.substr(0,2);!s||n&&S[n]||(i=i.substr(2),this.slashes=!0)}if(!S[n]&&(s||n&&!w[n])){for(var a=-1,u=0;ul)&&(a=l)}var c,f;f=-1===a?i.lastIndexOf("@"):i.lastIndexOf("@",a),-1!==f&&(c=i.slice(0,f),i=i.slice(f+1),this.auth=decodeURIComponent(c)),a=-1;for(var u=0;ul)&&(a=l)}-1===a&&(a=i.length),this.host=i.slice(0,a),i=i.slice(a),this.parseHost(),this.hostname=this.hostname||"";var v="["===this.hostname[0]&&"]"===this.hostname[this.hostname.length-1];if(!v)for(var g=this.hostname.split(/\./),u=0,A=g.length;A>u;u++){var M=g[u];if(M&&!M.match(_)){for(var R="",O=0,D=M.length;D>O;O++)R+=M.charCodeAt(O)>127?"x":M[O];if(!R.match(_)){var P=g.slice(0,u),F=g.slice(u+1),L=M.match(T);L&&(P.push(L[1]),F.unshift(L[2])),F.length&&(i="/"+F.join(".")+i),this.hostname=P.join(".");break}}}if(this.hostname.length>b?this.hostname="":this.hostname=this.hostname.toLowerCase(),!v){for(var B=this.hostname.split("."),I=[],u=0;uu;u++){var j=m[u],G=encodeURIComponent(j);G===j&&(G=escape(j)),i=i.split(j).join(G)}var Y=i.indexOf("#");-1!==Y&&(this.hash=i.substr(Y),i=i.slice(0,Y));var X=i.indexOf("?");if(-1!==X?(this.search=i.substr(X),this.query=i.substr(X+1),e&&(this.query=C.parse(this.query)),i=i.slice(0,X)):e&&(this.search="",this.query={}),i&&(this.pathname=i),w[o]&&this.hostname&&!this.pathname&&(this.pathname="/"),this.pathname||this.search){var U=this.pathname||"",N=this.search||"";this.path=U+N}return this.href=this.format(),this},i.prototype.format=function(){var t=this.auth||"";t&&(t=encodeURIComponent(t),t=t.replace(/%3A/i,":"),t+="@");var e=this.protocol||"",r=this.pathname||"",i=this.hash||"",n=!1,o="";this.host?n=t+this.host:this.hostname&&(n=t+(-1===this.hostname.indexOf(":")?this.hostname:"["+this.hostname+"]"),this.port&&(n+=":"+this.port)),this.query&&u(this.query)&&Object.keys(this.query).length&&(o=C.stringify(this.query));var s=this.search||o&&"?"+o||"";return e&&":"!==e.substr(-1)&&(e+=":"),this.slashes||(!e||w[e])&&n!==!1?(n="//"+(n||""),r&&"/"!==r.charAt(0)&&(r="/"+r)):n||(n=""),i&&"#"!==i.charAt(0)&&(i="#"+i),s&&"?"!==s.charAt(0)&&(s="?"+s),r=r.replace(/[?#]/g,function(t){return encodeURIComponent(t)}),s=s.replace("#","%23"),e+n+r+s+i},i.prototype.resolve=function(t){return this.resolveObject(n(t,!1,!0)).format()},i.prototype.resolveObject=function(t){if(h(t)){var e=new i;e.parse(t,!1,!0),t=e}var r=new i;if(Object.keys(this).forEach(function(t){r[t]=this[t]},this),r.hash=t.hash,""===t.href)return r.href=r.format(),r;if(t.slashes&&!t.protocol)return Object.keys(t).forEach(function(e){"protocol"!==e&&(r[e]=t[e])}),w[r.protocol]&&r.hostname&&!r.pathname&&(r.path=r.pathname="/"),r.href=r.format(),r;if(t.protocol&&t.protocol!==r.protocol){if(!w[t.protocol])return Object.keys(t).forEach(function(e){r[e]=t[e]}),r.href=r.format(),r;if(r.protocol=t.protocol,t.host||S[t.protocol])r.pathname=t.pathname;else{for(var n=(t.pathname||"").split("/");n.length&&!(t.host=n.shift()););t.host||(t.host=""),t.hostname||(t.hostname=""),""!==n[0]&&n.unshift(""),n.length<2&&n.unshift(""),r.pathname=n.join("/")}if(r.search=t.search,r.query=t.query,r.host=t.host||"",r.auth=t.auth,r.hostname=t.hostname||t.host,r.port=t.port,r.pathname||r.search){var o=r.pathname||"",s=r.search||"";r.path=o+s}return r.slashes=r.slashes||t.slashes,r.href=r.format(),r}var a=r.pathname&&"/"===r.pathname.charAt(0),u=t.host||t.pathname&&"/"===t.pathname.charAt(0),p=u||a||r.host&&t.pathname,d=p,f=r.pathname&&r.pathname.split("/")||[],n=t.pathname&&t.pathname.split("/")||[],v=r.protocol&&!w[r.protocol];if(v&&(r.hostname="",r.port=null,r.host&&(""===f[0]?f[0]=r.host:f.unshift(r.host)),r.host="",t.protocol&&(t.hostname=null,t.port=null,t.host&&(""===n[0]?n[0]=t.host:n.unshift(t.host)),t.host=null),p=p&&(""===n[0]||""===f[0])),u)r.host=t.host||""===t.host?t.host:r.host,r.hostname=t.hostname||""===t.hostname?t.hostname:r.hostname,r.search=t.search,r.query=t.query,f=n;else if(n.length)f||(f=[]),f.pop(),f=f.concat(n),r.search=t.search,r.query=t.query;else if(!c(t.search)){if(v){r.hostname=r.host=f.shift();var g=r.host&&r.host.indexOf("@")>0?r.host.split("@"):!1;g&&(r.auth=g.shift(),r.host=r.hostname=g.shift())}return r.search=t.search,r.query=t.query,l(r.pathname)&&l(r.search)||(r.path=(r.pathname?r.pathname:"")+(r.search?r.search:"")),r.href=r.format(),r}if(!f.length)return r.pathname=null,r.search?r.path="/"+r.search:r.path=null,r.href=r.format(),r;for(var m=f.slice(-1)[0],y=(r.host||t.host)&&("."===m||".."===m)||""===m,x=0,b=f.length;b>=0;b--)m=f[b],"."==m?f.splice(b,1):".."===m?(f.splice(b,1),x++):x&&(f.splice(b,1),x--);if(!p&&!d)for(;x--;x)f.unshift("..");!p||""===f[0]||f[0]&&"/"===f[0].charAt(0)||f.unshift(""),y&&"/"!==f.join("/").substr(-1)&&f.push("");var _=""===f[0]||f[0]&&"/"===f[0].charAt(0);if(v){r.hostname=r.host=_?"":f.length?f.shift():"";var g=r.host&&r.host.indexOf("@")>0?r.host.split("@"):!1;g&&(r.auth=g.shift(),r.host=r.hostname=g.shift())}return p=p||r.host&&f.length,p&&!_&&f.unshift(""),f.length?r.pathname=f.join("/"):(r.pathname=null,r.path=null),l(r.pathname)&&l(r.search)||(r.path=(r.pathname?r.pathname:"")+(r.search?r.search:"")),r.auth=t.auth||r.auth,r.slashes=r.slashes||t.slashes,r.href=r.format(),r},i.prototype.parseHost=function(){var t=this.host,e=f.exec(t);e&&(e=e[0],":"!==e&&(this.port=e.substr(1)),t=t.substr(0,t.length-e.length)),t&&(this.hostname=t)}},{punycode:19,querystring:22}],24:[function(t,e,r){"use strict";function i(t,e,r){r=r||2;var i=e&&e.length,o=i?e[0]*r:t.length,a=n(t,0,o,r,!0),h=[];if(!a)return h;var u,l,p,d,f,v,g;if(i&&(a=c(t,e,a,r)),t.length>80*r){u=p=t[0],l=d=t[1];for(var m=r;o>m;m+=r)f=t[m],v=t[m+1],u>f&&(u=f),l>v&&(l=v),f>p&&(p=f),v>d&&(d=v);g=Math.max(p-u,d-l)}return s(a,h,r,u,l,g),h}function n(t,e,r,i,n){var o,s,a,h=0;for(o=e,s=r-i;r>o;o+=i)h+=(t[s]-t[o])*(t[o+1]+t[s+1]),s=o;if(n===h>0)for(o=e;r>o;o+=i)a=M(o,t[o],t[o+1],a);else for(o=r-i;o>=e;o-=i)a=M(o,t[o],t[o+1],a);return a}function o(t,e){if(!t)return t;e||(e=t);var r,i=t;do if(r=!1,i.steiner||!T(i,i.next)&&0!==_(i.prev,i,i.next))i=i.next;else{if(R(i),i=e=i.prev,i===i.next)return null;r=!0}while(r||i!==e);return e}function s(t,e,r,i,n,c,p){if(t){!p&&c&&v(t,i,n,c);for(var d,f,g=t;t.prev!==t.next;)if(d=t.prev,f=t.next,c?h(t,i,n,c):a(t))e.push(d.i/r),e.push(t.i/r),e.push(f.i/r),R(t),t=f.next,g=f.next;else if(t=f,t===g){p?1===p?(t=u(t,e,r),s(t,e,r,i,n,c,2)):2===p&&l(t,e,r,i,n,c):s(o(t),e,r,i,n,c,1);break}}}function a(t){var e=t.prev,r=t,i=t.next;if(_(e,r,i)>=0)return!1;for(var n=t.next.next;n!==t.prev;){if(x(e.x,e.y,r.x,r.y,i.x,i.y,n.x,n.y)&&_(n.prev,n,n.next)>=0)return!1;n=n.next}return!0}function h(t,e,r,i){var n=t.prev,o=t,s=t.next;if(_(n,o,s)>=0)return!1;for(var a=n.xo.x?n.x>s.x?n.x:s.x:o.x>s.x?o.x:s.x,l=n.y>o.y?n.y>s.y?n.y:s.y:o.y>s.y?o.y:s.y,c=m(a,h,e,r,i),p=m(u,l,e,r,i),d=t.nextZ;d&&d.z<=p;){if(d!==t.prev&&d!==t.next&&x(n.x,n.y,o.x,o.y,s.x,s.y,d.x,d.y)&&_(d.prev,d,d.next)>=0)return!1;d=d.nextZ}for(d=t.prevZ;d&&d.z>=c;){if(d!==t.prev&&d!==t.next&&x(n.x,n.y,o.x,o.y,s.x,s.y,d.x,d.y)&&_(d.prev,d,d.next)>=0)return!1;d=d.prevZ}return!0}function u(t,e,r){var i=t;do{var n=i.prev,o=i.next.next;E(n,i,i.next,o)&&w(n,o)&&w(o,n)&&(e.push(n.i/r),e.push(i.i/r),e.push(o.i/r),R(i),R(i.next),i=t=o),i=i.next}while(i!==t);return i}function l(t,e,r,i,n,a){var h=t;do{for(var u=h.next.next;u!==h.prev;){if(h.i!==u.i&&b(h,u)){var l=A(h,u);return h=o(h,h.next),l=o(l,l.next),s(h,e,r,i,n,a),void s(l,e,r,i,n,a)}u=u.next}h=h.next}while(h!==t)}function c(t,e,r,i){var s,a,h,u,l,c=[];for(s=0,a=e.length;a>s;s++)h=e[s]*i,u=a-1>s?e[s+1]*i:t.length,l=n(t,h,u,i,!1),l===l.next&&(l.steiner=!0),c.push(y(l));for(c.sort(p),s=0;s=i.next.y){var a=i.x+(o-i.y)*(i.next.x-i.x)/(i.next.y-i.y);n>=a&&a>s&&(s=a,r=i.x=i.x&&i.x>=r.x&&x(oh||h===l&&i.x>r.x)&&w(i,t)&&(r=i,l=h)),i=i.next;return r}function v(t,e,r,i){var n=t;do null===n.z&&(n.z=m(n.x,n.y,e,r,i)),n.prevZ=n.prev,n.nextZ=n.next,n=n.next;while(n!==t);n.prevZ.nextZ=null,n.prevZ=null,g(n)}function g(t){var e,r,i,n,o,s,a,h,u=1;do{for(r=t,t=null,o=null,s=0;r;){for(s++,i=r,a=0,e=0;u>e&&(a++,i=i.nextZ,i);e++);for(h=u;a>0||h>0&&i;)0===a?(n=i,i=i.nextZ,h--):0!==h&&i?r.z<=i.z?(n=r,r=r.nextZ,a--):(n=i,i=i.nextZ,h--):(n=r,r=r.nextZ,a--),o?o.nextZ=n:t=n,n.prevZ=o,o=n;r=i}o.nextZ=null,u*=2}while(s>1);return t}function m(t,e,r,i,n){return t=32767*(t-r)/n,e=32767*(e-i)/n,t=16711935&(t|t<<8),t=252645135&(t|t<<4),t=858993459&(t|t<<2),t=1431655765&(t|t<<1),e=16711935&(e|e<<8),e=252645135&(e|e<<4),e=858993459&(e|e<<2),e=1431655765&(e|e<<1),t|e<<1}function y(t){var e=t,r=t;do e.x=0&&(t-s)*(i-a)-(r-s)*(e-a)>=0&&(r-s)*(o-a)-(n-s)*(i-a)>=0}function b(t,e){return T(t,e)||t.next.i!==e.i&&t.prev.i!==e.i&&!S(t,e)&&w(t,e)&&w(e,t)&&C(t,e)}function _(t,e,r){return(e.y-t.y)*(r.x-e.x)-(e.x-t.x)*(r.y-e.y)}function T(t,e){return t.x===e.x&&t.y===e.y}function E(t,e,r,i){return _(t,e,r)>0!=_(t,e,i)>0&&_(r,i,t)>0!=_(r,i,e)>0}function S(t,e){var r=t;do{if(r.i!==t.i&&r.next.i!==t.i&&r.i!==e.i&&r.next.i!==e.i&&E(r,r.next,t,e))return!0;r=r.next}while(r!==t);return!1}function w(t,e){return _(t.prev,t,t.next)<0?_(t,e,t.next)>=0&&_(t,t.prev,e)>=0:_(t,e,t.prev)<0||_(t,t.next,e)<0}function C(t,e){var r=t,i=!1,n=(t.x+e.x)/2,o=(t.y+e.y)/2;do r.y>o!=r.next.y>o&&n<(r.next.x-r.x)*(o-r.y)/(r.next.y-r.y)+r.x&&(i=!i),r=r.next;while(r!==t);return i}function A(t,e){var r=new O(t.i,t.x,t.y),i=new O(e.i,e.x,e.y),n=t.next,o=e.prev;return t.next=e,e.prev=t,r.next=n,n.prev=r,i.next=r,r.prev=i,o.next=i,i.prev=o,i}function M(t,e,r,i){var n=new O(t,e,r);return i?(n.next=i.next,n.prev=i,i.next.prev=n,i.next=n):(n.prev=n,n.next=n),n}function R(t){t.next.prev=t.prev,t.prev.next=t.next,t.prevZ&&(t.prevZ.nextZ=t.nextZ),t.nextZ&&(t.nextZ.prevZ=t.prevZ)}function O(t,e,r){this.i=t,this.x=e,this.y=r,this.prev=null,this.next=null,this.z=null,this.prevZ=null,this.nextZ=null,this.steiner=!1}e.exports=i},{}],25:[function(t,e,r){"use strict";function i(t,e,r){this.fn=t,this.context=e,this.once=r||!1}function n(){}var o="function"!=typeof Object.create?"~":!1;n.prototype._events=void 0,n.prototype.listeners=function(t,e){var r=o?o+t:t,i=this._events&&this._events[r];if(e)return!!i;if(!i)return[];if(i.fn)return[i.fn];for(var n=0,s=i.length,a=new Array(s);s>n;n++)a[n]=i[n].fn;return a},n.prototype.emit=function(t,e,r,i,n,s){var a=o?o+t:t;if(!this._events||!this._events[a])return!1;var h,u,l=this._events[a],c=arguments.length;if("function"==typeof l.fn){switch(l.once&&this.removeListener(t,l.fn,void 0,!0),c){case 1:return l.fn.call(l.context),!0;case 2:return l.fn.call(l.context,e),!0;case 3:return l.fn.call(l.context,e,r),!0;case 4:return l.fn.call(l.context,e,r,i),!0;case 5:return l.fn.call(l.context,e,r,i,n),!0;case 6:return l.fn.call(l.context,e,r,i,n,s),!0}for(u=1,h=new Array(c-1);c>u;u++)h[u-1]=arguments[u];l.fn.apply(l.context,h)}else{var p,d=l.length;for(u=0;d>u;u++)switch(l[u].once&&this.removeListener(t,l[u].fn,void 0,!0),c){case 1:l[u].fn.call(l[u].context);break;case 2:l[u].fn.call(l[u].context,e);break;case 3:l[u].fn.call(l[u].context,e,r);break;default:if(!h)for(p=1,h=new Array(c-1);c>p;p++)h[p-1]=arguments[p];l[u].fn.apply(l[u].context,h)}}return!0},n.prototype.on=function(t,e,r){var n=new i(e,r||this),s=o?o+t:t;return this._events||(this._events=o?{}:Object.create(null)),this._events[s]?this._events[s].fn?this._events[s]=[this._events[s],n]:this._events[s].push(n):this._events[s]=n,this},n.prototype.once=function(t,e,r){var n=new i(e,r||this,!0),s=o?o+t:t;return this._events||(this._events=o?{}:Object.create(null)),this._events[s]?this._events[s].fn?this._events[s]=[this._events[s],n]:this._events[s].push(n):this._events[s]=n,this},n.prototype.removeListener=function(t,e,r,i){var n=o?o+t:t;if(!this._events||!this._events[n])return this;var s=this._events[n],a=[];if(e)if(s.fn)(s.fn!==e||i&&!s.once||r&&s.context!==r)&&a.push(s);else for(var h=0,u=s.length;u>h;h++)(s[h].fn!==e||i&&!s[h].once||r&&s[h].context!==r)&&a.push(s[h]);return a.length?this._events[n]=1===a.length?a[0]:a:delete this._events[n],this},n.prototype.removeAllListeners=function(t){return this._events?(t?delete this._events[o?o+t:t]:this._events=o?{}:Object.create(null),this):this},n.prototype.off=n.prototype.removeListener,n.prototype.addListener=n.prototype.on,n.prototype.setMaxListeners=function(){return this},n.prefixed=o,"undefined"!=typeof e&&(e.exports=n)},{}],26:[function(t,e,r){"use strict";function i(t){if(null===t||void 0===t)throw new TypeError("Object.assign cannot be called with null or undefined");return Object(t)}var n=Object.prototype.hasOwnProperty,o=Object.prototype.propertyIsEnumerable;e.exports=Object.assign||function(t,e){for(var r,s,a=i(t),h=1;h=t.length&&r())}if(r=r||function(){},!t.length)return r();var o=0;u(t,function(t){e(t,i(n))})},s.forEach=s.each,s.eachSeries=function(t,e,r){if(r=r||function(){},!t.length)return r();var i=0,n=function(){e(t[i],function(e){e?(r(e),r=function(){}):(i+=1,i>=t.length?r():n())})};n()},s.forEachSeries=s.eachSeries,s.eachLimit=function(t,e,r,i){var n=d(e);n.apply(null,[t,r,i])},s.forEachLimit=s.eachLimit;var d=function(t){return function(e,r,i){if(i=i||function(){},!e.length||0>=t)return i();var n=0,o=0,s=0;!function a(){if(n>=e.length)return i();for(;t>s&&o=e.length?i():a())})}()}},f=function(t){return function(){var e=Array.prototype.slice.call(arguments);return t.apply(null,[s.each].concat(e))}},v=function(t,e){return function(){var r=Array.prototype.slice.call(arguments);return e.apply(null,[d(t)].concat(r))}},g=function(t){return function(){var e=Array.prototype.slice.call(arguments);return t.apply(null,[s.eachSeries].concat(e))}},m=function(t,e,r,i){if(e=l(e,function(t,e){return{index:e,value:t}}),i){var n=[];t(e,function(t,e){r(t.value,function(r,i){n[t.index]=i,e(r)})},function(t){i(t,n)})}else t(e,function(t,e){r(t.value,function(t){e(t)})})};s.map=f(m),s.mapSeries=g(m),s.mapLimit=function(t,e,r,i){return y(e)(t,r,i)};var y=function(t){return v(t,m)};s.reduce=function(t,e,r,i){s.eachSeries(t,function(t,i){r(e,t,function(t,r){e=r,i(t)})},function(t){i(t,e)})},s.inject=s.reduce,s.foldl=s.reduce,s.reduceRight=function(t,e,r,i){var n=l(t,function(t){return t}).reverse();s.reduce(n,e,r,i)},s.foldr=s.reduceRight;var x=function(t,e,r,i){var n=[];e=l(e,function(t,e){return{index:e,value:t}}),t(e,function(t,e){r(t.value,function(r){r&&n.push(t),e()})},function(t){i(l(n.sort(function(t,e){return t.index-e.index}),function(t){return t.value}))})};s.filter=f(x),s.filterSeries=g(x),s.select=s.filter,s.selectSeries=s.filterSeries;var b=function(t,e,r,i){var n=[];e=l(e,function(t,e){return{index:e,value:t}}),t(e,function(t,e){r(t.value,function(r){r||n.push(t),e()})},function(t){i(l(n.sort(function(t,e){return t.index-e.index}),function(t){return t.value}))})};s.reject=f(b),s.rejectSeries=g(b);var _=function(t,e,r,i){t(e,function(t,e){r(t,function(r){r?(i(t),i=function(){}):e()})},function(t){i()})};s.detect=f(_),s.detectSeries=g(_),s.some=function(t,e,r){s.each(t,function(t,i){e(t,function(t){t&&(r(!0),r=function(){}),i()})},function(t){r(!1)})},s.any=s.some,s.every=function(t,e,r){s.each(t,function(t,i){e(t,function(t){t||(r(!1),r=function(){}),i()})},function(t){r(!0)})},s.all=s.every,s.sortBy=function(t,e,r){s.map(t,function(t,r){e(t,function(e,i){e?r(e):r(null,{value:t,criteria:i})})},function(t,e){if(t)return r(t);var i=function(t,e){var r=t.criteria,i=e.criteria;return i>r?-1:r>i?1:0};r(null,l(e.sort(i),function(t){return t.value}))})},s.auto=function(t,e){e=e||function(){};var r=p(t),i=r.length;if(!i)return e();var n={},o=[],a=function(t){o.unshift(t)},l=function(t){for(var e=0;ei;){var o=i+(n-i+1>>>1);r(e,t[o])>=0?i=o:n=o-1}return i}function n(t,e,n,o){return t.started||(t.started=!0),h(e)||(e=[e]),0==e.length?s.setImmediate(function(){t.drain&&t.drain()}):void u(e,function(e){var a={data:e,priority:n,callback:"function"==typeof o?o:null};t.tasks.splice(i(t.tasks,a,r)+1,0,a),t.saturated&&t.tasks.length===t.concurrency&&t.saturated(),s.setImmediate(t.process)})}var o=s.queue(t,e);return o.push=function(t,e,r){n(o,t,e,r)},delete o.unshift,o},s.cargo=function(t,e){var r=!1,i=[],n={tasks:i,payload:e,saturated:null,empty:null,drain:null,drained:!0,push:function(t,r){h(t)||(t=[t]),u(t,function(t){i.push({data:t,callback:"function"==typeof r?r:null}),n.drained=!1,n.saturated&&i.length===e&&n.saturated()}),s.setImmediate(n.process)},process:function o(){if(!r){if(0===i.length)return n.drain&&!n.drained&&n.drain(),void(n.drained=!0);var s="number"==typeof e?i.splice(0,e):i.splice(0,i.length),a=l(s,function(t){return t.data});n.empty&&n.empty(),r=!0,t(a,function(){r=!1;var t=arguments;u(s,function(e){e.callback&&e.callback.apply(null,t)}),o()})}},length:function(){return i.length},running:function(){return r}};return n};var S=function(t){return function(e){var r=Array.prototype.slice.call(arguments,1);e.apply(null,r.concat([function(e){var r=Array.prototype.slice.call(arguments,1);"undefined"!=typeof console&&(e?console.error&&console.error(e):console[t]&&u(r,function(e){console[t](e)}))}]))}};s.log=S("log"),s.dir=S("dir"),s.memoize=function(t,e){var r={},i={};e=e||function(t){return t};var n=function(){var n=Array.prototype.slice.call(arguments),o=n.pop(),a=e.apply(null,n);a in r?s.nextTick(function(){o.apply(null,r[a])}):a in i?i[a].push(o):(i[a]=[o],t.apply(null,n.concat([function(){r[a]=arguments;var t=i[a];delete i[a];for(var e=0,n=t.length;n>e;e++)t[e].apply(null,arguments)}])))};return n.memo=r,n.unmemoized=t,n},s.unmemoize=function(t){return function(){return(t.unmemoized||t).apply(null,arguments)}},s.times=function(t,e,r){for(var i=[],n=0;t>n;n++)i.push(n);return s.map(i,e,r)},s.timesSeries=function(t,e,r){for(var i=[],n=0;t>n;n++)i.push(n);return s.mapSeries(i,e,r)},s.seq=function(){var t=arguments;return function(){var e=this,r=Array.prototype.slice.call(arguments),i=r.pop();s.reduce(t,r,function(t,r,i){r.apply(e,t.concat([function(){var t=arguments[0],e=Array.prototype.slice.call(arguments,1);i(t,e)}]))},function(t,r){i.apply(e,[t].concat(r))})}},s.compose=function(){return s.seq.apply(null,Array.prototype.reverse.call(arguments))};var w=function(t,e){var r=function(){var r=this,i=Array.prototype.slice.call(arguments),n=i.pop();return t(e,function(t,e){t.apply(r,i.concat([e]))},n)};if(arguments.length>2){var i=Array.prototype.slice.call(arguments,2);return r.apply(this,i)}return r};s.applyEach=f(w),s.applyEachSeries=g(w),s.forever=function(t,e){function r(i){if(i){if(e)return e(i);throw i}t(r)}r()},"undefined"!=typeof r&&r.exports?r.exports=s:"undefined"!=typeof t&&t.amd?t([],function(){return s}):n.async=s}()}).call(this,e("_process"))},{_process:18}],28:[function(t,e,r){function i(t,e){a.call(this),e=e||10,this.baseUrl=t||"",this.progress=0,this.loading=!1,this._progressChunk=0,this._beforeMiddleware=[],this._afterMiddleware=[],this._boundLoadResource=this._loadResource.bind(this),this._boundOnLoad=this._onLoad.bind(this),this._buffer=[],this._numToLoad=0,this._queue=n.queue(this._boundLoadResource,e),this.resources={}}var n=t("async"),o=t("url"),s=t("./Resource"),a=t("eventemitter3");i.prototype=Object.create(a.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.add=i.prototype.enqueue=function(t,e,r,i){if(Array.isArray(t)){for(var n=0;n0)if(this.xhrType===i.XHR_RESPONSE_TYPE.TEXT)this.data=t.responseText;else if(this.xhrType===i.XHR_RESPONSE_TYPE.JSON)try{this.data=JSON.parse(t.responseText),this.isJson=!0}catch(r){this.error=new Error("Error trying to parse loaded json:",r)}else if(this.xhrType===i.XHR_RESPONSE_TYPE.DOCUMENT)try{if(window.DOMParser){var n=new DOMParser;this.data=n.parseFromString(t.responseText,"text/xml")}else{var o=document.createElement("div");o.innerHTML=t.responseText,this.data=o}this.isXml=!0}catch(r){this.error=new Error("Error trying to parse loaded xml:",r)}else this.data=t.response||t.responseText;else this.error=new Error("["+t.status+"]"+t.statusText+":"+t.responseURL);this.complete()},i.prototype._determineCrossOrigin=function(t,e){if(0===t.indexOf("data:"))return"";e=e||window.location,u||(u=document.createElement("a")),u.href=t,t=a.parse(u.href);var r=!t.port&&""===e.port||t.port===e.port;return t.hostname===e.hostname&&r&&t.protocol===e.protocol?"":"anonymous"},i.prototype._determineXhrType=function(){return i._xhrTypeMap[this._getExtension()]||i.XHR_RESPONSE_TYPE.TEXT},i.prototype._determineLoadType=function(){return i._loadTypeMap[this._getExtension()]||i.LOAD_TYPE.XHR},i.prototype._getExtension=function(){var t,e=this.url;if(this.isDataUrl){var r=e.indexOf("/");t=e.substring(r+1,e.indexOf(";",r))}else{var i=e.indexOf("?");-1!==i&&(e=e.substring(0,i)),t=e.substring(e.lastIndexOf(".")+1)}return t},i.prototype._getMimeFromXhrType=function(t){switch(t){case i.XHR_RESPONSE_TYPE.BUFFER:return"application/octet-binary";case i.XHR_RESPONSE_TYPE.BLOB:return"application/blob";case i.XHR_RESPONSE_TYPE.DOCUMENT:return"application/xml";case i.XHR_RESPONSE_TYPE.JSON:return"application/json";case i.XHR_RESPONSE_TYPE.DEFAULT:case i.XHR_RESPONSE_TYPE.TEXT:default:return"text/plain"}},i.LOAD_TYPE={XHR:1,IMAGE:2,AUDIO:3,VIDEO:4},i.XHR_READY_STATE={UNSENT:0,OPENED:1,HEADERS_RECEIVED:2,LOADING:3,DONE:4},i.XHR_RESPONSE_TYPE={DEFAULT:"text",BUFFER:"arraybuffer",BLOB:"blob",DOCUMENT:"document",JSON:"json",TEXT:"text"},i._loadTypeMap={gif:i.LOAD_TYPE.IMAGE,png:i.LOAD_TYPE.IMAGE,bmp:i.LOAD_TYPE.IMAGE,jpg:i.LOAD_TYPE.IMAGE,jpeg:i.LOAD_TYPE.IMAGE,tif:i.LOAD_TYPE.IMAGE,tiff:i.LOAD_TYPE.IMAGE,webp:i.LOAD_TYPE.IMAGE,tga:i.LOAD_TYPE.IMAGE},i._xhrTypeMap={xhtml:i.XHR_RESPONSE_TYPE.DOCUMENT,html:i.XHR_RESPONSE_TYPE.DOCUMENT,htm:i.XHR_RESPONSE_TYPE.DOCUMENT,xml:i.XHR_RESPONSE_TYPE.DOCUMENT,tmx:i.XHR_RESPONSE_TYPE.DOCUMENT,tsx:i.XHR_RESPONSE_TYPE.DOCUMENT,svg:i.XHR_RESPONSE_TYPE.DOCUMENT,gif:i.XHR_RESPONSE_TYPE.BLOB,png:i.XHR_RESPONSE_TYPE.BLOB,bmp:i.XHR_RESPONSE_TYPE.BLOB,jpg:i.XHR_RESPONSE_TYPE.BLOB,jpeg:i.XHR_RESPONSE_TYPE.BLOB,tif:i.XHR_RESPONSE_TYPE.BLOB,tiff:i.XHR_RESPONSE_TYPE.BLOB,webp:i.XHR_RESPONSE_TYPE.BLOB,tga:i.XHR_RESPONSE_TYPE.BLOB,json:i.XHR_RESPONSE_TYPE.JSON,text:i.XHR_RESPONSE_TYPE.TEXT,txt:i.XHR_RESPONSE_TYPE.TEXT},i.setExtensionLoadType=function(t,e){o(i._loadTypeMap,t,e)},i.setExtensionXhrType=function(t,e){o(i._xhrTypeMap,t,e)}},{eventemitter3:25,url:23}],30:[function(t,e,r){e.exports={_keyStr:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",encodeBinary:function(t){for(var e,r="",i=new Array(4),n=0,o=0,s=0;n>2,i[1]=(3&e[0])<<4|e[1]>>4,i[2]=(15&e[1])<<2|e[2]>>6,i[3]=63&e[2],s=n-(t.length-1)){case 2:i[3]=64,i[2]=64;break;case 1:i[3]=64}for(o=0;o","Richard Davey "],main:"./src/index.js",homepage:"http://goodboydigital.com/",bugs:"https://github.com/pixijs/pixi.js/issues",license:"MIT",repository:{type:"git",url:"https://github.com/pixijs/pixi.js.git"},scripts:{start:"gulp && gulp watch",test:"gulp && testem ci",build:"gulp",docs:"jsdoc -c ./gulp/util/jsdoc.conf.json -R README.md"},files:["bin/","src/","CONTRIBUTING.md","LICENSE","package.json","README.md"],dependencies:{async:"^1.5.0",brfs:"^1.4.1",earcut:"^2.0.7",eventemitter3:"^1.1.1","object-assign":"^4.0.1","pixi-gl-core":"git+https://github.com/GoodBoyDigital/pixi-gl-core.git","resource-loader":"^1.6.4"},devDependencies:{browserify:"^11.1.0",chai:"^3.2.0",del:"^2.0.2",gulp:"^3.9.0","gulp-cached":"^1.1.0","gulp-concat":"^2.6.0","gulp-debug":"^2.1.0","gulp-header":"^1.7.1","gulp-jshint":"^1.11.2","gulp-mirror":"^0.4.0","gulp-plumber":"^1.0.1","gulp-rename":"^1.2.2","gulp-sourcemaps":"^1.5.2","gulp-uglify":"^1.4.1","gulp-util":"^3.0.6","jaguarjs-jsdoc":"git+https://github.com/davidshimjs/jaguarjs-jsdoc.git",jsdoc:"^3.3.2","jshint-summary":"^0.4.0",minimist:"^1.2.0",mocha:"^2.3.2","require-dir":"^0.3.0","run-sequence":"^1.1.2",testem:"^0.9.4","vinyl-buffer":"^1.0.0","vinyl-source-stream":"^1.1.0",watchify:"^3.4.0"},browserify:{transform:["brfs"]}}},{}],35:[function(t,e,r){function i(t){var e=document.createElement("div");e.style.width="100px",e.style.height="100px",e.style.position="absolute",e.style.top=0,e.style.left=0,e.style.zIndex=2,this.div=e,this.pool=[],this.renderId=0,this.debug=!1,this.renderer=t,this.children=[],this._onKeyDown=this._onKeyDown.bind(this),this._onMouseMove=this._onMouseMove.bind(this),this.isActive=!1,window.addEventListener("keydown",this._onKeyDown,!1)}var n=t("../core");Object.assign(n.DisplayObject.prototype,t("./accessibleTarget")),i.prototype.constructor=i,e.exports=i,i.prototype.activate=function(){this.isActive||(this.isActive=!0,window.document.addEventListener("mousemove",this._onMouseMove,!0),window.removeEventListener("keydown",this._onKeyDown,!1),this.renderer.on("postrender",this.update,this),this.renderer.view.parentNode.appendChild(this.div))},i.prototype.deactivate=function(){this.isActive&&(this.isActive=!1,window.document.removeEventListener("mousemove",this._onMouseMove),window.addEventListener("keydown",this._onKeyDown,!1),this.renderer.off("postrender",this.update),this.div.parentNode.removeChild(this.div))},i.prototype.updateAccessibleObjects=function(t){if(t.visible){t.accessible&&t.interactive&&(t._accessibleActive||this.addChild(t),t.renderId=this.renderId);for(var e=t.children,r=e.length-1;r>=0;r--)this.updateAccessibleObjects(e[r])}},i.prototype.update=function(){this.updateAccessibleObjects(this.renderer._lastObjectRendered);var t=this.renderer.view.getBoundingClientRect(),e=t.width/this.renderer.width,r=t.height/this.renderer.height,i=this.div;i.style.left=t.left+"px",i.style.top=t.top+"px",i.style.width=this.renderer.width+"px",i.style.height=this.renderer.height+"px";for(var o=0;othis.renderer.width&&(t.width=this.renderer.width-t.x),t.y+t.height>this.renderer.height&&(t.height=this.renderer.height-t.y)},i.prototype.addChild=function(t){var e=this.pool.pop();e||(e=document.createElement("button"),e.style.width="100px",e.style.height="100px",e.style.backgroundColor=this.debug?"rgba(255,0,0,0.5)":"transparent",e.style.position="absolute",e.style.zIndex=2,e.style.borderStyle="none",e.addEventListener("click",this._onClick.bind(this)),e.addEventListener("focus",this._onFocus.bind(this)),e.addEventListener("focusout",this._onFocusOut.bind(this))),e.title=t.accessibleTitle||"displayObject "+this.tabIndex,t._accessibleActive=!0,t._accessibleDiv=e,e.displayObject=t,this.children.push(t),this.div.appendChild(t._accessibleDiv),t._accessibleDiv.tabIndex=t.tabIndex},i.prototype._onClick=function(t){var e=this.renderer.plugins.interaction;e.dispatchEvent(t.target.displayObject,"click",e.eventData)},i.prototype._onFocus=function(t){var e=this.renderer.plugins.interaction;e.dispatchEvent(t.target.displayObject,"mouseover",e.eventData)},i.prototype._onFocusOut=function(t){var e=this.renderer.plugins.interaction;e.dispatchEvent(t.target.displayObject,"mouseout",e.eventData)},i.prototype._onKeyDown=function(t){9===t.keyCode&&this.activate()},i.prototype._onMouseMove=function(){this.deactivate()},i.prototype.destroy=function(){this.div=null;for(var t=0;t1)for(var r=0;e>r;r++)this.addChild(arguments[r]);else t.parent&&t.parent.removeChild(t),t.parent=this,this.children.push(t),this.onChildrenChange(this.children.length-1),t.emit("added",this);return t},i.prototype.addChildAt=function(t,e){if(e>=0&&e<=this.children.length)return t.parent&&t.parent.removeChild(t),t.parent=this,this.children.splice(e,0,t),this.onChildrenChange(e),t.emit("added",this),t;throw new Error(t+"addChildAt: The index "+e+" supplied is out of bounds "+this.children.length)},i.prototype.swapChildren=function(t,e){if(t!==e){var r=this.getChildIndex(t),i=this.getChildIndex(e);if(0>r||0>i)throw new Error("swapChildren: Both the supplied DisplayObjects must be children of the caller.");this.children[r]=e,this.children[i]=t,this.onChildrenChange(i>r?r:i)}},i.prototype.getChildIndex=function(t){var e=this.children.indexOf(t);if(-1===e)throw new Error("The supplied DisplayObject must be a child of the caller");return e},i.prototype.setChildIndex=function(t,e){if(0>e||e>=this.children.length)throw new Error("The supplied index is out of bounds");var r=this.getChildIndex(t);o.removeItems(this.children,r,1),this.children.splice(e,0,t),this.onChildrenChange(e)},i.prototype.getChildAt=function(t){if(0>t||t>=this.children.length)throw new Error("getChildAt: Supplied index "+t+" does not exist in the child list, or the supplied DisplayObject is not a child of the caller");return this.children[t]},i.prototype.removeChild=function(t){var e=arguments.length;if(e>1)for(var r=0;e>r;r++)this.removeChild(arguments[r]);else{var i=this.children.indexOf(t);if(-1===i)return;t.parent=null,o.removeItems(this.children,i,1),this.onChildrenChange(i),t.emit("removed",this)}return t},i.prototype.removeChildAt=function(t){var e=this.getChildAt(t);return e.parent=null,o.removeItems(this.children,t,1),this.onChildrenChange(t),e.emit("removed",this),e},i.prototype.removeChildren=function(t,e){var r,i,n=t||0,o="number"==typeof e?e:this.children.length,s=o-n;if(s>0&&o>=s){for(r=this.children.splice(n,s),i=0;it;++t)this.children[t].updateTransform();this.dirty=!1}},i.prototype.containerUpdateTransform=i.prototype.updateTransform,i.prototype.getBounds=function(){if(!this._currentBounds){if(0===this.children.length)return n.Rectangle.EMPTY;for(var t,e,r,i=1/0,o=1/0,s=-(1/0),a=-(1/0),h=!1,u=0,l=this.children.length;l>u;++u){var c=this.children[u];c.visible&&(h=!0,t=this.children[u].getBounds(),i=ie?s:e,a=a>r?a:r)}if(!h)return n.Rectangle.EMPTY;var p=this._bounds;p.x=i,p.y=o,p.width=s-i,p.height=a-o,this._currentBounds=p}return this._currentBounds},i.prototype.containerGetBounds=i.prototype.getBounds,i.prototype.getLocalBounds=function(){var t=this.worldTransform;this.worldTransform=n.Matrix.IDENTITY;for(var e=0,r=this.children.length;r>e;++e)this.children[e].updateTransform();return this.worldTransform=t,this._currentBounds=null,this.getBounds(n.Matrix.IDENTITY)},i.prototype.renderWebGL=function(t){if(this.visible&&!(this.worldAlpha<=0)&&this.renderable){var e,r;if(this._mask||this._filters){for(t.currentRenderer.flush(),this._filters&&this._filters.length&&t.filterManager.pushFilter(this,this._filters),this._mask&&t.maskManager.pushMask(this,this._mask),t.currentRenderer.start(),this._renderWebGL(t),e=0,r=this.children.length;r>e;e++)this.children[e].renderWebGL(t);t.currentRenderer.flush(),this._mask&&t.maskManager.popMask(this,this._mask),this._filters&&t.filterManager.popFilter(),t.currentRenderer.start()}else for(this._renderWebGL(t),e=0,r=this.children.length;r>e;++e)this.children[e].renderWebGL(t)}},i.prototype._renderWebGL=function(t){},i.prototype._renderCanvas=function(t){},i.prototype.renderCanvas=function(t){if(this.visible&&!(this.alpha<=0)&&this.renderable){this._mask&&t.maskManager.pushMask(this._mask,t),this._renderCanvas(t);for(var e=0,r=this.children.length;r>e;++e)this.children[e].renderCanvas(t);this._mask&&t.maskManager.popMask(t)}},i.prototype.destroy=function(t){if(s.prototype.destroy.call(this),t)for(var e=0,r=this.children.length;r>e;++e)this.children[e].destroy(t);this.removeChildren(),this.children=null}},{"../math":48,"../textures/RenderTexture":91,"../utils":98,"./DisplayObject":40}],40:[function(t,e,r){function i(){s.call(this),this.position=new n.Point,this.scale=new n.Point(1,1),this.pivot=new n.Point(0,0),this.skew=new n.Point(0,0),this._rotation=0,this.alpha=1,this.visible=!0,this.renderable=!0,this.parent=null,this.worldAlpha=1,this.worldTransform=new n.Matrix,this.localTransform=new n.Matrix,this.filterArea=null,this._sr=0,this._cr=1,this._bounds=new n.Rectangle(0,0,1,1),this._currentBounds=null,this._mask=null,this.dirty=!0}var n=t("../math"),o=t("../textures/RenderTexture"),s=t("eventemitter3"),a=(t("../const"),new n.Matrix),h={worldTransform:new n.Matrix,worldAlpha:1,children:[]};i.prototype=Object.create(s.prototype),i.prototype.constructor=i,e.exports=i,Object.defineProperties(i.prototype,{x:{get:function(){return this.position.x},set:function(t){this.position.x=t,this.dirty=!0}},y:{get:function(){return this.position.y},set:function(t){this.position.y=t,this.dirty=!0}},scaleX:{get:function(){return this.scale.x},set:function(t){this.scale.x=t,this.dirty=!0}},scaleY:{get:function(){return this.scale.y},set:function(t){this.scale.y=t,this.dirty=!0}},rotation:{get:function(){return this._rotation},set:function(t){this._rotation=t,this.dirty=!0,this._sr=Math.sin(t),this._cr=Math.cos(t)}},scaleY:{get:function(){return this.scale.y},set:function(t){this.scale.y=t,this.dirty=!0}},worldVisible:{get:function(){var t=this;do{if(!t.visible)return!1;t=t.parent}while(t);return!0}},mask:{get:function(){return this._mask},set:function(t){this._mask&&(this._mask.renderable=!0),this._mask=t,this._mask&&(this._mask.renderable=!1)}},filters:{get:function(){return this._filters&&this._filters.slice()},set:function(t){this._filters=t&&t.slice()}}}),i.prototype.updateTransform=function(){var t=this.parent.worldTransform,e=this.worldTransform,r=this.localTransform;this.dirty&&(r.a=this._cr*this.scale.x,r.b=this._sr*this.scale.x,r.c=-this._sr*this.scale.y,r.d=this._cr*this.scale.y,r.tx=this.position.x-(this.pivot.x*r.a+this.pivot.y*r.c),r.ty=this.position.y-(this.pivot.x*r.b+this.pivot.y*r.d)),(this.dirty||this.parent.dirty)&&(e.a=r.a*t.a+r.b*t.c,e.b=r.a*t.b+r.b*t.d,e.c=r.c*t.a+r.d*t.c,e.d=r.c*t.b+r.d*t.d,e.tx=r.tx*t.a+r.ty*t.c+t.tx,e.ty=r.tx*t.b+r.ty*t.d+t.ty,this._currentBounds=null),this.worldAlpha=this.alpha*this.parent.worldAlpha},i.prototype.displayObjectUpdateTransform=i.prototype.updateTransform,i.prototype.getBounds=function(t){return n.Rectangle.EMPTY},i.prototype.getLocalBounds=function(){return this.getBounds(n.Matrix.IDENTITY)},i.prototype.toGlobal=function(t){return this.parent?this.displayObjectUpdateTransform():(this.parent=h,this.displayObjectUpdateTransform(),this.parent=null),this.worldTransform.apply(t)},i.prototype.toLocal=function(t,e,r){return e&&(t=e.toGlobal(t)),this.parent?this.displayObjectUpdateTransform():(this.parent=h,this.displayObjectUpdateTransform(),this.parent=null),this.worldTransform.applyInverse(t,r)},i.prototype.renderWebGL=function(t){},i.prototype.renderCanvas=function(t){},i.prototype.generateTexture=function(t,e,r){var i=this.getLocalBounds(),n=new o(t,0|i.width,0|i.height,e,r);return a.tx=-i.x,a.ty=-i.y,n.render(this,a),n},i.prototype.setParent=function(t){if(!t||!t.addChild)throw new Error("setParent: Argument must be a Container");return t.addChild(this),t},i.prototype.setTransform=function(t,e,r,i,n,o,s,a,h){return this.position.x=t||0,this.position.y=e||0,this.scale.x=r?r:1,this.scale.y=i?i:1,this.rotation=n||0,this.skew.x=o||0,this.skew.y=s||0,this.pivot.x=a||0,this.pivot.y=h||0,this.dirty=!0,this},i.prototype.destroy=function(){this.position=null,this.scale=null,this.pivot=null,this.skew=null,this.parent=null,this._bounds=null,this._currentBounds=null,this._mask=null,this.worldTransform=null,this.filterArea=null}},{"../const":38,"../math":48,"../textures/RenderTexture":91,eventemitter3:25}],41:[function(t,e,r){function i(){n.call(this),this.fillAlpha=1,this.lineWidth=0,this.lineColor=0,this.graphicsData=[],this.tint=16777215,this._prevTint=16777215,this.blendMode=l.BLEND_MODES.NORMAL,this.currentPath=null,this._webGL={},this.isMask=!1,this.boundsPadding=0,this._localBounds=new u.Rectangle(0,0,1,1),this.dirty=!0,this.glDirty=!1,this.boundsDirty=!0,this.cachedSpriteDirty=!1}var n=t("../display/Container"),o=t("../textures/Texture"),s=t("../renderers/canvas/utils/CanvasBuffer"),a=t("../renderers/canvas/utils/CanvasGraphics"),h=t("./GraphicsData"),u=t("../math"),l=t("../const"),c=new u.Point;i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.clone=function(){var t=new i;t.renderable=this.renderable,t.fillAlpha=this.fillAlpha,t.lineWidth=this.lineWidth,t.lineColor=this.lineColor,t.tint=this.tint,t.blendMode=this.blendMode,t.isMask=this.isMask,t.boundsPadding=this.boundsPadding,t.dirty=!0,t.glDirty=!0,t.cachedSpriteDirty=this.cachedSpriteDirty;for(var e=0;e=c;++c)l=c/s,n=h+(t-h)*l,o=u+(e-u)*l,a.push(n+(t+(r-t)*l-n)*l,o+(e+(i-e)*l-o)*l);return this.dirty=this.boundsDirty=!0,this},i.prototype.bezierCurveTo=function(t,e,r,i,n,o){this.currentPath?0===this.currentPath.shape.points.length&&(this.currentPath.shape.points=[0,0]):this.moveTo(0,0);for(var s,a,h,u,l,c=20,p=this.currentPath.shape.points,d=p[p.length-2],f=p[p.length-1],v=0,g=1;c>=g;++g)v=g/c,s=1-v,a=s*s,h=a*s,u=v*v,l=u*v,p.push(h*d+3*a*v*t+3*s*u*r+l*n,h*f+3*a*v*e+3*s*u*i+l*o);return this.dirty=this.boundsDirty=!0,this},i.prototype.arcTo=function(t,e,r,i,n){this.currentPath?0===this.currentPath.shape.points.length&&this.currentPath.shape.points.push(t,e):this.moveTo(t,e);var o=this.currentPath.shape.points,s=o[o.length-2],a=o[o.length-1],h=a-e,u=s-t,l=i-e,c=r-t,p=Math.abs(h*c-u*l);if(1e-8>p||0===n)(o[o.length-2]!==t||o[o.length-1]!==e)&&o.push(t,e);else{var d=h*h+u*u,f=l*l+c*c,v=h*l+u*c,g=n*Math.sqrt(d)/p,m=n*Math.sqrt(f)/p,y=g*v/d,x=m*v/f,b=g*c+m*u,_=g*l+m*h,T=u*(m+y),E=h*(m+y),S=c*(g+x),w=l*(g+x),C=Math.atan2(E-_,T-b),A=Math.atan2(w-_,S-b);this.arc(b+t,_+e,n,C,A,u*l>c*h)}return this.dirty=this.boundsDirty=!0,this},i.prototype.arc=function(t,e,r,i,n,o){if(o=o||!1,i===n)return this;!o&&i>=n?n+=2*Math.PI:o&&n>=i&&(i+=2*Math.PI);var s=o?-1*(i-n):n-i,a=40*Math.ceil(Math.abs(s)/(2*Math.PI));if(0===s)return this;var h=t+Math.cos(i)*r,u=e+Math.sin(i)*r;this.currentPath?this.currentPath.shape.points.push(h,u):this.moveTo(h,u);for(var l=this.currentPath.shape.points,c=s/(2*a),p=2*c,d=Math.cos(c),f=Math.sin(c),v=a-1,g=v%1/v,m=0;v>=m;m++){var y=m+g*m,x=c+i+p*y,b=Math.cos(x),_=-Math.sin(x);l.push((d*b+f*_)*r+t,(d*-_+f*b)*r+e)}return this.dirty=this.boundsDirty=!0,this},i.prototype.beginFill=function(t,e){return this.filling=!0,this.fillColor=t||0,this.fillAlpha=void 0===e?1:e,this.currentPath&&this.currentPath.shape.points.length<=2&&(this.currentPath.fill=this.filling,this.currentPath.fillColor=this.fillColor,this.currentPath.fillAlpha=this.fillAlpha),this},i.prototype.endFill=function(){return this.filling=!1,this.fillColor=null,this.fillAlpha=1,this},i.prototype.drawRect=function(t,e,r,i){return this.drawShape(new u.Rectangle(t,e,r,i)),this},i.prototype.drawRoundedRect=function(t,e,r,i,n){return this.drawShape(new u.RoundedRectangle(t,e,r,i,n)),this},i.prototype.drawCircle=function(t,e,r){return this.drawShape(new u.Circle(t,e,r)),this},i.prototype.drawEllipse=function(t,e,r,i){return this.drawShape(new u.Ellipse(t,e,r,i)),this},i.prototype.drawPolygon=function(t){var e=t,r=!0;if(e instanceof u.Polygon&&(r=e.closed,e=e.points),!Array.isArray(e)){e=new Array(arguments.length);for(var i=0;ig?g:S,S=S>y?y:S,S=S>b?b:S,w=w>m?m:w,w=w>x?x:w,w=w>_?_:w,T=g>T?g:T,T=y>T?y:T,T=b>T?b:T,E=m>E?m:E,E=x>E?x:E,E=_>E?_:E,this._bounds.x=S,this._bounds.width=T-S,this._bounds.y=w,this._bounds.height=E-w,this._currentBounds=this._bounds}return this._currentBounds},i.prototype.containsPoint=function(t){this.worldTransform.applyInverse(t,c);for(var e=this.graphicsData,r=0;rs?s:t,e=s+h>e?s+h:e,r=r>a?a:r,i=a+u>i?a+u:i;else if(d===l.SHAPES.CIRC)s=n.x,a=n.y,h=n.radius+f/2,u=n.radius+f/2,t=t>s-h?s-h:t,e=s+h>e?s+h:e,r=r>a-u?a-u:r,i=a+u>i?a+u:i;else if(d===l.SHAPES.ELIP)s=n.x,a=n.y,h=n.width+f/2,u=n.height+f/2,t=t>s-h?s-h:t,e=s+h>e?s+h:e,r=r>a-u?a-u:r,i=a+u>i?a+u:i;else{o=n.points;for(var v=0;vs-f?s-f:t,e=s+f>e?s+f:e,r=r>a-f?a-f:r,i=a+f>i?a+f:i}}else t=0,e=0,r=0,i=0;var g=this.boundsPadding;this._localBounds.x=t-g,this._localBounds.width=e-t+2*g,this._localBounds.y=r-g,this._localBounds.height=i-r+2*g},i.prototype.drawShape=function(t){this.currentPath&&this.currentPath.shape.points.length<=2&&this.graphicsData.pop(),this.currentPath=null;var e=new h(this.lineWidth,this.lineColor,this.lineAlpha,this.fillColor,this.fillAlpha,this.filling,t);return this.graphicsData.push(e),e.type===l.SHAPES.POLY&&(e.shape.closed=e.shape.closed||this.filling,this.currentPath=e),this.dirty=this.boundsDirty=!0,e},i.prototype.destroy=function(){n.prototype.destroy.apply(this,arguments);for(var t=0;ta;a++)e=s.data[a],1===s.data[a].mode?(r.stencilManager.pushStencil(t,e),i.uniform1f(r.shaderManager.complexPrimitiveShader.uniforms.alpha._location,t.worldAlpha*e.alpha),i.drawElements(i.TRIANGLE_FAN,4,i.UNSIGNED_SHORT,2*(e.indices.length-4)),r.stencilManager.popStencil(t,e)):(o=r.shaderManager.primitiveShader,r.shaderManager.setShader(o),i.uniformMatrix3fv(o.uniforms.translationMatrix._location,!1,t.worldTransform.toArray(!0)),i.uniformMatrix3fv(o.uniforms.projectionMatrix._location,!1,r.currentRenderTarget.projectionMatrix.toArray(!0)),i.uniform3fv(o.uniforms.tint._location,n.hex2rgb(t.tint)),i.uniform1f(o.uniforms.alpha._location,t.worldAlpha),i.bindBuffer(i.ARRAY_BUFFER,e.buffer),i.vertexAttribPointer(o.attributes.aVertexPosition,2,i.FLOAT,!1,24,0),i.vertexAttribPointer(o.attributes.aColor,4,i.FLOAT,!1,24,8),i.bindBuffer(i.ELEMENT_ARRAY_BUFFER,e.indexBuffer),i.drawElements(i.TRIANGLE_STRIP,e.indices.length,i.UNSIGNED_SHORT,0)),r.drawCount++},i.prototype.updateGraphics=function(t){var e=this.renderer.gl,r=t._webGL[e.id];r||(r=t._webGL[e.id]={lastIndex:0,data:[],gl:e}),t.dirty=!1;var i;if(t.clearDirty){for(t.clearDirty=!1,i=0;i=6)if(a.points.length<2*this.maximumSimplePolySize){o=this.switchMode(r,0);var h=this.buildPoly(a,o);h||(o=this.switchMode(r,1),this.buildComplexPoly(a,o))}else o=this.switchMode(r,1),this.buildComplexPoly(a,o);a.lineWidth>0&&(o=this.switchMode(r,0),this.buildLine(a,o))}else o=this.switchMode(r,0),a.type===s.SHAPES.RECT?this.buildRectangle(a,o):a.type===s.SHAPES.CIRC||a.type===s.SHAPES.ELIP?this.buildCircle(a,o):a.type===s.SHAPES.RREC&&this.buildRoundedRectangle(a,o);r.lastIndex++}for(i=0;i32e4||r.mode!==e||1===e)&&(r=this.graphicsDataPool.pop()||new u(t.gl),r.mode=e,t.data.push(r))):(r=this.graphicsDataPool.pop()||new u(t.gl),r.mode=e,t.data.push(r)),r.dirty=!0,r},i.prototype.buildRectangle=function(t,e){var r=t.shape,i=r.x,o=r.y,s=r.width,a=r.height;if(t.fill){var h=n.hex2rgb(t.fillColor),u=t.fillAlpha,l=h[0]*u,c=h[1]*u,p=h[2]*u,d=e.points,f=e.indices,v=d.length/6;d.push(i,o),d.push(l,c,p,u),d.push(i+s,o),d.push(l,c,p,u),d.push(i,o+a),d.push(l,c,p,u),d.push(i+s,o+a),d.push(l,c,p,u),f.push(v,v,v+1,v+2,v+3,v+3)}if(t.lineWidth){var g=t.points;t.points=[i,o,i+s,o,i+s,o+a,i,o+a,i,o],this.buildLine(t,e),t.points=g}},i.prototype.buildRoundedRectangle=function(t,e){var r=t.shape,i=r.x,o=r.y,s=r.width,a=r.height,h=r.radius,u=[];if(u.push(i,o+h),this.quadraticBezierCurve(i,o+a-h,i,o+a,i+h,o+a,u),this.quadraticBezierCurve(i+s-h,o+a,i+s,o+a,i+s,o+a-h,u),this.quadraticBezierCurve(i+s,o+h,i+s,o,i+s-h,o,u),this.quadraticBezierCurve(i+h,o,i,o,i,o+h+1e-10,u),t.fill){var c=n.hex2rgb(t.fillColor),p=t.fillAlpha,d=c[0]*p,f=c[1]*p,v=c[2]*p,g=e.points,m=e.indices,y=g.length/6,x=l(u,null,2),b=0;for(b=0;b=m;m++)g=m/f,h=a(t,r,g),u=a(e,i,g),l=a(r,n,g),c=a(i,o,g),p=a(h,l,g),d=a(u,c,g),v.push(p,d);return v},i.prototype.buildCircle=function(t,e){var r,i,o=t.shape,a=o.x,h=o.y;t.type===s.SHAPES.CIRC?(r=o.radius,i=o.radius):(r=o.width,i=o.height);var u=Math.floor(30*Math.sqrt(o.radius))||Math.floor(15*Math.sqrt(o.width+o.height)),l=2*Math.PI/u,c=0;if(t.fill){var p=n.hex2rgb(t.fillColor),d=t.fillAlpha,f=p[0]*d,v=p[1]*d,g=p[2]*d,m=e.points,y=e.indices,x=m.length/6;for(y.push(x),c=0;u+1>c;c++)m.push(a,h,f,v,g,d),m.push(a+Math.sin(l*c)*r,h+Math.cos(l*c)*i,f,v,g,d),y.push(x++,x++);y.push(x-1)}if(t.lineWidth){var b=t.points;for(t.points=[],c=0;u+1>c;c++)t.points.push(a+Math.sin(l*c)*r,h+Math.cos(l*c)*i);this.buildLine(t,e),t.points=b}},i.prototype.buildLine=function(t,e){var r=0,i=t.points;if(0!==i.length){var s=new o.Point(i[0],i[1]),a=new o.Point(i[i.length-2],i[i.length-1]);if(s.x===a.x&&s.y===a.y){i=i.slice(),i.pop(),i.pop(),a=new o.Point(i[i.length-2],i[i.length-1]);var h=a.x+.5*(s.x-a.x),u=a.y+.5*(s.y-a.y);i.unshift(h,u),i.push(h,u)}var l,c,p,d,f,v,g,m,y,x,b,_,T,E,S,w,C,A,M,R,O,D,P,F=e.points,L=e.indices,B=i.length/2,I=i.length,N=F.length/6,U=t.lineWidth/2,k=n.hex2rgb(t.lineColor),j=t.lineAlpha,G=k[0]*j,Y=k[1]*j,X=k[2]*j;for(p=i[0],d=i[1],f=i[2],v=i[3],y=-(d-v),x=p-f,P=Math.sqrt(y*y+x*x),y/=P,x/=P,y*=U,x*=U,F.push(p-y,d-x,G,Y,X,j),F.push(p+y,d+x,G,Y,X,j),r=1;B-1>r;r++)p=i[2*(r-1)],d=i[2*(r-1)+1],f=i[2*r],v=i[2*r+1],g=i[2*(r+1)],m=i[2*(r+1)+1],y=-(d-v),x=p-f,P=Math.sqrt(y*y+x*x),y/=P,x/=P,y*=U,x*=U,b=-(v-m),_=f-g,P=Math.sqrt(b*b+_*_),b/=P,_/=P,b*=U,_*=U,S=-x+d-(-x+v),w=-y+f-(-y+p),C=(-y+p)*(-x+v)-(-y+f)*(-x+d),A=-_+m-(-_+v),M=-b+f-(-b+g),R=(-b+g)*(-_+v)-(-b+f)*(-_+m),O=S*M-A*w,Math.abs(O)<.1?(O+=10.1,F.push(f-y,v-x,G,Y,X,j),F.push(f+y,v+x,G,Y,X,j)):(l=(w*R-M*C)/O,c=(A*C-S*R)/O,D=(l-f)*(l-f)+(c-v)*(c-v),D>19600?(T=y-b,E=x-_,P=Math.sqrt(T*T+E*E),T/=P,E/=P,T*=U,E*=U,F.push(f-T,v-E),F.push(G,Y,X,j),F.push(f+T,v+E),F.push(G,Y,X,j),F.push(f-T,v-E),F.push(G,Y,X,j),I++):(F.push(l,c),F.push(G,Y,X,j),F.push(f-(l-f),v-(c-v)),F.push(G,Y,X,j)));for(p=i[2*(B-2)],d=i[2*(B-2)+1],f=i[2*(B-1)],v=i[2*(B-1)+1],y=-(d-v),x=p-f,P=Math.sqrt(y*y+x*x),y/=P,x/=P,y*=U,x*=U,F.push(f-y,v-x),F.push(G,Y,X,j),F.push(f+y,v+x),F.push(G,Y,X,j),L.push(N),r=0;I>r;r++)L.push(N++);L.push(N-1)}},i.prototype.buildComplexPoly=function(t,e){var r=t.points.slice();if(!(r.length<6)){var i=e.indices;e.points=r,e.alpha=t.fillAlpha,e.color=n.hex2rgb(t.fillColor);for(var o,s,a=1/0,h=-(1/0),u=1/0,l=-(1/0),c=0;co?o:a,h=o>h?o:h,u=u>s?s:u,l=s>l?s:l;r.push(a,u,h,u,h,l,a,l);var p=r.length/2;for(c=0;p>c;c++)i.push(c)}},i.prototype.buildPoly=function(t,e){var r=t.points;if(!(r.length<6)){var i=e.points,o=e.indices,s=r.length/2,a=n.hex2rgb(t.fillColor),h=t.fillAlpha,u=a[0]*h,c=a[1]*h,p=a[2]*h,d=l(r,null,2);if(!d)return!1;var f=i.length/6,v=0;for(v=0;vv;v++)i.push(r[2*v],r[2*v+1],u,c,p,h);return!0}}},{"../../const":38,"../../math":48,"../../renderers/webgl/WebGLRenderer":65,"../../renderers/webgl/utils/ObjectRenderer":80,"../../utils":98,"./WebGLGraphicsData":44,earcut:24}],44:[function(t,e,r){function i(t){this.gl=t,this.color=[0,0,0],this.points=[],this.indices=[],this.buffer=t.createBuffer(),this.indexBuffer=t.createBuffer(),this.mode=1,this.alpha=1,this.dirty=!0,this.glPoints=null,this.glIndices=null}i.prototype.constructor=i,e.exports=i,i.prototype.reset=function(){this.points.length=0,this.indices.length=0},i.prototype.upload=function(){var t=this.gl;this.glPoints=new Float32Array(this.points),t.bindBuffer(t.ARRAY_BUFFER,this.buffer),t.bufferData(t.ARRAY_BUFFER,this.glPoints,t.STATIC_DRAW),this.glIndices=new Uint16Array(this.indices),t.bindBuffer(t.ELEMENT_ARRAY_BUFFER,this.indexBuffer),t.bufferData(t.ELEMENT_ARRAY_BUFFER,this.glIndices,t.STATIC_DRAW),this.dirty=!1},i.prototype.destroy=function(){this.color=null,this.points=null,this.indices=null,this.gl.deleteBuffer(this.buffer),this.gl.deleteBuffer(this.indexBuffer),this.gl=null,this.buffer=null,this.indexBuffer=null,this.glPoints=null,this.glIndices=null}},{}],45:[function(t,e,r){var i=e.exports=Object.assign(t("./const"),t("./math"),{utils:t("./utils"),ticker:t("./ticker"),DisplayObject:t("./display/DisplayObject"),Container:t("./display/Container"),Sprite:t("./sprites/Sprite"),ParticleContainer:t("./particles/ParticleContainer"),SpriteRenderer:t("./sprites/webgl/SpriteRenderer"),ParticleRenderer:t("./particles/webgl/ParticleRenderer"),Text:t("./text/Text"),Graphics:t("./graphics/Graphics"),GraphicsData:t("./graphics/GraphicsData"),GraphicsRenderer:t("./graphics/webgl/GraphicsRenderer"),Texture:t("./textures/Texture"),BaseTexture:t("./textures/BaseTexture"),RenderTexture:t("./textures/RenderTexture"),VideoBaseTexture:t("./textures/VideoBaseTexture"),TextureUvs:t("./textures/TextureUvs"),CanvasRenderer:t("./renderers/canvas/CanvasRenderer"),CanvasGraphics:t("./renderers/canvas/utils/CanvasGraphics"),CanvasBuffer:t("./renderers/canvas/utils/CanvasBuffer"),WebGLRenderer:t("./renderers/webgl/WebGLRenderer"),WebGLManager:t("./renderers/webgl/managers/WebGLManager"),ShaderManager:t("./renderers/webgl/managers/ShaderManager"),Shader:t("./renderers/webgl/shaders/Shader"),ObjectRenderer:t("./renderers/webgl/utils/ObjectRenderer"),RenderTarget:t("./renderers/webgl/utils/RenderTarget"),AbstractFilter:t("./renderers/webgl/filters/AbstractFilter"),FXAAFilter:t("./renderers/webgl/filters/FXAAFilter"),SpriteMaskFilter:t("./renderers/webgl/filters/SpriteMaskFilter"),glCore:t("pixi-gl-core"),autoDetectRenderer:function(t,e,r,n){return t=t||800,e=e||600,!n&&i.utils.isWebGLSupported()?new i.WebGLRenderer(t,e,r):new i.CanvasRenderer(t,e,r)}})},{"./const":38,"./display/Container":39,"./display/DisplayObject":40,"./graphics/Graphics":41,"./graphics/GraphicsData":42,"./graphics/webgl/GraphicsRenderer":43,"./math":48,"./particles/ParticleContainer":54,"./particles/webgl/ParticleRenderer":56,"./renderers/canvas/CanvasRenderer":59,"./renderers/canvas/utils/CanvasBuffer":60,"./renderers/canvas/utils/CanvasGraphics":61,"./renderers/webgl/WebGLRenderer":65,"./renderers/webgl/filters/AbstractFilter":66,"./renderers/webgl/filters/FXAAFilter":67,"./renderers/webgl/filters/SpriteMaskFilter":68,"./renderers/webgl/managers/ShaderManager":72,"./renderers/webgl/managers/WebGLManager":74,"./renderers/webgl/shaders/Shader":77,"./renderers/webgl/utils/ObjectRenderer":80,"./renderers/webgl/utils/RenderTarget":82,"./sprites/Sprite":86,"./sprites/webgl/SpriteRenderer":87,"./text/Text":89,"./textures/BaseTexture":90,"./textures/RenderTexture":91,"./textures/Texture":92,"./textures/TextureUvs":93,"./textures/VideoBaseTexture":94,"./ticker":96,"./utils":98,"pixi-gl-core":1}],46:[function(t,e,r){function i(){this.a=1,this.b=0,this.c=0,this.d=1,this.tx=0,this.ty=0}var n=t("./Point");i.prototype.constructor=i,e.exports=i,i.prototype.fromArray=function(t){this.a=t[0],this.b=t[1],this.c=t[3],this.d=t[4],this.tx=t[2],this.ty=t[5]},i.prototype.set=function(t,e,r,i,n,o){return this.a=t,this.b=e,this.c=r,this.d=i,this.tx=n,this.ty=o,this},i.prototype.toArray=function(t,e){this.array||(this.array=new Float32Array(9));var r=e||this.array;return t?(r[0]=this.a,r[1]=this.b,r[2]=0,r[3]=this.c,r[4]=this.d,r[5]=0,r[6]=this.tx,r[7]=this.ty,r[8]=1):(r[0]=this.a,r[1]=this.c,r[2]=this.tx,r[3]=this.b,r[4]=this.d,r[5]=this.ty,r[6]=0,r[7]=0,r[8]=1),r},i.prototype.apply=function(t,e){e=e||new n;var r=t.x,i=t.y;return e.x=this.a*r+this.c*i+this.tx,e.y=this.b*r+this.d*i+this.ty,e},i.prototype.applyInverse=function(t,e){e=e||new n;var r=1/(this.a*this.d+this.c*-this.b),i=t.x,o=t.y;return e.x=this.d*r*i+-this.c*r*o+(this.ty*this.c-this.tx*this.d)*r,e.y=this.a*r*o+-this.b*r*i+(-this.ty*this.a+this.tx*this.b)*r,e},i.prototype.translate=function(t,e){return this.tx+=t,this.ty+=e,this},i.prototype.scale=function(t,e){return this.a*=t,this.d*=e,this.c*=t,this.b*=e,this.tx*=t,this.ty*=e,this},i.prototype.rotate=function(t){var e=Math.cos(t),r=Math.sin(t),i=this.a,n=this.c,o=this.tx;return this.a=i*e-this.b*r,this.b=i*r+this.b*e,this.c=n*e-this.d*r,this.d=n*r+this.d*e,this.tx=o*e-this.ty*r,this.ty=o*r+this.ty*e,this},i.prototype.append=function(t){var e=this.a,r=this.b,i=this.c,n=this.d;return this.a=t.a*e+t.b*i,this.b=t.a*r+t.b*n,this.c=t.c*e+t.d*i,this.d=t.c*r+t.d*n,this.tx=t.tx*e+t.ty*i+this.tx,this.ty=t.tx*r+t.ty*n+this.ty,this},i.prototype.setTransform=function(t,e,r,i,n,o,s,a,h){var u,l,c,p,d,f,v,g,m,y;return d=Math.sin(s),f=Math.cos(s),v=Math.cos(h),g=Math.sin(h),m=-Math.sin(a),y=Math.cos(a),u=f*n,l=d*n,c=-d*o,p=f*o,this.a=v*u+g*c,this.b=v*l+g*p,this.c=m*u+y*c,this.d=m*l+y*p,this.tx=t+(r*u+i*c),this.ty=e+(r*l+i*p),this},i.prototype.prepend=function(t){var e=this.tx;if(1!==t.a||0!==t.b||0!==t.c||1!==t.d){var r=this.a,i=this.c;this.a=r*t.a+this.b*t.c,this.b=r*t.b+this.b*t.d,this.c=i*t.a+this.d*t.c,this.d=i*t.b+this.d*t.d}return this.tx=e*t.a+this.ty*t.c+t.tx,this.ty=e*t.b+this.ty*t.d+t.ty,this},i.prototype.invert=function(){var t=this.a,e=this.b,r=this.c,i=this.d,n=this.tx,o=t*i-e*r;return this.a=i/o,this.b=-e/o,this.c=-r/o,this.d=t/o,this.tx=(r*this.ty-i*n)/o,this.ty=-(t*this.ty-e*n)/o,this},i.prototype.identity=function(){return this.a=1,this.b=0,this.c=0,this.d=1,this.tx=0,this.ty=0,this},i.prototype.clone=function(){var t=new i;return t.a=this.a,t.b=this.b,t.c=this.c,t.d=this.d,t.tx=this.tx,t.ty=this.ty,t},i.prototype.copy=function(t){return t.a=this.a,t.b=this.b,t.c=this.c,t.d=this.d,t.tx=this.tx,t.ty=this.ty,t},i.IDENTITY=new i,i.TEMP_MATRIX=new i},{"./Point":47}],47:[function(t,e,r){function i(t,e){this.x=t||0,this.y=e||0}i.prototype.constructor=i,e.exports=i,i.prototype.clone=function(){return new i(this.x,this.y)},i.prototype.copy=function(t){this.set(t.x,t.y)},i.prototype.equals=function(t){return t.x===this.x&&t.y===this.y},i.prototype.set=function(t,e){this.x=t||0,this.y=e||(0!==e?this.x:0)}},{}],48:[function(t,e,r){e.exports={Point:t("./Point"),Matrix:t("./Matrix"),Circle:t("./shapes/Circle"),Ellipse:t("./shapes/Ellipse"),Polygon:t("./shapes/Polygon"),Rectangle:t("./shapes/Rectangle"),RoundedRectangle:t("./shapes/RoundedRectangle")}},{"./Matrix":46,"./Point":47,"./shapes/Circle":49,"./shapes/Ellipse":50,"./shapes/Polygon":51,"./shapes/Rectangle":52,"./shapes/RoundedRectangle":53}],49:[function(t,e,r){function i(t,e,r){this.x=t||0,this.y=e||0,this.radius=r||0,this.type=o.SHAPES.CIRC}var n=t("./Rectangle"),o=t("../../const");i.prototype.constructor=i,e.exports=i,i.prototype.clone=function(){return new i(this.x,this.y,this.radius)},i.prototype.contains=function(t,e){if(this.radius<=0)return!1;var r=this.x-t,i=this.y-e,n=this.radius*this.radius;return r*=r,i*=i,n>=r+i},i.prototype.getBounds=function(){return new n(this.x-this.radius,this.y-this.radius,2*this.radius,2*this.radius)}},{"../../const":38,"./Rectangle":52}],50:[function(t,e,r){function i(t,e,r,i){this.x=t||0,this.y=e||0,this.width=r||0,this.height=i||0,this.type=o.SHAPES.ELIP}var n=t("./Rectangle"),o=t("../../const");i.prototype.constructor=i,e.exports=i,i.prototype.clone=function(){return new i(this.x,this.y,this.width,this.height)},i.prototype.contains=function(t,e){if(this.width<=0||this.height<=0)return!1;var r=(t-this.x)/this.width,i=(e-this.y)/this.height;return r*=r,i*=i,1>=r+i},i.prototype.getBounds=function(){return new n(this.x-this.width,this.y-this.height,this.width,this.height)}},{"../../const":38,"./Rectangle":52}],51:[function(t,e,r){function i(t){var e=t;if(!Array.isArray(e)){e=new Array(arguments.length);for(var r=0;rs;s++)i.push(e[s].x,e[s].y);e=i}this.closed=!0,this.points=e,this.type=o.SHAPES.POLY}var n=t("../Point"),o=t("../../const");i.prototype.constructor=i,e.exports=i,i.prototype.clone=function(){return new i(this.points.slice())},i.prototype.contains=function(t,e){for(var r=!1,i=this.points.length/2,n=0,o=i-1;i>n;o=n++){var s=this.points[2*n],a=this.points[2*n+1],h=this.points[2*o],u=this.points[2*o+1],l=a>e!=u>e&&(h-s)*(e-a)/(u-a)+s>t;l&&(r=!r)}return r}},{"../../const":38,"../Point":47}],52:[function(t,e,r){function i(t,e,r,i){this.x=t||0,this.y=e||0,this.width=r||0,this.height=i||0,this.type=n.SHAPES.RECT}var n=t("../../const");i.prototype.constructor=i,e.exports=i,i.EMPTY=new i(0,0,0,0),i.prototype.clone=function(){return new i(this.x,this.y,this.width,this.height)},i.prototype.contains=function(t,e){return this.width<=0||this.height<=0?!1:t>=this.x&&t=this.y&&e=this.x&&t<=this.x+this.width&&e>=this.y&&e<=this.y+this.height?!0:!1}},{"../../const":38}],54:[function(t,e,r){function i(t,e,r){n.call(this),r=r||15e3,t=t||15e3;var i=16384;r>i&&(r=i),r>t&&(r=t),this._properties=[!1,!0,!1,!1,!1],this._maxSize=t,this._batchSize=r,this._buffers=null,this._bufferToUpdate=0,this.interactiveChildren=!1,this.blendMode=o.BLEND_MODES.NORMAL,this.roundPixels=!0,this.setProperties(e)}var n=t("../display/Container"),o=t("../const");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.setProperties=function(t){t&&(this._properties[0]="scale"in t?!!t.scale:this._properties[0],this._properties[1]="position"in t?!!t.position:this._properties[1],this._properties[2]="rotation"in t?!!t.rotation:this._properties[2],this._properties[3]="uvs"in t?!!t.uvs:this._properties[3],this._properties[4]="alpha"in t?!!t.alpha:this._properties[4])},i.prototype.updateTransform=function(){this.displayObjectUpdateTransform()},i.prototype.renderWebGL=function(t){this.visible&&!(this.worldAlpha<=0)&&this.children.length&&this.renderable&&(t.setObjectRenderer(t.plugins.particle),t.plugins.particle.render(this))},i.prototype.onChildrenChange=function(t){var e=Math.floor(t/this._batchSize);er;r+=6,i+=4)this.indices[r+0]=i+0,this.indices[r+1]=i+1,this.indices[r+2]=i+2,this.indices[r+3]=i+0,this.indices[r+4]=i+2,this.indices[r+5]=i+3;this.shader=null,this.indexBuffer=null,this.properties=null,this.tempMatrix=new h.Matrix}var n=t("../../renderers/webgl/utils/ObjectRenderer"),o=t("../../renderers/webgl/WebGLRenderer"),s=t("./ParticleShader"),a=t("./ParticleBuffer"),h=t("../../math");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,o.registerPlugin("particle",i),i.prototype.onContextChange=function(){var t=this.renderer.gl;this.shader=new s(this.renderer.shaderManager),this.indexBuffer=t.createBuffer(),t.bindBuffer(t.ELEMENT_ARRAY_BUFFER,this.indexBuffer),t.bufferData(t.ELEMENT_ARRAY_BUFFER,this.indices,t.STATIC_DRAW),this.properties=[{attribute:this.shader.attributes.aVertexPosition,size:2,uploadFunction:this.uploadVertices,offset:0},{attribute:this.shader.attributes.aPositionCoord,size:2,uploadFunction:this.uploadPosition,offset:0},{attribute:this.shader.attributes.aRotation,size:1,uploadFunction:this.uploadRotation,offset:0},{attribute:this.shader.attributes.aTextureCoord,size:2,uploadFunction:this.uploadUvs,offset:0},{attribute:this.shader.attributes.aColor,size:1,uploadFunction:this.uploadAlpha,offset:0}]},i.prototype.start=function(){var t=this.renderer.gl;t.activeTexture(t.TEXTURE0),t.bindBuffer(t.ELEMENT_ARRAY_BUFFER,this.indexBuffer);var e=this.shader;this.renderer.shaderManager.setShader(e)},i.prototype.render=function(t){var e=t.children,r=e.length,i=t._maxSize,n=t._batchSize;if(0!==r){r>i&&(r=i),t._buffers||(t._buffers=this.generateBuffers(t)),this.renderer.blendModeManager.setBlendMode(t.blendMode);var o=this.renderer.gl,s=t.worldTransform.copy(this.tempMatrix);s.prepend(this.renderer.currentRenderTarget.projectionMatrix),o.uniformMatrix3fv(this.shader.uniforms.projectionMatrix._location,!1,s.toArray(!0)),o.uniform1f(this.shader.uniforms.uAlpha._location,t.worldAlpha);var a=e[0]._texture.baseTexture;if(a._glTextures[o.id])o.bindTexture(o.TEXTURE_2D,a._glTextures[o.id]);else{if(!this.renderer.updateTexture(a))return;t._properties[0]&&t._properties[3]||(t._bufferToUpdate=0)}for(var h=0,u=0;r>h;h+=n,u+=1){var l=r-h;l>n&&(l=n);var c=t._buffers[u];c.uploadDynamic(e,h,l),t._bufferToUpdate===u&&(c.uploadStatic(e,h,l),t._bufferToUpdate=u+1),c.bind(this.shader),o.drawElements(o.TRIANGLES,6*l,o.UNSIGNED_SHORT,0),this.renderer.drawCount++}}},i.prototype.generateBuffers=function(t){var e,r=this.renderer.gl,i=[],n=t._maxSize,o=t._batchSize,s=t._properties;for(e=0;n>e;e+=o)i.push(new a(r,this.properties,s,o));return i},i.prototype.uploadVertices=function(t,e,r,i,n,o){for(var s,a,h,u,l,c,p,d,f,v=0;r>v;v++)s=t[e+v],a=s._texture,u=s.scale.x,l=s.scale.y,a.trim?(h=a.trim,p=h.x-s.anchor.x*h.width,c=p+a.crop.width,f=h.y-s.anchor.y*h.height,d=f+a.crop.height):(c=a._frame.width*(1-s.anchor.x),p=a._frame.width*-s.anchor.x,d=a._frame.height*(1-s.anchor.y),f=a._frame.height*-s.anchor.y),i[o]=p*u,i[o+1]=f*l,i[o+n]=c*u,i[o+n+1]=f*l,i[o+2*n]=c*u,i[o+2*n+1]=d*l,i[o+3*n]=p*u,i[o+3*n+1]=d*l,o+=4*n},i.prototype.uploadPosition=function(t,e,r,i,n,o){for(var s=0;r>s;s++){var a=t[e+s].position;i[o]=a.x,i[o+1]=a.y,i[o+n]=a.x,i[o+n+1]=a.y,i[o+2*n]=a.x,i[o+2*n+1]=a.y,i[o+3*n]=a.x,i[o+3*n+1]=a.y,o+=4*n}},i.prototype.uploadRotation=function(t,e,r,i,n,o){for(var s=0;r>s;s++){var a=t[e+s].rotation;i[o]=a,i[o+n]=a,i[o+2*n]=a,i[o+3*n]=a,o+=4*n}},i.prototype.uploadUvs=function(t,e,r,i,n,o){for(var s=0;r>s;s++){var a=t[e+s]._texture._uvs;a?(i[o]=a.x0,i[o+1]=a.y0,i[o+n]=a.x1,i[o+n+1]=a.y1,i[o+2*n]=a.x2,i[o+2*n+1]=a.y2,i[o+3*n]=a.x3,i[o+3*n+1]=a.y3,o+=4*n):(i[o]=0,i[o+1]=0,i[o+n]=0,i[o+n+1]=0,i[o+2*n]=0,i[o+2*n+1]=0,i[o+3*n]=0,i[o+3*n+1]=0,o+=4*n)}},i.prototype.uploadAlpha=function(t,e,r,i,n,o){for(var s=0;r>s;s++){var a=t[e+s].alpha;i[o]=a,i[o+n]=a,i[o+2*n]=a,i[o+3*n]=a,o+=4*n}},i.prototype.destroy=function(){this.renderer.gl&&this.renderer.gl.deleteBuffer(this.indexBuffer),n.prototype.destroy.apply(this,arguments),this.shader.destroy(),this.indices=null,this.tempMatrix=null}},{"../../math":48,"../../renderers/webgl/WebGLRenderer":65,"../../renderers/webgl/utils/ObjectRenderer":80,"./ParticleBuffer":55,"./ParticleShader":57}],57:[function(t,e,r){function i(t){n.call(this,t,["attribute vec2 aVertexPosition;","attribute vec2 aTextureCoord;","attribute float aColor;","attribute vec2 aPositionCoord;","attribute vec2 aScale;","attribute float aRotation;","uniform mat3 projectionMatrix;","varying vec2 vTextureCoord;","varying float vColor;","void main(void){"," vec2 v = aVertexPosition;"," v.x = (aVertexPosition.x) * cos(aRotation) - (aVertexPosition.y) * sin(aRotation);"," v.y = (aVertexPosition.x) * sin(aRotation) + (aVertexPosition.y) * cos(aRotation);"," v = v + aPositionCoord;"," gl_Position = vec4((projectionMatrix * vec3(v, 1.0)).xy, 0.0, 1.0);"," vTextureCoord = aTextureCoord;"," vColor = aColor;","}"].join("\n"),["precision lowp float;","varying vec2 vTextureCoord;","varying float vColor;","uniform sampler2D uSampler;","uniform float uAlpha;","void main(void){"," vec4 color = texture2D(uSampler, vTextureCoord) * vColor * uAlpha;"," if (color.a == 0.0) discard;"," gl_FragColor = color;","}"].join("\n"),{uAlpha:{type:"1f",value:1}},{aPositionCoord:0,aRotation:0})}var n=t("../../renderers/webgl/shaders/TextureShader");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i},{"../../renderers/webgl/shaders/TextureShader":78}],58:[function(t,e,r){function i(t,e,r,i){if(a.call(this),n.sayHello(t),i)for(var h in s.DEFAULT_RENDER_OPTIONS)"undefined"==typeof i[h]&&(i[h]=s.DEFAULT_RENDER_OPTIONS[h]);else i=s.DEFAULT_RENDER_OPTIONS;this.type=s.RENDERER_TYPE.UNKNOWN,this.width=e||800,this.height=r||600,this.view=i.view||document.createElement("canvas"),this.resolution=i.resolution,this.transparent=i.transparent,this.autoResize=i.autoResize||!1,this.blendModes=null,this.preserveDrawingBuffer=i.preserveDrawingBuffer,this.clearBeforeRender=i.clearBeforeRender,this.roundPixels=i.roundPixels,this._backgroundColor=0,this._backgroundColorRgba=[0,0,0,0],this._backgroundColorString="#000000",this.backgroundColor=i.backgroundColor||this._backgroundColor,this._tempDisplayObjectParent={worldTransform:new o.Matrix,worldAlpha:1,children:[]},this._lastObjectRendered=this._tempDisplayObjectParent}var n=t("../utils"),o=t("../math"),s=t("../const"),a=t("eventemitter3");i.prototype=Object.create(a.prototype),i.prototype.constructor=i,e.exports=i,Object.defineProperties(i.prototype,{backgroundColor:{get:function(){return this._backgroundColor},set:function(t){this._backgroundColor=t,this._backgroundColorString=n.hex2string(t),n.hex2rgb(t,this._backgroundColorRgba)}}}),i.prototype.resize=function(t,e){this.width=t*this.resolution,this.height=e*this.resolution,this.view.width=this.width,this.view.height=this.height,this.autoResize&&(this.view.style.width=this.width/this.resolution+"px",this.view.style.height=this.height/this.resolution+"px")},i.prototype.destroy=function(t){t&&this.view.parentNode&&this.view.parentNode.removeChild(this.view),this.type=s.RENDERER_TYPE.UNKNOWN,this.width=0,this.height=0,this.view=null,this.resolution=0,this.transparent=!1,this.autoResize=!1,this.blendModes=null,this.preserveDrawingBuffer=!1,this.clearBeforeRender=!1,this.roundPixels=!1,this._backgroundColor=0, -this._backgroundColorRgba=null,this._backgroundColorString=null}},{"../const":38,"../math":48,"../utils":98,eventemitter3:25}],59:[function(t,e,r){function i(t,e,r){r=r||{},n.call(this,"Canvas",t,e,r),this.type=h.RENDERER_TYPE.CANVAS,this.context=this.view.getContext("2d",{alpha:this.transparent}),this.refresh=!0,this.maskManager=new o,this.smoothProperty="imageSmoothingEnabled",this.context.imageSmoothingEnabled||(this.context.webkitImageSmoothingEnabled?this.smoothProperty="webkitImageSmoothingEnabled":this.context.mozImageSmoothingEnabled?this.smoothProperty="mozImageSmoothingEnabled":this.context.oImageSmoothingEnabled?this.smoothProperty="oImageSmoothingEnabled":this.context.msImageSmoothingEnabled&&(this.smoothProperty="msImageSmoothingEnabled")),this.initPlugins(),this._mapBlendModes(),this._tempDisplayObjectParent={worldTransform:new a.Matrix,worldAlpha:1},this.resize(t,e)}var n=t("../SystemRenderer"),o=t("./utils/CanvasMaskManager"),s=t("../../utils"),a=t("../../math"),h=t("../../const");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,s.pluginTarget.mixin(i),i.prototype.render=function(t){this.emit("prerender");var e=t.parent;this._lastObjectRendered=t,t.parent=this._tempDisplayObjectParent,t.updateTransform(),t.parent=e,this.context.setTransform(1,0,0,1,0,0),this.context.globalAlpha=1,this.context.globalCompositeOperation=this.blendModes[h.BLEND_MODES.NORMAL],navigator.isCocoonJS&&this.view.screencanvas&&(this.context.fillStyle="black",this.context.clear()),this.clearBeforeRender&&(this.transparent?this.context.clearRect(0,0,this.width,this.height):(this.context.fillStyle=this._backgroundColorString,this.context.fillRect(0,0,this.width,this.height))),this.renderDisplayObject(t,this.context),this.emit("postrender")},i.prototype.destroy=function(t){this.destroyPlugins(),n.prototype.destroy.call(this,t),this.context=null,this.refresh=!0,this.maskManager.destroy(),this.maskManager=null,this.smoothProperty=null},i.prototype.renderDisplayObject=function(t,e){var r=this.context;this.context=e,t.renderCanvas(this),this.context=r},i.prototype.resize=function(t,e){n.prototype.resize.call(this,t,e),this.smoothProperty&&(this.context[this.smoothProperty]=h.SCALE_MODES.DEFAULT===h.SCALE_MODES.LINEAR)},i.prototype._mapBlendModes=function(){this.blendModes||(this.blendModes={},s.canUseNewCanvasBlendModes()?(this.blendModes[h.BLEND_MODES.NORMAL]="source-over",this.blendModes[h.BLEND_MODES.ADD]="lighter",this.blendModes[h.BLEND_MODES.MULTIPLY]="multiply",this.blendModes[h.BLEND_MODES.SCREEN]="screen",this.blendModes[h.BLEND_MODES.OVERLAY]="overlay",this.blendModes[h.BLEND_MODES.DARKEN]="darken",this.blendModes[h.BLEND_MODES.LIGHTEN]="lighten",this.blendModes[h.BLEND_MODES.COLOR_DODGE]="color-dodge",this.blendModes[h.BLEND_MODES.COLOR_BURN]="color-burn",this.blendModes[h.BLEND_MODES.HARD_LIGHT]="hard-light",this.blendModes[h.BLEND_MODES.SOFT_LIGHT]="soft-light",this.blendModes[h.BLEND_MODES.DIFFERENCE]="difference",this.blendModes[h.BLEND_MODES.EXCLUSION]="exclusion",this.blendModes[h.BLEND_MODES.HUE]="hue",this.blendModes[h.BLEND_MODES.SATURATION]="saturate",this.blendModes[h.BLEND_MODES.COLOR]="color",this.blendModes[h.BLEND_MODES.LUMINOSITY]="luminosity"):(this.blendModes[h.BLEND_MODES.NORMAL]="source-over",this.blendModes[h.BLEND_MODES.ADD]="lighter",this.blendModes[h.BLEND_MODES.MULTIPLY]="source-over",this.blendModes[h.BLEND_MODES.SCREEN]="source-over",this.blendModes[h.BLEND_MODES.OVERLAY]="source-over",this.blendModes[h.BLEND_MODES.DARKEN]="source-over",this.blendModes[h.BLEND_MODES.LIGHTEN]="source-over",this.blendModes[h.BLEND_MODES.COLOR_DODGE]="source-over",this.blendModes[h.BLEND_MODES.COLOR_BURN]="source-over",this.blendModes[h.BLEND_MODES.HARD_LIGHT]="source-over",this.blendModes[h.BLEND_MODES.SOFT_LIGHT]="source-over",this.blendModes[h.BLEND_MODES.DIFFERENCE]="source-over",this.blendModes[h.BLEND_MODES.EXCLUSION]="source-over",this.blendModes[h.BLEND_MODES.HUE]="source-over",this.blendModes[h.BLEND_MODES.SATURATION]="source-over",this.blendModes[h.BLEND_MODES.COLOR]="source-over",this.blendModes[h.BLEND_MODES.LUMINOSITY]="source-over"))}},{"../../const":38,"../../math":48,"../../utils":98,"../SystemRenderer":58,"./utils/CanvasMaskManager":62}],60:[function(t,e,r){function i(t,e){this.canvas=document.createElement("canvas"),this.context=this.canvas.getContext("2d"),this.canvas.width=t,this.canvas.height=e}i.prototype.constructor=i,e.exports=i,Object.defineProperties(i.prototype,{width:{get:function(){return this.canvas.width},set:function(t){this.canvas.width=t}},height:{get:function(){return this.canvas.height},set:function(t){this.canvas.height=t}}}),i.prototype.clear=function(){this.context.setTransform(1,0,0,1,0,0),this.context.clearRect(0,0,this.canvas.width,this.canvas.height)},i.prototype.resize=function(t,e){this.canvas.width=t,this.canvas.height=e},i.prototype.destroy=function(){this.context=null,this.canvas=null}},{}],61:[function(t,e,r){var i=t("../../../const"),n={};e.exports=n,n.renderGraphics=function(t,e){var r=t.worldAlpha;t.dirty&&(this.updateGraphicsTint(t),t.dirty=!1);for(var n=0;nA?A:C,e.beginPath(),e.moveTo(T,E+C),e.lineTo(T,E+w-C),e.quadraticCurveTo(T,E+w,T+C,E+w),e.lineTo(T+S-C,E+w),e.quadraticCurveTo(T+S,E+w,T+S,E+w-C),e.lineTo(T+S,E+C),e.quadraticCurveTo(T+S,E,T+S-C,E),e.lineTo(T+C,E),e.quadraticCurveTo(T,E,T,E+C),e.closePath(),(o.fillColor||0===o.fillColor)&&(e.globalAlpha=o.fillAlpha*r,e.fillStyle="#"+("00000"+(0|a).toString(16)).substr(-6),e.fill()),o.lineWidth&&(e.globalAlpha=o.lineAlpha*r,e.strokeStyle="#"+("00000"+(0|h).toString(16)).substr(-6),e.stroke())}}},n.renderGraphicsMask=function(t,e){var r=t.graphicsData.length;if(0!==r){e.beginPath();for(var n=0;r>n;n++){var o=t.graphicsData[n],s=o.shape;if(o.type===i.SHAPES.POLY){var a=s.points;e.moveTo(a[0],a[1]);for(var h=1;hw?w:S,e.moveTo(b,_+S),e.lineTo(b,_+E-S),e.quadraticCurveTo(b,_+E,b+S,_+E),e.lineTo(b+T-S,_+E),e.quadraticCurveTo(b+T,_+E,b+T,_+E-S),e.lineTo(b+T,_+S),e.quadraticCurveTo(b+T,_,b+T-S,_),e.lineTo(b+S,_),e.quadraticCurveTo(b,_,b,_+S),e.closePath()}}}},n.updateGraphicsTint=function(t){if(16777215!==t.tint||t._prevTint!==t.tint){t._prevTint=t.tint;for(var e=(t.tint>>16&255)/255,r=(t.tint>>8&255)/255,i=(255&t.tint)/255,n=0;n>16&255)/255*e*255<<16)+((s>>8&255)/255*r*255<<8)+(255&s)/255*i*255,o._lineTint=((a>>16&255)/255*e*255<<16)+((a>>8&255)/255*r*255<<8)+(255&a)/255*i*255}}}},{"../../../const":38}],62:[function(t,e,r){function i(){}var n=t("./CanvasGraphics");i.prototype.constructor=i,e.exports=i,i.prototype.pushMask=function(t,e){e.context.save();var r=t.alpha,i=t.worldTransform,o=e.resolution;e.context.setTransform(i.a*o,i.b*o,i.c*o,i.d*o,i.tx*o,i.ty*o),t.texture||(n.renderGraphicsMask(t,e.context),e.context.clip()),t.worldAlpha=r},i.prototype.popMask=function(t){t.context.restore()},i.prototype.destroy=function(){}},{"./CanvasGraphics":61}],63:[function(t,e,r){var i=t("../../../utils"),n={};e.exports=n,n.getTintedTexture=function(t,e){var r=t.texture;e=n.roundColor(e);var i="#"+("00000"+(0|e).toString(16)).substr(-6);if(r.tintCache=r.tintCache||{},r.tintCache[i])return r.tintCache[i];var o=n.canvas||document.createElement("canvas");if(n.tintMethod(r,e,o),n.convertTintToImage){var s=new Image;s.src=o.toDataURL(),r.tintCache[i]=s}else r.tintCache[i]=o,n.canvas=null;return o},n.tintWithMultiply=function(t,e,r){var i=r.getContext("2d"),n=t.baseTexture.resolution,o=t.crop.clone();o.x*=n,o.y*=n,o.width*=n,o.height*=n,r.width=o.width,r.height=o.height,i.fillStyle="#"+("00000"+(0|e).toString(16)).substr(-6),i.fillRect(0,0,o.width,o.height),i.globalCompositeOperation="multiply",i.drawImage(t.baseTexture.source,o.x,o.y,o.width,o.height,0,0,o.width,o.height),i.globalCompositeOperation="destination-atop",i.drawImage(t.baseTexture.source,o.x,o.y,o.width,o.height,0,0,o.width,o.height)},n.tintWithOverlay=function(t,e,r){var i=r.getContext("2d"),n=t.baseTexture.resolution,o=t.crop.clone();o.x*=n,o.y*=n,o.width*=n,o.height*=n,r.width=o.width,r.height=o.height,i.globalCompositeOperation="copy",i.fillStyle="#"+("00000"+(0|e).toString(16)).substr(-6),i.fillRect(0,0,o.width,o.height),i.globalCompositeOperation="destination-atop",i.drawImage(t.baseTexture.source,o.x,o.y,o.width,o.height,0,0,o.width,o.height)},n.tintWithPerPixel=function(t,e,r){var n=r.getContext("2d"),o=t.baseTexture.resolution,s=t.crop.clone();s.x*=o,s.y*=o,s.width*=o,s.height*=o,r.width=s.width,r.height=s.height,n.globalCompositeOperation="copy",n.drawImage(t.baseTexture.source,s.x,s.y,s.width,s.height,0,0,s.width,s.height);for(var a=i.hex2rgb(e),h=a[0],u=a[1],l=a[2],c=n.getImageData(0,0,s.width,s.height),p=c.data,d=0;de;++e)this.shaders[e].syncUniform(t)}},{"../shaders/TextureShader":78}],67:[function(t,e,r){function i(){n.call(this,"\nprecision mediump float;\n\nattribute vec2 aVertexPosition;\nattribute vec2 aTextureCoord;\nattribute vec4 aColor;\n\nuniform mat3 projectionMatrix;\nuniform vec2 resolution;\n\nvarying vec2 vTextureCoord;\nvarying vec4 vColor;\n\nvarying vec2 vResolution;\n\n//texcoords computed in vertex step\n//to avoid dependent texture reads\nvarying vec2 v_rgbNW;\nvarying vec2 v_rgbNE;\nvarying vec2 v_rgbSW;\nvarying vec2 v_rgbSE;\nvarying vec2 v_rgbM;\n\n\nvoid texcoords(vec2 fragCoord, vec2 resolution,\n out vec2 v_rgbNW, out vec2 v_rgbNE,\n out vec2 v_rgbSW, out vec2 v_rgbSE,\n out vec2 v_rgbM) {\n vec2 inverseVP = 1.0 / resolution.xy;\n v_rgbNW = (fragCoord + vec2(-1.0, -1.0)) * inverseVP;\n v_rgbNE = (fragCoord + vec2(1.0, -1.0)) * inverseVP;\n v_rgbSW = (fragCoord + vec2(-1.0, 1.0)) * inverseVP;\n v_rgbSE = (fragCoord + vec2(1.0, 1.0)) * inverseVP;\n v_rgbM = vec2(fragCoord * inverseVP);\n}\n\nvoid main(void){\n gl_Position = vec4((projectionMatrix * vec3(aVertexPosition, 1.0)).xy, 0.0, 1.0);\n vTextureCoord = aTextureCoord;\n vColor = vec4(aColor.rgb * aColor.a, aColor.a);\n vResolution = resolution;\n\n //compute the texture coords and send them to varyings\n texcoords(aTextureCoord * resolution, resolution, v_rgbNW, v_rgbNE, v_rgbSW, v_rgbSE, v_rgbM);\n}\n",'precision lowp float;\n\n\n/**\nBasic FXAA implementation based on the code on geeks3d.com with the\nmodification that the texture2DLod stuff was removed since it\'s\nunsupported by WebGL.\n\n--\n\nFrom:\nhttps://github.com/mitsuhiko/webgl-meincraft\n\nCopyright (c) 2011 by Armin Ronacher.\n\nSome rights reserved.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are\nmet:\n\n * Redistributions of source code must retain the above copyright\n notice, this list of conditions and the following disclaimer.\n\n * Redistributions in binary form must reproduce the above\n copyright notice, this list of conditions and the following\n disclaimer in the documentation and/or other materials provided\n with the distribution.\n\n * The names of the contributors may not be used to endorse or\n promote products derived from this software without specific\n prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\nLIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\nA PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\nOWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\nSPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\nLIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\nDATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\nTHEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\nOF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n*/\n\n#ifndef FXAA_REDUCE_MIN\n #define FXAA_REDUCE_MIN (1.0/ 128.0)\n#endif\n#ifndef FXAA_REDUCE_MUL\n #define FXAA_REDUCE_MUL (1.0 / 8.0)\n#endif\n#ifndef FXAA_SPAN_MAX\n #define FXAA_SPAN_MAX 8.0\n#endif\n\n//optimized version for mobile, where dependent\n//texture reads can be a bottleneck\nvec4 fxaa(sampler2D tex, vec2 fragCoord, vec2 resolution,\n vec2 v_rgbNW, vec2 v_rgbNE,\n vec2 v_rgbSW, vec2 v_rgbSE,\n vec2 v_rgbM) {\n vec4 color;\n mediump vec2 inverseVP = vec2(1.0 / resolution.x, 1.0 / resolution.y);\n vec3 rgbNW = texture2D(tex, v_rgbNW).xyz;\n vec3 rgbNE = texture2D(tex, v_rgbNE).xyz;\n vec3 rgbSW = texture2D(tex, v_rgbSW).xyz;\n vec3 rgbSE = texture2D(tex, v_rgbSE).xyz;\n vec4 texColor = texture2D(tex, v_rgbM);\n vec3 rgbM = texColor.xyz;\n vec3 luma = vec3(0.299, 0.587, 0.114);\n float lumaNW = dot(rgbNW, luma);\n float lumaNE = dot(rgbNE, luma);\n float lumaSW = dot(rgbSW, luma);\n float lumaSE = dot(rgbSE, luma);\n float lumaM = dot(rgbM, luma);\n float lumaMin = min(lumaM, min(min(lumaNW, lumaNE), min(lumaSW, lumaSE)));\n float lumaMax = max(lumaM, max(max(lumaNW, lumaNE), max(lumaSW, lumaSE)));\n\n mediump vec2 dir;\n dir.x = -((lumaNW + lumaNE) - (lumaSW + lumaSE));\n dir.y = ((lumaNW + lumaSW) - (lumaNE + lumaSE));\n\n float dirReduce = max((lumaNW + lumaNE + lumaSW + lumaSE) *\n (0.25 * FXAA_REDUCE_MUL), FXAA_REDUCE_MIN);\n\n float rcpDirMin = 1.0 / (min(abs(dir.x), abs(dir.y)) + dirReduce);\n dir = min(vec2(FXAA_SPAN_MAX, FXAA_SPAN_MAX),\n max(vec2(-FXAA_SPAN_MAX, -FXAA_SPAN_MAX),\n dir * rcpDirMin)) * inverseVP;\n\n vec3 rgbA = 0.5 * (\n texture2D(tex, fragCoord * inverseVP + dir * (1.0 / 3.0 - 0.5)).xyz +\n texture2D(tex, fragCoord * inverseVP + dir * (2.0 / 3.0 - 0.5)).xyz);\n vec3 rgbB = rgbA * 0.5 + 0.25 * (\n texture2D(tex, fragCoord * inverseVP + dir * -0.5).xyz +\n texture2D(tex, fragCoord * inverseVP + dir * 0.5).xyz);\n\n float lumaB = dot(rgbB, luma);\n if ((lumaB < lumaMin) || (lumaB > lumaMax))\n color = vec4(rgbA, texColor.a);\n else\n color = vec4(rgbB, texColor.a);\n return color;\n}\n\n\nvarying vec2 vTextureCoord;\nvarying vec4 vColor;\nvarying vec2 vResolution;\n\n//texcoords computed in vertex step\n//to avoid dependent texture reads\nvarying vec2 v_rgbNW;\nvarying vec2 v_rgbNE;\nvarying vec2 v_rgbSW;\nvarying vec2 v_rgbSE;\nvarying vec2 v_rgbM;\n\nuniform sampler2D uSampler;\n\n\nvoid main(void){\n\n gl_FragColor = fxaa(uSampler, vTextureCoord * vResolution, vResolution, v_rgbNW, v_rgbNE, v_rgbSW, v_rgbSE, v_rgbM);\n\n}\n',{resolution:{type:"v2",value:{x:1,y:1}}})}var n=t("./AbstractFilter");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.applyFilter=function(t,e,r){var i=t.filterManager,n=this.getShader(t);i.applyFilter(n,e,r)}},{"./AbstractFilter":66}],68:[function(t,e,r){function i(t){var e=new o.Matrix;n.call(this,"attribute vec2 aVertexPosition;\nattribute vec2 aTextureCoord;\nattribute vec4 aColor;\n\nuniform mat3 projectionMatrix;\nuniform mat3 otherMatrix;\n\nvarying vec2 vMaskCoord;\nvarying vec2 vTextureCoord;\nvarying vec4 vColor;\n\nvoid main(void)\n{\n gl_Position = vec4((projectionMatrix * vec3(aVertexPosition, 1.0)).xy, 0.0, 1.0);\n vTextureCoord = aTextureCoord;\n vMaskCoord = ( otherMatrix * vec3( aTextureCoord, 1.0) ).xy;\n vColor = vec4(aColor.rgb * aColor.a, aColor.a);\n}\n","precision lowp float;\n\nvarying vec2 vMaskCoord;\nvarying vec2 vTextureCoord;\nvarying vec4 vColor;\n\nuniform sampler2D uSampler;\nuniform float alpha;\nuniform sampler2D mask;\n\nvoid main(void)\n{\n // check clip! this will stop the mask bleeding out from the edges\n vec2 text = abs( vMaskCoord - 0.5 );\n text = step(0.5, text);\n float clip = 1.0 - max(text.y, text.x);\n vec4 original = texture2D(uSampler, vTextureCoord);\n vec4 masky = texture2D(mask, vMaskCoord);\n original *= (masky.r * masky.a * alpha * clip);\n gl_FragColor = original;\n}\n",{mask:{type:"sampler2D",value:t._texture},alpha:{type:"f",value:1},otherMatrix:{type:"mat3",value:e.toArray(!0)}}),this.maskSprite=t,this.maskMatrix=e}var n=t("./AbstractFilter"),o=t("../../../math");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.applyFilter=function(t,e,r){var i=t.filterManager;this.uniforms.mask.value=this.maskSprite._texture,i.calculateMappedMatrix(e.frame,this.maskSprite,this.maskMatrix),this.uniforms.otherMatrix.value=this.maskMatrix.toArray(!0),this.uniforms.alpha.value=this.maskSprite.worldAlpha;var n=this.getShader(t);i.applyFilter(n,e,r)},Object.defineProperties(i.prototype,{map:{get:function(){return this.uniforms.mask.value},set:function(t){this.uniforms.mask.value=t}},offset:{get:function(){return this.uniforms.offset.value},set:function(t){this.uniforms.offset.value=t}}})},{"../../../math":48,"./AbstractFilter":66}],69:[function(t,e,r){function i(t){n.call(this,t),this.currentBlendMode=99999}var n=t("./WebGLManager");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.setBlendMode=function(t){if(this.currentBlendMode===t)return!1;this.currentBlendMode=t;var e=this.renderer.blendModes[this.currentBlendMode];return this.renderer.gl.blendFunc(e[0],e[1]),!0}},{"./WebGLManager":74}],70:[function(t,e,r){function i(t){n.call(this,t),this.filterStack=[],this.filterStack.push({renderTarget:t.currentRenderTarget,filter:[],bounds:null}),this.texturePool=[],this.textureSize=new h.Rectangle(0,0,t.width,t.height),this.currentFrame=null}var n=t("./WebGLManager"),o=t("../utils/RenderTarget"),s=t("../../../const"),a=t("../utils/Quad"),h=t("../../../math");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.onContextChange=function(){this.texturePool.length=0;var t=this.renderer.gl;this.quad=new a(t)},i.prototype.setFilterStack=function(t){this.filterStack=t},i.prototype.pushFilter=function(t,e){var r=t.filterArea?t.filterArea.clone():t.getBounds();r.x=0|r.x,r.y=0|r.y,r.width=0|r.width,r.height=0|r.height;var i=0|e[0].padding;if(r.x-=i,r.y-=i,r.width+=2*i,r.height+=2*i,this.renderer.currentRenderTarget.transform){var n=this.renderer.currentRenderTarget.transform;r.x+=n.tx,r.y+=n.ty,this.capFilterArea(r),r.x-=n.tx,r.y-=n.ty}else this.capFilterArea(r);if(r.width>0&&r.height>0){this.currentFrame=r;var o=this.getRenderTarget();this.renderer.setRenderTarget(o),o.clear(),this.filterStack.push({renderTarget:o,filter:e})}else this.filterStack.push({renderTarget:null,filter:e})},i.prototype.popFilter=function(){var t=this.filterStack.pop(),e=this.filterStack[this.filterStack.length-1],r=t.renderTarget;if(t.renderTarget){var i=e.renderTarget,n=this.renderer.gl;this.currentFrame=r.frame,this.quad.map(this.textureSize,r.frame),n.bindBuffer(n.ARRAY_BUFFER,this.quad.vertexBuffer),n.bindBuffer(n.ELEMENT_ARRAY_BUFFER,this.quad.indexBuffer);var o=t.filter;if(n.vertexAttribPointer(this.renderer.shaderManager.defaultShader.attributes.aVertexPosition,2,n.FLOAT,!1,0,0),n.vertexAttribPointer(this.renderer.shaderManager.defaultShader.attributes.aTextureCoord,2,n.FLOAT,!1,0,32),n.vertexAttribPointer(this.renderer.shaderManager.defaultShader.attributes.aColor,4,n.FLOAT,!1,0,64),this.renderer.blendModeManager.setBlendMode(s.BLEND_MODES.NORMAL),1===o.length)o[0].uniforms.dimensions&&(o[0].uniforms.dimensions.value[0]=this.renderer.width,o[0].uniforms.dimensions.value[1]=this.renderer.height,o[0].uniforms.dimensions.value[2]=this.quad.vertices[0],o[0].uniforms.dimensions.value[3]=this.quad.vertices[5]),o[0].applyFilter(this.renderer,r,i),this.returnRenderTarget(r);else{for(var a=r,h=this.getRenderTarget(!0),u=0;uthis.textureSize.width&&(t.width=this.textureSize.width-t.x),t.y+t.height>this.textureSize.height&&(t.height=this.textureSize.height-t.y)},i.prototype.resize=function(t,e){this.textureSize.width=t,this.textureSize.height=e;for(var r=0;re;++e)t._array[2*e]=o[e].x,t._array[2*e+1]=o[e].y;s.uniform2fv(i,t._array);break;case"v3v":for(t._array||(t._array=new Float32Array(3*o.length)),e=0,r=o.length;r>e;++e)t._array[3*e]=o[e].x,t._array[3*e+1]=o[e].y,t._array[3*e+2]=o[e].z;s.uniform3fv(i,t._array);break;case"v4v":for(t._array||(t._array=new Float32Array(4*o.length)),e=0,r=o.length;r>e;++e)t._array[4*e]=o[e].x,t._array[4*e+1]=o[e].y,t._array[4*e+2]=o[e].z,t._array[4*e+3]=o[e].w;s.uniform4fv(i,t._array);break;case"t":case"sampler2D":if(!t.value||!t.value.baseTexture.hasLoaded)break;s.activeTexture(s["TEXTURE"+this.textureCount]);var a=t.value.baseTexture._glTextures[s.id];a||(this.initSampler2D(t),a=t.value.baseTexture._glTextures[s.id]),s.bindTexture(s.TEXTURE_2D,a),s.uniform1i(t._location,this.textureCount),this.textureCount++;break;default:console.warn("Pixi.js Shader Warning: Unknown uniform type: "+t.type)}},i.prototype.syncUniforms=function(){this.textureCount=1;for(var t in this.uniforms)this.syncUniform(this.uniforms[t])},i.prototype.initSampler2D=function(t){var e=this.gl,r=t.value.baseTexture;if(r.hasLoaded)if(t.textureData){var i=t.textureData;r._glTextures[e.id]=e.createTexture(),e.bindTexture(e.TEXTURE_2D,r._glTextures[e.id]),e.pixelStorei(e.UNPACK_PREMULTIPLY_ALPHA_WEBGL,r.premultipliedAlpha),e.texImage2D(e.TEXTURE_2D,0,i.luminance?e.LUMINANCE:e.RGBA,e.RGBA,e.UNSIGNED_BYTE,r.source),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MAG_FILTER,i.magFilter?i.magFilter:e.LINEAR),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MIN_FILTER,i.wrapS?i.wrapS:e.CLAMP_TO_EDGE),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,i.wrapS?i.wrapS:e.CLAMP_TO_EDGE),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,i.wrapT?i.wrapT:e.CLAMP_TO_EDGE)}else this.shaderManager.renderer.updateTexture(r)},i.prototype.destroy=function(){this.gl.deleteProgram(this.program),this.gl=null,this.uniforms=null,this.attributes=null,this.vertexSrc=null,this.fragmentSrc=null},i.prototype._glCompile=function(t,e){var r=this.gl.createShader(t);return this.gl.shaderSource(r,e),this.gl.compileShader(r),this.gl.getShaderParameter(r,this.gl.COMPILE_STATUS)?r:(console.log(this.gl.getShaderInfoLog(r)),null)}},{"../../../utils":98}],78:[function(t,e,r){function i(t,e,r,o,s){var a={uSampler:{type:"sampler2D",value:0},projectionMatrix:{type:"mat3",value:new Float32Array([1,0,0,0,1,0,0,0,1])}};if(o)for(var h in o)a[h]=o[h];var u={aVertexPosition:0,aTextureCoord:0,aColor:0};if(s)for(var l in s)u[l]=s[l];e=e||i.defaultVertexSrc,r=r||i.defaultFragmentSrc,n.call(this,t,e,r,a,u)}var n=t("./Shader");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.defaultVertexSrc=["precision lowp float;","attribute vec2 aVertexPosition;","attribute vec2 aTextureCoord;","attribute vec4 aColor;","uniform mat3 projectionMatrix;","varying vec2 vTextureCoord;","varying vec4 vColor;","void main(void){"," gl_Position = vec4((projectionMatrix * vec3(aVertexPosition, 1.0)).xy, 0.0, 1.0);"," vTextureCoord = aTextureCoord;"," vColor = vec4(aColor.rgb * aColor.a, aColor.a);","}"].join("\n"),i.defaultFragmentSrc=["precision lowp float;","varying vec2 vTextureCoord;","varying vec4 vColor;","uniform sampler2D uSampler;","void main(void){"," gl_FragColor = texture2D(uSampler, vTextureCoord) * vColor ;","}"].join("\n")},{"./Shader":77}],79:[function(t,e,r){function i(t){vertexSrc=i.defaultVertexSrc,fragmentSrc=i.defaultFragmentSrc,console.log(fragmentSrc),n.call(this,t,vertexSrc,fragmentSrc)}var n=t("pixi-gl-core").GLShader;i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.defaultVertexSrc=["precision lowp float;","attribute vec2 aVertexPosition;","attribute vec2 aTextureCoord;","attribute vec4 aColor;","uniform mat3 projectionMatrix;","varying vec2 vTextureCoord;","varying vec4 vColor;","void main(void){"," gl_Position = vec4((projectionMatrix * vec3(aVertexPosition, 1.0)).xy, 0.0, 1.0);"," vTextureCoord = aTextureCoord;"," vColor = vec4(aColor.rgb * aColor.a, aColor.a);","}"].join("\n"),i.defaultFragmentSrc=["precision lowp float;","varying vec2 vTextureCoord;","varying vec4 vColor;","uniform sampler2D uSampler;","void main(void){"," gl_FragColor = texture2D(uSampler, vTextureCoord) * vColor ;","}"].join("\n")},{"pixi-gl-core":1}],80:[function(t,e,r){function i(t){n.call(this,t)}var n=t("../managers/WebGLManager");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.start=function(){},i.prototype.stop=function(){this.flush()},i.prototype.flush=function(){},i.prototype.render=function(t){}},{"../managers/WebGLManager":74}],81:[function(t,e,r){function i(t){this.gl=t,this.vertices=new Float32Array([0,0,200,0,200,200,0,200]),this.uvs=new Float32Array([0,0,1,0,1,1,0,1]),this.colors=new Float32Array([1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]),this.indices=new Uint16Array([0,1,2,0,3,2]),this.vertexBuffer=t.createBuffer(),this.indexBuffer=t.createBuffer(),t.bindBuffer(t.ARRAY_BUFFER,this.vertexBuffer),t.bufferData(t.ARRAY_BUFFER,128,t.DYNAMIC_DRAW),t.bindBuffer(t.ELEMENT_ARRAY_BUFFER,this.indexBuffer),t.bufferData(t.ELEMENT_ARRAY_BUFFER,this.indices,t.STATIC_DRAW),this.upload()}i.prototype.constructor=i,i.prototype.map=function(t,e){var r=0,i=0;this.uvs[0]=r,this.uvs[1]=i,this.uvs[2]=r+e.width/t.width,this.uvs[3]=i,this.uvs[4]=r+e.width/t.width,this.uvs[5]=i+e.height/t.height,this.uvs[6]=r,this.uvs[7]=i+e.height/t.height,r=e.x,i=e.y,this.vertices[0]=r,this.vertices[1]=i,this.vertices[2]=r+e.width,this.vertices[3]=i,this.vertices[4]=r+e.width,this.vertices[5]=i+e.height,this.vertices[6]=r,this.vertices[7]=i+e.height,this.upload()},i.prototype.upload=function(){var t=this.gl;t.bindBuffer(t.ARRAY_BUFFER,this.vertexBuffer),t.bufferSubData(t.ARRAY_BUFFER,0,this.vertices),t.bufferSubData(t.ARRAY_BUFFER,32,this.uvs),t.bufferSubData(t.ARRAY_BUFFER,64,this.colors)},i.prototype.destroy=function(){var t=this.gl;t.deleteBuffer(this.vertexBuffer),t.deleteBuffer(this.indexBuffer)},e.exports=i},{}],82:[function(t,e,r){var i=t("../../../math"),n=(t("../../../utils"),t("../../../const")),o=t("pixi-gl-core").GLTexture,s=t("pixi-gl-core").GLFramebuffer,a=t("./StencilMaskStack"),h=function(t,e,r,h,u,l){if(this.gl=t,this.frameBuffer=null,this.texture=null,this.clearColor=[0,0,0,0],this.size=new i.Rectangle(0,0,1,1),this.resolution=u||n.RESOLUTION,this.projectionMatrix=new i.Matrix,this.transform=null,this.frame=null,this.stencilBuffer=null,this.stencilMaskStack=new a,this.filterStack=[{renderTarget:this,filter:[],bounds:this.size}],this.scaleMode=h||n.SCALE_MODES.DEFAULT,this.root=l,this.frameBuffer=new s.createRGBA(t,100,100),this.root)this.frameBuffer.framebuffer=null;else{var c=new o(t);c.enableLinearScaling(),c.enableWrapClamp(),this.frameBuffer.enableTexture(c),this.texture=c.texture}this.resize(e,r)};h.prototype.constructor=h,e.exports=h,h.prototype.clear=function(t){var e=t||this.clearColor;this.frameBuffer.clear(e[0],e[1],e[2],e[3])},h.prototype.attachStencilBuffer=function(){this.root||this.frameBuffer.enableStencil()},h.prototype.activate=function(){var t=this.gl;this.frameBuffer.bind();var e=this.frame||this.size;this.calculateProjection(e),this.transform&&this.projectionMatrix.append(this.transform),t.viewport(0,0,e.width*this.resolution,e.height*this.resolution)},h.prototype.calculateProjection=function(t){var e=this.projectionMatrix;e.identity(),this.root?(e.a=1/t.width*2,e.d=-1/t.height*2,e.tx=-1-t.x*e.a,e.ty=1-t.y*e.d):(e.a=1/t.width*2,e.d=1/t.height*2,e.tx=-1-t.x*e.a,e.ty=-1-t.y*e.d)},h.prototype.resize=function(t,e){if(t=0|t,e=0|e,this.size.width!==t||this.size.height!==e){this.size.width=t,this.size.height=e,this.frameBuffer.resize(t*this.resolution,e*this.resolution);var r=this.frame||this.size;this.calculateProjection(r)}},h.prototype.destroy=function(){this.gl;this.frameBuffer.destroy(),this.frameBuffer=null,this.texture=null}},{"../../../const":38,"../../../math":48,"../../../utils":98,"./StencilMaskStack":83,"pixi-gl-core":1}],83:[function(t,e,r){function i(){this.stencilStack=[],this.reverse=!0,this.count=0}i.prototype.constructor=i,e.exports=i},{}],84:[function(t,e,r){function i(t,e){return e=e||{},e[CONST.BLEND_MODES.NORMAL]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.ADD]=[t.SRC_ALPHA,t.DST_ALPHA],e[CONST.BLEND_MODES.MULTIPLY]=[t.DST_COLOR,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.SCREEN]=[t.SRC_ALPHA,t.ONE],e[CONST.BLEND_MODES.OVERLAY]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.DARKEN]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.LIGHTEN]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.COLOR_DODGE]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.COLOR_BURN]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.HARD_LIGHT]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.SOFT_LIGHT]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.DIFFERENCE]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.EXCLUSION]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.HUE]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.SATURATION]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.COLOR]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.LUMINOSITY]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e}CONST=t("../../../const"),e.exports=i},{"../../../const":38}],85:[function(t,e,r){function i(t,e){e=e||{},e[CONST.DRAW_MODES.POINTS]=t.POINTS,e[CONST.DRAW_MODES.LINES]=t.LINES,e[CONST.DRAW_MODES.LINE_LOOP]=t.LINE_LOOP,e[CONST.DRAW_MODES.LINE_STRIP]=t.LINE_STRIP,e[CONST.DRAW_MODES.TRIANGLES]=t.TRIANGLES,e[CONST.DRAW_MODES.TRIANGLE_STRIP]=t.TRIANGLE_STRIP,e[CONST.DRAW_MODES.TRIANGLE_FAN]=t.TRIANGLE_FAN}CONST=t("../../../const"),e.exports=i},{"../../../const":38}],86:[function(t,e,r){function i(t){s.call(this),this.anchor=new n.Point,this._texture=null,this._width=0,this._height=0,this.tint=16777215,this.blendMode=u.BLEND_MODES.NORMAL,this.shader=null,this.cachedTint=16777215,this.texture=t||o.EMPTY,this.textureDirty=!0,this.vertexDirty=!0,this.vertexData=new Float32Array(8)}var n=t("../math"),o=t("../textures/Texture"),s=t("../display/Container"),a=t("../renderers/canvas/utils/CanvasTinter"),h=t("../utils"),u=t("../const"),l=new n.Point;i.prototype=Object.create(s.prototype),i.prototype.constructor=i,e.exports=i,Object.defineProperties(i.prototype,{width:{get:function(){return Math.abs(this.scale.x)*this.texture._frame.width},set:function(t){var e=h.sign(this.scale.x)||1;this.scale.x=e*t/this.texture._frame.width,this._width=t}},height:{get:function(){return Math.abs(this.scale.y)*this.texture._frame.height},set:function(t){var e=h.sign(this.scale.y)||1;this.scale.y=e*t/this.texture._frame.height,this._height=t}},texture:{get:function(){return this._texture},set:function(t){this._texture!==t&&(this._texture=t,this.cachedTint=16777215,this.textureDirty=!0,t&&(t.baseTexture.hasLoaded?this._onTextureUpdate():t.once("update",this._onTextureUpdate,this)))}}}),i.prototype._onTextureUpdate=function(){this.textureDirty=!0,this._width&&(this.scale.x=h.sign(this.scale.x)*this._width/this.texture.frame.width),this._height&&(this.scale.y=h.sign(this.scale.y)*this._height/this.texture.frame.height)},i.prototype.caclulateVertices=function(){var t,e,r,i,n=this._texture,o=this.worldTransform,s=o.a,a=o.b,h=o.c,u=o.d,l=o.tx,c=o.ty,p=this.vertexData,d=n.trim;d?(e=d.x-this.anchor.x*d.width,t=e+n.crop.width,i=d.y-this.anchor.y*d.height,r=i+n.crop.height):(t=n._frame.width*(1-this.anchor.x),e=n._frame.width*-this.anchor.x,r=n._frame.height*(1-this.anchor.y),i=n._frame.height*-this.anchor.y),p[0]=s*e+h*i+l,p[1]=u*i+a*e+c,p[2]=s*t+h*i+l,p[3]=u*i+a*t+c,p[4]=s*t+h*r+l,p[5]=u*r+a*t+c,p[6]=s*e+h*r+l,p[7]=u*r+a*e+c},i.prototype._renderWebGL=function(t){this.textureDirty&&(this.textureDirty=!1,this._onTextureUpdate(),this.vertexDirty=!0),this.vertexDirty&&(this.vertexDirty=!1,this.caclulateVertices()),t.setObjectRenderer(t.plugins.sprite),t.plugins.sprite.render(this)},i.prototype.getBounds=function(t){if(!this._currentBounds){this.vertexDirty&&(this.vertexDirty=!1,this.caclulateVertices());var e,r,i,n,o=this.vertexData,s=o[0],a=o[1],h=o[2],u=o[3],l=o[4],c=o[5],p=o[6],d=o[7];if(e=s,e=e>h?h:e,e=e>l?l:e,e=e>p?p:e,i=a,i=i>u?u:i,i=i>c?c:i,i=i>d?d:i,r=s,r=h>r?h:r,r=l>r?l:r,r=p>r?p:r,n=a,n=u>n?u:n,n=c>n?c:n,n=d>n?d:n,this.children.length){var f=this.containerGetBounds();w0=f.x,w1=f.x+f.width,h0=f.y,h1=f.y+f.height,e=ew1?r:w1,n=n>h1?n:h1}var v=this._bounds;v.x=e,v.width=r-e,v.y=i,v.height=n-i,this._currentBounds=v}return this._currentBounds},i.prototype.getLocalBounds=function(){return this._bounds.x=-this._texture._frame.width*this.anchor.x,this._bounds.y=-this._texture._frame.height*this.anchor.y,this._bounds.width=this._texture._frame.width,this._bounds.height=this._texture._frame.height,this._bounds},i.prototype.containsPoint=function(t){this.worldTransform.applyInverse(t,l);var e,r=this._texture._frame.width,i=this._texture._frame.height,n=-r*this.anchor.x;return l.x>n&&l.xe&&l.yr;r++)this.groups[r]={textures:[],textureCount:0,ids:[],size:0,start:0,blend:0};this.currentGroup=this.groups[this.groupCount++],this.currentTexture=null}var n=t("../../renderers/webgl/utils/ObjectRenderer"),o=t("../../renderers/webgl/WebGLRenderer"),s=(t("../../renderers/webgl/shaders/_TextureShader"),t("../../utils/createIndicesForQuads")),a=t("./generateMultiTextureShader"),h=t("../../const"),u=t("pixi-gl-core"),l=2;i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,o.registerPlugin("sprite",i),i.prototype.onContextChange=function(){var t=this.renderer.gl;this._shader=a(t,l),this.shader=this.renderer.shaderManager.defaultShader,this.vertexBuffer=u.GLBuffer.createVertexBuffer(t,null,t.DYNAMIC_DRAW),this.indexBuffer=u.GLBuffer.createIndexBuffer(t,this.indices,t.STATIC_DRAW),this.vao=new u.VertexArrayObject(t),this.vao.addIndex(this.indexBuffer),this.vao.addAttribute(this.vertexBuffer,this._shader.attributes.aVertexPosition,t.FLOAT,!1,this.vertByteSize,0),this.vao.addAttribute(this.vertexBuffer,this._shader.attributes.aTextureCoord,t.UNSIGNED_SHORT,!0,this.vertByteSize,8),this.vao.addAttribute(this.vertexBuffer,this._shader.attributes.aColor,t.UNSIGNED_BYTE,!0,this.vertByteSize,12),this.vao.addAttribute(this.vertexBuffer,this._shader.attributes.aTextureId,t.FLOAT,!1,this.vertByteSize,16),this.currentBlendMode=99999},i.prototype.render=function(t){this.currentIndex>=this.size&&this.flush();var e=t.texture._uvs;if(e){var r=(this.groups,t.texture.baseTexture),i=this.currentGroup;if(this.currentTexture!==r&&(this.currentTexture=r,!r._enabled)){if(r._enabled=!0,r._id=this.textureCount,this.textureCount===l){for(var n=0;n>16)+(65280&t.tint)+((255&t.tint)<<16)+(255*t.worldAlpha<<24);a[o++]=h[0],a[o++]=h[1],this.uvs[o++]=e.uvs_uint32[0],s[o++]=u,a[o++]=r._id,a[o++]=h[2],a[o++]=h[3],this.uvs[o++]=e.uvs_uint32[1],s[o++]=u,a[o++]=r._id,a[o++]=h[4],a[o++]=h[5],this.uvs[o++]=e.uvs_uint32[2],s[o++]=u,a[o++]=r._id,a[o++]=h[6],a[o++]=h[7],this.uvs[o++]=e.uvs_uint32[3],s[o++]=u,a[o++]=r._id,this.sprites[this.currentBatchSize++]=t}},i.prototype.renderSprites=function(t){for(var e=0;e.5*this.size)this.vertexBuffer.upload(this.vertices,0,!0);else{var e=this.positions.subarray(0,this.currentIndex*this.vertByteSize);this.vertexBuffer.upload(e,0,!0)}for(this.renderer.bindShader(this._shader),this.renderer.blendModeManager.setBlendMode(0),t=0;tu;u++)h[u]=u;return a.bind(),a.uniforms.uSamplers=h,a}function n(t){var e="vec4 getSampleFromArray(sampler2D textures[%%], int ndx, vec2 uv) {\n\nvec4 color;";e+="\n", -e+="\n";for(var r=0;t>r;r++)r>0&&(e+="\nelse "),t-1>r&&(e+="if(ndx == "+r+")"),e+="\n{",e+="\n color = texture2D(textures["+r+"], uv);",e+="\n}";return e+="\n",e+="\n",e+="return color;",e+="\n}"}var o=t("pixi-gl-core").GLShader,s=["varying vec2 vTextureCoord;","varying vec4 vColor;","varying float vTextureId;","uniform sampler2D uSamplers[%%];","void main(void){","gl_FragColor = getSampleFromArray(uSamplers, int(vTextureId), vTextureCoord) * vColor;","}"].join("\n");e.exports=i},{"pixi-gl-core":1}],89:[function(t,e,r){function i(t,e,r){this.canvas=document.createElement("canvas"),this.context=this.canvas.getContext("2d"),this.resolution=r||h.RESOLUTION,this._text=null,this._style=null;var i=o.fromCanvas(this.canvas);i.trim=new s.Rectangle,n.call(this,i),this.text=t,this.style=e}var n=t("../sprites/Sprite"),o=t("../textures/Texture"),s=t("../math"),a=t("../utils"),h=t("../const");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.fontPropertiesCache={},i.fontPropertiesCanvas=document.createElement("canvas"),i.fontPropertiesContext=i.fontPropertiesCanvas.getContext("2d"),Object.defineProperties(i.prototype,{width:{get:function(){return this.dirty&&this.updateText(),this.scale.x*this._texture._frame.width},set:function(t){this.scale.x=t/this._texture._frame.width,this._width=t}},height:{get:function(){return this.dirty&&this.updateText(),this.scale.y*this._texture._frame.height},set:function(t){this.scale.y=t/this._texture._frame.height,this._height=t}},style:{get:function(){return this._style},set:function(t){t=t||{},"number"==typeof t.fill&&(t.fill=a.hex2string(t.fill)),"number"==typeof t.stroke&&(t.stroke=a.hex2string(t.stroke)),"number"==typeof t.dropShadowColor&&(t.dropShadowColor=a.hex2string(t.dropShadowColor)),t.font=t.font||"bold 20pt Arial",t.fill=t.fill||"black",t.align=t.align||"left",t.stroke=t.stroke||"black",t.strokeThickness=t.strokeThickness||0,t.wordWrap=t.wordWrap||!1,t.wordWrapWidth=t.wordWrapWidth||100,t.dropShadow=t.dropShadow||!1,t.dropShadowColor=t.dropShadowColor||"#000000",t.dropShadowAngle=void 0!==t.dropShadowAngle?t.dropShadowAngle:Math.PI/6,t.dropShadowDistance=void 0!==t.dropShadowDistance?t.dropShadowDistance:5,t.dropShadowBlur=void 0!==t.dropShadowBlur?t.dropShadowBlur:0,t.padding=t.padding||0,t.textBaseline=t.textBaseline||"alphabetic",t.lineJoin=t.lineJoin||"miter",t.miterLimit=t.miterLimit||10,this._style=t,this.dirty=!0}},text:{get:function(){return this._text},set:function(t){t=t.toString()||" ",this._text!==t&&(this._text=t,this.dirty=!0)}}}),i.prototype.updateText=function(){var t=this._style;this.context.font=t.font;for(var e=t.wordWrap?this.wordWrap(this._text):this._text,r=e.split(/(?:\r\n|\r|\n)/),i=new Array(r.length),n=0,o=this.determineFontProperties(t.font),s=0;s0?(this.context.shadowColor=t.dropShadowColor,this.context.shadowBlur=t.dropShadowBlur):this.context.fillStyle=t.dropShadowColor;var d=Math.cos(t.dropShadowAngle)*t.dropShadowDistance,f=Math.sin(t.dropShadowAngle)*t.dropShadowDistance;for(s=0;sh;h++){for(u=0;p>u;u+=4)if(255!==l[d+u]){f=!0;break}if(f)break;d+=p}for(e.ascent=s-h,d=c-p,f=!1,h=a;h>s;h--){for(u=0;p>u;u+=4)if(255!==l[d+u]){f=!0;break}if(f)break;d-=p}e.descent=h-s,e.fontSize=e.ascent+e.descent,i.fontPropertiesCache[t]=e}return e},i.prototype.wordWrap=function(t){for(var e="",r=t.split("\n"),i=this._style.wordWrapWidth,n=0;no?(a>0&&(e+="\n"),e+=s[a],o=i-h):(o-=u,e+=" "+s[a])}n0&&e>0,this.width=this._frame.width=this.crop.width=t,this.height=this._frame.height=this.crop.height=e,r&&(this.baseTexture.width=this.width,this.baseTexture.height=this.height),this.valid&&(this.textureBuffer.resize(this.width,this.height),this.filterManager&&this.filterManager.resize(this.width,this.height)))},i.prototype.clear=function(){this.valid&&(this.renderer.type===l.RENDERER_TYPE.WEBGL&&this.renderer.gl.bindFramebuffer(this.renderer.gl.FRAMEBUFFER,this.textureBuffer.frameBuffer),this.textureBuffer.clear())},i.prototype.renderWebGL=function(t,e,r,i){if(this.valid){if(i=void 0!==i?i:!0,this.textureBuffer.transform=e,this.textureBuffer.activate(),t.worldAlpha=1,i){t.worldTransform.identity(),t.currentBounds=null;var n,o,s=t.children;for(n=0,o=s.length;o>n;++n)s[n].updateTransform()}var a=this.renderer.filterManager;this.renderer.filterManager=this.filterManager,this.renderer.renderDisplayObject(t,this.textureBuffer,r),this.renderer.filterManager=a}},i.prototype.renderCanvas=function(t,e,r,i){if(this.valid){i=!!i;var n=c;n.identity(),e&&n.append(e);var o=t.worldTransform;t.worldTransform=n,t.worldAlpha=1;var s,a,h=t.children;for(s=0,a=h.length;a>s;++s)h[s].updateTransform();r&&this.textureBuffer.clear();var u=this.textureBuffer.context,l=this.renderer.resolution;this.renderer.resolution=this.resolution,this.renderer.renderDisplayObject(t,u),this.renderer.resolution=l,t.worldTransform===n&&(t.worldTransform=o)}},i.prototype.destroy=function(){o.prototype.destroy.call(this,!0),this.textureBuffer.destroy(),this.filterManager&&this.filterManager.destroy(),this.renderer=null},i.prototype.getImage=function(){var t=new Image;return t.src=this.getBase64(),t},i.prototype.getBase64=function(){return this.getCanvas().toDataURL()},i.prototype.getCanvas=function(){if(this.renderer.type===l.RENDERER_TYPE.WEBGL){var t=this.renderer.gl,e=this.textureBuffer.size.width,r=this.textureBuffer.size.height,i=new Uint8Array(4*e*r);t.bindFramebuffer(t.FRAMEBUFFER,this.textureBuffer.frameBuffer),t.readPixels(0,0,e,r,t.RGBA,t.UNSIGNED_BYTE,i),t.bindFramebuffer(t.FRAMEBUFFER,null);var n=new h(e,r),o=n.context.getImageData(0,0,e,r);return o.data.set(i),n.context.putImageData(o,0,0),n.canvas}return this.textureBuffer.canvas},i.prototype.getPixels=function(){var t,e;if(this.renderer.type===l.RENDERER_TYPE.WEBGL){var r=this.renderer.gl;t=this.textureBuffer.size.width,e=this.textureBuffer.size.height;var i=new Uint8Array(4*t*e);return r.bindFramebuffer(r.FRAMEBUFFER,this.textureBuffer.frameBuffer),r.readPixels(0,0,t,e,r.RGBA,r.UNSIGNED_BYTE,i),r.bindFramebuffer(r.FRAMEBUFFER,null),i}return t=this.textureBuffer.canvas.width,e=this.textureBuffer.canvas.height,this.textureBuffer.canvas.getContext("2d").getImageData(0,0,t,e).data},i.prototype.getPixel=function(t,e){if(this.renderer.type===l.RENDERER_TYPE.WEBGL){var r=this.renderer.gl,i=new Uint8Array(4);return r.bindFramebuffer(r.FRAMEBUFFER,this.textureBuffer.frameBuffer),r.readPixels(t,e,1,1,r.RGBA,r.UNSIGNED_BYTE,i),r.bindFramebuffer(r.FRAMEBUFFER,null),i}return this.textureBuffer.canvas.getContext("2d").getImageData(t,e,1,1).data}},{"../const":38,"../math":48,"../renderers/canvas/utils/CanvasBuffer":60,"../renderers/webgl/managers/FilterManager":70,"../renderers/webgl/utils/RenderTarget":82,"./BaseTexture":90,"./Texture":92}],92:[function(t,e,r){function i(t,e,r,n,o){a.call(this),this.noFrame=!1,e||(this.noFrame=!0,e=new h.Rectangle(0,0,1,1)),t instanceof i&&(t=t.baseTexture),this.baseTexture=t,this._frame=e,this.trim=n,this.valid=!1,this.requiresUpdate=!1,this._uvs=null,this.width=0,this.height=0,this.crop=r||e,this.rotate=!!o,t.hasLoaded?(this.noFrame&&(e=new h.Rectangle(0,0,t.width,t.height),t.on("update",this.onBaseTextureUpdated,this)),this.frame=e):t.once("loaded",this.onBaseTextureLoaded,this)}var n=t("./BaseTexture"),o=t("./VideoBaseTexture"),s=t("./TextureUvs"),a=t("eventemitter3"),h=t("../math"),u=t("../utils");i.prototype=Object.create(a.prototype),i.prototype.constructor=i,e.exports=i,Object.defineProperties(i.prototype,{frame:{get:function(){return this._frame},set:function(t){if(this._frame=t,this.noFrame=!1,this.width=t.width,this.height=t.height,!this.trim&&!this.rotate&&(t.x+t.width>this.baseTexture.width||t.y+t.height>this.baseTexture.height))throw new Error("Texture Error: frame does not fit inside the base Texture dimensions "+this);this.valid=t&&t.width&&t.height&&this.baseTexture.hasLoaded,this.trim?(this.width=this.trim.width,this.height=this.trim.height,this._frame.width=this.trim.width,this._frame.height=this.trim.height):this.crop=t,this.valid&&this._updateUvs()}}}),i.prototype.update=function(){this.baseTexture.update()},i.prototype.onBaseTextureLoaded=function(t){this.noFrame?this.frame=new h.Rectangle(0,0,t.width,t.height):this.frame=this._frame,this.emit("update",this)},i.prototype.onBaseTextureUpdated=function(t){this._frame.width=t.width,this._frame.height=t.height,this.emit("update",this)},i.prototype.destroy=function(t){this.baseTexture&&(t&&this.baseTexture.destroy(),this.baseTexture.off("update",this.onBaseTextureUpdated,this),this.baseTexture.off("loaded",this.onBaseTextureLoaded,this),this.baseTexture=null),this._frame=null,this._uvs=null,this.trim=null,this.crop=null,this.valid=!1,this.off("dispose",this.dispose,this),this.off("update",this.update,this)},i.prototype.clone=function(){return new i(this.baseTexture,this.frame,this.crop,this.trim,this.rotate)},i.prototype._updateUvs=function(){this._uvs||(this._uvs=new s),this._uvs.set(this.crop,this.baseTexture,this.rotate)},i.fromImage=function(t,e,r){var o=u.TextureCache[t];return o||(o=new i(n.fromImage(t,e,r)),u.TextureCache[t]=o),o},i.fromFrame=function(t){var e=u.TextureCache[t];if(!e)throw new Error('The frameId "'+t+'" does not exist in the texture cache');return e},i.fromCanvas=function(t,e){return new i(n.fromCanvas(t,e))},i.fromVideo=function(t,e){return"string"==typeof t?i.fromVideoUrl(t,e):new i(o.fromVideo(t,e))},i.fromVideoUrl=function(t,e){return new i(o.fromUrl(t,e))},i.addTextureToCache=function(t,e){u.TextureCache[e]=t},i.removeTextureFromCache=function(t){var e=u.TextureCache[t];return delete u.TextureCache[t],delete u.BaseTextureCache[t],e},i.EMPTY=new i(new n)},{"../math":48,"../utils":98,"./BaseTexture":90,"./TextureUvs":93,"./VideoBaseTexture":94,eventemitter3:25}],93:[function(t,e,r){function i(){this.x0=0,this.y0=0,this.x1=1,this.y1=0,this.x2=1,this.y2=1,this.x3=0,this.y3=1,this.xy0_uint32=0,this.xy1_uint32=0,this.xy2_uint32=0,this.xy3_uint32=0,this.uvs_uint32=new Uint32Array(4)}e.exports=i,i.prototype.set=function(t,e,r){var i=e.width,n=e.height;r?(this.x0=(t.x+t.height)/i,this.y0=t.y/n,this.x1=(t.x+t.height)/i,this.y1=(t.y+t.width)/n,this.x2=t.x/i,this.y2=(t.y+t.width)/n,this.x3=t.x/i,this.y3=t.y/n):(this.x0=t.x/i,this.y0=t.y/n,this.x1=(t.x+t.width)/i,this.y1=t.y/n,this.x2=(t.x+t.width)/i,this.y2=(t.y+t.height)/n,this.x3=t.x/i,this.y3=(t.y+t.height)/n),this.uvs_uint32[0]=(65535*this.y0&65535)<<16|65535*this.x0&65535,this.uvs_uint32[1]=(65535*this.y1&65535)<<16|65535*this.x1&65535,this.uvs_uint32[2]=(65535*this.y2&65535)<<16|65535*this.x2&65535,this.uvs_uint32[3]=(65535*this.y3&65535)<<16|65535*this.x3&65535}},{}],94:[function(t,e,r){function i(t,e){if(!t)throw new Error("No video source element specified.");(t.readyState===t.HAVE_ENOUGH_DATA||t.readyState===t.HAVE_FUTURE_DATA)&&t.width&&t.height&&(t.complete=!0),o.call(this,t,e),this.autoUpdate=!1,this._onUpdate=this._onUpdate.bind(this),this._onCanPlay=this._onCanPlay.bind(this),t.complete||(t.addEventListener("canplay",this._onCanPlay),t.addEventListener("canplaythrough",this._onCanPlay),t.addEventListener("play",this._onPlayStart.bind(this)),t.addEventListener("pause",this._onPlayStop.bind(this))),this.__loaded=!1}function n(t,e){e||(e="video/"+t.substr(t.lastIndexOf(".")+1));var r=document.createElement("source");return r.src=t,r.type=e,r}var o=t("./BaseTexture"),s=t("../utils");i.prototype=Object.create(o.prototype),i.prototype.constructor=i,e.exports=i,i.prototype._onUpdate=function(){this.autoUpdate&&(window.requestAnimationFrame(this._onUpdate),this.update())},i.prototype._onPlayStart=function(){this.autoUpdate||(window.requestAnimationFrame(this._onUpdate),this.autoUpdate=!0)},i.prototype._onPlayStop=function(){this.autoUpdate=!1},i.prototype._onCanPlay=function(){this.hasLoaded=!0,this.source&&(this.source.removeEventListener("canplay",this._onCanPlay),this.source.removeEventListener("canplaythrough",this._onCanPlay),this.width=this.source.videoWidth,this.height=this.source.videoHeight,this.source.play(),this.__loaded||(this.__loaded=!0,this.emit("loaded",this)))},i.prototype.destroy=function(){this.source&&this.source._pixiId&&(delete s.BaseTextureCache[this.source._pixiId],delete this.source._pixiId),o.prototype.destroy.call(this)},i.fromVideo=function(t,e){t._pixiId||(t._pixiId="video_"+s.uid());var r=s.BaseTextureCache[t._pixiId];return r||(r=new i(t,e),s.BaseTextureCache[t._pixiId]=r),r},i.fromUrl=function(t,e){var r=document.createElement("video");if(Array.isArray(t))for(var o=0;othis._maxElapsedMS&&(e=this._maxElapsedMS),this.deltaTime=e*n.TARGET_FPMS*this.speed,this._emitter.emit(s,this.deltaTime),this.lastTime=t},e.exports=i},{"../const":38,eventemitter3:25}],96:[function(t,e,r){var i=t("./Ticker"),n=new i;n.autoStart=!0,e.exports={shared:n,Ticker:i}},{"./Ticker":95}],97:[function(t,e,r){var i=function(t){for(var e=6*t,r=new Uint16Array(e),i=0,n=0;e>i;i+=6,n+=4)r[i+0]=n+0,r[i+1]=n+1,r[i+2]=n+2,r[i+3]=n+0,r[i+4]=n+2,r[i+5]=n+3;return r};e.exports=i},{}],98:[function(t,e,r){var i=t("../const"),n=e.exports={_uid:0,_saidHello:!1,EventEmitter:t("eventemitter3"),pluginTarget:t("./pluginTarget"),async:t("async"),uid:function(){return++n._uid},hex2rgb:function(t,e){return e=e||[],e[0]=(t>>16&255)/255,e[1]=(t>>8&255)/255,e[2]=(255&t)/255,e},hex2string:function(t){return t=t.toString(16),t="000000".substr(0,6-t.length)+t,"#"+t},rgb2hex:function(t){return(255*t[0]<<16)+(255*t[1]<<8)+255*t[2]},canUseNewCanvasBlendModes:function(){if("undefined"==typeof document)return!1;var t="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAQAAAABAQMAAADD8p2OAAAAA1BMVEX/",e="AAAACklEQVQI12NgAAAAAgAB4iG8MwAAAABJRU5ErkJggg==",r=new Image;r.src=t+"AP804Oa6"+e;var i=new Image;i.src=t+"/wCKxvRF"+e;var n=document.createElement("canvas");n.width=6,n.height=1;var o=n.getContext("2d");o.globalCompositeOperation="multiply",o.drawImage(r,0,0),o.drawImage(i,2,0);var s=o.getImageData(2,0,1,1).data;return 255===s[0]&&0===s[1]&&0===s[2]},getNextPowerOfTwo:function(t){if(t>0&&0===(t&t-1))return t;for(var e=1;t>e;)e<<=1;return e},isPowerOfTwo:function(t,e){return t>0&&0===(t&t-1)&&e>0&&0===(e&e-1)},getResolutionOfUrl:function(t){var e=i.RETINA_PREFIX.exec(t);return e?parseFloat(e[1]):1},sayHello:function(t){if(!n._saidHello){if(navigator.userAgent.toLowerCase().indexOf("chrome")>-1){var e=["\n %c %c %c Pixi.js "+i.VERSION+" - ✰ "+t+" ✰ %c %c http://www.pixijs.com/ %c %c ♥%c♥%c♥ \n\n","background: #ff66a5; padding:5px 0;","background: #ff66a5; padding:5px 0;","color: #ff66a5; background: #030307; padding:5px 0;","background: #ff66a5; padding:5px 0;","background: #ffc3dc; padding:5px 0;","background: #ff66a5; padding:5px 0;","color: #ff2424; background: #fff; padding:5px 0;","color: #ff2424; background: #fff; padding:5px 0;","color: #ff2424; background: #fff; padding:5px 0;"];window.console.log.apply(console,e)}else window.console&&window.console.log("Pixi.js "+i.VERSION+" - "+t+" - http://www.pixijs.com/");n._saidHello=!0}},isWebGLSupported:function(){var t={stencil:!0};try{if(!window.WebGLRenderingContext)return!1;var e=document.createElement("canvas"),r=e.getContext("webgl",t)||e.getContext("experimental-webgl",t);return!(!r||!r.getContextAttributes().stencil)}catch(i){return!1}},sign:function(t){return t?0>t?-1:1:0},removeItems:function(t,e,r){var i=t.length;if(!(e>=i||0===r)){r=e+r>i?i-e:r;for(var n=e,o=i-r;o>n;++n)t[n]=t[n+r];t.length=o}},TextureCache:{},BaseTextureCache:{}}},{"../const":38,"./pluginTarget":99,async:16,eventemitter3:25}],99:[function(t,e,r){function i(t){t.__plugins={},t.registerPlugin=function(e,r){t.__plugins[e]=r},t.prototype.initPlugins=function(){this.plugins=this.plugins||{};for(var e in t.__plugins)this.plugins[e]=new t.__plugins[e](this)},t.prototype.destroyPlugins=function(){for(var t in this.plugins)this.plugins[t].destroy(),this.plugins[t]=null;this.plugins=null}}e.exports={mixin:function(t){i(t)}}},{}],100:[function(t,e,r){var i=t("./core"),n=t("./mesh"),o=t("./extras"),s=t("./filters");i.SpriteBatch=function(){throw new ReferenceError("SpriteBatch does not exist any more, please use the new ParticleContainer instead.")},i.AssetLoader=function(){throw new ReferenceError("The loader system was overhauled in pixi v3, please see the new PIXI.loaders.Loader class.")},Object.defineProperties(i,{Stage:{get:function(){return console.warn("You do not need to use a PIXI Stage any more, you can simply render any container."),i.Container}},DisplayObjectContainer:{get:function(){return console.warn("DisplayObjectContainer has been shortened to Container, please use Container from now on."),i.Container}},Strip:{get:function(){return console.warn("The Strip class has been renamed to Mesh and moved to mesh.Mesh, please use mesh.Mesh from now on."),n.Mesh}},Rope:{get:function(){return console.warn("The Rope class has been moved to mesh.Rope, please use mesh.Rope from now on."),n.Rope}},MovieClip:{get:function(){return console.warn("The MovieClip class has been moved to extras.MovieClip, please use extras.MovieClip from now on."),o.MovieClip}},TilingSprite:{get:function(){return console.warn("The TilingSprite class has been moved to extras.TilingSprite, please use extras.TilingSprite from now on."),o.TilingSprite}},BitmapText:{get:function(){return console.warn("The BitmapText class has been moved to extras.BitmapText, please use extras.BitmapText from now on."),o.BitmapText}},blendModes:{get:function(){return console.warn("The blendModes has been moved to BLEND_MODES, please use BLEND_MODES from now on."),i.BLEND_MODES}},scaleModes:{get:function(){return console.warn("The scaleModes has been moved to SCALE_MODES, please use SCALE_MODES from now on."),i.SCALE_MODES}},BaseTextureCache:{get:function(){return console.warn("The BaseTextureCache class has been moved to utils.BaseTextureCache, please use utils.BaseTextureCache from now on."),i.utils.BaseTextureCache}},TextureCache:{get:function(){return console.warn("The TextureCache class has been moved to utils.TextureCache, please use utils.TextureCache from now on."),i.utils.TextureCache}},math:{get:function(){return console.warn("The math namespace is deprecated, please access members already accessible on PIXI."),i}}}),i.Sprite.prototype.setTexture=function(t){this.texture=t,console.warn("setTexture is now deprecated, please use the texture property, e.g : sprite.texture = texture;")},o.BitmapText.prototype.setText=function(t){this.text=t,console.warn("setText is now deprecated, please use the text property, e.g : myBitmapText.text = 'my text';")},i.Text.prototype.setText=function(t){this.text=t,console.warn("setText is now deprecated, please use the text property, e.g : myText.text = 'my text';")},i.Text.prototype.setStyle=function(t){this.style=t,console.warn("setStyle is now deprecated, please use the style property, e.g : myText.style = style;")},i.Texture.prototype.setFrame=function(t){this.frame=t,console.warn("setFrame is now deprecated, please use the frame property, e.g : myTexture.frame = frame;")},Object.defineProperties(s,{AbstractFilter:{get:function(){return console.warn("filters.AbstractFilter is an undocumented alias, please use AbstractFilter from now on."),i.AbstractFilter}},FXAAFilter:{get:function(){return console.warn("filters.FXAAFilter is an undocumented alias, please use FXAAFilter from now on."),i.FXAAFilter}},SpriteMaskFilter:{get:function(){return console.warn("filters.SpriteMaskFilter is an undocumented alias, please use SpriteMaskFilter from now on."),i.SpriteMaskFilter}}}),i.utils.uuid=function(){return console.warn("utils.uuid() is deprecated, please use utils.uid() from now on."),i.utils.uid()}},{"./core":45,"./extras":107,"./filters":124,"./mesh":149}],101:[function(t,e,r){function i(t,e){n.Container.call(this),e=e||{},this.textWidth=0,this.textHeight=0,this._glyphs=[],this._font={tint:void 0!==e.tint?e.tint:16777215,align:e.align||"left",name:null,size:0},this.font=e.font,this._text=t,this.maxWidth=0,this.maxLineHeight=0,this.dirty=!1,this.updateText()}var n=t("../core");i.prototype=Object.create(n.Container.prototype),i.prototype.constructor=i,e.exports=i,Object.defineProperties(i.prototype,{tint:{get:function(){return this._font.tint},set:function(t){this._font.tint="number"==typeof t&&t>=0?t:16777215,this.dirty=!0}},align:{get:function(){return this._font.align},set:function(t){this._font.align=t||"left",this.dirty=!0}},font:{get:function(){return this._font},set:function(t){t&&("string"==typeof t?(t=t.split(" "),this._font.name=1===t.length?t[0]:t.slice(1).join(" "),this._font.size=t.length>=2?parseInt(t[0],10):i.fonts[this._font.name].size):(this._font.name=t.name,this._font.size="number"==typeof t.size?t.size:parseInt(t.size,10)),this.dirty=!0)}},text:{get:function(){return this._text},set:function(t){t=t.toString()||" ",this._text!==t&&(this._text=t,this.dirty=!0)}}}),i.prototype.updateText=function(){for(var t=i.fonts[this._font.name],e=new n.Point,r=null,o=[],s=0,a=0,h=[],u=0,l=this._font.size/t.size,c=-1,p=0,d=0;d0&&e.x*l>this.maxWidth)n.utils.removeItems(o,c,d-c),d=c,c=-1,h.push(s),a=Math.max(a,s),u++,e.x=0,e.y+=t.lineHeight,r=null;else{var v=t.chars[f];v&&(r&&v.kerning[r]&&(e.x+=v.kerning[r]),o.push({texture:v.texture,line:u,charCode:f,position:new n.Point(e.x+v.xOffset,e.y+v.yOffset)}),s=e.x+(v.texture.width+v.xOffset),e.x+=v.xAdvance,p=Math.max(p,v.yOffset+v.texture.height),r=f)}}h.push(s),a=Math.max(a,s);var g=[];for(d=0;u>=d;d++){var m=0;"right"===this._font.align?m=a-h[d]:"center"===this._font.align&&(m=(a-h[d])/2),g.push(m)}var y=o.length,x=this.tint;for(d=0;y>d;d++){var b=this._glyphs[d];b?b.texture=o[d].texture:(b=new n.Sprite(o[d].texture),this._glyphs.push(b)),b.position.x=(o[d].position.x+g[o[d].line])*l,b.position.y=o[d].position.y*l,b.scale.x=b.scale.y=l,b.tint=x,b.parent||this.addChild(b)}for(d=y;dt&&(t+=this._textures.length),t}}}),i.prototype.stop=function(){this.playing&&(this.playing=!1,n.ticker.shared.remove(this.update,this))},i.prototype.play=function(){this.playing||(this.playing=!0,n.ticker.shared.add(this.update,this))},i.prototype.gotoAndStop=function(t){this.stop(),this._currentTime=t,this._texture=this._textures[this.currentFrame]},i.prototype.gotoAndPlay=function(t){this._currentTime=t,this.play()},i.prototype.update=function(t){var e=this.animationSpeed*t;if(null!==this._durations){var r=this._currentTime%1*this._durations[this.currentFrame];for(r+=e/60*1e3;0>r;)this._currentTime--,r+=this._durations[this.currentFrame];var i=Math.sign(this.animationSpeed*t);for(this._currentTime=Math.floor(this._currentTime);r>=this._durations[this.currentFrame];)r-=this._durations[this.currentFrame]*i,this._currentTime+=i;this._currentTime+=r/this._durations[this.currentFrame]}else this._currentTime+=e;this._currentTime<0&&!this.loop?(this.gotoAndStop(0),this.onComplete&&this.onComplete()):this._currentTime>=this._textures.length&&!this.loop?(this.gotoAndStop(this._textures.length-1),this.onComplete&&this.onComplete()):this._texture=this._textures[this.currentFrame]},i.prototype.destroy=function(){this.stop(),n.Sprite.prototype.destroy.call(this)},i.fromFrames=function(t){for(var e=[],r=0;rx?x:t,t=t>_?_:t,t=t>E?E:t,r=y,r=r>b?b:r,r=r>T?T:r,r=r>S?S:r,e=m,e=x>e?x:e,e=_>e?_:e,e=E>e?E:e,i=y,i=b>i?b:i,i=T>i?T:i,i=S>i?S:i;var w=this._bounds;return w.x=t,w.width=e-t,w.y=r,w.height=i-r,this._currentBounds=w,w},i.prototype.containsPoint=function(t){this.worldTransform.applyInverse(t,o);var e,r=this._width,i=this._height,n=-r*this.anchor.x;return o.x>n&&o.xe&&o.y 0.2) n = 65600.0; // :\n if (gray > 0.3) n = 332772.0; // *\n if (gray > 0.4) n = 15255086.0; // o\n if (gray > 0.5) n = 23385164.0; // &\n if (gray > 0.6) n = 15252014.0; // 8\n if (gray > 0.7) n = 13199452.0; // @\n if (gray > 0.8) n = 11512810.0; // #\n\n vec2 p = mod( uv / ( pixelSize * 0.5 ), 2.0) - vec2(1.0);\n col = col * character(n, p);\n\n gl_FragColor = vec4(col, 1.0);\n}\n",{dimensions:{type:"4fv",value:new Float32Array([0,0,0,0])},pixelSize:{type:"1f",value:8}})}var n=t("../../core");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i,Object.defineProperties(i.prototype,{size:{get:function(){return this.uniforms.pixelSize.value},set:function(t){this.uniforms.pixelSize.value=t}}})},{"../../core":45}],109:[function(t,e,r){function i(){n.AbstractFilter.call(this),this.blurXFilter=new o,this.blurYFilter=new s,this.defaultFilter=new n.AbstractFilter}var n=t("../../core"),o=t("../blur/BlurXFilter"),s=t("../blur/BlurYFilter");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.applyFilter=function(t,e,r){var i=t.filterManager.getRenderTarget(!0);this.defaultFilter.applyFilter(t,e,r),this.blurXFilter.applyFilter(t,e,i),t.blendModeManager.setBlendMode(n.BLEND_MODES.SCREEN),this.blurYFilter.applyFilter(t,i,r),t.blendModeManager.setBlendMode(n.BLEND_MODES.NORMAL),t.filterManager.returnRenderTarget(i)},Object.defineProperties(i.prototype,{blur:{get:function(){return this.blurXFilter.blur},set:function(t){this.blurXFilter.blur=this.blurYFilter.blur=t}},blurX:{get:function(){return this.blurXFilter.blur},set:function(t){this.blurXFilter.blur=t}},blurY:{get:function(){return this.blurYFilter.blur},set:function(t){this.blurYFilter.blur=t}}})},{"../../core":45,"../blur/BlurXFilter":112,"../blur/BlurYFilter":113}],110:[function(t,e,r){function i(t,e){n.AbstractFilter.call(this,"attribute vec2 aVertexPosition;\nattribute vec2 aTextureCoord;\nattribute vec4 aColor;\n\nuniform float strength;\nuniform float dirX;\nuniform float dirY;\nuniform mat3 projectionMatrix;\n\nvarying vec2 vTextureCoord;\nvarying vec4 vColor;\nvarying vec2 vBlurTexCoords[3];\n\nvoid main(void)\n{\n gl_Position = vec4((projectionMatrix * vec3((aVertexPosition), 1.0)).xy, 0.0, 1.0);\n vTextureCoord = aTextureCoord;\n\n vBlurTexCoords[0] = aTextureCoord + vec2( (0.004 * strength) * dirX, (0.004 * strength) * dirY );\n vBlurTexCoords[1] = aTextureCoord + vec2( (0.008 * strength) * dirX, (0.008 * strength) * dirY );\n vBlurTexCoords[2] = aTextureCoord + vec2( (0.012 * strength) * dirX, (0.012 * strength) * dirY );\n\n vColor = vec4(aColor.rgb * aColor.a, aColor.a);\n}\n","precision lowp float;\n\nvarying vec2 vTextureCoord;\nvarying vec2 vBlurTexCoords[3];\nvarying vec4 vColor;\n\nuniform sampler2D uSampler;\n\nvoid main(void)\n{\n gl_FragColor = vec4(0.0);\n\n gl_FragColor += texture2D(uSampler, vTextureCoord ) * 0.3989422804014327;\n gl_FragColor += texture2D(uSampler, vBlurTexCoords[ 0]) * 0.2419707245191454;\n gl_FragColor += texture2D(uSampler, vBlurTexCoords[ 1]) * 0.05399096651318985;\n gl_FragColor += texture2D(uSampler, vBlurTexCoords[ 2]) * 0.004431848411938341;\n}\n",{strength:{type:"1f",value:1},dirX:{type:"1f",value:t||0},dirY:{type:"1f",value:e||0}}),this.defaultFilter=new n.AbstractFilter,this.passes=1,this.dirX=t||0,this.dirY=e||0,this.strength=4}var n=t("../../core");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.applyFilter=function(t,e,r,i){var n=this.getShader(t);if(this.uniforms.strength.value=this.strength/4/this.passes*(e.frame.width/e.size.width),1===this.passes)t.filterManager.applyFilter(n,e,r,i);else{var o=t.filterManager.getRenderTarget(!0);t.filterManager.applyFilter(n,e,o,i);for(var s=0;s>16&255)/255,s=(r>>8&255)/255,a=(255&r)/255,h=(i>>16&255)/255,u=(i>>8&255)/255,l=(255&i)/255,c=[.3,.59,.11,0,0,o,s,a,t,0,h,u,l,e,0,o-h,s-u,a-l,0,0];this._loadMatrix(c,n)},i.prototype.night=function(t,e){t=t||.1;var r=[-2*t,-t,0,0,0,-t,0,t,0,0,0,t,2*t,0,0,0,0,0,1,0];this._loadMatrix(r,e)},i.prototype.predator=function(t,e){var r=[11.224130630493164*t,-4.794486999511719*t,-2.8746118545532227*t,0*t,.40342438220977783*t,-3.6330697536468506*t,9.193157196044922*t,-2.951810836791992*t,0*t,-1.316135048866272*t,-3.2184197902679443*t,-4.2375030517578125*t,7.476448059082031*t,0*t,.8044459223747253*t,0,0,0,1,0];this._loadMatrix(r,e)},i.prototype.lsd=function(t){var e=[2,-.4,.5,0,0,-.5,2,-.4,0,0,-.4,-.5,3,0,0,0,0,0,1,0];this._loadMatrix(e,t)},i.prototype.reset=function(){var t=[1,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,1,0];this._loadMatrix(t,!1)},Object.defineProperties(i.prototype,{matrix:{get:function(){return this.uniforms.m.value},set:function(t){this.uniforms.m.value=t}}})},{"../../core":45}],116:[function(t,e,r){function i(){n.AbstractFilter.call(this,null,"precision mediump float;\n\nvarying vec2 vTextureCoord;\n\nuniform sampler2D uSampler;\nuniform float step;\n\nvoid main(void)\n{\n vec4 color = texture2D(uSampler, vTextureCoord);\n\n color = floor(color * step) / step;\n\n gl_FragColor = color;\n}\n",{step:{type:"1f",value:5}})}var n=t("../../core");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i,Object.defineProperties(i.prototype,{step:{get:function(){return this.uniforms.step.value},set:function(t){this.uniforms.step.value=t}}})},{"../../core":45}],117:[function(t,e,r){function i(t,e,r){n.AbstractFilter.call(this,null,"precision mediump float;\n\nvarying mediump vec2 vTextureCoord;\n\nuniform sampler2D uSampler;\nuniform vec2 texelSize;\nuniform float matrix[9];\n\nvoid main(void)\n{\n vec4 c11 = texture2D(uSampler, vTextureCoord - texelSize); // top left\n vec4 c12 = texture2D(uSampler, vec2(vTextureCoord.x, vTextureCoord.y - texelSize.y)); // top center\n vec4 c13 = texture2D(uSampler, vec2(vTextureCoord.x + texelSize.x, vTextureCoord.y - texelSize.y)); // top right\n\n vec4 c21 = texture2D(uSampler, vec2(vTextureCoord.x - texelSize.x, vTextureCoord.y)); // mid left\n vec4 c22 = texture2D(uSampler, vTextureCoord); // mid center\n vec4 c23 = texture2D(uSampler, vec2(vTextureCoord.x + texelSize.x, vTextureCoord.y)); // mid right\n\n vec4 c31 = texture2D(uSampler, vec2(vTextureCoord.x - texelSize.x, vTextureCoord.y + texelSize.y)); // bottom left\n vec4 c32 = texture2D(uSampler, vec2(vTextureCoord.x, vTextureCoord.y + texelSize.y)); // bottom center\n vec4 c33 = texture2D(uSampler, vTextureCoord + texelSize); // bottom right\n\n gl_FragColor =\n c11 * matrix[0] + c12 * matrix[1] + c13 * matrix[2] +\n c21 * matrix[3] + c22 * matrix[4] + c23 * matrix[5] +\n c31 * matrix[6] + c32 * matrix[7] + c33 * matrix[8];\n\n gl_FragColor.a = c22.a;\n}\n",{matrix:{type:"1fv",value:new Float32Array(t)},texelSize:{type:"v2",value:{x:1/e,y:1/r}}})}var n=t("../../core");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i,Object.defineProperties(i.prototype,{matrix:{get:function(){return this.uniforms.matrix.value},set:function(t){this.uniforms.matrix.value=new Float32Array(t)}},width:{get:function(){return 1/this.uniforms.texelSize.value.x},set:function(t){this.uniforms.texelSize.value.x=1/t}},height:{get:function(){return 1/this.uniforms.texelSize.value.y},set:function(t){this.uniforms.texelSize.value.y=1/t}}})},{"../../core":45 -}],118:[function(t,e,r){function i(){n.AbstractFilter.call(this,null,"precision mediump float;\n\nvarying vec2 vTextureCoord;\n\nuniform sampler2D uSampler;\n\nvoid main(void)\n{\n float lum = length(texture2D(uSampler, vTextureCoord.xy).rgb);\n\n gl_FragColor = vec4(1.0, 1.0, 1.0, 1.0);\n\n if (lum < 1.00)\n {\n if (mod(gl_FragCoord.x + gl_FragCoord.y, 10.0) == 0.0)\n {\n gl_FragColor = vec4(0.0, 0.0, 0.0, 1.0);\n }\n }\n\n if (lum < 0.75)\n {\n if (mod(gl_FragCoord.x - gl_FragCoord.y, 10.0) == 0.0)\n {\n gl_FragColor = vec4(0.0, 0.0, 0.0, 1.0);\n }\n }\n\n if (lum < 0.50)\n {\n if (mod(gl_FragCoord.x + gl_FragCoord.y - 5.0, 10.0) == 0.0)\n {\n gl_FragColor = vec4(0.0, 0.0, 0.0, 1.0);\n }\n }\n\n if (lum < 0.3)\n {\n if (mod(gl_FragCoord.x - gl_FragCoord.y - 5.0, 10.0) == 0.0)\n {\n gl_FragColor = vec4(0.0, 0.0, 0.0, 1.0);\n }\n }\n}\n")}var n=t("../../core");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i},{"../../core":45}],119:[function(t,e,r){function i(t,e){var r=new n.Matrix;t.renderable=!1,n.AbstractFilter.call(this,"attribute vec2 aVertexPosition;\nattribute vec2 aTextureCoord;\nattribute vec4 aColor;\n\nuniform mat3 projectionMatrix;\nuniform mat3 otherMatrix;\n\nvarying vec2 vMapCoord;\nvarying vec2 vTextureCoord;\nvarying vec4 vColor;\n\nvoid main(void)\n{\n gl_Position = vec4((projectionMatrix * vec3(aVertexPosition, 1.0)).xy, 0.0, 1.0);\n vTextureCoord = aTextureCoord;\n vMapCoord = ( otherMatrix * vec3( aTextureCoord, 1.0) ).xy;\n vColor = vec4(aColor.rgb * aColor.a, aColor.a);\n}\n","precision mediump float;\n\nvarying vec2 vMapCoord;\nvarying vec2 vTextureCoord;\nvarying vec4 vColor;\n\nuniform vec2 scale;\n\nuniform sampler2D uSampler;\nuniform sampler2D mapSampler;\n\nvoid main(void)\n{\n vec4 map = texture2D(mapSampler, vMapCoord);\n\n map -= 0.5;\n map.xy *= scale;\n\n gl_FragColor = texture2D(uSampler, vec2(vTextureCoord.x + map.x, vTextureCoord.y + map.y));\n}\n",{mapSampler:{type:"sampler2D",value:t.texture},otherMatrix:{type:"mat3",value:r.toArray(!0)},scale:{type:"v2",value:{x:1,y:1}}}),this.maskSprite=t,this.maskMatrix=r,(null===e||void 0===e)&&(e=20),this.scale=new n.Point(e,e)}var n=t("../../core");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.applyFilter=function(t,e,r){var i=t.filterManager;i.calculateMappedMatrix(e.frame,this.maskSprite,this.maskMatrix),this.uniforms.otherMatrix.value=this.maskMatrix.toArray(!0),this.uniforms.scale.value.x=this.scale.x*(1/e.frame.width),this.uniforms.scale.value.y=this.scale.y*(1/e.frame.height);var n=this.getShader(t);i.applyFilter(n,e,r)},Object.defineProperties(i.prototype,{map:{get:function(){return this.uniforms.mapSampler.value},set:function(t){this.uniforms.mapSampler.value=t}}})},{"../../core":45}],120:[function(t,e,r){function i(){n.AbstractFilter.call(this,null,"precision mediump float;\n\nvarying vec2 vTextureCoord;\nvarying vec4 vColor;\n\nuniform vec4 dimensions;\nuniform sampler2D uSampler;\n\nuniform float angle;\nuniform float scale;\n\nfloat pattern()\n{\n float s = sin(angle), c = cos(angle);\n vec2 tex = vTextureCoord * dimensions.xy;\n vec2 point = vec2(\n c * tex.x - s * tex.y,\n s * tex.x + c * tex.y\n ) * scale;\n return (sin(point.x) * sin(point.y)) * 4.0;\n}\n\nvoid main()\n{\n vec4 color = texture2D(uSampler, vTextureCoord);\n float average = (color.r + color.g + color.b) / 3.0;\n gl_FragColor = vec4(vec3(average * 10.0 - 5.0 + pattern()), color.a);\n}\n",{scale:{type:"1f",value:1},angle:{type:"1f",value:5},dimensions:{type:"4fv",value:[0,0,0,0]}})}var n=t("../../core");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i,Object.defineProperties(i.prototype,{scale:{get:function(){return this.uniforms.scale.value},set:function(t){this.uniforms.scale.value=t}},angle:{get:function(){return this.uniforms.angle.value},set:function(t){this.uniforms.angle.value=t}}})},{"../../core":45}],121:[function(t,e,r){function i(){n.AbstractFilter.call(this,"attribute vec2 aVertexPosition;\nattribute vec2 aTextureCoord;\nattribute vec4 aColor;\n\nuniform float strength;\nuniform vec2 offset;\n\nuniform mat3 projectionMatrix;\n\nvarying vec2 vTextureCoord;\nvarying vec4 vColor;\nvarying vec2 vBlurTexCoords[6];\n\nvoid main(void)\n{\n gl_Position = vec4((projectionMatrix * vec3((aVertexPosition+offset), 1.0)).xy, 0.0, 1.0);\n vTextureCoord = aTextureCoord;\n\n vBlurTexCoords[ 0] = aTextureCoord + vec2(0.0, -0.012 * strength);\n vBlurTexCoords[ 1] = aTextureCoord + vec2(0.0, -0.008 * strength);\n vBlurTexCoords[ 2] = aTextureCoord + vec2(0.0, -0.004 * strength);\n vBlurTexCoords[ 3] = aTextureCoord + vec2(0.0, 0.004 * strength);\n vBlurTexCoords[ 4] = aTextureCoord + vec2(0.0, 0.008 * strength);\n vBlurTexCoords[ 5] = aTextureCoord + vec2(0.0, 0.012 * strength);\n\n vColor = vec4(aColor.rgb * aColor.a, aColor.a);\n}\n","precision lowp float;\n\nvarying vec2 vTextureCoord;\nvarying vec2 vBlurTexCoords[6];\nvarying vec4 vColor;\n\nuniform vec3 color;\nuniform float alpha;\n\nuniform sampler2D uSampler;\n\nvoid main(void)\n{\n vec4 sum = vec4(0.0);\n\n sum += texture2D(uSampler, vBlurTexCoords[ 0])*0.004431848411938341;\n sum += texture2D(uSampler, vBlurTexCoords[ 1])*0.05399096651318985;\n sum += texture2D(uSampler, vBlurTexCoords[ 2])*0.2419707245191454;\n sum += texture2D(uSampler, vTextureCoord )*0.3989422804014327;\n sum += texture2D(uSampler, vBlurTexCoords[ 3])*0.2419707245191454;\n sum += texture2D(uSampler, vBlurTexCoords[ 4])*0.05399096651318985;\n sum += texture2D(uSampler, vBlurTexCoords[ 5])*0.004431848411938341;\n\n gl_FragColor = vec4( color.rgb * sum.a * alpha, sum.a * alpha );\n}\n",{blur:{type:"1f",value:1/512},color:{type:"c",value:[0,0,0]},alpha:{type:"1f",value:.7},offset:{type:"2f",value:[5,5]},strength:{type:"1f",value:1}}),this.passes=1,this.strength=4}var n=t("../../core");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.applyFilter=function(t,e,r,i){var n=this.getShader(t);if(this.uniforms.strength.value=this.strength/4/this.passes*(e.frame.height/e.size.height),1===this.passes)t.filterManager.applyFilter(n,e,r,i);else{for(var o=t.filterManager.getRenderTarget(!0),s=e,a=o,h=0;h= (time - params.z)) )\n {\n float diff = (dist - time);\n float powDiff = 1.0 - pow(abs(diff*params.x), params.y);\n\n float diffTime = diff * powDiff;\n vec2 diffUV = normalize(uv - center);\n texCoord = uv + (diffUV * diffTime);\n }\n\n gl_FragColor = texture2D(uSampler, texCoord);\n}\n",{center:{type:"v2",value:{x:.5,y:.5}},params:{type:"v3",value:{x:10,y:.8,z:.1}},time:{type:"1f",value:0}})}var n=t("../../core");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i,Object.defineProperties(i.prototype,{center:{get:function(){return this.uniforms.center.value},set:function(t){this.uniforms.center.value=t}},params:{get:function(){return this.uniforms.params.value},set:function(t){this.uniforms.params.value=t}},time:{get:function(){return this.uniforms.time.value},set:function(t){this.uniforms.time.value=t}}})},{"../../core":45}],131:[function(t,e,r){function i(){n.AbstractFilter.call(this,null,"precision mediump float;\n\nvarying vec2 vTextureCoord;\n\nuniform sampler2D uSampler;\nuniform float blur;\nuniform float gradientBlur;\nuniform vec2 start;\nuniform vec2 end;\nuniform vec2 delta;\nuniform vec2 texSize;\n\nfloat random(vec3 scale, float seed)\n{\n return fract(sin(dot(gl_FragCoord.xyz + seed, scale)) * 43758.5453 + seed);\n}\n\nvoid main(void)\n{\n vec4 color = vec4(0.0);\n float total = 0.0;\n\n float offset = random(vec3(12.9898, 78.233, 151.7182), 0.0);\n vec2 normal = normalize(vec2(start.y - end.y, end.x - start.x));\n float radius = smoothstep(0.0, 1.0, abs(dot(vTextureCoord * texSize - start, normal)) / gradientBlur) * blur;\n\n for (float t = -30.0; t <= 30.0; t++)\n {\n float percent = (t + offset - 0.5) / 30.0;\n float weight = 1.0 - abs(percent);\n vec4 sample = texture2D(uSampler, vTextureCoord + delta / texSize * percent * radius);\n sample.rgb *= sample.a;\n color += sample * weight;\n total += weight;\n }\n\n gl_FragColor = color / total;\n gl_FragColor.rgb /= gl_FragColor.a + 0.00001;\n}\n",{blur:{type:"1f",value:100},gradientBlur:{type:"1f",value:600},start:{type:"v2",value:{x:0,y:window.innerHeight/2}},end:{type:"v2",value:{x:600,y:window.innerHeight/2}},delta:{type:"v2",value:{x:30,y:30}},texSize:{type:"v2",value:{x:window.innerWidth,y:window.innerHeight}}}),this.updateDelta()}var n=t("../../core");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.updateDelta=function(){this.uniforms.delta.value.x=0,this.uniforms.delta.value.y=0},Object.defineProperties(i.prototype,{blur:{get:function(){return this.uniforms.blur.value},set:function(t){this.uniforms.blur.value=t}},gradientBlur:{get:function(){return this.uniforms.gradientBlur.value},set:function(t){this.uniforms.gradientBlur.value=t}},start:{get:function(){return this.uniforms.start.value},set:function(t){this.uniforms.start.value=t,this.updateDelta()}},end:{get:function(){return this.uniforms.end.value},set:function(t){this.uniforms.end.value=t,this.updateDelta()}}})},{"../../core":45}],132:[function(t,e,r){function i(){n.AbstractFilter.call(this),this.tiltShiftXFilter=new o,this.tiltShiftYFilter=new s}var n=t("../../core"),o=t("./TiltShiftXFilter"),s=t("./TiltShiftYFilter");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.applyFilter=function(t,e,r){var i=t.filterManager.getRenderTarget(!0);this.tiltShiftXFilter.applyFilter(t,e,i),this.tiltShiftYFilter.applyFilter(t,i,r),t.filterManager.returnRenderTarget(i)},Object.defineProperties(i.prototype,{blur:{get:function(){return this.tiltShiftXFilter.blur},set:function(t){this.tiltShiftXFilter.blur=this.tiltShiftYFilter.blur=t}},gradientBlur:{get:function(){return this.tiltShiftXFilter.gradientBlur},set:function(t){this.tiltShiftXFilter.gradientBlur=this.tiltShiftYFilter.gradientBlur=t}},start:{get:function(){return this.tiltShiftXFilter.start},set:function(t){this.tiltShiftXFilter.start=this.tiltShiftYFilter.start=t}},end:{get:function(){return this.tiltShiftXFilter.end},set:function(t){this.tiltShiftXFilter.end=this.tiltShiftYFilter.end=t}}})},{"../../core":45,"./TiltShiftXFilter":133,"./TiltShiftYFilter":134}],133:[function(t,e,r){function i(){n.call(this)}var n=t("./TiltShiftAxisFilter");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.updateDelta=function(){var t=this.uniforms.end.value.x-this.uniforms.start.value.x,e=this.uniforms.end.value.y-this.uniforms.start.value.y,r=Math.sqrt(t*t+e*e);this.uniforms.delta.value.x=t/r,this.uniforms.delta.value.y=e/r}},{"./TiltShiftAxisFilter":131}],134:[function(t,e,r){function i(){n.call(this)}var n=t("./TiltShiftAxisFilter");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.updateDelta=function(){var t=this.uniforms.end.value.x-this.uniforms.start.value.x,e=this.uniforms.end.value.y-this.uniforms.start.value.y,r=Math.sqrt(t*t+e*e);this.uniforms.delta.value.x=-e/r,this.uniforms.delta.value.y=t/r}},{"./TiltShiftAxisFilter":131}],135:[function(t,e,r){function i(){n.AbstractFilter.call(this,null,"precision mediump float;\n\nvarying vec2 vTextureCoord;\n\nuniform sampler2D uSampler;\nuniform float radius;\nuniform float angle;\nuniform vec2 offset;\n\nvoid main(void)\n{\n vec2 coord = vTextureCoord - offset;\n float dist = length(coord);\n\n if (dist < radius)\n {\n float ratio = (radius - dist) / radius;\n float angleMod = ratio * ratio * angle;\n float s = sin(angleMod);\n float c = cos(angleMod);\n coord = vec2(coord.x * c - coord.y * s, coord.x * s + coord.y * c);\n }\n\n gl_FragColor = texture2D(uSampler, coord+offset);\n}\n",{radius:{type:"1f",value:.5},angle:{type:"1f",value:5},offset:{type:"v2",value:{x:.5,y:.5}}})}var n=t("../../core");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i,Object.defineProperties(i.prototype,{offset:{get:function(){return this.uniforms.offset.value},set:function(t){this.uniforms.offset.value=t}},radius:{get:function(){return this.uniforms.radius.value},set:function(t){this.uniforms.radius.value=t}},angle:{get:function(){return this.uniforms.angle.value},set:function(t){this.uniforms.angle.value=t}}})},{"../../core":45}],136:[function(t,e,r){(function(r){t("./polyfill");var i=e.exports=t("./core");i.extras=t("./extras"),i.filters=t("./filters"),i.interaction=t("./interaction"),i.loaders=t("./loaders"),i.mesh=t("./mesh"),i.accessibility=t("./accessibility"),i.loader=new i.loaders.Loader,Object.assign(i,t("./deprecation")),r.PIXI=i}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{"./accessibility":37,"./core":45,"./deprecation":100,"./extras":107,"./filters":124,"./interaction":139,"./loaders":142,"./mesh":149,"./polyfill":154}],137:[function(t,e,r){function i(){this.global=new n.Point,this.target=null,this.originalEvent=null}var n=t("../core");i.prototype.constructor=i,e.exports=i,i.prototype.getLocalPosition=function(t,e,r){return t.worldTransform.applyInverse(r||this.global,e)}},{"../core":45}],138:[function(t,e,r){function i(t,e){e=e||{},this.renderer=t,this.autoPreventDefault=void 0!==e.autoPreventDefault?e.autoPreventDefault:!0,this.interactionFrequency=e.interactionFrequency||10,this.mouse=new o,this.eventData={stopped:!1,target:null,type:null,data:this.mouse,stopPropagation:function(){this.stopped=!0}},this.interactiveDataPool=[],this.interactionDOMElement=null,this.eventsAdded=!1,this.onMouseUp=this.onMouseUp.bind(this),this.processMouseUp=this.processMouseUp.bind(this),this.onMouseDown=this.onMouseDown.bind(this),this.processMouseDown=this.processMouseDown.bind(this),this.onMouseMove=this.onMouseMove.bind(this),this.processMouseMove=this.processMouseMove.bind(this),this.onMouseOut=this.onMouseOut.bind(this),this.processMouseOverOut=this.processMouseOverOut.bind(this),this.onTouchStart=this.onTouchStart.bind(this),this.processTouchStart=this.processTouchStart.bind(this),this.onTouchEnd=this.onTouchEnd.bind(this),this.processTouchEnd=this.processTouchEnd.bind(this),this.onTouchMove=this.onTouchMove.bind(this),this.processTouchMove=this.processTouchMove.bind(this),this.last=0,this.currentCursorStyle="inherit",this._tempPoint=new n.Point,this.resolution=1,this.setTargetElement(this.renderer.view,this.renderer.resolution)}var n=t("../core"),o=t("./InteractionData");Object.assign(n.DisplayObject.prototype,t("./interactiveTarget")),i.prototype.constructor=i,e.exports=i,i.prototype.setTargetElement=function(t,e){this.removeEvents(),this.interactionDOMElement=t,this.resolution=e||1,this.addEvents()},i.prototype.addEvents=function(){this.interactionDOMElement&&(n.ticker.shared.add(this.update,this),window.navigator.msPointerEnabled&&(this.interactionDOMElement.style["-ms-content-zooming"]="none",this.interactionDOMElement.style["-ms-touch-action"]="none"),window.document.addEventListener("mousemove",this.onMouseMove,!0),this.interactionDOMElement.addEventListener("mousedown",this.onMouseDown,!0),this.interactionDOMElement.addEventListener("mouseout",this.onMouseOut,!0),this.interactionDOMElement.addEventListener("touchstart",this.onTouchStart,!0),this.interactionDOMElement.addEventListener("touchend",this.onTouchEnd,!0),this.interactionDOMElement.addEventListener("touchmove",this.onTouchMove,!0),window.addEventListener("mouseup",this.onMouseUp,!0),this.eventsAdded=!0)},i.prototype.removeEvents=function(){this.interactionDOMElement&&(n.ticker.shared.remove(this.update),window.navigator.msPointerEnabled&&(this.interactionDOMElement.style["-ms-content-zooming"]="",this.interactionDOMElement.style["-ms-touch-action"]=""),window.document.removeEventListener("mousemove",this.onMouseMove,!0),this.interactionDOMElement.removeEventListener("mousedown",this.onMouseDown,!0),this.interactionDOMElement.removeEventListener("mouseout",this.onMouseOut,!0),this.interactionDOMElement.removeEventListener("touchstart",this.onTouchStart,!0),this.interactionDOMElement.removeEventListener("touchend",this.onTouchEnd,!0),this.interactionDOMElement.removeEventListener("touchmove",this.onTouchMove,!0),this.interactionDOMElement=null,window.removeEventListener("mouseup",this.onMouseUp,!0),this.eventsAdded=!1)},i.prototype.update=function(t){if(this._deltaTime+=t,!(this._deltaTime=0;h--)this.processInteractive(t,a[h],r,i,s)&&(o=!0,s=!1,a[h].interactive&&(i=!1));return n&&(i&&!o&&(e.hitArea?(e.worldTransform.applyInverse(t,this._tempPoint),o=e.hitArea.contains(this._tempPoint.x,this._tempPoint.y)):e.containsPoint&&(o=e.containsPoint(t))),e.interactive&&r(e,o)),o},i.prototype.onMouseDown=function(t){this.mouse.originalEvent=t,this.eventData.data=this.mouse,this.eventData.stopped=!1,this.mapPositionToPoint(this.mouse.global,t.clientX,t.clientY),this.autoPreventDefault&&this.mouse.originalEvent.preventDefault(),this.processInteractive(this.mouse.global,this.renderer._lastObjectRendered,this.processMouseDown,!0)},i.prototype.processMouseDown=function(t,e){var r=this.mouse.originalEvent,i=2===r.button||3===r.which;e&&(t[i?"_isRightDown":"_isLeftDown"]=!0,this.dispatchEvent(t,i?"rightdown":"mousedown",this.eventData))},i.prototype.onMouseUp=function(t){this.mouse.originalEvent=t,this.eventData.data=this.mouse,this.eventData.stopped=!1,this.mapPositionToPoint(this.mouse.global,t.clientX,t.clientY),this.processInteractive(this.mouse.global,this.renderer._lastObjectRendered,this.processMouseUp,!0)},i.prototype.processMouseUp=function(t,e){var r=this.mouse.originalEvent,i=2===r.button||3===r.which,n=i?"_isRightDown":"_isLeftDown";e?(this.dispatchEvent(t,i?"rightup":"mouseup",this.eventData),t[n]&&(t[n]=!1,this.dispatchEvent(t,i?"rightclick":"click",this.eventData))):t[n]&&(t[n]=!1,this.dispatchEvent(t,i?"rightupoutside":"mouseupoutside",this.eventData))},i.prototype.onMouseMove=function(t){this.mouse.originalEvent=t,this.eventData.data=this.mouse,this.eventData.stopped=!1,this.mapPositionToPoint(this.mouse.global,t.clientX,t.clientY),this.didMove=!0,this.cursor="inherit",this.processInteractive(this.mouse.global,this.renderer._lastObjectRendered,this.processMouseMove,!0),this.currentCursorStyle!==this.cursor&&(this.currentCursorStyle=this.cursor,this.interactionDOMElement.style.cursor=this.cursor)},i.prototype.processMouseMove=function(t,e){this.dispatchEvent(t,"mousemove",this.eventData),this.processMouseOverOut(t,e)},i.prototype.onMouseOut=function(t){this.mouse.originalEvent=t,this.eventData.stopped=!1,this.mapPositionToPoint(this.mouse.global,t.clientX,t.clientY),this.interactionDOMElement.style.cursor="inherit",this.mapPositionToPoint(this.mouse.global,t.clientX,t.clientY),this.processInteractive(this.mouse.global,this.renderer._lastObjectRendered,this.processMouseOverOut,!1)},i.prototype.processMouseOverOut=function(t,e){e?(t._over||(t._over=!0,this.dispatchEvent(t,"mouseover",this.eventData)),t.buttonMode&&(this.cursor=t.defaultCursor)):t._over&&(t._over=!1,this.dispatchEvent(t,"mouseout",this.eventData))},i.prototype.onTouchStart=function(t){this.autoPreventDefault&&t.preventDefault();for(var e=t.changedTouches,r=e.length,i=0;r>i;i++){var n=e[i],o=this.getTouchData(n);o.originalEvent=t,this.eventData.data=o,this.eventData.stopped=!1,this.processInteractive(o.global,this.renderer._lastObjectRendered,this.processTouchStart,!0),this.returnTouchData(o)}},i.prototype.processTouchStart=function(t,e){e&&(t._touchDown=!0,this.dispatchEvent(t,"touchstart",this.eventData))},i.prototype.onTouchEnd=function(t){this.autoPreventDefault&&t.preventDefault();for(var e=t.changedTouches,r=e.length,i=0;r>i;i++){var n=e[i],o=this.getTouchData(n);o.originalEvent=t,this.eventData.data=o,this.eventData.stopped=!1,this.processInteractive(o.global,this.renderer._lastObjectRendered,this.processTouchEnd,!0),this.returnTouchData(o)}},i.prototype.processTouchEnd=function(t,e){e?(this.dispatchEvent(t,"touchend",this.eventData),t._touchDown&&(t._touchDown=!1,this.dispatchEvent(t,"tap",this.eventData))):t._touchDown&&(t._touchDown=!1,this.dispatchEvent(t,"touchendoutside",this.eventData))},i.prototype.onTouchMove=function(t){this.autoPreventDefault&&t.preventDefault();for(var e=t.changedTouches,r=e.length,i=0;r>i;i++){var n=e[i],o=this.getTouchData(n);o.originalEvent=t,this.eventData.data=o,this.eventData.stopped=!1,this.processInteractive(o.global,this.renderer._lastObjectRendered,this.processTouchMove,!0),this.returnTouchData(o)}},i.prototype.processTouchMove=function(t,e){e=e,this.dispatchEvent(t,"touchmove",this.eventData)},i.prototype.getTouchData=function(t){var e=this.interactiveDataPool.pop();return e||(e=new o),e.identifier=t.identifier,this.mapPositionToPoint(e.global,t.clientX,t.clientY),navigator.isCocoonJS&&(e.global.x=e.global.x/this.resolution,e.global.y=e.global.y/this.resolution),t.globalX=e.global.x,t.globalY=e.global.y,e},i.prototype.returnTouchData=function(t){ -this.interactiveDataPool.push(t)},i.prototype.destroy=function(){this.removeEvents(),this.renderer=null,this.mouse=null,this.eventData=null,this.interactiveDataPool=null,this.interactionDOMElement=null,this.onMouseUp=null,this.processMouseUp=null,this.onMouseDown=null,this.processMouseDown=null,this.onMouseMove=null,this.processMouseMove=null,this.onMouseOut=null,this.processMouseOverOut=null,this.onTouchStart=null,this.processTouchStart=null,this.onTouchEnd=null,this.processTouchEnd=null,this.onTouchMove=null,this.processTouchMove=null,this._tempPoint=null},n.WebGLRenderer.registerPlugin("interaction",i),n.CanvasRenderer.registerPlugin("interaction",i)},{"../core":45,"./InteractionData":137,"./interactiveTarget":140}],139:[function(t,e,r){e.exports={InteractionData:t("./InteractionData"),InteractionManager:t("./InteractionManager"),interactiveTarget:t("./interactiveTarget")}},{"./InteractionData":137,"./InteractionManager":138,"./interactiveTarget":140}],140:[function(t,e,r){var i={interactive:!1,buttonMode:!1,interactiveChildren:!0,defaultCursor:"pointer",_over:!1,_touchDown:!1};e.exports=i},{}],141:[function(t,e,r){function i(t,e){var r={},i=t.data.getElementsByTagName("info")[0],n=t.data.getElementsByTagName("common")[0];r.font=i.getAttribute("face"),r.size=parseInt(i.getAttribute("size"),10),r.lineHeight=parseInt(n.getAttribute("lineHeight"),10),r.chars={};for(var a=t.data.getElementsByTagName("char"),h=0;hn;n++){var o=2*n;this._renderCanvasDrawTriangle(t,e,r,o,o+2,o+4)}},i.prototype._renderCanvasTriangles=function(t){for(var e=this.vertices,r=this.uvs,i=this.indices,n=i.length,o=0;n>o;o+=3){var s=2*i[o],a=2*i[o+1],h=2*i[o+2];this._renderCanvasDrawTriangle(t,e,r,s,a,h)}},i.prototype._renderCanvasDrawTriangle=function(t,e,r,i,n,o){var s=this._texture.baseTexture.source,a=this._texture.baseTexture.width,h=this._texture.baseTexture.height,u=e[i],l=e[n],c=e[o],p=e[i+1],d=e[n+1],f=e[o+1],v=r[i]*a,g=r[n]*a,m=r[o]*a,y=r[i+1]*h,x=r[n+1]*h,b=r[o+1]*h;if(this.canvasPadding>0){var _=this.canvasPadding/this.worldTransform.a,T=this.canvasPadding/this.worldTransform.d,E=(u+l+c)/3,S=(p+d+f)/3,w=u-E,C=p-S,A=Math.sqrt(w*w+C*C);u=E+w/A*(A+_),p=S+C/A*(A+T),w=l-E,C=d-S,A=Math.sqrt(w*w+C*C),l=E+w/A*(A+_),d=S+C/A*(A+T),w=c-E,C=f-S,A=Math.sqrt(w*w+C*C),c=E+w/A*(A+_),f=S+C/A*(A+T)}t.save(),t.beginPath(),t.moveTo(u,p),t.lineTo(l,d),t.lineTo(c,f),t.closePath(),t.clip();var M=v*x+y*m+g*b-x*m-y*g-v*b,R=u*x+y*c+l*b-x*c-y*l-u*b,O=v*l+u*m+g*c-l*m-u*g-v*c,D=v*x*c+y*l*m+u*g*b-u*x*m-y*g*c-v*l*b,P=p*x+y*f+d*b-x*f-y*d-p*b,F=v*d+p*m+g*f-d*m-p*g-v*f,L=v*x*f+y*d*m+p*g*b-p*x*m-y*g*f-v*d*b;t.transform(R/M,P/M,O/M,F/M,D/M,L/M),t.drawImage(s,0,0),t.restore()},i.prototype.renderMeshFlat=function(t){var e=this.context,r=t.vertices,i=r.length/2;e.beginPath();for(var n=1;i-2>n;n++){var o=2*n,s=r[o],a=r[o+2],h=r[o+4],u=r[o+1],l=r[o+3],c=r[o+5];e.moveTo(s,u),e.lineTo(a,l),e.lineTo(h,c)}e.fillStyle="#FF0000",e.fill(),e.closePath()},i.prototype._onTextureUpdate=function(){this.updateFrame=!0},i.prototype.getBounds=function(t){if(!this._currentBounds){for(var e=t||this.worldTransform,r=e.a,i=e.b,o=e.c,s=e.d,a=e.tx,h=e.ty,u=-(1/0),l=-(1/0),c=1/0,p=1/0,d=this.vertices,f=0,v=d.length;v>f;f+=2){var g=d[f],m=d[f+1],y=r*g+o*m+a,x=s*m+i*g+h;c=c>y?y:c,p=p>x?x:p,u=y>u?y:u,l=x>l?x:l}if(c===-(1/0)||l===1/0)return n.Rectangle.EMPTY;var b=this._bounds;b.x=c,b.width=u-c,b.y=p,b.height=l-p,this._currentBounds=b}return this._currentBounds},i.prototype.containsPoint=function(t){if(!this.getBounds().contains(t.x,t.y))return!1;this.worldTransform.applyInverse(t,o);var e,r,n=this.vertices,a=s.points;if(this.drawMode===i.DRAW_MODES.TRIANGLES){var h=this.indices;for(r=this.indices.length,e=0;r>e;e+=3){var u=2*h[e],l=2*h[e+1],c=2*h[e+2];if(a[0]=n[u],a[1]=n[u+1],a[2]=n[l],a[3]=n[l+1],a[4]=n[c],a[5]=n[c+1],s.contains(o.x,o.y))return!0}}else for(r=n.length,e=0;r>e;e+=6)if(a[0]=n[e],a[1]=n[e+1],a[2]=n[e+2],a[3]=n[e+3],a[4]=n[e+4],a[5]=n[e+5],s.contains(o.x,o.y))return!0;return!1},i.DRAW_MODES={TRIANGLE_MESH:0,TRIANGLES:1}},{"../core":45}],147:[function(t,e,r){function i(t,e,r){n.call(this,t),this._ready=!0,this.segmentsX=e||10,this.segmentsY=r||10,this.drawMode=n.DRAW_MODES.TRIANGLES,this.refresh()}var n=t("./Mesh");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.refresh=function(){var t=this.segmentsX*this.segmentsY,e=[],r=[],i=[],n=[],o=this.texture,s=this.segmentsX-1,a=this.segmentsY-1,h=0,u=o.width/s,l=o.height/a;for(h=0;t>h;h++){var c=h%this.segmentsX,p=h/this.segmentsX|0;e.push(c*u,p*l),i.push(o._uvs.x0+(o._uvs.x1-o._uvs.x0)*(c/(this.segmentsX-1)),o._uvs.y0+(o._uvs.y3-o._uvs.y0)*(p/(this.segmentsY-1)))}var d=s*a;for(h=0;d>h;h++){var f=h%s,v=h/s|0,g=v*this.segmentsX+f,m=v*this.segmentsX+f+1,y=(v+1)*this.segmentsX+f,x=(v+1)*this.segmentsX+f+1;n.push(g,m,y),n.push(m,x,y)}this.vertices=new Float32Array(e),this.uvs=new Float32Array(i),this.colors=new Float32Array(r),this.indices=new Uint16Array(n)},i.prototype._onTextureUpdate=function(){n.prototype._onTextureUpdate.call(this),this._ready&&this.refresh()}},{"./Mesh":146}],148:[function(t,e,r){function i(t,e){n.call(this,t),this.points=e,this.vertices=new Float32Array(4*e.length),this.uvs=new Float32Array(4*e.length),this.colors=new Float32Array(2*e.length),this.indices=new Uint16Array(2*e.length),this._ready=!0,this.refresh()}var n=t("./Mesh"),o=t("../core");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.refresh=function(){var t=this.points;if(!(t.length<1)&&this._texture._uvs){var e=this.uvs,r=this.indices,i=this.colors,n=this._texture._uvs,s=new o.Point(n.x0,n.y0),a=new o.Point(n.x2-n.x0,n.y2-n.y0);e[0]=0+s.x,e[1]=0+s.y,e[2]=0+s.x,e[3]=1*a.y+s.y,i[0]=1,i[1]=1,r[0]=0,r[1]=1;for(var h,u,l,c=t.length,p=1;c>p;p++)h=t[p],u=4*p,l=p/(c-1),e[u]=l*a.x+s.x,e[u+1]=0+s.y,e[u+2]=l*a.x+s.x,e[u+3]=1*a.y+s.y,u=2*p,i[u]=1,i[u+1]=1,u=2*p,r[u]=u,r[u+1]=u+1;this.dirty=!0}},i.prototype._onTextureUpdate=function(){n.prototype._onTextureUpdate.call(this),this._ready&&this.refresh()},i.prototype.updateTransform=function(){var t=this.points;if(!(t.length<1)){for(var e,r,i,n,o,s,a=t[0],h=0,u=0,l=this.vertices,c=t.length,p=0;c>p;p++)r=t[p],i=4*p,e=p1&&(n=1),o=Math.sqrt(h*h+u*u),s=this._texture.height/2,h/=o,u/=o,h*=s,u*=s,l[i]=r.x+h,l[i+1]=r.y+u,l[i+2]=r.x-h,l[i+3]=r.y-u,a=r;this.containerUpdateTransform()}}},{"../core":45,"./Mesh":146}],149:[function(t,e,r){e.exports={Mesh:t("./Mesh"),Plane:t("./Plane"),Rope:t("./Rope"),MeshRenderer:t("./webgl/MeshRenderer"),MeshShader:t("./webgl/MeshShader")}},{"./Mesh":146,"./Plane":147,"./Rope":148,"./webgl/MeshRenderer":150,"./webgl/MeshShader":151}],150:[function(t,e,r){function i(t){n.ObjectRenderer.call(this,t),this.indices=new Uint16Array(15e3);for(var e=0,r=0;15e3>e;e+=6,r+=4)this.indices[e+0]=r+0,this.indices[e+1]=r+1,this.indices[e+2]=r+2,this.indices[e+3]=r+0,this.indices[e+4]=r+2,this.indices[e+5]=r+3;this.currentShader=null}var n=t("../../core"),o=t("../Mesh");i.prototype=Object.create(n.ObjectRenderer.prototype),i.prototype.constructor=i,e.exports=i,n.WebGLRenderer.registerPlugin("mesh",i),i.prototype.onContextChange=function(){},i.prototype.render=function(t){t._vertexBuffer||this._initWebGL(t);var e=this.renderer,r=e.gl,i=t._texture.baseTexture,n=t.shader,s=t.drawMode===o.DRAW_MODES.TRIANGLE_MESH?r.TRIANGLE_STRIP:r.TRIANGLES;e.blendModeManager.setBlendMode(t.blendMode),n=n?n.shaders[r.id]||n.getShader(e):e.shaderManager.plugins.meshShader,this.renderer.shaderManager.setShader(n),n.uniforms.translationMatrix.value=t.worldTransform.toArray(!0),n.uniforms.projectionMatrix.value=e.currentRenderTarget.projectionMatrix.toArray(!0),n.uniforms.alpha.value=t.worldAlpha,n.syncUniforms(),t.dirty?(t.dirty=!1,r.bindBuffer(r.ARRAY_BUFFER,t._vertexBuffer),r.bufferData(r.ARRAY_BUFFER,t.vertices,r.STATIC_DRAW),r.vertexAttribPointer(n.attributes.aVertexPosition,2,r.FLOAT,!1,0,0),r.bindBuffer(r.ARRAY_BUFFER,t._uvBuffer),r.bufferData(r.ARRAY_BUFFER,t.uvs,r.STATIC_DRAW),r.vertexAttribPointer(n.attributes.aTextureCoord,2,r.FLOAT,!1,0,0),r.activeTexture(r.TEXTURE0),i._glTextures[r.id]?r.bindTexture(r.TEXTURE_2D,i._glTextures[r.id]):this.renderer.updateTexture(i),r.bindBuffer(r.ELEMENT_ARRAY_BUFFER,t._indexBuffer),r.bufferData(r.ELEMENT_ARRAY_BUFFER,t.indices,r.STATIC_DRAW)):(r.bindBuffer(r.ARRAY_BUFFER,t._vertexBuffer),r.bufferSubData(r.ARRAY_BUFFER,0,t.vertices),r.vertexAttribPointer(n.attributes.aVertexPosition,2,r.FLOAT,!1,0,0),r.bindBuffer(r.ARRAY_BUFFER,t._uvBuffer),r.vertexAttribPointer(n.attributes.aTextureCoord,2,r.FLOAT,!1,0,0),r.activeTexture(r.TEXTURE0),i._glTextures[r.id]?r.bindTexture(r.TEXTURE_2D,i._glTextures[r.id]):this.renderer.updateTexture(i),r.bindBuffer(r.ELEMENT_ARRAY_BUFFER,t._indexBuffer),r.bufferSubData(r.ELEMENT_ARRAY_BUFFER,0,t.indices)),r.drawElements(s,t.indices.length,r.UNSIGNED_SHORT,0)},i.prototype._initWebGL=function(t){var e=this.renderer.gl;t._vertexBuffer=e.createBuffer(),t._indexBuffer=e.createBuffer(),t._uvBuffer=e.createBuffer(),e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferData(e.ARRAY_BUFFER,t.vertices,e.DYNAMIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferData(e.ARRAY_BUFFER,t.uvs,e.STATIC_DRAW),t.colors&&(t._colorBuffer=e.createBuffer(),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.bufferData(e.ARRAY_BUFFER,t.colors,e.STATIC_DRAW)),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer),e.bufferData(e.ELEMENT_ARRAY_BUFFER,t.indices,e.STATIC_DRAW)},i.prototype.flush=function(){},i.prototype.start=function(){this.currentShader=null},i.prototype.destroy=function(){n.ObjectRenderer.prototype.destroy.call(this)}},{"../../core":45,"../Mesh":146}],151:[function(t,e,r){function i(t){n.Shader.call(this,t,["precision lowp float;","attribute vec2 aVertexPosition;","attribute vec2 aTextureCoord;","uniform mat3 translationMatrix;","uniform mat3 projectionMatrix;","varying vec2 vTextureCoord;","void main(void){"," gl_Position = vec4((projectionMatrix * translationMatrix * vec3(aVertexPosition, 1.0)).xy, 0.0, 1.0);"," vTextureCoord = aTextureCoord;","}"].join("\n"),["precision lowp float;","varying vec2 vTextureCoord;","uniform float alpha;","uniform sampler2D uSampler;","void main(void){"," gl_FragColor = texture2D(uSampler, vTextureCoord) * alpha ;","}"].join("\n"),{alpha:{type:"1f",value:0},translationMatrix:{type:"mat3",value:new Float32Array(9)},projectionMatrix:{type:"mat3",value:new Float32Array(9)}},{aVertexPosition:0,aTextureCoord:0})}var n=t("../../core");i.prototype=Object.create(n.Shader.prototype),i.prototype.constructor=i,e.exports=i,n.ShaderManager.registerPlugin("meshShader",i)},{"../../core":45}],152:[function(t,e,r){Math.sign||(Math.sign=function(t){return t=+t,0===t||isNaN(t)?t:t>0?1:-1})},{}],153:[function(t,e,r){Object.assign||(Object.assign=t("object-assign"))},{"object-assign":26}],154:[function(t,e,r){t("./Object.assign"),t("./requestAnimationFrame"),t("./Math.sign")},{"./Math.sign":152,"./Object.assign":153,"./requestAnimationFrame":155}],155:[function(t,e,r){(function(t){if(Date.now&&Date.prototype.getTime||(Date.now=function(){return(new Date).getTime()}),!t.performance||!t.performance.now){var e=Date.now();t.performance||(t.performance={}),t.performance.now=function(){return Date.now()-e}}for(var r=Date.now(),i=["ms","moz","webkit","o"],n=0;ni&&(i=0),r=e,setTimeout(function(){r=Date.now(),t(performance.now())},i)}),t.cancelAnimationFrame||(t.cancelAnimationFrame=function(t){clearTimeout(t)})}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{}]},{},[136])(136)}); +!function(t){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=t();else if("function"==typeof define&&define.amd)define([],t);else{var e;e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:this,e.PIXI=t()}}(function(){var t;return function e(t,r,i){function n(s,a){if(!r[s]){if(!t[s]){var h="function"==typeof require&&require;if(!a&&h)return h(s,!0);if(o)return o(s,!0);var u=new Error("Cannot find module '"+s+"'");throw u.code="MODULE_NOT_FOUND",u}var l=r[s]={exports:{}};t[s][0].call(l.exports,function(e){var r=t[s][1][e];return n(r?r:e)},l,l.exports,e,t,r,i)}return r[s].exports}for(var o="function"==typeof require&&require,s=0;s=t.byteLength?i.bufferSubData(this.type,e,t):i.bufferData(this.type,t,this.drawType),this.data=t},n.prototype.bind=function(){var t=this.gl;t.bindBuffer(this.type,this.buffer)},n.createVertexBuffer=function(t,e,r){return new n(t,t.ARRAY_BUFFER,e,r)},n.createIndexBuffer=function(t,e,r){return new n(t,t.ELEMENT_ARRAY_BUFFER,e,r)},n.create=function(t,e,r,i){return new n(t,e,i)},e.exports=n},{}],3:[function(t,e,r){var i=t("./GLTexture"),n=function(t,e,r){this.gl=t,this.framebuffer=t.createFramebuffer(),this.stencil=null,this.texture=null,this.width=e||100,this.height=r||100};n.prototype.enableTexture=function(t){var e=this.gl;this.texture=t||new i(e),this.texture.bind(),this.bind(),e.framebufferTexture2D(e.FRAMEBUFFER,e.COLOR_ATTACHMENT0,e.TEXTURE_2D,this.texture.texture,0)},n.prototype.enableStencil=function(){if(!this.stencil){var t=this.gl;this.stencil=t.createRenderbuffer(),t.bindRenderbuffer(t.RENDERBUFFER,this.stencil),t.framebufferRenderbuffer(t.FRAMEBUFFER,t.DEPTH_STENCIL_ATTACHMENT,t.RENDERBUFFER,this.stencil),t.renderbufferStorage(t.RENDERBUFFER,t.DEPTH_STENCIL,this.width,this.height)}},n.prototype.clear=function(t,e,r,i){this.bind();var n=this.gl;n.clearColor(t,e,r,i),n.clear(n.COLOR_BUFFER_BIT)},n.prototype.bind=function(){var t=this.gl;t.bindFramebuffer(t.FRAMEBUFFER,this.framebuffer)},n.prototype.unbind=function(){gl.bindFramebuffer(gl.FRAMEBUFFER,null)},n.prototype.resize=function(t,e){var r=this.gl;this.width=t,this.height=e,this.texture&&this.texture.uploadData(null,t,e),this.stencil&&(r.bindRenderbuffer(r.RENDERBUFFER,this.stencil),r.renderbufferStorage(r.RENDERBUFFER,r.DEPTH_STENCIL,t,e))},n.prototype.destroy=function(){var t=this.gl;t.deleteFramebuffer(this.framebuffer)},n.createRGBA=function(t,e,r,o){var s=i.fromData(t,null,e,r);s.enableNearestScaling(),s.enableWrapClamp();var a=new n(t,e,r);return a.enableTexture(s),a},n.createFloat32=function(t,e,r,o){var s=new i.fromData(t,o,e,r);s.enableNearestScaling(),s.enableWrapClamp();var a=new n(t,e,r);return a.enableTexture(s),a},e.exports=n},{"./GLTexture":5}],4:[function(t,e,r){var i=t("./shader/compileProgram"),n=t("./shader/extractAttributes"),o=t("./shader/extractUniforms"),s=t("./shader/generateUniformAccessObject"),a=function(t,e,r){this.gl=t,this.program=i(t,e,r),this.attributes=n(t,this.program);var a=o(t,this.program);this.uniforms=s(t,a)};a.prototype.bind=function(){this.gl.useProgram(this.program)},a.prototype.destroy=function(){this.gl},e.exports=a},{"./shader/compileProgram":9,"./shader/extractAttributes":11,"./shader/extractUniforms":12,"./shader/generateUniformAccessObject":13}],5:[function(t,e,r){var i=function(t,e,r,i,n){this.gl=t,this.texture=t.createTexture(),this.mipmap=!1,this.premultiplyAlpha=!1,this.width=e||0,this.height=r||0,this.format=i||t.RGBA,this.type=n||t.UNSIGNED_BYTE};i.prototype.upload=function(t){this.bind();var e=this.gl;this.width=t.width,this.height=t.height,e.pixelStorei(e.UNPACK_PREMULTIPLY_ALPHA_WEBGL,this.premultiplyAlpha),e.texImage2D(e.TEXTURE_2D,0,this.format,this.format,this.type,t)};var n=!1;i.prototype.uploadData=function(t,e,r){if(this.bind(),this.width=e||this.width,this.height=r||this.height,t instanceof Float32Array){if(!n){var i=gl.getExtension("OES_texture_float");if(!i)throw new Error("floating point textures not available");n=!0}this.type=gl.FLOAT}else this.type=gl.UNSIGNED_BYTE;gl.pixelStorei(gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL,this.premultiplyAlpha),gl.texImage2D(gl.TEXTURE_2D,0,this.format,this.width,this.height,0,this.format,this.type,t||null)},i.prototype.bind=function(t){var e=this.gl;void 0!==t&&e.activeTexture(e.TEXTURE0+t),e.bindTexture(e.TEXTURE_2D,this.texture)},i.prototype.unbind=function(){var t=this.gl;t.bindTexture(t.TEXTURE_2D,null)},i.prototype.minFilter=function(t){var e=this.gl;this.bind(),this.mipmap?e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MIN_FILTER,t?e.LINEAR_MIPMAP_LINEAR:e.NEAREST_MIPMAP_NEAREST):e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MIN_FILTER,t?e.LINEAR:e.NEAREST)},i.prototype.magFilter=function(t){var e=this.gl;this.bind(),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MAG_FILTER,t?e.LINEAR:e.NEAREST)},i.prototype.enableMipmap=function(){this.bind(),this.mipmap=!0,gl.generateMipmap(gl.TEXTURE_2D)},i.prototype.enableLinearScaling=function(){this.minFilter(!0),this.magFilter(!0)},i.prototype.enableNearestScaling=function(){this.minFilter(!1),this.magFilter(!1)},i.prototype.enableWrapClamp=function(){var t=this.gl;this.bind(),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_WRAP_S,t.CLAMP_TO_EDGE),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_WRAP_T,t.CLAMP_TO_EDGE)},i.prototype.enableWrapRepeat=function(){var t=this.gl;this.bind(),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_WRAP_S,t.REPEAT),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_WRAP_T,t.REPEAT)},i.prototype.destroy=function(){var t=this.gl;t.deleteTexture(this.texture)},i.fromSource=function(t,e,r){var n=new i(t);return n.premultiplyAlpha=r||!1,n.upload(e),n},i.fromData=function(t,e,r,n){var o=new i(t);return o.uploadData(e,r,n),o},e.exports=i},{}],6:[function(t,e,r){function i(t){this.nativeVaoExtension=t.getExtension("OES_vertex_array_object")||t.getExtension("MOZ_OES_vertex_array_object")||t.getExtension("WEBKIT_OES_vertex_array_object"),this.nativeVaoExtension&&(this.nativeVao=this.nativeVaoExtension.createVertexArrayOES()),this.gl=t,this.attributes=[],this.indexBuffer=null,this.dirty=!1}i.prototype.constructor=i,e.exports=i,i.prototype.bind=function(){this.nativeVao?(this.nativeVaoExtension.bindVertexArrayOES(this.nativeVao),this.dirty&&(this.dirty=!1,this.activate())):this.activate()},i.prototype.unbind=function(){this.nativeVao&&this.nativeVaoExtension.bindVertexArrayOES(null)},i.prototype.activate=function(){for(var t=this.gl,e=0;es;s++){var a=t.getActiveAttrib(e,s),h=i(t,a.type);r[a.name]={type:h,size:n(h),location:t.getAttribLocation(e,a.name),pointer:function(e,r,i,n){t.vertexAttribPointer(this.location,this.size,e||t.FLOAT,r||!1,i||0,n||0)}}}return r};e.exports=o},{"./mapSize":14,"./mapType":15}],12:[function(t,e,r){var i=t("./mapType"),n=t("./defaultValue"),o=function(t,e){for(var r={},o=t.getProgramParameter(e,t.ACTIVE_UNIFORMS),s=0;o>s;s++){var a=t.getActiveUniform(e,s),h=a.name.replace(/\[.*?\]/,""),u=i(t,a.type);r[h]={type:u,size:a.size,location:t.getUniformLocation(e,h),value:n(u,a.size)}}return r};e.exports=o},{"./defaultValue":10,"./mapType":15}],13:[function(t,e,r){var i=function(t,e){var r={data:{}};r.gl=t;for(var i=Object.keys(e),a=0;a=0&&t.length%1===0}function c(t,e){for(var r=-1,i=t.length;++ri?i:null}):(r=X(t),e=r.length,function(){return i++,e>i?r[i]:null})}function y(t,e){return e=null==e?t.length-1:+e,function(){for(var r=Math.max(arguments.length-e,0),i=Array(r),n=0;r>n;n++)i[n]=arguments[n+e];switch(e){case 0:return t.call(this,i);case 1:return t.call(this,arguments[0],i)}}}function x(t){return function(e,r,i){return t(e,i)}}function b(t){return function(e,r,i){i=u(i||n),e=e||[];var o=m(e);if(0>=t)return i(null);var s=!1,a=0,l=!1;!function c(){if(s&&0>=a)return i(null);for(;t>a&&!l;){var n=o();if(null===n)return s=!0,void(0>=a&&i(null));a+=1,r(e[n],n,h(function(t){a-=1,t?(i(t),l=!0):c()}))}}()}}function _(t){return function(e,r,i){return t(N.eachOf,e,r,i)}}function T(t){return function(e,r,i,n){return t(b(r),e,i,n)}}function E(t){return function(e,r,i){return t(N.eachOfSeries,e,r,i)}}function S(t,e,r,i){i=u(i||n),e=e||[];var o=l(e)?[]:{};t(e,function(t,e,i){r(t,function(t,r){o[e]=r,i(t)})},function(t){i(t,o)})}function w(t,e,r,i){var n=[];t(e,function(t,e,i){r(t,function(r){r&&n.push({index:e,value:t}),i()})},function(){i(p(n.sort(function(t,e){return t.index-e.index}),function(t){return t.value}))})}function C(t,e,r,i){w(t,e,function(t,e){r(t,function(t){e(!t)})},i)}function A(t,e,r){return function(i,n,o,s){function a(){s&&s(r(!1,void 0))}function h(t,i,n){return s?void o(t,function(i){s&&e(i)&&(s(r(!0,t)),s=o=!1),n()}):n()}arguments.length>3?t(i,n,h,a):(s=o,o=n,t(i,h,a))}}function M(t,e){return e}function R(t,e,r){r=r||n;var i=l(e)?[]:{};t(e,function(t,e,r){t(y(function(t,n){n.length<=1&&(n=n[0]),i[e]=n,r(t)}))},function(t){r(t,i)})}function O(t,e,r,i){var n=[];t(e,function(t,e,i){r(t,function(t,e){n=n.concat(e||[]),i(t)})},function(t){i(t,n)})}function P(t,e,r){function i(t,e,r,i){if(null!=i&&"function"!=typeof i)throw new Error("task callback must be a function");return t.started=!0,j(e)||(e=[e]),0===e.length&&t.idle()?N.setImmediate(function(){t.drain()}):(c(e,function(e){var o={data:e,callback:i||n};r?t.tasks.unshift(o):t.tasks.push(o),t.tasks.length===t.concurrency&&t.saturated()}),void N.setImmediate(t.process))}function o(t,e){return function(){s-=1;var r=!1,i=arguments;c(e,function(t){c(a,function(e,i){e!==t||r||(a.splice(i,1),r=!0)}),t.callback.apply(t,i)}),t.tasks.length+s===0&&t.drain(),t.process()}}if(null==e)e=1;else if(0===e)throw new Error("Concurrency must not be zero");var s=0,a=[],u={tasks:[],concurrency:e,payload:r,saturated:n,empty:n,drain:n,started:!1,paused:!1,push:function(t,e){i(u,t,!1,e)},kill:function(){u.drain=n,u.tasks=[]},unshift:function(t,e){i(u,t,!0,e)},process:function(){if(!u.paused&&s=e;e++)N.setImmediate(u.process)}}};return u}function D(t){return y(function(e,r){e.apply(null,r.concat([y(function(e,r){"object"==typeof console&&(e?console.error&&console.error(e):console[t]&&c(r,function(e){console[t](e)}))})]))})}function F(t){return function(e,r,i){t(d(e),r,i)}}function L(t){return y(function(e,r){var i=y(function(r){var i=this,n=r.pop();return t(e,function(t,e,n){t.apply(i,r.concat([n]))},n)});return r.length?i.apply(this,r):i})}function B(t){return y(function(e){var r=e.pop();e.push(function(){var t=arguments;i?N.setImmediate(function(){r.apply(null,t)}):r.apply(null,t)});var i=!0;t.apply(this,e),i=!1})}var I,N={},U="object"==typeof self&&self.self===self&&self||"object"==typeof i&&i.global===i&&i||this;null!=U&&(I=U.async),N.noConflict=function(){return U.async=I,N};var k=Object.prototype.toString,j=Array.isArray||function(t){return"[object Array]"===k.call(t)},G=function(t){var e=typeof t;return"function"===e||"object"===e&&!!t},X=Object.keys||function(t){var e=[];for(var r in t)t.hasOwnProperty(r)&&e.push(r);return e},Y="function"==typeof setImmediate&&setImmediate,z=Y?function(t){Y(t)}:function(t){setTimeout(t,0)};"object"==typeof e&&"function"==typeof e.nextTick?N.nextTick=e.nextTick:N.nextTick=z,N.setImmediate=Y?z:N.nextTick,N.forEach=N.each=function(t,e,r){return N.eachOf(t,x(e),r)},N.forEachSeries=N.eachSeries=function(t,e,r){return N.eachOfSeries(t,x(e),r)},N.forEachLimit=N.eachLimit=function(t,e,r,i){return b(e)(t,x(r),i)},N.forEachOf=N.eachOf=function(t,e,r){function i(t){a--,t?r(t):null===o&&0>=a&&r(null)}r=u(r||n),t=t||[];for(var o,s=m(t),a=0;null!=(o=s());)a+=1,e(t[o],o,h(i));0===a&&r(null)},N.forEachOfSeries=N.eachOfSeries=function(t,e,r){function i(){var n=!0;return null===s?r(null):(e(t[s],s,h(function(t){if(t)r(t);else{if(s=o(),null===s)return r(null);n?N.setImmediate(i):i()}})),void(n=!1))}r=u(r||n),t=t||[];var o=m(t),s=o();i()},N.forEachOfLimit=N.eachOfLimit=function(t,e,r,i){b(e)(t,r,i)},N.map=_(S),N.mapSeries=E(S),N.mapLimit=T(S),N.inject=N.foldl=N.reduce=function(t,e,r,i){N.eachOfSeries(t,function(t,i,n){r(e,t,function(t,r){e=r,n(t)})},function(t){i(t,e)})},N.foldr=N.reduceRight=function(t,e,r,i){var n=p(t,o).reverse();N.reduce(n,e,r,i)},N.transform=function(t,e,r,i){3===arguments.length&&(i=r,r=e,e=j(t)?[]:{}),N.eachOf(t,function(t,i,n){r(e,t,i,n)},function(t){i(t,e)})},N.select=N.filter=_(w),N.selectLimit=N.filterLimit=T(w),N.selectSeries=N.filterSeries=E(w),N.reject=_(C),N.rejectLimit=T(C),N.rejectSeries=E(C),N.any=N.some=A(N.eachOf,s,o),N.someLimit=A(N.eachOfLimit,s,o),N.all=N.every=A(N.eachOf,a,a),N.everyLimit=A(N.eachOfLimit,a,a),N.detect=A(N.eachOf,o,M),N.detectSeries=A(N.eachOfSeries,o,M),N.detectLimit=A(N.eachOfLimit,o,M),N.sortBy=function(t,e,r){function i(t,e){var r=t.criteria,i=e.criteria;return i>r?-1:r>i?1:0}N.map(t,function(t,r){e(t,function(e,i){e?r(e):r(null,{value:t,criteria:i})})},function(t,e){return t?r(t):void r(null,p(e.sort(i),function(t){return t.value}))})},N.auto=function(t,e,r){function i(t){d.unshift(t)}function o(t){var e=g(d,t);e>=0&&d.splice(e,1)}function s(){h--,c(d.slice(0),function(t){t()})}r||(r=e,e=null),r=u(r||n);var a=X(t),h=a.length;if(!h)return r(null);e||(e=h);var l={},p=0,d=[];i(function(){h||r(null,l)}),c(a,function(n){function a(){return e>p&&f(m,function(t,e){return t&&l.hasOwnProperty(e)},!0)&&!l.hasOwnProperty(n)}function h(){a()&&(p++,o(h),c[c.length-1](d,l))}for(var u,c=j(t[n])?t[n]:[t[n]],d=y(function(t,e){if(p--,e.length<=1&&(e=e[0]),t){var i={};v(l,function(t,e){i[e]=t}),i[n]=e,r(t,i)}else l[n]=e,N.setImmediate(s)}),m=c.slice(0,c.length-1),x=m.length;x--;){if(!(u=t[m[x]]))throw new Error("Has inexistant dependency");if(j(u)&&g(u,n)>=0)throw new Error("Has cyclic dependencies")}a()?(p++,c[c.length-1](d,l)):i(h)})},N.retry=function(t,e,r){function i(t,e){if("number"==typeof e)t.times=parseInt(e,10)||o;else{if("object"!=typeof e)throw new Error("Unsupported argument type for 'times': "+typeof e);t.times=parseInt(e.times,10)||o,t.interval=parseInt(e.interval,10)||s}}function n(t,e){function r(t,r){return function(i){t(function(t,e){i(!t||r,{err:t,result:e})},e)}}function i(t){return function(e){setTimeout(function(){e(null)},t)}}for(;h.times;){var n=!(h.times-=1);a.push(r(h.task,n)),!n&&h.interval>0&&a.push(i(h.interval))}N.series(a,function(e,r){r=r[r.length-1],(t||h.callback)(r.err,r.result)})}var o=5,s=0,a=[],h={times:o,interval:s},u=arguments.length;if(1>u||u>3)throw new Error("Invalid arguments - must be either (task), (task, callback), (times, task) or (times, task, callback)");return 2>=u&&"function"==typeof t&&(r=e,e=t),"function"!=typeof t&&i(h,t),h.callback=r,h.task=e,h.callback?n():n},N.waterfall=function(t,e){function r(t){return y(function(i,n){if(i)e.apply(null,[i].concat(n));else{var o=t.next();o?n.push(r(o)):n.push(e),B(t).apply(null,n)}})}if(e=u(e||n),!j(t)){var i=new Error("First argument to waterfall must be an array of functions");return e(i)}return t.length?void r(N.iterator(t))():e()},N.parallel=function(t,e){R(N.eachOf,t,e)},N.parallelLimit=function(t,e,r){R(b(e),t,r)},N.series=function(t,e){R(N.eachOfSeries,t,e)},N.iterator=function(t){function e(r){function i(){return t.length&&t[r].apply(null,arguments),i.next()}return i.next=function(){return ri;){var o=i+(n-i+1>>>1);r(e,t[o])>=0?i=o:n=o-1}return i}function o(t,e,o,s){if(null!=s&&"function"!=typeof s)throw new Error("task callback must be a function");return t.started=!0,j(e)||(e=[e]),0===e.length?N.setImmediate(function(){t.drain()}):void c(e,function(e){var a={data:e,priority:o,callback:"function"==typeof s?s:n};t.tasks.splice(i(t.tasks,a,r)+1,0,a),t.tasks.length===t.concurrency&&t.saturated(),N.setImmediate(t.process)})}var s=N.queue(t,e);return s.push=function(t,e,r){o(s,t,e,r)},delete s.unshift,s},N.cargo=function(t,e){return P(t,1,e)},N.log=D("log"),N.dir=D("dir"),N.memoize=function(t,e){var r={},i={};e=e||o;var n=y(function(n){var o=n.pop(),s=e.apply(null,n);s in r?N.setImmediate(function(){o.apply(null,r[s])}):s in i?i[s].push(o):(i[s]=[o],t.apply(null,n.concat([y(function(t){r[s]=t;var e=i[s];delete i[s];for(var n=0,o=e.length;o>n;n++)e[n].apply(null,t)})])))});return n.memo=r,n.unmemoized=t,n},N.unmemoize=function(t){return function(){return(t.unmemoized||t).apply(null,arguments)}},N.times=F(N.map),N.timesSeries=F(N.mapSeries),N.timesLimit=function(t,e,r,i){return N.mapLimit(d(t),e,r,i)},N.seq=function(){var t=arguments;return y(function(e){var r=this,i=e[e.length-1];"function"==typeof i?e.pop():i=n,N.reduce(t,e,function(t,e,i){e.apply(r,t.concat([y(function(t,e){i(t,e)})]))},function(t,e){i.apply(r,[t].concat(e))})})},N.compose=function(){return N.seq.apply(null,Array.prototype.reverse.call(arguments))},N.applyEach=L(N.eachOf),N.applyEachSeries=L(N.eachOfSeries),N.forever=function(t,e){function r(t){return t?i(t):void o(r)}var i=h(e||n),o=B(t);r()},N.ensureAsync=B,N.constant=y(function(t){var e=[null].concat(t);return function(t){return t.apply(this,e)}}),N.wrapSync=N.asyncify=function(t){return y(function(e){var r,i=e.pop();try{r=t.apply(this,e)}catch(n){return i(n)}G(r)&&"function"==typeof r.then?r.then(function(t){i(null,t)})["catch"](function(t){i(t.message?t:new Error(t))}):i(null,r)})},"object"==typeof r&&r.exports?r.exports=N:"function"==typeof t&&t.amd?t([],function(){return N}):U.async=N}()}).call(this,e("_process"),"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{_process:18}],17:[function(t,e,r){(function(t){function e(t,e){for(var r=0,i=t.length-1;i>=0;i--){var n=t[i];"."===n?t.splice(i,1):".."===n?(t.splice(i,1),r++):r&&(t.splice(i,1),r--)}if(e)for(;r--;r)t.unshift("..");return t}function i(t,e){if(t.filter)return t.filter(e);for(var r=[],i=0;i=-1&&!n;o--){var s=o>=0?arguments[o]:t.cwd();if("string"!=typeof s)throw new TypeError("Arguments to path.resolve must be strings");s&&(r=s+"/"+r,n="/"===s.charAt(0))}return r=e(i(r.split("/"),function(t){return!!t}),!n).join("/"),(n?"/":"")+r||"."},r.normalize=function(t){var n=r.isAbsolute(t),o="/"===s(t,-1);return t=e(i(t.split("/"),function(t){return!!t}),!n).join("/"),t||n||(t="."),t&&o&&(t+="/"),(n?"/":"")+t},r.isAbsolute=function(t){return"/"===t.charAt(0)},r.join=function(){var t=Array.prototype.slice.call(arguments,0);return r.normalize(i(t,function(t,e){if("string"!=typeof t)throw new TypeError("Arguments to path.join must be strings");return t}).join("/"))},r.relative=function(t,e){function i(t){for(var e=0;e=0&&""===t[r];r--);return e>r?[]:t.slice(e,r-e+1)}t=r.resolve(t).substr(1),e=r.resolve(e).substr(1);for(var n=i(t.split("/")),o=i(e.split("/")),s=Math.min(n.length,o.length),a=s,h=0;s>h;h++)if(n[h]!==o[h]){a=h;break}for(var u=[],h=a;he&&(e=t.length+e),t.substr(e,r)}}).call(this,t("_process"))},{_process:18}],18:[function(t,e,r){function i(){l=!1,a.length?u=a.concat(u):c=-1,u.length&&n()}function n(){if(!l){var t=setTimeout(i);l=!0;for(var e=u.length;e;){for(a=u,u=[];++c1)for(var r=1;r1&&(i=r[0]+"@",t=r[1]),t=t.replace(F,".");var n=t.split("."),o=s(n,e).join(".");return i+o}function h(t){for(var e,r,i=[],n=0,o=t.length;o>n;)e=t.charCodeAt(n++),e>=55296&&56319>=e&&o>n?(r=t.charCodeAt(n++),56320==(64512&r)?i.push(((1023&e)<<10)+(1023&r)+65536):(i.push(e),n--)):i.push(e);return i}function u(t){return s(t,function(t){var e="";return t>65535&&(t-=65536,e+=N(t>>>10&1023|55296),t=56320|1023&t),e+=N(t)}).join("")}function l(t){return 10>t-48?t-22:26>t-65?t-65:26>t-97?t-97:E}function c(t,e){return t+22+75*(26>t)-((0!=e)<<5)}function p(t,e,r){var i=0;for(t=r?I(t/A):t>>1,t+=I(t/e);t>B*w>>1;i+=E)t=I(t/B);return I(i+(B+1)*t/(t+C))}function d(t){var e,r,i,n,s,a,h,c,d,f,v=[],g=t.length,m=0,y=R,x=M;for(r=t.lastIndexOf(O),0>r&&(r=0),i=0;r>i;++i)t.charCodeAt(i)>=128&&o("not-basic"),v.push(t.charCodeAt(i));for(n=r>0?r+1:0;g>n;){for(s=m,a=1,h=E;n>=g&&o("invalid-input"),c=l(t.charCodeAt(n++)),(c>=E||c>I((T-m)/a))&&o("overflow"),m+=c*a,d=x>=h?S:h>=x+w?w:h-x,!(d>c);h+=E)f=E-d,a>I(T/f)&&o("overflow"),a*=f;e=v.length+1,x=p(m-s,e,0==s),I(m/e)>T-y&&o("overflow"),y+=I(m/e),m%=e,v.splice(m++,0,y)}return u(v)}function f(t){var e,r,i,n,s,a,u,l,d,f,v,g,m,y,x,b=[];for(t=h(t),g=t.length,e=R,r=0,s=M,a=0;g>a;++a)v=t[a],128>v&&b.push(N(v));for(i=n=b.length,n&&b.push(O);g>i;){for(u=T,a=0;g>a;++a)v=t[a],v>=e&&u>v&&(u=v);for(m=i+1,u-e>I((T-r)/m)&&o("overflow"),r+=(u-e)*m,e=u,a=0;g>a;++a)if(v=t[a],e>v&&++r>T&&o("overflow"),v==e){for(l=r,d=E;f=s>=d?S:d>=s+w?w:d-s,!(f>l);d+=E)x=l-f,y=E-f,b.push(N(c(f+x%y,0))),l=I(x/y);b.push(N(c(l,0))),s=p(r,m,i==n),r=0,++i}++r,++e}return b.join("")}function v(t){return a(t,function(t){return P.test(t)?d(t.slice(4).toLowerCase()):t})}function g(t){return a(t,function(t){return D.test(t)?"xn--"+f(t):t})}var m="object"==typeof i&&i&&!i.nodeType&&i,y="object"==typeof r&&r&&!r.nodeType&&r,x="object"==typeof e&&e;(x.global===x||x.window===x||x.self===x)&&(n=x);var b,_,T=2147483647,E=36,S=1,w=26,C=38,A=700,M=72,R=128,O="-",P=/^xn--/,D=/[^\x20-\x7E]/,F=/[\x2E\u3002\uFF0E\uFF61]/g,L={overflow:"Overflow: input needs wider integers to process","not-basic":"Illegal input >= 0x80 (not a basic code point)","invalid-input":"Invalid input"},B=E-S,I=Math.floor,N=String.fromCharCode;if(b={version:"1.3.2",ucs2:{decode:h,encode:u},decode:d,encode:f,toASCII:g,toUnicode:v},"function"==typeof t&&"object"==typeof t.amd&&t.amd)t("punycode",function(){return b});else if(m&&y)if(r.exports==m)y.exports=b;else for(_ in b)b.hasOwnProperty(_)&&(m[_]=b[_]);else n.punycode=b}(this)}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{}],20:[function(t,e,r){"use strict";function i(t,e){return Object.prototype.hasOwnProperty.call(t,e)}e.exports=function(t,e,r,o){e=e||"&",r=r||"=";var s={};if("string"!=typeof t||0===t.length)return s;var a=/\+/g;t=t.split(e);var h=1e3;o&&"number"==typeof o.maxKeys&&(h=o.maxKeys);var u=t.length;h>0&&u>h&&(u=h);for(var l=0;u>l;++l){var c,p,d,f,v=t[l].replace(a,"%20"),g=v.indexOf(r);g>=0?(c=v.substr(0,g),p=v.substr(g+1)):(c=v,p=""),d=decodeURIComponent(c), +f=decodeURIComponent(p),i(s,d)?n(s[d])?s[d].push(f):s[d]=[s[d],f]:s[d]=f}return s};var n=Array.isArray||function(t){return"[object Array]"===Object.prototype.toString.call(t)}},{}],21:[function(t,e,r){"use strict";function i(t,e){if(t.map)return t.map(e);for(var r=[],i=0;i",'"',"`"," ","\r","\n"," "],g=["{","}","|","\\","^","`"].concat(v),m=["'"].concat(g),y=["%","/","?",";","#"].concat(m),x=["/","?","#"],b=255,_=/^[a-z0-9A-Z_-]{0,63}$/,T=/^([a-z0-9A-Z_-]{0,63})(.*)$/,E={javascript:!0,"javascript:":!0},S={javascript:!0,"javascript:":!0},w={http:!0,https:!0,ftp:!0,gopher:!0,file:!0,"http:":!0,"https:":!0,"ftp:":!0,"gopher:":!0,"file:":!0},C=t("querystring");i.prototype.parse=function(t,e,r){if(!h(t))throw new TypeError("Parameter 'url' must be a string, not "+typeof t);var i=t;i=i.trim();var n=d.exec(i);if(n){n=n[0];var o=n.toLowerCase();this.protocol=o,i=i.substr(n.length)}if(r||n||i.match(/^\/\/[^@\/]+@[^@\/]+/)){var s="//"===i.substr(0,2);!s||n&&S[n]||(i=i.substr(2),this.slashes=!0)}if(!S[n]&&(s||n&&!w[n])){for(var a=-1,u=0;ul)&&(a=l)}var c,f;f=-1===a?i.lastIndexOf("@"):i.lastIndexOf("@",a),-1!==f&&(c=i.slice(0,f),i=i.slice(f+1),this.auth=decodeURIComponent(c)),a=-1;for(var u=0;ul)&&(a=l)}-1===a&&(a=i.length),this.host=i.slice(0,a),i=i.slice(a),this.parseHost(),this.hostname=this.hostname||"";var v="["===this.hostname[0]&&"]"===this.hostname[this.hostname.length-1];if(!v)for(var g=this.hostname.split(/\./),u=0,A=g.length;A>u;u++){var M=g[u];if(M&&!M.match(_)){for(var R="",O=0,P=M.length;P>O;O++)R+=M.charCodeAt(O)>127?"x":M[O];if(!R.match(_)){var D=g.slice(0,u),F=g.slice(u+1),L=M.match(T);L&&(D.push(L[1]),F.unshift(L[2])),F.length&&(i="/"+F.join(".")+i),this.hostname=D.join(".");break}}}if(this.hostname.length>b?this.hostname="":this.hostname=this.hostname.toLowerCase(),!v){for(var B=this.hostname.split("."),I=[],u=0;uu;u++){var j=m[u],G=encodeURIComponent(j);G===j&&(G=escape(j)),i=i.split(j).join(G)}var X=i.indexOf("#");-1!==X&&(this.hash=i.substr(X),i=i.slice(0,X));var Y=i.indexOf("?");if(-1!==Y?(this.search=i.substr(Y),this.query=i.substr(Y+1),e&&(this.query=C.parse(this.query)),i=i.slice(0,Y)):e&&(this.search="",this.query={}),i&&(this.pathname=i),w[o]&&this.hostname&&!this.pathname&&(this.pathname="/"),this.pathname||this.search){var U=this.pathname||"",N=this.search||"";this.path=U+N}return this.href=this.format(),this},i.prototype.format=function(){var t=this.auth||"";t&&(t=encodeURIComponent(t),t=t.replace(/%3A/i,":"),t+="@");var e=this.protocol||"",r=this.pathname||"",i=this.hash||"",n=!1,o="";this.host?n=t+this.host:this.hostname&&(n=t+(-1===this.hostname.indexOf(":")?this.hostname:"["+this.hostname+"]"),this.port&&(n+=":"+this.port)),this.query&&u(this.query)&&Object.keys(this.query).length&&(o=C.stringify(this.query));var s=this.search||o&&"?"+o||"";return e&&":"!==e.substr(-1)&&(e+=":"),this.slashes||(!e||w[e])&&n!==!1?(n="//"+(n||""),r&&"/"!==r.charAt(0)&&(r="/"+r)):n||(n=""),i&&"#"!==i.charAt(0)&&(i="#"+i),s&&"?"!==s.charAt(0)&&(s="?"+s),r=r.replace(/[?#]/g,function(t){return encodeURIComponent(t)}),s=s.replace("#","%23"),e+n+r+s+i},i.prototype.resolve=function(t){return this.resolveObject(n(t,!1,!0)).format()},i.prototype.resolveObject=function(t){if(h(t)){var e=new i;e.parse(t,!1,!0),t=e}var r=new i;if(Object.keys(this).forEach(function(t){r[t]=this[t]},this),r.hash=t.hash,""===t.href)return r.href=r.format(),r;if(t.slashes&&!t.protocol)return Object.keys(t).forEach(function(e){"protocol"!==e&&(r[e]=t[e])}),w[r.protocol]&&r.hostname&&!r.pathname&&(r.path=r.pathname="/"),r.href=r.format(),r;if(t.protocol&&t.protocol!==r.protocol){if(!w[t.protocol])return Object.keys(t).forEach(function(e){r[e]=t[e]}),r.href=r.format(),r;if(r.protocol=t.protocol,t.host||S[t.protocol])r.pathname=t.pathname;else{for(var n=(t.pathname||"").split("/");n.length&&!(t.host=n.shift()););t.host||(t.host=""),t.hostname||(t.hostname=""),""!==n[0]&&n.unshift(""),n.length<2&&n.unshift(""),r.pathname=n.join("/")}if(r.search=t.search,r.query=t.query,r.host=t.host||"",r.auth=t.auth,r.hostname=t.hostname||t.host,r.port=t.port,r.pathname||r.search){var o=r.pathname||"",s=r.search||"";r.path=o+s}return r.slashes=r.slashes||t.slashes,r.href=r.format(),r}var a=r.pathname&&"/"===r.pathname.charAt(0),u=t.host||t.pathname&&"/"===t.pathname.charAt(0),p=u||a||r.host&&t.pathname,d=p,f=r.pathname&&r.pathname.split("/")||[],n=t.pathname&&t.pathname.split("/")||[],v=r.protocol&&!w[r.protocol];if(v&&(r.hostname="",r.port=null,r.host&&(""===f[0]?f[0]=r.host:f.unshift(r.host)),r.host="",t.protocol&&(t.hostname=null,t.port=null,t.host&&(""===n[0]?n[0]=t.host:n.unshift(t.host)),t.host=null),p=p&&(""===n[0]||""===f[0])),u)r.host=t.host||""===t.host?t.host:r.host,r.hostname=t.hostname||""===t.hostname?t.hostname:r.hostname,r.search=t.search,r.query=t.query,f=n;else if(n.length)f||(f=[]),f.pop(),f=f.concat(n),r.search=t.search,r.query=t.query;else if(!c(t.search)){if(v){r.hostname=r.host=f.shift();var g=r.host&&r.host.indexOf("@")>0?r.host.split("@"):!1;g&&(r.auth=g.shift(),r.host=r.hostname=g.shift())}return r.search=t.search,r.query=t.query,l(r.pathname)&&l(r.search)||(r.path=(r.pathname?r.pathname:"")+(r.search?r.search:"")),r.href=r.format(),r}if(!f.length)return r.pathname=null,r.search?r.path="/"+r.search:r.path=null,r.href=r.format(),r;for(var m=f.slice(-1)[0],y=(r.host||t.host)&&("."===m||".."===m)||""===m,x=0,b=f.length;b>=0;b--)m=f[b],"."==m?f.splice(b,1):".."===m?(f.splice(b,1),x++):x&&(f.splice(b,1),x--);if(!p&&!d)for(;x--;x)f.unshift("..");!p||""===f[0]||f[0]&&"/"===f[0].charAt(0)||f.unshift(""),y&&"/"!==f.join("/").substr(-1)&&f.push("");var _=""===f[0]||f[0]&&"/"===f[0].charAt(0);if(v){r.hostname=r.host=_?"":f.length?f.shift():"";var g=r.host&&r.host.indexOf("@")>0?r.host.split("@"):!1;g&&(r.auth=g.shift(),r.host=r.hostname=g.shift())}return p=p||r.host&&f.length,p&&!_&&f.unshift(""),f.length?r.pathname=f.join("/"):(r.pathname=null,r.path=null),l(r.pathname)&&l(r.search)||(r.path=(r.pathname?r.pathname:"")+(r.search?r.search:"")),r.auth=t.auth||r.auth,r.slashes=r.slashes||t.slashes,r.href=r.format(),r},i.prototype.parseHost=function(){var t=this.host,e=f.exec(t);e&&(e=e[0],":"!==e&&(this.port=e.substr(1)),t=t.substr(0,t.length-e.length)),t&&(this.hostname=t)}},{punycode:19,querystring:22}],24:[function(t,e,r){"use strict";function i(t,e,r){r=r||2;var i=e&&e.length,o=i?e[0]*r:t.length,a=n(t,0,o,r,!0),h=[];if(!a)return h;var u,l,p,d,f,v,g;if(i&&(a=c(t,e,a,r)),t.length>80*r){u=p=t[0],l=d=t[1];for(var m=r;o>m;m+=r)f=t[m],v=t[m+1],u>f&&(u=f),l>v&&(l=v),f>p&&(p=f),v>d&&(d=v);g=Math.max(p-u,d-l)}return s(a,h,r,u,l,g),h}function n(t,e,r,i,n){var o,s,a,h=0;for(o=e,s=r-i;r>o;o+=i)h+=(t[s]-t[o])*(t[o+1]+t[s+1]),s=o;if(n===h>0)for(o=e;r>o;o+=i)a=M(o,t[o],t[o+1],a);else for(o=r-i;o>=e;o-=i)a=M(o,t[o],t[o+1],a);return a}function o(t,e){if(!t)return t;e||(e=t);var r,i=t;do if(r=!1,i.steiner||!T(i,i.next)&&0!==_(i.prev,i,i.next))i=i.next;else{if(R(i),i=e=i.prev,i===i.next)return null;r=!0}while(r||i!==e);return e}function s(t,e,r,i,n,c,p){if(t){!p&&c&&v(t,i,n,c);for(var d,f,g=t;t.prev!==t.next;)if(d=t.prev,f=t.next,c?h(t,i,n,c):a(t))e.push(d.i/r),e.push(t.i/r),e.push(f.i/r),R(t),t=f.next,g=f.next;else if(t=f,t===g){p?1===p?(t=u(t,e,r),s(t,e,r,i,n,c,2)):2===p&&l(t,e,r,i,n,c):s(o(t),e,r,i,n,c,1);break}}}function a(t){var e=t.prev,r=t,i=t.next;if(_(e,r,i)>=0)return!1;for(var n=t.next.next;n!==t.prev;){if(x(e.x,e.y,r.x,r.y,i.x,i.y,n.x,n.y)&&_(n.prev,n,n.next)>=0)return!1;n=n.next}return!0}function h(t,e,r,i){var n=t.prev,o=t,s=t.next;if(_(n,o,s)>=0)return!1;for(var a=n.xo.x?n.x>s.x?n.x:s.x:o.x>s.x?o.x:s.x,l=n.y>o.y?n.y>s.y?n.y:s.y:o.y>s.y?o.y:s.y,c=m(a,h,e,r,i),p=m(u,l,e,r,i),d=t.nextZ;d&&d.z<=p;){if(d!==t.prev&&d!==t.next&&x(n.x,n.y,o.x,o.y,s.x,s.y,d.x,d.y)&&_(d.prev,d,d.next)>=0)return!1;d=d.nextZ}for(d=t.prevZ;d&&d.z>=c;){if(d!==t.prev&&d!==t.next&&x(n.x,n.y,o.x,o.y,s.x,s.y,d.x,d.y)&&_(d.prev,d,d.next)>=0)return!1;d=d.prevZ}return!0}function u(t,e,r){var i=t;do{var n=i.prev,o=i.next.next;E(n,i,i.next,o)&&w(n,o)&&w(o,n)&&(e.push(n.i/r),e.push(i.i/r),e.push(o.i/r),R(i),R(i.next),i=t=o),i=i.next}while(i!==t);return i}function l(t,e,r,i,n,a){var h=t;do{for(var u=h.next.next;u!==h.prev;){if(h.i!==u.i&&b(h,u)){var l=A(h,u);return h=o(h,h.next),l=o(l,l.next),s(h,e,r,i,n,a),void s(l,e,r,i,n,a)}u=u.next}h=h.next}while(h!==t)}function c(t,e,r,i){var s,a,h,u,l,c=[];for(s=0,a=e.length;a>s;s++)h=e[s]*i,u=a-1>s?e[s+1]*i:t.length,l=n(t,h,u,i,!1),l===l.next&&(l.steiner=!0),c.push(y(l));for(c.sort(p),s=0;s=i.next.y){var a=i.x+(o-i.y)*(i.next.x-i.x)/(i.next.y-i.y);n>=a&&a>s&&(s=a,r=i.x=i.x&&i.x>=r.x&&x(oh||h===l&&i.x>r.x)&&w(i,t)&&(r=i,l=h)),i=i.next;return r}function v(t,e,r,i){var n=t;do null===n.z&&(n.z=m(n.x,n.y,e,r,i)),n.prevZ=n.prev,n.nextZ=n.next,n=n.next;while(n!==t);n.prevZ.nextZ=null,n.prevZ=null,g(n)}function g(t){var e,r,i,n,o,s,a,h,u=1;do{for(r=t,t=null,o=null,s=0;r;){for(s++,i=r,a=0,e=0;u>e&&(a++,i=i.nextZ,i);e++);for(h=u;a>0||h>0&&i;)0===a?(n=i,i=i.nextZ,h--):0!==h&&i?r.z<=i.z?(n=r,r=r.nextZ,a--):(n=i,i=i.nextZ,h--):(n=r,r=r.nextZ,a--),o?o.nextZ=n:t=n,n.prevZ=o,o=n;r=i}o.nextZ=null,u*=2}while(s>1);return t}function m(t,e,r,i,n){return t=32767*(t-r)/n,e=32767*(e-i)/n,t=16711935&(t|t<<8),t=252645135&(t|t<<4),t=858993459&(t|t<<2),t=1431655765&(t|t<<1),e=16711935&(e|e<<8),e=252645135&(e|e<<4),e=858993459&(e|e<<2),e=1431655765&(e|e<<1),t|e<<1}function y(t){var e=t,r=t;do e.x=0&&(t-s)*(i-a)-(r-s)*(e-a)>=0&&(r-s)*(o-a)-(n-s)*(i-a)>=0}function b(t,e){return T(t,e)||t.next.i!==e.i&&t.prev.i!==e.i&&!S(t,e)&&w(t,e)&&w(e,t)&&C(t,e)}function _(t,e,r){return(e.y-t.y)*(r.x-e.x)-(e.x-t.x)*(r.y-e.y)}function T(t,e){return t.x===e.x&&t.y===e.y}function E(t,e,r,i){return _(t,e,r)>0!=_(t,e,i)>0&&_(r,i,t)>0!=_(r,i,e)>0}function S(t,e){var r=t;do{if(r.i!==t.i&&r.next.i!==t.i&&r.i!==e.i&&r.next.i!==e.i&&E(r,r.next,t,e))return!0;r=r.next}while(r!==t);return!1}function w(t,e){return _(t.prev,t,t.next)<0?_(t,e,t.next)>=0&&_(t,t.prev,e)>=0:_(t,e,t.prev)<0||_(t,t.next,e)<0}function C(t,e){var r=t,i=!1,n=(t.x+e.x)/2,o=(t.y+e.y)/2;do r.y>o!=r.next.y>o&&n<(r.next.x-r.x)*(o-r.y)/(r.next.y-r.y)+r.x&&(i=!i),r=r.next;while(r!==t);return i}function A(t,e){var r=new O(t.i,t.x,t.y),i=new O(e.i,e.x,e.y),n=t.next,o=e.prev;return t.next=e,e.prev=t,r.next=n,n.prev=r,i.next=r,r.prev=i,o.next=i,i.prev=o,i}function M(t,e,r,i){var n=new O(t,e,r);return i?(n.next=i.next,n.prev=i,i.next.prev=n,i.next=n):(n.prev=n,n.next=n),n}function R(t){t.next.prev=t.prev,t.prev.next=t.next,t.prevZ&&(t.prevZ.nextZ=t.nextZ),t.nextZ&&(t.nextZ.prevZ=t.prevZ)}function O(t,e,r){this.i=t,this.x=e,this.y=r,this.prev=null,this.next=null,this.z=null,this.prevZ=null,this.nextZ=null,this.steiner=!1}e.exports=i},{}],25:[function(t,e,r){"use strict";function i(t,e,r){this.fn=t,this.context=e,this.once=r||!1}function n(){}var o="function"!=typeof Object.create?"~":!1;n.prototype._events=void 0,n.prototype.listeners=function(t,e){var r=o?o+t:t,i=this._events&&this._events[r];if(e)return!!i;if(!i)return[];if(i.fn)return[i.fn];for(var n=0,s=i.length,a=new Array(s);s>n;n++)a[n]=i[n].fn;return a},n.prototype.emit=function(t,e,r,i,n,s){var a=o?o+t:t;if(!this._events||!this._events[a])return!1;var h,u,l=this._events[a],c=arguments.length;if("function"==typeof l.fn){switch(l.once&&this.removeListener(t,l.fn,void 0,!0),c){case 1:return l.fn.call(l.context),!0;case 2:return l.fn.call(l.context,e),!0;case 3:return l.fn.call(l.context,e,r),!0;case 4:return l.fn.call(l.context,e,r,i),!0;case 5:return l.fn.call(l.context,e,r,i,n),!0;case 6:return l.fn.call(l.context,e,r,i,n,s),!0}for(u=1,h=new Array(c-1);c>u;u++)h[u-1]=arguments[u];l.fn.apply(l.context,h)}else{var p,d=l.length;for(u=0;d>u;u++)switch(l[u].once&&this.removeListener(t,l[u].fn,void 0,!0),c){case 1:l[u].fn.call(l[u].context);break;case 2:l[u].fn.call(l[u].context,e);break;case 3:l[u].fn.call(l[u].context,e,r);break;default:if(!h)for(p=1,h=new Array(c-1);c>p;p++)h[p-1]=arguments[p];l[u].fn.apply(l[u].context,h)}}return!0},n.prototype.on=function(t,e,r){var n=new i(e,r||this),s=o?o+t:t;return this._events||(this._events=o?{}:Object.create(null)),this._events[s]?this._events[s].fn?this._events[s]=[this._events[s],n]:this._events[s].push(n):this._events[s]=n,this},n.prototype.once=function(t,e,r){var n=new i(e,r||this,!0),s=o?o+t:t;return this._events||(this._events=o?{}:Object.create(null)),this._events[s]?this._events[s].fn?this._events[s]=[this._events[s],n]:this._events[s].push(n):this._events[s]=n,this},n.prototype.removeListener=function(t,e,r,i){var n=o?o+t:t;if(!this._events||!this._events[n])return this;var s=this._events[n],a=[];if(e)if(s.fn)(s.fn!==e||i&&!s.once||r&&s.context!==r)&&a.push(s);else for(var h=0,u=s.length;u>h;h++)(s[h].fn!==e||i&&!s[h].once||r&&s[h].context!==r)&&a.push(s[h]);return a.length?this._events[n]=1===a.length?a[0]:a:delete this._events[n],this},n.prototype.removeAllListeners=function(t){return this._events?(t?delete this._events[o?o+t:t]:this._events=o?{}:Object.create(null),this):this},n.prototype.off=n.prototype.removeListener,n.prototype.addListener=n.prototype.on,n.prototype.setMaxListeners=function(){return this},n.prefixed=o,"undefined"!=typeof e&&(e.exports=n)},{}],26:[function(t,e,r){"use strict";function i(t){if(null===t||void 0===t)throw new TypeError("Object.assign cannot be called with null or undefined");return Object(t)}var n=Object.prototype.hasOwnProperty,o=Object.prototype.propertyIsEnumerable;e.exports=Object.assign||function(t,e){for(var r,s,a=i(t),h=1;h=t.length&&r())}if(r=r||function(){},!t.length)return r();var o=0;u(t,function(t){e(t,i(n))})},s.forEach=s.each,s.eachSeries=function(t,e,r){if(r=r||function(){},!t.length)return r();var i=0,n=function(){e(t[i],function(e){e?(r(e),r=function(){}):(i+=1,i>=t.length?r():n())})};n()},s.forEachSeries=s.eachSeries,s.eachLimit=function(t,e,r,i){var n=d(e);n.apply(null,[t,r,i])},s.forEachLimit=s.eachLimit;var d=function(t){return function(e,r,i){if(i=i||function(){},!e.length||0>=t)return i();var n=0,o=0,s=0;!function a(){if(n>=e.length)return i();for(;t>s&&o=e.length?i():a())})}()}},f=function(t){return function(){var e=Array.prototype.slice.call(arguments);return t.apply(null,[s.each].concat(e))}},v=function(t,e){return function(){var r=Array.prototype.slice.call(arguments);return e.apply(null,[d(t)].concat(r))}},g=function(t){return function(){var e=Array.prototype.slice.call(arguments);return t.apply(null,[s.eachSeries].concat(e))}},m=function(t,e,r,i){if(e=l(e,function(t,e){return{index:e,value:t}}),i){var n=[];t(e,function(t,e){r(t.value,function(r,i){n[t.index]=i,e(r)})},function(t){i(t,n)})}else t(e,function(t,e){r(t.value,function(t){e(t)})})};s.map=f(m),s.mapSeries=g(m),s.mapLimit=function(t,e,r,i){return y(e)(t,r,i)};var y=function(t){return v(t,m)};s.reduce=function(t,e,r,i){s.eachSeries(t,function(t,i){r(e,t,function(t,r){e=r,i(t)})},function(t){i(t,e)})},s.inject=s.reduce,s.foldl=s.reduce,s.reduceRight=function(t,e,r,i){var n=l(t,function(t){return t}).reverse();s.reduce(n,e,r,i)},s.foldr=s.reduceRight;var x=function(t,e,r,i){var n=[];e=l(e,function(t,e){return{index:e,value:t}}),t(e,function(t,e){r(t.value,function(r){r&&n.push(t),e()})},function(t){i(l(n.sort(function(t,e){return t.index-e.index}),function(t){return t.value}))})};s.filter=f(x),s.filterSeries=g(x),s.select=s.filter,s.selectSeries=s.filterSeries;var b=function(t,e,r,i){var n=[];e=l(e,function(t,e){return{index:e,value:t}}),t(e,function(t,e){r(t.value,function(r){r||n.push(t),e()})},function(t){i(l(n.sort(function(t,e){return t.index-e.index}),function(t){return t.value}))})};s.reject=f(b),s.rejectSeries=g(b);var _=function(t,e,r,i){t(e,function(t,e){r(t,function(r){r?(i(t),i=function(){}):e()})},function(t){i()})};s.detect=f(_),s.detectSeries=g(_),s.some=function(t,e,r){s.each(t,function(t,i){e(t,function(t){t&&(r(!0),r=function(){}),i()})},function(t){r(!1)})},s.any=s.some,s.every=function(t,e,r){s.each(t,function(t,i){e(t,function(t){t||(r(!1),r=function(){}),i()})},function(t){r(!0)})},s.all=s.every,s.sortBy=function(t,e,r){s.map(t,function(t,r){e(t,function(e,i){e?r(e):r(null,{value:t,criteria:i})})},function(t,e){if(t)return r(t);var i=function(t,e){var r=t.criteria,i=e.criteria;return i>r?-1:r>i?1:0};r(null,l(e.sort(i),function(t){return t.value}))})},s.auto=function(t,e){e=e||function(){};var r=p(t),i=r.length;if(!i)return e();var n={},o=[],a=function(t){o.unshift(t)},l=function(t){for(var e=0;ei;){var o=i+(n-i+1>>>1);r(e,t[o])>=0?i=o:n=o-1}return i}function n(t,e,n,o){return t.started||(t.started=!0),h(e)||(e=[e]),0==e.length?s.setImmediate(function(){t.drain&&t.drain()}):void u(e,function(e){var a={data:e,priority:n,callback:"function"==typeof o?o:null};t.tasks.splice(i(t.tasks,a,r)+1,0,a),t.saturated&&t.tasks.length===t.concurrency&&t.saturated(),s.setImmediate(t.process)})}var o=s.queue(t,e);return o.push=function(t,e,r){n(o,t,e,r)},delete o.unshift,o},s.cargo=function(t,e){var r=!1,i=[],n={tasks:i,payload:e,saturated:null,empty:null,drain:null,drained:!0,push:function(t,r){h(t)||(t=[t]),u(t,function(t){i.push({data:t,callback:"function"==typeof r?r:null}),n.drained=!1,n.saturated&&i.length===e&&n.saturated()}),s.setImmediate(n.process)},process:function o(){if(!r){if(0===i.length)return n.drain&&!n.drained&&n.drain(),void(n.drained=!0);var s="number"==typeof e?i.splice(0,e):i.splice(0,i.length),a=l(s,function(t){return t.data});n.empty&&n.empty(),r=!0,t(a,function(){r=!1;var t=arguments;u(s,function(e){e.callback&&e.callback.apply(null,t)}),o()})}},length:function(){return i.length},running:function(){return r}};return n};var S=function(t){return function(e){var r=Array.prototype.slice.call(arguments,1);e.apply(null,r.concat([function(e){var r=Array.prototype.slice.call(arguments,1);"undefined"!=typeof console&&(e?console.error&&console.error(e):console[t]&&u(r,function(e){console[t](e)}))}]))}};s.log=S("log"),s.dir=S("dir"),s.memoize=function(t,e){var r={},i={};e=e||function(t){return t};var n=function(){var n=Array.prototype.slice.call(arguments),o=n.pop(),a=e.apply(null,n);a in r?s.nextTick(function(){o.apply(null,r[a])}):a in i?i[a].push(o):(i[a]=[o],t.apply(null,n.concat([function(){r[a]=arguments;var t=i[a];delete i[a];for(var e=0,n=t.length;n>e;e++)t[e].apply(null,arguments)}])))};return n.memo=r,n.unmemoized=t,n},s.unmemoize=function(t){return function(){return(t.unmemoized||t).apply(null,arguments)}},s.times=function(t,e,r){for(var i=[],n=0;t>n;n++)i.push(n);return s.map(i,e,r)},s.timesSeries=function(t,e,r){for(var i=[],n=0;t>n;n++)i.push(n);return s.mapSeries(i,e,r)},s.seq=function(){var t=arguments;return function(){var e=this,r=Array.prototype.slice.call(arguments),i=r.pop();s.reduce(t,r,function(t,r,i){r.apply(e,t.concat([function(){var t=arguments[0],e=Array.prototype.slice.call(arguments,1);i(t,e)}]))},function(t,r){i.apply(e,[t].concat(r))})}},s.compose=function(){return s.seq.apply(null,Array.prototype.reverse.call(arguments))};var w=function(t,e){var r=function(){var r=this,i=Array.prototype.slice.call(arguments),n=i.pop();return t(e,function(t,e){t.apply(r,i.concat([e]))},n)};if(arguments.length>2){var i=Array.prototype.slice.call(arguments,2);return r.apply(this,i)}return r};s.applyEach=f(w),s.applyEachSeries=g(w),s.forever=function(t,e){function r(i){if(i){if(e)return e(i);throw i}t(r)}r()},"undefined"!=typeof r&&r.exports?r.exports=s:"undefined"!=typeof t&&t.amd?t([],function(){return s}):n.async=s}()}).call(this,e("_process"))},{_process:18}],28:[function(t,e,r){function i(t,e){a.call(this),e=e||10,this.baseUrl=t||"",this.progress=0,this.loading=!1,this._progressChunk=0,this._beforeMiddleware=[],this._afterMiddleware=[],this._boundLoadResource=this._loadResource.bind(this),this._boundOnLoad=this._onLoad.bind(this),this._buffer=[],this._numToLoad=0,this._queue=n.queue(this._boundLoadResource,e),this.resources={}}var n=t("async"),o=t("url"),s=t("./Resource"),a=t("eventemitter3");i.prototype=Object.create(a.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.add=i.prototype.enqueue=function(t,e,r,i){if(Array.isArray(t)){for(var n=0;n0)if(this.xhrType===i.XHR_RESPONSE_TYPE.TEXT)this.data=t.responseText;else if(this.xhrType===i.XHR_RESPONSE_TYPE.JSON)try{this.data=JSON.parse(t.responseText),this.isJson=!0}catch(r){this.error=new Error("Error trying to parse loaded json:",r)}else if(this.xhrType===i.XHR_RESPONSE_TYPE.DOCUMENT)try{if(window.DOMParser){var n=new DOMParser;this.data=n.parseFromString(t.responseText,"text/xml")}else{var o=document.createElement("div");o.innerHTML=t.responseText,this.data=o}this.isXml=!0}catch(r){this.error=new Error("Error trying to parse loaded xml:",r)}else this.data=t.response||t.responseText;else this.error=new Error("["+t.status+"]"+t.statusText+":"+t.responseURL);this.complete()},i.prototype._determineCrossOrigin=function(t,e){if(0===t.indexOf("data:"))return"";e=e||window.location,u||(u=document.createElement("a")),u.href=t,t=a.parse(u.href);var r=!t.port&&""===e.port||t.port===e.port;return t.hostname===e.hostname&&r&&t.protocol===e.protocol?"":"anonymous"},i.prototype._determineXhrType=function(){return i._xhrTypeMap[this._getExtension()]||i.XHR_RESPONSE_TYPE.TEXT},i.prototype._determineLoadType=function(){return i._loadTypeMap[this._getExtension()]||i.LOAD_TYPE.XHR},i.prototype._getExtension=function(){var t,e=this.url;if(this.isDataUrl){var r=e.indexOf("/");t=e.substring(r+1,e.indexOf(";",r))}else{var i=e.indexOf("?");-1!==i&&(e=e.substring(0,i)),t=e.substring(e.lastIndexOf(".")+1)}return t},i.prototype._getMimeFromXhrType=function(t){switch(t){case i.XHR_RESPONSE_TYPE.BUFFER:return"application/octet-binary";case i.XHR_RESPONSE_TYPE.BLOB:return"application/blob";case i.XHR_RESPONSE_TYPE.DOCUMENT:return"application/xml";case i.XHR_RESPONSE_TYPE.JSON:return"application/json";case i.XHR_RESPONSE_TYPE.DEFAULT:case i.XHR_RESPONSE_TYPE.TEXT:default:return"text/plain"}},i.LOAD_TYPE={XHR:1,IMAGE:2,AUDIO:3,VIDEO:4},i.XHR_READY_STATE={UNSENT:0,OPENED:1,HEADERS_RECEIVED:2,LOADING:3,DONE:4},i.XHR_RESPONSE_TYPE={DEFAULT:"text",BUFFER:"arraybuffer",BLOB:"blob",DOCUMENT:"document",JSON:"json",TEXT:"text"},i._loadTypeMap={gif:i.LOAD_TYPE.IMAGE,png:i.LOAD_TYPE.IMAGE,bmp:i.LOAD_TYPE.IMAGE,jpg:i.LOAD_TYPE.IMAGE,jpeg:i.LOAD_TYPE.IMAGE,tif:i.LOAD_TYPE.IMAGE,tiff:i.LOAD_TYPE.IMAGE,webp:i.LOAD_TYPE.IMAGE,tga:i.LOAD_TYPE.IMAGE},i._xhrTypeMap={xhtml:i.XHR_RESPONSE_TYPE.DOCUMENT,html:i.XHR_RESPONSE_TYPE.DOCUMENT,htm:i.XHR_RESPONSE_TYPE.DOCUMENT,xml:i.XHR_RESPONSE_TYPE.DOCUMENT,tmx:i.XHR_RESPONSE_TYPE.DOCUMENT,tsx:i.XHR_RESPONSE_TYPE.DOCUMENT,svg:i.XHR_RESPONSE_TYPE.DOCUMENT,gif:i.XHR_RESPONSE_TYPE.BLOB,png:i.XHR_RESPONSE_TYPE.BLOB,bmp:i.XHR_RESPONSE_TYPE.BLOB,jpg:i.XHR_RESPONSE_TYPE.BLOB,jpeg:i.XHR_RESPONSE_TYPE.BLOB,tif:i.XHR_RESPONSE_TYPE.BLOB,tiff:i.XHR_RESPONSE_TYPE.BLOB,webp:i.XHR_RESPONSE_TYPE.BLOB,tga:i.XHR_RESPONSE_TYPE.BLOB,json:i.XHR_RESPONSE_TYPE.JSON,text:i.XHR_RESPONSE_TYPE.TEXT,txt:i.XHR_RESPONSE_TYPE.TEXT},i.setExtensionLoadType=function(t,e){o(i._loadTypeMap,t,e)},i.setExtensionXhrType=function(t,e){o(i._xhrTypeMap,t,e)}},{eventemitter3:25,url:23}],30:[function(t,e,r){e.exports={_keyStr:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",encodeBinary:function(t){for(var e,r="",i=new Array(4),n=0,o=0,s=0;n>2,i[1]=(3&e[0])<<4|e[1]>>4,i[2]=(15&e[1])<<2|e[2]>>6,i[3]=63&e[2],s=n-(t.length-1)){case 2:i[3]=64,i[2]=64;break;case 1:i[3]=64}for(o=0;o","Richard Davey "],main:"./src/index.js",homepage:"http://goodboydigital.com/",bugs:"https://github.com/pixijs/pixi.js/issues",license:"MIT",repository:{type:"git",url:"https://github.com/pixijs/pixi.js.git"},scripts:{start:"gulp && gulp watch",test:"gulp && testem ci",build:"gulp",docs:"jsdoc -c ./gulp/util/jsdoc.conf.json -R README.md"},files:["bin/","src/","CONTRIBUTING.md","LICENSE","package.json","README.md"],dependencies:{async:"^1.5.0",brfs:"^1.4.1",earcut:"^2.0.7",eventemitter3:"^1.1.1","object-assign":"^4.0.1","pixi-gl-core":"git+https://github.com/GoodBoyDigital/pixi-gl-core.git","resource-loader":"^1.6.4"},devDependencies:{browserify:"^11.1.0",chai:"^3.2.0",del:"^2.0.2",gulp:"^3.9.0","gulp-cached":"^1.1.0","gulp-concat":"^2.6.0","gulp-debug":"^2.1.0","gulp-header":"^1.7.1","gulp-jshint":"^1.11.2","gulp-mirror":"^0.4.0","gulp-plumber":"^1.0.1","gulp-rename":"^1.2.2","gulp-sourcemaps":"^1.5.2","gulp-uglify":"^1.4.1","gulp-util":"^3.0.6","jaguarjs-jsdoc":"git+https://github.com/davidshimjs/jaguarjs-jsdoc.git",jsdoc:"^3.3.2","jshint-summary":"^0.4.0",minimist:"^1.2.0",mocha:"^2.3.2","require-dir":"^0.3.0","run-sequence":"^1.1.2",testem:"^0.9.4","vinyl-buffer":"^1.0.0","vinyl-source-stream":"^1.1.0",watchify:"^3.4.0"},browserify:{transform:["brfs"]}}},{}],35:[function(t,e,r){function i(t){var e=document.createElement("div");e.style.width="100px",e.style.height="100px",e.style.position="absolute",e.style.top=0,e.style.left=0,e.style.zIndex=2,this.div=e,this.pool=[],this.renderId=0,this.debug=!1,this.renderer=t,this.children=[],this._onKeyDown=this._onKeyDown.bind(this),this._onMouseMove=this._onMouseMove.bind(this),this.isActive=!1,window.addEventListener("keydown",this._onKeyDown,!1)}var n=t("../core");Object.assign(n.DisplayObject.prototype,t("./accessibleTarget")),i.prototype.constructor=i,e.exports=i,i.prototype.activate=function(){this.isActive||(this.isActive=!0,window.document.addEventListener("mousemove",this._onMouseMove,!0),window.removeEventListener("keydown",this._onKeyDown,!1),this.renderer.on("postrender",this.update,this),this.renderer.view.parentNode.appendChild(this.div))},i.prototype.deactivate=function(){this.isActive&&(this.isActive=!1,window.document.removeEventListener("mousemove",this._onMouseMove),window.addEventListener("keydown",this._onKeyDown,!1),this.renderer.off("postrender",this.update),this.div.parentNode.removeChild(this.div))},i.prototype.updateAccessibleObjects=function(t){if(t.visible){t.accessible&&t.interactive&&(t._accessibleActive||this.addChild(t),t.renderId=this.renderId);for(var e=t.children,r=e.length-1;r>=0;r--)this.updateAccessibleObjects(e[r])}},i.prototype.update=function(){this.updateAccessibleObjects(this.renderer._lastObjectRendered);var t=this.renderer.view.getBoundingClientRect(),e=t.width/this.renderer.width,r=t.height/this.renderer.height,i=this.div;i.style.left=t.left+"px",i.style.top=t.top+"px",i.style.width=this.renderer.width+"px",i.style.height=this.renderer.height+"px";for(var o=0;othis.renderer.width&&(t.width=this.renderer.width-t.x),t.y+t.height>this.renderer.height&&(t.height=this.renderer.height-t.y)},i.prototype.addChild=function(t){var e=this.pool.pop();e||(e=document.createElement("button"),e.style.width="100px",e.style.height="100px",e.style.backgroundColor=this.debug?"rgba(255,0,0,0.5)":"transparent",e.style.position="absolute",e.style.zIndex=2,e.style.borderStyle="none",e.addEventListener("click",this._onClick.bind(this)),e.addEventListener("focus",this._onFocus.bind(this)),e.addEventListener("focusout",this._onFocusOut.bind(this))),e.title=t.accessibleTitle||"displayObject "+this.tabIndex,t._accessibleActive=!0,t._accessibleDiv=e,e.displayObject=t,this.children.push(t),this.div.appendChild(t._accessibleDiv),t._accessibleDiv.tabIndex=t.tabIndex},i.prototype._onClick=function(t){var e=this.renderer.plugins.interaction;e.dispatchEvent(t.target.displayObject,"click",e.eventData)},i.prototype._onFocus=function(t){var e=this.renderer.plugins.interaction;e.dispatchEvent(t.target.displayObject,"mouseover",e.eventData)},i.prototype._onFocusOut=function(t){var e=this.renderer.plugins.interaction;e.dispatchEvent(t.target.displayObject,"mouseout",e.eventData)},i.prototype._onKeyDown=function(t){9===t.keyCode&&this.activate()},i.prototype._onMouseMove=function(){this.deactivate()},i.prototype.destroy=function(){this.div=null;for(var t=0;t1)for(var r=0;e>r;r++)this.addChild(arguments[r]);else t.parent&&t.parent.removeChild(t),t.parent=this,this.children.push(t),this.onChildrenChange(this.children.length-1),t.emit("added",this);return t},i.prototype.addChildAt=function(t,e){if(e>=0&&e<=this.children.length)return t.parent&&t.parent.removeChild(t),t.parent=this,this.children.splice(e,0,t),this.onChildrenChange(e),t.emit("added",this),t;throw new Error(t+"addChildAt: The index "+e+" supplied is out of bounds "+this.children.length)},i.prototype.swapChildren=function(t,e){if(t!==e){var r=this.getChildIndex(t),i=this.getChildIndex(e);if(0>r||0>i)throw new Error("swapChildren: Both the supplied DisplayObjects must be children of the caller.");this.children[r]=e,this.children[i]=t,this.onChildrenChange(i>r?r:i)}},i.prototype.getChildIndex=function(t){var e=this.children.indexOf(t);if(-1===e)throw new Error("The supplied DisplayObject must be a child of the caller");return e},i.prototype.setChildIndex=function(t,e){if(0>e||e>=this.children.length)throw new Error("The supplied index is out of bounds");var r=this.getChildIndex(t);o.removeItems(this.children,r,1),this.children.splice(e,0,t),this.onChildrenChange(e)},i.prototype.getChildAt=function(t){if(0>t||t>=this.children.length)throw new Error("getChildAt: Supplied index "+t+" does not exist in the child list, or the supplied DisplayObject is not a child of the caller");return this.children[t]},i.prototype.removeChild=function(t){var e=arguments.length;if(e>1)for(var r=0;e>r;r++)this.removeChild(arguments[r]);else{var i=this.children.indexOf(t);if(-1===i)return;t.parent=null,o.removeItems(this.children,i,1),this.onChildrenChange(i),t.emit("removed",this)}return t},i.prototype.removeChildAt=function(t){var e=this.getChildAt(t);return e.parent=null,o.removeItems(this.children,t,1),this.onChildrenChange(t),e.emit("removed",this),e},i.prototype.removeChildren=function(t,e){var r,i,n=t||0,o="number"==typeof e?e:this.children.length,s=o-n;if(s>0&&o>=s){for(r=this.children.splice(n,s),i=0;it;++t)this.children[t].updateTransform();this.dirtyTransform=!1}},i.prototype.containerUpdateTransform=i.prototype.updateTransform,i.prototype.getBounds=function(){if(!this._currentBounds){if(0===this.children.length)return n.Rectangle.EMPTY;for(var t,e,r,i=1/0,o=1/0,s=-(1/0),a=-(1/0),h=!1,u=0,l=this.children.length;l>u;++u){var c=this.children[u];c.visible&&(h=!0,t=this.children[u].getBounds(),i=ie?s:e,a=a>r?a:r)}if(!h)return n.Rectangle.EMPTY;var p=this._bounds;p.x=i,p.y=o,p.width=s-i,p.height=a-o,this._currentBounds=p}return this._currentBounds},i.prototype.containerGetBounds=i.prototype.getBounds,i.prototype.getLocalBounds=function(){var t=this.worldTransform;this.worldTransform=n.Matrix.IDENTITY;for(var e=0,r=this.children.length;r>e;++e)this.children[e].updateTransform();return this.worldTransform=t,this._currentBounds=null,this.getBounds(n.Matrix.IDENTITY)},i.prototype.renderWebGL=function(t){if(this.visible&&!(this.worldAlpha<=0)&&this.renderable){var e,r;if(this._mask||this._filters){for(t.currentRenderer.flush(),this._filters&&this._filters.length&&t.filterManager.pushFilter(this,this._filters),this._mask&&t.maskManager.pushMask(this,this._mask),t.currentRenderer.start(),this._renderWebGL(t),e=0,r=this.children.length;r>e;e++)this.children[e].renderWebGL(t);t.currentRenderer.flush(),this._mask&&t.maskManager.popMask(this,this._mask),this._filters&&t.filterManager.popFilter(),t.currentRenderer.start()}else for(this._renderWebGL(t),e=0,r=this.children.length;r>e;++e)this.children[e].renderWebGL(t)}},i.prototype._renderWebGL=function(t){},i.prototype._renderCanvas=function(t){},i.prototype.renderCanvas=function(t){if(this.visible&&!(this.alpha<=0)&&this.renderable){this._mask&&t.maskManager.pushMask(this._mask,t),this._renderCanvas(t);for(var e=0,r=this.children.length;r>e;++e)this.children[e].renderCanvas(t);this._mask&&t.maskManager.popMask(t)}},i.prototype.destroy=function(t){if(s.prototype.destroy.call(this),t)for(var e=0,r=this.children.length;r>e;++e)this.children[e].destroy(t);this.removeChildren(),this.children=null}},{"../math":55,"../textures/RenderTexture":98,"../utils":105,"./DisplayObject":40}],40:[function(t,e,r){function i(){s.call(this),this.position=new n.Point,this._position=new u(this),this.scale=new n.Point(1,1),this.pivot=new n.Point(0,0),this.skew=new n.Point(0,0),this._rotation=0,this.alpha=1,this.visible=!0,this.renderable=!0,this.parent=null,this.worldAlpha=1,this.worldTransform=new n.Matrix,this.localTransform=new n.Matrix,this.filterArea=null,this._sr=0,this._cr=1,this._bounds=new n.Rectangle(0,0,1,1),this._currentBounds=null,this._mask=null,this.dirtyTransform=!0}var n=t("../math"),o=t("../textures/RenderTexture"),s=t("eventemitter3"),a=(t("../const"),new n.Matrix),h={worldTransform:new n.Matrix,worldAlpha:1,children:[]};i.prototype=Object.create(s.prototype),i.prototype.constructor=i,e.exports=i;var u=function(t){this.doc=t,this.x=0,this.y=0};Object.defineProperties(u.prototype,{x:{get:function(){return this.doc.position.x},set:function(t){this.doc.position.x=t,this.doc.dirtyTransform=!0}},y:{get:function(){return this.doc.posiiton.y},set:function(t){this.doc.position.y=t,this.doc.dirtyTransform=!0}}}),Object.defineProperties(i.prototype,{x:{get:function(){return this.position.x},set:function(t){this.position.x=t,this.dirtyTransform=!0}},y:{get:function(){return this.position.y},set:function(t){this.position.y=t,this.dirtyTransform=!0}},scaleX:{get:function(){return this.scale.x},set:function(t){this.scale.x=t,this.dirtyTransform=!0}},scaleY:{get:function(){return this.scale.y},set:function(t){this.scale.y=t,this.dirtyTransform=!0}},rotation:{get:function(){return this._rotation},set:function(t){this._rotation=t,this.dirtyTransform=!0,this._sr=Math.sin(t),this._cr=Math.cos(t)}},scaleY:{get:function(){return this.scale.y},set:function(t){this.scale.y=t,this.dirtyTransform=!0}},worldVisible:{get:function(){var t=this;do{if(!t.visible)return!1;t=t.parent}while(t);return!0}},mask:{get:function(){return this._mask},set:function(t){this._mask&&(this._mask.renderable=!0),this._mask=t,this._mask&&(this._mask.renderable=!1)}},filters:{get:function(){return this._filters&&this._filters.slice()},set:function(t){this._filters=t&&t.slice()}}}),i.prototype.updateTransform=function(){var t=this.parent.worldTransform,e=this.worldTransform,r=this.localTransform;this.dirtyTransform&&(r.a=this._cr*this.scale.x,r.b=this._sr*this.scale.x,r.c=-this._sr*this.scale.y,r.d=this._cr*this.scale.y,r.tx=this.position.x-(this.pivot.x*r.a+this.pivot.y*r.c),r.ty=this.position.y-(this.pivot.x*r.b+this.pivot.y*r.d)),(this.dirtyTransform||this.parent.dirtyTransform)&&(e.a=r.a*t.a+r.b*t.c,e.b=r.a*t.b+r.b*t.d,e.c=r.c*t.a+r.d*t.c,e.d=r.c*t.b+r.d*t.d,e.tx=r.tx*t.a+r.ty*t.c+t.tx,e.ty=r.tx*t.b+r.ty*t.d+t.ty,this._currentBounds=null),this.worldAlpha=this.alpha*this.parent.worldAlpha},i.prototype.displayObjectUpdateTransform=i.prototype.updateTransform,i.prototype.getBounds=function(t){return n.Rectangle.EMPTY},i.prototype.getLocalBounds=function(){return this.getBounds(n.Matrix.IDENTITY)},i.prototype.toGlobal=function(t){return this.parent?this.displayObjectUpdateTransform():(this.parent=h,this.displayObjectUpdateTransform(),this.parent=null),this.worldTransform.apply(t)},i.prototype.toLocal=function(t,e,r){return e&&(t=e.toGlobal(t)),this.parent?this.displayObjectUpdateTransform():(this.parent=h,this.displayObjectUpdateTransform(),this.parent=null),this.worldTransform.applyInverse(t,r)},i.prototype.renderWebGL=function(t){},i.prototype.renderCanvas=function(t){},i.prototype.generateTexture=function(t,e,r){var i=this.getLocalBounds(),n=new o(t,0|i.width,0|i.height,e,r);return a.tx=-i.x,a.ty=-i.y,n.render(this,a),n},i.prototype.setParent=function(t){if(!t||!t.addChild)throw new Error("setParent: Argument must be a Container");return t.addChild(this),t},i.prototype.setTransform=function(t,e,r,i,n,o,s,a,h){return this.position.x=t||0,this.position.y=e||0,this.scale.x=r?r:1,this.scale.y=i?i:1,this.rotation=n||0,this.skew.x=o||0,this.skew.y=s||0,this.pivot.x=a||0,this.pivot.y=h||0,this.dirtyTransform=!0,this},i.prototype.destroy=function(){this.position=null,this.scale=null,this.pivot=null,this.skew=null,this.parent=null,this._bounds=null,this._currentBounds=null,this._mask=null,this.worldTransform=null,this.filterArea=null}},{"../const":38,"../math":55,"../textures/RenderTexture":98,eventemitter3:25}],41:[function(t,e,r){function i(){n.call(this),this.fillAlpha=1,this.lineWidth=0,this.lineColor=0,this.graphicsData=[],this.tint=16777215,this._prevTint=16777215,this.blendMode=l.BLEND_MODES.NORMAL,this.currentPath=null,this._webGL={},this.isMask=!1,this.boundsPadding=0,this._localBounds=new u.Rectangle(0,0,1,1),this.dirty=!0,this.glDirty=!1,this.boundsDirty=!0,this.cachedSpriteDirty=!1}var n=t("../display/Container"),o=t("../textures/Texture"),s=t("../renderers/canvas/utils/CanvasBuffer"),a=t("../renderers/canvas/utils/CanvasGraphics"),h=t("./GraphicsData"),u=t("../math"),l=t("../const"),c=new u.Point;i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.clone=function(){var t=new i;t.renderable=this.renderable,t.fillAlpha=this.fillAlpha,t.lineWidth=this.lineWidth,t.lineColor=this.lineColor,t.tint=this.tint,t.blendMode=this.blendMode,t.isMask=this.isMask,t.boundsPadding=this.boundsPadding,t.dirty=!0,t.glDirty=!0,t.cachedSpriteDirty=this.cachedSpriteDirty;for(var e=0;e=c;++c)l=c/s,n=h+(t-h)*l,o=u+(e-u)*l,a.push(n+(t+(r-t)*l-n)*l,o+(e+(i-e)*l-o)*l);return this.dirty=this.boundsDirty=!0,this},i.prototype.bezierCurveTo=function(t,e,r,i,n,o){this.currentPath?0===this.currentPath.shape.points.length&&(this.currentPath.shape.points=[0,0]):this.moveTo(0,0);for(var s,a,h,u,l,c=20,p=this.currentPath.shape.points,d=p[p.length-2],f=p[p.length-1],v=0,g=1;c>=g;++g)v=g/c,s=1-v,a=s*s,h=a*s,u=v*v,l=u*v,p.push(h*d+3*a*v*t+3*s*u*r+l*n,h*f+3*a*v*e+3*s*u*i+l*o);return this.dirty=this.boundsDirty=!0,this},i.prototype.arcTo=function(t,e,r,i,n){this.currentPath?0===this.currentPath.shape.points.length&&this.currentPath.shape.points.push(t,e):this.moveTo(t,e);var o=this.currentPath.shape.points,s=o[o.length-2],a=o[o.length-1],h=a-e,u=s-t,l=i-e,c=r-t,p=Math.abs(h*c-u*l);if(1e-8>p||0===n)(o[o.length-2]!==t||o[o.length-1]!==e)&&o.push(t,e);else{var d=h*h+u*u,f=l*l+c*c,v=h*l+u*c,g=n*Math.sqrt(d)/p,m=n*Math.sqrt(f)/p,y=g*v/d,x=m*v/f,b=g*c+m*u,_=g*l+m*h,T=u*(m+y),E=h*(m+y),S=c*(g+x),w=l*(g+x),C=Math.atan2(E-_,T-b),A=Math.atan2(w-_,S-b);this.arc(b+t,_+e,n,C,A,u*l>c*h)}return this.dirty=this.boundsDirty=!0,this},i.prototype.arc=function(t,e,r,i,n,o){if(o=o||!1,i===n)return this;!o&&i>=n?n+=2*Math.PI:o&&n>=i&&(i+=2*Math.PI);var s=o?-1*(i-n):n-i,a=40*Math.ceil(Math.abs(s)/(2*Math.PI));if(0===s)return this;var h=t+Math.cos(i)*r,u=e+Math.sin(i)*r;this.currentPath?this.currentPath.shape.points.push(h,u):this.moveTo(h,u);for(var l=this.currentPath.shape.points,c=s/(2*a),p=2*c,d=Math.cos(c),f=Math.sin(c),v=a-1,g=v%1/v,m=0;v>=m;m++){var y=m+g*m,x=c+i+p*y,b=Math.cos(x),_=-Math.sin(x);l.push((d*b+f*_)*r+t,(d*-_+f*b)*r+e)}return this.dirty=this.boundsDirty=!0,this},i.prototype.beginFill=function(t,e){return this.filling=!0,this.fillColor=t||0,this.fillAlpha=void 0===e?1:e,this.currentPath&&this.currentPath.shape.points.length<=2&&(this.currentPath.fill=this.filling,this.currentPath.fillColor=this.fillColor,this.currentPath.fillAlpha=this.fillAlpha),this},i.prototype.endFill=function(){return this.filling=!1,this.fillColor=null,this.fillAlpha=1,this},i.prototype.drawRect=function(t,e,r,i){return this.drawShape(new u.Rectangle(t,e,r,i)),this},i.prototype.drawRoundedRect=function(t,e,r,i,n){return this.drawShape(new u.RoundedRectangle(t,e,r,i,n)),this},i.prototype.drawCircle=function(t,e,r){return this.drawShape(new u.Circle(t,e,r)),this},i.prototype.drawEllipse=function(t,e,r,i){return this.drawShape(new u.Ellipse(t,e,r,i)),this},i.prototype.drawPolygon=function(t){var e=t,r=!0;if(e instanceof u.Polygon&&(r=e.closed,e=e.points),!Array.isArray(e)){e=new Array(arguments.length);for(var i=0;ig?g:S,S=S>y?y:S,S=S>b?b:S,w=w>m?m:w,w=w>x?x:w,w=w>_?_:w,T=g>T?g:T,T=y>T?y:T,T=b>T?b:T,E=m>E?m:E,E=x>E?x:E,E=_>E?_:E,this._bounds.x=S,this._bounds.width=T-S,this._bounds.y=w,this._bounds.height=E-w,this._currentBounds=this._bounds}return this._currentBounds},i.prototype.containsPoint=function(t){this.worldTransform.applyInverse(t,c); +for(var e=this.graphicsData,r=0;rs?s:t,e=s+h>e?s+h:e,r=r>a?a:r,i=a+u>i?a+u:i;else if(d===l.SHAPES.CIRC)s=n.x,a=n.y,h=n.radius+f/2,u=n.radius+f/2,t=t>s-h?s-h:t,e=s+h>e?s+h:e,r=r>a-u?a-u:r,i=a+u>i?a+u:i;else if(d===l.SHAPES.ELIP)s=n.x,a=n.y,h=n.width+f/2,u=n.height+f/2,t=t>s-h?s-h:t,e=s+h>e?s+h:e,r=r>a-u?a-u:r,i=a+u>i?a+u:i;else{o=n.points;for(var v=0;vs-f?s-f:t,e=s+f>e?s+f:e,r=r>a-f?a-f:r,i=a+f>i?a+f:i}}else t=0,e=0,r=0,i=0;var g=this.boundsPadding;this._localBounds.x=t-g,this._localBounds.width=e-t+2*g,this._localBounds.y=r-g,this._localBounds.height=i-r+2*g},i.prototype.drawShape=function(t){this.currentPath&&this.currentPath.shape.points.length<=2&&this.graphicsData.pop(),this.currentPath=null;var e=new h(this.lineWidth,this.lineColor,this.lineAlpha,this.fillColor,this.fillAlpha,this.filling,t);return this.graphicsData.push(e),e.type===l.SHAPES.POLY&&(e.shape.closed=e.shape.closed||this.filling,this.currentPath=e),this.dirty=this.boundsDirty=!0,e},i.prototype.destroy=function(){n.prototype.destroy.apply(this,arguments);for(var t=0;ts;s++)e=o.data[s],1===o.data[s].mode||(shader=this.primitiveShader,r.bindShader(shader),shader.uniforms.translationMatrix=t.worldTransform.toArray(!0),shader.uniforms.tint=n.hex2rgb(t.tint),shader.uniforms.alpha=t.worldAlpha,i.bindBuffer(i.ARRAY_BUFFER,e.buffer),shader=this.primitiveShader,shader.attributes.aVertexPosition.pointer(i.FLOAT,!1,24,0),shader.attributes.aColor.pointer(i.FLOAT,!1,24,8),i.enableVertexAttribArray(shader.attributes.aVertexPosition.location),i.enableVertexAttribArray(shader.attributes.aColor.location),i.bindBuffer(i.ELEMENT_ARRAY_BUFFER,e.indexBuffer),i.drawElements(i.TRIANGLE_STRIP,e.indices.length,i.UNSIGNED_SHORT,0)),r.drawCount++},i.prototype.updateGraphics=function(t){var e=this.renderer.gl,r=t._webGL[e.id];r||(r=t._webGL[e.id]={lastIndex:0,data:[],gl:e}),t.dirty=!1;var i;if(t.clearDirty){for(t.clearDirty=!1,i=0;i=6)if(a.points.length<2*this.maximumSimplePolySize){s=this.switchMode(r,0);var h=buildPoly(a,s);h||(s=this.switchMode(r,1),buildComplexPoly(a,s))}else s=this.switchMode(r,1),buildComplexPoly(a,s);a.lineWidth>0&&(s=this.switchMode(r,0),l(a,s))}else s=this.switchMode(r,0),a.type===o.SHAPES.RECT?buildRectangle(a,s):a.type===o.SHAPES.CIRC||a.type===o.SHAPES.ELIP?buildCircle(a,s):a.type===o.SHAPES.RREC&&buildRoundedRectangle(a,s);r.lastIndex++}for(i=0;i32e4||r.mode!==e||1===e)&&(r=this.graphicsDataPool.pop()||new h(t.gl),r.mode=e,t.data.push(r))):(r=this.graphicsDataPool.pop()||new h(t.gl),r.mode=e,t.data.push(r)),r.dirty=!0,r}},{"../../const":38,"../../math":55,"../../renderers/webgl/WebGLRenderer":72,"../../renderers/webgl/utils/ObjectRenderer":87,"../../utils":105,"./WebGLGraphicsData":44,"./shaders/PrimitiveShader":45,"./utils/buildCircle":46,"./utils/buildComplexPoly":47,"./utils/buildLine":48,"./utils/buildPoly":49,"./utils/buildRectangle":50,"./utils/buildRoundedRectangle":51,earcut:24}],44:[function(t,e,r){function i(t){this.gl=t,this.color=[0,0,0],this.points=[],this.indices=[],this.buffer=t.createBuffer(),this.indexBuffer=t.createBuffer(),this.mode=1,this.alpha=1,this.dirty=!0,this.glPoints=null,this.glIndices=null}i.prototype.constructor=i,e.exports=i,i.prototype.reset=function(){this.points.length=0,this.indices.length=0},i.prototype.upload=function(){var t=this.gl;this.glPoints=new Float32Array(this.points),t.bindBuffer(t.ARRAY_BUFFER,this.buffer),t.bufferData(t.ARRAY_BUFFER,this.glPoints,t.STATIC_DRAW),this.glIndices=new Uint16Array(this.indices),t.bindBuffer(t.ELEMENT_ARRAY_BUFFER,this.indexBuffer),t.bufferData(t.ELEMENT_ARRAY_BUFFER,this.glIndices,t.STATIC_DRAW),this.dirty=!1},i.prototype.destroy=function(){this.color=null,this.points=null,this.indices=null,this.gl.deleteBuffer(this.buffer),this.gl.deleteBuffer(this.indexBuffer),this.gl=null,this.buffer=null,this.indexBuffer=null,this.glPoints=null,this.glIndices=null}},{}],45:[function(t,e,r){function i(t){n.call(this,t,["attribute vec2 aVertexPosition;","attribute vec4 aColor;","uniform mat3 translationMatrix;","uniform mat3 projectionMatrix;","uniform float alpha;","uniform float flipY;","uniform vec3 tint;","varying vec4 vColor;","void main(void){"," gl_Position = vec4((projectionMatrix * translationMatrix * vec3(aVertexPosition, 1.0)).xy, 0.0, 1.0);"," vColor = aColor * vec4(tint * alpha, alpha);","}"].join("\n"),["precision mediump float;","varying vec4 vColor;","void main(void){"," gl_FragColor = vColor;","}"].join("\n"))}var n=t("pixi-gl-core").GLShader;i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i},{"pixi-gl-core":1}],46:[function(t,e,r){var i=t("./buildLine"),n=t("../../../utils"),o=function(t,e){var r,o,s=t.shape,a=s.x,h=s.y;t.type===CONST.SHAPES.CIRC?(r=s.radius,o=s.radius):(r=s.width,o=s.height);var u=Math.floor(30*Math.sqrt(s.radius))||Math.floor(15*Math.sqrt(s.width+s.height)),l=2*Math.PI/u,c=0;if(t.fill){var p=n.hex2rgb(t.fillColor),d=t.fillAlpha,f=p[0]*d,v=p[1]*d,g=p[2]*d,m=e.points,y=e.indices,x=m.length/6;for(y.push(x),c=0;u+1>c;c++)m.push(a,h,f,v,g,d),m.push(a+Math.sin(l*c)*r,h+Math.cos(l*c)*o,f,v,g,d),y.push(x++,x++);y.push(x-1)}if(t.lineWidth){var b=t.points;for(t.points=[],c=0;u+1>c;c++)t.points.push(a+Math.sin(l*c)*r,h+Math.cos(l*c)*o);i(t,e),t.points=b}};e.exports=o},{"../../../utils":105,"./buildLine":48}],47:[function(t,e,r){var i=(t("./buildLine"),t("../../../utils")),n=function(t,e){var r=t.points.slice();if(!(r.length<6)){var n=e.indices;e.points=r,e.alpha=t.fillAlpha,e.color=i.hex2rgb(t.fillColor);for(var o,s,a=1/0,h=-(1/0),u=1/0,l=-(1/0),c=0;co?o:a,h=o>h?o:h,u=u>s?s:u,l=s>l?s:l;r.push(a,u,h,u,h,l,a,l);var p=r.length/2;for(c=0;p>c;c++)n.push(c)}};e.exports=n},{"../../../utils":105,"./buildLine":48}],48:[function(t,e,r){var i=t("../../../math"),n=t("../../../utils"),o=function(t,e){var r=0,o=t.points;if(0!==o.length){var s=new i.Point(o[0],o[1]),a=new i.Point(o[o.length-2],o[o.length-1]);if(s.x===a.x&&s.y===a.y){o=o.slice(),o.pop(),o.pop(),a=new i.Point(o[o.length-2],o[o.length-1]);var h=a.x+.5*(s.x-a.x),u=a.y+.5*(s.y-a.y);o.unshift(h,u),o.push(h,u)}var l,c,p,d,f,v,g,m,y,x,b,_,T,E,S,w,C,A,M,R,O,P,D,F=e.points,L=e.indices,B=o.length/2,I=o.length,N=F.length/6,U=t.lineWidth/2,k=n.hex2rgb(t.lineColor),j=t.lineAlpha,G=k[0]*j,X=k[1]*j,Y=k[2]*j;for(p=o[0],d=o[1],f=o[2],v=o[3],y=-(d-v),x=p-f,D=Math.sqrt(y*y+x*x),y/=D,x/=D,y*=U,x*=U,F.push(p-y,d-x,G,X,Y,j),F.push(p+y,d+x,G,X,Y,j),r=1;B-1>r;r++)p=o[2*(r-1)],d=o[2*(r-1)+1],f=o[2*r],v=o[2*r+1],g=o[2*(r+1)],m=o[2*(r+1)+1],y=-(d-v),x=p-f,D=Math.sqrt(y*y+x*x),y/=D,x/=D,y*=U,x*=U,b=-(v-m),_=f-g,D=Math.sqrt(b*b+_*_),b/=D,_/=D,b*=U,_*=U,S=-x+d-(-x+v),w=-y+f-(-y+p),C=(-y+p)*(-x+v)-(-y+f)*(-x+d),A=-_+m-(-_+v),M=-b+f-(-b+g),R=(-b+g)*(-_+v)-(-b+f)*(-_+m),O=S*M-A*w,Math.abs(O)<.1?(O+=10.1,F.push(f-y,v-x,G,X,Y,j),F.push(f+y,v+x,G,X,Y,j)):(l=(w*R-M*C)/O,c=(A*C-S*R)/O,P=(l-f)*(l-f)+(c-v)*(c-v),P>19600?(T=y-b,E=x-_,D=Math.sqrt(T*T+E*E),T/=D,E/=D,T*=U,E*=U,F.push(f-T,v-E),F.push(G,X,Y,j),F.push(f+T,v+E),F.push(G,X,Y,j),F.push(f-T,v-E),F.push(G,X,Y,j),I++):(F.push(l,c),F.push(G,X,Y,j),F.push(f-(l-f),v-(c-v)),F.push(G,X,Y,j)));for(p=o[2*(B-2)],d=o[2*(B-2)+1],f=o[2*(B-1)],v=o[2*(B-1)+1],y=-(d-v),x=p-f,D=Math.sqrt(y*y+x*x),y/=D,x/=D,y*=U,x*=U,F.push(f-y,v-x),F.push(G,X,Y,j),F.push(f+y,v+x),F.push(G,X,Y,j),L.push(N),r=0;I>r;r++)L.push(N++);L.push(N-1)}};e.exports=o},{"../../../math":55,"../../../utils":105}],49:[function(t,e,r){var i=t("../../../utils"),n=function(t,e){var r=t.points;if(!(r.length<6)){var n=e.points,o=e.indices,s=r.length/2,a=i.hex2rgb(t.fillColor),h=t.fillAlpha,u=a[0]*h,l=a[1]*h,c=a[2]*h,p=earcut(r,null,2);if(!p)return!1;var d=n.length/6,f=0;for(f=0;ff;f++)n.push(r[2*f],r[2*f+1],u,l,c,h);return!0}};e.exports=n},{"../../../utils":105}],50:[function(t,e,r){var i=t("./buildLine"),n=t("../../../utils"),o=function(t,e){var r=t.shape,o=r.x,s=r.y,a=r.width,h=r.height;if(t.fill){var u=n.hex2rgb(t.fillColor),l=t.fillAlpha,c=u[0]*l,p=u[1]*l,d=u[2]*l,f=e.points,v=e.indices,g=f.length/6;f.push(o,s),f.push(c,p,d,l),f.push(o+a,s),f.push(c,p,d,l),f.push(o,s+h),f.push(c,p,d,l),f.push(o+a,s+h),f.push(c,p,d,l),v.push(g,g,g+1,g+2,g+3,g+3)}if(t.lineWidth){var m=t.points;t.points=[o,s,o+a,s,o+a,s+h,o,s+h,o,s],i(t,e),t.points=m}};e.exports=o},{"../../../utils":105,"./buildLine":48}],51:[function(t,e,r){var i=(t("./buildLine"),t("../../../utils"));buildRoundedRectangle=function(t,e){var r=t.shape,n=r.x,o=r.y,s=r.width,a=r.height,h=r.radius,u=[];if(u.push(n,o+h),this.quadraticBezierCurve(n,o+a-h,n,o+a,n+h,o+a,u),this.quadraticBezierCurve(n+s-h,o+a,n+s,o+a,n+s,o+a-h,u),this.quadraticBezierCurve(n+s,o+h,n+s,o,n+s-h,o,u),this.quadraticBezierCurve(n+h,o,n,o,n,o+h+1e-10,u),t.fill){var l=i.hex2rgb(t.fillColor),c=t.fillAlpha,p=l[0]*c,d=l[1]*c,f=l[2]*c,v=e.points,g=e.indices,m=v.length/6,y=earcut(u,null,2),x=0;for(x=0;x=m;m++)g=m/f,h=a(t,r,g),u=a(e,i,g),l=a(r,n,g),c=a(i,o,g),p=a(h,l,g),d=a(u,c,g),v.push(p,d);return v},e.exports=buildRoundedRectangle},{"../../../utils":105,"./buildLine":48}],52:[function(t,e,r){var i=e.exports=Object.assign(t("./const"),t("./math"),{utils:t("./utils"),ticker:t("./ticker"),DisplayObject:t("./display/DisplayObject"),Container:t("./display/Container"),Sprite:t("./sprites/Sprite"),ParticleContainer:t("./particles/ParticleContainer"),SpriteRenderer:t("./sprites/webgl/SpriteRenderer"),ParticleRenderer:t("./particles/webgl/ParticleRenderer"),Text:t("./text/Text"),Graphics:t("./graphics/Graphics"),GraphicsData:t("./graphics/GraphicsData"),GraphicsRenderer:t("./graphics/webgl/GraphicsRenderer"),Texture:t("./textures/Texture"),BaseTexture:t("./textures/BaseTexture"),RenderTexture:t("./textures/RenderTexture"),VideoBaseTexture:t("./textures/VideoBaseTexture"),TextureUvs:t("./textures/TextureUvs"),CanvasRenderer:t("./renderers/canvas/CanvasRenderer"),CanvasGraphics:t("./renderers/canvas/utils/CanvasGraphics"),CanvasBuffer:t("./renderers/canvas/utils/CanvasBuffer"),WebGLRenderer:t("./renderers/webgl/WebGLRenderer"),WebGLManager:t("./renderers/webgl/managers/WebGLManager"),ShaderManager:t("./renderers/webgl/managers/ShaderManager"),Shader:t("./renderers/webgl/shaders/Shader"),ObjectRenderer:t("./renderers/webgl/utils/ObjectRenderer"),RenderTarget:t("./renderers/webgl/utils/RenderTarget"),AbstractFilter:t("./renderers/webgl/filters/AbstractFilter"),FXAAFilter:t("./renderers/webgl/filters/FXAAFilter"),SpriteMaskFilter:t("./renderers/webgl/filters/SpriteMaskFilter"),glCore:t("pixi-gl-core"),autoDetectRenderer:function(t,e,r,n){return t=t||800,e=e||600,!n&&i.utils.isWebGLSupported()?new i.WebGLRenderer(t,e,r):new i.CanvasRenderer(t,e,r)}})},{"./const":38,"./display/Container":39,"./display/DisplayObject":40,"./graphics/Graphics":41,"./graphics/GraphicsData":42,"./graphics/webgl/GraphicsRenderer":43,"./math":55,"./particles/ParticleContainer":61,"./particles/webgl/ParticleRenderer":63,"./renderers/canvas/CanvasRenderer":66,"./renderers/canvas/utils/CanvasBuffer":67,"./renderers/canvas/utils/CanvasGraphics":68,"./renderers/webgl/WebGLRenderer":72,"./renderers/webgl/filters/AbstractFilter":73,"./renderers/webgl/filters/FXAAFilter":74,"./renderers/webgl/filters/SpriteMaskFilter":75,"./renderers/webgl/managers/ShaderManager":79,"./renderers/webgl/managers/WebGLManager":81,"./renderers/webgl/shaders/Shader":84,"./renderers/webgl/utils/ObjectRenderer":87,"./renderers/webgl/utils/RenderTarget":89,"./sprites/Sprite":93,"./sprites/webgl/SpriteRenderer":94,"./text/Text":96,"./textures/BaseTexture":97,"./textures/RenderTexture":98,"./textures/Texture":99,"./textures/TextureUvs":100,"./textures/VideoBaseTexture":101,"./ticker":103,"./utils":105,"pixi-gl-core":1}],53:[function(t,e,r){function i(){this.a=1,this.b=0,this.c=0,this.d=1,this.tx=0,this.ty=0}var n=t("./Point");i.prototype.constructor=i,e.exports=i,i.prototype.fromArray=function(t){this.a=t[0],this.b=t[1],this.c=t[3],this.d=t[4],this.tx=t[2],this.ty=t[5]},i.prototype.set=function(t,e,r,i,n,o){return this.a=t,this.b=e,this.c=r,this.d=i,this.tx=n,this.ty=o,this},i.prototype.toArray=function(t,e){this.array||(this.array=new Float32Array(9));var r=e||this.array;return t?(r[0]=this.a,r[1]=this.b,r[2]=0,r[3]=this.c,r[4]=this.d,r[5]=0,r[6]=this.tx,r[7]=this.ty,r[8]=1):(r[0]=this.a,r[1]=this.c,r[2]=this.tx,r[3]=this.b,r[4]=this.d,r[5]=this.ty,r[6]=0,r[7]=0,r[8]=1),r},i.prototype.apply=function(t,e){e=e||new n;var r=t.x,i=t.y;return e.x=this.a*r+this.c*i+this.tx,e.y=this.b*r+this.d*i+this.ty,e},i.prototype.applyInverse=function(t,e){e=e||new n;var r=1/(this.a*this.d+this.c*-this.b),i=t.x,o=t.y;return e.x=this.d*r*i+-this.c*r*o+(this.ty*this.c-this.tx*this.d)*r,e.y=this.a*r*o+-this.b*r*i+(-this.ty*this.a+this.tx*this.b)*r,e},i.prototype.translate=function(t,e){return this.tx+=t,this.ty+=e,this},i.prototype.scale=function(t,e){return this.a*=t,this.d*=e,this.c*=t,this.b*=e,this.tx*=t,this.ty*=e,this},i.prototype.rotate=function(t){var e=Math.cos(t),r=Math.sin(t),i=this.a,n=this.c,o=this.tx;return this.a=i*e-this.b*r,this.b=i*r+this.b*e,this.c=n*e-this.d*r,this.d=n*r+this.d*e,this.tx=o*e-this.ty*r,this.ty=o*r+this.ty*e,this},i.prototype.append=function(t){var e=this.a,r=this.b,i=this.c,n=this.d;return this.a=t.a*e+t.b*i,this.b=t.a*r+t.b*n,this.c=t.c*e+t.d*i,this.d=t.c*r+t.d*n,this.tx=t.tx*e+t.ty*i+this.tx,this.ty=t.tx*r+t.ty*n+this.ty,this},i.prototype.setTransform=function(t,e,r,i,n,o,s,a,h){var u,l,c,p,d,f,v,g,m,y;return d=Math.sin(s),f=Math.cos(s),v=Math.cos(h),g=Math.sin(h),m=-Math.sin(a),y=Math.cos(a),u=f*n,l=d*n,c=-d*o,p=f*o,this.a=v*u+g*c,this.b=v*l+g*p,this.c=m*u+y*c,this.d=m*l+y*p,this.tx=t+(r*u+i*c),this.ty=e+(r*l+i*p),this},i.prototype.prepend=function(t){var e=this.tx;if(1!==t.a||0!==t.b||0!==t.c||1!==t.d){var r=this.a,i=this.c;this.a=r*t.a+this.b*t.c,this.b=r*t.b+this.b*t.d,this.c=i*t.a+this.d*t.c,this.d=i*t.b+this.d*t.d}return this.tx=e*t.a+this.ty*t.c+t.tx,this.ty=e*t.b+this.ty*t.d+t.ty,this},i.prototype.invert=function(){var t=this.a,e=this.b,r=this.c,i=this.d,n=this.tx,o=t*i-e*r;return this.a=i/o,this.b=-e/o,this.c=-r/o,this.d=t/o,this.tx=(r*this.ty-i*n)/o,this.ty=-(t*this.ty-e*n)/o,this},i.prototype.identity=function(){return this.a=1,this.b=0,this.c=0,this.d=1,this.tx=0,this.ty=0,this},i.prototype.clone=function(){var t=new i;return t.a=this.a,t.b=this.b,t.c=this.c,t.d=this.d,t.tx=this.tx,t.ty=this.ty,t},i.prototype.copy=function(t){return t.a=this.a,t.b=this.b,t.c=this.c,t.d=this.d,t.tx=this.tx,t.ty=this.ty,t},i.IDENTITY=new i,i.TEMP_MATRIX=new i},{"./Point":54}],54:[function(t,e,r){function i(t,e){this.x=t||0,this.y=e||0}i.prototype.constructor=i,e.exports=i,i.prototype.clone=function(){return new i(this.x,this.y)},i.prototype.copy=function(t){this.set(t.x,t.y)},i.prototype.equals=function(t){return t.x===this.x&&t.y===this.y},i.prototype.set=function(t,e){this.x=t||0,this.y=e||(0!==e?this.x:0)}},{}],55:[function(t,e,r){e.exports={Point:t("./Point"),Matrix:t("./Matrix"),Circle:t("./shapes/Circle"),Ellipse:t("./shapes/Ellipse"),Polygon:t("./shapes/Polygon"),Rectangle:t("./shapes/Rectangle"),RoundedRectangle:t("./shapes/RoundedRectangle")}},{"./Matrix":53,"./Point":54,"./shapes/Circle":56,"./shapes/Ellipse":57,"./shapes/Polygon":58,"./shapes/Rectangle":59,"./shapes/RoundedRectangle":60}],56:[function(t,e,r){function i(t,e,r){this.x=t||0,this.y=e||0,this.radius=r||0,this.type=o.SHAPES.CIRC}var n=t("./Rectangle"),o=t("../../const");i.prototype.constructor=i,e.exports=i,i.prototype.clone=function(){return new i(this.x,this.y,this.radius)},i.prototype.contains=function(t,e){if(this.radius<=0)return!1;var r=this.x-t,i=this.y-e,n=this.radius*this.radius;return r*=r,i*=i,n>=r+i},i.prototype.getBounds=function(){return new n(this.x-this.radius,this.y-this.radius,2*this.radius,2*this.radius)}},{"../../const":38,"./Rectangle":59}],57:[function(t,e,r){function i(t,e,r,i){this.x=t||0,this.y=e||0,this.width=r||0,this.height=i||0,this.type=o.SHAPES.ELIP}var n=t("./Rectangle"),o=t("../../const");i.prototype.constructor=i,e.exports=i,i.prototype.clone=function(){return new i(this.x,this.y,this.width,this.height)},i.prototype.contains=function(t,e){if(this.width<=0||this.height<=0)return!1;var r=(t-this.x)/this.width,i=(e-this.y)/this.height;return r*=r,i*=i,1>=r+i},i.prototype.getBounds=function(){return new n(this.x-this.width,this.y-this.height,this.width,this.height)}},{"../../const":38,"./Rectangle":59}],58:[function(t,e,r){function i(t){var e=t;if(!Array.isArray(e)){e=new Array(arguments.length);for(var r=0;rs;s++)i.push(e[s].x,e[s].y);e=i}this.closed=!0,this.points=e,this.type=o.SHAPES.POLY}var n=t("../Point"),o=t("../../const");i.prototype.constructor=i,e.exports=i,i.prototype.clone=function(){return new i(this.points.slice())},i.prototype.contains=function(t,e){for(var r=!1,i=this.points.length/2,n=0,o=i-1;i>n;o=n++){var s=this.points[2*n],a=this.points[2*n+1],h=this.points[2*o],u=this.points[2*o+1],l=a>e!=u>e&&(h-s)*(e-a)/(u-a)+s>t;l&&(r=!r)}return r}},{"../../const":38,"../Point":54}],59:[function(t,e,r){function i(t,e,r,i){this.x=t||0,this.y=e||0,this.width=r||0,this.height=i||0,this.type=n.SHAPES.RECT}var n=t("../../const");i.prototype.constructor=i,e.exports=i,i.EMPTY=new i(0,0,0,0),i.prototype.clone=function(){return new i(this.x,this.y,this.width,this.height)},i.prototype.contains=function(t,e){return this.width<=0||this.height<=0?!1:t>=this.x&&t=this.y&&e=this.x&&t<=this.x+this.width&&e>=this.y&&e<=this.y+this.height?!0:!1}},{"../../const":38}],61:[function(t,e,r){function i(t,e,r){n.call(this),r=r||15e3,t=t||15e3;var i=16384;r>i&&(r=i),r>t&&(r=t),this._properties=[!1,!0,!1,!1,!1],this._maxSize=t,this._batchSize=r,this._buffers=null,this._bufferToUpdate=0,this.interactiveChildren=!1,this.blendMode=o.BLEND_MODES.NORMAL,this.roundPixels=!0,this.setProperties(e)}var n=t("../display/Container"),o=t("../const");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.setProperties=function(t){t&&(this._properties[0]="scale"in t?!!t.scale:this._properties[0],this._properties[1]="position"in t?!!t.position:this._properties[1],this._properties[2]="rotation"in t?!!t.rotation:this._properties[2],this._properties[3]="uvs"in t?!!t.uvs:this._properties[3],this._properties[4]="alpha"in t?!!t.alpha:this._properties[4])},i.prototype.updateTransform=function(){this.displayObjectUpdateTransform()},i.prototype.renderWebGL=function(t){this.visible&&!(this.worldAlpha<=0)&&this.children.length&&this.renderable&&(t.setObjectRenderer(t.plugins.particle),t.plugins.particle.render(this))},i.prototype.onChildrenChange=function(t){var e=Math.floor(t/this._batchSize);er;r+=6,i+=4)this.indices[r+0]=i+0,this.indices[r+1]=i+1,this.indices[r+2]=i+2,this.indices[r+3]=i+0,this.indices[r+4]=i+2,this.indices[r+5]=i+3;this.shader=null,this.indexBuffer=null,this.properties=null,this.tempMatrix=new h.Matrix}var n=t("../../renderers/webgl/utils/ObjectRenderer"),o=t("../../renderers/webgl/WebGLRenderer"),s=t("./ParticleShader"),a=t("./ParticleBuffer"),h=t("../../math");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,o.registerPlugin("particle",i),i.prototype.onContextChange=function(){var t=this.renderer.gl;this.shader=new s(this.renderer.shaderManager),this.indexBuffer=t.createBuffer(),t.bindBuffer(t.ELEMENT_ARRAY_BUFFER,this.indexBuffer),t.bufferData(t.ELEMENT_ARRAY_BUFFER,this.indices,t.STATIC_DRAW),this.properties=[{attribute:this.shader.attributes.aVertexPosition,size:2,uploadFunction:this.uploadVertices,offset:0},{attribute:this.shader.attributes.aPositionCoord,size:2,uploadFunction:this.uploadPosition,offset:0},{attribute:this.shader.attributes.aRotation,size:1,uploadFunction:this.uploadRotation,offset:0},{attribute:this.shader.attributes.aTextureCoord,size:2,uploadFunction:this.uploadUvs,offset:0},{attribute:this.shader.attributes.aColor,size:1,uploadFunction:this.uploadAlpha,offset:0}]},i.prototype.start=function(){var t=this.renderer.gl;t.activeTexture(t.TEXTURE0),t.bindBuffer(t.ELEMENT_ARRAY_BUFFER,this.indexBuffer);var e=this.shader;this.renderer.shaderManager.setShader(e)},i.prototype.render=function(t){var e=t.children,r=e.length,i=t._maxSize,n=t._batchSize;if(0!==r){r>i&&(r=i),t._buffers||(t._buffers=this.generateBuffers(t)),this.renderer.blendModeManager.setBlendMode(t.blendMode);var o=this.renderer.gl,s=t.worldTransform.copy(this.tempMatrix);s.prepend(this.renderer.currentRenderTarget.projectionMatrix),o.uniformMatrix3fv(this.shader.uniforms.projectionMatrix._location,!1,s.toArray(!0)),o.uniform1f(this.shader.uniforms.uAlpha._location,t.worldAlpha);var a=e[0]._texture.baseTexture;if(a._glTextures[o.id])o.bindTexture(o.TEXTURE_2D,a._glTextures[o.id]);else{if(!this.renderer.updateTexture(a))return;t._properties[0]&&t._properties[3]||(t._bufferToUpdate=0)}for(var h=0,u=0;r>h;h+=n,u+=1){var l=r-h;l>n&&(l=n);var c=t._buffers[u];c.uploadDynamic(e,h,l),t._bufferToUpdate===u&&(c.uploadStatic(e,h,l),t._bufferToUpdate=u+1),c.bind(this.shader),o.drawElements(o.TRIANGLES,6*l,o.UNSIGNED_SHORT,0),this.renderer.drawCount++}}},i.prototype.generateBuffers=function(t){var e,r=this.renderer.gl,i=[],n=t._maxSize,o=t._batchSize,s=t._properties;for(e=0;n>e;e+=o)i.push(new a(r,this.properties,s,o));return i},i.prototype.uploadVertices=function(t,e,r,i,n,o){for(var s,a,h,u,l,c,p,d,f,v=0;r>v;v++)s=t[e+v],a=s._texture,u=s.scale.x,l=s.scale.y,a.trim?(h=a.trim,p=h.x-s.anchor.x*h.width,c=p+a.crop.width,f=h.y-s.anchor.y*h.height,d=f+a.crop.height):(c=a._frame.width*(1-s.anchor.x),p=a._frame.width*-s.anchor.x,d=a._frame.height*(1-s.anchor.y),f=a._frame.height*-s.anchor.y),i[o]=p*u,i[o+1]=f*l,i[o+n]=c*u,i[o+n+1]=f*l,i[o+2*n]=c*u,i[o+2*n+1]=d*l,i[o+3*n]=p*u,i[o+3*n+1]=d*l,o+=4*n},i.prototype.uploadPosition=function(t,e,r,i,n,o){for(var s=0;r>s;s++){var a=t[e+s].position;i[o]=a.x,i[o+1]=a.y,i[o+n]=a.x,i[o+n+1]=a.y,i[o+2*n]=a.x,i[o+2*n+1]=a.y,i[o+3*n]=a.x,i[o+3*n+1]=a.y,o+=4*n}},i.prototype.uploadRotation=function(t,e,r,i,n,o){for(var s=0;r>s;s++){var a=t[e+s].rotation;i[o]=a,i[o+n]=a,i[o+2*n]=a,i[o+3*n]=a,o+=4*n}},i.prototype.uploadUvs=function(t,e,r,i,n,o){for(var s=0;r>s;s++){var a=t[e+s]._texture._uvs;a?(i[o]=a.x0,i[o+1]=a.y0,i[o+n]=a.x1,i[o+n+1]=a.y1,i[o+2*n]=a.x2,i[o+2*n+1]=a.y2,i[o+3*n]=a.x3,i[o+3*n+1]=a.y3,o+=4*n):(i[o]=0,i[o+1]=0,i[o+n]=0,i[o+n+1]=0,i[o+2*n]=0,i[o+2*n+1]=0,i[o+3*n]=0,i[o+3*n+1]=0,o+=4*n)}},i.prototype.uploadAlpha=function(t,e,r,i,n,o){for(var s=0;r>s;s++){var a=t[e+s].alpha;i[o]=a,i[o+n]=a,i[o+2*n]=a,i[o+3*n]=a,o+=4*n}},i.prototype.destroy=function(){this.renderer.gl&&this.renderer.gl.deleteBuffer(this.indexBuffer),n.prototype.destroy.apply(this,arguments),this.shader.destroy(),this.indices=null,this.tempMatrix=null}},{"../../math":55,"../../renderers/webgl/WebGLRenderer":72,"../../renderers/webgl/utils/ObjectRenderer":87,"./ParticleBuffer":62,"./ParticleShader":64}],64:[function(t,e,r){function i(t){n.call(this,t,["attribute vec2 aVertexPosition;","attribute vec2 aTextureCoord;","attribute float aColor;","attribute vec2 aPositionCoord;","attribute vec2 aScale;","attribute float aRotation;","uniform mat3 projectionMatrix;","varying vec2 vTextureCoord;","varying float vColor;","void main(void){"," vec2 v = aVertexPosition;"," v.x = (aVertexPosition.x) * cos(aRotation) - (aVertexPosition.y) * sin(aRotation);"," v.y = (aVertexPosition.x) * sin(aRotation) + (aVertexPosition.y) * cos(aRotation);"," v = v + aPositionCoord;"," gl_Position = vec4((projectionMatrix * vec3(v, 1.0)).xy, 0.0, 1.0);"," vTextureCoord = aTextureCoord;"," vColor = aColor;","}"].join("\n"),["precision lowp float;","varying vec2 vTextureCoord;","varying float vColor;","uniform sampler2D uSampler;","uniform float uAlpha;","void main(void){"," vec4 color = texture2D(uSampler, vTextureCoord) * vColor * uAlpha;"," if (color.a == 0.0) discard;"," gl_FragColor = color;","}"].join("\n"),{uAlpha:{type:"1f",value:1}},{aPositionCoord:0,aRotation:0})}var n=t("../../renderers/webgl/shaders/TextureShader");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i},{"../../renderers/webgl/shaders/TextureShader":85}],65:[function(t,e,r){ +function i(t,e,r,i){if(a.call(this),n.sayHello(t),i)for(var h in s.DEFAULT_RENDER_OPTIONS)"undefined"==typeof i[h]&&(i[h]=s.DEFAULT_RENDER_OPTIONS[h]);else i=s.DEFAULT_RENDER_OPTIONS;this.type=s.RENDERER_TYPE.UNKNOWN,this.width=e||800,this.height=r||600,this.view=i.view||document.createElement("canvas"),this.resolution=i.resolution,this.transparent=i.transparent,this.autoResize=i.autoResize||!1,this.blendModes=null,this.preserveDrawingBuffer=i.preserveDrawingBuffer,this.clearBeforeRender=i.clearBeforeRender,this.roundPixels=i.roundPixels,this._backgroundColor=0,this._backgroundColorRgba=[0,0,0,0],this._backgroundColorString="#000000",this.backgroundColor=i.backgroundColor||this._backgroundColor,this._tempDisplayObjectParent={worldTransform:new o.Matrix,worldAlpha:1,children:[]},this._lastObjectRendered=this._tempDisplayObjectParent}var n=t("../utils"),o=t("../math"),s=t("../const"),a=t("eventemitter3");i.prototype=Object.create(a.prototype),i.prototype.constructor=i,e.exports=i,Object.defineProperties(i.prototype,{backgroundColor:{get:function(){return this._backgroundColor},set:function(t){this._backgroundColor=t,this._backgroundColorString=n.hex2string(t),n.hex2rgb(t,this._backgroundColorRgba)}}}),i.prototype.resize=function(t,e){this.width=t*this.resolution,this.height=e*this.resolution,this.view.width=this.width,this.view.height=this.height,this.autoResize&&(this.view.style.width=this.width/this.resolution+"px",this.view.style.height=this.height/this.resolution+"px")},i.prototype.destroy=function(t){t&&this.view.parentNode&&this.view.parentNode.removeChild(this.view),this.type=s.RENDERER_TYPE.UNKNOWN,this.width=0,this.height=0,this.view=null,this.resolution=0,this.transparent=!1,this.autoResize=!1,this.blendModes=null,this.preserveDrawingBuffer=!1,this.clearBeforeRender=!1,this.roundPixels=!1,this._backgroundColor=0,this._backgroundColorRgba=null,this._backgroundColorString=null}},{"../const":38,"../math":55,"../utils":105,eventemitter3:25}],66:[function(t,e,r){function i(t,e,r){r=r||{},n.call(this,"Canvas",t,e,r),this.type=h.RENDERER_TYPE.CANVAS,this.context=this.view.getContext("2d",{alpha:this.transparent}),this.refresh=!0,this.maskManager=new o,this.smoothProperty="imageSmoothingEnabled",this.context.imageSmoothingEnabled||(this.context.webkitImageSmoothingEnabled?this.smoothProperty="webkitImageSmoothingEnabled":this.context.mozImageSmoothingEnabled?this.smoothProperty="mozImageSmoothingEnabled":this.context.oImageSmoothingEnabled?this.smoothProperty="oImageSmoothingEnabled":this.context.msImageSmoothingEnabled&&(this.smoothProperty="msImageSmoothingEnabled")),this.initPlugins(),this._mapBlendModes(),this._tempDisplayObjectParent={worldTransform:new a.Matrix,worldAlpha:1},this.resize(t,e)}var n=t("../SystemRenderer"),o=t("./utils/CanvasMaskManager"),s=t("../../utils"),a=t("../../math"),h=t("../../const");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,s.pluginTarget.mixin(i),i.prototype.render=function(t){this.emit("prerender");var e=t.parent;this._lastObjectRendered=t,t.parent=this._tempDisplayObjectParent,t.updateTransform(),t.parent=e,this.context.setTransform(1,0,0,1,0,0),this.context.globalAlpha=1,this.context.globalCompositeOperation=this.blendModes[h.BLEND_MODES.NORMAL],navigator.isCocoonJS&&this.view.screencanvas&&(this.context.fillStyle="black",this.context.clear()),this.clearBeforeRender&&(this.transparent?this.context.clearRect(0,0,this.width,this.height):(this.context.fillStyle=this._backgroundColorString,this.context.fillRect(0,0,this.width,this.height))),this.renderDisplayObject(t,this.context),this.emit("postrender")},i.prototype.destroy=function(t){this.destroyPlugins(),n.prototype.destroy.call(this,t),this.context=null,this.refresh=!0,this.maskManager.destroy(),this.maskManager=null,this.smoothProperty=null},i.prototype.renderDisplayObject=function(t,e){var r=this.context;this.context=e,t.renderCanvas(this),this.context=r},i.prototype.resize=function(t,e){n.prototype.resize.call(this,t,e),this.smoothProperty&&(this.context[this.smoothProperty]=h.SCALE_MODES.DEFAULT===h.SCALE_MODES.LINEAR)},i.prototype._mapBlendModes=function(){this.blendModes||(this.blendModes={},s.canUseNewCanvasBlendModes()?(this.blendModes[h.BLEND_MODES.NORMAL]="source-over",this.blendModes[h.BLEND_MODES.ADD]="lighter",this.blendModes[h.BLEND_MODES.MULTIPLY]="multiply",this.blendModes[h.BLEND_MODES.SCREEN]="screen",this.blendModes[h.BLEND_MODES.OVERLAY]="overlay",this.blendModes[h.BLEND_MODES.DARKEN]="darken",this.blendModes[h.BLEND_MODES.LIGHTEN]="lighten",this.blendModes[h.BLEND_MODES.COLOR_DODGE]="color-dodge",this.blendModes[h.BLEND_MODES.COLOR_BURN]="color-burn",this.blendModes[h.BLEND_MODES.HARD_LIGHT]="hard-light",this.blendModes[h.BLEND_MODES.SOFT_LIGHT]="soft-light",this.blendModes[h.BLEND_MODES.DIFFERENCE]="difference",this.blendModes[h.BLEND_MODES.EXCLUSION]="exclusion",this.blendModes[h.BLEND_MODES.HUE]="hue",this.blendModes[h.BLEND_MODES.SATURATION]="saturate",this.blendModes[h.BLEND_MODES.COLOR]="color",this.blendModes[h.BLEND_MODES.LUMINOSITY]="luminosity"):(this.blendModes[h.BLEND_MODES.NORMAL]="source-over",this.blendModes[h.BLEND_MODES.ADD]="lighter",this.blendModes[h.BLEND_MODES.MULTIPLY]="source-over",this.blendModes[h.BLEND_MODES.SCREEN]="source-over",this.blendModes[h.BLEND_MODES.OVERLAY]="source-over",this.blendModes[h.BLEND_MODES.DARKEN]="source-over",this.blendModes[h.BLEND_MODES.LIGHTEN]="source-over",this.blendModes[h.BLEND_MODES.COLOR_DODGE]="source-over",this.blendModes[h.BLEND_MODES.COLOR_BURN]="source-over",this.blendModes[h.BLEND_MODES.HARD_LIGHT]="source-over",this.blendModes[h.BLEND_MODES.SOFT_LIGHT]="source-over",this.blendModes[h.BLEND_MODES.DIFFERENCE]="source-over",this.blendModes[h.BLEND_MODES.EXCLUSION]="source-over",this.blendModes[h.BLEND_MODES.HUE]="source-over",this.blendModes[h.BLEND_MODES.SATURATION]="source-over",this.blendModes[h.BLEND_MODES.COLOR]="source-over",this.blendModes[h.BLEND_MODES.LUMINOSITY]="source-over"))}},{"../../const":38,"../../math":55,"../../utils":105,"../SystemRenderer":65,"./utils/CanvasMaskManager":69}],67:[function(t,e,r){function i(t,e){this.canvas=document.createElement("canvas"),this.context=this.canvas.getContext("2d"),this.canvas.width=t,this.canvas.height=e}i.prototype.constructor=i,e.exports=i,Object.defineProperties(i.prototype,{width:{get:function(){return this.canvas.width},set:function(t){this.canvas.width=t}},height:{get:function(){return this.canvas.height},set:function(t){this.canvas.height=t}}}),i.prototype.clear=function(){this.context.setTransform(1,0,0,1,0,0),this.context.clearRect(0,0,this.canvas.width,this.canvas.height)},i.prototype.resize=function(t,e){this.canvas.width=t,this.canvas.height=e},i.prototype.destroy=function(){this.context=null,this.canvas=null}},{}],68:[function(t,e,r){var i=t("../../../const"),n={};e.exports=n,n.renderGraphics=function(t,e){var r=t.worldAlpha;t.dirty&&(this.updateGraphicsTint(t),t.dirty=!1);for(var n=0;nA?A:C,e.beginPath(),e.moveTo(T,E+C),e.lineTo(T,E+w-C),e.quadraticCurveTo(T,E+w,T+C,E+w),e.lineTo(T+S-C,E+w),e.quadraticCurveTo(T+S,E+w,T+S,E+w-C),e.lineTo(T+S,E+C),e.quadraticCurveTo(T+S,E,T+S-C,E),e.lineTo(T+C,E),e.quadraticCurveTo(T,E,T,E+C),e.closePath(),(o.fillColor||0===o.fillColor)&&(e.globalAlpha=o.fillAlpha*r,e.fillStyle="#"+("00000"+(0|a).toString(16)).substr(-6),e.fill()),o.lineWidth&&(e.globalAlpha=o.lineAlpha*r,e.strokeStyle="#"+("00000"+(0|h).toString(16)).substr(-6),e.stroke())}}},n.renderGraphicsMask=function(t,e){var r=t.graphicsData.length;if(0!==r){e.beginPath();for(var n=0;r>n;n++){var o=t.graphicsData[n],s=o.shape;if(o.type===i.SHAPES.POLY){var a=s.points;e.moveTo(a[0],a[1]);for(var h=1;hw?w:S,e.moveTo(b,_+S),e.lineTo(b,_+E-S),e.quadraticCurveTo(b,_+E,b+S,_+E),e.lineTo(b+T-S,_+E),e.quadraticCurveTo(b+T,_+E,b+T,_+E-S),e.lineTo(b+T,_+S),e.quadraticCurveTo(b+T,_,b+T-S,_),e.lineTo(b+S,_),e.quadraticCurveTo(b,_,b,_+S),e.closePath()}}}},n.updateGraphicsTint=function(t){if(16777215!==t.tint||t._prevTint!==t.tint){t._prevTint=t.tint;for(var e=(t.tint>>16&255)/255,r=(t.tint>>8&255)/255,i=(255&t.tint)/255,n=0;n>16&255)/255*e*255<<16)+((s>>8&255)/255*r*255<<8)+(255&s)/255*i*255,o._lineTint=((a>>16&255)/255*e*255<<16)+((a>>8&255)/255*r*255<<8)+(255&a)/255*i*255}}}},{"../../../const":38}],69:[function(t,e,r){function i(){}var n=t("./CanvasGraphics");i.prototype.constructor=i,e.exports=i,i.prototype.pushMask=function(t,e){e.context.save();var r=t.alpha,i=t.worldTransform,o=e.resolution;e.context.setTransform(i.a*o,i.b*o,i.c*o,i.d*o,i.tx*o,i.ty*o),t.texture||(n.renderGraphicsMask(t,e.context),e.context.clip()),t.worldAlpha=r},i.prototype.popMask=function(t){t.context.restore()},i.prototype.destroy=function(){}},{"./CanvasGraphics":68}],70:[function(t,e,r){var i=t("../../../utils"),n={};e.exports=n,n.getTintedTexture=function(t,e){var r=t.texture;e=n.roundColor(e);var i="#"+("00000"+(0|e).toString(16)).substr(-6);if(r.tintCache=r.tintCache||{},r.tintCache[i])return r.tintCache[i];var o=n.canvas||document.createElement("canvas");if(n.tintMethod(r,e,o),n.convertTintToImage){var s=new Image;s.src=o.toDataURL(),r.tintCache[i]=s}else r.tintCache[i]=o,n.canvas=null;return o},n.tintWithMultiply=function(t,e,r){var i=r.getContext("2d"),n=t.baseTexture.resolution,o=t.crop.clone();o.x*=n,o.y*=n,o.width*=n,o.height*=n,r.width=o.width,r.height=o.height,i.fillStyle="#"+("00000"+(0|e).toString(16)).substr(-6),i.fillRect(0,0,o.width,o.height),i.globalCompositeOperation="multiply",i.drawImage(t.baseTexture.source,o.x,o.y,o.width,o.height,0,0,o.width,o.height),i.globalCompositeOperation="destination-atop",i.drawImage(t.baseTexture.source,o.x,o.y,o.width,o.height,0,0,o.width,o.height)},n.tintWithOverlay=function(t,e,r){var i=r.getContext("2d"),n=t.baseTexture.resolution,o=t.crop.clone();o.x*=n,o.y*=n,o.width*=n,o.height*=n,r.width=o.width,r.height=o.height,i.globalCompositeOperation="copy",i.fillStyle="#"+("00000"+(0|e).toString(16)).substr(-6),i.fillRect(0,0,o.width,o.height),i.globalCompositeOperation="destination-atop",i.drawImage(t.baseTexture.source,o.x,o.y,o.width,o.height,0,0,o.width,o.height)},n.tintWithPerPixel=function(t,e,r){var n=r.getContext("2d"),o=t.baseTexture.resolution,s=t.crop.clone();s.x*=o,s.y*=o,s.width*=o,s.height*=o,r.width=s.width,r.height=s.height,n.globalCompositeOperation="copy",n.drawImage(t.baseTexture.source,s.x,s.y,s.width,s.height,0,0,s.width,s.height);for(var a=i.hex2rgb(e),h=a[0],u=a[1],l=a[2],c=n.getImageData(0,0,s.width,s.height),p=c.data,d=0;de;++e)this.shaders[e].syncUniform(t)}},{"../shaders/TextureShader":85}],74:[function(t,e,r){function i(){n.call(this,"\nprecision mediump float;\n\nattribute vec2 aVertexPosition;\nattribute vec2 aTextureCoord;\nattribute vec4 aColor;\n\nuniform mat3 projectionMatrix;\nuniform vec2 resolution;\n\nvarying vec2 vTextureCoord;\nvarying vec4 vColor;\n\nvarying vec2 vResolution;\n\n//texcoords computed in vertex step\n//to avoid dependent texture reads\nvarying vec2 v_rgbNW;\nvarying vec2 v_rgbNE;\nvarying vec2 v_rgbSW;\nvarying vec2 v_rgbSE;\nvarying vec2 v_rgbM;\n\n\nvoid texcoords(vec2 fragCoord, vec2 resolution,\n out vec2 v_rgbNW, out vec2 v_rgbNE,\n out vec2 v_rgbSW, out vec2 v_rgbSE,\n out vec2 v_rgbM) {\n vec2 inverseVP = 1.0 / resolution.xy;\n v_rgbNW = (fragCoord + vec2(-1.0, -1.0)) * inverseVP;\n v_rgbNE = (fragCoord + vec2(1.0, -1.0)) * inverseVP;\n v_rgbSW = (fragCoord + vec2(-1.0, 1.0)) * inverseVP;\n v_rgbSE = (fragCoord + vec2(1.0, 1.0)) * inverseVP;\n v_rgbM = vec2(fragCoord * inverseVP);\n}\n\nvoid main(void){\n gl_Position = vec4((projectionMatrix * vec3(aVertexPosition, 1.0)).xy, 0.0, 1.0);\n vTextureCoord = aTextureCoord;\n vColor = vec4(aColor.rgb * aColor.a, aColor.a);\n vResolution = resolution;\n\n //compute the texture coords and send them to varyings\n texcoords(aTextureCoord * resolution, resolution, v_rgbNW, v_rgbNE, v_rgbSW, v_rgbSE, v_rgbM);\n}\n",'precision lowp float;\n\n\n/**\nBasic FXAA implementation based on the code on geeks3d.com with the\nmodification that the texture2DLod stuff was removed since it\'s\nunsupported by WebGL.\n\n--\n\nFrom:\nhttps://github.com/mitsuhiko/webgl-meincraft\n\nCopyright (c) 2011 by Armin Ronacher.\n\nSome rights reserved.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are\nmet:\n\n * Redistributions of source code must retain the above copyright\n notice, this list of conditions and the following disclaimer.\n\n * Redistributions in binary form must reproduce the above\n copyright notice, this list of conditions and the following\n disclaimer in the documentation and/or other materials provided\n with the distribution.\n\n * The names of the contributors may not be used to endorse or\n promote products derived from this software without specific\n prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\nLIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\nA PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\nOWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\nSPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\nLIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\nDATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\nTHEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\nOF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n*/\n\n#ifndef FXAA_REDUCE_MIN\n #define FXAA_REDUCE_MIN (1.0/ 128.0)\n#endif\n#ifndef FXAA_REDUCE_MUL\n #define FXAA_REDUCE_MUL (1.0 / 8.0)\n#endif\n#ifndef FXAA_SPAN_MAX\n #define FXAA_SPAN_MAX 8.0\n#endif\n\n//optimized version for mobile, where dependent\n//texture reads can be a bottleneck\nvec4 fxaa(sampler2D tex, vec2 fragCoord, vec2 resolution,\n vec2 v_rgbNW, vec2 v_rgbNE,\n vec2 v_rgbSW, vec2 v_rgbSE,\n vec2 v_rgbM) {\n vec4 color;\n mediump vec2 inverseVP = vec2(1.0 / resolution.x, 1.0 / resolution.y);\n vec3 rgbNW = texture2D(tex, v_rgbNW).xyz;\n vec3 rgbNE = texture2D(tex, v_rgbNE).xyz;\n vec3 rgbSW = texture2D(tex, v_rgbSW).xyz;\n vec3 rgbSE = texture2D(tex, v_rgbSE).xyz;\n vec4 texColor = texture2D(tex, v_rgbM);\n vec3 rgbM = texColor.xyz;\n vec3 luma = vec3(0.299, 0.587, 0.114);\n float lumaNW = dot(rgbNW, luma);\n float lumaNE = dot(rgbNE, luma);\n float lumaSW = dot(rgbSW, luma);\n float lumaSE = dot(rgbSE, luma);\n float lumaM = dot(rgbM, luma);\n float lumaMin = min(lumaM, min(min(lumaNW, lumaNE), min(lumaSW, lumaSE)));\n float lumaMax = max(lumaM, max(max(lumaNW, lumaNE), max(lumaSW, lumaSE)));\n\n mediump vec2 dir;\n dir.x = -((lumaNW + lumaNE) - (lumaSW + lumaSE));\n dir.y = ((lumaNW + lumaSW) - (lumaNE + lumaSE));\n\n float dirReduce = max((lumaNW + lumaNE + lumaSW + lumaSE) *\n (0.25 * FXAA_REDUCE_MUL), FXAA_REDUCE_MIN);\n\n float rcpDirMin = 1.0 / (min(abs(dir.x), abs(dir.y)) + dirReduce);\n dir = min(vec2(FXAA_SPAN_MAX, FXAA_SPAN_MAX),\n max(vec2(-FXAA_SPAN_MAX, -FXAA_SPAN_MAX),\n dir * rcpDirMin)) * inverseVP;\n\n vec3 rgbA = 0.5 * (\n texture2D(tex, fragCoord * inverseVP + dir * (1.0 / 3.0 - 0.5)).xyz +\n texture2D(tex, fragCoord * inverseVP + dir * (2.0 / 3.0 - 0.5)).xyz);\n vec3 rgbB = rgbA * 0.5 + 0.25 * (\n texture2D(tex, fragCoord * inverseVP + dir * -0.5).xyz +\n texture2D(tex, fragCoord * inverseVP + dir * 0.5).xyz);\n\n float lumaB = dot(rgbB, luma);\n if ((lumaB < lumaMin) || (lumaB > lumaMax))\n color = vec4(rgbA, texColor.a);\n else\n color = vec4(rgbB, texColor.a);\n return color;\n}\n\n\nvarying vec2 vTextureCoord;\nvarying vec4 vColor;\nvarying vec2 vResolution;\n\n//texcoords computed in vertex step\n//to avoid dependent texture reads\nvarying vec2 v_rgbNW;\nvarying vec2 v_rgbNE;\nvarying vec2 v_rgbSW;\nvarying vec2 v_rgbSE;\nvarying vec2 v_rgbM;\n\nuniform sampler2D uSampler;\n\n\nvoid main(void){\n\n gl_FragColor = fxaa(uSampler, vTextureCoord * vResolution, vResolution, v_rgbNW, v_rgbNE, v_rgbSW, v_rgbSE, v_rgbM);\n\n}\n',{resolution:{type:"v2",value:{x:1,y:1}}})}var n=t("./AbstractFilter");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.applyFilter=function(t,e,r){var i=t.filterManager,n=this.getShader(t);i.applyFilter(n,e,r)}},{"./AbstractFilter":73}],75:[function(t,e,r){function i(t){var e=new o.Matrix;n.call(this,"attribute vec2 aVertexPosition;\nattribute vec2 aTextureCoord;\nattribute vec4 aColor;\n\nuniform mat3 projectionMatrix;\nuniform mat3 otherMatrix;\n\nvarying vec2 vMaskCoord;\nvarying vec2 vTextureCoord;\nvarying vec4 vColor;\n\nvoid main(void)\n{\n gl_Position = vec4((projectionMatrix * vec3(aVertexPosition, 1.0)).xy, 0.0, 1.0);\n vTextureCoord = aTextureCoord;\n vMaskCoord = ( otherMatrix * vec3( aTextureCoord, 1.0) ).xy;\n vColor = vec4(aColor.rgb * aColor.a, aColor.a);\n}\n","precision lowp float;\n\nvarying vec2 vMaskCoord;\nvarying vec2 vTextureCoord;\nvarying vec4 vColor;\n\nuniform sampler2D uSampler;\nuniform float alpha;\nuniform sampler2D mask;\n\nvoid main(void)\n{\n // check clip! this will stop the mask bleeding out from the edges\n vec2 text = abs( vMaskCoord - 0.5 );\n text = step(0.5, text);\n float clip = 1.0 - max(text.y, text.x);\n vec4 original = texture2D(uSampler, vTextureCoord);\n vec4 masky = texture2D(mask, vMaskCoord);\n original *= (masky.r * masky.a * alpha * clip);\n gl_FragColor = original;\n}\n",{mask:{type:"sampler2D",value:t._texture},alpha:{type:"f",value:1},otherMatrix:{type:"mat3",value:e.toArray(!0)}}),this.maskSprite=t,this.maskMatrix=e}var n=t("./AbstractFilter"),o=t("../../../math");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.applyFilter=function(t,e,r){var i=t.filterManager;this.uniforms.mask.value=this.maskSprite._texture,i.calculateMappedMatrix(e.frame,this.maskSprite,this.maskMatrix),this.uniforms.otherMatrix.value=this.maskMatrix.toArray(!0),this.uniforms.alpha.value=this.maskSprite.worldAlpha;var n=this.getShader(t);i.applyFilter(n,e,r)},Object.defineProperties(i.prototype,{map:{get:function(){return this.uniforms.mask.value},set:function(t){this.uniforms.mask.value=t}},offset:{get:function(){return this.uniforms.offset.value},set:function(t){this.uniforms.offset.value=t}}})},{"../../../math":55,"./AbstractFilter":73}],76:[function(t,e,r){function i(t){n.call(this,t),this.currentBlendMode=99999}var n=t("./WebGLManager");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.setBlendMode=function(t){if(this.currentBlendMode===t)return!1;this.currentBlendMode=t;var e=this.renderer.blendModes[this.currentBlendMode];return this.renderer.gl.blendFunc(e[0],e[1]),!0}},{"./WebGLManager":81}],77:[function(t,e,r){function i(t){n.call(this,t),this.filterStack=[],this.filterStack.push({renderTarget:t.currentRenderTarget,filter:[],bounds:null}),this.texturePool=[],this.textureSize=new h.Rectangle(0,0,t.width,t.height),this.currentFrame=null}var n=t("./WebGLManager"),o=t("../utils/RenderTarget"),s=t("../../../const"),a=t("../utils/Quad"),h=t("../../../math");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.onContextChange=function(){this.texturePool.length=0;var t=this.renderer.gl;this.quad=new a(t)},i.prototype.setFilterStack=function(t){this.filterStack=t},i.prototype.pushFilter=function(t,e){var r=t.filterArea?t.filterArea.clone():t.getBounds();r.x=0|r.x,r.y=0|r.y,r.width=0|r.width,r.height=0|r.height;var i=0|e[0].padding;if(r.x-=i,r.y-=i,r.width+=2*i,r.height+=2*i,this.renderer.currentRenderTarget.transform){var n=this.renderer.currentRenderTarget.transform;r.x+=n.tx,r.y+=n.ty,this.capFilterArea(r),r.x-=n.tx,r.y-=n.ty}else this.capFilterArea(r);if(r.width>0&&r.height>0){this.currentFrame=r;var o=this.getRenderTarget();this.renderer.setRenderTarget(o),o.clear(),this.filterStack.push({renderTarget:o,filter:e})}else this.filterStack.push({renderTarget:null,filter:e})},i.prototype.popFilter=function(){var t=this.filterStack.pop(),e=this.filterStack[this.filterStack.length-1],r=t.renderTarget;if(t.renderTarget){var i=e.renderTarget,n=this.renderer.gl;this.currentFrame=r.frame,this.quad.map(this.textureSize,r.frame),n.bindBuffer(n.ARRAY_BUFFER,this.quad.vertexBuffer),n.bindBuffer(n.ELEMENT_ARRAY_BUFFER,this.quad.indexBuffer);var o=t.filter;if(n.vertexAttribPointer(this.renderer.shaderManager.defaultShader.attributes.aVertexPosition,2,n.FLOAT,!1,0,0),n.vertexAttribPointer(this.renderer.shaderManager.defaultShader.attributes.aTextureCoord,2,n.FLOAT,!1,0,32),n.vertexAttribPointer(this.renderer.shaderManager.defaultShader.attributes.aColor,4,n.FLOAT,!1,0,64),this.renderer.blendModeManager.setBlendMode(s.BLEND_MODES.NORMAL),1===o.length)o[0].uniforms.dimensions&&(o[0].uniforms.dimensions.value[0]=this.renderer.width,o[0].uniforms.dimensions.value[1]=this.renderer.height,o[0].uniforms.dimensions.value[2]=this.quad.vertices[0],o[0].uniforms.dimensions.value[3]=this.quad.vertices[5]),o[0].applyFilter(this.renderer,r,i),this.returnRenderTarget(r);else{for(var a=r,h=this.getRenderTarget(!0),u=0;uthis.textureSize.width&&(t.width=this.textureSize.width-t.x),t.y+t.height>this.textureSize.height&&(t.height=this.textureSize.height-t.y)},i.prototype.resize=function(t,e){this.textureSize.width=t,this.textureSize.height=e;for(var r=0;re;++e)t._array[2*e]=o[e].x,t._array[2*e+1]=o[e].y;s.uniform2fv(i,t._array);break;case"v3v":for(t._array||(t._array=new Float32Array(3*o.length)),e=0,r=o.length;r>e;++e)t._array[3*e]=o[e].x,t._array[3*e+1]=o[e].y,t._array[3*e+2]=o[e].z;s.uniform3fv(i,t._array);break;case"v4v":for(t._array||(t._array=new Float32Array(4*o.length)),e=0,r=o.length;r>e;++e)t._array[4*e]=o[e].x,t._array[4*e+1]=o[e].y,t._array[4*e+2]=o[e].z,t._array[4*e+3]=o[e].w;s.uniform4fv(i,t._array);break;case"t":case"sampler2D":if(!t.value||!t.value.baseTexture.hasLoaded)break;s.activeTexture(s["TEXTURE"+this.textureCount]);var a=t.value.baseTexture._glTextures[s.id];a||(this.initSampler2D(t),a=t.value.baseTexture._glTextures[s.id]),s.bindTexture(s.TEXTURE_2D,a),s.uniform1i(t._location,this.textureCount),this.textureCount++;break;default:console.warn("Pixi.js Shader Warning: Unknown uniform type: "+t.type)}},i.prototype.syncUniforms=function(){this.textureCount=1;for(var t in this.uniforms)this.syncUniform(this.uniforms[t])},i.prototype.initSampler2D=function(t){var e=this.gl,r=t.value.baseTexture;if(r.hasLoaded)if(t.textureData){var i=t.textureData;r._glTextures[e.id]=e.createTexture(),e.bindTexture(e.TEXTURE_2D,r._glTextures[e.id]),e.pixelStorei(e.UNPACK_PREMULTIPLY_ALPHA_WEBGL,r.premultipliedAlpha),e.texImage2D(e.TEXTURE_2D,0,i.luminance?e.LUMINANCE:e.RGBA,e.RGBA,e.UNSIGNED_BYTE,r.source),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MAG_FILTER,i.magFilter?i.magFilter:e.LINEAR),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MIN_FILTER,i.wrapS?i.wrapS:e.CLAMP_TO_EDGE),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,i.wrapS?i.wrapS:e.CLAMP_TO_EDGE),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,i.wrapT?i.wrapT:e.CLAMP_TO_EDGE)}else this.shaderManager.renderer.updateTexture(r)},i.prototype.destroy=function(){this.gl.deleteProgram(this.program),this.gl=null,this.uniforms=null,this.attributes=null,this.vertexSrc=null,this.fragmentSrc=null},i.prototype._glCompile=function(t,e){var r=this.gl.createShader(t);return this.gl.shaderSource(r,e),this.gl.compileShader(r),this.gl.getShaderParameter(r,this.gl.COMPILE_STATUS)?r:(console.log(this.gl.getShaderInfoLog(r)),null)}},{"../../../utils":105}],85:[function(t,e,r){function i(t,e,r,o,s){var a={uSampler:{type:"sampler2D",value:0},projectionMatrix:{type:"mat3",value:new Float32Array([1,0,0,0,1,0,0,0,1])}};if(o)for(var h in o)a[h]=o[h];var u={aVertexPosition:0,aTextureCoord:0,aColor:0};if(s)for(var l in s)u[l]=s[l];e=e||i.defaultVertexSrc,r=r||i.defaultFragmentSrc,n.call(this,t,e,r,a,u)}var n=t("./Shader");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.defaultVertexSrc=["precision lowp float;","attribute vec2 aVertexPosition;","attribute vec2 aTextureCoord;","attribute vec4 aColor;","uniform mat3 projectionMatrix;","varying vec2 vTextureCoord;","varying vec4 vColor;","void main(void){"," gl_Position = vec4((projectionMatrix * vec3(aVertexPosition, 1.0)).xy, 0.0, 1.0);"," vTextureCoord = aTextureCoord;"," vColor = vec4(aColor.rgb * aColor.a, aColor.a);","}"].join("\n"),i.defaultFragmentSrc=["precision lowp float;","varying vec2 vTextureCoord;","varying vec4 vColor;","uniform sampler2D uSampler;","void main(void){"," gl_FragColor = texture2D(uSampler, vTextureCoord) * vColor ;","}"].join("\n")},{"./Shader":84}],86:[function(t,e,r){function i(t){vertexSrc=i.defaultVertexSrc,fragmentSrc=i.defaultFragmentSrc,n.call(this,t,vertexSrc,fragmentSrc)}var n=t("pixi-gl-core").GLShader;i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.defaultVertexSrc=["precision lowp float;","attribute vec2 aVertexPosition;","attribute vec2 aTextureCoord;","attribute vec4 aColor;","uniform mat3 projectionMatrix;","varying vec2 vTextureCoord;","varying vec4 vColor;","void main(void){"," gl_Position = vec4((projectionMatrix * vec3(aVertexPosition, 1.0)).xy, 0.0, 1.0);"," vTextureCoord = aTextureCoord;"," vColor = vec4(aColor.rgb * aColor.a, aColor.a);","}"].join("\n"),i.defaultFragmentSrc=["precision lowp float;","varying vec2 vTextureCoord;","varying vec4 vColor;","uniform sampler2D uSampler;","void main(void){"," gl_FragColor = texture2D(uSampler, vTextureCoord) * vColor ;","}"].join("\n")},{"pixi-gl-core":1}],87:[function(t,e,r){function i(t){n.call(this,t)}var n=t("../managers/WebGLManager");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.start=function(){},i.prototype.stop=function(){this.flush()},i.prototype.flush=function(){},i.prototype.render=function(t){}},{"../managers/WebGLManager":81}],88:[function(t,e,r){function i(t){this.gl=t,this.vertices=new Float32Array([0,0,200,0,200,200,0,200]),this.uvs=new Float32Array([0,0,1,0,1,1,0,1]),this.colors=new Float32Array([1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]),this.indices=new Uint16Array([0,1,2,0,3,2]),this.vertexBuffer=t.createBuffer(),this.indexBuffer=t.createBuffer(),t.bindBuffer(t.ARRAY_BUFFER,this.vertexBuffer),t.bufferData(t.ARRAY_BUFFER,128,t.DYNAMIC_DRAW),t.bindBuffer(t.ELEMENT_ARRAY_BUFFER,this.indexBuffer),t.bufferData(t.ELEMENT_ARRAY_BUFFER,this.indices,t.STATIC_DRAW),this.upload()}i.prototype.constructor=i,i.prototype.map=function(t,e){var r=0,i=0;this.uvs[0]=r,this.uvs[1]=i,this.uvs[2]=r+e.width/t.width,this.uvs[3]=i,this.uvs[4]=r+e.width/t.width,this.uvs[5]=i+e.height/t.height,this.uvs[6]=r,this.uvs[7]=i+e.height/t.height,r=e.x,i=e.y,this.vertices[0]=r,this.vertices[1]=i,this.vertices[2]=r+e.width,this.vertices[3]=i,this.vertices[4]=r+e.width,this.vertices[5]=i+e.height,this.vertices[6]=r,this.vertices[7]=i+e.height,this.upload()},i.prototype.upload=function(){var t=this.gl;t.bindBuffer(t.ARRAY_BUFFER,this.vertexBuffer),t.bufferSubData(t.ARRAY_BUFFER,0,this.vertices),t.bufferSubData(t.ARRAY_BUFFER,32,this.uvs),t.bufferSubData(t.ARRAY_BUFFER,64,this.colors)},i.prototype.destroy=function(){var t=this.gl;t.deleteBuffer(this.vertexBuffer),t.deleteBuffer(this.indexBuffer)},e.exports=i},{}],89:[function(t,e,r){var i=t("../../../math"),n=(t("../../../utils"),t("../../../const")),o=t("pixi-gl-core").GLTexture,s=t("pixi-gl-core").GLFramebuffer,a=t("./StencilMaskStack"),h=function(t,e,r,h,u,l){if(this.gl=t,this.frameBuffer=null,this.texture=null,this.clearColor=[0,0,0,0],this.size=new i.Rectangle(0,0,1,1),this.resolution=u||n.RESOLUTION,this.projectionMatrix=new i.Matrix,this.transform=null,this.frame=null,this.stencilBuffer=null,this.stencilMaskStack=new a,this.filterStack=[{renderTarget:this,filter:[],bounds:this.size}],this.scaleMode=h||n.SCALE_MODES.DEFAULT,this.root=l,this.frameBuffer=s.createRGBA(t,100,100),this.frameBuffer&&this.frameBuffer.unbind(),this.root)this.frameBuffer.framebuffer=null;else{var c=new o(t);c.enableLinearScaling(),c.enableWrapClamp(),this.frameBuffer.enableTexture(c),this.texture=c.texture}this.resize(e,r)};h.prototype.constructor=h,e.exports=h,h.prototype.clear=function(t){var e=t||this.clearColor;this.frameBuffer.clear(e[0],e[1],e[2],e[3])},h.prototype.attachStencilBuffer=function(){this.root||this.frameBuffer.enableStencil()},h.prototype.activate=function(){var t=this.gl;this.frameBuffer.bind();var e=this.frame||this.size;this.calculateProjection(e),this.transform&&this.projectionMatrix.append(this.transform),t.viewport(0,0,e.width*this.resolution,e.height*this.resolution)},h.prototype.calculateProjection=function(t){var e=this.projectionMatrix;e.identity(),this.root?(e.a=1/t.width*2,e.d=-1/t.height*2,e.tx=-1-t.x*e.a,e.ty=1-t.y*e.d):(e.a=1/t.width*2,e.d=1/t.height*2,e.tx=-1-t.x*e.a,e.ty=-1-t.y*e.d)},h.prototype.resize=function(t,e){if(t=0|t,e=0|e,this.size.width!==t||this.size.height!==e){this.size.width=t,this.size.height=e,this.frameBuffer.resize(t*this.resolution,e*this.resolution);var r=this.frame||this.size;this.calculateProjection(r)}},h.prototype.destroy=function(){this.gl;this.frameBuffer.destroy(),this.frameBuffer=null,this.texture=null}},{"../../../const":38,"../../../math":55,"../../../utils":105,"./StencilMaskStack":90,"pixi-gl-core":1}],90:[function(t,e,r){function i(){this.stencilStack=[],this.reverse=!0,this.count=0}i.prototype.constructor=i,e.exports=i},{}],91:[function(t,e,r){function i(t,e){return e=e||{},e[CONST.BLEND_MODES.NORMAL]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.ADD]=[t.SRC_ALPHA,t.DST_ALPHA],e[CONST.BLEND_MODES.MULTIPLY]=[t.DST_COLOR,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.SCREEN]=[t.SRC_ALPHA,t.ONE],e[CONST.BLEND_MODES.OVERLAY]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.DARKEN]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.LIGHTEN]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.COLOR_DODGE]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.COLOR_BURN]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.HARD_LIGHT]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.SOFT_LIGHT]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.DIFFERENCE]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.EXCLUSION]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.HUE]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.SATURATION]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.COLOR]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.LUMINOSITY]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e}CONST=t("../../../const"),e.exports=i},{"../../../const":38}],92:[function(t,e,r){function i(t,e){e=e||{},e[CONST.DRAW_MODES.POINTS]=t.POINTS,e[CONST.DRAW_MODES.LINES]=t.LINES,e[CONST.DRAW_MODES.LINE_LOOP]=t.LINE_LOOP,e[CONST.DRAW_MODES.LINE_STRIP]=t.LINE_STRIP,e[CONST.DRAW_MODES.TRIANGLES]=t.TRIANGLES,e[CONST.DRAW_MODES.TRIANGLE_STRIP]=t.TRIANGLE_STRIP,e[CONST.DRAW_MODES.TRIANGLE_FAN]=t.TRIANGLE_FAN}CONST=t("../../../const"),e.exports=i},{"../../../const":38}],93:[function(t,e,r){function i(t){s.call(this),this.anchor=new n.Point,this._texture=null,this._width=0,this._height=0,this.tint=16777215,this.blendMode=u.BLEND_MODES.NORMAL,this.shader=null,this.cachedTint=16777215,this.texture=t||o.EMPTY,this.textureDirty=!0,this.vertexDirty=!0,this.vertexData=new Float32Array(8)}var n=t("../math"),o=t("../textures/Texture"),s=t("../display/Container"),a=t("../renderers/canvas/utils/CanvasTinter"),h=t("../utils"),u=t("../const"),l=new n.Point;i.prototype=Object.create(s.prototype),i.prototype.constructor=i,e.exports=i,Object.defineProperties(i.prototype,{width:{get:function(){return Math.abs(this.scale.x)*this.texture._frame.width},set:function(t){var e=h.sign(this.scale.x)||1;this.scale.x=e*t/this.texture._frame.width,this._width=t}},height:{get:function(){return Math.abs(this.scale.y)*this.texture._frame.height},set:function(t){var e=h.sign(this.scale.y)||1;this.scale.y=e*t/this.texture._frame.height,this._height=t}},texture:{get:function(){return this._texture},set:function(t){this._texture!==t&&(this._texture=t,this.cachedTint=16777215,this.textureDirty=!0,t&&(t.baseTexture.hasLoaded?this._onTextureUpdate():t.once("update",this._onTextureUpdate,this)))}}}),i.prototype._onTextureUpdate=function(){this.textureDirty=!0,this._width&&(this.scale.x=h.sign(this.scale.x)*this._width/this.texture.frame.width),this._height&&(this.scale.y=h.sign(this.scale.y)*this._height/this.texture.frame.height)},i.prototype.caclulateVertices=function(){var t,e,r,i,n=this._texture,o=this.worldTransform,s=o.a,a=o.b,h=o.c,u=o.d,l=o.tx,c=o.ty,p=this.vertexData,d=n.trim;d?(e=d.x-this.anchor.x*d.width,t=e+n.crop.width,i=d.y-this.anchor.y*d.height,r=i+n.crop.height):(t=n._frame.width*(1-this.anchor.x),e=n._frame.width*-this.anchor.x,r=n._frame.height*(1-this.anchor.y),i=n._frame.height*-this.anchor.y),p[0]=s*e+h*i+l,p[1]=u*i+a*e+c,p[2]=s*t+h*i+l,p[3]=u*i+a*t+c,p[4]=s*t+h*r+l,p[5]=u*r+a*t+c,p[6]=s*e+h*r+l,p[7]=u*r+a*e+c},i.prototype._renderWebGL=function(t){this.textureDirty&&(this.textureDirty=!1,this._onTextureUpdate(),this.vertexDirty=!0),this.vertexDirty&&(this.vertexDirty=!1,this.caclulateVertices()),t.setObjectRenderer(t.plugins.sprite),t.plugins.sprite.render(this)},i.prototype.getBounds=function(t){if(!this._currentBounds){this.vertexDirty&&(this.vertexDirty=!1,this.caclulateVertices());var e,r,i,n,o=this.vertexData,s=o[0],a=o[1],h=o[2],u=o[3],l=o[4],c=o[5],p=o[6],d=o[7];if(e=s,e=e>h?h:e,e=e>l?l:e,e=e>p?p:e,i=a,i=i>u?u:i,i=i>c?c:i,i=i>d?d:i,r=s,r=h>r?h:r,r=l>r?l:r,r=p>r?p:r,n=a,n=u>n?u:n,n=c>n?c:n,n=d>n?d:n,this.children.length){var f=this.containerGetBounds();w0=f.x,w1=f.x+f.width,h0=f.y,h1=f.y+f.height,e=ew1?r:w1,n=n>h1?n:h1}var v=this._bounds;v.x=e,v.width=r-e,v.y=i,v.height=n-i,this._currentBounds=v}return this._currentBounds},i.prototype.getLocalBounds=function(){return this._bounds.x=-this._texture._frame.width*this.anchor.x,this._bounds.y=-this._texture._frame.height*this.anchor.y,this._bounds.width=this._texture._frame.width,this._bounds.height=this._texture._frame.height,this._bounds},i.prototype.containsPoint=function(t){this.worldTransform.applyInverse(t,l);var e,r=this._texture._frame.width,i=this._texture._frame.height,n=-r*this.anchor.x;return l.x>n&&l.xe&&l.y=this.size&&this.flush(),t.texture._uvs){var e,r=t.texture.baseTexture,i=this.currentGroup;if(this.currentTexture!==r){if(this.currentTexture=r,!r._enabled){if(r._enabled=!0,r._id=this.textureCount,this.textureCount===this.MAX_TEXTUES){for(e=0;e>16)+(65280&t.tint)+((255&t.tint)<<16)+(255*t.worldAlpha<<24),u=t.texture._uvs.uvs_uint32;s[n++]=a[0],s[n++]=a[1],this.uvs[n++]=u[0],o[n++]=h,s[n++]=r._id,s[n++]=a[2],s[n++]=a[3],this.uvs[n++]=u[1],o[n++]=h,s[n++]=r._id,s[n++]=a[4],s[n++]=a[5],this.uvs[n++]=u[2],o[n++]=h,s[n++]=r._id,s[n++]=a[6],s[n++]=a[7],this.uvs[n++]=u[3],o[n++]=h,s[n++]=r._id}},i.prototype.flush=function(){if(0!==this.currentIndex){var t=this.renderer.gl;this.currentGroup.size=this.currentIndex-this.currentGroup.start;for(var e=0;e.5*this.size)this.vertexBuffer.upload(this.vertices,0,!0);else{var r=this.positions.subarray(0,this.currentIndex*this.vertByteSize);this.vertexBuffer.upload(r,0,!0)}for(this.renderer.bindShader(this._shader),this.renderer.blendModeManager.setBlendMode(0),e=0;eu;u++)h[u]=u;return a.bind(),a.uniforms.uSamplers=h,a}function n(t){var e="vec4 getSampleFromArray(sampler2D textures[%%], int ndx, vec2 uv) {\n\nvec4 color;";e+="\n",e+="\n";for(var r=0;t>r;r++)r>0&&(e+="\nelse "),t-1>r&&(e+="if(ndx == "+r+")"),e+="\n{",e+="\n color = texture2D(textures["+r+"], uv);",e+="\n}";return e+="\n",e+="\n",e+="return color;",e+="\n}"}var o=t("pixi-gl-core").GLShader,s=["varying vec2 vTextureCoord;","varying vec4 vColor;","varying float vTextureId;","uniform sampler2D uSamplers[%%];","void main(void){","gl_FragColor = getSampleFromArray(uSamplers, int(vTextureId), vTextureCoord) * vColor;","}"].join("\n");e.exports=i},{"pixi-gl-core":1}],96:[function(t,e,r){function i(t,e,r){this.canvas=document.createElement("canvas"),this.context=this.canvas.getContext("2d"),this.resolution=r||h.RESOLUTION,this._text=null,this._style=null;var i=o.fromCanvas(this.canvas);i.trim=new s.Rectangle,n.call(this,i),this.text=t,this.style=e}var n=t("../sprites/Sprite"),o=t("../textures/Texture"),s=t("../math"),a=t("../utils"),h=t("../const");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.fontPropertiesCache={},i.fontPropertiesCanvas=document.createElement("canvas"),i.fontPropertiesContext=i.fontPropertiesCanvas.getContext("2d"),Object.defineProperties(i.prototype,{width:{get:function(){return this.dirty&&this.updateText(),this.scale.x*this._texture._frame.width},set:function(t){this.scale.x=t/this._texture._frame.width,this._width=t}},height:{get:function(){return this.dirty&&this.updateText(),this.scale.y*this._texture._frame.height},set:function(t){this.scale.y=t/this._texture._frame.height,this._height=t}},style:{get:function(){return this._style},set:function(t){t=t||{},"number"==typeof t.fill&&(t.fill=a.hex2string(t.fill)),"number"==typeof t.stroke&&(t.stroke=a.hex2string(t.stroke)),"number"==typeof t.dropShadowColor&&(t.dropShadowColor=a.hex2string(t.dropShadowColor)),t.font=t.font||"bold 20pt Arial",t.fill=t.fill||"black",t.align=t.align||"left",t.stroke=t.stroke||"black",t.strokeThickness=t.strokeThickness||0,t.wordWrap=t.wordWrap||!1,t.wordWrapWidth=t.wordWrapWidth||100,t.dropShadow=t.dropShadow||!1,t.dropShadowColor=t.dropShadowColor||"#000000",t.dropShadowAngle=void 0!==t.dropShadowAngle?t.dropShadowAngle:Math.PI/6,t.dropShadowDistance=void 0!==t.dropShadowDistance?t.dropShadowDistance:5,t.dropShadowBlur=void 0!==t.dropShadowBlur?t.dropShadowBlur:0,t.padding=t.padding||0,t.textBaseline=t.textBaseline||"alphabetic",t.lineJoin=t.lineJoin||"miter",t.miterLimit=t.miterLimit||10,this._style=t,this.dirty=!0}},text:{get:function(){return this._text},set:function(t){t=t.toString()||" ",this._text!==t&&(this._text=t,this.dirty=!0)}}}),i.prototype.updateText=function(){var t=this._style;this.context.font=t.font;for(var e=t.wordWrap?this.wordWrap(this._text):this._text,r=e.split(/(?:\r\n|\r|\n)/),i=new Array(r.length),n=0,o=this.determineFontProperties(t.font),s=0;s0?(this.context.shadowColor=t.dropShadowColor,this.context.shadowBlur=t.dropShadowBlur):this.context.fillStyle=t.dropShadowColor;var d=Math.cos(t.dropShadowAngle)*t.dropShadowDistance,f=Math.sin(t.dropShadowAngle)*t.dropShadowDistance;for(s=0;sh;h++){for(u=0;p>u;u+=4)if(255!==l[d+u]){f=!0;break}if(f)break;d+=p}for(e.ascent=s-h,d=c-p,f=!1,h=a;h>s;h--){for(u=0;p>u;u+=4)if(255!==l[d+u]){f=!0;break}if(f)break;d-=p}e.descent=h-s,e.fontSize=e.ascent+e.descent,i.fontPropertiesCache[t]=e}return e},i.prototype.wordWrap=function(t){for(var e="",r=t.split("\n"),i=this._style.wordWrapWidth,n=0;no?(a>0&&(e+="\n"),e+=s[a],o=i-h):(o-=u,e+=" "+s[a])}n0&&e>0,this.width=this._frame.width=this.crop.width=t,this.height=this._frame.height=this.crop.height=e,r&&(this.baseTexture.width=this.width,this.baseTexture.height=this.height),this.valid&&(this.textureBuffer.resize(this.width,this.height),this.filterManager&&this.filterManager.resize(this.width,this.height)))},i.prototype.clear=function(){this.valid&&(this.renderer.type===l.RENDERER_TYPE.WEBGL&&this.renderer.gl.bindFramebuffer(this.renderer.gl.FRAMEBUFFER,this.textureBuffer.frameBuffer),this.textureBuffer.clear())},i.prototype.renderWebGL=function(t,e,r,i){if(this.valid){if(i=void 0!==i?i:!0,this.textureBuffer.transform=e,this.textureBuffer.activate(),t.worldAlpha=1,i){t.worldTransform.identity(),t.currentBounds=null;var n,o,s=t.children;for(n=0,o=s.length;o>n;++n)s[n].updateTransform()}var a=this.renderer.filterManager;this.renderer.filterManager=this.filterManager,this.renderer.renderDisplayObject(t,this.textureBuffer,r),this.renderer.filterManager=a}},i.prototype.renderCanvas=function(t,e,r,i){if(this.valid){i=!!i;var n=c;n.identity(),e&&n.append(e);var o=t.worldTransform;t.worldTransform=n,t.worldAlpha=1;var s,a,h=t.children;for(s=0,a=h.length;a>s;++s)h[s].updateTransform();r&&this.textureBuffer.clear();var u=this.textureBuffer.context,l=this.renderer.resolution;this.renderer.resolution=this.resolution,this.renderer.renderDisplayObject(t,u),this.renderer.resolution=l,t.worldTransform===n&&(t.worldTransform=o)}},i.prototype.destroy=function(){o.prototype.destroy.call(this,!0),this.textureBuffer.destroy(),this.filterManager&&this.filterManager.destroy(),this.renderer=null},i.prototype.getImage=function(){var t=new Image;return t.src=this.getBase64(),t},i.prototype.getBase64=function(){return this.getCanvas().toDataURL()},i.prototype.getCanvas=function(){if(this.renderer.type===l.RENDERER_TYPE.WEBGL){var t=this.renderer.gl,e=this.textureBuffer.size.width,r=this.textureBuffer.size.height,i=new Uint8Array(4*e*r);t.bindFramebuffer(t.FRAMEBUFFER,this.textureBuffer.frameBuffer),t.readPixels(0,0,e,r,t.RGBA,t.UNSIGNED_BYTE,i),t.bindFramebuffer(t.FRAMEBUFFER,null);var n=new h(e,r),o=n.context.getImageData(0,0,e,r);return o.data.set(i),n.context.putImageData(o,0,0),n.canvas}return this.textureBuffer.canvas},i.prototype.getPixels=function(){var t,e;if(this.renderer.type===l.RENDERER_TYPE.WEBGL){var r=this.renderer.gl;t=this.textureBuffer.size.width,e=this.textureBuffer.size.height;var i=new Uint8Array(4*t*e);return r.bindFramebuffer(r.FRAMEBUFFER,this.textureBuffer.frameBuffer),r.readPixels(0,0,t,e,r.RGBA,r.UNSIGNED_BYTE,i),r.bindFramebuffer(r.FRAMEBUFFER,null),i}return t=this.textureBuffer.canvas.width,e=this.textureBuffer.canvas.height,this.textureBuffer.canvas.getContext("2d").getImageData(0,0,t,e).data},i.prototype.getPixel=function(t,e){if(this.renderer.type===l.RENDERER_TYPE.WEBGL){var r=this.renderer.gl,i=new Uint8Array(4);return r.bindFramebuffer(r.FRAMEBUFFER,this.textureBuffer.frameBuffer),r.readPixels(t,e,1,1,r.RGBA,r.UNSIGNED_BYTE,i),r.bindFramebuffer(r.FRAMEBUFFER,null),i}return this.textureBuffer.canvas.getContext("2d").getImageData(t,e,1,1).data}},{"../const":38,"../math":55,"../renderers/canvas/utils/CanvasBuffer":67,"../renderers/webgl/managers/FilterManager":77,"../renderers/webgl/utils/RenderTarget":89,"./BaseTexture":97,"./Texture":99}],99:[function(t,e,r){function i(t,e,r,n,o){a.call(this),this.noFrame=!1,e||(this.noFrame=!0,e=new h.Rectangle(0,0,1,1)),t instanceof i&&(t=t.baseTexture),this.baseTexture=t,this._frame=e,this.trim=n,this.valid=!1,this.requiresUpdate=!1,this._uvs=null,this.width=0,this.height=0,this.crop=r||e,this.rotate=!!o,t.hasLoaded?(this.noFrame&&(e=new h.Rectangle(0,0,t.width,t.height),t.on("update",this.onBaseTextureUpdated,this)),this.frame=e):t.once("loaded",this.onBaseTextureLoaded,this)}var n=t("./BaseTexture"),o=t("./VideoBaseTexture"),s=t("./TextureUvs"),a=t("eventemitter3"),h=t("../math"),u=t("../utils");i.prototype=Object.create(a.prototype),i.prototype.constructor=i,e.exports=i,Object.defineProperties(i.prototype,{frame:{get:function(){return this._frame},set:function(t){if(this._frame=t,this.noFrame=!1,this.width=t.width,this.height=t.height,!this.trim&&!this.rotate&&(t.x+t.width>this.baseTexture.width||t.y+t.height>this.baseTexture.height))throw new Error("Texture Error: frame does not fit inside the base Texture dimensions "+this);this.valid=t&&t.width&&t.height&&this.baseTexture.hasLoaded,this.trim?(this.width=this.trim.width,this.height=this.trim.height,this._frame.width=this.trim.width,this._frame.height=this.trim.height):this.crop=t,this.valid&&this._updateUvs()}}}),i.prototype.update=function(){this.baseTexture.update()},i.prototype.onBaseTextureLoaded=function(t){this.noFrame?this.frame=new h.Rectangle(0,0,t.width,t.height):this.frame=this._frame,this.emit("update",this)},i.prototype.onBaseTextureUpdated=function(t){this._frame.width=t.width,this._frame.height=t.height,this.emit("update",this)},i.prototype.destroy=function(t){this.baseTexture&&(t&&this.baseTexture.destroy(),this.baseTexture.off("update",this.onBaseTextureUpdated,this),this.baseTexture.off("loaded",this.onBaseTextureLoaded,this),this.baseTexture=null),this._frame=null,this._uvs=null,this.trim=null,this.crop=null,this.valid=!1,this.off("dispose",this.dispose,this),this.off("update",this.update,this)},i.prototype.clone=function(){return new i(this.baseTexture,this.frame,this.crop,this.trim,this.rotate)},i.prototype._updateUvs=function(){this._uvs||(this._uvs=new s),this._uvs.set(this.crop,this.baseTexture,this.rotate)},i.fromImage=function(t,e,r){var o=u.TextureCache[t];return o||(o=new i(n.fromImage(t,e,r)),u.TextureCache[t]=o),o},i.fromFrame=function(t){var e=u.TextureCache[t];if(!e)throw new Error('The frameId "'+t+'" does not exist in the texture cache');return e},i.fromCanvas=function(t,e){return new i(n.fromCanvas(t,e))},i.fromVideo=function(t,e){return"string"==typeof t?i.fromVideoUrl(t,e):new i(o.fromVideo(t,e))},i.fromVideoUrl=function(t,e){return new i(o.fromUrl(t,e))},i.addTextureToCache=function(t,e){u.TextureCache[e]=t},i.removeTextureFromCache=function(t){var e=u.TextureCache[t];return delete u.TextureCache[t],delete u.BaseTextureCache[t],e},i.EMPTY=new i(new n)},{"../math":55,"../utils":105,"./BaseTexture":97,"./TextureUvs":100,"./VideoBaseTexture":101,eventemitter3:25}],100:[function(t,e,r){function i(){this.x0=0,this.y0=0,this.x1=1,this.y1=0,this.x2=1,this.y2=1,this.x3=0,this.y3=1,this.xy0_uint32=0,this.xy1_uint32=0,this.xy2_uint32=0,this.xy3_uint32=0,this.uvs_uint32=new Uint32Array(4)}e.exports=i,i.prototype.set=function(t,e,r){var i=e.width,n=e.height;r?(this.x0=(t.x+t.height)/i,this.y0=t.y/n,this.x1=(t.x+t.height)/i,this.y1=(t.y+t.width)/n,this.x2=t.x/i,this.y2=(t.y+t.width)/n,this.x3=t.x/i,this.y3=t.y/n):(this.x0=t.x/i,this.y0=t.y/n,this.x1=(t.x+t.width)/i,this.y1=t.y/n,this.x2=(t.x+t.width)/i,this.y2=(t.y+t.height)/n,this.x3=t.x/i,this.y3=(t.y+t.height)/n),this.uvs_uint32[0]=(65535*this.y0&65535)<<16|65535*this.x0&65535,this.uvs_uint32[1]=(65535*this.y1&65535)<<16|65535*this.x1&65535,this.uvs_uint32[2]=(65535*this.y2&65535)<<16|65535*this.x2&65535,this.uvs_uint32[3]=(65535*this.y3&65535)<<16|65535*this.x3&65535}},{}],101:[function(t,e,r){function i(t,e){if(!t)throw new Error("No video source element specified.");(t.readyState===t.HAVE_ENOUGH_DATA||t.readyState===t.HAVE_FUTURE_DATA)&&t.width&&t.height&&(t.complete=!0),o.call(this,t,e),this.autoUpdate=!1,this._onUpdate=this._onUpdate.bind(this),this._onCanPlay=this._onCanPlay.bind(this),t.complete||(t.addEventListener("canplay",this._onCanPlay),t.addEventListener("canplaythrough",this._onCanPlay),t.addEventListener("play",this._onPlayStart.bind(this)),t.addEventListener("pause",this._onPlayStop.bind(this))),this.__loaded=!1}function n(t,e){e||(e="video/"+t.substr(t.lastIndexOf(".")+1));var r=document.createElement("source");return r.src=t,r.type=e,r}var o=t("./BaseTexture"),s=t("../utils");i.prototype=Object.create(o.prototype),i.prototype.constructor=i,e.exports=i,i.prototype._onUpdate=function(){this.autoUpdate&&(window.requestAnimationFrame(this._onUpdate),this.update())},i.prototype._onPlayStart=function(){this.autoUpdate||(window.requestAnimationFrame(this._onUpdate),this.autoUpdate=!0)},i.prototype._onPlayStop=function(){this.autoUpdate=!1},i.prototype._onCanPlay=function(){this.hasLoaded=!0,this.source&&(this.source.removeEventListener("canplay",this._onCanPlay),this.source.removeEventListener("canplaythrough",this._onCanPlay),this.width=this.source.videoWidth,this.height=this.source.videoHeight,this.source.play(),this.__loaded||(this.__loaded=!0,this.emit("loaded",this)))},i.prototype.destroy=function(){this.source&&this.source._pixiId&&(delete s.BaseTextureCache[this.source._pixiId],delete this.source._pixiId),o.prototype.destroy.call(this)},i.fromVideo=function(t,e){t._pixiId||(t._pixiId="video_"+s.uid());var r=s.BaseTextureCache[t._pixiId];return r||(r=new i(t,e),s.BaseTextureCache[t._pixiId]=r),r},i.fromUrl=function(t,e){var r=document.createElement("video");if(Array.isArray(t))for(var o=0;othis._maxElapsedMS&&(e=this._maxElapsedMS),this.deltaTime=e*n.TARGET_FPMS*this.speed,this._emitter.emit(s,this.deltaTime),this.lastTime=t},e.exports=i},{"../const":38,eventemitter3:25}],103:[function(t,e,r){var i=t("./Ticker"),n=new i;n.autoStart=!0,e.exports={shared:n,Ticker:i}},{"./Ticker":102}],104:[function(t,e,r){var i=function(t){for(var e=6*t,r=new Uint16Array(e),i=0,n=0;e>i;i+=6,n+=4)r[i+0]=n+0,r[i+1]=n+1,r[i+2]=n+2,r[i+3]=n+0,r[i+4]=n+2,r[i+5]=n+3;return r};e.exports=i},{}],105:[function(t,e,r){var i=t("../const"),n=e.exports={_uid:0,_saidHello:!1,EventEmitter:t("eventemitter3"),pluginTarget:t("./pluginTarget"),async:t("async"),uid:function(){return++n._uid},hex2rgb:function(t,e){return e=e||[],e[0]=(t>>16&255)/255,e[1]=(t>>8&255)/255,e[2]=(255&t)/255,e},hex2string:function(t){return t=t.toString(16),t="000000".substr(0,6-t.length)+t,"#"+t},rgb2hex:function(t){return(255*t[0]<<16)+(255*t[1]<<8)+255*t[2]},canUseNewCanvasBlendModes:function(){if("undefined"==typeof document)return!1;var t="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAQAAAABAQMAAADD8p2OAAAAA1BMVEX/",e="AAAACklEQVQI12NgAAAAAgAB4iG8MwAAAABJRU5ErkJggg==",r=new Image;r.src=t+"AP804Oa6"+e;var i=new Image;i.src=t+"/wCKxvRF"+e;var n=document.createElement("canvas");n.width=6,n.height=1;var o=n.getContext("2d");o.globalCompositeOperation="multiply",o.drawImage(r,0,0),o.drawImage(i,2,0);var s=o.getImageData(2,0,1,1).data;return 255===s[0]&&0===s[1]&&0===s[2]},getNextPowerOfTwo:function(t){if(t>0&&0===(t&t-1))return t;for(var e=1;t>e;)e<<=1;return e},isPowerOfTwo:function(t,e){return t>0&&0===(t&t-1)&&e>0&&0===(e&e-1)},getResolutionOfUrl:function(t){var e=i.RETINA_PREFIX.exec(t);return e?parseFloat(e[1]):1},sayHello:function(t){if(!n._saidHello){if(navigator.userAgent.toLowerCase().indexOf("chrome")>-1){var e=["\n %c %c %c Pixi.js "+i.VERSION+" - ✰ "+t+" ✰ %c %c http://www.pixijs.com/ %c %c ♥%c♥%c♥ \n\n","background: #ff66a5; padding:5px 0;","background: #ff66a5; padding:5px 0;","color: #ff66a5; background: #030307; padding:5px 0;","background: #ff66a5; padding:5px 0;","background: #ffc3dc; padding:5px 0;","background: #ff66a5; padding:5px 0;","color: #ff2424; background: #fff; padding:5px 0;","color: #ff2424; background: #fff; padding:5px 0;","color: #ff2424; background: #fff; padding:5px 0;"];window.console.log.apply(console,e)}else window.console&&window.console.log("Pixi.js "+i.VERSION+" - "+t+" - http://www.pixijs.com/");n._saidHello=!0}},isWebGLSupported:function(){var t={stencil:!0};try{if(!window.WebGLRenderingContext)return!1;var e=document.createElement("canvas"),r=e.getContext("webgl",t)||e.getContext("experimental-webgl",t);return!(!r||!r.getContextAttributes().stencil)}catch(i){return!1}},sign:function(t){return t?0>t?-1:1:0},removeItems:function(t,e,r){var i=t.length;if(!(e>=i||0===r)){r=e+r>i?i-e:r;for(var n=e,o=i-r;o>n;++n)t[n]=t[n+r];t.length=o}},TextureCache:{},BaseTextureCache:{}}},{"../const":38,"./pluginTarget":106,async:16,eventemitter3:25}],106:[function(t,e,r){function i(t){t.__plugins={},t.registerPlugin=function(e,r){t.__plugins[e]=r},t.prototype.initPlugins=function(){this.plugins=this.plugins||{};for(var e in t.__plugins)this.plugins[e]=new t.__plugins[e](this)},t.prototype.destroyPlugins=function(){for(var t in this.plugins)this.plugins[t].destroy(),this.plugins[t]=null;this.plugins=null}}e.exports={mixin:function(t){i(t)}}},{}],107:[function(t,e,r){var i=t("./core"),n=t("./mesh"),o=t("./extras"),s=t("./filters");i.SpriteBatch=function(){throw new ReferenceError("SpriteBatch does not exist any more, please use the new ParticleContainer instead.")},i.AssetLoader=function(){throw new ReferenceError("The loader system was overhauled in pixi v3, please see the new PIXI.loaders.Loader class.")},Object.defineProperties(i,{Stage:{get:function(){return console.warn("You do not need to use a PIXI Stage any more, you can simply render any container."),i.Container}},DisplayObjectContainer:{get:function(){return console.warn("DisplayObjectContainer has been shortened to Container, please use Container from now on."),i.Container}},Strip:{get:function(){return console.warn("The Strip class has been renamed to Mesh and moved to mesh.Mesh, please use mesh.Mesh from now on."),n.Mesh}},Rope:{get:function(){return console.warn("The Rope class has been moved to mesh.Rope, please use mesh.Rope from now on."),n.Rope}},MovieClip:{get:function(){return console.warn("The MovieClip class has been moved to extras.MovieClip, please use extras.MovieClip from now on."),o.MovieClip}},TilingSprite:{get:function(){return console.warn("The TilingSprite class has been moved to extras.TilingSprite, please use extras.TilingSprite from now on."),o.TilingSprite}},BitmapText:{get:function(){return console.warn("The BitmapText class has been moved to extras.BitmapText, please use extras.BitmapText from now on."),o.BitmapText}},blendModes:{get:function(){return console.warn("The blendModes has been moved to BLEND_MODES, please use BLEND_MODES from now on."),i.BLEND_MODES}},scaleModes:{get:function(){return console.warn("The scaleModes has been moved to SCALE_MODES, please use SCALE_MODES from now on."),i.SCALE_MODES}},BaseTextureCache:{get:function(){return console.warn("The BaseTextureCache class has been moved to utils.BaseTextureCache, please use utils.BaseTextureCache from now on."),i.utils.BaseTextureCache}},TextureCache:{get:function(){return console.warn("The TextureCache class has been moved to utils.TextureCache, please use utils.TextureCache from now on."),i.utils.TextureCache}},math:{get:function(){return console.warn("The math namespace is deprecated, please access members already accessible on PIXI."),i}}}),i.Sprite.prototype.setTexture=function(t){this.texture=t,console.warn("setTexture is now deprecated, please use the texture property, e.g : sprite.texture = texture;")},o.BitmapText.prototype.setText=function(t){this.text=t,console.warn("setText is now deprecated, please use the text property, e.g : myBitmapText.text = 'my text';")},i.Text.prototype.setText=function(t){this.text=t,console.warn("setText is now deprecated, please use the text property, e.g : myText.text = 'my text';")},i.Text.prototype.setStyle=function(t){this.style=t,console.warn("setStyle is now deprecated, please use the style property, e.g : myText.style = style;")},i.Texture.prototype.setFrame=function(t){this.frame=t,console.warn("setFrame is now deprecated, please use the frame property, e.g : myTexture.frame = frame;")},Object.defineProperties(s,{AbstractFilter:{get:function(){return console.warn("filters.AbstractFilter is an undocumented alias, please use AbstractFilter from now on."),i.AbstractFilter}},FXAAFilter:{get:function(){return console.warn("filters.FXAAFilter is an undocumented alias, please use FXAAFilter from now on."),i.FXAAFilter}},SpriteMaskFilter:{get:function(){return console.warn("filters.SpriteMaskFilter is an undocumented alias, please use SpriteMaskFilter from now on."),i.SpriteMaskFilter}}}),i.utils.uuid=function(){return console.warn("utils.uuid() is deprecated, please use utils.uid() from now on."),i.utils.uid()}},{"./core":52,"./extras":114,"./filters":131,"./mesh":156}],108:[function(t,e,r){function i(t,e){n.Container.call(this),e=e||{},this.textWidth=0,this.textHeight=0,this._glyphs=[],this._font={tint:void 0!==e.tint?e.tint:16777215,align:e.align||"left",name:null,size:0},this.font=e.font,this._text=t,this.maxWidth=0,this.maxLineHeight=0,this.dirty=!1,this.updateText()}var n=t("../core");i.prototype=Object.create(n.Container.prototype),i.prototype.constructor=i,e.exports=i,Object.defineProperties(i.prototype,{tint:{get:function(){return this._font.tint},set:function(t){this._font.tint="number"==typeof t&&t>=0?t:16777215,this.dirty=!0}},align:{get:function(){return this._font.align},set:function(t){this._font.align=t||"left",this.dirty=!0}},font:{get:function(){return this._font},set:function(t){t&&("string"==typeof t?(t=t.split(" "),this._font.name=1===t.length?t[0]:t.slice(1).join(" "),this._font.size=t.length>=2?parseInt(t[0],10):i.fonts[this._font.name].size):(this._font.name=t.name,this._font.size="number"==typeof t.size?t.size:parseInt(t.size,10)),this.dirty=!0)}},text:{get:function(){return this._text},set:function(t){t=t.toString()||" ",this._text!==t&&(this._text=t,this.dirty=!0)}}}),i.prototype.updateText=function(){for(var t=i.fonts[this._font.name],e=new n.Point,r=null,o=[],s=0,a=0,h=[],u=0,l=this._font.size/t.size,c=-1,p=0,d=0;d0&&e.x*l>this.maxWidth)n.utils.removeItems(o,c,d-c),d=c,c=-1,h.push(s),a=Math.max(a,s),u++,e.x=0,e.y+=t.lineHeight,r=null;else{var v=t.chars[f];v&&(r&&v.kerning[r]&&(e.x+=v.kerning[r]),o.push({texture:v.texture,line:u,charCode:f,position:new n.Point(e.x+v.xOffset,e.y+v.yOffset)}),s=e.x+(v.texture.width+v.xOffset),e.x+=v.xAdvance,p=Math.max(p,v.yOffset+v.texture.height),r=f)}}h.push(s),a=Math.max(a,s);var g=[];for(d=0;u>=d;d++){var m=0;"right"===this._font.align?m=a-h[d]:"center"===this._font.align&&(m=(a-h[d])/2),g.push(m)}var y=o.length,x=this.tint;for(d=0;y>d;d++){var b=this._glyphs[d];b?b.texture=o[d].texture:(b=new n.Sprite(o[d].texture),this._glyphs.push(b)),b.position.x=(o[d].position.x+g[o[d].line])*l,b.position.y=o[d].position.y*l, +b.scale.x=b.scale.y=l,b.tint=x,b.parent||this.addChild(b)}for(d=y;dt&&(t+=this._textures.length),t}}}),i.prototype.stop=function(){this.playing&&(this.playing=!1,n.ticker.shared.remove(this.update,this))},i.prototype.play=function(){this.playing||(this.playing=!0,n.ticker.shared.add(this.update,this))},i.prototype.gotoAndStop=function(t){this.stop(),this._currentTime=t,this._texture=this._textures[this.currentFrame]},i.prototype.gotoAndPlay=function(t){this._currentTime=t,this.play()},i.prototype.update=function(t){var e=this.animationSpeed*t;if(null!==this._durations){var r=this._currentTime%1*this._durations[this.currentFrame];for(r+=e/60*1e3;0>r;)this._currentTime--,r+=this._durations[this.currentFrame];var i=Math.sign(this.animationSpeed*t);for(this._currentTime=Math.floor(this._currentTime);r>=this._durations[this.currentFrame];)r-=this._durations[this.currentFrame]*i,this._currentTime+=i;this._currentTime+=r/this._durations[this.currentFrame]}else this._currentTime+=e;this._currentTime<0&&!this.loop?(this.gotoAndStop(0),this.onComplete&&this.onComplete()):this._currentTime>=this._textures.length&&!this.loop?(this.gotoAndStop(this._textures.length-1),this.onComplete&&this.onComplete()):this._texture=this._textures[this.currentFrame]},i.prototype.destroy=function(){this.stop(),n.Sprite.prototype.destroy.call(this)},i.fromFrames=function(t){for(var e=[],r=0;rx?x:t,t=t>_?_:t,t=t>E?E:t,r=y,r=r>b?b:r,r=r>T?T:r,r=r>S?S:r,e=m,e=x>e?x:e,e=_>e?_:e,e=E>e?E:e,i=y,i=b>i?b:i,i=T>i?T:i,i=S>i?S:i;var w=this._bounds;return w.x=t,w.width=e-t,w.y=r,w.height=i-r,this._currentBounds=w,w},i.prototype.containsPoint=function(t){this.worldTransform.applyInverse(t,o);var e,r=this._width,i=this._height,n=-r*this.anchor.x;return o.x>n&&o.xe&&o.y 0.2) n = 65600.0; // :\n if (gray > 0.3) n = 332772.0; // *\n if (gray > 0.4) n = 15255086.0; // o\n if (gray > 0.5) n = 23385164.0; // &\n if (gray > 0.6) n = 15252014.0; // 8\n if (gray > 0.7) n = 13199452.0; // @\n if (gray > 0.8) n = 11512810.0; // #\n\n vec2 p = mod( uv / ( pixelSize * 0.5 ), 2.0) - vec2(1.0);\n col = col * character(n, p);\n\n gl_FragColor = vec4(col, 1.0);\n}\n",{dimensions:{type:"4fv",value:new Float32Array([0,0,0,0])},pixelSize:{type:"1f",value:8}})}var n=t("../../core");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i,Object.defineProperties(i.prototype,{size:{get:function(){return this.uniforms.pixelSize.value},set:function(t){this.uniforms.pixelSize.value=t}}})},{"../../core":52}],116:[function(t,e,r){function i(){n.AbstractFilter.call(this),this.blurXFilter=new o,this.blurYFilter=new s,this.defaultFilter=new n.AbstractFilter}var n=t("../../core"),o=t("../blur/BlurXFilter"),s=t("../blur/BlurYFilter");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.applyFilter=function(t,e,r){var i=t.filterManager.getRenderTarget(!0);this.defaultFilter.applyFilter(t,e,r),this.blurXFilter.applyFilter(t,e,i),t.blendModeManager.setBlendMode(n.BLEND_MODES.SCREEN),this.blurYFilter.applyFilter(t,i,r),t.blendModeManager.setBlendMode(n.BLEND_MODES.NORMAL),t.filterManager.returnRenderTarget(i)},Object.defineProperties(i.prototype,{blur:{get:function(){return this.blurXFilter.blur},set:function(t){this.blurXFilter.blur=this.blurYFilter.blur=t}},blurX:{get:function(){return this.blurXFilter.blur},set:function(t){this.blurXFilter.blur=t}},blurY:{get:function(){return this.blurYFilter.blur},set:function(t){this.blurYFilter.blur=t}}})},{"../../core":52,"../blur/BlurXFilter":119,"../blur/BlurYFilter":120}],117:[function(t,e,r){function i(t,e){n.AbstractFilter.call(this,"attribute vec2 aVertexPosition;\nattribute vec2 aTextureCoord;\nattribute vec4 aColor;\n\nuniform float strength;\nuniform float dirX;\nuniform float dirY;\nuniform mat3 projectionMatrix;\n\nvarying vec2 vTextureCoord;\nvarying vec4 vColor;\nvarying vec2 vBlurTexCoords[3];\n\nvoid main(void)\n{\n gl_Position = vec4((projectionMatrix * vec3((aVertexPosition), 1.0)).xy, 0.0, 1.0);\n vTextureCoord = aTextureCoord;\n\n vBlurTexCoords[0] = aTextureCoord + vec2( (0.004 * strength) * dirX, (0.004 * strength) * dirY );\n vBlurTexCoords[1] = aTextureCoord + vec2( (0.008 * strength) * dirX, (0.008 * strength) * dirY );\n vBlurTexCoords[2] = aTextureCoord + vec2( (0.012 * strength) * dirX, (0.012 * strength) * dirY );\n\n vColor = vec4(aColor.rgb * aColor.a, aColor.a);\n}\n","precision lowp float;\n\nvarying vec2 vTextureCoord;\nvarying vec2 vBlurTexCoords[3];\nvarying vec4 vColor;\n\nuniform sampler2D uSampler;\n\nvoid main(void)\n{\n gl_FragColor = vec4(0.0);\n\n gl_FragColor += texture2D(uSampler, vTextureCoord ) * 0.3989422804014327;\n gl_FragColor += texture2D(uSampler, vBlurTexCoords[ 0]) * 0.2419707245191454;\n gl_FragColor += texture2D(uSampler, vBlurTexCoords[ 1]) * 0.05399096651318985;\n gl_FragColor += texture2D(uSampler, vBlurTexCoords[ 2]) * 0.004431848411938341;\n}\n",{strength:{type:"1f",value:1},dirX:{type:"1f",value:t||0},dirY:{type:"1f",value:e||0}}),this.defaultFilter=new n.AbstractFilter,this.passes=1,this.dirX=t||0,this.dirY=e||0,this.strength=4}var n=t("../../core");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.applyFilter=function(t,e,r,i){var n=this.getShader(t);if(this.uniforms.strength.value=this.strength/4/this.passes*(e.frame.width/e.size.width),1===this.passes)t.filterManager.applyFilter(n,e,r,i);else{var o=t.filterManager.getRenderTarget(!0);t.filterManager.applyFilter(n,e,o,i);for(var s=0;s>16&255)/255,s=(r>>8&255)/255,a=(255&r)/255,h=(i>>16&255)/255,u=(i>>8&255)/255,l=(255&i)/255,c=[.3,.59,.11,0,0,o,s,a,t,0,h,u,l,e,0,o-h,s-u,a-l,0,0];this._loadMatrix(c,n)},i.prototype.night=function(t,e){t=t||.1;var r=[-2*t,-t,0,0,0,-t,0,t,0,0,0,t,2*t,0,0,0,0,0,1,0];this._loadMatrix(r,e)},i.prototype.predator=function(t,e){var r=[11.224130630493164*t,-4.794486999511719*t,-2.8746118545532227*t,0*t,.40342438220977783*t,-3.6330697536468506*t,9.193157196044922*t,-2.951810836791992*t,0*t,-1.316135048866272*t,-3.2184197902679443*t,-4.2375030517578125*t,7.476448059082031*t,0*t,.8044459223747253*t,0,0,0,1,0];this._loadMatrix(r,e)},i.prototype.lsd=function(t){var e=[2,-.4,.5,0,0,-.5,2,-.4,0,0,-.4,-.5,3,0,0,0,0,0,1,0];this._loadMatrix(e,t)},i.prototype.reset=function(){var t=[1,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,1,0];this._loadMatrix(t,!1)},Object.defineProperties(i.prototype,{matrix:{get:function(){return this.uniforms.m.value},set:function(t){this.uniforms.m.value=t}}})},{"../../core":52}],123:[function(t,e,r){function i(){n.AbstractFilter.call(this,null,"precision mediump float;\n\nvarying vec2 vTextureCoord;\n\nuniform sampler2D uSampler;\nuniform float step;\n\nvoid main(void)\n{\n vec4 color = texture2D(uSampler, vTextureCoord);\n\n color = floor(color * step) / step;\n\n gl_FragColor = color;\n}\n",{step:{type:"1f",value:5}})}var n=t("../../core");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i,Object.defineProperties(i.prototype,{step:{get:function(){return this.uniforms.step.value},set:function(t){this.uniforms.step.value=t}}})},{"../../core":52}],124:[function(t,e,r){function i(t,e,r){n.AbstractFilter.call(this,null,"precision mediump float;\n\nvarying mediump vec2 vTextureCoord;\n\nuniform sampler2D uSampler;\nuniform vec2 texelSize;\nuniform float matrix[9];\n\nvoid main(void)\n{\n vec4 c11 = texture2D(uSampler, vTextureCoord - texelSize); // top left\n vec4 c12 = texture2D(uSampler, vec2(vTextureCoord.x, vTextureCoord.y - texelSize.y)); // top center\n vec4 c13 = texture2D(uSampler, vec2(vTextureCoord.x + texelSize.x, vTextureCoord.y - texelSize.y)); // top right\n\n vec4 c21 = texture2D(uSampler, vec2(vTextureCoord.x - texelSize.x, vTextureCoord.y)); // mid left\n vec4 c22 = texture2D(uSampler, vTextureCoord); // mid center\n vec4 c23 = texture2D(uSampler, vec2(vTextureCoord.x + texelSize.x, vTextureCoord.y)); // mid right\n\n vec4 c31 = texture2D(uSampler, vec2(vTextureCoord.x - texelSize.x, vTextureCoord.y + texelSize.y)); // bottom left\n vec4 c32 = texture2D(uSampler, vec2(vTextureCoord.x, vTextureCoord.y + texelSize.y)); // bottom center\n vec4 c33 = texture2D(uSampler, vTextureCoord + texelSize); // bottom right\n\n gl_FragColor =\n c11 * matrix[0] + c12 * matrix[1] + c13 * matrix[2] +\n c21 * matrix[3] + c22 * matrix[4] + c23 * matrix[5] +\n c31 * matrix[6] + c32 * matrix[7] + c33 * matrix[8];\n\n gl_FragColor.a = c22.a;\n}\n",{ +matrix:{type:"1fv",value:new Float32Array(t)},texelSize:{type:"v2",value:{x:1/e,y:1/r}}})}var n=t("../../core");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i,Object.defineProperties(i.prototype,{matrix:{get:function(){return this.uniforms.matrix.value},set:function(t){this.uniforms.matrix.value=new Float32Array(t)}},width:{get:function(){return 1/this.uniforms.texelSize.value.x},set:function(t){this.uniforms.texelSize.value.x=1/t}},height:{get:function(){return 1/this.uniforms.texelSize.value.y},set:function(t){this.uniforms.texelSize.value.y=1/t}}})},{"../../core":52}],125:[function(t,e,r){function i(){n.AbstractFilter.call(this,null,"precision mediump float;\n\nvarying vec2 vTextureCoord;\n\nuniform sampler2D uSampler;\n\nvoid main(void)\n{\n float lum = length(texture2D(uSampler, vTextureCoord.xy).rgb);\n\n gl_FragColor = vec4(1.0, 1.0, 1.0, 1.0);\n\n if (lum < 1.00)\n {\n if (mod(gl_FragCoord.x + gl_FragCoord.y, 10.0) == 0.0)\n {\n gl_FragColor = vec4(0.0, 0.0, 0.0, 1.0);\n }\n }\n\n if (lum < 0.75)\n {\n if (mod(gl_FragCoord.x - gl_FragCoord.y, 10.0) == 0.0)\n {\n gl_FragColor = vec4(0.0, 0.0, 0.0, 1.0);\n }\n }\n\n if (lum < 0.50)\n {\n if (mod(gl_FragCoord.x + gl_FragCoord.y - 5.0, 10.0) == 0.0)\n {\n gl_FragColor = vec4(0.0, 0.0, 0.0, 1.0);\n }\n }\n\n if (lum < 0.3)\n {\n if (mod(gl_FragCoord.x - gl_FragCoord.y - 5.0, 10.0) == 0.0)\n {\n gl_FragColor = vec4(0.0, 0.0, 0.0, 1.0);\n }\n }\n}\n")}var n=t("../../core");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i},{"../../core":52}],126:[function(t,e,r){function i(t,e){var r=new n.Matrix;t.renderable=!1,n.AbstractFilter.call(this,"attribute vec2 aVertexPosition;\nattribute vec2 aTextureCoord;\nattribute vec4 aColor;\n\nuniform mat3 projectionMatrix;\nuniform mat3 otherMatrix;\n\nvarying vec2 vMapCoord;\nvarying vec2 vTextureCoord;\nvarying vec4 vColor;\n\nvoid main(void)\n{\n gl_Position = vec4((projectionMatrix * vec3(aVertexPosition, 1.0)).xy, 0.0, 1.0);\n vTextureCoord = aTextureCoord;\n vMapCoord = ( otherMatrix * vec3( aTextureCoord, 1.0) ).xy;\n vColor = vec4(aColor.rgb * aColor.a, aColor.a);\n}\n","precision mediump float;\n\nvarying vec2 vMapCoord;\nvarying vec2 vTextureCoord;\nvarying vec4 vColor;\n\nuniform vec2 scale;\n\nuniform sampler2D uSampler;\nuniform sampler2D mapSampler;\n\nvoid main(void)\n{\n vec4 map = texture2D(mapSampler, vMapCoord);\n\n map -= 0.5;\n map.xy *= scale;\n\n gl_FragColor = texture2D(uSampler, vec2(vTextureCoord.x + map.x, vTextureCoord.y + map.y));\n}\n",{mapSampler:{type:"sampler2D",value:t.texture},otherMatrix:{type:"mat3",value:r.toArray(!0)},scale:{type:"v2",value:{x:1,y:1}}}),this.maskSprite=t,this.maskMatrix=r,(null===e||void 0===e)&&(e=20),this.scale=new n.Point(e,e)}var n=t("../../core");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.applyFilter=function(t,e,r){var i=t.filterManager;i.calculateMappedMatrix(e.frame,this.maskSprite,this.maskMatrix),this.uniforms.otherMatrix.value=this.maskMatrix.toArray(!0),this.uniforms.scale.value.x=this.scale.x*(1/e.frame.width),this.uniforms.scale.value.y=this.scale.y*(1/e.frame.height);var n=this.getShader(t);i.applyFilter(n,e,r)},Object.defineProperties(i.prototype,{map:{get:function(){return this.uniforms.mapSampler.value},set:function(t){this.uniforms.mapSampler.value=t}}})},{"../../core":52}],127:[function(t,e,r){function i(){n.AbstractFilter.call(this,null,"precision mediump float;\n\nvarying vec2 vTextureCoord;\nvarying vec4 vColor;\n\nuniform vec4 dimensions;\nuniform sampler2D uSampler;\n\nuniform float angle;\nuniform float scale;\n\nfloat pattern()\n{\n float s = sin(angle), c = cos(angle);\n vec2 tex = vTextureCoord * dimensions.xy;\n vec2 point = vec2(\n c * tex.x - s * tex.y,\n s * tex.x + c * tex.y\n ) * scale;\n return (sin(point.x) * sin(point.y)) * 4.0;\n}\n\nvoid main()\n{\n vec4 color = texture2D(uSampler, vTextureCoord);\n float average = (color.r + color.g + color.b) / 3.0;\n gl_FragColor = vec4(vec3(average * 10.0 - 5.0 + pattern()), color.a);\n}\n",{scale:{type:"1f",value:1},angle:{type:"1f",value:5},dimensions:{type:"4fv",value:[0,0,0,0]}})}var n=t("../../core");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i,Object.defineProperties(i.prototype,{scale:{get:function(){return this.uniforms.scale.value},set:function(t){this.uniforms.scale.value=t}},angle:{get:function(){return this.uniforms.angle.value},set:function(t){this.uniforms.angle.value=t}}})},{"../../core":52}],128:[function(t,e,r){function i(){n.AbstractFilter.call(this,"attribute vec2 aVertexPosition;\nattribute vec2 aTextureCoord;\nattribute vec4 aColor;\n\nuniform float strength;\nuniform vec2 offset;\n\nuniform mat3 projectionMatrix;\n\nvarying vec2 vTextureCoord;\nvarying vec4 vColor;\nvarying vec2 vBlurTexCoords[6];\n\nvoid main(void)\n{\n gl_Position = vec4((projectionMatrix * vec3((aVertexPosition+offset), 1.0)).xy, 0.0, 1.0);\n vTextureCoord = aTextureCoord;\n\n vBlurTexCoords[ 0] = aTextureCoord + vec2(0.0, -0.012 * strength);\n vBlurTexCoords[ 1] = aTextureCoord + vec2(0.0, -0.008 * strength);\n vBlurTexCoords[ 2] = aTextureCoord + vec2(0.0, -0.004 * strength);\n vBlurTexCoords[ 3] = aTextureCoord + vec2(0.0, 0.004 * strength);\n vBlurTexCoords[ 4] = aTextureCoord + vec2(0.0, 0.008 * strength);\n vBlurTexCoords[ 5] = aTextureCoord + vec2(0.0, 0.012 * strength);\n\n vColor = vec4(aColor.rgb * aColor.a, aColor.a);\n}\n","precision lowp float;\n\nvarying vec2 vTextureCoord;\nvarying vec2 vBlurTexCoords[6];\nvarying vec4 vColor;\n\nuniform vec3 color;\nuniform float alpha;\n\nuniform sampler2D uSampler;\n\nvoid main(void)\n{\n vec4 sum = vec4(0.0);\n\n sum += texture2D(uSampler, vBlurTexCoords[ 0])*0.004431848411938341;\n sum += texture2D(uSampler, vBlurTexCoords[ 1])*0.05399096651318985;\n sum += texture2D(uSampler, vBlurTexCoords[ 2])*0.2419707245191454;\n sum += texture2D(uSampler, vTextureCoord )*0.3989422804014327;\n sum += texture2D(uSampler, vBlurTexCoords[ 3])*0.2419707245191454;\n sum += texture2D(uSampler, vBlurTexCoords[ 4])*0.05399096651318985;\n sum += texture2D(uSampler, vBlurTexCoords[ 5])*0.004431848411938341;\n\n gl_FragColor = vec4( color.rgb * sum.a * alpha, sum.a * alpha );\n}\n",{blur:{type:"1f",value:1/512},color:{type:"c",value:[0,0,0]},alpha:{type:"1f",value:.7},offset:{type:"2f",value:[5,5]},strength:{type:"1f",value:1}}),this.passes=1,this.strength=4}var n=t("../../core");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.applyFilter=function(t,e,r,i){var n=this.getShader(t);if(this.uniforms.strength.value=this.strength/4/this.passes*(e.frame.height/e.size.height),1===this.passes)t.filterManager.applyFilter(n,e,r,i);else{for(var o=t.filterManager.getRenderTarget(!0),s=e,a=o,h=0;h= (time - params.z)) )\n {\n float diff = (dist - time);\n float powDiff = 1.0 - pow(abs(diff*params.x), params.y);\n\n float diffTime = diff * powDiff;\n vec2 diffUV = normalize(uv - center);\n texCoord = uv + (diffUV * diffTime);\n }\n\n gl_FragColor = texture2D(uSampler, texCoord);\n}\n",{center:{type:"v2",value:{x:.5,y:.5}},params:{type:"v3",value:{x:10,y:.8,z:.1}},time:{type:"1f",value:0}})}var n=t("../../core");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i,Object.defineProperties(i.prototype,{center:{get:function(){return this.uniforms.center.value},set:function(t){this.uniforms.center.value=t}},params:{get:function(){return this.uniforms.params.value},set:function(t){this.uniforms.params.value=t}},time:{get:function(){return this.uniforms.time.value},set:function(t){this.uniforms.time.value=t}}})},{"../../core":52}],138:[function(t,e,r){function i(){n.AbstractFilter.call(this,null,"precision mediump float;\n\nvarying vec2 vTextureCoord;\n\nuniform sampler2D uSampler;\nuniform float blur;\nuniform float gradientBlur;\nuniform vec2 start;\nuniform vec2 end;\nuniform vec2 delta;\nuniform vec2 texSize;\n\nfloat random(vec3 scale, float seed)\n{\n return fract(sin(dot(gl_FragCoord.xyz + seed, scale)) * 43758.5453 + seed);\n}\n\nvoid main(void)\n{\n vec4 color = vec4(0.0);\n float total = 0.0;\n\n float offset = random(vec3(12.9898, 78.233, 151.7182), 0.0);\n vec2 normal = normalize(vec2(start.y - end.y, end.x - start.x));\n float radius = smoothstep(0.0, 1.0, abs(dot(vTextureCoord * texSize - start, normal)) / gradientBlur) * blur;\n\n for (float t = -30.0; t <= 30.0; t++)\n {\n float percent = (t + offset - 0.5) / 30.0;\n float weight = 1.0 - abs(percent);\n vec4 sample = texture2D(uSampler, vTextureCoord + delta / texSize * percent * radius);\n sample.rgb *= sample.a;\n color += sample * weight;\n total += weight;\n }\n\n gl_FragColor = color / total;\n gl_FragColor.rgb /= gl_FragColor.a + 0.00001;\n}\n",{blur:{type:"1f",value:100},gradientBlur:{type:"1f",value:600},start:{type:"v2",value:{x:0,y:window.innerHeight/2}},end:{type:"v2",value:{x:600,y:window.innerHeight/2}},delta:{type:"v2",value:{x:30,y:30}},texSize:{type:"v2",value:{x:window.innerWidth,y:window.innerHeight}}}),this.updateDelta()}var n=t("../../core");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.updateDelta=function(){this.uniforms.delta.value.x=0,this.uniforms.delta.value.y=0},Object.defineProperties(i.prototype,{blur:{get:function(){return this.uniforms.blur.value},set:function(t){this.uniforms.blur.value=t}},gradientBlur:{get:function(){return this.uniforms.gradientBlur.value},set:function(t){this.uniforms.gradientBlur.value=t}},start:{get:function(){return this.uniforms.start.value},set:function(t){this.uniforms.start.value=t,this.updateDelta()}},end:{get:function(){return this.uniforms.end.value},set:function(t){this.uniforms.end.value=t,this.updateDelta()}}})},{"../../core":52}],139:[function(t,e,r){function i(){n.AbstractFilter.call(this),this.tiltShiftXFilter=new o,this.tiltShiftYFilter=new s}var n=t("../../core"),o=t("./TiltShiftXFilter"),s=t("./TiltShiftYFilter");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.applyFilter=function(t,e,r){var i=t.filterManager.getRenderTarget(!0);this.tiltShiftXFilter.applyFilter(t,e,i),this.tiltShiftYFilter.applyFilter(t,i,r),t.filterManager.returnRenderTarget(i)},Object.defineProperties(i.prototype,{blur:{get:function(){return this.tiltShiftXFilter.blur},set:function(t){this.tiltShiftXFilter.blur=this.tiltShiftYFilter.blur=t}},gradientBlur:{get:function(){return this.tiltShiftXFilter.gradientBlur},set:function(t){this.tiltShiftXFilter.gradientBlur=this.tiltShiftYFilter.gradientBlur=t}},start:{get:function(){return this.tiltShiftXFilter.start},set:function(t){this.tiltShiftXFilter.start=this.tiltShiftYFilter.start=t}},end:{get:function(){return this.tiltShiftXFilter.end},set:function(t){this.tiltShiftXFilter.end=this.tiltShiftYFilter.end=t}}})},{"../../core":52,"./TiltShiftXFilter":140,"./TiltShiftYFilter":141}],140:[function(t,e,r){function i(){n.call(this)}var n=t("./TiltShiftAxisFilter");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.updateDelta=function(){var t=this.uniforms.end.value.x-this.uniforms.start.value.x,e=this.uniforms.end.value.y-this.uniforms.start.value.y,r=Math.sqrt(t*t+e*e);this.uniforms.delta.value.x=t/r,this.uniforms.delta.value.y=e/r}},{"./TiltShiftAxisFilter":138}],141:[function(t,e,r){function i(){n.call(this)}var n=t("./TiltShiftAxisFilter");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.updateDelta=function(){var t=this.uniforms.end.value.x-this.uniforms.start.value.x,e=this.uniforms.end.value.y-this.uniforms.start.value.y,r=Math.sqrt(t*t+e*e);this.uniforms.delta.value.x=-e/r,this.uniforms.delta.value.y=t/r}},{"./TiltShiftAxisFilter":138}],142:[function(t,e,r){function i(){n.AbstractFilter.call(this,null,"precision mediump float;\n\nvarying vec2 vTextureCoord;\n\nuniform sampler2D uSampler;\nuniform float radius;\nuniform float angle;\nuniform vec2 offset;\n\nvoid main(void)\n{\n vec2 coord = vTextureCoord - offset;\n float dist = length(coord);\n\n if (dist < radius)\n {\n float ratio = (radius - dist) / radius;\n float angleMod = ratio * ratio * angle;\n float s = sin(angleMod);\n float c = cos(angleMod);\n coord = vec2(coord.x * c - coord.y * s, coord.x * s + coord.y * c);\n }\n\n gl_FragColor = texture2D(uSampler, coord+offset);\n}\n",{radius:{type:"1f",value:.5},angle:{type:"1f",value:5},offset:{type:"v2",value:{x:.5,y:.5}}})}var n=t("../../core");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i,Object.defineProperties(i.prototype,{offset:{get:function(){return this.uniforms.offset.value},set:function(t){this.uniforms.offset.value=t}},radius:{get:function(){return this.uniforms.radius.value},set:function(t){this.uniforms.radius.value=t}},angle:{get:function(){return this.uniforms.angle.value},set:function(t){this.uniforms.angle.value=t}}})},{"../../core":52}],143:[function(t,e,r){(function(r){t("./polyfill");var i=e.exports=t("./core");i.extras=t("./extras"),i.filters=t("./filters"),i.interaction=t("./interaction"),i.loaders=t("./loaders"),i.mesh=t("./mesh"),i.accessibility=t("./accessibility"),i.loader=new i.loaders.Loader,Object.assign(i,t("./deprecation")),r.PIXI=i}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{"./accessibility":37,"./core":52,"./deprecation":107,"./extras":114,"./filters":131,"./interaction":146,"./loaders":149,"./mesh":156,"./polyfill":161}],144:[function(t,e,r){function i(){this.global=new n.Point,this.target=null,this.originalEvent=null}var n=t("../core");i.prototype.constructor=i,e.exports=i,i.prototype.getLocalPosition=function(t,e,r){return t.worldTransform.applyInverse(r||this.global,e)}},{"../core":52}],145:[function(t,e,r){function i(t,e){e=e||{},this.renderer=t,this.autoPreventDefault=void 0!==e.autoPreventDefault?e.autoPreventDefault:!0,this.interactionFrequency=e.interactionFrequency||10,this.mouse=new o,this.eventData={stopped:!1,target:null,type:null,data:this.mouse,stopPropagation:function(){this.stopped=!0}},this.interactiveDataPool=[],this.interactionDOMElement=null,this.eventsAdded=!1,this.onMouseUp=this.onMouseUp.bind(this),this.processMouseUp=this.processMouseUp.bind(this),this.onMouseDown=this.onMouseDown.bind(this),this.processMouseDown=this.processMouseDown.bind(this),this.onMouseMove=this.onMouseMove.bind(this),this.processMouseMove=this.processMouseMove.bind(this),this.onMouseOut=this.onMouseOut.bind(this),this.processMouseOverOut=this.processMouseOverOut.bind(this),this.onTouchStart=this.onTouchStart.bind(this),this.processTouchStart=this.processTouchStart.bind(this),this.onTouchEnd=this.onTouchEnd.bind(this),this.processTouchEnd=this.processTouchEnd.bind(this),this.onTouchMove=this.onTouchMove.bind(this),this.processTouchMove=this.processTouchMove.bind(this),this.last=0,this.currentCursorStyle="inherit",this._tempPoint=new n.Point,this.resolution=1,this.setTargetElement(this.renderer.view,this.renderer.resolution)}var n=t("../core"),o=t("./InteractionData");Object.assign(n.DisplayObject.prototype,t("./interactiveTarget")),i.prototype.constructor=i,e.exports=i,i.prototype.setTargetElement=function(t,e){this.removeEvents(),this.interactionDOMElement=t,this.resolution=e||1,this.addEvents()},i.prototype.addEvents=function(){this.interactionDOMElement&&(n.ticker.shared.add(this.update,this),window.navigator.msPointerEnabled&&(this.interactionDOMElement.style["-ms-content-zooming"]="none",this.interactionDOMElement.style["-ms-touch-action"]="none"),window.document.addEventListener("mousemove",this.onMouseMove,!0),this.interactionDOMElement.addEventListener("mousedown",this.onMouseDown,!0),this.interactionDOMElement.addEventListener("mouseout",this.onMouseOut,!0),this.interactionDOMElement.addEventListener("touchstart",this.onTouchStart,!0),this.interactionDOMElement.addEventListener("touchend",this.onTouchEnd,!0),this.interactionDOMElement.addEventListener("touchmove",this.onTouchMove,!0),window.addEventListener("mouseup",this.onMouseUp,!0),this.eventsAdded=!0)},i.prototype.removeEvents=function(){this.interactionDOMElement&&(n.ticker.shared.remove(this.update),window.navigator.msPointerEnabled&&(this.interactionDOMElement.style["-ms-content-zooming"]="",this.interactionDOMElement.style["-ms-touch-action"]=""),window.document.removeEventListener("mousemove",this.onMouseMove,!0),this.interactionDOMElement.removeEventListener("mousedown",this.onMouseDown,!0),this.interactionDOMElement.removeEventListener("mouseout",this.onMouseOut,!0),this.interactionDOMElement.removeEventListener("touchstart",this.onTouchStart,!0),this.interactionDOMElement.removeEventListener("touchend",this.onTouchEnd,!0),this.interactionDOMElement.removeEventListener("touchmove",this.onTouchMove,!0),this.interactionDOMElement=null,window.removeEventListener("mouseup",this.onMouseUp,!0),this.eventsAdded=!1)},i.prototype.update=function(t){if(this._deltaTime+=t,!(this._deltaTime=0;h--)this.processInteractive(t,a[h],r,i,s)&&(o=!0,s=!1,a[h].interactive&&(i=!1));return n&&(i&&!o&&(e.hitArea?(e.worldTransform.applyInverse(t,this._tempPoint),o=e.hitArea.contains(this._tempPoint.x,this._tempPoint.y)):e.containsPoint&&(o=e.containsPoint(t))),e.interactive&&r(e,o)),o},i.prototype.onMouseDown=function(t){this.mouse.originalEvent=t,this.eventData.data=this.mouse,this.eventData.stopped=!1,this.mapPositionToPoint(this.mouse.global,t.clientX,t.clientY),this.autoPreventDefault&&this.mouse.originalEvent.preventDefault(),this.processInteractive(this.mouse.global,this.renderer._lastObjectRendered,this.processMouseDown,!0)},i.prototype.processMouseDown=function(t,e){var r=this.mouse.originalEvent,i=2===r.button||3===r.which;e&&(t[i?"_isRightDown":"_isLeftDown"]=!0,this.dispatchEvent(t,i?"rightdown":"mousedown",this.eventData))},i.prototype.onMouseUp=function(t){this.mouse.originalEvent=t,this.eventData.data=this.mouse,this.eventData.stopped=!1,this.mapPositionToPoint(this.mouse.global,t.clientX,t.clientY),this.processInteractive(this.mouse.global,this.renderer._lastObjectRendered,this.processMouseUp,!0)},i.prototype.processMouseUp=function(t,e){var r=this.mouse.originalEvent,i=2===r.button||3===r.which,n=i?"_isRightDown":"_isLeftDown";e?(this.dispatchEvent(t,i?"rightup":"mouseup",this.eventData),t[n]&&(t[n]=!1,this.dispatchEvent(t,i?"rightclick":"click",this.eventData))):t[n]&&(t[n]=!1,this.dispatchEvent(t,i?"rightupoutside":"mouseupoutside",this.eventData))},i.prototype.onMouseMove=function(t){this.mouse.originalEvent=t,this.eventData.data=this.mouse,this.eventData.stopped=!1,this.mapPositionToPoint(this.mouse.global,t.clientX,t.clientY),this.didMove=!0,this.cursor="inherit",this.processInteractive(this.mouse.global,this.renderer._lastObjectRendered,this.processMouseMove,!0),this.currentCursorStyle!==this.cursor&&(this.currentCursorStyle=this.cursor,this.interactionDOMElement.style.cursor=this.cursor)},i.prototype.processMouseMove=function(t,e){this.dispatchEvent(t,"mousemove",this.eventData),this.processMouseOverOut(t,e)},i.prototype.onMouseOut=function(t){this.mouse.originalEvent=t,this.eventData.stopped=!1,this.mapPositionToPoint(this.mouse.global,t.clientX,t.clientY),this.interactionDOMElement.style.cursor="inherit",this.mapPositionToPoint(this.mouse.global,t.clientX,t.clientY),this.processInteractive(this.mouse.global,this.renderer._lastObjectRendered,this.processMouseOverOut,!1)},i.prototype.processMouseOverOut=function(t,e){e?(t._over||(t._over=!0,this.dispatchEvent(t,"mouseover",this.eventData)),t.buttonMode&&(this.cursor=t.defaultCursor)):t._over&&(t._over=!1,this.dispatchEvent(t,"mouseout",this.eventData))},i.prototype.onTouchStart=function(t){this.autoPreventDefault&&t.preventDefault();for(var e=t.changedTouches,r=e.length,i=0;r>i;i++){var n=e[i],o=this.getTouchData(n);o.originalEvent=t,this.eventData.data=o,this.eventData.stopped=!1,this.processInteractive(o.global,this.renderer._lastObjectRendered,this.processTouchStart,!0),this.returnTouchData(o)}},i.prototype.processTouchStart=function(t,e){e&&(t._touchDown=!0,this.dispatchEvent(t,"touchstart",this.eventData))},i.prototype.onTouchEnd=function(t){this.autoPreventDefault&&t.preventDefault();for(var e=t.changedTouches,r=e.length,i=0;r>i;i++){var n=e[i],o=this.getTouchData(n);o.originalEvent=t,this.eventData.data=o,this.eventData.stopped=!1,this.processInteractive(o.global,this.renderer._lastObjectRendered,this.processTouchEnd,!0),this.returnTouchData(o)}},i.prototype.processTouchEnd=function(t,e){e?(this.dispatchEvent(t,"touchend",this.eventData),t._touchDown&&(t._touchDown=!1,this.dispatchEvent(t,"tap",this.eventData))):t._touchDown&&(t._touchDown=!1,this.dispatchEvent(t,"touchendoutside",this.eventData))},i.prototype.onTouchMove=function(t){this.autoPreventDefault&&t.preventDefault();for(var e=t.changedTouches,r=e.length,i=0;r>i;i++){var n=e[i],o=this.getTouchData(n);o.originalEvent=t, +this.eventData.data=o,this.eventData.stopped=!1,this.processInteractive(o.global,this.renderer._lastObjectRendered,this.processTouchMove,!0),this.returnTouchData(o)}},i.prototype.processTouchMove=function(t,e){e=e,this.dispatchEvent(t,"touchmove",this.eventData)},i.prototype.getTouchData=function(t){var e=this.interactiveDataPool.pop();return e||(e=new o),e.identifier=t.identifier,this.mapPositionToPoint(e.global,t.clientX,t.clientY),navigator.isCocoonJS&&(e.global.x=e.global.x/this.resolution,e.global.y=e.global.y/this.resolution),t.globalX=e.global.x,t.globalY=e.global.y,e},i.prototype.returnTouchData=function(t){this.interactiveDataPool.push(t)},i.prototype.destroy=function(){this.removeEvents(),this.renderer=null,this.mouse=null,this.eventData=null,this.interactiveDataPool=null,this.interactionDOMElement=null,this.onMouseUp=null,this.processMouseUp=null,this.onMouseDown=null,this.processMouseDown=null,this.onMouseMove=null,this.processMouseMove=null,this.onMouseOut=null,this.processMouseOverOut=null,this.onTouchStart=null,this.processTouchStart=null,this.onTouchEnd=null,this.processTouchEnd=null,this.onTouchMove=null,this.processTouchMove=null,this._tempPoint=null},n.WebGLRenderer.registerPlugin("interaction",i),n.CanvasRenderer.registerPlugin("interaction",i)},{"../core":52,"./InteractionData":144,"./interactiveTarget":147}],146:[function(t,e,r){e.exports={InteractionData:t("./InteractionData"),InteractionManager:t("./InteractionManager"),interactiveTarget:t("./interactiveTarget")}},{"./InteractionData":144,"./InteractionManager":145,"./interactiveTarget":147}],147:[function(t,e,r){var i={interactive:!1,buttonMode:!1,interactiveChildren:!0,defaultCursor:"pointer",_over:!1,_touchDown:!1};e.exports=i},{}],148:[function(t,e,r){function i(t,e){var r={},i=t.data.getElementsByTagName("info")[0],n=t.data.getElementsByTagName("common")[0];r.font=i.getAttribute("face"),r.size=parseInt(i.getAttribute("size"),10),r.lineHeight=parseInt(n.getAttribute("lineHeight"),10),r.chars={};for(var a=t.data.getElementsByTagName("char"),h=0;hn;n++){var o=2*n;this._renderCanvasDrawTriangle(t,e,r,o,o+2,o+4)}},i.prototype._renderCanvasTriangles=function(t){for(var e=this.vertices,r=this.uvs,i=this.indices,n=i.length,o=0;n>o;o+=3){var s=2*i[o],a=2*i[o+1],h=2*i[o+2];this._renderCanvasDrawTriangle(t,e,r,s,a,h)}},i.prototype._renderCanvasDrawTriangle=function(t,e,r,i,n,o){var s=this._texture.baseTexture.source,a=this._texture.baseTexture.width,h=this._texture.baseTexture.height,u=e[i],l=e[n],c=e[o],p=e[i+1],d=e[n+1],f=e[o+1],v=r[i]*a,g=r[n]*a,m=r[o]*a,y=r[i+1]*h,x=r[n+1]*h,b=r[o+1]*h;if(this.canvasPadding>0){var _=this.canvasPadding/this.worldTransform.a,T=this.canvasPadding/this.worldTransform.d,E=(u+l+c)/3,S=(p+d+f)/3,w=u-E,C=p-S,A=Math.sqrt(w*w+C*C);u=E+w/A*(A+_),p=S+C/A*(A+T),w=l-E,C=d-S,A=Math.sqrt(w*w+C*C),l=E+w/A*(A+_),d=S+C/A*(A+T),w=c-E,C=f-S,A=Math.sqrt(w*w+C*C),c=E+w/A*(A+_),f=S+C/A*(A+T)}t.save(),t.beginPath(),t.moveTo(u,p),t.lineTo(l,d),t.lineTo(c,f),t.closePath(),t.clip();var M=v*x+y*m+g*b-x*m-y*g-v*b,R=u*x+y*c+l*b-x*c-y*l-u*b,O=v*l+u*m+g*c-l*m-u*g-v*c,P=v*x*c+y*l*m+u*g*b-u*x*m-y*g*c-v*l*b,D=p*x+y*f+d*b-x*f-y*d-p*b,F=v*d+p*m+g*f-d*m-p*g-v*f,L=v*x*f+y*d*m+p*g*b-p*x*m-y*g*f-v*d*b;t.transform(R/M,D/M,O/M,F/M,P/M,L/M),t.drawImage(s,0,0),t.restore()},i.prototype.renderMeshFlat=function(t){var e=this.context,r=t.vertices,i=r.length/2;e.beginPath();for(var n=1;i-2>n;n++){var o=2*n,s=r[o],a=r[o+2],h=r[o+4],u=r[o+1],l=r[o+3],c=r[o+5];e.moveTo(s,u),e.lineTo(a,l),e.lineTo(h,c)}e.fillStyle="#FF0000",e.fill(),e.closePath()},i.prototype._onTextureUpdate=function(){this.updateFrame=!0},i.prototype.getBounds=function(t){if(!this._currentBounds){for(var e=t||this.worldTransform,r=e.a,i=e.b,o=e.c,s=e.d,a=e.tx,h=e.ty,u=-(1/0),l=-(1/0),c=1/0,p=1/0,d=this.vertices,f=0,v=d.length;v>f;f+=2){var g=d[f],m=d[f+1],y=r*g+o*m+a,x=s*m+i*g+h;c=c>y?y:c,p=p>x?x:p,u=y>u?y:u,l=x>l?x:l}if(c===-(1/0)||l===1/0)return n.Rectangle.EMPTY;var b=this._bounds;b.x=c,b.width=u-c,b.y=p,b.height=l-p,this._currentBounds=b}return this._currentBounds},i.prototype.containsPoint=function(t){if(!this.getBounds().contains(t.x,t.y))return!1;this.worldTransform.applyInverse(t,o);var e,r,n=this.vertices,a=s.points;if(this.drawMode===i.DRAW_MODES.TRIANGLES){var h=this.indices;for(r=this.indices.length,e=0;r>e;e+=3){var u=2*h[e],l=2*h[e+1],c=2*h[e+2];if(a[0]=n[u],a[1]=n[u+1],a[2]=n[l],a[3]=n[l+1],a[4]=n[c],a[5]=n[c+1],s.contains(o.x,o.y))return!0}}else for(r=n.length,e=0;r>e;e+=6)if(a[0]=n[e],a[1]=n[e+1],a[2]=n[e+2],a[3]=n[e+3],a[4]=n[e+4],a[5]=n[e+5],s.contains(o.x,o.y))return!0;return!1},i.DRAW_MODES={TRIANGLE_MESH:0,TRIANGLES:1}},{"../core":52}],154:[function(t,e,r){function i(t,e,r){n.call(this,t),this._ready=!0,this.segmentsX=e||10,this.segmentsY=r||10,this.drawMode=n.DRAW_MODES.TRIANGLES,this.refresh()}var n=t("./Mesh");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.refresh=function(){var t=this.segmentsX*this.segmentsY,e=[],r=[],i=[],n=[],o=this.texture,s=this.segmentsX-1,a=this.segmentsY-1,h=0,u=o.width/s,l=o.height/a;for(h=0;t>h;h++){var c=h%this.segmentsX,p=h/this.segmentsX|0;e.push(c*u,p*l),i.push(o._uvs.x0+(o._uvs.x1-o._uvs.x0)*(c/(this.segmentsX-1)),o._uvs.y0+(o._uvs.y3-o._uvs.y0)*(p/(this.segmentsY-1)))}var d=s*a;for(h=0;d>h;h++){var f=h%s,v=h/s|0,g=v*this.segmentsX+f,m=v*this.segmentsX+f+1,y=(v+1)*this.segmentsX+f,x=(v+1)*this.segmentsX+f+1;n.push(g,m,y),n.push(m,x,y)}this.vertices=new Float32Array(e),this.uvs=new Float32Array(i),this.colors=new Float32Array(r),this.indices=new Uint16Array(n)},i.prototype._onTextureUpdate=function(){n.prototype._onTextureUpdate.call(this),this._ready&&this.refresh()}},{"./Mesh":153}],155:[function(t,e,r){function i(t,e){n.call(this,t),this.points=e,this.vertices=new Float32Array(4*e.length),this.uvs=new Float32Array(4*e.length),this.colors=new Float32Array(2*e.length),this.indices=new Uint16Array(2*e.length),this._ready=!0,this.refresh()}var n=t("./Mesh"),o=t("../core");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.refresh=function(){var t=this.points;if(!(t.length<1)&&this._texture._uvs){var e=this.uvs,r=this.indices,i=this.colors,n=this._texture._uvs,s=new o.Point(n.x0,n.y0),a=new o.Point(n.x2-n.x0,n.y2-n.y0);e[0]=0+s.x,e[1]=0+s.y,e[2]=0+s.x,e[3]=1*a.y+s.y,i[0]=1,i[1]=1,r[0]=0,r[1]=1;for(var h,u,l,c=t.length,p=1;c>p;p++)h=t[p],u=4*p,l=p/(c-1),e[u]=l*a.x+s.x,e[u+1]=0+s.y,e[u+2]=l*a.x+s.x,e[u+3]=1*a.y+s.y,u=2*p,i[u]=1,i[u+1]=1,u=2*p,r[u]=u,r[u+1]=u+1;this.dirty=!0}},i.prototype._onTextureUpdate=function(){n.prototype._onTextureUpdate.call(this),this._ready&&this.refresh()},i.prototype.updateTransform=function(){var t=this.points;if(!(t.length<1)){for(var e,r,i,n,o,s,a=t[0],h=0,u=0,l=this.vertices,c=t.length,p=0;c>p;p++)r=t[p],i=4*p,e=p1&&(n=1),o=Math.sqrt(h*h+u*u),s=this._texture.height/2,h/=o,u/=o,h*=s,u*=s,l[i]=r.x+h,l[i+1]=r.y+u,l[i+2]=r.x-h,l[i+3]=r.y-u,a=r;this.containerUpdateTransform()}}},{"../core":52,"./Mesh":153}],156:[function(t,e,r){e.exports={Mesh:t("./Mesh"),Plane:t("./Plane"),Rope:t("./Rope"),MeshRenderer:t("./webgl/MeshRenderer"),MeshShader:t("./webgl/MeshShader")}},{"./Mesh":153,"./Plane":154,"./Rope":155,"./webgl/MeshRenderer":157,"./webgl/MeshShader":158}],157:[function(t,e,r){function i(t){n.ObjectRenderer.call(this,t),this.indices=new Uint16Array(15e3);for(var e=0,r=0;15e3>e;e+=6,r+=4)this.indices[e+0]=r+0,this.indices[e+1]=r+1,this.indices[e+2]=r+2,this.indices[e+3]=r+0,this.indices[e+4]=r+2,this.indices[e+5]=r+3;this.currentShader=null}var n=t("../../core"),o=t("../Mesh");i.prototype=Object.create(n.ObjectRenderer.prototype),i.prototype.constructor=i,e.exports=i,n.WebGLRenderer.registerPlugin("mesh",i),i.prototype.onContextChange=function(){},i.prototype.render=function(t){t._vertexBuffer||this._initWebGL(t);var e=this.renderer,r=e.gl,i=t._texture.baseTexture,n=t.shader,s=t.drawMode===o.DRAW_MODES.TRIANGLE_MESH?r.TRIANGLE_STRIP:r.TRIANGLES;e.blendModeManager.setBlendMode(t.blendMode),n=n?n.shaders[r.id]||n.getShader(e):e.shaderManager.plugins.meshShader,this.renderer.shaderManager.setShader(n),n.uniforms.translationMatrix.value=t.worldTransform.toArray(!0),n.uniforms.projectionMatrix.value=e.currentRenderTarget.projectionMatrix.toArray(!0),n.uniforms.alpha.value=t.worldAlpha,n.syncUniforms(),t.dirty?(t.dirty=!1,r.bindBuffer(r.ARRAY_BUFFER,t._vertexBuffer),r.bufferData(r.ARRAY_BUFFER,t.vertices,r.STATIC_DRAW),r.vertexAttribPointer(n.attributes.aVertexPosition,2,r.FLOAT,!1,0,0),r.bindBuffer(r.ARRAY_BUFFER,t._uvBuffer),r.bufferData(r.ARRAY_BUFFER,t.uvs,r.STATIC_DRAW),r.vertexAttribPointer(n.attributes.aTextureCoord,2,r.FLOAT,!1,0,0),r.activeTexture(r.TEXTURE0),i._glTextures[r.id]?r.bindTexture(r.TEXTURE_2D,i._glTextures[r.id]):this.renderer.updateTexture(i),r.bindBuffer(r.ELEMENT_ARRAY_BUFFER,t._indexBuffer),r.bufferData(r.ELEMENT_ARRAY_BUFFER,t.indices,r.STATIC_DRAW)):(r.bindBuffer(r.ARRAY_BUFFER,t._vertexBuffer),r.bufferSubData(r.ARRAY_BUFFER,0,t.vertices),r.vertexAttribPointer(n.attributes.aVertexPosition,2,r.FLOAT,!1,0,0),r.bindBuffer(r.ARRAY_BUFFER,t._uvBuffer),r.vertexAttribPointer(n.attributes.aTextureCoord,2,r.FLOAT,!1,0,0),r.activeTexture(r.TEXTURE0),i._glTextures[r.id]?r.bindTexture(r.TEXTURE_2D,i._glTextures[r.id]):this.renderer.updateTexture(i),r.bindBuffer(r.ELEMENT_ARRAY_BUFFER,t._indexBuffer),r.bufferSubData(r.ELEMENT_ARRAY_BUFFER,0,t.indices)),r.drawElements(s,t.indices.length,r.UNSIGNED_SHORT,0)},i.prototype._initWebGL=function(t){var e=this.renderer.gl;t._vertexBuffer=e.createBuffer(),t._indexBuffer=e.createBuffer(),t._uvBuffer=e.createBuffer(),e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferData(e.ARRAY_BUFFER,t.vertices,e.DYNAMIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferData(e.ARRAY_BUFFER,t.uvs,e.STATIC_DRAW),t.colors&&(t._colorBuffer=e.createBuffer(),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.bufferData(e.ARRAY_BUFFER,t.colors,e.STATIC_DRAW)),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer),e.bufferData(e.ELEMENT_ARRAY_BUFFER,t.indices,e.STATIC_DRAW)},i.prototype.flush=function(){},i.prototype.start=function(){this.currentShader=null},i.prototype.destroy=function(){n.ObjectRenderer.prototype.destroy.call(this)}},{"../../core":52,"../Mesh":153}],158:[function(t,e,r){function i(t){n.Shader.call(this,t,["precision lowp float;","attribute vec2 aVertexPosition;","attribute vec2 aTextureCoord;","uniform mat3 translationMatrix;","uniform mat3 projectionMatrix;","varying vec2 vTextureCoord;","void main(void){"," gl_Position = vec4((projectionMatrix * translationMatrix * vec3(aVertexPosition, 1.0)).xy, 0.0, 1.0);"," vTextureCoord = aTextureCoord;","}"].join("\n"),["precision lowp float;","varying vec2 vTextureCoord;","uniform float alpha;","uniform sampler2D uSampler;","void main(void){"," gl_FragColor = texture2D(uSampler, vTextureCoord) * alpha ;","}"].join("\n"),{alpha:{type:"1f",value:0},translationMatrix:{type:"mat3",value:new Float32Array(9)},projectionMatrix:{type:"mat3",value:new Float32Array(9)}},{aVertexPosition:0,aTextureCoord:0})}var n=t("../../core");i.prototype=Object.create(n.Shader.prototype),i.prototype.constructor=i,e.exports=i,n.ShaderManager.registerPlugin("meshShader",i)},{"../../core":52}],159:[function(t,e,r){Math.sign||(Math.sign=function(t){return t=+t,0===t||isNaN(t)?t:t>0?1:-1})},{}],160:[function(t,e,r){Object.assign||(Object.assign=t("object-assign"))},{"object-assign":26}],161:[function(t,e,r){t("./Object.assign"),t("./requestAnimationFrame"),t("./Math.sign")},{"./Math.sign":159,"./Object.assign":160,"./requestAnimationFrame":162}],162:[function(t,e,r){(function(t){if(Date.now&&Date.prototype.getTime||(Date.now=function(){return(new Date).getTime()}),!t.performance||!t.performance.now){var e=Date.now();t.performance||(t.performance={}),t.performance.now=function(){return Date.now()-e}}for(var r=Date.now(),i=["ms","moz","webkit","o"],n=0;ni&&(i=0),r=e,setTimeout(function(){r=Date.now(),t(performance.now())},i)}),t.cancelAnimationFrame||(t.cancelAnimationFrame=function(t){clearTimeout(t)})}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{}]},{},[143])(143)}); //# sourceMappingURL=pixi.min.js.map diff --git a/bin/pixi.min.js.map b/bin/pixi.min.js.map index 857d92a..419daff 100644 --- a/bin/pixi.min.js.map +++ b/bin/pixi.min.js.map @@ -1 +1 @@ -{"version":3,"sources":["pixi.js"],"names":["f","exports","module","define","amd","g","window","global","self","this","PIXI","e","t","n","r","s","o","u","a","require","i","Error","code","l","call","length",1,"createContext","setVertexAttribArrays","GLBuffer","GLFramebuffer","GLShader","GLTexture","VertexArrayObject","./lib/GLBuffer","./lib/GLFramebuffer","./lib/GLShader","./lib/GLTexture","./lib/VertexArrayObject","./lib/createContext","./lib/setVertexAttribArrays",2,"EMPTY_ARRAY_BUFFER","ArrayBuffer","Buffer","gl","type","data","drawType","buffer","createBuffer","ARRAY_BUFFER","STATIC_DRAW","upload","prototype","offset","dontBind","bind","byteLength","bufferSubData","bufferData","bindBuffer","createVertexBuffer","createIndexBuffer","ELEMENT_ARRAY_BUFFER","create",3,"Texture","Framebuffer","width","height","framebuffer","createFramebuffer","stencil","texture","enableTexture","framebufferTexture2D","FRAMEBUFFER","COLOR_ATTACHMENT0","TEXTURE_2D","enableStencil","createRenderbuffer","bindRenderbuffer","RENDERBUFFER","framebufferRenderbuffer","DEPTH_STENCIL_ATTACHMENT","renderbufferStorage","DEPTH_STENCIL","clear","b","clearColor","COLOR_BUFFER_BIT","bindFramebuffer","unbind","resize","texImage2D","format","destroy","deleteFramebuffer","createRGBA","enableNearestScaling","enableWrapClamp","RGBA","UNSIGNED_BYTE","fbo","createFloat32","fromData","./GLTexture",4,"compileProgram","extractAttributes","extractUniforms","generateUniformAccessObject","Shader","vertexSrc","fragmentSrc","program","attributes","uniformData","uniforms","useProgram","./shader/compileProgram","./shader/extractAttributes","./shader/extractUniforms","./shader/generateUniformAccessObject",5,"createTexture","mipmap","premultiplyAlpha","source","pixelStorei","UNPACK_PREMULTIPLY_ALPHA_WEBGL","FLOATING_POINT_AVAILABLE","uploadData","Float32Array","ext","getExtension","FLOAT","location","undefined","activeTexture","TEXTURE0","bindTexture","minFilter","linear","texParameteri","TEXTURE_MIN_FILTER","LINEAR_MIPMAP_LINEAR","NEAREST_MIPMAP_NEAREST","LINEAR","NEAREST","magFilter","TEXTURE_MAG_FILTER","enableMipmap","generateMipmap","enableLinearScaling","TEXTURE_WRAP_S","CLAMP_TO_EDGE","TEXTURE_WRAP_T","enableWrapRepeat","REPEAT","deleteTexture","fromSource",6,"nativeVaoExtension","nativeVao","createVertexArrayOES","indexBuffer","dirty","constructor","bindVertexArrayOES","activate","attrib","attribute","pointer","normalized","stride","start","enableVertexAttribArray","addAttribute","push","addIndex","options",7,"CONTEXT_UID","canvas","getContext","id",8,"GL_MAP","attribs","maxAttribs","getParameter","MAX_VERTEX_ATTRIBS","tempAttribState","Array","attribState","disableVertexAttribArray",9,"glVertShader","compileShader","VERTEX_SHADER","glFragShader","FRAGMENT_SHADER","createProgram","attachShader","linkProgram","getProgramParameter","LINK_STATUS","console","error","VALIDATE_STATUS","getError","getProgramInfoLog","warn","deleteProgram","deleteShader","src","shader","createShader","shaderSource","getShaderParameter","COMPILE_STATUS","log","getShaderInfoLog",10,"defaultValue","size","Int32Array","booleanArray","array",11,"mapType","mapSize","totalAttributes","ACTIVE_ATTRIBUTES","attribData","getActiveAttrib","name","getAttribLocation","vertexAttribPointer","./mapSize","./mapType",12,"totalUniforms","ACTIVE_UNIFORMS","getActiveUniform","replace","getUniformLocation","value","./defaultValue",13,"uniformKeys","Object","keys","fullName","nameTokens","split","uniformGroup","getUniformGroup","uniform","defineProperty","get","generateGetter","set","generateSetter","template","getterTemplate","Function","setTemplate","setterTemplate","GLSL_TO_SINGLE_SETTERS","GLSL_TO_ARRAY_SETTERS","cur","join","float","vec2","vec3","vec4","int","ivec2","ivec3","ivec4","bool","bvec2","bvec3","bvec4","mat2","mat3","mat4","sampler2D",14,"GLSL_TO_SIZE",15,"GL_TABLE","typeNames","GL_TO_GLSL_TYPES","tn","FLOAT_VEC2","FLOAT_VEC3","FLOAT_VEC4","INT","INT_VEC2","INT_VEC3","INT_VEC4","BOOL","BOOL_VEC2","BOOL_VEC3","BOOL_VEC4","FLOAT_MAT2","FLOAT_MAT3","FLOAT_MAT4","SAMPLER_2D",16,"process","noop","identity","v","toBool","notId","only_once","fn","apply","arguments","_once","_isArrayLike","arr","_isArray","_arrayEach","iterator","index","_map","result","_range","count","_reduce","memo","x","_forEachOf","object","_keys","key","_indexOf","item","_keyIterator","coll","len","_restParam","func","startIndex","Math","max","rest","_withoutIndex","callback","_eachOfLimit","limit","obj","nextKey","done","running","errored","replenish","err","doParallel","async","eachOf","doParallelLimit","doSeries","eachOfSeries","_asyncMap","eachfn","results","_filter","sort","_reject","cb","_createTester","check","getResult","iteratee","_","_findGetResult","_parallel","tasks","task","args","_concat","y","concat","_queue","worker","concurrency","payload","_insert","q","pos","started","idle","setImmediate","drain","unshift","saturated","_next","workers","removed","workersList","splice","empty","paused","kill","pause","resume","resumeCount","min","w","_console_fn","_times","mapper","_applyEach","fns","go","that","pop","ensureAsync","innerArgs","sync","previous_async","root","noConflict","_toString","toString","isArray","_isObject","k","hasOwnProperty","_setImmediate","_delay","setTimeout","nextTick","forEach","each","forEachSeries","eachSeries","forEachLimit","eachLimit","forEachOf","completed","iter","forEachOfSeries","iterate","forEachOfLimit","eachOfLimit","map","mapSeries","mapLimit","inject","foldl","reduce","foldr","reduceRight","reversed","reverse","transform","select","filter","selectLimit","filterLimit","selectSeries","filterSeries","reject","rejectLimit","rejectSeries","any","some","someLimit","all","every","everyLimit","detect","detectSeries","detectLimit","sortBy","comparator","left","right","criteria","auto","addListener","listeners","removeListener","idx","taskComplete","remainingTasks","slice","runningTasks","ready","requires","listener","taskCallback","dep","safeResults","val","rkey","retry","times","parseTimes","acc","parseInt","DEFAULT_TIMES","interval","DEFAULT_INTERVAL","wrappedTask","wrappedCallback","wrappedResults","retryAttempt","finalAttempt","seriesCallback","retryInterval","opts","attempts","series","waterfall","wrapIterator","next","parallel","parallelLimit","makeCallback","callArgs","concatSeries","whilst","test","doWhilst","calls","until","doUntil","during","truth","doDuring","queue","items","priorityQueue","_compareTasks","priority","_binarySearch","sequence","compare","beg","end","mid","cargo","dir","memoize","hasher","queues","memoized","unmemoized","unmemoize","timesSeries","timesLimit","seq","newargs","nextargs","compose","applyEach","applyEachSeries","forever","constant","values","wrapSync","asyncify","then","message","_process",17,"normalizeArray","parts","allowAboveRoot","up","last","xs","res","splitPathRe","splitPath","filename","exec","resolve","resolvedPath","resolvedAbsolute","path","cwd","TypeError","charAt","p","normalize","isAbsolute","trailingSlash","substr","paths","relative","from","to","trim","fromParts","toParts","samePartsLength","outputParts","sep","delimiter","dirname","basename","extname","str",18,"cleanUpNextTick","draining","currentQueue","queueIndex","drainQueue","timeout","run","clearTimeout","Item","fun","title","browser","env","argv","version","versions","on","once","off","removeAllListeners","emit","binding","chdir","umask",19,"RangeError","errors","mapDomain","string","regexSeparators","labels","encoded","ucs2decode","extra","output","counter","charCodeAt","ucs2encode","stringFromCharCode","basicToDigit","codePoint","base","digitToBasic","digit","flag","adapt","delta","numPoints","firstTime","floor","damp","baseMinusTMin","tMax","skew","decode","input","out","basic","j","oldi","baseMinusT","inputLength","initialN","bias","initialBias","lastIndexOf","maxInt","tMin","encode","handledCPCount","basicLength","m","currentValue","handledCPCountPlusOne","qMinusT","toUnicode","regexPunycode","toLowerCase","toASCII","regexNonASCII","freeExports","nodeType","freeModule","freeGlobal","punycode","overflow","not-basic","invalid-input","String","fromCharCode","ucs2",20,"prop","qs","eq","regexp","maxKeys","kstr","vstr","indexOf","decodeURIComponent",21,"stringifyPrimitive","isFinite","objectKeys","ks","encodeURIComponent",22,"parse","stringify","./decode","./encode",23,"Url","protocol","slashes","auth","host","port","hostname","hash","search","query","pathname","href","urlParse","url","parseQueryString","slashesDenoteHost","isObject","urlFormat","isString","urlResolve","urlResolveObject","resolveObject","arg","isNull","isNullOrUndefined","protocolPattern","portPattern","delims","unwise","autoEscape","nonHostChars","hostEndingChars","hostnameMaxLen","hostnamePartPattern","hostnamePartStart","unsafeProtocol","javascript","javascript:","hostlessProtocol","slashedProtocol","http","https","ftp","gopher","file","http:","https:","ftp:","gopher:","file:","querystring","proto","lowerProto","match","hostEnd","hec","atSign","parseHost","ipv6Hostname","hostparts","part","newpart","validParts","notHost","bit","domainArray","newOut","h","ae","esc","escape","qm","rel","relPath","shift","isSourceAbs","isRelAbs","mustEndAbs","removeAllDots","srcPath","psychotic","authInHost","hasTrailingSlash",24,"earcut","holeIndices","dim","hasHoles","outerLen","outerNode","linkedList","triangles","minX","minY","maxX","maxY","eliminateHoles","earcutLinked","clockwise","sum","insertNode","filterPoints","again","steiner","equals","area","prev","removeNode","ear","pass","indexCurve","stop","isEarHashed","isEar","cureLocalIntersections","splitEarcut","c","pointInTriangle","minTX","minTY","maxTX","maxTY","minZ","zOrder","maxZ","nextZ","z","prevZ","intersects","locallyInside","isValidDiagonal","splitPolygon","list","getLeftmost","compareX","eliminateHole","hole","findHoleBridge","hx","hy","qx","Infinity","tan","tanMin","abs","sortLinked","tail","numMerges","pSize","qSize","inSize","leftmost","ax","ay","bx","by","cx","cy","px","py","intersectsPolygon","middleInside","p1","p2","q1","q2","inside","a2","Node","b2","an","bp",25,"EE","context","EventEmitter","prefix","_events","event","exists","evt","available","ee","a1","a3","a4","a5","events","setMaxListeners","prefixed",26,"toObject","propIsEnumerable","propertyIsEnumerable","assign","target","symbols","getOwnPropertySymbols",27,"called","_each","_eachLimit","_mapLimit","_detect","main_callback","theCallback","working","drained","ts","ds",28,"Loader","baseUrl","progress","loading","_progressChunk","_beforeMiddleware","_afterMiddleware","_boundLoadResource","_loadResource","_boundOnLoad","_onLoad","_buffer","_numToLoad","resources","urlParser","Resource","add","enqueue","onComplete","_handleBaseUrl","parsedUrl","before","pre","after","use","reset","load","resource","dequeue","_dequeue","_runMiddleware","_onComplete","LOAD_TYPE","XHR_READY_STATE","XHR_RESPONSE_TYPE","./Resource","eventemitter3",29,"isDataUrl","crossOrigin","loadType","_determineLoadType","xhrType","metadata","xhr","isJson","isXml","isImage","isAudio","isVideo","_boundComplete","complete","_boundOnError","_onError","_boundOnProgress","_onProgress","_boundXhrOnError","_xhrOnError","_boundXhrOnAbort","_xhrOnAbort","_boundXhrOnLoad","_xhrOnLoad","_boundXdrOnTimeout","_xdrOnTimeout","reqType","setExtMap","substring","_url","useXdr","XDomainRequest","XMLHttpRequest","tempAnchor","removeEventListener","onerror","ontimeout","onprogress","onload","_determineCrossOrigin","IMAGE","_loadImage","AUDIO","_loadElement","VIDEO","XHR","_loadXdr","_loadXhr","Image","addEventListener","Audio","document","createElement","navigator","isCocoonJS","appendChild","_createSource","toUpperCase","_determineXhrType","open","JSON","DOCUMENT","responseType","TEXT","send","xdr","mime","nodeName","lengthComputable","loaded","total","status","statusText","responseText","DOMParser","domparser","parseFromString","div","innerHTML","response","responseURL","loc","samePort","_xhrTypeMap","_getExtension","_loadTypeMap","slashIndex","queryStart","_getMimeFromXhrType","BUFFER","BLOB","DEFAULT","UNSENT","OPENED","HEADERS_RECEIVED","LOADING","DONE","gif","png","bmp","jpg","jpeg","tif","tiff","webp","tga","xhtml","html","htm","xml","tmx","tsx","svg","json","text","txt","setExtensionLoadType","setExtensionXhrType",30,"_keyStr","encodeBinary","bytebuffer","encodedCharIndexes","inx","jnx","paddingBytes",31,"middleware","caching","memory","parsing","blob","./Loader","./middlewares/caching/memory","./middlewares/parsing/blob",32,"cache",33,"b64","URL","webkitURL","Blob","createObjectURL","revokeObjectURL","getResponseHeader","../../Resource","../../b64",34,"description","author","contributors","main","homepage","bugs","license","repository","scripts","build","docs","files","dependencies","brfs","object-assign","pixi-gl-core","resource-loader","devDependencies","browserify","chai","del","gulp","gulp-cached","gulp-concat","gulp-debug","gulp-header","gulp-jshint","gulp-mirror","gulp-plumber","gulp-rename","gulp-sourcemaps","gulp-uglify","gulp-util","jaguarjs-jsdoc","jsdoc","jshint-summary","minimist","mocha","require-dir","run-sequence","testem","vinyl-buffer","vinyl-source-stream","watchify",35,"AccessibilityManager","renderer","style","position","top","zIndex","pool","renderId","debug","children","_onKeyDown","_onMouseMove","isActive","core","DisplayObject","update","view","parentNode","deactivate","removeChild","updateAccessibleObjects","displayObject","visible","accessible","interactive","_accessibleActive","addChild","_lastObjectRendered","rect","getBoundingClientRect","sx","sy","child","utils","removeItems","_accessibleDiv","hitArea","wt","worldTransform","tx","ty","d","getBounds","capHitArea","backgroundColor","borderStyle","_onClick","_onFocus","_onFocusOut","accessibleTitle","tabIndex","interactionManager","plugins","interaction","dispatchEvent","eventData","keyCode","WebGLRenderer","registerPlugin","CanvasRenderer","../core","./accessibleTarget",36,"accessibleTarget",37,"./AccessibilityManager",38,"CONST","VERSION","PI_2","PI","RAD_TO_DEG","DEG_TO_RAD","TARGET_FPMS","RENDERER_TYPE","UNKNOWN","WEBGL","CANVAS","BLEND_MODES","NORMAL","ADD","MULTIPLY","SCREEN","OVERLAY","DARKEN","LIGHTEN","COLOR_DODGE","COLOR_BURN","HARD_LIGHT","SOFT_LIGHT","DIFFERENCE","EXCLUSION","HUE","SATURATION","COLOR","LUMINOSITY","DRAW_MODES","POINTS","LINES","LINE_LOOP","LINE_STRIP","TRIANGLES","TRIANGLE_STRIP","TRIANGLE_FAN","SCALE_MODES","RETINA_PREFIX","RESOLUTION","FILTER_RESOLUTION","DEFAULT_RENDER_OPTIONS","resolution","antialias","forceFXAA","autoResize","transparent","clearBeforeRender","preserveDrawingBuffer","roundPixels","SHAPES","POLY","RECT","CIRC","ELIP","RREC","SPRITE_BATCH_SIZE","../../package.json",39,"Container","math","RenderTexture","_tempMatrix","Matrix","defineProperties","scale","getLocalBounds","_width","_height","onChildrenChange","argumentsLength","parent","addChildAt","swapChildren","child2","index1","getChildIndex","index2","setChildIndex","currentIndex","getChildAt","removeChildAt","removeChildren","beginIndex","endIndex","begin","range","generateTexture","scaleMode","bounds","renderTexture","render","updateTransform","displayObjectUpdateTransform","containerUpdateTransform","_currentBounds","Rectangle","EMPTY","childBounds","childMaxX","childMaxY","childVisible","_bounds","containerGetBounds","matrixCache","IDENTITY","renderWebGL","worldAlpha","renderable","_mask","_filters","currentRenderer","flush","filterManager","pushFilter","maskManager","pushMask","_renderWebGL","popMask","popFilter","_renderCanvas","renderCanvas","alpha","destroyChildren","../math","../textures/RenderTexture","../utils","./DisplayObject",40,"Point","pivot","_rotation","localTransform","filterArea","_sr","_cr","_tempDisplayObjectParent","scaleX","scaleY","rotation","sin","cos","worldVisible","mask","filters","pt","lt","matrix","toGlobal","toLocal","point","applyInverse","setParent","container","setTransform","skewX","skewY","pivotX","pivotY","../const",41,"Graphics","fillAlpha","lineWidth","lineColor","graphicsData","tint","_prevTint","blendMode","currentPath","_webGL","isMask","boundsPadding","_localBounds","glDirty","boundsDirty","cachedSpriteDirty","CanvasBuffer","CanvasGraphics","GraphicsData","tempPoint","clone","updateLocalBounds","lineStyle","color","lineAlpha","shape","points","Polygon","closed","drawShape","moveTo","lineTo","quadraticCurveTo","cpX","cpY","toX","toY","xa","ya","fromX","fromY","bezierCurveTo","cpX2","cpY2","dt","dt2","dt3","t2","t3","arcTo","x1","y1","x2","y2","radius","b1","mm","dd","cc","tt","k1","sqrt","k2","j1","j2","qy","startAngle","atan2","endAngle","arc","anticlockwise","sweep","segs","ceil","startX","startY","theta","theta2","cTheta","sTheta","segMinus","remainder","real","angle","beginFill","filling","fillColor","fill","endFill","drawRect","drawRoundedRect","RoundedRectangle","drawCircle","Circle","drawEllipse","Ellipse","drawPolygon","clearDirty","canvasBuffer","fromCanvas","baseTexture","translate","renderGraphics","setObjectRenderer","graphics","compositeOperation","blendModes","globalCompositeOperation","w0","w1","h0","h1","x3","y3","x4","y4","containsPoint","contains","padding","_webgl","../display/Container","../renderers/canvas/utils/CanvasBuffer","../renderers/canvas/utils/CanvasGraphics","../textures/Texture","./GraphicsData",42,"_lineTint","_fillTint",43,"GraphicsRenderer","ObjectRenderer","graphicsDataPool","primitiveShader","complexPrimitiveShader","maximumSimplePolySize","WebGLGraphicsData","onContextChange","webGLData","shaderManager","updateGraphics","webGL","blendModeManager","setBlendMode","mode","stencilManager","pushStencil","uniform1f","_location","drawElements","UNSIGNED_SHORT","indices","popStencil","setShader","uniformMatrix3fv","translationMatrix","toArray","projectionMatrix","currentRenderTarget","uniform3fv","hex2rgb","aVertexPosition","aColor","drawCount","lastIndex","switchMode","canDrawUsingSimple","buildPoly","buildComplexPoly","buildLine","buildRectangle","buildCircle","buildRoundedRectangle","rectData","verts","vertPos","tempPoints","rrectData","recPoints","quadraticBezierCurve","vecPos","getPt","n1","n2","perc","diff","xb","yb","circleData","totalSegs","seg","firstPoint","lastPoint","midPointX","midPointY","p1x","p1y","p2x","p2y","p3x","p3y","perpx","perpy","perp2x","perp2y","perp3x","perp3y","c1","c2","denom","pdist","dist","indexCount","indexStart","../../const","../../math","../../renderers/webgl/WebGLRenderer","../../renderers/webgl/utils/ObjectRenderer","../../utils","./WebGLGraphicsData",44,"glPoints","glIndices","Uint16Array","deleteBuffer",45,"ticker","Sprite","ParticleContainer","SpriteRenderer","ParticleRenderer","Text","BaseTexture","VideoBaseTexture","TextureUvs","WebGLManager","ShaderManager","RenderTarget","AbstractFilter","FXAAFilter","SpriteMaskFilter","glCore","autoDetectRenderer","noWebGL","isWebGLSupported","./const","./display/Container","./display/DisplayObject","./graphics/Graphics","./graphics/GraphicsData","./graphics/webgl/GraphicsRenderer","./math","./particles/ParticleContainer","./particles/webgl/ParticleRenderer","./renderers/canvas/CanvasRenderer","./renderers/canvas/utils/CanvasBuffer","./renderers/canvas/utils/CanvasGraphics","./renderers/webgl/WebGLRenderer","./renderers/webgl/filters/AbstractFilter","./renderers/webgl/filters/FXAAFilter","./renderers/webgl/filters/SpriteMaskFilter","./renderers/webgl/managers/ShaderManager","./renderers/webgl/managers/WebGLManager","./renderers/webgl/shaders/Shader","./renderers/webgl/utils/ObjectRenderer","./renderers/webgl/utils/RenderTarget","./sprites/Sprite","./sprites/webgl/SpriteRenderer","./text/Text","./textures/BaseTexture","./textures/RenderTexture","./textures/Texture","./textures/TextureUvs","./textures/VideoBaseTexture","./ticker","./utils",46,"fromArray","transpose","newPos","rotate","tx1","append","d1","sr","cr","nsx","prepend","invert","copy","TEMP_MATRIX","./Point",47,48,"./Matrix","./shapes/Circle","./shapes/Ellipse","./shapes/Polygon","./shapes/Rectangle","./shapes/RoundedRectangle",49,"dx","dy","r2","./Rectangle",50,"normx","normy",51,"points_","il","xi","yi","xj","yj","intersect","../Point",52,53,54,"maxSize","properties","batchSize","maxBatchSize","_properties","_maxSize","_batchSize","_buffers","_bufferToUpdate","interactiveChildren","setProperties","uvs","particle","smallestChildIndex","bufferIndex","isRotated","positionX","positionY","finalWidth","finalHeight","globalAlpha","frame","anchor","childTransform","drawImage",55,"ParticleBuffer","dynamicPropertyFlags","vertSize","vertByteSize","dynamicProperties","staticProperties","property","staticStride","staticBuffer","staticData","dynamicStride","dynamicBuffer","dynamicData","initBuffers","dynamicOffset","DYNAMIC_DRAW","staticOffset","uploadDynamic","amount","uploadFunction","uploadStatic",56,"numIndices","tempMatrix","ParticleShader","uploadVertices","aPositionCoord","uploadPosition","aRotation","uploadRotation","aTextureCoord","uploadUvs","uploadAlpha","totalChildren","generateBuffers","uAlpha","_texture","_glTextures","updateTexture","buffers","sprite","crop","_frame","spritePosition","spriteRotation","textureUvs","_uvs","x0","y0","spriteAlpha","./ParticleBuffer","./ParticleShader",57,"TextureShader","../../renderers/webgl/shaders/TextureShader",58,"SystemRenderer","system","sayHello","_backgroundColor","_backgroundColorRgba","_backgroundColorString","hex2string","removeView",59,"refresh","CanvasMaskManager","smoothProperty","imageSmoothingEnabled","webkitImageSmoothingEnabled","mozImageSmoothingEnabled","oImageSmoothingEnabled","msImageSmoothingEnabled","initPlugins","_mapBlendModes","pluginTarget","mixin","cacheParent","screencanvas","fillStyle","clearRect","fillRect","renderDisplayObject","destroyPlugins","tempContext","canUseNewCanvasBlendModes","../SystemRenderer","./utils/CanvasMaskManager",60,61,"updateGraphicsTint","beginPath","closePath","strokeStyle","stroke","strokeRect","kappa","ox","oy","xe","ye","xm","ym","rx","ry","maxRadius","renderGraphicsMask","tintR","tintG","tintB","../../../const",62,"maskData","save","cacheAlpha","clip","restore","./CanvasGraphics",63,"CanvasTinter","getTintedTexture","roundColor","stringColor","tintCache","tintMethod","convertTintToImage","tintImage","toDataURL","tintWithMultiply","tintWithOverlay","tintWithPerPixel","rgbValues","pixelData","getImageData","pixels","putImageData","step","cacheStepsPerColorChannel","rgb2hex","canUseMultiply","../../../utils",64,"TextureManager","_managedTextures","glTextures","getTexture","hasLoaded","glTexture","uid","destroyTexture","_skipRemove","removeAll",65,"handleContextLost","handleContextRestored","_contextOptions","premultipliedAlpha","MaskManager","StencilManager","FilterManager","BlendModeManager","_initContext","mapWebGLBlendModesToPixi","drawModes","mapWebGLDrawModesToPixi","_activeShader","_activeRenderTarget","_activeTextureLocation","_activeTexture","textureManager","disable","DEPTH_TEST","CULL_FACE","enable","BLEND","rootRenderTarget","bindRenderTarget","isContextLost","renderTarget","setFilterStack","filterStack","objectRenderer","setMaskStack","stencilMaskStack","bindShader","preventDefault","destroyAll","./TextureManager","./filters/FXAAFilter","./managers/BlendModeManager","./managers/FilterManager","./managers/MaskManager","./managers/ShaderManager","./managers/StencilManager","./utils/ObjectRenderer","./utils/RenderTarget","./utils/mapWebGLBlendModesToPixi","./utils/mapWebGLDrawModesToPixi",66,"shaders","DefaultShader","defaultVertexSrc","defaultFragmentSrc","getShader","applyFilter","syncUniform","../shaders/TextureShader",67,"./AbstractFilter",68,"maskMatrix","otherMatrix","maskSprite","calculateMappedMatrix","../../../math",69,"currentBlendMode","blendFunc","./WebGLManager",70,"texturePool","textureSize","currentFrame","Quad","quad","capFilterArea","getRenderTarget","setRenderTarget","filterData","previousFilterData","vertexBuffer","defaultShader","dimensions","vertices","returnRenderTarget","flipTexture","flopTexture","temp","inputTarget","outputTarget","syncUniforms","outputMatrix","mappedMatrix","ratio","translateScaleX","translateScaleY","offsetY","../utils/Quad","../utils/RenderTarget",71,"stencilStack","alphaMaskPool","AlphaMaskFilter","pushSpriteMask","pushStencilMask","popSpriteMask","popStencilMask","alphaMaskFilter","../filters/SpriteMaskFilter",72,"maxAttibs","stack","_currentId","currentShader","ComplexPrimitiveShader","PrimitiveShader","setAttribs","../shaders/ComplexPrimitiveShader","../shaders/PrimitiveShader",73,"WebGLMaskManager","STENCIL_TEST","attachStencilBuffer","sms","bindGraphics","STENCIL_BUFFER_BIT","level","colorMask","stencilFunc","ALWAYS","stencilOp","KEEP","INVERT","EQUAL","DECR","INCR",74,75,"./Shader",76,77,"textureCount","init","compile","cacheUniformLocations","cacheAttributeLocations","_glCompile","uniform1i","uniform2f","uniform3f","uniform4f","uniform1iv","uniform2iv","uniform3iv","uniform4iv","uniform1fv","uniform2fv","uniform4fv","uniformMatrix2fv","uniformMatrix4fv","_array","initSampler2D","textureData","luminance","LUMINANCE","wrapS","wrapT",78,"customUniforms","customAttributes","uSampler",79,80,"../managers/WebGLManager",81,"colors","rect2",82,"StencilMaskStack","frameBuffer","stencilBuffer","projectionFrame","calculateProjection","viewport","pm","./StencilMaskStack",83,84,"ONE","ONE_MINUS_SRC_ALPHA","SRC_ALPHA","DST_ALPHA","DST_COLOR",85,86,"cachedTint","textureDirty","vertexDirty","vertexData","sign","_onTextureUpdate","caclulateVertices","valid","smoothingEnabled","tintedTexture","destroyBaseTexture","fromFrame","frameId","TextureCache","fromImage","imageId","crossorigin","../renderers/canvas/utils/CanvasTinter",87,"numVerts","positions","Uint32Array","createIndicesForQuads","currentBatchSize","sprites","groupCount","groups","textures","ids","blend","currentGroup","currentTexture","generateMultiTextureShader","MAX_TEXTUES","_shader","vao","aTextureId","nextTexture","_enabled","_id","uvs_uint32","renderSprites","subarray","group","../../renderers/webgl/shaders/_TextureShader","../../utils/createIndicesForQuads","./generateMultiTextureShader",88,"maxTextures","generateSampleSrc","fragTemplate","sampleValues","uSamplers",89,"_text","_style","fontPropertiesCache","fontPropertiesCanvas","fontPropertiesContext","updateText","dropShadowColor","font","align","strokeThickness","wordWrap","wordWrapWidth","dropShadow","dropShadowAngle","dropShadowDistance","dropShadowBlur","textBaseline","lineJoin","miterLimit","outputText","lines","lineWidths","maxLineWidth","fontProperties","determineFontProperties","measureText","lineHeight","fontSize","linePositionX","linePositionY","shadowColor","shadowBlur","xShadowOffset","yShadowOffset","ascent","fillText","strokeText","fontStyle","baseline","imagedata","line","descent","spaceLeft","words","wordWidth","wordWidthWithSpace","../sprites/Sprite",90,"realWidth","realHeight","isLoading","imageUrl","isPowerOfTwo","_active","loadSource","naturalWidth","naturalHeight","wasLoading","_sourceLoaded","scope","BaseTextureCache","_pixiId","dispose","updateSourceImage","newSrc","image","getResolutionOfUrl",91,"textureBuffer","_updateUvs","updateBase","currentBounds","cachedWt","realResolution","getImage","getBase64","getCanvas","webGLPixels","Uint8Array","readPixels","tempCanvas","canvasData","getPixels","getPixel","../renderers/webgl/managers/FilterManager","../renderers/webgl/utils/RenderTarget","./BaseTexture","./Texture",92,"noFrame","requiresUpdate","onBaseTextureUpdated","onBaseTextureLoaded","destroyBase","fromVideo","video","fromVideoUrl","videoUrl","fromUrl","addTextureToCache","removeTextureFromCache","./TextureUvs","./VideoBaseTexture",93,"xy0_uint32","xy1_uint32","xy2_uint32","xy3_uint32","baseFrame","tw","th",94,"readyState","HAVE_ENOUGH_DATA","HAVE_FUTURE_DATA","autoUpdate","_onUpdate","_onCanPlay","_onPlayStart","_onPlayStop","__loaded","createSource","requestAnimationFrame","videoWidth","videoHeight","play","videoSrc","fromUrls",95,"Ticker","_this","_tick","time","_requestId","_emitter","TICK","_maxElapsedMS","autoStart","deltaTime","elapsedMS","lastTime","speed","FPS","minFPS","fps","minFPMS","_requestIfNeeded","performance","now","_cancelIfNeeded","cancelAnimationFrame","_startIfPossible","addOnce","remove","currentTime",96,"shared","./Ticker",97,"totalIndices",98,"_uid","_saidHello","hex","rgb","pngHead","pngEnd","magenta","yellow","getNextPowerOfTwo","number","parseFloat","userAgent","contextOptions","WebGLRenderingContext","getContextAttributes","startIdx","removeCount","./pluginTarget",99,"__plugins","pluginName","ctor",100,"mesh","extras","SpriteBatch","ReferenceError","AssetLoader","Stage","DisplayObjectContainer","Strip","Mesh","Rope","MovieClip","TilingSprite","BitmapText","scaleModes","setTexture","setText","setStyle","setFrame","uuid","./core","./extras","./filters","./mesh",101,"textWidth","textHeight","_glyphs","_font","maxWidth","maxLineHeight","fonts","prevCharCode","chars","lastLineWidth","lastSpace","charCode","charData","kerning","xOffset","yOffset","xAdvance","lineAlignOffsets","alignOffset","lenChars","validate",102,"_textures","_durations","animationSpeed","loop","_currentTime","playing","totalFrames","gotoAndStop","frameNumber","gotoAndPlay","elapsed","lag","fromFrames","frames","fromImages","images",103,"tileScale","tilePosition","_canvasPattern","uFrame","uTransform","uPixelSize","tempUvs","tempWidth","tempHeight","modX","modY","createPattern","_tileScaleOffset","../core/renderers/canvas/utils/CanvasTinter",104,"_cacheAsBitmap","_originalRenderWebGL","_originalRenderCanvas","_originalUpdateTransform","_originalHitTest","_originalDestroy","_cachedSprite","cacheAsBitmap","_originalGetBounds","_originalContainsPoint","_renderCachedWebGL","_renderCachedCanvas","_cacheAsBitmapDestroy","_destroyCachedDisplayObject","_initCachedDisplayObject","cachedRenderTarget","_getCachedBounds","_initCachedDisplayObjectCanvas",105,"getChildByName",106,"getGlobalPosition",107,"./BitmapText","./MovieClip","./TilingSprite","./cacheAsBitmap","./getChildByName","./getGlobalPosition",108,"AsciiFilter","pixelSize","../../core",109,"BloomFilter","blurXFilter","BlurXFilter","blurYFilter","BlurYFilter","defaultFilter","blur","blurX","blurY","../blur/BlurXFilter","../blur/BlurYFilter",110,"BlurDirFilter","dirX","dirY","strength","passes",111,"BlurFilter","./BlurXFilter","./BlurYFilter",112,"flip","flop",113,114,"SmartBlurFilter",115,"ColorMatrixFilter","_loadMatrix","multiply","newMatrix","_multiply","_colorMatrix","brightness","greyscale","grayscale","blackAndWhite","hue","lumR","lumG","lumB","contrast","saturate","desaturate","negative","sepia","technicolor","polaroid","toBGR","kodachrome","browni","vintage","colorTone","desaturation","toned","lightColor","darkColor","lR","lG","lB","dR","dG","dB","night","intensity","predator","lsd",116,"ColorStepFilter",117,"ConvolutionFilter","texelSize",118,"CrossHatchFilter",119,"DisplacementFilter","mapSampler",120,"DotScreenFilter",121,"BlurYTintFilter",122,"DropShadowFilter","blurYTintFilter","_dirtyPosition","_angle","_distance","hideObject","distance","./BlurYTintFilter",123,"GrayFilter","gray",124,"InvertFilter","NoiseFilter","PixelateFilter","RGBSplitFilter","ShockwaveFilter","SepiaFilter","TiltShiftFilter","TiltShiftXFilter","TiltShiftYFilter","TwistFilter","./ascii/AsciiFilter","./bloom/BloomFilter","./blur/BlurDirFilter","./blur/BlurFilter","./blur/BlurXFilter","./blur/BlurYFilter","./blur/SmartBlurFilter","./color/ColorMatrixFilter","./color/ColorStepFilter","./convolution/ConvolutionFilter","./crosshatch/CrossHatchFilter","./displacement/DisplacementFilter","./dot/DotScreenFilter","./dropshadow/DropShadowFilter","./gray/GrayFilter","./invert/InvertFilter","./noise/NoiseFilter","./pixelate/PixelateFilter","./rgb/RGBSplitFilter","./sepia/SepiaFilter","./shockwave/ShockwaveFilter","./tiltshift/TiltShiftFilter","./tiltshift/TiltShiftXFilter","./tiltshift/TiltShiftYFilter","./twist/TwistFilter",125,126,"noise",127,128,"red","green","blue",129,130,"center","params",131,"TiltShiftAxisFilter","gradientBlur","innerHeight","texSize","innerWidth","updateDelta",132,"tiltShiftXFilter","tiltShiftYFilter","./TiltShiftXFilter","./TiltShiftYFilter",133,"./TiltShiftAxisFilter",134,135,136,"loaders","accessibility","loader","./accessibility","./deprecation","./interaction","./loaders","./polyfill",137,"InteractionData","originalEvent","getLocalPosition","globalPos",138,"InteractionManager","autoPreventDefault","interactionFrequency","mouse","stopped","stopPropagation","interactiveDataPool","interactionDOMElement","eventsAdded","onMouseUp","processMouseUp","onMouseDown","processMouseDown","onMouseMove","processMouseMove","onMouseOut","processMouseOverOut","onTouchStart","processTouchStart","onTouchEnd","processTouchEnd","onTouchMove","processTouchMove","currentCursorStyle","_tempPoint","setTargetElement","element","removeEvents","addEvents","msPointerEnabled","_deltaTime","didMove","cursor","processInteractive","eventString","mapPositionToPoint","hitTest","hit","interactiveParent","clientX","clientY","isRightButton","button","which","isDown","_over","buttonMode","defaultCursor","changedTouches","cLength","touchEvent","touchData","getTouchData","returnTouchData","_touchDown","identifier","globalX","globalY","./InteractionData","./interactiveTarget",139,"interactiveTarget","./InteractionManager",140,141,"info","getElementsByTagName","common","getAttribute","letters","textureRect","kernings","first","second","bitmapFont","xmlUrl","textureUrl","loadOptions","imageMetadata","../extras",142,"bitmapFontParser","spritesheetParser","textureParser","./bitmapFontParser","./loader","./spritesheetParser","./textureParser",143,"ResourceLoader","_pixiMiddleware","addPixiMiddleware",144,"route","meta","rotated","trimmed","spriteSourceSize","sourceSize",145,146,"drawMode","canvasPadding","TRIANGLE_MESH","tempPolygon","_renderCanvasTriangleMesh","_renderCanvasTriangles","_renderCanvasDrawTriangle","index0","textureSource","textureWidth","textureHeight","u0","u1","u2","v0","v1","v2","paddingX","paddingY","centerX","centerY","normX","normY","deltaA","deltaB","deltaC","deltaD","deltaE","deltaF","renderMeshFlat","updateFrame","rawX","rawY","ind0","ind1","ind2",147,"Plane","segmentsX","segmentsY","_ready","segmentsXSub","segmentsYSub","sizeX","sizeY","totalSub","xpos","ypos","value2","value3","value4","./Mesh",148,"factor","nextPoint","perpLength","num","perpX","perpY",149,"MeshRenderer","MeshShader","./Plane","./Rope","./webgl/MeshRenderer","./webgl/MeshShader",150,"_vertexBuffer","_initWebGL","meshShader","_uvBuffer","_indexBuffer","_colorBuffer","../Mesh",151,152,"isNaN",153,154,"./Math.sign","./Object.assign","./requestAnimationFrame",155,"Date","getTime","startTime","vendors","delay"],"mappings":"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EAAA,GAAAuE,EAAA,GAAAvE,EAAA,GAAAuE,EAAA,GAAAvE,EAAA,GAAAuE,EAAA,IAAAvE,EAAA,GAAAuE,EAAA,IACAqkB,EAAA,GAAA5oB,EAAA,GAAAuE,EAAA,GAAAvE,EAAA,GAAAuE,EAAA,GAAAvE,EAAA,GAAAuE,EAAA,IAAAvE,EAAA,GAAAuE,EAAA,IAGAqkB,EAAA,IAAA5oB,EAAA,IAAAuE,EAAA,GAAAvE,EAAA,IAAAuE,EAAA,GAAAvE,EAAA,IAAAuE,EAAA,IAAAvE,EAAA,IAAAuE,EAAA,IACAqkB,EAAA,IAAA5oB,EAAA,IAAAuE,EAAA,GAAAvE,EAAA,IAAAuE,EAAA,GAAAvE,EAAA,IAAAuE,EAAA,IAAAvE,EAAA,IAAAuE,EAAA,IACAqkB,EAAA,IAAA5oB,EAAA,IAAAuE,EAAA,GAAAvE,EAAA,IAAAuE,EAAA,GAAAvE,EAAA,IAAAuE,EAAA,IAAAvE,EAAA,IAAAuE,EAAA,IACAqkB,EAAA,IAAA5oB,EAAA,IAAAuE,EAAA,GAAAvE,EAAA,IAAAuE,EAAA,GAAAvE,EAAA,IAAAuE,EAAA,IAAAvE,EAAA,IAAAuE,EAAA,IACAqkB,EAAA,IAAA5oB,EAAA,IAAAuE,EAAA,GAAAvE,EAAA,IAAAuE,EAAA,GAAAvE,EAAA,IAAAuE,EAAA,IAAAvE,EAAA,IAAAuE,EAAA,IAGAqkB,EAAA,IAAA5oB,EAAA,IAAAuE,EAAA,GAAAvE,EAAA,IAAAuE,EAAA,GAAAvE,EAAA,IAAAuE,EAAA,IAAAvE,EAAA,IAAAuE,EAAA,IACAqkB,EAAA,IAAA5oB,EAAA,IAAAuE,EAAA,GAAAvE,EAAA,IAAAuE,EAAA,GAAAvE,EAAA,IAAAuE,EAAA,IAAAvE,EAAA,IAAAuE,EAAA,IACAqkB,EAAA,IAAA5oB,EAAA,IAAAuE,EAAA,GAAAvE,EAAA,IAAAuE,EAAA,GAAAvE,EAAA,IAAAuE,EAAA,IAAAvE,EAAA,IAAAuE,EAAA,IACAqkB,EAAA,IAAA5oB,EAAA,IAAAuE,EAAA,GAAAvE,EAAA,IAAAuE,EAAA,GAAAvE,EAAA,IAAAuE,EAAA,IAAAvE,EAAA,IAAAuE,EAAA,IACAqkB,EAA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","file":"pixi.min.js","sourcesContent":[null],"sourceRoot":"./"} \ No newline at end of file +{"version":3,"sources":["pixi.js"],"names":["f","exports","module","define","amd","g","window","global","self","this","PIXI","e","t","n","r","s","o","u","a","require","i","Error","code","l","call","length",1,"createContext","setVertexAttribArrays","GLBuffer","GLFramebuffer","GLShader","GLTexture","VertexArrayObject","./lib/GLBuffer","./lib/GLFramebuffer","./lib/GLShader","./lib/GLTexture","./lib/VertexArrayObject","./lib/createContext","./lib/setVertexAttribArrays",2,"EMPTY_ARRAY_BUFFER","ArrayBuffer","Buffer","gl","type","data","drawType","buffer","createBuffer","ARRAY_BUFFER","STATIC_DRAW","upload","prototype","offset","dontBind","bind","byteLength","bufferSubData","bufferData","bindBuffer","createVertexBuffer","createIndexBuffer","ELEMENT_ARRAY_BUFFER","create",3,"Texture","Framebuffer","width","height","framebuffer","createFramebuffer","stencil","texture","enableTexture","framebufferTexture2D","FRAMEBUFFER","COLOR_ATTACHMENT0","TEXTURE_2D","enableStencil","createRenderbuffer","bindRenderbuffer","RENDERBUFFER","framebufferRenderbuffer","DEPTH_STENCIL_ATTACHMENT","renderbufferStorage","DEPTH_STENCIL","clear","b","clearColor","COLOR_BUFFER_BIT","bindFramebuffer","unbind","resize","uploadData","destroy","deleteFramebuffer","createRGBA","fromData","enableNearestScaling","enableWrapClamp","fbo","createFloat32","./GLTexture",4,"compileProgram","extractAttributes","extractUniforms","generateUniformAccessObject","Shader","vertexSrc","fragmentSrc","program","attributes","uniformData","uniforms","useProgram","./shader/compileProgram","./shader/extractAttributes","./shader/extractUniforms","./shader/generateUniformAccessObject",5,"format","createTexture","mipmap","premultiplyAlpha","RGBA","UNSIGNED_BYTE","source","pixelStorei","UNPACK_PREMULTIPLY_ALPHA_WEBGL","texImage2D","FLOATING_POINT_AVAILABLE","Float32Array","ext","getExtension","FLOAT","location","undefined","activeTexture","TEXTURE0","bindTexture","minFilter","linear","texParameteri","TEXTURE_MIN_FILTER","LINEAR_MIPMAP_LINEAR","NEAREST_MIPMAP_NEAREST","LINEAR","NEAREST","magFilter","TEXTURE_MAG_FILTER","enableMipmap","generateMipmap","enableLinearScaling","TEXTURE_WRAP_S","CLAMP_TO_EDGE","TEXTURE_WRAP_T","enableWrapRepeat","REPEAT","deleteTexture","fromSource",6,"nativeVaoExtension","nativeVao","createVertexArrayOES","indexBuffer","dirty","constructor","bindVertexArrayOES","activate","attrib","attribute","pointer","normalized","stride","start","enableVertexAttribArray","addAttribute","push","addIndex","options","draw","size","drawElements","UNSIGNED_SHORT",7,"CONTEXT_UID","canvas","getContext","id",8,"GL_MAP","attribs","maxAttribs","getParameter","MAX_VERTEX_ATTRIBS","tempAttribState","Array","attribState","disableVertexAttribArray",9,"glVertShader","compileShader","VERTEX_SHADER","glFragShader","FRAGMENT_SHADER","createProgram","attachShader","linkProgram","getProgramParameter","LINK_STATUS","console","error","VALIDATE_STATUS","getError","getProgramInfoLog","warn","deleteProgram","deleteShader","src","shader","createShader","shaderSource","getShaderParameter","COMPILE_STATUS","log","getShaderInfoLog",10,"defaultValue","Int32Array","booleanArray","array",11,"mapType","mapSize","totalAttributes","ACTIVE_ATTRIBUTES","attribData","getActiveAttrib","name","getAttribLocation","vertexAttribPointer","./mapSize","./mapType",12,"totalUniforms","ACTIVE_UNIFORMS","getActiveUniform","replace","getUniformLocation","value","./defaultValue",13,"uniformKeys","Object","keys","fullName","nameTokens","split","uniformGroup","getUniformGroup","uniform","defineProperty","get","generateGetter","set","generateSetter","template","getterTemplate","Function","setTemplate","setterTemplate","GLSL_TO_SINGLE_SETTERS","GLSL_TO_ARRAY_SETTERS","cur","join","float","vec2","vec3","vec4","int","ivec2","ivec3","ivec4","bool","bvec2","bvec3","bvec4","mat2","mat3","mat4","sampler2D",14,"GLSL_TO_SIZE",15,"GL_TABLE","typeNames","GL_TO_GLSL_TYPES","tn","FLOAT_VEC2","FLOAT_VEC3","FLOAT_VEC4","INT","INT_VEC2","INT_VEC3","INT_VEC4","BOOL","BOOL_VEC2","BOOL_VEC3","BOOL_VEC4","FLOAT_MAT2","FLOAT_MAT3","FLOAT_MAT4","SAMPLER_2D",16,"process","noop","identity","v","toBool","notId","only_once","fn","apply","arguments","_once","_isArrayLike","arr","_isArray","_arrayEach","iterator","index","_map","result","_range","count","_reduce","memo","x","_forEachOf","object","_keys","key","_indexOf","item","_keyIterator","coll","len","_restParam","func","startIndex","Math","max","rest","_withoutIndex","callback","_eachOfLimit","limit","obj","nextKey","done","running","errored","replenish","err","doParallel","async","eachOf","doParallelLimit","doSeries","eachOfSeries","_asyncMap","eachfn","results","_filter","sort","_reject","cb","_createTester","check","getResult","iteratee","_","_findGetResult","_parallel","tasks","task","args","_concat","y","concat","_queue","worker","concurrency","payload","_insert","q","pos","started","idle","setImmediate","drain","unshift","saturated","_next","workers","removed","workersList","splice","empty","paused","kill","pause","resume","resumeCount","min","w","_console_fn","_times","mapper","_applyEach","fns","go","that","pop","ensureAsync","innerArgs","sync","previous_async","root","noConflict","_toString","toString","isArray","_isObject","k","hasOwnProperty","_setImmediate","_delay","setTimeout","nextTick","forEach","each","forEachSeries","eachSeries","forEachLimit","eachLimit","forEachOf","completed","iter","forEachOfSeries","iterate","forEachOfLimit","eachOfLimit","map","mapSeries","mapLimit","inject","foldl","reduce","foldr","reduceRight","reversed","reverse","transform","select","filter","selectLimit","filterLimit","selectSeries","filterSeries","reject","rejectLimit","rejectSeries","any","some","someLimit","all","every","everyLimit","detect","detectSeries","detectLimit","sortBy","comparator","left","right","criteria","auto","addListener","listeners","removeListener","idx","taskComplete","remainingTasks","slice","runningTasks","ready","requires","listener","taskCallback","dep","safeResults","val","rkey","retry","times","parseTimes","acc","parseInt","DEFAULT_TIMES","interval","DEFAULT_INTERVAL","wrappedTask","wrappedCallback","wrappedResults","retryAttempt","finalAttempt","seriesCallback","retryInterval","opts","attempts","series","waterfall","wrapIterator","next","parallel","parallelLimit","makeCallback","callArgs","concatSeries","whilst","test","doWhilst","calls","until","doUntil","during","truth","doDuring","queue","items","priorityQueue","_compareTasks","priority","_binarySearch","sequence","compare","beg","end","mid","cargo","dir","memoize","hasher","queues","memoized","unmemoized","unmemoize","timesSeries","timesLimit","seq","newargs","nextargs","compose","applyEach","applyEachSeries","forever","constant","values","wrapSync","asyncify","then","message","_process",17,"normalizeArray","parts","allowAboveRoot","up","last","xs","res","splitPathRe","splitPath","filename","exec","resolve","resolvedPath","resolvedAbsolute","path","cwd","TypeError","charAt","p","normalize","isAbsolute","trailingSlash","substr","paths","relative","from","to","trim","fromParts","toParts","samePartsLength","outputParts","sep","delimiter","dirname","basename","extname","str",18,"cleanUpNextTick","draining","currentQueue","queueIndex","drainQueue","timeout","run","clearTimeout","Item","fun","title","browser","env","argv","version","versions","on","once","off","removeAllListeners","emit","binding","chdir","umask",19,"RangeError","errors","mapDomain","string","regexSeparators","labels","encoded","ucs2decode","extra","output","counter","charCodeAt","ucs2encode","stringFromCharCode","basicToDigit","codePoint","base","digitToBasic","digit","flag","adapt","delta","numPoints","firstTime","floor","damp","baseMinusTMin","tMax","skew","decode","input","out","basic","j","oldi","baseMinusT","inputLength","initialN","bias","initialBias","lastIndexOf","maxInt","tMin","encode","handledCPCount","basicLength","m","currentValue","handledCPCountPlusOne","qMinusT","toUnicode","regexPunycode","toLowerCase","toASCII","regexNonASCII","freeExports","nodeType","freeModule","freeGlobal","punycode","overflow","not-basic","invalid-input","String","fromCharCode","ucs2",20,"prop","qs","eq","regexp","maxKeys","kstr","vstr","indexOf","decodeURIComponent",21,"stringifyPrimitive","isFinite","objectKeys","ks","encodeURIComponent",22,"parse","stringify","./decode","./encode",23,"Url","protocol","slashes","auth","host","port","hostname","hash","search","query","pathname","href","urlParse","url","parseQueryString","slashesDenoteHost","isObject","urlFormat","isString","urlResolve","urlResolveObject","resolveObject","arg","isNull","isNullOrUndefined","protocolPattern","portPattern","delims","unwise","autoEscape","nonHostChars","hostEndingChars","hostnameMaxLen","hostnamePartPattern","hostnamePartStart","unsafeProtocol","javascript","javascript:","hostlessProtocol","slashedProtocol","http","https","ftp","gopher","file","http:","https:","ftp:","gopher:","file:","querystring","proto","lowerProto","match","hostEnd","hec","atSign","parseHost","ipv6Hostname","hostparts","part","newpart","validParts","notHost","bit","domainArray","newOut","h","ae","esc","escape","qm","rel","relPath","shift","isSourceAbs","isRelAbs","mustEndAbs","removeAllDots","srcPath","psychotic","authInHost","hasTrailingSlash",24,"earcut","holeIndices","dim","hasHoles","outerLen","outerNode","linkedList","triangles","minX","minY","maxX","maxY","eliminateHoles","earcutLinked","clockwise","sum","insertNode","filterPoints","again","steiner","equals","area","prev","removeNode","ear","pass","indexCurve","stop","isEarHashed","isEar","cureLocalIntersections","splitEarcut","c","pointInTriangle","minTX","minTY","maxTX","maxTY","minZ","zOrder","maxZ","nextZ","z","prevZ","intersects","locallyInside","isValidDiagonal","splitPolygon","list","getLeftmost","compareX","eliminateHole","hole","findHoleBridge","hx","hy","qx","Infinity","tan","tanMin","abs","sortLinked","tail","numMerges","pSize","qSize","inSize","leftmost","ax","ay","bx","by","cx","cy","px","py","intersectsPolygon","middleInside","p1","p2","q1","q2","inside","a2","Node","b2","an","bp",25,"EE","context","EventEmitter","prefix","_events","event","exists","evt","available","ee","a1","a3","a4","a5","events","setMaxListeners","prefixed",26,"toObject","propIsEnumerable","propertyIsEnumerable","assign","target","symbols","getOwnPropertySymbols",27,"called","_each","_eachLimit","_mapLimit","_detect","main_callback","theCallback","working","drained","ts","ds",28,"Loader","baseUrl","progress","loading","_progressChunk","_beforeMiddleware","_afterMiddleware","_boundLoadResource","_loadResource","_boundOnLoad","_onLoad","_buffer","_numToLoad","resources","urlParser","Resource","add","enqueue","onComplete","_handleBaseUrl","parsedUrl","before","pre","after","use","reset","load","resource","dequeue","_dequeue","_runMiddleware","_onComplete","LOAD_TYPE","XHR_READY_STATE","XHR_RESPONSE_TYPE","./Resource","eventemitter3",29,"isDataUrl","crossOrigin","loadType","_determineLoadType","xhrType","metadata","xhr","isJson","isXml","isImage","isAudio","isVideo","_boundComplete","complete","_boundOnError","_onError","_boundOnProgress","_onProgress","_boundXhrOnError","_xhrOnError","_boundXhrOnAbort","_xhrOnAbort","_boundXhrOnLoad","_xhrOnLoad","_boundXdrOnTimeout","_xdrOnTimeout","reqType","setExtMap","substring","_url","useXdr","XDomainRequest","XMLHttpRequest","tempAnchor","removeEventListener","onerror","ontimeout","onprogress","onload","_determineCrossOrigin","IMAGE","_loadImage","AUDIO","_loadElement","VIDEO","XHR","_loadXdr","_loadXhr","Image","addEventListener","Audio","document","createElement","navigator","isCocoonJS","appendChild","_createSource","toUpperCase","_determineXhrType","open","JSON","DOCUMENT","responseType","TEXT","send","xdr","mime","nodeName","lengthComputable","loaded","total","status","statusText","responseText","DOMParser","domparser","parseFromString","div","innerHTML","response","responseURL","loc","samePort","_xhrTypeMap","_getExtension","_loadTypeMap","slashIndex","queryStart","_getMimeFromXhrType","BUFFER","BLOB","DEFAULT","UNSENT","OPENED","HEADERS_RECEIVED","LOADING","DONE","gif","png","bmp","jpg","jpeg","tif","tiff","webp","tga","xhtml","html","htm","xml","tmx","tsx","svg","json","text","txt","setExtensionLoadType","setExtensionXhrType",30,"_keyStr","encodeBinary","bytebuffer","encodedCharIndexes","inx","jnx","paddingBytes",31,"middleware","caching","memory","parsing","blob","./Loader","./middlewares/caching/memory","./middlewares/parsing/blob",32,"cache",33,"b64","URL","webkitURL","Blob","createObjectURL","revokeObjectURL","getResponseHeader","../../Resource","../../b64",34,"description","author","contributors","main","homepage","bugs","license","repository","scripts","build","docs","files","dependencies","brfs","object-assign","pixi-gl-core","resource-loader","devDependencies","browserify","chai","del","gulp","gulp-cached","gulp-concat","gulp-debug","gulp-header","gulp-jshint","gulp-mirror","gulp-plumber","gulp-rename","gulp-sourcemaps","gulp-uglify","gulp-util","jaguarjs-jsdoc","jsdoc","jshint-summary","minimist","mocha","require-dir","run-sequence","testem","vinyl-buffer","vinyl-source-stream","watchify",35,"AccessibilityManager","renderer","style","position","top","zIndex","pool","renderId","debug","children","_onKeyDown","_onMouseMove","isActive","core","DisplayObject","update","view","parentNode","deactivate","removeChild","updateAccessibleObjects","displayObject","visible","accessible","interactive","_accessibleActive","addChild","_lastObjectRendered","rect","getBoundingClientRect","sx","sy","child","utils","removeItems","_accessibleDiv","hitArea","wt","worldTransform","tx","ty","d","getBounds","capHitArea","backgroundColor","borderStyle","_onClick","_onFocus","_onFocusOut","accessibleTitle","tabIndex","interactionManager","plugins","interaction","dispatchEvent","eventData","keyCode","WebGLRenderer","registerPlugin","CanvasRenderer","../core","./accessibleTarget",36,"accessibleTarget",37,"./AccessibilityManager",38,"CONST","VERSION","PI_2","PI","RAD_TO_DEG","DEG_TO_RAD","TARGET_FPMS","RENDERER_TYPE","UNKNOWN","WEBGL","CANVAS","BLEND_MODES","NORMAL","ADD","MULTIPLY","SCREEN","OVERLAY","DARKEN","LIGHTEN","COLOR_DODGE","COLOR_BURN","HARD_LIGHT","SOFT_LIGHT","DIFFERENCE","EXCLUSION","HUE","SATURATION","COLOR","LUMINOSITY","DRAW_MODES","POINTS","LINES","LINE_LOOP","LINE_STRIP","TRIANGLES","TRIANGLE_STRIP","TRIANGLE_FAN","SCALE_MODES","RETINA_PREFIX","RESOLUTION","FILTER_RESOLUTION","DEFAULT_RENDER_OPTIONS","resolution","antialias","forceFXAA","autoResize","transparent","clearBeforeRender","preserveDrawingBuffer","roundPixels","SHAPES","POLY","RECT","CIRC","ELIP","RREC","SPRITE_BATCH_SIZE","../../package.json",39,"Container","math","RenderTexture","_tempMatrix","Matrix","defineProperties","scale","getLocalBounds","_width","_height","onChildrenChange","argumentsLength","parent","addChildAt","swapChildren","child2","index1","getChildIndex","index2","setChildIndex","currentIndex","getChildAt","removeChildAt","removeChildren","beginIndex","endIndex","begin","range","generateTexture","scaleMode","bounds","renderTexture","render","updateTransform","displayObjectUpdateTransform","dirtyTransform","containerUpdateTransform","_currentBounds","Rectangle","EMPTY","childBounds","childMaxX","childMaxY","childVisible","_bounds","containerGetBounds","matrixCache","IDENTITY","renderWebGL","worldAlpha","renderable","_mask","_filters","currentRenderer","flush","filterManager","pushFilter","maskManager","pushMask","_renderWebGL","popMask","popFilter","_renderCanvas","renderCanvas","alpha","destroyChildren","../math","../textures/RenderTexture","../utils","./DisplayObject",40,"Point","_position","CachePoint","pivot","_rotation","localTransform","filterArea","_sr","_cr","_tempDisplayObjectParent","doc","posiiton","scaleX","scaleY","rotation","sin","cos","worldVisible","mask","filters","pt","lt","matrix","toGlobal","toLocal","point","applyInverse","setParent","container","setTransform","skewX","skewY","pivotX","pivotY","../const",41,"Graphics","fillAlpha","lineWidth","lineColor","graphicsData","tint","_prevTint","blendMode","currentPath","_webGL","isMask","boundsPadding","_localBounds","glDirty","boundsDirty","cachedSpriteDirty","CanvasBuffer","CanvasGraphics","GraphicsData","tempPoint","clone","updateLocalBounds","lineStyle","color","lineAlpha","shape","points","Polygon","closed","drawShape","moveTo","lineTo","quadraticCurveTo","cpX","cpY","toX","toY","xa","ya","fromX","fromY","bezierCurveTo","cpX2","cpY2","dt","dt2","dt3","t2","t3","arcTo","x1","y1","x2","y2","radius","b1","mm","dd","cc","tt","k1","sqrt","k2","j1","j2","qy","startAngle","atan2","endAngle","arc","anticlockwise","sweep","segs","ceil","startX","startY","theta","theta2","cTheta","sTheta","segMinus","remainder","real","angle","beginFill","filling","fillColor","fill","endFill","drawRect","drawRoundedRect","RoundedRectangle","drawCircle","Circle","drawEllipse","Ellipse","drawPolygon","clearDirty","canvasBuffer","fromCanvas","baseTexture","translate","renderGraphics","setObjectRenderer","graphics","compositeOperation","blendModes","globalCompositeOperation","w0","w1","h0","h1","x3","y3","x4","y4","containsPoint","contains","padding","_webgl","../display/Container","../renderers/canvas/utils/CanvasBuffer","../renderers/canvas/utils/CanvasGraphics","../textures/Texture","./GraphicsData",42,"_lineTint","_fillTint",43,"GraphicsRenderer","ObjectRenderer","graphicsDataPool","primitiveShader","complexPrimitiveShader","maximumSimplePolySize","WebGLGraphicsData","PrimitiveShader","buildLine","buildPoly","buildComplexPoly","buildRectangle","buildRoundedRectangle","buildCircle","onContextChange","webGLData","updateGraphics","webGL","blendModeManager","setBlendMode","mode","bindShader","translationMatrix","toArray","hex2rgb","aVertexPosition","aColor","indices","drawCount","lastIndex","switchMode","canDrawUsingSimple","../../const","../../math","../../renderers/webgl/WebGLRenderer","../../renderers/webgl/utils/ObjectRenderer","../../utils","./WebGLGraphicsData","./shaders/PrimitiveShader","./utils/buildCircle","./utils/buildComplexPoly","./utils/buildLine","./utils/buildPoly","./utils/buildRectangle","./utils/buildRoundedRectangle",44,"glPoints","glIndices","Uint16Array","deleteBuffer",45,46,"circleData","totalSegs","seg","verts","vecPos","tempPoints","../../../utils","./buildLine",47,48,"firstPoint","lastPoint","midPointX","midPointY","p1x","p1y","p2x","p2y","p3x","p3y","perpx","perpy","perp2x","perp2y","perp3x","perp3y","c1","c2","denom","pdist","dist","indexCount","indexStart","../../../math",49,"vertPos",50,"rectData",51,"rrectData","recPoints","quadraticBezierCurve","getPt","n1","n2","perc","diff","xb","yb",52,"ticker","Sprite","ParticleContainer","SpriteRenderer","ParticleRenderer","Text","BaseTexture","VideoBaseTexture","TextureUvs","WebGLManager","ShaderManager","RenderTarget","AbstractFilter","FXAAFilter","SpriteMaskFilter","glCore","autoDetectRenderer","noWebGL","isWebGLSupported","./const","./display/Container","./display/DisplayObject","./graphics/Graphics","./graphics/GraphicsData","./graphics/webgl/GraphicsRenderer","./math","./particles/ParticleContainer","./particles/webgl/ParticleRenderer","./renderers/canvas/CanvasRenderer","./renderers/canvas/utils/CanvasBuffer","./renderers/canvas/utils/CanvasGraphics","./renderers/webgl/WebGLRenderer","./renderers/webgl/filters/AbstractFilter","./renderers/webgl/filters/FXAAFilter","./renderers/webgl/filters/SpriteMaskFilter","./renderers/webgl/managers/ShaderManager","./renderers/webgl/managers/WebGLManager","./renderers/webgl/shaders/Shader","./renderers/webgl/utils/ObjectRenderer","./renderers/webgl/utils/RenderTarget","./sprites/Sprite","./sprites/webgl/SpriteRenderer","./text/Text","./textures/BaseTexture","./textures/RenderTexture","./textures/Texture","./textures/TextureUvs","./textures/VideoBaseTexture","./ticker","./utils",53,"fromArray","transpose","newPos","rotate","tx1","append","d1","sr","cr","nsx","prepend","invert","copy","TEMP_MATRIX","./Point",54,55,"./Matrix","./shapes/Circle","./shapes/Ellipse","./shapes/Polygon","./shapes/Rectangle","./shapes/RoundedRectangle",56,"dx","dy","r2","./Rectangle",57,"normx","normy",58,"points_","il","xi","yi","xj","yj","intersect","../Point",59,60,61,"maxSize","properties","batchSize","maxBatchSize","_properties","_maxSize","_batchSize","_buffers","_bufferToUpdate","interactiveChildren","setProperties","uvs","particle","smallestChildIndex","bufferIndex","isRotated","positionX","positionY","finalWidth","finalHeight","globalAlpha","frame","anchor","childTransform","drawImage",62,"ParticleBuffer","dynamicPropertyFlags","vertSize","vertByteSize","dynamicProperties","staticProperties","property","staticStride","staticBuffer","staticData","dynamicStride","dynamicBuffer","dynamicData","initBuffers","dynamicOffset","DYNAMIC_DRAW","staticOffset","uploadDynamic","amount","uploadFunction","uploadStatic",63,"numIndices","tempMatrix","ParticleShader","shaderManager","uploadVertices","aPositionCoord","uploadPosition","aRotation","uploadRotation","aTextureCoord","uploadUvs","uploadAlpha","setShader","totalChildren","generateBuffers","currentRenderTarget","projectionMatrix","uniformMatrix3fv","_location","uniform1f","uAlpha","_texture","_glTextures","updateTexture","buffers","sprite","crop","_frame","spritePosition","spriteRotation","textureUvs","_uvs","x0","y0","spriteAlpha","./ParticleBuffer","./ParticleShader",64,"TextureShader","../../renderers/webgl/shaders/TextureShader",65,"SystemRenderer","system","sayHello","_backgroundColor","_backgroundColorRgba","_backgroundColorString","hex2string","removeView",66,"refresh","CanvasMaskManager","smoothProperty","imageSmoothingEnabled","webkitImageSmoothingEnabled","mozImageSmoothingEnabled","oImageSmoothingEnabled","msImageSmoothingEnabled","initPlugins","_mapBlendModes","pluginTarget","mixin","cacheParent","screencanvas","fillStyle","clearRect","fillRect","renderDisplayObject","destroyPlugins","tempContext","canUseNewCanvasBlendModes","../SystemRenderer","./utils/CanvasMaskManager",67,68,"updateGraphicsTint","beginPath","closePath","strokeStyle","stroke","strokeRect","kappa","ox","oy","xe","ye","xm","ym","rx","ry","maxRadius","renderGraphicsMask","tintR","tintG","tintB","../../../const",69,"maskData","save","cacheAlpha","clip","restore","./CanvasGraphics",70,"CanvasTinter","getTintedTexture","roundColor","stringColor","tintCache","tintMethod","convertTintToImage","tintImage","toDataURL","tintWithMultiply","tintWithOverlay","tintWithPerPixel","rgbValues","pixelData","getImageData","pixels","putImageData","step","cacheStepsPerColorChannel","rgb2hex","canUseMultiply",71,"TextureManager","_managedTextures","glTextures","getTexture","hasLoaded","glTexture","uid","destroyTexture","_skipRemove","removeAll",72,"handleContextLost","handleContextRestored","_contextOptions","premultipliedAlpha","MaskManager","stencilManager","StencilManager","FilterManager","BlendModeManager","_initContext","mapWebGLBlendModesToPixi","drawModes","mapWebGLDrawModesToPixi","_activeShader","_activeRenderTarget","_activeTextureLocation","_activeTexture","textureManager","disable","DEPTH_TEST","CULL_FACE","enable","BLEND","rootRenderTarget","bindRenderTarget","isContextLost","renderTarget","setFilterStack","filterStack","objectRenderer","setMaskStack","stencilMaskStack","preventDefault","destroyAll","./TextureManager","./filters/FXAAFilter","./managers/BlendModeManager","./managers/FilterManager","./managers/MaskManager","./managers/ShaderManager","./managers/StencilManager","./utils/ObjectRenderer","./utils/RenderTarget","./utils/mapWebGLBlendModesToPixi","./utils/mapWebGLDrawModesToPixi",73,"shaders","DefaultShader","defaultVertexSrc","defaultFragmentSrc","getShader","applyFilter","syncUniform","../shaders/TextureShader",74,"./AbstractFilter",75,"maskMatrix","otherMatrix","maskSprite","calculateMappedMatrix",76,"currentBlendMode","blendFunc","./WebGLManager",77,"texturePool","textureSize","currentFrame","Quad","quad","capFilterArea","getRenderTarget","setRenderTarget","filterData","previousFilterData","vertexBuffer","defaultShader","dimensions","vertices","returnRenderTarget","flipTexture","flopTexture","temp","inputTarget","outputTarget","syncUniforms","outputMatrix","mappedMatrix","ratio","translateScaleX","translateScaleY","offsetY","../utils/Quad","../utils/RenderTarget",78,"stencilStack","alphaMaskPool","AlphaMaskFilter","pushSpriteMask","pushStencilMask","popSpriteMask","popStencilMask","alphaMaskFilter","../filters/SpriteMaskFilter",79,"maxAttibs","stack","_currentId","currentShader","ComplexPrimitiveShader","setAttribs","../shaders/ComplexPrimitiveShader","../shaders/PrimitiveShader",80,"WebGLMaskManager","STENCIL_TEST","pushStencil","attachStencilBuffer","sms","bindGraphics","STENCIL_BUFFER_BIT","level","colorMask","stencilFunc","ALWAYS","stencilOp","KEEP","INVERT","EQUAL","DECR","INCR","popStencil",81,82,"./Shader",83,84,"textureCount","init","compile","cacheUniformLocations","cacheAttributeLocations","_glCompile","uniform1i","uniform2f","uniform3f","uniform4f","uniform1iv","uniform2iv","uniform3iv","uniform4iv","uniform1fv","uniform2fv","uniform3fv","uniform4fv","uniformMatrix2fv","uniformMatrix4fv","_array","initSampler2D","textureData","luminance","LUMINANCE","wrapS","wrapT",85,"customUniforms","customAttributes","uSampler",86,87,"../managers/WebGLManager",88,"colors","rect2",89,"StencilMaskStack","frameBuffer","stencilBuffer","projectionFrame","calculateProjection","viewport","pm","./StencilMaskStack",90,91,"ONE","ONE_MINUS_SRC_ALPHA","SRC_ALPHA","DST_ALPHA","DST_COLOR",92,93,"cachedTint","textureDirty","vertexDirty","vertexData","sign","_onTextureUpdate","caclulateVertices","valid","smoothingEnabled","tintedTexture","destroyBaseTexture","fromFrame","frameId","TextureCache","fromImage","imageId","crossorigin","../renderers/canvas/utils/CanvasTinter",94,"numVerts","positions","Uint32Array","createIndicesForQuads","groupCount","groups","textures","ids","blend","currentGroup","currentTexture","generateMultiTextureShader","MAX_TEXTUES","MAX_TEXTURE_IMAGE_UNITS","_shader","vao","aTextureId","nextTexture","_enabled","_id","uvs_uint32","currentBatchSize","subarray","group","sprites","../../renderers/webgl/shaders/_TextureShader","../../utils/createIndicesForQuads","./generateMultiTextureShader",95,"maxTextures","generateSampleSrc","fragTemplate","sampleValues","uSamplers",96,"_text","_style","fontPropertiesCache","fontPropertiesCanvas","fontPropertiesContext","updateText","dropShadowColor","font","align","strokeThickness","wordWrap","wordWrapWidth","dropShadow","dropShadowAngle","dropShadowDistance","dropShadowBlur","textBaseline","lineJoin","miterLimit","outputText","lines","lineWidths","maxLineWidth","fontProperties","determineFontProperties","measureText","lineHeight","fontSize","linePositionX","linePositionY","shadowColor","shadowBlur","xShadowOffset","yShadowOffset","ascent","fillText","strokeText","fontStyle","baseline","imagedata","line","descent","spaceLeft","words","wordWidth","wordWidthWithSpace","../sprites/Sprite",97,"realWidth","realHeight","isLoading","imageUrl","isPowerOfTwo","_active","loadSource","naturalWidth","naturalHeight","wasLoading","_sourceLoaded","scope","BaseTextureCache","_pixiId","dispose","updateSourceImage","newSrc","image","getResolutionOfUrl",98,"textureBuffer","_updateUvs","updateBase","currentBounds","cachedWt","realResolution","getImage","getBase64","getCanvas","webGLPixels","Uint8Array","readPixels","tempCanvas","canvasData","getPixels","getPixel","../renderers/webgl/managers/FilterManager","../renderers/webgl/utils/RenderTarget","./BaseTexture","./Texture",99,"noFrame","requiresUpdate","onBaseTextureUpdated","onBaseTextureLoaded","destroyBase","fromVideo","video","fromVideoUrl","videoUrl","fromUrl","addTextureToCache","removeTextureFromCache","./TextureUvs","./VideoBaseTexture",100,"xy0_uint32","xy1_uint32","xy2_uint32","xy3_uint32","baseFrame","tw","th",101,"readyState","HAVE_ENOUGH_DATA","HAVE_FUTURE_DATA","autoUpdate","_onUpdate","_onCanPlay","_onPlayStart","_onPlayStop","__loaded","createSource","requestAnimationFrame","videoWidth","videoHeight","play","videoSrc","fromUrls",102,"Ticker","_this","_tick","time","_requestId","_emitter","TICK","_maxElapsedMS","autoStart","deltaTime","elapsedMS","lastTime","speed","FPS","minFPS","fps","minFPMS","_requestIfNeeded","performance","now","_cancelIfNeeded","cancelAnimationFrame","_startIfPossible","addOnce","remove","currentTime",103,"shared","./Ticker",104,"totalIndices",105,"_uid","_saidHello","hex","rgb","pngHead","pngEnd","magenta","yellow","getNextPowerOfTwo","number","parseFloat","userAgent","contextOptions","WebGLRenderingContext","getContextAttributes","startIdx","removeCount","./pluginTarget",106,"__plugins","pluginName","ctor",107,"mesh","extras","SpriteBatch","ReferenceError","AssetLoader","Stage","DisplayObjectContainer","Strip","Mesh","Rope","MovieClip","TilingSprite","BitmapText","scaleModes","setTexture","setText","setStyle","setFrame","uuid","./core","./extras","./filters","./mesh",108,"textWidth","textHeight","_glyphs","_font","maxWidth","maxLineHeight","fonts","prevCharCode","chars","lastLineWidth","lastSpace","charCode","charData","kerning","xOffset","yOffset","xAdvance","lineAlignOffsets","alignOffset","lenChars","validate",109,"_textures","_durations","animationSpeed","loop","_currentTime","playing","totalFrames","gotoAndStop","frameNumber","gotoAndPlay","elapsed","lag","fromFrames","frames","fromImages","images",110,"tileScale","tilePosition","_canvasPattern","uFrame","uTransform","uPixelSize","tempUvs","tempWidth","tempHeight","modX","modY","createPattern","_tileScaleOffset","../core/renderers/canvas/utils/CanvasTinter",111,"_cacheAsBitmap","_originalRenderWebGL","_originalRenderCanvas","_originalUpdateTransform","_originalHitTest","_originalDestroy","_cachedSprite","cacheAsBitmap","_originalGetBounds","_originalContainsPoint","_renderCachedWebGL","_renderCachedCanvas","_cacheAsBitmapDestroy","_destroyCachedDisplayObject","_initCachedDisplayObject","cachedRenderTarget","_getCachedBounds","_initCachedDisplayObjectCanvas",112,"getChildByName",113,"getGlobalPosition",114,"./BitmapText","./MovieClip","./TilingSprite","./cacheAsBitmap","./getChildByName","./getGlobalPosition",115,"AsciiFilter","pixelSize","../../core",116,"BloomFilter","blurXFilter","BlurXFilter","blurYFilter","BlurYFilter","defaultFilter","blur","blurX","blurY","../blur/BlurXFilter","../blur/BlurYFilter",117,"BlurDirFilter","dirX","dirY","strength","passes",118,"BlurFilter","./BlurXFilter","./BlurYFilter",119,"flip","flop",120,121,"SmartBlurFilter",122,"ColorMatrixFilter","_loadMatrix","multiply","newMatrix","_multiply","_colorMatrix","brightness","greyscale","grayscale","blackAndWhite","hue","lumR","lumG","lumB","contrast","saturate","desaturate","negative","sepia","technicolor","polaroid","toBGR","kodachrome","browni","vintage","colorTone","desaturation","toned","lightColor","darkColor","lR","lG","lB","dR","dG","dB","night","intensity","predator","lsd",123,"ColorStepFilter",124,"ConvolutionFilter","texelSize",125,"CrossHatchFilter",126,"DisplacementFilter","mapSampler",127,"DotScreenFilter",128,"BlurYTintFilter",129,"DropShadowFilter","blurYTintFilter","_dirtyPosition","_angle","_distance","hideObject","distance","./BlurYTintFilter",130,"GrayFilter","gray",131,"InvertFilter","NoiseFilter","PixelateFilter","RGBSplitFilter","ShockwaveFilter","SepiaFilter","TiltShiftFilter","TiltShiftXFilter","TiltShiftYFilter","TwistFilter","./ascii/AsciiFilter","./bloom/BloomFilter","./blur/BlurDirFilter","./blur/BlurFilter","./blur/BlurXFilter","./blur/BlurYFilter","./blur/SmartBlurFilter","./color/ColorMatrixFilter","./color/ColorStepFilter","./convolution/ConvolutionFilter","./crosshatch/CrossHatchFilter","./displacement/DisplacementFilter","./dot/DotScreenFilter","./dropshadow/DropShadowFilter","./gray/GrayFilter","./invert/InvertFilter","./noise/NoiseFilter","./pixelate/PixelateFilter","./rgb/RGBSplitFilter","./sepia/SepiaFilter","./shockwave/ShockwaveFilter","./tiltshift/TiltShiftFilter","./tiltshift/TiltShiftXFilter","./tiltshift/TiltShiftYFilter","./twist/TwistFilter",132,133,"noise",134,135,"red","green","blue",136,137,"center","params",138,"TiltShiftAxisFilter","gradientBlur","innerHeight","texSize","innerWidth","updateDelta",139,"tiltShiftXFilter","tiltShiftYFilter","./TiltShiftXFilter","./TiltShiftYFilter",140,"./TiltShiftAxisFilter",141,142,143,"loaders","accessibility","loader","./accessibility","./deprecation","./interaction","./loaders","./polyfill",144,"InteractionData","originalEvent","getLocalPosition","globalPos",145,"InteractionManager","autoPreventDefault","interactionFrequency","mouse","stopped","stopPropagation","interactiveDataPool","interactionDOMElement","eventsAdded","onMouseUp","processMouseUp","onMouseDown","processMouseDown","onMouseMove","processMouseMove","onMouseOut","processMouseOverOut","onTouchStart","processTouchStart","onTouchEnd","processTouchEnd","onTouchMove","processTouchMove","currentCursorStyle","_tempPoint","setTargetElement","element","removeEvents","addEvents","msPointerEnabled","_deltaTime","didMove","cursor","processInteractive","eventString","mapPositionToPoint","hitTest","hit","interactiveParent","clientX","clientY","isRightButton","button","which","isDown","_over","buttonMode","defaultCursor","changedTouches","cLength","touchEvent","touchData","getTouchData","returnTouchData","_touchDown","identifier","globalX","globalY","./InteractionData","./interactiveTarget",146,"interactiveTarget","./InteractionManager",147,148,"info","getElementsByTagName","common","getAttribute","letters","textureRect","kernings","first","second","bitmapFont","xmlUrl","textureUrl","loadOptions","imageMetadata","../extras",149,"bitmapFontParser","spritesheetParser","textureParser","./bitmapFontParser","./loader","./spritesheetParser","./textureParser",150,"ResourceLoader","_pixiMiddleware","addPixiMiddleware",151,"route","meta","rotated","trimmed","spriteSourceSize","sourceSize",152,153,"drawMode","canvasPadding","TRIANGLE_MESH","tempPolygon","_renderCanvasTriangleMesh","_renderCanvasTriangles","_renderCanvasDrawTriangle","index0","textureSource","textureWidth","textureHeight","u0","u1","u2","v0","v1","v2","paddingX","paddingY","centerX","centerY","normX","normY","deltaA","deltaB","deltaC","deltaD","deltaE","deltaF","renderMeshFlat","updateFrame","rawX","rawY","ind0","ind1","ind2",154,"Plane","segmentsX","segmentsY","_ready","segmentsXSub","segmentsYSub","sizeX","sizeY","totalSub","xpos","ypos","value2","value3","value4","./Mesh",155,"factor","nextPoint","perpLength","num","perpX","perpY",156,"MeshRenderer","MeshShader","./Plane","./Rope","./webgl/MeshRenderer","./webgl/MeshShader",157,"_vertexBuffer","_initWebGL","meshShader","_uvBuffer","_indexBuffer","_colorBuffer","../Mesh",158,159,"isNaN",160,161,"./Math.sign","./Object.assign","./requestAnimationFrame",162,"Date","getTime","startTime","vendors","delay"],"mappings":"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E,EAAA,GAAAuE,EAAA,GAAAvE,EAAA,GAAAuE,EAAA,IAAAvE,EAAA,GAAAuE,EAAA,IACAwkB,EAAA,GAAA/oB,EAAA,GAAAuE,EAAA,GAAAvE,EAAA,GAAAuE,EAAA,GAAAvE,EAAA,GAAAuE,EAAA,IAAAvE,EAAA,GAAAuE,EAAA,IACAwkB,EAAA,GAAA/oB,EAAA,GAAAuE,EAAA,GAAAvE,EAAA,GAAAuE,EAAA,GAAAvE,EAAA,GAAAuE,EAAA,IAAAvE,EAAA,GAAAuE,EAAA,IAGAwkB,EAAA,GAAA/oB,EAAA,GAAAuE,EAAA,GAAAvE,EAAA,GAAAuE,EAAA,GAAAvE,EAAA,GAAAuE,EAAA,IAAAvE,EAAA,GAAAuE,EAAA,IACAwkB,EAAA,GAAA/oB,EAAA,GAAAuE,EAAA,GAAAvE,EAAA,GAAAuE,EAAA,GAAAvE,EAAA,GAAAuE,EAAA,IAAAvE,EAAA,GAAAuE,EAAA,IACAwkB,EAAA,GAAA/oB,EAAA,GAAAuE,EAAA,GAAAvE,EAAA,GAAAuE,EAAA,GAAAvE,EAAA,GAAAuE,EAAA,IAAAvE,EAAA,GAAAuE,EAAA,IACAwkB,EAAA,GAAA/oB,EAAA,GAAAuE,EAAA,GAAAvE,EAAA,GAAAuE,EAAA,GAAAvE,EAAA,GAAAuE,EAAA,IAAAvE,EAAA,GAAAuE,EAAA,IACAwkB,EAAA,GAAA/oB,EAAA,GAAAuE,EAAA,GAAAvE,EAAA,GAAAuE,EAAA,GAAAvE,EAAA,GAAAuE,EAAA,IAAAvE,EAAA,GAAAuE,EAAA,IAGAwkB,EAAA,IAAA/oB,EAAA,IAAAuE,EAAA,GAAAvE,EAAA,IAAAuE,EAAA,GAAAvE,EAAA,IAAAuE,EAAA,IAAAvE,EAAA,IAAAuE,EAAA,IACAwkB,EAAA,IAAA/oB,EAAA,IAAAuE,EAAA,GAAAvE,EAAA,IAAAuE,EAAA,GAAAvE,EAAA,IAAAuE,EAAA,IAAAvE,EAAA,IAAAuE,EAAA,IACAwkB,EAAA,IAAA/oB,EAAA,IAAAuE,EAAA,GAAAvE,EAAA,IAAAuE,EAAA,GAAAvE,EAAA,IAAAuE,EAAA,IAAAvE,EAAA,IAAAuE,EAAA,IACAwkB,EAAA,IAAA/oB,EAAA,IAAAuE,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","file":"pixi.min.js","sourcesContent":[null],"sourceRoot":"./"} \ No newline at end of file diff --git a/src/core/graphics/webgl/GraphicsRenderer.js b/src/core/graphics/webgl/GraphicsRenderer.js index 279525e..12d80c0 100644 --- a/src/core/graphics/webgl/GraphicsRenderer.js +++ b/src/core/graphics/webgl/GraphicsRenderer.js @@ -4,15 +4,15 @@ ObjectRenderer = require('../../renderers/webgl/utils/ObjectRenderer'), WebGLRenderer = require('../../renderers/webgl/WebGLRenderer'), WebGLGraphicsData = require('./WebGLGraphicsData'), - PrimitiveShader = require('./PrimitiveShader'), + PrimitiveShader = require('./shaders/PrimitiveShader'), // some drawing functions.. - buildLine = require('../buildLine'); - buildPoly = require('../buildPoly'); - buildComplexPoly = require('../buildComplexPoly'); - buildRectangle = require('../buildRectangle'); - buildRoundedRectangle = require('../buildRoundedRectangle'); - buildCircle = require('../buildCircle'); + buildLine = require('./utils/buildLine'); + buildPoly = require('./utils/buildPoly'); + buildComplexPoly = require('./utils/buildComplexPoly'); + buildRectangle = require('./utils/buildRectangle'); + buildRoundedRectangle = require('./utils/buildRoundedRectangle'); + buildCircle = require('./utils/buildCircle'); earcut = require('earcut'); diff --git a/src/core/graphics/webgl/PrimitiveShader.js b/src/core/graphics/webgl/PrimitiveShader.js deleted file mode 100644 index 44166b3..0000000 --- a/src/core/graphics/webgl/PrimitiveShader.js +++ /dev/null @@ -1,50 +0,0 @@ -var Shader = require('pixi-gl-core').GLShader; - -/** - * This shader is used to draw simple primitive shapes for {@link PIXI.Graphics}. - * - * @class - * @memberof PIXI - * @extends PIXI.Shader - * @param shaderManager {ShaderManager} The webgl shader manager this shader works for. - */ -function PrimitiveShader(gl) -{ - Shader.call(this, - gl, - // vertex shader - [ - 'attribute vec2 aVertexPosition;', - 'attribute vec4 aColor;', - - 'uniform mat3 translationMatrix;', - 'uniform mat3 projectionMatrix;', - - 'uniform float alpha;', - 'uniform float flipY;', - 'uniform vec3 tint;', - - 'varying vec4 vColor;', - - 'void main(void){', - ' gl_Position = vec4((projectionMatrix * translationMatrix * vec3(aVertexPosition, 1.0)).xy, 0.0, 1.0);', - ' vColor = aColor * vec4(tint * alpha, alpha);', - '}' - ].join('\n'), - // fragment shader - [ - 'precision mediump float;', - - 'varying vec4 vColor;', - - 'void main(void){', - ' gl_FragColor = vColor;', - '}' - ].join('\n') - ); -} - -PrimitiveShader.prototype = Object.create(Shader.prototype); -PrimitiveShader.prototype.constructor = PrimitiveShader; - -module.exports = PrimitiveShader; diff --git a/src/core/graphics/webgl/buildRoundedRectangle.js b/src/core/graphics/webgl/buildRoundedRectangle.js deleted file mode 100644 index 55bb1b4..0000000 --- a/src/core/graphics/webgl/buildRoundedRectangle.js +++ /dev/null @@ -1,127 +0,0 @@ -var buildLine = require('./buildLine'), - utils = require('../../utils'); - -/** - * Builds a rounded rectangle to draw - * - * @private - * @param graphicsData {PIXI.Graphics} The graphics object containing all the necessary properties - * @param webGLData {object} an object containing all the webGL-specific information to create this shape - */ -buildRoundedRectangle = function (graphicsData, webGLData) -{ - var rrectData = graphicsData.shape; - var x = rrectData.x; - var y = rrectData.y; - var width = rrectData.width; - var height = rrectData.height; - - var radius = rrectData.radius; - - var recPoints = []; - recPoints.push(x, y + radius); - this.quadraticBezierCurve(x, y + height - radius, x, y + height, x + radius, y + height, recPoints); - this.quadraticBezierCurve(x + width - radius, y + height, x + width, y + height, x + width, y + height - radius, recPoints); - this.quadraticBezierCurve(x + width, y + radius, x + width, y, x + width - radius, y, recPoints); - this.quadraticBezierCurve(x + radius, y, x, y, x, y + radius + 0.0000000001, recPoints); - - // this tiny number deals with the issue that occurs when points overlap and earcut fails to triangulate the item. - // TODO - fix this properly, this is not very elegant.. but it works for now. - - if (graphicsData.fill) - { - var color = utils.hex2rgb(graphicsData.fillColor); - var alpha = graphicsData.fillAlpha; - - var r = color[0] * alpha; - var g = color[1] * alpha; - var b = color[2] * alpha; - - var verts = webGLData.points; - var indices = webGLData.indices; - - var vecPos = verts.length/6; - - var triangles = earcut(recPoints, null, 2); - - var i = 0; - for (i = 0; i < triangles.length; i+=3) - { - indices.push(triangles[i] + vecPos); - indices.push(triangles[i] + vecPos); - indices.push(triangles[i+1] + vecPos); - indices.push(triangles[i+2] + vecPos); - indices.push(triangles[i+2] + vecPos); - } - - for (i = 0; i < recPoints.length; i++) - { - verts.push(recPoints[i], recPoints[++i], r, g, b, alpha); - } - } - - if (graphicsData.lineWidth) - { - var tempPoints = graphicsData.points; - - graphicsData.points = recPoints; - - this.buildLine(graphicsData, webGLData); - - graphicsData.points = tempPoints; - } -}; - -/** - * Calculate the points for a quadratic bezier curve. (helper function..) - * Based on: https://stackoverflow.com/questions/785097/how-do-i-implement-a-bezier-curve-in-c - * - * @private - * @param fromX {number} Origin point x - * @param fromY {number} Origin point x - * @param cpX {number} Control point x - * @param cpY {number} Control point y - * @param toX {number} Destination point x - * @param toY {number} Destination point y - * @param [out] {number[]} The output array to add points into. If not passed, a new array is created. - * @return {number[]} an array of points - */ -quadraticBezierCurve = function (fromX, fromY, cpX, cpY, toX, toY, out) -{ - var xa, - ya, - xb, - yb, - x, - y, - n = 20, - points = out || []; - - function getPt(n1 , n2, perc) { - var diff = n2 - n1; - - return n1 + ( diff * perc ); - } - - var j = 0; - for (var i = 0; i <= n; i++ ) { - j = i / n; - - // The Green Line - xa = getPt( fromX , cpX , j ); - ya = getPt( fromY , cpY , j ); - xb = getPt( cpX , toX , j ); - yb = getPt( cpY , toY , j ); - - // The Black Dot - x = getPt( xa , xb , j ); - y = getPt( ya , yb , j ); - - points.push(x, y); - } - - return points; -}; - - -module.exports = buildRoundedRectangle; \ No newline at end of file diff --git a/bin/pixi.js b/bin/pixi.js index b57ad10..40862ec 100644 --- a/bin/pixi.js +++ b/bin/pixi.js @@ -1,7 +1,7 @@ /** * @license * pixi.js - v3.0.10-dev - * Compiled 2016-01-17T18:07:22.522Z + * Compiled 2016-01-17T18:16:46.120Z * * pixi.js is licensed under the MIT License. * http://www.opensource.org/licenses/mit-license.php @@ -10864,15 +10864,15 @@ ObjectRenderer = require('../../renderers/webgl/utils/ObjectRenderer'), WebGLRenderer = require('../../renderers/webgl/WebGLRenderer'), WebGLGraphicsData = require('./WebGLGraphicsData'), - PrimitiveShader = require('./PrimitiveShader'), + PrimitiveShader = require('./shaders/PrimitiveShader'), // some drawing functions.. - buildLine = require('./buildLine'); - buildPoly = require('./buildPoly'); - buildComplexPoly = require('./buildComplexPoly'); - buildRectangle = require('./buildRectangle'); - buildRoundedRectangle = require('./buildRoundedRectangle'); - buildCircle = require('./buildCircle'); + buildLine = require('./utils/buildLine'); + buildPoly = require('./utils/buildPoly'); + buildComplexPoly = require('./utils/buildComplexPoly'); + buildRectangle = require('./utils/buildRectangle'); + buildRoundedRectangle = require('./utils/buildRoundedRectangle'); + buildCircle = require('./utils/buildCircle'); earcut = require('earcut'); @@ -11177,59 +11177,7 @@ }; -},{"../../const":38,"../../math":55,"../../renderers/webgl/WebGLRenderer":72,"../../renderers/webgl/utils/ObjectRenderer":87,"../../utils":105,"./PrimitiveShader":44,"./WebGLGraphicsData":45,"./buildCircle":46,"./buildComplexPoly":47,"./buildLine":48,"./buildPoly":49,"./buildRectangle":50,"./buildRoundedRectangle":51,"earcut":24}],44:[function(require,module,exports){ -var Shader = require('pixi-gl-core').GLShader; - -/** - * This shader is used to draw simple primitive shapes for {@link PIXI.Graphics}. - * - * @class - * @memberof PIXI - * @extends PIXI.Shader - * @param shaderManager {ShaderManager} The webgl shader manager this shader works for. - */ -function PrimitiveShader(gl) -{ - Shader.call(this, - gl, - // vertex shader - [ - 'attribute vec2 aVertexPosition;', - 'attribute vec4 aColor;', - - 'uniform mat3 translationMatrix;', - 'uniform mat3 projectionMatrix;', - - 'uniform float alpha;', - 'uniform float flipY;', - 'uniform vec3 tint;', - - 'varying vec4 vColor;', - - 'void main(void){', - ' gl_Position = vec4((projectionMatrix * translationMatrix * vec3(aVertexPosition, 1.0)).xy, 0.0, 1.0);', - ' vColor = aColor * vec4(tint * alpha, alpha);', - '}' - ].join('\n'), - // fragment shader - [ - 'precision mediump float;', - - 'varying vec4 vColor;', - - 'void main(void){', - ' gl_FragColor = vColor;', - '}' - ].join('\n') - ); -} - -PrimitiveShader.prototype = Object.create(Shader.prototype); -PrimitiveShader.prototype.constructor = PrimitiveShader; - -module.exports = PrimitiveShader; - -},{"pixi-gl-core":1}],45:[function(require,module,exports){ +},{"../../const":38,"../../math":55,"../../renderers/webgl/WebGLRenderer":72,"../../renderers/webgl/utils/ObjectRenderer":87,"../../utils":105,"./WebGLGraphicsData":44,"./shaders/PrimitiveShader":45,"./utils/buildCircle":46,"./utils/buildComplexPoly":47,"./utils/buildLine":48,"./utils/buildPoly":49,"./utils/buildRectangle":50,"./utils/buildRoundedRectangle":51,"earcut":24}],44:[function(require,module,exports){ /** * An object containing WebGL specific properties to be used by the WebGL renderer * @@ -11347,9 +11295,61 @@ this.glIndices = null; }; -},{}],46:[function(require,module,exports){ +},{}],45:[function(require,module,exports){ +var Shader = require('pixi-gl-core').GLShader; + +/** + * This shader is used to draw simple primitive shapes for {@link PIXI.Graphics}. + * + * @class + * @memberof PIXI + * @extends PIXI.Shader + * @param shaderManager {ShaderManager} The webgl shader manager this shader works for. + */ +function PrimitiveShader(gl) +{ + Shader.call(this, + gl, + // vertex shader + [ + 'attribute vec2 aVertexPosition;', + 'attribute vec4 aColor;', + + 'uniform mat3 translationMatrix;', + 'uniform mat3 projectionMatrix;', + + 'uniform float alpha;', + 'uniform float flipY;', + 'uniform vec3 tint;', + + 'varying vec4 vColor;', + + 'void main(void){', + ' gl_Position = vec4((projectionMatrix * translationMatrix * vec3(aVertexPosition, 1.0)).xy, 0.0, 1.0);', + ' vColor = aColor * vec4(tint * alpha, alpha);', + '}' + ].join('\n'), + // fragment shader + [ + 'precision mediump float;', + + 'varying vec4 vColor;', + + 'void main(void){', + ' gl_FragColor = vColor;', + '}' + ].join('\n') + ); +} + +PrimitiveShader.prototype = Object.create(Shader.prototype); +PrimitiveShader.prototype.constructor = PrimitiveShader; + +module.exports = PrimitiveShader; + +},{"pixi-gl-core":1}],46:[function(require,module,exports){ var buildLine = require('./buildLine'), - utils = require('../../utils'); + utils = require('../../../utils'); /** * Builds a circle to draw @@ -11426,7 +11426,7 @@ y + Math.cos(seg * i) * height); } - this.buildLine(graphicsData, webGLData); + buildLine(graphicsData, webGLData); graphicsData.points = tempPoints; } @@ -11434,9 +11434,9 @@ module.exports = buildCircle; -},{"../../utils":105,"./buildLine":48}],47:[function(require,module,exports){ +},{"../../../utils":105,"./buildLine":48}],47:[function(require,module,exports){ var buildLine = require('./buildLine'), - utils = require('../../utils'); + utils = require('../../../utils'); @@ -11505,9 +11505,9 @@ module.exports = buildComplexPoly; -},{"../../utils":105,"./buildLine":48}],48:[function(require,module,exports){ -var math = require('../../math'), - utils = require('../../utils'); +},{"../../../utils":105,"./buildLine":48}],48:[function(require,module,exports){ +var math = require('../../../math'), + utils = require('../../../utils'); /** * Builds a line to draw @@ -11725,8 +11725,8 @@ }; module.exports = buildLine; -},{"../../math":55,"../../utils":105}],49:[function(require,module,exports){ -var utils = require('../../utils'); +},{"../../../math":55,"../../../utils":105}],49:[function(require,module,exports){ +var utils = require('../../../utils'); /** * Builds a polygon to draw @@ -11788,9 +11788,9 @@ module.exports = buildPoly; -},{"../../utils":105}],50:[function(require,module,exports){ +},{"../../../utils":105}],50:[function(require,module,exports){ var buildLine = require('./buildLine'), - utils = require('../../utils'); + utils = require('../../../utils'); /** * Builds a rectangle to draw @@ -11859,9 +11859,9 @@ }; module.exports = buildRectangle; -},{"../../utils":105,"./buildLine":48}],51:[function(require,module,exports){ +},{"../../../utils":105,"./buildLine":48}],51:[function(require,module,exports){ var buildLine = require('./buildLine'), - utils = require('../../utils'); + utils = require('../../../utils'); /** * Builds a rounded rectangle to draw @@ -11987,7 +11987,7 @@ module.exports = buildRoundedRectangle; -},{"../../utils":105,"./buildLine":48}],52:[function(require,module,exports){ +},{"../../../utils":105,"./buildLine":48}],52:[function(require,module,exports){ /** * @file Main export of the PIXI core library * @author Mat Groves @@ -30075,6 +30075,6 @@ },{}]},{},[143])(143) }); -//# sourceMappingURL=data:application/json;charset:utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIm5vZGVfbW9kdWxlcy9icm93c2VyaWZ5L25vZGVfbW9kdWxlcy9icm93c2VyLXBhY2svX3ByZWx1ZGUuanMiLCIuLi9waXhpLWdsLWNvcmUvaW5kZXguanMiLCIuLi9waXhpLWdsLWNvcmUvbGliL0dMQnVmZmVyLmpzIiwiLi4vcGl4aS1nbC1jb3JlL2xpYi9HTEZyYW1lYnVmZmVyLmpzIiwiLi4vcGl4aS1nbC1jb3JlL2xpYi9HTFNoYWRlci5qcyIsIi4uL3BpeGktZ2wtY29yZS9saWIvR0xUZXh0dXJlLmpzIiwiLi4vcGl4aS1nbC1jb3JlL2xpYi9WZXJ0ZXhBcnJheU9iamVjdC5qcyIsIi4uL3BpeGktZ2wtY29yZS9saWIvY3JlYXRlQ29udGV4dC5qcyIsIi4uL3BpeGktZ2wtY29yZS9saWIvc2V0VmVydGV4QXR0cmliQXJyYXlzLmpzIiwiLi4vcGl4aS1nbC1jb3JlL2xpYi9zaGFkZXIvY29tcGlsZVByb2dyYW0uanMiLCIuLi9waXhpLWdsLWNvcmUvbGliL3NoYWRlci9kZWZhdWx0VmFsdWUuanMiLCIuLi9waXhpLWdsLWNvcmUvbGliL3NoYWRlci9leHRyYWN0QXR0cmlidXRlcy5qcyIsIi4uL3BpeGktZ2wtY29yZS9saWIvc2hhZGVyL2V4dHJhY3RVbmlmb3Jtcy5qcyIsIi4uL3BpeGktZ2wtY29yZS9saWIvc2hhZGVyL2dlbmVyYXRlVW5pZm9ybUFjY2Vzc09iamVjdC5qcyIsIi4uL3BpeGktZ2wtY29yZS9saWIvc2hhZGVyL21hcFNpemUuanMiLCIuLi9waXhpLWdsLWNvcmUvbGliL3NoYWRlci9tYXBUeXBlLmpzIiwibm9kZV9tb2R1bGVzL2FzeW5jL2xpYi9hc3luYy5qcyIsIm5vZGVfbW9kdWxlcy9icm93c2VyaWZ5L25vZGVfbW9kdWxlcy9wYXRoLWJyb3dzZXJpZnkvaW5kZXguanMiLCJub2RlX21vZHVsZXMvYnJvd3NlcmlmeS9ub2RlX21vZHVsZXMvcHJvY2Vzcy9icm93c2VyLmpzIiwibm9kZV9tb2R1bGVzL2Jyb3dzZXJpZnkvbm9kZV9tb2R1bGVzL3B1bnljb2RlL3B1bnljb2RlLmpzIiwibm9kZV9tb2R1bGVzL2Jyb3dzZXJpZnkvbm9kZV9tb2R1bGVzL3F1ZXJ5c3RyaW5nLWVzMy9kZWNvZGUuanMiLCJub2RlX21vZHVsZXMvYnJvd3NlcmlmeS9ub2RlX21vZHVsZXMvcXVlcnlzdHJpbmctZXMzL2VuY29kZS5qcyIsIm5vZGVfbW9kdWxlcy9icm93c2VyaWZ5L25vZGVfbW9kdWxlcy9xdWVyeXN0cmluZy1lczMvaW5kZXguanMiLCJub2RlX21vZHVsZXMvYnJvd3NlcmlmeS9ub2RlX21vZHVsZXMvdXJsL3VybC5qcyIsIm5vZGVfbW9kdWxlcy9lYXJjdXQvc3JjL2VhcmN1dC5qcyIsIm5vZGVfbW9kdWxlcy9ldmVudGVtaXR0ZXIzL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL29iamVjdC1hc3NpZ24vaW5kZXguanMiLCJub2RlX21vZHVsZXMvcmVzb3VyY2UtbG9hZGVyL25vZGVfbW9kdWxlcy9hc3luYy9saWIvYXN5bmMuanMiLCJub2RlX21vZHVsZXMvcmVzb3VyY2UtbG9hZGVyL3NyYy9Mb2FkZXIuanMiLCJub2RlX21vZHVsZXMvcmVzb3VyY2UtbG9hZGVyL3NyYy9SZXNvdXJjZS5qcyIsIm5vZGVfbW9kdWxlcy9yZXNvdXJjZS1sb2FkZXIvc3JjL2I2NC5qcyIsIm5vZGVfbW9kdWxlcy9yZXNvdXJjZS1sb2FkZXIvc3JjL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL3Jlc291cmNlLWxvYWRlci9zcmMvbWlkZGxld2FyZXMvY2FjaGluZy9tZW1vcnkuanMiLCJub2RlX21vZHVsZXMvcmVzb3VyY2UtbG9hZGVyL3NyYy9taWRkbGV3YXJlcy9wYXJzaW5nL2Jsb2IuanMiLCJwYWNrYWdlLmpzb24iLCJzcmMvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5TWFuYWdlci5qcyIsInNyYy9hY2Nlc3NpYmlsaXR5L2FjY2Vzc2libGVUYXJnZXQuanMiLCJzcmMvYWNjZXNzaWJpbGl0eS9pbmRleC5qcyIsInNyYy9jb3JlL2NvbnN0LmpzIiwic3JjL2NvcmUvZGlzcGxheS9Db250YWluZXIuanMiLCJzcmMvY29yZS9kaXNwbGF5L0Rpc3BsYXlPYmplY3QuanMiLCJzcmMvY29yZS9ncmFwaGljcy9HcmFwaGljcy5qcyIsInNyYy9jb3JlL2dyYXBoaWNzL0dyYXBoaWNzRGF0YS5qcyIsInNyYy9jb3JlL2dyYXBoaWNzL3dlYmdsL0dyYXBoaWNzUmVuZGVyZXIuanMiLCJzcmMvY29yZS9ncmFwaGljcy93ZWJnbC9QcmltaXRpdmVTaGFkZXIuanMiLCJzcmMvY29yZS9ncmFwaGljcy93ZWJnbC9XZWJHTEdyYXBoaWNzRGF0YS5qcyIsInNyYy9jb3JlL2dyYXBoaWNzL3dlYmdsL2J1aWxkQ2lyY2xlLmpzIiwic3JjL2NvcmUvZ3JhcGhpY3Mvd2ViZ2wvYnVpbGRDb21wbGV4UG9seS5qcyIsInNyYy9jb3JlL2dyYXBoaWNzL3dlYmdsL2J1aWxkTGluZS5qcyIsInNyYy9jb3JlL2dyYXBoaWNzL3dlYmdsL2J1aWxkUG9seS5qcyIsInNyYy9jb3JlL2dyYXBoaWNzL3dlYmdsL2J1aWxkUmVjdGFuZ2xlLmpzIiwic3JjL2NvcmUvZ3JhcGhpY3Mvd2ViZ2wvYnVpbGRSb3VuZGVkUmVjdGFuZ2xlLmpzIiwic3JjL2NvcmUvaW5kZXguanMiLCJzcmMvY29yZS9tYXRoL01hdHJpeC5qcyIsInNyYy9jb3JlL21hdGgvUG9pbnQuanMiLCJzcmMvY29yZS9tYXRoL2luZGV4LmpzIiwic3JjL2NvcmUvbWF0aC9zaGFwZXMvQ2lyY2xlLmpzIiwic3JjL2NvcmUvbWF0aC9zaGFwZXMvRWxsaXBzZS5qcyIsInNyYy9jb3JlL21hdGgvc2hhcGVzL1BvbHlnb24uanMiLCJzcmMvY29yZS9tYXRoL3NoYXBlcy9SZWN0YW5nbGUuanMiLCJzcmMvY29yZS9tYXRoL3NoYXBlcy9Sb3VuZGVkUmVjdGFuZ2xlLmpzIiwic3JjL2NvcmUvcGFydGljbGVzL1BhcnRpY2xlQ29udGFpbmVyLmpzIiwic3JjL2NvcmUvcGFydGljbGVzL3dlYmdsL1BhcnRpY2xlQnVmZmVyLmpzIiwic3JjL2NvcmUvcGFydGljbGVzL3dlYmdsL1BhcnRpY2xlUmVuZGVyZXIuanMiLCJzcmMvY29yZS9wYXJ0aWNsZXMvd2ViZ2wvUGFydGljbGVTaGFkZXIuanMiLCJzcmMvY29yZS9yZW5kZXJlcnMvU3lzdGVtUmVuZGVyZXIuanMiLCJzcmMvY29yZS9yZW5kZXJlcnMvY2FudmFzL0NhbnZhc1JlbmRlcmVyLmpzIiwic3JjL2NvcmUvcmVuZGVyZXJzL2NhbnZhcy91dGlscy9DYW52YXNCdWZmZXIuanMiLCJzcmMvY29yZS9yZW5kZXJlcnMvY2FudmFzL3V0aWxzL0NhbnZhc0dyYXBoaWNzLmpzIiwic3JjL2NvcmUvcmVuZGVyZXJzL2NhbnZhcy91dGlscy9DYW52YXNNYXNrTWFuYWdlci5qcyIsInNyYy9jb3JlL3JlbmRlcmVycy9jYW52YXMvdXRpbHMvQ2FudmFzVGludGVyLmpzIiwic3JjL2NvcmUvcmVuZGVyZXJzL3dlYmdsL1RleHR1cmVNYW5hZ2VyLmpzIiwic3JjL2NvcmUvcmVuZGVyZXJzL3dlYmdsL1dlYkdMUmVuZGVyZXIuanMiLCJzcmMvY29yZS9yZW5kZXJlcnMvd2ViZ2wvZmlsdGVycy9BYnN0cmFjdEZpbHRlci5qcyIsInNyYy9jb3JlL3JlbmRlcmVycy93ZWJnbC9maWx0ZXJzL0ZYQUFGaWx0ZXIuanMiLCJzcmMvY29yZS9yZW5kZXJlcnMvd2ViZ2wvZmlsdGVycy9TcHJpdGVNYXNrRmlsdGVyLmpzIiwic3JjL2NvcmUvcmVuZGVyZXJzL3dlYmdsL21hbmFnZXJzL0JsZW5kTW9kZU1hbmFnZXIuanMiLCJzcmMvY29yZS9yZW5kZXJlcnMvd2ViZ2wvbWFuYWdlcnMvRmlsdGVyTWFuYWdlci5qcyIsInNyYy9jb3JlL3JlbmRlcmVycy93ZWJnbC9tYW5hZ2Vycy9NYXNrTWFuYWdlci5qcyIsInNyYy9jb3JlL3JlbmRlcmVycy93ZWJnbC9tYW5hZ2Vycy9TaGFkZXJNYW5hZ2VyLmpzIiwic3JjL2NvcmUvcmVuZGVyZXJzL3dlYmdsL21hbmFnZXJzL1N0ZW5jaWxNYW5hZ2VyLmpzIiwic3JjL2NvcmUvcmVuZGVyZXJzL3dlYmdsL21hbmFnZXJzL1dlYkdMTWFuYWdlci5qcyIsInNyYy9jb3JlL3JlbmRlcmVycy93ZWJnbC9zaGFkZXJzL0NvbXBsZXhQcmltaXRpdmVTaGFkZXIuanMiLCJzcmMvY29yZS9yZW5kZXJlcnMvd2ViZ2wvc2hhZGVycy9QcmltaXRpdmVTaGFkZXIuanMiLCJzcmMvY29yZS9yZW5kZXJlcnMvd2ViZ2wvc2hhZGVycy9TaGFkZXIuanMiLCJzcmMvY29yZS9yZW5kZXJlcnMvd2ViZ2wvc2hhZGVycy9UZXh0dXJlU2hhZGVyLmpzIiwic3JjL2NvcmUvcmVuZGVyZXJzL3dlYmdsL3NoYWRlcnMvX1RleHR1cmVTaGFkZXIuanMiLCJzcmMvY29yZS9yZW5kZXJlcnMvd2ViZ2wvdXRpbHMvT2JqZWN0UmVuZGVyZXIuanMiLCJzcmMvY29yZS9yZW5kZXJlcnMvd2ViZ2wvdXRpbHMvUXVhZC5qcyIsInNyYy9jb3JlL3JlbmRlcmVycy93ZWJnbC91dGlscy9SZW5kZXJUYXJnZXQuanMiLCJzcmMvY29yZS9yZW5kZXJlcnMvd2ViZ2wvdXRpbHMvU3RlbmNpbE1hc2tTdGFjay5qcyIsInNyYy9jb3JlL3JlbmRlcmVycy93ZWJnbC91dGlscy9tYXBXZWJHTEJsZW5kTW9kZXNUb1BpeGkuanMiLCJzcmMvY29yZS9yZW5kZXJlcnMvd2ViZ2wvdXRpbHMvbWFwV2ViR0xEcmF3TW9kZXNUb1BpeGkuanMiLCJzcmMvY29yZS9zcHJpdGVzL1Nwcml0ZS5qcyIsInNyYy9jb3JlL3Nwcml0ZXMvd2ViZ2wvU3ByaXRlUmVuZGVyZXIuanMiLCJzcmMvY29yZS9zcHJpdGVzL3dlYmdsL2dlbmVyYXRlTXVsdGlUZXh0dXJlU2hhZGVyLmpzIiwic3JjL2NvcmUvdGV4dC9UZXh0LmpzIiwic3JjL2NvcmUvdGV4dHVyZXMvQmFzZVRleHR1cmUuanMiLCJzcmMvY29yZS90ZXh0dXJlcy9SZW5kZXJUZXh0dXJlLmpzIiwic3JjL2NvcmUvdGV4dHVyZXMvVGV4dHVyZS5qcyIsInNyYy9jb3JlL3RleHR1cmVzL1RleHR1cmVVdnMuanMiLCJzcmMvY29yZS90ZXh0dXJlcy9WaWRlb0Jhc2VUZXh0dXJlLmpzIiwic3JjL2NvcmUvdGlja2VyL1RpY2tlci5qcyIsInNyYy9jb3JlL3RpY2tlci9pbmRleC5qcyIsInNyYy9jb3JlL3V0aWxzL2NyZWF0ZUluZGljZXNGb3JRdWFkcy5qcyIsInNyYy9jb3JlL3V0aWxzL2luZGV4LmpzIiwic3JjL2NvcmUvdXRpbHMvcGx1Z2luVGFyZ2V0LmpzIiwic3JjL2RlcHJlY2F0aW9uLmpzIiwic3JjL2V4dHJhcy9CaXRtYXBUZXh0LmpzIiwic3JjL2V4dHJhcy9Nb3ZpZUNsaXAuanMiLCJzcmMvZXh0cmFzL1RpbGluZ1Nwcml0ZS5qcyIsInNyYy9leHRyYXMvY2FjaGVBc0JpdG1hcC5qcyIsInNyYy9leHRyYXMvZ2V0Q2hpbGRCeU5hbWUuanMiLCJzcmMvZXh0cmFzL2dldEdsb2JhbFBvc2l0aW9uLmpzIiwic3JjL2V4dHJhcy9pbmRleC5qcyIsInNyYy9maWx0ZXJzL2FzY2lpL0FzY2lpRmlsdGVyLmpzIiwic3JjL2ZpbHRlcnMvYmxvb20vQmxvb21GaWx0ZXIuanMiLCJzcmMvZmlsdGVycy9ibHVyL0JsdXJEaXJGaWx0ZXIuanMiLCJzcmMvZmlsdGVycy9ibHVyL0JsdXJGaWx0ZXIuanMiLCJzcmMvZmlsdGVycy9ibHVyL0JsdXJYRmlsdGVyLmpzIiwic3JjL2ZpbHRlcnMvYmx1ci9CbHVyWUZpbHRlci5qcyIsInNyYy9maWx0ZXJzL2JsdXIvU21hcnRCbHVyRmlsdGVyLmpzIiwic3JjL2ZpbHRlcnMvY29sb3IvQ29sb3JNYXRyaXhGaWx0ZXIuanMiLCJzcmMvZmlsdGVycy9jb2xvci9Db2xvclN0ZXBGaWx0ZXIuanMiLCJzcmMvZmlsdGVycy9jb252b2x1dGlvbi9Db252b2x1dGlvbkZpbHRlci5qcyIsInNyYy9maWx0ZXJzL2Nyb3NzaGF0Y2gvQ3Jvc3NIYXRjaEZpbHRlci5qcyIsInNyYy9maWx0ZXJzL2Rpc3BsYWNlbWVudC9EaXNwbGFjZW1lbnRGaWx0ZXIuanMiLCJzcmMvZmlsdGVycy9kb3QvRG90U2NyZWVuRmlsdGVyLmpzIiwic3JjL2ZpbHRlcnMvZHJvcHNoYWRvdy9CbHVyWVRpbnRGaWx0ZXIuanMiLCJzcmMvZmlsdGVycy9kcm9wc2hhZG93L0Ryb3BTaGFkb3dGaWx0ZXIuanMiLCJzcmMvZmlsdGVycy9ncmF5L0dyYXlGaWx0ZXIuanMiLCJzcmMvZmlsdGVycy9pbmRleC5qcyIsInNyYy9maWx0ZXJzL2ludmVydC9JbnZlcnRGaWx0ZXIuanMiLCJzcmMvZmlsdGVycy9ub2lzZS9Ob2lzZUZpbHRlci5qcyIsInNyYy9maWx0ZXJzL3BpeGVsYXRlL1BpeGVsYXRlRmlsdGVyLmpzIiwic3JjL2ZpbHRlcnMvcmdiL1JHQlNwbGl0RmlsdGVyLmpzIiwic3JjL2ZpbHRlcnMvc2VwaWEvU2VwaWFGaWx0ZXIuanMiLCJzcmMvZmlsdGVycy9zaG9ja3dhdmUvU2hvY2t3YXZlRmlsdGVyLmpzIiwic3JjL2ZpbHRlcnMvdGlsdHNoaWZ0L1RpbHRTaGlmdEF4aXNGaWx0ZXIuanMiLCJzcmMvZmlsdGVycy90aWx0c2hpZnQvVGlsdFNoaWZ0RmlsdGVyLmpzIiwic3JjL2ZpbHRlcnMvdGlsdHNoaWZ0L1RpbHRTaGlmdFhGaWx0ZXIuanMiLCJzcmMvZmlsdGVycy90aWx0c2hpZnQvVGlsdFNoaWZ0WUZpbHRlci5qcyIsInNyYy9maWx0ZXJzL3R3aXN0L1R3aXN0RmlsdGVyLmpzIiwic3JjL3NyYy9pbmRleC5qcyIsInNyYy9pbnRlcmFjdGlvbi9JbnRlcmFjdGlvbkRhdGEuanMiLCJzcmMvaW50ZXJhY3Rpb24vSW50ZXJhY3Rpb25NYW5hZ2VyLmpzIiwic3JjL2ludGVyYWN0aW9uL2luZGV4LmpzIiwic3JjL2ludGVyYWN0aW9uL2ludGVyYWN0aXZlVGFyZ2V0LmpzIiwic3JjL2xvYWRlcnMvYml0bWFwRm9udFBhcnNlci5qcyIsInNyYy9sb2FkZXJzL2luZGV4LmpzIiwic3JjL2xvYWRlcnMvbG9hZGVyLmpzIiwic3JjL2xvYWRlcnMvc3ByaXRlc2hlZXRQYXJzZXIuanMiLCJzcmMvbG9hZGVycy90ZXh0dXJlUGFyc2VyLmpzIiwic3JjL21lc2gvTWVzaC5qcyIsInNyYy9tZXNoL1BsYW5lLmpzIiwic3JjL21lc2gvUm9wZS5qcyIsInNyYy9tZXNoL2luZGV4LmpzIiwic3JjL21lc2gvd2ViZ2wvTWVzaFJlbmRlcmVyLmpzIiwic3JjL21lc2gvd2ViZ2wvTWVzaFNoYWRlci5qcyIsInNyYy9wb2x5ZmlsbC9NYXRoLnNpZ24uanMiLCJzcmMvcG9seWZpbGwvT2JqZWN0LmFzc2lnbi5qcyIsInNyYy9wb2x5ZmlsbC9pbmRleC5qcyIsInNyYy9wb2x5ZmlsbC9yZXF1ZXN0QW5pbWF0aW9uRnJhbWUuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUNBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbklBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDeENBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdk1BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNqSEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDOUJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3REQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN6REE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2xDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDN0JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0SUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2hDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUM5Q0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7O0FDNXVDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7QUNoT0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FDM0ZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7OztBQ3JoQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDcEZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDckZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDSkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ25zQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdGtCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3RRQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FDdkNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7QUNubUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3hjQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDaHlCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2hFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNaQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDcEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDMURBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMxRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuWkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzVDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzdOQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNyb0JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3ZtQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdG9DQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzNGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM5VEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2xEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDcEhBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDckZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3JFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDMU5BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDN0RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3JFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM5SEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDN0ZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3RiQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDcEVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNwQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3RGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM3RkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3JHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNUZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzFGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDN1RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMxTkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDMWRBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDblFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMxUUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2xHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2hXQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM1REE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMxUEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDMUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMzWUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzlHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDckRBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMvRkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDMUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2xjQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDakhBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3hLQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDN1dBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3ZDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM1REE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM3REE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM5Z0JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDN0dBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDL0VBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN4REE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDekpBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDalNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDL0JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3ptQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3ZXQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzdEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzNtQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbmJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzdkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3hhQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQy9FQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzNPQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDaldBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3REQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQy9CQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDblJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNwRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM3VkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2xZQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM5VEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbGNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzlRQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzVCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzVCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ25CQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3ZEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzVJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM1R0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMzRkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDcEZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNUJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3RoQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQy9DQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDekZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3hCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2xGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3RFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDekZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMvTEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQy9DQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3JDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNoREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3JEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2pEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNwRkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDaERBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0RkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDM0hBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzVHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNwQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDcENBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FDbkZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7QUM1QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQy9DQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzEyQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQy9DQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdkhBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbkJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzVEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2xGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDcEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzFkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzVIQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ25OQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDakJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuT0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzNEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ1JBO0FBQ0E7QUFDQTtBQUNBOzs7QUNIQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsImZpbGUiOiJnZW5lcmF0ZWQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlc0NvbnRlbnQiOlsiKGZ1bmN0aW9uIGUodCxuLHIpe2Z1bmN0aW9uIHMobyx1KXtpZighbltvXSl7aWYoIXRbb10pe3ZhciBhPXR5cGVvZiByZXF1aXJlPT1cImZ1bmN0aW9uXCImJnJlcXVpcmU7aWYoIXUmJmEpcmV0dXJuIGEobywhMCk7aWYoaSlyZXR1cm4gaShvLCEwKTt2YXIgZj1uZXcgRXJyb3IoXCJDYW5ub3QgZmluZCBtb2R1bGUgJ1wiK28rXCInXCIpO3Rocm93IGYuY29kZT1cIk1PRFVMRV9OT1RfRk9VTkRcIixmfXZhciBsPW5bb109e2V4cG9ydHM6e319O3Rbb11bMF0uY2FsbChsLmV4cG9ydHMsZnVuY3Rpb24oZSl7dmFyIG49dFtvXVsxXVtlXTtyZXR1cm4gcyhuP246ZSl9LGwsbC5leHBvcnRzLGUsdCxuLHIpfXJldHVybiBuW29dLmV4cG9ydHN9dmFyIGk9dHlwZW9mIHJlcXVpcmU9PVwiZnVuY3Rpb25cIiYmcmVxdWlyZTtmb3IodmFyIG89MDtvPHIubGVuZ3RoO28rKylzKHJbb10pO3JldHVybiBzfSkiLCJcblxubW9kdWxlLmV4cG9ydHMgPSB7XG5cbiAgICBjcmVhdGVDb250ZXh0OiBcdFx0XHRyZXF1aXJlKCcuL2xpYi9jcmVhdGVDb250ZXh0JyksXG4gICAgc2V0VmVydGV4QXR0cmliQXJyYXlzOiBcdHJlcXVpcmUoJy4vbGliL3NldFZlcnRleEF0dHJpYkFycmF5cycpLFxuICAgIFxuICAgIEdMQnVmZmVyOiBcdFx0XHRcdHJlcXVpcmUoJy4vbGliL0dMQnVmZmVyJyksXG4gICAgR0xGcmFtZWJ1ZmZlcjogXHRcdFx0cmVxdWlyZSgnLi9saWIvR0xGcmFtZWJ1ZmZlcicpLFxuICAgIEdMU2hhZGVyOiBcdFx0XHRcdHJlcXVpcmUoJy4vbGliL0dMU2hhZGVyJyksXG4gICAgR0xUZXh0dXJlOiBcdFx0XHRcdHJlcXVpcmUoJy4vbGliL0dMVGV4dHVyZScpLFxuICAgIFxuICAgIFZlcnRleEFycmF5T2JqZWN0OiBcdFx0cmVxdWlyZSgnLi9saWIvVmVydGV4QXJyYXlPYmplY3QnKVxuXG59OyIsIlxuLyoqXG4gKiBIZWxwZXIgY2xhc3MgdG8gY3JlYXRlIGEgd2ViR0wgYnVmZmVyXG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIGdsIHtXZWJHTFJlbmRlcmluZ0NvbnRleHR9XG4gKi9cblxudmFyIEVNUFRZX0FSUkFZX0JVRkZFUiA9IG5ldyBBcnJheUJ1ZmZlcigwKTtcblxudmFyIEJ1ZmZlciA9IGZ1bmN0aW9uKGdsLCB0eXBlLCBkYXRhLCBkcmF3VHlwZSlcbntcblx0dGhpcy5nbCA9IGdsO1xuXG5cdHRoaXMuYnVmZmVyID0gZ2wuY3JlYXRlQnVmZmVyKCk7XG5cdHRoaXMudHlwZSA9IHR5cGUgfHwgZ2wuQVJSQVlfQlVGRkVSO1xuXHR0aGlzLmRyYXdUeXBlID0gZHJhd1R5cGUgfHwgZ2wuU1RBVElDX0RSQVc7XG5cdHRoaXMuZGF0YSA9IEVNUFRZX0FSUkFZX0JVRkZFUjtcblxuXHRpZihkYXRhKVxuXHR7XG5cdFx0dGhpcy51cGxvYWQoZGF0YSk7XG5cdH1cbn1cblxuQnVmZmVyLnByb3RvdHlwZS51cGxvYWQgPSBmdW5jdGlvbihkYXRhLCBvZmZzZXQsIGRvbnRCaW5kKVxue1xuXHQvLyB0b2RvIC0gbmVlZGVkP1xuXHQvL2lmKCFkb250QmluZClcblx0dGhpcy5iaW5kKCk7XG5cblx0dmFyIGdsID0gdGhpcy5nbDtcblx0XG5cdGRhdGEgPSBkYXRhIHx8IHRoaXMuZGF0YTtcblx0b2Zmc2V0ID0gb2Zmc2V0IHx8IDA7XG5cblx0aWYodGhpcy5kYXRhLmJ5dGVMZW5ndGggPj0gZGF0YS5ieXRlTGVuZ3RoKVxuXHR7XHRcblx0XHRnbC5idWZmZXJTdWJEYXRhKHRoaXMudHlwZSwgb2Zmc2V0LCBkYXRhKTtcblx0fVxuXHRlbHNlXG5cdHtcblx0XHRnbC5idWZmZXJEYXRhKHRoaXMudHlwZSwgZGF0YSwgdGhpcy5kcmF3VHlwZSk7XG5cdH1cblxuXHR0aGlzLmRhdGEgPSBkYXRhO1xufVxuXG5CdWZmZXIucHJvdG90eXBlLmJpbmQgPSBmdW5jdGlvbigpXG57XG5cdHZhciBnbCA9IHRoaXMuZ2w7XG5cdGdsLmJpbmRCdWZmZXIodGhpcy50eXBlLCB0aGlzLmJ1ZmZlcik7XG59XG5cbkJ1ZmZlci5jcmVhdGVWZXJ0ZXhCdWZmZXIgPSBmdW5jdGlvbihnbCwgZGF0YSwgZHJhd1R5cGUpXG57XG5cdHJldHVybiBuZXcgQnVmZmVyKGdsLCBnbC5BUlJBWV9CVUZGRVIsIGRhdGEsIGRyYXdUeXBlKTtcbn1cblxuQnVmZmVyLmNyZWF0ZUluZGV4QnVmZmVyID0gZnVuY3Rpb24oZ2wsIGRhdGEsIGRyYXdUeXBlKVxue1xuXHRyZXR1cm4gbmV3IEJ1ZmZlcihnbCwgZ2wuRUxFTUVOVF9BUlJBWV9CVUZGRVIsIGRhdGEsIGRyYXdUeXBlKTtcbn1cblxuQnVmZmVyLmNyZWF0ZSA9IGZ1bmN0aW9uKGdsLCB0eXBlLCBkYXRhLCBkcmF3VHlwZSlcbntcblx0cmV0dXJuIG5ldyBCdWZmZXIoZ2wsIHR5cGUsIGRyYXdUeXBlKTtcbn1cblxuLy9UT0RPIERlc3Ryb3kuLlxuXG5tb2R1bGUuZXhwb3J0cyA9IEJ1ZmZlcjtcblxuIiwiXG52YXIgVGV4dHVyZSA9IHJlcXVpcmUoJy4vR0xUZXh0dXJlJyk7XG5cbi8qKlxuICogSGVscGVyIGNsYXNzIHRvIGNyZWF0ZSBhIHdlYkdMIEZyYW1lYnVmZmVyXG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIGdsIHtXZWJHTFJlbmRlcmluZ0NvbnRleHR9XG4gKi9cblxudmFyIEZyYW1lYnVmZmVyID0gZnVuY3Rpb24oZ2wsIHdpZHRoLCBoZWlnaHQpXG57XG5cdHRoaXMuZ2wgPSBnbDtcblxuXHR0aGlzLmZyYW1lYnVmZmVyID0gZ2wuY3JlYXRlRnJhbWVidWZmZXIoKTtcblx0XG5cdHRoaXMuc3RlbmNpbCA9IG51bGw7XG5cdHRoaXMudGV4dHVyZSA9IG51bGw7XG5cblx0dGhpcy53aWR0aCA9IHdpZHRoIHx8IDEwMDtcblx0dGhpcy5oZWlnaHQgPSBoZWlnaHQgfHwgMTAwO1xufVxuXG5GcmFtZWJ1ZmZlci5wcm90b3R5cGUuZW5hYmxlVGV4dHVyZSA9IGZ1bmN0aW9uKHRleHR1cmUpXG57XG5cdHZhciBnbCA9IHRoaXMuZ2w7XG5cblx0dGhpcy50ZXh0dXJlID0gdGV4dHVyZSB8fCBuZXcgVGV4dHVyZShnbCk7XG5cblx0dGhpcy50ZXh0dXJlLmJpbmQoKTtcblxuXHQvL2dsLnRleEltYWdlMkQoZ2wuVEVYVFVSRV8yRCwgMCwgZ2wuUkdCQSwgIHRoaXMud2lkdGgsIHRoaXMuaGVpZ2h0LCAwLCBnbC5SR0JBLCBnbC5VTlNJR05FRF9CWVRFLCBudWxsKTtcblxuXHR0aGlzLmJpbmQoKTtcblxuXHRnbC5mcmFtZWJ1ZmZlclRleHR1cmUyRChnbC5GUkFNRUJVRkZFUiwgZ2wuQ09MT1JfQVRUQUNITUVOVDAsIGdsLlRFWFRVUkVfMkQsIHRoaXMudGV4dHVyZS50ZXh0dXJlLCAwKTtcbn1cblxuRnJhbWVidWZmZXIucHJvdG90eXBlLmVuYWJsZVN0ZW5jaWwgPSBmdW5jdGlvbigpXG57XG5cdGlmKHRoaXMuc3RlbmNpbClyZXR1cm47XG5cblx0dmFyIGdsID0gdGhpcy5nbDtcblxuXHR0aGlzLnN0ZW5jaWwgPSBnbC5jcmVhdGVSZW5kZXJidWZmZXIoKTtcbiAgICBcbiAgICBnbC5iaW5kUmVuZGVyYnVmZmVyKGdsLlJFTkRFUkJVRkZFUiwgdGhpcy5zdGVuY2lsKTtcbiAgICBcbiAgICAvLyBUT0RPLi4gdGhpcyBpcyBkZXB0aCBBTkQgc3RlbmNpbD9cbiAgICBnbC5mcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcihnbC5GUkFNRUJVRkZFUiwgZ2wuREVQVEhfU1RFTkNJTF9BVFRBQ0hNRU5ULCBnbC5SRU5ERVJCVUZGRVIsIHRoaXMuc3RlbmNpbCk7XG4gICAgZ2wucmVuZGVyYnVmZmVyU3RvcmFnZShnbC5SRU5ERVJCVUZGRVIsIGdsLkRFUFRIX1NURU5DSUwsICB0aGlzLndpZHRoICAsIHRoaXMuaGVpZ2h0ICk7XG59XG5cbkZyYW1lYnVmZmVyLnByb3RvdHlwZS5jbGVhciA9IGZ1bmN0aW9uKCByLCBnLCBiLCBhIClcbntcblx0dGhpcy5iaW5kKCk7XG5cblx0dmFyIGdsID0gdGhpcy5nbDtcbiAgICBcbiAgICBnbC5jbGVhckNvbG9yKHIsIGcsIGIsIGEpO1xuICAgIGdsLmNsZWFyKGdsLkNPTE9SX0JVRkZFUl9CSVQpO1xufVxuXG5GcmFtZWJ1ZmZlci5wcm90b3R5cGUuYmluZCA9IGZ1bmN0aW9uKClcbntcblx0dmFyIGdsID0gdGhpcy5nbDtcblx0Z2wuYmluZEZyYW1lYnVmZmVyKGdsLkZSQU1FQlVGRkVSLCB0aGlzLmZyYW1lYnVmZmVyICk7XHRcbn1cblxuRnJhbWVidWZmZXIucHJvdG90eXBlLnVuYmluZCA9IGZ1bmN0aW9uKClcbntcblx0Z2wuYmluZEZyYW1lYnVmZmVyKGdsLkZSQU1FQlVGRkVSLCBudWxsICk7XHRcbn1cblxuRnJhbWVidWZmZXIucHJvdG90eXBlLnJlc2l6ZSA9IGZ1bmN0aW9uKHdpZHRoLCBoZWlnaHQpXG57XG5cdHZhciBnbCA9IHRoaXMuZ2w7XG5cblx0dGhpcy53aWR0aCA9IHdpZHRoO1xuXHR0aGlzLmhlaWdodCA9IGhlaWdodDtcblxuXHRpZiAoIHRoaXMudGV4dHVyZSApXG4gICAge1xuICAgIFx0dGhpcy50ZXh0dXJlLnVwbG9hZERhdGEobnVsbCwgd2lkdGgsIGhlaWdodCk7XG5cdH1cblxuXHRpZiAoIHRoaXMuc3RlbmNpbCApXG4gICAge1xuICAgICAgICAvLyB1cGRhdGUgdGhlIHN0ZW5jaWwgYnVmZmVyIHdpZHRoIGFuZCBoZWlnaHRcbiAgICAgICAgZ2wuYmluZFJlbmRlcmJ1ZmZlcihnbC5SRU5ERVJCVUZGRVIsIHRoaXMuc3RlbmNpbCk7XG4gICAgICAgIGdsLnJlbmRlcmJ1ZmZlclN0b3JhZ2UoZ2wuUkVOREVSQlVGRkVSLCBnbC5ERVBUSF9TVEVOQ0lMLCB3aWR0aCwgaGVpZ2h0KTtcbiAgICB9XG59XG5cbkZyYW1lYnVmZmVyLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24oKVxue1xuXHR2YXIgZ2wgPSB0aGlzLmdsO1xuXHQvL1RPRE9cblx0Z2wuZGVsZXRlRnJhbWVidWZmZXIodGhpcy5mcmFtZWJ1ZmZlcik7XG59XG5cbkZyYW1lYnVmZmVyLmNyZWF0ZVJHQkEgPSBmdW5jdGlvbihnbCwgd2lkdGgsIGhlaWdodCwgZGF0YSlcbntcblx0dmFyIHRleHR1cmUgPSBUZXh0dXJlLmZyb21EYXRhKGdsLCBudWxsLCB3aWR0aCwgaGVpZ2h0KTtcblx0dGV4dHVyZS5lbmFibGVOZWFyZXN0U2NhbGluZygpO1xuICAgIHRleHR1cmUuZW5hYmxlV3JhcENsYW1wKCk7XG5cbiAgICAvL25vdyBjcmVhdGUgdGhlIGZyYW1lYnVmZmVyIG9iamVjdCBhbmQgYXR0YWNoIHRoZSB0ZXh0dXJlIHRvIGl0LlxuICAgIHZhciBmYm8gPSBuZXcgRnJhbWVidWZmZXIoZ2wsIHdpZHRoLCBoZWlnaHQpO1xuICAgIGZiby5lbmFibGVUZXh0dXJlKHRleHR1cmUpO1xuXG4gICAgcmV0dXJuIGZibztcbn1cblxuRnJhbWVidWZmZXIuY3JlYXRlRmxvYXQzMiA9IGZ1bmN0aW9uKGdsLCB3aWR0aCwgaGVpZ2h0LCBkYXRhKVxue1xuXHQvLyBjcmVhdGUgYSBuZXcgdGV4dHVyZS4uXG4gICAgdmFyIHRleHR1cmUgPSBuZXcgVGV4dHVyZS5mcm9tRGF0YShnbCwgZGF0YSwgd2lkdGgsIGhlaWdodCk7XG4gICAgdGV4dHVyZS5lbmFibGVOZWFyZXN0U2NhbGluZygpO1xuICAgIHRleHR1cmUuZW5hYmxlV3JhcENsYW1wKCk7XG5cbiAgICAvL25vdyBjcmVhdGUgdGhlIGZyYW1lYnVmZmVyIG9iamVjdCBhbmQgYXR0YWNoIHRoZSB0ZXh0dXJlIHRvIGl0LlxuICAgIHZhciBmYm8gPSBuZXcgRnJhbWVidWZmZXIoZ2wsIHdpZHRoLCBoZWlnaHQpO1xuICAgIGZiby5lbmFibGVUZXh0dXJlKHRleHR1cmUpXG5cbiAgICByZXR1cm4gZmJvO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IEZyYW1lYnVmZmVyO1xuXG4iLCJcbnZhciBjb21waWxlUHJvZ3JhbSA9IHJlcXVpcmUoJy4vc2hhZGVyL2NvbXBpbGVQcm9ncmFtJyksXG5cdGV4dHJhY3RBdHRyaWJ1dGVzID0gcmVxdWlyZSgnLi9zaGFkZXIvZXh0cmFjdEF0dHJpYnV0ZXMnKSxcblx0ZXh0cmFjdFVuaWZvcm1zID0gcmVxdWlyZSgnLi9zaGFkZXIvZXh0cmFjdFVuaWZvcm1zJyksXG5cdGdlbmVyYXRlVW5pZm9ybUFjY2Vzc09iamVjdCA9IHJlcXVpcmUoJy4vc2hhZGVyL2dlbmVyYXRlVW5pZm9ybUFjY2Vzc09iamVjdCcpO1xuXG4vKipcbiAqIEhlbHBlciBjbGFzcyB0byBjcmVhdGUgYSB3ZWJHTCBTaGFkZXJcbiAqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gZ2wge1dlYkdMUmVuZGVyaW5nQ29udGV4dH1cbiAqL1xudmFyIFNoYWRlciA9IGZ1bmN0aW9uKGdsLCB2ZXJ0ZXhTcmMsIGZyYWdtZW50U3JjKVxue1xuXHR0aGlzLmdsID0gZ2w7XG5cblx0Ly8gRmlyc3QgY29tcGlsZSB0aGUgcHJvZ3JhbS4uXG5cdHRoaXMucHJvZ3JhbSA9IGNvbXBpbGVQcm9ncmFtKGdsLCB2ZXJ0ZXhTcmMsIGZyYWdtZW50U3JjKTtcblxuXHQvLyBuZXh0IGV4dHJhY3QgdGhlIGF0dHJpYnV0ZXNcblx0dGhpcy5hdHRyaWJ1dGVzID0gZXh0cmFjdEF0dHJpYnV0ZXMoZ2wsIHRoaXMucHJvZ3JhbSk7IFxuXG4gICAgdmFyIHVuaWZvcm1EYXRhID0gZXh0cmFjdFVuaWZvcm1zKGdsLCB0aGlzLnByb2dyYW0pO1xuXG4gICAgdGhpcy51bmlmb3JtcyA9IGdlbmVyYXRlVW5pZm9ybUFjY2Vzc09iamVjdCggZ2wsIHVuaWZvcm1EYXRhICk7XG59XG5cblNoYWRlci5wcm90b3R5cGUuYmluZCA9IGZ1bmN0aW9uKClcbntcblx0dGhpcy5nbC51c2VQcm9ncmFtKHRoaXMucHJvZ3JhbSk7XG59XG5cblNoYWRlci5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uKClcbntcblx0dmFyIGdsID0gdGhpcy5nbDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBTaGFkZXI7XG5cbiIsIlxuLyoqXG4gKiBIZWxwZXIgY2xhc3MgdG8gY3JlYXRlIGEgd2ViR0wgVGV4dHVyZVxuICpcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqIEBwYXJhbSBnbCB7V2ViR0xSZW5kZXJpbmdDb250ZXh0fSBhIFdlYkdMIGNvbnRleHRcbiAqIEBwYXJhbSB3aWR0aCB7bnVtYmVyfSB0aGUgd2lkdGggb2YgdGhlIHRleHR1cmUgXG4gKiBAcGFyYW0gaGVpZ2h0IHtudW1iZXJ9IHRoZSBoZWlnaHQgb2YgdGhlIHRleHR1cmUgXG4gKiBAcGFyYW0gZm9ybWF0IHtudW1iZXJ9IHRoZSBwaXhlbCBmb3JtYXQgb2YgdGhlIHRleHR1cmUuIGRlZmF1bHRzIHRvIGdsLlJHQkFcbiAqIEBwYXJhbSB0eXBlIHtudW1iZXJ9IHRoZSBnbCB0eXBlIG9mIHRoZSB0ZXh0dXJlLiBkZWZhdWx0cyB0byBnbC5VTlNJR05FRF9CWVRFXG4gKi9cbnZhciBUZXh0dXJlID0gZnVuY3Rpb24oZ2wsIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgdHlwZSlcbntcblx0dGhpcy5nbCA9IGdsO1xuXG5cdHRoaXMudGV4dHVyZSA9IGdsLmNyZWF0ZVRleHR1cmUoKTtcblxuXHQvLyBzb21lIHNldHRpbmdzLi5cblx0dGhpcy5taXBtYXAgPSBmYWxzZTtcblxuXHR0aGlzLnByZW11bHRpcGx5QWxwaGEgPSBmYWxzZTtcblxuXHR0aGlzLndpZHRoID0gd2lkdGggfHwgMDtcblx0dGhpcy5oZWlnaHQgPSBoZWlnaHQgfHwgMDtcblxuXHR0aGlzLmZvcm1hdCA9IGZvcm1hdCB8fCBnbC5SR0JBO1xuXHR0aGlzLnR5cGUgPSB0eXBlIHx8IGdsLlVOU0lHTkVEX0JZVEU7XG5cblxufVxuXG4vKipcbiAqIEBwYXJhbSB7UElYSS5nbENvcmUuVGV4dHVyZX0gW3Zhcm5hbWVdIFtkZXNjcmlwdGlvbl1cbiAqL1xuVGV4dHVyZS5wcm90b3R5cGUudXBsb2FkID0gZnVuY3Rpb24oc291cmNlKVxue1xuXHR0aGlzLmJpbmQoKTtcblxuXHR2YXIgZ2wgPSB0aGlzLmdsO1xuXG5cdHRoaXMud2lkdGggPSBzb3VyY2Uud2lkdGg7XG5cdHRoaXMuaGVpZ2h0ID0gc291cmNlLmhlaWdodDtcblxuXHRnbC5waXhlbFN0b3JlaShnbC5VTlBBQ0tfUFJFTVVMVElQTFlfQUxQSEFfV0VCR0wsIHRoaXMucHJlbXVsdGlwbHlBbHBoYSk7XG4gICAgZ2wudGV4SW1hZ2UyRChnbC5URVhUVVJFXzJELCAwLCB0aGlzLmZvcm1hdCwgdGhpcy5mb3JtYXQsIHRoaXMudHlwZSwgc291cmNlKTtcbn1cblxudmFyIEZMT0FUSU5HX1BPSU5UX0FWQUlMQUJMRSA9IGZhbHNlO1xuXG5UZXh0dXJlLnByb3RvdHlwZS51cGxvYWREYXRhID0gZnVuY3Rpb24oZGF0YSwgd2lkdGgsIGhlaWdodClcbntcblx0dGhpcy5iaW5kKCk7XG5cdFxuXHR0aGlzLndpZHRoID0gd2lkdGggfHwgdGhpcy53aWR0aDtcblx0dGhpcy5oZWlnaHQgPSBoZWlnaHQgfHwgdGhpcy5oZWlnaHQ7XG5cblx0aWYoZGF0YSBpbnN0YW5jZW9mIEZsb2F0MzJBcnJheSlcblx0e1xuXHRcdGlmKCFGTE9BVElOR19QT0lOVF9BVkFJTEFCTEUpXG5cdFx0e1xuXHRcdFx0dmFyIGV4dCA9IGdsLmdldEV4dGVuc2lvbihcIk9FU190ZXh0dXJlX2Zsb2F0XCIpO1xuXHRcdFx0XG5cdFx0XHRpZihleHQpXG5cdFx0XHR7XG5cdFx0XHRcdEZMT0FUSU5HX1BPSU5UX0FWQUlMQUJMRSA9IHRydWU7XG5cdFx0XHR9XG5cdFx0XHRlbHNlXG5cdFx0XHR7XG5cdFx0XHRcdHRocm93IG5ldyBFcnJvcignZmxvYXRpbmcgcG9pbnQgdGV4dHVyZXMgbm90IGF2YWlsYWJsZScpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHRoaXMudHlwZSA9IGdsLkZMT0FUO1xuXHR9XG5cdGVsc2Vcblx0e1xuXHRcdC8vIFRPRE8gc3VwcG9ydCBmb3Igb3RoZXIgdHlwZXNcblx0XHR0aGlzLnR5cGUgPSBnbC5VTlNJR05FRF9CWVRFO1xuXHR9XG5cblx0Ly8gd2hhdCB0eXBlIG9mIGRhdGE/XG5cdGdsLnBpeGVsU3RvcmVpKGdsLlVOUEFDS19QUkVNVUxUSVBMWV9BTFBIQV9XRUJHTCwgdGhpcy5wcmVtdWx0aXBseUFscGhhKTtcblx0Z2wudGV4SW1hZ2UyRChnbC5URVhUVVJFXzJELCAwLCB0aGlzLmZvcm1hdCwgIHRoaXMud2lkdGgsIHRoaXMuaGVpZ2h0LCAwLCB0aGlzLmZvcm1hdCwgdGhpcy50eXBlLCBkYXRhIHx8IG51bGwpO1xuXG59XG5cblRleHR1cmUucHJvdG90eXBlLmJpbmQgPSBmdW5jdGlvbihsb2NhdGlvbilcbntcblx0dmFyIGdsID0gdGhpcy5nbDtcblxuXHRpZihsb2NhdGlvbiAhPT0gdW5kZWZpbmVkKVxuXHR7XG5cdFx0Z2wuYWN0aXZlVGV4dHVyZShnbC5URVhUVVJFMCArIGxvY2F0aW9uKTtcblx0fVxuXG5cdGdsLmJpbmRUZXh0dXJlKGdsLlRFWFRVUkVfMkQsIHRoaXMudGV4dHVyZSk7XG59XG5cblRleHR1cmUucHJvdG90eXBlLnVuYmluZCA9IGZ1bmN0aW9uKClcbntcblx0dmFyIGdsID0gdGhpcy5nbDtcblx0Z2wuYmluZFRleHR1cmUoZ2wuVEVYVFVSRV8yRCwgbnVsbCk7XG59XG5cblRleHR1cmUucHJvdG90eXBlLm1pbkZpbHRlciA9IGZ1bmN0aW9uKCBsaW5lYXIgKVxue1xuXHR2YXIgZ2wgPSB0aGlzLmdsO1xuXG5cdHRoaXMuYmluZCgpO1xuXG5cdGlmKHRoaXMubWlwbWFwKVxuXHR7XG5cdFx0Z2wudGV4UGFyYW1ldGVyaShnbC5URVhUVVJFXzJELCBnbC5URVhUVVJFX01JTl9GSUxURVIsIGxpbmVhciA/IGdsLkxJTkVBUl9NSVBNQVBfTElORUFSIDogZ2wuTkVBUkVTVF9NSVBNQVBfTkVBUkVTVCk7XG5cdH1cblx0ZWxzZVxuXHR7XG5cdFx0Z2wudGV4UGFyYW1ldGVyaShnbC5URVhUVVJFXzJELCBnbC5URVhUVVJFX01JTl9GSUxURVIsIGxpbmVhciA/IGdsLkxJTkVBUiA6IGdsLk5FQVJFU1QpO1xuXHR9XHRcbn1cblxuVGV4dHVyZS5wcm90b3R5cGUubWFnRmlsdGVyID0gZnVuY3Rpb24oIGxpbmVhciApXG57XG5cdHZhciBnbCA9IHRoaXMuZ2w7XG5cblx0dGhpcy5iaW5kKCk7XG5cblx0Z2wudGV4UGFyYW1ldGVyaShnbC5URVhUVVJFXzJELCBnbC5URVhUVVJFX01BR19GSUxURVIsIGxpbmVhciA/IGdsLkxJTkVBUiA6IGdsLk5FQVJFU1QpO1xufVxuXG5UZXh0dXJlLnByb3RvdHlwZS5lbmFibGVNaXBtYXAgPSBmdW5jdGlvbigpXG57XG5cdHRoaXMuYmluZCgpO1xuXG5cdHRoaXMubWlwbWFwID0gdHJ1ZTtcblx0Z2wuZ2VuZXJhdGVNaXBtYXAoZ2wuVEVYVFVSRV8yRCk7XG59XG5cblRleHR1cmUucHJvdG90eXBlLmVuYWJsZUxpbmVhclNjYWxpbmcgPSBmdW5jdGlvbigpXG57XG5cdHRoaXMubWluRmlsdGVyKHRydWUpO1xuXHR0aGlzLm1hZ0ZpbHRlcih0cnVlKTtcbn1cblxuVGV4dHVyZS5wcm90b3R5cGUuZW5hYmxlTmVhcmVzdFNjYWxpbmcgPSBmdW5jdGlvbigpXG57XG5cdHRoaXMubWluRmlsdGVyKGZhbHNlKTtcblx0dGhpcy5tYWdGaWx0ZXIoZmFsc2UpO1xufVxuXG5UZXh0dXJlLnByb3RvdHlwZS5lbmFibGVXcmFwQ2xhbXAgPSBmdW5jdGlvbigpXG57XG5cdHZhciBnbCA9IHRoaXMuZ2w7XG5cblx0dGhpcy5iaW5kKCk7XG5cblx0Z2wudGV4UGFyYW1ldGVyaShnbC5URVhUVVJFXzJELCBnbC5URVhUVVJFX1dSQVBfUywgZ2wuQ0xBTVBfVE9fRURHRSk7XG4gICAgZ2wudGV4UGFyYW1ldGVyaShnbC5URVhUVVJFXzJELCBnbC5URVhUVVJFX1dSQVBfVCwgZ2wuQ0xBTVBfVE9fRURHRSk7XG59XG5cblRleHR1cmUucHJvdG90eXBlLmVuYWJsZVdyYXBSZXBlYXQgPSBmdW5jdGlvbigpXG57XG5cdHZhciBnbCA9IHRoaXMuZ2w7XG5cblx0dGhpcy5iaW5kKCk7XG5cdFxuXHRnbC50ZXhQYXJhbWV0ZXJpKGdsLlRFWFRVUkVfMkQsIGdsLlRFWFRVUkVfV1JBUF9TLCBnbC5SRVBFQVQpO1xuICAgIGdsLnRleFBhcmFtZXRlcmkoZ2wuVEVYVFVSRV8yRCwgZ2wuVEVYVFVSRV9XUkFQX1QsIGdsLlJFUEVBVCk7XG59XG5cblRleHR1cmUucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbigpXG57XG5cdHZhciBnbCA9IHRoaXMuZ2w7XG5cdC8vVE9ET1xuXHRnbC5kZWxldGVUZXh0dXJlKHRoaXMudGV4dHVyZSk7XG59XG5cbi8vVGV4dHVyZS5cblRleHR1cmUuZnJvbVNvdXJjZSA9IGZ1bmN0aW9uKGdsLCBzb3VyY2UsIHByZW11bHRpcGx5QWxwaGEpXG57XG5cdHZhciB0ZXh0dXJlID0gbmV3IFRleHR1cmUoZ2wpO1xuXHR0ZXh0dXJlLnByZW11bHRpcGx5QWxwaGEgPSBwcmVtdWx0aXBseUFscGhhIHx8IGZhbHNlO1xuXHR0ZXh0dXJlLnVwbG9hZChzb3VyY2UpO1xuXG5cdHJldHVybiB0ZXh0dXJlO1xufVxuXG5UZXh0dXJlLmZyb21EYXRhID0gZnVuY3Rpb24oZ2wsIGRhdGEsIHdpZHRoLCBoZWlnaHQpXG57XG5cdC8vY29uc29sZS5sb2coZGF0YSwgd2lkdGgsIGhlaWdodCk7XG5cdHZhciB0ZXh0dXJlID0gbmV3IFRleHR1cmUoZ2wpO1xuXHR0ZXh0dXJlLnVwbG9hZERhdGEoZGF0YSwgd2lkdGgsIGhlaWdodCk7XG5cblx0cmV0dXJuIHRleHR1cmU7XG59XG5cblxubW9kdWxlLmV4cG9ydHMgPSBUZXh0dXJlO1xuXG4iLCJcbi8qKlxuICogR2VuZXJpYyBNYXNrIFN0YWNrIGRhdGEgc3RydWN0dXJlXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKi9cblxuLy8gc3RhdGUgb2JqZWN0Ly9cblxuXG5mdW5jdGlvbiBWZXJ0ZXhBcnJheU9iamVjdChnbClcbntcblx0XG5cdHRoaXMubmF0aXZlVmFvRXh0ZW5zaW9uID0gKFxuICAgICAgZ2wuZ2V0RXh0ZW5zaW9uKCdPRVNfdmVydGV4X2FycmF5X29iamVjdCcpIHx8XG4gICAgICBnbC5nZXRFeHRlbnNpb24oJ01PWl9PRVNfdmVydGV4X2FycmF5X29iamVjdCcpIHx8XG4gICAgICBnbC5nZXRFeHRlbnNpb24oJ1dFQktJVF9PRVNfdmVydGV4X2FycmF5X29iamVjdCcpXG4gICAgKTtcblxuLy9cdHRoaXMubmF0aXZlVmFvRXh0ZW5zaW9uID0gbnVsbDtcblxuXHRpZih0aGlzLm5hdGl2ZVZhb0V4dGVuc2lvbilcblx0e1xuXHRcdHRoaXMubmF0aXZlVmFvID0gdGhpcy5uYXRpdmVWYW9FeHRlbnNpb24uY3JlYXRlVmVydGV4QXJyYXlPRVMoKTsgIFxuXHR9XG5cblx0dGhpcy5nbCA9IGdsO1xuXG5cdHRoaXMuYXR0cmlidXRlcyA9IFtdO1xuXG5cdHRoaXMuaW5kZXhCdWZmZXIgPSBudWxsO1xuXG5cdHRoaXMuZGlydHkgPSBmYWxzZTtcblxuXHRcbn1cblxuVmVydGV4QXJyYXlPYmplY3QucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gVmVydGV4QXJyYXlPYmplY3Q7XG5tb2R1bGUuZXhwb3J0cyA9IFZlcnRleEFycmF5T2JqZWN0O1xuXG5WZXJ0ZXhBcnJheU9iamVjdC5wcm90b3R5cGUuYmluZCA9IGZ1bmN0aW9uKClcbntcblx0aWYodGhpcy5uYXRpdmVWYW8pXG5cdHtcblx0XHR0aGlzLm5hdGl2ZVZhb0V4dGVuc2lvbi5iaW5kVmVydGV4QXJyYXlPRVModGhpcy5uYXRpdmVWYW8pOyAgXG5cblx0XHRpZih0aGlzLmRpcnR5KVxuXHRcdHtcblx0XHRcdHRoaXMuZGlydHkgPSBmYWxzZTtcblx0XHRcdHRoaXMuYWN0aXZhdGUoKTtcblx0XHR9XG5cdH1cblx0ZWxzZVxuXHR7XG5cdFx0dGhpcy5hY3RpdmF0ZSgpO1xuXHR9XG59XG5cblZlcnRleEFycmF5T2JqZWN0LnByb3RvdHlwZS51bmJpbmQgPSBmdW5jdGlvbigpXG57XG5cdGlmKHRoaXMubmF0aXZlVmFvKVxuXHR7XG5cdFx0dGhpcy5uYXRpdmVWYW9FeHRlbnNpb24uYmluZFZlcnRleEFycmF5T0VTKG51bGwpO1xuXHR9XG59XG5cblZlcnRleEFycmF5T2JqZWN0LnByb3RvdHlwZS5hY3RpdmF0ZSA9IGZ1bmN0aW9uKClcbntcblx0dmFyIGdsID0gdGhpcy5nbDtcblxuXHRmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuYXR0cmlidXRlcy5sZW5ndGg7IGkrKykgXG5cdHtcblx0XHR2YXIgYXR0cmliID0gdGhpcy5hdHRyaWJ1dGVzW2ldO1xuXHRcdGF0dHJpYi5idWZmZXIuYmluZCgpO1x0XG5cblx0XHRhdHRyaWIuYXR0cmlidXRlLnBvaW50ZXIoYXR0cmliLnR5cGUsIGF0dHJpYi5ub3JtYWxpemVkLCBhdHRyaWIuc3RyaWRlLCBhdHRyaWIuc3RhcnQpOyBcblx0XHRcblx0XHRnbC5lbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShhdHRyaWIuYXR0cmlidXRlLmxvY2F0aW9uKTtcblx0fTtcblxuXHR0aGlzLmluZGV4QnVmZmVyLmJpbmQoKTtcbn1cblxuVmVydGV4QXJyYXlPYmplY3QucHJvdG90eXBlLmFkZEF0dHJpYnV0ZSA9IGZ1bmN0aW9uKGJ1ZmZlciwgYXR0cmlidXRlLCB0eXBlLCBub3JtYWxpemVkLCBzdHJpZGUsIHN0YXJ0KVxue1xuICAgIHRoaXMuYXR0cmlidXRlcy5wdXNoKHtcbiAgICBcdGJ1ZmZlcjogXHRidWZmZXIsXG4gICAgXHRhdHRyaWJ1dGU6IFx0YXR0cmlidXRlLFxuXG4gICAgXHRsb2NhdGlvbjogXHRhdHRyaWJ1dGUubG9jYXRpb24sXG5cdCBcdHR5cGU6IFx0XHR0eXBlIHx8IHRoaXMuZ2wuRkxPQVQsXG5cdCBcdG5vcm1hbGl6ZWQ6IG5vcm1hbGl6ZWQgfHwgZmFsc2UsXG5cdCBcdHN0cmlkZTogXHRzdHJpZGUgfHwgMCxcblx0IFx0c3RhcnQ6IFx0XHRzdGFydCB8fCAwXG5cdH0pXG5cblx0dGhpcy5kaXJ0eSA9IHRydWU7XG59XG5cblxuVmVydGV4QXJyYXlPYmplY3QucHJvdG90eXBlLmFkZEluZGV4ID0gZnVuY3Rpb24oYnVmZmVyLCBvcHRpb25zKVxue1xuICAgIHRoaXMuaW5kZXhCdWZmZXIgPSBidWZmZXI7XG5cbiAgICB0aGlzLmRpcnR5ID0gdHJ1ZTtcbn1cblxuVmVydGV4QXJyYXlPYmplY3QucHJvdG90eXBlLmRyYXcgPSBmdW5jdGlvbih0eXBlLCBzaXplLCBzdGFydClcbntcblx0dmFyIGdsID0gdGhpcy5nbDtcblx0Z2wuZHJhd0VsZW1lbnRzKHR5cGUsIHNpemUsIGdsLlVOU0lHTkVEX1NIT1JULCBzdGFydCk7XG59XG5cbiIsIlxuLyoqXG4gKiBIZWxwZXIgY2xhc3MgdG8gY3JlYXRlIGEgd2ViR0wgQ29udGV4dFxuICpcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqIEBwYXJhbSBnbCB7V2ViR0xSZW5kZXJpbmdDb250ZXh0fVxuICovXG5cbnZhciBDT05URVhUX1VJRCA9IDA7XG5cbnZhciBjcmVhdGVDb250ZXh0ID0gZnVuY3Rpb24oY2FudmFzLCBvcHRpb25zKVxue1xuICAgIGdsID0gY2FudmFzLmdldENvbnRleHQoJ3dlYmdsJywgb3B0aW9ucykgfHwgXG4gICAgXHQgY2FudmFzLmdldENvbnRleHQoJ2V4cGVyaW1lbnRhbC13ZWJnbCcsIG9wdGlvbnMpO1xuXG4gICAgaWYgKCFnbClcbiAgICB7XG4gICAgICAgIC8vIGZhaWwsIG5vdCBhYmxlIHRvIGdldCBhIGNvbnRleHRcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdUaGlzIGJyb3dzZXIgZG9lcyBub3Qgc3VwcG9ydCB3ZWJHTC4gVHJ5IHVzaW5nIHRoZSBjYW52YXMgcmVuZGVyZXInKTtcbiAgICB9XG5cbiAgICAvLyBtaWdodCB3YW50IHRvIHBoYXNlIHRoaXMgb3V0P1xuICAgIGdsLmlkID0gQ09OVEVYVF9VSUQrKztcblxuICAgIHJldHVybiBnbDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBjcmVhdGVDb250ZXh0O1xuXG4iLCIvKipcbiAqIEdlbmVyaWMgTWFzayBTdGFjayBkYXRhIHN0cnVjdHVyZVxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICovXG5cbnZhciBHTF9NQVAgPSB7fTtcblxuXG52YXIgc2V0VmVydGV4QXR0cmliQXJyYXlzID0gZnVuY3Rpb24gKGdsLCBhdHRyaWJzKVxue1x0XG4gICAvLyBjb25zb2xlLmxvZyhnbC5pZClcbiAgICB2YXIgZGF0YSA9IEdMX01BUFtnbC5pZF07XG5cbiAgICBpZighZGF0YSlcbiAgICB7XG5cdCAgIHZhciBtYXhBdHRyaWJzID0gZ2wuZ2V0UGFyYW1ldGVyKGdsLk1BWF9WRVJURVhfQVRUUklCUyk7XG5cdFx0ZGF0YSA9IEdMX01BUFtnbC5pZF0gPSB7dGVtcEF0dHJpYlN0YXRlOm5ldyBBcnJheShtYXhBdHRyaWJzKVxuXHRcdFx0XHQgXHQgXHRcdCAgICxhdHRyaWJTdGF0ZTpuZXcgQXJyYXkobWF4QXR0cmlicyl9O1xuXHR9XG5cdFxuICAgIHZhciBpLFxuICAgIFx0dGVtcEF0dHJpYlN0YXRlID0gZGF0YS50ZW1wQXR0cmliU3RhdGUsXG4gICAgXHRhdHRyaWJTdGF0ZSA9IGRhdGEuYXR0cmliU3RhdGU7XG5cbiAgICBmb3IgKGkgPSAwOyBpIDwgdGVtcEF0dHJpYlN0YXRlLmxlbmd0aDsgaSsrKVxuICAgIHtcbiAgICAgICAgdGVtcEF0dHJpYlN0YXRlW2ldID0gZmFsc2U7XG4gICAgfVxuXG4gICAgLy8gc2V0IHRoZSBuZXcgYXR0cmlic1xuICAgIGZvciAoaSBpbiBhdHRyaWJzKVxuICAgIHtcbiAgICAgICAgdGVtcEF0dHJpYlN0YXRlW2F0dHJpYnNbaV0ubG9jYXRpb25dID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBmb3IgKGkgPSAxOyBpIDwgYXR0cmliU3RhdGUubGVuZ3RoOyBpKyspXG4gICAge1xuICAgICAgICBpZiAoYXR0cmliU3RhdGVbaV0gIT09IHRlbXBBdHRyaWJTdGF0ZVtpXSlcbiAgICAgICAge1xuICAgICAgICAgICAgYXR0cmliU3RhdGVbaV0gPSB0ZW1wQXR0cmliU3RhdGVbaV07XG5cbiAgICAgICAgICAgIGlmIChkYXRhLmF0dHJpYlN0YXRlW2ldKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGdsLmVuYWJsZVZlcnRleEF0dHJpYkFycmF5KGkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGdsLmRpc2FibGVWZXJ0ZXhBdHRyaWJBcnJheShpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn07XG5cbm1vZHVsZS5leHBvcnRzID0gc2V0VmVydGV4QXR0cmliQXJyYXlzOyIsIlxuXG5cblxuY29tcGlsZVByb2dyYW0gPSBmdW5jdGlvbihnbCwgdmVydGV4U3JjLCBmcmFnbWVudFNyYylcbntcbiAgICB2YXIgZ2xWZXJ0U2hhZGVyID0gY29tcGlsZVNoYWRlcihnbCwgZ2wuVkVSVEVYX1NIQURFUiwgdmVydGV4U3JjKTtcbiAgICB2YXIgZ2xGcmFnU2hhZGVyID0gY29tcGlsZVNoYWRlcihnbCwgZ2wuRlJBR01FTlRfU0hBREVSLCBmcmFnbWVudFNyYyk7XG5cbiAgICB2YXIgcHJvZ3JhbSA9IGdsLmNyZWF0ZVByb2dyYW0oKTtcblxuICAgIGdsLmF0dGFjaFNoYWRlcihwcm9ncmFtLCBnbFZlcnRTaGFkZXIpO1xuICAgIGdsLmF0dGFjaFNoYWRlcihwcm9ncmFtLCBnbEZyYWdTaGFkZXIpO1xuICAgIGdsLmxpbmtQcm9ncmFtKHByb2dyYW0pO1xuXG4gICAgLy8gaWYgbGlua2luZyBmYWlscywgdGhlbiBsb2cgYW5kIGNsZWFudXBcbiAgICBpZiAoIWdsLmdldFByb2dyYW1QYXJhbWV0ZXIocHJvZ3JhbSwgZ2wuTElOS19TVEFUVVMpKVxuICAgIHtcbiAgICAgICAgY29uc29sZS5lcnJvcignUGl4aS5qcyBFcnJvcjogQ291bGQgbm90IGluaXRpYWxpemUgc2hhZGVyLicpO1xuICAgICAgICBjb25zb2xlLmVycm9yKCdnbC5WQUxJREFURV9TVEFUVVMnLCBnbC5nZXRQcm9ncmFtUGFyYW1ldGVyKHByb2dyYW0sIGdsLlZBTElEQVRFX1NUQVRVUykpO1xuICAgICAgICBjb25zb2xlLmVycm9yKCdnbC5nZXRFcnJvcigpJywgZ2wuZ2V0RXJyb3IoKSk7XG5cbiAgICAgICAgLy8gaWYgdGhlcmUgaXMgYSBwcm9ncmFtIGluZm8gbG9nLCBsb2cgaXRcbiAgICAgICAgaWYgKGdsLmdldFByb2dyYW1JbmZvTG9nKHByb2dyYW0pICE9PSAnJylcbiAgICAgICAge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKCdQaXhpLmpzIFdhcm5pbmc6IGdsLmdldFByb2dyYW1JbmZvTG9nKCknLCBnbC5nZXRQcm9ncmFtSW5mb0xvZyhwcm9ncmFtKSk7XG4gICAgICAgIH1cblxuICAgICAgICBnbC5kZWxldGVQcm9ncmFtKHByb2dyYW0pO1xuICAgICAgICBwcm9ncmFtID0gbnVsbDtcbiAgICB9XG5cbiAgICAvLyBjbGVhbiB1cCBzb21lIHNoYWRlcnNcbiAgICBnbC5kZWxldGVTaGFkZXIoZ2xWZXJ0U2hhZGVyKTtcbiAgICBnbC5kZWxldGVTaGFkZXIoZ2xGcmFnU2hhZGVyKTtcblxuICAgIHJldHVybiBwcm9ncmFtO1xufVxuXG52YXIgY29tcGlsZVNoYWRlciA9IGZ1bmN0aW9uIChnbCwgdHlwZSwgc3JjKVxue1xuICAgIHZhciBzaGFkZXIgPSBnbC5jcmVhdGVTaGFkZXIodHlwZSk7XG5cbiAgICBnbC5zaGFkZXJTb3VyY2Uoc2hhZGVyLCBzcmMpO1xuICAgIGdsLmNvbXBpbGVTaGFkZXIoc2hhZGVyKTtcblxuICAgIGlmICghZ2wuZ2V0U2hhZGVyUGFyYW1ldGVyKHNoYWRlciwgZ2wuQ09NUElMRV9TVEFUVVMpKVxuICAgIHtcbiAgICAgICAgY29uc29sZS5sb2coZ2wuZ2V0U2hhZGVySW5mb0xvZyhzaGFkZXIpKTtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgcmV0dXJuIHNoYWRlcjtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gY29tcGlsZVByb2dyYW07XG5cbiIsIlxuXG52YXIgZGVmYXVsdFZhbHVlID0gZnVuY3Rpb24odHlwZSwgc2l6ZSkgXG57XG4gICAgc3dpdGNoICh0eXBlKVxuICAgIHtcbiAgICAgICAgY2FzZSAnZmxvYXQnOlxuICAgICAgICAgICAgcmV0dXJuIDA7XG5cbiAgICAgICAgY2FzZSAndmVjMic6IFxuICAgICAgICAgICAgcmV0dXJuIG5ldyBGbG9hdDMyQXJyYXkoMiAqIHNpemUpO1xuXG4gICAgICAgIGNhc2UgJ3ZlYzMnOlxuICAgICAgICAgICAgcmV0dXJuIG5ldyBGbG9hdDMyQXJyYXkoMyAqIHNpemUpO1xuXG4gICAgICAgIGNhc2UgJ3ZlYzQnOiAgICAgXG4gICAgICAgICAgICByZXR1cm4gbmV3IEZsb2F0MzJBcnJheSg0ICogc2l6ZSk7XG4gICAgICAgICAgICBcbiAgICAgICAgY2FzZSAnaW50JzpcbiAgICAgICAgY2FzZSAnc2FtcGxlcjJEJzpcbiAgICAgICAgICAgIHJldHVybiAwO1xuXG4gICAgICAgIGNhc2UgJ2l2ZWMyJzogICBcbiAgICAgICAgICAgIHJldHVybiBuZXcgSW50MzJBcnJheSgyICogc2l6ZSk7XG5cbiAgICAgICAgY2FzZSAnaXZlYzMnOlxuICAgICAgICAgICAgcmV0dXJuIG5ldyBJbnQzMkFycmF5KDMgKiBzaXplKTtcblxuICAgICAgICBjYXNlICdpdmVjNCc6IFxuICAgICAgICAgICAgcmV0dXJuIG5ldyBJbnQzMkFycmF5KDQgKiBzaXplKTtcblxuICAgICAgICBjYXNlICdib29sJzogICAgIFxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuXG4gICAgICAgIGNhc2UgJ2J2ZWMyJzpcblxuICAgICAgICAgICAgcmV0dXJuIGJvb2xlYW5BcnJheSggMiAqIHNpemUpO1xuXG4gICAgICAgIGNhc2UgJ2J2ZWMzJzpcbiAgICAgICAgICAgIHJldHVybiBib29sZWFuQXJyYXkoMyAqIHNpemUpO1xuXG4gICAgICAgIGNhc2UgJ2J2ZWM0JzpcbiAgICAgICAgICAgIHJldHVybiBib29sZWFuQXJyYXkoNCAqIHNpemUpO1xuXG4gICAgICAgIGNhc2UgJ21hdDInOlxuICAgICAgICAgICAgcmV0dXJuIG5ldyBGbG9hdDMyQXJyYXkoWzEsIDBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwwLCAxXSk7XG5cbiAgICAgICAgY2FzZSAnbWF0Myc6IFxuICAgICAgICAgICAgcmV0dXJuIG5ldyBGbG9hdDMyQXJyYXkoWzEsIDAsIDBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwwLCAxLCAwXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsMCwgMCwgMV0pO1xuXG4gICAgICAgIGNhc2UgJ21hdDQnOlxuICAgICAgICAgICAgcmV0dXJuIG5ldyBGbG9hdDMyQXJyYXkoWzEsIDAsIDAsIDBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwwLCAxLCAwLCAwXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsMCwgMCwgMSwgMFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLDAsIDAsIDAsIDFdKTtcbiAgICB9XG59XG5cbnZhciBib29sZWFuQXJyYXkgPSBmdW5jdGlvbihzaXplKVxue1xuICAgIHZhciBhcnJheSA9IG5ldyBBcnJheShzaXplKTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXJyYXkubGVuZ3RoOyBpKyspIFxuICAgIHtcbiAgICAgICAgYXJyYXlbaV0gPSBmYWxzZTtcbiAgICB9O1xuXG4gICAgcmV0dXJuIGFycmF5O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGRlZmF1bHRWYWx1ZTtcbiIsIlxudmFyIG1hcFR5cGUgPSByZXF1aXJlKCcuL21hcFR5cGUnKTtcbnZhciBtYXBTaXplID0gcmVxdWlyZSgnLi9tYXBTaXplJyk7XG5cbnZhciBleHRyYWN0QXR0cmlidXRlcyA9IGZ1bmN0aW9uKGdsLCBwcm9ncmFtKVxue1xuICAgIHZhciBhdHRyaWJ1dGVzID0ge307XG5cbiAgICB2YXIgdG90YWxBdHRyaWJ1dGVzID0gZ2wuZ2V0UHJvZ3JhbVBhcmFtZXRlcihwcm9ncmFtLCBnbC5BQ1RJVkVfQVRUUklCVVRFUylcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdG90YWxBdHRyaWJ1dGVzOyBpKyspIFxuICAgIHtcbiAgICAgICAgdmFyIGF0dHJpYkRhdGEgPSBnbC5nZXRBY3RpdmVBdHRyaWIocHJvZ3JhbSwgaSk7XG4gICAgICAgIHZhciB0eXBlID0gbWFwVHlwZShnbCwgYXR0cmliRGF0YS50eXBlKTtcblxuICAgICAgICBhdHRyaWJ1dGVzW2F0dHJpYkRhdGEubmFtZV0gPSB7XG4gICAgICAgICAgICB0eXBlOnR5cGUsXG4gICAgICAgICAgICBzaXplOm1hcFNpemUodHlwZSksXG4gICAgICAgICAgICBsb2NhdGlvbjpnbC5nZXRBdHRyaWJMb2NhdGlvbihwcm9ncmFtLCBhdHRyaWJEYXRhLm5hbWUpLFxuICAgICAgICAgICAgLy9UT0RPIC0gbWFrZSBhbiBhdHRyaWJ1dGUgb2JqZWN0XG4gICAgICAgICAgICBwb2ludGVyOmZ1bmN0aW9uKHR5cGUsIG5vcm1hbGl6ZWQsIHN0cmlkZSwgc3RhcnQpe1xuXG4gICAgICAgICAgICAgLy8gICBjb25zb2xlLmxvZyh0aGlzLmxvY2F0aW9uKVxuICAgICAgICAgICAgICAgIGdsLnZlcnRleEF0dHJpYlBvaW50ZXIodGhpcy5sb2NhdGlvbix0aGlzLnNpemUsIHR5cGUgfHwgZ2wuRkxPQVQsIG5vcm1hbGl6ZWQgfHwgZmFsc2UsIHN0cmlkZSB8fCAwLCBzdGFydCB8fCAwKTsgXG5cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH07XG5cbiAgICByZXR1cm4gYXR0cmlidXRlczsgIFxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGV4dHJhY3RBdHRyaWJ1dGVzO1xuXG4iLCJ2YXIgbWFwVHlwZSA9IHJlcXVpcmUoJy4vbWFwVHlwZScpO1xudmFyIGRlZmF1bHRWYWx1ZSA9IHJlcXVpcmUoJy4vZGVmYXVsdFZhbHVlJyk7XG5cblxudmFyIGV4dHJhY3RVbmlmb3JtcyA9IGZ1bmN0aW9uKGdsLCBwcm9ncmFtKVxue1xuXHR2YXIgdW5pZm9ybXMgPSB7fTtcblx0XG4gICAgdmFyIHRvdGFsVW5pZm9ybXMgPSBnbC5nZXRQcm9ncmFtUGFyYW1ldGVyKHByb2dyYW0sIGdsLkFDVElWRV9VTklGT1JNUylcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdG90YWxVbmlmb3JtczsgaSsrKSBcbiAgICB7XG4gICAgXHR2YXIgdW5pZm9ybURhdGEgPSBnbC5nZXRBY3RpdmVVbmlmb3JtKHByb2dyYW0sIGkpO1xuICAgIFx0dmFyIG5hbWUgPSB1bmlmb3JtRGF0YS5uYW1lLnJlcGxhY2UoL1xcWy4qP1xcXS8sIFwiXCIpO1xuICAgICAgICB2YXIgdHlwZSA9IG1hcFR5cGUoZ2wsIHVuaWZvcm1EYXRhLnR5cGUgKTtcblxuICAgIFx0dW5pZm9ybXNbbmFtZV0gPSB7XG4gICAgXHRcdHR5cGU6dHlwZSxcbiAgICBcdFx0c2l6ZTp1bmlmb3JtRGF0YS5zaXplLFxuICAgIFx0XHRsb2NhdGlvbjpnbC5nZXRVbmlmb3JtTG9jYXRpb24ocHJvZ3JhbSwgbmFtZSksXG4gICAgXHRcdHZhbHVlOmRlZmF1bHRWYWx1ZSh0eXBlLCB1bmlmb3JtRGF0YS5zaXplKVxuICAgIFx0fVxuICAgIH07XG5cdFxuXHRyZXR1cm4gdW5pZm9ybXM7XHRcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBleHRyYWN0VW5pZm9ybXM7XG5cbiIsIlxudmFyIGdlbmVyYXRlVW5pZm9ybUFjY2Vzc09iamVjdCA9IGZ1bmN0aW9uKGdsLCB1bmlmb3JtRGF0YSlcbntcbiAgICAvLyB0aGlzIGlzIHRoZSBvYmplY3Qgd2Ugd2lsbCBiZSBzZW5kaW5nIGJhY2suXG4gICAgLy8gYW4gb2JqZWN0IGhpZXJhY2h5IHdpbGwgYmUgY3JlYXRlZCBmb3Igc3RydWN0c1xuICAgIHZhciB1bmlmb3JtcyA9IHtkYXRhOnt9fTtcblxuICAgIHVuaWZvcm1zLmdsID0gZ2w7XG4gICAgXG4gICAgdmFyIHVuaWZvcm1LZXlzPSBPYmplY3Qua2V5cyh1bmlmb3JtRGF0YSk7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHVuaWZvcm1LZXlzLmxlbmd0aDsgaSsrKSBcbiAgICB7XG4gICAgICAgIHZhciBmdWxsTmFtZSA9IHVuaWZvcm1LZXlzW2ldXG5cbiAgICAgICAgdmFyIG5hbWVUb2tlbnMgPSBmdWxsTmFtZS5zcGxpdCgnLicpO1xuICAgICAgICB2YXIgbmFtZSA9IG5hbWVUb2tlbnNbbmFtZVRva2Vucy5sZW5ndGggLSAxXTtcblxuICAgICAgICB2YXIgdW5pZm9ybUdyb3VwID0gZ2V0VW5pZm9ybUdyb3VwKG5hbWVUb2tlbnMsIHVuaWZvcm1zKTtcblxuICAgICAgICB2YXIgdW5pZm9ybSA9ICB1bmlmb3JtRGF0YVtmdWxsTmFtZV07XG4gICAgICAgIHVuaWZvcm1Hcm91cC5kYXRhW25hbWVdID0gdW5pZm9ybTtcblxuICAgICAgICB1bmlmb3JtR3JvdXAuZ2wgPSBnbDtcblxuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodW5pZm9ybUdyb3VwLCBuYW1lLCB7XG4gICAgICAgICAgICBnZXQ6IGdlbmVyYXRlR2V0dGVyKG5hbWUpLFxuICAgICAgICAgICAgc2V0OiBnZW5lcmF0ZVNldHRlcihuYW1lLCB1bmlmb3JtKVxuICAgICAgICB9KVxuICAgIH07XG5cbiAgICByZXR1cm4gdW5pZm9ybXM7XG59XG5cbnZhciBnZW5lcmF0ZUdldHRlciA9IGZ1bmN0aW9uKG5hbWUpXG57XG5cdHZhciB0ZW1wbGF0ZSA9IGdldHRlclRlbXBsYXRlLnJlcGxhY2UoJyUlJywgbmFtZSk7XG5cdHJldHVybiBuZXcgRnVuY3Rpb24odGVtcGxhdGUpO1xufVxuXG52YXIgZ2VuZXJhdGVTZXR0ZXIgPSBmdW5jdGlvbihuYW1lLCB1bmlmb3JtKVxue1xuICAgIHZhciB0ZW1wbGF0ZSA9IHNldHRlclRlbXBsYXRlLnJlcGxhY2UoLyUlL2csIG5hbWUpO1xuICAgIHZhciBzZXRUZW1wbGF0ZVxuICAgIFxuICAgIGlmKHVuaWZvcm0uc2l6ZSA9PT0gMSlcbiAgICB7XG4gICAgICAgIHNldFRlbXBsYXRlID0gR0xTTF9UT19TSU5HTEVfU0VUVEVSU1t1bmlmb3JtLnR5cGVdO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICBzZXRUZW1wbGF0ZSA9IEdMU0xfVE9fQVJSQVlfU0VUVEVSU1t1bmlmb3JtLnR5cGVdO1xuICAgIH1cblxuICAgIGlmKHNldFRlbXBsYXRlKVxuICAgIHtcbiAgICAgICAgdGVtcGxhdGUgKz0gXCJcXG50aGlzLmdsLlwiICsgc2V0VGVtcGxhdGUgKyBcIjtcIjtcbiAgICB9XG5cbiAgXHRyZXR1cm4gbmV3IEZ1bmN0aW9uKCd2YWx1ZScsIHRlbXBsYXRlKTtcbn1cblxudmFyIGdldFVuaWZvcm1Hcm91cCA9IGZ1bmN0aW9uKG5hbWVUb2tlbnMsIHVuaWZvcm0pXG57XG4gICAgdmFyIGN1ciA9IHVuaWZvcm07XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG5hbWVUb2tlbnMubGVuZ3RoIC0gMTsgaSsrKSBcbiAgICB7XG4gICAgICAgIHZhciBvID0gY3VyW25hbWVUb2tlbnNbaV1dIHx8IHtkYXRhOnt9fTtcbiAgICAgICAgY3VyW25hbWVUb2tlbnNbaV1dID0gbztcbiAgICAgICAgY3VyID0gbztcbiAgICB9O1xuXG4gICAgcmV0dXJuIGN1clxufVxuXG52YXIgZ2V0dGVyVGVtcGxhdGUgPSBbXG4gICAgJ3JldHVybiB0aGlzLmRhdGEuJSUudmFsdWU7Jyxcbl0uam9pbignXFxuJyk7XG5cbnZhciBzZXR0ZXJUZW1wbGF0ZSA9IFtcbiAgICAndGhpcy5kYXRhLiUlLnZhbHVlID0gdmFsdWU7JyxcbiAgICAndmFyIGxvY2F0aW9uID0gdGhpcy5kYXRhLiUlLmxvY2F0aW9uOydcbl0uam9pbignXFxuJyk7XG5cblxudmFyIEdMU0xfVE9fU0lOR0xFX1NFVFRFUlMgPSB7XG5cbiAgICAnZmxvYXQnOiAgICAndW5pZm9ybTFmKGxvY2F0aW9uLCB2YWx1ZSknLFxuXG4gICAgJ3ZlYzInOiAgICAgJ3VuaWZvcm0yZihsb2NhdGlvbiwgdmFsdWVbMF0sIHZhbHVlWzFdKScsXG4gICAgJ3ZlYzMnOiAgICAgJ3VuaWZvcm0zZihsb2NhdGlvbiwgdmFsdWVbMF0sIHZhbHVlWzFdLCB2YWx1ZVsyXSknLFxuICAgICd2ZWM0JzogICAgICd1bmlmb3JtNGYobG9jYXRpb24sIHZhbHVlWzBdLCB2YWx1ZVsxXSwgdmFsdWVbMl0sIHZhbHVlWzNdKScsXG4gICAgXHRcbiAgICAnaW50JzogICAgICAndW5pZm9ybTFpKGxvY2F0aW9uLCB2YWx1ZSknLFxuICAgICdpdmVjMic6ICAgICd1bmlmb3JtMmkobG9jYXRpb24sIHZhbHVlWzBdLCB2YWx1ZVsxXSknLFxuICAgICdpdmVjMyc6ICAgICd1bmlmb3JtM2kobG9jYXRpb24sIHZhbHVlWzBdLCB2YWx1ZVsxXSwgdmFsdWVbMl0pJyxcbiAgICAnaXZlYzQnOiAgICAndW5pZm9ybTRpKGxvY2F0aW9uLCB2YWx1ZVswXSwgdmFsdWVbMV0sIHZhbHVlWzJdLCB2YWx1ZVszXSknLFxuXG4gICAgJ2Jvb2wnOiAgICAgJ3VuaWZvcm0xaShsb2NhdGlvbiwgdmFsdWUpJyxcbiAgICAnYnZlYzInOiAgICAndW5pZm9ybTJpKGxvY2F0aW9uLCB2YWx1ZVswXSwgdmFsdWVbMV0pJyxcbiAgICAnYnZlYzMnOiAgICAndW5pZm9ybTNpKGxvY2F0aW9uLCB2YWx1ZVswXSwgdmFsdWVbMV0sIHZhbHVlWzJdKScsXG4gICAgJ2J2ZWM0JzogICAgJ3VuaWZvcm00aShsb2NhdGlvbiwgdmFsdWVbMF0sIHZhbHVlWzFdLCB2YWx1ZVsyXSwgdmFsdWVbM10pJyxcblxuICAgICdtYXQyJzogICAgICd1bmlmb3JtTWF0cml4MmZ2KGxvY2F0aW9uLCBmYWxzZSwgdmFsdWUpJyxcbiAgICAnbWF0Myc6ICAgICAndW5pZm9ybU1hdHJpeDNmdihsb2NhdGlvbiwgZmFsc2UsIHZhbHVlKScsXG4gICAgJ21hdDQnOiAgICAgJ3VuaWZvcm1NYXRyaXg0ZnYobG9jYXRpb24sIGZhbHNlLCB2YWx1ZSknLFxuXG4gICAgJ3NhbXBsZXIyRCc6J3VuaWZvcm0xaShsb2NhdGlvbiwgdmFsdWUpJ1xufVxuXG52YXIgR0xTTF9UT19BUlJBWV9TRVRURVJTID0ge1xuXG4gICAgJ2Zsb2F0JzogICAgJ3VuaWZvcm0xZnYobG9jYXRpb24sIHZhbHVlKScsXG5cbiAgICAndmVjMic6ICAgICAndW5pZm9ybTJmdihsb2NhdGlvbiwgdmFsdWUpJyxcbiAgICAndmVjMyc6ICAgICAndW5pZm9ybTNmdihsb2NhdGlvbiwgdmFsdWUpJyxcbiAgICAndmVjNCc6ICAgICAndW5pZm9ybTRmdihsb2NhdGlvbiwgdmFsdWUpJyxcbiAgICBcdFxuICAgICdpbnQnOiAgICAgICd1bmlmb3JtMWl2KGxvY2F0aW9uLCB2YWx1ZSknLFxuICAgICdpdmVjMic6ICAgICd1bmlmb3JtMml2KGxvY2F0aW9uLCB2YWx1ZSknLFxuICAgICdpdmVjMyc6ICAgICd1bmlmb3JtM2l2KGxvY2F0aW9uLCB2YWx1ZSknLFxuICAgICdpdmVjNCc6ICAgICd1bmlmb3JtNGl2KGxvY2F0aW9uLCB2YWx1ZSknLFxuXG4gICAgJ2Jvb2wnOiAgICAgJ3VuaWZvcm0xaXYobG9jYXRpb24sIHZhbHVlKScsXG4gICAgJ2J2ZWMyJzogICAgJ3VuaWZvcm0yaXYobG9jYXRpb24sIHZhbHVlKScsXG4gICAgJ2J2ZWMzJzogICAgJ3VuaWZvcm0zaXYobG9jYXRpb24sIHZhbHVlKScsXG4gICAgJ2J2ZWM0JzogICAgJ3VuaWZvcm00aXYobG9jYXRpb24sIHZhbHVlKScsXG4gICBcbiAgICAnc2FtcGxlcjJEJzondW5pZm9ybTFpdihsb2NhdGlvbiwgdmFsdWUpJ1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGdlbmVyYXRlVW5pZm9ybUFjY2Vzc09iamVjdDtcblxuIiwiXG5cbnZhciBtYXBTaXplID0gZnVuY3Rpb24odHlwZSkgXG57IFxuICAgIHJldHVybiBHTFNMX1RPX1NJWkVbdHlwZV07XG59XG5cblxudmFyIEdMU0xfVE9fU0laRSA9IHtcbiAgICAnZmxvYXQnOiAgICAxLFxuICAgICd2ZWMyJzogICAgIDIsXG4gICAgJ3ZlYzMnOiAgICAgMyxcbiAgICAndmVjNCc6ICAgICA0LFxuXG4gICAgJ2ludCc6ICAgICAgMSxcbiAgICAnaXZlYzInOiAgICAyLFxuICAgICdpdmVjMyc6ICAgIDMsXG4gICAgJ2l2ZWM0JzogICAgNCxcblxuICAgICdib29sJzogICAgIDEsXG4gICAgJ2J2ZWMyJzogICAgMixcbiAgICAnYnZlYzMnOiAgICAzLFxuICAgICdidmVjNCc6ICAgIDQsXG5cbiAgICAnbWF0Mic6ICAgICA0LFxuICAgICdtYXQzJzogICAgIDksXG4gICAgJ21hdDQnOiAgICAgMTYsXG5cbiAgICAnc2FtcGxlcjJEJzogIDFcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBtYXBTaXplO1xuIiwiXG5cbnZhciBtYXBTaXplID0gZnVuY3Rpb24oZ2wsIHR5cGUpIFxue1xuICAgIGlmKCFHTF9UQUJMRSkgXG4gICAge1xuICAgICAgICB2YXIgdHlwZU5hbWVzID0gT2JqZWN0LmtleXMoR0xfVE9fR0xTTF9UWVBFUyk7XG5cbiAgICAgICAgR0xfVEFCTEUgPSB7fTtcblxuICAgICAgICBmb3IodmFyIGkgPSAwOyBpIDwgdHlwZU5hbWVzLmxlbmd0aDsgKytpKSBcbiAgICAgICAge1xuICAgICAgICAgICAgdmFyIHRuID0gdHlwZU5hbWVzW2ldO1xuICAgICAgICAgICAgR0xfVEFCTEVbIGdsW3RuXSBdID0gR0xfVE9fR0xTTF9UWVBFU1t0bl07XG4gICAgICAgIH1cbiAgICB9XG5cbiAgcmV0dXJuIEdMX1RBQkxFW3R5cGVdO1xufVxuXG52YXIgR0xfVEFCTEUgPSBudWxsO1xuXG52YXIgR0xfVE9fR0xTTF9UWVBFUyA9IHtcbiAgJ0ZMT0FUJzogICAgICAgJ2Zsb2F0JyxcbiAgJ0ZMT0FUX1ZFQzInOiAgJ3ZlYzInLFxuICAnRkxPQVRfVkVDMyc6ICAndmVjMycsXG4gICdGTE9BVF9WRUM0JzogICd2ZWM0JyxcblxuICAnSU5UJzogICAgICAgICAnaW50JyxcbiAgJ0lOVF9WRUMyJzogICAgJ2l2ZWMyJyxcbiAgJ0lOVF9WRUMzJzogICAgJ2l2ZWMzJyxcbiAgJ0lOVF9WRUM0JzogICAgJ2l2ZWM0JyxcbiAgXG4gICdCT09MJzogICAgICAgICdib29sJyxcbiAgJ0JPT0xfVkVDMic6ICAgJ2J2ZWMyJyxcbiAgJ0JPT0xfVkVDMyc6ICAgJ2J2ZWMzJyxcbiAgJ0JPT0xfVkVDNCc6ICAgJ2J2ZWM0JyxcbiAgXG4gICdGTE9BVF9NQVQyJzogICdtYXQyJyxcbiAgJ0ZMT0FUX01BVDMnOiAgJ21hdDMnLFxuICAnRkxPQVRfTUFUNCc6ICAnbWF0NCcsXG4gIFxuICAnU0FNUExFUl8yRCc6ICAnc2FtcGxlcjJEJyAgXG59XG5cbm1vZHVsZS5leHBvcnRzID0gbWFwU2l6ZTtcbiIsIi8qIVxuICogYXN5bmNcbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS9jYW9sYW4vYXN5bmNcbiAqXG4gKiBDb3B5cmlnaHQgMjAxMC0yMDE0IENhb2xhbiBNY01haG9uXG4gKiBSZWxlYXNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2VcbiAqL1xuKGZ1bmN0aW9uICgpIHtcblxuICAgIHZhciBhc3luYyA9IHt9O1xuICAgIGZ1bmN0aW9uIG5vb3AoKSB7fVxuICAgIGZ1bmN0aW9uIGlkZW50aXR5KHYpIHtcbiAgICAgICAgcmV0dXJuIHY7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHRvQm9vbCh2KSB7XG4gICAgICAgIHJldHVybiAhIXY7XG4gICAgfVxuICAgIGZ1bmN0aW9uIG5vdElkKHYpIHtcbiAgICAgICAgcmV0dXJuICF2O1xuICAgIH1cblxuICAgIC8vIGdsb2JhbCBvbiB0aGUgc2VydmVyLCB3aW5kb3cgaW4gdGhlIGJyb3dzZXJcbiAgICB2YXIgcHJldmlvdXNfYXN5bmM7XG5cbiAgICAvLyBFc3RhYmxpc2ggdGhlIHJvb3Qgb2JqZWN0LCBgd2luZG93YCAoYHNlbGZgKSBpbiB0aGUgYnJvd3NlciwgYGdsb2JhbGBcbiAgICAvLyBvbiB0aGUgc2VydmVyLCBvciBgdGhpc2AgaW4gc29tZSB2aXJ0dWFsIG1hY2hpbmVzLiBXZSB1c2UgYHNlbGZgXG4gICAgLy8gaW5zdGVhZCBvZiBgd2luZG93YCBmb3IgYFdlYldvcmtlcmAgc3VwcG9ydC5cbiAgICB2YXIgcm9vdCA9IHR5cGVvZiBzZWxmID09PSAnb2JqZWN0JyAmJiBzZWxmLnNlbGYgPT09IHNlbGYgJiYgc2VsZiB8fFxuICAgICAgICAgICAgdHlwZW9mIGdsb2JhbCA9PT0gJ29iamVjdCcgJiYgZ2xvYmFsLmdsb2JhbCA9PT0gZ2xvYmFsICYmIGdsb2JhbCB8fFxuICAgICAgICAgICAgdGhpcztcblxuICAgIGlmIChyb290ICE9IG51bGwpIHtcbiAgICAgICAgcHJldmlvdXNfYXN5bmMgPSByb290LmFzeW5jO1xuICAgIH1cblxuICAgIGFzeW5jLm5vQ29uZmxpY3QgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJvb3QuYXN5bmMgPSBwcmV2aW91c19hc3luYztcbiAgICAgICAgcmV0dXJuIGFzeW5jO1xuICAgIH07XG5cbiAgICBmdW5jdGlvbiBvbmx5X29uY2UoZm4pIHtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgaWYgKGZuID09PSBudWxsKSB0aHJvdyBuZXcgRXJyb3IoXCJDYWxsYmFjayB3YXMgYWxyZWFkeSBjYWxsZWQuXCIpO1xuICAgICAgICAgICAgZm4uYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICAgICAgICAgIGZuID0gbnVsbDtcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBfb25jZShmbikge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICBpZiAoZm4gPT09IG51bGwpIHJldHVybjtcbiAgICAgICAgICAgIGZuLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgICAgICAgICBmbiA9IG51bGw7XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgLy8vLyBjcm9zcy1icm93c2VyIGNvbXBhdGlibGl0eSBmdW5jdGlvbnMgLy8vL1xuXG4gICAgdmFyIF90b1N0cmluZyA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7XG5cbiAgICB2YXIgX2lzQXJyYXkgPSBBcnJheS5pc0FycmF5IHx8IGZ1bmN0aW9uIChvYmopIHtcbiAgICAgICAgcmV0dXJuIF90b1N0cmluZy5jYWxsKG9iaikgPT09ICdbb2JqZWN0IEFycmF5XSc7XG4gICAgfTtcblxuICAgIC8vIFBvcnRlZCBmcm9tIHVuZGVyc2NvcmUuanMgaXNPYmplY3RcbiAgICB2YXIgX2lzT2JqZWN0ID0gZnVuY3Rpb24ob2JqKSB7XG4gICAgICAgIHZhciB0eXBlID0gdHlwZW9mIG9iajtcbiAgICAgICAgcmV0dXJuIHR5cGUgPT09ICdmdW5jdGlvbicgfHwgdHlwZSA9PT0gJ29iamVjdCcgJiYgISFvYmo7XG4gICAgfTtcblxuICAgIGZ1bmN0aW9uIF9pc0FycmF5TGlrZShhcnIpIHtcbiAgICAgICAgcmV0dXJuIF9pc0FycmF5KGFycikgfHwgKFxuICAgICAgICAgICAgLy8gaGFzIGEgcG9zaXRpdmUgaW50ZWdlciBsZW5ndGggcHJvcGVydHlcbiAgICAgICAgICAgIHR5cGVvZiBhcnIubGVuZ3RoID09PSBcIm51bWJlclwiICYmXG4gICAgICAgICAgICBhcnIubGVuZ3RoID49IDAgJiZcbiAgICAgICAgICAgIGFyci5sZW5ndGggJSAxID09PSAwXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gX2FycmF5RWFjaChhcnIsIGl0ZXJhdG9yKSB7XG4gICAgICAgIHZhciBpbmRleCA9IC0xLFxuICAgICAgICAgICAgbGVuZ3RoID0gYXJyLmxlbmd0aDtcblxuICAgICAgICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgICAgICAgICAgaXRlcmF0b3IoYXJyW2luZGV4XSwgaW5kZXgsIGFycik7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBfbWFwKGFyciwgaXRlcmF0b3IpIHtcbiAgICAgICAgdmFyIGluZGV4ID0gLTEsXG4gICAgICAgICAgICBsZW5ndGggPSBhcnIubGVuZ3RoLFxuICAgICAgICAgICAgcmVzdWx0ID0gQXJyYXkobGVuZ3RoKTtcblxuICAgICAgICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgICAgICAgICAgcmVzdWx0W2luZGV4XSA9IGl0ZXJhdG9yKGFycltpbmRleF0sIGluZGV4LCBhcnIpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gX3JhbmdlKGNvdW50KSB7XG4gICAgICAgIHJldHVybiBfbWFwKEFycmF5KGNvdW50KSwgZnVuY3Rpb24gKHYsIGkpIHsgcmV0dXJuIGk7IH0pO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIF9yZWR1Y2UoYXJyLCBpdGVyYXRvciwgbWVtbykge1xuICAgICAgICBfYXJyYXlFYWNoKGFyciwgZnVuY3Rpb24gKHgsIGksIGEpIHtcbiAgICAgICAgICAgIG1lbW8gPSBpdGVyYXRvcihtZW1vLCB4LCBpLCBhKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBtZW1vO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIF9mb3JFYWNoT2Yob2JqZWN0LCBpdGVyYXRvcikge1xuICAgICAgICBfYXJyYXlFYWNoKF9rZXlzKG9iamVjdCksIGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgICAgIGl0ZXJhdG9yKG9iamVjdFtrZXldLCBrZXkpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBfaW5kZXhPZihhcnIsIGl0ZW0pIHtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcnIubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGlmIChhcnJbaV0gPT09IGl0ZW0pIHJldHVybiBpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiAtMTtcbiAgICB9XG5cbiAgICB2YXIgX2tleXMgPSBPYmplY3Qua2V5cyB8fCBmdW5jdGlvbiAob2JqKSB7XG4gICAgICAgIHZhciBrZXlzID0gW107XG4gICAgICAgIGZvciAodmFyIGsgaW4gb2JqKSB7XG4gICAgICAgICAgICBpZiAob2JqLmhhc093blByb3BlcnR5KGspKSB7XG4gICAgICAgICAgICAgICAga2V5cy5wdXNoKGspO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBrZXlzO1xuICAgIH07XG5cbiAgICBmdW5jdGlvbiBfa2V5SXRlcmF0b3IoY29sbCkge1xuICAgICAgICB2YXIgaSA9IC0xO1xuICAgICAgICB2YXIgbGVuO1xuICAgICAgICB2YXIga2V5cztcbiAgICAgICAgaWYgKF9pc0FycmF5TGlrZShjb2xsKSkge1xuICAgICAgICAgICAgbGVuID0gY29sbC5sZW5ndGg7XG4gICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24gbmV4dCgpIHtcbiAgICAgICAgICAgICAgICBpKys7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGkgPCBsZW4gPyBpIDogbnVsbDtcbiAgICAgICAgICAgIH07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBrZXlzID0gX2tleXMoY29sbCk7XG4gICAgICAgICAgICBsZW4gPSBrZXlzLmxlbmd0aDtcbiAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbiBuZXh0KCkge1xuICAgICAgICAgICAgICAgIGkrKztcbiAgICAgICAgICAgICAgICByZXR1cm4gaSA8IGxlbiA/IGtleXNbaV0gOiBudWxsO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIFNpbWlsYXIgdG8gRVM2J3MgcmVzdCBwYXJhbSAoaHR0cDovL2FyaXlhLm9maWxhYnMuY29tLzIwMTMvMDMvZXM2LWFuZC1yZXN0LXBhcmFtZXRlci5odG1sKVxuICAgIC8vIFRoaXMgYWNjdW11bGF0ZXMgdGhlIGFyZ3VtZW50cyBwYXNzZWQgaW50byBhbiBhcnJheSwgYWZ0ZXIgYSBnaXZlbiBpbmRleC5cbiAgICAvLyBGcm9tIHVuZGVyc2NvcmUuanMgKGh0dHBzOi8vZ2l0aHViLmNvbS9qYXNoa2VuYXMvdW5kZXJzY29yZS9wdWxsLzIxNDApLlxuICAgIGZ1bmN0aW9uIF9yZXN0UGFyYW0oZnVuYywgc3RhcnRJbmRleCkge1xuICAgICAgICBzdGFydEluZGV4ID0gc3RhcnRJbmRleCA9PSBudWxsID8gZnVuYy5sZW5ndGggLSAxIDogK3N0YXJ0SW5kZXg7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIHZhciBsZW5ndGggPSBNYXRoLm1heChhcmd1bWVudHMubGVuZ3RoIC0gc3RhcnRJbmRleCwgMCk7XG4gICAgICAgICAgICB2YXIgcmVzdCA9IEFycmF5KGxlbmd0aCk7XG4gICAgICAgICAgICBmb3IgKHZhciBpbmRleCA9IDA7IGluZGV4IDwgbGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgICAgICAgICAgICAgcmVzdFtpbmRleF0gPSBhcmd1bWVudHNbaW5kZXggKyBzdGFydEluZGV4XTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHN3aXRjaCAoc3RhcnRJbmRleCkge1xuICAgICAgICAgICAgICAgIGNhc2UgMDogcmV0dXJuIGZ1bmMuY2FsbCh0aGlzLCByZXN0KTtcbiAgICAgICAgICAgICAgICBjYXNlIDE6IHJldHVybiBmdW5jLmNhbGwodGhpcywgYXJndW1lbnRzWzBdLCByZXN0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIEN1cnJlbnRseSB1bnVzZWQgYnV0IGhhbmRsZSBjYXNlcyBvdXRzaWRlIG9mIHRoZSBzd2l0Y2ggc3RhdGVtZW50OlxuICAgICAgICAgICAgLy8gdmFyIGFyZ3MgPSBBcnJheShzdGFydEluZGV4ICsgMSk7XG4gICAgICAgICAgICAvLyBmb3IgKGluZGV4ID0gMDsgaW5kZXggPCBzdGFydEluZGV4OyBpbmRleCsrKSB7XG4gICAgICAgICAgICAvLyAgICAgYXJnc1tpbmRleF0gPSBhcmd1bWVudHNbaW5kZXhdO1xuICAgICAgICAgICAgLy8gfVxuICAgICAgICAgICAgLy8gYXJnc1tzdGFydEluZGV4XSA9IHJlc3Q7XG4gICAgICAgICAgICAvLyByZXR1cm4gZnVuYy5hcHBseSh0aGlzLCBhcmdzKTtcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBfd2l0aG91dEluZGV4KGl0ZXJhdG9yKSB7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAodmFsdWUsIGluZGV4LCBjYWxsYmFjaykge1xuICAgICAgICAgICAgcmV0dXJuIGl0ZXJhdG9yKHZhbHVlLCBjYWxsYmFjayk7XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgLy8vLyBleHBvcnRlZCBhc3luYyBtb2R1bGUgZnVuY3Rpb25zIC8vLy9cblxuICAgIC8vLy8gbmV4dFRpY2sgaW1wbGVtZW50YXRpb24gd2l0aCBicm93c2VyLWNvbXBhdGlibGUgZmFsbGJhY2sgLy8vL1xuXG4gICAgLy8gY2FwdHVyZSB0aGUgZ2xvYmFsIHJlZmVyZW5jZSB0byBndWFyZCBhZ2FpbnN0IGZha2VUaW1lciBtb2Nrc1xuICAgIHZhciBfc2V0SW1tZWRpYXRlID0gdHlwZW9mIHNldEltbWVkaWF0ZSA9PT0gJ2Z1bmN0aW9uJyAmJiBzZXRJbW1lZGlhdGU7XG5cbiAgICB2YXIgX2RlbGF5ID0gX3NldEltbWVkaWF0ZSA/IGZ1bmN0aW9uKGZuKSB7XG4gICAgICAgIC8vIG5vdCBhIGRpcmVjdCBhbGlhcyBmb3IgSUUxMCBjb21wYXRpYmlsaXR5XG4gICAgICAgIF9zZXRJbW1lZGlhdGUoZm4pO1xuICAgIH0gOiBmdW5jdGlvbihmbikge1xuICAgICAgICBzZXRUaW1lb3V0KGZuLCAwKTtcbiAgICB9O1xuXG4gICAgaWYgKHR5cGVvZiBwcm9jZXNzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgcHJvY2Vzcy5uZXh0VGljayA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBhc3luYy5uZXh0VGljayA9IHByb2Nlc3MubmV4dFRpY2s7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgYXN5bmMubmV4dFRpY2sgPSBfZGVsYXk7XG4gICAgfVxuICAgIGFzeW5jLnNldEltbWVkaWF0ZSA9IF9zZXRJbW1lZGlhdGUgPyBfZGVsYXkgOiBhc3luYy5uZXh0VGljaztcblxuXG4gICAgYXN5bmMuZm9yRWFjaCA9XG4gICAgYXN5bmMuZWFjaCA9IGZ1bmN0aW9uIChhcnIsIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICByZXR1cm4gYXN5bmMuZWFjaE9mKGFyciwgX3dpdGhvdXRJbmRleChpdGVyYXRvciksIGNhbGxiYWNrKTtcbiAgICB9O1xuXG4gICAgYXN5bmMuZm9yRWFjaFNlcmllcyA9XG4gICAgYXN5bmMuZWFjaFNlcmllcyA9IGZ1bmN0aW9uIChhcnIsIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICByZXR1cm4gYXN5bmMuZWFjaE9mU2VyaWVzKGFyciwgX3dpdGhvdXRJbmRleChpdGVyYXRvciksIGNhbGxiYWNrKTtcbiAgICB9O1xuXG5cbiAgICBhc3luYy5mb3JFYWNoTGltaXQgPVxuICAgIGFzeW5jLmVhY2hMaW1pdCA9IGZ1bmN0aW9uIChhcnIsIGxpbWl0LCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgcmV0dXJuIF9lYWNoT2ZMaW1pdChsaW1pdCkoYXJyLCBfd2l0aG91dEluZGV4KGl0ZXJhdG9yKSwgY2FsbGJhY2spO1xuICAgIH07XG5cbiAgICBhc3luYy5mb3JFYWNoT2YgPVxuICAgIGFzeW5jLmVhY2hPZiA9IGZ1bmN0aW9uIChvYmplY3QsIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICBjYWxsYmFjayA9IF9vbmNlKGNhbGxiYWNrIHx8IG5vb3ApO1xuICAgICAgICBvYmplY3QgPSBvYmplY3QgfHwgW107XG5cbiAgICAgICAgdmFyIGl0ZXIgPSBfa2V5SXRlcmF0b3Iob2JqZWN0KTtcbiAgICAgICAgdmFyIGtleSwgY29tcGxldGVkID0gMDtcblxuICAgICAgICB3aGlsZSAoKGtleSA9IGl0ZXIoKSkgIT0gbnVsbCkge1xuICAgICAgICAgICAgY29tcGxldGVkICs9IDE7XG4gICAgICAgICAgICBpdGVyYXRvcihvYmplY3Rba2V5XSwga2V5LCBvbmx5X29uY2UoZG9uZSkpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGNvbXBsZXRlZCA9PT0gMCkgY2FsbGJhY2sobnVsbCk7XG5cbiAgICAgICAgZnVuY3Rpb24gZG9uZShlcnIpIHtcbiAgICAgICAgICAgIGNvbXBsZXRlZC0tO1xuICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBDaGVjayBrZXkgaXMgbnVsbCBpbiBjYXNlIGl0ZXJhdG9yIGlzbid0IGV4aGF1c3RlZFxuICAgICAgICAgICAgLy8gYW5kIGRvbmUgcmVzb2x2ZWQgc3luY2hyb25vdXNseS5cbiAgICAgICAgICAgIGVsc2UgaWYgKGtleSA9PT0gbnVsbCAmJiBjb21wbGV0ZWQgPD0gMCkge1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrKG51bGwpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfTtcblxuICAgIGFzeW5jLmZvckVhY2hPZlNlcmllcyA9XG4gICAgYXN5bmMuZWFjaE9mU2VyaWVzID0gZnVuY3Rpb24gKG9iaiwgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgIGNhbGxiYWNrID0gX29uY2UoY2FsbGJhY2sgfHwgbm9vcCk7XG4gICAgICAgIG9iaiA9IG9iaiB8fCBbXTtcbiAgICAgICAgdmFyIG5leHRLZXkgPSBfa2V5SXRlcmF0b3Iob2JqKTtcbiAgICAgICAgdmFyIGtleSA9IG5leHRLZXkoKTtcbiAgICAgICAgZnVuY3Rpb24gaXRlcmF0ZSgpIHtcbiAgICAgICAgICAgIHZhciBzeW5jID0gdHJ1ZTtcbiAgICAgICAgICAgIGlmIChrZXkgPT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gY2FsbGJhY2sobnVsbCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpdGVyYXRvcihvYmpba2V5XSwga2V5LCBvbmx5X29uY2UoZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGtleSA9IG5leHRLZXkoKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGtleSA9PT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKG51bGwpO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN5bmMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhc3luYy5zZXRJbW1lZGlhdGUoaXRlcmF0ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZXJhdGUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgIHN5bmMgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBpdGVyYXRlKCk7XG4gICAgfTtcblxuXG5cbiAgICBhc3luYy5mb3JFYWNoT2ZMaW1pdCA9XG4gICAgYXN5bmMuZWFjaE9mTGltaXQgPSBmdW5jdGlvbiAob2JqLCBsaW1pdCwgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgIF9lYWNoT2ZMaW1pdChsaW1pdCkob2JqLCBpdGVyYXRvciwgY2FsbGJhY2spO1xuICAgIH07XG5cbiAgICBmdW5jdGlvbiBfZWFjaE9mTGltaXQobGltaXQpIHtcblxuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKG9iaiwgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICBjYWxsYmFjayA9IF9vbmNlKGNhbGxiYWNrIHx8IG5vb3ApO1xuICAgICAgICAgICAgb2JqID0gb2JqIHx8IFtdO1xuICAgICAgICAgICAgdmFyIG5leHRLZXkgPSBfa2V5SXRlcmF0b3Iob2JqKTtcbiAgICAgICAgICAgIGlmIChsaW1pdCA8PSAwKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKG51bGwpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdmFyIGRvbmUgPSBmYWxzZTtcbiAgICAgICAgICAgIHZhciBydW5uaW5nID0gMDtcbiAgICAgICAgICAgIHZhciBlcnJvcmVkID0gZmFsc2U7XG5cbiAgICAgICAgICAgIChmdW5jdGlvbiByZXBsZW5pc2ggKCkge1xuICAgICAgICAgICAgICAgIGlmIChkb25lICYmIHJ1bm5pbmcgPD0gMCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gY2FsbGJhY2sobnVsbCk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgd2hpbGUgKHJ1bm5pbmcgPCBsaW1pdCAmJiAhZXJyb3JlZCkge1xuICAgICAgICAgICAgICAgICAgICB2YXIga2V5ID0gbmV4dEtleSgpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoa2V5ID09PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBkb25lID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChydW5uaW5nIDw9IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhudWxsKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBydW5uaW5nICs9IDE7XG4gICAgICAgICAgICAgICAgICAgIGl0ZXJhdG9yKG9ialtrZXldLCBrZXksIG9ubHlfb25jZShmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBydW5uaW5nIC09IDE7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvcmVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcGxlbmlzaCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSkoKTtcbiAgICAgICAgfTtcbiAgICB9XG5cblxuICAgIGZ1bmN0aW9uIGRvUGFyYWxsZWwoZm4pIHtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChvYmosIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICAgICAgcmV0dXJuIGZuKGFzeW5jLmVhY2hPZiwgb2JqLCBpdGVyYXRvciwgY2FsbGJhY2spO1xuICAgICAgICB9O1xuICAgIH1cbiAgICBmdW5jdGlvbiBkb1BhcmFsbGVsTGltaXQoZm4pIHtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChvYmosIGxpbWl0LCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIHJldHVybiBmbihfZWFjaE9mTGltaXQobGltaXQpLCBvYmosIGl0ZXJhdG9yLCBjYWxsYmFjayk7XG4gICAgICAgIH07XG4gICAgfVxuICAgIGZ1bmN0aW9uIGRvU2VyaWVzKGZuKSB7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAob2JqLCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIHJldHVybiBmbihhc3luYy5lYWNoT2ZTZXJpZXMsIG9iaiwgaXRlcmF0b3IsIGNhbGxiYWNrKTtcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBfYXN5bmNNYXAoZWFjaGZuLCBhcnIsIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICBjYWxsYmFjayA9IF9vbmNlKGNhbGxiYWNrIHx8IG5vb3ApO1xuICAgICAgICBhcnIgPSBhcnIgfHwgW107XG4gICAgICAgIHZhciByZXN1bHRzID0gX2lzQXJyYXlMaWtlKGFycikgPyBbXSA6IHt9O1xuICAgICAgICBlYWNoZm4oYXJyLCBmdW5jdGlvbiAodmFsdWUsIGluZGV4LCBjYWxsYmFjaykge1xuICAgICAgICAgICAgaXRlcmF0b3IodmFsdWUsIGZ1bmN0aW9uIChlcnIsIHYpIHtcbiAgICAgICAgICAgICAgICByZXN1bHRzW2luZGV4XSA9IHY7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICBjYWxsYmFjayhlcnIsIHJlc3VsdHMpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBhc3luYy5tYXAgPSBkb1BhcmFsbGVsKF9hc3luY01hcCk7XG4gICAgYXN5bmMubWFwU2VyaWVzID0gZG9TZXJpZXMoX2FzeW5jTWFwKTtcbiAgICBhc3luYy5tYXBMaW1pdCA9IGRvUGFyYWxsZWxMaW1pdChfYXN5bmNNYXApO1xuXG4gICAgLy8gcmVkdWNlIG9ubHkgaGFzIGEgc2VyaWVzIHZlcnNpb24sIGFzIGRvaW5nIHJlZHVjZSBpbiBwYXJhbGxlbCB3b24ndFxuICAgIC8vIHdvcmsgaW4gbWFueSBzaXR1YXRpb25zLlxuICAgIGFzeW5jLmluamVjdCA9XG4gICAgYXN5bmMuZm9sZGwgPVxuICAgIGFzeW5jLnJlZHVjZSA9IGZ1bmN0aW9uIChhcnIsIG1lbW8sIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICBhc3luYy5lYWNoT2ZTZXJpZXMoYXJyLCBmdW5jdGlvbiAoeCwgaSwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIGl0ZXJhdG9yKG1lbW8sIHgsIGZ1bmN0aW9uIChlcnIsIHYpIHtcbiAgICAgICAgICAgICAgICBtZW1vID0gdjtcbiAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgIGNhbGxiYWNrKGVyciwgbWVtbyk7XG4gICAgICAgIH0pO1xuICAgIH07XG5cbiAgICBhc3luYy5mb2xkciA9XG4gICAgYXN5bmMucmVkdWNlUmlnaHQgPSBmdW5jdGlvbiAoYXJyLCBtZW1vLCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgdmFyIHJldmVyc2VkID0gX21hcChhcnIsIGlkZW50aXR5KS5yZXZlcnNlKCk7XG4gICAgICAgIGFzeW5jLnJlZHVjZShyZXZlcnNlZCwgbWVtbywgaXRlcmF0b3IsIGNhbGxiYWNrKTtcbiAgICB9O1xuXG4gICAgYXN5bmMudHJhbnNmb3JtID0gZnVuY3Rpb24gKGFyciwgbWVtbywgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAzKSB7XG4gICAgICAgICAgICBjYWxsYmFjayA9IGl0ZXJhdG9yO1xuICAgICAgICAgICAgaXRlcmF0b3IgPSBtZW1vO1xuICAgICAgICAgICAgbWVtbyA9IF9pc0FycmF5KGFycikgPyBbXSA6IHt9O1xuICAgICAgICB9XG5cbiAgICAgICAgYXN5bmMuZWFjaE9mKGFyciwgZnVuY3Rpb24odiwgaywgY2IpIHtcbiAgICAgICAgICAgIGl0ZXJhdG9yKG1lbW8sIHYsIGssIGNiKTtcbiAgICAgICAgfSwgZnVuY3Rpb24oZXJyKSB7XG4gICAgICAgICAgICBjYWxsYmFjayhlcnIsIG1lbW8pO1xuICAgICAgICB9KTtcbiAgICB9O1xuXG4gICAgZnVuY3Rpb24gX2ZpbHRlcihlYWNoZm4sIGFyciwgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgIHZhciByZXN1bHRzID0gW107XG4gICAgICAgIGVhY2hmbihhcnIsIGZ1bmN0aW9uICh4LCBpbmRleCwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIGl0ZXJhdG9yKHgsIGZ1bmN0aW9uICh2KSB7XG4gICAgICAgICAgICAgICAgaWYgKHYpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0cy5wdXNoKHtpbmRleDogaW5kZXgsIHZhbHVlOiB4fSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhbGxiYWNrKCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgY2FsbGJhY2soX21hcChyZXN1bHRzLnNvcnQoZnVuY3Rpb24gKGEsIGIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gYS5pbmRleCAtIGIuaW5kZXg7XG4gICAgICAgICAgICB9KSwgZnVuY3Rpb24gKHgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4geC52YWx1ZTtcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgYXN5bmMuc2VsZWN0ID1cbiAgICBhc3luYy5maWx0ZXIgPSBkb1BhcmFsbGVsKF9maWx0ZXIpO1xuXG4gICAgYXN5bmMuc2VsZWN0TGltaXQgPVxuICAgIGFzeW5jLmZpbHRlckxpbWl0ID0gZG9QYXJhbGxlbExpbWl0KF9maWx0ZXIpO1xuXG4gICAgYXN5bmMuc2VsZWN0U2VyaWVzID1cbiAgICBhc3luYy5maWx0ZXJTZXJpZXMgPSBkb1NlcmllcyhfZmlsdGVyKTtcblxuICAgIGZ1bmN0aW9uIF9yZWplY3QoZWFjaGZuLCBhcnIsIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICBfZmlsdGVyKGVhY2hmbiwgYXJyLCBmdW5jdGlvbih2YWx1ZSwgY2IpIHtcbiAgICAgICAgICAgIGl0ZXJhdG9yKHZhbHVlLCBmdW5jdGlvbih2KSB7XG4gICAgICAgICAgICAgICAgY2IoIXYpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sIGNhbGxiYWNrKTtcbiAgICB9XG4gICAgYXN5bmMucmVqZWN0ID0gZG9QYXJhbGxlbChfcmVqZWN0KTtcbiAgICBhc3luYy5yZWplY3RMaW1pdCA9IGRvUGFyYWxsZWxMaW1pdChfcmVqZWN0KTtcbiAgICBhc3luYy5yZWplY3RTZXJpZXMgPSBkb1NlcmllcyhfcmVqZWN0KTtcblxuICAgIGZ1bmN0aW9uIF9jcmVhdGVUZXN0ZXIoZWFjaGZuLCBjaGVjaywgZ2V0UmVzdWx0KSB7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbihhcnIsIGxpbWl0LCBpdGVyYXRvciwgY2IpIHtcbiAgICAgICAgICAgIGZ1bmN0aW9uIGRvbmUoKSB7XG4gICAgICAgICAgICAgICAgaWYgKGNiKSBjYihnZXRSZXN1bHQoZmFsc2UsIHZvaWQgMCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZnVuY3Rpb24gaXRlcmF0ZWUoeCwgXywgY2FsbGJhY2spIHtcbiAgICAgICAgICAgICAgICBpZiAoIWNiKSByZXR1cm4gY2FsbGJhY2soKTtcbiAgICAgICAgICAgICAgICBpdGVyYXRvcih4LCBmdW5jdGlvbiAodikge1xuICAgICAgICAgICAgICAgICAgICBpZiAoY2IgJiYgY2hlY2sodikpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNiKGdldFJlc3VsdCh0cnVlLCB4KSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBjYiA9IGl0ZXJhdG9yID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID4gMykge1xuICAgICAgICAgICAgICAgIGVhY2hmbihhcnIsIGxpbWl0LCBpdGVyYXRlZSwgZG9uZSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGNiID0gaXRlcmF0b3I7XG4gICAgICAgICAgICAgICAgaXRlcmF0b3IgPSBsaW1pdDtcbiAgICAgICAgICAgICAgICBlYWNoZm4oYXJyLCBpdGVyYXRlZSwgZG9uZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgYXN5bmMuYW55ID1cbiAgICBhc3luYy5zb21lID0gX2NyZWF0ZVRlc3Rlcihhc3luYy5lYWNoT2YsIHRvQm9vbCwgaWRlbnRpdHkpO1xuXG4gICAgYXN5bmMuc29tZUxpbWl0ID0gX2NyZWF0ZVRlc3Rlcihhc3luYy5lYWNoT2ZMaW1pdCwgdG9Cb29sLCBpZGVudGl0eSk7XG5cbiAgICBhc3luYy5hbGwgPVxuICAgIGFzeW5jLmV2ZXJ5ID0gX2NyZWF0ZVRlc3Rlcihhc3luYy5lYWNoT2YsIG5vdElkLCBub3RJZCk7XG5cbiAgICBhc3luYy5ldmVyeUxpbWl0ID0gX2NyZWF0ZVRlc3Rlcihhc3luYy5lYWNoT2ZMaW1pdCwgbm90SWQsIG5vdElkKTtcblxuICAgIGZ1bmN0aW9uIF9maW5kR2V0UmVzdWx0KHYsIHgpIHtcbiAgICAgICAgcmV0dXJuIHg7XG4gICAgfVxuICAgIGFzeW5jLmRldGVjdCA9IF9jcmVhdGVUZXN0ZXIoYXN5bmMuZWFjaE9mLCBpZGVudGl0eSwgX2ZpbmRHZXRSZXN1bHQpO1xuICAgIGFzeW5jLmRldGVjdFNlcmllcyA9IF9jcmVhdGVUZXN0ZXIoYXN5bmMuZWFjaE9mU2VyaWVzLCBpZGVudGl0eSwgX2ZpbmRHZXRSZXN1bHQpO1xuICAgIGFzeW5jLmRldGVjdExpbWl0ID0gX2NyZWF0ZVRlc3Rlcihhc3luYy5lYWNoT2ZMaW1pdCwgaWRlbnRpdHksIF9maW5kR2V0UmVzdWx0KTtcblxuICAgIGFzeW5jLnNvcnRCeSA9IGZ1bmN0aW9uIChhcnIsIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICBhc3luYy5tYXAoYXJyLCBmdW5jdGlvbiAoeCwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIGl0ZXJhdG9yKHgsIGZ1bmN0aW9uIChlcnIsIGNyaXRlcmlhKSB7XG4gICAgICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2sobnVsbCwge3ZhbHVlOiB4LCBjcml0ZXJpYTogY3JpdGVyaWF9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSwgZnVuY3Rpb24gKGVyciwgcmVzdWx0cykge1xuICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAgIHJldHVybiBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2sobnVsbCwgX21hcChyZXN1bHRzLnNvcnQoY29tcGFyYXRvciksIGZ1bmN0aW9uICh4KSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB4LnZhbHVlO1xuICAgICAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICB9KTtcblxuICAgICAgICBmdW5jdGlvbiBjb21wYXJhdG9yKGxlZnQsIHJpZ2h0KSB7XG4gICAgICAgICAgICB2YXIgYSA9IGxlZnQuY3JpdGVyaWEsIGIgPSByaWdodC5jcml0ZXJpYTtcbiAgICAgICAgICAgIHJldHVybiBhIDwgYiA/IC0xIDogYSA+IGIgPyAxIDogMDtcbiAgICAgICAgfVxuICAgIH07XG5cbiAgICBhc3luYy5hdXRvID0gZnVuY3Rpb24gKHRhc2tzLCBjb25jdXJyZW5jeSwgY2FsbGJhY2spIHtcbiAgICAgICAgaWYgKCFjYWxsYmFjaykge1xuICAgICAgICAgICAgLy8gY29uY3VycmVuY3kgaXMgb3B0aW9uYWwsIHNoaWZ0IHRoZSBhcmdzLlxuICAgICAgICAgICAgY2FsbGJhY2sgPSBjb25jdXJyZW5jeTtcbiAgICAgICAgICAgIGNvbmN1cnJlbmN5ID0gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBjYWxsYmFjayA9IF9vbmNlKGNhbGxiYWNrIHx8IG5vb3ApO1xuICAgICAgICB2YXIga2V5cyA9IF9rZXlzKHRhc2tzKTtcbiAgICAgICAgdmFyIHJlbWFpbmluZ1Rhc2tzID0ga2V5cy5sZW5ndGg7XG4gICAgICAgIGlmICghcmVtYWluaW5nVGFza3MpIHtcbiAgICAgICAgICAgIHJldHVybiBjYWxsYmFjayhudWxsKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWNvbmN1cnJlbmN5KSB7XG4gICAgICAgICAgICBjb25jdXJyZW5jeSA9IHJlbWFpbmluZ1Rhc2tzO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIHJlc3VsdHMgPSB7fTtcbiAgICAgICAgdmFyIHJ1bm5pbmdUYXNrcyA9IDA7XG5cbiAgICAgICAgdmFyIGxpc3RlbmVycyA9IFtdO1xuICAgICAgICBmdW5jdGlvbiBhZGRMaXN0ZW5lcihmbikge1xuICAgICAgICAgICAgbGlzdGVuZXJzLnVuc2hpZnQoZm4pO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIHJlbW92ZUxpc3RlbmVyKGZuKSB7XG4gICAgICAgICAgICB2YXIgaWR4ID0gX2luZGV4T2YobGlzdGVuZXJzLCBmbik7XG4gICAgICAgICAgICBpZiAoaWR4ID49IDApIGxpc3RlbmVycy5zcGxpY2UoaWR4LCAxKTtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiB0YXNrQ29tcGxldGUoKSB7XG4gICAgICAgICAgICByZW1haW5pbmdUYXNrcy0tO1xuICAgICAgICAgICAgX2FycmF5RWFjaChsaXN0ZW5lcnMuc2xpY2UoMCksIGZ1bmN0aW9uIChmbikge1xuICAgICAgICAgICAgICAgIGZuKCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGFkZExpc3RlbmVyKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGlmICghcmVtYWluaW5nVGFza3MpIHtcbiAgICAgICAgICAgICAgICBjYWxsYmFjayhudWxsLCByZXN1bHRzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgX2FycmF5RWFjaChrZXlzLCBmdW5jdGlvbiAoaykge1xuICAgICAgICAgICAgdmFyIHRhc2sgPSBfaXNBcnJheSh0YXNrc1trXSkgPyB0YXNrc1trXTogW3Rhc2tzW2tdXTtcbiAgICAgICAgICAgIHZhciB0YXNrQ2FsbGJhY2sgPSBfcmVzdFBhcmFtKGZ1bmN0aW9uKGVyciwgYXJncykge1xuICAgICAgICAgICAgICAgIHJ1bm5pbmdUYXNrcy0tO1xuICAgICAgICAgICAgICAgIGlmIChhcmdzLmxlbmd0aCA8PSAxKSB7XG4gICAgICAgICAgICAgICAgICAgIGFyZ3MgPSBhcmdzWzBdO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBzYWZlUmVzdWx0cyA9IHt9O1xuICAgICAgICAgICAgICAgICAgICBfZm9yRWFjaE9mKHJlc3VsdHMsIGZ1bmN0aW9uKHZhbCwgcmtleSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgc2FmZVJlc3VsdHNbcmtleV0gPSB2YWw7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICBzYWZlUmVzdWx0c1trXSA9IGFyZ3M7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKGVyciwgc2FmZVJlc3VsdHMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0c1trXSA9IGFyZ3M7XG4gICAgICAgICAgICAgICAgICAgIGFzeW5jLnNldEltbWVkaWF0ZSh0YXNrQ29tcGxldGUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdmFyIHJlcXVpcmVzID0gdGFzay5zbGljZSgwLCB0YXNrLmxlbmd0aCAtIDEpO1xuICAgICAgICAgICAgLy8gcHJldmVudCBkZWFkLWxvY2tzXG4gICAgICAgICAgICB2YXIgbGVuID0gcmVxdWlyZXMubGVuZ3RoO1xuICAgICAgICAgICAgdmFyIGRlcDtcbiAgICAgICAgICAgIHdoaWxlIChsZW4tLSkge1xuICAgICAgICAgICAgICAgIGlmICghKGRlcCA9IHRhc2tzW3JlcXVpcmVzW2xlbl1dKSkge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0hhcyBpbmV4aXN0YW50IGRlcGVuZGVuY3knKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKF9pc0FycmF5KGRlcCkgJiYgX2luZGV4T2YoZGVwLCBrKSA+PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignSGFzIGN5Y2xpYyBkZXBlbmRlbmNpZXMnKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmdW5jdGlvbiByZWFkeSgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcnVubmluZ1Rhc2tzIDwgY29uY3VycmVuY3kgJiYgX3JlZHVjZShyZXF1aXJlcywgZnVuY3Rpb24gKGEsIHgpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChhICYmIHJlc3VsdHMuaGFzT3duUHJvcGVydHkoeCkpO1xuICAgICAgICAgICAgICAgIH0sIHRydWUpICYmICFyZXN1bHRzLmhhc093blByb3BlcnR5KGspO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHJlYWR5KCkpIHtcbiAgICAgICAgICAgICAgICBydW5uaW5nVGFza3MrKztcbiAgICAgICAgICAgICAgICB0YXNrW3Rhc2subGVuZ3RoIC0gMV0odGFza0NhbGxiYWNrLCByZXN1bHRzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGFkZExpc3RlbmVyKGxpc3RlbmVyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZ1bmN0aW9uIGxpc3RlbmVyKCkge1xuICAgICAgICAgICAgICAgIGlmIChyZWFkeSgpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJ1bm5pbmdUYXNrcysrO1xuICAgICAgICAgICAgICAgICAgICByZW1vdmVMaXN0ZW5lcihsaXN0ZW5lcik7XG4gICAgICAgICAgICAgICAgICAgIHRhc2tbdGFzay5sZW5ndGggLSAxXSh0YXNrQ2FsbGJhY2ssIHJlc3VsdHMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfTtcblxuXG5cbiAgICBhc3luYy5yZXRyeSA9IGZ1bmN0aW9uKHRpbWVzLCB0YXNrLCBjYWxsYmFjaykge1xuICAgICAgICB2YXIgREVGQVVMVF9USU1FUyA9IDU7XG4gICAgICAgIHZhciBERUZBVUxUX0lOVEVSVkFMID0gMDtcblxuICAgICAgICB2YXIgYXR0ZW1wdHMgPSBbXTtcblxuICAgICAgICB2YXIgb3B0cyA9IHtcbiAgICAgICAgICAgIHRpbWVzOiBERUZBVUxUX1RJTUVTLFxuICAgICAgICAgICAgaW50ZXJ2YWw6IERFRkFVTFRfSU5URVJWQUxcbiAgICAgICAgfTtcblxuICAgICAgICBmdW5jdGlvbiBwYXJzZVRpbWVzKGFjYywgdCl7XG4gICAgICAgICAgICBpZih0eXBlb2YgdCA9PT0gJ251bWJlcicpe1xuICAgICAgICAgICAgICAgIGFjYy50aW1lcyA9IHBhcnNlSW50KHQsIDEwKSB8fCBERUZBVUxUX1RJTUVTO1xuICAgICAgICAgICAgfSBlbHNlIGlmKHR5cGVvZiB0ID09PSAnb2JqZWN0Jyl7XG4gICAgICAgICAgICAgICAgYWNjLnRpbWVzID0gcGFyc2VJbnQodC50aW1lcywgMTApIHx8IERFRkFVTFRfVElNRVM7XG4gICAgICAgICAgICAgICAgYWNjLmludGVydmFsID0gcGFyc2VJbnQodC5pbnRlcnZhbCwgMTApIHx8IERFRkFVTFRfSU5URVJWQUw7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignVW5zdXBwb3J0ZWQgYXJndW1lbnQgdHlwZSBmb3IgXFwndGltZXNcXCc6ICcgKyB0eXBlb2YgdCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgbGVuZ3RoID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgICAgICAgaWYgKGxlbmd0aCA8IDEgfHwgbGVuZ3RoID4gMykge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIGFyZ3VtZW50cyAtIG11c3QgYmUgZWl0aGVyICh0YXNrKSwgKHRhc2ssIGNhbGxiYWNrKSwgKHRpbWVzLCB0YXNrKSBvciAodGltZXMsIHRhc2ssIGNhbGxiYWNrKScpO1xuICAgICAgICB9IGVsc2UgaWYgKGxlbmd0aCA8PSAyICYmIHR5cGVvZiB0aW1lcyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgY2FsbGJhY2sgPSB0YXNrO1xuICAgICAgICAgICAgdGFzayA9IHRpbWVzO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0eXBlb2YgdGltZXMgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIHBhcnNlVGltZXMob3B0cywgdGltZXMpO1xuICAgICAgICB9XG4gICAgICAgIG9wdHMuY2FsbGJhY2sgPSBjYWxsYmFjaztcbiAgICAgICAgb3B0cy50YXNrID0gdGFzaztcblxuICAgICAgICBmdW5jdGlvbiB3cmFwcGVkVGFzayh3cmFwcGVkQ2FsbGJhY2ssIHdyYXBwZWRSZXN1bHRzKSB7XG4gICAgICAgICAgICBmdW5jdGlvbiByZXRyeUF0dGVtcHQodGFzaywgZmluYWxBdHRlbXB0KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKHNlcmllc0NhbGxiYWNrKSB7XG4gICAgICAgICAgICAgICAgICAgIHRhc2soZnVuY3Rpb24oZXJyLCByZXN1bHQpe1xuICAgICAgICAgICAgICAgICAgICAgICAgc2VyaWVzQ2FsbGJhY2soIWVyciB8fCBmaW5hbEF0dGVtcHQsIHtlcnI6IGVyciwgcmVzdWx0OiByZXN1bHR9KTtcbiAgICAgICAgICAgICAgICAgICAgfSwgd3JhcHBlZFJlc3VsdHMpO1xuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGZ1bmN0aW9uIHJldHJ5SW50ZXJ2YWwoaW50ZXJ2YWwpe1xuICAgICAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbihzZXJpZXNDYWxsYmFjayl7XG4gICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKXtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlcmllc0NhbGxiYWNrKG51bGwpO1xuICAgICAgICAgICAgICAgICAgICB9LCBpbnRlcnZhbCk7XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgd2hpbGUgKG9wdHMudGltZXMpIHtcblxuICAgICAgICAgICAgICAgIHZhciBmaW5hbEF0dGVtcHQgPSAhKG9wdHMudGltZXMtPTEpO1xuICAgICAgICAgICAgICAgIGF0dGVtcHRzLnB1c2gocmV0cnlBdHRlbXB0KG9wdHMudGFzaywgZmluYWxBdHRlbXB0KSk7XG4gICAgICAgICAgICAgICAgaWYoIWZpbmFsQXR0ZW1wdCAmJiBvcHRzLmludGVydmFsID4gMCl7XG4gICAgICAgICAgICAgICAgICAgIGF0dGVtcHRzLnB1c2gocmV0cnlJbnRlcnZhbChvcHRzLmludGVydmFsKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBhc3luYy5zZXJpZXMoYXR0ZW1wdHMsIGZ1bmN0aW9uKGRvbmUsIGRhdGEpe1xuICAgICAgICAgICAgICAgIGRhdGEgPSBkYXRhW2RhdGEubGVuZ3RoIC0gMV07XG4gICAgICAgICAgICAgICAgKHdyYXBwZWRDYWxsYmFjayB8fCBvcHRzLmNhbGxiYWNrKShkYXRhLmVyciwgZGF0YS5yZXN1bHQpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBJZiBhIGNhbGxiYWNrIGlzIHBhc3NlZCwgcnVuIHRoaXMgYXMgYSBjb250cm9sbCBmbG93XG4gICAgICAgIHJldHVybiBvcHRzLmNhbGxiYWNrID8gd3JhcHBlZFRhc2soKSA6IHdyYXBwZWRUYXNrO1xuICAgIH07XG5cbiAgICBhc3luYy53YXRlcmZhbGwgPSBmdW5jdGlvbiAodGFza3MsIGNhbGxiYWNrKSB7XG4gICAgICAgIGNhbGxiYWNrID0gX29uY2UoY2FsbGJhY2sgfHwgbm9vcCk7XG4gICAgICAgIGlmICghX2lzQXJyYXkodGFza3MpKSB7XG4gICAgICAgICAgICB2YXIgZXJyID0gbmV3IEVycm9yKCdGaXJzdCBhcmd1bWVudCB0byB3YXRlcmZhbGwgbXVzdCBiZSBhbiBhcnJheSBvZiBmdW5jdGlvbnMnKTtcbiAgICAgICAgICAgIHJldHVybiBjYWxsYmFjayhlcnIpO1xuICAgICAgICB9XG4gICAgICAgIGlmICghdGFza3MubGVuZ3RoKSB7XG4gICAgICAgICAgICByZXR1cm4gY2FsbGJhY2soKTtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiB3cmFwSXRlcmF0b3IoaXRlcmF0b3IpIHtcbiAgICAgICAgICAgIHJldHVybiBfcmVzdFBhcmFtKGZ1bmN0aW9uIChlcnIsIGFyZ3MpIHtcbiAgICAgICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrLmFwcGx5KG51bGwsIFtlcnJdLmNvbmNhdChhcmdzKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB2YXIgbmV4dCA9IGl0ZXJhdG9yLm5leHQoKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKG5leHQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3MucHVzaCh3cmFwSXRlcmF0b3IobmV4dCkpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgYXJncy5wdXNoKGNhbGxiYWNrKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbnN1cmVBc3luYyhpdGVyYXRvcikuYXBwbHkobnVsbCwgYXJncyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgd3JhcEl0ZXJhdG9yKGFzeW5jLml0ZXJhdG9yKHRhc2tzKSkoKTtcbiAgICB9O1xuXG4gICAgZnVuY3Rpb24gX3BhcmFsbGVsKGVhY2hmbiwgdGFza3MsIGNhbGxiYWNrKSB7XG4gICAgICAgIGNhbGxiYWNrID0gY2FsbGJhY2sgfHwgbm9vcDtcbiAgICAgICAgdmFyIHJlc3VsdHMgPSBfaXNBcnJheUxpa2UodGFza3MpID8gW10gOiB7fTtcblxuICAgICAgICBlYWNoZm4odGFza3MsIGZ1bmN0aW9uICh0YXNrLCBrZXksIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICB0YXNrKF9yZXN0UGFyYW0oZnVuY3Rpb24gKGVyciwgYXJncykge1xuICAgICAgICAgICAgICAgIGlmIChhcmdzLmxlbmd0aCA8PSAxKSB7XG4gICAgICAgICAgICAgICAgICAgIGFyZ3MgPSBhcmdzWzBdO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXN1bHRzW2tleV0gPSBhcmdzO1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgICB9KSk7XG4gICAgICAgIH0sIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgIGNhbGxiYWNrKGVyciwgcmVzdWx0cyk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGFzeW5jLnBhcmFsbGVsID0gZnVuY3Rpb24gKHRhc2tzLCBjYWxsYmFjaykge1xuICAgICAgICBfcGFyYWxsZWwoYXN5bmMuZWFjaE9mLCB0YXNrcywgY2FsbGJhY2spO1xuICAgIH07XG5cbiAgICBhc3luYy5wYXJhbGxlbExpbWl0ID0gZnVuY3Rpb24odGFza3MsIGxpbWl0LCBjYWxsYmFjaykge1xuICAgICAgICBfcGFyYWxsZWwoX2VhY2hPZkxpbWl0KGxpbWl0KSwgdGFza3MsIGNhbGxiYWNrKTtcbiAgICB9O1xuXG4gICAgYXN5bmMuc2VyaWVzID0gZnVuY3Rpb24odGFza3MsIGNhbGxiYWNrKSB7XG4gICAgICAgIF9wYXJhbGxlbChhc3luYy5lYWNoT2ZTZXJpZXMsIHRhc2tzLCBjYWxsYmFjayk7XG4gICAgfTtcblxuICAgIGFzeW5jLml0ZXJhdG9yID0gZnVuY3Rpb24gKHRhc2tzKSB7XG4gICAgICAgIGZ1bmN0aW9uIG1ha2VDYWxsYmFjayhpbmRleCkge1xuICAgICAgICAgICAgZnVuY3Rpb24gZm4oKSB7XG4gICAgICAgICAgICAgICAgaWYgKHRhc2tzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICB0YXNrc1tpbmRleF0uYXBwbHkobnVsbCwgYXJndW1lbnRzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZuLm5leHQoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZuLm5leHQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIChpbmRleCA8IHRhc2tzLmxlbmd0aCAtIDEpID8gbWFrZUNhbGxiYWNrKGluZGV4ICsgMSk6IG51bGw7XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgcmV0dXJuIGZuO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBtYWtlQ2FsbGJhY2soMCk7XG4gICAgfTtcblxuICAgIGFzeW5jLmFwcGx5ID0gX3Jlc3RQYXJhbShmdW5jdGlvbiAoZm4sIGFyZ3MpIHtcbiAgICAgICAgcmV0dXJuIF9yZXN0UGFyYW0oZnVuY3Rpb24gKGNhbGxBcmdzKSB7XG4gICAgICAgICAgICByZXR1cm4gZm4uYXBwbHkoXG4gICAgICAgICAgICAgICAgbnVsbCwgYXJncy5jb25jYXQoY2FsbEFyZ3MpXG4gICAgICAgICAgICApO1xuICAgICAgICB9KTtcbiAgICB9KTtcblxuICAgIGZ1bmN0aW9uIF9jb25jYXQoZWFjaGZuLCBhcnIsIGZuLCBjYWxsYmFjaykge1xuICAgICAgICB2YXIgcmVzdWx0ID0gW107XG4gICAgICAgIGVhY2hmbihhcnIsIGZ1bmN0aW9uICh4LCBpbmRleCwgY2IpIHtcbiAgICAgICAgICAgIGZuKHgsIGZ1bmN0aW9uIChlcnIsIHkpIHtcbiAgICAgICAgICAgICAgICByZXN1bHQgPSByZXN1bHQuY29uY2F0KHkgfHwgW10pO1xuICAgICAgICAgICAgICAgIGNiKGVycik7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSwgZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgY2FsbGJhY2soZXJyLCByZXN1bHQpO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgYXN5bmMuY29uY2F0ID0gZG9QYXJhbGxlbChfY29uY2F0KTtcbiAgICBhc3luYy5jb25jYXRTZXJpZXMgPSBkb1NlcmllcyhfY29uY2F0KTtcblxuICAgIGFzeW5jLndoaWxzdCA9IGZ1bmN0aW9uICh0ZXN0LCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgY2FsbGJhY2sgPSBjYWxsYmFjayB8fCBub29wO1xuICAgICAgICBpZiAodGVzdCgpKSB7XG4gICAgICAgICAgICB2YXIgbmV4dCA9IF9yZXN0UGFyYW0oZnVuY3Rpb24oZXJyLCBhcmdzKSB7XG4gICAgICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodGVzdC5hcHBseSh0aGlzLCBhcmdzKSkge1xuICAgICAgICAgICAgICAgICAgICBpdGVyYXRvcihuZXh0KTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhudWxsKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGl0ZXJhdG9yKG5leHQpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY2FsbGJhY2sobnVsbCk7XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgYXN5bmMuZG9XaGlsc3QgPSBmdW5jdGlvbiAoaXRlcmF0b3IsIHRlc3QsIGNhbGxiYWNrKSB7XG4gICAgICAgIHZhciBjYWxscyA9IDA7XG4gICAgICAgIHJldHVybiBhc3luYy53aGlsc3QoZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICByZXR1cm4gKytjYWxscyA8PSAxIHx8IHRlc3QuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICAgICAgfSwgaXRlcmF0b3IsIGNhbGxiYWNrKTtcbiAgICB9O1xuXG4gICAgYXN5bmMudW50aWwgPSBmdW5jdGlvbiAodGVzdCwgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgIHJldHVybiBhc3luYy53aGlsc3QoZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICByZXR1cm4gIXRlc3QuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICAgICAgfSwgaXRlcmF0b3IsIGNhbGxiYWNrKTtcbiAgICB9O1xuXG4gICAgYXN5bmMuZG9VbnRpbCA9IGZ1bmN0aW9uIChpdGVyYXRvciwgdGVzdCwgY2FsbGJhY2spIHtcbiAgICAgICAgcmV0dXJuIGFzeW5jLmRvV2hpbHN0KGl0ZXJhdG9yLCBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIHJldHVybiAhdGVzdC5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgICAgICB9LCBjYWxsYmFjayk7XG4gICAgfTtcblxuICAgIGFzeW5jLmR1cmluZyA9IGZ1bmN0aW9uICh0ZXN0LCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgY2FsbGJhY2sgPSBjYWxsYmFjayB8fCBub29wO1xuXG4gICAgICAgIHZhciBuZXh0ID0gX3Jlc3RQYXJhbShmdW5jdGlvbihlcnIsIGFyZ3MpIHtcbiAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBhcmdzLnB1c2goY2hlY2spO1xuICAgICAgICAgICAgICAgIHRlc3QuYXBwbHkodGhpcywgYXJncyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHZhciBjaGVjayA9IGZ1bmN0aW9uKGVyciwgdHJ1dGgpIHtcbiAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh0cnV0aCkge1xuICAgICAgICAgICAgICAgIGl0ZXJhdG9yKG5leHQpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBjYWxsYmFjayhudWxsKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcblxuICAgICAgICB0ZXN0KGNoZWNrKTtcbiAgICB9O1xuXG4gICAgYXN5bmMuZG9EdXJpbmcgPSBmdW5jdGlvbiAoaXRlcmF0b3IsIHRlc3QsIGNhbGxiYWNrKSB7XG4gICAgICAgIHZhciBjYWxscyA9IDA7XG4gICAgICAgIGFzeW5jLmR1cmluZyhmdW5jdGlvbihuZXh0KSB7XG4gICAgICAgICAgICBpZiAoY2FsbHMrKyA8IDEpIHtcbiAgICAgICAgICAgICAgICBuZXh0KG51bGwsIHRydWUpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0ZXN0LmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sIGl0ZXJhdG9yLCBjYWxsYmFjayk7XG4gICAgfTtcblxuICAgIGZ1bmN0aW9uIF9xdWV1ZSh3b3JrZXIsIGNvbmN1cnJlbmN5LCBwYXlsb2FkKSB7XG4gICAgICAgIGlmIChjb25jdXJyZW5jeSA9PSBudWxsKSB7XG4gICAgICAgICAgICBjb25jdXJyZW5jeSA9IDE7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZihjb25jdXJyZW5jeSA9PT0gMCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdDb25jdXJyZW5jeSBtdXN0IG5vdCBiZSB6ZXJvJyk7XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gX2luc2VydChxLCBkYXRhLCBwb3MsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICBpZiAoY2FsbGJhY2sgIT0gbnVsbCAmJiB0eXBlb2YgY2FsbGJhY2sgIT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcInRhc2sgY2FsbGJhY2sgbXVzdCBiZSBhIGZ1bmN0aW9uXCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcS5zdGFydGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIGlmICghX2lzQXJyYXkoZGF0YSkpIHtcbiAgICAgICAgICAgICAgICBkYXRhID0gW2RhdGFdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYoZGF0YS5sZW5ndGggPT09IDAgJiYgcS5pZGxlKCkpIHtcbiAgICAgICAgICAgICAgICAvLyBjYWxsIGRyYWluIGltbWVkaWF0ZWx5IGlmIHRoZXJlIGFyZSBubyB0YXNrc1xuICAgICAgICAgICAgICAgIHJldHVybiBhc3luYy5zZXRJbW1lZGlhdGUoZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgICAgIHEuZHJhaW4oKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIF9hcnJheUVhY2goZGF0YSwgZnVuY3Rpb24odGFzaykge1xuICAgICAgICAgICAgICAgIHZhciBpdGVtID0ge1xuICAgICAgICAgICAgICAgICAgICBkYXRhOiB0YXNrLFxuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjazogY2FsbGJhY2sgfHwgbm9vcFxuICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICBpZiAocG9zKSB7XG4gICAgICAgICAgICAgICAgICAgIHEudGFza3MudW5zaGlmdChpdGVtKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBxLnRhc2tzLnB1c2goaXRlbSk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKHEudGFza3MubGVuZ3RoID09PSBxLmNvbmN1cnJlbmN5KSB7XG4gICAgICAgICAgICAgICAgICAgIHEuc2F0dXJhdGVkKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBhc3luYy5zZXRJbW1lZGlhdGUocS5wcm9jZXNzKTtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBfbmV4dChxLCB0YXNrcykge1xuICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKCl7XG4gICAgICAgICAgICAgICAgd29ya2VycyAtPSAxO1xuXG4gICAgICAgICAgICAgICAgdmFyIHJlbW92ZWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB2YXIgYXJncyA9IGFyZ3VtZW50cztcbiAgICAgICAgICAgICAgICBfYXJyYXlFYWNoKHRhc2tzLCBmdW5jdGlvbiAodGFzaykge1xuICAgICAgICAgICAgICAgICAgICBfYXJyYXlFYWNoKHdvcmtlcnNMaXN0LCBmdW5jdGlvbiAod29ya2VyLCBpbmRleCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHdvcmtlciA9PT0gdGFzayAmJiAhcmVtb3ZlZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdvcmtlcnNMaXN0LnNwbGljZShpbmRleCwgMSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVtb3ZlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgICAgIHRhc2suY2FsbGJhY2suYXBwbHkodGFzaywgYXJncyk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgaWYgKHEudGFza3MubGVuZ3RoICsgd29ya2VycyA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICBxLmRyYWluKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHEucHJvY2VzcygpO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciB3b3JrZXJzID0gMDtcbiAgICAgICAgdmFyIHdvcmtlcnNMaXN0ID0gW107XG4gICAgICAgIHZhciBxID0ge1xuICAgICAgICAgICAgdGFza3M6IFtdLFxuICAgICAgICAgICAgY29uY3VycmVuY3k6IGNvbmN1cnJlbmN5LFxuICAgICAgICAgICAgcGF5bG9hZDogcGF5bG9hZCxcbiAgICAgICAgICAgIHNhdHVyYXRlZDogbm9vcCxcbiAgICAgICAgICAgIGVtcHR5OiBub29wLFxuICAgICAgICAgICAgZHJhaW46IG5vb3AsXG4gICAgICAgICAgICBzdGFydGVkOiBmYWxzZSxcbiAgICAgICAgICAgIHBhdXNlZDogZmFsc2UsXG4gICAgICAgICAgICBwdXNoOiBmdW5jdGlvbiAoZGF0YSwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgICAgICBfaW5zZXJ0KHEsIGRhdGEsIGZhbHNlLCBjYWxsYmFjayk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAga2lsbDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHEuZHJhaW4gPSBub29wO1xuICAgICAgICAgICAgICAgIHEudGFza3MgPSBbXTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB1bnNoaWZ0OiBmdW5jdGlvbiAoZGF0YSwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgICAgICBfaW5zZXJ0KHEsIGRhdGEsIHRydWUsIGNhbGxiYWNrKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBwcm9jZXNzOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgaWYgKCFxLnBhdXNlZCAmJiB3b3JrZXJzIDwgcS5jb25jdXJyZW5jeSAmJiBxLnRhc2tzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICB3aGlsZSh3b3JrZXJzIDwgcS5jb25jdXJyZW5jeSAmJiBxLnRhc2tzLmxlbmd0aCl7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgdGFza3MgPSBxLnBheWxvYWQgP1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHEudGFza3Muc3BsaWNlKDAsIHEucGF5bG9hZCkgOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHEudGFza3Muc3BsaWNlKDAsIHEudGFza3MubGVuZ3RoKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGRhdGEgPSBfbWFwKHRhc2tzLCBmdW5jdGlvbiAodGFzaykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0YXNrLmRhdGE7XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHEudGFza3MubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcS5lbXB0eSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgd29ya2VycyArPSAxO1xuICAgICAgICAgICAgICAgICAgICAgICAgd29ya2Vyc0xpc3QucHVzaCh0YXNrc1swXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgY2IgPSBvbmx5X29uY2UoX25leHQocSwgdGFza3MpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHdvcmtlcihkYXRhLCBjYik7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbGVuZ3RoOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHEudGFza3MubGVuZ3RoO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHJ1bm5pbmc6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gd29ya2VycztcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB3b3JrZXJzTGlzdDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB3b3JrZXJzTGlzdDtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBpZGxlOiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcS50YXNrcy5sZW5ndGggKyB3b3JrZXJzID09PSAwO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHBhdXNlOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgcS5wYXVzZWQgPSB0cnVlO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHJlc3VtZTogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGlmIChxLnBhdXNlZCA9PT0gZmFsc2UpIHsgcmV0dXJuOyB9XG4gICAgICAgICAgICAgICAgcS5wYXVzZWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB2YXIgcmVzdW1lQ291bnQgPSBNYXRoLm1pbihxLmNvbmN1cnJlbmN5LCBxLnRhc2tzLmxlbmd0aCk7XG4gICAgICAgICAgICAgICAgLy8gTmVlZCB0byBjYWxsIHEucHJvY2VzcyBvbmNlIHBlciBjb25jdXJyZW50XG4gICAgICAgICAgICAgICAgLy8gd29ya2VyIHRvIHByZXNlcnZlIGZ1bGwgY29uY3VycmVuY3kgYWZ0ZXIgcGF1c2VcbiAgICAgICAgICAgICAgICBmb3IgKHZhciB3ID0gMTsgdyA8PSByZXN1bWVDb3VudDsgdysrKSB7XG4gICAgICAgICAgICAgICAgICAgIGFzeW5jLnNldEltbWVkaWF0ZShxLnByb2Nlc3MpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIHE7XG4gICAgfVxuXG4gICAgYXN5bmMucXVldWUgPSBmdW5jdGlvbiAod29ya2VyLCBjb25jdXJyZW5jeSkge1xuICAgICAgICB2YXIgcSA9IF9xdWV1ZShmdW5jdGlvbiAoaXRlbXMsIGNiKSB7XG4gICAgICAgICAgICB3b3JrZXIoaXRlbXNbMF0sIGNiKTtcbiAgICAgICAgfSwgY29uY3VycmVuY3ksIDEpO1xuXG4gICAgICAgIHJldHVybiBxO1xuICAgIH07XG5cbiAgICBhc3luYy5wcmlvcml0eVF1ZXVlID0gZnVuY3Rpb24gKHdvcmtlciwgY29uY3VycmVuY3kpIHtcblxuICAgICAgICBmdW5jdGlvbiBfY29tcGFyZVRhc2tzKGEsIGIpe1xuICAgICAgICAgICAgcmV0dXJuIGEucHJpb3JpdHkgLSBiLnByaW9yaXR5O1xuICAgICAgICB9XG5cbiAgICAgICAgZnVuY3Rpb24gX2JpbmFyeVNlYXJjaChzZXF1ZW5jZSwgaXRlbSwgY29tcGFyZSkge1xuICAgICAgICAgICAgdmFyIGJlZyA9IC0xLFxuICAgICAgICAgICAgICAgIGVuZCA9IHNlcXVlbmNlLmxlbmd0aCAtIDE7XG4gICAgICAgICAgICB3aGlsZSAoYmVnIDwgZW5kKSB7XG4gICAgICAgICAgICAgICAgdmFyIG1pZCA9IGJlZyArICgoZW5kIC0gYmVnICsgMSkgPj4+IDEpO1xuICAgICAgICAgICAgICAgIGlmIChjb21wYXJlKGl0ZW0sIHNlcXVlbmNlW21pZF0pID49IDApIHtcbiAgICAgICAgICAgICAgICAgICAgYmVnID0gbWlkO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGVuZCA9IG1pZCAtIDE7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGJlZztcbiAgICAgICAgfVxuXG4gICAgICAgIGZ1bmN0aW9uIF9pbnNlcnQocSwgZGF0YSwgcHJpb3JpdHksIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICBpZiAoY2FsbGJhY2sgIT0gbnVsbCAmJiB0eXBlb2YgY2FsbGJhY2sgIT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcInRhc2sgY2FsbGJhY2sgbXVzdCBiZSBhIGZ1bmN0aW9uXCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcS5zdGFydGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIGlmICghX2lzQXJyYXkoZGF0YSkpIHtcbiAgICAgICAgICAgICAgICBkYXRhID0gW2RhdGFdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYoZGF0YS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgICAvLyBjYWxsIGRyYWluIGltbWVkaWF0ZWx5IGlmIHRoZXJlIGFyZSBubyB0YXNrc1xuICAgICAgICAgICAgICAgIHJldHVybiBhc3luYy5zZXRJbW1lZGlhdGUoZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgICAgIHEuZHJhaW4oKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIF9hcnJheUVhY2goZGF0YSwgZnVuY3Rpb24odGFzaykge1xuICAgICAgICAgICAgICAgIHZhciBpdGVtID0ge1xuICAgICAgICAgICAgICAgICAgICBkYXRhOiB0YXNrLFxuICAgICAgICAgICAgICAgICAgICBwcmlvcml0eTogcHJpb3JpdHksXG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrOiB0eXBlb2YgY2FsbGJhY2sgPT09ICdmdW5jdGlvbicgPyBjYWxsYmFjayA6IG5vb3BcbiAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgcS50YXNrcy5zcGxpY2UoX2JpbmFyeVNlYXJjaChxLnRhc2tzLCBpdGVtLCBfY29tcGFyZVRhc2tzKSArIDEsIDAsIGl0ZW0pO1xuXG4gICAgICAgICAgICAgICAgaWYgKHEudGFza3MubGVuZ3RoID09PSBxLmNvbmN1cnJlbmN5KSB7XG4gICAgICAgICAgICAgICAgICAgIHEuc2F0dXJhdGVkKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGFzeW5jLnNldEltbWVkaWF0ZShxLnByb2Nlc3MpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBTdGFydCB3aXRoIGEgbm9ybWFsIHF1ZXVlXG4gICAgICAgIHZhciBxID0gYXN5bmMucXVldWUod29ya2VyLCBjb25jdXJyZW5jeSk7XG5cbiAgICAgICAgLy8gT3ZlcnJpZGUgcHVzaCB0byBhY2NlcHQgc2Vjb25kIHBhcmFtZXRlciByZXByZXNlbnRpbmcgcHJpb3JpdHlcbiAgICAgICAgcS5wdXNoID0gZnVuY3Rpb24gKGRhdGEsIHByaW9yaXR5LCBjYWxsYmFjaykge1xuICAgICAgICAgICAgX2luc2VydChxLCBkYXRhLCBwcmlvcml0eSwgY2FsbGJhY2spO1xuICAgICAgICB9O1xuXG4gICAgICAgIC8vIFJlbW92ZSB1bnNoaWZ0IGZ1bmN0aW9uXG4gICAgICAgIGRlbGV0ZSBxLnVuc2hpZnQ7XG5cbiAgICAgICAgcmV0dXJuIHE7XG4gICAgfTtcblxuICAgIGFzeW5jLmNhcmdvID0gZnVuY3Rpb24gKHdvcmtlciwgcGF5bG9hZCkge1xuICAgICAgICByZXR1cm4gX3F1ZXVlKHdvcmtlciwgMSwgcGF5bG9hZCk7XG4gICAgfTtcblxuICAgIGZ1bmN0aW9uIF9jb25zb2xlX2ZuKG5hbWUpIHtcbiAgICAgICAgcmV0dXJuIF9yZXN0UGFyYW0oZnVuY3Rpb24gKGZuLCBhcmdzKSB7XG4gICAgICAgICAgICBmbi5hcHBseShudWxsLCBhcmdzLmNvbmNhdChbX3Jlc3RQYXJhbShmdW5jdGlvbiAoZXJyLCBhcmdzKSB7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBjb25zb2xlID09PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoY29uc29sZS5lcnJvcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChjb25zb2xlW25hbWVdKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBfYXJyYXlFYWNoKGFyZ3MsIGZ1bmN0aW9uICh4KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZVtuYW1lXSh4KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSldKSk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBhc3luYy5sb2cgPSBfY29uc29sZV9mbignbG9nJyk7XG4gICAgYXN5bmMuZGlyID0gX2NvbnNvbGVfZm4oJ2RpcicpO1xuICAgIC8qYXN5bmMuaW5mbyA9IF9jb25zb2xlX2ZuKCdpbmZvJyk7XG4gICAgYXN5bmMud2FybiA9IF9jb25zb2xlX2ZuKCd3YXJuJyk7XG4gICAgYXN5bmMuZXJyb3IgPSBfY29uc29sZV9mbignZXJyb3InKTsqL1xuXG4gICAgYXN5bmMubWVtb2l6ZSA9IGZ1bmN0aW9uIChmbiwgaGFzaGVyKSB7XG4gICAgICAgIHZhciBtZW1vID0ge307XG4gICAgICAgIHZhciBxdWV1ZXMgPSB7fTtcbiAgICAgICAgaGFzaGVyID0gaGFzaGVyIHx8IGlkZW50aXR5O1xuICAgICAgICB2YXIgbWVtb2l6ZWQgPSBfcmVzdFBhcmFtKGZ1bmN0aW9uIG1lbW9pemVkKGFyZ3MpIHtcbiAgICAgICAgICAgIHZhciBjYWxsYmFjayA9IGFyZ3MucG9wKCk7XG4gICAgICAgICAgICB2YXIga2V5ID0gaGFzaGVyLmFwcGx5KG51bGwsIGFyZ3MpO1xuICAgICAgICAgICAgaWYgKGtleSBpbiBtZW1vKSB7XG4gICAgICAgICAgICAgICAgYXN5bmMuc2V0SW1tZWRpYXRlKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2suYXBwbHkobnVsbCwgbWVtb1trZXldKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGtleSBpbiBxdWV1ZXMpIHtcbiAgICAgICAgICAgICAgICBxdWV1ZXNba2V5XS5wdXNoKGNhbGxiYWNrKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHF1ZXVlc1trZXldID0gW2NhbGxiYWNrXTtcbiAgICAgICAgICAgICAgICBmbi5hcHBseShudWxsLCBhcmdzLmNvbmNhdChbX3Jlc3RQYXJhbShmdW5jdGlvbiAoYXJncykge1xuICAgICAgICAgICAgICAgICAgICBtZW1vW2tleV0gPSBhcmdzO1xuICAgICAgICAgICAgICAgICAgICB2YXIgcSA9IHF1ZXVlc1trZXldO1xuICAgICAgICAgICAgICAgICAgICBkZWxldGUgcXVldWVzW2tleV07XG4gICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwLCBsID0gcS5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHFbaV0uYXBwbHkobnVsbCwgYXJncyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KV0pKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIG1lbW9pemVkLm1lbW8gPSBtZW1vO1xuICAgICAgICBtZW1vaXplZC51bm1lbW9pemVkID0gZm47XG4gICAgICAgIHJldHVybiBtZW1vaXplZDtcbiAgICB9O1xuXG4gICAgYXN5bmMudW5tZW1vaXplID0gZnVuY3Rpb24gKGZuKSB7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gKGZuLnVubWVtb2l6ZWQgfHwgZm4pLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7XG4gICAgICAgIH07XG4gICAgfTtcblxuICAgIGZ1bmN0aW9uIF90aW1lcyhtYXBwZXIpIHtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChjb3VudCwgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICBtYXBwZXIoX3JhbmdlKGNvdW50KSwgaXRlcmF0b3IsIGNhbGxiYWNrKTtcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBhc3luYy50aW1lcyA9IF90aW1lcyhhc3luYy5tYXApO1xuICAgIGFzeW5jLnRpbWVzU2VyaWVzID0gX3RpbWVzKGFzeW5jLm1hcFNlcmllcyk7XG4gICAgYXN5bmMudGltZXNMaW1pdCA9IGZ1bmN0aW9uIChjb3VudCwgbGltaXQsIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICByZXR1cm4gYXN5bmMubWFwTGltaXQoX3JhbmdlKGNvdW50KSwgbGltaXQsIGl0ZXJhdG9yLCBjYWxsYmFjayk7XG4gICAgfTtcblxuICAgIGFzeW5jLnNlcSA9IGZ1bmN0aW9uICgvKiBmdW5jdGlvbnMuLi4gKi8pIHtcbiAgICAgICAgdmFyIGZucyA9IGFyZ3VtZW50cztcbiAgICAgICAgcmV0dXJuIF9yZXN0UGFyYW0oZnVuY3Rpb24gKGFyZ3MpIHtcbiAgICAgICAgICAgIHZhciB0aGF0ID0gdGhpcztcblxuICAgICAgICAgICAgdmFyIGNhbGxiYWNrID0gYXJnc1thcmdzLmxlbmd0aCAtIDFdO1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBjYWxsYmFjayA9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgYXJncy5wb3AoKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2sgPSBub29wO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBhc3luYy5yZWR1Y2UoZm5zLCBhcmdzLCBmdW5jdGlvbiAobmV3YXJncywgZm4sIGNiKSB7XG4gICAgICAgICAgICAgICAgZm4uYXBwbHkodGhhdCwgbmV3YXJncy5jb25jYXQoW19yZXN0UGFyYW0oZnVuY3Rpb24gKGVyciwgbmV4dGFyZ3MpIHtcbiAgICAgICAgICAgICAgICAgICAgY2IoZXJyLCBuZXh0YXJncyk7XG4gICAgICAgICAgICAgICAgfSldKSk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZnVuY3Rpb24gKGVyciwgcmVzdWx0cykge1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrLmFwcGx5KHRoYXQsIFtlcnJdLmNvbmNhdChyZXN1bHRzKSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfTtcblxuICAgIGFzeW5jLmNvbXBvc2UgPSBmdW5jdGlvbiAoLyogZnVuY3Rpb25zLi4uICovKSB7XG4gICAgICAgIHJldHVybiBhc3luYy5zZXEuYXBwbHkobnVsbCwgQXJyYXkucHJvdG90eXBlLnJldmVyc2UuY2FsbChhcmd1bWVudHMpKTtcbiAgICB9O1xuXG5cbiAgICBmdW5jdGlvbiBfYXBwbHlFYWNoKGVhY2hmbikge1xuICAgICAgICByZXR1cm4gX3Jlc3RQYXJhbShmdW5jdGlvbihmbnMsIGFyZ3MpIHtcbiAgICAgICAgICAgIHZhciBnbyA9IF9yZXN0UGFyYW0oZnVuY3Rpb24oYXJncykge1xuICAgICAgICAgICAgICAgIHZhciB0aGF0ID0gdGhpcztcbiAgICAgICAgICAgICAgICB2YXIgY2FsbGJhY2sgPSBhcmdzLnBvcCgpO1xuICAgICAgICAgICAgICAgIHJldHVybiBlYWNoZm4oZm5zLCBmdW5jdGlvbiAoZm4sIF8sIGNiKSB7XG4gICAgICAgICAgICAgICAgICAgIGZuLmFwcGx5KHRoYXQsIGFyZ3MuY29uY2F0KFtjYl0pKTtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIGNhbGxiYWNrKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgaWYgKGFyZ3MubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGdvLmFwcGx5KHRoaXMsIGFyZ3MpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGdvO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBhc3luYy5hcHBseUVhY2ggPSBfYXBwbHlFYWNoKGFzeW5jLmVhY2hPZik7XG4gICAgYXN5bmMuYXBwbHlFYWNoU2VyaWVzID0gX2FwcGx5RWFjaChhc3luYy5lYWNoT2ZTZXJpZXMpO1xuXG5cbiAgICBhc3luYy5mb3JldmVyID0gZnVuY3Rpb24gKGZuLCBjYWxsYmFjaykge1xuICAgICAgICB2YXIgZG9uZSA9IG9ubHlfb25jZShjYWxsYmFjayB8fCBub29wKTtcbiAgICAgICAgdmFyIHRhc2sgPSBlbnN1cmVBc3luYyhmbik7XG4gICAgICAgIGZ1bmN0aW9uIG5leHQoZXJyKSB7XG4gICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGRvbmUoZXJyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRhc2sobmV4dCk7XG4gICAgICAgIH1cbiAgICAgICAgbmV4dCgpO1xuICAgIH07XG5cbiAgICBmdW5jdGlvbiBlbnN1cmVBc3luYyhmbikge1xuICAgICAgICByZXR1cm4gX3Jlc3RQYXJhbShmdW5jdGlvbiAoYXJncykge1xuICAgICAgICAgICAgdmFyIGNhbGxiYWNrID0gYXJncy5wb3AoKTtcbiAgICAgICAgICAgIGFyZ3MucHVzaChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgdmFyIGlubmVyQXJncyA9IGFyZ3VtZW50cztcbiAgICAgICAgICAgICAgICBpZiAoc3luYykge1xuICAgICAgICAgICAgICAgICAgICBhc3luYy5zZXRJbW1lZGlhdGUoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2suYXBwbHkobnVsbCwgaW5uZXJBcmdzKTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2suYXBwbHkobnVsbCwgaW5uZXJBcmdzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHZhciBzeW5jID0gdHJ1ZTtcbiAgICAgICAgICAgIGZuLmFwcGx5KHRoaXMsIGFyZ3MpO1xuICAgICAgICAgICAgc3luYyA9IGZhbHNlO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBhc3luYy5lbnN1cmVBc3luYyA9IGVuc3VyZUFzeW5jO1xuXG4gICAgYXN5bmMuY29uc3RhbnQgPSBfcmVzdFBhcmFtKGZ1bmN0aW9uKHZhbHVlcykge1xuICAgICAgICB2YXIgYXJncyA9IFtudWxsXS5jb25jYXQodmFsdWVzKTtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChjYWxsYmFjaykge1xuICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrLmFwcGx5KHRoaXMsIGFyZ3MpO1xuICAgICAgICB9O1xuICAgIH0pO1xuXG4gICAgYXN5bmMud3JhcFN5bmMgPVxuICAgIGFzeW5jLmFzeW5jaWZ5ID0gZnVuY3Rpb24gYXN5bmNpZnkoZnVuYykge1xuICAgICAgICByZXR1cm4gX3Jlc3RQYXJhbShmdW5jdGlvbiAoYXJncykge1xuICAgICAgICAgICAgdmFyIGNhbGxiYWNrID0gYXJncy5wb3AoKTtcbiAgICAgICAgICAgIHZhciByZXN1bHQ7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIHJlc3VsdCA9IGZ1bmMuYXBwbHkodGhpcywgYXJncyk7XG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gaWYgcmVzdWx0IGlzIFByb21pc2Ugb2JqZWN0XG4gICAgICAgICAgICBpZiAoX2lzT2JqZWN0KHJlc3VsdCkgJiYgdHlwZW9mIHJlc3VsdC50aGVuID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgICAgICAgICByZXN1bHQudGhlbihmdW5jdGlvbih2YWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhudWxsLCB2YWx1ZSk7XG4gICAgICAgICAgICAgICAgfSlbXCJjYXRjaFwiXShmdW5jdGlvbihlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soZXJyLm1lc3NhZ2UgPyBlcnIgOiBuZXcgRXJyb3IoZXJyKSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrKG51bGwsIHJlc3VsdCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH07XG5cbiAgICAvLyBOb2RlLmpzXG4gICAgaWYgKHR5cGVvZiBtb2R1bGUgPT09ICdvYmplY3QnICYmIG1vZHVsZS5leHBvcnRzKSB7XG4gICAgICAgIG1vZHVsZS5leHBvcnRzID0gYXN5bmM7XG4gICAgfVxuICAgIC8vIEFNRCAvIFJlcXVpcmVKU1xuICAgIGVsc2UgaWYgKHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCkge1xuICAgICAgICBkZWZpbmUoW10sIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiBhc3luYztcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8vIGluY2x1ZGVkIGRpcmVjdGx5IHZpYSA8c2NyaXB0PiB0YWdcbiAgICBlbHNlIHtcbiAgICAgICAgcm9vdC5hc3luYyA9IGFzeW5jO1xuICAgIH1cblxufSgpKTtcbiIsIi8vIENvcHlyaWdodCBKb3llbnQsIEluYy4gYW5kIG90aGVyIE5vZGUgY29udHJpYnV0b3JzLlxuLy9cbi8vIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhXG4vLyBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlXG4vLyBcIlNvZnR3YXJlXCIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmdcbi8vIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCxcbi8vIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXRcbi8vIHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZVxuLy8gZm9sbG93aW5nIGNvbmRpdGlvbnM6XG4vL1xuLy8gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWRcbi8vIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuLy9cbi8vIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1Ncbi8vIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0Zcbi8vIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU5cbi8vIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLFxuLy8gREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SXG4vLyBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFXG4vLyBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLlxuXG4vLyByZXNvbHZlcyAuIGFuZCAuLiBlbGVtZW50cyBpbiBhIHBhdGggYXJyYXkgd2l0aCBkaXJlY3RvcnkgbmFtZXMgdGhlcmVcbi8vIG11c3QgYmUgbm8gc2xhc2hlcywgZW1wdHkgZWxlbWVudHMsIG9yIGRldmljZSBuYW1lcyAoYzpcXCkgaW4gdGhlIGFycmF5XG4vLyAoc28gYWxzbyBubyBsZWFkaW5nIGFuZCB0cmFpbGluZyBzbGFzaGVzIC0gaXQgZG9lcyBub3QgZGlzdGluZ3Vpc2hcbi8vIHJlbGF0aXZlIGFuZCBhYnNvbHV0ZSBwYXRocylcbmZ1bmN0aW9uIG5vcm1hbGl6ZUFycmF5KHBhcnRzLCBhbGxvd0Fib3ZlUm9vdCkge1xuICAvLyBpZiB0aGUgcGF0aCB0cmllcyB0byBnbyBhYm92ZSB0aGUgcm9vdCwgYHVwYCBlbmRzIHVwID4gMFxuICB2YXIgdXAgPSAwO1xuICBmb3IgKHZhciBpID0gcGFydHMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICB2YXIgbGFzdCA9IHBhcnRzW2ldO1xuICAgIGlmIChsYXN0ID09PSAnLicpIHtcbiAgICAgIHBhcnRzLnNwbGljZShpLCAxKTtcbiAgICB9IGVsc2UgaWYgKGxhc3QgPT09ICcuLicpIHtcbiAgICAgIHBhcnRzLnNwbGljZShpLCAxKTtcbiAgICAgIHVwKys7XG4gICAgfSBlbHNlIGlmICh1cCkge1xuICAgICAgcGFydHMuc3BsaWNlKGksIDEpO1xuICAgICAgdXAtLTtcbiAgICB9XG4gIH1cblxuICAvLyBpZiB0aGUgcGF0aCBpcyBhbGxvd2VkIHRvIGdvIGFib3ZlIHRoZSByb290LCByZXN0b3JlIGxlYWRpbmcgLi5zXG4gIGlmIChhbGxvd0Fib3ZlUm9vdCkge1xuICAgIGZvciAoOyB1cC0tOyB1cCkge1xuICAgICAgcGFydHMudW5zaGlmdCgnLi4nKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gcGFydHM7XG59XG5cbi8vIFNwbGl0IGEgZmlsZW5hbWUgaW50byBbcm9vdCwgZGlyLCBiYXNlbmFtZSwgZXh0XSwgdW5peCB2ZXJzaW9uXG4vLyAncm9vdCcgaXMganVzdCBhIHNsYXNoLCBvciBub3RoaW5nLlxudmFyIHNwbGl0UGF0aFJlID1cbiAgICAvXihcXC8/fCkoW1xcc1xcU10qPykoKD86XFwuezEsMn18W15cXC9dKz98KShcXC5bXi5cXC9dKnwpKSg/OltcXC9dKikkLztcbnZhciBzcGxpdFBhdGggPSBmdW5jdGlvbihmaWxlbmFtZSkge1xuICByZXR1cm4gc3BsaXRQYXRoUmUuZXhlYyhmaWxlbmFtZSkuc2xpY2UoMSk7XG59O1xuXG4vLyBwYXRoLnJlc29sdmUoW2Zyb20gLi4uXSwgdG8pXG4vLyBwb3NpeCB2ZXJzaW9uXG5leHBvcnRzLnJlc29sdmUgPSBmdW5jdGlvbigpIHtcbiAgdmFyIHJlc29sdmVkUGF0aCA9ICcnLFxuICAgICAgcmVzb2x2ZWRBYnNvbHV0ZSA9IGZhbHNlO1xuXG4gIGZvciAodmFyIGkgPSBhcmd1bWVudHMubGVuZ3RoIC0gMTsgaSA+PSAtMSAmJiAhcmVzb2x2ZWRBYnNvbHV0ZTsgaS0tKSB7XG4gICAgdmFyIHBhdGggPSAoaSA+PSAwKSA/IGFyZ3VtZW50c1tpXSA6IHByb2Nlc3MuY3dkKCk7XG5cbiAgICAvLyBTa2lwIGVtcHR5IGFuZCBpbnZhbGlkIGVudHJpZXNcbiAgICBpZiAodHlwZW9mIHBhdGggIT09ICdzdHJpbmcnKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdBcmd1bWVudHMgdG8gcGF0aC5yZXNvbHZlIG11c3QgYmUgc3RyaW5ncycpO1xuICAgIH0gZWxzZSBpZiAoIXBhdGgpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIHJlc29sdmVkUGF0aCA9IHBhdGggKyAnLycgKyByZXNvbHZlZFBhdGg7XG4gICAgcmVzb2x2ZWRBYnNvbHV0ZSA9IHBhdGguY2hhckF0KDApID09PSAnLyc7XG4gIH1cblxuICAvLyBBdCB0aGlzIHBvaW50IHRoZSBwYXRoIHNob3VsZCBiZSByZXNvbHZlZCB0byBhIGZ1bGwgYWJzb2x1dGUgcGF0aCwgYnV0XG4gIC8vIGhhbmRsZSByZWxhdGl2ZSBwYXRocyB0byBiZSBzYWZlIChtaWdodCBoYXBwZW4gd2hlbiBwcm9jZXNzLmN3ZCgpIGZhaWxzKVxuXG4gIC8vIE5vcm1hbGl6ZSB0aGUgcGF0aFxuICByZXNvbHZlZFBhdGggPSBub3JtYWxpemVBcnJheShmaWx0ZXIocmVzb2x2ZWRQYXRoLnNwbGl0KCcvJyksIGZ1bmN0aW9uKHApIHtcbiAgICByZXR1cm4gISFwO1xuICB9KSwgIXJlc29sdmVkQWJzb2x1dGUpLmpvaW4oJy8nKTtcblxuICByZXR1cm4gKChyZXNvbHZlZEFic29sdXRlID8gJy8nIDogJycpICsgcmVzb2x2ZWRQYXRoKSB8fCAnLic7XG59O1xuXG4vLyBwYXRoLm5vcm1hbGl6ZShwYXRoKVxuLy8gcG9zaXggdmVyc2lvblxuZXhwb3J0cy5ub3JtYWxpemUgPSBmdW5jdGlvbihwYXRoKSB7XG4gIHZhciBpc0Fic29sdXRlID0gZXhwb3J0cy5pc0Fic29sdXRlKHBhdGgpLFxuICAgICAgdHJhaWxpbmdTbGFzaCA9IHN1YnN0cihwYXRoLCAtMSkgPT09ICcvJztcblxuICAvLyBOb3JtYWxpemUgdGhlIHBhdGhcbiAgcGF0aCA9IG5vcm1hbGl6ZUFycmF5KGZpbHRlcihwYXRoLnNwbGl0KCcvJyksIGZ1bmN0aW9uKHApIHtcbiAgICByZXR1cm4gISFwO1xuICB9KSwgIWlzQWJzb2x1dGUpLmpvaW4oJy8nKTtcblxuICBpZiAoIXBhdGggJiYgIWlzQWJzb2x1dGUpIHtcbiAgICBwYXRoID0gJy4nO1xuICB9XG4gIGlmIChwYXRoICYmIHRyYWlsaW5nU2xhc2gpIHtcbiAgICBwYXRoICs9ICcvJztcbiAgfVxuXG4gIHJldHVybiAoaXNBYnNvbHV0ZSA/ICcvJyA6ICcnKSArIHBhdGg7XG59O1xuXG4vLyBwb3NpeCB2ZXJzaW9uXG5leHBvcnRzLmlzQWJzb2x1dGUgPSBmdW5jdGlvbihwYXRoKSB7XG4gIHJldHVybiBwYXRoLmNoYXJBdCgwKSA9PT0gJy8nO1xufTtcblxuLy8gcG9zaXggdmVyc2lvblxuZXhwb3J0cy5qb2luID0gZnVuY3Rpb24oKSB7XG4gIHZhciBwYXRocyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMCk7XG4gIHJldHVybiBleHBvcnRzLm5vcm1hbGl6ZShmaWx0ZXIocGF0aHMsIGZ1bmN0aW9uKHAsIGluZGV4KSB7XG4gICAgaWYgKHR5cGVvZiBwICE9PSAnc3RyaW5nJykge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignQXJndW1lbnRzIHRvIHBhdGguam9pbiBtdXN0IGJlIHN0cmluZ3MnKTtcbiAgICB9XG4gICAgcmV0dXJuIHA7XG4gIH0pLmpvaW4oJy8nKSk7XG59O1xuXG5cbi8vIHBhdGgucmVsYXRpdmUoZnJvbSwgdG8pXG4vLyBwb3NpeCB2ZXJzaW9uXG5leHBvcnRzLnJlbGF0aXZlID0gZnVuY3Rpb24oZnJvbSwgdG8pIHtcbiAgZnJvbSA9IGV4cG9ydHMucmVzb2x2ZShmcm9tKS5zdWJzdHIoMSk7XG4gIHRvID0gZXhwb3J0cy5yZXNvbHZlKHRvKS5zdWJzdHIoMSk7XG5cbiAgZnVuY3Rpb24gdHJpbShhcnIpIHtcbiAgICB2YXIgc3RhcnQgPSAwO1xuICAgIGZvciAoOyBzdGFydCA8IGFyci5sZW5ndGg7IHN0YXJ0KyspIHtcbiAgICAgIGlmIChhcnJbc3RhcnRdICE9PSAnJykgYnJlYWs7XG4gICAgfVxuXG4gICAgdmFyIGVuZCA9IGFyci5sZW5ndGggLSAxO1xuICAgIGZvciAoOyBlbmQgPj0gMDsgZW5kLS0pIHtcbiAgICAgIGlmIChhcnJbZW5kXSAhPT0gJycpIGJyZWFrO1xuICAgIH1cblxuICAgIGlmIChzdGFydCA+IGVuZCkgcmV0dXJuIFtdO1xuICAgIHJldHVybiBhcnIuc2xpY2Uoc3RhcnQsIGVuZCAtIHN0YXJ0ICsgMSk7XG4gIH1cblxuICB2YXIgZnJvbVBhcnRzID0gdHJpbShmcm9tLnNwbGl0KCcvJykpO1xuICB2YXIgdG9QYXJ0cyA9IHRyaW0odG8uc3BsaXQoJy8nKSk7XG5cbiAgdmFyIGxlbmd0aCA9IE1hdGgubWluKGZyb21QYXJ0cy5sZW5ndGgsIHRvUGFydHMubGVuZ3RoKTtcbiAgdmFyIHNhbWVQYXJ0c0xlbmd0aCA9IGxlbmd0aDtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgIGlmIChmcm9tUGFydHNbaV0gIT09IHRvUGFydHNbaV0pIHtcbiAgICAgIHNhbWVQYXJ0c0xlbmd0aCA9IGk7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICB2YXIgb3V0cHV0UGFydHMgPSBbXTtcbiAgZm9yICh2YXIgaSA9IHNhbWVQYXJ0c0xlbmd0aDsgaSA8IGZyb21QYXJ0cy5sZW5ndGg7IGkrKykge1xuICAgIG91dHB1dFBhcnRzLnB1c2goJy4uJyk7XG4gIH1cblxuICBvdXRwdXRQYXJ0cyA9IG91dHB1dFBhcnRzLmNvbmNhdCh0b1BhcnRzLnNsaWNlKHNhbWVQYXJ0c0xlbmd0aCkpO1xuXG4gIHJldHVybiBvdXRwdXRQYXJ0cy5qb2luKCcvJyk7XG59O1xuXG5leHBvcnRzLnNlcCA9ICcvJztcbmV4cG9ydHMuZGVsaW1pdGVyID0gJzonO1xuXG5leHBvcnRzLmRpcm5hbWUgPSBmdW5jdGlvbihwYXRoKSB7XG4gIHZhciByZXN1bHQgPSBzcGxpdFBhdGgocGF0aCksXG4gICAgICByb290ID0gcmVzdWx0WzBdLFxuICAgICAgZGlyID0gcmVzdWx0WzFdO1xuXG4gIGlmICghcm9vdCAmJiAhZGlyKSB7XG4gICAgLy8gTm8gZGlybmFtZSB3aGF0c29ldmVyXG4gICAgcmV0dXJuICcuJztcbiAgfVxuXG4gIGlmIChkaXIpIHtcbiAgICAvLyBJdCBoYXMgYSBkaXJuYW1lLCBzdHJpcCB0cmFpbGluZyBzbGFzaFxuICAgIGRpciA9IGRpci5zdWJzdHIoMCwgZGlyLmxlbmd0aCAtIDEpO1xuICB9XG5cbiAgcmV0dXJuIHJvb3QgKyBkaXI7XG59O1xuXG5cbmV4cG9ydHMuYmFzZW5hbWUgPSBmdW5jdGlvbihwYXRoLCBleHQpIHtcbiAgdmFyIGYgPSBzcGxpdFBhdGgocGF0aClbMl07XG4gIC8vIFRPRE86IG1ha2UgdGhpcyBjb21wYXJpc29uIGNhc2UtaW5zZW5zaXRpdmUgb24gd2luZG93cz9cbiAgaWYgKGV4dCAmJiBmLnN1YnN0cigtMSAqIGV4dC5sZW5ndGgpID09PSBleHQpIHtcbiAgICBmID0gZi5zdWJzdHIoMCwgZi5sZW5ndGggLSBleHQubGVuZ3RoKTtcbiAgfVxuICByZXR1cm4gZjtcbn07XG5cblxuZXhwb3J0cy5leHRuYW1lID0gZnVuY3Rpb24ocGF0aCkge1xuICByZXR1cm4gc3BsaXRQYXRoKHBhdGgpWzNdO1xufTtcblxuZnVuY3Rpb24gZmlsdGVyICh4cywgZikge1xuICAgIGlmICh4cy5maWx0ZXIpIHJldHVybiB4cy5maWx0ZXIoZik7XG4gICAgdmFyIHJlcyA9IFtdO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgeHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgaWYgKGYoeHNbaV0sIGksIHhzKSkgcmVzLnB1c2goeHNbaV0pO1xuICAgIH1cbiAgICByZXR1cm4gcmVzO1xufVxuXG4vLyBTdHJpbmcucHJvdG90eXBlLnN1YnN0ciAtIG5lZ2F0aXZlIGluZGV4IGRvbid0IHdvcmsgaW4gSUU4XG52YXIgc3Vic3RyID0gJ2FiJy5zdWJzdHIoLTEpID09PSAnYidcbiAgICA/IGZ1bmN0aW9uIChzdHIsIHN0YXJ0LCBsZW4pIHsgcmV0dXJuIHN0ci5zdWJzdHIoc3RhcnQsIGxlbikgfVxuICAgIDogZnVuY3Rpb24gKHN0ciwgc3RhcnQsIGxlbikge1xuICAgICAgICBpZiAoc3RhcnQgPCAwKSBzdGFydCA9IHN0ci5sZW5ndGggKyBzdGFydDtcbiAgICAgICAgcmV0dXJuIHN0ci5zdWJzdHIoc3RhcnQsIGxlbik7XG4gICAgfVxuO1xuIiwiLy8gc2hpbSBmb3IgdXNpbmcgcHJvY2VzcyBpbiBicm93c2VyXG5cbnZhciBwcm9jZXNzID0gbW9kdWxlLmV4cG9ydHMgPSB7fTtcbnZhciBxdWV1ZSA9IFtdO1xudmFyIGRyYWluaW5nID0gZmFsc2U7XG52YXIgY3VycmVudFF1ZXVlO1xudmFyIHF1ZXVlSW5kZXggPSAtMTtcblxuZnVuY3Rpb24gY2xlYW5VcE5leHRUaWNrKCkge1xuICAgIGRyYWluaW5nID0gZmFsc2U7XG4gICAgaWYgKGN1cnJlbnRRdWV1ZS5sZW5ndGgpIHtcbiAgICAgICAgcXVldWUgPSBjdXJyZW50UXVldWUuY29uY2F0KHF1ZXVlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICBxdWV1ZUluZGV4ID0gLTE7XG4gICAgfVxuICAgIGlmIChxdWV1ZS5sZW5ndGgpIHtcbiAgICAgICAgZHJhaW5RdWV1ZSgpO1xuICAgIH1cbn1cblxuZnVuY3Rpb24gZHJhaW5RdWV1ZSgpIHtcbiAgICBpZiAoZHJhaW5pbmcpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB2YXIgdGltZW91dCA9IHNldFRpbWVvdXQoY2xlYW5VcE5leHRUaWNrKTtcbiAgICBkcmFpbmluZyA9IHRydWU7XG5cbiAgICB2YXIgbGVuID0gcXVldWUubGVuZ3RoO1xuICAgIHdoaWxlKGxlbikge1xuICAgICAgICBjdXJyZW50UXVldWUgPSBxdWV1ZTtcbiAgICAgICAgcXVldWUgPSBbXTtcbiAgICAgICAgd2hpbGUgKCsrcXVldWVJbmRleCA8IGxlbikge1xuICAgICAgICAgICAgaWYgKGN1cnJlbnRRdWV1ZSkge1xuICAgICAgICAgICAgICAgIGN1cnJlbnRRdWV1ZVtxdWV1ZUluZGV4XS5ydW4oKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBxdWV1ZUluZGV4ID0gLTE7XG4gICAgICAgIGxlbiA9IHF1ZXVlLmxlbmd0aDtcbiAgICB9XG4gICAgY3VycmVudFF1ZXVlID0gbnVsbDtcbiAgICBkcmFpbmluZyA9IGZhbHNlO1xuICAgIGNsZWFyVGltZW91dCh0aW1lb3V0KTtcbn1cblxucHJvY2Vzcy5uZXh0VGljayA9IGZ1bmN0aW9uIChmdW4pIHtcbiAgICB2YXIgYXJncyA9IG5ldyBBcnJheShhcmd1bWVudHMubGVuZ3RoIC0gMSk7XG4gICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPiAxKSB7XG4gICAgICAgIGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBhcmdzW2kgLSAxXSA9IGFyZ3VtZW50c1tpXTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBxdWV1ZS5wdXNoKG5ldyBJdGVtKGZ1biwgYXJncykpO1xuICAgIGlmIChxdWV1ZS5sZW5ndGggPT09IDEgJiYgIWRyYWluaW5nKSB7XG4gICAgICAgIHNldFRpbWVvdXQoZHJhaW5RdWV1ZSwgMCk7XG4gICAgfVxufTtcblxuLy8gdjggbGlrZXMgcHJlZGljdGlibGUgb2JqZWN0c1xuZnVuY3Rpb24gSXRlbShmdW4sIGFycmF5KSB7XG4gICAgdGhpcy5mdW4gPSBmdW47XG4gICAgdGhpcy5hcnJheSA9IGFycmF5O1xufVxuSXRlbS5wcm90b3R5cGUucnVuID0gZnVuY3Rpb24gKCkge1xuICAgIHRoaXMuZnVuLmFwcGx5KG51bGwsIHRoaXMuYXJyYXkpO1xufTtcbnByb2Nlc3MudGl0bGUgPSAnYnJvd3Nlcic7XG5wcm9jZXNzLmJyb3dzZXIgPSB0cnVlO1xucHJvY2Vzcy5lbnYgPSB7fTtcbnByb2Nlc3MuYXJndiA9IFtdO1xucHJvY2Vzcy52ZXJzaW9uID0gJyc7IC8vIGVtcHR5IHN0cmluZyB0byBhdm9pZCByZWdleHAgaXNzdWVzXG5wcm9jZXNzLnZlcnNpb25zID0ge307XG5cbmZ1bmN0aW9uIG5vb3AoKSB7fVxuXG5wcm9jZXNzLm9uID0gbm9vcDtcbnByb2Nlc3MuYWRkTGlzdGVuZXIgPSBub29wO1xucHJvY2Vzcy5vbmNlID0gbm9vcDtcbnByb2Nlc3Mub2ZmID0gbm9vcDtcbnByb2Nlc3MucmVtb3ZlTGlzdGVuZXIgPSBub29wO1xucHJvY2Vzcy5yZW1vdmVBbGxMaXN0ZW5lcnMgPSBub29wO1xucHJvY2Vzcy5lbWl0ID0gbm9vcDtcblxucHJvY2Vzcy5iaW5kaW5nID0gZnVuY3Rpb24gKG5hbWUpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3Byb2Nlc3MuYmluZGluZyBpcyBub3Qgc3VwcG9ydGVkJyk7XG59O1xuXG5wcm9jZXNzLmN3ZCA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuICcvJyB9O1xucHJvY2Vzcy5jaGRpciA9IGZ1bmN0aW9uIChkaXIpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3Byb2Nlc3MuY2hkaXIgaXMgbm90IHN1cHBvcnRlZCcpO1xufTtcbnByb2Nlc3MudW1hc2sgPSBmdW5jdGlvbigpIHsgcmV0dXJuIDA7IH07XG4iLCIvKiEgaHR0cHM6Ly9tdGhzLmJlL3B1bnljb2RlIHYxLjQuMCBieSBAbWF0aGlhcyAqL1xuOyhmdW5jdGlvbihyb290KSB7XG5cblx0LyoqIERldGVjdCBmcmVlIHZhcmlhYmxlcyAqL1xuXHR2YXIgZnJlZUV4cG9ydHMgPSB0eXBlb2YgZXhwb3J0cyA9PSAnb2JqZWN0JyAmJiBleHBvcnRzICYmXG5cdFx0IWV4cG9ydHMubm9kZVR5cGUgJiYgZXhwb3J0cztcblx0dmFyIGZyZWVNb2R1bGUgPSB0eXBlb2YgbW9kdWxlID09ICdvYmplY3QnICYmIG1vZHVsZSAmJlxuXHRcdCFtb2R1bGUubm9kZVR5cGUgJiYgbW9kdWxlO1xuXHR2YXIgZnJlZUdsb2JhbCA9IHR5cGVvZiBnbG9iYWwgPT0gJ29iamVjdCcgJiYgZ2xvYmFsO1xuXHRpZiAoXG5cdFx0ZnJlZUdsb2JhbC5nbG9iYWwgPT09IGZyZWVHbG9iYWwgfHxcblx0XHRmcmVlR2xvYmFsLndpbmRvdyA9PT0gZnJlZUdsb2JhbCB8fFxuXHRcdGZyZWVHbG9iYWwuc2VsZiA9PT0gZnJlZUdsb2JhbFxuXHQpIHtcblx0XHRyb290ID0gZnJlZUdsb2JhbDtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGUgYHB1bnljb2RlYCBvYmplY3QuXG5cdCAqIEBuYW1lIHB1bnljb2RlXG5cdCAqIEB0eXBlIE9iamVjdFxuXHQgKi9cblx0dmFyIHB1bnljb2RlLFxuXG5cdC8qKiBIaWdoZXN0IHBvc2l0aXZlIHNpZ25lZCAzMi1iaXQgZmxvYXQgdmFsdWUgKi9cblx0bWF4SW50ID0gMjE0NzQ4MzY0NywgLy8gYWthLiAweDdGRkZGRkZGIG9yIDJeMzEtMVxuXG5cdC8qKiBCb290c3RyaW5nIHBhcmFtZXRlcnMgKi9cblx0YmFzZSA9IDM2LFxuXHR0TWluID0gMSxcblx0dE1heCA9IDI2LFxuXHRza2V3ID0gMzgsXG5cdGRhbXAgPSA3MDAsXG5cdGluaXRpYWxCaWFzID0gNzIsXG5cdGluaXRpYWxOID0gMTI4LCAvLyAweDgwXG5cdGRlbGltaXRlciA9ICctJywgLy8gJ1xceDJEJ1xuXG5cdC8qKiBSZWd1bGFyIGV4cHJlc3Npb25zICovXG5cdHJlZ2V4UHVueWNvZGUgPSAvXnhuLS0vLFxuXHRyZWdleE5vbkFTQ0lJID0gL1teXFx4MjAtXFx4N0VdLywgLy8gdW5wcmludGFibGUgQVNDSUkgY2hhcnMgKyBub24tQVNDSUkgY2hhcnNcblx0cmVnZXhTZXBhcmF0b3JzID0gL1tcXHgyRVxcdTMwMDJcXHVGRjBFXFx1RkY2MV0vZywgLy8gUkZDIDM0OTAgc2VwYXJhdG9yc1xuXG5cdC8qKiBFcnJvciBtZXNzYWdlcyAqL1xuXHRlcnJvcnMgPSB7XG5cdFx0J292ZXJmbG93JzogJ092ZXJmbG93OiBpbnB1dCBuZWVkcyB3aWRlciBpbnRlZ2VycyB0byBwcm9jZXNzJyxcblx0XHQnbm90LWJhc2ljJzogJ0lsbGVnYWwgaW5wdXQgPj0gMHg4MCAobm90IGEgYmFzaWMgY29kZSBwb2ludCknLFxuXHRcdCdpbnZhbGlkLWlucHV0JzogJ0ludmFsaWQgaW5wdXQnXG5cdH0sXG5cblx0LyoqIENvbnZlbmllbmNlIHNob3J0Y3V0cyAqL1xuXHRiYXNlTWludXNUTWluID0gYmFzZSAtIHRNaW4sXG5cdGZsb29yID0gTWF0aC5mbG9vcixcblx0c3RyaW5nRnJvbUNoYXJDb2RlID0gU3RyaW5nLmZyb21DaGFyQ29kZSxcblxuXHQvKiogVGVtcG9yYXJ5IHZhcmlhYmxlICovXG5cdGtleTtcblxuXHQvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cblxuXHQvKipcblx0ICogQSBnZW5lcmljIGVycm9yIHV0aWxpdHkgZnVuY3Rpb24uXG5cdCAqIEBwcml2YXRlXG5cdCAqIEBwYXJhbSB7U3RyaW5nfSB0eXBlIFRoZSBlcnJvciB0eXBlLlxuXHQgKiBAcmV0dXJucyB7RXJyb3J9IFRocm93cyBhIGBSYW5nZUVycm9yYCB3aXRoIHRoZSBhcHBsaWNhYmxlIGVycm9yIG1lc3NhZ2UuXG5cdCAqL1xuXHRmdW5jdGlvbiBlcnJvcih0eXBlKSB7XG5cdFx0dGhyb3cgbmV3IFJhbmdlRXJyb3IoZXJyb3JzW3R5cGVdKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBBIGdlbmVyaWMgYEFycmF5I21hcGAgdXRpbGl0eSBmdW5jdGlvbi5cblx0ICogQHByaXZhdGVcblx0ICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIGl0ZXJhdGUgb3Zlci5cblx0ICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2sgVGhlIGZ1bmN0aW9uIHRoYXQgZ2V0cyBjYWxsZWQgZm9yIGV2ZXJ5IGFycmF5XG5cdCAqIGl0ZW0uXG5cdCAqIEByZXR1cm5zIHtBcnJheX0gQSBuZXcgYXJyYXkgb2YgdmFsdWVzIHJldHVybmVkIGJ5IHRoZSBjYWxsYmFjayBmdW5jdGlvbi5cblx0ICovXG5cdGZ1bmN0aW9uIG1hcChhcnJheSwgZm4pIHtcblx0XHR2YXIgbGVuZ3RoID0gYXJyYXkubGVuZ3RoO1xuXHRcdHZhciByZXN1bHQgPSBbXTtcblx0XHR3aGlsZSAobGVuZ3RoLS0pIHtcblx0XHRcdHJlc3VsdFtsZW5ndGhdID0gZm4oYXJyYXlbbGVuZ3RoXSk7XG5cdFx0fVxuXHRcdHJldHVybiByZXN1bHQ7XG5cdH1cblxuXHQvKipcblx0ICogQSBzaW1wbGUgYEFycmF5I21hcGAtbGlrZSB3cmFwcGVyIHRvIHdvcmsgd2l0aCBkb21haW4gbmFtZSBzdHJpbmdzIG9yIGVtYWlsXG5cdCAqIGFkZHJlc3Nlcy5cblx0ICogQHByaXZhdGVcblx0ICogQHBhcmFtIHtTdHJpbmd9IGRvbWFpbiBUaGUgZG9tYWluIG5hbWUgb3IgZW1haWwgYWRkcmVzcy5cblx0ICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2sgVGhlIGZ1bmN0aW9uIHRoYXQgZ2V0cyBjYWxsZWQgZm9yIGV2ZXJ5XG5cdCAqIGNoYXJhY3Rlci5cblx0ICogQHJldHVybnMge0FycmF5fSBBIG5ldyBzdHJpbmcgb2YgY2hhcmFjdGVycyByZXR1cm5lZCBieSB0aGUgY2FsbGJhY2tcblx0ICogZnVuY3Rpb24uXG5cdCAqL1xuXHRmdW5jdGlvbiBtYXBEb21haW4oc3RyaW5nLCBmbikge1xuXHRcdHZhciBwYXJ0cyA9IHN0cmluZy5zcGxpdCgnQCcpO1xuXHRcdHZhciByZXN1bHQgPSAnJztcblx0XHRpZiAocGFydHMubGVuZ3RoID4gMSkge1xuXHRcdFx0Ly8gSW4gZW1haWwgYWRkcmVzc2VzLCBvbmx5IHRoZSBkb21haW4gbmFtZSBzaG91bGQgYmUgcHVueWNvZGVkLiBMZWF2ZVxuXHRcdFx0Ly8gdGhlIGxvY2FsIHBhcnQgKGkuZS4gZXZlcnl0aGluZyB1cCB0byBgQGApIGludGFjdC5cblx0XHRcdHJlc3VsdCA9IHBhcnRzWzBdICsgJ0AnO1xuXHRcdFx0c3RyaW5nID0gcGFydHNbMV07XG5cdFx0fVxuXHRcdC8vIEF2b2lkIGBzcGxpdChyZWdleClgIGZvciBJRTggY29tcGF0aWJpbGl0eS4gU2VlICMxNy5cblx0XHRzdHJpbmcgPSBzdHJpbmcucmVwbGFjZShyZWdleFNlcGFyYXRvcnMsICdcXHgyRScpO1xuXHRcdHZhciBsYWJlbHMgPSBzdHJpbmcuc3BsaXQoJy4nKTtcblx0XHR2YXIgZW5jb2RlZCA9IG1hcChsYWJlbHMsIGZuKS5qb2luKCcuJyk7XG5cdFx0cmV0dXJuIHJlc3VsdCArIGVuY29kZWQ7XG5cdH1cblxuXHQvKipcblx0ICogQ3JlYXRlcyBhbiBhcnJheSBjb250YWluaW5nIHRoZSBudW1lcmljIGNvZGUgcG9pbnRzIG9mIGVhY2ggVW5pY29kZVxuXHQgKiBjaGFyYWN0ZXIgaW4gdGhlIHN0cmluZy4gV2hpbGUgSmF2YVNjcmlwdCB1c2VzIFVDUy0yIGludGVybmFsbHksXG5cdCAqIHRoaXMgZnVuY3Rpb24gd2lsbCBjb252ZXJ0IGEgcGFpciBvZiBzdXJyb2dhdGUgaGFsdmVzIChlYWNoIG9mIHdoaWNoXG5cdCAqIFVDUy0yIGV4cG9zZXMgYXMgc2VwYXJhdGUgY2hhcmFjdGVycykgaW50byBhIHNpbmdsZSBjb2RlIHBvaW50LFxuXHQgKiBtYXRjaGluZyBVVEYtMTYuXG5cdCAqIEBzZWUgYHB1bnljb2RlLnVjczIuZW5jb2RlYFxuXHQgKiBAc2VlIDxodHRwczovL21hdGhpYXNieW5lbnMuYmUvbm90ZXMvamF2YXNjcmlwdC1lbmNvZGluZz5cblx0ICogQG1lbWJlck9mIHB1bnljb2RlLnVjczJcblx0ICogQG5hbWUgZGVjb2RlXG5cdCAqIEBwYXJhbSB7U3RyaW5nfSBzdHJpbmcgVGhlIFVuaWNvZGUgaW5wdXQgc3RyaW5nIChVQ1MtMikuXG5cdCAqIEByZXR1cm5zIHtBcnJheX0gVGhlIG5ldyBhcnJheSBvZiBjb2RlIHBvaW50cy5cblx0ICovXG5cdGZ1bmN0aW9uIHVjczJkZWNvZGUoc3RyaW5nKSB7XG5cdFx0dmFyIG91dHB1dCA9IFtdLFxuXHRcdCAgICBjb3VudGVyID0gMCxcblx0XHQgICAgbGVuZ3RoID0gc3RyaW5nLmxlbmd0aCxcblx0XHQgICAgdmFsdWUsXG5cdFx0ICAgIGV4dHJhO1xuXHRcdHdoaWxlIChjb3VudGVyIDwgbGVuZ3RoKSB7XG5cdFx0XHR2YWx1ZSA9IHN0cmluZy5jaGFyQ29kZUF0KGNvdW50ZXIrKyk7XG5cdFx0XHRpZiAodmFsdWUgPj0gMHhEODAwICYmIHZhbHVlIDw9IDB4REJGRiAmJiBjb3VudGVyIDwgbGVuZ3RoKSB7XG5cdFx0XHRcdC8vIGhpZ2ggc3Vycm9nYXRlLCBhbmQgdGhlcmUgaXMgYSBuZXh0IGNoYXJhY3RlclxuXHRcdFx0XHRleHRyYSA9IHN0cmluZy5jaGFyQ29kZUF0KGNvdW50ZXIrKyk7XG5cdFx0XHRcdGlmICgoZXh0cmEgJiAweEZDMDApID09IDB4REMwMCkgeyAvLyBsb3cgc3Vycm9nYXRlXG5cdFx0XHRcdFx0b3V0cHV0LnB1c2goKCh2YWx1ZSAmIDB4M0ZGKSA8PCAxMCkgKyAoZXh0cmEgJiAweDNGRikgKyAweDEwMDAwKTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHQvLyB1bm1hdGNoZWQgc3Vycm9nYXRlOyBvbmx5IGFwcGVuZCB0aGlzIGNvZGUgdW5pdCwgaW4gY2FzZSB0aGUgbmV4dFxuXHRcdFx0XHRcdC8vIGNvZGUgdW5pdCBpcyB0aGUgaGlnaCBzdXJyb2dhdGUgb2YgYSBzdXJyb2dhdGUgcGFpclxuXHRcdFx0XHRcdG91dHB1dC5wdXNoKHZhbHVlKTtcblx0XHRcdFx0XHRjb3VudGVyLS07XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdG91dHB1dC5wdXNoKHZhbHVlKTtcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIG91dHB1dDtcblx0fVxuXG5cdC8qKlxuXHQgKiBDcmVhdGVzIGEgc3RyaW5nIGJhc2VkIG9uIGFuIGFycmF5IG9mIG51bWVyaWMgY29kZSBwb2ludHMuXG5cdCAqIEBzZWUgYHB1bnljb2RlLnVjczIuZGVjb2RlYFxuXHQgKiBAbWVtYmVyT2YgcHVueWNvZGUudWNzMlxuXHQgKiBAbmFtZSBlbmNvZGVcblx0ICogQHBhcmFtIHtBcnJheX0gY29kZVBvaW50cyBUaGUgYXJyYXkgb2YgbnVtZXJpYyBjb2RlIHBvaW50cy5cblx0ICogQHJldHVybnMge1N0cmluZ30gVGhlIG5ldyBVbmljb2RlIHN0cmluZyAoVUNTLTIpLlxuXHQgKi9cblx0ZnVuY3Rpb24gdWNzMmVuY29kZShhcnJheSkge1xuXHRcdHJldHVybiBtYXAoYXJyYXksIGZ1bmN0aW9uKHZhbHVlKSB7XG5cdFx0XHR2YXIgb3V0cHV0ID0gJyc7XG5cdFx0XHRpZiAodmFsdWUgPiAweEZGRkYpIHtcblx0XHRcdFx0dmFsdWUgLT0gMHgxMDAwMDtcblx0XHRcdFx0b3V0cHV0ICs9IHN0cmluZ0Zyb21DaGFyQ29kZSh2YWx1ZSA+Pj4gMTAgJiAweDNGRiB8IDB4RDgwMCk7XG5cdFx0XHRcdHZhbHVlID0gMHhEQzAwIHwgdmFsdWUgJiAweDNGRjtcblx0XHRcdH1cblx0XHRcdG91dHB1dCArPSBzdHJpbmdGcm9tQ2hhckNvZGUodmFsdWUpO1xuXHRcdFx0cmV0dXJuIG91dHB1dDtcblx0XHR9KS5qb2luKCcnKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBDb252ZXJ0cyBhIGJhc2ljIGNvZGUgcG9pbnQgaW50byBhIGRpZ2l0L2ludGVnZXIuXG5cdCAqIEBzZWUgYGRpZ2l0VG9CYXNpYygpYFxuXHQgKiBAcHJpdmF0ZVxuXHQgKiBAcGFyYW0ge051bWJlcn0gY29kZVBvaW50IFRoZSBiYXNpYyBudW1lcmljIGNvZGUgcG9pbnQgdmFsdWUuXG5cdCAqIEByZXR1cm5zIHtOdW1iZXJ9IFRoZSBudW1lcmljIHZhbHVlIG9mIGEgYmFzaWMgY29kZSBwb2ludCAoZm9yIHVzZSBpblxuXHQgKiByZXByZXNlbnRpbmcgaW50ZWdlcnMpIGluIHRoZSByYW5nZSBgMGAgdG8gYGJhc2UgLSAxYCwgb3IgYGJhc2VgIGlmXG5cdCAqIHRoZSBjb2RlIHBvaW50IGRvZXMgbm90IHJlcHJlc2VudCBhIHZhbHVlLlxuXHQgKi9cblx0ZnVuY3Rpb24gYmFzaWNUb0RpZ2l0KGNvZGVQb2ludCkge1xuXHRcdGlmIChjb2RlUG9pbnQgLSA0OCA8IDEwKSB7XG5cdFx0XHRyZXR1cm4gY29kZVBvaW50IC0gMjI7XG5cdFx0fVxuXHRcdGlmIChjb2RlUG9pbnQgLSA2NSA8IDI2KSB7XG5cdFx0XHRyZXR1cm4gY29kZVBvaW50IC0gNjU7XG5cdFx0fVxuXHRcdGlmIChjb2RlUG9pbnQgLSA5NyA8IDI2KSB7XG5cdFx0XHRyZXR1cm4gY29kZVBvaW50IC0gOTc7XG5cdFx0fVxuXHRcdHJldHVybiBiYXNlO1xuXHR9XG5cblx0LyoqXG5cdCAqIENvbnZlcnRzIGEgZGlnaXQvaW50ZWdlciBpbnRvIGEgYmFzaWMgY29kZSBwb2ludC5cblx0ICogQHNlZSBgYmFzaWNUb0RpZ2l0KClgXG5cdCAqIEBwcml2YXRlXG5cdCAqIEBwYXJhbSB7TnVtYmVyfSBkaWdpdCBUaGUgbnVtZXJpYyB2YWx1ZSBvZiBhIGJhc2ljIGNvZGUgcG9pbnQuXG5cdCAqIEByZXR1cm5zIHtOdW1iZXJ9IFRoZSBiYXNpYyBjb2RlIHBvaW50IHdob3NlIHZhbHVlICh3aGVuIHVzZWQgZm9yXG5cdCAqIHJlcHJlc2VudGluZyBpbnRlZ2VycykgaXMgYGRpZ2l0YCwgd2hpY2ggbmVlZHMgdG8gYmUgaW4gdGhlIHJhbmdlXG5cdCAqIGAwYCB0byBgYmFzZSAtIDFgLiBJZiBgZmxhZ2AgaXMgbm9uLXplcm8sIHRoZSB1cHBlcmNhc2UgZm9ybSBpc1xuXHQgKiB1c2VkOyBlbHNlLCB0aGUgbG93ZXJjYXNlIGZvcm0gaXMgdXNlZC4gVGhlIGJlaGF2aW9yIGlzIHVuZGVmaW5lZFxuXHQgKiBpZiBgZmxhZ2AgaXMgbm9uLXplcm8gYW5kIGBkaWdpdGAgaGFzIG5vIHVwcGVyY2FzZSBmb3JtLlxuXHQgKi9cblx0ZnVuY3Rpb24gZGlnaXRUb0Jhc2ljKGRpZ2l0LCBmbGFnKSB7XG5cdFx0Ly8gIDAuLjI1IG1hcCB0byBBU0NJSSBhLi56IG9yIEEuLlpcblx0XHQvLyAyNi4uMzUgbWFwIHRvIEFTQ0lJIDAuLjlcblx0XHRyZXR1cm4gZGlnaXQgKyAyMiArIDc1ICogKGRpZ2l0IDwgMjYpIC0gKChmbGFnICE9IDApIDw8IDUpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEJpYXMgYWRhcHRhdGlvbiBmdW5jdGlvbiBhcyBwZXIgc2VjdGlvbiAzLjQgb2YgUkZDIDM0OTIuXG5cdCAqIGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmMzNDkyI3NlY3Rpb24tMy40XG5cdCAqIEBwcml2YXRlXG5cdCAqL1xuXHRmdW5jdGlvbiBhZGFwdChkZWx0YSwgbnVtUG9pbnRzLCBmaXJzdFRpbWUpIHtcblx0XHR2YXIgayA9IDA7XG5cdFx0ZGVsdGEgPSBmaXJzdFRpbWUgPyBmbG9vcihkZWx0YSAvIGRhbXApIDogZGVsdGEgPj4gMTtcblx0XHRkZWx0YSArPSBmbG9vcihkZWx0YSAvIG51bVBvaW50cyk7XG5cdFx0Zm9yICgvKiBubyBpbml0aWFsaXphdGlvbiAqLzsgZGVsdGEgPiBiYXNlTWludXNUTWluICogdE1heCA+PiAxOyBrICs9IGJhc2UpIHtcblx0XHRcdGRlbHRhID0gZmxvb3IoZGVsdGEgLyBiYXNlTWludXNUTWluKTtcblx0XHR9XG5cdFx0cmV0dXJuIGZsb29yKGsgKyAoYmFzZU1pbnVzVE1pbiArIDEpICogZGVsdGEgLyAoZGVsdGEgKyBza2V3KSk7XG5cdH1cblxuXHQvKipcblx0ICogQ29udmVydHMgYSBQdW55Y29kZSBzdHJpbmcgb2YgQVNDSUktb25seSBzeW1ib2xzIHRvIGEgc3RyaW5nIG9mIFVuaWNvZGVcblx0ICogc3ltYm9scy5cblx0ICogQG1lbWJlck9mIHB1bnljb2RlXG5cdCAqIEBwYXJhbSB7U3RyaW5nfSBpbnB1dCBUaGUgUHVueWNvZGUgc3RyaW5nIG9mIEFTQ0lJLW9ubHkgc3ltYm9scy5cblx0ICogQHJldHVybnMge1N0cmluZ30gVGhlIHJlc3VsdGluZyBzdHJpbmcgb2YgVW5pY29kZSBzeW1ib2xzLlxuXHQgKi9cblx0ZnVuY3Rpb24gZGVjb2RlKGlucHV0KSB7XG5cdFx0Ly8gRG9uJ3QgdXNlIFVDUy0yXG5cdFx0dmFyIG91dHB1dCA9IFtdLFxuXHRcdCAgICBpbnB1dExlbmd0aCA9IGlucHV0Lmxlbmd0aCxcblx0XHQgICAgb3V0LFxuXHRcdCAgICBpID0gMCxcblx0XHQgICAgbiA9IGluaXRpYWxOLFxuXHRcdCAgICBiaWFzID0gaW5pdGlhbEJpYXMsXG5cdFx0ICAgIGJhc2ljLFxuXHRcdCAgICBqLFxuXHRcdCAgICBpbmRleCxcblx0XHQgICAgb2xkaSxcblx0XHQgICAgdyxcblx0XHQgICAgayxcblx0XHQgICAgZGlnaXQsXG5cdFx0ICAgIHQsXG5cdFx0ICAgIC8qKiBDYWNoZWQgY2FsY3VsYXRpb24gcmVzdWx0cyAqL1xuXHRcdCAgICBiYXNlTWludXNUO1xuXG5cdFx0Ly8gSGFuZGxlIHRoZSBiYXNpYyBjb2RlIHBvaW50czogbGV0IGBiYXNpY2AgYmUgdGhlIG51bWJlciBvZiBpbnB1dCBjb2RlXG5cdFx0Ly8gcG9pbnRzIGJlZm9yZSB0aGUgbGFzdCBkZWxpbWl0ZXIsIG9yIGAwYCBpZiB0aGVyZSBpcyBub25lLCB0aGVuIGNvcHlcblx0XHQvLyB0aGUgZmlyc3QgYmFzaWMgY29kZSBwb2ludHMgdG8gdGhlIG91dHB1dC5cblxuXHRcdGJhc2ljID0gaW5wdXQubGFzdEluZGV4T2YoZGVsaW1pdGVyKTtcblx0XHRpZiAoYmFzaWMgPCAwKSB7XG5cdFx0XHRiYXNpYyA9IDA7XG5cdFx0fVxuXG5cdFx0Zm9yIChqID0gMDsgaiA8IGJhc2ljOyArK2opIHtcblx0XHRcdC8vIGlmIGl0J3Mgbm90IGEgYmFzaWMgY29kZSBwb2ludFxuXHRcdFx0aWYgKGlucHV0LmNoYXJDb2RlQXQoaikgPj0gMHg4MCkge1xuXHRcdFx0XHRlcnJvcignbm90LWJhc2ljJyk7XG5cdFx0XHR9XG5cdFx0XHRvdXRwdXQucHVzaChpbnB1dC5jaGFyQ29kZUF0KGopKTtcblx0XHR9XG5cblx0XHQvLyBNYWluIGRlY29kaW5nIGxvb3A6IHN0YXJ0IGp1c3QgYWZ0ZXIgdGhlIGxhc3QgZGVsaW1pdGVyIGlmIGFueSBiYXNpYyBjb2RlXG5cdFx0Ly8gcG9pbnRzIHdlcmUgY29waWVkOyBzdGFydCBhdCB0aGUgYmVnaW5uaW5nIG90aGVyd2lzZS5cblxuXHRcdGZvciAoaW5kZXggPSBiYXNpYyA+IDAgPyBiYXNpYyArIDEgOiAwOyBpbmRleCA8IGlucHV0TGVuZ3RoOyAvKiBubyBmaW5hbCBleHByZXNzaW9uICovKSB7XG5cblx0XHRcdC8vIGBpbmRleGAgaXMgdGhlIGluZGV4IG9mIHRoZSBuZXh0IGNoYXJhY3RlciB0byBiZSBjb25zdW1lZC5cblx0XHRcdC8vIERlY29kZSBhIGdlbmVyYWxpemVkIHZhcmlhYmxlLWxlbmd0aCBpbnRlZ2VyIGludG8gYGRlbHRhYCxcblx0XHRcdC8vIHdoaWNoIGdldHMgYWRkZWQgdG8gYGlgLiBUaGUgb3ZlcmZsb3cgY2hlY2tpbmcgaXMgZWFzaWVyXG5cdFx0XHQvLyBpZiB3ZSBpbmNyZWFzZSBgaWAgYXMgd2UgZ28sIHRoZW4gc3VidHJhY3Qgb2ZmIGl0cyBzdGFydGluZ1xuXHRcdFx0Ly8gdmFsdWUgYXQgdGhlIGVuZCB0byBvYnRhaW4gYGRlbHRhYC5cblx0XHRcdGZvciAob2xkaSA9IGksIHcgPSAxLCBrID0gYmFzZTsgLyogbm8gY29uZGl0aW9uICovOyBrICs9IGJhc2UpIHtcblxuXHRcdFx0XHRpZiAoaW5kZXggPj0gaW5wdXRMZW5ndGgpIHtcblx0XHRcdFx0XHRlcnJvcignaW52YWxpZC1pbnB1dCcpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0ZGlnaXQgPSBiYXNpY1RvRGlnaXQoaW5wdXQuY2hhckNvZGVBdChpbmRleCsrKSk7XG5cblx0XHRcdFx0aWYgKGRpZ2l0ID49IGJhc2UgfHwgZGlnaXQgPiBmbG9vcigobWF4SW50IC0gaSkgLyB3KSkge1xuXHRcdFx0XHRcdGVycm9yKCdvdmVyZmxvdycpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0aSArPSBkaWdpdCAqIHc7XG5cdFx0XHRcdHQgPSBrIDw9IGJpYXMgPyB0TWluIDogKGsgPj0gYmlhcyArIHRNYXggPyB0TWF4IDogayAtIGJpYXMpO1xuXG5cdFx0XHRcdGlmIChkaWdpdCA8IHQpIHtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGJhc2VNaW51c1QgPSBiYXNlIC0gdDtcblx0XHRcdFx0aWYgKHcgPiBmbG9vcihtYXhJbnQgLyBiYXNlTWludXNUKSkge1xuXHRcdFx0XHRcdGVycm9yKCdvdmVyZmxvdycpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0dyAqPSBiYXNlTWludXNUO1xuXG5cdFx0XHR9XG5cblx0XHRcdG91dCA9IG91dHB1dC5sZW5ndGggKyAxO1xuXHRcdFx0YmlhcyA9IGFkYXB0KGkgLSBvbGRpLCBvdXQsIG9sZGkgPT0gMCk7XG5cblx0XHRcdC8vIGBpYCB3YXMgc3VwcG9zZWQgdG8gd3JhcCBhcm91bmQgZnJvbSBgb3V0YCB0byBgMGAsXG5cdFx0XHQvLyBpbmNyZW1lbnRpbmcgYG5gIGVhY2ggdGltZSwgc28gd2UnbGwgZml4IHRoYXQgbm93OlxuXHRcdFx0aWYgKGZsb29yKGkgLyBvdXQpID4gbWF4SW50IC0gbikge1xuXHRcdFx0XHRlcnJvcignb3ZlcmZsb3cnKTtcblx0XHRcdH1cblxuXHRcdFx0biArPSBmbG9vcihpIC8gb3V0KTtcblx0XHRcdGkgJT0gb3V0O1xuXG5cdFx0XHQvLyBJbnNlcnQgYG5gIGF0IHBvc2l0aW9uIGBpYCBvZiB0aGUgb3V0cHV0XG5cdFx0XHRvdXRwdXQuc3BsaWNlKGkrKywgMCwgbik7XG5cblx0XHR9XG5cblx0XHRyZXR1cm4gdWNzMmVuY29kZShvdXRwdXQpO1xuXHR9XG5cblx0LyoqXG5cdCAqIENvbnZlcnRzIGEgc3RyaW5nIG9mIFVuaWNvZGUgc3ltYm9scyAoZS5nLiBhIGRvbWFpbiBuYW1lIGxhYmVsKSB0byBhXG5cdCAqIFB1bnljb2RlIHN0cmluZyBvZiBBU0NJSS1vbmx5IHN5bWJvbHMuXG5cdCAqIEBtZW1iZXJPZiBwdW55Y29kZVxuXHQgKiBAcGFyYW0ge1N0cmluZ30gaW5wdXQgVGhlIHN0cmluZyBvZiBVbmljb2RlIHN5bWJvbHMuXG5cdCAqIEByZXR1cm5zIHtTdHJpbmd9IFRoZSByZXN1bHRpbmcgUHVueWNvZGUgc3RyaW5nIG9mIEFTQ0lJLW9ubHkgc3ltYm9scy5cblx0ICovXG5cdGZ1bmN0aW9uIGVuY29kZShpbnB1dCkge1xuXHRcdHZhciBuLFxuXHRcdCAgICBkZWx0YSxcblx0XHQgICAgaGFuZGxlZENQQ291bnQsXG5cdFx0ICAgIGJhc2ljTGVuZ3RoLFxuXHRcdCAgICBiaWFzLFxuXHRcdCAgICBqLFxuXHRcdCAgICBtLFxuXHRcdCAgICBxLFxuXHRcdCAgICBrLFxuXHRcdCAgICB0LFxuXHRcdCAgICBjdXJyZW50VmFsdWUsXG5cdFx0ICAgIG91dHB1dCA9IFtdLFxuXHRcdCAgICAvKiogYGlucHV0TGVuZ3RoYCB3aWxsIGhvbGQgdGhlIG51bWJlciBvZiBjb2RlIHBvaW50cyBpbiBgaW5wdXRgLiAqL1xuXHRcdCAgICBpbnB1dExlbmd0aCxcblx0XHQgICAgLyoqIENhY2hlZCBjYWxjdWxhdGlvbiByZXN1bHRzICovXG5cdFx0ICAgIGhhbmRsZWRDUENvdW50UGx1c09uZSxcblx0XHQgICAgYmFzZU1pbnVzVCxcblx0XHQgICAgcU1pbnVzVDtcblxuXHRcdC8vIENvbnZlcnQgdGhlIGlucHV0IGluIFVDUy0yIHRvIFVuaWNvZGVcblx0XHRpbnB1dCA9IHVjczJkZWNvZGUoaW5wdXQpO1xuXG5cdFx0Ly8gQ2FjaGUgdGhlIGxlbmd0aFxuXHRcdGlucHV0TGVuZ3RoID0gaW5wdXQubGVuZ3RoO1xuXG5cdFx0Ly8gSW5pdGlhbGl6ZSB0aGUgc3RhdGVcblx0XHRuID0gaW5pdGlhbE47XG5cdFx0ZGVsdGEgPSAwO1xuXHRcdGJpYXMgPSBpbml0aWFsQmlhcztcblxuXHRcdC8vIEhhbmRsZSB0aGUgYmFzaWMgY29kZSBwb2ludHNcblx0XHRmb3IgKGogPSAwOyBqIDwgaW5wdXRMZW5ndGg7ICsraikge1xuXHRcdFx0Y3VycmVudFZhbHVlID0gaW5wdXRbal07XG5cdFx0XHRpZiAoY3VycmVudFZhbHVlIDwgMHg4MCkge1xuXHRcdFx0XHRvdXRwdXQucHVzaChzdHJpbmdGcm9tQ2hhckNvZGUoY3VycmVudFZhbHVlKSk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0aGFuZGxlZENQQ291bnQgPSBiYXNpY0xlbmd0aCA9IG91dHB1dC5sZW5ndGg7XG5cblx0XHQvLyBgaGFuZGxlZENQQ291bnRgIGlzIHRoZSBudW1iZXIgb2YgY29kZSBwb2ludHMgdGhhdCBoYXZlIGJlZW4gaGFuZGxlZDtcblx0XHQvLyBgYmFzaWNMZW5ndGhgIGlzIHRoZSBudW1iZXIgb2YgYmFzaWMgY29kZSBwb2ludHMuXG5cblx0XHQvLyBGaW5pc2ggdGhlIGJhc2ljIHN0cmluZyAtIGlmIGl0IGlzIG5vdCBlbXB0eSAtIHdpdGggYSBkZWxpbWl0ZXJcblx0XHRpZiAoYmFzaWNMZW5ndGgpIHtcblx0XHRcdG91dHB1dC5wdXNoKGRlbGltaXRlcik7XG5cdFx0fVxuXG5cdFx0Ly8gTWFpbiBlbmNvZGluZyBsb29wOlxuXHRcdHdoaWxlIChoYW5kbGVkQ1BDb3VudCA8IGlucHV0TGVuZ3RoKSB7XG5cblx0XHRcdC8vIEFsbCBub24tYmFzaWMgY29kZSBwb2ludHMgPCBuIGhhdmUgYmVlbiBoYW5kbGVkIGFscmVhZHkuIEZpbmQgdGhlIG5leHRcblx0XHRcdC8vIGxhcmdlciBvbmU6XG5cdFx0XHRmb3IgKG0gPSBtYXhJbnQsIGogPSAwOyBqIDwgaW5wdXRMZW5ndGg7ICsraikge1xuXHRcdFx0XHRjdXJyZW50VmFsdWUgPSBpbnB1dFtqXTtcblx0XHRcdFx0aWYgKGN1cnJlbnRWYWx1ZSA+PSBuICYmIGN1cnJlbnRWYWx1ZSA8IG0pIHtcblx0XHRcdFx0XHRtID0gY3VycmVudFZhbHVlO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdC8vIEluY3JlYXNlIGBkZWx0YWAgZW5vdWdoIHRvIGFkdmFuY2UgdGhlIGRlY29kZXIncyA8bixpPiBzdGF0ZSB0byA8bSwwPixcblx0XHRcdC8vIGJ1dCBndWFyZCBhZ2FpbnN0IG92ZXJmbG93XG5cdFx0XHRoYW5kbGVkQ1BDb3VudFBsdXNPbmUgPSBoYW5kbGVkQ1BDb3VudCArIDE7XG5cdFx0XHRpZiAobSAtIG4gPiBmbG9vcigobWF4SW50IC0gZGVsdGEpIC8gaGFuZGxlZENQQ291bnRQbHVzT25lKSkge1xuXHRcdFx0XHRlcnJvcignb3ZlcmZsb3cnKTtcblx0XHRcdH1cblxuXHRcdFx0ZGVsdGEgKz0gKG0gLSBuKSAqIGhhbmRsZWRDUENvdW50UGx1c09uZTtcblx0XHRcdG4gPSBtO1xuXG5cdFx0XHRmb3IgKGogPSAwOyBqIDwgaW5wdXRMZW5ndGg7ICsraikge1xuXHRcdFx0XHRjdXJyZW50VmFsdWUgPSBpbnB1dFtqXTtcblxuXHRcdFx0XHRpZiAoY3VycmVudFZhbHVlIDwgbiAmJiArK2RlbHRhID4gbWF4SW50KSB7XG5cdFx0XHRcdFx0ZXJyb3IoJ292ZXJmbG93Jyk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZiAoY3VycmVudFZhbHVlID09IG4pIHtcblx0XHRcdFx0XHQvLyBSZXByZXNlbnQgZGVsdGEgYXMgYSBnZW5lcmFsaXplZCB2YXJpYWJsZS1sZW5ndGggaW50ZWdlclxuXHRcdFx0XHRcdGZvciAocSA9IGRlbHRhLCBrID0gYmFzZTsgLyogbm8gY29uZGl0aW9uICovOyBrICs9IGJhc2UpIHtcblx0XHRcdFx0XHRcdHQgPSBrIDw9IGJpYXMgPyB0TWluIDogKGsgPj0gYmlhcyArIHRNYXggPyB0TWF4IDogayAtIGJpYXMpO1xuXHRcdFx0XHRcdFx0aWYgKHEgPCB0KSB7XG5cdFx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0cU1pbnVzVCA9IHEgLSB0O1xuXHRcdFx0XHRcdFx0YmFzZU1pbnVzVCA9IGJhc2UgLSB0O1xuXHRcdFx0XHRcdFx0b3V0cHV0LnB1c2goXG5cdFx0XHRcdFx0XHRcdHN0cmluZ0Zyb21DaGFyQ29kZShkaWdpdFRvQmFzaWModCArIHFNaW51c1QgJSBiYXNlTWludXNULCAwKSlcblx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0XHRxID0gZmxvb3IocU1pbnVzVCAvIGJhc2VNaW51c1QpO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdG91dHB1dC5wdXNoKHN0cmluZ0Zyb21DaGFyQ29kZShkaWdpdFRvQmFzaWMocSwgMCkpKTtcblx0XHRcdFx0XHRiaWFzID0gYWRhcHQoZGVsdGEsIGhhbmRsZWRDUENvdW50UGx1c09uZSwgaGFuZGxlZENQQ291bnQgPT0gYmFzaWNMZW5ndGgpO1xuXHRcdFx0XHRcdGRlbHRhID0gMDtcblx0XHRcdFx0XHQrK2hhbmRsZWRDUENvdW50O1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdCsrZGVsdGE7XG5cdFx0XHQrK247XG5cblx0XHR9XG5cdFx0cmV0dXJuIG91dHB1dC5qb2luKCcnKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBDb252ZXJ0cyBhIFB1bnljb2RlIHN0cmluZyByZXByZXNlbnRpbmcgYSBkb21haW4gbmFtZSBvciBhbiBlbWFpbCBhZGRyZXNzXG5cdCAqIHRvIFVuaWNvZGUuIE9ubHkgdGhlIFB1bnljb2RlZCBwYXJ0cyBvZiB0aGUgaW5wdXQgd2lsbCBiZSBjb252ZXJ0ZWQsIGkuZS5cblx0ICogaXQgZG9lc24ndCBtYXR0ZXIgaWYgeW91IGNhbGwgaXQgb24gYSBzdHJpbmcgdGhhdCBoYXMgYWxyZWFkeSBiZWVuXG5cdCAqIGNvbnZlcnRlZCB0byBVbmljb2RlLlxuXHQgKiBAbWVtYmVyT2YgcHVueWNvZGVcblx0ICogQHBhcmFtIHtTdHJpbmd9IGlucHV0IFRoZSBQdW55Y29kZWQgZG9tYWluIG5hbWUgb3IgZW1haWwgYWRkcmVzcyB0b1xuXHQgKiBjb252ZXJ0IHRvIFVuaWNvZGUuXG5cdCAqIEByZXR1cm5zIHtTdHJpbmd9IFRoZSBVbmljb2RlIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBnaXZlbiBQdW55Y29kZVxuXHQgKiBzdHJpbmcuXG5cdCAqL1xuXHRmdW5jdGlvbiB0b1VuaWNvZGUoaW5wdXQpIHtcblx0XHRyZXR1cm4gbWFwRG9tYWluKGlucHV0LCBmdW5jdGlvbihzdHJpbmcpIHtcblx0XHRcdHJldHVybiByZWdleFB1bnljb2RlLnRlc3Qoc3RyaW5nKVxuXHRcdFx0XHQ/IGRlY29kZShzdHJpbmcuc2xpY2UoNCkudG9Mb3dlckNhc2UoKSlcblx0XHRcdFx0OiBzdHJpbmc7XG5cdFx0fSk7XG5cdH1cblxuXHQvKipcblx0ICogQ29udmVydHMgYSBVbmljb2RlIHN0cmluZyByZXByZXNlbnRpbmcgYSBkb21haW4gbmFtZSBvciBhbiBlbWFpbCBhZGRyZXNzIHRvXG5cdCAqIFB1bnljb2RlLiBPbmx5IHRoZSBub24tQVNDSUkgcGFydHMgb2YgdGhlIGRvbWFpbiBuYW1lIHdpbGwgYmUgY29udmVydGVkLFxuXHQgKiBpLmUuIGl0IGRvZXNuJ3QgbWF0dGVyIGlmIHlvdSBjYWxsIGl0IHdpdGggYSBkb21haW4gdGhhdCdzIGFscmVhZHkgaW5cblx0ICogQVNDSUkuXG5cdCAqIEBtZW1iZXJPZiBwdW55Y29kZVxuXHQgKiBAcGFyYW0ge1N0cmluZ30gaW5wdXQgVGhlIGRvbWFpbiBuYW1lIG9yIGVtYWlsIGFkZHJlc3MgdG8gY29udmVydCwgYXMgYVxuXHQgKiBVbmljb2RlIHN0cmluZy5cblx0ICogQHJldHVybnMge1N0cmluZ30gVGhlIFB1bnljb2RlIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBnaXZlbiBkb21haW4gbmFtZSBvclxuXHQgKiBlbWFpbCBhZGRyZXNzLlxuXHQgKi9cblx0ZnVuY3Rpb24gdG9BU0NJSShpbnB1dCkge1xuXHRcdHJldHVybiBtYXBEb21haW4oaW5wdXQsIGZ1bmN0aW9uKHN0cmluZykge1xuXHRcdFx0cmV0dXJuIHJlZ2V4Tm9uQVNDSUkudGVzdChzdHJpbmcpXG5cdFx0XHRcdD8gJ3huLS0nICsgZW5jb2RlKHN0cmluZylcblx0XHRcdFx0OiBzdHJpbmc7XG5cdFx0fSk7XG5cdH1cblxuXHQvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cblxuXHQvKiogRGVmaW5lIHRoZSBwdWJsaWMgQVBJICovXG5cdHB1bnljb2RlID0ge1xuXHRcdC8qKlxuXHRcdCAqIEEgc3RyaW5nIHJlcHJlc2VudGluZyB0aGUgY3VycmVudCBQdW55Y29kZS5qcyB2ZXJzaW9uIG51bWJlci5cblx0XHQgKiBAbWVtYmVyT2YgcHVueWNvZGVcblx0XHQgKiBAdHlwZSBTdHJpbmdcblx0XHQgKi9cblx0XHQndmVyc2lvbic6ICcxLjMuMicsXG5cdFx0LyoqXG5cdFx0ICogQW4gb2JqZWN0IG9mIG1ldGhvZHMgdG8gY29udmVydCBmcm9tIEphdmFTY3JpcHQncyBpbnRlcm5hbCBjaGFyYWN0ZXJcblx0XHQgKiByZXByZXNlbnRhdGlvbiAoVUNTLTIpIHRvIFVuaWNvZGUgY29kZSBwb2ludHMsIGFuZCBiYWNrLlxuXHRcdCAqIEBzZWUgPGh0dHBzOi8vbWF0aGlhc2J5bmVucy5iZS9ub3Rlcy9qYXZhc2NyaXB0LWVuY29kaW5nPlxuXHRcdCAqIEBtZW1iZXJPZiBwdW55Y29kZVxuXHRcdCAqIEB0eXBlIE9iamVjdFxuXHRcdCAqL1xuXHRcdCd1Y3MyJzoge1xuXHRcdFx0J2RlY29kZSc6IHVjczJkZWNvZGUsXG5cdFx0XHQnZW5jb2RlJzogdWNzMmVuY29kZVxuXHRcdH0sXG5cdFx0J2RlY29kZSc6IGRlY29kZSxcblx0XHQnZW5jb2RlJzogZW5jb2RlLFxuXHRcdCd0b0FTQ0lJJzogdG9BU0NJSSxcblx0XHQndG9Vbmljb2RlJzogdG9Vbmljb2RlXG5cdH07XG5cblx0LyoqIEV4cG9zZSBgcHVueWNvZGVgICovXG5cdC8vIFNvbWUgQU1EIGJ1aWxkIG9wdGltaXplcnMsIGxpa2Ugci5qcywgY2hlY2sgZm9yIHNwZWNpZmljIGNvbmRpdGlvbiBwYXR0ZXJuc1xuXHQvLyBsaWtlIHRoZSBmb2xsb3dpbmc6XG5cdGlmIChcblx0XHR0eXBlb2YgZGVmaW5lID09ICdmdW5jdGlvbicgJiZcblx0XHR0eXBlb2YgZGVmaW5lLmFtZCA9PSAnb2JqZWN0JyAmJlxuXHRcdGRlZmluZS5hbWRcblx0KSB7XG5cdFx0ZGVmaW5lKCdwdW55Y29kZScsIGZ1bmN0aW9uKCkge1xuXHRcdFx0cmV0dXJuIHB1bnljb2RlO1xuXHRcdH0pO1xuXHR9IGVsc2UgaWYgKGZyZWVFeHBvcnRzICYmIGZyZWVNb2R1bGUpIHtcblx0XHRpZiAobW9kdWxlLmV4cG9ydHMgPT0gZnJlZUV4cG9ydHMpIHtcblx0XHRcdC8vIGluIE5vZGUuanMsIGlvLmpzLCBvciBSaW5nb0pTIHYwLjguMCtcblx0XHRcdGZyZWVNb2R1bGUuZXhwb3J0cyA9IHB1bnljb2RlO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHQvLyBpbiBOYXJ3aGFsIG9yIFJpbmdvSlMgdjAuNy4wLVxuXHRcdFx0Zm9yIChrZXkgaW4gcHVueWNvZGUpIHtcblx0XHRcdFx0cHVueWNvZGUuaGFzT3duUHJvcGVydHkoa2V5KSAmJiAoZnJlZUV4cG9ydHNba2V5XSA9IHB1bnljb2RlW2tleV0pO1xuXHRcdFx0fVxuXHRcdH1cblx0fSBlbHNlIHtcblx0XHQvLyBpbiBSaGlubyBvciBhIHdlYiBicm93c2VyXG5cdFx0cm9vdC5wdW55Y29kZSA9IHB1bnljb2RlO1xuXHR9XG5cbn0odGhpcykpO1xuIiwiLy8gQ29weXJpZ2h0IEpveWVudCwgSW5jLiBhbmQgb3RoZXIgTm9kZSBjb250cmlidXRvcnMuXG4vL1xuLy8gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGFcbi8vIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGVcbi8vIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZ1xuLy8gd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLFxuLy8gZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdFxuLy8gcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlXG4vLyBmb2xsb3dpbmcgY29uZGl0aW9uczpcbi8vXG4vLyBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZFxuLy8gaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4vL1xuLy8gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTU1xuLy8gT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRlxuLy8gTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTlxuLy8gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sXG4vLyBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1Jcbi8vIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEVcbi8vIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG5cbid1c2Ugc3RyaWN0JztcblxuLy8gSWYgb2JqLmhhc093blByb3BlcnR5IGhhcyBiZWVuIG92ZXJyaWRkZW4sIHRoZW4gY2FsbGluZ1xuLy8gb2JqLmhhc093blByb3BlcnR5KHByb3ApIHdpbGwgYnJlYWsuXG4vLyBTZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9qb3llbnQvbm9kZS9pc3N1ZXMvMTcwN1xuZnVuY3Rpb24gaGFzT3duUHJvcGVydHkob2JqLCBwcm9wKSB7XG4gIHJldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqLCBwcm9wKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihxcywgc2VwLCBlcSwgb3B0aW9ucykge1xuICBzZXAgPSBzZXAgfHwgJyYnO1xuICBlcSA9IGVxIHx8ICc9JztcbiAgdmFyIG9iaiA9IHt9O1xuXG4gIGlmICh0eXBlb2YgcXMgIT09ICdzdHJpbmcnIHx8IHFzLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiBvYmo7XG4gIH1cblxuICB2YXIgcmVnZXhwID0gL1xcKy9nO1xuICBxcyA9IHFzLnNwbGl0KHNlcCk7XG5cbiAgdmFyIG1heEtleXMgPSAxMDAwO1xuICBpZiAob3B0aW9ucyAmJiB0eXBlb2Ygb3B0aW9ucy5tYXhLZXlzID09PSAnbnVtYmVyJykge1xuICAgIG1heEtleXMgPSBvcHRpb25zLm1heEtleXM7XG4gIH1cblxuICB2YXIgbGVuID0gcXMubGVuZ3RoO1xuICAvLyBtYXhLZXlzIDw9IDAgbWVhbnMgdGhhdCB3ZSBzaG91bGQgbm90IGxpbWl0IGtleXMgY291bnRcbiAgaWYgKG1heEtleXMgPiAwICYmIGxlbiA+IG1heEtleXMpIHtcbiAgICBsZW4gPSBtYXhLZXlzO1xuICB9XG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47ICsraSkge1xuICAgIHZhciB4ID0gcXNbaV0ucmVwbGFjZShyZWdleHAsICclMjAnKSxcbiAgICAgICAgaWR4ID0geC5pbmRleE9mKGVxKSxcbiAgICAgICAga3N0ciwgdnN0ciwgaywgdjtcblxuICAgIGlmIChpZHggPj0gMCkge1xuICAgICAga3N0ciA9IHguc3Vic3RyKDAsIGlkeCk7XG4gICAgICB2c3RyID0geC5zdWJzdHIoaWR4ICsgMSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGtzdHIgPSB4O1xuICAgICAgdnN0ciA9ICcnO1xuICAgIH1cblxuICAgIGsgPSBkZWNvZGVVUklDb21wb25lbnQoa3N0cik7XG4gICAgdiA9IGRlY29kZVVSSUNvbXBvbmVudCh2c3RyKTtcblxuICAgIGlmICghaGFzT3duUHJvcGVydHkob2JqLCBrKSkge1xuICAgICAgb2JqW2tdID0gdjtcbiAgICB9IGVsc2UgaWYgKGlzQXJyYXkob2JqW2tdKSkge1xuICAgICAgb2JqW2tdLnB1c2godik7XG4gICAgfSBlbHNlIHtcbiAgICAgIG9ialtrXSA9IFtvYmpba10sIHZdO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBvYmo7XG59O1xuXG52YXIgaXNBcnJheSA9IEFycmF5LmlzQXJyYXkgfHwgZnVuY3Rpb24gKHhzKSB7XG4gIHJldHVybiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoeHMpID09PSAnW29iamVjdCBBcnJheV0nO1xufTtcbiIsIi8vIENvcHlyaWdodCBKb3llbnQsIEluYy4gYW5kIG90aGVyIE5vZGUgY29udHJpYnV0b3JzLlxuLy9cbi8vIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhXG4vLyBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlXG4vLyBcIlNvZnR3YXJlXCIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmdcbi8vIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCxcbi8vIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXRcbi8vIHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZVxuLy8gZm9sbG93aW5nIGNvbmRpdGlvbnM6XG4vL1xuLy8gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWRcbi8vIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuLy9cbi8vIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1Ncbi8vIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0Zcbi8vIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU5cbi8vIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLFxuLy8gREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SXG4vLyBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFXG4vLyBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLlxuXG4ndXNlIHN0cmljdCc7XG5cbnZhciBzdHJpbmdpZnlQcmltaXRpdmUgPSBmdW5jdGlvbih2KSB7XG4gIHN3aXRjaCAodHlwZW9mIHYpIHtcbiAgICBjYXNlICdzdHJpbmcnOlxuICAgICAgcmV0dXJuIHY7XG5cbiAgICBjYXNlICdib29sZWFuJzpcbiAgICAgIHJldHVybiB2ID8gJ3RydWUnIDogJ2ZhbHNlJztcblxuICAgIGNhc2UgJ251bWJlcic6XG4gICAgICByZXR1cm4gaXNGaW5pdGUodikgPyB2IDogJyc7XG5cbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuICcnO1xuICB9XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKG9iaiwgc2VwLCBlcSwgbmFtZSkge1xuICBzZXAgPSBzZXAgfHwgJyYnO1xuICBlcSA9IGVxIHx8ICc9JztcbiAgaWYgKG9iaiA9PT0gbnVsbCkge1xuICAgIG9iaiA9IHVuZGVmaW5lZDtcbiAgfVxuXG4gIGlmICh0eXBlb2Ygb2JqID09PSAnb2JqZWN0Jykge1xuICAgIHJldHVybiBtYXAob2JqZWN0S2V5cyhvYmopLCBmdW5jdGlvbihrKSB7XG4gICAgICB2YXIga3MgPSBlbmNvZGVVUklDb21wb25lbnQoc3RyaW5naWZ5UHJpbWl0aXZlKGspKSArIGVxO1xuICAgICAgaWYgKGlzQXJyYXkob2JqW2tdKSkge1xuICAgICAgICByZXR1cm4gbWFwKG9ialtrXSwgZnVuY3Rpb24odikge1xuICAgICAgICAgIHJldHVybiBrcyArIGVuY29kZVVSSUNvbXBvbmVudChzdHJpbmdpZnlQcmltaXRpdmUodikpO1xuICAgICAgICB9KS5qb2luKHNlcCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4ga3MgKyBlbmNvZGVVUklDb21wb25lbnQoc3RyaW5naWZ5UHJpbWl0aXZlKG9ialtrXSkpO1xuICAgICAgfVxuICAgIH0pLmpvaW4oc2VwKTtcblxuICB9XG5cbiAgaWYgKCFuYW1lKSByZXR1cm4gJyc7XG4gIHJldHVybiBlbmNvZGVVUklDb21wb25lbnQoc3RyaW5naWZ5UHJpbWl0aXZlKG5hbWUpKSArIGVxICtcbiAgICAgICAgIGVuY29kZVVSSUNvbXBvbmVudChzdHJpbmdpZnlQcmltaXRpdmUob2JqKSk7XG59O1xuXG52YXIgaXNBcnJheSA9IEFycmF5LmlzQXJyYXkgfHwgZnVuY3Rpb24gKHhzKSB7XG4gIHJldHVybiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoeHMpID09PSAnW29iamVjdCBBcnJheV0nO1xufTtcblxuZnVuY3Rpb24gbWFwICh4cywgZikge1xuICBpZiAoeHMubWFwKSByZXR1cm4geHMubWFwKGYpO1xuICB2YXIgcmVzID0gW107XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgeHMubGVuZ3RoOyBpKyspIHtcbiAgICByZXMucHVzaChmKHhzW2ldLCBpKSk7XG4gIH1cbiAgcmV0dXJuIHJlcztcbn1cblxudmFyIG9iamVjdEtleXMgPSBPYmplY3Qua2V5cyB8fCBmdW5jdGlvbiAob2JqKSB7XG4gIHZhciByZXMgPSBbXTtcbiAgZm9yICh2YXIga2V5IGluIG9iaikge1xuICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqLCBrZXkpKSByZXMucHVzaChrZXkpO1xuICB9XG4gIHJldHVybiByZXM7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG5leHBvcnRzLmRlY29kZSA9IGV4cG9ydHMucGFyc2UgPSByZXF1aXJlKCcuL2RlY29kZScpO1xuZXhwb3J0cy5lbmNvZGUgPSBleHBvcnRzLnN0cmluZ2lmeSA9IHJlcXVpcmUoJy4vZW5jb2RlJyk7XG4iLCIvLyBDb3B5cmlnaHQgSm95ZW50LCBJbmMuIGFuZCBvdGhlciBOb2RlIGNvbnRyaWJ1dG9ycy5cbi8vXG4vLyBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYVxuLy8gY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZVxuLy8gXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nXG4vLyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsXG4vLyBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0XG4vLyBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGVcbi8vIGZvbGxvd2luZyBjb25kaXRpb25zOlxuLy9cbi8vIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkXG4vLyBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbi8vXG4vLyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTXG4vLyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GXG4vLyBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOXG4vLyBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSxcbi8vIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUlxuLy8gT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRVxuLy8gVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cblxudmFyIHB1bnljb2RlID0gcmVxdWlyZSgncHVueWNvZGUnKTtcblxuZXhwb3J0cy5wYXJzZSA9IHVybFBhcnNlO1xuZXhwb3J0cy5yZXNvbHZlID0gdXJsUmVzb2x2ZTtcbmV4cG9ydHMucmVzb2x2ZU9iamVjdCA9IHVybFJlc29sdmVPYmplY3Q7XG5leHBvcnRzLmZvcm1hdCA9IHVybEZvcm1hdDtcblxuZXhwb3J0cy5VcmwgPSBVcmw7XG5cbmZ1bmN0aW9uIFVybCgpIHtcbiAgdGhpcy5wcm90b2NvbCA9IG51bGw7XG4gIHRoaXMuc2xhc2hlcyA9IG51bGw7XG4gIHRoaXMuYXV0aCA9IG51bGw7XG4gIHRoaXMuaG9zdCA9IG51bGw7XG4gIHRoaXMucG9ydCA9IG51bGw7XG4gIHRoaXMuaG9zdG5hbWUgPSBudWxsO1xuICB0aGlzLmhhc2ggPSBudWxsO1xuICB0aGlzLnNlYXJjaCA9IG51bGw7XG4gIHRoaXMucXVlcnkgPSBudWxsO1xuICB0aGlzLnBhdGhuYW1lID0gbnVsbDtcbiAgdGhpcy5wYXRoID0gbnVsbDtcbiAgdGhpcy5ocmVmID0gbnVsbDtcbn1cblxuLy8gUmVmZXJlbmNlOiBSRkMgMzk4NiwgUkZDIDE4MDgsIFJGQyAyMzk2XG5cbi8vIGRlZmluZSB0aGVzZSBoZXJlIHNvIGF0IGxlYXN0IHRoZXkgb25seSBoYXZlIHRvIGJlXG4vLyBjb21waWxlZCBvbmNlIG9uIHRoZSBmaXJzdCBtb2R1bGUgbG9hZC5cbnZhciBwcm90b2NvbFBhdHRlcm4gPSAvXihbYS16MC05ListXSs6KS9pLFxuICAgIHBvcnRQYXR0ZXJuID0gLzpbMC05XSokLyxcblxuICAgIC8vIFJGQyAyMzk2OiBjaGFyYWN0ZXJzIHJlc2VydmVkIGZvciBkZWxpbWl0aW5nIFVSTHMuXG4gICAgLy8gV2UgYWN0dWFsbHkganVzdCBhdXRvLWVzY2FwZSB0aGVzZS5cbiAgICBkZWxpbXMgPSBbJzwnLCAnPicsICdcIicsICdgJywgJyAnLCAnXFxyJywgJ1xcbicsICdcXHQnXSxcblxuICAgIC8vIFJGQyAyMzk2OiBjaGFyYWN0ZXJzIG5vdCBhbGxvd2VkIGZvciB2YXJpb3VzIHJlYXNvbnMuXG4gICAgdW53aXNlID0gWyd7JywgJ30nLCAnfCcsICdcXFxcJywgJ14nLCAnYCddLmNvbmNhdChkZWxpbXMpLFxuXG4gICAgLy8gQWxsb3dlZCBieSBSRkNzLCBidXQgY2F1c2Ugb2YgWFNTIGF0dGFja3MuICBBbHdheXMgZXNjYXBlIHRoZXNlLlxuICAgIGF1dG9Fc2NhcGUgPSBbJ1xcJyddLmNvbmNhdCh1bndpc2UpLFxuICAgIC8vIENoYXJhY3RlcnMgdGhhdCBhcmUgbmV2ZXIgZXZlciBhbGxvd2VkIGluIGEgaG9zdG5hbWUuXG4gICAgLy8gTm90ZSB0aGF0IGFueSBpbnZhbGlkIGNoYXJzIGFyZSBhbHNvIGhhbmRsZWQsIGJ1dCB0aGVzZVxuICAgIC8vIGFyZSB0aGUgb25lcyB0aGF0IGFyZSAqZXhwZWN0ZWQqIHRvIGJlIHNlZW4sIHNvIHdlIGZhc3QtcGF0aFxuICAgIC8vIHRoZW0uXG4gICAgbm9uSG9zdENoYXJzID0gWyclJywgJy8nLCAnPycsICc7JywgJyMnXS5jb25jYXQoYXV0b0VzY2FwZSksXG4gICAgaG9zdEVuZGluZ0NoYXJzID0gWycvJywgJz8nLCAnIyddLFxuICAgIGhvc3RuYW1lTWF4TGVuID0gMjU1LFxuICAgIGhvc3RuYW1lUGFydFBhdHRlcm4gPSAvXlthLXowLTlBLVpfLV17MCw2M30kLyxcbiAgICBob3N0bmFtZVBhcnRTdGFydCA9IC9eKFthLXowLTlBLVpfLV17MCw2M30pKC4qKSQvLFxuICAgIC8vIHByb3RvY29scyB0aGF0IGNhbiBhbGxvdyBcInVuc2FmZVwiIGFuZCBcInVud2lzZVwiIGNoYXJzLlxuICAgIHVuc2FmZVByb3RvY29sID0ge1xuICAgICAgJ2phdmFzY3JpcHQnOiB0cnVlLFxuICAgICAgJ2phdmFzY3JpcHQ6JzogdHJ1ZVxuICAgIH0sXG4gICAgLy8gcHJvdG9jb2xzIHRoYXQgbmV2ZXIgaGF2ZSBhIGhvc3RuYW1lLlxuICAgIGhvc3RsZXNzUHJvdG9jb2wgPSB7XG4gICAgICAnamF2YXNjcmlwdCc6IHRydWUsXG4gICAgICAnamF2YXNjcmlwdDonOiB0cnVlXG4gICAgfSxcbiAgICAvLyBwcm90b2NvbHMgdGhhdCBhbHdheXMgY29udGFpbiBhIC8vIGJpdC5cbiAgICBzbGFzaGVkUHJvdG9jb2wgPSB7XG4gICAgICAnaHR0cCc6IHRydWUsXG4gICAgICAnaHR0cHMnOiB0cnVlLFxuICAgICAgJ2Z0cCc6IHRydWUsXG4gICAgICAnZ29waGVyJzogdHJ1ZSxcbiAgICAgICdmaWxlJzogdHJ1ZSxcbiAgICAgICdodHRwOic6IHRydWUsXG4gICAgICAnaHR0cHM6JzogdHJ1ZSxcbiAgICAgICdmdHA6JzogdHJ1ZSxcbiAgICAgICdnb3BoZXI6JzogdHJ1ZSxcbiAgICAgICdmaWxlOic6IHRydWVcbiAgICB9LFxuICAgIHF1ZXJ5c3RyaW5nID0gcmVxdWlyZSgncXVlcnlzdHJpbmcnKTtcblxuZnVuY3Rpb24gdXJsUGFyc2UodXJsLCBwYXJzZVF1ZXJ5U3RyaW5nLCBzbGFzaGVzRGVub3RlSG9zdCkge1xuICBpZiAodXJsICYmIGlzT2JqZWN0KHVybCkgJiYgdXJsIGluc3RhbmNlb2YgVXJsKSByZXR1cm4gdXJsO1xuXG4gIHZhciB1ID0gbmV3IFVybDtcbiAgdS5wYXJzZSh1cmwsIHBhcnNlUXVlcnlTdHJpbmcsIHNsYXNoZXNEZW5vdGVIb3N0KTtcbiAgcmV0dXJuIHU7XG59XG5cblVybC5wcm90b3R5cGUucGFyc2UgPSBmdW5jdGlvbih1cmwsIHBhcnNlUXVlcnlTdHJpbmcsIHNsYXNoZXNEZW5vdGVIb3N0KSB7XG4gIGlmICghaXNTdHJpbmcodXJsKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJQYXJhbWV0ZXIgJ3VybCcgbXVzdCBiZSBhIHN0cmluZywgbm90IFwiICsgdHlwZW9mIHVybCk7XG4gIH1cblxuICB2YXIgcmVzdCA9IHVybDtcblxuICAvLyB0cmltIGJlZm9yZSBwcm9jZWVkaW5nLlxuICAvLyBUaGlzIGlzIHRvIHN1cHBvcnQgcGFyc2Ugc3R1ZmYgbGlrZSBcIiAgaHR0cDovL2Zvby5jb20gIFxcblwiXG4gIHJlc3QgPSByZXN0LnRyaW0oKTtcblxuICB2YXIgcHJvdG8gPSBwcm90b2NvbFBhdHRlcm4uZXhlYyhyZXN0KTtcbiAgaWYgKHByb3RvKSB7XG4gICAgcHJvdG8gPSBwcm90b1swXTtcbiAgICB2YXIgbG93ZXJQcm90byA9IHByb3RvLnRvTG93ZXJDYXNlKCk7XG4gICAgdGhpcy5wcm90b2NvbCA9IGxvd2VyUHJvdG87XG4gICAgcmVzdCA9IHJlc3Quc3Vic3RyKHByb3RvLmxlbmd0aCk7XG4gIH1cblxuICAvLyBmaWd1cmUgb3V0IGlmIGl0J3MgZ290IGEgaG9zdFxuICAvLyB1c2VyQHNlcnZlciBpcyAqYWx3YXlzKiBpbnRlcnByZXRlZCBhcyBhIGhvc3RuYW1lLCBhbmQgdXJsXG4gIC8vIHJlc29sdXRpb24gd2lsbCB0cmVhdCAvL2Zvby9iYXIgYXMgaG9zdD1mb28scGF0aD1iYXIgYmVjYXVzZSB0aGF0J3NcbiAgLy8gaG93IHRoZSBicm93c2VyIHJlc29sdmVzIHJlbGF0aXZlIFVSTHMuXG4gIGlmIChzbGFzaGVzRGVub3RlSG9zdCB8fCBwcm90byB8fCByZXN0Lm1hdGNoKC9eXFwvXFwvW15AXFwvXStAW15AXFwvXSsvKSkge1xuICAgIHZhciBzbGFzaGVzID0gcmVzdC5zdWJzdHIoMCwgMikgPT09ICcvLyc7XG4gICAgaWYgKHNsYXNoZXMgJiYgIShwcm90byAmJiBob3N0bGVzc1Byb3RvY29sW3Byb3RvXSkpIHtcbiAgICAgIHJlc3QgPSByZXN0LnN1YnN0cigyKTtcbiAgICAgIHRoaXMuc2xhc2hlcyA9IHRydWU7XG4gICAgfVxuICB9XG5cbiAgaWYgKCFob3N0bGVzc1Byb3RvY29sW3Byb3RvXSAmJlxuICAgICAgKHNsYXNoZXMgfHwgKHByb3RvICYmICFzbGFzaGVkUHJvdG9jb2xbcHJvdG9dKSkpIHtcblxuICAgIC8vIHRoZXJlJ3MgYSBob3N0bmFtZS5cbiAgICAvLyB0aGUgZmlyc3QgaW5zdGFuY2Ugb2YgLywgPywgOywgb3IgIyBlbmRzIHRoZSBob3N0LlxuICAgIC8vXG4gICAgLy8gSWYgdGhlcmUgaXMgYW4gQCBpbiB0aGUgaG9zdG5hbWUsIHRoZW4gbm9uLWhvc3QgY2hhcnMgKmFyZSogYWxsb3dlZFxuICAgIC8vIHRvIHRoZSBsZWZ0IG9mIHRoZSBsYXN0IEAgc2lnbiwgdW5sZXNzIHNvbWUgaG9zdC1lbmRpbmcgY2hhcmFjdGVyXG4gICAgLy8gY29tZXMgKmJlZm9yZSogdGhlIEAtc2lnbi5cbiAgICAvLyBVUkxzIGFyZSBvYm5veGlvdXMuXG4gICAgLy9cbiAgICAvLyBleDpcbiAgICAvLyBodHRwOi8vYUBiQGMvID0+IHVzZXI6YUBiIGhvc3Q6Y1xuICAgIC8vIGh0dHA6Ly9hQGI/QGMgPT4gdXNlcjphIGhvc3Q6YyBwYXRoOi8/QGNcblxuICAgIC8vIHYwLjEyIFRPRE8oaXNhYWNzKTogVGhpcyBpcyBub3QgcXVpdGUgaG93IENocm9tZSBkb2VzIHRoaW5ncy5cbiAgICAvLyBSZXZpZXcgb3VyIHRlc3QgY2FzZSBhZ2FpbnN0IGJyb3dzZXJzIG1vcmUgY29tcHJlaGVuc2l2ZWx5LlxuXG4gICAgLy8gZmluZCB0aGUgZmlyc3QgaW5zdGFuY2Ugb2YgYW55IGhvc3RFbmRpbmdDaGFyc1xuICAgIHZhciBob3N0RW5kID0gLTE7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBob3N0RW5kaW5nQ2hhcnMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBoZWMgPSByZXN0LmluZGV4T2YoaG9zdEVuZGluZ0NoYXJzW2ldKTtcbiAgICAgIGlmIChoZWMgIT09IC0xICYmIChob3N0RW5kID09PSAtMSB8fCBoZWMgPCBob3N0RW5kKSlcbiAgICAgICAgaG9zdEVuZCA9IGhlYztcbiAgICB9XG5cbiAgICAvLyBhdCB0aGlzIHBvaW50LCBlaXRoZXIgd2UgaGF2ZSBhbiBleHBsaWNpdCBwb2ludCB3aGVyZSB0aGVcbiAgICAvLyBhdXRoIHBvcnRpb24gY2Fubm90IGdvIHBhc3QsIG9yIHRoZSBsYXN0IEAgY2hhciBpcyB0aGUgZGVjaWRlci5cbiAgICB2YXIgYXV0aCwgYXRTaWduO1xuICAgIGlmIChob3N0RW5kID09PSAtMSkge1xuICAgICAgLy8gYXRTaWduIGNhbiBiZSBhbnl3aGVyZS5cbiAgICAgIGF0U2lnbiA9IHJlc3QubGFzdEluZGV4T2YoJ0AnKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gYXRTaWduIG11c3QgYmUgaW4gYXV0aCBwb3J0aW9uLlxuICAgICAgLy8gaHR0cDovL2FAYi9jQGQgPT4gaG9zdDpiIGF1dGg6YSBwYXRoOi9jQGRcbiAgICAgIGF0U2lnbiA9IHJlc3QubGFzdEluZGV4T2YoJ0AnLCBob3N0RW5kKTtcbiAgICB9XG5cbiAgICAvLyBOb3cgd2UgaGF2ZSBhIHBvcnRpb24gd2hpY2ggaXMgZGVmaW5pdGVseSB0aGUgYXV0aC5cbiAgICAvLyBQdWxsIHRoYXQgb2ZmLlxuICAgIGlmIChhdFNpZ24gIT09IC0xKSB7XG4gICAgICBhdXRoID0gcmVzdC5zbGljZSgwLCBhdFNpZ24pO1xuICAgICAgcmVzdCA9IHJlc3Quc2xpY2UoYXRTaWduICsgMSk7XG4gICAgICB0aGlzLmF1dGggPSBkZWNvZGVVUklDb21wb25lbnQoYXV0aCk7XG4gICAgfVxuXG4gICAgLy8gdGhlIGhvc3QgaXMgdGhlIHJlbWFpbmluZyB0byB0aGUgbGVmdCBvZiB0aGUgZmlyc3Qgbm9uLWhvc3QgY2hhclxuICAgIGhvc3RFbmQgPSAtMTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG5vbkhvc3RDaGFycy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGhlYyA9IHJlc3QuaW5kZXhPZihub25Ib3N0Q2hhcnNbaV0pO1xuICAgICAgaWYgKGhlYyAhPT0gLTEgJiYgKGhvc3RFbmQgPT09IC0xIHx8IGhlYyA8IGhvc3RFbmQpKVxuICAgICAgICBob3N0RW5kID0gaGVjO1xuICAgIH1cbiAgICAvLyBpZiB3ZSBzdGlsbCBoYXZlIG5vdCBoaXQgaXQsIHRoZW4gdGhlIGVudGlyZSB0aGluZyBpcyBhIGhvc3QuXG4gICAgaWYgKGhvc3RFbmQgPT09IC0xKVxuICAgICAgaG9zdEVuZCA9IHJlc3QubGVuZ3RoO1xuXG4gICAgdGhpcy5ob3N0ID0gcmVzdC5zbGljZSgwLCBob3N0RW5kKTtcbiAgICByZXN0ID0gcmVzdC5zbGljZShob3N0RW5kKTtcblxuICAgIC8vIHB1bGwgb3V0IHBvcnQuXG4gICAgdGhpcy5wYXJzZUhvc3QoKTtcblxuICAgIC8vIHdlJ3ZlIGluZGljYXRlZCB0aGF0IHRoZXJlIGlzIGEgaG9zdG5hbWUsXG4gICAgLy8gc28gZXZlbiBpZiBpdCdzIGVtcHR5LCBpdCBoYXMgdG8gYmUgcHJlc2VudC5cbiAgICB0aGlzLmhvc3RuYW1lID0gdGhpcy5ob3N0bmFtZSB8fCAnJztcblxuICAgIC8vIGlmIGhvc3RuYW1lIGJlZ2lucyB3aXRoIFsgYW5kIGVuZHMgd2l0aCBdXG4gICAgLy8gYXNzdW1lIHRoYXQgaXQncyBhbiBJUHY2IGFkZHJlc3MuXG4gICAgdmFyIGlwdjZIb3N0bmFtZSA9IHRoaXMuaG9zdG5hbWVbMF0gPT09ICdbJyAmJlxuICAgICAgICB0aGlzLmhvc3RuYW1lW3RoaXMuaG9zdG5hbWUubGVuZ3RoIC0gMV0gPT09ICddJztcblxuICAgIC8vIHZhbGlkYXRlIGEgbGl0dGxlLlxuICAgIGlmICghaXB2Nkhvc3RuYW1lKSB7XG4gICAgICB2YXIgaG9zdHBhcnRzID0gdGhpcy5ob3N0bmFtZS5zcGxpdCgvXFwuLyk7XG4gICAgICBmb3IgKHZhciBpID0gMCwgbCA9IGhvc3RwYXJ0cy5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICAgICAgdmFyIHBhcnQgPSBob3N0cGFydHNbaV07XG4gICAgICAgIGlmICghcGFydCkgY29udGludWU7XG4gICAgICAgIGlmICghcGFydC5tYXRjaChob3N0bmFtZVBhcnRQYXR0ZXJuKSkge1xuICAgICAgICAgIHZhciBuZXdwYXJ0ID0gJyc7XG4gICAgICAgICAgZm9yICh2YXIgaiA9IDAsIGsgPSBwYXJ0Lmxlbmd0aDsgaiA8IGs7IGorKykge1xuICAgICAgICAgICAgaWYgKHBhcnQuY2hhckNvZGVBdChqKSA+IDEyNykge1xuICAgICAgICAgICAgICAvLyB3ZSByZXBsYWNlIG5vbi1BU0NJSSBjaGFyIHdpdGggYSB0ZW1wb3JhcnkgcGxhY2Vob2xkZXJcbiAgICAgICAgICAgICAgLy8gd2UgbmVlZCB0aGlzIHRvIG1ha2Ugc3VyZSBzaXplIG9mIGhvc3RuYW1lIGlzIG5vdFxuICAgICAgICAgICAgICAvLyBicm9rZW4gYnkgcmVwbGFjaW5nIG5vbi1BU0NJSSBieSBub3RoaW5nXG4gICAgICAgICAgICAgIG5ld3BhcnQgKz0gJ3gnO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgbmV3cGFydCArPSBwYXJ0W2pdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICAvLyB3ZSB0ZXN0IGFnYWluIHdpdGggQVNDSUkgY2hhciBvbmx5XG4gICAgICAgICAgaWYgKCFuZXdwYXJ0Lm1hdGNoKGhvc3RuYW1lUGFydFBhdHRlcm4pKSB7XG4gICAgICAgICAgICB2YXIgdmFsaWRQYXJ0cyA9IGhvc3RwYXJ0cy5zbGljZSgwLCBpKTtcbiAgICAgICAgICAgIHZhciBub3RIb3N0ID0gaG9zdHBhcnRzLnNsaWNlKGkgKyAxKTtcbiAgICAgICAgICAgIHZhciBiaXQgPSBwYXJ0Lm1hdGNoKGhvc3RuYW1lUGFydFN0YXJ0KTtcbiAgICAgICAgICAgIGlmIChiaXQpIHtcbiAgICAgICAgICAgICAgdmFsaWRQYXJ0cy5wdXNoKGJpdFsxXSk7XG4gICAgICAgICAgICAgIG5vdEhvc3QudW5zaGlmdChiaXRbMl0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKG5vdEhvc3QubGVuZ3RoKSB7XG4gICAgICAgICAgICAgIHJlc3QgPSAnLycgKyBub3RIb3N0LmpvaW4oJy4nKSArIHJlc3Q7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmhvc3RuYW1lID0gdmFsaWRQYXJ0cy5qb2luKCcuJyk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodGhpcy5ob3N0bmFtZS5sZW5ndGggPiBob3N0bmFtZU1heExlbikge1xuICAgICAgdGhpcy5ob3N0bmFtZSA9ICcnO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBob3N0bmFtZXMgYXJlIGFsd2F5cyBsb3dlciBjYXNlLlxuICAgICAgdGhpcy5ob3N0bmFtZSA9IHRoaXMuaG9zdG5hbWUudG9Mb3dlckNhc2UoKTtcbiAgICB9XG5cbiAgICBpZiAoIWlwdjZIb3N0bmFtZSkge1xuICAgICAgLy8gSUROQSBTdXBwb3J0OiBSZXR1cm5zIGEgcHVueSBjb2RlZCByZXByZXNlbnRhdGlvbiBvZiBcImRvbWFpblwiLlxuICAgICAgLy8gSXQgb25seSBjb252ZXJ0cyB0aGUgcGFydCBvZiB0aGUgZG9tYWluIG5hbWUgdGhhdFxuICAgICAgLy8gaGFzIG5vbiBBU0NJSSBjaGFyYWN0ZXJzLiBJLmUuIGl0IGRvc2VudCBtYXR0ZXIgaWZcbiAgICAgIC8vIHlvdSBjYWxsIGl0IHdpdGggYSBkb21haW4gdGhhdCBhbHJlYWR5IGlzIGluIEFTQ0lJLlxuICAgICAgdmFyIGRvbWFpbkFycmF5ID0gdGhpcy5ob3N0bmFtZS5zcGxpdCgnLicpO1xuICAgICAgdmFyIG5ld091dCA9IFtdO1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBkb21haW5BcnJheS5sZW5ndGg7ICsraSkge1xuICAgICAgICB2YXIgcyA9IGRvbWFpbkFycmF5W2ldO1xuICAgICAgICBuZXdPdXQucHVzaChzLm1hdGNoKC9bXkEtWmEtejAtOV8tXS8pID9cbiAgICAgICAgICAgICd4bi0tJyArIHB1bnljb2RlLmVuY29kZShzKSA6IHMpO1xuICAgICAgfVxuICAgICAgdGhpcy5ob3N0bmFtZSA9IG5ld091dC5qb2luKCcuJyk7XG4gICAgfVxuXG4gICAgdmFyIHAgPSB0aGlzLnBvcnQgPyAnOicgKyB0aGlzLnBvcnQgOiAnJztcbiAgICB2YXIgaCA9IHRoaXMuaG9zdG5hbWUgfHwgJyc7XG4gICAgdGhpcy5ob3N0ID0gaCArIHA7XG4gICAgdGhpcy5ocmVmICs9IHRoaXMuaG9zdDtcblxuICAgIC8vIHN0cmlwIFsgYW5kIF0gZnJvbSB0aGUgaG9zdG5hbWVcbiAgICAvLyB0aGUgaG9zdCBmaWVsZCBzdGlsbCByZXRhaW5zIHRoZW0sIHRob3VnaFxuICAgIGlmIChpcHY2SG9zdG5hbWUpIHtcbiAgICAgIHRoaXMuaG9zdG5hbWUgPSB0aGlzLmhvc3RuYW1lLnN1YnN0cigxLCB0aGlzLmhvc3RuYW1lLmxlbmd0aCAtIDIpO1xuICAgICAgaWYgKHJlc3RbMF0gIT09ICcvJykge1xuICAgICAgICByZXN0ID0gJy8nICsgcmVzdDtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyBub3cgcmVzdCBpcyBzZXQgdG8gdGhlIHBvc3QtaG9zdCBzdHVmZi5cbiAgLy8gY2hvcCBvZmYgYW55IGRlbGltIGNoYXJzLlxuICBpZiAoIXVuc2FmZVByb3RvY29sW2xvd2VyUHJvdG9dKSB7XG5cbiAgICAvLyBGaXJzdCwgbWFrZSAxMDAlIHN1cmUgdGhhdCBhbnkgXCJhdXRvRXNjYXBlXCIgY2hhcnMgZ2V0XG4gICAgLy8gZXNjYXBlZCwgZXZlbiBpZiBlbmNvZGVVUklDb21wb25lbnQgZG9lc24ndCB0aGluayB0aGV5XG4gICAgLy8gbmVlZCB0byBiZS5cbiAgICBmb3IgKHZhciBpID0gMCwgbCA9IGF1dG9Fc2NhcGUubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgICB2YXIgYWUgPSBhdXRvRXNjYXBlW2ldO1xuICAgICAgdmFyIGVzYyA9IGVuY29kZVVSSUNvbXBvbmVudChhZSk7XG4gICAgICBpZiAoZXNjID09PSBhZSkge1xuICAgICAgICBlc2MgPSBlc2NhcGUoYWUpO1xuICAgICAgfVxuICAgICAgcmVzdCA9IHJlc3Quc3BsaXQoYWUpLmpvaW4oZXNjKTtcbiAgICB9XG4gIH1cblxuXG4gIC8vIGNob3Agb2ZmIGZyb20gdGhlIHRhaWwgZmlyc3QuXG4gIHZhciBoYXNoID0gcmVzdC5pbmRleE9mKCcjJyk7XG4gIGlmIChoYXNoICE9PSAtMSkge1xuICAgIC8vIGdvdCBhIGZyYWdtZW50IHN0cmluZy5cbiAgICB0aGlzLmhhc2ggPSByZXN0LnN1YnN0cihoYXNoKTtcbiAgICByZXN0ID0gcmVzdC5zbGljZSgwLCBoYXNoKTtcbiAgfVxuICB2YXIgcW0gPSByZXN0LmluZGV4T2YoJz8nKTtcbiAgaWYgKHFtICE9PSAtMSkge1xuICAgIHRoaXMuc2VhcmNoID0gcmVzdC5zdWJzdHIocW0pO1xuICAgIHRoaXMucXVlcnkgPSByZXN0LnN1YnN0cihxbSArIDEpO1xuICAgIGlmIChwYXJzZVF1ZXJ5U3RyaW5nKSB7XG4gICAgICB0aGlzLnF1ZXJ5ID0gcXVlcnlzdHJpbmcucGFyc2UodGhpcy5xdWVyeSk7XG4gICAgfVxuICAgIHJlc3QgPSByZXN0LnNsaWNlKDAsIHFtKTtcbiAgfSBlbHNlIGlmIChwYXJzZVF1ZXJ5U3RyaW5nKSB7XG4gICAgLy8gbm8gcXVlcnkgc3RyaW5nLCBidXQgcGFyc2VRdWVyeVN0cmluZyBzdGlsbCByZXF1ZXN0ZWRcbiAgICB0aGlzLnNlYXJjaCA9ICcnO1xuICAgIHRoaXMucXVlcnkgPSB7fTtcbiAgfVxuICBpZiAocmVzdCkgdGhpcy5wYXRobmFtZSA9IHJlc3Q7XG4gIGlmIChzbGFzaGVkUHJvdG9jb2xbbG93ZXJQcm90b10gJiZcbiAgICAgIHRoaXMuaG9zdG5hbWUgJiYgIXRoaXMucGF0aG5hbWUpIHtcbiAgICB0aGlzLnBhdGhuYW1lID0gJy8nO1xuICB9XG5cbiAgLy90byBzdXBwb3J0IGh0dHAucmVxdWVzdFxuICBpZiAodGhpcy5wYXRobmFtZSB8fCB0aGlzLnNlYXJjaCkge1xuICAgIHZhciBwID0gdGhpcy5wYXRobmFtZSB8fCAnJztcbiAgICB2YXIgcyA9IHRoaXMuc2VhcmNoIHx8ICcnO1xuICAgIHRoaXMucGF0aCA9IHAgKyBzO1xuICB9XG5cbiAgLy8gZmluYWxseSwgcmVjb25zdHJ1Y3QgdGhlIGhyZWYgYmFzZWQgb24gd2hhdCBoYXMgYmVlbiB2YWxpZGF0ZWQuXG4gIHRoaXMuaHJlZiA9IHRoaXMuZm9ybWF0KCk7XG4gIHJldHVybiB0aGlzO1xufTtcblxuLy8gZm9ybWF0IGEgcGFyc2VkIG9iamVjdCBpbnRvIGEgdXJsIHN0cmluZ1xuZnVuY3Rpb24gdXJsRm9ybWF0KG9iaikge1xuICAvLyBlbnN1cmUgaXQncyBhbiBvYmplY3QsIGFuZCBub3QgYSBzdHJpbmcgdXJsLlxuICAvLyBJZiBpdCdzIGFuIG9iaiwgdGhpcyBpcyBhIG5vLW9wLlxuICAvLyB0aGlzIHdheSwgeW91IGNhbiBjYWxsIHVybF9mb3JtYXQoKSBvbiBzdHJpbmdzXG4gIC8vIHRvIGNsZWFuIHVwIHBvdGVudGlhbGx5IHdvbmt5IHVybHMuXG4gIGlmIChpc1N0cmluZyhvYmopKSBvYmogPSB1cmxQYXJzZShvYmopO1xuICBpZiAoIShvYmogaW5zdGFuY2VvZiBVcmwpKSByZXR1cm4gVXJsLnByb3RvdHlwZS5mb3JtYXQuY2FsbChvYmopO1xuICByZXR1cm4gb2JqLmZvcm1hdCgpO1xufVxuXG5VcmwucHJvdG90eXBlLmZvcm1hdCA9IGZ1bmN0aW9uKCkge1xuICB2YXIgYXV0aCA9IHRoaXMuYXV0aCB8fCAnJztcbiAgaWYgKGF1dGgpIHtcbiAgICBhdXRoID0gZW5jb2RlVVJJQ29tcG9uZW50KGF1dGgpO1xuICAgIGF1dGggPSBhdXRoLnJlcGxhY2UoLyUzQS9pLCAnOicpO1xuICAgIGF1dGggKz0gJ0AnO1xuICB9XG5cbiAgdmFyIHByb3RvY29sID0gdGhpcy5wcm90b2NvbCB8fCAnJyxcbiAgICAgIHBhdGhuYW1lID0gdGhpcy5wYXRobmFtZSB8fCAnJyxcbiAgICAgIGhhc2ggPSB0aGlzLmhhc2ggfHwgJycsXG4gICAgICBob3N0ID0gZmFsc2UsXG4gICAgICBxdWVyeSA9ICcnO1xuXG4gIGlmICh0aGlzLmhvc3QpIHtcbiAgICBob3N0ID0gYXV0aCArIHRoaXMuaG9zdDtcbiAgfSBlbHNlIGlmICh0aGlzLmhvc3RuYW1lKSB7XG4gICAgaG9zdCA9IGF1dGggKyAodGhpcy5ob3N0bmFtZS5pbmRleE9mKCc6JykgPT09IC0xID9cbiAgICAgICAgdGhpcy5ob3N0bmFtZSA6XG4gICAgICAgICdbJyArIHRoaXMuaG9zdG5hbWUgKyAnXScpO1xuICAgIGlmICh0aGlzLnBvcnQpIHtcbiAgICAgIGhvc3QgKz0gJzonICsgdGhpcy5wb3J0O1xuICAgIH1cbiAgfVxuXG4gIGlmICh0aGlzLnF1ZXJ5ICYmXG4gICAgICBpc09iamVjdCh0aGlzLnF1ZXJ5KSAmJlxuICAgICAgT2JqZWN0LmtleXModGhpcy5xdWVyeSkubGVuZ3RoKSB7XG4gICAgcXVlcnkgPSBxdWVyeXN0cmluZy5zdHJpbmdpZnkodGhpcy5xdWVyeSk7XG4gIH1cblxuICB2YXIgc2VhcmNoID0gdGhpcy5zZWFyY2ggfHwgKHF1ZXJ5ICYmICgnPycgKyBxdWVyeSkpIHx8ICcnO1xuXG4gIGlmIChwcm90b2NvbCAmJiBwcm90b2NvbC5zdWJzdHIoLTEpICE9PSAnOicpIHByb3RvY29sICs9ICc6JztcblxuICAvLyBvbmx5IHRoZSBzbGFzaGVkUHJvdG9jb2xzIGdldCB0aGUgLy8uICBOb3QgbWFpbHRvOiwgeG1wcDosIGV0Yy5cbiAgLy8gdW5sZXNzIHRoZXkgaGFkIHRoZW0gdG8gYmVnaW4gd2l0aC5cbiAgaWYgKHRoaXMuc2xhc2hlcyB8fFxuICAgICAgKCFwcm90b2NvbCB8fCBzbGFzaGVkUHJvdG9jb2xbcHJvdG9jb2xdKSAmJiBob3N0ICE9PSBmYWxzZSkge1xuICAgIGhvc3QgPSAnLy8nICsgKGhvc3QgfHwgJycpO1xuICAgIGlmIChwYXRobmFtZSAmJiBwYXRobmFtZS5jaGFyQXQoMCkgIT09ICcvJykgcGF0aG5hbWUgPSAnLycgKyBwYXRobmFtZTtcbiAgfSBlbHNlIGlmICghaG9zdCkge1xuICAgIGhvc3QgPSAnJztcbiAgfVxuXG4gIGlmIChoYXNoICYmIGhhc2guY2hhckF0KDApICE9PSAnIycpIGhhc2ggPSAnIycgKyBoYXNoO1xuICBpZiAoc2VhcmNoICYmIHNlYXJjaC5jaGFyQXQoMCkgIT09ICc/Jykgc2VhcmNoID0gJz8nICsgc2VhcmNoO1xuXG4gIHBhdGhuYW1lID0gcGF0aG5hbWUucmVwbGFjZSgvWz8jXS9nLCBmdW5jdGlvbihtYXRjaCkge1xuICAgIHJldHVybiBlbmNvZGVVUklDb21wb25lbnQobWF0Y2gpO1xuICB9KTtcbiAgc2VhcmNoID0gc2VhcmNoLnJlcGxhY2UoJyMnLCAnJTIzJyk7XG5cbiAgcmV0dXJuIHByb3RvY29sICsgaG9zdCArIHBhdGhuYW1lICsgc2VhcmNoICsgaGFzaDtcbn07XG5cbmZ1bmN0aW9uIHVybFJlc29sdmUoc291cmNlLCByZWxhdGl2ZSkge1xuICByZXR1cm4gdXJsUGFyc2Uoc291cmNlLCBmYWxzZSwgdHJ1ZSkucmVzb2x2ZShyZWxhdGl2ZSk7XG59XG5cblVybC5wcm90b3R5cGUucmVzb2x2ZSA9IGZ1bmN0aW9uKHJlbGF0aXZlKSB7XG4gIHJldHVybiB0aGlzLnJlc29sdmVPYmplY3QodXJsUGFyc2UocmVsYXRpdmUsIGZhbHNlLCB0cnVlKSkuZm9ybWF0KCk7XG59O1xuXG5mdW5jdGlvbiB1cmxSZXNvbHZlT2JqZWN0KHNvdXJjZSwgcmVsYXRpdmUpIHtcbiAgaWYgKCFzb3VyY2UpIHJldHVybiByZWxhdGl2ZTtcbiAgcmV0dXJuIHVybFBhcnNlKHNvdXJjZSwgZmFsc2UsIHRydWUpLnJlc29sdmVPYmplY3QocmVsYXRpdmUpO1xufVxuXG5VcmwucHJvdG90eXBlLnJlc29sdmVPYmplY3QgPSBmdW5jdGlvbihyZWxhdGl2ZSkge1xuICBpZiAoaXNTdHJpbmcocmVsYXRpdmUpKSB7XG4gICAgdmFyIHJlbCA9IG5ldyBVcmwoKTtcbiAgICByZWwucGFyc2UocmVsYXRpdmUsIGZhbHNlLCB0cnVlKTtcbiAgICByZWxhdGl2ZSA9IHJlbDtcbiAgfVxuXG4gIHZhciByZXN1bHQgPSBuZXcgVXJsKCk7XG4gIE9iamVjdC5rZXlzKHRoaXMpLmZvckVhY2goZnVuY3Rpb24oaykge1xuICAgIHJlc3VsdFtrXSA9IHRoaXNba107XG4gIH0sIHRoaXMpO1xuXG4gIC8vIGhhc2ggaXMgYWx3YXlzIG92ZXJyaWRkZW4sIG5vIG1hdHRlciB3aGF0LlxuICAvLyBldmVuIGhyZWY9XCJcIiB3aWxsIHJlbW92ZSBpdC5cbiAgcmVzdWx0Lmhhc2ggPSByZWxhdGl2ZS5oYXNoO1xuXG4gIC8vIGlmIHRoZSByZWxhdGl2ZSB1cmwgaXMgZW1wdHksIHRoZW4gdGhlcmUncyBub3RoaW5nIGxlZnQgdG8gZG8gaGVyZS5cbiAgaWYgKHJlbGF0aXZlLmhyZWYgPT09ICcnKSB7XG4gICAgcmVzdWx0LmhyZWYgPSByZXN1bHQuZm9ybWF0KCk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIC8vIGhyZWZzIGxpa2UgLy9mb28vYmFyIGFsd2F5cyBjdXQgdG8gdGhlIHByb3RvY29sLlxuICBpZiAocmVsYXRpdmUuc2xhc2hlcyAmJiAhcmVsYXRpdmUucHJvdG9jb2wpIHtcbiAgICAvLyB0YWtlIGV2ZXJ5dGhpbmcgZXhjZXB0IHRoZSBwcm90b2NvbCBmcm9tIHJlbGF0aXZlXG4gICAgT2JqZWN0LmtleXMocmVsYXRpdmUpLmZvckVhY2goZnVuY3Rpb24oaykge1xuICAgICAgaWYgKGsgIT09ICdwcm90b2NvbCcpXG4gICAgICAgIHJlc3VsdFtrXSA9IHJlbGF0aXZlW2tdO1xuICAgIH0pO1xuXG4gICAgLy91cmxQYXJzZSBhcHBlbmRzIHRyYWlsaW5nIC8gdG8gdXJscyBsaWtlIGh0dHA6Ly93d3cuZXhhbXBsZS5jb21cbiAgICBpZiAoc2xhc2hlZFByb3RvY29sW3Jlc3VsdC5wcm90b2NvbF0gJiZcbiAgICAgICAgcmVzdWx0Lmhvc3RuYW1lICYmICFyZXN1bHQucGF0aG5hbWUpIHtcbiAgICAgIHJlc3VsdC5wYXRoID0gcmVzdWx0LnBhdGhuYW1lID0gJy8nO1xuICAgIH1cblxuICAgIHJlc3VsdC5ocmVmID0gcmVzdWx0LmZvcm1hdCgpO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICBpZiAocmVsYXRpdmUucHJvdG9jb2wgJiYgcmVsYXRpdmUucHJvdG9jb2wgIT09IHJlc3VsdC5wcm90b2NvbCkge1xuICAgIC8vIGlmIGl0J3MgYSBrbm93biB1cmwgcHJvdG9jb2wsIHRoZW4gY2hhbmdpbmdcbiAgICAvLyB0aGUgcHJvdG9jb2wgZG9lcyB3ZWlyZCB0aGluZ3NcbiAgICAvLyBmaXJzdCwgaWYgaXQncyBub3QgZmlsZTosIHRoZW4gd2UgTVVTVCBoYXZlIGEgaG9zdCxcbiAgICAvLyBhbmQgaWYgdGhlcmUgd2FzIGEgcGF0aFxuICAgIC8vIHRvIGJlZ2luIHdpdGgsIHRoZW4gd2UgTVVTVCBoYXZlIGEgcGF0aC5cbiAgICAvLyBpZiBpdCBpcyBmaWxlOiwgdGhlbiB0aGUgaG9zdCBpcyBkcm9wcGVkLFxuICAgIC8vIGJlY2F1c2UgdGhhdCdzIGtub3duIHRvIGJlIGhvc3RsZXNzLlxuICAgIC8vIGFueXRoaW5nIGVsc2UgaXMgYXNzdW1lZCB0byBiZSBhYnNvbHV0ZS5cbiAgICBpZiAoIXNsYXNoZWRQcm90b2NvbFtyZWxhdGl2ZS5wcm90b2NvbF0pIHtcbiAgICAgIE9iamVjdC5rZXlzKHJlbGF0aXZlKS5mb3JFYWNoKGZ1bmN0aW9uKGspIHtcbiAgICAgICAgcmVzdWx0W2tdID0gcmVsYXRpdmVba107XG4gICAgICB9KTtcbiAgICAgIHJlc3VsdC5ocmVmID0gcmVzdWx0LmZvcm1hdCgpO1xuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICByZXN1bHQucHJvdG9jb2wgPSByZWxhdGl2ZS5wcm90b2NvbDtcbiAgICBpZiAoIXJlbGF0aXZlLmhvc3QgJiYgIWhvc3RsZXNzUHJvdG9jb2xbcmVsYXRpdmUucHJvdG9jb2xdKSB7XG4gICAgICB2YXIgcmVsUGF0aCA9IChyZWxhdGl2ZS5wYXRobmFtZSB8fCAnJykuc3BsaXQoJy8nKTtcbiAgICAgIHdoaWxlIChyZWxQYXRoLmxlbmd0aCAmJiAhKHJlbGF0aXZlLmhvc3QgPSByZWxQYXRoLnNoaWZ0KCkpKTtcbiAgICAgIGlmICghcmVsYXRpdmUuaG9zdCkgcmVsYXRpdmUuaG9zdCA9ICcnO1xuICAgICAgaWYgKCFyZWxhdGl2ZS5ob3N0bmFtZSkgcmVsYXRpdmUuaG9zdG5hbWUgPSAnJztcbiAgICAgIGlmIChyZWxQYXRoWzBdICE9PSAnJykgcmVsUGF0aC51bnNoaWZ0KCcnKTtcbiAgICAgIGlmIChyZWxQYXRoLmxlbmd0aCA8IDIpIHJlbFBhdGgudW5zaGlmdCgnJyk7XG4gICAgICByZXN1bHQucGF0aG5hbWUgPSByZWxQYXRoLmpvaW4oJy8nKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmVzdWx0LnBhdGhuYW1lID0gcmVsYXRpdmUucGF0aG5hbWU7XG4gICAgfVxuICAgIHJlc3VsdC5zZWFyY2ggPSByZWxhdGl2ZS5zZWFyY2g7XG4gICAgcmVzdWx0LnF1ZXJ5ID0gcmVsYXRpdmUucXVlcnk7XG4gICAgcmVzdWx0Lmhvc3QgPSByZWxhdGl2ZS5ob3N0IHx8ICcnO1xuICAgIHJlc3VsdC5hdXRoID0gcmVsYXRpdmUuYXV0aDtcbiAgICByZXN1bHQuaG9zdG5hbWUgPSByZWxhdGl2ZS5ob3N0bmFtZSB8fCByZWxhdGl2ZS5ob3N0O1xuICAgIHJlc3VsdC5wb3J0ID0gcmVsYXRpdmUucG9ydDtcbiAgICAvLyB0byBzdXBwb3J0IGh0dHAucmVxdWVzdFxuICAgIGlmIChyZXN1bHQucGF0aG5hbWUgfHwgcmVzdWx0LnNlYXJjaCkge1xuICAgICAgdmFyIHAgPSByZXN1bHQucGF0aG5hbWUgfHwgJyc7XG4gICAgICB2YXIgcyA9IHJlc3VsdC5zZWFyY2ggfHwgJyc7XG4gICAgICByZXN1bHQucGF0aCA9IHAgKyBzO1xuICAgIH1cbiAgICByZXN1bHQuc2xhc2hlcyA9IHJlc3VsdC5zbGFzaGVzIHx8IHJlbGF0aXZlLnNsYXNoZXM7XG4gICAgcmVzdWx0LmhyZWYgPSByZXN1bHQuZm9ybWF0KCk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIHZhciBpc1NvdXJjZUFicyA9IChyZXN1bHQucGF0aG5hbWUgJiYgcmVzdWx0LnBhdGhuYW1lLmNoYXJBdCgwKSA9PT0gJy8nKSxcbiAgICAgIGlzUmVsQWJzID0gKFxuICAgICAgICAgIHJlbGF0aXZlLmhvc3QgfHxcbiAgICAgICAgICByZWxhdGl2ZS5wYXRobmFtZSAmJiByZWxhdGl2ZS5wYXRobmFtZS5jaGFyQXQoMCkgPT09ICcvJ1xuICAgICAgKSxcbiAgICAgIG11c3RFbmRBYnMgPSAoaXNSZWxBYnMgfHwgaXNTb3VyY2VBYnMgfHxcbiAgICAgICAgICAgICAgICAgICAgKHJlc3VsdC5ob3N0ICYmIHJlbGF0aXZlLnBhdGhuYW1lKSksXG4gICAgICByZW1vdmVBbGxEb3RzID0gbXVzdEVuZEFicyxcbiAgICAgIHNyY1BhdGggPSByZXN1bHQucGF0aG5hbWUgJiYgcmVzdWx0LnBhdGhuYW1lLnNwbGl0KCcvJykgfHwgW10sXG4gICAgICByZWxQYXRoID0gcmVsYXRpdmUucGF0aG5hbWUgJiYgcmVsYXRpdmUucGF0aG5hbWUuc3BsaXQoJy8nKSB8fCBbXSxcbiAgICAgIHBzeWNob3RpYyA9IHJlc3VsdC5wcm90b2NvbCAmJiAhc2xhc2hlZFByb3RvY29sW3Jlc3VsdC5wcm90b2NvbF07XG5cbiAgLy8gaWYgdGhlIHVybCBpcyBhIG5vbi1zbGFzaGVkIHVybCwgdGhlbiByZWxhdGl2ZVxuICAvLyBsaW5rcyBsaWtlIC4uLy4uIHNob3VsZCBiZSBhYmxlXG4gIC8vIHRvIGNyYXdsIHVwIHRvIHRoZSBob3N0bmFtZSwgYXMgd2VsbC4gIFRoaXMgaXMgc3RyYW5nZS5cbiAgLy8gcmVzdWx0LnByb3RvY29sIGhhcyBhbHJlYWR5IGJlZW4gc2V0IGJ5IG5vdy5cbiAgLy8gTGF0ZXIgb24sIHB1dCB0aGUgZmlyc3QgcGF0aCBwYXJ0IGludG8gdGhlIGhvc3QgZmllbGQuXG4gIGlmIChwc3ljaG90aWMpIHtcbiAgICByZXN1bHQuaG9zdG5hbWUgPSAnJztcbiAgICByZXN1bHQucG9ydCA9IG51bGw7XG4gICAgaWYgKHJlc3VsdC5ob3N0KSB7XG4gICAgICBpZiAoc3JjUGF0aFswXSA9PT0gJycpIHNyY1BhdGhbMF0gPSByZXN1bHQuaG9zdDtcbiAgICAgIGVsc2Ugc3JjUGF0aC51bnNoaWZ0KHJlc3VsdC5ob3N0KTtcbiAgICB9XG4gICAgcmVzdWx0Lmhvc3QgPSAnJztcbiAgICBpZiAocmVsYXRpdmUucHJvdG9jb2wpIHtcbiAgICAgIHJlbGF0aXZlLmhvc3RuYW1lID0gbnVsbDtcbiAgICAgIHJlbGF0aXZlLnBvcnQgPSBudWxsO1xuICAgICAgaWYgKHJlbGF0aXZlLmhvc3QpIHtcbiAgICAgICAgaWYgKHJlbFBhdGhbMF0gPT09ICcnKSByZWxQYXRoWzBdID0gcmVsYXRpdmUuaG9zdDtcbiAgICAgICAgZWxzZSByZWxQYXRoLnVuc2hpZnQocmVsYXRpdmUuaG9zdCk7XG4gICAgICB9XG4gICAgICByZWxhdGl2ZS5ob3N0ID0gbnVsbDtcbiAgICB9XG4gICAgbXVzdEVuZEFicyA9IG11c3RFbmRBYnMgJiYgKHJlbFBhdGhbMF0gPT09ICcnIHx8IHNyY1BhdGhbMF0gPT09ICcnKTtcbiAgfVxuXG4gIGlmIChpc1JlbEFicykge1xuICAgIC8vIGl0J3MgYWJzb2x1dGUuXG4gICAgcmVzdWx0Lmhvc3QgPSAocmVsYXRpdmUuaG9zdCB8fCByZWxhdGl2ZS5ob3N0ID09PSAnJykgP1xuICAgICAgICAgICAgICAgICAgcmVsYXRpdmUuaG9zdCA6IHJlc3VsdC5ob3N0O1xuICAgIHJlc3VsdC5ob3N0bmFtZSA9IChyZWxhdGl2ZS5ob3N0bmFtZSB8fCByZWxhdGl2ZS5ob3N0bmFtZSA9PT0gJycpID9cbiAgICAgICAgICAgICAgICAgICAgICByZWxhdGl2ZS5ob3N0bmFtZSA6IHJlc3VsdC5ob3N0bmFtZTtcbiAgICByZXN1bHQuc2VhcmNoID0gcmVsYXRpdmUuc2VhcmNoO1xuICAgIHJlc3VsdC5xdWVyeSA9IHJlbGF0aXZlLnF1ZXJ5O1xuICAgIHNyY1BhdGggPSByZWxQYXRoO1xuICAgIC8vIGZhbGwgdGhyb3VnaCB0byB0aGUgZG90LWhhbmRsaW5nIGJlbG93LlxuICB9IGVsc2UgaWYgKHJlbFBhdGgubGVuZ3RoKSB7XG4gICAgLy8gaXQncyByZWxhdGl2ZVxuICAgIC8vIHRocm93IGF3YXkgdGhlIGV4aXN0aW5nIGZpbGUsIGFuZCB0YWtlIHRoZSBuZXcgcGF0aCBpbnN0ZWFkLlxuICAgIGlmICghc3JjUGF0aCkgc3JjUGF0aCA9IFtdO1xuICAgIHNyY1BhdGgucG9wKCk7XG4gICAgc3JjUGF0aCA9IHNyY1BhdGguY29uY2F0KHJlbFBhdGgpO1xuICAgIHJlc3VsdC5zZWFyY2ggPSByZWxhdGl2ZS5zZWFyY2g7XG4gICAgcmVzdWx0LnF1ZXJ5ID0gcmVsYXRpdmUucXVlcnk7XG4gIH0gZWxzZSBpZiAoIWlzTnVsbE9yVW5kZWZpbmVkKHJlbGF0aXZlLnNlYXJjaCkpIHtcbiAgICAvLyBqdXN0IHB1bGwgb3V0IHRoZSBzZWFyY2guXG4gICAgLy8gbGlrZSBocmVmPSc/Zm9vJy5cbiAgICAvLyBQdXQgdGhpcyBhZnRlciB0aGUgb3RoZXIgdHdvIGNhc2VzIGJlY2F1c2UgaXQgc2ltcGxpZmllcyB0aGUgYm9vbGVhbnNcbiAgICBpZiAocHN5Y2hvdGljKSB7XG4gICAgICByZXN1bHQuaG9zdG5hbWUgPSByZXN1bHQuaG9zdCA9IHNyY1BhdGguc2hpZnQoKTtcbiAgICAgIC8vb2NjYXRpb25hbHkgdGhlIGF1dGggY2FuIGdldCBzdHVjayBvbmx5IGluIGhvc3RcbiAgICAgIC8vdGhpcyBlc3BlY2lhbHkgaGFwcGVucyBpbiBjYXNlcyBsaWtlXG4gICAgICAvL3VybC5yZXNvbHZlT2JqZWN0KCdtYWlsdG86bG9jYWwxQGRvbWFpbjEnLCAnbG9jYWwyQGRvbWFpbjInKVxuICAgICAgdmFyIGF1dGhJbkhvc3QgPSByZXN1bHQuaG9zdCAmJiByZXN1bHQuaG9zdC5pbmRleE9mKCdAJykgPiAwID9cbiAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0Lmhvc3Quc3BsaXQoJ0AnKSA6IGZhbHNlO1xuICAgICAgaWYgKGF1dGhJbkhvc3QpIHtcbiAgICAgICAgcmVzdWx0LmF1dGggPSBhdXRoSW5Ib3N0LnNoaWZ0KCk7XG4gICAgICAgIHJlc3VsdC5ob3N0ID0gcmVzdWx0Lmhvc3RuYW1lID0gYXV0aEluSG9zdC5zaGlmdCgpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXN1bHQuc2VhcmNoID0gcmVsYXRpdmUuc2VhcmNoO1xuICAgIHJlc3VsdC5xdWVyeSA9IHJlbGF0aXZlLnF1ZXJ5O1xuICAgIC8vdG8gc3VwcG9ydCBodHRwLnJlcXVlc3RcbiAgICBpZiAoIWlzTnVsbChyZXN1bHQucGF0aG5hbWUpIHx8ICFpc051bGwocmVzdWx0LnNlYXJjaCkpIHtcbiAgICAgIHJlc3VsdC5wYXRoID0gKHJlc3VsdC5wYXRobmFtZSA/IHJlc3VsdC5wYXRobmFtZSA6ICcnKSArXG4gICAgICAgICAgICAgICAgICAgIChyZXN1bHQuc2VhcmNoID8gcmVzdWx0LnNlYXJjaCA6ICcnKTtcbiAgICB9XG4gICAgcmVzdWx0LmhyZWYgPSByZXN1bHQuZm9ybWF0KCk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIGlmICghc3JjUGF0aC5sZW5ndGgpIHtcbiAgICAvLyBubyBwYXRoIGF0IGFsbC4gIGVhc3kuXG4gICAgLy8gd2UndmUgYWxyZWFkeSBoYW5kbGVkIHRoZSBvdGhlciBzdHVmZiBhYm92ZS5cbiAgICByZXN1bHQucGF0aG5hbWUgPSBudWxsO1xuICAgIC8vdG8gc3VwcG9ydCBodHRwLnJlcXVlc3RcbiAgICBpZiAocmVzdWx0LnNlYXJjaCkge1xuICAgICAgcmVzdWx0LnBhdGggPSAnLycgKyByZXN1bHQuc2VhcmNoO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXN1bHQucGF0aCA9IG51bGw7XG4gICAgfVxuICAgIHJlc3VsdC5ocmVmID0gcmVzdWx0LmZvcm1hdCgpO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICAvLyBpZiBhIHVybCBFTkRzIGluIC4gb3IgLi4sIHRoZW4gaXQgbXVzdCBnZXQgYSB0cmFpbGluZyBzbGFzaC5cbiAgLy8gaG93ZXZlciwgaWYgaXQgZW5kcyBpbiBhbnl0aGluZyBlbHNlIG5vbi1zbGFzaHksXG4gIC8vIHRoZW4gaXQgbXVzdCBOT1QgZ2V0IGEgdHJhaWxpbmcgc2xhc2guXG4gIHZhciBsYXN0ID0gc3JjUGF0aC5zbGljZSgtMSlbMF07XG4gIHZhciBoYXNUcmFpbGluZ1NsYXNoID0gKFxuICAgICAgKHJlc3VsdC5ob3N0IHx8IHJlbGF0aXZlLmhvc3QpICYmIChsYXN0ID09PSAnLicgfHwgbGFzdCA9PT0gJy4uJykgfHxcbiAgICAgIGxhc3QgPT09ICcnKTtcblxuICAvLyBzdHJpcCBzaW5nbGUgZG90cywgcmVzb2x2ZSBkb3VibGUgZG90cyB0byBwYXJlbnQgZGlyXG4gIC8vIGlmIHRoZSBwYXRoIHRyaWVzIHRvIGdvIGFib3ZlIHRoZSByb290LCBgdXBgIGVuZHMgdXAgPiAwXG4gIHZhciB1cCA9IDA7XG4gIGZvciAodmFyIGkgPSBzcmNQYXRoLmxlbmd0aDsgaSA+PSAwOyBpLS0pIHtcbiAgICBsYXN0ID0gc3JjUGF0aFtpXTtcbiAgICBpZiAobGFzdCA9PSAnLicpIHtcbiAgICAgIHNyY1BhdGguc3BsaWNlKGksIDEpO1xuICAgIH0gZWxzZSBpZiAobGFzdCA9PT0gJy4uJykge1xuICAgICAgc3JjUGF0aC5zcGxpY2UoaSwgMSk7XG4gICAgICB1cCsrO1xuICAgIH0gZWxzZSBpZiAodXApIHtcbiAgICAgIHNyY1BhdGguc3BsaWNlKGksIDEpO1xuICAgICAgdXAtLTtcbiAgICB9XG4gIH1cblxuICAvLyBpZiB0aGUgcGF0aCBpcyBhbGxvd2VkIHRvIGdvIGFib3ZlIHRoZSByb290LCByZXN0b3JlIGxlYWRpbmcgLi5zXG4gIGlmICghbXVzdEVuZEFicyAmJiAhcmVtb3ZlQWxsRG90cykge1xuICAgIGZvciAoOyB1cC0tOyB1cCkge1xuICAgICAgc3JjUGF0aC51bnNoaWZ0KCcuLicpO1xuICAgIH1cbiAgfVxuXG4gIGlmIChtdXN0RW5kQWJzICYmIHNyY1BhdGhbMF0gIT09ICcnICYmXG4gICAgICAoIXNyY1BhdGhbMF0gfHwgc3JjUGF0aFswXS5jaGFyQXQoMCkgIT09ICcvJykpIHtcbiAgICBzcmNQYXRoLnVuc2hpZnQoJycpO1xuICB9XG5cbiAgaWYgKGhhc1RyYWlsaW5nU2xhc2ggJiYgKHNyY1BhdGguam9pbignLycpLnN1YnN0cigtMSkgIT09ICcvJykpIHtcbiAgICBzcmNQYXRoLnB1c2goJycpO1xuICB9XG5cbiAgdmFyIGlzQWJzb2x1dGUgPSBzcmNQYXRoWzBdID09PSAnJyB8fFxuICAgICAgKHNyY1BhdGhbMF0gJiYgc3JjUGF0aFswXS5jaGFyQXQoMCkgPT09ICcvJyk7XG5cbiAgLy8gcHV0IHRoZSBob3N0IGJhY2tcbiAgaWYgKHBzeWNob3RpYykge1xuICAgIHJlc3VsdC5ob3N0bmFtZSA9IHJlc3VsdC5ob3N0ID0gaXNBYnNvbHV0ZSA/ICcnIDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyY1BhdGgubGVuZ3RoID8gc3JjUGF0aC5zaGlmdCgpIDogJyc7XG4gICAgLy9vY2NhdGlvbmFseSB0aGUgYXV0aCBjYW4gZ2V0IHN0dWNrIG9ubHkgaW4gaG9zdFxuICAgIC8vdGhpcyBlc3BlY2lhbHkgaGFwcGVucyBpbiBjYXNlcyBsaWtlXG4gICAgLy91cmwucmVzb2x2ZU9iamVjdCgnbWFpbHRvOmxvY2FsMUBkb21haW4xJywgJ2xvY2FsMkBkb21haW4yJylcbiAgICB2YXIgYXV0aEluSG9zdCA9IHJlc3VsdC5ob3N0ICYmIHJlc3VsdC5ob3N0LmluZGV4T2YoJ0AnKSA+IDAgP1xuICAgICAgICAgICAgICAgICAgICAgcmVzdWx0Lmhvc3Quc3BsaXQoJ0AnKSA6IGZhbHNlO1xuICAgIGlmIChhdXRoSW5Ib3N0KSB7XG4gICAgICByZXN1bHQuYXV0aCA9IGF1dGhJbkhvc3Quc2hpZnQoKTtcbiAgICAgIHJlc3VsdC5ob3N0ID0gcmVzdWx0Lmhvc3RuYW1lID0gYXV0aEluSG9zdC5zaGlmdCgpO1xuICAgIH1cbiAgfVxuXG4gIG11c3RFbmRBYnMgPSBtdXN0RW5kQWJzIHx8IChyZXN1bHQuaG9zdCAmJiBzcmNQYXRoLmxlbmd0aCk7XG5cbiAgaWYgKG11c3RFbmRBYnMgJiYgIWlzQWJzb2x1dGUpIHtcbiAgICBzcmNQYXRoLnVuc2hpZnQoJycpO1xuICB9XG5cbiAgaWYgKCFzcmNQYXRoLmxlbmd0aCkge1xuICAgIHJlc3VsdC5wYXRobmFtZSA9IG51bGw7XG4gICAgcmVzdWx0LnBhdGggPSBudWxsO1xuICB9IGVsc2Uge1xuICAgIHJlc3VsdC5wYXRobmFtZSA9IHNyY1BhdGguam9pbignLycpO1xuICB9XG5cbiAgLy90byBzdXBwb3J0IHJlcXVlc3QuaHR0cFxuICBpZiAoIWlzTnVsbChyZXN1bHQucGF0aG5hbWUpIHx8ICFpc051bGwocmVzdWx0LnNlYXJjaCkpIHtcbiAgICByZXN1bHQucGF0aCA9IChyZXN1bHQucGF0aG5hbWUgPyByZXN1bHQucGF0aG5hbWUgOiAnJykgK1xuICAgICAgICAgICAgICAgICAgKHJlc3VsdC5zZWFyY2ggPyByZXN1bHQuc2VhcmNoIDogJycpO1xuICB9XG4gIHJlc3VsdC5hdXRoID0gcmVsYXRpdmUuYXV0aCB8fCByZXN1bHQuYXV0aDtcbiAgcmVzdWx0LnNsYXNoZXMgPSByZXN1bHQuc2xhc2hlcyB8fCByZWxhdGl2ZS5zbGFzaGVzO1xuICByZXN1bHQuaHJlZiA9IHJlc3VsdC5mb3JtYXQoKTtcbiAgcmV0dXJuIHJlc3VsdDtcbn07XG5cblVybC5wcm90b3R5cGUucGFyc2VIb3N0ID0gZnVuY3Rpb24oKSB7XG4gIHZhciBob3N0ID0gdGhpcy5ob3N0O1xuICB2YXIgcG9ydCA9IHBvcnRQYXR0ZXJuLmV4ZWMoaG9zdCk7XG4gIGlmIChwb3J0KSB7XG4gICAgcG9ydCA9IHBvcnRbMF07XG4gICAgaWYgKHBvcnQgIT09ICc6Jykge1xuICAgICAgdGhpcy5wb3J0ID0gcG9ydC5zdWJzdHIoMSk7XG4gICAgfVxuICAgIGhvc3QgPSBob3N0LnN1YnN0cigwLCBob3N0Lmxlbmd0aCAtIHBvcnQubGVuZ3RoKTtcbiAgfVxuICBpZiAoaG9zdCkgdGhpcy5ob3N0bmFtZSA9IGhvc3Q7XG59O1xuXG5mdW5jdGlvbiBpc1N0cmluZyhhcmcpIHtcbiAgcmV0dXJuIHR5cGVvZiBhcmcgPT09IFwic3RyaW5nXCI7XG59XG5cbmZ1bmN0aW9uIGlzT2JqZWN0KGFyZykge1xuICByZXR1cm4gdHlwZW9mIGFyZyA9PT0gJ29iamVjdCcgJiYgYXJnICE9PSBudWxsO1xufVxuXG5mdW5jdGlvbiBpc051bGwoYXJnKSB7XG4gIHJldHVybiBhcmcgPT09IG51bGw7XG59XG5mdW5jdGlvbiBpc051bGxPclVuZGVmaW5lZChhcmcpIHtcbiAgcmV0dXJuICBhcmcgPT0gbnVsbDtcbn1cbiIsIid1c2Ugc3RyaWN0JztcblxubW9kdWxlLmV4cG9ydHMgPSBlYXJjdXQ7XG5cbmZ1bmN0aW9uIGVhcmN1dChkYXRhLCBob2xlSW5kaWNlcywgZGltKSB7XG5cbiAgICBkaW0gPSBkaW0gfHwgMjtcblxuICAgIHZhciBoYXNIb2xlcyA9IGhvbGVJbmRpY2VzICYmIGhvbGVJbmRpY2VzLmxlbmd0aCxcbiAgICAgICAgb3V0ZXJMZW4gPSBoYXNIb2xlcyA/IGhvbGVJbmRpY2VzWzBdICogZGltIDogZGF0YS5sZW5ndGgsXG4gICAgICAgIG91dGVyTm9kZSA9IGxpbmtlZExpc3QoZGF0YSwgMCwgb3V0ZXJMZW4sIGRpbSwgdHJ1ZSksXG4gICAgICAgIHRyaWFuZ2xlcyA9IFtdO1xuXG4gICAgaWYgKCFvdXRlck5vZGUpIHJldHVybiB0cmlhbmdsZXM7XG5cbiAgICB2YXIgbWluWCwgbWluWSwgbWF4WCwgbWF4WSwgeCwgeSwgc2l6ZTtcblxuICAgIGlmIChoYXNIb2xlcykgb3V0ZXJOb2RlID0gZWxpbWluYXRlSG9sZXMoZGF0YSwgaG9sZUluZGljZXMsIG91dGVyTm9kZSwgZGltKTtcblxuICAgIC8vIGlmIHRoZSBzaGFwZSBpcyBub3QgdG9vIHNpbXBsZSwgd2UnbGwgdXNlIHotb3JkZXIgY3VydmUgaGFzaCBsYXRlcjsgY2FsY3VsYXRlIHBvbHlnb24gYmJveFxuICAgIGlmIChkYXRhLmxlbmd0aCA+IDgwICogZGltKSB7XG4gICAgICAgIG1pblggPSBtYXhYID0gZGF0YVswXTtcbiAgICAgICAgbWluWSA9IG1heFkgPSBkYXRhWzFdO1xuXG4gICAgICAgIGZvciAodmFyIGkgPSBkaW07IGkgPCBvdXRlckxlbjsgaSArPSBkaW0pIHtcbiAgICAgICAgICAgIHggPSBkYXRhW2ldO1xuICAgICAgICAgICAgeSA9IGRhdGFbaSArIDFdO1xuICAgICAgICAgICAgaWYgKHggPCBtaW5YKSBtaW5YID0geDtcbiAgICAgICAgICAgIGlmICh5IDwgbWluWSkgbWluWSA9IHk7XG4gICAgICAgICAgICBpZiAoeCA+IG1heFgpIG1heFggPSB4O1xuICAgICAgICAgICAgaWYgKHkgPiBtYXhZKSBtYXhZID0geTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIG1pblgsIG1pblkgYW5kIHNpemUgYXJlIGxhdGVyIHVzZWQgdG8gdHJhbnNmb3JtIGNvb3JkcyBpbnRvIGludGVnZXJzIGZvciB6LW9yZGVyIGNhbGN1bGF0aW9uXG4gICAgICAgIHNpemUgPSBNYXRoLm1heChtYXhYIC0gbWluWCwgbWF4WSAtIG1pblkpO1xuICAgIH1cblxuICAgIGVhcmN1dExpbmtlZChvdXRlck5vZGUsIHRyaWFuZ2xlcywgZGltLCBtaW5YLCBtaW5ZLCBzaXplKTtcblxuICAgIHJldHVybiB0cmlhbmdsZXM7XG59XG5cbi8vIGNyZWF0ZSBhIGNpcmN1bGFyIGRvdWJseSBsaW5rZWQgbGlzdCBmcm9tIHBvbHlnb24gcG9pbnRzIGluIHRoZSBzcGVjaWZpZWQgd2luZGluZyBvcmRlclxuZnVuY3Rpb24gbGlua2VkTGlzdChkYXRhLCBzdGFydCwgZW5kLCBkaW0sIGNsb2Nrd2lzZSkge1xuICAgIHZhciBzdW0gPSAwLFxuICAgICAgICBpLCBqLCBsYXN0O1xuXG4gICAgLy8gY2FsY3VsYXRlIG9yaWdpbmFsIHdpbmRpbmcgb3JkZXIgb2YgYSBwb2x5Z29uIHJpbmdcbiAgICBmb3IgKGkgPSBzdGFydCwgaiA9IGVuZCAtIGRpbTsgaSA8IGVuZDsgaSArPSBkaW0pIHtcbiAgICAgICAgc3VtICs9IChkYXRhW2pdIC0gZGF0YVtpXSkgKiAoZGF0YVtpICsgMV0gKyBkYXRhW2ogKyAxXSk7XG4gICAgICAgIGogPSBpO1xuICAgIH1cblxuICAgIC8vIGxpbmsgcG9pbnRzIGludG8gY2lyY3VsYXIgZG91Ymx5LWxpbmtlZCBsaXN0IGluIHRoZSBzcGVjaWZpZWQgd2luZGluZyBvcmRlclxuICAgIGlmIChjbG9ja3dpc2UgPT09IChzdW0gPiAwKSkge1xuICAgICAgICBmb3IgKGkgPSBzdGFydDsgaSA8IGVuZDsgaSArPSBkaW0pIGxhc3QgPSBpbnNlcnROb2RlKGksIGRhdGFbaV0sIGRhdGFbaSArIDFdLCBsYXN0KTtcbiAgICB9IGVsc2Uge1xuICAgICAgICBmb3IgKGkgPSBlbmQgLSBkaW07IGkgPj0gc3RhcnQ7IGkgLT0gZGltKSBsYXN0ID0gaW5zZXJ0Tm9kZShpLCBkYXRhW2ldLCBkYXRhW2kgKyAxXSwgbGFzdCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGxhc3Q7XG59XG5cbi8vIGVsaW1pbmF0ZSBjb2xpbmVhciBvciBkdXBsaWNhdGUgcG9pbnRzXG5mdW5jdGlvbiBmaWx0ZXJQb2ludHMoc3RhcnQsIGVuZCkge1xuICAgIGlmICghc3RhcnQpIHJldHVybiBzdGFydDtcbiAgICBpZiAoIWVuZCkgZW5kID0gc3RhcnQ7XG5cbiAgICB2YXIgcCA9IHN0YXJ0LFxuICAgICAgICBhZ2FpbjtcbiAgICBkbyB7XG4gICAgICAgIGFnYWluID0gZmFsc2U7XG5cbiAgICAgICAgaWYgKCFwLnN0ZWluZXIgJiYgKGVxdWFscyhwLCBwLm5leHQpIHx8IGFyZWEocC5wcmV2LCBwLCBwLm5leHQpID09PSAwKSkge1xuICAgICAgICAgICAgcmVtb3ZlTm9kZShwKTtcbiAgICAgICAgICAgIHAgPSBlbmQgPSBwLnByZXY7XG4gICAgICAgICAgICBpZiAocCA9PT0gcC5uZXh0KSByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIGFnYWluID0gdHJ1ZTtcblxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcCA9IHAubmV4dDtcbiAgICAgICAgfVxuICAgIH0gd2hpbGUgKGFnYWluIHx8IHAgIT09IGVuZCk7XG5cbiAgICByZXR1cm4gZW5kO1xufVxuXG4vLyBtYWluIGVhciBzbGljaW5nIGxvb3Agd2hpY2ggdHJpYW5ndWxhdGVzIGEgcG9seWdvbiAoZ2l2ZW4gYXMgYSBsaW5rZWQgbGlzdClcbmZ1bmN0aW9uIGVhcmN1dExpbmtlZChlYXIsIHRyaWFuZ2xlcywgZGltLCBtaW5YLCBtaW5ZLCBzaXplLCBwYXNzKSB7XG4gICAgaWYgKCFlYXIpIHJldHVybjtcblxuICAgIC8vIGludGVybGluayBwb2x5Z29uIG5vZGVzIGluIHotb3JkZXJcbiAgICBpZiAoIXBhc3MgJiYgc2l6ZSkgaW5kZXhDdXJ2ZShlYXIsIG1pblgsIG1pblksIHNpemUpO1xuXG4gICAgdmFyIHN0b3AgPSBlYXIsXG4gICAgICAgIHByZXYsIG5leHQ7XG5cbiAgICAvLyBpdGVyYXRlIHRocm91Z2ggZWFycywgc2xpY2luZyB0aGVtIG9uZSBieSBvbmVcbiAgICB3aGlsZSAoZWFyLnByZXYgIT09IGVhci5uZXh0KSB7XG4gICAgICAgIHByZXYgPSBlYXIucHJldjtcbiAgICAgICAgbmV4dCA9IGVhci5uZXh0O1xuXG4gICAgICAgIGlmIChzaXplID8gaXNFYXJIYXNoZWQoZWFyLCBtaW5YLCBtaW5ZLCBzaXplKSA6IGlzRWFyKGVhcikpIHtcbiAgICAgICAgICAgIC8vIGN1dCBvZmYgdGhlIHRyaWFuZ2xlXG4gICAgICAgICAgICB0cmlhbmdsZXMucHVzaChwcmV2LmkgLyBkaW0pO1xuICAgICAgICAgICAgdHJpYW5nbGVzLnB1c2goZWFyLmkgLyBkaW0pO1xuICAgICAgICAgICAgdHJpYW5nbGVzLnB1c2gobmV4dC5pIC8gZGltKTtcblxuICAgICAgICAgICAgcmVtb3ZlTm9kZShlYXIpO1xuXG4gICAgICAgICAgICAvLyBza2lwcGluZyB0aGUgbmV4dCB2ZXJ0aWNlIGxlYWRzIHRvIGxlc3Mgc2xpdmVyIHRyaWFuZ2xlc1xuICAgICAgICAgICAgZWFyID0gbmV4dC5uZXh0O1xuICAgICAgICAgICAgc3RvcCA9IG5leHQubmV4dDtcblxuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICBlYXIgPSBuZXh0O1xuXG4gICAgICAgIC8vIGlmIHdlIGxvb3BlZCB0aHJvdWdoIHRoZSB3aG9sZSByZW1haW5pbmcgcG9seWdvbiBhbmQgY2FuJ3QgZmluZCBhbnkgbW9yZSBlYXJzXG4gICAgICAgIGlmIChlYXIgPT09IHN0b3ApIHtcbiAgICAgICAgICAgIC8vIHRyeSBmaWx0ZXJpbmcgcG9pbnRzIGFuZCBzbGljaW5nIGFnYWluXG4gICAgICAgICAgICBpZiAoIXBhc3MpIHtcbiAgICAgICAgICAgICAgICBlYXJjdXRMaW5rZWQoZmlsdGVyUG9pbnRzKGVhciksIHRyaWFuZ2xlcywgZGltLCBtaW5YLCBtaW5ZLCBzaXplLCAxKTtcblxuICAgICAgICAgICAgLy8gaWYgdGhpcyBkaWRuJ3Qgd29yaywgdHJ5IGN1cmluZyBhbGwgc21hbGwgc2VsZi1pbnRlcnNlY3Rpb25zIGxvY2FsbHlcbiAgICAgICAgICAgIH0gZWxzZSBpZiAocGFzcyA9PT0gMSkge1xuICAgICAgICAgICAgICAgIGVhciA9IGN1cmVMb2NhbEludGVyc2VjdGlvbnMoZWFyLCB0cmlhbmdsZXMsIGRpbSk7XG4gICAgICAgICAgICAgICAgZWFyY3V0TGlua2VkKGVhciwgdHJpYW5nbGVzLCBkaW0sIG1pblgsIG1pblksIHNpemUsIDIpO1xuXG4gICAgICAgICAgICAvLyBhcyBhIGxhc3QgcmVzb3J0LCB0cnkgc3BsaXR0aW5nIHRoZSByZW1haW5pbmcgcG9seWdvbiBpbnRvIHR3b1xuICAgICAgICAgICAgfSBlbHNlIGlmIChwYXNzID09PSAyKSB7XG4gICAgICAgICAgICAgICAgc3BsaXRFYXJjdXQoZWFyLCB0cmlhbmdsZXMsIGRpbSwgbWluWCwgbWluWSwgc2l6ZSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgfVxufVxuXG4vLyBjaGVjayB3aGV0aGVyIGEgcG9seWdvbiBub2RlIGZvcm1zIGEgdmFsaWQgZWFyIHdpdGggYWRqYWNlbnQgbm9kZXNcbmZ1bmN0aW9uIGlzRWFyKGVhcikge1xuICAgIHZhciBhID0gZWFyLnByZXYsXG4gICAgICAgIGIgPSBlYXIsXG4gICAgICAgIGMgPSBlYXIubmV4dDtcblxuICAgIGlmIChhcmVhKGEsIGIsIGMpID49IDApIHJldHVybiBmYWxzZTsgLy8gcmVmbGV4LCBjYW4ndCBiZSBhbiBlYXJcblxuICAgIC8vIG5vdyBtYWtlIHN1cmUgd2UgZG9uJ3QgaGF2ZSBvdGhlciBwb2ludHMgaW5zaWRlIHRoZSBwb3RlbnRpYWwgZWFyXG4gICAgdmFyIHAgPSBlYXIubmV4dC5uZXh0O1xuXG4gICAgd2hpbGUgKHAgIT09IGVhci5wcmV2KSB7XG4gICAgICAgIGlmIChwb2ludEluVHJpYW5nbGUoYS54LCBhLnksIGIueCwgYi55LCBjLngsIGMueSwgcC54LCBwLnkpICYmXG4gICAgICAgICAgICBhcmVhKHAucHJldiwgcCwgcC5uZXh0KSA+PSAwKSByZXR1cm4gZmFsc2U7XG4gICAgICAgIHAgPSBwLm5leHQ7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRydWU7XG59XG5cbmZ1bmN0aW9uIGlzRWFySGFzaGVkKGVhciwgbWluWCwgbWluWSwgc2l6ZSkge1xuICAgIHZhciBhID0gZWFyLnByZXYsXG4gICAgICAgIGIgPSBlYXIsXG4gICAgICAgIGMgPSBlYXIubmV4dDtcblxuICAgIGlmIChhcmVhKGEsIGIsIGMpID49IDApIHJldHVybiBmYWxzZTsgLy8gcmVmbGV4LCBjYW4ndCBiZSBhbiBlYXJcblxuICAgIC8vIHRyaWFuZ2xlIGJib3g7IG1pbiAmIG1heCBhcmUgY2FsY3VsYXRlZCBsaWtlIHRoaXMgZm9yIHNwZWVkXG4gICAgdmFyIG1pblRYID0gYS54IDwgYi54ID8gKGEueCA8IGMueCA/IGEueCA6IGMueCkgOiAoYi54IDwgYy54ID8gYi54IDogYy54KSxcbiAgICAgICAgbWluVFkgPSBhLnkgPCBiLnkgPyAoYS55IDwgYy55ID8gYS55IDogYy55KSA6IChiLnkgPCBjLnkgPyBiLnkgOiBjLnkpLFxuICAgICAgICBtYXhUWCA9IGEueCA+IGIueCA/IChhLnggPiBjLnggPyBhLnggOiBjLngpIDogKGIueCA+IGMueCA/IGIueCA6IGMueCksXG4gICAgICAgIG1heFRZID0gYS55ID4gYi55ID8gKGEueSA+IGMueSA/IGEueSA6IGMueSkgOiAoYi55ID4gYy55ID8gYi55IDogYy55KTtcblxuICAgIC8vIHotb3JkZXIgcmFuZ2UgZm9yIHRoZSBjdXJyZW50IHRyaWFuZ2xlIGJib3g7XG4gICAgdmFyIG1pblogPSB6T3JkZXIobWluVFgsIG1pblRZLCBtaW5YLCBtaW5ZLCBzaXplKSxcbiAgICAgICAgbWF4WiA9IHpPcmRlcihtYXhUWCwgbWF4VFksIG1pblgsIG1pblksIHNpemUpO1xuXG4gICAgLy8gZmlyc3QgbG9vayBmb3IgcG9pbnRzIGluc2lkZSB0aGUgdHJpYW5nbGUgaW4gaW5jcmVhc2luZyB6LW9yZGVyXG4gICAgdmFyIHAgPSBlYXIubmV4dFo7XG5cbiAgICB3aGlsZSAocCAmJiBwLnogPD0gbWF4Wikge1xuICAgICAgICBpZiAocCAhPT0gZWFyLnByZXYgJiYgcCAhPT0gZWFyLm5leHQgJiZcbiAgICAgICAgICAgIHBvaW50SW5UcmlhbmdsZShhLngsIGEueSwgYi54LCBiLnksIGMueCwgYy55LCBwLngsIHAueSkgJiZcbiAgICAgICAgICAgIGFyZWEocC5wcmV2LCBwLCBwLm5leHQpID49IDApIHJldHVybiBmYWxzZTtcbiAgICAgICAgcCA9IHAubmV4dFo7XG4gICAgfVxuXG4gICAgLy8gdGhlbiBsb29rIGZvciBwb2ludHMgaW4gZGVjcmVhc2luZyB6LW9yZGVyXG4gICAgcCA9IGVhci5wcmV2WjtcblxuICAgIHdoaWxlIChwICYmIHAueiA+PSBtaW5aKSB7XG4gICAgICAgIGlmIChwICE9PSBlYXIucHJldiAmJiBwICE9PSBlYXIubmV4dCAmJlxuICAgICAgICAgICAgcG9pbnRJblRyaWFuZ2xlKGEueCwgYS55LCBiLngsIGIueSwgYy54LCBjLnksIHAueCwgcC55KSAmJlxuICAgICAgICAgICAgYXJlYShwLnByZXYsIHAsIHAubmV4dCkgPj0gMCkgcmV0dXJuIGZhbHNlO1xuICAgICAgICBwID0gcC5wcmV2WjtcbiAgICB9XG5cbiAgICByZXR1cm4gdHJ1ZTtcbn1cblxuLy8gZ28gdGhyb3VnaCBhbGwgcG9seWdvbiBub2RlcyBhbmQgY3VyZSBzbWFsbCBsb2NhbCBzZWxmLWludGVyc2VjdGlvbnNcbmZ1bmN0aW9uIGN1cmVMb2NhbEludGVyc2VjdGlvbnMoc3RhcnQsIHRyaWFuZ2xlcywgZGltKSB7XG4gICAgdmFyIHAgPSBzdGFydDtcbiAgICBkbyB7XG4gICAgICAgIHZhciBhID0gcC5wcmV2LFxuICAgICAgICAgICAgYiA9IHAubmV4dC5uZXh0O1xuXG4gICAgICAgIC8vIGEgc2VsZi1pbnRlcnNlY3Rpb24gd2hlcmUgZWRnZSAodltpLTFdLHZbaV0pIGludGVyc2VjdHMgKHZbaSsxXSx2W2krMl0pXG4gICAgICAgIGlmIChpbnRlcnNlY3RzKGEsIHAsIHAubmV4dCwgYikgJiYgbG9jYWxseUluc2lkZShhLCBiKSAmJiBsb2NhbGx5SW5zaWRlKGIsIGEpKSB7XG5cbiAgICAgICAgICAgIHRyaWFuZ2xlcy5wdXNoKGEuaSAvIGRpbSk7XG4gICAgICAgICAgICB0cmlhbmdsZXMucHVzaChwLmkgLyBkaW0pO1xuICAgICAgICAgICAgdHJpYW5nbGVzLnB1c2goYi5pIC8gZGltKTtcblxuICAgICAgICAgICAgLy8gcmVtb3ZlIHR3byBub2RlcyBpbnZvbHZlZFxuICAgICAgICAgICAgcmVtb3ZlTm9kZShwKTtcbiAgICAgICAgICAgIHJlbW92ZU5vZGUocC5uZXh0KTtcblxuICAgICAgICAgICAgcCA9IHN0YXJ0ID0gYjtcbiAgICAgICAgfVxuICAgICAgICBwID0gcC5uZXh0O1xuICAgIH0gd2hpbGUgKHAgIT09IHN0YXJ0KTtcblxuICAgIHJldHVybiBwO1xufVxuXG4vLyB0cnkgc3BsaXR0aW5nIHBvbHlnb24gaW50byB0d28gYW5kIHRyaWFuZ3VsYXRlIHRoZW0gaW5kZXBlbmRlbnRseVxuZnVuY3Rpb24gc3BsaXRFYXJjdXQoc3RhcnQsIHRyaWFuZ2xlcywgZGltLCBtaW5YLCBtaW5ZLCBzaXplKSB7XG4gICAgLy8gbG9vayBmb3IgYSB2YWxpZCBkaWFnb25hbCB0aGF0IGRpdmlkZXMgdGhlIHBvbHlnb24gaW50byB0d29cbiAgICB2YXIgYSA9IHN0YXJ0O1xuICAgIGRvIHtcbiAgICAgICAgdmFyIGIgPSBhLm5leHQubmV4dDtcbiAgICAgICAgd2hpbGUgKGIgIT09IGEucHJldikge1xuICAgICAgICAgICAgaWYgKGEuaSAhPT0gYi5pICYmIGlzVmFsaWREaWFnb25hbChhLCBiKSkge1xuICAgICAgICAgICAgICAgIC8vIHNwbGl0IHRoZSBwb2x5Z29uIGluIHR3byBieSB0aGUgZGlhZ29uYWxcbiAgICAgICAgICAgICAgICB2YXIgYyA9IHNwbGl0UG9seWdvbihhLCBiKTtcblxuICAgICAgICAgICAgICAgIC8vIGZpbHRlciBjb2xpbmVhciBwb2ludHMgYXJvdW5kIHRoZSBjdXRzXG4gICAgICAgICAgICAgICAgYSA9IGZpbHRlclBvaW50cyhhLCBhLm5leHQpO1xuICAgICAgICAgICAgICAgIGMgPSBmaWx0ZXJQb2ludHMoYywgYy5uZXh0KTtcblxuICAgICAgICAgICAgICAgIC8vIHJ1biBlYXJjdXQgb24gZWFjaCBoYWxmXG4gICAgICAgICAgICAgICAgZWFyY3V0TGlua2VkKGEsIHRyaWFuZ2xlcywgZGltLCBtaW5YLCBtaW5ZLCBzaXplKTtcbiAgICAgICAgICAgICAgICBlYXJjdXRMaW5rZWQoYywgdHJpYW5nbGVzLCBkaW0sIG1pblgsIG1pblksIHNpemUpO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGIgPSBiLm5leHQ7XG4gICAgICAgIH1cbiAgICAgICAgYSA9IGEubmV4dDtcbiAgICB9IHdoaWxlIChhICE9PSBzdGFydCk7XG59XG5cbi8vIGxpbmsgZXZlcnkgaG9sZSBpbnRvIHRoZSBvdXRlciBsb29wLCBwcm9kdWNpbmcgYSBzaW5nbGUtcmluZyBwb2x5Z29uIHdpdGhvdXQgaG9sZXNcbmZ1bmN0aW9uIGVsaW1pbmF0ZUhvbGVzKGRhdGEsIGhvbGVJbmRpY2VzLCBvdXRlck5vZGUsIGRpbSkge1xuICAgIHZhciBxdWV1ZSA9IFtdLFxuICAgICAgICBpLCBsZW4sIHN0YXJ0LCBlbmQsIGxpc3Q7XG5cbiAgICBmb3IgKGkgPSAwLCBsZW4gPSBob2xlSW5kaWNlcy5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuICAgICAgICBzdGFydCA9IGhvbGVJbmRpY2VzW2ldICogZGltO1xuICAgICAgICBlbmQgPSBpIDwgbGVuIC0gMSA/IGhvbGVJbmRpY2VzW2kgKyAxXSAqIGRpbSA6IGRhdGEubGVuZ3RoO1xuICAgICAgICBsaXN0ID0gbGlua2VkTGlzdChkYXRhLCBzdGFydCwgZW5kLCBkaW0sIGZhbHNlKTtcbiAgICAgICAgaWYgKGxpc3QgPT09IGxpc3QubmV4dCkgbGlzdC5zdGVpbmVyID0gdHJ1ZTtcbiAgICAgICAgcXVldWUucHVzaChnZXRMZWZ0bW9zdChsaXN0KSk7XG4gICAgfVxuXG4gICAgcXVldWUuc29ydChjb21wYXJlWCk7XG5cbiAgICAvLyBwcm9jZXNzIGhvbGVzIGZyb20gbGVmdCB0byByaWdodFxuICAgIGZvciAoaSA9IDA7IGkgPCBxdWV1ZS5sZW5ndGg7IGkrKykge1xuICAgICAgICBlbGltaW5hdGVIb2xlKHF1ZXVlW2ldLCBvdXRlck5vZGUpO1xuICAgICAgICBvdXRlck5vZGUgPSBmaWx0ZXJQb2ludHMob3V0ZXJOb2RlLCBvdXRlck5vZGUubmV4dCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG91dGVyTm9kZTtcbn1cblxuZnVuY3Rpb24gY29tcGFyZVgoYSwgYikge1xuICAgIHJldHVybiBhLnggLSBiLng7XG59XG5cbi8vIGZpbmQgYSBicmlkZ2UgYmV0d2VlbiB2ZXJ0aWNlcyB0aGF0IGNvbm5lY3RzIGhvbGUgd2l0aCBhbiBvdXRlciByaW5nIGFuZCBhbmQgbGluayBpdFxuZnVuY3Rpb24gZWxpbWluYXRlSG9sZShob2xlLCBvdXRlck5vZGUpIHtcbiAgICBvdXRlck5vZGUgPSBmaW5kSG9sZUJyaWRnZShob2xlLCBvdXRlck5vZGUpO1xuICAgIGlmIChvdXRlck5vZGUpIHtcbiAgICAgICAgdmFyIGIgPSBzcGxpdFBvbHlnb24ob3V0ZXJOb2RlLCBob2xlKTtcbiAgICAgICAgZmlsdGVyUG9pbnRzKGIsIGIubmV4dCk7XG4gICAgfVxufVxuXG4vLyBEYXZpZCBFYmVybHkncyBhbGdvcml0aG0gZm9yIGZpbmRpbmcgYSBicmlkZ2UgYmV0d2VlbiBob2xlIGFuZCBvdXRlciBwb2x5Z29uXG5mdW5jdGlvbiBmaW5kSG9sZUJyaWRnZShob2xlLCBvdXRlck5vZGUpIHtcbiAgICB2YXIgcCA9IG91dGVyTm9kZSxcbiAgICAgICAgaHggPSBob2xlLngsXG4gICAgICAgIGh5ID0gaG9sZS55LFxuICAgICAgICBxeCA9IC1JbmZpbml0eSxcbiAgICAgICAgbTtcblxuICAgIC8vIGZpbmQgYSBzZWdtZW50IGludGVyc2VjdGVkIGJ5IGEgcmF5IGZyb20gdGhlIGhvbGUncyBsZWZ0bW9zdCBwb2ludCB0byB0aGUgbGVmdDtcbiAgICAvLyBzZWdtZW50J3MgZW5kcG9pbnQgd2l0aCBsZXNzZXIgeCB3aWxsIGJlIHBvdGVudGlhbCBjb25uZWN0aW9uIHBvaW50XG4gICAgZG8ge1xuICAgICAgICBpZiAoaHkgPD0gcC55ICYmIGh5ID49IHAubmV4dC55KSB7XG4gICAgICAgICAgICB2YXIgeCA9IHAueCArIChoeSAtIHAueSkgKiAocC5uZXh0LnggLSBwLngpIC8gKHAubmV4dC55IC0gcC55KTtcbiAgICAgICAgICAgIGlmICh4IDw9IGh4ICYmIHggPiBxeCkge1xuICAgICAgICAgICAgICAgIHF4ID0geDtcbiAgICAgICAgICAgICAgICBtID0gcC54IDwgcC5uZXh0LnggPyBwIDogcC5uZXh0O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHAgPSBwLm5leHQ7XG4gICAgfSB3aGlsZSAocCAhPT0gb3V0ZXJOb2RlKTtcblxuICAgIGlmICghbSkgcmV0dXJuIG51bGw7XG5cbiAgICAvLyBsb29rIGZvciBwb2ludHMgaW5zaWRlIHRoZSB0cmlhbmdsZSBvZiBob2xlIHBvaW50LCBzZWdtZW50IGludGVyc2VjdGlvbiBhbmQgZW5kcG9pbnQ7XG4gICAgLy8gaWYgdGhlcmUgYXJlIG5vIHBvaW50cyBmb3VuZCwgd2UgaGF2ZSBhIHZhbGlkIGNvbm5lY3Rpb247XG4gICAgLy8gb3RoZXJ3aXNlIGNob29zZSB0aGUgcG9pbnQgb2YgdGhlIG1pbmltdW0gYW5nbGUgd2l0aCB0aGUgcmF5IGFzIGNvbm5lY3Rpb24gcG9pbnRcblxuICAgIHZhciBzdG9wID0gbSxcbiAgICAgICAgdGFuTWluID0gSW5maW5pdHksXG4gICAgICAgIHRhbjtcblxuICAgIHAgPSBtLm5leHQ7XG5cbiAgICB3aGlsZSAocCAhPT0gc3RvcCkge1xuICAgICAgICBpZiAoaHggPj0gcC54ICYmIHAueCA+PSBtLnggJiZcbiAgICAgICAgICAgICAgICBwb2ludEluVHJpYW5nbGUoaHkgPCBtLnkgPyBoeCA6IHF4LCBoeSwgbS54LCBtLnksIGh5IDwgbS55ID8gcXggOiBoeCwgaHksIHAueCwgcC55KSkge1xuXG4gICAgICAgICAgICB0YW4gPSBNYXRoLmFicyhoeSAtIHAueSkgLyAoaHggLSBwLngpOyAvLyB0YW5nZW50aWFsXG5cbiAgICAgICAgICAgIGlmICgodGFuIDwgdGFuTWluIHx8ICh0YW4gPT09IHRhbk1pbiAmJiBwLnggPiBtLngpKSAmJiBsb2NhbGx5SW5zaWRlKHAsIGhvbGUpKSB7XG4gICAgICAgICAgICAgICAgbSA9IHA7XG4gICAgICAgICAgICAgICAgdGFuTWluID0gdGFuO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcCA9IHAubmV4dDtcbiAgICB9XG5cbiAgICByZXR1cm4gbTtcbn1cblxuLy8gaW50ZXJsaW5rIHBvbHlnb24gbm9kZXMgaW4gei1vcmRlclxuZnVuY3Rpb24gaW5kZXhDdXJ2ZShzdGFydCwgbWluWCwgbWluWSwgc2l6ZSkge1xuICAgIHZhciBwID0gc3RhcnQ7XG4gICAgZG8ge1xuICAgICAgICBpZiAocC56ID09PSBudWxsKSBwLnogPSB6T3JkZXIocC54LCBwLnksIG1pblgsIG1pblksIHNpemUpO1xuICAgICAgICBwLnByZXZaID0gcC5wcmV2O1xuICAgICAgICBwLm5leHRaID0gcC5uZXh0O1xuICAgICAgICBwID0gcC5uZXh0O1xuICAgIH0gd2hpbGUgKHAgIT09IHN0YXJ0KTtcblxuICAgIHAucHJldloubmV4dFogPSBudWxsO1xuICAgIHAucHJldlogPSBudWxsO1xuXG4gICAgc29ydExpbmtlZChwKTtcbn1cblxuLy8gU2ltb24gVGF0aGFtJ3MgbGlua2VkIGxpc3QgbWVyZ2Ugc29ydCBhbGdvcml0aG1cbi8vIGh0dHA6Ly93d3cuY2hpYXJrLmdyZWVuZW5kLm9yZy51ay9+c2d0YXRoYW0vYWxnb3JpdGhtcy9saXN0c29ydC5odG1sXG5mdW5jdGlvbiBzb3J0TGlua2VkKGxpc3QpIHtcbiAgICB2YXIgaSwgcCwgcSwgZSwgdGFpbCwgbnVtTWVyZ2VzLCBwU2l6ZSwgcVNpemUsXG4gICAgICAgIGluU2l6ZSA9IDE7XG5cbiAgICBkbyB7XG4gICAgICAgIHAgPSBsaXN0O1xuICAgICAgICBsaXN0ID0gbnVsbDtcbiAgICAgICAgdGFpbCA9IG51bGw7XG4gICAgICAgIG51bU1lcmdlcyA9IDA7XG5cbiAgICAgICAgd2hpbGUgKHApIHtcbiAgICAgICAgICAgIG51bU1lcmdlcysrO1xuICAgICAgICAgICAgcSA9IHA7XG4gICAgICAgICAgICBwU2l6ZSA9IDA7XG4gICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgaW5TaXplOyBpKyspIHtcbiAgICAgICAgICAgICAgICBwU2l6ZSsrO1xuICAgICAgICAgICAgICAgIHEgPSBxLm5leHRaO1xuICAgICAgICAgICAgICAgIGlmICghcSkgYnJlYWs7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHFTaXplID0gaW5TaXplO1xuXG4gICAgICAgICAgICB3aGlsZSAocFNpemUgPiAwIHx8IChxU2l6ZSA+IDAgJiYgcSkpIHtcblxuICAgICAgICAgICAgICAgIGlmIChwU2l6ZSA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICBlID0gcTtcbiAgICAgICAgICAgICAgICAgICAgcSA9IHEubmV4dFo7XG4gICAgICAgICAgICAgICAgICAgIHFTaXplLS07XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChxU2l6ZSA9PT0gMCB8fCAhcSkge1xuICAgICAgICAgICAgICAgICAgICBlID0gcDtcbiAgICAgICAgICAgICAgICAgICAgcCA9IHAubmV4dFo7XG4gICAgICAgICAgICAgICAgICAgIHBTaXplLS07XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChwLnogPD0gcS56KSB7XG4gICAgICAgICAgICAgICAgICAgIGUgPSBwO1xuICAgICAgICAgICAgICAgICAgICBwID0gcC5uZXh0WjtcbiAgICAgICAgICAgICAgICAgICAgcFNpemUtLTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBlID0gcTtcbiAgICAgICAgICAgICAgICAgICAgcSA9IHEubmV4dFo7XG4gICAgICAgICAgICAgICAgICAgIHFTaXplLS07XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKHRhaWwpIHRhaWwubmV4dFogPSBlO1xuICAgICAgICAgICAgICAgIGVsc2UgbGlzdCA9IGU7XG5cbiAgICAgICAgICAgICAgICBlLnByZXZaID0gdGFpbDtcbiAgICAgICAgICAgICAgICB0YWlsID0gZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcCA9IHE7XG4gICAgICAgIH1cblxuICAgICAgICB0YWlsLm5leHRaID0gbnVsbDtcbiAgICAgICAgaW5TaXplICo9IDI7XG5cbiAgICB9IHdoaWxlIChudW1NZXJnZXMgPiAxKTtcblxuICAgIHJldHVybiBsaXN0O1xufVxuXG4vLyB6LW9yZGVyIG9mIGEgcG9pbnQgZ2l2ZW4gY29vcmRzIGFuZCBzaXplIG9mIHRoZSBkYXRhIGJvdW5kaW5nIGJveFxuZnVuY3Rpb24gek9yZGVyKHgsIHksIG1pblgsIG1pblksIHNpemUpIHtcbiAgICAvLyBjb29yZHMgYXJlIHRyYW5zZm9ybWVkIGludG8gbm9uLW5lZ2F0aXZlIDE1LWJpdCBpbnRlZ2VyIHJhbmdlXG4gICAgeCA9IDMyNzY3ICogKHggLSBtaW5YKSAvIHNpemU7XG4gICAgeSA9IDMyNzY3ICogKHkgLSBtaW5ZKSAvIHNpemU7XG5cbiAgICB4ID0gKHggfCAoeCA8PCA4KSkgJiAweDAwRkYwMEZGO1xuICAgIHggPSAoeCB8ICh4IDw8IDQpKSAmIDB4MEYwRjBGMEY7XG4gICAgeCA9ICh4IHwgKHggPDwgMikpICYgMHgzMzMzMzMzMztcbiAgICB4ID0gKHggfCAoeCA8PCAxKSkgJiAweDU1NTU1NTU1O1xuXG4gICAgeSA9ICh5IHwgKHkgPDwgOCkpICYgMHgwMEZGMDBGRjtcbiAgICB5ID0gKHkgfCAoeSA8PCA0KSkgJiAweDBGMEYwRjBGO1xuICAgIHkgPSAoeSB8ICh5IDw8IDIpKSAmIDB4MzMzMzMzMzM7XG4gICAgeSA9ICh5IHwgKHkgPDwgMSkpICYgMHg1NTU1NTU1NTtcblxuICAgIHJldHVybiB4IHwgKHkgPDwgMSk7XG59XG5cbi8vIGZpbmQgdGhlIGxlZnRtb3N0IG5vZGUgb2YgYSBwb2x5Z29uIHJpbmdcbmZ1bmN0aW9uIGdldExlZnRtb3N0KHN0YXJ0KSB7XG4gICAgdmFyIHAgPSBzdGFydCxcbiAgICAgICAgbGVmdG1vc3QgPSBzdGFydDtcbiAgICBkbyB7XG4gICAgICAgIGlmIChwLnggPCBsZWZ0bW9zdC54KSBsZWZ0bW9zdCA9IHA7XG4gICAgICAgIHAgPSBwLm5leHQ7XG4gICAgfSB3aGlsZSAocCAhPT0gc3RhcnQpO1xuXG4gICAgcmV0dXJuIGxlZnRtb3N0O1xufVxuXG4vLyBjaGVjayBpZiBhIHBvaW50IGxpZXMgd2l0aGluIGEgY29udmV4IHRyaWFuZ2xlXG5mdW5jdGlvbiBwb2ludEluVHJpYW5nbGUoYXgsIGF5LCBieCwgYnksIGN4LCBjeSwgcHgsIHB5KSB7XG4gICAgcmV0dXJuIChjeCAtIHB4KSAqIChheSAtIHB5KSAtIChheCAtIHB4KSAqIChjeSAtIHB5KSA+PSAwICYmXG4gICAgICAgICAgIChheCAtIHB4KSAqIChieSAtIHB5KSAtIChieCAtIHB4KSAqIChheSAtIHB5KSA+PSAwICYmXG4gICAgICAgICAgIChieCAtIHB4KSAqIChjeSAtIHB5KSAtIChjeCAtIHB4KSAqIChieSAtIHB5KSA+PSAwO1xufVxuXG4vLyBjaGVjayBpZiBhIGRpYWdvbmFsIGJldHdlZW4gdHdvIHBvbHlnb24gbm9kZXMgaXMgdmFsaWQgKGxpZXMgaW4gcG9seWdvbiBpbnRlcmlvcilcbmZ1bmN0aW9uIGlzVmFsaWREaWFnb25hbChhLCBiKSB7XG4gICAgcmV0dXJuIGVxdWFscyhhLCBiKSB8fCBhLm5leHQuaSAhPT0gYi5pICYmIGEucHJldi5pICE9PSBiLmkgJiYgIWludGVyc2VjdHNQb2x5Z29uKGEsIGIpICYmXG4gICAgICAgICAgIGxvY2FsbHlJbnNpZGUoYSwgYikgJiYgbG9jYWxseUluc2lkZShiLCBhKSAmJiBtaWRkbGVJbnNpZGUoYSwgYik7XG59XG5cbi8vIHNpZ25lZCBhcmVhIG9mIGEgdHJpYW5nbGVcbmZ1bmN0aW9uIGFyZWEocCwgcSwgcikge1xuICAgIHJldHVybiAocS55IC0gcC55KSAqIChyLnggLSBxLngpIC0gKHEueCAtIHAueCkgKiAoci55IC0gcS55KTtcbn1cblxuLy8gY2hlY2sgaWYgdHdvIHBvaW50cyBhcmUgZXF1YWxcbmZ1bmN0aW9uIGVxdWFscyhwMSwgcDIpIHtcbiAgICByZXR1cm4gcDEueCA9PT0gcDIueCAmJiBwMS55ID09PSBwMi55O1xufVxuXG4vLyBjaGVjayBpZiB0d28gc2VnbWVudHMgaW50ZXJzZWN0XG5mdW5jdGlvbiBpbnRlcnNlY3RzKHAxLCBxMSwgcDIsIHEyKSB7XG4gICAgcmV0dXJuIGFyZWEocDEsIHExLCBwMikgPiAwICE9PSBhcmVhKHAxLCBxMSwgcTIpID4gMCAmJlxuICAgICAgICAgICBhcmVhKHAyLCBxMiwgcDEpID4gMCAhPT0gYXJlYShwMiwgcTIsIHExKSA+IDA7XG59XG5cbi8vIGNoZWNrIGlmIGEgcG9seWdvbiBkaWFnb25hbCBpbnRlcnNlY3RzIGFueSBwb2x5Z29uIHNlZ21lbnRzXG5mdW5jdGlvbiBpbnRlcnNlY3RzUG9seWdvbihhLCBiKSB7XG4gICAgdmFyIHAgPSBhO1xuICAgIGRvIHtcbiAgICAgICAgaWYgKHAuaSAhPT0gYS5pICYmIHAubmV4dC5pICE9PSBhLmkgJiYgcC5pICE9PSBiLmkgJiYgcC5uZXh0LmkgIT09IGIuaSAmJlxuICAgICAgICAgICAgICAgIGludGVyc2VjdHMocCwgcC5uZXh0LCBhLCBiKSkgcmV0dXJuIHRydWU7XG4gICAgICAgIHAgPSBwLm5leHQ7XG4gICAgfSB3aGlsZSAocCAhPT0gYSk7XG5cbiAgICByZXR1cm4gZmFsc2U7XG59XG5cbi8vIGNoZWNrIGlmIGEgcG9seWdvbiBkaWFnb25hbCBpcyBsb2NhbGx5IGluc2lkZSB0aGUgcG9seWdvblxuZnVuY3Rpb24gbG9jYWxseUluc2lkZShhLCBiKSB7XG4gICAgcmV0dXJuIGFyZWEoYS5wcmV2LCBhLCBhLm5leHQpIDwgMCA/XG4gICAgICAgIGFyZWEoYSwgYiwgYS5uZXh0KSA+PSAwICYmIGFyZWEoYSwgYS5wcmV2LCBiKSA+PSAwIDpcbiAgICAgICAgYXJlYShhLCBiLCBhLnByZXYpIDwgMCB8fCBhcmVhKGEsIGEubmV4dCwgYikgPCAwO1xufVxuXG4vLyBjaGVjayBpZiB0aGUgbWlkZGxlIHBvaW50IG9mIGEgcG9seWdvbiBkaWFnb25hbCBpcyBpbnNpZGUgdGhlIHBvbHlnb25cbmZ1bmN0aW9uIG1pZGRsZUluc2lkZShhLCBiKSB7XG4gICAgdmFyIHAgPSBhLFxuICAgICAgICBpbnNpZGUgPSBmYWxzZSxcbiAgICAgICAgcHggPSAoYS54ICsgYi54KSAvIDIsXG4gICAgICAgIHB5ID0gKGEueSArIGIueSkgLyAyO1xuICAgIGRvIHtcbiAgICAgICAgaWYgKCgocC55ID4gcHkpICE9PSAocC5uZXh0LnkgPiBweSkpICYmIChweCA8IChwLm5leHQueCAtIHAueCkgKiAocHkgLSBwLnkpIC8gKHAubmV4dC55IC0gcC55KSArIHAueCkpXG4gICAgICAgICAgICBpbnNpZGUgPSAhaW5zaWRlO1xuICAgICAgICBwID0gcC5uZXh0O1xuICAgIH0gd2hpbGUgKHAgIT09IGEpO1xuXG4gICAgcmV0dXJuIGluc2lkZTtcbn1cblxuLy8gbGluayB0d28gcG9seWdvbiB2ZXJ0aWNlcyB3aXRoIGEgYnJpZGdlOyBpZiB0aGUgdmVydGljZXMgYmVsb25nIHRvIHRoZSBzYW1lIHJpbmcsIGl0IHNwbGl0cyBwb2x5Z29uIGludG8gdHdvO1xuLy8gaWYgb25lIGJlbG9uZ3MgdG8gdGhlIG91dGVyIHJpbmcgYW5kIGFub3RoZXIgdG8gYSBob2xlLCBpdCBtZXJnZXMgaXQgaW50byBhIHNpbmdsZSByaW5nXG5mdW5jdGlvbiBzcGxpdFBvbHlnb24oYSwgYikge1xuICAgIHZhciBhMiA9IG5ldyBOb2RlKGEuaSwgYS54LCBhLnkpLFxuICAgICAgICBiMiA9IG5ldyBOb2RlKGIuaSwgYi54LCBiLnkpLFxuICAgICAgICBhbiA9IGEubmV4dCxcbiAgICAgICAgYnAgPSBiLnByZXY7XG5cbiAgICBhLm5leHQgPSBiO1xuICAgIGIucHJldiA9IGE7XG5cbiAgICBhMi5uZXh0ID0gYW47XG4gICAgYW4ucHJldiA9IGEyO1xuXG4gICAgYjIubmV4dCA9IGEyO1xuICAgIGEyLnByZXYgPSBiMjtcblxuICAgIGJwLm5leHQgPSBiMjtcbiAgICBiMi5wcmV2ID0gYnA7XG5cbiAgICByZXR1cm4gYjI7XG59XG5cbi8vIGNyZWF0ZSBhIG5vZGUgYW5kIG9wdGlvbmFsbHkgbGluayBpdCB3aXRoIHByZXZpb3VzIG9uZSAoaW4gYSBjaXJjdWxhciBkb3VibHkgbGlua2VkIGxpc3QpXG5mdW5jdGlvbiBpbnNlcnROb2RlKGksIHgsIHksIGxhc3QpIHtcbiAgICB2YXIgcCA9IG5ldyBOb2RlKGksIHgsIHkpO1xuXG4gICAgaWYgKCFsYXN0KSB7XG4gICAgICAgIHAucHJldiA9IHA7XG4gICAgICAgIHAubmV4dCA9IHA7XG5cbiAgICB9IGVsc2Uge1xuICAgICAgICBwLm5leHQgPSBsYXN0Lm5leHQ7XG4gICAgICAgIHAucHJldiA9IGxhc3Q7XG4gICAgICAgIGxhc3QubmV4dC5wcmV2ID0gcDtcbiAgICAgICAgbGFzdC5uZXh0ID0gcDtcbiAgICB9XG4gICAgcmV0dXJuIHA7XG59XG5cbmZ1bmN0aW9uIHJlbW92ZU5vZGUocCkge1xuICAgIHAubmV4dC5wcmV2ID0gcC5wcmV2O1xuICAgIHAucHJldi5uZXh0ID0gcC5uZXh0O1xuXG4gICAgaWYgKHAucHJldlopIHAucHJldloubmV4dFogPSBwLm5leHRaO1xuICAgIGlmIChwLm5leHRaKSBwLm5leHRaLnByZXZaID0gcC5wcmV2Wjtcbn1cblxuZnVuY3Rpb24gTm9kZShpLCB4LCB5KSB7XG4gICAgLy8gdmVydGljZSBpbmRleCBpbiBjb29yZGluYXRlcyBhcnJheVxuICAgIHRoaXMuaSA9IGk7XG5cbiAgICAvLyB2ZXJ0ZXggY29vcmRpbmF0ZXNcbiAgICB0aGlzLnggPSB4O1xuICAgIHRoaXMueSA9IHk7XG5cbiAgICAvLyBwcmV2aW91cyBhbmQgbmV4dCB2ZXJ0aWNlIG5vZGVzIGluIGEgcG9seWdvbiByaW5nXG4gICAgdGhpcy5wcmV2ID0gbnVsbDtcbiAgICB0aGlzLm5leHQgPSBudWxsO1xuXG4gICAgLy8gei1vcmRlciBjdXJ2ZSB2YWx1ZVxuICAgIHRoaXMueiA9IG51bGw7XG5cbiAgICAvLyBwcmV2aW91cyBhbmQgbmV4dCBub2RlcyBpbiB6LW9yZGVyXG4gICAgdGhpcy5wcmV2WiA9IG51bGw7XG4gICAgdGhpcy5uZXh0WiA9IG51bGw7XG5cbiAgICAvLyBpbmRpY2F0ZXMgd2hldGhlciB0aGlzIGlzIGEgc3RlaW5lciBwb2ludFxuICAgIHRoaXMuc3RlaW5lciA9IGZhbHNlO1xufVxuIiwiJ3VzZSBzdHJpY3QnO1xuXG4vL1xuLy8gV2Ugc3RvcmUgb3VyIEVFIG9iamVjdHMgaW4gYSBwbGFpbiBvYmplY3Qgd2hvc2UgcHJvcGVydGllcyBhcmUgZXZlbnQgbmFtZXMuXG4vLyBJZiBgT2JqZWN0LmNyZWF0ZShudWxsKWAgaXMgbm90IHN1cHBvcnRlZCB3ZSBwcmVmaXggdGhlIGV2ZW50IG5hbWVzIHdpdGggYVxuLy8gYH5gIHRvIG1ha2Ugc3VyZSB0aGF0IHRoZSBidWlsdC1pbiBvYmplY3QgcHJvcGVydGllcyBhcmUgbm90IG92ZXJyaWRkZW4gb3Jcbi8vIHVzZWQgYXMgYW4gYXR0YWNrIHZlY3Rvci5cbi8vIFdlIGFsc28gYXNzdW1lIHRoYXQgYE9iamVjdC5jcmVhdGUobnVsbClgIGlzIGF2YWlsYWJsZSB3aGVuIHRoZSBldmVudCBuYW1lXG4vLyBpcyBhbiBFUzYgU3ltYm9sLlxuLy9cbnZhciBwcmVmaXggPSB0eXBlb2YgT2JqZWN0LmNyZWF0ZSAhPT0gJ2Z1bmN0aW9uJyA/ICd+JyA6IGZhbHNlO1xuXG4vKipcbiAqIFJlcHJlc2VudGF0aW9uIG9mIGEgc2luZ2xlIEV2ZW50RW1pdHRlciBmdW5jdGlvbi5cbiAqXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmbiBFdmVudCBoYW5kbGVyIHRvIGJlIGNhbGxlZC5cbiAqIEBwYXJhbSB7TWl4ZWR9IGNvbnRleHQgQ29udGV4dCBmb3IgZnVuY3Rpb24gZXhlY3V0aW9uLlxuICogQHBhcmFtIHtCb29sZWFufSBvbmNlIE9ubHkgZW1pdCBvbmNlXG4gKiBAYXBpIHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gRUUoZm4sIGNvbnRleHQsIG9uY2UpIHtcbiAgdGhpcy5mbiA9IGZuO1xuICB0aGlzLmNvbnRleHQgPSBjb250ZXh0O1xuICB0aGlzLm9uY2UgPSBvbmNlIHx8IGZhbHNlO1xufVxuXG4vKipcbiAqIE1pbmltYWwgRXZlbnRFbWl0dGVyIGludGVyZmFjZSB0aGF0IGlzIG1vbGRlZCBhZ2FpbnN0IHRoZSBOb2RlLmpzXG4gKiBFdmVudEVtaXR0ZXIgaW50ZXJmYWNlLlxuICpcbiAqIEBjb25zdHJ1Y3RvclxuICogQGFwaSBwdWJsaWNcbiAqL1xuZnVuY3Rpb24gRXZlbnRFbWl0dGVyKCkgeyAvKiBOb3RoaW5nIHRvIHNldCAqLyB9XG5cbi8qKlxuICogSG9sZHMgdGhlIGFzc2lnbmVkIEV2ZW50RW1pdHRlcnMgYnkgbmFtZS5cbiAqXG4gKiBAdHlwZSB7T2JqZWN0fVxuICogQHByaXZhdGVcbiAqL1xuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5fZXZlbnRzID0gdW5kZWZpbmVkO1xuXG4vKipcbiAqIFJldHVybiBhIGxpc3Qgb2YgYXNzaWduZWQgZXZlbnQgbGlzdGVuZXJzLlxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBldmVudCBUaGUgZXZlbnRzIHRoYXQgc2hvdWxkIGJlIGxpc3RlZC5cbiAqIEBwYXJhbSB7Qm9vbGVhbn0gZXhpc3RzIFdlIG9ubHkgbmVlZCB0byBrbm93IGlmIHRoZXJlIGFyZSBsaXN0ZW5lcnMuXG4gKiBAcmV0dXJucyB7QXJyYXl8Qm9vbGVhbn1cbiAqIEBhcGkgcHVibGljXG4gKi9cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUubGlzdGVuZXJzID0gZnVuY3Rpb24gbGlzdGVuZXJzKGV2ZW50LCBleGlzdHMpIHtcbiAgdmFyIGV2dCA9IHByZWZpeCA/IHByZWZpeCArIGV2ZW50IDogZXZlbnRcbiAgICAsIGF2YWlsYWJsZSA9IHRoaXMuX2V2ZW50cyAmJiB0aGlzLl9ldmVudHNbZXZ0XTtcblxuICBpZiAoZXhpc3RzKSByZXR1cm4gISFhdmFpbGFibGU7XG4gIGlmICghYXZhaWxhYmxlKSByZXR1cm4gW107XG4gIGlmIChhdmFpbGFibGUuZm4pIHJldHVybiBbYXZhaWxhYmxlLmZuXTtcblxuICBmb3IgKHZhciBpID0gMCwgbCA9IGF2YWlsYWJsZS5sZW5ndGgsIGVlID0gbmV3IEFycmF5KGwpOyBpIDwgbDsgaSsrKSB7XG4gICAgZWVbaV0gPSBhdmFpbGFibGVbaV0uZm47XG4gIH1cblxuICByZXR1cm4gZWU7XG59O1xuXG4vKipcbiAqIEVtaXQgYW4gZXZlbnQgdG8gYWxsIHJlZ2lzdGVyZWQgZXZlbnQgbGlzdGVuZXJzLlxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBldmVudCBUaGUgbmFtZSBvZiB0aGUgZXZlbnQuXG4gKiBAcmV0dXJucyB7Qm9vbGVhbn0gSW5kaWNhdGlvbiBpZiB3ZSd2ZSBlbWl0dGVkIGFuIGV2ZW50LlxuICogQGFwaSBwdWJsaWNcbiAqL1xuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5lbWl0ID0gZnVuY3Rpb24gZW1pdChldmVudCwgYTEsIGEyLCBhMywgYTQsIGE1KSB7XG4gIHZhciBldnQgPSBwcmVmaXggPyBwcmVmaXggKyBldmVudCA6IGV2ZW50O1xuXG4gIGlmICghdGhpcy5fZXZlbnRzIHx8ICF0aGlzLl9ldmVudHNbZXZ0XSkgcmV0dXJuIGZhbHNlO1xuXG4gIHZhciBsaXN0ZW5lcnMgPSB0aGlzLl9ldmVudHNbZXZ0XVxuICAgICwgbGVuID0gYXJndW1lbnRzLmxlbmd0aFxuICAgICwgYXJnc1xuICAgICwgaTtcblxuICBpZiAoJ2Z1bmN0aW9uJyA9PT0gdHlwZW9mIGxpc3RlbmVycy5mbikge1xuICAgIGlmIChsaXN0ZW5lcnMub25jZSkgdGhpcy5yZW1vdmVMaXN0ZW5lcihldmVudCwgbGlzdGVuZXJzLmZuLCB1bmRlZmluZWQsIHRydWUpO1xuXG4gICAgc3dpdGNoIChsZW4pIHtcbiAgICAgIGNhc2UgMTogcmV0dXJuIGxpc3RlbmVycy5mbi5jYWxsKGxpc3RlbmVycy5jb250ZXh0KSwgdHJ1ZTtcbiAgICAgIGNhc2UgMjogcmV0dXJuIGxpc3RlbmVycy5mbi5jYWxsKGxpc3RlbmVycy5jb250ZXh0LCBhMSksIHRydWU7XG4gICAgICBjYXNlIDM6IHJldHVybiBsaXN0ZW5lcnMuZm4uY2FsbChsaXN0ZW5lcnMuY29udGV4dCwgYTEsIGEyKSwgdHJ1ZTtcbiAgICAgIGNhc2UgNDogcmV0dXJuIGxpc3RlbmVycy5mbi5jYWxsKGxpc3RlbmVycy5jb250ZXh0LCBhMSwgYTIsIGEzKSwgdHJ1ZTtcbiAgICAgIGNhc2UgNTogcmV0dXJuIGxpc3RlbmVycy5mbi5jYWxsKGxpc3RlbmVycy5jb250ZXh0LCBhMSwgYTIsIGEzLCBhNCksIHRydWU7XG4gICAgICBjYXNlIDY6IHJldHVybiBsaXN0ZW5lcnMuZm4uY2FsbChsaXN0ZW5lcnMuY29udGV4dCwgYTEsIGEyLCBhMywgYTQsIGE1KSwgdHJ1ZTtcbiAgICB9XG5cbiAgICBmb3IgKGkgPSAxLCBhcmdzID0gbmV3IEFycmF5KGxlbiAtMSk7IGkgPCBsZW47IGkrKykge1xuICAgICAgYXJnc1tpIC0gMV0gPSBhcmd1bWVudHNbaV07XG4gICAgfVxuXG4gICAgbGlzdGVuZXJzLmZuLmFwcGx5KGxpc3RlbmVycy5jb250ZXh0LCBhcmdzKTtcbiAgfSBlbHNlIHtcbiAgICB2YXIgbGVuZ3RoID0gbGlzdGVuZXJzLmxlbmd0aFxuICAgICAgLCBqO1xuXG4gICAgZm9yIChpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAobGlzdGVuZXJzW2ldLm9uY2UpIHRoaXMucmVtb3ZlTGlzdGVuZXIoZXZlbnQsIGxpc3RlbmVyc1tpXS5mbiwgdW5kZWZpbmVkLCB0cnVlKTtcblxuICAgICAgc3dpdGNoIChsZW4pIHtcbiAgICAgICAgY2FzZSAxOiBsaXN0ZW5lcnNbaV0uZm4uY2FsbChsaXN0ZW5lcnNbaV0uY29udGV4dCk7IGJyZWFrO1xuICAgICAgICBjYXNlIDI6IGxpc3RlbmVyc1tpXS5mbi5jYWxsKGxpc3RlbmVyc1tpXS5jb250ZXh0LCBhMSk7IGJyZWFrO1xuICAgICAgICBjYXNlIDM6IGxpc3RlbmVyc1tpXS5mbi5jYWxsKGxpc3RlbmVyc1tpXS5jb250ZXh0LCBhMSwgYTIpOyBicmVhaztcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICBpZiAoIWFyZ3MpIGZvciAoaiA9IDEsIGFyZ3MgPSBuZXcgQXJyYXkobGVuIC0xKTsgaiA8IGxlbjsgaisrKSB7XG4gICAgICAgICAgICBhcmdzW2ogLSAxXSA9IGFyZ3VtZW50c1tqXTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBsaXN0ZW5lcnNbaV0uZm4uYXBwbHkobGlzdGVuZXJzW2ldLmNvbnRleHQsIGFyZ3MpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiB0cnVlO1xufTtcblxuLyoqXG4gKiBSZWdpc3RlciBhIG5ldyBFdmVudExpc3RlbmVyIGZvciB0aGUgZ2l2ZW4gZXZlbnQuXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IGV2ZW50IE5hbWUgb2YgdGhlIGV2ZW50LlxuICogQHBhcmFtIHtGdW5jdG9ufSBmbiBDYWxsYmFjayBmdW5jdGlvbi5cbiAqIEBwYXJhbSB7TWl4ZWR9IGNvbnRleHQgVGhlIGNvbnRleHQgb2YgdGhlIGZ1bmN0aW9uLlxuICogQGFwaSBwdWJsaWNcbiAqL1xuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5vbiA9IGZ1bmN0aW9uIG9uKGV2ZW50LCBmbiwgY29udGV4dCkge1xuICB2YXIgbGlzdGVuZXIgPSBuZXcgRUUoZm4sIGNvbnRleHQgfHwgdGhpcylcbiAgICAsIGV2dCA9IHByZWZpeCA/IHByZWZpeCArIGV2ZW50IDogZXZlbnQ7XG5cbiAgaWYgKCF0aGlzLl9ldmVudHMpIHRoaXMuX2V2ZW50cyA9IHByZWZpeCA/IHt9IDogT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgaWYgKCF0aGlzLl9ldmVudHNbZXZ0XSkgdGhpcy5fZXZlbnRzW2V2dF0gPSBsaXN0ZW5lcjtcbiAgZWxzZSB7XG4gICAgaWYgKCF0aGlzLl9ldmVudHNbZXZ0XS5mbikgdGhpcy5fZXZlbnRzW2V2dF0ucHVzaChsaXN0ZW5lcik7XG4gICAgZWxzZSB0aGlzLl9ldmVudHNbZXZ0XSA9IFtcbiAgICAgIHRoaXMuX2V2ZW50c1tldnRdLCBsaXN0ZW5lclxuICAgIF07XG4gIH1cblxuICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogQWRkIGFuIEV2ZW50TGlzdGVuZXIgdGhhdCdzIG9ubHkgY2FsbGVkIG9uY2UuXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IGV2ZW50IE5hbWUgb2YgdGhlIGV2ZW50LlxuICogQHBhcmFtIHtGdW5jdGlvbn0gZm4gQ2FsbGJhY2sgZnVuY3Rpb24uXG4gKiBAcGFyYW0ge01peGVkfSBjb250ZXh0IFRoZSBjb250ZXh0IG9mIHRoZSBmdW5jdGlvbi5cbiAqIEBhcGkgcHVibGljXG4gKi9cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUub25jZSA9IGZ1bmN0aW9uIG9uY2UoZXZlbnQsIGZuLCBjb250ZXh0KSB7XG4gIHZhciBsaXN0ZW5lciA9IG5ldyBFRShmbiwgY29udGV4dCB8fCB0aGlzLCB0cnVlKVxuICAgICwgZXZ0ID0gcHJlZml4ID8gcHJlZml4ICsgZXZlbnQgOiBldmVudDtcblxuICBpZiAoIXRoaXMuX2V2ZW50cykgdGhpcy5fZXZlbnRzID0gcHJlZml4ID8ge30gOiBPYmplY3QuY3JlYXRlKG51bGwpO1xuICBpZiAoIXRoaXMuX2V2ZW50c1tldnRdKSB0aGlzLl9ldmVudHNbZXZ0XSA9IGxpc3RlbmVyO1xuICBlbHNlIHtcbiAgICBpZiAoIXRoaXMuX2V2ZW50c1tldnRdLmZuKSB0aGlzLl9ldmVudHNbZXZ0XS5wdXNoKGxpc3RlbmVyKTtcbiAgICBlbHNlIHRoaXMuX2V2ZW50c1tldnRdID0gW1xuICAgICAgdGhpcy5fZXZlbnRzW2V2dF0sIGxpc3RlbmVyXG4gICAgXTtcbiAgfVxuXG4gIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBSZW1vdmUgZXZlbnQgbGlzdGVuZXJzLlxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBldmVudCBUaGUgZXZlbnQgd2Ugd2FudCB0byByZW1vdmUuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmbiBUaGUgbGlzdGVuZXIgdGhhdCB3ZSBuZWVkIHRvIGZpbmQuXG4gKiBAcGFyYW0ge01peGVkfSBjb250ZXh0IE9ubHkgcmVtb3ZlIGxpc3RlbmVycyBtYXRjaGluZyB0aGlzIGNvbnRleHQuXG4gKiBAcGFyYW0ge0Jvb2xlYW59IG9uY2UgT25seSByZW1vdmUgb25jZSBsaXN0ZW5lcnMuXG4gKiBAYXBpIHB1YmxpY1xuICovXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLnJlbW92ZUxpc3RlbmVyID0gZnVuY3Rpb24gcmVtb3ZlTGlzdGVuZXIoZXZlbnQsIGZuLCBjb250ZXh0LCBvbmNlKSB7XG4gIHZhciBldnQgPSBwcmVmaXggPyBwcmVmaXggKyBldmVudCA6IGV2ZW50O1xuXG4gIGlmICghdGhpcy5fZXZlbnRzIHx8ICF0aGlzLl9ldmVudHNbZXZ0XSkgcmV0dXJuIHRoaXM7XG5cbiAgdmFyIGxpc3RlbmVycyA9IHRoaXMuX2V2ZW50c1tldnRdXG4gICAgLCBldmVudHMgPSBbXTtcblxuICBpZiAoZm4pIHtcbiAgICBpZiAobGlzdGVuZXJzLmZuKSB7XG4gICAgICBpZiAoXG4gICAgICAgICAgIGxpc3RlbmVycy5mbiAhPT0gZm5cbiAgICAgICAgfHwgKG9uY2UgJiYgIWxpc3RlbmVycy5vbmNlKVxuICAgICAgICB8fCAoY29udGV4dCAmJiBsaXN0ZW5lcnMuY29udGV4dCAhPT0gY29udGV4dClcbiAgICAgICkge1xuICAgICAgICBldmVudHMucHVzaChsaXN0ZW5lcnMpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBmb3IgKHZhciBpID0gMCwgbGVuZ3RoID0gbGlzdGVuZXJzLmxlbmd0aDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICAgICBsaXN0ZW5lcnNbaV0uZm4gIT09IGZuXG4gICAgICAgICAgfHwgKG9uY2UgJiYgIWxpc3RlbmVyc1tpXS5vbmNlKVxuICAgICAgICAgIHx8IChjb250ZXh0ICYmIGxpc3RlbmVyc1tpXS5jb250ZXh0ICE9PSBjb250ZXh0KVxuICAgICAgICApIHtcbiAgICAgICAgICBldmVudHMucHVzaChsaXN0ZW5lcnNbaV0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLy9cbiAgLy8gUmVzZXQgdGhlIGFycmF5LCBvciByZW1vdmUgaXQgY29tcGxldGVseSBpZiB3ZSBoYXZlIG5vIG1vcmUgbGlzdGVuZXJzLlxuICAvL1xuICBpZiAoZXZlbnRzLmxlbmd0aCkge1xuICAgIHRoaXMuX2V2ZW50c1tldnRdID0gZXZlbnRzLmxlbmd0aCA9PT0gMSA/IGV2ZW50c1swXSA6IGV2ZW50cztcbiAgfSBlbHNlIHtcbiAgICBkZWxldGUgdGhpcy5fZXZlbnRzW2V2dF07XG4gIH1cblxuICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogUmVtb3ZlIGFsbCBsaXN0ZW5lcnMgb3Igb25seSB0aGUgbGlzdGVuZXJzIGZvciB0aGUgc3BlY2lmaWVkIGV2ZW50LlxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBldmVudCBUaGUgZXZlbnQgd2FudCB0byByZW1vdmUgYWxsIGxpc3RlbmVycyBmb3IuXG4gKiBAYXBpIHB1YmxpY1xuICovXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLnJlbW92ZUFsbExpc3RlbmVycyA9IGZ1bmN0aW9uIHJlbW92ZUFsbExpc3RlbmVycyhldmVudCkge1xuICBpZiAoIXRoaXMuX2V2ZW50cykgcmV0dXJuIHRoaXM7XG5cbiAgaWYgKGV2ZW50KSBkZWxldGUgdGhpcy5fZXZlbnRzW3ByZWZpeCA/IHByZWZpeCArIGV2ZW50IDogZXZlbnRdO1xuICBlbHNlIHRoaXMuX2V2ZW50cyA9IHByZWZpeCA/IHt9IDogT2JqZWN0LmNyZWF0ZShudWxsKTtcblxuICByZXR1cm4gdGhpcztcbn07XG5cbi8vXG4vLyBBbGlhcyBtZXRob2RzIG5hbWVzIGJlY2F1c2UgcGVvcGxlIHJvbGwgbGlrZSB0aGF0LlxuLy9cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUub2ZmID0gRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5yZW1vdmVMaXN0ZW5lcjtcbkV2ZW50RW1pdHRlci5wcm90b3R5cGUuYWRkTGlzdGVuZXIgPSBFdmVudEVtaXR0ZXIucHJvdG90eXBlLm9uO1xuXG4vL1xuLy8gVGhpcyBmdW5jdGlvbiBkb2Vzbid0IGFwcGx5IGFueW1vcmUuXG4vL1xuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5zZXRNYXhMaXN0ZW5lcnMgPSBmdW5jdGlvbiBzZXRNYXhMaXN0ZW5lcnMoKSB7XG4gIHJldHVybiB0aGlzO1xufTtcblxuLy9cbi8vIEV4cG9zZSB0aGUgcHJlZml4LlxuLy9cbkV2ZW50RW1pdHRlci5wcmVmaXhlZCA9IHByZWZpeDtcblxuLy9cbi8vIEV4cG9zZSB0aGUgbW9kdWxlLlxuLy9cbmlmICgndW5kZWZpbmVkJyAhPT0gdHlwZW9mIG1vZHVsZSkge1xuICBtb2R1bGUuZXhwb3J0cyA9IEV2ZW50RW1pdHRlcjtcbn1cbiIsIi8qIGVzbGludC1kaXNhYmxlIG5vLXVudXNlZC12YXJzICovXG4ndXNlIHN0cmljdCc7XG52YXIgaGFzT3duUHJvcGVydHkgPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O1xudmFyIHByb3BJc0VudW1lcmFibGUgPSBPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlO1xuXG5mdW5jdGlvbiB0b09iamVjdCh2YWwpIHtcblx0aWYgKHZhbCA9PT0gbnVsbCB8fCB2YWwgPT09IHVuZGVmaW5lZCkge1xuXHRcdHRocm93IG5ldyBUeXBlRXJyb3IoJ09iamVjdC5hc3NpZ24gY2Fubm90IGJlIGNhbGxlZCB3aXRoIG51bGwgb3IgdW5kZWZpbmVkJyk7XG5cdH1cblxuXHRyZXR1cm4gT2JqZWN0KHZhbCk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0LCBzb3VyY2UpIHtcblx0dmFyIGZyb207XG5cdHZhciB0byA9IHRvT2JqZWN0KHRhcmdldCk7XG5cdHZhciBzeW1ib2xzO1xuXG5cdGZvciAodmFyIHMgPSAxOyBzIDwgYXJndW1lbnRzLmxlbmd0aDsgcysrKSB7XG5cdFx0ZnJvbSA9IE9iamVjdChhcmd1bWVudHNbc10pO1xuXG5cdFx0Zm9yICh2YXIga2V5IGluIGZyb20pIHtcblx0XHRcdGlmIChoYXNPd25Qcm9wZXJ0eS5jYWxsKGZyb20sIGtleSkpIHtcblx0XHRcdFx0dG9ba2V5XSA9IGZyb21ba2V5XTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykge1xuXHRcdFx0c3ltYm9scyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZnJvbSk7XG5cdFx0XHRmb3IgKHZhciBpID0gMDsgaSA8IHN5bWJvbHMubGVuZ3RoOyBpKyspIHtcblx0XHRcdFx0aWYgKHByb3BJc0VudW1lcmFibGUuY2FsbChmcm9tLCBzeW1ib2xzW2ldKSkge1xuXHRcdFx0XHRcdHRvW3N5bWJvbHNbaV1dID0gZnJvbVtzeW1ib2xzW2ldXTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdHJldHVybiB0bztcbn07XG4iLCIvKiFcbiAqIGFzeW5jXG4gKiBodHRwczovL2dpdGh1Yi5jb20vY2FvbGFuL2FzeW5jXG4gKlxuICogQ29weXJpZ2h0IDIwMTAtMjAxNCBDYW9sYW4gTWNNYWhvblxuICogUmVsZWFzZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlXG4gKi9cbi8qanNoaW50IG9uZXZhcjogZmFsc2UsIGluZGVudDo0ICovXG4vKmdsb2JhbCBzZXRJbW1lZGlhdGU6IGZhbHNlLCBzZXRUaW1lb3V0OiBmYWxzZSwgY29uc29sZTogZmFsc2UgKi9cbihmdW5jdGlvbiAoKSB7XG5cbiAgICB2YXIgYXN5bmMgPSB7fTtcblxuICAgIC8vIGdsb2JhbCBvbiB0aGUgc2VydmVyLCB3aW5kb3cgaW4gdGhlIGJyb3dzZXJcbiAgICB2YXIgcm9vdCwgcHJldmlvdXNfYXN5bmM7XG5cbiAgICByb290ID0gdGhpcztcbiAgICBpZiAocm9vdCAhPSBudWxsKSB7XG4gICAgICBwcmV2aW91c19hc3luYyA9IHJvb3QuYXN5bmM7XG4gICAgfVxuXG4gICAgYXN5bmMubm9Db25mbGljdCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcm9vdC5hc3luYyA9IHByZXZpb3VzX2FzeW5jO1xuICAgICAgICByZXR1cm4gYXN5bmM7XG4gICAgfTtcblxuICAgIGZ1bmN0aW9uIG9ubHlfb25jZShmbikge1xuICAgICAgICB2YXIgY2FsbGVkID0gZmFsc2U7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIGlmIChjYWxsZWQpIHRocm93IG5ldyBFcnJvcihcIkNhbGxiYWNrIHdhcyBhbHJlYWR5IGNhbGxlZC5cIik7XG4gICAgICAgICAgICBjYWxsZWQgPSB0cnVlO1xuICAgICAgICAgICAgZm4uYXBwbHkocm9vdCwgYXJndW1lbnRzKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vLy8gY3Jvc3MtYnJvd3NlciBjb21wYXRpYmxpdHkgZnVuY3Rpb25zIC8vLy9cblxuICAgIHZhciBfdG9TdHJpbmcgPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nO1xuXG4gICAgdmFyIF9pc0FycmF5ID0gQXJyYXkuaXNBcnJheSB8fCBmdW5jdGlvbiAob2JqKSB7XG4gICAgICAgIHJldHVybiBfdG9TdHJpbmcuY2FsbChvYmopID09PSAnW29iamVjdCBBcnJheV0nO1xuICAgIH07XG5cbiAgICB2YXIgX2VhY2ggPSBmdW5jdGlvbiAoYXJyLCBpdGVyYXRvcikge1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFyci5sZW5ndGg7IGkgKz0gMSkge1xuICAgICAgICAgICAgaXRlcmF0b3IoYXJyW2ldLCBpLCBhcnIpO1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIHZhciBfbWFwID0gZnVuY3Rpb24gKGFyciwgaXRlcmF0b3IpIHtcbiAgICAgICAgaWYgKGFyci5tYXApIHtcbiAgICAgICAgICAgIHJldHVybiBhcnIubWFwKGl0ZXJhdG9yKTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgcmVzdWx0cyA9IFtdO1xuICAgICAgICBfZWFjaChhcnIsIGZ1bmN0aW9uICh4LCBpLCBhKSB7XG4gICAgICAgICAgICByZXN1bHRzLnB1c2goaXRlcmF0b3IoeCwgaSwgYSkpO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdHM7XG4gICAgfTtcblxuICAgIHZhciBfcmVkdWNlID0gZnVuY3Rpb24gKGFyciwgaXRlcmF0b3IsIG1lbW8pIHtcbiAgICAgICAgaWYgKGFyci5yZWR1Y2UpIHtcbiAgICAgICAgICAgIHJldHVybiBhcnIucmVkdWNlKGl0ZXJhdG9yLCBtZW1vKTtcbiAgICAgICAgfVxuICAgICAgICBfZWFjaChhcnIsIGZ1bmN0aW9uICh4LCBpLCBhKSB7XG4gICAgICAgICAgICBtZW1vID0gaXRlcmF0b3IobWVtbywgeCwgaSwgYSk7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gbWVtbztcbiAgICB9O1xuXG4gICAgdmFyIF9rZXlzID0gZnVuY3Rpb24gKG9iaikge1xuICAgICAgICBpZiAoT2JqZWN0LmtleXMpIHtcbiAgICAgICAgICAgIHJldHVybiBPYmplY3Qua2V5cyhvYmopO1xuICAgICAgICB9XG4gICAgICAgIHZhciBrZXlzID0gW107XG4gICAgICAgIGZvciAodmFyIGsgaW4gb2JqKSB7XG4gICAgICAgICAgICBpZiAob2JqLmhhc093blByb3BlcnR5KGspKSB7XG4gICAgICAgICAgICAgICAga2V5cy5wdXNoKGspO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBrZXlzO1xuICAgIH07XG5cbiAgICAvLy8vIGV4cG9ydGVkIGFzeW5jIG1vZHVsZSBmdW5jdGlvbnMgLy8vL1xuXG4gICAgLy8vLyBuZXh0VGljayBpbXBsZW1lbnRhdGlvbiB3aXRoIGJyb3dzZXItY29tcGF0aWJsZSBmYWxsYmFjayAvLy8vXG4gICAgaWYgKHR5cGVvZiBwcm9jZXNzID09PSAndW5kZWZpbmVkJyB8fCAhKHByb2Nlc3MubmV4dFRpY2spKSB7XG4gICAgICAgIGlmICh0eXBlb2Ygc2V0SW1tZWRpYXRlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICBhc3luYy5uZXh0VGljayA9IGZ1bmN0aW9uIChmbikge1xuICAgICAgICAgICAgICAgIC8vIG5vdCBhIGRpcmVjdCBhbGlhcyBmb3IgSUUxMCBjb21wYXRpYmlsaXR5XG4gICAgICAgICAgICAgICAgc2V0SW1tZWRpYXRlKGZuKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBhc3luYy5zZXRJbW1lZGlhdGUgPSBhc3luYy5uZXh0VGljaztcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGFzeW5jLm5leHRUaWNrID0gZnVuY3Rpb24gKGZuKSB7XG4gICAgICAgICAgICAgICAgc2V0VGltZW91dChmbiwgMCk7XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgYXN5bmMuc2V0SW1tZWRpYXRlID0gYXN5bmMubmV4dFRpY2s7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIGFzeW5jLm5leHRUaWNrID0gcHJvY2Vzcy5uZXh0VGljaztcbiAgICAgICAgaWYgKHR5cGVvZiBzZXRJbW1lZGlhdGUgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICBhc3luYy5zZXRJbW1lZGlhdGUgPSBmdW5jdGlvbiAoZm4pIHtcbiAgICAgICAgICAgICAgLy8gbm90IGEgZGlyZWN0IGFsaWFzIGZvciBJRTEwIGNvbXBhdGliaWxpdHlcbiAgICAgICAgICAgICAgc2V0SW1tZWRpYXRlKGZuKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBhc3luYy5zZXRJbW1lZGlhdGUgPSBhc3luYy5uZXh0VGljaztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGFzeW5jLmVhY2ggPSBmdW5jdGlvbiAoYXJyLCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgY2FsbGJhY2sgPSBjYWxsYmFjayB8fCBmdW5jdGlvbiAoKSB7fTtcbiAgICAgICAgaWYgKCFhcnIubGVuZ3RoKSB7XG4gICAgICAgICAgICByZXR1cm4gY2FsbGJhY2soKTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgY29tcGxldGVkID0gMDtcbiAgICAgICAgX2VhY2goYXJyLCBmdW5jdGlvbiAoeCkge1xuICAgICAgICAgICAgaXRlcmF0b3IoeCwgb25seV9vbmNlKGRvbmUpICk7XG4gICAgICAgIH0pO1xuICAgICAgICBmdW5jdGlvbiBkb25lKGVycikge1xuICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgICAgY2FsbGJhY2sgPSBmdW5jdGlvbiAoKSB7fTtcbiAgICAgICAgICB9XG4gICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgIGNvbXBsZXRlZCArPSAxO1xuICAgICAgICAgICAgICBpZiAoY29tcGxldGVkID49IGFyci5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9O1xuICAgIGFzeW5jLmZvckVhY2ggPSBhc3luYy5lYWNoO1xuXG4gICAgYXN5bmMuZWFjaFNlcmllcyA9IGZ1bmN0aW9uIChhcnIsIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICBjYWxsYmFjayA9IGNhbGxiYWNrIHx8IGZ1bmN0aW9uICgpIHt9O1xuICAgICAgICBpZiAoIWFyci5sZW5ndGgpIHtcbiAgICAgICAgICAgIHJldHVybiBjYWxsYmFjaygpO1xuICAgICAgICB9XG4gICAgICAgIHZhciBjb21wbGV0ZWQgPSAwO1xuICAgICAgICB2YXIgaXRlcmF0ZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGl0ZXJhdG9yKGFycltjb21wbGV0ZWRdLCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayA9IGZ1bmN0aW9uICgpIHt9O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgY29tcGxldGVkICs9IDE7XG4gICAgICAgICAgICAgICAgICAgIGlmIChjb21wbGV0ZWQgPj0gYXJyLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGl0ZXJhdGUoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9O1xuICAgICAgICBpdGVyYXRlKCk7XG4gICAgfTtcbiAgICBhc3luYy5mb3JFYWNoU2VyaWVzID0gYXN5bmMuZWFjaFNlcmllcztcblxuICAgIGFzeW5jLmVhY2hMaW1pdCA9IGZ1bmN0aW9uIChhcnIsIGxpbWl0LCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgdmFyIGZuID0gX2VhY2hMaW1pdChsaW1pdCk7XG4gICAgICAgIGZuLmFwcGx5KG51bGwsIFthcnIsIGl0ZXJhdG9yLCBjYWxsYmFja10pO1xuICAgIH07XG4gICAgYXN5bmMuZm9yRWFjaExpbWl0ID0gYXN5bmMuZWFjaExpbWl0O1xuXG4gICAgdmFyIF9lYWNoTGltaXQgPSBmdW5jdGlvbiAobGltaXQpIHtcblxuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKGFyciwgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICBjYWxsYmFjayA9IGNhbGxiYWNrIHx8IGZ1bmN0aW9uICgpIHt9O1xuICAgICAgICAgICAgaWYgKCFhcnIubGVuZ3RoIHx8IGxpbWl0IDw9IDApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gY2FsbGJhY2soKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHZhciBjb21wbGV0ZWQgPSAwO1xuICAgICAgICAgICAgdmFyIHN0YXJ0ZWQgPSAwO1xuICAgICAgICAgICAgdmFyIHJ1bm5pbmcgPSAwO1xuXG4gICAgICAgICAgICAoZnVuY3Rpb24gcmVwbGVuaXNoICgpIHtcbiAgICAgICAgICAgICAgICBpZiAoY29tcGxldGVkID49IGFyci5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKCk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgd2hpbGUgKHJ1bm5pbmcgPCBsaW1pdCAmJiBzdGFydGVkIDwgYXJyLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICBzdGFydGVkICs9IDE7XG4gICAgICAgICAgICAgICAgICAgIHJ1bm5pbmcgKz0gMTtcbiAgICAgICAgICAgICAgICAgICAgaXRlcmF0b3IoYXJyW3N0YXJ0ZWQgLSAxXSwgZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2sgPSBmdW5jdGlvbiAoKSB7fTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBsZXRlZCArPSAxO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJ1bm5pbmcgLT0gMTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY29tcGxldGVkID49IGFyci5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcGxlbmlzaCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSkoKTtcbiAgICAgICAgfTtcbiAgICB9O1xuXG5cbiAgICB2YXIgZG9QYXJhbGxlbCA9IGZ1bmN0aW9uIChmbikge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIGFyZ3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMpO1xuICAgICAgICAgICAgcmV0dXJuIGZuLmFwcGx5KG51bGwsIFthc3luYy5lYWNoXS5jb25jYXQoYXJncykpO1xuICAgICAgICB9O1xuICAgIH07XG4gICAgdmFyIGRvUGFyYWxsZWxMaW1pdCA9IGZ1bmN0aW9uKGxpbWl0LCBmbikge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIGFyZ3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMpO1xuICAgICAgICAgICAgcmV0dXJuIGZuLmFwcGx5KG51bGwsIFtfZWFjaExpbWl0KGxpbWl0KV0uY29uY2F0KGFyZ3MpKTtcbiAgICAgICAgfTtcbiAgICB9O1xuICAgIHZhciBkb1NlcmllcyA9IGZ1bmN0aW9uIChmbikge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIGFyZ3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMpO1xuICAgICAgICAgICAgcmV0dXJuIGZuLmFwcGx5KG51bGwsIFthc3luYy5lYWNoU2VyaWVzXS5jb25jYXQoYXJncykpO1xuICAgICAgICB9O1xuICAgIH07XG5cblxuICAgIHZhciBfYXN5bmNNYXAgPSBmdW5jdGlvbiAoZWFjaGZuLCBhcnIsIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICBhcnIgPSBfbWFwKGFyciwgZnVuY3Rpb24gKHgsIGkpIHtcbiAgICAgICAgICAgIHJldHVybiB7aW5kZXg6IGksIHZhbHVlOiB4fTtcbiAgICAgICAgfSk7XG4gICAgICAgIGlmICghY2FsbGJhY2spIHtcbiAgICAgICAgICAgIGVhY2hmbihhcnIsIGZ1bmN0aW9uICh4LCBjYWxsYmFjaykge1xuICAgICAgICAgICAgICAgIGl0ZXJhdG9yKHgudmFsdWUsIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdmFyIHJlc3VsdHMgPSBbXTtcbiAgICAgICAgICAgIGVhY2hmbihhcnIsIGZ1bmN0aW9uICh4LCBjYWxsYmFjaykge1xuICAgICAgICAgICAgICAgIGl0ZXJhdG9yKHgudmFsdWUsIGZ1bmN0aW9uIChlcnIsIHYpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0c1t4LmluZGV4XSA9IHY7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9LCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2soZXJyLCByZXN1bHRzKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBhc3luYy5tYXAgPSBkb1BhcmFsbGVsKF9hc3luY01hcCk7XG4gICAgYXN5bmMubWFwU2VyaWVzID0gZG9TZXJpZXMoX2FzeW5jTWFwKTtcbiAgICBhc3luYy5tYXBMaW1pdCA9IGZ1bmN0aW9uIChhcnIsIGxpbWl0LCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgcmV0dXJuIF9tYXBMaW1pdChsaW1pdCkoYXJyLCBpdGVyYXRvciwgY2FsbGJhY2spO1xuICAgIH07XG5cbiAgICB2YXIgX21hcExpbWl0ID0gZnVuY3Rpb24obGltaXQpIHtcbiAgICAgICAgcmV0dXJuIGRvUGFyYWxsZWxMaW1pdChsaW1pdCwgX2FzeW5jTWFwKTtcbiAgICB9O1xuXG4gICAgLy8gcmVkdWNlIG9ubHkgaGFzIGEgc2VyaWVzIHZlcnNpb24sIGFzIGRvaW5nIHJlZHVjZSBpbiBwYXJhbGxlbCB3b24ndFxuICAgIC8vIHdvcmsgaW4gbWFueSBzaXR1YXRpb25zLlxuICAgIGFzeW5jLnJlZHVjZSA9IGZ1bmN0aW9uIChhcnIsIG1lbW8sIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICBhc3luYy5lYWNoU2VyaWVzKGFyciwgZnVuY3Rpb24gKHgsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICBpdGVyYXRvcihtZW1vLCB4LCBmdW5jdGlvbiAoZXJyLCB2KSB7XG4gICAgICAgICAgICAgICAgbWVtbyA9IHY7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICBjYWxsYmFjayhlcnIsIG1lbW8pO1xuICAgICAgICB9KTtcbiAgICB9O1xuICAgIC8vIGluamVjdCBhbGlhc1xuICAgIGFzeW5jLmluamVjdCA9IGFzeW5jLnJlZHVjZTtcbiAgICAvLyBmb2xkbCBhbGlhc1xuICAgIGFzeW5jLmZvbGRsID0gYXN5bmMucmVkdWNlO1xuXG4gICAgYXN5bmMucmVkdWNlUmlnaHQgPSBmdW5jdGlvbiAoYXJyLCBtZW1vLCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgdmFyIHJldmVyc2VkID0gX21hcChhcnIsIGZ1bmN0aW9uICh4KSB7XG4gICAgICAgICAgICByZXR1cm4geDtcbiAgICAgICAgfSkucmV2ZXJzZSgpO1xuICAgICAgICBhc3luYy5yZWR1Y2UocmV2ZXJzZWQsIG1lbW8sIGl0ZXJhdG9yLCBjYWxsYmFjayk7XG4gICAgfTtcbiAgICAvLyBmb2xkciBhbGlhc1xuICAgIGFzeW5jLmZvbGRyID0gYXN5bmMucmVkdWNlUmlnaHQ7XG5cbiAgICB2YXIgX2ZpbHRlciA9IGZ1bmN0aW9uIChlYWNoZm4sIGFyciwgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgIHZhciByZXN1bHRzID0gW107XG4gICAgICAgIGFyciA9IF9tYXAoYXJyLCBmdW5jdGlvbiAoeCwgaSkge1xuICAgICAgICAgICAgcmV0dXJuIHtpbmRleDogaSwgdmFsdWU6IHh9O1xuICAgICAgICB9KTtcbiAgICAgICAgZWFjaGZuKGFyciwgZnVuY3Rpb24gKHgsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICBpdGVyYXRvcih4LnZhbHVlLCBmdW5jdGlvbiAodikge1xuICAgICAgICAgICAgICAgIGlmICh2KSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdHMucHVzaCh4KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2FsbGJhY2soKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICBjYWxsYmFjayhfbWFwKHJlc3VsdHMuc29ydChmdW5jdGlvbiAoYSwgYikge1xuICAgICAgICAgICAgICAgIHJldHVybiBhLmluZGV4IC0gYi5pbmRleDtcbiAgICAgICAgICAgIH0pLCBmdW5jdGlvbiAoeCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB4LnZhbHVlO1xuICAgICAgICAgICAgfSkpO1xuICAgICAgICB9KTtcbiAgICB9O1xuICAgIGFzeW5jLmZpbHRlciA9IGRvUGFyYWxsZWwoX2ZpbHRlcik7XG4gICAgYXN5bmMuZmlsdGVyU2VyaWVzID0gZG9TZXJpZXMoX2ZpbHRlcik7XG4gICAgLy8gc2VsZWN0IGFsaWFzXG4gICAgYXN5bmMuc2VsZWN0ID0gYXN5bmMuZmlsdGVyO1xuICAgIGFzeW5jLnNlbGVjdFNlcmllcyA9IGFzeW5jLmZpbHRlclNlcmllcztcblxuICAgIHZhciBfcmVqZWN0ID0gZnVuY3Rpb24gKGVhY2hmbiwgYXJyLCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgdmFyIHJlc3VsdHMgPSBbXTtcbiAgICAgICAgYXJyID0gX21hcChhcnIsIGZ1bmN0aW9uICh4LCBpKSB7XG4gICAgICAgICAgICByZXR1cm4ge2luZGV4OiBpLCB2YWx1ZTogeH07XG4gICAgICAgIH0pO1xuICAgICAgICBlYWNoZm4oYXJyLCBmdW5jdGlvbiAoeCwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIGl0ZXJhdG9yKHgudmFsdWUsIGZ1bmN0aW9uICh2KSB7XG4gICAgICAgICAgICAgICAgaWYgKCF2KSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdHMucHVzaCh4KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2FsbGJhY2soKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICBjYWxsYmFjayhfbWFwKHJlc3VsdHMuc29ydChmdW5jdGlvbiAoYSwgYikge1xuICAgICAgICAgICAgICAgIHJldHVybiBhLmluZGV4IC0gYi5pbmRleDtcbiAgICAgICAgICAgIH0pLCBmdW5jdGlvbiAoeCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB4LnZhbHVlO1xuICAgICAgICAgICAgfSkpO1xuICAgICAgICB9KTtcbiAgICB9O1xuICAgIGFzeW5jLnJlamVjdCA9IGRvUGFyYWxsZWwoX3JlamVjdCk7XG4gICAgYXN5bmMucmVqZWN0U2VyaWVzID0gZG9TZXJpZXMoX3JlamVjdCk7XG5cbiAgICB2YXIgX2RldGVjdCA9IGZ1bmN0aW9uIChlYWNoZm4sIGFyciwgaXRlcmF0b3IsIG1haW5fY2FsbGJhY2spIHtcbiAgICAgICAgZWFjaGZuKGFyciwgZnVuY3Rpb24gKHgsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICBpdGVyYXRvcih4LCBmdW5jdGlvbiAocmVzdWx0KSB7XG4gICAgICAgICAgICAgICAgaWYgKHJlc3VsdCkge1xuICAgICAgICAgICAgICAgICAgICBtYWluX2NhbGxiYWNrKHgpO1xuICAgICAgICAgICAgICAgICAgICBtYWluX2NhbGxiYWNrID0gZnVuY3Rpb24gKCkge307XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICBtYWluX2NhbGxiYWNrKCk7XG4gICAgICAgIH0pO1xuICAgIH07XG4gICAgYXN5bmMuZGV0ZWN0ID0gZG9QYXJhbGxlbChfZGV0ZWN0KTtcbiAgICBhc3luYy5kZXRlY3RTZXJpZXMgPSBkb1NlcmllcyhfZGV0ZWN0KTtcblxuICAgIGFzeW5jLnNvbWUgPSBmdW5jdGlvbiAoYXJyLCBpdGVyYXRvciwgbWFpbl9jYWxsYmFjaykge1xuICAgICAgICBhc3luYy5lYWNoKGFyciwgZnVuY3Rpb24gKHgsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICBpdGVyYXRvcih4LCBmdW5jdGlvbiAodikge1xuICAgICAgICAgICAgICAgIGlmICh2KSB7XG4gICAgICAgICAgICAgICAgICAgIG1haW5fY2FsbGJhY2sodHJ1ZSk7XG4gICAgICAgICAgICAgICAgICAgIG1haW5fY2FsbGJhY2sgPSBmdW5jdGlvbiAoKSB7fTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2FsbGJhY2soKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICBtYWluX2NhbGxiYWNrKGZhbHNlKTtcbiAgICAgICAgfSk7XG4gICAgfTtcbiAgICAvLyBhbnkgYWxpYXNcbiAgICBhc3luYy5hbnkgPSBhc3luYy5zb21lO1xuXG4gICAgYXN5bmMuZXZlcnkgPSBmdW5jdGlvbiAoYXJyLCBpdGVyYXRvciwgbWFpbl9jYWxsYmFjaykge1xuICAgICAgICBhc3luYy5lYWNoKGFyciwgZnVuY3Rpb24gKHgsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICBpdGVyYXRvcih4LCBmdW5jdGlvbiAodikge1xuICAgICAgICAgICAgICAgIGlmICghdikge1xuICAgICAgICAgICAgICAgICAgICBtYWluX2NhbGxiYWNrKGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgICAgbWFpbl9jYWxsYmFjayA9IGZ1bmN0aW9uICgpIHt9O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgIG1haW5fY2FsbGJhY2sodHJ1ZSk7XG4gICAgICAgIH0pO1xuICAgIH07XG4gICAgLy8gYWxsIGFsaWFzXG4gICAgYXN5bmMuYWxsID0gYXN5bmMuZXZlcnk7XG5cbiAgICBhc3luYy5zb3J0QnkgPSBmdW5jdGlvbiAoYXJyLCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgYXN5bmMubWFwKGFyciwgZnVuY3Rpb24gKHgsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICBpdGVyYXRvcih4LCBmdW5jdGlvbiAoZXJyLCBjcml0ZXJpYSkge1xuICAgICAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKG51bGwsIHt2YWx1ZTogeCwgY3JpdGVyaWE6IGNyaXRlcmlhfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sIGZ1bmN0aW9uIChlcnIsIHJlc3VsdHMpIHtcbiAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHZhciBmbiA9IGZ1bmN0aW9uIChsZWZ0LCByaWdodCkge1xuICAgICAgICAgICAgICAgICAgICB2YXIgYSA9IGxlZnQuY3JpdGVyaWEsIGIgPSByaWdodC5jcml0ZXJpYTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGEgPCBiID8gLTEgOiBhID4gYiA/IDEgOiAwO1xuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgY2FsbGJhY2sobnVsbCwgX21hcChyZXN1bHRzLnNvcnQoZm4pLCBmdW5jdGlvbiAoeCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4geC52YWx1ZTtcbiAgICAgICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH07XG5cbiAgICBhc3luYy5hdXRvID0gZnVuY3Rpb24gKHRhc2tzLCBjYWxsYmFjaykge1xuICAgICAgICBjYWxsYmFjayA9IGNhbGxiYWNrIHx8IGZ1bmN0aW9uICgpIHt9O1xuICAgICAgICB2YXIga2V5cyA9IF9rZXlzKHRhc2tzKTtcbiAgICAgICAgdmFyIHJlbWFpbmluZ1Rhc2tzID0ga2V5cy5sZW5ndGhcbiAgICAgICAgaWYgKCFyZW1haW5pbmdUYXNrcykge1xuICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKCk7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgcmVzdWx0cyA9IHt9O1xuXG4gICAgICAgIHZhciBsaXN0ZW5lcnMgPSBbXTtcbiAgICAgICAgdmFyIGFkZExpc3RlbmVyID0gZnVuY3Rpb24gKGZuKSB7XG4gICAgICAgICAgICBsaXN0ZW5lcnMudW5zaGlmdChmbik7XG4gICAgICAgIH07XG4gICAgICAgIHZhciByZW1vdmVMaXN0ZW5lciA9IGZ1bmN0aW9uIChmbikge1xuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsaXN0ZW5lcnMubGVuZ3RoOyBpICs9IDEpIHtcbiAgICAgICAgICAgICAgICBpZiAobGlzdGVuZXJzW2ldID09PSBmbikge1xuICAgICAgICAgICAgICAgICAgICBsaXN0ZW5lcnMuc3BsaWNlKGksIDEpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICB2YXIgdGFza0NvbXBsZXRlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmVtYWluaW5nVGFza3MtLVxuICAgICAgICAgICAgX2VhY2gobGlzdGVuZXJzLnNsaWNlKDApLCBmdW5jdGlvbiAoZm4pIHtcbiAgICAgICAgICAgICAgICBmbigpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH07XG5cbiAgICAgICAgYWRkTGlzdGVuZXIoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgaWYgKCFyZW1haW5pbmdUYXNrcykge1xuICAgICAgICAgICAgICAgIHZhciB0aGVDYWxsYmFjayA9IGNhbGxiYWNrO1xuICAgICAgICAgICAgICAgIC8vIHByZXZlbnQgZmluYWwgY2FsbGJhY2sgZnJvbSBjYWxsaW5nIGl0c2VsZiBpZiBpdCBlcnJvcnNcbiAgICAgICAgICAgICAgICBjYWxsYmFjayA9IGZ1bmN0aW9uICgpIHt9O1xuXG4gICAgICAgICAgICAgICAgdGhlQ2FsbGJhY2sobnVsbCwgcmVzdWx0cyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIF9lYWNoKGtleXMsIGZ1bmN0aW9uIChrKSB7XG4gICAgICAgICAgICB2YXIgdGFzayA9IF9pc0FycmF5KHRhc2tzW2tdKSA/IHRhc2tzW2tdOiBbdGFza3Nba11dO1xuICAgICAgICAgICAgdmFyIHRhc2tDYWxsYmFjayA9IGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgICAgICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMSk7XG4gICAgICAgICAgICAgICAgaWYgKGFyZ3MubGVuZ3RoIDw9IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgYXJncyA9IGFyZ3NbMF07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHNhZmVSZXN1bHRzID0ge307XG4gICAgICAgICAgICAgICAgICAgIF9lYWNoKF9rZXlzKHJlc3VsdHMpLCBmdW5jdGlvbihya2V5KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzYWZlUmVzdWx0c1tya2V5XSA9IHJlc3VsdHNbcmtleV07XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICBzYWZlUmVzdWx0c1trXSA9IGFyZ3M7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKGVyciwgc2FmZVJlc3VsdHMpO1xuICAgICAgICAgICAgICAgICAgICAvLyBzdG9wIHN1YnNlcXVlbnQgZXJyb3JzIGhpdHRpbmcgY2FsbGJhY2sgbXVsdGlwbGUgdGltZXNcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2sgPSBmdW5jdGlvbiAoKSB7fTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdHNba10gPSBhcmdzO1xuICAgICAgICAgICAgICAgICAgICBhc3luYy5zZXRJbW1lZGlhdGUodGFza0NvbXBsZXRlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgdmFyIHJlcXVpcmVzID0gdGFzay5zbGljZSgwLCBNYXRoLmFicyh0YXNrLmxlbmd0aCAtIDEpKSB8fCBbXTtcbiAgICAgICAgICAgIHZhciByZWFkeSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gX3JlZHVjZShyZXF1aXJlcywgZnVuY3Rpb24gKGEsIHgpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChhICYmIHJlc3VsdHMuaGFzT3duUHJvcGVydHkoeCkpO1xuICAgICAgICAgICAgICAgIH0sIHRydWUpICYmICFyZXN1bHRzLmhhc093blByb3BlcnR5KGspO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGlmIChyZWFkeSgpKSB7XG4gICAgICAgICAgICAgICAgdGFza1t0YXNrLmxlbmd0aCAtIDFdKHRhc2tDYWxsYmFjaywgcmVzdWx0cyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICB2YXIgbGlzdGVuZXIgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChyZWFkeSgpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZW1vdmVMaXN0ZW5lcihsaXN0ZW5lcik7XG4gICAgICAgICAgICAgICAgICAgICAgICB0YXNrW3Rhc2subGVuZ3RoIC0gMV0odGFza0NhbGxiYWNrLCByZXN1bHRzKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgYWRkTGlzdGVuZXIobGlzdGVuZXIpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9O1xuXG4gICAgYXN5bmMucmV0cnkgPSBmdW5jdGlvbih0aW1lcywgdGFzaywgY2FsbGJhY2spIHtcbiAgICAgICAgdmFyIERFRkFVTFRfVElNRVMgPSA1O1xuICAgICAgICB2YXIgYXR0ZW1wdHMgPSBbXTtcbiAgICAgICAgLy8gVXNlIGRlZmF1bHRzIGlmIHRpbWVzIG5vdCBwYXNzZWRcbiAgICAgICAgaWYgKHR5cGVvZiB0aW1lcyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgY2FsbGJhY2sgPSB0YXNrO1xuICAgICAgICAgICAgdGFzayA9IHRpbWVzO1xuICAgICAgICAgICAgdGltZXMgPSBERUZBVUxUX1RJTUVTO1xuICAgICAgICB9XG4gICAgICAgIC8vIE1ha2Ugc3VyZSB0aW1lcyBpcyBhIG51bWJlclxuICAgICAgICB0aW1lcyA9IHBhcnNlSW50KHRpbWVzLCAxMCkgfHwgREVGQVVMVF9USU1FUztcbiAgICAgICAgdmFyIHdyYXBwZWRUYXNrID0gZnVuY3Rpb24od3JhcHBlZENhbGxiYWNrLCB3cmFwcGVkUmVzdWx0cykge1xuICAgICAgICAgICAgdmFyIHJldHJ5QXR0ZW1wdCA9IGZ1bmN0aW9uKHRhc2ssIGZpbmFsQXR0ZW1wdCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbihzZXJpZXNDYWxsYmFjaykge1xuICAgICAgICAgICAgICAgICAgICB0YXNrKGZ1bmN0aW9uKGVyciwgcmVzdWx0KXtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlcmllc0NhbGxiYWNrKCFlcnIgfHwgZmluYWxBdHRlbXB0LCB7ZXJyOiBlcnIsIHJlc3VsdDogcmVzdWx0fSk7XG4gICAgICAgICAgICAgICAgICAgIH0sIHdyYXBwZWRSZXN1bHRzKTtcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIHdoaWxlICh0aW1lcykge1xuICAgICAgICAgICAgICAgIGF0dGVtcHRzLnB1c2gocmV0cnlBdHRlbXB0KHRhc2ssICEodGltZXMtPTEpKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBhc3luYy5zZXJpZXMoYXR0ZW1wdHMsIGZ1bmN0aW9uKGRvbmUsIGRhdGEpe1xuICAgICAgICAgICAgICAgIGRhdGEgPSBkYXRhW2RhdGEubGVuZ3RoIC0gMV07XG4gICAgICAgICAgICAgICAgKHdyYXBwZWRDYWxsYmFjayB8fCBjYWxsYmFjaykoZGF0YS5lcnIsIGRhdGEucmVzdWx0KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIC8vIElmIGEgY2FsbGJhY2sgaXMgcGFzc2VkLCBydW4gdGhpcyBhcyBhIGNvbnRyb2xsIGZsb3dcbiAgICAgICAgcmV0dXJuIGNhbGxiYWNrID8gd3JhcHBlZFRhc2soKSA6IHdyYXBwZWRUYXNrXG4gICAgfTtcblxuICAgIGFzeW5jLndhdGVyZmFsbCA9IGZ1bmN0aW9uICh0YXNrcywgY2FsbGJhY2spIHtcbiAgICAgICAgY2FsbGJhY2sgPSBjYWxsYmFjayB8fCBmdW5jdGlvbiAoKSB7fTtcbiAgICAgICAgaWYgKCFfaXNBcnJheSh0YXNrcykpIHtcbiAgICAgICAgICB2YXIgZXJyID0gbmV3IEVycm9yKCdGaXJzdCBhcmd1bWVudCB0byB3YXRlcmZhbGwgbXVzdCBiZSBhbiBhcnJheSBvZiBmdW5jdGlvbnMnKTtcbiAgICAgICAgICByZXR1cm4gY2FsbGJhY2soZXJyKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIXRhc2tzLmxlbmd0aCkge1xuICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKCk7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIHdyYXBJdGVyYXRvciA9IGZ1bmN0aW9uIChpdGVyYXRvcikge1xuICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrID0gZnVuY3Rpb24gKCkge307XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMSk7XG4gICAgICAgICAgICAgICAgICAgIHZhciBuZXh0ID0gaXRlcmF0b3IubmV4dCgpO1xuICAgICAgICAgICAgICAgICAgICBpZiAobmV4dCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgYXJncy5wdXNoKHdyYXBJdGVyYXRvcihuZXh0KSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhcmdzLnB1c2goY2FsbGJhY2spO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGFzeW5jLnNldEltbWVkaWF0ZShmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpdGVyYXRvci5hcHBseShudWxsLCBhcmdzKTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfTtcbiAgICAgICAgfTtcbiAgICAgICAgd3JhcEl0ZXJhdG9yKGFzeW5jLml0ZXJhdG9yKHRhc2tzKSkoKTtcbiAgICB9O1xuXG4gICAgdmFyIF9wYXJhbGxlbCA9IGZ1bmN0aW9uKGVhY2hmbiwgdGFza3MsIGNhbGxiYWNrKSB7XG4gICAgICAgIGNhbGxiYWNrID0gY2FsbGJhY2sgfHwgZnVuY3Rpb24gKCkge307XG4gICAgICAgIGlmIChfaXNBcnJheSh0YXNrcykpIHtcbiAgICAgICAgICAgIGVhY2hmbi5tYXAodGFza3MsIGZ1bmN0aW9uIChmbiwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgICAgICBpZiAoZm4pIHtcbiAgICAgICAgICAgICAgICAgICAgZm4oZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGFyZ3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsIDEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFyZ3MubGVuZ3RoIDw9IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmdzID0gYXJnc1swXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrLmNhbGwobnVsbCwgZXJyLCBhcmdzKTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSwgY2FsbGJhY2spO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdmFyIHJlc3VsdHMgPSB7fTtcbiAgICAgICAgICAgIGVhY2hmbi5lYWNoKF9rZXlzKHRhc2tzKSwgZnVuY3Rpb24gKGssIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICAgICAgdGFza3Nba10oZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgICAgICAgICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMSk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChhcmdzLmxlbmd0aCA8PSAxKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhcmdzID0gYXJnc1swXTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICByZXN1bHRzW2tdID0gYXJncztcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0sIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnIsIHJlc3VsdHMpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgYXN5bmMucGFyYWxsZWwgPSBmdW5jdGlvbiAodGFza3MsIGNhbGxiYWNrKSB7XG4gICAgICAgIF9wYXJhbGxlbCh7IG1hcDogYXN5bmMubWFwLCBlYWNoOiBhc3luYy5lYWNoIH0sIHRhc2tzLCBjYWxsYmFjayk7XG4gICAgfTtcblxuICAgIGFzeW5jLnBhcmFsbGVsTGltaXQgPSBmdW5jdGlvbih0YXNrcywgbGltaXQsIGNhbGxiYWNrKSB7XG4gICAgICAgIF9wYXJhbGxlbCh7IG1hcDogX21hcExpbWl0KGxpbWl0KSwgZWFjaDogX2VhY2hMaW1pdChsaW1pdCkgfSwgdGFza3MsIGNhbGxiYWNrKTtcbiAgICB9O1xuXG4gICAgYXN5bmMuc2VyaWVzID0gZnVuY3Rpb24gKHRhc2tzLCBjYWxsYmFjaykge1xuICAgICAgICBjYWxsYmFjayA9IGNhbGxiYWNrIHx8IGZ1bmN0aW9uICgpIHt9O1xuICAgICAgICBpZiAoX2lzQXJyYXkodGFza3MpKSB7XG4gICAgICAgICAgICBhc3luYy5tYXBTZXJpZXModGFza3MsIGZ1bmN0aW9uIChmbiwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgICAgICBpZiAoZm4pIHtcbiAgICAgICAgICAgICAgICAgICAgZm4oZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGFyZ3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsIDEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFyZ3MubGVuZ3RoIDw9IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmdzID0gYXJnc1swXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrLmNhbGwobnVsbCwgZXJyLCBhcmdzKTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSwgY2FsbGJhY2spO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdmFyIHJlc3VsdHMgPSB7fTtcbiAgICAgICAgICAgIGFzeW5jLmVhY2hTZXJpZXMoX2tleXModGFza3MpLCBmdW5jdGlvbiAoaywgY2FsbGJhY2spIHtcbiAgICAgICAgICAgICAgICB0YXNrc1trXShmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBhcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGFyZ3MubGVuZ3RoIDw9IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3MgPSBhcmdzWzBdO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdHNba10gPSBhcmdzO1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSwgZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrKGVyciwgcmVzdWx0cyk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH07XG5cbiAgICBhc3luYy5pdGVyYXRvciA9IGZ1bmN0aW9uICh0YXNrcykge1xuICAgICAgICB2YXIgbWFrZUNhbGxiYWNrID0gZnVuY3Rpb24gKGluZGV4KSB7XG4gICAgICAgICAgICB2YXIgZm4gPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgaWYgKHRhc2tzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICB0YXNrc1tpbmRleF0uYXBwbHkobnVsbCwgYXJndW1lbnRzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZuLm5leHQoKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBmbi5uZXh0ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiAoaW5kZXggPCB0YXNrcy5sZW5ndGggLSAxKSA/IG1ha2VDYWxsYmFjayhpbmRleCArIDEpOiBudWxsO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIHJldHVybiBmbjtcbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIG1ha2VDYWxsYmFjaygwKTtcbiAgICB9O1xuXG4gICAgYXN5bmMuYXBwbHkgPSBmdW5jdGlvbiAoZm4pIHtcbiAgICAgICAgdmFyIGFyZ3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsIDEpO1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIGZuLmFwcGx5KFxuICAgICAgICAgICAgICAgIG51bGwsIGFyZ3MuY29uY2F0KEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cykpXG4gICAgICAgICAgICApO1xuICAgICAgICB9O1xuICAgIH07XG5cbiAgICB2YXIgX2NvbmNhdCA9IGZ1bmN0aW9uIChlYWNoZm4sIGFyciwgZm4sIGNhbGxiYWNrKSB7XG4gICAgICAgIHZhciByID0gW107XG4gICAgICAgIGVhY2hmbihhcnIsIGZ1bmN0aW9uICh4LCBjYikge1xuICAgICAgICAgICAgZm4oeCwgZnVuY3Rpb24gKGVyciwgeSkge1xuICAgICAgICAgICAgICAgIHIgPSByLmNvbmNhdCh5IHx8IFtdKTtcbiAgICAgICAgICAgICAgICBjYihlcnIpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgIGNhbGxiYWNrKGVyciwgcik7XG4gICAgICAgIH0pO1xuICAgIH07XG4gICAgYXN5bmMuY29uY2F0ID0gZG9QYXJhbGxlbChfY29uY2F0KTtcbiAgICBhc3luYy5jb25jYXRTZXJpZXMgPSBkb1NlcmllcyhfY29uY2F0KTtcblxuICAgIGFzeW5jLndoaWxzdCA9IGZ1bmN0aW9uICh0ZXN0LCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgaWYgKHRlc3QoKSkge1xuICAgICAgICAgICAgaXRlcmF0b3IoZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGFzeW5jLndoaWxzdCh0ZXN0LCBpdGVyYXRvciwgY2FsbGJhY2spO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIGFzeW5jLmRvV2hpbHN0ID0gZnVuY3Rpb24gKGl0ZXJhdG9yLCB0ZXN0LCBjYWxsYmFjaykge1xuICAgICAgICBpdGVyYXRvcihmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMSk7XG4gICAgICAgICAgICBpZiAodGVzdC5hcHBseShudWxsLCBhcmdzKSkge1xuICAgICAgICAgICAgICAgIGFzeW5jLmRvV2hpbHN0KGl0ZXJhdG9yLCB0ZXN0LCBjYWxsYmFjayk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9O1xuXG4gICAgYXN5bmMudW50aWwgPSBmdW5jdGlvbiAodGVzdCwgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgIGlmICghdGVzdCgpKSB7XG4gICAgICAgICAgICBpdGVyYXRvcihmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYXN5bmMudW50aWwodGVzdCwgaXRlcmF0b3IsIGNhbGxiYWNrKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgY2FsbGJhY2soKTtcbiAgICAgICAgfVxuICAgIH07XG5cbiAgICBhc3luYy5kb1VudGlsID0gZnVuY3Rpb24gKGl0ZXJhdG9yLCB0ZXN0LCBjYWxsYmFjaykge1xuICAgICAgICBpdGVyYXRvcihmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMSk7XG4gICAgICAgICAgICBpZiAoIXRlc3QuYXBwbHkobnVsbCwgYXJncykpIHtcbiAgICAgICAgICAgICAgICBhc3luYy5kb1VudGlsKGl0ZXJhdG9yLCB0ZXN0LCBjYWxsYmFjayk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9O1xuXG4gICAgYXN5bmMucXVldWUgPSBmdW5jdGlvbiAod29ya2VyLCBjb25jdXJyZW5jeSkge1xuICAgICAgICBpZiAoY29uY3VycmVuY3kgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgY29uY3VycmVuY3kgPSAxO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIF9pbnNlcnQocSwgZGF0YSwgcG9zLCBjYWxsYmFjaykge1xuICAgICAgICAgIGlmICghcS5zdGFydGVkKXtcbiAgICAgICAgICAgIHEuc3RhcnRlZCA9IHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICghX2lzQXJyYXkoZGF0YSkpIHtcbiAgICAgICAgICAgICAgZGF0YSA9IFtkYXRhXTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYoZGF0YS5sZW5ndGggPT0gMCkge1xuICAgICAgICAgICAgIC8vIGNhbGwgZHJhaW4gaW1tZWRpYXRlbHkgaWYgdGhlcmUgYXJlIG5vIHRhc2tzXG4gICAgICAgICAgICAgcmV0dXJuIGFzeW5jLnNldEltbWVkaWF0ZShmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgaWYgKHEuZHJhaW4pIHtcbiAgICAgICAgICAgICAgICAgICAgIHEuZHJhaW4oKTtcbiAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgICBfZWFjaChkYXRhLCBmdW5jdGlvbih0YXNrKSB7XG4gICAgICAgICAgICAgIHZhciBpdGVtID0ge1xuICAgICAgICAgICAgICAgICAgZGF0YTogdGFzayxcbiAgICAgICAgICAgICAgICAgIGNhbGxiYWNrOiB0eXBlb2YgY2FsbGJhY2sgPT09ICdmdW5jdGlvbicgPyBjYWxsYmFjayA6IG51bGxcbiAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICBpZiAocG9zKSB7XG4gICAgICAgICAgICAgICAgcS50YXNrcy51bnNoaWZ0KGl0ZW0pO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHEudGFza3MucHVzaChpdGVtKTtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGlmIChxLnNhdHVyYXRlZCAmJiBxLnRhc2tzLmxlbmd0aCA9PT0gcS5jb25jdXJyZW5jeSkge1xuICAgICAgICAgICAgICAgICAgcS5zYXR1cmF0ZWQoKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBhc3luYy5zZXRJbW1lZGlhdGUocS5wcm9jZXNzKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciB3b3JrZXJzID0gMDtcbiAgICAgICAgdmFyIHEgPSB7XG4gICAgICAgICAgICB0YXNrczogW10sXG4gICAgICAgICAgICBjb25jdXJyZW5jeTogY29uY3VycmVuY3ksXG4gICAgICAgICAgICBzYXR1cmF0ZWQ6IG51bGwsXG4gICAgICAgICAgICBlbXB0eTogbnVsbCxcbiAgICAgICAgICAgIGRyYWluOiBudWxsLFxuICAgICAgICAgICAgc3RhcnRlZDogZmFsc2UsXG4gICAgICAgICAgICBwYXVzZWQ6IGZhbHNlLFxuICAgICAgICAgICAgcHVzaDogZnVuY3Rpb24gKGRhdGEsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICAgIF9pbnNlcnQocSwgZGF0YSwgZmFsc2UsIGNhbGxiYWNrKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBraWxsOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgIHEuZHJhaW4gPSBudWxsO1xuICAgICAgICAgICAgICBxLnRhc2tzID0gW107XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdW5zaGlmdDogZnVuY3Rpb24gKGRhdGEsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICAgIF9pbnNlcnQocSwgZGF0YSwgdHJ1ZSwgY2FsbGJhY2spO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHByb2Nlc3M6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBpZiAoIXEucGF1c2VkICYmIHdvcmtlcnMgPCBxLmNvbmN1cnJlbmN5ICYmIHEudGFza3MubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciB0YXNrID0gcS50YXNrcy5zaGlmdCgpO1xuICAgICAgICAgICAgICAgICAgICBpZiAocS5lbXB0eSAmJiBxLnRhc2tzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcS5lbXB0eSgpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHdvcmtlcnMgKz0gMTtcbiAgICAgICAgICAgICAgICAgICAgdmFyIG5leHQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB3b3JrZXJzIC09IDE7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodGFzay5jYWxsYmFjaykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhc2suY2FsbGJhY2suYXBwbHkodGFzaywgYXJndW1lbnRzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChxLmRyYWluICYmIHEudGFza3MubGVuZ3RoICsgd29ya2VycyA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHEuZHJhaW4oKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHEucHJvY2VzcygpO1xuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICB2YXIgY2IgPSBvbmx5X29uY2UobmV4dCk7XG4gICAgICAgICAgICAgICAgICAgIHdvcmtlcih0YXNrLmRhdGEsIGNiKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbGVuZ3RoOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHEudGFza3MubGVuZ3RoO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHJ1bm5pbmc6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gd29ya2VycztcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBpZGxlOiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcS50YXNrcy5sZW5ndGggKyB3b3JrZXJzID09PSAwO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHBhdXNlOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgaWYgKHEucGF1c2VkID09PSB0cnVlKSB7IHJldHVybjsgfVxuICAgICAgICAgICAgICAgIHEucGF1c2VkID0gdHJ1ZTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICByZXN1bWU6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBpZiAocS5wYXVzZWQgPT09IGZhbHNlKSB7IHJldHVybjsgfVxuICAgICAgICAgICAgICAgIHEucGF1c2VkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgLy8gTmVlZCB0byBjYWxsIHEucHJvY2VzcyBvbmNlIHBlciBjb25jdXJyZW50XG4gICAgICAgICAgICAgICAgLy8gd29ya2VyIHRvIHByZXNlcnZlIGZ1bGwgY29uY3VycmVuY3kgYWZ0ZXIgcGF1c2VcbiAgICAgICAgICAgICAgICBmb3IgKHZhciB3ID0gMTsgdyA8PSBxLmNvbmN1cnJlbmN5OyB3KyspIHtcbiAgICAgICAgICAgICAgICAgICAgYXN5bmMuc2V0SW1tZWRpYXRlKHEucHJvY2Vzcyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gcTtcbiAgICB9O1xuXG4gICAgYXN5bmMucHJpb3JpdHlRdWV1ZSA9IGZ1bmN0aW9uICh3b3JrZXIsIGNvbmN1cnJlbmN5KSB7XG5cbiAgICAgICAgZnVuY3Rpb24gX2NvbXBhcmVUYXNrcyhhLCBiKXtcbiAgICAgICAgICByZXR1cm4gYS5wcmlvcml0eSAtIGIucHJpb3JpdHk7XG4gICAgICAgIH07XG5cbiAgICAgICAgZnVuY3Rpb24gX2JpbmFyeVNlYXJjaChzZXF1ZW5jZSwgaXRlbSwgY29tcGFyZSkge1xuICAgICAgICAgIHZhciBiZWcgPSAtMSxcbiAgICAgICAgICAgICAgZW5kID0gc2VxdWVuY2UubGVuZ3RoIC0gMTtcbiAgICAgICAgICB3aGlsZSAoYmVnIDwgZW5kKSB7XG4gICAgICAgICAgICB2YXIgbWlkID0gYmVnICsgKChlbmQgLSBiZWcgKyAxKSA+Pj4gMSk7XG4gICAgICAgICAgICBpZiAoY29tcGFyZShpdGVtLCBzZXF1ZW5jZVttaWRdKSA+PSAwKSB7XG4gICAgICAgICAgICAgIGJlZyA9IG1pZDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGVuZCA9IG1pZCAtIDE7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBiZWc7XG4gICAgICAgIH1cblxuICAgICAgICBmdW5jdGlvbiBfaW5zZXJ0KHEsIGRhdGEsIHByaW9yaXR5LCBjYWxsYmFjaykge1xuICAgICAgICAgIGlmICghcS5zdGFydGVkKXtcbiAgICAgICAgICAgIHEuc3RhcnRlZCA9IHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICghX2lzQXJyYXkoZGF0YSkpIHtcbiAgICAgICAgICAgICAgZGF0YSA9IFtkYXRhXTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYoZGF0YS5sZW5ndGggPT0gMCkge1xuICAgICAgICAgICAgIC8vIGNhbGwgZHJhaW4gaW1tZWRpYXRlbHkgaWYgdGhlcmUgYXJlIG5vIHRhc2tzXG4gICAgICAgICAgICAgcmV0dXJuIGFzeW5jLnNldEltbWVkaWF0ZShmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgaWYgKHEuZHJhaW4pIHtcbiAgICAgICAgICAgICAgICAgICAgIHEuZHJhaW4oKTtcbiAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgICBfZWFjaChkYXRhLCBmdW5jdGlvbih0YXNrKSB7XG4gICAgICAgICAgICAgIHZhciBpdGVtID0ge1xuICAgICAgICAgICAgICAgICAgZGF0YTogdGFzayxcbiAgICAgICAgICAgICAgICAgIHByaW9yaXR5OiBwcmlvcml0eSxcbiAgICAgICAgICAgICAgICAgIGNhbGxiYWNrOiB0eXBlb2YgY2FsbGJhY2sgPT09ICdmdW5jdGlvbicgPyBjYWxsYmFjayA6IG51bGxcbiAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICBxLnRhc2tzLnNwbGljZShfYmluYXJ5U2VhcmNoKHEudGFza3MsIGl0ZW0sIF9jb21wYXJlVGFza3MpICsgMSwgMCwgaXRlbSk7XG5cbiAgICAgICAgICAgICAgaWYgKHEuc2F0dXJhdGVkICYmIHEudGFza3MubGVuZ3RoID09PSBxLmNvbmN1cnJlbmN5KSB7XG4gICAgICAgICAgICAgICAgICBxLnNhdHVyYXRlZCgpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGFzeW5jLnNldEltbWVkaWF0ZShxLnByb2Nlc3MpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gU3RhcnQgd2l0aCBhIG5vcm1hbCBxdWV1ZVxuICAgICAgICB2YXIgcSA9IGFzeW5jLnF1ZXVlKHdvcmtlciwgY29uY3VycmVuY3kpO1xuXG4gICAgICAgIC8vIE92ZXJyaWRlIHB1c2ggdG8gYWNjZXB0IHNlY29uZCBwYXJhbWV0ZXIgcmVwcmVzZW50aW5nIHByaW9yaXR5XG4gICAgICAgIHEucHVzaCA9IGZ1bmN0aW9uIChkYXRhLCBwcmlvcml0eSwgY2FsbGJhY2spIHtcbiAgICAgICAgICBfaW5zZXJ0KHEsIGRhdGEsIHByaW9yaXR5LCBjYWxsYmFjayk7XG4gICAgICAgIH07XG5cbiAgICAgICAgLy8gUmVtb3ZlIHVuc2hpZnQgZnVuY3Rpb25cbiAgICAgICAgZGVsZXRlIHEudW5zaGlmdDtcblxuICAgICAgICByZXR1cm4gcTtcbiAgICB9O1xuXG4gICAgYXN5bmMuY2FyZ28gPSBmdW5jdGlvbiAod29ya2VyLCBwYXlsb2FkKSB7XG4gICAgICAgIHZhciB3b3JraW5nICAgICA9IGZhbHNlLFxuICAgICAgICAgICAgdGFza3MgICAgICAgPSBbXTtcblxuICAgICAgICB2YXIgY2FyZ28gPSB7XG4gICAgICAgICAgICB0YXNrczogdGFza3MsXG4gICAgICAgICAgICBwYXlsb2FkOiBwYXlsb2FkLFxuICAgICAgICAgICAgc2F0dXJhdGVkOiBudWxsLFxuICAgICAgICAgICAgZW1wdHk6IG51bGwsXG4gICAgICAgICAgICBkcmFpbjogbnVsbCxcbiAgICAgICAgICAgIGRyYWluZWQ6IHRydWUsXG4gICAgICAgICAgICBwdXNoOiBmdW5jdGlvbiAoZGF0YSwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgICAgICBpZiAoIV9pc0FycmF5KGRhdGEpKSB7XG4gICAgICAgICAgICAgICAgICAgIGRhdGEgPSBbZGF0YV07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIF9lYWNoKGRhdGEsIGZ1bmN0aW9uKHRhc2spIHtcbiAgICAgICAgICAgICAgICAgICAgdGFza3MucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgICAgICBkYXRhOiB0YXNrLFxuICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2s6IHR5cGVvZiBjYWxsYmFjayA9PT0gJ2Z1bmN0aW9uJyA/IGNhbGxiYWNrIDogbnVsbFxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgY2FyZ28uZHJhaW5lZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICBpZiAoY2FyZ28uc2F0dXJhdGVkICYmIHRhc2tzLmxlbmd0aCA9PT0gcGF5bG9hZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY2FyZ28uc2F0dXJhdGVkKCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBhc3luYy5zZXRJbW1lZGlhdGUoY2FyZ28ucHJvY2Vzcyk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcHJvY2VzczogZnVuY3Rpb24gcHJvY2VzcygpIHtcbiAgICAgICAgICAgICAgICBpZiAod29ya2luZykgcmV0dXJuO1xuICAgICAgICAgICAgICAgIGlmICh0YXNrcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgaWYoY2FyZ28uZHJhaW4gJiYgIWNhcmdvLmRyYWluZWQpIGNhcmdvLmRyYWluKCk7XG4gICAgICAgICAgICAgICAgICAgIGNhcmdvLmRyYWluZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgdmFyIHRzID0gdHlwZW9mIHBheWxvYWQgPT09ICdudW1iZXInXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPyB0YXNrcy5zcGxpY2UoMCwgcGF5bG9hZClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IHRhc2tzLnNwbGljZSgwLCB0YXNrcy5sZW5ndGgpO1xuXG4gICAgICAgICAgICAgICAgdmFyIGRzID0gX21hcCh0cywgZnVuY3Rpb24gKHRhc2spIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRhc2suZGF0YTtcbiAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgIGlmKGNhcmdvLmVtcHR5KSBjYXJnby5lbXB0eSgpO1xuICAgICAgICAgICAgICAgIHdvcmtpbmcgPSB0cnVlO1xuICAgICAgICAgICAgICAgIHdvcmtlcihkcywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICB3b3JraW5nID0gZmFsc2U7XG5cbiAgICAgICAgICAgICAgICAgICAgdmFyIGFyZ3MgPSBhcmd1bWVudHM7XG4gICAgICAgICAgICAgICAgICAgIF9lYWNoKHRzLCBmdW5jdGlvbiAoZGF0YSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRhdGEuY2FsbGJhY2spIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLmNhbGxiYWNrLmFwcGx5KG51bGwsIGFyZ3MpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgICAgICBwcm9jZXNzKCk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbGVuZ3RoOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRhc2tzLmxlbmd0aDtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBydW5uaW5nOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHdvcmtpbmc7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiBjYXJnbztcbiAgICB9O1xuXG4gICAgdmFyIF9jb25zb2xlX2ZuID0gZnVuY3Rpb24gKG5hbWUpIHtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChmbikge1xuICAgICAgICAgICAgdmFyIGFyZ3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsIDEpO1xuICAgICAgICAgICAgZm4uYXBwbHkobnVsbCwgYXJncy5jb25jYXQoW2Z1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgICAgICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMSk7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBjb25zb2xlICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoY29uc29sZS5lcnJvcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChjb25zb2xlW25hbWVdKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBfZWFjaChhcmdzLCBmdW5jdGlvbiAoeCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGVbbmFtZV0oeCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1dKSk7XG4gICAgICAgIH07XG4gICAgfTtcbiAgICBhc3luYy5sb2cgPSBfY29uc29sZV9mbignbG9nJyk7XG4gICAgYXN5bmMuZGlyID0gX2NvbnNvbGVfZm4oJ2RpcicpO1xuICAgIC8qYXN5bmMuaW5mbyA9IF9jb25zb2xlX2ZuKCdpbmZvJyk7XG4gICAgYXN5bmMud2FybiA9IF9jb25zb2xlX2ZuKCd3YXJuJyk7XG4gICAgYXN5bmMuZXJyb3IgPSBfY29uc29sZV9mbignZXJyb3InKTsqL1xuXG4gICAgYXN5bmMubWVtb2l6ZSA9IGZ1bmN0aW9uIChmbiwgaGFzaGVyKSB7XG4gICAgICAgIHZhciBtZW1vID0ge307XG4gICAgICAgIHZhciBxdWV1ZXMgPSB7fTtcbiAgICAgICAgaGFzaGVyID0gaGFzaGVyIHx8IGZ1bmN0aW9uICh4KSB7XG4gICAgICAgICAgICByZXR1cm4geDtcbiAgICAgICAgfTtcbiAgICAgICAgdmFyIG1lbW9pemVkID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIGFyZ3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMpO1xuICAgICAgICAgICAgdmFyIGNhbGxiYWNrID0gYXJncy5wb3AoKTtcbiAgICAgICAgICAgIHZhciBrZXkgPSBoYXNoZXIuYXBwbHkobnVsbCwgYXJncyk7XG4gICAgICAgICAgICBpZiAoa2V5IGluIG1lbW8pIHtcbiAgICAgICAgICAgICAgICBhc3luYy5uZXh0VGljayhmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrLmFwcGx5KG51bGwsIG1lbW9ba2V5XSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChrZXkgaW4gcXVldWVzKSB7XG4gICAgICAgICAgICAgICAgcXVldWVzW2tleV0ucHVzaChjYWxsYmFjayk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBxdWV1ZXNba2V5XSA9IFtjYWxsYmFja107XG4gICAgICAgICAgICAgICAgZm4uYXBwbHkobnVsbCwgYXJncy5jb25jYXQoW2Z1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgbWVtb1trZXldID0gYXJndW1lbnRzO1xuICAgICAgICAgICAgICAgICAgICB2YXIgcSA9IHF1ZXVlc1trZXldO1xuICAgICAgICAgICAgICAgICAgICBkZWxldGUgcXVldWVzW2tleV07XG4gICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwLCBsID0gcS5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICBxW2ldLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICBtZW1vaXplZC5tZW1vID0gbWVtbztcbiAgICAgICAgbWVtb2l6ZWQudW5tZW1vaXplZCA9IGZuO1xuICAgICAgICByZXR1cm4gbWVtb2l6ZWQ7XG4gICAgfTtcblxuICAgIGFzeW5jLnVubWVtb2l6ZSA9IGZ1bmN0aW9uIChmbikge1xuICAgICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIChmbi51bm1lbW9pemVkIHx8IGZuKS5hcHBseShudWxsLCBhcmd1bWVudHMpO1xuICAgICAgfTtcbiAgICB9O1xuXG4gICAgYXN5bmMudGltZXMgPSBmdW5jdGlvbiAoY291bnQsIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICB2YXIgY291bnRlciA9IFtdO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNvdW50OyBpKyspIHtcbiAgICAgICAgICAgIGNvdW50ZXIucHVzaChpKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYXN5bmMubWFwKGNvdW50ZXIsIGl0ZXJhdG9yLCBjYWxsYmFjayk7XG4gICAgfTtcblxuICAgIGFzeW5jLnRpbWVzU2VyaWVzID0gZnVuY3Rpb24gKGNvdW50LCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgdmFyIGNvdW50ZXIgPSBbXTtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7XG4gICAgICAgICAgICBjb3VudGVyLnB1c2goaSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGFzeW5jLm1hcFNlcmllcyhjb3VudGVyLCBpdGVyYXRvciwgY2FsbGJhY2spO1xuICAgIH07XG5cbiAgICBhc3luYy5zZXEgPSBmdW5jdGlvbiAoLyogZnVuY3Rpb25zLi4uICovKSB7XG4gICAgICAgIHZhciBmbnMgPSBhcmd1bWVudHM7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgdGhhdCA9IHRoaXM7XG4gICAgICAgICAgICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7XG4gICAgICAgICAgICB2YXIgY2FsbGJhY2sgPSBhcmdzLnBvcCgpO1xuICAgICAgICAgICAgYXN5bmMucmVkdWNlKGZucywgYXJncywgZnVuY3Rpb24gKG5ld2FyZ3MsIGZuLCBjYikge1xuICAgICAgICAgICAgICAgIGZuLmFwcGx5KHRoYXQsIG5ld2FyZ3MuY29uY2F0KFtmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBlcnIgPSBhcmd1bWVudHNbMF07XG4gICAgICAgICAgICAgICAgICAgIHZhciBuZXh0YXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMSk7XG4gICAgICAgICAgICAgICAgICAgIGNiKGVyciwgbmV4dGFyZ3MpO1xuICAgICAgICAgICAgICAgIH1dKSlcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBmdW5jdGlvbiAoZXJyLCByZXN1bHRzKSB7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2suYXBwbHkodGhhdCwgW2Vycl0uY29uY2F0KHJlc3VsdHMpKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9O1xuICAgIH07XG5cbiAgICBhc3luYy5jb21wb3NlID0gZnVuY3Rpb24gKC8qIGZ1bmN0aW9ucy4uLiAqLykge1xuICAgICAgcmV0dXJuIGFzeW5jLnNlcS5hcHBseShudWxsLCBBcnJheS5wcm90b3R5cGUucmV2ZXJzZS5jYWxsKGFyZ3VtZW50cykpO1xuICAgIH07XG5cbiAgICB2YXIgX2FwcGx5RWFjaCA9IGZ1bmN0aW9uIChlYWNoZm4sIGZucyAvKmFyZ3MuLi4qLykge1xuICAgICAgICB2YXIgZ28gPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgdGhhdCA9IHRoaXM7XG4gICAgICAgICAgICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7XG4gICAgICAgICAgICB2YXIgY2FsbGJhY2sgPSBhcmdzLnBvcCgpO1xuICAgICAgICAgICAgcmV0dXJuIGVhY2hmbihmbnMsIGZ1bmN0aW9uIChmbiwgY2IpIHtcbiAgICAgICAgICAgICAgICBmbi5hcHBseSh0aGF0LCBhcmdzLmNvbmNhdChbY2JdKSk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY2FsbGJhY2spO1xuICAgICAgICB9O1xuICAgICAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA+IDIpIHtcbiAgICAgICAgICAgIHZhciBhcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAyKTtcbiAgICAgICAgICAgIHJldHVybiBnby5hcHBseSh0aGlzLCBhcmdzKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBnbztcbiAgICAgICAgfVxuICAgIH07XG4gICAgYXN5bmMuYXBwbHlFYWNoID0gZG9QYXJhbGxlbChfYXBwbHlFYWNoKTtcbiAgICBhc3luYy5hcHBseUVhY2hTZXJpZXMgPSBkb1NlcmllcyhfYXBwbHlFYWNoKTtcblxuICAgIGFzeW5jLmZvcmV2ZXIgPSBmdW5jdGlvbiAoZm4sIGNhbGxiYWNrKSB7XG4gICAgICAgIGZ1bmN0aW9uIG5leHQoZXJyKSB7XG4gICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgaWYgKGNhbGxiYWNrKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aHJvdyBlcnI7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmbihuZXh0KTtcbiAgICAgICAgfVxuICAgICAgICBuZXh0KCk7XG4gICAgfTtcblxuICAgIC8vIE5vZGUuanNcbiAgICBpZiAodHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCcgJiYgbW9kdWxlLmV4cG9ydHMpIHtcbiAgICAgICAgbW9kdWxlLmV4cG9ydHMgPSBhc3luYztcbiAgICB9XG4gICAgLy8gQU1EIC8gUmVxdWlyZUpTXG4gICAgZWxzZSBpZiAodHlwZW9mIGRlZmluZSAhPT0gJ3VuZGVmaW5lZCcgJiYgZGVmaW5lLmFtZCkge1xuICAgICAgICBkZWZpbmUoW10sIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiBhc3luYztcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8vIGluY2x1ZGVkIGRpcmVjdGx5IHZpYSA8c2NyaXB0PiB0YWdcbiAgICBlbHNlIHtcbiAgICAgICAgcm9vdC5hc3luYyA9IGFzeW5jO1xuICAgIH1cblxufSgpKTtcbiIsInZhciBhc3luYyAgICAgICA9IHJlcXVpcmUoJ2FzeW5jJyksXG4gICAgdXJsUGFyc2VyICAgPSByZXF1aXJlKCd1cmwnKSxcbiAgICBSZXNvdXJjZSAgICA9IHJlcXVpcmUoJy4vUmVzb3VyY2UnKSxcbiAgICBFdmVudEVtaXR0ZXIgPSByZXF1aXJlKCdldmVudGVtaXR0ZXIzJyk7XG5cbi8qKlxuICogTWFuYWdlcyB0aGUgc3RhdGUgYW5kIGxvYWRpbmcgb2YgbXVsdGlwbGUgcmVzb3VyY2VzIHRvIGxvYWQuXG4gKlxuICogQGNsYXNzXG4gKiBAcGFyYW0gW2Jhc2VVcmw9JyddIHtzdHJpbmd9IFRoZSBiYXNlIHVybCBmb3IgYWxsIHJlc291cmNlcyBsb2FkZWQgYnkgdGhpcyBsb2FkZXIuXG4gKiBAcGFyYW0gW2NvbmN1cnJlbmN5PTEwXSB7bnVtYmVyfSBUaGUgbnVtYmVyIG9mIHJlc291cmNlcyB0byBsb2FkIGNvbmN1cnJlbnRseS5cbiAqL1xuZnVuY3Rpb24gTG9hZGVyKGJhc2VVcmwsIGNvbmN1cnJlbmN5KSB7XG4gICAgRXZlbnRFbWl0dGVyLmNhbGwodGhpcyk7XG5cbiAgICBjb25jdXJyZW5jeSA9IGNvbmN1cnJlbmN5IHx8IDEwO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGJhc2UgdXJsIGZvciBhbGwgcmVzb3VyY2VzIGxvYWRlZCBieSB0aGlzIGxvYWRlci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge3N0cmluZ31cbiAgICAgKi9cbiAgICB0aGlzLmJhc2VVcmwgPSBiYXNlVXJsIHx8ICcnO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHByb2dyZXNzIHBlcmNlbnQgb2YgdGhlIGxvYWRlciBnb2luZyB0aHJvdWdoIHRoZSBxdWV1ZS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLnByb2dyZXNzID0gMDtcblxuICAgIC8qKlxuICAgICAqIExvYWRpbmcgc3RhdGUgb2YgdGhlIGxvYWRlciwgdHJ1ZSBpZiBpdCBpcyBjdXJyZW50bHkgbG9hZGluZyByZXNvdXJjZXMuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqL1xuICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHBlcmNlbnRhZ2Ugb2YgdG90YWwgcHJvZ3Jlc3MgdGhhdCBhIHNpbmdsZSByZXNvdXJjZSByZXByZXNlbnRzLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMuX3Byb2dyZXNzQ2h1bmsgPSAwO1xuXG4gICAgLyoqXG4gICAgICogVGhlIG1pZGRsZXdhcmUgdG8gcnVuIGJlZm9yZSBsb2FkaW5nIGVhY2ggcmVzb3VyY2UuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtmdW5jdGlvbltdfVxuICAgICAqL1xuICAgIHRoaXMuX2JlZm9yZU1pZGRsZXdhcmUgPSBbXTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBtaWRkbGV3YXJlIHRvIHJ1biBhZnRlciBsb2FkaW5nIGVhY2ggcmVzb3VyY2UuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtmdW5jdGlvbltdfVxuICAgICAqL1xuICAgIHRoaXMuX2FmdGVyTWlkZGxld2FyZSA9IFtdO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGBfbG9hZFJlc291cmNlYCBmdW5jdGlvbiBib3VuZCB3aXRoIHRoaXMgb2JqZWN0IGNvbnRleHQuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBtZW1iZXIge2Z1bmN0aW9ufVxuICAgICAqL1xuICAgIHRoaXMuX2JvdW5kTG9hZFJlc291cmNlID0gdGhpcy5fbG9hZFJlc291cmNlLmJpbmQodGhpcyk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYF9vbkxvYWRgIGZ1bmN0aW9uIGJvdW5kIHdpdGggdGhpcyBvYmplY3QgY29udGV4dC5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQG1lbWJlciB7ZnVuY3Rpb259XG4gICAgICovXG4gICAgdGhpcy5fYm91bmRPbkxvYWQgPSB0aGlzLl9vbkxvYWQuYmluZCh0aGlzKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSByZXNvdXJjZSBidWZmZXIgdGhhdCBmaWxscyB1bnRpbCBgbG9hZGAgaXMgY2FsbGVkIHRvIHN0YXJ0IGxvYWRpbmcgcmVzb3VyY2VzLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAbWVtYmVyIHtSZXNvdXJjZVtdfVxuICAgICAqL1xuICAgIHRoaXMuX2J1ZmZlciA9IFtdO1xuXG4gICAgLyoqXG4gICAgICogVXNlZCB0byB0cmFjayBsb2FkIGNvbXBsZXRpb24uXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLl9udW1Ub0xvYWQgPSAwO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHJlc291cmNlcyB3YWl0aW5nIHRvIGJlIGxvYWRlZC5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQG1lbWJlciB7UmVzb3VyY2VbXX1cbiAgICAgKi9cbiAgICB0aGlzLl9xdWV1ZSA9IGFzeW5jLnF1ZXVlKHRoaXMuX2JvdW5kTG9hZFJlc291cmNlLCBjb25jdXJyZW5jeSk7XG5cbiAgICAvKipcbiAgICAgKiBBbGwgdGhlIHJlc291cmNlcyBmb3IgdGhpcyBsb2FkZXIga2V5ZWQgYnkgbmFtZS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge29iamVjdDxzdHJpbmcsIFJlc291cmNlPn1cbiAgICAgKi9cbiAgICB0aGlzLnJlc291cmNlcyA9IHt9O1xuXG4gICAgLyoqXG4gICAgICogRW1pdHRlZCBvbmNlIHBlciBsb2FkZWQgb3IgZXJyb3JlZCByZXNvdXJjZS5cbiAgICAgKlxuICAgICAqIEBldmVudCBwcm9ncmVzc1xuICAgICAqIEBtZW1iZXJvZiBMb2FkZXIjXG4gICAgICovXG5cbiAgICAvKipcbiAgICAgKiBFbWl0dGVkIG9uY2UgcGVyIGVycm9yZWQgcmVzb3VyY2UuXG4gICAgICpcbiAgICAgKiBAZXZlbnQgZXJyb3JcbiAgICAgKiBAbWVtYmVyb2YgTG9hZGVyI1xuICAgICAqL1xuXG4gICAgLyoqXG4gICAgICogRW1pdHRlZCBvbmNlIHBlciBsb2FkZWQgcmVzb3VyY2UuXG4gICAgICpcbiAgICAgKiBAZXZlbnQgbG9hZFxuICAgICAqIEBtZW1iZXJvZiBMb2FkZXIjXG4gICAgICovXG5cbiAgICAvKipcbiAgICAgKiBFbWl0dGVkIHdoZW4gdGhlIGxvYWRlciBiZWdpbnMgdG8gcHJvY2VzcyB0aGUgcXVldWUuXG4gICAgICpcbiAgICAgKiBAZXZlbnQgc3RhcnRcbiAgICAgKiBAbWVtYmVyb2YgTG9hZGVyI1xuICAgICAqL1xuXG4gICAgLyoqXG4gICAgICogRW1pdHRlZCB3aGVuIHRoZSBxdWV1ZWQgcmVzb3VyY2VzIGFsbCBsb2FkLlxuICAgICAqXG4gICAgICogQGV2ZW50IGNvbXBsZXRlXG4gICAgICogQG1lbWJlcm9mIExvYWRlciNcbiAgICAgKi9cbn1cblxuTG9hZGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoRXZlbnRFbWl0dGVyLnByb3RvdHlwZSk7XG5Mb2FkZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gTG9hZGVyO1xubW9kdWxlLmV4cG9ydHMgPSBMb2FkZXI7XG5cbi8qKlxuICogQWRkcyBhIHJlc291cmNlIChvciBtdWx0aXBsZSByZXNvdXJjZXMpIHRvIHRoZSBsb2FkZXIgcXVldWUuXG4gKlxuICogVGhpcyBmdW5jdGlvbiBjYW4gdGFrZSBhIHdpZGUgdmFyaWV0eSBvZiBkaWZmZXJlbnQgcGFyYW1ldGVycy4gVGhlIG9ubHkgdGhpbmcgdGhhdCBpcyBhbHdheXNcbiAqIHJlcXVpcmVkIHRoZSB1cmwgdG8gbG9hZC4gQWxsIHRoZSBmb2xsb3dpbmcgd2lsbCB3b3JrOlxuICpcbiAqIGBgYGpzXG4gKiBsb2FkZXJcbiAqICAgICAvLyBub3JtYWwgcGFyYW0gc3ludGF4XG4gKiAgICAgLmFkZCgna2V5JywgJ2h0dHA6Ly8uLi4nLCBmdW5jdGlvbiAoKSB7fSlcbiAqICAgICAuYWRkKCdodHRwOi8vLi4uJywgZnVuY3Rpb24gKCkge30pXG4gKiAgICAgLmFkZCgnaHR0cDovLy4uLicpXG4gKlxuICogICAgIC8vIG9iamVjdCBzeW50YXhcbiAqICAgICAuYWRkKHtcbiAqICAgICAgICAgbmFtZTogJ2tleTInLFxuICogICAgICAgICB1cmw6ICdodHRwOi8vLi4uJ1xuICogICAgIH0sIGZ1bmN0aW9uICgpIHt9KVxuICogICAgIC5hZGQoe1xuICogICAgICAgICB1cmw6ICdodHRwOi8vLi4uJ1xuICogICAgIH0sIGZ1bmN0aW9uICgpIHt9KVxuICogICAgIC5hZGQoe1xuICogICAgICAgICBuYW1lOiAna2V5MycsXG4gKiAgICAgICAgIHVybDogJ2h0dHA6Ly8uLi4nXG4gKiAgICAgICAgIG9uQ29tcGxldGU6IGZ1bmN0aW9uICgpIHt9XG4gKiAgICAgfSlcbiAqICAgICAuYWRkKHtcbiAqICAgICAgICAgdXJsOiAnaHR0cHM6Ly8uLi4nLFxuICogICAgICAgICBvbkNvbXBsZXRlOiBmdW5jdGlvbiAoKSB7fSxcbiAqICAgICAgICAgY3Jvc3NPcmlnaW46IHRydWVcbiAqICAgICB9KVxuICpcbiAqICAgICAvLyB5b3UgY2FuIGFsc28gcGFzcyBhbiBhcnJheSBvZiBvYmplY3RzIG9yIHVybHMgb3IgYm90aFxuICogICAgIC5hZGQoW1xuICogICAgICAgICB7IG5hbWU6ICdrZXk0JywgdXJsOiAnaHR0cDovLy4uLicsIG9uQ29tcGxldGU6IGZ1bmN0aW9uICgpIHt9IH0sXG4gKiAgICAgICAgIHsgdXJsOiAnaHR0cDovLy4uLicsIG9uQ29tcGxldGU6IGZ1bmN0aW9uICgpIHt9IH0sXG4gKiAgICAgICAgICdodHRwOi8vLi4uJ1xuICogICAgIF0pO1xuICogYGBgXG4gKlxuICogQGFsaWFzIGVucXVldWVcbiAqIEBwYXJhbSBbbmFtZV0ge3N0cmluZ30gVGhlIG5hbWUgb2YgdGhlIHJlc291cmNlIHRvIGxvYWQsIGlmIG5vdCBwYXNzZWQgdGhlIHVybCBpcyB1c2VkLlxuICogQHBhcmFtIHVybCB7c3RyaW5nfSBUaGUgdXJsIGZvciB0aGlzIHJlc291cmNlLCByZWxhdGl2ZSB0byB0aGUgYmFzZVVybCBvZiB0aGlzIGxvYWRlci5cbiAqIEBwYXJhbSBbb3B0aW9uc10ge29iamVjdH0gVGhlIG9wdGlvbnMgZm9yIHRoZSBsb2FkLlxuICogQHBhcmFtIFtvcHRpb25zLmNyb3NzT3JpZ2luXSB7Ym9vbGVhbn0gSXMgdGhpcyByZXF1ZXN0IGNyb3NzLW9yaWdpbj8gRGVmYXVsdCBpcyB0byBkZXRlcm1pbmUgYXV0b21hdGljYWxseS5cbiAqIEBwYXJhbSBbb3B0aW9ucy5sb2FkVHlwZT1SZXNvdXJjZS5MT0FEX1RZUEUuWEhSXSB7UmVzb3VyY2UuWEhSX0xPQURfVFlQRX0gSG93IHNob3VsZCB0aGlzIHJlc291cmNlIGJlIGxvYWRlZD9cbiAqIEBwYXJhbSBbb3B0aW9ucy54aHJUeXBlPVJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkRFRkFVTFRdIHtSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRX0gSG93IHNob3VsZCB0aGUgZGF0YSBiZWluZ1xuICogICAgICBsb2FkZWQgYmUgaW50ZXJwcmV0ZWQgd2hlbiB1c2luZyBYSFI/XG4gKiBAcGFyYW0gW2NhbGxiYWNrXSB7ZnVuY3Rpb259IEZ1bmN0aW9uIHRvIGNhbGwgd2hlbiB0aGlzIHNwZWNpZmljIHJlc291cmNlIGNvbXBsZXRlcyBsb2FkaW5nLlxuICogQHJldHVybiB7TG9hZGVyfVxuICovXG5Mb2FkZXIucHJvdG90eXBlLmFkZCA9IExvYWRlci5wcm90b3R5cGUuZW5xdWV1ZSA9IGZ1bmN0aW9uIChuYW1lLCB1cmwsIG9wdGlvbnMsIGNiKSB7XG4gICAgLy8gc3BlY2lhbCBjYXNlIG9mIGFuIGFycmF5IG9mIG9iamVjdHMgb3IgdXJsc1xuICAgIGlmIChBcnJheS5pc0FycmF5KG5hbWUpKSB7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbmFtZS5sZW5ndGg7ICsraSkge1xuICAgICAgICAgICAgdGhpcy5hZGQobmFtZVtpXSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICAvLyBpZiBhbiBvYmplY3QgaXMgcGFzc2VkIGluc3RlYWQgb2YgcGFyYW1zXG4gICAgaWYgKHR5cGVvZiBuYW1lID09PSAnb2JqZWN0Jykge1xuICAgICAgICBjYiA9IHVybCB8fCBuYW1lLmNhbGxiYWNrIHx8IG5hbWUub25Db21wbGV0ZTtcbiAgICAgICAgb3B0aW9ucyA9IG5hbWU7XG4gICAgICAgIHVybCA9IG5hbWUudXJsO1xuICAgICAgICBuYW1lID0gbmFtZS5uYW1lIHx8IG5hbWUua2V5IHx8IG5hbWUudXJsO1xuICAgIH1cblxuICAgIC8vIGNhc2Ugd2hlcmUgbm8gbmFtZSBpcyBwYXNzZWQgc2hpZnQgYWxsIGFyZ3Mgb3ZlciBieSBvbmUuXG4gICAgaWYgKHR5cGVvZiB1cmwgIT09ICdzdHJpbmcnKSB7XG4gICAgICAgIGNiID0gb3B0aW9ucztcbiAgICAgICAgb3B0aW9ucyA9IHVybDtcbiAgICAgICAgdXJsID0gbmFtZTtcbiAgICB9XG5cbiAgICAvLyBub3cgdGhhdCB3ZSBzaGlmdGVkIG1ha2Ugc3VyZSB3ZSBoYXZlIGEgcHJvcGVyIHVybC5cbiAgICBpZiAodHlwZW9mIHVybCAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdObyB1cmwgcGFzc2VkIHRvIGFkZCByZXNvdXJjZSB0byBsb2FkZXIuJyk7XG4gICAgfVxuXG4gICAgLy8gb3B0aW9ucyBhcmUgb3B0aW9uYWwgc28gcGVvcGxlIG1pZ2h0IHBhc3MgYSBmdW5jdGlvbiBhbmQgbm8gb3B0aW9uc1xuICAgIGlmICh0eXBlb2Ygb3B0aW9ucyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBjYiA9IG9wdGlvbnM7XG4gICAgICAgIG9wdGlvbnMgPSBudWxsO1xuICAgIH1cblxuICAgIC8vIGNoZWNrIGlmIHJlc291cmNlIGFscmVhZHkgZXhpc3RzLlxuICAgIGlmICh0aGlzLnJlc291cmNlc1tuYW1lXSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1Jlc291cmNlIHdpdGggbmFtZSBcIicgKyBuYW1lICsgJ1wiIGFscmVhZHkgZXhpc3RzLicpO1xuICAgIH1cblxuICAgIC8vIGFkZCBiYXNlIHVybCBpZiB0aGlzIGlzbid0IGFuIGFic29sdXRlIHVybFxuICAgIHVybCA9IHRoaXMuX2hhbmRsZUJhc2VVcmwodXJsKTtcblxuICAgIC8vIGNyZWF0ZSB0aGUgc3RvcmUgdGhlIHJlc291cmNlXG4gICAgdGhpcy5yZXNvdXJjZXNbbmFtZV0gPSBuZXcgUmVzb3VyY2UobmFtZSwgdXJsLCBvcHRpb25zKTtcblxuICAgIGlmICh0eXBlb2YgY2IgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgdGhpcy5yZXNvdXJjZXNbbmFtZV0ub25jZSgnYWZ0ZXJNaWRkbGV3YXJlJywgY2IpO1xuICAgIH1cblxuICAgIHRoaXMuX251bVRvTG9hZCsrO1xuXG4gICAgLy8gaWYgYWxyZWFkeSBsb2FkaW5nIGFkZCBpdCB0byB0aGUgd29ya2VyIHF1ZXVlXG4gICAgaWYgKHRoaXMuX3F1ZXVlLnN0YXJ0ZWQpIHtcbiAgICAgICAgdGhpcy5fcXVldWUucHVzaCh0aGlzLnJlc291cmNlc1tuYW1lXSk7XG4gICAgICAgIHRoaXMuX3Byb2dyZXNzQ2h1bmsgPSAoMTAwIC0gdGhpcy5wcm9ncmVzcykgLyAodGhpcy5fcXVldWUubGVuZ3RoKCkgKyB0aGlzLl9xdWV1ZS5ydW5uaW5nKCkpO1xuICAgIH1cbiAgICAvLyBvdGhlcndpc2UgYnVmZmVyIGl0IHRvIGJlIGFkZGVkIHRvIHRoZSBxdWV1ZSBsYXRlclxuICAgIGVsc2Uge1xuICAgICAgICB0aGlzLl9idWZmZXIucHVzaCh0aGlzLnJlc291cmNlc1tuYW1lXSk7XG4gICAgICAgIHRoaXMuX3Byb2dyZXNzQ2h1bmsgPSAxMDAgLyB0aGlzLl9idWZmZXIubGVuZ3RoO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzO1xufTtcblxuTG9hZGVyLnByb3RvdHlwZS5faGFuZGxlQmFzZVVybCA9IGZ1bmN0aW9uICh1cmwpIHtcbiAgICB2YXIgcGFyc2VkVXJsID0gdXJsUGFyc2VyLnBhcnNlKHVybCk7XG5cbiAgICAvLyBhYnNvbHV0ZSB1cmwsIGp1c3QgdXNlIGl0IGFzIGlzLlxuICAgIGlmIChwYXJzZWRVcmwucHJvdG9jb2wgfHwgcGFyc2VkVXJsLnBhdGhuYW1lLmluZGV4T2YoJy8vJykgPT09IDApIHtcbiAgICAgICAgcmV0dXJuIHVybDtcbiAgICB9XG5cbiAgICAvLyBpZiBiYXNlVXJsIGRvZXNuJ3QgZW5kIGluIHNsYXNoIGFuZCB1cmwgZG9lc24ndCBzdGFydCB3aXRoIHNsYXNoLCB0aGVuIGFkZCBhIHNsYXNoIGluYmV0d2VlblxuICAgIGlmIChcbiAgICAgICAgdGhpcy5iYXNlVXJsLmxlbmd0aCAmJlxuICAgICAgICB0aGlzLmJhc2VVcmwubGFzdEluZGV4T2YoJy8nKSAhPT0gdGhpcy5iYXNlVXJsLmxlbmd0aCAtIDEgJiZcbiAgICAgICAgdXJsLmNoYXJBdCgwKSAhPT0gJy8nXG4gICAgKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmJhc2VVcmwgKyAnLycgKyB1cmw7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICByZXR1cm4gdGhpcy5iYXNlVXJsICsgdXJsO1xuICAgIH1cbn07XG5cblxuLyoqXG4gKiBTZXRzIHVwIGEgbWlkZGxld2FyZSBmdW5jdGlvbiB0aGF0IHdpbGwgcnVuICpiZWZvcmUqIHRoZVxuICogcmVzb3VyY2UgaXMgbG9hZGVkLlxuICpcbiAqIEBhbGlhcyBwcmVcbiAqIEBwYXJhbSBtaWRkbGV3YXJlIHtmdW5jdGlvbn0gVGhlIG1pZGRsZXdhcmUgZnVuY3Rpb24gdG8gcmVnaXN0ZXIuXG4gKiBAcmV0dXJuIHtMb2FkZXJ9XG4gKi9cbkxvYWRlci5wcm90b3R5cGUuYmVmb3JlID0gTG9hZGVyLnByb3RvdHlwZS5wcmUgPSBmdW5jdGlvbiAoZm4pIHtcbiAgICB0aGlzLl9iZWZvcmVNaWRkbGV3YXJlLnB1c2goZm4pO1xuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIFNldHMgdXAgYSBtaWRkbGV3YXJlIGZ1bmN0aW9uIHRoYXQgd2lsbCBydW4gKmFmdGVyKiB0aGVcbiAqIHJlc291cmNlIGlzIGxvYWRlZC5cbiAqXG4gKiBAYWxpYXMgdXNlXG4gKiBAcGFyYW0gbWlkZGxld2FyZSB7ZnVuY3Rpb259IFRoZSBtaWRkbGV3YXJlIGZ1bmN0aW9uIHRvIHJlZ2lzdGVyLlxuICogQHJldHVybiB7TG9hZGVyfVxuICovXG5Mb2FkZXIucHJvdG90eXBlLmFmdGVyID0gTG9hZGVyLnByb3RvdHlwZS51c2UgPSBmdW5jdGlvbiAoZm4pIHtcbiAgICB0aGlzLl9hZnRlck1pZGRsZXdhcmUucHVzaChmbik7XG5cbiAgICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogUmVzZXRzIHRoZSBxdWV1ZSBvZiB0aGUgbG9hZGVyIHRvIHByZXBhcmUgZm9yIGEgbmV3IGxvYWQuXG4gKlxuICogQHJldHVybiB7TG9hZGVyfVxuICovXG5Mb2FkZXIucHJvdG90eXBlLnJlc2V0ID0gZnVuY3Rpb24gKCkge1xuICAgIC8vIHRoaXMuYmFzZVVybCA9IGJhc2VVcmwgfHwgJyc7XG5cbiAgICB0aGlzLnByb2dyZXNzID0gMDtcblxuICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xuXG4gICAgdGhpcy5fcHJvZ3Jlc3NDaHVuayA9IDA7XG5cbiAgICAvLyB0aGlzLl9iZWZvcmVNaWRkbGV3YXJlLmxlbmd0aCA9IDA7XG4gICAgLy8gdGhpcy5fYWZ0ZXJNaWRkbGV3YXJlLmxlbmd0aCA9IDA7XG5cbiAgICB0aGlzLl9idWZmZXIubGVuZ3RoID0gMDtcblxuICAgIHRoaXMuX251bVRvTG9hZCA9IDA7XG5cbiAgICB0aGlzLl9xdWV1ZS5raWxsKCk7XG4gICAgdGhpcy5fcXVldWUuc3RhcnRlZCA9IGZhbHNlO1xuXG4gICAgdGhpcy5yZXNvdXJjZXMgPSB7fTtcbn07XG5cbi8qKlxuICogU3RhcnRzIGxvYWRpbmcgdGhlIHF1ZXVlZCByZXNvdXJjZXMuXG4gKlxuICogQGZpcmVzIHN0YXJ0XG4gKiBAcGFyYW0gW2NhbGxiYWNrXSB7ZnVuY3Rpb259IE9wdGlvbmFsIGNhbGxiYWNrIHRoYXQgd2lsbCBiZSBib3VuZCB0byB0aGUgYGNvbXBsZXRlYCBldmVudC5cbiAqIEByZXR1cm4ge0xvYWRlcn1cbiAqL1xuTG9hZGVyLnByb3RvdHlwZS5sb2FkID0gZnVuY3Rpb24gKGNiKSB7XG4gICAgLy8gcmVnaXN0ZXIgY29tcGxldGUgY2FsbGJhY2sgaWYgdGhleSBwYXNzIG9uZVxuICAgIGlmICh0eXBlb2YgY2IgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgdGhpcy5vbmNlKCdjb21wbGV0ZScsIGNiKTtcbiAgICB9XG5cbiAgICAvLyBpZiB0aGUgcXVldWUgaGFzIGFscmVhZHkgc3RhcnRlZCB3ZSBhcmUgZG9uZSBoZXJlXG4gICAgaWYgKHRoaXMuX3F1ZXVlLnN0YXJ0ZWQpIHtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLy8gbm90aWZ5IG9mIHN0YXJ0XG4gICAgdGhpcy5lbWl0KCdzdGFydCcsIHRoaXMpO1xuXG4gICAgLy8gc3RhcnQgdGhlIGludGVybmFsIHF1ZXVlXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLl9idWZmZXIubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgdGhpcy5fcXVldWUucHVzaCh0aGlzLl9idWZmZXJbaV0pO1xuICAgIH1cblxuICAgIC8vIGVtcHR5IHRoZSBidWZmZXJcbiAgICB0aGlzLl9idWZmZXIubGVuZ3RoID0gMDtcblxuICAgIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBMb2FkcyBhIHNpbmdsZSByZXNvdXJjZS5cbiAqXG4gKiBAZmlyZXMgcHJvZ3Jlc3NcbiAqIEBwcml2YXRlXG4gKi9cbkxvYWRlci5wcm90b3R5cGUuX2xvYWRSZXNvdXJjZSA9IGZ1bmN0aW9uIChyZXNvdXJjZSwgZGVxdWV1ZSkge1xuICAgIHZhciBzZWxmID0gdGhpcztcblxuICAgIHJlc291cmNlLl9kZXF1ZXVlID0gZGVxdWV1ZTtcblxuICAgIHRoaXMuX3J1bk1pZGRsZXdhcmUocmVzb3VyY2UsIHRoaXMuX2JlZm9yZU1pZGRsZXdhcmUsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgLy8gcmVzb3VyY2Uub24oJ3Byb2dyZXNzJywgc2VsZi5lbWl0LmJpbmQoc2VsZiwgJ3Byb2dyZXNzJykpO1xuXG4gICAgICAgIHJlc291cmNlLmxvYWQoc2VsZi5fYm91bmRPbkxvYWQpO1xuICAgIH0pO1xufTtcblxuLyoqXG4gKiBDYWxsZWQgb25jZSBlYWNoIHJlc291cmNlIGhhcyBsb2FkZWQuXG4gKlxuICogQGZpcmVzIGNvbXBsZXRlXG4gKiBAcHJpdmF0ZVxuICovXG5Mb2FkZXIucHJvdG90eXBlLl9vbkNvbXBsZXRlID0gZnVuY3Rpb24gKCkge1xuICAgIHRoaXMuZW1pdCgnY29tcGxldGUnLCB0aGlzLCB0aGlzLnJlc291cmNlcyk7XG59O1xuXG4vKipcbiAqIENhbGxlZCBlYWNoIHRpbWUgYSByZXNvdXJjZXMgaXMgbG9hZGVkLlxuICpcbiAqIEBmaXJlcyBwcm9ncmVzc1xuICogQGZpcmVzIGVycm9yXG4gKiBAZmlyZXMgbG9hZFxuICogQHByaXZhdGVcbiAqL1xuTG9hZGVyLnByb3RvdHlwZS5fb25Mb2FkID0gZnVuY3Rpb24gKHJlc291cmNlKSB7XG4gICAgdGhpcy5wcm9ncmVzcyArPSB0aGlzLl9wcm9ncmVzc0NodW5rO1xuXG4gICAgdGhpcy5lbWl0KCdwcm9ncmVzcycsIHRoaXMsIHJlc291cmNlKTtcblxuICAgIC8vIHJ1biBtaWRkbGV3YXJlLCB0aGlzICptdXN0KiBoYXBwZW4gYmVmb3JlIGRlcXVldWUgc28gc3ViLWFzc2V0cyBnZXQgYWRkZWQgcHJvcGVybHlcbiAgICB0aGlzLl9ydW5NaWRkbGV3YXJlKHJlc291cmNlLCB0aGlzLl9hZnRlck1pZGRsZXdhcmUsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmVzb3VyY2UuZW1pdCgnYWZ0ZXJNaWRkbGV3YXJlJywgcmVzb3VyY2UpO1xuXG4gICAgICAgIHRoaXMuX251bVRvTG9hZC0tO1xuXG4gICAgICAgIC8vIGRvIGNvbXBsZXRpb24gY2hlY2tcbiAgICAgICAgaWYgKHRoaXMuX251bVRvTG9hZCA9PT0gMCkge1xuICAgICAgICAgICAgdGhpcy5wcm9ncmVzcyA9IDEwMDtcbiAgICAgICAgICAgIHRoaXMuX29uQ29tcGxldGUoKTtcbiAgICAgICAgfVxuICAgICAgICBcbiAgICAgICAgaWYgKHJlc291cmNlLmVycm9yKSB7XG4gICAgICAgICAgICB0aGlzLmVtaXQoJ2Vycm9yJywgcmVzb3VyY2UuZXJyb3IsIHRoaXMsIHJlc291cmNlKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuZW1pdCgnbG9hZCcsIHRoaXMsIHJlc291cmNlKTtcbiAgICAgICAgfVxuICAgIH0pO1xuICAgIFxuXG5cbiAgICAvLyByZW1vdmUgdGhpcyByZXNvdXJjZSBmcm9tIHRoZSBhc3luYyBxdWV1ZVxuICAgIHJlc291cmNlLl9kZXF1ZXVlKCk7XG59O1xuXG4vKipcbiAqIFJ1biBtaWRkbGV3YXJlIGZ1bmN0aW9ucyBvbiBhIHJlc291cmNlLlxuICpcbiAqIEBwcml2YXRlXG4gKi9cbkxvYWRlci5wcm90b3R5cGUuX3J1bk1pZGRsZXdhcmUgPSBmdW5jdGlvbiAocmVzb3VyY2UsIGZucywgY2IpIHtcbiAgICB2YXIgc2VsZiA9IHRoaXM7XG5cbiAgICBhc3luYy5lYWNoU2VyaWVzKGZucywgZnVuY3Rpb24gKGZuLCBuZXh0KSB7XG4gICAgICAgIGZuLmNhbGwoc2VsZiwgcmVzb3VyY2UsIG5leHQpO1xuICAgIH0sIGNiLmJpbmQodGhpcywgcmVzb3VyY2UpKTtcbn07XG5cbkxvYWRlci5MT0FEX1RZUEUgPSBSZXNvdXJjZS5MT0FEX1RZUEU7XG5Mb2FkZXIuWEhSX1JFQURZX1NUQVRFID0gUmVzb3VyY2UuWEhSX1JFQURZX1NUQVRFO1xuTG9hZGVyLlhIUl9SRVNQT05TRV9UWVBFID0gUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEU7XG4iLCJ2YXIgRXZlbnRFbWl0dGVyID0gcmVxdWlyZSgnZXZlbnRlbWl0dGVyMycpLFxuICAgIF91cmwgPSByZXF1aXJlKCd1cmwnKSxcbiAgICAvLyB0ZXN0cyBpcyBDT1JTIGlzIHN1cHBvcnRlZCBpbiBYSFIsIGlmIG5vdCB3ZSBuZWVkIHRvIHVzZSBYRFJcbiAgICB1c2VYZHIgPSAhISh3aW5kb3cuWERvbWFpblJlcXVlc3QgJiYgISgnd2l0aENyZWRlbnRpYWxzJyBpbiAobmV3IFhNTEh0dHBSZXF1ZXN0KCkpKSksXG4gICAgdGVtcEFuY2hvciA9IG51bGw7XG5cbi8qKlxuICogTWFuYWdlcyB0aGUgc3RhdGUgYW5kIGxvYWRpbmcgb2YgYSBzaW5nbGUgcmVzb3VyY2UgcmVwcmVzZW50ZWQgYnlcbiAqIGEgc2luZ2xlIFVSTC5cbiAqXG4gKiBAY2xhc3NcbiAqIEBwYXJhbSBuYW1lIHtzdHJpbmd9IFRoZSBuYW1lIG9mIHRoZSByZXNvdXJjZSB0byBsb2FkLlxuICogQHBhcmFtIHVybCB7c3RyaW5nfHN0cmluZ1tdfSBUaGUgdXJsIGZvciB0aGlzIHJlc291cmNlLCBmb3IgYXVkaW8vdmlkZW8gbG9hZHMgeW91IGNhbiBwYXNzIGFuIGFycmF5IG9mIHNvdXJjZXMuXG4gKiBAcGFyYW0gW29wdGlvbnNdIHtvYmplY3R9IFRoZSBvcHRpb25zIGZvciB0aGUgbG9hZC5cbiAqIEBwYXJhbSBbb3B0aW9ucy5jcm9zc09yaWdpbl0ge3N0cmluZ3xib29sZWFufSBJcyB0aGlzIHJlcXVlc3QgY3Jvc3Mtb3JpZ2luPyBEZWZhdWx0IGlzIHRvIGRldGVybWluZSBhdXRvbWF0aWNhbGx5LlxuICogQHBhcmFtIFtvcHRpb25zLmxvYWRUeXBlPVJlc291cmNlLkxPQURfVFlQRS5YSFJdIHtSZXNvdXJjZS5MT0FEX1RZUEV9IEhvdyBzaG91bGQgdGhpcyByZXNvdXJjZSBiZSBsb2FkZWQ/XG4gKiBAcGFyYW0gW29wdGlvbnMueGhyVHlwZT1SZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRS5ERUZBVUxUXSB7UmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEV9IEhvdyBzaG91bGQgdGhlIGRhdGEgYmVpbmdcbiAqICAgICAgbG9hZGVkIGJlIGludGVycHJldGVkIHdoZW4gdXNpbmcgWEhSP1xuICogQHBhcmFtIFtvcHRpb25zLm1ldGFkYXRhXSB7b2JqZWN0fSBFeHRyYSBpbmZvIGZvciBtaWRkbGV3YXJlLlxuICovXG5mdW5jdGlvbiBSZXNvdXJjZShuYW1lLCB1cmwsIG9wdGlvbnMpIHtcbiAgICBFdmVudEVtaXR0ZXIuY2FsbCh0aGlzKTtcblxuICAgIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuXG4gICAgaWYgKHR5cGVvZiBuYW1lICE9PSAnc3RyaW5nJyB8fCB0eXBlb2YgdXJsICE9PSAnc3RyaW5nJykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0JvdGggbmFtZSBhbmQgdXJsIGFyZSByZXF1aXJlZCBmb3IgY29uc3RydWN0aW5nIGEgcmVzb3VyY2UuJyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhlIG5hbWUgb2YgdGhpcyByZXNvdXJjZS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge3N0cmluZ31cbiAgICAgKiBAcmVhZG9ubHlcbiAgICAgKi9cbiAgICB0aGlzLm5hbWUgPSBuYW1lO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHVybCB1c2VkIHRvIGxvYWQgdGhpcyByZXNvdXJjZS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge3N0cmluZ31cbiAgICAgKiBAcmVhZG9ubHlcbiAgICAgKi9cbiAgICB0aGlzLnVybCA9IHVybDtcblxuICAgIC8qKlxuICAgICAqIFN0b3JlcyB3aGV0aGVyIG9yIG5vdCB0aGlzIHVybCBpcyBhIGRhdGEgdXJsLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKiBAcmVhZG9ubHlcbiAgICAgKi9cbiAgICB0aGlzLmlzRGF0YVVybCA9IHRoaXMudXJsLmluZGV4T2YoJ2RhdGE6JykgPT09IDA7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgZGF0YSB0aGF0IHdhcyBsb2FkZWQgYnkgdGhlIHJlc291cmNlLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7YW55fVxuICAgICAqL1xuICAgIHRoaXMuZGF0YSA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBJcyB0aGlzIHJlcXVlc3QgY3Jvc3Mtb3JpZ2luPyBJZiB1bnNldCwgZGV0ZXJtaW5lZCBhdXRvbWF0aWNhbGx5LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7c3RyaW5nfVxuICAgICAqL1xuICAgIHRoaXMuY3Jvc3NPcmlnaW4gPSBvcHRpb25zLmNyb3NzT3JpZ2luID09PSB0cnVlID8gJ2Fub255bW91cycgOiBvcHRpb25zLmNyb3NzT3JpZ2luO1xuXG4gICAgLyoqXG4gICAgICogVGhlIG1ldGhvZCBvZiBsb2FkaW5nIHRvIHVzZSBmb3IgdGhpcyByZXNvdXJjZS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1Jlc291cmNlLkxPQURfVFlQRX1cbiAgICAgKi9cbiAgICB0aGlzLmxvYWRUeXBlID0gb3B0aW9ucy5sb2FkVHlwZSB8fCB0aGlzLl9kZXRlcm1pbmVMb2FkVHlwZSgpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHR5cGUgdXNlZCB0byBsb2FkIHRoZSByZXNvdXJjZSB2aWEgWEhSLiBJZiB1bnNldCwgZGV0ZXJtaW5lZCBhdXRvbWF0aWNhbGx5LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7c3RyaW5nfVxuICAgICAqL1xuICAgIHRoaXMueGhyVHlwZSA9IG9wdGlvbnMueGhyVHlwZTtcblxuICAgIC8qKlxuICAgICAqIEV4dHJhIGluZm8gZm9yIG1pZGRsZXdhcmVcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge29iamVjdH1cbiAgICAgKi9cbiAgICB0aGlzLm1ldGFkYXRhID0gb3B0aW9ucy5tZXRhZGF0YSB8fCB7fTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBlcnJvciB0aGF0IG9jY3VycmVkIHdoaWxlIGxvYWRpbmcgKGlmIGFueSkuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtFcnJvcn1cbiAgICAgKiBAcmVhZG9ubHlcbiAgICAgKi9cbiAgICB0aGlzLmVycm9yID0gbnVsbDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBYSFIgb2JqZWN0IHRoYXQgd2FzIHVzZWQgdG8gbG9hZCB0aGlzIHJlc291cmNlLiBUaGlzIGlzIG9ubHkgc2V0XG4gICAgICogd2hlbiBgbG9hZFR5cGVgIGlzIGBSZXNvdXJjZS5MT0FEX1RZUEUuWEhSYC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1hNTEh0dHBSZXF1ZXN0fVxuICAgICAqL1xuICAgIHRoaXMueGhyID0gbnVsbDtcblxuICAgIC8qKlxuICAgICAqIERlc2NyaWJlcyBpZiB0aGlzIHJlc291cmNlIHdhcyBsb2FkZWQgYXMganNvbi4gT25seSB2YWxpZCBhZnRlciB0aGUgcmVzb3VyY2VcbiAgICAgKiBoYXMgY29tcGxldGVseSBsb2FkZWQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqL1xuICAgIHRoaXMuaXNKc29uID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBEZXNjcmliZXMgaWYgdGhpcyByZXNvdXJjZSB3YXMgbG9hZGVkIGFzIHhtbC4gT25seSB2YWxpZCBhZnRlciB0aGUgcmVzb3VyY2VcbiAgICAgKiBoYXMgY29tcGxldGVseSBsb2FkZWQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqL1xuICAgIHRoaXMuaXNYbWwgPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIERlc2NyaWJlcyBpZiB0aGlzIHJlc291cmNlIHdhcyBsb2FkZWQgYXMgYW4gaW1hZ2UgdGFnLiBPbmx5IHZhbGlkIGFmdGVyIHRoZSByZXNvdXJjZVxuICAgICAqIGhhcyBjb21wbGV0ZWx5IGxvYWRlZC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICovXG4gICAgdGhpcy5pc0ltYWdlID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBEZXNjcmliZXMgaWYgdGhpcyByZXNvdXJjZSB3YXMgbG9hZGVkIGFzIGFuIGF1ZGlvIHRhZy4gT25seSB2YWxpZCBhZnRlciB0aGUgcmVzb3VyY2VcbiAgICAgKiBoYXMgY29tcGxldGVseSBsb2FkZWQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqL1xuICAgIHRoaXMuaXNBdWRpbyA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogRGVzY3JpYmVzIGlmIHRoaXMgcmVzb3VyY2Ugd2FzIGxvYWRlZCBhcyBhIHZpZGVvIHRhZy4gT25seSB2YWxpZCBhZnRlciB0aGUgcmVzb3VyY2VcbiAgICAgKiBoYXMgY29tcGxldGVseSBsb2FkZWQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqL1xuICAgIHRoaXMuaXNWaWRlbyA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGBkZXF1ZXVlYCBtZXRob2QgdGhhdCB3aWxsIGJlIHVzZWQgYSBzdG9yYWdlIHBsYWNlIGZvciB0aGUgYXN5bmMgcXVldWUgZGVxdWV1ZSBtZXRob2RcbiAgICAgKiB1c2VkIHByaXZhdGVseSBieSB0aGUgbG9hZGVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7ZnVuY3Rpb259XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9kZXF1ZXVlID0gbnVsbDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBgY29tcGxldGVgIGZ1bmN0aW9uIGJvdW5kIHRvIHRoaXMgcmVzb3VyY2UncyBjb250ZXh0LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7ZnVuY3Rpb259XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9ib3VuZENvbXBsZXRlID0gdGhpcy5jb21wbGV0ZS5iaW5kKHRoaXMpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGBfb25FcnJvcmAgZnVuY3Rpb24gYm91bmQgdG8gdGhpcyByZXNvdXJjZSdzIGNvbnRleHQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtmdW5jdGlvbn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX2JvdW5kT25FcnJvciA9IHRoaXMuX29uRXJyb3IuYmluZCh0aGlzKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBgX29uUHJvZ3Jlc3NgIGZ1bmN0aW9uIGJvdW5kIHRvIHRoaXMgcmVzb3VyY2UncyBjb250ZXh0LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7ZnVuY3Rpb259XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9ib3VuZE9uUHJvZ3Jlc3MgPSB0aGlzLl9vblByb2dyZXNzLmJpbmQodGhpcyk7XG5cbiAgICAvLyB4aHIgY2FsbGJhY2tzXG4gICAgdGhpcy5fYm91bmRYaHJPbkVycm9yID0gdGhpcy5feGhyT25FcnJvci5iaW5kKHRoaXMpO1xuICAgIHRoaXMuX2JvdW5kWGhyT25BYm9ydCA9IHRoaXMuX3hock9uQWJvcnQuYmluZCh0aGlzKTtcbiAgICB0aGlzLl9ib3VuZFhock9uTG9hZCA9IHRoaXMuX3hock9uTG9hZC5iaW5kKHRoaXMpO1xuICAgIHRoaXMuX2JvdW5kWGRyT25UaW1lb3V0ID0gdGhpcy5feGRyT25UaW1lb3V0LmJpbmQodGhpcyk7XG5cbiAgICAvKipcbiAgICAgKiBFbWl0dGVkIHdoZW4gdGhlIHJlc291cmNlIGJlaW5ncyB0byBsb2FkLlxuICAgICAqXG4gICAgICogQGV2ZW50IHN0YXJ0XG4gICAgICogQG1lbWJlcm9mIFJlc291cmNlI1xuICAgICAqL1xuXG4gICAgLyoqXG4gICAgICogRW1pdHRlZCBlYWNoIHRpbWUgcHJvZ3Jlc3Mgb2YgdGhpcyByZXNvdXJjZSBsb2FkIHVwZGF0ZXMuXG4gICAgICogTm90IGFsbCByZXNvdXJjZXMgdHlwZXMgYW5kIGxvYWRlciBzeXN0ZW1zIGNhbiBzdXBwb3J0IHRoaXMgZXZlbnRcbiAgICAgKiBzbyBzb21ldGltZXMgaXQgbWF5IG5vdCBiZSBhdmFpbGFibGUuIElmIHRoZSByZXNvdXJjZVxuICAgICAqIGlzIGJlaW5nIGxvYWRlZCBvbiBhIG1vZGVybiBicm93c2VyLCB1c2luZyBYSFIsIGFuZCB0aGUgcmVtb3RlIHNlcnZlclxuICAgICAqIHByb3Blcmx5IHNldHMgQ29udGVudC1MZW5ndGggaGVhZGVycywgdGhlbiB0aGlzIHdpbGwgYmUgYXZhaWxhYmxlLlxuICAgICAqXG4gICAgICogQGV2ZW50IHByb2dyZXNzXG4gICAgICogQG1lbWJlcm9mIFJlc291cmNlI1xuICAgICAqL1xuXG4gICAgLyoqXG4gICAgICogRW1pdHRlZCBvbmNlIHRoaXMgcmVzb3VyY2UgaGFzIGxvYWRlZCwgaWYgdGhlcmUgd2FzIGFuIGVycm9yIGl0IHdpbGxcbiAgICAgKiBiZSBpbiB0aGUgYGVycm9yYCBwcm9wZXJ0eS5cbiAgICAgKlxuICAgICAqIEBldmVudCBjb21wbGV0ZVxuICAgICAqIEBtZW1iZXJvZiBSZXNvdXJjZSNcbiAgICAgKi9cbn1cblxuUmVzb3VyY2UucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShFdmVudEVtaXR0ZXIucHJvdG90eXBlKTtcblJlc291cmNlLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFJlc291cmNlO1xubW9kdWxlLmV4cG9ydHMgPSBSZXNvdXJjZTtcblxuLyoqXG4gKiBNYXJrcyB0aGUgcmVzb3VyY2UgYXMgY29tcGxldGUuXG4gKlxuICogQGZpcmVzIGNvbXBsZXRlXG4gKi9cblJlc291cmNlLnByb3RvdHlwZS5jb21wbGV0ZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAvLyBUT0RPOiBDbGVhbiB0aGlzIHVwIGluIGEgd3JhcHBlciBvciBzb21ldGhpbmcuLi5ncm9zcy4uLi5cbiAgICBpZiAodGhpcy5kYXRhICYmIHRoaXMuZGF0YS5yZW1vdmVFdmVudExpc3RlbmVyKSB7XG4gICAgICAgIHRoaXMuZGF0YS5yZW1vdmVFdmVudExpc3RlbmVyKCdlcnJvcicsIHRoaXMuX2JvdW5kT25FcnJvcik7XG4gICAgICAgIHRoaXMuZGF0YS5yZW1vdmVFdmVudExpc3RlbmVyKCdsb2FkJywgdGhpcy5fYm91bmRDb21wbGV0ZSk7XG4gICAgICAgIHRoaXMuZGF0YS5yZW1vdmVFdmVudExpc3RlbmVyKCdwcm9ncmVzcycsIHRoaXMuX2JvdW5kT25Qcm9ncmVzcyk7XG4gICAgICAgIHRoaXMuZGF0YS5yZW1vdmVFdmVudExpc3RlbmVyKCdjYW5wbGF5dGhyb3VnaCcsIHRoaXMuX2JvdW5kQ29tcGxldGUpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnhocikge1xuICAgICAgICBpZiAodGhpcy54aHIucmVtb3ZlRXZlbnRMaXN0ZW5lcikge1xuICAgICAgICAgICAgdGhpcy54aHIucmVtb3ZlRXZlbnRMaXN0ZW5lcignZXJyb3InLCB0aGlzLl9ib3VuZFhock9uRXJyb3IpO1xuICAgICAgICAgICAgdGhpcy54aHIucmVtb3ZlRXZlbnRMaXN0ZW5lcignYWJvcnQnLCB0aGlzLl9ib3VuZFhock9uQWJvcnQpO1xuICAgICAgICAgICAgdGhpcy54aHIucmVtb3ZlRXZlbnRMaXN0ZW5lcigncHJvZ3Jlc3MnLCB0aGlzLl9ib3VuZE9uUHJvZ3Jlc3MpO1xuICAgICAgICAgICAgdGhpcy54aHIucmVtb3ZlRXZlbnRMaXN0ZW5lcignbG9hZCcsIHRoaXMuX2JvdW5kWGhyT25Mb2FkKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMueGhyLm9uZXJyb3IgPSBudWxsO1xuICAgICAgICAgICAgdGhpcy54aHIub250aW1lb3V0ID0gbnVsbDtcbiAgICAgICAgICAgIHRoaXMueGhyLm9ucHJvZ3Jlc3MgPSBudWxsO1xuICAgICAgICAgICAgdGhpcy54aHIub25sb2FkID0gbnVsbDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMuZW1pdCgnY29tcGxldGUnLCB0aGlzKTtcbn07XG5cbi8qKlxuICogS2lja3Mgb2ZmIGxvYWRpbmcgb2YgdGhpcyByZXNvdXJjZS5cbiAqXG4gKiBAZmlyZXMgc3RhcnRcbiAqIEBwYXJhbSBbY2FsbGJhY2tdIHtmdW5jdGlvbn0gT3B0aW9uYWwgY2FsbGJhY2sgdG8gY2FsbCBvbmNlIHRoZSByZXNvdXJjZSBpcyBsb2FkZWQuXG4gKi9cblJlc291cmNlLnByb3RvdHlwZS5sb2FkID0gZnVuY3Rpb24gKGNiKSB7XG4gICAgdGhpcy5lbWl0KCdzdGFydCcsIHRoaXMpO1xuXG4gICAgLy8gaWYgYSBjYWxsYmFjayBpcyBzZXQsIGxpc3RlbiBmb3IgY29tcGxldGUgZXZlbnRcbiAgICBpZiAoY2IpIHtcbiAgICAgICAgdGhpcy5vbmNlKCdjb21wbGV0ZScsIGNiKTtcbiAgICB9XG5cbiAgICAvLyBpZiB1bnNldCwgZGV0ZXJtaW5lIHRoZSB2YWx1ZVxuICAgIGlmICh0aGlzLmNyb3NzT3JpZ2luID09PSBmYWxzZSB8fCB0eXBlb2YgdGhpcy5jcm9zc09yaWdpbiAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgdGhpcy5jcm9zc09yaWdpbiA9IHRoaXMuX2RldGVybWluZUNyb3NzT3JpZ2luKHRoaXMudXJsKTtcbiAgICB9XG5cbiAgICBzd2l0Y2godGhpcy5sb2FkVHlwZSkge1xuICAgICAgICBjYXNlIFJlc291cmNlLkxPQURfVFlQRS5JTUFHRTpcbiAgICAgICAgICAgIHRoaXMuX2xvYWRJbWFnZSgpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSBSZXNvdXJjZS5MT0FEX1RZUEUuQVVESU86XG4gICAgICAgICAgICB0aGlzLl9sb2FkRWxlbWVudCgnYXVkaW8nKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgUmVzb3VyY2UuTE9BRF9UWVBFLlZJREVPOlxuICAgICAgICAgICAgdGhpcy5fbG9hZEVsZW1lbnQoJ3ZpZGVvJyk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIFJlc291cmNlLkxPQURfVFlQRS5YSFI6XG4gICAgICAgICAgICAvKiBmYWxscyB0aHJvdWdoICovXG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICBpZiAodXNlWGRyICYmIHRoaXMuY3Jvc3NPcmlnaW4pIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9sb2FkWGRyKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9sb2FkWGhyKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBicmVhaztcbiAgICB9XG59O1xuXG4vKipcbiAqIExvYWRzIHRoaXMgcmVzb3VyY2VzIHVzaW5nIGFuIEltYWdlIG9iamVjdC5cbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5SZXNvdXJjZS5wcm90b3R5cGUuX2xvYWRJbWFnZSA9IGZ1bmN0aW9uICgpIHtcbiAgICB0aGlzLmRhdGEgPSBuZXcgSW1hZ2UoKTtcblxuICAgIGlmICh0aGlzLmNyb3NzT3JpZ2luKSB7XG4gICAgICAgIHRoaXMuZGF0YS5jcm9zc09yaWdpbiA9IHRoaXMuY3Jvc3NPcmlnaW47XG4gICAgfVxuXG4gICAgdGhpcy5kYXRhLnNyYyA9IHRoaXMudXJsO1xuXG4gICAgdGhpcy5pc0ltYWdlID0gdHJ1ZTtcblxuICAgIHRoaXMuZGF0YS5hZGRFdmVudExpc3RlbmVyKCdlcnJvcicsIHRoaXMuX2JvdW5kT25FcnJvciwgZmFsc2UpO1xuICAgIHRoaXMuZGF0YS5hZGRFdmVudExpc3RlbmVyKCdsb2FkJywgdGhpcy5fYm91bmRDb21wbGV0ZSwgZmFsc2UpO1xuICAgIHRoaXMuZGF0YS5hZGRFdmVudExpc3RlbmVyKCdwcm9ncmVzcycsIHRoaXMuX2JvdW5kT25Qcm9ncmVzcywgZmFsc2UpO1xufTtcblxuLyoqXG4gKiBMb2FkcyB0aGlzIHJlc291cmNlcyB1c2luZyBhbiBIVE1MQXVkaW9FbGVtZW50IG9yIEhUTUxWaWRlb0VsZW1lbnQuXG4gKlxuICogQHByaXZhdGVcbiAqL1xuUmVzb3VyY2UucHJvdG90eXBlLl9sb2FkRWxlbWVudCA9IGZ1bmN0aW9uICh0eXBlKSB7XG4gICAgaWYgKHR5cGUgPT09ICdhdWRpbycgJiYgdHlwZW9mIEF1ZGlvICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICB0aGlzLmRhdGEgPSBuZXcgQXVkaW8oKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHRoaXMuZGF0YSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQodHlwZSk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuZGF0YSA9PT0gbnVsbCkge1xuICAgICAgICB0aGlzLmVycm9yID0gbmV3IEVycm9yKCdVbnN1cHBvcnRlZCBlbGVtZW50ICcgKyB0eXBlKTtcbiAgICAgICAgdGhpcy5jb21wbGV0ZSgpO1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gc3VwcG9ydCBmb3IgQ29jb29uSlMgQ2FudmFzKyBydW50aW1lLCBsYWNrcyBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzb3VyY2UnKVxuICAgIGlmIChuYXZpZ2F0b3IuaXNDb2Nvb25KUykge1xuICAgICAgICB0aGlzLmRhdGEuc3JjID0gQXJyYXkuaXNBcnJheSh0aGlzLnVybCkgPyB0aGlzLnVybFswXSA6IHRoaXMudXJsO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkodGhpcy51cmwpKSB7XG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMudXJsLmxlbmd0aDsgKytpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5kYXRhLmFwcGVuZENoaWxkKHRoaXMuX2NyZWF0ZVNvdXJjZSh0eXBlLCB0aGlzLnVybFtpXSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5kYXRhLmFwcGVuZENoaWxkKHRoaXMuX2NyZWF0ZVNvdXJjZSh0eXBlLCB0aGlzLnVybCkpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgdGhpc1snaXMnICsgdHlwZVswXS50b1VwcGVyQ2FzZSgpICsgdHlwZS5zdWJzdHJpbmcoMSldID0gdHJ1ZTtcblxuICAgIHRoaXMuZGF0YS5hZGRFdmVudExpc3RlbmVyKCdlcnJvcicsIHRoaXMuX2JvdW5kT25FcnJvciwgZmFsc2UpO1xuICAgIHRoaXMuZGF0YS5hZGRFdmVudExpc3RlbmVyKCdsb2FkJywgdGhpcy5fYm91bmRDb21wbGV0ZSwgZmFsc2UpO1xuICAgIHRoaXMuZGF0YS5hZGRFdmVudExpc3RlbmVyKCdwcm9ncmVzcycsIHRoaXMuX2JvdW5kT25Qcm9ncmVzcywgZmFsc2UpO1xuICAgIHRoaXMuZGF0YS5hZGRFdmVudExpc3RlbmVyKCdjYW5wbGF5dGhyb3VnaCcsIHRoaXMuX2JvdW5kQ29tcGxldGUsIGZhbHNlKTtcblxuICAgIHRoaXMuZGF0YS5sb2FkKCk7XG59O1xuXG4vKipcbiAqIExvYWRzIHRoaXMgcmVzb3VyY2VzIHVzaW5nIGFuIFhNTEh0dHBSZXF1ZXN0LlxuICpcbiAqIEBwcml2YXRlXG4gKi9cblJlc291cmNlLnByb3RvdHlwZS5fbG9hZFhociA9IGZ1bmN0aW9uICgpIHtcbiAgICAvLyBpZiB1bnNldCwgZGV0ZXJtaW5lIHRoZSB2YWx1ZVxuICAgIGlmICh0eXBlb2YgdGhpcy54aHJUeXBlICE9PSAnc3RyaW5nJykge1xuICAgICAgICB0aGlzLnhoclR5cGUgPSB0aGlzLl9kZXRlcm1pbmVYaHJUeXBlKCk7XG4gICAgfVxuXG4gICAgdmFyIHhociA9IHRoaXMueGhyID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7XG5cbiAgICAvLyBzZXQgdGhlIHJlcXVlc3QgdHlwZSBhbmQgdXJsXG4gICAgeGhyLm9wZW4oJ0dFVCcsIHRoaXMudXJsLCB0cnVlKTtcblxuICAgIC8vIGxvYWQganNvbiBhcyB0ZXh0IGFuZCBwYXJzZSBpdCBvdXJzZWx2ZXMuIFdlIGRvIHRoaXMgYmVjYXVzZSBzb21lIGJyb3dzZXJzXG4gICAgLy8gKmNvdWdoKiBzYWZhcmkgKmNvdWdoKiBjYW4ndCBkZWFsIHdpdGggaXQuXG4gICAgaWYgKHRoaXMueGhyVHlwZSA9PT0gUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuSlNPTiB8fCB0aGlzLnhoclR5cGUgPT09IFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkRPQ1VNRU5UKSB7XG4gICAgICAgIHhoci5yZXNwb25zZVR5cGUgPSBSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRS5URVhUO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgeGhyLnJlc3BvbnNlVHlwZSA9IHRoaXMueGhyVHlwZTtcbiAgICB9XG5cbiAgICB4aHIuYWRkRXZlbnRMaXN0ZW5lcignZXJyb3InLCB0aGlzLl9ib3VuZFhock9uRXJyb3IsIGZhbHNlKTtcbiAgICB4aHIuYWRkRXZlbnRMaXN0ZW5lcignYWJvcnQnLCB0aGlzLl9ib3VuZFhock9uQWJvcnQsIGZhbHNlKTtcbiAgICB4aHIuYWRkRXZlbnRMaXN0ZW5lcigncHJvZ3Jlc3MnLCB0aGlzLl9ib3VuZE9uUHJvZ3Jlc3MsIGZhbHNlKTtcbiAgICB4aHIuYWRkRXZlbnRMaXN0ZW5lcignbG9hZCcsIHRoaXMuX2JvdW5kWGhyT25Mb2FkLCBmYWxzZSk7XG5cbiAgICB4aHIuc2VuZCgpO1xufTtcblxuLyoqXG4gKiBMb2FkcyB0aGlzIHJlc291cmNlcyB1c2luZyBhbiBYRG9tYWluUmVxdWVzdC4gVGhpcyBpcyBoZXJlIGJlY2F1c2Ugd2UgbmVlZCB0byBzdXBwb3J0IElFOSAoZ3Jvc3MpLlxuICpcbiAqIEBwcml2YXRlXG4gKi9cblJlc291cmNlLnByb3RvdHlwZS5fbG9hZFhkciA9IGZ1bmN0aW9uICgpIHtcbiAgICAvLyBpZiB1bnNldCwgZGV0ZXJtaW5lIHRoZSB2YWx1ZVxuICAgIGlmICh0eXBlb2YgdGhpcy54aHJUeXBlICE9PSAnc3RyaW5nJykge1xuICAgICAgICB0aGlzLnhoclR5cGUgPSB0aGlzLl9kZXRlcm1pbmVYaHJUeXBlKCk7XG4gICAgfVxuXG4gICAgdmFyIHhkciA9IHRoaXMueGhyID0gbmV3IFhEb21haW5SZXF1ZXN0KCk7XG5cbiAgICAvLyBYRG9tYWluUmVxdWVzdCBoYXMgYSBmZXcgcXVpcmtzLiBPY2Nhc2lvbmFsbHkgaXQgd2lsbCBhYm9ydCByZXF1ZXN0c1xuICAgIC8vIEEgd2F5IHRvIGF2b2lkIHRoaXMgaXMgdG8gbWFrZSBzdXJlIEFMTCBjYWxsYmFja3MgYXJlIHNldCBldmVuIGlmIG5vdCB1c2VkXG4gICAgLy8gTW9yZSBpbmZvIGhlcmU6IGh0dHA6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvMTU3ODY5NjYveGRvbWFpbnJlcXVlc3QtYWJvcnRzLXBvc3Qtb24taWUtOVxuICAgIHhkci50aW1lb3V0ID0gNTAwMDtcblxuICAgIHhkci5vbmVycm9yID0gdGhpcy5fYm91bmRYaHJPbkVycm9yO1xuICAgIHhkci5vbnRpbWVvdXQgPSB0aGlzLl9ib3VuZFhkck9uVGltZW91dDtcbiAgICB4ZHIub25wcm9ncmVzcyA9IHRoaXMuX2JvdW5kT25Qcm9ncmVzcztcbiAgICB4ZHIub25sb2FkID0gdGhpcy5fYm91bmRYaHJPbkxvYWQ7XG5cbiAgICB4ZHIub3BlbignR0VUJywgdGhpcy51cmwsIHRydWUpO1xuXG4gICAgLy8gIE5vdGU6IFRoZSB4ZHIuc2VuZCgpIGNhbGwgaXMgd3JhcHBlZCBpbiBhIHRpbWVvdXQgdG8gcHJldmVudCBhbiBpc3N1ZSB3aXRoIHRoZSBpbnRlcmZhY2Ugd2hlcmUgc29tZSByZXF1ZXN0cyBhcmUgbG9zdFxuICAgIC8vICBpZiBtdWx0aXBsZSBYRG9tYWluUmVxdWVzdHMgYXJlIGJlaW5nIHNlbnQgYXQgdGhlIHNhbWUgdGltZS5cbiAgICAvLyBTb21lIGluZm8gaGVyZTogaHR0cHM6Ly9naXRodWIuY29tL3Bob3RvbnN0b3JtL3BoYXNlci9pc3N1ZXMvMTI0OFxuICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgICB4ZHIuc2VuZCgpO1xuICAgIH0sIDApO1xufTtcblxuLyoqXG4gKiBDcmVhdGVzIGEgc291cmNlIHVzZWQgaW4gbG9hZGluZyB2aWEgYW4gZWxlbWVudC5cbiAqXG4gKiBAcGFyYW0gdHlwZSB7c3RyaW5nfSBUaGUgZWxlbWVudCB0eXBlICh2aWRlbyBvciBhdWRpbykuXG4gKiBAcGFyYW0gdXJsIHtzdHJpbmd9IFRoZSBzb3VyY2UgVVJMIHRvIGxvYWQgZnJvbS5cbiAqIEBwYXJhbSBbbWltZV0ge3N0cmluZ30gVGhlIG1pbWUgdHlwZSBvZiB0aGUgdmlkZW9cbiAqIEBwcml2YXRlXG4gKi9cblJlc291cmNlLnByb3RvdHlwZS5fY3JlYXRlU291cmNlID0gZnVuY3Rpb24gKHR5cGUsIHVybCwgbWltZSkge1xuICAgIGlmICghbWltZSkge1xuICAgICAgICBtaW1lID0gdHlwZSArICcvJyArIHVybC5zdWJzdHIodXJsLmxhc3RJbmRleE9mKCcuJykgKyAxKTtcbiAgICB9XG5cbiAgICB2YXIgc291cmNlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc291cmNlJyk7XG5cbiAgICBzb3VyY2Uuc3JjID0gdXJsO1xuICAgIHNvdXJjZS50eXBlID0gbWltZTtcblxuICAgIHJldHVybiBzb3VyY2U7XG59O1xuXG4vKipcbiAqIENhbGxlZCBpZiBhIGxvYWQgZXJyb3JzIG91dC5cbiAqXG4gKiBAcGFyYW0gZXZlbnQge0V2ZW50fSBUaGUgZXJyb3IgZXZlbnQgZnJvbSB0aGUgZWxlbWVudCB0aGF0IGVtaXRzIGl0LlxuICogQHByaXZhdGVcbiAqL1xuUmVzb3VyY2UucHJvdG90eXBlLl9vbkVycm9yID0gZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgdGhpcy5lcnJvciA9IG5ldyBFcnJvcignRmFpbGVkIHRvIGxvYWQgZWxlbWVudCB1c2luZyAnICsgZXZlbnQudGFyZ2V0Lm5vZGVOYW1lKTtcbiAgICB0aGlzLmNvbXBsZXRlKCk7XG59O1xuXG4vKipcbiAqIENhbGxlZCBpZiBhIGxvYWQgcHJvZ3Jlc3MgZXZlbnQgZmlyZXMgZm9yIHhoci94ZHIuXG4gKlxuICogQGZpcmVzIHByb2dyZXNzXG4gKiBAcGFyYW0gZXZlbnQge1hNTEh0dHBSZXF1ZXN0UHJvZ3Jlc3NFdmVudHxFdmVudH1cbiAqIEBwcml2YXRlXG4gKi9cblJlc291cmNlLnByb3RvdHlwZS5fb25Qcm9ncmVzcyA9ICBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICBpZiAoZXZlbnQgJiYgZXZlbnQubGVuZ3RoQ29tcHV0YWJsZSkge1xuICAgICAgICB0aGlzLmVtaXQoJ3Byb2dyZXNzJywgdGhpcywgZXZlbnQubG9hZGVkIC8gZXZlbnQudG90YWwpO1xuICAgIH1cbn07XG5cbi8qKlxuICogQ2FsbGVkIGlmIGFuIGVycm9yIGV2ZW50IGZpcmVzIGZvciB4aHIveGRyLlxuICpcbiAqIEBwYXJhbSBldmVudCB7WE1MSHR0cFJlcXVlc3RFcnJvckV2ZW50fEV2ZW50fVxuICogQHByaXZhdGVcbiAqL1xuUmVzb3VyY2UucHJvdG90eXBlLl94aHJPbkVycm9yID0gZnVuY3Rpb24gKCkge1xuICAgIHRoaXMuZXJyb3IgPSBuZXcgRXJyb3IoXG4gICAgICAgIHJlcVR5cGUodGhpcy54aHIpICsgJyBSZXF1ZXN0IGZhaWxlZC4gJyArXG4gICAgICAgICdTdGF0dXM6ICcgKyB0aGlzLnhoci5zdGF0dXMgKyAnLCB0ZXh0OiBcIicgKyB0aGlzLnhoci5zdGF0dXNUZXh0ICsgJ1wiJ1xuICAgICk7XG5cbiAgICB0aGlzLmNvbXBsZXRlKCk7XG59O1xuXG4vKipcbiAqIENhbGxlZCBpZiBhbiBhYm9ydCBldmVudCBmaXJlcyBmb3IgeGhyLlxuICpcbiAqIEBwYXJhbSBldmVudCB7WE1MSHR0cFJlcXVlc3RBYm9ydEV2ZW50fVxuICogQHByaXZhdGVcbiAqL1xuUmVzb3VyY2UucHJvdG90eXBlLl94aHJPbkFib3J0ID0gZnVuY3Rpb24gKCkge1xuICAgIHRoaXMuZXJyb3IgPSBuZXcgRXJyb3IocmVxVHlwZSh0aGlzLnhocikgKyAnIFJlcXVlc3Qgd2FzIGFib3J0ZWQgYnkgdGhlIHVzZXIuJyk7XG4gICAgdGhpcy5jb21wbGV0ZSgpO1xufTtcblxuLyoqXG4gKiBDYWxsZWQgaWYgYSB0aW1lb3V0IGV2ZW50IGZpcmVzIGZvciB4ZHIuXG4gKlxuICogQHBhcmFtIGV2ZW50IHtFdmVudH1cbiAqIEBwcml2YXRlXG4gKi9cblJlc291cmNlLnByb3RvdHlwZS5feGRyT25UaW1lb3V0ID0gZnVuY3Rpb24gKCkge1xuICAgIHRoaXMuZXJyb3IgPSBuZXcgRXJyb3IocmVxVHlwZSh0aGlzLnhocikgKyAnIFJlcXVlc3QgdGltZWQgb3V0LicpO1xuICAgIHRoaXMuY29tcGxldGUoKTtcbn07XG5cbi8qKlxuICogQ2FsbGVkIHdoZW4gZGF0YSBzdWNjZXNzZnVsbHkgbG9hZHMgZnJvbSBhbiB4aHIveGRyIHJlcXVlc3QuXG4gKlxuICogQHBhcmFtIGV2ZW50IHtYTUxIdHRwUmVxdWVzdExvYWRFdmVudHxFdmVudH1cbiAqIEBwcml2YXRlXG4gKi9cblJlc291cmNlLnByb3RvdHlwZS5feGhyT25Mb2FkID0gZnVuY3Rpb24gKCkge1xuICAgIHZhciB4aHIgPSB0aGlzLnhocixcbiAgICAgICAgc3RhdHVzID0geGhyLnN0YXR1cyAhPT0gdW5kZWZpbmVkID8geGhyLnN0YXR1cyA6IDIwMDsgLy9YRFIgaGFzIG5vIGAuc3RhdHVzYCwgYXNzdW1lIDIwMC5cblxuICAgIC8vIHN0YXR1cyBjYW4gYmUgMCB3aGVuIHVzaW5nIHRoZSBmaWxlOi8vIHByb3RvY29sLCBhbHNvIGNoZWNrIGlmIGEgcmVzcG9uc2Ugd2FzIGZvdW5kXG4gICAgaWYgKHN0YXR1cyA9PT0gMjAwIHx8IHN0YXR1cyA9PT0gMjA0IHx8IChzdGF0dXMgPT09IDAgJiYgeGhyLnJlc3BvbnNlVGV4dC5sZW5ndGggPiAwKSkge1xuICAgICAgICAvLyBpZiB0ZXh0LCBqdXN0IHJldHVybiBpdFxuICAgICAgICBpZiAodGhpcy54aHJUeXBlID09PSBSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRS5URVhUKSB7XG4gICAgICAgICAgICB0aGlzLmRhdGEgPSB4aHIucmVzcG9uc2VUZXh0O1xuICAgICAgICB9XG4gICAgICAgIC8vIGlmIGpzb24sIHBhcnNlIGludG8ganNvbiBvYmplY3RcbiAgICAgICAgZWxzZSBpZiAodGhpcy54aHJUeXBlID09PSBSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRS5KU09OKSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIHRoaXMuZGF0YSA9IEpTT04ucGFyc2UoeGhyLnJlc3BvbnNlVGV4dCk7XG4gICAgICAgICAgICAgICAgdGhpcy5pc0pzb24gPSB0cnVlO1xuICAgICAgICAgICAgfSBjYXRjaChlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5lcnJvciA9IG5ldyBFcnJvcignRXJyb3IgdHJ5aW5nIHRvIHBhcnNlIGxvYWRlZCBqc29uOicsIGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIGlmIHhtbCwgcGFyc2UgaW50byBhbiB4bWwgZG9jdW1lbnQgb3IgZGl2IGVsZW1lbnRcbiAgICAgICAgZWxzZSBpZiAodGhpcy54aHJUeXBlID09PSBSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRS5ET0NVTUVOVCkge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBpZiAod2luZG93LkRPTVBhcnNlcikge1xuICAgICAgICAgICAgICAgICAgICB2YXIgZG9tcGFyc2VyID0gbmV3IERPTVBhcnNlcigpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmRhdGEgPSBkb21wYXJzZXIucGFyc2VGcm9tU3RyaW5nKHhoci5yZXNwb25zZVRleHQsICd0ZXh0L3htbCcpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICAgICAgICAgICAgICBkaXYuaW5uZXJIVE1MID0geGhyLnJlc3BvbnNlVGV4dDtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kYXRhID0gZGl2O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzLmlzWG1sID0gdHJ1ZTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmVycm9yID0gbmV3IEVycm9yKCdFcnJvciB0cnlpbmcgdG8gcGFyc2UgbG9hZGVkIHhtbDonLCBlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvLyBvdGhlciB0eXBlcyBqdXN0IHJldHVybiB0aGUgcmVzcG9uc2VcbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmRhdGEgPSB4aHIucmVzcG9uc2UgfHwgeGhyLnJlc3BvbnNlVGV4dDtcbiAgICAgICAgfVxuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgdGhpcy5lcnJvciA9IG5ldyBFcnJvcignWycgKyB4aHIuc3RhdHVzICsgJ10nICsgeGhyLnN0YXR1c1RleHQgKyAnOicgKyB4aHIucmVzcG9uc2VVUkwpO1xuICAgIH1cblxuICAgIHRoaXMuY29tcGxldGUoKTtcbn07XG5cbmZ1bmN0aW9uIHJlcVR5cGUoeGhyKSB7XG4gICAgcmV0dXJuIHhoci50b1N0cmluZygpLnJlcGxhY2UoJ29iamVjdCAnLCAnJyk7XG59XG5cbi8qKlxuICogU2V0cyB0aGUgYGNyb3NzT3JpZ2luYCBwcm9wZXJ0eSBmb3IgdGhpcyByZXNvdXJjZSBiYXNlZCBvbiBpZiB0aGUgdXJsXG4gKiBmb3IgdGhpcyByZXNvdXJjZSBpcyBjcm9zcy1vcmlnaW4uIElmIGNyb3NzT3JpZ2luIHdhcyBtYW51YWxseSBzZXQsIHRoaXNcbiAqIGZ1bmN0aW9uIGRvZXMgbm90aGluZy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHVybCB7c3RyaW5nfSBUaGUgdXJsIHRvIHRlc3QuXG4gKiBAcGFyYW0gW2xvY2F0aW9uPXdpbmRvdy5sb2NhdGlvbl0ge29iamVjdH0gVGhlIGxvY2F0aW9uIG9iamVjdCB0byB0ZXN0IGFnYWluc3QuXG4gKiBAcmV0dXJuIHtzdHJpbmd9IFRoZSBjcm9zc09yaWdpbiB2YWx1ZSB0byB1c2UgKG9yIGVtcHR5IHN0cmluZyBmb3Igbm9uZSkuXG4gKi9cblJlc291cmNlLnByb3RvdHlwZS5fZGV0ZXJtaW5lQ3Jvc3NPcmlnaW4gPSBmdW5jdGlvbiAodXJsLCBsb2MpIHtcbiAgICAvLyBkYXRhOiBhbmQgamF2YXNjcmlwdDogdXJscyBhcmUgY29uc2lkZXJlZCBzYW1lLW9yaWdpblxuICAgIGlmICh1cmwuaW5kZXhPZignZGF0YTonKSA9PT0gMCkge1xuICAgICAgICByZXR1cm4gJyc7XG4gICAgfVxuXG4gICAgLy8gZGVmYXVsdCBpcyB3aW5kb3cubG9jYXRpb25cbiAgICBsb2MgPSBsb2MgfHwgd2luZG93LmxvY2F0aW9uO1xuXG4gICAgaWYgKCF0ZW1wQW5jaG9yKSB7XG4gICAgICAgIHRlbXBBbmNob3IgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdhJyk7XG4gICAgfVxuXG4gICAgLy8gbGV0IHRoZSBicm93c2VyIGRldGVybWluZSB0aGUgZnVsbCBocmVmIGZvciB0aGUgdXJsIG9mIHRoaXMgcmVzb3VyY2UgYW5kIHRoZW5cbiAgICAvLyBwYXJzZSB3aXRoIHRoZSBub2RlIHVybCBsaWIsIHdlIGNhbid0IHVzZSB0aGUgcHJvcGVydGllcyBvZiB0aGUgYW5jaG9yIGVsZW1lbnRcbiAgICAvLyBiZWNhdXNlIHRoZXkgZG9uJ3Qgd29yayBpbiBJRTkgOihcbiAgICB0ZW1wQW5jaG9yLmhyZWYgPSB1cmw7XG4gICAgdXJsID0gX3VybC5wYXJzZSh0ZW1wQW5jaG9yLmhyZWYpO1xuXG4gICAgdmFyIHNhbWVQb3J0ID0gKCF1cmwucG9ydCAmJiBsb2MucG9ydCA9PT0gJycpIHx8ICh1cmwucG9ydCA9PT0gbG9jLnBvcnQpO1xuXG4gICAgLy8gaWYgY3Jvc3Mgb3JpZ2luXG4gICAgaWYgKHVybC5ob3N0bmFtZSAhPT0gbG9jLmhvc3RuYW1lIHx8ICFzYW1lUG9ydCB8fCB1cmwucHJvdG9jb2wgIT09IGxvYy5wcm90b2NvbCkge1xuICAgICAgICByZXR1cm4gJ2Fub255bW91cyc7XG4gICAgfVxuXG4gICAgcmV0dXJuICcnO1xufTtcblxuLyoqXG4gKiBEZXRlcm1pbmVzIHRoZSByZXNwb25zZVR5cGUgb2YgYW4gWEhSIHJlcXVlc3QgYmFzZWQgb24gdGhlIGV4dGVuc2lvbiBvZiB0aGVcbiAqIHJlc291cmNlIGJlaW5nIGxvYWRlZC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHJldHVybiB7UmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEV9IFRoZSByZXNwb25zZVR5cGUgdG8gdXNlLlxuICovXG5SZXNvdXJjZS5wcm90b3R5cGUuX2RldGVybWluZVhoclR5cGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIFJlc291cmNlLl94aHJUeXBlTWFwW3RoaXMuX2dldEV4dGVuc2lvbigpXSB8fCBSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRS5URVhUO1xufTtcblxuUmVzb3VyY2UucHJvdG90eXBlLl9kZXRlcm1pbmVMb2FkVHlwZSA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gUmVzb3VyY2UuX2xvYWRUeXBlTWFwW3RoaXMuX2dldEV4dGVuc2lvbigpXSB8fCBSZXNvdXJjZS5MT0FEX1RZUEUuWEhSO1xufTtcblxuUmVzb3VyY2UucHJvdG90eXBlLl9nZXRFeHRlbnNpb24gPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHVybCA9IHRoaXMudXJsLFxuICAgICAgICBleHQ7XG5cbiAgICBpZiAodGhpcy5pc0RhdGFVcmwpIHtcbiAgICAgICAgdmFyIHNsYXNoSW5kZXggPSB1cmwuaW5kZXhPZignLycpO1xuICAgICAgICBleHQgPSB1cmwuc3Vic3RyaW5nKHNsYXNoSW5kZXggKyAxLCB1cmwuaW5kZXhPZignOycsIHNsYXNoSW5kZXgpKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHZhciBxdWVyeVN0YXJ0ID0gdXJsLmluZGV4T2YoJz8nKTtcbiAgICAgICAgaWYgKHF1ZXJ5U3RhcnQgIT09IC0xKSB7XG4gICAgICAgICAgICB1cmwgPSB1cmwuc3Vic3RyaW5nKDAsIHF1ZXJ5U3RhcnQpO1xuICAgICAgICB9XG5cbiAgICAgICAgZXh0ID0gdXJsLnN1YnN0cmluZyh1cmwubGFzdEluZGV4T2YoJy4nKSArIDEpO1xuICAgIH1cblxuICAgIHJldHVybiBleHQ7XG59O1xuXG4vKipcbiAqIERldGVybWluZXMgdGhlIG1pbWUgdHlwZSBvZiBhbiBYSFIgcmVxdWVzdCBiYXNlZCBvbiB0aGUgcmVzcG9uc2VUeXBlIG9mXG4gKiByZXNvdXJjZSBiZWluZyBsb2FkZWQuXG4gKlxuICogQHByaXZhdGVcbiAqIEByZXR1cm4ge3N0cmluZ30gVGhlIG1pbWUgdHlwZSB0byB1c2UuXG4gKi9cblJlc291cmNlLnByb3RvdHlwZS5fZ2V0TWltZUZyb21YaHJUeXBlID0gZnVuY3Rpb24gKHR5cGUpIHtcbiAgICBzd2l0Y2godHlwZSkge1xuICAgICAgICBjYXNlIFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkJVRkZFUjpcbiAgICAgICAgICAgIHJldHVybiAnYXBwbGljYXRpb24vb2N0ZXQtYmluYXJ5JztcblxuICAgICAgICBjYXNlIFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkJMT0I6XG4gICAgICAgICAgICByZXR1cm4gJ2FwcGxpY2F0aW9uL2Jsb2InO1xuXG4gICAgICAgIGNhc2UgUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuRE9DVU1FTlQ6XG4gICAgICAgICAgICByZXR1cm4gJ2FwcGxpY2F0aW9uL3htbCc7XG5cbiAgICAgICAgY2FzZSBSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRS5KU09OOlxuICAgICAgICAgICAgcmV0dXJuICdhcHBsaWNhdGlvbi9qc29uJztcblxuICAgICAgICBjYXNlIFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkRFRkFVTFQ6XG4gICAgICAgIGNhc2UgUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuVEVYVDpcbiAgICAgICAgICAgIC8qIGZhbGxzIHRocm91Z2ggKi9cbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIHJldHVybiAndGV4dC9wbGFpbic7XG5cbiAgICB9XG59O1xuXG4vKipcbiAqIFRoZSB0eXBlcyBvZiBsb2FkaW5nIGEgcmVzb3VyY2UgY2FuIHVzZS5cbiAqXG4gKiBAc3RhdGljXG4gKiBAY29uc3RhbnRcbiAqIEBwcm9wZXJ0eSB7b2JqZWN0fSBMT0FEX1RZUEVcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBMT0FEX1RZUEUuWEhSIC0gVXNlcyBYTUxIdHRwUmVxdWVzdCB0byBsb2FkIHRoZSByZXNvdXJjZS5cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBMT0FEX1RZUEUuSU1BR0UgLSBVc2VzIGFuIGBJbWFnZWAgb2JqZWN0IHRvIGxvYWQgdGhlIHJlc291cmNlLlxuICogQHByb3BlcnR5IHtudW1iZXJ9IExPQURfVFlQRS5BVURJTyAtIFVzZXMgYW4gYEF1ZGlvYCBvYmplY3QgdG8gbG9hZCB0aGUgcmVzb3VyY2UuXG4gKiBAcHJvcGVydHkge251bWJlcn0gTE9BRF9UWVBFLlZJREVPIC0gVXNlcyBhIGBWaWRlb2Agb2JqZWN0IHRvIGxvYWQgdGhlIHJlc291cmNlLlxuICovXG5SZXNvdXJjZS5MT0FEX1RZUEUgPSB7XG4gICAgWEhSOiAgICAxLFxuICAgIElNQUdFOiAgMixcbiAgICBBVURJTzogIDMsXG4gICAgVklERU86ICA0XG59O1xuXG4vKipcbiAqIFRoZSBYSFIgcmVhZHkgc3RhdGVzLCB1c2VkIGludGVybmFsbHkuXG4gKlxuICogQHN0YXRpY1xuICogQGNvbnN0YW50XG4gKiBAcHJvcGVydHkge29iamVjdH0gWEhSX1JFQURZX1NUQVRFXG4gKiBAcHJvcGVydHkge251bWJlcn0gWEhSX1JFQURZX1NUQVRFLlVOU0VOVCAtIG9wZW4oKWhhcyBub3QgYmVlbiBjYWxsZWQgeWV0LlxuICogQHByb3BlcnR5IHtudW1iZXJ9IFhIUl9SRUFEWV9TVEFURS5PUEVORUQgLSBzZW5kKCloYXMgbm90IGJlZW4gY2FsbGVkIHlldC5cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBYSFJfUkVBRFlfU1RBVEUuSEVBREVSU19SRUNFSVZFRCAtIHNlbmQoKSBoYXMgYmVlbiBjYWxsZWQsIGFuZCBoZWFkZXJzIGFuZCBzdGF0dXMgYXJlIGF2YWlsYWJsZS5cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBYSFJfUkVBRFlfU1RBVEUuTE9BRElORyAtIERvd25sb2FkaW5nOyByZXNwb25zZVRleHQgaG9sZHMgcGFydGlhbCBkYXRhLlxuICogQHByb3BlcnR5IHtudW1iZXJ9IFhIUl9SRUFEWV9TVEFURS5ET05FIC0gVGhlIG9wZXJhdGlvbiBpcyBjb21wbGV0ZS5cbiAqL1xuUmVzb3VyY2UuWEhSX1JFQURZX1NUQVRFID0ge1xuICAgIFVOU0VOVDogMCxcbiAgICBPUEVORUQ6IDEsXG4gICAgSEVBREVSU19SRUNFSVZFRDogMixcbiAgICBMT0FESU5HOiAzLFxuICAgIERPTkU6IDRcbn07XG5cbi8qKlxuICogVGhlIFhIUiByZWFkeSBzdGF0ZXMsIHVzZWQgaW50ZXJuYWxseS5cbiAqXG4gKiBAc3RhdGljXG4gKiBAY29uc3RhbnRcbiAqIEBwcm9wZXJ0eSB7b2JqZWN0fSBYSFJfUkVTUE9OU0VfVFlQRVxuICogQHByb3BlcnR5IHtzdHJpbmd9IFhIUl9SRVNQT05TRV9UWVBFLkRFRkFVTFQgLSBkZWZhdWx0cyB0byB0ZXh0XG4gKiBAcHJvcGVydHkge3N0cmluZ30gWEhSX1JFU1BPTlNFX1RZUEUuQlVGRkVSIC0gQXJyYXlCdWZmZXJcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBYSFJfUkVTUE9OU0VfVFlQRS5CTE9CIC0gQmxvYlxuICogQHByb3BlcnR5IHtzdHJpbmd9IFhIUl9SRVNQT05TRV9UWVBFLkRPQ1VNRU5UIC0gRG9jdW1lbnRcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBYSFJfUkVTUE9OU0VfVFlQRS5KU09OIC0gT2JqZWN0XG4gKiBAcHJvcGVydHkge3N0cmluZ30gWEhSX1JFU1BPTlNFX1RZUEUuVEVYVCAtIFN0cmluZ1xuICovXG5SZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRSA9IHtcbiAgICBERUZBVUxUOiAgICAndGV4dCcsXG4gICAgQlVGRkVSOiAgICAgJ2FycmF5YnVmZmVyJyxcbiAgICBCTE9COiAgICAgICAnYmxvYicsXG4gICAgRE9DVU1FTlQ6ICAgJ2RvY3VtZW50JyxcbiAgICBKU09OOiAgICAgICAnanNvbicsXG4gICAgVEVYVDogICAgICAgJ3RleHQnXG59O1xuXG5SZXNvdXJjZS5fbG9hZFR5cGVNYXAgPSB7XG4gICAgJ2dpZic6ICAgICAgUmVzb3VyY2UuTE9BRF9UWVBFLklNQUdFLFxuICAgICdwbmcnOiAgICAgIFJlc291cmNlLkxPQURfVFlQRS5JTUFHRSxcbiAgICAnYm1wJzogICAgICBSZXNvdXJjZS5MT0FEX1RZUEUuSU1BR0UsXG4gICAgJ2pwZyc6ICAgICAgUmVzb3VyY2UuTE9BRF9UWVBFLklNQUdFLFxuICAgICdqcGVnJzogICAgIFJlc291cmNlLkxPQURfVFlQRS5JTUFHRSxcbiAgICAndGlmJzogICAgICBSZXNvdXJjZS5MT0FEX1RZUEUuSU1BR0UsXG4gICAgJ3RpZmYnOiAgICAgUmVzb3VyY2UuTE9BRF9UWVBFLklNQUdFLFxuICAgICd3ZWJwJzogICAgIFJlc291cmNlLkxPQURfVFlQRS5JTUFHRSxcbiAgICAndGdhJzogICAgICBSZXNvdXJjZS5MT0FEX1RZUEUuSU1BR0Vcbn07XG5cblJlc291cmNlLl94aHJUeXBlTWFwID0ge1xuICAgIC8vIHhtbFxuICAgICd4aHRtbCc6ICAgIFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkRPQ1VNRU5ULFxuICAgICdodG1sJzogICAgIFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkRPQ1VNRU5ULFxuICAgICdodG0nOiAgICAgIFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkRPQ1VNRU5ULFxuICAgICd4bWwnOiAgICAgIFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkRPQ1VNRU5ULFxuICAgICd0bXgnOiAgICAgIFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkRPQ1VNRU5ULFxuICAgICd0c3gnOiAgICAgIFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkRPQ1VNRU5ULFxuICAgICdzdmcnOiAgICAgIFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkRPQ1VNRU5ULFxuXG4gICAgLy8gaW1hZ2VzXG4gICAgJ2dpZic6ICAgICAgUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuQkxPQixcbiAgICAncG5nJzogICAgICBSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRS5CTE9CLFxuICAgICdibXAnOiAgICAgIFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkJMT0IsXG4gICAgJ2pwZyc6ICAgICAgUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuQkxPQixcbiAgICAnanBlZyc6ICAgICBSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRS5CTE9CLFxuICAgICd0aWYnOiAgICAgIFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkJMT0IsXG4gICAgJ3RpZmYnOiAgICAgUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuQkxPQixcbiAgICAnd2VicCc6ICAgICBSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRS5CTE9CLFxuICAgICd0Z2EnOiAgICAgIFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkJMT0IsXG5cbiAgICAvLyBqc29uXG4gICAgJ2pzb24nOiAgICAgUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuSlNPTixcblxuICAgIC8vIHRleHRcbiAgICAndGV4dCc6ICAgICBSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRS5URVhULFxuICAgICd0eHQnOiAgICAgIFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLlRFWFRcbn07XG5cbi8qKlxuICogU2V0cyB0aGUgbG9hZCB0eXBlIHRvIGJlIHVzZWQgZm9yIGEgc3BlY2lmaWMgZXh0ZW5zaW9uLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBwYXJhbSBleHRuYW1lIHtzdHJpbmd9IFRoZSBleHRlbnNpb24gdG8gc2V0IHRoZSB0eXBlIGZvciwgZS5nLiBcInBuZ1wiIG9yIFwiZm50XCJcbiAqIEBwYXJhbSBsb2FkVHlwZSB7UmVzb3VyY2UuTE9BRF9UWVBFfSBUaGUgbG9hZCB0eXBlIHRvIHNldCBpdCB0by5cbiAqL1xuUmVzb3VyY2Uuc2V0RXh0ZW5zaW9uTG9hZFR5cGUgPSBmdW5jdGlvbiAoZXh0bmFtZSwgbG9hZFR5cGUpIHtcbiAgICBzZXRFeHRNYXAoUmVzb3VyY2UuX2xvYWRUeXBlTWFwLCBleHRuYW1lLCBsb2FkVHlwZSk7XG59O1xuXG4vKipcbiAqIFNldHMgdGhlIGxvYWQgdHlwZSB0byBiZSB1c2VkIGZvciBhIHNwZWNpZmljIGV4dGVuc2lvbi5cbiAqXG4gKiBAc3RhdGljXG4gKiBAcGFyYW0gZXh0bmFtZSB7c3RyaW5nfSBUaGUgZXh0ZW5zaW9uIHRvIHNldCB0aGUgdHlwZSBmb3IsIGUuZy4gXCJwbmdcIiBvciBcImZudFwiXG4gKiBAcGFyYW0geGhyVHlwZSB7UmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEV9IFRoZSB4aHIgdHlwZSB0byBzZXQgaXQgdG8uXG4gKi9cblJlc291cmNlLnNldEV4dGVuc2lvblhoclR5cGUgPSBmdW5jdGlvbiAoZXh0bmFtZSwgeGhyVHlwZSkge1xuICAgIHNldEV4dE1hcChSZXNvdXJjZS5feGhyVHlwZU1hcCwgZXh0bmFtZSwgeGhyVHlwZSk7XG59O1xuXG5mdW5jdGlvbiBzZXRFeHRNYXAobWFwLCBleHRuYW1lLCB2YWwpIHtcbiAgICBpZiAoZXh0bmFtZSAmJiBleHRuYW1lLmluZGV4T2YoJy4nKSA9PT0gMCkge1xuICAgICAgICBleHRuYW1lID0gZXh0bmFtZS5zdWJzdHJpbmcoMSk7XG4gICAgfVxuXG4gICAgaWYgKCFleHRuYW1lKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBtYXBbZXh0bmFtZV0gPSB2YWw7XG59XG4iLCJtb2R1bGUuZXhwb3J0cyA9IHtcblxuICAgIC8vIHByaXZhdGUgcHJvcGVydHlcbiAgICBfa2V5U3RyOiBcIkFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5Ky89XCIsXG5cbiAgICBlbmNvZGVCaW5hcnk6IGZ1bmN0aW9uIChpbnB1dCkge1xuICAgICAgICB2YXIgb3V0cHV0ID0gXCJcIjtcbiAgICAgICAgdmFyIGJ5dGVidWZmZXI7XG4gICAgICAgIHZhciBlbmNvZGVkQ2hhckluZGV4ZXMgPSBuZXcgQXJyYXkoNCk7XG4gICAgICAgIHZhciBpbnggPSAwO1xuICAgICAgICB2YXIgam54ID0gMDtcbiAgICAgICAgdmFyIHBhZGRpbmdCeXRlcyA9IDA7XG5cbiAgICAgICAgd2hpbGUgKGlueCA8IGlucHV0Lmxlbmd0aCkge1xuICAgICAgICAgICAgLy8gRmlsbCBieXRlIGJ1ZmZlciBhcnJheVxuICAgICAgICAgICAgYnl0ZWJ1ZmZlciA9IG5ldyBBcnJheSgzKTtcbiAgICAgICAgICAgIGZvciAoam54ID0gMDsgam54IDwgYnl0ZWJ1ZmZlci5sZW5ndGg7IGpueCsrKSB7XG4gICAgICAgICAgICAgICAgaWYgKGlueCA8IGlucHV0Lmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICAvLyB0aHJvdyBhd2F5IGhpZ2gtb3JkZXIgYnl0ZSwgYXMgZG9jdW1lbnRlZCBhdDpcbiAgICAgICAgICAgICAgICAgICAgLy8gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvRW4vVXNpbmdfWE1MSHR0cFJlcXVlc3QjSGFuZGxpbmdfYmluYXJ5X2RhdGFcbiAgICAgICAgICAgICAgICAgICAgYnl0ZWJ1ZmZlcltqbnhdID0gaW5wdXQuY2hhckNvZGVBdChpbngrKykgJiAweGZmO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgYnl0ZWJ1ZmZlcltqbnhdID0gMDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIEdldCBlYWNoIGVuY29kZWQgY2hhcmFjdGVyLCA2IGJpdHMgYXQgYSB0aW1lXG4gICAgICAgICAgICAvLyBpbmRleCAxOiBmaXJzdCA2IGJpdHNcbiAgICAgICAgICAgIGVuY29kZWRDaGFySW5kZXhlc1swXSA9IGJ5dGVidWZmZXJbMF0gPj4gMjtcbiAgICAgICAgICAgIC8vIGluZGV4IDI6IHNlY29uZCA2IGJpdHMgKDIgbGVhc3Qgc2lnbmlmaWNhbnQgYml0cyBmcm9tIGlucHV0IGJ5dGUgMSArIDQgbW9zdCBzaWduaWZpY2FudCBiaXRzIGZyb20gYnl0ZSAyKVxuICAgICAgICAgICAgZW5jb2RlZENoYXJJbmRleGVzWzFdID0gKChieXRlYnVmZmVyWzBdICYgMHgzKSA8PCA0KSB8IChieXRlYnVmZmVyWzFdID4+IDQpO1xuICAgICAgICAgICAgLy8gaW5kZXggMzogdGhpcmQgNiBiaXRzICg0IGxlYXN0IHNpZ25pZmljYW50IGJpdHMgZnJvbSBpbnB1dCBieXRlIDIgKyAyIG1vc3Qgc2lnbmlmaWNhbnQgYml0cyBmcm9tIGJ5dGUgMylcbiAgICAgICAgICAgIGVuY29kZWRDaGFySW5kZXhlc1syXSA9ICgoYnl0ZWJ1ZmZlclsxXSAmIDB4MGYpIDw8IDIpIHwgKGJ5dGVidWZmZXJbMl0gPj4gNik7XG4gICAgICAgICAgICAvLyBpbmRleCAzOiBmb3J0aCA2IGJpdHMgKDYgbGVhc3Qgc2lnbmlmaWNhbnQgYml0cyBmcm9tIGlucHV0IGJ5dGUgMylcbiAgICAgICAgICAgIGVuY29kZWRDaGFySW5kZXhlc1szXSA9IGJ5dGVidWZmZXJbMl0gJiAweDNmO1xuXG4gICAgICAgICAgICAvLyBEZXRlcm1pbmUgd2hldGhlciBwYWRkaW5nIGhhcHBlbmVkLCBhbmQgYWRqdXN0IGFjY29yZGluZ2x5XG4gICAgICAgICAgICBwYWRkaW5nQnl0ZXMgPSBpbnggLSAoaW5wdXQubGVuZ3RoIC0gMSk7XG4gICAgICAgICAgICBzd2l0Y2ggKHBhZGRpbmdCeXRlcykge1xuICAgICAgICAgICAgICAgIGNhc2UgMjpcbiAgICAgICAgICAgICAgICAgICAgLy8gU2V0IGxhc3QgMiBjaGFyYWN0ZXJzIHRvIHBhZGRpbmcgY2hhclxuICAgICAgICAgICAgICAgICAgICBlbmNvZGVkQ2hhckluZGV4ZXNbM10gPSA2NDtcbiAgICAgICAgICAgICAgICAgICAgZW5jb2RlZENoYXJJbmRleGVzWzJdID0gNjQ7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgY2FzZSAxOlxuICAgICAgICAgICAgICAgICAgICAvLyBTZXQgbGFzdCBjaGFyYWN0ZXIgdG8gcGFkZGluZyBjaGFyXG4gICAgICAgICAgICAgICAgICAgIGVuY29kZWRDaGFySW5kZXhlc1szXSA9IDY0O1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrOyAvLyBObyBwYWRkaW5nIC0gcHJvY2VlZFxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBOb3cgd2Ugd2lsbCBncmFiIGVhY2ggYXBwcm9wcmlhdGUgY2hhcmFjdGVyIG91dCBvZiBvdXIga2V5c3RyaW5nXG4gICAgICAgICAgICAvLyBiYXNlZCBvbiBvdXIgaW5kZXggYXJyYXkgYW5kIGFwcGVuZCBpdCB0byB0aGUgb3V0cHV0IHN0cmluZ1xuICAgICAgICAgICAgZm9yIChqbnggPSAwOyBqbnggPCBlbmNvZGVkQ2hhckluZGV4ZXMubGVuZ3RoOyBqbngrKykge1xuICAgICAgICAgICAgICAgIG91dHB1dCArPSB0aGlzLl9rZXlTdHIuY2hhckF0KGVuY29kZWRDaGFySW5kZXhlc1tqbnhdKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gb3V0cHV0O1xuICAgIH1cbn07XG4iLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vTG9hZGVyJyk7XG5cbm1vZHVsZS5leHBvcnRzLlJlc291cmNlID0gcmVxdWlyZSgnLi9SZXNvdXJjZScpO1xuXG5tb2R1bGUuZXhwb3J0cy5taWRkbGV3YXJlID0ge1xuICAgIGNhY2hpbmc6IHtcbiAgICAgICAgbWVtb3J5OiByZXF1aXJlKCcuL21pZGRsZXdhcmVzL2NhY2hpbmcvbWVtb3J5JylcbiAgICB9LFxuICAgIHBhcnNpbmc6IHtcbiAgICAgICAgYmxvYjogcmVxdWlyZSgnLi9taWRkbGV3YXJlcy9wYXJzaW5nL2Jsb2InKVxuICAgIH1cbn07XG4iLCIvLyBhIHNpbXBsZSBpbi1tZW1vcnkgY2FjaGUgZm9yIHJlc291cmNlc1xudmFyIGNhY2hlID0ge307XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBmdW5jdGlvbiAocmVzb3VyY2UsIG5leHQpIHtcbiAgICAgICAgLy8gaWYgY2FjaGVkLCB0aGVuIHNldCBkYXRhIGFuZCBjb21wbGV0ZSB0aGUgcmVzb3VyY2VcbiAgICAgICAgaWYgKGNhY2hlW3Jlc291cmNlLnVybF0pIHtcbiAgICAgICAgICAgIHJlc291cmNlLmRhdGEgPSBjYWNoZVtyZXNvdXJjZS51cmxdO1xuICAgICAgICAgICAgcmVzb3VyY2UuY29tcGxldGUoKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBpZiBub3QgY2FjaGVkLCB3YWl0IGZvciBjb21wbGV0ZSBhbmQgc3RvcmUgaXQgaW4gdGhlIGNhY2hlLlxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJlc291cmNlLm9uY2UoJ2NvbXBsZXRlJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgY2FjaGVbdGhpcy51cmxdID0gdGhpcy5kYXRhO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgXG4gICAgICAgIG5leHQoKTtcbiAgICB9O1xufTtcbiIsInZhciBSZXNvdXJjZSA9IHJlcXVpcmUoJy4uLy4uL1Jlc291cmNlJyksXG4gICAgYjY0ID0gcmVxdWlyZSgnLi4vLi4vYjY0Jyk7XG5cbndpbmRvdy5VUkwgPSB3aW5kb3cuVVJMIHx8IHdpbmRvdy53ZWJraXRVUkw7XG5cbi8vIGEgbWlkZGxld2FyZSBmb3IgdHJhbnNmb3JtaW5nIFhIUiBsb2FkZWQgQmxvYnMgaW50byBtb3JlIHVzZWZ1bCBvYmplY3RzXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBmdW5jdGlvbiAocmVzb3VyY2UsIG5leHQpIHtcbiAgICAgICAgaWYgKCFyZXNvdXJjZS5kYXRhKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV4dCgpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gaWYgdGhpcyB3YXMgYW4gWEhSIGxvYWQgb2YgYSBibG9iXG4gICAgICAgIGlmIChyZXNvdXJjZS54aHIgJiYgcmVzb3VyY2UueGhyVHlwZSA9PT0gUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuQkxPQikge1xuICAgICAgICAgICAgLy8gaWYgdGhlcmUgaXMgbm8gYmxvYiBzdXBwb3J0IHdlIHByb2JhYmx5IGdvdCBhIGJpbmFyeSBzdHJpbmcgYmFja1xuICAgICAgICAgICAgaWYgKCF3aW5kb3cuQmxvYiB8fCB0eXBlb2YgcmVzb3VyY2UuZGF0YSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgICAgICB2YXIgdHlwZSA9IHJlc291cmNlLnhoci5nZXRSZXNwb25zZUhlYWRlcignY29udGVudC10eXBlJyk7XG5cbiAgICAgICAgICAgICAgICAvLyB0aGlzIGlzIGFuIGltYWdlLCBjb252ZXJ0IHRoZSBiaW5hcnkgc3RyaW5nIGludG8gYSBkYXRhIHVybFxuICAgICAgICAgICAgICAgIGlmICh0eXBlICYmIHR5cGUuaW5kZXhPZignaW1hZ2UnKSA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICByZXNvdXJjZS5kYXRhID0gbmV3IEltYWdlKCk7XG4gICAgICAgICAgICAgICAgICAgIHJlc291cmNlLmRhdGEuc3JjID0gJ2RhdGE6JyArIHR5cGUgKyAnO2Jhc2U2NCwnICsgYjY0LmVuY29kZUJpbmFyeShyZXNvdXJjZS54aHIucmVzcG9uc2VUZXh0KTtcblxuICAgICAgICAgICAgICAgICAgICByZXNvdXJjZS5pc0ltYWdlID0gdHJ1ZTtcblxuICAgICAgICAgICAgICAgICAgICAvLyB3YWl0IHVudGlsIHRoZSBpbWFnZSBsb2FkcyBhbmQgdGhlbiBjYWxsYmFja1xuICAgICAgICAgICAgICAgICAgICByZXNvdXJjZS5kYXRhLm9ubG9hZCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc291cmNlLmRhdGEub25sb2FkID0gbnVsbDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgbmV4dCgpO1xuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIGlmIGNvbnRlbnQgdHlwZSBzYXlzIHRoaXMgaXMgYW4gaW1hZ2UsIHRoZW4gd2Ugc2hvdWxkIHRyYW5zZm9ybSB0aGUgYmxvYiBpbnRvIGFuIEltYWdlIG9iamVjdFxuICAgICAgICAgICAgZWxzZSBpZiAocmVzb3VyY2UuZGF0YS50eXBlLmluZGV4T2YoJ2ltYWdlJykgPT09IDApIHtcbiAgICAgICAgICAgICAgICB2YXIgc3JjID0gVVJMLmNyZWF0ZU9iamVjdFVSTChyZXNvdXJjZS5kYXRhKTtcblxuICAgICAgICAgICAgICAgIHJlc291cmNlLmJsb2IgPSByZXNvdXJjZS5kYXRhO1xuICAgICAgICAgICAgICAgIHJlc291cmNlLmRhdGEgPSBuZXcgSW1hZ2UoKTtcbiAgICAgICAgICAgICAgICByZXNvdXJjZS5kYXRhLnNyYyA9IHNyYztcblxuICAgICAgICAgICAgICAgIHJlc291cmNlLmlzSW1hZ2UgPSB0cnVlO1xuXG4gICAgICAgICAgICAgICAgLy8gY2xlYW51cCB0aGUgbm8gbG9uZ2VyIHVzZWQgYmxvYiBhZnRlciB0aGUgaW1hZ2UgbG9hZHNcbiAgICAgICAgICAgICAgICByZXNvdXJjZS5kYXRhLm9ubG9hZCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgVVJMLnJldm9rZU9iamVjdFVSTChzcmMpO1xuICAgICAgICAgICAgICAgICAgICByZXNvdXJjZS5kYXRhLm9ubG9hZCA9IG51bGw7XG5cbiAgICAgICAgICAgICAgICAgICAgbmV4dCgpO1xuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBuZXh0KCk7XG4gICAgICAgIH1cbiAgICB9O1xufTtcbiIsIm1vZHVsZS5leHBvcnRzPXtcbiAgXCJuYW1lXCI6IFwicGl4aS5qc1wiLFxuICBcInZlcnNpb25cIjogXCIzLjAuMTAtZGV2XCIsXG4gIFwiZGVzY3JpcHRpb25cIjogXCJQaXhpLmpzIGlzIGEgZmFzdCBsaWdodHdlaWdodCAyRCBsaWJyYXJ5IHRoYXQgd29ya3MgYWNyb3NzIGFsbCBkZXZpY2VzLlwiLFxuICBcImF1dGhvclwiOiBcIk1hdCBHcm92ZXNcIixcbiAgXCJjb250cmlidXRvcnNcIjogW1xuICAgIFwiQ2hhZCBFbmdsZXIgPGNoYWRAcGFudGhlcmRldi5jb20+XCIsXG4gICAgXCJSaWNoYXJkIERhdmV5IDxyZGF2ZXlAZ21haWwuY29tPlwiXG4gIF0sXG4gIFwibWFpblwiOiBcIi4vc3JjL2luZGV4LmpzXCIsXG4gIFwiaG9tZXBhZ2VcIjogXCJodHRwOi8vZ29vZGJveWRpZ2l0YWwuY29tL1wiLFxuICBcImJ1Z3NcIjogXCJodHRwczovL2dpdGh1Yi5jb20vcGl4aWpzL3BpeGkuanMvaXNzdWVzXCIsXG4gIFwibGljZW5zZVwiOiBcIk1JVFwiLFxuICBcInJlcG9zaXRvcnlcIjoge1xuICAgIFwidHlwZVwiOiBcImdpdFwiLFxuICAgIFwidXJsXCI6IFwiaHR0cHM6Ly9naXRodWIuY29tL3BpeGlqcy9waXhpLmpzLmdpdFwiXG4gIH0sXG4gIFwic2NyaXB0c1wiOiB7XG4gICAgXCJzdGFydFwiOiBcImd1bHAgJiYgZ3VscCB3YXRjaFwiLFxuICAgIFwidGVzdFwiOiBcImd1bHAgJiYgdGVzdGVtIGNpXCIsXG4gICAgXCJidWlsZFwiOiBcImd1bHBcIixcbiAgICBcImRvY3NcIjogXCJqc2RvYyAtYyAuL2d1bHAvdXRpbC9qc2RvYy5jb25mLmpzb24gLVIgUkVBRE1FLm1kXCJcbiAgfSxcbiAgXCJmaWxlc1wiOiBbXG4gICAgXCJiaW4vXCIsXG4gICAgXCJzcmMvXCIsXG4gICAgXCJDT05UUklCVVRJTkcubWRcIixcbiAgICBcIkxJQ0VOU0VcIixcbiAgICBcInBhY2thZ2UuanNvblwiLFxuICAgIFwiUkVBRE1FLm1kXCJcbiAgXSxcbiAgXCJkZXBlbmRlbmNpZXNcIjoge1xuICAgIFwiYXN5bmNcIjogXCJeMS41LjBcIixcbiAgICBcImJyZnNcIjogXCJeMS40LjFcIixcbiAgICBcImVhcmN1dFwiOiBcIl4yLjAuN1wiLFxuICAgIFwiZXZlbnRlbWl0dGVyM1wiOiBcIl4xLjEuMVwiLFxuICAgIFwib2JqZWN0LWFzc2lnblwiOiBcIl40LjAuMVwiLFxuICAgIFwicGl4aS1nbC1jb3JlXCI6IFwiZ2l0K2h0dHBzOi8vZ2l0aHViLmNvbS9Hb29kQm95RGlnaXRhbC9waXhpLWdsLWNvcmUuZ2l0XCIsXG4gICAgXCJyZXNvdXJjZS1sb2FkZXJcIjogXCJeMS42LjRcIlxuICB9LFxuICBcImRldkRlcGVuZGVuY2llc1wiOiB7XG4gICAgXCJicm93c2VyaWZ5XCI6IFwiXjExLjEuMFwiLFxuICAgIFwiY2hhaVwiOiBcIl4zLjIuMFwiLFxuICAgIFwiZGVsXCI6IFwiXjIuMC4yXCIsXG4gICAgXCJndWxwXCI6IFwiXjMuOS4wXCIsXG4gICAgXCJndWxwLWNhY2hlZFwiOiBcIl4xLjEuMFwiLFxuICAgIFwiZ3VscC1jb25jYXRcIjogXCJeMi42LjBcIixcbiAgICBcImd1bHAtZGVidWdcIjogXCJeMi4xLjBcIixcbiAgICBcImd1bHAtaGVhZGVyXCI6IFwiXjEuNy4xXCIsXG4gICAgXCJndWxwLWpzaGludFwiOiBcIl4xLjExLjJcIixcbiAgICBcImd1bHAtbWlycm9yXCI6IFwiXjAuNC4wXCIsXG4gICAgXCJndWxwLXBsdW1iZXJcIjogXCJeMS4wLjFcIixcbiAgICBcImd1bHAtcmVuYW1lXCI6IFwiXjEuMi4yXCIsXG4gICAgXCJndWxwLXNvdXJjZW1hcHNcIjogXCJeMS41LjJcIixcbiAgICBcImd1bHAtdWdsaWZ5XCI6IFwiXjEuNC4xXCIsXG4gICAgXCJndWxwLXV0aWxcIjogXCJeMy4wLjZcIixcbiAgICBcImphZ3VhcmpzLWpzZG9jXCI6IFwiZ2l0K2h0dHBzOi8vZ2l0aHViLmNvbS9kYXZpZHNoaW1qcy9qYWd1YXJqcy1qc2RvYy5naXRcIixcbiAgICBcImpzZG9jXCI6IFwiXjMuMy4yXCIsXG4gICAgXCJqc2hpbnQtc3VtbWFyeVwiOiBcIl4wLjQuMFwiLFxuICAgIFwibWluaW1pc3RcIjogXCJeMS4yLjBcIixcbiAgICBcIm1vY2hhXCI6IFwiXjIuMy4yXCIsXG4gICAgXCJyZXF1aXJlLWRpclwiOiBcIl4wLjMuMFwiLFxuICAgIFwicnVuLXNlcXVlbmNlXCI6IFwiXjEuMS4yXCIsXG4gICAgXCJ0ZXN0ZW1cIjogXCJeMC45LjRcIixcbiAgICBcInZpbnlsLWJ1ZmZlclwiOiBcIl4xLjAuMFwiLFxuICAgIFwidmlueWwtc291cmNlLXN0cmVhbVwiOiBcIl4xLjEuMFwiLFxuICAgIFwid2F0Y2hpZnlcIjogXCJeMy40LjBcIlxuICB9LFxuICBcImJyb3dzZXJpZnlcIjoge1xuICAgIFwidHJhbnNmb3JtXCI6IFtcbiAgICAgIFwiYnJmc1wiXG4gICAgXVxuICB9XG59XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uL2NvcmUnKTtcblxuLy8gYWRkIHNvbWUgZXh0cmEgdmFyaWFibGVzIHRvIHRoZSBjb250YWluZXIuLlxuT2JqZWN0LmFzc2lnbihcbiAgICBjb3JlLkRpc3BsYXlPYmplY3QucHJvdG90eXBlLFxuICAgIHJlcXVpcmUoJy4vYWNjZXNzaWJsZVRhcmdldCcpXG4pO1xuXG5cbi8qKlxuICogVGhlIEFjY2Vzc2liaWxpdHkgbWFuYWdlciByZWFjcmVhdGVzIHRoZSBhYmlsaXR5IHRvIHRhYiBhbmQgYW5kIGhhdmUgY29udGVudCByZWFkIGJ5IHNjcmVlbiByZWFkZXJzLiBUaGlzIGlzIHZlcnkgaW1wb3J0YW50IGFzIGl0IGNhbiBwb3NzaWJseSBoZWxwIHBlb3BsZSB3aXRoIGRpc2FiaWxpdGllcyBhY2Nlc3MgcGl4aSBjb250ZW50LlxuICogTXVjaCBsaWtlIGludGVyYWN0aW9uIGFueSBEaXNwbGF5T2JqZWN0IGNhbiBiZSBtYWRlIGFjY2Vzc2libGUuIFRoaXMgbWFuYWdlciB3aWxsIG1hcCB0aGUgZXZlbnRzIGFzIGlmIHRoZSBtb3VzZSB3YXMgYmVpbmcgdXNlZCwgbWluaW1pemluZyB0aGUgZWZmZXJvdCByZXF1aXJlZCB0byBpbXBsZW1lbnQuXG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLkNhbnZhc1JlbmRlcmVyfFBJWEkuV2ViR0xSZW5kZXJlcn0gQSByZWZlcmVuY2UgdG8gdGhlIGN1cnJlbnQgcmVuZGVyZXJcbiAqL1xuZnVuY3Rpb24gQWNjZXNzaWJpbGl0eU1hbmFnZXIocmVuZGVyZXIpXG57XG5cdC8vIGZpcnN0IHdlIGNyZWF0ZSBhIGRpdiB0aGF0IHdpbGwgc2l0IG92ZXIgdGhlIHBpeGkgZWxlbWVudC4gVGhpcyBpcyB3aGVyZSB0aGUgZGl2IG92ZXJsYXlzIHdpbGwgZ28uXG4gICAgdmFyIGRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgIFxuICAgIGRpdi5zdHlsZS53aWR0aCA9IDEwMCArICdweCc7XG4gICAgZGl2LnN0eWxlLmhlaWdodCA9IDEwMCArICdweCc7XG4gICAgZGl2LnN0eWxlLnBvc2l0aW9uID0gJ2Fic29sdXRlJztcbiAgICBkaXYuc3R5bGUudG9wID0gMDtcbiAgICBkaXYuc3R5bGUubGVmdCA9IDA7XG4gICAvL1xuICAgIGRpdi5zdHlsZS56SW5kZXggPSAyO1xuICAgXHRcbiAgIFx0LyoqXG4gICBcdCAqIFRoaXMgaXMgdGhlIGRvbSBlbGVtZW50IHRoYXQgd2lsbCBzaXQgb3ZlciB0aGUgcGl4aSBlbGVtZW50LiBUaGlzIGlzIHdoZXJlIHRoZSBkaXYgb3ZlcmxheXMgd2lsbCBnby5cbiAgIFx0ICogXG4gICBcdCAqIEB0eXBlIHtIVE1MRWxlbWVudH1cbiAgIFx0ICogQHByaXZhdGVcbiAgIFx0ICovXG4gICBcdHRoaXMuZGl2ID0gZGl2O1xuXG4gICBcdC8qKlxuICAgXHQgKiBBIHNpbXBsZSBwb29sIGZvciBzdG9yaW5nIGRpdnMuXG4gICBcdCAqIFxuICAgXHQgKiBAdHlwZSB7QXJyYXl9XG4gICBcdCAqIEBwcml2YXRlXG4gICBcdCAqL1xuIFx0dGhpcy5wb29sID0gW107XG5cbiBcdC8qKlxuIFx0ICogVGhpcyBpcyBhIHRpY2sgdXNlZCB0byBjaGVjayBpZiBhbiBvYmplY3QgaXMgbm8gbG9uZ2VyIGJlaW5nIHJlbmRlcmVkLlxuIFx0ICogXG4gXHQgKiBAdHlwZSB7TnVtYmVyfVxuIFx0ICogQHByaXZhdGVcbiBcdCAqL1xuICAgXHR0aGlzLnJlbmRlcklkID0gMDtcblxuICAgXHQvKipcbiAgIFx0ICogU2V0dGluZyB0aGlzIHRvIHRydWUgd2lsbCB2aXN1YWxseSBzaG93IHRoZSBkaXZzXG4gICBcdCAqIFxuICAgXHQgKiBAdHlwZSB7Qm9vbGVhbn1cbiAgIFx0ICovXG4gICBcdHRoaXMuZGVidWcgPSBmYWxzZTtcblxuICBcdC8qKlxuICAgICAqIFRoZSByZW5kZXJlciB0aGlzIGFjY2Vzc2liaWxpdHkgbWFuYWdlciB3b3JrcyBmb3IuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlN5c3RlbVJlbmRlcmVyfVxuICAgICAqL1xuICAgXHR0aGlzLnJlbmRlcmVyID0gcmVuZGVyZXI7XG5cbiAgIFx0LyoqXG4gICAgICogVGhlIGFycmF5IG9mIGN1cnJlbnRseSBhY3RpdmUgYWNjZXNzaWJsZSBpdGVtcy5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge0FycmF5fVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICBcdHRoaXMuY2hpbGRyZW4gPSBbXTtcbiAgIFx0XG4gICBcdC8qKlxuICAgICAqIHByZSBiaW5kIHRoZSBmdW5jdGlvbnMuLlxuICAgICAqL1xuICAgXHR0aGlzLl9vbktleURvd24gPSB0aGlzLl9vbktleURvd24uYmluZCh0aGlzKTtcbiAgIFx0dGhpcy5fb25Nb3VzZU1vdmUgPSB0aGlzLl9vbk1vdXNlTW92ZS5iaW5kKHRoaXMpO1xuICAgXHRcbiAgIFx0LyoqXG4gICAgICogc3RvcmVzIHRoZSBzdGF0ZSBvZiB0aGUgbWFuYWdlci4gSWYgdGhlcmUgYXJlIG5vIGFjY2Vzc2libGUgb2JqZWN0cyBvciB0aGUgbW91c2UgaXMgbW92aW5nIHRoZSB3aWxsIGJlIGZhbHNlLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7QXJyYXl9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgIFx0dGhpcy5pc0FjdGl2ZSA9IGZhbHNlO1xuXG5cbiAgIFx0Ly8gbGV0IGxpc3RlbiBmb3IgdGFiLi4gb25jZSBwcmVzc2VkIHdlIGNhbiBmaXJlIHVwIGFuZCBzaG93IHRoZSBhY2Nlc3NpYmlsaXR5IGxheWVyXG4gICBcdHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdrZXlkb3duJywgdGhpcy5fb25LZXlEb3duLCBmYWxzZSk7XG59XG5cblxuQWNjZXNzaWJpbGl0eU1hbmFnZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gQWNjZXNzaWJpbGl0eU1hbmFnZXI7XG5tb2R1bGUuZXhwb3J0cyA9IEFjY2Vzc2liaWxpdHlNYW5hZ2VyO1xuXG4vKipcbiAqIEFjdGl2YXRpbmcgd2lsbCBjYXVzZSB0aGUgQWNjZXNzaWJpbGl0eSBsYXllciB0byBiZSBzaG93bi4gVGhpcyBpcyBjYWxsZWQgd2hlbiBhIHVzZXIgcHJlc2VzIHRoZSB0YWIga2V5XG4gKiBAcHJpdmF0ZVxuICovXG5BY2Nlc3NpYmlsaXR5TWFuYWdlci5wcm90b3R5cGUuYWN0aXZhdGUgPSBmdW5jdGlvbigpXG57XG5cdGlmKHRoaXMuaXNBY3RpdmUpXG5cdHtcblx0XHRyZXR1cm47XG5cdH1cblxuXHR0aGlzLmlzQWN0aXZlID0gdHJ1ZTtcblxuXHR3aW5kb3cuZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignbW91c2Vtb3ZlJywgdGhpcy5fb25Nb3VzZU1vdmUsIHRydWUpO1xuXHR3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsIHRoaXMuX29uS2V5RG93biwgZmFsc2UpO1xuXG5cdHRoaXMucmVuZGVyZXIub24oJ3Bvc3RyZW5kZXInLCB0aGlzLnVwZGF0ZSwgdGhpcyk7XG5cblx0dGhpcy5yZW5kZXJlci52aWV3LnBhcmVudE5vZGUuYXBwZW5kQ2hpbGQodGhpcy5kaXYpO1x0XG59O1xuXG4vKipcbiAqIERlYWN0aXZhdGluZyB3aWxsIGNhdXNlIHRoZSBBY2Nlc3NpYmlsaXR5IGxheWVyIHRvIGJlIGhpZGRlbi4gVGhpcyBpcyBjYWxsZWQgd2hlbiBhIHVzZXIgbW92ZXMgdGhlIG1vdXNlXG4gKiBAcHJpdmF0ZVxuICovXG5BY2Nlc3NpYmlsaXR5TWFuYWdlci5wcm90b3R5cGUuZGVhY3RpdmF0ZSA9IGZ1bmN0aW9uKClcbntcblx0aWYoIXRoaXMuaXNBY3RpdmUpXG5cdHtcblx0XHRyZXR1cm47XG5cdH1cblxuXHR0aGlzLmlzQWN0aXZlID0gZmFsc2U7XG5cblx0d2luZG93LmRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21vdXNlbW92ZScsIHRoaXMuX29uTW91c2VNb3ZlKTtcblx0d2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLCB0aGlzLl9vbktleURvd24sIGZhbHNlKTtcblxuXHR0aGlzLnJlbmRlcmVyLm9mZigncG9zdHJlbmRlcicsIHRoaXMudXBkYXRlKTtcblxuXHR0aGlzLmRpdi5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHRoaXMuZGl2KTtcblxufTtcblxuLyoqXG4gKiBUaGlzIHJlY3Vyc2l2ZSBmdW5jdGlvbiB3aWxsIHJ1biB0aHJvdWdodCBoZSBzY2VuZSBncmFwaCBhbmQgYWRkIGFueSBuZXcgYWNjZXNzaWJsZSBvYmplY3RzIHRvIHRoZSBET00gbGF5ZXIuXG4gKiBAcGFyYW0gZWxlbWVudCB7UElYSS5Db250YWluZXJ8UElYSS5TcHJpdGV8UElYSS5leHRyYXMuVGlsaW5nU3ByaXRlfSB0aGUgRGlzcGxheU9iamVjdCB0byBjaGVjay5cbiAqIEBwcml2YXRlXG4gKi9cbkFjY2Vzc2liaWxpdHlNYW5hZ2VyLnByb3RvdHlwZS51cGRhdGVBY2Nlc3NpYmxlT2JqZWN0cyA9IGZ1bmN0aW9uKGRpc3BsYXlPYmplY3QpXG57XG5cdGlmKCFkaXNwbGF5T2JqZWN0LnZpc2libGUpXG5cdHtcblx0XHRyZXR1cm47XG5cdH1cblxuXHRpZihkaXNwbGF5T2JqZWN0LmFjY2Vzc2libGUgJiYgZGlzcGxheU9iamVjdC5pbnRlcmFjdGl2ZSlcblx0e1xuXHRcdGlmKCFkaXNwbGF5T2JqZWN0Ll9hY2Nlc3NpYmxlQWN0aXZlKVxuXHRcdHtcblx0XHRcdHRoaXMuYWRkQ2hpbGQoZGlzcGxheU9iamVjdCk7XG5cdFx0fVxuXHQgICBcdFxuXHQgICBcdGRpc3BsYXlPYmplY3QucmVuZGVySWQgPSB0aGlzLnJlbmRlcklkO1xuXHR9XG5cblx0dmFyIGNoaWxkcmVuID0gZGlzcGxheU9iamVjdC5jaGlsZHJlbjtcblxuXHRmb3IgKHZhciBpID0gY2hpbGRyZW4ubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcblx0XHRcblx0XHR0aGlzLnVwZGF0ZUFjY2Vzc2libGVPYmplY3RzKGNoaWxkcmVuW2ldKTtcblx0fVxufTtcblxuXG4vKipcbiAqIEJlZm9yZSBlYWNoIHJlbmRlciB0aGlzIGZ1bmN0aW9uIHdpbGwgZW5zdXJlIHRoYXQgYWxsIGRpdnMgYXJlIG1hcHBlZCBjb3JyZWN0bHkgdG8gdGhlaXIgRGlzcGxheU9iamVjdHNcbiAqIEBwcml2YXRlXG4gKi9cbkFjY2Vzc2liaWxpdHlNYW5hZ2VyLnByb3RvdHlwZS51cGRhdGUgPSBmdW5jdGlvbigpXG57XG5cblx0Ly8gdXBkYXRlIGNoaWxkcmVuLi4uXG5cdHRoaXMudXBkYXRlQWNjZXNzaWJsZU9iamVjdHModGhpcy5yZW5kZXJlci5fbGFzdE9iamVjdFJlbmRlcmVkKTtcblxuXHR2YXIgcmVjdCA9IHRoaXMucmVuZGVyZXIudmlldy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcblx0dmFyIHN4ID0gcmVjdC53aWR0aCAgLyB0aGlzLnJlbmRlcmVyLndpZHRoO1xuXHR2YXIgc3kgPSByZWN0LmhlaWdodCAvIHRoaXMucmVuZGVyZXIuaGVpZ2h0O1xuXG5cdHZhciBkaXYgPSB0aGlzLmRpdjtcblxuXHRkaXYuc3R5bGUubGVmdCA9IHJlY3QubGVmdCArICdweCc7XG5cdGRpdi5zdHlsZS50b3AgPSByZWN0LnRvcCArICdweCc7XG5cdGRpdi5zdHlsZS53aWR0aCA9IHRoaXMucmVuZGVyZXIud2lkdGggKyAncHgnO1xuXHRkaXYuc3R5bGUuaGVpZ2h0ID0gdGhpcy5yZW5kZXJlci5oZWlnaHQgKyAncHgnO1xuXG5cdGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5jaGlsZHJlbi5sZW5ndGg7IGkrKylcblx0e1xuXG5cdFx0dmFyIGNoaWxkID0gdGhpcy5jaGlsZHJlbltpXTtcblxuXHRcdGlmKGNoaWxkLnJlbmRlcklkICE9PSB0aGlzLnJlbmRlcklkKVxuXHRcdHtcblx0XHRcdGNoaWxkLl9hY2Nlc3NpYmxlQWN0aXZlID0gZmFsc2U7XG5cbiAgICAgICAgICAgIGNvcmUudXRpbHMucmVtb3ZlSXRlbXModGhpcy5jaGlsZHJlbiwgaSwgMSk7XG5cdFx0XHR0aGlzLmRpdi5yZW1vdmVDaGlsZCggY2hpbGQuX2FjY2Vzc2libGVEaXYgKTtcblx0XHRcdHRoaXMucG9vbC5wdXNoKGNoaWxkLl9hY2Nlc3NpYmxlRGl2KTtcblx0XHRcdGNoaWxkLl9hY2Nlc3NpYmxlRGl2ID0gbnVsbDtcblxuXHRcdFx0aS0tO1xuXG5cdFx0XHRpZih0aGlzLmNoaWxkcmVuLmxlbmd0aCA9PT0gMClcblx0XHRcdHtcblx0XHRcdFx0dGhpcy5kZWFjdGl2YXRlKCk7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdGVsc2Vcblx0XHR7XG5cdFx0XHQvLyBtYXAgZGl2IHRvIGRpc3BsYXkuLlxuXHRcdFx0ZGl2ID0gY2hpbGQuX2FjY2Vzc2libGVEaXY7XG5cdFx0XHR2YXIgaGl0QXJlYSA9IGNoaWxkLmhpdEFyZWE7XG5cdFx0XHR2YXIgd3QgPSBjaGlsZC53b3JsZFRyYW5zZm9ybTtcblxuXHRcdFx0aWYoY2hpbGQuaGl0QXJlYSlcblx0XHRcdHtcblx0XHRcdFx0ZGl2LnN0eWxlLmxlZnQgPSAoKHd0LnR4ICsgKGhpdEFyZWEueCAqIHd0LmEpKSAqIHN4KSArICdweCc7XG5cdFx0XHRcdGRpdi5zdHlsZS50b3AgPSAgKCh3dC50eSArIChoaXRBcmVhLnkgKiB3dC5kKSkgKiBzeSkgKyAgJ3B4JztcblxuXHRcdFx0XHRkaXYuc3R5bGUud2lkdGggPSAoaGl0QXJlYS53aWR0aCAqIHd0LmEgKiBzeCkgKyAncHgnO1xuXHRcdFx0XHRkaXYuc3R5bGUuaGVpZ2h0ID0gKGhpdEFyZWEuaGVpZ2h0ICogd3QuZCAqIHN5KSArICdweCc7XG5cdFx0XHRcblx0XHRcdH1cblx0XHRcdGVsc2Vcblx0XHRcdHtcblx0XHRcdFx0aGl0QXJlYSA9IGNoaWxkLmdldEJvdW5kcygpO1xuXG5cdFx0XHRcdHRoaXMuY2FwSGl0QXJlYShoaXRBcmVhKTtcblxuXHRcdFx0XHRkaXYuc3R5bGUubGVmdCA9IChoaXRBcmVhLnggKiBzeCkgKyAncHgnO1xuXHRcdFx0XHRkaXYuc3R5bGUudG9wID0gIChoaXRBcmVhLnkgKiBzeSkgKyAgJ3B4JztcblxuXHRcdFx0XHRkaXYuc3R5bGUud2lkdGggPSAoaGl0QXJlYS53aWR0aCAqIHN4KSArICdweCc7XG5cdFx0XHRcdGRpdi5zdHlsZS5oZWlnaHQgPSAoaGl0QXJlYS5oZWlnaHQgKiBzeSkgKyAncHgnO1xuXHRcdFx0fVx0XHRcblx0XHR9XG5cdH1cblxuXHQvLyBpbmNyZW1lbnQgdGhlIHJlbmRlciBpZC4uXG5cdHRoaXMucmVuZGVySWQrKztcbn07XG5cbkFjY2Vzc2liaWxpdHlNYW5hZ2VyLnByb3RvdHlwZS5jYXBIaXRBcmVhID0gZnVuY3Rpb24gKGhpdEFyZWEpXG57XG4gICAgaWYgKGhpdEFyZWEueCA8IDApXG4gICAge1xuICAgICAgICBoaXRBcmVhLndpZHRoICs9IGhpdEFyZWEueDtcbiAgICAgICAgaGl0QXJlYS54ID0gMDtcbiAgICB9XG5cbiAgICBpZiAoaGl0QXJlYS55IDwgMClcbiAgICB7XG4gICAgICAgIGhpdEFyZWEuaGVpZ2h0ICs9IGhpdEFyZWEueTtcbiAgICAgICAgaGl0QXJlYS55ID0gMDtcbiAgICB9XG5cbiAgICBpZiAoIGhpdEFyZWEueCArIGhpdEFyZWEud2lkdGggPiB0aGlzLnJlbmRlcmVyLndpZHRoIClcbiAgICB7XG4gICAgICAgIGhpdEFyZWEud2lkdGggPSB0aGlzLnJlbmRlcmVyLndpZHRoIC0gaGl0QXJlYS54O1xuICAgIH1cblxuICAgIGlmICggaGl0QXJlYS55ICsgaGl0QXJlYS5oZWlnaHQgPiB0aGlzLnJlbmRlcmVyLmhlaWdodCApXG4gICAge1xuICAgICAgICBoaXRBcmVhLmhlaWdodCA9IHRoaXMucmVuZGVyZXIuaGVpZ2h0IC0gaGl0QXJlYS55O1xuICAgIH1cbn07XG5cblxuLyoqXG4gKiBBZGRzIGEgRGlzcGxheU9iamVjdCB0byB0aGUgYWNjZXNzaWJpbGl0eSBtYW5hZ2VyXG4gKiBAcHJpdmF0ZVxuICovXG5BY2Nlc3NpYmlsaXR5TWFuYWdlci5wcm90b3R5cGUuYWRkQ2hpbGQgPSBmdW5jdGlvbihkaXNwbGF5T2JqZWN0KVxue1xuLy9cdHRoaXMuYWN0aXZhdGUoKTtcblx0XG5cdHZhciBkaXYgPSB0aGlzLnBvb2wucG9wKCk7XG5cblx0aWYoIWRpdilcblx0e1xuXHRcdGRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2J1dHRvbicpOyBcblxuXHQgICAgZGl2LnN0eWxlLndpZHRoID0gMTAwICsgJ3B4Jztcblx0ICAgIGRpdi5zdHlsZS5oZWlnaHQgPSAxMDAgKyAncHgnO1xuXHQgICAgZGl2LnN0eWxlLmJhY2tncm91bmRDb2xvciA9IHRoaXMuZGVidWcgPyAncmdiYSgyNTUsMCwwLDAuNSknIDogJ3RyYW5zcGFyZW50Jztcblx0ICAgIGRpdi5zdHlsZS5wb3NpdGlvbiA9ICdhYnNvbHV0ZSc7XG5cdCAgICBkaXYuc3R5bGUuekluZGV4ID0gMjtcblx0ICAgIGRpdi5zdHlsZS5ib3JkZXJTdHlsZSA9ICdub25lJztcblxuXHQgICAgXG5cdCAgICBkaXYuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCB0aGlzLl9vbkNsaWNrLmJpbmQodGhpcykpO1xuXHQgICAgZGl2LmFkZEV2ZW50TGlzdGVuZXIoJ2ZvY3VzJywgdGhpcy5fb25Gb2N1cy5iaW5kKHRoaXMpKTtcblx0ICAgIGRpdi5hZGRFdmVudExpc3RlbmVyKCdmb2N1c291dCcsIHRoaXMuX29uRm9jdXNPdXQuYmluZCh0aGlzKSk7XG5cdH1cblx0ICAgXHRcblxuXG5cblx0ZGl2LnRpdGxlID0gZGlzcGxheU9iamVjdC5hY2Nlc3NpYmxlVGl0bGUgfHwgJ2Rpc3BsYXlPYmplY3QgJyArIHRoaXMudGFiSW5kZXg7XG5cblx0Ly9cblx0XG5cdGRpc3BsYXlPYmplY3QuX2FjY2Vzc2libGVBY3RpdmUgPSB0cnVlO1xuXHRkaXNwbGF5T2JqZWN0Ll9hY2Nlc3NpYmxlRGl2ID0gZGl2O1xuXHRkaXYuZGlzcGxheU9iamVjdCA9IGRpc3BsYXlPYmplY3Q7XG5cblxuXHR0aGlzLmNoaWxkcmVuLnB1c2goZGlzcGxheU9iamVjdCk7XG5cdHRoaXMuZGl2LmFwcGVuZENoaWxkKCBkaXNwbGF5T2JqZWN0Ll9hY2Nlc3NpYmxlRGl2ICk7XG5cdGRpc3BsYXlPYmplY3QuX2FjY2Vzc2libGVEaXYudGFiSW5kZXggPSBkaXNwbGF5T2JqZWN0LnRhYkluZGV4O1xufTtcblxuXG4vKipcbiAqIE1hcHMgdGhlIGRpdiBidXR0b24gcHJlc3MgdG8gcGl4aSdzIEludGVyYWN0aW9uTWFuYWdlciAoY2xpY2spXG4gKiBAcHJpdmF0ZVxuICovXG5BY2Nlc3NpYmlsaXR5TWFuYWdlci5wcm90b3R5cGUuX29uQ2xpY2sgPSBmdW5jdGlvbihlKVxue1xuXHR2YXIgaW50ZXJhY3Rpb25NYW5hZ2VyID0gdGhpcy5yZW5kZXJlci5wbHVnaW5zLmludGVyYWN0aW9uO1xuXHRpbnRlcmFjdGlvbk1hbmFnZXIuZGlzcGF0Y2hFdmVudChlLnRhcmdldC5kaXNwbGF5T2JqZWN0LCAnY2xpY2snLCBpbnRlcmFjdGlvbk1hbmFnZXIuZXZlbnREYXRhKTtcbn07XG5cbi8qKlxuICogTWFwcyB0aGUgZGl2IGZvY3VzIGV2ZW50cyB0byBwaXhpcyBJbnRlcmFjdGlvbk1hbmFnZXIgKG1vdXNlb3ZlcilcbiAqIEBwcml2YXRlXG4gKi9cbkFjY2Vzc2liaWxpdHlNYW5hZ2VyLnByb3RvdHlwZS5fb25Gb2N1cyA9IGZ1bmN0aW9uKGUpXG57XG5cdHZhciBpbnRlcmFjdGlvbk1hbmFnZXIgPSB0aGlzLnJlbmRlcmVyLnBsdWdpbnMuaW50ZXJhY3Rpb247XG5cdGludGVyYWN0aW9uTWFuYWdlci5kaXNwYXRjaEV2ZW50KGUudGFyZ2V0LmRpc3BsYXlPYmplY3QsICdtb3VzZW92ZXInLCBpbnRlcmFjdGlvbk1hbmFnZXIuZXZlbnREYXRhKTtcbn07XG5cbi8qKlxuICogTWFwcyB0aGUgZGl2IGZvY3VzIGV2ZW50cyB0byBwaXhpcyBJbnRlcmFjdGlvbk1hbmFnZXIgKG1vdXNlb3V0KVxuICogQHByaXZhdGVcbiAqL1xuQWNjZXNzaWJpbGl0eU1hbmFnZXIucHJvdG90eXBlLl9vbkZvY3VzT3V0ID0gZnVuY3Rpb24oZSlcbntcblx0dmFyIGludGVyYWN0aW9uTWFuYWdlciA9IHRoaXMucmVuZGVyZXIucGx1Z2lucy5pbnRlcmFjdGlvbjtcblx0aW50ZXJhY3Rpb25NYW5hZ2VyLmRpc3BhdGNoRXZlbnQoZS50YXJnZXQuZGlzcGxheU9iamVjdCwgJ21vdXNlb3V0JywgaW50ZXJhY3Rpb25NYW5hZ2VyLmV2ZW50RGF0YSk7XG59O1xuXG4vKipcbiAqIElzIGNhbGxlZCB3aGVuIGEga2V5IGlzIHByZXNzZWRcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5BY2Nlc3NpYmlsaXR5TWFuYWdlci5wcm90b3R5cGUuX29uS2V5RG93biA9IGZ1bmN0aW9uKGUpXG57XG5cdGlmKGUua2V5Q29kZSAhPT0gOSlcblx0e1xuXHRcdHJldHVybjtcblx0fVxuXG5cdHRoaXMuYWN0aXZhdGUoKTtcbn07XG5cbi8qKlxuICogSXMgY2FsbGVkIHdoZW4gdGhlIG1vdXNlIG1vdmVzIGFjcm9zcyB0aGUgcmVuZGVyZXIgZWxlbWVudFxuICpcbiAqIEBwcml2YXRlXG4gKi9cbkFjY2Vzc2liaWxpdHlNYW5hZ2VyLnByb3RvdHlwZS5fb25Nb3VzZU1vdmUgPSBmdW5jdGlvbigpXG57XG5cdHRoaXMuZGVhY3RpdmF0ZSgpO1xufTtcblxuXG4vKipcbiAqIERlc3Ryb3lzIHRoZSBhY2Nlc3NpYmlsaXR5IG1hbmFnZXJcbiAqXG4gKi9cbkFjY2Vzc2liaWxpdHlNYW5hZ2VyLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKCkgXG57XG5cdHRoaXMuZGl2ID0gbnVsbDtcblxuXHRmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuY2hpbGRyZW4ubGVuZ3RoOyBpKyspXG5cdHtcblx0XHR0aGlzLmNoaWxkcmVuW2ldLmRpdiA9IG51bGw7XG5cdH1cblxuXHRcblx0d2luZG93LmRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21vdXNlbW92ZScsIHRoaXMuX29uTW91c2VNb3ZlKTtcblx0d2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLCB0aGlzLl9vbktleURvd24pO1xuXHRcdFxuXHR0aGlzLnBvb2wgPSBudWxsO1xuXHR0aGlzLmNoaWxkcmVuID0gbnVsbDtcblx0dGhpcy5yZW5kZXJlciA9IG51bGw7XG5cbn07XG5cbmNvcmUuV2ViR0xSZW5kZXJlci5yZWdpc3RlclBsdWdpbignYWNjZXNzaWJpbGl0eScsIEFjY2Vzc2liaWxpdHlNYW5hZ2VyKTtcbmNvcmUuQ2FudmFzUmVuZGVyZXIucmVnaXN0ZXJQbHVnaW4oJ2FjY2Vzc2liaWxpdHknLCBBY2Nlc3NpYmlsaXR5TWFuYWdlcik7XG5cbiIsIi8qKlxuICogRGVmYXVsdCBwcm9wZXJ0eSB2YWx1ZXMgb2YgYWNjZXNzaWJsZSBvYmplY3RzXG4gKiB1c2VkIGJ5IHtAbGluayBQSVhJLmFjY2Vzc2liaWxpdHkuQWNjZXNzaWJpbGl0eU1hbmFnZXJ9LlxuICpcbiAqIEBtaXhpblxuICogQG1lbWJlcm9mIFBJWElcbiAqIEBleGFtcGxlXG4gKiAgICAgIGZ1bmN0aW9uIE15T2JqZWN0KCkge31cbiAqXG4gKiAgICAgIE9iamVjdC5hc3NpZ24oXG4gKiAgICAgICAgICBNeU9iamVjdC5wcm90b3R5cGUsXG4gKiAgICAgICAgICBQSVhJLmFjY2Vzc2liaWxpdHkuYWNjZXNzaWJsZVRhcmdldFxuICogICAgICApO1xuICovXG52YXIgYWNjZXNzaWJsZVRhcmdldCA9IHtcbiAgICBcbiAgICAvKipcbiAgICAgKiBAdG9kbyBOZWVkcyBkb2NzLlxuICAgICAqL1xuICAgIGFjY2Vzc2libGU6ZmFsc2UsXG5cbiAgICAvKipcbiAgICAgKiBAdG9kbyBOZWVkcyBkb2NzLlxuICAgICAqL1xuICAgIGFjY2Vzc2libGVUaXRsZTpudWxsLFxuXG4gICAgLyoqXG4gICAgICogQHRvZG8gTmVlZHMgZG9jcy5cbiAgICAgKi9cbiAgICB0YWJJbmRleDowLFxuXG4gICAgLyoqXG4gICAgICogQHRvZG8gTmVlZHMgZG9jcy5cbiAgICAgKi9cbiAgICBfYWNjZXNzaWJsZUFjdGl2ZTpmYWxzZSxcblxuICAgIC8qKlxuICAgICAqIEB0b2RvIE5lZWRzIGRvY3MuXG4gICAgICovXG4gICAgX2FjY2Vzc2libGVEaXY6ZmFsc2VcblxufTtcblxubW9kdWxlLmV4cG9ydHMgPSBhY2Nlc3NpYmxlVGFyZ2V0O1xuIiwiLyoqXG4gKiBAZmlsZSAgICAgICAgTWFpbiBleHBvcnQgb2YgdGhlIFBJWEkgYWNjZXNzaWJpbGl0eSBsaWJyYXJ5XG4gKiBAYXV0aG9yICAgICAgTWF0IEdyb3ZlcyA8bWF0QGdvb2Rib3lkaWdpdGFsLmNvbT5cbiAqIEBjb3B5cmlnaHQgICAyMDEzLTIwMTUgR29vZEJveURpZ2l0YWxcbiAqIEBsaWNlbnNlICAgICB7QGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL3BpeGlqcy9waXhpLmpzL2Jsb2IvbWFzdGVyL0xJQ0VOU0V8TUlUIExpY2Vuc2V9XG4gKi9cblxuLyoqXG4gKiBAbmFtZXNwYWNlIFBJWEkuaW50ZXJhY3Rpb25cbiAqL1xubW9kdWxlLmV4cG9ydHMgPSB7XG4gICAgYWNjZXNzaWJsZVRhcmdldDogICAgIHJlcXVpcmUoJy4vYWNjZXNzaWJsZVRhcmdldCcpLFxuICAgIEFjY2Vzc2liaWxpdHlNYW5hZ2VyOiByZXF1aXJlKCcuL0FjY2Vzc2liaWxpdHlNYW5hZ2VyJylcbn07XG4iLCIvKipcbiAqIENvbnN0YW50IHZhbHVlcyB1c2VkIGluIHBpeGlcbiAqXG4gKiBAbGVuZHMgUElYSVxuICovXG52YXIgQ09OU1QgPSB7XG4gICAgLyoqXG4gICAgICogU3RyaW5nIG9mIHRoZSBjdXJyZW50IFBJWEkgdmVyc2lvblxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBjb25zdGFudFxuICAgICAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBWRVJTSU9OXG4gICAgICovXG4gICAgVkVSU0lPTjogcmVxdWlyZSgnLi4vLi4vcGFja2FnZS5qc29uJykudmVyc2lvbixcblxuICAgIC8qKlxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBQSV8yIC0gVHdvIFBpXG4gICAgICogQGNvbnN0YW50XG4gICAgICogQHN0YXRpY1xuICAgICAqL1xuICAgIFBJXzI6IE1hdGguUEkgKiAyLFxuXG4gICAgLyoqXG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IFJBRF9UT19ERUcgLSBDb25zdGFudCBjb252ZXJzaW9uIGZhY3RvciBmb3IgY29udmVydGluZyByYWRpYW5zIHRvIGRlZ3JlZXNcbiAgICAgKiBAY29uc3RhbnRcbiAgICAgKiBAc3RhdGljXG4gICAgICovXG4gICAgUkFEX1RPX0RFRzogMTgwIC8gTWF0aC5QSSxcblxuICAgIC8qKlxuICAgICAqIEBwcm9wZXJ0eSB7TnVtYmVyfSBERUdfVE9fUkFEIC0gQ29uc3RhbnQgY29udmVyc2lvbiBmYWN0b3IgZm9yIGNvbnZlcnRpbmcgZGVncmVlcyB0byByYWRpYW5zXG4gICAgICogQGNvbnN0YW50XG4gICAgICogQHN0YXRpY1xuICAgICAqL1xuICAgIERFR19UT19SQUQ6IE1hdGguUEkgLyAxODAsXG5cbiAgICAvKipcbiAgICAgKiBUYXJnZXQgZnJhbWVzIHBlciBtaWxsaXNlY29uZC5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAY29uc3RhbnRcbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gVEFSR0VUX0ZQTVM9MC4wNlxuICAgICAqL1xuICAgIFRBUkdFVF9GUE1TOiAwLjA2LFxuXG4gICAgLyoqXG4gICAgICogQ29uc3RhbnQgdG8gaWRlbnRpZnkgdGhlIFJlbmRlcmVyIFR5cGUuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQGNvbnN0YW50XG4gICAgICogQHByb3BlcnR5IHtvYmplY3R9IFJFTkRFUkVSX1RZUEVcbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gUkVOREVSRVJfVFlQRS5VTktOT1dOXG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IFJFTkRFUkVSX1RZUEUuV0VCR0xcbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gUkVOREVSRVJfVFlQRS5DQU5WQVNcbiAgICAgKi9cbiAgICBSRU5ERVJFUl9UWVBFOiB7XG4gICAgICAgIFVOS05PV046ICAgIDAsXG4gICAgICAgIFdFQkdMOiAgICAgIDEsXG4gICAgICAgIENBTlZBUzogICAgIDJcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVmFyaW91cyBibGVuZCBtb2RlcyBzdXBwb3J0ZWQgYnkgUElYSS4gSU1QT1JUQU5UIC0gVGhlIFdlYkdMIHJlbmRlcmVyIG9ubHkgc3VwcG9ydHNcbiAgICAgKiB0aGUgTk9STUFMLCBBREQsIE1VTFRJUExZIGFuZCBTQ1JFRU4gYmxlbmQgbW9kZXMuIEFueXRoaW5nIGVsc2Ugd2lsbCBzaWxlbnRseSBhY3QgbGlrZVxuICAgICAqIE5PUk1BTC5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAY29uc3RhbnRcbiAgICAgKiBAcHJvcGVydHkge29iamVjdH0gQkxFTkRfTU9ERVNcbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gQkxFTkRfTU9ERVMuTk9STUFMXG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IEJMRU5EX01PREVTLkFERFxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBCTEVORF9NT0RFUy5NVUxUSVBMWVxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBCTEVORF9NT0RFUy5TQ1JFRU5cbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gQkxFTkRfTU9ERVMuT1ZFUkxBWVxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBCTEVORF9NT0RFUy5EQVJLRU5cbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gQkxFTkRfTU9ERVMuTElHSFRFTlxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBCTEVORF9NT0RFUy5DT0xPUl9ET0RHRVxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBCTEVORF9NT0RFUy5DT0xPUl9CVVJOXG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IEJMRU5EX01PREVTLkhBUkRfTElHSFRcbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gQkxFTkRfTU9ERVMuU09GVF9MSUdIVFxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBCTEVORF9NT0RFUy5ESUZGRVJFTkNFXG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IEJMRU5EX01PREVTLkVYQ0xVU0lPTlxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBCTEVORF9NT0RFUy5IVUVcbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gQkxFTkRfTU9ERVMuU0FUVVJBVElPTlxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBCTEVORF9NT0RFUy5DT0xPUlxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBCTEVORF9NT0RFUy5MVU1JTk9TSVRZXG4gICAgICovXG4gICAgQkxFTkRfTU9ERVM6IHtcbiAgICAgICAgTk9STUFMOiAgICAgICAgIDAsXG4gICAgICAgIEFERDogICAgICAgICAgICAxLFxuICAgICAgICBNVUxUSVBMWTogICAgICAgMixcbiAgICAgICAgU0NSRUVOOiAgICAgICAgIDMsXG4gICAgICAgIE9WRVJMQVk6ICAgICAgICA0LFxuICAgICAgICBEQVJLRU46ICAgICAgICAgNSxcbiAgICAgICAgTElHSFRFTjogICAgICAgIDYsXG4gICAgICAgIENPTE9SX0RPREdFOiAgICA3LFxuICAgICAgICBDT0xPUl9CVVJOOiAgICAgOCxcbiAgICAgICAgSEFSRF9MSUdIVDogICAgIDksXG4gICAgICAgIFNPRlRfTElHSFQ6ICAgICAxMCxcbiAgICAgICAgRElGRkVSRU5DRTogICAgIDExLFxuICAgICAgICBFWENMVVNJT046ICAgICAgMTIsXG4gICAgICAgIEhVRTogICAgICAgICAgICAxMyxcbiAgICAgICAgU0FUVVJBVElPTjogICAgIDE0LFxuICAgICAgICBDT0xPUjogICAgICAgICAgMTUsXG4gICAgICAgIExVTUlOT1NJVFk6ICAgICAxNlxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBWYXJpb3VzIHdlYmdsIGRyYXcgbW9kZXMuIFRoZXNlIGNhbiBiZSB1c2VkIHRvIHNwZWNpZnkgd2hpY2ggR0wgZHJhd01vZGUgdG8gdXNlXG4gICAgICogdW5kZXIgY2VydGFpbiBzaXR1YXRpb25zIGFuZCByZW5kZXJlcnMuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQGNvbnN0YW50XG4gICAgICogQHByb3BlcnR5IHtvYmplY3R9IERSQVdfTU9ERVNcbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gRFJBV19NT0RFUy5QT0lOVFNcbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gRFJBV19NT0RFUy5MSU5FU1xuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBEUkFXX01PREVTLkxJTkVfTE9PUFxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBEUkFXX01PREVTLkxJTkVfU1RSSVBcbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gRFJBV19NT0RFUy5UUklBTkdMRVNcbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gRFJBV19NT0RFUy5UUklBTkdMRV9TVFJJUFxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBEUkFXX01PREVTLlRSSUFOR0xFX0ZBTlxuICAgICAqL1xuICAgIERSQVdfTU9ERVM6IHtcbiAgICAgICAgUE9JTlRTOiAgICAgICAgIDAsXG4gICAgICAgIExJTkVTOiAgICAgICAgICAxLFxuICAgICAgICBMSU5FX0xPT1A6ICAgICAgMixcbiAgICAgICAgTElORV9TVFJJUDogICAgIDMsXG4gICAgICAgIFRSSUFOR0xFUzogICAgICA0LFxuICAgICAgICBUUklBTkdMRV9TVFJJUDogNSxcbiAgICAgICAgVFJJQU5HTEVfRkFOOiAgIDZcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVGhlIHNjYWxlIG1vZGVzIHRoYXQgYXJlIHN1cHBvcnRlZCBieSBwaXhpLlxuICAgICAqXG4gICAgICogVGhlIERFRkFVTFQgc2NhbGUgbW9kZSBhZmZlY3RzIHRoZSBkZWZhdWx0IHNjYWxpbmcgbW9kZSBvZiBmdXR1cmUgb3BlcmF0aW9ucy5cbiAgICAgKiBJdCBjYW4gYmUgcmUtYXNzaWduZWQgdG8gZWl0aGVyIExJTkVBUiBvciBORUFSRVNULCBkZXBlbmRpbmcgdXBvbiBzdWl0YWJpbGl0eS5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAY29uc3RhbnRcbiAgICAgKiBAcHJvcGVydHkge29iamVjdH0gU0NBTEVfTU9ERVNcbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gU0NBTEVfTU9ERVMuREVGQVVMVD1MSU5FQVJcbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gU0NBTEVfTU9ERVMuTElORUFSIFNtb290aCBzY2FsaW5nXG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IFNDQUxFX01PREVTLk5FQVJFU1QgUGl4ZWxhdGluZyBzY2FsaW5nXG4gICAgICovXG4gICAgU0NBTEVfTU9ERVM6IHtcbiAgICAgICAgREVGQVVMVDogICAgMCxcbiAgICAgICAgTElORUFSOiAgICAgMCxcbiAgICAgICAgTkVBUkVTVDogICAgMVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBUaGUgcHJlZml4IHRoYXQgZGVub3RlcyBhIFVSTCBpcyBmb3IgYSByZXRpbmEgYXNzZXRcbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAY29uc3RhbnRcbiAgICAgKiBAcHJvcGVydHkge3N0cmluZ30gUkVUSU5BX1BSRUZJWFxuICAgICAqL1xuICAgIC8vZXhhbXBsZTogJ0AyeCcsXG4gICAgUkVUSU5BX1BSRUZJWDogL0AoLispeC8sXG5cbiAgICBSRVNPTFVUSU9OOjEsXG5cbiAgICBGSUxURVJfUkVTT0xVVElPTjoxLFxuXG4gICAgLyoqXG4gICAgICogVGhlIGRlZmF1bHQgcmVuZGVyIG9wdGlvbnMgaWYgbm9uZSBhcmUgc3VwcGxpZWQgdG8ge0BsaW5rIFBJWEkuV2ViR0xSZW5kZXJlcn1cbiAgICAgKiBvciB7QGxpbmsgUElYSS5DYW52YXNSZW5kZXJlcn0uXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQGNvbnN0YW50XG4gICAgICogQHByb3BlcnR5IHtvYmplY3R9IERFRkFVTFRfUkVOREVSX09QVElPTlNcbiAgICAgKiBAcHJvcGVydHkge0hUTUxDYW52YXNFbGVtZW50fSBERUZBVUxUX1JFTkRFUl9PUFRJT05TLnZpZXc9bnVsbFxuICAgICAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gREVGQVVMVF9SRU5ERVJfT1BUSU9OUy50cmFuc3BhcmVudD1mYWxzZVxuICAgICAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gREVGQVVMVF9SRU5ERVJfT1BUSU9OUy5hbnRpYWxpYXM9ZmFsc2VcbiAgICAgKiBAcHJvcGVydHkge2Jvb2xlYW59IERFRkFVTFRfUkVOREVSX09QVElPTlMuZm9yY2VGWEFBPWZhbHNlXG4gICAgICogQHByb3BlcnR5IHtib29sZWFufSBERUZBVUxUX1JFTkRFUl9PUFRJT05TLnByZXNlcnZlRHJhd2luZ0J1ZmZlcj1mYWxzZVxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBERUZBVUxUX1JFTkRFUl9PUFRJT05TLnJlc29sdXRpb249MVxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBERUZBVUxUX1JFTkRFUl9PUFRJT05TLmJhY2tncm91bmRDb2xvcj0weDAwMDAwMFxuICAgICAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gREVGQVVMVF9SRU5ERVJfT1BUSU9OUy5jbGVhckJlZm9yZVJlbmRlcj10cnVlXG4gICAgICogQHByb3BlcnR5IHtib29sZWFufSBERUZBVUxUX1JFTkRFUl9PUFRJT05TLmF1dG9SZXNpemU9ZmFsc2VcbiAgICAgKi9cbiAgICBERUZBVUxUX1JFTkRFUl9PUFRJT05TOiB7XG4gICAgICAgIHZpZXc6IG51bGwsXG4gICAgICAgIHJlc29sdXRpb246IDEsXG4gICAgICAgIGFudGlhbGlhczogZmFsc2UsXG4gICAgICAgIGZvcmNlRlhBQTogZmFsc2UsXG4gICAgICAgIGF1dG9SZXNpemU6IGZhbHNlLFxuICAgICAgICB0cmFuc3BhcmVudDogZmFsc2UsXG4gICAgICAgIGJhY2tncm91bmRDb2xvcjogMHgwMDAwMDAsXG4gICAgICAgIGNsZWFyQmVmb3JlUmVuZGVyOiB0cnVlLFxuICAgICAgICBwcmVzZXJ2ZURyYXdpbmdCdWZmZXI6IGZhbHNlLFxuICAgICAgICByb3VuZFBpeGVsczogZmFsc2VcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQ29uc3RhbnRzIHRoYXQgaWRlbnRpZnkgc2hhcGVzLCBtYWlubHkgdG8gcHJldmVudCBgaW5zdGFuY2VvZmAgY2FsbHMuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQGNvbnN0YW50XG4gICAgICogQHByb3BlcnR5IHtvYmplY3R9IFNIQVBFU1xuICAgICAqIEBwcm9wZXJ0eSB7b2JqZWN0fSBTSEFQRVMuUE9MWT0wXG4gICAgICogQHByb3BlcnR5IHtvYmplY3R9IFNIQVBFUy5SRUNUPTFcbiAgICAgKiBAcHJvcGVydHkge29iamVjdH0gU0hBUEVTLkNJUkM9MlxuICAgICAqIEBwcm9wZXJ0eSB7b2JqZWN0fSBTSEFQRVMuRUxJUD0zXG4gICAgICogQHByb3BlcnR5IHtvYmplY3R9IFNIQVBFUy5SUkVDPTRcbiAgICAgKi9cbiAgICBTSEFQRVM6IHtcbiAgICAgICAgUE9MWTogMCxcbiAgICAgICAgUkVDVDogMSxcbiAgICAgICAgQ0lSQzogMixcbiAgICAgICAgRUxJUDogMyxcbiAgICAgICAgUlJFQzogNFxuICAgIH0sXG5cbiAgICAvLyBUT0RPOiBtYXliZSBjaGFuZ2UgdG8gU1BSSVRFLkJBVENIX1NJWkU6IDIwMDBcbiAgICAvLyBUT0RPOiBtYXliZSBhZGQgUEFSVElDTEUuQkFUQ0hfU0laRTogMTUwMDBcbiAgICBTUFJJVEVfQkFUQ0hfU0laRTogMjAwMCAvL25pY2UgYmFsYW5jZSBiZXR3ZWVuIG1vYmlsZSBhbmQgZGVza3RvcCBtYWNoaW5lc1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBDT05TVDtcbiIsInZhciBtYXRoID0gcmVxdWlyZSgnLi4vbWF0aCcpLFxuICAgIHV0aWxzID0gcmVxdWlyZSgnLi4vdXRpbHMnKSxcbiAgICBEaXNwbGF5T2JqZWN0ID0gcmVxdWlyZSgnLi9EaXNwbGF5T2JqZWN0JyksXG4gICAgUmVuZGVyVGV4dHVyZSA9IHJlcXVpcmUoJy4uL3RleHR1cmVzL1JlbmRlclRleHR1cmUnKSxcbiAgICBfdGVtcE1hdHJpeCA9IG5ldyBtYXRoLk1hdHJpeCgpO1xuXG4vKipcbiAqIEEgQ29udGFpbmVyIHJlcHJlc2VudHMgYSBjb2xsZWN0aW9uIG9mIGRpc3BsYXkgb2JqZWN0cy5cbiAqIEl0IGlzIHRoZSBiYXNlIGNsYXNzIG9mIGFsbCBkaXNwbGF5IG9iamVjdHMgdGhhdCBhY3QgYXMgYSBjb250YWluZXIgZm9yIG90aGVyIG9iamVjdHMuXG4gKlxuICpgYGBqc1xuICogdmFyIGNvbnRhaW5lciA9IG5ldyBQSVhJLkNvbnRhaW5lcigpO1xuICogY29udGFpbmVyLmFkZENoaWxkKHNwcml0ZSk7XG4gKiBgYGBcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5EaXNwbGF5T2JqZWN0XG4gKiBAbWVtYmVyb2YgUElYSVxuICovXG5mdW5jdGlvbiBDb250YWluZXIoKVxue1xuICAgIERpc3BsYXlPYmplY3QuY2FsbCh0aGlzKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBhcnJheSBvZiBjaGlsZHJlbiBvZiB0aGlzIGNvbnRhaW5lci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuRGlzcGxheU9iamVjdFtdfVxuICAgICAqIEByZWFkb25seVxuICAgICAqL1xuICAgIHRoaXMuY2hpbGRyZW4gPSBbXTtcbn1cblxuLy8gY29uc3RydWN0b3JcbkNvbnRhaW5lci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKERpc3BsYXlPYmplY3QucHJvdG90eXBlKTtcbkNvbnRhaW5lci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBDb250YWluZXI7XG5tb2R1bGUuZXhwb3J0cyA9IENvbnRhaW5lcjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoQ29udGFpbmVyLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFRoZSB3aWR0aCBvZiB0aGUgQ29udGFpbmVyLCBzZXR0aW5nIHRoaXMgd2lsbCBhY3R1YWxseSBtb2RpZnkgdGhlIHNjYWxlIHRvIGFjaGlldmUgdGhlIHZhbHVlIHNldFxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLkNvbnRhaW5lciNcbiAgICAgKi9cbiAgICB3aWR0aDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnNjYWxlLnggKiB0aGlzLmdldExvY2FsQm91bmRzKCkud2lkdGg7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG5cbiAgICAgICAgICAgIHZhciB3aWR0aCA9IHRoaXMuZ2V0TG9jYWxCb3VuZHMoKS53aWR0aDtcblxuICAgICAgICAgICAgaWYgKHdpZHRoICE9PSAwKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHRoaXMuc2NhbGUueCA9IHZhbHVlIC8gd2lkdGg7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdGhpcy5zY2FsZS54ID0gMTtcbiAgICAgICAgICAgIH1cblxuXG4gICAgICAgICAgICB0aGlzLl93aWR0aCA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFRoZSBoZWlnaHQgb2YgdGhlIENvbnRhaW5lciwgc2V0dGluZyB0aGlzIHdpbGwgYWN0dWFsbHkgbW9kaWZ5IHRoZSBzY2FsZSB0byBhY2hpZXZlIHRoZSB2YWx1ZSBzZXRcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5Db250YWluZXIjXG4gICAgICovXG4gICAgaGVpZ2h0OiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuICB0aGlzLnNjYWxlLnkgKiB0aGlzLmdldExvY2FsQm91bmRzKCkuaGVpZ2h0O1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuXG4gICAgICAgICAgICB2YXIgaGVpZ2h0ID0gdGhpcy5nZXRMb2NhbEJvdW5kcygpLmhlaWdodDtcblxuICAgICAgICAgICAgaWYgKGhlaWdodCAhPT0gMClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNjYWxlLnkgPSB2YWx1ZSAvIGhlaWdodCA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdGhpcy5zY2FsZS55ID0gMTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5faGVpZ2h0ID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG59KTtcblxuLyoqXG4gKiBPdmVycmlkYWJsZSBtZXRob2QgdGhhdCBjYW4gYmUgdXNlZCBieSBDb250YWluZXIgc3ViY2xhc3NlcyB3aGVuZXZlciB0aGUgY2hpbGRyZW4gYXJyYXkgaXMgbW9kaWZpZWRcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5Db250YWluZXIucHJvdG90eXBlLm9uQ2hpbGRyZW5DaGFuZ2UgPSBmdW5jdGlvbiAoKSB7fTtcblxuLyoqXG4gKiBBZGRzIGEgY2hpbGQgdG8gdGhlIGNvbnRhaW5lci5cbiAqIFxuICogWW91IGNhbiBhbHNvIGFkZCBtdWx0cGxlIGl0ZW1zIGxpa2Ugc286IG15Q29udGFpbmVyLmFkZENoaWxkKHRoaW5rT25lLCB0aGluZ1R3bywgdGhpbmdUaHJlZSlcbiAqIEBwYXJhbSBjaGlsZCB7UElYSS5EaXNwbGF5T2JqZWN0fSBUaGUgRGlzcGxheU9iamVjdCB0byBhZGQgdG8gdGhlIGNvbnRhaW5lclxuICogQHJldHVybiB7UElYSS5EaXNwbGF5T2JqZWN0fSBUaGUgY2hpbGQgdGhhdCB3YXMgYWRkZWQuXG4gKi9cbkNvbnRhaW5lci5wcm90b3R5cGUuYWRkQ2hpbGQgPSBmdW5jdGlvbiAoY2hpbGQpXG57IFxuICAgIHZhciBhcmd1bWVudHNMZW5ndGggPSBhcmd1bWVudHMubGVuZ3RoO1xuXG4gICAgLy8gaWYgdGhlcmUgaXMgb25seSBvbmUgYXJndW1lbnQgd2UgY2FuIGJ5cGFzcyBsb29waW5nIHRocm91Z2ggdGhlIHRoZW1cbiAgICBpZihhcmd1bWVudHNMZW5ndGggPiAxKVxuICAgIHtcbiAgICAgICAgLy8gbG9vcCB0aHJvdWdoIHRoZSBhcmd1bWVudHMgcHJvcGVydHkgYW5kIGFkZCBhbGwgY2hpbGRyZW5cbiAgICAgICAgLy8gdXNlIGl0IHRoZSByaWdodCB3YXkgKC5sZW5ndGggYW5kIFtpXSkgc28gdGhhdCB0aGlzIGZ1bmN0aW9uIGNhbiBzdGlsbCBiZSBvcHRpbWlzZWQgYnkgSlMgcnVudGltZXNcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcmd1bWVudHNMZW5ndGg7IGkrKylcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5hZGRDaGlsZCggYXJndW1lbnRzW2ldICk7XG4gICAgICAgIH1cbiAgICB9ICAgICBcbiAgICBlbHNlXG4gICAge1xuICAgICAgICAvLyBpZiB0aGUgY2hpbGQgaGFzIGEgcGFyZW50IHRoZW4gbGV0cyByZW1vdmUgaXQgYXMgUGl4aSBvYmplY3RzIGNhbiBvbmx5IGV4aXN0IGluIG9uZSBwbGFjZVxuICAgICAgICBpZiAoY2hpbGQucGFyZW50KVxuICAgICAgICB7XG4gICAgICAgICAgICBjaGlsZC5wYXJlbnQucmVtb3ZlQ2hpbGQoY2hpbGQpO1xuICAgICAgICB9XG5cbiAgICAgICAgY2hpbGQucGFyZW50ID0gdGhpcztcbiAgICAgICAgXG4gICAgICAgIHRoaXMuY2hpbGRyZW4ucHVzaChjaGlsZCk7XG5cbiAgICAgICAgLy8gVE9ETyAtIGxldHMgZWl0aGVyIGRvIGFsbCBjYWxsYmFja3Mgb3IgYWxsIGV2ZW50cy4uIG5vdCBib3RoIVxuICAgICAgICB0aGlzLm9uQ2hpbGRyZW5DaGFuZ2UodGhpcy5jaGlsZHJlbi5sZW5ndGgtMSk7XG4gICAgICAgIGNoaWxkLmVtaXQoJ2FkZGVkJywgdGhpcyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGNoaWxkO1xufTtcblxuLyoqXG4gKiBBZGRzIGEgY2hpbGQgdG8gdGhlIGNvbnRhaW5lciBhdCBhIHNwZWNpZmllZCBpbmRleC4gSWYgdGhlIGluZGV4IGlzIG91dCBvZiBib3VuZHMgYW4gZXJyb3Igd2lsbCBiZSB0aHJvd25cbiAqXG4gKiBAcGFyYW0gY2hpbGQge1BJWEkuRGlzcGxheU9iamVjdH0gVGhlIGNoaWxkIHRvIGFkZFxuICogQHBhcmFtIGluZGV4IHtudW1iZXJ9IFRoZSBpbmRleCB0byBwbGFjZSB0aGUgY2hpbGQgaW5cbiAqIEByZXR1cm4ge1BJWEkuRGlzcGxheU9iamVjdH0gVGhlIGNoaWxkIHRoYXQgd2FzIGFkZGVkLlxuICovXG5Db250YWluZXIucHJvdG90eXBlLmFkZENoaWxkQXQgPSBmdW5jdGlvbiAoY2hpbGQsIGluZGV4KVxue1xuICAgIGlmIChpbmRleCA+PSAwICYmIGluZGV4IDw9IHRoaXMuY2hpbGRyZW4ubGVuZ3RoKVxuICAgIHtcbiAgICAgICAgaWYgKGNoaWxkLnBhcmVudClcbiAgICAgICAge1xuICAgICAgICAgICAgY2hpbGQucGFyZW50LnJlbW92ZUNoaWxkKGNoaWxkKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNoaWxkLnBhcmVudCA9IHRoaXM7XG5cbiAgICAgICAgdGhpcy5jaGlsZHJlbi5zcGxpY2UoaW5kZXgsIDAsIGNoaWxkKTtcblxuICAgICAgICAvLyBUT0RPIC0gbGV0cyBlaXRoZXIgZG8gYWxsIGNhbGxiYWNrcyBvciBhbGwgZXZlbnRzLi4gbm90IGJvdGghXG4gICAgICAgIHRoaXMub25DaGlsZHJlbkNoYW5nZShpbmRleCk7XG4gICAgICAgIGNoaWxkLmVtaXQoJ2FkZGVkJywgdGhpcyk7XG5cbiAgICAgICAgcmV0dXJuIGNoaWxkO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoY2hpbGQgKyAnYWRkQ2hpbGRBdDogVGhlIGluZGV4ICcrIGluZGV4ICsnIHN1cHBsaWVkIGlzIG91dCBvZiBib3VuZHMgJyArIHRoaXMuY2hpbGRyZW4ubGVuZ3RoKTtcbiAgICB9XG59O1xuXG4vKipcbiAqIFN3YXBzIHRoZSBwb3NpdGlvbiBvZiAyIERpc3BsYXkgT2JqZWN0cyB3aXRoaW4gdGhpcyBjb250YWluZXIuXG4gKlxuICogQHBhcmFtIGNoaWxkIHtQSVhJLkRpc3BsYXlPYmplY3R9XG4gKiBAcGFyYW0gY2hpbGQyIHtQSVhJLkRpc3BsYXlPYmplY3R9XG4gKi9cbkNvbnRhaW5lci5wcm90b3R5cGUuc3dhcENoaWxkcmVuID0gZnVuY3Rpb24gKGNoaWxkLCBjaGlsZDIpXG57XG4gICAgaWYgKGNoaWxkID09PSBjaGlsZDIpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFyIGluZGV4MSA9IHRoaXMuZ2V0Q2hpbGRJbmRleChjaGlsZCk7XG4gICAgdmFyIGluZGV4MiA9IHRoaXMuZ2V0Q2hpbGRJbmRleChjaGlsZDIpO1xuXG4gICAgaWYgKGluZGV4MSA8IDAgfHwgaW5kZXgyIDwgMClcbiAgICB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignc3dhcENoaWxkcmVuOiBCb3RoIHRoZSBzdXBwbGllZCBEaXNwbGF5T2JqZWN0cyBtdXN0IGJlIGNoaWxkcmVuIG9mIHRoZSBjYWxsZXIuJyk7XG4gICAgfVxuXG4gICAgdGhpcy5jaGlsZHJlbltpbmRleDFdID0gY2hpbGQyO1xuICAgIHRoaXMuY2hpbGRyZW5baW5kZXgyXSA9IGNoaWxkO1xuICAgIHRoaXMub25DaGlsZHJlbkNoYW5nZShpbmRleDEgPCBpbmRleDIgPyBpbmRleDEgOiBpbmRleDIpO1xufTtcblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBpbmRleCBwb3NpdGlvbiBvZiBhIGNoaWxkIERpc3BsYXlPYmplY3QgaW5zdGFuY2VcbiAqXG4gKiBAcGFyYW0gY2hpbGQge1BJWEkuRGlzcGxheU9iamVjdH0gVGhlIERpc3BsYXlPYmplY3QgaW5zdGFuY2UgdG8gaWRlbnRpZnlcbiAqIEByZXR1cm4ge251bWJlcn0gVGhlIGluZGV4IHBvc2l0aW9uIG9mIHRoZSBjaGlsZCBkaXNwbGF5IG9iamVjdCB0byBpZGVudGlmeVxuICovXG5Db250YWluZXIucHJvdG90eXBlLmdldENoaWxkSW5kZXggPSBmdW5jdGlvbiAoY2hpbGQpXG57XG4gICAgdmFyIGluZGV4ID0gdGhpcy5jaGlsZHJlbi5pbmRleE9mKGNoaWxkKTtcblxuICAgIGlmIChpbmRleCA9PT0gLTEpXG4gICAge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RoZSBzdXBwbGllZCBEaXNwbGF5T2JqZWN0IG11c3QgYmUgYSBjaGlsZCBvZiB0aGUgY2FsbGVyJyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGluZGV4O1xufTtcblxuLyoqXG4gKiBDaGFuZ2VzIHRoZSBwb3NpdGlvbiBvZiBhbiBleGlzdGluZyBjaGlsZCBpbiB0aGUgZGlzcGxheSBvYmplY3QgY29udGFpbmVyXG4gKlxuICogQHBhcmFtIGNoaWxkIHtQSVhJLkRpc3BsYXlPYmplY3R9IFRoZSBjaGlsZCBEaXNwbGF5T2JqZWN0IGluc3RhbmNlIGZvciB3aGljaCB5b3Ugd2FudCB0byBjaGFuZ2UgdGhlIGluZGV4IG51bWJlclxuICogQHBhcmFtIGluZGV4IHtudW1iZXJ9IFRoZSByZXN1bHRpbmcgaW5kZXggbnVtYmVyIGZvciB0aGUgY2hpbGQgZGlzcGxheSBvYmplY3RcbiAqL1xuQ29udGFpbmVyLnByb3RvdHlwZS5zZXRDaGlsZEluZGV4ID0gZnVuY3Rpb24gKGNoaWxkLCBpbmRleClcbntcbiAgICBpZiAoaW5kZXggPCAwIHx8IGluZGV4ID49IHRoaXMuY2hpbGRyZW4ubGVuZ3RoKVxuICAgIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdUaGUgc3VwcGxpZWQgaW5kZXggaXMgb3V0IG9mIGJvdW5kcycpO1xuICAgIH1cblxuICAgIHZhciBjdXJyZW50SW5kZXggPSB0aGlzLmdldENoaWxkSW5kZXgoY2hpbGQpO1xuXG4gICAgdXRpbHMucmVtb3ZlSXRlbXModGhpcy5jaGlsZHJlbiwgY3VycmVudEluZGV4LCAxKTsgLy8gcmVtb3ZlIGZyb20gb2xkIHBvc2l0aW9uXG4gICAgdGhpcy5jaGlsZHJlbi5zcGxpY2UoaW5kZXgsIDAsIGNoaWxkKTsgLy9hZGQgYXQgbmV3IHBvc2l0aW9uXG4gICAgdGhpcy5vbkNoaWxkcmVuQ2hhbmdlKGluZGV4KTtcbn07XG5cbi8qKlxuICogUmV0dXJucyB0aGUgY2hpbGQgYXQgdGhlIHNwZWNpZmllZCBpbmRleFxuICpcbiAqIEBwYXJhbSBpbmRleCB7bnVtYmVyfSBUaGUgaW5kZXggdG8gZ2V0IHRoZSBjaGlsZCBhdFxuICogQHJldHVybiB7UElYSS5EaXNwbGF5T2JqZWN0fSBUaGUgY2hpbGQgYXQgdGhlIGdpdmVuIGluZGV4LCBpZiBhbnkuXG4gKi9cbkNvbnRhaW5lci5wcm90b3R5cGUuZ2V0Q2hpbGRBdCA9IGZ1bmN0aW9uIChpbmRleClcbntcbiAgICBpZiAoaW5kZXggPCAwIHx8IGluZGV4ID49IHRoaXMuY2hpbGRyZW4ubGVuZ3RoKVxuICAgIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdnZXRDaGlsZEF0OiBTdXBwbGllZCBpbmRleCAnICsgaW5kZXggKyAnIGRvZXMgbm90IGV4aXN0IGluIHRoZSBjaGlsZCBsaXN0LCBvciB0aGUgc3VwcGxpZWQgRGlzcGxheU9iamVjdCBpcyBub3QgYSBjaGlsZCBvZiB0aGUgY2FsbGVyJyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuY2hpbGRyZW5baW5kZXhdO1xufTtcblxuLyoqXG4gKiBSZW1vdmVzIGEgY2hpbGQgZnJvbSB0aGUgY29udGFpbmVyLlxuICpcbiAqIEBwYXJhbSBjaGlsZCB7UElYSS5EaXNwbGF5T2JqZWN0fSBUaGUgRGlzcGxheU9iamVjdCB0byByZW1vdmVcbiAqIEByZXR1cm4ge1BJWEkuRGlzcGxheU9iamVjdH0gVGhlIGNoaWxkIHRoYXQgd2FzIHJlbW92ZWQuXG4gKi9cbkNvbnRhaW5lci5wcm90b3R5cGUucmVtb3ZlQ2hpbGQgPSBmdW5jdGlvbiAoY2hpbGQpXG57XG4gICAgdmFyIGFyZ3VtZW50c0xlbmd0aCA9IGFyZ3VtZW50cy5sZW5ndGg7XG5cbiAgICAvLyBpZiB0aGVyZSBpcyBvbmx5IG9uZSBhcmd1bWVudCB3ZSBjYW4gYnlwYXNzIGxvb3BpbmcgdGhyb3VnaCB0aGUgdGhlbVxuICAgIGlmKGFyZ3VtZW50c0xlbmd0aCA+IDEpXG4gICAge1xuICAgICAgICAvLyBsb29wIHRocm91Z2ggdGhlIGFyZ3VtZW50cyBwcm9wZXJ0eSBhbmQgYWRkIGFsbCBjaGlsZHJlblxuICAgICAgICAvLyB1c2UgaXQgdGhlIHJpZ2h0IHdheSAoLmxlbmd0aCBhbmQgW2ldKSBzbyB0aGF0IHRoaXMgZnVuY3Rpb24gY2FuIHN0aWxsIGJlIG9wdGltaXNlZCBieSBKUyBydW50aW1lc1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFyZ3VtZW50c0xlbmd0aDsgaSsrKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnJlbW92ZUNoaWxkKCBhcmd1bWVudHNbaV0gKTtcbiAgICAgICAgfVxuICAgIH0gICAgIFxuICAgIGVsc2VcbiAgICB7ICAgXG4gICAgICAgIHZhciBpbmRleCA9IHRoaXMuY2hpbGRyZW4uaW5kZXhPZihjaGlsZCk7XG5cbiAgICAgICAgaWYgKGluZGV4ID09PSAtMSlcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY2hpbGQucGFyZW50ID0gbnVsbDtcbiAgICAgICAgdXRpbHMucmVtb3ZlSXRlbXModGhpcy5jaGlsZHJlbiwgaW5kZXgsIDEpO1xuXG4gICAgICAgIC8vIFRPRE8gLSBsZXRzIGVpdGhlciBkbyBhbGwgY2FsbGJhY2tzIG9yIGFsbCBldmVudHMuLiBub3QgYm90aCFcbiAgICAgICAgdGhpcy5vbkNoaWxkcmVuQ2hhbmdlKGluZGV4KTtcbiAgICAgICAgY2hpbGQuZW1pdCgncmVtb3ZlZCcsIHRoaXMpO1xuICAgIH1cblxuICAgIHJldHVybiBjaGlsZDtcbn07XG5cbi8qKlxuICogUmVtb3ZlcyBhIGNoaWxkIGZyb20gdGhlIHNwZWNpZmllZCBpbmRleCBwb3NpdGlvbi5cbiAqXG4gKiBAcGFyYW0gaW5kZXgge251bWJlcn0gVGhlIGluZGV4IHRvIGdldCB0aGUgY2hpbGQgZnJvbVxuICogQHJldHVybiB7UElYSS5EaXNwbGF5T2JqZWN0fSBUaGUgY2hpbGQgdGhhdCB3YXMgcmVtb3ZlZC5cbiAqL1xuQ29udGFpbmVyLnByb3RvdHlwZS5yZW1vdmVDaGlsZEF0ID0gZnVuY3Rpb24gKGluZGV4KVxue1xuICAgIHZhciBjaGlsZCA9IHRoaXMuZ2V0Q2hpbGRBdChpbmRleCk7XG5cbiAgICBjaGlsZC5wYXJlbnQgPSBudWxsO1xuICAgIHV0aWxzLnJlbW92ZUl0ZW1zKHRoaXMuY2hpbGRyZW4sIGluZGV4LCAxKTtcblxuICAgIC8vIFRPRE8gLSBsZXRzIGVpdGhlciBkbyBhbGwgY2FsbGJhY2tzIG9yIGFsbCBldmVudHMuLiBub3QgYm90aCFcbiAgICB0aGlzLm9uQ2hpbGRyZW5DaGFuZ2UoaW5kZXgpO1xuICAgIGNoaWxkLmVtaXQoJ3JlbW92ZWQnLCB0aGlzKTtcblxuICAgIHJldHVybiBjaGlsZDtcbn07XG5cbi8qKlxuICogUmVtb3ZlcyBhbGwgY2hpbGRyZW4gZnJvbSB0aGlzIGNvbnRhaW5lciB0aGF0IGFyZSB3aXRoaW4gdGhlIGJlZ2luIGFuZCBlbmQgaW5kZXhlcy5cbiAqXG4gKiBAcGFyYW0gYmVnaW5JbmRleCB7bnVtYmVyfSBUaGUgYmVnaW5uaW5nIHBvc2l0aW9uLiBEZWZhdWx0IHZhbHVlIGlzIDAuXG4gKiBAcGFyYW0gZW5kSW5kZXgge251bWJlcn0gVGhlIGVuZGluZyBwb3NpdGlvbi4gRGVmYXVsdCB2YWx1ZSBpcyBzaXplIG9mIHRoZSBjb250YWluZXIuXG4gKi9cbkNvbnRhaW5lci5wcm90b3R5cGUucmVtb3ZlQ2hpbGRyZW4gPSBmdW5jdGlvbiAoYmVnaW5JbmRleCwgZW5kSW5kZXgpXG57XG4gICAgdmFyIGJlZ2luID0gYmVnaW5JbmRleCB8fCAwO1xuICAgIHZhciBlbmQgPSB0eXBlb2YgZW5kSW5kZXggPT09ICdudW1iZXInID8gZW5kSW5kZXggOiB0aGlzLmNoaWxkcmVuLmxlbmd0aDtcbiAgICB2YXIgcmFuZ2UgPSBlbmQgLSBiZWdpbjtcbiAgICB2YXIgcmVtb3ZlZCwgaTtcblxuICAgIGlmIChyYW5nZSA+IDAgJiYgcmFuZ2UgPD0gZW5kKVxuICAgIHtcbiAgICAgICAgcmVtb3ZlZCA9IHRoaXMuY2hpbGRyZW4uc3BsaWNlKGJlZ2luLCByYW5nZSk7XG5cbiAgICAgICAgZm9yIChpID0gMDsgaSA8IHJlbW92ZWQubGVuZ3RoOyArK2kpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJlbW92ZWRbaV0ucGFyZW50ID0gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMub25DaGlsZHJlbkNoYW5nZShiZWdpbkluZGV4KTtcblxuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgcmVtb3ZlZC5sZW5ndGg7ICsraSlcbiAgICAgICAge1xuICAgICAgICAgICAgcmVtb3ZlZFtpXS5lbWl0KCdyZW1vdmVkJywgdGhpcyk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gcmVtb3ZlZDtcbiAgICB9XG4gICAgZWxzZSBpZiAocmFuZ2UgPT09IDAgJiYgdGhpcy5jaGlsZHJlbi5sZW5ndGggPT09IDApXG4gICAge1xuICAgICAgICByZXR1cm4gW107XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdyZW1vdmVDaGlsZHJlbjogbnVtZXJpYyB2YWx1ZXMgYXJlIG91dHNpZGUgdGhlIGFjY2VwdGFibGUgcmFuZ2UuJyk7XG4gICAgfVxufTtcblxuLyoqXG4gKiBVc2VmdWwgZnVuY3Rpb24gdGhhdCByZXR1cm5zIGEgdGV4dHVyZSBvZiB0aGUgZGlzcGxheSBvYmplY3QgdGhhdCBjYW4gdGhlbiBiZSB1c2VkIHRvIGNyZWF0ZSBzcHJpdGVzXG4gKiBUaGlzIGNhbiBiZSBxdWl0ZSB1c2VmdWwgaWYgeW91ciBkaXNwbGF5T2JqZWN0IGlzIHN0YXRpYyAvIGNvbXBsaWNhdGVkIGFuZCBuZWVkcyB0byBiZSByZXVzZWQgbXVsdGlwbGUgdGltZXMuXG4gKlxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLkNhbnZhc1JlbmRlcmVyfFBJWEkuV2ViR0xSZW5kZXJlcn0gVGhlIHJlbmRlcmVyIHVzZWQgdG8gZ2VuZXJhdGUgdGhlIHRleHR1cmUuXG4gKiBAcGFyYW0gcmVzb2x1dGlvbiB7bnVtYmVyfSBUaGUgcmVzb2x1dGlvbiBvZiB0aGUgdGV4dHVyZSBiZWluZyBnZW5lcmF0ZWRcbiAqIEBwYXJhbSBzY2FsZU1vZGUge251bWJlcn0gU2VlIHtAbGluayBQSVhJLlNDQUxFX01PREVTfSBmb3IgcG9zc2libGUgdmFsdWVzXG4gKiBAcmV0dXJuIHtQSVhJLlRleHR1cmV9IGEgdGV4dHVyZSBvZiB0aGUgZGlzcGxheSBvYmplY3RcbiAqL1xuQ29udGFpbmVyLnByb3RvdHlwZS5nZW5lcmF0ZVRleHR1cmUgPSBmdW5jdGlvbiAocmVuZGVyZXIsIHJlc29sdXRpb24sIHNjYWxlTW9kZSlcbntcbiAgICB2YXIgYm91bmRzID0gdGhpcy5nZXRMb2NhbEJvdW5kcygpO1xuXG4gICAgdmFyIHJlbmRlclRleHR1cmUgPSBuZXcgUmVuZGVyVGV4dHVyZShyZW5kZXJlciwgYm91bmRzLndpZHRoIHwgMCwgYm91bmRzLmhlaWdodCB8IDAsIHNjYWxlTW9kZSwgcmVzb2x1dGlvbik7XG5cbiAgICBfdGVtcE1hdHJpeC50eCA9IC1ib3VuZHMueDtcbiAgICBfdGVtcE1hdHJpeC50eSA9IC1ib3VuZHMueTtcblxuICAgIHJlbmRlclRleHR1cmUucmVuZGVyKHRoaXMsIF90ZW1wTWF0cml4KTtcblxuICAgIHJldHVybiByZW5kZXJUZXh0dXJlO1xufTtcblxuLypcbiAqIFVwZGF0ZXMgdGhlIHRyYW5zZm9ybSBvbiBhbGwgY2hpbGRyZW4gb2YgdGhpcyBjb250YWluZXIgZm9yIHJlbmRlcmluZ1xuICpcbiAqIEBwcml2YXRlXG4gKi9cbkNvbnRhaW5lci5wcm90b3R5cGUudXBkYXRlVHJhbnNmb3JtID0gZnVuY3Rpb24gKClcbntcbiAgICBpZiAoIXRoaXMudmlzaWJsZSlcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLmRpc3BsYXlPYmplY3RVcGRhdGVUcmFuc2Zvcm0oKTtcblxuICAgIGZvciAodmFyIGkgPSAwLCBqID0gdGhpcy5jaGlsZHJlbi5sZW5ndGg7IGkgPCBqOyArK2kpXG4gICAge1xuICAgICAgICB0aGlzLmNoaWxkcmVuW2ldLnVwZGF0ZVRyYW5zZm9ybSgpO1xuICAgIH1cblxuICAgIHRoaXMuZGlydHlUcmFuc2Zvcm0gPSBmYWxzZTtcbn07XG5cbi8vIHBlcmZvcm1hbmNlIGluY3JlYXNlIHRvIGF2b2lkIHVzaW5nIGNhbGwuLiAoMTB4IGZhc3RlcilcbkNvbnRhaW5lci5wcm90b3R5cGUuY29udGFpbmVyVXBkYXRlVHJhbnNmb3JtID0gQ29udGFpbmVyLnByb3RvdHlwZS51cGRhdGVUcmFuc2Zvcm07XG5cbi8qKlxuICogUmV0cmlldmVzIHRoZSBib3VuZHMgb2YgdGhlIENvbnRhaW5lciBhcyBhIHJlY3RhbmdsZS4gVGhlIGJvdW5kcyBjYWxjdWxhdGlvbiB0YWtlcyBhbGwgdmlzaWJsZSBjaGlsZHJlbiBpbnRvIGNvbnNpZGVyYXRpb24uXG4gKlxuICogQHJldHVybiB7UElYSS5SZWN0YW5nbGV9IFRoZSByZWN0YW5ndWxhciBib3VuZGluZyBhcmVhXG4gKi9cbkNvbnRhaW5lci5wcm90b3R5cGUuZ2V0Qm91bmRzID0gZnVuY3Rpb24gKClcbntcbiAgICBpZighdGhpcy5fY3VycmVudEJvdW5kcylcbiAgICB7XG5cbiAgICAgICAgaWYgKHRoaXMuY2hpbGRyZW4ubGVuZ3RoID09PSAwKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gbWF0aC5SZWN0YW5nbGUuRU1QVFk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBUT0RPIHRoZSBib3VuZHMgaGF2ZSBhbHJlYWR5IGJlZW4gY2FsY3VsYXRlZCB0aGlzIHJlbmRlciBzZXNzaW9uIHNvIHJldHVybiB3aGF0IHdlIGhhdmVcblxuICAgICAgICB2YXIgbWluWCA9IEluZmluaXR5O1xuICAgICAgICB2YXIgbWluWSA9IEluZmluaXR5O1xuXG4gICAgICAgIHZhciBtYXhYID0gLUluZmluaXR5O1xuICAgICAgICB2YXIgbWF4WSA9IC1JbmZpbml0eTtcblxuICAgICAgICB2YXIgY2hpbGRCb3VuZHM7XG4gICAgICAgIHZhciBjaGlsZE1heFg7XG4gICAgICAgIHZhciBjaGlsZE1heFk7XG5cbiAgICAgICAgdmFyIGNoaWxkVmlzaWJsZSA9IGZhbHNlO1xuXG4gICAgICAgIGZvciAodmFyIGkgPSAwLCBqID0gdGhpcy5jaGlsZHJlbi5sZW5ndGg7IGkgPCBqOyArK2kpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHZhciBjaGlsZCA9IHRoaXMuY2hpbGRyZW5baV07XG5cbiAgICAgICAgICAgIGlmICghY2hpbGQudmlzaWJsZSlcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY2hpbGRWaXNpYmxlID0gdHJ1ZTtcblxuICAgICAgICAgICAgY2hpbGRCb3VuZHMgPSB0aGlzLmNoaWxkcmVuW2ldLmdldEJvdW5kcygpO1xuXG4gICAgICAgICAgICBtaW5YID0gbWluWCA8IGNoaWxkQm91bmRzLnggPyBtaW5YIDogY2hpbGRCb3VuZHMueDtcbiAgICAgICAgICAgIG1pblkgPSBtaW5ZIDwgY2hpbGRCb3VuZHMueSA/IG1pblkgOiBjaGlsZEJvdW5kcy55O1xuXG4gICAgICAgICAgICBjaGlsZE1heFggPSBjaGlsZEJvdW5kcy53aWR0aCArIGNoaWxkQm91bmRzLng7XG4gICAgICAgICAgICBjaGlsZE1heFkgPSBjaGlsZEJvdW5kcy5oZWlnaHQgKyBjaGlsZEJvdW5kcy55O1xuXG4gICAgICAgICAgICBtYXhYID0gbWF4WCA+IGNoaWxkTWF4WCA/IG1heFggOiBjaGlsZE1heFg7XG4gICAgICAgICAgICBtYXhZID0gbWF4WSA+IGNoaWxkTWF4WSA/IG1heFkgOiBjaGlsZE1heFk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIWNoaWxkVmlzaWJsZSlcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIG1hdGguUmVjdGFuZ2xlLkVNUFRZO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGJvdW5kcyA9IHRoaXMuX2JvdW5kcztcblxuICAgICAgICBib3VuZHMueCA9IG1pblg7XG4gICAgICAgIGJvdW5kcy55ID0gbWluWTtcbiAgICAgICAgYm91bmRzLndpZHRoID0gbWF4WCAtIG1pblg7XG4gICAgICAgIGJvdW5kcy5oZWlnaHQgPSBtYXhZIC0gbWluWTtcblxuICAgICAgICB0aGlzLl9jdXJyZW50Qm91bmRzID0gYm91bmRzO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLl9jdXJyZW50Qm91bmRzO1xufTtcblxuQ29udGFpbmVyLnByb3RvdHlwZS5jb250YWluZXJHZXRCb3VuZHMgPSBDb250YWluZXIucHJvdG90eXBlLmdldEJvdW5kcztcblxuLyoqXG4gKiBSZXRyaWV2ZXMgdGhlIG5vbi1nbG9iYWwgbG9jYWwgYm91bmRzIG9mIHRoZSBDb250YWluZXIgYXMgYSByZWN0YW5nbGUuXG4gKiBUaGUgY2FsY3VsYXRpb24gdGFrZXMgYWxsIHZpc2libGUgY2hpbGRyZW4gaW50byBjb25zaWRlcmF0aW9uLlxuICpcbiAqIEByZXR1cm4ge1BJWEkuUmVjdGFuZ2xlfSBUaGUgcmVjdGFuZ3VsYXIgYm91bmRpbmcgYXJlYVxuICovXG5Db250YWluZXIucHJvdG90eXBlLmdldExvY2FsQm91bmRzID0gZnVuY3Rpb24gKClcbntcbiAgICB2YXIgbWF0cml4Q2FjaGUgPSB0aGlzLndvcmxkVHJhbnNmb3JtO1xuXG4gICAgdGhpcy53b3JsZFRyYW5zZm9ybSA9IG1hdGguTWF0cml4LklERU5USVRZO1xuXG4gICAgZm9yICh2YXIgaSA9IDAsIGogPSB0aGlzLmNoaWxkcmVuLmxlbmd0aDsgaSA8IGo7ICsraSlcbiAgICB7XG4gICAgICAgIHRoaXMuY2hpbGRyZW5baV0udXBkYXRlVHJhbnNmb3JtKCk7XG4gICAgfVxuXG4gICAgdGhpcy53b3JsZFRyYW5zZm9ybSA9IG1hdHJpeENhY2hlO1xuXG4gICAgdGhpcy5fY3VycmVudEJvdW5kcyA9IG51bGw7XG5cbiAgICByZXR1cm4gdGhpcy5nZXRCb3VuZHMoIG1hdGguTWF0cml4LklERU5USVRZICk7XG59O1xuXG4vKipcbiAqIFJlbmRlcnMgdGhlIG9iamVjdCB1c2luZyB0aGUgV2ViR0wgcmVuZGVyZXJcbiAqXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcn0gVGhlIHJlbmRlcmVyXG4gKi9cbkNvbnRhaW5lci5wcm90b3R5cGUucmVuZGVyV2ViR0wgPSBmdW5jdGlvbiAocmVuZGVyZXIpXG57XG5cbiAgICAvLyBpZiB0aGUgb2JqZWN0IGlzIG5vdCB2aXNpYmxlIG9yIHRoZSBhbHBoYSBpcyAwIHRoZW4gbm8gbmVlZCB0byByZW5kZXIgdGhpcyBlbGVtZW50XG4gICAgaWYgKCF0aGlzLnZpc2libGUgfHwgdGhpcy53b3JsZEFscGhhIDw9IDAgfHwgIXRoaXMucmVuZGVyYWJsZSlcbiAgICB7XG4gICAgICBcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHZhciBpLCBqO1xuXG4gICAgLy8gZG8gYSBxdWljayBjaGVjayB0byBzZWUgaWYgdGhpcyBlbGVtZW50IGhhcyBhIG1hc2sgb3IgYSBmaWx0ZXIuXG4gICAgaWYgKHRoaXMuX21hc2sgfHwgdGhpcy5fZmlsdGVycylcbiAgICB7XG4gICAgICAgIHJlbmRlcmVyLmN1cnJlbnRSZW5kZXJlci5mbHVzaCgpO1xuXG4gICAgICAgIC8vIHB1c2ggZmlsdGVyIGZpcnN0IGFzIHdlIG5lZWQgdG8gZW5zdXJlIHRoZSBzdGVuY2lsIGJ1ZmZlciBpcyBjb3JyZWN0IGZvciBhbnkgbWFza2luZ1xuICAgICAgICBpZiAodGhpcy5fZmlsdGVycyAmJiB0aGlzLl9maWx0ZXJzLmxlbmd0aClcbiAgICAgICAge1xuICAgICAgICAgICAgcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5wdXNoRmlsdGVyKHRoaXMsIHRoaXMuX2ZpbHRlcnMpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuX21hc2spXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJlbmRlcmVyLm1hc2tNYW5hZ2VyLnB1c2hNYXNrKHRoaXMsIHRoaXMuX21hc2spO1xuICAgICAgICB9XG5cbiAgICAgICAgcmVuZGVyZXIuY3VycmVudFJlbmRlcmVyLnN0YXJ0KCk7XG5cbiAgICAgICAgLy8gYWRkIHRoaXMgb2JqZWN0IHRvIHRoZSBiYXRjaCwgb25seSByZW5kZXJlZCBpZiBpdCBoYXMgYSB0ZXh0dXJlLlxuICAgICAgICB0aGlzLl9yZW5kZXJXZWJHTChyZW5kZXJlcik7XG5cbiAgICAgICAgLy8gbm93IGxvb3AgdGhyb3VnaCB0aGUgY2hpbGRyZW4gYW5kIG1ha2Ugc3VyZSB0aGV5IGdldCByZW5kZXJlZFxuICAgICAgICBmb3IgKGkgPSAwLCBqID0gdGhpcy5jaGlsZHJlbi5sZW5ndGg7IGkgPCBqOyBpKyspXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuY2hpbGRyZW5baV0ucmVuZGVyV2ViR0wocmVuZGVyZXIpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmVuZGVyZXIuY3VycmVudFJlbmRlcmVyLmZsdXNoKCk7XG5cbiAgICAgICAgaWYgKHRoaXMuX21hc2spXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJlbmRlcmVyLm1hc2tNYW5hZ2VyLnBvcE1hc2sodGhpcywgdGhpcy5fbWFzayk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5fZmlsdGVycylcbiAgICAgICAge1xuICAgICAgICAgICAgcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5wb3BGaWx0ZXIoKTtcblxuICAgICAgICB9XG4gICAgICAgIHJlbmRlcmVyLmN1cnJlbnRSZW5kZXJlci5zdGFydCgpO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICB0aGlzLl9yZW5kZXJXZWJHTChyZW5kZXJlcik7XG5cbiAgICAgICAgLy8gc2ltcGxlIHJlbmRlciBjaGlsZHJlbiFcbiAgICAgICAgZm9yIChpID0gMCwgaiA9IHRoaXMuY2hpbGRyZW4ubGVuZ3RoOyBpIDwgajsgKytpKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmNoaWxkcmVuW2ldLnJlbmRlcldlYkdMKHJlbmRlcmVyKTtcbiAgICAgICAgfVxuICAgIH1cbn07XG5cbi8qKlxuICogVG8gYmUgb3ZlcnJpZGRlbiBieSB0aGUgc3ViY2xhc3NcbiAqXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcn0gVGhlIHJlbmRlcmVyXG4gKiBAcHJpdmF0ZVxuICovXG5Db250YWluZXIucHJvdG90eXBlLl9yZW5kZXJXZWJHTCA9IGZ1bmN0aW9uIChyZW5kZXJlcikgLy8ganNoaW50IHVudXNlZDpmYWxzZVxue1xuICAgIC8vIHRoaXMgaXMgd2hlcmUgY29udGVudCBpdHNlbGYgZ2V0cyByZW5kZXJlZC4uLlxufTtcblxuLyoqXG4gKiBUbyBiZSBvdmVycmlkZGVuIGJ5IHRoZSBzdWJjbGFzc1xuICpcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5DYW52YXNSZW5kZXJlcn0gVGhlIHJlbmRlcmVyXG4gKiBAcHJpdmF0ZVxuICovXG5Db250YWluZXIucHJvdG90eXBlLl9yZW5kZXJDYW52YXMgPSBmdW5jdGlvbiAocmVuZGVyZXIpIC8vIGpzaGludCB1bnVzZWQ6ZmFsc2VcbntcbiAgICAvLyB0aGlzIGlzIHdoZXJlIGNvbnRlbnQgaXRzZWxmIGdldHMgcmVuZGVyZWQuLi5cbn07XG5cblxuLyoqXG4gKiBSZW5kZXJzIHRoZSBvYmplY3QgdXNpbmcgdGhlIENhbnZhcyByZW5kZXJlclxuICpcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5DYW52YXNSZW5kZXJlcn0gVGhlIHJlbmRlcmVyXG4gKi9cbkNvbnRhaW5lci5wcm90b3R5cGUucmVuZGVyQ2FudmFzID0gZnVuY3Rpb24gKHJlbmRlcmVyKVxue1xuICAgIC8vIGlmIG5vdCB2aXNpYmxlIG9yIHRoZSBhbHBoYSBpcyAwIHRoZW4gbm8gbmVlZCB0byByZW5kZXIgdGhpc1xuICAgIGlmICghdGhpcy52aXNpYmxlIHx8IHRoaXMuYWxwaGEgPD0gMCB8fCAhdGhpcy5yZW5kZXJhYmxlKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICh0aGlzLl9tYXNrKVxuICAgIHtcbiAgICAgICAgcmVuZGVyZXIubWFza01hbmFnZXIucHVzaE1hc2sodGhpcy5fbWFzaywgcmVuZGVyZXIpO1xuICAgIH1cblxuICAgIHRoaXMuX3JlbmRlckNhbnZhcyhyZW5kZXJlcik7XG4gICAgZm9yICh2YXIgaSA9IDAsIGogPSB0aGlzLmNoaWxkcmVuLmxlbmd0aDsgaSA8IGo7ICsraSlcbiAgICB7XG4gICAgICAgIHRoaXMuY2hpbGRyZW5baV0ucmVuZGVyQ2FudmFzKHJlbmRlcmVyKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5fbWFzaylcbiAgICB7XG4gICAgICAgIHJlbmRlcmVyLm1hc2tNYW5hZ2VyLnBvcE1hc2socmVuZGVyZXIpO1xuICAgIH1cbn07XG5cbi8qKlxuICogRGVzdHJveXMgdGhlIGNvbnRhaW5lclxuICogQHBhcmFtIFtkZXN0cm95Q2hpbGRyZW49ZmFsc2VdIHtib29sZWFufSBpZiBzZXQgdG8gdHJ1ZSwgYWxsIHRoZSBjaGlsZHJlbiB3aWxsIGhhdmUgdGhlaXIgZGVzdHJveSBtZXRob2QgY2FsbGVkIGFzIHdlbGxcbiAqL1xuQ29udGFpbmVyLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKGRlc3Ryb3lDaGlsZHJlbilcbntcbiAgICBEaXNwbGF5T2JqZWN0LnByb3RvdHlwZS5kZXN0cm95LmNhbGwodGhpcyk7XG5cbiAgICBpZiAoZGVzdHJveUNoaWxkcmVuKVxuICAgIHtcbiAgICAgICAgZm9yICh2YXIgaSA9IDAsIGogPSB0aGlzLmNoaWxkcmVuLmxlbmd0aDsgaSA8IGo7ICsraSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5jaGlsZHJlbltpXS5kZXN0cm95KGRlc3Ryb3lDaGlsZHJlbik7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLnJlbW92ZUNoaWxkcmVuKCk7XG5cbiAgICB0aGlzLmNoaWxkcmVuID0gbnVsbDtcbn07XG4iLCJ2YXIgbWF0aCA9IHJlcXVpcmUoJy4uL21hdGgnKSxcbiAgICBSZW5kZXJUZXh0dXJlID0gcmVxdWlyZSgnLi4vdGV4dHVyZXMvUmVuZGVyVGV4dHVyZScpLFxuICAgIEV2ZW50RW1pdHRlciA9IHJlcXVpcmUoJ2V2ZW50ZW1pdHRlcjMnKSxcbiAgICBDT05TVCA9IHJlcXVpcmUoJy4uL2NvbnN0JyksXG4gICAgX3RlbXBNYXRyaXggPSBuZXcgbWF0aC5NYXRyaXgoKSxcbiAgICBfdGVtcERpc3BsYXlPYmplY3RQYXJlbnQgPSB7d29ybGRUcmFuc2Zvcm06bmV3IG1hdGguTWF0cml4KCksIHdvcmxkQWxwaGE6MSwgY2hpbGRyZW46W119O1xuXG5cbi8qKlxuICogVGhlIGJhc2UgY2xhc3MgZm9yIGFsbCBvYmplY3RzIHRoYXQgYXJlIHJlbmRlcmVkIG9uIHRoZSBzY3JlZW4uXG4gKiBUaGlzIGlzIGFuIGFic3RyYWN0IGNsYXNzIGFuZCBzaG91bGQgbm90IGJlIHVzZWQgb24gaXRzIG93biByYXRoZXIgaXQgc2hvdWxkIGJlIGV4dGVuZGVkLlxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgRXZlbnRFbWl0dGVyXG4gKiBAbWVtYmVyb2YgUElYSVxuICovXG5mdW5jdGlvbiBEaXNwbGF5T2JqZWN0KClcbntcbiAgICBFdmVudEVtaXR0ZXIuY2FsbCh0aGlzKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBjb29yZGluYXRlIG9mIHRoZSBvYmplY3QgcmVsYXRpdmUgdG8gdGhlIGxvY2FsIGNvb3JkaW5hdGVzIG9mIHRoZSBwYXJlbnQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlBvaW50fVxuICAgICAqL1xuICAgIHRoaXMucG9zaXRpb24gPSBuZXcgbWF0aC5Qb2ludCgpO1xuICAgIHRoaXMuX3Bvc2l0aW9uID0gbmV3IENhY2hlUG9pbnQodGhpcyk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgc2NhbGUgZmFjdG9yIG9mIHRoZSBvYmplY3QuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlBvaW50fVxuICAgICAqL1xuICAgIHRoaXMuc2NhbGUgPSBuZXcgbWF0aC5Qb2ludCgxLCAxKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBwaXZvdCBwb2ludCBvZiB0aGUgZGlzcGxheU9iamVjdCB0aGF0IGl0IHJvdGF0ZXMgYXJvdW5kXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlBvaW50fVxuICAgICAqL1xuICAgIHRoaXMucGl2b3QgPSBuZXcgbWF0aC5Qb2ludCgwLCAwKTtcblxuXG4gICAgLyoqXG4gICAgICogVGhlIHNrZXcgZmFjdG9yIGZvciB0aGUgb2JqZWN0IGluIHJhZGlhbnMuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlBvaW50fVxuICAgICAqL1xuICAgIHRoaXMuc2tldyA9IG5ldyBtYXRoLlBvaW50KDAsIDApO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHJvdGF0aW9uIG9mIHRoZSBvYmplY3QgaW4gcmFkaWFucy5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLl9yb3RhdGlvbiA9IDA7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgb3BhY2l0eSBvZiB0aGUgb2JqZWN0LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMuYWxwaGEgPSAxO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHZpc2liaWxpdHkgb2YgdGhlIG9iamVjdC4gSWYgZmFsc2UgdGhlIG9iamVjdCB3aWxsIG5vdCBiZSBkcmF3biwgYW5kXG4gICAgICogdGhlIHVwZGF0ZVRyYW5zZm9ybSBmdW5jdGlvbiB3aWxsIG5vdCBiZSBjYWxsZWQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqL1xuICAgIHRoaXMudmlzaWJsZSA9IHRydWU7XG5cbiAgICAvKipcbiAgICAgKiBDYW4gdGhpcyBvYmplY3QgYmUgcmVuZGVyZWQsIGlmIGZhbHNlIHRoZSBvYmplY3Qgd2lsbCBub3QgYmUgZHJhd24gYnV0IHRoZSB1cGRhdGVUcmFuc2Zvcm1cbiAgICAgKiBtZXRob2RzIHdpbGwgc3RpbGwgYmUgY2FsbGVkLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKi9cbiAgICB0aGlzLnJlbmRlcmFibGUgPSB0cnVlO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGRpc3BsYXkgb2JqZWN0IGNvbnRhaW5lciB0aGF0IGNvbnRhaW5zIHRoaXMgZGlzcGxheSBvYmplY3QuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLkNvbnRhaW5lcn1cbiAgICAgKiBAcmVhZE9ubHlcbiAgICAgKi9cbiAgICB0aGlzLnBhcmVudCA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgbXVsdGlwbGllZCBhbHBoYSBvZiB0aGUgZGlzcGxheU9iamVjdFxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEByZWFkT25seVxuICAgICAqL1xuICAgIHRoaXMud29ybGRBbHBoYSA9IDE7XG5cbiAgICAvKipcbiAgICAgKiBDdXJyZW50IHRyYW5zZm9ybSBvZiB0aGUgb2JqZWN0IGJhc2VkIG9uIHdvcmxkIChwYXJlbnQpIGZhY3RvcnNcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuTWF0cml4fVxuICAgICAqIEByZWFkT25seVxuICAgICAqL1xuICAgIHRoaXMud29ybGRUcmFuc2Zvcm0gPSBuZXcgbWF0aC5NYXRyaXgoKTtcbiAgICB0aGlzLmxvY2FsVHJhbnNmb3JtID0gbmV3IG1hdGguTWF0cml4KCk7XG5cblxuICAgIC8qKlxuICAgICAqIFRoZSBhcmVhIHRoZSBmaWx0ZXIgaXMgYXBwbGllZCB0by4gVGhpcyBpcyB1c2VkIGFzIG1vcmUgb2YgYW4gb3B0aW1pc2F0aW9uXG4gICAgICogcmF0aGVyIHRoYW4gZmlndXJpbmcgb3V0IHRoZSBkaW1lbnNpb25zIG9mIHRoZSBkaXNwbGF5T2JqZWN0IGVhY2ggZnJhbWUgeW91IGNhbiBzZXQgdGhpcyByZWN0YW5nbGVcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuUmVjdGFuZ2xlfVxuICAgICAqL1xuICAgIHRoaXMuZmlsdGVyQXJlYSA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBjYWNoZWQgc2luIHJvdGF0aW9uXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9zciA9IDA7XG5cbiAgICAvKipcbiAgICAgKiBjYWNoZWQgY29zIHJvdGF0aW9uXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9jciA9IDE7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgb3JpZ2luYWwsIGNhY2hlZCBib3VuZHMgb2YgdGhlIG9iamVjdFxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5SZWN0YW5nbGV9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9ib3VuZHMgPSBuZXcgbWF0aC5SZWN0YW5nbGUoMCwgMCwgMSwgMSk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgbW9zdCB1cC10by1kYXRlIGJvdW5kcyBvZiB0aGUgb2JqZWN0XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlJlY3RhbmdsZX1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX2N1cnJlbnRCb3VuZHMgPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogVGhlIG9yaWdpbmFsLCBjYWNoZWQgbWFzayBvZiB0aGUgb2JqZWN0XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlJlY3RhbmdsZX1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX21hc2sgPSBudWxsO1xuXG4gICAgdGhpcy5kaXJ0eVRyYW5zZm9ybSA9IHRydWU7XG59XG5cbi8vIGNvbnN0cnVjdG9yXG5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoRXZlbnRFbWl0dGVyLnByb3RvdHlwZSk7XG5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IERpc3BsYXlPYmplY3Q7XG5tb2R1bGUuZXhwb3J0cyA9IERpc3BsYXlPYmplY3Q7XG5cbnZhciBDYWNoZVBvaW50ID0gZnVuY3Rpb24oZG9jKXtcbiAgICBcbiAgICB0aGlzLmRvYyA9IGRvYztcblxuICAgIHRoaXMueCA9IDA7XG4gICAgdGhpcy55ID0gMDtcbn1cblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoQ2FjaGVQb2ludC5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBUaGUgcG9zaXRpb24gb2YgdGhlIGRpc3BsYXlPYmplY3Qgb24gdGhlIHggYXhpcyByZWxhdGl2ZSB0byB0aGUgbG9jYWwgY29vcmRpbmF0ZXMgb2YgdGhlIHBhcmVudC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5EaXNwbGF5T2JqZWN0I1xuICAgICAqL1xuICAgIHg6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5kb2MucG9zaXRpb24ueDtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuZG9jLnBvc2l0aW9uLnggPSB2YWx1ZTtcbiAgICAgICAgICAgIHRoaXMuZG9jLmRpcnR5VHJhbnNmb3JtID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICB5OiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZG9jLnBvc2lpdG9uLnk7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmRvYy5wb3NpdGlvbi55ID0gdmFsdWU7XG4gICAgICAgICAgICB0aGlzLmRvYy5kaXJ0eVRyYW5zZm9ybSA9IHRydWU7XG4gICAgICAgIH1cbiAgICB9XG59KTtcblxuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhEaXNwbGF5T2JqZWN0LnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFRoZSBwb3NpdGlvbiBvZiB0aGUgZGlzcGxheU9iamVjdCBvbiB0aGUgeCBheGlzIHJlbGF0aXZlIHRvIHRoZSBsb2NhbCBjb29yZGluYXRlcyBvZiB0aGUgcGFyZW50LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLkRpc3BsYXlPYmplY3QjXG4gICAgICovXG4gICAgeDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnBvc2l0aW9uLng7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnBvc2l0aW9uLnggPSB2YWx1ZTtcbiAgICAgICAgICAgIHRoaXMuZGlydHlUcmFuc2Zvcm0gPSB0cnVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFRoZSBwb3NpdGlvbiBvZiB0aGUgZGlzcGxheU9iamVjdCBvbiB0aGUgeSBheGlzIHJlbGF0aXZlIHRvIHRoZSBsb2NhbCBjb29yZGluYXRlcyBvZiB0aGUgcGFyZW50LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLkRpc3BsYXlPYmplY3QjXG4gICAgICovXG4gICAgeToge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnBvc2l0aW9uLnk7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnBvc2l0aW9uLnkgPSB2YWx1ZTtcbiAgICAgICAgICAgIHRoaXMuZGlydHlUcmFuc2Zvcm0gPSB0cnVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIHNjYWxlWDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnNjYWxlLng7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnNjYWxlLnggPSB2YWx1ZTtcbiAgICAgICAgICAgIHRoaXMuZGlydHlUcmFuc2Zvcm0gPSB0cnVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFRoZSBwb3NpdGlvbiBvZiB0aGUgZGlzcGxheU9iamVjdCBvbiB0aGUgeSBheGlzIHJlbGF0aXZlIHRvIHRoZSBsb2NhbCBjb29yZGluYXRlcyBvZiB0aGUgcGFyZW50LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLkRpc3BsYXlPYmplY3QjXG4gICAgICovXG4gICAgc2NhbGVZOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuc2NhbGUueTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuc2NhbGUueSA9IHZhbHVlO1xuICAgICAgICAgICAgdGhpcy5kaXJ0eVRyYW5zZm9ybSA9IHRydWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgcm90YXRpb246IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fcm90YXRpb247XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLl9yb3RhdGlvbiA9IHZhbHVlO1xuICAgICAgICAgICAgdGhpcy5kaXJ0eVRyYW5zZm9ybSA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLl9zciA9IE1hdGguc2luKHZhbHVlKTtcbiAgICAgICAgICAgIHRoaXMuX2NyID0gTWF0aC5jb3ModmFsdWUpO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFRoZSBwb3NpdGlvbiBvZiB0aGUgZGlzcGxheU9iamVjdCBvbiB0aGUgeSBheGlzIHJlbGF0aXZlIHRvIHRoZSBsb2NhbCBjb29yZGluYXRlcyBvZiB0aGUgcGFyZW50LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLkRpc3BsYXlPYmplY3QjXG4gICAgICovXG4gICAgc2NhbGVZOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuc2NhbGUueTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuc2NhbGUueSA9IHZhbHVlO1xuICAgICAgICAgICAgdGhpcy5kaXJ0eVRyYW5zZm9ybSA9IHRydWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogSW5kaWNhdGVzIGlmIHRoZSBzcHJpdGUgaXMgZ2xvYmFsbHkgdmlzaWJsZS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICogQG1lbWJlcm9mIFBJWEkuRGlzcGxheU9iamVjdCNcbiAgICAgKiBAcmVhZG9ubHlcbiAgICAgKi9cbiAgICB3b3JsZFZpc2libGU6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICB2YXIgaXRlbSA9IHRoaXM7XG5cbiAgICAgICAgICAgIGRvIHtcbiAgICAgICAgICAgICAgICBpZiAoIWl0ZW0udmlzaWJsZSlcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpdGVtID0gaXRlbS5wYXJlbnQ7XG4gICAgICAgICAgICB9IHdoaWxlIChpdGVtKTtcblxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogU2V0cyBhIG1hc2sgZm9yIHRoZSBkaXNwbGF5T2JqZWN0LiBBIG1hc2sgaXMgYW4gb2JqZWN0IHRoYXQgbGltaXRzIHRoZSB2aXNpYmlsaXR5IG9mIGFuIG9iamVjdCB0byB0aGUgc2hhcGUgb2YgdGhlIG1hc2sgYXBwbGllZCB0byBpdC5cbiAgICAgKiBJbiBQSVhJIGEgcmVndWxhciBtYXNrIG11c3QgYmUgYSBQSVhJLkdyYXBoaWNzIG9yIGEgUElYSS5TcHJpdGUgb2JqZWN0LiBUaGlzIGFsbG93cyBmb3IgbXVjaCBmYXN0ZXIgbWFza2luZyBpbiBjYW52YXMgYXMgaXQgdXRpbGlzZXMgc2hhcGUgY2xpcHBpbmcuXG4gICAgICogVG8gcmVtb3ZlIGEgbWFzaywgc2V0IHRoaXMgcHJvcGVydHkgdG8gbnVsbC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuR3JhcGhpY3N8UElYSS5TcHJpdGV9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuRGlzcGxheU9iamVjdCNcbiAgICAgKi9cbiAgICBtYXNrOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX21hc2s7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICBpZiAodGhpcy5fbWFzaylcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9tYXNrLnJlbmRlcmFibGUgPSB0cnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLl9tYXNrID0gdmFsdWU7XG5cbiAgICAgICAgICAgIGlmICh0aGlzLl9tYXNrKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHRoaXMuX21hc2sucmVuZGVyYWJsZSA9IGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIGZpbHRlcnMgZm9yIHRoZSBkaXNwbGF5T2JqZWN0LlxuICAgICAqICogSU1QT1JUQU5UOiBUaGlzIGlzIGEgd2ViR0wgb25seSBmZWF0dXJlIGFuZCB3aWxsIGJlIGlnbm9yZWQgYnkgdGhlIGNhbnZhcyByZW5kZXJlci5cbiAgICAgKiBUbyByZW1vdmUgZmlsdGVycyBzaW1wbHkgc2V0IHRoaXMgcHJvcGVydHkgdG8gJ251bGwnXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLkFic3RyYWN0RmlsdGVyW119XG4gICAgICogQG1lbWJlcm9mIFBJWEkuRGlzcGxheU9iamVjdCNcbiAgICAgKi9cbiAgICBmaWx0ZXJzOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2ZpbHRlcnMgJiYgdGhpcy5fZmlsdGVycy5zbGljZSgpO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5fZmlsdGVycyA9IHZhbHVlICYmIHZhbHVlLnNsaWNlKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbn0pO1xuXG4vKlxuICogVXBkYXRlcyB0aGUgb2JqZWN0IHRyYW5zZm9ybSBmb3IgcmVuZGVyaW5nXG4gKlxuICogVE9ETyAtIE9wdGltaXphdGlvbiBwYXNzIVxuICovXG5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS51cGRhdGVUcmFuc2Zvcm0gPSBmdW5jdGlvbiAoKVxue1xuICAgIHZhciBwdCA9IHRoaXMucGFyZW50LndvcmxkVHJhbnNmb3JtO1xuICAgIHZhciB3dCA9IHRoaXMud29ybGRUcmFuc2Zvcm07XG4gICAgdmFyIGx0ID0gdGhpcy5sb2NhbFRyYW5zZm9ybTtcblxuICAgIGlmKHRoaXMuZGlydHlUcmFuc2Zvcm0pXG4gICAge1xuICAgICAgICAvLyBnZXQgdGhlIG1hdHJpeCB2YWx1ZXMgb2YgdGhlIGRpc3BsYXlvYmplY3QgYmFzZWQgb24gaXRzIHRyYW5zZm9ybSBwcm9wZXJ0aWVzLi5cbiAgICAgICAgbHQuYSAgPSAgdGhpcy5fY3IgKiB0aGlzLnNjYWxlLng7XG4gICAgICAgIGx0LmIgID0gIHRoaXMuX3NyICogdGhpcy5zY2FsZS54O1xuICAgICAgICBsdC5jICA9IC10aGlzLl9zciAqIHRoaXMuc2NhbGUueTtcbiAgICAgICAgbHQuZCAgPSAgdGhpcy5fY3IgKiB0aGlzLnNjYWxlLnk7XG4gICAgICAgIGx0LnR4ID0gIHRoaXMucG9zaXRpb24ueCAtICh0aGlzLnBpdm90LnggKiBsdC5hICsgdGhpcy5waXZvdC55ICogbHQuYyk7XG4gICAgICAgIGx0LnR5ID0gIHRoaXMucG9zaXRpb24ueSAtICh0aGlzLnBpdm90LnggKiBsdC5iICsgdGhpcy5waXZvdC55ICogbHQuZCk7XG4gICAgfVxuXG4gICAgaWYodGhpcy5kaXJ0eVRyYW5zZm9ybSB8fCB0aGlzLnBhcmVudC5kaXJ0eVRyYW5zZm9ybSlcbiAgICB7ICAgICAgXG4gICAgICAgIC8vIGNvbmNhdCB0aGUgcGFyZW50IG1hdHJpeCB3aXRoIHRoZSBvYmplY3RzIHRyYW5zZm9ybS5cbiAgICAgICAgd3QuYSAgPSBsdC5hICAqIHB0LmEgKyBsdC5iICAqIHB0LmM7XG4gICAgICAgIHd0LmIgID0gbHQuYSAgKiBwdC5iICsgbHQuYiAgKiBwdC5kO1xuICAgICAgICB3dC5jICA9IGx0LmMgICogcHQuYSArIGx0LmQgICogcHQuYztcbiAgICAgICAgd3QuZCAgPSBsdC5jICAqIHB0LmIgKyBsdC5kICAqIHB0LmQ7XG4gICAgICAgIHd0LnR4ID0gbHQudHggKiBwdC5hICsgbHQudHkgKiBwdC5jICsgcHQudHg7XG4gICAgICAgIHd0LnR5ID0gbHQudHggKiBwdC5iICsgbHQudHkgKiBwdC5kICsgcHQudHk7ICAgICAgIFxuICAgIFxuICAgICAgICB0aGlzLl9jdXJyZW50Qm91bmRzID0gbnVsbDtcbiAgICB9XG5cbiAgICAvLyBtdWx0aXBseSB0aGUgYWxwaGFzLi5cbiAgICB0aGlzLndvcmxkQWxwaGEgPSB0aGlzLmFscGhhICogdGhpcy5wYXJlbnQud29ybGRBbHBoYTtcblxuICAgIC8vIHJlc2V0IHRoZSBib3VuZHMgZWFjaCB0aW1lIHRoaXMgaXMgY2FsbGVkIVxuICAgIFxufTtcblxuLy8gcGVyZm9ybWFuY2UgaW5jcmVhc2UgdG8gYXZvaWQgdXNpbmcgY2FsbC4uICgxMHggZmFzdGVyKVxuRGlzcGxheU9iamVjdC5wcm90b3R5cGUuZGlzcGxheU9iamVjdFVwZGF0ZVRyYW5zZm9ybSA9IERpc3BsYXlPYmplY3QucHJvdG90eXBlLnVwZGF0ZVRyYW5zZm9ybTtcblxuLyoqXG4gKlxuICpcbiAqIFJldHJpZXZlcyB0aGUgYm91bmRzIG9mIHRoZSBkaXNwbGF5T2JqZWN0IGFzIGEgcmVjdGFuZ2xlIG9iamVjdFxuICpcbiAqIEBwYXJhbSBtYXRyaXgge1BJWEkuTWF0cml4fVxuICogQHJldHVybiB7UElYSS5SZWN0YW5nbGV9IHRoZSByZWN0YW5ndWxhciBib3VuZGluZyBhcmVhXG4gKi9cbkRpc3BsYXlPYmplY3QucHJvdG90eXBlLmdldEJvdW5kcyA9IGZ1bmN0aW9uIChtYXRyaXgpIC8vIGpzaGludCB1bnVzZWQ6ZmFsc2VcbntcbiAgICByZXR1cm4gbWF0aC5SZWN0YW5nbGUuRU1QVFk7XG59O1xuXG4vKipcbiAqIFJldHJpZXZlcyB0aGUgbG9jYWwgYm91bmRzIG9mIHRoZSBkaXNwbGF5T2JqZWN0IGFzIGEgcmVjdGFuZ2xlIG9iamVjdFxuICpcbiAqIEByZXR1cm4ge1BJWEkuUmVjdGFuZ2xlfSB0aGUgcmVjdGFuZ3VsYXIgYm91bmRpbmcgYXJlYVxuICovXG5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS5nZXRMb2NhbEJvdW5kcyA9IGZ1bmN0aW9uICgpXG57XG4gICAgcmV0dXJuIHRoaXMuZ2V0Qm91bmRzKG1hdGguTWF0cml4LklERU5USVRZKTtcbn07XG5cbi8qKlxuICogQ2FsY3VsYXRlcyB0aGUgZ2xvYmFsIHBvc2l0aW9uIG9mIHRoZSBkaXNwbGF5IG9iamVjdFxuICpcbiAqIEBwYXJhbSBwb3NpdGlvbiB7UElYSS5Qb2ludH0gVGhlIHdvcmxkIG9yaWdpbiB0byBjYWxjdWxhdGUgZnJvbVxuICogQHJldHVybiB7UElYSS5Qb2ludH0gQSBwb2ludCBvYmplY3QgcmVwcmVzZW50aW5nIHRoZSBwb3NpdGlvbiBvZiB0aGlzIG9iamVjdFxuICovXG5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS50b0dsb2JhbCA9IGZ1bmN0aW9uIChwb3NpdGlvbilcbntcbiAgICAvLyB0aGlzIHBhcmVudCBjaGVjayBpcyBmb3IganVzdCBpbiBjYXNlIHRoZSBpdGVtIGlzIGEgcm9vdCBvYmplY3QuXG4gICAgLy8gSWYgaXQgaXMgd2UgbmVlZCB0byBnaXZlIGl0IGEgdGVtcG9yYXJ5IHBhcmVudCBzbyB0aGF0IGRpc3BsYXlPYmplY3RVcGRhdGVUcmFuc2Zvcm0gd29ya3MgY29ycmVjdGx5XG4gICAgLy8gdGhpcyBpcyBtYWlubHkgdG8gYXZvaWQgYSBwYXJlbnQgY2hlY2sgaW4gdGhlIG1haW4gbG9vcC4gRXZlcnkgbGl0dGxlIGhlbHBzIGZvciBwZXJmb3JtYW5jZSA6KVxuICAgIGlmKCF0aGlzLnBhcmVudClcbiAgICB7XG4gICAgICAgIHRoaXMucGFyZW50ID0gX3RlbXBEaXNwbGF5T2JqZWN0UGFyZW50O1xuICAgICAgICB0aGlzLmRpc3BsYXlPYmplY3RVcGRhdGVUcmFuc2Zvcm0oKTtcbiAgICAgICAgdGhpcy5wYXJlbnQgPSBudWxsO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICB0aGlzLmRpc3BsYXlPYmplY3RVcGRhdGVUcmFuc2Zvcm0oKTtcbiAgICB9XG5cbiAgICAvLyBkb24ndCBuZWVkIHRvIHVwZGF0ZSB0aGUgbG90XG4gICAgcmV0dXJuIHRoaXMud29ybGRUcmFuc2Zvcm0uYXBwbHkocG9zaXRpb24pO1xufTtcblxuLyoqXG4gKiBDYWxjdWxhdGVzIHRoZSBsb2NhbCBwb3NpdGlvbiBvZiB0aGUgZGlzcGxheSBvYmplY3QgcmVsYXRpdmUgdG8gYW5vdGhlciBwb2ludFxuICpcbiAqIEBwYXJhbSBwb3NpdGlvbiB7UElYSS5Qb2ludH0gVGhlIHdvcmxkIG9yaWdpbiB0byBjYWxjdWxhdGUgZnJvbVxuICogQHBhcmFtIFtmcm9tXSB7UElYSS5EaXNwbGF5T2JqZWN0fSBUaGUgRGlzcGxheU9iamVjdCB0byBjYWxjdWxhdGUgdGhlIGdsb2JhbCBwb3NpdGlvbiBmcm9tXG4gKiBAcGFyYW0gW3BvaW50XSB7UElYSS5Qb2ludH0gQSBQb2ludCBvYmplY3QgaW4gd2hpY2ggdG8gc3RvcmUgdGhlIHZhbHVlLCBvcHRpb25hbCAob3RoZXJ3aXNlIHdpbGwgY3JlYXRlIGEgbmV3IFBvaW50KVxuICogQHJldHVybiB7UElYSS5Qb2ludH0gQSBwb2ludCBvYmplY3QgcmVwcmVzZW50aW5nIHRoZSBwb3NpdGlvbiBvZiB0aGlzIG9iamVjdFxuICovXG5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS50b0xvY2FsID0gZnVuY3Rpb24gKHBvc2l0aW9uLCBmcm9tLCBwb2ludClcbntcbiAgICBpZiAoZnJvbSlcbiAgICB7XG4gICAgICAgIHBvc2l0aW9uID0gZnJvbS50b0dsb2JhbChwb3NpdGlvbik7XG4gICAgfVxuXG4gICAgLy8gdGhpcyBwYXJlbnQgY2hlY2sgaXMgZm9yIGp1c3QgaW4gY2FzZSB0aGUgaXRlbSBpcyBhIHJvb3Qgb2JqZWN0LlxuICAgIC8vIElmIGl0IGlzIHdlIG5lZWQgdG8gZ2l2ZSBpdCBhIHRlbXBvcmFyeSBwYXJlbnQgc28gdGhhdCBkaXNwbGF5T2JqZWN0VXBkYXRlVHJhbnNmb3JtIHdvcmtzIGNvcnJlY3RseVxuICAgIC8vIHRoaXMgaXMgbWFpbmx5IHRvIGF2b2lkIGEgcGFyZW50IGNoZWNrIGluIHRoZSBtYWluIGxvb3AuIEV2ZXJ5IGxpdHRsZSBoZWxwcyBmb3IgcGVyZm9ybWFuY2UgOilcbiAgICBpZighdGhpcy5wYXJlbnQpXG4gICAge1xuICAgICAgICB0aGlzLnBhcmVudCA9IF90ZW1wRGlzcGxheU9iamVjdFBhcmVudDtcbiAgICAgICAgdGhpcy5kaXNwbGF5T2JqZWN0VXBkYXRlVHJhbnNmb3JtKCk7XG4gICAgICAgIHRoaXMucGFyZW50ID0gbnVsbDtcbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgdGhpcy5kaXNwbGF5T2JqZWN0VXBkYXRlVHJhbnNmb3JtKCk7XG4gICAgfVxuXG4gICAgLy8gc2ltcGx5IGFwcGx5IHRoZSBtYXRyaXguLlxuICAgIHJldHVybiB0aGlzLndvcmxkVHJhbnNmb3JtLmFwcGx5SW52ZXJzZShwb3NpdGlvbiwgcG9pbnQpO1xufTtcblxuLyoqXG4gKiBSZW5kZXJzIHRoZSBvYmplY3QgdXNpbmcgdGhlIFdlYkdMIHJlbmRlcmVyXG4gKlxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLldlYkdMUmVuZGVyZXJ9IFRoZSByZW5kZXJlclxuICogQHByaXZhdGVcbiAqL1xuRGlzcGxheU9iamVjdC5wcm90b3R5cGUucmVuZGVyV2ViR0wgPSBmdW5jdGlvbiAocmVuZGVyZXIpIC8vIGpzaGludCB1bnVzZWQ6ZmFsc2VcbntcbiAgICAvLyBPVkVSV1JJVEU7XG59O1xuXG4vKipcbiAqIFJlbmRlcnMgdGhlIG9iamVjdCB1c2luZyB0aGUgQ2FudmFzIHJlbmRlcmVyXG4gKlxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLkNhbnZhc1JlbmRlcmVyfSBUaGUgcmVuZGVyZXJcbiAqIEBwcml2YXRlXG4gKi9cbkRpc3BsYXlPYmplY3QucHJvdG90eXBlLnJlbmRlckNhbnZhcyA9IGZ1bmN0aW9uIChyZW5kZXJlcikgLy8ganNoaW50IHVudXNlZDpmYWxzZVxue1xuICAgIC8vIE9WRVJXUklURTtcbn07XG4vKipcbiAqIFVzZWZ1bCBmdW5jdGlvbiB0aGF0IHJldHVybnMgYSB0ZXh0dXJlIG9mIHRoZSBkaXNwbGF5IG9iamVjdCB0aGF0IGNhbiB0aGVuIGJlIHVzZWQgdG8gY3JlYXRlIHNwcml0ZXNcbiAqIFRoaXMgY2FuIGJlIHF1aXRlIHVzZWZ1bCBpZiB5b3VyIGRpc3BsYXlPYmplY3QgaXMgc3RhdGljIC8gY29tcGxpY2F0ZWQgYW5kIG5lZWRzIHRvIGJlIHJldXNlZCBtdWx0aXBsZSB0aW1lcy5cbiAqXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuQ2FudmFzUmVuZGVyZXJ8UElYSS5XZWJHTFJlbmRlcmVyfSBUaGUgcmVuZGVyZXIgdXNlZCB0byBnZW5lcmF0ZSB0aGUgdGV4dHVyZS5cbiAqIEBwYXJhbSBzY2FsZU1vZGUge251bWJlcn0gU2VlIHtAbGluayBQSVhJLlNDQUxFX01PREVTfSBmb3IgcG9zc2libGUgdmFsdWVzXG4gKiBAcGFyYW0gcmVzb2x1dGlvbiB7bnVtYmVyfSBUaGUgcmVzb2x1dGlvbiBvZiB0aGUgdGV4dHVyZSBiZWluZyBnZW5lcmF0ZWRcbiAqIEByZXR1cm4ge1BJWEkuVGV4dHVyZX0gYSB0ZXh0dXJlIG9mIHRoZSBkaXNwbGF5IG9iamVjdFxuICovXG5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS5nZW5lcmF0ZVRleHR1cmUgPSBmdW5jdGlvbiAocmVuZGVyZXIsIHNjYWxlTW9kZSwgcmVzb2x1dGlvbilcbntcbiAgICB2YXIgYm91bmRzID0gdGhpcy5nZXRMb2NhbEJvdW5kcygpO1xuXG4gICAgdmFyIHJlbmRlclRleHR1cmUgPSBuZXcgUmVuZGVyVGV4dHVyZShyZW5kZXJlciwgYm91bmRzLndpZHRoIHwgMCwgYm91bmRzLmhlaWdodCB8IDAsIHNjYWxlTW9kZSwgcmVzb2x1dGlvbik7XG5cbiAgICBfdGVtcE1hdHJpeC50eCA9IC1ib3VuZHMueDtcbiAgICBfdGVtcE1hdHJpeC50eSA9IC1ib3VuZHMueTtcblxuICAgIHJlbmRlclRleHR1cmUucmVuZGVyKHRoaXMsIF90ZW1wTWF0cml4KTtcblxuICAgIHJldHVybiByZW5kZXJUZXh0dXJlO1xufTtcblxuLyoqXG4gKiBTZXQgdGhlIHBhcmVudCBDb250YWluZXIgb2YgdGhpcyBEaXNwbGF5T2JqZWN0XG4gKlxuICogQHBhcmFtIGNvbnRhaW5lciB7Q29udGFpbmVyfSBUaGUgQ29udGFpbmVyIHRvIGFkZCB0aGlzIERpc3BsYXlPYmplY3QgdG9cbiAqIEByZXR1cm4ge0NvbnRhaW5lcn0gVGhlIENvbnRhaW5lciB0aGF0IHRoaXMgRGlzcGxheU9iamVjdCB3YXMgYWRkZWQgdG9cbiAqL1xuRGlzcGxheU9iamVjdC5wcm90b3R5cGUuc2V0UGFyZW50ID0gZnVuY3Rpb24gKGNvbnRhaW5lcilcbntcbiAgICBpZiAoIWNvbnRhaW5lciB8fCAhY29udGFpbmVyLmFkZENoaWxkKVxuICAgIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdzZXRQYXJlbnQ6IEFyZ3VtZW50IG11c3QgYmUgYSBDb250YWluZXInKTtcbiAgICB9XG5cbiAgICBjb250YWluZXIuYWRkQ2hpbGQodGhpcyk7XG4gICAgcmV0dXJuIGNvbnRhaW5lcjtcbn07XG5cbi8qKlxuICogQ29udmVuaWVuY2UgZnVuY3Rpb24gdG8gc2V0IHRoZSBwb3N0aW9uLCBzY2FsZSwgc2tldyBhbmQgcGl2b3QgYXQgb25jZS5cbiAqXG4gKiBAcGFyYW0gW3g9MF0ge251bWJlcn0gVGhlIFggcG9zaXRpb25cbiAqIEBwYXJhbSBbeT0wXSB7bnVtYmVyfSBUaGUgWSBwb3NpdGlvblxuICogQHBhcmFtIFtzY2FsZVg9MV0ge251bWJlcn0gVGhlIFggc2NhbGUgdmFsdWVcbiAqIEBwYXJhbSBbc2NhbGVZPTFdIHtudW1iZXJ9IFRoZSBZIHNjYWxlIHZhbHVlXG4gKiBAcGFyYW0gW3JvdGF0aW9uPTBdIHtudW1iZXJ9IFRoZSByb3RhdGlvblxuICogQHBhcmFtIFtza2V3WD0wXSB7bnVtYmVyfSBUaGUgWCBza2V3IHZhbHVlXG4gKiBAcGFyYW0gW3NrZXdZPTBdIHtudW1iZXJ9IFRoZSBZIHNrZXcgdmFsdWVcbiAqIEBwYXJhbSBbcGl2b3RYPTBdIHtudW1iZXJ9IFRoZSBYIHBpdm90IHZhbHVlXG4gKiBAcGFyYW0gW3Bpdm90WT0wXSB7bnVtYmVyfSBUaGUgWSBwaXZvdCB2YWx1ZVxuICogQHJldHVybiB7UElYSS5EaXNwbGF5T2JqZWN0fVxuICovXG5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS5zZXRUcmFuc2Zvcm0gPSBmdW5jdGlvbih4LCB5LCBzY2FsZVgsIHNjYWxlWSwgcm90YXRpb24sIHNrZXdYLCBza2V3WSwgcGl2b3RYLCBwaXZvdFkpIC8vanNoaW50IGlnbm9yZTpsaW5lXG57XG4gICAgdGhpcy5wb3NpdGlvbi54ID0geCB8fCAwO1xuICAgIHRoaXMucG9zaXRpb24ueSA9IHkgfHwgMDtcbiAgICB0aGlzLnNjYWxlLnggPSAhc2NhbGVYID8gMSA6IHNjYWxlWDtcbiAgICB0aGlzLnNjYWxlLnkgPSAhc2NhbGVZID8gMSA6IHNjYWxlWTtcbiAgICB0aGlzLnJvdGF0aW9uID0gcm90YXRpb24gfHwgMDtcbiAgICB0aGlzLnNrZXcueCA9IHNrZXdYIHx8IDA7XG4gICAgdGhpcy5za2V3LnkgPSBza2V3WSB8fCAwO1xuICAgIHRoaXMucGl2b3QueCA9IHBpdm90WCB8fCAwO1xuICAgIHRoaXMucGl2b3QueSA9IHBpdm90WSB8fCAwO1xuICAgIHRoaXMuZGlydHlUcmFuc2Zvcm0gPSB0cnVlO1xuICAgIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBCYXNlIGRlc3Ryb3kgbWV0aG9kIGZvciBnZW5lcmljIGRpc3BsYXkgb2JqZWN0c1xuICpcbiAqL1xuRGlzcGxheU9iamVjdC5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uICgpXG57XG5cbiAgICB0aGlzLnBvc2l0aW9uID0gbnVsbDtcbiAgICB0aGlzLnNjYWxlID0gbnVsbDtcbiAgICB0aGlzLnBpdm90ID0gbnVsbDtcbiAgICB0aGlzLnNrZXcgPSBudWxsO1xuXG4gICAgdGhpcy5wYXJlbnQgPSBudWxsO1xuXG4gICAgdGhpcy5fYm91bmRzID0gbnVsbDtcbiAgICB0aGlzLl9jdXJyZW50Qm91bmRzID0gbnVsbDtcbiAgICB0aGlzLl9tYXNrID0gbnVsbDtcblxuICAgIHRoaXMud29ybGRUcmFuc2Zvcm0gPSBudWxsO1xuICAgIHRoaXMuZmlsdGVyQXJlYSA9IG51bGw7XG59O1xuIiwidmFyIENvbnRhaW5lciA9IHJlcXVpcmUoJy4uL2Rpc3BsYXkvQ29udGFpbmVyJyksXG4gICAgVGV4dHVyZSA9IHJlcXVpcmUoJy4uL3RleHR1cmVzL1RleHR1cmUnKSxcbiAgICBDYW52YXNCdWZmZXIgPSByZXF1aXJlKCcuLi9yZW5kZXJlcnMvY2FudmFzL3V0aWxzL0NhbnZhc0J1ZmZlcicpLFxuICAgIENhbnZhc0dyYXBoaWNzID0gcmVxdWlyZSgnLi4vcmVuZGVyZXJzL2NhbnZhcy91dGlscy9DYW52YXNHcmFwaGljcycpLFxuICAgIEdyYXBoaWNzRGF0YSA9IHJlcXVpcmUoJy4vR3JhcGhpY3NEYXRhJyksXG4gICAgbWF0aCA9IHJlcXVpcmUoJy4uL21hdGgnKSxcbiAgICBDT05TVCA9IHJlcXVpcmUoJy4uL2NvbnN0JyksXG4gICAgdGVtcFBvaW50ID0gbmV3IG1hdGguUG9pbnQoKTtcblxuLyoqXG4gKiBUaGUgR3JhcGhpY3MgY2xhc3MgY29udGFpbnMgbWV0aG9kcyB1c2VkIHRvIGRyYXcgcHJpbWl0aXZlIHNoYXBlcyBzdWNoIGFzIGxpbmVzLCBjaXJjbGVzIGFuZFxuICogcmVjdGFuZ2xlcyB0byB0aGUgZGlzcGxheSwgYW5kIHRvIGNvbG9yIGFuZCBmaWxsIHRoZW0uXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLkNvbnRhaW5lclxuICogQG1lbWJlcm9mIFBJWElcbiAqL1xuZnVuY3Rpb24gR3JhcGhpY3MoKVxue1xuICAgIENvbnRhaW5lci5jYWxsKHRoaXMpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGFscGhhIHZhbHVlIHVzZWQgd2hlbiBmaWxsaW5nIHRoZSBHcmFwaGljcyBvYmplY3QuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMVxuICAgICAqL1xuICAgIHRoaXMuZmlsbEFscGhhID0gMTtcblxuICAgIC8qKlxuICAgICAqIFRoZSB3aWR0aCAodGhpY2tuZXNzKSBvZiBhbnkgbGluZXMgZHJhd24uXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMFxuICAgICAqL1xuICAgIHRoaXMubGluZVdpZHRoID0gMDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBjb2xvciBvZiBhbnkgbGluZXMgZHJhd24uXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtzdHJpbmd9XG4gICAgICogQGRlZmF1bHQgMFxuICAgICAqL1xuICAgIHRoaXMubGluZUNvbG9yID0gMDtcblxuICAgIC8qKlxuICAgICAqIEdyYXBoaWNzIGRhdGFcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuR3JhcGhpY3NEYXRhW119XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLmdyYXBoaWNzRGF0YSA9IFtdO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHRpbnQgYXBwbGllZCB0byB0aGUgZ3JhcGhpYyBzaGFwZS4gVGhpcyBpcyBhIGhleCB2YWx1ZS4gQXBwbHkgYSB2YWx1ZSBvZiAweEZGRkZGRiB0byByZXNldCB0aGUgdGludC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAweEZGRkZGRlxuICAgICAqL1xuICAgIHRoaXMudGludCA9IDB4RkZGRkZGO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHByZXZpb3VzIHRpbnQgYXBwbGllZCB0byB0aGUgZ3JhcGhpYyBzaGFwZS4gVXNlZCB0byBjb21wYXJlIHRvIHRoZSBjdXJyZW50IHRpbnQgYW5kIGNoZWNrIGlmIHRoZXJlcyBjaGFuZ2UuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAZGVmYXVsdCAweEZGRkZGRlxuICAgICAqL1xuICAgIHRoaXMuX3ByZXZUaW50ID0gMHhGRkZGRkY7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYmxlbmQgbW9kZSB0byBiZSBhcHBsaWVkIHRvIHRoZSBncmFwaGljIHNoYXBlLiBBcHBseSBhIHZhbHVlIG9mIGBQSVhJLkJMRU5EX01PREVTLk5PUk1BTGAgdG8gcmVzZXQgdGhlIGJsZW5kIG1vZGUuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgUElYSS5CTEVORF9NT0RFUy5OT1JNQUw7XG4gICAgICogQHNlZSBQSVhJLkJMRU5EX01PREVTXG4gICAgICovXG4gICAgdGhpcy5ibGVuZE1vZGUgPSBDT05TVC5CTEVORF9NT0RFUy5OT1JNQUw7XG5cbiAgICAvKipcbiAgICAgKiBDdXJyZW50IHBhdGhcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuR3JhcGhpY3NEYXRhfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5jdXJyZW50UGF0aCA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBBcnJheSBjb250YWluaW5nIHNvbWUgV2ViR0wtcmVsYXRlZCBwcm9wZXJ0aWVzIHVzZWQgYnkgdGhlIFdlYkdMIHJlbmRlcmVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7b2JqZWN0PG51bWJlciwgb2JqZWN0Pn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIC8vIFRPRE8gLSBfd2ViZ2wgc2hvdWxkIHVzZSBhIHByb3RvdHlwZSBvYmplY3QsIG5vdCBhIHJhbmRvbSB1bmRvY3VtZW50ZWQgb2JqZWN0Li4uXG4gICAgdGhpcy5fd2ViR0wgPSB7fTtcblxuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgdGhpcyBzaGFwZSBpcyBiZWluZyB1c2VkIGFzIGEgbWFzay5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICovXG4gICAgdGhpcy5pc01hc2sgPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBib3VuZHMnIHBhZGRpbmcgdXNlZCBmb3IgYm91bmRzIGNhbGN1bGF0aW9uLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMuYm91bmRzUGFkZGluZyA9IDA7XG5cbiAgICAvKipcbiAgICAgKiBBIGNhY2hlIG9mIHRoZSBsb2NhbCBib3VuZHMgdG8gcHJldmVudCByZWNhbGN1bGF0aW9uLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5SZWN0YW5nbGV9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9sb2NhbEJvdW5kcyA9IG5ldyBtYXRoLlJlY3RhbmdsZSgwLDAsMSwxKTtcblxuICAgIC8qKlxuICAgICAqIFVzZWQgdG8gZGV0ZWN0IGlmIHRoZSBncmFwaGljcyBvYmplY3QgaGFzIGNoYW5nZWQuIElmIHRoaXMgaXMgc2V0IHRvIHRydWUgdGhlbiB0aGUgZ3JhcGhpY3NcbiAgICAgKiBvYmplY3Qgd2lsbCBiZSByZWNhbGN1bGF0ZWQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5kaXJ0eSA9IHRydWU7XG5cbiAgICAvKipcbiAgICAgKiBVc2VkIHRvIGRldGVjdCBpZiB0aGUgV2ViR0wgZ3JhcGhpY3Mgb2JqZWN0IGhhcyBjaGFuZ2VkLiBJZiB0aGlzIGlzIHNldCB0byB0cnVlIHRoZW4gdGhlXG4gICAgICogZ3JhcGhpY3Mgb2JqZWN0IHdpbGwgYmUgcmVjYWxjdWxhdGVkLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuZ2xEaXJ0eSA9IGZhbHNlO1xuXG4gICAgdGhpcy5ib3VuZHNEaXJ0eSA9IHRydWU7XG5cbiAgICAvKipcbiAgICAgKiBVc2VkIHRvIGRldGVjdCBpZiB0aGUgY2FjaGVkIHNwcml0ZSBvYmplY3QgbmVlZHMgdG8gYmUgdXBkYXRlZC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLmNhY2hlZFNwcml0ZURpcnR5ID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBXaGVuIGNhY2hlQXNCaXRtYXAgaXMgc2V0IHRvIHRydWUgdGhlIGdyYXBoaWNzIG9iamVjdCB3aWxsIGJlIHJlbmRlcmVkIGFzIGlmIGl0IHdhcyBhIHNwcml0ZS5cbiAgICAgKiBUaGlzIGlzIHVzZWZ1bCBpZiB5b3VyIGdyYXBoaWNzIGVsZW1lbnQgZG9lcyBub3QgY2hhbmdlIG9mdGVuLCBhcyBpdCB3aWxsIHNwZWVkIHVwIHRoZSByZW5kZXJpbmdcbiAgICAgKiBvZiB0aGUgb2JqZWN0IGluIGV4Y2hhbmdlIGZvciB0YWtpbmcgdXAgdGV4dHVyZSBtZW1vcnkuIEl0IGlzIGFsc28gdXNlZnVsIGlmIHlvdSBuZWVkIHRoZSBncmFwaGljc1xuICAgICAqIG9iamVjdCB0byBiZSBhbnRpLWFsaWFzZWQsIGJlY2F1c2UgaXQgd2lsbCBiZSByZW5kZXJlZCB1c2luZyBjYW52YXMuIFRoaXMgaXMgbm90IHJlY29tbWVuZGVkIGlmXG4gICAgICogeW91IGFyZSBjb25zdGFudGx5IHJlZHJhd2luZyB0aGUgZ3JhcGhpY3MgZWxlbWVudC5cbiAgICAgKlxuICAgICAqIEBuYW1lIGNhY2hlQXNCaXRtYXBcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLkdyYXBoaWNzI1xuICAgICAqIEBkZWZhdWx0IGZhbHNlXG4gICAgICovXG59XG5cbi8vIGNvbnN0cnVjdG9yXG5HcmFwaGljcy5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKENvbnRhaW5lci5wcm90b3R5cGUpO1xuR3JhcGhpY3MucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gR3JhcGhpY3M7XG5tb2R1bGUuZXhwb3J0cyA9IEdyYXBoaWNzO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBuZXcgR3JhcGhpY3Mgb2JqZWN0IHdpdGggdGhlIHNhbWUgdmFsdWVzIGFzIHRoaXMgb25lLlxuICogTm90ZSB0aGF0IHRoZSBvbmx5IHRoZSBwcm9wZXJ0aWVzIG9mIHRoZSBvYmplY3QgYXJlIGNsb25lZCwgbm90IGl0cyB0cmFuc2Zvcm0gKHBvc2l0aW9uLHNjYWxlLGV0YylcbiAqXG4gKiBAcmV0dXJuIHtQSVhJLkdyYXBoaWNzfVxuICovXG5HcmFwaGljcy5wcm90b3R5cGUuY2xvbmUgPSBmdW5jdGlvbiAoKVxue1xuICAgIHZhciBjbG9uZSA9IG5ldyBHcmFwaGljcygpO1xuXG4gICAgY2xvbmUucmVuZGVyYWJsZSAgICA9IHRoaXMucmVuZGVyYWJsZTtcbiAgICBjbG9uZS5maWxsQWxwaGEgICAgID0gdGhpcy5maWxsQWxwaGE7XG4gICAgY2xvbmUubGluZVdpZHRoICAgICA9IHRoaXMubGluZVdpZHRoO1xuICAgIGNsb25lLmxpbmVDb2xvciAgICAgPSB0aGlzLmxpbmVDb2xvcjtcbiAgICBjbG9uZS50aW50ICAgICAgICAgID0gdGhpcy50aW50O1xuICAgIGNsb25lLmJsZW5kTW9kZSAgICAgPSB0aGlzLmJsZW5kTW9kZTtcbiAgICBjbG9uZS5pc01hc2sgICAgICAgID0gdGhpcy5pc01hc2s7XG4gICAgY2xvbmUuYm91bmRzUGFkZGluZyA9IHRoaXMuYm91bmRzUGFkZGluZztcbiAgICBjbG9uZS5kaXJ0eSAgICAgICAgID0gdHJ1ZTtcbiAgICBjbG9uZS5nbERpcnR5ICAgICAgID0gdHJ1ZTtcbiAgICBjbG9uZS5jYWNoZWRTcHJpdGVEaXJ0eSA9IHRoaXMuY2FjaGVkU3ByaXRlRGlydHk7XG5cbiAgICAvLyBjb3B5IGdyYXBoaWNzIGRhdGFcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuZ3JhcGhpY3NEYXRhLmxlbmd0aDsgKytpKVxuICAgIHtcbiAgICAgICAgY2xvbmUuZ3JhcGhpY3NEYXRhLnB1c2godGhpcy5ncmFwaGljc0RhdGFbaV0uY2xvbmUoKSk7XG4gICAgfVxuXG4gICAgY2xvbmUuY3VycmVudFBhdGggPSBjbG9uZS5ncmFwaGljc0RhdGFbY2xvbmUuZ3JhcGhpY3NEYXRhLmxlbmd0aCAtIDFdO1xuXG4gICAgY2xvbmUudXBkYXRlTG9jYWxCb3VuZHMoKTtcblxuICAgIHJldHVybiBjbG9uZTtcbn07XG5cbi8qKlxuICogU3BlY2lmaWVzIHRoZSBsaW5lIHN0eWxlIHVzZWQgZm9yIHN1YnNlcXVlbnQgY2FsbHMgdG8gR3JhcGhpY3MgbWV0aG9kcyBzdWNoIGFzIHRoZSBsaW5lVG8oKSBtZXRob2Qgb3IgdGhlIGRyYXdDaXJjbGUoKSBtZXRob2QuXG4gKlxuICogQHBhcmFtIGxpbmVXaWR0aCB7bnVtYmVyfSB3aWR0aCBvZiB0aGUgbGluZSB0byBkcmF3LCB3aWxsIHVwZGF0ZSB0aGUgb2JqZWN0cyBzdG9yZWQgc3R5bGVcbiAqIEBwYXJhbSBjb2xvciB7bnVtYmVyfSBjb2xvciBvZiB0aGUgbGluZSB0byBkcmF3LCB3aWxsIHVwZGF0ZSB0aGUgb2JqZWN0cyBzdG9yZWQgc3R5bGVcbiAqIEBwYXJhbSBhbHBoYSB7bnVtYmVyfSBhbHBoYSBvZiB0aGUgbGluZSB0byBkcmF3LCB3aWxsIHVwZGF0ZSB0aGUgb2JqZWN0cyBzdG9yZWQgc3R5bGVcbiAqIEByZXR1cm4ge1BJWEkuR3JhcGhpY3N9XG4gKi9cbkdyYXBoaWNzLnByb3RvdHlwZS5saW5lU3R5bGUgPSBmdW5jdGlvbiAobGluZVdpZHRoLCBjb2xvciwgYWxwaGEpXG57XG4gICAgdGhpcy5saW5lV2lkdGggPSBsaW5lV2lkdGggfHwgMDtcbiAgICB0aGlzLmxpbmVDb2xvciA9IGNvbG9yIHx8IDA7XG4gICAgdGhpcy5saW5lQWxwaGEgPSAoYWxwaGEgPT09IHVuZGVmaW5lZCkgPyAxIDogYWxwaGE7XG5cbiAgICBpZiAodGhpcy5jdXJyZW50UGF0aClcbiAgICB7XG4gICAgICAgIGlmICh0aGlzLmN1cnJlbnRQYXRoLnNoYXBlLnBvaW50cy5sZW5ndGgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIC8vIGhhbGZ3YXkgdGhyb3VnaCBhIGxpbmU/IHN0YXJ0IGEgbmV3IG9uZSFcbiAgICAgICAgICAgIHZhciBzaGFwZSA9IG5ldyBtYXRoLlBvbHlnb24odGhpcy5jdXJyZW50UGF0aC5zaGFwZS5wb2ludHMuc2xpY2UoLTIpKTtcbiAgICAgICAgICAgIHNoYXBlLmNsb3NlZCA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5kcmF3U2hhcGUoc2hhcGUpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2VcbiAgICAgICAge1xuICAgICAgICAgICAgLy8gb3RoZXJ3aXNlIGl0cyBlbXB0eSBzbyBsZXRzIGp1c3Qgc2V0IHRoZSBsaW5lIHByb3BlcnRpZXNcbiAgICAgICAgICAgIHRoaXMuY3VycmVudFBhdGgubGluZVdpZHRoID0gdGhpcy5saW5lV2lkdGg7XG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRQYXRoLmxpbmVDb2xvciA9IHRoaXMubGluZUNvbG9yO1xuICAgICAgICAgICAgdGhpcy5jdXJyZW50UGF0aC5saW5lQWxwaGEgPSB0aGlzLmxpbmVBbHBoYTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBNb3ZlcyB0aGUgY3VycmVudCBkcmF3aW5nIHBvc2l0aW9uIHRvIHgsIHkuXG4gKlxuICogQHBhcmFtIHgge251bWJlcn0gdGhlIFggY29vcmRpbmF0ZSB0byBtb3ZlIHRvXG4gKiBAcGFyYW0geSB7bnVtYmVyfSB0aGUgWSBjb29yZGluYXRlIHRvIG1vdmUgdG9cbiAqIEByZXR1cm4ge1BJWEkuR3JhcGhpY3N9XG4gICovXG5HcmFwaGljcy5wcm90b3R5cGUubW92ZVRvID0gZnVuY3Rpb24gKHgsIHkpXG57XG4gICAgdmFyIHNoYXBlID0gbmV3IG1hdGguUG9seWdvbihbeCx5XSk7XG4gICAgc2hhcGUuY2xvc2VkID0gZmFsc2U7XG4gICAgdGhpcy5kcmF3U2hhcGUoc2hhcGUpO1xuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIERyYXdzIGEgbGluZSB1c2luZyB0aGUgY3VycmVudCBsaW5lIHN0eWxlIGZyb20gdGhlIGN1cnJlbnQgZHJhd2luZyBwb3NpdGlvbiB0byAoeCwgeSk7XG4gKiBUaGUgY3VycmVudCBkcmF3aW5nIHBvc2l0aW9uIGlzIHRoZW4gc2V0IHRvICh4LCB5KS5cbiAqXG4gKiBAcGFyYW0geCB7bnVtYmVyfSB0aGUgWCBjb29yZGluYXRlIHRvIGRyYXcgdG9cbiAqIEBwYXJhbSB5IHtudW1iZXJ9IHRoZSBZIGNvb3JkaW5hdGUgdG8gZHJhdyB0b1xuICogQHJldHVybiB7UElYSS5HcmFwaGljc31cbiAqL1xuR3JhcGhpY3MucHJvdG90eXBlLmxpbmVUbyA9IGZ1bmN0aW9uICh4LCB5KVxue1xuICAgIHRoaXMuY3VycmVudFBhdGguc2hhcGUucG9pbnRzLnB1c2goeCwgeSk7XG4gICAgdGhpcy5kaXJ0eSA9IHRydWU7XG5cbiAgICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogQ2FsY3VsYXRlIHRoZSBwb2ludHMgZm9yIGEgcXVhZHJhdGljIGJlemllciBjdXJ2ZSBhbmQgdGhlbiBkcmF3cyBpdC5cbiAqIEJhc2VkIG9uOiBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy83ODUwOTcvaG93LWRvLWktaW1wbGVtZW50LWEtYmV6aWVyLWN1cnZlLWluLWNcbiAqXG4gKiBAcGFyYW0gY3BYIHtudW1iZXJ9IENvbnRyb2wgcG9pbnQgeFxuICogQHBhcmFtIGNwWSB7bnVtYmVyfSBDb250cm9sIHBvaW50IHlcbiAqIEBwYXJhbSB0b1gge251bWJlcn0gRGVzdGluYXRpb24gcG9pbnQgeFxuICogQHBhcmFtIHRvWSB7bnVtYmVyfSBEZXN0aW5hdGlvbiBwb2ludCB5XG4gKiBAcmV0dXJuIHtQSVhJLkdyYXBoaWNzfVxuICovXG5HcmFwaGljcy5wcm90b3R5cGUucXVhZHJhdGljQ3VydmVUbyA9IGZ1bmN0aW9uIChjcFgsIGNwWSwgdG9YLCB0b1kpXG57XG4gICAgaWYgKHRoaXMuY3VycmVudFBhdGgpXG4gICAge1xuICAgICAgICBpZiAodGhpcy5jdXJyZW50UGF0aC5zaGFwZS5wb2ludHMubGVuZ3RoID09PSAwKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRQYXRoLnNoYXBlLnBvaW50cyA9IFswLCAwXTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICB0aGlzLm1vdmVUbygwLDApO1xuICAgIH1cblxuICAgIHZhciB4YSxcbiAgICAgICAgeWEsXG4gICAgICAgIG4gPSAyMCxcbiAgICAgICAgcG9pbnRzID0gdGhpcy5jdXJyZW50UGF0aC5zaGFwZS5wb2ludHM7XG5cbiAgICBpZiAocG9pbnRzLmxlbmd0aCA9PT0gMClcbiAgICB7XG4gICAgICAgIHRoaXMubW92ZVRvKDAsIDApO1xuICAgIH1cblxuICAgIHZhciBmcm9tWCA9IHBvaW50c1twb2ludHMubGVuZ3RoLTJdO1xuICAgIHZhciBmcm9tWSA9IHBvaW50c1twb2ludHMubGVuZ3RoLTFdO1xuXG4gICAgdmFyIGogPSAwO1xuICAgIGZvciAodmFyIGkgPSAxOyBpIDw9IG47ICsraSlcbiAgICB7XG4gICAgICAgIGogPSBpIC8gbjtcblxuICAgICAgICB4YSA9IGZyb21YICsgKCAoY3BYIC0gZnJvbVgpICogaiApO1xuICAgICAgICB5YSA9IGZyb21ZICsgKCAoY3BZIC0gZnJvbVkpICogaiApO1xuXG4gICAgICAgIHBvaW50cy5wdXNoKCB4YSArICggKChjcFggKyAoICh0b1ggLSBjcFgpICogaiApKSAtIHhhKSAqIGogKSxcbiAgICAgICAgICAgICAgICAgICAgIHlhICsgKCAoKGNwWSArICggKHRvWSAtIGNwWSkgKiBqICkpIC0geWEpICogaiApICk7XG4gICAgfVxuXG4gICAgdGhpcy5kaXJ0eSA9IHRoaXMuYm91bmRzRGlydHkgPSB0cnVlO1xuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIENhbGN1bGF0ZSB0aGUgcG9pbnRzIGZvciBhIGJlemllciBjdXJ2ZSBhbmQgdGhlbiBkcmF3cyBpdC5cbiAqXG4gKiBAcGFyYW0gY3BYIHtudW1iZXJ9IENvbnRyb2wgcG9pbnQgeFxuICogQHBhcmFtIGNwWSB7bnVtYmVyfSBDb250cm9sIHBvaW50IHlcbiAqIEBwYXJhbSBjcFgyIHtudW1iZXJ9IFNlY29uZCBDb250cm9sIHBvaW50IHhcbiAqIEBwYXJhbSBjcFkyIHtudW1iZXJ9IFNlY29uZCBDb250cm9sIHBvaW50IHlcbiAqIEBwYXJhbSB0b1gge251bWJlcn0gRGVzdGluYXRpb24gcG9pbnQgeFxuICogQHBhcmFtIHRvWSB7bnVtYmVyfSBEZXN0aW5hdGlvbiBwb2ludCB5XG4gKiBAcmV0dXJuIHtQSVhJLkdyYXBoaWNzfVxuICovXG5HcmFwaGljcy5wcm90b3R5cGUuYmV6aWVyQ3VydmVUbyA9IGZ1bmN0aW9uIChjcFgsIGNwWSwgY3BYMiwgY3BZMiwgdG9YLCB0b1kpXG57XG4gICAgaWYgKHRoaXMuY3VycmVudFBhdGgpXG4gICAge1xuICAgICAgICBpZiAodGhpcy5jdXJyZW50UGF0aC5zaGFwZS5wb2ludHMubGVuZ3RoID09PSAwKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRQYXRoLnNoYXBlLnBvaW50cyA9IFswLCAwXTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICB0aGlzLm1vdmVUbygwLDApO1xuICAgIH1cblxuICAgIHZhciBuID0gMjAsXG4gICAgICAgIGR0LFxuICAgICAgICBkdDIsXG4gICAgICAgIGR0MyxcbiAgICAgICAgdDIsXG4gICAgICAgIHQzLFxuICAgICAgICBwb2ludHMgPSB0aGlzLmN1cnJlbnRQYXRoLnNoYXBlLnBvaW50cztcblxuICAgIHZhciBmcm9tWCA9IHBvaW50c1twb2ludHMubGVuZ3RoLTJdO1xuICAgIHZhciBmcm9tWSA9IHBvaW50c1twb2ludHMubGVuZ3RoLTFdO1xuXG4gICAgdmFyIGogPSAwO1xuXG4gICAgZm9yICh2YXIgaSA9IDE7IGkgPD0gbjsgKytpKVxuICAgIHtcbiAgICAgICAgaiA9IGkgLyBuO1xuXG4gICAgICAgIGR0ID0gKDEgLSBqKTtcbiAgICAgICAgZHQyID0gZHQgKiBkdDtcbiAgICAgICAgZHQzID0gZHQyICogZHQ7XG5cbiAgICAgICAgdDIgPSBqICogajtcbiAgICAgICAgdDMgPSB0MiAqIGo7XG5cbiAgICAgICAgcG9pbnRzLnB1c2goIGR0MyAqIGZyb21YICsgMyAqIGR0MiAqIGogKiBjcFggKyAzICogZHQgKiB0MiAqIGNwWDIgKyB0MyAqIHRvWCxcbiAgICAgICAgICAgICAgICAgICAgIGR0MyAqIGZyb21ZICsgMyAqIGR0MiAqIGogKiBjcFkgKyAzICogZHQgKiB0MiAqIGNwWTIgKyB0MyAqIHRvWSk7XG4gICAgfVxuXG4gICAgdGhpcy5kaXJ0eSA9IHRoaXMuYm91bmRzRGlydHkgPSB0cnVlO1xuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIFRoZSBhcmNUbygpIG1ldGhvZCBjcmVhdGVzIGFuIGFyYy9jdXJ2ZSBiZXR3ZWVuIHR3byB0YW5nZW50cyBvbiB0aGUgY2FudmFzLlxuICpcbiAqIFwiYm9ycm93ZWRcIiBmcm9tIGh0dHBzOi8vY29kZS5nb29nbGUuY29tL3AvZnhjYW52YXMvIC0gdGhhbmtzIGdvb2dsZSFcbiAqXG4gKiBAcGFyYW0geDEge251bWJlcn0gVGhlIHgtY29vcmRpbmF0ZSBvZiB0aGUgYmVnaW5uaW5nIG9mIHRoZSBhcmNcbiAqIEBwYXJhbSB5MSB7bnVtYmVyfSBUaGUgeS1jb29yZGluYXRlIG9mIHRoZSBiZWdpbm5pbmcgb2YgdGhlIGFyY1xuICogQHBhcmFtIHgyIHtudW1iZXJ9IFRoZSB4LWNvb3JkaW5hdGUgb2YgdGhlIGVuZCBvZiB0aGUgYXJjXG4gKiBAcGFyYW0geTIge251bWJlcn0gVGhlIHktY29vcmRpbmF0ZSBvZiB0aGUgZW5kIG9mIHRoZSBhcmNcbiAqIEBwYXJhbSByYWRpdXMge251bWJlcn0gVGhlIHJhZGl1cyBvZiB0aGUgYXJjXG4gKiBAcmV0dXJuIHtQSVhJLkdyYXBoaWNzfVxuICovXG5HcmFwaGljcy5wcm90b3R5cGUuYXJjVG8gPSBmdW5jdGlvbiAoeDEsIHkxLCB4MiwgeTIsIHJhZGl1cylcbntcbiAgICBpZiAodGhpcy5jdXJyZW50UGF0aClcbiAgICB7XG4gICAgICAgIGlmICh0aGlzLmN1cnJlbnRQYXRoLnNoYXBlLnBvaW50cy5sZW5ndGggPT09IDApXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuY3VycmVudFBhdGguc2hhcGUucG9pbnRzLnB1c2goeDEsIHkxKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICB0aGlzLm1vdmVUbyh4MSwgeTEpO1xuICAgIH1cblxuICAgIHZhciBwb2ludHMgPSB0aGlzLmN1cnJlbnRQYXRoLnNoYXBlLnBvaW50cyxcbiAgICAgICAgZnJvbVggPSBwb2ludHNbcG9pbnRzLmxlbmd0aC0yXSxcbiAgICAgICAgZnJvbVkgPSBwb2ludHNbcG9pbnRzLmxlbmd0aC0xXSxcbiAgICAgICAgYTEgPSBmcm9tWSAtIHkxLFxuICAgICAgICBiMSA9IGZyb21YIC0geDEsXG4gICAgICAgIGEyID0geTIgICAtIHkxLFxuICAgICAgICBiMiA9IHgyICAgLSB4MSxcbiAgICAgICAgbW0gPSBNYXRoLmFicyhhMSAqIGIyIC0gYjEgKiBhMik7XG5cbiAgICBpZiAobW0gPCAxLjBlLTggfHwgcmFkaXVzID09PSAwKVxuICAgIHtcbiAgICAgICAgaWYgKHBvaW50c1twb2ludHMubGVuZ3RoLTJdICE9PSB4MSB8fCBwb2ludHNbcG9pbnRzLmxlbmd0aC0xXSAhPT0geTEpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHBvaW50cy5wdXNoKHgxLCB5MSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgdmFyIGRkID0gYTEgKiBhMSArIGIxICogYjEsXG4gICAgICAgICAgICBjYyA9IGEyICogYTIgKyBiMiAqIGIyLFxuICAgICAgICAgICAgdHQgPSBhMSAqIGEyICsgYjEgKiBiMixcbiAgICAgICAgICAgIGsxID0gcmFkaXVzICogTWF0aC5zcXJ0KGRkKSAvIG1tLFxuICAgICAgICAgICAgazIgPSByYWRpdXMgKiBNYXRoLnNxcnQoY2MpIC8gbW0sXG4gICAgICAgICAgICBqMSA9IGsxICogdHQgLyBkZCxcbiAgICAgICAgICAgIGoyID0gazIgKiB0dCAvIGNjLFxuICAgICAgICAgICAgY3ggPSBrMSAqIGIyICsgazIgKiBiMSxcbiAgICAgICAgICAgIGN5ID0gazEgKiBhMiArIGsyICogYTEsXG4gICAgICAgICAgICBweCA9IGIxICogKGsyICsgajEpLFxuICAgICAgICAgICAgcHkgPSBhMSAqIChrMiArIGoxKSxcbiAgICAgICAgICAgIHF4ID0gYjIgKiAoazEgKyBqMiksXG4gICAgICAgICAgICBxeSA9IGEyICogKGsxICsgajIpLFxuICAgICAgICAgICAgc3RhcnRBbmdsZSA9IE1hdGguYXRhbjIocHkgLSBjeSwgcHggLSBjeCksXG4gICAgICAgICAgICBlbmRBbmdsZSAgID0gTWF0aC5hdGFuMihxeSAtIGN5LCBxeCAtIGN4KTtcblxuICAgICAgICB0aGlzLmFyYyhjeCArIHgxLCBjeSArIHkxLCByYWRpdXMsIHN0YXJ0QW5nbGUsIGVuZEFuZ2xlLCBiMSAqIGEyID4gYjIgKiBhMSk7XG4gICAgfVxuXG4gICAgdGhpcy5kaXJ0eSA9IHRoaXMuYm91bmRzRGlydHkgPSB0cnVlO1xuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIFRoZSBhcmMgbWV0aG9kIGNyZWF0ZXMgYW4gYXJjL2N1cnZlICh1c2VkIHRvIGNyZWF0ZSBjaXJjbGVzLCBvciBwYXJ0cyBvZiBjaXJjbGVzKS5cbiAqXG4gKiBAcGFyYW0gY3gge251bWJlcn0gVGhlIHgtY29vcmRpbmF0ZSBvZiB0aGUgY2VudGVyIG9mIHRoZSBjaXJjbGVcbiAqIEBwYXJhbSBjeSB7bnVtYmVyfSBUaGUgeS1jb29yZGluYXRlIG9mIHRoZSBjZW50ZXIgb2YgdGhlIGNpcmNsZVxuICogQHBhcmFtIHJhZGl1cyB7bnVtYmVyfSBUaGUgcmFkaXVzIG9mIHRoZSBjaXJjbGVcbiAqIEBwYXJhbSBzdGFydEFuZ2xlIHtudW1iZXJ9IFRoZSBzdGFydGluZyBhbmdsZSwgaW4gcmFkaWFucyAoMCBpcyBhdCB0aGUgMyBvJ2Nsb2NrIHBvc2l0aW9uIG9mIHRoZSBhcmMncyBjaXJjbGUpXG4gKiBAcGFyYW0gZW5kQW5nbGUge251bWJlcn0gVGhlIGVuZGluZyBhbmdsZSwgaW4gcmFkaWFuc1xuICogQHBhcmFtIGFudGljbG9ja3dpc2Uge2Jvb2xlYW59IE9wdGlvbmFsLiBTcGVjaWZpZXMgd2hldGhlciB0aGUgZHJhd2luZyBzaG91bGQgYmUgY291bnRlcmNsb2Nrd2lzZSBvciBjbG9ja3dpc2UuIEZhbHNlIGlzIGRlZmF1bHQsIGFuZCBpbmRpY2F0ZXMgY2xvY2t3aXNlLCB3aGlsZSB0cnVlIGluZGljYXRlcyBjb3VudGVyLWNsb2Nrd2lzZS5cbiAqIEByZXR1cm4ge1BJWEkuR3JhcGhpY3N9XG4gKi9cbkdyYXBoaWNzLnByb3RvdHlwZS5hcmMgPSBmdW5jdGlvbihjeCwgY3ksIHJhZGl1cywgc3RhcnRBbmdsZSwgZW5kQW5nbGUsIGFudGljbG9ja3dpc2UpXG57XG4gICAgYW50aWNsb2Nrd2lzZSA9IGFudGljbG9ja3dpc2UgfHwgZmFsc2U7XG5cbiAgICBpZiAoc3RhcnRBbmdsZSA9PT0gZW5kQW5nbGUpXG4gICAge1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBpZiggIWFudGljbG9ja3dpc2UgJiYgZW5kQW5nbGUgPD0gc3RhcnRBbmdsZSApXG4gICAge1xuICAgICAgICBlbmRBbmdsZSArPSBNYXRoLlBJICogMjtcbiAgICB9XG4gICAgZWxzZSBpZiggYW50aWNsb2Nrd2lzZSAmJiBzdGFydEFuZ2xlIDw9IGVuZEFuZ2xlIClcbiAgICB7XG4gICAgICAgIHN0YXJ0QW5nbGUgKz0gTWF0aC5QSSAqIDI7XG4gICAgfVxuXG4gICAgdmFyIHN3ZWVwID0gYW50aWNsb2Nrd2lzZSA/IChzdGFydEFuZ2xlIC0gZW5kQW5nbGUpICogLTEgOiAoZW5kQW5nbGUgLSBzdGFydEFuZ2xlKTtcbiAgICB2YXIgc2VncyA9ICBNYXRoLmNlaWwoTWF0aC5hYnMoc3dlZXApIC8gKE1hdGguUEkgKiAyKSkgKiA0MDtcblxuICAgIGlmKHN3ZWVwID09PSAwKVxuICAgIHtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgdmFyIHN0YXJ0WCA9IGN4ICsgTWF0aC5jb3Moc3RhcnRBbmdsZSkgKiByYWRpdXM7XG4gICAgdmFyIHN0YXJ0WSA9IGN5ICsgTWF0aC5zaW4oc3RhcnRBbmdsZSkgKiByYWRpdXM7XG5cbiAgICBpZiAodGhpcy5jdXJyZW50UGF0aClcbiAgICB7XG4gICAgICAgIHRoaXMuY3VycmVudFBhdGguc2hhcGUucG9pbnRzLnB1c2goc3RhcnRYLCBzdGFydFkpO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICB0aGlzLm1vdmVUbyhzdGFydFgsIHN0YXJ0WSk7XG4gICAgfVxuXG4gICAgdmFyIHBvaW50cyA9IHRoaXMuY3VycmVudFBhdGguc2hhcGUucG9pbnRzO1xuXG4gICAgdmFyIHRoZXRhID0gc3dlZXAvKHNlZ3MqMik7XG4gICAgdmFyIHRoZXRhMiA9IHRoZXRhKjI7XG5cbiAgICB2YXIgY1RoZXRhID0gTWF0aC5jb3ModGhldGEpO1xuICAgIHZhciBzVGhldGEgPSBNYXRoLnNpbih0aGV0YSk7XG5cbiAgICB2YXIgc2VnTWludXMgPSBzZWdzIC0gMTtcblxuICAgIHZhciByZW1haW5kZXIgPSAoIHNlZ01pbnVzICUgMSApIC8gc2VnTWludXM7XG5cbiAgICBmb3IodmFyIGk9MDsgaTw9c2VnTWludXM7IGkrKylcbiAgICB7XG4gICAgICAgIHZhciByZWFsID0gIGkgKyByZW1haW5kZXIgKiBpO1xuXG5cbiAgICAgICAgdmFyIGFuZ2xlID0gKCh0aGV0YSkgKyBzdGFydEFuZ2xlICsgKHRoZXRhMiAqIHJlYWwpKTtcblxuICAgICAgICB2YXIgYyA9IE1hdGguY29zKGFuZ2xlKTtcbiAgICAgICAgdmFyIHMgPSAtTWF0aC5zaW4oYW5nbGUpO1xuXG4gICAgICAgIHBvaW50cy5wdXNoKCggKGNUaGV0YSAqICBjKSArIChzVGhldGEgKiBzKSApICogcmFkaXVzICsgY3gsXG4gICAgICAgICAgICAgICAgICAgICggKGNUaGV0YSAqIC1zKSArIChzVGhldGEgKiBjKSApICogcmFkaXVzICsgY3kpO1xuICAgIH1cblxuICAgIHRoaXMuZGlydHkgPSB0aGlzLmJvdW5kc0RpcnR5ID0gdHJ1ZTtcblxuICAgIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBTcGVjaWZpZXMgYSBzaW1wbGUgb25lLWNvbG9yIGZpbGwgdGhhdCBzdWJzZXF1ZW50IGNhbGxzIHRvIG90aGVyIEdyYXBoaWNzIG1ldGhvZHNcbiAqIChzdWNoIGFzIGxpbmVUbygpIG9yIGRyYXdDaXJjbGUoKSkgdXNlIHdoZW4gZHJhd2luZy5cbiAqXG4gKiBAcGFyYW0gY29sb3Ige251bWJlcn0gdGhlIGNvbG9yIG9mIHRoZSBmaWxsXG4gKiBAcGFyYW0gYWxwaGEge251bWJlcn0gdGhlIGFscGhhIG9mIHRoZSBmaWxsXG4gKiBAcmV0dXJuIHtQSVhJLkdyYXBoaWNzfVxuICovXG5HcmFwaGljcy5wcm90b3R5cGUuYmVnaW5GaWxsID0gZnVuY3Rpb24gKGNvbG9yLCBhbHBoYSlcbntcbiAgICB0aGlzLmZpbGxpbmcgPSB0cnVlO1xuICAgIHRoaXMuZmlsbENvbG9yID0gY29sb3IgfHwgMDtcbiAgICB0aGlzLmZpbGxBbHBoYSA9IChhbHBoYSA9PT0gdW5kZWZpbmVkKSA/IDEgOiBhbHBoYTtcblxuICAgIGlmICh0aGlzLmN1cnJlbnRQYXRoKVxuICAgIHtcbiAgICAgICAgaWYgKHRoaXMuY3VycmVudFBhdGguc2hhcGUucG9pbnRzLmxlbmd0aCA8PSAyKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRQYXRoLmZpbGwgPSB0aGlzLmZpbGxpbmc7XG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRQYXRoLmZpbGxDb2xvciA9IHRoaXMuZmlsbENvbG9yO1xuICAgICAgICAgICAgdGhpcy5jdXJyZW50UGF0aC5maWxsQWxwaGEgPSB0aGlzLmZpbGxBbHBoYTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogQXBwbGllcyBhIGZpbGwgdG8gdGhlIGxpbmVzIGFuZCBzaGFwZXMgdGhhdCB3ZXJlIGFkZGVkIHNpbmNlIHRoZSBsYXN0IGNhbGwgdG8gdGhlIGJlZ2luRmlsbCgpIG1ldGhvZC5cbiAqXG4gKiBAcmV0dXJuIHtHcmFwaGljc31cbiAqL1xuR3JhcGhpY3MucHJvdG90eXBlLmVuZEZpbGwgPSBmdW5jdGlvbiAoKVxue1xuICAgIHRoaXMuZmlsbGluZyA9IGZhbHNlO1xuICAgIHRoaXMuZmlsbENvbG9yID0gbnVsbDtcbiAgICB0aGlzLmZpbGxBbHBoYSA9IDE7XG5cbiAgICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICpcbiAqIEBwYXJhbSB4IHtudW1iZXJ9IFRoZSBYIGNvb3JkIG9mIHRoZSB0b3AtbGVmdCBvZiB0aGUgcmVjdGFuZ2xlXG4gKiBAcGFyYW0geSB7bnVtYmVyfSBUaGUgWSBjb29yZCBvZiB0aGUgdG9wLWxlZnQgb2YgdGhlIHJlY3RhbmdsZVxuICogQHBhcmFtIHdpZHRoIHtudW1iZXJ9IFRoZSB3aWR0aCBvZiB0aGUgcmVjdGFuZ2xlXG4gKiBAcGFyYW0gaGVpZ2h0IHtudW1iZXJ9IFRoZSBoZWlnaHQgb2YgdGhlIHJlY3RhbmdsZVxuICogQHJldHVybiB7UElYSS5HcmFwaGljc31cbiAqL1xuR3JhcGhpY3MucHJvdG90eXBlLmRyYXdSZWN0ID0gZnVuY3Rpb24gKCB4LCB5LCB3aWR0aCwgaGVpZ2h0IClcbntcbiAgICB0aGlzLmRyYXdTaGFwZShuZXcgbWF0aC5SZWN0YW5nbGUoeCx5LCB3aWR0aCwgaGVpZ2h0KSk7XG5cbiAgICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICpcbiAqIEBwYXJhbSB4IHtudW1iZXJ9IFRoZSBYIGNvb3JkIG9mIHRoZSB0b3AtbGVmdCBvZiB0aGUgcmVjdGFuZ2xlXG4gKiBAcGFyYW0geSB7bnVtYmVyfSBUaGUgWSBjb29yZCBvZiB0aGUgdG9wLWxlZnQgb2YgdGhlIHJlY3RhbmdsZVxuICogQHBhcmFtIHdpZHRoIHtudW1iZXJ9IFRoZSB3aWR0aCBvZiB0aGUgcmVjdGFuZ2xlXG4gKiBAcGFyYW0gaGVpZ2h0IHtudW1iZXJ9IFRoZSBoZWlnaHQgb2YgdGhlIHJlY3RhbmdsZVxuICogQHBhcmFtIHJhZGl1cyB7bnVtYmVyfSBSYWRpdXMgb2YgdGhlIHJlY3RhbmdsZSBjb3JuZXJzXG4gKiBAcmV0dXJuIHtQSVhJLkdyYXBoaWNzfVxuICovXG5HcmFwaGljcy5wcm90b3R5cGUuZHJhd1JvdW5kZWRSZWN0ID0gZnVuY3Rpb24gKCB4LCB5LCB3aWR0aCwgaGVpZ2h0LCByYWRpdXMgKVxue1xuICAgIHRoaXMuZHJhd1NoYXBlKG5ldyBtYXRoLlJvdW5kZWRSZWN0YW5nbGUoeCwgeSwgd2lkdGgsIGhlaWdodCwgcmFkaXVzKSk7XG5cbiAgICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogRHJhd3MgYSBjaXJjbGUuXG4gKlxuICogQHBhcmFtIHgge251bWJlcn0gVGhlIFggY29vcmRpbmF0ZSBvZiB0aGUgY2VudGVyIG9mIHRoZSBjaXJjbGVcbiAqIEBwYXJhbSB5IHtudW1iZXJ9IFRoZSBZIGNvb3JkaW5hdGUgb2YgdGhlIGNlbnRlciBvZiB0aGUgY2lyY2xlXG4gKiBAcGFyYW0gcmFkaXVzIHtudW1iZXJ9IFRoZSByYWRpdXMgb2YgdGhlIGNpcmNsZVxuICogQHJldHVybiB7UElYSS5HcmFwaGljc31cbiAqL1xuR3JhcGhpY3MucHJvdG90eXBlLmRyYXdDaXJjbGUgPSBmdW5jdGlvbiAoeCwgeSwgcmFkaXVzKVxue1xuICAgIHRoaXMuZHJhd1NoYXBlKG5ldyBtYXRoLkNpcmNsZSh4LHksIHJhZGl1cykpO1xuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIERyYXdzIGFuIGVsbGlwc2UuXG4gKlxuICogQHBhcmFtIHgge251bWJlcn0gVGhlIFggY29vcmRpbmF0ZSBvZiB0aGUgY2VudGVyIG9mIHRoZSBlbGxpcHNlXG4gKiBAcGFyYW0geSB7bnVtYmVyfSBUaGUgWSBjb29yZGluYXRlIG9mIHRoZSBjZW50ZXIgb2YgdGhlIGVsbGlwc2VcbiAqIEBwYXJhbSB3aWR0aCB7bnVtYmVyfSBUaGUgaGFsZiB3aWR0aCBvZiB0aGUgZWxsaXBzZVxuICogQHBhcmFtIGhlaWdodCB7bnVtYmVyfSBUaGUgaGFsZiBoZWlnaHQgb2YgdGhlIGVsbGlwc2VcbiAqIEByZXR1cm4ge1BJWEkuR3JhcGhpY3N9XG4gKi9cbkdyYXBoaWNzLnByb3RvdHlwZS5kcmF3RWxsaXBzZSA9IGZ1bmN0aW9uICh4LCB5LCB3aWR0aCwgaGVpZ2h0KVxue1xuICAgIHRoaXMuZHJhd1NoYXBlKG5ldyBtYXRoLkVsbGlwc2UoeCwgeSwgd2lkdGgsIGhlaWdodCkpO1xuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIERyYXdzIGEgcG9seWdvbiB1c2luZyB0aGUgZ2l2ZW4gcGF0aC5cbiAqXG4gKiBAcGFyYW0gcGF0aCB7bnVtYmVyW118UElYSS5Qb2ludFtdfSBUaGUgcGF0aCBkYXRhIHVzZWQgdG8gY29uc3RydWN0IHRoZSBwb2x5Z29uLlxuICogQHJldHVybiB7UElYSS5HcmFwaGljc31cbiAqL1xuR3JhcGhpY3MucHJvdG90eXBlLmRyYXdQb2x5Z29uID0gZnVuY3Rpb24gKHBhdGgpXG57XG4gICAgLy8gcHJldmVudHMgYW4gYXJndW1lbnQgYXNzaWdubWVudCBkZW9wdFxuICAgIC8vIHNlZSBzZWN0aW9uIDMuMTogaHR0cHM6Ly9naXRodWIuY29tL3BldGthYW50b25vdi9ibHVlYmlyZC93aWtpL09wdGltaXphdGlvbi1raWxsZXJzIzMtbWFuYWdpbmctYXJndW1lbnRzXG4gICAgdmFyIHBvaW50cyA9IHBhdGg7XG5cbiAgICB2YXIgY2xvc2VkID0gdHJ1ZTtcblxuICAgIGlmIChwb2ludHMgaW5zdGFuY2VvZiBtYXRoLlBvbHlnb24pXG4gICAge1xuICAgICAgICBjbG9zZWQgPSBwb2ludHMuY2xvc2VkO1xuICAgICAgICBwb2ludHMgPSBwb2ludHMucG9pbnRzO1xuICAgIH1cblxuICAgIGlmICghQXJyYXkuaXNBcnJheShwb2ludHMpKVxuICAgIHtcbiAgICAgICAgLy8gcHJldmVudHMgYW4gYXJndW1lbnQgbGVhayBkZW9wdFxuICAgICAgICAvLyBzZWUgc2VjdGlvbiAzLjI6IGh0dHBzOi8vZ2l0aHViLmNvbS9wZXRrYWFudG9ub3YvYmx1ZWJpcmQvd2lraS9PcHRpbWl6YXRpb24ta2lsbGVycyMzLW1hbmFnaW5nLWFyZ3VtZW50c1xuICAgICAgICBwb2ludHMgPSBuZXcgQXJyYXkoYXJndW1lbnRzLmxlbmd0aCk7XG5cbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwb2ludHMubGVuZ3RoOyArK2kpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHBvaW50c1tpXSA9IGFyZ3VtZW50c1tpXTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHZhciBzaGFwZSA9IG5ldyBtYXRoLlBvbHlnb24ocG9pbnRzKTtcbiAgICBzaGFwZS5jbG9zZWQgPSBjbG9zZWQ7XG5cbiAgICB0aGlzLmRyYXdTaGFwZShzaGFwZSk7XG5cbiAgICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogQ2xlYXJzIHRoZSBncmFwaGljcyB0aGF0IHdlcmUgZHJhd24gdG8gdGhpcyBHcmFwaGljcyBvYmplY3QsIGFuZCByZXNldHMgZmlsbCBhbmQgbGluZSBzdHlsZSBzZXR0aW5ncy5cbiAqXG4gKiBAcmV0dXJuIHtQSVhJLkdyYXBoaWNzfVxuICovXG5HcmFwaGljcy5wcm90b3R5cGUuY2xlYXIgPSBmdW5jdGlvbiAoKVxue1xuICAgIHRoaXMubGluZVdpZHRoID0gMDtcbiAgICB0aGlzLmZpbGxpbmcgPSBmYWxzZTtcblxuICAgIHRoaXMuZGlydHkgPSB0cnVlO1xuICAgIHRoaXMuY2xlYXJEaXJ0eSA9IHRydWU7XG4gICAgdGhpcy5ncmFwaGljc0RhdGEgPSBbXTtcblxuICAgIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBVc2VmdWwgZnVuY3Rpb24gdGhhdCByZXR1cm5zIGEgdGV4dHVyZSBvZiB0aGUgZ3JhcGhpY3Mgb2JqZWN0IHRoYXQgY2FuIHRoZW4gYmUgdXNlZCB0byBjcmVhdGUgc3ByaXRlc1xuICogVGhpcyBjYW4gYmUgcXVpdGUgdXNlZnVsIGlmIHlvdXIgZ2VvbWV0cnkgaXMgY29tcGxpY2F0ZWQgYW5kIG5lZWRzIHRvIGJlIHJldXNlZCBtdWx0aXBsZSB0aW1lcy5cbiAqXG4gKiBAcGFyYW0gcmVzb2x1dGlvbiB7bnVtYmVyfSBUaGUgcmVzb2x1dGlvbiBvZiB0aGUgdGV4dHVyZSBiZWluZyBnZW5lcmF0ZWRcbiAqIEBwYXJhbSBzY2FsZU1vZGUge251bWJlcn0gU2hvdWxkIGJlIG9uZSBvZiB0aGUgc2NhbGVNb2RlIGNvbnN0c1xuICogQHJldHVybiB7UElYSS5UZXh0dXJlfSBhIHRleHR1cmUgb2YgdGhlIGdyYXBoaWNzIG9iamVjdFxuICovXG5HcmFwaGljcy5wcm90b3R5cGUuZ2VuZXJhdGVUZXh0dXJlID0gZnVuY3Rpb24gKHJlbmRlcmVyLCByZXNvbHV0aW9uLCBzY2FsZU1vZGUpXG57XG5cbiAgICByZXNvbHV0aW9uID0gcmVzb2x1dGlvbiB8fCAxO1xuXG4gICAgdmFyIGJvdW5kcyA9IHRoaXMuZ2V0TG9jYWxCb3VuZHMoKTtcblxuICAgIHZhciBjYW52YXNCdWZmZXIgPSBuZXcgQ2FudmFzQnVmZmVyKGJvdW5kcy53aWR0aCAqIHJlc29sdXRpb24sIGJvdW5kcy5oZWlnaHQgKiByZXNvbHV0aW9uKTtcblxuICAgIHZhciB0ZXh0dXJlID0gVGV4dHVyZS5mcm9tQ2FudmFzKGNhbnZhc0J1ZmZlci5jYW52YXMsIHNjYWxlTW9kZSk7XG4gICAgdGV4dHVyZS5iYXNlVGV4dHVyZS5yZXNvbHV0aW9uID0gcmVzb2x1dGlvbjtcblxuICAgIGNhbnZhc0J1ZmZlci5jb250ZXh0LnNjYWxlKHJlc29sdXRpb24sIHJlc29sdXRpb24pO1xuXG4gICAgY2FudmFzQnVmZmVyLmNvbnRleHQudHJhbnNsYXRlKC1ib3VuZHMueCwtYm91bmRzLnkpO1xuXG4gICAgQ2FudmFzR3JhcGhpY3MucmVuZGVyR3JhcGhpY3ModGhpcywgY2FudmFzQnVmZmVyLmNvbnRleHQpO1xuXG4gICAgcmV0dXJuIHRleHR1cmU7XG59O1xuXG4vKipcbiAqIFJlbmRlcnMgdGhlIG9iamVjdCB1c2luZyB0aGUgV2ViR0wgcmVuZGVyZXJcbiAqXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcn1cbiAqIEBwcml2YXRlXG4gKi9cbkdyYXBoaWNzLnByb3RvdHlwZS5fcmVuZGVyV2ViR0wgPSBmdW5jdGlvbiAocmVuZGVyZXIpXG57XG4gICAgLy8gaWYgdGhlIHNwcml0ZSBpcyBub3QgdmlzaWJsZSBvciB0aGUgYWxwaGEgaXMgMCB0aGVuIG5vIG5lZWQgdG8gcmVuZGVyIHRoaXMgZWxlbWVudFxuXG4gICAgaWYgKHRoaXMuZ2xEaXJ0eSlcbiAgICB7XG4gICAgICAgIHRoaXMuZGlydHkgPSB0cnVlO1xuICAgICAgICB0aGlzLmdsRGlydHkgPSBmYWxzZTtcbiAgICB9XG5cbiAgICByZW5kZXJlci5zZXRPYmplY3RSZW5kZXJlcihyZW5kZXJlci5wbHVnaW5zLmdyYXBoaWNzKTtcbiAgICByZW5kZXJlci5wbHVnaW5zLmdyYXBoaWNzLnJlbmRlcih0aGlzKTtcblxufTtcblxuLyoqXG4gKiBSZW5kZXJzIHRoZSBvYmplY3QgdXNpbmcgdGhlIENhbnZhcyByZW5kZXJlclxuICpcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5DYW52YXNSZW5kZXJlcn1cbiAqIEBwcml2YXRlXG4gKi9cbkdyYXBoaWNzLnByb3RvdHlwZS5fcmVuZGVyQ2FudmFzID0gZnVuY3Rpb24gKHJlbmRlcmVyKVxue1xuICAgIGlmICh0aGlzLmlzTWFzayA9PT0gdHJ1ZSlcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBpZiB0aGUgdGludCBoYXMgY2hhbmdlZCwgc2V0IHRoZSBncmFwaGljcyBvYmplY3QgdG8gZGlydHkuXG4gICAgaWYgKHRoaXMuX3ByZXZUaW50ICE9PSB0aGlzLnRpbnQpIHtcbiAgICAgICAgdGhpcy5kaXJ0eSA9IHRydWU7XG4gICAgfVxuXG4gICAgLy8gdGhpcyBjb2RlIG1heSBzdGlsbCBiZSBuZWVkZWQgc28gbGVhdmluZyBmb3Igbm93Li5cbiAgICAvL1xuICAgIC8qXG4gICAgaWYgKHRoaXMuX2NhY2hlQXNCaXRtYXApXG4gICAge1xuICAgICAgICBpZiAodGhpcy5kaXJ0eSB8fCB0aGlzLmNhY2hlZFNwcml0ZURpcnR5KVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLl9nZW5lcmF0ZUNhY2hlZFNwcml0ZSgpO1xuXG4gICAgICAgICAgICAvLyB3ZSB3aWxsIGFsc28gbmVlZCB0byB1cGRhdGUgdGhlIHRleHR1cmVcbiAgICAgICAgICAgIHRoaXMudXBkYXRlQ2FjaGVkU3ByaXRlVGV4dHVyZSgpO1xuXG4gICAgICAgICAgICB0aGlzLmNhY2hlZFNwcml0ZURpcnR5ID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLmRpcnR5ID0gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9jYWNoZWRTcHJpdGUuYWxwaGEgPSB0aGlzLmFscGhhO1xuXG4gICAgICAgIFNwcml0ZS5wcm90b3R5cGUuX3JlbmRlckNhbnZhcy5jYWxsKHRoaXMuX2NhY2hlZFNwcml0ZSwgcmVuZGVyZXIpO1xuXG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgKi9cbiAgICB2YXIgY29udGV4dCA9IHJlbmRlcmVyLmNvbnRleHQ7XG4gICAgdmFyIHRyYW5zZm9ybSA9IHRoaXMud29ybGRUcmFuc2Zvcm07XG5cbiAgICB2YXIgY29tcG9zaXRlT3BlcmF0aW9uID0gcmVuZGVyZXIuYmxlbmRNb2Rlc1t0aGlzLmJsZW5kTW9kZV07XG4gICAgaWYgKGNvbXBvc2l0ZU9wZXJhdGlvbiAhPT0gY29udGV4dC5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb24pXG4gICAge1xuICAgICAgICBjb250ZXh0Lmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbiA9IGNvbXBvc2l0ZU9wZXJhdGlvbjtcbiAgICB9XG5cbiAgICB2YXIgcmVzb2x1dGlvbiA9IHJlbmRlcmVyLnJlc29sdXRpb247XG4gICAgY29udGV4dC5zZXRUcmFuc2Zvcm0oXG4gICAgICAgIHRyYW5zZm9ybS5hICogcmVzb2x1dGlvbixcbiAgICAgICAgdHJhbnNmb3JtLmIgKiByZXNvbHV0aW9uLFxuICAgICAgICB0cmFuc2Zvcm0uYyAqIHJlc29sdXRpb24sXG4gICAgICAgIHRyYW5zZm9ybS5kICogcmVzb2x1dGlvbixcbiAgICAgICAgdHJhbnNmb3JtLnR4ICogcmVzb2x1dGlvbixcbiAgICAgICAgdHJhbnNmb3JtLnR5ICogcmVzb2x1dGlvblxuICAgICk7XG5cbiAgICBDYW52YXNHcmFwaGljcy5yZW5kZXJHcmFwaGljcyh0aGlzLCBjb250ZXh0KTtcbn07XG5cbi8qKlxuICogUmV0cmlldmVzIHRoZSBib3VuZHMgb2YgdGhlIGdyYXBoaWMgc2hhcGUgYXMgYSByZWN0YW5nbGUgb2JqZWN0XG4gKlxuICogQHBhcmFtIFttYXRyaXhdIHtQSVhJLk1hdHJpeH0gVGhlIHdvcmxkIHRyYW5zZm9ybSBtYXRyaXggdG8gdXNlLCBkZWZhdWx0cyB0byB0aGlzXG4gKiAgb2JqZWN0J3Mgd29ybGRUcmFuc2Zvcm0uXG4gKiBAcmV0dXJuIHtQSVhJLlJlY3RhbmdsZX0gdGhlIHJlY3Rhbmd1bGFyIGJvdW5kaW5nIGFyZWFcbiAqL1xuR3JhcGhpY3MucHJvdG90eXBlLmdldEJvdW5kcyA9IGZ1bmN0aW9uIChtYXRyaXgpXG57XG4gICAgaWYoIXRoaXMuX2N1cnJlbnRCb3VuZHMpXG4gICAge1xuXG4gICAgICAgIC8vIHJldHVybiBhbiBlbXB0eSBvYmplY3QgaWYgdGhlIGl0ZW0gaXMgYSBtYXNrIVxuICAgICAgICBpZiAoIXRoaXMucmVuZGVyYWJsZSlcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIG1hdGguUmVjdGFuZ2xlLkVNUFRZO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuYm91bmRzRGlydHkpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlTG9jYWxCb3VuZHMoKTtcblxuICAgICAgICAgICAgdGhpcy5nbERpcnR5ID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMuY2FjaGVkU3ByaXRlRGlydHkgPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy5ib3VuZHNEaXJ0eSA9IGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGJvdW5kcyA9IHRoaXMuX2xvY2FsQm91bmRzO1xuXG4gICAgICAgIHZhciB3MCA9IGJvdW5kcy54O1xuICAgICAgICB2YXIgdzEgPSBib3VuZHMud2lkdGggKyBib3VuZHMueDtcblxuICAgICAgICB2YXIgaDAgPSBib3VuZHMueTtcbiAgICAgICAgdmFyIGgxID0gYm91bmRzLmhlaWdodCArIGJvdW5kcy55O1xuXG4gICAgICAgIHZhciB3b3JsZFRyYW5zZm9ybSA9IG1hdHJpeCB8fCB0aGlzLndvcmxkVHJhbnNmb3JtO1xuXG4gICAgICAgIHZhciBhID0gd29ybGRUcmFuc2Zvcm0uYTtcbiAgICAgICAgdmFyIGIgPSB3b3JsZFRyYW5zZm9ybS5iO1xuICAgICAgICB2YXIgYyA9IHdvcmxkVHJhbnNmb3JtLmM7XG4gICAgICAgIHZhciBkID0gd29ybGRUcmFuc2Zvcm0uZDtcbiAgICAgICAgdmFyIHR4ID0gd29ybGRUcmFuc2Zvcm0udHg7XG4gICAgICAgIHZhciB0eSA9IHdvcmxkVHJhbnNmb3JtLnR5O1xuXG4gICAgICAgIHZhciB4MSA9IGEgKiB3MSArIGMgKiBoMSArIHR4O1xuICAgICAgICB2YXIgeTEgPSBkICogaDEgKyBiICogdzEgKyB0eTtcblxuICAgICAgICB2YXIgeDIgPSBhICogdzAgKyBjICogaDEgKyB0eDtcbiAgICAgICAgdmFyIHkyID0gZCAqIGgxICsgYiAqIHcwICsgdHk7XG5cbiAgICAgICAgdmFyIHgzID0gYSAqIHcwICsgYyAqIGgwICsgdHg7XG4gICAgICAgIHZhciB5MyA9IGQgKiBoMCArIGIgKiB3MCArIHR5O1xuXG4gICAgICAgIHZhciB4NCA9ICBhICogdzEgKyBjICogaDAgKyB0eDtcbiAgICAgICAgdmFyIHk0ID0gIGQgKiBoMCArIGIgKiB3MSArIHR5O1xuXG4gICAgICAgIHZhciBtYXhYID0geDE7XG4gICAgICAgIHZhciBtYXhZID0geTE7XG5cbiAgICAgICAgdmFyIG1pblggPSB4MTtcbiAgICAgICAgdmFyIG1pblkgPSB5MTtcblxuICAgICAgICBtaW5YID0geDIgPCBtaW5YID8geDIgOiBtaW5YO1xuICAgICAgICBtaW5YID0geDMgPCBtaW5YID8geDMgOiBtaW5YO1xuICAgICAgICBtaW5YID0geDQgPCBtaW5YID8geDQgOiBtaW5YO1xuXG4gICAgICAgIG1pblkgPSB5MiA8IG1pblkgPyB5MiA6IG1pblk7XG4gICAgICAgIG1pblkgPSB5MyA8IG1pblkgPyB5MyA6IG1pblk7XG4gICAgICAgIG1pblkgPSB5NCA8IG1pblkgPyB5NCA6IG1pblk7XG5cbiAgICAgICAgbWF4WCA9IHgyID4gbWF4WCA/IHgyIDogbWF4WDtcbiAgICAgICAgbWF4WCA9IHgzID4gbWF4WCA/IHgzIDogbWF4WDtcbiAgICAgICAgbWF4WCA9IHg0ID4gbWF4WCA/IHg0IDogbWF4WDtcblxuICAgICAgICBtYXhZID0geTIgPiBtYXhZID8geTIgOiBtYXhZO1xuICAgICAgICBtYXhZID0geTMgPiBtYXhZID8geTMgOiBtYXhZO1xuICAgICAgICBtYXhZID0geTQgPiBtYXhZID8geTQgOiBtYXhZO1xuXG4gICAgICAgIHRoaXMuX2JvdW5kcy54ID0gbWluWDtcbiAgICAgICAgdGhpcy5fYm91bmRzLndpZHRoID0gbWF4WCAtIG1pblg7XG5cbiAgICAgICAgdGhpcy5fYm91bmRzLnkgPSBtaW5ZO1xuICAgICAgICB0aGlzLl9ib3VuZHMuaGVpZ2h0ID0gbWF4WSAtIG1pblk7XG5cbiAgICAgICAgdGhpcy5fY3VycmVudEJvdW5kcyA9IHRoaXMuX2JvdW5kcztcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5fY3VycmVudEJvdW5kcztcbn07XG5cbi8qKlxuKiBUZXN0cyBpZiBhIHBvaW50IGlzIGluc2lkZSB0aGlzIGdyYXBoaWNzIG9iamVjdFxuKlxuKiBAcGFyYW0gcG9pbnQge1BJWEkuUG9pbnR9IHRoZSBwb2ludCB0byB0ZXN0XG4qIEByZXR1cm4ge2Jvb2xlYW59IHRoZSByZXN1bHQgb2YgdGhlIHRlc3RcbiovXG5HcmFwaGljcy5wcm90b3R5cGUuY29udGFpbnNQb2ludCA9IGZ1bmN0aW9uKCBwb2ludCApXG57XG4gICAgdGhpcy53b3JsZFRyYW5zZm9ybS5hcHBseUludmVyc2UocG9pbnQsICB0ZW1wUG9pbnQpO1xuXG4gICAgdmFyIGdyYXBoaWNzRGF0YSA9IHRoaXMuZ3JhcGhpY3NEYXRhO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBncmFwaGljc0RhdGEubGVuZ3RoOyBpKyspXG4gICAge1xuICAgICAgICB2YXIgZGF0YSA9IGdyYXBoaWNzRGF0YVtpXTtcblxuICAgICAgICBpZiAoIWRhdGEuZmlsbClcbiAgICAgICAge1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBvbmx5IGRlYWwgd2l0aCBmaWxscy4uXG4gICAgICAgIGlmIChkYXRhLnNoYXBlKVxuICAgICAgICB7XG4gICAgICAgICAgICBpZiAoIGRhdGEuc2hhcGUuY29udGFpbnMoIHRlbXBQb2ludC54LCB0ZW1wUG9pbnQueSApIClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBmYWxzZTtcbn07XG5cbi8qKlxuICogVXBkYXRlIHRoZSBib3VuZHMgb2YgdGhlIG9iamVjdFxuICpcbiAqL1xuR3JhcGhpY3MucHJvdG90eXBlLnVwZGF0ZUxvY2FsQm91bmRzID0gZnVuY3Rpb24gKClcbntcbiAgICB2YXIgbWluWCA9IEluZmluaXR5O1xuICAgIHZhciBtYXhYID0gLUluZmluaXR5O1xuXG4gICAgdmFyIG1pblkgPSBJbmZpbml0eTtcbiAgICB2YXIgbWF4WSA9IC1JbmZpbml0eTtcblxuICAgIGlmICh0aGlzLmdyYXBoaWNzRGF0YS5sZW5ndGgpXG4gICAge1xuICAgICAgICB2YXIgc2hhcGUsIHBvaW50cywgeCwgeSwgdywgaDtcblxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuZ3JhcGhpY3NEYXRhLmxlbmd0aDsgaSsrKVxuICAgICAgICB7XG4gICAgICAgICAgICB2YXIgZGF0YSA9IHRoaXMuZ3JhcGhpY3NEYXRhW2ldO1xuICAgICAgICAgICAgdmFyIHR5cGUgPSBkYXRhLnR5cGU7XG4gICAgICAgICAgICB2YXIgbGluZVdpZHRoID0gZGF0YS5saW5lV2lkdGg7XG4gICAgICAgICAgICBzaGFwZSA9IGRhdGEuc2hhcGU7XG5cbiAgICAgICAgICAgIGlmICh0eXBlID09PSBDT05TVC5TSEFQRVMuUkVDVCB8fCB0eXBlID09PSBDT05TVC5TSEFQRVMuUlJFQylcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB4ID0gc2hhcGUueCAtIGxpbmVXaWR0aC8yO1xuICAgICAgICAgICAgICAgIHkgPSBzaGFwZS55IC0gbGluZVdpZHRoLzI7XG4gICAgICAgICAgICAgICAgdyA9IHNoYXBlLndpZHRoICsgbGluZVdpZHRoO1xuICAgICAgICAgICAgICAgIGggPSBzaGFwZS5oZWlnaHQgKyBsaW5lV2lkdGg7XG5cbiAgICAgICAgICAgICAgICBtaW5YID0geCA8IG1pblggPyB4IDogbWluWDtcbiAgICAgICAgICAgICAgICBtYXhYID0geCArIHcgPiBtYXhYID8geCArIHcgOiBtYXhYO1xuXG4gICAgICAgICAgICAgICAgbWluWSA9IHkgPCBtaW5ZID8geSA6IG1pblk7XG4gICAgICAgICAgICAgICAgbWF4WSA9IHkgKyBoID4gbWF4WSA/IHkgKyBoIDogbWF4WTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKHR5cGUgPT09IENPTlNULlNIQVBFUy5DSVJDKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHggPSBzaGFwZS54O1xuICAgICAgICAgICAgICAgIHkgPSBzaGFwZS55O1xuICAgICAgICAgICAgICAgIHcgPSBzaGFwZS5yYWRpdXMgKyBsaW5lV2lkdGgvMjtcbiAgICAgICAgICAgICAgICBoID0gc2hhcGUucmFkaXVzICsgbGluZVdpZHRoLzI7XG5cbiAgICAgICAgICAgICAgICBtaW5YID0geCAtIHcgPCBtaW5YID8geCAtIHcgOiBtaW5YO1xuICAgICAgICAgICAgICAgIG1heFggPSB4ICsgdyA+IG1heFggPyB4ICsgdyA6IG1heFg7XG5cbiAgICAgICAgICAgICAgICBtaW5ZID0geSAtIGggPCBtaW5ZID8geSAtIGggOiBtaW5ZO1xuICAgICAgICAgICAgICAgIG1heFkgPSB5ICsgaCA+IG1heFkgPyB5ICsgaCA6IG1heFk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmICh0eXBlID09PSBDT05TVC5TSEFQRVMuRUxJUClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB4ID0gc2hhcGUueDtcbiAgICAgICAgICAgICAgICB5ID0gc2hhcGUueTtcbiAgICAgICAgICAgICAgICB3ID0gc2hhcGUud2lkdGggKyBsaW5lV2lkdGgvMjtcbiAgICAgICAgICAgICAgICBoID0gc2hhcGUuaGVpZ2h0ICsgbGluZVdpZHRoLzI7XG5cbiAgICAgICAgICAgICAgICBtaW5YID0geCAtIHcgPCBtaW5YID8geCAtIHcgOiBtaW5YO1xuICAgICAgICAgICAgICAgIG1heFggPSB4ICsgdyA+IG1heFggPyB4ICsgdyA6IG1heFg7XG5cbiAgICAgICAgICAgICAgICBtaW5ZID0geSAtIGggPCBtaW5ZID8geSAtIGggOiBtaW5ZO1xuICAgICAgICAgICAgICAgIG1heFkgPSB5ICsgaCA+IG1heFkgPyB5ICsgaCA6IG1heFk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgLy8gUE9MWVxuICAgICAgICAgICAgICAgIHBvaW50cyA9IHNoYXBlLnBvaW50cztcblxuICAgICAgICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgcG9pbnRzLmxlbmd0aDsgaiArPSAyKVxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgeCA9IHBvaW50c1tqXTtcbiAgICAgICAgICAgICAgICAgICAgeSA9IHBvaW50c1tqKzFdO1xuXG4gICAgICAgICAgICAgICAgICAgIG1pblggPSB4LWxpbmVXaWR0aCA8IG1pblggPyB4LWxpbmVXaWR0aCA6IG1pblg7XG4gICAgICAgICAgICAgICAgICAgIG1heFggPSB4K2xpbmVXaWR0aCA+IG1heFggPyB4K2xpbmVXaWR0aCA6IG1heFg7XG5cbiAgICAgICAgICAgICAgICAgICAgbWluWSA9IHktbGluZVdpZHRoIDwgbWluWSA/IHktbGluZVdpZHRoIDogbWluWTtcbiAgICAgICAgICAgICAgICAgICAgbWF4WSA9IHkrbGluZVdpZHRoID4gbWF4WSA/IHkrbGluZVdpZHRoIDogbWF4WTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgbWluWCA9IDA7XG4gICAgICAgIG1heFggPSAwO1xuICAgICAgICBtaW5ZID0gMDtcbiAgICAgICAgbWF4WSA9IDA7XG4gICAgfVxuXG4gICAgdmFyIHBhZGRpbmcgPSB0aGlzLmJvdW5kc1BhZGRpbmc7XG5cbiAgICB0aGlzLl9sb2NhbEJvdW5kcy54ID0gbWluWCAtIHBhZGRpbmc7XG4gICAgdGhpcy5fbG9jYWxCb3VuZHMud2lkdGggPSAobWF4WCAtIG1pblgpICsgcGFkZGluZyAqIDI7XG5cbiAgICB0aGlzLl9sb2NhbEJvdW5kcy55ID0gbWluWSAtIHBhZGRpbmc7XG4gICAgdGhpcy5fbG9jYWxCb3VuZHMuaGVpZ2h0ID0gKG1heFkgLSBtaW5ZKSArIHBhZGRpbmcgKiAyO1xufTtcblxuLyoqXG4gKiBHZW5lcmF0ZXMgdGhlIGNhY2hlZCBzcHJpdGUgd2hlbiB0aGUgc3ByaXRlIGhhcyBjYWNoZUFzQml0bWFwID0gdHJ1ZVxuICpcbiAqIEBwcml2YXRlXG4gKi9cbi8qXG5HcmFwaGljcy5wcm90b3R5cGUuX2dlbmVyYXRlQ2FjaGVkU3ByaXRlID0gZnVuY3Rpb24gKClcbntcbiAgICB2YXIgYm91bmRzID0gdGhpcy5nZXRMb2NhbEJvdW5kcygpO1xuXG4gICAgaWYgKCF0aGlzLl9jYWNoZWRTcHJpdGUpXG4gICAge1xuICAgICAgICB2YXIgY2FudmFzQnVmZmVyID0gbmV3IENhbnZhc0J1ZmZlcihib3VuZHMud2lkdGgsIGJvdW5kcy5oZWlnaHQpO1xuICAgICAgICB2YXIgdGV4dHVyZSA9IFRleHR1cmUuZnJvbUNhbnZhcyhjYW52YXNCdWZmZXIuY2FudmFzKTtcblxuICAgICAgICB0aGlzLl9jYWNoZWRTcHJpdGUgPSBuZXcgU3ByaXRlKHRleHR1cmUpO1xuICAgICAgICB0aGlzLl9jYWNoZWRTcHJpdGUuYnVmZmVyID0gY2FudmFzQnVmZmVyO1xuXG4gICAgICAgIHRoaXMuX2NhY2hlZFNwcml0ZS53b3JsZFRyYW5zZm9ybSA9IHRoaXMud29ybGRUcmFuc2Zvcm07XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHRoaXMuX2NhY2hlZFNwcml0ZS5idWZmZXIucmVzaXplKGJvdW5kcy53aWR0aCwgYm91bmRzLmhlaWdodCk7XG4gICAgfVxuXG4gICAgLy8gbGV2ZXJhZ2UgdGhlIGFuY2hvciB0byBhY2NvdW50IGZvciB0aGUgb2Zmc2V0IG9mIHRoZSBlbGVtZW50XG4gICAgdGhpcy5fY2FjaGVkU3ByaXRlLmFuY2hvci54ID0gLSggYm91bmRzLnggLyBib3VuZHMud2lkdGggKTtcbiAgICB0aGlzLl9jYWNoZWRTcHJpdGUuYW5jaG9yLnkgPSAtKCBib3VuZHMueSAvIGJvdW5kcy5oZWlnaHQgKTtcblxuICAgIC8vIHRoaXMuX2NhY2hlZFNwcml0ZS5idWZmZXIuY29udGV4dC5zYXZlKCk7XG4gICAgdGhpcy5fY2FjaGVkU3ByaXRlLmJ1ZmZlci5jb250ZXh0LnRyYW5zbGF0ZSgtYm91bmRzLngsLWJvdW5kcy55KTtcblxuICAgIC8vIG1ha2Ugc3VyZSB3ZSBzZXQgdGhlIGFscGhhIG9mIHRoZSBncmFwaGljcyB0byAxIGZvciB0aGUgcmVuZGVyLi5cbiAgICB0aGlzLndvcmxkQWxwaGEgPSAxO1xuXG4gICAgLy8gbm93IHJlbmRlciB0aGUgZ3JhcGhpYy4uXG4gICAgQ2FudmFzR3JhcGhpY3MucmVuZGVyR3JhcGhpY3ModGhpcywgdGhpcy5fY2FjaGVkU3ByaXRlLmJ1ZmZlci5jb250ZXh0KTtcblxuICAgIHRoaXMuX2NhY2hlZFNwcml0ZS5hbHBoYSA9IHRoaXMuYWxwaGE7XG59O1xuKi9cbi8qKlxuICogVXBkYXRlcyB0ZXh0dXJlIHNpemUgYmFzZWQgb24gY2FudmFzIHNpemVcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG4vKlxuR3JhcGhpY3MucHJvdG90eXBlLnVwZGF0ZUNhY2hlZFNwcml0ZVRleHR1cmUgPSBmdW5jdGlvbiAoKVxue1xuICAgIHZhciBjYWNoZWRTcHJpdGUgPSB0aGlzLl9jYWNoZWRTcHJpdGU7XG4gICAgdmFyIHRleHR1cmUgPSBjYWNoZWRTcHJpdGUudGV4dHVyZTtcbiAgICB2YXIgY2FudmFzID0gY2FjaGVkU3ByaXRlLmJ1ZmZlci5jYW52YXM7XG5cbiAgICB0ZXh0dXJlLmJhc2VUZXh0dXJlLndpZHRoID0gY2FudmFzLndpZHRoO1xuICAgIHRleHR1cmUuYmFzZVRleHR1cmUuaGVpZ2h0ID0gY2FudmFzLmhlaWdodDtcbiAgICB0ZXh0dXJlLmNyb3Aud2lkdGggPSB0ZXh0dXJlLmZyYW1lLndpZHRoID0gY2FudmFzLndpZHRoO1xuICAgIHRleHR1cmUuY3JvcC5oZWlnaHQgPSB0ZXh0dXJlLmZyYW1lLmhlaWdodCA9IGNhbnZhcy5oZWlnaHQ7XG5cbiAgICBjYWNoZWRTcHJpdGUuX3dpZHRoID0gY2FudmFzLndpZHRoO1xuICAgIGNhY2hlZFNwcml0ZS5faGVpZ2h0ID0gY2FudmFzLmhlaWdodDtcblxuICAgIC8vIHVwZGF0ZSB0aGUgZGlydHkgYmFzZSB0ZXh0dXJlc1xuICAgIHRleHR1cmUuYmFzZVRleHR1cmUuZGlydHkoKTtcbn07Ki9cblxuLyoqXG4gKiBEZXN0cm95cyBhIHByZXZpb3VzIGNhY2hlZCBzcHJpdGUuXG4gKlxuICovXG4vKlxuR3JhcGhpY3MucHJvdG90eXBlLmRlc3Ryb3lDYWNoZWRTcHJpdGUgPSBmdW5jdGlvbiAoKVxue1xuICAgIHRoaXMuX2NhY2hlZFNwcml0ZS50ZXh0dXJlLmRlc3Ryb3kodHJ1ZSk7XG5cbiAgICAvLyBsZXQgdGhlIGdjIGNvbGxlY3QgdGhlIHVudXNlZCBzcHJpdGVcbiAgICAvLyBUT0RPIGNvdWxkIGJlIG9iamVjdCBwb29sZWQhXG4gICAgdGhpcy5fY2FjaGVkU3ByaXRlID0gbnVsbDtcbn07Ki9cblxuLyoqXG4gKiBEcmF3cyB0aGUgZ2l2ZW4gc2hhcGUgdG8gdGhpcyBHcmFwaGljcyBvYmplY3QuIENhbiBiZSBhbnkgb2YgQ2lyY2xlLCBSZWN0YW5nbGUsIEVsbGlwc2UsIExpbmUgb3IgUG9seWdvbi5cbiAqXG4gKiBAcGFyYW0gc2hhcGUge1BJWEkuQ2lyY2xlfFBJWEkuUmVjdGFuZ2xlfFBJWEkuRWxsaXBzZXxQSVhJLkxpbmV8UElYSS5Qb2x5Z29ufSBUaGUgc2hhcGUgb2JqZWN0IHRvIGRyYXcuXG4gKiBAcmV0dXJuIHtQSVhJLkdyYXBoaWNzRGF0YX0gVGhlIGdlbmVyYXRlZCBHcmFwaGljc0RhdGEgb2JqZWN0LlxuICovXG5HcmFwaGljcy5wcm90b3R5cGUuZHJhd1NoYXBlID0gZnVuY3Rpb24gKHNoYXBlKVxue1xuICAgIGlmICh0aGlzLmN1cnJlbnRQYXRoKVxuICAgIHtcbiAgICAgICAgLy8gY2hlY2sgY3VycmVudCBwYXRoIVxuICAgICAgICBpZiAodGhpcy5jdXJyZW50UGF0aC5zaGFwZS5wb2ludHMubGVuZ3RoIDw9IDIpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuZ3JhcGhpY3NEYXRhLnBvcCgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5jdXJyZW50UGF0aCA9IG51bGw7XG5cbiAgICB2YXIgZGF0YSA9IG5ldyBHcmFwaGljc0RhdGEodGhpcy5saW5lV2lkdGgsIHRoaXMubGluZUNvbG9yLCB0aGlzLmxpbmVBbHBoYSwgdGhpcy5maWxsQ29sb3IsIHRoaXMuZmlsbEFscGhhLCB0aGlzLmZpbGxpbmcsIHNoYXBlKTtcblxuICAgIHRoaXMuZ3JhcGhpY3NEYXRhLnB1c2goZGF0YSk7XG5cbiAgICBpZiAoZGF0YS50eXBlID09PSBDT05TVC5TSEFQRVMuUE9MWSlcbiAgICB7XG4gICAgICAgIGRhdGEuc2hhcGUuY2xvc2VkID0gZGF0YS5zaGFwZS5jbG9zZWQgfHwgdGhpcy5maWxsaW5nO1xuICAgICAgICB0aGlzLmN1cnJlbnRQYXRoID0gZGF0YTtcbiAgICB9XG5cbiAgICB0aGlzLmRpcnR5ID0gdGhpcy5ib3VuZHNEaXJ0eSA9IHRydWU7XG5cbiAgICByZXR1cm4gZGF0YTtcbn07XG5cbi8qKlxuICogRGVzdHJveXMgdGhlIEdyYXBoaWNzIG9iamVjdC5cbiAqL1xuR3JhcGhpY3MucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoKSB7XG4gICAgQ29udGFpbmVyLnByb3RvdHlwZS5kZXN0cm95LmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG5cbiAgICAvLyBkZXN0cm95IGVhY2ggb2YgdGhlIEdyYXBoaWNzRGF0YSBvYmplY3RzXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmdyYXBoaWNzRGF0YS5sZW5ndGg7ICsraSkge1xuICAgICAgICB0aGlzLmdyYXBoaWNzRGF0YVtpXS5kZXN0cm95KCk7XG4gICAgfVxuXG4gICAgLy8gZm9yIGVhY2ggd2ViZ2wgZGF0YSBlbnRyeSwgZGVzdHJveSB0aGUgV2ViR0xHcmFwaGljc0RhdGFcbiAgICBmb3IgKHZhciBpZCBpbiB0aGlzLl93ZWJnbCkge1xuICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IHRoaXMuX3dlYmdsW2lkXS5kYXRhLmxlbmd0aDsgKytqKSB7XG4gICAgICAgICAgICB0aGlzLl93ZWJnbFtpZF0uZGF0YVtqXS5kZXN0cm95KCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLmdyYXBoaWNzRGF0YSA9IG51bGw7XG5cbiAgICB0aGlzLmN1cnJlbnRQYXRoID0gbnVsbDtcbiAgICB0aGlzLl93ZWJnbCA9IG51bGw7XG4gICAgdGhpcy5fbG9jYWxCb3VuZHMgPSBudWxsO1xufTtcbiIsIi8qKlxuICogQSBHcmFwaGljc0RhdGEgb2JqZWN0LlxuICpcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqIEBwYXJhbSBsaW5lV2lkdGgge251bWJlcn0gdGhlIHdpZHRoIG9mIHRoZSBsaW5lIHRvIGRyYXdcbiAqIEBwYXJhbSBsaW5lQ29sb3Ige251bWJlcn0gdGhlIGNvbG9yIG9mIHRoZSBsaW5lIHRvIGRyYXdcbiAqIEBwYXJhbSBsaW5lQWxwaGEge251bWJlcn0gdGhlIGFscGhhIG9mIHRoZSBsaW5lIHRvIGRyYXdcbiAqIEBwYXJhbSBmaWxsQ29sb3Ige251bWJlcn0gdGhlIGNvbG9yIG9mIHRoZSBmaWxsXG4gKiBAcGFyYW0gZmlsbEFscGhhIHtudW1iZXJ9IHRoZSBhbHBoYSBvZiB0aGUgZmlsbFxuICogQHBhcmFtIGZpbGwgICAgICB7Ym9vbGVhbn0gd2hldGhlciBvciBub3QgdGhlIHNoYXBlIGlzIGZpbGxlZCB3aXRoIGEgY29sb3VyXG4gKiBAcGFyYW0gc2hhcGUgICAgIHtDaXJjbGV8UmVjdGFuZ2xlfEVsbGlwc2V8TGluZXxQb2x5Z29ufSBUaGUgc2hhcGUgb2JqZWN0IHRvIGRyYXcuXG4gKi9cbmZ1bmN0aW9uIEdyYXBoaWNzRGF0YShsaW5lV2lkdGgsIGxpbmVDb2xvciwgbGluZUFscGhhLCBmaWxsQ29sb3IsIGZpbGxBbHBoYSwgZmlsbCwgc2hhcGUpXG57XG4gICAgLypcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9IHRoZSB3aWR0aCBvZiB0aGUgbGluZSB0byBkcmF3XG4gICAgICovXG4gICAgdGhpcy5saW5lV2lkdGggPSBsaW5lV2lkdGg7XG5cbiAgICAvKlxuICAgICAqIEBtZW1iZXIge251bWJlcn0gdGhlIGNvbG9yIG9mIHRoZSBsaW5lIHRvIGRyYXdcbiAgICAgKi9cbiAgICB0aGlzLmxpbmVDb2xvciA9IGxpbmVDb2xvcjtcbiAgICAvKlxuICAgICAqIEBtZW1iZXIge251bWJlcn0gdGhlIGFscGhhIG9mIHRoZSBsaW5lIHRvIGRyYXdcbiAgICAgKi9cbiAgICB0aGlzLmxpbmVBbHBoYSA9IGxpbmVBbHBoYTtcbiAgICAvKlxuICAgICAqIEBtZW1iZXIge251bWJlcn0gY2FjaGVkIHRpbnQgb2YgdGhlIGxpbmUgdG8gZHJhd1xuICAgICAqL1xuICAgIHRoaXMuX2xpbmVUaW50ID0gbGluZUNvbG9yO1xuXG4gICAgLypcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9IHRoZSBjb2xvciBvZiB0aGUgZmlsbFxuICAgICAqL1xuICAgIHRoaXMuZmlsbENvbG9yID0gZmlsbENvbG9yO1xuXG4gICAgLypcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9IHRoZSBhbHBoYSBvZiB0aGUgZmlsbFxuICAgICAqL1xuICAgIHRoaXMuZmlsbEFscGhhID0gZmlsbEFscGhhO1xuXG4gICAgLypcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9IGNhY2hlZCB0aW50IG9mIHRoZSBmaWxsXG4gICAgICovXG4gICAgdGhpcy5fZmlsbFRpbnQgPSBmaWxsQ29sb3I7XG5cbiAgICAvKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59IHdoZXRoZXIgb3Igbm90IHRoZSBzaGFwZSBpcyBmaWxsZWQgd2l0aCBhIGNvbG91clxuICAgICAqL1xuICAgIHRoaXMuZmlsbCA9IGZpbGw7XG5cbiAgICAvKlxuICAgICAqIEBtZW1iZXIge1BJWEkuQ2lyY2xlfFBJWEkuUmVjdGFuZ2xlfFBJWEkuRWxsaXBzZXxQSVhJLkxpbmV8UElYSS5Qb2x5Z29ufSBUaGUgc2hhcGUgb2JqZWN0IHRvIGRyYXcuXG4gICAgICovXG4gICAgdGhpcy5zaGFwZSA9IHNoYXBlO1xuXG4gICAgLypcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9IFRoZSB0eXBlIG9mIHRoZSBzaGFwZSwgc2VlIHRoZSBDb25zdC5TaGFwZXMgZmlsZSBmb3IgYWxsIHRoZSBleGlzdGluZyB0eXBlcyxcbiAgICAgKi9cbiAgICB0aGlzLnR5cGUgPSBzaGFwZS50eXBlO1xufVxuXG5HcmFwaGljc0RhdGEucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gR3JhcGhpY3NEYXRhO1xubW9kdWxlLmV4cG9ydHMgPSBHcmFwaGljc0RhdGE7XG5cbi8qKlxuICogQ3JlYXRlcyBhIG5ldyBHcmFwaGljc0RhdGEgb2JqZWN0IHdpdGggdGhlIHNhbWUgdmFsdWVzIGFzIHRoaXMgb25lLlxuICpcbiAqIEByZXR1cm4ge1BJWEkuR3JhcGhpY3NEYXRhfVxuICovXG5HcmFwaGljc0RhdGEucHJvdG90eXBlLmNsb25lID0gZnVuY3Rpb24gKClcbntcbiAgICByZXR1cm4gbmV3IEdyYXBoaWNzRGF0YShcbiAgICAgICAgdGhpcy5saW5lV2lkdGgsXG4gICAgICAgIHRoaXMubGluZUNvbG9yLFxuICAgICAgICB0aGlzLmxpbmVBbHBoYSxcbiAgICAgICAgdGhpcy5maWxsQ29sb3IsXG4gICAgICAgIHRoaXMuZmlsbEFscGhhLFxuICAgICAgICB0aGlzLmZpbGwsXG4gICAgICAgIHRoaXMuc2hhcGVcbiAgICApO1xufTtcblxuLyoqXG4gKiBEZXN0cm95cyB0aGUgR3JhcGhpY3MgZGF0YS5cbiAqL1xuR3JhcGhpY3NEYXRhLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKCkge1xuICAgIHRoaXMuc2hhcGUgPSBudWxsO1xufTtcbiIsInZhciB1dGlscyA9IHJlcXVpcmUoJy4uLy4uL3V0aWxzJyksXG4gICAgbWF0aCA9IHJlcXVpcmUoJy4uLy4uL21hdGgnKSxcbiAgICBDT05TVCA9IHJlcXVpcmUoJy4uLy4uL2NvbnN0JyksXG4gICAgT2JqZWN0UmVuZGVyZXIgPSByZXF1aXJlKCcuLi8uLi9yZW5kZXJlcnMvd2ViZ2wvdXRpbHMvT2JqZWN0UmVuZGVyZXInKSxcbiAgICBXZWJHTFJlbmRlcmVyID0gcmVxdWlyZSgnLi4vLi4vcmVuZGVyZXJzL3dlYmdsL1dlYkdMUmVuZGVyZXInKSxcbiAgICBXZWJHTEdyYXBoaWNzRGF0YSA9IHJlcXVpcmUoJy4vV2ViR0xHcmFwaGljc0RhdGEnKSxcbiAgICBQcmltaXRpdmVTaGFkZXIgPSByZXF1aXJlKCcuL1ByaW1pdGl2ZVNoYWRlcicpLFxuXG4gICAgLy8gc29tZSBkcmF3aW5nIGZ1bmN0aW9ucy4uXG4gICAgYnVpbGRMaW5lID0gcmVxdWlyZSgnLi9idWlsZExpbmUnKTtcbiAgICBidWlsZFBvbHkgPSByZXF1aXJlKCcuL2J1aWxkUG9seScpO1xuICAgIGJ1aWxkQ29tcGxleFBvbHkgPSByZXF1aXJlKCcuL2J1aWxkQ29tcGxleFBvbHknKTtcbiAgICBidWlsZFJlY3RhbmdsZSA9IHJlcXVpcmUoJy4vYnVpbGRSZWN0YW5nbGUnKTtcbiAgICBidWlsZFJvdW5kZWRSZWN0YW5nbGUgPSByZXF1aXJlKCcuL2J1aWxkUm91bmRlZFJlY3RhbmdsZScpO1xuICAgIGJ1aWxkQ2lyY2xlID0gcmVxdWlyZSgnLi9idWlsZENpcmNsZScpO1xuXG4gICAgZWFyY3V0ID0gcmVxdWlyZSgnZWFyY3V0Jyk7XG5cbi8qKlxuICogUmVuZGVycyB0aGUgZ3JhcGhpY3Mgb2JqZWN0LlxuICpcbiAqIEBjbGFzc1xuICogQHByaXZhdGVcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAZXh0ZW5kcyBQSVhJLk9iamVjdFJlbmRlcmVyXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcn0gVGhlIHJlbmRlcmVyIHRoaXMgb2JqZWN0IHJlbmRlcmVyIHdvcmtzIGZvci5cbiAqL1xuZnVuY3Rpb24gR3JhcGhpY3NSZW5kZXJlcihyZW5kZXJlcilcbntcbiAgICBPYmplY3RSZW5kZXJlci5jYWxsKHRoaXMsIHJlbmRlcmVyKTtcblxuICAgIHRoaXMuZ3JhcGhpY3NEYXRhUG9vbCA9IFtdO1xuXG4gICAgdGhpcy5wcmltaXRpdmVTaGFkZXIgPSBudWxsO1xuICAgIHRoaXMuY29tcGxleFByaW1pdGl2ZVNoYWRlciA9IG51bGw7XG5cbiAgICB0aGlzLmdsID0gcmVuZGVyZXIuZ2w7XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIGlzIHRoZSBtYXhpbXVtIG51bWJlciBvZiBwb2ludHMgYSBwb2x5IGNhbiBjb250YWluIGJlZm9yZSBpdCBpcyByZW5kZXJlZCBhcyBhIGNvbXBsZXggcG9seWdvbiAodXNpbmcgdGhlIHN0ZW5jaWwgYnVmZmVyKVxuICAgICAqIEB0eXBlIHtOdW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy5tYXhpbXVtU2ltcGxlUG9seVNpemUgPSAyMDA7XG59XG5cbkdyYXBoaWNzUmVuZGVyZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShPYmplY3RSZW5kZXJlci5wcm90b3R5cGUpO1xuR3JhcGhpY3NSZW5kZXJlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBHcmFwaGljc1JlbmRlcmVyO1xubW9kdWxlLmV4cG9ydHMgPSBHcmFwaGljc1JlbmRlcmVyO1xuXG5XZWJHTFJlbmRlcmVyLnJlZ2lzdGVyUGx1Z2luKCdncmFwaGljcycsIEdyYXBoaWNzUmVuZGVyZXIpO1xuXG4vKipcbiAqIENhbGxlZCB3aGVuIHRoZXJlIGlzIGEgV2ViR0wgY29udGV4dCBjaGFuZ2VcbiAqXG4gKiBAcHJpdmF0ZVxuICpcbiAqL1xuR3JhcGhpY3NSZW5kZXJlci5wcm90b3R5cGUub25Db250ZXh0Q2hhbmdlID0gZnVuY3Rpb24oKVxue1xuICAgIHRoaXMuZ2wgPSB0aGlzLnJlbmRlcmVyLmdsO1xuICAgIHRoaXMucHJpbWl0aXZlU2hhZGVyID0gbmV3IFByaW1pdGl2ZVNoYWRlcih0aGlzLmdsKVxufTtcblxuLyoqXG4gKiBEZXN0cm95cyB0aGlzIHJlbmRlcmVyLlxuICpcbiAqL1xuR3JhcGhpY3NSZW5kZXJlci5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uICgpIHtcbiAgICBPYmplY3RSZW5kZXJlci5wcm90b3R5cGUuZGVzdHJveS5jYWxsKHRoaXMpO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmdyYXBoaWNzRGF0YVBvb2wubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgdGhpcy5ncmFwaGljc0RhdGFQb29sW2ldLmRlc3Ryb3koKTtcbiAgICB9XG5cbiAgICB0aGlzLmdyYXBoaWNzRGF0YVBvb2wgPSBudWxsO1xufTtcblxuLyoqXG4gKiBSZW5kZXJzIGEgZ3JhcGhpY3Mgb2JqZWN0LlxuICpcbiAqIEBwYXJhbSBncmFwaGljcyB7UElYSS5HcmFwaGljc30gVGhlIGdyYXBoaWNzIG9iamVjdCB0byByZW5kZXIuXG4gKi9cbkdyYXBoaWNzUmVuZGVyZXIucHJvdG90eXBlLnJlbmRlciA9IGZ1bmN0aW9uKGdyYXBoaWNzKVxue1xuICAgIHZhciByZW5kZXJlciA9IHRoaXMucmVuZGVyZXI7XG4gICAgdmFyIGdsID0gcmVuZGVyZXIuZ2w7XG5cbiAgICB2YXIgd2ViR0xEYXRhO1xuICAvLyAgY29uc29sZS5sb2coZ3JhcGhpY3MpXG4gICAgaWYgKGdyYXBoaWNzLmRpcnR5IHx8ICFncmFwaGljcy5fd2ViR0xbZ2wuaWRdKVxuICAgIHtcbiAgICAgICAgdGhpcy51cGRhdGVHcmFwaGljcyhncmFwaGljcyk7XG4gICAgfVxuXG4gICAgdmFyIHdlYkdMID0gZ3JhcGhpY3MuX3dlYkdMW2dsLmlkXTtcblxuICAgIC8vIFRoaXMgIGNvdWxkIGJlIHNwZWVkZWQgdXAgZm9yIHN1cmUhXG5cbiAgICByZW5kZXJlci5ibGVuZE1vZGVNYW5hZ2VyLnNldEJsZW5kTW9kZSggZ3JhcGhpY3MuYmxlbmRNb2RlICk7XG5cbi8vICAgIHZhciBtYXRyaXggPSAgZ3JhcGhpY3Mud29ybGRUcmFuc2Zvcm0uY2xvbmUoKTtcbi8vICAgIHZhciBtYXRyaXggPSAgcmVuZGVyZXIuY3VycmVudFJlbmRlclRhcmdldC5wcm9qZWN0aW9uTWF0cml4LmNsb25lKCk7XG4vLyAgICBtYXRyaXguYXBwZW5kKGdyYXBoaWNzLndvcmxkVHJhbnNmb3JtKTtcblxuICAgIGZvciAodmFyIGkgPSAwLCBuID0gd2ViR0wuZGF0YS5sZW5ndGg7IGkgPCBuOyBpKyspXG4gICAge1xuICAgICAgICB3ZWJHTERhdGEgPSB3ZWJHTC5kYXRhW2ldO1xuXG4gICAgICAgIGlmICh3ZWJHTC5kYXRhW2ldLm1vZGUgPT09IDEpXG4gICAgICAgIHtcbiAgICAgICAgICAgIC8vVE9ETyBmaXggdGhpcyBvbmUhXG4gICAgICAgICAgICBcbiAgICAgICAgICAgIC8qXG4gICAgICAgICAgICByZW5kZXJlci5zdGVuY2lsTWFuYWdlci5wdXNoU3RlbmNpbChncmFwaGljcywgd2ViR0xEYXRhKTtcblxuICAgICAgICAgICAgZ2wudW5pZm9ybTFmKHJlbmRlcmVyLnNoYWRlck1hbmFnZXIuY29tcGxleFByaW1pdGl2ZVNoYWRlci51bmlmb3Jtcy5hbHBoYS5fbG9jYXRpb24sIGdyYXBoaWNzLndvcmxkQWxwaGEgKiB3ZWJHTERhdGEuYWxwaGEpO1xuXG4gICAgICAgICAgICAvLyByZW5kZXIgcXVhZC4uXG4gICAgICAgICAgICBnbC5kcmF3RWxlbWVudHMoZ2wuVFJJQU5HTEVfRkFOLCA0LCBnbC5VTlNJR05FRF9TSE9SVCwgKCB3ZWJHTERhdGEuaW5kaWNlcy5sZW5ndGggLSA0ICkgKiAyICk7XG5cbiAgICAgICAgICAgIHJlbmRlcmVyLnN0ZW5jaWxNYW5hZ2VyLnBvcFN0ZW5jaWwoZ3JhcGhpY3MsIHdlYkdMRGF0YSk7XG4gICAgICAgICAgICAqL1xuICAgICAgICB9XG4gICAgICAgIGVsc2VcbiAgICAgICAge1xuXG4gICAgICAgICAgICBzaGFkZXIgPSB0aGlzLnByaW1pdGl2ZVNoYWRlcjtcblxuICAgICAgICAgICAgcmVuZGVyZXIuYmluZFNoYWRlcihzaGFkZXIpXG5cbiAgICAgICAgICAgIHNoYWRlci51bmlmb3Jtcy50cmFuc2xhdGlvbk1hdHJpeCA9IGdyYXBoaWNzLndvcmxkVHJhbnNmb3JtLnRvQXJyYXkodHJ1ZSk7XG4gICAgICAgICAgICBzaGFkZXIudW5pZm9ybXMudGludCA9IHV0aWxzLmhleDJyZ2IoZ3JhcGhpY3MudGludCk7XG4gICAgICAgICAgICBzaGFkZXIudW5pZm9ybXMuYWxwaGEgPSBncmFwaGljcy53b3JsZEFscGhhO1xuXG5cbiAgICAgICAgICAgIGdsLmJpbmRCdWZmZXIoZ2wuQVJSQVlfQlVGRkVSLCB3ZWJHTERhdGEuYnVmZmVyKTtcblxuICAgICAgICAgICAgc2hhZGVyID0gdGhpcy5wcmltaXRpdmVTaGFkZXI7XG5cbiAgICAgICAgICAgIHNoYWRlci5hdHRyaWJ1dGVzLmFWZXJ0ZXhQb3NpdGlvbi5wb2ludGVyKGdsLkZMT0FULCBmYWxzZSwgNCAqIDYsIDApO1xuICAgICAgICAgICAgc2hhZGVyLmF0dHJpYnV0ZXMuYUNvbG9yLnBvaW50ZXIoZ2wuRkxPQVQsIGZhbHNlLCA0ICogNiwgMiAqIDQpO1xuXG4gICAgICAgICAgICBnbC5lbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShzaGFkZXIuYXR0cmlidXRlcy5hVmVydGV4UG9zaXRpb24ubG9jYXRpb24pO1xuICAgICAgICAgICAgZ2wuZW5hYmxlVmVydGV4QXR0cmliQXJyYXkoc2hhZGVyLmF0dHJpYnV0ZXMuYUNvbG9yLmxvY2F0aW9uKTtcblxuICAgICAgICAgICAgLy8gc2V0IHRoZSBpbmRleCBidWZmZXIhXG4gICAgICAgICAgICBnbC5iaW5kQnVmZmVyKGdsLkVMRU1FTlRfQVJSQVlfQlVGRkVSLCB3ZWJHTERhdGEuaW5kZXhCdWZmZXIpO1xuICAgICAgICAgICAgZ2wuZHJhd0VsZW1lbnRzKGdsLlRSSUFOR0xFX1NUUklQLCAgd2ViR0xEYXRhLmluZGljZXMubGVuZ3RoLCBnbC5VTlNJR05FRF9TSE9SVCwgMCApO1xuICAgICAgICB9XG5cbiAgICAgICAgcmVuZGVyZXIuZHJhd0NvdW50Kys7XG4gICAgfVxufTtcblxuLyoqXG4gKiBVcGRhdGVzIHRoZSBncmFwaGljcyBvYmplY3RcbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIGdyYXBoaWNzIHtQSVhJLkdyYXBoaWNzfSBUaGUgZ3JhcGhpY3Mgb2JqZWN0IHRvIHVwZGF0ZVxuICovXG5HcmFwaGljc1JlbmRlcmVyLnByb3RvdHlwZS51cGRhdGVHcmFwaGljcyA9IGZ1bmN0aW9uKGdyYXBoaWNzKVxue1xuICAgIHZhciBnbCA9IHRoaXMucmVuZGVyZXIuZ2w7XG5cbiAgICAgLy8gZ2V0IHRoZSBjb250ZXh0cyBncmFwaGljcyBvYmplY3RcbiAgICB2YXIgd2ViR0wgPSBncmFwaGljcy5fd2ViR0xbZ2wuaWRdO1xuXG4gICAgLy8gaWYgdGhlIGdyYXBoaWNzIG9iamVjdCBkb2VzIG5vdCBleGlzdCBpbiB0aGUgd2ViR0wgY29udGV4dCB0aW1lIHRvIGNyZWF0ZSBpdCFcbiAgICBpZiAoIXdlYkdMKVxuICAgIHtcbiAgICAgICAgd2ViR0wgPSBncmFwaGljcy5fd2ViR0xbZ2wuaWRdID0ge2xhc3RJbmRleDowLCBkYXRhOltdLCBnbDpnbH07XG4gICAgfVxuXG4gICBcbiAgICAvLyBmbGFnIHRoZSBncmFwaGljcyBhcyBub3QgZGlydHkgYXMgd2UgYXJlIGFib3V0IHRvIHVwZGF0ZSBpdC4uLlxuICAgIGdyYXBoaWNzLmRpcnR5ID0gZmFsc2U7XG5cbiAgICB2YXIgaTtcblxuICAgIC8vIGlmIHRoZSB1c2VyIGNsZWFyZWQgdGhlIGdyYXBoaWNzIG9iamVjdCB3ZSB3aWxsIG5lZWQgdG8gY2xlYXIgZXZlcnkgb2JqZWN0XG4gICAgaWYgKGdyYXBoaWNzLmNsZWFyRGlydHkpXG4gICAge1xuICAgICAgICBncmFwaGljcy5jbGVhckRpcnR5ID0gZmFsc2U7XG5cbiAgICAgICAgLy8gbG9vcCB0aHJvdWdoIGFuZCByZXR1cm4gYWxsIHRoZSB3ZWJHTERhdGFzIHRvIHRoZSBvYmplY3QgcG9vbCBzbyB0aGFuIGNhbiBiZSByZXVzZWQgbGF0ZXIgb25cbiAgICAgICAgZm9yIChpID0gMDsgaSA8IHdlYkdMLmRhdGEubGVuZ3RoOyBpKyspXG4gICAgICAgIHtcbiAgICAgICAgICAgIHZhciBncmFwaGljc0RhdGEgPSB3ZWJHTC5kYXRhW2ldO1xuICAgICAgICAgICAgZ3JhcGhpY3NEYXRhLnJlc2V0KCk7XG4gICAgICAgICAgICB0aGlzLmdyYXBoaWNzRGF0YVBvb2wucHVzaCggZ3JhcGhpY3NEYXRhICk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBjbGVhciB0aGUgYXJyYXkgYW5kIHJlc2V0IHRoZSBpbmRleC4uXG4gICAgICAgIHdlYkdMLmRhdGEgPSBbXTtcbiAgICAgICAgd2ViR0wubGFzdEluZGV4ID0gMDtcbiAgICB9XG5cbiAgICB2YXIgd2ViR0xEYXRhO1xuXG4gICAgLy8gbG9vcCB0aHJvdWdoIHRoZSBncmFwaGljcyBkYXRhcyBhbmQgY29uc3RydWN0IGVhY2ggb25lLi5cbiAgICAvLyBpZiB0aGUgb2JqZWN0IGlzIGEgY29tcGxleCBmaWxsIHRoZW4gdGhlIG5ldyBzdGVuY2lsIGJ1ZmZlciB0ZWNobmlxdWUgd2lsbCBiZSB1c2VkXG4gICAgLy8gb3RoZXIgd2lzZSBncmFwaGljcyBvYmplY3RzIHdpbGwgYmUgcHVzaGVkIGludG8gYSBiYXRjaC4uXG4gICAgZm9yIChpID0gd2ViR0wubGFzdEluZGV4OyBpIDwgZ3JhcGhpY3MuZ3JhcGhpY3NEYXRhLmxlbmd0aDsgaSsrKVxuICAgIHtcbiAgICAgICAgdmFyIGRhdGEgPSBncmFwaGljcy5ncmFwaGljc0RhdGFbaV07XG5cbiAgICAgICAgaWYgKGRhdGEudHlwZSA9PT0gQ09OU1QuU0hBUEVTLlBPTFkpXG4gICAgICAgIHtcbiAgICAgICAgICAgIC8vIG5lZWQgdG8gYWRkIHRoZSBwb2ludHMgdGhlIHRoZSBncmFwaGljcyBvYmplY3QuLlxuICAgICAgICAgICAgZGF0YS5wb2ludHMgPSBkYXRhLnNoYXBlLnBvaW50cy5zbGljZSgpO1xuICAgICAgICAgICAgaWYgKGRhdGEuc2hhcGUuY2xvc2VkKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIC8vIGNsb3NlIHRoZSBwb2x5IGlmIHRoZSB2YWx1ZSBpcyB0cnVlIVxuICAgICAgICAgICAgICAgIGlmIChkYXRhLnBvaW50c1swXSAhPT0gZGF0YS5wb2ludHNbZGF0YS5wb2ludHMubGVuZ3RoLTJdIHx8IGRhdGEucG9pbnRzWzFdICE9PSBkYXRhLnBvaW50c1tkYXRhLnBvaW50cy5sZW5ndGgtMV0pXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBkYXRhLnBvaW50cy5wdXNoKGRhdGEucG9pbnRzWzBdLCBkYXRhLnBvaW50c1sxXSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBNQUtFIFNVUkUgV0UgSEFWRSBUSEUgQ09SUkVDVCBUWVBFLi5cbiAgICAgICAgICAgIGlmIChkYXRhLmZpbGwpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgaWYgKGRhdGEucG9pbnRzLmxlbmd0aCA+PSA2KVxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGRhdGEucG9pbnRzLmxlbmd0aCA8IHRoaXMubWF4aW11bVNpbXBsZVBvbHlTaXplICogMilcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgd2ViR0xEYXRhID0gdGhpcy5zd2l0Y2hNb2RlKHdlYkdMLCAwKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNhbkRyYXdVc2luZ1NpbXBsZSA9IGJ1aWxkUG9seShkYXRhLCB3ZWJHTERhdGEpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWNhbkRyYXdVc2luZ1NpbXBsZSlcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3ZWJHTERhdGEgPSB0aGlzLnN3aXRjaE1vZGUod2ViR0wsIDEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1aWxkQ29tcGxleFBvbHkoZGF0YSwgd2ViR0xEYXRhKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgd2ViR0xEYXRhID0gdGhpcy5zd2l0Y2hNb2RlKHdlYkdMLCAxKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJ1aWxkQ29tcGxleFBvbHkoZGF0YSwgd2ViR0xEYXRhKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGRhdGEubGluZVdpZHRoID4gMClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB3ZWJHTERhdGEgPSB0aGlzLnN3aXRjaE1vZGUod2ViR0wsIDApO1xuICAgICAgICAgICAgICAgIGJ1aWxkTGluZShkYXRhLCB3ZWJHTERhdGEpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2VcbiAgICAgICAge1xuICAgICAgICAgICAgd2ViR0xEYXRhID0gdGhpcy5zd2l0Y2hNb2RlKHdlYkdMLCAwKTtcblxuICAgICAgICAgICAgaWYgKGRhdGEudHlwZSA9PT0gQ09OU1QuU0hBUEVTLlJFQ1QpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgYnVpbGRSZWN0YW5nbGUoZGF0YSwgd2ViR0xEYXRhKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGRhdGEudHlwZSA9PT0gQ09OU1QuU0hBUEVTLkNJUkMgfHwgZGF0YS50eXBlID09PSBDT05TVC5TSEFQRVMuRUxJUClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBidWlsZENpcmNsZShkYXRhLCB3ZWJHTERhdGEpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoZGF0YS50eXBlID09PSBDT05TVC5TSEFQRVMuUlJFQylcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBidWlsZFJvdW5kZWRSZWN0YW5nbGUoZGF0YSwgd2ViR0xEYXRhKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHdlYkdMLmxhc3RJbmRleCsrO1xuICAgIH1cblxuICAgIC8vIHVwbG9hZCBhbGwgdGhlIGRpcnR5IGRhdGEuLi5cbiAgICBmb3IgKGkgPSAwOyBpIDwgd2ViR0wuZGF0YS5sZW5ndGg7IGkrKylcbiAgICB7XG4gICAgICAgIHdlYkdMRGF0YSA9IHdlYkdMLmRhdGFbaV07XG5cbiAgICAgICAgaWYgKHdlYkdMRGF0YS5kaXJ0eSlcbiAgICAgICAge1xuICAgICAgICAgICAgd2ViR0xEYXRhLnVwbG9hZCgpO1xuICAgICAgICB9XG4gICAgfVxufTtcblxuLyoqXG4gKlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0gd2ViR0wge1dlYkdMUmVuZGVyaW5nQ29udGV4dH0gdGhlIGN1cnJlbnQgV2ViR0wgZHJhd2luZyBjb250ZXh0XG4gKiBAcGFyYW0gdHlwZSB7bnVtYmVyfSBUT0RPIEBBbHZpblxuICovXG5HcmFwaGljc1JlbmRlcmVyLnByb3RvdHlwZS5zd2l0Y2hNb2RlID0gZnVuY3Rpb24gKHdlYkdMLCB0eXBlKVxue1xuICAgIHZhciB3ZWJHTERhdGE7XG5cbiAgICBpZiAoIXdlYkdMLmRhdGEubGVuZ3RoKVxuICAgIHtcbiAgICAgICAgd2ViR0xEYXRhID0gdGhpcy5ncmFwaGljc0RhdGFQb29sLnBvcCgpIHx8IG5ldyBXZWJHTEdyYXBoaWNzRGF0YSh3ZWJHTC5nbCk7XG4gICAgICAgIHdlYkdMRGF0YS5tb2RlID0gdHlwZTtcbiAgICAgICAgd2ViR0wuZGF0YS5wdXNoKHdlYkdMRGF0YSk7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHdlYkdMRGF0YSA9IHdlYkdMLmRhdGFbd2ViR0wuZGF0YS5sZW5ndGgtMV07XG5cbiAgICAgICAgaWYgKCh3ZWJHTERhdGEucG9pbnRzLmxlbmd0aCA+IDMyMDAwMCkgfHwgd2ViR0xEYXRhLm1vZGUgIT09IHR5cGUgfHwgdHlwZSA9PT0gMSlcbiAgICAgICAge1xuICAgICAgICAgICAgd2ViR0xEYXRhID0gdGhpcy5ncmFwaGljc0RhdGFQb29sLnBvcCgpIHx8IG5ldyBXZWJHTEdyYXBoaWNzRGF0YSh3ZWJHTC5nbCk7XG4gICAgICAgICAgICB3ZWJHTERhdGEubW9kZSA9IHR5cGU7XG4gICAgICAgICAgICB3ZWJHTC5kYXRhLnB1c2god2ViR0xEYXRhKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHdlYkdMRGF0YS5kaXJ0eSA9IHRydWU7XG5cbiAgICByZXR1cm4gd2ViR0xEYXRhO1xufTtcblxuIiwidmFyIFNoYWRlciA9IHJlcXVpcmUoJ3BpeGktZ2wtY29yZScpLkdMU2hhZGVyO1xuXG4vKipcbiAqIFRoaXMgc2hhZGVyIGlzIHVzZWQgdG8gZHJhdyBzaW1wbGUgcHJpbWl0aXZlIHNoYXBlcyBmb3Ige0BsaW5rIFBJWEkuR3JhcGhpY3N9LlxuICpcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqIEBleHRlbmRzIFBJWEkuU2hhZGVyXG4gKiBAcGFyYW0gc2hhZGVyTWFuYWdlciB7U2hhZGVyTWFuYWdlcn0gVGhlIHdlYmdsIHNoYWRlciBtYW5hZ2VyIHRoaXMgc2hhZGVyIHdvcmtzIGZvci5cbiAqL1xuZnVuY3Rpb24gUHJpbWl0aXZlU2hhZGVyKGdsKVxue1xuICAgIFNoYWRlci5jYWxsKHRoaXMsXG4gICAgICAgIGdsLFxuICAgICAgICAvLyB2ZXJ0ZXggc2hhZGVyXG4gICAgICAgIFtcbiAgICAgICAgICAgICdhdHRyaWJ1dGUgdmVjMiBhVmVydGV4UG9zaXRpb247JyxcbiAgICAgICAgICAgICdhdHRyaWJ1dGUgdmVjNCBhQ29sb3I7JyxcblxuICAgICAgICAgICAgJ3VuaWZvcm0gbWF0MyB0cmFuc2xhdGlvbk1hdHJpeDsnLFxuICAgICAgICAgICAgJ3VuaWZvcm0gbWF0MyBwcm9qZWN0aW9uTWF0cml4OycsXG5cbiAgICAgICAgICAgICd1bmlmb3JtIGZsb2F0IGFscGhhOycsXG4gICAgICAgICAgICAndW5pZm9ybSBmbG9hdCBmbGlwWTsnLFxuICAgICAgICAgICAgJ3VuaWZvcm0gdmVjMyB0aW50OycsXG5cbiAgICAgICAgICAgICd2YXJ5aW5nIHZlYzQgdkNvbG9yOycsXG5cbiAgICAgICAgICAgICd2b2lkIG1haW4odm9pZCl7JyxcbiAgICAgICAgICAgICcgICBnbF9Qb3NpdGlvbiA9IHZlYzQoKHByb2plY3Rpb25NYXRyaXggKiB0cmFuc2xhdGlvbk1hdHJpeCAqIHZlYzMoYVZlcnRleFBvc2l0aW9uLCAxLjApKS54eSwgMC4wLCAxLjApOycsXG4gICAgICAgICAgICAnICAgdkNvbG9yID0gYUNvbG9yICogdmVjNCh0aW50ICogYWxwaGEsIGFscGhhKTsnLFxuICAgICAgICAgICAgJ30nXG4gICAgICAgIF0uam9pbignXFxuJyksXG4gICAgICAgIC8vIGZyYWdtZW50IHNoYWRlclxuICAgICAgICBbXG4gICAgICAgICAgICAncHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7JyxcblxuICAgICAgICAgICAgJ3ZhcnlpbmcgdmVjNCB2Q29sb3I7JyxcblxuICAgICAgICAgICAgJ3ZvaWQgbWFpbih2b2lkKXsnLFxuICAgICAgICAgICAgJyAgIGdsX0ZyYWdDb2xvciA9IHZDb2xvcjsnLFxuICAgICAgICAgICAgJ30nXG4gICAgICAgIF0uam9pbignXFxuJylcbiAgICApO1xufVxuXG5QcmltaXRpdmVTaGFkZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShTaGFkZXIucHJvdG90eXBlKTtcblByaW1pdGl2ZVNoYWRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBQcmltaXRpdmVTaGFkZXI7XG5cbm1vZHVsZS5leHBvcnRzID0gUHJpbWl0aXZlU2hhZGVyO1xuIiwiLyoqXG4gKiBBbiBvYmplY3QgY29udGFpbmluZyBXZWJHTCBzcGVjaWZpYyBwcm9wZXJ0aWVzIHRvIGJlIHVzZWQgYnkgdGhlIFdlYkdMIHJlbmRlcmVyXG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIGdsIHtXZWJHTFJlbmRlcmluZ0NvbnRleHR9IHRoZSBjdXJyZW50IFdlYkdMIGRyYXdpbmcgY29udGV4dFxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gV2ViR0xHcmFwaGljc0RhdGEoZ2wpIHtcblxuICAgIC8qKlxuICAgICAqIFRoZSBjdXJyZW50IFdlYkdMIGRyYXdpbmcgY29udGV4dFxuICAgICAqXG4gICAgICogQG1lbWJlciB7V2ViR0xSZW5kZXJpbmdDb250ZXh0fVxuICAgICAqL1xuICAgIHRoaXMuZ2wgPSBnbDtcblxuICAgIC8vVE9ETyBkb2VzIHRoaXMgbmVlZCB0byBiZSBzcGxpdCBiZWZvcmUgdXBsb2Rpbmc/P1xuICAgIC8qKlxuICAgICAqIEFuIGFycmF5IG9mIGNvbG9yIGNvbXBvbmVudHMgKHIsZyxiKVxuICAgICAqIEBtZW1iZXIge251bWJlcltdfVxuICAgICAqL1xuICAgIHRoaXMuY29sb3IgPSBbMCwwLDBdOyAvLyBjb2xvciBzcGxpdCFcblxuICAgIC8qKlxuICAgICAqIEFuIGFycmF5IG9mIHBvaW50cyB0byBkcmF3XG4gICAgICogQG1lbWJlciB7UElYSS5Qb2ludFtdfVxuICAgICAqL1xuICAgIHRoaXMucG9pbnRzID0gW107XG5cbiAgICAvKipcbiAgICAgKiBUaGUgaW5kaWNlcyBvZiB0aGUgdmVydGljZXNcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJbXX1cbiAgICAgKi9cbiAgICB0aGlzLmluZGljZXMgPSBbXTtcbiAgICAvKipcbiAgICAgKiBUaGUgbWFpbiBidWZmZXJcbiAgICAgKiBAbWVtYmVyIHtXZWJHTEJ1ZmZlcn1cbiAgICAgKi9cbiAgICB0aGlzLmJ1ZmZlciA9IGdsLmNyZWF0ZUJ1ZmZlcigpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGluZGV4IGJ1ZmZlclxuICAgICAqIEBtZW1iZXIge1dlYkdMQnVmZmVyfVxuICAgICAqL1xuICAgIHRoaXMuaW5kZXhCdWZmZXIgPSBnbC5jcmVhdGVCdWZmZXIoKTtcblxuICAgIC8qKlxuICAgICAqIHRvZG8gQGFsdmluXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMubW9kZSA9IDE7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYWxwaGEgb2YgdGhlIGdyYXBoaWNzXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMuYWxwaGEgPSAxO1xuXG4gICAgLyoqXG4gICAgICogV2hldGhlciB0aGlzIGdyYXBoaWNzIGlzIGRpcnR5IG9yIG5vdFxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICovXG4gICAgdGhpcy5kaXJ0eSA9IHRydWU7XG5cbiAgICB0aGlzLmdsUG9pbnRzID0gbnVsbDtcbiAgICB0aGlzLmdsSW5kaWNlcyA9IG51bGw7XG59XG5cbldlYkdMR3JhcGhpY3NEYXRhLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFdlYkdMR3JhcGhpY3NEYXRhO1xubW9kdWxlLmV4cG9ydHMgPSBXZWJHTEdyYXBoaWNzRGF0YTtcblxuLyoqXG4gKiBSZXNldHMgdGhlIHZlcnRpY2VzIGFuZCB0aGUgaW5kaWNlc1xuICovXG5XZWJHTEdyYXBoaWNzRGF0YS5wcm90b3R5cGUucmVzZXQgPSBmdW5jdGlvbiAoKSB7XG4gICAgdGhpcy5wb2ludHMubGVuZ3RoID0gMDtcbiAgICB0aGlzLmluZGljZXMubGVuZ3RoID0gMDtcbn07XG5cbi8qKlxuICogQmluZHMgdGhlIGJ1ZmZlcnMgYW5kIHVwbG9hZHMgdGhlIGRhdGFcbiAqL1xuV2ViR0xHcmFwaGljc0RhdGEucHJvdG90eXBlLnVwbG9hZCA9IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgZ2wgPSB0aGlzLmdsO1xuXG4vLyAgICB0aGlzLmxhc3RJbmRleCA9IGdyYXBoaWNzLmdyYXBoaWNzRGF0YS5sZW5ndGg7XG4gICAgdGhpcy5nbFBvaW50cyA9IG5ldyBGbG9hdDMyQXJyYXkodGhpcy5wb2ludHMpO1xuXG4gICAgZ2wuYmluZEJ1ZmZlcihnbC5BUlJBWV9CVUZGRVIsIHRoaXMuYnVmZmVyKTtcbiAgICBnbC5idWZmZXJEYXRhKGdsLkFSUkFZX0JVRkZFUiwgdGhpcy5nbFBvaW50cywgZ2wuU1RBVElDX0RSQVcpO1xuXG4gICAgdGhpcy5nbEluZGljZXMgPSBuZXcgVWludDE2QXJyYXkodGhpcy5pbmRpY2VzKTtcblxuICAgIGdsLmJpbmRCdWZmZXIoZ2wuRUxFTUVOVF9BUlJBWV9CVUZGRVIsIHRoaXMuaW5kZXhCdWZmZXIpO1xuICAgIGdsLmJ1ZmZlckRhdGEoZ2wuRUxFTUVOVF9BUlJBWV9CVUZGRVIsIHRoaXMuZ2xJbmRpY2VzLCBnbC5TVEFUSUNfRFJBVyk7XG5cbiAgICB0aGlzLmRpcnR5ID0gZmFsc2U7XG59O1xuXG5XZWJHTEdyYXBoaWNzRGF0YS5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uICgpIHtcbiAgICB0aGlzLmNvbG9yID0gbnVsbDtcbiAgICB0aGlzLnBvaW50cyA9IG51bGw7XG4gICAgdGhpcy5pbmRpY2VzID0gbnVsbDtcblxuICAgIHRoaXMuZ2wuZGVsZXRlQnVmZmVyKHRoaXMuYnVmZmVyKTtcbiAgICB0aGlzLmdsLmRlbGV0ZUJ1ZmZlcih0aGlzLmluZGV4QnVmZmVyKTtcbiAgICBcbiAgICB0aGlzLmdsID0gbnVsbDtcblxuICAgIHRoaXMuYnVmZmVyID0gbnVsbDtcbiAgICB0aGlzLmluZGV4QnVmZmVyID0gbnVsbDtcblxuICAgIHRoaXMuZ2xQb2ludHMgPSBudWxsO1xuICAgIHRoaXMuZ2xJbmRpY2VzID0gbnVsbDtcbn07XG4iLCJ2YXIgYnVpbGRMaW5lID0gcmVxdWlyZSgnLi9idWlsZExpbmUnKSxcbiAgICB1dGlscyA9IHJlcXVpcmUoJy4uLy4uL3V0aWxzJyk7XG5cbi8qKlxuICogQnVpbGRzIGEgY2lyY2xlIHRvIGRyYXdcbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIGdyYXBoaWNzRGF0YSB7UElYSS5HcmFwaGljc30gVGhlIGdyYXBoaWNzIG9iamVjdCB0byBkcmF3XG4gKiBAcGFyYW0gd2ViR0xEYXRhIHtvYmplY3R9IGFuIG9iamVjdCBjb250YWluaW5nIGFsbCB0aGUgd2ViR0wtc3BlY2lmaWMgaW5mb3JtYXRpb24gdG8gY3JlYXRlIHRoaXMgc2hhcGVcbiAqL1xudmFyIGJ1aWxkQ2lyY2xlID0gZnVuY3Rpb24gKGdyYXBoaWNzRGF0YSwgd2ViR0xEYXRhKVxue1xuICAgIC8vIG5lZWQgdG8gY29udmVydCBwb2ludHMgdG8gYSBuaWNlIHJlZ3VsYXIgZGF0YVxuICAgIHZhciBjaXJjbGVEYXRhID0gZ3JhcGhpY3NEYXRhLnNoYXBlO1xuICAgIHZhciB4ID0gY2lyY2xlRGF0YS54O1xuICAgIHZhciB5ID0gY2lyY2xlRGF0YS55O1xuICAgIHZhciB3aWR0aDtcbiAgICB2YXIgaGVpZ2h0O1xuXG4gICAgLy8gVE9ETyAtIGJpdCBoYWNreT8/XG4gICAgaWYgKGdyYXBoaWNzRGF0YS50eXBlID09PSBDT05TVC5TSEFQRVMuQ0lSQylcbiAgICB7XG4gICAgICAgIHdpZHRoID0gY2lyY2xlRGF0YS5yYWRpdXM7XG4gICAgICAgIGhlaWdodCA9IGNpcmNsZURhdGEucmFkaXVzO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICB3aWR0aCA9IGNpcmNsZURhdGEud2lkdGg7XG4gICAgICAgIGhlaWdodCA9IGNpcmNsZURhdGEuaGVpZ2h0O1xuICAgIH1cblxuICAgIHZhciB0b3RhbFNlZ3MgPSBNYXRoLmZsb29yKDMwICogTWF0aC5zcXJ0KGNpcmNsZURhdGEucmFkaXVzKSkgfHwgTWF0aC5mbG9vcigxNSAqIE1hdGguc3FydChjaXJjbGVEYXRhLndpZHRoICsgY2lyY2xlRGF0YS5oZWlnaHQpKTtcbiAgICB2YXIgc2VnID0gKE1hdGguUEkgKiAyKSAvIHRvdGFsU2VncyA7XG5cbiAgICB2YXIgaSA9IDA7XG5cbiAgICBpZiAoZ3JhcGhpY3NEYXRhLmZpbGwpXG4gICAge1xuICAgICAgICB2YXIgY29sb3IgPSB1dGlscy5oZXgycmdiKGdyYXBoaWNzRGF0YS5maWxsQ29sb3IpO1xuICAgICAgICB2YXIgYWxwaGEgPSBncmFwaGljc0RhdGEuZmlsbEFscGhhO1xuXG4gICAgICAgIHZhciByID0gY29sb3JbMF0gKiBhbHBoYTtcbiAgICAgICAgdmFyIGcgPSBjb2xvclsxXSAqIGFscGhhO1xuICAgICAgICB2YXIgYiA9IGNvbG9yWzJdICogYWxwaGE7XG5cbiAgICAgICAgdmFyIHZlcnRzID0gd2ViR0xEYXRhLnBvaW50cztcbiAgICAgICAgdmFyIGluZGljZXMgPSB3ZWJHTERhdGEuaW5kaWNlcztcblxuICAgICAgICB2YXIgdmVjUG9zID0gdmVydHMubGVuZ3RoLzY7XG5cbiAgICAgICAgaW5kaWNlcy5wdXNoKHZlY1Bvcyk7XG5cbiAgICAgICAgZm9yIChpID0gMDsgaSA8IHRvdGFsU2VncyArIDEgOyBpKyspXG4gICAgICAgIHtcbiAgICAgICAgICAgIHZlcnRzLnB1c2goeCx5LCByLCBnLCBiLCBhbHBoYSk7XG5cbiAgICAgICAgICAgIHZlcnRzLnB1c2goeCArIE1hdGguc2luKHNlZyAqIGkpICogd2lkdGgsXG4gICAgICAgICAgICAgICAgICAgICAgIHkgKyBNYXRoLmNvcyhzZWcgKiBpKSAqIGhlaWdodCxcbiAgICAgICAgICAgICAgICAgICAgICAgciwgZywgYiwgYWxwaGEpO1xuXG4gICAgICAgICAgICBpbmRpY2VzLnB1c2godmVjUG9zKyssIHZlY1BvcysrKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGluZGljZXMucHVzaCh2ZWNQb3MtMSk7XG4gICAgfVxuXG4gICAgaWYgKGdyYXBoaWNzRGF0YS5saW5lV2lkdGgpXG4gICAge1xuICAgICAgICB2YXIgdGVtcFBvaW50cyA9IGdyYXBoaWNzRGF0YS5wb2ludHM7XG5cbiAgICAgICAgZ3JhcGhpY3NEYXRhLnBvaW50cyA9IFtdO1xuXG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCB0b3RhbFNlZ3MgKyAxOyBpKyspXG4gICAgICAgIHtcbiAgICAgICAgICAgIGdyYXBoaWNzRGF0YS5wb2ludHMucHVzaCh4ICsgTWF0aC5zaW4oc2VnICogaSkgKiB3aWR0aCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB5ICsgTWF0aC5jb3Moc2VnICogaSkgKiBoZWlnaHQpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5idWlsZExpbmUoZ3JhcGhpY3NEYXRhLCB3ZWJHTERhdGEpO1xuXG4gICAgICAgIGdyYXBoaWNzRGF0YS5wb2ludHMgPSB0ZW1wUG9pbnRzO1xuICAgIH1cbn07XG5cblxubW9kdWxlLmV4cG9ydHMgPSBidWlsZENpcmNsZTsiLCJ2YXIgYnVpbGRMaW5lID0gcmVxdWlyZSgnLi9idWlsZExpbmUnKSxcbiAgICB1dGlscyA9IHJlcXVpcmUoJy4uLy4uL3V0aWxzJyk7XG4gICAgXG5cblxuLyoqXG4gKiBCdWlsZHMgYSBjb21wbGV4IHBvbHlnb24gdG8gZHJhd1xuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0gZ3JhcGhpY3NEYXRhIHtQSVhJLkdyYXBoaWNzfSBUaGUgZ3JhcGhpY3Mgb2JqZWN0IGNvbnRhaW5pbmcgYWxsIHRoZSBuZWNlc3NhcnkgcHJvcGVydGllc1xuICogQHBhcmFtIHdlYkdMRGF0YSB7b2JqZWN0fSBhbiBvYmplY3QgY29udGFpbmluZyBhbGwgdGhlIHdlYkdMLXNwZWNpZmljIGluZm9ybWF0aW9uIHRvIGNyZWF0ZSB0aGlzIHNoYXBlXG4gKi9cbnZhciBidWlsZENvbXBsZXhQb2x5ID0gZnVuY3Rpb24gKGdyYXBoaWNzRGF0YSwgd2ViR0xEYXRhKVxue1xuICAgIC8vVE9ETyAtIG5vIG5lZWQgdG8gY29weSB0aGlzIGFzIGl0IGdldHMgdHVybmVkIGludG8gYSBGTG9hdDMyQXJyYXkgYW55d2F5cy4uXG4gICAgdmFyIHBvaW50cyA9IGdyYXBoaWNzRGF0YS5wb2ludHMuc2xpY2UoKTtcblxuICAgIGlmIChwb2ludHMubGVuZ3RoIDwgNilcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBnZXQgZmlyc3QgYW5kIGxhc3QgcG9pbnQuLiBmaWd1cmUgb3V0IHRoZSBtaWRkbGUhXG4gICAgdmFyIGluZGljZXMgPSB3ZWJHTERhdGEuaW5kaWNlcztcbiAgICB3ZWJHTERhdGEucG9pbnRzID0gcG9pbnRzO1xuICAgIHdlYkdMRGF0YS5hbHBoYSA9IGdyYXBoaWNzRGF0YS5maWxsQWxwaGE7XG4gICAgd2ViR0xEYXRhLmNvbG9yID0gdXRpbHMuaGV4MnJnYihncmFwaGljc0RhdGEuZmlsbENvbG9yKTtcblxuICAgIC8vIGNhbGNsYXRlIHRoZSBib3VuZHMuLlxuICAgIHZhciBtaW5YID0gSW5maW5pdHk7XG4gICAgdmFyIG1heFggPSAtSW5maW5pdHk7XG5cbiAgICB2YXIgbWluWSA9IEluZmluaXR5O1xuICAgIHZhciBtYXhZID0gLUluZmluaXR5O1xuXG4gICAgdmFyIHgseTtcblxuICAgIC8vIGdldCBzaXplLi5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHBvaW50cy5sZW5ndGg7IGkrPTIpXG4gICAge1xuICAgICAgICB4ID0gcG9pbnRzW2ldO1xuICAgICAgICB5ID0gcG9pbnRzW2krMV07XG5cbiAgICAgICAgbWluWCA9IHggPCBtaW5YID8geCA6IG1pblg7XG4gICAgICAgIG1heFggPSB4ID4gbWF4WCA/IHggOiBtYXhYO1xuXG4gICAgICAgIG1pblkgPSB5IDwgbWluWSA/IHkgOiBtaW5ZO1xuICAgICAgICBtYXhZID0geSA+IG1heFkgPyB5IDogbWF4WTtcbiAgICB9XG5cbiAgICAvLyBhZGQgYSBxdWFkIHRvIHRoZSBlbmQgY29zIHRoZXJlIGlzIG5vIHBvaW50IG1ha2luZyBhbm90aGVyIGJ1ZmZlciFcbiAgICBwb2ludHMucHVzaChtaW5YLCBtaW5ZLFxuICAgICAgICAgICAgICAgIG1heFgsIG1pblksXG4gICAgICAgICAgICAgICAgbWF4WCwgbWF4WSxcbiAgICAgICAgICAgICAgICBtaW5YLCBtYXhZKTtcblxuICAgIC8vIHB1c2ggYSBxdWFkIG9udG8gdGhlIGVuZC4uXG5cbiAgICAvL1RPRE8gLSB0aGlzIGFpbnQgbmVlZGVkIVxuICAgIHZhciBsZW5ndGggPSBwb2ludHMubGVuZ3RoIC8gMjtcbiAgICBmb3IgKGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspXG4gICAge1xuICAgICAgICBpbmRpY2VzLnB1c2goIGkgKTtcbiAgICB9XG5cbn07XG5cblxuXG5tb2R1bGUuZXhwb3J0cyA9IGJ1aWxkQ29tcGxleFBvbHk7IiwidmFyIG1hdGggPSByZXF1aXJlKCcuLi8uLi9tYXRoJyksXG4gICAgdXRpbHMgPSByZXF1aXJlKCcuLi8uLi91dGlscycpO1xuXG4vKipcbiAqIEJ1aWxkcyBhIGxpbmUgdG8gZHJhd1xuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0gZ3JhcGhpY3NEYXRhIHtQSVhJLkdyYXBoaWNzfSBUaGUgZ3JhcGhpY3Mgb2JqZWN0IGNvbnRhaW5pbmcgYWxsIHRoZSBuZWNlc3NhcnkgcHJvcGVydGllc1xuICogQHBhcmFtIHdlYkdMRGF0YSB7b2JqZWN0fSBhbiBvYmplY3QgY29udGFpbmluZyBhbGwgdGhlIHdlYkdMLXNwZWNpZmljIGluZm9ybWF0aW9uIHRvIGNyZWF0ZSB0aGlzIHNoYXBlXG4gKi9cbnZhciBidWlsZExpbmUgPSBmdW5jdGlvbiAoZ3JhcGhpY3NEYXRhLCB3ZWJHTERhdGEpXG57XG4gICAgLy8gVE9ETyBPUFRJTUlTRSFcbiAgICB2YXIgaSA9IDA7XG4gICAgdmFyIHBvaW50cyA9IGdyYXBoaWNzRGF0YS5wb2ludHM7XG5cbiAgICBpZiAocG9pbnRzLmxlbmd0aCA9PT0gMClcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgLy8gaWYgdGhlIGxpbmUgd2lkdGggaXMgYW4gb2RkIG51bWJlciBhZGQgMC41IHRvIGFsaWduIHRvIGEgd2hvbGUgcGl4ZWxcbiAgICAvLyBjb21tZW50aW5nIHRoaXMgb3V0IGZpeGVzICM3MTEgYW5kICMxNjIwXG4gICAgLy8gaWYgKGdyYXBoaWNzRGF0YS5saW5lV2lkdGglMilcbiAgICAvLyB7XG4gICAgLy8gICAgIGZvciAoaSA9IDA7IGkgPCBwb2ludHMubGVuZ3RoOyBpKyspXG4gICAgLy8gICAgIHtcbiAgICAvLyAgICAgICAgIHBvaW50c1tpXSArPSAwLjU7XG4gICAgLy8gICAgIH1cbiAgICAvLyB9XG5cbiAgICAvLyBnZXQgZmlyc3QgYW5kIGxhc3QgcG9pbnQuLiBmaWd1cmUgb3V0IHRoZSBtaWRkbGUhXG4gICAgdmFyIGZpcnN0UG9pbnQgPSBuZXcgbWF0aC5Qb2ludChwb2ludHNbMF0sIHBvaW50c1sxXSk7XG4gICAgdmFyIGxhc3RQb2ludCA9IG5ldyBtYXRoLlBvaW50KHBvaW50c1twb2ludHMubGVuZ3RoIC0gMl0sIHBvaW50c1twb2ludHMubGVuZ3RoIC0gMV0pO1xuXG4gICAgLy8gaWYgdGhlIGZpcnN0IHBvaW50IGlzIHRoZSBsYXN0IHBvaW50IC0gZ29ubmEgaGF2ZSBpc3N1ZXMgOilcbiAgICBpZiAoZmlyc3RQb2ludC54ID09PSBsYXN0UG9pbnQueCAmJiBmaXJzdFBvaW50LnkgPT09IGxhc3RQb2ludC55KVxuICAgIHtcbiAgICAgICAgLy8gbmVlZCB0byBjbG9uZSBhcyB3ZSBhcmUgZ29pbmcgdG8gc2xpZ2h0bHkgbW9kaWZ5IHRoZSBzaGFwZS4uXG4gICAgICAgIHBvaW50cyA9IHBvaW50cy5zbGljZSgpO1xuXG4gICAgICAgIHBvaW50cy5wb3AoKTtcbiAgICAgICAgcG9pbnRzLnBvcCgpO1xuXG4gICAgICAgIGxhc3RQb2ludCA9IG5ldyBtYXRoLlBvaW50KHBvaW50c1twb2ludHMubGVuZ3RoIC0gMl0sIHBvaW50c1twb2ludHMubGVuZ3RoIC0gMV0pO1xuXG4gICAgICAgIHZhciBtaWRQb2ludFggPSBsYXN0UG9pbnQueCArIChmaXJzdFBvaW50LnggLSBsYXN0UG9pbnQueCkgKjAuNTtcbiAgICAgICAgdmFyIG1pZFBvaW50WSA9IGxhc3RQb2ludC55ICsgKGZpcnN0UG9pbnQueSAtIGxhc3RQb2ludC55KSAqMC41O1xuXG4gICAgICAgIHBvaW50cy51bnNoaWZ0KG1pZFBvaW50WCwgbWlkUG9pbnRZKTtcbiAgICAgICAgcG9pbnRzLnB1c2gobWlkUG9pbnRYLCBtaWRQb2ludFkpO1xuICAgIH1cblxuICAgIHZhciB2ZXJ0cyA9IHdlYkdMRGF0YS5wb2ludHM7XG4gICAgdmFyIGluZGljZXMgPSB3ZWJHTERhdGEuaW5kaWNlcztcbiAgICB2YXIgbGVuZ3RoID0gcG9pbnRzLmxlbmd0aCAvIDI7XG4gICAgdmFyIGluZGV4Q291bnQgPSBwb2ludHMubGVuZ3RoO1xuICAgIHZhciBpbmRleFN0YXJ0ID0gdmVydHMubGVuZ3RoLzY7XG5cbiAgICAvLyBEUkFXIHRoZSBMaW5lXG4gICAgdmFyIHdpZHRoID0gZ3JhcGhpY3NEYXRhLmxpbmVXaWR0aCAvIDI7XG5cbiAgICAvLyBzb3J0IGNvbG9yXG4gICAgdmFyIGNvbG9yID0gdXRpbHMuaGV4MnJnYihncmFwaGljc0RhdGEubGluZUNvbG9yKTtcbiAgICB2YXIgYWxwaGEgPSBncmFwaGljc0RhdGEubGluZUFscGhhO1xuICAgIHZhciByID0gY29sb3JbMF0gKiBhbHBoYTtcbiAgICB2YXIgZyA9IGNvbG9yWzFdICogYWxwaGE7XG4gICAgdmFyIGIgPSBjb2xvclsyXSAqIGFscGhhO1xuXG4gICAgdmFyIHB4LCBweSwgcDF4LCBwMXksIHAyeCwgcDJ5LCBwM3gsIHAzeTtcbiAgICB2YXIgcGVycHgsIHBlcnB5LCBwZXJwMngsIHBlcnAyeSwgcGVycDN4LCBwZXJwM3k7XG4gICAgdmFyIGExLCBiMSwgYzEsIGEyLCBiMiwgYzI7XG4gICAgdmFyIGRlbm9tLCBwZGlzdCwgZGlzdDtcblxuICAgIHAxeCA9IHBvaW50c1swXTtcbiAgICBwMXkgPSBwb2ludHNbMV07XG5cbiAgICBwMnggPSBwb2ludHNbMl07XG4gICAgcDJ5ID0gcG9pbnRzWzNdO1xuXG4gICAgcGVycHggPSAtKHAxeSAtIHAyeSk7XG4gICAgcGVycHkgPSAgcDF4IC0gcDJ4O1xuXG4gICAgZGlzdCA9IE1hdGguc3FydChwZXJweCpwZXJweCArIHBlcnB5KnBlcnB5KTtcblxuICAgIHBlcnB4IC89IGRpc3Q7XG4gICAgcGVycHkgLz0gZGlzdDtcbiAgICBwZXJweCAqPSB3aWR0aDtcbiAgICBwZXJweSAqPSB3aWR0aDtcblxuICAgIC8vIHN0YXJ0XG4gICAgdmVydHMucHVzaChwMXggLSBwZXJweCAsIHAxeSAtIHBlcnB5LFxuICAgICAgICAgICAgICAgIHIsIGcsIGIsIGFscGhhKTtcblxuICAgIHZlcnRzLnB1c2gocDF4ICsgcGVycHggLCBwMXkgKyBwZXJweSxcbiAgICAgICAgICAgICAgICByLCBnLCBiLCBhbHBoYSk7XG5cbiAgICBmb3IgKGkgPSAxOyBpIDwgbGVuZ3RoLTE7IGkrKylcbiAgICB7XG4gICAgICAgIHAxeCA9IHBvaW50c1soaS0xKSoyXTtcbiAgICAgICAgcDF5ID0gcG9pbnRzWyhpLTEpKjIgKyAxXTtcblxuICAgICAgICBwMnggPSBwb2ludHNbKGkpKjJdO1xuICAgICAgICBwMnkgPSBwb2ludHNbKGkpKjIgKyAxXTtcblxuICAgICAgICBwM3ggPSBwb2ludHNbKGkrMSkqMl07XG4gICAgICAgIHAzeSA9IHBvaW50c1soaSsxKSoyICsgMV07XG5cbiAgICAgICAgcGVycHggPSAtKHAxeSAtIHAyeSk7XG4gICAgICAgIHBlcnB5ID0gcDF4IC0gcDJ4O1xuXG4gICAgICAgIGRpc3QgPSBNYXRoLnNxcnQocGVycHgqcGVycHggKyBwZXJweSpwZXJweSk7XG4gICAgICAgIHBlcnB4IC89IGRpc3Q7XG4gICAgICAgIHBlcnB5IC89IGRpc3Q7XG4gICAgICAgIHBlcnB4ICo9IHdpZHRoO1xuICAgICAgICBwZXJweSAqPSB3aWR0aDtcblxuICAgICAgICBwZXJwMnggPSAtKHAyeSAtIHAzeSk7XG4gICAgICAgIHBlcnAyeSA9IHAyeCAtIHAzeDtcblxuICAgICAgICBkaXN0ID0gTWF0aC5zcXJ0KHBlcnAyeCpwZXJwMnggKyBwZXJwMnkqcGVycDJ5KTtcbiAgICAgICAgcGVycDJ4IC89IGRpc3Q7XG4gICAgICAgIHBlcnAyeSAvPSBkaXN0O1xuICAgICAgICBwZXJwMnggKj0gd2lkdGg7XG4gICAgICAgIHBlcnAyeSAqPSB3aWR0aDtcblxuICAgICAgICBhMSA9ICgtcGVycHkgKyBwMXkpIC0gKC1wZXJweSArIHAyeSk7XG4gICAgICAgIGIxID0gKC1wZXJweCArIHAyeCkgLSAoLXBlcnB4ICsgcDF4KTtcbiAgICAgICAgYzEgPSAoLXBlcnB4ICsgcDF4KSAqICgtcGVycHkgKyBwMnkpIC0gKC1wZXJweCArIHAyeCkgKiAoLXBlcnB5ICsgcDF5KTtcbiAgICAgICAgYTIgPSAoLXBlcnAyeSArIHAzeSkgLSAoLXBlcnAyeSArIHAyeSk7XG4gICAgICAgIGIyID0gKC1wZXJwMnggKyBwMngpIC0gKC1wZXJwMnggKyBwM3gpO1xuICAgICAgICBjMiA9ICgtcGVycDJ4ICsgcDN4KSAqICgtcGVycDJ5ICsgcDJ5KSAtICgtcGVycDJ4ICsgcDJ4KSAqICgtcGVycDJ5ICsgcDN5KTtcblxuICAgICAgICBkZW5vbSA9IGExKmIyIC0gYTIqYjE7XG5cbiAgICAgICAgaWYgKE1hdGguYWJzKGRlbm9tKSA8IDAuMSApXG4gICAgICAgIHtcblxuICAgICAgICAgICAgZGVub20rPTEwLjE7XG4gICAgICAgICAgICB2ZXJ0cy5wdXNoKHAyeCAtIHBlcnB4ICwgcDJ5IC0gcGVycHksXG4gICAgICAgICAgICAgICAgciwgZywgYiwgYWxwaGEpO1xuXG4gICAgICAgICAgICB2ZXJ0cy5wdXNoKHAyeCArIHBlcnB4ICwgcDJ5ICsgcGVycHksXG4gICAgICAgICAgICAgICAgciwgZywgYiwgYWxwaGEpO1xuXG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHB4ID0gKGIxKmMyIC0gYjIqYzEpL2Rlbm9tO1xuICAgICAgICBweSA9IChhMipjMSAtIGExKmMyKS9kZW5vbTtcblxuXG4gICAgICAgIHBkaXN0ID0gKHB4IC1wMngpICogKHB4IC1wMngpICsgKHB5IC1wMnkpICogKHB5IC1wMnkpO1xuXG5cbiAgICAgICAgaWYgKHBkaXN0ID4gMTQwICogMTQwKVxuICAgICAgICB7XG4gICAgICAgICAgICBwZXJwM3ggPSBwZXJweCAtIHBlcnAyeDtcbiAgICAgICAgICAgIHBlcnAzeSA9IHBlcnB5IC0gcGVycDJ5O1xuXG4gICAgICAgICAgICBkaXN0ID0gTWF0aC5zcXJ0KHBlcnAzeCpwZXJwM3ggKyBwZXJwM3kqcGVycDN5KTtcbiAgICAgICAgICAgIHBlcnAzeCAvPSBkaXN0O1xuICAgICAgICAgICAgcGVycDN5IC89IGRpc3Q7XG4gICAgICAgICAgICBwZXJwM3ggKj0gd2lkdGg7XG4gICAgICAgICAgICBwZXJwM3kgKj0gd2lkdGg7XG5cbiAgICAgICAgICAgIHZlcnRzLnB1c2gocDJ4IC0gcGVycDN4LCBwMnkgLXBlcnAzeSk7XG4gICAgICAgICAgICB2ZXJ0cy5wdXNoKHIsIGcsIGIsIGFscGhhKTtcblxuICAgICAgICAgICAgdmVydHMucHVzaChwMnggKyBwZXJwM3gsIHAyeSArcGVycDN5KTtcbiAgICAgICAgICAgIHZlcnRzLnB1c2gociwgZywgYiwgYWxwaGEpO1xuXG4gICAgICAgICAgICB2ZXJ0cy5wdXNoKHAyeCAtIHBlcnAzeCwgcDJ5IC1wZXJwM3kpO1xuICAgICAgICAgICAgdmVydHMucHVzaChyLCBnLCBiLCBhbHBoYSk7XG5cbiAgICAgICAgICAgIGluZGV4Q291bnQrKztcbiAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgIHtcblxuICAgICAgICAgICAgdmVydHMucHVzaChweCAsIHB5KTtcbiAgICAgICAgICAgIHZlcnRzLnB1c2gociwgZywgYiwgYWxwaGEpO1xuXG4gICAgICAgICAgICB2ZXJ0cy5wdXNoKHAyeCAtIChweC1wMngpLCBwMnkgLSAocHkgLSBwMnkpKTtcbiAgICAgICAgICAgIHZlcnRzLnB1c2gociwgZywgYiwgYWxwaGEpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcDF4ID0gcG9pbnRzWyhsZW5ndGgtMikqMl07XG4gICAgcDF5ID0gcG9pbnRzWyhsZW5ndGgtMikqMiArIDFdO1xuXG4gICAgcDJ4ID0gcG9pbnRzWyhsZW5ndGgtMSkqMl07XG4gICAgcDJ5ID0gcG9pbnRzWyhsZW5ndGgtMSkqMiArIDFdO1xuXG4gICAgcGVycHggPSAtKHAxeSAtIHAyeSk7XG4gICAgcGVycHkgPSBwMXggLSBwMng7XG5cbiAgICBkaXN0ID0gTWF0aC5zcXJ0KHBlcnB4KnBlcnB4ICsgcGVycHkqcGVycHkpO1xuICAgIHBlcnB4IC89IGRpc3Q7XG4gICAgcGVycHkgLz0gZGlzdDtcbiAgICBwZXJweCAqPSB3aWR0aDtcbiAgICBwZXJweSAqPSB3aWR0aDtcblxuICAgIHZlcnRzLnB1c2gocDJ4IC0gcGVycHggLCBwMnkgLSBwZXJweSk7XG4gICAgdmVydHMucHVzaChyLCBnLCBiLCBhbHBoYSk7XG5cbiAgICB2ZXJ0cy5wdXNoKHAyeCArIHBlcnB4ICwgcDJ5ICsgcGVycHkpO1xuICAgIHZlcnRzLnB1c2gociwgZywgYiwgYWxwaGEpO1xuXG4gICAgaW5kaWNlcy5wdXNoKGluZGV4U3RhcnQpO1xuXG4gICAgZm9yIChpID0gMDsgaSA8IGluZGV4Q291bnQ7IGkrKylcbiAgICB7XG4gICAgICAgIGluZGljZXMucHVzaChpbmRleFN0YXJ0KyspO1xuICAgIH1cblxuICAgIGluZGljZXMucHVzaChpbmRleFN0YXJ0LTEpO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBidWlsZExpbmU7IiwidmFyIHV0aWxzID0gcmVxdWlyZSgnLi4vLi4vdXRpbHMnKTtcblxuLyoqXG4gKiBCdWlsZHMgYSBwb2x5Z29uIHRvIGRyYXdcbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIGdyYXBoaWNzRGF0YSB7UElYSS5XZWJHTEdyYXBoaWNzRGF0YX0gVGhlIGdyYXBoaWNzIG9iamVjdCBjb250YWluaW5nIGFsbCB0aGUgbmVjZXNzYXJ5IHByb3BlcnRpZXNcbiAqIEBwYXJhbSB3ZWJHTERhdGEge29iamVjdH0gYW4gb2JqZWN0IGNvbnRhaW5pbmcgYWxsIHRoZSB3ZWJHTC1zcGVjaWZpYyBpbmZvcm1hdGlvbiB0byBjcmVhdGUgdGhpcyBzaGFwZVxuICovXG52YXIgYnVpbGRQb2x5ID0gZnVuY3Rpb24gKGdyYXBoaWNzRGF0YSwgd2ViR0xEYXRhKVxue1xuICAgIHZhciBwb2ludHMgPSBncmFwaGljc0RhdGEucG9pbnRzO1xuXG4gICAgaWYgKHBvaW50cy5sZW5ndGggPCA2KVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIGdldCBmaXJzdCBhbmQgbGFzdCBwb2ludC4uIGZpZ3VyZSBvdXQgdGhlIG1pZGRsZSFcbiAgICB2YXIgdmVydHMgPSB3ZWJHTERhdGEucG9pbnRzO1xuICAgIHZhciBpbmRpY2VzID0gd2ViR0xEYXRhLmluZGljZXM7XG5cbiAgICB2YXIgbGVuZ3RoID0gcG9pbnRzLmxlbmd0aCAvIDI7XG5cbiAgICAvLyBzb3J0IGNvbG9yXG4gICAgdmFyIGNvbG9yID0gdXRpbHMuaGV4MnJnYihncmFwaGljc0RhdGEuZmlsbENvbG9yKTtcbiAgICB2YXIgYWxwaGEgPSBncmFwaGljc0RhdGEuZmlsbEFscGhhO1xuICAgIHZhciByID0gY29sb3JbMF0gKiBhbHBoYTtcbiAgICB2YXIgZyA9IGNvbG9yWzFdICogYWxwaGE7XG4gICAgdmFyIGIgPSBjb2xvclsyXSAqIGFscGhhO1xuXG4gICAgdmFyIHRyaWFuZ2xlcyA9IGVhcmN1dChwb2ludHMsIG51bGwsIDIpO1xuXG4gICAgaWYgKCF0cmlhbmdsZXMpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHZhciB2ZXJ0UG9zID0gdmVydHMubGVuZ3RoIC8gNjtcblxuICAgIHZhciBpID0gMDtcblxuICAgIGZvciAoaSA9IDA7IGkgPCB0cmlhbmdsZXMubGVuZ3RoOyBpKz0zKVxuICAgIHtcbiAgICAgICAgaW5kaWNlcy5wdXNoKHRyaWFuZ2xlc1tpXSArIHZlcnRQb3MpO1xuICAgICAgICBpbmRpY2VzLnB1c2godHJpYW5nbGVzW2ldICsgdmVydFBvcyk7XG4gICAgICAgIGluZGljZXMucHVzaCh0cmlhbmdsZXNbaSsxXSArIHZlcnRQb3MpO1xuICAgICAgICBpbmRpY2VzLnB1c2godHJpYW5nbGVzW2krMl0gK3ZlcnRQb3MpO1xuICAgICAgICBpbmRpY2VzLnB1c2godHJpYW5nbGVzW2krMl0gKyB2ZXJ0UG9zKTtcbiAgICB9XG5cbiAgICBmb3IgKGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspXG4gICAge1xuICAgICAgICB2ZXJ0cy5wdXNoKHBvaW50c1tpICogMl0sIHBvaW50c1tpICogMiArIDFdLFxuICAgICAgICAgICAgICAgICAgIHIsIGcsIGIsIGFscGhhKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdHJ1ZTtcbn07XG5cblxubW9kdWxlLmV4cG9ydHMgPSBidWlsZFBvbHk7XG4iLCJ2YXIgYnVpbGRMaW5lID0gcmVxdWlyZSgnLi9idWlsZExpbmUnKSxcbiAgICB1dGlscyA9IHJlcXVpcmUoJy4uLy4uL3V0aWxzJyk7XG5cbi8qKlxuICogQnVpbGRzIGEgcmVjdGFuZ2xlIHRvIGRyYXdcbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIGdyYXBoaWNzRGF0YSB7UElYSS5HcmFwaGljc30gVGhlIGdyYXBoaWNzIG9iamVjdCBjb250YWluaW5nIGFsbCB0aGUgbmVjZXNzYXJ5IHByb3BlcnRpZXNcbiAqIEBwYXJhbSB3ZWJHTERhdGEge29iamVjdH0gYW4gb2JqZWN0IGNvbnRhaW5pbmcgYWxsIHRoZSB3ZWJHTC1zcGVjaWZpYyBpbmZvcm1hdGlvbiB0byBjcmVhdGUgdGhpcyBzaGFwZVxuICovXG52YXIgYnVpbGRSZWN0YW5nbGUgPSBmdW5jdGlvbiAoZ3JhcGhpY3NEYXRhLCB3ZWJHTERhdGEpXG57XG4gICAgLy8gLS0tIC8vXG4gICAgLy8gbmVlZCB0byBjb252ZXJ0IHBvaW50cyB0byBhIG5pY2UgcmVndWxhciBkYXRhXG4gICAgLy9cbiAgICB2YXIgcmVjdERhdGEgPSBncmFwaGljc0RhdGEuc2hhcGU7XG4gICAgdmFyIHggPSByZWN0RGF0YS54O1xuICAgIHZhciB5ID0gcmVjdERhdGEueTtcbiAgICB2YXIgd2lkdGggPSByZWN0RGF0YS53aWR0aDtcbiAgICB2YXIgaGVpZ2h0ID0gcmVjdERhdGEuaGVpZ2h0O1xuXG4gICAgaWYgKGdyYXBoaWNzRGF0YS5maWxsKVxuICAgIHtcbiAgICAgICAgdmFyIGNvbG9yID0gdXRpbHMuaGV4MnJnYihncmFwaGljc0RhdGEuZmlsbENvbG9yKTtcbiAgICAgICAgdmFyIGFscGhhID0gZ3JhcGhpY3NEYXRhLmZpbGxBbHBoYTtcblxuICAgICAgICB2YXIgciA9IGNvbG9yWzBdICogYWxwaGE7XG4gICAgICAgIHZhciBnID0gY29sb3JbMV0gKiBhbHBoYTtcbiAgICAgICAgdmFyIGIgPSBjb2xvclsyXSAqIGFscGhhO1xuXG4gICAgICAgIHZhciB2ZXJ0cyA9IHdlYkdMRGF0YS5wb2ludHM7XG4gICAgICAgIHZhciBpbmRpY2VzID0gd2ViR0xEYXRhLmluZGljZXM7XG5cbiAgICAgICAgdmFyIHZlcnRQb3MgPSB2ZXJ0cy5sZW5ndGgvNjtcblxuICAgICAgICAvLyBzdGFydFxuICAgICAgICB2ZXJ0cy5wdXNoKHgsIHkpO1xuICAgICAgICB2ZXJ0cy5wdXNoKHIsIGcsIGIsIGFscGhhKTtcblxuICAgICAgICB2ZXJ0cy5wdXNoKHggKyB3aWR0aCwgeSk7XG4gICAgICAgIHZlcnRzLnB1c2gociwgZywgYiwgYWxwaGEpO1xuXG4gICAgICAgIHZlcnRzLnB1c2goeCAsIHkgKyBoZWlnaHQpO1xuICAgICAgICB2ZXJ0cy5wdXNoKHIsIGcsIGIsIGFscGhhKTtcblxuICAgICAgICB2ZXJ0cy5wdXNoKHggKyB3aWR0aCwgeSArIGhlaWdodCk7XG4gICAgICAgIHZlcnRzLnB1c2gociwgZywgYiwgYWxwaGEpO1xuXG4gICAgICAgIC8vIGluc2VydCAyIGRlYWQgdHJpYW5nbGVzLi5cbiAgICAgICAgaW5kaWNlcy5wdXNoKHZlcnRQb3MsIHZlcnRQb3MsIHZlcnRQb3MrMSwgdmVydFBvcysyLCB2ZXJ0UG9zKzMsIHZlcnRQb3MrMyk7XG4gICAgfVxuXG4gICAgaWYgKGdyYXBoaWNzRGF0YS5saW5lV2lkdGgpXG4gICAge1xuICAgICAgICB2YXIgdGVtcFBvaW50cyA9IGdyYXBoaWNzRGF0YS5wb2ludHM7XG5cbiAgICAgICAgZ3JhcGhpY3NEYXRhLnBvaW50cyA9IFt4LCB5LFxuICAgICAgICAgICAgICAgICAgeCArIHdpZHRoLCB5LFxuICAgICAgICAgICAgICAgICAgeCArIHdpZHRoLCB5ICsgaGVpZ2h0LFxuICAgICAgICAgICAgICAgICAgeCwgeSArIGhlaWdodCxcbiAgICAgICAgICAgICAgICAgIHgsIHldO1xuXG5cbiAgICAgICAgYnVpbGRMaW5lKGdyYXBoaWNzRGF0YSwgd2ViR0xEYXRhKTtcblxuICAgICAgICBncmFwaGljc0RhdGEucG9pbnRzID0gdGVtcFBvaW50cztcbiAgICB9XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGJ1aWxkUmVjdGFuZ2xlOyIsInZhciBidWlsZExpbmUgPSByZXF1aXJlKCcuL2J1aWxkTGluZScpLFxuICAgIHV0aWxzID0gcmVxdWlyZSgnLi4vLi4vdXRpbHMnKTtcbiAgICBcbi8qKlxuICogQnVpbGRzIGEgcm91bmRlZCByZWN0YW5nbGUgdG8gZHJhd1xuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0gZ3JhcGhpY3NEYXRhIHtQSVhJLkdyYXBoaWNzfSBUaGUgZ3JhcGhpY3Mgb2JqZWN0IGNvbnRhaW5pbmcgYWxsIHRoZSBuZWNlc3NhcnkgcHJvcGVydGllc1xuICogQHBhcmFtIHdlYkdMRGF0YSB7b2JqZWN0fSBhbiBvYmplY3QgY29udGFpbmluZyBhbGwgdGhlIHdlYkdMLXNwZWNpZmljIGluZm9ybWF0aW9uIHRvIGNyZWF0ZSB0aGlzIHNoYXBlXG4gKi9cbmJ1aWxkUm91bmRlZFJlY3RhbmdsZSA9IGZ1bmN0aW9uIChncmFwaGljc0RhdGEsIHdlYkdMRGF0YSlcbntcbiAgICB2YXIgcnJlY3REYXRhID0gZ3JhcGhpY3NEYXRhLnNoYXBlO1xuICAgIHZhciB4ID0gcnJlY3REYXRhLng7XG4gICAgdmFyIHkgPSBycmVjdERhdGEueTtcbiAgICB2YXIgd2lkdGggPSBycmVjdERhdGEud2lkdGg7XG4gICAgdmFyIGhlaWdodCA9IHJyZWN0RGF0YS5oZWlnaHQ7XG5cbiAgICB2YXIgcmFkaXVzID0gcnJlY3REYXRhLnJhZGl1cztcblxuICAgIHZhciByZWNQb2ludHMgPSBbXTtcbiAgICByZWNQb2ludHMucHVzaCh4LCB5ICsgcmFkaXVzKTtcbiAgICB0aGlzLnF1YWRyYXRpY0JlemllckN1cnZlKHgsIHkgKyBoZWlnaHQgLSByYWRpdXMsIHgsIHkgKyBoZWlnaHQsIHggKyByYWRpdXMsIHkgKyBoZWlnaHQsIHJlY1BvaW50cyk7XG4gICAgdGhpcy5xdWFkcmF0aWNCZXppZXJDdXJ2ZSh4ICsgd2lkdGggLSByYWRpdXMsIHkgKyBoZWlnaHQsIHggKyB3aWR0aCwgeSArIGhlaWdodCwgeCArIHdpZHRoLCB5ICsgaGVpZ2h0IC0gcmFkaXVzLCByZWNQb2ludHMpO1xuICAgIHRoaXMucXVhZHJhdGljQmV6aWVyQ3VydmUoeCArIHdpZHRoLCB5ICsgcmFkaXVzLCB4ICsgd2lkdGgsIHksIHggKyB3aWR0aCAtIHJhZGl1cywgeSwgcmVjUG9pbnRzKTtcbiAgICB0aGlzLnF1YWRyYXRpY0JlemllckN1cnZlKHggKyByYWRpdXMsIHksIHgsIHksIHgsIHkgKyByYWRpdXMgKyAwLjAwMDAwMDAwMDEsIHJlY1BvaW50cyk7XG5cbiAgICAvLyB0aGlzIHRpbnkgbnVtYmVyIGRlYWxzIHdpdGggdGhlIGlzc3VlIHRoYXQgb2NjdXJzIHdoZW4gcG9pbnRzIG92ZXJsYXAgYW5kIGVhcmN1dCBmYWlscyB0byB0cmlhbmd1bGF0ZSB0aGUgaXRlbS5cbiAgICAvLyBUT0RPIC0gZml4IHRoaXMgcHJvcGVybHksIHRoaXMgaXMgbm90IHZlcnkgZWxlZ2FudC4uIGJ1dCBpdCB3b3JrcyBmb3Igbm93LlxuXG4gICAgaWYgKGdyYXBoaWNzRGF0YS5maWxsKVxuICAgIHtcbiAgICAgICAgdmFyIGNvbG9yID0gdXRpbHMuaGV4MnJnYihncmFwaGljc0RhdGEuZmlsbENvbG9yKTtcbiAgICAgICAgdmFyIGFscGhhID0gZ3JhcGhpY3NEYXRhLmZpbGxBbHBoYTtcblxuICAgICAgICB2YXIgciA9IGNvbG9yWzBdICogYWxwaGE7XG4gICAgICAgIHZhciBnID0gY29sb3JbMV0gKiBhbHBoYTtcbiAgICAgICAgdmFyIGIgPSBjb2xvclsyXSAqIGFscGhhO1xuXG4gICAgICAgIHZhciB2ZXJ0cyA9IHdlYkdMRGF0YS5wb2ludHM7XG4gICAgICAgIHZhciBpbmRpY2VzID0gd2ViR0xEYXRhLmluZGljZXM7XG5cbiAgICAgICAgdmFyIHZlY1BvcyA9IHZlcnRzLmxlbmd0aC82O1xuXG4gICAgICAgIHZhciB0cmlhbmdsZXMgPSBlYXJjdXQocmVjUG9pbnRzLCBudWxsLCAyKTtcblxuICAgICAgICB2YXIgaSA9IDA7XG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCB0cmlhbmdsZXMubGVuZ3RoOyBpKz0zKVxuICAgICAgICB7XG4gICAgICAgICAgICBpbmRpY2VzLnB1c2godHJpYW5nbGVzW2ldICsgdmVjUG9zKTtcbiAgICAgICAgICAgIGluZGljZXMucHVzaCh0cmlhbmdsZXNbaV0gKyB2ZWNQb3MpO1xuICAgICAgICAgICAgaW5kaWNlcy5wdXNoKHRyaWFuZ2xlc1tpKzFdICsgdmVjUG9zKTtcbiAgICAgICAgICAgIGluZGljZXMucHVzaCh0cmlhbmdsZXNbaSsyXSArIHZlY1Bvcyk7XG4gICAgICAgICAgICBpbmRpY2VzLnB1c2godHJpYW5nbGVzW2krMl0gKyB2ZWNQb3MpO1xuICAgICAgICB9XG5cbiAgICAgICAgZm9yIChpID0gMDsgaSA8IHJlY1BvaW50cy5sZW5ndGg7IGkrKylcbiAgICAgICAge1xuICAgICAgICAgICAgdmVydHMucHVzaChyZWNQb2ludHNbaV0sIHJlY1BvaW50c1srK2ldLCByLCBnLCBiLCBhbHBoYSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoZ3JhcGhpY3NEYXRhLmxpbmVXaWR0aClcbiAgICB7XG4gICAgICAgIHZhciB0ZW1wUG9pbnRzID0gZ3JhcGhpY3NEYXRhLnBvaW50cztcblxuICAgICAgICBncmFwaGljc0RhdGEucG9pbnRzID0gcmVjUG9pbnRzO1xuXG4gICAgICAgIHRoaXMuYnVpbGRMaW5lKGdyYXBoaWNzRGF0YSwgd2ViR0xEYXRhKTtcblxuICAgICAgICBncmFwaGljc0RhdGEucG9pbnRzID0gdGVtcFBvaW50cztcbiAgICB9XG59O1xuXG4vKipcbiAqIENhbGN1bGF0ZSB0aGUgcG9pbnRzIGZvciBhIHF1YWRyYXRpYyBiZXppZXIgY3VydmUuIChoZWxwZXIgZnVuY3Rpb24uLilcbiAqIEJhc2VkIG9uOiBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy83ODUwOTcvaG93LWRvLWktaW1wbGVtZW50LWEtYmV6aWVyLWN1cnZlLWluLWNcbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIGZyb21YIHtudW1iZXJ9IE9yaWdpbiBwb2ludCB4XG4gKiBAcGFyYW0gZnJvbVkge251bWJlcn0gT3JpZ2luIHBvaW50IHhcbiAqIEBwYXJhbSBjcFgge251bWJlcn0gQ29udHJvbCBwb2ludCB4XG4gKiBAcGFyYW0gY3BZIHtudW1iZXJ9IENvbnRyb2wgcG9pbnQgeVxuICogQHBhcmFtIHRvWCB7bnVtYmVyfSBEZXN0aW5hdGlvbiBwb2ludCB4XG4gKiBAcGFyYW0gdG9ZIHtudW1iZXJ9IERlc3RpbmF0aW9uIHBvaW50IHlcbiAqIEBwYXJhbSBbb3V0XSB7bnVtYmVyW119IFRoZSBvdXRwdXQgYXJyYXkgdG8gYWRkIHBvaW50cyBpbnRvLiBJZiBub3QgcGFzc2VkLCBhIG5ldyBhcnJheSBpcyBjcmVhdGVkLlxuICogQHJldHVybiB7bnVtYmVyW119IGFuIGFycmF5IG9mIHBvaW50c1xuICovXG5xdWFkcmF0aWNCZXppZXJDdXJ2ZSA9IGZ1bmN0aW9uIChmcm9tWCwgZnJvbVksIGNwWCwgY3BZLCB0b1gsIHRvWSwgb3V0KVxue1xuICAgIHZhciB4YSxcbiAgICAgICAgeWEsXG4gICAgICAgIHhiLFxuICAgICAgICB5YixcbiAgICAgICAgeCxcbiAgICAgICAgeSxcbiAgICAgICAgbiA9IDIwLFxuICAgICAgICBwb2ludHMgPSBvdXQgfHwgW107XG5cbiAgICBmdW5jdGlvbiBnZXRQdChuMSAsIG4yLCBwZXJjKSB7XG4gICAgICAgIHZhciBkaWZmID0gbjIgLSBuMTtcblxuICAgICAgICByZXR1cm4gbjEgKyAoIGRpZmYgKiBwZXJjICk7XG4gICAgfVxuXG4gICAgdmFyIGogPSAwO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDw9IG47IGkrKyApIHtcbiAgICAgICAgaiA9IGkgLyBuO1xuXG4gICAgICAgIC8vIFRoZSBHcmVlbiBMaW5lXG4gICAgICAgIHhhID0gZ2V0UHQoIGZyb21YICwgY3BYICwgaiApO1xuICAgICAgICB5YSA9IGdldFB0KCBmcm9tWSAsIGNwWSAsIGogKTtcbiAgICAgICAgeGIgPSBnZXRQdCggY3BYICwgdG9YICwgaiApO1xuICAgICAgICB5YiA9IGdldFB0KCBjcFkgLCB0b1kgLCBqICk7XG5cbiAgICAgICAgLy8gVGhlIEJsYWNrIERvdFxuICAgICAgICB4ID0gZ2V0UHQoIHhhICwgeGIgLCBqICk7XG4gICAgICAgIHkgPSBnZXRQdCggeWEgLCB5YiAsIGogKTtcblxuICAgICAgICBwb2ludHMucHVzaCh4LCB5KTtcbiAgICB9XG5cbiAgICByZXR1cm4gcG9pbnRzO1xufTtcblxuXG5tb2R1bGUuZXhwb3J0cyA9IGJ1aWxkUm91bmRlZFJlY3RhbmdsZTsiLCIvKipcbiAqIEBmaWxlICAgICAgICBNYWluIGV4cG9ydCBvZiB0aGUgUElYSSBjb3JlIGxpYnJhcnlcbiAqIEBhdXRob3IgICAgICBNYXQgR3JvdmVzIDxtYXRAZ29vZGJveWRpZ2l0YWwuY29tPlxuICogQGNvcHlyaWdodCAgIDIwMTMtMjAxNSBHb29kQm95RGlnaXRhbFxuICogQGxpY2Vuc2UgICAgIHtAbGluayBodHRwczovL2dpdGh1Yi5jb20vcGl4aWpzL3BpeGkuanMvYmxvYi9tYXN0ZXIvTElDRU5TRXxNSVQgTGljZW5zZX1cbiAqL1xuXG4vKipcbiAqIEBuYW1lc3BhY2UgUElYSVxuICovXG4vLyBleHBvcnQgY29yZSBhbmQgY29uc3QuIFdlIGFzc2lnbiBjb3JlIHRvIGNvbnN0IHNvIHRoYXQgdGhlIG5vbi1yZWZlcmVuY2UgdHlwZXMgaW4gY29uc3QgcmVtYWluIGluLXRhY3RcbnZhciBjb3JlID0gbW9kdWxlLmV4cG9ydHMgPSBPYmplY3QuYXNzaWduKHJlcXVpcmUoJy4vY29uc3QnKSwgcmVxdWlyZSgnLi9tYXRoJyksIHtcbiAgICAvLyB1dGlsc1xuICAgIHV0aWxzOiByZXF1aXJlKCcuL3V0aWxzJyksXG4gICAgdGlja2VyOiByZXF1aXJlKCcuL3RpY2tlcicpLFxuXG4gICAgLy8gZGlzcGxheVxuICAgIERpc3BsYXlPYmplY3Q6ICAgICAgICAgIHJlcXVpcmUoJy4vZGlzcGxheS9EaXNwbGF5T2JqZWN0JyksXG4gICAgQ29udGFpbmVyOiAgICAgICAgICAgICAgcmVxdWlyZSgnLi9kaXNwbGF5L0NvbnRhaW5lcicpLFxuXG4gICAgLy8gc3ByaXRlc1xuICAgIFNwcml0ZTogICAgICAgICAgICAgICAgIHJlcXVpcmUoJy4vc3ByaXRlcy9TcHJpdGUnKSxcbiAgICBQYXJ0aWNsZUNvbnRhaW5lcjogICAgICByZXF1aXJlKCcuL3BhcnRpY2xlcy9QYXJ0aWNsZUNvbnRhaW5lcicpLFxuICAgIFNwcml0ZVJlbmRlcmVyOiAgICAgICAgIHJlcXVpcmUoJy4vc3ByaXRlcy93ZWJnbC9TcHJpdGVSZW5kZXJlcicpLFxuICAgIFBhcnRpY2xlUmVuZGVyZXI6ICAgICAgIHJlcXVpcmUoJy4vcGFydGljbGVzL3dlYmdsL1BhcnRpY2xlUmVuZGVyZXInKSxcblxuICAgIC8vIHRleHRcbiAgICBUZXh0OiAgICAgICAgICAgICAgICAgICByZXF1aXJlKCcuL3RleHQvVGV4dCcpLFxuXG4gICAgLy8gcHJpbWl0aXZlc1xuICAgIEdyYXBoaWNzOiAgICAgICAgICAgICAgIHJlcXVpcmUoJy4vZ3JhcGhpY3MvR3JhcGhpY3MnKSxcbiAgICBHcmFwaGljc0RhdGE6ICAgICAgICAgICByZXF1aXJlKCcuL2dyYXBoaWNzL0dyYXBoaWNzRGF0YScpLFxuICAgIEdyYXBoaWNzUmVuZGVyZXI6ICAgICAgIHJlcXVpcmUoJy4vZ3JhcGhpY3Mvd2ViZ2wvR3JhcGhpY3NSZW5kZXJlcicpLFxuXG4gICAgLy8gdGV4dHVyZXNcbiAgICBUZXh0dXJlOiAgICAgICAgICAgICAgICByZXF1aXJlKCcuL3RleHR1cmVzL1RleHR1cmUnKSxcbiAgICBCYXNlVGV4dHVyZTogICAgICAgICAgICByZXF1aXJlKCcuL3RleHR1cmVzL0Jhc2VUZXh0dXJlJyksXG4gICAgUmVuZGVyVGV4dHVyZTogICAgICAgICAgcmVxdWlyZSgnLi90ZXh0dXJlcy9SZW5kZXJUZXh0dXJlJyksXG4gICAgVmlkZW9CYXNlVGV4dHVyZTogICAgICAgcmVxdWlyZSgnLi90ZXh0dXJlcy9WaWRlb0Jhc2VUZXh0dXJlJyksXG4gICAgVGV4dHVyZVV2czogICAgICAgICAgICAgcmVxdWlyZSgnLi90ZXh0dXJlcy9UZXh0dXJlVXZzJyksXG5cbiAgICAvLyByZW5kZXJlcnMgLSBjYW52YXNcbiAgICBDYW52YXNSZW5kZXJlcjogICAgICAgICByZXF1aXJlKCcuL3JlbmRlcmVycy9jYW52YXMvQ2FudmFzUmVuZGVyZXInKSxcbiAgICBDYW52YXNHcmFwaGljczogICAgICAgICByZXF1aXJlKCcuL3JlbmRlcmVycy9jYW52YXMvdXRpbHMvQ2FudmFzR3JhcGhpY3MnKSxcbiAgICBDYW52YXNCdWZmZXI6ICAgICAgICAgICByZXF1aXJlKCcuL3JlbmRlcmVycy9jYW52YXMvdXRpbHMvQ2FudmFzQnVmZmVyJyksXG5cbiAgICAvLyByZW5kZXJlcnMgLSB3ZWJnbFxuICAgIFdlYkdMUmVuZGVyZXI6ICAgICAgICAgIHJlcXVpcmUoJy4vcmVuZGVyZXJzL3dlYmdsL1dlYkdMUmVuZGVyZXInKSxcbiAgICBXZWJHTE1hbmFnZXI6ICAgICAgICAgIHJlcXVpcmUoJy4vcmVuZGVyZXJzL3dlYmdsL21hbmFnZXJzL1dlYkdMTWFuYWdlcicpLFxuICAgIFNoYWRlck1hbmFnZXI6ICAgICAgICAgIHJlcXVpcmUoJy4vcmVuZGVyZXJzL3dlYmdsL21hbmFnZXJzL1NoYWRlck1hbmFnZXInKSxcbiAgICBTaGFkZXI6ICAgICAgICAgICAgICAgICByZXF1aXJlKCcuL3JlbmRlcmVycy93ZWJnbC9zaGFkZXJzL1NoYWRlcicpLFxuICAgIE9iamVjdFJlbmRlcmVyOiAgICAgICAgIHJlcXVpcmUoJy4vcmVuZGVyZXJzL3dlYmdsL3V0aWxzL09iamVjdFJlbmRlcmVyJyksXG4gICAgUmVuZGVyVGFyZ2V0OiAgICAgICAgICAgcmVxdWlyZSgnLi9yZW5kZXJlcnMvd2ViZ2wvdXRpbHMvUmVuZGVyVGFyZ2V0JyksXG5cbiAgICAvLyBmaWx0ZXJzIC0gd2ViZ2xcbiAgICBBYnN0cmFjdEZpbHRlcjogICAgICAgICByZXF1aXJlKCcuL3JlbmRlcmVycy93ZWJnbC9maWx0ZXJzL0Fic3RyYWN0RmlsdGVyJyksXG4gICAgRlhBQUZpbHRlcjogICAgICAgICAgICAgcmVxdWlyZSgnLi9yZW5kZXJlcnMvd2ViZ2wvZmlsdGVycy9GWEFBRmlsdGVyJyksXG4gICAgU3ByaXRlTWFza0ZpbHRlcjogICAgICAgcmVxdWlyZSgnLi9yZW5kZXJlcnMvd2ViZ2wvZmlsdGVycy9TcHJpdGVNYXNrRmlsdGVyJyksXG5cbiAgICBnbENvcmU6ICAgICAgICAgICAgICAgICAgIHJlcXVpcmUoJ3BpeGktZ2wtY29yZScpLFxuXG4gICAgLyoqXG4gICAgICogVGhpcyBoZWxwZXIgZnVuY3Rpb24gd2lsbCBhdXRvbWF0aWNhbGx5IGRldGVjdCB3aGljaCByZW5kZXJlciB5b3Ugc2hvdWxkIGJlIHVzaW5nLlxuICAgICAqIFdlYkdMIGlzIHRoZSBwcmVmZXJyZWQgcmVuZGVyZXIgYXMgaXQgaXMgYSBsb3QgZmFzdGVyLiBJZiB3ZWJHTCBpcyBub3Qgc3VwcG9ydGVkIGJ5XG4gICAgICogdGhlIGJyb3dzZXIgdGhlbiB0aGlzIGZ1bmN0aW9uIHdpbGwgcmV0dXJuIGEgY2FudmFzIHJlbmRlcmVyXG4gICAgICpcbiAgICAgKiBAbWVtYmVyb2YgUElYSVxuICAgICAqIEBwYXJhbSB3aWR0aD04MDAge251bWJlcn0gdGhlIHdpZHRoIG9mIHRoZSByZW5kZXJlcnMgdmlld1xuICAgICAqIEBwYXJhbSBoZWlnaHQ9NjAwIHtudW1iZXJ9IHRoZSBoZWlnaHQgb2YgdGhlIHJlbmRlcmVycyB2aWV3XG4gICAgICogQHBhcmFtIFtvcHRpb25zXSB7b2JqZWN0fSBUaGUgb3B0aW9uYWwgcmVuZGVyZXIgcGFyYW1ldGVyc1xuICAgICAqIEBwYXJhbSBbb3B0aW9ucy52aWV3XSB7SFRNTENhbnZhc0VsZW1lbnR9IHRoZSBjYW52YXMgdG8gdXNlIGFzIGEgdmlldywgb3B0aW9uYWxcbiAgICAgKiBAcGFyYW0gW29wdGlvbnMudHJhbnNwYXJlbnQ9ZmFsc2VdIHtib29sZWFufSBJZiB0aGUgcmVuZGVyIHZpZXcgaXMgdHJhbnNwYXJlbnQsIGRlZmF1bHQgZmFsc2VcbiAgICAgKiBAcGFyYW0gW29wdGlvbnMuYW50aWFsaWFzPWZhbHNlXSB7Ym9vbGVhbn0gc2V0cyBhbnRpYWxpYXMgKG9ubHkgYXBwbGljYWJsZSBpbiBjaHJvbWUgYXQgdGhlIG1vbWVudClcbiAgICAgKiBAcGFyYW0gW29wdGlvbnMucHJlc2VydmVEcmF3aW5nQnVmZmVyPWZhbHNlXSB7Ym9vbGVhbn0gZW5hYmxlcyBkcmF3aW5nIGJ1ZmZlciBwcmVzZXJ2YXRpb24sIGVuYWJsZSB0aGlzIGlmIHlvdVxuICAgICAqICAgICAgbmVlZCB0byBjYWxsIHRvRGF0YVVybCBvbiB0aGUgd2ViZ2wgY29udGV4dFxuICAgICAqIEBwYXJhbSBbb3B0aW9ucy5yZXNvbHV0aW9uPTFdIHtudW1iZXJ9IHRoZSByZXNvbHV0aW9uIG9mIHRoZSByZW5kZXJlciwgcmV0aW5hIHdvdWxkIGJlIDJcbiAgICAgKiBAcGFyYW0gW25vV2ViR0w9ZmFsc2VdIHtib29sZWFufSBwcmV2ZW50cyBzZWxlY3Rpb24gb2YgV2ViR0wgcmVuZGVyZXIsIGV2ZW4gaWYgc3VjaCBpcyBwcmVzZW50XG4gICAgICpcbiAgICAgKiBAcmV0dXJuIHtXZWJHTFJlbmRlcmVyfENhbnZhc1JlbmRlcmVyfSBSZXR1cm5zIFdlYkdMIHJlbmRlcmVyIGlmIGF2YWlsYWJsZSwgb3RoZXJ3aXNlIENhbnZhc1JlbmRlcmVyXG4gICAgICovXG4gICAgYXV0b0RldGVjdFJlbmRlcmVyOiBmdW5jdGlvbiAod2lkdGgsIGhlaWdodCwgb3B0aW9ucywgbm9XZWJHTClcbiAgICB7XG4gICAgICAgIHdpZHRoID0gd2lkdGggfHwgODAwO1xuICAgICAgICBoZWlnaHQgPSBoZWlnaHQgfHwgNjAwO1xuXG4gICAgICAgIGlmICghbm9XZWJHTCAmJiBjb3JlLnV0aWxzLmlzV2ViR0xTdXBwb3J0ZWQoKSlcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBjb3JlLldlYkdMUmVuZGVyZXIod2lkdGgsIGhlaWdodCwgb3B0aW9ucyk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbmV3IGNvcmUuQ2FudmFzUmVuZGVyZXIod2lkdGgsIGhlaWdodCwgb3B0aW9ucyk7XG4gICAgfVxufSk7XG4iLCIvLyBAdG9kbyAtIGlnbm9yZSB0aGUgdG9vIG1hbnkgcGFyYW1ldGVycyB3YXJuaW5nIGZvciBub3dcbi8vIHNob3VsZCBlaXRoZXIgZml4IGl0IG9yIGNoYW5nZSB0aGUganNoaW50IGNvbmZpZ1xuLy8ganNoaW50IC1XMDcyXG5cbnZhciBQb2ludCA9IHJlcXVpcmUoJy4vUG9pbnQnKTtcblxuLyoqXG4gKiBUaGUgcGl4aSBNYXRyaXggY2xhc3MgYXMgYW4gb2JqZWN0LCB3aGljaCBtYWtlcyBpdCBhIGxvdCBmYXN0ZXIsXG4gKiBoZXJlIGlzIGEgcmVwcmVzZW50YXRpb24gb2YgaXQgOlxuICogfCBhIHwgYiB8IHR4fFxuICogfCBjIHwgZCB8IHR5fFxuICogfCAwIHwgMCB8IDEgfFxuICpcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqL1xuZnVuY3Rpb24gTWF0cml4KClcbntcbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMVxuICAgICAqL1xuICAgIHRoaXMuYSA9IDE7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMFxuICAgICAqL1xuICAgIHRoaXMuYiA9IDA7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMFxuICAgICAqL1xuICAgIHRoaXMuYyA9IDA7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMVxuICAgICAqL1xuICAgIHRoaXMuZCA9IDE7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMFxuICAgICAqL1xuICAgIHRoaXMudHggPSAwO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDBcbiAgICAgKi9cbiAgICB0aGlzLnR5ID0gMDtcbn1cblxuTWF0cml4LnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IE1hdHJpeDtcbm1vZHVsZS5leHBvcnRzID0gTWF0cml4O1xuXG4vKipcbiAqIENyZWF0ZXMgYSBNYXRyaXggb2JqZWN0IGJhc2VkIG9uIHRoZSBnaXZlbiBhcnJheS4gVGhlIEVsZW1lbnQgdG8gTWF0cml4IG1hcHBpbmcgb3JkZXIgaXMgYXMgZm9sbG93czpcbiAqXG4gKiBhID0gYXJyYXlbMF1cbiAqIGIgPSBhcnJheVsxXVxuICogYyA9IGFycmF5WzNdXG4gKiBkID0gYXJyYXlbNF1cbiAqIHR4ID0gYXJyYXlbMl1cbiAqIHR5ID0gYXJyYXlbNV1cbiAqXG4gKiBAcGFyYW0gYXJyYXkge251bWJlcltdfSBUaGUgYXJyYXkgdGhhdCB0aGUgbWF0cml4IHdpbGwgYmUgcG9wdWxhdGVkIGZyb20uXG4gKi9cbk1hdHJpeC5wcm90b3R5cGUuZnJvbUFycmF5ID0gZnVuY3Rpb24gKGFycmF5KVxue1xuICAgIHRoaXMuYSA9IGFycmF5WzBdO1xuICAgIHRoaXMuYiA9IGFycmF5WzFdO1xuICAgIHRoaXMuYyA9IGFycmF5WzNdO1xuICAgIHRoaXMuZCA9IGFycmF5WzRdO1xuICAgIHRoaXMudHggPSBhcnJheVsyXTtcbiAgICB0aGlzLnR5ID0gYXJyYXlbNV07XG59O1xuXG5cbi8qKlxuICogc2V0cyB0aGUgbWF0cml4IHByb3BlcnRpZXNcbiAqXG4gKiBAcGFyYW0ge251bWJlcn0gYVxuICogQHBhcmFtIHtudW1iZXJ9IGJcbiAqIEBwYXJhbSB7bnVtYmVyfSBjXG4gKiBAcGFyYW0ge251bWJlcn0gZFxuICogQHBhcmFtIHtudW1iZXJ9IHR4XG4gKiBAcGFyYW0ge251bWJlcn0gdHlcbiAqXG4gKiBAcmV0dXJuIHtQSVhJLk1hdHJpeH0gVGhpcyBtYXRyaXguIEdvb2QgZm9yIGNoYWluaW5nIG1ldGhvZCBjYWxscy5cbiAqL1xuTWF0cml4LnByb3RvdHlwZS5zZXQgPSBmdW5jdGlvbiAoYSwgYiwgYywgZCwgdHgsIHR5KVxue1xuICAgIHRoaXMuYSA9IGE7XG4gICAgdGhpcy5iID0gYjtcbiAgICB0aGlzLmMgPSBjO1xuICAgIHRoaXMuZCA9IGQ7XG4gICAgdGhpcy50eCA9IHR4O1xuICAgIHRoaXMudHkgPSB0eTtcblxuICAgIHJldHVybiB0aGlzO1xufTtcblxuXG4vKipcbiAqIENyZWF0ZXMgYW4gYXJyYXkgZnJvbSB0aGUgY3VycmVudCBNYXRyaXggb2JqZWN0LlxuICpcbiAqIEBwYXJhbSB0cmFuc3Bvc2Uge2Jvb2xlYW59IFdoZXRoZXIgd2UgbmVlZCB0byB0cmFuc3Bvc2UgdGhlIG1hdHJpeCBvciBub3RcbiAqIEBwYXJhbSBbb3V0XSB7QXJyYXl9IElmIHByb3ZpZGVkIHRoZSBhcnJheSB3aWxsIGJlIGFzc2lnbmVkIHRvIG91dFxuICogQHJldHVybiB7bnVtYmVyW119IHRoZSBuZXdseSBjcmVhdGVkIGFycmF5IHdoaWNoIGNvbnRhaW5zIHRoZSBtYXRyaXhcbiAqL1xuTWF0cml4LnByb3RvdHlwZS50b0FycmF5ID0gZnVuY3Rpb24gKHRyYW5zcG9zZSwgb3V0KVxue1xuICAgIGlmICghdGhpcy5hcnJheSlcbiAgICB7XG4gICAgICAgIHRoaXMuYXJyYXkgPSBuZXcgRmxvYXQzMkFycmF5KDkpO1xuICAgIH1cblxuICAgIHZhciBhcnJheSA9IG91dCB8fCB0aGlzLmFycmF5O1xuXG4gICAgaWYgKHRyYW5zcG9zZSlcbiAgICB7XG4gICAgICAgIGFycmF5WzBdID0gdGhpcy5hO1xuICAgICAgICBhcnJheVsxXSA9IHRoaXMuYjtcbiAgICAgICAgYXJyYXlbMl0gPSAwO1xuICAgICAgICBhcnJheVszXSA9IHRoaXMuYztcbiAgICAgICAgYXJyYXlbNF0gPSB0aGlzLmQ7XG4gICAgICAgIGFycmF5WzVdID0gMDtcbiAgICAgICAgYXJyYXlbNl0gPSB0aGlzLnR4O1xuICAgICAgICBhcnJheVs3XSA9IHRoaXMudHk7XG4gICAgICAgIGFycmF5WzhdID0gMTtcbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgYXJyYXlbMF0gPSB0aGlzLmE7XG4gICAgICAgIGFycmF5WzFdID0gdGhpcy5jO1xuICAgICAgICBhcnJheVsyXSA9IHRoaXMudHg7XG4gICAgICAgIGFycmF5WzNdID0gdGhpcy5iO1xuICAgICAgICBhcnJheVs0XSA9IHRoaXMuZDtcbiAgICAgICAgYXJyYXlbNV0gPSB0aGlzLnR5O1xuICAgICAgICBhcnJheVs2XSA9IDA7XG4gICAgICAgIGFycmF5WzddID0gMDtcbiAgICAgICAgYXJyYXlbOF0gPSAxO1xuICAgIH1cblxuICAgIHJldHVybiBhcnJheTtcbn07XG5cbi8qKlxuICogR2V0IGEgbmV3IHBvc2l0aW9uIHdpdGggdGhlIGN1cnJlbnQgdHJhbnNmb3JtYXRpb24gYXBwbGllZC5cbiAqIENhbiBiZSB1c2VkIHRvIGdvIGZyb20gYSBjaGlsZCdzIGNvb3JkaW5hdGUgc3BhY2UgdG8gdGhlIHdvcmxkIGNvb3JkaW5hdGUgc3BhY2UuIChlLmcuIHJlbmRlcmluZylcbiAqXG4gKiBAcGFyYW0gcG9zIHtQSVhJLlBvaW50fSBUaGUgb3JpZ2luXG4gKiBAcGFyYW0gW25ld1Bvc10ge1BJWEkuUG9pbnR9IFRoZSBwb2ludCB0aGF0IHRoZSBuZXcgcG9zaXRpb24gaXMgYXNzaWduZWQgdG8gKGFsbG93ZWQgdG8gYmUgc2FtZSBhcyBpbnB1dClcbiAqIEByZXR1cm4ge1BJWEkuUG9pbnR9IFRoZSBuZXcgcG9pbnQsIHRyYW5zZm9ybWVkIHRocm91Z2ggdGhpcyBtYXRyaXhcbiAqL1xuTWF0cml4LnByb3RvdHlwZS5hcHBseSA9IGZ1bmN0aW9uIChwb3MsIG5ld1BvcylcbntcbiAgICBuZXdQb3MgPSBuZXdQb3MgfHwgbmV3IFBvaW50KCk7XG5cbiAgICB2YXIgeCA9IHBvcy54O1xuICAgIHZhciB5ID0gcG9zLnk7XG5cbiAgICBuZXdQb3MueCA9IHRoaXMuYSAqIHggKyB0aGlzLmMgKiB5ICsgdGhpcy50eDtcbiAgICBuZXdQb3MueSA9IHRoaXMuYiAqIHggKyB0aGlzLmQgKiB5ICsgdGhpcy50eTtcblxuICAgIHJldHVybiBuZXdQb3M7XG59O1xuXG4vKipcbiAqIEdldCBhIG5ldyBwb3NpdGlvbiB3aXRoIHRoZSBpbnZlcnNlIG9mIHRoZSBjdXJyZW50IHRyYW5zZm9ybWF0aW9uIGFwcGxpZWQuXG4gKiBDYW4gYmUgdXNlZCB0byBnbyBmcm9tIHRoZSB3b3JsZCBjb29yZGluYXRlIHNwYWNlIHRvIGEgY2hpbGQncyBjb29yZGluYXRlIHNwYWNlLiAoZS5nLiBpbnB1dClcbiAqXG4gKiBAcGFyYW0gcG9zIHtQSVhJLlBvaW50fSBUaGUgb3JpZ2luXG4gKiBAcGFyYW0gW25ld1Bvc10ge1BJWEkuUG9pbnR9IFRoZSBwb2ludCB0aGF0IHRoZSBuZXcgcG9zaXRpb24gaXMgYXNzaWduZWQgdG8gKGFsbG93ZWQgdG8gYmUgc2FtZSBhcyBpbnB1dClcbiAqIEByZXR1cm4ge1BJWEkuUG9pbnR9IFRoZSBuZXcgcG9pbnQsIGludmVyc2UtdHJhbnNmb3JtZWQgdGhyb3VnaCB0aGlzIG1hdHJpeFxuICovXG5NYXRyaXgucHJvdG90eXBlLmFwcGx5SW52ZXJzZSA9IGZ1bmN0aW9uIChwb3MsIG5ld1BvcylcbntcbiAgICBuZXdQb3MgPSBuZXdQb3MgfHwgbmV3IFBvaW50KCk7XG5cbiAgICB2YXIgaWQgPSAxIC8gKHRoaXMuYSAqIHRoaXMuZCArIHRoaXMuYyAqIC10aGlzLmIpO1xuXG4gICAgdmFyIHggPSBwb3MueDtcbiAgICB2YXIgeSA9IHBvcy55O1xuXG4gICAgbmV3UG9zLnggPSB0aGlzLmQgKiBpZCAqIHggKyAtdGhpcy5jICogaWQgKiB5ICsgKHRoaXMudHkgKiB0aGlzLmMgLSB0aGlzLnR4ICogdGhpcy5kKSAqIGlkO1xuICAgIG5ld1Bvcy55ID0gdGhpcy5hICogaWQgKiB5ICsgLXRoaXMuYiAqIGlkICogeCArICgtdGhpcy50eSAqIHRoaXMuYSArIHRoaXMudHggKiB0aGlzLmIpICogaWQ7XG5cbiAgICByZXR1cm4gbmV3UG9zO1xufTtcblxuLyoqXG4gKiBUcmFuc2xhdGVzIHRoZSBtYXRyaXggb24gdGhlIHggYW5kIHkuXG4gKlxuICogQHBhcmFtIHtudW1iZXJ9IHhcbiAqIEBwYXJhbSB7bnVtYmVyfSB5XG4gKiBAcmV0dXJuIHtQSVhJLk1hdHJpeH0gVGhpcyBtYXRyaXguIEdvb2QgZm9yIGNoYWluaW5nIG1ldGhvZCBjYWxscy5cbiAqL1xuTWF0cml4LnByb3RvdHlwZS50cmFuc2xhdGUgPSBmdW5jdGlvbiAoeCwgeSlcbntcbiAgICB0aGlzLnR4ICs9IHg7XG4gICAgdGhpcy50eSArPSB5O1xuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIEFwcGxpZXMgYSBzY2FsZSB0cmFuc2Zvcm1hdGlvbiB0byB0aGUgbWF0cml4LlxuICpcbiAqIEBwYXJhbSB7bnVtYmVyfSB4IFRoZSBhbW91bnQgdG8gc2NhbGUgaG9yaXpvbnRhbGx5XG4gKiBAcGFyYW0ge251bWJlcn0geSBUaGUgYW1vdW50IHRvIHNjYWxlIHZlcnRpY2FsbHlcbiAqIEByZXR1cm4ge1BJWEkuTWF0cml4fSBUaGlzIG1hdHJpeC4gR29vZCBmb3IgY2hhaW5pbmcgbWV0aG9kIGNhbGxzLlxuICovXG5NYXRyaXgucHJvdG90eXBlLnNjYWxlID0gZnVuY3Rpb24gKHgsIHkpXG57XG4gICAgdGhpcy5hICo9IHg7XG4gICAgdGhpcy5kICo9IHk7XG4gICAgdGhpcy5jICo9IHg7XG4gICAgdGhpcy5iICo9IHk7XG4gICAgdGhpcy50eCAqPSB4O1xuICAgIHRoaXMudHkgKj0geTtcblxuICAgIHJldHVybiB0aGlzO1xufTtcblxuXG4vKipcbiAqIEFwcGxpZXMgYSByb3RhdGlvbiB0cmFuc2Zvcm1hdGlvbiB0byB0aGUgbWF0cml4LlxuICpcbiAqIEBwYXJhbSB7bnVtYmVyfSBhbmdsZSAtIFRoZSBhbmdsZSBpbiByYWRpYW5zLlxuICogQHJldHVybiB7UElYSS5NYXRyaXh9IFRoaXMgbWF0cml4LiBHb29kIGZvciBjaGFpbmluZyBtZXRob2QgY2FsbHMuXG4gKi9cbk1hdHJpeC5wcm90b3R5cGUucm90YXRlID0gZnVuY3Rpb24gKGFuZ2xlKVxue1xuICAgIHZhciBjb3MgPSBNYXRoLmNvcyggYW5nbGUgKTtcbiAgICB2YXIgc2luID0gTWF0aC5zaW4oIGFuZ2xlICk7XG5cbiAgICB2YXIgYTEgPSB0aGlzLmE7XG4gICAgdmFyIGMxID0gdGhpcy5jO1xuICAgIHZhciB0eDEgPSB0aGlzLnR4O1xuXG4gICAgdGhpcy5hID0gYTEgKiBjb3MtdGhpcy5iICogc2luO1xuICAgIHRoaXMuYiA9IGExICogc2luK3RoaXMuYiAqIGNvcztcbiAgICB0aGlzLmMgPSBjMSAqIGNvcy10aGlzLmQgKiBzaW47XG4gICAgdGhpcy5kID0gYzEgKiBzaW4rdGhpcy5kICogY29zO1xuICAgIHRoaXMudHggPSB0eDEgKiBjb3MgLSB0aGlzLnR5ICogc2luO1xuICAgIHRoaXMudHkgPSB0eDEgKiBzaW4gKyB0aGlzLnR5ICogY29zO1xuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIEFwcGVuZHMgdGhlIGdpdmVuIE1hdHJpeCB0byB0aGlzIE1hdHJpeC5cbiAqXG4gKiBAcGFyYW0ge1BJWEkuTWF0cml4fSBtYXRyaXhcbiAqIEByZXR1cm4ge1BJWEkuTWF0cml4fSBUaGlzIG1hdHJpeC4gR29vZCBmb3IgY2hhaW5pbmcgbWV0aG9kIGNhbGxzLlxuICovXG5NYXRyaXgucHJvdG90eXBlLmFwcGVuZCA9IGZ1bmN0aW9uIChtYXRyaXgpXG57XG4gICAgdmFyIGExID0gdGhpcy5hO1xuICAgIHZhciBiMSA9IHRoaXMuYjtcbiAgICB2YXIgYzEgPSB0aGlzLmM7XG4gICAgdmFyIGQxID0gdGhpcy5kO1xuXG4gICAgdGhpcy5hICA9IG1hdHJpeC5hICogYTEgKyBtYXRyaXguYiAqIGMxO1xuICAgIHRoaXMuYiAgPSBtYXRyaXguYSAqIGIxICsgbWF0cml4LmIgKiBkMTtcbiAgICB0aGlzLmMgID0gbWF0cml4LmMgKiBhMSArIG1hdHJpeC5kICogYzE7XG4gICAgdGhpcy5kICA9IG1hdHJpeC5jICogYjEgKyBtYXRyaXguZCAqIGQxO1xuXG4gICAgdGhpcy50eCA9IG1hdHJpeC50eCAqIGExICsgbWF0cml4LnR5ICogYzEgKyB0aGlzLnR4O1xuICAgIHRoaXMudHkgPSBtYXRyaXgudHggKiBiMSArIG1hdHJpeC50eSAqIGQxICsgdGhpcy50eTtcblxuICAgIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBTZXRzIHRoZSBtYXRyaXggYmFzZWQgb24gYWxsIHRoZSBhdmFpbGFibGUgcHJvcGVydGllc1xuICpcbiAqIEBwYXJhbSB7bnVtYmVyfSB4XG4gKiBAcGFyYW0ge251bWJlcn0geVxuICogQHBhcmFtIHtudW1iZXJ9IHBpdm90WFxuICogQHBhcmFtIHtudW1iZXJ9IHBpdm90WVxuICogQHBhcmFtIHtudW1iZXJ9IHNjYWxlWFxuICogQHBhcmFtIHtudW1iZXJ9IHNjYWxlWVxuICogQHBhcmFtIHtudW1iZXJ9IHJvdGF0aW9uXG4gKiBAcGFyYW0ge251bWJlcn0gc2tld1hcbiAqIEBwYXJhbSB7bnVtYmVyfSBza2V3WVxuICpcbiAqIEByZXR1cm4ge1BJWEkuTWF0cml4fSBUaGlzIG1hdHJpeC4gR29vZCBmb3IgY2hhaW5pbmcgbWV0aG9kIGNhbGxzLlxuICovXG5NYXRyaXgucHJvdG90eXBlLnNldFRyYW5zZm9ybSA9IGZ1bmN0aW9uICh4LCB5LCBwaXZvdFgsIHBpdm90WSwgc2NhbGVYLCBzY2FsZVksIHJvdGF0aW9uLCBza2V3WCwgc2tld1kpXG57XG4gICAgdmFyIGEsIGIsIGMsIGQsIHNyLCBjciwgY3ksIHN5LCBuc3gsIGN4O1xuXG4gICAgc3IgID0gTWF0aC5zaW4ocm90YXRpb24pO1xuICAgIGNyICA9IE1hdGguY29zKHJvdGF0aW9uKTtcbiAgICBjeSAgPSBNYXRoLmNvcyhza2V3WSk7XG4gICAgc3kgID0gTWF0aC5zaW4oc2tld1kpO1xuICAgIG5zeCA9IC1NYXRoLnNpbihza2V3WCk7XG4gICAgY3ggID0gIE1hdGguY29zKHNrZXdYKTtcblxuICAgIGEgID0gIGNyICogc2NhbGVYO1xuICAgIGIgID0gIHNyICogc2NhbGVYO1xuICAgIGMgID0gLXNyICogc2NhbGVZO1xuICAgIGQgID0gIGNyICogc2NhbGVZO1xuXG4gICAgdGhpcy5hICA9IGN5ICogYSArIHN5ICogYztcbiAgICB0aGlzLmIgID0gY3kgKiBiICsgc3kgKiBkO1xuICAgIHRoaXMuYyAgPSBuc3ggKiBhICsgY3ggKiBjO1xuICAgIHRoaXMuZCAgPSBuc3ggKiBiICsgY3ggKiBkO1xuXG4gICAgdGhpcy50eCA9IHggKyAoIHBpdm90WCAqIGEgKyBwaXZvdFkgKiBjICk7XG4gICAgdGhpcy50eSA9IHkgKyAoIHBpdm90WCAqIGIgKyBwaXZvdFkgKiBkICk7XG5cbiAgICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogUHJlcGVuZHMgdGhlIGdpdmVuIE1hdHJpeCB0byB0aGlzIE1hdHJpeC5cbiAqXG4gKiBAcGFyYW0ge1BJWEkuTWF0cml4fSBtYXRyaXhcbiAqIEByZXR1cm4ge1BJWEkuTWF0cml4fSBUaGlzIG1hdHJpeC4gR29vZCBmb3IgY2hhaW5pbmcgbWV0aG9kIGNhbGxzLlxuICovXG5NYXRyaXgucHJvdG90eXBlLnByZXBlbmQgPSBmdW5jdGlvbihtYXRyaXgpXG57XG4gICAgdmFyIHR4MSA9IHRoaXMudHg7XG5cbiAgICBpZiAobWF0cml4LmEgIT09IDEgfHwgbWF0cml4LmIgIT09IDAgfHwgbWF0cml4LmMgIT09IDAgfHwgbWF0cml4LmQgIT09IDEpXG4gICAge1xuICAgICAgICB2YXIgYTEgPSB0aGlzLmE7XG4gICAgICAgIHZhciBjMSA9IHRoaXMuYztcbiAgICAgICAgdGhpcy5hICA9IGExKm1hdHJpeC5hK3RoaXMuYiptYXRyaXguYztcbiAgICAgICAgdGhpcy5iICA9IGExKm1hdHJpeC5iK3RoaXMuYiptYXRyaXguZDtcbiAgICAgICAgdGhpcy5jICA9IGMxKm1hdHJpeC5hK3RoaXMuZCptYXRyaXguYztcbiAgICAgICAgdGhpcy5kICA9IGMxKm1hdHJpeC5iK3RoaXMuZCptYXRyaXguZDtcbiAgICB9XG5cbiAgICB0aGlzLnR4ID0gdHgxKm1hdHJpeC5hK3RoaXMudHkqbWF0cml4LmMrbWF0cml4LnR4O1xuICAgIHRoaXMudHkgPSB0eDEqbWF0cml4LmIrdGhpcy50eSptYXRyaXguZCttYXRyaXgudHk7XG5cbiAgICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogSW52ZXJ0cyB0aGlzIG1hdHJpeFxuICpcbiAqIEByZXR1cm4ge1BJWEkuTWF0cml4fSBUaGlzIG1hdHJpeC4gR29vZCBmb3IgY2hhaW5pbmcgbWV0aG9kIGNhbGxzLlxuICovXG5NYXRyaXgucHJvdG90eXBlLmludmVydCA9IGZ1bmN0aW9uKClcbntcbiAgICB2YXIgYTEgPSB0aGlzLmE7XG4gICAgdmFyIGIxID0gdGhpcy5iO1xuICAgIHZhciBjMSA9IHRoaXMuYztcbiAgICB2YXIgZDEgPSB0aGlzLmQ7XG4gICAgdmFyIHR4MSA9IHRoaXMudHg7XG4gICAgdmFyIG4gPSBhMSpkMS1iMSpjMTtcblxuICAgIHRoaXMuYSA9IGQxL247XG4gICAgdGhpcy5iID0gLWIxL247XG4gICAgdGhpcy5jID0gLWMxL247XG4gICAgdGhpcy5kID0gYTEvbjtcbiAgICB0aGlzLnR4ID0gKGMxKnRoaXMudHktZDEqdHgxKS9uO1xuICAgIHRoaXMudHkgPSAtKGExKnRoaXMudHktYjEqdHgxKS9uO1xuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG5cbi8qKlxuICogUmVzZXRzIHRoaXMgTWF0aXggdG8gYW4gaWRlbnRpdHkgKGRlZmF1bHQpIG1hdHJpeC5cbiAqXG4gKiBAcmV0dXJuIHtQSVhJLk1hdHJpeH0gVGhpcyBtYXRyaXguIEdvb2QgZm9yIGNoYWluaW5nIG1ldGhvZCBjYWxscy5cbiAqL1xuTWF0cml4LnByb3RvdHlwZS5pZGVudGl0eSA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy5hID0gMTtcbiAgICB0aGlzLmIgPSAwO1xuICAgIHRoaXMuYyA9IDA7XG4gICAgdGhpcy5kID0gMTtcbiAgICB0aGlzLnR4ID0gMDtcbiAgICB0aGlzLnR5ID0gMDtcblxuICAgIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBDcmVhdGVzIGEgbmV3IE1hdHJpeCBvYmplY3Qgd2l0aCB0aGUgc2FtZSB2YWx1ZXMgYXMgdGhpcyBvbmUuXG4gKlxuICogQHJldHVybiB7UElYSS5NYXRyaXh9IEEgY29weSBvZiB0aGlzIG1hdHJpeC4gR29vZCBmb3IgY2hhaW5pbmcgbWV0aG9kIGNhbGxzLlxuICovXG5NYXRyaXgucHJvdG90eXBlLmNsb25lID0gZnVuY3Rpb24gKClcbntcbiAgICB2YXIgbWF0cml4ID0gbmV3IE1hdHJpeCgpO1xuICAgIG1hdHJpeC5hID0gdGhpcy5hO1xuICAgIG1hdHJpeC5iID0gdGhpcy5iO1xuICAgIG1hdHJpeC5jID0gdGhpcy5jO1xuICAgIG1hdHJpeC5kID0gdGhpcy5kO1xuICAgIG1hdHJpeC50eCA9IHRoaXMudHg7XG4gICAgbWF0cml4LnR5ID0gdGhpcy50eTtcblxuICAgIHJldHVybiBtYXRyaXg7XG59O1xuXG4vKipcbiAqIENoYW5nZXMgdGhlIHZhbHVlcyBvZiB0aGUgZ2l2ZW4gbWF0cml4IHRvIGJlIHRoZSBzYW1lIGFzIHRoZSBvbmVzIGluIHRoaXMgbWF0cml4XG4gKlxuICogQHJldHVybiB7UElYSS5NYXRyaXh9IFRoZSBtYXRyaXggZ2l2ZW4gaW4gcGFyYW1ldGVyIHdpdGggaXRzIHZhbHVlcyB1cGRhdGVkLlxuICovXG5NYXRyaXgucHJvdG90eXBlLmNvcHkgPSBmdW5jdGlvbiAobWF0cml4KVxue1xuICAgIG1hdHJpeC5hID0gdGhpcy5hO1xuICAgIG1hdHJpeC5iID0gdGhpcy5iO1xuICAgIG1hdHJpeC5jID0gdGhpcy5jO1xuICAgIG1hdHJpeC5kID0gdGhpcy5kO1xuICAgIG1hdHJpeC50eCA9IHRoaXMudHg7XG4gICAgbWF0cml4LnR5ID0gdGhpcy50eTtcblxuICAgIHJldHVybiBtYXRyaXg7XG59O1xuXG4vKipcbiAqIEEgZGVmYXVsdCAoaWRlbnRpdHkpIG1hdHJpeFxuICpcbiAqIEBzdGF0aWNcbiAqIEBjb25zdFxuICovXG5NYXRyaXguSURFTlRJVFkgPSBuZXcgTWF0cml4KCk7XG5cbi8qKlxuICogQSB0ZW1wIG1hdHJpeFxuICpcbiAqIEBzdGF0aWNcbiAqIEBjb25zdFxuICovXG5NYXRyaXguVEVNUF9NQVRSSVggPSBuZXcgTWF0cml4KCk7XG4iLCIvKipcbiAqIFRoZSBQb2ludCBvYmplY3QgcmVwcmVzZW50cyBhIGxvY2F0aW9uIGluIGEgdHdvLWRpbWVuc2lvbmFsIGNvb3JkaW5hdGUgc3lzdGVtLCB3aGVyZSB4IHJlcHJlc2VudHNcbiAqIHRoZSBob3Jpem9udGFsIGF4aXMgYW5kIHkgcmVwcmVzZW50cyB0aGUgdmVydGljYWwgYXhpcy5cbiAqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gW3g9MF0ge251bWJlcn0gcG9zaXRpb24gb2YgdGhlIHBvaW50IG9uIHRoZSB4IGF4aXNcbiAqIEBwYXJhbSBbeT0wXSB7bnVtYmVyfSBwb3NpdGlvbiBvZiB0aGUgcG9pbnQgb24gdGhlIHkgYXhpc1xuICovXG5mdW5jdGlvbiBQb2ludCh4LCB5KVxue1xuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAwXG4gICAgICovXG4gICAgdGhpcy54ID0geCB8fCAwO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDBcbiAgICAgKi9cbiAgICB0aGlzLnkgPSB5IHx8IDA7XG59XG5cblBvaW50LnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFBvaW50O1xubW9kdWxlLmV4cG9ydHMgPSBQb2ludDtcblxuLyoqXG4gKiBDcmVhdGVzIGEgY2xvbmUgb2YgdGhpcyBwb2ludFxuICpcbiAqIEByZXR1cm4ge1BJWEkuUG9pbnR9IGEgY29weSBvZiB0aGUgcG9pbnRcbiAqL1xuUG9pbnQucHJvdG90eXBlLmNsb25lID0gZnVuY3Rpb24gKClcbntcbiAgICByZXR1cm4gbmV3IFBvaW50KHRoaXMueCwgdGhpcy55KTtcbn07XG5cbi8qKlxuICogQ29waWVzIHggYW5kIHkgZnJvbSB0aGUgZ2l2ZW4gcG9pbnRcbiAqXG4gKiBAcGFyYW0gcCB7UElYSS5Qb2ludH1cbiAqL1xuUG9pbnQucHJvdG90eXBlLmNvcHkgPSBmdW5jdGlvbiAocCkge1xuICAgIHRoaXMuc2V0KHAueCwgcC55KTtcbn07XG5cbi8qKlxuICogUmV0dXJucyB0cnVlIGlmIHRoZSBnaXZlbiBwb2ludCBpcyBlcXVhbCB0byB0aGlzIHBvaW50XG4gKlxuICogQHBhcmFtIHAge1BJWEkuUG9pbnR9XG4gKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAqL1xuUG9pbnQucHJvdG90eXBlLmVxdWFscyA9IGZ1bmN0aW9uIChwKSB7XG4gICAgcmV0dXJuIChwLnggPT09IHRoaXMueCkgJiYgKHAueSA9PT0gdGhpcy55KTtcbn07XG5cbi8qKlxuICogU2V0cyB0aGUgcG9pbnQgdG8gYSBuZXcgeCBhbmQgeSBwb3NpdGlvbi5cbiAqIElmIHkgaXMgb21pdHRlZCwgYm90aCB4IGFuZCB5IHdpbGwgYmUgc2V0IHRvIHguXG4gKlxuICogQHBhcmFtIFt4PTBdIHtudW1iZXJ9IHBvc2l0aW9uIG9mIHRoZSBwb2ludCBvbiB0aGUgeCBheGlzXG4gKiBAcGFyYW0gW3k9MF0ge251bWJlcn0gcG9zaXRpb24gb2YgdGhlIHBvaW50IG9uIHRoZSB5IGF4aXNcbiAqL1xuUG9pbnQucHJvdG90eXBlLnNldCA9IGZ1bmN0aW9uICh4LCB5KVxue1xuICAgIHRoaXMueCA9IHggfHwgMDtcbiAgICB0aGlzLnkgPSB5IHx8ICggKHkgIT09IDApID8gdGhpcy54IDogMCApIDtcbn07XG4iLCIvKipcbiAqIE1hdGggY2xhc3NlcyBhbmQgdXRpbGl0aWVzIG1peGVkIGludG8gUElYSSBuYW1lc3BhY2UuXG4gKlxuICogQGxlbmRzIFBJWElcbiAqL1xubW9kdWxlLmV4cG9ydHMgPSB7XG4gICAgLy8gVGhlc2Ugd2lsbCBiZSBtaXhlZCB0byBiZSBtYWRlIHB1YmxpY2x5IGF2YWlsYWJsZSxcbiAgICAvLyB3aGlsZSB0aGlzIG1vZHVsZSBpcyB1c2VkIGludGVybmFsbHkgaW4gY29yZVxuICAgIC8vIHRvIGF2b2lkIGNpcmN1bGFyIGRlcGVuZGVuY2llcyBhbmQgY3V0IGRvd24gb25cbiAgICAvLyBpbnRlcm5hbCBtb2R1bGUgcmVxdWlyZXMuXG5cbiAgICBQb2ludDogICAgICByZXF1aXJlKCcuL1BvaW50JyksXG4gICAgTWF0cml4OiAgICAgcmVxdWlyZSgnLi9NYXRyaXgnKSxcblxuICAgIENpcmNsZTogICAgIHJlcXVpcmUoJy4vc2hhcGVzL0NpcmNsZScpLFxuICAgIEVsbGlwc2U6ICAgIHJlcXVpcmUoJy4vc2hhcGVzL0VsbGlwc2UnKSxcbiAgICBQb2x5Z29uOiAgICByZXF1aXJlKCcuL3NoYXBlcy9Qb2x5Z29uJyksXG4gICAgUmVjdGFuZ2xlOiAgcmVxdWlyZSgnLi9zaGFwZXMvUmVjdGFuZ2xlJyksXG4gICAgUm91bmRlZFJlY3RhbmdsZTogcmVxdWlyZSgnLi9zaGFwZXMvUm91bmRlZFJlY3RhbmdsZScpXG59O1xuIiwidmFyIFJlY3RhbmdsZSA9IHJlcXVpcmUoJy4vUmVjdGFuZ2xlJyksXG4gICAgQ09OU1QgPSByZXF1aXJlKCcuLi8uLi9jb25zdCcpO1xuXG4vKipcbiAqIFRoZSBDaXJjbGUgb2JqZWN0IGNhbiBiZSB1c2VkIHRvIHNwZWNpZnkgYSBoaXQgYXJlYSBmb3IgZGlzcGxheU9iamVjdHNcbiAqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0geCB7bnVtYmVyfSBUaGUgWCBjb29yZGluYXRlIG9mIHRoZSBjZW50ZXIgb2YgdGhpcyBjaXJjbGVcbiAqIEBwYXJhbSB5IHtudW1iZXJ9IFRoZSBZIGNvb3JkaW5hdGUgb2YgdGhlIGNlbnRlciBvZiB0aGlzIGNpcmNsZVxuICogQHBhcmFtIHJhZGl1cyB7bnVtYmVyfSBUaGUgcmFkaXVzIG9mIHRoZSBjaXJjbGVcbiAqL1xuZnVuY3Rpb24gQ2lyY2xlKHgsIHksIHJhZGl1cylcbntcbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMFxuICAgICAqL1xuICAgIHRoaXMueCA9IHggfHwgMDtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAwXG4gICAgICovXG4gICAgdGhpcy55ID0geSB8fCAwO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDBcbiAgICAgKi9cbiAgICB0aGlzLnJhZGl1cyA9IHJhZGl1cyB8fCAwO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHR5cGUgb2YgdGhlIG9iamVjdCwgbWFpbmx5IHVzZWQgdG8gYXZvaWQgYGluc3RhbmNlb2ZgIGNoZWNrc1xuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMudHlwZSA9IENPTlNULlNIQVBFUy5DSVJDO1xufVxuXG5DaXJjbGUucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gQ2lyY2xlO1xubW9kdWxlLmV4cG9ydHMgPSBDaXJjbGU7XG5cbi8qKlxuICogQ3JlYXRlcyBhIGNsb25lIG9mIHRoaXMgQ2lyY2xlIGluc3RhbmNlXG4gKlxuICogQHJldHVybiB7UElYSS5DaXJjbGV9IGEgY29weSBvZiB0aGUgQ2lyY2xlXG4gKi9cbkNpcmNsZS5wcm90b3R5cGUuY2xvbmUgPSBmdW5jdGlvbiAoKVxue1xuICAgIHJldHVybiBuZXcgQ2lyY2xlKHRoaXMueCwgdGhpcy55LCB0aGlzLnJhZGl1cyk7XG59O1xuXG4vKipcbiAqIENoZWNrcyB3aGV0aGVyIHRoZSB4IGFuZCB5IGNvb3JkaW5hdGVzIGdpdmVuIGFyZSBjb250YWluZWQgd2l0aGluIHRoaXMgY2lyY2xlXG4gKlxuICogQHBhcmFtIHgge251bWJlcn0gVGhlIFggY29vcmRpbmF0ZSBvZiB0aGUgcG9pbnQgdG8gdGVzdFxuICogQHBhcmFtIHkge251bWJlcn0gVGhlIFkgY29vcmRpbmF0ZSBvZiB0aGUgcG9pbnQgdG8gdGVzdFxuICogQHJldHVybiB7Ym9vbGVhbn0gV2hldGhlciB0aGUgeC95IGNvb3JkaW5hdGVzIGFyZSB3aXRoaW4gdGhpcyBDaXJjbGVcbiAqL1xuQ2lyY2xlLnByb3RvdHlwZS5jb250YWlucyA9IGZ1bmN0aW9uICh4LCB5KVxue1xuICAgIGlmICh0aGlzLnJhZGl1cyA8PSAwKVxuICAgIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHZhciBkeCA9ICh0aGlzLnggLSB4KSxcbiAgICAgICAgZHkgPSAodGhpcy55IC0geSksXG4gICAgICAgIHIyID0gdGhpcy5yYWRpdXMgKiB0aGlzLnJhZGl1cztcblxuICAgIGR4ICo9IGR4O1xuICAgIGR5ICo9IGR5O1xuXG4gICAgcmV0dXJuIChkeCArIGR5IDw9IHIyKTtcbn07XG5cbi8qKlxuKiBSZXR1cm5zIHRoZSBmcmFtaW5nIHJlY3RhbmdsZSBvZiB0aGUgY2lyY2xlIGFzIGEgUmVjdGFuZ2xlIG9iamVjdFxuKlxuKiBAcmV0dXJuIHtQSVhJLlJlY3RhbmdsZX0gdGhlIGZyYW1pbmcgcmVjdGFuZ2xlXG4qL1xuQ2lyY2xlLnByb3RvdHlwZS5nZXRCb3VuZHMgPSBmdW5jdGlvbiAoKVxue1xuICAgIHJldHVybiBuZXcgUmVjdGFuZ2xlKHRoaXMueCAtIHRoaXMucmFkaXVzLCB0aGlzLnkgLSB0aGlzLnJhZGl1cywgdGhpcy5yYWRpdXMgKiAyLCB0aGlzLnJhZGl1cyAqIDIpO1xufTtcbiIsInZhciBSZWN0YW5nbGUgPSByZXF1aXJlKCcuL1JlY3RhbmdsZScpLFxuICAgIENPTlNUID0gcmVxdWlyZSgnLi4vLi4vY29uc3QnKTtcblxuLyoqXG4gKiBUaGUgRWxsaXBzZSBvYmplY3QgY2FuIGJlIHVzZWQgdG8gc3BlY2lmeSBhIGhpdCBhcmVhIGZvciBkaXNwbGF5T2JqZWN0c1xuICpcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqIEBwYXJhbSB4IHtudW1iZXJ9IFRoZSBYIGNvb3JkaW5hdGUgb2YgdGhlIGNlbnRlciBvZiB0aGUgZWxsaXBzZVxuICogQHBhcmFtIHkge251bWJlcn0gVGhlIFkgY29vcmRpbmF0ZSBvZiB0aGUgY2VudGVyIG9mIHRoZSBlbGxpcHNlXG4gKiBAcGFyYW0gd2lkdGgge251bWJlcn0gVGhlIGhhbGYgd2lkdGggb2YgdGhpcyBlbGxpcHNlXG4gKiBAcGFyYW0gaGVpZ2h0IHtudW1iZXJ9IFRoZSBoYWxmIGhlaWdodCBvZiB0aGlzIGVsbGlwc2VcbiAqL1xuZnVuY3Rpb24gRWxsaXBzZSh4LCB5LCB3aWR0aCwgaGVpZ2h0KVxue1xuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAwXG4gICAgICovXG4gICAgdGhpcy54ID0geCB8fCAwO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDBcbiAgICAgKi9cbiAgICB0aGlzLnkgPSB5IHx8IDA7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMFxuICAgICAqL1xuICAgIHRoaXMud2lkdGggPSB3aWR0aCB8fCAwO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDBcbiAgICAgKi9cbiAgICB0aGlzLmhlaWdodCA9IGhlaWdodCB8fCAwO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHR5cGUgb2YgdGhlIG9iamVjdCwgbWFpbmx5IHVzZWQgdG8gYXZvaWQgYGluc3RhbmNlb2ZgIGNoZWNrc1xuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMudHlwZSA9IENPTlNULlNIQVBFUy5FTElQO1xufVxuXG5FbGxpcHNlLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IEVsbGlwc2U7XG5tb2R1bGUuZXhwb3J0cyA9IEVsbGlwc2U7XG5cbi8qKlxuICogQ3JlYXRlcyBhIGNsb25lIG9mIHRoaXMgRWxsaXBzZSBpbnN0YW5jZVxuICpcbiAqIEByZXR1cm4ge1BJWEkuRWxsaXBzZX0gYSBjb3B5IG9mIHRoZSBlbGxpcHNlXG4gKi9cbkVsbGlwc2UucHJvdG90eXBlLmNsb25lID0gZnVuY3Rpb24gKClcbntcbiAgICByZXR1cm4gbmV3IEVsbGlwc2UodGhpcy54LCB0aGlzLnksIHRoaXMud2lkdGgsIHRoaXMuaGVpZ2h0KTtcbn07XG5cbi8qKlxuICogQ2hlY2tzIHdoZXRoZXIgdGhlIHggYW5kIHkgY29vcmRpbmF0ZXMgZ2l2ZW4gYXJlIGNvbnRhaW5lZCB3aXRoaW4gdGhpcyBlbGxpcHNlXG4gKlxuICogQHBhcmFtIHgge251bWJlcn0gVGhlIFggY29vcmRpbmF0ZSBvZiB0aGUgcG9pbnQgdG8gdGVzdFxuICogQHBhcmFtIHkge251bWJlcn0gVGhlIFkgY29vcmRpbmF0ZSBvZiB0aGUgcG9pbnQgdG8gdGVzdFxuICogQHJldHVybiB7Ym9vbGVhbn0gV2hldGhlciB0aGUgeC95IGNvb3JkcyBhcmUgd2l0aGluIHRoaXMgZWxsaXBzZVxuICovXG5FbGxpcHNlLnByb3RvdHlwZS5jb250YWlucyA9IGZ1bmN0aW9uICh4LCB5KVxue1xuICAgIGlmICh0aGlzLndpZHRoIDw9IDAgfHwgdGhpcy5oZWlnaHQgPD0gMClcbiAgICB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICAvL25vcm1hbGl6ZSB0aGUgY29vcmRzIHRvIGFuIGVsbGlwc2Ugd2l0aCBjZW50ZXIgMCwwXG4gICAgdmFyIG5vcm14ID0gKCh4IC0gdGhpcy54KSAvIHRoaXMud2lkdGgpLFxuICAgICAgICBub3JteSA9ICgoeSAtIHRoaXMueSkgLyB0aGlzLmhlaWdodCk7XG5cbiAgICBub3JteCAqPSBub3JteDtcbiAgICBub3JteSAqPSBub3JteTtcblxuICAgIHJldHVybiAobm9ybXggKyBub3JteSA8PSAxKTtcbn07XG5cbi8qKlxuICogUmV0dXJucyB0aGUgZnJhbWluZyByZWN0YW5nbGUgb2YgdGhlIGVsbGlwc2UgYXMgYSBSZWN0YW5nbGUgb2JqZWN0XG4gKlxuICogQHJldHVybiB7UElYSS5SZWN0YW5nbGV9IHRoZSBmcmFtaW5nIHJlY3RhbmdsZVxuICovXG5FbGxpcHNlLnByb3RvdHlwZS5nZXRCb3VuZHMgPSBmdW5jdGlvbiAoKVxue1xuICAgIHJldHVybiBuZXcgUmVjdGFuZ2xlKHRoaXMueCAtIHRoaXMud2lkdGgsIHRoaXMueSAtIHRoaXMuaGVpZ2h0LCB0aGlzLndpZHRoLCB0aGlzLmhlaWdodCk7XG59O1xuIiwidmFyIFBvaW50ID0gcmVxdWlyZSgnLi4vUG9pbnQnKSxcbiAgICBDT05TVCA9IHJlcXVpcmUoJy4uLy4uL2NvbnN0Jyk7XG5cbi8qKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIHBvaW50cyB7UElYSS5Qb2ludFtdfG51bWJlcltdfC4uLlBJWEkuUG9pbnR8Li4ubnVtYmVyfSBUaGlzIGNhbiBiZSBhbiBhcnJheSBvZiBQb2ludHMgdGhhdCBmb3JtIHRoZSBwb2x5Z29uLFxuICogICAgICBhIGZsYXQgYXJyYXkgb2YgbnVtYmVycyB0aGF0IHdpbGwgYmUgaW50ZXJwcmV0ZWQgYXMgW3gseSwgeCx5LCAuLi5dLCBvciB0aGUgYXJndW1lbnRzIHBhc3NlZCBjYW4gYmVcbiAqICAgICAgYWxsIHRoZSBwb2ludHMgb2YgdGhlIHBvbHlnb24gZS5nLiBgbmV3IFBJWEkuUG9seWdvbihuZXcgUElYSS5Qb2ludCgpLCBuZXcgUElYSS5Qb2ludCgpLCAuLi4pYCwgb3IgdGhlXG4gKiAgICAgIGFyZ3VtZW50cyBwYXNzZWQgY2FuIGJlIGZsYXQgeCx5IHZhbHVlcyBlLmcuIGBuZXcgUG9seWdvbih4LHksIHgseSwgeCx5LCAuLi4pYCB3aGVyZSBgeGAgYW5kIGB5YCBhcmVcbiAqICAgICAgTnVtYmVycy5cbiAqL1xuZnVuY3Rpb24gUG9seWdvbihwb2ludHNfKVxue1xuICAgIC8vIHByZXZlbnRzIGFuIGFyZ3VtZW50IGFzc2lnbm1lbnQgZGVvcHRcbiAgICAvLyBzZWUgc2VjdGlvbiAzLjE6IGh0dHBzOi8vZ2l0aHViLmNvbS9wZXRrYWFudG9ub3YvYmx1ZWJpcmQvd2lraS9PcHRpbWl6YXRpb24ta2lsbGVycyMzLW1hbmFnaW5nLWFyZ3VtZW50c1xuICAgIHZhciBwb2ludHMgPSBwb2ludHNfO1xuXG4gICAgLy9pZiBwb2ludHMgaXNuJ3QgYW4gYXJyYXksIHVzZSBhcmd1bWVudHMgYXMgdGhlIGFycmF5XG4gICAgaWYgKCFBcnJheS5pc0FycmF5KHBvaW50cykpXG4gICAge1xuICAgICAgICAvLyBwcmV2ZW50cyBhbiBhcmd1bWVudCBsZWFrIGRlb3B0XG4gICAgICAgIC8vIHNlZSBzZWN0aW9uIDMuMjogaHR0cHM6Ly9naXRodWIuY29tL3BldGthYW50b25vdi9ibHVlYmlyZC93aWtpL09wdGltaXphdGlvbi1raWxsZXJzIzMtbWFuYWdpbmctYXJndW1lbnRzXG4gICAgICAgIHBvaW50cyA9IG5ldyBBcnJheShhcmd1bWVudHMubGVuZ3RoKTtcblxuICAgICAgICBmb3IgKHZhciBhID0gMDsgYSA8IHBvaW50cy5sZW5ndGg7ICsrYSkge1xuICAgICAgICAgICAgcG9pbnRzW2FdID0gYXJndW1lbnRzW2FdO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gaWYgdGhpcyBpcyBhbiBhcnJheSBvZiBwb2ludHMsIGNvbnZlcnQgaXQgdG8gYSBmbGF0IGFycmF5IG9mIG51bWJlcnNcbiAgICBpZiAocG9pbnRzWzBdIGluc3RhbmNlb2YgUG9pbnQpXG4gICAge1xuICAgICAgICB2YXIgcCA9IFtdO1xuICAgICAgICBmb3IgKHZhciBpID0gMCwgaWwgPSBwb2ludHMubGVuZ3RoOyBpIDwgaWw7IGkrKylcbiAgICAgICAge1xuICAgICAgICAgICAgcC5wdXNoKHBvaW50c1tpXS54LCBwb2ludHNbaV0ueSk7XG4gICAgICAgIH1cblxuICAgICAgICBwb2ludHMgPSBwO1xuICAgIH1cblxuICAgIHRoaXMuY2xvc2VkID0gdHJ1ZTtcblxuICAgIC8qKlxuICAgICAqIEFuIGFycmF5IG9mIHRoZSBwb2ludHMgb2YgdGhpcyBwb2x5Z29uXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJbXX1cbiAgICAgKi9cbiAgICB0aGlzLnBvaW50cyA9IHBvaW50cztcblxuICAgIC8qKlxuICAgICAqIFRoZSB0eXBlIG9mIHRoZSBvYmplY3QsIG1haW5seSB1c2VkIHRvIGF2b2lkIGBpbnN0YW5jZW9mYCBjaGVja3NcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLnR5cGUgPSBDT05TVC5TSEFQRVMuUE9MWTtcbn1cblxuUG9seWdvbi5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBQb2x5Z29uO1xubW9kdWxlLmV4cG9ydHMgPSBQb2x5Z29uO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBjbG9uZSBvZiB0aGlzIHBvbHlnb25cbiAqXG4gKiBAcmV0dXJuIHtQSVhJLlBvbHlnb259IGEgY29weSBvZiB0aGUgcG9seWdvblxuICovXG5Qb2x5Z29uLnByb3RvdHlwZS5jbG9uZSA9IGZ1bmN0aW9uICgpXG57XG4gICAgcmV0dXJuIG5ldyBQb2x5Z29uKHRoaXMucG9pbnRzLnNsaWNlKCkpO1xufTtcblxuLyoqXG4gKiBDaGVja3Mgd2hldGhlciB0aGUgeCBhbmQgeSBjb29yZGluYXRlcyBwYXNzZWQgdG8gdGhpcyBmdW5jdGlvbiBhcmUgY29udGFpbmVkIHdpdGhpbiB0aGlzIHBvbHlnb25cbiAqXG4gKiBAcGFyYW0geCB7bnVtYmVyfSBUaGUgWCBjb29yZGluYXRlIG9mIHRoZSBwb2ludCB0byB0ZXN0XG4gKiBAcGFyYW0geSB7bnVtYmVyfSBUaGUgWSBjb29yZGluYXRlIG9mIHRoZSBwb2ludCB0byB0ZXN0XG4gKiBAcmV0dXJuIHtib29sZWFufSBXaGV0aGVyIHRoZSB4L3kgY29vcmRpbmF0ZXMgYXJlIHdpdGhpbiB0aGlzIHBvbHlnb25cbiAqL1xuUG9seWdvbi5wcm90b3R5cGUuY29udGFpbnMgPSBmdW5jdGlvbiAoeCwgeSlcbntcbiAgICB2YXIgaW5zaWRlID0gZmFsc2U7XG5cbiAgICAvLyB1c2Ugc29tZSByYXljYXN0aW5nIHRvIHRlc3QgaGl0c1xuICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9zdWJzdGFjay9wb2ludC1pbi1wb2x5Z29uL2Jsb2IvbWFzdGVyL2luZGV4LmpzXG4gICAgdmFyIGxlbmd0aCA9IHRoaXMucG9pbnRzLmxlbmd0aCAvIDI7XG5cbiAgICBmb3IgKHZhciBpID0gMCwgaiA9IGxlbmd0aCAtIDE7IGkgPCBsZW5ndGg7IGogPSBpKyspXG4gICAge1xuICAgICAgICB2YXIgeGkgPSB0aGlzLnBvaW50c1tpICogMl0sIHlpID0gdGhpcy5wb2ludHNbaSAqIDIgKyAxXSxcbiAgICAgICAgICAgIHhqID0gdGhpcy5wb2ludHNbaiAqIDJdLCB5aiA9IHRoaXMucG9pbnRzW2ogKiAyICsgMV0sXG4gICAgICAgICAgICBpbnRlcnNlY3QgPSAoKHlpID4geSkgIT09ICh5aiA+IHkpKSAmJiAoeCA8ICh4aiAtIHhpKSAqICh5IC0geWkpIC8gKHlqIC0geWkpICsgeGkpO1xuXG4gICAgICAgIGlmIChpbnRlcnNlY3QpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGluc2lkZSA9ICFpbnNpZGU7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gaW5zaWRlO1xufTtcbiIsInZhciBDT05TVCA9IHJlcXVpcmUoJy4uLy4uL2NvbnN0Jyk7XG5cbi8qKlxuICogdGhlIFJlY3RhbmdsZSBvYmplY3QgaXMgYW4gYXJlYSBkZWZpbmVkIGJ5IGl0cyBwb3NpdGlvbiwgYXMgaW5kaWNhdGVkIGJ5IGl0cyB0b3AtbGVmdCBjb3JuZXIgcG9pbnQgKHgsIHkpIGFuZCBieSBpdHMgd2lkdGggYW5kIGl0cyBoZWlnaHQuXG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIHgge251bWJlcn0gVGhlIFggY29vcmRpbmF0ZSBvZiB0aGUgdXBwZXItbGVmdCBjb3JuZXIgb2YgdGhlIHJlY3RhbmdsZVxuICogQHBhcmFtIHkge251bWJlcn0gVGhlIFkgY29vcmRpbmF0ZSBvZiB0aGUgdXBwZXItbGVmdCBjb3JuZXIgb2YgdGhlIHJlY3RhbmdsZVxuICogQHBhcmFtIHdpZHRoIHtudW1iZXJ9IFRoZSBvdmVyYWxsIHdpZHRoIG9mIHRoaXMgcmVjdGFuZ2xlXG4gKiBAcGFyYW0gaGVpZ2h0IHtudW1iZXJ9IFRoZSBvdmVyYWxsIGhlaWdodCBvZiB0aGlzIHJlY3RhbmdsZVxuICovXG5mdW5jdGlvbiBSZWN0YW5nbGUoeCwgeSwgd2lkdGgsIGhlaWdodClcbntcbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMFxuICAgICAqL1xuICAgIHRoaXMueCA9IHggfHwgMDtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAwXG4gICAgICovXG4gICAgdGhpcy55ID0geSB8fCAwO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDBcbiAgICAgKi9cbiAgICB0aGlzLndpZHRoID0gd2lkdGggfHwgMDtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAwXG4gICAgICovXG4gICAgdGhpcy5oZWlnaHQgPSBoZWlnaHQgfHwgMDtcblxuICAgIC8qKlxuICAgICAqIFRoZSB0eXBlIG9mIHRoZSBvYmplY3QsIG1haW5seSB1c2VkIHRvIGF2b2lkIGBpbnN0YW5jZW9mYCBjaGVja3NcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLnR5cGUgPSBDT05TVC5TSEFQRVMuUkVDVDtcbn1cblxuUmVjdGFuZ2xlLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFJlY3RhbmdsZTtcbm1vZHVsZS5leHBvcnRzID0gUmVjdGFuZ2xlO1xuXG4vKipcbiAqIEEgY29uc3RhbnQgZW1wdHkgcmVjdGFuZ2xlLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBjb25zdGFudFxuICovXG5SZWN0YW5nbGUuRU1QVFkgPSBuZXcgUmVjdGFuZ2xlKDAsIDAsIDAsIDApO1xuXG5cbi8qKlxuICogQ3JlYXRlcyBhIGNsb25lIG9mIHRoaXMgUmVjdGFuZ2xlXG4gKlxuICogQHJldHVybiB7UElYSS5SZWN0YW5nbGV9IGEgY29weSBvZiB0aGUgcmVjdGFuZ2xlXG4gKi9cblJlY3RhbmdsZS5wcm90b3R5cGUuY2xvbmUgPSBmdW5jdGlvbiAoKVxue1xuICAgIHJldHVybiBuZXcgUmVjdGFuZ2xlKHRoaXMueCwgdGhpcy55LCB0aGlzLndpZHRoLCB0aGlzLmhlaWdodCk7XG59O1xuXG4vKipcbiAqIENoZWNrcyB3aGV0aGVyIHRoZSB4IGFuZCB5IGNvb3JkaW5hdGVzIGdpdmVuIGFyZSBjb250YWluZWQgd2l0aGluIHRoaXMgUmVjdGFuZ2xlXG4gKlxuICogQHBhcmFtIHgge251bWJlcn0gVGhlIFggY29vcmRpbmF0ZSBvZiB0aGUgcG9pbnQgdG8gdGVzdFxuICogQHBhcmFtIHkge251bWJlcn0gVGhlIFkgY29vcmRpbmF0ZSBvZiB0aGUgcG9pbnQgdG8gdGVzdFxuICogQHJldHVybiB7Ym9vbGVhbn0gV2hldGhlciB0aGUgeC95IGNvb3JkaW5hdGVzIGFyZSB3aXRoaW4gdGhpcyBSZWN0YW5nbGVcbiAqL1xuUmVjdGFuZ2xlLnByb3RvdHlwZS5jb250YWlucyA9IGZ1bmN0aW9uICh4LCB5KVxue1xuICAgIGlmICh0aGlzLndpZHRoIDw9IDAgfHwgdGhpcy5oZWlnaHQgPD0gMClcbiAgICB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBpZiAoeCA+PSB0aGlzLnggJiYgeCA8IHRoaXMueCArIHRoaXMud2lkdGgpXG4gICAge1xuICAgICAgICBpZiAoeSA+PSB0aGlzLnkgJiYgeSA8IHRoaXMueSArIHRoaXMuaGVpZ2h0KVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBmYWxzZTtcbn07XG4iLCJ2YXIgQ09OU1QgPSByZXF1aXJlKCcuLi8uLi9jb25zdCcpO1xuXG4vKipcbiAqIFRoZSBSb3VuZGVkIFJlY3RhbmdsZSBvYmplY3QgaXMgYW4gYXJlYSB0aGF0IGhhcyBuaWNlIHJvdW5kZWQgY29ybmVycywgYXMgaW5kaWNhdGVkIGJ5IGl0cyB0b3AtbGVmdCBjb3JuZXIgcG9pbnQgKHgsIHkpIGFuZCBieSBpdHMgd2lkdGggYW5kIGl0cyBoZWlnaHQgYW5kIGl0cyByYWRpdXMuXG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIHgge251bWJlcn0gVGhlIFggY29vcmRpbmF0ZSBvZiB0aGUgdXBwZXItbGVmdCBjb3JuZXIgb2YgdGhlIHJvdW5kZWQgcmVjdGFuZ2xlXG4gKiBAcGFyYW0geSB7bnVtYmVyfSBUaGUgWSBjb29yZGluYXRlIG9mIHRoZSB1cHBlci1sZWZ0IGNvcm5lciBvZiB0aGUgcm91bmRlZCByZWN0YW5nbGVcbiAqIEBwYXJhbSB3aWR0aCB7bnVtYmVyfSBUaGUgb3ZlcmFsbCB3aWR0aCBvZiB0aGlzIHJvdW5kZWQgcmVjdGFuZ2xlXG4gKiBAcGFyYW0gaGVpZ2h0IHtudW1iZXJ9IFRoZSBvdmVyYWxsIGhlaWdodCBvZiB0aGlzIHJvdW5kZWQgcmVjdGFuZ2xlXG4gKiBAcGFyYW0gcmFkaXVzIHtudW1iZXJ9IENvbnRyb2xzIHRoZSByYWRpdXMgb2YgdGhlIHJvdW5kZWQgY29ybmVyc1xuICovXG5mdW5jdGlvbiBSb3VuZGVkUmVjdGFuZ2xlKHgsIHksIHdpZHRoLCBoZWlnaHQsIHJhZGl1cylcbntcbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMFxuICAgICAqL1xuICAgIHRoaXMueCA9IHggfHwgMDtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAwXG4gICAgICovXG4gICAgdGhpcy55ID0geSB8fCAwO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDBcbiAgICAgKi9cbiAgICB0aGlzLndpZHRoID0gd2lkdGggfHwgMDtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAwXG4gICAgICovXG4gICAgdGhpcy5oZWlnaHQgPSBoZWlnaHQgfHwgMDtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAyMFxuICAgICAqL1xuICAgIHRoaXMucmFkaXVzID0gcmFkaXVzIHx8IDIwO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHR5cGUgb2YgdGhlIG9iamVjdCwgbWFpbmx5IHVzZWQgdG8gYXZvaWQgYGluc3RhbmNlb2ZgIGNoZWNrc1xuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMudHlwZSA9IENPTlNULlNIQVBFUy5SUkVDO1xufVxuXG5Sb3VuZGVkUmVjdGFuZ2xlLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFJvdW5kZWRSZWN0YW5nbGU7XG5tb2R1bGUuZXhwb3J0cyA9IFJvdW5kZWRSZWN0YW5nbGU7XG5cbi8qKlxuICogQ3JlYXRlcyBhIGNsb25lIG9mIHRoaXMgUm91bmRlZCBSZWN0YW5nbGVcbiAqXG4gKiBAcmV0dXJuIHtQSVhJLlJvdW5kZWRSZWN0YW5nbGV9IGEgY29weSBvZiB0aGUgcm91bmRlZCByZWN0YW5nbGVcbiAqL1xuUm91bmRlZFJlY3RhbmdsZS5wcm90b3R5cGUuY2xvbmUgPSBmdW5jdGlvbiAoKVxue1xuICAgIHJldHVybiBuZXcgUm91bmRlZFJlY3RhbmdsZSh0aGlzLngsIHRoaXMueSwgdGhpcy53aWR0aCwgdGhpcy5oZWlnaHQsIHRoaXMucmFkaXVzKTtcbn07XG5cbi8qKlxuICogQ2hlY2tzIHdoZXRoZXIgdGhlIHggYW5kIHkgY29vcmRpbmF0ZXMgZ2l2ZW4gYXJlIGNvbnRhaW5lZCB3aXRoaW4gdGhpcyBSb3VuZGVkIFJlY3RhbmdsZVxuICpcbiAqIEBwYXJhbSB4IHtudW1iZXJ9IFRoZSBYIGNvb3JkaW5hdGUgb2YgdGhlIHBvaW50IHRvIHRlc3RcbiAqIEBwYXJhbSB5IHtudW1iZXJ9IFRoZSBZIGNvb3JkaW5hdGUgb2YgdGhlIHBvaW50IHRvIHRlc3RcbiAqIEByZXR1cm4ge2Jvb2xlYW59IFdoZXRoZXIgdGhlIHgveSBjb29yZGluYXRlcyBhcmUgd2l0aGluIHRoaXMgUm91bmRlZCBSZWN0YW5nbGVcbiAqL1xuUm91bmRlZFJlY3RhbmdsZS5wcm90b3R5cGUuY29udGFpbnMgPSBmdW5jdGlvbiAoeCwgeSlcbntcbiAgICBpZiAodGhpcy53aWR0aCA8PSAwIHx8IHRoaXMuaGVpZ2h0IDw9IDApXG4gICAge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgaWYgKHggPj0gdGhpcy54ICYmIHggPD0gdGhpcy54ICsgdGhpcy53aWR0aClcbiAgICB7XG4gICAgICAgIGlmICh5ID49IHRoaXMueSAmJiB5IDw9IHRoaXMueSArIHRoaXMuaGVpZ2h0KVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBmYWxzZTtcbn07XG4iLCJ2YXIgQ29udGFpbmVyID0gcmVxdWlyZSgnLi4vZGlzcGxheS9Db250YWluZXInKSxcbiAgICBDT05TVCA9IHJlcXVpcmUoJy4uL2NvbnN0Jyk7XG5cbi8qKlxuICogVGhlIFBhcnRpY2xlQ29udGFpbmVyIGNsYXNzIGlzIGEgcmVhbGx5IGZhc3QgdmVyc2lvbiBvZiB0aGUgQ29udGFpbmVyIGJ1aWx0IHNvbGVseSBmb3Igc3BlZWQsXG4gKiBzbyB1c2Ugd2hlbiB5b3UgbmVlZCBhIGxvdCBvZiBzcHJpdGVzIG9yIHBhcnRpY2xlcy4gVGhlIHRyYWRlb2ZmIG9mIHRoZSBQYXJ0aWNsZUNvbnRhaW5lciBpcyB0aGF0IGFkdmFuY2VkXG4gKiBmdW5jdGlvbmFsaXR5IHdpbGwgbm90IHdvcmsuIFBhcnRpY2xlQ29udGFpbmVyIGltcGxlbWVudHMgb25seSB0aGUgYmFzaWMgb2JqZWN0IHRyYW5zZm9ybSAocG9zaXRpb24sIHNjYWxlLCByb3RhdGlvbikuXG4gKiBBbnkgb3RoZXIgZnVuY3Rpb25hbGl0eSBsaWtlIHRpbnRpbmcsIG1hc2tpbmcsIGV0YyB3aWxsIG5vdCB3b3JrIG9uIHNwcml0ZXMgaW4gdGhpcyBiYXRjaC5cbiAqXG4gKiBJdCdzIGV4dHJlbWVseSBlYXN5IHRvIHVzZSA6XG4gKlxuICogYGBganNcbiAqIHZhciBjb250YWluZXIgPSBuZXcgUGFydGljbGVDb250YWluZXIoKTtcbiAqXG4gKiBmb3IgKHZhciBpID0gMDsgaSA8IDEwMDsgKytpKVxuICoge1xuICogICAgIHZhciBzcHJpdGUgPSBuZXcgUElYSS5TcHJpdGUuZnJvbUltYWdlKFwibXlJbWFnZS5wbmdcIik7XG4gKiAgICAgY29udGFpbmVyLmFkZENoaWxkKHNwcml0ZSk7XG4gKiB9XG4gKiBgYGBcbiAqXG4gKiBBbmQgaGVyZSB5b3UgaGF2ZSBhIGh1bmRyZWQgc3ByaXRlcyB0aGF0IHdpbGwgYmUgcmVuZGVyZXIgYXQgdGhlIHNwZWVkIG9mIGxpZ2h0LlxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5Db250YWluZXJcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gW21heFNpemU9MTUwMDBdIHtudW1iZXJ9IFRoZSBtYXhpbXVtIG51bWJlciBvZiBwYXJ0aWNsZXMgdGhhdCBjYW4gYmUgcmVuZGVyZXIgYnkgdGhlIGNvbnRhaW5lci5cbiAqIEBwYXJhbSBbcHJvcGVydGllc10ge29iamVjdH0gVGhlIHByb3BlcnRpZXMgb2YgY2hpbGRyZW4gdGhhdCBzaG91bGQgYmUgdXBsb2FkZWQgdG8gdGhlIGdwdSBhbmQgYXBwbGllZC5cbiAqIEBwYXJhbSBbcHJvcGVydGllcy5zY2FsZT1mYWxzZV0ge2Jvb2xlYW59IFdoZW4gdHJ1ZSwgc2NhbGUgYmUgdXBsb2FkZWQgYW5kIGFwcGxpZWQuXG4gKiBAcGFyYW0gW3Byb3BlcnRpZXMucG9zaXRpb249dHJ1ZV0ge2Jvb2xlYW59IFdoZW4gdHJ1ZSwgcG9zaXRpb24gYmUgdXBsb2FkZWQgYW5kIGFwcGxpZWQuXG4gKiBAcGFyYW0gW3Byb3BlcnRpZXMucm90YXRpb249ZmFsc2VdIHtib29sZWFufSBXaGVuIHRydWUsIHJvdGF0aW9uIGJlIHVwbG9hZGVkIGFuZCBhcHBsaWVkLlxuICogQHBhcmFtIFtwcm9wZXJ0aWVzLnV2cz1mYWxzZV0ge2Jvb2xlYW59IFdoZW4gdHJ1ZSwgdXZzIGJlIHVwbG9hZGVkIGFuZCBhcHBsaWVkLlxuICogQHBhcmFtIFtwcm9wZXJ0aWVzLmFscGhhPWZhbHNlXSB7Ym9vbGVhbn0gV2hlbiB0cnVlLCBhbHBoYSBiZSB1cGxvYWRlZCBhbmQgYXBwbGllZC5cbiAqIEBwYXJhbSBbYmF0Y2hTaXplPTE1MDAwXSB7bnVtYmVyfSBOdW1iZXIgb2YgcGFydGljbGVzIHBlciBiYXRjaC5cbiAqL1xuZnVuY3Rpb24gUGFydGljbGVDb250YWluZXIobWF4U2l6ZSwgcHJvcGVydGllcywgYmF0Y2hTaXplKVxue1xuICAgIENvbnRhaW5lci5jYWxsKHRoaXMpO1xuXG4gICAgYmF0Y2hTaXplID0gYmF0Y2hTaXplIHx8IDE1MDAwOyAvL0NPTlNULlNQUklURV9CQVRDSF9TSVpFOyAvLyAyMDAwIGlzIGEgbmljZSBiYWxhbmNlIGJldHdlZW4gbW9iaWxlIC8gZGVza3RvcFxuICAgIG1heFNpemUgPSBtYXhTaXplIHx8IDE1MDAwO1xuXG4gICAgLy8gTWFraW5nIHN1cmUgdGhlIGJhdGNoIHNpemUgaXMgdmFsaWRcbiAgICAvLyA2NTUzNSBpcyBtYXggdmVydGV4IGluZGV4IGluIHRoZSBpbmRleCBidWZmZXIgKHNlZSBQYXJ0aWNsZVJlbmRlcmVyKVxuICAgIC8vIHNvIG1heCBudW1iZXIgb2YgcGFydGljbGVzIGlzIDY1NTM2IC8gNCA9IDE2Mzg0XG4gICAgdmFyIG1heEJhdGNoU2l6ZSA9IDE2Mzg0O1xuICAgIGlmIChiYXRjaFNpemUgPiBtYXhCYXRjaFNpemUpIHtcbiAgICAgICAgYmF0Y2hTaXplID0gbWF4QmF0Y2hTaXplO1xuICAgIH1cblxuICAgIGlmIChiYXRjaFNpemUgPiBtYXhTaXplKSB7XG4gICAgICAgIGJhdGNoU2l6ZSA9IG1heFNpemU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2V0IHByb3BlcnRpZXMgdG8gYmUgZHluYW1pYyAodHJ1ZSkgLyBzdGF0aWMgKGZhbHNlKVxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbltdfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fcHJvcGVydGllcyA9IFtmYWxzZSwgdHJ1ZSwgZmFsc2UsIGZhbHNlLCBmYWxzZV07XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9tYXhTaXplID0gbWF4U2l6ZTtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX2JhdGNoU2l6ZSA9IGJhdGNoU2l6ZTtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge1dlYkdMQnVmZmVyfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fYnVmZmVycyA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9idWZmZXJUb1VwZGF0ZSA9IDA7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqXG4gICAgICovXG4gICAgdGhpcy5pbnRlcmFjdGl2ZUNoaWxkcmVuID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYmxlbmQgbW9kZSB0byBiZSBhcHBsaWVkIHRvIHRoZSBzcHJpdGUuIEFwcGx5IGEgdmFsdWUgb2YgYFBJWEkuQkxFTkRfTU9ERVMuTk9STUFMYCB0byByZXNldCB0aGUgYmxlbmQgbW9kZS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCBQSVhJLkJMRU5EX01PREVTLk5PUk1BTFxuICAgICAqIEBzZWUgUElYSS5CTEVORF9NT0RFU1xuICAgICAqL1xuICAgIHRoaXMuYmxlbmRNb2RlID0gQ09OU1QuQkxFTkRfTU9ERVMuTk9STUFMO1xuXG4gICAgLyoqXG4gICAgICogVXNlZCBmb3IgY2FudmFzIHJlbmRlcmVyaW5nLiBJZiB0cnVlIHRoZW4gdGhlIGVsZW1lbnRzIHdpbGwgYmUgcG9zaXRpb25lZCBhdCB0aGUgbmVhcmVzdCBwaXhlbC4gVGhpcyBwcm92aWRlcyBhIG5pY2Ugc3BlZWQgYm9vc3QuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqIEBkZWZhdWx0IHRydWU7XG4gICAgICovXG4gICAgdGhpcy5yb3VuZFBpeGVscyA9IHRydWU7XG5cbiAgICB0aGlzLnNldFByb3BlcnRpZXMocHJvcGVydGllcyk7XG59XG5cblBhcnRpY2xlQ29udGFpbmVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoQ29udGFpbmVyLnByb3RvdHlwZSk7XG5QYXJ0aWNsZUNvbnRhaW5lci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBQYXJ0aWNsZUNvbnRhaW5lcjtcbm1vZHVsZS5leHBvcnRzID0gUGFydGljbGVDb250YWluZXI7XG5cbi8qKlxuICogU2V0cyB0aGUgcHJpdmF0ZSBwcm9wZXJ0aWVzIGFycmF5IHRvIGR5bmFtaWMgLyBzdGF0aWMgYmFzZWQgb24gdGhlIHBhc3NlZCBwcm9wZXJ0aWVzIG9iamVjdFxuICpcbiAqIEBwYXJhbSBwcm9wZXJ0aWVzIHtvYmplY3R9IFRoZSBwcm9wZXJ0aWVzIHRvIGJlIHVwbG9hZGVkXG4gKi9cblBhcnRpY2xlQ29udGFpbmVyLnByb3RvdHlwZS5zZXRQcm9wZXJ0aWVzID0gZnVuY3Rpb24ocHJvcGVydGllcylcbntcbiAgICBpZiAoIHByb3BlcnRpZXMgKSB7XG4gICAgICAgIHRoaXMuX3Byb3BlcnRpZXNbMF0gPSAnc2NhbGUnIGluIHByb3BlcnRpZXMgPyAhIXByb3BlcnRpZXMuc2NhbGUgOiB0aGlzLl9wcm9wZXJ0aWVzWzBdO1xuICAgICAgICB0aGlzLl9wcm9wZXJ0aWVzWzFdID0gJ3Bvc2l0aW9uJyBpbiBwcm9wZXJ0aWVzID8gISFwcm9wZXJ0aWVzLnBvc2l0aW9uIDogdGhpcy5fcHJvcGVydGllc1sxXTtcbiAgICAgICAgdGhpcy5fcHJvcGVydGllc1syXSA9ICdyb3RhdGlvbicgaW4gcHJvcGVydGllcyA/ICEhcHJvcGVydGllcy5yb3RhdGlvbiA6IHRoaXMuX3Byb3BlcnRpZXNbMl07XG4gICAgICAgIHRoaXMuX3Byb3BlcnRpZXNbM10gPSAndXZzJyBpbiBwcm9wZXJ0aWVzID8gISFwcm9wZXJ0aWVzLnV2cyA6IHRoaXMuX3Byb3BlcnRpZXNbM107XG4gICAgICAgIHRoaXMuX3Byb3BlcnRpZXNbNF0gPSAnYWxwaGEnIGluIHByb3BlcnRpZXMgPyAhIXByb3BlcnRpZXMuYWxwaGEgOiB0aGlzLl9wcm9wZXJ0aWVzWzRdO1xuICAgIH1cbn07XG5cbi8qKlxuICogVXBkYXRlcyB0aGUgb2JqZWN0IHRyYW5zZm9ybSBmb3IgcmVuZGVyaW5nXG4gKlxuICogQHByaXZhdGVcbiAqL1xuUGFydGljbGVDb250YWluZXIucHJvdG90eXBlLnVwZGF0ZVRyYW5zZm9ybSA9IGZ1bmN0aW9uICgpXG57XG5cbiAgICAvLyBUT0RPIGRvbid0IG5lZWQgdG8hXG4gICAgdGhpcy5kaXNwbGF5T2JqZWN0VXBkYXRlVHJhbnNmb3JtKCk7XG4gICAgLy8gIFBJWEkuQ29udGFpbmVyLnByb3RvdHlwZS51cGRhdGVUcmFuc2Zvcm0uY2FsbCggdGhpcyApO1xufTtcblxuLyoqXG4gKiBSZW5kZXJzIHRoZSBjb250YWluZXIgdXNpbmcgdGhlIFdlYkdMIHJlbmRlcmVyXG4gKlxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLldlYkdMUmVuZGVyZXJ9IFRoZSB3ZWJnbCByZW5kZXJlclxuICogQHByaXZhdGVcbiAqL1xuUGFydGljbGVDb250YWluZXIucHJvdG90eXBlLnJlbmRlcldlYkdMID0gZnVuY3Rpb24gKHJlbmRlcmVyKVxue1xuICAgIGlmICghdGhpcy52aXNpYmxlIHx8IHRoaXMud29ybGRBbHBoYSA8PSAwIHx8ICF0aGlzLmNoaWxkcmVuLmxlbmd0aCB8fCAhdGhpcy5yZW5kZXJhYmxlKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHJlbmRlcmVyLnNldE9iamVjdFJlbmRlcmVyKCByZW5kZXJlci5wbHVnaW5zLnBhcnRpY2xlICk7XG4gICAgcmVuZGVyZXIucGx1Z2lucy5wYXJ0aWNsZS5yZW5kZXIoIHRoaXMgKTtcbn07XG5cbi8qKlxuICogU2V0IHRoZSBmbGFnIHRoYXQgc3RhdGljIGRhdGEgc2hvdWxkIGJlIHVwZGF0ZWQgdG8gdHJ1ZVxuICpcbiAqIEBwcml2YXRlXG4gKi9cblBhcnRpY2xlQ29udGFpbmVyLnByb3RvdHlwZS5vbkNoaWxkcmVuQ2hhbmdlID0gZnVuY3Rpb24gKHNtYWxsZXN0Q2hpbGRJbmRleClcbntcbiAgICB2YXIgYnVmZmVySW5kZXggPSBNYXRoLmZsb29yKHNtYWxsZXN0Q2hpbGRJbmRleCAvIHRoaXMuX2JhdGNoU2l6ZSk7XG4gICAgaWYgKGJ1ZmZlckluZGV4IDwgdGhpcy5fYnVmZmVyVG9VcGRhdGUpIHtcbiAgICAgICAgdGhpcy5fYnVmZmVyVG9VcGRhdGUgPSBidWZmZXJJbmRleDtcbiAgICB9XG59O1xuXG4vKipcbiAqIFJlbmRlcnMgdGhlIG9iamVjdCB1c2luZyB0aGUgQ2FudmFzIHJlbmRlcmVyXG4gKlxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLkNhbnZhc1JlbmRlcmVyfSBUaGUgY2FudmFzIHJlbmRlcmVyXG4gKiBAcHJpdmF0ZVxuICovXG5QYXJ0aWNsZUNvbnRhaW5lci5wcm90b3R5cGUucmVuZGVyQ2FudmFzID0gZnVuY3Rpb24gKHJlbmRlcmVyKVxue1xuICAgIGlmICghdGhpcy52aXNpYmxlIHx8IHRoaXMud29ybGRBbHBoYSA8PSAwIHx8ICF0aGlzLmNoaWxkcmVuLmxlbmd0aCB8fCAhdGhpcy5yZW5kZXJhYmxlKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHZhciBjb250ZXh0ID0gcmVuZGVyZXIuY29udGV4dDtcbiAgICB2YXIgdHJhbnNmb3JtID0gdGhpcy53b3JsZFRyYW5zZm9ybTtcbiAgICB2YXIgaXNSb3RhdGVkID0gdHJ1ZTtcblxuICAgIHZhciBwb3NpdGlvblggPSAwO1xuICAgIHZhciBwb3NpdGlvblkgPSAwO1xuXG4gICAgdmFyIGZpbmFsV2lkdGggPSAwO1xuICAgIHZhciBmaW5hbEhlaWdodCA9IDA7XG5cbiAgICB2YXIgY29tcG9zaXRlT3BlcmF0aW9uID0gcmVuZGVyZXIuYmxlbmRNb2Rlc1t0aGlzLmJsZW5kTW9kZV07XG4gICAgaWYgKGNvbXBvc2l0ZU9wZXJhdGlvbiAhPT0gY29udGV4dC5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb24pXG4gICAge1xuICAgICAgICBjb250ZXh0Lmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbiA9IGNvbXBvc2l0ZU9wZXJhdGlvbjtcbiAgICB9XG5cbiAgICBjb250ZXh0Lmdsb2JhbEFscGhhID0gdGhpcy53b3JsZEFscGhhO1xuXG4gICAgdGhpcy5kaXNwbGF5T2JqZWN0VXBkYXRlVHJhbnNmb3JtKCk7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuY2hpbGRyZW4ubGVuZ3RoOyArK2kpXG4gICAge1xuICAgICAgICB2YXIgY2hpbGQgPSB0aGlzLmNoaWxkcmVuW2ldO1xuXG4gICAgICAgIGlmICghY2hpbGQudmlzaWJsZSlcbiAgICAgICAge1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgZnJhbWUgPSBjaGlsZC50ZXh0dXJlLmZyYW1lO1xuXG4gICAgICAgIGNvbnRleHQuZ2xvYmFsQWxwaGEgPSB0aGlzLndvcmxkQWxwaGEgKiBjaGlsZC5hbHBoYTtcblxuICAgICAgICBpZiAoY2hpbGQucm90YXRpb24gJSAoTWF0aC5QSSAqIDIpID09PSAwKVxuICAgICAgICB7XG4gICAgICAgICAgICAvLyB0aGlzIGlzIHRoZSBmYXN0ZXN0ICB3YXkgdG8gb3B0aW1pc2UhIC0gaWYgcm90YXRpb24gaXMgMCB0aGVuIHdlIGNhbiBhdm9pZCBhbnkga2luZCBvZiBzZXRUcmFuc2Zvcm0gY2FsbFxuICAgICAgICAgICAgaWYgKGlzUm90YXRlZClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb250ZXh0LnNldFRyYW5zZm9ybShcbiAgICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtLmEsXG4gICAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybS5iLFxuICAgICAgICAgICAgICAgICAgICB0cmFuc2Zvcm0uYyxcbiAgICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtLmQsXG4gICAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybS50eCxcbiAgICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtLnR5XG4gICAgICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgICAgIGlzUm90YXRlZCA9IGZhbHNlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBwb3NpdGlvblggPSAoKGNoaWxkLmFuY2hvci54KSAqICgtZnJhbWUud2lkdGggKiBjaGlsZC5zY2FsZS54KSArIGNoaWxkLnBvc2l0aW9uLnggICsgMC41KTtcbiAgICAgICAgICAgIHBvc2l0aW9uWSA9ICgoY2hpbGQuYW5jaG9yLnkpICogKC1mcmFtZS5oZWlnaHQgKiBjaGlsZC5zY2FsZS55KSArIGNoaWxkLnBvc2l0aW9uLnkgICsgMC41KTtcblxuICAgICAgICAgICAgZmluYWxXaWR0aCA9IGZyYW1lLndpZHRoICogY2hpbGQuc2NhbGUueDtcbiAgICAgICAgICAgIGZpbmFsSGVpZ2h0ID0gZnJhbWUuaGVpZ2h0ICogY2hpbGQuc2NhbGUueTtcblxuICAgICAgICB9XG4gICAgICAgIGVsc2VcbiAgICAgICAge1xuICAgICAgICAgICAgaWYgKCFpc1JvdGF0ZWQpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgaXNSb3RhdGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY2hpbGQuZGlzcGxheU9iamVjdFVwZGF0ZVRyYW5zZm9ybSgpO1xuXG4gICAgICAgICAgICB2YXIgY2hpbGRUcmFuc2Zvcm0gPSBjaGlsZC53b3JsZFRyYW5zZm9ybTtcblxuICAgICAgICAgICAgaWYgKHJlbmRlcmVyLnJvdW5kUGl4ZWxzKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGNvbnRleHQuc2V0VHJhbnNmb3JtKFxuICAgICAgICAgICAgICAgICAgICBjaGlsZFRyYW5zZm9ybS5hLFxuICAgICAgICAgICAgICAgICAgICBjaGlsZFRyYW5zZm9ybS5iLFxuICAgICAgICAgICAgICAgICAgICBjaGlsZFRyYW5zZm9ybS5jLFxuICAgICAgICAgICAgICAgICAgICBjaGlsZFRyYW5zZm9ybS5kLFxuICAgICAgICAgICAgICAgICAgICBjaGlsZFRyYW5zZm9ybS50eCB8IDAsXG4gICAgICAgICAgICAgICAgICAgIGNoaWxkVHJhbnNmb3JtLnR5IHwgMFxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29udGV4dC5zZXRUcmFuc2Zvcm0oXG4gICAgICAgICAgICAgICAgICAgIGNoaWxkVHJhbnNmb3JtLmEsXG4gICAgICAgICAgICAgICAgICAgIGNoaWxkVHJhbnNmb3JtLmIsXG4gICAgICAgICAgICAgICAgICAgIGNoaWxkVHJhbnNmb3JtLmMsXG4gICAgICAgICAgICAgICAgICAgIGNoaWxkVHJhbnNmb3JtLmQsXG4gICAgICAgICAgICAgICAgICAgIGNoaWxkVHJhbnNmb3JtLnR4LFxuICAgICAgICAgICAgICAgICAgICBjaGlsZFRyYW5zZm9ybS50eVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHBvc2l0aW9uWCA9ICgoY2hpbGQuYW5jaG9yLngpICogKC1mcmFtZS53aWR0aCkgKyAwLjUpO1xuICAgICAgICAgICAgcG9zaXRpb25ZID0gKChjaGlsZC5hbmNob3IueSkgKiAoLWZyYW1lLmhlaWdodCkgKyAwLjUpO1xuXG4gICAgICAgICAgICBmaW5hbFdpZHRoID0gZnJhbWUud2lkdGg7XG4gICAgICAgICAgICBmaW5hbEhlaWdodCA9IGZyYW1lLmhlaWdodDtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnRleHQuZHJhd0ltYWdlKFxuICAgICAgICAgICAgY2hpbGQudGV4dHVyZS5iYXNlVGV4dHVyZS5zb3VyY2UsXG4gICAgICAgICAgICBmcmFtZS54LFxuICAgICAgICAgICAgZnJhbWUueSxcbiAgICAgICAgICAgIGZyYW1lLndpZHRoLFxuICAgICAgICAgICAgZnJhbWUuaGVpZ2h0LFxuICAgICAgICAgICAgcG9zaXRpb25YLFxuICAgICAgICAgICAgcG9zaXRpb25ZLFxuICAgICAgICAgICAgZmluYWxXaWR0aCxcbiAgICAgICAgICAgIGZpbmFsSGVpZ2h0XG4gICAgICAgICk7XG4gICAgfVxufTtcblxuLyoqXG4gKiBEZXN0cm95cyB0aGUgY29udGFpbmVyXG4gKlxuICogQHBhcmFtIFtkZXN0cm95Q2hpbGRyZW49ZmFsc2VdIHtib29sZWFufSBpZiBzZXQgdG8gdHJ1ZSwgYWxsIHRoZSBjaGlsZHJlbiB3aWxsIGhhdmUgdGhlaXIgZGVzdHJveSBtZXRob2QgY2FsbGVkIGFzIHdlbGxcbiAqL1xuUGFydGljbGVDb250YWluZXIucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoKSB7XG4gICAgQ29udGFpbmVyLnByb3RvdHlwZS5kZXN0cm95LmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG5cbiAgICBpZiAodGhpcy5fYnVmZmVycykge1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuX2J1ZmZlcnMubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgICAgIHRoaXMuX2J1ZmZlcnNbaV0uZGVzdHJveSgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5fcHJvcGVydGllcyA9IG51bGw7XG4gICAgdGhpcy5fYnVmZmVycyA9IG51bGw7XG59O1xuIiwiXG4vKipcbiAqIEBhdXRob3IgTWF0IEdyb3Zlc1xuICpcbiAqIEJpZyB0aGFua3MgdG8gdGhlIHZlcnkgY2xldmVyIE1hdHQgRGVzTGF1cmllcnMgPG1hdHRkZXNsPiBodHRwczovL2dpdGh1Yi5jb20vbWF0dGRlc2wvXG4gKiBmb3IgY3JlYXRpbmcgdGhlIG9yaWdpbmFsIHBpeGkgdmVyc2lvbiFcbiAqIEFsc28gYSB0aGFua3MgdG8gaHR0cHM6Ly9naXRodWIuY29tL2JjaGV2YWxpZXIgZm9yIHR3ZWFraW5nIHRoZSB0aW50IGFuZCBhbHBoYSBzbyB0aGF0IHRoZXkgbm93IHNoYXJlIDQgYnl0ZXMgb24gdGhlIHZlcnRleCBidWZmZXJcbiAqXG4gKiBIZWF2aWx5IGluc3BpcmVkIGJ5IExpYkdEWCdzIFBhcnRpY2xlQnVmZmVyOlxuICogaHR0cHM6Ly9naXRodWIuY29tL2xpYmdkeC9saWJnZHgvYmxvYi9tYXN0ZXIvZ2R4L3NyYy9jb20vYmFkbG9naWMvZ2R4L2dyYXBoaWNzL2cyZC9QYXJ0aWNsZUJ1ZmZlci5qYXZhXG4gKi9cblxuLyoqXG4gKiBUaGUgcGFydGljbGUgYnVmZmVyIG1hbmFnZXMgdGhlIHN0YXRpYyBhbmQgZHluYW1pYyBidWZmZXJzIGZvciBhIHBhcnRpY2xlIGNvbnRhaW5lci5cbiAqXG4gKiBAY2xhc3NcbiAqIEBwcml2YXRlXG4gKiBAbWVtYmVyb2YgUElYSVxuICovXG5mdW5jdGlvbiBQYXJ0aWNsZUJ1ZmZlcihnbCwgcHJvcGVydGllcywgZHluYW1pY1Byb3BlcnR5RmxhZ3MsIHNpemUpXG57XG4gICAgLyoqXG4gICAgICogVGhlIGN1cnJlbnQgV2ViR0wgZHJhd2luZyBjb250ZXh0LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7V2ViR0xSZW5kZXJpbmdDb250ZXh0fVxuICAgICAqL1xuICAgIHRoaXMuZ2wgPSBnbDtcblxuICAgIC8qKlxuICAgICAqIFNpemUgb2YgYSBzaW5nbGUgdmVydGV4LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMudmVydFNpemUgPSAyO1xuXG4gICAgLyoqXG4gICAgICogU2l6ZSBvZiBhIHNpbmdsZSB2ZXJ0ZXggaW4gYnl0ZXMuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy52ZXJ0Qnl0ZVNpemUgPSB0aGlzLnZlcnRTaXplICogNDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBudW1iZXIgb2YgcGFydGljbGVzIHRoZSBidWZmZXIgY2FuIGhvbGRcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLnNpemUgPSBzaXplO1xuXG4gICAgLyoqXG4gICAgICogQSBsaXN0IG9mIHRoZSBwcm9wZXJ0aWVzIHRoYXQgYXJlIGR5bmFtaWMuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtvYmplY3RbXX1cbiAgICAgKi9cbiAgICB0aGlzLmR5bmFtaWNQcm9wZXJ0aWVzID0gW107XG5cbiAgICAvKipcbiAgICAgKiBBIGxpc3Qgb2YgdGhlIHByb3BlcnRpZXMgdGhhdCBhcmUgc3RhdGljLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7b2JqZWN0W119XG4gICAgICovXG4gICAgdGhpcy5zdGF0aWNQcm9wZXJ0aWVzID0gW107XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BlcnRpZXMubGVuZ3RoOyBpKyspXG4gICAge1xuICAgICAgICB2YXIgcHJvcGVydHkgPSBwcm9wZXJ0aWVzW2ldO1xuXG4gICAgICAgIGlmKGR5bmFtaWNQcm9wZXJ0eUZsYWdzW2ldKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmR5bmFtaWNQcm9wZXJ0aWVzLnB1c2gocHJvcGVydHkpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2VcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5zdGF0aWNQcm9wZXJ0aWVzLnB1c2gocHJvcGVydHkpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5zdGF0aWNTdHJpZGUgPSAwO1xuICAgIHRoaXMuc3RhdGljQnVmZmVyID0gbnVsbDtcbiAgICB0aGlzLnN0YXRpY0RhdGEgPSBudWxsO1xuXG4gICAgdGhpcy5keW5hbWljU3RyaWRlID0gMDtcbiAgICB0aGlzLmR5bmFtaWNCdWZmZXIgPSBudWxsO1xuICAgIHRoaXMuZHluYW1pY0RhdGEgPSBudWxsO1xuXG4gICAgdGhpcy5pbml0QnVmZmVycygpO1xuXG59XG5cblBhcnRpY2xlQnVmZmVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFBhcnRpY2xlQnVmZmVyO1xubW9kdWxlLmV4cG9ydHMgPSBQYXJ0aWNsZUJ1ZmZlcjtcblxuLyoqXG4gKiBTZXRzIHVwIHRoZSByZW5kZXJlciBjb250ZXh0IGFuZCBuZWNlc3NhcnkgYnVmZmVycy5cbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5QYXJ0aWNsZUJ1ZmZlci5wcm90b3R5cGUuaW5pdEJ1ZmZlcnMgPSBmdW5jdGlvbiAoKVxue1xuICAgIHZhciBnbCA9IHRoaXMuZ2w7XG4gICAgdmFyIGk7XG4gICAgdmFyIHByb3BlcnR5O1xuXG4gICAgdmFyIGR5bmFtaWNPZmZzZXQgPSAwO1xuICAgIHRoaXMuZHluYW1pY1N0cmlkZSA9IDA7XG5cbiAgICBmb3IgKGkgPSAwOyBpIDwgdGhpcy5keW5hbWljUHJvcGVydGllcy5sZW5ndGg7IGkrKylcbiAgICB7XG4gICAgICAgIHByb3BlcnR5ID0gdGhpcy5keW5hbWljUHJvcGVydGllc1tpXTtcblxuICAgICAgICBwcm9wZXJ0eS5vZmZzZXQgPSBkeW5hbWljT2Zmc2V0O1xuICAgICAgICBkeW5hbWljT2Zmc2V0ICs9IHByb3BlcnR5LnNpemU7XG4gICAgICAgIHRoaXMuZHluYW1pY1N0cmlkZSArPSBwcm9wZXJ0eS5zaXplO1xuICAgIH1cblxuICAgIHRoaXMuZHluYW1pY0RhdGEgPSBuZXcgRmxvYXQzMkFycmF5KCB0aGlzLnNpemUgKiB0aGlzLmR5bmFtaWNTdHJpZGUgKiA0KTtcbiAgICB0aGlzLmR5bmFtaWNCdWZmZXIgPSBnbC5jcmVhdGVCdWZmZXIoKTtcblxuICAgIGdsLmJpbmRCdWZmZXIoZ2wuQVJSQVlfQlVGRkVSLCB0aGlzLmR5bmFtaWNCdWZmZXIpO1xuICAgIGdsLmJ1ZmZlckRhdGEoZ2wuQVJSQVlfQlVGRkVSLCB0aGlzLmR5bmFtaWNEYXRhLCBnbC5EWU5BTUlDX0RSQVcpO1xuXG5cbiAgICAvLyBzdGF0aWMgLy9cbiAgICB2YXIgc3RhdGljT2Zmc2V0ID0gMDtcbiAgICB0aGlzLnN0YXRpY1N0cmlkZSA9IDA7XG5cbiAgICBmb3IgKGkgPSAwOyBpIDwgdGhpcy5zdGF0aWNQcm9wZXJ0aWVzLmxlbmd0aDsgaSsrKVxuICAgIHtcbiAgICAgICAgcHJvcGVydHkgPSB0aGlzLnN0YXRpY1Byb3BlcnRpZXNbaV07XG5cbiAgICAgICAgcHJvcGVydHkub2Zmc2V0ID0gc3RhdGljT2Zmc2V0O1xuICAgICAgICBzdGF0aWNPZmZzZXQgKz0gcHJvcGVydHkuc2l6ZTtcbiAgICAgICAgdGhpcy5zdGF0aWNTdHJpZGUgKz0gcHJvcGVydHkuc2l6ZTtcbiAgICB9XG5cbiAgICB0aGlzLnN0YXRpY0RhdGEgPSBuZXcgRmxvYXQzMkFycmF5KCB0aGlzLnNpemUgKiB0aGlzLnN0YXRpY1N0cmlkZSAqIDQpO1xuICAgIHRoaXMuc3RhdGljQnVmZmVyID0gZ2wuY3JlYXRlQnVmZmVyKCk7XG5cbiAgICBnbC5iaW5kQnVmZmVyKGdsLkFSUkFZX0JVRkZFUiwgdGhpcy5zdGF0aWNCdWZmZXIpO1xuICAgIGdsLmJ1ZmZlckRhdGEoZ2wuQVJSQVlfQlVGRkVSLCB0aGlzLnN0YXRpY0RhdGEsIGdsLkRZTkFNSUNfRFJBVyk7XG59O1xuXG4vKipcbiAqIFVwbG9hZHMgdGhlIGR5bmFtaWMgcHJvcGVydGllcy5cbiAqXG4gKi9cblBhcnRpY2xlQnVmZmVyLnByb3RvdHlwZS51cGxvYWREeW5hbWljID0gZnVuY3Rpb24oY2hpbGRyZW4sIHN0YXJ0SW5kZXgsIGFtb3VudClcbntcbiAgICB2YXIgZ2wgPSB0aGlzLmdsO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmR5bmFtaWNQcm9wZXJ0aWVzLmxlbmd0aDsgaSsrKVxuICAgIHtcbiAgICAgICAgdmFyIHByb3BlcnR5ID0gdGhpcy5keW5hbWljUHJvcGVydGllc1tpXTtcbiAgICAgICAgcHJvcGVydHkudXBsb2FkRnVuY3Rpb24oY2hpbGRyZW4sIHN0YXJ0SW5kZXgsIGFtb3VudCwgdGhpcy5keW5hbWljRGF0YSwgdGhpcy5keW5hbWljU3RyaWRlLCBwcm9wZXJ0eS5vZmZzZXQpO1xuICAgIH1cblxuICAgIGdsLmJpbmRCdWZmZXIoZ2wuQVJSQVlfQlVGRkVSLCB0aGlzLmR5bmFtaWNCdWZmZXIpO1xuICAgIGdsLmJ1ZmZlclN1YkRhdGEoZ2wuQVJSQVlfQlVGRkVSLCAwLCB0aGlzLmR5bmFtaWNEYXRhKTtcbn07XG5cbi8qKlxuICogVXBsb2FkcyB0aGUgc3RhdGljIHByb3BlcnRpZXMuXG4gKlxuICovXG5QYXJ0aWNsZUJ1ZmZlci5wcm90b3R5cGUudXBsb2FkU3RhdGljID0gZnVuY3Rpb24oY2hpbGRyZW4sIHN0YXJ0SW5kZXgsIGFtb3VudClcbntcbiAgICB2YXIgZ2wgPSB0aGlzLmdsO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLnN0YXRpY1Byb3BlcnRpZXMubGVuZ3RoOyBpKyspXG4gICAge1xuICAgICAgICB2YXIgcHJvcGVydHkgPSB0aGlzLnN0YXRpY1Byb3BlcnRpZXNbaV07XG4gICAgICAgIHByb3BlcnR5LnVwbG9hZEZ1bmN0aW9uKGNoaWxkcmVuLCBzdGFydEluZGV4LCBhbW91bnQsIHRoaXMuc3RhdGljRGF0YSwgdGhpcy5zdGF0aWNTdHJpZGUsIHByb3BlcnR5Lm9mZnNldCk7XG4gICAgfVxuXG4gICAgZ2wuYmluZEJ1ZmZlcihnbC5BUlJBWV9CVUZGRVIsIHRoaXMuc3RhdGljQnVmZmVyKTtcbiAgICBnbC5idWZmZXJTdWJEYXRhKGdsLkFSUkFZX0JVRkZFUiwgMCwgdGhpcy5zdGF0aWNEYXRhKTtcbn07XG5cbi8qKlxuICogQmluZHMgdGhlIGJ1ZmZlcnMgdG8gdGhlIEdQVVxuICpcbiAqL1xuUGFydGljbGVCdWZmZXIucHJvdG90eXBlLmJpbmQgPSBmdW5jdGlvbiAoKVxue1xuICAgIHZhciBnbCA9IHRoaXMuZ2w7XG4gICAgdmFyIGksIHByb3BlcnR5O1xuXG4gICAgZ2wuYmluZEJ1ZmZlcihnbC5BUlJBWV9CVUZGRVIsIHRoaXMuZHluYW1pY0J1ZmZlcik7XG5cbiAgICBmb3IgKGkgPSAwOyBpIDwgdGhpcy5keW5hbWljUHJvcGVydGllcy5sZW5ndGg7IGkrKylcbiAgICB7XG4gICAgICAgIHByb3BlcnR5ID0gdGhpcy5keW5hbWljUHJvcGVydGllc1tpXTtcbiAgICAgICAgZ2wudmVydGV4QXR0cmliUG9pbnRlcihwcm9wZXJ0eS5hdHRyaWJ1dGUsIHByb3BlcnR5LnNpemUsIGdsLkZMT0FULCBmYWxzZSwgdGhpcy5keW5hbWljU3RyaWRlICogNCwgcHJvcGVydHkub2Zmc2V0ICogNCk7XG4gICAgfVxuXG4gICAgZ2wuYmluZEJ1ZmZlcihnbC5BUlJBWV9CVUZGRVIsIHRoaXMuc3RhdGljQnVmZmVyKTtcblxuICAgIGZvciAoaSA9IDA7IGkgPCB0aGlzLnN0YXRpY1Byb3BlcnRpZXMubGVuZ3RoOyBpKyspXG4gICAge1xuICAgICAgICBwcm9wZXJ0eSA9IHRoaXMuc3RhdGljUHJvcGVydGllc1tpXTtcbiAgICAgICAgZ2wudmVydGV4QXR0cmliUG9pbnRlcihwcm9wZXJ0eS5hdHRyaWJ1dGUsIHByb3BlcnR5LnNpemUsIGdsLkZMT0FULCBmYWxzZSwgdGhpcy5zdGF0aWNTdHJpZGUgKiA0LCBwcm9wZXJ0eS5vZmZzZXQgKiA0KTtcbiAgICB9XG59O1xuXG4vKipcbiAqIERlc3Ryb3lzIHRoZSBQYXJ0aWNsZUJ1ZmZlci5cbiAqXG4gKi9cblBhcnRpY2xlQnVmZmVyLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLmR5bmFtaWNQcm9wZXJ0aWVzID0gbnVsbDtcbiAgICB0aGlzLmR5bmFtaWNEYXRhID0gbnVsbDtcbiAgICB0aGlzLmdsLmRlbGV0ZUJ1ZmZlcih0aGlzLmR5bmFtaWNCdWZmZXIpO1xuXG4gICAgdGhpcy5zdGF0aWNQcm9wZXJ0aWVzID0gbnVsbDtcbiAgICB0aGlzLnN0YXRpY0RhdGEgPSBudWxsO1xuICAgIHRoaXMuZ2wuZGVsZXRlQnVmZmVyKHRoaXMuc3RhdGljQnVmZmVyKTtcbn07XG4iLCJ2YXIgT2JqZWN0UmVuZGVyZXIgPSByZXF1aXJlKCcuLi8uLi9yZW5kZXJlcnMvd2ViZ2wvdXRpbHMvT2JqZWN0UmVuZGVyZXInKSxcbiAgICBXZWJHTFJlbmRlcmVyID0gcmVxdWlyZSgnLi4vLi4vcmVuZGVyZXJzL3dlYmdsL1dlYkdMUmVuZGVyZXInKSxcbiAgICBQYXJ0aWNsZVNoYWRlciA9IHJlcXVpcmUoJy4vUGFydGljbGVTaGFkZXInKSxcbiAgICBQYXJ0aWNsZUJ1ZmZlciA9IHJlcXVpcmUoJy4vUGFydGljbGVCdWZmZXInKSxcbiAgICBtYXRoICAgICAgICAgICAgPSByZXF1aXJlKCcuLi8uLi9tYXRoJyk7XG5cbi8qKlxuICogQGF1dGhvciBNYXQgR3JvdmVzXG4gKlxuICogQmlnIHRoYW5rcyB0byB0aGUgdmVyeSBjbGV2ZXIgTWF0dCBEZXNMYXVyaWVycyA8bWF0dGRlc2w+IGh0dHBzOi8vZ2l0aHViLmNvbS9tYXR0ZGVzbC9cbiAqIGZvciBjcmVhdGluZyB0aGUgb3JpZ2luYWwgcGl4aSB2ZXJzaW9uIVxuICogQWxzbyBhIHRoYW5rcyB0byBodHRwczovL2dpdGh1Yi5jb20vYmNoZXZhbGllciBmb3IgdHdlYWtpbmcgdGhlIHRpbnQgYW5kIGFscGhhIHNvIHRoYXQgdGhleSBub3cgc2hhcmUgNCBieXRlcyBvbiB0aGUgdmVydGV4IGJ1ZmZlclxuICpcbiAqIEhlYXZpbHkgaW5zcGlyZWQgYnkgTGliR0RYJ3MgUGFydGljbGVSZW5kZXJlcjpcbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS9saWJnZHgvbGliZ2R4L2Jsb2IvbWFzdGVyL2dkeC9zcmMvY29tL2JhZGxvZ2ljL2dkeC9ncmFwaGljcy9nMmQvUGFydGljbGVSZW5kZXJlci5qYXZhXG4gKi9cblxuLyoqXG4gKlxuICogQGNsYXNzXG4gKiBAcHJpdmF0ZVxuICogQG1lbWJlcm9mIFBJWElcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5XZWJHTFJlbmRlcmVyfSBUaGUgcmVuZGVyZXIgdGhpcyBzcHJpdGUgYmF0Y2ggd29ya3MgZm9yLlxuICovXG5mdW5jdGlvbiBQYXJ0aWNsZVJlbmRlcmVyKHJlbmRlcmVyKVxue1xuICAgIE9iamVjdFJlbmRlcmVyLmNhbGwodGhpcywgcmVuZGVyZXIpO1xuXG4gICAgLy8gNjU1MzUgaXMgbWF4IHZlcnRleCBpbmRleCBpbiB0aGUgaW5kZXggYnVmZmVyIChzZWUgUGFydGljbGVSZW5kZXJlcilcbiAgICAvLyBzbyBtYXggbnVtYmVyIG9mIHBhcnRpY2xlcyBpcyA2NTUzNiAvIDQgPSAxNjM4NFxuICAgIC8vIGFuZCBtYXggbnVtYmVyIG9mIGVsZW1lbnQgaW4gdGhlIGluZGV4IGJ1ZmZlciBpcyAxNjM4NCAqIDYgPSA5ODMwNFxuICAgIC8vIENyZWF0aW5nIGEgZnVsbCBpbmRleCBidWZmZXIsIG92ZXJoZWFkIGlzIDk4MzA0ICogMiA9IDE5NktvXG4gICAgdmFyIG51bUluZGljZXMgPSA5ODMwNDtcblxuICAgIC8qKlxuICAgICAqIEhvbGRzIHRoZSBpbmRpY2VzXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtVaW50MTZBcnJheX1cbiAgICAgKi9cbiAgICB0aGlzLmluZGljZXMgPSBuZXcgVWludDE2QXJyYXkobnVtSW5kaWNlcyk7XG5cbiAgICBmb3IgKHZhciBpPTAsIGo9MDsgaSA8IG51bUluZGljZXM7IGkgKz0gNiwgaiArPSA0KVxuICAgIHtcbiAgICAgICAgdGhpcy5pbmRpY2VzW2kgKyAwXSA9IGogKyAwO1xuICAgICAgICB0aGlzLmluZGljZXNbaSArIDFdID0gaiArIDE7XG4gICAgICAgIHRoaXMuaW5kaWNlc1tpICsgMl0gPSBqICsgMjtcbiAgICAgICAgdGhpcy5pbmRpY2VzW2kgKyAzXSA9IGogKyAwO1xuICAgICAgICB0aGlzLmluZGljZXNbaSArIDRdID0gaiArIDI7XG4gICAgICAgIHRoaXMuaW5kaWNlc1tpICsgNV0gPSBqICsgMztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGUgZGVmYXVsdCBzaGFkZXIgdGhhdCBpcyB1c2VkIGlmIGEgc3ByaXRlIGRvZXNuJ3QgaGF2ZSBhIG1vcmUgc3BlY2lmaWMgb25lLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5TaGFkZXJ9XG4gICAgICovXG4gICAgdGhpcy5zaGFkZXIgPSBudWxsO1xuXG4gICAgdGhpcy5pbmRleEJ1ZmZlciA9IG51bGw7XG5cbiAgICB0aGlzLnByb3BlcnRpZXMgPSBudWxsO1xuXG4gICAgdGhpcy50ZW1wTWF0cml4ID0gbmV3IG1hdGguTWF0cml4KCk7XG59XG5cblBhcnRpY2xlUmVuZGVyZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShPYmplY3RSZW5kZXJlci5wcm90b3R5cGUpO1xuUGFydGljbGVSZW5kZXJlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBQYXJ0aWNsZVJlbmRlcmVyO1xubW9kdWxlLmV4cG9ydHMgPSBQYXJ0aWNsZVJlbmRlcmVyO1xuXG5XZWJHTFJlbmRlcmVyLnJlZ2lzdGVyUGx1Z2luKCdwYXJ0aWNsZScsIFBhcnRpY2xlUmVuZGVyZXIpO1xuXG4vKipcbiAqIFdoZW4gdGhlcmUgaXMgYSBXZWJHTCBjb250ZXh0IGNoYW5nZVxuICpcbiAqIEBwcml2YXRlXG4gKi9cblBhcnRpY2xlUmVuZGVyZXIucHJvdG90eXBlLm9uQ29udGV4dENoYW5nZSA9IGZ1bmN0aW9uICgpXG57XG4gICAgdmFyIGdsID0gdGhpcy5yZW5kZXJlci5nbDtcblxuICAgIC8vIHNldHVwIGRlZmF1bHQgc2hhZGVyXG4gICAgdGhpcy5zaGFkZXIgPSBuZXcgUGFydGljbGVTaGFkZXIodGhpcy5yZW5kZXJlci5zaGFkZXJNYW5hZ2VyKTtcblxuICAgIHRoaXMuaW5kZXhCdWZmZXIgPSBnbC5jcmVhdGVCdWZmZXIoKTtcblxuICAgIC8vIDY1NTM1IGlzIG1heCBpbmRleCwgc28gNjU1MzUgLyA2ID0gMTA5MjIuXG5cbiAgICAvL3VwbG9hZCB0aGUgaW5kZXggZGF0YVxuICAgIGdsLmJpbmRCdWZmZXIoZ2wuRUxFTUVOVF9BUlJBWV9CVUZGRVIsIHRoaXMuaW5kZXhCdWZmZXIpO1xuICAgIGdsLmJ1ZmZlckRhdGEoZ2wuRUxFTUVOVF9BUlJBWV9CVUZGRVIsIHRoaXMuaW5kaWNlcywgZ2wuU1RBVElDX0RSQVcpO1xuXG4gICAgdGhpcy5wcm9wZXJ0aWVzID0gW1xuICAgICAgICAvLyB2ZXJ0aWNlc0RhdGFcbiAgICAgICAge1xuICAgICAgICAgICAgYXR0cmlidXRlOnRoaXMuc2hhZGVyLmF0dHJpYnV0ZXMuYVZlcnRleFBvc2l0aW9uLFxuICAgICAgICAgICAgc2l6ZToyLFxuICAgICAgICAgICAgdXBsb2FkRnVuY3Rpb246dGhpcy51cGxvYWRWZXJ0aWNlcyxcbiAgICAgICAgICAgIG9mZnNldDowXG4gICAgICAgIH0sXG4gICAgICAgIC8vIHBvc2l0aW9uRGF0YVxuICAgICAgICB7XG4gICAgICAgICAgICBhdHRyaWJ1dGU6dGhpcy5zaGFkZXIuYXR0cmlidXRlcy5hUG9zaXRpb25Db29yZCxcbiAgICAgICAgICAgIHNpemU6MixcbiAgICAgICAgICAgIHVwbG9hZEZ1bmN0aW9uOnRoaXMudXBsb2FkUG9zaXRpb24sXG4gICAgICAgICAgICBvZmZzZXQ6MFxuICAgICAgICB9LFxuICAgICAgICAvLyByb3RhdGlvbkRhdGFcbiAgICAgICAge1xuICAgICAgICAgICAgYXR0cmlidXRlOnRoaXMuc2hhZGVyLmF0dHJpYnV0ZXMuYVJvdGF0aW9uLFxuICAgICAgICAgICAgc2l6ZToxLFxuICAgICAgICAgICAgdXBsb2FkRnVuY3Rpb246dGhpcy51cGxvYWRSb3RhdGlvbixcbiAgICAgICAgICAgIG9mZnNldDowXG4gICAgICAgIH0sXG4gICAgICAgIC8vIHV2c0RhdGFcbiAgICAgICAge1xuICAgICAgICAgICAgYXR0cmlidXRlOnRoaXMuc2hhZGVyLmF0dHJpYnV0ZXMuYVRleHR1cmVDb29yZCxcbiAgICAgICAgICAgIHNpemU6MixcbiAgICAgICAgICAgIHVwbG9hZEZ1bmN0aW9uOnRoaXMudXBsb2FkVXZzLFxuICAgICAgICAgICAgb2Zmc2V0OjBcbiAgICAgICAgfSxcbiAgICAgICAgLy8gYWxwaGFEYXRhXG4gICAgICAgIHtcbiAgICAgICAgICAgIGF0dHJpYnV0ZTp0aGlzLnNoYWRlci5hdHRyaWJ1dGVzLmFDb2xvcixcbiAgICAgICAgICAgIHNpemU6MSxcbiAgICAgICAgICAgIHVwbG9hZEZ1bmN0aW9uOnRoaXMudXBsb2FkQWxwaGEsXG4gICAgICAgICAgICBvZmZzZXQ6MFxuICAgICAgICB9XG4gICAgXTtcbn07XG5cbi8qKlxuICogU3RhcnRzIGEgbmV3IHBhcnRpY2xlIGJhdGNoLlxuICpcbiAqL1xuUGFydGljbGVSZW5kZXJlci5wcm90b3R5cGUuc3RhcnQgPSBmdW5jdGlvbiAoKVxue1xuICAgIHZhciBnbCA9IHRoaXMucmVuZGVyZXIuZ2w7XG5cbiAgICAvLyBiaW5kIHRoZSBtYWluIHRleHR1cmVcbiAgICBnbC5hY3RpdmVUZXh0dXJlKGdsLlRFWFRVUkUwKTtcblxuICAgIC8vIGJpbmQgdGhlIGJ1ZmZlcnNcblxuICAgIGdsLmJpbmRCdWZmZXIoZ2wuRUxFTUVOVF9BUlJBWV9CVUZGRVIsIHRoaXMuaW5kZXhCdWZmZXIpO1xuXG4gICAgdmFyIHNoYWRlciA9IHRoaXMuc2hhZGVyO1xuXG4gICAgdGhpcy5yZW5kZXJlci5zaGFkZXJNYW5hZ2VyLnNldFNoYWRlcihzaGFkZXIpO1xufTtcblxuXG4vKipcbiAqIFJlbmRlcnMgdGhlIHBhcnRpY2xlIGNvbnRhaW5lciBvYmplY3QuXG4gKlxuICogQHBhcmFtIGNvbnRhaW5lciB7UElYSS5QYXJ0aWNsZUNvbnRhaW5lcn0gVGhlIGNvbnRhaW5lciB0byByZW5kZXIgdXNpbmcgdGhpcyBQYXJ0aWNsZVJlbmRlcmVyXG4gKi9cblBhcnRpY2xlUmVuZGVyZXIucHJvdG90eXBlLnJlbmRlciA9IGZ1bmN0aW9uIChjb250YWluZXIpXG57XG4gICAgdmFyIGNoaWxkcmVuID0gY29udGFpbmVyLmNoaWxkcmVuLFxuICAgICAgICB0b3RhbENoaWxkcmVuID0gY2hpbGRyZW4ubGVuZ3RoLFxuICAgICAgICBtYXhTaXplID0gY29udGFpbmVyLl9tYXhTaXplLFxuICAgICAgICBiYXRjaFNpemUgPSBjb250YWluZXIuX2JhdGNoU2l6ZTtcblxuICAgIGlmKHRvdGFsQ2hpbGRyZW4gPT09IDApXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIGVsc2UgaWYodG90YWxDaGlsZHJlbiA+IG1heFNpemUpXG4gICAge1xuICAgICAgICB0b3RhbENoaWxkcmVuID0gbWF4U2l6ZTtcbiAgICB9XG5cbiAgICBpZighY29udGFpbmVyLl9idWZmZXJzKVxuICAgIHtcbiAgICAgICAgY29udGFpbmVyLl9idWZmZXJzID0gdGhpcy5nZW5lcmF0ZUJ1ZmZlcnMoIGNvbnRhaW5lciApO1xuICAgIH1cblxuICAgIC8vIGlmIHRoZSB1dnMgaGF2ZSBub3QgdXBkYXRlZCB0aGVuIG5vIHBvaW50IHJlbmRlcmluZyBqdXN0IHlldCFcbiAgICB0aGlzLnJlbmRlcmVyLmJsZW5kTW9kZU1hbmFnZXIuc2V0QmxlbmRNb2RlKGNvbnRhaW5lci5ibGVuZE1vZGUpO1xuXG4gICAgdmFyIGdsID0gdGhpcy5yZW5kZXJlci5nbDtcblxuICAgIHZhciBtID0gIGNvbnRhaW5lci53b3JsZFRyYW5zZm9ybS5jb3B5KCB0aGlzLnRlbXBNYXRyaXggKTtcbiAgICBtLnByZXBlbmQoIHRoaXMucmVuZGVyZXIuY3VycmVudFJlbmRlclRhcmdldC5wcm9qZWN0aW9uTWF0cml4ICk7XG4gICAgZ2wudW5pZm9ybU1hdHJpeDNmdih0aGlzLnNoYWRlci51bmlmb3Jtcy5wcm9qZWN0aW9uTWF0cml4Ll9sb2NhdGlvbiwgZmFsc2UsIG0udG9BcnJheSh0cnVlKSk7XG4gICAgZ2wudW5pZm9ybTFmKHRoaXMuc2hhZGVyLnVuaWZvcm1zLnVBbHBoYS5fbG9jYXRpb24sIGNvbnRhaW5lci53b3JsZEFscGhhKTtcblxuXG4gICAgLy8gbWFrZSBzdXJlIHRoZSB0ZXh0dXJlIGlzIGJvdW5kLi5cbiAgICB2YXIgYmFzZVRleHR1cmUgPSBjaGlsZHJlblswXS5fdGV4dHVyZS5iYXNlVGV4dHVyZTtcblxuICAgIGlmICghYmFzZVRleHR1cmUuX2dsVGV4dHVyZXNbZ2wuaWRdKVxuICAgIHtcbiAgICAgICAgLy8gaWYgdGhlIHRleHR1cmUgaGFzIG5vdCB1cGRhdGVkIHRoZW4gbGV0cyBub3QgdXBsb2FkIGFueSBzdGF0aWMgcHJvcGVydGllc1xuICAgICAgICBpZighdGhpcy5yZW5kZXJlci51cGRhdGVUZXh0dXJlKGJhc2VUZXh0dXJlKSlcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYoIWNvbnRhaW5lci5fcHJvcGVydGllc1swXSB8fCAhY29udGFpbmVyLl9wcm9wZXJ0aWVzWzNdKVxuICAgICAgICB7XG4gICAgICAgICAgICBjb250YWluZXIuX2J1ZmZlclRvVXBkYXRlID0gMDtcbiAgICAgICAgfVxuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICBnbC5iaW5kVGV4dHVyZShnbC5URVhUVVJFXzJELCBiYXNlVGV4dHVyZS5fZ2xUZXh0dXJlc1tnbC5pZF0pO1xuICAgIH1cblxuICAgIC8vIG5vdyBsZXRzIHVwbG9hZCBhbmQgcmVuZGVyIHRoZSBidWZmZXJzLi5cbiAgICBmb3IgKHZhciBpID0gMCwgaiA9IDA7IGkgPCB0b3RhbENoaWxkcmVuOyBpICs9IGJhdGNoU2l6ZSwgaiArPSAxKVxuICAgIHtcbiAgICAgICAgdmFyIGFtb3VudCA9ICggdG90YWxDaGlsZHJlbiAtIGkpO1xuICAgICAgICBpZihhbW91bnQgPiBiYXRjaFNpemUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGFtb3VudCA9IGJhdGNoU2l6ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBidWZmZXIgPSBjb250YWluZXIuX2J1ZmZlcnNbal07XG5cbiAgICAgICAgLy8gd2UgYWx3YXlzIHVwbG9hZCB0aGUgZHluYW1pY1xuICAgICAgICBidWZmZXIudXBsb2FkRHluYW1pYyhjaGlsZHJlbiwgaSwgYW1vdW50KTtcblxuICAgICAgICAvLyB3ZSBvbmx5IHVwbG9hZCB0aGUgc3RhdGljIGNvbnRlbnQgd2hlbiB3ZSBoYXZlIHRvIVxuICAgICAgICBpZihjb250YWluZXIuX2J1ZmZlclRvVXBkYXRlID09PSBqKVxuICAgICAgICB7XG4gICAgICAgICAgICBidWZmZXIudXBsb2FkU3RhdGljKGNoaWxkcmVuLCBpLCBhbW91bnQpO1xuICAgICAgICAgICAgY29udGFpbmVyLl9idWZmZXJUb1VwZGF0ZSA9IGogKyAxO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gYmluZCB0aGUgYnVmZmVyXG4gICAgICAgIGJ1ZmZlci5iaW5kKCB0aGlzLnNoYWRlciApO1xuXG4gICAgICAgICAvLyBub3cgZHJhdyB0aG9zZSBzdWNrYXMhXG4gICAgICAgIGdsLmRyYXdFbGVtZW50cyhnbC5UUklBTkdMRVMsIGFtb3VudCAqIDYsIGdsLlVOU0lHTkVEX1NIT1JULCAwKTtcbiAgICAgICAgdGhpcy5yZW5kZXJlci5kcmF3Q291bnQrKztcbiAgICB9XG59O1xuXG4vKipcbiAqIENyZWF0ZXMgb25lIHBhcnRpY2xlIGJ1ZmZlciBmb3IgZWFjaCBjaGlsZCBpbiB0aGUgY29udGFpbmVyIHdlIHdhbnQgdG8gcmVuZGVyIGFuZCB1cGRhdGVzIGludGVybmFsIHByb3BlcnRpZXNcbiAqXG4gKiBAcGFyYW0gY29udGFpbmVyIHtQSVhJLlBhcnRpY2xlQ29udGFpbmVyfSBUaGUgY29udGFpbmVyIHRvIHJlbmRlciB1c2luZyB0aGlzIFBhcnRpY2xlUmVuZGVyZXJcbiAqL1xuUGFydGljbGVSZW5kZXJlci5wcm90b3R5cGUuZ2VuZXJhdGVCdWZmZXJzID0gZnVuY3Rpb24gKGNvbnRhaW5lcilcbntcbiAgICB2YXIgZ2wgPSB0aGlzLnJlbmRlcmVyLmdsLFxuICAgICAgICBidWZmZXJzID0gW10sXG4gICAgICAgIHNpemUgPSBjb250YWluZXIuX21heFNpemUsXG4gICAgICAgIGJhdGNoU2l6ZSA9IGNvbnRhaW5lci5fYmF0Y2hTaXplLFxuICAgICAgICBkeW5hbWljUHJvcGVydHlGbGFncyA9IGNvbnRhaW5lci5fcHJvcGVydGllcyxcbiAgICAgICAgaTtcblxuICAgIGZvciAoaSA9IDA7IGkgPCBzaXplOyBpICs9IGJhdGNoU2l6ZSlcbiAgICB7XG4gICAgICAgIGJ1ZmZlcnMucHVzaChuZXcgUGFydGljbGVCdWZmZXIoZ2wsIHRoaXMucHJvcGVydGllcywgZHluYW1pY1Byb3BlcnR5RmxhZ3MsIGJhdGNoU2l6ZSkpO1xuICAgIH1cblxuICAgIHJldHVybiBidWZmZXJzO1xufTtcblxuLyoqXG4gKiBVcGxvYWRzIHRoZSB2ZXJ0aWNpZXMuXG4gKlxuICogQHBhcmFtIGNoaWxkcmVuIHtQSVhJLkRpc3BsYXlPYmplY3RbXX0gdGhlIGFycmF5IG9mIGRpc3BsYXkgb2JqZWN0cyB0byByZW5kZXJcbiAqIEBwYXJhbSBzdGFydEluZGV4IHtudW1iZXJ9IHRoZSBpbmRleCB0byBzdGFydCBmcm9tIGluIHRoZSBjaGlsZHJlbiBhcnJheVxuICogQHBhcmFtIGFtb3VudCB7bnVtYmVyfSB0aGUgYW1vdW50IG9mIGNoaWxkcmVuIHRoYXQgd2lsbCBoYXZlIHRoZWlyIHZlcnRpY2VzIHVwbG9hZGVkXG4gKiBAcGFyYW0gYXJyYXkge251bWJlcltdfVxuICogQHBhcmFtIHN0cmlkZSB7bnVtYmVyfVxuICogQHBhcmFtIG9mZnNldCB7bnVtYmVyfVxuICovXG5QYXJ0aWNsZVJlbmRlcmVyLnByb3RvdHlwZS51cGxvYWRWZXJ0aWNlcyA9IGZ1bmN0aW9uIChjaGlsZHJlbiwgc3RhcnRJbmRleCwgYW1vdW50LCBhcnJheSwgc3RyaWRlLCBvZmZzZXQpXG57XG4gICAgdmFyIHNwcml0ZSxcbiAgICAgICAgdGV4dHVyZSxcbiAgICAgICAgdHJpbSxcbiAgICAgICAgc3gsXG4gICAgICAgIHN5LFxuICAgICAgICB3MCwgdzEsIGgwLCBoMTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYW1vdW50OyBpKyspIHtcblxuICAgICAgICBzcHJpdGUgPSBjaGlsZHJlbltzdGFydEluZGV4ICsgaV07XG4gICAgICAgIHRleHR1cmUgPSBzcHJpdGUuX3RleHR1cmU7XG4gICAgICAgIHN4ID0gc3ByaXRlLnNjYWxlLng7XG4gICAgICAgIHN5ID0gc3ByaXRlLnNjYWxlLnk7XG5cbiAgICAgICAgaWYgKHRleHR1cmUudHJpbSlcbiAgICAgICAge1xuICAgICAgICAgICAgLy8gaWYgdGhlIHNwcml0ZSBpcyB0cmltbWVkIHRoZW4gd2UgbmVlZCB0byBhZGQgdGhlIGV4dHJhIHNwYWNlIGJlZm9yZSB0cmFuc2Zvcm1pbmcgdGhlIHNwcml0ZSBjb29yZHMuLlxuICAgICAgICAgICAgdHJpbSA9IHRleHR1cmUudHJpbTtcblxuICAgICAgICAgICAgdzEgPSB0cmltLnggLSBzcHJpdGUuYW5jaG9yLnggKiB0cmltLndpZHRoO1xuICAgICAgICAgICAgdzAgPSB3MSArIHRleHR1cmUuY3JvcC53aWR0aDtcblxuICAgICAgICAgICAgaDEgPSB0cmltLnkgLSBzcHJpdGUuYW5jaG9yLnkgKiB0cmltLmhlaWdodDtcbiAgICAgICAgICAgIGgwID0gaDEgKyB0ZXh0dXJlLmNyb3AuaGVpZ2h0O1xuICAgICAgICB9XG4gICAgICAgIGVsc2VcbiAgICAgICAge1xuICAgICAgICAgICAgdzAgPSAodGV4dHVyZS5fZnJhbWUud2lkdGggKSAqICgxLXNwcml0ZS5hbmNob3IueCk7XG4gICAgICAgICAgICB3MSA9ICh0ZXh0dXJlLl9mcmFtZS53aWR0aCApICogLXNwcml0ZS5hbmNob3IueDtcblxuICAgICAgICAgICAgaDAgPSB0ZXh0dXJlLl9mcmFtZS5oZWlnaHQgKiAoMS1zcHJpdGUuYW5jaG9yLnkpO1xuICAgICAgICAgICAgaDEgPSB0ZXh0dXJlLl9mcmFtZS5oZWlnaHQgKiAtc3ByaXRlLmFuY2hvci55O1xuICAgICAgICB9XG5cbiAgICAgICAgYXJyYXlbb2Zmc2V0XSA9IHcxICogc3g7XG4gICAgICAgIGFycmF5W29mZnNldCArIDFdID0gaDEgKiBzeTtcblxuICAgICAgICBhcnJheVtvZmZzZXQgKyBzdHJpZGVdID0gdzAgKiBzeDtcbiAgICAgICAgYXJyYXlbb2Zmc2V0ICsgc3RyaWRlICsgMV0gPSBoMSAqIHN5O1xuXG4gICAgICAgIGFycmF5W29mZnNldCArIHN0cmlkZSAqIDJdID0gdzAgKiBzeDtcbiAgICAgICAgYXJyYXlbb2Zmc2V0ICsgc3RyaWRlICogMiArIDFdID0gaDAgKiBzeTtcblxuICAgICAgICBhcnJheVtvZmZzZXQgKyBzdHJpZGUgKiAzXSA9IHcxICogc3g7XG4gICAgICAgIGFycmF5W29mZnNldCArIHN0cmlkZSAqIDMgKyAxXSA9IGgwICogc3k7XG5cbiAgICAgICAgb2Zmc2V0ICs9IHN0cmlkZSAqIDQ7XG4gICAgfVxuXG59O1xuXG4vKipcbiAqXG4gKiBAcGFyYW0gY2hpbGRyZW4ge1BJWEkuRGlzcGxheU9iamVjdFtdfSB0aGUgYXJyYXkgb2YgZGlzcGxheSBvYmplY3RzIHRvIHJlbmRlclxuICogQHBhcmFtIHN0YXJ0SW5kZXgge251bWJlcn0gdGhlIGluZGV4IHRvIHN0YXJ0IGZyb20gaW4gdGhlIGNoaWxkcmVuIGFycmF5XG4gKiBAcGFyYW0gYW1vdW50IHtudW1iZXJ9IHRoZSBhbW91bnQgb2YgY2hpbGRyZW4gdGhhdCB3aWxsIGhhdmUgdGhlaXIgcG9zaXRpb25zIHVwbG9hZGVkXG4gKiBAcGFyYW0gYXJyYXkge251bWJlcltdfVxuICogQHBhcmFtIHN0cmlkZSB7bnVtYmVyfVxuICogQHBhcmFtIG9mZnNldCB7bnVtYmVyfVxuICovXG5QYXJ0aWNsZVJlbmRlcmVyLnByb3RvdHlwZS51cGxvYWRQb3NpdGlvbiA9IGZ1bmN0aW9uIChjaGlsZHJlbixzdGFydEluZGV4LCBhbW91bnQsIGFycmF5LCBzdHJpZGUsIG9mZnNldClcbntcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFtb3VudDsgaSsrKVxuICAgIHtcbiAgICAgICAgdmFyIHNwcml0ZVBvc2l0aW9uID0gY2hpbGRyZW5bc3RhcnRJbmRleCArIGldLnBvc2l0aW9uO1xuXG4gICAgICAgIGFycmF5W29mZnNldF0gPSBzcHJpdGVQb3NpdGlvbi54O1xuICAgICAgICBhcnJheVtvZmZzZXQgKyAxXSA9IHNwcml0ZVBvc2l0aW9uLnk7XG5cbiAgICAgICAgYXJyYXlbb2Zmc2V0ICsgc3RyaWRlXSA9IHNwcml0ZVBvc2l0aW9uLng7XG4gICAgICAgIGFycmF5W29mZnNldCArIHN0cmlkZSArIDFdID0gc3ByaXRlUG9zaXRpb24ueTtcblxuICAgICAgICBhcnJheVtvZmZzZXQgKyBzdHJpZGUgKiAyXSA9IHNwcml0ZVBvc2l0aW9uLng7XG4gICAgICAgIGFycmF5W29mZnNldCArIHN0cmlkZSAqIDIgKyAxXSA9IHNwcml0ZVBvc2l0aW9uLnk7XG5cbiAgICAgICAgYXJyYXlbb2Zmc2V0ICsgc3RyaWRlICogM10gPSBzcHJpdGVQb3NpdGlvbi54O1xuICAgICAgICBhcnJheVtvZmZzZXQgKyBzdHJpZGUgKiAzICsgMV0gPSBzcHJpdGVQb3NpdGlvbi55O1xuXG4gICAgICAgIG9mZnNldCArPSBzdHJpZGUgKiA0O1xuICAgIH1cblxufTtcblxuLyoqXG4gKlxuICogQHBhcmFtIGNoaWxkcmVuIHtQSVhJLkRpc3BsYXlPYmplY3RbXX0gdGhlIGFycmF5IG9mIGRpc3BsYXkgb2JqZWN0cyB0byByZW5kZXJcbiAqIEBwYXJhbSBzdGFydEluZGV4IHtudW1iZXJ9IHRoZSBpbmRleCB0byBzdGFydCBmcm9tIGluIHRoZSBjaGlsZHJlbiBhcnJheVxuICogQHBhcmFtIGFtb3VudCB7bnVtYmVyfSB0aGUgYW1vdW50IG9mIGNoaWxkcmVuIHRoYXQgd2lsbCBoYXZlIHRoZWlyIHJvdGF0aW9uIHVwbG9hZGVkXG4gKiBAcGFyYW0gYXJyYXkge251bWJlcltdfVxuICogQHBhcmFtIHN0cmlkZSB7bnVtYmVyfVxuICogQHBhcmFtIG9mZnNldCB7bnVtYmVyfVxuICovXG5QYXJ0aWNsZVJlbmRlcmVyLnByb3RvdHlwZS51cGxvYWRSb3RhdGlvbiA9IGZ1bmN0aW9uIChjaGlsZHJlbixzdGFydEluZGV4LCBhbW91bnQsIGFycmF5LCBzdHJpZGUsIG9mZnNldClcbntcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFtb3VudDsgaSsrKVxuICAgIHtcbiAgICAgICAgdmFyIHNwcml0ZVJvdGF0aW9uID0gY2hpbGRyZW5bc3RhcnRJbmRleCArIGldLnJvdGF0aW9uO1xuXG5cbiAgICAgICAgYXJyYXlbb2Zmc2V0XSA9IHNwcml0ZVJvdGF0aW9uO1xuICAgICAgICBhcnJheVtvZmZzZXQgKyBzdHJpZGVdID0gc3ByaXRlUm90YXRpb247XG4gICAgICAgIGFycmF5W29mZnNldCArIHN0cmlkZSAqIDJdID0gc3ByaXRlUm90YXRpb247XG4gICAgICAgIGFycmF5W29mZnNldCArIHN0cmlkZSAqIDNdID0gc3ByaXRlUm90YXRpb247XG5cbiAgICAgICAgb2Zmc2V0ICs9IHN0cmlkZSAqIDQ7XG4gICAgfVxufTtcblxuLyoqXG4gKlxuICogQHBhcmFtIGNoaWxkcmVuIHtQSVhJLkRpc3BsYXlPYmplY3RbXX0gdGhlIGFycmF5IG9mIGRpc3BsYXkgb2JqZWN0cyB0byByZW5kZXJcbiAqIEBwYXJhbSBzdGFydEluZGV4IHtudW1iZXJ9IHRoZSBpbmRleCB0byBzdGFydCBmcm9tIGluIHRoZSBjaGlsZHJlbiBhcnJheVxuICogQHBhcmFtIGFtb3VudCB7bnVtYmVyfSB0aGUgYW1vdW50IG9mIGNoaWxkcmVuIHRoYXQgd2lsbCBoYXZlIHRoZWlyIFV2cyB1cGxvYWRlZFxuICogQHBhcmFtIGFycmF5IHtudW1iZXJbXX1cbiAqIEBwYXJhbSBzdHJpZGUge251bWJlcn1cbiAqIEBwYXJhbSBvZmZzZXQge251bWJlcn1cbiAqL1xuUGFydGljbGVSZW5kZXJlci5wcm90b3R5cGUudXBsb2FkVXZzID0gZnVuY3Rpb24gKGNoaWxkcmVuLHN0YXJ0SW5kZXgsIGFtb3VudCwgYXJyYXksIHN0cmlkZSwgb2Zmc2V0KVxue1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYW1vdW50OyBpKyspXG4gICAge1xuICAgICAgICB2YXIgdGV4dHVyZVV2cyA9IGNoaWxkcmVuW3N0YXJ0SW5kZXggKyBpXS5fdGV4dHVyZS5fdXZzO1xuXG4gICAgICAgIGlmICh0ZXh0dXJlVXZzKVxuICAgICAgICB7XG4gICAgICAgICAgICBhcnJheVtvZmZzZXRdID0gdGV4dHVyZVV2cy54MDtcbiAgICAgICAgICAgIGFycmF5W29mZnNldCArIDFdID0gdGV4dHVyZVV2cy55MDtcblxuICAgICAgICAgICAgYXJyYXlbb2Zmc2V0ICsgc3RyaWRlXSA9IHRleHR1cmVVdnMueDE7XG4gICAgICAgICAgICBhcnJheVtvZmZzZXQgKyBzdHJpZGUgKyAxXSA9IHRleHR1cmVVdnMueTE7XG5cbiAgICAgICAgICAgIGFycmF5W29mZnNldCArIHN0cmlkZSAqIDJdID0gdGV4dHVyZVV2cy54MjtcbiAgICAgICAgICAgIGFycmF5W29mZnNldCArIHN0cmlkZSAqIDIgKyAxXSA9IHRleHR1cmVVdnMueTI7XG5cbiAgICAgICAgICAgIGFycmF5W29mZnNldCArIHN0cmlkZSAqIDNdID0gdGV4dHVyZVV2cy54MztcbiAgICAgICAgICAgIGFycmF5W29mZnNldCArIHN0cmlkZSAqIDMgKyAxXSA9IHRleHR1cmVVdnMueTM7XG5cbiAgICAgICAgICAgIG9mZnNldCArPSBzdHJpZGUgKiA0O1xuICAgICAgICB9XG4gICAgICAgIGVsc2VcbiAgICAgICAge1xuICAgICAgICAgICAgLy9UT0RPIHlvdSBrbm93IHRoaXMgY2FuIGJlIGVhc2llciFcbiAgICAgICAgICAgIGFycmF5W29mZnNldF0gPSAwO1xuICAgICAgICAgICAgYXJyYXlbb2Zmc2V0ICsgMV0gPSAwO1xuXG4gICAgICAgICAgICBhcnJheVtvZmZzZXQgKyBzdHJpZGVdID0gMDtcbiAgICAgICAgICAgIGFycmF5W29mZnNldCArIHN0cmlkZSArIDFdID0gMDtcblxuICAgICAgICAgICAgYXJyYXlbb2Zmc2V0ICsgc3RyaWRlICogMl0gPSAwO1xuICAgICAgICAgICAgYXJyYXlbb2Zmc2V0ICsgc3RyaWRlICogMiArIDFdID0gMDtcblxuICAgICAgICAgICAgYXJyYXlbb2Zmc2V0ICsgc3RyaWRlICogM10gPSAwO1xuICAgICAgICAgICAgYXJyYXlbb2Zmc2V0ICsgc3RyaWRlICogMyArIDFdID0gMDtcblxuICAgICAgICAgICAgb2Zmc2V0ICs9IHN0cmlkZSAqIDQ7XG4gICAgICAgIH1cbiAgICB9XG59O1xuXG4vKipcbiAqXG4gKiBAcGFyYW0gY2hpbGRyZW4ge1BJWEkuRGlzcGxheU9iamVjdFtdfSB0aGUgYXJyYXkgb2YgZGlzcGxheSBvYmplY3RzIHRvIHJlbmRlclxuICogQHBhcmFtIHN0YXJ0SW5kZXgge251bWJlcn0gdGhlIGluZGV4IHRvIHN0YXJ0IGZyb20gaW4gdGhlIGNoaWxkcmVuIGFycmF5XG4gKiBAcGFyYW0gYW1vdW50IHtudW1iZXJ9IHRoZSBhbW91bnQgb2YgY2hpbGRyZW4gdGhhdCB3aWxsIGhhdmUgdGhlaXIgYWxwaGEgdXBsb2FkZWRcbiAqIEBwYXJhbSBhcnJheSB7bnVtYmVyW119XG4gKiBAcGFyYW0gc3RyaWRlIHtudW1iZXJ9XG4gKiBAcGFyYW0gb2Zmc2V0IHtudW1iZXJ9XG4gKi9cblBhcnRpY2xlUmVuZGVyZXIucHJvdG90eXBlLnVwbG9hZEFscGhhID0gZnVuY3Rpb24gKGNoaWxkcmVuLHN0YXJ0SW5kZXgsIGFtb3VudCwgYXJyYXksIHN0cmlkZSwgb2Zmc2V0KVxue1xuICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFtb3VudDsgaSsrKVxuICAgICB7XG4gICAgICAgIHZhciBzcHJpdGVBbHBoYSA9IGNoaWxkcmVuW3N0YXJ0SW5kZXggKyBpXS5hbHBoYTtcblxuICAgICAgICBhcnJheVtvZmZzZXRdID0gc3ByaXRlQWxwaGE7XG4gICAgICAgIGFycmF5W29mZnNldCArIHN0cmlkZV0gPSBzcHJpdGVBbHBoYTtcbiAgICAgICAgYXJyYXlbb2Zmc2V0ICsgc3RyaWRlICogMl0gPSBzcHJpdGVBbHBoYTtcbiAgICAgICAgYXJyYXlbb2Zmc2V0ICsgc3RyaWRlICogM10gPSBzcHJpdGVBbHBoYTtcblxuICAgICAgICBvZmZzZXQgKz0gc3RyaWRlICogNDtcbiAgICB9XG59O1xuXG5cbi8qKlxuICogRGVzdHJveXMgdGhlIFBhcnRpY2xlUmVuZGVyZXIuXG4gKlxuICovXG5QYXJ0aWNsZVJlbmRlcmVyLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKClcbntcbiAgICBpZiAodGhpcy5yZW5kZXJlci5nbCkge1xuICAgICAgICB0aGlzLnJlbmRlcmVyLmdsLmRlbGV0ZUJ1ZmZlcih0aGlzLmluZGV4QnVmZmVyKTtcbiAgICB9XG5cbiAgICBPYmplY3RSZW5kZXJlci5wcm90b3R5cGUuZGVzdHJveS5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuXG4gICAgdGhpcy5zaGFkZXIuZGVzdHJveSgpO1xuXG4gICAgdGhpcy5pbmRpY2VzID0gbnVsbDtcbiAgICB0aGlzLnRlbXBNYXRyaXggPSBudWxsO1xufTtcbiIsInZhciBUZXh0dXJlU2hhZGVyID0gcmVxdWlyZSgnLi4vLi4vcmVuZGVyZXJzL3dlYmdsL3NoYWRlcnMvVGV4dHVyZVNoYWRlcicpO1xuXG4vKipcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5UZXh0dXJlU2hhZGVyXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIHNoYWRlck1hbmFnZXIge1NoYWRlck1hbmFnZXJ9IFRoZSB3ZWJnbCBzaGFkZXIgbWFuYWdlciB0aGlzIHNoYWRlciB3b3JrcyBmb3IuXG4gKi9cbmZ1bmN0aW9uIFBhcnRpY2xlU2hhZGVyKHNoYWRlck1hbmFnZXIpXG57XG4gICAgVGV4dHVyZVNoYWRlci5jYWxsKHRoaXMsXG4gICAgICAgIHNoYWRlck1hbmFnZXIsXG4gICAgICAgIC8vIHZlcnRleCBzaGFkZXJcbiAgICAgICAgW1xuICAgICAgICAgICAgJ2F0dHJpYnV0ZSB2ZWMyIGFWZXJ0ZXhQb3NpdGlvbjsnLFxuICAgICAgICAgICAgJ2F0dHJpYnV0ZSB2ZWMyIGFUZXh0dXJlQ29vcmQ7JyxcbiAgICAgICAgICAgICdhdHRyaWJ1dGUgZmxvYXQgYUNvbG9yOycsXG5cbiAgICAgICAgICAgICdhdHRyaWJ1dGUgdmVjMiBhUG9zaXRpb25Db29yZDsnLFxuICAgICAgICAgICAgJ2F0dHJpYnV0ZSB2ZWMyIGFTY2FsZTsnLFxuICAgICAgICAgICAgJ2F0dHJpYnV0ZSBmbG9hdCBhUm90YXRpb247JyxcblxuICAgICAgICAgICAgJ3VuaWZvcm0gbWF0MyBwcm9qZWN0aW9uTWF0cml4OycsXG5cbiAgICAgICAgICAgICd2YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDsnLFxuICAgICAgICAgICAgJ3ZhcnlpbmcgZmxvYXQgdkNvbG9yOycsXG5cbiAgICAgICAgICAgICd2b2lkIG1haW4odm9pZCl7JyxcbiAgICAgICAgICAgICcgICB2ZWMyIHYgPSBhVmVydGV4UG9zaXRpb247JyxcblxuICAgICAgICAgICAgJyAgIHYueCA9IChhVmVydGV4UG9zaXRpb24ueCkgKiBjb3MoYVJvdGF0aW9uKSAtIChhVmVydGV4UG9zaXRpb24ueSkgKiBzaW4oYVJvdGF0aW9uKTsnLFxuICAgICAgICAgICAgJyAgIHYueSA9IChhVmVydGV4UG9zaXRpb24ueCkgKiBzaW4oYVJvdGF0aW9uKSArIChhVmVydGV4UG9zaXRpb24ueSkgKiBjb3MoYVJvdGF0aW9uKTsnLFxuICAgICAgICAgICAgJyAgIHYgPSB2ICsgYVBvc2l0aW9uQ29vcmQ7JyxcblxuICAgICAgICAgICAgJyAgIGdsX1Bvc2l0aW9uID0gdmVjNCgocHJvamVjdGlvbk1hdHJpeCAqIHZlYzModiwgMS4wKSkueHksIDAuMCwgMS4wKTsnLFxuXG4gICAgICAgICAgICAnICAgdlRleHR1cmVDb29yZCA9IGFUZXh0dXJlQ29vcmQ7JyxcbiAgICAgICAgICAgICcgICB2Q29sb3IgPSBhQ29sb3I7JyxcbiAgICAgICAgICAgICd9J1xuICAgICAgICBdLmpvaW4oJ1xcbicpLFxuICAgICAgICAvLyBoZWxsb1xuICAgICAgICAgW1xuICAgICAgICAgICAgJ3ByZWNpc2lvbiBsb3dwIGZsb2F0OycsXG5cbiAgICAgICAgICAgICd2YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDsnLFxuICAgICAgICAgICAgJ3ZhcnlpbmcgZmxvYXQgdkNvbG9yOycsXG5cbiAgICAgICAgICAgICd1bmlmb3JtIHNhbXBsZXIyRCB1U2FtcGxlcjsnLFxuICAgICAgICAgICAgJ3VuaWZvcm0gZmxvYXQgdUFscGhhOycsXG5cbiAgICAgICAgICAgICd2b2lkIG1haW4odm9pZCl7JyxcbiAgICAgICAgICAgICcgIHZlYzQgY29sb3IgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZUZXh0dXJlQ29vcmQpICogdkNvbG9yICogdUFscGhhOycsXG4gICAgICAgICAgICAnICBpZiAoY29sb3IuYSA9PSAwLjApIGRpc2NhcmQ7JyxcbiAgICAgICAgICAgICcgIGdsX0ZyYWdDb2xvciA9IGNvbG9yOycsXG4gICAgICAgICAgICAnfSdcbiAgICAgICAgXS5qb2luKCdcXG4nKSxcbiAgICAgICAgLy8gY3VzdG9tIHVuaWZvcm1zXG4gICAgICAgIHtcbiAgICAgICAgICAgIHVBbHBoYTogIHsgdHlwZTogJzFmJywgdmFsdWU6IDEgfVxuICAgICAgICB9LFxuICAgICAgICAvLyBjdXN0b20gYXR0cmlidXRlc1xuICAgICAgICB7XG4gICAgICAgICAgICBhUG9zaXRpb25Db29yZDogMCxcbiAgICAgICAgICAgLy8gYVNjYWxlOiAgICAgICAgIDAsXG4gICAgICAgICAgICBhUm90YXRpb246ICAgICAgMFxuICAgICAgICB9XG4gICAgKTtcblxuICAgIC8vIFRFTVAgSEFDS1xuXG59XG5cblBhcnRpY2xlU2hhZGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoVGV4dHVyZVNoYWRlci5wcm90b3R5cGUpO1xuUGFydGljbGVTaGFkZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gUGFydGljbGVTaGFkZXI7XG5cbm1vZHVsZS5leHBvcnRzID0gUGFydGljbGVTaGFkZXI7XG4iLCJ2YXIgdXRpbHMgPSByZXF1aXJlKCcuLi91dGlscycpLFxuICAgIG1hdGggPSByZXF1aXJlKCcuLi9tYXRoJyksXG4gICAgQ09OU1QgPSByZXF1aXJlKCcuLi9jb25zdCcpLFxuICAgIEV2ZW50RW1pdHRlciA9IHJlcXVpcmUoJ2V2ZW50ZW1pdHRlcjMnKTtcblxuLyoqXG4gKiBUaGUgQ2FudmFzUmVuZGVyZXIgZHJhd3MgdGhlIHNjZW5lIGFuZCBhbGwgaXRzIGNvbnRlbnQgb250byBhIDJkIGNhbnZhcy4gVGhpcyByZW5kZXJlciBzaG91bGQgYmUgdXNlZCBmb3IgYnJvd3NlcnMgdGhhdCBkbyBub3Qgc3VwcG9ydCB3ZWJHTC5cbiAqIERvbid0IGZvcmdldCB0byBhZGQgdGhlIENhbnZhc1JlbmRlcmVyLnZpZXcgdG8geW91ciBET00gb3IgeW91IHdpbGwgbm90IHNlZSBhbnl0aGluZyA6KVxuICpcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqIEBwYXJhbSBzeXN0ZW0ge3N0cmluZ30gVGhlIG5hbWUgb2YgdGhlIHN5c3RlbSB0aGlzIHJlbmRlcmVyIGlzIGZvci5cbiAqIEBwYXJhbSBbd2lkdGg9ODAwXSB7bnVtYmVyfSB0aGUgd2lkdGggb2YgdGhlIGNhbnZhcyB2aWV3XG4gKiBAcGFyYW0gW2hlaWdodD02MDBdIHtudW1iZXJ9IHRoZSBoZWlnaHQgb2YgdGhlIGNhbnZhcyB2aWV3XG4gKiBAcGFyYW0gW29wdGlvbnNdIHtvYmplY3R9IFRoZSBvcHRpb25hbCByZW5kZXJlciBwYXJhbWV0ZXJzXG4gKiBAcGFyYW0gW29wdGlvbnMudmlld10ge0hUTUxDYW52YXNFbGVtZW50fSB0aGUgY2FudmFzIHRvIHVzZSBhcyBhIHZpZXcsIG9wdGlvbmFsXG4gKiBAcGFyYW0gW29wdGlvbnMudHJhbnNwYXJlbnQ9ZmFsc2VdIHtib29sZWFufSBJZiB0aGUgcmVuZGVyIHZpZXcgaXMgdHJhbnNwYXJlbnQsIGRlZmF1bHQgZmFsc2VcbiAqIEBwYXJhbSBbb3B0aW9ucy5hdXRvUmVzaXplPWZhbHNlXSB7Ym9vbGVhbn0gSWYgdGhlIHJlbmRlciB2aWV3IGlzIGF1dG9tYXRpY2FsbHkgcmVzaXplZCwgZGVmYXVsdCBmYWxzZVxuICogQHBhcmFtIFtvcHRpb25zLmFudGlhbGlhcz1mYWxzZV0ge2Jvb2xlYW59IHNldHMgYW50aWFsaWFzIChvbmx5IGFwcGxpY2FibGUgaW4gY2hyb21lIGF0IHRoZSBtb21lbnQpXG4gKiBAcGFyYW0gW29wdGlvbnMucmVzb2x1dGlvbj0xXSB7bnVtYmVyfSB0aGUgcmVzb2x1dGlvbiBvZiB0aGUgcmVuZGVyZXIgcmV0aW5hIHdvdWxkIGJlIDJcbiAqIEBwYXJhbSBbb3B0aW9ucy5jbGVhckJlZm9yZVJlbmRlcj10cnVlXSB7Ym9vbGVhbn0gVGhpcyBzZXRzIGlmIHRoZSBDYW52YXNSZW5kZXJlciB3aWxsIGNsZWFyIHRoZSBjYW52YXMgb3JcbiAqICAgICAgbm90IGJlZm9yZSB0aGUgbmV3IHJlbmRlciBwYXNzLlxuICogQHBhcmFtIFtvcHRpb25zLmJhY2tncm91bmRDb2xvcj0weDAwMDAwMF0ge251bWJlcn0gVGhlIGJhY2tncm91bmQgY29sb3Igb2YgdGhlIHJlbmRlcmVkIGFyZWEgKHNob3duIGlmIG5vdCB0cmFuc3BhcmVudCkuXG4gKiBAcGFyYW0gW29wdGlvbnMucm91bmRQaXhlbHM9ZmFsc2VdIHtib29sZWFufSBJZiB0cnVlIFBpeGkgd2lsbCBNYXRoLmZsb29yKCkgeC95IHZhbHVlcyB3aGVuIHJlbmRlcmluZywgc3RvcHBpbmcgcGl4ZWwgaW50ZXJwb2xhdGlvbi5cbiAqL1xuZnVuY3Rpb24gU3lzdGVtUmVuZGVyZXIoc3lzdGVtLCB3aWR0aCwgaGVpZ2h0LCBvcHRpb25zKVxue1xuICAgIEV2ZW50RW1pdHRlci5jYWxsKHRoaXMpO1xuXG4gICAgdXRpbHMuc2F5SGVsbG8oc3lzdGVtKTtcblxuICAgIC8vIHByZXBhcmUgb3B0aW9uc1xuICAgIGlmIChvcHRpb25zKVxuICAgIHtcbiAgICAgICAgZm9yICh2YXIgaSBpbiBDT05TVC5ERUZBVUxUX1JFTkRFUl9PUFRJT05TKVxuICAgICAgICB7XG4gICAgICAgICAgICBpZiAodHlwZW9mIG9wdGlvbnNbaV0gPT09ICd1bmRlZmluZWQnKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIG9wdGlvbnNbaV0gPSBDT05TVC5ERUZBVUxUX1JFTkRFUl9PUFRJT05TW2ldO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIG9wdGlvbnMgPSBDT05TVC5ERUZBVUxUX1JFTkRFUl9PUFRJT05TO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoZSB0eXBlIG9mIHRoZSByZW5kZXJlci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCBQSVhJLlJFTkRFUkVSX1RZUEUuVU5LTk9XTlxuICAgICAqIEBzZWUgUElYSS5SRU5ERVJFUl9UWVBFXG4gICAgICovXG4gICAgdGhpcy50eXBlID0gQ09OU1QuUkVOREVSRVJfVFlQRS5VTktOT1dOO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHdpZHRoIG9mIHRoZSBjYW52YXMgdmlld1xuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDgwMFxuICAgICAqL1xuICAgIHRoaXMud2lkdGggPSB3aWR0aCB8fCA4MDA7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgaGVpZ2h0IG9mIHRoZSBjYW52YXMgdmlld1xuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDYwMFxuICAgICAqL1xuICAgIHRoaXMuaGVpZ2h0ID0gaGVpZ2h0IHx8IDYwMDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBjYW52YXMgZWxlbWVudCB0aGF0IGV2ZXJ5dGhpbmcgaXMgZHJhd24gdG9cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge0hUTUxDYW52YXNFbGVtZW50fVxuICAgICAqL1xuICAgIHRoaXMudmlldyA9IG9wdGlvbnMudmlldyB8fCBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdjYW52YXMnKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSByZXNvbHV0aW9uIG9mIHRoZSByZW5kZXJlclxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDFcbiAgICAgKi9cbiAgICB0aGlzLnJlc29sdXRpb24gPSBvcHRpb25zLnJlc29sdXRpb247XG5cbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIHRoZSByZW5kZXIgdmlldyBpcyB0cmFuc3BhcmVudFxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKi9cbiAgICB0aGlzLnRyYW5zcGFyZW50ID0gb3B0aW9ucy50cmFuc3BhcmVudDtcblxuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgdGhlIHJlbmRlciB2aWV3IHNob3VsZCBiZSByZXNpemVkIGF1dG9tYXRpY2FsbHlcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICovXG4gICAgdGhpcy5hdXRvUmVzaXplID0gb3B0aW9ucy5hdXRvUmVzaXplIHx8IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogVHJhY2tzIHRoZSBibGVuZCBtb2RlcyB1c2VmdWwgZm9yIHRoaXMgcmVuZGVyZXIuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtvYmplY3Q8c3RyaW5nLCBtaXhlZD59XG4gICAgICovXG4gICAgdGhpcy5ibGVuZE1vZGVzID0gbnVsbDtcblxuICAgIC8qKlxuICAgICAqIFRoZSB2YWx1ZSBvZiB0aGUgcHJlc2VydmVEcmF3aW5nQnVmZmVyIGZsYWcgYWZmZWN0cyB3aGV0aGVyIG9yIG5vdCB0aGUgY29udGVudHMgb2YgdGhlIHN0ZW5jaWwgYnVmZmVyIGlzIHJldGFpbmVkIGFmdGVyIHJlbmRlcmluZy5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICovXG4gICAgdGhpcy5wcmVzZXJ2ZURyYXdpbmdCdWZmZXIgPSBvcHRpb25zLnByZXNlcnZlRHJhd2luZ0J1ZmZlcjtcblxuICAgIC8qKlxuICAgICAqIFRoaXMgc2V0cyBpZiB0aGUgQ2FudmFzUmVuZGVyZXIgd2lsbCBjbGVhciB0aGUgY2FudmFzIG9yIG5vdCBiZWZvcmUgdGhlIG5ldyByZW5kZXIgcGFzcy5cbiAgICAgKiBJZiB0aGUgc2NlbmUgaXMgTk9UIHRyYW5zcGFyZW50IFBpeGkgd2lsbCB1c2UgYSBjYW52YXMgc2l6ZWQgZmlsbFJlY3Qgb3BlcmF0aW9uIGV2ZXJ5IGZyYW1lIHRvIHNldCB0aGUgY2FudmFzIGJhY2tncm91bmQgY29sb3IuXG4gICAgICogSWYgdGhlIHNjZW5lIGlzIHRyYW5zcGFyZW50IFBpeGkgd2lsbCB1c2UgY2xlYXJSZWN0IHRvIGNsZWFyIHRoZSBjYW52YXMgZXZlcnkgZnJhbWUuXG4gICAgICogRGlzYWJsZSB0aGlzIGJ5IHNldHRpbmcgdGhpcyB0byBmYWxzZS4gRm9yIGV4YW1wbGUgaWYgeW91ciBnYW1lIGhhcyBhIGNhbnZhcyBmaWxsaW5nIGJhY2tncm91bmQgaW1hZ2UgeW91IG9mdGVuIGRvbid0IG5lZWQgdGhpcyBzZXQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqIEBkZWZhdWx0XG4gICAgICovXG4gICAgdGhpcy5jbGVhckJlZm9yZVJlbmRlciA9IG9wdGlvbnMuY2xlYXJCZWZvcmVSZW5kZXI7XG5cbiAgICAvKipcbiAgICAgKiBJZiB0cnVlIFBpeGkgd2lsbCBNYXRoLmZsb29yKCkgeC95IHZhbHVlcyB3aGVuIHJlbmRlcmluZywgc3RvcHBpbmcgcGl4ZWwgaW50ZXJwb2xhdGlvbi5cbiAgICAgKiBIYW5keSBmb3IgY3Jpc3AgcGl4ZWwgYXJ0IGFuZCBzcGVlZCBvbiBsZWdhY3kgZGV2aWNlcy5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICovXG4gICAgdGhpcy5yb3VuZFBpeGVscyA9IG9wdGlvbnMucm91bmRQaXhlbHM7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYmFja2dyb3VuZCBjb2xvciBhcyBhIG51bWJlci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX2JhY2tncm91bmRDb2xvciA9IDB4MDAwMDAwO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGJhY2tncm91bmQgY29sb3IgYXMgYW4gW1IsIEcsIEJdIGFycmF5LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyW119XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9iYWNrZ3JvdW5kQ29sb3JSZ2JhID0gWzAsIDAsIDAsIDBdO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGJhY2tncm91bmQgY29sb3IgYXMgYSBzdHJpbmcuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtzdHJpbmd9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9iYWNrZ3JvdW5kQ29sb3JTdHJpbmcgPSAnIzAwMDAwMCc7XG5cbiAgICB0aGlzLmJhY2tncm91bmRDb2xvciA9IG9wdGlvbnMuYmFja2dyb3VuZENvbG9yIHx8IHRoaXMuX2JhY2tncm91bmRDb2xvcjsgLy8gcnVuIGJnIGNvbG9yIHNldHRlclxuXG4gICAgLyoqXG4gICAgICogVGhpcyB0ZW1wb3JhcnkgZGlzcGxheSBvYmplY3QgdXNlZCBhcyB0aGUgcGFyZW50IG9mIHRoZSBjdXJyZW50bHkgYmVpbmcgcmVuZGVyZWQgaXRlbVxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5EaXNwbGF5T2JqZWN0fVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fdGVtcERpc3BsYXlPYmplY3RQYXJlbnQgPSB7d29ybGRUcmFuc2Zvcm06bmV3IG1hdGguTWF0cml4KCksIHdvcmxkQWxwaGE6MSwgY2hpbGRyZW46W119O1xuXG4gICAgLyoqXG4gICAgICogVGhlIGxhc3Qgcm9vdCBvYmplY3QgdGhhdCB0aGUgcmVuZGVyZXIgdHJpZWQgdG8gcmVuZGVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5EaXNwbGF5T2JqZWN0fVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fbGFzdE9iamVjdFJlbmRlcmVkID0gdGhpcy5fdGVtcERpc3BsYXlPYmplY3RQYXJlbnQ7XG59XG5cbi8vIGNvbnN0cnVjdG9yXG5TeXN0ZW1SZW5kZXJlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKEV2ZW50RW1pdHRlci5wcm90b3R5cGUpO1xuU3lzdGVtUmVuZGVyZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gU3lzdGVtUmVuZGVyZXI7XG5tb2R1bGUuZXhwb3J0cyA9IFN5c3RlbVJlbmRlcmVyO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhTeXN0ZW1SZW5kZXJlci5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBUaGUgYmFja2dyb3VuZCBjb2xvciB0byBmaWxsIGlmIG5vdCB0cmFuc3BhcmVudFxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLlN5c3RlbVJlbmRlcmVyI1xuICAgICAqL1xuICAgIGJhY2tncm91bmRDb2xvcjpcbiAgICB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2JhY2tncm91bmRDb2xvcjtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLl9iYWNrZ3JvdW5kQ29sb3IgPSB2YWw7XG4gICAgICAgICAgICB0aGlzLl9iYWNrZ3JvdW5kQ29sb3JTdHJpbmcgPSB1dGlscy5oZXgyc3RyaW5nKHZhbCk7XG4gICAgICAgICAgICB1dGlscy5oZXgycmdiKHZhbCwgdGhpcy5fYmFja2dyb3VuZENvbG9yUmdiYSk7XG4gICAgICAgIH1cbiAgICB9XG59KTtcblxuLyoqXG4gKiBSZXNpemVzIHRoZSBjYW52YXMgdmlldyB0byB0aGUgc3BlY2lmaWVkIHdpZHRoIGFuZCBoZWlnaHRcbiAqXG4gKiBAcGFyYW0gd2lkdGgge251bWJlcn0gdGhlIG5ldyB3aWR0aCBvZiB0aGUgY2FudmFzIHZpZXdcbiAqIEBwYXJhbSBoZWlnaHQge251bWJlcn0gdGhlIG5ldyBoZWlnaHQgb2YgdGhlIGNhbnZhcyB2aWV3XG4gKi9cblN5c3RlbVJlbmRlcmVyLnByb3RvdHlwZS5yZXNpemUgPSBmdW5jdGlvbiAod2lkdGgsIGhlaWdodCkge1xuICAgIHRoaXMud2lkdGggPSB3aWR0aCAqIHRoaXMucmVzb2x1dGlvbjtcbiAgICB0aGlzLmhlaWdodCA9IGhlaWdodCAqIHRoaXMucmVzb2x1dGlvbjtcblxuICAgIHRoaXMudmlldy53aWR0aCA9IHRoaXMud2lkdGg7XG4gICAgdGhpcy52aWV3LmhlaWdodCA9IHRoaXMuaGVpZ2h0O1xuXG4gICAgaWYgKHRoaXMuYXV0b1Jlc2l6ZSlcbiAgICB7XG4gICAgICAgIHRoaXMudmlldy5zdHlsZS53aWR0aCA9IHRoaXMud2lkdGggLyB0aGlzLnJlc29sdXRpb24gKyAncHgnO1xuICAgICAgICB0aGlzLnZpZXcuc3R5bGUuaGVpZ2h0ID0gdGhpcy5oZWlnaHQgLyB0aGlzLnJlc29sdXRpb24gKyAncHgnO1xuICAgIH1cbn07XG5cbi8qKlxuICogUmVtb3ZlcyBldmVyeXRoaW5nIGZyb20gdGhlIHJlbmRlcmVyIGFuZCBvcHRpb25hbGx5IHJlbW92ZXMgdGhlIENhbnZhcyBET00gZWxlbWVudC5cbiAqXG4gKiBAcGFyYW0gW3JlbW92ZVZpZXc9ZmFsc2VdIHtib29sZWFufSBSZW1vdmVzIHRoZSBDYW52YXMgZWxlbWVudCBmcm9tIHRoZSBET00uXG4gKi9cblN5c3RlbVJlbmRlcmVyLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKHJlbW92ZVZpZXcpIHtcbiAgICBpZiAocmVtb3ZlVmlldyAmJiB0aGlzLnZpZXcucGFyZW50Tm9kZSlcbiAgICB7XG4gICAgICAgIHRoaXMudmlldy5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHRoaXMudmlldyk7XG4gICAgfVxuXG4gICAgdGhpcy50eXBlID0gQ09OU1QuUkVOREVSRVJfVFlQRS5VTktOT1dOO1xuXG4gICAgdGhpcy53aWR0aCA9IDA7XG4gICAgdGhpcy5oZWlnaHQgPSAwO1xuXG4gICAgdGhpcy52aWV3ID0gbnVsbDtcblxuICAgIHRoaXMucmVzb2x1dGlvbiA9IDA7XG5cbiAgICB0aGlzLnRyYW5zcGFyZW50ID0gZmFsc2U7XG5cbiAgICB0aGlzLmF1dG9SZXNpemUgPSBmYWxzZTtcblxuICAgIHRoaXMuYmxlbmRNb2RlcyA9IG51bGw7XG5cbiAgICB0aGlzLnByZXNlcnZlRHJhd2luZ0J1ZmZlciA9IGZhbHNlO1xuICAgIHRoaXMuY2xlYXJCZWZvcmVSZW5kZXIgPSBmYWxzZTtcblxuICAgIHRoaXMucm91bmRQaXhlbHMgPSBmYWxzZTtcblxuICAgIHRoaXMuX2JhY2tncm91bmRDb2xvciA9IDA7XG4gICAgdGhpcy5fYmFja2dyb3VuZENvbG9yUmdiYSA9IG51bGw7XG4gICAgdGhpcy5fYmFja2dyb3VuZENvbG9yU3RyaW5nID0gbnVsbDtcbn07XG4iLCJ2YXIgU3lzdGVtUmVuZGVyZXIgPSByZXF1aXJlKCcuLi9TeXN0ZW1SZW5kZXJlcicpLFxuICAgIENhbnZhc01hc2tNYW5hZ2VyID0gcmVxdWlyZSgnLi91dGlscy9DYW52YXNNYXNrTWFuYWdlcicpLFxuICAgIHV0aWxzID0gcmVxdWlyZSgnLi4vLi4vdXRpbHMnKSxcbiAgICBtYXRoID0gcmVxdWlyZSgnLi4vLi4vbWF0aCcpLFxuICAgIENPTlNUID0gcmVxdWlyZSgnLi4vLi4vY29uc3QnKTtcblxuLyoqXG4gKiBUaGUgQ2FudmFzUmVuZGVyZXIgZHJhd3MgdGhlIHNjZW5lIGFuZCBhbGwgaXRzIGNvbnRlbnQgb250byBhIDJkIGNhbnZhcy4gVGhpcyByZW5kZXJlciBzaG91bGQgYmUgdXNlZCBmb3IgYnJvd3NlcnMgdGhhdCBkbyBub3Qgc3VwcG9ydCB3ZWJHTC5cbiAqIERvbid0IGZvcmdldCB0byBhZGQgdGhlIENhbnZhc1JlbmRlcmVyLnZpZXcgdG8geW91ciBET00gb3IgeW91IHdpbGwgbm90IHNlZSBhbnl0aGluZyA6KVxuICpcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqIEBleHRlbmRzIFBJWEkuU3lzdGVtUmVuZGVyZXJcbiAqIEBwYXJhbSBbd2lkdGg9ODAwXSB7bnVtYmVyfSB0aGUgd2lkdGggb2YgdGhlIGNhbnZhcyB2aWV3XG4gKiBAcGFyYW0gW2hlaWdodD02MDBdIHtudW1iZXJ9IHRoZSBoZWlnaHQgb2YgdGhlIGNhbnZhcyB2aWV3XG4gKiBAcGFyYW0gW29wdGlvbnNdIHtvYmplY3R9IFRoZSBvcHRpb25hbCByZW5kZXJlciBwYXJhbWV0ZXJzXG4gKiBAcGFyYW0gW29wdGlvbnMudmlld10ge0hUTUxDYW52YXNFbGVtZW50fSB0aGUgY2FudmFzIHRvIHVzZSBhcyBhIHZpZXcsIG9wdGlvbmFsXG4gKiBAcGFyYW0gW29wdGlvbnMudHJhbnNwYXJlbnQ9ZmFsc2VdIHtib29sZWFufSBJZiB0aGUgcmVuZGVyIHZpZXcgaXMgdHJhbnNwYXJlbnQsIGRlZmF1bHQgZmFsc2VcbiAqIEBwYXJhbSBbb3B0aW9ucy5hdXRvUmVzaXplPWZhbHNlXSB7Ym9vbGVhbn0gSWYgdGhlIHJlbmRlciB2aWV3IGlzIGF1dG9tYXRpY2FsbHkgcmVzaXplZCwgZGVmYXVsdCBmYWxzZVxuICogQHBhcmFtIFtvcHRpb25zLmFudGlhbGlhcz1mYWxzZV0ge2Jvb2xlYW59IHNldHMgYW50aWFsaWFzIChvbmx5IGFwcGxpY2FibGUgaW4gY2hyb21lIGF0IHRoZSBtb21lbnQpXG4gKiBAcGFyYW0gW29wdGlvbnMucmVzb2x1dGlvbj0xXSB7bnVtYmVyfSB0aGUgcmVzb2x1dGlvbiBvZiB0aGUgcmVuZGVyZXIgcmV0aW5hIHdvdWxkIGJlIDJcbiAqIEBwYXJhbSBbb3B0aW9ucy5jbGVhckJlZm9yZVJlbmRlcj10cnVlXSB7Ym9vbGVhbn0gVGhpcyBzZXRzIGlmIHRoZSBDYW52YXNSZW5kZXJlciB3aWxsIGNsZWFyIHRoZSBjYW52YXMgb3JcbiAqICAgICAgbm90IGJlZm9yZSB0aGUgbmV3IHJlbmRlciBwYXNzLlxuICogQHBhcmFtIFtvcHRpb25zLnJvdW5kUGl4ZWxzPWZhbHNlXSB7Ym9vbGVhbn0gSWYgdHJ1ZSBQaXhpIHdpbGwgTWF0aC5mbG9vcigpIHgveSB2YWx1ZXMgd2hlbiByZW5kZXJpbmcsIHN0b3BwaW5nIHBpeGVsIGludGVycG9sYXRpb24uXG4gKi9cbmZ1bmN0aW9uIENhbnZhc1JlbmRlcmVyKHdpZHRoLCBoZWlnaHQsIG9wdGlvbnMpXG57XG4gICAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG5cbiAgICBTeXN0ZW1SZW5kZXJlci5jYWxsKHRoaXMsICdDYW52YXMnLCB3aWR0aCwgaGVpZ2h0LCBvcHRpb25zKTtcblxuICAgIHRoaXMudHlwZSA9IENPTlNULlJFTkRFUkVSX1RZUEUuQ0FOVkFTO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGNhbnZhcyAyZCBjb250ZXh0IHRoYXQgZXZlcnl0aGluZyBpcyBkcmF3biB3aXRoLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEfVxuICAgICAqL1xuICAgIHRoaXMuY29udGV4dCA9IHRoaXMudmlldy5nZXRDb250ZXh0KCcyZCcsIHsgYWxwaGE6IHRoaXMudHJhbnNwYXJlbnQgfSk7XG5cbiAgICAvKipcbiAgICAgKiBCb29sZWFuIGZsYWcgY29udHJvbGxpbmcgY2FudmFzIHJlZnJlc2guXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqL1xuICAgIHRoaXMucmVmcmVzaCA9IHRydWU7XG5cbiAgICAvKipcbiAgICAgKiBJbnN0YW5jZSBvZiBhIENhbnZhc01hc2tNYW5hZ2VyLCBoYW5kbGVzIG1hc2tpbmcgd2hlbiB1c2luZyB0aGUgY2FudmFzIHJlbmRlcmVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5DYW52YXNNYXNrTWFuYWdlcn1cbiAgICAgKi9cbiAgICB0aGlzLm1hc2tNYW5hZ2VyID0gbmV3IENhbnZhc01hc2tNYW5hZ2VyKCk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgY2FudmFzIHByb3BlcnR5IHVzZWQgdG8gc2V0IHRoZSBjYW52YXMgc21vb3RoaW5nIHByb3BlcnR5LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7c3RyaW5nfVxuICAgICAqL1xuICAgIHRoaXMuc21vb3RoUHJvcGVydHkgPSAnaW1hZ2VTbW9vdGhpbmdFbmFibGVkJztcblxuICAgIGlmICghdGhpcy5jb250ZXh0LmltYWdlU21vb3RoaW5nRW5hYmxlZClcbiAgICB7XG4gICAgICAgIGlmICh0aGlzLmNvbnRleHQud2Via2l0SW1hZ2VTbW9vdGhpbmdFbmFibGVkKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnNtb290aFByb3BlcnR5ID0gJ3dlYmtpdEltYWdlU21vb3RoaW5nRW5hYmxlZCc7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodGhpcy5jb250ZXh0Lm1vekltYWdlU21vb3RoaW5nRW5hYmxlZClcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5zbW9vdGhQcm9wZXJ0eSA9ICdtb3pJbWFnZVNtb290aGluZ0VuYWJsZWQnO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHRoaXMuY29udGV4dC5vSW1hZ2VTbW9vdGhpbmdFbmFibGVkKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnNtb290aFByb3BlcnR5ID0gJ29JbWFnZVNtb290aGluZ0VuYWJsZWQnO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHRoaXMuY29udGV4dC5tc0ltYWdlU21vb3RoaW5nRW5hYmxlZClcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5zbW9vdGhQcm9wZXJ0eSA9ICdtc0ltYWdlU21vb3RoaW5nRW5hYmxlZCc7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLmluaXRQbHVnaW5zKCk7XG5cbiAgICB0aGlzLl9tYXBCbGVuZE1vZGVzKCk7XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIHRlbXBvcmFyeSBkaXNwbGF5IG9iamVjdCB1c2VkIGFzIHRoZSBwYXJlbnQgb2YgdGhlIGN1cnJlbnRseSBiZWluZyByZW5kZXJlZCBpdGVtXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLkRpc3BsYXlPYmplY3R9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl90ZW1wRGlzcGxheU9iamVjdFBhcmVudCA9IHtcbiAgICAgICAgd29ybGRUcmFuc2Zvcm06IG5ldyBtYXRoLk1hdHJpeCgpLFxuICAgICAgICB3b3JsZEFscGhhOiAxXG4gICAgfTtcblxuXG4gICAgdGhpcy5yZXNpemUod2lkdGgsIGhlaWdodCk7XG59XG5cbi8vIGNvbnN0cnVjdG9yXG5DYW52YXNSZW5kZXJlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFN5c3RlbVJlbmRlcmVyLnByb3RvdHlwZSk7XG5DYW52YXNSZW5kZXJlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBDYW52YXNSZW5kZXJlcjtcbm1vZHVsZS5leHBvcnRzID0gQ2FudmFzUmVuZGVyZXI7XG51dGlscy5wbHVnaW5UYXJnZXQubWl4aW4oQ2FudmFzUmVuZGVyZXIpO1xuXG4vKipcbiAqIFJlbmRlcnMgdGhlIG9iamVjdCB0byB0aGlzIGNhbnZhcyB2aWV3XG4gKlxuICogQHBhcmFtIG9iamVjdCB7UElYSS5EaXNwbGF5T2JqZWN0fSB0aGUgb2JqZWN0IHRvIGJlIHJlbmRlcmVkXG4gKi9cbkNhbnZhc1JlbmRlcmVyLnByb3RvdHlwZS5yZW5kZXIgPSBmdW5jdGlvbiAob2JqZWN0KVxue1xuICAgIHRoaXMuZW1pdCgncHJlcmVuZGVyJyk7XG5cbiAgICB2YXIgY2FjaGVQYXJlbnQgPSBvYmplY3QucGFyZW50O1xuXG4gICAgdGhpcy5fbGFzdE9iamVjdFJlbmRlcmVkID0gb2JqZWN0O1xuXG4gICAgb2JqZWN0LnBhcmVudCA9IHRoaXMuX3RlbXBEaXNwbGF5T2JqZWN0UGFyZW50O1xuXG4gICAgLy8gdXBkYXRlIHRoZSBzY2VuZSBncmFwaFxuICAgIG9iamVjdC51cGRhdGVUcmFuc2Zvcm0oKTtcblxuICAgIG9iamVjdC5wYXJlbnQgPSBjYWNoZVBhcmVudDtcblxuICAgIHRoaXMuY29udGV4dC5zZXRUcmFuc2Zvcm0oMSwgMCwgMCwgMSwgMCwgMCk7XG5cbiAgICB0aGlzLmNvbnRleHQuZ2xvYmFsQWxwaGEgPSAxO1xuXG4gICAgdGhpcy5jb250ZXh0Lmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbiA9IHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5OT1JNQUxdO1xuXG4gICAgaWYgKG5hdmlnYXRvci5pc0NvY29vbkpTICYmIHRoaXMudmlldy5zY3JlZW5jYW52YXMpXG4gICAge1xuICAgICAgICB0aGlzLmNvbnRleHQuZmlsbFN0eWxlID0gJ2JsYWNrJztcbiAgICAgICAgdGhpcy5jb250ZXh0LmNsZWFyKCk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuY2xlYXJCZWZvcmVSZW5kZXIpXG4gICAge1xuICAgICAgICBpZiAodGhpcy50cmFuc3BhcmVudClcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5jb250ZXh0LmNsZWFyUmVjdCgwLCAwLCB0aGlzLndpZHRoLCB0aGlzLmhlaWdodCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmNvbnRleHQuZmlsbFN0eWxlID0gdGhpcy5fYmFja2dyb3VuZENvbG9yU3RyaW5nO1xuICAgICAgICAgICAgdGhpcy5jb250ZXh0LmZpbGxSZWN0KDAsIDAsIHRoaXMud2lkdGggLCB0aGlzLmhlaWdodCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLnJlbmRlckRpc3BsYXlPYmplY3Qob2JqZWN0LCB0aGlzLmNvbnRleHQpO1xuXG4gICAgdGhpcy5lbWl0KCdwb3N0cmVuZGVyJyk7XG59O1xuXG4vKipcbiAqIFJlbW92ZXMgZXZlcnl0aGluZyBmcm9tIHRoZSByZW5kZXJlciBhbmQgb3B0aW9uYWxseSByZW1vdmVzIHRoZSBDYW52YXMgRE9NIGVsZW1lbnQuXG4gKlxuICogQHBhcmFtIFtyZW1vdmVWaWV3PWZhbHNlXSB7Ym9vbGVhbn0gUmVtb3ZlcyB0aGUgQ2FudmFzIGVsZW1lbnQgZnJvbSB0aGUgRE9NLlxuICovXG5DYW52YXNSZW5kZXJlci5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uIChyZW1vdmVWaWV3KVxue1xuICAgIHRoaXMuZGVzdHJveVBsdWdpbnMoKTtcblxuICAgIC8vIGNhbGwgdGhlIGJhc2UgZGVzdHJveVxuICAgIFN5c3RlbVJlbmRlcmVyLnByb3RvdHlwZS5kZXN0cm95LmNhbGwodGhpcywgcmVtb3ZlVmlldyk7XG5cbiAgICB0aGlzLmNvbnRleHQgPSBudWxsO1xuXG4gICAgdGhpcy5yZWZyZXNoID0gdHJ1ZTtcblxuICAgIHRoaXMubWFza01hbmFnZXIuZGVzdHJveSgpO1xuICAgIHRoaXMubWFza01hbmFnZXIgPSBudWxsO1xuXG4gICAgdGhpcy5zbW9vdGhQcm9wZXJ0eSA9IG51bGw7XG59O1xuXG4vKipcbiAqIFJlbmRlcnMgYSBkaXNwbGF5IG9iamVjdFxuICpcbiAqIEBwYXJhbSBkaXNwbGF5T2JqZWN0IHtQSVhJLkRpc3BsYXlPYmplY3R9IFRoZSBkaXNwbGF5T2JqZWN0IHRvIHJlbmRlclxuICogQHByaXZhdGVcbiAqL1xuQ2FudmFzUmVuZGVyZXIucHJvdG90eXBlLnJlbmRlckRpc3BsYXlPYmplY3QgPSBmdW5jdGlvbiAoZGlzcGxheU9iamVjdCwgY29udGV4dClcbntcbiAgICB2YXIgdGVtcENvbnRleHQgPSB0aGlzLmNvbnRleHQ7XG5cbiAgICB0aGlzLmNvbnRleHQgPSBjb250ZXh0O1xuICAgIGRpc3BsYXlPYmplY3QucmVuZGVyQ2FudmFzKHRoaXMpO1xuICAgIHRoaXMuY29udGV4dCA9IHRlbXBDb250ZXh0O1xufTtcblxuLyoqXG4gKiBAZXh0ZW5kcyBQSVhJLlN5c3RlbVJlbmRlcmVyI3Jlc2l6ZVxuICpcbiAqIEBwYXJhbSB7bnVtYmVyfSB3XG4gKiBAcGFyYW0ge251bWJlcn0gaFxuICovXG5DYW52YXNSZW5kZXJlci5wcm90b3R5cGUucmVzaXplID0gZnVuY3Rpb24gKHcsIGgpXG57XG4gICAgU3lzdGVtUmVuZGVyZXIucHJvdG90eXBlLnJlc2l6ZS5jYWxsKHRoaXMsIHcsIGgpO1xuXG4gICAgLy9yZXNldCB0aGUgc2NhbGUgbW9kZS4uIG9kZGx5IHRoaXMgc2VlbXMgdG8gYmUgcmVzZXQgd2hlbiB0aGUgY2FudmFzIGlzIHJlc2l6ZWQuXG4gICAgLy9zdXJlbHkgYSBicm93c2VyIGJ1Zz8/IExldCBwaXhpIGZpeCB0aGF0IGZvciB5b3UuLlxuICAgIGlmKHRoaXMuc21vb3RoUHJvcGVydHkpXG4gICAge1xuICAgICAgICB0aGlzLmNvbnRleHRbdGhpcy5zbW9vdGhQcm9wZXJ0eV0gPSAoQ09OU1QuU0NBTEVfTU9ERVMuREVGQVVMVCA9PT0gQ09OU1QuU0NBTEVfTU9ERVMuTElORUFSKTtcbiAgICB9XG5cbn07XG5cbi8qKlxuICogTWFwcyBQaXhpIGJsZW5kIG1vZGVzIHRvIGNhbnZhcyBibGVuZCBtb2Rlcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5DYW52YXNSZW5kZXJlci5wcm90b3R5cGUuX21hcEJsZW5kTW9kZXMgPSBmdW5jdGlvbiAoKVxue1xuICAgIGlmICghdGhpcy5ibGVuZE1vZGVzKVxuICAgIHtcbiAgICAgICAgdGhpcy5ibGVuZE1vZGVzID0ge307XG5cbiAgICAgICAgaWYgKHV0aWxzLmNhblVzZU5ld0NhbnZhc0JsZW5kTW9kZXMoKSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5ibGVuZE1vZGVzW0NPTlNULkJMRU5EX01PREVTLk5PUk1BTF0gICAgICAgID0gJ3NvdXJjZS1vdmVyJztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5BRERdICAgICAgICAgICA9ICdsaWdodGVyJzsgLy9JUyBUSElTIE9LPz8/XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuTVVMVElQTFldICAgICAgPSAnbXVsdGlwbHknO1xuICAgICAgICAgICAgdGhpcy5ibGVuZE1vZGVzW0NPTlNULkJMRU5EX01PREVTLlNDUkVFTl0gICAgICAgID0gJ3NjcmVlbic7XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuT1ZFUkxBWV0gICAgICAgPSAnb3ZlcmxheSc7XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuREFSS0VOXSAgICAgICAgPSAnZGFya2VuJztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5MSUdIVEVOXSAgICAgICA9ICdsaWdodGVuJztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5DT0xPUl9ET0RHRV0gICA9ICdjb2xvci1kb2RnZSc7XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuQ09MT1JfQlVSTl0gICAgPSAnY29sb3ItYnVybic7XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuSEFSRF9MSUdIVF0gICAgPSAnaGFyZC1saWdodCc7XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuU09GVF9MSUdIVF0gICAgPSAnc29mdC1saWdodCc7XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuRElGRkVSRU5DRV0gICAgPSAnZGlmZmVyZW5jZSc7XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuRVhDTFVTSU9OXSAgICAgPSAnZXhjbHVzaW9uJztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5IVUVdICAgICAgICAgICA9ICdodWUnO1xuICAgICAgICAgICAgdGhpcy5ibGVuZE1vZGVzW0NPTlNULkJMRU5EX01PREVTLlNBVFVSQVRJT05dICAgID0gJ3NhdHVyYXRlJztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5DT0xPUl0gICAgICAgICA9ICdjb2xvcic7XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuTFVNSU5PU0lUWV0gICAgPSAnbHVtaW5vc2l0eSc7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgICAvLyB0aGlzIG1lYW5zIHRoYXQgdGhlIGJyb3dzZXIgZG9lcyBub3Qgc3VwcG9ydCB0aGUgY29vbCBuZXcgYmxlbmQgbW9kZXMgaW4gY2FudmFzICdjb3VnaCcgaWUgJ2NvdWdoJ1xuICAgICAgICAgICAgdGhpcy5ibGVuZE1vZGVzW0NPTlNULkJMRU5EX01PREVTLk5PUk1BTF0gICAgICAgID0gJ3NvdXJjZS1vdmVyJztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5BRERdICAgICAgICAgICA9ICdsaWdodGVyJzsgLy9JUyBUSElTIE9LPz8/XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuTVVMVElQTFldICAgICAgPSAnc291cmNlLW92ZXInO1xuICAgICAgICAgICAgdGhpcy5ibGVuZE1vZGVzW0NPTlNULkJMRU5EX01PREVTLlNDUkVFTl0gICAgICAgID0gJ3NvdXJjZS1vdmVyJztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5PVkVSTEFZXSAgICAgICA9ICdzb3VyY2Utb3Zlcic7XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuREFSS0VOXSAgICAgICAgPSAnc291cmNlLW92ZXInO1xuICAgICAgICAgICAgdGhpcy5ibGVuZE1vZGVzW0NPTlNULkJMRU5EX01PREVTLkxJR0hURU5dICAgICAgID0gJ3NvdXJjZS1vdmVyJztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5DT0xPUl9ET0RHRV0gICA9ICdzb3VyY2Utb3Zlcic7XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuQ09MT1JfQlVSTl0gICAgPSAnc291cmNlLW92ZXInO1xuICAgICAgICAgICAgdGhpcy5ibGVuZE1vZGVzW0NPTlNULkJMRU5EX01PREVTLkhBUkRfTElHSFRdICAgID0gJ3NvdXJjZS1vdmVyJztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5TT0ZUX0xJR0hUXSAgICA9ICdzb3VyY2Utb3Zlcic7XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuRElGRkVSRU5DRV0gICAgPSAnc291cmNlLW92ZXInO1xuICAgICAgICAgICAgdGhpcy5ibGVuZE1vZGVzW0NPTlNULkJMRU5EX01PREVTLkVYQ0xVU0lPTl0gICAgID0gJ3NvdXJjZS1vdmVyJztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5IVUVdICAgICAgICAgICA9ICdzb3VyY2Utb3Zlcic7XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuU0FUVVJBVElPTl0gICAgPSAnc291cmNlLW92ZXInO1xuICAgICAgICAgICAgdGhpcy5ibGVuZE1vZGVzW0NPTlNULkJMRU5EX01PREVTLkNPTE9SXSAgICAgICAgID0gJ3NvdXJjZS1vdmVyJztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5MVU1JTk9TSVRZXSAgICA9ICdzb3VyY2Utb3Zlcic7XG4gICAgICAgIH1cbiAgICB9XG59O1xuIiwiLyoqXG4gKiBDcmVhdGVzIGEgQ2FudmFzIGVsZW1lbnQgb2YgdGhlIGdpdmVuIHNpemUuXG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIHdpZHRoIHtudW1iZXJ9IHRoZSB3aWR0aCBmb3IgdGhlIG5ld2x5IGNyZWF0ZWQgY2FudmFzXG4gKiBAcGFyYW0gaGVpZ2h0IHtudW1iZXJ9IHRoZSBoZWlnaHQgZm9yIHRoZSBuZXdseSBjcmVhdGVkIGNhbnZhc1xuICovXG5mdW5jdGlvbiBDYW52YXNCdWZmZXIod2lkdGgsIGhlaWdodClcbntcbiAgICAvKipcbiAgICAgKiBUaGUgQ2FudmFzIG9iamVjdCB0aGF0IGJlbG9uZ3MgdG8gdGhpcyBDYW52YXNCdWZmZXIuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtIVE1MQ2FudmFzRWxlbWVudH1cbiAgICAgKi9cbiAgICB0aGlzLmNhbnZhcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NhbnZhcycpO1xuXG4gICAgLyoqXG4gICAgICogQSBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQgb2JqZWN0IHJlcHJlc2VudGluZyBhIHR3by1kaW1lbnNpb25hbCByZW5kZXJpbmcgY29udGV4dC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRH1cbiAgICAgKi9cbiAgICB0aGlzLmNvbnRleHQgPSB0aGlzLmNhbnZhcy5nZXRDb250ZXh0KCcyZCcpO1xuXG4gICAgdGhpcy5jYW52YXMud2lkdGggPSB3aWR0aDtcbiAgICB0aGlzLmNhbnZhcy5oZWlnaHQgPSBoZWlnaHQ7XG59XG5cbkNhbnZhc0J1ZmZlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBDYW52YXNCdWZmZXI7XG5tb2R1bGUuZXhwb3J0cyA9IENhbnZhc0J1ZmZlcjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoQ2FudmFzQnVmZmVyLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFRoZSB3aWR0aCBvZiB0aGUgY2FudmFzIGJ1ZmZlciBpbiBwaXhlbHMuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuQ2FudmFzQnVmZmVyI1xuICAgICAqL1xuICAgIHdpZHRoOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY2FudmFzLndpZHRoO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWwpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuY2FudmFzLndpZHRoID0gdmFsO1xuICAgICAgICB9XG4gICAgfSxcbiAgICAvKipcbiAgICAgKiBUaGUgaGVpZ2h0IG9mIHRoZSBjYW52YXMgYnVmZmVyIGluIHBpeGVscy5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5DYW52YXNCdWZmZXIjXG4gICAgICovXG4gICAgaGVpZ2h0OiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY2FudmFzLmhlaWdodDtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmNhbnZhcy5oZWlnaHQgPSB2YWw7XG4gICAgICAgIH1cbiAgICB9XG59KTtcblxuLyoqXG4gKiBDbGVhcnMgdGhlIGNhbnZhcyB0aGF0IHdhcyBjcmVhdGVkIGJ5IHRoZSBDYW52YXNCdWZmZXIgY2xhc3MuXG4gKlxuICogQHByaXZhdGVcbiAqL1xuQ2FudmFzQnVmZmVyLnByb3RvdHlwZS5jbGVhciA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy5jb250ZXh0LnNldFRyYW5zZm9ybSgxLCAwLCAwLCAxLCAwLCAwKTtcbiAgICB0aGlzLmNvbnRleHQuY2xlYXJSZWN0KDAsMCwgdGhpcy5jYW52YXMud2lkdGgsIHRoaXMuY2FudmFzLmhlaWdodCk7XG59O1xuXG4vKipcbiAqIFJlc2l6ZXMgdGhlIGNhbnZhcyB0byB0aGUgc3BlY2lmaWVkIHdpZHRoIGFuZCBoZWlnaHQuXG4gKlxuICogQHBhcmFtIHdpZHRoIHtudW1iZXJ9IHRoZSBuZXcgd2lkdGggb2YgdGhlIGNhbnZhc1xuICogQHBhcmFtIGhlaWdodCB7bnVtYmVyfSB0aGUgbmV3IGhlaWdodCBvZiB0aGUgY2FudmFzXG4gKi9cbkNhbnZhc0J1ZmZlci5wcm90b3R5cGUucmVzaXplID0gZnVuY3Rpb24gKHdpZHRoLCBoZWlnaHQpXG57XG4gICAgdGhpcy5jYW52YXMud2lkdGggPSB3aWR0aDtcbiAgICB0aGlzLmNhbnZhcy5oZWlnaHQgPSBoZWlnaHQ7XG59O1xuXG4vKipcbiAqIERlc3Ryb3lzIHRoaXMgY2FudmFzLlxuICpcbiAqL1xuQ2FudmFzQnVmZmVyLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLmNvbnRleHQgPSBudWxsO1xuICAgIHRoaXMuY2FudmFzID0gbnVsbDtcbn07XG4iLCJ2YXIgQ09OU1QgPSByZXF1aXJlKCcuLi8uLi8uLi9jb25zdCcpO1xuXG4vKipcbiAqIEEgc2V0IG9mIGZ1bmN0aW9ucyB1c2VkIGJ5IHRoZSBjYW52YXMgcmVuZGVyZXIgdG8gZHJhdyB0aGUgcHJpbWl0aXZlIGdyYXBoaWNzIGRhdGEuXG4gKiBAc3RhdGljXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKi9cbnZhciBDYW52YXNHcmFwaGljcyA9IHt9O1xubW9kdWxlLmV4cG9ydHMgPSBDYW52YXNHcmFwaGljcztcblxuLypcbiAqIFJlbmRlcnMgYSBHcmFwaGljcyBvYmplY3QgdG8gYSBjYW52YXMuXG4gKlxuICogQHBhcmFtIGdyYXBoaWNzIHtQSVhJLkdyYXBoaWNzfSB0aGUgYWN0dWFsIGdyYXBoaWNzIG9iamVjdCB0byByZW5kZXJcbiAqIEBwYXJhbSBjb250ZXh0IHtDYW52YXNSZW5kZXJpbmdDb250ZXh0MkR9IHRoZSAyZCBkcmF3aW5nIG1ldGhvZCBvZiB0aGUgY2FudmFzXG4gKi9cbkNhbnZhc0dyYXBoaWNzLnJlbmRlckdyYXBoaWNzID0gZnVuY3Rpb24gKGdyYXBoaWNzLCBjb250ZXh0KVxue1xuICAgIHZhciB3b3JsZEFscGhhID0gZ3JhcGhpY3Mud29ybGRBbHBoYTtcblxuICAgIGlmIChncmFwaGljcy5kaXJ0eSlcbiAgICB7XG4gICAgICAgIHRoaXMudXBkYXRlR3JhcGhpY3NUaW50KGdyYXBoaWNzKTtcbiAgICAgICAgZ3JhcGhpY3MuZGlydHkgPSBmYWxzZTtcbiAgICB9XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGdyYXBoaWNzLmdyYXBoaWNzRGF0YS5sZW5ndGg7IGkrKylcbiAgICB7XG4gICAgICAgIHZhciBkYXRhID0gZ3JhcGhpY3MuZ3JhcGhpY3NEYXRhW2ldO1xuICAgICAgICB2YXIgc2hhcGUgPSBkYXRhLnNoYXBlO1xuXG4gICAgICAgIHZhciBmaWxsQ29sb3IgPSBkYXRhLl9maWxsVGludDtcbiAgICAgICAgdmFyIGxpbmVDb2xvciA9IGRhdGEuX2xpbmVUaW50O1xuXG4gICAgICAgIGNvbnRleHQubGluZVdpZHRoID0gZGF0YS5saW5lV2lkdGg7XG5cbiAgICAgICAgaWYgKGRhdGEudHlwZSA9PT0gQ09OU1QuU0hBUEVTLlBPTFkpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNvbnRleHQuYmVnaW5QYXRoKCk7XG5cbiAgICAgICAgICAgIHZhciBwb2ludHMgPSBzaGFwZS5wb2ludHM7XG5cbiAgICAgICAgICAgIGNvbnRleHQubW92ZVRvKHBvaW50c1swXSwgcG9pbnRzWzFdKTtcblxuICAgICAgICAgICAgZm9yICh2YXIgaj0xOyBqIDwgcG9pbnRzLmxlbmd0aC8yOyBqKyspXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29udGV4dC5saW5lVG8ocG9pbnRzW2ogKiAyXSwgcG9pbnRzW2ogKiAyICsgMV0pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoc2hhcGUuY2xvc2VkKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGNvbnRleHQubGluZVRvKHBvaW50c1swXSwgcG9pbnRzWzFdKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gaWYgdGhlIGZpcnN0IGFuZCBsYXN0IHBvaW50IGFyZSB0aGUgc2FtZSBjbG9zZSB0aGUgcGF0aCAtIG11Y2ggbmVhdGVyIDopXG4gICAgICAgICAgICBpZiAocG9pbnRzWzBdID09PSBwb2ludHNbcG9pbnRzLmxlbmd0aC0yXSAmJiBwb2ludHNbMV0gPT09IHBvaW50c1twb2ludHMubGVuZ3RoLTFdKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGNvbnRleHQuY2xvc2VQYXRoKCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChkYXRhLmZpbGwpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29udGV4dC5nbG9iYWxBbHBoYSA9IGRhdGEuZmlsbEFscGhhICogd29ybGRBbHBoYTtcbiAgICAgICAgICAgICAgICBjb250ZXh0LmZpbGxTdHlsZSA9ICcjJyArICgnMDAwMDAnICsgKCBmaWxsQ29sb3IgfCAwKS50b1N0cmluZygxNikpLnN1YnN0cigtNik7XG4gICAgICAgICAgICAgICAgY29udGV4dC5maWxsKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZGF0YS5saW5lV2lkdGgpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29udGV4dC5nbG9iYWxBbHBoYSA9IGRhdGEubGluZUFscGhhICogd29ybGRBbHBoYTtcbiAgICAgICAgICAgICAgICBjb250ZXh0LnN0cm9rZVN0eWxlID0gJyMnICsgKCcwMDAwMCcgKyAoIGxpbmVDb2xvciB8IDApLnRvU3RyaW5nKDE2KSkuc3Vic3RyKC02KTtcbiAgICAgICAgICAgICAgICBjb250ZXh0LnN0cm9rZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGRhdGEudHlwZSA9PT0gQ09OU1QuU0hBUEVTLlJFQ1QpXG4gICAgICAgIHtcblxuICAgICAgICAgICAgaWYgKGRhdGEuZmlsbENvbG9yIHx8IGRhdGEuZmlsbENvbG9yID09PSAwKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGNvbnRleHQuZ2xvYmFsQWxwaGEgPSBkYXRhLmZpbGxBbHBoYSAqIHdvcmxkQWxwaGE7XG4gICAgICAgICAgICAgICAgY29udGV4dC5maWxsU3R5bGUgPSAnIycgKyAoJzAwMDAwJyArICggZmlsbENvbG9yIHwgMCkudG9TdHJpbmcoMTYpKS5zdWJzdHIoLTYpO1xuICAgICAgICAgICAgICAgIGNvbnRleHQuZmlsbFJlY3Qoc2hhcGUueCwgc2hhcGUueSwgc2hhcGUud2lkdGgsIHNoYXBlLmhlaWdodCk7XG5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChkYXRhLmxpbmVXaWR0aClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb250ZXh0Lmdsb2JhbEFscGhhID0gZGF0YS5saW5lQWxwaGEgKiB3b3JsZEFscGhhO1xuICAgICAgICAgICAgICAgIGNvbnRleHQuc3Ryb2tlU3R5bGUgPSAnIycgKyAoJzAwMDAwJyArICggbGluZUNvbG9yIHwgMCkudG9TdHJpbmcoMTYpKS5zdWJzdHIoLTYpO1xuICAgICAgICAgICAgICAgIGNvbnRleHQuc3Ryb2tlUmVjdChzaGFwZS54LCBzaGFwZS55LCBzaGFwZS53aWR0aCwgc2hhcGUuaGVpZ2h0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChkYXRhLnR5cGUgPT09IENPTlNULlNIQVBFUy5DSVJDKVxuICAgICAgICB7XG4gICAgICAgICAgICAvLyBUT0RPIC0gbmVlZCB0byBiZSBVbmRlZmluZWQhXG4gICAgICAgICAgICBjb250ZXh0LmJlZ2luUGF0aCgpO1xuICAgICAgICAgICAgY29udGV4dC5hcmMoc2hhcGUueCwgc2hhcGUueSwgc2hhcGUucmFkaXVzLDAsMipNYXRoLlBJKTtcbiAgICAgICAgICAgIGNvbnRleHQuY2xvc2VQYXRoKCk7XG5cbiAgICAgICAgICAgIGlmIChkYXRhLmZpbGwpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29udGV4dC5nbG9iYWxBbHBoYSA9IGRhdGEuZmlsbEFscGhhICogd29ybGRBbHBoYTtcbiAgICAgICAgICAgICAgICBjb250ZXh0LmZpbGxTdHlsZSA9ICcjJyArICgnMDAwMDAnICsgKCBmaWxsQ29sb3IgfCAwKS50b1N0cmluZygxNikpLnN1YnN0cigtNik7XG4gICAgICAgICAgICAgICAgY29udGV4dC5maWxsKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZGF0YS5saW5lV2lkdGgpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29udGV4dC5nbG9iYWxBbHBoYSA9IGRhdGEubGluZUFscGhhICogd29ybGRBbHBoYTtcbiAgICAgICAgICAgICAgICBjb250ZXh0LnN0cm9rZVN0eWxlID0gJyMnICsgKCcwMDAwMCcgKyAoIGxpbmVDb2xvciB8IDApLnRvU3RyaW5nKDE2KSkuc3Vic3RyKC02KTtcbiAgICAgICAgICAgICAgICBjb250ZXh0LnN0cm9rZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGRhdGEudHlwZSA9PT0gQ09OU1QuU0hBUEVTLkVMSVApXG4gICAgICAgIHtcbiAgICAgICAgICAgIC8vIGVsbGlwc2UgY29kZSB0YWtlbiBmcm9tOiBodHRwOi8vc3RhY2tvdmVyZmxvdy5jb20vcXVlc3Rpb25zLzIxNzI3OTgvaG93LXRvLWRyYXctYW4tb3ZhbC1pbi1odG1sNS1jYW52YXNcblxuICAgICAgICAgICAgdmFyIHcgPSBzaGFwZS53aWR0aCAqIDI7XG4gICAgICAgICAgICB2YXIgaCA9IHNoYXBlLmhlaWdodCAqIDI7XG5cbiAgICAgICAgICAgIHZhciB4ID0gc2hhcGUueCAtIHcvMjtcbiAgICAgICAgICAgIHZhciB5ID0gc2hhcGUueSAtIGgvMjtcblxuICAgICAgICAgICAgY29udGV4dC5iZWdpblBhdGgoKTtcblxuICAgICAgICAgICAgdmFyIGthcHBhID0gMC41NTIyODQ4LFxuICAgICAgICAgICAgICAgIG94ID0gKHcgLyAyKSAqIGthcHBhLCAvLyBjb250cm9sIHBvaW50IG9mZnNldCBob3Jpem9udGFsXG4gICAgICAgICAgICAgICAgb3kgPSAoaCAvIDIpICoga2FwcGEsIC8vIGNvbnRyb2wgcG9pbnQgb2Zmc2V0IHZlcnRpY2FsXG4gICAgICAgICAgICAgICAgeGUgPSB4ICsgdywgICAgICAgICAgIC8vIHgtZW5kXG4gICAgICAgICAgICAgICAgeWUgPSB5ICsgaCwgICAgICAgICAgIC8vIHktZW5kXG4gICAgICAgICAgICAgICAgeG0gPSB4ICsgdyAvIDIsICAgICAgIC8vIHgtbWlkZGxlXG4gICAgICAgICAgICAgICAgeW0gPSB5ICsgaCAvIDI7ICAgICAgIC8vIHktbWlkZGxlXG5cbiAgICAgICAgICAgIGNvbnRleHQubW92ZVRvKHgsIHltKTtcbiAgICAgICAgICAgIGNvbnRleHQuYmV6aWVyQ3VydmVUbyh4LCB5bSAtIG95LCB4bSAtIG94LCB5LCB4bSwgeSk7XG4gICAgICAgICAgICBjb250ZXh0LmJlemllckN1cnZlVG8oeG0gKyBveCwgeSwgeGUsIHltIC0gb3ksIHhlLCB5bSk7XG4gICAgICAgICAgICBjb250ZXh0LmJlemllckN1cnZlVG8oeGUsIHltICsgb3ksIHhtICsgb3gsIHllLCB4bSwgeWUpO1xuICAgICAgICAgICAgY29udGV4dC5iZXppZXJDdXJ2ZVRvKHhtIC0gb3gsIHllLCB4LCB5bSArIG95LCB4LCB5bSk7XG5cbiAgICAgICAgICAgIGNvbnRleHQuY2xvc2VQYXRoKCk7XG5cbiAgICAgICAgICAgIGlmIChkYXRhLmZpbGwpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29udGV4dC5nbG9iYWxBbHBoYSA9IGRhdGEuZmlsbEFscGhhICogd29ybGRBbHBoYTtcbiAgICAgICAgICAgICAgICBjb250ZXh0LmZpbGxTdHlsZSA9ICcjJyArICgnMDAwMDAnICsgKCBmaWxsQ29sb3IgfCAwKS50b1N0cmluZygxNikpLnN1YnN0cigtNik7XG4gICAgICAgICAgICAgICAgY29udGV4dC5maWxsKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZGF0YS5saW5lV2lkdGgpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29udGV4dC5nbG9iYWxBbHBoYSA9IGRhdGEubGluZUFscGhhICogd29ybGRBbHBoYTtcbiAgICAgICAgICAgICAgICBjb250ZXh0LnN0cm9rZVN0eWxlID0gJyMnICsgKCcwMDAwMCcgKyAoIGxpbmVDb2xvciB8IDApLnRvU3RyaW5nKDE2KSkuc3Vic3RyKC02KTtcbiAgICAgICAgICAgICAgICBjb250ZXh0LnN0cm9rZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGRhdGEudHlwZSA9PT0gQ09OU1QuU0hBUEVTLlJSRUMpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHZhciByeCA9IHNoYXBlLng7XG4gICAgICAgICAgICB2YXIgcnkgPSBzaGFwZS55O1xuICAgICAgICAgICAgdmFyIHdpZHRoID0gc2hhcGUud2lkdGg7XG4gICAgICAgICAgICB2YXIgaGVpZ2h0ID0gc2hhcGUuaGVpZ2h0O1xuICAgICAgICAgICAgdmFyIHJhZGl1cyA9IHNoYXBlLnJhZGl1cztcblxuICAgICAgICAgICAgdmFyIG1heFJhZGl1cyA9IE1hdGgubWluKHdpZHRoLCBoZWlnaHQpIC8gMiB8IDA7XG4gICAgICAgICAgICByYWRpdXMgPSByYWRpdXMgPiBtYXhSYWRpdXMgPyBtYXhSYWRpdXMgOiByYWRpdXM7XG5cbiAgICAgICAgICAgIGNvbnRleHQuYmVnaW5QYXRoKCk7XG4gICAgICAgICAgICBjb250ZXh0Lm1vdmVUbyhyeCwgcnkgKyByYWRpdXMpO1xuICAgICAgICAgICAgY29udGV4dC5saW5lVG8ocngsIHJ5ICsgaGVpZ2h0IC0gcmFkaXVzKTtcbiAgICAgICAgICAgIGNvbnRleHQucXVhZHJhdGljQ3VydmVUbyhyeCwgcnkgKyBoZWlnaHQsIHJ4ICsgcmFkaXVzLCByeSArIGhlaWdodCk7XG4gICAgICAgICAgICBjb250ZXh0LmxpbmVUbyhyeCArIHdpZHRoIC0gcmFkaXVzLCByeSArIGhlaWdodCk7XG4gICAgICAgICAgICBjb250ZXh0LnF1YWRyYXRpY0N1cnZlVG8ocnggKyB3aWR0aCwgcnkgKyBoZWlnaHQsIHJ4ICsgd2lkdGgsIHJ5ICsgaGVpZ2h0IC0gcmFkaXVzKTtcbiAgICAgICAgICAgIGNvbnRleHQubGluZVRvKHJ4ICsgd2lkdGgsIHJ5ICsgcmFkaXVzKTtcbiAgICAgICAgICAgIGNvbnRleHQucXVhZHJhdGljQ3VydmVUbyhyeCArIHdpZHRoLCByeSwgcnggKyB3aWR0aCAtIHJhZGl1cywgcnkpO1xuICAgICAgICAgICAgY29udGV4dC5saW5lVG8ocnggKyByYWRpdXMsIHJ5KTtcbiAgICAgICAgICAgIGNvbnRleHQucXVhZHJhdGljQ3VydmVUbyhyeCwgcnksIHJ4LCByeSArIHJhZGl1cyk7XG4gICAgICAgICAgICBjb250ZXh0LmNsb3NlUGF0aCgpO1xuXG4gICAgICAgICAgICBpZiAoZGF0YS5maWxsQ29sb3IgfHwgZGF0YS5maWxsQ29sb3IgPT09IDApXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29udGV4dC5nbG9iYWxBbHBoYSA9IGRhdGEuZmlsbEFscGhhICogd29ybGRBbHBoYTtcbiAgICAgICAgICAgICAgICBjb250ZXh0LmZpbGxTdHlsZSA9ICcjJyArICgnMDAwMDAnICsgKCBmaWxsQ29sb3IgfCAwKS50b1N0cmluZygxNikpLnN1YnN0cigtNik7XG4gICAgICAgICAgICAgICAgY29udGV4dC5maWxsKCk7XG5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChkYXRhLmxpbmVXaWR0aClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb250ZXh0Lmdsb2JhbEFscGhhID0gZGF0YS5saW5lQWxwaGEgKiB3b3JsZEFscGhhO1xuICAgICAgICAgICAgICAgIGNvbnRleHQuc3Ryb2tlU3R5bGUgPSAnIycgKyAoJzAwMDAwJyArICggbGluZUNvbG9yIHwgMCkudG9TdHJpbmcoMTYpKS5zdWJzdHIoLTYpO1xuICAgICAgICAgICAgICAgIGNvbnRleHQuc3Ryb2tlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG59O1xuXG4vKlxuICogUmVuZGVycyBhIGdyYXBoaWNzIG1hc2tcbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIGdyYXBoaWNzIHtQSVhJLkdyYXBoaWNzfSB0aGUgZ3JhcGhpY3Mgd2hpY2ggd2lsbCBiZSB1c2VkIGFzIGEgbWFza1xuICogQHBhcmFtIGNvbnRleHQge0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRH0gdGhlIGNvbnRleHQgMmQgbWV0aG9kIG9mIHRoZSBjYW52YXNcbiAqL1xuQ2FudmFzR3JhcGhpY3MucmVuZGVyR3JhcGhpY3NNYXNrID0gZnVuY3Rpb24gKGdyYXBoaWNzLCBjb250ZXh0KVxue1xuICAgIHZhciBsZW4gPSBncmFwaGljcy5ncmFwaGljc0RhdGEubGVuZ3RoO1xuXG4gICAgaWYgKGxlbiA9PT0gMClcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb250ZXh0LmJlZ2luUGF0aCgpO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47IGkrKylcbiAgICB7XG4gICAgICAgIHZhciBkYXRhID0gZ3JhcGhpY3MuZ3JhcGhpY3NEYXRhW2ldO1xuICAgICAgICB2YXIgc2hhcGUgPSBkYXRhLnNoYXBlO1xuXG4gICAgICAgIGlmIChkYXRhLnR5cGUgPT09IENPTlNULlNIQVBFUy5QT0xZKVxuICAgICAgICB7XG5cbiAgICAgICAgICAgIHZhciBwb2ludHMgPSBzaGFwZS5wb2ludHM7XG5cbiAgICAgICAgICAgIGNvbnRleHQubW92ZVRvKHBvaW50c1swXSwgcG9pbnRzWzFdKTtcblxuICAgICAgICAgICAgZm9yICh2YXIgaj0xOyBqIDwgcG9pbnRzLmxlbmd0aC8yOyBqKyspXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29udGV4dC5saW5lVG8ocG9pbnRzW2ogKiAyXSwgcG9pbnRzW2ogKiAyICsgMV0pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBpZiB0aGUgZmlyc3QgYW5kIGxhc3QgcG9pbnQgYXJlIHRoZSBzYW1lIGNsb3NlIHRoZSBwYXRoIC0gbXVjaCBuZWF0ZXIgOilcbiAgICAgICAgICAgIGlmIChwb2ludHNbMF0gPT09IHBvaW50c1twb2ludHMubGVuZ3RoLTJdICYmIHBvaW50c1sxXSA9PT0gcG9pbnRzW3BvaW50cy5sZW5ndGgtMV0pXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29udGV4dC5jbG9zZVBhdGgoKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGRhdGEudHlwZSA9PT0gQ09OU1QuU0hBUEVTLlJFQ1QpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNvbnRleHQucmVjdChzaGFwZS54LCBzaGFwZS55LCBzaGFwZS53aWR0aCwgc2hhcGUuaGVpZ2h0KTtcbiAgICAgICAgICAgIGNvbnRleHQuY2xvc2VQYXRoKCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoZGF0YS50eXBlID09PSBDT05TVC5TSEFQRVMuQ0lSQylcbiAgICAgICAge1xuICAgICAgICAgICAgLy8gVE9ETyAtIG5lZWQgdG8gYmUgVW5kZWZpbmVkIVxuICAgICAgICAgICAgY29udGV4dC5hcmMoc2hhcGUueCwgc2hhcGUueSwgc2hhcGUucmFkaXVzLCAwLCAyICogTWF0aC5QSSk7XG4gICAgICAgICAgICBjb250ZXh0LmNsb3NlUGF0aCgpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGRhdGEudHlwZSA9PT0gQ09OU1QuU0hBUEVTLkVMSVApXG4gICAgICAgIHtcblxuICAgICAgICAgICAgLy8gZWxsaXBzZSBjb2RlIHRha2VuIGZyb206IGh0dHA6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvMjE3Mjc5OC9ob3ctdG8tZHJhdy1hbi1vdmFsLWluLWh0bWw1LWNhbnZhc1xuXG4gICAgICAgICAgICB2YXIgdyA9IHNoYXBlLndpZHRoICogMjtcbiAgICAgICAgICAgIHZhciBoID0gc2hhcGUuaGVpZ2h0ICogMjtcblxuICAgICAgICAgICAgdmFyIHggPSBzaGFwZS54IC0gdy8yO1xuICAgICAgICAgICAgdmFyIHkgPSBzaGFwZS55IC0gaC8yO1xuXG4gICAgICAgICAgICB2YXIga2FwcGEgPSAwLjU1MjI4NDgsXG4gICAgICAgICAgICAgICAgb3ggPSAodyAvIDIpICoga2FwcGEsIC8vIGNvbnRyb2wgcG9pbnQgb2Zmc2V0IGhvcml6b250YWxcbiAgICAgICAgICAgICAgICBveSA9IChoIC8gMikgKiBrYXBwYSwgLy8gY29udHJvbCBwb2ludCBvZmZzZXQgdmVydGljYWxcbiAgICAgICAgICAgICAgICB4ZSA9IHggKyB3LCAgICAgICAgICAgLy8geC1lbmRcbiAgICAgICAgICAgICAgICB5ZSA9IHkgKyBoLCAgICAgICAgICAgLy8geS1lbmRcbiAgICAgICAgICAgICAgICB4bSA9IHggKyB3IC8gMiwgICAgICAgLy8geC1taWRkbGVcbiAgICAgICAgICAgICAgICB5bSA9IHkgKyBoIC8gMjsgICAgICAgLy8geS1taWRkbGVcblxuICAgICAgICAgICAgY29udGV4dC5tb3ZlVG8oeCwgeW0pO1xuICAgICAgICAgICAgY29udGV4dC5iZXppZXJDdXJ2ZVRvKHgsIHltIC0gb3ksIHhtIC0gb3gsIHksIHhtLCB5KTtcbiAgICAgICAgICAgIGNvbnRleHQuYmV6aWVyQ3VydmVUbyh4bSArIG94LCB5LCB4ZSwgeW0gLSBveSwgeGUsIHltKTtcbiAgICAgICAgICAgIGNvbnRleHQuYmV6aWVyQ3VydmVUbyh4ZSwgeW0gKyBveSwgeG0gKyBveCwgeWUsIHhtLCB5ZSk7XG4gICAgICAgICAgICBjb250ZXh0LmJlemllckN1cnZlVG8oeG0gLSBveCwgeWUsIHgsIHltICsgb3ksIHgsIHltKTtcbiAgICAgICAgICAgIGNvbnRleHQuY2xvc2VQYXRoKCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoZGF0YS50eXBlID09PSBDT05TVC5TSEFQRVMuUlJFQylcbiAgICAgICAge1xuXG4gICAgICAgICAgICB2YXIgcnggPSBzaGFwZS54O1xuICAgICAgICAgICAgdmFyIHJ5ID0gc2hhcGUueTtcbiAgICAgICAgICAgIHZhciB3aWR0aCA9IHNoYXBlLndpZHRoO1xuICAgICAgICAgICAgdmFyIGhlaWdodCA9IHNoYXBlLmhlaWdodDtcbiAgICAgICAgICAgIHZhciByYWRpdXMgPSBzaGFwZS5yYWRpdXM7XG5cbiAgICAgICAgICAgIHZhciBtYXhSYWRpdXMgPSBNYXRoLm1pbih3aWR0aCwgaGVpZ2h0KSAvIDIgfCAwO1xuICAgICAgICAgICAgcmFkaXVzID0gcmFkaXVzID4gbWF4UmFkaXVzID8gbWF4UmFkaXVzIDogcmFkaXVzO1xuXG4gICAgICAgICAgICBjb250ZXh0Lm1vdmVUbyhyeCwgcnkgKyByYWRpdXMpO1xuICAgICAgICAgICAgY29udGV4dC5saW5lVG8ocngsIHJ5ICsgaGVpZ2h0IC0gcmFkaXVzKTtcbiAgICAgICAgICAgIGNvbnRleHQucXVhZHJhdGljQ3VydmVUbyhyeCwgcnkgKyBoZWlnaHQsIHJ4ICsgcmFkaXVzLCByeSArIGhlaWdodCk7XG4gICAgICAgICAgICBjb250ZXh0LmxpbmVUbyhyeCArIHdpZHRoIC0gcmFkaXVzLCByeSArIGhlaWdodCk7XG4gICAgICAgICAgICBjb250ZXh0LnF1YWRyYXRpY0N1cnZlVG8ocnggKyB3aWR0aCwgcnkgKyBoZWlnaHQsIHJ4ICsgd2lkdGgsIHJ5ICsgaGVpZ2h0IC0gcmFkaXVzKTtcbiAgICAgICAgICAgIGNvbnRleHQubGluZVRvKHJ4ICsgd2lkdGgsIHJ5ICsgcmFkaXVzKTtcbiAgICAgICAgICAgIGNvbnRleHQucXVhZHJhdGljQ3VydmVUbyhyeCArIHdpZHRoLCByeSwgcnggKyB3aWR0aCAtIHJhZGl1cywgcnkpO1xuICAgICAgICAgICAgY29udGV4dC5saW5lVG8ocnggKyByYWRpdXMsIHJ5KTtcbiAgICAgICAgICAgIGNvbnRleHQucXVhZHJhdGljQ3VydmVUbyhyeCwgcnksIHJ4LCByeSArIHJhZGl1cyk7XG4gICAgICAgICAgICBjb250ZXh0LmNsb3NlUGF0aCgpO1xuICAgICAgICB9XG4gICAgfVxufTtcblxuLypcbiAqIFVwZGF0ZXMgdGhlIHRpbnQgb2YgYSBncmFwaGljcyBvYmplY3RcbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIGdyYXBoaWNzIHtQSVhJLkdyYXBoaWNzfSB0aGUgZ3JhcGhpY3MgdGhhdCB3aWxsIGhhdmUgaXRzIHRpbnQgdXBkYXRlZFxuICpcbiAqL1xuQ2FudmFzR3JhcGhpY3MudXBkYXRlR3JhcGhpY3NUaW50ID0gZnVuY3Rpb24gKGdyYXBoaWNzKVxue1xuICAgIGlmIChncmFwaGljcy50aW50ID09PSAweEZGRkZGRiAmJiBncmFwaGljcy5fcHJldlRpbnQgPT09IGdyYXBoaWNzLnRpbnQpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIGdyYXBoaWNzLl9wcmV2VGludCA9IGdyYXBoaWNzLnRpbnQ7XG5cbiAgICB2YXIgdGludFIgPSAoZ3JhcGhpY3MudGludCA+PiAxNiAmIDB4RkYpIC8gMjU1O1xuICAgIHZhciB0aW50RyA9IChncmFwaGljcy50aW50ID4+IDggJiAweEZGKSAvIDI1NTtcbiAgICB2YXIgdGludEIgPSAoZ3JhcGhpY3MudGludCAmIDB4RkYpLyAyNTU7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGdyYXBoaWNzLmdyYXBoaWNzRGF0YS5sZW5ndGg7IGkrKylcbiAgICB7XG4gICAgICAgIHZhciBkYXRhID0gZ3JhcGhpY3MuZ3JhcGhpY3NEYXRhW2ldO1xuXG4gICAgICAgIHZhciBmaWxsQ29sb3IgPSBkYXRhLmZpbGxDb2xvciB8IDA7XG4gICAgICAgIHZhciBsaW5lQ29sb3IgPSBkYXRhLmxpbmVDb2xvciB8IDA7XG5cbiAgICAgICAgLypcbiAgICAgICAgdmFyIGNvbG9yUiA9IChmaWxsQ29sb3IgPj4gMTYgJiAweEZGKSAvIDI1NTtcbiAgICAgICAgdmFyIGNvbG9yRyA9IChmaWxsQ29sb3IgPj4gOCAmIDB4RkYpIC8gMjU1O1xuICAgICAgICB2YXIgY29sb3JCID0gKGZpbGxDb2xvciAmIDB4RkYpIC8gMjU1O1xuXG4gICAgICAgIGNvbG9yUiAqPSB0aW50UjtcbiAgICAgICAgY29sb3JHICo9IHRpbnRHO1xuICAgICAgICBjb2xvckIgKj0gdGludEI7XG5cbiAgICAgICAgZmlsbENvbG9yID0gKChjb2xvclIqMjU1IDw8IDE2KSArIChjb2xvckcqMjU1IDw8IDgpICsgY29sb3JCKjI1NSk7XG5cbiAgICAgICAgY29sb3JSID0gKGxpbmVDb2xvciA+PiAxNiAmIDB4RkYpIC8gMjU1O1xuICAgICAgICBjb2xvckcgPSAobGluZUNvbG9yID4+IDggJiAweEZGKSAvIDI1NTtcbiAgICAgICAgY29sb3JCID0gKGxpbmVDb2xvciAmIDB4RkYpIC8gMjU1O1xuXG4gICAgICAgIGNvbG9yUiAqPSB0aW50UjtcbiAgICAgICAgY29sb3JHICo9IHRpbnRHO1xuICAgICAgICBjb2xvckIgKj0gdGludEI7XG5cbiAgICAgICAgbGluZUNvbG9yID0gKChjb2xvclIqMjU1IDw8IDE2KSArIChjb2xvckcqMjU1IDw8IDgpICsgY29sb3JCKjI1NSk7XG4gICAgICAgICovXG5cbiAgICAgICAgLy8gc3VwZXIgaW5saW5lIGNvcyBpbSBhbiBvcHRpbWl6YXRpb24gTkFaSSA6KVxuICAgICAgICBkYXRhLl9maWxsVGludCA9ICgoKGZpbGxDb2xvciA+PiAxNiAmIDB4RkYpIC8gMjU1ICogdGludFIqMjU1IDw8IDE2KSArICgoZmlsbENvbG9yID4+IDggJiAweEZGKSAvIDI1NSAqIHRpbnRHKjI1NSA8PCA4KSArICAoZmlsbENvbG9yICYgMHhGRikgLyAyNTUgKiB0aW50QioyNTUpO1xuICAgICAgICBkYXRhLl9saW5lVGludCA9ICgoKGxpbmVDb2xvciA+PiAxNiAmIDB4RkYpIC8gMjU1ICogdGludFIqMjU1IDw8IDE2KSArICgobGluZUNvbG9yID4+IDggJiAweEZGKSAvIDI1NSAqIHRpbnRHKjI1NSA8PCA4KSArICAobGluZUNvbG9yICYgMHhGRikgLyAyNTUgKiB0aW50QioyNTUpO1xuXG4gICAgfVxufTtcblxuIiwidmFyIENhbnZhc0dyYXBoaWNzID0gcmVxdWlyZSgnLi9DYW52YXNHcmFwaGljcycpO1xuXG4vKipcbiAqIEEgc2V0IG9mIGZ1bmN0aW9ucyB1c2VkIHRvIGhhbmRsZSBtYXNraW5nLlxuICpcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqL1xuZnVuY3Rpb24gQ2FudmFzTWFza01hbmFnZXIoKVxue31cblxuQ2FudmFzTWFza01hbmFnZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gQ2FudmFzTWFza01hbmFnZXI7XG5tb2R1bGUuZXhwb3J0cyA9IENhbnZhc01hc2tNYW5hZ2VyO1xuXG4vKipcbiAqIFRoaXMgbWV0aG9kIGFkZHMgaXQgdG8gdGhlIGN1cnJlbnQgc3RhY2sgb2YgbWFza3MuXG4gKlxuICogQHBhcmFtIG1hc2tEYXRhIHtvYmplY3R9IHRoZSBtYXNrRGF0YSB0aGF0IHdpbGwgYmUgcHVzaGVkXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcnxQSVhJLkNhbnZhc1JlbmRlcmVyfSBUaGUgcmVuZGVyZXIgY29udGV4dCB0byB1c2UuXG4gKi9cbkNhbnZhc01hc2tNYW5hZ2VyLnByb3RvdHlwZS5wdXNoTWFzayA9IGZ1bmN0aW9uIChtYXNrRGF0YSwgcmVuZGVyZXIpXG57XG5cbiAgICByZW5kZXJlci5jb250ZXh0LnNhdmUoKTtcblxuICAgIHZhciBjYWNoZUFscGhhID0gbWFza0RhdGEuYWxwaGE7XG4gICAgdmFyIHRyYW5zZm9ybSA9IG1hc2tEYXRhLndvcmxkVHJhbnNmb3JtO1xuICAgIHZhciByZXNvbHV0aW9uID0gcmVuZGVyZXIucmVzb2x1dGlvbjtcblxuICAgIHJlbmRlcmVyLmNvbnRleHQuc2V0VHJhbnNmb3JtKFxuICAgICAgICB0cmFuc2Zvcm0uYSAqIHJlc29sdXRpb24sXG4gICAgICAgIHRyYW5zZm9ybS5iICogcmVzb2x1dGlvbixcbiAgICAgICAgdHJhbnNmb3JtLmMgKiByZXNvbHV0aW9uLFxuICAgICAgICB0cmFuc2Zvcm0uZCAqIHJlc29sdXRpb24sXG4gICAgICAgIHRyYW5zZm9ybS50eCAqIHJlc29sdXRpb24sXG4gICAgICAgIHRyYW5zZm9ybS50eSAqIHJlc29sdXRpb25cbiAgICApO1xuXG4gICAgLy9UT0RPIHN1cG9ydCBzcHJpdGUgYWxwaGEgbWFza3M/P1xuICAgIC8vbG90cyBvZiBlZmZvcnQgcmVxdWlyZWQuIElmIGRlbWFuZCBpcyBncmVhdCBlbm91Z2guLlxuICAgIGlmKCFtYXNrRGF0YS50ZXh0dXJlKVxuICAgIHtcbiAgICAgICAgQ2FudmFzR3JhcGhpY3MucmVuZGVyR3JhcGhpY3NNYXNrKG1hc2tEYXRhLCByZW5kZXJlci5jb250ZXh0KTtcbiAgICAgICAgcmVuZGVyZXIuY29udGV4dC5jbGlwKCk7XG4gICAgfVxuXG4gICAgbWFza0RhdGEud29ybGRBbHBoYSA9IGNhY2hlQWxwaGE7XG59O1xuXG4vKipcbiAqIFJlc3RvcmVzIHRoZSBjdXJyZW50IGRyYXdpbmcgY29udGV4dCB0byB0aGUgc3RhdGUgaXQgd2FzIGJlZm9yZSB0aGUgbWFzayB3YXMgYXBwbGllZC5cbiAqXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcnxQSVhJLkNhbnZhc1JlbmRlcmVyfSBUaGUgcmVuZGVyZXIgY29udGV4dCB0byB1c2UuXG4gKi9cbkNhbnZhc01hc2tNYW5hZ2VyLnByb3RvdHlwZS5wb3BNYXNrID0gZnVuY3Rpb24gKHJlbmRlcmVyKVxue1xuICAgIHJlbmRlcmVyLmNvbnRleHQucmVzdG9yZSgpO1xufTtcblxuQ2FudmFzTWFza01hbmFnZXIucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoKSB7fTtcbiIsInZhciB1dGlscyA9IHJlcXVpcmUoJy4uLy4uLy4uL3V0aWxzJyk7XG5cbi8qKlxuICogVXRpbGl0eSBtZXRob2RzIGZvciBTcHJpdGUvVGV4dHVyZSB0aW50aW5nLlxuICogQHN0YXRpY1xuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICovXG52YXIgQ2FudmFzVGludGVyID0ge307XG5tb2R1bGUuZXhwb3J0cyA9IENhbnZhc1RpbnRlcjtcblxuLyoqXG4gKiBCYXNpY2FsbHkgdGhpcyBtZXRob2QganVzdCBuZWVkcyBhIHNwcml0ZSBhbmQgYSBjb2xvciBhbmQgdGludHMgdGhlIHNwcml0ZSB3aXRoIHRoZSBnaXZlbiBjb2xvci5cbiAqXG4gKiBAcGFyYW0gc3ByaXRlIHtQSVhJLlNwcml0ZX0gdGhlIHNwcml0ZSB0byB0aW50XG4gKiBAcGFyYW0gY29sb3Ige251bWJlcn0gdGhlIGNvbG9yIHRvIHVzZSB0byB0aW50IHRoZSBzcHJpdGUgd2l0aFxuICogQHJldHVybiB7SFRNTENhbnZhc0VsZW1lbnR9IFRoZSB0aW50ZWQgY2FudmFzXG4gKi9cbkNhbnZhc1RpbnRlci5nZXRUaW50ZWRUZXh0dXJlID0gZnVuY3Rpb24gKHNwcml0ZSwgY29sb3IpXG57XG4gICAgdmFyIHRleHR1cmUgPSBzcHJpdGUudGV4dHVyZTtcblxuICAgIGNvbG9yID0gQ2FudmFzVGludGVyLnJvdW5kQ29sb3IoY29sb3IpO1xuXG4gICAgdmFyIHN0cmluZ0NvbG9yID0gJyMnICsgKCcwMDAwMCcgKyAoIGNvbG9yIHwgMCkudG9TdHJpbmcoMTYpKS5zdWJzdHIoLTYpO1xuXG4gICAgdGV4dHVyZS50aW50Q2FjaGUgPSB0ZXh0dXJlLnRpbnRDYWNoZSB8fCB7fTtcblxuICAgIGlmICh0ZXh0dXJlLnRpbnRDYWNoZVtzdHJpbmdDb2xvcl0pXG4gICAge1xuICAgICAgICByZXR1cm4gdGV4dHVyZS50aW50Q2FjaGVbc3RyaW5nQ29sb3JdO1xuICAgIH1cblxuICAgICAvLyBjbG9uZSB0ZXh0dXJlLi5cbiAgICB2YXIgY2FudmFzID0gQ2FudmFzVGludGVyLmNhbnZhcyB8fCBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdjYW52YXMnKTtcblxuICAgIC8vQ2FudmFzVGludGVyLnRpbnRXaXRoUGVyUGl4ZWwodGV4dHVyZSwgc3RyaW5nQ29sb3IsIGNhbnZhcyk7XG4gICAgQ2FudmFzVGludGVyLnRpbnRNZXRob2QodGV4dHVyZSwgY29sb3IsIGNhbnZhcyk7XG5cbiAgICBpZiAoQ2FudmFzVGludGVyLmNvbnZlcnRUaW50VG9JbWFnZSlcbiAgICB7XG4gICAgICAgIC8vIGlzIHRoaXMgYmV0dGVyP1xuICAgICAgICB2YXIgdGludEltYWdlID0gbmV3IEltYWdlKCk7XG4gICAgICAgIHRpbnRJbWFnZS5zcmMgPSBjYW52YXMudG9EYXRhVVJMKCk7XG5cbiAgICAgICAgdGV4dHVyZS50aW50Q2FjaGVbc3RyaW5nQ29sb3JdID0gdGludEltYWdlO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICB0ZXh0dXJlLnRpbnRDYWNoZVtzdHJpbmdDb2xvcl0gPSBjYW52YXM7XG4gICAgICAgIC8vIGlmIHdlIGFyZSBub3QgY29udmVydGluZyB0aGUgdGV4dHVyZSB0byBhbiBpbWFnZSB0aGVuIHdlIG5lZWQgdG8gbG9zZSB0aGUgcmVmZXJlbmNlIHRvIHRoZSBjYW52YXNcbiAgICAgICAgQ2FudmFzVGludGVyLmNhbnZhcyA9IG51bGw7XG4gICAgfVxuXG4gICAgcmV0dXJuIGNhbnZhcztcbn07XG5cbi8qKlxuICogVGludCBhIHRleHR1cmUgdXNpbmcgdGhlICdtdWx0aXBseScgb3BlcmF0aW9uLlxuICpcbiAqIEBwYXJhbSB0ZXh0dXJlIHtQSVhJLlRleHR1cmV9IHRoZSB0ZXh0dXJlIHRvIHRpbnRcbiAqIEBwYXJhbSBjb2xvciB7bnVtYmVyfSB0aGUgY29sb3IgdG8gdXNlIHRvIHRpbnQgdGhlIHNwcml0ZSB3aXRoXG4gKiBAcGFyYW0gY2FudmFzIHtIVE1MQ2FudmFzRWxlbWVudH0gdGhlIGN1cnJlbnQgY2FudmFzXG4gKi9cbkNhbnZhc1RpbnRlci50aW50V2l0aE11bHRpcGx5ID0gZnVuY3Rpb24gKHRleHR1cmUsIGNvbG9yLCBjYW52YXMpXG57XG4gICAgdmFyIGNvbnRleHQgPSBjYW52YXMuZ2V0Q29udGV4dCggJzJkJyApO1xuXG4gICAgdmFyIHJlc29sdXRpb24gPSB0ZXh0dXJlLmJhc2VUZXh0dXJlLnJlc29sdXRpb247XG5cbiAgICB2YXIgY3JvcCA9IHRleHR1cmUuY3JvcC5jbG9uZSgpO1xuICAgIGNyb3AueCAqPSByZXNvbHV0aW9uO1xuICAgIGNyb3AueSAqPSByZXNvbHV0aW9uO1xuICAgIGNyb3Aud2lkdGggKj0gcmVzb2x1dGlvbjtcbiAgICBjcm9wLmhlaWdodCAqPSByZXNvbHV0aW9uO1xuXG4gICAgY2FudmFzLndpZHRoID0gY3JvcC53aWR0aDtcbiAgICBjYW52YXMuaGVpZ2h0ID0gY3JvcC5oZWlnaHQ7XG5cbiAgICBjb250ZXh0LmZpbGxTdHlsZSA9ICcjJyArICgnMDAwMDAnICsgKCBjb2xvciB8IDApLnRvU3RyaW5nKDE2KSkuc3Vic3RyKC02KTtcblxuICAgIGNvbnRleHQuZmlsbFJlY3QoMCwgMCwgY3JvcC53aWR0aCwgY3JvcC5oZWlnaHQpO1xuXG4gICAgY29udGV4dC5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb24gPSAnbXVsdGlwbHknO1xuXG4gICAgY29udGV4dC5kcmF3SW1hZ2UoXG4gICAgICAgIHRleHR1cmUuYmFzZVRleHR1cmUuc291cmNlLFxuICAgICAgICBjcm9wLngsXG4gICAgICAgIGNyb3AueSxcbiAgICAgICAgY3JvcC53aWR0aCxcbiAgICAgICAgY3JvcC5oZWlnaHQsXG4gICAgICAgIDAsXG4gICAgICAgIDAsXG4gICAgICAgIGNyb3Aud2lkdGgsXG4gICAgICAgIGNyb3AuaGVpZ2h0XG4gICAgKTtcblxuICAgIGNvbnRleHQuZ2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uID0gJ2Rlc3RpbmF0aW9uLWF0b3AnO1xuXG4gICAgY29udGV4dC5kcmF3SW1hZ2UoXG4gICAgICAgIHRleHR1cmUuYmFzZVRleHR1cmUuc291cmNlLFxuICAgICAgICBjcm9wLngsXG4gICAgICAgIGNyb3AueSxcbiAgICAgICAgY3JvcC53aWR0aCxcbiAgICAgICAgY3JvcC5oZWlnaHQsXG4gICAgICAgIDAsXG4gICAgICAgIDAsXG4gICAgICAgIGNyb3Aud2lkdGgsXG4gICAgICAgIGNyb3AuaGVpZ2h0XG4gICAgKTtcbn07XG5cbi8qKlxuICogVGludCBhIHRleHR1cmUgdXNpbmcgdGhlICdvdmVybGF5JyBvcGVyYXRpb24uXG4gKlxuICogQHBhcmFtIHRleHR1cmUge1BJWEkuVGV4dHVyZX0gdGhlIHRleHR1cmUgdG8gdGludFxuICogQHBhcmFtIGNvbG9yIHtudW1iZXJ9IHRoZSBjb2xvciB0byB1c2UgdG8gdGludCB0aGUgc3ByaXRlIHdpdGhcbiAqIEBwYXJhbSBjYW52YXMge0hUTUxDYW52YXNFbGVtZW50fSB0aGUgY3VycmVudCBjYW52YXNcbiAqL1xuQ2FudmFzVGludGVyLnRpbnRXaXRoT3ZlcmxheSA9IGZ1bmN0aW9uICh0ZXh0dXJlLCBjb2xvciwgY2FudmFzKVxue1xuICAgIHZhciBjb250ZXh0ID0gY2FudmFzLmdldENvbnRleHQoICcyZCcgKTtcblxuICAgIHZhciByZXNvbHV0aW9uID0gdGV4dHVyZS5iYXNlVGV4dHVyZS5yZXNvbHV0aW9uO1xuXG4gICAgdmFyIGNyb3AgPSB0ZXh0dXJlLmNyb3AuY2xvbmUoKTtcbiAgICBjcm9wLnggKj0gcmVzb2x1dGlvbjtcbiAgICBjcm9wLnkgKj0gcmVzb2x1dGlvbjtcbiAgICBjcm9wLndpZHRoICo9IHJlc29sdXRpb247XG4gICAgY3JvcC5oZWlnaHQgKj0gcmVzb2x1dGlvbjtcblxuICAgIGNhbnZhcy53aWR0aCA9IGNyb3Aud2lkdGg7XG4gICAgY2FudmFzLmhlaWdodCA9IGNyb3AuaGVpZ2h0O1xuXG4gICAgY29udGV4dC5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb24gPSAnY29weSc7XG4gICAgY29udGV4dC5maWxsU3R5bGUgPSAnIycgKyAoJzAwMDAwJyArICggY29sb3IgfCAwKS50b1N0cmluZygxNikpLnN1YnN0cigtNik7XG4gICAgY29udGV4dC5maWxsUmVjdCgwLCAwLCBjcm9wLndpZHRoLCBjcm9wLmhlaWdodCk7XG5cbiAgICBjb250ZXh0Lmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbiA9ICdkZXN0aW5hdGlvbi1hdG9wJztcbiAgICBjb250ZXh0LmRyYXdJbWFnZShcbiAgICAgICAgdGV4dHVyZS5iYXNlVGV4dHVyZS5zb3VyY2UsXG4gICAgICAgIGNyb3AueCxcbiAgICAgICAgY3JvcC55LFxuICAgICAgICBjcm9wLndpZHRoLFxuICAgICAgICBjcm9wLmhlaWdodCxcbiAgICAgICAgMCxcbiAgICAgICAgMCxcbiAgICAgICAgY3JvcC53aWR0aCxcbiAgICAgICAgY3JvcC5oZWlnaHRcbiAgICApO1xuXG4gICAgLy8gY29udGV4dC5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb24gPSAnY29weSc7XG59O1xuXG4vKipcbiAqIFRpbnQgYSB0ZXh0dXJlIHBpeGVsIHBlciBwaXhlbC5cbiAqXG4gKiBAcGFyYW0gdGV4dHVyZSB7UElYSS5UZXh0dXJlfSB0aGUgdGV4dHVyZSB0byB0aW50XG4gKiBAcGFyYW0gY29sb3Ige251bWJlcn0gdGhlIGNvbG9yIHRvIHVzZSB0byB0aW50IHRoZSBzcHJpdGUgd2l0aFxuICogQHBhcmFtIGNhbnZhcyB7SFRNTENhbnZhc0VsZW1lbnR9IHRoZSBjdXJyZW50IGNhbnZhc1xuICovXG5DYW52YXNUaW50ZXIudGludFdpdGhQZXJQaXhlbCA9IGZ1bmN0aW9uICh0ZXh0dXJlLCBjb2xvciwgY2FudmFzKVxue1xuICAgIHZhciBjb250ZXh0ID0gY2FudmFzLmdldENvbnRleHQoICcyZCcgKTtcblxuICAgIHZhciByZXNvbHV0aW9uID0gdGV4dHVyZS5iYXNlVGV4dHVyZS5yZXNvbHV0aW9uO1xuXG4gICAgdmFyIGNyb3AgPSB0ZXh0dXJlLmNyb3AuY2xvbmUoKTtcbiAgICBjcm9wLnggKj0gcmVzb2x1dGlvbjtcbiAgICBjcm9wLnkgKj0gcmVzb2x1dGlvbjtcbiAgICBjcm9wLndpZHRoICo9IHJlc29sdXRpb247XG4gICAgY3JvcC5oZWlnaHQgKj0gcmVzb2x1dGlvbjtcblxuICAgIGNhbnZhcy53aWR0aCA9IGNyb3Aud2lkdGg7XG4gICAgY2FudmFzLmhlaWdodCA9IGNyb3AuaGVpZ2h0O1xuXG4gICAgY29udGV4dC5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb24gPSAnY29weSc7XG4gICAgY29udGV4dC5kcmF3SW1hZ2UoXG4gICAgICAgIHRleHR1cmUuYmFzZVRleHR1cmUuc291cmNlLFxuICAgICAgICBjcm9wLngsXG4gICAgICAgIGNyb3AueSxcbiAgICAgICAgY3JvcC53aWR0aCxcbiAgICAgICAgY3JvcC5oZWlnaHQsXG4gICAgICAgIDAsXG4gICAgICAgIDAsXG4gICAgICAgIGNyb3Aud2lkdGgsXG4gICAgICAgIGNyb3AuaGVpZ2h0XG4gICAgKTtcblxuICAgIHZhciByZ2JWYWx1ZXMgPSB1dGlscy5oZXgycmdiKGNvbG9yKTtcbiAgICB2YXIgciA9IHJnYlZhbHVlc1swXSwgZyA9IHJnYlZhbHVlc1sxXSwgYiA9IHJnYlZhbHVlc1syXTtcblxuICAgIHZhciBwaXhlbERhdGEgPSBjb250ZXh0LmdldEltYWdlRGF0YSgwLCAwLCBjcm9wLndpZHRoLCBjcm9wLmhlaWdodCk7XG5cbiAgICB2YXIgcGl4ZWxzID0gcGl4ZWxEYXRhLmRhdGE7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHBpeGVscy5sZW5ndGg7IGkgKz0gNClcbiAgICB7XG4gICAgICAgIHBpeGVsc1tpKzBdICo9IHI7XG4gICAgICAgIHBpeGVsc1tpKzFdICo9IGc7XG4gICAgICAgIHBpeGVsc1tpKzJdICo9IGI7XG4gICAgfVxuXG4gICAgY29udGV4dC5wdXRJbWFnZURhdGEocGl4ZWxEYXRhLCAwLCAwKTtcbn07XG5cbi8qKlxuICogUm91bmRzIHRoZSBzcGVjaWZpZWQgY29sb3IgYWNjb3JkaW5nIHRvIHRoZSBDYW52YXNUaW50ZXIuY2FjaGVTdGVwc1BlckNvbG9yQ2hhbm5lbC5cbiAqXG4gKiBAcGFyYW0gY29sb3Ige251bWJlcn0gdGhlIGNvbG9yIHRvIHJvdW5kLCBzaG91bGQgYmUgYSBoZXggY29sb3JcbiAqL1xuQ2FudmFzVGludGVyLnJvdW5kQ29sb3IgPSBmdW5jdGlvbiAoY29sb3IpXG57XG4gICAgdmFyIHN0ZXAgPSBDYW52YXNUaW50ZXIuY2FjaGVTdGVwc1BlckNvbG9yQ2hhbm5lbDtcblxuICAgIHZhciByZ2JWYWx1ZXMgPSB1dGlscy5oZXgycmdiKGNvbG9yKTtcblxuICAgIHJnYlZhbHVlc1swXSA9IE1hdGgubWluKDI1NSwgKHJnYlZhbHVlc1swXSAvIHN0ZXApICogc3RlcCk7XG4gICAgcmdiVmFsdWVzWzFdID0gTWF0aC5taW4oMjU1LCAocmdiVmFsdWVzWzFdIC8gc3RlcCkgKiBzdGVwKTtcbiAgICByZ2JWYWx1ZXNbMl0gPSBNYXRoLm1pbigyNTUsIChyZ2JWYWx1ZXNbMl0gLyBzdGVwKSAqIHN0ZXApO1xuXG4gICAgcmV0dXJuIHV0aWxzLnJnYjJoZXgocmdiVmFsdWVzKTtcbn07XG5cbi8qKlxuICogTnVtYmVyIG9mIHN0ZXBzIHdoaWNoIHdpbGwgYmUgdXNlZCBhcyBhIGNhcCB3aGVuIHJvdW5kaW5nIGNvbG9ycy5cbiAqXG4gKiBAbWVtYmVyXG4gKi9cbkNhbnZhc1RpbnRlci5jYWNoZVN0ZXBzUGVyQ29sb3JDaGFubmVsID0gODtcblxuLyoqXG4gKiBUaW50IGNhY2hlIGJvb2xlYW4gZmxhZy5cbiAqXG4gKiBAbWVtYmVyXG4gKi9cbkNhbnZhc1RpbnRlci5jb252ZXJ0VGludFRvSW1hZ2UgPSBmYWxzZTtcblxuLyoqXG4gKiBXaGV0aGVyIG9yIG5vdCB0aGUgQ2FudmFzIEJsZW5kTW9kZXMgYXJlIHN1cHBvcnRlZCwgY29uc2VxdWVudGx5IHRoZSBhYmlsaXR5IHRvIHRpbnQgdXNpbmcgdGhlIG11bHRpcGx5IG1ldGhvZC5cbiAqXG4gKiBAbWVtYmVyXG4gKi9cbkNhbnZhc1RpbnRlci5jYW5Vc2VNdWx0aXBseSA9IHV0aWxzLmNhblVzZU5ld0NhbnZhc0JsZW5kTW9kZXMoKTtcblxuLyoqXG4gKiBUaGUgdGludGluZyBtZXRob2QgdGhhdCB3aWxsIGJlIHVzZWQuXG4gKlxuICovXG5DYW52YXNUaW50ZXIudGludE1ldGhvZCA9IENhbnZhc1RpbnRlci5jYW5Vc2VNdWx0aXBseSA/IENhbnZhc1RpbnRlci50aW50V2l0aE11bHRpcGx5IDogIENhbnZhc1RpbnRlci50aW50V2l0aFBlclBpeGVsO1xuIiwidmFyIEdMVGV4dHVyZSA9IHJlcXVpcmUoJ3BpeGktZ2wtY29yZScpLkdMVGV4dHVyZSxcblx0dXRpbHMgPSByZXF1aXJlKCcuLi8uLi91dGlscycpO1xuXG4vKipcbiAqIEhlbHBlciBjbGFzcyB0byBjcmVhdGUgYSB3ZWJHTCBUZXh0dXJlXG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIGdsIHtXZWJHTFJlbmRlcmluZ0NvbnRleHR9XG4gKi9cblxudmFyIFRleHR1cmVNYW5hZ2VyID0gZnVuY3Rpb24oZ2wpXG57XG5cdHRoaXMuZ2wgPSBnbDtcblxuXHQvLyB0cmFjayB0ZXh0dXJlcyBpbiB0aGUgcmVuZGVyZXIgc28gd2UgY2FuIG5vIGxvbmdlciBsaXN0ZW4gdG8gdGhlbSBvbiBkZXN0cnVjdGlvbi5cblx0dGhpcy5fbWFuYWdlZFRleHR1cmVzID0gW107XG4gICAgdGhpcy5nbFRleHR1cmVzID0ge307XG5cbn1cblxuVGV4dHVyZU1hbmFnZXIucHJvdG90eXBlLmJpbmRUZXh0dXJlID0gZnVuY3Rpb24odGV4dHVyZSlcbntcblxufVxuXG5cblRleHR1cmVNYW5hZ2VyLnByb3RvdHlwZS5nZXRUZXh0dXJlID0gZnVuY3Rpb24odGV4dHVyZSlcbntcblxufVxuXG4vKipcbiAqIFVwZGF0ZXMgYW5kL29yIENyZWF0ZXMgYSBXZWJHTCB0ZXh0dXJlIGZvciB0aGUgcmVuZGVyZXIncyBjb250ZXh0LlxuICpcbiAqIEBwYXJhbSB0ZXh0dXJlIHtQSVhJLkJhc2VUZXh0dXJlfFBJWEkuVGV4dHVyZX0gdGhlIHRleHR1cmUgdG8gdXBkYXRlXG4gKi9cblRleHR1cmVNYW5hZ2VyLnByb3RvdHlwZS51cGRhdGVUZXh0dXJlID0gZnVuY3Rpb24odGV4dHVyZSlcbntcblx0dGV4dHVyZSA9IHRleHR1cmUuYmFzZVRleHR1cmUgfHwgdGV4dHVyZTtcblxuXHRpZiAoIXRleHR1cmUuaGFzTG9hZGVkKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIFxuICAgIHZhciBnbCA9IHRoaXMuZ2w7XG4gICAgdmFyIGdsVGV4dHVyZSA9IHRoaXMuZ2xUZXh0dXJlc1t0ZXh0dXJlLnVpZF0vL3RleHR1cmUuX2dsVGV4dHVyZXNbZ2wuaWRdO1xuXG4gICAgaWYgKCFnbFRleHR1cmUpXG4gICAge1xuICAgICAgICBnbFRleHR1cmUgPSBuZXcgR0xUZXh0dXJlKGdsKTtcbiAgICAgICAgZ2xUZXh0dXJlLnByZW11bHRpcGx5QWxwaGEgPSB0cnVlXG4gICAgICAgIHRleHR1cmUuX2dsVGV4dHVyZXNbZ2wuaWRdID0gZ2xUZXh0dXJlO1xuXG4gICAgICAgLy8gdGhpcy5nbFRleHR1cmVzW3RleHR1cmUudWlkXSA9IGdsVGV4dHVyZTtcblxuICAgICAgICB0ZXh0dXJlLm9uKCd1cGRhdGUnLCB0aGlzLnVwZGF0ZVRleHR1cmUsIHRoaXMpO1xuICAgICAgICB0ZXh0dXJlLm9uKCdkaXNwb3NlJywgdGhpcy5kZXN0cm95VGV4dHVyZSwgdGhpcyk7XG4gICAgICAgIFxuICAgICAgICB0aGlzLl9tYW5hZ2VkVGV4dHVyZXMucHVzaCh0ZXh0dXJlKTtcbiAgICB9XG5cbiAgICBnbFRleHR1cmUudXBsb2FkKHRleHR1cmUuc291cmNlKTtcbiAgICBcbiAgICAvL1RPRE8gY2hlY2sgaXMgcG93ZXIgb2YgdHdvLi5cbiAgICBnbFRleHR1cmUuZW5hYmxlV3JhcENsYW1wKCk7XG5cblxuICAgIC8vIFRPRE8gY2hlY2sgZm9yIHNjYWxpbmcgdHlwZVxuICAgIGdsVGV4dHVyZS5lbmFibGVMaW5lYXJTY2FsaW5nKCk7XG5cbiAgICByZXR1cm4gIHRleHR1cmUuX2dsVGV4dHVyZXNbZ2wuaWRdO1xufVxuXG4vKipcbiAqIERlbGV0ZXMgdGhlIHRleHR1cmUgZnJvbSBXZWJHTFxuICpcbiAqIEBwYXJhbSB0ZXh0dXJlIHtQSVhJLkJhc2VUZXh0dXJlfFBJWEkuVGV4dHVyZX0gdGhlIHRleHR1cmUgdG8gZGVzdHJveVxuICovXG5UZXh0dXJlTWFuYWdlci5wcm90b3R5cGUuZGVzdHJveVRleHR1cmUgPSBmdW5jdGlvbih0ZXh0dXJlLCBfc2tpcFJlbW92ZSlcbntcblx0dGV4dHVyZSA9IHRleHR1cmUuYmFzZVRleHR1cmUgfHwgdGV4dHVyZTtcblxuICAgIGlmICghdGV4dHVyZS5oYXNMb2FkZWQpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHRleHR1cmUuX2dsVGV4dHVyZXNbdGhpcy5nbC5pZF0pXG4gICAge1xuICAgICAgICB0ZXh0dXJlLl9nbFRleHR1cmVzW3RoaXMuZ2wuaWRdLmRlc3Ryb3koKTtcbiAgICAgICAgdGV4dHVyZS5vZmYoJ3VwZGF0ZScsIHRoaXMudXBkYXRlVGV4dHVyZSwgdGhpcyk7XG4gICAgICAgIHRleHR1cmUub2ZmKCdkaXNwb3NlJywgdGhpcy5kZXN0cm95VGV4dHVyZSwgdGhpcyk7XG5cblxuICAgICAgICBkZWxldGUgdGV4dHVyZS5fZ2xUZXh0dXJlc1t0aGlzLmdsLmlkXTtcblxuICAgICAgICBpZiAoIV9za2lwUmVtb3ZlKVxuICAgICAgICB7XG4gICAgICAgICAgICB2YXIgaSA9IHRoaXMuX21hbmFnZWRUZXh0dXJlcy5pbmRleE9mKHRleHR1cmUpO1xuICAgICAgICAgICAgaWYgKGkgIT09IC0xKSB7XG4gICAgICAgICAgICAgICAgdXRpbHMucmVtb3ZlSXRlbXModGhpcy5fbWFuYWdlZFRleHR1cmVzLCBpLCAxKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn1cblxuVGV4dHVyZU1hbmFnZXIucHJvdG90eXBlLnJlbW92ZUFsbCA9IGZ1bmN0aW9uKClcbntcblx0Ly8gZW1wdHkgYWxsIHRoZSBvbGQgZ2wgdGV4dHVyZXMgYXMgdGhleSBhcmUgdXNlbGVzcyBub3dcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuX21hbmFnZWRUZXh0dXJlcy5sZW5ndGg7ICsraSlcbiAgICB7XG4gICAgICAgIHZhciB0ZXh0dXJlID0gdGhpcy5fbWFuYWdlZFRleHR1cmVzW2ldO1xuICAgICAgICBpZiAodGV4dHVyZS5fZ2xUZXh0dXJlc1t0aGlzLmdsLmlkXSlcbiAgICAgICAge1xuICAgICAgICAgICAgZGVsZXRlIHRleHR1cmUuX2dsVGV4dHVyZXNbdGhpcy5nbC5pZF07XG4gICAgICAgIH1cbiAgICB9XG59XG5cblRleHR1cmVNYW5hZ2VyLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24oKVxue1xuICAgIC8vIGRlc3Ryb3kgbWFuYWdlZCB0ZXh0dXJlc1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5fbWFuYWdlZFRleHR1cmVzLmxlbmd0aDsgKytpKVxuICAgIHtcbiAgICAgICAgdmFyIHRleHR1cmUgPSB0aGlzLl9tYW5hZ2VkVGV4dHVyZXNbaV07XG4gICAgICAgIHRoaXMuZGVzdHJveVRleHR1cmUodGV4dHVyZSwgdHJ1ZSk7XG4gICAgICAgIHRleHR1cmUub2ZmKCd1cGRhdGUnLCB0aGlzLnVwZGF0ZVRleHR1cmUsIHRoaXMpO1xuICAgICAgICB0ZXh0dXJlLm9mZignZGlzcG9zZScsIHRoaXMuZGVzdHJveVRleHR1cmUsIHRoaXMpO1xuICAgIH1cblxuICAgIHRoaXMuX21hbmFnZWRUZXh0dXJlcyA9IG51bGw7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gVGV4dHVyZU1hbmFnZXI7XG5cbiIsInZhciBTeXN0ZW1SZW5kZXJlciA9IHJlcXVpcmUoJy4uL1N5c3RlbVJlbmRlcmVyJyksXG4gICAgU2hhZGVyTWFuYWdlciA9IHJlcXVpcmUoJy4vbWFuYWdlcnMvU2hhZGVyTWFuYWdlcicpLFxuICAgIE1hc2tNYW5hZ2VyID0gcmVxdWlyZSgnLi9tYW5hZ2Vycy9NYXNrTWFuYWdlcicpLFxuICAgIFN0ZW5jaWxNYW5hZ2VyID0gcmVxdWlyZSgnLi9tYW5hZ2Vycy9TdGVuY2lsTWFuYWdlcicpLFxuICAgIEZpbHRlck1hbmFnZXIgPSByZXF1aXJlKCcuL21hbmFnZXJzL0ZpbHRlck1hbmFnZXInKSxcbiAgICBCbGVuZE1vZGVNYW5hZ2VyID0gcmVxdWlyZSgnLi9tYW5hZ2Vycy9CbGVuZE1vZGVNYW5hZ2VyJyksXG4gICAgUmVuZGVyVGFyZ2V0ID0gcmVxdWlyZSgnLi91dGlscy9SZW5kZXJUYXJnZXQnKSxcbiAgICBPYmplY3RSZW5kZXJlciA9IHJlcXVpcmUoJy4vdXRpbHMvT2JqZWN0UmVuZGVyZXInKSxcbiAgICBGWEFBRmlsdGVyID0gcmVxdWlyZSgnLi9maWx0ZXJzL0ZYQUFGaWx0ZXInKSxcbiAgICBUZXh0dXJlTWFuYWdlciA9IHJlcXVpcmUoJy4vVGV4dHVyZU1hbmFnZXInKSxcbiAgICBjcmVhdGVDb250ZXh0ID0gcmVxdWlyZSgncGl4aS1nbC1jb3JlJykuY3JlYXRlQ29udGV4dCxcbiAgICBtYXBXZWJHTEJsZW5kTW9kZXNUb1BpeGkgPSByZXF1aXJlKCcuL3V0aWxzL21hcFdlYkdMQmxlbmRNb2Rlc1RvUGl4aScpLFxuICAgIG1hcFdlYkdMRHJhd01vZGVzVG9QaXhpID0gcmVxdWlyZSgnLi91dGlscy9tYXBXZWJHTERyYXdNb2Rlc1RvUGl4aScpLFxuICAgIHV0aWxzID0gcmVxdWlyZSgnLi4vLi4vdXRpbHMnKSxcbiAgICBDT05TVCA9IHJlcXVpcmUoJy4uLy4uL2NvbnN0Jyk7XG5cbi8qKlxuICogVGhlIFdlYkdMUmVuZGVyZXIgZHJhd3MgdGhlIHNjZW5lIGFuZCBhbGwgaXRzIGNvbnRlbnQgb250byBhIHdlYkdMIGVuYWJsZWQgY2FudmFzLiBUaGlzIHJlbmRlcmVyXG4gKiBzaG91bGQgYmUgdXNlZCBmb3IgYnJvd3NlcnMgdGhhdCBzdXBwb3J0IHdlYkdMLiBUaGlzIFJlbmRlciB3b3JrcyBieSBhdXRvbWF0aWNhbGx5IG1hbmFnaW5nIHdlYkdMQmF0Y2hzLlxuICogU28gbm8gbmVlZCBmb3IgU3ByaXRlIEJhdGNoZXMgb3IgU3ByaXRlIENsb3Vkcy5cbiAqIERvbid0IGZvcmdldCB0byBhZGQgdGhlIHZpZXcgdG8geW91ciBET00gb3IgeW91IHdpbGwgbm90IHNlZSBhbnl0aGluZyA6KVxuICpcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqIEBleHRlbmRzIFBJWEkuU3lzdGVtUmVuZGVyZXJcbiAqIEBwYXJhbSBbd2lkdGg9MF0ge251bWJlcn0gdGhlIHdpZHRoIG9mIHRoZSBjYW52YXMgdmlld1xuICogQHBhcmFtIFtoZWlnaHQ9MF0ge251bWJlcn0gdGhlIGhlaWdodCBvZiB0aGUgY2FudmFzIHZpZXdcbiAqIEBwYXJhbSBbb3B0aW9uc10ge29iamVjdH0gVGhlIG9wdGlvbmFsIHJlbmRlcmVyIHBhcmFtZXRlcnNcbiAqIEBwYXJhbSBbb3B0aW9ucy52aWV3XSB7SFRNTENhbnZhc0VsZW1lbnR9IHRoZSBjYW52YXMgdG8gdXNlIGFzIGEgdmlldywgb3B0aW9uYWxcbiAqIEBwYXJhbSBbb3B0aW9ucy50cmFuc3BhcmVudD1mYWxzZV0ge2Jvb2xlYW59IElmIHRoZSByZW5kZXIgdmlldyBpcyB0cmFuc3BhcmVudCwgZGVmYXVsdCBmYWxzZVxuICogQHBhcmFtIFtvcHRpb25zLmF1dG9SZXNpemU9ZmFsc2VdIHtib29sZWFufSBJZiB0aGUgcmVuZGVyIHZpZXcgaXMgYXV0b21hdGljYWxseSByZXNpemVkLCBkZWZhdWx0IGZhbHNlXG4gKiBAcGFyYW0gW29wdGlvbnMuYW50aWFsaWFzPWZhbHNlXSB7Ym9vbGVhbn0gc2V0cyBhbnRpYWxpYXMuIElmIG5vdCBhdmFpbGFibGUgbmF0aXZlbHkgdGhlbiBGWEFBIGFudGlhbGlhc2luZyBpcyB1c2VkXG4gKiBAcGFyYW0gW29wdGlvbnMuZm9yY2VGWEFBPWZhbHNlXSB7Ym9vbGVhbn0gZm9yY2VzIEZYQUEgYW50aWFsaWFzaW5nIHRvIGJlIHVzZWQgb3ZlciBuYXRpdmUuIEZYQUEgaXMgZmFzdGVyLCBidXQgbWF5IG5vdCBhbHdheXMgbG9vayBhcyBncmVhdFxuICogQHBhcmFtIFtvcHRpb25zLnJlc29sdXRpb249MV0ge251bWJlcn0gdGhlIHJlc29sdXRpb24gb2YgdGhlIHJlbmRlcmVyIHJldGluYSB3b3VsZCBiZSAyXG4gKiBAcGFyYW0gW29wdGlvbnMuY2xlYXJCZWZvcmVSZW5kZXI9dHJ1ZV0ge2Jvb2xlYW59IFRoaXMgc2V0cyBpZiB0aGUgQ2FudmFzUmVuZGVyZXIgd2lsbCBjbGVhciB0aGUgY2FudmFzIG9yXG4gKiAgICAgIG5vdCBiZWZvcmUgdGhlIG5ldyByZW5kZXIgcGFzcy4gSWYgeW91IHdpc2ggdG8gc2V0IHRoaXMgdG8gZmFsc2UsIHlvdSAqbXVzdCogc2V0IHByZXNlcnZlRHJhd2luZ0J1ZmZlciB0byBgdHJ1ZWAuXG4gKiBAcGFyYW0gW29wdGlvbnMucHJlc2VydmVEcmF3aW5nQnVmZmVyPWZhbHNlXSB7Ym9vbGVhbn0gZW5hYmxlcyBkcmF3aW5nIGJ1ZmZlciBwcmVzZXJ2YXRpb24sIGVuYWJsZSB0aGlzIGlmXG4gKiAgICAgIHlvdSBuZWVkIHRvIGNhbGwgdG9EYXRhVXJsIG9uIHRoZSB3ZWJnbCBjb250ZXh0LlxuICogQHBhcmFtIFtvcHRpb25zLnJvdW5kUGl4ZWxzPWZhbHNlXSB7Ym9vbGVhbn0gSWYgdHJ1ZSBQaXhpIHdpbGwgTWF0aC5mbG9vcigpIHgveSB2YWx1ZXMgd2hlbiByZW5kZXJpbmcsIHN0b3BwaW5nIHBpeGVsIGludGVycG9sYXRpb24uXG4gKi9cbmZ1bmN0aW9uIFdlYkdMUmVuZGVyZXIod2lkdGgsIGhlaWdodCwgb3B0aW9ucylcbntcbiAgICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcblxuICAgIFN5c3RlbVJlbmRlcmVyLmNhbGwodGhpcywgJ1dlYkdMJywgd2lkdGgsIGhlaWdodCwgb3B0aW9ucyk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgdHlwZSBvZiB0aGlzIHJlbmRlcmVyIGFzIGEgc3RhbmRhcmRpc2VkIGNvbnN0XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9Ly9cbiAgICAgKlxuICAgICAqL1xuICAgIHRoaXMudHlwZSA9IENPTlNULlJFTkRFUkVSX1RZUEUuV0VCR0w7XG5cbiAgICB0aGlzLmhhbmRsZUNvbnRleHRMb3N0ID0gdGhpcy5oYW5kbGVDb250ZXh0TG9zdC5iaW5kKHRoaXMpO1xuICAgIHRoaXMuaGFuZGxlQ29udGV4dFJlc3RvcmVkID0gdGhpcy5oYW5kbGVDb250ZXh0UmVzdG9yZWQuYmluZCh0aGlzKTtcblxuICAgIHRoaXMudmlldy5hZGRFdmVudExpc3RlbmVyKCd3ZWJnbGNvbnRleHRsb3N0JywgdGhpcy5oYW5kbGVDb250ZXh0TG9zdCwgZmFsc2UpO1xuICAgIHRoaXMudmlldy5hZGRFdmVudExpc3RlbmVyKCd3ZWJnbGNvbnRleHRyZXN0b3JlZCcsIHRoaXMuaGFuZGxlQ29udGV4dFJlc3RvcmVkLCBmYWxzZSk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgb3B0aW9ucyBwYXNzZWQgaW4gdG8gY3JlYXRlIGEgbmV3IHdlYmdsIGNvbnRleHQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtvYmplY3R9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9jb250ZXh0T3B0aW9ucyA9IHtcbiAgICAgICAgYWxwaGE6IHRoaXMudHJhbnNwYXJlbnQsXG4gICAgICAgIGFudGlhbGlhczogb3B0aW9ucy5hbnRpYWxpYXMsXG4gICAgICAgIHByZW11bHRpcGxpZWRBbHBoYTogdGhpcy50cmFuc3BhcmVudCAmJiB0aGlzLnRyYW5zcGFyZW50ICE9PSAnbm90TXVsdGlwbGllZCcsXG4gICAgICAgIHN0ZW5jaWw6IHRydWUsXG4gICAgICAgIHByZXNlcnZlRHJhd2luZ0J1ZmZlcjogb3B0aW9ucy5wcmVzZXJ2ZURyYXdpbmdCdWZmZXJcbiAgICB9O1xuXG4gICAgdGhpcy5fYmFja2dyb3VuZENvbG9yUmdiYVszXSA9IHRoaXMudHJhbnNwYXJlbnQgPyAwIDogMTtcblxuICAgIC8qKlxuICAgICAqIERlYWxzIHdpdGggbWFuYWdpbmcgdGhlIHNoYWRlciBwcm9ncmFtcyBhbmQgdGhlaXIgYXR0cmlicy5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuU2hhZGVyTWFuYWdlcn1cbiAgICAgKi9cbiAgICB0aGlzLnNoYWRlck1hbmFnZXIgPSBuZXcgU2hhZGVyTWFuYWdlcih0aGlzKTtcblxuICAgIC8qKlxuICAgICAqIE1hbmFnZXMgdGhlIG1hc2tzIHVzaW5nIHRoZSBzdGVuY2lsIGJ1ZmZlci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuTWFza01hbmFnZXJ9XG4gICAgICovXG4gICAgdGhpcy5tYXNrTWFuYWdlciA9IG5ldyBNYXNrTWFuYWdlcih0aGlzKTtcblxuICAgIC8qKlxuICAgICAqIE1hbmFnZXMgdGhlIHN0ZW5jaWwgYnVmZmVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5TdGVuY2lsTWFuYWdlcn1cbiAgICAgKi9cbiAgICB0aGlzLnN0ZW5jaWxNYW5hZ2VyID0gbmV3IFN0ZW5jaWxNYW5hZ2VyKHRoaXMpO1xuXG4gICAgLyoqXG4gICAgICogTWFuYWdlcyB0aGUgZmlsdGVycy5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuRmlsdGVyTWFuYWdlcn1cbiAgICAgKi9cbiAgICB0aGlzLmZpbHRlck1hbmFnZXIgPSBuZXcgRmlsdGVyTWFuYWdlcih0aGlzKTtcblxuICAgIC8qKlxuICAgICAqIE1hbmFnZXMgdGhlIGJsZW5kTW9kZXNcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuQmxlbmRNb2RlTWFuYWdlcn1cbiAgICAgKi9cbiAgICB0aGlzLmJsZW5kTW9kZU1hbmFnZXIgPSBuZXcgQmxlbmRNb2RlTWFuYWdlcih0aGlzKTtcblxuICAgIFxuICAgIC8qKlxuICAgICAqIFRoZSBjdXJyZW50bHkgYWN0aXZlIE9iamVjdFJlbmRlcmVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5PYmplY3RSZW5kZXJlcn1cbiAgICAgKi9cbiAgICB0aGlzLmN1cnJlbnRSZW5kZXJlciA9IG5ldyBPYmplY3RSZW5kZXJlcih0aGlzKTtcblxuICAgIHRoaXMuaW5pdFBsdWdpbnMoKTtcblxuICAgIC8vIGluaXRpYWxpemUgdGhlIGNvbnRleHQgc28gaXQgaXMgcmVhZHkgZm9yIHRoZSBtYW5hZ2Vycy5cbiAgICB0aGlzLmdsID0gY3JlYXRlQ29udGV4dCh0aGlzLnZpZXcsIHRoaXMuX2NvbnRleHRPcHRpb25zKTtcblxuICAgIHRoaXMuX2luaXRDb250ZXh0KCk7XG5cbiAgICAvLyBtYXAgc29tZSB3ZWJHTCBibGVuZCBhbmQgZHJhd21vZGVzLi5cbiAgICB0aGlzLmJsZW5kTW9kZXMgPSBtYXBXZWJHTEJsZW5kTW9kZXNUb1BpeGkoZ2wpO1xuICAgIHRoaXMuZHJhd01vZGVzID0gbWFwV2ViR0xEcmF3TW9kZXNUb1BpeGkoZ2wpXG5cbiAgICB0aGlzLl9hY3RpdmVTaGFkZXIgPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogSG9sZHMgdGhlIGN1cnJlbnQgcmVuZGVyIHRhcmdldFxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5SZW5kZXJUYXJnZXR9XG4gICAgICovXG4gICAgdGhpcy5fYWN0aXZlUmVuZGVyVGFyZ2V0ID0gbnVsbDtcbiAgICB0aGlzLl9hY3RpdmVUZXh0dXJlTG9jYXRpb24gPSBudWxsO1xuICAgIHRoaXMuX2FjdGl2ZVRleHR1cmUgPSBudWxsO1xufVxuXG4vLyBjb25zdHJ1Y3RvclxuV2ViR0xSZW5kZXJlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFN5c3RlbVJlbmRlcmVyLnByb3RvdHlwZSk7XG5XZWJHTFJlbmRlcmVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFdlYkdMUmVuZGVyZXI7XG5tb2R1bGUuZXhwb3J0cyA9IFdlYkdMUmVuZGVyZXI7XG51dGlscy5wbHVnaW5UYXJnZXQubWl4aW4oV2ViR0xSZW5kZXJlcik7XG5cbi8qKlxuICogQ3JlYXRlcyB0aGUgV2ViR0wgY29udGV4dFxuICpcbiAqIEBwcml2YXRlXG4gKi9cbldlYkdMUmVuZGVyZXIucHJvdG90eXBlLl9pbml0Q29udGV4dCA9IGZ1bmN0aW9uICgpXG57XG4gICAgdmFyIGdsID0gdGhpcy5nbDtcblxuICAgIC8vIGNyZWF0ZSBhIHRleHR1cmUgbWFuYWdlci4uLlxuICAgIHRoaXMudGV4dHVyZU1hbmFnZXIgPSBuZXcgVGV4dHVyZU1hbmFnZXIoZ2wpO1xuXG4gICAgLy8gc2V0IHVwIHRoZSBkZWZhdWx0IHBpeGkgc2V0dGluZ3MuLlxuICAgIGdsLmRpc2FibGUoZ2wuREVQVEhfVEVTVCk7XG4gICAgZ2wuZGlzYWJsZShnbC5DVUxMX0ZBQ0UpO1xuICAgIGdsLmVuYWJsZShnbC5CTEVORCk7XG5cblxuICAgIHRoaXMucm9vdFJlbmRlclRhcmdldCA9IG5ldyBSZW5kZXJUYXJnZXQoZ2wsIHRoaXMud2lkdGgsIHRoaXMuaGVpZ2h0LCBudWxsLCB0aGlzLnJlc29sdXRpb24sIHRydWUpO1xuICAgIHRoaXMucm9vdFJlbmRlclRhcmdldC5jbGVhckNvbG9yID0gdGhpcy5fYmFja2dyb3VuZENvbG9yUmdiYTtcbiAgICBcbiAgICB0aGlzLmJpbmRSZW5kZXJUYXJnZXQodGhpcy5yb290UmVuZGVyVGFyZ2V0KTtcblxuICAgIHRoaXMuZW1pdCgnY29udGV4dCcsIGdsKTtcblxuICAgIC8vIHNldHVwIHRoZSB3aWR0aC9oZWlnaHQgcHJvcGVydGllcyBhbmQgZ2wgdmlld3BvcnRcbiAgICB0aGlzLnJlc2l6ZSh0aGlzLndpZHRoLCB0aGlzLmhlaWdodCk7ICAgIFxufTtcblxuLyoqXG4gKiBSZW5kZXJzIHRoZSBvYmplY3QgdG8gaXRzIHdlYkdMIHZpZXdcbiAqXG4gKiBAcGFyYW0gb2JqZWN0IHtQSVhJLkRpc3BsYXlPYmplY3R9IHRoZSBvYmplY3QgdG8gYmUgcmVuZGVyZWRcbiAqL1xuV2ViR0xSZW5kZXJlci5wcm90b3R5cGUucmVuZGVyID0gZnVuY3Rpb24gKGRpc3BsYXlPYmplY3QpXG57XG4gICAgdGhpcy5lbWl0KCdwcmVyZW5kZXInKTtcblxuICAgIC8vIG5vIHBvaW50IHJlbmRlcmluZyBpZiBvdXIgY29udGV4dCBoYXMgYmVlbiBibG93biB1cCFcbiAgICBpZiAodGhpcy5nbC5pc0NvbnRleHRMb3N0KCkpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5fbGFzdE9iamVjdFJlbmRlcmVkID0gZGlzcGxheU9iamVjdDtcblxuICAgIHZhciBjYWNoZVBhcmVudCA9IGRpc3BsYXlPYmplY3QucGFyZW50O1xuICAgIGRpc3BsYXlPYmplY3QucGFyZW50ID0gdGhpcy5fdGVtcERpc3BsYXlPYmplY3RQYXJlbnQ7XG4gICAgLy8gdXBkYXRlIHRoZSBzY2VuZSBncmFwaFxuICAgIGRpc3BsYXlPYmplY3QudXBkYXRlVHJhbnNmb3JtKCk7XG4gICAgZGlzcGxheU9iamVjdC5wYXJlbnQgPSBjYWNoZVBhcmVudDtcblxuICAgIHRoaXMucmVuZGVyRGlzcGxheU9iamVjdChkaXNwbGF5T2JqZWN0LCB0aGlzLnJvb3RSZW5kZXJUYXJnZXQsIHRoaXMuY2xlYXJCZWZvcmVSZW5kZXIpOy8vdGhpcy5wcm9qZWN0aW9uKTtcblxuICAgIHRoaXMuZW1pdCgncG9zdHJlbmRlcicpO1xufTtcblxuLyoqXG4gKiBSZW5kZXJzIGEgRGlzcGxheSBPYmplY3QuXG4gKlxuICogQHBhcmFtIGRpc3BsYXlPYmplY3Qge1BJWEkuRGlzcGxheU9iamVjdH0gVGhlIERpc3BsYXlPYmplY3QgdG8gcmVuZGVyXG4gKiBAcGFyYW0gcmVuZGVyVGFyZ2V0IHtQSVhJLlJlbmRlclRhcmdldH0gVGhlIHJlbmRlciB0YXJnZXQgdG8gdXNlIHRvIHJlbmRlciB0aGlzIGRpc3BsYXkgb2JqZWN0XG4gKlxuICovXG5XZWJHTFJlbmRlcmVyLnByb3RvdHlwZS5yZW5kZXJEaXNwbGF5T2JqZWN0ID0gZnVuY3Rpb24gKGRpc3BsYXlPYmplY3QsIHJlbmRlclRhcmdldCwgY2xlYXIpLy9wcm9qZWN0aW9uLCBidWZmZXIpXG57XG4gICAgdGhpcy5iaW5kUmVuZGVyVGFyZ2V0KHJlbmRlclRhcmdldCk7XG5cbiAgICBpZihjbGVhcilcbiAgICB7XG4gICAgICAgIHJlbmRlclRhcmdldC5jbGVhcigpO1xuICAgIH1cblxuICAgIC8vIHN0YXJ0IHRoZSBmaWx0ZXIgbWFuYWdlclxuICAgIHRoaXMuZmlsdGVyTWFuYWdlci5zZXRGaWx0ZXJTdGFjayggcmVuZGVyVGFyZ2V0LmZpbHRlclN0YWNrICk7XG5cbiAgICAvLyByZW5kZXIgdGhlIHNjZW5lIVxuICAgIGRpc3BsYXlPYmplY3QucmVuZGVyV2ViR0wodGhpcyk7XG5cbiAgICAvLyBmaW5pc2ggdGhlIGN1cnJlbnQgcmVuZGVyZXIuLlxuICAgIHRoaXMuY3VycmVudFJlbmRlcmVyLmZsdXNoKCk7XG59O1xuXG4vKipcbiAqIENoYW5nZXMgdGhlIGN1cnJlbnQgcmVuZGVyZXIgdG8gdGhlIG9uZSBnaXZlbiBpbiBwYXJhbWV0ZXJcbiAqXG4gKiBAcGFyYW0gb2JqZWN0UmVuZGVyZXIge1BJWEkuT2JqZWN0UmVuZGVyZXJ9IFRoZSBvYmplY3QgcmVuZGVyZXIgdG8gdXNlLlxuICovXG5XZWJHTFJlbmRlcmVyLnByb3RvdHlwZS5zZXRPYmplY3RSZW5kZXJlciA9IGZ1bmN0aW9uIChvYmplY3RSZW5kZXJlcilcbntcbiAgICBpZiAodGhpcy5jdXJyZW50UmVuZGVyZXIgPT09IG9iamVjdFJlbmRlcmVyKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuY3VycmVudFJlbmRlcmVyLnN0b3AoKTtcbiAgICB0aGlzLmN1cnJlbnRSZW5kZXJlciA9IG9iamVjdFJlbmRlcmVyO1xuICAgIHRoaXMuY3VycmVudFJlbmRlcmVyLnN0YXJ0KCk7XG59O1xuXG4vKipcbiAqIFJlc2l6ZXMgdGhlIHdlYkdMIHZpZXcgdG8gdGhlIHNwZWNpZmllZCB3aWR0aCBhbmQgaGVpZ2h0LlxuICpcbiAqIEBwYXJhbSB3aWR0aCB7bnVtYmVyfSB0aGUgbmV3IHdpZHRoIG9mIHRoZSB3ZWJHTCB2aWV3XG4gKiBAcGFyYW0gaGVpZ2h0IHtudW1iZXJ9IHRoZSBuZXcgaGVpZ2h0IG9mIHRoZSB3ZWJHTCB2aWV3XG4gKi9cbldlYkdMUmVuZGVyZXIucHJvdG90eXBlLnJlc2l6ZSA9IGZ1bmN0aW9uICh3aWR0aCwgaGVpZ2h0KVxue1xuICAgIFN5c3RlbVJlbmRlcmVyLnByb3RvdHlwZS5yZXNpemUuY2FsbCh0aGlzLCB3aWR0aCwgaGVpZ2h0KTtcblxuICAgIHRoaXMuZmlsdGVyTWFuYWdlci5yZXNpemUod2lkdGgsIGhlaWdodCk7XG4gICAgdGhpcy5yb290UmVuZGVyVGFyZ2V0LnJlc2l6ZSh3aWR0aCwgaGVpZ2h0KTtcblxuICAgIGlmKHRoaXMuY3VycmVudFJlbmRlclRhcmdldCA9PT0gdGhpcy5yZW5kZXJUYXJnZXQpXG4gICAge1xuICAgICAgICB0aGlzLnJvb3RSZW5kZXJUYXJnZXQuYWN0aXZhdGUoKTtcbiAgICB9XG59O1xuXG4vKipcbiAqIENoYW5nZXMgdGhlIGN1cnJlbnQgcmVuZGVyIHRhcmdldCB0byB0aGUgb25lIGdpdmVuIGluIHBhcmFtZXRlclxuICpcbiAqIEBwYXJhbSByZW5kZXJUYXJnZXQge1BJWEkuUmVuZGVyVGFyZ2V0fSB0aGUgbmV3IHJlbmRlciB0YXJnZXRcbiAqL1xuV2ViR0xSZW5kZXJlci5wcm90b3R5cGUuYmluZFJlbmRlclRhcmdldCA9IGZ1bmN0aW9uIChyZW5kZXJUYXJnZXQpLy9wcm9qZWN0aW9uLCBidWZmZXIpXG57XG4gICAgaWYocmVuZGVyVGFyZ2V0ICE9PSB0aGlzLl9hY3RpdmVSZW5kZXJUYXJnZXQpXG4gICAge1xuICAgICAgICB0aGlzLl9hY3RpdmVSZW5kZXJUYXJnZXQgPSByZW5kZXJUYXJnZXQ7XG5cbiAgICAgICAgaWYodGhpcy5fYWN0aXZlU2hhZGVyKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLl9hY3RpdmVTaGFkZXIudW5pZm9ybXMucHJvamVjdGlvbk1hdHJpeCA9IHJlbmRlclRhcmdldC5wcm9qZWN0aW9uTWF0cml4LnRvQXJyYXkodHJ1ZSk7XG4gICAgICAgIH1cblxuICAgICAgICByZW5kZXJUYXJnZXQuYWN0aXZhdGUoKTtcblxuICAgICAgICB0aGlzLnN0ZW5jaWxNYW5hZ2VyLnNldE1hc2tTdGFjayggcmVuZGVyVGFyZ2V0LnN0ZW5jaWxNYXNrU3RhY2sgKTtcbiAgICB9XG59XG5cbldlYkdMUmVuZGVyZXIucHJvdG90eXBlLmJpbmRTaGFkZXIgPSBmdW5jdGlvbiAoc2hhZGVyKS8vcHJvamVjdGlvbiwgYnVmZmVyKVxue1xuICAgIC8vVE9ETyBjYWNoZVxuICAgIGlmKHRoaXMuX2FjdGl2ZVNoYWRlciAhPT0gc2hhZGVyKVxuICAgIHtcbiAgICAgICAgdGhpcy5fYWN0aXZlU2hhZGVyID0gc2hhZGVyO1xuICAgICAgICBzaGFkZXIuYmluZCgpO1xuXG4gICAgICAgIC8vIGF1dG9tYXRpY2FsbHkgc2V0IHRoZSBwcm9qZWN0aW9uIG1hdHJpeFxuICAgICAgICBzaGFkZXIudW5pZm9ybXMucHJvamVjdGlvbk1hdHJpeCA9IHRoaXMuX2FjdGl2ZVJlbmRlclRhcmdldC5wcm9qZWN0aW9uTWF0cml4LnRvQXJyYXkodHJ1ZSk7XG4gICAgfVxufVxuXG5cbldlYkdMUmVuZGVyZXIucHJvdG90eXBlLmJpbmRUZXh0dXJlID0gZnVuY3Rpb24gKHRleHR1cmUsIGxvY2F0aW9uKVxue1xuICAgIHZhciBnbCA9IHRoaXMuZ2w7XG5cbiAgICAvL1RPRE8gdGVzdCBwZXJmIG9mIGNhY2hlP1xuICAgIGxvY2F0aW9uID0gbG9jYXRpb24gfHwgMDtcblxuICAgIGlmKHRoaXMuX2FjdGl2ZVRleHR1cmVMb2NhdGlvbiAhPT0gbG9jYXRpb24pLy9cbiAgICB7XG4gICAgICAgIHRoaXMuX2FjdGl2ZVRleHR1cmVMb2NhdGlvbiA9IGxvY2F0aW9uXG4gICAgICAgIGdsLmFjdGl2ZVRleHR1cmUoZ2wuVEVYVFVSRTAgKyBsb2NhdGlvbiApO1xuICAgIH1cblxuICAgIC8vVE9ETyAtIGNhbiB3ZSBjYWNoZSB0aGlzIHRleHR1cmUgdG9vP1xuICAgIHRoaXMuX2FjdGl2ZVRleHR1cmUgPSB0ZXh0dXJlOyAgICAgIFxuICAgIFxuICAgIGlmICghdGV4dHVyZS5fZ2xUZXh0dXJlc1tnbC5pZF0pXG4gICAge1xuICAgICAgICAvLyB0aGlzIHdpbGwgYWxzbyBiaW5kIHRoZSB0ZXh0dXJlLi5cbiAgICAgICAgdGhpcy50ZXh0dXJlTWFuYWdlci51cGRhdGVUZXh0dXJlKHRleHR1cmUpO1xuICAgIH1cbiAgICBlbHNlXG4gICAgeyAgIFxuICAgICAgICAvLyBiaW5kIHRoZSBjdXJyZW50IHRleHR1cmVcbiAgICAgICAgdGV4dHVyZS5fZ2xUZXh0dXJlc1tnbC5pZF0uYmluZCgpO1xuICAgIH1cbn1cblxuXG4vKipcbiAqIEhhbmRsZXMgYSBsb3N0IHdlYmdsIGNvbnRleHRcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5XZWJHTFJlbmRlcmVyLnByb3RvdHlwZS5oYW5kbGVDb250ZXh0TG9zdCA9IGZ1bmN0aW9uIChldmVudClcbntcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xufTtcblxuLyoqXG4gKiBIYW5kbGVzIGEgcmVzdG9yZWQgd2ViZ2wgY29udGV4dFxuICpcbiAqIEBwcml2YXRlXG4gKi9cbldlYkdMUmVuZGVyZXIucHJvdG90eXBlLmhhbmRsZUNvbnRleHRSZXN0b3JlZCA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy5faW5pdENvbnRleHQoKTtcbiAgICB0aGlzLnRleHR1cmVNYW5hZ2VyLnJlbW92ZUFsbCgpO1xufTtcblxuLyoqXG4gKiBSZW1vdmVzIGV2ZXJ5dGhpbmcgZnJvbSB0aGUgcmVuZGVyZXIgKGV2ZW50IGxpc3RlbmVycywgc3ByaXRlYmF0Y2gsIGV0Yy4uLilcbiAqXG4gKiBAcGFyYW0gW3JlbW92ZVZpZXc9ZmFsc2VdIHtib29sZWFufSBSZW1vdmVzIHRoZSBDYW52YXMgZWxlbWVudCBmcm9tIHRoZSBET00uXG4gKi9cbldlYkdMUmVuZGVyZXIucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAocmVtb3ZlVmlldylcbntcbiAgICB0aGlzLmRlc3Ryb3lQbHVnaW5zKCk7XG5cbiAgICAvLyByZW1vdmUgbGlzdGVuZXJzXG4gICAgdGhpcy52aWV3LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3dlYmdsY29udGV4dGxvc3QnLCB0aGlzLmhhbmRsZUNvbnRleHRMb3N0KTtcbiAgICB0aGlzLnZpZXcucmVtb3ZlRXZlbnRMaXN0ZW5lcignd2ViZ2xjb250ZXh0cmVzdG9yZWQnLCB0aGlzLmhhbmRsZUNvbnRleHRSZXN0b3JlZCk7XG5cbiAgICB0aGlzLnRleHR1cmVNYW5hZ2VyLmRlc3Ryb3lBbGwoKTtcblxuICAgIC8vIGNhbGwgYmFzZSBkZXN0cm95XG4gICAgU3lzdGVtUmVuZGVyZXIucHJvdG90eXBlLmRlc3Ryb3kuY2FsbCh0aGlzLCByZW1vdmVWaWV3KTtcblxuICAgIHRoaXMudWlkID0gMDtcblxuICAgIC8vIGRlc3Ryb3kgdGhlIG1hbmFnZXJzXG4gICAgdGhpcy5zaGFkZXJNYW5hZ2VyLmRlc3Ryb3koKTtcbiAgICB0aGlzLm1hc2tNYW5hZ2VyLmRlc3Ryb3koKTtcbiAgICB0aGlzLnN0ZW5jaWxNYW5hZ2VyLmRlc3Ryb3koKTtcbiAgICB0aGlzLmZpbHRlck1hbmFnZXIuZGVzdHJveSgpO1xuICAgIHRoaXMuYmxlbmRNb2RlTWFuYWdlci5kZXN0cm95KCk7XG5cbiAgICB0aGlzLnNoYWRlck1hbmFnZXIgPSBudWxsO1xuICAgIHRoaXMubWFza01hbmFnZXIgPSBudWxsO1xuICAgIHRoaXMuZmlsdGVyTWFuYWdlciA9IG51bGw7XG4gICAgdGhpcy5ibGVuZE1vZGVNYW5hZ2VyID0gbnVsbDtcbiAgICB0aGlzLmN1cnJlbnRSZW5kZXJlciA9IG51bGw7XG5cbiAgICB0aGlzLmhhbmRsZUNvbnRleHRMb3N0ID0gbnVsbDtcbiAgICB0aGlzLmhhbmRsZUNvbnRleHRSZXN0b3JlZCA9IG51bGw7XG5cbiAgICB0aGlzLl9jb250ZXh0T3B0aW9ucyA9IG51bGw7XG5cbiAgICB0aGlzLmdsLnVzZVByb2dyYW0obnVsbCk7XG4gICAgdGhpcy5nbCA9IG51bGw7XG59O1xuXG4iLCJ2YXIgRGVmYXVsdFNoYWRlciA9IHJlcXVpcmUoJy4uL3NoYWRlcnMvVGV4dHVyZVNoYWRlcicpO1xuXG4vKipcbiAqIFRoaXMgaXMgdGhlIGJhc2UgY2xhc3MgZm9yIGNyZWF0aW5nIGEgUElYSSBmaWx0ZXIuIEN1cnJlbnRseSBvbmx5IFdlYkdMIHN1cHBvcnRzIGZpbHRlcnMuXG4gKiBJZiB5b3Ugd2FudCB0byBtYWtlIGEgY3VzdG9tIGZpbHRlciB0aGlzIHNob3VsZCBiZSB5b3VyIGJhc2UgY2xhc3MuXG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIHZlcnRleFNyYyB7c3RyaW5nfHN0cmluZ1tdfSBUaGUgdmVydGV4IHNoYWRlciBzb3VyY2UgYXMgYW4gYXJyYXkgb2Ygc3RyaW5ncy5cbiAqIEBwYXJhbSBmcmFnbWVudFNyYyB7c3RyaW5nfHN0cmluZ1tdfSBUaGUgZnJhZ21lbnQgc2hhZGVyIHNvdXJjZSBhcyBhbiBhcnJheSBvZiBzdHJpbmdzLlxuICogQHBhcmFtIHVuaWZvcm1zIHtvYmplY3R9IEFuIG9iamVjdCBjb250YWluaW5nIHRoZSB1bmlmb3JtcyBmb3IgdGhpcyBmaWx0ZXIuXG4gKi9cbmZ1bmN0aW9uIEFic3RyYWN0RmlsdGVyKHZlcnRleFNyYywgZnJhZ21lbnRTcmMsIHVuaWZvcm1zKVxue1xuXG4gICAgLyoqXG4gICAgICogQW4gYXJyYXkgb2Ygc2hhZGVyc1xuICAgICAqIEBtZW1iZXIge1BJWEkuU2hhZGVyW119XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLnNoYWRlcnMgPSBbXTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBleHRyYSBwYWRkaW5nIHRoYXQgdGhlIGZpbHRlciBtaWdodCBuZWVkXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMucGFkZGluZyA9IDA7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgdW5pZm9ybXMgYXMgYW4gb2JqZWN0XG4gICAgICogQG1lbWJlciB7b2JqZWN0fVxuICAgICAqL1xuICAgIHRoaXMudW5pZm9ybXMgPSB1bmlmb3JtcyB8fCB7fTtcblxuXG4gICAgLyoqXG4gICAgICogVGhlIGNvZGUgb2YgdGhlIHZlcnRleCBzaGFkZXJcbiAgICAgKiBAbWVtYmVyIHtzdHJpbmdbXX1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMudmVydGV4U3JjID0gdmVydGV4U3JjIHx8IERlZmF1bHRTaGFkZXIuZGVmYXVsdFZlcnRleFNyYztcblxuICAgIC8qKlxuICAgICAqIFRoZSBjb2RlIG9mIHRoZSBmcmFtZW50IHNoYWRlclxuICAgICAqIEBtZW1iZXIge3N0cmluZ1tdfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5mcmFnbWVudFNyYyA9IGZyYWdtZW50U3JjIHx8IERlZmF1bHRTaGFkZXIuZGVmYXVsdEZyYWdtZW50U3JjO1xuXG4gICAgLy9UT0RPIGEgcmVtaW5kZXIgLSB3b3VsZCBiZSBjb29sIHRvIGhhdmUgbG93ZXIgcmVzIGZpbHRlcnMgYXMgdGhpcyB3b3VsZCBnaXZlIGJldHRlciBwZXJmb3JtYW5jZS5cblxuICAgIC8vdHlwZW9mIGZyYWdtZW50U3JjID09PSAnc3RyaW5nJyA/IGZyYWdtZW50U3JjLnNwbGl0KCcnKSA6IChmcmFnbWVudFNyYyB8fCBbXSk7XG5cbn1cblxuQWJzdHJhY3RGaWx0ZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gQWJzdHJhY3RGaWx0ZXI7XG5tb2R1bGUuZXhwb3J0cyA9IEFic3RyYWN0RmlsdGVyO1xuXG4vKipcbiAqIEdyYWJzIGEgc2hhZGVyIGZyb20gdGhlIGN1cnJlbnQgcmVuZGVyZXJcbiAqXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcn0gVGhlIHJlbmRlcmVyIHRvIHJldHJpZXZlIHRoZSBzaGFkZXIgZnJvbVxuICovXG5BYnN0cmFjdEZpbHRlci5wcm90b3R5cGUuZ2V0U2hhZGVyID0gZnVuY3Rpb24gKHJlbmRlcmVyKVxue1xuICAgIHZhciBnbCA9IHJlbmRlcmVyLmdsO1xuXG4gICAgdmFyIHNoYWRlciA9IHRoaXMuc2hhZGVyc1tnbC5pZF07XG5cbiAgICBpZiAoIXNoYWRlcilcbiAgICB7XG4gICAgICAgIHNoYWRlciA9IG5ldyBEZWZhdWx0U2hhZGVyKHJlbmRlcmVyLnNoYWRlck1hbmFnZXIsXG4gICAgICAgICAgICB0aGlzLnZlcnRleFNyYyxcbiAgICAgICAgICAgIHRoaXMuZnJhZ21lbnRTcmMsXG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLFxuICAgICAgICAgICAgdGhpcy5hdHRyaWJ1dGVzXG4gICAgICAgICk7XG5cbiAgICAgICAgdGhpcy5zaGFkZXJzW2dsLmlkXSA9IHNoYWRlcjtcbiAgICB9XG5cbiAgICByZXR1cm4gc2hhZGVyO1xufTtcblxuLyoqXG4gKiBBcHBsaWVzIHRoZSBmaWx0ZXJcbiAqXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcn0gVGhlIHJlbmRlcmVyIHRvIHJldHJpZXZlIHRoZSBmaWx0ZXIgZnJvbVxuICogQHBhcmFtIGlucHV0IHtQSVhJLlJlbmRlclRhcmdldH1cbiAqIEBwYXJhbSBvdXRwdXQge1BJWEkuUmVuZGVyVGFyZ2V0fVxuICogQHBhcmFtIGNsZWFyIHtib29sZWFufSBXaGV0aGVyIG9yIG5vdCB3ZSB3YW50IHRvIGNsZWFyIHRoZSBvdXRwdXRUYXJnZXRcbiAqL1xuQWJzdHJhY3RGaWx0ZXIucHJvdG90eXBlLmFwcGx5RmlsdGVyID0gZnVuY3Rpb24gKHJlbmRlcmVyLCBpbnB1dCwgb3V0cHV0LCBjbGVhcilcbntcbiAgICB2YXIgc2hhZGVyID0gdGhpcy5nZXRTaGFkZXIocmVuZGVyZXIpO1xuXG4gICAgcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5hcHBseUZpbHRlcihzaGFkZXIsIGlucHV0LCBvdXRwdXQsIGNsZWFyKTtcbn07XG5cbi8qKlxuICogU3luY3MgYSB1bmlmb3JtIGJldHdlZW4gdGhlIGNsYXNzIG9iamVjdCBhbmQgdGhlIHNoYWRlcnMuXG4gKlxuICovXG5BYnN0cmFjdEZpbHRlci5wcm90b3R5cGUuc3luY1VuaWZvcm0gPSBmdW5jdGlvbiAodW5pZm9ybSlcbntcbiAgICBmb3IgKHZhciBpID0gMCwgaiA9IHRoaXMuc2hhZGVycy5sZW5ndGg7IGkgPCBqOyArK2kpXG4gICAge1xuICAgICAgICB0aGlzLnNoYWRlcnNbaV0uc3luY1VuaWZvcm0odW5pZm9ybSk7XG4gICAgfVxufTtcbiIsInZhciBBYnN0cmFjdEZpbHRlciA9IHJlcXVpcmUoJy4vQWJzdHJhY3RGaWx0ZXInKTtcbi8vIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL3N1YnN0YWNrL2JyZnMvaXNzdWVzLzI1XG5cblxuLyoqXG4gKlxuICogQmFzaWMgRlhBQSBpbXBsZW1lbnRhdGlvbiBiYXNlZCBvbiB0aGUgY29kZSBvbiBnZWVrczNkLmNvbSB3aXRoIHRoZVxuICogbW9kaWZpY2F0aW9uIHRoYXQgdGhlIHRleHR1cmUyRExvZCBzdHVmZiB3YXMgcmVtb3ZlZCBzaW5jZSBpdCdzXG4gKiB1bnN1cHBvcnRlZCBieSBXZWJHTC5cbiAqXG4gKiAtLVxuICogRnJvbTpcbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS9taXRzdWhpa28vd2ViZ2wtbWVpbmNyYWZ0XG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLkFic3RyYWN0RmlsdGVyXG4gKiBAbWVtYmVyb2YgUElYSVxuICpcbiAqL1xuZnVuY3Rpb24gRlhBQUZpbHRlcigpXG57XG4gICAgQWJzdHJhY3RGaWx0ZXIuY2FsbCh0aGlzLFxuICAgICAgICAvLyB2ZXJ0ZXggc2hhZGVyXG4gICAgICAgIFwiXFxucHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XFxuXFxuYXR0cmlidXRlIHZlYzIgYVZlcnRleFBvc2l0aW9uO1xcbmF0dHJpYnV0ZSB2ZWMyIGFUZXh0dXJlQ29vcmQ7XFxuYXR0cmlidXRlIHZlYzQgYUNvbG9yO1xcblxcbnVuaWZvcm0gbWF0MyBwcm9qZWN0aW9uTWF0cml4O1xcbnVuaWZvcm0gdmVjMiByZXNvbHV0aW9uO1xcblxcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xcbnZhcnlpbmcgdmVjNCB2Q29sb3I7XFxuXFxudmFyeWluZyB2ZWMyIHZSZXNvbHV0aW9uO1xcblxcbi8vdGV4Y29vcmRzIGNvbXB1dGVkIGluIHZlcnRleCBzdGVwXFxuLy90byBhdm9pZCBkZXBlbmRlbnQgdGV4dHVyZSByZWFkc1xcbnZhcnlpbmcgdmVjMiB2X3JnYk5XO1xcbnZhcnlpbmcgdmVjMiB2X3JnYk5FO1xcbnZhcnlpbmcgdmVjMiB2X3JnYlNXO1xcbnZhcnlpbmcgdmVjMiB2X3JnYlNFO1xcbnZhcnlpbmcgdmVjMiB2X3JnYk07XFxuXFxuXFxudm9pZCB0ZXhjb29yZHModmVjMiBmcmFnQ29vcmQsIHZlYzIgcmVzb2x1dGlvbixcXG4gICAgICAgICAgICBvdXQgdmVjMiB2X3JnYk5XLCBvdXQgdmVjMiB2X3JnYk5FLFxcbiAgICAgICAgICAgIG91dCB2ZWMyIHZfcmdiU1csIG91dCB2ZWMyIHZfcmdiU0UsXFxuICAgICAgICAgICAgb3V0IHZlYzIgdl9yZ2JNKSB7XFxuICAgIHZlYzIgaW52ZXJzZVZQID0gMS4wIC8gcmVzb2x1dGlvbi54eTtcXG4gICAgdl9yZ2JOVyA9IChmcmFnQ29vcmQgKyB2ZWMyKC0xLjAsIC0xLjApKSAqIGludmVyc2VWUDtcXG4gICAgdl9yZ2JORSA9IChmcmFnQ29vcmQgKyB2ZWMyKDEuMCwgLTEuMCkpICogaW52ZXJzZVZQO1xcbiAgICB2X3JnYlNXID0gKGZyYWdDb29yZCArIHZlYzIoLTEuMCwgMS4wKSkgKiBpbnZlcnNlVlA7XFxuICAgIHZfcmdiU0UgPSAoZnJhZ0Nvb3JkICsgdmVjMigxLjAsIDEuMCkpICogaW52ZXJzZVZQO1xcbiAgICB2X3JnYk0gPSB2ZWMyKGZyYWdDb29yZCAqIGludmVyc2VWUCk7XFxufVxcblxcbnZvaWQgbWFpbih2b2lkKXtcXG4gICBnbF9Qb3NpdGlvbiA9IHZlYzQoKHByb2plY3Rpb25NYXRyaXggKiB2ZWMzKGFWZXJ0ZXhQb3NpdGlvbiwgMS4wKSkueHksIDAuMCwgMS4wKTtcXG4gICB2VGV4dHVyZUNvb3JkID0gYVRleHR1cmVDb29yZDtcXG4gICB2Q29sb3IgPSB2ZWM0KGFDb2xvci5yZ2IgKiBhQ29sb3IuYSwgYUNvbG9yLmEpO1xcbiAgIHZSZXNvbHV0aW9uID0gcmVzb2x1dGlvbjtcXG5cXG4gICAvL2NvbXB1dGUgdGhlIHRleHR1cmUgY29vcmRzIGFuZCBzZW5kIHRoZW0gdG8gdmFyeWluZ3NcXG4gICB0ZXhjb29yZHMoYVRleHR1cmVDb29yZCAqIHJlc29sdXRpb24sIHJlc29sdXRpb24sIHZfcmdiTlcsIHZfcmdiTkUsIHZfcmdiU1csIHZfcmdiU0UsIHZfcmdiTSk7XFxufVxcblwiLFxuICAgICAgICAvLyBmcmFnbWVudCBzaGFkZXJcbiAgICAgICAgXCJwcmVjaXNpb24gbG93cCBmbG9hdDtcXG5cXG5cXG4vKipcXG5CYXNpYyBGWEFBIGltcGxlbWVudGF0aW9uIGJhc2VkIG9uIHRoZSBjb2RlIG9uIGdlZWtzM2QuY29tIHdpdGggdGhlXFxubW9kaWZpY2F0aW9uIHRoYXQgdGhlIHRleHR1cmUyRExvZCBzdHVmZiB3YXMgcmVtb3ZlZCBzaW5jZSBpdCdzXFxudW5zdXBwb3J0ZWQgYnkgV2ViR0wuXFxuXFxuLS1cXG5cXG5Gcm9tOlxcbmh0dHBzOi8vZ2l0aHViLmNvbS9taXRzdWhpa28vd2ViZ2wtbWVpbmNyYWZ0XFxuXFxuQ29weXJpZ2h0IChjKSAyMDExIGJ5IEFybWluIFJvbmFjaGVyLlxcblxcblNvbWUgcmlnaHRzIHJlc2VydmVkLlxcblxcblJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dFxcbm1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmVcXG5tZXQ6XFxuXFxuICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHRcXG4gICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuXFxuXFxuICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZVxcbiAgICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nXFxuICAgICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkXFxuICAgICAgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLlxcblxcbiAgICAqIFRoZSBuYW1lcyBvZiB0aGUgY29udHJpYnV0b3JzIG1heSBub3QgYmUgdXNlZCB0byBlbmRvcnNlIG9yXFxuICAgICAgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljXFxuICAgICAgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLlxcblxcblRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlNcXG5cXFwiQVMgSVNcXFwiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVFxcbkxJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUlxcbkEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUXFxuT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsXFxuU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVFxcbkxJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLFxcbkRBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWVxcblRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlRcXG4oSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0VcXG5PRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLlxcbiovXFxuXFxuI2lmbmRlZiBGWEFBX1JFRFVDRV9NSU5cXG4gICAgI2RlZmluZSBGWEFBX1JFRFVDRV9NSU4gICAoMS4wLyAxMjguMClcXG4jZW5kaWZcXG4jaWZuZGVmIEZYQUFfUkVEVUNFX01VTFxcbiAgICAjZGVmaW5lIEZYQUFfUkVEVUNFX01VTCAgICgxLjAgLyA4LjApXFxuI2VuZGlmXFxuI2lmbmRlZiBGWEFBX1NQQU5fTUFYXFxuICAgICNkZWZpbmUgRlhBQV9TUEFOX01BWCAgICAgOC4wXFxuI2VuZGlmXFxuXFxuLy9vcHRpbWl6ZWQgdmVyc2lvbiBmb3IgbW9iaWxlLCB3aGVyZSBkZXBlbmRlbnRcXG4vL3RleHR1cmUgcmVhZHMgY2FuIGJlIGEgYm90dGxlbmVja1xcbnZlYzQgZnhhYShzYW1wbGVyMkQgdGV4LCB2ZWMyIGZyYWdDb29yZCwgdmVjMiByZXNvbHV0aW9uLFxcbiAgICAgICAgICAgIHZlYzIgdl9yZ2JOVywgdmVjMiB2X3JnYk5FLFxcbiAgICAgICAgICAgIHZlYzIgdl9yZ2JTVywgdmVjMiB2X3JnYlNFLFxcbiAgICAgICAgICAgIHZlYzIgdl9yZ2JNKSB7XFxuICAgIHZlYzQgY29sb3I7XFxuICAgIG1lZGl1bXAgdmVjMiBpbnZlcnNlVlAgPSB2ZWMyKDEuMCAvIHJlc29sdXRpb24ueCwgMS4wIC8gcmVzb2x1dGlvbi55KTtcXG4gICAgdmVjMyByZ2JOVyA9IHRleHR1cmUyRCh0ZXgsIHZfcmdiTlcpLnh5ejtcXG4gICAgdmVjMyByZ2JORSA9IHRleHR1cmUyRCh0ZXgsIHZfcmdiTkUpLnh5ejtcXG4gICAgdmVjMyByZ2JTVyA9IHRleHR1cmUyRCh0ZXgsIHZfcmdiU1cpLnh5ejtcXG4gICAgdmVjMyByZ2JTRSA9IHRleHR1cmUyRCh0ZXgsIHZfcmdiU0UpLnh5ejtcXG4gICAgdmVjNCB0ZXhDb2xvciA9IHRleHR1cmUyRCh0ZXgsIHZfcmdiTSk7XFxuICAgIHZlYzMgcmdiTSAgPSB0ZXhDb2xvci54eXo7XFxuICAgIHZlYzMgbHVtYSA9IHZlYzMoMC4yOTksIDAuNTg3LCAwLjExNCk7XFxuICAgIGZsb2F0IGx1bWFOVyA9IGRvdChyZ2JOVywgbHVtYSk7XFxuICAgIGZsb2F0IGx1bWFORSA9IGRvdChyZ2JORSwgbHVtYSk7XFxuICAgIGZsb2F0IGx1bWFTVyA9IGRvdChyZ2JTVywgbHVtYSk7XFxuICAgIGZsb2F0IGx1bWFTRSA9IGRvdChyZ2JTRSwgbHVtYSk7XFxuICAgIGZsb2F0IGx1bWFNICA9IGRvdChyZ2JNLCAgbHVtYSk7XFxuICAgIGZsb2F0IGx1bWFNaW4gPSBtaW4obHVtYU0sIG1pbihtaW4obHVtYU5XLCBsdW1hTkUpLCBtaW4obHVtYVNXLCBsdW1hU0UpKSk7XFxuICAgIGZsb2F0IGx1bWFNYXggPSBtYXgobHVtYU0sIG1heChtYXgobHVtYU5XLCBsdW1hTkUpLCBtYXgobHVtYVNXLCBsdW1hU0UpKSk7XFxuXFxuICAgIG1lZGl1bXAgdmVjMiBkaXI7XFxuICAgIGRpci54ID0gLSgobHVtYU5XICsgbHVtYU5FKSAtIChsdW1hU1cgKyBsdW1hU0UpKTtcXG4gICAgZGlyLnkgPSAgKChsdW1hTlcgKyBsdW1hU1cpIC0gKGx1bWFORSArIGx1bWFTRSkpO1xcblxcbiAgICBmbG9hdCBkaXJSZWR1Y2UgPSBtYXgoKGx1bWFOVyArIGx1bWFORSArIGx1bWFTVyArIGx1bWFTRSkgKlxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKDAuMjUgKiBGWEFBX1JFRFVDRV9NVUwpLCBGWEFBX1JFRFVDRV9NSU4pO1xcblxcbiAgICBmbG9hdCByY3BEaXJNaW4gPSAxLjAgLyAobWluKGFicyhkaXIueCksIGFicyhkaXIueSkpICsgZGlyUmVkdWNlKTtcXG4gICAgZGlyID0gbWluKHZlYzIoRlhBQV9TUEFOX01BWCwgRlhBQV9TUEFOX01BWCksXFxuICAgICAgICAgICAgICBtYXgodmVjMigtRlhBQV9TUEFOX01BWCwgLUZYQUFfU1BBTl9NQVgpLFxcbiAgICAgICAgICAgICAgZGlyICogcmNwRGlyTWluKSkgKiBpbnZlcnNlVlA7XFxuXFxuICAgIHZlYzMgcmdiQSA9IDAuNSAqIChcXG4gICAgICAgIHRleHR1cmUyRCh0ZXgsIGZyYWdDb29yZCAqIGludmVyc2VWUCArIGRpciAqICgxLjAgLyAzLjAgLSAwLjUpKS54eXogK1xcbiAgICAgICAgdGV4dHVyZTJEKHRleCwgZnJhZ0Nvb3JkICogaW52ZXJzZVZQICsgZGlyICogKDIuMCAvIDMuMCAtIDAuNSkpLnh5eik7XFxuICAgIHZlYzMgcmdiQiA9IHJnYkEgKiAwLjUgKyAwLjI1ICogKFxcbiAgICAgICAgdGV4dHVyZTJEKHRleCwgZnJhZ0Nvb3JkICogaW52ZXJzZVZQICsgZGlyICogLTAuNSkueHl6ICtcXG4gICAgICAgIHRleHR1cmUyRCh0ZXgsIGZyYWdDb29yZCAqIGludmVyc2VWUCArIGRpciAqIDAuNSkueHl6KTtcXG5cXG4gICAgZmxvYXQgbHVtYUIgPSBkb3QocmdiQiwgbHVtYSk7XFxuICAgIGlmICgobHVtYUIgPCBsdW1hTWluKSB8fCAobHVtYUIgPiBsdW1hTWF4KSlcXG4gICAgICAgIGNvbG9yID0gdmVjNChyZ2JBLCB0ZXhDb2xvci5hKTtcXG4gICAgZWxzZVxcbiAgICAgICAgY29sb3IgPSB2ZWM0KHJnYkIsIHRleENvbG9yLmEpO1xcbiAgICByZXR1cm4gY29sb3I7XFxufVxcblxcblxcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xcbnZhcnlpbmcgdmVjNCB2Q29sb3I7XFxudmFyeWluZyB2ZWMyIHZSZXNvbHV0aW9uO1xcblxcbi8vdGV4Y29vcmRzIGNvbXB1dGVkIGluIHZlcnRleCBzdGVwXFxuLy90byBhdm9pZCBkZXBlbmRlbnQgdGV4dHVyZSByZWFkc1xcbnZhcnlpbmcgdmVjMiB2X3JnYk5XO1xcbnZhcnlpbmcgdmVjMiB2X3JnYk5FO1xcbnZhcnlpbmcgdmVjMiB2X3JnYlNXO1xcbnZhcnlpbmcgdmVjMiB2X3JnYlNFO1xcbnZhcnlpbmcgdmVjMiB2X3JnYk07XFxuXFxudW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXI7XFxuXFxuXFxudm9pZCBtYWluKHZvaWQpe1xcblxcbiAgICBnbF9GcmFnQ29sb3IgPSBmeGFhKHVTYW1wbGVyLCB2VGV4dHVyZUNvb3JkICogdlJlc29sdXRpb24sIHZSZXNvbHV0aW9uLCB2X3JnYk5XLCB2X3JnYk5FLCB2X3JnYlNXLCB2X3JnYlNFLCB2X3JnYk0pO1xcblxcbn1cXG5cIixcbiAgICAgICAgLy8gdW5pZm9ybXNcbiAgICAgICAge1xuICAgICAgICAgICAgcmVzb2x1dGlvbjogeyB0eXBlOiAndjInLCB2YWx1ZTogeyB4OiAxLCB5OiAxIH0gfVxuICAgICAgICB9XG4gICAgKTtcblxufVxuXG5GWEFBRmlsdGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoQWJzdHJhY3RGaWx0ZXIucHJvdG90eXBlKTtcbkZYQUFGaWx0ZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gRlhBQUZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gRlhBQUZpbHRlcjtcblxuLyoqXG4gKiBBcHBsaWVzIHRoZSBmaWx0ZXJcbiAqXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcn0gVGhlIHJlbmRlcmVyIHRvIHJldHJpZXZlIHRoZSBmaWx0ZXIgZnJvbVxuICogQHBhcmFtIGlucHV0IHtQSVhJLlJlbmRlclRhcmdldH1cbiAqIEBwYXJhbSBvdXRwdXQge1BJWEkuUmVuZGVyVGFyZ2V0fVxuICovXG5GWEFBRmlsdGVyLnByb3RvdHlwZS5hcHBseUZpbHRlciA9IGZ1bmN0aW9uIChyZW5kZXJlciwgaW5wdXQsIG91dHB1dClcbntcbiAgICB2YXIgZmlsdGVyTWFuYWdlciA9IHJlbmRlcmVyLmZpbHRlck1hbmFnZXI7XG5cbiAgICB2YXIgc2hhZGVyID0gdGhpcy5nZXRTaGFkZXIoIHJlbmRlcmVyICk7XG4gICAgIC8vIGRyYXcgdGhlIGZpbHRlci4uLlxuICAgIGZpbHRlck1hbmFnZXIuYXBwbHlGaWx0ZXIoc2hhZGVyLCBpbnB1dCwgb3V0cHV0KTtcbn07XG4iLCJ2YXIgQWJzdHJhY3RGaWx0ZXIgPSByZXF1aXJlKCcuL0Fic3RyYWN0RmlsdGVyJyksXG4gICAgbWF0aCA9ICByZXF1aXJlKCcuLi8uLi8uLi9tYXRoJyk7XG5cbi8vIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL3N1YnN0YWNrL2JyZnMvaXNzdWVzLzI1XG5cblxuLyoqXG4gKiBUaGUgU3ByaXRlTWFza0ZpbHRlciBjbGFzc1xuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5BYnN0cmFjdEZpbHRlclxuICogQG1lbWJlcm9mIFBJWElcbiAqIEBwYXJhbSBzcHJpdGUge1BJWEkuU3ByaXRlfSB0aGUgdGFyZ2V0IHNwcml0ZVxuICovXG5mdW5jdGlvbiBTcHJpdGVNYXNrRmlsdGVyKHNwcml0ZSlcbntcbiAgICB2YXIgbWFza01hdHJpeCA9IG5ldyBtYXRoLk1hdHJpeCgpO1xuXG4gICAgQWJzdHJhY3RGaWx0ZXIuY2FsbCh0aGlzLFxuICAgICAgICBcImF0dHJpYnV0ZSB2ZWMyIGFWZXJ0ZXhQb3NpdGlvbjtcXG5hdHRyaWJ1dGUgdmVjMiBhVGV4dHVyZUNvb3JkO1xcbmF0dHJpYnV0ZSB2ZWM0IGFDb2xvcjtcXG5cXG51bmlmb3JtIG1hdDMgcHJvamVjdGlvbk1hdHJpeDtcXG51bmlmb3JtIG1hdDMgb3RoZXJNYXRyaXg7XFxuXFxudmFyeWluZyB2ZWMyIHZNYXNrQ29vcmQ7XFxudmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7XFxudmFyeWluZyB2ZWM0IHZDb2xvcjtcXG5cXG52b2lkIG1haW4odm9pZClcXG57XFxuICAgIGdsX1Bvc2l0aW9uID0gdmVjNCgocHJvamVjdGlvbk1hdHJpeCAqIHZlYzMoYVZlcnRleFBvc2l0aW9uLCAxLjApKS54eSwgMC4wLCAxLjApO1xcbiAgICB2VGV4dHVyZUNvb3JkID0gYVRleHR1cmVDb29yZDtcXG4gICAgdk1hc2tDb29yZCA9ICggb3RoZXJNYXRyaXggKiB2ZWMzKCBhVGV4dHVyZUNvb3JkLCAxLjApICApLnh5O1xcbiAgICB2Q29sb3IgPSB2ZWM0KGFDb2xvci5yZ2IgKiBhQ29sb3IuYSwgYUNvbG9yLmEpO1xcbn1cXG5cIixcbiAgICAgICAgXCJwcmVjaXNpb24gbG93cCBmbG9hdDtcXG5cXG52YXJ5aW5nIHZlYzIgdk1hc2tDb29yZDtcXG52YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDtcXG52YXJ5aW5nIHZlYzQgdkNvbG9yO1xcblxcbnVuaWZvcm0gc2FtcGxlcjJEIHVTYW1wbGVyO1xcbnVuaWZvcm0gZmxvYXQgYWxwaGE7XFxudW5pZm9ybSBzYW1wbGVyMkQgbWFzaztcXG5cXG52b2lkIG1haW4odm9pZClcXG57XFxuICAgIC8vIGNoZWNrIGNsaXAhIHRoaXMgd2lsbCBzdG9wIHRoZSBtYXNrIGJsZWVkaW5nIG91dCBmcm9tIHRoZSBlZGdlc1xcbiAgICB2ZWMyIHRleHQgPSBhYnMoIHZNYXNrQ29vcmQgLSAwLjUgKTtcXG4gICAgdGV4dCA9IHN0ZXAoMC41LCB0ZXh0KTtcXG4gICAgZmxvYXQgY2xpcCA9IDEuMCAtIG1heCh0ZXh0LnksIHRleHQueCk7XFxuICAgIHZlYzQgb3JpZ2luYWwgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZUZXh0dXJlQ29vcmQpO1xcbiAgICB2ZWM0IG1hc2t5ID0gdGV4dHVyZTJEKG1hc2ssIHZNYXNrQ29vcmQpO1xcbiAgICBvcmlnaW5hbCAqPSAobWFza3kuciAqIG1hc2t5LmEgKiBhbHBoYSAqIGNsaXApO1xcbiAgICBnbF9GcmFnQ29sb3IgPSBvcmlnaW5hbDtcXG59XFxuXCIsXG4gICAgICAgIHtcbiAgICAgICAgICAgIG1hc2s6ICAgICAgICAgICB7IHR5cGU6ICdzYW1wbGVyMkQnLCB2YWx1ZTogc3ByaXRlLl90ZXh0dXJlIH0sXG4gICAgICAgICAgICBhbHBoYTogICAgICAgICAgeyB0eXBlOiAnZicsIHZhbHVlOiAxfSxcbiAgICAgICAgICAgIG90aGVyTWF0cml4OiAgICB7IHR5cGU6ICdtYXQzJywgdmFsdWU6IG1hc2tNYXRyaXgudG9BcnJheSh0cnVlKSB9XG4gICAgICAgIH1cbiAgICApO1xuXG4gICAgdGhpcy5tYXNrU3ByaXRlID0gc3ByaXRlO1xuICAgIHRoaXMubWFza01hdHJpeCA9IG1hc2tNYXRyaXg7XG59XG5cblNwcml0ZU1hc2tGaWx0ZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShBYnN0cmFjdEZpbHRlci5wcm90b3R5cGUpO1xuU3ByaXRlTWFza0ZpbHRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBTcHJpdGVNYXNrRmlsdGVyO1xubW9kdWxlLmV4cG9ydHMgPSBTcHJpdGVNYXNrRmlsdGVyO1xuXG4vKipcbiAqIEFwcGxpZXMgdGhlIGZpbHRlclxuICpcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5XZWJHTFJlbmRlcmVyfSBUaGUgcmVuZGVyZXIgdG8gcmV0cmlldmUgdGhlIGZpbHRlciBmcm9tXG4gKiBAcGFyYW0gaW5wdXQge1BJWEkuUmVuZGVyVGFyZ2V0fVxuICogQHBhcmFtIG91dHB1dCB7UElYSS5SZW5kZXJUYXJnZXR9XG4gKi9cblNwcml0ZU1hc2tGaWx0ZXIucHJvdG90eXBlLmFwcGx5RmlsdGVyID0gZnVuY3Rpb24gKHJlbmRlcmVyLCBpbnB1dCwgb3V0cHV0KVxue1xuICAgIHZhciBmaWx0ZXJNYW5hZ2VyID0gcmVuZGVyZXIuZmlsdGVyTWFuYWdlcjtcblxuICAgIHRoaXMudW5pZm9ybXMubWFzay52YWx1ZSA9IHRoaXMubWFza1Nwcml0ZS5fdGV4dHVyZTtcblxuICAgIGZpbHRlck1hbmFnZXIuY2FsY3VsYXRlTWFwcGVkTWF0cml4KGlucHV0LmZyYW1lLCB0aGlzLm1hc2tTcHJpdGUsIHRoaXMubWFza01hdHJpeCk7XG5cbiAgICB0aGlzLnVuaWZvcm1zLm90aGVyTWF0cml4LnZhbHVlID0gdGhpcy5tYXNrTWF0cml4LnRvQXJyYXkodHJ1ZSk7XG4gICAgdGhpcy51bmlmb3Jtcy5hbHBoYS52YWx1ZSA9IHRoaXMubWFza1Nwcml0ZS53b3JsZEFscGhhO1xuXG4gICAgdmFyIHNoYWRlciA9IHRoaXMuZ2V0U2hhZGVyKHJlbmRlcmVyKTtcbiAgICAgLy8gZHJhdyB0aGUgZmlsdGVyLi4uXG4gICAgZmlsdGVyTWFuYWdlci5hcHBseUZpbHRlcihzaGFkZXIsIGlucHV0LCBvdXRwdXQpO1xufTtcblxuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhTcHJpdGVNYXNrRmlsdGVyLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFRoZSB0ZXh0dXJlIHVzZWQgZm9yIHRoZSBkaXNwbGFjZW1lbnQgbWFwLiBNdXN0IGJlIHBvd2VyIG9mIDIgc2l6ZWQgdGV4dHVyZS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuVGV4dHVyZX1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5TcHJpdGVNYXNrRmlsdGVyI1xuICAgICAqL1xuICAgIG1hcDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVuaWZvcm1zLm1hc2sudmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLm1hc2sudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBUaGUgb2Zmc2V0IHVzZWQgdG8gbW92ZSB0aGUgZGlzcGxhY2VtZW50IG1hcC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuUG9pbnR9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuU3ByaXRlTWFza0ZpbHRlciNcbiAgICAgKi9cbiAgICBvZmZzZXQ6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbigpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVuaWZvcm1zLm9mZnNldC52YWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbih2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy5vZmZzZXQudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuIiwidmFyIFdlYkdMTWFuYWdlciA9IHJlcXVpcmUoJy4vV2ViR0xNYW5hZ2VyJyk7XG5cbi8qKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQGV4dGVuZHMgUElYSS5XZWJHbE1hbmFnZXJcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5XZWJHTFJlbmRlcmVyfSBUaGUgcmVuZGVyZXIgdGhpcyBtYW5hZ2VyIHdvcmtzIGZvci5cbiAqL1xuZnVuY3Rpb24gQmxlbmRNb2RlTWFuYWdlcihyZW5kZXJlcilcbntcbiAgICBXZWJHTE1hbmFnZXIuY2FsbCh0aGlzLCByZW5kZXJlcik7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy5jdXJyZW50QmxlbmRNb2RlID0gOTk5OTk7XG59XG5cbkJsZW5kTW9kZU1hbmFnZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShXZWJHTE1hbmFnZXIucHJvdG90eXBlKTtcbkJsZW5kTW9kZU1hbmFnZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gQmxlbmRNb2RlTWFuYWdlcjtcbm1vZHVsZS5leHBvcnRzID0gQmxlbmRNb2RlTWFuYWdlcjtcblxuLyoqXG4gKiBTZXRzLXVwIHRoZSBnaXZlbiBibGVuZE1vZGUgZnJvbSBXZWJHTCdzIHBvaW50IG9mIHZpZXcuXG4gKlxuICogQHBhcmFtIGJsZW5kTW9kZSB7bnVtYmVyfSB0aGUgYmxlbmRNb2RlLCBzaG91bGQgYmUgYSBQaXhpIGNvbnN0LCBzdWNoIGFzIGBQSVhJLkJMRU5EX01PREVTLkFERGAuIFNlZVxuICogIHtAbGluayBQSVhJLkJMRU5EX01PREVTfSBmb3IgcG9zc2libGUgdmFsdWVzLlxuICovXG5CbGVuZE1vZGVNYW5hZ2VyLnByb3RvdHlwZS5zZXRCbGVuZE1vZGUgPSBmdW5jdGlvbiAoYmxlbmRNb2RlKVxue1xuICAgIGlmICh0aGlzLmN1cnJlbnRCbGVuZE1vZGUgPT09IGJsZW5kTW9kZSlcbiAgICB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICB0aGlzLmN1cnJlbnRCbGVuZE1vZGUgPSBibGVuZE1vZGU7XG5cbiAgICB2YXIgbW9kZSA9IHRoaXMucmVuZGVyZXIuYmxlbmRNb2Rlc1t0aGlzLmN1cnJlbnRCbGVuZE1vZGVdO1xuICAgIHRoaXMucmVuZGVyZXIuZ2wuYmxlbmRGdW5jKG1vZGVbMF0sIG1vZGVbMV0pO1xuXG4gICAgcmV0dXJuIHRydWU7XG59O1xuIiwidmFyIFdlYkdMTWFuYWdlciA9IHJlcXVpcmUoJy4vV2ViR0xNYW5hZ2VyJyksXG4gICAgUmVuZGVyVGFyZ2V0ID0gcmVxdWlyZSgnLi4vdXRpbHMvUmVuZGVyVGFyZ2V0JyksXG4gICAgQ09OU1QgPSByZXF1aXJlKCcuLi8uLi8uLi9jb25zdCcpLFxuICAgIFF1YWQgPSByZXF1aXJlKCcuLi91dGlscy9RdWFkJyksXG4gICAgbWF0aCA9ICByZXF1aXJlKCcuLi8uLi8uLi9tYXRoJyk7XG5cbi8qKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQGV4dGVuZHMgUElYSS5XZWJHTE1hbmFnZXJcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5XZWJHTFJlbmRlcmVyfSBUaGUgcmVuZGVyZXIgdGhpcyBtYW5hZ2VyIHdvcmtzIGZvci5cbiAqL1xuZnVuY3Rpb24gRmlsdGVyTWFuYWdlcihyZW5kZXJlcilcbntcbiAgICBXZWJHTE1hbmFnZXIuY2FsbCh0aGlzLCByZW5kZXJlcik7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtvYmplY3RbXX1cbiAgICAgKi9cbiAgICB0aGlzLmZpbHRlclN0YWNrID0gW107XG5cbiAgICB0aGlzLmZpbHRlclN0YWNrLnB1c2goe1xuICAgICAgICByZW5kZXJUYXJnZXQ6cmVuZGVyZXIuY3VycmVudFJlbmRlclRhcmdldCxcbiAgICAgICAgZmlsdGVyOltdLFxuICAgICAgICBib3VuZHM6bnVsbFxuICAgIH0pO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7UElYSS5SZW5kZXJUYXJnZXRbXX1cbiAgICAgKi9cbiAgICB0aGlzLnRleHR1cmVQb29sID0gW107XG5cbiAgICAvKipcbiAgICAgKiBUaGUgc2l6ZSBvZiB0aGUgdGV4dHVyZVxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5SZWN0YW5nbGV9XG4gICAgICovXG4gICAgLy8gbGlzdGVuIGZvciBjb250ZXh0IGFuZCB1cGRhdGUgbmVjZXNzYXJ5IGJ1ZmZlcnNcbiAgICAvL1RPRE8gbWFrZSB0aGlzIGR5bmFtaWMhXG4gICAgLy9UT0RPIHRlc3QgdGhpcyBvdXQgYnkgZm9yY2VzIHBvd2VyIG9mIHR3bz9cbiAgICB0aGlzLnRleHR1cmVTaXplID0gbmV3IG1hdGguUmVjdGFuZ2xlKDAsIDAsIHJlbmRlcmVyLndpZHRoLCByZW5kZXJlci5oZWlnaHQpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGN1cnJlbnQgZnJhbWVcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuUmVjdGFuZ2xlfVxuICAgICAqL1xuICAgIHRoaXMuY3VycmVudEZyYW1lID0gbnVsbDtcbn1cblxuRmlsdGVyTWFuYWdlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFdlYkdMTWFuYWdlci5wcm90b3R5cGUpO1xuRmlsdGVyTWFuYWdlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBGaWx0ZXJNYW5hZ2VyO1xubW9kdWxlLmV4cG9ydHMgPSBGaWx0ZXJNYW5hZ2VyO1xuXG5cbi8qKlxuICogQ2FsbGVkIHdoZW4gdGhlcmUgaXMgYSBXZWJHTCBjb250ZXh0IGNoYW5nZS5cbiAqXG4gKi9cbkZpbHRlck1hbmFnZXIucHJvdG90eXBlLm9uQ29udGV4dENoYW5nZSA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy50ZXh0dXJlUG9vbC5sZW5ndGggPSAwO1xuXG4gICAgdmFyIGdsID0gdGhpcy5yZW5kZXJlci5nbDtcbiAgICB0aGlzLnF1YWQgPSBuZXcgUXVhZChnbCk7XG59O1xuXG4vKipcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5XZWJHTFJlbmRlcmVyfVxuICogQHBhcmFtIGJ1ZmZlciB7QXJyYXlCdWZmZXJ9XG4gKi9cbkZpbHRlck1hbmFnZXIucHJvdG90eXBlLnNldEZpbHRlclN0YWNrID0gZnVuY3Rpb24gKCBmaWx0ZXJTdGFjayApXG57XG4gICAgdGhpcy5maWx0ZXJTdGFjayA9IGZpbHRlclN0YWNrO1xufTtcblxuLyoqXG4gKiBBcHBsaWVzIHRoZSBmaWx0ZXIgYW5kIGFkZHMgaXQgdG8gdGhlIGN1cnJlbnQgZmlsdGVyIHN0YWNrLlxuICpcbiAqIEBwYXJhbSB0YXJnZXQge1BJWEkuRGlzcGxheU9iamVjdH1cbiAqIEBwYXJhbSBmaWx0ZXJzIHtQSVhJLkFic3RyYWN0RmlsZXJbXX0gdGhlIGZpbHRlcnMgdGhhdCB3aWxsIGJlIHB1c2hlZCB0byB0aGUgY3VycmVudCBmaWx0ZXIgc3RhY2tcbiAqL1xuRmlsdGVyTWFuYWdlci5wcm90b3R5cGUucHVzaEZpbHRlciA9IGZ1bmN0aW9uICh0YXJnZXQsIGZpbHRlcnMpXG57XG4gICAgLy8gZ2V0IHRoZSBib3VuZHMgb2YgdGhlIG9iamVjdC4uXG4gICAgLy8gVE9ETyByZXBsYWNlIGNsb25lIHdpdGggYSBjb3B5IHRvIHNhdmUgb2JqZWN0IGNyZWF0aW9uXG4gICAgdmFyIGJvdW5kcyA9IHRhcmdldC5maWx0ZXJBcmVhID8gdGFyZ2V0LmZpbHRlckFyZWEuY2xvbmUoKSA6IHRhcmdldC5nZXRCb3VuZHMoKTtcblxuICAgIC8vYm91bmRzID0gYm91bmRzLmNsb25lKCk7XG5cbiAgICAvLyByb3VuZCBvZmYgdGhlIHJlY3RhbmdsZSB0byBnZXQgYSBuaWNlIHNtb29vb29vb3RoIGZpbHRlciA6KVxuICAgIGJvdW5kcy54ID0gYm91bmRzLnggfCAwO1xuICAgIGJvdW5kcy55ID0gYm91bmRzLnkgfCAwO1xuICAgIGJvdW5kcy53aWR0aCA9IGJvdW5kcy53aWR0aCB8IDA7XG4gICAgYm91bmRzLmhlaWdodCA9IGJvdW5kcy5oZWlnaHQgfCAwO1xuXG5cbiAgICAvLyBwYWRkaW5nIVxuICAgIHZhciBwYWRkaW5nID0gZmlsdGVyc1swXS5wYWRkaW5nIHwgMDtcbiAgICBib3VuZHMueCAtPSBwYWRkaW5nO1xuICAgIGJvdW5kcy55IC09IHBhZGRpbmc7XG4gICAgYm91bmRzLndpZHRoICs9IHBhZGRpbmcgKiAyO1xuICAgIGJvdW5kcy5oZWlnaHQgKz0gcGFkZGluZyAqIDI7XG5cblxuICAgIGlmKHRoaXMucmVuZGVyZXIuY3VycmVudFJlbmRlclRhcmdldC50cmFuc2Zvcm0pXG4gICAge1xuICAgICAgICAvL1RPRE8gdGhpcyB3aWxsIGJyZWFrIGlmIHRoZSByZW5kZXJUZXh0dXJlIHRyYW5zZm9ybSBpcyBhbnl0aGluZyBvdGhlciB0aGFuIGEgdHJhbnNsYXRpb24uXG4gICAgICAgIC8vV2lsbCBuZWVkIHRvIHRha2UgdGhlIGZ1bGwgbWF0cml4IHRyYW5zZm9ybSBpbnRvIGFjb3VudC4uXG4gICAgICAgIHZhciB0cmFuc2Zvcm0gPSB0aGlzLnJlbmRlcmVyLmN1cnJlbnRSZW5kZXJUYXJnZXQudHJhbnNmb3JtO1xuXG4gICAgICAgIGJvdW5kcy54ICs9IHRyYW5zZm9ybS50eDtcbiAgICAgICAgYm91bmRzLnkgKz0gdHJhbnNmb3JtLnR5O1xuXG4gICAgICAgIHRoaXMuY2FwRmlsdGVyQXJlYSggYm91bmRzICk7XG5cbiAgICAgICAgYm91bmRzLnggLT0gdHJhbnNmb3JtLnR4O1xuICAgICAgICBib3VuZHMueSAtPSB0cmFuc2Zvcm0udHk7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgICB0aGlzLmNhcEZpbHRlckFyZWEoIGJvdW5kcyApO1xuICAgIH1cblxuICAgIGlmKGJvdW5kcy53aWR0aCA+IDAgJiYgYm91bmRzLmhlaWdodCA+IDApXG4gICAge1xuICAgICAgICB0aGlzLmN1cnJlbnRGcmFtZSA9IGJvdW5kcztcblxuICAgICAgICB2YXIgdGV4dHVyZSA9IHRoaXMuZ2V0UmVuZGVyVGFyZ2V0KCk7XG5cbiAgICAgICAgdGhpcy5yZW5kZXJlci5zZXRSZW5kZXJUYXJnZXQodGV4dHVyZSk7XG5cbiAgICAgICAgLy8gY2xlYXIgdGhlIHRleHR1cmUuLlxuICAgICAgICB0ZXh0dXJlLmNsZWFyKCk7XG5cbiAgICAgICAgLy8gVE9ETyBnZXQgcmlkIG9mIG9iamVjdCBjcmVhdGlvbiFcbiAgICAgICAgdGhpcy5maWx0ZXJTdGFjay5wdXNoKHtcbiAgICAgICAgICAgIHJlbmRlclRhcmdldDogdGV4dHVyZSxcbiAgICAgICAgICAgIGZpbHRlcjogZmlsdGVyc1xuICAgICAgICB9KTtcblxuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICAvLyBwdXNoIHNvbXRoaW5nIG9uIHRvIHRoZSBzdGFjayB0aGF0IGlzIGVtcHR5XG4gICAgICAgIHRoaXMuZmlsdGVyU3RhY2sucHVzaCh7XG4gICAgICAgICAgICByZW5kZXJUYXJnZXQ6IG51bGwsXG4gICAgICAgICAgICBmaWx0ZXI6IGZpbHRlcnNcbiAgICAgICAgfSk7XG4gICAgfVxufTtcblxuXG4vKipcbiAqIFJlbW92ZXMgdGhlIGxhc3QgZmlsdGVyIGZyb20gdGhlIGZpbHRlciBzdGFjayBhbmQgcmV0dXJucyBpdC5cbiAqXG4gKi9cbkZpbHRlck1hbmFnZXIucHJvdG90eXBlLnBvcEZpbHRlciA9IGZ1bmN0aW9uICgpXG57XG4gICAgdmFyIGZpbHRlckRhdGEgPSB0aGlzLmZpbHRlclN0YWNrLnBvcCgpO1xuICAgIHZhciBwcmV2aW91c0ZpbHRlckRhdGEgPSB0aGlzLmZpbHRlclN0YWNrW3RoaXMuZmlsdGVyU3RhY2subGVuZ3RoLTFdO1xuXG4gICAgdmFyIGlucHV0ID0gZmlsdGVyRGF0YS5yZW5kZXJUYXJnZXQ7XG5cbiAgICAvLyBpZiB0aGUgcmVuZGVyVGFyZ2V0IGlzIG51bGwgdGhlbiB3ZSBkb24ndCBhcHBseSB0aGUgZmlsdGVyIGFzIGl0cyBvZmZzY3JlZW5cbiAgICBpZighZmlsdGVyRGF0YS5yZW5kZXJUYXJnZXQpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFyIG91dHB1dCA9IHByZXZpb3VzRmlsdGVyRGF0YS5yZW5kZXJUYXJnZXQ7XG5cbiAgICAvLyB1c2UgcHJvZ3JhbVxuICAgIHZhciBnbCA9IHRoaXMucmVuZGVyZXIuZ2w7XG5cblxuICAgIHRoaXMuY3VycmVudEZyYW1lID0gaW5wdXQuZnJhbWU7XG5cbiAgICB0aGlzLnF1YWQubWFwKHRoaXMudGV4dHVyZVNpemUsIGlucHV0LmZyYW1lKTtcblxuXG4gICAgLy8gVE9ETy4uIHRoaXMgcHJvYmFibHkgb25seSBuZWVkcyB0byBiZSBkb25lIG9uY2UhXG4gICAgZ2wuYmluZEJ1ZmZlcihnbC5BUlJBWV9CVUZGRVIsIHRoaXMucXVhZC52ZXJ0ZXhCdWZmZXIpO1xuICAgIGdsLmJpbmRCdWZmZXIoZ2wuRUxFTUVOVF9BUlJBWV9CVUZGRVIsIHRoaXMucXVhZC5pbmRleEJ1ZmZlcik7XG5cbiAgICB2YXIgZmlsdGVycyA9IGZpbHRlckRhdGEuZmlsdGVyO1xuXG4gICAgLy8gYXNzdW1pbmcgYWxsIGZpbHRlcnMgZm9sbG93IHRoZSBjb3JyZWN0IGZvcm1hdD8/XG4gICAgZ2wudmVydGV4QXR0cmliUG9pbnRlcih0aGlzLnJlbmRlcmVyLnNoYWRlck1hbmFnZXIuZGVmYXVsdFNoYWRlci5hdHRyaWJ1dGVzLmFWZXJ0ZXhQb3NpdGlvbiwgMiwgZ2wuRkxPQVQsIGZhbHNlLCAwLCAwKTtcbiAgICBnbC52ZXJ0ZXhBdHRyaWJQb2ludGVyKHRoaXMucmVuZGVyZXIuc2hhZGVyTWFuYWdlci5kZWZhdWx0U2hhZGVyLmF0dHJpYnV0ZXMuYVRleHR1cmVDb29yZCwgMiwgZ2wuRkxPQVQsIGZhbHNlLCAwLCAyICogNCAqIDQpO1xuICAgIGdsLnZlcnRleEF0dHJpYlBvaW50ZXIodGhpcy5yZW5kZXJlci5zaGFkZXJNYW5hZ2VyLmRlZmF1bHRTaGFkZXIuYXR0cmlidXRlcy5hQ29sb3IsIDQsIGdsLkZMT0FULCBmYWxzZSwgMCwgNCAqIDQgKiA0KTtcblxuICAgIC8vIHJlc3RvcmUgdGhlIG5vcm1hbCBibGVuZG1vZGUhXG4gICAgdGhpcy5yZW5kZXJlci5ibGVuZE1vZGVNYW5hZ2VyLnNldEJsZW5kTW9kZShDT05TVC5CTEVORF9NT0RFUy5OT1JNQUwpO1xuXG4gICAgaWYgKGZpbHRlcnMubGVuZ3RoID09PSAxKVxuICAgIHtcbiAgICAgICAgLy8gVE9ETyAoY2VuZ2xlcikgLSBUaGVyZSBoYXMgdG8gYmUgYSBiZXR0ZXIgd2F5IHRoZW4gc2V0dGluZyB0aGlzIGVhY2ggdGltZT9cbiAgICAgICAgaWYgKGZpbHRlcnNbMF0udW5pZm9ybXMuZGltZW5zaW9ucylcbiAgICAgICAge1xuICAgICAgICAgICAgZmlsdGVyc1swXS51bmlmb3Jtcy5kaW1lbnNpb25zLnZhbHVlWzBdID0gdGhpcy5yZW5kZXJlci53aWR0aDtcbiAgICAgICAgICAgIGZpbHRlcnNbMF0udW5pZm9ybXMuZGltZW5zaW9ucy52YWx1ZVsxXSA9IHRoaXMucmVuZGVyZXIuaGVpZ2h0O1xuICAgICAgICAgICAgZmlsdGVyc1swXS51bmlmb3Jtcy5kaW1lbnNpb25zLnZhbHVlWzJdID0gdGhpcy5xdWFkLnZlcnRpY2VzWzBdO1xuICAgICAgICAgICAgZmlsdGVyc1swXS51bmlmb3Jtcy5kaW1lbnNpb25zLnZhbHVlWzNdID0gdGhpcy5xdWFkLnZlcnRpY2VzWzVdO1xuICAgICAgICB9XG5cbiAgICAgICAgZmlsdGVyc1swXS5hcHBseUZpbHRlciggdGhpcy5yZW5kZXJlciwgaW5wdXQsIG91dHB1dCApO1xuICAgICAgICB0aGlzLnJldHVyblJlbmRlclRhcmdldCggaW5wdXQgKTtcblxuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICB2YXIgZmxpcFRleHR1cmUgPSBpbnB1dDtcbiAgICAgICAgdmFyIGZsb3BUZXh0dXJlID0gdGhpcy5nZXRSZW5kZXJUYXJnZXQodHJ1ZSk7XG5cbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBmaWx0ZXJzLmxlbmd0aC0xOyBpKyspXG4gICAgICAgIHtcbiAgICAgICAgICAgIHZhciBmaWx0ZXIgPSBmaWx0ZXJzW2ldO1xuXG4gICAgICAgICAgICAvLyBUT0RPIChjZW5nbGVyKSAtIFRoZXJlIGhhcyB0byBiZSBhIGJldHRlciB3YXkgdGhlbiBzZXR0aW5nIHRoaXMgZWFjaCB0aW1lP1xuICAgICAgICAgICAgaWYgKGZpbHRlci51bmlmb3Jtcy5kaW1lbnNpb25zKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGZpbHRlci51bmlmb3Jtcy5kaW1lbnNpb25zLnZhbHVlWzBdID0gdGhpcy5yZW5kZXJlci53aWR0aDtcbiAgICAgICAgICAgICAgICBmaWx0ZXIudW5pZm9ybXMuZGltZW5zaW9ucy52YWx1ZVsxXSA9IHRoaXMucmVuZGVyZXIuaGVpZ2h0O1xuICAgICAgICAgICAgICAgIGZpbHRlci51bmlmb3Jtcy5kaW1lbnNpb25zLnZhbHVlWzJdID0gdGhpcy5xdWFkLnZlcnRpY2VzWzBdO1xuICAgICAgICAgICAgICAgIGZpbHRlci51bmlmb3Jtcy5kaW1lbnNpb25zLnZhbHVlWzNdID0gdGhpcy5xdWFkLnZlcnRpY2VzWzVdO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBmaWx0ZXIuYXBwbHlGaWx0ZXIoIHRoaXMucmVuZGVyZXIsIGZsaXBUZXh0dXJlLCBmbG9wVGV4dHVyZSApO1xuXG4gICAgICAgICAgICB2YXIgdGVtcCA9IGZsaXBUZXh0dXJlO1xuICAgICAgICAgICAgZmxpcFRleHR1cmUgPSBmbG9wVGV4dHVyZTtcbiAgICAgICAgICAgIGZsb3BUZXh0dXJlID0gdGVtcDtcbiAgICAgICAgfVxuXG4gICAgICAgIGZpbHRlcnNbZmlsdGVycy5sZW5ndGgtMV0uYXBwbHlGaWx0ZXIoIHRoaXMucmVuZGVyZXIsIGZsaXBUZXh0dXJlLCBvdXRwdXQgKTtcblxuICAgICAgICB0aGlzLnJldHVyblJlbmRlclRhcmdldCggZmxpcFRleHR1cmUgKTtcbiAgICAgICAgdGhpcy5yZXR1cm5SZW5kZXJUYXJnZXQoIGZsb3BUZXh0dXJlICk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZpbHRlckRhdGEuZmlsdGVyO1xufTtcblxuLyoqXG4gKiBHcmFicyBhbiByZW5kZXIgdGFyZ2V0IGZyb20gdGhlIGludGVybmFsIHBvb2xcbiAqXG4gKiBAcGFyYW0gY2xlYXIge2Jvb2xlYW59IFdoZXRoZXIgb3Igbm90IHdlIG5lZWQgdG8gY2xlYXIgdGhlIFJlbmRlclRhcmdldFxuICogQHJldHVybiB7UmVuZGVyVGFyZ2V0fVxuICovXG5GaWx0ZXJNYW5hZ2VyLnByb3RvdHlwZS5nZXRSZW5kZXJUYXJnZXQgPSBmdW5jdGlvbiAoIGNsZWFyIClcbntcbiAgICB2YXIgcmVuZGVyVGFyZ2V0ID0gdGhpcy50ZXh0dXJlUG9vbC5wb3AoKSB8fCBuZXcgUmVuZGVyVGFyZ2V0KHRoaXMucmVuZGVyZXIuZ2wsIHRoaXMudGV4dHVyZVNpemUud2lkdGgsIHRoaXMudGV4dHVyZVNpemUuaGVpZ2h0LCBDT05TVC5TQ0FMRV9NT0RFUy5MSU5FQVIsIHRoaXMucmVuZGVyZXIucmVzb2x1dGlvbiAqIENPTlNULkZJTFRFUl9SRVNPTFVUSU9OKTtcbiAgICByZW5kZXJUYXJnZXQuZnJhbWUgPSB0aGlzLmN1cnJlbnRGcmFtZTtcblxuICAgIGlmIChjbGVhcilcbiAgICB7XG4gICAgICAgIHJlbmRlclRhcmdldC5jbGVhcih0cnVlKTtcbiAgICB9XG5cbiAgICByZXR1cm4gcmVuZGVyVGFyZ2V0O1xufTtcblxuLypcbiAqIFJldHVybnMgYSBSZW5kZXJUYXJnZXQgdG8gdGhlIGludGVybmFsIHBvb2xcbiAqIEBwYXJhbSByZW5kZXJUYXJnZXQge1JlbmRlclRhcmdldH0gVGhlIFJlbmRlclRhcmdldCB3ZSB3YW50IHRvIHJldHVybiB0byB0aGUgcG9vbFxuICovXG5GaWx0ZXJNYW5hZ2VyLnByb3RvdHlwZS5yZXR1cm5SZW5kZXJUYXJnZXQgPSBmdW5jdGlvbiAocmVuZGVyVGFyZ2V0KVxue1xuICAgIHRoaXMudGV4dHVyZVBvb2wucHVzaCggcmVuZGVyVGFyZ2V0ICk7XG59O1xuXG4vKlxuICogQXBwbGllcyB0aGUgZmlsdGVyXG4gKiBAcGFyYW0gc2hhZGVyIHtTaGFkZXJ9IFRoZSBzaGFkZXIgdG8gdXBsb2FkXG4gKiBAcGFyYW0gaW5wdXRUYXJnZXQge1JlbmRlclRhcmdldH1cbiAqIEBwYXJhbSBvdXRwdXRUYXJnZXQge1JlbmRlclRhcmdldH1cbiAqIEBwYXJhbSBjbGVhciB7Ym9vbGVhbn0gV2hldGhlciBvciBub3Qgd2Ugd2FudCB0byBjbGVhciB0aGUgb3V0cHV0VGFyZ2V0XG4gKi9cbkZpbHRlck1hbmFnZXIucHJvdG90eXBlLmFwcGx5RmlsdGVyID0gZnVuY3Rpb24gKHNoYWRlciwgaW5wdXRUYXJnZXQsIG91dHB1dFRhcmdldCwgY2xlYXIpXG57XG4gICAgdmFyIGdsID0gdGhpcy5yZW5kZXJlci5nbDtcblxuICAgIHRoaXMucmVuZGVyZXIuc2V0UmVuZGVyVGFyZ2V0KG91dHB1dFRhcmdldCk7XG5cbiAgICBpZiAoY2xlYXIpXG4gICAge1xuICAgICAgICBvdXRwdXRUYXJnZXQuY2xlYXIoKTtcbiAgICB9XG5cbiAgICAvLyBzZXQgdGhlIHNoYWRlclxuICAgIHRoaXMucmVuZGVyZXIuc2hhZGVyTWFuYWdlci5zZXRTaGFkZXIoc2hhZGVyKTtcblxuICAgIC8vIFRPRE8gKGNlbmdsZXIpIC0gQ2FuIHRoaXMgYmUgY2FjaGVkIGFuZCBub3QgYHRvQXJyYXlgZWQgZWFjaCBmcmFtZT9cbiAgICBzaGFkZXIudW5pZm9ybXMucHJvamVjdGlvbk1hdHJpeC52YWx1ZSA9IHRoaXMucmVuZGVyZXIuY3VycmVudFJlbmRlclRhcmdldC5wcm9qZWN0aW9uTWF0cml4LnRvQXJyYXkodHJ1ZSk7XG5cbiAgICAvL1RPRE8gY2FuIHRoaXMgYmUgb3B0aW1pc2VkP1xuICAgIHNoYWRlci5zeW5jVW5pZm9ybXMoKTtcbi8qXG4gICAgZ2wudmVydGV4QXR0cmliUG9pbnRlcihzaGFkZXIuYXR0cmlidXRlcy5hVmVydGV4UG9zaXRpb24sIDIsIGdsLkZMT0FULCBmYWxzZSwgMCwgMCk7XG4gICAgZ2wudmVydGV4QXR0cmliUG9pbnRlcihzaGFkZXIuYXR0cmlidXRlcy5hVGV4dHVyZUNvb3JkLCAyLCBnbC5GTE9BVCwgZmFsc2UsIDAsIDIgKiA0ICogNCk7XG4gICAgZ2wudmVydGV4QXR0cmliUG9pbnRlcihzaGFkZXIuYXR0cmlidXRlcy5hQ29sb3IsIDQsIGdsLkZMT0FULCBmYWxzZSwgMCwgNCAqIDQgKiA0KTtcbiovXG5cbiAgICBnbC5hY3RpdmVUZXh0dXJlKGdsLlRFWFRVUkUwKTtcbiAgICBnbC5iaW5kVGV4dHVyZShnbC5URVhUVVJFXzJELCBpbnB1dFRhcmdldC50ZXh0dXJlKTtcblxuICAgIGdsLmRyYXdFbGVtZW50cyhnbC5UUklBTkdMRVMsIDYsIGdsLlVOU0lHTkVEX1NIT1JULCAwICk7XG4gICAgdGhpcy5yZW5kZXJlci5kcmF3Q291bnQrKztcbn07XG5cbi8qXG4gKiBDYWxjdWxhdGVzIHRoZSBtYXBwZWQgbWF0cml4XG4gKiBAcGFyYW0gZmlsdGVyQXJlYSB7UmVjdGFuZ2xlfSBUaGUgZmlsdGVyIGFyZWFcbiAqIEBwYXJhbSBzcHJpdGUge1Nwcml0ZX0gdGhlIHRhcmdldCBzcHJpdGVcbiAqIEBwYXJhbSBvdXRwdXRNYXRyaXgge01hdHJpeH0gQGFsdmluXG4gKi9cbi8vIFRPRE8gcGxheWluZyBhcm91bmQgaGVyZS4uIHRoaXMgaXMgdGVtcG9yYXJ5IC0gKHdpbGwgZW5kIHVwIGluIHRoZSBzaGFkZXIpXG5GaWx0ZXJNYW5hZ2VyLnByb3RvdHlwZS5jYWxjdWxhdGVNYXBwZWRNYXRyaXggPSBmdW5jdGlvbiAoZmlsdGVyQXJlYSwgc3ByaXRlLCBvdXRwdXRNYXRyaXgpXG57XG4gICAgdmFyIHdvcmxkVHJhbnNmb3JtID0gc3ByaXRlLndvcmxkVHJhbnNmb3JtLmNvcHkobWF0aC5NYXRyaXguVEVNUF9NQVRSSVgpLFxuICAgIHRleHR1cmUgPSBzcHJpdGUuX3RleHR1cmUuYmFzZVRleHR1cmU7XG5cbiAgICB2YXIgbWFwcGVkTWF0cml4ID0gb3V0cHV0TWF0cml4LmlkZW50aXR5KCk7XG5cbiAgICAvLyBzY2FsZS4uXG4gICAgdmFyIHJhdGlvID0gdGhpcy50ZXh0dXJlU2l6ZS5oZWlnaHQgLyB0aGlzLnRleHR1cmVTaXplLndpZHRoO1xuXG4gICAgbWFwcGVkTWF0cml4LnRyYW5zbGF0ZShmaWx0ZXJBcmVhLnggLyB0aGlzLnRleHR1cmVTaXplLndpZHRoLCBmaWx0ZXJBcmVhLnkgLyB0aGlzLnRleHR1cmVTaXplLmhlaWdodCApO1xuXG4gICAgbWFwcGVkTWF0cml4LnNjYWxlKDEgLCByYXRpbyk7XG5cbiAgICB2YXIgdHJhbnNsYXRlU2NhbGVYID0gKHRoaXMudGV4dHVyZVNpemUud2lkdGggLyB0ZXh0dXJlLndpZHRoKTtcbiAgICB2YXIgdHJhbnNsYXRlU2NhbGVZID0gKHRoaXMudGV4dHVyZVNpemUuaGVpZ2h0IC8gdGV4dHVyZS5oZWlnaHQpO1xuXG4gICAgd29ybGRUcmFuc2Zvcm0udHggLz0gdGV4dHVyZS53aWR0aCAqIHRyYW5zbGF0ZVNjYWxlWDtcbiAgICB3b3JsZFRyYW5zZm9ybS50eSAvPSB0ZXh0dXJlLndpZHRoICogdHJhbnNsYXRlU2NhbGVYO1xuXG4gICAgd29ybGRUcmFuc2Zvcm0uaW52ZXJ0KCk7XG5cbiAgICBtYXBwZWRNYXRyaXgucHJlcGVuZCh3b3JsZFRyYW5zZm9ybSk7XG5cbiAgICAvLyBhcHBseSBpbnZlcnNlIHNjYWxlLi5cbiAgICBtYXBwZWRNYXRyaXguc2NhbGUoMSAsIDEvcmF0aW8pO1xuXG4gICAgbWFwcGVkTWF0cml4LnNjYWxlKCB0cmFuc2xhdGVTY2FsZVggLCB0cmFuc2xhdGVTY2FsZVkgKTtcblxuICAgIG1hcHBlZE1hdHJpeC50cmFuc2xhdGUoc3ByaXRlLmFuY2hvci54LCBzcHJpdGUuYW5jaG9yLnkpO1xuXG4gICAgcmV0dXJuIG1hcHBlZE1hdHJpeDtcblxuICAgIC8vIEtlZXBpbmcgdGhlIG9yZ2luYWwgYXMgYSByZW1pbmRlciB0byBtZSBvbiBob3cgdGhpcyB3b3JrcyFcbiAgICAvL1xuICAgIC8vIHZhciBtID0gbmV3IG1hdGguTWF0cml4KCk7XG5cbiAgICAvLyAvLyBzY2FsZS4uXG4gICAgLy8gdmFyIHJhdGlvID0gdGhpcy50ZXh0dXJlU2l6ZS5oZWlnaHQgLyB0aGlzLnRleHR1cmVTaXplLndpZHRoO1xuXG4gICAgLy8gbS50cmFuc2xhdGUoZmlsdGVyQXJlYS54IC8gdGhpcy50ZXh0dXJlU2l6ZS53aWR0aCwgZmlsdGVyQXJlYS55IC8gdGhpcy50ZXh0dXJlU2l6ZS5oZWlnaHQpO1xuXG5cbiAgICAvLyBtLnNjYWxlKDEgLCByYXRpbyk7XG5cblxuICAgIC8vIHZhciB0cmFuc2Zvcm0gPSB3dC5jbG9uZSgpO1xuXG4gICAgLy8gdmFyIHRyYW5zbGF0ZVNjYWxlWCA9ICh0aGlzLnRleHR1cmVTaXplLndpZHRoIC8gNjIwKTtcbiAgICAvLyB2YXIgdHJhbnNsYXRlU2NhbGVZID0gKHRoaXMudGV4dHVyZVNpemUuaGVpZ2h0IC8gMzgwKTtcblxuICAgIC8vIHRyYW5zZm9ybS50eCAvPSA2MjAgKiB0cmFuc2xhdGVTY2FsZVg7XG4gICAgLy8gdHJhbnNmb3JtLnR5IC89IDYyMCAqIHRyYW5zbGF0ZVNjYWxlWDtcblxuICAgIC8vIHRyYW5zZm9ybS5pbnZlcnQoKTtcblxuICAgIC8vIHRyYW5zZm9ybS5hcHBlbmQobSk7XG5cbiAgICAvLyAvLyBhcHBseSBpbnZlcnNlIHNjYWxlLi5cbiAgICAvLyB0cmFuc2Zvcm0uc2NhbGUoMSAsIDEvcmF0aW8pO1xuXG4gICAgLy8gdHJhbnNmb3JtLnNjYWxlKCB0cmFuc2xhdGVTY2FsZVggLCB0cmFuc2xhdGVTY2FsZVkgKTtcblxuICAgIC8vIHJldHVybiB0cmFuc2Zvcm07XG59O1xuXG4vKlxuICogQ29uc3RyYWlucyB0aGUgZmlsdGVyIGFyZWEgdG8gdGhlIHRleHR1cmUgc2l6ZVxuICogQHBhcmFtIGZpbHRlckFyZWEge1JlY3RhbmdsZX0gVGhlIGZpbHRlciBhcmVhIHdlIHdhbnQgdG8gY2FwXG4gKi9cbkZpbHRlck1hbmFnZXIucHJvdG90eXBlLmNhcEZpbHRlckFyZWEgPSBmdW5jdGlvbiAoZmlsdGVyQXJlYSlcbntcbiAgICBpZiAoZmlsdGVyQXJlYS54IDwgMClcbiAgICB7XG4gICAgICAgIGZpbHRlckFyZWEud2lkdGggKz0gZmlsdGVyQXJlYS54O1xuICAgICAgICBmaWx0ZXJBcmVhLnggPSAwO1xuICAgIH1cblxuICAgIGlmIChmaWx0ZXJBcmVhLnkgPCAwKVxuICAgIHtcbiAgICAgICAgZmlsdGVyQXJlYS5oZWlnaHQgKz0gZmlsdGVyQXJlYS55O1xuICAgICAgICBmaWx0ZXJBcmVhLnkgPSAwO1xuICAgIH1cblxuICAgIGlmICggZmlsdGVyQXJlYS54ICsgZmlsdGVyQXJlYS53aWR0aCA+IHRoaXMudGV4dHVyZVNpemUud2lkdGggKVxuICAgIHtcbiAgICAgICAgZmlsdGVyQXJlYS53aWR0aCA9IHRoaXMudGV4dHVyZVNpemUud2lkdGggLSBmaWx0ZXJBcmVhLng7XG4gICAgfVxuXG4gICAgaWYgKCBmaWx0ZXJBcmVhLnkgKyBmaWx0ZXJBcmVhLmhlaWdodCA+IHRoaXMudGV4dHVyZVNpemUuaGVpZ2h0IClcbiAgICB7XG4gICAgICAgIGZpbHRlckFyZWEuaGVpZ2h0ID0gdGhpcy50ZXh0dXJlU2l6ZS5oZWlnaHQgLSBmaWx0ZXJBcmVhLnk7XG4gICAgfVxufTtcblxuLypcbiAqIFJlc2l6ZXMgYWxsIHRoZSByZW5kZXIgdGFyZ2V0cyBpbiB0aGUgcG9vbFxuICogQHBhcmFtIHdpZHRoIHtudW1iZXJ9IHRoZSBuZXcgd2lkdGhcbiAqIEBwYXJhbSBoZWlnaHQge251bWJlcn0gdGhlIG5ldyBoZWlnaHRcbiAqL1xuRmlsdGVyTWFuYWdlci5wcm90b3R5cGUucmVzaXplID0gZnVuY3Rpb24gKCB3aWR0aCwgaGVpZ2h0IClcbntcbiAgICB0aGlzLnRleHR1cmVTaXplLndpZHRoID0gd2lkdGg7XG4gICAgdGhpcy50ZXh0dXJlU2l6ZS5oZWlnaHQgPSBoZWlnaHQ7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMudGV4dHVyZVBvb2wubGVuZ3RoOyBpKyspXG4gICAge1xuICAgICAgICB0aGlzLnRleHR1cmVQb29sW2ldLnJlc2l6ZSggd2lkdGgsIGhlaWdodCApO1xuICAgIH1cbn07XG5cbi8qKlxuICogRGVzdHJveXMgdGhlIGZpbHRlciBhbmQgcmVtb3ZlcyBpdCBmcm9tIHRoZSBmaWx0ZXIgc3RhY2suXG4gKlxuICovXG5GaWx0ZXJNYW5hZ2VyLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLnF1YWQuZGVzdHJveSgpO1xuICAgIFxuICAgIFdlYkdMTWFuYWdlci5wcm90b3R5cGUuZGVzdHJveS5jYWxsKHRoaXMpO1xuICAgIFxuICAgIHRoaXMuZmlsdGVyU3RhY2sgPSBudWxsO1xuICAgIHRoaXMub2Zmc2V0WSA9IDA7XG5cbiAgICAvLyBkZXN0cm95IHRleHR1cmVzXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLnRleHR1cmVQb29sLmxlbmd0aDsgaSsrKVxuICAgIHtcbiAgICAgICAgdGhpcy50ZXh0dXJlUG9vbFtpXS5kZXN0cm95KCk7XG4gICAgfVxuXG4gICAgdGhpcy50ZXh0dXJlUG9vbCA9IG51bGw7XG59O1xuIiwidmFyIFdlYkdMTWFuYWdlciA9IHJlcXVpcmUoJy4vV2ViR0xNYW5hZ2VyJyksXG4gICAgQWxwaGFNYXNrRmlsdGVyID0gcmVxdWlyZSgnLi4vZmlsdGVycy9TcHJpdGVNYXNrRmlsdGVyJyk7XG5cbi8qKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLldlYkdMUmVuZGVyZXJ9IFRoZSByZW5kZXJlciB0aGlzIG1hbmFnZXIgd29ya3MgZm9yLlxuICovXG5mdW5jdGlvbiBNYXNrTWFuYWdlcihyZW5kZXJlcilcbntcbiAgICBXZWJHTE1hbmFnZXIuY2FsbCh0aGlzLCByZW5kZXJlcik7XG5cbiAgICB0aGlzLnN0ZW5jaWxTdGFjayA9IFtdO1xuICAgIHRoaXMucmV2ZXJzZSA9IHRydWU7XG4gICAgdGhpcy5jb3VudCA9IDA7XG5cbiAgICB0aGlzLmFscGhhTWFza1Bvb2wgPSBbXTtcbn1cblxuTWFza01hbmFnZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShXZWJHTE1hbmFnZXIucHJvdG90eXBlKTtcbk1hc2tNYW5hZ2VyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IE1hc2tNYW5hZ2VyO1xubW9kdWxlLmV4cG9ydHMgPSBNYXNrTWFuYWdlcjtcblxuLyoqXG4gKiBBcHBsaWVzIHRoZSBNYXNrIGFuZCBhZGRzIGl0IHRvIHRoZSBjdXJyZW50IGZpbHRlciBzdGFjay5cbiAqXG4gKiBAcGFyYW0gZ3JhcGhpY3Mge1BJWEkuR3JhcGhpY3N9XG4gKiBAcGFyYW0gd2ViR0xEYXRhIHthbnlbXX1cbiAqL1xuTWFza01hbmFnZXIucHJvdG90eXBlLnB1c2hNYXNrID0gZnVuY3Rpb24gKHRhcmdldCwgbWFza0RhdGEpXG57XG4gICAgaWYgKG1hc2tEYXRhLnRleHR1cmUpXG4gICAge1xuICAgICAgICB0aGlzLnB1c2hTcHJpdGVNYXNrKHRhcmdldCwgbWFza0RhdGEpO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICB0aGlzLnB1c2hTdGVuY2lsTWFzayh0YXJnZXQsIG1hc2tEYXRhKTtcbiAgICB9XG5cbn07XG5cbi8qKlxuICogUmVtb3ZlcyB0aGUgbGFzdCBtYXNrIGZyb20gdGhlIG1hc2sgc3RhY2sgYW5kIGRvZXNuJ3QgcmV0dXJuIGl0LlxuICpcbiAqIEBwYXJhbSB0YXJnZXQge1BJWEkuUmVuZGVyVGFyZ2V0fVxuICogQHBhcmFtIG1hc2tEYXRhIHthbnlbXX1cbiAqL1xuTWFza01hbmFnZXIucHJvdG90eXBlLnBvcE1hc2sgPSBmdW5jdGlvbiAodGFyZ2V0LCBtYXNrRGF0YSlcbntcbiAgICBpZiAobWFza0RhdGEudGV4dHVyZSlcbiAgICB7XG4gICAgICAgIHRoaXMucG9wU3ByaXRlTWFzayh0YXJnZXQsIG1hc2tEYXRhKTtcbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgdGhpcy5wb3BTdGVuY2lsTWFzayh0YXJnZXQsIG1hc2tEYXRhKTtcbiAgICB9XG59O1xuXG4vKipcbiAqIEFwcGxpZXMgdGhlIE1hc2sgYW5kIGFkZHMgaXQgdG8gdGhlIGN1cnJlbnQgZmlsdGVyIHN0YWNrLlxuICpcbiAqIEBwYXJhbSB0YXJnZXQge1BJWEkuUmVuZGVyVGFyZ2V0fVxuICogQHBhcmFtIG1hc2tEYXRhIHthbnlbXX1cbiAqL1xuTWFza01hbmFnZXIucHJvdG90eXBlLnB1c2hTcHJpdGVNYXNrID0gZnVuY3Rpb24gKHRhcmdldCwgbWFza0RhdGEpXG57XG4gICAgdmFyIGFscGhhTWFza0ZpbHRlciA9IHRoaXMuYWxwaGFNYXNrUG9vbC5wb3AoKTtcblxuICAgIGlmICghYWxwaGFNYXNrRmlsdGVyKVxuICAgIHtcbiAgICAgICAgYWxwaGFNYXNrRmlsdGVyID0gW25ldyBBbHBoYU1hc2tGaWx0ZXIobWFza0RhdGEpXTtcbiAgICB9XG5cbiAgICBhbHBoYU1hc2tGaWx0ZXJbMF0ubWFza1Nwcml0ZSA9IG1hc2tEYXRhO1xuICAgIHRoaXMucmVuZGVyZXIuZmlsdGVyTWFuYWdlci5wdXNoRmlsdGVyKHRhcmdldCwgYWxwaGFNYXNrRmlsdGVyKTtcbn07XG5cbi8qKlxuICogUmVtb3ZlcyB0aGUgbGFzdCBmaWx0ZXIgZnJvbSB0aGUgZmlsdGVyIHN0YWNrIGFuZCBkb2Vzbid0IHJldHVybiBpdC5cbiAqXG4gKi9cbk1hc2tNYW5hZ2VyLnByb3RvdHlwZS5wb3BTcHJpdGVNYXNrID0gZnVuY3Rpb24gKClcbntcbiAgICB2YXIgZmlsdGVycyA9IHRoaXMucmVuZGVyZXIuZmlsdGVyTWFuYWdlci5wb3BGaWx0ZXIoKTtcblxuICAgIHRoaXMuYWxwaGFNYXNrUG9vbC5wdXNoKGZpbHRlcnMpO1xufTtcblxuXG4vKipcbiAqIEFwcGxpZXMgdGhlIE1hc2sgYW5kIGFkZHMgaXQgdG8gdGhlIGN1cnJlbnQgZmlsdGVyIHN0YWNrLlxuICpcbiAqIEBwYXJhbSB0YXJnZXQge1BJWEkuUmVuZGVyVGFyZ2V0fVxuICogQHBhcmFtIG1hc2tEYXRhIHthbnlbXX1cbiAqL1xuTWFza01hbmFnZXIucHJvdG90eXBlLnB1c2hTdGVuY2lsTWFzayA9IGZ1bmN0aW9uICh0YXJnZXQsIG1hc2tEYXRhKVxue1xuICAgIHRoaXMucmVuZGVyZXIuc3RlbmNpbE1hbmFnZXIucHVzaE1hc2sobWFza0RhdGEpO1xufTtcblxuLyoqXG4gKiBSZW1vdmVzIHRoZSBsYXN0IGZpbHRlciBmcm9tIHRoZSBmaWx0ZXIgc3RhY2sgYW5kIGRvZXNuJ3QgcmV0dXJuIGl0LlxuICpcbiAqIEBwYXJhbSB0YXJnZXQge1BJWEkuUmVuZGVyVGFyZ2V0fVxuICogQHBhcmFtIG1hc2tEYXRhIHthbnlbXX1cbiAqL1xuTWFza01hbmFnZXIucHJvdG90eXBlLnBvcFN0ZW5jaWxNYXNrID0gZnVuY3Rpb24gKHRhcmdldCwgbWFza0RhdGEpXG57XG4gICAgdGhpcy5yZW5kZXJlci5zdGVuY2lsTWFuYWdlci5wb3BNYXNrKG1hc2tEYXRhKTtcbn07XG5cbiIsInZhciBXZWJHTE1hbmFnZXIgPSByZXF1aXJlKCcuL1dlYkdMTWFuYWdlcicpLFxuICAgIFRleHR1cmVTaGFkZXIgPSByZXF1aXJlKCcuLi9zaGFkZXJzL1RleHR1cmVTaGFkZXInKSxcbiAgICBDb21wbGV4UHJpbWl0aXZlU2hhZGVyID0gcmVxdWlyZSgnLi4vc2hhZGVycy9Db21wbGV4UHJpbWl0aXZlU2hhZGVyJyksXG4gICAgUHJpbWl0aXZlU2hhZGVyID0gcmVxdWlyZSgnLi4vc2hhZGVycy9QcmltaXRpdmVTaGFkZXInKSxcbiAgICB1dGlscyA9IHJlcXVpcmUoJy4uLy4uLy4uL3V0aWxzJyk7XG5cbi8qKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQGV4dGVuZHMgUElYSS5XZWJHTE1hbmFnZXJcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5XZWJHTFJlbmRlcmVyfSBUaGUgcmVuZGVyZXIgdGhpcyBtYW5hZ2VyIHdvcmtzIGZvci5cbiAqL1xuZnVuY3Rpb24gU2hhZGVyTWFuYWdlcihyZW5kZXJlcilcbntcbiAgICBXZWJHTE1hbmFnZXIuY2FsbCh0aGlzLCByZW5kZXJlcik7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy5tYXhBdHRpYnMgPSAxMDtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge2FueVtdfVxuICAgICAqL1xuICAgIHRoaXMuYXR0cmliU3RhdGUgPSBbXTtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge2FueVtdfVxuICAgICAqL1xuICAgIHRoaXMudGVtcEF0dHJpYlN0YXRlID0gW107XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMubWF4QXR0aWJzOyBpKyspXG4gICAge1xuICAgICAgICB0aGlzLmF0dHJpYlN0YXRlW2ldID0gZmFsc2U7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7YW55W119XG4gICAgICovXG4gICAgdGhpcy5zdGFjayA9IFtdO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fY3VycmVudElkID0gLTE7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlNoYWRlcn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuY3VycmVudFNoYWRlciA9IG51bGw7XG5cbi8vICAgIHRoaXMuaW5pdFBsdWdpbnMoKTtcbn1cblxuU2hhZGVyTWFuYWdlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFdlYkdMTWFuYWdlci5wcm90b3R5cGUpO1xuU2hhZGVyTWFuYWdlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBTaGFkZXJNYW5hZ2VyO1xudXRpbHMucGx1Z2luVGFyZ2V0Lm1peGluKFNoYWRlck1hbmFnZXIpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IFNoYWRlck1hbmFnZXI7XG5cbi8qKlxuICogQ2FsbGVkIHdoZW4gdGhlcmUgaXMgYSBXZWJHTCBjb250ZXh0IGNoYW5nZS5cbiAqXG4gKi9cblNoYWRlck1hbmFnZXIucHJvdG90eXBlLm9uQ29udGV4dENoYW5nZSA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy5pbml0UGx1Z2lucygpO1xuXG4gICAgdmFyIGdsID0gdGhpcy5yZW5kZXJlci5nbDtcblxuICAgIC8vIGdldCB0aGUgbWF4aW11bSBudW1iZXIgb2YgYXR0cmlidXRlIGNvcnJlY3RseSBhcyB0aGlzIHRlbmRzIHRvIHZhcnlcbiAgICB0aGlzLm1heEF0dGlicyA9IGdsLmdldFBhcmFtZXRlcihnbC5NQVhfVkVSVEVYX0FUVFJJQlMpO1xuXG4gICAgdGhpcy5hdHRyaWJTdGF0ZSA9IFtdO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLm1heEF0dGliczsgaSsrKVxuICAgIHtcbiAgICAgICAgdGhpcy5hdHRyaWJTdGF0ZVtpXSA9IGZhbHNlO1xuICAgIH1cblxuICAgIC8vIFRPRE8gLSBXaHkgYXJlIHRoZXNlIG5vdCBwbHVnaW5zPyBXZSBjYW4ndCBkZWNvdXBsZSBwcmltaXRpdmVzIHVubGVzcyB0aGV5IGFyZS4uLi5cbiAgICB0aGlzLmRlZmF1bHRTaGFkZXIgPSBuZXcgVGV4dHVyZVNoYWRlcih0aGlzKTtcbiAgICB0aGlzLnByaW1pdGl2ZVNoYWRlciA9IG5ldyBQcmltaXRpdmVTaGFkZXIodGhpcyk7XG4gICAgdGhpcy5jb21wbGV4UHJpbWl0aXZlU2hhZGVyID0gbmV3IENvbXBsZXhQcmltaXRpdmVTaGFkZXIodGhpcyk7XG59O1xuXG4vKipcbiAqIFRha2VzIHRoZSBhdHRyaWJ1dGVzIGdpdmVuIGluIHBhcmFtZXRlcnMgYW5kIHVwbG9hZHMgdGhlbS5cbiAqXG4gKiBAcGFyYW0gYXR0cmlicyB7YW55W119IGF0dHJpYnNcbiAqL1xuU2hhZGVyTWFuYWdlci5wcm90b3R5cGUuc2V0QXR0cmlicyA9IGZ1bmN0aW9uIChhdHRyaWJzKVxue1xuICAgIC8vIHJlc2V0IHRlbXAgc3RhdGVcbiAgICB2YXIgaTtcblxuICAgIGZvciAoaSA9IDA7IGkgPCB0aGlzLnRlbXBBdHRyaWJTdGF0ZS5sZW5ndGg7IGkrKylcbiAgICB7XG4gICAgICAgIHRoaXMudGVtcEF0dHJpYlN0YXRlW2ldID0gZmFsc2U7XG4gICAgfVxuXG4gICAgLy8gc2V0IHRoZSBuZXcgYXR0cmlic1xuICAgIGZvciAodmFyIGEgaW4gYXR0cmlicylcbiAgICB7XG4gICAgICAgIHRoaXMudGVtcEF0dHJpYlN0YXRlW2F0dHJpYnNbYV1dID0gdHJ1ZTtcbiAgICB9XG5cbiAgICB2YXIgZ2wgPSB0aGlzLnJlbmRlcmVyLmdsO1xuXG4gICAgZm9yIChpID0gMDsgaSA8IHRoaXMuYXR0cmliU3RhdGUubGVuZ3RoOyBpKyspXG4gICAge1xuICAgICAgICBpZiAodGhpcy5hdHRyaWJTdGF0ZVtpXSAhPT0gdGhpcy50ZW1wQXR0cmliU3RhdGVbaV0pXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuYXR0cmliU3RhdGVbaV0gPSB0aGlzLnRlbXBBdHRyaWJTdGF0ZVtpXTtcblxuICAgICAgICAgICAgaWYgKHRoaXMuYXR0cmliU3RhdGVbaV0pXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgZ2wuZW5hYmxlVmVydGV4QXR0cmliQXJyYXkoaSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgZ2wuZGlzYWJsZVZlcnRleEF0dHJpYkFycmF5KGkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxufTtcblxuLyoqXG4gKiBTZXRzIHRoZSBjdXJyZW50IHNoYWRlci5cbiAqXG4gKiBAcGFyYW0gc2hhZGVyIHtQSVhJLlNoYWRlcn0gdGhlIHNoYWRlciB0byB1cGxvYWRcbiAqL1xuU2hhZGVyTWFuYWdlci5wcm90b3R5cGUuc2V0U2hhZGVyID0gZnVuY3Rpb24gKHNoYWRlcilcbntcbiAgICByZXR1cm47XG4gICAgaWYgKHRoaXMuX2N1cnJlbnRJZCA9PT0gc2hhZGVyLnVpZClcbiAgICB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICB0aGlzLl9jdXJyZW50SWQgPSBzaGFkZXIudWlkO1xuXG4gICAgdGhpcy5jdXJyZW50U2hhZGVyID0gc2hhZGVyO1xuXG4gICAgdGhpcy5yZW5kZXJlci5nbC51c2VQcm9ncmFtKHNoYWRlci5wcm9ncmFtKTtcbiAgICB0aGlzLnNldEF0dHJpYnMoc2hhZGVyLmF0dHJpYnV0ZXMpO1xuXG4gICAgcmV0dXJuIHRydWU7XG59O1xuXG4vKipcbiAqIERlc3Ryb3lzIHRoaXMgb2JqZWN0LlxuICpcbiAqL1xuU2hhZGVyTWFuYWdlci5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy5wcmltaXRpdmVTaGFkZXIuZGVzdHJveSgpO1xuICAgIHRoaXMuY29tcGxleFByaW1pdGl2ZVNoYWRlci5kZXN0cm95KCk7XG4gICAgV2ViR0xNYW5hZ2VyLnByb3RvdHlwZS5kZXN0cm95LmNhbGwodGhpcyk7XG5cbiAgICB0aGlzLmRlc3Ryb3lQbHVnaW5zKCk7XG5cbiAgICB0aGlzLmF0dHJpYlN0YXRlID0gbnVsbDtcblxuICAgIHRoaXMudGVtcEF0dHJpYlN0YXRlID0gbnVsbDtcbn07XG4iLCJ2YXIgV2ViR0xNYW5hZ2VyID0gcmVxdWlyZSgnLi9XZWJHTE1hbmFnZXInKSxcbiAgICB1dGlscyA9IHJlcXVpcmUoJy4uLy4uLy4uL3V0aWxzJyk7XG5cbi8qKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLldlYkdMUmVuZGVyZXJ9IFRoZSByZW5kZXJlciB0aGlzIG1hbmFnZXIgd29ya3MgZm9yLlxuICovXG5mdW5jdGlvbiBXZWJHTE1hc2tNYW5hZ2VyKHJlbmRlcmVyKVxue1xuICAgIFdlYkdMTWFuYWdlci5jYWxsKHRoaXMsIHJlbmRlcmVyKTtcbiAgICB0aGlzLnN0ZW5jaWxNYXNrU3RhY2sgPSBudWxsO1xufVxuXG5XZWJHTE1hc2tNYW5hZ2VyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoV2ViR0xNYW5hZ2VyLnByb3RvdHlwZSk7XG5XZWJHTE1hc2tNYW5hZ2VyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFdlYkdMTWFza01hbmFnZXI7XG5tb2R1bGUuZXhwb3J0cyA9IFdlYkdMTWFza01hbmFnZXI7XG5cbi8qKlxuICogQ2hhbmdlcyB0aGUgbWFzayBzdGFjayB0aGF0IGlzIHVzZWQgYnkgdGhpcyBtYW5hZ2VyLlxuICpcbiAqIEBwYXJhbSBzdGVuY2lsTWFza1N0YWNrIHtQSVhJLlN0ZW5jaWxNYXNrU3RhY2t9IFRoZSBtYXNrIHN0YWNrXG4gKi9cbldlYkdMTWFza01hbmFnZXIucHJvdG90eXBlLnNldE1hc2tTdGFjayA9IGZ1bmN0aW9uICggc3RlbmNpbE1hc2tTdGFjayApXG57XG4gICAgdGhpcy5zdGVuY2lsTWFza1N0YWNrID0gc3RlbmNpbE1hc2tTdGFjaztcblxuICAgIHZhciBnbCA9IHRoaXMucmVuZGVyZXIuZ2w7XG5cbiAgICBpZiAoc3RlbmNpbE1hc2tTdGFjay5zdGVuY2lsU3RhY2subGVuZ3RoID09PSAwKVxuICAgIHtcbiAgICAgICAgZ2wuZGlzYWJsZShnbC5TVEVOQ0lMX1RFU1QpO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICBnbC5lbmFibGUoZ2wuU1RFTkNJTF9URVNUKTtcbiAgICB9XG59O1xuXG4vKipcbiAqIEFwcGxpZXMgdGhlIE1hc2sgYW5kIGFkZHMgaXQgdG8gdGhlIGN1cnJlbnQgZmlsdGVyIHN0YWNrLiBAYWx2aW5cbiAqXG4gKiBAcGFyYW0gZ3JhcGhpY3Mge1BJWEkuR3JhcGhpY3N9XG4gKiBAcGFyYW0gd2ViR0xEYXRhIHthbnlbXX1cbiAqL1xuV2ViR0xNYXNrTWFuYWdlci5wcm90b3R5cGUucHVzaFN0ZW5jaWwgPSBmdW5jdGlvbiAoZ3JhcGhpY3MsIHdlYkdMRGF0YSlcbntcbiAgICB0aGlzLnJlbmRlcmVyLl9hY3RpdmVSZW5kZXJUYXJnZXQuYXR0YWNoU3RlbmNpbEJ1ZmZlcigpO1xuXG4gICAgdmFyIGdsID0gdGhpcy5yZW5kZXJlci5nbCxcbiAgICAgICAgc21zID0gdGhpcy5zdGVuY2lsTWFza1N0YWNrO1xuXG4gICAgdGhpcy5iaW5kR3JhcGhpY3MoZ3JhcGhpY3MsIHdlYkdMRGF0YSk7XG5cbiAgICBpZiAoc21zLnN0ZW5jaWxTdGFjay5sZW5ndGggPT09IDApXG4gICAge1xuICAgICAgICBnbC5lbmFibGUoZ2wuU1RFTkNJTF9URVNUKTtcbiAgICAgICAgZ2wuY2xlYXIoZ2wuU1RFTkNJTF9CVUZGRVJfQklUKTtcbiAgICAgICAgc21zLnJldmVyc2UgPSB0cnVlO1xuICAgICAgICBzbXMuY291bnQgPSAwO1xuICAgIH1cblxuICAgIHNtcy5zdGVuY2lsU3RhY2sucHVzaCh3ZWJHTERhdGEpO1xuXG4gICAgdmFyIGxldmVsID0gc21zLmNvdW50O1xuXG4gICAgZ2wuY29sb3JNYXNrKGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlKTtcblxuICAgIGdsLnN0ZW5jaWxGdW5jKGdsLkFMV0FZUywwLDB4RkYpO1xuICAgIGdsLnN0ZW5jaWxPcChnbC5LRUVQLGdsLktFRVAsZ2wuSU5WRVJUKTtcblxuICAgIC8vIGRyYXcgdGhlIHRyaWFuZ2xlIHN0cmlwIVxuXG4gICAgaWYgKHdlYkdMRGF0YS5tb2RlID09PSAxKVxuICAgIHtcbiAgICAgICAgZ2wuZHJhd0VsZW1lbnRzKGdsLlRSSUFOR0xFX0ZBTiwgIHdlYkdMRGF0YS5pbmRpY2VzLmxlbmd0aCAtIDQsIGdsLlVOU0lHTkVEX1NIT1JULCAwICk7XG5cbiAgICAgICAgaWYgKHNtcy5yZXZlcnNlKVxuICAgICAgICB7XG4gICAgICAgICAgICBnbC5zdGVuY2lsRnVuYyhnbC5FUVVBTCwgMHhGRiAtIGxldmVsLCAweEZGKTtcbiAgICAgICAgICAgIGdsLnN0ZW5jaWxPcChnbC5LRUVQLGdsLktFRVAsZ2wuREVDUik7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgICBnbC5zdGVuY2lsRnVuYyhnbC5FUVVBTCxsZXZlbCwgMHhGRik7XG4gICAgICAgICAgICBnbC5zdGVuY2lsT3AoZ2wuS0VFUCxnbC5LRUVQLGdsLklOQ1IpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gZHJhdyBhIHF1YWQgdG8gaW5jcmVtZW50Li5cbiAgICAgICAgZ2wuZHJhd0VsZW1lbnRzKGdsLlRSSUFOR0xFX0ZBTiwgNCwgZ2wuVU5TSUdORURfU0hPUlQsICggd2ViR0xEYXRhLmluZGljZXMubGVuZ3RoIC0gNCApICogMiApO1xuXG4gICAgICAgIGlmIChzbXMucmV2ZXJzZSlcbiAgICAgICAge1xuICAgICAgICAgICAgZ2wuc3RlbmNpbEZ1bmMoZ2wuRVFVQUwsMHhGRi0obGV2ZWwrMSksIDB4RkYpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2VcbiAgICAgICAge1xuICAgICAgICAgICAgZ2wuc3RlbmNpbEZ1bmMoZ2wuRVFVQUwsbGV2ZWwrMSwgMHhGRik7XG4gICAgICAgIH1cblxuICAgICAgICBzbXMucmV2ZXJzZSA9ICFzbXMucmV2ZXJzZTtcbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgaWYgKCFzbXMucmV2ZXJzZSlcbiAgICAgICAge1xuICAgICAgICAgICAgZ2wuc3RlbmNpbEZ1bmMoZ2wuRVFVQUwsIDB4RkYgLSBsZXZlbCwgMHhGRik7XG4gICAgICAgICAgICBnbC5zdGVuY2lsT3AoZ2wuS0VFUCxnbC5LRUVQLGdsLkRFQ1IpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2VcbiAgICAgICAge1xuICAgICAgICAgICAgZ2wuc3RlbmNpbEZ1bmMoZ2wuRVFVQUwsbGV2ZWwsIDB4RkYpO1xuICAgICAgICAgICAgZ2wuc3RlbmNpbE9wKGdsLktFRVAsZ2wuS0VFUCxnbC5JTkNSKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGdsLmRyYXdFbGVtZW50cyhnbC5UUklBTkdMRV9TVFJJUCwgIHdlYkdMRGF0YS5pbmRpY2VzLmxlbmd0aCwgZ2wuVU5TSUdORURfU0hPUlQsIDAgKTtcblxuICAgICAgICBpZiAoIXNtcy5yZXZlcnNlKVxuICAgICAgICB7XG4gICAgICAgICAgICBnbC5zdGVuY2lsRnVuYyhnbC5FUVVBTCwweEZGLShsZXZlbCsxKSwgMHhGRik7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgICBnbC5zdGVuY2lsRnVuYyhnbC5FUVVBTCxsZXZlbCsxLCAweEZGKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGdsLmNvbG9yTWFzayh0cnVlLCB0cnVlLCB0cnVlLCB0cnVlKTtcbiAgICBnbC5zdGVuY2lsT3AoZ2wuS0VFUCxnbC5LRUVQLGdsLktFRVApO1xuXG4gICAgc21zLmNvdW50Kys7XG59O1xuXG4vKipcbiAqIFRPRE8gdGhpcyBkb2VzIG5vdCBiZWxvbmcgaGVyZSFcbiAqXG4gKiBAcGFyYW0gZ3JhcGhpY3Mge1BJWEkuR3JhcGhpY3N9XG4gKiBAcGFyYW0gd2ViR0xEYXRhIHthbnlbXX1cbiAqL1xuV2ViR0xNYXNrTWFuYWdlci5wcm90b3R5cGUuYmluZEdyYXBoaWNzID0gZnVuY3Rpb24gKGdyYXBoaWNzLCB3ZWJHTERhdGEpXG57XG4gICAgLy9pZiAodGhpcy5fY3VycmVudEdyYXBoaWNzID09PSBncmFwaGljcylyZXR1cm47XG4gICAgdmFyIGdsID0gdGhpcy5yZW5kZXJlci5nbDtcblxuICAgICAvLyBiaW5kIHRoZSBncmFwaGljcyBvYmplY3QuLlxuICAgIHZhciBzaGFkZXIgPSB0aGlzLnJlbmRlcmVyLnBsdWdpbnMuZ3JhcGhpY3MucHJpbWl0aXZlU2hhZGVyO1xuXG4gICAgaWYgKHdlYkdMRGF0YS5tb2RlID09PSAxKVxuICAgIHtcbiAgICAgICAgLypcbiAgICAgICAgc2hhZGVyID0gdGhpcy5yZW5kZXJlci5zaGFkZXJNYW5hZ2VyLmNvbXBsZXhQcmltaXRpdmVTaGFkZXI7XG5cbiAgICAgICAgdGhpcy5yZW5kZXJlci5zaGFkZXJNYW5hZ2VyLnNldFNoYWRlcihzaGFkZXIpO1xuXG4gICAgICAgIGdsLnVuaWZvcm1NYXRyaXgzZnYoc2hhZGVyLnVuaWZvcm1zLnRyYW5zbGF0aW9uTWF0cml4Ll9sb2NhdGlvbiwgZmFsc2UsIGdyYXBoaWNzLndvcmxkVHJhbnNmb3JtLnRvQXJyYXkodHJ1ZSkpO1xuXG4gICAgICAgIGdsLnVuaWZvcm1NYXRyaXgzZnYoc2hhZGVyLnVuaWZvcm1zLnByb2plY3Rpb25NYXRyaXguX2xvY2F0aW9uLCBmYWxzZSwgdGhpcy5yZW5kZXJlci5jdXJyZW50UmVuZGVyVGFyZ2V0LnByb2plY3Rpb25NYXRyaXgudG9BcnJheSh0cnVlKSk7XG5cbiAgICAgICAgZ2wudW5pZm9ybTNmdihzaGFkZXIudW5pZm9ybXMudGludC5fbG9jYXRpb24sIHV0aWxzLmhleDJyZ2IoZ3JhcGhpY3MudGludCkpO1xuXG4gICAgICAgIGdsLnVuaWZvcm0zZnYoc2hhZGVyLnVuaWZvcm1zLmNvbG9yLl9sb2NhdGlvbiwgd2ViR0xEYXRhLmNvbG9yKTtcblxuICAgICAgICBnbC51bmlmb3JtMWYoc2hhZGVyLnVuaWZvcm1zLmFscGhhLl9sb2NhdGlvbiwgZ3JhcGhpY3Mud29ybGRBbHBoYSk7XG5cbiAgICAgICAgZ2wuYmluZEJ1ZmZlcihnbC5BUlJBWV9CVUZGRVIsIHdlYkdMRGF0YS5idWZmZXIpO1xuXG4gICAgICAgIGdsLnZlcnRleEF0dHJpYlBvaW50ZXIoc2hhZGVyLmF0dHJpYnV0ZXMuYVZlcnRleFBvc2l0aW9uLCAyLCBnbC5GTE9BVCwgZmFsc2UsIDQgKiAyLCAwKTtcblxuICAgICAgICAvLyBub3cgZG8gdGhlIHJlc3QuLlxuICAgICAgICAvLyBzZXQgdGhlIGluZGV4IGJ1ZmZlciFcbiAgICAgICAgZ2wuYmluZEJ1ZmZlcihnbC5FTEVNRU5UX0FSUkFZX0JVRkZFUiwgd2ViR0xEYXRhLmluZGV4QnVmZmVyKTtcbiAgICAqL1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICAvL3RoaXMucmVuZGVyZXIuc2hhZGVyTWFuYWdlci5hY3RpdmF0ZVByaW1pdGl2ZVNoYWRlcigpO1xuLy8gICAgICAgIHNoYWRlciA9IHRoaXMucmVuZGVyZXIuc2hhZGVyTWFuYWdlci5wcmltaXRpdmVTaGFkZXI7XG4gICAgICAgXG4gICAgICAgIHRoaXMucmVuZGVyZXIuYmluZFNoYWRlcihzaGFkZXIpXG5cbiAgICAgICAgc2hhZGVyLnVuaWZvcm1zLnRyYW5zbGF0aW9uTWF0cml4ID0gZ3JhcGhpY3Mud29ybGRUcmFuc2Zvcm0udG9BcnJheSh0cnVlKTtcbiAgICAgICAgc2hhZGVyLnVuaWZvcm1zLnRpbnQgPSB1dGlscy5oZXgycmdiKGdyYXBoaWNzLnRpbnQpO1xuICAgICAgICBzaGFkZXIudW5pZm9ybXMuYWxwaGEgPSBncmFwaGljcy53b3JsZEFscGhhO1xuXG5cbiAgICAgICAgZ2wuYmluZEJ1ZmZlcihnbC5BUlJBWV9CVUZGRVIsIHdlYkdMRGF0YS5idWZmZXIpO1xuXG5cbiAgICAgICAgc2hhZGVyLmF0dHJpYnV0ZXMuYVZlcnRleFBvc2l0aW9uLnBvaW50ZXIoZ2wuRkxPQVQsIGZhbHNlLCA0ICogNiwgMCk7XG4gICAgICAgIHNoYWRlci5hdHRyaWJ1dGVzLmFDb2xvci5wb2ludGVyKGdsLkZMT0FULCBmYWxzZSwgNCAqIDYsIDIgKiA0KTtcblxuICAgICAgICBnbC5lbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShzaGFkZXIuYXR0cmlidXRlcy5hVmVydGV4UG9zaXRpb24ubG9jYXRpb24pO1xuICAgICAgICBnbC5lbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShzaGFkZXIuYXR0cmlidXRlcy5hQ29sb3IubG9jYXRpb24pO1xuXG4gICAgICAgIC8vIHNldCB0aGUgaW5kZXggYnVmZmVyIVxuICAgICAgICBnbC5iaW5kQnVmZmVyKGdsLkVMRU1FTlRfQVJSQVlfQlVGRkVSLCB3ZWJHTERhdGEuaW5kZXhCdWZmZXIpO1xuLy8gICAgICAgIGdsLmRyYXdFbGVtZW50cyhnbC5UUklBTkdMRV9TVFJJUCwgIHdlYkdMRGF0YS5pbmRpY2VzLmxlbmd0aCwgZ2wuVU5TSUdORURfU0hPUlQsIDAgKTtcblxuXG4gICAgICAvKiAgdGhpcy5yZW5kZXJlci5zaGFkZXJNYW5hZ2VyLnNldFNoYWRlcihzaGFkZXIpO1xuXG4gICAgICAgIGdsLnVuaWZvcm1NYXRyaXgzZnYoc2hhZGVyLnVuaWZvcm1zLnRyYW5zbGF0aW9uTWF0cml4Ll9sb2NhdGlvbiwgZmFsc2UsIGdyYXBoaWNzLndvcmxkVHJhbnNmb3JtLnRvQXJyYXkodHJ1ZSkpO1xuXG4gICAgICAgIGdsLnVuaWZvcm1NYXRyaXgzZnYoc2hhZGVyLnVuaWZvcm1zLnByb2plY3Rpb25NYXRyaXguX2xvY2F0aW9uLCBmYWxzZSwgdGhpcy5yZW5kZXJlci5jdXJyZW50UmVuZGVyVGFyZ2V0LnByb2plY3Rpb25NYXRyaXgudG9BcnJheSh0cnVlKSk7XG5cbiAgICAgICAgZ2wudW5pZm9ybTNmdihzaGFkZXIudW5pZm9ybXMudGludC5fbG9jYXRpb24sIHV0aWxzLmhleDJyZ2IoZ3JhcGhpY3MudGludCkpO1xuXG4gICAgICAgIGdsLnVuaWZvcm0xZihzaGFkZXIudW5pZm9ybXMuYWxwaGEuX2xvY2F0aW9uLCBncmFwaGljcy53b3JsZEFscGhhKTtcblxuICAgICAgICBnbC5iaW5kQnVmZmVyKGdsLkFSUkFZX0JVRkZFUiwgd2ViR0xEYXRhLmJ1ZmZlcik7XG5cbiAgICAgICAgZ2wudmVydGV4QXR0cmliUG9pbnRlcihzaGFkZXIuYXR0cmlidXRlcy5hVmVydGV4UG9zaXRpb24sIDIsIGdsLkZMT0FULCBmYWxzZSwgNCAqIDYsIDApO1xuICAgICAgICBnbC52ZXJ0ZXhBdHRyaWJQb2ludGVyKHNoYWRlci5hdHRyaWJ1dGVzLmFDb2xvciwgNCwgZ2wuRkxPQVQsIGZhbHNlLDQgKiA2LCAyICogNCk7XG5cbiAgICAgICAgLy8gc2V0IHRoZSBpbmRleCBidWZmZXIhXG4gICAgICAgIGdsLmJpbmRCdWZmZXIoZ2wuRUxFTUVOVF9BUlJBWV9CVUZGRVIsIHdlYkdMRGF0YS5pbmRleEJ1ZmZlcik7Ki9cbiAgICB9XG59O1xuXG4vKipcbiAqIFRPRE8gQGFsdmluXG4gKiBAcGFyYW0gZ3JhcGhpY3Mge1BJWEkuR3JhcGhpY3N9XG4gKiBAcGFyYW0gd2ViR0xEYXRhIHthbnlbXX1cbiAqL1xuV2ViR0xNYXNrTWFuYWdlci5wcm90b3R5cGUucG9wU3RlbmNpbCA9IGZ1bmN0aW9uIChncmFwaGljcywgd2ViR0xEYXRhKVxue1xuICAgIHZhciBnbCA9IHRoaXMucmVuZGVyZXIuZ2wsXG4gICAgICAgIHNtcyA9IHRoaXMuc3RlbmNpbE1hc2tTdGFjaztcblxuICAgIHNtcy5zdGVuY2lsU3RhY2sucG9wKCk7XG5cbiAgICBzbXMuY291bnQtLTtcblxuICAgIGlmIChzbXMuc3RlbmNpbFN0YWNrLmxlbmd0aCA9PT0gMClcbiAgICB7XG4gICAgICAgIC8vIHRoZSBzdGFjayBpcyBlbXB0eSFcbiAgICAgICAgZ2wuZGlzYWJsZShnbC5TVEVOQ0lMX1RFU1QpO1xuXG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG5cbiAgICAgICAgdmFyIGxldmVsID0gc21zLmNvdW50O1xuXG4gICAgICAgIHRoaXMuYmluZEdyYXBoaWNzKGdyYXBoaWNzLCB3ZWJHTERhdGEpO1xuXG4gICAgICAgIGdsLmNvbG9yTWFzayhmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSk7XG5cbiAgICAgICAgaWYgKHdlYkdMRGF0YS5tb2RlID09PSAxKVxuICAgICAgICB7XG4gICAgICAgICAgICBzbXMucmV2ZXJzZSA9ICFzbXMucmV2ZXJzZTtcblxuICAgICAgICAgICAgaWYgKHNtcy5yZXZlcnNlKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGdsLnN0ZW5jaWxGdW5jKGdsLkVRVUFMLCAweEZGIC0gKGxldmVsKzEpLCAweEZGKTtcbiAgICAgICAgICAgICAgICBnbC5zdGVuY2lsT3AoZ2wuS0VFUCxnbC5LRUVQLGdsLklOQ1IpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGdsLnN0ZW5jaWxGdW5jKGdsLkVRVUFMLGxldmVsKzEsIDB4RkYpO1xuICAgICAgICAgICAgICAgIGdsLnN0ZW5jaWxPcChnbC5LRUVQLGdsLktFRVAsZ2wuREVDUik7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIGRyYXcgYSBxdWFkIHRvIGluY3JlbWVudC4uXG4gICAgICAgICAgICBnbC5kcmF3RWxlbWVudHMoZ2wuVFJJQU5HTEVfRkFOLCA0LCBnbC5VTlNJR05FRF9TSE9SVCwgKCB3ZWJHTERhdGEuaW5kaWNlcy5sZW5ndGggLSA0ICkgKiAyICk7XG5cbiAgICAgICAgICAgIGdsLnN0ZW5jaWxGdW5jKGdsLkFMV0FZUywwLDB4RkYpO1xuICAgICAgICAgICAgZ2wuc3RlbmNpbE9wKGdsLktFRVAsZ2wuS0VFUCxnbC5JTlZFUlQpO1xuXG4gICAgICAgICAgICAvLyBkcmF3IHRoZSB0cmlhbmdsZSBzdHJpcCFcbiAgICAgICAgICAgIGdsLmRyYXdFbGVtZW50cyhnbC5UUklBTkdMRV9GQU4sICB3ZWJHTERhdGEuaW5kaWNlcy5sZW5ndGggLSA0LCBnbC5VTlNJR05FRF9TSE9SVCwgMCApO1xuXG4gICAgICAgICAgICB0aGlzLnJlbmRlcmVyLmRyYXdDb3VudCArPSAyO1xuXG4gICAgICAgICAgICBpZiAoIXNtcy5yZXZlcnNlKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGdsLnN0ZW5jaWxGdW5jKGdsLkVRVUFMLDB4RkYtKGxldmVsKSwgMHhGRik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgZ2wuc3RlbmNpbEZ1bmMoZ2wuRVFVQUwsbGV2ZWwsIDB4RkYpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgLy8gIGNvbnNvbGUubG9nKFwiPDw+PlwiKVxuICAgICAgICAgICAgaWYgKCFzbXMucmV2ZXJzZSlcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBnbC5zdGVuY2lsRnVuYyhnbC5FUVVBTCwgMHhGRiAtIChsZXZlbCsxKSwgMHhGRik7XG4gICAgICAgICAgICAgICAgZ2wuc3RlbmNpbE9wKGdsLktFRVAsZ2wuS0VFUCxnbC5JTkNSKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBnbC5zdGVuY2lsRnVuYyhnbC5FUVVBTCxsZXZlbCsxLCAweEZGKTtcbiAgICAgICAgICAgICAgICBnbC5zdGVuY2lsT3AoZ2wuS0VFUCxnbC5LRUVQLGdsLkRFQ1IpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBnbC5kcmF3RWxlbWVudHMoZ2wuVFJJQU5HTEVfU1RSSVAsICB3ZWJHTERhdGEuaW5kaWNlcy5sZW5ndGgsIGdsLlVOU0lHTkVEX1NIT1JULCAwICk7XG5cbiAgICAgICAgICAgIHRoaXMucmVuZGVyZXIuZHJhd0NvdW50Kys7XG5cbiAgICAgICAgICAgIGlmICghc21zLnJldmVyc2UpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgZ2wuc3RlbmNpbEZ1bmMoZ2wuRVFVQUwsMHhGRi0obGV2ZWwpLCAweEZGKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBnbC5zdGVuY2lsRnVuYyhnbC5FUVVBTCxsZXZlbCwgMHhGRik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBnbC5jb2xvck1hc2sodHJ1ZSwgdHJ1ZSwgdHJ1ZSwgdHJ1ZSk7XG4gICAgICAgIGdsLnN0ZW5jaWxPcChnbC5LRUVQLGdsLktFRVAsZ2wuS0VFUCk7XG5cblxuICAgIH1cbn07XG5cbi8qKlxuICogRGVzdHJveXMgdGhlIG1hc2sgc3RhY2suXG4gKlxuICovXG5XZWJHTE1hc2tNYW5hZ2VyLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKClcbntcbiAgICBXZWJHTE1hbmFnZXIucHJvdG90eXBlLmRlc3Ryb3kuY2FsbCh0aGlzKTtcblxuICAgIHRoaXMuc3RlbmNpbE1hc2tTdGFjay5zdGVuY2lsU3RhY2sgPSBudWxsO1xufTtcblxuLyoqXG4gKiBBcHBsaWVzIHRoZSBNYXNrIGFuZCBhZGRzIGl0IHRvIHRoZSBjdXJyZW50IGZpbHRlciBzdGFjay5cbiAqXG4gKiBAcGFyYW0gbWFza0RhdGEge2FueVtdfSBUaGUgbWFzayBkYXRhIHN0cnVjdHVyZSB0byB1c2VcbiAqL1xuV2ViR0xNYXNrTWFuYWdlci5wcm90b3R5cGUucHVzaE1hc2sgPSBmdW5jdGlvbiAobWFza0RhdGEpXG57XG4gICAgdGhpcy5yZW5kZXJlci5zZXRPYmplY3RSZW5kZXJlcih0aGlzLnJlbmRlcmVyLnBsdWdpbnMuZ3JhcGhpY3MpO1xuICAgIFxuICAgIC8vVE9ETyBGSVhcbiAgICBpZiAobWFza0RhdGEuZGlydHkpXG4gICAge1xuICAgICAgICB0aGlzLnJlbmRlcmVyLnBsdWdpbnMuZ3JhcGhpY3MudXBkYXRlR3JhcGhpY3MobWFza0RhdGEsIHRoaXMucmVuZGVyZXIuZ2wpO1xuICAgIH1cblxuICAgIGlmICghbWFza0RhdGEuX3dlYkdMW3RoaXMucmVuZGVyZXIuZ2wuaWRdLmRhdGEubGVuZ3RoKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMucHVzaFN0ZW5jaWwobWFza0RhdGEsIG1hc2tEYXRhLl93ZWJHTFt0aGlzLnJlbmRlcmVyLmdsLmlkXS5kYXRhWzBdKTtcbn07XG5cbi8qKlxuICogUmVtb3ZlcyB0aGUgbGFzdCBmaWx0ZXIgZnJvbSB0aGUgZmlsdGVyIHN0YWNrIGFuZCBkb2Vzbid0IHJldHVybiBpdC5cbiAqXG4gKiBAcGFyYW0gbWFza0RhdGEge2FueVtdfVxuICovXG5XZWJHTE1hc2tNYW5hZ2VyLnByb3RvdHlwZS5wb3BNYXNrID0gZnVuY3Rpb24gKG1hc2tEYXRhKVxue1xuICAgIHRoaXMucmVuZGVyZXIuc2V0T2JqZWN0UmVuZGVyZXIodGhpcy5yZW5kZXJlci5wbHVnaW5zLmdyYXBoaWNzKTtcblxuICAgIHRoaXMucG9wU3RlbmNpbChtYXNrRGF0YSwgbWFza0RhdGEuX3dlYkdMW3RoaXMucmVuZGVyZXIuZ2wuaWRdLmRhdGFbMF0pO1xufTtcblxuIiwiLyoqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcn0gVGhlIHJlbmRlcmVyIHRoaXMgbWFuYWdlciB3b3JrcyBmb3IuXG4gKi9cbmZ1bmN0aW9uIFdlYkdMTWFuYWdlcihyZW5kZXJlcilcbntcbiAgICAvKipcbiAgICAgKiBUaGUgcmVuZGVyZXIgdGhpcyBtYW5hZ2VyIHdvcmtzIGZvci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuV2ViR0xSZW5kZXJlcn1cbiAgICAgKi9cbiAgICB0aGlzLnJlbmRlcmVyID0gcmVuZGVyZXI7XG5cbiAgICB0aGlzLnJlbmRlcmVyLm9uKCdjb250ZXh0JywgdGhpcy5vbkNvbnRleHRDaGFuZ2UsIHRoaXMpO1xufVxuXG5XZWJHTE1hbmFnZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gV2ViR0xNYW5hZ2VyO1xubW9kdWxlLmV4cG9ydHMgPSBXZWJHTE1hbmFnZXI7XG5cbi8qKlxuICogR2VuZXJpYyBtZXRob2QgY2FsbGVkIHdoZW4gdGhlcmUgaXMgYSBXZWJHTCBjb250ZXh0IGNoYW5nZS5cbiAqXG4gKi9cbldlYkdMTWFuYWdlci5wcm90b3R5cGUub25Db250ZXh0Q2hhbmdlID0gZnVuY3Rpb24gKClcbntcblx0Ly8gZG8gc29tZSBjb2RlcyBpbml0IVxufTtcblxuLyoqXG4gKiBHZW5lcmljIGRlc3Ryb3kgbWV0aG9kcyB0byBiZSBvdmVycmlkZGVuIGJ5IHRoZSBzdWJjbGFzc1xuICpcbiAqL1xuV2ViR0xNYW5hZ2VyLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLnJlbmRlcmVyLm9mZignY29udGV4dCcsIHRoaXMub25Db250ZXh0Q2hhbmdlLCB0aGlzKTtcblxuICAgIHRoaXMucmVuZGVyZXIgPSBudWxsO1xufTtcbiIsInZhciBTaGFkZXIgPSByZXF1aXJlKCcuL1NoYWRlcicpO1xuXG4vKipcbiAqIFRoaXMgc2hhZGVyIGlzIHVzZWQgdG8gZHJhdyBjb21wbGV4IHByaW1pdGl2ZSBzaGFwZXMgZm9yIHtAbGluayBQSVhJLkdyYXBoaWNzfS5cbiAqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAZXh0ZW5kcyBQSVhJLlNoYWRlclxuICogQHBhcmFtIHNoYWRlck1hbmFnZXIge1BJWEkuU2hhZGVyTWFuYWdlcn0gVGhlIHdlYmdsIHNoYWRlciBtYW5hZ2VyIHRoaXMgc2hhZGVyIHdvcmtzIGZvci5cbiAqL1xuZnVuY3Rpb24gQ29tcGxleFByaW1pdGl2ZVNoYWRlcihzaGFkZXJNYW5hZ2VyKVxue1xuICAgIFNoYWRlci5jYWxsKHRoaXMsXG4gICAgICAgIHNoYWRlck1hbmFnZXIsXG4gICAgICAgIC8vIHZlcnRleCBzaGFkZXJcbiAgICAgICAgW1xuICAgICAgICAgICAgJ2F0dHJpYnV0ZSB2ZWMyIGFWZXJ0ZXhQb3NpdGlvbjsnLFxuXG4gICAgICAgICAgICAndW5pZm9ybSBtYXQzIHRyYW5zbGF0aW9uTWF0cml4OycsXG4gICAgICAgICAgICAndW5pZm9ybSBtYXQzIHByb2plY3Rpb25NYXRyaXg7JyxcblxuICAgICAgICAgICAgJ3VuaWZvcm0gdmVjMyB0aW50OycsXG4gICAgICAgICAgICAndW5pZm9ybSBmbG9hdCBhbHBoYTsnLFxuICAgICAgICAgICAgJ3VuaWZvcm0gdmVjMyBjb2xvcjsnLFxuXG4gICAgICAgICAgICAndmFyeWluZyB2ZWM0IHZDb2xvcjsnLFxuXG4gICAgICAgICAgICAndm9pZCBtYWluKHZvaWQpeycsXG4gICAgICAgICAgICAnICAgZ2xfUG9zaXRpb24gPSB2ZWM0KChwcm9qZWN0aW9uTWF0cml4ICogdHJhbnNsYXRpb25NYXRyaXggKiB2ZWMzKGFWZXJ0ZXhQb3NpdGlvbiwgMS4wKSkueHksIDAuMCwgMS4wKTsnLFxuICAgICAgICAgICAgJyAgIHZDb2xvciA9IHZlYzQoY29sb3IgKiBhbHBoYSAqIHRpbnQsIGFscGhhKTsnLC8vXCIgKiB2ZWM0KHRpbnQgKiBhbHBoYSwgYWxwaGEpOycsXG4gICAgICAgICAgICAnfSdcbiAgICAgICAgXS5qb2luKCdcXG4nKSxcbiAgICAgICAgLy8gZnJhZ21lbnQgc2hhZGVyXG4gICAgICAgIFtcbiAgICAgICAgICAgICdwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDsnLFxuXG4gICAgICAgICAgICAndmFyeWluZyB2ZWM0IHZDb2xvcjsnLFxuXG4gICAgICAgICAgICAndm9pZCBtYWluKHZvaWQpeycsXG4gICAgICAgICAgICAnICAgZ2xfRnJhZ0NvbG9yID0gdkNvbG9yOycsXG4gICAgICAgICAgICAnfSdcbiAgICAgICAgXS5qb2luKCdcXG4nKSxcbiAgICAgICAgLy8gY3VzdG9tIHVuaWZvcm1zXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRpbnQ6ICAgeyB0eXBlOiAnM2YnLCB2YWx1ZTogWzAsIDAsIDBdIH0sXG4gICAgICAgICAgICBhbHBoYTogIHsgdHlwZTogJzFmJywgdmFsdWU6IDAgfSxcbiAgICAgICAgICAgIGNvbG9yOiAgeyB0eXBlOiAnM2YnLCB2YWx1ZTogWzAsMCwwXSB9LFxuICAgICAgICAgICAgdHJhbnNsYXRpb25NYXRyaXg6IHsgdHlwZTogJ21hdDMnLCB2YWx1ZTogbmV3IEZsb2F0MzJBcnJheSg5KSB9LFxuICAgICAgICAgICAgcHJvamVjdGlvbk1hdHJpeDogeyB0eXBlOiAnbWF0MycsIHZhbHVlOiBuZXcgRmxvYXQzMkFycmF5KDkpIH1cbiAgICAgICAgfSxcbiAgICAgICAgLy8gYXR0cmlidXRlc1xuICAgICAgICB7XG4gICAgICAgICAgICBhVmVydGV4UG9zaXRpb246MFxuICAgICAgICB9XG4gICAgKTtcbn1cblxuQ29tcGxleFByaW1pdGl2ZVNoYWRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFNoYWRlci5wcm90b3R5cGUpO1xuQ29tcGxleFByaW1pdGl2ZVNoYWRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBDb21wbGV4UHJpbWl0aXZlU2hhZGVyO1xubW9kdWxlLmV4cG9ydHMgPSBDb21wbGV4UHJpbWl0aXZlU2hhZGVyO1xuIiwidmFyIFNoYWRlciA9IHJlcXVpcmUoJy4vU2hhZGVyJyk7XG5cbi8qKlxuICogVGhpcyBzaGFkZXIgaXMgdXNlZCB0byBkcmF3IHNpbXBsZSBwcmltaXRpdmUgc2hhcGVzIGZvciB7QGxpbmsgUElYSS5HcmFwaGljc30uXG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQGV4dGVuZHMgUElYSS5TaGFkZXJcbiAqIEBwYXJhbSBzaGFkZXJNYW5hZ2VyIHtTaGFkZXJNYW5hZ2VyfSBUaGUgd2ViZ2wgc2hhZGVyIG1hbmFnZXIgdGhpcyBzaGFkZXIgd29ya3MgZm9yLlxuICovXG5mdW5jdGlvbiBQcmltaXRpdmVTaGFkZXIoc2hhZGVyTWFuYWdlcilcbntcbiAgICBTaGFkZXIuY2FsbCh0aGlzLFxuICAgICAgICBzaGFkZXJNYW5hZ2VyLFxuICAgICAgICAvLyB2ZXJ0ZXggc2hhZGVyXG4gICAgICAgIFtcbiAgICAgICAgICAgICdhdHRyaWJ1dGUgdmVjMiBhVmVydGV4UG9zaXRpb247JyxcbiAgICAgICAgICAgICdhdHRyaWJ1dGUgdmVjNCBhQ29sb3I7JyxcblxuICAgICAgICAgICAgJ3VuaWZvcm0gbWF0MyB0cmFuc2xhdGlvbk1hdHJpeDsnLFxuICAgICAgICAgICAgJ3VuaWZvcm0gbWF0MyBwcm9qZWN0aW9uTWF0cml4OycsXG5cbiAgICAgICAgICAgICd1bmlmb3JtIGZsb2F0IGFscGhhOycsXG4gICAgICAgICAgICAndW5pZm9ybSBmbG9hdCBmbGlwWTsnLFxuICAgICAgICAgICAgJ3VuaWZvcm0gdmVjMyB0aW50OycsXG5cbiAgICAgICAgICAgICd2YXJ5aW5nIHZlYzQgdkNvbG9yOycsXG5cbiAgICAgICAgICAgICd2b2lkIG1haW4odm9pZCl7JyxcbiAgICAgICAgICAgICcgICBnbF9Qb3NpdGlvbiA9IHZlYzQoKHByb2plY3Rpb25NYXRyaXggKiB0cmFuc2xhdGlvbk1hdHJpeCAqIHZlYzMoYVZlcnRleFBvc2l0aW9uLCAxLjApKS54eSwgMC4wLCAxLjApOycsXG4gICAgICAgICAgICAnICAgdkNvbG9yID0gYUNvbG9yICogdmVjNCh0aW50ICogYWxwaGEsIGFscGhhKTsnLFxuICAgICAgICAgICAgJ30nXG4gICAgICAgIF0uam9pbignXFxuJyksXG4gICAgICAgIC8vIGZyYWdtZW50IHNoYWRlclxuICAgICAgICBbXG4gICAgICAgICAgICAncHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7JyxcblxuICAgICAgICAgICAgJ3ZhcnlpbmcgdmVjNCB2Q29sb3I7JyxcblxuICAgICAgICAgICAgJ3ZvaWQgbWFpbih2b2lkKXsnLFxuICAgICAgICAgICAgJyAgIGdsX0ZyYWdDb2xvciA9IHZDb2xvcjsnLFxuICAgICAgICAgICAgJ30nXG4gICAgICAgIF0uam9pbignXFxuJyksXG4gICAgICAgIC8vIGN1c3RvbSB1bmlmb3Jtc1xuICAgICAgICB7XG4gICAgICAgICAgICB0aW50OiAgIHsgdHlwZTogJzNmJywgdmFsdWU6IFswLCAwLCAwXSB9LFxuICAgICAgICAgICAgYWxwaGE6ICB7IHR5cGU6ICcxZicsIHZhbHVlOiAwIH0sXG4gICAgICAgICAgICB0cmFuc2xhdGlvbk1hdHJpeDogeyB0eXBlOiAnbWF0MycsIHZhbHVlOiBuZXcgRmxvYXQzMkFycmF5KDkpIH0sXG4gICAgICAgICAgICBwcm9qZWN0aW9uTWF0cml4OiB7IHR5cGU6ICdtYXQzJywgdmFsdWU6IG5ldyBGbG9hdDMyQXJyYXkoOSkgfVxuICAgICAgICB9LFxuICAgICAgICAvLyBjdXN0b20gYXR0cmlidXRlc1xuICAgICAgICB7XG4gICAgICAgICAgICBhVmVydGV4UG9zaXRpb246MCxcbiAgICAgICAgICAgIGFDb2xvcjowXG4gICAgICAgIH1cbiAgICApO1xufVxuXG5QcmltaXRpdmVTaGFkZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShTaGFkZXIucHJvdG90eXBlKTtcblByaW1pdGl2ZVNoYWRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBQcmltaXRpdmVTaGFkZXI7XG5tb2R1bGUuZXhwb3J0cyA9IFByaW1pdGl2ZVNoYWRlcjtcbiIsIi8qZ2xvYmFsIGNvbnNvbGUgKi9cbnZhciB1dGlscyA9IHJlcXVpcmUoJy4uLy4uLy4uL3V0aWxzJyk7XG5cbi8qKlxuICogQmFzZSBzaGFkZXIgY2xhc3MgZm9yIFBJWEkgbWFuYWdlZCBzaGFkZXJzLlxuICpcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqIEBwYXJhbSBzaGFkZXJNYW5hZ2VyIHtQSVhJLlNoYWRlck1hbmFnZXJ9IFRoZSB3ZWJnbCBzaGFkZXIgbWFuYWdlciB0aGlzIHNoYWRlciB3b3JrcyBmb3IuXG4gKiBAcGFyYW0gW3ZlcnRleFNyY10ge3N0cmluZ30gVGhlIHNvdXJjZSBvZiB0aGUgdmVydGV4IHNoYWRlci5cbiAqIEBwYXJhbSBbZnJhZ21lbnRTcmNdIHtzdHJpbmd9IFRoZSBzb3VyY2Ugb2YgdGhlIGZyYWdtZW50IHNoYWRlci5cbiAqIEBwYXJhbSBbdW5pZm9ybXNdIHtvYmplY3R9IFVuaWZvcm1zIGZvciB0aGlzIHNoYWRlci5cbiAqIEBwYXJhbSBbYXR0cmlidXRlc10ge29iamVjdH0gQXR0cmlidXRlcyBmb3IgdGhpcyBzaGFkZXIuXG4gKi9cbmZ1bmN0aW9uIFNoYWRlcihzaGFkZXJNYW5hZ2VyLCB2ZXJ0ZXhTcmMsIGZyYWdtZW50U3JjLCB1bmlmb3JtcywgYXR0cmlidXRlcylcbntcbiAgICBpZiAoIXZlcnRleFNyYyB8fCAhZnJhZ21lbnRTcmMpXG4gICAge1xuICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdQaXhpLmpzIEVycm9yLiBTaGFkZXIgcmVxdWlyZXMgdmVydGV4U3JjIGFuZCBmcmFnbWVudFNyYycpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEEgdW5pcXVlIGlkXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEByZWFkb25seVxuICAgICAqL1xuICAgIHRoaXMudWlkID0gdXRpbHMudWlkKCk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgY3VycmVudCBXZWJHTCBkcmF3aW5nIGNvbnRleHRcbiAgICAgKiBAbWVtYmVyIHtXZWJHTFJlbmRlcmluZ0NvbnRleHR9XG4gICAgICogQHJlYWRvbmx5XG4gICAgICovXG4gICAgdGhpcy5nbCA9IHNoYWRlck1hbmFnZXIucmVuZGVyZXIuZ2w7XG5cbiAgICAvL1RPRE8gbWF5YmUgd2Ugc2hvdWxkIHBhc3MgcmVuZGVyZXIgcmF0aGVyIHRoYW4gc2hhZGVyIG1hbmdlcj8/IGZvb2QgZm9yIHRob3VnaHQuLlxuICAgIHRoaXMuc2hhZGVyTWFuYWdlciA9IHNoYWRlck1hbmFnZXI7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgV2ViR0wgcHJvZ3JhbS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1dlYkdMUHJvZ3JhbX1cbiAgICAgKiBAcmVhZG9ubHlcbiAgICAgKi9cbiAgICB0aGlzLnByb2dyYW0gPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHVuaWZvcm1zIGFzIGFuIG9iamVjdFxuICAgICAqIEBtZW1iZXIge29iamVjdH1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMudW5pZm9ybXMgPSB1bmlmb3JtcyB8fCB7fTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBhdHRyaWJ1dGVzIGFzIGFuIG9iamVjdFxuICAgICAqIEBtZW1iZXIge29iamVjdH1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuYXR0cmlidXRlcyA9IGF0dHJpYnV0ZXMgfHwge307XG5cbiAgICAvKipcbiAgICAgKiBJbnRlcm5hbCB0ZXh0dXJlIGNvdW50ZXJcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLnRleHR1cmVDb3VudCA9IDE7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgdmVydGV4IHNoYWRlciBhcyBhbiBhcnJheSBvZiBzdHJpbmdzXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtzdHJpbmd9XG4gICAgICovXG4gICAgdGhpcy52ZXJ0ZXhTcmMgPSB2ZXJ0ZXhTcmM7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgZnJhZ21lbnQgc2hhZGVyIGFzIGFuIGFycmF5IG9mIHN0cmluZ3NcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge3N0cmluZ31cbiAgICAgKi9cbiAgICB0aGlzLmZyYWdtZW50U3JjID0gZnJhZ21lbnRTcmM7XG5cbiAgICB0aGlzLmluaXQoKTtcbn1cblxuU2hhZGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFNoYWRlcjtcbm1vZHVsZS5leHBvcnRzID0gU2hhZGVyO1xuXG4vKipcbiAqIENyZWF0ZXMgdGhlIHNoYWRlciBhbmQgdXNlcyBpdFxuICpcbiAqL1xuU2hhZGVyLnByb3RvdHlwZS5pbml0ID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLmNvbXBpbGUoKTtcblxuICAgIHRoaXMuZ2wudXNlUHJvZ3JhbSh0aGlzLnByb2dyYW0pO1xuXG4gICAgdGhpcy5jYWNoZVVuaWZvcm1Mb2NhdGlvbnMoT2JqZWN0LmtleXModGhpcy51bmlmb3JtcykpO1xuICAgIHRoaXMuY2FjaGVBdHRyaWJ1dGVMb2NhdGlvbnMoT2JqZWN0LmtleXModGhpcy5hdHRyaWJ1dGVzKSk7XG59O1xuXG4vKipcbiAqIENhY2hlcyB0aGUgbG9jYXRpb25zIG9mIHRoZSB1bmlmb3JtIGZvciByZXVzZS5cbiAqXG4gKiBAcGFyYW0ga2V5cyB7c3RyaW5nfSB0aGUgdW5pZm9ybXMgdG8gY2FjaGVcbiAqL1xuU2hhZGVyLnByb3RvdHlwZS5jYWNoZVVuaWZvcm1Mb2NhdGlvbnMgPSBmdW5jdGlvbiAoa2V5cylcbntcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyArK2kpXG4gICAge1xuICAgICAgICB0aGlzLnVuaWZvcm1zW2tleXNbaV1dLl9sb2NhdGlvbiA9IHRoaXMuZ2wuZ2V0VW5pZm9ybUxvY2F0aW9uKHRoaXMucHJvZ3JhbSwga2V5c1tpXSk7XG4gICAgfVxufTtcblxuLyoqXG4gKiBDYWNoZXMgdGhlIGxvY2F0aW9ucyBvZiB0aGUgYXR0cmlidXRlIGZvciByZXVzZS5cbiAqXG4gKiBAcGFyYW0ga2V5cyB7c3RyaW5nfSB0aGUgYXR0cmlidXRlcyB0byBjYWNoZVxuICovXG5TaGFkZXIucHJvdG90eXBlLmNhY2hlQXR0cmlidXRlTG9jYXRpb25zID0gZnVuY3Rpb24gKGtleXMpXG57XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgKytpKVxuICAgIHtcbiAgICAgICAgdGhpcy5hdHRyaWJ1dGVzW2tleXNbaV1dID0gdGhpcy5nbC5nZXRBdHRyaWJMb2NhdGlvbih0aGlzLnByb2dyYW0sIGtleXNbaV0pO1xuICAgIH1cblxuICAgIC8vIFRPRE86IENoZWNrIGlmIHRoaXMgaXMgbmVlZGVkIGFueW1vcmUuLi5cblxuICAgIC8vIEJlZ2luIHdvcnN0IGhhY2sgZXZhIC8vXG5cbiAgICAvLyBXSFk/Pz8gT05MWSBvbiBteSBjaHJvbWUgcGl4ZWwgdGhlIGxpbmUgYWJvdmUgcmV0dXJucyAtMSB3aGVuIHVzaW5nIGZpbHRlcnM/XG4gICAgLy8gbWF5YmUgaXRzIHNvbWV0aGluZyB0byBkbyB3aXRoIHRoZSBjdXJyZW50IHN0YXRlIG9mIHRoZSBnbCBjb250ZXh0LlxuICAgIC8vIEknbSBjb252aW5jZWQgdGhpcyBpcyBhIGJ1ZyBpbiB0aGUgY2hyb21lIGJyb3dzZXIgYXMgdGhlcmUgaXMgTk8gcmVhc29uIHdoeSB0aGlzIHNob3VsZCBiZSByZXR1cm5pbmcgLTEgZXNwZWNpYWxseSBhcyBpdCBvbmx5IG1hbmlmZXN0cyBvbiBteSBjaHJvbWUgcGl4ZWxcbiAgICAvLyBJZiB0aGVyZXMgYW55IHdlYkdMIHBlb3BsZSB0aGF0IGtub3cgd2h5IGNvdWxkIGhhcHBlbiBwbGVhc2UgaGVscCA6KVxuICAgIC8vIGlmICh0aGlzLmF0dHJpYnV0ZXMuYUNvbG9yID09PSAtMSl7XG4gICAgLy8gICAgIHRoaXMuYXR0cmlidXRlcy5hQ29sb3IgPSAyO1xuICAgIC8vIH1cblxuICAgIC8vIEVuZCB3b3JzdCBoYWNrIGV2YSAvL1xufTtcblxuLyoqXG4gKiBBdHRhY2hlcyB0aGUgc2hhZGVycyBhbmQgY3JlYXRlcyB0aGUgcHJvZ3JhbS5cbiAqXG4gKiBAcmV0dXJuIHtXZWJHTFByb2dyYW19XG4gKi9cblNoYWRlci5wcm90b3R5cGUuY29tcGlsZSA9IGZ1bmN0aW9uICgpXG57XG4gICAgdmFyIGdsID0gdGhpcy5nbDtcblxuICAgIHZhciBnbFZlcnRTaGFkZXIgPSB0aGlzLl9nbENvbXBpbGUoZ2wuVkVSVEVYX1NIQURFUiwgdGhpcy52ZXJ0ZXhTcmMpO1xuICAgIHZhciBnbEZyYWdTaGFkZXIgPSB0aGlzLl9nbENvbXBpbGUoZ2wuRlJBR01FTlRfU0hBREVSLCB0aGlzLmZyYWdtZW50U3JjKTtcblxuICAgIHZhciBwcm9ncmFtID0gZ2wuY3JlYXRlUHJvZ3JhbSgpO1xuXG4gICAgZ2wuYXR0YWNoU2hhZGVyKHByb2dyYW0sIGdsVmVydFNoYWRlcik7XG4gICAgZ2wuYXR0YWNoU2hhZGVyKHByb2dyYW0sIGdsRnJhZ1NoYWRlcik7XG4gICAgZ2wubGlua1Byb2dyYW0ocHJvZ3JhbSk7XG5cbiAgICAvLyBpZiBsaW5raW5nIGZhaWxzLCB0aGVuIGxvZyBhbmQgY2xlYW51cFxuICAgIGlmICghZ2wuZ2V0UHJvZ3JhbVBhcmFtZXRlcihwcm9ncmFtLCBnbC5MSU5LX1NUQVRVUykpXG4gICAge1xuICAgICAgICBjb25zb2xlLmVycm9yKCdQaXhpLmpzIEVycm9yOiBDb3VsZCBub3QgaW5pdGlhbGl6ZSBzaGFkZXIuJyk7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ2dsLlZBTElEQVRFX1NUQVRVUycsIGdsLmdldFByb2dyYW1QYXJhbWV0ZXIocHJvZ3JhbSwgZ2wuVkFMSURBVEVfU1RBVFVTKSk7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ2dsLmdldEVycm9yKCknLCBnbC5nZXRFcnJvcigpKTtcblxuICAgICAgICAvLyBpZiB0aGVyZSBpcyBhIHByb2dyYW0gaW5mbyBsb2csIGxvZyBpdFxuICAgICAgICBpZiAoZ2wuZ2V0UHJvZ3JhbUluZm9Mb2cocHJvZ3JhbSkgIT09ICcnKVxuICAgICAgICB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ1BpeGkuanMgV2FybmluZzogZ2wuZ2V0UHJvZ3JhbUluZm9Mb2coKScsIGdsLmdldFByb2dyYW1JbmZvTG9nKHByb2dyYW0pKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGdsLmRlbGV0ZVByb2dyYW0ocHJvZ3JhbSk7XG4gICAgICAgIHByb2dyYW0gPSBudWxsO1xuICAgIH1cblxuICAgIC8vIGNsZWFuIHVwIHNvbWUgc2hhZGVyc1xuICAgIGdsLmRlbGV0ZVNoYWRlcihnbFZlcnRTaGFkZXIpO1xuICAgIGdsLmRlbGV0ZVNoYWRlcihnbEZyYWdTaGFkZXIpO1xuXG4gICAgcmV0dXJuICh0aGlzLnByb2dyYW0gPSBwcm9ncmFtKTtcbn07XG5cbi8qKlxuKiBBZGRzIGEgbmV3IHVuaWZvcm1cbipcbiogQHBhcmFtIHVuaWZvcm0ge29iamVjdH0gdGhlIG5ldyB1bmlmb3JtIHRvIGF0dGFjaFxuKi9cblNoYWRlci5wcm90b3R5cGUuc3luY1VuaWZvcm0gPSBmdW5jdGlvbiAodW5pZm9ybSlcbntcbiAgICB2YXIgbG9jYXRpb24gPSB1bmlmb3JtLl9sb2NhdGlvbixcbiAgICAgICAgdmFsdWUgPSB1bmlmb3JtLnZhbHVlLFxuICAgICAgICBnbCA9IHRoaXMuZ2wsXG4gICAgICAgIGksIGlsO1xuXG4gICAgc3dpdGNoICh1bmlmb3JtLnR5cGUpXG4gICAge1xuICAgICAgICBjYXNlICdiJzpcbiAgICAgICAgY2FzZSAnYm9vbCc6XG4gICAgICAgIGNhc2UgJ2Jvb2xlYW4nOlxuICAgICAgICAgICAgZ2wudW5pZm9ybTFpKGxvY2F0aW9uLCB2YWx1ZSA/IDEgOiAwKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIC8vIHNpbmdsZSBpbnQgdmFsdWVcbiAgICAgICAgY2FzZSAnaSc6XG4gICAgICAgIGNhc2UgJzFpJzpcbiAgICAgICAgICAgIGdsLnVuaWZvcm0xaShsb2NhdGlvbiwgdmFsdWUpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLy8gc2luZ2xlIGZsb2F0IHZhbHVlXG4gICAgICAgIGNhc2UgJ2YnOlxuICAgICAgICBjYXNlICcxZic6XG4gICAgICAgICAgICBnbC51bmlmb3JtMWYobG9jYXRpb24sIHZhbHVlKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIC8vIEZsb2F0MzJBcnJheSgyKSBvciBKUyBBcnJyYXlcbiAgICAgICAgY2FzZSAnMmYnOlxuICAgICAgICAgICAgZ2wudW5pZm9ybTJmKGxvY2F0aW9uLCB2YWx1ZVswXSwgdmFsdWVbMV0pO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLy8gRmxvYXQzMkFycmF5KDMpIG9yIEpTIEFycnJheVxuICAgICAgICBjYXNlICczZic6XG4gICAgICAgICAgICBnbC51bmlmb3JtM2YobG9jYXRpb24sIHZhbHVlWzBdLCB2YWx1ZVsxXSwgdmFsdWVbMl0pO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLy8gRmxvYXQzMkFycmF5KDQpIG9yIEpTIEFycnJheVxuICAgICAgICBjYXNlICc0Zic6XG4gICAgICAgICAgICBnbC51bmlmb3JtNGYobG9jYXRpb24sIHZhbHVlWzBdLCB2YWx1ZVsxXSwgdmFsdWVbMl0sIHZhbHVlWzNdKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIC8vIGEgMkQgUG9pbnQgb2JqZWN0XG4gICAgICAgIGNhc2UgJ3YyJzpcbiAgICAgICAgICAgIGdsLnVuaWZvcm0yZihsb2NhdGlvbiwgdmFsdWUueCwgdmFsdWUueSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAvLyBhIDNEIFBvaW50IG9iamVjdFxuICAgICAgICBjYXNlICd2Myc6XG4gICAgICAgICAgICBnbC51bmlmb3JtM2YobG9jYXRpb24sIHZhbHVlLngsIHZhbHVlLnksIHZhbHVlLnopO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLy8gYSA0RCBQb2ludCBvYmplY3RcbiAgICAgICAgY2FzZSAndjQnOlxuICAgICAgICAgICAgZ2wudW5pZm9ybTRmKGxvY2F0aW9uLCB2YWx1ZS54LCB2YWx1ZS55LCB2YWx1ZS56LCB2YWx1ZS53KTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIC8vIEludDMyQXJyYXkgb3IgSlMgQXJyYXlcbiAgICAgICAgY2FzZSAnMWl2JzpcbiAgICAgICAgICAgIGdsLnVuaWZvcm0xaXYobG9jYXRpb24sIHZhbHVlKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIC8vIEludDMyQXJyYXkgb3IgSlMgQXJyYXlcbiAgICAgICAgY2FzZSAnMml2JzpcbiAgICAgICAgICAgIGdsLnVuaWZvcm0yaXYobG9jYXRpb24sIHZhbHVlKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIC8vIEludDMyQXJyYXkgb3IgSlMgQXJyYXlcbiAgICAgICAgY2FzZSAnM2l2JzpcbiAgICAgICAgICAgIGdsLnVuaWZvcm0zaXYobG9jYXRpb24sIHZhbHVlKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIC8vIEludDMyQXJyYXkgb3IgSlMgQXJyYXlcbiAgICAgICAgY2FzZSAnNGl2JzpcbiAgICAgICAgICAgIGdsLnVuaWZvcm00aXYobG9jYXRpb24sIHZhbHVlKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIC8vIEZsb2F0MzJBcnJheSBvciBKUyBBcnJheVxuICAgICAgICBjYXNlICcxZnYnOlxuICAgICAgICAgICAgZ2wudW5pZm9ybTFmdihsb2NhdGlvbiwgdmFsdWUpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLy8gRmxvYXQzMkFycmF5IG9yIEpTIEFycmF5XG4gICAgICAgIGNhc2UgJzJmdic6XG4gICAgICAgICAgICBnbC51bmlmb3JtMmZ2KGxvY2F0aW9uLCB2YWx1ZSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAvLyBGbG9hdDMyQXJyYXkgb3IgSlMgQXJyYXlcbiAgICAgICAgY2FzZSAnM2Z2JzpcbiAgICAgICAgICAgIGdsLnVuaWZvcm0zZnYobG9jYXRpb24sIHZhbHVlKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIC8vIEZsb2F0MzJBcnJheSBvciBKUyBBcnJheVxuICAgICAgICBjYXNlICc0ZnYnOlxuICAgICAgICAgICAgZ2wudW5pZm9ybTRmdihsb2NhdGlvbiwgdmFsdWUpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLy8gRmxvYXQzMkFycmF5IG9yIEpTIEFycmF5XG4gICAgICAgIGNhc2UgJ20yJzpcbiAgICAgICAgY2FzZSAnbWF0Mic6XG4gICAgICAgIGNhc2UgJ01hdHJpeDJmdic6XG4gICAgICAgICAgICBnbC51bmlmb3JtTWF0cml4MmZ2KGxvY2F0aW9uLCB1bmlmb3JtLnRyYW5zcG9zZSwgdmFsdWUpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLy8gRmxvYXQzMkFycmF5IG9yIEpTIEFycmF5XG4gICAgICAgIGNhc2UgJ20zJzpcbiAgICAgICAgY2FzZSAnbWF0Myc6XG4gICAgICAgIGNhc2UgJ01hdHJpeDNmdic6XG5cbiAgICAgICAgICAgIGdsLnVuaWZvcm1NYXRyaXgzZnYobG9jYXRpb24sIHVuaWZvcm0udHJhbnNwb3NlLCB2YWx1ZSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAvLyBGbG9hdDMyQXJyYXkgb3IgSlMgQXJyYXlcbiAgICAgICAgY2FzZSAnbTQnOlxuICAgICAgICBjYXNlICdtYXQ0JzpcbiAgICAgICAgY2FzZSAnTWF0cml4NGZ2JzpcbiAgICAgICAgICAgIGdsLnVuaWZvcm1NYXRyaXg0ZnYobG9jYXRpb24sIHVuaWZvcm0udHJhbnNwb3NlLCB2YWx1ZSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAvLyBhIENvbG9yIFZhbHVlXG4gICAgICAgIGNhc2UgJ2MnOlxuICAgICAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdmFsdWUgPSB1dGlscy5oZXgycmdiKHZhbHVlKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZ2wudW5pZm9ybTNmKGxvY2F0aW9uLCB2YWx1ZVswXSwgdmFsdWVbMV0sIHZhbHVlWzJdKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIC8vIGZsYXQgYXJyYXkgb2YgaW50ZWdlcnMgKEpTIG9yIHR5cGVkIGFycmF5KVxuICAgICAgICBjYXNlICdpdjEnOlxuICAgICAgICAgICAgZ2wudW5pZm9ybTFpdihsb2NhdGlvbiwgdmFsdWUpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLy8gZmxhdCBhcnJheSBvZiBpbnRlZ2VycyB3aXRoIDMgeCBOIHNpemUgKEpTIG9yIHR5cGVkIGFycmF5KVxuICAgICAgICBjYXNlICdpdic6XG4gICAgICAgICAgICBnbC51bmlmb3JtM2l2KGxvY2F0aW9uLCB2YWx1ZSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAvLyBmbGF0IGFycmF5IG9mIGZsb2F0cyAoSlMgb3IgdHlwZWQgYXJyYXkpXG4gICAgICAgIGNhc2UgJ2Z2MSc6XG4gICAgICAgICAgICBnbC51bmlmb3JtMWZ2KGxvY2F0aW9uLCB2YWx1ZSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAvLyBmbGF0IGFycmF5IG9mIGZsb2F0cyB3aXRoIDMgeCBOIHNpemUgKEpTIG9yIHR5cGVkIGFycmF5KVxuICAgICAgICBjYXNlICdmdic6XG4gICAgICAgICAgICBnbC51bmlmb3JtM2Z2KGxvY2F0aW9uLCB2YWx1ZSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAvLyBhcnJheSBvZiAyRCBQb2ludCBvYmplY3RzXG4gICAgICAgIGNhc2UgJ3Yydic6XG4gICAgICAgICAgICBpZiAoIXVuaWZvcm0uX2FycmF5KVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHVuaWZvcm0uX2FycmF5ID0gbmV3IEZsb2F0MzJBcnJheSgyICogdmFsdWUubGVuZ3RoKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZm9yIChpID0gMCwgaWwgPSB2YWx1ZS5sZW5ndGg7IGkgPCBpbDsgKytpKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHVuaWZvcm0uX2FycmF5W2kgKiAyXSAgICAgICA9IHZhbHVlW2ldLng7XG4gICAgICAgICAgICAgICAgdW5pZm9ybS5fYXJyYXlbaSAqIDIgKyAxXSAgID0gdmFsdWVbaV0ueTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZ2wudW5pZm9ybTJmdihsb2NhdGlvbiwgdW5pZm9ybS5fYXJyYXkpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLy8gYXJyYXkgb2YgM0QgUG9pbnQgb2JqZWN0c1xuICAgICAgICBjYXNlICd2M3YnOlxuICAgICAgICAgICAgaWYgKCF1bmlmb3JtLl9hcnJheSlcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB1bmlmb3JtLl9hcnJheSA9IG5ldyBGbG9hdDMyQXJyYXkoMyAqIHZhbHVlLmxlbmd0aCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGZvciAoaSA9IDAsIGlsID0gdmFsdWUubGVuZ3RoOyBpIDwgaWw7ICsraSlcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB1bmlmb3JtLl9hcnJheVtpICogM10gICAgICAgPSB2YWx1ZVtpXS54O1xuICAgICAgICAgICAgICAgIHVuaWZvcm0uX2FycmF5W2kgKiAzICsgMV0gICA9IHZhbHVlW2ldLnk7XG4gICAgICAgICAgICAgICAgdW5pZm9ybS5fYXJyYXlbaSAqIDMgKyAyXSAgID0gdmFsdWVbaV0uejtcblxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBnbC51bmlmb3JtM2Z2KGxvY2F0aW9uLCB1bmlmb3JtLl9hcnJheSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAvLyBhcnJheSBvZiA0RCBQb2ludCBvYmplY3RzXG4gICAgICAgIGNhc2UgJ3Y0dic6XG4gICAgICAgICAgICBpZiAoIXVuaWZvcm0uX2FycmF5KVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHVuaWZvcm0uX2FycmF5ID0gbmV3IEZsb2F0MzJBcnJheSg0ICogdmFsdWUubGVuZ3RoKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZm9yIChpID0gMCwgaWwgPSB2YWx1ZS5sZW5ndGg7IGkgPCBpbDsgKytpKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHVuaWZvcm0uX2FycmF5W2kgKiA0XSAgICAgICA9IHZhbHVlW2ldLng7XG4gICAgICAgICAgICAgICAgdW5pZm9ybS5fYXJyYXlbaSAqIDQgKyAxXSAgID0gdmFsdWVbaV0ueTtcbiAgICAgICAgICAgICAgICB1bmlmb3JtLl9hcnJheVtpICogNCArIDJdICAgPSB2YWx1ZVtpXS56O1xuICAgICAgICAgICAgICAgIHVuaWZvcm0uX2FycmF5W2kgKiA0ICsgM10gICA9IHZhbHVlW2ldLnc7XG5cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZ2wudW5pZm9ybTRmdihsb2NhdGlvbiwgdW5pZm9ybS5fYXJyYXkpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLy8gUElYSS5UZXh0dXJlXG4gICAgICAgIGNhc2UgJ3QnOlxuICAgICAgICBjYXNlICdzYW1wbGVyMkQnOlxuXG4gICAgICAgICAgICBpZiAoIXVuaWZvcm0udmFsdWUgfHwgIXVuaWZvcm0udmFsdWUuYmFzZVRleHR1cmUuaGFzTG9hZGVkKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBhY3RpdmF0ZSB0aGlzIHRleHR1cmVcbiAgICAgICAgICAgIGdsLmFjdGl2ZVRleHR1cmUoZ2xbJ1RFWFRVUkUnICsgdGhpcy50ZXh0dXJlQ291bnRdKTtcblxuICAgICAgICAgICAgdmFyIHRleHR1cmUgPSB1bmlmb3JtLnZhbHVlLmJhc2VUZXh0dXJlLl9nbFRleHR1cmVzW2dsLmlkXTtcblxuICAgICAgICAgICAgaWYgKCF0ZXh0dXJlKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHRoaXMuaW5pdFNhbXBsZXIyRCh1bmlmb3JtKTtcblxuICAgICAgICAgICAgICAgIC8vIHNldCB0aGUgdGV4dHVyIHRvIHRoZSBuZXdseSBjcmVhdGVkIG9uZS4uXG4gICAgICAgICAgICAgICAgdGV4dHVyZSA9IHVuaWZvcm0udmFsdWUuYmFzZVRleHR1cmUuX2dsVGV4dHVyZXNbZ2wuaWRdO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBiaW5kIHRoZSB0ZXh0dXJlXG4gICAgICAgICAgICBnbC5iaW5kVGV4dHVyZShnbC5URVhUVVJFXzJELCB0ZXh0dXJlKTtcblxuICAgICAgICAgICAgLy8gc2V0IHVuaWZvcm0gdG8gdGV4dHVyZSBpbmRleFxuICAgICAgICAgICAgZ2wudW5pZm9ybTFpKHVuaWZvcm0uX2xvY2F0aW9uLCB0aGlzLnRleHR1cmVDb3VudCk7XG5cbiAgICAgICAgICAgIC8vIGluY3JlbWVudCBuZXh0IHRleHR1cmUgaWRcbiAgICAgICAgICAgIHRoaXMudGV4dHVyZUNvdW50Kys7XG5cbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ1BpeGkuanMgU2hhZGVyIFdhcm5pbmc6IFVua25vd24gdW5pZm9ybSB0eXBlOiAnICsgdW5pZm9ybS50eXBlKTtcbiAgICB9XG59O1xuXG4vKipcbiAqIFVwZGF0ZXMgdGhlIHNoYWRlciB1bmlmb3JtIHZhbHVlcy5cbiAqXG4gKi9cblNoYWRlci5wcm90b3R5cGUuc3luY1VuaWZvcm1zID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLnRleHR1cmVDb3VudCA9IDE7XG5cbiAgICBmb3IgKHZhciBrZXkgaW4gdGhpcy51bmlmb3JtcylcbiAgICB7XG4gICAgICAgIHRoaXMuc3luY1VuaWZvcm0odGhpcy51bmlmb3Jtc1trZXldKTtcbiAgICB9XG59O1xuXG5cbi8qKlxuICogSW5pdGlhbGlzZXMgYSBTYW1wbGVyMkQgdW5pZm9ybSAod2hpY2ggbWF5IG9ubHkgYmUgYXZhaWxhYmxlIGxhdGVyIG9uIGFmdGVyIGluaXRVbmlmb3JtcyBvbmNlIHRoZSB0ZXh0dXJlIGhhcyBsb2FkZWQpXG4gKlxuICovXG5TaGFkZXIucHJvdG90eXBlLmluaXRTYW1wbGVyMkQgPSBmdW5jdGlvbiAodW5pZm9ybSlcbntcbiAgICB2YXIgZ2wgPSB0aGlzLmdsO1xuXG4gICAgdmFyIHRleHR1cmUgPSB1bmlmb3JtLnZhbHVlLmJhc2VUZXh0dXJlO1xuXG4gICAgaWYoIXRleHR1cmUuaGFzTG9hZGVkKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuXG5cbiAgICBpZiAodW5pZm9ybS50ZXh0dXJlRGF0YSlcbiAgICB7XG5cbiAgICAgICAgLy9UT0RPIG1vdmUgdGhpcy4uLlxuICAgICAgICB2YXIgZGF0YSA9IHVuaWZvcm0udGV4dHVyZURhdGE7XG5cbiAgICAgICAgdGV4dHVyZS5fZ2xUZXh0dXJlc1tnbC5pZF0gPSBnbC5jcmVhdGVUZXh0dXJlKCk7XG5cbiAgICAgICAgZ2wuYmluZFRleHR1cmUoZ2wuVEVYVFVSRV8yRCwgdGV4dHVyZS5fZ2xUZXh0dXJlc1tnbC5pZF0pO1xuXG4gICAgICAgIGdsLnBpeGVsU3RvcmVpKGdsLlVOUEFDS19QUkVNVUxUSVBMWV9BTFBIQV9XRUJHTCwgdGV4dHVyZS5wcmVtdWx0aXBsaWVkQWxwaGEpO1xuICAgICAgICAvLyBHTFRleHR1cmUgPSBtYWcgbGluZWFyLCBtaW4gbGluZWFyX21pcG1hcF9saW5lYXIsIHdyYXAgcmVwZWF0ICsgZ2wuZ2VuZXJhdGVNaXBtYXAoZ2wuVEVYVFVSRV8yRCk7XG4gICAgICAgIC8vIEdMVGV4dHVyZUxpbmVhciA9IG1hZy9taW4gbGluZWFyLCB3cmFwIGNsYW1wXG4gICAgICAgIC8vIEdMVGV4dHVyZU5lYXJlc3RSZXBlYXQgPSBtYWcvbWluIE5FQVJFU1QsIHdyYXAgcmVwZWF0XG4gICAgICAgIC8vIEdMVGV4dHVyZU5lYXJlc3QgPSBtYWcvbWluIG5lYXJlc3QsIHdyYXAgY2xhbXBcbiAgICAgICAgLy8gQXVkaW9UZXh0dXJlID0gd2hhdGV2ZXIgKyBsdW1pbmFuY2UgKyB3aWR0aCA1MTIsIGhlaWdodCAyLCBib3JkZXIgMFxuICAgICAgICAvLyBLZXlUZXh0dXJlID0gd2hhdGV2ZXIgKyBsdW1pbmFuY2UgKyB3aWR0aCAyNTYsIGhlaWdodCAyLCBib3JkZXIgMFxuXG4gICAgICAgIC8vICBtYWdGaWx0ZXIgY2FuIGJlOiBnbC5MSU5FQVIsIGdsLkxJTkVBUl9NSVBNQVBfTElORUFSIG9yIGdsLk5FQVJFU1RcbiAgICAgICAgLy8gIHdyYXBTL1QgY2FuIGJlOiBnbC5DTEFNUF9UT19FREdFIG9yIGdsLlJFUEVBVFxuXG4gICAgICAgIGdsLnRleEltYWdlMkQoZ2wuVEVYVFVSRV8yRCwgMCwgZGF0YS5sdW1pbmFuY2UgPyBnbC5MVU1JTkFOQ0UgOiBnbC5SR0JBLCBnbC5SR0JBLCBnbC5VTlNJR05FRF9CWVRFLCB0ZXh0dXJlLnNvdXJjZSk7XG5cbiAgICAgICAgZ2wudGV4UGFyYW1ldGVyaShnbC5URVhUVVJFXzJELCBnbC5URVhUVVJFX01BR19GSUxURVIsIGRhdGEubWFnRmlsdGVyID8gZGF0YS5tYWdGaWx0ZXIgOiBnbC5MSU5FQVIgKTtcbiAgICAgICAgZ2wudGV4UGFyYW1ldGVyaShnbC5URVhUVVJFXzJELCBnbC5URVhUVVJFX01JTl9GSUxURVIsIGRhdGEud3JhcFMgPyBkYXRhLndyYXBTIDogZ2wuQ0xBTVBfVE9fRURHRSApO1xuXG4gICAgICAgIGdsLnRleFBhcmFtZXRlcmkoZ2wuVEVYVFVSRV8yRCwgZ2wuVEVYVFVSRV9XUkFQX1QsIGRhdGEud3JhcFMgPyBkYXRhLndyYXBTIDogZ2wuQ0xBTVBfVE9fRURHRSk7XG4gICAgICAgIGdsLnRleFBhcmFtZXRlcmkoZ2wuVEVYVFVSRV8yRCwgZ2wuVEVYVFVSRV9XUkFQX1MsIGRhdGEud3JhcFQgPyBkYXRhLndyYXBUIDogZ2wuQ0xBTVBfVE9fRURHRSk7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHRoaXMuc2hhZGVyTWFuYWdlci5yZW5kZXJlci51cGRhdGVUZXh0dXJlKHRleHR1cmUpO1xuICAgIH1cbn07XG5cbi8qKlxuICogRGVzdHJveXMgdGhlIHNoYWRlci5cbiAqXG4gKi9cblNoYWRlci5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy5nbC5kZWxldGVQcm9ncmFtKHRoaXMucHJvZ3JhbSk7XG5cbiAgICB0aGlzLmdsID0gbnVsbDtcbiAgICB0aGlzLnVuaWZvcm1zID0gbnVsbDtcbiAgICB0aGlzLmF0dHJpYnV0ZXMgPSBudWxsO1xuXG4gICAgdGhpcy52ZXJ0ZXhTcmMgPSBudWxsO1xuICAgIHRoaXMuZnJhZ21lbnRTcmMgPSBudWxsO1xufTtcblxuU2hhZGVyLnByb3RvdHlwZS5fZ2xDb21waWxlID0gZnVuY3Rpb24gKHR5cGUsIHNyYylcbntcbiAgICB2YXIgc2hhZGVyID0gdGhpcy5nbC5jcmVhdGVTaGFkZXIodHlwZSk7XG5cbiAgICB0aGlzLmdsLnNoYWRlclNvdXJjZShzaGFkZXIsIHNyYyk7XG4gICAgdGhpcy5nbC5jb21waWxlU2hhZGVyKHNoYWRlcik7XG5cbiAgICBpZiAoIXRoaXMuZ2wuZ2V0U2hhZGVyUGFyYW1ldGVyKHNoYWRlciwgdGhpcy5nbC5DT01QSUxFX1NUQVRVUykpXG4gICAge1xuICAgICAgICBjb25zb2xlLmxvZyh0aGlzLmdsLmdldFNoYWRlckluZm9Mb2coc2hhZGVyKSk7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHJldHVybiBzaGFkZXI7XG59O1xuIiwidmFyIFNoYWRlciA9IHJlcXVpcmUoJy4vU2hhZGVyJyk7XG5cbi8qKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQGV4dGVuZHMgUElYSS5TaGFkZXJcbiAqIEBwYXJhbSBzaGFkZXJNYW5hZ2VyIHtQSVhJLlNoYWRlck1hbmFnZXJ9IFRoZSB3ZWJnbCBzaGFkZXIgbWFuYWdlciB0aGlzIHNoYWRlciB3b3JrcyBmb3IuXG4gKiBAcGFyYW0gW3ZlcnRleFNyY10ge3N0cmluZ30gVGhlIHNvdXJjZSBvZiB0aGUgdmVydGV4IHNoYWRlci5cbiAqIEBwYXJhbSBbZnJhZ21lbnRTcmNdIHtzdHJpbmd9IFRoZSBzb3VyY2Ugb2YgdGhlIGZyYWdtZW50IHNoYWRlci5cbiAqIEBwYXJhbSBbY3VzdG9tVW5pZm9ybXNdIHtvYmplY3R9IEN1c3RvbSB1bmlmb3JtcyB0byB1c2UgdG8gYXVnbWVudCB0aGUgYnVpbHQtaW4gb25lcy5cbiAqIEBwYXJhbSBbZnJhZ21lbnRTcmNdIHtzdHJpbmd9IFRoZSBzb3VyY2Ugb2YgdGhlIGZyYWdtZW50IHNoYWRlci5cbiAqL1xuZnVuY3Rpb24gVGV4dHVyZVNoYWRlcihzaGFkZXJNYW5hZ2VyLCB2ZXJ0ZXhTcmMsIGZyYWdtZW50U3JjLCBjdXN0b21Vbmlmb3JtcywgY3VzdG9tQXR0cmlidXRlcylcbntcbiAgICB2YXIgdW5pZm9ybXMgPSB7XG5cbiAgICAgICAgdVNhbXBsZXI6ICAgICAgICAgICB7IHR5cGU6ICdzYW1wbGVyMkQnLCB2YWx1ZTogMCB9LFxuICAgICAgICBwcm9qZWN0aW9uTWF0cml4OiAgIHsgdHlwZTogJ21hdDMnLCB2YWx1ZTogbmV3IEZsb2F0MzJBcnJheShbMSwgMCwgMCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsIDEsIDAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLCAwLCAxXSkgfVxuICAgIH07XG5cbiAgICBpZiAoY3VzdG9tVW5pZm9ybXMpXG4gICAge1xuICAgICAgICBmb3IgKHZhciB1IGluIGN1c3RvbVVuaWZvcm1zKVxuICAgICAgICB7XG4gICAgICAgICAgICB1bmlmb3Jtc1t1XSA9IGN1c3RvbVVuaWZvcm1zW3VdO1xuICAgICAgICB9XG4gICAgfVxuXG5cbiAgICB2YXIgYXR0cmlidXRlcyA9IHtcbiAgICAgICAgYVZlcnRleFBvc2l0aW9uOiAgICAwLFxuICAgICAgICBhVGV4dHVyZUNvb3JkOiAgICAgIDAsXG4gICAgICAgIGFDb2xvcjogICAgICAgICAgICAgMFxuICAgIH07XG5cbiAgICBpZiAoY3VzdG9tQXR0cmlidXRlcylcbiAgICB7XG4gICAgICAgIGZvciAodmFyIGEgaW4gY3VzdG9tQXR0cmlidXRlcylcbiAgICAgICAge1xuICAgICAgICAgICAgYXR0cmlidXRlc1thXSA9IGN1c3RvbUF0dHJpYnV0ZXNbYV07XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGUgdmVydGV4IHNoYWRlci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge3N0cmluZ31cbiAgICAgKi9cbiAgICB2ZXJ0ZXhTcmMgPSB2ZXJ0ZXhTcmMgfHwgVGV4dHVyZVNoYWRlci5kZWZhdWx0VmVydGV4U3JjO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGZyYWdtZW50IHNoYWRlci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge3N0cmluZ31cbiAgICAgKi9cbiAgICBmcmFnbWVudFNyYyA9IGZyYWdtZW50U3JjIHx8IFRleHR1cmVTaGFkZXIuZGVmYXVsdEZyYWdtZW50U3JjO1xuXG4gICAgU2hhZGVyLmNhbGwodGhpcywgc2hhZGVyTWFuYWdlciwgdmVydGV4U3JjLCBmcmFnbWVudFNyYywgdW5pZm9ybXMsIGF0dHJpYnV0ZXMpO1xufVxuXG4vLyBjb25zdHJ1Y3RvclxuVGV4dHVyZVNoYWRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFNoYWRlci5wcm90b3R5cGUpO1xuVGV4dHVyZVNoYWRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBUZXh0dXJlU2hhZGVyO1xubW9kdWxlLmV4cG9ydHMgPSBUZXh0dXJlU2hhZGVyO1xuXG4vKipcbiAqIFRoZSBkZWZhdWx0IHZlcnRleCBzaGFkZXIgc291cmNlXG4gKlxuICogQHN0YXRpY1xuICogQGNvbnN0YW50XG4gKi9cblRleHR1cmVTaGFkZXIuZGVmYXVsdFZlcnRleFNyYyA9IFtcbiAgICAncHJlY2lzaW9uIGxvd3AgZmxvYXQ7JyxcbiAgICAnYXR0cmlidXRlIHZlYzIgYVZlcnRleFBvc2l0aW9uOycsXG4gICAgJ2F0dHJpYnV0ZSB2ZWMyIGFUZXh0dXJlQ29vcmQ7JyxcbiAgICAnYXR0cmlidXRlIHZlYzQgYUNvbG9yOycsXG5cbiAgICAndW5pZm9ybSBtYXQzIHByb2plY3Rpb25NYXRyaXg7JyxcblxuICAgICd2YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDsnLFxuICAgICd2YXJ5aW5nIHZlYzQgdkNvbG9yOycsXG5cbiAgICAndm9pZCBtYWluKHZvaWQpeycsXG4gICAgJyAgIGdsX1Bvc2l0aW9uID0gdmVjNCgocHJvamVjdGlvbk1hdHJpeCAqIHZlYzMoYVZlcnRleFBvc2l0aW9uLCAxLjApKS54eSwgMC4wLCAxLjApOycsXG4gICAgJyAgIHZUZXh0dXJlQ29vcmQgPSBhVGV4dHVyZUNvb3JkOycsXG4gICAgJyAgIHZDb2xvciA9IHZlYzQoYUNvbG9yLnJnYiAqIGFDb2xvci5hLCBhQ29sb3IuYSk7JyxcbiAgICAnfSdcbl0uam9pbignXFxuJyk7XG5cbi8qKlxuICogVGhlIGRlZmF1bHQgZnJhZ21lbnQgc2hhZGVyIHNvdXJjZVxuICpcbiAqIEBzdGF0aWNcbiAqIEBjb25zdGFudFxuICovXG5UZXh0dXJlU2hhZGVyLmRlZmF1bHRGcmFnbWVudFNyYyA9IFtcbiAgICAncHJlY2lzaW9uIGxvd3AgZmxvYXQ7JyxcblxuICAgICd2YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDsnLFxuICAgICd2YXJ5aW5nIHZlYzQgdkNvbG9yOycsXG5cbiAgICAndW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXI7JyxcblxuICAgICd2b2lkIG1haW4odm9pZCl7JyxcbiAgICAnICAgZ2xfRnJhZ0NvbG9yID0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2VGV4dHVyZUNvb3JkKSAqIHZDb2xvciA7JyxcbiAgICAnfSdcbl0uam9pbignXFxuJyk7XG4iLCJ2YXIgU2hhZGVyID0gcmVxdWlyZSgncGl4aS1nbC1jb3JlJykuR0xTaGFkZXI7XG5cbi8qKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQGV4dGVuZHMgUElYSS5TaGFkZXJcbiAqIEBwYXJhbSBzaGFkZXJNYW5hZ2VyIHtQSVhJLlNoYWRlck1hbmFnZXJ9IFRoZSB3ZWJnbCBzaGFkZXIgbWFuYWdlciB0aGlzIHNoYWRlciB3b3JrcyBmb3IuXG4gKiBAcGFyYW0gW3ZlcnRleFNyY10ge3N0cmluZ30gVGhlIHNvdXJjZSBvZiB0aGUgdmVydGV4IHNoYWRlci5cbiAqIEBwYXJhbSBbZnJhZ21lbnRTcmNdIHtzdHJpbmd9IFRoZSBzb3VyY2Ugb2YgdGhlIGZyYWdtZW50IHNoYWRlci5cbiAqIEBwYXJhbSBbY3VzdG9tVW5pZm9ybXNdIHtvYmplY3R9IEN1c3RvbSB1bmlmb3JtcyB0byB1c2UgdG8gYXVnbWVudCB0aGUgYnVpbHQtaW4gb25lcy5cbiAqIEBwYXJhbSBbZnJhZ21lbnRTcmNdIHtzdHJpbmd9IFRoZSBzb3VyY2Ugb2YgdGhlIGZyYWdtZW50IHNoYWRlci5cbiAqL1xuZnVuY3Rpb24gVGV4dHVyZVNoYWRlcihnbClcbntcbiAgICAvKipcbiAgICAgKiBUaGUgdmVydGV4IHNoYWRlci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge3N0cmluZ31cbiAgICAgKi9cbiAgICB2ZXJ0ZXhTcmMgPSBUZXh0dXJlU2hhZGVyLmRlZmF1bHRWZXJ0ZXhTcmM7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgZnJhZ21lbnQgc2hhZGVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7c3RyaW5nfVxuICAgICAqL1xuICAgIGZyYWdtZW50U3JjID0gVGV4dHVyZVNoYWRlci5kZWZhdWx0RnJhZ21lbnRTcmM7XG5cbiAgICBTaGFkZXIuY2FsbCh0aGlzLCBnbCwgdmVydGV4U3JjLCBmcmFnbWVudFNyYyk7Ly8sIHVuaWZvcm1zLCBhdHRyaWJ1dGVzKTtcblxufVxuXG4vLyBjb25zdHJ1Y3RvclxuVGV4dHVyZVNoYWRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFNoYWRlci5wcm90b3R5cGUpO1xuVGV4dHVyZVNoYWRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBUZXh0dXJlU2hhZGVyO1xubW9kdWxlLmV4cG9ydHMgPSBUZXh0dXJlU2hhZGVyO1xuXG4vKipcbiAqIFRoZSBkZWZhdWx0IHZlcnRleCBzaGFkZXIgc291cmNlXG4gKlxuICogQHN0YXRpY1xuICogQGNvbnN0YW50XG4gKi9cblRleHR1cmVTaGFkZXIuZGVmYXVsdFZlcnRleFNyYyA9IFtcbiAgICAncHJlY2lzaW9uIGxvd3AgZmxvYXQ7JyxcbiAgICAnYXR0cmlidXRlIHZlYzIgYVZlcnRleFBvc2l0aW9uOycsXG4gICAgJ2F0dHJpYnV0ZSB2ZWMyIGFUZXh0dXJlQ29vcmQ7JyxcbiAgICAnYXR0cmlidXRlIHZlYzQgYUNvbG9yOycsXG5cbiAgICAndW5pZm9ybSBtYXQzIHByb2plY3Rpb25NYXRyaXg7JyxcblxuICAgICd2YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDsnLFxuICAgICd2YXJ5aW5nIHZlYzQgdkNvbG9yOycsXG5cbiAgICAndm9pZCBtYWluKHZvaWQpeycsXG4gICAgJyAgIGdsX1Bvc2l0aW9uID0gdmVjNCgocHJvamVjdGlvbk1hdHJpeCAqIHZlYzMoYVZlcnRleFBvc2l0aW9uLCAxLjApKS54eSwgMC4wLCAxLjApOycsXG4gICAgJyAgIHZUZXh0dXJlQ29vcmQgPSBhVGV4dHVyZUNvb3JkOycsXG4gICAgJyAgIHZDb2xvciA9IHZlYzQoYUNvbG9yLnJnYiAqIGFDb2xvci5hLCBhQ29sb3IuYSk7JyxcbiAgICAnfSdcbl0uam9pbignXFxuJyk7XG5cbi8qKlxuICogVGhlIGRlZmF1bHQgZnJhZ21lbnQgc2hhZGVyIHNvdXJjZVxuICpcbiAqIEBzdGF0aWNcbiAqIEBjb25zdGFudFxuICovXG5UZXh0dXJlU2hhZGVyLmRlZmF1bHRGcmFnbWVudFNyYyA9IFtcbiAgICAncHJlY2lzaW9uIGxvd3AgZmxvYXQ7JyxcblxuICAgICd2YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDsnLFxuICAgICd2YXJ5aW5nIHZlYzQgdkNvbG9yOycsXG5cbiAgICAndW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXI7JyxcblxuICAgICd2b2lkIG1haW4odm9pZCl7JyxcbiAgICAnICAgZ2xfRnJhZ0NvbG9yID0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2VGV4dHVyZUNvb3JkKSAqIHZDb2xvciA7JyxcbiAgICAnfSdcbl0uam9pbignXFxuJyk7XG4iLCJ2YXIgV2ViR0xNYW5hZ2VyID0gcmVxdWlyZSgnLi4vbWFuYWdlcnMvV2ViR0xNYW5hZ2VyJyk7XG5cbi8qKlxuICogQmFzZSBmb3IgYSBjb21tb24gb2JqZWN0IHJlbmRlcmVyIHRoYXQgY2FuIGJlIHVzZWQgYXMgYSBzeXN0ZW0gcmVuZGVyZXIgcGx1Z2luLlxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5XZWJHTE1hbmFnZXJcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcn0gVGhlIHJlbmRlcmVyIHRoaXMgb2JqZWN0IHJlbmRlcmVyIHdvcmtzIGZvci5cbiAqL1xuZnVuY3Rpb24gT2JqZWN0UmVuZGVyZXIocmVuZGVyZXIpXG57XG4gICAgV2ViR0xNYW5hZ2VyLmNhbGwodGhpcywgcmVuZGVyZXIpO1xufVxuXG5cbk9iamVjdFJlbmRlcmVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoV2ViR0xNYW5hZ2VyLnByb3RvdHlwZSk7XG5PYmplY3RSZW5kZXJlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBPYmplY3RSZW5kZXJlcjtcbm1vZHVsZS5leHBvcnRzID0gT2JqZWN0UmVuZGVyZXI7XG5cbi8qKlxuICogU3RhcnRzIHRoZSByZW5kZXJlciBhbmQgc2V0cyB0aGUgc2hhZGVyXG4gKlxuICovXG5PYmplY3RSZW5kZXJlci5wcm90b3R5cGUuc3RhcnQgPSBmdW5jdGlvbiAoKVxue1xuICAgIC8vIHNldCB0aGUgc2hhZGVyLi5cbn07XG5cbi8qKlxuICogU3RvcHMgdGhlIHJlbmRlcmVyXG4gKlxuICovXG5PYmplY3RSZW5kZXJlci5wcm90b3R5cGUuc3RvcCA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy5mbHVzaCgpO1xufTtcblxuLyoqXG4gKiBmbHVzaGVzXG4gKlxuICovXG5PYmplY3RSZW5kZXJlci5wcm90b3R5cGUuZmx1c2ggPSBmdW5jdGlvbiAoKVxue1xuICAgIC8vIGZsdXNoIVxufTtcblxuLyoqXG4gKiBSZW5kZXJzIGFuIG9iamVjdFxuICpcbiAqIEBwYXJhbSBvYmplY3Qge1BJWEkuRGlzcGxheU9iamVjdH0gVGhlIG9iamVjdCB0byByZW5kZXIuXG4gKi9cbk9iamVjdFJlbmRlcmVyLnByb3RvdHlwZS5yZW5kZXIgPSBmdW5jdGlvbiAob2JqZWN0KSAvLyBqc2hpbnQgdW51c2VkOmZhbHNlXG57XG4gICAgLy8gcmVuZGVyIHRoZSBvYmplY3Rcbn07XG4iLCIvKipcbiAqIEhlbHBlciBjbGFzcyB0byBjcmVhdGUgYSBxdWFkXG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIGdsIHtXZWJHTFJlbmRlcmluZ0NvbnRleHR9IFRoZSBnbCBjb250ZXh0IGZvciB0aGlzIHF1YWQgdG8gdXNlLlxuICovXG5mdW5jdGlvbiBRdWFkKGdsKVxue1xuICAgIC8qXG4gICAgICogdGhlIGN1cnJlbnQgV2ViR0wgZHJhd2luZyBjb250ZXh0XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtXZWJHTFJlbmRlcmluZ0NvbnRleHR9XG4gICAgICovXG4gICAgdGhpcy5nbCA9IGdsO1xuXG4vLyAgICB0aGlzLnRleHR1cmVzID0gbmV3IFRleHR1cmVVdnMoKTtcblxuICAgIC8qKlxuICAgICAqIEFuIGFycmF5IG9mIHZlcnRpY2VzXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtGbG9hdDMyQXJyYXl9XG4gICAgICovXG4gICAgdGhpcy52ZXJ0aWNlcyA9IG5ldyBGbG9hdDMyQXJyYXkoW1xuICAgICAgICAwLDAsXG4gICAgICAgIDIwMCwwLFxuICAgICAgICAyMDAsMjAwLFxuICAgICAgICAwLDIwMFxuICAgIF0pO1xuXG4gICAgLyoqXG4gICAgICogVGhlIFV2cyBvZiB0aGUgcXVhZFxuICAgICAqXG4gICAgICogQG1lbWJlciB7RmxvYXQzMkFycmF5fVxuICAgICAqL1xuICAgIHRoaXMudXZzID0gbmV3IEZsb2F0MzJBcnJheShbXG4gICAgICAgIDAsMCxcbiAgICAgICAgMSwwLFxuICAgICAgICAxLDEsXG4gICAgICAgIDAsMVxuICAgIF0pO1xuXG4vLyAgICB2YXIgd2hpdGUgPSAoMHhGRkZGRkYgPj4gMTYpICsgKDB4RkZGRkZGICYgMHhmZjAwKSArICgoMHhGRkZGRkYgJiAweGZmKSA8PCAxNikgKyAoMSAqIDI1NSA8PCAyNCk7XG4gICAgLy9UT0RPIGNvbnZlcnQgdGhpcyB0byBhIDMyIHVuc2lnbmVkIGludCBhcnJheVxuICAgIC8qKlxuICAgICAqIFRoZSBjb2xvciBjb21wb25lbnRzIG9mIHRoZSB0cmlhbmdsZXNcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge0Zsb2F0MzJBcnJheX1cbiAgICAgKi9cbiAgICB0aGlzLmNvbG9ycyA9IG5ldyBGbG9hdDMyQXJyYXkoW1xuICAgICAgICAxLDEsMSwxLFxuICAgICAgICAxLDEsMSwxLFxuICAgICAgICAxLDEsMSwxLFxuICAgICAgICAxLDEsMSwxXG4gICAgXSk7XG5cbiAgICAvKlxuICAgICAqIEBtZW1iZXIge1VpbnQxNkFycmF5fSBBbiBhcnJheSBjb250YWluaW5nIHRoZSBpbmRpY2VzIG9mIHRoZSB2ZXJ0aWNlc1xuICAgICAqL1xuICAgIHRoaXMuaW5kaWNlcyA9IG5ldyBVaW50MTZBcnJheShbXG4gICAgICAgIDAsIDEsIDIsIDAsIDMsIDJcbiAgICBdKTtcblxuICAgIC8qXG4gICAgICogQG1lbWJlciB7V2ViR0xCdWZmZXJ9IFRoZSB2ZXJ0ZXggYnVmZmVyXG4gICAgICovXG4gICAgdGhpcy52ZXJ0ZXhCdWZmZXIgPSBnbC5jcmVhdGVCdWZmZXIoKTtcblxuICAgIC8qXG4gICAgICogQG1lbWJlciB7V2ViR0xCdWZmZXJ9IFRoZSBpbmRleCBidWZmZXJcbiAgICAgKi9cbiAgICB0aGlzLmluZGV4QnVmZmVyID0gZ2wuY3JlYXRlQnVmZmVyKCk7XG5cbiAgICBnbC5iaW5kQnVmZmVyKGdsLkFSUkFZX0JVRkZFUiwgdGhpcy52ZXJ0ZXhCdWZmZXIpO1xuICAgIGdsLmJ1ZmZlckRhdGEoZ2wuQVJSQVlfQlVGRkVSLCAoOCArIDggKyAxNikgKiA0LCBnbC5EWU5BTUlDX0RSQVcpO1xuXG4gICAgZ2wuYmluZEJ1ZmZlcihnbC5FTEVNRU5UX0FSUkFZX0JVRkZFUiwgdGhpcy5pbmRleEJ1ZmZlcik7XG4gICAgZ2wuYnVmZmVyRGF0YShnbC5FTEVNRU5UX0FSUkFZX0JVRkZFUiwgdGhpcy5pbmRpY2VzLCBnbC5TVEFUSUNfRFJBVyk7XG5cbiAgICB0aGlzLnVwbG9hZCgpO1xufVxuXG5RdWFkLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFF1YWQ7XG5cbi8qKlxuICogTWFwcyB0d28gUmVjdGFuZ2xlIHRvIHRoZSBxdWFkXG4gKiBAcGFyYW0gcmVjdCB7UElYSS5SZWN0YW5nbGV9IHRoZSBmaXJzdCByZWN0YW5nbGVcbiAqIEBwYXJhbSByZWN0MiB7UElYSS5SZWN0YW5nbGV9IHRoZSBzZWNvbmQgcmVjdGFuZ2xlXG4gKi9cblF1YWQucHJvdG90eXBlLm1hcCA9IGZ1bmN0aW9uKHJlY3QsIHJlY3QyKVxue1xuICAgIHZhciB4ID0gMDsgLy9yZWN0Mi54IC8gcmVjdC53aWR0aDtcbiAgICB2YXIgeSA9IDA7IC8vcmVjdDIueSAvIHJlY3QuaGVpZ2h0O1xuXG4gICAgdGhpcy51dnNbMF0gPSB4O1xuICAgIHRoaXMudXZzWzFdID0geTtcblxuICAgIHRoaXMudXZzWzJdID0geCArIHJlY3QyLndpZHRoIC8gcmVjdC53aWR0aDtcbiAgICB0aGlzLnV2c1szXSA9IHk7XG5cbiAgICB0aGlzLnV2c1s0XSA9IHggKyByZWN0Mi53aWR0aCAvIHJlY3Qud2lkdGg7XG4gICAgdGhpcy51dnNbNV0gPSB5ICsgcmVjdDIuaGVpZ2h0IC8gcmVjdC5oZWlnaHQ7XG5cbiAgICB0aGlzLnV2c1s2XSA9IHg7XG4gICAgdGhpcy51dnNbN10gPSB5ICsgcmVjdDIuaGVpZ2h0IC8gcmVjdC5oZWlnaHQ7XG5cbiAgICAvLy8gLS0tLS1cbiAgICB4ID0gcmVjdDIueDtcbiAgICB5ID0gcmVjdDIueTtcblxuICAgIHRoaXMudmVydGljZXNbMF0gPSB4O1xuICAgIHRoaXMudmVydGljZXNbMV0gPSB5O1xuXG4gICAgdGhpcy52ZXJ0aWNlc1syXSA9IHggKyByZWN0Mi53aWR0aDtcbiAgICB0aGlzLnZlcnRpY2VzWzNdID0geTtcblxuICAgIHRoaXMudmVydGljZXNbNF0gPSB4ICsgcmVjdDIud2lkdGg7XG4gICAgdGhpcy52ZXJ0aWNlc1s1XSA9IHkgKyByZWN0Mi5oZWlnaHQ7XG5cbiAgICB0aGlzLnZlcnRpY2VzWzZdID0geDtcbiAgICB0aGlzLnZlcnRpY2VzWzddID0geSArIHJlY3QyLmhlaWdodDtcblxuICAgIHRoaXMudXBsb2FkKCk7XG59O1xuXG4vKipcbiAqIEJpbmRzIHRoZSBidWZmZXIgYW5kIHVwbG9hZHMgdGhlIGRhdGFcbiAqL1xuUXVhZC5wcm90b3R5cGUudXBsb2FkID0gZnVuY3Rpb24oKVxue1xuICAgIHZhciBnbCA9IHRoaXMuZ2w7XG5cbiAgICAvLyBUT0RPIGNvdWxkIHByb2JhYmx5IGJlIHB1c2hlZCBpbnRvIG9uZSB1cGxvYWQhXG4gICAgZ2wuYmluZEJ1ZmZlciggZ2wuQVJSQVlfQlVGRkVSLCB0aGlzLnZlcnRleEJ1ZmZlciApO1xuXG4gICAgZ2wuYnVmZmVyU3ViRGF0YShnbC5BUlJBWV9CVUZGRVIsIDAsIHRoaXMudmVydGljZXMpO1xuXG4gICAgZ2wuYnVmZmVyU3ViRGF0YShnbC5BUlJBWV9CVUZGRVIsIDggKiA0LCB0aGlzLnV2cyk7XG5cbiAgICBnbC5idWZmZXJTdWJEYXRhKGdsLkFSUkFZX0JVRkZFUiwgKDggKyA4KSAqIDQsIHRoaXMuY29sb3JzKTtcbn07XG5cblF1YWQucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbigpXG57XG4gICAgdmFyIGdsID0gdGhpcy5nbDtcbiAgICBcbiAgICAgZ2wuZGVsZXRlQnVmZmVyKHRoaXMudmVydGV4QnVmZmVyKTtcbiAgICAgZ2wuZGVsZXRlQnVmZmVyKHRoaXMuaW5kZXhCdWZmZXIpO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBRdWFkO1xuXG5cbiIsInZhciBtYXRoID0gcmVxdWlyZSgnLi4vLi4vLi4vbWF0aCcpLFxuICAgIHV0aWxzID0gcmVxdWlyZSgnLi4vLi4vLi4vdXRpbHMnKSxcbiAgICBDT05TVCA9IHJlcXVpcmUoJy4uLy4uLy4uL2NvbnN0JyksXG4gICAgICAgIFxuICAgIEdMVGV4dHVyZSA9IHJlcXVpcmUoJ3BpeGktZ2wtY29yZScpLkdMVGV4dHVyZSxcbiAgICBHTEZyYW1lYnVmZmVyID0gcmVxdWlyZSgncGl4aS1nbC1jb3JlJykuR0xGcmFtZWJ1ZmZlcixcbiAgICBcbiAgICBTdGVuY2lsTWFza1N0YWNrID0gcmVxdWlyZSgnLi9TdGVuY2lsTWFza1N0YWNrJyk7XG5cbi8qKlxuICogQGF1dGhvciBNYXQgR3JvdmVzIGh0dHA6Ly9tYXRncm92ZXMuY29tLyBARG9vcm1hdDIzXG4gKi9cblxuLyoqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gZ2wge1dlYkdMUmVuZGVyaW5nQ29udGV4dH0gdGhlIGN1cnJlbnQgV2ViR0wgZHJhd2luZyBjb250ZXh0XG4gKiBAcGFyYW0gd2lkdGgge251bWJlcn0gdGhlIGhvcml6b250YWwgcmFuZ2Ugb2YgdGhlIGZpbHRlclxuICogQHBhcmFtIGhlaWdodCB7bnVtYmVyfSB0aGUgdmVydGljYWwgcmFuZ2Ugb2YgdGhlIGZpbHRlclxuICogQHBhcmFtIHNjYWxlTW9kZSB7bnVtYmVyfSBTZWUge0BsaW5rIFBJWEkuU0NBTEVfTU9ERVN9IGZvciBwb3NzaWJsZSB2YWx1ZXNcbiAqIEBwYXJhbSByZXNvbHV0aW9uIHtudW1iZXJ9IHRoZSBjdXJyZW50IHJlc29sdXRpb25cbiAqIEBwYXJhbSByb290IHtib29sZWFufSBXaGV0aGVyIHRoaXMgb2JqZWN0IGlzIHRoZSByb290IGVsZW1lbnQgb3Igbm90XG4gKi9cbnZhciBSZW5kZXJUYXJnZXQgPSBmdW5jdGlvbihnbCwgd2lkdGgsIGhlaWdodCwgc2NhbGVNb2RlLCByZXNvbHV0aW9uLCByb290KVxue1xuICAgIC8vVE9ETyBSZXNvbHV0aW9uIGNvdWxkIGdvIGhlcmUgKCBlZyBsb3cgcmVzIGJsdXJzIClcblxuICAgIC8qKlxuICAgICAqIFRoZSBjdXJyZW50IFdlYkdMIGRyYXdpbmcgY29udGV4dC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1dlYkdMUmVuZGVyaW5nQ29udGV4dH1cbiAgICAgKi9cbiAgICB0aGlzLmdsID0gZ2w7XG5cbiAgICAvLyBuZXh0IHRpbWUgdG8gY3JlYXRlIGEgZnJhbWUgYnVmZmVyIGFuZCB0ZXh0dXJlXG5cbiAgICAvKipcbiAgICAgKiBBIGZyYW1lIGJ1ZmZlclxuICAgICAqXG4gICAgICogQG1lbWJlciB7V2ViR0xGcmFtZUJ1ZmZlcn1cbiAgICAgKi9cbiAgICB0aGlzLmZyYW1lQnVmZmVyID0gbnVsbDtcblxuICAgIC8qKlxuICAgICAqIFRoZSB0ZXh0dXJlXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlRleHR1cmV9XG4gICAgICovXG4gICAgdGhpcy50ZXh0dXJlID0gbnVsbDtcblxuICAgIHRoaXMuY2xlYXJDb2xvciA9IFswLCAwLCAwLCAwXTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBzaXplIG9mIHRoZSBvYmplY3QgYXMgYSByZWN0YW5nbGVcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuUmVjdGFuZ2xlfVxuICAgICAqL1xuICAgIHRoaXMuc2l6ZSA9IG5ldyBtYXRoLlJlY3RhbmdsZSgwLCAwLCAxLCAxKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBjdXJyZW50IHJlc29sdXRpb25cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLnJlc29sdXRpb24gPSByZXNvbHV0aW9uIHx8IENPTlNULlJFU09MVVRJT047XG5cbiAgICAvKipcbiAgICAgKiBUaGUgcHJvamVjdGlvbiBtYXRyaXhcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuTWF0cml4fVxuICAgICAqL1xuICAgIHRoaXMucHJvamVjdGlvbk1hdHJpeCA9IG5ldyBtYXRoLk1hdHJpeCgpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIG9iamVjdCdzIHRyYW5zZm9ybVxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5NYXRyaXh9XG4gICAgICovXG4gICAgdGhpcy50cmFuc2Zvcm0gPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGZyYW1lLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5SZWN0YW5nbGV9XG4gICAgICovXG4gICAgdGhpcy5mcmFtZSA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgc3RlbmNpbCBidWZmZXIgc3RvcmVzIG1hc2tpbmcgZGF0YSBmb3IgdGhlIHJlbmRlciB0YXJnZXRcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1dlYkdMUmVuZGVyQnVmZmVyfVxuICAgICAqL1xuICAgIHRoaXMuc3RlbmNpbEJ1ZmZlciA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgZGF0YSBzdHJ1Y3R1cmUgZm9yIHRoZSBzdGVuY2lsIG1hc2tzXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlN0ZW5jaWxNYXNrU3RhY2t9XG4gICAgICovXG4gICAgdGhpcy5zdGVuY2lsTWFza1N0YWNrID0gbmV3IFN0ZW5jaWxNYXNrU3RhY2soKTtcblxuICAgIC8qKlxuICAgICAqIFN0b3JlcyBmaWx0ZXIgZGF0YSBmb3IgdGhlIHJlbmRlciB0YXJnZXRcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge29iamVjdFtdfVxuICAgICAqL1xuICAgIHRoaXMuZmlsdGVyU3RhY2sgPSBbXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJlbmRlclRhcmdldDp0aGlzLFxuICAgICAgICAgICAgZmlsdGVyOltdLFxuICAgICAgICAgICAgYm91bmRzOnRoaXMuc2l6ZVxuICAgICAgICB9XG4gICAgXTtcblxuXG4gICAgLyoqXG4gICAgICogVGhlIHNjYWxlIG1vZGUuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgUElYSS5TQ0FMRV9NT0RFUy5ERUZBVUxUXG4gICAgICogQHNlZSBQSVhJLlNDQUxFX01PREVTXG4gICAgICovXG4gICAgdGhpcy5zY2FsZU1vZGUgPSBzY2FsZU1vZGUgfHwgQ09OU1QuU0NBTEVfTU9ERVMuREVGQVVMVDtcblxuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgdGhpcyBvYmplY3QgaXMgdGhlIHJvb3QgZWxlbWVudCBvciBub3RcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICovXG4gICAgdGhpcy5yb290ID0gcm9vdDtcblxuICAgIHRoaXMuZnJhbWVCdWZmZXIgPSBHTEZyYW1lYnVmZmVyLmNyZWF0ZVJHQkEoZ2wsIDEwMCwgMTAwKTtcbiAgICBpZih0aGlzLmZyYW1lQnVmZmVyKXRoaXMuZnJhbWVCdWZmZXIudW5iaW5kKCk7XG5cbiAgIC8vIHRoaXMuZnJhbWVCdWZmZXIgPSB7ZnJhbWVidWZmZXI6bnVsbCwgYmluZDpmdW5jdGlvbigpe30sIGNsZWFyOmZ1bmN0aW9uKCl7fSwgcmVzaXplOmZ1bmN0aW9uKCl7fX0vL25ldyBHTEZyYW1lYnVmZmVyLmNyZWF0ZVJHQkEoZ2wsIDEwMCwgMTAwKTtcblxuXG5cbiAgICBpZiAoIXRoaXMucm9vdClcbiAgICB7XG4gICAgICAgIC8qXG4gICAgICAgICAgICBBIGZyYW1lIGJ1ZmZlciBuZWVkcyBhIHRhcmdldCB0byByZW5kZXIgdG8uLlxuICAgICAgICAgICAgY3JlYXRlIGEgdGV4dHVyZSBhbmQgYmluZCBpdCBhdHRhY2ggaXQgdG8gdGhlIGZyYW1lYnVmZmVyLi5cbiAgICAgICAgICovXG4gICAgICAgIFxuICAgICAgICAvLyBjcmVhdGUgYSB0ZXh0dXJlIHRvIGJpbmQgYXR0YWNoIHRvIHRoZSBmcmFtZUJ1ZmZlci4uXG4gICAgICAgIHZhciB0ZXh0dXJlID0gbmV3IEdMVGV4dHVyZShnbCk7XG5cbiAgICAgICAgdGV4dHVyZS5lbmFibGVMaW5lYXJTY2FsaW5nKClcbiAgICAgICAgdGV4dHVyZS5lbmFibGVXcmFwQ2xhbXAoKVxuXG4gICAgICAgIHRoaXMuZnJhbWVCdWZmZXIuZW5hYmxlVGV4dHVyZSh0ZXh0dXJlKTtcblxuICAgICAgICAvLyBUT0RPIGNoYW5nZSFcbiAgICAgICAgLy8gdGhpcyBpcyB1c2VkIGJ5IHRoZSBiYXNlIHRleHR1cmVcbiAgICAgICAgdGhpcy50ZXh0dXJlID0gdGV4dHVyZS50ZXh0dXJlO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICAvLyBtYWtlIGl0IGEgbnVsbCBmcmFtZWJ1ZmZlci4uXG4gICAgICAgIHRoaXMuZnJhbWVCdWZmZXIuZnJhbWVidWZmZXIgPSBudWxsO1xuICAgIH1cblxuICAgIHRoaXMucmVzaXplKHdpZHRoLCBoZWlnaHQpO1xufTtcblxuUmVuZGVyVGFyZ2V0LnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFJlbmRlclRhcmdldDtcbm1vZHVsZS5leHBvcnRzID0gUmVuZGVyVGFyZ2V0O1xuXG4vKipcbiAqIENsZWFycyB0aGUgZmlsdGVyIHRleHR1cmUuXG4gKlxuICogQHBhcmFtIFtiaW5kPWZhbHNlXSB7Ym9vbGVhbn0gU2hvdWxkIHdlIGJpbmQgb3VyIGZyYW1lYnVmZmVyIGJlZm9yZSBjbGVhcmluZz9cbiAqL1xuUmVuZGVyVGFyZ2V0LnByb3RvdHlwZS5jbGVhciA9IGZ1bmN0aW9uKGNsZWFyQ29sb3IpXG57XG4gICAgdmFyIGNjID0gY2xlYXJDb2xvciB8fCB0aGlzLmNsZWFyQ29sb3JcbiAgICB0aGlzLmZyYW1lQnVmZmVyLmNsZWFyKGNjWzBdLGNjWzFdLGNjWzJdLGNjWzNdKS8vcixnLGIsYSk7XG59O1xuXG4vKipcbiAqIEJpbmRzIHRoZSBzdGVuY2lsIGJ1ZmZlci5cbiAqXG4gKi9cblJlbmRlclRhcmdldC5wcm90b3R5cGUuYXR0YWNoU3RlbmNpbEJ1ZmZlciA9IGZ1bmN0aW9uKClcbntcbiAgICAvL1RPRE8gY2hlY2sgaWYgc3RlbmNpbCBpcyBkb25lP1xuICAgIC8qKlxuICAgICAqIFRoZSBzdGVuY2lsIGJ1ZmZlciBpcyB1c2VkIGZvciBtYXNraW5nIGluIHBpeGlcbiAgICAgKiBsZXRzIGNyZWF0ZSBvbmUgYW5kIHRoZW4gYWRkIGF0dGFjaCBpdCB0byB0aGUgZnJhbWVidWZmZXIuLlxuICAgICAqL1xuICAgIGlmICghdGhpcy5yb290KVxuICAgIHtcbiAgICAgICAgdGhpcy5mcmFtZUJ1ZmZlci5lbmFibGVTdGVuY2lsKCk7XG4gICAgfVxufTtcblxuLyoqXG4gKiBCaW5kcyB0aGUgYnVmZmVycyBhbmQgaW5pdGlhbGlzZXMgdGhlIHZpZXdwb3J0LlxuICpcbiAqL1xuUmVuZGVyVGFyZ2V0LnByb3RvdHlwZS5hY3RpdmF0ZSA9IGZ1bmN0aW9uKClcbntcbiAgICAvL1RPT0QgcmVmYWN0b3IgdXNhZ2Ugb2YgZnJhbWUuLlxuICAgIHZhciBnbCA9IHRoaXMuZ2w7XG5cbiAgICB0aGlzLmZyYW1lQnVmZmVyLmJpbmQoKTtcblxuXG4gICAgdmFyIHByb2plY3Rpb25GcmFtZSA9IHRoaXMuZnJhbWUgfHwgdGhpcy5zaXplO1xuXG4gICAgLy8gVE9ETyBhZGQgYSBkaXJ0eSBmbGFnIHRvIHRoaXMgb2YgYSBzZXR0ZXIgZm9yIHRoZSBmcmFtZT9cbiAgICB0aGlzLmNhbGN1bGF0ZVByb2plY3Rpb24oIHByb2plY3Rpb25GcmFtZSApO1xuXG4gICAgaWYodGhpcy50cmFuc2Zvcm0pXG4gICAge1xuICAgICAgICB0aGlzLnByb2plY3Rpb25NYXRyaXguYXBwZW5kKHRoaXMudHJhbnNmb3JtKTtcbiAgICB9XG5cbiAgICBnbC52aWV3cG9ydCgwLDAsIHByb2plY3Rpb25GcmFtZS53aWR0aCAqIHRoaXMucmVzb2x1dGlvbiwgcHJvamVjdGlvbkZyYW1lLmhlaWdodCAqIHRoaXMucmVzb2x1dGlvbik7XG59O1xuXG4vKipcbiAqIFVwZGF0ZXMgdGhlIHByb2plY3Rpb24gbWF0cml4IGJhc2VkIG9uIGEgcHJvamVjdGlvbiBmcmFtZSAod2hpY2ggaXMgYSByZWN0YW5nbGUpXG4gKlxuICovXG5SZW5kZXJUYXJnZXQucHJvdG90eXBlLmNhbGN1bGF0ZVByb2plY3Rpb24gPSBmdW5jdGlvbiAocHJvamVjdGlvbkZyYW1lKVxue1xuICAgIHZhciBwbSA9IHRoaXMucHJvamVjdGlvbk1hdHJpeDtcblxuICAgIHBtLmlkZW50aXR5KCk7XG5cbiAgICBpZiAoIXRoaXMucm9vdClcbiAgICB7XG4gICAgICAgIHBtLmEgPSAxIC8gcHJvamVjdGlvbkZyYW1lLndpZHRoKjI7XG4gICAgICAgIHBtLmQgPSAxIC8gcHJvamVjdGlvbkZyYW1lLmhlaWdodCoyO1xuXG4gICAgICAgIHBtLnR4ID0gLTEgLSBwcm9qZWN0aW9uRnJhbWUueCAqIHBtLmE7XG4gICAgICAgIHBtLnR5ID0gLTEgLSBwcm9qZWN0aW9uRnJhbWUueSAqIHBtLmQ7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHBtLmEgPSAxIC8gcHJvamVjdGlvbkZyYW1lLndpZHRoKjI7XG4gICAgICAgIHBtLmQgPSAtMSAvIHByb2plY3Rpb25GcmFtZS5oZWlnaHQqMjtcblxuICAgICAgICBwbS50eCA9IC0xIC0gcHJvamVjdGlvbkZyYW1lLnggKiBwbS5hO1xuICAgICAgICBwbS50eSA9IDEgLSBwcm9qZWN0aW9uRnJhbWUueSAqIHBtLmQ7XG4gICAgfVxufTtcblxuLyoqXG4gKiBSZXNpemVzIHRoZSB0ZXh0dXJlIHRvIHRoZSBzcGVjaWZpZWQgd2lkdGggYW5kIGhlaWdodFxuICpcbiAqIEBwYXJhbSB3aWR0aCB7TnVtYmVyfSB0aGUgbmV3IHdpZHRoIG9mIHRoZSB0ZXh0dXJlXG4gKiBAcGFyYW0gaGVpZ2h0IHtOdW1iZXJ9IHRoZSBuZXcgaGVpZ2h0IG9mIHRoZSB0ZXh0dXJlXG4gKi9cblJlbmRlclRhcmdldC5wcm90b3R5cGUucmVzaXplID0gZnVuY3Rpb24gKHdpZHRoLCBoZWlnaHQpXG57XG4gICAgd2lkdGggPSB3aWR0aCB8IDA7XG4gICAgaGVpZ2h0ID0gaGVpZ2h0IHwgMDtcblxuICAgIGlmICh0aGlzLnNpemUud2lkdGggPT09IHdpZHRoICYmIHRoaXMuc2l6ZS5oZWlnaHQgPT09IGhlaWdodCkgXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5zaXplLndpZHRoID0gd2lkdGg7XG4gICAgdGhpcy5zaXplLmhlaWdodCA9IGhlaWdodDtcblxuICAgIHRoaXMuZnJhbWVCdWZmZXIucmVzaXplKHdpZHRoICogdGhpcy5yZXNvbHV0aW9uLCBoZWlnaHQgKiB0aGlzLnJlc29sdXRpb24pO1xuICAgIFxuICAgIHZhciBwcm9qZWN0aW9uRnJhbWUgPSB0aGlzLmZyYW1lIHx8IHRoaXMuc2l6ZTtcblxuICAgIHRoaXMuY2FsY3VsYXRlUHJvamVjdGlvbiggcHJvamVjdGlvbkZyYW1lICk7XG59O1xuXG4vKipcbiAqIERlc3Ryb3lzIHRoZSByZW5kZXIgdGFyZ2V0LlxuICpcbiAqL1xuUmVuZGVyVGFyZ2V0LnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKClcbntcbiAgICB2YXIgZ2wgPSB0aGlzLmdsO1xuICAgIFxuICAgIHRoaXMuZnJhbWVCdWZmZXIuZGVzdHJveSgpO1xuXG4gICAgdGhpcy5mcmFtZUJ1ZmZlciA9IG51bGw7XG4gICAgdGhpcy50ZXh0dXJlID0gbnVsbDtcbn07XG4iLCIvKipcbiAqIEdlbmVyaWMgTWFzayBTdGFjayBkYXRhIHN0cnVjdHVyZVxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICovXG5mdW5jdGlvbiBTdGVuY2lsTWFza1N0YWNrKClcbntcblx0LyoqXG4gICAgICogVGhlIGFjdHVhbCBzdGFja1xuICAgICAqXG4gICAgICogQG1lbWJlciB7YW55W119XG4gICAgICovXG4gICAgdGhpcy5zdGVuY2lsU3RhY2sgPSBbXTtcblxuICAgIC8qKlxuICAgICAqIFRPRE8gQGFsdmluXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqL1xuICAgIHRoaXMucmV2ZXJzZSA9IHRydWU7XG5cbiAgICAvKipcbiAgICAgKiBJbnRlcm5hbCBjb3VudFxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMuY291bnQgPSAwO1xufVxuXG5TdGVuY2lsTWFza1N0YWNrLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFN0ZW5jaWxNYXNrU3RhY2s7XG5tb2R1bGUuZXhwb3J0cyA9IFN0ZW5jaWxNYXNrU3RhY2s7XG4iLCJDT05TVCA9IHJlcXVpcmUoJy4uLy4uLy4uL2NvbnN0Jyk7XG5cbi8qKlxuICogTWFwcyBnbCBibGVuZCBjb21iaW5hdGlvbnMgdG8gV2ViR0xcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqL1xuZnVuY3Rpb24gbWFwV2ViR0xCbGVuZE1vZGVzVG9QaXhpKGdsLCBvYmplY3QpXG57XG4gICAgb2JqZWN0ID0gb2JqZWN0IHx8IHt9O1xuXG4gICAgLy9UT0RPIC0gcHJlbXVsdGlwbHkgYWxwaGEgd291bGQgYmUgZGlmZmVyZW50LlxuICAgIC8vYWRkIGEgYm9vbGVhbiBmb3IgdGhhdCFcbiAgICBvYmplY3RbQ09OU1QuQkxFTkRfTU9ERVMuTk9STUFMXSAgICAgICAgPSBbZ2wuT05FLCAgICAgICBnbC5PTkVfTUlOVVNfU1JDX0FMUEhBXTtcbiAgICBvYmplY3RbQ09OU1QuQkxFTkRfTU9ERVMuQUREXSAgICAgICAgICAgPSBbZ2wuU1JDX0FMUEhBLCBnbC5EU1RfQUxQSEFdO1xuICAgIG9iamVjdFtDT05TVC5CTEVORF9NT0RFUy5NVUxUSVBMWV0gICAgICA9IFtnbC5EU1RfQ09MT1IsIGdsLk9ORV9NSU5VU19TUkNfQUxQSEFdO1xuICAgIG9iamVjdFtDT05TVC5CTEVORF9NT0RFUy5TQ1JFRU5dICAgICAgICA9IFtnbC5TUkNfQUxQSEEsIGdsLk9ORV07XG4gICAgb2JqZWN0W0NPTlNULkJMRU5EX01PREVTLk9WRVJMQVldICAgICAgID0gW2dsLk9ORSwgICAgICAgZ2wuT05FX01JTlVTX1NSQ19BTFBIQV07XG4gICAgb2JqZWN0W0NPTlNULkJMRU5EX01PREVTLkRBUktFTl0gICAgICAgID0gW2dsLk9ORSwgICAgICAgZ2wuT05FX01JTlVTX1NSQ19BTFBIQV07XG4gICAgb2JqZWN0W0NPTlNULkJMRU5EX01PREVTLkxJR0hURU5dICAgICAgID0gW2dsLk9ORSwgICAgICAgZ2wuT05FX01JTlVTX1NSQ19BTFBIQV07XG4gICAgb2JqZWN0W0NPTlNULkJMRU5EX01PREVTLkNPTE9SX0RPREdFXSAgID0gW2dsLk9ORSwgICAgICAgZ2wuT05FX01JTlVTX1NSQ19BTFBIQV07XG4gICAgb2JqZWN0W0NPTlNULkJMRU5EX01PREVTLkNPTE9SX0JVUk5dICAgID0gW2dsLk9ORSwgICAgICAgZ2wuT05FX01JTlVTX1NSQ19BTFBIQV07XG4gICAgb2JqZWN0W0NPTlNULkJMRU5EX01PREVTLkhBUkRfTElHSFRdICAgID0gW2dsLk9ORSwgICAgICAgZ2wuT05FX01JTlVTX1NSQ19BTFBIQV07XG4gICAgb2JqZWN0W0NPTlNULkJMRU5EX01PREVTLlNPRlRfTElHSFRdICAgID0gW2dsLk9ORSwgICAgICAgZ2wuT05FX01JTlVTX1NSQ19BTFBIQV07XG4gICAgb2JqZWN0W0NPTlNULkJMRU5EX01PREVTLkRJRkZFUkVOQ0VdICAgID0gW2dsLk9ORSwgICAgICAgZ2wuT05FX01JTlVTX1NSQ19BTFBIQV07XG4gICAgb2JqZWN0W0NPTlNULkJMRU5EX01PREVTLkVYQ0xVU0lPTl0gICAgID0gW2dsLk9ORSwgICAgICAgZ2wuT05FX01JTlVTX1NSQ19BTFBIQV07XG4gICAgb2JqZWN0W0NPTlNULkJMRU5EX01PREVTLkhVRV0gICAgICAgICAgID0gW2dsLk9ORSwgICAgICAgZ2wuT05FX01JTlVTX1NSQ19BTFBIQV07XG4gICAgb2JqZWN0W0NPTlNULkJMRU5EX01PREVTLlNBVFVSQVRJT05dICAgID0gW2dsLk9ORSwgICAgICAgZ2wuT05FX01JTlVTX1NSQ19BTFBIQV07XG4gICAgb2JqZWN0W0NPTlNULkJMRU5EX01PREVTLkNPTE9SXSAgICAgICAgID0gW2dsLk9ORSwgICAgICAgZ2wuT05FX01JTlVTX1NSQ19BTFBIQV07XG4gICAgb2JqZWN0W0NPTlNULkJMRU5EX01PREVTLkxVTUlOT1NJVFldICAgID0gW2dsLk9ORSwgICAgICAgZ2wuT05FX01JTlVTX1NSQ19BTFBIQV07XG5cbiAgICByZXR1cm4gb2JqZWN0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IG1hcFdlYkdMQmxlbmRNb2Rlc1RvUGl4aTtcbiIsIkNPTlNUID0gcmVxdWlyZSgnLi4vLi4vLi4vY29uc3QnKTtcblxuLyoqXG4gKiBHZW5lcmljIE1hc2sgU3RhY2sgZGF0YSBzdHJ1Y3R1cmVcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqL1xuZnVuY3Rpb24gbWFwV2ViR0xEcmF3TW9kZXNUb1BpeGkoZ2wsIG9iamVjdClcbntcblx0b2JqZWN0PSBvYmplY3QgfHwge307XG5cbiAgICBvYmplY3RbQ09OU1QuRFJBV19NT0RFUy5QT0lOVFNdICAgICAgICAgPSBnbC5QT0lOVFM7XG4gICAgb2JqZWN0W0NPTlNULkRSQVdfTU9ERVMuTElORVNdICAgICAgICAgID0gZ2wuTElORVM7XG4gICAgb2JqZWN0W0NPTlNULkRSQVdfTU9ERVMuTElORV9MT09QXSAgICAgID0gZ2wuTElORV9MT09QO1xuICAgIG9iamVjdFtDT05TVC5EUkFXX01PREVTLkxJTkVfU1RSSVBdICAgICA9IGdsLkxJTkVfU1RSSVA7XG4gICAgb2JqZWN0W0NPTlNULkRSQVdfTU9ERVMuVFJJQU5HTEVTXSAgICAgID0gZ2wuVFJJQU5HTEVTO1xuICAgIG9iamVjdFtDT05TVC5EUkFXX01PREVTLlRSSUFOR0xFX1NUUklQXSA9IGdsLlRSSUFOR0xFX1NUUklQO1xuICAgIG9iamVjdFtDT05TVC5EUkFXX01PREVTLlRSSUFOR0xFX0ZBTl0gICA9IGdsLlRSSUFOR0xFX0ZBTjtcblxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IG1hcFdlYkdMRHJhd01vZGVzVG9QaXhpO1xuIiwidmFyIG1hdGggPSByZXF1aXJlKCcuLi9tYXRoJyksXG4gICAgVGV4dHVyZSA9IHJlcXVpcmUoJy4uL3RleHR1cmVzL1RleHR1cmUnKSxcbiAgICBDb250YWluZXIgPSByZXF1aXJlKCcuLi9kaXNwbGF5L0NvbnRhaW5lcicpLFxuICAgIENhbnZhc1RpbnRlciA9IHJlcXVpcmUoJy4uL3JlbmRlcmVycy9jYW52YXMvdXRpbHMvQ2FudmFzVGludGVyJyksXG4gICAgdXRpbHMgPSByZXF1aXJlKCcuLi91dGlscycpLFxuICAgIENPTlNUID0gcmVxdWlyZSgnLi4vY29uc3QnKSxcbiAgICB0ZW1wUG9pbnQgPSBuZXcgbWF0aC5Qb2ludCgpO1xuXG4vKipcbiAqIFRoZSBTcHJpdGUgb2JqZWN0IGlzIHRoZSBiYXNlIGZvciBhbGwgdGV4dHVyZWQgb2JqZWN0cyB0aGF0IGFyZSByZW5kZXJlZCB0byB0aGUgc2NyZWVuXG4gKlxuICogQSBzcHJpdGUgY2FuIGJlIGNyZWF0ZWQgZGlyZWN0bHkgZnJvbSBhbiBpbWFnZSBsaWtlIHRoaXM6XG4gKlxuICogYGBganNcbiAqIHZhciBzcHJpdGUgPSBuZXcgUElYSS5TcHJpdGUuZnJvbUltYWdlKCdhc3NldHMvaW1hZ2UucG5nJyk7XG4gKiBgYGBcbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQ29udGFpbmVyXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIHRleHR1cmUge1BJWEkuVGV4dHVyZX0gVGhlIHRleHR1cmUgZm9yIHRoaXMgc3ByaXRlXG4gKi9cbmZ1bmN0aW9uIFNwcml0ZSh0ZXh0dXJlKVxue1xuICAgIENvbnRhaW5lci5jYWxsKHRoaXMpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGFuY2hvciBzZXRzIHRoZSBvcmlnaW4gcG9pbnQgb2YgdGhlIHRleHR1cmUuXG4gICAgICogVGhlIGRlZmF1bHQgaXMgMCwwIHRoaXMgbWVhbnMgdGhlIHRleHR1cmUncyBvcmlnaW4gaXMgdGhlIHRvcCBsZWZ0XG4gICAgICogU2V0dGluZyB0aGUgYW5jaG9yIHRvIDAuNSwwLjUgbWVhbnMgdGhlIHRleHR1cmUncyBvcmlnaW4gaXMgY2VudGVyZWRcbiAgICAgKiBTZXR0aW5nIHRoZSBhbmNob3IgdG8gMSwxIHdvdWxkIG1lYW4gdGhlIHRleHR1cmUncyBvcmlnaW4gcG9pbnQgd2lsbCBiZSB0aGUgYm90dG9tIHJpZ2h0IGNvcm5lclxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5Qb2ludH1cbiAgICAgKi9cbiAgICB0aGlzLmFuY2hvciA9IG5ldyBtYXRoLlBvaW50KCk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgdGV4dHVyZSB0aGF0IHRoZSBzcHJpdGUgaXMgdXNpbmdcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuVGV4dHVyZX1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX3RleHR1cmUgPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHdpZHRoIG9mIHRoZSBzcHJpdGUgKHRoaXMgaXMgaW5pdGlhbGx5IHNldCBieSB0aGUgdGV4dHVyZSlcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX3dpZHRoID0gMDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBoZWlnaHQgb2YgdGhlIHNwcml0ZSAodGhpcyBpcyBpbml0aWFsbHkgc2V0IGJ5IHRoZSB0ZXh0dXJlKVxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5faGVpZ2h0ID0gMDtcblxuICAgIC8qKlxuICAgICAqIFRoZSB0aW50IGFwcGxpZWQgdG8gdGhlIHNwcml0ZS4gVGhpcyBpcyBhIGhleCB2YWx1ZS4gQSB2YWx1ZSBvZiAweEZGRkZGRiB3aWxsIHJlbW92ZSBhbnkgdGludCBlZmZlY3QuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMHhGRkZGRkZcbiAgICAgKi9cbiAgICB0aGlzLnRpbnQgPSAweEZGRkZGRjtcblxuICAgIC8qKlxuICAgICAqIFRoZSBibGVuZCBtb2RlIHRvIGJlIGFwcGxpZWQgdG8gdGhlIHNwcml0ZS4gQXBwbHkgYSB2YWx1ZSBvZiBgUElYSS5CTEVORF9NT0RFUy5OT1JNQUxgIHRvIHJlc2V0IHRoZSBibGVuZCBtb2RlLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IFBJWEkuQkxFTkRfTU9ERVMuTk9STUFMXG4gICAgICogQHNlZSBQSVhJLkJMRU5EX01PREVTXG4gICAgICovXG4gICAgdGhpcy5ibGVuZE1vZGUgPSBDT05TVC5CTEVORF9NT0RFUy5OT1JNQUw7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgc2hhZGVyIHRoYXQgd2lsbCBiZSB1c2VkIHRvIHJlbmRlciB0aGUgc3ByaXRlLiBTZXQgdG8gbnVsbCB0byByZW1vdmUgYSBjdXJyZW50IHNoYWRlci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuQWJzdHJhY3RGaWx0ZXJ8UElYSS5TaGFkZXJ9XG4gICAgICovXG4gICAgdGhpcy5zaGFkZXIgPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogQW4gaW50ZXJuYWwgY2FjaGVkIHZhbHVlIG9mIHRoZSB0aW50LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDB4RkZGRkZGXG4gICAgICovXG4gICAgdGhpcy5jYWNoZWRUaW50ID0gMHhGRkZGRkY7XG5cbiAgICAvLyBjYWxsIHRleHR1cmUgc2V0dGVyXG4gICAgdGhpcy50ZXh0dXJlID0gdGV4dHVyZSB8fCBUZXh0dXJlLkVNUFRZO1xuICAgIHRoaXMudGV4dHVyZURpcnR5ID0gdHJ1ZVxuICAgIHRoaXMudmVydGV4RGlydHkgPSB0cnVlO1xuICAgIHRoaXMudmVydGV4RGF0YSA9IG5ldyBGbG9hdDMyQXJyYXkoOCk7XG59XG5cbi8vIGNvbnN0cnVjdG9yXG5TcHJpdGUucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShDb250YWluZXIucHJvdG90eXBlKTtcblNwcml0ZS5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBTcHJpdGU7XG5tb2R1bGUuZXhwb3J0cyA9IFNwcml0ZTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoU3ByaXRlLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFRoZSB3aWR0aCBvZiB0aGUgc3ByaXRlLCBzZXR0aW5nIHRoaXMgd2lsbCBhY3R1YWxseSBtb2RpZnkgdGhlIHNjYWxlIHRvIGFjaGlldmUgdGhlIHZhbHVlIHNldFxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLlNwcml0ZSNcbiAgICAgKi9cbiAgICB3aWR0aDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiBNYXRoLmFicyh0aGlzLnNjYWxlLngpICogdGhpcy50ZXh0dXJlLl9mcmFtZS53aWR0aDtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHZhciBzaWduID0gdXRpbHMuc2lnbih0aGlzLnNjYWxlLngpIHx8IDE7XG4gICAgICAgICAgICB0aGlzLnNjYWxlLnggPSBzaWduICogdmFsdWUgLyB0aGlzLnRleHR1cmUuX2ZyYW1lLndpZHRoO1xuICAgICAgICAgICAgdGhpcy5fd2lkdGggPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBUaGUgaGVpZ2h0IG9mIHRoZSBzcHJpdGUsIHNldHRpbmcgdGhpcyB3aWxsIGFjdHVhbGx5IG1vZGlmeSB0aGUgc2NhbGUgdG8gYWNoaWV2ZSB0aGUgdmFsdWUgc2V0XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuU3ByaXRlI1xuICAgICAqL1xuICAgIGhlaWdodDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiAgTWF0aC5hYnModGhpcy5zY2FsZS55KSAqIHRoaXMudGV4dHVyZS5fZnJhbWUuaGVpZ2h0O1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdmFyIHNpZ24gPSB1dGlscy5zaWduKHRoaXMuc2NhbGUueSkgfHwgMTtcbiAgICAgICAgICAgIHRoaXMuc2NhbGUueSA9IHNpZ24gKiB2YWx1ZSAvIHRoaXMudGV4dHVyZS5fZnJhbWUuaGVpZ2h0O1xuICAgICAgICAgICAgdGhpcy5faGVpZ2h0ID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVGhlIHRleHR1cmUgdGhhdCB0aGUgc3ByaXRlIGlzIHVzaW5nXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlRleHR1cmV9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuU3ByaXRlI1xuICAgICAqL1xuICAgIHRleHR1cmU6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gIHRoaXMuX3RleHR1cmU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICBpZiAodGhpcy5fdGV4dHVyZSA9PT0gdmFsdWUpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLl90ZXh0dXJlID0gdmFsdWU7XG4gICAgICAgICAgICB0aGlzLmNhY2hlZFRpbnQgPSAweEZGRkZGRjtcblxuICAgICAgICAgICAgdGhpcy50ZXh0dXJlRGlydHkgPSB0cnVlO1xuXG4gICAgICAgICAgICBpZiAodmFsdWUpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgLy8gd2FpdCBmb3IgdGhlIHRleHR1cmUgdG8gbG9hZFxuICAgICAgICAgICAgICAgIGlmICh2YWx1ZS5iYXNlVGV4dHVyZS5oYXNMb2FkZWQpXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9vblRleHR1cmVVcGRhdGUoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgdmFsdWUub25jZSgndXBkYXRlJywgdGhpcy5fb25UZXh0dXJlVXBkYXRlLCB0aGlzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG59KTtcblxuLyoqXG4gKiBXaGVuIHRoZSB0ZXh0dXJlIGlzIHVwZGF0ZWQsIHRoaXMgZXZlbnQgd2lsbCBmaXJlIHRvIHVwZGF0ZSB0aGUgc2NhbGUgYW5kIGZyYW1lXG4gKlxuICogQHByaXZhdGVcbiAqL1xuU3ByaXRlLnByb3RvdHlwZS5fb25UZXh0dXJlVXBkYXRlID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLnRleHR1cmVEaXJ0eSA9IHRydWU7XG5cbiAgICAvLyBzbyBpZiBfd2lkdGggaXMgMCB0aGVuIHdpZHRoIHdhcyBub3Qgc2V0Li5cbiAgICBpZiAodGhpcy5fd2lkdGgpXG4gICAge1xuICAgICAgICB0aGlzLnNjYWxlLnggPSB1dGlscy5zaWduKHRoaXMuc2NhbGUueCkgKiB0aGlzLl93aWR0aCAvIHRoaXMudGV4dHVyZS5mcmFtZS53aWR0aDtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5faGVpZ2h0KVxuICAgIHtcbiAgICAgICAgdGhpcy5zY2FsZS55ID0gdXRpbHMuc2lnbih0aGlzLnNjYWxlLnkpICogdGhpcy5faGVpZ2h0IC8gdGhpcy50ZXh0dXJlLmZyYW1lLmhlaWdodDtcbiAgICB9XG59O1xuXG5TcHJpdGUucHJvdG90eXBlLmNhY2x1bGF0ZVZlcnRpY2VzID0gZnVuY3Rpb24gKClcbntcblxuICAgIHZhciB0ZXh0dXJlID0gdGhpcy5fdGV4dHVyZSxcbiAgICAgICAgd3QgPSB0aGlzLndvcmxkVHJhbnNmb3JtLFxuICAgICAgICBhID0gd3QuYSwgYiA9IHd0LmIsIGMgPSB3dC5jLCBkID0gd3QuZCwgdHggPSB3dC50eCwgdHkgPSB3dC50eSxcbiAgICAgICAgdmVydGV4RGF0YSA9IHRoaXMudmVydGV4RGF0YSxcbiAgICAgICAgdzAsIHcxLCBoMCwgaDEsXG4gICAgICAgIHRyaW0gPSB0ZXh0dXJlLnRyaW07XG4gICAgXG4gICAgaWYgKHRyaW0pXG4gICAge1xuICAgICAgICAvLyBpZiB0aGUgc3ByaXRlIGlzIHRyaW1tZWQgYW5kIGlzIG5vdCBhIHRpbGluZ3Nwcml0ZSB0aGVuIHdlIG5lZWQgdG8gYWRkIHRoZSBleHRyYSBzcGFjZSBiZWZvcmUgdHJhbnNmb3JtaW5nIHRoZSBzcHJpdGUgY29vcmRzLi5cbiAgICAgICAgdzEgPSB0cmltLnggLSB0aGlzLmFuY2hvci54ICogdHJpbS53aWR0aDtcbiAgICAgICAgdzAgPSB3MSArIHRleHR1cmUuY3JvcC53aWR0aDtcblxuICAgICAgICBoMSA9IHRyaW0ueSAtIHRoaXMuYW5jaG9yLnkgKiB0cmltLmhlaWdodDtcbiAgICAgICAgaDAgPSBoMSArIHRleHR1cmUuY3JvcC5oZWlnaHQ7XG5cbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgdzAgPSAodGV4dHVyZS5fZnJhbWUud2lkdGggKSAqICgxLXRoaXMuYW5jaG9yLngpO1xuICAgICAgICB3MSA9ICh0ZXh0dXJlLl9mcmFtZS53aWR0aCApICogLXRoaXMuYW5jaG9yLng7XG5cbiAgICAgICAgaDAgPSB0ZXh0dXJlLl9mcmFtZS5oZWlnaHQgKiAoMS10aGlzLmFuY2hvci55KTtcbiAgICAgICAgaDEgPSB0ZXh0dXJlLl9mcmFtZS5oZWlnaHQgKiAtdGhpcy5hbmNob3IueTtcbiAgICB9XG5cbiAgICAvLyB4eVxuICAgIHZlcnRleERhdGFbMF0gPSBhICogdzEgKyBjICogaDEgKyB0eDtcbiAgICB2ZXJ0ZXhEYXRhWzFdID0gZCAqIGgxICsgYiAqIHcxICsgdHk7XG5cbiAgICAvLyB4eVxuICAgIHZlcnRleERhdGFbMl0gPSBhICogdzAgKyBjICogaDEgKyB0eDtcbiAgICB2ZXJ0ZXhEYXRhWzNdID0gZCAqIGgxICsgYiAqIHcwICsgdHk7XG5cbiAgICAgLy8geHlcbiAgICB2ZXJ0ZXhEYXRhWzRdID0gYSAqIHcwICsgYyAqIGgwICsgdHg7XG4gICAgdmVydGV4RGF0YVs1XSA9IGQgKiBoMCArIGIgKiB3MCArIHR5O1xuXG4gICAgLy8geHlcbiAgICB2ZXJ0ZXhEYXRhWzZdID0gYSAqIHcxICsgYyAqIGgwICsgdHg7XG4gICAgdmVydGV4RGF0YVs3XSA9IGQgKiBoMCArIGIgKiB3MSArIHR5O1xuXG5cbn1cblxuLyoqXG4qXG4qIFJlbmRlcnMgdGhlIG9iamVjdCB1c2luZyB0aGUgV2ViR0wgcmVuZGVyZXJcbipcbiogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLldlYkdMUmVuZGVyZXJ9XG4qIEBwcml2YXRlXG4qL1xuU3ByaXRlLnByb3RvdHlwZS5fcmVuZGVyV2ViR0wgPSBmdW5jdGlvbiAocmVuZGVyZXIpXG57XG4gICAgaWYodGhpcy50ZXh0dXJlRGlydHkpXG4gICAge1xuICAgICAgICB0aGlzLnRleHR1cmVEaXJ0eSA9IGZhbHNlO1xuXG4gICAgICAgIHRoaXMuX29uVGV4dHVyZVVwZGF0ZSgpO1xuICAgICAgICBcbiAgICAgICAgdGhpcy52ZXJ0ZXhEaXJ0eSA9IHRydWU7XG4gICAgfVxuXG4gICAgaWYodGhpcy52ZXJ0ZXhEaXJ0eSlcbiAgICB7XG4gICAgICAgIHRoaXMudmVydGV4RGlydHkgPSBmYWxzZTtcblxuICAgICAgICAvLyBzZXQgdGhlIHZlcnRleCBkYXRhXG4gICAgICAgIHRoaXMuY2FjbHVsYXRlVmVydGljZXMoKTtcblxuICAgIH1cbiAgICBcbiAgICByZW5kZXJlci5zZXRPYmplY3RSZW5kZXJlcihyZW5kZXJlci5wbHVnaW5zLnNwcml0ZSk7XG4gICAgcmVuZGVyZXIucGx1Z2lucy5zcHJpdGUucmVuZGVyKHRoaXMpO1xufTtcblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBib3VuZHMgb2YgdGhlIFNwcml0ZSBhcyBhIHJlY3RhbmdsZS4gVGhlIGJvdW5kcyBjYWxjdWxhdGlvbiB0YWtlcyB0aGUgd29ybGRUcmFuc2Zvcm0gaW50byBhY2NvdW50LlxuICpcbiAqIEBwYXJhbSBtYXRyaXgge1BJWEkuTWF0cml4fSB0aGUgdHJhbnNmb3JtYXRpb24gbWF0cml4IG9mIHRoZSBzcHJpdGVcbiAqIEByZXR1cm4ge1BJWEkuUmVjdGFuZ2xlfSB0aGUgZnJhbWluZyByZWN0YW5nbGVcbiAqL1xuU3ByaXRlLnByb3RvdHlwZS5nZXRCb3VuZHMgPSBmdW5jdGlvbiAobWF0cml4KVxue1xuICAgIGlmKCF0aGlzLl9jdXJyZW50Qm91bmRzKVxuICAgIHtcbiAgICAgICAgaWYodGhpcy52ZXJ0ZXhEaXJ0eSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy52ZXJ0ZXhEaXJ0eSA9IGZhbHNlO1xuXG4gICAgICAgICAgICAvLyBzZXQgdGhlIHZlcnRleCBkYXRhXG4gICAgICAgICAgICB0aGlzLmNhY2x1bGF0ZVZlcnRpY2VzKCk7XG5cbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBtaW5YLFxuICAgICAgICAgICAgbWF4WCxcbiAgICAgICAgICAgIG1pblksXG4gICAgICAgICAgICBtYXhZLFxuICAgICAgICAgICAgdmVydGV4RGF0YSA9IHRoaXMudmVydGV4RGF0YTtcblxuICAgICAgICB2YXIgeDEgPSB2ZXJ0ZXhEYXRhWzBdXG4gICAgICAgIHZhciB5MSA9IHZlcnRleERhdGFbMV1cblxuICAgICAgICB2YXIgeDIgPSB2ZXJ0ZXhEYXRhWzJdXG4gICAgICAgIHZhciB5MiA9IHZlcnRleERhdGFbM11cblxuICAgICAgICB2YXIgeDMgPSB2ZXJ0ZXhEYXRhWzRdXG4gICAgICAgIHZhciB5MyA9IHZlcnRleERhdGFbNV1cblxuICAgICAgICB2YXIgeDQgPSB2ZXJ0ZXhEYXRhWzZdXG4gICAgICAgIHZhciB5NCA9IHZlcnRleERhdGFbN11cblxuICAgICAgICBtaW5YID0geDE7XG4gICAgICAgIG1pblggPSB4MiA8IG1pblggPyB4MiA6IG1pblg7XG4gICAgICAgIG1pblggPSB4MyA8IG1pblggPyB4MyA6IG1pblg7XG4gICAgICAgIG1pblggPSB4NCA8IG1pblggPyB4NCA6IG1pblg7XG5cbiAgICAgICAgbWluWSA9IHkxO1xuICAgICAgICBtaW5ZID0geTIgPCBtaW5ZID8geTIgOiBtaW5ZO1xuICAgICAgICBtaW5ZID0geTMgPCBtaW5ZID8geTMgOiBtaW5ZO1xuICAgICAgICBtaW5ZID0geTQgPCBtaW5ZID8geTQgOiBtaW5ZO1xuXG4gICAgICAgIG1heFggPSB4MTtcbiAgICAgICAgbWF4WCA9IHgyID4gbWF4WCA/IHgyIDogbWF4WDtcbiAgICAgICAgbWF4WCA9IHgzID4gbWF4WCA/IHgzIDogbWF4WDtcbiAgICAgICAgbWF4WCA9IHg0ID4gbWF4WCA/IHg0IDogbWF4WDtcblxuICAgICAgICBtYXhZID0geTE7XG4gICAgICAgIG1heFkgPSB5MiA+IG1heFkgPyB5MiA6IG1heFk7XG4gICAgICAgIG1heFkgPSB5MyA+IG1heFkgPyB5MyA6IG1heFk7XG4gICAgICAgIG1heFkgPSB5NCA+IG1heFkgPyB5NCA6IG1heFk7XG5cbiAgICAgICAgLy8gY2hlY2sgZm9yIGNoaWxkcmVuXG4gICAgICAgIGlmKHRoaXMuY2hpbGRyZW4ubGVuZ3RoKVxuICAgICAgICB7XG4gICAgICAgICAgICB2YXIgY2hpbGRCb3VuZHMgPSB0aGlzLmNvbnRhaW5lckdldEJvdW5kcygpO1xuXG4gICAgICAgICAgICB3MCA9IGNoaWxkQm91bmRzLng7XG4gICAgICAgICAgICB3MSA9IGNoaWxkQm91bmRzLnggKyBjaGlsZEJvdW5kcy53aWR0aDtcbiAgICAgICAgICAgIGgwID0gY2hpbGRCb3VuZHMueTtcbiAgICAgICAgICAgIGgxID0gY2hpbGRCb3VuZHMueSArIGNoaWxkQm91bmRzLmhlaWdodDtcblxuICAgICAgICAgICAgbWluWCA9IChtaW5YIDwgdzApID8gbWluWCA6IHcwO1xuICAgICAgICAgICAgbWluWSA9IChtaW5ZIDwgaDApID8gbWluWSA6IGgwO1xuXG4gICAgICAgICAgICBtYXhYID0gKG1heFggPiB3MSkgPyBtYXhYIDogdzE7XG4gICAgICAgICAgICBtYXhZID0gKG1heFkgPiBoMSkgPyBtYXhZIDogaDE7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgYm91bmRzID0gdGhpcy5fYm91bmRzO1xuXG4gICAgICAgIGJvdW5kcy54ID0gbWluWDtcbiAgICAgICAgYm91bmRzLndpZHRoID0gbWF4WCAtIG1pblg7XG5cbiAgICAgICAgYm91bmRzLnkgPSBtaW5ZO1xuICAgICAgICBib3VuZHMuaGVpZ2h0ID0gbWF4WSAtIG1pblk7XG5cbiAgICAgICAgLy8gc3RvcmUgYSByZWZlcmVuY2Ugc28gdGhhdCBpZiB0aGlzIGZ1bmN0aW9uIGdldHMgY2FsbGVkIGFnYWluIGluIHRoZSByZW5kZXIgY3ljbGUgd2UgZG8gbm90IGhhdmUgdG8gcmVjYWxjdWxhdGVcbiAgICAgICAgdGhpcy5fY3VycmVudEJvdW5kcyA9IGJvdW5kcztcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5fY3VycmVudEJvdW5kcztcbn07XG5cbi8qKlxuICogR2V0cyB0aGUgbG9jYWwgYm91bmRzIG9mIHRoZSBzcHJpdGUgb2JqZWN0LlxuICpcbiAqL1xuU3ByaXRlLnByb3RvdHlwZS5nZXRMb2NhbEJvdW5kcyA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy5fYm91bmRzLnggPSAtdGhpcy5fdGV4dHVyZS5fZnJhbWUud2lkdGggKiB0aGlzLmFuY2hvci54O1xuICAgIHRoaXMuX2JvdW5kcy55ID0gLXRoaXMuX3RleHR1cmUuX2ZyYW1lLmhlaWdodCAqIHRoaXMuYW5jaG9yLnk7XG4gICAgdGhpcy5fYm91bmRzLndpZHRoID0gdGhpcy5fdGV4dHVyZS5fZnJhbWUud2lkdGg7XG4gICAgdGhpcy5fYm91bmRzLmhlaWdodCA9IHRoaXMuX3RleHR1cmUuX2ZyYW1lLmhlaWdodDtcbiAgICByZXR1cm4gdGhpcy5fYm91bmRzO1xufTtcblxuLyoqXG4qIFRlc3RzIGlmIGEgcG9pbnQgaXMgaW5zaWRlIHRoaXMgc3ByaXRlXG4qXG4qIEBwYXJhbSBwb2ludCB7UElYSS5Qb2ludH0gdGhlIHBvaW50IHRvIHRlc3RcbiogQHJldHVybiB7Ym9vbGVhbn0gdGhlIHJlc3VsdCBvZiB0aGUgdGVzdFxuKi9cblNwcml0ZS5wcm90b3R5cGUuY29udGFpbnNQb2ludCA9IGZ1bmN0aW9uKCBwb2ludCApXG57XG4gICAgdGhpcy53b3JsZFRyYW5zZm9ybS5hcHBseUludmVyc2UocG9pbnQsICB0ZW1wUG9pbnQpO1xuXG4gICAgdmFyIHdpZHRoID0gdGhpcy5fdGV4dHVyZS5fZnJhbWUud2lkdGg7XG4gICAgdmFyIGhlaWdodCA9IHRoaXMuX3RleHR1cmUuX2ZyYW1lLmhlaWdodDtcbiAgICB2YXIgeDEgPSAtd2lkdGggKiB0aGlzLmFuY2hvci54O1xuICAgIHZhciB5MTtcblxuICAgIGlmICggdGVtcFBvaW50LnggPiB4MSAmJiB0ZW1wUG9pbnQueCA8IHgxICsgd2lkdGggKVxuICAgIHtcbiAgICAgICAgeTEgPSAtaGVpZ2h0ICogdGhpcy5hbmNob3IueTtcblxuICAgICAgICBpZiAoIHRlbXBQb2ludC55ID4geTEgJiYgdGVtcFBvaW50LnkgPCB5MSArIGhlaWdodCApXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xufTtcblxuLyoqXG4qIFJlbmRlcnMgdGhlIG9iamVjdCB1c2luZyB0aGUgQ2FudmFzIHJlbmRlcmVyXG4qXG4qIEBwYXJhbSByZW5kZXJlciB7UElYSS5DYW52YXNSZW5kZXJlcn0gVGhlIHJlbmRlcmVyXG4qIEBwcml2YXRlXG4qL1xuU3ByaXRlLnByb3RvdHlwZS5fcmVuZGVyQ2FudmFzID0gZnVuY3Rpb24gKHJlbmRlcmVyKVxue1xuICAgIGlmICh0aGlzLnRleHR1cmUuY3JvcC53aWR0aCA8PSAwIHx8IHRoaXMudGV4dHVyZS5jcm9wLmhlaWdodCA8PSAwKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHZhciBjb21wb3NpdGVPcGVyYXRpb24gPSByZW5kZXJlci5ibGVuZE1vZGVzW3RoaXMuYmxlbmRNb2RlXTtcbiAgICBpZiAoY29tcG9zaXRlT3BlcmF0aW9uICE9PSByZW5kZXJlci5jb250ZXh0Lmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbilcbiAgICB7XG4gICAgICAgIHJlbmRlcmVyLmNvbnRleHQuZ2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uID0gY29tcG9zaXRlT3BlcmF0aW9uO1xuICAgIH1cblxuICAgIC8vICBJZ25vcmUgbnVsbCBzb3VyY2VzXG4gICAgaWYgKHRoaXMudGV4dHVyZS52YWxpZClcbiAgICB7XG4gICAgICAgIHZhciB0ZXh0dXJlID0gdGhpcy5fdGV4dHVyZSxcbiAgICAgICAgICAgIHd0ID0gdGhpcy53b3JsZFRyYW5zZm9ybSxcbiAgICAgICAgICAgIGR4LFxuICAgICAgICAgICAgZHksXG4gICAgICAgICAgICB3aWR0aCxcbiAgICAgICAgICAgIGhlaWdodDtcblxuICAgICAgICByZW5kZXJlci5jb250ZXh0Lmdsb2JhbEFscGhhID0gdGhpcy53b3JsZEFscGhhO1xuXG4gICAgICAgIC8vIElmIHNtb290aGluZ0VuYWJsZWQgaXMgc3VwcG9ydGVkIGFuZCB3ZSBuZWVkIHRvIGNoYW5nZSB0aGUgc21vb3RoaW5nIHByb3BlcnR5IGZvciB0aGlzIHRleHR1cmVcbiAgICAgICAgdmFyIHNtb290aGluZ0VuYWJsZWQgPSB0ZXh0dXJlLmJhc2VUZXh0dXJlLnNjYWxlTW9kZSA9PT0gQ09OU1QuU0NBTEVfTU9ERVMuTElORUFSO1xuICAgICAgICBpZiAocmVuZGVyZXIuc21vb3RoUHJvcGVydHkgJiYgcmVuZGVyZXIuY29udGV4dFtyZW5kZXJlci5zbW9vdGhQcm9wZXJ0eV0gIT09IHNtb290aGluZ0VuYWJsZWQpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJlbmRlcmVyLmNvbnRleHRbcmVuZGVyZXIuc21vb3RoUHJvcGVydHldID0gc21vb3RoaW5nRW5hYmxlZDtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIElmIHRoZSB0ZXh0dXJlIGlzIHRyaW1tZWQgd2Ugb2Zmc2V0IGJ5IHRoZSB0cmltIHgveSwgb3RoZXJ3aXNlIHdlIHVzZSB0aGUgZnJhbWUgZGltZW5zaW9uc1xuXG4gICAgICAgIGlmKHRleHR1cmUucm90YXRlKVxuICAgICAgICB7XG4gICAgICAgICAgICB3aWR0aCA9IHRleHR1cmUuY3JvcC5oZWlnaHQ7XG4gICAgICAgICAgICBoZWlnaHQgPSB0ZXh0dXJlLmNyb3Aud2lkdGg7XG5cbiAgICAgICAgICAgIGR4ID0gKHRleHR1cmUudHJpbSkgPyB0ZXh0dXJlLnRyaW0ueSAtIHRoaXMuYW5jaG9yLnkgKiB0ZXh0dXJlLnRyaW0uaGVpZ2h0IDogdGhpcy5hbmNob3IueSAqIC10ZXh0dXJlLl9mcmFtZS5oZWlnaHQ7XG4gICAgICAgICAgICBkeSA9ICh0ZXh0dXJlLnRyaW0pID8gdGV4dHVyZS50cmltLnggLSB0aGlzLmFuY2hvci54ICogdGV4dHVyZS50cmltLndpZHRoIDogdGhpcy5hbmNob3IueCAqIC10ZXh0dXJlLl9mcmFtZS53aWR0aDtcbiAgICAgICBcbiAgICAgICAgICAgIGR4ICs9IHdpZHRoO1xuXG4gICAgICAgICAgICB3dC50eCA9IGR5ICogd3QuYSArIGR4ICogd3QuYyArIHd0LnR4O1xuICAgICAgICAgICAgd3QudHkgPSBkeSAqIHd0LmIgKyBkeCAqIHd0LmQgKyB3dC50eTtcblxuICAgICAgICAgICAgdmFyIHRlbXAgPSB3dC5hO1xuICAgICAgICAgICAgd3QuYSAgPSAtd3QuYztcbiAgICAgICAgICAgIHd0LmMgID0gIHRlbXA7XG5cbiAgICAgICAgICAgIHRlbXAgPSB3dC5iO1xuICAgICAgICAgICAgd3QuYiAgPSAtd3QuZDtcbiAgICAgICAgICAgIHd0LmQgID0gIHRlbXA7XG5cbiAgICAgICAgICAgIC8vIHRoZSBhbmNob3IgaGFzIGFscmVhZHkgYmVlbiBhcHBsaWVkIGFib3ZlLCBzbyBsZXRzIHNldCBpdCB0byB6ZXJvXG4gICAgICAgICAgICBkeCA9IDA7XG4gICAgICAgICAgICBkeSA9IDA7XG5cbiAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgIHtcbiAgICAgICAgICAgIHdpZHRoID0gdGV4dHVyZS5jcm9wLndpZHRoO1xuICAgICAgICAgICAgaGVpZ2h0ID0gdGV4dHVyZS5jcm9wLmhlaWdodDtcblxuICAgICAgICAgICAgZHggPSAodGV4dHVyZS50cmltKSA/IHRleHR1cmUudHJpbS54IC0gdGhpcy5hbmNob3IueCAqIHRleHR1cmUudHJpbS53aWR0aCA6IHRoaXMuYW5jaG9yLnggKiAtdGV4dHVyZS5fZnJhbWUud2lkdGg7XG4gICAgICAgICAgICBkeSA9ICh0ZXh0dXJlLnRyaW0pID8gdGV4dHVyZS50cmltLnkgLSB0aGlzLmFuY2hvci55ICogdGV4dHVyZS50cmltLmhlaWdodCA6IHRoaXMuYW5jaG9yLnkgKiAtdGV4dHVyZS5fZnJhbWUuaGVpZ2h0O1xuICAgICAgICB9XG5cblxuXG4gICAgICAgIC8vIEFsbG93IGZvciBwaXhlbCByb3VuZGluZ1xuICAgICAgICBpZiAocmVuZGVyZXIucm91bmRQaXhlbHMpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJlbmRlcmVyLmNvbnRleHQuc2V0VHJhbnNmb3JtKFxuICAgICAgICAgICAgICAgIHd0LmEsXG4gICAgICAgICAgICAgICAgd3QuYixcbiAgICAgICAgICAgICAgICB3dC5jLFxuICAgICAgICAgICAgICAgIHd0LmQsXG4gICAgICAgICAgICAgICAgKHd0LnR4ICogcmVuZGVyZXIucmVzb2x1dGlvbikgfCAwLFxuICAgICAgICAgICAgICAgICh3dC50eSAqIHJlbmRlcmVyLnJlc29sdXRpb24pIHwgMFxuICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgZHggPSBkeCB8IDA7XG4gICAgICAgICAgICBkeSA9IGR5IHwgMDtcbiAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgIHtcblxuICAgICAgICAgICAgcmVuZGVyZXIuY29udGV4dC5zZXRUcmFuc2Zvcm0oXG4gICAgICAgICAgICAgICAgd3QuYSxcbiAgICAgICAgICAgICAgICB3dC5iLFxuICAgICAgICAgICAgICAgIHd0LmMsXG4gICAgICAgICAgICAgICAgd3QuZCxcbiAgICAgICAgICAgICAgICB3dC50eCAqIHJlbmRlcmVyLnJlc29sdXRpb24sXG4gICAgICAgICAgICAgICAgd3QudHkgKiByZW5kZXJlci5yZXNvbHV0aW9uXG4gICAgICAgICAgICApO1xuXG5cbiAgICAgICAgfVxuXG4gICAgICAgIHZhciByZXNvbHV0aW9uID0gdGV4dHVyZS5iYXNlVGV4dHVyZS5yZXNvbHV0aW9uO1xuXG4gICAgICAgIGlmICh0aGlzLnRpbnQgIT09IDB4RkZGRkZGKVxuICAgICAgICB7XG4gICAgICAgICAgICBpZiAodGhpcy5jYWNoZWRUaW50ICE9PSB0aGlzLnRpbnQpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdGhpcy5jYWNoZWRUaW50ID0gdGhpcy50aW50O1xuXG4gICAgICAgICAgICAgICAgLy8gVE9ETyBjbGVhbiB1cCBjYWNoaW5nIC0gaG93IHRvIGNsZWFuIHVwIHRoZSBjYWNoZXM/XG4gICAgICAgICAgICAgICAgdGhpcy50aW50ZWRUZXh0dXJlID0gQ2FudmFzVGludGVyLmdldFRpbnRlZFRleHR1cmUodGhpcywgdGhpcy50aW50KTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmVuZGVyZXIuY29udGV4dC5kcmF3SW1hZ2UoXG4gICAgICAgICAgICAgICAgdGhpcy50aW50ZWRUZXh0dXJlLFxuICAgICAgICAgICAgICAgIDAsXG4gICAgICAgICAgICAgICAgMCxcbiAgICAgICAgICAgICAgICB3aWR0aCAqIHJlc29sdXRpb24sXG4gICAgICAgICAgICAgICAgaGVpZ2h0ICogcmVzb2x1dGlvbixcbiAgICAgICAgICAgICAgICBkeCAqIHJlbmRlcmVyLnJlc29sdXRpb24sXG4gICAgICAgICAgICAgICAgZHkgKiByZW5kZXJlci5yZXNvbHV0aW9uLFxuICAgICAgICAgICAgICAgIHdpZHRoICogcmVuZGVyZXIucmVzb2x1dGlvbixcbiAgICAgICAgICAgICAgICBoZWlnaHQgKiByZW5kZXJlci5yZXNvbHV0aW9uXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIGVsc2VcbiAgICAgICAge1xuICAgICAgICAgICAgcmVuZGVyZXIuY29udGV4dC5kcmF3SW1hZ2UoXG4gICAgICAgICAgICAgICAgdGV4dHVyZS5iYXNlVGV4dHVyZS5zb3VyY2UsXG4gICAgICAgICAgICAgICAgdGV4dHVyZS5jcm9wLnggKiByZXNvbHV0aW9uLFxuICAgICAgICAgICAgICAgIHRleHR1cmUuY3JvcC55ICogcmVzb2x1dGlvbixcbiAgICAgICAgICAgICAgICB3aWR0aCAqIHJlc29sdXRpb24sXG4gICAgICAgICAgICAgICAgaGVpZ2h0ICogcmVzb2x1dGlvbixcbiAgICAgICAgICAgICAgICBkeCAgKiByZW5kZXJlci5yZXNvbHV0aW9uLFxuICAgICAgICAgICAgICAgIGR5ICAqIHJlbmRlcmVyLnJlc29sdXRpb24sXG4gICAgICAgICAgICAgICAgd2lkdGggKiByZW5kZXJlci5yZXNvbHV0aW9uLFxuICAgICAgICAgICAgICAgIGhlaWdodCAqIHJlbmRlcmVyLnJlc29sdXRpb25cbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICB9XG59O1xuXG4vKipcbiAqIERlc3Ryb3lzIHRoaXMgc3ByaXRlIGFuZCBvcHRpb25hbGx5IGl0cyB0ZXh0dXJlXG4gKlxuICogQHBhcmFtIFtkZXN0cm95VGV4dHVyZT1mYWxzZV0ge2Jvb2xlYW59IFNob3VsZCBpdCBkZXN0cm95IHRoZSBjdXJyZW50IHRleHR1cmUgb2YgdGhlIHNwcml0ZSBhcyB3ZWxsXG4gKiBAcGFyYW0gW2Rlc3Ryb3lCYXNlVGV4dHVyZT1mYWxzZV0ge2Jvb2xlYW59IFNob3VsZCBpdCBkZXN0cm95IHRoZSBiYXNlIHRleHR1cmUgb2YgdGhlIHNwcml0ZSBhcyB3ZWxsXG4gKi9cblNwcml0ZS5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uIChkZXN0cm95VGV4dHVyZSwgZGVzdHJveUJhc2VUZXh0dXJlKVxue1xuICAgIENvbnRhaW5lci5wcm90b3R5cGUuZGVzdHJveS5jYWxsKHRoaXMpO1xuXG4gICAgdGhpcy5hbmNob3IgPSBudWxsO1xuXG4gICAgaWYgKGRlc3Ryb3lUZXh0dXJlKVxuICAgIHtcbiAgICAgICAgdGhpcy5fdGV4dHVyZS5kZXN0cm95KGRlc3Ryb3lCYXNlVGV4dHVyZSk7XG4gICAgfVxuXG4gICAgdGhpcy5fdGV4dHVyZSA9IG51bGw7XG4gICAgdGhpcy5zaGFkZXIgPSBudWxsO1xufTtcblxuLy8gc29tZSBoZWxwZXIgZnVuY3Rpb25zLi5cblxuLyoqXG4gKiBIZWxwZXIgZnVuY3Rpb24gdGhhdCBjcmVhdGVzIGEgc3ByaXRlIHRoYXQgd2lsbCBjb250YWluIGEgdGV4dHVyZSBmcm9tIHRoZSBUZXh0dXJlQ2FjaGUgYmFzZWQgb24gdGhlIGZyYW1lSWRcbiAqIFRoZSBmcmFtZSBpZHMgYXJlIGNyZWF0ZWQgd2hlbiBhIFRleHR1cmUgcGFja2VyIGZpbGUgaGFzIGJlZW4gbG9hZGVkXG4gKlxuICogQHN0YXRpY1xuICogQHBhcmFtIGZyYW1lSWQge3N0cmluZ30gVGhlIGZyYW1lIElkIG9mIHRoZSB0ZXh0dXJlIGluIHRoZSBjYWNoZVxuICogQHBhcmFtIFtjcm9zc29yaWdpbj0oYXV0byldIHtib29sZWFufSBpZiB5b3Ugd2FudCB0byBzcGVjaWZ5IHRoZSBjcm9zcy1vcmlnaW4gcGFyYW1ldGVyXG4gKiBAcGFyYW0gW3NjYWxlTW9kZT1QSVhJLlNDQUxFX01PREVTLkRFRkFVTFRdIHtudW1iZXJ9IGlmIHlvdSB3YW50IHRvIHNwZWNpZnkgdGhlIHNjYWxlIG1vZGUsIHNlZSB7QGxpbmsgUElYSS5TQ0FMRV9NT0RFU30gZm9yIHBvc3NpYmxlIHZhbHVlc1xuICogQHJldHVybiB7UElYSS5TcHJpdGV9IEEgbmV3IFNwcml0ZSB1c2luZyBhIHRleHR1cmUgZnJvbSB0aGUgdGV4dHVyZSBjYWNoZSBtYXRjaGluZyB0aGUgZnJhbWVJZFxuICovXG5TcHJpdGUuZnJvbUZyYW1lID0gZnVuY3Rpb24gKGZyYW1lSWQpXG57XG4gICAgdmFyIHRleHR1cmUgPSB1dGlscy5UZXh0dXJlQ2FjaGVbZnJhbWVJZF07XG5cbiAgICBpZiAoIXRleHR1cmUpXG4gICAge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RoZSBmcmFtZUlkIFwiJyArIGZyYW1lSWQgKyAnXCIgZG9lcyBub3QgZXhpc3QgaW4gdGhlIHRleHR1cmUgY2FjaGUnKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IFNwcml0ZSh0ZXh0dXJlKTtcbn07XG5cbi8qKlxuICogSGVscGVyIGZ1bmN0aW9uIHRoYXQgY3JlYXRlcyBhIHNwcml0ZSB0aGF0IHdpbGwgY29udGFpbiBhIHRleHR1cmUgYmFzZWQgb24gYW4gaW1hZ2UgdXJsXG4gKiBJZiB0aGUgaW1hZ2UgaXMgbm90IGluIHRoZSB0ZXh0dXJlIGNhY2hlIGl0IHdpbGwgYmUgbG9hZGVkXG4gKlxuICogQHN0YXRpY1xuICogQHBhcmFtIGltYWdlSWQge3N0cmluZ30gVGhlIGltYWdlIHVybCBvZiB0aGUgdGV4dHVyZVxuICogQHJldHVybiB7UElYSS5TcHJpdGV9IEEgbmV3IFNwcml0ZSB1c2luZyBhIHRleHR1cmUgZnJvbSB0aGUgdGV4dHVyZSBjYWNoZSBtYXRjaGluZyB0aGUgaW1hZ2UgaWRcbiAqL1xuU3ByaXRlLmZyb21JbWFnZSA9IGZ1bmN0aW9uIChpbWFnZUlkLCBjcm9zc29yaWdpbiwgc2NhbGVNb2RlKVxue1xuICAgIHJldHVybiBuZXcgU3ByaXRlKFRleHR1cmUuZnJvbUltYWdlKGltYWdlSWQsIGNyb3Nzb3JpZ2luLCBzY2FsZU1vZGUpKTtcbn07XG4iLCJ2YXIgT2JqZWN0UmVuZGVyZXIgPSByZXF1aXJlKCcuLi8uLi9yZW5kZXJlcnMvd2ViZ2wvdXRpbHMvT2JqZWN0UmVuZGVyZXInKSxcbiAgICBXZWJHTFJlbmRlcmVyID0gcmVxdWlyZSgnLi4vLi4vcmVuZGVyZXJzL3dlYmdsL1dlYkdMUmVuZGVyZXInKSxcbiAgICBUZXh0dXJlU2hhZGVyID0gcmVxdWlyZSgnLi4vLi4vcmVuZGVyZXJzL3dlYmdsL3NoYWRlcnMvX1RleHR1cmVTaGFkZXInKSxcbiAgICBjcmVhdGVJbmRpY2VzRm9yUXVhZHMgPSByZXF1aXJlKCcuLi8uLi91dGlscy9jcmVhdGVJbmRpY2VzRm9yUXVhZHMnKSxcbiAgICBnZW5lcmF0ZU11bHRpVGV4dHVyZVNoYWRlciA9IHJlcXVpcmUoJy4vZ2VuZXJhdGVNdWx0aVRleHR1cmVTaGFkZXInKSxcbiAgICBDT05TVCA9IHJlcXVpcmUoJy4uLy4uL2NvbnN0JyksXG4gICAgZ2xDb3JlID0gcmVxdWlyZSgncGl4aS1nbC1jb3JlJyk7XG5cbi8qKlxuICogQGF1dGhvciBNYXQgR3JvdmVzXG4gKlxuICogQmlnIHRoYW5rcyB0byB0aGUgdmVyeSBjbGV2ZXIgTWF0dCBEZXNMYXVyaWVycyA8bWF0dGRlc2w+IGh0dHBzOi8vZ2l0aHViLmNvbS9tYXR0ZGVzbC9cbiAqIGZvciBjcmVhdGluZyB0aGUgb3JpZ2luYWwgcGl4aSB2ZXJzaW9uIVxuICogQWxzbyBhIHRoYW5rcyB0byBodHRwczovL2dpdGh1Yi5jb20vYmNoZXZhbGllciBmb3IgdHdlYWtpbmcgdGhlIHRpbnQgYW5kIGFscGhhIHNvIHRoYXQgdGhleSBub3cgc2hhcmUgNCBieXRlcyBvbiB0aGUgdmVydGV4IGJ1ZmZlclxuICpcbiAqIEhlYXZpbHkgaW5zcGlyZWQgYnkgTGliR0RYJ3MgU3ByaXRlUmVuZGVyZXI6XG4gKiBodHRwczovL2dpdGh1Yi5jb20vbGliZ2R4L2xpYmdkeC9ibG9iL21hc3Rlci9nZHgvc3JjL2NvbS9iYWRsb2dpYy9nZHgvZ3JhcGhpY3MvZzJkL1Nwcml0ZVJlbmRlcmVyLmphdmFcbiAqL1xuXG4vKipcbiAqIFJlbmRlcmVyIGRlZGljYXRlZCB0byBkcmF3aW5nIGFuZCBiYXRjaGluZyBzcHJpdGVzLlxuICpcbiAqIEBjbGFzc1xuICogQHByaXZhdGVcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAZXh0ZW5kcyBQSVhJLk9iamVjdFJlbmRlcmVyXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcn0gVGhlIHJlbmRlcmVyIHRoaXMgc3ByaXRlIGJhdGNoIHdvcmtzIGZvci5cbiAqL1xuZnVuY3Rpb24gU3ByaXRlUmVuZGVyZXIocmVuZGVyZXIpXG57XG4gICAgT2JqZWN0UmVuZGVyZXIuY2FsbCh0aGlzLCByZW5kZXJlcik7XG5cbiAgICAvKipcbiAgICAgKiBOdW1iZXIgb2YgdmFsdWVzIHNlbnQgaW4gdGhlIHZlcnRleCBidWZmZXIuXG4gICAgICogcG9zaXRpb25YLCBwb3NpdGlvblksIGNvbG9yUiwgY29sb3JHLCBjb2xvckIgPSA1XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy52ZXJ0U2l6ZSA9IDU7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgc2l6ZSBvZiB0aGUgdmVydGV4IGluZm9ybWF0aW9uIGluIGJ5dGVzLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMudmVydEJ5dGVTaXplID0gdGhpcy52ZXJ0U2l6ZSAqIDQ7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgbnVtYmVyIG9mIGltYWdlcyBpbiB0aGUgU3ByaXRlQmF0Y2ggYmVmb3JlIGl0IGZsdXNoZXMuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy5zaXplID0gQ09OU1QuU1BSSVRFX0JBVENIX1NJWkU7IC8vIDIwMDAgaXMgYSBuaWNlIGJhbGFuY2UgYmV0d2VlbiBtb2JpbGUgLyBkZXNrdG9wXG5cbiAgICAvLyB0aGUgdG90YWwgbnVtYmVyIG9mIGJ5dGVzIGluIG91ciBiYXRjaFxuICAgIHZhciBudW1WZXJ0cyA9ICh0aGlzLnNpemUgKiA0KSAqIHRoaXMudmVydEJ5dGVTaXplO1xuXG4gICAgLy8gdGhlIHRvdGFsIG51bWJlciBvZiBpbmRpY2VzIGluIG91ciBiYXRjaCwgdGhlcmUgYXJlIDYgcG9pbnRzIHBlciBxdWFkLlxuICAgIHZhciBudW1JbmRpY2VzID0gdGhpcy5zaXplICogNjtcblxuICAgIC8qKlxuICAgICAqIEhvbGRzIHRoZSB2ZXJ0ZXggZGF0YSB0aGF0IHdpbGwgYmUgc2VudCB0byB0aGUgdmVydGV4IHNoYWRlci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge0FycmF5QnVmZmVyfVxuICAgICAqL1xuICAgIHRoaXMudmVydGljZXMgPSBuZXcgQXJyYXlCdWZmZXIobnVtVmVydHMpO1xuXG4gICAgLyoqXG4gICAgICogVmlldyBvbiB0aGUgdmVydGljZXMgYXMgYSBGbG9hdDMyQXJyYXkgZm9yIHBvc2l0aW9uc1xuICAgICAqXG4gICAgICogQG1lbWJlciB7RmxvYXQzMkFycmF5fVxuICAgICAqL1xuICAgIHRoaXMucG9zaXRpb25zID0gbmV3IEZsb2F0MzJBcnJheSh0aGlzLnZlcnRpY2VzKTtcbiAgICBcbiAgICAvKipcbiAgICAgKiBWaWV3IG9uIHRoZSB2ZXJ0aWNlcyBhcyBhIFVpbnQzMkFycmF5IGZvciB1dnNcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge0Zsb2F0MzJBcnJheX1cbiAgICAgKi9cbiAgICB0aGlzLnV2cyA9IG5ldyBVaW50MzJBcnJheSh0aGlzLnZlcnRpY2VzKTtcblxuICAgIC8qKlxuICAgICAqIFZpZXcgb24gdGhlIHZlcnRpY2VzIGFzIGEgVWludDMyQXJyYXkgZm9yIGNvbG9yc1xuICAgICAqXG4gICAgICogQG1lbWJlciB7VWludDMyQXJyYXl9XG4gICAgICovXG4gICAgdGhpcy5jb2xvcnMgPSBuZXcgVWludDMyQXJyYXkodGhpcy52ZXJ0aWNlcyk7XG5cbiAgICAvKipcbiAgICAgKiBIb2xkcyB0aGUgaW5kaWNlcyBvZiB0aGUgZ2VvbWV0cnkgKHF1YWRzKSB0byBkcmF3XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtVaW50MTZBcnJheX1cbiAgICAgKi9cbiAgICB0aGlzLmluZGljZXMgPSBjcmVhdGVJbmRpY2VzRm9yUXVhZHModGhpcy5zaXplKVxuXG4gICAgLyoqXG4gICAgICogVGhlIGRlZmF1bHQgc2hhZGVyIHRoYXQgaXMgdXNlZCBpZiBhIHNwcml0ZSBkb2Vzbid0IGhhdmUgYSBtb3JlIHNwZWNpZmljIG9uZS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuU2hhZGVyfVxuICAgICAqL1xuICAgIHRoaXMuc2hhZGVyID0gbnVsbDtcblxuICAgIHRoaXMudGV4dHVyZUNvdW50ID0gMDtcbiAgICB0aGlzLmN1cnJlbnRJbmRleCA9IDA7XG4gIFxuICAgIHRoaXMuZ3JvdXBDb3VudCA9IDA7XG4gICAgdGhpcy5ncm91cHMgPSBbXTtcbiAgICBcbiAgICAvL1RPRE8gLSAzMDAgaXMgYSBiaXQgbWFnaWMsIGZpZ3VyZSBvdXQgYSBuaWNlciBhbW91bnQhXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLnNpemU7IGkrKykgXG4gICAge1xuICAgICAgICB0aGlzLmdyb3Vwc1tpXSA9IHt0ZXh0dXJlczpbXSwgdGV4dHVyZUNvdW50OjAsIGlkczpbXSwgc2l6ZTowLCBzdGFydDowLCBibGVuZDowfTsgXG4gICAgfTtcbiAgICBcbiAgICB0aGlzLmN1cnJlbnRHcm91cCA9IHRoaXMuZ3JvdXBzW3RoaXMuZ3JvdXBDb3VudCsrXTtcblxuICAgIHRoaXMuY3VycmVudFRleHR1cmUgPSBudWxsOyAgICBcbn1cblxuXG5TcHJpdGVSZW5kZXJlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKE9iamVjdFJlbmRlcmVyLnByb3RvdHlwZSk7XG5TcHJpdGVSZW5kZXJlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBTcHJpdGVSZW5kZXJlcjtcbm1vZHVsZS5leHBvcnRzID0gU3ByaXRlUmVuZGVyZXI7XG5cbldlYkdMUmVuZGVyZXIucmVnaXN0ZXJQbHVnaW4oJ3Nwcml0ZScsIFNwcml0ZVJlbmRlcmVyKTtcblxuLyoqXG4gKiBTZXRzIHVwIHRoZSByZW5kZXJlciBjb250ZXh0IGFuZCBuZWNlc3NhcnkgYnVmZmVycy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIGdsIHtXZWJHTFJlbmRlcmluZ0NvbnRleHR9IHRoZSBjdXJyZW50IFdlYkdMIGRyYXdpbmcgY29udGV4dFxuICovXG5TcHJpdGVSZW5kZXJlci5wcm90b3R5cGUub25Db250ZXh0Q2hhbmdlID0gZnVuY3Rpb24gKClcbntcbiAgICB2YXIgZ2wgPSB0aGlzLnJlbmRlcmVyLmdsO1xuXG4gICAgdGhpcy5NQVhfVEVYVFVFUyA9IGdsLmdldFBhcmFtZXRlcihnbC5NQVhfVEVYVFVSRV9JTUFHRV9VTklUUyk7XG5cbiAgICB0aGlzLl9zaGFkZXIgPSBnZW5lcmF0ZU11bHRpVGV4dHVyZVNoYWRlcihnbCwgdGhpcy5NQVhfVEVYVFVFUykvL25ldyBUZXh0dXJlU2hhZGVyKGdsKTtcblxuICAgIC8vIHNldHVwIGRlZmF1bHQgc2hhZGVyXG4gICAgdGhpcy5zaGFkZXIgPSB0aGlzLnJlbmRlcmVyLnNoYWRlck1hbmFnZXIuZGVmYXVsdFNoYWRlcjtcblxuICAgIC8vIGNyZWF0ZSBhIGNvdXBsZSBvZiBidWZmZXJzXG4gICAgdGhpcy52ZXJ0ZXhCdWZmZXIgPSBnbENvcmUuR0xCdWZmZXIuY3JlYXRlVmVydGV4QnVmZmVyKGdsLCBudWxsLCBnbC5EWU5BTUlDX0RSQVcpO1xuICAgIHRoaXMuaW5kZXhCdWZmZXIgPSBnbENvcmUuR0xCdWZmZXIuY3JlYXRlSW5kZXhCdWZmZXIoZ2wsIHRoaXMuaW5kaWNlcywgZ2wuU1RBVElDX0RSQVcpO1xuXG4gICAgLy8gYnVpbGQgdGhlIHZhbyBvYmplY3QgdGhhdCB3aWxsIHJlbmRlci4uXG4gICAgdGhpcy52YW8gPSBuZXcgZ2xDb3JlLlZlcnRleEFycmF5T2JqZWN0KGdsKTtcblxuICAgIHRoaXMudmFvLmFkZEluZGV4KHRoaXMuaW5kZXhCdWZmZXIpO1xuICAgIHRoaXMudmFvLmFkZEF0dHJpYnV0ZSh0aGlzLnZlcnRleEJ1ZmZlciwgdGhpcy5fc2hhZGVyLmF0dHJpYnV0ZXMuYVZlcnRleFBvc2l0aW9uLCBnbC5GTE9BVCwgZmFsc2UsIHRoaXMudmVydEJ5dGVTaXplLCAwKTtcbiAgICB0aGlzLnZhby5hZGRBdHRyaWJ1dGUodGhpcy52ZXJ0ZXhCdWZmZXIsIHRoaXMuX3NoYWRlci5hdHRyaWJ1dGVzLmFUZXh0dXJlQ29vcmQsIGdsLlVOU0lHTkVEX1NIT1JULCB0cnVlLCB0aGlzLnZlcnRCeXRlU2l6ZSwgMiAqIDQpO1xuICAgIHRoaXMudmFvLmFkZEF0dHJpYnV0ZSh0aGlzLnZlcnRleEJ1ZmZlciwgdGhpcy5fc2hhZGVyLmF0dHJpYnV0ZXMuYUNvbG9yLCBnbC5VTlNJR05FRF9CWVRFLCB0cnVlLCB0aGlzLnZlcnRCeXRlU2l6ZSwgMyAqIDQpO1xuICAgIHRoaXMudmFvLmFkZEF0dHJpYnV0ZSh0aGlzLnZlcnRleEJ1ZmZlciwgdGhpcy5fc2hhZGVyLmF0dHJpYnV0ZXMuYVRleHR1cmVJZCwgZ2wuRkxPQVQsIGZhbHNlLCB0aGlzLnZlcnRCeXRlU2l6ZSwgNCAqIDQpO1xuXG4gICAgdGhpcy5jdXJyZW50QmxlbmRNb2RlID0gOTk5OTk7XG59O1xuXG4vKipcbiAqIFJlbmRlcnMgdGhlIHNwcml0ZSBvYmplY3QuXG4gKlxuICogQHBhcmFtIHNwcml0ZSB7UElYSS5TcHJpdGV9IHRoZSBzcHJpdGUgdG8gcmVuZGVyIHdoZW4gdXNpbmcgdGhpcyBzcHJpdGViYXRjaFxuICovXG5TcHJpdGVSZW5kZXJlci5wcm90b3R5cGUucmVuZGVyID0gZnVuY3Rpb24gKHNwcml0ZSlcbntcbiAgICAvL1RPRE8gc2V0IGJsZW5kIG1vZGVzLi5cbiAgICAvLyBjaGVjayB0ZXh0dXJlLi5cbiAgICBpZiAodGhpcy5jdXJyZW50SW5kZXggPj0gdGhpcy5zaXplKVxuICAgIHtcbiAgICAgICAgdGhpcy5mbHVzaCgpO1xuICAgIH1cblxuICBcbiAgICAvLyBnZXQgdGhlIHV2cyBmb3IgdGhlIHRleHR1cmVcbiAgIFxuXG4gICAgLy8gaWYgdGhlIHV2cyBoYXZlIG5vdCB1cGRhdGVkIHRoZW4gbm8gcG9pbnQgcmVuZGVyaW5nIGp1c3QgeWV0IVxuICAgIGlmICghc3ByaXRlLnRleHR1cmUuX3V2cylcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAgLy8gcHVzaCBhIHRleHR1cmUuXG4gICAgLy8gaW5jcmVtZW50IHRoZSBiYXRjaHNpemVcbiAgICB2YXIgbmV4dFRleHR1cmUgPSAgc3ByaXRlLnRleHR1cmUuYmFzZVRleHR1cmU7XG4gICAgdmFyIGN1cnJlbnRHcm91cCA9IHRoaXMuY3VycmVudEdyb3VwO1xuICAgIHZhciBpO1xuXG4gICAgaWYodGhpcy5jdXJyZW50VGV4dHVyZSAhPT0gbmV4dFRleHR1cmUpXG4gICAge1xuICAgICAgICB0aGlzLmN1cnJlbnRUZXh0dXJlID0gbmV4dFRleHR1cmU7XG4gICAgICAgIFxuICAgICAgICBpZighbmV4dFRleHR1cmUuX2VuYWJsZWQpXG4gICAgICAgIHtcbiAgICAgICAgICAgIG5leHRUZXh0dXJlLl9lbmFibGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIG5leHRUZXh0dXJlLl9pZCA9IHRoaXMudGV4dHVyZUNvdW50O1xuICAgICAgICAgICAgXG4gICAgICAgICAgICBpZih0aGlzLnRleHR1cmVDb3VudCA9PT0gdGhpcy5NQVhfVEVYVFVFUylcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBmb3IgKCBpID0gMDsgaSA8IGN1cnJlbnRHcm91cC50ZXh0dXJlQ291bnQ7IGkrKykgXG4gICAgICAgICAgICAgICAgeyAgICAgXG4gICAgICAgICAgICAgICAgICAgIGN1cnJlbnRHcm91cC50ZXh0dXJlc1tpXS5fZW5hYmxlZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICB0aGlzLnRleHR1cmVDb3VudCA9IDA7XG5cbiAgICAgICAgICAgICAgICBjdXJyZW50R3JvdXAuc2l6ZSA9IHRoaXMuY3VycmVudEluZGV4IC0gY3VycmVudEdyb3VwLnN0YXJ0O1xuICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgY3VycmVudEdyb3VwID0gdGhpcy5jdXJyZW50R3JvdXAgPSB0aGlzLmdyb3Vwc1t0aGlzLmdyb3VwQ291bnQrK107XG4gICAgICAgICAgICAgICAgY3VycmVudEdyb3VwLnRleHR1cmVDb3VudCA9IDA7XG4gICAgICAgICAgICAgICAgY3VycmVudEdyb3VwLnN0YXJ0ID0gdGhpcy5jdXJyZW50SW5kZXg7XG4gICAgICAgICAgICAgICAgXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGN1cnJlbnRHcm91cC50ZXh0dXJlc1tjdXJyZW50R3JvdXAudGV4dHVyZUNvdW50KytdID0gbmV4dFRleHR1cmU7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnRleHR1cmVDb3VudCsrO1xuICAgIH1cblxuICAgIC8vIFRPRE8gdHJpbT8/XG4gICAgdmFyIGluZGV4ID0gdGhpcy5jdXJyZW50SW5kZXggKiB0aGlzLnZlcnRCeXRlU2l6ZTtcblxuICAgIHRoaXMuY3VycmVudEluZGV4Kys7XG5cbiAgICAvLyB1cGxvYWQgdGhlIHNwcml0ZSBlbGVtZXRucy4uLlxuICAgIC8vIHRoZXkgaGF2ZSBhbGwgcmVhZHkgYmVlbiBjYWxjdWxhdGVkIHNvIHdlIGp1c3QgbmVlZCB0byBwdXNoIHRoZW0gaW50byB0aGUgYnVmZmVyLlxuICAgIHZhciBjb2xvcnMgPSB0aGlzLmNvbG9ycztcbiAgICB2YXIgcG9zaXRpb25zID0gdGhpcy5wb3NpdGlvbnM7XG4gICAgdmFyIHZlcnRleERhdGEgPSBzcHJpdGUudmVydGV4RGF0YVxuICAgIHZhciB0aW50ID0gKHNwcml0ZS50aW50ID4+IDE2KSArIChzcHJpdGUudGludCAmIDB4ZmYwMCkgKyAoKHNwcml0ZS50aW50ICYgMHhmZikgPDwgMTYpICsgKHNwcml0ZS53b3JsZEFscGhhICogMjU1IDw8IDI0KTtcbiAgICB2YXIgdXZzID0gc3ByaXRlLnRleHR1cmUuX3V2cy51dnNfdWludDMyO1xuICAgIC8veHlcbiAgICBwb3NpdGlvbnNbaW5kZXgrK10gPSB2ZXJ0ZXhEYXRhWzBdO1xuICAgIHBvc2l0aW9uc1tpbmRleCsrXSA9IHZlcnRleERhdGFbMV07XG4gICAgdGhpcy51dnNbaW5kZXgrK10gPSB1dnNbMF07XG4gICAgY29sb3JzW2luZGV4KytdID0gdGludDtcbiAgICBwb3NpdGlvbnNbaW5kZXgrK10gPSBuZXh0VGV4dHVyZS5faWQ7IFxuICAgIFxuICAgIC8vIHh5XG4gICAgcG9zaXRpb25zW2luZGV4KytdID0gdmVydGV4RGF0YVsyXTtcbiAgICBwb3NpdGlvbnNbaW5kZXgrK10gPSB2ZXJ0ZXhEYXRhWzNdO1xuICAgIHRoaXMudXZzW2luZGV4KytdID0gdXZzWzFdO1xuICAgIGNvbG9yc1tpbmRleCsrXSA9IHRpbnQ7XG4gICAgcG9zaXRpb25zW2luZGV4KytdID0gbmV4dFRleHR1cmUuX2lkO1xuXG4gICAgIC8vIHh5XG4gICAgcG9zaXRpb25zW2luZGV4KytdID0gdmVydGV4RGF0YVs0XTtcbiAgICBwb3NpdGlvbnNbaW5kZXgrK10gPSB2ZXJ0ZXhEYXRhWzVdO1xuICAgIHRoaXMudXZzW2luZGV4KytdID0gdXZzWzJdO1xuICAgIGNvbG9yc1tpbmRleCsrXSA9IHRpbnQ7XG4gICAgcG9zaXRpb25zW2luZGV4KytdID0gbmV4dFRleHR1cmUuX2lkO1xuXG4gICAgLy8geHlcbiAgICBwb3NpdGlvbnNbaW5kZXgrK10gPSB2ZXJ0ZXhEYXRhWzZdO1xuICAgIHBvc2l0aW9uc1tpbmRleCsrXSA9IHZlcnRleERhdGFbN107XG4gICAgdGhpcy51dnNbaW5kZXgrK10gPSB1dnNbM107XG4gICAgY29sb3JzW2luZGV4KytdID0gdGludDtcbiAgICBwb3NpdGlvbnNbaW5kZXgrK10gPSBuZXh0VGV4dHVyZS5faWQ7XG59O1xuXG4vKipcbiAqIFJlbmRlcnMgdGhlIGNvbnRlbnQgYW5kIGVtcHRpZXMgdGhlIGN1cnJlbnQgYmF0Y2guXG4gKlxuICovXG5TcHJpdGVSZW5kZXJlci5wcm90b3R5cGUuZmx1c2ggPSBmdW5jdGlvbiAoKVxue1xuICAgIGlmICh0aGlzLmN1cnJlbnRJbmRleCA9PT0gMClyZXR1cm47XG5cbiAgICB2YXIgZ2wgPSB0aGlzLnJlbmRlcmVyLmdsO1xuXG5cbiAgICB0aGlzLmN1cnJlbnRHcm91cC5zaXplID0gdGhpcy5jdXJyZW50SW5kZXggLSB0aGlzLmN1cnJlbnRHcm91cC5zdGFydDtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuY3VycmVudEdyb3VwLnRleHR1cmVDb3VudDsgaSsrKSBcbiAgICB7ICAgICBcbiAgICAgICAgdGhpcy5jdXJyZW50R3JvdXAudGV4dHVyZXNbaV0uX2VuYWJsZWQgPSBmYWxzZTtcbiAgICB9O1xuICAgXG4gICAgLy8gZG8gc29tZSBzbWFydCBhcnJheSBzdHVmZi4uXG4gICAgLy8gZG91YmxlIHNpemUgc28gd2UgZG9udCBhbHdheSBzdWJhcnJheSB0aGUgZWxlbWVudHMuLlxuICAgIC8vIHVwbG9hZCB0aGUgdmVydHMgdG8gdGhlIGJ1ZmZlclxuICAgIGlmICh0aGlzLmN1cnJlbnRCYXRjaFNpemUgPiAoIHRoaXMuc2l6ZSAqIDAuNSApIClcbiAgICB7XG4gICAgICAgIHRoaXMudmVydGV4QnVmZmVyLnVwbG9hZCh0aGlzLnZlcnRpY2VzLCAwLCB0cnVlKTtcbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgLy8gbyBrIC4uIHN1YiBhcnJheSBpcyBTTE9XPj9cbiAgICAgICAgdmFyIHZpZXcgPSB0aGlzLnBvc2l0aW9ucy5zdWJhcnJheSgwLCB0aGlzLmN1cnJlbnRJbmRleCAqIHRoaXMudmVydEJ5dGVTaXplKTtcbiAgICAgICAgdGhpcy52ZXJ0ZXhCdWZmZXIudXBsb2FkKHZpZXcsIDAsIHRydWUpO1xuICAgIH1cblxuICAgIC8vIGJpbmQgc2hhZGVyLi5cbiAgICB0aGlzLnJlbmRlcmVyLmJpbmRTaGFkZXIodGhpcy5fc2hhZGVyKTtcbiAgICB0aGlzLnJlbmRlcmVyLmJsZW5kTW9kZU1hbmFnZXIuc2V0QmxlbmRNb2RlKCAwICk7XG5cbiAgICAvLy8gcmVuZGVyIHRoZSBncm91cHMuLlxuICAgIGZvciAoaSA9IDA7IGkgPCB0aGlzLmdyb3VwQ291bnQ7IGkrKykge1xuICAgICAgICBcbiAgICAgICAgdmFyIGdyb3VwID0gdGhpcy5ncm91cHNbaV07XG5cbiAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBncm91cC50ZXh0dXJlQ291bnQ7IGorKykge1xuICAgICAgICAgICAgdGhpcy5yZW5kZXJlci5iaW5kVGV4dHVyZShncm91cC50ZXh0dXJlc1tqXSwgaik7XG4gICAgICAgIH07XG5cbiAgICAgICAgZ2wuZHJhd0VsZW1lbnRzKGdsLlRSSUFOR0xFUywgZ3JvdXAuc2l6ZSAqIDYsIGdsLlVOU0lHTkVEX1NIT1JULCBncm91cC5zdGFydCAqIDYgKiAyKTtcbiAgICB9O1xuXG4gICAgLy8gcmVzZXQgZWxlbWVudHMgZm9yIHRoZSBuZXh0IGZsdXNoXG4gICAgdGhpcy5jdXJyZW50VGV4dHVyZSA9IG51bGw7XG4gICAgdGhpcy5jdXJyZW50SW5kZXggPSAwO1xuICAgIHRoaXMudGV4dHVyZUNvdW50ID0gMDtcbiAgICB0aGlzLmdyb3VwQ291bnQgPSAwO1xuICAgIFxuICAgIHRoaXMuY3VycmVudEdyb3VwID0gdGhpcy5ncm91cHNbdGhpcy5ncm91cENvdW50KytdO1xuICAgIHRoaXMuY3VycmVudEdyb3VwLnRleHR1cmVDb3VudCA9IDA7XG59O1xuXG4vKipcbiAqIFN0YXJ0cyBhIG5ldyBzcHJpdGUgYmF0Y2guXG4gKlxuICovXG5TcHJpdGVSZW5kZXJlci5wcm90b3R5cGUuc3RhcnQgPSBmdW5jdGlvbiAoKVxue1xuICAgIHRoaXMudmFvLmJpbmQoKTtcbn07XG5cblNwcml0ZVJlbmRlcmVyLnByb3RvdHlwZS5zdG9wID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLmZsdXNoKCk7XG4gICAgdGhpcy52YW8udW5iaW5kKCk7XG59O1xuLyoqXG4gKiBEZXN0cm95cyB0aGUgU3ByaXRlQmF0Y2guXG4gKlxuICovXG5TcHJpdGVSZW5kZXJlci5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy52ZXJ0ZXhCdWZmZXIuZGVzdHJveSgpO1xuICAgIHRoaXMuaW5kZXhCdWZmZXIuZGVzdHJveSgpO1xuXG4gICAgT2JqZWN0UmVuZGVyZXIucHJvdG90eXBlLmRlc3Ryb3kuY2FsbCh0aGlzKTtcblxuICAgIHRoaXMuc2hhZGVyLmRlc3Ryb3koKTtcblxuICAgIHRoaXMucmVuZGVyZXIgPSBudWxsO1xuXG4gICAgdGhpcy52ZXJ0aWNlcyA9IG51bGw7XG4gICAgdGhpcy5wb3NpdGlvbnMgPSBudWxsO1xuICAgIHRoaXMuY29sb3JzID0gbnVsbDtcbiAgICB0aGlzLmluZGljZXMgPSBudWxsO1xuXG4gICAgdGhpcy52ZXJ0ZXhCdWZmZXIgPSBudWxsO1xuICAgIHRoaXMuaW5kZXhCdWZmZXIgPSBudWxsO1xuXG4gICAgdGhpcy5zcHJpdGVzID0gbnVsbDtcbiAgICB0aGlzLnNoYWRlciA9IG51bGw7XG59O1xuIiwidmFyIFNoYWRlciA9IHJlcXVpcmUoJ3BpeGktZ2wtY29yZScpLkdMU2hhZGVyO1xuXG5cbmZ1bmN0aW9uIGdlbmVyYXRlTXVsdGlUZXh0dXJlU2hhZGVyKGdsLCBtYXhUZXh0dXJlcylcbntcbiAgICB2YXIgdmVydGV4U3JjID0gXCJwcmVjaXNpb24gbG93cCBmbG9hdDtcXG5hdHRyaWJ1dGUgdmVjMiBhVmVydGV4UG9zaXRpb247XFxuYXR0cmlidXRlIHZlYzIgYVRleHR1cmVDb29yZDtcXG5hdHRyaWJ1dGUgdmVjNCBhQ29sb3I7XFxuYXR0cmlidXRlIGZsb2F0IGFUZXh0dXJlSWQ7XFxuXFxudW5pZm9ybSBtYXQzIHByb2plY3Rpb25NYXRyaXg7XFxuXFxudmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7XFxudmFyeWluZyB2ZWM0IHZDb2xvcjtcXG52YXJ5aW5nIGZsb2F0IHZUZXh0dXJlSWQ7XFxuXFxudm9pZCBtYWluKHZvaWQpe1xcbiAgIGdsX1Bvc2l0aW9uID0gdmVjNCgocHJvamVjdGlvbk1hdHJpeCAqIHZlYzMoYVZlcnRleFBvc2l0aW9uLCAxLjApKS54eSwgMC4wLCAxLjApO1xcbiAgIHZUZXh0dXJlQ29vcmQgPSBhVGV4dHVyZUNvb3JkO1xcbiAgIHZUZXh0dXJlSWQgPSBhVGV4dHVyZUlkO1xcbiAgIHZDb2xvciA9IHZlYzQoYUNvbG9yLnJnYiAqIGFDb2xvci5hLCBhQ29sb3IuYSk7XFxufVwiO1xuICAgIHZhciBmcmFnbWVudFNyYyA9ICdwcmVjaXNpb24gbG93cCBmbG9hdDtcXG5cXG4nICsgZ2VuZXJhdGVTYW1wbGVTcmMobWF4VGV4dHVyZXMpICsgXCJcXG5cXG5cIiArIGZyYWdUZW1wbGF0ZVxuXG4gICAgZnJhZ21lbnRTcmMgPSBmcmFnbWVudFNyYy5yZXBsYWNlKC9cXCVcXCUvZ2ksICcxNicpO1xuXG4gICAgdmFyIHNoYWRlciA9IG5ldyBTaGFkZXIoZ2wsIHZlcnRleFNyYywgZnJhZ21lbnRTcmMpO1xuXG5cbiAgICB2YXIgc2FtcGxlVmFsdWVzID0gW107XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBtYXhUZXh0dXJlczsgaSsrKSB7XG4gICAgICAgIHNhbXBsZVZhbHVlc1tpXSA9IGk7XG4gICAgfTtcblxuICAgIHNoYWRlci5iaW5kKCk7XG4gICAgc2hhZGVyLnVuaWZvcm1zLnVTYW1wbGVycyA9IHNhbXBsZVZhbHVlcztcblxuICAgIHJldHVybiBzaGFkZXI7XG59XG5cbmZ1bmN0aW9uIGdlbmVyYXRlU2FtcGxlU3JjKG1heFRleHR1cmVzKVxue1xuICAgIHZhciBzcmMgPSAndmVjNCBnZXRTYW1wbGVGcm9tQXJyYXkoc2FtcGxlcjJEIHRleHR1cmVzWyUlXSwgaW50IG5keCwgdmVjMiB1dikge1xcblxcbnZlYzQgY29sb3I7J1xuXG4gICAgc3JjICs9ICdcXG4nO1xuICAgIHNyYyArPSAnXFxuJztcbiAgICBcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG1heFRleHR1cmVzOyBpKyspIFxuICAgIHtcbiAgICAgICAgaWYoaSA+IDApc3JjICs9ICdcXG5lbHNlICc7XG4gICAgICAgIGlmKGkgPCBtYXhUZXh0dXJlcy0xKXNyYyArPSAnaWYobmR4ID09ICcgKyBpICsgJyknO1xuICAgICAgICBzcmMgKz0gJ1xcbnsnO1xuICAgICAgICBzcmMgKz0gJ1xcblxcdGNvbG9yID0gdGV4dHVyZTJEKHRleHR1cmVzWycraSsnXSwgdXYpOyc7XG4gICAgICAgIHNyYyArPSAnXFxufSc7XG4gICAgfTtcblxuICAgIHNyYyArPSAnXFxuJztcbiAgICBzcmMgKz0gJ1xcbic7XG4gICAgc3JjICs9ICdyZXR1cm4gY29sb3I7JztcbiAgICBzcmMgKz0gJ1xcbn0nO1xuXG4gICAgcmV0dXJuIHNyYztcbn1cblxudmFyIGZyYWdUZW1wbGF0ZSA9IFtcblxuICAgICd2YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDsnLFxuICAgICd2YXJ5aW5nIHZlYzQgdkNvbG9yOycsXG4gICAgJ3ZhcnlpbmcgZmxvYXQgdlRleHR1cmVJZDsnLFxuICAgICd1bmlmb3JtIHNhbXBsZXIyRCB1U2FtcGxlcnNbJSVdOycsXG5cbiAgICAndm9pZCBtYWluKHZvaWQpeycsXG4gICAgICAgICdnbF9GcmFnQ29sb3IgPSBnZXRTYW1wbGVGcm9tQXJyYXkodVNhbXBsZXJzLCBpbnQodlRleHR1cmVJZCksIHZUZXh0dXJlQ29vcmQpICogdkNvbG9yOycsXG4gICAgJ30nXG5dLmpvaW4oJ1xcbicpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGdlbmVyYXRlTXVsdGlUZXh0dXJlU2hhZGVyO1xuIiwidmFyIFNwcml0ZSA9IHJlcXVpcmUoJy4uL3Nwcml0ZXMvU3ByaXRlJyksXG4gICAgVGV4dHVyZSA9IHJlcXVpcmUoJy4uL3RleHR1cmVzL1RleHR1cmUnKSxcbiAgICBtYXRoID0gcmVxdWlyZSgnLi4vbWF0aCcpLFxuICAgIHV0aWxzID0gcmVxdWlyZSgnLi4vdXRpbHMnKSxcbiAgICBDT05TVCA9IHJlcXVpcmUoJy4uL2NvbnN0Jyk7XG5cbi8qKlxuICogQSBUZXh0IE9iamVjdCB3aWxsIGNyZWF0ZSBhIGxpbmUgb3IgbXVsdGlwbGUgbGluZXMgb2YgdGV4dC4gVG8gc3BsaXQgYSBsaW5lIHlvdSBjYW4gdXNlICdcXG4nIGluIHlvdXIgdGV4dCBzdHJpbmcsXG4gKiBvciBhZGQgYSB3b3JkV3JhcCBwcm9wZXJ0eSBzZXQgdG8gdHJ1ZSBhbmQgYW5kIHdvcmRXcmFwV2lkdGggcHJvcGVydHkgd2l0aCBhIHZhbHVlIGluIHRoZSBzdHlsZSBvYmplY3QuXG4gKlxuICogQSBUZXh0IGNhbiBiZSBjcmVhdGVkIGRpcmVjdGx5IGZyb20gYSBzdHJpbmcgYW5kIGEgc3R5bGUgb2JqZWN0XG4gKlxuICogYGBganNcbiAqIHZhciB0ZXh0ID0gbmV3IFBJWEkuVGV4dCgnVGhpcyBpcyBhIHBpeGkgdGV4dCcse2ZvbnQgOiAnMjRweCBBcmlhbCcsIGZpbGwgOiAweGZmMTAxMCwgYWxpZ24gOiAnY2VudGVyJ30pO1xuICogYGBgXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLlNwcml0ZVxuICogQG1lbWJlcm9mIFBJWElcbiAqIEBwYXJhbSB0ZXh0IHtzdHJpbmd9IFRoZSBjb3B5IHRoYXQgeW91IHdvdWxkIGxpa2UgdGhlIHRleHQgdG8gZGlzcGxheVxuICogQHBhcmFtIFtzdHlsZV0ge29iamVjdH0gVGhlIHN0eWxlIHBhcmFtZXRlcnNcbiAqIEBwYXJhbSBbc3R5bGUuZm9udF0ge3N0cmluZ30gZGVmYXVsdCAnYm9sZCAyMHB4IEFyaWFsJyBUaGUgc3R5bGUgYW5kIHNpemUgb2YgdGhlIGZvbnRcbiAqIEBwYXJhbSBbc3R5bGUuZmlsbD0nYmxhY2snXSB7U3RyaW5nfE51bWJlcn0gQSBjYW52YXMgZmlsbHN0eWxlIHRoYXQgd2lsbCBiZSB1c2VkIG9uIHRoZSB0ZXh0IGUuZyAncmVkJywgJyMwMEZGMDAnXG4gKiBAcGFyYW0gW3N0eWxlLmFsaWduPSdsZWZ0J10ge3N0cmluZ30gQWxpZ25tZW50IGZvciBtdWx0aWxpbmUgdGV4dCAoJ2xlZnQnLCAnY2VudGVyJyBvciAncmlnaHQnKSwgZG9lcyBub3QgYWZmZWN0IHNpbmdsZSBsaW5lIHRleHRcbiAqIEBwYXJhbSBbc3R5bGUuc3Ryb2tlXSB7U3RyaW5nfE51bWJlcn0gQSBjYW52YXMgZmlsbHN0eWxlIHRoYXQgd2lsbCBiZSB1c2VkIG9uIHRoZSB0ZXh0IHN0cm9rZSBlLmcgJ2JsdWUnLCAnI0ZDRkYwMCdcbiAqIEBwYXJhbSBbc3R5bGUuc3Ryb2tlVGhpY2tuZXNzPTBdIHtudW1iZXJ9IEEgbnVtYmVyIHRoYXQgcmVwcmVzZW50cyB0aGUgdGhpY2tuZXNzIG9mIHRoZSBzdHJva2UuIERlZmF1bHQgaXMgMCAobm8gc3Ryb2tlKVxuICogQHBhcmFtIFtzdHlsZS53b3JkV3JhcD1mYWxzZV0ge2Jvb2xlYW59IEluZGljYXRlcyBpZiB3b3JkIHdyYXAgc2hvdWxkIGJlIHVzZWRcbiAqIEBwYXJhbSBbc3R5bGUud29yZFdyYXBXaWR0aD0xMDBdIHtudW1iZXJ9IFRoZSB3aWR0aCBhdCB3aGljaCB0ZXh0IHdpbGwgd3JhcCwgaXQgbmVlZHMgd29yZFdyYXAgdG8gYmUgc2V0IHRvIHRydWVcbiAqIEBwYXJhbSBbc3R5bGUubGluZUhlaWdodF0ge251bWJlcn0gVGhlIGxpbmUgaGVpZ2h0LCBhIG51bWJlciB0aGF0IHJlcHJlc2VudHMgdGhlIHZlcnRpY2FsIHNwYWNlIHRoYXQgYSBsZXR0ZXIgdXNlc1xuICogQHBhcmFtIFtzdHlsZS5kcm9wU2hhZG93PWZhbHNlXSB7Ym9vbGVhbn0gU2V0IGEgZHJvcCBzaGFkb3cgZm9yIHRoZSB0ZXh0XG4gKiBAcGFyYW0gW3N0eWxlLmRyb3BTaGFkb3dDb2xvcj0nIzAwMDAwMCddIHtzdHJpbmd9IEEgZmlsbCBzdHlsZSB0byBiZSB1c2VkIG9uIHRoZSBkcm9wc2hhZG93IGUuZyAncmVkJywgJyMwMEZGMDAnXG4gKiBAcGFyYW0gW3N0eWxlLmRyb3BTaGFkb3dBbmdsZT1NYXRoLlBJLzRdIHtudW1iZXJ9IFNldCBhIGFuZ2xlIG9mIHRoZSBkcm9wIHNoYWRvd1xuICogQHBhcmFtIFtzdHlsZS5kcm9wU2hhZG93RGlzdGFuY2U9NV0ge251bWJlcn0gU2V0IGEgZGlzdGFuY2Ugb2YgdGhlIGRyb3Agc2hhZG93XG4gKiBAcGFyYW0gW3N0eWxlLmRyb3BTaGFkb3dCbHVyPTBdIHtudW1iZXJ9IFNldCBhIHNoYWRvdyBibHVyIHJhZGl1c1xuICogQHBhcmFtIFtzdHlsZS5wYWRkaW5nPTBdIHtudW1iZXJ9IE9jY2FzaW9uYWxseSBzb21lIGZvbnRzIGFyZSBjcm9wcGVkIG9uIHRvcCBvciBib3R0b20uIEFkZGluZyBzb21lIHBhZGRpbmcgd2lsbFxuICogICAgICBwcmV2ZW50IHRoaXMgZnJvbSBoYXBwZW5pbmcgYnkgYWRkaW5nIHBhZGRpbmcgdG8gdGhlIHRvcCBhbmQgYm90dG9tIG9mIHRleHQgaGVpZ2h0LlxuICogQHBhcmFtIFtzdHlsZS50ZXh0QmFzZWxpbmU9J2FscGhhYmV0aWMnXSB7c3RyaW5nfSBUaGUgYmFzZWxpbmUgb2YgdGhlIHRleHQgdGhhdCBpcyByZW5kZXJlZC5cbiAqIEBwYXJhbSBbc3R5bGUubGluZUpvaW49J21pdGVyJ10ge3N0cmluZ30gVGhlIGxpbmVKb2luIHByb3BlcnR5IHNldHMgdGhlIHR5cGUgb2YgY29ybmVyIGNyZWF0ZWQsIGl0IGNhbiByZXNvbHZlXG4gKiAgICAgIHNwaWtlZCB0ZXh0IGlzc3Vlcy4gRGVmYXVsdCBpcyAnbWl0ZXInIChjcmVhdGVzIGEgc2hhcnAgY29ybmVyKS5cbiAqIEBwYXJhbSBbc3R5bGUubWl0ZXJMaW1pdD0xMF0ge251bWJlcn0gVGhlIG1pdGVyIGxpbWl0IHRvIHVzZSB3aGVuIHVzaW5nIHRoZSAnbWl0ZXInIGxpbmVKb2luIG1vZGUuIFRoaXMgY2FuIHJlZHVjZVxuICogICAgICBvciBpbmNyZWFzZSB0aGUgc3Bpa2luZXNzIG9mIHJlbmRlcmVkIHRleHQuXG4gKi9cbmZ1bmN0aW9uIFRleHQodGV4dCwgc3R5bGUsIHJlc29sdXRpb24pXG57XG4gICAgLyoqXG4gICAgICogVGhlIGNhbnZhcyBlbGVtZW50IHRoYXQgZXZlcnl0aGluZyBpcyBkcmF3biB0b1xuICAgICAqXG4gICAgICogQG1lbWJlciB7SFRNTENhbnZhc0VsZW1lbnR9XG4gICAgICovXG4gICAgdGhpcy5jYW52YXMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdjYW52YXMnKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBjYW52YXMgMmQgY29udGV4dCB0aGF0IGV2ZXJ5dGhpbmcgaXMgZHJhd24gd2l0aFxuICAgICAqIEBtZW1iZXIge0hUTUxDYW52YXNFbGVtZW50fVxuICAgICAqL1xuICAgIHRoaXMuY29udGV4dCA9IHRoaXMuY2FudmFzLmdldENvbnRleHQoJzJkJyk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgcmVzb2x1dGlvbiBvZiB0aGUgY2FudmFzLlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLnJlc29sdXRpb24gPSByZXNvbHV0aW9uIHx8IENPTlNULlJFU09MVVRJT047XG5cbiAgICAvKipcbiAgICAgKiBQcml2YXRlIHRyYWNrZXIgZm9yIHRoZSBjdXJyZW50IHRleHQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtzdHJpbmd9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl90ZXh0ID0gbnVsbDtcblxuICAgIC8qKlxuICAgICAqIFByaXZhdGUgdHJhY2tlciBmb3IgdGhlIGN1cnJlbnQgc3R5bGUuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtvYmplY3R9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9zdHlsZSA9IG51bGw7XG5cbiAgICB2YXIgdGV4dHVyZSA9IFRleHR1cmUuZnJvbUNhbnZhcyh0aGlzLmNhbnZhcyk7XG4gICAgdGV4dHVyZS50cmltID0gbmV3IG1hdGguUmVjdGFuZ2xlKCk7XG4gICAgU3ByaXRlLmNhbGwodGhpcywgdGV4dHVyZSk7XG5cbiAgICB0aGlzLnRleHQgPSB0ZXh0O1xuICAgIHRoaXMuc3R5bGUgPSBzdHlsZTtcbn1cblxuLy8gY29uc3RydWN0b3JcblRleHQucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShTcHJpdGUucHJvdG90eXBlKTtcblRleHQucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gVGV4dDtcbm1vZHVsZS5leHBvcnRzID0gVGV4dDtcblxuVGV4dC5mb250UHJvcGVydGllc0NhY2hlID0ge307XG5UZXh0LmZvbnRQcm9wZXJ0aWVzQ2FudmFzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnY2FudmFzJyk7XG5UZXh0LmZvbnRQcm9wZXJ0aWVzQ29udGV4dCA9IFRleHQuZm9udFByb3BlcnRpZXNDYW52YXMuZ2V0Q29udGV4dCgnMmQnKTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoVGV4dC5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBUaGUgd2lkdGggb2YgdGhlIFRleHQsIHNldHRpbmcgdGhpcyB3aWxsIGFjdHVhbGx5IG1vZGlmeSB0aGUgc2NhbGUgdG8gYWNoaWV2ZSB0aGUgdmFsdWUgc2V0XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuVGV4dCNcbiAgICAgKi9cbiAgICB3aWR0aDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmRpcnR5KVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlVGV4dCgpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5zY2FsZS54ICogdGhpcy5fdGV4dHVyZS5fZnJhbWUud2lkdGg7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnNjYWxlLnggPSB2YWx1ZSAvIHRoaXMuX3RleHR1cmUuX2ZyYW1lLndpZHRoO1xuICAgICAgICAgICAgdGhpcy5fd2lkdGggPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBUaGUgaGVpZ2h0IG9mIHRoZSBUZXh0LCBzZXR0aW5nIHRoaXMgd2lsbCBhY3R1YWxseSBtb2RpZnkgdGhlIHNjYWxlIHRvIGFjaGlldmUgdGhlIHZhbHVlIHNldFxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLlRleHQjXG4gICAgICovXG4gICAgaGVpZ2h0OiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgaWYgKHRoaXMuZGlydHkpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdGhpcy51cGRhdGVUZXh0KCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiAgdGhpcy5zY2FsZS55ICogdGhpcy5fdGV4dHVyZS5fZnJhbWUuaGVpZ2h0O1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5zY2FsZS55ID0gdmFsdWUgLyB0aGlzLl90ZXh0dXJlLl9mcmFtZS5oZWlnaHQ7XG4gICAgICAgICAgICB0aGlzLl9oZWlnaHQgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBTZXQgdGhlIHN0eWxlIG9mIHRoZSB0ZXh0XG4gICAgICpcbiAgICAgKiBAcGFyYW0gW3N0eWxlXSB7b2JqZWN0fSBUaGUgc3R5bGUgcGFyYW1ldGVyc1xuICAgICAqIEBwYXJhbSBbc3R5bGUuZm9udD0nYm9sZCAyMHB0IEFyaWFsJ10ge3N0cmluZ30gVGhlIHN0eWxlIGFuZCBzaXplIG9mIHRoZSBmb250XG4gICAgICogQHBhcmFtIFtzdHlsZS5maWxsPSdibGFjayddIHtzdHJpbmd8bnVtYmVyfSBBIGNhbnZhcyBmaWxsc3R5bGUgdGhhdCB3aWxsIGJlIHVzZWQgb24gdGhlIHRleHQgZWcgJ3JlZCcsICcjMDBGRjAwJ1xuICAgICAqIEBwYXJhbSBbc3R5bGUuYWxpZ249J2xlZnQnXSB7c3RyaW5nfSBBbGlnbm1lbnQgZm9yIG11bHRpbGluZSB0ZXh0ICgnbGVmdCcsICdjZW50ZXInIG9yICdyaWdodCcpLCBkb2VzIG5vdCBhZmZlY3Qgc2luZ2xlIGxpbmUgdGV4dFxuICAgICAqIEBwYXJhbSBbc3R5bGUuc3Ryb2tlPSdibGFjayddIHtzdHJpbmd8bnVtYmVyfSBBIGNhbnZhcyBmaWxsc3R5bGUgdGhhdCB3aWxsIGJlIHVzZWQgb24gdGhlIHRleHQgc3Ryb2tlIGVnICdibHVlJywgJyNGQ0ZGMDAnXG4gICAgICogQHBhcmFtIFtzdHlsZS5zdHJva2VUaGlja25lc3M9MF0ge251bWJlcn0gQSBudW1iZXIgdGhhdCByZXByZXNlbnRzIHRoZSB0aGlja25lc3Mgb2YgdGhlIHN0cm9rZS4gRGVmYXVsdCBpcyAwIChubyBzdHJva2UpXG4gICAgICogQHBhcmFtIFtzdHlsZS53b3JkV3JhcD1mYWxzZV0ge2Jvb2xlYW59IEluZGljYXRlcyBpZiB3b3JkIHdyYXAgc2hvdWxkIGJlIHVzZWRcbiAgICAgKiBAcGFyYW0gW3N0eWxlLndvcmRXcmFwV2lkdGg9MTAwXSB7bnVtYmVyfSBUaGUgd2lkdGggYXQgd2hpY2ggdGV4dCB3aWxsIHdyYXBcbiAgICAgKiBAcGFyYW0gW3N0eWxlLmxpbmVIZWlnaHRdIHtudW1iZXJ9IFRoZSBsaW5lIGhlaWdodCwgYSBudW1iZXIgdGhhdCByZXByZXNlbnRzIHRoZSB2ZXJ0aWNhbCBzcGFjZSB0aGF0IGEgbGV0dGVyIHVzZXNcbiAgICAgKiBAcGFyYW0gW3N0eWxlLmRyb3BTaGFkb3c9ZmFsc2VdIHtib29sZWFufSBTZXQgYSBkcm9wIHNoYWRvdyBmb3IgdGhlIHRleHRcbiAgICAgKiBAcGFyYW0gW3N0eWxlLmRyb3BTaGFkb3dDb2xvcj0nIzAwMDAwMCddIHtzdHJpbmd8bnVtYmVyfSBBIGZpbGwgc3R5bGUgdG8gYmUgdXNlZCBvbiB0aGUgZHJvcHNoYWRvdyBlLmcgJ3JlZCcsICcjMDBGRjAwJ1xuICAgICAqIEBwYXJhbSBbc3R5bGUuZHJvcFNoYWRvd0FuZ2xlPU1hdGguUEkvNl0ge251bWJlcn0gU2V0IGEgYW5nbGUgb2YgdGhlIGRyb3Agc2hhZG93XG4gICAgICogQHBhcmFtIFtzdHlsZS5kcm9wU2hhZG93RGlzdGFuY2U9NV0ge251bWJlcn0gU2V0IGEgZGlzdGFuY2Ugb2YgdGhlIGRyb3Agc2hhZG93XG4gICAgICogQHBhcmFtIFtzdHlsZS5kcm9wU2hhZG93Qmx1cj0wXSB7bnVtYmVyfSBTZXQgYSBzaGFkb3cgYmx1ciByYWRpdXNcbiAgICAgKiBAcGFyYW0gW3N0eWxlLnBhZGRpbmc9MF0ge251bWJlcn0gT2NjYXNpb25hbGx5IHNvbWUgZm9udHMgYXJlIGNyb3BwZWQgb24gdG9wIG9yIGJvdHRvbS4gQWRkaW5nIHNvbWUgcGFkZGluZyB3aWxsXG4gICAgICogICAgICBwcmV2ZW50IHRoaXMgZnJvbSBoYXBwZW5pbmcgYnkgYWRkaW5nIHBhZGRpbmcgdG8gdGhlIHRvcCBhbmQgYm90dG9tIG9mIHRleHQgaGVpZ2h0LlxuICAgICAqIEBwYXJhbSBbc3R5bGUudGV4dEJhc2VsaW5lPSdhbHBoYWJldGljJ10ge3N0cmluZ30gVGhlIGJhc2VsaW5lIG9mIHRoZSB0ZXh0IHRoYXQgaXMgcmVuZGVyZWQuXG4gICAgICogQHBhcmFtIFtzdHlsZS5saW5lSm9pbj0nbWl0ZXInXSB7c3RyaW5nfSBUaGUgbGluZUpvaW4gcHJvcGVydHkgc2V0cyB0aGUgdHlwZSBvZiBjb3JuZXIgY3JlYXRlZCwgaXQgY2FuIHJlc29sdmVcbiAgICAgKiAgICAgIHNwaWtlZCB0ZXh0IGlzc3Vlcy4gRGVmYXVsdCBpcyAnbWl0ZXInIChjcmVhdGVzIGEgc2hhcnAgY29ybmVyKS5cbiAgICAgKiBAcGFyYW0gW3N0eWxlLm1pdGVyTGltaXQ9MTBdIHtudW1iZXJ9IFRoZSBtaXRlciBsaW1pdCB0byB1c2Ugd2hlbiB1c2luZyB0aGUgJ21pdGVyJyBsaW5lSm9pbiBtb2RlLiBUaGlzIGNhbiByZWR1Y2VcbiAgICAgKiAgICAgIG9yIGluY3JlYXNlIHRoZSBzcGlraW5lc3Mgb2YgcmVuZGVyZWQgdGV4dC5cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5UZXh0I1xuICAgICAqL1xuICAgIHN0eWxlOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3N0eWxlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uIChzdHlsZSlcbiAgICAgICAge1xuICAgICAgICAgICAgc3R5bGUgPSBzdHlsZSB8fCB7fTtcblxuICAgICAgICAgICAgaWYgKHR5cGVvZiBzdHlsZS5maWxsID09PSAnbnVtYmVyJykge1xuICAgICAgICAgICAgICAgIHN0eWxlLmZpbGwgPSB1dGlscy5oZXgyc3RyaW5nKHN0eWxlLmZpbGwpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAodHlwZW9mIHN0eWxlLnN0cm9rZSA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgICAgICAgICBzdHlsZS5zdHJva2UgPSB1dGlscy5oZXgyc3RyaW5nKHN0eWxlLnN0cm9rZSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICh0eXBlb2Ygc3R5bGUuZHJvcFNoYWRvd0NvbG9yID09PSAnbnVtYmVyJykge1xuICAgICAgICAgICAgICAgIHN0eWxlLmRyb3BTaGFkb3dDb2xvciA9IHV0aWxzLmhleDJzdHJpbmcoc3R5bGUuZHJvcFNoYWRvd0NvbG9yKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgc3R5bGUuZm9udCA9IHN0eWxlLmZvbnQgfHwgJ2JvbGQgMjBwdCBBcmlhbCc7XG4gICAgICAgICAgICBzdHlsZS5maWxsID0gc3R5bGUuZmlsbCB8fCAnYmxhY2snO1xuICAgICAgICAgICAgc3R5bGUuYWxpZ24gPSBzdHlsZS5hbGlnbiB8fCAnbGVmdCc7XG4gICAgICAgICAgICBzdHlsZS5zdHJva2UgPSBzdHlsZS5zdHJva2UgfHwgJ2JsYWNrJzsgLy9wcm92aWRlIGEgZGVmYXVsdCwgc2VlOiBodHRwczovL2dpdGh1Yi5jb20vcGl4aWpzL3BpeGkuanMvaXNzdWVzLzEzNlxuICAgICAgICAgICAgc3R5bGUuc3Ryb2tlVGhpY2tuZXNzID0gc3R5bGUuc3Ryb2tlVGhpY2tuZXNzIHx8IDA7XG4gICAgICAgICAgICBzdHlsZS53b3JkV3JhcCA9IHN0eWxlLndvcmRXcmFwIHx8IGZhbHNlO1xuICAgICAgICAgICAgc3R5bGUud29yZFdyYXBXaWR0aCA9IHN0eWxlLndvcmRXcmFwV2lkdGggfHwgMTAwO1xuXG4gICAgICAgICAgICBzdHlsZS5kcm9wU2hhZG93ID0gc3R5bGUuZHJvcFNoYWRvdyB8fCBmYWxzZTtcbiAgICAgICAgICAgIHN0eWxlLmRyb3BTaGFkb3dDb2xvciA9IHN0eWxlLmRyb3BTaGFkb3dDb2xvciB8fCAnIzAwMDAwMCc7XG4gICAgICAgICAgICBzdHlsZS5kcm9wU2hhZG93QW5nbGUgPSBzdHlsZS5kcm9wU2hhZG93QW5nbGUgIT09IHVuZGVmaW5lZCA/IHN0eWxlLmRyb3BTaGFkb3dBbmdsZSA6IE1hdGguUEkgLyA2O1xuICAgICAgICAgICAgc3R5bGUuZHJvcFNoYWRvd0Rpc3RhbmNlID0gc3R5bGUuZHJvcFNoYWRvd0Rpc3RhbmNlICE9PSB1bmRlZmluZWQgPyBzdHlsZS5kcm9wU2hhZG93RGlzdGFuY2UgOiA1O1xuICAgICAgICAgICAgc3R5bGUuZHJvcFNoYWRvd0JsdXIgPSBzdHlsZS5kcm9wU2hhZG93Qmx1ciAhPT0gdW5kZWZpbmVkID8gc3R5bGUuZHJvcFNoYWRvd0JsdXIgOiAwOyAvL3NoYWRvd0JsdXIgaXMgJzAnIGJ5IGRlZmF1bHQgYWNjb3JkaW5nIHRvIEhUTUxcblxuICAgICAgICAgICAgc3R5bGUucGFkZGluZyA9IHN0eWxlLnBhZGRpbmcgfHwgMDtcblxuICAgICAgICAgICAgc3R5bGUudGV4dEJhc2VsaW5lID0gc3R5bGUudGV4dEJhc2VsaW5lIHx8ICdhbHBoYWJldGljJztcblxuICAgICAgICAgICAgc3R5bGUubGluZUpvaW4gPSBzdHlsZS5saW5lSm9pbiB8fCAnbWl0ZXInO1xuICAgICAgICAgICAgc3R5bGUubWl0ZXJMaW1pdCA9IHN0eWxlLm1pdGVyTGltaXQgfHwgMTA7XG5cbiAgICAgICAgICAgIHRoaXMuX3N0eWxlID0gc3R5bGU7XG4gICAgICAgICAgICB0aGlzLmRpcnR5ID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBTZXQgdGhlIGNvcHkgZm9yIHRoZSB0ZXh0IG9iamVjdC4gVG8gc3BsaXQgYSBsaW5lIHlvdSBjYW4gdXNlICdcXG4nLlxuICAgICAqXG4gICAgICogQHBhcmFtIHRleHQge3N0cmluZ30gVGhlIGNvcHkgdGhhdCB5b3Ugd291bGQgbGlrZSB0aGUgdGV4dCB0byBkaXNwbGF5XG4gICAgICogQG1lbWJlcm9mIFBJWEkuVGV4dCNcbiAgICAgKi9cbiAgICB0ZXh0OiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24oKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fdGV4dDtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodGV4dCl7XG4gICAgICAgICAgICB0ZXh0ID0gdGV4dC50b1N0cmluZygpIHx8ICcgJztcbiAgICAgICAgICAgIGlmICh0aGlzLl90ZXh0ID09PSB0ZXh0KVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuX3RleHQgPSB0ZXh0O1xuICAgICAgICAgICAgdGhpcy5kaXJ0eSA9IHRydWU7XG4gICAgICAgIH1cbiAgICB9XG59KTtcblxuLyoqXG4gKiBSZW5kZXJzIHRleHQgYW5kIHVwZGF0ZXMgaXQgd2hlbiBuZWVkZWRcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5UZXh0LnByb3RvdHlwZS51cGRhdGVUZXh0ID0gZnVuY3Rpb24gKClcbntcbiAgICB2YXIgc3R5bGUgPSB0aGlzLl9zdHlsZTtcbiAgICB0aGlzLmNvbnRleHQuZm9udCA9IHN0eWxlLmZvbnQ7XG5cbiAgICAvLyB3b3JkIHdyYXBcbiAgICAvLyBwcmVzZXJ2ZSBvcmlnaW5hbCB0ZXh0XG4gICAgdmFyIG91dHB1dFRleHQgPSBzdHlsZS53b3JkV3JhcCA/IHRoaXMud29yZFdyYXAodGhpcy5fdGV4dCkgOiB0aGlzLl90ZXh0O1xuXG4gICAgLy8gc3BsaXQgdGV4dCBpbnRvIGxpbmVzXG4gICAgdmFyIGxpbmVzID0gb3V0cHV0VGV4dC5zcGxpdCgvKD86XFxyXFxufFxccnxcXG4pLyk7XG5cbiAgICAvLyBjYWxjdWxhdGUgdGV4dCB3aWR0aFxuICAgIHZhciBsaW5lV2lkdGhzID0gbmV3IEFycmF5KGxpbmVzLmxlbmd0aCk7XG4gICAgdmFyIG1heExpbmVXaWR0aCA9IDA7XG4gICAgdmFyIGZvbnRQcm9wZXJ0aWVzID0gdGhpcy5kZXRlcm1pbmVGb250UHJvcGVydGllcyhzdHlsZS5mb250KTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxpbmVzLmxlbmd0aDsgaSsrKVxuICAgIHtcbiAgICAgICAgdmFyIGxpbmVXaWR0aCA9IHRoaXMuY29udGV4dC5tZWFzdXJlVGV4dChsaW5lc1tpXSkud2lkdGg7XG4gICAgICAgIGxpbmVXaWR0aHNbaV0gPSBsaW5lV2lkdGg7XG4gICAgICAgIG1heExpbmVXaWR0aCA9IE1hdGgubWF4KG1heExpbmVXaWR0aCwgbGluZVdpZHRoKTtcbiAgICB9XG5cbiAgICB2YXIgd2lkdGggPSBtYXhMaW5lV2lkdGggKyBzdHlsZS5zdHJva2VUaGlja25lc3M7XG4gICAgaWYgKHN0eWxlLmRyb3BTaGFkb3cpXG4gICAge1xuICAgICAgICB3aWR0aCArPSBzdHlsZS5kcm9wU2hhZG93RGlzdGFuY2U7XG4gICAgfVxuXG4gICAgdGhpcy5jYW52YXMud2lkdGggPSAoIHdpZHRoICsgdGhpcy5jb250ZXh0LmxpbmVXaWR0aCApICogdGhpcy5yZXNvbHV0aW9uO1xuXG4gICAgLy8gY2FsY3VsYXRlIHRleHQgaGVpZ2h0XG4gICAgdmFyIGxpbmVIZWlnaHQgPSB0aGlzLnN0eWxlLmxpbmVIZWlnaHQgfHwgZm9udFByb3BlcnRpZXMuZm9udFNpemUgKyBzdHlsZS5zdHJva2VUaGlja25lc3M7XG5cbiAgICB2YXIgaGVpZ2h0ID0gbGluZUhlaWdodCAqIGxpbmVzLmxlbmd0aDtcbiAgICBpZiAoc3R5bGUuZHJvcFNoYWRvdylcbiAgICB7XG4gICAgICAgIGhlaWdodCArPSBzdHlsZS5kcm9wU2hhZG93RGlzdGFuY2U7XG4gICAgfVxuXG4gICAgdGhpcy5jYW52YXMuaGVpZ2h0ID0gKCBoZWlnaHQgKyB0aGlzLl9zdHlsZS5wYWRkaW5nICogMiApICogdGhpcy5yZXNvbHV0aW9uO1xuXG4gICAgdGhpcy5jb250ZXh0LnNjYWxlKCB0aGlzLnJlc29sdXRpb24sIHRoaXMucmVzb2x1dGlvbik7XG5cbiAgICBpZiAobmF2aWdhdG9yLmlzQ29jb29uSlMpXG4gICAge1xuICAgICAgICB0aGlzLmNvbnRleHQuY2xlYXJSZWN0KDAsIDAsIHRoaXMuY2FudmFzLndpZHRoLCB0aGlzLmNhbnZhcy5oZWlnaHQpO1xuXG4gICAgfVxuXG4gICAgLy90aGlzLmNvbnRleHQuZmlsbFN0eWxlPVwiI0ZGMDAwMFwiO1xuICAgIC8vdGhpcy5jb250ZXh0LmZpbGxSZWN0KDAsIDAsIHRoaXMuY2FudmFzLndpZHRoLCB0aGlzLmNhbnZhcy5oZWlnaHQpO1xuXG4gICAgdGhpcy5jb250ZXh0LmZvbnQgPSBzdHlsZS5mb250O1xuICAgIHRoaXMuY29udGV4dC5zdHJva2VTdHlsZSA9IHN0eWxlLnN0cm9rZTtcbiAgICB0aGlzLmNvbnRleHQubGluZVdpZHRoID0gc3R5bGUuc3Ryb2tlVGhpY2tuZXNzO1xuICAgIHRoaXMuY29udGV4dC50ZXh0QmFzZWxpbmUgPSBzdHlsZS50ZXh0QmFzZWxpbmU7XG4gICAgdGhpcy5jb250ZXh0LmxpbmVKb2luID0gc3R5bGUubGluZUpvaW47XG4gICAgdGhpcy5jb250ZXh0Lm1pdGVyTGltaXQgPSBzdHlsZS5taXRlckxpbWl0O1xuXG4gICAgdmFyIGxpbmVQb3NpdGlvblg7XG4gICAgdmFyIGxpbmVQb3NpdGlvblk7XG5cbiAgICBpZiAoc3R5bGUuZHJvcFNoYWRvdylcbiAgICB7XG4gICAgICAgIGlmIChzdHlsZS5kcm9wU2hhZG93Qmx1ciA+IDApIHtcbiAgICAgICAgICAgIHRoaXMuY29udGV4dC5zaGFkb3dDb2xvciA9IHN0eWxlLmRyb3BTaGFkb3dDb2xvcjtcbiAgICAgICAgICAgIHRoaXMuY29udGV4dC5zaGFkb3dCbHVyID0gc3R5bGUuZHJvcFNoYWRvd0JsdXI7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmNvbnRleHQuZmlsbFN0eWxlID0gc3R5bGUuZHJvcFNoYWRvd0NvbG9yO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIHhTaGFkb3dPZmZzZXQgPSBNYXRoLmNvcyhzdHlsZS5kcm9wU2hhZG93QW5nbGUpICogc3R5bGUuZHJvcFNoYWRvd0Rpc3RhbmNlO1xuICAgICAgICB2YXIgeVNoYWRvd09mZnNldCA9IE1hdGguc2luKHN0eWxlLmRyb3BTaGFkb3dBbmdsZSkgKiBzdHlsZS5kcm9wU2hhZG93RGlzdGFuY2U7XG5cbiAgICAgICAgZm9yIChpID0gMDsgaSA8IGxpbmVzLmxlbmd0aDsgaSsrKVxuICAgICAgICB7XG4gICAgICAgICAgICBsaW5lUG9zaXRpb25YID0gc3R5bGUuc3Ryb2tlVGhpY2tuZXNzIC8gMjtcbiAgICAgICAgICAgIGxpbmVQb3NpdGlvblkgPSAoc3R5bGUuc3Ryb2tlVGhpY2tuZXNzIC8gMiArIGkgKiBsaW5lSGVpZ2h0KSArIGZvbnRQcm9wZXJ0aWVzLmFzY2VudDtcblxuICAgICAgICAgICAgaWYgKHN0eWxlLmFsaWduID09PSAncmlnaHQnKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGxpbmVQb3NpdGlvblggKz0gbWF4TGluZVdpZHRoIC0gbGluZVdpZHRoc1tpXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKHN0eWxlLmFsaWduID09PSAnY2VudGVyJylcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBsaW5lUG9zaXRpb25YICs9IChtYXhMaW5lV2lkdGggLSBsaW5lV2lkdGhzW2ldKSAvIDI7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChzdHlsZS5maWxsKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHRoaXMuY29udGV4dC5maWxsVGV4dChsaW5lc1tpXSwgbGluZVBvc2l0aW9uWCArIHhTaGFkb3dPZmZzZXQsIGxpbmVQb3NpdGlvblkgKyB5U2hhZG93T2Zmc2V0ICsgdGhpcy5fc3R5bGUucGFkZGluZyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvL3NldCBjYW52YXMgdGV4dCBzdHlsZXNcbiAgICB0aGlzLmNvbnRleHQuZmlsbFN0eWxlID0gc3R5bGUuZmlsbDtcblxuICAgIC8vZHJhdyBsaW5lcyBsaW5lIGJ5IGxpbmVcbiAgICBmb3IgKGkgPSAwOyBpIDwgbGluZXMubGVuZ3RoOyBpKyspXG4gICAge1xuICAgICAgICBsaW5lUG9zaXRpb25YID0gc3R5bGUuc3Ryb2tlVGhpY2tuZXNzIC8gMjtcbiAgICAgICAgbGluZVBvc2l0aW9uWSA9IChzdHlsZS5zdHJva2VUaGlja25lc3MgLyAyICsgaSAqIGxpbmVIZWlnaHQpICsgZm9udFByb3BlcnRpZXMuYXNjZW50O1xuXG4gICAgICAgIGlmIChzdHlsZS5hbGlnbiA9PT0gJ3JpZ2h0JylcbiAgICAgICAge1xuICAgICAgICAgICAgbGluZVBvc2l0aW9uWCArPSBtYXhMaW5lV2lkdGggLSBsaW5lV2lkdGhzW2ldO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHN0eWxlLmFsaWduID09PSAnY2VudGVyJylcbiAgICAgICAge1xuICAgICAgICAgICAgbGluZVBvc2l0aW9uWCArPSAobWF4TGluZVdpZHRoIC0gbGluZVdpZHRoc1tpXSkgLyAyO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHN0eWxlLnN0cm9rZSAmJiBzdHlsZS5zdHJva2VUaGlja25lc3MpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuY29udGV4dC5zdHJva2VUZXh0KGxpbmVzW2ldLCBsaW5lUG9zaXRpb25YLCBsaW5lUG9zaXRpb25ZICsgdGhpcy5fc3R5bGUucGFkZGluZyk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoc3R5bGUuZmlsbClcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5jb250ZXh0LmZpbGxUZXh0KGxpbmVzW2ldLCBsaW5lUG9zaXRpb25YLCBsaW5lUG9zaXRpb25ZICsgdGhpcy5fc3R5bGUucGFkZGluZyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLnVwZGF0ZVRleHR1cmUoKTtcbn07XG5cbi8qKlxuICogVXBkYXRlcyB0ZXh0dXJlIHNpemUgYmFzZWQgb24gY2FudmFzIHNpemVcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5UZXh0LnByb3RvdHlwZS51cGRhdGVUZXh0dXJlID0gZnVuY3Rpb24gKClcbntcbiAgICB2YXIgdGV4dHVyZSA9IHRoaXMuX3RleHR1cmU7XG5cbiAgICB0ZXh0dXJlLmJhc2VUZXh0dXJlLmhhc0xvYWRlZCA9IHRydWU7XG4gICAgdGV4dHVyZS5iYXNlVGV4dHVyZS5yZXNvbHV0aW9uID0gdGhpcy5yZXNvbHV0aW9uO1xuXG4gICAgdGV4dHVyZS5iYXNlVGV4dHVyZS53aWR0aCA9IHRoaXMuY2FudmFzLndpZHRoIC8gdGhpcy5yZXNvbHV0aW9uO1xuICAgIHRleHR1cmUuYmFzZVRleHR1cmUuaGVpZ2h0ID0gdGhpcy5jYW52YXMuaGVpZ2h0IC8gdGhpcy5yZXNvbHV0aW9uO1xuICAgIHRleHR1cmUuY3JvcC53aWR0aCA9IHRleHR1cmUuX2ZyYW1lLndpZHRoID0gdGhpcy5jYW52YXMud2lkdGggLyB0aGlzLnJlc29sdXRpb247XG4gICAgdGV4dHVyZS5jcm9wLmhlaWdodCA9IHRleHR1cmUuX2ZyYW1lLmhlaWdodCA9IHRoaXMuY2FudmFzLmhlaWdodCAvIHRoaXMucmVzb2x1dGlvbjtcblxuICAgIHRleHR1cmUudHJpbS54ID0gMDtcbiAgICB0ZXh0dXJlLnRyaW0ueSA9IC10aGlzLl9zdHlsZS5wYWRkaW5nO1xuXG4gICAgdGV4dHVyZS50cmltLndpZHRoID0gdGV4dHVyZS5fZnJhbWUud2lkdGg7XG4gICAgdGV4dHVyZS50cmltLmhlaWdodCA9IHRleHR1cmUuX2ZyYW1lLmhlaWdodCAtIHRoaXMuX3N0eWxlLnBhZGRpbmcqMjtcblxuICAgIHRoaXMuX3dpZHRoID0gdGhpcy5jYW52YXMud2lkdGggLyB0aGlzLnJlc29sdXRpb247XG4gICAgdGhpcy5faGVpZ2h0ID0gdGhpcy5jYW52YXMuaGVpZ2h0IC8gdGhpcy5yZXNvbHV0aW9uO1xuXG4gICAgdGV4dHVyZS5iYXNlVGV4dHVyZS5lbWl0KCd1cGRhdGUnLCAgdGV4dHVyZS5iYXNlVGV4dHVyZSk7XG5cbiAgICB0aGlzLmRpcnR5ID0gZmFsc2U7XG59O1xuXG4vKipcbiAqIFJlbmRlcnMgdGhlIG9iamVjdCB1c2luZyB0aGUgV2ViR0wgcmVuZGVyZXJcbiAqXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcn1cbiAqL1xuVGV4dC5wcm90b3R5cGUucmVuZGVyV2ViR0wgPSBmdW5jdGlvbiAocmVuZGVyZXIpXG57XG4gICAgaWYgKHRoaXMuZGlydHkpXG4gICAge1xuICAgICAgICAvL3RoaXMucmVzb2x1dGlvbiA9IDEvL3JlbmRlcmVyLnJlc29sdXRpb247XG5cbiAgICAgICAgdGhpcy51cGRhdGVUZXh0KCk7XG4gICAgfVxuXG4gICAgU3ByaXRlLnByb3RvdHlwZS5yZW5kZXJXZWJHTC5jYWxsKHRoaXMsIHJlbmRlcmVyKTtcbn07XG5cbi8qKlxuICogUmVuZGVycyB0aGUgb2JqZWN0IHVzaW5nIHRoZSBDYW52YXMgcmVuZGVyZXJcbiAqXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuQ2FudmFzUmVuZGVyZXJ9XG4gKiBAcHJpdmF0ZVxuICovXG5UZXh0LnByb3RvdHlwZS5fcmVuZGVyQ2FudmFzID0gZnVuY3Rpb24gKHJlbmRlcmVyKVxue1xuICAgIGlmICh0aGlzLmRpcnR5KVxuICAgIHtcbiAgICAgLy8gICB0aGlzLnJlc29sdXRpb24gPSAxLy9yZW5kZXJlci5yZXNvbHV0aW9uO1xuXG4gICAgICAgIHRoaXMudXBkYXRlVGV4dCgpO1xuICAgIH1cblxuICAgIFNwcml0ZS5wcm90b3R5cGUuX3JlbmRlckNhbnZhcy5jYWxsKHRoaXMsIHJlbmRlcmVyKTtcbn07XG5cbi8qKlxuICogQ2FsY3VsYXRlcyB0aGUgYXNjZW50LCBkZXNjZW50IGFuZCBmb250U2l6ZSBvZiBhIGdpdmVuIGZvbnRTdHlsZVxuICpcbiAqIEBwYXJhbSBmb250U3R5bGUge29iamVjdH1cbiAqIEBwcml2YXRlXG4gKi9cblRleHQucHJvdG90eXBlLmRldGVybWluZUZvbnRQcm9wZXJ0aWVzID0gZnVuY3Rpb24gKGZvbnRTdHlsZSlcbntcbiAgICB2YXIgcHJvcGVydGllcyA9IFRleHQuZm9udFByb3BlcnRpZXNDYWNoZVtmb250U3R5bGVdO1xuXG4gICAgaWYgKCFwcm9wZXJ0aWVzKVxuICAgIHtcbiAgICAgICAgcHJvcGVydGllcyA9IHt9O1xuXG4gICAgICAgIHZhciBjYW52YXMgPSBUZXh0LmZvbnRQcm9wZXJ0aWVzQ2FudmFzO1xuICAgICAgICB2YXIgY29udGV4dCA9IFRleHQuZm9udFByb3BlcnRpZXNDb250ZXh0O1xuXG4gICAgICAgIGNvbnRleHQuZm9udCA9IGZvbnRTdHlsZTtcblxuICAgICAgICB2YXIgd2lkdGggPSBNYXRoLmNlaWwoY29udGV4dC5tZWFzdXJlVGV4dCgnfE3DiXEnKS53aWR0aCk7XG4gICAgICAgIHZhciBiYXNlbGluZSA9IE1hdGguY2VpbChjb250ZXh0Lm1lYXN1cmVUZXh0KCdNJykud2lkdGgpO1xuICAgICAgICB2YXIgaGVpZ2h0ID0gMiAqIGJhc2VsaW5lO1xuXG4gICAgICAgIGJhc2VsaW5lID0gYmFzZWxpbmUgKiAxLjQgfCAwO1xuXG4gICAgICAgIGNhbnZhcy53aWR0aCA9IHdpZHRoO1xuICAgICAgICBjYW52YXMuaGVpZ2h0ID0gaGVpZ2h0O1xuXG4gICAgICAgIGNvbnRleHQuZmlsbFN0eWxlID0gJyNmMDAnO1xuICAgICAgICBjb250ZXh0LmZpbGxSZWN0KDAsIDAsIHdpZHRoLCBoZWlnaHQpO1xuXG4gICAgICAgIGNvbnRleHQuZm9udCA9IGZvbnRTdHlsZTtcblxuICAgICAgICBjb250ZXh0LnRleHRCYXNlbGluZSA9ICdhbHBoYWJldGljJztcbiAgICAgICAgY29udGV4dC5maWxsU3R5bGUgPSAnIzAwMCc7XG4gICAgICAgIGNvbnRleHQuZmlsbFRleHQoJ3xNw4lxJywgMCwgYmFzZWxpbmUpO1xuXG4gICAgICAgIHZhciBpbWFnZWRhdGEgPSBjb250ZXh0LmdldEltYWdlRGF0YSgwLCAwLCB3aWR0aCwgaGVpZ2h0KS5kYXRhO1xuICAgICAgICB2YXIgcGl4ZWxzID0gaW1hZ2VkYXRhLmxlbmd0aDtcbiAgICAgICAgdmFyIGxpbmUgPSB3aWR0aCAqIDQ7XG5cbiAgICAgICAgdmFyIGksIGo7XG5cbiAgICAgICAgdmFyIGlkeCA9IDA7XG4gICAgICAgIHZhciBzdG9wID0gZmFsc2U7XG5cbiAgICAgICAgLy8gYXNjZW50LiBzY2FuIGZyb20gdG9wIHRvIGJvdHRvbSB1bnRpbCB3ZSBmaW5kIGEgbm9uIHJlZCBwaXhlbFxuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgYmFzZWxpbmU7IGkrKylcbiAgICAgICAge1xuICAgICAgICAgICAgZm9yIChqID0gMDsgaiA8IGxpbmU7IGogKz0gNClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBpZiAoaW1hZ2VkYXRhW2lkeCArIGpdICE9PSAyNTUpXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBzdG9wID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCFzdG9wKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGlkeCArPSBsaW5lO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcHJvcGVydGllcy5hc2NlbnQgPSBiYXNlbGluZSAtIGk7XG5cbiAgICAgICAgaWR4ID0gcGl4ZWxzIC0gbGluZTtcbiAgICAgICAgc3RvcCA9IGZhbHNlO1xuXG4gICAgICAgIC8vIGRlc2NlbnQuIHNjYW4gZnJvbSBib3R0b20gdG8gdG9wIHVudGlsIHdlIGZpbmQgYSBub24gcmVkIHBpeGVsXG4gICAgICAgIGZvciAoaSA9IGhlaWdodDsgaSA+IGJhc2VsaW5lOyBpLS0pXG4gICAgICAgIHtcbiAgICAgICAgICAgIGZvciAoaiA9IDA7IGogPCBsaW5lOyBqICs9IDQpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgaWYgKGltYWdlZGF0YVtpZHggKyBqXSAhPT0gMjU1KVxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgc3RvcCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghc3RvcClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBpZHggLT0gbGluZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHByb3BlcnRpZXMuZGVzY2VudCA9IGkgLSBiYXNlbGluZTtcbiAgICAgICAgcHJvcGVydGllcy5mb250U2l6ZSA9IHByb3BlcnRpZXMuYXNjZW50ICsgcHJvcGVydGllcy5kZXNjZW50O1xuXG4gICAgICAgIFRleHQuZm9udFByb3BlcnRpZXNDYWNoZVtmb250U3R5bGVdID0gcHJvcGVydGllcztcbiAgICB9XG5cbiAgICByZXR1cm4gcHJvcGVydGllcztcbn07XG5cbi8qKlxuICogQXBwbGllcyBuZXdsaW5lcyB0byBhIHN0cmluZyB0byBoYXZlIGl0IG9wdGltYWxseSBmaXQgaW50byB0aGUgaG9yaXpvbnRhbFxuICogYm91bmRzIHNldCBieSB0aGUgVGV4dCBvYmplY3QncyB3b3JkV3JhcFdpZHRoIHByb3BlcnR5LlxuICpcbiAqIEBwYXJhbSB0ZXh0IHtzdHJpbmd9XG4gKiBAcHJpdmF0ZVxuICovXG5UZXh0LnByb3RvdHlwZS53b3JkV3JhcCA9IGZ1bmN0aW9uICh0ZXh0KVxue1xuICAgIC8vIEdyZWVkeSB3cmFwcGluZyBhbGdvcml0aG0gdGhhdCB3aWxsIHdyYXAgd29yZHMgYXMgdGhlIGxpbmUgZ3Jvd3MgbG9uZ2VyXG4gICAgLy8gdGhhbiBpdHMgaG9yaXpvbnRhbCBib3VuZHMuXG4gICAgdmFyIHJlc3VsdCA9ICcnO1xuICAgIHZhciBsaW5lcyA9IHRleHQuc3BsaXQoJ1xcbicpO1xuICAgIHZhciB3b3JkV3JhcFdpZHRoID0gdGhpcy5fc3R5bGUud29yZFdyYXBXaWR0aDtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxpbmVzLmxlbmd0aDsgaSsrKVxuICAgIHtcbiAgICAgICAgdmFyIHNwYWNlTGVmdCA9IHdvcmRXcmFwV2lkdGg7XG4gICAgICAgIHZhciB3b3JkcyA9IGxpbmVzW2ldLnNwbGl0KCcgJyk7XG4gICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgd29yZHMubGVuZ3RoOyBqKyspXG4gICAgICAgIHtcbiAgICAgICAgICAgIHZhciB3b3JkV2lkdGggPSB0aGlzLmNvbnRleHQubWVhc3VyZVRleHQod29yZHNbal0pLndpZHRoO1xuICAgICAgICAgICAgdmFyIHdvcmRXaWR0aFdpdGhTcGFjZSA9IHdvcmRXaWR0aCArIHRoaXMuY29udGV4dC5tZWFzdXJlVGV4dCgnICcpLndpZHRoO1xuICAgICAgICAgICAgaWYgKGogPT09IDAgfHwgd29yZFdpZHRoV2l0aFNwYWNlID4gc3BhY2VMZWZ0KVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIC8vIFNraXAgcHJpbnRpbmcgdGhlIG5ld2xpbmUgaWYgaXQncyB0aGUgZmlyc3Qgd29yZCBvZiB0aGUgbGluZSB0aGF0IGlzXG4gICAgICAgICAgICAgICAgLy8gZ3JlYXRlciB0aGFuIHRoZSB3b3JkIHdyYXAgd2lkdGguXG4gICAgICAgICAgICAgICAgaWYgKGogPiAwKVxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0ICs9ICdcXG4nO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXN1bHQgKz0gd29yZHNbal07XG4gICAgICAgICAgICAgICAgc3BhY2VMZWZ0ID0gd29yZFdyYXBXaWR0aCAtIHdvcmRXaWR0aDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBzcGFjZUxlZnQgLT0gd29yZFdpZHRoV2l0aFNwYWNlO1xuICAgICAgICAgICAgICAgIHJlc3VsdCArPSAnICcgKyB3b3Jkc1tqXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChpIDwgbGluZXMubGVuZ3RoLTEpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJlc3VsdCArPSAnXFxuJztcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xufTtcblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBib3VuZHMgb2YgdGhlIFRleHQgYXMgYSByZWN0YW5nbGUuIFRoZSBib3VuZHMgY2FsY3VsYXRpb24gdGFrZXMgdGhlIHdvcmxkVHJhbnNmb3JtIGludG8gYWNjb3VudC5cbiAqXG4gKiBAcGFyYW0gbWF0cml4IHtQSVhJLk1hdHJpeH0gdGhlIHRyYW5zZm9ybWF0aW9uIG1hdHJpeCBvZiB0aGUgVGV4dFxuICogQHJldHVybiB7UElYSS5SZWN0YW5nbGV9IHRoZSBmcmFtaW5nIHJlY3RhbmdsZVxuICovXG5UZXh0LnByb3RvdHlwZS5nZXRCb3VuZHMgPSBmdW5jdGlvbiAobWF0cml4KVxue1xuICAgIGlmICh0aGlzLmRpcnR5KVxuICAgIHtcbiAgICAgICAgdGhpcy51cGRhdGVUZXh0KCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIFNwcml0ZS5wcm90b3R5cGUuZ2V0Qm91bmRzLmNhbGwodGhpcywgbWF0cml4KTtcbn07XG5cbi8qKlxuICogRGVzdHJveXMgdGhpcyB0ZXh0IG9iamVjdC5cbiAqXG4gKiBAcGFyYW0gW2Rlc3Ryb3lCYXNlVGV4dHVyZT10cnVlXSB7Ym9vbGVhbn0gd2hldGhlciB0byBkZXN0cm95IHRoZSBiYXNlIHRleHR1cmUgYXMgd2VsbFxuICovXG5UZXh0LnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKGRlc3Ryb3lCYXNlVGV4dHVyZSlcbntcbiAgICAvLyBtYWtlIHN1cmUgdG8gcmVzZXQgdGhlIHRoZSBjb250ZXh0IGFuZCBjYW52YXMuLiBkb250IHdhbnQgdGhpcyBoYW5naW5nIGFyb3VuZCBpbiBtZW1vcnkhXG4gICAgdGhpcy5jb250ZXh0ID0gbnVsbDtcbiAgICB0aGlzLmNhbnZhcyA9IG51bGw7XG5cbiAgICB0aGlzLl9zdHlsZSA9IG51bGw7XG5cbiAgICB0aGlzLl90ZXh0dXJlLmRlc3Ryb3koZGVzdHJveUJhc2VUZXh0dXJlID09PSB1bmRlZmluZWQgPyB0cnVlIDogZGVzdHJveUJhc2VUZXh0dXJlKTtcbn07XG4iLCJ2YXIgdXRpbHMgPSByZXF1aXJlKCcuLi91dGlscycpLFxuICAgIENPTlNUID0gcmVxdWlyZSgnLi4vY29uc3QnKSxcbiAgICBFdmVudEVtaXR0ZXIgPSByZXF1aXJlKCdldmVudGVtaXR0ZXIzJyk7XG5cbi8qKlxuICogQSB0ZXh0dXJlIHN0b3JlcyB0aGUgaW5mb3JtYXRpb24gdGhhdCByZXByZXNlbnRzIGFuIGltYWdlLiBBbGwgdGV4dHVyZXMgaGF2ZSBhIGJhc2UgdGV4dHVyZS5cbiAqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gc291cmNlIHtJbWFnZXxDYW52YXN9IHRoZSBzb3VyY2Ugb2JqZWN0IG9mIHRoZSB0ZXh0dXJlLlxuICogQHBhcmFtIFtzY2FsZU1vZGU9UElYSS5TQ0FMRV9NT0RFUy5ERUZBVUxUXSB7bnVtYmVyfSBTZWUge0BsaW5rIFBJWEkuU0NBTEVfTU9ERVN9IGZvciBwb3NzaWJsZSB2YWx1ZXNcbiAqIEBwYXJhbSByZXNvbHV0aW9uIHtudW1iZXJ9IHRoZSByZXNvbHV0aW9uIG9mIHRoZSB0ZXh0dXJlIGZvciBkZXZpY2VzIHdpdGggZGlmZmVyZW50IHBpeGVsIHJhdGlvc1xuICovXG5mdW5jdGlvbiBCYXNlVGV4dHVyZShzb3VyY2UsIHNjYWxlTW9kZSwgcmVzb2x1dGlvbilcbntcbiAgICBFdmVudEVtaXR0ZXIuY2FsbCh0aGlzKTtcblxuICAgIHRoaXMudWlkID0gdXRpbHMudWlkKCk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgUmVzb2x1dGlvbiBvZiB0aGUgdGV4dHVyZS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLnJlc29sdXRpb24gPSByZXNvbHV0aW9uIHx8IDE7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgd2lkdGggb2YgdGhlIGJhc2UgdGV4dHVyZSBzZXQgd2hlbiB0aGUgaW1hZ2UgaGFzIGxvYWRlZFxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEByZWFkT25seVxuICAgICAqL1xuICAgIHRoaXMud2lkdGggPSAxMDA7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgaGVpZ2h0IG9mIHRoZSBiYXNlIHRleHR1cmUgc2V0IHdoZW4gdGhlIGltYWdlIGhhcyBsb2FkZWRcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAcmVhZE9ubHlcbiAgICAgKi9cbiAgICB0aGlzLmhlaWdodCA9IDEwMDtcblxuICAgIC8vIFRPRE8gZG9jc1xuICAgIC8vIHVzZWQgdG8gc3RvcmUgdGhlIGFjdHVhbCBkaW1lbnNpb25zIG9mIHRoZSBzb3VyY2VcbiAgICAvKipcbiAgICAgKiBVc2VkIHRvIHN0b3JlIHRoZSBhY3R1YWwgd2lkdGggb2YgdGhlIHNvdXJjZSBvZiB0aGlzIHRleHR1cmVcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAcmVhZE9ubHlcbiAgICAgKi9cbiAgICB0aGlzLnJlYWxXaWR0aCA9IDEwMDtcbiAgICAvKipcbiAgICAgKiBVc2VkIHRvIHN0b3JlIHRoZSBhY3R1YWwgaGVpZ2h0IG9mIHRoZSBzb3VyY2Ugb2YgdGhpcyB0ZXh0dXJlXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQHJlYWRPbmx5XG4gICAgICovXG4gICAgdGhpcy5yZWFsSGVpZ2h0ID0gMTAwO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHNjYWxlIG1vZGUgdG8gYXBwbHkgd2hlbiBzY2FsaW5nIHRoaXMgdGV4dHVyZVxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IFBJWEkuU0NBTEVfTU9ERVMuTElORUFSXG4gICAgICogQHNlZSBQSVhJLlNDQUxFX01PREVTXG4gICAgICovXG4gICAgdGhpcy5zY2FsZU1vZGUgPSBzY2FsZU1vZGUgfHwgQ09OU1QuU0NBTEVfTU9ERVMuREVGQVVMVDtcblxuICAgIC8qKlxuICAgICAqIFNldCB0byB0cnVlIG9uY2UgdGhlIGJhc2UgdGV4dHVyZSBoYXMgc3VjY2Vzc2Z1bGx5IGxvYWRlZC5cbiAgICAgKlxuICAgICAqIFRoaXMgaXMgbmV2ZXIgdHJ1ZSBpZiB0aGUgdW5kZXJseWluZyBzb3VyY2UgZmFpbHMgdG8gbG9hZCBvciBoYXMgbm8gdGV4dHVyZSBkYXRhLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKiBAcmVhZE9ubHlcbiAgICAgKi9cbiAgICB0aGlzLmhhc0xvYWRlZCA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogU2V0IHRvIHRydWUgaWYgdGhlIHNvdXJjZSBpcyBjdXJyZW50bHkgbG9hZGluZy5cbiAgICAgKlxuICAgICAqIElmIGFuIEltYWdlIHNvdXJjZSBpcyBsb2FkaW5nIHRoZSAnbG9hZGVkJyBvciAnZXJyb3InIGV2ZW50IHdpbGwgYmVcbiAgICAgKiBkaXNwYXRjaGVkIHdoZW4gdGhlIG9wZXJhdGlvbiBlbmRzLiBBbiB1bmRlcnlsaW5nIHNvdXJjZSB0aGF0IGlzXG4gICAgICogaW1tZWRpYXRlbHktYXZhaWxhYmxlIGJ5cGFzc2VzIGxvYWRpbmcgZW50aXJlbHkuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqIEByZWFkb25seVxuICAgICAqL1xuICAgIHRoaXMuaXNMb2FkaW5nID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgaW1hZ2Ugc291cmNlIHRoYXQgaXMgdXNlZCB0byBjcmVhdGUgdGhlIHRleHR1cmUuXG4gICAgICpcbiAgICAgKiBUT0RPOiBNYWtlIHRoaXMgYSBzZXR0ZXIgdGhhdCBjYWxscyBsb2FkU291cmNlKCk7XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtJbWFnZXxDYW52YXN9XG4gICAgICogQHJlYWRvbmx5XG4gICAgICovXG4gICAgdGhpcy5zb3VyY2UgPSBudWxsOyAvLyBzZXQgaW4gbG9hZFNvdXJjZSwgaWYgYXQgYWxsXG5cbiAgICAvKipcbiAgICAgKiBDb250cm9scyBpZiBSR0IgY2hhbm5lbHMgc2hvdWxkIGJlIHByZS1tdWx0aXBsaWVkIGJ5IEFscGhhICAoV2ViR0wgb25seSlcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICogQGRlZmF1bHQgdHJ1ZVxuICAgICAqL1xuICAgIHRoaXMucHJlbXVsdGlwbGllZEFscGhhID0gdHJ1ZTtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge3N0cmluZ31cbiAgICAgKi9cbiAgICB0aGlzLmltYWdlVXJsID0gbnVsbDtcblxuICAgIC8qKlxuICAgICAqIFdldGhlciBvciBub3QgdGhlIHRleHR1cmUgaXMgYSBwb3dlciBvZiB0d28sIHRyeSB0byB1c2UgcG93ZXIgb2YgdHdvIHRleHR1cmVzIGFzIG11Y2ggYXMgeW91IGNhblxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLmlzUG93ZXJPZlR3byA9IGZhbHNlO1xuXG4gICAgLy8gdXNlZCBmb3Igd2ViR0xcblxuICAgIC8qKlxuICAgICAqXG4gICAgICogU2V0IHRoaXMgdG8gdHJ1ZSBpZiBhIG1pcG1hcCBvZiB0aGlzIHRleHR1cmUgbmVlZHMgdG8gYmUgZ2VuZXJhdGVkLiBUaGlzIHZhbHVlIG5lZWRzIHRvIGJlIHNldCBiZWZvcmUgdGhlIHRleHR1cmUgaXMgdXNlZFxuICAgICAqIEFsc28gdGhlIHRleHR1cmUgbXVzdCBiZSBhIHBvd2VyIG9mIHR3byBzaXplIHRvIHdvcmtcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICovXG4gICAgdGhpcy5taXBtYXAgPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIEEgbWFwIG9mIHJlbmRlcmVyIElEcyB0byB3ZWJnbCB0ZXh0dXJlc1xuICAgICAqXG4gICAgICogQG1lbWJlciB7b2JqZWN0PG51bWJlciwgV2ViR0xUZXh0dXJlPn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX2dsVGV4dHVyZXMgPSB7fTtcbiAgICB0aGlzLl9hY3RpdmUgPSBmYWxzZTtcbiAgICB0aGlzLl9pZCA9IDA7XG4gICAgXG4gICAgLy8gaWYgbm8gc291cmNlIHBhc3NlZCBkb24ndCB0cnkgdG8gbG9hZFxuICAgIGlmIChzb3VyY2UpXG4gICAge1xuICAgICAgICB0aGlzLmxvYWRTb3VyY2Uoc291cmNlKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBGaXJlZCB3aGVuIGEgbm90LWltbWVkaWF0ZWx5LWF2YWlsYWJsZSBzb3VyY2UgZmluaXNoZXMgbG9hZGluZy5cbiAgICAgKlxuICAgICAqIEBldmVudCBsb2FkZWRcbiAgICAgKiBAbWVtYmVyb2YgUElYSS5CYXNlVGV4dHVyZSNcbiAgICAgKiBAcHJvdGVjdGVkXG4gICAgICovXG5cbiAgICAvKipcbiAgICAgKiBGaXJlZCB3aGVuIGEgbm90LWltbWVkaWF0ZWx5LWF2YWlsYWJsZSBzb3VyY2UgZmFpbHMgdG8gbG9hZC5cbiAgICAgKlxuICAgICAqIEBldmVudCBlcnJvclxuICAgICAqIEBtZW1iZXJvZiBQSVhJLkJhc2VUZXh0dXJlI1xuICAgICAqIEBwcm90ZWN0ZWRcbiAgICAgKi9cbn1cblxuQmFzZVRleHR1cmUucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShFdmVudEVtaXR0ZXIucHJvdG90eXBlKTtcbkJhc2VUZXh0dXJlLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IEJhc2VUZXh0dXJlO1xubW9kdWxlLmV4cG9ydHMgPSBCYXNlVGV4dHVyZTtcblxuLyoqXG4gKiBVcGRhdGVzIHRoZSB0ZXh0dXJlIG9uIGFsbCB0aGUgd2ViZ2wgcmVuZGVyZXJzLCB0aGlzIGFsc28gYXNzdW1lcyB0aGUgc3JjIGhhcyBjaGFuZ2VkLlxuICpcbiAqIEBmaXJlcyB1cGRhdGVcbiAqL1xuQmFzZVRleHR1cmUucHJvdG90eXBlLnVwZGF0ZSA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy5yZWFsV2lkdGggPSB0aGlzLnNvdXJjZS5uYXR1cmFsV2lkdGggfHwgdGhpcy5zb3VyY2Uud2lkdGg7XG4gICAgdGhpcy5yZWFsSGVpZ2h0ID0gdGhpcy5zb3VyY2UubmF0dXJhbEhlaWdodCB8fCB0aGlzLnNvdXJjZS5oZWlnaHQ7XG5cbiAgICB0aGlzLndpZHRoID0gdGhpcy5yZWFsV2lkdGggLyB0aGlzLnJlc29sdXRpb247XG4gICAgdGhpcy5oZWlnaHQgPSB0aGlzLnJlYWxIZWlnaHQgLyB0aGlzLnJlc29sdXRpb247XG5cbiAgICB0aGlzLmlzUG93ZXJPZlR3byA9IHV0aWxzLmlzUG93ZXJPZlR3byh0aGlzLnJlYWxXaWR0aCwgdGhpcy5yZWFsSGVpZ2h0KTtcblxuICAgIHRoaXMuZW1pdCgndXBkYXRlJywgdGhpcyk7XG59O1xuXG4vKipcbiAqIExvYWQgYSBzb3VyY2UuXG4gKlxuICogSWYgdGhlIHNvdXJjZSBpcyBub3QtaW1tZWRpYXRlbHktYXZhaWxhYmxlLCBzdWNoIGFzIGFuIGltYWdlIHRoYXQgbmVlZHMgdG8gYmVcbiAqIGRvd25sb2FkZWQsIHRoZW4gdGhlICdsb2FkZWQnIG9yICdlcnJvcicgZXZlbnQgd2lsbCBiZSBkaXNwYXRjaGVkIGluIHRoZSBmdXR1cmVcbiAqIGFuZCBgaGFzTG9hZGVkYCB3aWxsIHJlbWFpbiBmYWxzZSBhZnRlciB0aGlzIGNhbGwuXG4gKlxuICogVGhlIGxvZ2ljIHN0YXRlIGFmdGVyIGNhbGxpbmcgYGxvYWRTb3VyY2VgIGRpcmVjdGx5IG9yIGluZGlyZWN0bHkgKGVnLiBgZnJvbUltYWdlYCwgYG5ldyBCYXNlVGV4dHVyZWApIGlzOlxuICpcbiAqICAgICBpZiAodGV4dHVyZS5oYXNMb2FkZWQpXG4ge1xuICogICAgICAgIC8vIHRleHR1cmUgcmVhZHkgZm9yIHVzZVxuICogICAgIH0gZWxzZSBpZiAodGV4dHVyZS5pc0xvYWRpbmcpXG4ge1xuICogICAgICAgIC8vIGxpc3RlbiB0byAnbG9hZGVkJyBhbmQvb3IgJ2Vycm9yJyBldmVudHMgb24gdGV4dHVyZVxuICogICAgIH0gZWxzZSB7XG4gKiAgICAgICAgLy8gbm90IGxvYWRpbmcsIG5vdCBnb2luZyB0byBsb2FkIFVOTEVTUyB0aGUgc291cmNlIGlzIHJlbG9hZGVkXG4gKiAgICAgICAgLy8gKGl0IG1heSBzdGlsbCBtYWtlIHNlbnNlIHRvIGxpc3RlbiB0byB0aGUgZXZlbnRzKVxuICogICAgIH1cbiAqXG4gKiBAcHJvdGVjdGVkXG4gKiBAcGFyYW0gc291cmNlIHtJbWFnZXxDYW52YXN9IHRoZSBzb3VyY2Ugb2JqZWN0IG9mIHRoZSB0ZXh0dXJlLlxuICovXG5CYXNlVGV4dHVyZS5wcm90b3R5cGUubG9hZFNvdXJjZSA9IGZ1bmN0aW9uIChzb3VyY2UpXG57XG4gICAgdmFyIHdhc0xvYWRpbmcgPSB0aGlzLmlzTG9hZGluZztcbiAgICB0aGlzLmhhc0xvYWRlZCA9IGZhbHNlO1xuICAgIHRoaXMuaXNMb2FkaW5nID0gZmFsc2U7XG5cbiAgICBpZiAod2FzTG9hZGluZyAmJiB0aGlzLnNvdXJjZSlcbiAgICB7XG4gICAgICAgIHRoaXMuc291cmNlLm9ubG9hZCA9IG51bGw7XG4gICAgICAgIHRoaXMuc291cmNlLm9uZXJyb3IgPSBudWxsO1xuICAgIH1cblxuICAgIHRoaXMuc291cmNlID0gc291cmNlO1xuXG4gICAgLy8gQXBwbHkgc291cmNlIGlmIGxvYWRlZC4gT3RoZXJ3aXNlIHNldHVwIGFwcHJvcHJpYXRlIGxvYWRpbmcgbW9uaXRvcnMuXG4gICAgaWYgKCh0aGlzLnNvdXJjZS5jb21wbGV0ZSB8fCB0aGlzLnNvdXJjZS5nZXRDb250ZXh0KSAmJiB0aGlzLnNvdXJjZS53aWR0aCAmJiB0aGlzLnNvdXJjZS5oZWlnaHQpXG4gICAge1xuICAgICAgICB0aGlzLl9zb3VyY2VMb2FkZWQoKTtcbiAgICB9XG4gICAgZWxzZSBpZiAoIXNvdXJjZS5nZXRDb250ZXh0KVxuICAgIHtcblxuICAgICAgICAvLyBJbWFnZSBmYWlsIC8gbm90IHJlYWR5XG4gICAgICAgIHRoaXMuaXNMb2FkaW5nID0gdHJ1ZTtcblxuICAgICAgICB2YXIgc2NvcGUgPSB0aGlzO1xuXG4gICAgICAgIHNvdXJjZS5vbmxvYWQgPSBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICBzb3VyY2Uub25sb2FkID0gbnVsbDtcbiAgICAgICAgICAgIHNvdXJjZS5vbmVycm9yID0gbnVsbDtcblxuICAgICAgICAgICAgaWYgKCFzY29wZS5pc0xvYWRpbmcpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBzY29wZS5pc0xvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgICAgIHNjb3BlLl9zb3VyY2VMb2FkZWQoKTtcblxuICAgICAgICAgICAgc2NvcGUuZW1pdCgnbG9hZGVkJywgc2NvcGUpO1xuICAgICAgICB9O1xuXG4gICAgICAgIHNvdXJjZS5vbmVycm9yID0gZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgc291cmNlLm9ubG9hZCA9IG51bGw7XG4gICAgICAgICAgICBzb3VyY2Uub25lcnJvciA9IG51bGw7XG5cbiAgICAgICAgICAgIGlmICghc2NvcGUuaXNMb2FkaW5nKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgc2NvcGUuaXNMb2FkaW5nID0gZmFsc2U7XG4gICAgICAgICAgICBzY29wZS5lbWl0KCdlcnJvcicsIHNjb3BlKTtcbiAgICAgICAgfTtcblxuICAgICAgICAvLyBQZXIgaHR0cDovL3d3dy53My5vcmcvVFIvaHRtbDUvZW1iZWRkZWQtY29udGVudC0wLmh0bWwjdGhlLWltZy1lbGVtZW50XG4gICAgICAgIC8vICAgXCJUaGUgdmFsdWUgb2YgYGNvbXBsZXRlYCBjYW4gdGh1cyBjaGFuZ2Ugd2hpbGUgYSBzY3JpcHQgaXMgZXhlY3V0aW5nLlwiXG4gICAgICAgIC8vIFNvIGNvbXBsZXRlIG5lZWRzIHRvIGJlIHJlLWNoZWNrZWQgYWZ0ZXIgdGhlIGNhbGxiYWNrcyBoYXZlIGJlZW4gYWRkZWQuLlxuICAgICAgICAvLyBOT1RFOiBjb21wbGV0ZSB3aWxsIGJlIHRydWUgaWYgdGhlIGltYWdlIGhhcyBubyBzcmMgc28gYmVzdCB0byBjaGVjayBpZiB0aGUgc3JjIGlzIHNldC5cbiAgICAgICAgaWYgKHNvdXJjZS5jb21wbGV0ZSAmJiBzb3VyY2Uuc3JjKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmlzTG9hZGluZyA9IGZhbHNlO1xuXG4gICAgICAgICAgICAvLyAuLmFuZCBpZiB3ZSdyZSBjb21wbGV0ZSBub3csIG5vIG5lZWQgZm9yIGNhbGxiYWNrc1xuICAgICAgICAgICAgc291cmNlLm9ubG9hZCA9IG51bGw7XG4gICAgICAgICAgICBzb3VyY2Uub25lcnJvciA9IG51bGw7XG5cbiAgICAgICAgICAgIGlmIChzb3VyY2Uud2lkdGggJiYgc291cmNlLmhlaWdodClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9zb3VyY2VMb2FkZWQoKTtcblxuICAgICAgICAgICAgICAgIC8vIElmIGFueSBwcmV2aW91cyBzdWJzY3JpYmVycyBwb3NzaWJsZVxuICAgICAgICAgICAgICAgIGlmICh3YXNMb2FkaW5nKVxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5lbWl0KCdsb2FkZWQnLCB0aGlzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgLy8gSWYgYW55IHByZXZpb3VzIHN1YnNjcmliZXJzIHBvc3NpYmxlXG4gICAgICAgICAgICAgICAgaWYgKHdhc0xvYWRpbmcpXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmVtaXQoJ2Vycm9yJywgdGhpcyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxufTtcblxuLyoqXG4gKiBVc2VkIGludGVybmFsbHkgdG8gdXBkYXRlIHRoZSB3aWR0aCwgaGVpZ2h0LCBhbmQgc29tZSBvdGhlciB0cmFja2luZyB2YXJzIG9uY2VcbiAqIGEgc291cmNlIGhhcyBzdWNjZXNzZnVsbHkgbG9hZGVkLlxuICpcbiAqIEBwcml2YXRlXG4gKi9cbkJhc2VUZXh0dXJlLnByb3RvdHlwZS5fc291cmNlTG9hZGVkID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLmhhc0xvYWRlZCA9IHRydWU7XG4gICAgdGhpcy51cGRhdGUoKTtcbn07XG5cbi8qKlxuICogRGVzdHJveXMgdGhpcyBiYXNlIHRleHR1cmVcbiAqXG4gKi9cbkJhc2VUZXh0dXJlLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKClcbntcbiAgICBpZiAodGhpcy5pbWFnZVVybClcbiAgICB7XG4gICAgICAgIGRlbGV0ZSB1dGlscy5CYXNlVGV4dHVyZUNhY2hlW3RoaXMuaW1hZ2VVcmxdO1xuICAgICAgICBkZWxldGUgdXRpbHMuVGV4dHVyZUNhY2hlW3RoaXMuaW1hZ2VVcmxdO1xuXG4gICAgICAgIHRoaXMuaW1hZ2VVcmwgPSBudWxsO1xuXG4gICAgICAgIGlmICghbmF2aWdhdG9yLmlzQ29jb29uSlMpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuc291cmNlLnNyYyA9ICcnO1xuICAgICAgICB9XG4gICAgfVxuICAgIGVsc2UgaWYgKHRoaXMuc291cmNlICYmIHRoaXMuc291cmNlLl9waXhpSWQpXG4gICAge1xuICAgICAgICBkZWxldGUgdXRpbHMuQmFzZVRleHR1cmVDYWNoZVt0aGlzLnNvdXJjZS5fcGl4aUlkXTtcbiAgICB9XG5cbiAgICB0aGlzLnNvdXJjZSA9IG51bGw7XG5cbiAgICB0aGlzLmRpc3Bvc2UoKTtcbn07XG5cbi8qKlxuICogRnJlZXMgdGhlIHRleHR1cmUgZnJvbSBXZWJHTCBtZW1vcnkgd2l0aG91dCBkZXN0cm95aW5nIHRoaXMgdGV4dHVyZSBvYmplY3QuXG4gKiBUaGlzIG1lYW5zIHlvdSBjYW4gc3RpbGwgdXNlIHRoZSB0ZXh0dXJlIGxhdGVyIHdoaWNoIHdpbGwgdXBsb2FkIGl0IHRvIEdQVVxuICogbWVtb3J5IGFnYWluLlxuICpcbiAqL1xuQmFzZVRleHR1cmUucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKVxue1xuICAgIHRoaXMuZW1pdCgnZGlzcG9zZScsIHRoaXMpO1xuXG4gICAgLy8gdGhpcyBzaG91bGQgbm8gbG9uZ2VyIGJlIG5lZWRlZCwgdGhlIHJlbmRlcmVycyBzaG91bGQgY2xlYW51cCBhbGwgdGhlIGdsIHRleHR1cmVzLlxuICAgIC8vIHRoaXMuX2dsVGV4dHVyZXMgPSB7fTtcbn07XG5cbi8qKlxuICogQ2hhbmdlcyB0aGUgc291cmNlIGltYWdlIG9mIHRoZSB0ZXh0dXJlLlxuICogVGhlIG9yaWdpbmFsIHNvdXJjZSBtdXN0IGJlIGFuIEltYWdlIGVsZW1lbnQuXG4gKlxuICogQHBhcmFtIG5ld1NyYyB7c3RyaW5nfSB0aGUgcGF0aCBvZiB0aGUgaW1hZ2VcbiAqL1xuQmFzZVRleHR1cmUucHJvdG90eXBlLnVwZGF0ZVNvdXJjZUltYWdlID0gZnVuY3Rpb24gKG5ld1NyYylcbntcbiAgICB0aGlzLnNvdXJjZS5zcmMgPSBuZXdTcmM7XG5cbiAgICB0aGlzLmxvYWRTb3VyY2UodGhpcy5zb3VyY2UpO1xufTtcblxuLyoqXG4gKiBIZWxwZXIgZnVuY3Rpb24gdGhhdCBjcmVhdGVzIGEgYmFzZSB0ZXh0dXJlIGZyb20gdGhlIGdpdmVuIGltYWdlIHVybC5cbiAqIElmIHRoZSBpbWFnZSBpcyBub3QgaW4gdGhlIGJhc2UgdGV4dHVyZSBjYWNoZSBpdCB3aWxsIGJlIGNyZWF0ZWQgYW5kIGxvYWRlZC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAcGFyYW0gaW1hZ2VVcmwge3N0cmluZ30gVGhlIGltYWdlIHVybCBvZiB0aGUgdGV4dHVyZVxuICogQHBhcmFtIFtjcm9zc29yaWdpbj0oYXV0byldIHtib29sZWFufSBTaG91bGQgdXNlIGFub255bW91cyBDT1JTPyBEZWZhdWx0cyB0byB0cnVlIGlmIHRoZSBVUkwgaXMgbm90IGEgZGF0YS1VUkkuXG4gKiBAcGFyYW0gW3NjYWxlTW9kZT1QSVhJLlNDQUxFX01PREVTLkRFRkFVTFRdIHtudW1iZXJ9IFNlZSB7QGxpbmsgUElYSS5TQ0FMRV9NT0RFU30gZm9yIHBvc3NpYmxlIHZhbHVlc1xuICogQHJldHVybiBQSVhJLkJhc2VUZXh0dXJlXG4gKi9cbkJhc2VUZXh0dXJlLmZyb21JbWFnZSA9IGZ1bmN0aW9uIChpbWFnZVVybCwgY3Jvc3NvcmlnaW4sIHNjYWxlTW9kZSlcbntcbiAgICB2YXIgYmFzZVRleHR1cmUgPSB1dGlscy5CYXNlVGV4dHVyZUNhY2hlW2ltYWdlVXJsXTtcblxuICAgIGlmIChjcm9zc29yaWdpbiA9PT0gdW5kZWZpbmVkICYmIGltYWdlVXJsLmluZGV4T2YoJ2RhdGE6JykgIT09IDApXG4gICAge1xuICAgICAgICBjcm9zc29yaWdpbiA9IHRydWU7XG4gICAgfVxuXG4gICAgaWYgKCFiYXNlVGV4dHVyZSlcbiAgICB7XG4gICAgICAgIC8vIG5ldyBJbWFnZSgpIGJyZWFrcyB0ZXggbG9hZGluZyBpbiBzb21lIHZlcnNpb25zIG9mIENocm9tZS5cbiAgICAgICAgLy8gU2VlIGh0dHBzOi8vY29kZS5nb29nbGUuY29tL3AvY2hyb21pdW0vaXNzdWVzL2RldGFpbD9pZD0yMzgwNzFcbiAgICAgICAgdmFyIGltYWdlID0gbmV3IEltYWdlKCk7Ly9kb2N1bWVudC5jcmVhdGVFbGVtZW50KCdpbWcnKTtcbiAgICAgICAgaWYgKGNyb3Nzb3JpZ2luKVxuICAgICAgICB7XG4gICAgICAgICAgICBpbWFnZS5jcm9zc09yaWdpbiA9ICcnO1xuICAgICAgICB9XG5cbiAgICAgICAgYmFzZVRleHR1cmUgPSBuZXcgQmFzZVRleHR1cmUoaW1hZ2UsIHNjYWxlTW9kZSk7XG4gICAgICAgIGJhc2VUZXh0dXJlLmltYWdlVXJsID0gaW1hZ2VVcmw7XG5cbiAgICAgICAgaW1hZ2Uuc3JjID0gaW1hZ2VVcmw7XG5cbiAgICAgICAgdXRpbHMuQmFzZVRleHR1cmVDYWNoZVtpbWFnZVVybF0gPSBiYXNlVGV4dHVyZTtcblxuICAgICAgICAvLyBpZiB0aGVyZSBpcyBhbiBAMnggYXQgdGhlIGVuZCBvZiB0aGUgdXJsIHdlIGFyZSBnb2luZyB0byBhc3N1bWUgaXRzIGEgaGlnaHJlcyBpbWFnZVxuICAgICAgICBiYXNlVGV4dHVyZS5yZXNvbHV0aW9uID0gdXRpbHMuZ2V0UmVzb2x1dGlvbk9mVXJsKGltYWdlVXJsKTtcbiAgICB9XG5cbiAgICByZXR1cm4gYmFzZVRleHR1cmU7XG59O1xuXG4vKipcbiAqIEhlbHBlciBmdW5jdGlvbiB0aGF0IGNyZWF0ZXMgYSBiYXNlIHRleHR1cmUgZnJvbSB0aGUgZ2l2ZW4gY2FudmFzIGVsZW1lbnQuXG4gKlxuICogQHN0YXRpY1xuICogQHBhcmFtIGNhbnZhcyB7Q2FudmFzfSBUaGUgY2FudmFzIGVsZW1lbnQgc291cmNlIG9mIHRoZSB0ZXh0dXJlXG4gKiBAcGFyYW0gc2NhbGVNb2RlIHtudW1iZXJ9IFNlZSB7QGxpbmsgUElYSS5TQ0FMRV9NT0RFU30gZm9yIHBvc3NpYmxlIHZhbHVlc1xuICogQHJldHVybiBQSVhJLkJhc2VUZXh0dXJlXG4gKi9cbkJhc2VUZXh0dXJlLmZyb21DYW52YXMgPSBmdW5jdGlvbiAoY2FudmFzLCBzY2FsZU1vZGUpXG57XG4gICAgaWYgKCFjYW52YXMuX3BpeGlJZClcbiAgICB7XG4gICAgICAgIGNhbnZhcy5fcGl4aUlkID0gJ2NhbnZhc18nICsgdXRpbHMudWlkKCk7XG4gICAgfVxuXG4gICAgdmFyIGJhc2VUZXh0dXJlID0gdXRpbHMuQmFzZVRleHR1cmVDYWNoZVtjYW52YXMuX3BpeGlJZF07XG5cbiAgICBpZiAoIWJhc2VUZXh0dXJlKVxuICAgIHtcbiAgICAgICAgYmFzZVRleHR1cmUgPSBuZXcgQmFzZVRleHR1cmUoY2FudmFzLCBzY2FsZU1vZGUpO1xuICAgICAgICB1dGlscy5CYXNlVGV4dHVyZUNhY2hlW2NhbnZhcy5fcGl4aUlkXSA9IGJhc2VUZXh0dXJlO1xuICAgIH1cblxuICAgIHJldHVybiBiYXNlVGV4dHVyZTtcbn07XG4iLCJ2YXIgQmFzZVRleHR1cmUgPSByZXF1aXJlKCcuL0Jhc2VUZXh0dXJlJyksXG4gICAgVGV4dHVyZSA9IHJlcXVpcmUoJy4vVGV4dHVyZScpLFxuICAgIFJlbmRlclRhcmdldCA9IHJlcXVpcmUoJy4uL3JlbmRlcmVycy93ZWJnbC91dGlscy9SZW5kZXJUYXJnZXQnKSxcbiAgICBGaWx0ZXJNYW5hZ2VyID0gcmVxdWlyZSgnLi4vcmVuZGVyZXJzL3dlYmdsL21hbmFnZXJzL0ZpbHRlck1hbmFnZXInKSxcbiAgICBDYW52YXNCdWZmZXIgPSByZXF1aXJlKCcuLi9yZW5kZXJlcnMvY2FudmFzL3V0aWxzL0NhbnZhc0J1ZmZlcicpLFxuICAgIG1hdGggPSByZXF1aXJlKCcuLi9tYXRoJyksXG4gICAgQ09OU1QgPSByZXF1aXJlKCcuLi9jb25zdCcpLFxuICAgIHRlbXBNYXRyaXggPSBuZXcgbWF0aC5NYXRyaXgoKTtcblxuLyoqXG4gKiBBIFJlbmRlclRleHR1cmUgaXMgYSBzcGVjaWFsIHRleHR1cmUgdGhhdCBhbGxvd3MgYW55IFBpeGkgZGlzcGxheSBvYmplY3QgdG8gYmUgcmVuZGVyZWQgdG8gaXQuXG4gKlxuICogX19IaW50X186IEFsbCBEaXNwbGF5T2JqZWN0cyAoaS5lLiBTcHJpdGVzKSB0aGF0IHJlbmRlciB0byBhIFJlbmRlclRleHR1cmUgc2hvdWxkIGJlIHByZWxvYWRlZFxuICogb3RoZXJ3aXNlIGJsYWNrIHJlY3RhbmdsZXMgd2lsbCBiZSBkcmF3biBpbnN0ZWFkLlxuICpcbiAqIEEgUmVuZGVyVGV4dHVyZSB0YWtlcyBhIHNuYXBzaG90IG9mIGFueSBEaXNwbGF5IE9iamVjdCBnaXZlbiB0byBpdHMgcmVuZGVyIG1ldGhvZC4gVGhlIHBvc2l0aW9uXG4gKiBhbmQgcm90YXRpb24gb2YgdGhlIGdpdmVuIERpc3BsYXkgT2JqZWN0cyBpcyBpZ25vcmVkLiBGb3IgZXhhbXBsZTpcbiAqXG4gKiBgYGBqc1xuICogdmFyIHJlbmRlcmVyID0gUElYSS5hdXRvRGV0ZWN0UmVuZGVyZXIoMTAyNCwgMTAyNCwgeyB2aWV3OiBjYW52YXMsIHJhdGlvOiAxIH0pO1xuICogdmFyIHJlbmRlclRleHR1cmUgPSBuZXcgUElYSS5SZW5kZXJUZXh0dXJlKHJlbmRlcmVyLCA4MDAsIDYwMCk7XG4gKiB2YXIgc3ByaXRlID0gUElYSS5TcHJpdGUuZnJvbUltYWdlKFwic3Bpbk9ial8wMS5wbmdcIik7XG4gKlxuICogc3ByaXRlLnBvc2l0aW9uLnggPSA4MDAvMjtcbiAqIHNwcml0ZS5wb3NpdGlvbi55ID0gNjAwLzI7XG4gKiBzcHJpdGUuYW5jaG9yLnggPSAwLjU7XG4gKiBzcHJpdGUuYW5jaG9yLnkgPSAwLjU7XG4gKlxuICogcmVuZGVyVGV4dHVyZS5yZW5kZXIoc3ByaXRlKTtcbiAqIGBgYFxuICpcbiAqIFRoZSBTcHJpdGUgaW4gdGhpcyBjYXNlIHdpbGwgYmUgcmVuZGVyZWQgdG8gYSBwb3NpdGlvbiBvZiAwLDAuIFRvIHJlbmRlciB0aGlzIHNwcml0ZSBhdCBpdHMgYWN0dWFsXG4gKiBwb3NpdGlvbiBhIENvbnRhaW5lciBzaG91bGQgYmUgdXNlZDpcbiAqXG4gKiBgYGBqc1xuICogdmFyIGRvYyA9IG5ldyBQSVhJLkNvbnRhaW5lcigpO1xuICpcbiAqIGRvYy5hZGRDaGlsZChzcHJpdGUpO1xuICpcbiAqIHJlbmRlclRleHR1cmUucmVuZGVyKGRvYyk7ICAvLyBSZW5kZXJzIHRvIGNlbnRlciBvZiByZW5kZXJUZXh0dXJlXG4gKiBgYGBcbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuVGV4dHVyZVxuICogQG1lbWJlcm9mIFBJWElcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5DYW52YXNSZW5kZXJlcnxQSVhJLldlYkdMUmVuZGVyZXJ9IFRoZSByZW5kZXJlciB1c2VkIGZvciB0aGlzIFJlbmRlclRleHR1cmVcbiAqIEBwYXJhbSBbd2lkdGg9MTAwXSB7bnVtYmVyfSBUaGUgd2lkdGggb2YgdGhlIHJlbmRlciB0ZXh0dXJlXG4gKiBAcGFyYW0gW2hlaWdodD0xMDBdIHtudW1iZXJ9IFRoZSBoZWlnaHQgb2YgdGhlIHJlbmRlciB0ZXh0dXJlXG4gKiBAcGFyYW0gW3NjYWxlTW9kZV0ge251bWJlcn0gU2VlIHtAbGluayBQSVhJLlNDQUxFX01PREVTfSBmb3IgcG9zc2libGUgdmFsdWVzXG4gKiBAcGFyYW0gW3Jlc29sdXRpb249MV0ge251bWJlcn0gVGhlIHJlc29sdXRpb24gb2YgdGhlIHRleHR1cmUgYmVpbmcgZ2VuZXJhdGVkXG4gKi9cbmZ1bmN0aW9uIFJlbmRlclRleHR1cmUocmVuZGVyZXIsIHdpZHRoLCBoZWlnaHQsIHNjYWxlTW9kZSwgcmVzb2x1dGlvbilcbntcbiAgICBpZiAoIXJlbmRlcmVyKVxuICAgIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdVbmFibGUgdG8gY3JlYXRlIFJlbmRlclRleHR1cmUsIHlvdSBtdXN0IHBhc3MgYSByZW5kZXJlciBpbnRvIHRoZSBjb25zdHJ1Y3Rvci4nKTtcbiAgICB9XG5cbiAgICB3aWR0aCA9IHdpZHRoIHx8IDEwMDtcbiAgICBoZWlnaHQgPSBoZWlnaHQgfHwgMTAwO1xuICAgIHJlc29sdXRpb24gPSByZXNvbHV0aW9uIHx8IENPTlNULlJFU09MVVRJT047XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYmFzZSB0ZXh0dXJlIG9iamVjdCB0aGF0IHRoaXMgdGV4dHVyZSB1c2VzXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtCYXNlVGV4dHVyZX1cbiAgICAgKi9cbiAgICB2YXIgYmFzZVRleHR1cmUgPSBuZXcgQmFzZVRleHR1cmUoKTtcbiAgICBiYXNlVGV4dHVyZS53aWR0aCA9IHdpZHRoO1xuICAgIGJhc2VUZXh0dXJlLmhlaWdodCA9IGhlaWdodDtcbiAgICBiYXNlVGV4dHVyZS5yZXNvbHV0aW9uID0gcmVzb2x1dGlvbjtcbiAgICBiYXNlVGV4dHVyZS5zY2FsZU1vZGUgPSBzY2FsZU1vZGUgfHwgQ09OU1QuU0NBTEVfTU9ERVMuREVGQVVMVDtcbiAgICBiYXNlVGV4dHVyZS5oYXNMb2FkZWQgPSB0cnVlO1xuXG5cbiAgICBUZXh0dXJlLmNhbGwodGhpcyxcbiAgICAgICAgYmFzZVRleHR1cmUsXG4gICAgICAgIG5ldyBtYXRoLlJlY3RhbmdsZSgwLCAwLCB3aWR0aCwgaGVpZ2h0KVxuICAgICk7XG5cblxuICAgIC8qKlxuICAgICAqIFRoZSB3aXRoIG9mIHRoZSByZW5kZXIgdGV4dHVyZVxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMud2lkdGggPSB3aWR0aDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBoZWlnaHQgb2YgdGhlIHJlbmRlciB0ZXh0dXJlXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy5oZWlnaHQgPSBoZWlnaHQ7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgUmVzb2x1dGlvbiBvZiB0aGUgdGV4dHVyZS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLnJlc29sdXRpb24gPSByZXNvbHV0aW9uO1xuXG4gICAgLyoqXG4gICAgICogRHJhdy9yZW5kZXIgdGhlIGdpdmVuIERpc3BsYXlPYmplY3Qgb250byB0aGUgdGV4dHVyZS5cbiAgICAgKlxuICAgICAqIFRoZSBkaXNwbGF5T2JqZWN0IGFuZCBkZXNjZW5kZW50cyBhcmUgdHJhbnNmb3JtZWQgZHVyaW5nIHRoaXMgb3BlcmF0aW9uLlxuICAgICAqIElmIGB1cGRhdGVUcmFuc2Zvcm1gIGlzIHRydWUgdGhlbiB0aGUgdHJhbnNmb3JtYXRpb25zIHdpbGwgYmUgcmVzdG9yZWQgYmVmb3JlIHRoZVxuICAgICAqIG1ldGhvZCByZXR1cm5zLiBPdGhlcndpc2UgaXQgaXMgdXAgdG8gdGhlIGNhbGxpbmcgY29kZSB0byBjb3JyZWN0bHkgdXNlIG9yIHJlc2V0XG4gICAgICogdGhlIHRyYW5zZm9ybWVkIGRpc3BsYXkgb2JqZWN0cy5cbiAgICAgKlxuICAgICAqIFRoZSBkaXNwbGF5IG9iamVjdCBpcyBhbHdheXMgcmVuZGVyZWQgd2l0aCBhIHdvcmxkQWxwaGEgdmFsdWUgb2YgMS5cbiAgICAgKlxuICAgICAqIEBtZXRob2RcbiAgICAgKiBAcGFyYW0gZGlzcGxheU9iamVjdCB7UElYSS5EaXNwbGF5T2JqZWN0fSBUaGUgZGlzcGxheSBvYmplY3QgdG8gcmVuZGVyIHRoaXMgdGV4dHVyZSBvblxuICAgICAqIEBwYXJhbSBbbWF0cml4XSB7UElYSS5NYXRyaXh9IE9wdGlvbmFsIG1hdHJpeCB0byBhcHBseSB0byB0aGUgZGlzcGxheSBvYmplY3QgYmVmb3JlIHJlbmRlcmluZy5cbiAgICAgKiBAcGFyYW0gW2NsZWFyPWZhbHNlXSB7Ym9vbGVhbn0gSWYgdHJ1ZSB0aGUgdGV4dHVyZSB3aWxsIGJlIGNsZWFyZWQgYmVmb3JlIHRoZSBkaXNwbGF5T2JqZWN0IGlzIGRyYXduXG4gICAgICogQHBhcmFtIFt1cGRhdGVUcmFuc2Zvcm09dHJ1ZV0ge2Jvb2xlYW59IElmIHRydWUgdGhlIGRpc3BsYXlPYmplY3QncyB3b3JsZFRyYW5zZm9ybS93b3JsZEFscGhhIGFuZCBhbGwgY2hpbGRyZW5cbiAgICAgKiAgdHJhbnNmb3JtYXRpb25zIHdpbGwgYmUgcmVzdG9yZWQuIE5vdCByZXN0b3JpbmcgdGhpcyBpbmZvcm1hdGlvbiB3aWxsIGJlIGEgbGl0dGxlIGZhc3Rlci5cbiAgICAgKi9cbiAgICB0aGlzLnJlbmRlciA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgcmVuZGVyZXIgdGhpcyBSZW5kZXJUZXh0dXJlIHVzZXMuIEEgUmVuZGVyVGV4dHVyZSBjYW4gb25seSBiZWxvbmcgdG8gb25lIHJlbmRlcmVyIGF0IHRoZSBtb21lbnQgaWYgaXRzIHdlYkdMLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5DYW52YXNSZW5kZXJlcnxQSVhJLldlYkdMUmVuZGVyZXJ9XG4gICAgICovXG4gICAgdGhpcy5yZW5kZXJlciA9IHJlbmRlcmVyO1xuXG4gICAgaWYgKHRoaXMucmVuZGVyZXIudHlwZSA9PT0gQ09OU1QuUkVOREVSRVJfVFlQRS5XRUJHTClcbiAgICB7XG4gICAgICAgIHZhciBnbCA9IHRoaXMucmVuZGVyZXIuZ2w7XG5cbiAgICAgICAgdGhpcy50ZXh0dXJlQnVmZmVyID0gbmV3IFJlbmRlclRhcmdldChnbCwgdGhpcy53aWR0aCwgdGhpcy5oZWlnaHQsIGJhc2VUZXh0dXJlLnNjYWxlTW9kZSwgdGhpcy5yZXNvbHV0aW9uKTsvLywgdGhpcy5iYXNlVGV4dHVyZS5zY2FsZU1vZGUpO1xuICAgICAgICB0aGlzLmJhc2VUZXh0dXJlLl9nbFRleHR1cmVzW2dsLmlkXSA9IHRoaXMudGV4dHVyZUJ1ZmZlci50ZXh0dXJlO1xuXG4gICAgICAgIC8vVE9ETyByZWZhY3RvciBmaWx0ZXIgbWFuYWdlci4uIGFzIHJlYWxseSBpdHMgbm8gbG9uZ2VyIGEgbWFuYWdlciBpZiB3ZSB1c2UgaXQgaGVyZS4uXG4gICAgICAgIHRoaXMuZmlsdGVyTWFuYWdlciA9IG5ldyBGaWx0ZXJNYW5hZ2VyKHRoaXMucmVuZGVyZXIpO1xuICAgICAgICB0aGlzLmZpbHRlck1hbmFnZXIub25Db250ZXh0Q2hhbmdlKCk7XG4gICAgICAgIHRoaXMuZmlsdGVyTWFuYWdlci5yZXNpemUod2lkdGgsIGhlaWdodCk7XG4gICAgICAgIHRoaXMucmVuZGVyID0gdGhpcy5yZW5kZXJXZWJHTDtcblxuICAgICAgICAvLyB0aGUgY3JlYXRpb24gb2YgYSBmaWx0ZXIgbWFuYWdlciB1bmJpbmRzIHRoZSBidWZmZXJzLi5cbiAgICAgICAgdGhpcy5yZW5kZXJlci5jdXJyZW50UmVuZGVyZXIuc3RhcnQoKTtcbiAgICAgICAgdGhpcy5yZW5kZXJlci5jdXJyZW50UmVuZGVyVGFyZ2V0LmFjdGl2YXRlKCk7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG5cbiAgICAgICAgdGhpcy5yZW5kZXIgPSB0aGlzLnJlbmRlckNhbnZhcztcbiAgICAgICAgdGhpcy50ZXh0dXJlQnVmZmVyID0gbmV3IENhbnZhc0J1ZmZlcih0aGlzLndpZHRoKiB0aGlzLnJlc29sdXRpb24sIHRoaXMuaGVpZ2h0KiB0aGlzLnJlc29sdXRpb24pO1xuICAgICAgICB0aGlzLmJhc2VUZXh0dXJlLnNvdXJjZSA9IHRoaXMudGV4dHVyZUJ1ZmZlci5jYW52YXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKi9cbiAgICB0aGlzLnZhbGlkID0gdHJ1ZTtcblxuICAgIHRoaXMuX3VwZGF0ZVV2cygpO1xufVxuXG5SZW5kZXJUZXh0dXJlLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoVGV4dHVyZS5wcm90b3R5cGUpO1xuUmVuZGVyVGV4dHVyZS5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBSZW5kZXJUZXh0dXJlO1xubW9kdWxlLmV4cG9ydHMgPSBSZW5kZXJUZXh0dXJlO1xuXG4vKipcbiAqIFJlc2l6ZXMgdGhlIFJlbmRlclRleHR1cmUuXG4gKlxuICogQHBhcmFtIHdpZHRoIHtudW1iZXJ9IFRoZSB3aWR0aCB0byByZXNpemUgdG8uXG4gKiBAcGFyYW0gaGVpZ2h0IHtudW1iZXJ9IFRoZSBoZWlnaHQgdG8gcmVzaXplIHRvLlxuICogQHBhcmFtIHVwZGF0ZUJhc2Uge2Jvb2xlYW59IFNob3VsZCB0aGUgYmFzZVRleHR1cmUud2lkdGggYW5kIGhlaWdodCB2YWx1ZXMgYmUgcmVzaXplZCBhcyB3ZWxsP1xuICovXG5SZW5kZXJUZXh0dXJlLnByb3RvdHlwZS5yZXNpemUgPSBmdW5jdGlvbiAod2lkdGgsIGhlaWdodCwgdXBkYXRlQmFzZSlcbntcbiAgICBpZiAod2lkdGggPT09IHRoaXMud2lkdGggJiYgaGVpZ2h0ID09PSB0aGlzLmhlaWdodClcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLnZhbGlkID0gKHdpZHRoID4gMCAmJiBoZWlnaHQgPiAwKTtcblxuICAgIHRoaXMud2lkdGggPSB0aGlzLl9mcmFtZS53aWR0aCA9IHRoaXMuY3JvcC53aWR0aCA9IHdpZHRoO1xuICAgIHRoaXMuaGVpZ2h0ID0gIHRoaXMuX2ZyYW1lLmhlaWdodCA9IHRoaXMuY3JvcC5oZWlnaHQgPSBoZWlnaHQ7XG5cbiAgICBpZiAodXBkYXRlQmFzZSlcbiAgICB7XG4gICAgICAgIHRoaXMuYmFzZVRleHR1cmUud2lkdGggPSB0aGlzLndpZHRoO1xuICAgICAgICB0aGlzLmJhc2VUZXh0dXJlLmhlaWdodCA9IHRoaXMuaGVpZ2h0O1xuICAgIH1cblxuICAgIGlmICghdGhpcy52YWxpZClcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLnRleHR1cmVCdWZmZXIucmVzaXplKHRoaXMud2lkdGgsIHRoaXMuaGVpZ2h0KTtcblxuICAgIGlmKHRoaXMuZmlsdGVyTWFuYWdlcilcbiAgICB7XG4gICAgICAgIHRoaXMuZmlsdGVyTWFuYWdlci5yZXNpemUodGhpcy53aWR0aCwgdGhpcy5oZWlnaHQpO1xuICAgIH1cbn07XG5cbi8qKlxuICogQ2xlYXJzIHRoZSBSZW5kZXJUZXh0dXJlLlxuICpcbiAqL1xuUmVuZGVyVGV4dHVyZS5wcm90b3R5cGUuY2xlYXIgPSBmdW5jdGlvbiAoKVxue1xuICAgIGlmICghdGhpcy52YWxpZClcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5yZW5kZXJlci50eXBlID09PSBDT05TVC5SRU5ERVJFUl9UWVBFLldFQkdMKVxuICAgIHtcbiAgICAgICAgdGhpcy5yZW5kZXJlci5nbC5iaW5kRnJhbWVidWZmZXIodGhpcy5yZW5kZXJlci5nbC5GUkFNRUJVRkZFUiwgdGhpcy50ZXh0dXJlQnVmZmVyLmZyYW1lQnVmZmVyKTtcbiAgICB9XG5cbiAgICB0aGlzLnRleHR1cmVCdWZmZXIuY2xlYXIoKTtcbn07XG5cbi8qKlxuICogSW50ZXJuYWwgbWV0aG9kIGFzc2lnbmVkIHRvIHRoZSBgcmVuZGVyYCBwcm9wZXJ0eSBpZiB1c2luZyBhIENhbnZhc1JlbmRlcmVyLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0gZGlzcGxheU9iamVjdCB7UElYSS5EaXNwbGF5T2JqZWN0fSBUaGUgZGlzcGxheSBvYmplY3QgdG8gcmVuZGVyIHRoaXMgdGV4dHVyZSBvblxuICogQHBhcmFtIFttYXRyaXhdIHtQSVhJLk1hdHJpeH0gT3B0aW9uYWwgbWF0cml4IHRvIGFwcGx5IHRvIHRoZSBkaXNwbGF5IG9iamVjdCBiZWZvcmUgcmVuZGVyaW5nLlxuICogQHBhcmFtIFtjbGVhcj1mYWxzZV0ge2Jvb2xlYW59IElmIHRydWUgdGhlIHRleHR1cmUgd2lsbCBiZSBjbGVhcmVkIGJlZm9yZSB0aGUgZGlzcGxheU9iamVjdCBpcyBkcmF3blxuICogQHBhcmFtIFt1cGRhdGVUcmFuc2Zvcm09dHJ1ZV0ge2Jvb2xlYW59IElmIHRydWUgdGhlIGRpc3BsYXlPYmplY3QncyB3b3JsZFRyYW5zZm9ybS93b3JsZEFscGhhIGFuZCBhbGwgY2hpbGRyZW5cbiAqICB0cmFuc2Zvcm1hdGlvbnMgd2lsbCBiZSByZXN0b3JlZC4gTm90IHJlc3RvcmluZyB0aGlzIGluZm9ybWF0aW9uIHdpbGwgYmUgYSBsaXR0bGUgZmFzdGVyLlxuICovXG5SZW5kZXJUZXh0dXJlLnByb3RvdHlwZS5yZW5kZXJXZWJHTCA9IGZ1bmN0aW9uIChkaXNwbGF5T2JqZWN0LCBtYXRyaXgsIGNsZWFyLCB1cGRhdGVUcmFuc2Zvcm0pXG57XG4gICAgaWYgKCF0aGlzLnZhbGlkKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuXG4gICAgdXBkYXRlVHJhbnNmb3JtID0gKHVwZGF0ZVRyYW5zZm9ybSAhPT0gdW5kZWZpbmVkKSA/IHVwZGF0ZVRyYW5zZm9ybSA6IHRydWU7Ly8hdXBkYXRlVHJhbnNmb3JtO1xuXG4gICAgdGhpcy50ZXh0dXJlQnVmZmVyLnRyYW5zZm9ybSA9IG1hdHJpeDtcblxuICAgIC8vVE9ETyBub3QgYSBmYW4gdGhhdCB0aGlzIGlzIGhlcmUuLi4gaXQgd2lsbCBtb3ZlIVxuICAgIHRoaXMudGV4dHVyZUJ1ZmZlci5hY3RpdmF0ZSgpO1xuXG4gICAgLy8gc2V0V29ybGQgQWxwaGEgdG8gZW5zdXJlIHRoYXQgdGhlIG9iamVjdCBpcyByZW5kZXJlciBhdCBmdWxsIG9wYWNpdHlcbiAgICBkaXNwbGF5T2JqZWN0LndvcmxkQWxwaGEgPSAxO1xuXG4gICAgaWYgKHVwZGF0ZVRyYW5zZm9ybSlcbiAgICB7XG5cbiAgICAgICAgLy8gcmVzZXQgdGhlIG1hdHJpeCBvZiB0aGUgZGlzcGxhdHlPYmplY3QuLlxuICAgICAgICBkaXNwbGF5T2JqZWN0LndvcmxkVHJhbnNmb3JtLmlkZW50aXR5KCk7XG5cbiAgICAgICAgZGlzcGxheU9iamVjdC5jdXJyZW50Qm91bmRzID0gbnVsbDtcblxuICAgICAgICAvLyBUaW1lIHRvIHVwZGF0ZSBhbGwgdGhlIGNoaWxkcmVuIG9mIHRoZSBkaXNwbGF5T2JqZWN0IHdpdGggdGhlIG5ldyBtYXRyaXguLlxuICAgICAgICB2YXIgY2hpbGRyZW4gPSBkaXNwbGF5T2JqZWN0LmNoaWxkcmVuO1xuICAgICAgICB2YXIgaSwgajtcblxuICAgICAgICBmb3IgKGkgPSAwLCBqID0gY2hpbGRyZW4ubGVuZ3RoOyBpIDwgajsgKytpKVxuICAgICAgICB7XG4gICAgICAgICAgICBjaGlsZHJlbltpXS51cGRhdGVUcmFuc2Zvcm0oKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vVE9ETyByZW5hbWUgdGV4dHVyZUJ1ZmZlciB0byByZW5kZXJUYXJnZXQuLlxuICAgIHZhciB0ZW1wID0gIHRoaXMucmVuZGVyZXIuZmlsdGVyTWFuYWdlcjtcblxuICAgIHRoaXMucmVuZGVyZXIuZmlsdGVyTWFuYWdlciA9IHRoaXMuZmlsdGVyTWFuYWdlcjtcbiAgICB0aGlzLnJlbmRlcmVyLnJlbmRlckRpc3BsYXlPYmplY3QoZGlzcGxheU9iamVjdCwgdGhpcy50ZXh0dXJlQnVmZmVyLCBjbGVhcik7XG5cbiAgICB0aGlzLnJlbmRlcmVyLmZpbHRlck1hbmFnZXIgPSB0ZW1wO1xufTtcblxuXG4vKipcbiAqIEludGVybmFsIG1ldGhvZCBhc3NpZ25lZCB0byB0aGUgYHJlbmRlcmAgcHJvcGVydHkgaWYgdXNpbmcgYSBDYW52YXNSZW5kZXJlci5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIGRpc3BsYXlPYmplY3Qge1BJWEkuRGlzcGxheU9iamVjdH0gVGhlIGRpc3BsYXkgb2JqZWN0IHRvIHJlbmRlciB0aGlzIHRleHR1cmUgb25cbiAqIEBwYXJhbSBbbWF0cml4XSB7UElYSS5NYXRyaXh9IE9wdGlvbmFsIG1hdHJpeCB0byBhcHBseSB0byB0aGUgZGlzcGxheSBvYmplY3QgYmVmb3JlIHJlbmRlcmluZy5cbiAqIEBwYXJhbSBbY2xlYXJdIHtib29sZWFufSBJZiB0cnVlIHRoZSB0ZXh0dXJlIHdpbGwgYmUgY2xlYXJlZCBiZWZvcmUgdGhlIGRpc3BsYXlPYmplY3QgaXMgZHJhd25cbiAqL1xuUmVuZGVyVGV4dHVyZS5wcm90b3R5cGUucmVuZGVyQ2FudmFzID0gZnVuY3Rpb24gKGRpc3BsYXlPYmplY3QsIG1hdHJpeCwgY2xlYXIsIHVwZGF0ZVRyYW5zZm9ybSlcbntcbiAgICBpZiAoIXRoaXMudmFsaWQpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdXBkYXRlVHJhbnNmb3JtID0gISF1cGRhdGVUcmFuc2Zvcm07XG5cbiAgICB2YXIgd3QgPSB0ZW1wTWF0cml4O1xuXG4gICAgd3QuaWRlbnRpdHkoKTtcblxuICAgIGlmIChtYXRyaXgpXG4gICAge1xuICAgICAgICB3dC5hcHBlbmQobWF0cml4KTtcbiAgICB9XG5cbiAgICB2YXIgY2FjaGVkV3QgPSBkaXNwbGF5T2JqZWN0LndvcmxkVHJhbnNmb3JtO1xuICAgIGRpc3BsYXlPYmplY3Qud29ybGRUcmFuc2Zvcm0gPSB3dDtcblxuICAgIC8vIHNldFdvcmxkIEFscGhhIHRvIGVuc3VyZSB0aGF0IHRoZSBvYmplY3QgaXMgcmVuZGVyZXIgYXQgZnVsbCBvcGFjaXR5XG4gICAgZGlzcGxheU9iamVjdC53b3JsZEFscGhhID0gMTtcblxuICAgIC8vIFRpbWUgdG8gdXBkYXRlIGFsbCB0aGUgY2hpbGRyZW4gb2YgdGhlIGRpc3BsYXlPYmplY3Qgd2l0aCB0aGUgbmV3IG1hdHJpeC4uXG4gICAgdmFyIGNoaWxkcmVuID0gZGlzcGxheU9iamVjdC5jaGlsZHJlbjtcbiAgICB2YXIgaSwgajtcblxuICAgIGZvciAoaSA9IDAsIGogPSBjaGlsZHJlbi5sZW5ndGg7IGkgPCBqOyArK2kpXG4gICAge1xuICAgICAgICBjaGlsZHJlbltpXS51cGRhdGVUcmFuc2Zvcm0oKTtcbiAgICB9XG5cbiAgICBpZiAoY2xlYXIpXG4gICAge1xuICAgICAgICB0aGlzLnRleHR1cmVCdWZmZXIuY2xlYXIoKTtcbiAgICB9XG5cblxuLy8gICAgdGhpcy50ZXh0dXJlQnVmZmVyLlxuICAgIHZhciBjb250ZXh0ID0gdGhpcy50ZXh0dXJlQnVmZmVyLmNvbnRleHQ7XG5cbiAgICB2YXIgcmVhbFJlc29sdXRpb24gPSB0aGlzLnJlbmRlcmVyLnJlc29sdXRpb247XG5cbiAgICB0aGlzLnJlbmRlcmVyLnJlc29sdXRpb24gPSB0aGlzLnJlc29sdXRpb247XG5cbiAgICB0aGlzLnJlbmRlcmVyLnJlbmRlckRpc3BsYXlPYmplY3QoZGlzcGxheU9iamVjdCwgY29udGV4dCk7XG5cbiAgICB0aGlzLnJlbmRlcmVyLnJlc29sdXRpb24gPSByZWFsUmVzb2x1dGlvbjtcblxuICAgIGlmKGRpc3BsYXlPYmplY3Qud29ybGRUcmFuc2Zvcm0gPT09IHd0KVxuICAgIHtcbiAgICAgICAgLy8gZml4ZXMgY2FjaGVBc0JpdG1hcCBIYXBwZW5pbmcgZHVyaW5nIHRoZSBhYm92ZS4uXG4gICAgICAgIGRpc3BsYXlPYmplY3Qud29ybGRUcmFuc2Zvcm0gPSBjYWNoZWRXdDtcbiAgICB9XG5cbn07XG5cbi8qKlxuICogRGVzdHJveXMgdGhpcyB0ZXh0dXJlXG4gKlxuICogQHBhcmFtIGRlc3Ryb3lCYXNlIHtib29sZWFufSBXaGV0aGVyIHRvIGRlc3Ryb3kgdGhlIGJhc2UgdGV4dHVyZSBhcyB3ZWxsXG4gKi9cblJlbmRlclRleHR1cmUucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoKVxue1xuICAgIFRleHR1cmUucHJvdG90eXBlLmRlc3Ryb3kuY2FsbCh0aGlzLCB0cnVlKTtcblxuICAgIHRoaXMudGV4dHVyZUJ1ZmZlci5kZXN0cm95KCk7XG5cbiAgICAvLyBkZXN0cm95IHRoZSBmaWx0ZXJtYW5hZ2VyLi5cbiAgICBpZih0aGlzLmZpbHRlck1hbmFnZXIpXG4gICAge1xuICAgICAgICB0aGlzLmZpbHRlck1hbmFnZXIuZGVzdHJveSgpO1xuICAgIH1cblxuICAgIHRoaXMucmVuZGVyZXIgPSBudWxsO1xufTtcblxuLyoqXG4gKiBXaWxsIHJldHVybiBhIEhUTUwgSW1hZ2Ugb2YgdGhlIHRleHR1cmVcbiAqXG4gKiBAcmV0dXJuIHtJbWFnZX1cbiAqL1xuUmVuZGVyVGV4dHVyZS5wcm90b3R5cGUuZ2V0SW1hZ2UgPSBmdW5jdGlvbiAoKVxue1xuICAgIHZhciBpbWFnZSA9IG5ldyBJbWFnZSgpO1xuICAgIGltYWdlLnNyYyA9IHRoaXMuZ2V0QmFzZTY0KCk7XG4gICAgcmV0dXJuIGltYWdlO1xufTtcblxuLyoqXG4gKiBXaWxsIHJldHVybiBhIGEgYmFzZTY0IGVuY29kZWQgc3RyaW5nIG9mIHRoaXMgdGV4dHVyZS4gSXQgd29ya3MgYnkgY2FsbGluZyBSZW5kZXJUZXh0dXJlLmdldENhbnZhcyBhbmQgdGhlbiBydW5uaW5nIHRvRGF0YVVSTCBvbiB0aGF0LlxuICpcbiAqIEByZXR1cm4ge3N0cmluZ30gQSBiYXNlNjQgZW5jb2RlZCBzdHJpbmcgb2YgdGhlIHRleHR1cmUuXG4gKi9cblJlbmRlclRleHR1cmUucHJvdG90eXBlLmdldEJhc2U2NCA9IGZ1bmN0aW9uICgpXG57XG4gICAgcmV0dXJuIHRoaXMuZ2V0Q2FudmFzKCkudG9EYXRhVVJMKCk7XG59O1xuXG4vKipcbiAqIENyZWF0ZXMgYSBDYW52YXMgZWxlbWVudCwgcmVuZGVycyB0aGlzIFJlbmRlclRleHR1cmUgdG8gaXQgYW5kIHRoZW4gcmV0dXJucyBpdC5cbiAqXG4gKiBAcmV0dXJuIHtIVE1MQ2FudmFzRWxlbWVudH0gQSBDYW52YXMgZWxlbWVudCB3aXRoIHRoZSB0ZXh0dXJlIHJlbmRlcmVkIG9uLlxuICovXG5SZW5kZXJUZXh0dXJlLnByb3RvdHlwZS5nZXRDYW52YXMgPSBmdW5jdGlvbiAoKVxue1xuICAgIGlmICh0aGlzLnJlbmRlcmVyLnR5cGUgPT09IENPTlNULlJFTkRFUkVSX1RZUEUuV0VCR0wpXG4gICAge1xuICAgICAgICB2YXIgZ2wgPSB0aGlzLnJlbmRlcmVyLmdsO1xuICAgICAgICB2YXIgd2lkdGggPSB0aGlzLnRleHR1cmVCdWZmZXIuc2l6ZS53aWR0aDtcbiAgICAgICAgdmFyIGhlaWdodCA9IHRoaXMudGV4dHVyZUJ1ZmZlci5zaXplLmhlaWdodDtcblxuICAgICAgICB2YXIgd2ViR0xQaXhlbHMgPSBuZXcgVWludDhBcnJheSg0ICogd2lkdGggKiBoZWlnaHQpO1xuXG4gICAgICAgIGdsLmJpbmRGcmFtZWJ1ZmZlcihnbC5GUkFNRUJVRkZFUiwgdGhpcy50ZXh0dXJlQnVmZmVyLmZyYW1lQnVmZmVyKTtcbiAgICAgICAgZ2wucmVhZFBpeGVscygwLCAwLCB3aWR0aCwgaGVpZ2h0LCBnbC5SR0JBLCBnbC5VTlNJR05FRF9CWVRFLCB3ZWJHTFBpeGVscyk7XG4gICAgICAgIGdsLmJpbmRGcmFtZWJ1ZmZlcihnbC5GUkFNRUJVRkZFUiwgbnVsbCk7XG5cbiAgICAgICAgdmFyIHRlbXBDYW52YXMgPSBuZXcgQ2FudmFzQnVmZmVyKHdpZHRoLCBoZWlnaHQpO1xuICAgICAgICB2YXIgY2FudmFzRGF0YSA9IHRlbXBDYW52YXMuY29udGV4dC5nZXRJbWFnZURhdGEoMCwgMCwgd2lkdGgsIGhlaWdodCk7XG4gICAgICAgIGNhbnZhc0RhdGEuZGF0YS5zZXQod2ViR0xQaXhlbHMpO1xuXG4gICAgICAgIHRlbXBDYW52YXMuY29udGV4dC5wdXRJbWFnZURhdGEoY2FudmFzRGF0YSwgMCwgMCk7XG5cbiAgICAgICAgcmV0dXJuIHRlbXBDYW52YXMuY2FudmFzO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICByZXR1cm4gdGhpcy50ZXh0dXJlQnVmZmVyLmNhbnZhcztcbiAgICB9XG59O1xuXG4vKipcbiAqIFdpbGwgcmV0dXJuIGEgb25lLWRpbWVuc2lvbmFsIGFycmF5IGNvbnRhaW5pbmcgdGhlIHBpeGVsIGRhdGEgb2YgdGhlIGVudGlyZSB0ZXh0dXJlIGluIFJHQkEgb3JkZXIsIHdpdGggaW50ZWdlciB2YWx1ZXMgYmV0d2VlbiAwIGFuZCAyNTUgKGluY2x1ZGVkKS5cbiAqXG4gKiBAcmV0dXJuIHtVaW50OENsYW1wZWRBcnJheX1cbiAqL1xuUmVuZGVyVGV4dHVyZS5wcm90b3R5cGUuZ2V0UGl4ZWxzID0gZnVuY3Rpb24gKClcbntcbiAgICB2YXIgd2lkdGgsIGhlaWdodDtcblxuICAgIGlmICh0aGlzLnJlbmRlcmVyLnR5cGUgPT09IENPTlNULlJFTkRFUkVSX1RZUEUuV0VCR0wpXG4gICAge1xuICAgICAgICB2YXIgZ2wgPSB0aGlzLnJlbmRlcmVyLmdsO1xuICAgICAgICB3aWR0aCA9IHRoaXMudGV4dHVyZUJ1ZmZlci5zaXplLndpZHRoO1xuICAgICAgICBoZWlnaHQgPSB0aGlzLnRleHR1cmVCdWZmZXIuc2l6ZS5oZWlnaHQ7XG5cbiAgICAgICAgdmFyIHdlYkdMUGl4ZWxzID0gbmV3IFVpbnQ4QXJyYXkoNCAqIHdpZHRoICogaGVpZ2h0KTtcblxuICAgICAgICBnbC5iaW5kRnJhbWVidWZmZXIoZ2wuRlJBTUVCVUZGRVIsIHRoaXMudGV4dHVyZUJ1ZmZlci5mcmFtZUJ1ZmZlcik7XG4gICAgICAgIGdsLnJlYWRQaXhlbHMoMCwgMCwgd2lkdGgsIGhlaWdodCwgZ2wuUkdCQSwgZ2wuVU5TSUdORURfQllURSwgd2ViR0xQaXhlbHMpO1xuICAgICAgICBnbC5iaW5kRnJhbWVidWZmZXIoZ2wuRlJBTUVCVUZGRVIsIG51bGwpO1xuXG4gICAgICAgIHJldHVybiB3ZWJHTFBpeGVscztcbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgd2lkdGggPSB0aGlzLnRleHR1cmVCdWZmZXIuY2FudmFzLndpZHRoO1xuICAgICAgICBoZWlnaHQgPSB0aGlzLnRleHR1cmVCdWZmZXIuY2FudmFzLmhlaWdodDtcblxuICAgICAgICByZXR1cm4gdGhpcy50ZXh0dXJlQnVmZmVyLmNhbnZhcy5nZXRDb250ZXh0KCcyZCcpLmdldEltYWdlRGF0YSgwLCAwLCB3aWR0aCwgaGVpZ2h0KS5kYXRhO1xuICAgIH1cbn07XG5cbi8qKlxuICogV2lsbCByZXR1cm4gYSBvbmUtZGltZW5zaW9uYWwgYXJyYXkgY29udGFpbmluZyB0aGUgcGl4ZWwgZGF0YSBvZiBhIHBpeGVsIHdpdGhpbiB0aGUgdGV4dHVyZSBpbiBSR0JBIG9yZGVyLCB3aXRoIGludGVnZXIgdmFsdWVzIGJldHdlZW4gMCBhbmQgMjU1IChpbmNsdWRlZCkuXG4gKlxuICogQHBhcmFtIHgge251bWJlcn0gVGhlIHggY29vcmRpbmF0ZSBvZiB0aGUgcGl4ZWwgdG8gcmV0cmlldmUuXG4gKiBAcGFyYW0geSB7bnVtYmVyfSBUaGUgeSBjb29yZGluYXRlIG9mIHRoZSBwaXhlbCB0byByZXRyaWV2ZS5cbiAqIEByZXR1cm4ge1VpbnQ4Q2xhbXBlZEFycmF5fVxuICovXG5SZW5kZXJUZXh0dXJlLnByb3RvdHlwZS5nZXRQaXhlbCA9IGZ1bmN0aW9uICh4LCB5KVxue1xuICAgIGlmICh0aGlzLnJlbmRlcmVyLnR5cGUgPT09IENPTlNULlJFTkRFUkVSX1RZUEUuV0VCR0wpXG4gICAge1xuICAgICAgICB2YXIgZ2wgPSB0aGlzLnJlbmRlcmVyLmdsO1xuXG4gICAgICAgIHZhciB3ZWJHTFBpeGVscyA9IG5ldyBVaW50OEFycmF5KDQpO1xuXG4gICAgICAgIGdsLmJpbmRGcmFtZWJ1ZmZlcihnbC5GUkFNRUJVRkZFUiwgdGhpcy50ZXh0dXJlQnVmZmVyLmZyYW1lQnVmZmVyKTtcbiAgICAgICAgZ2wucmVhZFBpeGVscyh4LCB5LCAxLCAxLCBnbC5SR0JBLCBnbC5VTlNJR05FRF9CWVRFLCB3ZWJHTFBpeGVscyk7XG4gICAgICAgIGdsLmJpbmRGcmFtZWJ1ZmZlcihnbC5GUkFNRUJVRkZFUiwgbnVsbCk7XG5cbiAgICAgICAgcmV0dXJuIHdlYkdMUGl4ZWxzO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICByZXR1cm4gdGhpcy50ZXh0dXJlQnVmZmVyLmNhbnZhcy5nZXRDb250ZXh0KCcyZCcpLmdldEltYWdlRGF0YSh4LCB5LCAxLCAxKS5kYXRhO1xuICAgIH1cbn07XG4iLCJ2YXIgQmFzZVRleHR1cmUgPSByZXF1aXJlKCcuL0Jhc2VUZXh0dXJlJyksXG4gICAgVmlkZW9CYXNlVGV4dHVyZSA9IHJlcXVpcmUoJy4vVmlkZW9CYXNlVGV4dHVyZScpLFxuICAgIFRleHR1cmVVdnMgPSByZXF1aXJlKCcuL1RleHR1cmVVdnMnKSxcbiAgICBFdmVudEVtaXR0ZXIgPSByZXF1aXJlKCdldmVudGVtaXR0ZXIzJyksXG4gICAgbWF0aCA9IHJlcXVpcmUoJy4uL21hdGgnKSxcbiAgICB1dGlscyA9IHJlcXVpcmUoJy4uL3V0aWxzJyk7XG5cbi8qKlxuICogQSB0ZXh0dXJlIHN0b3JlcyB0aGUgaW5mb3JtYXRpb24gdGhhdCByZXByZXNlbnRzIGFuIGltYWdlIG9yIHBhcnQgb2YgYW4gaW1hZ2UuIEl0IGNhbm5vdCBiZSBhZGRlZFxuICogdG8gdGhlIGRpc3BsYXkgbGlzdCBkaXJlY3RseS4gSW5zdGVhZCB1c2UgaXQgYXMgdGhlIHRleHR1cmUgZm9yIGEgU3ByaXRlLiBJZiBubyBmcmFtZSBpcyBwcm92aWRlZCB0aGVuIHRoZSB3aG9sZSBpbWFnZSBpcyB1c2VkLlxuICpcbiAqIFlvdSBjYW4gZGlyZWN0bHkgY3JlYXRlIGEgdGV4dHVyZSBmcm9tIGFuIGltYWdlIGFuZCB0aGVuIHJldXNlIGl0IG11bHRpcGxlIHRpbWVzIGxpa2UgdGhpcyA6XG4gKlxuICogYGBganNcbiAqIHZhciB0ZXh0dXJlID0gUElYSS5UZXh0dXJlLmZyb21JbWFnZSgnYXNzZXRzL2ltYWdlLnBuZycpO1xuICogdmFyIHNwcml0ZTEgPSBuZXcgUElYSS5TcHJpdGUodGV4dHVyZSk7XG4gKiB2YXIgc3ByaXRlMiA9IG5ldyBQSVhJLlNwcml0ZSh0ZXh0dXJlKTtcbiAqIGBgYFxuICpcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqIEBwYXJhbSBiYXNlVGV4dHVyZSB7UElYSS5CYXNlVGV4dHVyZX0gVGhlIGJhc2UgdGV4dHVyZSBzb3VyY2UgdG8gY3JlYXRlIHRoZSB0ZXh0dXJlIGZyb21cbiAqIEBwYXJhbSBbZnJhbWVdIHtQSVhJLlJlY3RhbmdsZX0gVGhlIHJlY3RhbmdsZSBmcmFtZSBvZiB0aGUgdGV4dHVyZSB0byBzaG93XG4gKiBAcGFyYW0gW2Nyb3BdIHtQSVhJLlJlY3RhbmdsZX0gVGhlIGFyZWEgb2Ygb3JpZ2luYWwgdGV4dHVyZVxuICogQHBhcmFtIFt0cmltXSB7UElYSS5SZWN0YW5nbGV9IFRyaW1tZWQgdGV4dHVyZSByZWN0YW5nbGVcbiAqIEBwYXJhbSBbcm90YXRlXSB7Ym9vbGVhbn0gaW5kaWNhdGVzIHdoZXRoZXIgdGhlIHRleHR1cmUgc2hvdWxkIGJlIHJvdGF0ZWQgYnkgOTAgZGVncmVlcyAoIHVzZWQgYnkgdGV4dHVyZSBwYWNrZXIgKVxuICovXG5mdW5jdGlvbiBUZXh0dXJlKGJhc2VUZXh0dXJlLCBmcmFtZSwgY3JvcCwgdHJpbSwgcm90YXRlKVxue1xuICAgIEV2ZW50RW1pdHRlci5jYWxsKHRoaXMpO1xuXG4gICAgLyoqXG4gICAgICogRG9lcyB0aGlzIFRleHR1cmUgaGF2ZSBhbnkgZnJhbWUgZGF0YSBhc3NpZ25lZCB0byBpdD9cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICovXG4gICAgdGhpcy5ub0ZyYW1lID0gZmFsc2U7XG5cbiAgICBpZiAoIWZyYW1lKVxuICAgIHtcbiAgICAgICAgdGhpcy5ub0ZyYW1lID0gdHJ1ZTtcbiAgICAgICAgZnJhbWUgPSBuZXcgbWF0aC5SZWN0YW5nbGUoMCwgMCwgMSwgMSk7XG4gICAgfVxuXG4gICAgaWYgKGJhc2VUZXh0dXJlIGluc3RhbmNlb2YgVGV4dHVyZSlcbiAgICB7XG4gICAgICAgIGJhc2VUZXh0dXJlID0gYmFzZVRleHR1cmUuYmFzZVRleHR1cmU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhlIGJhc2UgdGV4dHVyZSB0aGF0IHRoaXMgdGV4dHVyZSB1c2VzLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5CYXNlVGV4dHVyZX1cbiAgICAgKi9cbiAgICB0aGlzLmJhc2VUZXh0dXJlID0gYmFzZVRleHR1cmU7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgZnJhbWUgc3BlY2lmaWVzIHRoZSByZWdpb24gb2YgdGhlIGJhc2UgdGV4dHVyZSB0aGF0IHRoaXMgdGV4dHVyZSB1c2VzXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlJlY3RhbmdsZX1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX2ZyYW1lID0gZnJhbWU7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgdGV4dHVyZSB0cmltIGRhdGEuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlJlY3RhbmdsZX1cbiAgICAgKi9cbiAgICB0aGlzLnRyaW0gPSB0cmltO1xuXG4gICAgLyoqXG4gICAgICogVGhpcyB3aWxsIGxldCB0aGUgcmVuZGVyZXIga25vdyBpZiB0aGUgdGV4dHVyZSBpcyB2YWxpZC4gSWYgaXQncyBub3QgdGhlbiBpdCBjYW5ub3QgYmUgcmVuZGVyZWQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqL1xuICAgIHRoaXMudmFsaWQgPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIFRoaXMgd2lsbCBsZXQgYSByZW5kZXJlciBrbm93IHRoYXQgYSB0ZXh0dXJlIGhhcyBiZWVuIHVwZGF0ZWQgKHVzZWQgbWFpbmx5IGZvciB3ZWJHTCB1diB1cGRhdGVzKVxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKi9cbiAgICB0aGlzLnJlcXVpcmVzVXBkYXRlID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgV2ViR0wgVVYgZGF0YSBjYWNoZS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuVGV4dHVyZVV2c31cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX3V2cyA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgd2lkdGggb2YgdGhlIFRleHR1cmUgaW4gcGl4ZWxzLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMud2lkdGggPSAwO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGhlaWdodCBvZiB0aGUgVGV4dHVyZSBpbiBwaXhlbHMuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy5oZWlnaHQgPSAwO1xuXG4gICAgLyoqXG4gICAgICogVGhpcyBpcyB0aGUgYXJlYSBvZiB0aGUgQmFzZVRleHR1cmUgaW1hZ2UgdG8gYWN0dWFsbHkgY29weSB0byB0aGUgQ2FudmFzIC8gV2ViR0wgd2hlbiByZW5kZXJpbmcsXG4gICAgICogaXJyZXNwZWN0aXZlIG9mIHRoZSBhY3R1YWwgZnJhbWUgc2l6ZSBvciBwbGFjZW1lbnQgKHdoaWNoIGNhbiBiZSBpbmZsdWVuY2VkIGJ5IHRyaW1tZWQgdGV4dHVyZSBhdGxhc2VzKVxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5SZWN0YW5nbGV9XG4gICAgICovXG4gICAgdGhpcy5jcm9wID0gY3JvcCB8fCBmcmFtZTsvL25ldyBtYXRoLlJlY3RhbmdsZSgwLCAwLCAxLCAxKTtcblxuICAgIC8qKlxuICAgICAqIEluZGljYXRlcyB3aGV0aGVyIHRoZSB0ZXh0dXJlIHNob3VsZCBiZSByb3RhdGVkIGJ5IDkwIGRlZ3JlZXNcbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKi9cbiAgICB0aGlzLnJvdGF0ZSA9ICEhcm90YXRlO1xuXG4gICAgaWYgKGJhc2VUZXh0dXJlLmhhc0xvYWRlZClcbiAgICB7XG4gICAgICAgIGlmICh0aGlzLm5vRnJhbWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGZyYW1lID0gbmV3IG1hdGguUmVjdGFuZ2xlKDAsIDAsIGJhc2VUZXh0dXJlLndpZHRoLCBiYXNlVGV4dHVyZS5oZWlnaHQpO1xuXG4gICAgICAgICAgICAvLyBpZiB0aGVyZSBpcyBubyBmcmFtZSB3ZSBzaG91bGQgbW9uaXRvciBmb3IgYW55IGJhc2UgdGV4dHVyZSBjaGFuZ2VzLi5cbiAgICAgICAgICAgIGJhc2VUZXh0dXJlLm9uKCd1cGRhdGUnLCB0aGlzLm9uQmFzZVRleHR1cmVVcGRhdGVkLCB0aGlzKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmZyYW1lID0gZnJhbWU7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIGJhc2VUZXh0dXJlLm9uY2UoJ2xvYWRlZCcsIHRoaXMub25CYXNlVGV4dHVyZUxvYWRlZCwgdGhpcyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRmlyZWQgd2hlbiB0aGUgdGV4dHVyZSBpcyB1cGRhdGVkLiBUaGlzIGhhcHBlbnMgaWYgdGhlIGZyYW1lIG9yIHRoZSBiYXNlVGV4dHVyZSBpcyB1cGRhdGVkLlxuICAgICAqXG4gICAgICogQGV2ZW50IHVwZGF0ZVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLlRleHR1cmUjXG4gICAgICogQHByb3RlY3RlZFxuICAgICAqL1xufVxuXG5UZXh0dXJlLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoRXZlbnRFbWl0dGVyLnByb3RvdHlwZSk7XG5UZXh0dXJlLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFRleHR1cmU7XG5tb2R1bGUuZXhwb3J0cyA9IFRleHR1cmU7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKFRleHR1cmUucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogVGhlIGZyYW1lIHNwZWNpZmllcyB0aGUgcmVnaW9uIG9mIHRoZSBiYXNlIHRleHR1cmUgdGhhdCB0aGlzIHRleHR1cmUgdXNlcy5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuUmVjdGFuZ2xlfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLlRleHR1cmUjXG4gICAgICovXG4gICAgZnJhbWU6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fZnJhbWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKGZyYW1lKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLl9mcmFtZSA9IGZyYW1lO1xuXG4gICAgICAgICAgICB0aGlzLm5vRnJhbWUgPSBmYWxzZTtcblxuICAgICAgICAgICAgdGhpcy53aWR0aCA9IGZyYW1lLndpZHRoO1xuICAgICAgICAgICAgdGhpcy5oZWlnaHQgPSBmcmFtZS5oZWlnaHQ7XG5cbiAgICAgICAgICAgIGlmICghdGhpcy50cmltICYmICF0aGlzLnJvdGF0ZSAmJiAoZnJhbWUueCArIGZyYW1lLndpZHRoID4gdGhpcy5iYXNlVGV4dHVyZS53aWR0aCB8fCBmcmFtZS55ICsgZnJhbWUuaGVpZ2h0ID4gdGhpcy5iYXNlVGV4dHVyZS5oZWlnaHQpKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignVGV4dHVyZSBFcnJvcjogZnJhbWUgZG9lcyBub3QgZml0IGluc2lkZSB0aGUgYmFzZSBUZXh0dXJlIGRpbWVuc2lvbnMgJyArIHRoaXMpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvL3RoaXMudmFsaWQgPSBmcmFtZSAmJiBmcmFtZS53aWR0aCAmJiBmcmFtZS5oZWlnaHQgJiYgdGhpcy5iYXNlVGV4dHVyZS5zb3VyY2UgJiYgdGhpcy5iYXNlVGV4dHVyZS5oYXNMb2FkZWQ7XG4gICAgICAgICAgICB0aGlzLnZhbGlkID0gZnJhbWUgJiYgZnJhbWUud2lkdGggJiYgZnJhbWUuaGVpZ2h0ICYmIHRoaXMuYmFzZVRleHR1cmUuaGFzTG9hZGVkO1xuXG4gICAgICAgICAgICBpZiAodGhpcy50cmltKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHRoaXMud2lkdGggPSB0aGlzLnRyaW0ud2lkdGg7XG4gICAgICAgICAgICAgICAgdGhpcy5oZWlnaHQgPSB0aGlzLnRyaW0uaGVpZ2h0O1xuICAgICAgICAgICAgICAgIHRoaXMuX2ZyYW1lLndpZHRoID0gdGhpcy50cmltLndpZHRoO1xuICAgICAgICAgICAgICAgIHRoaXMuX2ZyYW1lLmhlaWdodCA9IHRoaXMudHJpbS5oZWlnaHQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdGhpcy5jcm9wID0gZnJhbWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICh0aGlzLnZhbGlkKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHRoaXMuX3VwZGF0ZVV2cygpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxufSk7XG5cbi8qKlxuICogVXBkYXRlcyB0aGlzIHRleHR1cmUgb24gdGhlIGdwdS5cbiAqXG4gKi9cblRleHR1cmUucHJvdG90eXBlLnVwZGF0ZSA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy5iYXNlVGV4dHVyZS51cGRhdGUoKTtcbn07XG5cbi8qKlxuICogQ2FsbGVkIHdoZW4gdGhlIGJhc2UgdGV4dHVyZSBpcyBsb2FkZWRcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5UZXh0dXJlLnByb3RvdHlwZS5vbkJhc2VUZXh0dXJlTG9hZGVkID0gZnVuY3Rpb24gKGJhc2VUZXh0dXJlKVxue1xuICAgIC8vIFRPRE8gdGhpcyBjb2RlIGxvb2tzIGNvbmZ1c2luZy4uIGJvbyB0byBhYnVzaW5nIGdldHRlcnMgYW5kIHNldHRlcnNzIVxuICAgIGlmICh0aGlzLm5vRnJhbWUpXG4gICAge1xuICAgICAgICB0aGlzLmZyYW1lID0gbmV3IG1hdGguUmVjdGFuZ2xlKDAsIDAsIGJhc2VUZXh0dXJlLndpZHRoLCBiYXNlVGV4dHVyZS5oZWlnaHQpO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICB0aGlzLmZyYW1lID0gdGhpcy5fZnJhbWU7XG4gICAgfVxuXG4gICAgdGhpcy5lbWl0KCd1cGRhdGUnLCB0aGlzKTtcbn07XG5cbi8qKlxuICogQ2FsbGVkIHdoZW4gdGhlIGJhc2UgdGV4dHVyZSBpcyB1cGRhdGVkXG4gKlxuICogQHByaXZhdGVcbiAqL1xuVGV4dHVyZS5wcm90b3R5cGUub25CYXNlVGV4dHVyZVVwZGF0ZWQgPSBmdW5jdGlvbiAoYmFzZVRleHR1cmUpXG57XG4gICAgdGhpcy5fZnJhbWUud2lkdGggPSBiYXNlVGV4dHVyZS53aWR0aDtcbiAgICB0aGlzLl9mcmFtZS5oZWlnaHQgPSBiYXNlVGV4dHVyZS5oZWlnaHQ7XG5cbiAgICB0aGlzLmVtaXQoJ3VwZGF0ZScsIHRoaXMpO1xufTtcblxuLyoqXG4gKiBEZXN0cm95cyB0aGlzIHRleHR1cmVcbiAqXG4gKiBAcGFyYW0gW2Rlc3Ryb3lCYXNlPWZhbHNlXSB7Ym9vbGVhbn0gV2hldGhlciB0byBkZXN0cm95IHRoZSBiYXNlIHRleHR1cmUgYXMgd2VsbFxuICovXG5UZXh0dXJlLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKGRlc3Ryb3lCYXNlKVxue1xuICAgIGlmICh0aGlzLmJhc2VUZXh0dXJlKVxuICAgIHtcbiAgICAgICAgaWYgKGRlc3Ryb3lCYXNlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmJhc2VUZXh0dXJlLmRlc3Ryb3koKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuYmFzZVRleHR1cmUub2ZmKCd1cGRhdGUnLCB0aGlzLm9uQmFzZVRleHR1cmVVcGRhdGVkLCB0aGlzKTtcbiAgICAgICAgdGhpcy5iYXNlVGV4dHVyZS5vZmYoJ2xvYWRlZCcsIHRoaXMub25CYXNlVGV4dHVyZUxvYWRlZCwgdGhpcyk7XG5cbiAgICAgICAgdGhpcy5iYXNlVGV4dHVyZSA9IG51bGw7XG4gICAgfVxuXG4gICAgdGhpcy5fZnJhbWUgPSBudWxsO1xuICAgIHRoaXMuX3V2cyA9IG51bGw7XG4gICAgdGhpcy50cmltID0gbnVsbDtcbiAgICB0aGlzLmNyb3AgPSBudWxsO1xuXG4gICAgdGhpcy52YWxpZCA9IGZhbHNlO1xuXG4gICAgdGhpcy5vZmYoJ2Rpc3Bvc2UnLCB0aGlzLmRpc3Bvc2UsIHRoaXMpO1xuICAgIHRoaXMub2ZmKCd1cGRhdGUnLCB0aGlzLnVwZGF0ZSwgdGhpcyk7XG59O1xuXG4vKipcbiAqIENyZWF0ZXMgYSBuZXcgdGV4dHVyZSBvYmplY3QgdGhhdCBhY3RzIHRoZSBzYW1lIGFzIHRoaXMgb25lLlxuICpcbiAqIEByZXR1cm4ge1BJWEkuVGV4dHVyZX1cbiAqL1xuVGV4dHVyZS5wcm90b3R5cGUuY2xvbmUgPSBmdW5jdGlvbiAoKVxue1xuICAgIHJldHVybiBuZXcgVGV4dHVyZSh0aGlzLmJhc2VUZXh0dXJlLCB0aGlzLmZyYW1lLCB0aGlzLmNyb3AsIHRoaXMudHJpbSwgdGhpcy5yb3RhdGUpO1xufTtcblxuLyoqXG4gKiBVcGRhdGVzIHRoZSBpbnRlcm5hbCBXZWJHTCBVViBjYWNoZS5cbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5UZXh0dXJlLnByb3RvdHlwZS5fdXBkYXRlVXZzID0gZnVuY3Rpb24gKClcbntcbiAgICBpZiAoIXRoaXMuX3V2cylcbiAgICB7XG4gICAgICAgIHRoaXMuX3V2cyA9IG5ldyBUZXh0dXJlVXZzKCk7XG4gICAgfVxuXG4gICAgdGhpcy5fdXZzLnNldCh0aGlzLmNyb3AsIHRoaXMuYmFzZVRleHR1cmUsIHRoaXMucm90YXRlKTtcbn07XG5cbi8qKlxuICogSGVscGVyIGZ1bmN0aW9uIHRoYXQgY3JlYXRlcyBhIFRleHR1cmUgb2JqZWN0IGZyb20gdGhlIGdpdmVuIGltYWdlIHVybC5cbiAqIElmIHRoZSBpbWFnZSBpcyBub3QgaW4gdGhlIHRleHR1cmUgY2FjaGUgaXQgd2lsbCBiZSAgY3JlYXRlZCBhbmQgbG9hZGVkLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBwYXJhbSBpbWFnZVVybCB7c3RyaW5nfSBUaGUgaW1hZ2UgdXJsIG9mIHRoZSB0ZXh0dXJlXG4gKiBAcGFyYW0gY3Jvc3NvcmlnaW4ge2Jvb2xlYW59IFdoZXRoZXIgcmVxdWVzdHMgc2hvdWxkIGJlIHRyZWF0ZWQgYXMgY3Jvc3NvcmlnaW5cbiAqIEBwYXJhbSBzY2FsZU1vZGUge251bWJlcn0gU2VlIHtAbGluayBQSVhJLlNDQUxFX01PREVTfSBmb3IgcG9zc2libGUgdmFsdWVzXG4gKiBAcmV0dXJuIHtQSVhJLlRleHR1cmV9IFRoZSBuZXdseSBjcmVhdGVkIHRleHR1cmVcbiAqL1xuVGV4dHVyZS5mcm9tSW1hZ2UgPSBmdW5jdGlvbiAoaW1hZ2VVcmwsIGNyb3Nzb3JpZ2luLCBzY2FsZU1vZGUpXG57XG4gICAgdmFyIHRleHR1cmUgPSB1dGlscy5UZXh0dXJlQ2FjaGVbaW1hZ2VVcmxdO1xuXG4gICAgaWYgKCF0ZXh0dXJlKVxuICAgIHtcbiAgICAgICAgdGV4dHVyZSA9IG5ldyBUZXh0dXJlKEJhc2VUZXh0dXJlLmZyb21JbWFnZShpbWFnZVVybCwgY3Jvc3NvcmlnaW4sIHNjYWxlTW9kZSkpO1xuICAgICAgICB1dGlscy5UZXh0dXJlQ2FjaGVbaW1hZ2VVcmxdID0gdGV4dHVyZTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGV4dHVyZTtcbn07XG5cbi8qKlxuICogSGVscGVyIGZ1bmN0aW9uIHRoYXQgY3JlYXRlcyBhIHNwcml0ZSB0aGF0IHdpbGwgY29udGFpbiBhIHRleHR1cmUgZnJvbSB0aGUgVGV4dHVyZUNhY2hlIGJhc2VkIG9uIHRoZSBmcmFtZUlkXG4gKiBUaGUgZnJhbWUgaWRzIGFyZSBjcmVhdGVkIHdoZW4gYSBUZXh0dXJlIHBhY2tlciBmaWxlIGhhcyBiZWVuIGxvYWRlZFxuICpcbiAqIEBzdGF0aWNcbiAqIEBwYXJhbSBmcmFtZUlkIHtzdHJpbmd9IFRoZSBmcmFtZSBJZCBvZiB0aGUgdGV4dHVyZSBpbiB0aGUgY2FjaGVcbiAqIEByZXR1cm4ge1BJWEkuVGV4dHVyZX0gVGhlIG5ld2x5IGNyZWF0ZWQgdGV4dHVyZVxuICovXG5UZXh0dXJlLmZyb21GcmFtZSA9IGZ1bmN0aW9uIChmcmFtZUlkKVxue1xuICAgIHZhciB0ZXh0dXJlID0gdXRpbHMuVGV4dHVyZUNhY2hlW2ZyYW1lSWRdO1xuXG4gICAgaWYgKCF0ZXh0dXJlKVxuICAgIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdUaGUgZnJhbWVJZCBcIicgKyBmcmFtZUlkICsgJ1wiIGRvZXMgbm90IGV4aXN0IGluIHRoZSB0ZXh0dXJlIGNhY2hlJyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRleHR1cmU7XG59O1xuXG4vKipcbiAqIEhlbHBlciBmdW5jdGlvbiB0aGF0IGNyZWF0ZXMgYSBuZXcgVGV4dHVyZSBiYXNlZCBvbiB0aGUgZ2l2ZW4gY2FudmFzIGVsZW1lbnQuXG4gKlxuICogQHN0YXRpY1xuICogQHBhcmFtIGNhbnZhcyB7Q2FudmFzfSBUaGUgY2FudmFzIGVsZW1lbnQgc291cmNlIG9mIHRoZSB0ZXh0dXJlXG4gKiBAcGFyYW0gc2NhbGVNb2RlIHtudW1iZXJ9IFNlZSB7QGxpbmsgUElYSS5TQ0FMRV9NT0RFU30gZm9yIHBvc3NpYmxlIHZhbHVlc1xuICogQHJldHVybiB7UElYSS5UZXh0dXJlfVxuICovXG5UZXh0dXJlLmZyb21DYW52YXMgPSBmdW5jdGlvbiAoY2FudmFzLCBzY2FsZU1vZGUpXG57XG4gICAgcmV0dXJuIG5ldyBUZXh0dXJlKEJhc2VUZXh0dXJlLmZyb21DYW52YXMoY2FudmFzLCBzY2FsZU1vZGUpKTtcbn07XG5cbi8qKlxuICogSGVscGVyIGZ1bmN0aW9uIHRoYXQgY3JlYXRlcyBhIG5ldyBUZXh0dXJlIGJhc2VkIG9uIHRoZSBnaXZlbiB2aWRlbyBlbGVtZW50LlxuICpcbiAqIEBzdGF0aWNcbiAqIEBwYXJhbSB2aWRlbyB7SFRNTFZpZGVvRWxlbWVudH1cbiAqIEBwYXJhbSBzY2FsZU1vZGUge251bWJlcn0gU2VlIHtAbGluayBQSVhJLlNDQUxFX01PREVTfSBmb3IgcG9zc2libGUgdmFsdWVzXG4gKiBAcmV0dXJuIHtQSVhJLlRleHR1cmV9IEEgVGV4dHVyZVxuICovXG5UZXh0dXJlLmZyb21WaWRlbyA9IGZ1bmN0aW9uICh2aWRlbywgc2NhbGVNb2RlKVxue1xuICAgIGlmICh0eXBlb2YgdmlkZW8gPT09ICdzdHJpbmcnKVxuICAgIHtcbiAgICAgICAgcmV0dXJuIFRleHR1cmUuZnJvbVZpZGVvVXJsKHZpZGVvLCBzY2FsZU1vZGUpO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICByZXR1cm4gbmV3IFRleHR1cmUoVmlkZW9CYXNlVGV4dHVyZS5mcm9tVmlkZW8odmlkZW8sIHNjYWxlTW9kZSkpO1xuICAgIH1cbn07XG5cbi8qKlxuICogSGVscGVyIGZ1bmN0aW9uIHRoYXQgY3JlYXRlcyBhIG5ldyBUZXh0dXJlIGJhc2VkIG9uIHRoZSB2aWRlbyB1cmwuXG4gKlxuICogQHN0YXRpY1xuICogQHBhcmFtIHZpZGVvVXJsIHtzdHJpbmd9XG4gKiBAcGFyYW0gc2NhbGVNb2RlIHtudW1iZXJ9IFNlZSB7QGxpbmsgUElYSS5TQ0FMRV9NT0RFU30gZm9yIHBvc3NpYmxlIHZhbHVlc1xuICogQHJldHVybiB7UElYSS5UZXh0dXJlfSBBIFRleHR1cmVcbiAqL1xuVGV4dHVyZS5mcm9tVmlkZW9VcmwgPSBmdW5jdGlvbiAodmlkZW9VcmwsIHNjYWxlTW9kZSlcbntcbiAgICByZXR1cm4gbmV3IFRleHR1cmUoVmlkZW9CYXNlVGV4dHVyZS5mcm9tVXJsKHZpZGVvVXJsLCBzY2FsZU1vZGUpKTtcbn07XG5cbi8qKlxuICogQWRkcyBhIHRleHR1cmUgdG8gdGhlIGdsb2JhbCB1dGlscy5UZXh0dXJlQ2FjaGUuIFRoaXMgY2FjaGUgaXMgc2hhcmVkIGFjcm9zcyB0aGUgd2hvbGUgUElYSSBvYmplY3QuXG4gKlxuICogQHN0YXRpY1xuICogQHBhcmFtIHRleHR1cmUge1BJWEkuVGV4dHVyZX0gVGhlIFRleHR1cmUgdG8gYWRkIHRvIHRoZSBjYWNoZS5cbiAqIEBwYXJhbSBpZCB7c3RyaW5nfSBUaGUgaWQgdGhhdCB0aGUgdGV4dHVyZSB3aWxsIGJlIHN0b3JlZCBhZ2FpbnN0LlxuICovXG5UZXh0dXJlLmFkZFRleHR1cmVUb0NhY2hlID0gZnVuY3Rpb24gKHRleHR1cmUsIGlkKVxue1xuICAgIHV0aWxzLlRleHR1cmVDYWNoZVtpZF0gPSB0ZXh0dXJlO1xufTtcblxuLyoqXG4gKiBSZW1vdmUgYSB0ZXh0dXJlIGZyb20gdGhlIGdsb2JhbCB1dGlscy5UZXh0dXJlQ2FjaGUuXG4gKlxuICogQHN0YXRpY1xuICogQHBhcmFtIGlkIHtzdHJpbmd9IFRoZSBpZCBvZiB0aGUgdGV4dHVyZSB0byBiZSByZW1vdmVkXG4gKiBAcmV0dXJuIHtQSVhJLlRleHR1cmV9IFRoZSB0ZXh0dXJlIHRoYXQgd2FzIHJlbW92ZWRcbiAqL1xuVGV4dHVyZS5yZW1vdmVUZXh0dXJlRnJvbUNhY2hlID0gZnVuY3Rpb24gKGlkKVxue1xuICAgIHZhciB0ZXh0dXJlID0gdXRpbHMuVGV4dHVyZUNhY2hlW2lkXTtcblxuICAgIGRlbGV0ZSB1dGlscy5UZXh0dXJlQ2FjaGVbaWRdO1xuICAgIGRlbGV0ZSB1dGlscy5CYXNlVGV4dHVyZUNhY2hlW2lkXTtcblxuICAgIHJldHVybiB0ZXh0dXJlO1xufTtcblxuLyoqXG4gKiBBbiBlbXB0eSB0ZXh0dXJlLCB1c2VkIG9mdGVuIHRvIG5vdCBoYXZlIHRvIGNyZWF0ZSBtdWx0aXBsZSBlbXB0eSB0ZXh0dXJlcy5cbiAqXG4gKiBAc3RhdGljXG4gKiBAY29uc3RhbnRcbiAqL1xuVGV4dHVyZS5FTVBUWSA9IG5ldyBUZXh0dXJlKG5ldyBCYXNlVGV4dHVyZSgpKTtcbiIsIlxuLyoqXG4gKiBBIHN0YW5kYXJkIG9iamVjdCB0byBzdG9yZSB0aGUgVXZzIG9mIGEgdGV4dHVyZVxuICpcbiAqIEBjbGFzc1xuICogQHByaXZhdGVcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKi9cbmZ1bmN0aW9uIFRleHR1cmVVdnMoKVxue1xuICAgIHRoaXMueDAgPSAwO1xuICAgIHRoaXMueTAgPSAwO1xuXG4gICAgdGhpcy54MSA9IDE7XG4gICAgdGhpcy55MSA9IDA7XG5cbiAgICB0aGlzLngyID0gMTtcbiAgICB0aGlzLnkyID0gMTtcblxuICAgIHRoaXMueDMgPSAwO1xuICAgIHRoaXMueTMgPSAxO1xuXG4gICAgdGhpcy54eTBfdWludDMyID0gMDtcbiAgICB0aGlzLnh5MV91aW50MzIgPSAwO1xuICAgIHRoaXMueHkyX3VpbnQzMiA9IDA7XG4gICAgdGhpcy54eTNfdWludDMyID0gMDtcblxuICAgIHRoaXMudXZzX3VpbnQzMiA9IG5ldyBVaW50MzJBcnJheSg0KVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IFRleHR1cmVVdnM7XG5cbi8qKlxuICogU2V0cyB0aGUgdGV4dHVyZSBVdnMgYmFzZWQgb24gdGhlIGdpdmVuIGZyYW1lIGluZm9ybWF0aW9uXG4gKiBAcGFyYW0gZnJhbWUge1BJWEkuUmVjdGFuZ2xlfVxuICogQHBhcmFtIGJhc2VGcmFtZSB7UElYSS5SZWN0YW5nbGV9XG4gKiBAcGFyYW0gcm90YXRlIHtib29sZWFufSBXaGV0aGVyIG9yIG5vdCB0aGUgZnJhbWUgaXMgcm90YXRlZFxuICogQHByaXZhdGVcbiAqL1xuVGV4dHVyZVV2cy5wcm90b3R5cGUuc2V0ID0gZnVuY3Rpb24gKGZyYW1lLCBiYXNlRnJhbWUsIHJvdGF0ZSlcbntcbiAgICB2YXIgdHcgPSBiYXNlRnJhbWUud2lkdGg7XG4gICAgdmFyIHRoID0gYmFzZUZyYW1lLmhlaWdodDtcblxuICAgIGlmKHJvdGF0ZSlcbiAgICB7XG4gICAgICAgIHRoaXMueDAgPSAoZnJhbWUueCArIGZyYW1lLmhlaWdodCkgLyB0dztcbiAgICAgICAgdGhpcy55MCA9IGZyYW1lLnkgLyB0aDtcblxuICAgICAgICB0aGlzLngxID0gKGZyYW1lLnggKyBmcmFtZS5oZWlnaHQpIC8gdHc7XG4gICAgICAgIHRoaXMueTEgPSAoZnJhbWUueSArIGZyYW1lLndpZHRoKSAvIHRoO1xuXG4gICAgICAgIHRoaXMueDIgPSBmcmFtZS54IC8gdHc7XG4gICAgICAgIHRoaXMueTIgPSAoZnJhbWUueSArIGZyYW1lLndpZHRoKSAvIHRoO1xuXG4gICAgICAgIHRoaXMueDMgPSBmcmFtZS54IC8gdHc7XG4gICAgICAgIHRoaXMueTMgPSBmcmFtZS55IC8gdGg7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG5cbiAgICAgICAgdGhpcy54MCA9IGZyYW1lLnggLyB0dztcbiAgICAgICAgdGhpcy55MCA9IGZyYW1lLnkgLyB0aDtcblxuICAgICAgICB0aGlzLngxID0gKGZyYW1lLnggKyBmcmFtZS53aWR0aCkgLyB0dztcbiAgICAgICAgdGhpcy55MSA9IGZyYW1lLnkgLyB0aDtcblxuICAgICAgICB0aGlzLngyID0gKGZyYW1lLnggKyBmcmFtZS53aWR0aCkgLyB0dztcbiAgICAgICAgdGhpcy55MiA9IChmcmFtZS55ICsgZnJhbWUuaGVpZ2h0KSAvIHRoO1xuXG4gICAgICAgIHRoaXMueDMgPSBmcmFtZS54IC8gdHc7XG4gICAgICAgIHRoaXMueTMgPSAoZnJhbWUueSArIGZyYW1lLmhlaWdodCkgLyB0aDtcbiAgICB9XG5cbiAgICB0aGlzLnV2c191aW50MzJbMF0gPSAoKCh0aGlzLnkwICogNjU1MzUpICYgMHhGRkZGKSA8PCAxNikgfCAoKHRoaXMueDAgKiA2NTUzNSkgJiAweEZGRkYpO1xuICAgIHRoaXMudXZzX3VpbnQzMlsxXSA9ICgoKHRoaXMueTEgKiA2NTUzNSkgJiAweEZGRkYpIDw8IDE2KSB8ICgodGhpcy54MSAqIDY1NTM1KSAmIDB4RkZGRik7XG4gICAgdGhpcy51dnNfdWludDMyWzJdID0gKCgodGhpcy55MiAqIDY1NTM1KSAmIDB4RkZGRikgPDwgMTYpIHwgKCh0aGlzLngyICogNjU1MzUpICYgMHhGRkZGKTtcbiAgICB0aGlzLnV2c191aW50MzJbM10gPSAoKCh0aGlzLnkzICogNjU1MzUpICYgMHhGRkZGKSA8PCAxNikgfCAoKHRoaXMueDMgKiA2NTUzNSkgJiAweEZGRkYpO1xufTtcbiIsInZhciBCYXNlVGV4dHVyZSA9IHJlcXVpcmUoJy4vQmFzZVRleHR1cmUnKSxcbiAgICB1dGlscyA9IHJlcXVpcmUoJy4uL3V0aWxzJyk7XG5cbi8qKlxuICogQSB0ZXh0dXJlIG9mIGEgW3BsYXlpbmddIFZpZGVvLlxuICpcbiAqIFZpZGVvIGJhc2UgdGV4dHVyZXMgbWltaWMgUGl4aSBCYXNlVGV4dHVyZS5mcm9tLi4uLiBtZXRob2QgaW4gdGhlaXIgY3JlYXRpb24gcHJvY2Vzcy5cbiAqXG4gKiBUaGlzIGNhbiBiZSB1c2VkIGluIHNldmVyYWwgd2F5cywgc3VjaCBhczpcbiAqXG4gKiBgYGBqc1xuICogdmFyIHRleHR1cmUgPSBQSVhJLlZpZGVvQmFzZVRleHR1cmUuZnJvbVVybCgnaHR0cDovL215ZG9tYWluLmNvbS92aWRlby5tcDQnKTtcbiAqXG4gKiB2YXIgdGV4dHVyZSA9IFBJWEkuVmlkZW9CYXNlVGV4dHVyZS5mcm9tVXJsKHsgc3JjOiAnaHR0cDovL215ZG9tYWluLmNvbS92aWRlby5tcDQnLCBtaW1lOiAndmlkZW8vbXA0JyB9KTtcbiAqXG4gKiB2YXIgdGV4dHVyZSA9IFBJWEkuVmlkZW9CYXNlVGV4dHVyZS5mcm9tVXJscyhbJy92aWRlby53ZWJtJywgJy92aWRlby5tcDQnXSk7XG4gKlxuICogdmFyIHRleHR1cmUgPSBQSVhJLlZpZGVvQmFzZVRleHR1cmUuZnJvbVVybHMoW1xuICogICAgIHsgc3JjOiAnL3ZpZGVvLndlYm0nLCBtaW1lOiAndmlkZW8vd2VibScgfSxcbiAqICAgICB7IHNyYzogJy92aWRlby5tcDQnLCBtaW1lOiAndmlkZW8vbXA0JyB9XG4gKiBdKTtcbiAqIGBgYFxuICpcbiAqIFNlZSB0aGUgW1wiZGV1c1wiIGRlbW9dKGh0dHA6Ly93d3cuZ29vZGJveWRpZ2l0YWwuY29tL3BpeGlqcy9leGFtcGxlcy9kZXVzLykuXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLkJhc2VUZXh0dXJlXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIHNvdXJjZSB7SFRNTFZpZGVvRWxlbWVudH1cbiAqIEBwYXJhbSBbc2NhbGVNb2RlXSB7bnVtYmVyfSBTZWUge0BsaW5rIFBJWEkuU0NBTEVfTU9ERVN9IGZvciBwb3NzaWJsZSB2YWx1ZXNcbiAqL1xuZnVuY3Rpb24gVmlkZW9CYXNlVGV4dHVyZShzb3VyY2UsIHNjYWxlTW9kZSlcbntcbiAgICBpZiAoIXNvdXJjZSlcbiAgICB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignTm8gdmlkZW8gc291cmNlIGVsZW1lbnQgc3BlY2lmaWVkLicpO1xuICAgIH1cblxuICAgIC8vIGhvb2sgaW4gaGVyZSB0byBjaGVjayBpZiB2aWRlbyBpcyBhbHJlYWR5IGF2YWlsYWJsZS5cbiAgICAvLyBCYXNlVGV4dHVyZSBsb29rcyBmb3IgYSBzb3VyY2UuY29tcGxldGUgYm9vbGVhbiwgcGx1cyB3aWR0aCAmIGhlaWdodC5cblxuICAgIGlmICgoc291cmNlLnJlYWR5U3RhdGUgPT09IHNvdXJjZS5IQVZFX0VOT1VHSF9EQVRBIHx8IHNvdXJjZS5yZWFkeVN0YXRlID09PSBzb3VyY2UuSEFWRV9GVVRVUkVfREFUQSkgJiYgc291cmNlLndpZHRoICYmIHNvdXJjZS5oZWlnaHQpXG4gICAge1xuICAgICAgICBzb3VyY2UuY29tcGxldGUgPSB0cnVlO1xuICAgIH1cblxuICAgIEJhc2VUZXh0dXJlLmNhbGwodGhpcywgc291cmNlLCBzY2FsZU1vZGUpO1xuXG4gICAgLyoqXG4gICAgICogU2hvdWxkIHRoZSBiYXNlIHRleHR1cmUgYXV0b21hdGljYWxseSB1cGRhdGUgaXRzZWxmLCBzZXQgdG8gdHJ1ZSBieSBkZWZhdWx0XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqIEBkZWZhdWx0IHRydWVcbiAgICAgKi9cbiAgICB0aGlzLmF1dG9VcGRhdGUgPSBmYWxzZTtcblxuICAgIHRoaXMuX29uVXBkYXRlID0gdGhpcy5fb25VcGRhdGUuYmluZCh0aGlzKTtcbiAgICB0aGlzLl9vbkNhblBsYXkgPSB0aGlzLl9vbkNhblBsYXkuYmluZCh0aGlzKTtcblxuICAgIGlmICghc291cmNlLmNvbXBsZXRlKVxuICAgIHtcbiAgICAgICAgc291cmNlLmFkZEV2ZW50TGlzdGVuZXIoJ2NhbnBsYXknLCB0aGlzLl9vbkNhblBsYXkpO1xuICAgICAgICBzb3VyY2UuYWRkRXZlbnRMaXN0ZW5lcignY2FucGxheXRocm91Z2gnLCB0aGlzLl9vbkNhblBsYXkpO1xuXG4gICAgICAgIC8vIHN0YXJ0ZWQgcGxheWluZy4uXG4gICAgICAgIHNvdXJjZS5hZGRFdmVudExpc3RlbmVyKCdwbGF5JywgdGhpcy5fb25QbGF5U3RhcnQuYmluZCh0aGlzKSk7XG4gICAgICAgIHNvdXJjZS5hZGRFdmVudExpc3RlbmVyKCdwYXVzZScsIHRoaXMuX29uUGxheVN0b3AuYmluZCh0aGlzKSk7XG4gICAgfVxuXG4gICAgdGhpcy5fX2xvYWRlZCA9IGZhbHNlO1xufVxuXG5WaWRlb0Jhc2VUZXh0dXJlLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoQmFzZVRleHR1cmUucHJvdG90eXBlKTtcblZpZGVvQmFzZVRleHR1cmUucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gVmlkZW9CYXNlVGV4dHVyZTtcbm1vZHVsZS5leHBvcnRzID0gVmlkZW9CYXNlVGV4dHVyZTtcblxuLyoqXG4gKiBUaGUgaW50ZXJuYWwgdXBkYXRlIGxvb3Agb2YgdGhlIHZpZGVvIGJhc2UgdGV4dHVyZSwgb25seSBydW5zIHdoZW4gYXV0b1VwZGF0ZSBpcyBzZXQgdG8gdHJ1ZVxuICpcbiAqIEBwcml2YXRlXG4gKi9cblZpZGVvQmFzZVRleHR1cmUucHJvdG90eXBlLl9vblVwZGF0ZSA9IGZ1bmN0aW9uICgpXG57XG4gICAgaWYgKHRoaXMuYXV0b1VwZGF0ZSlcbiAgICB7XG4gICAgICAgIHdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUodGhpcy5fb25VcGRhdGUpO1xuICAgICAgICB0aGlzLnVwZGF0ZSgpO1xuICAgIH1cbn07XG5cbi8qKlxuICogUnVucyB0aGUgdXBkYXRlIGxvb3Agd2hlbiB0aGUgdmlkZW8gaXMgcmVhZHkgdG8gcGxheVxuICpcbiAqIEBwcml2YXRlXG4gKi9cblZpZGVvQmFzZVRleHR1cmUucHJvdG90eXBlLl9vblBsYXlTdGFydCA9IGZ1bmN0aW9uICgpXG57XG4gICAgaWYgKCF0aGlzLmF1dG9VcGRhdGUpXG4gICAge1xuICAgICAgICB3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lKHRoaXMuX29uVXBkYXRlKTtcbiAgICAgICAgdGhpcy5hdXRvVXBkYXRlID0gdHJ1ZTtcbiAgICB9XG59O1xuXG4vKipcbiAqIEZpcmVkIHdoZW4gYSBwYXVzZSBldmVudCBpcyB0cmlnZ2VyZWQsIHN0b3BzIHRoZSB1cGRhdGUgbG9vcFxuICpcbiAqIEBwcml2YXRlXG4gKi9cblZpZGVvQmFzZVRleHR1cmUucHJvdG90eXBlLl9vblBsYXlTdG9wID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLmF1dG9VcGRhdGUgPSBmYWxzZTtcbn07XG5cbi8qKlxuICogRmlyZWQgd2hlbiB0aGUgdmlkZW8gaXMgbG9hZGVkIGFuZCByZWFkeSB0byBwbGF5XG4gKlxuICogQHByaXZhdGVcbiAqL1xuVmlkZW9CYXNlVGV4dHVyZS5wcm90b3R5cGUuX29uQ2FuUGxheSA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy5oYXNMb2FkZWQgPSB0cnVlO1xuXG4gICAgaWYgKHRoaXMuc291cmNlKVxuICAgIHtcbiAgICAgICAgdGhpcy5zb3VyY2UucmVtb3ZlRXZlbnRMaXN0ZW5lcignY2FucGxheScsIHRoaXMuX29uQ2FuUGxheSk7XG4gICAgICAgIHRoaXMuc291cmNlLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2NhbnBsYXl0aHJvdWdoJywgdGhpcy5fb25DYW5QbGF5KTtcblxuICAgICAgICB0aGlzLndpZHRoID0gdGhpcy5zb3VyY2UudmlkZW9XaWR0aDtcbiAgICAgICAgdGhpcy5oZWlnaHQgPSB0aGlzLnNvdXJjZS52aWRlb0hlaWdodDtcblxuICAgICAgICB0aGlzLnNvdXJjZS5wbGF5KCk7XG5cbiAgICAgICAgLy8gcHJldmVudCBtdWx0aXBsZSBsb2FkZWQgZGlzcGF0Y2hlcy4uXG4gICAgICAgIGlmICghdGhpcy5fX2xvYWRlZClcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5fX2xvYWRlZCA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLmVtaXQoJ2xvYWRlZCcsIHRoaXMpO1xuICAgICAgICB9XG4gICAgfVxufTtcblxuLyoqXG4gKiBEZXN0cm95cyB0aGlzIHRleHR1cmVcbiAqXG4gKi9cblZpZGVvQmFzZVRleHR1cmUucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoKVxue1xuICAgIGlmICh0aGlzLnNvdXJjZSAmJiB0aGlzLnNvdXJjZS5fcGl4aUlkKVxuICAgIHtcbiAgICAgICAgZGVsZXRlIHV0aWxzLkJhc2VUZXh0dXJlQ2FjaGVbIHRoaXMuc291cmNlLl9waXhpSWQgXTtcbiAgICAgICAgZGVsZXRlIHRoaXMuc291cmNlLl9waXhpSWQ7XG4gICAgfVxuXG4gICAgQmFzZVRleHR1cmUucHJvdG90eXBlLmRlc3Ryb3kuY2FsbCh0aGlzKTtcbn07XG5cbi8qKlxuICogTWltaWMgUGl4aSBCYXNlVGV4dHVyZS5mcm9tLi4uLiBtZXRob2QuXG4gKlxuICogQHN0YXRpY1xuICogQHBhcmFtIHZpZGVvIHtIVE1MVmlkZW9FbGVtZW50fVxuICogQHBhcmFtIHNjYWxlTW9kZSB7bnVtYmVyfSBTZWUge0BsaW5rIFBJWEkuU0NBTEVfTU9ERVN9IGZvciBwb3NzaWJsZSB2YWx1ZXNcbiAqIEByZXR1cm4ge1BJWEkuVmlkZW9CYXNlVGV4dHVyZX1cbiAqL1xuVmlkZW9CYXNlVGV4dHVyZS5mcm9tVmlkZW8gPSBmdW5jdGlvbiAodmlkZW8sIHNjYWxlTW9kZSlcbntcbiAgICBpZiAoIXZpZGVvLl9waXhpSWQpXG4gICAge1xuICAgICAgICB2aWRlby5fcGl4aUlkID0gJ3ZpZGVvXycgKyB1dGlscy51aWQoKTtcbiAgICB9XG5cbiAgICB2YXIgYmFzZVRleHR1cmUgPSB1dGlscy5CYXNlVGV4dHVyZUNhY2hlW3ZpZGVvLl9waXhpSWRdO1xuXG4gICAgaWYgKCFiYXNlVGV4dHVyZSlcbiAgICB7XG4gICAgICAgIGJhc2VUZXh0dXJlID0gbmV3IFZpZGVvQmFzZVRleHR1cmUodmlkZW8sIHNjYWxlTW9kZSk7XG4gICAgICAgIHV0aWxzLkJhc2VUZXh0dXJlQ2FjaGVbIHZpZGVvLl9waXhpSWQgXSA9IGJhc2VUZXh0dXJlO1xuICAgIH1cblxuICAgIHJldHVybiBiYXNlVGV4dHVyZTtcbn07XG5cbi8qKlxuICogSGVscGVyIGZ1bmN0aW9uIHRoYXQgY3JlYXRlcyBhIG5ldyBCYXNlVGV4dHVyZSBiYXNlZCBvbiB0aGUgZ2l2ZW4gdmlkZW8gZWxlbWVudC5cbiAqIFRoaXMgQmFzZVRleHR1cmUgY2FuIHRoZW4gYmUgdXNlZCB0byBjcmVhdGUgYSB0ZXh0dXJlXG4gKlxuICogQHN0YXRpY1xuICogQHBhcmFtIHZpZGVvU3JjIHtzdHJpbmd8b2JqZWN0fHN0cmluZ1tdfG9iamVjdFtdfSBUaGUgVVJMKHMpIGZvciB0aGUgdmlkZW8uXG4gKiBAcGFyYW0gW3ZpZGVvU3JjLnNyY10ge3N0cmluZ30gT25lIG9mIHRoZSBzb3VyY2UgdXJscyBmb3IgdGhlIHZpZGVvXG4gKiBAcGFyYW0gW3ZpZGVvU3JjLm1pbWVdIHtzdHJpbmd9IFRoZSBtaW1ldHlwZSBvZiB0aGUgdmlkZW8gKGUuZy4gJ3ZpZGVvL21wNCcpLiBJZiBub3Qgc3BlY2lmaWVkXG4gKiAgdGhlIHVybCdzIGV4dGVuc2lvbiB3aWxsIGJlIHVzZWQgYXMgdGhlIHNlY29uZCBwYXJ0IG9mIHRoZSBtaW1lIHR5cGUuXG4gKiBAcGFyYW0gc2NhbGVNb2RlIHtudW1iZXJ9IFNlZSB7QGxpbmsgUElYSS5TQ0FMRV9NT0RFU30gZm9yIHBvc3NpYmxlIHZhbHVlc1xuICogQHJldHVybiB7UElYSS5WaWRlb0Jhc2VUZXh0dXJlfVxuICovXG5WaWRlb0Jhc2VUZXh0dXJlLmZyb21VcmwgPSBmdW5jdGlvbiAodmlkZW9TcmMsIHNjYWxlTW9kZSlcbntcbiAgICB2YXIgdmlkZW8gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd2aWRlbycpO1xuXG4gICAgLy8gYXJyYXkgb2Ygb2JqZWN0cyBvciBzdHJpbmdzXG4gICAgaWYgKEFycmF5LmlzQXJyYXkodmlkZW9TcmMpKVxuICAgIHtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB2aWRlb1NyYy5sZW5ndGg7ICsraSlcbiAgICAgICAge1xuICAgICAgICAgICAgdmlkZW8uYXBwZW5kQ2hpbGQoY3JlYXRlU291cmNlKHZpZGVvU3JjW2ldLnNyYyB8fCB2aWRlb1NyY1tpXSwgdmlkZW9TcmNbaV0ubWltZSkpO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8vIHNpbmdsZSBvYmplY3Qgb3Igc3RyaW5nXG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgdmlkZW8uYXBwZW5kQ2hpbGQoY3JlYXRlU291cmNlKHZpZGVvU3JjLnNyYyB8fCB2aWRlb1NyYywgdmlkZW9TcmMubWltZSkpO1xuICAgIH1cblxuICAgIHZpZGVvLmxvYWQoKTtcbiAgICB2aWRlby5wbGF5KCk7XG5cbiAgICByZXR1cm4gVmlkZW9CYXNlVGV4dHVyZS5mcm9tVmlkZW8odmlkZW8sIHNjYWxlTW9kZSk7XG59O1xuXG5WaWRlb0Jhc2VUZXh0dXJlLmZyb21VcmxzID0gVmlkZW9CYXNlVGV4dHVyZS5mcm9tVXJsO1xuXG5mdW5jdGlvbiBjcmVhdGVTb3VyY2UocGF0aCwgdHlwZSlcbntcbiAgICBpZiAoIXR5cGUpXG4gICAge1xuICAgICAgICB0eXBlID0gJ3ZpZGVvLycgKyBwYXRoLnN1YnN0cihwYXRoLmxhc3RJbmRleE9mKCcuJykgKyAxKTtcbiAgICB9XG5cbiAgICB2YXIgc291cmNlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc291cmNlJyk7XG5cbiAgICBzb3VyY2Uuc3JjID0gcGF0aDtcbiAgICBzb3VyY2UudHlwZSA9IHR5cGU7XG5cbiAgICByZXR1cm4gc291cmNlO1xufVxuIiwidmFyIENPTlNUID0gcmVxdWlyZSgnLi4vY29uc3QnKSxcbiAgICBFdmVudEVtaXR0ZXIgPSByZXF1aXJlKCdldmVudGVtaXR0ZXIzJyksXG4gICAgLy8gSW50ZXJuYWwgZXZlbnQgdXNlZCBieSBjb21wb3NlZCBlbWl0dGVyXG4gICAgVElDSyA9ICd0aWNrJztcblxuLyoqXG4gKiBBIFRpY2tlciBjbGFzcyB0aGF0IHJ1bnMgYW4gdXBkYXRlIGxvb3AgdGhhdCBvdGhlciBvYmplY3RzIGxpc3RlbiB0by5cbiAqIFRoaXMgY2xhc3MgaXMgY29tcG9zZWQgYXJvdW5kIGFuIEV2ZW50RW1pdHRlciBvYmplY3QgdG8gYWRkIGxpc3RlbmVyc1xuICogbWVhbnQgZm9yIGV4ZWN1dGlvbiBvbiB0aGUgbmV4dCByZXF1ZXN0ZWQgYW5pbWF0aW9uIGZyYW1lLlxuICogQW5pbWF0aW9uIGZyYW1lcyBhcmUgcmVxdWVzdGVkIG9ubHkgd2hlbiBuZWNlc3NhcnksXG4gKiBlLmcuIFdoZW4gdGhlIHRpY2tlciBpcyBzdGFydGVkIGFuZCB0aGUgZW1pdHRlciBoYXMgbGlzdGVuZXJzLlxuICpcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWEkudGlja2VyXG4gKi9cbmZ1bmN0aW9uIFRpY2tlcigpXG57XG4gICAgdmFyIF90aGlzID0gdGhpcztcblxuICAgIC8qKlxuICAgICAqIEludGVybmFsIHRpY2sgbWV0aG9kIGJvdW5kIHRvIHRpY2tlciBpbnN0YW5jZS5cbiAgICAgKiBUaGlzIGlzIGJlY2F1c2UgaW4gZWFybHkgMjAxNSwgRnVuY3Rpb24uYmluZFxuICAgICAqIGlzIHN0aWxsIDYwJSBzbG93ZXIgaW4gaGlnaCBwZXJmb3JtYW5jZSBzY2VuYXJpb3MuXG4gICAgICogQWxzbyBzZXBhcmF0aW5nIGZyYW1lIHJlcXVlc3RzIGZyb20gdXBkYXRlIG1ldGhvZFxuICAgICAqIHNvIGxpc3RlbmVycyBtYXkgYmUgY2FsbGVkIGF0IGFueSB0aW1lIGFuZCB3aXRoXG4gICAgICogYW55IGFuaW1hdGlvbiBBUEksIGp1c3QgaW52b2tlIHRpY2tlci51cGRhdGUodGltZSkuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX3RpY2sgPSBmdW5jdGlvbiBfdGljayh0aW1lKSB7XG5cbiAgICAgICAgX3RoaXMuX3JlcXVlc3RJZCA9IG51bGw7XG5cbiAgICAgICAgaWYgKF90aGlzLnN0YXJ0ZWQpXG4gICAgICAgIHtcbiAgICAgICAgICAgIC8vIEludm9rZSBsaXN0ZW5lcnMgbm93XG4gICAgICAgICAgICBfdGhpcy51cGRhdGUodGltZSk7XG4gICAgICAgICAgICAvLyBMaXN0ZW5lciBzaWRlIGVmZmVjdHMgbWF5IGhhdmUgbW9kaWZpZWQgdGlja2VyIHN0YXRlLlxuICAgICAgICAgICAgaWYgKF90aGlzLnN0YXJ0ZWQgJiYgX3RoaXMuX3JlcXVlc3RJZCA9PT0gbnVsbCAmJiBfdGhpcy5fZW1pdHRlci5saXN0ZW5lcnMoVElDSywgdHJ1ZSkpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgX3RoaXMuX3JlcXVlc3RJZCA9IHJlcXVlc3RBbmltYXRpb25GcmFtZShfdGhpcy5fdGljayk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgLyoqXG4gICAgICogSW50ZXJuYWwgZW1pdHRlciB1c2VkIHRvIGZpcmUgJ3RpY2snIGV2ZW50XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9lbWl0dGVyID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gICAgLyoqXG4gICAgICogSW50ZXJuYWwgY3VycmVudCBmcmFtZSByZXF1ZXN0IElEXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9yZXF1ZXN0SWQgPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogSW50ZXJuYWwgdmFsdWUgbWFuYWdlZCBieSBtaW5GUFMgcHJvcGVydHkgc2V0dGVyIGFuZCBnZXR0ZXIuXG4gICAgICogVGhpcyBpcyB0aGUgbWF4aW11bSBhbGxvd2VkIG1pbGxpc2Vjb25kcyBiZXR3ZWVuIHVwZGF0ZXMuXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9tYXhFbGFwc2VkTVMgPSAxMDA7XG5cbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIG9yIG5vdCB0aGlzIHRpY2tlciBzaG91bGQgaW52b2tlIHRoZSBtZXRob2RcbiAgICAgKiB7QGxpbmsgUElYSS50aWNrZXIuVGlja2VyI3N0YXJ0fSBhdXRvbWF0aWNhbGx5XG4gICAgICogd2hlbiBhIGxpc3RlbmVyIGlzIGFkZGVkLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgICAqL1xuICAgIHRoaXMuYXV0b1N0YXJ0ID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBTY2FsYXIgdGltZSB2YWx1ZSBmcm9tIGxhc3QgZnJhbWUgdG8gdGhpcyBmcmFtZS5cbiAgICAgKiBUaGlzIHZhbHVlIGlzIGNhcHBlZCBieSBzZXR0aW5nIHtAbGluayBQSVhJLnRpY2tlci5UaWNrZXIjbWluRlBTfVxuICAgICAqIGFuZCBpcyBzY2FsZWQgd2l0aCB7QGxpbmsgUElYSS50aWNrZXIuVGlja2VyI3NwZWVkfS5cbiAgICAgKiAqKk5vdGU6KiogVGhlIGNhcCBtYXkgYmUgZXhjZWVkZWQgYnkgc2NhbGluZy5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAxXG4gICAgICovXG4gICAgdGhpcy5kZWx0YVRpbWUgPSAxO1xuXG4gICAgLyoqXG4gICAgICogVGltZSBlbGFwc2VkIGluIG1pbGxpc2Vjb25kcyBmcm9tIGxhc3QgZnJhbWUgdG8gdGhpcyBmcmFtZS5cbiAgICAgKiBPcHBvc2VkIHRvIHdoYXQgdGhlIHNjYWxhciB7QGxpbmsgUElYSS50aWNrZXIuVGlja2VyI2RlbHRhVGltZX1cbiAgICAgKiBpcyBiYXNlZCwgdGhpcyB2YWx1ZSBpcyBuZWl0aGVyIGNhcHBlZCBub3Igc2NhbGVkLlxuICAgICAqIElmIHRoZSBwbGF0Zm9ybSBzdXBwb3J0cyBET01IaWdoUmVzVGltZVN0YW1wLFxuICAgICAqIHRoaXMgdmFsdWUgd2lsbCBoYXZlIGEgcHJlY2lzaW9uIG9mIDEgwrVzLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7RE9NSGlnaFJlc1RpbWVTdGFtcHxudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMSAvIFRBUkdFVF9GUE1TXG4gICAgICovXG4gICAgdGhpcy5lbGFwc2VkTVMgPSAxIC8gQ09OU1QuVEFSR0VUX0ZQTVM7IC8vIGRlZmF1bHQgdG8gdGFyZ2V0IGZyYW1lIHRpbWVcblxuICAgIC8qKlxuICAgICAqIFRoZSBsYXN0IHRpbWUge0BsaW5rIFBJWEkudGlja2VyLlRpY2tlciN1cGRhdGV9IHdhcyBpbnZva2VkLlxuICAgICAqIFRoaXMgdmFsdWUgaXMgYWxzbyByZXNldCBpbnRlcm5hbGx5IG91dHNpZGUgb2YgaW52b2tpbmdcbiAgICAgKiB1cGRhdGUsIGJ1dCBvbmx5IHdoZW4gYSBuZXcgYW5pbWF0aW9uIGZyYW1lIGlzIHJlcXVlc3RlZC5cbiAgICAgKiBJZiB0aGUgcGxhdGZvcm0gc3VwcG9ydHMgRE9NSGlnaFJlc1RpbWVTdGFtcCxcbiAgICAgKiB0aGlzIHZhbHVlIHdpbGwgaGF2ZSBhIHByZWNpc2lvbiBvZiAxIMK1cy5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge0RPTUhpZ2hSZXNUaW1lU3RhbXB8bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDBcbiAgICAgKi9cbiAgICB0aGlzLmxhc3RUaW1lID0gMDtcblxuICAgIC8qKlxuICAgICAqIEZhY3RvciBvZiBjdXJyZW50IHtAbGluayBQSVhJLnRpY2tlci5UaWNrZXIjZGVsdGFUaW1lfS5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIC8vIFNjYWxlcyB0aWNrZXIuZGVsdGFUaW1lIHRvIHdoYXQgd291bGQgYmVcbiAgICAgKiAvLyB0aGUgZXF1aXZhbGVudCBvZiBhcHByb3hpbWF0ZWx5IDEyMCBGUFNcbiAgICAgKiB0aWNrZXIuc3BlZWQgPSAyO1xuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDFcbiAgICAgKi9cbiAgICB0aGlzLnNwZWVkID0gMTtcblxuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgb3Igbm90IHRoaXMgdGlja2VyIGhhcyBiZWVuIHN0YXJ0ZWQuXG4gICAgICogYHRydWVgIGlmIHtAbGluayBQSVhJLnRpY2tlci5UaWNrZXIjc3RhcnR9IGhhcyBiZWVuIGNhbGxlZC5cbiAgICAgKiBgZmFsc2VgIGlmIHtAbGluayBQSVhJLnRpY2tlci5UaWNrZXIjc3RvcH0gaGFzIGJlZW4gY2FsbGVkLlxuICAgICAqIFdoaWxlIGBmYWxzZWAsIHRoaXMgdmFsdWUgbWF5IGNoYW5nZSB0byBgdHJ1ZWAgaW4gdGhlXG4gICAgICogZXZlbnQgb2Yge0BsaW5rIFBJWEkudGlja2VyLlRpY2tlciNhdXRvU3RhcnR9IGJlaW5nIGB0cnVlYFxuICAgICAqIGFuZCBhIGxpc3RlbmVyIGlzIGFkZGVkLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgICAqL1xuICAgIHRoaXMuc3RhcnRlZCA9IGZhbHNlO1xufVxuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhUaWNrZXIucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogVGhlIGZyYW1lcyBwZXIgc2Vjb25kIGF0IHdoaWNoIHRoaXMgdGlja2VyIGlzIHJ1bm5pbmcuXG4gICAgICogVGhlIGRlZmF1bHQgaXMgYXBwcm94aW1hdGVseSA2MCBpbiBtb3N0IG1vZGVybiBicm93c2Vycy5cbiAgICAgKiAqKk5vdGU6KiogVGhpcyBkb2VzIG5vdCBmYWN0b3IgaW4gdGhlIHZhbHVlIG9mXG4gICAgICoge0BsaW5rIFBJWEkudGlja2VyLlRpY2tlciNzcGVlZH0sIHdoaWNoIGlzIHNwZWNpZmljXG4gICAgICogdG8gc2NhbGluZyB7QGxpbmsgUElYSS50aWNrZXIuVGlja2VyI2RlbHRhVGltZX0uXG4gICAgICpcbiAgICAgKiBAbWVtYmVyXG4gICAgICogQG1lbWJlcm9mIFBJWEkudGlja2VyLlRpY2tlciNcbiAgICAgKiBAcmVhZG9ubHlcbiAgICAgKi9cbiAgICBGUFM6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbigpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiAxMDAwIC8gdGhpcy5lbGFwc2VkTVM7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogTWFuYWdlcyB0aGUgbWF4aW11bSBhbW91bnQgb2YgbWlsbGlzZWNvbmRzIGFsbG93ZWQgdG9cbiAgICAgKiBlbGFwc2UgYmV0d2VlbiBpbnZva2luZyB7QGxpbmsgUElYSS50aWNrZXIuVGlja2VyI3VwZGF0ZX0uXG4gICAgICogVGhpcyB2YWx1ZSBpcyB1c2VkIHRvIGNhcCB7QGxpbmsgUElYSS50aWNrZXIuVGlja2VyI2RlbHRhVGltZX0sXG4gICAgICogYnV0IGRvZXMgbm90IGVmZmVjdCB0aGUgbWVhc3VyZWQgdmFsdWUgb2Yge0BsaW5rIFBJWEkudGlja2VyLlRpY2tlciNGUFN9LlxuICAgICAqIFdoZW4gc2V0dGluZyB0aGlzIHByb3BlcnR5IGl0IGlzIGNsYW1wZWQgdG8gYSB2YWx1ZSBiZXR3ZWVuXG4gICAgICogYDBgIGFuZCBgUElYSS5UQVJHRVRfRlBNUyAqIDEwMDBgLlxuICAgICAqXG4gICAgICogQG1lbWJlclxuICAgICAqIEBtZW1iZXJvZiBQSVhJLnRpY2tlci5UaWNrZXIjXG4gICAgICogQGRlZmF1bHQgMTBcbiAgICAgKi9cbiAgICBtaW5GUFM6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbigpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiAxMDAwIC8gdGhpcy5fbWF4RWxhcHNlZE1TO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uKGZwcylcbiAgICAgICAge1xuICAgICAgICAgICAgLy8gQ2xhbXA6IDAgdG8gVEFSR0VUX0ZQTVNcbiAgICAgICAgICAgIHZhciBtaW5GUE1TID0gTWF0aC5taW4oTWF0aC5tYXgoMCwgZnBzKSAvIDEwMDAsIENPTlNULlRBUkdFVF9GUE1TKTtcbiAgICAgICAgICAgIHRoaXMuX21heEVsYXBzZWRNUyA9IDEgLyBtaW5GUE1TO1xuICAgICAgICB9XG4gICAgfVxufSk7XG5cbi8qKlxuICogQ29uZGl0aW9uYWxseSByZXF1ZXN0cyBhIG5ldyBhbmltYXRpb24gZnJhbWUuXG4gKiBJZiBhIGZyYW1lIGhhcyBub3QgYWxyZWFkeSBiZWVuIHJlcXVlc3RlZCwgYW5kIGlmIHRoZSBpbnRlcm5hbFxuICogZW1pdHRlciBoYXMgbGlzdGVuZXJzLCBhIG5ldyBmcmFtZSBpcyByZXF1ZXN0ZWQuXG4gKlxuICogQHByaXZhdGVcbiAqL1xuVGlja2VyLnByb3RvdHlwZS5fcmVxdWVzdElmTmVlZGVkID0gZnVuY3Rpb24gX3JlcXVlc3RJZk5lZWRlZCgpXG57XG4gICAgaWYgKHRoaXMuX3JlcXVlc3RJZCA9PT0gbnVsbCAmJiB0aGlzLl9lbWl0dGVyLmxpc3RlbmVycyhUSUNLLCB0cnVlKSlcbiAgICB7XG4gICAgICAgIC8vIGVuc3VyZSBjYWxsYmFja3MgZ2V0IGNvcnJlY3QgZGVsdGFcbiAgICAgICAgdGhpcy5sYXN0VGltZSA9IHBlcmZvcm1hbmNlLm5vdygpO1xuICAgICAgICB0aGlzLl9yZXF1ZXN0SWQgPSByZXF1ZXN0QW5pbWF0aW9uRnJhbWUodGhpcy5fdGljayk7XG4gICAgfVxufTtcblxuLyoqXG4gKiBDb25kaXRpb25hbGx5IGNhbmNlbHMgYSBwZW5kaW5nIGFuaW1hdGlvbiBmcmFtZS5cbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5UaWNrZXIucHJvdG90eXBlLl9jYW5jZWxJZk5lZWRlZCA9IGZ1bmN0aW9uIF9jYW5jZWxJZk5lZWRlZCgpXG57XG4gICAgaWYgKHRoaXMuX3JlcXVlc3RJZCAhPT0gbnVsbClcbiAgICB7XG4gICAgICAgIGNhbmNlbEFuaW1hdGlvbkZyYW1lKHRoaXMuX3JlcXVlc3RJZCk7XG4gICAgICAgIHRoaXMuX3JlcXVlc3RJZCA9IG51bGw7XG4gICAgfVxufTtcblxuLyoqXG4gKiBDb25kaXRpb25hbGx5IHJlcXVlc3RzIGEgbmV3IGFuaW1hdGlvbiBmcmFtZS5cbiAqIElmIHRoZSB0aWNrZXIgaGFzIGJlZW4gc3RhcnRlZCBpdCBjaGVja3MgaWYgYSBmcmFtZSBoYXMgbm90IGFscmVhZHlcbiAqIGJlZW4gcmVxdWVzdGVkLCBhbmQgaWYgdGhlIGludGVybmFsIGVtaXR0ZXIgaGFzIGxpc3RlbmVycy4gSWYgdGhlc2VcbiAqIGNvbmRpdGlvbnMgYXJlIG1ldCwgYSBuZXcgZnJhbWUgaXMgcmVxdWVzdGVkLiBJZiB0aGUgdGlja2VyIGhhcyBub3RcbiAqIGJlZW4gc3RhcnRlZCwgYnV0IGF1dG9TdGFydCBpcyBgdHJ1ZWAsIHRoZW4gdGhlIHRpY2tlciBzdGFydHMgbm93LFxuICogYW5kIGNvbnRpbnVlcyB3aXRoIHRoZSBwcmV2aW91cyBjb25kaXRpb25zIHRvIHJlcXVlc3QgYSBuZXcgZnJhbWUuXG4gKlxuICogQHByaXZhdGVcbiAqL1xuVGlja2VyLnByb3RvdHlwZS5fc3RhcnRJZlBvc3NpYmxlID0gZnVuY3Rpb24gX3N0YXJ0SWZQb3NzaWJsZSgpXG57XG4gICAgaWYgKHRoaXMuc3RhcnRlZClcbiAgICB7XG4gICAgICAgIHRoaXMuX3JlcXVlc3RJZk5lZWRlZCgpO1xuICAgIH1cbiAgICBlbHNlIGlmICh0aGlzLmF1dG9TdGFydClcbiAgICB7XG4gICAgICAgIHRoaXMuc3RhcnQoKTtcbiAgICB9XG59O1xuXG4vKipcbiAqIENhbGxzIHtAbGluayBtb2R1bGU6ZXZlbnRlbWl0dGVyMy5FdmVudEVtaXR0ZXIjb259IGludGVybmFsbHkgZm9yIHRoZVxuICogaW50ZXJuYWwgJ3RpY2snIGV2ZW50LiBJdCBjaGVja3MgaWYgdGhlIGVtaXR0ZXIgaGFzIGxpc3RlbmVycyxcbiAqIGFuZCBpZiBzbyBpdCByZXF1ZXN0cyBhIG5ldyBhbmltYXRpb24gZnJhbWUgYXQgdGhpcyBwb2ludC5cbiAqXG4gKiBAcGFyYW0gZm4ge0Z1bmN0aW9ufSBUaGUgbGlzdGVuZXIgZnVuY3Rpb24gdG8gYmUgYWRkZWQgZm9yIHVwZGF0ZXNcbiAqIEBwYXJhbSBbY29udGV4dF0ge0Z1bmN0aW9ufSBUaGUgbGlzdGVuZXIgY29udGV4dFxuICogQHJldHVybnMge1BJWEkudGlja2VyLlRpY2tlcn0gdGhpc1xuICovXG5UaWNrZXIucHJvdG90eXBlLmFkZCA9IGZ1bmN0aW9uIGFkZChmbiwgY29udGV4dClcbntcbiAgICB0aGlzLl9lbWl0dGVyLm9uKFRJQ0ssIGZuLCBjb250ZXh0KTtcblxuICAgIHRoaXMuX3N0YXJ0SWZQb3NzaWJsZSgpO1xuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIENhbGxzIHtAbGluayBtb2R1bGU6ZXZlbnRlbWl0dGVyMy5FdmVudEVtaXR0ZXIjb25jZX0gaW50ZXJuYWxseSBmb3IgdGhlXG4gKiBpbnRlcm5hbCAndGljaycgZXZlbnQuIEl0IGNoZWNrcyBpZiB0aGUgZW1pdHRlciBoYXMgbGlzdGVuZXJzLFxuICogYW5kIGlmIHNvIGl0IHJlcXVlc3RzIGEgbmV3IGFuaW1hdGlvbiBmcmFtZSBhdCB0aGlzIHBvaW50LlxuICpcbiAqIEBwYXJhbSBmbiB7RnVuY3Rpb259IFRoZSBsaXN0ZW5lciBmdW5jdGlvbiB0byBiZSBhZGRlZCBmb3Igb25lIHVwZGF0ZVxuICogQHBhcmFtIFtjb250ZXh0XSB7RnVuY3Rpb259IFRoZSBsaXN0ZW5lciBjb250ZXh0XG4gKiBAcmV0dXJucyB7UElYSS50aWNrZXIuVGlja2VyfSB0aGlzXG4gKi9cblRpY2tlci5wcm90b3R5cGUuYWRkT25jZSA9IGZ1bmN0aW9uIGFkZE9uY2UoZm4sIGNvbnRleHQpXG57XG4gICAgdGhpcy5fZW1pdHRlci5vbmNlKFRJQ0ssIGZuLCBjb250ZXh0KTtcblxuICAgIHRoaXMuX3N0YXJ0SWZQb3NzaWJsZSgpO1xuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIENhbGxzIHtAbGluayBtb2R1bGU6ZXZlbnRlbWl0dGVyMy5FdmVudEVtaXR0ZXIjb2ZmfSBpbnRlcm5hbGx5IGZvciAndGljaycgZXZlbnQuXG4gKiBJdCBjaGVja3MgaWYgdGhlIGVtaXR0ZXIgaGFzIGxpc3RlbmVycyBmb3IgJ3RpY2snIGV2ZW50LlxuICogSWYgaXQgZG9lcywgdGhlbiBpdCBjYW5jZWxzIHRoZSBhbmltYXRpb24gZnJhbWUuXG4gKlxuICogQHBhcmFtIFtmbl0ge0Z1bmN0aW9ufSBUaGUgbGlzdGVuZXIgZnVuY3Rpb24gdG8gYmUgcmVtb3ZlZFxuICogQHBhcmFtIFtjb250ZXh0XSB7RnVuY3Rpb259IFRoZSBsaXN0ZW5lciBjb250ZXh0IHRvIGJlIHJlbW92ZWRcbiAqIEByZXR1cm5zIHtQSVhJLnRpY2tlci5UaWNrZXJ9IHRoaXNcbiAqL1xuVGlja2VyLnByb3RvdHlwZS5yZW1vdmUgPSBmdW5jdGlvbiByZW1vdmUoZm4sIGNvbnRleHQpXG57XG4gICAgdGhpcy5fZW1pdHRlci5vZmYoVElDSywgZm4sIGNvbnRleHQpO1xuXG4gICAgaWYgKCF0aGlzLl9lbWl0dGVyLmxpc3RlbmVycyhUSUNLLCB0cnVlKSlcbiAgICB7XG4gICAgICAgIHRoaXMuX2NhbmNlbElmTmVlZGVkKCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIFN0YXJ0cyB0aGUgdGlja2VyLiBJZiB0aGUgdGlja2VyIGhhcyBsaXN0ZW5lcnNcbiAqIGEgbmV3IGFuaW1hdGlvbiBmcmFtZSBpcyByZXF1ZXN0ZWQgYXQgdGhpcyBwb2ludC5cbiAqL1xuVGlja2VyLnByb3RvdHlwZS5zdGFydCA9IGZ1bmN0aW9uIHN0YXJ0KClcbntcbiAgICBpZiAoIXRoaXMuc3RhcnRlZClcbiAgICB7XG4gICAgICAgIHRoaXMuc3RhcnRlZCA9IHRydWU7XG4gICAgICAgIHRoaXMuX3JlcXVlc3RJZk5lZWRlZCgpO1xuICAgIH1cbn07XG5cbi8qKlxuICogU3RvcHMgdGhlIHRpY2tlci4gSWYgdGhlIHRpY2tlciBoYXMgcmVxdWVzdGVkXG4gKiBhbiBhbmltYXRpb24gZnJhbWUgaXQgaXMgY2FuY2VsZWQgYXQgdGhpcyBwb2ludC5cbiAqL1xuVGlja2VyLnByb3RvdHlwZS5zdG9wID0gZnVuY3Rpb24gc3RvcCgpXG57XG4gICAgaWYgKHRoaXMuc3RhcnRlZClcbiAgICB7XG4gICAgICAgIHRoaXMuc3RhcnRlZCA9IGZhbHNlO1xuICAgICAgICB0aGlzLl9jYW5jZWxJZk5lZWRlZCgpO1xuICAgIH1cbn07XG5cbi8qKlxuICogVHJpZ2dlcnMgYW4gdXBkYXRlLiBBbiB1cGRhdGUgZW50YWlscyBzZXR0aW5nIHRoZVxuICogY3VycmVudCB7QGxpbmsgUElYSS50aWNrZXIuVGlja2VyI2VsYXBzZWRNU30sXG4gKiB0aGUgY3VycmVudCB7QGxpbmsgUElYSS50aWNrZXIuVGlja2VyI2RlbHRhVGltZX0sXG4gKiBpbnZva2luZyBhbGwgbGlzdGVuZXJzIHdpdGggY3VycmVudCBkZWx0YVRpbWUsXG4gKiBhbmQgdGhlbiBmaW5hbGx5IHNldHRpbmcge0BsaW5rIFBJWEkudGlja2VyLlRpY2tlciNsYXN0VGltZX1cbiAqIHdpdGggdGhlIHZhbHVlIG9mIGN1cnJlbnRUaW1lIHRoYXQgd2FzIHByb3ZpZGVkLlxuICogVGhpcyBtZXRob2Qgd2lsbCBiZSBjYWxsZWQgYXV0b21hdGljYWxseSBieSBhbmltYXRpb25cbiAqIGZyYW1lIGNhbGxiYWNrcyBpZiB0aGUgdGlja2VyIGluc3RhbmNlIGhhcyBiZWVuIHN0YXJ0ZWRcbiAqIGFuZCBsaXN0ZW5lcnMgYXJlIGFkZGVkLlxuICpcbiAqIEBwYXJhbSBbY3VycmVudFRpbWU9cGVyZm9ybWFuY2Uubm93KCldIHtET01IaWdoUmVzVGltZVN0YW1wfG51bWJlcn0gdGhlIGN1cnJlbnQgdGltZSBvZiBleGVjdXRpb25cbiAqL1xuVGlja2VyLnByb3RvdHlwZS51cGRhdGUgPSBmdW5jdGlvbiB1cGRhdGUoY3VycmVudFRpbWUpXG57XG4gICAgdmFyIGVsYXBzZWRNUztcblxuICAgIC8vIEFsbG93IGNhbGxpbmcgdXBkYXRlIGRpcmVjdGx5IHdpdGggZGVmYXVsdCBjdXJyZW50VGltZS5cbiAgICBjdXJyZW50VGltZSA9IGN1cnJlbnRUaW1lIHx8IHBlcmZvcm1hbmNlLm5vdygpO1xuICAgIC8vIFNhdmUgdW5jYXBwZWQgZWxhcHNlZE1TIGZvciBtZWFzdXJlbWVudFxuICAgIGVsYXBzZWRNUyA9IHRoaXMuZWxhcHNlZE1TID0gY3VycmVudFRpbWUgLSB0aGlzLmxhc3RUaW1lO1xuXG4gICAgLy8gY2FwIHRoZSBtaWxsaXNlY29uZHMgZWxhcHNlZCB1c2VkIGZvciBkZWx0YVRpbWVcbiAgICBpZiAoZWxhcHNlZE1TID4gdGhpcy5fbWF4RWxhcHNlZE1TKVxuICAgIHtcbiAgICAgICAgZWxhcHNlZE1TID0gdGhpcy5fbWF4RWxhcHNlZE1TO1xuICAgIH1cblxuICAgIHRoaXMuZGVsdGFUaW1lID0gZWxhcHNlZE1TICogQ09OU1QuVEFSR0VUX0ZQTVMgKiB0aGlzLnNwZWVkO1xuXG4gICAgLy8gSW52b2tlIGxpc3RlbmVycyBhZGRlZCB0byBpbnRlcm5hbCBlbWl0dGVyXG4gICAgdGhpcy5fZW1pdHRlci5lbWl0KFRJQ0ssIHRoaXMuZGVsdGFUaW1lKTtcblxuICAgIHRoaXMubGFzdFRpbWUgPSBjdXJyZW50VGltZTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gVGlja2VyO1xuIiwidmFyIFRpY2tlciA9IHJlcXVpcmUoJy4vVGlja2VyJyk7XG5cbi8qKlxuICogVGhlIHNoYXJlZCB0aWNrZXIgaW5zdGFuY2UgdXNlZCBieSB7QGxpbmsgUElYSS5leHRyYXMuTW92aWVDbGlwfS5cbiAqIGFuZCBieSB7QGxpbmsgUElYSS5pbnRlcmFjdGlvbi5JbnRlcmFjdGlvbk1hbmFnZXJ9LlxuICogVGhlIHByb3BlcnR5IHtAbGluayBQSVhJLnRpY2tlci5UaWNrZXIjYXV0b1N0YXJ0fSBpcyBzZXQgdG8gYHRydWVgXG4gKiBmb3IgdGhpcyBpbnN0YW5jZS4gUGxlYXNlIGZvbGxvdyB0aGUgZXhhbXBsZXMgZm9yIHVzYWdlLCBpbmNsdWRpbmdcbiAqIGhvdyB0byBvcHQtb3V0IG9mIGF1dG8tc3RhcnRpbmcgdGhlIHNoYXJlZCB0aWNrZXIuXG4gKlxuICogQGV4YW1wbGVcbiAqIHZhciB0aWNrZXIgPSBQSVhJLnRpY2tlci5zaGFyZWQ7XG4gKiAvLyBTZXQgdGhpcyB0byBwcmV2ZW50IHN0YXJ0aW5nIHRoaXMgdGlja2VyIHdoZW4gbGlzdGVuZXJzIGFyZSBhZGRlZC5cbiAqIC8vIEJ5IGRlZmF1bHQgdGhpcyBpcyB0cnVlIG9ubHkgZm9yIHRoZSBQSVhJLnRpY2tlci5zaGFyZWQgaW5zdGFuY2UuXG4gKiB0aWNrZXIuYXV0b1N0YXJ0ID0gZmFsc2U7XG4gKiAvLyBGWUksIGNhbGwgdGhpcyB0byBlbnN1cmUgdGhlIHRpY2tlciBpcyBzdG9wcGVkLiBJdCBzaG91bGQgYmUgc3RvcHBlZFxuICogLy8gaWYgeW91IGhhdmUgbm90IGF0dGVtcHRlZCB0byByZW5kZXIgYW55dGhpbmcgeWV0LlxuICogdGlja2VyLnN0b3AoKTtcbiAqIC8vIENhbGwgdGhpcyB3aGVuIHlvdSBhcmUgcmVhZHkgZm9yIGEgcnVubmluZyBzaGFyZWQgdGlja2VyLlxuICogdGlja2VyLnN0YXJ0KCk7XG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIFlvdSBtYXkgdXNlIHRoZSBzaGFyZWQgdGlja2VyIHRvIHJlbmRlci4uLlxuICogdmFyIHJlbmRlcmVyID0gUElYSS5hdXRvRGV0ZWN0UmVuZGVyZXIoODAwLCA2MDApO1xuICogdmFyIHN0YWdlID0gbmV3IFBJWEkuQ29udGFpbmVyKCk7XG4gKiB2YXIgaW50ZXJhY3Rpb25NYW5hZ2VyID0gUElYSS5pbnRlcmFjdGlvbi5JbnRlcmFjdGlvbk1hbmFnZXIocmVuZGVyZXIpO1xuICogZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChyZW5kZXJlci52aWV3KTtcbiAqIHRpY2tlci5hZGQoZnVuY3Rpb24gKHRpbWUpIHtcbiAqICAgICByZW5kZXJlci5yZW5kZXIoc3RhZ2UpO1xuICogfSk7XG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIE9yIHlvdSBjYW4ganVzdCB1cGRhdGUgaXQgbWFudWFsbHkuXG4gKiB0aWNrZXIuYXV0b1N0YXJ0ID0gZmFsc2U7XG4gKiB0aWNrZXIuc3RvcCgpO1xuICogZnVuY3Rpb24gYW5pbWF0ZSh0aW1lKSB7XG4gKiAgICAgdGlja2VyLnVwZGF0ZSh0aW1lKTtcbiAqICAgICByZW5kZXJlci5yZW5kZXIoc3RhZ2UpO1xuICogICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZShhbmltYXRlKTtcbiAqIH1cbiAqIGFuaW1hdGUocGVyZm9ybWFuY2Uubm93KCkpO1xuICpcbiAqIEB0eXBlIHtQSVhJLnRpY2tlci5UaWNrZXJ9XG4gKiBAbWVtYmVyb2YgUElYSS50aWNrZXJcbiAqL1xudmFyIHNoYXJlZCA9IG5ldyBUaWNrZXIoKTtcbnNoYXJlZC5hdXRvU3RhcnQgPSB0cnVlO1xuXG4vKipcbiAqIEBuYW1lc3BhY2UgUElYSS50aWNrZXJcbiAqL1xubW9kdWxlLmV4cG9ydHMgPSB7XG4gICAgc2hhcmVkOiBzaGFyZWQsXG4gICAgVGlja2VyOiBUaWNrZXJcbn07XG4iLCIvKipcbiAqIEdlbmVyaWMgTWFzayBTdGFjayBkYXRhIHN0cnVjdHVyZVxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICovXG5cbnZhciBHTF9NQVAgPSB7fTtcblxuXG52YXIgY3JlYXRlSW5kaWNlc0ZvclF1YWRzID0gZnVuY3Rpb24gKHNpemUpXG57XG4gICAgLy8gdGhlIHRvdGFsIG51bWJlciBvZiBpbmRpY2VzIGluIG91ciBhcnJheSwgdGhlcmUgYXJlIDYgcG9pbnRzIHBlciBxdWFkLlxuICAgXG4gICAgdmFyIHRvdGFsSW5kaWNlcyA9IHNpemUgKiA2O1xuXG4gICAgdmFyIGluZGljZXMgPSBuZXcgVWludDE2QXJyYXkodG90YWxJbmRpY2VzKTtcblxuXHQvLyBmaWxsIHRoZSBpbmRpY2VzIHdpdGggdGhlIHF1YWRzIHRvIGRyYXdcbiAgICBmb3IgKHZhciBpPTAsIGo9MDsgaSA8IHRvdGFsSW5kaWNlczsgaSArPSA2LCBqICs9IDQpXG4gICAge1xuICAgICAgICBpbmRpY2VzW2kgKyAwXSA9IGogKyAwO1xuICAgICAgICBpbmRpY2VzW2kgKyAxXSA9IGogKyAxO1xuICAgICAgICBpbmRpY2VzW2kgKyAyXSA9IGogKyAyO1xuICAgICAgICBpbmRpY2VzW2kgKyAzXSA9IGogKyAwO1xuICAgICAgICBpbmRpY2VzW2kgKyA0XSA9IGogKyAyO1xuICAgICAgICBpbmRpY2VzW2kgKyA1XSA9IGogKyAzO1xuICAgIH1cblxuICAgIHJldHVybiBpbmRpY2VzO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBjcmVhdGVJbmRpY2VzRm9yUXVhZHM7IiwidmFyIENPTlNUID0gcmVxdWlyZSgnLi4vY29uc3QnKTtcblxuLyoqXG4gKiBAbmFtZXNwYWNlIFBJWEkudXRpbHNcbiAqL1xudmFyIHV0aWxzID0gbW9kdWxlLmV4cG9ydHMgPSB7XG4gICAgX3VpZDogMCxcbiAgICBfc2FpZEhlbGxvOiBmYWxzZSxcblxuICAgIEV2ZW50RW1pdHRlcjogICByZXF1aXJlKCdldmVudGVtaXR0ZXIzJyksXG4gICAgcGx1Z2luVGFyZ2V0OiAgIHJlcXVpcmUoJy4vcGx1Z2luVGFyZ2V0JyksXG4gICAgYXN5bmM6ICAgICAgICAgIHJlcXVpcmUoJ2FzeW5jJyksXG5cbiAgICAvKipcbiAgICAgKiBHZXRzIHRoZSBuZXh0IHVuaXF1ZSBpZGVudGlmaWVyXG4gICAgICpcbiAgICAgKiBAcmV0dXJuIHtudW1iZXJ9IFRoZSBuZXh0IHVuaXF1ZSBpZGVudGlmaWVyIHRvIHVzZS5cbiAgICAgKi9cbiAgICB1aWQ6IGZ1bmN0aW9uICgpXG4gICAge1xuICAgICAgICByZXR1cm4gKyt1dGlscy5fdWlkO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBDb252ZXJ0cyBhIGhleCBjb2xvciBudW1iZXIgdG8gYW4gW1IsIEcsIEJdIGFycmF5XG4gICAgICpcbiAgICAgKiBAcGFyYW0gaGV4IHtudW1iZXJ9XG4gICAgICogQHBhcmFtICB7bnVtYmVyW119IFtvdXQ9W11dXG4gICAgICogQHJldHVybiB7bnVtYmVyW119IEFuIGFycmF5IHJlcHJlc2VudGluZyB0aGUgW1IsIEcsIEJdIG9mIHRoZSBjb2xvci5cbiAgICAgKi9cbiAgICBoZXgycmdiOiBmdW5jdGlvbiAoaGV4LCBvdXQpXG4gICAge1xuICAgICAgICBvdXQgPSBvdXQgfHwgW107XG5cbiAgICAgICAgb3V0WzBdID0gKGhleCA+PiAxNiAmIDB4RkYpIC8gMjU1O1xuICAgICAgICBvdXRbMV0gPSAoaGV4ID4+IDggJiAweEZGKSAvIDI1NTtcbiAgICAgICAgb3V0WzJdID0gKGhleCAmIDB4RkYpIC8gMjU1O1xuXG4gICAgICAgIHJldHVybiBvdXQ7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIENvbnZlcnRzIGEgaGV4IGNvbG9yIG51bWJlciB0byBhIHN0cmluZy5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBoZXgge251bWJlcn1cbiAgICAgKiBAcmV0dXJuIHtzdHJpbmd9IFRoZSBzdHJpbmcgY29sb3IuXG4gICAgICovXG4gICAgaGV4MnN0cmluZzogZnVuY3Rpb24gKGhleClcbiAgICB7XG4gICAgICAgIGhleCA9IGhleC50b1N0cmluZygxNik7XG4gICAgICAgIGhleCA9ICcwMDAwMDAnLnN1YnN0cigwLCA2IC0gaGV4Lmxlbmd0aCkgKyBoZXg7XG5cbiAgICAgICAgcmV0dXJuICcjJyArIGhleDtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQ29udmVydHMgYSBjb2xvciBhcyBhbiBbUiwgRywgQl0gYXJyYXkgdG8gYSBoZXggbnVtYmVyXG4gICAgICpcbiAgICAgKiBAcGFyYW0gcmdiIHtudW1iZXJbXX1cbiAgICAgKiBAcmV0dXJuIHtudW1iZXJ9IFRoZSBjb2xvciBudW1iZXJcbiAgICAgKi9cbiAgICByZ2IyaGV4OiBmdW5jdGlvbiAocmdiKVxuICAgIHtcbiAgICAgICAgcmV0dXJuICgocmdiWzBdKjI1NSA8PCAxNikgKyAocmdiWzFdKjI1NSA8PCA4KSArIHJnYlsyXSoyNTUpO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBDaGVja3Mgd2hldGhlciB0aGUgQ2FudmFzIEJsZW5kTW9kZXMgYXJlIHN1cHBvcnRlZCBieSB0aGUgY3VycmVudCBicm93c2VyXG4gICAgICpcbiAgICAgKiBAcmV0dXJuIHtib29sZWFufSB3aGV0aGVyIHRoZXkgYXJlIHN1cHBvcnRlZFxuICAgICAqL1xuICAgIGNhblVzZU5ld0NhbnZhc0JsZW5kTW9kZXM6IGZ1bmN0aW9uICgpXG4gICAge1xuICAgICAgICBpZiAodHlwZW9mIGRvY3VtZW50ID09PSAndW5kZWZpbmVkJylcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIHBuZ0hlYWQgPSAnZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFBUUFBQUFCQVFNQUFBREQ4cDJPQUFBQUExQk1WRVgvJztcbiAgICAgICAgdmFyIHBuZ0VuZCA9ICdBQUFBQ2tsRVFWUUkxMk5nQUFBQUFnQUI0aUc4TXdBQUFBQkpSVTVFcmtKZ2dnPT0nO1xuXG4gICAgICAgIHZhciBtYWdlbnRhID0gbmV3IEltYWdlKCk7XG4gICAgICAgIG1hZ2VudGEuc3JjID0gcG5nSGVhZCArICdBUDgwNE9hNicgKyBwbmdFbmQ7XG5cbiAgICAgICAgdmFyIHllbGxvdyA9IG5ldyBJbWFnZSgpO1xuICAgICAgICB5ZWxsb3cuc3JjID0gcG5nSGVhZCArICcvd0NLeHZSRicgKyBwbmdFbmQ7XG5cbiAgICAgICAgdmFyIGNhbnZhcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NhbnZhcycpO1xuICAgICAgICBjYW52YXMud2lkdGggPSA2O1xuICAgICAgICBjYW52YXMuaGVpZ2h0ID0gMTtcblxuICAgICAgICB2YXIgY29udGV4dCA9IGNhbnZhcy5nZXRDb250ZXh0KCcyZCcpO1xuICAgICAgICBjb250ZXh0Lmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbiA9ICdtdWx0aXBseSc7XG4gICAgICAgIGNvbnRleHQuZHJhd0ltYWdlKG1hZ2VudGEsIDAsIDApO1xuICAgICAgICBjb250ZXh0LmRyYXdJbWFnZSh5ZWxsb3csIDIsIDApO1xuXG4gICAgICAgIHZhciBkYXRhID0gY29udGV4dC5nZXRJbWFnZURhdGEoMiwwLDEsMSkuZGF0YTtcblxuICAgICAgICByZXR1cm4gKGRhdGFbMF0gPT09IDI1NSAmJiBkYXRhWzFdID09PSAwICYmIGRhdGFbMl0gPT09IDApO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBHaXZlbiBhIG51bWJlciwgdGhpcyBmdW5jdGlvbiByZXR1cm5zIHRoZSBjbG9zZXN0IG51bWJlciB0aGF0IGlzIGEgcG93ZXIgb2YgdHdvXG4gICAgICogdGhpcyBmdW5jdGlvbiBpcyB0YWtlbiBmcm9tIFN0YXJsaW5nIEZyYW1ld29yayBhcyBpdHMgcHJldHR5IG5lYXQgOylcbiAgICAgKlxuICAgICAqIEBwYXJhbSBudW1iZXIge251bWJlcn1cbiAgICAgKiBAcmV0dXJuIHtudW1iZXJ9IHRoZSBjbG9zZXN0IG51bWJlciB0aGF0IGlzIGEgcG93ZXIgb2YgdHdvXG4gICAgICovXG4gICAgZ2V0TmV4dFBvd2VyT2ZUd286IGZ1bmN0aW9uIChudW1iZXIpXG4gICAge1xuICAgICAgICAvLyBzZWU6IGh0dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvUG93ZXJfb2ZfdHdvI0Zhc3RfYWxnb3JpdGhtX3RvX2NoZWNrX2lmX2FfcG9zaXRpdmVfbnVtYmVyX2lzX2FfcG93ZXJfb2ZfdHdvXG4gICAgICAgIGlmIChudW1iZXIgPiAwICYmIChudW1iZXIgJiAobnVtYmVyIC0gMSkpID09PSAwKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gbnVtYmVyO1xuICAgICAgICB9XG4gICAgICAgIGVsc2VcbiAgICAgICAge1xuICAgICAgICAgICAgdmFyIHJlc3VsdCA9IDE7XG5cbiAgICAgICAgICAgIHdoaWxlIChyZXN1bHQgPCBudW1iZXIpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgcmVzdWx0IDw8PSAxO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIGNoZWNrcyBpZiB0aGUgZ2l2ZW4gd2lkdGggYW5kIGhlaWdodCBtYWtlIGEgcG93ZXIgb2YgdHdvIHJlY3RhbmdsZVxuICAgICAqXG4gICAgICogQHBhcmFtIHdpZHRoIHtudW1iZXJ9XG4gICAgICogQHBhcmFtIGhlaWdodCB7bnVtYmVyfVxuICAgICAqIEByZXR1cm4ge2Jvb2xlYW59XG4gICAgICovXG4gICAgaXNQb3dlck9mVHdvOiBmdW5jdGlvbiAod2lkdGgsIGhlaWdodClcbiAgICB7XG4gICAgICAgIHJldHVybiAod2lkdGggPiAwICYmICh3aWR0aCAmICh3aWR0aCAtIDEpKSA9PT0gMCAmJiBoZWlnaHQgPiAwICYmIChoZWlnaHQgJiAoaGVpZ2h0IC0gMSkpID09PSAwKTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogZ2V0IHRoZSByZXNvbHV0aW9uIG9mIGFuIGFzc2V0IGJ5IGxvb2tpbmcgZm9yIHRoZSBwcmVmaXhcbiAgICAgKiB1c2VkIGJ5IHNwcml0ZXNoZWV0cyBhbmQgaW1hZ2UgdXJsc1xuICAgICAqXG4gICAgICogQHBhcmFtIHVybCB7c3RyaW5nfSB0aGUgaW1hZ2UgcGF0aFxuICAgICAqIEByZXR1cm4ge251bWJlcn1cbiAgICAgKi9cbiAgICBnZXRSZXNvbHV0aW9uT2ZVcmw6IGZ1bmN0aW9uICh1cmwpXG4gICAge1xuICAgICAgICB2YXIgcmVzb2x1dGlvbiA9IENPTlNULlJFVElOQV9QUkVGSVguZXhlYyh1cmwpO1xuXG4gICAgICAgIGlmIChyZXNvbHV0aW9uKVxuICAgICAgICB7XG4gICAgICAgICAgIHJldHVybiBwYXJzZUZsb2F0KHJlc29sdXRpb25bMV0pO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIDE7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIExvZ3Mgb3V0IHRoZSB2ZXJzaW9uIGFuZCByZW5kZXJlciBpbmZvcm1hdGlvbiBmb3IgdGhpcyBydW5uaW5nIGluc3RhbmNlIG9mIFBJWEkuXG4gICAgICogSWYgeW91IGRvbid0IHdhbnQgdG8gc2VlIHRoaXMgbWVzc2FnZSB5b3UgY2FuIHNldCBgUElYSS51dGlscy5fc2FpZEhlbGxvID0gdHJ1ZTtgXG4gICAgICogc28gdGhlIGxpYnJhcnkgdGhpbmtzIGl0IGFscmVhZHkgc2FpZCBpdC4gS2VlcCBpbiBtaW5kIHRoYXQgZG9pbmcgdGhhdCB3aWxsIGZvcmV2ZXJcbiAgICAgKiBtYWtlcyB5b3UgYSBqZXJrIGZhY2UuXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gdHlwZSAtIFRoZSBzdHJpbmcgcmVuZGVyZXIgdHlwZSB0byBsb2cuXG4gICAgICogQGNvbnN0YW50XG4gICAgICogQHN0YXRpY1xuICAgICAqL1xuICAgIHNheUhlbGxvOiBmdW5jdGlvbiAodHlwZSlcbiAgICB7XG4gICAgICAgIGlmICh1dGlscy5fc2FpZEhlbGxvKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAobmF2aWdhdG9yLnVzZXJBZ2VudC50b0xvd2VyQ2FzZSgpLmluZGV4T2YoJ2Nocm9tZScpID4gLTEpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHZhciBhcmdzID0gW1xuICAgICAgICAgICAgICAgICdcXG4gJWMgJWMgJWMgUGl4aS5qcyAnICsgQ09OU1QuVkVSU0lPTiArICcgLSDinLAgJyArIHR5cGUgKyAnIOKcsCAgJWMgJyArICcgJWMgJyArICcgaHR0cDovL3d3dy5waXhpanMuY29tLyAgJWMgJWMg4pmlJWPimaUlY+KZpSBcXG5cXG4nLFxuICAgICAgICAgICAgICAgICdiYWNrZ3JvdW5kOiAjZmY2NmE1OyBwYWRkaW5nOjVweCAwOycsXG4gICAgICAgICAgICAgICAgJ2JhY2tncm91bmQ6ICNmZjY2YTU7IHBhZGRpbmc6NXB4IDA7JyxcbiAgICAgICAgICAgICAgICAnY29sb3I6ICNmZjY2YTU7IGJhY2tncm91bmQ6ICMwMzAzMDc7IHBhZGRpbmc6NXB4IDA7JyxcbiAgICAgICAgICAgICAgICAnYmFja2dyb3VuZDogI2ZmNjZhNTsgcGFkZGluZzo1cHggMDsnLFxuICAgICAgICAgICAgICAgICdiYWNrZ3JvdW5kOiAjZmZjM2RjOyBwYWRkaW5nOjVweCAwOycsXG4gICAgICAgICAgICAgICAgJ2JhY2tncm91bmQ6ICNmZjY2YTU7IHBhZGRpbmc6NXB4IDA7JyxcbiAgICAgICAgICAgICAgICAnY29sb3I6ICNmZjI0MjQ7IGJhY2tncm91bmQ6ICNmZmY7IHBhZGRpbmc6NXB4IDA7JyxcbiAgICAgICAgICAgICAgICAnY29sb3I6ICNmZjI0MjQ7IGJhY2tncm91bmQ6ICNmZmY7IHBhZGRpbmc6NXB4IDA7JyxcbiAgICAgICAgICAgICAgICAnY29sb3I6ICNmZjI0MjQ7IGJhY2tncm91bmQ6ICNmZmY7IHBhZGRpbmc6NXB4IDA7J1xuICAgICAgICAgICAgXTtcblxuICAgICAgICAgICAgd2luZG93LmNvbnNvbGUubG9nLmFwcGx5KGNvbnNvbGUsIGFyZ3MpOyAvL2pzaGludCBpZ25vcmU6bGluZVxuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHdpbmRvdy5jb25zb2xlKVxuICAgICAgICB7XG4gICAgICAgICAgICB3aW5kb3cuY29uc29sZS5sb2coJ1BpeGkuanMgJyArIENPTlNULlZFUlNJT04gKyAnIC0gJyArIHR5cGUgKyAnIC0gaHR0cDovL3d3dy5waXhpanMuY29tLycpOyAvL2pzaGludCBpZ25vcmU6bGluZVxuICAgICAgICB9XG5cbiAgICAgICAgdXRpbHMuX3NhaWRIZWxsbyA9IHRydWU7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIEhlbHBlciBmb3IgY2hlY2tpbmcgZm9yIHdlYmdsIHN1cHBvcnRcbiAgICAgKlxuICAgICAqIEByZXR1cm4ge2Jvb2xlYW59XG4gICAgICovXG4gICAgaXNXZWJHTFN1cHBvcnRlZDogZnVuY3Rpb24gKClcbiAgICB7XG4gICAgICAgIHZhciBjb250ZXh0T3B0aW9ucyA9IHsgc3RlbmNpbDogdHJ1ZSB9O1xuICAgICAgICB0cnlcbiAgICAgICAge1xuICAgICAgICAgICAgaWYgKCF3aW5kb3cuV2ViR0xSZW5kZXJpbmdDb250ZXh0KVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdmFyIGNhbnZhcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NhbnZhcycpLFxuICAgICAgICAgICAgICAgIGdsID0gY2FudmFzLmdldENvbnRleHQoJ3dlYmdsJywgY29udGV4dE9wdGlvbnMpIHx8IGNhbnZhcy5nZXRDb250ZXh0KCdleHBlcmltZW50YWwtd2ViZ2wnLCBjb250ZXh0T3B0aW9ucyk7XG5cbiAgICAgICAgICAgIHJldHVybiAhIShnbCAmJiBnbC5nZXRDb250ZXh0QXR0cmlidXRlcygpLnN0ZW5jaWwpO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyBzaWduIG9mIG51bWJlclxuICAgICAqXG4gICAgICogQHBhcmFtIG4ge251bWJlcn1cbiAgICAgKiBAcmV0dXJucyB7bnVtYmVyfSAwIGlmIG4gaXMgMCwgLTEgaWYgbiBpcyBuZWdhdGl2ZSwgMSBpZiBuIGkgcG9zaXRpdmVcbiAgICAgKi9cbiAgICBzaWduOiBmdW5jdGlvbiAobilcbiAgICB7XG4gICAgICAgIHJldHVybiBuID8gKG4gPCAwID8gLTEgOiAxKSA6IDA7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIHJlbW92ZUl0ZW1zXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge2FycmF5fSBhcnIgVGhlIHRhcmdldCBhcnJheVxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBzdGFydElkeCBUaGUgaW5kZXggdG8gYmVnaW4gcmVtb3ZpbmcgZnJvbSAoaW5jbHVzaXZlKVxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSByZW1vdmVDb3VudCBIb3cgbWFueSBpdGVtcyB0byByZW1vdmVcbiAgICAgKi9cbiAgICByZW1vdmVJdGVtczogZnVuY3Rpb24gKGFyciwgc3RhcnRJZHgsIHJlbW92ZUNvdW50KVxuICAgIHtcbiAgICAgICAgdmFyIGxlbmd0aCA9IGFyci5sZW5ndGg7XG5cbiAgICAgICAgaWYgKHN0YXJ0SWR4ID49IGxlbmd0aCB8fCByZW1vdmVDb3VudCA9PT0gMClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgcmVtb3ZlQ291bnQgPSAoc3RhcnRJZHgrcmVtb3ZlQ291bnQgPiBsZW5ndGggPyBsZW5ndGgtc3RhcnRJZHggOiByZW1vdmVDb3VudCk7XG4gICAgICAgIGZvciAodmFyIGkgPSBzdGFydElkeCwgbGVuID0gbGVuZ3RoLXJlbW92ZUNvdW50OyBpIDwgbGVuOyArK2kpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGFycltpXSA9IGFycltpICsgcmVtb3ZlQ291bnRdO1xuICAgICAgICB9XG5cbiAgICAgICAgYXJyLmxlbmd0aCA9IGxlbjtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQHRvZG8gRGVzY3JpYmUgcHJvcGVydHkgdXNhZ2VcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIFRleHR1cmVDYWNoZToge30sXG5cbiAgICAvKipcbiAgICAgKiBAdG9kbyBEZXNjcmliZSBwcm9wZXJ0eSB1c2FnZVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgQmFzZVRleHR1cmVDYWNoZToge31cbn07XG4iLCIvKipcbiAqIE1peGlucyBmdW5jdGlvbmFsaXR5IHRvIG1ha2UgYW4gb2JqZWN0IGhhdmUgXCJwbHVnaW5zXCIuXG4gKlxuICogQG1peGluXG4gKiBAbWVtYmVyb2YgUElYSS51dGlsc1xuICogQHBhcmFtIG9iaiB7b2JqZWN0fSBUaGUgb2JqZWN0IHRvIG1peCBpbnRvLlxuICogQGV4YW1wbGVcbiAqICAgICAgZnVuY3Rpb24gTXlPYmplY3QoKSB7fVxuICpcbiAqICAgICAgcGx1Z2luVGFyZ2V0Lm1peGluKE15T2JqZWN0KTtcbiAqL1xuZnVuY3Rpb24gcGx1Z2luVGFyZ2V0KG9iailcbntcbiAgICBvYmouX19wbHVnaW5zID0ge307XG5cbiAgICAvKipcbiAgICAgKiBBZGRzIGEgcGx1Z2luIHRvIGFuIG9iamVjdFxuICAgICAqXG4gICAgICogQHBhcmFtIHBsdWdpbk5hbWUge3N0cmluZ30gVGhlIGV2ZW50cyB0aGF0IHNob3VsZCBiZSBsaXN0ZWQuXG4gICAgICogQHBhcmFtIGN0b3Ige0Z1bmN0aW9ufSBUaGUgY29uc3RydWN0b3IgZnVuY3Rpb24gZm9yIHRoZSBwbHVnaW4uXG4gICAgICovXG4gICAgb2JqLnJlZ2lzdGVyUGx1Z2luID0gZnVuY3Rpb24gKHBsdWdpbk5hbWUsIGN0b3IpXG4gICAge1xuICAgICAgICBvYmouX19wbHVnaW5zW3BsdWdpbk5hbWVdID0gY3RvcjtcbiAgICB9O1xuXG4gICAgLyoqXG4gICAgICogSW5zdGFudGlhdGVzIGFsbCB0aGUgcGx1Z2lucyBvZiB0aGlzIG9iamVjdFxuICAgICAqXG4gICAgICovXG4gICAgb2JqLnByb3RvdHlwZS5pbml0UGx1Z2lucyA9IGZ1bmN0aW9uICgpXG4gICAge1xuICAgICAgICB0aGlzLnBsdWdpbnMgPSB0aGlzLnBsdWdpbnMgfHwge307XG5cbiAgICAgICAgZm9yICh2YXIgbyBpbiBvYmouX19wbHVnaW5zKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnBsdWdpbnNbb10gPSBuZXcgKG9iai5fX3BsdWdpbnNbb10pKHRoaXMpO1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIC8qKlxuICAgICAqIFJlbW92ZXMgYWxsIHRoZSBwbHVnaW5zIG9mIHRoaXMgb2JqZWN0XG4gICAgICpcbiAgICAgKi9cbiAgICBvYmoucHJvdG90eXBlLmRlc3Ryb3lQbHVnaW5zID0gZnVuY3Rpb24gKClcbiAgICB7XG4gICAgICAgIGZvciAodmFyIG8gaW4gdGhpcy5wbHVnaW5zKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnBsdWdpbnNbb10uZGVzdHJveSgpO1xuICAgICAgICAgICAgdGhpcy5wbHVnaW5zW29dID0gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMucGx1Z2lucyA9IG51bGw7XG4gICAgfTtcbn1cblxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgICAvKipcbiAgICAgKiBNaXhlcyBpbiB0aGUgcHJvcGVydGllcyBvZiB0aGUgcGx1Z2luVGFyZ2V0IGludG8gYW5vdGhlciBvYmplY3RcbiAgICAgKlxuICAgICAqIEBwYXJhbSBvYmplY3Qge29iamVjdH0gVGhlIG9iaiB0byBtaXggaW50b1xuICAgICAqL1xuICAgIG1peGluOiBmdW5jdGlvbiBtaXhpbihvYmopXG4gICAge1xuICAgICAgICBwbHVnaW5UYXJnZXQob2JqKTtcbiAgICB9XG59O1xuIiwiLypnbG9iYWwgY29uc29sZSAqL1xudmFyIGNvcmUgPSByZXF1aXJlKCcuL2NvcmUnKSxcbiAgICBtZXNoID0gcmVxdWlyZSgnLi9tZXNoJyksXG4gICAgZXh0cmFzID0gcmVxdWlyZSgnLi9leHRyYXMnKSxcbiAgICBmaWx0ZXJzID0gcmVxdWlyZSgnLi9maWx0ZXJzJyk7XG5cbi8qKlxuICogQGNsYXNzXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgU3ByaXRlQmF0Y2hcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAc2VlIFBJWEkuUGFydGljbGVDb250YWluZXJcbiAqIEB0aHJvd3Mge1JlZmVyZW5jZUVycm9yfSBTcHJpdGVCYXRjaCBkb2VzIG5vdCBleGlzdCBhbnkgbW9yZSwgcGxlYXNlIHVzZSB0aGUgbmV3IFBhcnRpY2xlQ29udGFpbmVyIGluc3RlYWQuXG4gKiBAZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDMuMC4wXG4gKi9cbmNvcmUuU3ByaXRlQmF0Y2ggPSBmdW5jdGlvbigpXG57XG4gICAgdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKCdTcHJpdGVCYXRjaCBkb2VzIG5vdCBleGlzdCBhbnkgbW9yZSwgcGxlYXNlIHVzZSB0aGUgbmV3IFBhcnRpY2xlQ29udGFpbmVyIGluc3RlYWQuJyk7XG59O1xuXG4vKipcbiAqIEBjbGFzc1xuICogQHByaXZhdGVcbiAqIEBuYW1lIEFzc2V0TG9hZGVyXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHNlZSBQSVhJLmxvYWRlcnMuTG9hZGVyXG4gKiBAdGhyb3dzIHtSZWZlcmVuY2VFcnJvcn0gVGhlIGxvYWRlciBzeXN0ZW0gd2FzIG92ZXJoYXVsZWQgaW4gcGl4aSB2MywgcGxlYXNlIHNlZSB0aGUgbmV3IFBJWEkubG9hZGVycy5Mb2FkZXIgY2xhc3MuXG4gKiBAZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDMuMC4wXG4gKi9cbmNvcmUuQXNzZXRMb2FkZXIgPSBmdW5jdGlvbigpXG57XG4gICAgdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKCdUaGUgbG9hZGVyIHN5c3RlbSB3YXMgb3ZlcmhhdWxlZCBpbiBwaXhpIHYzLCBwbGVhc2Ugc2VlIHRoZSBuZXcgUElYSS5sb2FkZXJzLkxvYWRlciBjbGFzcy4nKTtcbn07XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGNvcmUsIHtcblxuICAgIC8qKlxuICAgICAqIEBjbGFzc1xuICAgICAqIEBwcml2YXRlXG4gICAgICogQG5hbWUgU3RhZ2VcbiAgICAgKiBAbWVtYmVyb2YgUElYSVxuICAgICAqIEBzZWUgUElYSS5Db250YWluZXJcbiAgICAgKiBAZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDMuMC4wXG4gICAgICovXG4gICAgU3RhZ2U6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbigpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignWW91IGRvIG5vdCBuZWVkIHRvIHVzZSBhIFBJWEkgU3RhZ2UgYW55IG1vcmUsIHlvdSBjYW4gc2ltcGx5IHJlbmRlciBhbnkgY29udGFpbmVyLicpO1xuICAgICAgICAgICAgcmV0dXJuIGNvcmUuQ29udGFpbmVyO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIEBjbGFzc1xuICAgICAqIEBwcml2YXRlXG4gICAgICogQG5hbWUgRGlzcGxheU9iamVjdENvbnRhaW5lclxuICAgICAqIEBtZW1iZXJvZiBQSVhJXG4gICAgICogQHNlZSBQSVhJLkNvbnRhaW5lclxuICAgICAqIEBkZXByZWNhdGVkIHNpbmNlIHZlcnNpb24gMy4wLjBcbiAgICAgKi9cbiAgICBEaXNwbGF5T2JqZWN0Q29udGFpbmVyOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24oKVxuICAgICAgICB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ0Rpc3BsYXlPYmplY3RDb250YWluZXIgaGFzIGJlZW4gc2hvcnRlbmVkIHRvIENvbnRhaW5lciwgcGxlYXNlIHVzZSBDb250YWluZXIgZnJvbSBub3cgb24uJyk7XG4gICAgICAgICAgICByZXR1cm4gY29yZS5Db250YWluZXI7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQGNsYXNzXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAbmFtZSBTdHJpcFxuICAgICAqIEBtZW1iZXJvZiBQSVhJXG4gICAgICogQHNlZSBQSVhJLm1lc2guTWVzaFxuICAgICAqIEBkZXByZWNhdGVkIHNpbmNlIHZlcnNpb24gMy4wLjBcbiAgICAgKi9cbiAgICBTdHJpcDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uKClcbiAgICAgICAge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKCdUaGUgU3RyaXAgY2xhc3MgaGFzIGJlZW4gcmVuYW1lZCB0byBNZXNoIGFuZCBtb3ZlZCB0byBtZXNoLk1lc2gsIHBsZWFzZSB1c2UgbWVzaC5NZXNoIGZyb20gbm93IG9uLicpO1xuICAgICAgICAgICAgcmV0dXJuIG1lc2guTWVzaDtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBAY2xhc3NcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBuYW1lIFJvcGVcbiAgICAgKiBAbWVtYmVyb2YgUElYSVxuICAgICAqIEBzZWUgUElYSS5tZXNoLlJvcGVcbiAgICAgKiBAZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDMuMC4wXG4gICAgICovXG4gICAgUm9wZToge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uKClcbiAgICAgICAge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKCdUaGUgUm9wZSBjbGFzcyBoYXMgYmVlbiBtb3ZlZCB0byBtZXNoLlJvcGUsIHBsZWFzZSB1c2UgbWVzaC5Sb3BlIGZyb20gbm93IG9uLicpO1xuICAgICAgICAgICAgcmV0dXJuIG1lc2guUm9wZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBAY2xhc3NcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBuYW1lIE1vdmllQ2xpcFxuICAgICAqIEBtZW1iZXJvZiBQSVhJXG4gICAgICogQHNlZSBQSVhJLmV4dHJhcy5Nb3ZpZUNsaXBcbiAgICAgKiBAZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDMuMC4wXG4gICAgICovXG4gICAgTW92aWVDbGlwOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24oKVxuICAgICAgICB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ1RoZSBNb3ZpZUNsaXAgY2xhc3MgaGFzIGJlZW4gbW92ZWQgdG8gZXh0cmFzLk1vdmllQ2xpcCwgcGxlYXNlIHVzZSBleHRyYXMuTW92aWVDbGlwIGZyb20gbm93IG9uLicpO1xuICAgICAgICAgICAgcmV0dXJuIGV4dHJhcy5Nb3ZpZUNsaXA7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQGNsYXNzXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAbmFtZSBUaWxpbmdTcHJpdGVcbiAgICAgKiBAbWVtYmVyb2YgUElYSVxuICAgICAqIEBzZWUgUElYSS5leHRyYXMuVGlsaW5nU3ByaXRlXG4gICAgICogQGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiAzLjAuMFxuICAgICAqL1xuICAgIFRpbGluZ1Nwcml0ZToge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uKClcbiAgICAgICAge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKCdUaGUgVGlsaW5nU3ByaXRlIGNsYXNzIGhhcyBiZWVuIG1vdmVkIHRvIGV4dHJhcy5UaWxpbmdTcHJpdGUsIHBsZWFzZSB1c2UgZXh0cmFzLlRpbGluZ1Nwcml0ZSBmcm9tIG5vdyBvbi4nKTtcbiAgICAgICAgICAgIHJldHVybiBleHRyYXMuVGlsaW5nU3ByaXRlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIEBjbGFzc1xuICAgICAqIEBwcml2YXRlXG4gICAgICogQG5hbWUgQml0bWFwVGV4dFxuICAgICAqIEBtZW1iZXJvZiBQSVhJXG4gICAgICogQHNlZSBQSVhJLmV4dHJhcy5CaXRtYXBUZXh0XG4gICAgICogQGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiAzLjAuMFxuICAgICAqL1xuICAgIEJpdG1hcFRleHQ6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbigpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignVGhlIEJpdG1hcFRleHQgY2xhc3MgaGFzIGJlZW4gbW92ZWQgdG8gZXh0cmFzLkJpdG1hcFRleHQsIHBsZWFzZSB1c2UgZXh0cmFzLkJpdG1hcFRleHQgZnJvbSBub3cgb24uJyk7XG4gICAgICAgICAgICByZXR1cm4gZXh0cmFzLkJpdG1hcFRleHQ7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQGNsYXNzXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAbmFtZSBibGVuZE1vZGVzXG4gICAgICogQG1lbWJlcm9mIFBJWElcbiAgICAgKiBAc2VlIFBJWEkuQkxFTkRfTU9ERVNcbiAgICAgKiBAZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDMuMC4wXG4gICAgICovXG4gICAgYmxlbmRNb2Rlczoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uKClcbiAgICAgICAge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKCdUaGUgYmxlbmRNb2RlcyBoYXMgYmVlbiBtb3ZlZCB0byBCTEVORF9NT0RFUywgcGxlYXNlIHVzZSBCTEVORF9NT0RFUyBmcm9tIG5vdyBvbi4nKTtcbiAgICAgICAgICAgIHJldHVybiBjb3JlLkJMRU5EX01PREVTO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIEBjbGFzc1xuICAgICAqIEBwcml2YXRlXG4gICAgICogQG5hbWUgc2NhbGVNb2Rlc1xuICAgICAqIEBtZW1iZXJvZiBQSVhJXG4gICAgICogQHNlZSBQSVhJLlNDQUxFX01PREVTXG4gICAgICogQGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiAzLjAuMFxuICAgICAqL1xuICAgIHNjYWxlTW9kZXM6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbigpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignVGhlIHNjYWxlTW9kZXMgaGFzIGJlZW4gbW92ZWQgdG8gU0NBTEVfTU9ERVMsIHBsZWFzZSB1c2UgU0NBTEVfTU9ERVMgZnJvbSBub3cgb24uJyk7XG4gICAgICAgICAgICByZXR1cm4gY29yZS5TQ0FMRV9NT0RFUztcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBAY2xhc3NcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBuYW1lIEJhc2VUZXh0dXJlQ2FjaGVcbiAgICAgKiBAbWVtYmVyb2YgUElYSVxuICAgICAqIEBzZWUgUElYSS51dGlscy5CYXNlVGV4dHVyZUNhY2hlXG4gICAgICogQGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiAzLjAuMFxuICAgICAqL1xuICAgIEJhc2VUZXh0dXJlQ2FjaGU6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ1RoZSBCYXNlVGV4dHVyZUNhY2hlIGNsYXNzIGhhcyBiZWVuIG1vdmVkIHRvIHV0aWxzLkJhc2VUZXh0dXJlQ2FjaGUsIHBsZWFzZSB1c2UgdXRpbHMuQmFzZVRleHR1cmVDYWNoZSBmcm9tIG5vdyBvbi4nKTtcbiAgICAgICAgICAgIHJldHVybiBjb3JlLnV0aWxzLkJhc2VUZXh0dXJlQ2FjaGU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQGNsYXNzXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAbmFtZSBUZXh0dXJlQ2FjaGVcbiAgICAgKiBAbWVtYmVyb2YgUElYSVxuICAgICAqIEBzZWUgUElYSS51dGlscy5UZXh0dXJlQ2FjaGVcbiAgICAgKiBAZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDMuMC4wXG4gICAgICovXG4gICAgVGV4dHVyZUNhY2hlOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKCdUaGUgVGV4dHVyZUNhY2hlIGNsYXNzIGhhcyBiZWVuIG1vdmVkIHRvIHV0aWxzLlRleHR1cmVDYWNoZSwgcGxlYXNlIHVzZSB1dGlscy5UZXh0dXJlQ2FjaGUgZnJvbSBub3cgb24uJyk7XG4gICAgICAgICAgICByZXR1cm4gY29yZS51dGlscy5UZXh0dXJlQ2FjaGU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQG5hbWVzcGFjZVxuICAgICAqIEBwcml2YXRlXG4gICAgICogQG5hbWUgbWF0aFxuICAgICAqIEBtZW1iZXJvZiBQSVhJXG4gICAgICogQHNlZSBQSVhJXG4gICAgICogQGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiAzLjAuNlxuICAgICAqL1xuICAgIG1hdGg6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ1RoZSBtYXRoIG5hbWVzcGFjZSBpcyBkZXByZWNhdGVkLCBwbGVhc2UgYWNjZXNzIG1lbWJlcnMgYWxyZWFkeSBhY2Nlc3NpYmxlIG9uIFBJWEkuJyk7XG4gICAgICAgICAgICByZXR1cm4gY29yZTtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuXG4vKipcbiAqIEBtZXRob2RcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBQSVhJLlNwcml0ZSNzZXRUZXh0dXJlXG4gKiBAc2VlIFBJWEkuU3ByaXRlI3RleHR1cmVcbiAqIEBkZXByZWNhdGVkIHNpbmNlIHZlcnNpb24gMy4wLjBcbiAqL1xuY29yZS5TcHJpdGUucHJvdG90eXBlLnNldFRleHR1cmUgPSBmdW5jdGlvbih0ZXh0dXJlKVxue1xuICAgIHRoaXMudGV4dHVyZSA9IHRleHR1cmU7XG4gICAgY29uc29sZS53YXJuKCdzZXRUZXh0dXJlIGlzIG5vdyBkZXByZWNhdGVkLCBwbGVhc2UgdXNlIHRoZSB0ZXh0dXJlIHByb3BlcnR5LCBlLmcgOiBzcHJpdGUudGV4dHVyZSA9IHRleHR1cmU7Jyk7XG59O1xuXG4vKipcbiAqIEBtZXRob2RcbiAqIEBuYW1lIFBJWEkuZXh0cmFzLkJpdG1hcFRleHQjc2V0VGV4dFxuICogQHNlZSBQSVhJLmV4dHJhcy5CaXRtYXBUZXh0I3RleHRcbiAqIEBkZXByZWNhdGVkIHNpbmNlIHZlcnNpb24gMy4wLjBcbiAqL1xuZXh0cmFzLkJpdG1hcFRleHQucHJvdG90eXBlLnNldFRleHQgPSBmdW5jdGlvbih0ZXh0KVxue1xuICAgIHRoaXMudGV4dCA9IHRleHQ7XG4gICAgY29uc29sZS53YXJuKCdzZXRUZXh0IGlzIG5vdyBkZXByZWNhdGVkLCBwbGVhc2UgdXNlIHRoZSB0ZXh0IHByb3BlcnR5LCBlLmcgOiBteUJpdG1hcFRleHQudGV4dCA9IFxcJ215IHRleHRcXCc7Jyk7XG59O1xuXG4vKipcbiAqIEBtZXRob2RcbiAqIEBuYW1lIFBJWEkuVGV4dCNzZXRUZXh0XG4gKiBAc2VlIFBJWEkuVGV4dCN0ZXh0XG4gKiBAZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDMuMC4wXG4gKi9cbmNvcmUuVGV4dC5wcm90b3R5cGUuc2V0VGV4dCA9IGZ1bmN0aW9uKHRleHQpXG57XG4gICAgdGhpcy50ZXh0ID0gdGV4dDtcbiAgICBjb25zb2xlLndhcm4oJ3NldFRleHQgaXMgbm93IGRlcHJlY2F0ZWQsIHBsZWFzZSB1c2UgdGhlIHRleHQgcHJvcGVydHksIGUuZyA6IG15VGV4dC50ZXh0ID0gXFwnbXkgdGV4dFxcJzsnKTtcbn07XG5cbi8qKlxuICogQG1ldGhvZFxuICogQG5hbWUgUElYSS5UZXh0I3NldFN0eWxlXG4gKiBAc2VlIFBJWEkuVGV4dCNzdHlsZVxuICogQGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiAzLjAuMFxuICovXG5jb3JlLlRleHQucHJvdG90eXBlLnNldFN0eWxlID0gZnVuY3Rpb24oc3R5bGUpXG57XG4gICAgdGhpcy5zdHlsZSA9IHN0eWxlO1xuICAgIGNvbnNvbGUud2Fybignc2V0U3R5bGUgaXMgbm93IGRlcHJlY2F0ZWQsIHBsZWFzZSB1c2UgdGhlIHN0eWxlIHByb3BlcnR5LCBlLmcgOiBteVRleHQuc3R5bGUgPSBzdHlsZTsnKTtcbn07XG5cbi8qKlxuICogQG1ldGhvZFxuICogQG5hbWUgUElYSS5UZXh0dXJlI3NldEZyYW1lXG4gKiBAc2VlIFBJWEkuVGV4dHVyZSNzZXRGcmFtZVxuICogQGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiAzLjAuMFxuICovXG5jb3JlLlRleHR1cmUucHJvdG90eXBlLnNldEZyYW1lID0gZnVuY3Rpb24oZnJhbWUpXG57XG4gICAgdGhpcy5mcmFtZSA9IGZyYW1lO1xuICAgIGNvbnNvbGUud2Fybignc2V0RnJhbWUgaXMgbm93IGRlcHJlY2F0ZWQsIHBsZWFzZSB1c2UgdGhlIGZyYW1lIHByb3BlcnR5LCBlLmcgOiBteVRleHR1cmUuZnJhbWUgPSBmcmFtZTsnKTtcbn07XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGZpbHRlcnMsIHtcblxuICAgIC8qKlxuICAgICAqIEBjbGFzc1xuICAgICAqIEBwcml2YXRlXG4gICAgICogQG5hbWUgUElYSS5maWx0ZXJzLkFic3RyYWN0RmlsdGVyXG4gICAgICogQHNlZSBQSVhJLkFic3RyYWN0RmlsdGVyXG4gICAgICogQGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiAzLjAuNlxuICAgICAqL1xuICAgIEFic3RyYWN0RmlsdGVyOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24oKVxuICAgICAgICB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ2ZpbHRlcnMuQWJzdHJhY3RGaWx0ZXIgaXMgYW4gdW5kb2N1bWVudGVkIGFsaWFzLCBwbGVhc2UgdXNlIEFic3RyYWN0RmlsdGVyIGZyb20gbm93IG9uLicpO1xuICAgICAgICAgICAgcmV0dXJuIGNvcmUuQWJzdHJhY3RGaWx0ZXI7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQGNsYXNzXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAbmFtZSBQSVhJLmZpbHRlcnMuRlhBQUZpbHRlclxuICAgICAqIEBzZWUgUElYSS5GWEFBRmlsdGVyXG4gICAgICogQGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiAzLjAuNlxuICAgICAqL1xuICAgIEZYQUFGaWx0ZXI6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbigpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignZmlsdGVycy5GWEFBRmlsdGVyIGlzIGFuIHVuZG9jdW1lbnRlZCBhbGlhcywgcGxlYXNlIHVzZSBGWEFBRmlsdGVyIGZyb20gbm93IG9uLicpO1xuICAgICAgICAgICAgcmV0dXJuIGNvcmUuRlhBQUZpbHRlcjtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBAY2xhc3NcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBuYW1lIFBJWEkuZmlsdGVycy5TcHJpdGVNYXNrRmlsdGVyXG4gICAgICogQHNlZSBQSVhJLlNwcml0ZU1hc2tGaWx0ZXJcbiAgICAgKiBAZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDMuMC42XG4gICAgICovXG4gICAgU3ByaXRlTWFza0ZpbHRlcjoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uKClcbiAgICAgICAge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKCdmaWx0ZXJzLlNwcml0ZU1hc2tGaWx0ZXIgaXMgYW4gdW5kb2N1bWVudGVkIGFsaWFzLCBwbGVhc2UgdXNlIFNwcml0ZU1hc2tGaWx0ZXIgZnJvbSBub3cgb24uJyk7XG4gICAgICAgICAgICByZXR1cm4gY29yZS5TcHJpdGVNYXNrRmlsdGVyO1xuICAgICAgICB9XG4gICAgfVxufSk7XG5cbi8qKlxuICogQG1ldGhvZFxuICogQG5hbWUgUElYSS51dGlscy51dWlkXG4gKiBAc2VlIFBJWEkudXRpbHMudWlkXG4gKiBAZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDMuMC42XG4gKi9cbmNvcmUudXRpbHMudXVpZCA9IGZ1bmN0aW9uICgpXG57XG4gICAgY29uc29sZS53YXJuKCd1dGlscy51dWlkKCkgaXMgZGVwcmVjYXRlZCwgcGxlYXNlIHVzZSB1dGlscy51aWQoKSBmcm9tIG5vdyBvbi4nKTtcbiAgICByZXR1cm4gY29yZS51dGlscy51aWQoKTtcbn07XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uL2NvcmUnKTtcblxuLyoqXG4gKiBBIEJpdG1hcFRleHQgb2JqZWN0IHdpbGwgY3JlYXRlIGEgbGluZSBvciBtdWx0aXBsZSBsaW5lcyBvZiB0ZXh0IHVzaW5nIGJpdG1hcCBmb250LiBUb1xuICogc3BsaXQgYSBsaW5lIHlvdSBjYW4gdXNlICdcXG4nLCAnXFxyJyBvciAnXFxyXFxuJyBpbiB5b3VyIHN0cmluZy4gWW91IGNhbiBnZW5lcmF0ZSB0aGUgZm50IGZpbGVzIHVzaW5nOlxuICpcbiAqIEEgQml0bWFwVGV4dCBjYW4gb25seSBiZSBjcmVhdGVkIHdoZW4gdGhlIGZvbnQgaXMgbG9hZGVkXG4gKlxuICogYGBganNcbiAqIC8vIGluIHRoaXMgY2FzZSB0aGUgZm9udCBpcyBpbiBhIGZpbGUgY2FsbGVkICdkZXN5cmVsLmZudCdcbiAqIHZhciBiaXRtYXBUZXh0ID0gbmV3IFBJWEkuZXh0cmFzLkJpdG1hcFRleHQoXCJ0ZXh0IHVzaW5nIGEgZmFuY3kgZm9udCFcIiwge2ZvbnQ6IFwiMzVweCBEZXN5cmVsXCIsIGFsaWduOiBcInJpZ2h0XCJ9KTtcbiAqIGBgYFxuICpcbiAqXG4gKiBodHRwOi8vd3d3LmFuZ2VsY29kZS5jb20vcHJvZHVjdHMvYm1mb250LyBmb3Igd2luZG93cyBvclxuICogaHR0cDovL3d3dy5ibWdseXBoLmNvbS8gZm9yIG1hYy5cbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQ29udGFpbmVyXG4gKiBAbWVtYmVyb2YgUElYSS5leHRyYXNcbiAqIEBwYXJhbSB0ZXh0IHtzdHJpbmd9IFRoZSBjb3B5IHRoYXQgeW91IHdvdWxkIGxpa2UgdGhlIHRleHQgdG8gZGlzcGxheVxuICogQHBhcmFtIHN0eWxlIHtvYmplY3R9IFRoZSBzdHlsZSBwYXJhbWV0ZXJzXG4gKiBAcGFyYW0gc3R5bGUuZm9udCB7c3RyaW5nfG9iamVjdH0gVGhlIGZvbnQgZGVzY3JpcHRvciBmb3IgdGhlIG9iamVjdCwgY2FuIGJlIHBhc3NlZCBhcyBhIHN0cmluZyBvZiBmb3JtXG4gKiAgICAgIFwiMjRweCBGb250TmFtZVwiIG9yIFwiRm9udE5hbWVcIiBvciBhcyBhbiBvYmplY3Qgd2l0aCBleHBsaWNpdCBuYW1lL3NpemUgcHJvcGVydGllcy5cbiAqIEBwYXJhbSBbc3R5bGUuZm9udC5uYW1lXSB7c3RyaW5nfSBUaGUgYml0bWFwIGZvbnQgaWRcbiAqIEBwYXJhbSBbc3R5bGUuZm9udC5zaXplXSB7bnVtYmVyfSBUaGUgc2l6ZSBvZiB0aGUgZm9udCBpbiBwaXhlbHMsIGUuZy4gMjRcbiAqIEBwYXJhbSBbc3R5bGUuYWxpZ249J2xlZnQnXSB7c3RyaW5nfSBBbGlnbm1lbnQgZm9yIG11bHRpbGluZSB0ZXh0ICgnbGVmdCcsICdjZW50ZXInIG9yICdyaWdodCcpLCBkb2VzIG5vdCBhZmZlY3RcbiAqICAgICAgc2luZ2xlIGxpbmUgdGV4dFxuICogQHBhcmFtIFtzdHlsZS50aW50PTB4RkZGRkZGXSB7bnVtYmVyfSBUaGUgdGludCBjb2xvclxuICovXG5mdW5jdGlvbiBCaXRtYXBUZXh0KHRleHQsIHN0eWxlKVxue1xuICAgIGNvcmUuQ29udGFpbmVyLmNhbGwodGhpcyk7XG5cbiAgICBzdHlsZSA9IHN0eWxlIHx8IHt9O1xuXG4gICAgLyoqXG4gICAgICogVGhlIHdpZHRoIG9mIHRoZSBvdmVyYWxsIHRleHQsIGRpZmZlcmVudCBmcm9tIGZvbnRTaXplLFxuICAgICAqIHdoaWNoIGlzIGRlZmluZWQgaW4gdGhlIHN0eWxlIG9iamVjdFxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEByZWFkT25seVxuICAgICAqL1xuICAgIHRoaXMudGV4dFdpZHRoID0gMDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBoZWlnaHQgb2YgdGhlIG92ZXJhbGwgdGV4dCwgZGlmZmVyZW50IGZyb20gZm9udFNpemUsXG4gICAgICogd2hpY2ggaXMgZGVmaW5lZCBpbiB0aGUgc3R5bGUgb2JqZWN0XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQHJlYWRPbmx5XG4gICAgICovXG4gICAgdGhpcy50ZXh0SGVpZ2h0ID0gMDtcblxuICAgIC8qKlxuICAgICAqIFByaXZhdGUgdHJhY2tlciBmb3IgdGhlIGxldHRlciBzcHJpdGUgcG9vbC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuU3ByaXRlW119XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9nbHlwaHMgPSBbXTtcblxuICAgIC8qKlxuICAgICAqIFByaXZhdGUgdHJhY2tlciBmb3IgdGhlIGN1cnJlbnQgc3R5bGUuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtvYmplY3R9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9mb250ID0ge1xuICAgICAgICB0aW50OiBzdHlsZS50aW50ICE9PSB1bmRlZmluZWQgPyBzdHlsZS50aW50IDogMHhGRkZGRkYsXG4gICAgICAgIGFsaWduOiBzdHlsZS5hbGlnbiB8fCAnbGVmdCcsXG4gICAgICAgIG5hbWU6IG51bGwsXG4gICAgICAgIHNpemU6IDBcbiAgICB9O1xuXG4gICAgLyoqXG4gICAgICogUHJpdmF0ZSB0cmFja2VyIGZvciB0aGUgY3VycmVudCBmb250LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7b2JqZWN0fVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5mb250ID0gc3R5bGUuZm9udDsgLy8gcnVuIGZvbnQgc2V0dGVyXG5cbiAgICAvKipcbiAgICAgKiBQcml2YXRlIHRyYWNrZXIgZm9yIHRoZSBjdXJyZW50IHRleHQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtzdHJpbmd9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl90ZXh0ID0gdGV4dDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBtYXggd2lkdGggb2YgdGhpcyBiaXRtYXAgdGV4dCBpbiBwaXhlbHMuIElmIHRoZSB0ZXh0IHByb3ZpZGVkIGlzIGxvbmdlciB0aGFuIHRoZSB2YWx1ZSBwcm92aWRlZCwgbGluZSBicmVha3Mgd2lsbCBiZSBhdXRvbWF0aWNhbGx5IGluc2VydGVkIGluIHRoZSBsYXN0IHdoaXRlc3BhY2UuXG4gICAgICogRGlzYWJsZSBieSBzZXR0aW5nIHZhbHVlIHRvIDBcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLm1heFdpZHRoID0gMDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBtYXggbGluZSBoZWlnaHQuIFRoaXMgaXMgdXNlZnVsIHdoZW4gdHJ5aW5nIHRvIHVzZSB0aGUgdG90YWwgaGVpZ2h0IG9mIHRoZSBUZXh0LCBpZTogd2hlbiB0cnlpbmcgdG8gdmVydGljYWxseSBhbGlnbi5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLm1heExpbmVIZWlnaHQgPSAwO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGRpcnR5IHN0YXRlIG9mIHRoaXMgb2JqZWN0LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKi9cbiAgICB0aGlzLmRpcnR5ID0gZmFsc2U7XG5cbiAgICB0aGlzLnVwZGF0ZVRleHQoKTtcbn1cblxuLy8gY29uc3RydWN0b3JcbkJpdG1hcFRleHQucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShjb3JlLkNvbnRhaW5lci5wcm90b3R5cGUpO1xuQml0bWFwVGV4dC5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBCaXRtYXBUZXh0O1xubW9kdWxlLmV4cG9ydHMgPSBCaXRtYXBUZXh0O1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhCaXRtYXBUZXh0LnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFRoZSB0aW50IG9mIHRoZSBCaXRtYXBUZXh0IG9iamVjdFxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmV4dHJhcy5CaXRtYXBUZXh0I1xuICAgICAqL1xuICAgIHRpbnQ6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fZm9udC50aW50O1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5fZm9udC50aW50ID0gKHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicgJiYgdmFsdWUgPj0gMCkgPyB2YWx1ZSA6IDB4RkZGRkZGO1xuXG4gICAgICAgICAgICB0aGlzLmRpcnR5ID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBUaGUgYWxpZ25tZW50IG9mIHRoZSBCaXRtYXBUZXh0IG9iamVjdFxuICAgICAqXG4gICAgICogQG1lbWJlciB7c3RyaW5nfVxuICAgICAqIEBkZWZhdWx0ICdsZWZ0J1xuICAgICAqIEBtZW1iZXJvZiBQSVhJLmV4dHJhcy5CaXRtYXBUZXh0I1xuICAgICAqL1xuICAgIGFsaWduOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2ZvbnQuYWxpZ247XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLl9mb250LmFsaWduID0gdmFsdWUgfHwgJ2xlZnQnO1xuXG4gICAgICAgICAgICB0aGlzLmRpcnR5ID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBUaGUgZm9udCBkZXNjcmlwdG9yIG9mIHRoZSBCaXRtYXBUZXh0IG9iamVjdFxuICAgICAqXG4gICAgICogQG1lbWJlciB7Rm9udH1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5leHRyYXMuQml0bWFwVGV4dCNcbiAgICAgKi9cbiAgICBmb250OiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2ZvbnQ7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICBpZiAoIXZhbHVlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgICAgIHZhbHVlID0gdmFsdWUuc3BsaXQoJyAnKTtcblxuICAgICAgICAgICAgICAgIHRoaXMuX2ZvbnQubmFtZSA9IHZhbHVlLmxlbmd0aCA9PT0gMSA/IHZhbHVlWzBdIDogdmFsdWUuc2xpY2UoMSkuam9pbignICcpO1xuICAgICAgICAgICAgICAgIHRoaXMuX2ZvbnQuc2l6ZSA9IHZhbHVlLmxlbmd0aCA+PSAyID8gcGFyc2VJbnQodmFsdWVbMF0sIDEwKSA6IEJpdG1hcFRleHQuZm9udHNbdGhpcy5fZm9udC5uYW1lXS5zaXplO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fZm9udC5uYW1lID0gdmFsdWUubmFtZTtcbiAgICAgICAgICAgICAgICB0aGlzLl9mb250LnNpemUgPSB0eXBlb2YgdmFsdWUuc2l6ZSA9PT0gJ251bWJlcicgPyB2YWx1ZS5zaXplIDogcGFyc2VJbnQodmFsdWUuc2l6ZSwgMTApO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLmRpcnR5ID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBUaGUgdGV4dCBvZiB0aGUgQml0bWFwVGV4dCBvYmplY3RcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge3N0cmluZ31cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5leHRyYXMuQml0bWFwVGV4dCNcbiAgICAgKi9cbiAgICB0ZXh0OiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3RleHQ7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB2YWx1ZSA9IHZhbHVlLnRvU3RyaW5nKCkgfHwgJyAnO1xuICAgICAgICAgICAgaWYgKHRoaXMuX3RleHQgPT09IHZhbHVlKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuX3RleHQgPSB2YWx1ZTtcbiAgICAgICAgICAgIHRoaXMuZGlydHkgPSB0cnVlO1xuICAgICAgICB9XG4gICAgfVxufSk7XG5cbi8qKlxuICogUmVuZGVycyB0ZXh0IGFuZCB1cGRhdGVzIGl0IHdoZW4gbmVlZGVkXG4gKlxuICogQHByaXZhdGVcbiAqL1xuQml0bWFwVGV4dC5wcm90b3R5cGUudXBkYXRlVGV4dCA9IGZ1bmN0aW9uICgpXG57XG4gICAgdmFyIGRhdGEgPSBCaXRtYXBUZXh0LmZvbnRzW3RoaXMuX2ZvbnQubmFtZV07XG4gICAgdmFyIHBvcyA9IG5ldyBjb3JlLlBvaW50KCk7XG4gICAgdmFyIHByZXZDaGFyQ29kZSA9IG51bGw7XG4gICAgdmFyIGNoYXJzID0gW107XG4gICAgdmFyIGxhc3RMaW5lV2lkdGggPSAwO1xuICAgIHZhciBtYXhMaW5lV2lkdGggPSAwO1xuICAgIHZhciBsaW5lV2lkdGhzID0gW107XG4gICAgdmFyIGxpbmUgPSAwO1xuICAgIHZhciBzY2FsZSA9IHRoaXMuX2ZvbnQuc2l6ZSAvIGRhdGEuc2l6ZTtcbiAgICB2YXIgbGFzdFNwYWNlID0gLTE7XG4gICAgdmFyIG1heExpbmVIZWlnaHQgPSAwO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLnRleHQubGVuZ3RoOyBpKyspXG4gICAge1xuICAgICAgICB2YXIgY2hhckNvZGUgPSB0aGlzLnRleHQuY2hhckNvZGVBdChpKTtcbiAgICAgICAgbGFzdFNwYWNlID0gLyhcXHMpLy50ZXN0KHRoaXMudGV4dC5jaGFyQXQoaSkpID8gaSA6IGxhc3RTcGFjZTtcblxuICAgICAgICBpZiAoLyg/OlxcclxcbnxcXHJ8XFxuKS8udGVzdCh0aGlzLnRleHQuY2hhckF0KGkpKSlcbiAgICAgICAge1xuICAgICAgICAgICAgbGluZVdpZHRocy5wdXNoKGxhc3RMaW5lV2lkdGgpO1xuICAgICAgICAgICAgbWF4TGluZVdpZHRoID0gTWF0aC5tYXgobWF4TGluZVdpZHRoLCBsYXN0TGluZVdpZHRoKTtcbiAgICAgICAgICAgIGxpbmUrKztcblxuICAgICAgICAgICAgcG9zLnggPSAwO1xuICAgICAgICAgICAgcG9zLnkgKz0gZGF0YS5saW5lSGVpZ2h0O1xuICAgICAgICAgICAgcHJldkNoYXJDb2RlID0gbnVsbDtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGxhc3RTcGFjZSAhPT0gLTEgJiYgdGhpcy5tYXhXaWR0aCA+IDAgJiYgcG9zLnggKiBzY2FsZSA+IHRoaXMubWF4V2lkdGgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNvcmUudXRpbHMucmVtb3ZlSXRlbXMoY2hhcnMsIGxhc3RTcGFjZSwgaSAtIGxhc3RTcGFjZSk7XG4gICAgICAgICAgICBpID0gbGFzdFNwYWNlO1xuICAgICAgICAgICAgbGFzdFNwYWNlID0gLTE7XG5cbiAgICAgICAgICAgIGxpbmVXaWR0aHMucHVzaChsYXN0TGluZVdpZHRoKTtcbiAgICAgICAgICAgIG1heExpbmVXaWR0aCA9IE1hdGgubWF4KG1heExpbmVXaWR0aCwgbGFzdExpbmVXaWR0aCk7XG4gICAgICAgICAgICBsaW5lKys7XG5cbiAgICAgICAgICAgIHBvcy54ID0gMDtcbiAgICAgICAgICAgIHBvcy55ICs9IGRhdGEubGluZUhlaWdodDtcbiAgICAgICAgICAgIHByZXZDaGFyQ29kZSA9IG51bGw7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBjaGFyRGF0YSA9IGRhdGEuY2hhcnNbY2hhckNvZGVdO1xuXG4gICAgICAgIGlmICghY2hhckRhdGEpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHByZXZDaGFyQ29kZSAmJiBjaGFyRGF0YS5rZXJuaW5nW3ByZXZDaGFyQ29kZV0pXG4gICAgICAgIHtcbiAgICAgICAgICAgIHBvcy54ICs9IGNoYXJEYXRhLmtlcm5pbmdbcHJldkNoYXJDb2RlXTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNoYXJzLnB1c2goe3RleHR1cmU6Y2hhckRhdGEudGV4dHVyZSwgbGluZTogbGluZSwgY2hhckNvZGU6IGNoYXJDb2RlLCBwb3NpdGlvbjogbmV3IGNvcmUuUG9pbnQocG9zLnggKyBjaGFyRGF0YS54T2Zmc2V0LCBwb3MueSArIGNoYXJEYXRhLnlPZmZzZXQpfSk7XG4gICAgICAgIGxhc3RMaW5lV2lkdGggPSBwb3MueCArIChjaGFyRGF0YS50ZXh0dXJlLndpZHRoICsgY2hhckRhdGEueE9mZnNldCk7XG4gICAgICAgIHBvcy54ICs9IGNoYXJEYXRhLnhBZHZhbmNlO1xuICAgICAgICBtYXhMaW5lSGVpZ2h0ID0gTWF0aC5tYXgobWF4TGluZUhlaWdodCwgKGNoYXJEYXRhLnlPZmZzZXQgKyBjaGFyRGF0YS50ZXh0dXJlLmhlaWdodCkpO1xuICAgICAgICBwcmV2Q2hhckNvZGUgPSBjaGFyQ29kZTtcbiAgICB9XG5cbiAgICBsaW5lV2lkdGhzLnB1c2gobGFzdExpbmVXaWR0aCk7XG4gICAgbWF4TGluZVdpZHRoID0gTWF0aC5tYXgobWF4TGluZVdpZHRoLCBsYXN0TGluZVdpZHRoKTtcblxuICAgIHZhciBsaW5lQWxpZ25PZmZzZXRzID0gW107XG5cbiAgICBmb3IgKGkgPSAwOyBpIDw9IGxpbmU7IGkrKylcbiAgICB7XG4gICAgICAgIHZhciBhbGlnbk9mZnNldCA9IDA7XG5cbiAgICAgICAgaWYgKHRoaXMuX2ZvbnQuYWxpZ24gPT09ICdyaWdodCcpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGFsaWduT2Zmc2V0ID0gbWF4TGluZVdpZHRoIC0gbGluZVdpZHRoc1tpXTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh0aGlzLl9mb250LmFsaWduID09PSAnY2VudGVyJylcbiAgICAgICAge1xuICAgICAgICAgICAgYWxpZ25PZmZzZXQgPSAobWF4TGluZVdpZHRoIC0gbGluZVdpZHRoc1tpXSkgLyAyO1xuICAgICAgICB9XG5cbiAgICAgICAgbGluZUFsaWduT2Zmc2V0cy5wdXNoKGFsaWduT2Zmc2V0KTtcbiAgICB9XG5cbiAgICB2YXIgbGVuQ2hhcnMgPSBjaGFycy5sZW5ndGg7XG4gICAgdmFyIHRpbnQgPSB0aGlzLnRpbnQ7XG5cbiAgICBmb3IgKGkgPSAwOyBpIDwgbGVuQ2hhcnM7IGkrKylcbiAgICB7XG4gICAgICAgIHZhciBjID0gdGhpcy5fZ2x5cGhzW2ldOyAvLyBnZXQgdGhlIG5leHQgZ2x5cGggc3ByaXRlXG5cbiAgICAgICAgaWYgKGMpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGMudGV4dHVyZSA9IGNoYXJzW2ldLnRleHR1cmU7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgICBjID0gbmV3IGNvcmUuU3ByaXRlKGNoYXJzW2ldLnRleHR1cmUpO1xuICAgICAgICAgICAgdGhpcy5fZ2x5cGhzLnB1c2goYyk7XG4gICAgICAgIH1cblxuICAgICAgICBjLnBvc2l0aW9uLnggPSAoY2hhcnNbaV0ucG9zaXRpb24ueCArIGxpbmVBbGlnbk9mZnNldHNbY2hhcnNbaV0ubGluZV0pICogc2NhbGU7XG4gICAgICAgIGMucG9zaXRpb24ueSA9IGNoYXJzW2ldLnBvc2l0aW9uLnkgKiBzY2FsZTtcbiAgICAgICAgYy5zY2FsZS54ID0gYy5zY2FsZS55ID0gc2NhbGU7XG4gICAgICAgIGMudGludCA9IHRpbnQ7XG5cbiAgICAgICAgaWYgKCFjLnBhcmVudClcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5hZGRDaGlsZChjKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIHJlbW92ZSB1bm5lY2Vzc2FyeSBjaGlsZHJlbi5cbiAgICBmb3IgKGkgPSBsZW5DaGFyczsgaSA8IHRoaXMuX2dseXBocy5sZW5ndGg7ICsraSlcbiAgICB7XG4gICAgICAgIHRoaXMucmVtb3ZlQ2hpbGQodGhpcy5fZ2x5cGhzW2ldKTtcbiAgICB9XG5cbiAgICB0aGlzLnRleHRXaWR0aCA9IG1heExpbmVXaWR0aCAqIHNjYWxlO1xuICAgIHRoaXMudGV4dEhlaWdodCA9IChwb3MueSArIGRhdGEubGluZUhlaWdodCkgKiBzY2FsZTtcbiAgICB0aGlzLm1heExpbmVIZWlnaHQgPSBtYXhMaW5lSGVpZ2h0ICogc2NhbGU7XG59O1xuXG4vKipcbiAqIFVwZGF0ZXMgdGhlIHRyYW5zZm9ybSBvZiB0aGlzIG9iamVjdFxuICpcbiAqIEBwcml2YXRlXG4gKi9cbkJpdG1hcFRleHQucHJvdG90eXBlLnVwZGF0ZVRyYW5zZm9ybSA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy52YWxpZGF0ZSgpO1xuICAgIHRoaXMuY29udGFpbmVyVXBkYXRlVHJhbnNmb3JtKCk7XG59O1xuXG4vKipcbiAqIFZhbGlkYXRlcyB0ZXh0IGJlZm9yZSBjYWxsaW5nIHBhcmVudCdzIGdldExvY2FsQm91bmRzXG4gKlxuICogQHJldHVybiB7UElYSS5SZWN0YW5nbGV9IFRoZSByZWN0YW5ndWxhciBib3VuZGluZyBhcmVhXG4gKi9cblxuQml0bWFwVGV4dC5wcm90b3R5cGUuZ2V0TG9jYWxCb3VuZHMgPSBmdW5jdGlvbigpXG57XG4gICAgdGhpcy52YWxpZGF0ZSgpO1xuICAgIHJldHVybiBjb3JlLkNvbnRhaW5lci5wcm90b3R5cGUuZ2V0TG9jYWxCb3VuZHMuY2FsbCh0aGlzKTtcbn07XG5cbi8qKlxuICogVXBkYXRlcyB0ZXh0IHdoZW4gbmVlZGVkXG4gKlxuICogQHByaXZhdGVcbiAqL1xuQml0bWFwVGV4dC5wcm90b3R5cGUudmFsaWRhdGUgPSBmdW5jdGlvbigpXG57XG4gICAgaWYgKHRoaXMuZGlydHkpXG4gICAge1xuICAgICAgICB0aGlzLnVwZGF0ZVRleHQoKTtcbiAgICAgICAgdGhpcy5kaXJ0eSA9IGZhbHNlO1xuICAgIH1cbn07XG5cbkJpdG1hcFRleHQuZm9udHMgPSB7fTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vY29yZScpO1xuXG4vKipcbiAqIEEgTW92aWVDbGlwIGlzIGEgc2ltcGxlIHdheSB0byBkaXNwbGF5IGFuIGFuaW1hdGlvbiBkZXBpY3RlZCBieSBhIGxpc3Qgb2YgdGV4dHVyZXMuXG4gKlxuICogYGBganNcbiAqIHZhciBhbGllbkltYWdlcyA9IFtcImltYWdlX3NlcXVlbmNlXzAxLnBuZ1wiLFwiaW1hZ2Vfc2VxdWVuY2VfMDIucG5nXCIsXCJpbWFnZV9zZXF1ZW5jZV8wMy5wbmdcIixcImltYWdlX3NlcXVlbmNlXzA0LnBuZ1wiXTtcbiAqIHZhciB0ZXh0dXJlQXJyYXkgPSBbXTtcbiAqXG4gKiBmb3IgKHZhciBpPTA7IGkgPCA0OyBpKyspXG4gKiB7XG4gKiAgICAgIHZhciB0ZXh0dXJlID0gUElYSS5UZXh0dXJlLmZyb21JbWFnZShhbGllbkltYWdlc1tpXSk7XG4gKiAgICAgIHRleHR1cmVBcnJheS5wdXNoKHRleHR1cmUpO1xuICogfTtcbiAqXG4gKiB2YXIgbWMgPSBuZXcgUElYSS5Nb3ZpZUNsaXAodGV4dHVyZUFycmF5KTtcbiAqIGBgYFxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5TcHJpdGVcbiAqIEBtZW1iZXJvZiBQSVhJLmV4dHJhc1xuICogQHBhcmFtIHRleHR1cmVzIHtQSVhJLlRleHR1cmVbXXxPYmplY3RbXX0gYW4gYXJyYXkgb2Yge0BsaW5rIFBJWEkuVGV4dHVyZX0gb3IgZnJhbWUgb2JqZWN0cyB0aGF0IG1ha2UgdXAgdGhlIGFuaW1hdGlvblxuICogQHBhcmFtIHRleHR1cmVzW10udGV4dHVyZSB7UElYSS5UZXh0dXJlfSB0aGUge0BsaW5rIFBJWEkuVGV4dHVyZX0gb2YgdGhlIGZyYW1lXG4gKiBAcGFyYW0gdGV4dHVyZXNbXS50aW1lIHtudW1iZXJ9IHRoZSBkdXJhdGlvbiBvZiB0aGUgZnJhbWUgaW4gbXNcbiAqL1xuZnVuY3Rpb24gTW92aWVDbGlwKHRleHR1cmVzKVxue1xuICAgIGNvcmUuU3ByaXRlLmNhbGwodGhpcywgdGV4dHVyZXNbMF0gaW5zdGFuY2VvZiBjb3JlLlRleHR1cmUgPyB0ZXh0dXJlc1swXSA6IHRleHR1cmVzWzBdLnRleHR1cmUpO1xuXG4gICAgLyoqXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl90ZXh0dXJlcyA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX2R1cmF0aW9ucyA9IG51bGw7XG5cbiAgICB0aGlzLnRleHR1cmVzID0gdGV4dHVyZXM7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgc3BlZWQgdGhhdCB0aGUgTW92aWVDbGlwIHdpbGwgcGxheSBhdC4gSGlnaGVyIGlzIGZhc3RlciwgbG93ZXIgaXMgc2xvd2VyXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMVxuICAgICAqL1xuICAgIHRoaXMuYW5pbWF0aW9uU3BlZWQgPSAxO1xuXG4gICAgLyoqXG4gICAgICogV2hldGhlciBvciBub3QgdGhlIG1vdmllIGNsaXAgcmVwZWF0cyBhZnRlciBwbGF5aW5nLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKiBAZGVmYXVsdCB0cnVlXG4gICAgICovXG4gICAgdGhpcy5sb29wID0gdHJ1ZTtcblxuICAgIC8qKlxuICAgICAqIEZ1bmN0aW9uIHRvIGNhbGwgd2hlbiBhIE1vdmllQ2xpcCBmaW5pc2hlcyBwbGF5aW5nXG4gICAgICpcbiAgICAgKiBAbWV0aG9kXG4gICAgICogQG1lbWJlcm9mIFBJWEkuZXh0cmFzLk1vdmllQ2xpcCNcbiAgICAgKi9cbiAgICB0aGlzLm9uQ29tcGxldGUgPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogRWxhcHNlZCB0aW1lIHNpbmNlIGFuaW1hdGlvbiBoYXMgYmVlbiBzdGFydGVkLCB1c2VkIGludGVybmFsbHkgdG8gZGlzcGxheSBjdXJyZW50IHRleHR1cmVcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX2N1cnJlbnRUaW1lID0gMDtcblxuICAgIC8qKlxuICAgICAqIEluZGljYXRlcyBpZiB0aGUgTW92aWVDbGlwIGlzIGN1cnJlbnRseSBwbGF5aW5nXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqIEByZWFkb25seVxuICAgICAqL1xuICAgIHRoaXMucGxheWluZyA9IGZhbHNlO1xufVxuXG4vLyBjb25zdHJ1Y3RvclxuTW92aWVDbGlwLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoY29yZS5TcHJpdGUucHJvdG90eXBlKTtcbk1vdmllQ2xpcC5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBNb3ZpZUNsaXA7XG5tb2R1bGUuZXhwb3J0cyA9IE1vdmllQ2xpcDtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoTW92aWVDbGlwLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIHRvdGFsRnJhbWVzIGlzIHRoZSB0b3RhbCBudW1iZXIgb2YgZnJhbWVzIGluIHRoZSBNb3ZpZUNsaXAuIFRoaXMgaXMgdGhlIHNhbWUgYXMgbnVtYmVyIG9mIHRleHR1cmVzXG4gICAgICogYXNzaWduZWQgdG8gdGhlIE1vdmllQ2xpcC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5leHRyYXMuTW92aWVDbGlwI1xuICAgICAqIEBkZWZhdWx0IDBcbiAgICAgKiBAcmVhZG9ubHlcbiAgICAgKi9cbiAgICB0b3RhbEZyYW1lczoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3RleHR1cmVzLmxlbmd0aDtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBUaGUgYXJyYXkgb2YgdGV4dHVyZXMgdXNlZCBmb3IgdGhpcyBNb3ZpZUNsaXBcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuVGV4dHVyZVtdfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmV4dHJhcy5Nb3ZpZUNsaXAjXG4gICAgICpcbiAgICAgKi9cbiAgICB0ZXh0dXJlczoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl90ZXh0dXJlcztcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGlmKHZhbHVlWzBdIGluc3RhbmNlb2YgY29yZS5UZXh0dXJlKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHRoaXMuX3RleHR1cmVzID0gdmFsdWU7XG4gICAgICAgICAgICAgICAgdGhpcy5fZHVyYXRpb25zID0gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB0aGlzLl90ZXh0dXJlcyA9IFtdO1xuICAgICAgICAgICAgICAgIHRoaXMuX2R1cmF0aW9ucyA9IFtdO1xuICAgICAgICAgICAgICAgIGZvcih2YXIgaSA9IDA7IGkgPCB2YWx1ZS5sZW5ndGg7IGkrKylcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3RleHR1cmVzLnB1c2godmFsdWVbaV0udGV4dHVyZSk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2R1cmF0aW9ucy5wdXNoKHZhbHVlW2ldLnRpbWUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAqIFRoZSBNb3ZpZUNsaXBzIGN1cnJlbnQgZnJhbWUgaW5kZXhcbiAgICAqXG4gICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgKiBAbWVtYmVyb2YgUElYSS5leHRyYXMuTW92aWVDbGlwI1xuICAgICogQHJlYWRvbmx5XG4gICAgKi9cbiAgICBjdXJyZW50RnJhbWU6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICB2YXIgY3VycmVudEZyYW1lID0gTWF0aC5mbG9vcih0aGlzLl9jdXJyZW50VGltZSkgJSB0aGlzLl90ZXh0dXJlcy5sZW5ndGg7XG4gICAgICAgICAgICBpZiAoY3VycmVudEZyYW1lIDwgMClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjdXJyZW50RnJhbWUgKz0gdGhpcy5fdGV4dHVyZXMubGVuZ3RoO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGN1cnJlbnRGcmFtZTtcbiAgICAgICAgfVxuICAgIH1cblxufSk7XG5cbi8qKlxuICogU3RvcHMgdGhlIE1vdmllQ2xpcFxuICpcbiAqL1xuTW92aWVDbGlwLnByb3RvdHlwZS5zdG9wID0gZnVuY3Rpb24gKClcbntcbiAgICBpZighdGhpcy5wbGF5aW5nKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMucGxheWluZyA9IGZhbHNlO1xuICAgIGNvcmUudGlja2VyLnNoYXJlZC5yZW1vdmUodGhpcy51cGRhdGUsIHRoaXMpO1xufTtcblxuLyoqXG4gKiBQbGF5cyB0aGUgTW92aWVDbGlwXG4gKlxuICovXG5Nb3ZpZUNsaXAucHJvdG90eXBlLnBsYXkgPSBmdW5jdGlvbiAoKVxue1xuICAgIGlmKHRoaXMucGxheWluZylcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLnBsYXlpbmcgPSB0cnVlO1xuICAgIGNvcmUudGlja2VyLnNoYXJlZC5hZGQodGhpcy51cGRhdGUsIHRoaXMpO1xufTtcblxuLyoqXG4gKiBTdG9wcyB0aGUgTW92aWVDbGlwIGFuZCBnb2VzIHRvIGEgc3BlY2lmaWMgZnJhbWVcbiAqXG4gKiBAcGFyYW0gZnJhbWVOdW1iZXIge251bWJlcn0gZnJhbWUgaW5kZXggdG8gc3RvcCBhdFxuICovXG5Nb3ZpZUNsaXAucHJvdG90eXBlLmdvdG9BbmRTdG9wID0gZnVuY3Rpb24gKGZyYW1lTnVtYmVyKVxue1xuICAgIHRoaXMuc3RvcCgpO1xuXG4gICAgdGhpcy5fY3VycmVudFRpbWUgPSBmcmFtZU51bWJlcjtcblxuICAgIHRoaXMuX3RleHR1cmUgPSB0aGlzLl90ZXh0dXJlc1t0aGlzLmN1cnJlbnRGcmFtZV07XG59O1xuXG4vKipcbiAqIEdvZXMgdG8gYSBzcGVjaWZpYyBmcmFtZSBhbmQgYmVnaW5zIHBsYXlpbmcgdGhlIE1vdmllQ2xpcFxuICpcbiAqIEBwYXJhbSBmcmFtZU51bWJlciB7bnVtYmVyfSBmcmFtZSBpbmRleCB0byBzdGFydCBhdFxuICovXG5Nb3ZpZUNsaXAucHJvdG90eXBlLmdvdG9BbmRQbGF5ID0gZnVuY3Rpb24gKGZyYW1lTnVtYmVyKVxue1xuICAgIHRoaXMuX2N1cnJlbnRUaW1lID0gZnJhbWVOdW1iZXI7XG5cbiAgICB0aGlzLnBsYXkoKTtcbn07XG5cbi8qXG4gKiBVcGRhdGVzIHRoZSBvYmplY3QgdHJhbnNmb3JtIGZvciByZW5kZXJpbmdcbiAqIEBwcml2YXRlXG4gKi9cbk1vdmllQ2xpcC5wcm90b3R5cGUudXBkYXRlID0gZnVuY3Rpb24gKGRlbHRhVGltZSlcbntcbiAgICB2YXIgZWxhcHNlZCA9IHRoaXMuYW5pbWF0aW9uU3BlZWQgKiBkZWx0YVRpbWU7XG5cbiAgICBpZiAodGhpcy5fZHVyYXRpb25zICE9PSBudWxsKVxuICAgIHtcbiAgICAgICAgdmFyIGxhZyA9IHRoaXMuX2N1cnJlbnRUaW1lICUgMSAqIHRoaXMuX2R1cmF0aW9uc1t0aGlzLmN1cnJlbnRGcmFtZV07XG5cbiAgICAgICAgbGFnICs9IGVsYXBzZWQgLyA2MCAqIDEwMDA7XG5cbiAgICAgICAgd2hpbGUgKGxhZyA8IDApXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuX2N1cnJlbnRUaW1lLS07XG4gICAgICAgICAgICBsYWcgKz0gdGhpcy5fZHVyYXRpb25zW3RoaXMuY3VycmVudEZyYW1lXTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBzaWduID0gTWF0aC5zaWduKHRoaXMuYW5pbWF0aW9uU3BlZWQgKiBkZWx0YVRpbWUpO1xuICAgICAgICB0aGlzLl9jdXJyZW50VGltZSA9IE1hdGguZmxvb3IodGhpcy5fY3VycmVudFRpbWUpO1xuXG4gICAgICAgIHdoaWxlIChsYWcgPj0gdGhpcy5fZHVyYXRpb25zW3RoaXMuY3VycmVudEZyYW1lXSlcbiAgICAgICAge1xuICAgICAgICAgICAgbGFnIC09IHRoaXMuX2R1cmF0aW9uc1t0aGlzLmN1cnJlbnRGcmFtZV0gKiBzaWduO1xuICAgICAgICAgICAgdGhpcy5fY3VycmVudFRpbWUgKz0gc2lnbjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX2N1cnJlbnRUaW1lICs9IGxhZyAvIHRoaXMuX2R1cmF0aW9uc1t0aGlzLmN1cnJlbnRGcmFtZV07XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHRoaXMuX2N1cnJlbnRUaW1lICs9IGVsYXBzZWQ7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX2N1cnJlbnRUaW1lIDwgMCAmJiAhdGhpcy5sb29wKVxuICAgIHtcbiAgICAgICAgdGhpcy5nb3RvQW5kU3RvcCgwKTtcblxuICAgICAgICBpZiAodGhpcy5vbkNvbXBsZXRlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLm9uQ29tcGxldGUoKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBlbHNlIGlmICh0aGlzLl9jdXJyZW50VGltZSA+PSB0aGlzLl90ZXh0dXJlcy5sZW5ndGggJiYgIXRoaXMubG9vcClcbiAgICB7XG4gICAgICAgIHRoaXMuZ290b0FuZFN0b3AodGhpcy5fdGV4dHVyZXMubGVuZ3RoIC0gMSk7XG5cbiAgICAgICAgaWYgKHRoaXMub25Db21wbGV0ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5vbkNvbXBsZXRlKCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgdGhpcy5fdGV4dHVyZSA9IHRoaXMuX3RleHR1cmVzW3RoaXMuY3VycmVudEZyYW1lXTtcbiAgICB9XG5cbn07XG5cbi8qXG4gKiBTdG9wcyB0aGUgTW92aWVDbGlwIGFuZCBkZXN0cm95cyBpdFxuICpcbiAqL1xuTW92aWVDbGlwLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKCApXG57XG4gICAgdGhpcy5zdG9wKCk7XG4gICAgY29yZS5TcHJpdGUucHJvdG90eXBlLmRlc3Ryb3kuY2FsbCh0aGlzKTtcbn07XG5cbi8qKlxuICogQSBzaG9ydCBoYW5kIHdheSBvZiBjcmVhdGluZyBhIG1vdmllY2xpcCBmcm9tIGFuIGFycmF5IG9mIGZyYW1lIGlkc1xuICpcbiAqIEBzdGF0aWNcbiAqIEBwYXJhbSBmcmFtZXMge3N0cmluZ1tdfSB0aGUgYXJyYXkgb2YgZnJhbWVzIGlkcyB0aGUgbW92aWVjbGlwIHdpbGwgdXNlIGFzIGl0cyB0ZXh0dXJlIGZyYW1lc1xuICovXG5Nb3ZpZUNsaXAuZnJvbUZyYW1lcyA9IGZ1bmN0aW9uIChmcmFtZXMpXG57XG4gICAgdmFyIHRleHR1cmVzID0gW107XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGZyYW1lcy5sZW5ndGg7ICsraSlcbiAgICB7XG4gICAgICAgIHRleHR1cmVzLnB1c2gobmV3IGNvcmUuVGV4dHVyZS5mcm9tRnJhbWUoZnJhbWVzW2ldKSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBNb3ZpZUNsaXAodGV4dHVyZXMpO1xufTtcblxuLyoqXG4gKiBBIHNob3J0IGhhbmQgd2F5IG9mIGNyZWF0aW5nIGEgbW92aWVjbGlwIGZyb20gYW4gYXJyYXkgb2YgaW1hZ2UgaWRzXG4gKlxuICogQHN0YXRpY1xuICogQHBhcmFtIGltYWdlcyB7c3RyaW5nW119IHRoZSBhcnJheSBvZiBpbWFnZSB1cmxzIHRoZSBtb3ZpZWNsaXAgd2lsbCB1c2UgYXMgaXRzIHRleHR1cmUgZnJhbWVzXG4gKi9cbk1vdmllQ2xpcC5mcm9tSW1hZ2VzID0gZnVuY3Rpb24gKGltYWdlcylcbntcbiAgICB2YXIgdGV4dHVyZXMgPSBbXTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgaW1hZ2VzLmxlbmd0aDsgKytpKVxuICAgIHtcbiAgICAgICAgdGV4dHVyZXMucHVzaChuZXcgY29yZS5UZXh0dXJlLmZyb21JbWFnZShpbWFnZXNbaV0pKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IE1vdmllQ2xpcCh0ZXh0dXJlcyk7XG59OyIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vY29yZScpLFxuICAgIC8vIGEgc3ByaXRlIHVzZSBkZm9yIHJlbmRlcmluZyB0ZXh0dXJlcy4uXG4gICAgdGVtcFBvaW50ID0gbmV3IGNvcmUuUG9pbnQoKSxcbiAgICBDYW52YXNUaW50ZXIgPSByZXF1aXJlKCcuLi9jb3JlL3JlbmRlcmVycy9jYW52YXMvdXRpbHMvQ2FudmFzVGludGVyJyk7XG5cbi8qKlxuICogQSB0aWxpbmcgc3ByaXRlIGlzIGEgZmFzdCB3YXkgb2YgcmVuZGVyaW5nIGEgdGlsaW5nIGltYWdlXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLlNwcml0ZVxuICogQG1lbWJlcm9mIFBJWEkuZXh0cmFzXG4gKiBAcGFyYW0gdGV4dHVyZSB7VGV4dHVyZX0gdGhlIHRleHR1cmUgb2YgdGhlIHRpbGluZyBzcHJpdGVcbiAqIEBwYXJhbSB3aWR0aCB7bnVtYmVyfSAgdGhlIHdpZHRoIG9mIHRoZSB0aWxpbmcgc3ByaXRlXG4gKiBAcGFyYW0gaGVpZ2h0IHtudW1iZXJ9IHRoZSBoZWlnaHQgb2YgdGhlIHRpbGluZyBzcHJpdGVcbiAqL1xuZnVuY3Rpb24gVGlsaW5nU3ByaXRlKHRleHR1cmUsIHdpZHRoLCBoZWlnaHQpXG57XG4gICAgY29yZS5TcHJpdGUuY2FsbCh0aGlzLCB0ZXh0dXJlKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBzY2FsaW5nIG9mIHRoZSBpbWFnZSB0aGF0IGlzIGJlaW5nIHRpbGVkXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlBvaW50fVxuICAgICAqL1xuICAgIHRoaXMudGlsZVNjYWxlID0gbmV3IGNvcmUuUG9pbnQoMSwxKTtcblxuXG4gICAgLyoqXG4gICAgICogVGhlIG9mZnNldCBwb3NpdGlvbiBvZiB0aGUgaW1hZ2UgdGhhdCBpcyBiZWluZyB0aWxlZFxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5Qb2ludH1cbiAgICAgKi9cbiAgICB0aGlzLnRpbGVQb3NpdGlvbiA9IG5ldyBjb3JlLlBvaW50KDAsMCk7XG5cbiAgICAvLy8vLyBwcml2YXRlXG5cbiAgICAvKipcbiAgICAgKiBUaGUgd2l0aCBvZiB0aGUgdGlsaW5nIHNwcml0ZVxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fd2lkdGggPSB3aWR0aCB8fCAxMDA7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgaGVpZ2h0IG9mIHRoZSB0aWxpbmcgc3ByaXRlXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9oZWlnaHQgPSBoZWlnaHQgfHwgMTAwO1xuXG4gICAgLyoqXG4gICAgICogQW4gaW50ZXJuYWwgV2ViR0wgVVYgY2FjaGUuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlRleHR1cmVVdnN9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl91dnMgPSBuZXcgY29yZS5UZXh0dXJlVXZzKCk7XG5cbiAgICB0aGlzLl9jYW52YXNQYXR0ZXJuID0gbnVsbDtcblxuICAgIC8vVE9ETyBtb3ZlLi5cbiAgICB0aGlzLnNoYWRlciA9IG5ldyBjb3JlLkFic3RyYWN0RmlsdGVyKFxuXG4gICAgICBbXG4gICAgICAgICdwcmVjaXNpb24gbG93cCBmbG9hdDsnLFxuICAgICAgICAnYXR0cmlidXRlIHZlYzIgYVZlcnRleFBvc2l0aW9uOycsXG4gICAgICAgICdhdHRyaWJ1dGUgdmVjMiBhVGV4dHVyZUNvb3JkOycsXG4gICAgICAgICdhdHRyaWJ1dGUgdmVjNCBhQ29sb3I7JyxcblxuICAgICAgICAndW5pZm9ybSBtYXQzIHByb2plY3Rpb25NYXRyaXg7JyxcblxuICAgICAgICAndW5pZm9ybSB2ZWM0IHVGcmFtZTsnLFxuICAgICAgICAndW5pZm9ybSB2ZWM0IHVUcmFuc2Zvcm07JyxcblxuICAgICAgICAndmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7JyxcbiAgICAgICAgJ3ZhcnlpbmcgdmVjNCB2Q29sb3I7JyxcblxuICAgICAgICAndm9pZCBtYWluKHZvaWQpeycsXG4gICAgICAgICcgICBnbF9Qb3NpdGlvbiA9IHZlYzQoKHByb2plY3Rpb25NYXRyaXggKiB2ZWMzKGFWZXJ0ZXhQb3NpdGlvbiwgMS4wKSkueHksIDAuMCwgMS4wKTsnLFxuXG4gICAgICAgICcgICB2ZWMyIGNvb3JkID0gYVRleHR1cmVDb29yZDsnLFxuICAgICAgICAnICAgY29vcmQgLT0gdVRyYW5zZm9ybS54eTsnLFxuICAgICAgICAnICAgY29vcmQgLz0gdVRyYW5zZm9ybS56dzsnLFxuICAgICAgICAnICAgdlRleHR1cmVDb29yZCA9IGNvb3JkOycsXG5cbiAgICAgICAgJyAgIHZDb2xvciA9IHZlYzQoYUNvbG9yLnJnYiAqIGFDb2xvci5hLCBhQ29sb3IuYSk7JyxcbiAgICAgICAgJ30nXG4gICAgICBdLmpvaW4oJ1xcbicpLFxuICAgICAgW1xuICAgICAgICAncHJlY2lzaW9uIGxvd3AgZmxvYXQ7JyxcblxuICAgICAgICAndmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7JyxcbiAgICAgICAgJ3ZhcnlpbmcgdmVjNCB2Q29sb3I7JyxcblxuICAgICAgICAndW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXI7JyxcbiAgICAgICAgJ3VuaWZvcm0gdmVjNCB1RnJhbWU7JyxcbiAgICAgICAgJ3VuaWZvcm0gdmVjMiB1UGl4ZWxTaXplOycsXG5cbiAgICAgICAgJ3ZvaWQgbWFpbih2b2lkKXsnLFxuXG4gICAgICAgICcgICB2ZWMyIGNvb3JkID0gbW9kKHZUZXh0dXJlQ29vcmQsIHVGcmFtZS56dyk7JyxcbiAgICAgICAgJyAgIGNvb3JkID0gY2xhbXAoY29vcmQsIHVQaXhlbFNpemUsIHVGcmFtZS56dyAtIHVQaXhlbFNpemUpOycsXG4gICAgICAgICcgICBjb29yZCArPSB1RnJhbWUueHk7JyxcblxuICAgICAgICAnICAgZ2xfRnJhZ0NvbG9yID0gIHRleHR1cmUyRCh1U2FtcGxlciwgY29vcmQpICogdkNvbG9yIDsnLFxuICAgICAgICAnfSdcbiAgICAgIF0uam9pbignXFxuJyksXG5cbiAgICAgICAgICAgIC8vIHNldCB0aGUgdW5pZm9ybXNcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB1RnJhbWU6IHsgdHlwZTogJzRmdicsIHZhbHVlOiBbMCwwLDEsMV0gfSxcbiAgICAgICAgICAgICAgICB1VHJhbnNmb3JtOiB7IHR5cGU6ICc0ZnYnLCB2YWx1ZTogWzAsMCwxLDFdIH0sXG4gICAgICAgICAgICAgICAgdVBpeGVsU2l6ZSA6IHsgdHlwZSA6ICcyZnYnLCB2YWx1ZTogWzEsIDFdfVxuICAgICAgICAgICAgfVxuICAgICAgKTtcbn1cblxuVGlsaW5nU3ByaXRlLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoY29yZS5TcHJpdGUucHJvdG90eXBlKTtcblRpbGluZ1Nwcml0ZS5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBUaWxpbmdTcHJpdGU7XG5tb2R1bGUuZXhwb3J0cyA9IFRpbGluZ1Nwcml0ZTtcblxuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhUaWxpbmdTcHJpdGUucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogVGhlIHdpZHRoIG9mIHRoZSBzcHJpdGUsIHNldHRpbmcgdGhpcyB3aWxsIGFjdHVhbGx5IG1vZGlmeSB0aGUgc2NhbGUgdG8gYWNoaWV2ZSB0aGUgdmFsdWUgc2V0XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZXh0cmFzLlRpbGluZ1Nwcml0ZSNcbiAgICAgKi9cbiAgICB3aWR0aDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl93aWR0aDtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuX3dpZHRoID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVGhlIGhlaWdodCBvZiB0aGUgVGlsaW5nU3ByaXRlLCBzZXR0aW5nIHRoaXMgd2lsbCBhY3R1YWxseSBtb2RpZnkgdGhlIHNjYWxlIHRvIGFjaGlldmUgdGhlIHZhbHVlIHNldFxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmV4dHJhcy5UaWxpbmdTcHJpdGUjXG4gICAgICovXG4gICAgaGVpZ2h0OiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2hlaWdodDtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuX2hlaWdodCA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfVxufSk7XG5cblRpbGluZ1Nwcml0ZS5wcm90b3R5cGUuX29uVGV4dHVyZVVwZGF0ZSA9IGZ1bmN0aW9uICgpXG57XG4gICAgcmV0dXJuO1xufTtcblxuXG4vKipcbiAqIFJlbmRlcnMgdGhlIG9iamVjdCB1c2luZyB0aGUgV2ViR0wgcmVuZGVyZXJcbiAqXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcn1cbiAqIEBwcml2YXRlXG4gKi9cblRpbGluZ1Nwcml0ZS5wcm90b3R5cGUuX3JlbmRlcldlYkdMID0gZnVuY3Rpb24gKHJlbmRlcmVyKVxue1xuICAgIC8vIHR3ZWFrIG91ciB0ZXh0dXJlIHRlbXBvcmFyaWx5Li5cbiAgICB2YXIgdGV4dHVyZSA9IHRoaXMuX3RleHR1cmU7XG5cbiAgICBpZighdGV4dHVyZSB8fCAhdGV4dHVyZS5fdXZzKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHZhciB0ZW1wVXZzID0gdGV4dHVyZS5fdXZzLFxuICAgICAgICB0ZW1wV2lkdGggPSB0ZXh0dXJlLl9mcmFtZS53aWR0aCxcbiAgICAgICAgdGVtcEhlaWdodCA9IHRleHR1cmUuX2ZyYW1lLmhlaWdodCxcbiAgICAgICAgdHcgPSB0ZXh0dXJlLmJhc2VUZXh0dXJlLndpZHRoLFxuICAgICAgICB0aCA9IHRleHR1cmUuYmFzZVRleHR1cmUuaGVpZ2h0O1xuXG4gICAgdGV4dHVyZS5fdXZzID0gdGhpcy5fdXZzO1xuICAgIHRleHR1cmUuX2ZyYW1lLndpZHRoID0gdGhpcy53aWR0aDtcbiAgICB0ZXh0dXJlLl9mcmFtZS5oZWlnaHQgPSB0aGlzLmhlaWdodDtcblxuICAgIHRoaXMuc2hhZGVyLnVuaWZvcm1zLnVQaXhlbFNpemUudmFsdWVbMF0gPSAxLjAvdHc7XG4gICAgdGhpcy5zaGFkZXIudW5pZm9ybXMudVBpeGVsU2l6ZS52YWx1ZVsxXSA9IDEuMC90aDtcblxuICAgIHRoaXMuc2hhZGVyLnVuaWZvcm1zLnVGcmFtZS52YWx1ZVswXSA9IHRlbXBVdnMueDA7XG4gICAgdGhpcy5zaGFkZXIudW5pZm9ybXMudUZyYW1lLnZhbHVlWzFdID0gdGVtcFV2cy55MDtcbiAgICB0aGlzLnNoYWRlci51bmlmb3Jtcy51RnJhbWUudmFsdWVbMl0gPSB0ZW1wVXZzLngxIC0gdGVtcFV2cy54MDtcbiAgICB0aGlzLnNoYWRlci51bmlmb3Jtcy51RnJhbWUudmFsdWVbM10gPSB0ZW1wVXZzLnkyIC0gdGVtcFV2cy55MDtcblxuICAgIHRoaXMuc2hhZGVyLnVuaWZvcm1zLnVUcmFuc2Zvcm0udmFsdWVbMF0gPSAodGhpcy50aWxlUG9zaXRpb24ueCAlICh0ZW1wV2lkdGggKiB0aGlzLnRpbGVTY2FsZS54KSkgLyB0aGlzLl93aWR0aDtcbiAgICB0aGlzLnNoYWRlci51bmlmb3Jtcy51VHJhbnNmb3JtLnZhbHVlWzFdID0gKHRoaXMudGlsZVBvc2l0aW9uLnkgJSAodGVtcEhlaWdodCAqIHRoaXMudGlsZVNjYWxlLnkpKSAvIHRoaXMuX2hlaWdodDtcbiAgICB0aGlzLnNoYWRlci51bmlmb3Jtcy51VHJhbnNmb3JtLnZhbHVlWzJdID0gKCB0dyAvIHRoaXMuX3dpZHRoICkgKiB0aGlzLnRpbGVTY2FsZS54O1xuICAgIHRoaXMuc2hhZGVyLnVuaWZvcm1zLnVUcmFuc2Zvcm0udmFsdWVbM10gPSAoIHRoIC8gdGhpcy5faGVpZ2h0ICkgKiB0aGlzLnRpbGVTY2FsZS55O1xuXG4gICAgcmVuZGVyZXIuc2V0T2JqZWN0UmVuZGVyZXIocmVuZGVyZXIucGx1Z2lucy5zcHJpdGUpO1xuICAgIHJlbmRlcmVyLnBsdWdpbnMuc3ByaXRlLnJlbmRlcih0aGlzKTtcblxuICAgIHRleHR1cmUuX3V2cyA9IHRlbXBVdnM7XG4gICAgdGV4dHVyZS5fZnJhbWUud2lkdGggPSB0ZW1wV2lkdGg7XG4gICAgdGV4dHVyZS5fZnJhbWUuaGVpZ2h0ID0gdGVtcEhlaWdodDtcbn07XG5cbi8qKlxuICogUmVuZGVycyB0aGUgb2JqZWN0IHVzaW5nIHRoZSBDYW52YXMgcmVuZGVyZXJcbiAqXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuQ2FudmFzUmVuZGVyZXJ9IGEgcmVmZXJlbmNlIHRvIHRoZSBjYW52YXMgcmVuZGVyZXJcbiAqIEBwcml2YXRlXG4gKi9cblRpbGluZ1Nwcml0ZS5wcm90b3R5cGUuX3JlbmRlckNhbnZhcyA9IGZ1bmN0aW9uIChyZW5kZXJlcilcbntcbiAgICB2YXIgdGV4dHVyZSA9IHRoaXMuX3RleHR1cmU7XG5cbiAgICBpZiAoIXRleHR1cmUuYmFzZVRleHR1cmUuaGFzTG9hZGVkKVxuICAgIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB2YXIgY29udGV4dCA9IHJlbmRlcmVyLmNvbnRleHQsXG4gICAgICAgIHRyYW5zZm9ybSA9IHRoaXMud29ybGRUcmFuc2Zvcm0sXG4gICAgICAgIHJlc29sdXRpb24gPSByZW5kZXJlci5yZXNvbHV0aW9uLFxuICAgICAgICBiYXNlVGV4dHVyZSA9IHRleHR1cmUuYmFzZVRleHR1cmUsXG4gICAgICAgIG1vZFggPSAodGhpcy50aWxlUG9zaXRpb24ueCAvIHRoaXMudGlsZVNjYWxlLngpICUgdGV4dHVyZS5fZnJhbWUud2lkdGgsXG4gICAgICAgIG1vZFkgPSAodGhpcy50aWxlUG9zaXRpb24ueSAvIHRoaXMudGlsZVNjYWxlLnkpICUgdGV4dHVyZS5fZnJhbWUuaGVpZ2h0O1xuXG4gICAgLy8gY3JlYXRlIGEgbmljZSBzaGlueSBwYXR0ZXJuIVxuICAgIC8vIFRPRE8gdGhpcyBuZWVkcyB0byBiZSByZWZyZXNoZWQgaWYgdGV4dHVyZSBjaGFuZ2VzLi5cbiAgICBpZighdGhpcy5fY2FudmFzUGF0dGVybilcbiAgICB7XG4gICAgICAgIC8vIGN1dCBhbiBvYmplY3QgZnJvbSBhIHNwcml0ZXNoZWV0Li5cbiAgICAgICAgdmFyIHRlbXBDYW52YXMgPSBuZXcgY29yZS5DYW52YXNCdWZmZXIodGV4dHVyZS5fZnJhbWUud2lkdGgsIHRleHR1cmUuX2ZyYW1lLmhlaWdodCk7XG5cbiAgICAgICAgLy8gVGludCB0aGUgdGlsaW5nIHNwcml0ZVxuICAgICAgICBpZiAodGhpcy50aW50ICE9PSAweEZGRkZGRilcbiAgICAgICAge1xuICAgICAgICAgICAgaWYgKHRoaXMuY2FjaGVkVGludCAhPT0gdGhpcy50aW50KVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHRoaXMuY2FjaGVkVGludCA9IHRoaXMudGludDtcblxuICAgICAgICAgICAgICAgIHRoaXMudGludGVkVGV4dHVyZSA9IENhbnZhc1RpbnRlci5nZXRUaW50ZWRUZXh0dXJlKHRoaXMsIHRoaXMudGludCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0ZW1wQ2FudmFzLmNvbnRleHQuZHJhd0ltYWdlKHRoaXMudGludGVkVGV4dHVyZSwgMCwgMCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgICB0ZW1wQ2FudmFzLmNvbnRleHQuZHJhd0ltYWdlKGJhc2VUZXh0dXJlLnNvdXJjZSwgLXRleHR1cmUuX2ZyYW1lLngsIC10ZXh0dXJlLl9mcmFtZS55KTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9jYW52YXNQYXR0ZXJuID0gdGVtcENhbnZhcy5jb250ZXh0LmNyZWF0ZVBhdHRlcm4oIHRlbXBDYW52YXMuY2FudmFzLCAncmVwZWF0JyApO1xuICAgIH1cblxuICAgIC8vIHNldCBjb250ZXh0IHN0YXRlLi5cbiAgICBjb250ZXh0Lmdsb2JhbEFscGhhID0gdGhpcy53b3JsZEFscGhhO1xuICAgIGNvbnRleHQuc2V0VHJhbnNmb3JtKHRyYW5zZm9ybS5hICogcmVzb2x1dGlvbixcbiAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtLmIgKiByZXNvbHV0aW9uLFxuICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2Zvcm0uYyAqIHJlc29sdXRpb24sXG4gICAgICAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybS5kICogcmVzb2x1dGlvbixcbiAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtLnR4ICogcmVzb2x1dGlvbixcbiAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtLnR5ICogcmVzb2x1dGlvbik7XG5cbiAgICAvLyBUT0RPIC0gdGhpcyBzaG91bGQgYmUgcm9sbGVkIGludG8gdGhlIHNldFRyYW5zZm9ybSBhYm92ZS4uXG4gICAgY29udGV4dC5zY2FsZSh0aGlzLnRpbGVTY2FsZS54LHRoaXMudGlsZVNjYWxlLnkpO1xuXG4gICAgY29udGV4dC50cmFuc2xhdGUobW9kWCArICh0aGlzLmFuY2hvci54ICogLXRoaXMuX3dpZHRoICksXG4gICAgICAgICAgICAgICAgICAgICAgbW9kWSArICh0aGlzLmFuY2hvci55ICogLXRoaXMuX2hlaWdodCkpO1xuXG4gICAgLy8gY2hlY2sgYmxlbmQgbW9kZVxuICAgIHZhciBjb21wb3NpdGVPcGVyYXRpb24gPSByZW5kZXJlci5ibGVuZE1vZGVzW3RoaXMuYmxlbmRNb2RlXTtcbiAgICBpZiAoY29tcG9zaXRlT3BlcmF0aW9uICE9PSByZW5kZXJlci5jb250ZXh0Lmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbilcbiAgICB7XG4gICAgICAgIGNvbnRleHQuZ2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uID0gY29tcG9zaXRlT3BlcmF0aW9uO1xuICAgIH1cblxuICAgIC8vIGZpbGwgdGhlIHBhdHRlcm4hXG4gICAgY29udGV4dC5maWxsU3R5bGUgPSB0aGlzLl9jYW52YXNQYXR0ZXJuO1xuICAgIGNvbnRleHQuZmlsbFJlY3QoLW1vZFgsXG4gICAgICAgICAgICAgICAgICAgICAtbW9kWSxcbiAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3dpZHRoIC8gdGhpcy50aWxlU2NhbGUueCxcbiAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2hlaWdodCAvIHRoaXMudGlsZVNjYWxlLnkpO1xuXG5cbiAgICAvL1RPRE8gLSBwcmV0dHkgc3VyZSB0aGlzIGNhbiBiZSBkZWxldGVkLi4uXG4gICAgLy9jb250ZXh0LnRyYW5zbGF0ZSgtdGhpcy50aWxlUG9zaXRpb24ueCArICh0aGlzLmFuY2hvci54ICogdGhpcy5fd2lkdGgpLCAtdGhpcy50aWxlUG9zaXRpb24ueSArICh0aGlzLmFuY2hvci55ICogdGhpcy5faGVpZ2h0KSk7XG4gICAgLy9jb250ZXh0LnNjYWxlKDEgLyB0aGlzLnRpbGVTY2FsZS54LCAxIC8gdGhpcy50aWxlU2NhbGUueSk7XG59O1xuXG5cbi8qKlxuICogUmV0dXJucyB0aGUgZnJhbWluZyByZWN0YW5nbGUgb2YgdGhlIHNwcml0ZSBhcyBhIFJlY3RhbmdsZSBvYmplY3RcbipcbiAqIEByZXR1cm4ge1BJWEkuUmVjdGFuZ2xlfSB0aGUgZnJhbWluZyByZWN0YW5nbGVcbiAqL1xuVGlsaW5nU3ByaXRlLnByb3RvdHlwZS5nZXRCb3VuZHMgPSBmdW5jdGlvbiAoKVxue1xuICAgIHZhciB3aWR0aCA9IHRoaXMuX3dpZHRoO1xuICAgIHZhciBoZWlnaHQgPSB0aGlzLl9oZWlnaHQ7XG5cbiAgICB2YXIgdzAgPSB3aWR0aCAqICgxLXRoaXMuYW5jaG9yLngpO1xuICAgIHZhciB3MSA9IHdpZHRoICogLXRoaXMuYW5jaG9yLng7XG5cbiAgICB2YXIgaDAgPSBoZWlnaHQgKiAoMS10aGlzLmFuY2hvci55KTtcbiAgICB2YXIgaDEgPSBoZWlnaHQgKiAtdGhpcy5hbmNob3IueTtcblxuICAgIHZhciB3b3JsZFRyYW5zZm9ybSA9IHRoaXMud29ybGRUcmFuc2Zvcm07XG5cbiAgICB2YXIgYSA9IHdvcmxkVHJhbnNmb3JtLmE7XG4gICAgdmFyIGIgPSB3b3JsZFRyYW5zZm9ybS5iO1xuICAgIHZhciBjID0gd29ybGRUcmFuc2Zvcm0uYztcbiAgICB2YXIgZCA9IHdvcmxkVHJhbnNmb3JtLmQ7XG4gICAgdmFyIHR4ID0gd29ybGRUcmFuc2Zvcm0udHg7XG4gICAgdmFyIHR5ID0gd29ybGRUcmFuc2Zvcm0udHk7XG5cbiAgICB2YXIgeDEgPSBhICogdzEgKyBjICogaDEgKyB0eDtcbiAgICB2YXIgeTEgPSBkICogaDEgKyBiICogdzEgKyB0eTtcblxuICAgIHZhciB4MiA9IGEgKiB3MCArIGMgKiBoMSArIHR4O1xuICAgIHZhciB5MiA9IGQgKiBoMSArIGIgKiB3MCArIHR5O1xuXG4gICAgdmFyIHgzID0gYSAqIHcwICsgYyAqIGgwICsgdHg7XG4gICAgdmFyIHkzID0gZCAqIGgwICsgYiAqIHcwICsgdHk7XG5cbiAgICB2YXIgeDQgPSAgYSAqIHcxICsgYyAqIGgwICsgdHg7XG4gICAgdmFyIHk0ID0gIGQgKiBoMCArIGIgKiB3MSArIHR5O1xuXG4gICAgdmFyIG1pblgsXG4gICAgICAgIG1heFgsXG4gICAgICAgIG1pblksXG4gICAgICAgIG1heFk7XG5cbiAgICBtaW5YID0geDE7XG4gICAgbWluWCA9IHgyIDwgbWluWCA/IHgyIDogbWluWDtcbiAgICBtaW5YID0geDMgPCBtaW5YID8geDMgOiBtaW5YO1xuICAgIG1pblggPSB4NCA8IG1pblggPyB4NCA6IG1pblg7XG5cbiAgICBtaW5ZID0geTE7XG4gICAgbWluWSA9IHkyIDwgbWluWSA/IHkyIDogbWluWTtcbiAgICBtaW5ZID0geTMgPCBtaW5ZID8geTMgOiBtaW5ZO1xuICAgIG1pblkgPSB5NCA8IG1pblkgPyB5NCA6IG1pblk7XG5cbiAgICBtYXhYID0geDE7XG4gICAgbWF4WCA9IHgyID4gbWF4WCA/IHgyIDogbWF4WDtcbiAgICBtYXhYID0geDMgPiBtYXhYID8geDMgOiBtYXhYO1xuICAgIG1heFggPSB4NCA+IG1heFggPyB4NCA6IG1heFg7XG5cbiAgICBtYXhZID0geTE7XG4gICAgbWF4WSA9IHkyID4gbWF4WSA/IHkyIDogbWF4WTtcbiAgICBtYXhZID0geTMgPiBtYXhZID8geTMgOiBtYXhZO1xuICAgIG1heFkgPSB5NCA+IG1heFkgPyB5NCA6IG1heFk7XG5cbiAgICB2YXIgYm91bmRzID0gdGhpcy5fYm91bmRzO1xuXG4gICAgYm91bmRzLnggPSBtaW5YO1xuICAgIGJvdW5kcy53aWR0aCA9IG1heFggLSBtaW5YO1xuXG4gICAgYm91bmRzLnkgPSBtaW5ZO1xuICAgIGJvdW5kcy5oZWlnaHQgPSBtYXhZIC0gbWluWTtcblxuICAgIC8vIHN0b3JlIGEgcmVmZXJlbmNlIHNvIHRoYXQgaWYgdGhpcyBmdW5jdGlvbiBnZXRzIGNhbGxlZCBhZ2FpbiBpbiB0aGUgcmVuZGVyIGN5Y2xlIHdlIGRvIG5vdCBoYXZlIHRvIHJlY2FsY3VsYXRlXG4gICAgdGhpcy5fY3VycmVudEJvdW5kcyA9IGJvdW5kcztcblxuICAgIHJldHVybiBib3VuZHM7XG59O1xuXG4vKipcbiAqIENoZWNrcyBpZiBhIHBvaW50IGlzIGluc2lkZSB0aGlzIHRpbGluZyBzcHJpdGVcbiAqIEBwYXJhbSBwb2ludCB7UElYSS5Qb2ludH0gdGhlIHBvaW50IHRvIGNoZWNrXG4gKi9cblRpbGluZ1Nwcml0ZS5wcm90b3R5cGUuY29udGFpbnNQb2ludCA9IGZ1bmN0aW9uKCBwb2ludCApXG57XG4gICAgdGhpcy53b3JsZFRyYW5zZm9ybS5hcHBseUludmVyc2UocG9pbnQsICB0ZW1wUG9pbnQpO1xuXG4gICAgdmFyIHdpZHRoID0gdGhpcy5fd2lkdGg7XG4gICAgdmFyIGhlaWdodCA9IHRoaXMuX2hlaWdodDtcbiAgICB2YXIgeDEgPSAtd2lkdGggKiB0aGlzLmFuY2hvci54O1xuICAgIHZhciB5MTtcblxuICAgIGlmICggdGVtcFBvaW50LnggPiB4MSAmJiB0ZW1wUG9pbnQueCA8IHgxICsgd2lkdGggKVxuICAgIHtcbiAgICAgICAgeTEgPSAtaGVpZ2h0ICogdGhpcy5hbmNob3IueTtcblxuICAgICAgICBpZiAoIHRlbXBQb2ludC55ID4geTEgJiYgdGVtcFBvaW50LnkgPCB5MSArIGhlaWdodCApXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xufTtcblxuLyoqXG4gKiBEZXN0cm95cyB0aGlzIHRpbGluZyBzcHJpdGVcbiAqXG4gKi9cblRpbGluZ1Nwcml0ZS5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uICgpIHtcbiAgICBjb3JlLlNwcml0ZS5wcm90b3R5cGUuZGVzdHJveS5jYWxsKHRoaXMpO1xuXG4gICAgdGhpcy50aWxlU2NhbGUgPSBudWxsO1xuICAgIHRoaXMuX3RpbGVTY2FsZU9mZnNldCA9IG51bGw7XG4gICAgdGhpcy50aWxlUG9zaXRpb24gPSBudWxsO1xuXG4gICAgdGhpcy5fdXZzID0gbnVsbDtcbn07XG5cbi8qKlxuICogSGVscGVyIGZ1bmN0aW9uIHRoYXQgY3JlYXRlcyBhIHRpbGluZyBzcHJpdGUgdGhhdCB3aWxsIHVzZSBhIHRleHR1cmUgZnJvbSB0aGUgVGV4dHVyZUNhY2hlIGJhc2VkIG9uIHRoZSBmcmFtZUlkXG4gKiBUaGUgZnJhbWUgaWRzIGFyZSBjcmVhdGVkIHdoZW4gYSBUZXh0dXJlIHBhY2tlciBmaWxlIGhhcyBiZWVuIGxvYWRlZFxuICpcbiAqIEBzdGF0aWNcbiAqIEBwYXJhbSBmcmFtZUlkIHtzdHJpbmd9IFRoZSBmcmFtZSBJZCBvZiB0aGUgdGV4dHVyZSBpbiB0aGUgY2FjaGVcbiAqIEByZXR1cm4ge1BJWEkuZXh0cmFzLlRpbGluZ1Nwcml0ZX0gQSBuZXcgVGlsaW5nU3ByaXRlIHVzaW5nIGEgdGV4dHVyZSBmcm9tIHRoZSB0ZXh0dXJlIGNhY2hlIG1hdGNoaW5nIHRoZSBmcmFtZUlkXG4gKiBAcGFyYW0gd2lkdGgge251bWJlcn0gIHRoZSB3aWR0aCBvZiB0aGUgdGlsaW5nIHNwcml0ZVxuICogQHBhcmFtIGhlaWdodCB7bnVtYmVyfSB0aGUgaGVpZ2h0IG9mIHRoZSB0aWxpbmcgc3ByaXRlXG4gKi9cblRpbGluZ1Nwcml0ZS5mcm9tRnJhbWUgPSBmdW5jdGlvbiAoZnJhbWVJZCx3aWR0aCxoZWlnaHQpXG57XG4gICAgdmFyIHRleHR1cmUgPSBjb3JlLnV0aWxzLlRleHR1cmVDYWNoZVtmcmFtZUlkXTtcblxuICAgIGlmICghdGV4dHVyZSlcbiAgICB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignVGhlIGZyYW1lSWQgXCInICsgZnJhbWVJZCArICdcIiBkb2VzIG5vdCBleGlzdCBpbiB0aGUgdGV4dHVyZSBjYWNoZSAnICsgdGhpcyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBUaWxpbmdTcHJpdGUodGV4dHVyZSx3aWR0aCxoZWlnaHQpO1xufTtcblxuLyoqXG4gKiBIZWxwZXIgZnVuY3Rpb24gdGhhdCBjcmVhdGVzIGEgc3ByaXRlIHRoYXQgd2lsbCBjb250YWluIGEgdGV4dHVyZSBiYXNlZCBvbiBhbiBpbWFnZSB1cmxcbiAqIElmIHRoZSBpbWFnZSBpcyBub3QgaW4gdGhlIHRleHR1cmUgY2FjaGUgaXQgd2lsbCBiZSBsb2FkZWRcbiAqXG4gKiBAc3RhdGljXG4gKiBAcGFyYW0gaW1hZ2VJZCB7c3RyaW5nfSBUaGUgaW1hZ2UgdXJsIG9mIHRoZSB0ZXh0dXJlXG4gKiBAcGFyYW0gd2lkdGgge251bWJlcn0gIHRoZSB3aWR0aCBvZiB0aGUgdGlsaW5nIHNwcml0ZVxuICogQHBhcmFtIGhlaWdodCB7bnVtYmVyfSB0aGUgaGVpZ2h0IG9mIHRoZSB0aWxpbmcgc3ByaXRlXG4gKiBAcGFyYW0gW2Nyb3Nzb3JpZ2luPShhdXRvKV0ge2Jvb2xlYW59IGlmIHlvdSB3YW50IHRvIHNwZWNpZnkgdGhlIGNyb3NzLW9yaWdpbiBwYXJhbWV0ZXJcbiAqIEBwYXJhbSBbc2NhbGVNb2RlPVBJWEkuU0NBTEVfTU9ERVMuREVGQVVMVF0ge251bWJlcn0gaWYgeW91IHdhbnQgdG8gc3BlY2lmeSB0aGUgc2NhbGUgbW9kZSwgc2VlIHtAbGluayBQSVhJLlNDQUxFX01PREVTfSBmb3IgcG9zc2libGUgdmFsdWVzXG4gKiBAcmV0dXJuIHtQSVhJLmV4dHJhcy5UaWxpbmdTcHJpdGV9IEEgbmV3IFRpbGluZ1Nwcml0ZSB1c2luZyBhIHRleHR1cmUgZnJvbSB0aGUgdGV4dHVyZSBjYWNoZSBtYXRjaGluZyB0aGUgaW1hZ2UgaWRcbiAqL1xuVGlsaW5nU3ByaXRlLmZyb21JbWFnZSA9IGZ1bmN0aW9uIChpbWFnZUlkLCB3aWR0aCwgaGVpZ2h0LCBjcm9zc29yaWdpbiwgc2NhbGVNb2RlKVxue1xuICAgIHJldHVybiBuZXcgVGlsaW5nU3ByaXRlKGNvcmUuVGV4dHVyZS5mcm9tSW1hZ2UoaW1hZ2VJZCwgY3Jvc3NvcmlnaW4sIHNjYWxlTW9kZSksd2lkdGgsaGVpZ2h0KTtcbn07XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uL2NvcmUnKSxcbiAgICBEaXNwbGF5T2JqZWN0ID0gY29yZS5EaXNwbGF5T2JqZWN0LFxuICAgIF90ZW1wTWF0cml4ID0gbmV3IGNvcmUuTWF0cml4KCk7XG5cbkRpc3BsYXlPYmplY3QucHJvdG90eXBlLl9jYWNoZUFzQml0bWFwID0gZmFsc2U7XG5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS5fb3JpZ2luYWxSZW5kZXJXZWJHTCA9IG51bGw7XG5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS5fb3JpZ2luYWxSZW5kZXJDYW52YXMgPSBudWxsO1xuXG5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS5fb3JpZ2luYWxVcGRhdGVUcmFuc2Zvcm0gPSBudWxsO1xuRGlzcGxheU9iamVjdC5wcm90b3R5cGUuX29yaWdpbmFsSGl0VGVzdCA9IG51bGw7XG5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS5fb3JpZ2luYWxEZXN0cm95ID0gbnVsbDtcbkRpc3BsYXlPYmplY3QucHJvdG90eXBlLl9jYWNoZWRTcHJpdGUgPSBudWxsO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhEaXNwbGF5T2JqZWN0LnByb3RvdHlwZSwge1xuXG4gICAgLyoqXG4gICAgICogU2V0IHRoaXMgdG8gdHJ1ZSBpZiB5b3Ugd2FudCB0aGlzIGRpc3BsYXkgb2JqZWN0IHRvIGJlIGNhY2hlZCBhcyBhIGJpdG1hcC5cbiAgICAgKiBUaGlzIGJhc2ljYWxseSB0YWtlcyBhIHNuYXAgc2hvdCBvZiB0aGUgZGlzcGxheSBvYmplY3QgYXMgaXQgaXMgYXQgdGhhdCBtb21lbnQuIEl0IGNhbiBwcm92aWRlIGEgcGVyZm9ybWFuY2UgYmVuZWZpdCBmb3IgY29tcGxleCBzdGF0aWMgZGlzcGxheU9iamVjdHMuXG4gICAgICogVG8gcmVtb3ZlIHNpbXBseSBzZXQgdGhpcyBwcm9wZXJ0eSB0byAnZmFsc2UnXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLkRpc3BsYXlPYmplY3QjXG4gICAgICovXG4gICAgY2FjaGVBc0JpdG1hcDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9jYWNoZUFzQml0bWFwO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgaWYgKHRoaXMuX2NhY2hlQXNCaXRtYXAgPT09IHZhbHVlKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5fY2FjaGVBc0JpdG1hcCA9IHZhbHVlO1xuXG4gICAgICAgICAgICBpZiAodmFsdWUpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdGhpcy5fb3JpZ2luYWxSZW5kZXJXZWJHTCA9IHRoaXMucmVuZGVyV2ViR0w7XG4gICAgICAgICAgICAgICAgdGhpcy5fb3JpZ2luYWxSZW5kZXJDYW52YXMgPSB0aGlzLnJlbmRlckNhbnZhcztcblxuICAgICAgICAgICAgICAgIHRoaXMuX29yaWdpbmFsVXBkYXRlVHJhbnNmb3JtID0gdGhpcy51cGRhdGVUcmFuc2Zvcm07XG4gICAgICAgICAgICAgICAgdGhpcy5fb3JpZ2luYWxHZXRCb3VuZHMgPSB0aGlzLmdldEJvdW5kcztcblxuICAgICAgICAgICAgICAgIHRoaXMuX29yaWdpbmFsRGVzdHJveSA9IHRoaXMuZGVzdHJveTtcblxuICAgICAgICAgICAgICAgIHRoaXMuX29yaWdpbmFsQ29udGFpbnNQb2ludCA9IHRoaXMuY29udGFpbnNQb2ludDtcblxuICAgICAgICAgICAgICAgIHRoaXMucmVuZGVyV2ViR0wgPSB0aGlzLl9yZW5kZXJDYWNoZWRXZWJHTDtcbiAgICAgICAgICAgICAgICB0aGlzLnJlbmRlckNhbnZhcyA9IHRoaXMuX3JlbmRlckNhY2hlZENhbnZhcztcblxuICAgICAgICAgICAgICAgIHRoaXMuZGVzdHJveSA9IHRoaXMuX2NhY2hlQXNCaXRtYXBEZXN0cm95O1xuXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuX2NhY2hlZFNwcml0ZSlcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2Rlc3Ryb3lDYWNoZWREaXNwbGF5T2JqZWN0KCk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgdGhpcy5yZW5kZXJXZWJHTCA9IHRoaXMuX29yaWdpbmFsUmVuZGVyV2ViR0w7XG4gICAgICAgICAgICAgICAgdGhpcy5yZW5kZXJDYW52YXMgPSB0aGlzLl9vcmlnaW5hbFJlbmRlckNhbnZhcztcbiAgICAgICAgICAgICAgICB0aGlzLmdldEJvdW5kcyA9IHRoaXMuX29yaWdpbmFsR2V0Qm91bmRzO1xuXG4gICAgICAgICAgICAgICAgdGhpcy5kZXN0cm95ID0gdGhpcy5fb3JpZ2luYWxEZXN0cm95O1xuXG4gICAgICAgICAgICAgICAgdGhpcy51cGRhdGVUcmFuc2Zvcm0gPSB0aGlzLl9vcmlnaW5hbFVwZGF0ZVRyYW5zZm9ybTtcbiAgICAgICAgICAgICAgICB0aGlzLmNvbnRhaW5zUG9pbnQgPSB0aGlzLl9vcmlnaW5hbENvbnRhaW5zUG9pbnQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG59KTtcbi8qKlxuKiBSZW5kZXJzIGEgY2FjaGVkIHZlcnNpb24gb2YgdGhlIHNwcml0ZSB3aXRoIFdlYkdMXG4qXG4qIEBwYXJhbSByZW5kZXJlciB7UElYSS5XZWJHTFJlbmRlcmVyfSB0aGUgV2ViR0wgcmVuZGVyZXJcbiogQHByaXZhdGVcbiovXG5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS5fcmVuZGVyQ2FjaGVkV2ViR0wgPSBmdW5jdGlvbiAocmVuZGVyZXIpXG57XG4gICAgaWYgKCF0aGlzLnZpc2libGUgfHwgdGhpcy53b3JsZEFscGhhIDw9IDAgfHwgIXRoaXMucmVuZGVyYWJsZSlcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLl9pbml0Q2FjaGVkRGlzcGxheU9iamVjdCggcmVuZGVyZXIgKTtcblxuICAgIHRoaXMuX2NhY2hlZFNwcml0ZS53b3JsZEFscGhhID0gdGhpcy53b3JsZEFscGhhO1xuXG4gICAgcmVuZGVyZXIuc2V0T2JqZWN0UmVuZGVyZXIocmVuZGVyZXIucGx1Z2lucy5zcHJpdGUpO1xuICAgIHJlbmRlcmVyLnBsdWdpbnMuc3ByaXRlLnJlbmRlciggdGhpcy5fY2FjaGVkU3ByaXRlICk7XG59O1xuXG4vKipcbiogUHJlcGFyZXMgdGhlIFdlYkdMIHJlbmRlcmVyIHRvIGNhY2hlIHRoZSBzcHJpdGVcbipcbiogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLldlYkdMUmVuZGVyZXJ9IHRoZSBXZWJHTCByZW5kZXJlclxuKiBAcHJpdmF0ZVxuKi9cbkRpc3BsYXlPYmplY3QucHJvdG90eXBlLl9pbml0Q2FjaGVkRGlzcGxheU9iamVjdCA9IGZ1bmN0aW9uIChyZW5kZXJlcilcbntcbiAgICBpZih0aGlzLl9jYWNoZWRTcHJpdGUpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gZmlyc3Qgd2UgZmx1c2ggYW55dGhpbmcgbGVmdCBpbiB0aGUgcmVuZGVyZXIgKG90aGVyd2lzZSBpdCB3b3VsZCBnZXQgcmVuZGVyZWQgdG8gdGhlIGNhY2hlZCB0ZXh0dXJlKVxuICAgIHJlbmRlcmVyLmN1cnJlbnRSZW5kZXJlci5mbHVzaCgpO1xuICAgIC8vdGhpcy5maWx0ZXJzPSBbXTtcbiAgICAvLyBuZXh0IHdlIGZpbmQgdGhlIGRpbWVuc2lvbnMgb2YgdGhlIHVudHJhbnNmb3JtZWQgb2JqZWN0XG4gICAgLy8gdGhpcyBmdW5jdGlvbiBhbHNvIGNhbGxzIHVwZGF0ZXRyYW5zZm9ybSBvbiBhbGwgaXRzIGNoaWxkcmVuIGFzIHBhcnQgb2YgdGhlIG1lYXN1cmluZy4gVGhpcyBtZWFucyB3ZSBkb24ndCBuZWVkIHRvIHVwZGF0ZSB0aGUgdHJhbnNmb3JtIGFnYWluIGluIHRoaXMgZnVuY3Rpb25cbiAgICAvLyBUT0RPIHBhc3MgYW4gb2JqZWN0IHRvIGNsb25lIHRvbz8gc2F2ZXMgaGF2aW5nIHRvIGNyZWF0ZSBhIG5ldyBvbmUgZWFjaCB0aW1lIVxuICAgIHZhciBib3VuZHMgPSB0aGlzLmdldExvY2FsQm91bmRzKCkuY2xvbmUoKTtcblxuICAgIC8vIGFkZCBzb21lIHBhZGRpbmchXG4gICAgaWYodGhpcy5fZmlsdGVycylcbiAgICB7XG4gICAgICAgIHZhciBwYWRkaW5nID0gdGhpcy5fZmlsdGVyc1swXS5wYWRkaW5nO1xuICAgICAgICBib3VuZHMueCAtPSBwYWRkaW5nO1xuICAgICAgICBib3VuZHMueSAtPSBwYWRkaW5nO1xuXG4gICAgICAgIGJvdW5kcy53aWR0aCArPSBwYWRkaW5nICogMjtcbiAgICAgICAgYm91bmRzLmhlaWdodCArPSBwYWRkaW5nICogMjtcbiAgICB9XG5cbiAgICAvLyBmb3Igbm93IHdlIGNhY2hlIHRoZSBjdXJyZW50IHJlbmRlclRhcmdldCB0aGF0IHRoZSB3ZWJHTCByZW5kZXJlciBpcyBjdXJyZW50bHkgdXNpbmcuXG4gICAgLy8gdGhpcyBjb3VsZCBiZSBtb3JlIGVsZWdlbnQuLlxuICAgIHZhciBjYWNoZWRSZW5kZXJUYXJnZXQgPSByZW5kZXJlci5jdXJyZW50UmVuZGVyVGFyZ2V0O1xuICAgIC8vIFdlIGFsc28gc3RvcmUgdGhlIGZpbHRlciBzdGFjayAtIEkgd2lsbCBkZWZpbml0ZWx5IGxvb2sgdG8gY2hhbmdlIGhvdyB0aGlzIHdvcmtzIGEgbGl0dGxlIGxhdGVyIGRvd24gdGhlIGxpbmUuXG4gICAgdmFyIHN0YWNrID0gcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5maWx0ZXJTdGFjaztcblxuICAgIC8vIHRoaXMgcmVuZGVyVGV4dHVyZSB3aWxsIGJlIHVzZWQgdG8gc3RvcmUgdGhlIGNhY2hlZCBEaXNwbGF5T2JqZWN0XG4gICAgdmFyIHJlbmRlclRleHR1cmUgPSBuZXcgY29yZS5SZW5kZXJUZXh0dXJlKHJlbmRlcmVyLCBib3VuZHMud2lkdGggfCAwLCBib3VuZHMuaGVpZ2h0IHwgMCk7XG5cbiAgICAvLyBuZWVkIHRvIHNldCAvL1xuICAgIHZhciBtID0gX3RlbXBNYXRyaXg7XG5cbiAgICBtLnR4ID0gLWJvdW5kcy54O1xuICAgIG0udHkgPSAtYm91bmRzLnk7XG5cblxuXG4gICAgLy8gc2V0IGFsbCBwcm9wZXJ0aWVzIHRvIHRoZXJlIG9yaWdpbmFsIHNvIHdlIGNhbiByZW5kZXIgdG8gYSB0ZXh0dXJlXG4gICAgdGhpcy5yZW5kZXJXZWJHTCA9IHRoaXMuX29yaWdpbmFsUmVuZGVyV2ViR0w7XG5cbiAgICByZW5kZXJUZXh0dXJlLnJlbmRlcih0aGlzLCBtLCB0cnVlLCB0cnVlKTtcblxuICAgIC8vIG5vdyByZXN0b3JlIHRoZSBzdGF0ZSBiZSBzZXR0aW5nIHRoZSBuZXcgcHJvcGVydGllc1xuICAgIHJlbmRlcmVyLnNldFJlbmRlclRhcmdldChjYWNoZWRSZW5kZXJUYXJnZXQpO1xuICAgIHJlbmRlcmVyLmZpbHRlck1hbmFnZXIuZmlsdGVyU3RhY2sgPSBzdGFjaztcblxuICAgIHRoaXMucmVuZGVyV2ViR0wgICAgID0gdGhpcy5fcmVuZGVyQ2FjaGVkV2ViR0w7XG4gICAgdGhpcy51cGRhdGVUcmFuc2Zvcm0gPSB0aGlzLmRpc3BsYXlPYmplY3RVcGRhdGVUcmFuc2Zvcm07XG4gICAgdGhpcy5nZXRCb3VuZHMgICAgICAgPSB0aGlzLl9nZXRDYWNoZWRCb3VuZHM7XG5cblxuICAgIC8vIGNyZWF0ZSBvdXIgY2FjaGVkIHNwcml0ZVxuICAgIHRoaXMuX2NhY2hlZFNwcml0ZSA9IG5ldyBjb3JlLlNwcml0ZShyZW5kZXJUZXh0dXJlKTtcbiAgICB0aGlzLl9jYWNoZWRTcHJpdGUud29ybGRUcmFuc2Zvcm0gPSB0aGlzLndvcmxkVHJhbnNmb3JtO1xuICAgIHRoaXMuX2NhY2hlZFNwcml0ZS5hbmNob3IueCA9IC0oIGJvdW5kcy54IC8gYm91bmRzLndpZHRoICk7XG4gICAgdGhpcy5fY2FjaGVkU3ByaXRlLmFuY2hvci55ID0gLSggYm91bmRzLnkgLyBib3VuZHMuaGVpZ2h0ICk7XG5cbiAgICAvLyByZXN0b3JlIHRoZSB0cmFuc2Zvcm0gb2YgdGhlIGNhY2hlZCBzcHJpdGUgdG8gYXZvaWQgdGhlIG5hc3R5IGZsaWNrZXIuLlxuICAgIHRoaXMudXBkYXRlVHJhbnNmb3JtKCk7XG5cbiAgICAvLyBtYXAgdGhlIGhpdCB0ZXN0Li5cbiAgICB0aGlzLmNvbnRhaW5zUG9pbnQgPSB0aGlzLl9jYWNoZWRTcHJpdGUuY29udGFpbnNQb2ludC5iaW5kKHRoaXMuX2NhY2hlZFNwcml0ZSk7XG59O1xuXG4vKipcbiogUmVuZGVycyBhIGNhY2hlZCB2ZXJzaW9uIG9mIHRoZSBzcHJpdGUgd2l0aCBjYW52YXNcbipcbiogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLkNhbnZhc1JlbmRlcmVyfSB0aGUgQ2FudmFzIHJlbmRlcmVyXG4qIEBwcml2YXRlXG4qL1xuRGlzcGxheU9iamVjdC5wcm90b3R5cGUuX3JlbmRlckNhY2hlZENhbnZhcyA9IGZ1bmN0aW9uIChyZW5kZXJlcilcbntcbiAgICBpZiAoIXRoaXMudmlzaWJsZSB8fCB0aGlzLndvcmxkQWxwaGEgPD0gMCB8fCAhdGhpcy5yZW5kZXJhYmxlKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuX2luaXRDYWNoZWREaXNwbGF5T2JqZWN0Q2FudmFzKCByZW5kZXJlciApO1xuXG4gICAgdGhpcy5fY2FjaGVkU3ByaXRlLndvcmxkQWxwaGEgPSB0aGlzLndvcmxkQWxwaGE7XG5cbiAgICB0aGlzLl9jYWNoZWRTcHJpdGUucmVuZGVyQ2FudmFzKHJlbmRlcmVyKTtcbn07XG5cbi8vVE9ETyB0aGlzIGNhbiBiZSB0aGUgc2FtZSBhcyB0aGUgd2ViR0wgdmVyaXNvbi4uIHdpbGwgbmVlZCB0byBkbyBhIGxpdHRsZSB0d2Vha2luZyBmaXJzdCB0aG91Z2guLlxuLyoqXG4qIFByZXBhcmVzIHRoZSBDYW52YXMgcmVuZGVyZXIgdG8gY2FjaGUgdGhlIHNwcml0ZVxuKlxuKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuQ2FudmFzUmVuZGVyZXJ9IHRoZSBDYW52YXMgcmVuZGVyZXJcbiogQHByaXZhdGVcbiovXG5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS5faW5pdENhY2hlZERpc3BsYXlPYmplY3RDYW52YXMgPSBmdW5jdGlvbiAocmVuZGVyZXIpXG57XG4gICAgaWYodGhpcy5fY2FjaGVkU3ByaXRlKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vZ2V0IGJvdW5kcyBhY3R1YWxseSB0cmFuc2Zvcm1zIHRoZSBvYmplY3QgZm9yIHVzIGFscmVhZHkhXG4gICAgdmFyIGJvdW5kcyA9IHRoaXMuZ2V0TG9jYWxCb3VuZHMoKTtcblxuICAgIHZhciBjYWNoZWRSZW5kZXJUYXJnZXQgPSByZW5kZXJlci5jb250ZXh0O1xuXG4gICAgdmFyIHJlbmRlclRleHR1cmUgPSBuZXcgY29yZS5SZW5kZXJUZXh0dXJlKHJlbmRlcmVyLCBib3VuZHMud2lkdGggfCAwLCBib3VuZHMuaGVpZ2h0IHwgMCk7XG5cbiAgICAvLyBuZWVkIHRvIHNldCAvL1xuICAgIHZhciBtID0gX3RlbXBNYXRyaXg7XG5cbiAgICBtLnR4ID0gLWJvdW5kcy54O1xuICAgIG0udHkgPSAtYm91bmRzLnk7XG5cbiAgICAvLyBzZXQgYWxsIHByb3BlcnRpZXMgdG8gdGhlcmUgb3JpZ2luYWwgc28gd2UgY2FuIHJlbmRlciB0byBhIHRleHR1cmVcbiAgICB0aGlzLnJlbmRlckNhbnZhcyA9IHRoaXMuX29yaWdpbmFsUmVuZGVyQ2FudmFzO1xuXG4gICAgcmVuZGVyVGV4dHVyZS5yZW5kZXIodGhpcywgbSwgdHJ1ZSk7XG5cbiAgICAvLyBub3cgcmVzdG9yZSB0aGUgc3RhdGUgYmUgc2V0dGluZyB0aGUgbmV3IHByb3BlcnRpZXNcbiAgICByZW5kZXJlci5jb250ZXh0ID0gY2FjaGVkUmVuZGVyVGFyZ2V0O1xuXG4gICAgdGhpcy5yZW5kZXJDYW52YXMgPSB0aGlzLl9yZW5kZXJDYWNoZWRDYW52YXM7XG4gICAgdGhpcy51cGRhdGVUcmFuc2Zvcm0gPSB0aGlzLmRpc3BsYXlPYmplY3RVcGRhdGVUcmFuc2Zvcm07XG4gICAgdGhpcy5nZXRCb3VuZHMgID0gdGhpcy5fZ2V0Q2FjaGVkQm91bmRzO1xuXG5cbiAgICAvLyBjcmVhdGUgb3VyIGNhY2hlZCBzcHJpdGVcbiAgICB0aGlzLl9jYWNoZWRTcHJpdGUgPSBuZXcgY29yZS5TcHJpdGUocmVuZGVyVGV4dHVyZSk7XG4gICAgdGhpcy5fY2FjaGVkU3ByaXRlLndvcmxkVHJhbnNmb3JtID0gdGhpcy53b3JsZFRyYW5zZm9ybTtcbiAgICB0aGlzLl9jYWNoZWRTcHJpdGUuYW5jaG9yLnggPSAtKCBib3VuZHMueCAvIGJvdW5kcy53aWR0aCApO1xuICAgIHRoaXMuX2NhY2hlZFNwcml0ZS5hbmNob3IueSA9IC0oIGJvdW5kcy55IC8gYm91bmRzLmhlaWdodCApO1xuXG4gICAgdGhpcy51cGRhdGVUcmFuc2Zvcm0oKTtcblxuICAgIHRoaXMuY29udGFpbnNQb2ludCA9IHRoaXMuX2NhY2hlZFNwcml0ZS5jb250YWluc1BvaW50LmJpbmQodGhpcy5fY2FjaGVkU3ByaXRlKTtcbn07XG5cbi8qKlxuKiBDYWxjdWxhdGVzIHRoZSBib3VuZHMgb2YgdGhlIGNhY2hlZCBzcHJpdGVcbipcbiogQHByaXZhdGVcbiovXG5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS5fZ2V0Q2FjaGVkQm91bmRzID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLl9jYWNoZWRTcHJpdGUuX2N1cnJlbnRCb3VuZHMgPSBudWxsO1xuXG4gICAgcmV0dXJuIHRoaXMuX2NhY2hlZFNwcml0ZS5nZXRCb3VuZHMoKTtcbn07XG5cbi8qKlxuKiBEZXN0cm95cyB0aGUgY2FjaGVkIHNwcml0ZS5cbipcbiogQHByaXZhdGVcbiovXG5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS5fZGVzdHJveUNhY2hlZERpc3BsYXlPYmplY3QgPSBmdW5jdGlvbiAoKVxue1xuICAgIHRoaXMuX2NhY2hlZFNwcml0ZS5fdGV4dHVyZS5kZXN0cm95KCk7XG4gICAgdGhpcy5fY2FjaGVkU3ByaXRlID0gbnVsbDtcbn07XG5cbkRpc3BsYXlPYmplY3QucHJvdG90eXBlLl9jYWNoZUFzQml0bWFwRGVzdHJveSA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy5jYWNoZUFzQml0bWFwID0gZmFsc2U7XG4gICAgdGhpcy5fb3JpZ2luYWxEZXN0cm95KCk7XG59O1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi9jb3JlJyk7XG5cbi8qKlxuICogVGhlIGluc3RhbmNlIG5hbWUgb2YgdGhlIG9iamVjdC5cbiAqXG4gKiBAbWVtYmVyb2YgUElYSS5EaXNwbGF5T2JqZWN0I1xuICogQG1lbWJlciB7c3RyaW5nfVxuICovXG5jb3JlLkRpc3BsYXlPYmplY3QucHJvdG90eXBlLm5hbWUgPSBudWxsO1xuXG4vKipcbiogUmV0dXJucyB0aGUgZGlzcGxheSBvYmplY3QgaW4gdGhlIGNvbnRhaW5lclxuKlxuKiBAbWVtYmVyb2YgUElYSS5Db250YWluZXIjXG4qIEBwYXJhbSBuYW1lIHtzdHJpbmd9IGluc3RhbmNlIG5hbWVcbiogQHJldHVybiB7UElYSS5EaXNwbGF5T2JqZWN0fVxuKi9cbmNvcmUuQ29udGFpbmVyLnByb3RvdHlwZS5nZXRDaGlsZEJ5TmFtZSA9IGZ1bmN0aW9uIChuYW1lKVxue1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5jaGlsZHJlbi5sZW5ndGg7IGkrKylcbiAgICB7XG4gICAgICAgIGlmICh0aGlzLmNoaWxkcmVuW2ldLm5hbWUgPT09IG5hbWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmNoaWxkcmVuW2ldO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xufTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vY29yZScpO1xuXG4vKipcbiogUmV0dXJucyB0aGUgZ2xvYmFsIHBvc2l0aW9uIG9mIHRoZSBkaXNwbGF5T2JqZWN0XG4qXG4qIEBtZW1iZXJvZiBQSVhJLkRpc3BsYXlPYmplY3QjXG4qIEBwYXJhbSBwb2ludCB7UG9pbnR9IHRoZSBwb2ludCB0byB3cml0ZSB0aGUgZ2xvYmFsIHZhbHVlIHRvLiBJZiBudWxsIGEgbmV3IHBvaW50IHdpbGwgYmUgcmV0dXJuZWRcbiogQHJldHVybiB7UG9pbnR9XG4qL1xuY29yZS5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS5nZXRHbG9iYWxQb3NpdGlvbiA9IGZ1bmN0aW9uIChwb2ludClcbntcbiAgICBwb2ludCA9IHBvaW50IHx8IG5ldyBjb3JlLlBvaW50KCk7XG5cbiAgICBpZih0aGlzLnBhcmVudClcbiAgICB7XG4gICAgICAgIHRoaXMuZGlzcGxheU9iamVjdFVwZGF0ZVRyYW5zZm9ybSgpO1xuXG4gICAgICAgIHBvaW50LnggPSB0aGlzLndvcmxkVHJhbnNmb3JtLnR4O1xuICAgICAgICBwb2ludC55ID0gdGhpcy53b3JsZFRyYW5zZm9ybS50eTtcbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgcG9pbnQueCA9IHRoaXMucG9zaXRpb24ueDtcbiAgICAgICAgcG9pbnQueSA9IHRoaXMucG9zaXRpb24ueTtcbiAgICB9XG5cbiAgICByZXR1cm4gcG9pbnQ7XG59O1xuIiwiLyoqXG4gKiBAZmlsZSAgICAgICAgTWFpbiBleHBvcnQgb2YgdGhlIFBJWEkgZXh0cmFzIGxpYnJhcnlcbiAqIEBhdXRob3IgICAgICBNYXQgR3JvdmVzIDxtYXRAZ29vZGJveWRpZ2l0YWwuY29tPlxuICogQGNvcHlyaWdodCAgIDIwMTMtMjAxNSBHb29kQm95RGlnaXRhbFxuICogQGxpY2Vuc2UgICAgIHtAbGluayBodHRwczovL2dpdGh1Yi5jb20vcGl4aWpzL3BpeGkuanMvYmxvYi9tYXN0ZXIvTElDRU5TRXxNSVQgTGljZW5zZX1cbiAqL1xuXG5yZXF1aXJlKCcuL2NhY2hlQXNCaXRtYXAnKTtcbnJlcXVpcmUoJy4vZ2V0Q2hpbGRCeU5hbWUnKTtcbnJlcXVpcmUoJy4vZ2V0R2xvYmFsUG9zaXRpb24nKTtcblxuLyoqXG4gKiBAbmFtZXNwYWNlIFBJWEkuZXh0cmFzXG4gKi9cbm1vZHVsZS5leHBvcnRzID0ge1xuICAgIE1vdmllQ2xpcDogICAgICByZXF1aXJlKCcuL01vdmllQ2xpcCcpLFxuICAgIFRpbGluZ1Nwcml0ZTogICByZXF1aXJlKCcuL1RpbGluZ1Nwcml0ZScpLFxuICAgIEJpdG1hcFRleHQ6ICAgICByZXF1aXJlKCcuL0JpdG1hcFRleHQnKVxufTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vLi4vY29yZScpO1xuLy8gQHNlZSBodHRwczovL2dpdGh1Yi5jb20vc3Vic3RhY2svYnJmcy9pc3N1ZXMvMjVcblxuXG4vLyBUT0RPIChjZW5nbGVyKSAtIFRoZSBZIGlzIGZsaXBwZWQgaW4gdGhpcyBzaGFkZXIgZm9yIHNvbWUgcmVhc29uLlxuXG4vKipcbiAqIEBhdXRob3IgVmljbyBAdmljb2NvdGVhXG4gKiBvcmlnaW5hbCBzaGFkZXIgOiBodHRwczovL3d3dy5zaGFkZXJ0b3kuY29tL3ZpZXcvbHNzR0RqIGJ5IEBtb3ZBWDEzaFxuICovXG5cbi8qKlxuICogQW4gQVNDSUkgZmlsdGVyLlxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5BYnN0cmFjdEZpbHRlclxuICogQG1lbWJlcm9mIFBJWEkuZmlsdGVyc1xuICovXG5mdW5jdGlvbiBBc2NpaUZpbHRlcigpXG57XG4gICAgY29yZS5BYnN0cmFjdEZpbHRlci5jYWxsKHRoaXMsXG4gICAgICAgIC8vIHZlcnRleCBzaGFkZXJcbiAgICAgICAgbnVsbCxcbiAgICAgICAgLy8gZnJhZ21lbnQgc2hhZGVyXG4gICAgICAgIFwicHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XFxuXFxudW5pZm9ybSB2ZWM0IGRpbWVuc2lvbnM7XFxudW5pZm9ybSBmbG9hdCBwaXhlbFNpemU7XFxudW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXI7XFxuXFxuZmxvYXQgY2hhcmFjdGVyKGZsb2F0IG4sIHZlYzIgcClcXG57XFxuICAgIHAgPSBmbG9vcihwKnZlYzIoNC4wLCAtNC4wKSArIDIuNSk7XFxuICAgIGlmIChjbGFtcChwLngsIDAuMCwgNC4wKSA9PSBwLnggJiYgY2xhbXAocC55LCAwLjAsIDQuMCkgPT0gcC55KVxcbiAgICB7XFxuICAgICAgICBpZiAoaW50KG1vZChuL2V4cDIocC54ICsgNS4wKnAueSksIDIuMCkpID09IDEpIHJldHVybiAxLjA7XFxuICAgIH1cXG4gICAgcmV0dXJuIDAuMDtcXG59XFxuXFxudm9pZCBtYWluKClcXG57XFxuICAgIHZlYzIgdXYgPSBnbF9GcmFnQ29vcmQueHk7XFxuXFxuICAgIHZlYzMgY29sID0gdGV4dHVyZTJEKHVTYW1wbGVyLCBmbG9vciggdXYgLyBwaXhlbFNpemUgKSAqIHBpeGVsU2l6ZSAvIGRpbWVuc2lvbnMueHkpLnJnYjtcXG5cXG4gICAgZmxvYXQgZ3JheSA9IChjb2wuciArIGNvbC5nICsgY29sLmIpIC8gMy4wO1xcblxcbiAgICBmbG9hdCBuID0gIDY1NTM2LjA7ICAgICAgICAgICAgIC8vIC5cXG4gICAgaWYgKGdyYXkgPiAwLjIpIG4gPSA2NTYwMC4wOyAgICAvLyA6XFxuICAgIGlmIChncmF5ID4gMC4zKSBuID0gMzMyNzcyLjA7ICAgLy8gKlxcbiAgICBpZiAoZ3JheSA+IDAuNCkgbiA9IDE1MjU1MDg2LjA7IC8vIG9cXG4gICAgaWYgKGdyYXkgPiAwLjUpIG4gPSAyMzM4NTE2NC4wOyAvLyAmXFxuICAgIGlmIChncmF5ID4gMC42KSBuID0gMTUyNTIwMTQuMDsgLy8gOFxcbiAgICBpZiAoZ3JheSA+IDAuNykgbiA9IDEzMTk5NDUyLjA7IC8vIEBcXG4gICAgaWYgKGdyYXkgPiAwLjgpIG4gPSAxMTUxMjgxMC4wOyAvLyAjXFxuXFxuICAgIHZlYzIgcCA9IG1vZCggdXYgLyAoIHBpeGVsU2l6ZSAqIDAuNSApLCAyLjApIC0gdmVjMigxLjApO1xcbiAgICBjb2wgPSBjb2wgKiBjaGFyYWN0ZXIobiwgcCk7XFxuXFxuICAgIGdsX0ZyYWdDb2xvciA9IHZlYzQoY29sLCAxLjApO1xcbn1cXG5cIixcbiAgICAgICAgLy8gY3VzdG9tIHVuaWZvcm1zXG4gICAgICAgIHtcbiAgICAgICAgICAgIGRpbWVuc2lvbnM6IHsgdHlwZTogJzRmdicsIHZhbHVlOiBuZXcgRmxvYXQzMkFycmF5KFswLCAwLCAwLCAwXSkgfSxcbiAgICAgICAgICAgIHBpeGVsU2l6ZTogIHsgdHlwZTogJzFmJywgdmFsdWU6IDggfVxuICAgICAgICB9XG4gICAgKTtcbn1cblxuQXNjaWlGaWx0ZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShjb3JlLkFic3RyYWN0RmlsdGVyLnByb3RvdHlwZSk7XG5Bc2NpaUZpbHRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBBc2NpaUZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gQXNjaWlGaWx0ZXI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKEFzY2lpRmlsdGVyLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFRoZSBwaXhlbCBzaXplIHVzZWQgYnkgdGhlIGZpbHRlci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLkFzY2lpRmlsdGVyI1xuICAgICAqL1xuICAgIHNpemU6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy51bmlmb3Jtcy5waXhlbFNpemUudmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLnBpeGVsU2l6ZS52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfVxufSk7XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uLy4uL2NvcmUnKSxcbiAgICBCbHVyWEZpbHRlciA9IHJlcXVpcmUoJy4uL2JsdXIvQmx1clhGaWx0ZXInKSxcbiAgICBCbHVyWUZpbHRlciA9IHJlcXVpcmUoJy4uL2JsdXIvQmx1cllGaWx0ZXInKTtcblxuLyoqXG4gKiBUaGUgQmxvb21GaWx0ZXIgYXBwbGllcyBhIEdhdXNzaWFuIGJsdXIgdG8gYW4gb2JqZWN0LlxuICogVGhlIHN0cmVuZ3RoIG9mIHRoZSBibHVyIGNhbiBiZSBzZXQgZm9yIHgtIGFuZCB5LWF4aXMgc2VwYXJhdGVseS5cbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQWJzdHJhY3RGaWx0ZXJcbiAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnNcbiAqL1xuZnVuY3Rpb24gQmxvb21GaWx0ZXIoKVxue1xuICAgIGNvcmUuQWJzdHJhY3RGaWx0ZXIuY2FsbCh0aGlzKTtcblxuICAgIHRoaXMuYmx1clhGaWx0ZXIgPSBuZXcgQmx1clhGaWx0ZXIoKTtcbiAgICB0aGlzLmJsdXJZRmlsdGVyID0gbmV3IEJsdXJZRmlsdGVyKCk7XG5cbiAgICB0aGlzLmRlZmF1bHRGaWx0ZXIgPSBuZXcgY29yZS5BYnN0cmFjdEZpbHRlcigpO1xufVxuXG5CbG9vbUZpbHRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuQWJzdHJhY3RGaWx0ZXIucHJvdG90eXBlKTtcbkJsb29tRmlsdGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IEJsb29tRmlsdGVyO1xubW9kdWxlLmV4cG9ydHMgPSBCbG9vbUZpbHRlcjtcblxuQmxvb21GaWx0ZXIucHJvdG90eXBlLmFwcGx5RmlsdGVyID0gZnVuY3Rpb24gKHJlbmRlcmVyLCBpbnB1dCwgb3V0cHV0KVxue1xuICAgIHZhciByZW5kZXJUYXJnZXQgPSByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLmdldFJlbmRlclRhcmdldCh0cnVlKTtcblxuICAgIC8vVE9ETyAtIGNvcHlUZXhTdWJJbWFnZTJEIGNvdWxkIGJlIHVzZWQgaGVyZT9cbiAgICB0aGlzLmRlZmF1bHRGaWx0ZXIuYXBwbHlGaWx0ZXIocmVuZGVyZXIsIGlucHV0LCBvdXRwdXQpO1xuXG4gICAgdGhpcy5ibHVyWEZpbHRlci5hcHBseUZpbHRlcihyZW5kZXJlciwgaW5wdXQsIHJlbmRlclRhcmdldCk7XG5cbiAgICByZW5kZXJlci5ibGVuZE1vZGVNYW5hZ2VyLnNldEJsZW5kTW9kZShjb3JlLkJMRU5EX01PREVTLlNDUkVFTik7XG5cbiAgICB0aGlzLmJsdXJZRmlsdGVyLmFwcGx5RmlsdGVyKHJlbmRlcmVyLCByZW5kZXJUYXJnZXQsIG91dHB1dCk7XG5cbiAgICByZW5kZXJlci5ibGVuZE1vZGVNYW5hZ2VyLnNldEJsZW5kTW9kZShjb3JlLkJMRU5EX01PREVTLk5PUk1BTCk7XG5cbiAgICByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLnJldHVyblJlbmRlclRhcmdldChyZW5kZXJUYXJnZXQpO1xufTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoQmxvb21GaWx0ZXIucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgc3RyZW5ndGggb2YgYm90aCB0aGUgYmx1clggYW5kIGJsdXJZIHByb3BlcnRpZXMgc2ltdWx0YW5lb3VzbHlcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyT2YgUElYSS5maWx0ZXJzLkJsb29tRmlsdGVyI1xuICAgICAqIEBkZWZhdWx0IDJcbiAgICAgKi9cbiAgICBibHVyOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuYmx1clhGaWx0ZXIuYmx1cjtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuYmx1clhGaWx0ZXIuYmx1ciA9IHRoaXMuYmx1cllGaWx0ZXIuYmx1ciA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIHN0cmVuZ3RoIG9mIHRoZSBibHVyWCBwcm9wZXJ0eVxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJPZiBQSVhJLmZpbHRlcnMuQmxvb21GaWx0ZXIjXG4gICAgICogQGRlZmF1bHQgMlxuICAgICAqL1xuICAgIGJsdXJYOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuYmx1clhGaWx0ZXIuYmx1cjtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuYmx1clhGaWx0ZXIuYmx1ciA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIHN0cmVuZ3RoIG9mIHRoZSBibHVyWSBwcm9wZXJ0eVxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJPZiBQSVhJLmZpbHRlcnMuQmxvb21GaWx0ZXIjXG4gICAgICogQGRlZmF1bHQgMlxuICAgICAqL1xuICAgIGJsdXJZOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuYmx1cllGaWx0ZXIuYmx1cjtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuYmx1cllGaWx0ZXIuYmx1ciA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfVxufSk7XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uLy4uL2NvcmUnKTtcblxuXG4vKipcbiAqIFRoZSBCbHVyRGlyRmlsdGVyIGFwcGxpZXMgYSBHYXVzc2lhbiBibHVyIHRvd2FyZCBhIGRpcmVjdGlvbiB0byBhbiBvYmplY3QuXG4gKlxuICogQGNsYXNzXG4gKiBAcGFyYW0ge251bWJlcn0gZGlyWFxuICogQHBhcmFtIHtudW1iZXJ9IGRpcllcbiAqIEBleHRlbmRzIFBJWEkuQWJzdHJhY3RGaWx0ZXJcbiAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnNcbiAqL1xuZnVuY3Rpb24gQmx1ckRpckZpbHRlcihkaXJYLCBkaXJZKVxue1xuICAgIGNvcmUuQWJzdHJhY3RGaWx0ZXIuY2FsbCh0aGlzLFxuICAgICAgICAvLyB2ZXJ0ZXggc2hhZGVyXG4gICAgICAgIFwiYXR0cmlidXRlIHZlYzIgYVZlcnRleFBvc2l0aW9uO1xcbmF0dHJpYnV0ZSB2ZWMyIGFUZXh0dXJlQ29vcmQ7XFxuYXR0cmlidXRlIHZlYzQgYUNvbG9yO1xcblxcbnVuaWZvcm0gZmxvYXQgc3RyZW5ndGg7XFxudW5pZm9ybSBmbG9hdCBkaXJYO1xcbnVuaWZvcm0gZmxvYXQgZGlyWTtcXG51bmlmb3JtIG1hdDMgcHJvamVjdGlvbk1hdHJpeDtcXG5cXG52YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDtcXG52YXJ5aW5nIHZlYzQgdkNvbG9yO1xcbnZhcnlpbmcgdmVjMiB2Qmx1clRleENvb3Jkc1szXTtcXG5cXG52b2lkIG1haW4odm9pZClcXG57XFxuICAgIGdsX1Bvc2l0aW9uID0gdmVjNCgocHJvamVjdGlvbk1hdHJpeCAqIHZlYzMoKGFWZXJ0ZXhQb3NpdGlvbiksIDEuMCkpLnh5LCAwLjAsIDEuMCk7XFxuICAgIHZUZXh0dXJlQ29vcmQgPSBhVGV4dHVyZUNvb3JkO1xcblxcbiAgICB2Qmx1clRleENvb3Jkc1swXSA9IGFUZXh0dXJlQ29vcmQgKyB2ZWMyKCAoMC4wMDQgKiBzdHJlbmd0aCkgKiBkaXJYLCAoMC4wMDQgKiBzdHJlbmd0aCkgKiBkaXJZICk7XFxuICAgIHZCbHVyVGV4Q29vcmRzWzFdID0gYVRleHR1cmVDb29yZCArIHZlYzIoICgwLjAwOCAqIHN0cmVuZ3RoKSAqIGRpclgsICgwLjAwOCAqIHN0cmVuZ3RoKSAqIGRpclkgKTtcXG4gICAgdkJsdXJUZXhDb29yZHNbMl0gPSBhVGV4dHVyZUNvb3JkICsgdmVjMiggKDAuMDEyICogc3RyZW5ndGgpICogZGlyWCwgKDAuMDEyICogc3RyZW5ndGgpICogZGlyWSApO1xcblxcbiAgICB2Q29sb3IgPSB2ZWM0KGFDb2xvci5yZ2IgKiBhQ29sb3IuYSwgYUNvbG9yLmEpO1xcbn1cXG5cIixcbiAgICAgICAgLy8gZnJhZ21lbnQgc2hhZGVyXG4gICAgICAgIFwicHJlY2lzaW9uIGxvd3AgZmxvYXQ7XFxuXFxudmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7XFxudmFyeWluZyB2ZWMyIHZCbHVyVGV4Q29vcmRzWzNdO1xcbnZhcnlpbmcgdmVjNCB2Q29sb3I7XFxuXFxudW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXI7XFxuXFxudm9pZCBtYWluKHZvaWQpXFxue1xcbiAgICBnbF9GcmFnQ29sb3IgPSB2ZWM0KDAuMCk7XFxuXFxuICAgIGdsX0ZyYWdDb2xvciArPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZUZXh0dXJlQ29vcmQgICAgICkgKiAwLjM5ODk0MjI4MDQwMTQzMjc7XFxuICAgIGdsX0ZyYWdDb2xvciArPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZCbHVyVGV4Q29vcmRzWyAwXSkgKiAwLjI0MTk3MDcyNDUxOTE0NTQ7XFxuICAgIGdsX0ZyYWdDb2xvciArPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZCbHVyVGV4Q29vcmRzWyAxXSkgKiAwLjA1Mzk5MDk2NjUxMzE4OTg1O1xcbiAgICBnbF9GcmFnQ29sb3IgKz0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2Qmx1clRleENvb3Jkc1sgMl0pICogMC4wMDQ0MzE4NDg0MTE5MzgzNDE7XFxufVxcblwiLFxuICAgICAgICAvLyBzZXQgdGhlIHVuaWZvcm1zXG4gICAgICAgIHtcbiAgICAgICAgICAgIHN0cmVuZ3RoOiB7IHR5cGU6ICcxZicsIHZhbHVlOiAxIH0sXG4gICAgICAgICAgICBkaXJYOiB7IHR5cGU6ICcxZicsIHZhbHVlOiBkaXJYIHx8IDAgfSxcbiAgICAgICAgICAgIGRpclk6IHsgdHlwZTogJzFmJywgdmFsdWU6IGRpclkgfHwgMCB9XG4gICAgICAgIH1cbiAgICApO1xuXG4gICAgdGhpcy5kZWZhdWx0RmlsdGVyID0gbmV3IGNvcmUuQWJzdHJhY3RGaWx0ZXIoKTtcblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIG51bWJlciBvZiBwYXNzZXMgZm9yIGJsdXIuIE1vcmUgcGFzc2VzIG1lYW5zIGhpZ2hlciBxdWFpbGl0eSBibHVyaW5nLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDFcbiAgICAgKi9cbiAgICB0aGlzLnBhc3NlcyA9IDE7XG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBYIGRpcmVjdGlvbiBvZiB0aGUgYmx1clxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDBcbiAgICAgKi9cbiAgICB0aGlzLmRpclggPSBkaXJYIHx8IDA7XG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBZIGRpcmVjdGlvbiBvZiB0aGUgYmx1clxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDBcbiAgICAgKi9cbiAgICB0aGlzLmRpclkgPSBkaXJZIHx8IDA7XG5cbiAgICB0aGlzLnN0cmVuZ3RoID0gNDtcbn1cblxuQmx1ckRpckZpbHRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuQWJzdHJhY3RGaWx0ZXIucHJvdG90eXBlKTtcbkJsdXJEaXJGaWx0ZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gQmx1ckRpckZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gQmx1ckRpckZpbHRlcjtcblxuQmx1ckRpckZpbHRlci5wcm90b3R5cGUuYXBwbHlGaWx0ZXIgPSBmdW5jdGlvbiAocmVuZGVyZXIsIGlucHV0LCBvdXRwdXQsIGNsZWFyKSB7XG5cbiAgICB2YXIgc2hhZGVyID0gdGhpcy5nZXRTaGFkZXIocmVuZGVyZXIpO1xuXG4gICAgdGhpcy51bmlmb3Jtcy5zdHJlbmd0aC52YWx1ZSA9IHRoaXMuc3RyZW5ndGggLyA0IC8gdGhpcy5wYXNzZXMgKiAoaW5wdXQuZnJhbWUud2lkdGggLyBpbnB1dC5zaXplLndpZHRoKTtcblxuICAgIGlmICh0aGlzLnBhc3NlcyA9PT0gMSkge1xuICAgICAgICByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLmFwcGx5RmlsdGVyKHNoYWRlciwgaW5wdXQsIG91dHB1dCwgY2xlYXIpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHZhciByZW5kZXJUYXJnZXQgPSByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLmdldFJlbmRlclRhcmdldCh0cnVlKTtcblxuICAgICAgICByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLmFwcGx5RmlsdGVyKHNoYWRlciwgaW5wdXQsIHJlbmRlclRhcmdldCwgY2xlYXIpO1xuXG4gICAgICAgIGZvcih2YXIgaSA9IDA7IGkgPCB0aGlzLnBhc3Nlcy0yOyBpKyspXG4gICAgICAgIHtcbiAgICAgICAgICAgIC8vdGhpcy51bmlmb3Jtcy5zdHJlbmd0aC52YWx1ZSA9IHRoaXMuc3RyZW5ndGggLyA0IC8gKHRoaXMucGFzc2VzKyhpKjIpKSAqIChpbnB1dC5mcmFtZS53aWR0aCAvIGlucHV0LnNpemUud2lkdGgpO1xuICAgICAgICAgICAgcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5hcHBseUZpbHRlcihzaGFkZXIsIHJlbmRlclRhcmdldCwgcmVuZGVyVGFyZ2V0LCBjbGVhcik7XG4gICAgICAgIH1cblxuICAgICAgICByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLmFwcGx5RmlsdGVyKHNoYWRlciwgcmVuZGVyVGFyZ2V0LCBvdXRwdXQsIGNsZWFyKTtcblxuICAgICAgICByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLnJldHVyblJlbmRlclRhcmdldChyZW5kZXJUYXJnZXQpO1xuICAgIH1cbn07XG5cblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoQmx1ckRpckZpbHRlci5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBzdHJlbmd0aCBvZiBib3RoIHRoZSBibHVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuQmx1ckRpckZpbHRlciNcbiAgICAgKiBAZGVmYXVsdCAyXG4gICAgICovXG4gICAgYmx1cjoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnN0cmVuZ3RoO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5wYWRkaW5nID0gdmFsdWUgKiAwLjU7XG4gICAgICAgICAgICB0aGlzLnN0cmVuZ3RoID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9LFxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIFggZGlyZWN0aW9uIG9mIHRoZSBibHVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuQmx1cllGaWx0ZXIjXG4gICAgICogQGRlZmF1bHQgMFxuICAgICAqL1xuICAgIGRpclg6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5kaXJYO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy5kaXJYLnZhbHVlID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9LFxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIFkgZGlyZWN0aW9uIG9mIHRoZSBibHVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuQmx1ckRpckZpbHRlciNcbiAgICAgKiBAZGVmYXVsdCAwXG4gICAgICovXG4gICAgZGlyWToge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmRpclk7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLmRpclkudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi8uLi9jb3JlJyksXG4gICAgQmx1clhGaWx0ZXIgPSByZXF1aXJlKCcuL0JsdXJYRmlsdGVyJyksXG4gICAgQmx1cllGaWx0ZXIgPSByZXF1aXJlKCcuL0JsdXJZRmlsdGVyJyk7XG5cbi8qKlxuICogVGhlIEJsdXJGaWx0ZXIgYXBwbGllcyBhIEdhdXNzaWFuIGJsdXIgdG8gYW4gb2JqZWN0LlxuICogVGhlIHN0cmVuZ3RoIG9mIHRoZSBibHVyIGNhbiBiZSBzZXQgZm9yIHgtIGFuZCB5LWF4aXMgc2VwYXJhdGVseS5cbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQWJzdHJhY3RGaWx0ZXJcbiAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnNcbiAqL1xuZnVuY3Rpb24gQmx1ckZpbHRlcigpXG57XG4gICAgY29yZS5BYnN0cmFjdEZpbHRlci5jYWxsKHRoaXMpO1xuXG4gICAgdGhpcy5ibHVyWEZpbHRlciA9IG5ldyBCbHVyWEZpbHRlcigpO1xuICAgIHRoaXMuYmx1cllGaWx0ZXIgPSBuZXcgQmx1cllGaWx0ZXIoKTtcbn1cblxuQmx1ckZpbHRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuQWJzdHJhY3RGaWx0ZXIucHJvdG90eXBlKTtcbkJsdXJGaWx0ZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gQmx1ckZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gQmx1ckZpbHRlcjtcblxuQmx1ckZpbHRlci5wcm90b3R5cGUuYXBwbHlGaWx0ZXIgPSBmdW5jdGlvbiAocmVuZGVyZXIsIGlucHV0LCBvdXRwdXQpXG57XG4gICAgdmFyIHJlbmRlclRhcmdldCA9IHJlbmRlcmVyLmZpbHRlck1hbmFnZXIuZ2V0UmVuZGVyVGFyZ2V0KHRydWUpO1xuXG4gICAgdGhpcy5ibHVyWEZpbHRlci5hcHBseUZpbHRlcihyZW5kZXJlciwgaW5wdXQsIHJlbmRlclRhcmdldCk7XG4gICAgdGhpcy5ibHVyWUZpbHRlci5hcHBseUZpbHRlcihyZW5kZXJlciwgcmVuZGVyVGFyZ2V0LCBvdXRwdXQpO1xuXG4gICAgcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5yZXR1cm5SZW5kZXJUYXJnZXQocmVuZGVyVGFyZ2V0KTtcbn07XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKEJsdXJGaWx0ZXIucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgc3RyZW5ndGggb2YgYm90aCB0aGUgYmx1clggYW5kIGJsdXJZIHByb3BlcnRpZXMgc2ltdWx0YW5lb3VzbHlcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyT2YgUElYSS5maWx0ZXJzLkJsdXJGaWx0ZXIjXG4gICAgICogQGRlZmF1bHQgMlxuICAgICAqL1xuICAgIGJsdXI6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5ibHVyWEZpbHRlci5ibHVyO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5wYWRkaW5nID0gTWF0aC5hYnModmFsdWUpICogMC41O1xuICAgICAgICAgICAgdGhpcy5ibHVyWEZpbHRlci5ibHVyID0gdGhpcy5ibHVyWUZpbHRlci5ibHVyID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgbnVtYmVyIG9mIHBhc3NlcyBmb3IgYmx1ci4gTW9yZSBwYXNzZXMgbWVhbnMgaGlnaGVyIHF1YWlsaXR5IGJsdXJpbmcuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5CbHVyWUZpbHRlciNcbiAgICAgKiBAZGVmYXVsdCAxXG4gICAgICovXG4gICAgcGFzc2VzOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuICB0aGlzLmJsdXJYRmlsdGVyLnBhc3NlcztcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuYmx1clhGaWx0ZXIucGFzc2VzID0gdGhpcy5ibHVyWUZpbHRlci5wYXNzZXMgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBzdHJlbmd0aCBvZiB0aGUgYmx1clggcHJvcGVydHlcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyT2YgUElYSS5maWx0ZXJzLkJsdXJGaWx0ZXIjXG4gICAgICogQGRlZmF1bHQgMlxuICAgICAqL1xuICAgIGJsdXJYOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuYmx1clhGaWx0ZXIuYmx1cjtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuYmx1clhGaWx0ZXIuYmx1ciA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIHN0cmVuZ3RoIG9mIHRoZSBibHVyWSBwcm9wZXJ0eVxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJPZiBQSVhJLmZpbHRlcnMuQmx1ckZpbHRlciNcbiAgICAgKiBAZGVmYXVsdCAyXG4gICAgICovXG4gICAgYmx1clk6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5ibHVyWUZpbHRlci5ibHVyO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5ibHVyWUZpbHRlci5ibHVyID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG59KTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vLi4vY29yZScpO1xuLy8gQHNlZSBodHRwczovL2dpdGh1Yi5jb20vc3Vic3RhY2svYnJmcy9pc3N1ZXMvMjVcblxuXG4vKipcbiAqIFRoZSBCbHVyWEZpbHRlciBhcHBsaWVzIGEgaG9yaXpvbnRhbCBHYXVzc2lhbiBibHVyIHRvIGFuIG9iamVjdC5cbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQWJzdHJhY3RGaWx0ZXJcbiAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnNcbiAqL1xuZnVuY3Rpb24gQmx1clhGaWx0ZXIoKVxue1xuICAgIGNvcmUuQWJzdHJhY3RGaWx0ZXIuY2FsbCh0aGlzLFxuICAgICAgICAvLyB2ZXJ0ZXggc2hhZGVyXG4gICAgICAgIFwiYXR0cmlidXRlIHZlYzIgYVZlcnRleFBvc2l0aW9uO1xcbmF0dHJpYnV0ZSB2ZWMyIGFUZXh0dXJlQ29vcmQ7XFxuYXR0cmlidXRlIHZlYzQgYUNvbG9yO1xcblxcbnVuaWZvcm0gZmxvYXQgc3RyZW5ndGg7XFxudW5pZm9ybSBtYXQzIHByb2plY3Rpb25NYXRyaXg7XFxuXFxudmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7XFxudmFyeWluZyB2ZWM0IHZDb2xvcjtcXG52YXJ5aW5nIHZlYzIgdkJsdXJUZXhDb29yZHNbNl07XFxuXFxudm9pZCBtYWluKHZvaWQpXFxue1xcbiAgICBnbF9Qb3NpdGlvbiA9IHZlYzQoKHByb2plY3Rpb25NYXRyaXggKiB2ZWMzKChhVmVydGV4UG9zaXRpb24pLCAxLjApKS54eSwgMC4wLCAxLjApO1xcbiAgICB2VGV4dHVyZUNvb3JkID0gYVRleHR1cmVDb29yZDtcXG5cXG4gICAgdkJsdXJUZXhDb29yZHNbIDBdID0gYVRleHR1cmVDb29yZCArIHZlYzIoLTAuMDEyICogc3RyZW5ndGgsIDAuMCk7XFxuICAgIHZCbHVyVGV4Q29vcmRzWyAxXSA9IGFUZXh0dXJlQ29vcmQgKyB2ZWMyKC0wLjAwOCAqIHN0cmVuZ3RoLCAwLjApO1xcbiAgICB2Qmx1clRleENvb3Jkc1sgMl0gPSBhVGV4dHVyZUNvb3JkICsgdmVjMigtMC4wMDQgKiBzdHJlbmd0aCwgMC4wKTtcXG4gICAgdkJsdXJUZXhDb29yZHNbIDNdID0gYVRleHR1cmVDb29yZCArIHZlYzIoIDAuMDA0ICogc3RyZW5ndGgsIDAuMCk7XFxuICAgIHZCbHVyVGV4Q29vcmRzWyA0XSA9IGFUZXh0dXJlQ29vcmQgKyB2ZWMyKCAwLjAwOCAqIHN0cmVuZ3RoLCAwLjApO1xcbiAgICB2Qmx1clRleENvb3Jkc1sgNV0gPSBhVGV4dHVyZUNvb3JkICsgdmVjMiggMC4wMTIgKiBzdHJlbmd0aCwgMC4wKTtcXG5cXG4gICAgdkNvbG9yID0gdmVjNChhQ29sb3IucmdiICogYUNvbG9yLmEsIGFDb2xvci5hKTtcXG59XFxuXCIsXG4gICAgICAgIC8vIGZyYWdtZW50IHNoYWRlclxuICAgICAgICBcInByZWNpc2lvbiBsb3dwIGZsb2F0O1xcblxcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xcbnZhcnlpbmcgdmVjMiB2Qmx1clRleENvb3Jkc1s2XTtcXG52YXJ5aW5nIHZlYzQgdkNvbG9yO1xcblxcbnVuaWZvcm0gc2FtcGxlcjJEIHVTYW1wbGVyO1xcblxcbnZvaWQgbWFpbih2b2lkKVxcbntcXG4gICAgZ2xfRnJhZ0NvbG9yID0gdmVjNCgwLjApO1xcblxcbiAgICBnbF9GcmFnQ29sb3IgKz0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2Qmx1clRleENvb3Jkc1sgMF0pKjAuMDA0NDMxODQ4NDExOTM4MzQxO1xcbiAgICBnbF9GcmFnQ29sb3IgKz0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2Qmx1clRleENvb3Jkc1sgMV0pKjAuMDUzOTkwOTY2NTEzMTg5ODU7XFxuICAgIGdsX0ZyYWdDb2xvciArPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZCbHVyVGV4Q29vcmRzWyAyXSkqMC4yNDE5NzA3MjQ1MTkxNDU0O1xcbiAgICBnbF9GcmFnQ29sb3IgKz0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2VGV4dHVyZUNvb3JkICAgICApKjAuMzk4OTQyMjgwNDAxNDMyNztcXG4gICAgZ2xfRnJhZ0NvbG9yICs9IHRleHR1cmUyRCh1U2FtcGxlciwgdkJsdXJUZXhDb29yZHNbIDNdKSowLjI0MTk3MDcyNDUxOTE0NTQ7XFxuICAgIGdsX0ZyYWdDb2xvciArPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZCbHVyVGV4Q29vcmRzWyA0XSkqMC4wNTM5OTA5NjY1MTMxODk4NTtcXG4gICAgZ2xfRnJhZ0NvbG9yICs9IHRleHR1cmUyRCh1U2FtcGxlciwgdkJsdXJUZXhDb29yZHNbIDVdKSowLjAwNDQzMTg0ODQxMTkzODM0MTtcXG59XFxuXCIsXG4gICAgICAgIC8vIHNldCB0aGUgdW5pZm9ybXNcbiAgICAgICAge1xuICAgICAgICAgICAgc3RyZW5ndGg6IHsgdHlwZTogJzFmJywgdmFsdWU6IDEgfVxuICAgICAgICB9XG4gICAgKTtcblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIG51bWJlciBvZiBwYXNzZXMgZm9yIGJsdXIuIE1vcmUgcGFzc2VzIG1lYW5zIGhpZ2hlciBxdWFpbGl0eSBibHVyaW5nLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDFcbiAgICAgKi9cbiAgICB0aGlzLnBhc3NlcyA9IDE7XG5cbiAgICB0aGlzLnN0cmVuZ3RoID0gNDtcbn1cblxuQmx1clhGaWx0ZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShjb3JlLkFic3RyYWN0RmlsdGVyLnByb3RvdHlwZSk7XG5CbHVyWEZpbHRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBCbHVyWEZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gQmx1clhGaWx0ZXI7XG5cbkJsdXJYRmlsdGVyLnByb3RvdHlwZS5hcHBseUZpbHRlciA9IGZ1bmN0aW9uIChyZW5kZXJlciwgaW5wdXQsIG91dHB1dCwgY2xlYXIpXG57XG4gICAgdmFyIHNoYWRlciA9IHRoaXMuZ2V0U2hhZGVyKHJlbmRlcmVyKTtcblxuICAgIHRoaXMudW5pZm9ybXMuc3RyZW5ndGgudmFsdWUgPSB0aGlzLnN0cmVuZ3RoIC8gNCAvIHRoaXMucGFzc2VzICogKGlucHV0LmZyYW1lLndpZHRoIC8gaW5wdXQuc2l6ZS53aWR0aCk7XG5cbiAgICBpZih0aGlzLnBhc3NlcyA9PT0gMSlcbiAgICB7XG4gICAgICAgIHJlbmRlcmVyLmZpbHRlck1hbmFnZXIuYXBwbHlGaWx0ZXIoc2hhZGVyLCBpbnB1dCwgb3V0cHV0LCBjbGVhcik7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHZhciByZW5kZXJUYXJnZXQgPSByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLmdldFJlbmRlclRhcmdldCh0cnVlKTtcbiAgICAgICAgdmFyIGZsaXAgPSBpbnB1dDtcbiAgICAgICAgdmFyIGZsb3AgPSByZW5kZXJUYXJnZXQ7XG5cbiAgICAgICAgZm9yKHZhciBpID0gMDsgaSA8IHRoaXMucGFzc2VzLTE7IGkrKylcbiAgICAgICAge1xuICAgICAgICAgICAgcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5hcHBseUZpbHRlcihzaGFkZXIsIGZsaXAsIGZsb3AsIHRydWUpO1xuXG4gICAgICAgICAgIHZhciB0ZW1wID0gZmxvcDtcbiAgICAgICAgICAgZmxvcCA9IGZsaXA7XG4gICAgICAgICAgIGZsaXAgPSB0ZW1wO1xuICAgICAgICB9XG5cbiAgICAgICAgcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5hcHBseUZpbHRlcihzaGFkZXIsIGZsaXAsIG91dHB1dCwgY2xlYXIpO1xuXG4gICAgICAgIHJlbmRlcmVyLmZpbHRlck1hbmFnZXIucmV0dXJuUmVuZGVyVGFyZ2V0KHJlbmRlclRhcmdldCk7XG4gICAgfVxufTtcblxuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhCbHVyWEZpbHRlci5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBzdHJlbmd0aCBvZiBib3RoIHRoZSBibHVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuQmx1clhGaWx0ZXIjXG4gICAgICogQGRlZmF1bHQgMlxuICAgICAqL1xuICAgIGJsdXI6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gIHRoaXMuc3RyZW5ndGg7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnBhZGRpbmcgPSAgTWF0aC5hYnModmFsdWUpICogMC41O1xuICAgICAgICAgICAgdGhpcy5zdHJlbmd0aCA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfVxufSk7XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uLy4uL2NvcmUnKTtcbi8vIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL3N1YnN0YWNrL2JyZnMvaXNzdWVzLzI1XG5cblxuLyoqXG4gKiBUaGUgQmx1cllGaWx0ZXIgYXBwbGllcyBhIGhvcml6b250YWwgR2F1c3NpYW4gYmx1ciB0byBhbiBvYmplY3QuXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLkFic3RyYWN0RmlsdGVyXG4gKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzXG4gKi9cbmZ1bmN0aW9uIEJsdXJZRmlsdGVyKClcbntcbiAgICBjb3JlLkFic3RyYWN0RmlsdGVyLmNhbGwodGhpcyxcbiAgICAgICAgLy8gdmVydGV4IHNoYWRlclxuICAgICAgICBcImF0dHJpYnV0ZSB2ZWMyIGFWZXJ0ZXhQb3NpdGlvbjtcXG5hdHRyaWJ1dGUgdmVjMiBhVGV4dHVyZUNvb3JkO1xcbmF0dHJpYnV0ZSB2ZWM0IGFDb2xvcjtcXG5cXG51bmlmb3JtIGZsb2F0IHN0cmVuZ3RoO1xcbnVuaWZvcm0gbWF0MyBwcm9qZWN0aW9uTWF0cml4O1xcblxcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xcbnZhcnlpbmcgdmVjNCB2Q29sb3I7XFxudmFyeWluZyB2ZWMyIHZCbHVyVGV4Q29vcmRzWzZdO1xcblxcbnZvaWQgbWFpbih2b2lkKVxcbntcXG4gICAgZ2xfUG9zaXRpb24gPSB2ZWM0KChwcm9qZWN0aW9uTWF0cml4ICogdmVjMygoYVZlcnRleFBvc2l0aW9uKSwgMS4wKSkueHksIDAuMCwgMS4wKTtcXG4gICAgdlRleHR1cmVDb29yZCA9IGFUZXh0dXJlQ29vcmQ7XFxuXFxuICAgIHZCbHVyVGV4Q29vcmRzWyAwXSA9IGFUZXh0dXJlQ29vcmQgKyB2ZWMyKDAuMCwgLTAuMDEyICogc3RyZW5ndGgpO1xcbiAgICB2Qmx1clRleENvb3Jkc1sgMV0gPSBhVGV4dHVyZUNvb3JkICsgdmVjMigwLjAsIC0wLjAwOCAqIHN0cmVuZ3RoKTtcXG4gICAgdkJsdXJUZXhDb29yZHNbIDJdID0gYVRleHR1cmVDb29yZCArIHZlYzIoMC4wLCAtMC4wMDQgKiBzdHJlbmd0aCk7XFxuICAgIHZCbHVyVGV4Q29vcmRzWyAzXSA9IGFUZXh0dXJlQ29vcmQgKyB2ZWMyKDAuMCwgIDAuMDA0ICogc3RyZW5ndGgpO1xcbiAgICB2Qmx1clRleENvb3Jkc1sgNF0gPSBhVGV4dHVyZUNvb3JkICsgdmVjMigwLjAsICAwLjAwOCAqIHN0cmVuZ3RoKTtcXG4gICAgdkJsdXJUZXhDb29yZHNbIDVdID0gYVRleHR1cmVDb29yZCArIHZlYzIoMC4wLCAgMC4wMTIgKiBzdHJlbmd0aCk7XFxuXFxuICAgdkNvbG9yID0gdmVjNChhQ29sb3IucmdiICogYUNvbG9yLmEsIGFDb2xvci5hKTtcXG59XFxuXCIsXG4gICAgICAgIC8vIGZyYWdtZW50IHNoYWRlclxuICAgICAgICBcInByZWNpc2lvbiBsb3dwIGZsb2F0O1xcblxcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xcbnZhcnlpbmcgdmVjMiB2Qmx1clRleENvb3Jkc1s2XTtcXG52YXJ5aW5nIHZlYzQgdkNvbG9yO1xcblxcbnVuaWZvcm0gc2FtcGxlcjJEIHVTYW1wbGVyO1xcblxcbnZvaWQgbWFpbih2b2lkKVxcbntcXG4gICAgZ2xfRnJhZ0NvbG9yID0gdmVjNCgwLjApO1xcblxcbiAgICBnbF9GcmFnQ29sb3IgKz0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2Qmx1clRleENvb3Jkc1sgMF0pKjAuMDA0NDMxODQ4NDExOTM4MzQxO1xcbiAgICBnbF9GcmFnQ29sb3IgKz0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2Qmx1clRleENvb3Jkc1sgMV0pKjAuMDUzOTkwOTY2NTEzMTg5ODU7XFxuICAgIGdsX0ZyYWdDb2xvciArPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZCbHVyVGV4Q29vcmRzWyAyXSkqMC4yNDE5NzA3MjQ1MTkxNDU0O1xcbiAgICBnbF9GcmFnQ29sb3IgKz0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2VGV4dHVyZUNvb3JkICAgICApKjAuMzk4OTQyMjgwNDAxNDMyNztcXG4gICAgZ2xfRnJhZ0NvbG9yICs9IHRleHR1cmUyRCh1U2FtcGxlciwgdkJsdXJUZXhDb29yZHNbIDNdKSowLjI0MTk3MDcyNDUxOTE0NTQ7XFxuICAgIGdsX0ZyYWdDb2xvciArPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZCbHVyVGV4Q29vcmRzWyA0XSkqMC4wNTM5OTA5NjY1MTMxODk4NTtcXG4gICAgZ2xfRnJhZ0NvbG9yICs9IHRleHR1cmUyRCh1U2FtcGxlciwgdkJsdXJUZXhDb29yZHNbIDVdKSowLjAwNDQzMTg0ODQxMTkzODM0MTtcXG59XFxuXCIsXG4gICAgICAgIC8vIHNldCB0aGUgdW5pZm9ybXNcbiAgICAgICAge1xuICAgICAgICAgICAgc3RyZW5ndGg6IHsgdHlwZTogJzFmJywgdmFsdWU6IDEgfVxuICAgICAgICB9XG4gICAgKTtcblxuICAgIHRoaXMucGFzc2VzID0gMTtcbiAgICB0aGlzLnN0cmVuZ3RoID0gNDtcbn1cblxuQmx1cllGaWx0ZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShjb3JlLkFic3RyYWN0RmlsdGVyLnByb3RvdHlwZSk7XG5CbHVyWUZpbHRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBCbHVyWUZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gQmx1cllGaWx0ZXI7XG5cbkJsdXJZRmlsdGVyLnByb3RvdHlwZS5hcHBseUZpbHRlciA9IGZ1bmN0aW9uIChyZW5kZXJlciwgaW5wdXQsIG91dHB1dCwgY2xlYXIpXG57XG4gICAgdmFyIHNoYWRlciA9IHRoaXMuZ2V0U2hhZGVyKHJlbmRlcmVyKTtcblxuICAgIHRoaXMudW5pZm9ybXMuc3RyZW5ndGgudmFsdWUgPSBNYXRoLmFicyh0aGlzLnN0cmVuZ3RoKSAvIDQgLyB0aGlzLnBhc3NlcyAqIChpbnB1dC5mcmFtZS5oZWlnaHQgLyBpbnB1dC5zaXplLmhlaWdodCk7XG5cbiAgICBpZih0aGlzLnBhc3NlcyA9PT0gMSlcbiAgICB7XG4gICAgICAgIHJlbmRlcmVyLmZpbHRlck1hbmFnZXIuYXBwbHlGaWx0ZXIoc2hhZGVyLCBpbnB1dCwgb3V0cHV0LCBjbGVhcik7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHZhciByZW5kZXJUYXJnZXQgPSByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLmdldFJlbmRlclRhcmdldCh0cnVlKTtcbiAgICAgICAgdmFyIGZsaXAgPSBpbnB1dDtcbiAgICAgICAgdmFyIGZsb3AgPSByZW5kZXJUYXJnZXQ7XG5cbiAgICAgICAgZm9yKHZhciBpID0gMDsgaSA8IHRoaXMucGFzc2VzLTE7IGkrKylcbiAgICAgICAge1xuICAgICAgICAgICAgcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5hcHBseUZpbHRlcihzaGFkZXIsIGZsaXAsIGZsb3AsIHRydWUpO1xuXG4gICAgICAgICAgIHZhciB0ZW1wID0gZmxvcDtcbiAgICAgICAgICAgZmxvcCA9IGZsaXA7XG4gICAgICAgICAgIGZsaXAgPSB0ZW1wO1xuICAgICAgICB9XG5cbiAgICAgICAgcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5hcHBseUZpbHRlcihzaGFkZXIsIGZsaXAsIG91dHB1dCwgY2xlYXIpO1xuXG4gICAgICAgIHJlbmRlcmVyLmZpbHRlck1hbmFnZXIucmV0dXJuUmVuZGVyVGFyZ2V0KHJlbmRlclRhcmdldCk7XG4gICAgfVxufTtcblxuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhCbHVyWUZpbHRlci5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBzdHJlbmd0aCBvZiBib3RoIHRoZSBibHVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuQmx1cllGaWx0ZXIjXG4gICAgICogQGRlZmF1bHQgMlxuICAgICAqL1xuICAgIGJsdXI6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gIHRoaXMuc3RyZW5ndGg7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnBhZGRpbmcgPSBNYXRoLmFicyh2YWx1ZSkgKiAwLjU7XG4gICAgICAgICAgICB0aGlzLnN0cmVuZ3RoID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG59KTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vLi4vY29yZScpO1xuLy8gQHNlZSBodHRwczovL2dpdGh1Yi5jb20vc3Vic3RhY2svYnJmcy9pc3N1ZXMvMjVcblxuXG4vKipcbiAqIEEgU21hcnQgQmx1ciBGaWx0ZXIuXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLkFic3RyYWN0RmlsdGVyXG4gKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzXG4gKi9cbmZ1bmN0aW9uIFNtYXJ0Qmx1ckZpbHRlcigpXG57XG4gICAgY29yZS5BYnN0cmFjdEZpbHRlci5jYWxsKHRoaXMsXG4gICAgICAgIC8vIHZlcnRleCBzaGFkZXJcbiAgICAgICAgbnVsbCxcbiAgICAgICAgLy8gZnJhZ21lbnQgc2hhZGVyXG4gICAgICAgIFwicHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XFxuXFxudmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7XFxuXFxudW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXI7XFxudW5pZm9ybSB2ZWMyIGRlbHRhO1xcblxcbmZsb2F0IHJhbmRvbSh2ZWMzIHNjYWxlLCBmbG9hdCBzZWVkKVxcbntcXG4gICAgcmV0dXJuIGZyYWN0KHNpbihkb3QoZ2xfRnJhZ0Nvb3JkLnh5eiArIHNlZWQsIHNjYWxlKSkgKiA0Mzc1OC41NDUzICsgc2VlZCk7XFxufVxcblxcbnZvaWQgbWFpbih2b2lkKVxcbntcXG4gICAgdmVjNCBjb2xvciA9IHZlYzQoMC4wKTtcXG4gICAgZmxvYXQgdG90YWwgPSAwLjA7XFxuXFxuICAgIGZsb2F0IG9mZnNldCA9IHJhbmRvbSh2ZWMzKDEyLjk4OTgsIDc4LjIzMywgMTUxLjcxODIpLCAwLjApO1xcblxcbiAgICBmb3IgKGZsb2F0IHQgPSAtMzAuMDsgdCA8PSAzMC4wOyB0KyspXFxuICAgIHtcXG4gICAgICAgIGZsb2F0IHBlcmNlbnQgPSAodCArIG9mZnNldCAtIDAuNSkgLyAzMC4wO1xcbiAgICAgICAgZmxvYXQgd2VpZ2h0ID0gMS4wIC0gYWJzKHBlcmNlbnQpO1xcbiAgICAgICAgdmVjNCBzYW1wbGUgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZUZXh0dXJlQ29vcmQgKyBkZWx0YSAqIHBlcmNlbnQpO1xcbiAgICAgICAgc2FtcGxlLnJnYiAqPSBzYW1wbGUuYTtcXG4gICAgICAgIGNvbG9yICs9IHNhbXBsZSAqIHdlaWdodDtcXG4gICAgICAgIHRvdGFsICs9IHdlaWdodDtcXG4gICAgfVxcblxcbiAgICBnbF9GcmFnQ29sb3IgPSBjb2xvciAvIHRvdGFsO1xcbiAgICBnbF9GcmFnQ29sb3IucmdiIC89IGdsX0ZyYWdDb2xvci5hICsgMC4wMDAwMTtcXG59XFxuXCIsXG4gICAgICAgIC8vIHVuaWZvcm1zXG4gICAgICAgIHtcbiAgICAgICAgICBkZWx0YTogeyB0eXBlOiAndjInLCB2YWx1ZTogeyB4OiAwLjEsIHk6IDAuMCB9IH1cbiAgICAgICAgfVxuICAgICk7XG59XG5cblNtYXJ0Qmx1ckZpbHRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuQWJzdHJhY3RGaWx0ZXIucHJvdG90eXBlKTtcblNtYXJ0Qmx1ckZpbHRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBTbWFydEJsdXJGaWx0ZXI7XG5tb2R1bGUuZXhwb3J0cyA9IFNtYXJ0Qmx1ckZpbHRlcjtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vLi4vY29yZScpO1xuLy8gQHNlZSBodHRwczovL2dpdGh1Yi5jb20vc3Vic3RhY2svYnJmcy9pc3N1ZXMvMjVcblxuXG4vKipcbiAqIFRoZSBDb2xvck1hdHJpeEZpbHRlciBjbGFzcyBsZXRzIHlvdSBhcHBseSBhIDV4NCBtYXRyaXggdHJhbnNmb3JtYXRpb24gb24gdGhlIFJHQkFcbiAqIGNvbG9yIGFuZCBhbHBoYSB2YWx1ZXMgb2YgZXZlcnkgcGl4ZWwgb24geW91ciBkaXNwbGF5T2JqZWN0IHRvIHByb2R1Y2UgYSByZXN1bHRcbiAqIHdpdGggYSBuZXcgc2V0IG9mIFJHQkEgY29sb3IgYW5kIGFscGhhIHZhbHVlcy4gSXQncyBwcmV0dHkgcG93ZXJmdWwhXG4gKlxuICogYGBganNcbiAqICB2YXIgY29sb3JNYXRyaXggPSBuZXcgUElYSS5Db2xvck1hdHJpeEZpbHRlcigpO1xuICogIGNvbnRhaW5lci5maWx0ZXJzID0gW2NvbG9yTWF0cml4XTtcbiAqICBjb2xvck1hdHJpeC5jb250cmFzdCgyKTtcbiAqIGBgYFxuICogQGF1dGhvciBDbMOpbWVudCBDaGVuZWJhdWx0IDxjbGVtZW50QGdvb2Rib3lkaWdpdGFsLmNvbT5cbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5BYnN0cmFjdEZpbHRlclxuICogQG1lbWJlcm9mIFBJWEkuZmlsdGVyc1xuICovXG5mdW5jdGlvbiBDb2xvck1hdHJpeEZpbHRlcigpXG57XG4gICAgY29yZS5BYnN0cmFjdEZpbHRlci5jYWxsKHRoaXMsXG4gICAgICAgIC8vIHZlcnRleCBzaGFkZXJcbiAgICAgICAgbnVsbCxcbiAgICAgICAgLy8gZnJhZ21lbnQgc2hhZGVyXG4gICAgICAgIFwicHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XFxuXFxudmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7XFxudW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXI7XFxudW5pZm9ybSBmbG9hdCBtWzI1XTtcXG5cXG52b2lkIG1haW4odm9pZClcXG57XFxuXFxuICAgIHZlYzQgYyA9IHRleHR1cmUyRCh1U2FtcGxlciwgdlRleHR1cmVDb29yZCk7XFxuXFxuICAgIGdsX0ZyYWdDb2xvci5yID0gKG1bMF0gKiBjLnIpO1xcbiAgICAgICAgZ2xfRnJhZ0NvbG9yLnIgKz0gKG1bMV0gKiBjLmcpO1xcbiAgICAgICAgZ2xfRnJhZ0NvbG9yLnIgKz0gKG1bMl0gKiBjLmIpO1xcbiAgICAgICAgZ2xfRnJhZ0NvbG9yLnIgKz0gKG1bM10gKiBjLmEpO1xcbiAgICAgICAgZ2xfRnJhZ0NvbG9yLnIgKz0gbVs0XTtcXG5cXG4gICAgZ2xfRnJhZ0NvbG9yLmcgPSAobVs1XSAqIGMucik7XFxuICAgICAgICBnbF9GcmFnQ29sb3IuZyArPSAobVs2XSAqIGMuZyk7XFxuICAgICAgICBnbF9GcmFnQ29sb3IuZyArPSAobVs3XSAqIGMuYik7XFxuICAgICAgICBnbF9GcmFnQ29sb3IuZyArPSAobVs4XSAqIGMuYSk7XFxuICAgICAgICBnbF9GcmFnQ29sb3IuZyArPSBtWzldO1xcblxcbiAgICAgZ2xfRnJhZ0NvbG9yLmIgPSAobVsxMF0gKiBjLnIpO1xcbiAgICAgICAgZ2xfRnJhZ0NvbG9yLmIgKz0gKG1bMTFdICogYy5nKTtcXG4gICAgICAgIGdsX0ZyYWdDb2xvci5iICs9IChtWzEyXSAqIGMuYik7XFxuICAgICAgICBnbF9GcmFnQ29sb3IuYiArPSAobVsxM10gKiBjLmEpO1xcbiAgICAgICAgZ2xfRnJhZ0NvbG9yLmIgKz0gbVsxNF07XFxuXFxuICAgICBnbF9GcmFnQ29sb3IuYSA9IChtWzE1XSAqIGMucik7XFxuICAgICAgICBnbF9GcmFnQ29sb3IuYSArPSAobVsxNl0gKiBjLmcpO1xcbiAgICAgICAgZ2xfRnJhZ0NvbG9yLmEgKz0gKG1bMTddICogYy5iKTtcXG4gICAgICAgIGdsX0ZyYWdDb2xvci5hICs9IChtWzE4XSAqIGMuYSk7XFxuICAgICAgICBnbF9GcmFnQ29sb3IuYSArPSBtWzE5XTtcXG5cXG59XFxuXCIsXG4gICAgICAgIC8vIGN1c3RvbSB1bmlmb3Jtc1xuICAgICAgICB7XG4gICAgICAgICAgICBtOiB7XG4gICAgICAgICAgICAgICAgdHlwZTogJzFmdicsIHZhbHVlOiBbXG4gICAgICAgICAgICAgICAgICAgIDEsIDAsIDAsIDAsIDAsXG4gICAgICAgICAgICAgICAgICAgIDAsIDEsIDAsIDAsIDAsXG4gICAgICAgICAgICAgICAgICAgIDAsIDAsIDEsIDAsIDAsXG4gICAgICAgICAgICAgICAgICAgIDAsIDAsIDAsIDEsIDBcbiAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICApO1xufVxuXG5Db2xvck1hdHJpeEZpbHRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuQWJzdHJhY3RGaWx0ZXIucHJvdG90eXBlKTtcbkNvbG9yTWF0cml4RmlsdGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IENvbG9yTWF0cml4RmlsdGVyO1xubW9kdWxlLmV4cG9ydHMgPSBDb2xvck1hdHJpeEZpbHRlcjtcblxuXG4vKipcbiAqIFRyYW5zZm9ybXMgY3VycmVudCBtYXRyaXggYW5kIHNldCB0aGUgbmV3IG9uZVxuICpcbiAqIEBwYXJhbSBtYXRyaXgge251bWJlcltdfSAobWF0IDV4NClcbiAqIEBwYXJhbSBtdWx0aXBseSB7Ym9vbGVhbn0gaWYgdHJ1ZSwgY3VycmVudCBtYXRyaXggYW5kIG1hdHJpeCBhcmUgbXVsdGlwbGllZC4gSWYgZmFsc2UsIGp1c3Qgc2V0IHRoZSBjdXJyZW50IG1hdHJpeCB3aXRoIEBwYXJhbSBtYXRyaXhcbiAqL1xuQ29sb3JNYXRyaXhGaWx0ZXIucHJvdG90eXBlLl9sb2FkTWF0cml4ID0gZnVuY3Rpb24gKG1hdHJpeCwgbXVsdGlwbHkpXG57XG4gICAgbXVsdGlwbHkgPSAhIW11bHRpcGx5O1xuXG4gICAgdmFyIG5ld01hdHJpeCA9IG1hdHJpeDtcblxuICAgIGlmIChtdWx0aXBseSkge1xuICAgICAgICB0aGlzLl9tdWx0aXBseShuZXdNYXRyaXgsIHRoaXMudW5pZm9ybXMubS52YWx1ZSwgbWF0cml4KTtcbiAgICAgICAgbmV3TWF0cml4ID0gdGhpcy5fY29sb3JNYXRyaXgobmV3TWF0cml4KTtcbiAgICB9XG5cbiAgICAvLyBzZXQgdGhlIG5ldyBtYXRyaXhcbiAgICB0aGlzLnVuaWZvcm1zLm0udmFsdWUgPSBuZXdNYXRyaXg7XG59O1xuXG4vKipcbiAqIE11bHRpcGxpZXMgdHdvIG1hdDUnc1xuICpcbiAqIEBwYXJhbSBvdXQge251bWJlcltdfSAobWF0IDV4NCkgdGhlIHJlY2VpdmluZyBtYXRyaXhcbiAqIEBwYXJhbSBhIHtudW1iZXJbXX0gKG1hdCA1eDQpIHRoZSBmaXJzdCBvcGVyYW5kXG4gKiBAcGFyYW0gYiB7bnVtYmVyW119IChtYXQgNXg0KSB0aGUgc2Vjb25kIG9wZXJhbmRcbiAqIEByZXR1cm5zIG91dCB7bnVtYmVyW119IChtYXQgNXg0KVxuICovXG5Db2xvck1hdHJpeEZpbHRlci5wcm90b3R5cGUuX211bHRpcGx5ID0gZnVuY3Rpb24gKG91dCwgYSwgYilcbntcblxuICAgIC8vIFJlZCBDaGFubmVsXG4gICAgb3V0WzBdID0gKGFbMF0gKiBiWzBdKSArIChhWzFdICogYls1XSkgKyAoYVsyXSAqIGJbMTBdKSArIChhWzNdICogYlsxNV0pO1xuICAgIG91dFsxXSA9IChhWzBdICogYlsxXSkgKyAoYVsxXSAqIGJbNl0pICsgKGFbMl0gKiBiWzExXSkgKyAoYVszXSAqIGJbMTZdKTtcbiAgICBvdXRbMl0gPSAoYVswXSAqIGJbMl0pICsgKGFbMV0gKiBiWzddKSArIChhWzJdICogYlsxMl0pICsgKGFbM10gKiBiWzE3XSk7XG4gICAgb3V0WzNdID0gKGFbMF0gKiBiWzNdKSArIChhWzFdICogYls4XSkgKyAoYVsyXSAqIGJbMTNdKSArIChhWzNdICogYlsxOF0pO1xuICAgIG91dFs0XSA9IChhWzBdICogYls0XSkgKyAoYVsxXSAqIGJbOV0pICsgKGFbMl0gKiBiWzE0XSkgKyAoYVszXSAqIGJbMTldKTtcblxuICAgIC8vIEdyZWVuIENoYW5uZWxcbiAgICBvdXRbNV0gPSAoYVs1XSAqIGJbMF0pICsgKGFbNl0gKiBiWzVdKSArIChhWzddICogYlsxMF0pICsgKGFbOF0gKiBiWzE1XSk7XG4gICAgb3V0WzZdID0gKGFbNV0gKiBiWzFdKSArIChhWzZdICogYls2XSkgKyAoYVs3XSAqIGJbMTFdKSArIChhWzhdICogYlsxNl0pO1xuICAgIG91dFs3XSA9IChhWzVdICogYlsyXSkgKyAoYVs2XSAqIGJbN10pICsgKGFbN10gKiBiWzEyXSkgKyAoYVs4XSAqIGJbMTddKTtcbiAgICBvdXRbOF0gPSAoYVs1XSAqIGJbM10pICsgKGFbNl0gKiBiWzhdKSArIChhWzddICogYlsxM10pICsgKGFbOF0gKiBiWzE4XSk7XG4gICAgb3V0WzldID0gKGFbNV0gKiBiWzRdKSArIChhWzZdICogYls5XSkgKyAoYVs3XSAqIGJbMTRdKSArIChhWzhdICogYlsxOV0pO1xuXG4gICAgLy8gQmx1ZSBDaGFubmVsXG4gICAgb3V0WzEwXSA9IChhWzEwXSAqIGJbMF0pICsgKGFbMTFdICogYls1XSkgKyAoYVsxMl0gKiBiWzEwXSkgKyAoYVsxM10gKiBiWzE1XSk7XG4gICAgb3V0WzExXSA9IChhWzEwXSAqIGJbMV0pICsgKGFbMTFdICogYls2XSkgKyAoYVsxMl0gKiBiWzExXSkgKyAoYVsxM10gKiBiWzE2XSk7XG4gICAgb3V0WzEyXSA9IChhWzEwXSAqIGJbMl0pICsgKGFbMTFdICogYls3XSkgKyAoYVsxMl0gKiBiWzEyXSkgKyAoYVsxM10gKiBiWzE3XSk7XG4gICAgb3V0WzEzXSA9IChhWzEwXSAqIGJbM10pICsgKGFbMTFdICogYls4XSkgKyAoYVsxMl0gKiBiWzEzXSkgKyAoYVsxM10gKiBiWzE4XSk7XG4gICAgb3V0WzE0XSA9IChhWzEwXSAqIGJbNF0pICsgKGFbMTFdICogYls5XSkgKyAoYVsxMl0gKiBiWzE0XSkgKyAoYVsxM10gKiBiWzE5XSk7XG5cbiAgICAvLyBBbHBoYSBDaGFubmVsXG4gICAgb3V0WzE1XSA9IChhWzE1XSAqIGJbMF0pICsgKGFbMTZdICogYls1XSkgKyAoYVsxN10gKiBiWzEwXSkgKyAoYVsxOF0gKiBiWzE1XSk7XG4gICAgb3V0WzE2XSA9IChhWzE1XSAqIGJbMV0pICsgKGFbMTZdICogYls2XSkgKyAoYVsxN10gKiBiWzExXSkgKyAoYVsxOF0gKiBiWzE2XSk7XG4gICAgb3V0WzE3XSA9IChhWzE1XSAqIGJbMl0pICsgKGFbMTZdICogYls3XSkgKyAoYVsxN10gKiBiWzEyXSkgKyAoYVsxOF0gKiBiWzE3XSk7XG4gICAgb3V0WzE4XSA9IChhWzE1XSAqIGJbM10pICsgKGFbMTZdICogYls4XSkgKyAoYVsxN10gKiBiWzEzXSkgKyAoYVsxOF0gKiBiWzE4XSk7XG4gICAgb3V0WzE5XSA9IChhWzE1XSAqIGJbNF0pICsgKGFbMTZdICogYls5XSkgKyAoYVsxN10gKiBiWzE0XSkgKyAoYVsxOF0gKiBiWzE5XSk7XG5cbiAgICByZXR1cm4gb3V0O1xufTtcblxuLyoqXG4gKiBDcmVhdGUgYSBGbG9hdDMyIEFycmF5IGFuZCBub3JtYWxpemUgdGhlIG9mZnNldCBjb21wb25lbnQgdG8gMC0xXG4gKlxuICogQHBhcmFtIG1hdHJpeCB7bnVtYmVyW119IChtYXQgNXg0KVxuICogQHJldHVybiBtIHtudW1iZXJbXX0gKG1hdCA1eDQpIHdpdGggYWxsIHZhbHVlcyBiZXR3ZWVuIDAtMVxuICovXG5Db2xvck1hdHJpeEZpbHRlci5wcm90b3R5cGUuX2NvbG9yTWF0cml4ID0gZnVuY3Rpb24gKG1hdHJpeClcbntcbiAgICAvLyBDcmVhdGUgYSBGbG9hdDMyIEFycmF5IGFuZCBub3JtYWxpemUgdGhlIG9mZnNldCBjb21wb25lbnQgdG8gMC0xXG4gICAgdmFyIG0gPSBuZXcgRmxvYXQzMkFycmF5KG1hdHJpeCk7XG4gICAgbVs0XSAvPSAyNTU7XG4gICAgbVs5XSAvPSAyNTU7XG4gICAgbVsxNF0gLz0gMjU1O1xuICAgIG1bMTldIC89IDI1NTtcblxuICAgIHJldHVybiBtO1xufTtcblxuLyoqXG4gKiBBZGp1c3RzIGJyaWdodG5lc3NcbiAqXG4gKiBAcGFyYW0gYiB7bnVtYmVyfSB2YWx1ZSBvZiB0aGUgYnJpZ3RobmVzcyAoMCBpcyBibGFjaylcbiAqIEBwYXJhbSBtdWx0aXBseSB7Ym9vbGVhbn0gcmVmZXIgdG8gLl9sb2FkTWF0cml4KCkgbWV0aG9kXG4gKi9cbkNvbG9yTWF0cml4RmlsdGVyLnByb3RvdHlwZS5icmlnaHRuZXNzID0gZnVuY3Rpb24gKGIsIG11bHRpcGx5KVxue1xuICAgIHZhciBtYXRyaXggPSBbXG4gICAgICAgIGIsIDAsIDAsIDAsIDAsXG4gICAgICAgIDAsIGIsIDAsIDAsIDAsXG4gICAgICAgIDAsIDAsIGIsIDAsIDAsXG4gICAgICAgIDAsIDAsIDAsIDEsIDBcbiAgICBdO1xuXG4gICAgdGhpcy5fbG9hZE1hdHJpeChtYXRyaXgsIG11bHRpcGx5KTtcbn07XG5cbi8qKlxuICogU2V0IHRoZSBtYXRyaWNlcyBpbiBncmV5IHNjYWxlc1xuICpcbiAqIEBwYXJhbSBzY2FsZSB7bnVtYmVyfSB2YWx1ZSBvZiB0aGUgZ3JleSAoMCBpcyBibGFjaylcbiAqIEBwYXJhbSBtdWx0aXBseSB7Ym9vbGVhbn0gcmVmZXIgdG8gLl9sb2FkTWF0cml4KCkgbWV0aG9kXG4gKi9cbkNvbG9yTWF0cml4RmlsdGVyLnByb3RvdHlwZS5ncmV5c2NhbGUgPSBmdW5jdGlvbiAoc2NhbGUsIG11bHRpcGx5KVxue1xuICAgIHZhciBtYXRyaXggPSBbXG4gICAgICAgIHNjYWxlLCBzY2FsZSwgc2NhbGUsIDAsIDAsXG4gICAgICAgIHNjYWxlLCBzY2FsZSwgc2NhbGUsIDAsIDAsXG4gICAgICAgIHNjYWxlLCBzY2FsZSwgc2NhbGUsIDAsIDAsXG4gICAgICAgIDAsIDAsIDAsIDEsIDBcbiAgICBdO1xuXG4gICAgdGhpcy5fbG9hZE1hdHJpeChtYXRyaXgsIG11bHRpcGx5KTtcbn07XG4vL0FtZXJpY2FuaXplZCBhbGlhc1xuQ29sb3JNYXRyaXhGaWx0ZXIucHJvdG90eXBlLmdyYXlzY2FsZSA9IENvbG9yTWF0cml4RmlsdGVyLnByb3RvdHlwZS5ncmV5c2NhbGU7XG5cbi8qKlxuICogU2V0IHRoZSBibGFjayBhbmQgd2hpdGUgbWF0cmljZVxuICogTXVsdGlwbHkgdGhlIGN1cnJlbnQgbWF0cml4XG4gKlxuICogQHBhcmFtIG11bHRpcGx5IHtib29sZWFufSByZWZlciB0byAuX2xvYWRNYXRyaXgoKSBtZXRob2RcbiAqL1xuQ29sb3JNYXRyaXhGaWx0ZXIucHJvdG90eXBlLmJsYWNrQW5kV2hpdGUgPSBmdW5jdGlvbiAobXVsdGlwbHkpXG57XG4gICAgdmFyIG1hdHJpeCA9IFtcbiAgICAgICAgMC4zLCAwLjYsIDAuMSwgMCwgMCxcbiAgICAgICAgMC4zLCAwLjYsIDAuMSwgMCwgMCxcbiAgICAgICAgMC4zLCAwLjYsIDAuMSwgMCwgMCxcbiAgICAgICAgMCwgMCwgMCwgMSwgMFxuICAgIF07XG5cbiAgICB0aGlzLl9sb2FkTWF0cml4KG1hdHJpeCwgbXVsdGlwbHkpO1xufTtcblxuLyoqXG4gKiBTZXQgdGhlIGh1ZSBwcm9wZXJ0eSBvZiB0aGUgY29sb3JcbiAqXG4gKiBAcGFyYW0gcm90YXRpb24ge251bWJlcn0gaW4gZGVncmVlc1xuICogQHBhcmFtIG11bHRpcGx5IHtib29sZWFufSByZWZlciB0byAuX2xvYWRNYXRyaXgoKSBtZXRob2RcbiAqL1xuQ29sb3JNYXRyaXhGaWx0ZXIucHJvdG90eXBlLmh1ZSA9IGZ1bmN0aW9uIChyb3RhdGlvbiwgbXVsdGlwbHkpXG57XG4gICAgcm90YXRpb24gPSAocm90YXRpb24gfHwgMCkgLyAxODAgKiBNYXRoLlBJO1xuICAgIHZhciBjb3MgPSBNYXRoLmNvcyhyb3RhdGlvbiksXG4gICAgICAgIHNpbiA9IE1hdGguc2luKHJvdGF0aW9uKTtcblxuICAgIC8vIGx1bWluYW5jZVJlZCwgbHVtaW5hbmNlR3JlZW4sIGx1bWluYW5jZUJsdWVcbiAgICB2YXIgbHVtUiA9IDAuMjEzLCAvLyBvciAwLjMwODZcbiAgICAgICAgbHVtRyA9IDAuNzE1LCAvLyBvciAwLjYwOTRcbiAgICAgICAgbHVtQiA9IDAuMDcyOyAvLyBvciAwLjA4MjBcblxuICAgIHZhciBtYXRyaXggPSBbXG4gICAgICAgIGx1bVIgKyBjb3MgKiAoMSAtIGx1bVIpICsgc2luICogKC1sdW1SKSwgbHVtRyArIGNvcyAqICgtbHVtRykgKyBzaW4gKiAoLWx1bUcpLCBsdW1CICsgY29zICogKC1sdW1CKSArIHNpbiAqICgxIC0gbHVtQiksIDAsIDAsXG4gICAgICAgIGx1bVIgKyBjb3MgKiAoLWx1bVIpICsgc2luICogKDAuMTQzKSwgbHVtRyArIGNvcyAqICgxIC0gbHVtRykgKyBzaW4gKiAoMC4xNDApLCBsdW1CICsgY29zICogKC1sdW1CKSArIHNpbiAqICgtMC4yODMpLCAwLCAwLFxuICAgICAgICBsdW1SICsgY29zICogKC1sdW1SKSArIHNpbiAqICgtKDEgLSBsdW1SKSksIGx1bUcgKyBjb3MgKiAoLWx1bUcpICsgc2luICogKGx1bUcpLCBsdW1CICsgY29zICogKDEgLSBsdW1CKSArIHNpbiAqIChsdW1CKSwgMCwgMCxcbiAgICAgICAgMCwgMCwgMCwgMSwgMFxuICAgIF07XG5cbiAgICB0aGlzLl9sb2FkTWF0cml4KG1hdHJpeCwgbXVsdGlwbHkpO1xufTtcblxuXG4vKipcbiAqIFNldCB0aGUgY29udHJhc3QgbWF0cml4LCBpbmNyZWFzZSB0aGUgc2VwYXJhdGlvbiBiZXR3ZWVuIGRhcmsgYW5kIGJyaWdodFxuICogSW5jcmVhc2UgY29udHJhc3QgOiBzaGFkb3dzIGRhcmtlciBhbmQgaGlnaGxpZ2h0cyBicmlnaHRlclxuICogRGVjcmVhc2UgY29udHJhc3QgOiBicmluZyB0aGUgc2hhZG93cyB1cCBhbmQgdGhlIGhpZ2hsaWdodHMgZG93blxuICpcbiAqIEBwYXJhbSBhbW91bnQge251bWJlcn0gdmFsdWUgb2YgdGhlIGNvbnRyYXN0XG4gKiBAcGFyYW0gbXVsdGlwbHkge2Jvb2xlYW59IHJlZmVyIHRvIC5fbG9hZE1hdHJpeCgpIG1ldGhvZFxuICovXG5Db2xvck1hdHJpeEZpbHRlci5wcm90b3R5cGUuY29udHJhc3QgPSBmdW5jdGlvbiAoYW1vdW50LCBtdWx0aXBseSlcbntcbiAgICB2YXIgdiA9IChhbW91bnQgfHwgMCkgKyAxO1xuICAgIHZhciBvID0gLTEyOCAqICh2IC0gMSk7XG5cbiAgICB2YXIgbWF0cml4ID0gW1xuICAgICAgICB2LCAwLCAwLCAwLCBvLFxuICAgICAgICAwLCB2LCAwLCAwLCBvLFxuICAgICAgICAwLCAwLCB2LCAwLCBvLFxuICAgICAgICAwLCAwLCAwLCAxLCAwXG4gICAgXTtcblxuICAgIHRoaXMuX2xvYWRNYXRyaXgobWF0cml4LCBtdWx0aXBseSk7XG59O1xuXG4vKipcbiAqIFNldCB0aGUgc2F0dXJhdGlvbiBtYXRyaXgsIGluY3JlYXNlIHRoZSBzZXBhcmF0aW9uIGJldHdlZW4gY29sb3JzXG4gKiBJbmNyZWFzZSBzYXR1cmF0aW9uIDogaW5jcmVhc2UgY29udHJhc3QsIGJyaWdodG5lc3MsIGFuZCBzaGFycG5lc3NcbiAqXG4gKiBAcGFyYW0gYW1vdW50IHtudW1iZXJ9XG4gKiBAcGFyYW0gbXVsdGlwbHkge2Jvb2xlYW59IHJlZmVyIHRvIC5fbG9hZE1hdHJpeCgpIG1ldGhvZFxuICovXG5Db2xvck1hdHJpeEZpbHRlci5wcm90b3R5cGUuc2F0dXJhdGUgPSBmdW5jdGlvbiAoYW1vdW50LCBtdWx0aXBseSlcbntcbiAgICB2YXIgeCA9IChhbW91bnQgfHwgMCkgKiAyIC8gMyArIDE7XG4gICAgdmFyIHkgPSAoKHggLSAxKSAqIC0wLjUpO1xuXG4gICAgdmFyIG1hdHJpeCA9IFtcbiAgICAgICAgeCwgeSwgeSwgMCwgMCxcbiAgICAgICAgeSwgeCwgeSwgMCwgMCxcbiAgICAgICAgeSwgeSwgeCwgMCwgMCxcbiAgICAgICAgMCwgMCwgMCwgMSwgMFxuICAgIF07XG5cbiAgICB0aGlzLl9sb2FkTWF0cml4KG1hdHJpeCwgbXVsdGlwbHkpO1xufTtcblxuLyoqXG4gKiBEZXNhdHVyYXRlIGltYWdlIChyZW1vdmUgY29sb3IpXG4gKlxuICogQ2FsbCB0aGUgc2F0dXJhdGUgZnVuY3Rpb25cbiAqXG4gKiBAcGFyYW0gbXVsdGlwbHkge2Jvb2xlYW59IHJlZmVyIHRvIC5fbG9hZE1hdHJpeCgpIG1ldGhvZFxuICovXG5Db2xvck1hdHJpeEZpbHRlci5wcm90b3R5cGUuZGVzYXR1cmF0ZSA9IGZ1bmN0aW9uIChtdWx0aXBseSkgLy8ganNoaW50IHVudXNlZDpmYWxzZVxue1xuICAgIHRoaXMuc2F0dXJhdGUoLTEpO1xufTtcblxuLyoqXG4gKiBOZWdhdGl2ZSBpbWFnZSAoaW52ZXJzZSBvZiBjbGFzc2ljIHJnYiBtYXRyaXgpXG4gKlxuICogQHBhcmFtIG11bHRpcGx5IHtib29sZWFufSByZWZlciB0byAuX2xvYWRNYXRyaXgoKSBtZXRob2RcbiAqL1xuQ29sb3JNYXRyaXhGaWx0ZXIucHJvdG90eXBlLm5lZ2F0aXZlID0gZnVuY3Rpb24gKG11bHRpcGx5KVxue1xuICAgIHZhciBtYXRyaXggPSBbXG4gICAgICAgIDAsIDEsIDEsIDAsIDAsXG4gICAgICAgIDEsIDAsIDEsIDAsIDAsXG4gICAgICAgIDEsIDEsIDAsIDAsIDAsXG4gICAgICAgIDAsIDAsIDAsIDEsIDBcbiAgICBdO1xuXG4gICAgdGhpcy5fbG9hZE1hdHJpeChtYXRyaXgsIG11bHRpcGx5KTtcbn07XG5cbi8qKlxuICogU2VwaWEgaW1hZ2VcbiAqXG4gKiBAcGFyYW0gbXVsdGlwbHkge2Jvb2xlYW59IHJlZmVyIHRvIC5fbG9hZE1hdHJpeCgpIG1ldGhvZFxuICovXG5Db2xvck1hdHJpeEZpbHRlci5wcm90b3R5cGUuc2VwaWEgPSBmdW5jdGlvbiAobXVsdGlwbHkpXG57XG4gICAgdmFyIG1hdHJpeCA9IFtcbiAgICAgICAgMC4zOTMsIDAuNzY4OTk5OSwgMC4xODg5OTk5OSwgMCwgMCxcbiAgICAgICAgMC4zNDksIDAuNjg1OTk5OSwgMC4xNjc5OTk5OSwgMCwgMCxcbiAgICAgICAgMC4yNzIsIDAuNTMzOTk5OSwgMC4xMzA5OTk5OSwgMCwgMCxcbiAgICAgICAgMCwgMCwgMCwgMSwgMFxuICAgIF07XG5cbiAgICB0aGlzLl9sb2FkTWF0cml4KG1hdHJpeCwgbXVsdGlwbHkpO1xufTtcblxuLyoqXG4gKiBDb2xvciBtb3Rpb24gcGljdHVyZSBwcm9jZXNzIGludmVudGVkIGluIDE5MTYgKHRoYW5rcyBEb21pbmljIFN6YWJsZXdza2kpXG4gKlxuICogQHBhcmFtIG11bHRpcGx5IHtib29sZWFufSByZWZlciB0byAuX2xvYWRNYXRyaXgoKSBtZXRob2RcbiAqL1xuQ29sb3JNYXRyaXhGaWx0ZXIucHJvdG90eXBlLnRlY2huaWNvbG9yID0gZnVuY3Rpb24gKG11bHRpcGx5KVxue1xuICAgIHZhciBtYXRyaXggPSBbXG4gICAgICAgIDEuOTEyNTI3Nzg5MTQ1NjA4MywgLTAuODU0NTM0NDk3Njk1MTY0NSwgLTAuMDkxNTU1MDg0ODI3NTU1ODUsIDAsIDExLjc5MzYwMzQzNDM3NzMzNyxcbiAgICAgICAgLTAuMzA4NzgzMzM4NTkyODA5NywgMS43NjU4OTA4NTU1NDU4NDI4LCAtMC4xMDYwMTc0MzA3NDcyMjI0NSwgMCwgLTcwLjM1MjA1MTYxNDYxMzk4LFxuICAgICAgICAtMC4yMzExMDMzNzc1NDg2MTYsIC0wLjc1MDE4OTkxOTc0NDAyMTIsIDEuODQ3NTk3ODE2MTA4MTg5LCAwLCAzMC45NTA5NDA4Njk0OTExMzgsXG4gICAgICAgIDAsIDAsIDAsIDEsIDBcbiAgICBdO1xuXG4gICAgdGhpcy5fbG9hZE1hdHJpeChtYXRyaXgsIG11bHRpcGx5KTtcbn07XG5cbi8qKlxuICogUG9sYXJvaWQgZmlsdGVyXG4gKlxuICogQHBhcmFtIG11bHRpcGx5IHtib29sZWFufSByZWZlciB0byAuX2xvYWRNYXRyaXgoKSBtZXRob2RcbiAqL1xuQ29sb3JNYXRyaXhGaWx0ZXIucHJvdG90eXBlLnBvbGFyb2lkID0gZnVuY3Rpb24gKG11bHRpcGx5KVxue1xuICAgIHZhciBtYXRyaXggPSBbXG4gICAgICAgIDEuNDM4LCAtMC4wNjIsIC0wLjA2MiwgMCwgMCxcbiAgICAgICAgLTAuMTIyLCAxLjM3OCwgLTAuMTIyLCAwLCAwLFxuICAgICAgICAtMC4wMTYsIC0wLjAxNiwgMS40ODMsIDAsIDAsXG4gICAgICAgIDAsIDAsIDAsIDEsIDBcbiAgICBdO1xuXG4gICAgdGhpcy5fbG9hZE1hdHJpeChtYXRyaXgsIG11bHRpcGx5KTtcbn07XG5cbi8qKlxuICogRmlsdGVyIHdobyB0cmFuc2Zvcm1zIDogUmVkIC0+IEJsdWUgYW5kIEJsdWUgLT4gUmVkXG4gKlxuICogQHBhcmFtIG11bHRpcGx5IHtib29sZWFufSByZWZlciB0byAuX2xvYWRNYXRyaXgoKSBtZXRob2RcbiAqL1xuQ29sb3JNYXRyaXhGaWx0ZXIucHJvdG90eXBlLnRvQkdSID0gZnVuY3Rpb24gKG11bHRpcGx5KVxue1xuICAgIHZhciBtYXRyaXggPSBbXG4gICAgICAgIDAsIDAsIDEsIDAsIDAsXG4gICAgICAgIDAsIDEsIDAsIDAsIDAsXG4gICAgICAgIDEsIDAsIDAsIDAsIDAsXG4gICAgICAgIDAsIDAsIDAsIDEsIDBcbiAgICBdO1xuXG4gICAgdGhpcy5fbG9hZE1hdHJpeChtYXRyaXgsIG11bHRpcGx5KTtcbn07XG5cbi8qKlxuICogQ29sb3IgcmV2ZXJzYWwgZmlsbSBpbnRyb2R1Y2VkIGJ5IEVhc3RtYW4gS29kYWsgaW4gMTkzNS4gKHRoYW5rcyBEb21pbmljIFN6YWJsZXdza2kpXG4gKlxuICogQHBhcmFtIG11bHRpcGx5IHtib29sZWFufSByZWZlciB0byAuX2xvYWRNYXRyaXgoKSBtZXRob2RcbiAqL1xuQ29sb3JNYXRyaXhGaWx0ZXIucHJvdG90eXBlLmtvZGFjaHJvbWUgPSBmdW5jdGlvbiAobXVsdGlwbHkpXG57XG4gICAgdmFyIG1hdHJpeCA9IFtcbiAgICAgICAgMS4xMjg1NTgyMzk2NTkzNTI1LCAtMC4zOTY3MzgyMjgzNjAxMzQ4LCAtMC4wMzk5MjU1OTE3MjkyMTc5MywgMCwgNjMuNzI5NTg3NjIxOTY1MDIsXG4gICAgICAgIC0wLjE2NDA0MzM5OTYyMjQ0NjE2LCAxLjA4MzUyNTE1NjYyOTEzMDQsIC0wLjA1NDk4ODA1MTE1NjMzMTMyLCAwLCAyNC43MzI0MDc4OTY3MDYyMDMsXG4gICAgICAgIC0wLjE2Nzg2MDEwNzA2MTU1NzYzLCAtMC41NjAzNDE2Mjc3Njk1MjQ4LCAxLjYwMTQ4NTA3NjE5NjQ5NDMsIDAsIDM1LjYyOTgyODA3NDYwOTQ2LFxuICAgICAgICAwLCAwLCAwLCAxLCAwXG4gICAgXTtcblxuICAgIHRoaXMuX2xvYWRNYXRyaXgobWF0cml4LCBtdWx0aXBseSk7XG59O1xuXG4vKipcbiAqIEJyb3duIGRlbGljaW91cyBicm93bmkgZmlsdGVyICh0aGFua3MgRG9taW5pYyBTemFibGV3c2tpKVxuICpcbiAqIEBwYXJhbSBtdWx0aXBseSB7Ym9vbGVhbn0gcmVmZXIgdG8gLl9sb2FkTWF0cml4KCkgbWV0aG9kXG4gKi9cbkNvbG9yTWF0cml4RmlsdGVyLnByb3RvdHlwZS5icm93bmkgPSBmdW5jdGlvbiAobXVsdGlwbHkpXG57XG4gICAgdmFyIG1hdHJpeCA9IFtcbiAgICAgICAgMC41OTk3MDIzNDk4MTU5NzE1LCAwLjM0NTUzMjQzMDQ4MzkxMjYzLCAtMC4yNzA4Mjk4Njc0NTM4MDQyLCAwLCA0Ny40MzE5Mjg1NTYwMDg3MyxcbiAgICAgICAgLTAuMDM3NzAzMjQ5ODM3NzgzMTU3LCAwLjg2MDk1Nzc1ODc5OTI2NDEsIDAuMTUwNTk1NTIzODg0NTk5MTMsIDAsIC0zNi45Njg0MTQ5ODMxOTEyNyxcbiAgICAgICAgMC4yNDExMzYzNTEyODE1MzMzNSwgLTAuMDc0NDEwMzc5MDg0MjI0OTIsIDAuNDQ5NzIxODIwNjQ4NzcxNTMsIDAsIC03LjU2MjA3NTI3NzU5MTI4MyxcbiAgICAgICAgMCwgMCwgMCwgMSwgMFxuICAgIF07XG5cbiAgICB0aGlzLl9sb2FkTWF0cml4KG1hdHJpeCwgbXVsdGlwbHkpO1xufTtcblxuLypcbiAqIFZpbnRhZ2UgZmlsdGVyICh0aGFua3MgRG9taW5pYyBTemFibGV3c2tpKVxuICpcbiAqIEBwYXJhbSBtdWx0aXBseSB7Ym9vbGVhbn0gcmVmZXIgdG8gLl9sb2FkTWF0cml4KCkgbWV0aG9kXG4gKi9cbkNvbG9yTWF0cml4RmlsdGVyLnByb3RvdHlwZS52aW50YWdlID0gZnVuY3Rpb24gKG11bHRpcGx5KVxue1xuICAgIHZhciBtYXRyaXggPSBbXG4gICAgICAgIDAuNjI3OTM0NTYzNTYwNTk5NCwgMC4zMjAyMTgzNDIwODE5MzY3LCAtMC4wMzk2NTQwODIxMTMxMjQ1MywgMCwgOS42NTEyODU4MzUyOTQxMjMsXG4gICAgICAgIDAuMDI1NzgzOTc3MDQ4MDg4NjgsIDAuNjQ0MTE4ODY0NDM3NDc3MSwgMC4wMzI1OTEyNzYxNjE0OTI5NCwgMCwgNy40NjI4MjkxNzY0NzA1OTEsXG4gICAgICAgIDAuMDQ2NjA1NTU1Njc4MjcxOSwgLTAuMDg1MTIzMjk4NzI0Nzg5MSwgMC41MjQxNjQ4MDE4NzAwNDY1LCAwLCA1LjE1OTE5MDU4ODIzNTI5NixcbiAgICAgICAgMCwgMCwgMCwgMSwgMFxuICAgIF07XG5cbiAgICB0aGlzLl9sb2FkTWF0cml4KG1hdHJpeCwgbXVsdGlwbHkpO1xufTtcblxuLypcbiAqIFdlIGRvbid0IGtub3cgZXhhY3RseSB3aGF0IGl0IGRvZXMsIGtpbmQgb2YgZ3JhZGllbnQgbWFwLCBidXQgZnVubnkgdG8gcGxheSB3aXRoIVxuICpcbiAqIEBwYXJhbSBkZXNhdHVyYXRpb24ge251bWJlcn1cbiAqIEBwYXJhbSB0b25lZCB7bnVtYmVyfVxuICogQHBhcmFtIGxpZ2h0Q29sb3Ige3N0cmluZ30gKGV4YW1wbGUgOiBcIjB4RkZFNTgwXCIpXG4gKiBAcGFyYW0gZGFya0NvbG9yIHtzdHJpbmd9ICAoZXhhbXBsZSA6IFwiMHhGRkU1ODBcIilcbiAqXG4gKiBAcGFyYW0gbXVsdGlwbHkge2Jvb2xlYW59IHJlZmVyIHRvIC5fbG9hZE1hdHJpeCgpIG1ldGhvZFxuICovXG5Db2xvck1hdHJpeEZpbHRlci5wcm90b3R5cGUuY29sb3JUb25lID0gZnVuY3Rpb24gKGRlc2F0dXJhdGlvbiwgdG9uZWQsIGxpZ2h0Q29sb3IsIGRhcmtDb2xvciwgbXVsdGlwbHkpXG57XG4gICAgZGVzYXR1cmF0aW9uID0gZGVzYXR1cmF0aW9uIHx8IDAuMjtcbiAgICB0b25lZCA9IHRvbmVkIHx8IDAuMTU7XG4gICAgbGlnaHRDb2xvciA9IGxpZ2h0Q29sb3IgfHwgMHhGRkU1ODA7XG4gICAgZGFya0NvbG9yID0gZGFya0NvbG9yIHx8IDB4MzM4MDAwO1xuXG4gICAgdmFyIGxSID0gKChsaWdodENvbG9yID4+IDE2KSAmIDB4RkYpIC8gMjU1O1xuICAgIHZhciBsRyA9ICgobGlnaHRDb2xvciA+PiA4KSAmIDB4RkYpIC8gMjU1O1xuICAgIHZhciBsQiA9IChsaWdodENvbG9yICYgMHhGRikgLyAyNTU7XG5cbiAgICB2YXIgZFIgPSAoKGRhcmtDb2xvciA+PiAxNikgJiAweEZGKSAvIDI1NTtcbiAgICB2YXIgZEcgPSAoKGRhcmtDb2xvciA+PiA4KSAmIDB4RkYpIC8gMjU1O1xuICAgIHZhciBkQiA9IChkYXJrQ29sb3IgJiAweEZGKSAvIDI1NTtcblxuICAgIHZhciBtYXRyaXggPSBbXG4gICAgICAgIDAuMywgMC41OSwgMC4xMSwgMCwgMCxcbiAgICAgICAgbFIsIGxHLCBsQiwgZGVzYXR1cmF0aW9uLCAwLFxuICAgICAgICBkUiwgZEcsIGRCLCB0b25lZCwgMCxcbiAgICAgICAgbFIgLSBkUiwgbEcgLSBkRywgbEIgLSBkQiwgMCwgMFxuICAgIF07XG5cbiAgICB0aGlzLl9sb2FkTWF0cml4KG1hdHJpeCwgbXVsdGlwbHkpO1xufTtcblxuLypcbiAqIE5pZ2h0IGVmZmVjdFxuICpcbiAqIEBwYXJhbSBpbnRlbnNpdHkge251bWJlcn1cbiAqIEBwYXJhbSBtdWx0aXBseSB7Ym9vbGVhbn0gcmVmZXIgdG8gLl9sb2FkTWF0cml4KCkgbWV0aG9kXG4gKi9cbkNvbG9yTWF0cml4RmlsdGVyLnByb3RvdHlwZS5uaWdodCA9IGZ1bmN0aW9uIChpbnRlbnNpdHksIG11bHRpcGx5KVxue1xuICAgIGludGVuc2l0eSA9IGludGVuc2l0eSB8fCAwLjE7XG4gICAgdmFyIG1hdHJpeCA9IFtcbiAgICAgICAgaW50ZW5zaXR5ICogKCAtMi4wKSwgLWludGVuc2l0eSwgMCwgMCwgMCxcbiAgICAgICAgLWludGVuc2l0eSwgMCwgaW50ZW5zaXR5LCAwLCAwLFxuICAgICAgICAwLCBpbnRlbnNpdHksIGludGVuc2l0eSAqIDIuMCwgMCwgMCxcbiAgICAgICAgMCwgMCwgMCwgMSwgMFxuICAgIF07XG5cbiAgICB0aGlzLl9sb2FkTWF0cml4KG1hdHJpeCwgbXVsdGlwbHkpO1xufTtcblxuXG4vKlxuICogUHJlZGF0b3IgZWZmZWN0XG4gKlxuICogRXJhc2UgdGhlIGN1cnJlbnQgbWF0cml4IGJ5IHNldHRpbmcgYSBuZXcgaW5kZXBlbnQgb25lXG4gKlxuICogQHBhcmFtIGFtb3VudCB7bnVtYmVyfSBob3cgbXVjaCB0aGUgcHJlZGF0b3IgZmVlbHMgaGlzIGZ1dHVyZSB2aWN0aW1cbiAqIEBwYXJhbSBtdWx0aXBseSB7Ym9vbGVhbn0gcmVmZXIgdG8gLl9sb2FkTWF0cml4KCkgbWV0aG9kXG4gKi9cbkNvbG9yTWF0cml4RmlsdGVyLnByb3RvdHlwZS5wcmVkYXRvciA9IGZ1bmN0aW9uIChhbW91bnQsIG11bHRpcGx5KVxue1xuICAgIHZhciBtYXRyaXggPSBbXG4gICAgICAgIDExLjIyNDEzMDYzMDQ5MzE2NCAqIGFtb3VudCwgLTQuNzk0NDg2OTk5NTExNzE5ICogYW1vdW50LCAtMi44NzQ2MTE4NTQ1NTMyMjI3ICogYW1vdW50LCAwICogYW1vdW50LCAwLjQwMzQyNDM4MjIwOTc3NzgzICogYW1vdW50LFxuICAgICAgICAtMy42MzMwNjk3NTM2NDY4NTA2ICogYW1vdW50LCA5LjE5MzE1NzE5NjA0NDkyMiAqIGFtb3VudCwgLTIuOTUxODEwODM2NzkxOTkyICogYW1vdW50LCAwICogYW1vdW50LCAtMS4zMTYxMzUwNDg4NjYyNzIgKiBhbW91bnQsXG4gICAgICAgIC0zLjIxODQxOTc5MDI2Nzk0NDMgKiBhbW91bnQsIC00LjIzNzUwMzA1MTc1NzgxMjUgKiBhbW91bnQsIDcuNDc2NDQ4MDU5MDgyMDMxICogYW1vdW50LCAwICogYW1vdW50LCAwLjgwNDQ0NTkyMjM3NDcyNTMgKiBhbW91bnQsXG4gICAgICAgIDAsIDAsIDAsIDEsIDBcbiAgICBdO1xuXG4gICAgdGhpcy5fbG9hZE1hdHJpeChtYXRyaXgsIG11bHRpcGx5KTtcbn07XG5cbi8qXG4gKiBMU0QgZWZmZWN0XG4gKlxuICogTXVsdGlwbHkgdGhlIGN1cnJlbnQgbWF0cml4XG4gKlxuICogQHBhcmFtIGFtb3VudCB7bnVtYmVyfSBIb3cgY3JhenkgaXMgeW91ciBlZmZlY3RcbiAqIEBwYXJhbSBtdWx0aXBseSB7Ym9vbGVhbn0gcmVmZXIgdG8gLl9sb2FkTWF0cml4KCkgbWV0aG9kXG4gKi9cbkNvbG9yTWF0cml4RmlsdGVyLnByb3RvdHlwZS5sc2QgPSBmdW5jdGlvbiAobXVsdGlwbHkpXG57XG4gICAgdmFyIG1hdHJpeCA9IFtcbiAgICAgICAgMiwgLTAuNCwgMC41LCAwLCAwLFxuICAgICAgICAtMC41LCAyLCAtMC40LCAwLCAwLFxuICAgICAgICAtMC40LCAtMC41LCAzLCAwLCAwLFxuICAgICAgICAwLCAwLCAwLCAxLCAwXG4gICAgXTtcblxuICAgIHRoaXMuX2xvYWRNYXRyaXgobWF0cml4LCBtdWx0aXBseSk7XG59O1xuXG4vKlxuICogRXJhc2UgdGhlIGN1cnJlbnQgbWF0cml4IGJ5IHNldHRpbmcgdGhlIGRlZmF1bHQgb25lXG4gKlxuICovXG5Db2xvck1hdHJpeEZpbHRlci5wcm90b3R5cGUucmVzZXQgPSBmdW5jdGlvbiAoKVxue1xuICAgIHZhciBtYXRyaXggPSBbXG4gICAgICAgIDEsIDAsIDAsIDAsIDAsXG4gICAgICAgIDAsIDEsIDAsIDAsIDAsXG4gICAgICAgIDAsIDAsIDEsIDAsIDAsXG4gICAgICAgIDAsIDAsIDAsIDEsIDBcbiAgICBdO1xuXG4gICAgdGhpcy5fbG9hZE1hdHJpeChtYXRyaXgsIGZhbHNlKTtcbn07XG5cblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoQ29sb3JNYXRyaXhGaWx0ZXIucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgbWF0cml4IG9mIHRoZSBjb2xvciBtYXRyaXggZmlsdGVyXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJbXX1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLkNvbG9yTWF0cml4RmlsdGVyI1xuICAgICAqIEBkZWZhdWx0IFsxLCAwLCAwLCAwLCAwLCAwLCAxLCAwLCAwLCAwLCAwLCAwLCAxLCAwLCAwLCAwLCAwLCAwLCAxLCAwXVxuICAgICAqL1xuICAgIG1hdHJpeDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVuaWZvcm1zLm0udmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLm0udmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi8uLi9jb3JlJyk7XG4vLyBAc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9zdWJzdGFjay9icmZzL2lzc3Vlcy8yNVxuXG5cbi8qKlxuICogVGhpcyBsb3dlcnMgdGhlIGNvbG9yIGRlcHRoIG9mIHlvdXIgaW1hZ2UgYnkgdGhlIGdpdmVuIGFtb3VudCwgcHJvZHVjaW5nIGFuIGltYWdlIHdpdGggYSBzbWFsbGVyIHBhbGV0dGUuXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLkFic3RyYWN0RmlsdGVyXG4gKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzXG4gKi9cbmZ1bmN0aW9uIENvbG9yU3RlcEZpbHRlcigpXG57XG4gICAgY29yZS5BYnN0cmFjdEZpbHRlci5jYWxsKHRoaXMsXG4gICAgICAgIC8vIHZlcnRleCBzaGFkZXJcbiAgICAgICAgbnVsbCxcbiAgICAgICAgLy8gZnJhZ21lbnQgc2hhZGVyXG4gICAgICAgIFwicHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XFxuXFxudmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7XFxuXFxudW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXI7XFxudW5pZm9ybSBmbG9hdCBzdGVwO1xcblxcbnZvaWQgbWFpbih2b2lkKVxcbntcXG4gICAgdmVjNCBjb2xvciA9IHRleHR1cmUyRCh1U2FtcGxlciwgdlRleHR1cmVDb29yZCk7XFxuXFxuICAgIGNvbG9yID0gZmxvb3IoY29sb3IgKiBzdGVwKSAvIHN0ZXA7XFxuXFxuICAgIGdsX0ZyYWdDb2xvciA9IGNvbG9yO1xcbn1cXG5cIixcbiAgICAgICAgLy8gY3VzdG9tIHVuaWZvcm1zXG4gICAgICAgIHtcbiAgICAgICAgICAgIHN0ZXA6IHsgdHlwZTogJzFmJywgdmFsdWU6IDUgfVxuICAgICAgICB9XG4gICAgKTtcbn1cblxuQ29sb3JTdGVwRmlsdGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoY29yZS5BYnN0cmFjdEZpbHRlci5wcm90b3R5cGUpO1xuQ29sb3JTdGVwRmlsdGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IENvbG9yU3RlcEZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gQ29sb3JTdGVwRmlsdGVyO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhDb2xvclN0ZXBGaWx0ZXIucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogVGhlIG51bWJlciBvZiBzdGVwcyB0byByZWR1Y2UgdGhlIHBhbGV0dGUgYnkuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5Db2xvclN0ZXBGaWx0ZXIjXG4gICAgICovXG4gICAgc3RlcDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVuaWZvcm1zLnN0ZXAudmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLnN0ZXAudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi8uLi9jb3JlJyk7XG4vLyBAc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9zdWJzdGFjay9icmZzL2lzc3Vlcy8yNVxuXG5cbi8qKlxuICogVGhlIENvbnZvbHV0aW9uRmlsdGVyIGNsYXNzIGFwcGxpZXMgYSBtYXRyaXggY29udm9sdXRpb24gZmlsdGVyIGVmZmVjdC5cbiAqIEEgY29udm9sdXRpb24gY29tYmluZXMgcGl4ZWxzIGluIHRoZSBpbnB1dCBpbWFnZSB3aXRoIG5laWdoYm9yaW5nIHBpeGVscyB0byBwcm9kdWNlIGEgbmV3IGltYWdlLlxuICogQSB3aWRlIHZhcmlldHkgb2YgaW1hZ2UgZWZmZWN0cyBjYW4gYmUgYWNoaWV2ZWQgdGhyb3VnaCBjb252b2x1dGlvbnMsIGluY2x1ZGluZyBibHVycmluZywgZWRnZVxuICogZGV0ZWN0aW9uLCBzaGFycGVuaW5nLCBlbWJvc3NpbmcsIGFuZCBiZXZlbGluZy4gVGhlIG1hdHJpeCBzaG91bGQgYmUgc3BlY2lmaWVkIGFzIGEgOSBwb2ludCBBcnJheS5cbiAqIFNlZSBodHRwOi8vZG9jcy5naW1wLm9yZy9lbi9wbHVnLWluLWNvbnZtYXRyaXguaHRtbCBmb3IgbW9yZSBpbmZvLlxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5BYnN0cmFjdEZpbHRlclxuICogQG1lbWJlcm9mIFBJWEkuZmlsdGVyc1xuICogQHBhcmFtIG1hdHJpeCB7bnVtYmVyW119IEFuIGFycmF5IG9mIHZhbHVlcyB1c2VkIGZvciBtYXRyaXggdHJhbnNmb3JtYXRpb24uIFNwZWNpZmllZCBhcyBhIDkgcG9pbnQgQXJyYXkuXG4gKiBAcGFyYW0gd2lkdGgge251bWJlcn0gV2lkdGggb2YgdGhlIG9iamVjdCB5b3UgYXJlIHRyYW5zZm9ybWluZ1xuICogQHBhcmFtIGhlaWdodCB7bnVtYmVyfSBIZWlnaHQgb2YgdGhlIG9iamVjdCB5b3UgYXJlIHRyYW5zZm9ybWluZ1xuICovXG5mdW5jdGlvbiBDb252b2x1dGlvbkZpbHRlcihtYXRyaXgsIHdpZHRoLCBoZWlnaHQpXG57XG4gICAgY29yZS5BYnN0cmFjdEZpbHRlci5jYWxsKHRoaXMsXG4gICAgICAgIC8vIHZlcnRleCBzaGFkZXJcbiAgICAgICAgbnVsbCxcbiAgICAgICAgLy8gZnJhZ21lbnQgc2hhZGVyXG4gICAgICAgIFwicHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XFxuXFxudmFyeWluZyBtZWRpdW1wIHZlYzIgdlRleHR1cmVDb29yZDtcXG5cXG51bmlmb3JtIHNhbXBsZXIyRCB1U2FtcGxlcjtcXG51bmlmb3JtIHZlYzIgdGV4ZWxTaXplO1xcbnVuaWZvcm0gZmxvYXQgbWF0cml4WzldO1xcblxcbnZvaWQgbWFpbih2b2lkKVxcbntcXG4gICB2ZWM0IGMxMSA9IHRleHR1cmUyRCh1U2FtcGxlciwgdlRleHR1cmVDb29yZCAtIHRleGVsU2l6ZSk7IC8vIHRvcCBsZWZ0XFxuICAgdmVjNCBjMTIgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZlYzIodlRleHR1cmVDb29yZC54LCB2VGV4dHVyZUNvb3JkLnkgLSB0ZXhlbFNpemUueSkpOyAvLyB0b3AgY2VudGVyXFxuICAgdmVjNCBjMTMgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZlYzIodlRleHR1cmVDb29yZC54ICsgdGV4ZWxTaXplLngsIHZUZXh0dXJlQ29vcmQueSAtIHRleGVsU2l6ZS55KSk7IC8vIHRvcCByaWdodFxcblxcbiAgIHZlYzQgYzIxID0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2ZWMyKHZUZXh0dXJlQ29vcmQueCAtIHRleGVsU2l6ZS54LCB2VGV4dHVyZUNvb3JkLnkpKTsgLy8gbWlkIGxlZnRcXG4gICB2ZWM0IGMyMiA9IHRleHR1cmUyRCh1U2FtcGxlciwgdlRleHR1cmVDb29yZCk7IC8vIG1pZCBjZW50ZXJcXG4gICB2ZWM0IGMyMyA9IHRleHR1cmUyRCh1U2FtcGxlciwgdmVjMih2VGV4dHVyZUNvb3JkLnggKyB0ZXhlbFNpemUueCwgdlRleHR1cmVDb29yZC55KSk7IC8vIG1pZCByaWdodFxcblxcbiAgIHZlYzQgYzMxID0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2ZWMyKHZUZXh0dXJlQ29vcmQueCAtIHRleGVsU2l6ZS54LCB2VGV4dHVyZUNvb3JkLnkgKyB0ZXhlbFNpemUueSkpOyAvLyBib3R0b20gbGVmdFxcbiAgIHZlYzQgYzMyID0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2ZWMyKHZUZXh0dXJlQ29vcmQueCwgdlRleHR1cmVDb29yZC55ICsgdGV4ZWxTaXplLnkpKTsgLy8gYm90dG9tIGNlbnRlclxcbiAgIHZlYzQgYzMzID0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2VGV4dHVyZUNvb3JkICsgdGV4ZWxTaXplKTsgLy8gYm90dG9tIHJpZ2h0XFxuXFxuICAgZ2xfRnJhZ0NvbG9yID1cXG4gICAgICAgYzExICogbWF0cml4WzBdICsgYzEyICogbWF0cml4WzFdICsgYzEzICogbWF0cml4WzJdICtcXG4gICAgICAgYzIxICogbWF0cml4WzNdICsgYzIyICogbWF0cml4WzRdICsgYzIzICogbWF0cml4WzVdICtcXG4gICAgICAgYzMxICogbWF0cml4WzZdICsgYzMyICogbWF0cml4WzddICsgYzMzICogbWF0cml4WzhdO1xcblxcbiAgIGdsX0ZyYWdDb2xvci5hID0gYzIyLmE7XFxufVxcblwiLFxuICAgICAgICAvLyBjdXN0b20gdW5pZm9ybXNcbiAgICAgICAge1xuICAgICAgICAgICAgbWF0cml4OiAgICAgeyB0eXBlOiAnMWZ2JywgdmFsdWU6IG5ldyBGbG9hdDMyQXJyYXkobWF0cml4KSB9LFxuICAgICAgICAgICAgdGV4ZWxTaXplOiAgeyB0eXBlOiAndjInLCB2YWx1ZTogeyB4OiAxIC8gd2lkdGgsIHk6IDEgLyBoZWlnaHQgfSB9XG4gICAgICAgIH1cbiAgICApO1xufVxuXG5Db252b2x1dGlvbkZpbHRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuQWJzdHJhY3RGaWx0ZXIucHJvdG90eXBlKTtcbkNvbnZvbHV0aW9uRmlsdGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IENvbnZvbHV0aW9uRmlsdGVyO1xubW9kdWxlLmV4cG9ydHMgPSBDb252b2x1dGlvbkZpbHRlcjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoQ29udm9sdXRpb25GaWx0ZXIucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogQW4gYXJyYXkgb2YgdmFsdWVzIHVzZWQgZm9yIG1hdHJpeCB0cmFuc2Zvcm1hdGlvbi4gU3BlY2lmaWVkIGFzIGEgOSBwb2ludCBBcnJheS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcltdfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuQ29udm9sdXRpb25GaWx0ZXIjXG4gICAgICovXG4gICAgbWF0cml4OiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudW5pZm9ybXMubWF0cml4LnZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy5tYXRyaXgudmFsdWUgPSBuZXcgRmxvYXQzMkFycmF5KHZhbHVlKTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBXaWR0aCBvZiB0aGUgb2JqZWN0IHlvdSBhcmUgdHJhbnNmb3JtaW5nXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5Db252b2x1dGlvbkZpbHRlciNcbiAgICAgKi9cbiAgICB3aWR0aDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiAxL3RoaXMudW5pZm9ybXMudGV4ZWxTaXplLnZhbHVlLng7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLnRleGVsU2l6ZS52YWx1ZS54ID0gMS92YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBIZWlnaHQgb2YgdGhlIG9iamVjdCB5b3UgYXJlIHRyYW5zZm9ybWluZ1xuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuQ29udm9sdXRpb25GaWx0ZXIjXG4gICAgICovXG4gICAgaGVpZ2h0OiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIDEvdGhpcy51bmlmb3Jtcy50ZXhlbFNpemUudmFsdWUueTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudW5pZm9ybXMudGV4ZWxTaXplLnZhbHVlLnkgPSAxL3ZhbHVlO1xuICAgICAgICB9XG4gICAgfVxufSk7XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uLy4uL2NvcmUnKTtcbi8vIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL3N1YnN0YWNrL2JyZnMvaXNzdWVzLzI1XG5cblxuLyoqXG4gKiBBIENyb3NzIEhhdGNoIGVmZmVjdCBmaWx0ZXIuXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLkFic3RyYWN0RmlsdGVyXG4gKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzXG4gKi9cbmZ1bmN0aW9uIENyb3NzSGF0Y2hGaWx0ZXIoKVxue1xuICAgIGNvcmUuQWJzdHJhY3RGaWx0ZXIuY2FsbCh0aGlzLFxuICAgICAgICAvLyB2ZXJ0ZXggc2hhZGVyXG4gICAgICAgIG51bGwsXG4gICAgICAgIC8vIGZyYWdtZW50IHNoYWRlclxuICAgICAgICBcInByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xcblxcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xcblxcbnVuaWZvcm0gc2FtcGxlcjJEIHVTYW1wbGVyO1xcblxcbnZvaWQgbWFpbih2b2lkKVxcbntcXG4gICAgZmxvYXQgbHVtID0gbGVuZ3RoKHRleHR1cmUyRCh1U2FtcGxlciwgdlRleHR1cmVDb29yZC54eSkucmdiKTtcXG5cXG4gICAgZ2xfRnJhZ0NvbG9yID0gdmVjNCgxLjAsIDEuMCwgMS4wLCAxLjApO1xcblxcbiAgICBpZiAobHVtIDwgMS4wMClcXG4gICAge1xcbiAgICAgICAgaWYgKG1vZChnbF9GcmFnQ29vcmQueCArIGdsX0ZyYWdDb29yZC55LCAxMC4wKSA9PSAwLjApXFxuICAgICAgICB7XFxuICAgICAgICAgICAgZ2xfRnJhZ0NvbG9yID0gdmVjNCgwLjAsIDAuMCwgMC4wLCAxLjApO1xcbiAgICAgICAgfVxcbiAgICB9XFxuXFxuICAgIGlmIChsdW0gPCAwLjc1KVxcbiAgICB7XFxuICAgICAgICBpZiAobW9kKGdsX0ZyYWdDb29yZC54IC0gZ2xfRnJhZ0Nvb3JkLnksIDEwLjApID09IDAuMClcXG4gICAgICAgIHtcXG4gICAgICAgICAgICBnbF9GcmFnQ29sb3IgPSB2ZWM0KDAuMCwgMC4wLCAwLjAsIDEuMCk7XFxuICAgICAgICB9XFxuICAgIH1cXG5cXG4gICAgaWYgKGx1bSA8IDAuNTApXFxuICAgIHtcXG4gICAgICAgIGlmIChtb2QoZ2xfRnJhZ0Nvb3JkLnggKyBnbF9GcmFnQ29vcmQueSAtIDUuMCwgMTAuMCkgPT0gMC4wKVxcbiAgICAgICAge1xcbiAgICAgICAgICAgIGdsX0ZyYWdDb2xvciA9IHZlYzQoMC4wLCAwLjAsIDAuMCwgMS4wKTtcXG4gICAgICAgIH1cXG4gICAgfVxcblxcbiAgICBpZiAobHVtIDwgMC4zKVxcbiAgICB7XFxuICAgICAgICBpZiAobW9kKGdsX0ZyYWdDb29yZC54IC0gZ2xfRnJhZ0Nvb3JkLnkgLSA1LjAsIDEwLjApID09IDAuMClcXG4gICAgICAgIHtcXG4gICAgICAgICAgICBnbF9GcmFnQ29sb3IgPSB2ZWM0KDAuMCwgMC4wLCAwLjAsIDEuMCk7XFxuICAgICAgICB9XFxuICAgIH1cXG59XFxuXCJcbiAgICApO1xufVxuXG5Dcm9zc0hhdGNoRmlsdGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoY29yZS5BYnN0cmFjdEZpbHRlci5wcm90b3R5cGUpO1xuQ3Jvc3NIYXRjaEZpbHRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBDcm9zc0hhdGNoRmlsdGVyO1xubW9kdWxlLmV4cG9ydHMgPSBDcm9zc0hhdGNoRmlsdGVyO1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi8uLi9jb3JlJyk7XG4vLyBAc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9zdWJzdGFjay9icmZzL2lzc3Vlcy8yNVxuXG5cbi8qKlxuICogVGhlIERpc3BsYWNlbWVudEZpbHRlciBjbGFzcyB1c2VzIHRoZSBwaXhlbCB2YWx1ZXMgZnJvbSB0aGUgc3BlY2lmaWVkIHRleHR1cmUgKGNhbGxlZCB0aGUgZGlzcGxhY2VtZW50IG1hcCkgdG8gcGVyZm9ybSBhIGRpc3BsYWNlbWVudCBvZiBhbiBvYmplY3QuXG4gKiBZb3UgY2FuIHVzZSB0aGlzIGZpbHRlciB0byBhcHBseSBhbGwgbWFub3Igb2YgY3Jhenkgd2FycGluZyBlZmZlY3RzXG4gKiBDdXJyZW50bHkgdGhlIHIgcHJvcGVydHkgb2YgdGhlIHRleHR1cmUgaXMgdXNlZCB0byBvZmZzZXQgdGhlIHggYW5kIHRoZSBnIHByb3BlcnR5IG9mIHRoZSB0ZXh0dXJlIGlzIHVzZWQgdG8gb2Zmc2V0IHRoZSB5LlxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5BYnN0cmFjdEZpbHRlclxuICogQG1lbWJlcm9mIFBJWEkuZmlsdGVyc1xuICogQHBhcmFtIHNwcml0ZSB7UElYSS5TcHJpdGV9IHRoZSBzcHJpdGUgdXNlZCBmb3IgdGhlIGRpc3BsYWNlbWVudCBtYXAuIChtYWtlIHN1cmUgaXRzIGFkZGVkIHRvIHRoZSBzY2VuZSEpXG4gKi9cbmZ1bmN0aW9uIERpc3BsYWNlbWVudEZpbHRlcihzcHJpdGUsIHNjYWxlKVxue1xuICAgIHZhciBtYXNrTWF0cml4ID0gbmV3IGNvcmUuTWF0cml4KCk7XG4gICAgc3ByaXRlLnJlbmRlcmFibGUgPSBmYWxzZTtcblxuICAgIGNvcmUuQWJzdHJhY3RGaWx0ZXIuY2FsbCh0aGlzLFxuICAgICAgICAvLyB2ZXJ0ZXggc2hhZGVyXG4gICAgICAgIFwiYXR0cmlidXRlIHZlYzIgYVZlcnRleFBvc2l0aW9uO1xcbmF0dHJpYnV0ZSB2ZWMyIGFUZXh0dXJlQ29vcmQ7XFxuYXR0cmlidXRlIHZlYzQgYUNvbG9yO1xcblxcbnVuaWZvcm0gbWF0MyBwcm9qZWN0aW9uTWF0cml4O1xcbnVuaWZvcm0gbWF0MyBvdGhlck1hdHJpeDtcXG5cXG52YXJ5aW5nIHZlYzIgdk1hcENvb3JkO1xcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xcbnZhcnlpbmcgdmVjNCB2Q29sb3I7XFxuXFxudm9pZCBtYWluKHZvaWQpXFxue1xcbiAgIGdsX1Bvc2l0aW9uID0gdmVjNCgocHJvamVjdGlvbk1hdHJpeCAqIHZlYzMoYVZlcnRleFBvc2l0aW9uLCAxLjApKS54eSwgMC4wLCAxLjApO1xcbiAgIHZUZXh0dXJlQ29vcmQgPSBhVGV4dHVyZUNvb3JkO1xcbiAgIHZNYXBDb29yZCA9ICggb3RoZXJNYXRyaXggKiB2ZWMzKCBhVGV4dHVyZUNvb3JkLCAxLjApICApLnh5O1xcbiAgIHZDb2xvciA9IHZlYzQoYUNvbG9yLnJnYiAqIGFDb2xvci5hLCBhQ29sb3IuYSk7XFxufVxcblwiLFxuICAgICAgICAvLyBmcmFnbWVudCBzaGFkZXJcbiAgICAgICAgXCJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcXG5cXG52YXJ5aW5nIHZlYzIgdk1hcENvb3JkO1xcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xcbnZhcnlpbmcgdmVjNCB2Q29sb3I7XFxuXFxudW5pZm9ybSB2ZWMyIHNjYWxlO1xcblxcbnVuaWZvcm0gc2FtcGxlcjJEIHVTYW1wbGVyO1xcbnVuaWZvcm0gc2FtcGxlcjJEIG1hcFNhbXBsZXI7XFxuXFxudm9pZCBtYWluKHZvaWQpXFxue1xcbiAgIHZlYzQgbWFwID0gIHRleHR1cmUyRChtYXBTYW1wbGVyLCB2TWFwQ29vcmQpO1xcblxcbiAgIG1hcCAtPSAwLjU7XFxuICAgbWFwLnh5ICo9IHNjYWxlO1xcblxcbiAgIGdsX0ZyYWdDb2xvciA9IHRleHR1cmUyRCh1U2FtcGxlciwgdmVjMih2VGV4dHVyZUNvb3JkLnggKyBtYXAueCwgdlRleHR1cmVDb29yZC55ICsgbWFwLnkpKTtcXG59XFxuXCIsXG4gICAgICAgIC8vIHVuaWZvcm1zXG4gICAgICAgIHtcbiAgICAgICAgICAgIG1hcFNhbXBsZXI6ICAgICB7IHR5cGU6ICdzYW1wbGVyMkQnLCB2YWx1ZTogc3ByaXRlLnRleHR1cmUgfSxcbiAgICAgICAgICAgIG90aGVyTWF0cml4OiAgICB7IHR5cGU6ICdtYXQzJywgdmFsdWU6IG1hc2tNYXRyaXgudG9BcnJheSh0cnVlKSB9LFxuICAgICAgICAgICAgc2NhbGU6ICAgICAgICAgIHsgdHlwZTogJ3YyJywgdmFsdWU6IHsgeDogMSwgeTogMSB9IH1cbiAgICAgICAgfVxuICAgICk7XG5cbiAgICB0aGlzLm1hc2tTcHJpdGUgPSBzcHJpdGU7XG4gICAgdGhpcy5tYXNrTWF0cml4ID0gbWFza01hdHJpeDtcblxuICAgIGlmIChzY2FsZSA9PT0gbnVsbCB8fCBzY2FsZSA9PT0gdW5kZWZpbmVkKVxuICAgIHtcbiAgICAgICAgc2NhbGUgPSAyMDtcbiAgICB9XG5cbiAgICB0aGlzLnNjYWxlID0gbmV3IGNvcmUuUG9pbnQoc2NhbGUsIHNjYWxlKTtcbn1cblxuRGlzcGxhY2VtZW50RmlsdGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoY29yZS5BYnN0cmFjdEZpbHRlci5wcm90b3R5cGUpO1xuRGlzcGxhY2VtZW50RmlsdGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IERpc3BsYWNlbWVudEZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gRGlzcGxhY2VtZW50RmlsdGVyO1xuXG5EaXNwbGFjZW1lbnRGaWx0ZXIucHJvdG90eXBlLmFwcGx5RmlsdGVyID0gZnVuY3Rpb24gKHJlbmRlcmVyLCBpbnB1dCwgb3V0cHV0KVxue1xuICAgIHZhciBmaWx0ZXJNYW5hZ2VyID0gcmVuZGVyZXIuZmlsdGVyTWFuYWdlcjtcblxuICAgIGZpbHRlck1hbmFnZXIuY2FsY3VsYXRlTWFwcGVkTWF0cml4KGlucHV0LmZyYW1lLCB0aGlzLm1hc2tTcHJpdGUsIHRoaXMubWFza01hdHJpeCk7XG5cbiAgICB0aGlzLnVuaWZvcm1zLm90aGVyTWF0cml4LnZhbHVlID0gdGhpcy5tYXNrTWF0cml4LnRvQXJyYXkodHJ1ZSk7XG4gICAgdGhpcy51bmlmb3Jtcy5zY2FsZS52YWx1ZS54ID0gdGhpcy5zY2FsZS54ICogKDEvaW5wdXQuZnJhbWUud2lkdGgpO1xuICAgIHRoaXMudW5pZm9ybXMuc2NhbGUudmFsdWUueSA9IHRoaXMuc2NhbGUueSAqICgxL2lucHV0LmZyYW1lLmhlaWdodCk7XG5cbiAgICB2YXIgc2hhZGVyID0gdGhpcy5nZXRTaGFkZXIocmVuZGVyZXIpO1xuICAgICAvLyBkcmF3IHRoZSBmaWx0ZXIuLi5cbiAgICBmaWx0ZXJNYW5hZ2VyLmFwcGx5RmlsdGVyKHNoYWRlciwgaW5wdXQsIG91dHB1dCk7XG59O1xuXG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKERpc3BsYWNlbWVudEZpbHRlci5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBUaGUgdGV4dHVyZSB1c2VkIGZvciB0aGUgZGlzcGxhY2VtZW50IG1hcC4gTXVzdCBiZSBwb3dlciBvZiAyIHNpemVkIHRleHR1cmUuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlRleHR1cmV9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5EaXNwbGFjZW1lbnRGaWx0ZXIjXG4gICAgICovXG4gICAgbWFwOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudW5pZm9ybXMubWFwU2FtcGxlci52YWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudW5pZm9ybXMubWFwU2FtcGxlci52YWx1ZSA9IHZhbHVlO1xuXG4gICAgICAgIH1cbiAgICB9XG59KTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vLi4vY29yZScpO1xuLy8gQHNlZSBodHRwczovL2dpdGh1Yi5jb20vc3Vic3RhY2svYnJmcy9pc3N1ZXMvMjVcblxuXG4vKipcbiAqIEBhdXRob3IgTWF0IEdyb3ZlcyBodHRwOi8vbWF0Z3JvdmVzLmNvbS8gQERvb3JtYXQyM1xuICogb3JpZ2luYWwgZmlsdGVyOiBodHRwczovL2dpdGh1Yi5jb20vZXZhbncvZ2xmeC5qcy9ibG9iL21hc3Rlci9zcmMvZmlsdGVycy9mdW4vZG90c2NyZWVuLmpzXG4gKi9cblxuLyoqXG4gKiBUaGlzIGZpbHRlciBhcHBsaWVzIGEgZG90c2NyZWVuIGVmZmVjdCBtYWtpbmcgZGlzcGxheSBvYmplY3RzIGFwcGVhciB0byBiZSBtYWRlIG91dCBvZlxuICogYmxhY2sgYW5kIHdoaXRlIGhhbGZ0b25lIGRvdHMgbGlrZSBhbiBvbGQgcHJpbnRlci5cbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQWJzdHJhY3RGaWx0ZXJcbiAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnNcbiAqL1xuZnVuY3Rpb24gRG90U2NyZWVuRmlsdGVyKClcbntcbiAgICBjb3JlLkFic3RyYWN0RmlsdGVyLmNhbGwodGhpcyxcbiAgICAgICAgLy8gdmVydGV4IHNoYWRlclxuICAgICAgICBudWxsLFxuICAgICAgICAvLyBmcmFnbWVudCBzaGFkZXJcbiAgICAgICAgXCJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcXG5cXG52YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDtcXG52YXJ5aW5nIHZlYzQgdkNvbG9yO1xcblxcbnVuaWZvcm0gdmVjNCBkaW1lbnNpb25zO1xcbnVuaWZvcm0gc2FtcGxlcjJEIHVTYW1wbGVyO1xcblxcbnVuaWZvcm0gZmxvYXQgYW5nbGU7XFxudW5pZm9ybSBmbG9hdCBzY2FsZTtcXG5cXG5mbG9hdCBwYXR0ZXJuKClcXG57XFxuICAgZmxvYXQgcyA9IHNpbihhbmdsZSksIGMgPSBjb3MoYW5nbGUpO1xcbiAgIHZlYzIgdGV4ID0gdlRleHR1cmVDb29yZCAqIGRpbWVuc2lvbnMueHk7XFxuICAgdmVjMiBwb2ludCA9IHZlYzIoXFxuICAgICAgIGMgKiB0ZXgueCAtIHMgKiB0ZXgueSxcXG4gICAgICAgcyAqIHRleC54ICsgYyAqIHRleC55XFxuICAgKSAqIHNjYWxlO1xcbiAgIHJldHVybiAoc2luKHBvaW50LngpICogc2luKHBvaW50LnkpKSAqIDQuMDtcXG59XFxuXFxudm9pZCBtYWluKClcXG57XFxuICAgdmVjNCBjb2xvciA9IHRleHR1cmUyRCh1U2FtcGxlciwgdlRleHR1cmVDb29yZCk7XFxuICAgZmxvYXQgYXZlcmFnZSA9IChjb2xvci5yICsgY29sb3IuZyArIGNvbG9yLmIpIC8gMy4wO1xcbiAgIGdsX0ZyYWdDb2xvciA9IHZlYzQodmVjMyhhdmVyYWdlICogMTAuMCAtIDUuMCArIHBhdHRlcm4oKSksIGNvbG9yLmEpO1xcbn1cXG5cIixcbiAgICAgICAgLy8gY3VzdG9tIHVuaWZvcm1zXG4gICAgICAgIHtcbiAgICAgICAgICAgIHNjYWxlOiAgICAgIHsgdHlwZTogJzFmJywgdmFsdWU6IDEgfSxcbiAgICAgICAgICAgIGFuZ2xlOiAgICAgIHsgdHlwZTogJzFmJywgdmFsdWU6IDUgfSxcbiAgICAgICAgICAgIGRpbWVuc2lvbnM6IHsgdHlwZTogJzRmdicsIHZhbHVlOiBbMCwgMCwgMCwgMF0gfVxuICAgICAgICB9XG4gICAgKTtcbn1cblxuRG90U2NyZWVuRmlsdGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoY29yZS5BYnN0cmFjdEZpbHRlci5wcm90b3R5cGUpO1xuRG90U2NyZWVuRmlsdGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IERvdFNjcmVlbkZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gRG90U2NyZWVuRmlsdGVyO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhEb3RTY3JlZW5GaWx0ZXIucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogVGhlIHNjYWxlIG9mIHRoZSBlZmZlY3QuXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuRG90U2NyZWVuRmlsdGVyI1xuICAgICAqL1xuICAgIHNjYWxlOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudW5pZm9ybXMuc2NhbGUudmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLnNjYWxlLnZhbHVlID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVGhlIHJhZGl1cyBvZiB0aGUgZWZmZWN0LlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLkRvdFNjcmVlbkZpbHRlciNcbiAgICAgKi9cbiAgICBhbmdsZToge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVuaWZvcm1zLmFuZ2xlLnZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy5hbmdsZS52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfVxufSk7XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uLy4uL2NvcmUnKTtcblxuLy8gQHNlZSBodHRwczovL2dpdGh1Yi5jb20vc3Vic3RhY2svYnJmcy9pc3N1ZXMvMjVcblxuXG4vKipcbiAqIFRoZSBCbHVyWVRpbnRGaWx0ZXIgYXBwbGllcyBhIHZlcnRpY2FsIEdhdXNzaWFuIGJsdXIgdG8gYW4gb2JqZWN0LlxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5BYnN0cmFjdEZpbHRlclxuICogQG1lbWJlcm9mIFBJWEkuZmlsdGVyc1xuICovXG5mdW5jdGlvbiBCbHVyWVRpbnRGaWx0ZXIoKVxue1xuICAgIGNvcmUuQWJzdHJhY3RGaWx0ZXIuY2FsbCh0aGlzLFxuICAgICAgICAvLyB2ZXJ0ZXggc2hhZGVyXG4gICAgICAgIFwiYXR0cmlidXRlIHZlYzIgYVZlcnRleFBvc2l0aW9uO1xcbmF0dHJpYnV0ZSB2ZWMyIGFUZXh0dXJlQ29vcmQ7XFxuYXR0cmlidXRlIHZlYzQgYUNvbG9yO1xcblxcbnVuaWZvcm0gZmxvYXQgc3RyZW5ndGg7XFxudW5pZm9ybSB2ZWMyIG9mZnNldDtcXG5cXG51bmlmb3JtIG1hdDMgcHJvamVjdGlvbk1hdHJpeDtcXG5cXG52YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDtcXG52YXJ5aW5nIHZlYzQgdkNvbG9yO1xcbnZhcnlpbmcgdmVjMiB2Qmx1clRleENvb3Jkc1s2XTtcXG5cXG52b2lkIG1haW4odm9pZClcXG57XFxuICAgIGdsX1Bvc2l0aW9uID0gdmVjNCgocHJvamVjdGlvbk1hdHJpeCAqIHZlYzMoKGFWZXJ0ZXhQb3NpdGlvbitvZmZzZXQpLCAxLjApKS54eSwgMC4wLCAxLjApO1xcbiAgICB2VGV4dHVyZUNvb3JkID0gYVRleHR1cmVDb29yZDtcXG5cXG4gICAgdkJsdXJUZXhDb29yZHNbIDBdID0gYVRleHR1cmVDb29yZCArIHZlYzIoMC4wLCAtMC4wMTIgKiBzdHJlbmd0aCk7XFxuICAgIHZCbHVyVGV4Q29vcmRzWyAxXSA9IGFUZXh0dXJlQ29vcmQgKyB2ZWMyKDAuMCwgLTAuMDA4ICogc3RyZW5ndGgpO1xcbiAgICB2Qmx1clRleENvb3Jkc1sgMl0gPSBhVGV4dHVyZUNvb3JkICsgdmVjMigwLjAsIC0wLjAwNCAqIHN0cmVuZ3RoKTtcXG4gICAgdkJsdXJUZXhDb29yZHNbIDNdID0gYVRleHR1cmVDb29yZCArIHZlYzIoMC4wLCAgMC4wMDQgKiBzdHJlbmd0aCk7XFxuICAgIHZCbHVyVGV4Q29vcmRzWyA0XSA9IGFUZXh0dXJlQ29vcmQgKyB2ZWMyKDAuMCwgIDAuMDA4ICogc3RyZW5ndGgpO1xcbiAgICB2Qmx1clRleENvb3Jkc1sgNV0gPSBhVGV4dHVyZUNvb3JkICsgdmVjMigwLjAsICAwLjAxMiAqIHN0cmVuZ3RoKTtcXG5cXG4gICB2Q29sb3IgPSB2ZWM0KGFDb2xvci5yZ2IgKiBhQ29sb3IuYSwgYUNvbG9yLmEpO1xcbn1cXG5cIixcbiAgICAgICAgLy8gZnJhZ21lbnQgc2hhZGVyXG4gICAgICAgIFwicHJlY2lzaW9uIGxvd3AgZmxvYXQ7XFxuXFxudmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7XFxudmFyeWluZyB2ZWMyIHZCbHVyVGV4Q29vcmRzWzZdO1xcbnZhcnlpbmcgdmVjNCB2Q29sb3I7XFxuXFxudW5pZm9ybSB2ZWMzIGNvbG9yO1xcbnVuaWZvcm0gZmxvYXQgYWxwaGE7XFxuXFxudW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXI7XFxuXFxudm9pZCBtYWluKHZvaWQpXFxue1xcbiAgICB2ZWM0IHN1bSA9IHZlYzQoMC4wKTtcXG5cXG4gICAgc3VtICs9IHRleHR1cmUyRCh1U2FtcGxlciwgdkJsdXJUZXhDb29yZHNbIDBdKSowLjAwNDQzMTg0ODQxMTkzODM0MTtcXG4gICAgc3VtICs9IHRleHR1cmUyRCh1U2FtcGxlciwgdkJsdXJUZXhDb29yZHNbIDFdKSowLjA1Mzk5MDk2NjUxMzE4OTg1O1xcbiAgICBzdW0gKz0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2Qmx1clRleENvb3Jkc1sgMl0pKjAuMjQxOTcwNzI0NTE5MTQ1NDtcXG4gICAgc3VtICs9IHRleHR1cmUyRCh1U2FtcGxlciwgdlRleHR1cmVDb29yZCAgICAgKSowLjM5ODk0MjI4MDQwMTQzMjc7XFxuICAgIHN1bSArPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZCbHVyVGV4Q29vcmRzWyAzXSkqMC4yNDE5NzA3MjQ1MTkxNDU0O1xcbiAgICBzdW0gKz0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2Qmx1clRleENvb3Jkc1sgNF0pKjAuMDUzOTkwOTY2NTEzMTg5ODU7XFxuICAgIHN1bSArPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZCbHVyVGV4Q29vcmRzWyA1XSkqMC4wMDQ0MzE4NDg0MTE5MzgzNDE7XFxuXFxuICAgIGdsX0ZyYWdDb2xvciA9IHZlYzQoIGNvbG9yLnJnYiAqIHN1bS5hICogYWxwaGEsIHN1bS5hICogYWxwaGEgKTtcXG59XFxuXCIsXG4gICAgICAgIC8vIHNldCB0aGUgdW5pZm9ybXNcbiAgICAgICAge1xuICAgICAgICAgICAgYmx1cjogeyB0eXBlOiAnMWYnLCB2YWx1ZTogMSAvIDUxMiB9LFxuICAgICAgICAgICAgY29sb3I6IHsgdHlwZTogJ2MnLCB2YWx1ZTogWzAsMCwwXX0sXG4gICAgICAgICAgICBhbHBoYTogeyB0eXBlOiAnMWYnLCB2YWx1ZTogMC43IH0sXG4gICAgICAgICAgICBvZmZzZXQ6IHsgdHlwZTogJzJmJywgdmFsdWU6WzUsIDVdfSxcbiAgICAgICAgICAgIHN0cmVuZ3RoOiB7IHR5cGU6ICcxZicsIHZhbHVlOjF9XG4gICAgICAgIH1cbiAgICApO1xuXG4gICAgdGhpcy5wYXNzZXMgPSAxO1xuICAgIHRoaXMuc3RyZW5ndGggPSA0O1xufVxuXG5CbHVyWVRpbnRGaWx0ZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShjb3JlLkFic3RyYWN0RmlsdGVyLnByb3RvdHlwZSk7XG5CbHVyWVRpbnRGaWx0ZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gQmx1cllUaW50RmlsdGVyO1xubW9kdWxlLmV4cG9ydHMgPSBCbHVyWVRpbnRGaWx0ZXI7XG5cbkJsdXJZVGludEZpbHRlci5wcm90b3R5cGUuYXBwbHlGaWx0ZXIgPSBmdW5jdGlvbiAocmVuZGVyZXIsIGlucHV0LCBvdXRwdXQsIGNsZWFyKVxue1xuICAgIHZhciBzaGFkZXIgPSB0aGlzLmdldFNoYWRlcihyZW5kZXJlcik7XG5cbiAgICB0aGlzLnVuaWZvcm1zLnN0cmVuZ3RoLnZhbHVlID0gdGhpcy5zdHJlbmd0aCAvIDQgLyB0aGlzLnBhc3NlcyAqIChpbnB1dC5mcmFtZS5oZWlnaHQgLyBpbnB1dC5zaXplLmhlaWdodCk7XG5cbiAgICBpZih0aGlzLnBhc3NlcyA9PT0gMSlcbiAgICB7XG4gICAgICAgIHJlbmRlcmVyLmZpbHRlck1hbmFnZXIuYXBwbHlGaWx0ZXIoc2hhZGVyLCBpbnB1dCwgb3V0cHV0LCBjbGVhcik7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHZhciByZW5kZXJUYXJnZXQgPSByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLmdldFJlbmRlclRhcmdldCh0cnVlKTtcbiAgICAgICAgdmFyIGZsaXAgPSBpbnB1dDtcbiAgICAgICAgdmFyIGZsb3AgPSByZW5kZXJUYXJnZXQ7XG5cbiAgICAgICAgZm9yKHZhciBpID0gMDsgaSA8IHRoaXMucGFzc2VzLTE7IGkrKylcbiAgICAgICAge1xuICAgICAgICAgICAgcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5hcHBseUZpbHRlcihzaGFkZXIsIGZsaXAsIGZsb3AsIGNsZWFyKTtcblxuICAgICAgICAgICB2YXIgdGVtcCA9IGZsb3A7XG4gICAgICAgICAgIGZsb3AgPSBmbGlwO1xuICAgICAgICAgICBmbGlwID0gdGVtcDtcbiAgICAgICAgfVxuXG4gICAgICAgIHJlbmRlcmVyLmZpbHRlck1hbmFnZXIuYXBwbHlGaWx0ZXIoc2hhZGVyLCBmbGlwLCBvdXRwdXQsIGNsZWFyKTtcblxuICAgICAgICByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLnJldHVyblJlbmRlclRhcmdldChyZW5kZXJUYXJnZXQpO1xuICAgIH1cbn07XG5cblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoQmx1cllUaW50RmlsdGVyLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIHN0cmVuZ3RoIG9mIGJvdGggdGhlIGJsdXIuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5CbHVyWVRpbnRGaWx0ZXIjXG4gICAgICogQGRlZmF1bHQgMlxuICAgICAqL1xuICAgIGJsdXI6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gIHRoaXMuc3RyZW5ndGg7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnBhZGRpbmcgPSB2YWx1ZSAqIDAuNTtcbiAgICAgICAgICAgIHRoaXMuc3RyZW5ndGggPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi8uLi9jb3JlJyksXG4gICAgQmx1clhGaWx0ZXIgPSByZXF1aXJlKCcuLi9ibHVyL0JsdXJYRmlsdGVyJyksXG4gICAgQmx1cllUaW50RmlsdGVyID0gcmVxdWlyZSgnLi9CbHVyWVRpbnRGaWx0ZXInKTtcblxuLyoqXG4gKiBUaGUgRHJvcFNoYWRvd0ZpbHRlciBhcHBsaWVzIGEgR2F1c3NpYW4gYmx1ciB0byBhbiBvYmplY3QuXG4gKiBUaGUgc3RyZW5ndGggb2YgdGhlIGJsdXIgY2FuIGJlIHNldCBmb3IgeC0gYW5kIHktYXhpcyBzZXBhcmF0ZWx5LlxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5BYnN0cmFjdEZpbHRlclxuICogQG1lbWJlcm9mIFBJWEkuZmlsdGVyc1xuICovXG5mdW5jdGlvbiBEcm9wU2hhZG93RmlsdGVyKClcbntcbiAgICBjb3JlLkFic3RyYWN0RmlsdGVyLmNhbGwodGhpcyk7XG5cbiAgICB0aGlzLmJsdXJYRmlsdGVyID0gbmV3IEJsdXJYRmlsdGVyKCk7XG4gICAgdGhpcy5ibHVyWVRpbnRGaWx0ZXIgPSBuZXcgQmx1cllUaW50RmlsdGVyKCk7XG5cbiAgICB0aGlzLmRlZmF1bHRGaWx0ZXIgPSBuZXcgY29yZS5BYnN0cmFjdEZpbHRlcigpO1xuXG4gICAgdGhpcy5wYWRkaW5nID0gMzA7XG5cbiAgICB0aGlzLl9kaXJ0eVBvc2l0aW9uID0gdHJ1ZTtcbiAgICB0aGlzLl9hbmdsZSA9IDQ1ICogTWF0aC5QSSAvIDE4MDtcbiAgICB0aGlzLl9kaXN0YW5jZSA9IDEwO1xuICAgIHRoaXMuYWxwaGEgPSAwLjc1O1xuICAgIHRoaXMuaGlkZU9iamVjdCA9IGZhbHNlO1xuICAgIHRoaXMuYmxlbmRNb2RlID0gY29yZS5CTEVORF9NT0RFUy5NVUxUSVBMWTtcbn1cblxuRHJvcFNoYWRvd0ZpbHRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuQWJzdHJhY3RGaWx0ZXIucHJvdG90eXBlKTtcbkRyb3BTaGFkb3dGaWx0ZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gRHJvcFNoYWRvd0ZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gRHJvcFNoYWRvd0ZpbHRlcjtcblxuRHJvcFNoYWRvd0ZpbHRlci5wcm90b3R5cGUuYXBwbHlGaWx0ZXIgPSBmdW5jdGlvbiAocmVuZGVyZXIsIGlucHV0LCBvdXRwdXQpXG57XG4gICAgdmFyIHJlbmRlclRhcmdldCA9IHJlbmRlcmVyLmZpbHRlck1hbmFnZXIuZ2V0UmVuZGVyVGFyZ2V0KHRydWUpO1xuXG4gICAgLy9UT0RPIC0gY29weVRleFN1YkltYWdlMkQgY291bGQgYmUgdXNlZCBoZXJlP1xuICAgIGlmKHRoaXMuX2RpcnR5UG9zaXRpb24pXG4gICAge1xuICAgICAgICB0aGlzLl9kaXJ0eVBvc2l0aW9uID0gZmFsc2U7XG5cbiAgICAgICAgdGhpcy5ibHVyWVRpbnRGaWx0ZXIudW5pZm9ybXMub2Zmc2V0LnZhbHVlWzBdID0gTWF0aC5zaW4odGhpcy5fYW5nbGUpICogdGhpcy5fZGlzdGFuY2U7XG4gICAgICAgIHRoaXMuYmx1cllUaW50RmlsdGVyLnVuaWZvcm1zLm9mZnNldC52YWx1ZVsxXSA9IE1hdGguY29zKHRoaXMuX2FuZ2xlKSAqIHRoaXMuX2Rpc3RhbmNlO1xuICAgIH1cblxuICAgIHRoaXMuYmx1clhGaWx0ZXIuYXBwbHlGaWx0ZXIocmVuZGVyZXIsIGlucHV0LCByZW5kZXJUYXJnZXQpO1xuXG4gICAgcmVuZGVyZXIuYmxlbmRNb2RlTWFuYWdlci5zZXRCbGVuZE1vZGUodGhpcy5ibGVuZE1vZGUpO1xuXG4gICAgdGhpcy5ibHVyWVRpbnRGaWx0ZXIuYXBwbHlGaWx0ZXIocmVuZGVyZXIsIHJlbmRlclRhcmdldCwgb3V0cHV0KTtcblxuICAgIHJlbmRlcmVyLmJsZW5kTW9kZU1hbmFnZXIuc2V0QmxlbmRNb2RlKGNvcmUuQkxFTkRfTU9ERVMuTk9STUFMKTtcblxuICAgIGlmKCF0aGlzLmhpZGVPYmplY3QpXG4gICAge1xuXG4gICAgICAgIHRoaXMuZGVmYXVsdEZpbHRlci5hcHBseUZpbHRlcihyZW5kZXJlciwgaW5wdXQsIG91dHB1dCk7XG4gICAgfVxuXG5cbiAgICByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLnJldHVyblJlbmRlclRhcmdldChyZW5kZXJUYXJnZXQpO1xufTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoRHJvcFNoYWRvd0ZpbHRlci5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBzdHJlbmd0aCBvZiBib3RoIHRoZSBibHVyWCBhbmQgYmx1clkgcHJvcGVydGllcyBzaW11bHRhbmVvdXNseVxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJPZiBQSVhJLmZpbHRlcnMuRHJvcFNoYWRvd0ZpbHRlciNcbiAgICAgKiBAZGVmYXVsdCAyXG4gICAgICovXG4gICAgYmx1cjoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmJsdXJYRmlsdGVyLmJsdXI7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmJsdXJYRmlsdGVyLmJsdXIgPSB0aGlzLmJsdXJZVGludEZpbHRlci5ibHVyID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgc3RyZW5ndGggb2YgdGhlIGJsdXJYIHByb3BlcnR5XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlck9mIFBJWEkuZmlsdGVycy5Ecm9wU2hhZG93RmlsdGVyI1xuICAgICAqIEBkZWZhdWx0IDJcbiAgICAgKi9cbiAgICBibHVyWDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmJsdXJYRmlsdGVyLmJsdXI7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmJsdXJYRmlsdGVyLmJsdXIgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBzdHJlbmd0aCBvZiB0aGUgYmx1clkgcHJvcGVydHlcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyT2YgUElYSS5maWx0ZXJzLkRyb3BTaGFkb3dGaWx0ZXIjXG4gICAgICogQGRlZmF1bHQgMlxuICAgICAqL1xuICAgIGJsdXJZOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuYmx1cllUaW50RmlsdGVyLmJsdXI7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmJsdXJZVGludEZpbHRlci5ibHVyID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgY29sb3Igb2YgdGhlIHNoYWRvd1xuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJPZiBQSVhJLmZpbHRlcnMuRHJvcFNoYWRvd0ZpbHRlciNcbiAgICAgKi9cbiAgICBjb2xvcjoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiAgY29yZS51dGlscy5yZ2IyaGV4KCB0aGlzLmJsdXJZVGludEZpbHRlci51bmlmb3Jtcy5jb2xvci52YWx1ZSApO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5ibHVyWVRpbnRGaWx0ZXIudW5pZm9ybXMuY29sb3IudmFsdWUgPSBjb3JlLnV0aWxzLmhleDJyZ2IodmFsdWUpO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIGFscGhhIG9mIHRoZSBzaGFkb3dcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyT2YgUElYSS5maWx0ZXJzLkRyb3BTaGFkb3dGaWx0ZXIjXG4gICAgICovXG4gICAgYWxwaGE6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gIHRoaXMuYmx1cllUaW50RmlsdGVyLnVuaWZvcm1zLmFscGhhLnZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5ibHVyWVRpbnRGaWx0ZXIudW5pZm9ybXMuYWxwaGEudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBkaXN0YW5jZSBvZiB0aGUgc2hhZG93XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlck9mIFBJWEkuZmlsdGVycy5Ecm9wU2hhZG93RmlsdGVyI1xuICAgICAqL1xuICAgIGRpc3RhbmNlOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuICB0aGlzLl9kaXN0YW5jZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuX2RpcnR5UG9zaXRpb24gPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy5fZGlzdGFuY2UgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBhbmdsZSBvZiB0aGUgc2hhZG93XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlck9mIFBJWEkuZmlsdGVycy5Ecm9wU2hhZG93RmlsdGVyI1xuICAgICAqL1xuICAgIGFuZ2xlOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuICB0aGlzLl9hbmdsZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuX2RpcnR5UG9zaXRpb24gPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy5fYW5nbGUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi8uLi9jb3JlJyk7XG4vLyBAc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9zdWJzdGFjay9icmZzL2lzc3Vlcy8yNVxuXG5cbi8qKlxuICogVGhpcyBncmV5c2NhbGVzIHRoZSBwYWxldHRlIG9mIHlvdXIgRGlzcGxheSBPYmplY3RzLlxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5BYnN0cmFjdEZpbHRlclxuICogQG1lbWJlcm9mIFBJWEkuZmlsdGVyc1xuICovXG5mdW5jdGlvbiBHcmF5RmlsdGVyKClcbntcbiAgICBjb3JlLkFic3RyYWN0RmlsdGVyLmNhbGwodGhpcyxcbiAgICAgICAgLy8gdmVydGV4IHNoYWRlclxuICAgICAgICBudWxsLFxuICAgICAgICAvLyBmcmFnbWVudCBzaGFkZXJcbiAgICAgICAgXCJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcXG5cXG52YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDtcXG52YXJ5aW5nIHZlYzQgdkNvbG9yO1xcblxcbnVuaWZvcm0gc2FtcGxlcjJEIHVTYW1wbGVyO1xcbnVuaWZvcm0gZmxvYXQgZ3JheTtcXG5cXG52b2lkIG1haW4odm9pZClcXG57XFxuICAgZ2xfRnJhZ0NvbG9yID0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2VGV4dHVyZUNvb3JkKTtcXG4gICBnbF9GcmFnQ29sb3IucmdiID0gbWl4KGdsX0ZyYWdDb2xvci5yZ2IsIHZlYzMoMC4yMTI2KmdsX0ZyYWdDb2xvci5yICsgMC43MTUyKmdsX0ZyYWdDb2xvci5nICsgMC4wNzIyKmdsX0ZyYWdDb2xvci5iKSwgZ3JheSk7XFxufVxcblwiLFxuICAgICAgICAvLyBzZXQgdGhlIHVuaWZvcm1zXG4gICAgICAgIHtcbiAgICAgICAgICAgIGdyYXk6IHsgdHlwZTogJzFmJywgdmFsdWU6IDEgfVxuICAgICAgICB9XG4gICAgKTtcbn1cblxuR3JheUZpbHRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuQWJzdHJhY3RGaWx0ZXIucHJvdG90eXBlKTtcbkdyYXlGaWx0ZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gR3JheUZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gR3JheUZpbHRlcjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoR3JheUZpbHRlci5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBUaGUgc3RyZW5ndGggb2YgdGhlIGdyYXkuIDEgd2lsbCBtYWtlIHRoZSBvYmplY3QgYmxhY2sgYW5kIHdoaXRlLCAwIHdpbGwgbWFrZSB0aGUgb2JqZWN0IGl0cyBub3JtYWwgY29sb3IuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5HcmF5RmlsdGVyI1xuICAgICAqL1xuICAgIGdyYXk6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy51bmlmb3Jtcy5ncmF5LnZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy5ncmF5LnZhbHVlID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG59KTtcbiIsIi8qKlxuICogQGZpbGUgICAgICAgIE1haW4gZXhwb3J0IG9mIHRoZSBQSVhJIGZpbHRlcnMgbGlicmFyeVxuICogQGF1dGhvciAgICAgIE1hdCBHcm92ZXMgPG1hdEBnb29kYm95ZGlnaXRhbC5jb20+XG4gKiBAY29weXJpZ2h0ICAgMjAxMy0yMDE1IEdvb2RCb3lEaWdpdGFsXG4gKiBAbGljZW5zZSAgICAge0BsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9waXhpanMvcGl4aS5qcy9ibG9iL21hc3Rlci9MSUNFTlNFfE1JVCBMaWNlbnNlfVxuICovXG5cbi8qKlxuICogQG5hbWVzcGFjZSBQSVhJLmZpbHRlcnNcbiAqL1xubW9kdWxlLmV4cG9ydHMgPSB7XG4gICAgQXNjaWlGaWx0ZXI6ICAgICAgICByZXF1aXJlKCcuL2FzY2lpL0FzY2lpRmlsdGVyJyksXG4gICAgQmxvb21GaWx0ZXI6ICAgICAgICByZXF1aXJlKCcuL2Jsb29tL0Jsb29tRmlsdGVyJyksXG4gICAgQmx1ckZpbHRlcjogICAgICAgICByZXF1aXJlKCcuL2JsdXIvQmx1ckZpbHRlcicpLFxuICAgIEJsdXJYRmlsdGVyOiAgICAgICAgcmVxdWlyZSgnLi9ibHVyL0JsdXJYRmlsdGVyJyksXG4gICAgQmx1cllGaWx0ZXI6ICAgICAgICByZXF1aXJlKCcuL2JsdXIvQmx1cllGaWx0ZXInKSxcbiAgICBCbHVyRGlyRmlsdGVyOiAgICAgIHJlcXVpcmUoJy4vYmx1ci9CbHVyRGlyRmlsdGVyJyksXG4gICAgQ29sb3JNYXRyaXhGaWx0ZXI6ICByZXF1aXJlKCcuL2NvbG9yL0NvbG9yTWF0cml4RmlsdGVyJyksXG4gICAgQ29sb3JTdGVwRmlsdGVyOiAgICByZXF1aXJlKCcuL2NvbG9yL0NvbG9yU3RlcEZpbHRlcicpLFxuICAgIENvbnZvbHV0aW9uRmlsdGVyOiAgcmVxdWlyZSgnLi9jb252b2x1dGlvbi9Db252b2x1dGlvbkZpbHRlcicpLFxuICAgIENyb3NzSGF0Y2hGaWx0ZXI6ICAgcmVxdWlyZSgnLi9jcm9zc2hhdGNoL0Nyb3NzSGF0Y2hGaWx0ZXInKSxcbiAgICBEaXNwbGFjZW1lbnRGaWx0ZXI6IHJlcXVpcmUoJy4vZGlzcGxhY2VtZW50L0Rpc3BsYWNlbWVudEZpbHRlcicpLFxuICAgIERvdFNjcmVlbkZpbHRlcjogICAgcmVxdWlyZSgnLi9kb3QvRG90U2NyZWVuRmlsdGVyJyksXG4gICAgR3JheUZpbHRlcjogICAgICAgICByZXF1aXJlKCcuL2dyYXkvR3JheUZpbHRlcicpLFxuICAgIERyb3BTaGFkb3dGaWx0ZXI6ICAgcmVxdWlyZSgnLi9kcm9wc2hhZG93L0Ryb3BTaGFkb3dGaWx0ZXInKSxcbiAgICBJbnZlcnRGaWx0ZXI6ICAgICAgIHJlcXVpcmUoJy4vaW52ZXJ0L0ludmVydEZpbHRlcicpLFxuICAgIE5vaXNlRmlsdGVyOiAgICAgICAgcmVxdWlyZSgnLi9ub2lzZS9Ob2lzZUZpbHRlcicpLFxuICAgIFBpeGVsYXRlRmlsdGVyOiAgICAgcmVxdWlyZSgnLi9waXhlbGF0ZS9QaXhlbGF0ZUZpbHRlcicpLFxuICAgIFJHQlNwbGl0RmlsdGVyOiAgICAgcmVxdWlyZSgnLi9yZ2IvUkdCU3BsaXRGaWx0ZXInKSxcbiAgICBTaG9ja3dhdmVGaWx0ZXI6ICAgIHJlcXVpcmUoJy4vc2hvY2t3YXZlL1Nob2Nrd2F2ZUZpbHRlcicpLFxuICAgIFNlcGlhRmlsdGVyOiAgICAgICAgcmVxdWlyZSgnLi9zZXBpYS9TZXBpYUZpbHRlcicpLFxuICAgIFNtYXJ0Qmx1ckZpbHRlcjogICAgcmVxdWlyZSgnLi9ibHVyL1NtYXJ0Qmx1ckZpbHRlcicpLFxuICAgIFRpbHRTaGlmdEZpbHRlcjogICAgcmVxdWlyZSgnLi90aWx0c2hpZnQvVGlsdFNoaWZ0RmlsdGVyJyksXG4gICAgVGlsdFNoaWZ0WEZpbHRlcjogICByZXF1aXJlKCcuL3RpbHRzaGlmdC9UaWx0U2hpZnRYRmlsdGVyJyksXG4gICAgVGlsdFNoaWZ0WUZpbHRlcjogICByZXF1aXJlKCcuL3RpbHRzaGlmdC9UaWx0U2hpZnRZRmlsdGVyJyksXG4gICAgVHdpc3RGaWx0ZXI6ICAgICAgICByZXF1aXJlKCcuL3R3aXN0L1R3aXN0RmlsdGVyJylcbn07XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uLy4uL2NvcmUnKTtcbi8vIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL3N1YnN0YWNrL2JyZnMvaXNzdWVzLzI1XG5cblxuLyoqXG4gKiBUaGlzIGludmVydHMgeW91ciBEaXNwbGF5IE9iamVjdHMgY29sb3JzLlxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5BYnN0cmFjdEZpbHRlclxuICogQG1lbWJlcm9mIFBJWEkuZmlsdGVyc1xuICovXG5mdW5jdGlvbiBJbnZlcnRGaWx0ZXIoKVxue1xuICAgIGNvcmUuQWJzdHJhY3RGaWx0ZXIuY2FsbCh0aGlzLFxuICAgICAgICAvLyB2ZXJ0ZXggc2hhZGVyXG4gICAgICAgIG51bGwsXG4gICAgICAgIC8vIGZyYWdtZW50IHNoYWRlclxuICAgICAgICBcInByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xcblxcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xcblxcbnVuaWZvcm0gZmxvYXQgaW52ZXJ0O1xcbnVuaWZvcm0gc2FtcGxlcjJEIHVTYW1wbGVyO1xcblxcbnZvaWQgbWFpbih2b2lkKVxcbntcXG4gICAgZ2xfRnJhZ0NvbG9yID0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2VGV4dHVyZUNvb3JkKTtcXG5cXG4gICAgZ2xfRnJhZ0NvbG9yLnJnYiA9IG1peCggKHZlYzMoMSktZ2xfRnJhZ0NvbG9yLnJnYikgKiBnbF9GcmFnQ29sb3IuYSwgZ2xfRnJhZ0NvbG9yLnJnYiwgMS4wIC0gaW52ZXJ0KTtcXG59XFxuXCIsXG4gICAgICAgIC8vIGN1c3RvbSB1bmlmb3Jtc1xuICAgICAgICB7XG4gICAgICAgICAgICBpbnZlcnQ6IHsgdHlwZTogJzFmJywgdmFsdWU6IDEgfVxuICAgICAgICB9XG4gICAgKTtcbn1cblxuSW52ZXJ0RmlsdGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoY29yZS5BYnN0cmFjdEZpbHRlci5wcm90b3R5cGUpO1xuSW52ZXJ0RmlsdGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IEludmVydEZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gSW52ZXJ0RmlsdGVyO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhJbnZlcnRGaWx0ZXIucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogVGhlIHN0cmVuZ3RoIG9mIHRoZSBpbnZlcnQuIGAxYCB3aWxsIGZ1bGx5IGludmVydCB0aGUgY29sb3JzLCBhbmRcbiAgICAgKiBgMGAgd2lsbCBtYWtlIHRoZSBvYmplY3QgaXRzIG5vcm1hbCBjb2xvci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLkludmVydEZpbHRlciNcbiAgICAgKi9cbiAgICBpbnZlcnQ6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy51bmlmb3Jtcy5pbnZlcnQudmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLmludmVydC52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfVxufSk7XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uLy4uL2NvcmUnKTtcbi8vIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL3N1YnN0YWNrL2JyZnMvaXNzdWVzLzI1XG5cblxuLyoqXG4gKiBAYXV0aG9yIFZpY28gQHZpY29jb3RlYVxuICogb3JpZ2luYWwgZmlsdGVyOiBodHRwczovL2dpdGh1Yi5jb20vZXZhbncvZ2xmeC5qcy9ibG9iL21hc3Rlci9zcmMvZmlsdGVycy9hZGp1c3Qvbm9pc2UuanNcbiAqL1xuXG4vKipcbiAqIEEgTm9pc2UgZWZmZWN0IGZpbHRlci5cbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQWJzdHJhY3RGaWx0ZXJcbiAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnNcbiAqL1xuZnVuY3Rpb24gTm9pc2VGaWx0ZXIoKVxue1xuICAgIGNvcmUuQWJzdHJhY3RGaWx0ZXIuY2FsbCh0aGlzLFxuICAgICAgICAvLyB2ZXJ0ZXggc2hhZGVyXG4gICAgICAgIG51bGwsXG4gICAgICAgIC8vIGZyYWdtZW50IHNoYWRlclxuICAgICAgICBcInByZWNpc2lvbiBoaWdocCBmbG9hdDtcXG5cXG52YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDtcXG52YXJ5aW5nIHZlYzQgdkNvbG9yO1xcblxcbnVuaWZvcm0gZmxvYXQgbm9pc2U7XFxudW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXI7XFxuXFxuZmxvYXQgcmFuZCh2ZWMyIGNvKVxcbntcXG4gICAgcmV0dXJuIGZyYWN0KHNpbihkb3QoY28ueHksIHZlYzIoMTIuOTg5OCwgNzguMjMzKSkpICogNDM3NTguNTQ1Myk7XFxufVxcblxcbnZvaWQgbWFpbigpXFxue1xcbiAgICB2ZWM0IGNvbG9yID0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2VGV4dHVyZUNvb3JkKTtcXG5cXG4gICAgZmxvYXQgZGlmZiA9IChyYW5kKHZUZXh0dXJlQ29vcmQpIC0gMC41KSAqIG5vaXNlO1xcblxcbiAgICBjb2xvci5yICs9IGRpZmY7XFxuICAgIGNvbG9yLmcgKz0gZGlmZjtcXG4gICAgY29sb3IuYiArPSBkaWZmO1xcblxcbiAgICBnbF9GcmFnQ29sb3IgPSBjb2xvcjtcXG59XFxuXCIsXG4gICAgICAgIC8vIGN1c3RvbSB1bmlmb3Jtc1xuICAgICAgICB7XG4gICAgICAgICAgICBub2lzZTogeyB0eXBlOiAnMWYnLCB2YWx1ZTogMC41IH1cbiAgICAgICAgfVxuICAgICk7XG59XG5cbk5vaXNlRmlsdGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoY29yZS5BYnN0cmFjdEZpbHRlci5wcm90b3R5cGUpO1xuTm9pc2VGaWx0ZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gTm9pc2VGaWx0ZXI7XG5tb2R1bGUuZXhwb3J0cyA9IE5vaXNlRmlsdGVyO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhOb2lzZUZpbHRlci5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBUaGUgYW1vdW50IG9mIG5vaXNlIHRvIGFwcGx5LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuTm9pc2VGaWx0ZXIjXG4gICAgICogQGRlZmF1bHQgMC41XG4gICAgICovXG4gICAgbm9pc2U6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy51bmlmb3Jtcy5ub2lzZS52YWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudW5pZm9ybXMubm9pc2UudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi8uLi9jb3JlJyk7XG4vLyBAc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9zdWJzdGFjay9icmZzL2lzc3Vlcy8yNVxuXG5cbi8qKlxuICogVGhpcyBmaWx0ZXIgYXBwbGllcyBhIHBpeGVsYXRlIGVmZmVjdCBtYWtpbmcgZGlzcGxheSBvYmplY3RzIGFwcGVhciAnYmxvY2t5Jy5cbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQWJzdHJhY3RGaWx0ZXJcbiAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnNcbiAqL1xuZnVuY3Rpb24gUGl4ZWxhdGVGaWx0ZXIoKVxue1xuICAgIGNvcmUuQWJzdHJhY3RGaWx0ZXIuY2FsbCh0aGlzLFxuICAgICAgICAvLyB2ZXJ0ZXggc2hhZGVyXG4gICAgICAgIG51bGwsXG4gICAgICAgIC8vIGZyYWdtZW50IHNoYWRlclxuICAgICAgICBcInByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xcblxcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xcblxcbnVuaWZvcm0gdmVjNCBkaW1lbnNpb25zO1xcbnVuaWZvcm0gdmVjMiBwaXhlbFNpemU7XFxudW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXI7XFxuXFxudm9pZCBtYWluKHZvaWQpXFxue1xcbiAgICB2ZWMyIGNvb3JkID0gdlRleHR1cmVDb29yZDtcXG5cXG4gICAgdmVjMiBzaXplID0gZGltZW5zaW9ucy54eSAvIHBpeGVsU2l6ZTtcXG5cXG4gICAgdmVjMiBjb2xvciA9IGZsb29yKCAoIHZUZXh0dXJlQ29vcmQgKiBzaXplICkgKSAvIHNpemUgKyBwaXhlbFNpemUvZGltZW5zaW9ucy54eSAqIDAuNTtcXG5cXG4gICAgZ2xfRnJhZ0NvbG9yID0gdGV4dHVyZTJEKHVTYW1wbGVyLCBjb2xvcik7XFxufVxcblwiLFxuICAgICAgICAvLyBjdXN0b20gdW5pZm9ybXNcbiAgICAgICAge1xuICAgICAgICAgICAgZGltZW5zaW9uczogeyB0eXBlOiAnNGZ2JywgIHZhbHVlOiBuZXcgRmxvYXQzMkFycmF5KFswLCAwLCAwLCAwXSkgfSxcbiAgICAgICAgICAgIHBpeGVsU2l6ZTogIHsgdHlwZTogJ3YyJywgICB2YWx1ZTogeyB4OiAxMCwgeTogMTAgfSB9XG4gICAgICAgIH1cbiAgICApO1xufVxuXG5QaXhlbGF0ZUZpbHRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuQWJzdHJhY3RGaWx0ZXIucHJvdG90eXBlKTtcblBpeGVsYXRlRmlsdGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFBpeGVsYXRlRmlsdGVyO1xubW9kdWxlLmV4cG9ydHMgPSBQaXhlbGF0ZUZpbHRlcjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoUGl4ZWxhdGVGaWx0ZXIucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogVGhpcyBhIHBvaW50IHRoYXQgZGVzY3JpYmVzIHRoZSBzaXplIG9mIHRoZSBibG9ja3MuXG4gICAgICogeCBpcyB0aGUgd2lkdGggb2YgdGhlIGJsb2NrIGFuZCB5IGlzIHRoZSBoZWlnaHQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlBvaW50fVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuUGl4ZWxhdGVGaWx0ZXIjXG4gICAgICovXG4gICAgc2l6ZToge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVuaWZvcm1zLnBpeGVsU2l6ZS52YWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudW5pZm9ybXMucGl4ZWxTaXplLnZhbHVlID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG59KTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vLi4vY29yZScpO1xuLy8gQHNlZSBodHRwczovL2dpdGh1Yi5jb20vc3Vic3RhY2svYnJmcy9pc3N1ZXMvMjVcblxuXG4vKipcbiAqIEFuIFJHQiBTcGxpdCBGaWx0ZXIuXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLkFic3RyYWN0RmlsdGVyXG4gKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzXG4gKi9cbmZ1bmN0aW9uIFJHQlNwbGl0RmlsdGVyKClcbntcbiAgICBjb3JlLkFic3RyYWN0RmlsdGVyLmNhbGwodGhpcyxcbiAgICAgICAgLy8gdmVydGV4IHNoYWRlclxuICAgICAgICBudWxsLFxuICAgICAgICAvLyBmcmFnbWVudCBzaGFkZXJcbiAgICAgICAgXCJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcXG5cXG52YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDtcXG5cXG51bmlmb3JtIHNhbXBsZXIyRCB1U2FtcGxlcjtcXG51bmlmb3JtIHZlYzQgZGltZW5zaW9ucztcXG51bmlmb3JtIHZlYzIgcmVkO1xcbnVuaWZvcm0gdmVjMiBncmVlbjtcXG51bmlmb3JtIHZlYzIgYmx1ZTtcXG5cXG52b2lkIG1haW4odm9pZClcXG57XFxuICAgZ2xfRnJhZ0NvbG9yLnIgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZUZXh0dXJlQ29vcmQgKyByZWQvZGltZW5zaW9ucy54eSkucjtcXG4gICBnbF9GcmFnQ29sb3IuZyA9IHRleHR1cmUyRCh1U2FtcGxlciwgdlRleHR1cmVDb29yZCArIGdyZWVuL2RpbWVuc2lvbnMueHkpLmc7XFxuICAgZ2xfRnJhZ0NvbG9yLmIgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZUZXh0dXJlQ29vcmQgKyBibHVlL2RpbWVuc2lvbnMueHkpLmI7XFxuICAgZ2xfRnJhZ0NvbG9yLmEgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZUZXh0dXJlQ29vcmQpLmE7XFxufVxcblwiLFxuICAgICAgICAvLyBjdXN0b20gdW5pZm9ybXNcbiAgICAgICAge1xuICAgICAgICAgICAgcmVkOiAgICAgICAgeyB0eXBlOiAndjInLCB2YWx1ZTogeyB4OiAyMCwgeTogMjAgfSB9LFxuICAgICAgICAgICAgZ3JlZW46ICAgICAgeyB0eXBlOiAndjInLCB2YWx1ZTogeyB4OiAtMjAsIHk6IDIwIH0gfSxcbiAgICAgICAgICAgIGJsdWU6ICAgICAgIHsgdHlwZTogJ3YyJywgdmFsdWU6IHsgeDogMjAsIHk6IC0yMCB9IH0sXG4gICAgICAgICAgICBkaW1lbnNpb25zOiB7IHR5cGU6ICc0ZnYnLCB2YWx1ZTogWzAsIDAsIDAsIDBdIH1cbiAgICAgICAgfVxuICAgICk7XG59XG5cblJHQlNwbGl0RmlsdGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoY29yZS5BYnN0cmFjdEZpbHRlci5wcm90b3R5cGUpO1xuUkdCU3BsaXRGaWx0ZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gUkdCU3BsaXRGaWx0ZXI7XG5tb2R1bGUuZXhwb3J0cyA9IFJHQlNwbGl0RmlsdGVyO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhSR0JTcGxpdEZpbHRlci5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBSZWQgY2hhbm5lbCBvZmZzZXQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlBvaW50fVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuUkdCU3BsaXRGaWx0ZXIjXG4gICAgICovXG4gICAgcmVkOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudW5pZm9ybXMucmVkLnZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy5yZWQudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBHcmVlbiBjaGFubmVsIG9mZnNldC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuUG9pbnR9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5SR0JTcGxpdEZpbHRlciNcbiAgICAgKi9cbiAgICBncmVlbjoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVuaWZvcm1zLmdyZWVuLnZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy5ncmVlbi52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIEJsdWUgb2Zmc2V0LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5Qb2ludH1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLlJHQlNwbGl0RmlsdGVyI1xuICAgICAqL1xuICAgIGJsdWU6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy51bmlmb3Jtcy5ibHVlLnZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy5ibHVlLnZhbHVlID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG59KTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vLi4vY29yZScpO1xuLy8gQHNlZSBodHRwczovL2dpdGh1Yi5jb20vc3Vic3RhY2svYnJmcy9pc3N1ZXMvMjVcblxuXG4vKipcbiAqIFRoaXMgYXBwbGllcyBhIHNlcGlhIGVmZmVjdCB0byB5b3VyIERpc3BsYXkgT2JqZWN0cy5cbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQWJzdHJhY3RGaWx0ZXJcbiAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnNcbiAqL1xuZnVuY3Rpb24gU2VwaWFGaWx0ZXIoKVxue1xuICAgIGNvcmUuQWJzdHJhY3RGaWx0ZXIuY2FsbCh0aGlzLFxuICAgICAgICAvLyB2ZXJ0ZXggc2hhZGVyXG4gICAgICAgIG51bGwsXG4gICAgICAgIC8vIGZyYWdtZW50IHNoYWRlclxuICAgICAgICBcInByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xcblxcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xcblxcbnVuaWZvcm0gc2FtcGxlcjJEIHVTYW1wbGVyO1xcbnVuaWZvcm0gZmxvYXQgc2VwaWE7XFxuXFxuY29uc3QgbWF0MyBzZXBpYU1hdHJpeCA9IG1hdDMoMC4zNTg4LCAwLjcwNDQsIDAuMTM2OCwgMC4yOTkwLCAwLjU4NzAsIDAuMTE0MCwgMC4yMzkyLCAwLjQ2OTYsIDAuMDkxMik7XFxuXFxudm9pZCBtYWluKHZvaWQpXFxue1xcbiAgIGdsX0ZyYWdDb2xvciA9IHRleHR1cmUyRCh1U2FtcGxlciwgdlRleHR1cmVDb29yZCk7XFxuICAgZ2xfRnJhZ0NvbG9yLnJnYiA9IG1peCggZ2xfRnJhZ0NvbG9yLnJnYiwgZ2xfRnJhZ0NvbG9yLnJnYiAqIHNlcGlhTWF0cml4LCBzZXBpYSk7XFxufVxcblwiLFxuICAgICAgICAvLyBjdXN0b20gdW5pZm9ybXNcbiAgICAgICAge1xuICAgICAgICAgICAgc2VwaWE6IHsgdHlwZTogJzFmJywgdmFsdWU6IDEgfVxuICAgICAgICB9XG4gICAgKTtcbn1cblxuU2VwaWFGaWx0ZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShjb3JlLkFic3RyYWN0RmlsdGVyLnByb3RvdHlwZSk7XG5TZXBpYUZpbHRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBTZXBpYUZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gU2VwaWFGaWx0ZXI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKFNlcGlhRmlsdGVyLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFRoZSBzdHJlbmd0aCBvZiB0aGUgc2VwaWEuIGAxYCB3aWxsIGFwcGx5IHRoZSBmdWxsIHNlcGlhIGVmZmVjdCwgYW5kXG4gICAgICogYDBgIHdpbGwgbWFrZSB0aGUgb2JqZWN0IGl0cyBub3JtYWwgY29sb3IuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5TZXBpYUZpbHRlciNcbiAgICAgKi9cbiAgICBzZXBpYToge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVuaWZvcm1zLnNlcGlhLnZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy5zZXBpYS52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfVxufSk7XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uLy4uL2NvcmUnKTtcbi8vIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL3N1YnN0YWNrL2JyZnMvaXNzdWVzLzI1XG5cblxuLyoqXG4gKiBUaGUgQ29sb3JNYXRyaXhGaWx0ZXIgY2xhc3MgbGV0cyB5b3UgYXBwbHkgYSA0eDQgbWF0cml4IHRyYW5zZm9ybWF0aW9uIG9uIHRoZSBSR0JBXG4gKiBjb2xvciBhbmQgYWxwaGEgdmFsdWVzIG9mIGV2ZXJ5IHBpeGVsIG9uIHlvdXIgZGlzcGxheU9iamVjdCB0byBwcm9kdWNlIGEgcmVzdWx0XG4gKiB3aXRoIGEgbmV3IHNldCBvZiBSR0JBIGNvbG9yIGFuZCBhbHBoYSB2YWx1ZXMuIEl0J3MgcHJldHR5IHBvd2VyZnVsIVxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5BYnN0cmFjdEZpbHRlclxuICogQG1lbWJlcm9mIFBJWEkuZmlsdGVyc1xuICovXG5mdW5jdGlvbiBTaG9ja3dhdmVGaWx0ZXIoKVxue1xuICAgIGNvcmUuQWJzdHJhY3RGaWx0ZXIuY2FsbCh0aGlzLFxuICAgICAgICAvLyB2ZXJ0ZXggc2hhZGVyXG4gICAgICAgIG51bGwsXG4gICAgICAgIC8vIGZyYWdtZW50IHNoYWRlclxuICAgICAgICBcInByZWNpc2lvbiBsb3dwIGZsb2F0O1xcblxcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xcblxcbnVuaWZvcm0gc2FtcGxlcjJEIHVTYW1wbGVyO1xcblxcbnVuaWZvcm0gdmVjMiBjZW50ZXI7XFxudW5pZm9ybSB2ZWMzIHBhcmFtczsgLy8gMTAuMCwgMC44LCAwLjFcXG51bmlmb3JtIGZsb2F0IHRpbWU7XFxuXFxudm9pZCBtYWluKClcXG57XFxuICAgIHZlYzIgdXYgPSB2VGV4dHVyZUNvb3JkO1xcbiAgICB2ZWMyIHRleENvb3JkID0gdXY7XFxuXFxuICAgIGZsb2F0IGRpc3QgPSBkaXN0YW5jZSh1diwgY2VudGVyKTtcXG5cXG4gICAgaWYgKCAoZGlzdCA8PSAodGltZSArIHBhcmFtcy56KSkgJiYgKGRpc3QgPj0gKHRpbWUgLSBwYXJhbXMueikpIClcXG4gICAge1xcbiAgICAgICAgZmxvYXQgZGlmZiA9IChkaXN0IC0gdGltZSk7XFxuICAgICAgICBmbG9hdCBwb3dEaWZmID0gMS4wIC0gcG93KGFicyhkaWZmKnBhcmFtcy54KSwgcGFyYW1zLnkpO1xcblxcbiAgICAgICAgZmxvYXQgZGlmZlRpbWUgPSBkaWZmICAqIHBvd0RpZmY7XFxuICAgICAgICB2ZWMyIGRpZmZVViA9IG5vcm1hbGl6ZSh1diAtIGNlbnRlcik7XFxuICAgICAgICB0ZXhDb29yZCA9IHV2ICsgKGRpZmZVViAqIGRpZmZUaW1lKTtcXG4gICAgfVxcblxcbiAgICBnbF9GcmFnQ29sb3IgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHRleENvb3JkKTtcXG59XFxuXCIsXG4gICAgICAgIC8vIGN1c3RvbSB1bmlmb3Jtc1xuICAgICAgICB7XG4gICAgICAgICAgICBjZW50ZXI6IHsgdHlwZTogJ3YyJywgdmFsdWU6IHsgeDogMC41LCB5OiAwLjUgfSB9LFxuICAgICAgICAgICAgcGFyYW1zOiB7IHR5cGU6ICd2MycsIHZhbHVlOiB7IHg6IDEwLCB5OiAwLjgsIHo6IDAuMSB9IH0sXG4gICAgICAgICAgICB0aW1lOiB7IHR5cGU6ICcxZicsIHZhbHVlOiAwIH1cbiAgICAgICAgfVxuICAgICk7XG59XG5cblNob2Nrd2F2ZUZpbHRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuQWJzdHJhY3RGaWx0ZXIucHJvdG90eXBlKTtcblNob2Nrd2F2ZUZpbHRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBTaG9ja3dhdmVGaWx0ZXI7XG5tb2R1bGUuZXhwb3J0cyA9IFNob2Nrd2F2ZUZpbHRlcjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoU2hvY2t3YXZlRmlsdGVyLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIGNlbnRlciBvZiB0aGUgc2hvY2t3YXZlIGluIG5vcm1hbGl6ZWQgc2NyZWVuIGNvb3Jkcy4gVGhhdCBpc1xuICAgICAqICgwLDApIGlzIHRoZSB0b3AtbGVmdCBhbmQgKDEsMSkgaXMgdGhlIGJvdHRvbSByaWdodC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge29iamVjdDxzdHJpbmcsIG51bWJlcj59XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5TaG9ja3dhdmVGaWx0ZXIjXG4gICAgICovXG4gICAgY2VudGVyOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudW5pZm9ybXMuY2VudGVyLnZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy5jZW50ZXIudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgcGFyYW1zIG9mIHRoZSBzaG9ja3dhdmUuIFRoZXNlIG1vZGlmeSB0aGUgbG9vayBhbmQgYmVoYXZpb3Igb2ZcbiAgICAgKiB0aGUgc2hvY2t3YXZlIGFzIGl0IHJpcHBsZXMgb3V0LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7b2JqZWN0PHN0cmluZywgbnVtYmVyPn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLlNob2Nrd2F2ZUZpbHRlciNcbiAgICAgKi9cbiAgICBwYXJhbXM6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy51bmlmb3Jtcy5wYXJhbXMudmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLnBhcmFtcy52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfSxcbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBlbGFwc2VkIHRpbWUgb2YgdGhlIHNob2Nrd2F2ZS4gVGhpcyBjb250cm9scyB0aGUgc3BlZWQgYXQgd2hpY2hcbiAgICAgKiB0aGUgc2hvY2t3YXZlIHJpcHBsZXMgb3V0LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuU2hvY2t3YXZlRmlsdGVyI1xuICAgICAqL1xuICAgIHRpbWU6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy51bmlmb3Jtcy50aW1lLnZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy50aW1lLnZhbHVlID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG59KTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vLi4vY29yZScpO1xuLy8gQHNlZSBodHRwczovL2dpdGh1Yi5jb20vc3Vic3RhY2svYnJmcy9pc3N1ZXMvMjVcblxuXG4vKipcbiAqIEBhdXRob3IgVmljbyBAdmljb2NvdGVhXG4gKiBvcmlnaW5hbCBmaWx0ZXIgaHR0cHM6Ly9naXRodWIuY29tL2V2YW53L2dsZnguanMvYmxvYi9tYXN0ZXIvc3JjL2ZpbHRlcnMvYmx1ci90aWx0c2hpZnQuanMgYnkgRXZhbiBXYWxsYWNlIDogaHR0cDovL21hZGVieWV2YW4uY29tL1xuICovXG5cbi8qKlxuICogQSBUaWx0U2hpZnRBeGlzRmlsdGVyLlxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5BYnN0cmFjdEZpbHRlclxuICogQG1lbWJlcm9mIFBJWEkuZmlsdGVyc1xuICovXG5mdW5jdGlvbiBUaWx0U2hpZnRBeGlzRmlsdGVyKClcbntcbiAgICBjb3JlLkFic3RyYWN0RmlsdGVyLmNhbGwodGhpcyxcbiAgICAgICAgLy8gdmVydGV4IHNoYWRlclxuICAgICAgICBudWxsLFxuICAgICAgICAvLyBmcmFnbWVudCBzaGFkZXJcbiAgICAgICAgXCJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcXG5cXG52YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDtcXG5cXG51bmlmb3JtIHNhbXBsZXIyRCB1U2FtcGxlcjtcXG51bmlmb3JtIGZsb2F0IGJsdXI7XFxudW5pZm9ybSBmbG9hdCBncmFkaWVudEJsdXI7XFxudW5pZm9ybSB2ZWMyIHN0YXJ0O1xcbnVuaWZvcm0gdmVjMiBlbmQ7XFxudW5pZm9ybSB2ZWMyIGRlbHRhO1xcbnVuaWZvcm0gdmVjMiB0ZXhTaXplO1xcblxcbmZsb2F0IHJhbmRvbSh2ZWMzIHNjYWxlLCBmbG9hdCBzZWVkKVxcbntcXG4gICAgcmV0dXJuIGZyYWN0KHNpbihkb3QoZ2xfRnJhZ0Nvb3JkLnh5eiArIHNlZWQsIHNjYWxlKSkgKiA0Mzc1OC41NDUzICsgc2VlZCk7XFxufVxcblxcbnZvaWQgbWFpbih2b2lkKVxcbntcXG4gICAgdmVjNCBjb2xvciA9IHZlYzQoMC4wKTtcXG4gICAgZmxvYXQgdG90YWwgPSAwLjA7XFxuXFxuICAgIGZsb2F0IG9mZnNldCA9IHJhbmRvbSh2ZWMzKDEyLjk4OTgsIDc4LjIzMywgMTUxLjcxODIpLCAwLjApO1xcbiAgICB2ZWMyIG5vcm1hbCA9IG5vcm1hbGl6ZSh2ZWMyKHN0YXJ0LnkgLSBlbmQueSwgZW5kLnggLSBzdGFydC54KSk7XFxuICAgIGZsb2F0IHJhZGl1cyA9IHNtb290aHN0ZXAoMC4wLCAxLjAsIGFicyhkb3QodlRleHR1cmVDb29yZCAqIHRleFNpemUgLSBzdGFydCwgbm9ybWFsKSkgLyBncmFkaWVudEJsdXIpICogYmx1cjtcXG5cXG4gICAgZm9yIChmbG9hdCB0ID0gLTMwLjA7IHQgPD0gMzAuMDsgdCsrKVxcbiAgICB7XFxuICAgICAgICBmbG9hdCBwZXJjZW50ID0gKHQgKyBvZmZzZXQgLSAwLjUpIC8gMzAuMDtcXG4gICAgICAgIGZsb2F0IHdlaWdodCA9IDEuMCAtIGFicyhwZXJjZW50KTtcXG4gICAgICAgIHZlYzQgc2FtcGxlID0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2VGV4dHVyZUNvb3JkICsgZGVsdGEgLyB0ZXhTaXplICogcGVyY2VudCAqIHJhZGl1cyk7XFxuICAgICAgICBzYW1wbGUucmdiICo9IHNhbXBsZS5hO1xcbiAgICAgICAgY29sb3IgKz0gc2FtcGxlICogd2VpZ2h0O1xcbiAgICAgICAgdG90YWwgKz0gd2VpZ2h0O1xcbiAgICB9XFxuXFxuICAgIGdsX0ZyYWdDb2xvciA9IGNvbG9yIC8gdG90YWw7XFxuICAgIGdsX0ZyYWdDb2xvci5yZ2IgLz0gZ2xfRnJhZ0NvbG9yLmEgKyAwLjAwMDAxO1xcbn1cXG5cIixcbiAgICAgICAgLy8gY3VzdG9tIHVuaWZvcm1zXG4gICAgICAgIHtcbiAgICAgICAgICAgIGJsdXI6ICAgICAgICAgICB7IHR5cGU6ICcxZicsIHZhbHVlOiAxMDAgfSxcbiAgICAgICAgICAgIGdyYWRpZW50Qmx1cjogICB7IHR5cGU6ICcxZicsIHZhbHVlOiA2MDAgfSxcbiAgICAgICAgICAgIHN0YXJ0OiAgICAgICAgICB7IHR5cGU6ICd2MicsIHZhbHVlOiB7IHg6IDAsICAgIHk6IHdpbmRvdy5pbm5lckhlaWdodCAvIDIgfSB9LFxuICAgICAgICAgICAgZW5kOiAgICAgICAgICAgIHsgdHlwZTogJ3YyJywgdmFsdWU6IHsgeDogNjAwLCAgeTogd2luZG93LmlubmVySGVpZ2h0IC8gMiB9IH0sXG4gICAgICAgICAgICBkZWx0YTogICAgICAgICAgeyB0eXBlOiAndjInLCB2YWx1ZTogeyB4OiAzMCwgICB5OiAzMCB9IH0sXG4gICAgICAgICAgICB0ZXhTaXplOiAgICAgICAgeyB0eXBlOiAndjInLCB2YWx1ZTogeyB4OiB3aW5kb3cuaW5uZXJXaWR0aCwgeTogd2luZG93LmlubmVySGVpZ2h0IH0gfVxuICAgICAgICB9XG4gICAgKTtcblxuICAgIHRoaXMudXBkYXRlRGVsdGEoKTtcbn1cblxuVGlsdFNoaWZ0QXhpc0ZpbHRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuQWJzdHJhY3RGaWx0ZXIucHJvdG90eXBlKTtcblRpbHRTaGlmdEF4aXNGaWx0ZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gVGlsdFNoaWZ0QXhpc0ZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gVGlsdFNoaWZ0QXhpc0ZpbHRlcjtcblxuLyoqXG4gKiBVcGRhdGVzIHRoZSBmaWx0ZXIgZGVsdGEgdmFsdWVzLlxuICogVGhpcyBpcyBvdmVycmlkZGVuIGluIHRoZSBYIGFuZCBZIGZpbHRlcnMsIGRvZXMgbm90aGluZyBmb3IgdGhpcyBjbGFzcy5cbiAqXG4gKi9cblRpbHRTaGlmdEF4aXNGaWx0ZXIucHJvdG90eXBlLnVwZGF0ZURlbHRhID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLnVuaWZvcm1zLmRlbHRhLnZhbHVlLnggPSAwO1xuICAgIHRoaXMudW5pZm9ybXMuZGVsdGEudmFsdWUueSA9IDA7XG59O1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhUaWx0U2hpZnRBeGlzRmlsdGVyLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFRoZSBzdHJlbmd0aCBvZiB0aGUgYmx1ci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLlRpbHRTaGlmdEF4aXNGaWx0ZXIjXG4gICAgICovXG4gICAgYmx1cjoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVuaWZvcm1zLmJsdXIudmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLmJsdXIudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBUaGUgc3RyZW5ndGggb2YgdGhlIGdyYWRpZW50IGJsdXIuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5UaWx0U2hpZnRBeGlzRmlsdGVyI1xuICAgICAqL1xuICAgIGdyYWRpZW50Qmx1cjoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVuaWZvcm1zLmdyYWRpZW50Qmx1ci52YWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudW5pZm9ybXMuZ3JhZGllbnRCbHVyLnZhbHVlID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVGhlIFggdmFsdWUgdG8gc3RhcnQgdGhlIGVmZmVjdCBhdC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuUG9pbnR9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5UaWx0U2hpZnRBeGlzRmlsdGVyI1xuICAgICAqL1xuICAgIHN0YXJ0OiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudW5pZm9ybXMuc3RhcnQudmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLnN0YXJ0LnZhbHVlID0gdmFsdWU7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZURlbHRhKCk7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVGhlIFggdmFsdWUgdG8gZW5kIHRoZSBlZmZlY3QgYXQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlBvaW50fVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuVGlsdFNoaWZ0QXhpc0ZpbHRlciNcbiAgICAgKi9cbiAgICBlbmQ6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy51bmlmb3Jtcy5lbmQudmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLmVuZC52YWx1ZSA9IHZhbHVlO1xuICAgICAgICAgICAgdGhpcy51cGRhdGVEZWx0YSgpO1xuICAgICAgICB9XG4gICAgfVxufSk7XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uLy4uL2NvcmUnKSxcbiAgICBUaWx0U2hpZnRYRmlsdGVyID0gcmVxdWlyZSgnLi9UaWx0U2hpZnRYRmlsdGVyJyksXG4gICAgVGlsdFNoaWZ0WUZpbHRlciA9IHJlcXVpcmUoJy4vVGlsdFNoaWZ0WUZpbHRlcicpO1xuXG4vKipcbiAqIEBhdXRob3IgVmljbyBAdmljb2NvdGVhXG4gKiBvcmlnaW5hbCBmaWx0ZXIgaHR0cHM6Ly9naXRodWIuY29tL2V2YW53L2dsZnguanMvYmxvYi9tYXN0ZXIvc3JjL2ZpbHRlcnMvYmx1ci90aWx0c2hpZnQuanMgYnkgRXZhbiBXYWxsYWNlIDogaHR0cDovL21hZGVieWV2YW4uY29tL1xuICovXG5cbi8qKlxuICogQSBUaWx0U2hpZnQgRmlsdGVyLiBNYW5hZ2VzIHRoZSBwYXNzIG9mIGJvdGggYSBUaWx0U2hpZnRYRmlsdGVyIGFuZCBUaWx0U2hpZnRZRmlsdGVyLlxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5BYnN0cmFjdEZpbHRlclxuICogQG1lbWJlcm9mIFBJWEkuZmlsdGVyc1xuICovXG5mdW5jdGlvbiBUaWx0U2hpZnRGaWx0ZXIoKVxue1xuICAgIGNvcmUuQWJzdHJhY3RGaWx0ZXIuY2FsbCh0aGlzKTtcblxuICAgIHRoaXMudGlsdFNoaWZ0WEZpbHRlciA9IG5ldyBUaWx0U2hpZnRYRmlsdGVyKCk7XG4gICAgdGhpcy50aWx0U2hpZnRZRmlsdGVyID0gbmV3IFRpbHRTaGlmdFlGaWx0ZXIoKTtcbn1cblxuVGlsdFNoaWZ0RmlsdGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoY29yZS5BYnN0cmFjdEZpbHRlci5wcm90b3R5cGUpO1xuVGlsdFNoaWZ0RmlsdGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFRpbHRTaGlmdEZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gVGlsdFNoaWZ0RmlsdGVyO1xuXG5UaWx0U2hpZnRGaWx0ZXIucHJvdG90eXBlLmFwcGx5RmlsdGVyID0gZnVuY3Rpb24gKHJlbmRlcmVyLCBpbnB1dCwgb3V0cHV0KVxue1xuICAgIHZhciByZW5kZXJUYXJnZXQgPSByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLmdldFJlbmRlclRhcmdldCh0cnVlKTtcblxuICAgIHRoaXMudGlsdFNoaWZ0WEZpbHRlci5hcHBseUZpbHRlcihyZW5kZXJlciwgaW5wdXQsIHJlbmRlclRhcmdldCk7XG5cbiAgICB0aGlzLnRpbHRTaGlmdFlGaWx0ZXIuYXBwbHlGaWx0ZXIocmVuZGVyZXIsIHJlbmRlclRhcmdldCwgb3V0cHV0KTtcblxuICAgIHJlbmRlcmVyLmZpbHRlck1hbmFnZXIucmV0dXJuUmVuZGVyVGFyZ2V0KHJlbmRlclRhcmdldCk7XG59O1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhUaWx0U2hpZnRGaWx0ZXIucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogVGhlIHN0cmVuZ3RoIG9mIHRoZSBibHVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuVGlsdFNoaWZ0RmlsdGVyI1xuICAgICAqL1xuICAgIGJsdXI6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy50aWx0U2hpZnRYRmlsdGVyLmJsdXI7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnRpbHRTaGlmdFhGaWx0ZXIuYmx1ciA9IHRoaXMudGlsdFNoaWZ0WUZpbHRlci5ibHVyID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVGhlIHN0cmVuZ3RoIG9mIHRoZSBncmFkaWVudCBibHVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuVGlsdFNoaWZ0RmlsdGVyI1xuICAgICAqL1xuICAgIGdyYWRpZW50Qmx1cjoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnRpbHRTaGlmdFhGaWx0ZXIuZ3JhZGllbnRCbHVyO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy50aWx0U2hpZnRYRmlsdGVyLmdyYWRpZW50Qmx1ciA9IHRoaXMudGlsdFNoaWZ0WUZpbHRlci5ncmFkaWVudEJsdXIgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBUaGUgWSB2YWx1ZSB0byBzdGFydCB0aGUgZWZmZWN0IGF0LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuVGlsdFNoaWZ0RmlsdGVyI1xuICAgICAqL1xuICAgIHN0YXJ0OiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudGlsdFNoaWZ0WEZpbHRlci5zdGFydDtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudGlsdFNoaWZ0WEZpbHRlci5zdGFydCA9IHRoaXMudGlsdFNoaWZ0WUZpbHRlci5zdGFydCA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFRoZSBZIHZhbHVlIHRvIGVuZCB0aGUgZWZmZWN0IGF0LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuVGlsdFNoaWZ0RmlsdGVyI1xuICAgICAqL1xuICAgIGVuZDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnRpbHRTaGlmdFhGaWx0ZXIuZW5kO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy50aWx0U2hpZnRYRmlsdGVyLmVuZCA9IHRoaXMudGlsdFNoaWZ0WUZpbHRlci5lbmQgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuIiwidmFyIFRpbHRTaGlmdEF4aXNGaWx0ZXIgPSByZXF1aXJlKCcuL1RpbHRTaGlmdEF4aXNGaWx0ZXInKTtcblxuLyoqXG4gKiBAYXV0aG9yIFZpY28gQHZpY29jb3RlYVxuICogb3JpZ2luYWwgZmlsdGVyIGh0dHBzOi8vZ2l0aHViLmNvbS9ldmFudy9nbGZ4LmpzL2Jsb2IvbWFzdGVyL3NyYy9maWx0ZXJzL2JsdXIvdGlsdHNoaWZ0LmpzIGJ5IEV2YW4gV2FsbGFjZSA6IGh0dHA6Ly9tYWRlYnlldmFuLmNvbS9cbiAqL1xuXG4vKipcbiAqIEEgVGlsdFNoaWZ0WEZpbHRlci5cbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuVGlsdFNoaWZ0QXhpc0ZpbHRlclxuICogQG1lbWJlcm9mIFBJWEkuZmlsdGVyc1xuICovXG5mdW5jdGlvbiBUaWx0U2hpZnRYRmlsdGVyKClcbntcbiAgICBUaWx0U2hpZnRBeGlzRmlsdGVyLmNhbGwodGhpcyk7XG59XG5cblRpbHRTaGlmdFhGaWx0ZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShUaWx0U2hpZnRBeGlzRmlsdGVyLnByb3RvdHlwZSk7XG5UaWx0U2hpZnRYRmlsdGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFRpbHRTaGlmdFhGaWx0ZXI7XG5tb2R1bGUuZXhwb3J0cyA9IFRpbHRTaGlmdFhGaWx0ZXI7XG5cbi8qKlxuICogVXBkYXRlcyB0aGUgZmlsdGVyIGRlbHRhIHZhbHVlcy5cbiAqXG4gKi9cblRpbHRTaGlmdFhGaWx0ZXIucHJvdG90eXBlLnVwZGF0ZURlbHRhID0gZnVuY3Rpb24gKClcbntcbiAgICB2YXIgZHggPSB0aGlzLnVuaWZvcm1zLmVuZC52YWx1ZS54IC0gdGhpcy51bmlmb3Jtcy5zdGFydC52YWx1ZS54O1xuICAgIHZhciBkeSA9IHRoaXMudW5pZm9ybXMuZW5kLnZhbHVlLnkgLSB0aGlzLnVuaWZvcm1zLnN0YXJ0LnZhbHVlLnk7XG4gICAgdmFyIGQgPSBNYXRoLnNxcnQoZHggKiBkeCArIGR5ICogZHkpO1xuXG4gICAgdGhpcy51bmlmb3Jtcy5kZWx0YS52YWx1ZS54ID0gZHggLyBkO1xuICAgIHRoaXMudW5pZm9ybXMuZGVsdGEudmFsdWUueSA9IGR5IC8gZDtcbn07XG4iLCJ2YXIgVGlsdFNoaWZ0QXhpc0ZpbHRlciA9IHJlcXVpcmUoJy4vVGlsdFNoaWZ0QXhpc0ZpbHRlcicpO1xuXG4vKipcbiAqIEBhdXRob3IgVmljbyBAdmljb2NvdGVhXG4gKiBvcmlnaW5hbCBmaWx0ZXIgaHR0cHM6Ly9naXRodWIuY29tL2V2YW53L2dsZnguanMvYmxvYi9tYXN0ZXIvc3JjL2ZpbHRlcnMvYmx1ci90aWx0c2hpZnQuanMgYnkgRXZhbiBXYWxsYWNlIDogaHR0cDovL21hZGVieWV2YW4uY29tL1xuICovXG5cbi8qKlxuICogQSBUaWx0U2hpZnRZRmlsdGVyLlxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5UaWx0U2hpZnRBeGlzRmlsdGVyXG4gKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzXG4gKi9cbmZ1bmN0aW9uIFRpbHRTaGlmdFlGaWx0ZXIoKVxue1xuICAgIFRpbHRTaGlmdEF4aXNGaWx0ZXIuY2FsbCh0aGlzKTtcbn1cblxuVGlsdFNoaWZ0WUZpbHRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFRpbHRTaGlmdEF4aXNGaWx0ZXIucHJvdG90eXBlKTtcblRpbHRTaGlmdFlGaWx0ZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gVGlsdFNoaWZ0WUZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gVGlsdFNoaWZ0WUZpbHRlcjtcblxuLyoqXG4gKiBVcGRhdGVzIHRoZSBmaWx0ZXIgZGVsdGEgdmFsdWVzLlxuICpcbiAqL1xuVGlsdFNoaWZ0WUZpbHRlci5wcm90b3R5cGUudXBkYXRlRGVsdGEgPSBmdW5jdGlvbiAoKVxue1xuICAgIHZhciBkeCA9IHRoaXMudW5pZm9ybXMuZW5kLnZhbHVlLnggLSB0aGlzLnVuaWZvcm1zLnN0YXJ0LnZhbHVlLng7XG4gICAgdmFyIGR5ID0gdGhpcy51bmlmb3Jtcy5lbmQudmFsdWUueSAtIHRoaXMudW5pZm9ybXMuc3RhcnQudmFsdWUueTtcbiAgICB2YXIgZCA9IE1hdGguc3FydChkeCAqIGR4ICsgZHkgKiBkeSk7XG5cbiAgICB0aGlzLnVuaWZvcm1zLmRlbHRhLnZhbHVlLnggPSAtZHkgLyBkO1xuICAgIHRoaXMudW5pZm9ybXMuZGVsdGEudmFsdWUueSA9IGR4IC8gZDtcbn07XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uLy4uL2NvcmUnKTtcbi8vIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL3N1YnN0YWNrL2JyZnMvaXNzdWVzLzI1XG5cblxuLyoqXG4gKiBUaGlzIGZpbHRlciBhcHBsaWVzIGEgdHdpc3QgZWZmZWN0IG1ha2luZyBkaXNwbGF5IG9iamVjdHMgYXBwZWFyIHR3aXN0ZWQgaW4gdGhlIGdpdmVuIGRpcmVjdGlvbi5cbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQWJzdHJhY3RGaWx0ZXJcbiAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnNcbiAqL1xuZnVuY3Rpb24gVHdpc3RGaWx0ZXIoKVxue1xuICAgIGNvcmUuQWJzdHJhY3RGaWx0ZXIuY2FsbCh0aGlzLFxuICAgICAgICAvLyB2ZXJ0ZXggc2hhZGVyXG4gICAgICAgIG51bGwsXG4gICAgICAgIC8vIGZyYWdtZW50IHNoYWRlclxuICAgICAgICBcInByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xcblxcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xcblxcbnVuaWZvcm0gc2FtcGxlcjJEIHVTYW1wbGVyO1xcbnVuaWZvcm0gZmxvYXQgcmFkaXVzO1xcbnVuaWZvcm0gZmxvYXQgYW5nbGU7XFxudW5pZm9ybSB2ZWMyIG9mZnNldDtcXG5cXG52b2lkIG1haW4odm9pZClcXG57XFxuICAgdmVjMiBjb29yZCA9IHZUZXh0dXJlQ29vcmQgLSBvZmZzZXQ7XFxuICAgZmxvYXQgZGlzdCA9IGxlbmd0aChjb29yZCk7XFxuXFxuICAgaWYgKGRpc3QgPCByYWRpdXMpXFxuICAge1xcbiAgICAgICBmbG9hdCByYXRpbyA9IChyYWRpdXMgLSBkaXN0KSAvIHJhZGl1cztcXG4gICAgICAgZmxvYXQgYW5nbGVNb2QgPSByYXRpbyAqIHJhdGlvICogYW5nbGU7XFxuICAgICAgIGZsb2F0IHMgPSBzaW4oYW5nbGVNb2QpO1xcbiAgICAgICBmbG9hdCBjID0gY29zKGFuZ2xlTW9kKTtcXG4gICAgICAgY29vcmQgPSB2ZWMyKGNvb3JkLnggKiBjIC0gY29vcmQueSAqIHMsIGNvb3JkLnggKiBzICsgY29vcmQueSAqIGMpO1xcbiAgIH1cXG5cXG4gICBnbF9GcmFnQ29sb3IgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIGNvb3JkK29mZnNldCk7XFxufVxcblwiLFxuICAgICAgICAvLyBjdXN0b20gdW5pZm9ybXNcbiAgICAgICAge1xuICAgICAgICAgICAgcmFkaXVzOiAgICAgeyB0eXBlOiAnMWYnLCB2YWx1ZTogMC41IH0sXG4gICAgICAgICAgICBhbmdsZTogICAgICB7IHR5cGU6ICcxZicsIHZhbHVlOiA1IH0sXG4gICAgICAgICAgICBvZmZzZXQ6ICAgICB7IHR5cGU6ICd2MicsIHZhbHVlOiB7IHg6IDAuNSwgeTogMC41IH0gfVxuICAgICAgICB9XG4gICAgKTtcbn1cblxuVHdpc3RGaWx0ZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShjb3JlLkFic3RyYWN0RmlsdGVyLnByb3RvdHlwZSk7XG5Ud2lzdEZpbHRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBUd2lzdEZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gVHdpc3RGaWx0ZXI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKFR3aXN0RmlsdGVyLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFRoaXMgcG9pbnQgZGVzY3JpYmVzIHRoZSB0aGUgb2Zmc2V0IG9mIHRoZSB0d2lzdC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuUG9pbnR9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5Ud2lzdEZpbHRlciNcbiAgICAgKi9cbiAgICBvZmZzZXQ6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy51bmlmb3Jtcy5vZmZzZXQudmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLm9mZnNldC52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFRoaXMgcmFkaXVzIG9mIHRoZSB0d2lzdC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLlR3aXN0RmlsdGVyI1xuICAgICAqL1xuICAgIHJhZGl1czoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVuaWZvcm1zLnJhZGl1cy52YWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudW5pZm9ybXMucmFkaXVzLnZhbHVlID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVGhpcyBhbmdsZSBvZiB0aGUgdHdpc3QuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5Ud2lzdEZpbHRlciNcbiAgICAgKi9cbiAgICBhbmdsZToge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVuaWZvcm1zLmFuZ2xlLnZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy5hbmdsZS52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfVxufSk7XG4iLCIvLyBydW4gdGhlIHBvbHlmaWxsc1xucmVxdWlyZSgnLi9wb2x5ZmlsbCcpO1xuXG52YXIgY29yZSA9IG1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9jb3JlJyk7XG5cbi8vIGFkZCBjb3JlIHBsdWdpbnMuXG5jb3JlLmV4dHJhcyAgICAgICAgID0gcmVxdWlyZSgnLi9leHRyYXMnKTtcbmNvcmUuZmlsdGVycyAgICAgICAgPSByZXF1aXJlKCcuL2ZpbHRlcnMnKTtcbmNvcmUuaW50ZXJhY3Rpb24gICAgPSByZXF1aXJlKCcuL2ludGVyYWN0aW9uJyk7XG5jb3JlLmxvYWRlcnMgICAgICAgID0gcmVxdWlyZSgnLi9sb2FkZXJzJyk7XG5jb3JlLm1lc2ggICAgICAgICAgID0gcmVxdWlyZSgnLi9tZXNoJyk7XG5jb3JlLmFjY2Vzc2liaWxpdHkgID0gcmVxdWlyZSgnLi9hY2Nlc3NpYmlsaXR5Jyk7XG5cbi8vIGV4cG9ydCBhIHByZW1hZGUgbG9hZGVyIGluc3RhbmNlXG4vKipcbiAqIEEgcHJlbWFkZSBpbnN0YW5jZSBvZiB0aGUgbG9hZGVyIHRoYXQgY2FuIGJlIHVzZWQgdG8gbG9hZGVyIHJlc291cmNlcy5cbiAqXG4gKiBAbmFtZSBsb2FkZXJcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcHJvcGVydHkge1BJWEkubG9hZGVycy5Mb2FkZXJ9XG4gKi9cbmNvcmUubG9hZGVyID0gbmV3IGNvcmUubG9hZGVycy5Mb2FkZXIoKTtcblxuLy8gbWl4aW4gdGhlIGRlcHJlY2F0aW9uIGZlYXR1cmVzLlxuT2JqZWN0LmFzc2lnbihjb3JlLCByZXF1aXJlKCcuL2RlcHJlY2F0aW9uJykpO1xuXG4vLyBBbHdheXMgZXhwb3J0IHBpeGkgZ2xvYmFsbHkuXG5nbG9iYWwuUElYSSA9IGNvcmU7XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uL2NvcmUnKTtcblxuLyoqXG4gKiBIb2xkcyBhbGwgaW5mb3JtYXRpb24gcmVsYXRlZCB0byBhbiBJbnRlcmFjdGlvbiBldmVudFxuICpcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWEkuaW50ZXJhY3Rpb25cbiAqL1xuZnVuY3Rpb24gSW50ZXJhY3Rpb25EYXRhKClcbntcbiAgICAvKipcbiAgICAgKiBUaGlzIHBvaW50IHN0b3JlcyB0aGUgZ2xvYmFsIGNvb3JkcyBvZiB3aGVyZSB0aGUgdG91Y2gvbW91c2UgZXZlbnQgaGFwcGVuZWRcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuUG9pbnR9XG4gICAgICovXG4gICAgdGhpcy5nbG9iYWwgPSBuZXcgY29yZS5Qb2ludCgpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHRhcmdldCBTcHJpdGUgdGhhdCB3YXMgaW50ZXJhY3RlZCB3aXRoXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlNwcml0ZX1cbiAgICAgKi9cbiAgICB0aGlzLnRhcmdldCA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBXaGVuIHBhc3NlZCB0byBhbiBldmVudCBoYW5kbGVyLCB0aGlzIHdpbGwgYmUgdGhlIG9yaWdpbmFsIERPTSBFdmVudCB0aGF0IHdhcyBjYXB0dXJlZFxuICAgICAqXG4gICAgICogQG1lbWJlciB7RXZlbnR9XG4gICAgICovXG4gICAgdGhpcy5vcmlnaW5hbEV2ZW50ID0gbnVsbDtcbn1cblxuSW50ZXJhY3Rpb25EYXRhLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IEludGVyYWN0aW9uRGF0YTtcbm1vZHVsZS5leHBvcnRzID0gSW50ZXJhY3Rpb25EYXRhO1xuXG4vKipcbiAqIFRoaXMgd2lsbCByZXR1cm4gdGhlIGxvY2FsIGNvb3JkaW5hdGVzIG9mIHRoZSBzcGVjaWZpZWQgZGlzcGxheU9iamVjdCBmb3IgdGhpcyBJbnRlcmFjdGlvbkRhdGFcbiAqXG4gKiBAcGFyYW0gZGlzcGxheU9iamVjdCB7UElYSS5EaXNwbGF5T2JqZWN0fSBUaGUgRGlzcGxheU9iamVjdCB0aGF0IHlvdSB3b3VsZCBsaWtlIHRoZSBsb2NhbCBjb29yZHMgb2ZmXG4gKiBAcGFyYW0gW3BvaW50XSB7UElYSS5Qb2ludH0gQSBQb2ludCBvYmplY3QgaW4gd2hpY2ggdG8gc3RvcmUgdGhlIHZhbHVlLCBvcHRpb25hbCAob3RoZXJ3aXNlIHdpbGwgY3JlYXRlIGEgbmV3IHBvaW50KVxuICogQHBhcmFtIFtnbG9iYWxQb3NdIHtQSVhJLlBvaW50fSBBIFBvaW50IG9iamVjdCBjb250YWluaW5nIHlvdXIgY3VzdG9tIGdsb2JhbCBjb29yZHMsIG9wdGlvbmFsIChvdGhlcndpc2Ugd2lsbCB1c2UgdGhlIGN1cnJlbnQgZ2xvYmFsIGNvb3JkcylcbiAqIEByZXR1cm4ge1BJWEkuUG9pbnR9IEEgcG9pbnQgY29udGFpbmluZyB0aGUgY29vcmRpbmF0ZXMgb2YgdGhlIEludGVyYWN0aW9uRGF0YSBwb3NpdGlvbiByZWxhdGl2ZSB0byB0aGUgRGlzcGxheU9iamVjdFxuICovXG5JbnRlcmFjdGlvbkRhdGEucHJvdG90eXBlLmdldExvY2FsUG9zaXRpb24gPSBmdW5jdGlvbiAoZGlzcGxheU9iamVjdCwgcG9pbnQsIGdsb2JhbFBvcylcbntcbiAgICByZXR1cm4gZGlzcGxheU9iamVjdC53b3JsZFRyYW5zZm9ybS5hcHBseUludmVyc2UoZ2xvYmFsUG9zIHx8IHRoaXMuZ2xvYmFsLCBwb2ludCk7XG59O1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi9jb3JlJyksXG4gICAgSW50ZXJhY3Rpb25EYXRhID0gcmVxdWlyZSgnLi9JbnRlcmFjdGlvbkRhdGEnKTtcblxuLy8gTWl4IGludGVyYWN0aXZlVGFyZ2V0IGludG8gY29yZS5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZVxuT2JqZWN0LmFzc2lnbihcbiAgICBjb3JlLkRpc3BsYXlPYmplY3QucHJvdG90eXBlLFxuICAgIHJlcXVpcmUoJy4vaW50ZXJhY3RpdmVUYXJnZXQnKVxuKTtcblxuLyoqXG4gKiBUaGUgaW50ZXJhY3Rpb24gbWFuYWdlciBkZWFscyB3aXRoIG1vdXNlIGFuZCB0b3VjaCBldmVudHMuIEFueSBEaXNwbGF5T2JqZWN0IGNhbiBiZSBpbnRlcmFjdGl2ZVxuICogaWYgaXRzIGludGVyYWN0aXZlIHBhcmFtZXRlciBpcyBzZXQgdG8gdHJ1ZVxuICogVGhpcyBtYW5hZ2VyIGFsc28gc3VwcG9ydHMgbXVsdGl0b3VjaC5cbiAqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJLmludGVyYWN0aW9uXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuQ2FudmFzUmVuZGVyZXJ8UElYSS5XZWJHTFJlbmRlcmVyfSBBIHJlZmVyZW5jZSB0byB0aGUgY3VycmVudCByZW5kZXJlclxuICogQHBhcmFtIFtvcHRpb25zXSB7b2JqZWN0fVxuICogQHBhcmFtIFtvcHRpb25zLmF1dG9QcmV2ZW50RGVmYXVsdD10cnVlXSB7Ym9vbGVhbn0gU2hvdWxkIHRoZSBtYW5hZ2VyIGF1dG9tYXRpY2FsbHkgcHJldmVudCBkZWZhdWx0IGJyb3dzZXIgYWN0aW9ucy5cbiAqIEBwYXJhbSBbb3B0aW9ucy5pbnRlcmFjdGlvbkZyZXF1ZW5jeT0xMF0ge251bWJlcn0gRnJlcXVlbmN5IGluY3JlYXNlcyB0aGUgaW50ZXJhY3Rpb24gZXZlbnRzIHdpbGwgYmUgY2hlY2tlZC5cbiAqL1xuZnVuY3Rpb24gSW50ZXJhY3Rpb25NYW5hZ2VyKHJlbmRlcmVyLCBvcHRpb25zKVxue1xuICAgIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuXG4gICAgLyoqXG4gICAgICogVGhlIHJlbmRlcmVyIHRoaXMgaW50ZXJhY3Rpb24gbWFuYWdlciB3b3JrcyBmb3IuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlN5c3RlbVJlbmRlcmVyfVxuICAgICAqL1xuICAgIHRoaXMucmVuZGVyZXIgPSByZW5kZXJlcjtcblxuICAgIC8qKlxuICAgICAqIFNob3VsZCBkZWZhdWx0IGJyb3dzZXIgYWN0aW9ucyBhdXRvbWF0aWNhbGx5IGJlIHByZXZlbnRlZC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICogQGRlZmF1bHQgdHJ1ZVxuICAgICAqL1xuICAgIHRoaXMuYXV0b1ByZXZlbnREZWZhdWx0ID0gb3B0aW9ucy5hdXRvUHJldmVudERlZmF1bHQgIT09IHVuZGVmaW5lZCA/IG9wdGlvbnMuYXV0b1ByZXZlbnREZWZhdWx0IDogdHJ1ZTtcblxuICAgIC8qKlxuICAgICAqIEFzIHRoaXMgZnJlcXVlbmN5IGluY3JlYXNlcyB0aGUgaW50ZXJhY3Rpb24gZXZlbnRzIHdpbGwgYmUgY2hlY2tlZCBtb3JlIG9mdGVuLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDEwXG4gICAgICovXG4gICAgdGhpcy5pbnRlcmFjdGlvbkZyZXF1ZW5jeSA9IG9wdGlvbnMuaW50ZXJhY3Rpb25GcmVxdWVuY3kgfHwgMTA7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgbW91c2UgZGF0YVxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5pbnRlcmFjdGlvbi5JbnRlcmFjdGlvbkRhdGF9XG4gICAgICovXG4gICAgdGhpcy5tb3VzZSA9IG5ldyBJbnRlcmFjdGlvbkRhdGEoKTtcblxuICAgIC8qKlxuICAgICAqIEFuIGV2ZW50IGRhdGEgb2JqZWN0IHRvIGhhbmRsZSBhbGwgdGhlIGV2ZW50IHRyYWNraW5nL2Rpc3BhdGNoaW5nXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtvYmplY3R9XG4gICAgICovXG4gICAgdGhpcy5ldmVudERhdGEgPSB7XG4gICAgICAgIHN0b3BwZWQ6IGZhbHNlLFxuICAgICAgICB0YXJnZXQ6IG51bGwsXG4gICAgICAgIHR5cGU6IG51bGwsXG4gICAgICAgIGRhdGE6IHRoaXMubW91c2UsXG4gICAgICAgIHN0b3BQcm9wYWdhdGlvbjpmdW5jdGlvbigpe1xuICAgICAgICAgICAgdGhpcy5zdG9wcGVkID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH07XG5cbiAgICAvKipcbiAgICAgKiBUaW55IGxpdHRsZSBpbnRlcmFjdGl2ZURhdGEgcG9vbCAhXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLmludGVyYWN0aW9uLkludGVyYWN0aW9uRGF0YVtdfVxuICAgICAqL1xuICAgIHRoaXMuaW50ZXJhY3RpdmVEYXRhUG9vbCA9IFtdO1xuXG4gICAgLyoqXG4gICAgICogVGhlIERPTSBlbGVtZW50IHRvIGJpbmQgdG8uXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtIVE1MRWxlbWVudH1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuaW50ZXJhY3Rpb25ET01FbGVtZW50ID0gbnVsbDtcblxuICAgIC8qKlxuICAgICAqIEhhdmUgZXZlbnRzIGJlZW4gYXR0YWNoZWQgdG8gdGhlIGRvbSBlbGVtZW50P1xuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuZXZlbnRzQWRkZWQgPSBmYWxzZTtcblxuICAgIC8vdGhpcyB3aWxsIG1ha2UgaXQgc28gdGhhdCB5b3UgZG9uJ3QgaGF2ZSB0byBjYWxsIGJpbmQgYWxsIHRoZSB0aW1lXG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtGdW5jdGlvbn1cbiAgICAgKi9cbiAgICB0aGlzLm9uTW91c2VVcCA9IHRoaXMub25Nb3VzZVVwLmJpbmQodGhpcyk7XG4gICAgdGhpcy5wcm9jZXNzTW91c2VVcCA9IHRoaXMucHJvY2Vzc01vdXNlVXAuYmluZCggdGhpcyApO1xuXG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtGdW5jdGlvbn1cbiAgICAgKi9cbiAgICB0aGlzLm9uTW91c2VEb3duID0gdGhpcy5vbk1vdXNlRG93bi5iaW5kKHRoaXMpO1xuICAgIHRoaXMucHJvY2Vzc01vdXNlRG93biA9IHRoaXMucHJvY2Vzc01vdXNlRG93bi5iaW5kKCB0aGlzICk7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtGdW5jdGlvbn1cbiAgICAgKi9cbiAgICB0aGlzLm9uTW91c2VNb3ZlID0gdGhpcy5vbk1vdXNlTW92ZS5iaW5kKCB0aGlzICk7XG4gICAgdGhpcy5wcm9jZXNzTW91c2VNb3ZlID0gdGhpcy5wcm9jZXNzTW91c2VNb3ZlLmJpbmQoIHRoaXMgKTtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge0Z1bmN0aW9ufVxuICAgICAqL1xuICAgIHRoaXMub25Nb3VzZU91dCA9IHRoaXMub25Nb3VzZU91dC5iaW5kKHRoaXMpO1xuICAgIHRoaXMucHJvY2Vzc01vdXNlT3Zlck91dCA9IHRoaXMucHJvY2Vzc01vdXNlT3Zlck91dC5iaW5kKCB0aGlzICk7XG5cblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge0Z1bmN0aW9ufVxuICAgICAqL1xuICAgIHRoaXMub25Ub3VjaFN0YXJ0ID0gdGhpcy5vblRvdWNoU3RhcnQuYmluZCh0aGlzKTtcbiAgICB0aGlzLnByb2Nlc3NUb3VjaFN0YXJ0ID0gdGhpcy5wcm9jZXNzVG91Y2hTdGFydC5iaW5kKHRoaXMpO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7RnVuY3Rpb259XG4gICAgICovXG4gICAgdGhpcy5vblRvdWNoRW5kID0gdGhpcy5vblRvdWNoRW5kLmJpbmQodGhpcyk7XG4gICAgdGhpcy5wcm9jZXNzVG91Y2hFbmQgPSB0aGlzLnByb2Nlc3NUb3VjaEVuZC5iaW5kKHRoaXMpO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7RnVuY3Rpb259XG4gICAgICovXG4gICAgdGhpcy5vblRvdWNoTW92ZSA9IHRoaXMub25Ub3VjaE1vdmUuYmluZCh0aGlzKTtcbiAgICB0aGlzLnByb2Nlc3NUb3VjaE1vdmUgPSB0aGlzLnByb2Nlc3NUb3VjaE1vdmUuYmluZCh0aGlzKTtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLmxhc3QgPSAwO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGNzcyBzdHlsZSBvZiB0aGUgY3Vyc29yIHRoYXQgaXMgYmVpbmcgdXNlZFxuICAgICAqIEBtZW1iZXIge3N0cmluZ31cbiAgICAgKi9cbiAgICB0aGlzLmN1cnJlbnRDdXJzb3JTdHlsZSA9ICdpbmhlcml0JztcblxuICAgIC8qKlxuICAgICAqIEludGVybmFsIGNhY2hlZCB2YXJcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlBvaW50fVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fdGVtcFBvaW50ID0gbmV3IGNvcmUuUG9pbnQoKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBjdXJyZW50IHJlc29sdXRpb25cbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy5yZXNvbHV0aW9uID0gMTtcblxuICAgIHRoaXMuc2V0VGFyZ2V0RWxlbWVudCh0aGlzLnJlbmRlcmVyLnZpZXcsIHRoaXMucmVuZGVyZXIucmVzb2x1dGlvbik7XG59XG5cbkludGVyYWN0aW9uTWFuYWdlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBJbnRlcmFjdGlvbk1hbmFnZXI7XG5tb2R1bGUuZXhwb3J0cyA9IEludGVyYWN0aW9uTWFuYWdlcjtcblxuLyoqXG4gKiBTZXRzIHRoZSBET00gZWxlbWVudCB3aGljaCB3aWxsIHJlY2VpdmUgbW91c2UvdG91Y2ggZXZlbnRzLiBUaGlzIGlzIHVzZWZ1bCBmb3Igd2hlbiB5b3UgaGF2ZVxuICogb3RoZXIgRE9NIGVsZW1lbnRzIG9uIHRvcCBvZiB0aGUgcmVuZGVyZXJzIENhbnZhcyBlbGVtZW50LiBXaXRoIHRoaXMgeW91J2xsIGJlIGJhbGUgdG8gZGVsZXRlZ2F0ZVxuICogYW5vdGhlciBET00gZWxlbWVudCB0byByZWNlaXZlIHRob3NlIGV2ZW50cy5cbiAqXG4gKiBAcGFyYW0gZWxlbWVudCB7SFRNTEVsZW1lbnR9IHRoZSBET00gZWxlbWVudCB3aGljaCB3aWxsIHJlY2VpdmUgbW91c2UgYW5kIHRvdWNoIGV2ZW50cy5cbiAqIEBwYXJhbSBbcmVzb2x1dGlvbj0xXSB7bnVtYmVyfSBUSGUgcmVzb2x1dGlvbiBvZiB0aGUgbmV3IGVsZW1lbnQgKHJlbGF0aXZlIHRvIHRoZSBjYW52YXMpLlxuICogQHByaXZhdGVcbiAqL1xuSW50ZXJhY3Rpb25NYW5hZ2VyLnByb3RvdHlwZS5zZXRUYXJnZXRFbGVtZW50ID0gZnVuY3Rpb24gKGVsZW1lbnQsIHJlc29sdXRpb24pXG57XG4gICAgdGhpcy5yZW1vdmVFdmVudHMoKTtcblxuICAgIHRoaXMuaW50ZXJhY3Rpb25ET01FbGVtZW50ID0gZWxlbWVudDtcblxuICAgIHRoaXMucmVzb2x1dGlvbiA9IHJlc29sdXRpb24gfHwgMTtcblxuICAgIHRoaXMuYWRkRXZlbnRzKCk7XG59O1xuXG4vKipcbiAqIFJlZ2lzdGVycyBhbGwgdGhlIERPTSBldmVudHNcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5JbnRlcmFjdGlvbk1hbmFnZXIucHJvdG90eXBlLmFkZEV2ZW50cyA9IGZ1bmN0aW9uICgpXG57XG4gICAgaWYgKCF0aGlzLmludGVyYWN0aW9uRE9NRWxlbWVudClcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb3JlLnRpY2tlci5zaGFyZWQuYWRkKHRoaXMudXBkYXRlLCB0aGlzKTtcblxuICAgIGlmICh3aW5kb3cubmF2aWdhdG9yLm1zUG9pbnRlckVuYWJsZWQpXG4gICAge1xuICAgICAgICB0aGlzLmludGVyYWN0aW9uRE9NRWxlbWVudC5zdHlsZVsnLW1zLWNvbnRlbnQtem9vbWluZyddID0gJ25vbmUnO1xuICAgICAgICB0aGlzLmludGVyYWN0aW9uRE9NRWxlbWVudC5zdHlsZVsnLW1zLXRvdWNoLWFjdGlvbiddID0gJ25vbmUnO1xuICAgIH1cblxuICAgIHdpbmRvdy5kb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdtb3VzZW1vdmUnLCAgICB0aGlzLm9uTW91c2VNb3ZlLCB0cnVlKTtcbiAgICB0aGlzLmludGVyYWN0aW9uRE9NRWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCdtb3VzZWRvd24nLCAgICB0aGlzLm9uTW91c2VEb3duLCB0cnVlKTtcbiAgICB0aGlzLmludGVyYWN0aW9uRE9NRWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCdtb3VzZW91dCcsICAgICB0aGlzLm9uTW91c2VPdXQsIHRydWUpO1xuXG4gICAgdGhpcy5pbnRlcmFjdGlvbkRPTUVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigndG91Y2hzdGFydCcsICAgdGhpcy5vblRvdWNoU3RhcnQsIHRydWUpO1xuICAgIHRoaXMuaW50ZXJhY3Rpb25ET01FbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ3RvdWNoZW5kJywgICAgIHRoaXMub25Ub3VjaEVuZCwgdHJ1ZSk7XG4gICAgdGhpcy5pbnRlcmFjdGlvbkRPTUVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigndG91Y2htb3ZlJywgICAgdGhpcy5vblRvdWNoTW92ZSwgdHJ1ZSk7XG5cbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignbW91c2V1cCcsICB0aGlzLm9uTW91c2VVcCwgdHJ1ZSk7XG5cbiAgICB0aGlzLmV2ZW50c0FkZGVkID0gdHJ1ZTtcbn07XG5cbi8qKlxuICogUmVtb3ZlcyBhbGwgdGhlIERPTSBldmVudHMgdGhhdCB3ZXJlIHByZXZpb3VzbHkgcmVnaXN0ZXJlZFxuICpcbiAqIEBwcml2YXRlXG4gKi9cbkludGVyYWN0aW9uTWFuYWdlci5wcm90b3R5cGUucmVtb3ZlRXZlbnRzID0gZnVuY3Rpb24gKClcbntcbiAgICBpZiAoIXRoaXMuaW50ZXJhY3Rpb25ET01FbGVtZW50KVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvcmUudGlja2VyLnNoYXJlZC5yZW1vdmUodGhpcy51cGRhdGUpO1xuXG4gICAgaWYgKHdpbmRvdy5uYXZpZ2F0b3IubXNQb2ludGVyRW5hYmxlZClcbiAgICB7XG4gICAgICAgIHRoaXMuaW50ZXJhY3Rpb25ET01FbGVtZW50LnN0eWxlWyctbXMtY29udGVudC16b29taW5nJ10gPSAnJztcbiAgICAgICAgdGhpcy5pbnRlcmFjdGlvbkRPTUVsZW1lbnQuc3R5bGVbJy1tcy10b3VjaC1hY3Rpb24nXSA9ICcnO1xuICAgIH1cblxuICAgIHdpbmRvdy5kb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdtb3VzZW1vdmUnLCB0aGlzLm9uTW91c2VNb3ZlLCB0cnVlKTtcbiAgICB0aGlzLmludGVyYWN0aW9uRE9NRWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdtb3VzZWRvd24nLCB0aGlzLm9uTW91c2VEb3duLCB0cnVlKTtcbiAgICB0aGlzLmludGVyYWN0aW9uRE9NRWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdtb3VzZW91dCcsICB0aGlzLm9uTW91c2VPdXQsIHRydWUpO1xuXG4gICAgdGhpcy5pbnRlcmFjdGlvbkRPTUVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigndG91Y2hzdGFydCcsIHRoaXMub25Ub3VjaFN0YXJ0LCB0cnVlKTtcbiAgICB0aGlzLmludGVyYWN0aW9uRE9NRWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCd0b3VjaGVuZCcsICB0aGlzLm9uVG91Y2hFbmQsIHRydWUpO1xuICAgIHRoaXMuaW50ZXJhY3Rpb25ET01FbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3RvdWNobW92ZScsIHRoaXMub25Ub3VjaE1vdmUsIHRydWUpO1xuXG4gICAgdGhpcy5pbnRlcmFjdGlvbkRPTUVsZW1lbnQgPSBudWxsO1xuXG4gICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21vdXNldXAnLCAgdGhpcy5vbk1vdXNlVXAsIHRydWUpO1xuXG4gICAgdGhpcy5ldmVudHNBZGRlZCA9IGZhbHNlO1xufTtcblxuLyoqXG4gKiBVcGRhdGVzIHRoZSBzdGF0ZSBvZiBpbnRlcmFjdGl2ZSBvYmplY3RzLlxuICogSW52b2tlZCBieSBhIHRocm90dGxlZCB0aWNrZXIgdXBkYXRlIGZyb21cbiAqIHtAbGluayBQSVhJLnRpY2tlci5zaGFyZWR9LlxuICpcbiAqIEBwYXJhbSBkZWx0YVRpbWUge251bWJlcn1cbiAqL1xuSW50ZXJhY3Rpb25NYW5hZ2VyLnByb3RvdHlwZS51cGRhdGUgPSBmdW5jdGlvbiAoZGVsdGFUaW1lKVxue1xuICAgIHRoaXMuX2RlbHRhVGltZSArPSBkZWx0YVRpbWU7XG5cbiAgICBpZiAodGhpcy5fZGVsdGFUaW1lIDwgdGhpcy5pbnRlcmFjdGlvbkZyZXF1ZW5jeSlcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLl9kZWx0YVRpbWUgPSAwO1xuXG4gICAgaWYgKCF0aGlzLmludGVyYWN0aW9uRE9NRWxlbWVudClcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBpZiB0aGUgdXNlciBtb3ZlIHRoZSBtb3VzZSB0aGlzIGNoZWNrIGhhcyBhbHJlYWR5IGJlZW4gZGZvbmUgdXNpbmcgdGhlIG1vdXNlIG1vdmUhXG4gICAgaWYodGhpcy5kaWRNb3ZlKVxuICAgIHtcbiAgICAgICAgdGhpcy5kaWRNb3ZlID0gZmFsc2U7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLmN1cnNvciA9ICdpbmhlcml0JztcblxuICAgIHRoaXMucHJvY2Vzc0ludGVyYWN0aXZlKHRoaXMubW91c2UuZ2xvYmFsLCB0aGlzLnJlbmRlcmVyLl9sYXN0T2JqZWN0UmVuZGVyZWQsIHRoaXMucHJvY2Vzc01vdXNlT3Zlck91dCwgdHJ1ZSApO1xuXG4gICAgaWYgKHRoaXMuY3VycmVudEN1cnNvclN0eWxlICE9PSB0aGlzLmN1cnNvcilcbiAgICB7XG4gICAgICAgIHRoaXMuY3VycmVudEN1cnNvclN0eWxlID0gdGhpcy5jdXJzb3I7XG4gICAgICAgIHRoaXMuaW50ZXJhY3Rpb25ET01FbGVtZW50LnN0eWxlLmN1cnNvciA9IHRoaXMuY3Vyc29yO1xuICAgIH1cblxuICAgIC8vVE9ET1xufTtcblxuLyoqXG4gKiBEaXNwYXRjaGVzIGFuIGV2ZW50IG9uIHRoZSBkaXNwbGF5IG9iamVjdCB0aGF0IHdhcyBpbnRlcmFjdGVkIHdpdGhcbiAqXG4gKiBAcGFyYW0gZGlzcGxheU9iamVjdCB7UElYSS5Db250YWluZXJ8UElYSS5TcHJpdGV8UElYSS5leHRyYXMuVGlsaW5nU3ByaXRlfSB0aGUgZGlzcGxheSBvYmplY3QgaW4gcXVlc3Rpb25cbiAqIEBwYXJhbSBldmVudFN0cmluZyB7c3RyaW5nfSB0aGUgbmFtZSBvZiB0aGUgZXZlbnQgKGUuZywgbW91c2Vkb3duKVxuICogQHBhcmFtIGV2ZW50RGF0YSB7b2JqZWN0fSB0aGUgZXZlbnQgZGF0YSBvYmplY3RcbiAqIEBwcml2YXRlXG4gKi9cbkludGVyYWN0aW9uTWFuYWdlci5wcm90b3R5cGUuZGlzcGF0Y2hFdmVudCA9IGZ1bmN0aW9uICggZGlzcGxheU9iamVjdCwgZXZlbnRTdHJpbmcsIGV2ZW50RGF0YSApXG57XG4gICAgaWYoIWV2ZW50RGF0YS5zdG9wcGVkKVxuICAgIHtcbiAgICAgICAgZXZlbnREYXRhLnRhcmdldCA9IGRpc3BsYXlPYmplY3Q7XG4gICAgICAgIGV2ZW50RGF0YS50eXBlID0gZXZlbnRTdHJpbmc7XG5cbiAgICAgICAgZGlzcGxheU9iamVjdC5lbWl0KCBldmVudFN0cmluZywgZXZlbnREYXRhICk7XG5cbiAgICAgICAgaWYoIGRpc3BsYXlPYmplY3RbZXZlbnRTdHJpbmddIClcbiAgICAgICAge1xuICAgICAgICAgICAgZGlzcGxheU9iamVjdFtldmVudFN0cmluZ10oIGV2ZW50RGF0YSApO1xuICAgICAgICB9XG4gICAgfVxufTtcblxuLyoqXG4gKiBNYXBzIHggYW5kIHkgY29vcmRzIGZyb20gYSBET00gb2JqZWN0IGFuZCBtYXBzIHRoZW0gY29ycmVjdGx5IHRvIHRoZSBwaXhpIHZpZXcuIFRoZSByZXN1bHRpbmcgdmFsdWUgaXMgc3RvcmVkIGluIHRoZSBwb2ludC5cbiAqIFRoaXMgdGFrZXMgaW50byBhY2NvdW50IHRoZSBmYWN0IHRoYXQgdGhlIERPTSBlbGVtZW50IGNvdWxkIGJlIHNjYWxlZCBhbmQgcG9zaXRpb25lZCBhbnl3aGVyZSBvbiB0aGUgc2NyZWVuLlxuICpcbiAqIEBwYXJhbSAge1BJWEkuUG9pbnR9IHBvaW50IHRoZSBwb2ludCB0aGF0IHRoZSByZXN1bHQgd2lsbCBiZSBzdG9yZWQgaW5cbiAqIEBwYXJhbSAge251bWJlcn0geCAgICAgdGhlIHggY29vcmQgb2YgdGhlIHBvc2l0aW9uIHRvIG1hcFxuICogQHBhcmFtICB7bnVtYmVyfSB5ICAgICB0aGUgeSBjb29yZCBvZiB0aGUgcG9zaXRpb24gdG8gbWFwXG4gKi9cbkludGVyYWN0aW9uTWFuYWdlci5wcm90b3R5cGUubWFwUG9zaXRpb25Ub1BvaW50ID0gZnVuY3Rpb24gKCBwb2ludCwgeCwgeSApXG57XG4gICAgdmFyIHJlY3QgPSB0aGlzLmludGVyYWN0aW9uRE9NRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICBwb2ludC54ID0gKCAoIHggLSByZWN0LmxlZnQgKSAqICh0aGlzLmludGVyYWN0aW9uRE9NRWxlbWVudC53aWR0aCAgLyByZWN0LndpZHRoICApICkgLyB0aGlzLnJlc29sdXRpb247XG4gICAgcG9pbnQueSA9ICggKCB5IC0gcmVjdC50b3AgICkgKiAodGhpcy5pbnRlcmFjdGlvbkRPTUVsZW1lbnQuaGVpZ2h0IC8gcmVjdC5oZWlnaHQgKSApIC8gdGhpcy5yZXNvbHV0aW9uO1xufTtcblxuLyoqXG4gKiBUaGlzIGZ1bmN0aW9uIGlzIHByb3ZpZGVzIGEgbmVhdCB3YXkgb2YgY3Jhd2xpbmcgdGhyb3VnaCB0aGUgc2NlbmUgZ3JhcGggYW5kIHJ1bm5pbmcgYSBzcGVjaWZpZWQgZnVuY3Rpb24gb24gYWxsIGludGVyYWN0aXZlIG9iamVjdHMgaXQgZmluZHMuXG4gKiBJdCB3aWxsIGFsc28gdGFrZSBjYXJlIG9mIGhpdCB0ZXN0aW5nIHRoZSBpbnRlcmFjdGl2ZSBvYmplY3RzIGFuZCBwYXNzZXMgdGhlIGhpdCBhY3Jvc3MgaW4gdGhlIGZ1bmN0aW9uLlxuICpcbiAqIEBwYXJhbSAge1BJWEkuUG9pbnR9IHBvaW50IHRoZSBwb2ludCB0aGF0IGlzIHRlc3RlZCBmb3IgY29sbGlzaW9uXG4gKiBAcGFyYW0gIHtQSVhJLkNvbnRhaW5lcnxQSVhJLlNwcml0ZXxQSVhJLmV4dHJhcy5UaWxpbmdTcHJpdGV9IGRpc3BsYXlPYmplY3QgdGhlIGRpc3BsYXlPYmplY3QgdGhhdCB3aWxsIGJlIGhpdCB0ZXN0IChyZWN1cmNzaXZseSBjcmF3bHMgaXRzIGNoaWxkcmVuKVxuICogQHBhcmFtICB7RnVuY3Rpb259IGZ1bmMgdGhlIGZ1bmN0aW9uIHRoYXQgd2lsbCBiZSBjYWxsZWQgb24gZWFjaCBpbnRlcmFjdGl2ZSBvYmplY3QuIFRoZSBkaXNwbGF5T2JqZWN0IGFuZCBoaXQgd2lsbCBiZSBwYXNzZWQgdG8gdGhlIGZ1bmN0aW9uXG4gKiBAcGFyYW0gIHtib29sZWFufSBoaXRUZXN0IHRoaXMgaW5kaWNhdGVzIGlmIHRoZSBvYmplY3RzIGluc2lkZSBzaG91bGQgYmUgaGl0IHRlc3QgYWdhaW5zdCB0aGUgcG9pbnRcbiAqIEByZXR1cm4ge2Jvb2xlYW59IHJldHVybnMgdHJ1ZSBpZiB0aGUgZGlzcGxheU9iamVjdCBoaXQgdGhlIHBvaW50XG4gKi9cbkludGVyYWN0aW9uTWFuYWdlci5wcm90b3R5cGUucHJvY2Vzc0ludGVyYWN0aXZlID0gZnVuY3Rpb24gKHBvaW50LCBkaXNwbGF5T2JqZWN0LCBmdW5jLCBoaXRUZXN0LCBpbnRlcmFjdGl2ZSlcbntcbiAgICBpZighZGlzcGxheU9iamVjdCB8fCAhZGlzcGxheU9iamVjdC52aXNpYmxlKVxuICAgIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIC8vIFRvb2sgYSBsaXR0bGUgd2hpbGUgdG8gcmV3b3JrIHRoaXMgZnVuY3Rpb24gY29ycmVjdGx5ISBCdXQgbm93IGl0IGlzIGRvbmUgYW5kIG5pY2UgYW5kIG9wdGltaXNlZC4gXl9eXG4gICAgLy8gXG4gICAgLy8gVGhpcyBmdW5jdGlvbiB3aWxsIG5vdyBsb29wIHRocm91Z2ggYWxsIG9iamVjdHMgYW5kIHRoZW4gb25seSBoaXQgdGVzdCB0aGUgb2JqZWN0cyBpdCBIQVMgdG8sIG5vdCBhbGwgb2YgdGhlbS4gTVVDSCBmYXN0ZXIuLlxuICAgIC8vIEFuIG9iamVjdCB3aWxsIGJlIGhpdCB0ZXN0IGlmIHRoZSBmb2xsb3dpbmcgaXMgdHJ1ZTpcbiAgICAvLyBcbiAgICAvLyAxOiBJdCBpcyBpbnRlcmFjdGl2ZS5cbiAgICAvLyAyOiBJdCBiZWxvbmdzIHRvIGEgcGFyZW50IHRoYXQgaXMgaW50ZXJhY3RpdmUgQU5EIG9uZSBvZiB0aGUgcGFyZW50cyBjaGlsZHJlbiBoYXZlIG5vdCBhbHJlYWR5IGJlZW4gaGl0LlxuICAgIC8vIFxuICAgIC8vIEFzIGFub3RoZXIgbGl0dGxlIG9wdGltaXNhdGlvbiBvbmNlIGFuIGludGVyYWN0aXZlIG9iamVjdCBoYXMgYmVlbiBoaXQgd2UgY2FuIGNhcnJ5IG9uIHRocm91Z2ggdGhlIHNjZW5lZ3JhcGgsIGJ1dCB3ZSBrbm93IHRoYXQgdGhlcmUgd2lsbCBiZSBubyBtb3JlIGhpdHMhIFNvIHdlIGNhbiBhdm9pZCBleHRyYSBoaXQgdGVzdHNcbiAgICAvLyBBIGZpbmFsIG9wdGltaXNhdGlvbiBpcyB0aGF0IGFuIG9iamVjdCBpcyBub3QgaGl0IHRlc3QgZGlyZWN0bHkgaWYgYSBjaGlsZCBoYXMgYWxyZWFkeSBiZWVuIGhpdC5cbiAgICBcbiAgICB2YXIgaGl0ID0gZmFsc2UsXG4gICAgICAgIGludGVyYWN0aXZlUGFyZW50ID0gaW50ZXJhY3RpdmUgPSBkaXNwbGF5T2JqZWN0LmludGVyYWN0aXZlIHx8IGludGVyYWN0aXZlO1xuXG4gICAgLy8gaWYgdGhlIGRpc3BsYXlvYmplY3QgaGFzIGEgaGl0QXJlYSwgdGhlbiBpdCBkb2VzIG5vdCBuZWVkIHRvIGhpdFRlc3QgY2hpbGRyZW4uXG4gICAgaWYoZGlzcGxheU9iamVjdC5oaXRBcmVhKVxuICAgIHtcbiAgICAgICAgaW50ZXJhY3RpdmVQYXJlbnQgPSBmYWxzZTtcbiAgICB9XG5cbiAgICAvLyAqKiBGUkVFIFRJUCAqKiEgSWYgYW4gb2JqZWN0IGlzIG5vdCBpbnRlcmFjdHRpdmUgb3IgaGFzIG5vIGJ1dHRvbnMgaW4gaXQgKHN1Y2ggYXMgYSBnYW1lIHNjZW5lISkgc2V0IGludGVyYWN0aXZlQ2hpbGRyZW4gdG8gZmFsc2UgZm9yIHRoYXQgZGlzcGxheU9iamVjdC5cbiAgICAvLyBUaGlzIHdpbGwgYWxsb3cgcGl4aSB0byBjb21wbGV0bHkgaWdub3JlIGFuZCBieXBhc3MgY2hlY2tpbmcgdGhlIGRpc3BsYXlPYmplY3RzIGNoaWxkcmVuLlxuICAgIGlmKGRpc3BsYXlPYmplY3QuaW50ZXJhY3RpdmVDaGlsZHJlbilcbiAgICB7ICAgICAgIFxuICAgICAgICB2YXIgY2hpbGRyZW4gPSBkaXNwbGF5T2JqZWN0LmNoaWxkcmVuO1xuICAgICAgICBcbiAgICAgICAgZm9yICh2YXIgaSA9IGNoaWxkcmVuLmxlbmd0aC0xOyBpID49IDA7IGktLSlcbiAgICAgICAge1xuICAgICAgICAgICAgLy8gdGltZSB0byBnZXQgcmVjdXJzaXZlLi4gaWYgdGhpcyBmdW5jdGlvbiB3aWxsIHJldHVybiBpZiBzb210aGluZyBpcyBoaXQuLlxuICAgICAgICAgICAgaWYoIHRoaXMucHJvY2Vzc0ludGVyYWN0aXZlKHBvaW50LCBjaGlsZHJlbltpXSwgZnVuYywgaGl0VGVzdCwgaW50ZXJhY3RpdmVQYXJlbnQpIClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBoaXQgPSB0cnVlO1xuXG4gICAgICAgICAgICAgICAgLy8gd2Ugbm8gbG9uZ2VyIG5lZWQgdG8gaGl0IHRlc3QgYW55IG1vcmUgb2JqZWN0cyBpbiB0aGlzIGNvbnRhaW5lciBhcyB3ZSB3ZSBub3cga25vdyB0aGUgcGFyZW50IGhhcyBiZWVuIGhpdFxuICAgICAgICAgICAgICAgIGludGVyYWN0aXZlUGFyZW50ID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgLy8gSWYgdGhlIGNoaWxkIGlzIGludGVyYWN0aXZlICwgdGhhdCBtZWFucyB0aGF0IHRoZSBvYmplY3QgaGl0IHdhcyBhY3R1YWxseSBpbnRlcmFjdGl2ZSBhbmQgbm90IGp1c3QgdGhlIGNoaWxkIG9mIGFuIGludGVyYWN0aXZlIG9iamVjdC4gXG4gICAgICAgICAgICAgICAgLy8gVGhpcyBtZWFucyB3ZSBubyBsb25nZXIgbmVlZCB0byBoaXQgdGVzdCBhbnl0aGluZyBlbHNlLiBXZSBzdGlsbCBuZWVkIHRvIHJ1biB0aHJvdWdoIGFsbCBvYmplY3RzLCBidXQgd2UgZG9uJ3QgbmVlZCB0byBwZXJmb3JtIGFueSBoaXQgdGVzdHMuXG4gICAgICAgICAgICAgICAgaWYoY2hpbGRyZW5baV0uaW50ZXJhY3RpdmUpXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBoaXRUZXN0ID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gbm8gcG9pbnQgcnVubmluZyB0aGlzIGlmIHRoZSBpdGVtIGlzIG5vdCBpbnRlcmFjdGl2ZSBvciBkb2VzIG5vdCBoYXZlIGFuIGludGVyYWN0aXZlIHBhcmVudC5cbiAgICBpZihpbnRlcmFjdGl2ZSlcbiAgICB7XG4gICAgICAgIC8vIGlmIHdlIGFyZSBoaXQgdGVzdGluZyAoYXMgaW4gd2UgaGF2ZSBubyBoaXQgYW55IG9iamVjdHMgeWV0KVxuICAgICAgICAvLyBXZSBhbHNvIGRvbid0IG5lZWQgdG8gd29ycnkgYWJvdXQgaGl0IHRlc3RpbmcgaWYgb25jZSBvZiB0aGUgZGlzcGxheU9iamVjdHMgY2hpbGRyZW4gaGFzIGFscmVhZHkgYmVlbiBoaXQhXG4gICAgICAgIGlmKGhpdFRlc3QgJiYgIWhpdClcbiAgICAgICAgeyAgXG4gICAgICAgICAgICBpZihkaXNwbGF5T2JqZWN0LmhpdEFyZWEpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgZGlzcGxheU9iamVjdC53b3JsZFRyYW5zZm9ybS5hcHBseUludmVyc2UocG9pbnQsICB0aGlzLl90ZW1wUG9pbnQpO1xuICAgICAgICAgICAgICAgIGhpdCA9IGRpc3BsYXlPYmplY3QuaGl0QXJlYS5jb250YWlucyggdGhpcy5fdGVtcFBvaW50LngsIHRoaXMuX3RlbXBQb2ludC55ICk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmKGRpc3BsYXlPYmplY3QuY29udGFpbnNQb2ludClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBoaXQgPSBkaXNwbGF5T2JqZWN0LmNvbnRhaW5zUG9pbnQocG9pbnQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYoZGlzcGxheU9iamVjdC5pbnRlcmFjdGl2ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgZnVuYyhkaXNwbGF5T2JqZWN0LCBoaXQpOyBcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBoaXQ7XG4gIFxufTtcblxuXG4vKipcbiAqIElzIGNhbGxlZCB3aGVuIHRoZSBtb3VzZSBidXR0b24gaXMgcHJlc3NlZCBkb3duIG9uIHRoZSByZW5kZXJlciBlbGVtZW50XG4gKlxuICogQHBhcmFtIGV2ZW50IHtFdmVudH0gVGhlIERPTSBldmVudCBvZiBhIG1vdXNlIGJ1dHRvbiBiZWluZyBwcmVzc2VkIGRvd25cbiAqIEBwcml2YXRlXG4gKi9cbkludGVyYWN0aW9uTWFuYWdlci5wcm90b3R5cGUub25Nb3VzZURvd24gPSBmdW5jdGlvbiAoZXZlbnQpXG57XG4gICAgdGhpcy5tb3VzZS5vcmlnaW5hbEV2ZW50ID0gZXZlbnQ7XG4gICAgdGhpcy5ldmVudERhdGEuZGF0YSA9IHRoaXMubW91c2U7XG4gICAgdGhpcy5ldmVudERhdGEuc3RvcHBlZCA9IGZhbHNlO1xuXG4gICAgLy8gVXBkYXRlIGludGVybmFsIG1vdXNlIHJlZmVyZW5jZVxuICAgIHRoaXMubWFwUG9zaXRpb25Ub1BvaW50KCB0aGlzLm1vdXNlLmdsb2JhbCwgZXZlbnQuY2xpZW50WCwgZXZlbnQuY2xpZW50WSk7XG5cbiAgICBpZiAodGhpcy5hdXRvUHJldmVudERlZmF1bHQpXG4gICAge1xuICAgICAgICB0aGlzLm1vdXNlLm9yaWdpbmFsRXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICB9XG5cbiAgICB0aGlzLnByb2Nlc3NJbnRlcmFjdGl2ZSh0aGlzLm1vdXNlLmdsb2JhbCwgdGhpcy5yZW5kZXJlci5fbGFzdE9iamVjdFJlbmRlcmVkLCB0aGlzLnByb2Nlc3NNb3VzZURvd24sIHRydWUgKTtcbn07XG5cbi8qKlxuICogUHJvY2Vzc2VzIHRoZSByZXN1bHQgb2YgdGhlIG1vdXNlIGRvd24gY2hlY2sgYW5kIGRpc3BhdGNoZXMgdGhlIGV2ZW50IGlmIG5lZWQgYmVcbiAqXG4gKiBAcGFyYW0gZGlzcGxheU9iamVjdCB7UElYSS5Db250YWluZXJ8UElYSS5TcHJpdGV8UElYSS5leHRyYXMuVGlsaW5nU3ByaXRlfSBUaGUgZGlzcGxheSBvYmplY3QgdGhhdCB3YXMgdGVzdGVkXG4gKiBAcGFyYW0gaGl0IHtib29sZWFufSB0aGUgcmVzdWx0IG9mIHRoZSBoaXQgdGVzdCBvbiB0aGUgZGlzcGF5IG9iamVjdFxuICogQHByaXZhdGVcbiAqL1xuSW50ZXJhY3Rpb25NYW5hZ2VyLnByb3RvdHlwZS5wcm9jZXNzTW91c2VEb3duID0gZnVuY3Rpb24gKCBkaXNwbGF5T2JqZWN0LCBoaXQgKVxue1xuICAgIHZhciBlID0gdGhpcy5tb3VzZS5vcmlnaW5hbEV2ZW50O1xuICAgIFxuICAgIHZhciBpc1JpZ2h0QnV0dG9uID0gZS5idXR0b24gPT09IDIgfHwgZS53aGljaCA9PT0gMztcblxuICAgIGlmKGhpdClcbiAgICB7XG4gICAgICAgIGRpc3BsYXlPYmplY3RbIGlzUmlnaHRCdXR0b24gPyAnX2lzUmlnaHREb3duJyA6ICdfaXNMZWZ0RG93bicgXSA9IHRydWU7XG4gICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudCggZGlzcGxheU9iamVjdCwgaXNSaWdodEJ1dHRvbiA/ICdyaWdodGRvd24nIDogJ21vdXNlZG93bicsIHRoaXMuZXZlbnREYXRhICk7XG4gICAgfVxufTtcblxuXG5cbi8qKlxuICogSXMgY2FsbGVkIHdoZW4gdGhlIG1vdXNlIGJ1dHRvbiBpcyByZWxlYXNlZCBvbiB0aGUgcmVuZGVyZXIgZWxlbWVudFxuICpcbiAqIEBwYXJhbSBldmVudCB7RXZlbnR9IFRoZSBET00gZXZlbnQgb2YgYSBtb3VzZSBidXR0b24gYmVpbmcgcmVsZWFzZWRcbiAqIEBwcml2YXRlXG4gKi9cbkludGVyYWN0aW9uTWFuYWdlci5wcm90b3R5cGUub25Nb3VzZVVwID0gZnVuY3Rpb24gKGV2ZW50KVxue1xuICAgIHRoaXMubW91c2Uub3JpZ2luYWxFdmVudCA9IGV2ZW50O1xuICAgIHRoaXMuZXZlbnREYXRhLmRhdGEgPSB0aGlzLm1vdXNlO1xuICAgIHRoaXMuZXZlbnREYXRhLnN0b3BwZWQgPSBmYWxzZTtcblxuICAgIC8vIFVwZGF0ZSBpbnRlcm5hbCBtb3VzZSByZWZlcmVuY2VcbiAgICB0aGlzLm1hcFBvc2l0aW9uVG9Qb2ludCggdGhpcy5tb3VzZS5nbG9iYWwsIGV2ZW50LmNsaWVudFgsIGV2ZW50LmNsaWVudFkpO1xuXG4gICAgdGhpcy5wcm9jZXNzSW50ZXJhY3RpdmUodGhpcy5tb3VzZS5nbG9iYWwsIHRoaXMucmVuZGVyZXIuX2xhc3RPYmplY3RSZW5kZXJlZCwgdGhpcy5wcm9jZXNzTW91c2VVcCwgdHJ1ZSApO1xufTtcblxuLyoqXG4gKiBQcm9jZXNzZXMgdGhlIHJlc3VsdCBvZiB0aGUgbW91c2UgdXAgY2hlY2sgYW5kIGRpc3BhdGNoZXMgdGhlIGV2ZW50IGlmIG5lZWQgYmVcbiAqXG4gKiBAcGFyYW0gZGlzcGxheU9iamVjdCB7UElYSS5Db250YWluZXJ8UElYSS5TcHJpdGV8UElYSS5leHRyYXMuVGlsaW5nU3ByaXRlfSBUaGUgZGlzcGxheSBvYmplY3QgdGhhdCB3YXMgdGVzdGVkXG4gKiBAcGFyYW0gaGl0IHtib29sZWFufSB0aGUgcmVzdWx0IG9mIHRoZSBoaXQgdGVzdCBvbiB0aGUgZGlzcGxheSBvYmplY3RcbiAqIEBwcml2YXRlXG4gKi9cbkludGVyYWN0aW9uTWFuYWdlci5wcm90b3R5cGUucHJvY2Vzc01vdXNlVXAgPSBmdW5jdGlvbiAoIGRpc3BsYXlPYmplY3QsIGhpdCApXG57XG4gICAgdmFyIGUgPSB0aGlzLm1vdXNlLm9yaWdpbmFsRXZlbnQ7XG5cbiAgICB2YXIgaXNSaWdodEJ1dHRvbiA9IGUuYnV0dG9uID09PSAyIHx8IGUud2hpY2ggPT09IDM7XG4gICAgdmFyIGlzRG93biA9ICBpc1JpZ2h0QnV0dG9uID8gJ19pc1JpZ2h0RG93bicgOiAnX2lzTGVmdERvd24nO1xuXG4gICAgaWYoaGl0KVxuICAgIHtcbiAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50KCBkaXNwbGF5T2JqZWN0LCBpc1JpZ2h0QnV0dG9uID8gJ3JpZ2h0dXAnIDogJ21vdXNldXAnLCB0aGlzLmV2ZW50RGF0YSApO1xuXG4gICAgICAgIGlmKCBkaXNwbGF5T2JqZWN0WyBpc0Rvd24gXSApXG4gICAgICAgIHtcbiAgICAgICAgICAgIGRpc3BsYXlPYmplY3RbIGlzRG93biBdID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLmRpc3BhdGNoRXZlbnQoIGRpc3BsYXlPYmplY3QsIGlzUmlnaHRCdXR0b24gPyAncmlnaHRjbGljaycgOiAnY2xpY2snLCB0aGlzLmV2ZW50RGF0YSApO1xuICAgICAgICB9XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIGlmKCBkaXNwbGF5T2JqZWN0WyBpc0Rvd24gXSApXG4gICAgICAgIHtcbiAgICAgICAgICAgIGRpc3BsYXlPYmplY3RbIGlzRG93biBdID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLmRpc3BhdGNoRXZlbnQoIGRpc3BsYXlPYmplY3QsIGlzUmlnaHRCdXR0b24gPyAncmlnaHR1cG91dHNpZGUnIDogJ21vdXNldXBvdXRzaWRlJywgdGhpcy5ldmVudERhdGEgKTtcbiAgICAgICAgfVxuICAgIH1cbn07XG5cblxuLyoqXG4gKiBJcyBjYWxsZWQgd2hlbiB0aGUgbW91c2UgbW92ZXMgYWNyb3NzIHRoZSByZW5kZXJlciBlbGVtZW50XG4gKlxuICogQHBhcmFtIGV2ZW50IHtFdmVudH0gVGhlIERPTSBldmVudCBvZiB0aGUgbW91c2UgbW92aW5nXG4gKiBAcHJpdmF0ZVxuICovXG5JbnRlcmFjdGlvbk1hbmFnZXIucHJvdG90eXBlLm9uTW91c2VNb3ZlID0gZnVuY3Rpb24gKGV2ZW50KVxue1xuICAgIHRoaXMubW91c2Uub3JpZ2luYWxFdmVudCA9IGV2ZW50O1xuICAgIHRoaXMuZXZlbnREYXRhLmRhdGEgPSB0aGlzLm1vdXNlO1xuICAgIHRoaXMuZXZlbnREYXRhLnN0b3BwZWQgPSBmYWxzZTtcblxuICAgIHRoaXMubWFwUG9zaXRpb25Ub1BvaW50KCB0aGlzLm1vdXNlLmdsb2JhbCwgZXZlbnQuY2xpZW50WCwgZXZlbnQuY2xpZW50WSk7XG5cbiAgICB0aGlzLmRpZE1vdmUgPSB0cnVlO1xuXG4gICAgdGhpcy5jdXJzb3IgPSAnaW5oZXJpdCc7XG5cbiAgICB0aGlzLnByb2Nlc3NJbnRlcmFjdGl2ZSh0aGlzLm1vdXNlLmdsb2JhbCwgdGhpcy5yZW5kZXJlci5fbGFzdE9iamVjdFJlbmRlcmVkLCB0aGlzLnByb2Nlc3NNb3VzZU1vdmUsIHRydWUgKTtcblxuICAgIGlmICh0aGlzLmN1cnJlbnRDdXJzb3JTdHlsZSAhPT0gdGhpcy5jdXJzb3IpXG4gICAge1xuICAgICAgICB0aGlzLmN1cnJlbnRDdXJzb3JTdHlsZSA9IHRoaXMuY3Vyc29yO1xuICAgICAgICB0aGlzLmludGVyYWN0aW9uRE9NRWxlbWVudC5zdHlsZS5jdXJzb3IgPSB0aGlzLmN1cnNvcjtcbiAgICB9XG5cbiAgICAvL1RPRE8gQlVHIGZvciBwYXJlbnRzIGluZXJhY3RpdmUgb2JqZWN0IChib3JkZXIgb3JkZXIgaXNzdWUpXG59O1xuXG4vKipcbiAqIFByb2Nlc3NlcyB0aGUgcmVzdWx0IG9mIHRoZSBtb3VzZSBtb3ZlIGNoZWNrIGFuZCBkaXNwYXRjaGVzIHRoZSBldmVudCBpZiBuZWVkIGJlXG4gKlxuICogQHBhcmFtIGRpc3BsYXlPYmplY3Qge1BJWEkuQ29udGFpbmVyfFBJWEkuU3ByaXRlfFBJWEkuZXh0cmFzLlRpbGluZ1Nwcml0ZX0gVGhlIGRpc3BsYXkgb2JqZWN0IHRoYXQgd2FzIHRlc3RlZFxuICogQHBhcmFtIGhpdCB7Ym9vbGVhbn0gdGhlIHJlc3VsdCBvZiB0aGUgaGl0IHRlc3Qgb24gdGhlIGRpc3BsYXkgb2JqZWN0XG4gKiBAcHJpdmF0ZVxuICovXG5JbnRlcmFjdGlvbk1hbmFnZXIucHJvdG90eXBlLnByb2Nlc3NNb3VzZU1vdmUgPSBmdW5jdGlvbiAoIGRpc3BsYXlPYmplY3QsIGhpdCApXG57XG4gICAgdGhpcy5kaXNwYXRjaEV2ZW50KCBkaXNwbGF5T2JqZWN0LCAnbW91c2Vtb3ZlJywgdGhpcy5ldmVudERhdGEpO1xuICAgIHRoaXMucHJvY2Vzc01vdXNlT3Zlck91dChkaXNwbGF5T2JqZWN0LCBoaXQpO1xufTtcblxuXG4vKipcbiAqIElzIGNhbGxlZCB3aGVuIHRoZSBtb3VzZSBpcyBtb3ZlZCBvdXQgb2YgdGhlIHJlbmRlcmVyIGVsZW1lbnRcbiAqXG4gKiBAcGFyYW0gZXZlbnQge0V2ZW50fSBUaGUgRE9NIGV2ZW50IG9mIGEgbW91c2UgYmVpbmcgbW92ZWQgb3V0XG4gKiBAcHJpdmF0ZVxuICovXG5JbnRlcmFjdGlvbk1hbmFnZXIucHJvdG90eXBlLm9uTW91c2VPdXQgPSBmdW5jdGlvbiAoZXZlbnQpXG57XG4gICAgdGhpcy5tb3VzZS5vcmlnaW5hbEV2ZW50ID0gZXZlbnQ7XG4gICAgdGhpcy5ldmVudERhdGEuc3RvcHBlZCA9IGZhbHNlO1xuXG4gICAgLy8gVXBkYXRlIGludGVybmFsIG1vdXNlIHJlZmVyZW5jZVxuICAgIHRoaXMubWFwUG9zaXRpb25Ub1BvaW50KCB0aGlzLm1vdXNlLmdsb2JhbCwgZXZlbnQuY2xpZW50WCwgZXZlbnQuY2xpZW50WSk7XG5cbiAgICB0aGlzLmludGVyYWN0aW9uRE9NRWxlbWVudC5zdHlsZS5jdXJzb3IgPSAnaW5oZXJpdCc7XG5cbiAgICAvLyBUT0RPIG9wdGltaXplIGJ5IG5vdCBjaGVjayBFVkVSWSBUSU1FISBtYXliZSBoYWxmIGFzIG9mdGVuPyAvL1xuICAgIHRoaXMubWFwUG9zaXRpb25Ub1BvaW50KCB0aGlzLm1vdXNlLmdsb2JhbCwgZXZlbnQuY2xpZW50WCwgZXZlbnQuY2xpZW50WSApO1xuXG4gICAgdGhpcy5wcm9jZXNzSW50ZXJhY3RpdmUoIHRoaXMubW91c2UuZ2xvYmFsLCB0aGlzLnJlbmRlcmVyLl9sYXN0T2JqZWN0UmVuZGVyZWQsIHRoaXMucHJvY2Vzc01vdXNlT3Zlck91dCwgZmFsc2UgKTtcbn07XG5cbi8qKlxuICogUHJvY2Vzc2VzIHRoZSByZXN1bHQgb2YgdGhlIG1vdXNlIG92ZXIvb3V0IGNoZWNrIGFuZCBkaXNwYXRjaGVzIHRoZSBldmVudCBpZiBuZWVkIGJlXG4gKlxuICogQHBhcmFtIGRpc3BsYXlPYmplY3Qge1BJWEkuQ29udGFpbmVyfFBJWEkuU3ByaXRlfFBJWEkuZXh0cmFzLlRpbGluZ1Nwcml0ZX0gVGhlIGRpc3BsYXkgb2JqZWN0IHRoYXQgd2FzIHRlc3RlZFxuICogQHBhcmFtIGhpdCB7Ym9vbGVhbn0gdGhlIHJlc3VsdCBvZiB0aGUgaGl0IHRlc3Qgb24gdGhlIGRpc3BsYXkgb2JqZWN0XG4gKiBAcHJpdmF0ZVxuICovXG5JbnRlcmFjdGlvbk1hbmFnZXIucHJvdG90eXBlLnByb2Nlc3NNb3VzZU92ZXJPdXQgPSBmdW5jdGlvbiAoIGRpc3BsYXlPYmplY3QsIGhpdCApXG57XG4gICAgaWYoaGl0KVxuICAgIHtcbiAgICAgICAgaWYoIWRpc3BsYXlPYmplY3QuX292ZXIpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGRpc3BsYXlPYmplY3QuX292ZXIgPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50KCBkaXNwbGF5T2JqZWN0LCAnbW91c2VvdmVyJywgdGhpcy5ldmVudERhdGEgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChkaXNwbGF5T2JqZWN0LmJ1dHRvbk1vZGUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuY3Vyc29yID0gZGlzcGxheU9iamVjdC5kZWZhdWx0Q3Vyc29yO1xuICAgICAgICB9XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIGlmKGRpc3BsYXlPYmplY3QuX292ZXIpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGRpc3BsYXlPYmplY3QuX292ZXIgPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudCggZGlzcGxheU9iamVjdCwgJ21vdXNlb3V0JywgdGhpcy5ldmVudERhdGEpO1xuICAgICAgICB9XG4gICAgfVxufTtcblxuXG4vKipcbiAqIElzIGNhbGxlZCB3aGVuIGEgdG91Y2ggaXMgc3RhcnRlZCBvbiB0aGUgcmVuZGVyZXIgZWxlbWVudFxuICpcbiAqIEBwYXJhbSBldmVudCB7RXZlbnR9IFRoZSBET00gZXZlbnQgb2YgYSB0b3VjaCBzdGFydGluZyBvbiB0aGUgcmVuZGVyZXIgdmlld1xuICogQHByaXZhdGVcbiAqL1xuSW50ZXJhY3Rpb25NYW5hZ2VyLnByb3RvdHlwZS5vblRvdWNoU3RhcnQgPSBmdW5jdGlvbiAoZXZlbnQpXG57XG4gICAgaWYgKHRoaXMuYXV0b1ByZXZlbnREZWZhdWx0KVxuICAgIHtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICB9XG5cbiAgICB2YXIgY2hhbmdlZFRvdWNoZXMgPSBldmVudC5jaGFuZ2VkVG91Y2hlcztcbiAgICB2YXIgY0xlbmd0aCA9IGNoYW5nZWRUb3VjaGVzLmxlbmd0aDtcblxuICAgIGZvciAodmFyIGk9MDsgaSA8IGNMZW5ndGg7IGkrKylcbiAgICB7XG4gICAgICAgIHZhciB0b3VjaEV2ZW50ID0gY2hhbmdlZFRvdWNoZXNbaV07XG4gICAgICAgIC8vVE9ETyBQT09MXG4gICAgICAgIHZhciB0b3VjaERhdGEgPSB0aGlzLmdldFRvdWNoRGF0YSggdG91Y2hFdmVudCApO1xuXG4gICAgICAgIHRvdWNoRGF0YS5vcmlnaW5hbEV2ZW50ID0gZXZlbnQ7XG5cbiAgICAgICAgdGhpcy5ldmVudERhdGEuZGF0YSA9IHRvdWNoRGF0YTtcbiAgICAgICAgdGhpcy5ldmVudERhdGEuc3RvcHBlZCA9IGZhbHNlO1xuXG4gICAgICAgIHRoaXMucHJvY2Vzc0ludGVyYWN0aXZlKCB0b3VjaERhdGEuZ2xvYmFsLCB0aGlzLnJlbmRlcmVyLl9sYXN0T2JqZWN0UmVuZGVyZWQsIHRoaXMucHJvY2Vzc1RvdWNoU3RhcnQsIHRydWUgKTtcblxuICAgICAgICB0aGlzLnJldHVyblRvdWNoRGF0YSggdG91Y2hEYXRhICk7XG4gICAgfVxufTtcblxuLyoqXG4gKiBQcm9jZXNzZXMgdGhlIHJlc3VsdCBvZiBhIHRvdWNoIGNoZWNrIGFuZCBkaXNwYXRjaGVzIHRoZSBldmVudCBpZiBuZWVkIGJlXG4gKlxuICogQHBhcmFtIGRpc3BsYXlPYmplY3Qge1BJWEkuQ29udGFpbmVyfFBJWEkuU3ByaXRlfFBJWEkuZXh0cmFzLlRpbGluZ1Nwcml0ZX0gVGhlIGRpc3BsYXkgb2JqZWN0IHRoYXQgd2FzIHRlc3RlZFxuICogQHBhcmFtIGhpdCB7Ym9vbGVhbn0gdGhlIHJlc3VsdCBvZiB0aGUgaGl0IHRlc3Qgb24gdGhlIGRpc3BsYXkgb2JqZWN0XG4gKiBAcHJpdmF0ZVxuICovXG5JbnRlcmFjdGlvbk1hbmFnZXIucHJvdG90eXBlLnByb2Nlc3NUb3VjaFN0YXJ0ID0gZnVuY3Rpb24gKCBkaXNwbGF5T2JqZWN0LCBoaXQgKVxue1xuICAgIGlmKGhpdClcbiAgICB7XG4gICAgICAgIGRpc3BsYXlPYmplY3QuX3RvdWNoRG93biA9IHRydWU7XG4gICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudCggZGlzcGxheU9iamVjdCwgJ3RvdWNoc3RhcnQnLCB0aGlzLmV2ZW50RGF0YSApO1xuICAgIH1cbn07XG5cblxuLyoqXG4gKiBJcyBjYWxsZWQgd2hlbiBhIHRvdWNoIGVuZHMgb24gdGhlIHJlbmRlcmVyIGVsZW1lbnRcbiAqXG4gKiBAcGFyYW0gZXZlbnQge0V2ZW50fSBUaGUgRE9NIGV2ZW50IG9mIGEgdG91Y2ggZW5kaW5nIG9uIHRoZSByZW5kZXJlciB2aWV3XG4gKi9cbkludGVyYWN0aW9uTWFuYWdlci5wcm90b3R5cGUub25Ub3VjaEVuZCA9IGZ1bmN0aW9uIChldmVudClcbntcbiAgICBpZiAodGhpcy5hdXRvUHJldmVudERlZmF1bHQpXG4gICAge1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIH1cblxuICAgIHZhciBjaGFuZ2VkVG91Y2hlcyA9IGV2ZW50LmNoYW5nZWRUb3VjaGVzO1xuICAgIHZhciBjTGVuZ3RoID0gY2hhbmdlZFRvdWNoZXMubGVuZ3RoO1xuXG4gICAgZm9yICh2YXIgaT0wOyBpIDwgY0xlbmd0aDsgaSsrKVxuICAgIHtcbiAgICAgICAgdmFyIHRvdWNoRXZlbnQgPSBjaGFuZ2VkVG91Y2hlc1tpXTtcblxuICAgICAgICB2YXIgdG91Y2hEYXRhID0gdGhpcy5nZXRUb3VjaERhdGEoIHRvdWNoRXZlbnQgKTtcblxuICAgICAgICB0b3VjaERhdGEub3JpZ2luYWxFdmVudCA9IGV2ZW50O1xuXG4gICAgICAgIC8vVE9ETyB0aGlzIHNob3VsZCBiZSBwYXNzZWQgYWxvbmcuLiBubyBzZXRcbiAgICAgICAgdGhpcy5ldmVudERhdGEuZGF0YSA9IHRvdWNoRGF0YTtcbiAgICAgICAgdGhpcy5ldmVudERhdGEuc3RvcHBlZCA9IGZhbHNlO1xuXG5cbiAgICAgICAgdGhpcy5wcm9jZXNzSW50ZXJhY3RpdmUoIHRvdWNoRGF0YS5nbG9iYWwsIHRoaXMucmVuZGVyZXIuX2xhc3RPYmplY3RSZW5kZXJlZCwgdGhpcy5wcm9jZXNzVG91Y2hFbmQsIHRydWUgKTtcblxuICAgICAgICB0aGlzLnJldHVyblRvdWNoRGF0YSggdG91Y2hEYXRhICk7XG4gICAgfVxufTtcblxuLyoqXG4gKiBQcm9jZXNzZXMgdGhlIHJlc3VsdCBvZiB0aGUgZW5kIG9mIGEgdG91Y2ggYW5kIGRpc3BhdGNoZXMgdGhlIGV2ZW50IGlmIG5lZWQgYmVcbiAqXG4gKiBAcGFyYW0gZGlzcGxheU9iamVjdCB7UElYSS5Db250YWluZXJ8UElYSS5TcHJpdGV8UElYSS5leHRyYXMuVGlsaW5nU3ByaXRlfSBUaGUgZGlzcGxheSBvYmplY3QgdGhhdCB3YXMgdGVzdGVkXG4gKiBAcGFyYW0gaGl0IHtib29sZWFufSB0aGUgcmVzdWx0IG9mIHRoZSBoaXQgdGVzdCBvbiB0aGUgZGlzcGxheSBvYmplY3RcbiAqIEBwcml2YXRlXG4gKi9cbkludGVyYWN0aW9uTWFuYWdlci5wcm90b3R5cGUucHJvY2Vzc1RvdWNoRW5kID0gZnVuY3Rpb24gKCBkaXNwbGF5T2JqZWN0LCBoaXQgKVxue1xuICAgIGlmKGhpdClcbiAgICB7XG4gICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudCggZGlzcGxheU9iamVjdCwgJ3RvdWNoZW5kJywgdGhpcy5ldmVudERhdGEgKTtcblxuICAgICAgICBpZiggZGlzcGxheU9iamVjdC5fdG91Y2hEb3duIClcbiAgICAgICAge1xuICAgICAgICAgICAgZGlzcGxheU9iamVjdC5fdG91Y2hEb3duID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLmRpc3BhdGNoRXZlbnQoIGRpc3BsYXlPYmplY3QsICd0YXAnLCB0aGlzLmV2ZW50RGF0YSApO1xuICAgICAgICB9XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIGlmKCBkaXNwbGF5T2JqZWN0Ll90b3VjaERvd24gKVxuICAgICAgICB7XG4gICAgICAgICAgICBkaXNwbGF5T2JqZWN0Ll90b3VjaERvd24gPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudCggZGlzcGxheU9iamVjdCwgJ3RvdWNoZW5kb3V0c2lkZScsIHRoaXMuZXZlbnREYXRhICk7XG4gICAgICAgIH1cbiAgICB9XG59O1xuXG4vKipcbiAqIElzIGNhbGxlZCB3aGVuIGEgdG91Y2ggaXMgbW92ZWQgYWNyb3NzIHRoZSByZW5kZXJlciBlbGVtZW50XG4gKlxuICogQHBhcmFtIGV2ZW50IHtFdmVudH0gVGhlIERPTSBldmVudCBvZiBhIHRvdWNoIG1vdmluZyBhY3Jvc3MgdGhlIHJlbmRlcmVyIHZpZXdcbiAqIEBwcml2YXRlXG4gKi9cbkludGVyYWN0aW9uTWFuYWdlci5wcm90b3R5cGUub25Ub3VjaE1vdmUgPSBmdW5jdGlvbiAoZXZlbnQpXG57XG4gICAgaWYgKHRoaXMuYXV0b1ByZXZlbnREZWZhdWx0KVxuICAgIHtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICB9XG5cbiAgICB2YXIgY2hhbmdlZFRvdWNoZXMgPSBldmVudC5jaGFuZ2VkVG91Y2hlcztcbiAgICB2YXIgY0xlbmd0aCA9IGNoYW5nZWRUb3VjaGVzLmxlbmd0aDtcblxuICAgIGZvciAodmFyIGk9MDsgaSA8IGNMZW5ndGg7IGkrKylcbiAgICB7XG4gICAgICAgIHZhciB0b3VjaEV2ZW50ID0gY2hhbmdlZFRvdWNoZXNbaV07XG5cbiAgICAgICAgdmFyIHRvdWNoRGF0YSA9IHRoaXMuZ2V0VG91Y2hEYXRhKCB0b3VjaEV2ZW50ICk7XG5cbiAgICAgICAgdG91Y2hEYXRhLm9yaWdpbmFsRXZlbnQgPSBldmVudDtcblxuICAgICAgICB0aGlzLmV2ZW50RGF0YS5kYXRhID0gdG91Y2hEYXRhO1xuICAgICAgICB0aGlzLmV2ZW50RGF0YS5zdG9wcGVkID0gZmFsc2U7XG5cbiAgICAgICAgdGhpcy5wcm9jZXNzSW50ZXJhY3RpdmUoIHRvdWNoRGF0YS5nbG9iYWwsIHRoaXMucmVuZGVyZXIuX2xhc3RPYmplY3RSZW5kZXJlZCwgdGhpcy5wcm9jZXNzVG91Y2hNb3ZlLCB0cnVlICk7XG5cbiAgICAgICAgdGhpcy5yZXR1cm5Ub3VjaERhdGEoIHRvdWNoRGF0YSApO1xuICAgIH1cbn07XG5cbi8qKlxuICogUHJvY2Vzc2VzIHRoZSByZXN1bHQgb2YgYSB0b3VjaCBtb3ZlIGNoZWNrIGFuZCBkaXNwYXRjaGVzIHRoZSBldmVudCBpZiBuZWVkIGJlXG4gKlxuICogQHBhcmFtIGRpc3BsYXlPYmplY3Qge1BJWEkuQ29udGFpbmVyfFBJWEkuU3ByaXRlfFBJWEkuZXh0cmFzLlRpbGluZ1Nwcml0ZX0gVGhlIGRpc3BsYXkgb2JqZWN0IHRoYXQgd2FzIHRlc3RlZFxuICogQHBhcmFtIGhpdCB7Ym9vbGVhbn0gdGhlIHJlc3VsdCBvZiB0aGUgaGl0IHRlc3Qgb24gdGhlIGRpc3BsYXkgb2JqZWN0XG4gKiBAcHJpdmF0ZVxuICovXG5JbnRlcmFjdGlvbk1hbmFnZXIucHJvdG90eXBlLnByb2Nlc3NUb3VjaE1vdmUgPSBmdW5jdGlvbiAoIGRpc3BsYXlPYmplY3QsIGhpdCApXG57XG4gICAgaGl0ID0gaGl0O1xuICAgIHRoaXMuZGlzcGF0Y2hFdmVudCggZGlzcGxheU9iamVjdCwgJ3RvdWNobW92ZScsIHRoaXMuZXZlbnREYXRhKTtcbn07XG5cbi8qKlxuICogR3JhYnMgYW4gaW50ZXJhY3Rpb24gZGF0YSBvYmplY3QgZnJvbSB0aGUgaW50ZXJuYWwgcG9vbFxuICpcbiAqIEBwYXJhbSB0b3VjaEV2ZW50IHtFdmVudERhdGF9IFRoZSB0b3VjaCBldmVudCB3ZSBuZWVkIHRvIHBhaXIgd2l0aCBhbiBpbnRlcmFjdGlvbkRhdGEgb2JqZWN0XG4gKlxuICogQHByaXZhdGVcbiAqL1xuSW50ZXJhY3Rpb25NYW5hZ2VyLnByb3RvdHlwZS5nZXRUb3VjaERhdGEgPSBmdW5jdGlvbiAodG91Y2hFdmVudClcbntcbiAgICB2YXIgdG91Y2hEYXRhID0gdGhpcy5pbnRlcmFjdGl2ZURhdGFQb29sLnBvcCgpO1xuXG4gICAgaWYoIXRvdWNoRGF0YSlcbiAgICB7XG4gICAgICAgIHRvdWNoRGF0YSA9IG5ldyBJbnRlcmFjdGlvbkRhdGEoKTtcbiAgICB9XG5cbiAgICB0b3VjaERhdGEuaWRlbnRpZmllciA9IHRvdWNoRXZlbnQuaWRlbnRpZmllcjtcbiAgICB0aGlzLm1hcFBvc2l0aW9uVG9Qb2ludCggdG91Y2hEYXRhLmdsb2JhbCwgdG91Y2hFdmVudC5jbGllbnRYLCB0b3VjaEV2ZW50LmNsaWVudFkgKTtcblxuICAgIGlmKG5hdmlnYXRvci5pc0NvY29vbkpTKVxuICAgIHtcbiAgICAgICAgdG91Y2hEYXRhLmdsb2JhbC54ID0gdG91Y2hEYXRhLmdsb2JhbC54IC8gdGhpcy5yZXNvbHV0aW9uO1xuICAgICAgICB0b3VjaERhdGEuZ2xvYmFsLnkgPSB0b3VjaERhdGEuZ2xvYmFsLnkgLyB0aGlzLnJlc29sdXRpb247XG4gICAgfVxuXG4gICAgdG91Y2hFdmVudC5nbG9iYWxYID0gdG91Y2hEYXRhLmdsb2JhbC54O1xuICAgIHRvdWNoRXZlbnQuZ2xvYmFsWSA9IHRvdWNoRGF0YS5nbG9iYWwueTtcblxuICAgIHJldHVybiB0b3VjaERhdGE7XG59O1xuXG4vKipcbiAqIFJldHVybnMgYW4gaW50ZXJhY3Rpb24gZGF0YSBvYmplY3QgdG8gdGhlIGludGVybmFsIHBvb2xcbiAqXG4gKiBAcGFyYW0gdG91Y2hEYXRhIHtQSVhJLmludGVyYWN0aW9uLkludGVyYWN0aW9uRGF0YX0gVGhlIHRvdWNoIGRhdGEgb2JqZWN0IHdlIHdhbnQgdG8gcmV0dXJuIHRvIHRoZSBwb29sXG4gKlxuICogQHByaXZhdGVcbiAqL1xuSW50ZXJhY3Rpb25NYW5hZ2VyLnByb3RvdHlwZS5yZXR1cm5Ub3VjaERhdGEgPSBmdW5jdGlvbiAoIHRvdWNoRGF0YSApXG57XG4gICAgdGhpcy5pbnRlcmFjdGl2ZURhdGFQb29sLnB1c2goIHRvdWNoRGF0YSApO1xufTtcblxuLyoqXG4gKiBEZXN0cm95cyB0aGUgaW50ZXJhY3Rpb24gbWFuYWdlclxuICpcbiAqL1xuSW50ZXJhY3Rpb25NYW5hZ2VyLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKCkge1xuICAgIHRoaXMucmVtb3ZlRXZlbnRzKCk7XG5cbiAgICB0aGlzLnJlbmRlcmVyID0gbnVsbDtcblxuICAgIHRoaXMubW91c2UgPSBudWxsO1xuXG4gICAgdGhpcy5ldmVudERhdGEgPSBudWxsO1xuXG4gICAgdGhpcy5pbnRlcmFjdGl2ZURhdGFQb29sID0gbnVsbDtcblxuICAgIHRoaXMuaW50ZXJhY3Rpb25ET01FbGVtZW50ID0gbnVsbDtcblxuICAgIHRoaXMub25Nb3VzZVVwID0gbnVsbDtcbiAgICB0aGlzLnByb2Nlc3NNb3VzZVVwID0gbnVsbDtcblxuXG4gICAgdGhpcy5vbk1vdXNlRG93biA9IG51bGw7XG4gICAgdGhpcy5wcm9jZXNzTW91c2VEb3duID0gbnVsbDtcblxuICAgIHRoaXMub25Nb3VzZU1vdmUgPSBudWxsO1xuICAgIHRoaXMucHJvY2Vzc01vdXNlTW92ZSA9IG51bGw7XG5cbiAgICB0aGlzLm9uTW91c2VPdXQgPSBudWxsO1xuICAgIHRoaXMucHJvY2Vzc01vdXNlT3Zlck91dCA9IG51bGw7XG5cblxuICAgIHRoaXMub25Ub3VjaFN0YXJ0ID0gbnVsbDtcbiAgICB0aGlzLnByb2Nlc3NUb3VjaFN0YXJ0ID0gbnVsbDtcblxuICAgIHRoaXMub25Ub3VjaEVuZCA9IG51bGw7XG4gICAgdGhpcy5wcm9jZXNzVG91Y2hFbmQgPSBudWxsO1xuXG4gICAgdGhpcy5vblRvdWNoTW92ZSA9IG51bGw7XG4gICAgdGhpcy5wcm9jZXNzVG91Y2hNb3ZlID0gbnVsbDtcblxuICAgIHRoaXMuX3RlbXBQb2ludCA9IG51bGw7XG59O1xuXG5jb3JlLldlYkdMUmVuZGVyZXIucmVnaXN0ZXJQbHVnaW4oJ2ludGVyYWN0aW9uJywgSW50ZXJhY3Rpb25NYW5hZ2VyKTtcbmNvcmUuQ2FudmFzUmVuZGVyZXIucmVnaXN0ZXJQbHVnaW4oJ2ludGVyYWN0aW9uJywgSW50ZXJhY3Rpb25NYW5hZ2VyKTtcbiIsIi8qKlxuICogQGZpbGUgICAgICAgIE1haW4gZXhwb3J0IG9mIHRoZSBQSVhJIGludGVyYWN0aW9ucyBsaWJyYXJ5XG4gKiBAYXV0aG9yICAgICAgTWF0IEdyb3ZlcyA8bWF0QGdvb2Rib3lkaWdpdGFsLmNvbT5cbiAqIEBjb3B5cmlnaHQgICAyMDEzLTIwMTUgR29vZEJveURpZ2l0YWxcbiAqIEBsaWNlbnNlICAgICB7QGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL3BpeGlqcy9waXhpLmpzL2Jsb2IvbWFzdGVyL0xJQ0VOU0V8TUlUIExpY2Vuc2V9XG4gKi9cblxuLyoqXG4gKiBAbmFtZXNwYWNlIFBJWEkuaW50ZXJhY3Rpb25cbiAqL1xubW9kdWxlLmV4cG9ydHMgPSB7XG4gICAgSW50ZXJhY3Rpb25EYXRhOiAgICByZXF1aXJlKCcuL0ludGVyYWN0aW9uRGF0YScpLFxuICAgIEludGVyYWN0aW9uTWFuYWdlcjogcmVxdWlyZSgnLi9JbnRlcmFjdGlvbk1hbmFnZXInKSxcbiAgICBpbnRlcmFjdGl2ZVRhcmdldDogIHJlcXVpcmUoJy4vaW50ZXJhY3RpdmVUYXJnZXQnKVxufTtcbiIsIi8qKlxuICogRGVmYXVsdCBwcm9wZXJ0eSB2YWx1ZXMgb2YgaW50ZXJhY3RpdmUgb2JqZWN0c1xuICogdXNlZCBieSB7QGxpbmsgUElYSS5pbnRlcmFjdGlvbi5JbnRlcmFjdGlvbk1hbmFnZXJ9LlxuICpcbiAqIEBtaXhpblxuICogQG1lbWJlcm9mIFBJWEkuaW50ZXJhY3Rpb25cbiAqIEBleGFtcGxlXG4gKiAgICAgIGZ1bmN0aW9uIE15T2JqZWN0KCkge31cbiAqXG4gKiAgICAgIE9iamVjdC5hc3NpZ24oXG4gKiAgICAgICAgICBNeU9iamVjdC5wcm90b3R5cGUsXG4gKiAgICAgICAgICBQSVhJLmludGVyYWN0aW9uLmludGVyYWN0aXZlVGFyZ2V0XG4gKiAgICAgICk7XG4gKi9cbnZhciBpbnRlcmFjdGl2ZVRhcmdldCA9IHtcbiAgICAvKipcbiAgICAgKiBAdG9kbyBOZWVkcyBkb2NzLlxuICAgICAqL1xuICAgIGludGVyYWN0aXZlOiBmYWxzZSxcbiAgICAvKipcbiAgICAgKiBAdG9kbyBOZWVkcyBkb2NzLlxuICAgICAqL1xuICAgIGJ1dHRvbk1vZGU6IGZhbHNlLFxuICAgIC8qKlxuICAgICAqIEB0b2RvIE5lZWRzIGRvY3MuXG4gICAgICovXG4gICAgaW50ZXJhY3RpdmVDaGlsZHJlbjogdHJ1ZSxcbiAgICAvKipcbiAgICAgKiBAdG9kbyBOZWVkcyBkb2NzLlxuICAgICAqL1xuICAgIGRlZmF1bHRDdXJzb3I6ICdwb2ludGVyJyxcblxuICAgIC8vIHNvbWUgaW50ZXJuYWwgY2hlY2tzLi5cblxuICAgIC8qKlxuICAgICAqIEB0b2RvIE5lZWRzIGRvY3MuXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICBfb3ZlcjogZmFsc2UsXG4gICAgLyoqXG4gICAgICogQHRvZG8gTmVlZHMgZG9jcy5cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIF90b3VjaERvd246IGZhbHNlXG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGludGVyYWN0aXZlVGFyZ2V0O1xuIiwidmFyIFJlc291cmNlID0gcmVxdWlyZSgncmVzb3VyY2UtbG9hZGVyJykuUmVzb3VyY2UsXG4gICAgY29yZSA9IHJlcXVpcmUoJy4uL2NvcmUnKSxcbiAgICBleHRyYXMgPSByZXF1aXJlKCcuLi9leHRyYXMnKSxcbiAgICBwYXRoID0gcmVxdWlyZSgncGF0aCcpO1xuXG5cbmZ1bmN0aW9uIHBhcnNlKHJlc291cmNlLCB0ZXh0dXJlKSB7XG4gICAgdmFyIGRhdGEgPSB7fTtcbiAgICB2YXIgaW5mbyA9IHJlc291cmNlLmRhdGEuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2luZm8nKVswXTtcbiAgICB2YXIgY29tbW9uID0gcmVzb3VyY2UuZGF0YS5nZXRFbGVtZW50c0J5VGFnTmFtZSgnY29tbW9uJylbMF07XG5cbiAgICBkYXRhLmZvbnQgPSBpbmZvLmdldEF0dHJpYnV0ZSgnZmFjZScpO1xuICAgIGRhdGEuc2l6ZSA9IHBhcnNlSW50KGluZm8uZ2V0QXR0cmlidXRlKCdzaXplJyksIDEwKTtcbiAgICBkYXRhLmxpbmVIZWlnaHQgPSBwYXJzZUludChjb21tb24uZ2V0QXR0cmlidXRlKCdsaW5lSGVpZ2h0JyksIDEwKTtcbiAgICBkYXRhLmNoYXJzID0ge307XG5cbiAgICAvL3BhcnNlIGxldHRlcnNcbiAgICB2YXIgbGV0dGVycyA9IHJlc291cmNlLmRhdGEuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2NoYXInKTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGV0dGVycy5sZW5ndGg7IGkrKylcbiAgICB7XG4gICAgICAgIHZhciBjaGFyQ29kZSA9IHBhcnNlSW50KGxldHRlcnNbaV0uZ2V0QXR0cmlidXRlKCdpZCcpLCAxMCk7XG5cbiAgICAgICAgdmFyIHRleHR1cmVSZWN0ID0gbmV3IGNvcmUuUmVjdGFuZ2xlKFxuICAgICAgICAgICAgcGFyc2VJbnQobGV0dGVyc1tpXS5nZXRBdHRyaWJ1dGUoJ3gnKSwgMTApICsgdGV4dHVyZS5mcmFtZS54LFxuICAgICAgICAgICAgcGFyc2VJbnQobGV0dGVyc1tpXS5nZXRBdHRyaWJ1dGUoJ3knKSwgMTApICsgdGV4dHVyZS5mcmFtZS55LFxuICAgICAgICAgICAgcGFyc2VJbnQobGV0dGVyc1tpXS5nZXRBdHRyaWJ1dGUoJ3dpZHRoJyksIDEwKSxcbiAgICAgICAgICAgIHBhcnNlSW50KGxldHRlcnNbaV0uZ2V0QXR0cmlidXRlKCdoZWlnaHQnKSwgMTApXG4gICAgICAgICk7XG5cbiAgICAgICAgZGF0YS5jaGFyc1tjaGFyQ29kZV0gPSB7XG4gICAgICAgICAgICB4T2Zmc2V0OiBwYXJzZUludChsZXR0ZXJzW2ldLmdldEF0dHJpYnV0ZSgneG9mZnNldCcpLCAxMCksXG4gICAgICAgICAgICB5T2Zmc2V0OiBwYXJzZUludChsZXR0ZXJzW2ldLmdldEF0dHJpYnV0ZSgneW9mZnNldCcpLCAxMCksXG4gICAgICAgICAgICB4QWR2YW5jZTogcGFyc2VJbnQobGV0dGVyc1tpXS5nZXRBdHRyaWJ1dGUoJ3hhZHZhbmNlJyksIDEwKSxcbiAgICAgICAgICAgIGtlcm5pbmc6IHt9LFxuICAgICAgICAgICAgdGV4dHVyZTogbmV3IGNvcmUuVGV4dHVyZSh0ZXh0dXJlLmJhc2VUZXh0dXJlLCB0ZXh0dXJlUmVjdClcblxuICAgICAgICB9O1xuICAgIH1cblxuICAgIC8vcGFyc2Uga2VybmluZ3NcbiAgICB2YXIga2VybmluZ3MgPSByZXNvdXJjZS5kYXRhLmdldEVsZW1lbnRzQnlUYWdOYW1lKCdrZXJuaW5nJyk7XG4gICAgZm9yIChpID0gMDsgaSA8IGtlcm5pbmdzLmxlbmd0aDsgaSsrKVxuICAgIHtcbiAgICAgICAgdmFyIGZpcnN0ID0gcGFyc2VJbnQoa2VybmluZ3NbaV0uZ2V0QXR0cmlidXRlKCdmaXJzdCcpLCAxMCk7XG4gICAgICAgIHZhciBzZWNvbmQgPSBwYXJzZUludChrZXJuaW5nc1tpXS5nZXRBdHRyaWJ1dGUoJ3NlY29uZCcpLCAxMCk7XG4gICAgICAgIHZhciBhbW91bnQgPSBwYXJzZUludChrZXJuaW5nc1tpXS5nZXRBdHRyaWJ1dGUoJ2Ftb3VudCcpLCAxMCk7XG5cbiAgICAgICAgZGF0YS5jaGFyc1tzZWNvbmRdLmtlcm5pbmdbZmlyc3RdID0gYW1vdW50O1xuICAgIH1cblxuICAgIHJlc291cmNlLmJpdG1hcEZvbnQgPSBkYXRhO1xuXG4gICAgLy8gSSdtIGxlYXZpbmcgdGhpcyBhcyBhIHRlbXBvcmFyeSBmaXggc28gd2UgY2FuIHRlc3QgdGhlIGJpdG1hcCBmb250cyBpbiB2M1xuICAgIC8vIGJ1dCBpdCdzIHZlcnkgbGlrZWx5IHRvIGNoYW5nZVxuICAgIGV4dHJhcy5CaXRtYXBUZXh0LmZvbnRzW2RhdGEuZm9udF0gPSBkYXRhO1xufVxuXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKClcbntcbiAgICByZXR1cm4gZnVuY3Rpb24gKHJlc291cmNlLCBuZXh0KVxuICAgIHtcbiAgICAgICAgLy8gc2tpcCBpZiBubyBkYXRhIG9yIG5vdCB4bWwgZGF0YVxuICAgICAgICBpZiAoIXJlc291cmNlLmRhdGEgfHwgIXJlc291cmNlLmlzWG1sKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gbmV4dCgpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gc2tpcCBpZiBub3QgYml0bWFwIGZvbnQgZGF0YSwgdXNpbmcgc29tZSBzaWxseSBkdWNrLXR5cGluZ1xuICAgICAgICBpZiAoXG4gICAgICAgICAgICByZXNvdXJjZS5kYXRhLmdldEVsZW1lbnRzQnlUYWdOYW1lKCdwYWdlJykubGVuZ3RoID09PSAwIHx8XG4gICAgICAgICAgICByZXNvdXJjZS5kYXRhLmdldEVsZW1lbnRzQnlUYWdOYW1lKCdpbmZvJykubGVuZ3RoID09PSAwIHx8XG4gICAgICAgICAgICByZXNvdXJjZS5kYXRhLmdldEVsZW1lbnRzQnlUYWdOYW1lKCdpbmZvJylbMF0uZ2V0QXR0cmlidXRlKCdmYWNlJykgPT09IG51bGxcbiAgICAgICAgICAgIClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIG5leHQoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciB4bWxVcmwgPSBwYXRoLmRpcm5hbWUocmVzb3VyY2UudXJsKTtcblxuICAgICAgICBpZiAoeG1sVXJsID09PSAnLicpIHtcbiAgICAgICAgICAgIHhtbFVybCA9ICcnO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuYmFzZVVybCAmJiB4bWxVcmwpIHtcbiAgICAgICAgICAgIC8vIGlmIGJhc2V1cmwgaGFzIGEgdHJhaWxpbmcgc2xhc2ggdGhlbiBhZGQgb25lIHRvIHhtbFVybCBzbyB0aGUgcmVwbGFjZSB3b3JrcyBiZWxvd1xuICAgICAgICAgICAgaWYgKHRoaXMuYmFzZVVybC5jaGFyQXQodGhpcy5iYXNlVXJsLmxlbmd0aCAtIDEpID09PSAnLycpIHtcbiAgICAgICAgICAgICAgICB4bWxVcmwgKz0gJy8nO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyByZW1vdmUgYmFzZVVybCBmcm9tIHhtbFVybFxuICAgICAgICAgICAgeG1sVXJsID0geG1sVXJsLnJlcGxhY2UodGhpcy5iYXNlVXJsLCAnJyk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBpZiB0aGVyZSBpcyBhbiB4bWxVcmwgbm93LCBpdCBuZWVkcyBhIHRyYWlsaW5nIHNsYXNoLiBFbnN1cmUgdGhhdCBpdCBkb2VzIGlmIHRoZSBzdHJpbmcgaXNuJ3QgZW1wdHkuXG4gICAgICAgIGlmICh4bWxVcmwgJiYgeG1sVXJsLmNoYXJBdCh4bWxVcmwubGVuZ3RoIC0gMSkgIT09ICcvJykge1xuICAgICAgICAgICAgeG1sVXJsICs9ICcvJztcbiAgICAgICAgfVxuICAgICAgICB2YXIgdGV4dHVyZVVybCA9IHhtbFVybCArIHJlc291cmNlLmRhdGEuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ3BhZ2UnKVswXS5nZXRBdHRyaWJ1dGUoJ2ZpbGUnKTtcbiAgICAgICAgaWYgKGNvcmUudXRpbHMuVGV4dHVyZUNhY2hlW3RleHR1cmVVcmxdKSB7XG4gICAgICAgICAgICAvL3JldXNlIGV4aXN0aW5nIHRleHR1cmVcbiAgICAgICAgICAgIHBhcnNlKHJlc291cmNlLCBjb3JlLnV0aWxzLlRleHR1cmVDYWNoZVt0ZXh0dXJlVXJsXSk7XG4gICAgICAgICAgICBuZXh0KCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB2YXIgbG9hZE9wdGlvbnMgPSB7XG4gICAgICAgICAgICAgICAgY3Jvc3NPcmlnaW46IHJlc291cmNlLmNyb3NzT3JpZ2luLFxuICAgICAgICAgICAgICAgIGxvYWRUeXBlOiBSZXNvdXJjZS5MT0FEX1RZUEUuSU1BR0UsXG4gICAgICAgICAgICAgICAgbWV0YWRhdGE6IHJlc291cmNlLm1ldGFkYXRhLmltYWdlTWV0YWRhdGFcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICAvLyBsb2FkIHRoZSB0ZXh0dXJlIGZvciB0aGUgZm9udFxuICAgICAgICAgICAgdGhpcy5hZGQocmVzb3VyY2UubmFtZSArICdfaW1hZ2UnLCB0ZXh0dXJlVXJsLCBsb2FkT3B0aW9ucywgZnVuY3Rpb24gKHJlcykge1xuICAgICAgICAgICAgICAgIHBhcnNlKHJlc291cmNlLCByZXMudGV4dHVyZSk7XG4gICAgICAgICAgICAgICAgbmV4dCgpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9O1xufTtcbiIsIi8qKlxuICogQGZpbGUgICAgICAgIE1haW4gZXhwb3J0IG9mIHRoZSBQSVhJIGxvYWRlcnMgbGlicmFyeVxuICogQGF1dGhvciAgICAgIE1hdCBHcm92ZXMgPG1hdEBnb29kYm95ZGlnaXRhbC5jb20+XG4gKiBAY29weXJpZ2h0ICAgMjAxMy0yMDE1IEdvb2RCb3lEaWdpdGFsXG4gKiBAbGljZW5zZSAgICAge0BsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9waXhpanMvcGl4aS5qcy9ibG9iL21hc3Rlci9MSUNFTlNFfE1JVCBMaWNlbnNlfVxuICovXG5cbi8qKlxuICogQG5hbWVzcGFjZSBQSVhJLmxvYWRlcnNcbiAqL1xubW9kdWxlLmV4cG9ydHMgPSB7XG4gICAgTG9hZGVyOiAgICAgICAgICAgICByZXF1aXJlKCcuL2xvYWRlcicpLFxuXG4gICAgLy8gcGFyc2Vyc1xuICAgIGJpdG1hcEZvbnRQYXJzZXI6ICAgcmVxdWlyZSgnLi9iaXRtYXBGb250UGFyc2VyJyksXG4gICAgc3ByaXRlc2hlZXRQYXJzZXI6ICByZXF1aXJlKCcuL3Nwcml0ZXNoZWV0UGFyc2VyJyksXG4gICAgdGV4dHVyZVBhcnNlcjogICAgICByZXF1aXJlKCcuL3RleHR1cmVQYXJzZXInKSxcbiAgICBSZXNvdXJjZTogICAgICAgICAgIHJlcXVpcmUoJ3Jlc291cmNlLWxvYWRlcicpLlJlc291cmNlXG59O1xuIiwidmFyIFJlc291cmNlTG9hZGVyID0gcmVxdWlyZSgncmVzb3VyY2UtbG9hZGVyJyksXG4gICAgdGV4dHVyZVBhcnNlciA9IHJlcXVpcmUoJy4vdGV4dHVyZVBhcnNlcicpLFxuICAgIHNwcml0ZXNoZWV0UGFyc2VyID0gcmVxdWlyZSgnLi9zcHJpdGVzaGVldFBhcnNlcicpLFxuICAgIGJpdG1hcEZvbnRQYXJzZXIgPSByZXF1aXJlKCcuL2JpdG1hcEZvbnRQYXJzZXInKTtcblxuLyoqXG4gKlxuICogVGhlIG5ldyBsb2FkZXIsIGV4dGVuZHMgUmVzb3VyY2UgTG9hZGVyIGJ5IENoYWQgRW5nbGVyIDogaHR0cHM6Ly9naXRodWIuY29tL2VuZ2xlcmNqL3Jlc291cmNlLWxvYWRlclxuICpcbiAqIGBgYGpzXG4gKiB2YXIgbG9hZGVyID0gUElYSS5sb2FkZXI7IC8vIHBpeGkgZXhwb3NlcyBhIHByZW1hZGUgaW5zdGFuY2UgZm9yIHlvdSB0byB1c2UuXG4gKiAvL29yXG4gKiB2YXIgbG9hZGVyID0gbmV3IFBJWEkubG9hZGVycy5Mb2FkZXIoKTsgLy8geW91IGNhbiBhbHNvIGNyZWF0ZSB5b3VyIG93biBpZiB5b3Ugd2FudFxuICpcbiAqIGxvYWRlci5hZGQoJ2J1bm55JyxcImRhdGEvYnVubnkucG5nXCIpO1xuICpcbiAqIGxvYWRlci5vbmNlKCdjb21wbGV0ZScsb25Bc3NldHNMb2FkZWQpO1xuICpcbiAqIGxvYWRlci5sb2FkKCk7XG4gKiBgYGBcbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuUmVzb3VyY2VMb2FkZXJcbiAqIEBtZW1iZXJvZiBQSVhJLmxvYWRlcnNcbiAqIEBwYXJhbSBbYmFzZVVybD0nJ10ge3N0cmluZ30gVGhlIGJhc2UgdXJsIGZvciBhbGwgcmVzb3VyY2VzIGxvYWRlZCBieSB0aGlzIGxvYWRlci5cbiAqIEBwYXJhbSBbY29uY3VycmVuY3k9MTBdIHtudW1iZXJ9IFRoZSBudW1iZXIgb2YgcmVzb3VyY2VzIHRvIGxvYWQgY29uY3VycmVudGx5LlxuICovXG5mdW5jdGlvbiBMb2FkZXIoYmFzZVVybCwgY29uY3VycmVuY3kpXG57XG4gICAgUmVzb3VyY2VMb2FkZXIuY2FsbCh0aGlzLCBiYXNlVXJsLCBjb25jdXJyZW5jeSk7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IExvYWRlci5fcGl4aU1pZGRsZXdhcmUubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgdGhpcy51c2UoTG9hZGVyLl9waXhpTWlkZGxld2FyZVtpXSgpKTtcbiAgICB9XG59XG5cbkxvYWRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFJlc291cmNlTG9hZGVyLnByb3RvdHlwZSk7XG5Mb2FkZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gTG9hZGVyO1xuXG5tb2R1bGUuZXhwb3J0cyA9IExvYWRlcjtcblxuTG9hZGVyLl9waXhpTWlkZGxld2FyZSA9IFtcbiAgICAvLyBwYXJzZSBhbnkgYmxvYiBpbnRvIG1vcmUgdXNhYmxlIG9iamVjdHMgKGUuZy4gSW1hZ2UpXG4gICAgUmVzb3VyY2VMb2FkZXIubWlkZGxld2FyZS5wYXJzaW5nLmJsb2IsXG4gICAgLy8gcGFyc2UgYW55IEltYWdlIG9iamVjdHMgaW50byB0ZXh0dXJlc1xuICAgIHRleHR1cmVQYXJzZXIsXG4gICAgLy8gcGFyc2UgYW55IHNwcml0ZXNoZWV0IGRhdGEgaW50byBtdWx0aXBsZSB0ZXh0dXJlc1xuICAgIHNwcml0ZXNoZWV0UGFyc2VyLFxuICAgIC8vIHBhcnNlIGFueSBzcHJpdGVzaGVldCBkYXRhIGludG8gbXVsdGlwbGUgdGV4dHVyZXNcbiAgICBiaXRtYXBGb250UGFyc2VyXG5dO1xuXG5Mb2FkZXIuYWRkUGl4aU1pZGRsZXdhcmUgPSBmdW5jdGlvbiAoZm4pIHtcbiAgICBMb2FkZXIuX3BpeGlNaWRkbGV3YXJlLnB1c2goZm4pO1xufTtcblxuLy8gQWRkIGN1c3RvbSBleHRlbnRpb25zXG52YXIgUmVzb3VyY2UgPSBSZXNvdXJjZUxvYWRlci5SZXNvdXJjZTtcblxuUmVzb3VyY2Uuc2V0RXh0ZW5zaW9uWGhyVHlwZSgnZm50JywgUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuRE9DVU1FTlQpO1xuIiwidmFyIFJlc291cmNlID0gcmVxdWlyZSgncmVzb3VyY2UtbG9hZGVyJykuUmVzb3VyY2UsXG4gICAgcGF0aCA9IHJlcXVpcmUoJ3BhdGgnKSxcbiAgICBjb3JlID0gcmVxdWlyZSgnLi4vY29yZScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICgpXG57XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChyZXNvdXJjZSwgbmV4dClcbiAgICB7XG4gICAgICAgIC8vIHNraXAgaWYgbm8gZGF0YSwgaXRzIG5vdCBqc29uLCBvciBpdCBpc24ndCBzcHJpdGVzaGVldCBkYXRhXG4gICAgICAgIGlmICghcmVzb3VyY2UuZGF0YSB8fCAhcmVzb3VyY2UuaXNKc29uIHx8ICFyZXNvdXJjZS5kYXRhLmZyYW1lcylcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIG5leHQoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBsb2FkT3B0aW9ucyA9IHtcbiAgICAgICAgICAgIGNyb3NzT3JpZ2luOiByZXNvdXJjZS5jcm9zc09yaWdpbixcbiAgICAgICAgICAgIGxvYWRUeXBlOiBSZXNvdXJjZS5MT0FEX1RZUEUuSU1BR0UsXG4gICAgICAgICAgICBtZXRhZGF0YTogcmVzb3VyY2UubWV0YWRhdGEuaW1hZ2VNZXRhZGF0YVxuICAgICAgICB9O1xuXG4gICAgICAgIHZhciByb3V0ZSA9IHBhdGguZGlybmFtZShyZXNvdXJjZS51cmwucmVwbGFjZSh0aGlzLmJhc2VVcmwsICcnKSk7XG5cbiAgICAgICAgdmFyIHJlc29sdXRpb24gPSBjb3JlLnV0aWxzLmdldFJlc29sdXRpb25PZlVybCggcmVzb3VyY2UudXJsICk7XG5cbiAgICAgICAgLy8gbG9hZCB0aGUgaW1hZ2UgZm9yIHRoaXMgc2hlZXRcbiAgICAgICAgdGhpcy5hZGQocmVzb3VyY2UubmFtZSArICdfaW1hZ2UnLCByb3V0ZSArICcvJyArIHJlc291cmNlLmRhdGEubWV0YS5pbWFnZSwgbG9hZE9wdGlvbnMsIGZ1bmN0aW9uIChyZXMpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJlc291cmNlLnRleHR1cmVzID0ge307XG5cbiAgICAgICAgICAgIHZhciBmcmFtZXMgPSByZXNvdXJjZS5kYXRhLmZyYW1lcztcblxuICAgICAgICAgICAgZm9yICh2YXIgaSBpbiBmcmFtZXMpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdmFyIHJlY3QgPSBmcmFtZXNbaV0uZnJhbWU7XG5cbiAgICAgICAgICAgICAgICBpZiAocmVjdClcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBzaXplID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHRyaW0gPSBudWxsO1xuXG4gICAgICAgICAgICAgICAgICAgIGlmIChmcmFtZXNbaV0ucm90YXRlZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZSA9IG5ldyBjb3JlLlJlY3RhbmdsZShyZWN0LngsIHJlY3QueSwgcmVjdC5oLCByZWN0LncpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZSA9IG5ldyBjb3JlLlJlY3RhbmdsZShyZWN0LngsIHJlY3QueSwgcmVjdC53LCByZWN0LmgpO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgLy8gIENoZWNrIHRvIHNlZSBpZiB0aGUgc3ByaXRlIGlzIHRyaW1tZWRcbiAgICAgICAgICAgICAgICAgICAgaWYgKGZyYW1lc1tpXS50cmltbWVkKVxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0cmltID0gbmV3IGNvcmUuUmVjdGFuZ2xlKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyYW1lc1tpXS5zcHJpdGVTb3VyY2VTaXplLnggLyByZXNvbHV0aW9uLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyYW1lc1tpXS5zcHJpdGVTb3VyY2VTaXplLnkgLyByZXNvbHV0aW9uLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyYW1lc1tpXS5zb3VyY2VTaXplLncgLyByZXNvbHV0aW9uLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyYW1lc1tpXS5zb3VyY2VTaXplLmggLyByZXNvbHV0aW9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIC8vIGZsaXAgdGhlIHdpZHRoIGFuZCBoZWlnaHQhXG4gICAgICAgICAgICAgICAgICAgIGlmIChmcmFtZXNbaV0ucm90YXRlZClcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHRlbXAgPSBzaXplLndpZHRoO1xuICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZS53aWR0aCA9IHNpemUuaGVpZ2h0O1xuICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZS5oZWlnaHQgPSB0ZW1wO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgc2l6ZS54IC89IHJlc29sdXRpb247XG4gICAgICAgICAgICAgICAgICAgIHNpemUueSAvPSByZXNvbHV0aW9uO1xuICAgICAgICAgICAgICAgICAgICBzaXplLndpZHRoIC89IHJlc29sdXRpb247XG4gICAgICAgICAgICAgICAgICAgIHNpemUuaGVpZ2h0IC89IHJlc29sdXRpb247XG5cbiAgICAgICAgICAgICAgICAgICAgcmVzb3VyY2UudGV4dHVyZXNbaV0gPSBuZXcgY29yZS5UZXh0dXJlKHJlcy50ZXh0dXJlLmJhc2VUZXh0dXJlLCBzaXplLCBzaXplLmNsb25lKCksIHRyaW0sIGZyYW1lc1tpXS5yb3RhdGVkKTtcblxuICAgICAgICAgICAgICAgICAgICAvLyBsZXRzIGFsc28gYWRkIHRoZSBmcmFtZSB0byBwaXhpJ3MgZ2xvYmFsIGNhY2hlIGZvciBmcm9tRnJhbWUgYW5kIGZyb21JbWFnZSBmdW5jdGlvbnNcbiAgICAgICAgICAgICAgICAgICAgY29yZS51dGlscy5UZXh0dXJlQ2FjaGVbaV0gPSByZXNvdXJjZS50ZXh0dXJlc1tpXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIG5leHQoKTtcbiAgICAgICAgfSk7XG4gICAgfTtcbn07XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uL2NvcmUnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoKVxue1xuICAgIHJldHVybiBmdW5jdGlvbiAocmVzb3VyY2UsIG5leHQpXG4gICAge1xuICAgICAgICAvLyBjcmVhdGUgYSBuZXcgdGV4dHVyZSBpZiB0aGUgZGF0YSBpcyBhbiBJbWFnZSBvYmplY3RcbiAgICAgICAgaWYgKHJlc291cmNlLmRhdGEgJiYgcmVzb3VyY2UuaXNJbWFnZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdmFyIGJhc2VUZXh0dXJlID0gbmV3IGNvcmUuQmFzZVRleHR1cmUocmVzb3VyY2UuZGF0YSwgbnVsbCwgY29yZS51dGlscy5nZXRSZXNvbHV0aW9uT2ZVcmwocmVzb3VyY2UudXJsKSk7XG4gICAgICAgICAgICBiYXNlVGV4dHVyZS5pbWFnZVVybCA9IHJlc291cmNlLnVybDtcbiAgICAgICAgICAgIHJlc291cmNlLnRleHR1cmUgPSBuZXcgY29yZS5UZXh0dXJlKGJhc2VUZXh0dXJlKTtcbiAgICAgICAgICAgIC8vIGxldHMgYWxzbyBhZGQgdGhlIGZyYW1lIHRvIHBpeGkncyBnbG9iYWwgY2FjaGUgZm9yIGZyb21GcmFtZSBhbmQgZnJvbUltYWdlIGZ1Y250aW9uc1xuICAgICAgICAgICAgY29yZS51dGlscy5CYXNlVGV4dHVyZUNhY2hlW3Jlc291cmNlLnVybF0gPSBiYXNlVGV4dHVyZTtcbiAgICAgICAgICAgIGNvcmUudXRpbHMuVGV4dHVyZUNhY2hlW3Jlc291cmNlLnVybF0gPSByZXNvdXJjZS50ZXh0dXJlO1xuICAgICAgICB9XG5cbiAgICAgICAgbmV4dCgpO1xuICAgIH07XG59O1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi9jb3JlJyksXG4gICAgdGVtcFBvaW50ID0gbmV3IGNvcmUuUG9pbnQoKSxcbiAgICB0ZW1wUG9seWdvbiA9IG5ldyBjb3JlLlBvbHlnb24oKTtcblxuLyoqXG4gKiBCYXNlIG1lc2ggY2xhc3NcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5Db250YWluZXJcbiAqIEBtZW1iZXJvZiBQSVhJLm1lc2hcbiAqIEBwYXJhbSB0ZXh0dXJlIHtQSVhJLlRleHR1cmV9IFRoZSB0ZXh0dXJlIHRvIHVzZVxuICogQHBhcmFtIFt2ZXJ0aWNlc10ge0Zsb2F0MzJBcnJheX0gaWYgeW91IHdhbnQgdG8gc3BlY2lmeSB0aGUgdmVydGljZXNcbiAqIEBwYXJhbSBbdXZzXSB7RmxvYXQzMkFycmF5fSBpZiB5b3Ugd2FudCB0byBzcGVjaWZ5IHRoZSB1dnNcbiAqIEBwYXJhbSBbaW5kaWNlc10ge1VpbnQxNkFycmF5fSBpZiB5b3Ugd2FudCB0byBzcGVjaWZ5IHRoZSBpbmRpY2VzXG4gKiBAcGFyYW0gW2RyYXdNb2RlXSB7bnVtYmVyfSB0aGUgZHJhd01vZGUsIGNhbiBiZSBhbnkgb2YgdGhlIE1lc2guRFJBV19NT0RFUyBjb25zdHNcbiAqL1xuZnVuY3Rpb24gTWVzaCh0ZXh0dXJlLCB2ZXJ0aWNlcywgdXZzLCBpbmRpY2VzLCBkcmF3TW9kZSlcbntcbiAgICBjb3JlLkNvbnRhaW5lci5jYWxsKHRoaXMpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHRleHR1cmUgb2YgdGhlIE1lc2hcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuVGV4dHVyZX1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX3RleHR1cmUgPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogVGhlIFV2cyBvZiB0aGUgTWVzaFxuICAgICAqXG4gICAgICogQG1lbWJlciB7RmxvYXQzMkFycmF5fVxuICAgICAqL1xuICAgIHRoaXMudXZzID0gdXZzIHx8IG5ldyBGbG9hdDMyQXJyYXkoWzAsIDAsXG4gICAgICAgIDEsIDAsXG4gICAgICAgIDEsIDEsXG4gICAgICAgIDAsIDFdKTtcblxuICAgIC8qKlxuICAgICAqIEFuIGFycmF5IG9mIHZlcnRpY2VzXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtGbG9hdDMyQXJyYXl9XG4gICAgICovXG4gICAgdGhpcy52ZXJ0aWNlcyA9IHZlcnRpY2VzIHx8IG5ldyBGbG9hdDMyQXJyYXkoWzAsIDAsXG4gICAgICAgIDEwMCwgMCxcbiAgICAgICAgMTAwLCAxMDAsXG4gICAgICAgIDAsIDEwMF0pO1xuXG4gICAgLypcbiAgICAgKiBAbWVtYmVyIHtVaW50MTZBcnJheX0gQW4gYXJyYXkgY29udGFpbmluZyB0aGUgaW5kaWNlcyBvZiB0aGUgdmVydGljZXNcbiAgICAgKi9cbiAgICAvLyAgVE9ETyBhdXRvIGdlbmVyYXRlIHRoaXMgYmFzZWQgb24gZHJhdyBtb2RlIVxuICAgIHRoaXMuaW5kaWNlcyA9IGluZGljZXMgfHwgbmV3IFVpbnQxNkFycmF5KFswLCAxLCAzLCAyXSk7XG5cbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIHRoZSBNZXNoIGlzIGRpcnR5IG9yIG5vdFxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKi9cbiAgICB0aGlzLmRpcnR5ID0gdHJ1ZTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBibGVuZCBtb2RlIHRvIGJlIGFwcGxpZWQgdG8gdGhlIHNwcml0ZS4gU2V0IHRvIGBQSVhJLkJMRU5EX01PREVTLk5PUk1BTGAgdG8gcmVtb3ZlIGFueSBibGVuZCBtb2RlLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IFBJWEkuQkxFTkRfTU9ERVMuTk9STUFMXG4gICAgICogQHNlZSBQSVhJLkJMRU5EX01PREVTXG4gICAgICovXG4gICAgdGhpcy5ibGVuZE1vZGUgPSBjb3JlLkJMRU5EX01PREVTLk5PUk1BTDtcblxuICAgIC8qKlxuICAgICAqIFRyaWFuZ2xlcyBpbiBjYW52YXMgbW9kZSBhcmUgYXV0b21hdGljYWxseSBhbnRpYWxpYXNlZCwgdXNlIHRoaXMgdmFsdWUgdG8gZm9yY2UgdHJpYW5nbGVzIHRvIG92ZXJsYXAgYSBiaXQgd2l0aCBlYWNoIG90aGVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMuY2FudmFzUGFkZGluZyA9IDA7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgd2F5IHRoZSBNZXNoIHNob3VsZCBiZSBkcmF3biwgY2FuIGJlIGFueSBvZiB0aGUge0BsaW5rIFBJWEkubWVzaC5NZXNoLkRSQVdfTU9ERVN9IGNvbnN0c1xuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBzZWUgUElYSS5tZXNoLk1lc2guRFJBV19NT0RFU1xuICAgICAqL1xuICAgIHRoaXMuZHJhd01vZGUgPSBkcmF3TW9kZSB8fCBNZXNoLkRSQVdfTU9ERVMuVFJJQU5HTEVfTUVTSDtcblxuICAgIC8vIHJ1biB0ZXh0dXJlIHNldHRlcjtcbiAgICB0aGlzLnRleHR1cmUgPSB0ZXh0dXJlO1xuXG4gICAgIC8qKlxuICAgICAqIFRoZSBkZWZhdWx0IHNoYWRlciB0aGF0IGlzIHVzZWQgaWYgYSBtZXNoIGRvZXNuJ3QgaGF2ZSBhIG1vcmUgc3BlY2lmaWMgb25lLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5TaGFkZXJ9XG4gICAgICovXG4gICAgdGhpcy5zaGFkZXIgPSBudWxsO1xufVxuXG4vLyBjb25zdHJ1Y3RvclxuTWVzaC5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuQ29udGFpbmVyLnByb3RvdHlwZSk7XG5NZXNoLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IE1lc2g7XG5tb2R1bGUuZXhwb3J0cyA9IE1lc2g7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKE1lc2gucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogVGhlIHRleHR1cmUgdGhhdCB0aGUgc3ByaXRlIGlzIHVzaW5nXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlRleHR1cmV9XG4gICAgICogQG1lbWJlcm9mIFBJWEkubWVzaC5NZXNoI1xuICAgICAqL1xuICAgIHRleHR1cmU6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gIHRoaXMuX3RleHR1cmU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICBpZiAodGhpcy5fdGV4dHVyZSA9PT0gdmFsdWUpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLl90ZXh0dXJlID0gdmFsdWU7XG5cbiAgICAgICAgICAgIGlmICh2YWx1ZSlcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAvLyB3YWl0IGZvciB0aGUgdGV4dHVyZSB0byBsb2FkXG4gICAgICAgICAgICAgICAgaWYgKHZhbHVlLmJhc2VUZXh0dXJlLmhhc0xvYWRlZClcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX29uVGV4dHVyZVVwZGF0ZSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICB2YWx1ZS5vbmNlKCd1cGRhdGUnLCB0aGlzLl9vblRleHR1cmVVcGRhdGUsIHRoaXMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn0pO1xuXG4vKipcbiAqIFJlbmRlcnMgdGhlIG9iamVjdCB1c2luZyB0aGUgV2ViR0wgcmVuZGVyZXJcbiAqXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcn0gYSByZWZlcmVuY2UgdG8gdGhlIFdlYkdMIHJlbmRlcmVyXG4gKiBAcHJpdmF0ZVxuICovXG5NZXNoLnByb3RvdHlwZS5fcmVuZGVyV2ViR0wgPSBmdW5jdGlvbiAocmVuZGVyZXIpXG57XG4gICAgcmVuZGVyZXIuc2V0T2JqZWN0UmVuZGVyZXIocmVuZGVyZXIucGx1Z2lucy5tZXNoKTtcbiAgICByZW5kZXJlci5wbHVnaW5zLm1lc2gucmVuZGVyKHRoaXMpO1xufTtcblxuLyoqXG4gKiBSZW5kZXJzIHRoZSBvYmplY3QgdXNpbmcgdGhlIENhbnZhcyByZW5kZXJlclxuICpcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5DYW52YXNSZW5kZXJlcn1cbiAqIEBwcml2YXRlXG4gKi9cbk1lc2gucHJvdG90eXBlLl9yZW5kZXJDYW52YXMgPSBmdW5jdGlvbiAocmVuZGVyZXIpXG57XG4gICAgdmFyIGNvbnRleHQgPSByZW5kZXJlci5jb250ZXh0O1xuXG4gICAgdmFyIHRyYW5zZm9ybSA9IHRoaXMud29ybGRUcmFuc2Zvcm07XG5cbiAgICBpZiAocmVuZGVyZXIucm91bmRQaXhlbHMpXG4gICAge1xuICAgICAgICBjb250ZXh0LnNldFRyYW5zZm9ybSh0cmFuc2Zvcm0uYSwgdHJhbnNmb3JtLmIsIHRyYW5zZm9ybS5jLCB0cmFuc2Zvcm0uZCwgdHJhbnNmb3JtLnR4IHwgMCwgdHJhbnNmb3JtLnR5IHwgMCk7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIGNvbnRleHQuc2V0VHJhbnNmb3JtKHRyYW5zZm9ybS5hLCB0cmFuc2Zvcm0uYiwgdHJhbnNmb3JtLmMsIHRyYW5zZm9ybS5kLCB0cmFuc2Zvcm0udHgsIHRyYW5zZm9ybS50eSk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuZHJhd01vZGUgPT09IE1lc2guRFJBV19NT0RFUy5UUklBTkdMRV9NRVNIKVxuICAgIHtcbiAgICAgICAgdGhpcy5fcmVuZGVyQ2FudmFzVHJpYW5nbGVNZXNoKGNvbnRleHQpO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICB0aGlzLl9yZW5kZXJDYW52YXNUcmlhbmdsZXMoY29udGV4dCk7XG4gICAgfVxufTtcblxuLyoqXG4gKiBEcmF3cyB0aGUgb2JqZWN0IGluIFRyaWFuZ2xlIE1lc2ggbW9kZSB1c2luZyBjYW52YXNcbiAqXG4gKiBAcGFyYW0gY29udGV4dCB7Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEfSB0aGUgY3VycmVudCBkcmF3aW5nIGNvbnRleHRcbiAqIEBwcml2YXRlXG4gKi9cbk1lc2gucHJvdG90eXBlLl9yZW5kZXJDYW52YXNUcmlhbmdsZU1lc2ggPSBmdW5jdGlvbiAoY29udGV4dClcbntcbiAgICAvLyBkcmF3IHRyaWFuZ2xlcyEhXG4gICAgdmFyIHZlcnRpY2VzID0gdGhpcy52ZXJ0aWNlcztcbiAgICB2YXIgdXZzID0gdGhpcy51dnM7XG5cbiAgICB2YXIgbGVuZ3RoID0gdmVydGljZXMubGVuZ3RoIC8gMjtcbiAgICAvLyB0aGlzLmNvdW50Kys7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aCAtIDI7IGkrKylcbiAgICB7XG4gICAgICAgIC8vIGRyYXcgc29tZSB0cmlhbmdsZXMhXG4gICAgICAgIHZhciBpbmRleCA9IGkgKiAyO1xuICAgICAgICB0aGlzLl9yZW5kZXJDYW52YXNEcmF3VHJpYW5nbGUoY29udGV4dCwgdmVydGljZXMsIHV2cywgaW5kZXgsIChpbmRleCArIDIpLCAoaW5kZXggKyA0KSk7XG4gICAgfVxufTtcblxuLyoqXG4gKiBEcmF3cyB0aGUgb2JqZWN0IGluIHRyaWFuZ2xlIG1vZGUgdXNpbmcgY2FudmFzXG4gKlxuICogQHBhcmFtIGNvbnRleHQge0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRH0gdGhlIGN1cnJlbnQgZHJhd2luZyBjb250ZXh0XG4gKiBAcHJpdmF0ZVxuICovXG5NZXNoLnByb3RvdHlwZS5fcmVuZGVyQ2FudmFzVHJpYW5nbGVzID0gZnVuY3Rpb24gKGNvbnRleHQpXG57XG4gICAgLy8gZHJhdyB0cmlhbmdsZXMhIVxuICAgIHZhciB2ZXJ0aWNlcyA9IHRoaXMudmVydGljZXM7XG4gICAgdmFyIHV2cyA9IHRoaXMudXZzO1xuICAgIHZhciBpbmRpY2VzID0gdGhpcy5pbmRpY2VzO1xuXG4gICAgdmFyIGxlbmd0aCA9IGluZGljZXMubGVuZ3RoO1xuICAgIC8vIHRoaXMuY291bnQrKztcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyBpICs9IDMpXG4gICAge1xuICAgICAgICAvLyBkcmF3IHNvbWUgdHJpYW5nbGVzIVxuICAgICAgICB2YXIgaW5kZXgwID0gaW5kaWNlc1tpXSAqIDIsIGluZGV4MSA9IGluZGljZXNbaSArIDFdICogMiwgaW5kZXgyID0gaW5kaWNlc1tpICsgMl0gKiAyO1xuICAgICAgICB0aGlzLl9yZW5kZXJDYW52YXNEcmF3VHJpYW5nbGUoY29udGV4dCwgdmVydGljZXMsIHV2cywgaW5kZXgwLCBpbmRleDEsIGluZGV4Mik7XG4gICAgfVxufTtcblxuLyoqXG4gKiBEcmF3cyBvbmUgb2YgdGhlIHRyaWFuZ2xlcyB0aGF0IGZvcm0gdGhpcyBNZXNoXG4gKlxuICogQHBhcmFtIGNvbnRleHQge0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRH0gdGhlIGN1cnJlbnQgZHJhd2luZyBjb250ZXh0XG4gKiBAcGFyYW0gdmVydGljZXMge0Zsb2F0MzJBcnJheX0gYSByZWZlcmVuY2UgdG8gdGhlIHZlcnRpY2VzIG9mIHRoZSBNZXNoXG4gKiBAcGFyYW0gdXZzIHtGbG9hdDMyQXJyYXl9IGEgcmVmZXJlbmNlIHRvIHRoZSB1dnMgb2YgdGhlIE1lc2hcbiAqIEBwYXJhbSBpbmRleDAge251bWJlcn0gdGhlIGluZGV4IG9mIHRoZSBmaXJzdCB2ZXJ0ZXhcbiAqIEBwYXJhbSBpbmRleDEge251bWJlcn0gdGhlIGluZGV4IG9mIHRoZSBzZWNvbmQgdmVydGV4XG4gKiBAcGFyYW0gaW5kZXgyIHtudW1iZXJ9IHRoZSBpbmRleCBvZiB0aGUgdGhpcmQgdmVydGV4XG4gKiBAcHJpdmF0ZVxuICovXG5NZXNoLnByb3RvdHlwZS5fcmVuZGVyQ2FudmFzRHJhd1RyaWFuZ2xlID0gZnVuY3Rpb24gKGNvbnRleHQsIHZlcnRpY2VzLCB1dnMsIGluZGV4MCwgaW5kZXgxLCBpbmRleDIpXG57XG4gICAgdmFyIHRleHR1cmVTb3VyY2UgPSB0aGlzLl90ZXh0dXJlLmJhc2VUZXh0dXJlLnNvdXJjZTtcbiAgICB2YXIgdGV4dHVyZVdpZHRoID0gdGhpcy5fdGV4dHVyZS5iYXNlVGV4dHVyZS53aWR0aDtcbiAgICB2YXIgdGV4dHVyZUhlaWdodCA9IHRoaXMuX3RleHR1cmUuYmFzZVRleHR1cmUuaGVpZ2h0O1xuXG4gICAgdmFyIHgwID0gdmVydGljZXNbaW5kZXgwXSwgeDEgPSB2ZXJ0aWNlc1tpbmRleDFdLCB4MiA9IHZlcnRpY2VzW2luZGV4Ml07XG4gICAgdmFyIHkwID0gdmVydGljZXNbaW5kZXgwICsgMV0sIHkxID0gdmVydGljZXNbaW5kZXgxICsgMV0sIHkyID0gdmVydGljZXNbaW5kZXgyICsgMV07XG5cbiAgICB2YXIgdTAgPSB1dnNbaW5kZXgwXSAqIHRleHR1cmVXaWR0aCwgdTEgPSB1dnNbaW5kZXgxXSAqIHRleHR1cmVXaWR0aCwgdTIgPSB1dnNbaW5kZXgyXSAqIHRleHR1cmVXaWR0aDtcbiAgICB2YXIgdjAgPSB1dnNbaW5kZXgwICsgMV0gKiB0ZXh0dXJlSGVpZ2h0LCB2MSA9IHV2c1tpbmRleDEgKyAxXSAqIHRleHR1cmVIZWlnaHQsIHYyID0gdXZzW2luZGV4MiArIDFdICogdGV4dHVyZUhlaWdodDtcblxuICAgIGlmICh0aGlzLmNhbnZhc1BhZGRpbmcgPiAwKVxuICAgIHtcbiAgICAgICAgdmFyIHBhZGRpbmdYID0gdGhpcy5jYW52YXNQYWRkaW5nIC8gdGhpcy53b3JsZFRyYW5zZm9ybS5hO1xuICAgICAgICB2YXIgcGFkZGluZ1kgPSB0aGlzLmNhbnZhc1BhZGRpbmcgLyB0aGlzLndvcmxkVHJhbnNmb3JtLmQ7XG4gICAgICAgIHZhciBjZW50ZXJYID0gKHgwICsgeDEgKyB4MikgLyAzO1xuICAgICAgICB2YXIgY2VudGVyWSA9ICh5MCArIHkxICsgeTIpIC8gMztcblxuICAgICAgICB2YXIgbm9ybVggPSB4MCAtIGNlbnRlclg7XG4gICAgICAgIHZhciBub3JtWSA9IHkwIC0gY2VudGVyWTtcblxuICAgICAgICB2YXIgZGlzdCA9IE1hdGguc3FydChub3JtWCAqIG5vcm1YICsgbm9ybVkgKiBub3JtWSk7XG4gICAgICAgIHgwID0gY2VudGVyWCArIChub3JtWCAvIGRpc3QpICogKGRpc3QgKyBwYWRkaW5nWCk7XG4gICAgICAgIHkwID0gY2VudGVyWSArIChub3JtWSAvIGRpc3QpICogKGRpc3QgKyBwYWRkaW5nWSk7XG5cbiAgICAgICAgLy9cblxuICAgICAgICBub3JtWCA9IHgxIC0gY2VudGVyWDtcbiAgICAgICAgbm9ybVkgPSB5MSAtIGNlbnRlclk7XG5cbiAgICAgICAgZGlzdCA9IE1hdGguc3FydChub3JtWCAqIG5vcm1YICsgbm9ybVkgKiBub3JtWSk7XG4gICAgICAgIHgxID0gY2VudGVyWCArIChub3JtWCAvIGRpc3QpICogKGRpc3QgKyBwYWRkaW5nWCk7XG4gICAgICAgIHkxID0gY2VudGVyWSArIChub3JtWSAvIGRpc3QpICogKGRpc3QgKyBwYWRkaW5nWSk7XG5cbiAgICAgICAgbm9ybVggPSB4MiAtIGNlbnRlclg7XG4gICAgICAgIG5vcm1ZID0geTIgLSBjZW50ZXJZO1xuXG4gICAgICAgIGRpc3QgPSBNYXRoLnNxcnQobm9ybVggKiBub3JtWCArIG5vcm1ZICogbm9ybVkpO1xuICAgICAgICB4MiA9IGNlbnRlclggKyAobm9ybVggLyBkaXN0KSAqIChkaXN0ICsgcGFkZGluZ1gpO1xuICAgICAgICB5MiA9IGNlbnRlclkgKyAobm9ybVkgLyBkaXN0KSAqIChkaXN0ICsgcGFkZGluZ1kpO1xuICAgIH1cblxuICAgIGNvbnRleHQuc2F2ZSgpO1xuICAgIGNvbnRleHQuYmVnaW5QYXRoKCk7XG5cblxuICAgIGNvbnRleHQubW92ZVRvKHgwLCB5MCk7XG4gICAgY29udGV4dC5saW5lVG8oeDEsIHkxKTtcbiAgICBjb250ZXh0LmxpbmVUbyh4MiwgeTIpO1xuXG4gICAgY29udGV4dC5jbG9zZVBhdGgoKTtcblxuICAgIGNvbnRleHQuY2xpcCgpO1xuXG4gICAgLy8gQ29tcHV0ZSBtYXRyaXggdHJhbnNmb3JtXG4gICAgdmFyIGRlbHRhID0gICh1MCAqIHYxKSAgICAgICsgKHYwICogdTIpICAgICAgKyAodTEgKiB2MikgICAgICAtICh2MSAqIHUyKSAgICAgIC0gKHYwICogdTEpICAgICAgLSAodTAgKiB2Mik7XG4gICAgdmFyIGRlbHRhQSA9ICh4MCAqIHYxKSAgICAgICsgKHYwICogeDIpICAgICAgKyAoeDEgKiB2MikgICAgICAtICh2MSAqIHgyKSAgICAgIC0gKHYwICogeDEpICAgICAgLSAoeDAgKiB2Mik7XG4gICAgdmFyIGRlbHRhQiA9ICh1MCAqIHgxKSAgICAgICsgKHgwICogdTIpICAgICAgKyAodTEgKiB4MikgICAgICAtICh4MSAqIHUyKSAgICAgIC0gKHgwICogdTEpICAgICAgLSAodTAgKiB4Mik7XG4gICAgdmFyIGRlbHRhQyA9ICh1MCAqIHYxICogeDIpICsgKHYwICogeDEgKiB1MikgKyAoeDAgKiB1MSAqIHYyKSAtICh4MCAqIHYxICogdTIpIC0gKHYwICogdTEgKiB4MikgLSAodTAgKiB4MSAqIHYyKTtcbiAgICB2YXIgZGVsdGFEID0gKHkwICogdjEpICAgICAgKyAodjAgKiB5MikgICAgICArICh5MSAqIHYyKSAgICAgIC0gKHYxICogeTIpICAgICAgLSAodjAgKiB5MSkgICAgICAtICh5MCAqIHYyKTtcbiAgICB2YXIgZGVsdGFFID0gKHUwICogeTEpICAgICAgKyAoeTAgKiB1MikgICAgICArICh1MSAqIHkyKSAgICAgIC0gKHkxICogdTIpICAgICAgLSAoeTAgKiB1MSkgICAgICAtICh1MCAqIHkyKTtcbiAgICB2YXIgZGVsdGFGID0gKHUwICogdjEgKiB5MikgKyAodjAgKiB5MSAqIHUyKSArICh5MCAqIHUxICogdjIpIC0gKHkwICogdjEgKiB1MikgLSAodjAgKiB1MSAqIHkyKSAtICh1MCAqIHkxICogdjIpO1xuXG4gICAgY29udGV4dC50cmFuc2Zvcm0oZGVsdGFBIC8gZGVsdGEsIGRlbHRhRCAvIGRlbHRhLFxuICAgICAgICBkZWx0YUIgLyBkZWx0YSwgZGVsdGFFIC8gZGVsdGEsXG4gICAgICAgIGRlbHRhQyAvIGRlbHRhLCBkZWx0YUYgLyBkZWx0YSk7XG5cbiAgICBjb250ZXh0LmRyYXdJbWFnZSh0ZXh0dXJlU291cmNlLCAwLCAwKTtcbiAgICBjb250ZXh0LnJlc3RvcmUoKTtcbn07XG5cblxuXG4vKipcbiAqIFJlbmRlcnMgYSBmbGF0IE1lc2hcbiAqXG4gKiBAcGFyYW0gTWVzaCB7UElYSS5tZXNoLk1lc2h9IFRoZSBNZXNoIHRvIHJlbmRlclxuICogQHByaXZhdGVcbiAqL1xuTWVzaC5wcm90b3R5cGUucmVuZGVyTWVzaEZsYXQgPSBmdW5jdGlvbiAoTWVzaClcbntcbiAgICB2YXIgY29udGV4dCA9IHRoaXMuY29udGV4dDtcbiAgICB2YXIgdmVydGljZXMgPSBNZXNoLnZlcnRpY2VzO1xuXG4gICAgdmFyIGxlbmd0aCA9IHZlcnRpY2VzLmxlbmd0aC8yO1xuICAgIC8vIHRoaXMuY291bnQrKztcblxuICAgIGNvbnRleHQuYmVnaW5QYXRoKCk7XG4gICAgZm9yICh2YXIgaT0xOyBpIDwgbGVuZ3RoLTI7IGkrKylcbiAgICB7XG4gICAgICAgIC8vIGRyYXcgc29tZSB0cmlhbmdsZXMhXG4gICAgICAgIHZhciBpbmRleCA9IGkqMjtcblxuICAgICAgICB2YXIgeDAgPSB2ZXJ0aWNlc1tpbmRleF0sICAgeDEgPSB2ZXJ0aWNlc1tpbmRleCsyXSwgeDIgPSB2ZXJ0aWNlc1tpbmRleCs0XTtcbiAgICAgICAgdmFyIHkwID0gdmVydGljZXNbaW5kZXgrMV0sIHkxID0gdmVydGljZXNbaW5kZXgrM10sIHkyID0gdmVydGljZXNbaW5kZXgrNV07XG5cbiAgICAgICAgY29udGV4dC5tb3ZlVG8oeDAsIHkwKTtcbiAgICAgICAgY29udGV4dC5saW5lVG8oeDEsIHkxKTtcbiAgICAgICAgY29udGV4dC5saW5lVG8oeDIsIHkyKTtcbiAgICB9XG5cbiAgICBjb250ZXh0LmZpbGxTdHlsZSA9ICcjRkYwMDAwJztcbiAgICBjb250ZXh0LmZpbGwoKTtcbiAgICBjb250ZXh0LmNsb3NlUGF0aCgpO1xufTtcblxuLyoqXG4gKiBXaGVuIHRoZSB0ZXh0dXJlIGlzIHVwZGF0ZWQsIHRoaXMgZXZlbnQgd2lsbCBmaXJlIHRvIHVwZGF0ZSB0aGUgc2NhbGUgYW5kIGZyYW1lXG4gKlxuICogQHBhcmFtIGV2ZW50XG4gKiBAcHJpdmF0ZVxuICovXG5NZXNoLnByb3RvdHlwZS5fb25UZXh0dXJlVXBkYXRlID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLnVwZGF0ZUZyYW1lID0gdHJ1ZTtcbn07XG5cbi8qKlxuICogUmV0dXJucyB0aGUgYm91bmRzIG9mIHRoZSBtZXNoIGFzIGEgcmVjdGFuZ2xlLiBUaGUgYm91bmRzIGNhbGN1bGF0aW9uIHRha2VzIHRoZSB3b3JsZFRyYW5zZm9ybSBpbnRvIGFjY291bnQuXG4gKlxuICogQHBhcmFtIG1hdHJpeCB7UElYSS5NYXRyaXh9IHRoZSB0cmFuc2Zvcm1hdGlvbiBtYXRyaXggb2YgdGhlIHNwcml0ZVxuICogQHJldHVybiB7UElYSS5SZWN0YW5nbGV9IHRoZSBmcmFtaW5nIHJlY3RhbmdsZVxuICovXG5NZXNoLnByb3RvdHlwZS5nZXRCb3VuZHMgPSBmdW5jdGlvbiAobWF0cml4KVxue1xuICAgIGlmICghdGhpcy5fY3VycmVudEJvdW5kcykge1xuICAgICAgICB2YXIgd29ybGRUcmFuc2Zvcm0gPSBtYXRyaXggfHwgdGhpcy53b3JsZFRyYW5zZm9ybTtcblxuICAgICAgICB2YXIgYSA9IHdvcmxkVHJhbnNmb3JtLmE7XG4gICAgICAgIHZhciBiID0gd29ybGRUcmFuc2Zvcm0uYjtcbiAgICAgICAgdmFyIGMgPSB3b3JsZFRyYW5zZm9ybS5jO1xuICAgICAgICB2YXIgZCA9IHdvcmxkVHJhbnNmb3JtLmQ7XG4gICAgICAgIHZhciB0eCA9IHdvcmxkVHJhbnNmb3JtLnR4O1xuICAgICAgICB2YXIgdHkgPSB3b3JsZFRyYW5zZm9ybS50eTtcblxuICAgICAgICB2YXIgbWF4WCA9IC1JbmZpbml0eTtcbiAgICAgICAgdmFyIG1heFkgPSAtSW5maW5pdHk7XG5cbiAgICAgICAgdmFyIG1pblggPSBJbmZpbml0eTtcbiAgICAgICAgdmFyIG1pblkgPSBJbmZpbml0eTtcblxuICAgICAgICB2YXIgdmVydGljZXMgPSB0aGlzLnZlcnRpY2VzO1xuICAgICAgICBmb3IgKHZhciBpID0gMCwgbiA9IHZlcnRpY2VzLmxlbmd0aDsgaSA8IG47IGkgKz0gMikge1xuICAgICAgICAgICAgdmFyIHJhd1ggPSB2ZXJ0aWNlc1tpXSwgcmF3WSA9IHZlcnRpY2VzW2kgKyAxXTtcbiAgICAgICAgICAgIHZhciB4ID0gKGEgKiByYXdYKSArIChjICogcmF3WSkgKyB0eDtcbiAgICAgICAgICAgIHZhciB5ID0gKGQgKiByYXdZKSArIChiICogcmF3WCkgKyB0eTtcblxuICAgICAgICAgICAgbWluWCA9IHggPCBtaW5YID8geCA6IG1pblg7XG4gICAgICAgICAgICBtaW5ZID0geSA8IG1pblkgPyB5IDogbWluWTtcblxuICAgICAgICAgICAgbWF4WCA9IHggPiBtYXhYID8geCA6IG1heFg7XG4gICAgICAgICAgICBtYXhZID0geSA+IG1heFkgPyB5IDogbWF4WTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChtaW5YID09PSAtSW5maW5pdHkgfHwgbWF4WSA9PT0gSW5maW5pdHkpIHtcbiAgICAgICAgICAgIHJldHVybiBjb3JlLlJlY3RhbmdsZS5FTVBUWTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBib3VuZHMgPSB0aGlzLl9ib3VuZHM7XG5cbiAgICAgICAgYm91bmRzLnggPSBtaW5YO1xuICAgICAgICBib3VuZHMud2lkdGggPSBtYXhYIC0gbWluWDtcblxuICAgICAgICBib3VuZHMueSA9IG1pblk7XG4gICAgICAgIGJvdW5kcy5oZWlnaHQgPSBtYXhZIC0gbWluWTtcblxuICAgICAgICAvLyBzdG9yZSBhIHJlZmVyZW5jZSBzbyB0aGF0IGlmIHRoaXMgZnVuY3Rpb24gZ2V0cyBjYWxsZWQgYWdhaW4gaW4gdGhlIHJlbmRlciBjeWNsZSB3ZSBkbyBub3QgaGF2ZSB0byByZWNhbGN1bGF0ZVxuICAgICAgICB0aGlzLl9jdXJyZW50Qm91bmRzID0gYm91bmRzO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLl9jdXJyZW50Qm91bmRzO1xufTtcblxuLyoqXG4gKiBUZXN0cyBpZiBhIHBvaW50IGlzIGluc2lkZSB0aGlzIG1lc2guIFdvcmtzIG9ubHkgZm9yIFRSSUFOR0xFX01FU0hcbiAqXG4gKiBAcGFyYW0gcG9pbnQge1BJWEkuUG9pbnR9IHRoZSBwb2ludCB0byB0ZXN0XG4gKiBAcmV0dXJuIHtib29sZWFufSB0aGUgcmVzdWx0IG9mIHRoZSB0ZXN0XG4gKi9cbk1lc2gucHJvdG90eXBlLmNvbnRhaW5zUG9pbnQgPSBmdW5jdGlvbiggcG9pbnQgKSB7XG4gICAgaWYgKCF0aGlzLmdldEJvdW5kcygpLmNvbnRhaW5zKHBvaW50LngsIHBvaW50LnkpKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgdGhpcy53b3JsZFRyYW5zZm9ybS5hcHBseUludmVyc2UocG9pbnQsICB0ZW1wUG9pbnQpO1xuXG4gICAgdmFyIHZlcnRpY2VzID0gdGhpcy52ZXJ0aWNlcztcbiAgICB2YXIgcG9pbnRzID0gdGVtcFBvbHlnb24ucG9pbnRzO1xuICAgIHZhciBpLCBsZW47XG5cbiAgICBpZiAodGhpcy5kcmF3TW9kZSA9PT0gTWVzaC5EUkFXX01PREVTLlRSSUFOR0xFUykge1xuICAgICAgICB2YXIgaW5kaWNlcyA9IHRoaXMuaW5kaWNlcztcbiAgICAgICAgbGVuID0gdGhpcy5pbmRpY2VzLmxlbmd0aDtcbiAgICAgICAgLy9UT0RPOiBpbmxpbmUgdGhpcy5cbiAgICAgICAgZm9yIChpPTA7aTxsZW47aSs9Mykge1xuICAgICAgICAgICAgdmFyIGluZDAgPSBpbmRpY2VzW2ldKjIsIGluZDEgPSBpbmRpY2VzW2krMV0qMiwgaW5kMiA9IGluZGljZXNbaSsyXSoyO1xuICAgICAgICAgICAgcG9pbnRzWzBdID0gdmVydGljZXNbaW5kMF07XG4gICAgICAgICAgICBwb2ludHNbMV0gPSB2ZXJ0aWNlc1tpbmQwKzFdO1xuICAgICAgICAgICAgcG9pbnRzWzJdID0gdmVydGljZXNbaW5kMV07XG4gICAgICAgICAgICBwb2ludHNbM10gPSB2ZXJ0aWNlc1tpbmQxKzFdO1xuICAgICAgICAgICAgcG9pbnRzWzRdID0gdmVydGljZXNbaW5kMl07XG4gICAgICAgICAgICBwb2ludHNbNV0gPSB2ZXJ0aWNlc1tpbmQyKzFdO1xuICAgICAgICAgICAgaWYgKHRlbXBQb2x5Z29uLmNvbnRhaW5zKHRlbXBQb2ludC54LCB0ZW1wUG9pbnQueSkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAgIGxlbiA9IHZlcnRpY2VzLmxlbmd0aDtcbiAgICAgICAgZm9yIChpPTA7aTxsZW47aSs9Nikge1xuICAgICAgICAgICAgcG9pbnRzWzBdID0gdmVydGljZXNbaV07XG4gICAgICAgICAgICBwb2ludHNbMV0gPSB2ZXJ0aWNlc1tpKzFdO1xuICAgICAgICAgICAgcG9pbnRzWzJdID0gdmVydGljZXNbaSsyXTtcbiAgICAgICAgICAgIHBvaW50c1szXSA9IHZlcnRpY2VzW2krM107XG4gICAgICAgICAgICBwb2ludHNbNF0gPSB2ZXJ0aWNlc1tpKzRdO1xuICAgICAgICAgICAgcG9pbnRzWzVdID0gdmVydGljZXNbaSs1XTtcbiAgICAgICAgICAgIGlmICh0ZW1wUG9seWdvbi5jb250YWlucyh0ZW1wUG9pbnQueCwgdGVtcFBvaW50LnkpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xufTtcblxuLyoqXG4gKiBEaWZmZXJlbnQgZHJhd2luZyBidWZmZXIgbW9kZXMgc3VwcG9ydGVkXG4gKlxuICogQHN0YXRpY1xuICogQGNvbnN0YW50XG4gKiBAcHJvcGVydHkge29iamVjdH0gRFJBV19NT0RFU1xuICogQHByb3BlcnR5IHtudW1iZXJ9IERSQVdfTU9ERVMuVFJJQU5HTEVfTUVTSFxuICogQHByb3BlcnR5IHtudW1iZXJ9IERSQVdfTU9ERVMuVFJJQU5HTEVTXG4gKi9cbk1lc2guRFJBV19NT0RFUyA9IHtcbiAgICBUUklBTkdMRV9NRVNIOiAwLFxuICAgIFRSSUFOR0xFUzogMVxufTtcbiIsInZhciBNZXNoID0gcmVxdWlyZSgnLi9NZXNoJyk7XG5cbi8qKlxuICogVGhlIFBsYW5lIGFsbG93cyB5b3UgdG8gZHJhdyBhIHRleHR1cmUgYWNyb3NzIHNldmVyYWwgcG9pbnRzIGFuZCB0aGVtIG1hbmlwdWxhdGUgdGhlc2UgcG9pbnRzXG4gKlxuICpgYGBqc1xuICogZm9yICh2YXIgaSA9IDA7IGkgPCAyMDsgaSsrKSB7XG4gKiAgICAgcG9pbnRzLnB1c2gobmV3IFBJWEkuUG9pbnQoaSAqIDUwLCAwKSk7XG4gKiB9O1xuICogdmFyIFBsYW5lID0gbmV3IFBJWEkuUGxhbmUoUElYSS5UZXh0dXJlLmZyb21JbWFnZShcInNuYWtlLnBuZ1wiKSwgcG9pbnRzKTtcbiAqICBgYGBcbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkubWVzaC5NZXNoXG4gKiBAbWVtYmVyb2YgUElYSS5tZXNoXG4gKiBAcGFyYW0ge1BJWEkuVGV4dHVyZX0gdGV4dHVyZSAtIFRoZSB0ZXh0dXJlIHRvIHVzZSBvbiB0aGUgUGxhbmUuXG4gKiBAcGFyYW0ge2ludH0gc2VnbWVudHNYIC0gVGhlIG51bWJlciBveCB4IHNlZ21lbnRzXG4gKiBAcGFyYW0ge2ludH0gc2VnbWVudHNZIC0gVGhlIG51bWJlciBvZiB5IHNlZ21lbnRzXG4gKlxuICovXG5mdW5jdGlvbiBQbGFuZSh0ZXh0dXJlLCBzZWdtZW50c1gsIHNlZ21lbnRzWSlcbntcbiAgICBNZXNoLmNhbGwodGhpcywgdGV4dHVyZSk7XG5cbiAgICAvKipcbiAgICAgKiBUcmFja2VyIGZvciBpZiB0aGUgUGxhbmUgaXMgcmVhZHkgdG8gYmUgZHJhd24uIE5lZWRlZCBiZWNhdXNlIE1lc2ggY3RvciBjYW5cbiAgICAgKiBjYWxsIF9vblRleHR1cmVVcGRhdGVkIHdoaWNoIGNvdWxkIGNhbGwgcmVmcmVzaCB0b28gZWFybHkuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fcmVhZHkgPSB0cnVlO1xuXG4gICAgdGhpcy5zZWdtZW50c1ggPSAgc2VnbWVudHNYIHx8IDEwO1xuICAgIHRoaXMuc2VnbWVudHNZID0gc2VnbWVudHNZIHx8IDEwO1xuXG4gICAgdGhpcy5kcmF3TW9kZSA9IE1lc2guRFJBV19NT0RFUy5UUklBTkdMRVM7XG4gICAgdGhpcy5yZWZyZXNoKCk7XG5cbn1cblxuXG4vLyBjb25zdHJ1Y3RvclxuUGxhbmUucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZSggTWVzaC5wcm90b3R5cGUgKTtcblBsYW5lLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFBsYW5lO1xubW9kdWxlLmV4cG9ydHMgPSBQbGFuZTtcblxuLyoqXG4gKiBSZWZyZXNoZXNcbiAqXG4gKi9cblBsYW5lLnByb3RvdHlwZS5yZWZyZXNoID0gZnVuY3Rpb24oKVxue1xuICAgIHZhciB0b3RhbCA9IHRoaXMuc2VnbWVudHNYICogdGhpcy5zZWdtZW50c1k7XG4gICAgdmFyIHZlcnRzID0gW107XG4gICAgdmFyIGNvbG9ycyA9IFtdO1xuICAgIHZhciB1dnMgPSBbXTtcbiAgICB2YXIgaW5kaWNlcyA9IFtdO1xuICAgIHZhciB0ZXh0dXJlID0gdGhpcy50ZXh0dXJlO1xuXG4gIC8vICB0ZXh0dXJlLndpZHRoID0gODAwIHRleHR1cmUud2lkdGggfHwgODAwO1xuIC8vICAgdGV4dHVyZS5oZWlnaHQgPSA4MDAvL3RleHR1cmUuaGVpZ2h0IHx8IDgwMDtcblxuICAgIHZhciBzZWdtZW50c1hTdWIgPSB0aGlzLnNlZ21lbnRzWCAtIDE7XG4gICAgdmFyIHNlZ21lbnRzWVN1YiA9IHRoaXMuc2VnbWVudHNZIC0gMTtcbiAgICB2YXIgaSA9IDA7XG5cbiAgICB2YXIgc2l6ZVggPSB0ZXh0dXJlLndpZHRoIC8gc2VnbWVudHNYU3ViO1xuICAgIHZhciBzaXplWSA9IHRleHR1cmUuaGVpZ2h0IC8gc2VnbWVudHNZU3ViO1xuXG4gICAgZm9yIChpID0gMDsgaSA8IHRvdGFsOyBpKyspIHtcblxuICAgICAgICB2YXIgeCA9IChpICUgdGhpcy5zZWdtZW50c1gpO1xuICAgICAgICB2YXIgeSA9ICggKGkgLyB0aGlzLnNlZ21lbnRzWCApIHwgMCApO1xuXG5cbiAgICAgICAgdmVydHMucHVzaCgoeCAqIHNpemVYKSxcbiAgICAgICAgICAgICAgICAgICAoeSAqIHNpemVZKSk7XG5cbiAgICAgICAgLy8gdGhpcyB3b3JrcyBmb3IgcmVjdGFuZ3VsYXIgdGV4dHVyZXMuIFxuICAgICAgICB1dnMucHVzaCh0ZXh0dXJlLl91dnMueDAgKyAodGV4dHVyZS5fdXZzLngxIC0gdGV4dHVyZS5fdXZzLngwKSAqICh4IC8gKHRoaXMuc2VnbWVudHNYLTEpKSwgdGV4dHVyZS5fdXZzLnkwICsgKHRleHR1cmUuX3V2cy55My10ZXh0dXJlLl91dnMueTApICogKHkvICh0aGlzLnNlZ21lbnRzWS0xKSkpO1xuICAgICAgfVxuXG4gICAgLy8gIGNvbnNcblxuICAgIHZhciB0b3RhbFN1YiA9IHNlZ21lbnRzWFN1YiAqIHNlZ21lbnRzWVN1YjtcblxuICAgIGZvciAoaSA9IDA7IGkgPCB0b3RhbFN1YjsgaSsrKSB7XG5cbiAgICAgICAgdmFyIHhwb3MgPSBpICUgc2VnbWVudHNYU3ViO1xuICAgICAgICB2YXIgeXBvcyA9IChpIC8gc2VnbWVudHNYU3ViICkgfCAwO1xuXG5cbiAgICAgICAgdmFyICB2YWx1ZSA9ICh5cG9zICogdGhpcy5zZWdtZW50c1gpICsgeHBvcztcbiAgICAgICAgdmFyICB2YWx1ZTIgPSAoeXBvcyAqIHRoaXMuc2VnbWVudHNYKSArIHhwb3MgKyAxO1xuICAgICAgICB2YXIgIHZhbHVlMyA9ICgoeXBvcysxKSAqIHRoaXMuc2VnbWVudHNYKSArIHhwb3M7XG4gICAgICAgIHZhciAgdmFsdWU0ID0gKCh5cG9zKzEpICogdGhpcy5zZWdtZW50c1gpICsgeHBvcyArIDE7XG5cbiAgICAgICAgaW5kaWNlcy5wdXNoKHZhbHVlLCB2YWx1ZTIsIHZhbHVlMyk7XG4gICAgICAgIGluZGljZXMucHVzaCh2YWx1ZTIsIHZhbHVlNCwgdmFsdWUzKTtcbiAgICB9XG5cblxuICAgIC8vY29uc29sZS5sb2coaW5kaWNlcylcbiAgICB0aGlzLnZlcnRpY2VzID0gbmV3IEZsb2F0MzJBcnJheSh2ZXJ0cyk7XG4gICAgdGhpcy51dnMgPSBuZXcgRmxvYXQzMkFycmF5KHV2cyk7XG4gICAgdGhpcy5jb2xvcnMgPSBuZXcgRmxvYXQzMkFycmF5KGNvbG9ycyk7XG4gICAgdGhpcy5pbmRpY2VzID0gbmV3IFVpbnQxNkFycmF5KGluZGljZXMpO1xufTtcblxuLyoqXG4gKiBDbGVhciB0ZXh0dXJlIFVWcyB3aGVuIG5ldyB0ZXh0dXJlIGlzIHNldFxuICpcbiAqIEBwcml2YXRlXG4gKi9cblBsYW5lLnByb3RvdHlwZS5fb25UZXh0dXJlVXBkYXRlID0gZnVuY3Rpb24gKClcbntcbiAgICBNZXNoLnByb3RvdHlwZS5fb25UZXh0dXJlVXBkYXRlLmNhbGwodGhpcyk7XG5cbiAgICAvLyB3YWl0IGZvciB0aGUgUGxhbmUgY3RvciB0byBmaW5pc2ggYmVmb3JlIGNhbGxpbmcgcmVmcmVzaFxuICAgIGlmICh0aGlzLl9yZWFkeSkge1xuICAgICAgICB0aGlzLnJlZnJlc2goKTtcbiAgICB9XG59O1xuIiwidmFyIE1lc2ggPSByZXF1aXJlKCcuL01lc2gnKTtcbnZhciBjb3JlID0gcmVxdWlyZSgnLi4vY29yZScpO1xuXG4vKipcbiAqIFRoZSByb3BlIGFsbG93cyB5b3UgdG8gZHJhdyBhIHRleHR1cmUgYWNyb3NzIHNldmVyYWwgcG9pbnRzIGFuZCB0aGVtIG1hbmlwdWxhdGUgdGhlc2UgcG9pbnRzXG4gKlxuICpgYGBqc1xuICogZm9yICh2YXIgaSA9IDA7IGkgPCAyMDsgaSsrKSB7XG4gKiAgICAgcG9pbnRzLnB1c2gobmV3IFBJWEkuUG9pbnQoaSAqIDUwLCAwKSk7XG4gKiB9O1xuICogdmFyIHJvcGUgPSBuZXcgUElYSS5Sb3BlKFBJWEkuVGV4dHVyZS5mcm9tSW1hZ2UoXCJzbmFrZS5wbmdcIiksIHBvaW50cyk7XG4gKiAgYGBgXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLm1lc2guTWVzaFxuICogQG1lbWJlcm9mIFBJWEkubWVzaFxuICogQHBhcmFtIHtQSVhJLlRleHR1cmV9IHRleHR1cmUgLSBUaGUgdGV4dHVyZSB0byB1c2Ugb24gdGhlIHJvcGUuXG4gKiBAcGFyYW0ge1BJWEkuUG9pbnRbXX0gcG9pbnRzIC0gQW4gYXJyYXkgb2Yge0BsaW5rIFBJWEkuUG9pbnR9IG9iamVjdHMgdG8gY29uc3RydWN0IHRoaXMgcm9wZS5cbiAqXG4gKi9cbmZ1bmN0aW9uIFJvcGUodGV4dHVyZSwgcG9pbnRzKVxue1xuICAgIE1lc2guY2FsbCh0aGlzLCB0ZXh0dXJlKTtcblxuICAgIC8qXG4gICAgICogQG1lbWJlciB7UElYSS5Qb2ludFtdfSBBbiBhcnJheSBvZiBwb2ludHMgdGhhdCBkZXRlcm1pbmUgdGhlIHJvcGVcbiAgICAgKi9cbiAgICB0aGlzLnBvaW50cyA9IHBvaW50cztcblxuICAgIC8qXG4gICAgICogQG1lbWJlciB7RmxvYXQzMkFycmF5fSBBbiBhcnJheSBvZiB2ZXJ0aWNlcyB1c2VkIHRvIGNvbnN0cnVjdCB0aGlzIHJvcGUuXG4gICAgICovXG4gICAgdGhpcy52ZXJ0aWNlcyA9IG5ldyBGbG9hdDMyQXJyYXkocG9pbnRzLmxlbmd0aCAqIDQpO1xuXG4gICAgLypcbiAgICAgKiBAbWVtYmVyIHtGbG9hdDMyQXJyYXl9IFRoZSBXZWJHTCBVdnMgb2YgdGhlIHJvcGUuXG4gICAgICovXG4gICAgdGhpcy51dnMgPSBuZXcgRmxvYXQzMkFycmF5KHBvaW50cy5sZW5ndGggKiA0KTtcblxuICAgIC8qXG4gICAgICogQG1lbWJlciB7RmxvYXQzMkFycmF5fSBBbiBhcnJheSBjb250YWluaW5nIHRoZSBjb2xvciBjb21wb25lbnRzXG4gICAgICovXG4gICAgdGhpcy5jb2xvcnMgPSBuZXcgRmxvYXQzMkFycmF5KHBvaW50cy5sZW5ndGggKiAyKTtcblxuICAgIC8qXG4gICAgICogQG1lbWJlciB7VWludDE2QXJyYXl9IEFuIGFycmF5IGNvbnRhaW5pbmcgdGhlIGluZGljZXMgb2YgdGhlIHZlcnRpY2VzXG4gICAgICovXG4gICAgdGhpcy5pbmRpY2VzID0gbmV3IFVpbnQxNkFycmF5KHBvaW50cy5sZW5ndGggKiAyKTtcblxuICAgIC8qKlxuICAgICAqIFRyYWNrZXIgZm9yIGlmIHRoZSByb3BlIGlzIHJlYWR5IHRvIGJlIGRyYXduLiBOZWVkZWQgYmVjYXVzZSBNZXNoIGN0b3IgY2FuXG4gICAgICogY2FsbCBfb25UZXh0dXJlVXBkYXRlZCB3aGljaCBjb3VsZCBjYWxsIHJlZnJlc2ggdG9vIGVhcmx5LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgICB0aGlzLl9yZWFkeSA9IHRydWU7XG5cbiAgICAgdGhpcy5yZWZyZXNoKCk7XG59XG5cblxuLy8gY29uc3RydWN0b3JcblJvcGUucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShNZXNoLnByb3RvdHlwZSk7XG5Sb3BlLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFJvcGU7XG5tb2R1bGUuZXhwb3J0cyA9IFJvcGU7XG5cbi8qKlxuICogUmVmcmVzaGVzXG4gKlxuICovXG5Sb3BlLnByb3RvdHlwZS5yZWZyZXNoID0gZnVuY3Rpb24gKClcbntcbiAgICB2YXIgcG9pbnRzID0gdGhpcy5wb2ludHM7XG5cbiAgICAvLyBpZiB0b28gbGl0dGxlIHBvaW50cywgb3IgdGV4dHVyZSBoYXNuJ3QgZ290IFVWcyBzZXQgeWV0IGp1c3QgbW92ZSBvbi5cbiAgICBpZiAocG9pbnRzLmxlbmd0aCA8IDEgfHwgIXRoaXMuX3RleHR1cmUuX3V2cylcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB2YXIgdXZzID0gdGhpcy51dnM7XG5cbiAgICB2YXIgaW5kaWNlcyA9IHRoaXMuaW5kaWNlcztcbiAgICB2YXIgY29sb3JzID0gdGhpcy5jb2xvcnM7XG5cbiAgICB2YXIgdGV4dHVyZVV2cyA9IHRoaXMuX3RleHR1cmUuX3V2cztcbiAgICB2YXIgb2Zmc2V0ID0gbmV3IGNvcmUuUG9pbnQodGV4dHVyZVV2cy54MCwgdGV4dHVyZVV2cy55MCk7XG4gICAgdmFyIGZhY3RvciA9IG5ldyBjb3JlLlBvaW50KHRleHR1cmVVdnMueDIgLSB0ZXh0dXJlVXZzLngwLCB0ZXh0dXJlVXZzLnkyIC0gdGV4dHVyZVV2cy55MCk7XG5cbiAgICB1dnNbMF0gPSAwICsgb2Zmc2V0Lng7XG4gICAgdXZzWzFdID0gMCArIG9mZnNldC55O1xuICAgIHV2c1syXSA9IDAgKyBvZmZzZXQueDtcbiAgICB1dnNbM10gPSAxICogZmFjdG9yLnkgKyBvZmZzZXQueTtcblxuICAgIGNvbG9yc1swXSA9IDE7XG4gICAgY29sb3JzWzFdID0gMTtcblxuICAgIGluZGljZXNbMF0gPSAwO1xuICAgIGluZGljZXNbMV0gPSAxO1xuXG4gICAgdmFyIHRvdGFsID0gcG9pbnRzLmxlbmd0aCxcbiAgICAgICAgcG9pbnQsIGluZGV4LCBhbW91bnQ7XG5cbiAgICBmb3IgKHZhciBpID0gMTsgaSA8IHRvdGFsOyBpKyspXG4gICAge1xuICAgICAgICBwb2ludCA9IHBvaW50c1tpXTtcbiAgICAgICAgaW5kZXggPSBpICogNDtcbiAgICAgICAgLy8gdGltZSB0byBkbyBzb21lIHNtYXJ0IGRyYXdpbmchXG4gICAgICAgIGFtb3VudCA9IGkgLyAodG90YWwtMSk7XG5cbiAgICAgICAgdXZzW2luZGV4XSA9IGFtb3VudCAqIGZhY3Rvci54ICsgb2Zmc2V0Lng7XG4gICAgICAgIHV2c1tpbmRleCsxXSA9IDAgKyBvZmZzZXQueTtcblxuICAgICAgICB1dnNbaW5kZXgrMl0gPSBhbW91bnQgKiBmYWN0b3IueCArIG9mZnNldC54O1xuICAgICAgICB1dnNbaW5kZXgrM10gPSAxICogZmFjdG9yLnkgKyBvZmZzZXQueTtcblxuICAgICAgICBpbmRleCA9IGkgKiAyO1xuICAgICAgICBjb2xvcnNbaW5kZXhdID0gMTtcbiAgICAgICAgY29sb3JzW2luZGV4KzFdID0gMTtcblxuICAgICAgICBpbmRleCA9IGkgKiAyO1xuICAgICAgICBpbmRpY2VzW2luZGV4XSA9IGluZGV4O1xuICAgICAgICBpbmRpY2VzW2luZGV4ICsgMV0gPSBpbmRleCArIDE7XG4gICAgfVxuXG4gICAgdGhpcy5kaXJ0eSA9IHRydWU7XG59O1xuXG4vKipcbiAqIENsZWFyIHRleHR1cmUgVVZzIHdoZW4gbmV3IHRleHR1cmUgaXMgc2V0XG4gKlxuICogQHByaXZhdGVcbiAqL1xuUm9wZS5wcm90b3R5cGUuX29uVGV4dHVyZVVwZGF0ZSA9IGZ1bmN0aW9uICgpXG57XG4gICAgTWVzaC5wcm90b3R5cGUuX29uVGV4dHVyZVVwZGF0ZS5jYWxsKHRoaXMpO1xuXG4gICAgLy8gd2FpdCBmb3IgdGhlIFJvcGUgY3RvciB0byBmaW5pc2ggYmVmb3JlIGNhbGxpbmcgcmVmcmVzaFxuICAgIGlmICh0aGlzLl9yZWFkeSkge1xuICAgICAgICB0aGlzLnJlZnJlc2goKTtcbiAgICB9XG59O1xuXG4vKipcbiAqIFVwZGF0ZXMgdGhlIG9iamVjdCB0cmFuc2Zvcm0gZm9yIHJlbmRlcmluZ1xuICpcbiAqIEBwcml2YXRlXG4gKi9cblJvcGUucHJvdG90eXBlLnVwZGF0ZVRyYW5zZm9ybSA9IGZ1bmN0aW9uICgpXG57XG4gICAgdmFyIHBvaW50cyA9IHRoaXMucG9pbnRzO1xuXG4gICAgaWYgKHBvaW50cy5sZW5ndGggPCAxKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHZhciBsYXN0UG9pbnQgPSBwb2ludHNbMF07XG4gICAgdmFyIG5leHRQb2ludDtcbiAgICB2YXIgcGVycFggPSAwO1xuICAgIHZhciBwZXJwWSA9IDA7XG5cbiAgICAvLyB0aGlzLmNvdW50IC09IDAuMjtcblxuICAgIHZhciB2ZXJ0aWNlcyA9IHRoaXMudmVydGljZXM7XG4gICAgdmFyIHRvdGFsID0gcG9pbnRzLmxlbmd0aCxcbiAgICAgICAgcG9pbnQsIGluZGV4LCByYXRpbywgcGVycExlbmd0aCwgbnVtO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0b3RhbDsgaSsrKVxuICAgIHtcbiAgICAgICAgcG9pbnQgPSBwb2ludHNbaV07XG4gICAgICAgIGluZGV4ID0gaSAqIDQ7XG5cbiAgICAgICAgaWYgKGkgPCBwb2ludHMubGVuZ3RoLTEpXG4gICAgICAgIHtcbiAgICAgICAgICAgIG5leHRQb2ludCA9IHBvaW50c1tpKzFdO1xuICAgICAgICB9XG4gICAgICAgIGVsc2VcbiAgICAgICAge1xuICAgICAgICAgICAgbmV4dFBvaW50ID0gcG9pbnQ7XG4gICAgICAgIH1cblxuICAgICAgICBwZXJwWSA9IC0obmV4dFBvaW50LnggLSBsYXN0UG9pbnQueCk7XG4gICAgICAgIHBlcnBYID0gbmV4dFBvaW50LnkgLSBsYXN0UG9pbnQueTtcblxuICAgICAgICByYXRpbyA9ICgxIC0gKGkgLyAodG90YWwtMSkpKSAqIDEwO1xuXG4gICAgICAgIGlmIChyYXRpbyA+IDEpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJhdGlvID0gMTtcbiAgICAgICAgfVxuXG4gICAgICAgIHBlcnBMZW5ndGggPSBNYXRoLnNxcnQocGVycFggKiBwZXJwWCArIHBlcnBZICogcGVycFkpO1xuICAgICAgICBudW0gPSB0aGlzLl90ZXh0dXJlLmhlaWdodCAvIDI7IC8vKDIwICsgTWF0aC5hYnMoTWF0aC5zaW4oKGkgKyB0aGlzLmNvdW50KSAqIDAuMykgKiA1MCkgKSogcmF0aW87XG4gICAgICAgIHBlcnBYIC89IHBlcnBMZW5ndGg7XG4gICAgICAgIHBlcnBZIC89IHBlcnBMZW5ndGg7XG5cbiAgICAgICAgcGVycFggKj0gbnVtO1xuICAgICAgICBwZXJwWSAqPSBudW07XG5cbiAgICAgICAgdmVydGljZXNbaW5kZXhdID0gcG9pbnQueCArIHBlcnBYO1xuICAgICAgICB2ZXJ0aWNlc1tpbmRleCsxXSA9IHBvaW50LnkgKyBwZXJwWTtcbiAgICAgICAgdmVydGljZXNbaW5kZXgrMl0gPSBwb2ludC54IC0gcGVycFg7XG4gICAgICAgIHZlcnRpY2VzW2luZGV4KzNdID0gcG9pbnQueSAtIHBlcnBZO1xuXG4gICAgICAgIGxhc3RQb2ludCA9IHBvaW50O1xuICAgIH1cblxuICAgIHRoaXMuY29udGFpbmVyVXBkYXRlVHJhbnNmb3JtKCk7XG59O1xuIiwiLyoqXG4gKiBAZmlsZSAgICAgICAgTWFpbiBleHBvcnQgb2YgdGhlIFBJWEkgZXh0cmFzIGxpYnJhcnlcbiAqIEBhdXRob3IgICAgICBNYXQgR3JvdmVzIDxtYXRAZ29vZGJveWRpZ2l0YWwuY29tPlxuICogQGNvcHlyaWdodCAgIDIwMTMtMjAxNSBHb29kQm95RGlnaXRhbFxuICogQGxpY2Vuc2UgICAgIHtAbGluayBodHRwczovL2dpdGh1Yi5jb20vcGl4aWpzL3BpeGkuanMvYmxvYi9tYXN0ZXIvTElDRU5TRXxNSVQgTGljZW5zZX1cbiAqL1xuXG4vKipcbiAqIEBuYW1lc3BhY2UgUElYSS5tZXNoXG4gKi9cbm1vZHVsZS5leHBvcnRzID0ge1xuICAgIE1lc2g6ICAgICAgICAgICByZXF1aXJlKCcuL01lc2gnKSxcbiAgICBQbGFuZTogICAgICAgICAgIHJlcXVpcmUoJy4vUGxhbmUnKSxcbiAgICBSb3BlOiAgICAgICAgICAgcmVxdWlyZSgnLi9Sb3BlJyksXG4gICAgTWVzaFJlbmRlcmVyOiAgIHJlcXVpcmUoJy4vd2ViZ2wvTWVzaFJlbmRlcmVyJyksXG4gICAgTWVzaFNoYWRlcjogICAgIHJlcXVpcmUoJy4vd2ViZ2wvTWVzaFNoYWRlcicpXG59O1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi8uLi9jb3JlJyksXG4gICAgTWVzaCA9IHJlcXVpcmUoJy4uL01lc2gnKTtcblxuLyoqXG4gKiBAYXV0aG9yIE1hdCBHcm92ZXNcbiAqXG4gKiBCaWcgdGhhbmtzIHRvIHRoZSB2ZXJ5IGNsZXZlciBNYXR0IERlc0xhdXJpZXJzIDxtYXR0ZGVzbD4gaHR0cHM6Ly9naXRodWIuY29tL21hdHRkZXNsL1xuICogZm9yIGNyZWF0aW5nIHRoZSBvcmlnaW5hbCBwaXhpIHZlcnNpb24hXG4gKiBBbHNvIGEgdGhhbmtzIHRvIGh0dHBzOi8vZ2l0aHViLmNvbS9iY2hldmFsaWVyIGZvciB0d2Vha2luZyB0aGUgdGludCBhbmQgYWxwaGEgc28gdGhhdCB0aGV5IG5vdyBzaGFyZSA0IGJ5dGVzIG9uIHRoZSB2ZXJ0ZXggYnVmZmVyXG4gKlxuICogSGVhdmlseSBpbnNwaXJlZCBieSBMaWJHRFgncyBNZXNoUmVuZGVyZXI6XG4gKiBodHRwczovL2dpdGh1Yi5jb20vbGliZ2R4L2xpYmdkeC9ibG9iL21hc3Rlci9nZHgvc3JjL2NvbS9iYWRsb2dpYy9nZHgvZ3JhcGhpY3MvZzJkL01lc2hSZW5kZXJlci5qYXZhXG4gKi9cblxuLyoqXG4gKlxuICogQGNsYXNzXG4gKiBAcHJpdmF0ZVxuICogQG1lbWJlcm9mIFBJWEkubWVzaFxuICogQGV4dGVuZHMgUElYSS5PYmplY3RSZW5kZXJlclxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLldlYkdMUmVuZGVyZXJ9IFRoZSByZW5kZXJlciB0aGlzIHNwcml0ZSBiYXRjaCB3b3JrcyBmb3IuXG4gKi9cbmZ1bmN0aW9uIE1lc2hSZW5kZXJlcihyZW5kZXJlcilcbntcbiAgICBjb3JlLk9iamVjdFJlbmRlcmVyLmNhbGwodGhpcywgcmVuZGVyZXIpO1xuXG5cbiAgICAvKipcbiAgICAgKiBIb2xkcyB0aGUgaW5kaWNlc1xuICAgICAqXG4gICAgICogQG1lbWJlciB7VWludDE2QXJyYXl9XG4gICAgICovXG4gICAgXG4gICAgdGhpcy5pbmRpY2VzID0gbmV3IFVpbnQxNkFycmF5KDE1MDAwKTtcblxuICAgIC8vVE9ETyB0aGlzIGNvdWxkIGJlIGEgc2luZ2xlIGJ1ZmZlciBzaGFyZWQgYW1vbmdzdCBhbGwgcmVuZGVyZXJzIGFzIHdlIHJldXNlIHRoaXMgc2V0IHVwIGluIG1vc3QgcmVuZGVyZXJzXG4gICAgZm9yICh2YXIgaT0wLCBqPTA7IGkgPCAxNTAwMDsgaSArPSA2LCBqICs9IDQpXG4gICAge1xuICAgICAgICB0aGlzLmluZGljZXNbaSArIDBdID0gaiArIDA7XG4gICAgICAgIHRoaXMuaW5kaWNlc1tpICsgMV0gPSBqICsgMTtcbiAgICAgICAgdGhpcy5pbmRpY2VzW2kgKyAyXSA9IGogKyAyO1xuICAgICAgICB0aGlzLmluZGljZXNbaSArIDNdID0gaiArIDA7XG4gICAgICAgIHRoaXMuaW5kaWNlc1tpICsgNF0gPSBqICsgMjtcbiAgICAgICAgdGhpcy5pbmRpY2VzW2kgKyA1XSA9IGogKyAzO1xuICAgIH1cblxuICAgIHRoaXMuY3VycmVudFNoYWRlciA9IG51bGw7XG59XG5cbk1lc2hSZW5kZXJlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuT2JqZWN0UmVuZGVyZXIucHJvdG90eXBlKTtcbk1lc2hSZW5kZXJlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBNZXNoUmVuZGVyZXI7XG5tb2R1bGUuZXhwb3J0cyA9IE1lc2hSZW5kZXJlcjtcblxuY29yZS5XZWJHTFJlbmRlcmVyLnJlZ2lzdGVyUGx1Z2luKCdtZXNoJywgTWVzaFJlbmRlcmVyKTtcblxuLyoqXG4gKiBTZXRzIHVwIHRoZSByZW5kZXJlciBjb250ZXh0IGFuZCBuZWNlc3NhcnkgYnVmZmVycy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIGdsIHtXZWJHTFJlbmRlcmluZ0NvbnRleHR9IHRoZSBjdXJyZW50IFdlYkdMIGRyYXdpbmcgY29udGV4dFxuICovXG5NZXNoUmVuZGVyZXIucHJvdG90eXBlLm9uQ29udGV4dENoYW5nZSA9IGZ1bmN0aW9uICgpXG57XG5cbn07XG5cbi8qKlxuICogUmVuZGVycyB0aGUgc3ByaXRlIG9iamVjdC5cbiAqXG4gKiBAcGFyYW0gbWVzaCB7UElYSS5tZXNoLk1lc2h9IHRoZSBtZXNoIHRvIHJlbmRlclxuICovXG5NZXNoUmVuZGVyZXIucHJvdG90eXBlLnJlbmRlciA9IGZ1bmN0aW9uIChtZXNoKVxue1xuICAgIGlmKCFtZXNoLl92ZXJ0ZXhCdWZmZXIpXG4gICAge1xuICAgICAgICB0aGlzLl9pbml0V2ViR0wobWVzaCk7XG4gICAgfVxuXG4gICAgdmFyIHJlbmRlcmVyID0gdGhpcy5yZW5kZXJlcixcbiAgICAgICAgZ2wgPSByZW5kZXJlci5nbCxcbiAgICAgICAgdGV4dHVyZSA9IG1lc2guX3RleHR1cmUuYmFzZVRleHR1cmUsXG4gICAgICAgIHNoYWRlciA9IG1lc2guc2hhZGVyOy8vIHx8IHJlbmRlcmVyLnNoYWRlck1hbmFnZXIucGx1Z2lucy5tZXNoU2hhZGVyO1xuXG4gICAgdmFyIGRyYXdNb2RlID0gbWVzaC5kcmF3TW9kZSA9PT0gTWVzaC5EUkFXX01PREVTLlRSSUFOR0xFX01FU0ggPyBnbC5UUklBTkdMRV9TVFJJUCA6IGdsLlRSSUFOR0xFUztcblxuICAgIHJlbmRlcmVyLmJsZW5kTW9kZU1hbmFnZXIuc2V0QmxlbmRNb2RlKG1lc2guYmxlbmRNb2RlKTtcblxuICAgIC8vVE9ETyBjYWNoZSBjdXN0b20gc3RhdGUuLlxuICAgIGlmICghc2hhZGVyKVxuICAgIHtcbiAgICAgICAgc2hhZGVyID0gcmVuZGVyZXIuc2hhZGVyTWFuYWdlci5wbHVnaW5zLm1lc2hTaGFkZXI7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHNoYWRlciA9IHNoYWRlci5zaGFkZXJzW2dsLmlkXSB8fCBzaGFkZXIuZ2V0U2hhZGVyKHJlbmRlcmVyKTsvLyA6IHNoYWRlcjtcbiAgICB9XG5cbiAgICB0aGlzLnJlbmRlcmVyLnNoYWRlck1hbmFnZXIuc2V0U2hhZGVyKHNoYWRlcik7XG5cbiAgICBzaGFkZXIudW5pZm9ybXMudHJhbnNsYXRpb25NYXRyaXgudmFsdWUgPSBtZXNoLndvcmxkVHJhbnNmb3JtLnRvQXJyYXkodHJ1ZSk7XG4gICAgc2hhZGVyLnVuaWZvcm1zLnByb2plY3Rpb25NYXRyaXgudmFsdWUgPSByZW5kZXJlci5jdXJyZW50UmVuZGVyVGFyZ2V0LnByb2plY3Rpb25NYXRyaXgudG9BcnJheSh0cnVlKTtcbiAgICBzaGFkZXIudW5pZm9ybXMuYWxwaGEudmFsdWUgPSBtZXNoLndvcmxkQWxwaGE7XG5cbiAgICBzaGFkZXIuc3luY1VuaWZvcm1zKCk7XG5cbiAgICBpZiAoIW1lc2guZGlydHkpXG4gICAge1xuXG4gICAgICAgIGdsLmJpbmRCdWZmZXIoZ2wuQVJSQVlfQlVGRkVSLCBtZXNoLl92ZXJ0ZXhCdWZmZXIpO1xuICAgICAgICBnbC5idWZmZXJTdWJEYXRhKGdsLkFSUkFZX0JVRkZFUiwgMCwgbWVzaC52ZXJ0aWNlcyk7XG4gICAgICAgIGdsLnZlcnRleEF0dHJpYlBvaW50ZXIoc2hhZGVyLmF0dHJpYnV0ZXMuYVZlcnRleFBvc2l0aW9uLCAyLCBnbC5GTE9BVCwgZmFsc2UsIDAsIDApO1xuXG4gICAgICAgIC8vIHVwZGF0ZSB0aGUgdXZzXG4gICAgICAgIGdsLmJpbmRCdWZmZXIoZ2wuQVJSQVlfQlVGRkVSLCBtZXNoLl91dkJ1ZmZlcik7XG4gICAgICAgIGdsLnZlcnRleEF0dHJpYlBvaW50ZXIoc2hhZGVyLmF0dHJpYnV0ZXMuYVRleHR1cmVDb29yZCwgMiwgZ2wuRkxPQVQsIGZhbHNlLCAwLCAwKTtcblxuXG4gICAgICAgIGdsLmFjdGl2ZVRleHR1cmUoZ2wuVEVYVFVSRTApO1xuXG4gICAgICAgaWYgKCF0ZXh0dXJlLl9nbFRleHR1cmVzW2dsLmlkXSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5yZW5kZXJlci51cGRhdGVUZXh0dXJlKHRleHR1cmUpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2VcbiAgICAgICAge1xuICAgICAgICAgICAgLy8gYmluZCB0aGUgY3VycmVudCB0ZXh0dXJlXG4gICAgICAgICAgICBnbC5iaW5kVGV4dHVyZShnbC5URVhUVVJFXzJELCB0ZXh0dXJlLl9nbFRleHR1cmVzW2dsLmlkXSk7XG4gICAgICAgIH1cblxuICAgICAgICBnbC5iaW5kQnVmZmVyKGdsLkVMRU1FTlRfQVJSQVlfQlVGRkVSLCBtZXNoLl9pbmRleEJ1ZmZlcik7XG4gICAgICAgIGdsLmJ1ZmZlclN1YkRhdGEoZ2wuRUxFTUVOVF9BUlJBWV9CVUZGRVIsIDAsIG1lc2guaW5kaWNlcyk7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG5cbiAgICAgICAgbWVzaC5kaXJ0eSA9IGZhbHNlO1xuICAgICAgICBnbC5iaW5kQnVmZmVyKGdsLkFSUkFZX0JVRkZFUiwgbWVzaC5fdmVydGV4QnVmZmVyKTtcbiAgICAgICAgZ2wuYnVmZmVyRGF0YShnbC5BUlJBWV9CVUZGRVIsIG1lc2gudmVydGljZXMsIGdsLlNUQVRJQ19EUkFXKTtcbiAgICAgICAgZ2wudmVydGV4QXR0cmliUG9pbnRlcihzaGFkZXIuYXR0cmlidXRlcy5hVmVydGV4UG9zaXRpb24sIDIsIGdsLkZMT0FULCBmYWxzZSwgMCwgMCk7XG5cbiAgICAgICAgLy8gdXBkYXRlIHRoZSB1dnNcbiAgICAgICAgZ2wuYmluZEJ1ZmZlcihnbC5BUlJBWV9CVUZGRVIsIG1lc2guX3V2QnVmZmVyKTtcbiAgICAgICAgZ2wuYnVmZmVyRGF0YShnbC5BUlJBWV9CVUZGRVIsIG1lc2gudXZzLCBnbC5TVEFUSUNfRFJBVyk7XG4gICAgICAgIGdsLnZlcnRleEF0dHJpYlBvaW50ZXIoc2hhZGVyLmF0dHJpYnV0ZXMuYVRleHR1cmVDb29yZCwgMiwgZ2wuRkxPQVQsIGZhbHNlLCAwLCAwKTtcblxuICAgICAgICAgZ2wuYWN0aXZlVGV4dHVyZShnbC5URVhUVVJFMCk7XG5cbiAgICAgICAgaWYgKCF0ZXh0dXJlLl9nbFRleHR1cmVzW2dsLmlkXSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5yZW5kZXJlci51cGRhdGVUZXh0dXJlKHRleHR1cmUpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2VcbiAgICAgICAge1xuICAgICAgICAgICAgLy8gYmluZCB0aGUgY3VycmVudCB0ZXh0dXJlXG4gICAgICAgICAgICBnbC5iaW5kVGV4dHVyZShnbC5URVhUVVJFXzJELCB0ZXh0dXJlLl9nbFRleHR1cmVzW2dsLmlkXSk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBkb250IG5lZWQgdG8gdXBsb2FkIVxuICAgICAgICBnbC5iaW5kQnVmZmVyKGdsLkVMRU1FTlRfQVJSQVlfQlVGRkVSLCBtZXNoLl9pbmRleEJ1ZmZlcik7XG4gICAgICAgIGdsLmJ1ZmZlckRhdGEoZ2wuRUxFTUVOVF9BUlJBWV9CVUZGRVIsIG1lc2guaW5kaWNlcywgZ2wuU1RBVElDX0RSQVcpO1xuXG4gICAgfVxuXG4gICAgZ2wuZHJhd0VsZW1lbnRzKGRyYXdNb2RlLCBtZXNoLmluZGljZXMubGVuZ3RoLCBnbC5VTlNJR05FRF9TSE9SVCwgMCk7XG5cbn07XG5cbi8qKlxuICogUHJlcGFyZXMgYWxsIHRoZSBidWZmZXJzIHRvIHJlbmRlciB0aGlzIG1lc2hcbiAqIEBwYXJhbSBtZXNoIHtQSVhJLm1lc2guTWVzaH0gdGhlIG1lc2ggdG8gcmVuZGVyXG4gKi9cbk1lc2hSZW5kZXJlci5wcm90b3R5cGUuX2luaXRXZWJHTCA9IGZ1bmN0aW9uIChtZXNoKVxue1xuICAgIC8vIGJ1aWxkIHRoZSBzdHJpcCFcbiAgICB2YXIgZ2wgPSB0aGlzLnJlbmRlcmVyLmdsO1xuXG4gICAgbWVzaC5fdmVydGV4QnVmZmVyID0gZ2wuY3JlYXRlQnVmZmVyKCk7XG4gICAgbWVzaC5faW5kZXhCdWZmZXIgPSBnbC5jcmVhdGVCdWZmZXIoKTtcbiAgICBtZXNoLl91dkJ1ZmZlciA9IGdsLmNyZWF0ZUJ1ZmZlcigpO1xuXG5cblxuICAgIGdsLmJpbmRCdWZmZXIoZ2wuQVJSQVlfQlVGRkVSLCBtZXNoLl92ZXJ0ZXhCdWZmZXIpO1xuICAgIGdsLmJ1ZmZlckRhdGEoZ2wuQVJSQVlfQlVGRkVSLCBtZXNoLnZlcnRpY2VzLCBnbC5EWU5BTUlDX0RSQVcpO1xuXG4gICAgZ2wuYmluZEJ1ZmZlcihnbC5BUlJBWV9CVUZGRVIsIG1lc2guX3V2QnVmZmVyKTtcbiAgICBnbC5idWZmZXJEYXRhKGdsLkFSUkFZX0JVRkZFUiwgIG1lc2gudXZzLCBnbC5TVEFUSUNfRFJBVyk7XG5cbiAgICBpZihtZXNoLmNvbG9ycyl7XG4gICAgICAgIG1lc2guX2NvbG9yQnVmZmVyID0gZ2wuY3JlYXRlQnVmZmVyKCk7XG4gICAgICAgIGdsLmJpbmRCdWZmZXIoZ2wuQVJSQVlfQlVGRkVSLCBtZXNoLl9jb2xvckJ1ZmZlcik7XG4gICAgICAgIGdsLmJ1ZmZlckRhdGEoZ2wuQVJSQVlfQlVGRkVSLCBtZXNoLmNvbG9ycywgZ2wuU1RBVElDX0RSQVcpO1xuICAgIH1cblxuICAgIGdsLmJpbmRCdWZmZXIoZ2wuRUxFTUVOVF9BUlJBWV9CVUZGRVIsIG1lc2guX2luZGV4QnVmZmVyKTtcbiAgICBnbC5idWZmZXJEYXRhKGdsLkVMRU1FTlRfQVJSQVlfQlVGRkVSLCBtZXNoLmluZGljZXMsIGdsLlNUQVRJQ19EUkFXKTtcbn07XG5cblxuLyoqXG4gKiBFbXB0aWVzIHRoZSBjdXJyZW50IGJhdGNoLlxuICpcbiAqL1xuTWVzaFJlbmRlcmVyLnByb3RvdHlwZS5mbHVzaCA9IGZ1bmN0aW9uICgpXG57XG5cbn07XG5cbi8qKlxuICogU3RhcnRzIGEgbmV3IG1lc2ggcmVuZGVyZXIuXG4gKlxuICovXG5NZXNoUmVuZGVyZXIucHJvdG90eXBlLnN0YXJ0ID0gZnVuY3Rpb24gKClcbntcbiAgICBcblxuICAgIHRoaXMuY3VycmVudFNoYWRlciA9IG51bGw7XG59O1xuXG4vKipcbiAqIERlc3Ryb3lzIHRoZSBNZXNoIHJlbmRlcmVyXG4gKlxuICovXG5NZXNoUmVuZGVyZXIucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoKVxue1xuICAgIGNvcmUuT2JqZWN0UmVuZGVyZXIucHJvdG90eXBlLmRlc3Ryb3kuY2FsbCh0aGlzKTtcbn07XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uLy4uL2NvcmUnKTtcblxuLyoqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuU2hhZGVyXG4gKiBAbWVtYmVyb2YgUElYSS5tZXNoXG4gKiBAcGFyYW0gc2hhZGVyTWFuYWdlciB7UElYSS5TaGFkZXJNYW5hZ2VyfSBUaGUgV2ViR0wgc2hhZGVyIG1hbmFnZXIgdGhpcyBzaGFkZXIgd29ya3MgZm9yLlxuICovXG5mdW5jdGlvbiBNZXNoU2hhZGVyKHNoYWRlck1hbmFnZXIpXG57XG4gICAgY29yZS5TaGFkZXIuY2FsbCh0aGlzLFxuICAgICAgICBzaGFkZXJNYW5hZ2VyLFxuICAgICAgICAvLyB2ZXJ0ZXggc2hhZGVyXG4gICAgICAgIFtcbiAgICAgICAgICAgICdwcmVjaXNpb24gbG93cCBmbG9hdDsnLFxuICAgICAgICAgICAgJ2F0dHJpYnV0ZSB2ZWMyIGFWZXJ0ZXhQb3NpdGlvbjsnLFxuICAgICAgICAgICAgJ2F0dHJpYnV0ZSB2ZWMyIGFUZXh0dXJlQ29vcmQ7JyxcblxuICAgICAgICAgICAgJ3VuaWZvcm0gbWF0MyB0cmFuc2xhdGlvbk1hdHJpeDsnLFxuICAgICAgICAgICAgJ3VuaWZvcm0gbWF0MyBwcm9qZWN0aW9uTWF0cml4OycsXG5cbiAgICAgICAgICAgICd2YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDsnLFxuXG4gICAgICAgICAgICAndm9pZCBtYWluKHZvaWQpeycsXG4gICAgICAgICAgICAnICAgZ2xfUG9zaXRpb24gPSB2ZWM0KChwcm9qZWN0aW9uTWF0cml4ICogdHJhbnNsYXRpb25NYXRyaXggKiB2ZWMzKGFWZXJ0ZXhQb3NpdGlvbiwgMS4wKSkueHksIDAuMCwgMS4wKTsnLFxuICAgICAgICAgICAgJyAgIHZUZXh0dXJlQ29vcmQgPSBhVGV4dHVyZUNvb3JkOycsXG4gICAgICAgICAgICAnfSdcbiAgICAgICAgXS5qb2luKCdcXG4nKSxcbiAgICAgICAgW1xuICAgICAgICAgICAgJ3ByZWNpc2lvbiBsb3dwIGZsb2F0OycsXG5cbiAgICAgICAgICAgICd2YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDsnLFxuICAgICAgICAgICAgJ3VuaWZvcm0gZmxvYXQgYWxwaGE7JyxcblxuICAgICAgICAgICAgJ3VuaWZvcm0gc2FtcGxlcjJEIHVTYW1wbGVyOycsXG5cbiAgICAgICAgICAgICd2b2lkIG1haW4odm9pZCl7JyxcbiAgICAgICAgICAgICcgICBnbF9GcmFnQ29sb3IgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZUZXh0dXJlQ29vcmQpICogYWxwaGEgOycsXG4gICAgICAgICAgICAnfSdcbiAgICAgICAgXS5qb2luKCdcXG4nKSxcbiAgICAgICAgLy8gY3VzdG9tIHVuaWZvcm1zXG4gICAgICAgIHtcbiAgICAgICAgICAgIGFscGhhOiAgeyB0eXBlOiAnMWYnLCB2YWx1ZTogMCB9LFxuICAgICAgICAgICAgdHJhbnNsYXRpb25NYXRyaXg6IHsgdHlwZTogJ21hdDMnLCB2YWx1ZTogbmV3IEZsb2F0MzJBcnJheSg5KSB9LFxuICAgICAgICAgICAgcHJvamVjdGlvbk1hdHJpeDogeyB0eXBlOiAnbWF0MycsIHZhbHVlOiBuZXcgRmxvYXQzMkFycmF5KDkpIH1cbiAgICAgICAgfSxcbiAgICAgICAgLy8gY3VzdG9tIGF0dHJpYnV0ZXNcbiAgICAgICAge1xuICAgICAgICAgICAgYVZlcnRleFBvc2l0aW9uOjAsXG4gICAgICAgICAgICBhVGV4dHVyZUNvb3JkOjBcbiAgICAgICAgfVxuICAgICk7XG59XG5cbk1lc2hTaGFkZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShjb3JlLlNoYWRlci5wcm90b3R5cGUpO1xuTWVzaFNoYWRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBNZXNoU2hhZGVyO1xubW9kdWxlLmV4cG9ydHMgPSBNZXNoU2hhZGVyO1xuXG5jb3JlLlNoYWRlck1hbmFnZXIucmVnaXN0ZXJQbHVnaW4oJ21lc2hTaGFkZXInLCBNZXNoU2hhZGVyKTtcbiIsIi8vIFJlZmVyZW5jZXM6XG4vLyBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9KYXZhU2NyaXB0L1JlZmVyZW5jZS9HbG9iYWxfT2JqZWN0cy9NYXRoL3NpZ25cblxuaWYgKCFNYXRoLnNpZ24pXG57XG4gICAgTWF0aC5zaWduID0gZnVuY3Rpb24gKHgpIHtcbiAgICAgICAgeCA9ICt4O1xuICAgICAgICBpZiAoeCA9PT0gMCB8fCBpc05hTih4KSlcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHg7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHggPiAwID8gMSA6IC0xO1xuICAgIH07XG59XG4iLCIvLyBSZWZlcmVuY2VzOlxuLy8gaHR0cHM6Ly9naXRodWIuY29tL3NpbmRyZXNvcmh1cy9vYmplY3QtYXNzaWduXG4vLyBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9KYXZhU2NyaXB0L1JlZmVyZW5jZS9HbG9iYWxfT2JqZWN0cy9PYmplY3QvYXNzaWduXG5cbmlmICghT2JqZWN0LmFzc2lnbilcbntcbiAgICBPYmplY3QuYXNzaWduID0gcmVxdWlyZSgnb2JqZWN0LWFzc2lnbicpO1xufVxuIiwicmVxdWlyZSgnLi9PYmplY3QuYXNzaWduJyk7XG5yZXF1aXJlKCcuL3JlcXVlc3RBbmltYXRpb25GcmFtZScpO1xucmVxdWlyZSgnLi9NYXRoLnNpZ24nKTtcbiIsIi8vIFJlZmVyZW5jZXM6XG4vLyBodHRwOi8vcGF1bGlyaXNoLmNvbS8yMDExL3JlcXVlc3RhbmltYXRpb25mcmFtZS1mb3Itc21hcnQtYW5pbWF0aW5nL1xuLy8gaHR0cHM6Ly9naXN0LmdpdGh1Yi5jb20vMTU3OTY3MVxuLy8gaHR0cDovL3VwZGF0ZXMuaHRtbDVyb2Nrcy5jb20vMjAxMi8wNS9yZXF1ZXN0QW5pbWF0aW9uRnJhbWUtQVBJLW5vdy13aXRoLXN1Yi1taWxsaXNlY29uZC1wcmVjaXNpb25cbi8vIGh0dHBzOi8vZ2lzdC5naXRodWIuY29tL3RpbWhhbGwvNDA3ODYxNFxuLy8gaHR0cHM6Ly9naXRodWIuY29tL0ZpbmFuY2lhbC1UaW1lcy9wb2x5ZmlsbC1zZXJ2aWNlL3RyZWUvbWFzdGVyL3BvbHlmaWxscy9yZXF1ZXN0QW5pbWF0aW9uRnJhbWVcblxuLy8gRXhwZWN0ZWQgdG8gYmUgdXNlZCB3aXRoIEJyb3dzZXJmaXlcbi8vIEJyb3dzZXJpZnkgYXV0b21hdGljYWxseSBkZXRlY3RzIHRoZSB1c2Ugb2YgYGdsb2JhbGAgYW5kIHBhc3NlcyB0aGVcbi8vIGNvcnJlY3QgcmVmZXJlbmNlIG9mIGBnbG9iYWxgLCBgc2VsZmAsIGFuZCBmaW5hbGx5IGB3aW5kb3dgXG5cbi8vIERhdGUubm93XG5pZiAoIShEYXRlLm5vdyAmJiBEYXRlLnByb3RvdHlwZS5nZXRUaW1lKSkge1xuICAgIERhdGUubm93ID0gZnVuY3Rpb24gbm93KCkge1xuICAgICAgICByZXR1cm4gbmV3IERhdGUoKS5nZXRUaW1lKCk7XG4gICAgfTtcbn1cblxuLy8gcGVyZm9ybWFuY2Uubm93XG5pZiAoIShnbG9iYWwucGVyZm9ybWFuY2UgJiYgZ2xvYmFsLnBlcmZvcm1hbmNlLm5vdykpIHtcbiAgICB2YXIgc3RhcnRUaW1lID0gRGF0ZS5ub3coKTtcbiAgICBpZiAoIWdsb2JhbC5wZXJmb3JtYW5jZSkge1xuICAgICAgICBnbG9iYWwucGVyZm9ybWFuY2UgPSB7fTtcbiAgICB9XG4gICAgZ2xvYmFsLnBlcmZvcm1hbmNlLm5vdyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIERhdGUubm93KCkgLSBzdGFydFRpbWU7XG4gICAgfTtcbn1cblxuLy8gcmVxdWVzdEFuaW1hdGlvbkZyYW1lXG52YXIgbGFzdFRpbWUgPSBEYXRlLm5vdygpO1xudmFyIHZlbmRvcnMgPSBbJ21zJywgJ21veicsICd3ZWJraXQnLCAnbyddO1xuXG5mb3IodmFyIHggPSAwOyB4IDwgdmVuZG9ycy5sZW5ndGggJiYgIWdsb2JhbC5yZXF1ZXN0QW5pbWF0aW9uRnJhbWU7ICsreCkge1xuICAgIGdsb2JhbC5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUgPSBnbG9iYWxbdmVuZG9yc1t4XSArICdSZXF1ZXN0QW5pbWF0aW9uRnJhbWUnXTtcbiAgICBnbG9iYWwuY2FuY2VsQW5pbWF0aW9uRnJhbWUgPSBnbG9iYWxbdmVuZG9yc1t4XSArICdDYW5jZWxBbmltYXRpb25GcmFtZSddIHx8XG4gICAgICAgIGdsb2JhbFt2ZW5kb3JzW3hdICsgJ0NhbmNlbFJlcXVlc3RBbmltYXRpb25GcmFtZSddO1xufVxuXG5pZiAoIWdsb2JhbC5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUpIHtcbiAgICBnbG9iYWwucmVxdWVzdEFuaW1hdGlvbkZyYW1lID0gZnVuY3Rpb24gKGNhbGxiYWNrKSB7XG4gICAgICAgIGlmICh0eXBlb2YgY2FsbGJhY2sgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoY2FsbGJhY2sgKyAnaXMgbm90IGEgZnVuY3Rpb24nKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBjdXJyZW50VGltZSA9IERhdGUubm93KCksXG4gICAgICAgICAgICBkZWxheSA9IDE2ICsgbGFzdFRpbWUgLSBjdXJyZW50VGltZTtcblxuICAgICAgICBpZiAoZGVsYXkgPCAwKSB7XG4gICAgICAgICAgICBkZWxheSA9IDA7XG4gICAgICAgIH1cblxuICAgICAgICBsYXN0VGltZSA9IGN1cnJlbnRUaW1lO1xuXG4gICAgICAgIHJldHVybiBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGxhc3RUaW1lID0gRGF0ZS5ub3coKTtcbiAgICAgICAgICAgIGNhbGxiYWNrKHBlcmZvcm1hbmNlLm5vdygpKTtcbiAgICAgICAgfSwgZGVsYXkpO1xuICAgIH07XG59XG5cbmlmICghZ2xvYmFsLmNhbmNlbEFuaW1hdGlvbkZyYW1lKSB7XG4gICAgZ2xvYmFsLmNhbmNlbEFuaW1hdGlvbkZyYW1lID0gZnVuY3Rpb24oaWQpIHtcbiAgICAgICAgY2xlYXJUaW1lb3V0KGlkKTtcbiAgICB9O1xufVxuIl19 +//# sourceMappingURL=data:application/json;charset:utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIm5vZGVfbW9kdWxlcy9icm93c2VyaWZ5L25vZGVfbW9kdWxlcy9icm93c2VyLXBhY2svX3ByZWx1ZGUuanMiLCIuLi9waXhpLWdsLWNvcmUvaW5kZXguanMiLCIuLi9waXhpLWdsLWNvcmUvbGliL0dMQnVmZmVyLmpzIiwiLi4vcGl4aS1nbC1jb3JlL2xpYi9HTEZyYW1lYnVmZmVyLmpzIiwiLi4vcGl4aS1nbC1jb3JlL2xpYi9HTFNoYWRlci5qcyIsIi4uL3BpeGktZ2wtY29yZS9saWIvR0xUZXh0dXJlLmpzIiwiLi4vcGl4aS1nbC1jb3JlL2xpYi9WZXJ0ZXhBcnJheU9iamVjdC5qcyIsIi4uL3BpeGktZ2wtY29yZS9saWIvY3JlYXRlQ29udGV4dC5qcyIsIi4uL3BpeGktZ2wtY29yZS9saWIvc2V0VmVydGV4QXR0cmliQXJyYXlzLmpzIiwiLi4vcGl4aS1nbC1jb3JlL2xpYi9zaGFkZXIvY29tcGlsZVByb2dyYW0uanMiLCIuLi9waXhpLWdsLWNvcmUvbGliL3NoYWRlci9kZWZhdWx0VmFsdWUuanMiLCIuLi9waXhpLWdsLWNvcmUvbGliL3NoYWRlci9leHRyYWN0QXR0cmlidXRlcy5qcyIsIi4uL3BpeGktZ2wtY29yZS9saWIvc2hhZGVyL2V4dHJhY3RVbmlmb3Jtcy5qcyIsIi4uL3BpeGktZ2wtY29yZS9saWIvc2hhZGVyL2dlbmVyYXRlVW5pZm9ybUFjY2Vzc09iamVjdC5qcyIsIi4uL3BpeGktZ2wtY29yZS9saWIvc2hhZGVyL21hcFNpemUuanMiLCIuLi9waXhpLWdsLWNvcmUvbGliL3NoYWRlci9tYXBUeXBlLmpzIiwibm9kZV9tb2R1bGVzL2FzeW5jL2xpYi9hc3luYy5qcyIsIm5vZGVfbW9kdWxlcy9icm93c2VyaWZ5L25vZGVfbW9kdWxlcy9wYXRoLWJyb3dzZXJpZnkvaW5kZXguanMiLCJub2RlX21vZHVsZXMvYnJvd3NlcmlmeS9ub2RlX21vZHVsZXMvcHJvY2Vzcy9icm93c2VyLmpzIiwibm9kZV9tb2R1bGVzL2Jyb3dzZXJpZnkvbm9kZV9tb2R1bGVzL3B1bnljb2RlL3B1bnljb2RlLmpzIiwibm9kZV9tb2R1bGVzL2Jyb3dzZXJpZnkvbm9kZV9tb2R1bGVzL3F1ZXJ5c3RyaW5nLWVzMy9kZWNvZGUuanMiLCJub2RlX21vZHVsZXMvYnJvd3NlcmlmeS9ub2RlX21vZHVsZXMvcXVlcnlzdHJpbmctZXMzL2VuY29kZS5qcyIsIm5vZGVfbW9kdWxlcy9icm93c2VyaWZ5L25vZGVfbW9kdWxlcy9xdWVyeXN0cmluZy1lczMvaW5kZXguanMiLCJub2RlX21vZHVsZXMvYnJvd3NlcmlmeS9ub2RlX21vZHVsZXMvdXJsL3VybC5qcyIsIm5vZGVfbW9kdWxlcy9lYXJjdXQvc3JjL2VhcmN1dC5qcyIsIm5vZGVfbW9kdWxlcy9ldmVudGVtaXR0ZXIzL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL29iamVjdC1hc3NpZ24vaW5kZXguanMiLCJub2RlX21vZHVsZXMvcmVzb3VyY2UtbG9hZGVyL25vZGVfbW9kdWxlcy9hc3luYy9saWIvYXN5bmMuanMiLCJub2RlX21vZHVsZXMvcmVzb3VyY2UtbG9hZGVyL3NyYy9Mb2FkZXIuanMiLCJub2RlX21vZHVsZXMvcmVzb3VyY2UtbG9hZGVyL3NyYy9SZXNvdXJjZS5qcyIsIm5vZGVfbW9kdWxlcy9yZXNvdXJjZS1sb2FkZXIvc3JjL2I2NC5qcyIsIm5vZGVfbW9kdWxlcy9yZXNvdXJjZS1sb2FkZXIvc3JjL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL3Jlc291cmNlLWxvYWRlci9zcmMvbWlkZGxld2FyZXMvY2FjaGluZy9tZW1vcnkuanMiLCJub2RlX21vZHVsZXMvcmVzb3VyY2UtbG9hZGVyL3NyYy9taWRkbGV3YXJlcy9wYXJzaW5nL2Jsb2IuanMiLCJwYWNrYWdlLmpzb24iLCJzcmMvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5TWFuYWdlci5qcyIsInNyYy9hY2Nlc3NpYmlsaXR5L2FjY2Vzc2libGVUYXJnZXQuanMiLCJzcmMvYWNjZXNzaWJpbGl0eS9pbmRleC5qcyIsInNyYy9jb3JlL2NvbnN0LmpzIiwic3JjL2NvcmUvZGlzcGxheS9Db250YWluZXIuanMiLCJzcmMvY29yZS9kaXNwbGF5L0Rpc3BsYXlPYmplY3QuanMiLCJzcmMvY29yZS9ncmFwaGljcy9HcmFwaGljcy5qcyIsInNyYy9jb3JlL2dyYXBoaWNzL0dyYXBoaWNzRGF0YS5qcyIsInNyYy9jb3JlL2dyYXBoaWNzL3dlYmdsL0dyYXBoaWNzUmVuZGVyZXIuanMiLCJzcmMvY29yZS9ncmFwaGljcy93ZWJnbC9XZWJHTEdyYXBoaWNzRGF0YS5qcyIsInNyYy9jb3JlL2dyYXBoaWNzL3dlYmdsL3NoYWRlcnMvUHJpbWl0aXZlU2hhZGVyLmpzIiwic3JjL2NvcmUvZ3JhcGhpY3Mvd2ViZ2wvdXRpbHMvYnVpbGRDaXJjbGUuanMiLCJzcmMvY29yZS9ncmFwaGljcy93ZWJnbC91dGlscy9idWlsZENvbXBsZXhQb2x5LmpzIiwic3JjL2NvcmUvZ3JhcGhpY3Mvd2ViZ2wvdXRpbHMvYnVpbGRMaW5lLmpzIiwic3JjL2NvcmUvZ3JhcGhpY3Mvd2ViZ2wvdXRpbHMvYnVpbGRQb2x5LmpzIiwic3JjL2NvcmUvZ3JhcGhpY3Mvd2ViZ2wvdXRpbHMvYnVpbGRSZWN0YW5nbGUuanMiLCJzcmMvY29yZS9ncmFwaGljcy93ZWJnbC91dGlscy9idWlsZFJvdW5kZWRSZWN0YW5nbGUuanMiLCJzcmMvY29yZS9pbmRleC5qcyIsInNyYy9jb3JlL21hdGgvTWF0cml4LmpzIiwic3JjL2NvcmUvbWF0aC9Qb2ludC5qcyIsInNyYy9jb3JlL21hdGgvaW5kZXguanMiLCJzcmMvY29yZS9tYXRoL3NoYXBlcy9DaXJjbGUuanMiLCJzcmMvY29yZS9tYXRoL3NoYXBlcy9FbGxpcHNlLmpzIiwic3JjL2NvcmUvbWF0aC9zaGFwZXMvUG9seWdvbi5qcyIsInNyYy9jb3JlL21hdGgvc2hhcGVzL1JlY3RhbmdsZS5qcyIsInNyYy9jb3JlL21hdGgvc2hhcGVzL1JvdW5kZWRSZWN0YW5nbGUuanMiLCJzcmMvY29yZS9wYXJ0aWNsZXMvUGFydGljbGVDb250YWluZXIuanMiLCJzcmMvY29yZS9wYXJ0aWNsZXMvd2ViZ2wvUGFydGljbGVCdWZmZXIuanMiLCJzcmMvY29yZS9wYXJ0aWNsZXMvd2ViZ2wvUGFydGljbGVSZW5kZXJlci5qcyIsInNyYy9jb3JlL3BhcnRpY2xlcy93ZWJnbC9QYXJ0aWNsZVNoYWRlci5qcyIsInNyYy9jb3JlL3JlbmRlcmVycy9TeXN0ZW1SZW5kZXJlci5qcyIsInNyYy9jb3JlL3JlbmRlcmVycy9jYW52YXMvQ2FudmFzUmVuZGVyZXIuanMiLCJzcmMvY29yZS9yZW5kZXJlcnMvY2FudmFzL3V0aWxzL0NhbnZhc0J1ZmZlci5qcyIsInNyYy9jb3JlL3JlbmRlcmVycy9jYW52YXMvdXRpbHMvQ2FudmFzR3JhcGhpY3MuanMiLCJzcmMvY29yZS9yZW5kZXJlcnMvY2FudmFzL3V0aWxzL0NhbnZhc01hc2tNYW5hZ2VyLmpzIiwic3JjL2NvcmUvcmVuZGVyZXJzL2NhbnZhcy91dGlscy9DYW52YXNUaW50ZXIuanMiLCJzcmMvY29yZS9yZW5kZXJlcnMvd2ViZ2wvVGV4dHVyZU1hbmFnZXIuanMiLCJzcmMvY29yZS9yZW5kZXJlcnMvd2ViZ2wvV2ViR0xSZW5kZXJlci5qcyIsInNyYy9jb3JlL3JlbmRlcmVycy93ZWJnbC9maWx0ZXJzL0Fic3RyYWN0RmlsdGVyLmpzIiwic3JjL2NvcmUvcmVuZGVyZXJzL3dlYmdsL2ZpbHRlcnMvRlhBQUZpbHRlci5qcyIsInNyYy9jb3JlL3JlbmRlcmVycy93ZWJnbC9maWx0ZXJzL1Nwcml0ZU1hc2tGaWx0ZXIuanMiLCJzcmMvY29yZS9yZW5kZXJlcnMvd2ViZ2wvbWFuYWdlcnMvQmxlbmRNb2RlTWFuYWdlci5qcyIsInNyYy9jb3JlL3JlbmRlcmVycy93ZWJnbC9tYW5hZ2Vycy9GaWx0ZXJNYW5hZ2VyLmpzIiwic3JjL2NvcmUvcmVuZGVyZXJzL3dlYmdsL21hbmFnZXJzL01hc2tNYW5hZ2VyLmpzIiwic3JjL2NvcmUvcmVuZGVyZXJzL3dlYmdsL21hbmFnZXJzL1NoYWRlck1hbmFnZXIuanMiLCJzcmMvY29yZS9yZW5kZXJlcnMvd2ViZ2wvbWFuYWdlcnMvU3RlbmNpbE1hbmFnZXIuanMiLCJzcmMvY29yZS9yZW5kZXJlcnMvd2ViZ2wvbWFuYWdlcnMvV2ViR0xNYW5hZ2VyLmpzIiwic3JjL2NvcmUvcmVuZGVyZXJzL3dlYmdsL3NoYWRlcnMvQ29tcGxleFByaW1pdGl2ZVNoYWRlci5qcyIsInNyYy9jb3JlL3JlbmRlcmVycy93ZWJnbC9zaGFkZXJzL1ByaW1pdGl2ZVNoYWRlci5qcyIsInNyYy9jb3JlL3JlbmRlcmVycy93ZWJnbC9zaGFkZXJzL1NoYWRlci5qcyIsInNyYy9jb3JlL3JlbmRlcmVycy93ZWJnbC9zaGFkZXJzL1RleHR1cmVTaGFkZXIuanMiLCJzcmMvY29yZS9yZW5kZXJlcnMvd2ViZ2wvc2hhZGVycy9fVGV4dHVyZVNoYWRlci5qcyIsInNyYy9jb3JlL3JlbmRlcmVycy93ZWJnbC91dGlscy9PYmplY3RSZW5kZXJlci5qcyIsInNyYy9jb3JlL3JlbmRlcmVycy93ZWJnbC91dGlscy9RdWFkLmpzIiwic3JjL2NvcmUvcmVuZGVyZXJzL3dlYmdsL3V0aWxzL1JlbmRlclRhcmdldC5qcyIsInNyYy9jb3JlL3JlbmRlcmVycy93ZWJnbC91dGlscy9TdGVuY2lsTWFza1N0YWNrLmpzIiwic3JjL2NvcmUvcmVuZGVyZXJzL3dlYmdsL3V0aWxzL21hcFdlYkdMQmxlbmRNb2Rlc1RvUGl4aS5qcyIsInNyYy9jb3JlL3JlbmRlcmVycy93ZWJnbC91dGlscy9tYXBXZWJHTERyYXdNb2Rlc1RvUGl4aS5qcyIsInNyYy9jb3JlL3Nwcml0ZXMvU3ByaXRlLmpzIiwic3JjL2NvcmUvc3ByaXRlcy93ZWJnbC9TcHJpdGVSZW5kZXJlci5qcyIsInNyYy9jb3JlL3Nwcml0ZXMvd2ViZ2wvZ2VuZXJhdGVNdWx0aVRleHR1cmVTaGFkZXIuanMiLCJzcmMvY29yZS90ZXh0L1RleHQuanMiLCJzcmMvY29yZS90ZXh0dXJlcy9CYXNlVGV4dHVyZS5qcyIsInNyYy9jb3JlL3RleHR1cmVzL1JlbmRlclRleHR1cmUuanMiLCJzcmMvY29yZS90ZXh0dXJlcy9UZXh0dXJlLmpzIiwic3JjL2NvcmUvdGV4dHVyZXMvVGV4dHVyZVV2cy5qcyIsInNyYy9jb3JlL3RleHR1cmVzL1ZpZGVvQmFzZVRleHR1cmUuanMiLCJzcmMvY29yZS90aWNrZXIvVGlja2VyLmpzIiwic3JjL2NvcmUvdGlja2VyL2luZGV4LmpzIiwic3JjL2NvcmUvdXRpbHMvY3JlYXRlSW5kaWNlc0ZvclF1YWRzLmpzIiwic3JjL2NvcmUvdXRpbHMvaW5kZXguanMiLCJzcmMvY29yZS91dGlscy9wbHVnaW5UYXJnZXQuanMiLCJzcmMvZGVwcmVjYXRpb24uanMiLCJzcmMvZXh0cmFzL0JpdG1hcFRleHQuanMiLCJzcmMvZXh0cmFzL01vdmllQ2xpcC5qcyIsInNyYy9leHRyYXMvVGlsaW5nU3ByaXRlLmpzIiwic3JjL2V4dHJhcy9jYWNoZUFzQml0bWFwLmpzIiwic3JjL2V4dHJhcy9nZXRDaGlsZEJ5TmFtZS5qcyIsInNyYy9leHRyYXMvZ2V0R2xvYmFsUG9zaXRpb24uanMiLCJzcmMvZXh0cmFzL2luZGV4LmpzIiwic3JjL2ZpbHRlcnMvYXNjaWkvQXNjaWlGaWx0ZXIuanMiLCJzcmMvZmlsdGVycy9ibG9vbS9CbG9vbUZpbHRlci5qcyIsInNyYy9maWx0ZXJzL2JsdXIvQmx1ckRpckZpbHRlci5qcyIsInNyYy9maWx0ZXJzL2JsdXIvQmx1ckZpbHRlci5qcyIsInNyYy9maWx0ZXJzL2JsdXIvQmx1clhGaWx0ZXIuanMiLCJzcmMvZmlsdGVycy9ibHVyL0JsdXJZRmlsdGVyLmpzIiwic3JjL2ZpbHRlcnMvYmx1ci9TbWFydEJsdXJGaWx0ZXIuanMiLCJzcmMvZmlsdGVycy9jb2xvci9Db2xvck1hdHJpeEZpbHRlci5qcyIsInNyYy9maWx0ZXJzL2NvbG9yL0NvbG9yU3RlcEZpbHRlci5qcyIsInNyYy9maWx0ZXJzL2NvbnZvbHV0aW9uL0NvbnZvbHV0aW9uRmlsdGVyLmpzIiwic3JjL2ZpbHRlcnMvY3Jvc3NoYXRjaC9Dcm9zc0hhdGNoRmlsdGVyLmpzIiwic3JjL2ZpbHRlcnMvZGlzcGxhY2VtZW50L0Rpc3BsYWNlbWVudEZpbHRlci5qcyIsInNyYy9maWx0ZXJzL2RvdC9Eb3RTY3JlZW5GaWx0ZXIuanMiLCJzcmMvZmlsdGVycy9kcm9wc2hhZG93L0JsdXJZVGludEZpbHRlci5qcyIsInNyYy9maWx0ZXJzL2Ryb3BzaGFkb3cvRHJvcFNoYWRvd0ZpbHRlci5qcyIsInNyYy9maWx0ZXJzL2dyYXkvR3JheUZpbHRlci5qcyIsInNyYy9maWx0ZXJzL2luZGV4LmpzIiwic3JjL2ZpbHRlcnMvaW52ZXJ0L0ludmVydEZpbHRlci5qcyIsInNyYy9maWx0ZXJzL25vaXNlL05vaXNlRmlsdGVyLmpzIiwic3JjL2ZpbHRlcnMvcGl4ZWxhdGUvUGl4ZWxhdGVGaWx0ZXIuanMiLCJzcmMvZmlsdGVycy9yZ2IvUkdCU3BsaXRGaWx0ZXIuanMiLCJzcmMvZmlsdGVycy9zZXBpYS9TZXBpYUZpbHRlci5qcyIsInNyYy9maWx0ZXJzL3Nob2Nrd2F2ZS9TaG9ja3dhdmVGaWx0ZXIuanMiLCJzcmMvZmlsdGVycy90aWx0c2hpZnQvVGlsdFNoaWZ0QXhpc0ZpbHRlci5qcyIsInNyYy9maWx0ZXJzL3RpbHRzaGlmdC9UaWx0U2hpZnRGaWx0ZXIuanMiLCJzcmMvZmlsdGVycy90aWx0c2hpZnQvVGlsdFNoaWZ0WEZpbHRlci5qcyIsInNyYy9maWx0ZXJzL3RpbHRzaGlmdC9UaWx0U2hpZnRZRmlsdGVyLmpzIiwic3JjL2ZpbHRlcnMvdHdpc3QvVHdpc3RGaWx0ZXIuanMiLCJzcmMvc3JjL2luZGV4LmpzIiwic3JjL2ludGVyYWN0aW9uL0ludGVyYWN0aW9uRGF0YS5qcyIsInNyYy9pbnRlcmFjdGlvbi9JbnRlcmFjdGlvbk1hbmFnZXIuanMiLCJzcmMvaW50ZXJhY3Rpb24vaW5kZXguanMiLCJzcmMvaW50ZXJhY3Rpb24vaW50ZXJhY3RpdmVUYXJnZXQuanMiLCJzcmMvbG9hZGVycy9iaXRtYXBGb250UGFyc2VyLmpzIiwic3JjL2xvYWRlcnMvaW5kZXguanMiLCJzcmMvbG9hZGVycy9sb2FkZXIuanMiLCJzcmMvbG9hZGVycy9zcHJpdGVzaGVldFBhcnNlci5qcyIsInNyYy9sb2FkZXJzL3RleHR1cmVQYXJzZXIuanMiLCJzcmMvbWVzaC9NZXNoLmpzIiwic3JjL21lc2gvUGxhbmUuanMiLCJzcmMvbWVzaC9Sb3BlLmpzIiwic3JjL21lc2gvaW5kZXguanMiLCJzcmMvbWVzaC93ZWJnbC9NZXNoUmVuZGVyZXIuanMiLCJzcmMvbWVzaC93ZWJnbC9NZXNoU2hhZGVyLmpzIiwic3JjL3BvbHlmaWxsL01hdGguc2lnbi5qcyIsInNyYy9wb2x5ZmlsbC9PYmplY3QuYXNzaWduLmpzIiwic3JjL3BvbHlmaWxsL2luZGV4LmpzIiwic3JjL3BvbHlmaWxsL3JlcXVlc3RBbmltYXRpb25GcmFtZS5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQ0FBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDMUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN4Q0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN2TUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2pIQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM5QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdERBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3pEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDMUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbENBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM3QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3RJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDaENBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQzlDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7QUM1dUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7OztBQ2hPQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUMzRkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7O0FDcmhCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNwRkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNyRkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNKQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbnNCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0a0JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdFFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUN2Q0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7OztBQ25tQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDeGNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNoeUJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDaEVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ1pBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNwQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMxREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ25aQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDN05BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3JvQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdm1CQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0b0NBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDM0ZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzlUQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDcEhBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNsREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNyRkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDckVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMxTkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM3REE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDckVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzlIQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM3RkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdGJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNwRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3BCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdEZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzdGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDckdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM1RkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDMUZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM3VEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzFOQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMxZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM1RUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuUUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzFRQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbEdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDaFdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzVEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzFQQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMxSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzNZQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDOUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNyREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQy9GQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMxQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbGNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNqSEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDeEtBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM3V0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdkNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzVEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzdEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzlnQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM3R0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMvRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3hEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN6SkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNqU0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMvQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ25DQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3RCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDem1CQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdldBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDN0RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDM21CQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuYkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDN2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDeGFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDL0VBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDM09BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNqV0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdERBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDL0JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuUkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3BFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzdWQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbFlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzlUQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNsY0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDOVFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNUJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNUJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbkJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdkRBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ25HQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzVHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzNGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNwRkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM1QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdGhCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDL0NBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN6RkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDeEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbEZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdEVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN6RkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQy9MQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDL0NBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDckNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2hEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDckRBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDakRBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3BGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNoREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3RGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMzSEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3BDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNwQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUNuRkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7OztBQzVCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDL0NBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDMTJCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNmQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDL0NBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN2SEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNURBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbEZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNwQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDMWRBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNUhBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbk5BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNqQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ25PQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDM0RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDUkE7QUFDQTtBQUNBO0FBQ0E7OztBQ0hBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6ImdlbmVyYXRlZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzQ29udGVudCI6WyIoZnVuY3Rpb24gZSh0LG4scil7ZnVuY3Rpb24gcyhvLHUpe2lmKCFuW29dKXtpZighdFtvXSl7dmFyIGE9dHlwZW9mIHJlcXVpcmU9PVwiZnVuY3Rpb25cIiYmcmVxdWlyZTtpZighdSYmYSlyZXR1cm4gYShvLCEwKTtpZihpKXJldHVybiBpKG8sITApO3ZhciBmPW5ldyBFcnJvcihcIkNhbm5vdCBmaW5kIG1vZHVsZSAnXCIrbytcIidcIik7dGhyb3cgZi5jb2RlPVwiTU9EVUxFX05PVF9GT1VORFwiLGZ9dmFyIGw9bltvXT17ZXhwb3J0czp7fX07dFtvXVswXS5jYWxsKGwuZXhwb3J0cyxmdW5jdGlvbihlKXt2YXIgbj10W29dWzFdW2VdO3JldHVybiBzKG4/bjplKX0sbCxsLmV4cG9ydHMsZSx0LG4scil9cmV0dXJuIG5bb10uZXhwb3J0c312YXIgaT10eXBlb2YgcmVxdWlyZT09XCJmdW5jdGlvblwiJiZyZXF1aXJlO2Zvcih2YXIgbz0wO288ci5sZW5ndGg7bysrKXMocltvXSk7cmV0dXJuIHN9KSIsIlxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcblxuICAgIGNyZWF0ZUNvbnRleHQ6IFx0XHRcdHJlcXVpcmUoJy4vbGliL2NyZWF0ZUNvbnRleHQnKSxcbiAgICBzZXRWZXJ0ZXhBdHRyaWJBcnJheXM6IFx0cmVxdWlyZSgnLi9saWIvc2V0VmVydGV4QXR0cmliQXJyYXlzJyksXG4gICAgXG4gICAgR0xCdWZmZXI6IFx0XHRcdFx0cmVxdWlyZSgnLi9saWIvR0xCdWZmZXInKSxcbiAgICBHTEZyYW1lYnVmZmVyOiBcdFx0XHRyZXF1aXJlKCcuL2xpYi9HTEZyYW1lYnVmZmVyJyksXG4gICAgR0xTaGFkZXI6IFx0XHRcdFx0cmVxdWlyZSgnLi9saWIvR0xTaGFkZXInKSxcbiAgICBHTFRleHR1cmU6IFx0XHRcdFx0cmVxdWlyZSgnLi9saWIvR0xUZXh0dXJlJyksXG4gICAgXG4gICAgVmVydGV4QXJyYXlPYmplY3Q6IFx0XHRyZXF1aXJlKCcuL2xpYi9WZXJ0ZXhBcnJheU9iamVjdCcpXG5cbn07IiwiXG4vKipcbiAqIEhlbHBlciBjbGFzcyB0byBjcmVhdGUgYSB3ZWJHTCBidWZmZXJcbiAqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gZ2wge1dlYkdMUmVuZGVyaW5nQ29udGV4dH1cbiAqL1xuXG52YXIgRU1QVFlfQVJSQVlfQlVGRkVSID0gbmV3IEFycmF5QnVmZmVyKDApO1xuXG52YXIgQnVmZmVyID0gZnVuY3Rpb24oZ2wsIHR5cGUsIGRhdGEsIGRyYXdUeXBlKVxue1xuXHR0aGlzLmdsID0gZ2w7XG5cblx0dGhpcy5idWZmZXIgPSBnbC5jcmVhdGVCdWZmZXIoKTtcblx0dGhpcy50eXBlID0gdHlwZSB8fCBnbC5BUlJBWV9CVUZGRVI7XG5cdHRoaXMuZHJhd1R5cGUgPSBkcmF3VHlwZSB8fCBnbC5TVEFUSUNfRFJBVztcblx0dGhpcy5kYXRhID0gRU1QVFlfQVJSQVlfQlVGRkVSO1xuXG5cdGlmKGRhdGEpXG5cdHtcblx0XHR0aGlzLnVwbG9hZChkYXRhKTtcblx0fVxufVxuXG5CdWZmZXIucHJvdG90eXBlLnVwbG9hZCA9IGZ1bmN0aW9uKGRhdGEsIG9mZnNldCwgZG9udEJpbmQpXG57XG5cdC8vIHRvZG8gLSBuZWVkZWQ/XG5cdC8vaWYoIWRvbnRCaW5kKVxuXHR0aGlzLmJpbmQoKTtcblxuXHR2YXIgZ2wgPSB0aGlzLmdsO1xuXHRcblx0ZGF0YSA9IGRhdGEgfHwgdGhpcy5kYXRhO1xuXHRvZmZzZXQgPSBvZmZzZXQgfHwgMDtcblxuXHRpZih0aGlzLmRhdGEuYnl0ZUxlbmd0aCA+PSBkYXRhLmJ5dGVMZW5ndGgpXG5cdHtcdFxuXHRcdGdsLmJ1ZmZlclN1YkRhdGEodGhpcy50eXBlLCBvZmZzZXQsIGRhdGEpO1xuXHR9XG5cdGVsc2Vcblx0e1xuXHRcdGdsLmJ1ZmZlckRhdGEodGhpcy50eXBlLCBkYXRhLCB0aGlzLmRyYXdUeXBlKTtcblx0fVxuXG5cdHRoaXMuZGF0YSA9IGRhdGE7XG59XG5cbkJ1ZmZlci5wcm90b3R5cGUuYmluZCA9IGZ1bmN0aW9uKClcbntcblx0dmFyIGdsID0gdGhpcy5nbDtcblx0Z2wuYmluZEJ1ZmZlcih0aGlzLnR5cGUsIHRoaXMuYnVmZmVyKTtcbn1cblxuQnVmZmVyLmNyZWF0ZVZlcnRleEJ1ZmZlciA9IGZ1bmN0aW9uKGdsLCBkYXRhLCBkcmF3VHlwZSlcbntcblx0cmV0dXJuIG5ldyBCdWZmZXIoZ2wsIGdsLkFSUkFZX0JVRkZFUiwgZGF0YSwgZHJhd1R5cGUpO1xufVxuXG5CdWZmZXIuY3JlYXRlSW5kZXhCdWZmZXIgPSBmdW5jdGlvbihnbCwgZGF0YSwgZHJhd1R5cGUpXG57XG5cdHJldHVybiBuZXcgQnVmZmVyKGdsLCBnbC5FTEVNRU5UX0FSUkFZX0JVRkZFUiwgZGF0YSwgZHJhd1R5cGUpO1xufVxuXG5CdWZmZXIuY3JlYXRlID0gZnVuY3Rpb24oZ2wsIHR5cGUsIGRhdGEsIGRyYXdUeXBlKVxue1xuXHRyZXR1cm4gbmV3IEJ1ZmZlcihnbCwgdHlwZSwgZHJhd1R5cGUpO1xufVxuXG4vL1RPRE8gRGVzdHJveS4uXG5cbm1vZHVsZS5leHBvcnRzID0gQnVmZmVyO1xuXG4iLCJcbnZhciBUZXh0dXJlID0gcmVxdWlyZSgnLi9HTFRleHR1cmUnKTtcblxuLyoqXG4gKiBIZWxwZXIgY2xhc3MgdG8gY3JlYXRlIGEgd2ViR0wgRnJhbWVidWZmZXJcbiAqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gZ2wge1dlYkdMUmVuZGVyaW5nQ29udGV4dH1cbiAqL1xuXG52YXIgRnJhbWVidWZmZXIgPSBmdW5jdGlvbihnbCwgd2lkdGgsIGhlaWdodClcbntcblx0dGhpcy5nbCA9IGdsO1xuXG5cdHRoaXMuZnJhbWVidWZmZXIgPSBnbC5jcmVhdGVGcmFtZWJ1ZmZlcigpO1xuXHRcblx0dGhpcy5zdGVuY2lsID0gbnVsbDtcblx0dGhpcy50ZXh0dXJlID0gbnVsbDtcblxuXHR0aGlzLndpZHRoID0gd2lkdGggfHwgMTAwO1xuXHR0aGlzLmhlaWdodCA9IGhlaWdodCB8fCAxMDA7XG59XG5cbkZyYW1lYnVmZmVyLnByb3RvdHlwZS5lbmFibGVUZXh0dXJlID0gZnVuY3Rpb24odGV4dHVyZSlcbntcblx0dmFyIGdsID0gdGhpcy5nbDtcblxuXHR0aGlzLnRleHR1cmUgPSB0ZXh0dXJlIHx8IG5ldyBUZXh0dXJlKGdsKTtcblxuXHR0aGlzLnRleHR1cmUuYmluZCgpO1xuXG5cdC8vZ2wudGV4SW1hZ2UyRChnbC5URVhUVVJFXzJELCAwLCBnbC5SR0JBLCAgdGhpcy53aWR0aCwgdGhpcy5oZWlnaHQsIDAsIGdsLlJHQkEsIGdsLlVOU0lHTkVEX0JZVEUsIG51bGwpO1xuXG5cdHRoaXMuYmluZCgpO1xuXG5cdGdsLmZyYW1lYnVmZmVyVGV4dHVyZTJEKGdsLkZSQU1FQlVGRkVSLCBnbC5DT0xPUl9BVFRBQ0hNRU5UMCwgZ2wuVEVYVFVSRV8yRCwgdGhpcy50ZXh0dXJlLnRleHR1cmUsIDApO1xufVxuXG5GcmFtZWJ1ZmZlci5wcm90b3R5cGUuZW5hYmxlU3RlbmNpbCA9IGZ1bmN0aW9uKClcbntcblx0aWYodGhpcy5zdGVuY2lsKXJldHVybjtcblxuXHR2YXIgZ2wgPSB0aGlzLmdsO1xuXG5cdHRoaXMuc3RlbmNpbCA9IGdsLmNyZWF0ZVJlbmRlcmJ1ZmZlcigpO1xuICAgIFxuICAgIGdsLmJpbmRSZW5kZXJidWZmZXIoZ2wuUkVOREVSQlVGRkVSLCB0aGlzLnN0ZW5jaWwpO1xuICAgIFxuICAgIC8vIFRPRE8uLiB0aGlzIGlzIGRlcHRoIEFORCBzdGVuY2lsP1xuICAgIGdsLmZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyKGdsLkZSQU1FQlVGRkVSLCBnbC5ERVBUSF9TVEVOQ0lMX0FUVEFDSE1FTlQsIGdsLlJFTkRFUkJVRkZFUiwgdGhpcy5zdGVuY2lsKTtcbiAgICBnbC5yZW5kZXJidWZmZXJTdG9yYWdlKGdsLlJFTkRFUkJVRkZFUiwgZ2wuREVQVEhfU1RFTkNJTCwgIHRoaXMud2lkdGggICwgdGhpcy5oZWlnaHQgKTtcbn1cblxuRnJhbWVidWZmZXIucHJvdG90eXBlLmNsZWFyID0gZnVuY3Rpb24oIHIsIGcsIGIsIGEgKVxue1xuXHR0aGlzLmJpbmQoKTtcblxuXHR2YXIgZ2wgPSB0aGlzLmdsO1xuICAgIFxuICAgIGdsLmNsZWFyQ29sb3IociwgZywgYiwgYSk7XG4gICAgZ2wuY2xlYXIoZ2wuQ09MT1JfQlVGRkVSX0JJVCk7XG59XG5cbkZyYW1lYnVmZmVyLnByb3RvdHlwZS5iaW5kID0gZnVuY3Rpb24oKVxue1xuXHR2YXIgZ2wgPSB0aGlzLmdsO1xuXHRnbC5iaW5kRnJhbWVidWZmZXIoZ2wuRlJBTUVCVUZGRVIsIHRoaXMuZnJhbWVidWZmZXIgKTtcdFxufVxuXG5GcmFtZWJ1ZmZlci5wcm90b3R5cGUudW5iaW5kID0gZnVuY3Rpb24oKVxue1xuXHRnbC5iaW5kRnJhbWVidWZmZXIoZ2wuRlJBTUVCVUZGRVIsIG51bGwgKTtcdFxufVxuXG5GcmFtZWJ1ZmZlci5wcm90b3R5cGUucmVzaXplID0gZnVuY3Rpb24od2lkdGgsIGhlaWdodClcbntcblx0dmFyIGdsID0gdGhpcy5nbDtcblxuXHR0aGlzLndpZHRoID0gd2lkdGg7XG5cdHRoaXMuaGVpZ2h0ID0gaGVpZ2h0O1xuXG5cdGlmICggdGhpcy50ZXh0dXJlIClcbiAgICB7XG4gICAgXHR0aGlzLnRleHR1cmUudXBsb2FkRGF0YShudWxsLCB3aWR0aCwgaGVpZ2h0KTtcblx0fVxuXG5cdGlmICggdGhpcy5zdGVuY2lsIClcbiAgICB7XG4gICAgICAgIC8vIHVwZGF0ZSB0aGUgc3RlbmNpbCBidWZmZXIgd2lkdGggYW5kIGhlaWdodFxuICAgICAgICBnbC5iaW5kUmVuZGVyYnVmZmVyKGdsLlJFTkRFUkJVRkZFUiwgdGhpcy5zdGVuY2lsKTtcbiAgICAgICAgZ2wucmVuZGVyYnVmZmVyU3RvcmFnZShnbC5SRU5ERVJCVUZGRVIsIGdsLkRFUFRIX1NURU5DSUwsIHdpZHRoLCBoZWlnaHQpO1xuICAgIH1cbn1cblxuRnJhbWVidWZmZXIucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbigpXG57XG5cdHZhciBnbCA9IHRoaXMuZ2w7XG5cdC8vVE9ET1xuXHRnbC5kZWxldGVGcmFtZWJ1ZmZlcih0aGlzLmZyYW1lYnVmZmVyKTtcbn1cblxuRnJhbWVidWZmZXIuY3JlYXRlUkdCQSA9IGZ1bmN0aW9uKGdsLCB3aWR0aCwgaGVpZ2h0LCBkYXRhKVxue1xuXHR2YXIgdGV4dHVyZSA9IFRleHR1cmUuZnJvbURhdGEoZ2wsIG51bGwsIHdpZHRoLCBoZWlnaHQpO1xuXHR0ZXh0dXJlLmVuYWJsZU5lYXJlc3RTY2FsaW5nKCk7XG4gICAgdGV4dHVyZS5lbmFibGVXcmFwQ2xhbXAoKTtcblxuICAgIC8vbm93IGNyZWF0ZSB0aGUgZnJhbWVidWZmZXIgb2JqZWN0IGFuZCBhdHRhY2ggdGhlIHRleHR1cmUgdG8gaXQuXG4gICAgdmFyIGZibyA9IG5ldyBGcmFtZWJ1ZmZlcihnbCwgd2lkdGgsIGhlaWdodCk7XG4gICAgZmJvLmVuYWJsZVRleHR1cmUodGV4dHVyZSk7XG5cbiAgICByZXR1cm4gZmJvO1xufVxuXG5GcmFtZWJ1ZmZlci5jcmVhdGVGbG9hdDMyID0gZnVuY3Rpb24oZ2wsIHdpZHRoLCBoZWlnaHQsIGRhdGEpXG57XG5cdC8vIGNyZWF0ZSBhIG5ldyB0ZXh0dXJlLi5cbiAgICB2YXIgdGV4dHVyZSA9IG5ldyBUZXh0dXJlLmZyb21EYXRhKGdsLCBkYXRhLCB3aWR0aCwgaGVpZ2h0KTtcbiAgICB0ZXh0dXJlLmVuYWJsZU5lYXJlc3RTY2FsaW5nKCk7XG4gICAgdGV4dHVyZS5lbmFibGVXcmFwQ2xhbXAoKTtcblxuICAgIC8vbm93IGNyZWF0ZSB0aGUgZnJhbWVidWZmZXIgb2JqZWN0IGFuZCBhdHRhY2ggdGhlIHRleHR1cmUgdG8gaXQuXG4gICAgdmFyIGZibyA9IG5ldyBGcmFtZWJ1ZmZlcihnbCwgd2lkdGgsIGhlaWdodCk7XG4gICAgZmJvLmVuYWJsZVRleHR1cmUodGV4dHVyZSlcblxuICAgIHJldHVybiBmYm87XG59XG5cbm1vZHVsZS5leHBvcnRzID0gRnJhbWVidWZmZXI7XG5cbiIsIlxudmFyIGNvbXBpbGVQcm9ncmFtID0gcmVxdWlyZSgnLi9zaGFkZXIvY29tcGlsZVByb2dyYW0nKSxcblx0ZXh0cmFjdEF0dHJpYnV0ZXMgPSByZXF1aXJlKCcuL3NoYWRlci9leHRyYWN0QXR0cmlidXRlcycpLFxuXHRleHRyYWN0VW5pZm9ybXMgPSByZXF1aXJlKCcuL3NoYWRlci9leHRyYWN0VW5pZm9ybXMnKSxcblx0Z2VuZXJhdGVVbmlmb3JtQWNjZXNzT2JqZWN0ID0gcmVxdWlyZSgnLi9zaGFkZXIvZ2VuZXJhdGVVbmlmb3JtQWNjZXNzT2JqZWN0Jyk7XG5cbi8qKlxuICogSGVscGVyIGNsYXNzIHRvIGNyZWF0ZSBhIHdlYkdMIFNoYWRlclxuICpcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqIEBwYXJhbSBnbCB7V2ViR0xSZW5kZXJpbmdDb250ZXh0fVxuICovXG52YXIgU2hhZGVyID0gZnVuY3Rpb24oZ2wsIHZlcnRleFNyYywgZnJhZ21lbnRTcmMpXG57XG5cdHRoaXMuZ2wgPSBnbDtcblxuXHQvLyBGaXJzdCBjb21waWxlIHRoZSBwcm9ncmFtLi5cblx0dGhpcy5wcm9ncmFtID0gY29tcGlsZVByb2dyYW0oZ2wsIHZlcnRleFNyYywgZnJhZ21lbnRTcmMpO1xuXG5cdC8vIG5leHQgZXh0cmFjdCB0aGUgYXR0cmlidXRlc1xuXHR0aGlzLmF0dHJpYnV0ZXMgPSBleHRyYWN0QXR0cmlidXRlcyhnbCwgdGhpcy5wcm9ncmFtKTsgXG5cbiAgICB2YXIgdW5pZm9ybURhdGEgPSBleHRyYWN0VW5pZm9ybXMoZ2wsIHRoaXMucHJvZ3JhbSk7XG5cbiAgICB0aGlzLnVuaWZvcm1zID0gZ2VuZXJhdGVVbmlmb3JtQWNjZXNzT2JqZWN0KCBnbCwgdW5pZm9ybURhdGEgKTtcbn1cblxuU2hhZGVyLnByb3RvdHlwZS5iaW5kID0gZnVuY3Rpb24oKVxue1xuXHR0aGlzLmdsLnVzZVByb2dyYW0odGhpcy5wcm9ncmFtKTtcbn1cblxuU2hhZGVyLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24oKVxue1xuXHR2YXIgZ2wgPSB0aGlzLmdsO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IFNoYWRlcjtcblxuIiwiXG4vKipcbiAqIEhlbHBlciBjbGFzcyB0byBjcmVhdGUgYSB3ZWJHTCBUZXh0dXJlXG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIGdsIHtXZWJHTFJlbmRlcmluZ0NvbnRleHR9IGEgV2ViR0wgY29udGV4dFxuICogQHBhcmFtIHdpZHRoIHtudW1iZXJ9IHRoZSB3aWR0aCBvZiB0aGUgdGV4dHVyZSBcbiAqIEBwYXJhbSBoZWlnaHQge251bWJlcn0gdGhlIGhlaWdodCBvZiB0aGUgdGV4dHVyZSBcbiAqIEBwYXJhbSBmb3JtYXQge251bWJlcn0gdGhlIHBpeGVsIGZvcm1hdCBvZiB0aGUgdGV4dHVyZS4gZGVmYXVsdHMgdG8gZ2wuUkdCQVxuICogQHBhcmFtIHR5cGUge251bWJlcn0gdGhlIGdsIHR5cGUgb2YgdGhlIHRleHR1cmUuIGRlZmF1bHRzIHRvIGdsLlVOU0lHTkVEX0JZVEVcbiAqL1xudmFyIFRleHR1cmUgPSBmdW5jdGlvbihnbCwgd2lkdGgsIGhlaWdodCwgZm9ybWF0LCB0eXBlKVxue1xuXHR0aGlzLmdsID0gZ2w7XG5cblx0dGhpcy50ZXh0dXJlID0gZ2wuY3JlYXRlVGV4dHVyZSgpO1xuXG5cdC8vIHNvbWUgc2V0dGluZ3MuLlxuXHR0aGlzLm1pcG1hcCA9IGZhbHNlO1xuXG5cdHRoaXMucHJlbXVsdGlwbHlBbHBoYSA9IGZhbHNlO1xuXG5cdHRoaXMud2lkdGggPSB3aWR0aCB8fCAwO1xuXHR0aGlzLmhlaWdodCA9IGhlaWdodCB8fCAwO1xuXG5cdHRoaXMuZm9ybWF0ID0gZm9ybWF0IHx8IGdsLlJHQkE7XG5cdHRoaXMudHlwZSA9IHR5cGUgfHwgZ2wuVU5TSUdORURfQllURTtcblxuXG59XG5cbi8qKlxuICogQHBhcmFtIHtQSVhJLmdsQ29yZS5UZXh0dXJlfSBbdmFybmFtZV0gW2Rlc2NyaXB0aW9uXVxuICovXG5UZXh0dXJlLnByb3RvdHlwZS51cGxvYWQgPSBmdW5jdGlvbihzb3VyY2UpXG57XG5cdHRoaXMuYmluZCgpO1xuXG5cdHZhciBnbCA9IHRoaXMuZ2w7XG5cblx0dGhpcy53aWR0aCA9IHNvdXJjZS53aWR0aDtcblx0dGhpcy5oZWlnaHQgPSBzb3VyY2UuaGVpZ2h0O1xuXG5cdGdsLnBpeGVsU3RvcmVpKGdsLlVOUEFDS19QUkVNVUxUSVBMWV9BTFBIQV9XRUJHTCwgdGhpcy5wcmVtdWx0aXBseUFscGhhKTtcbiAgICBnbC50ZXhJbWFnZTJEKGdsLlRFWFRVUkVfMkQsIDAsIHRoaXMuZm9ybWF0LCB0aGlzLmZvcm1hdCwgdGhpcy50eXBlLCBzb3VyY2UpO1xufVxuXG52YXIgRkxPQVRJTkdfUE9JTlRfQVZBSUxBQkxFID0gZmFsc2U7XG5cblRleHR1cmUucHJvdG90eXBlLnVwbG9hZERhdGEgPSBmdW5jdGlvbihkYXRhLCB3aWR0aCwgaGVpZ2h0KVxue1xuXHR0aGlzLmJpbmQoKTtcblx0XG5cdHRoaXMud2lkdGggPSB3aWR0aCB8fCB0aGlzLndpZHRoO1xuXHR0aGlzLmhlaWdodCA9IGhlaWdodCB8fCB0aGlzLmhlaWdodDtcblxuXHRpZihkYXRhIGluc3RhbmNlb2YgRmxvYXQzMkFycmF5KVxuXHR7XG5cdFx0aWYoIUZMT0FUSU5HX1BPSU5UX0FWQUlMQUJMRSlcblx0XHR7XG5cdFx0XHR2YXIgZXh0ID0gZ2wuZ2V0RXh0ZW5zaW9uKFwiT0VTX3RleHR1cmVfZmxvYXRcIik7XG5cdFx0XHRcblx0XHRcdGlmKGV4dClcblx0XHRcdHtcblx0XHRcdFx0RkxPQVRJTkdfUE9JTlRfQVZBSUxBQkxFID0gdHJ1ZTtcblx0XHRcdH1cblx0XHRcdGVsc2Vcblx0XHRcdHtcblx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKCdmbG9hdGluZyBwb2ludCB0ZXh0dXJlcyBub3QgYXZhaWxhYmxlJyk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0dGhpcy50eXBlID0gZ2wuRkxPQVQ7XG5cdH1cblx0ZWxzZVxuXHR7XG5cdFx0Ly8gVE9ETyBzdXBwb3J0IGZvciBvdGhlciB0eXBlc1xuXHRcdHRoaXMudHlwZSA9IGdsLlVOU0lHTkVEX0JZVEU7XG5cdH1cblxuXHQvLyB3aGF0IHR5cGUgb2YgZGF0YT9cblx0Z2wucGl4ZWxTdG9yZWkoZ2wuVU5QQUNLX1BSRU1VTFRJUExZX0FMUEhBX1dFQkdMLCB0aGlzLnByZW11bHRpcGx5QWxwaGEpO1xuXHRnbC50ZXhJbWFnZTJEKGdsLlRFWFRVUkVfMkQsIDAsIHRoaXMuZm9ybWF0LCAgdGhpcy53aWR0aCwgdGhpcy5oZWlnaHQsIDAsIHRoaXMuZm9ybWF0LCB0aGlzLnR5cGUsIGRhdGEgfHwgbnVsbCk7XG5cbn1cblxuVGV4dHVyZS5wcm90b3R5cGUuYmluZCA9IGZ1bmN0aW9uKGxvY2F0aW9uKVxue1xuXHR2YXIgZ2wgPSB0aGlzLmdsO1xuXG5cdGlmKGxvY2F0aW9uICE9PSB1bmRlZmluZWQpXG5cdHtcblx0XHRnbC5hY3RpdmVUZXh0dXJlKGdsLlRFWFRVUkUwICsgbG9jYXRpb24pO1xuXHR9XG5cblx0Z2wuYmluZFRleHR1cmUoZ2wuVEVYVFVSRV8yRCwgdGhpcy50ZXh0dXJlKTtcbn1cblxuVGV4dHVyZS5wcm90b3R5cGUudW5iaW5kID0gZnVuY3Rpb24oKVxue1xuXHR2YXIgZ2wgPSB0aGlzLmdsO1xuXHRnbC5iaW5kVGV4dHVyZShnbC5URVhUVVJFXzJELCBudWxsKTtcbn1cblxuVGV4dHVyZS5wcm90b3R5cGUubWluRmlsdGVyID0gZnVuY3Rpb24oIGxpbmVhciApXG57XG5cdHZhciBnbCA9IHRoaXMuZ2w7XG5cblx0dGhpcy5iaW5kKCk7XG5cblx0aWYodGhpcy5taXBtYXApXG5cdHtcblx0XHRnbC50ZXhQYXJhbWV0ZXJpKGdsLlRFWFRVUkVfMkQsIGdsLlRFWFRVUkVfTUlOX0ZJTFRFUiwgbGluZWFyID8gZ2wuTElORUFSX01JUE1BUF9MSU5FQVIgOiBnbC5ORUFSRVNUX01JUE1BUF9ORUFSRVNUKTtcblx0fVxuXHRlbHNlXG5cdHtcblx0XHRnbC50ZXhQYXJhbWV0ZXJpKGdsLlRFWFRVUkVfMkQsIGdsLlRFWFRVUkVfTUlOX0ZJTFRFUiwgbGluZWFyID8gZ2wuTElORUFSIDogZ2wuTkVBUkVTVCk7XG5cdH1cdFxufVxuXG5UZXh0dXJlLnByb3RvdHlwZS5tYWdGaWx0ZXIgPSBmdW5jdGlvbiggbGluZWFyIClcbntcblx0dmFyIGdsID0gdGhpcy5nbDtcblxuXHR0aGlzLmJpbmQoKTtcblxuXHRnbC50ZXhQYXJhbWV0ZXJpKGdsLlRFWFRVUkVfMkQsIGdsLlRFWFRVUkVfTUFHX0ZJTFRFUiwgbGluZWFyID8gZ2wuTElORUFSIDogZ2wuTkVBUkVTVCk7XG59XG5cblRleHR1cmUucHJvdG90eXBlLmVuYWJsZU1pcG1hcCA9IGZ1bmN0aW9uKClcbntcblx0dGhpcy5iaW5kKCk7XG5cblx0dGhpcy5taXBtYXAgPSB0cnVlO1xuXHRnbC5nZW5lcmF0ZU1pcG1hcChnbC5URVhUVVJFXzJEKTtcbn1cblxuVGV4dHVyZS5wcm90b3R5cGUuZW5hYmxlTGluZWFyU2NhbGluZyA9IGZ1bmN0aW9uKClcbntcblx0dGhpcy5taW5GaWx0ZXIodHJ1ZSk7XG5cdHRoaXMubWFnRmlsdGVyKHRydWUpO1xufVxuXG5UZXh0dXJlLnByb3RvdHlwZS5lbmFibGVOZWFyZXN0U2NhbGluZyA9IGZ1bmN0aW9uKClcbntcblx0dGhpcy5taW5GaWx0ZXIoZmFsc2UpO1xuXHR0aGlzLm1hZ0ZpbHRlcihmYWxzZSk7XG59XG5cblRleHR1cmUucHJvdG90eXBlLmVuYWJsZVdyYXBDbGFtcCA9IGZ1bmN0aW9uKClcbntcblx0dmFyIGdsID0gdGhpcy5nbDtcblxuXHR0aGlzLmJpbmQoKTtcblxuXHRnbC50ZXhQYXJhbWV0ZXJpKGdsLlRFWFRVUkVfMkQsIGdsLlRFWFRVUkVfV1JBUF9TLCBnbC5DTEFNUF9UT19FREdFKTtcbiAgICBnbC50ZXhQYXJhbWV0ZXJpKGdsLlRFWFRVUkVfMkQsIGdsLlRFWFRVUkVfV1JBUF9ULCBnbC5DTEFNUF9UT19FREdFKTtcbn1cblxuVGV4dHVyZS5wcm90b3R5cGUuZW5hYmxlV3JhcFJlcGVhdCA9IGZ1bmN0aW9uKClcbntcblx0dmFyIGdsID0gdGhpcy5nbDtcblxuXHR0aGlzLmJpbmQoKTtcblx0XG5cdGdsLnRleFBhcmFtZXRlcmkoZ2wuVEVYVFVSRV8yRCwgZ2wuVEVYVFVSRV9XUkFQX1MsIGdsLlJFUEVBVCk7XG4gICAgZ2wudGV4UGFyYW1ldGVyaShnbC5URVhUVVJFXzJELCBnbC5URVhUVVJFX1dSQVBfVCwgZ2wuUkVQRUFUKTtcbn1cblxuVGV4dHVyZS5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uKClcbntcblx0dmFyIGdsID0gdGhpcy5nbDtcblx0Ly9UT0RPXG5cdGdsLmRlbGV0ZVRleHR1cmUodGhpcy50ZXh0dXJlKTtcbn1cblxuLy9UZXh0dXJlLlxuVGV4dHVyZS5mcm9tU291cmNlID0gZnVuY3Rpb24oZ2wsIHNvdXJjZSwgcHJlbXVsdGlwbHlBbHBoYSlcbntcblx0dmFyIHRleHR1cmUgPSBuZXcgVGV4dHVyZShnbCk7XG5cdHRleHR1cmUucHJlbXVsdGlwbHlBbHBoYSA9IHByZW11bHRpcGx5QWxwaGEgfHwgZmFsc2U7XG5cdHRleHR1cmUudXBsb2FkKHNvdXJjZSk7XG5cblx0cmV0dXJuIHRleHR1cmU7XG59XG5cblRleHR1cmUuZnJvbURhdGEgPSBmdW5jdGlvbihnbCwgZGF0YSwgd2lkdGgsIGhlaWdodClcbntcblx0Ly9jb25zb2xlLmxvZyhkYXRhLCB3aWR0aCwgaGVpZ2h0KTtcblx0dmFyIHRleHR1cmUgPSBuZXcgVGV4dHVyZShnbCk7XG5cdHRleHR1cmUudXBsb2FkRGF0YShkYXRhLCB3aWR0aCwgaGVpZ2h0KTtcblxuXHRyZXR1cm4gdGV4dHVyZTtcbn1cblxuXG5tb2R1bGUuZXhwb3J0cyA9IFRleHR1cmU7XG5cbiIsIlxuLyoqXG4gKiBHZW5lcmljIE1hc2sgU3RhY2sgZGF0YSBzdHJ1Y3R1cmVcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqL1xuXG4vLyBzdGF0ZSBvYmplY3QvL1xuXG5cbmZ1bmN0aW9uIFZlcnRleEFycmF5T2JqZWN0KGdsKVxue1xuXHRcblx0dGhpcy5uYXRpdmVWYW9FeHRlbnNpb24gPSAoXG4gICAgICBnbC5nZXRFeHRlbnNpb24oJ09FU192ZXJ0ZXhfYXJyYXlfb2JqZWN0JykgfHxcbiAgICAgIGdsLmdldEV4dGVuc2lvbignTU9aX09FU192ZXJ0ZXhfYXJyYXlfb2JqZWN0JykgfHxcbiAgICAgIGdsLmdldEV4dGVuc2lvbignV0VCS0lUX09FU192ZXJ0ZXhfYXJyYXlfb2JqZWN0JylcbiAgICApO1xuXG4vL1x0dGhpcy5uYXRpdmVWYW9FeHRlbnNpb24gPSBudWxsO1xuXG5cdGlmKHRoaXMubmF0aXZlVmFvRXh0ZW5zaW9uKVxuXHR7XG5cdFx0dGhpcy5uYXRpdmVWYW8gPSB0aGlzLm5hdGl2ZVZhb0V4dGVuc2lvbi5jcmVhdGVWZXJ0ZXhBcnJheU9FUygpOyAgXG5cdH1cblxuXHR0aGlzLmdsID0gZ2w7XG5cblx0dGhpcy5hdHRyaWJ1dGVzID0gW107XG5cblx0dGhpcy5pbmRleEJ1ZmZlciA9IG51bGw7XG5cblx0dGhpcy5kaXJ0eSA9IGZhbHNlO1xuXG5cdFxufVxuXG5WZXJ0ZXhBcnJheU9iamVjdC5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBWZXJ0ZXhBcnJheU9iamVjdDtcbm1vZHVsZS5leHBvcnRzID0gVmVydGV4QXJyYXlPYmplY3Q7XG5cblZlcnRleEFycmF5T2JqZWN0LnByb3RvdHlwZS5iaW5kID0gZnVuY3Rpb24oKVxue1xuXHRpZih0aGlzLm5hdGl2ZVZhbylcblx0e1xuXHRcdHRoaXMubmF0aXZlVmFvRXh0ZW5zaW9uLmJpbmRWZXJ0ZXhBcnJheU9FUyh0aGlzLm5hdGl2ZVZhbyk7ICBcblxuXHRcdGlmKHRoaXMuZGlydHkpXG5cdFx0e1xuXHRcdFx0dGhpcy5kaXJ0eSA9IGZhbHNlO1xuXHRcdFx0dGhpcy5hY3RpdmF0ZSgpO1xuXHRcdH1cblx0fVxuXHRlbHNlXG5cdHtcblx0XHR0aGlzLmFjdGl2YXRlKCk7XG5cdH1cbn1cblxuVmVydGV4QXJyYXlPYmplY3QucHJvdG90eXBlLnVuYmluZCA9IGZ1bmN0aW9uKClcbntcblx0aWYodGhpcy5uYXRpdmVWYW8pXG5cdHtcblx0XHR0aGlzLm5hdGl2ZVZhb0V4dGVuc2lvbi5iaW5kVmVydGV4QXJyYXlPRVMobnVsbCk7XG5cdH1cbn1cblxuVmVydGV4QXJyYXlPYmplY3QucHJvdG90eXBlLmFjdGl2YXRlID0gZnVuY3Rpb24oKVxue1xuXHR2YXIgZ2wgPSB0aGlzLmdsO1xuXG5cdGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5hdHRyaWJ1dGVzLmxlbmd0aDsgaSsrKSBcblx0e1xuXHRcdHZhciBhdHRyaWIgPSB0aGlzLmF0dHJpYnV0ZXNbaV07XG5cdFx0YXR0cmliLmJ1ZmZlci5iaW5kKCk7XHRcblxuXHRcdGF0dHJpYi5hdHRyaWJ1dGUucG9pbnRlcihhdHRyaWIudHlwZSwgYXR0cmliLm5vcm1hbGl6ZWQsIGF0dHJpYi5zdHJpZGUsIGF0dHJpYi5zdGFydCk7IFxuXHRcdFxuXHRcdGdsLmVuYWJsZVZlcnRleEF0dHJpYkFycmF5KGF0dHJpYi5hdHRyaWJ1dGUubG9jYXRpb24pO1xuXHR9O1xuXG5cdHRoaXMuaW5kZXhCdWZmZXIuYmluZCgpO1xufVxuXG5WZXJ0ZXhBcnJheU9iamVjdC5wcm90b3R5cGUuYWRkQXR0cmlidXRlID0gZnVuY3Rpb24oYnVmZmVyLCBhdHRyaWJ1dGUsIHR5cGUsIG5vcm1hbGl6ZWQsIHN0cmlkZSwgc3RhcnQpXG57XG4gICAgdGhpcy5hdHRyaWJ1dGVzLnB1c2goe1xuICAgIFx0YnVmZmVyOiBcdGJ1ZmZlcixcbiAgICBcdGF0dHJpYnV0ZTogXHRhdHRyaWJ1dGUsXG5cbiAgICBcdGxvY2F0aW9uOiBcdGF0dHJpYnV0ZS5sb2NhdGlvbixcblx0IFx0dHlwZTogXHRcdHR5cGUgfHwgdGhpcy5nbC5GTE9BVCxcblx0IFx0bm9ybWFsaXplZDogbm9ybWFsaXplZCB8fCBmYWxzZSxcblx0IFx0c3RyaWRlOiBcdHN0cmlkZSB8fCAwLFxuXHQgXHRzdGFydDogXHRcdHN0YXJ0IHx8IDBcblx0fSlcblxuXHR0aGlzLmRpcnR5ID0gdHJ1ZTtcbn1cblxuXG5WZXJ0ZXhBcnJheU9iamVjdC5wcm90b3R5cGUuYWRkSW5kZXggPSBmdW5jdGlvbihidWZmZXIsIG9wdGlvbnMpXG57XG4gICAgdGhpcy5pbmRleEJ1ZmZlciA9IGJ1ZmZlcjtcblxuICAgIHRoaXMuZGlydHkgPSB0cnVlO1xufVxuXG5WZXJ0ZXhBcnJheU9iamVjdC5wcm90b3R5cGUuZHJhdyA9IGZ1bmN0aW9uKHR5cGUsIHNpemUsIHN0YXJ0KVxue1xuXHR2YXIgZ2wgPSB0aGlzLmdsO1xuXHRnbC5kcmF3RWxlbWVudHModHlwZSwgc2l6ZSwgZ2wuVU5TSUdORURfU0hPUlQsIHN0YXJ0KTtcbn1cblxuIiwiXG4vKipcbiAqIEhlbHBlciBjbGFzcyB0byBjcmVhdGUgYSB3ZWJHTCBDb250ZXh0XG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIGdsIHtXZWJHTFJlbmRlcmluZ0NvbnRleHR9XG4gKi9cblxudmFyIENPTlRFWFRfVUlEID0gMDtcblxudmFyIGNyZWF0ZUNvbnRleHQgPSBmdW5jdGlvbihjYW52YXMsIG9wdGlvbnMpXG57XG4gICAgZ2wgPSBjYW52YXMuZ2V0Q29udGV4dCgnd2ViZ2wnLCBvcHRpb25zKSB8fCBcbiAgICBcdCBjYW52YXMuZ2V0Q29udGV4dCgnZXhwZXJpbWVudGFsLXdlYmdsJywgb3B0aW9ucyk7XG5cbiAgICBpZiAoIWdsKVxuICAgIHtcbiAgICAgICAgLy8gZmFpbCwgbm90IGFibGUgdG8gZ2V0IGEgY29udGV4dFxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RoaXMgYnJvd3NlciBkb2VzIG5vdCBzdXBwb3J0IHdlYkdMLiBUcnkgdXNpbmcgdGhlIGNhbnZhcyByZW5kZXJlcicpO1xuICAgIH1cblxuICAgIC8vIG1pZ2h0IHdhbnQgdG8gcGhhc2UgdGhpcyBvdXQ/XG4gICAgZ2wuaWQgPSBDT05URVhUX1VJRCsrO1xuXG4gICAgcmV0dXJuIGdsO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGNyZWF0ZUNvbnRleHQ7XG5cbiIsIi8qKlxuICogR2VuZXJpYyBNYXNrIFN0YWNrIGRhdGEgc3RydWN0dXJlXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKi9cblxudmFyIEdMX01BUCA9IHt9O1xuXG5cbnZhciBzZXRWZXJ0ZXhBdHRyaWJBcnJheXMgPSBmdW5jdGlvbiAoZ2wsIGF0dHJpYnMpXG57XHRcbiAgIC8vIGNvbnNvbGUubG9nKGdsLmlkKVxuICAgIHZhciBkYXRhID0gR0xfTUFQW2dsLmlkXTtcblxuICAgIGlmKCFkYXRhKVxuICAgIHtcblx0ICAgdmFyIG1heEF0dHJpYnMgPSBnbC5nZXRQYXJhbWV0ZXIoZ2wuTUFYX1ZFUlRFWF9BVFRSSUJTKTtcblx0XHRkYXRhID0gR0xfTUFQW2dsLmlkXSA9IHt0ZW1wQXR0cmliU3RhdGU6bmV3IEFycmF5KG1heEF0dHJpYnMpXG5cdFx0XHRcdCBcdCBcdFx0ICAgLGF0dHJpYlN0YXRlOm5ldyBBcnJheShtYXhBdHRyaWJzKX07XG5cdH1cblx0XG4gICAgdmFyIGksXG4gICAgXHR0ZW1wQXR0cmliU3RhdGUgPSBkYXRhLnRlbXBBdHRyaWJTdGF0ZSxcbiAgICBcdGF0dHJpYlN0YXRlID0gZGF0YS5hdHRyaWJTdGF0ZTtcblxuICAgIGZvciAoaSA9IDA7IGkgPCB0ZW1wQXR0cmliU3RhdGUubGVuZ3RoOyBpKyspXG4gICAge1xuICAgICAgICB0ZW1wQXR0cmliU3RhdGVbaV0gPSBmYWxzZTtcbiAgICB9XG5cbiAgICAvLyBzZXQgdGhlIG5ldyBhdHRyaWJzXG4gICAgZm9yIChpIGluIGF0dHJpYnMpXG4gICAge1xuICAgICAgICB0ZW1wQXR0cmliU3RhdGVbYXR0cmlic1tpXS5sb2NhdGlvbl0gPSB0cnVlO1xuICAgIH1cblxuICAgIGZvciAoaSA9IDE7IGkgPCBhdHRyaWJTdGF0ZS5sZW5ndGg7IGkrKylcbiAgICB7XG4gICAgICAgIGlmIChhdHRyaWJTdGF0ZVtpXSAhPT0gdGVtcEF0dHJpYlN0YXRlW2ldKVxuICAgICAgICB7XG4gICAgICAgICAgICBhdHRyaWJTdGF0ZVtpXSA9IHRlbXBBdHRyaWJTdGF0ZVtpXTtcblxuICAgICAgICAgICAgaWYgKGRhdGEuYXR0cmliU3RhdGVbaV0pXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgZ2wuZW5hYmxlVmVydGV4QXR0cmliQXJyYXkoaSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgZ2wuZGlzYWJsZVZlcnRleEF0dHJpYkFycmF5KGkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxufTtcblxubW9kdWxlLmV4cG9ydHMgPSBzZXRWZXJ0ZXhBdHRyaWJBcnJheXM7IiwiXG5cblxuXG5jb21waWxlUHJvZ3JhbSA9IGZ1bmN0aW9uKGdsLCB2ZXJ0ZXhTcmMsIGZyYWdtZW50U3JjKVxue1xuICAgIHZhciBnbFZlcnRTaGFkZXIgPSBjb21waWxlU2hhZGVyKGdsLCBnbC5WRVJURVhfU0hBREVSLCB2ZXJ0ZXhTcmMpO1xuICAgIHZhciBnbEZyYWdTaGFkZXIgPSBjb21waWxlU2hhZGVyKGdsLCBnbC5GUkFHTUVOVF9TSEFERVIsIGZyYWdtZW50U3JjKTtcblxuICAgIHZhciBwcm9ncmFtID0gZ2wuY3JlYXRlUHJvZ3JhbSgpO1xuXG4gICAgZ2wuYXR0YWNoU2hhZGVyKHByb2dyYW0sIGdsVmVydFNoYWRlcik7XG4gICAgZ2wuYXR0YWNoU2hhZGVyKHByb2dyYW0sIGdsRnJhZ1NoYWRlcik7XG4gICAgZ2wubGlua1Byb2dyYW0ocHJvZ3JhbSk7XG5cbiAgICAvLyBpZiBsaW5raW5nIGZhaWxzLCB0aGVuIGxvZyBhbmQgY2xlYW51cFxuICAgIGlmICghZ2wuZ2V0UHJvZ3JhbVBhcmFtZXRlcihwcm9ncmFtLCBnbC5MSU5LX1NUQVRVUykpXG4gICAge1xuICAgICAgICBjb25zb2xlLmVycm9yKCdQaXhpLmpzIEVycm9yOiBDb3VsZCBub3QgaW5pdGlhbGl6ZSBzaGFkZXIuJyk7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ2dsLlZBTElEQVRFX1NUQVRVUycsIGdsLmdldFByb2dyYW1QYXJhbWV0ZXIocHJvZ3JhbSwgZ2wuVkFMSURBVEVfU1RBVFVTKSk7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ2dsLmdldEVycm9yKCknLCBnbC5nZXRFcnJvcigpKTtcblxuICAgICAgICAvLyBpZiB0aGVyZSBpcyBhIHByb2dyYW0gaW5mbyBsb2csIGxvZyBpdFxuICAgICAgICBpZiAoZ2wuZ2V0UHJvZ3JhbUluZm9Mb2cocHJvZ3JhbSkgIT09ICcnKVxuICAgICAgICB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ1BpeGkuanMgV2FybmluZzogZ2wuZ2V0UHJvZ3JhbUluZm9Mb2coKScsIGdsLmdldFByb2dyYW1JbmZvTG9nKHByb2dyYW0pKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGdsLmRlbGV0ZVByb2dyYW0ocHJvZ3JhbSk7XG4gICAgICAgIHByb2dyYW0gPSBudWxsO1xuICAgIH1cblxuICAgIC8vIGNsZWFuIHVwIHNvbWUgc2hhZGVyc1xuICAgIGdsLmRlbGV0ZVNoYWRlcihnbFZlcnRTaGFkZXIpO1xuICAgIGdsLmRlbGV0ZVNoYWRlcihnbEZyYWdTaGFkZXIpO1xuXG4gICAgcmV0dXJuIHByb2dyYW07XG59XG5cbnZhciBjb21waWxlU2hhZGVyID0gZnVuY3Rpb24gKGdsLCB0eXBlLCBzcmMpXG57XG4gICAgdmFyIHNoYWRlciA9IGdsLmNyZWF0ZVNoYWRlcih0eXBlKTtcblxuICAgIGdsLnNoYWRlclNvdXJjZShzaGFkZXIsIHNyYyk7XG4gICAgZ2wuY29tcGlsZVNoYWRlcihzaGFkZXIpO1xuXG4gICAgaWYgKCFnbC5nZXRTaGFkZXJQYXJhbWV0ZXIoc2hhZGVyLCBnbC5DT01QSUxFX1NUQVRVUykpXG4gICAge1xuICAgICAgICBjb25zb2xlLmxvZyhnbC5nZXRTaGFkZXJJbmZvTG9nKHNoYWRlcikpO1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICByZXR1cm4gc2hhZGVyO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBjb21waWxlUHJvZ3JhbTtcblxuIiwiXG5cbnZhciBkZWZhdWx0VmFsdWUgPSBmdW5jdGlvbih0eXBlLCBzaXplKSBcbntcbiAgICBzd2l0Y2ggKHR5cGUpXG4gICAge1xuICAgICAgICBjYXNlICdmbG9hdCc6XG4gICAgICAgICAgICByZXR1cm4gMDtcblxuICAgICAgICBjYXNlICd2ZWMyJzogXG4gICAgICAgICAgICByZXR1cm4gbmV3IEZsb2F0MzJBcnJheSgyICogc2l6ZSk7XG5cbiAgICAgICAgY2FzZSAndmVjMyc6XG4gICAgICAgICAgICByZXR1cm4gbmV3IEZsb2F0MzJBcnJheSgzICogc2l6ZSk7XG5cbiAgICAgICAgY2FzZSAndmVjNCc6ICAgICBcbiAgICAgICAgICAgIHJldHVybiBuZXcgRmxvYXQzMkFycmF5KDQgKiBzaXplKTtcbiAgICAgICAgICAgIFxuICAgICAgICBjYXNlICdpbnQnOlxuICAgICAgICBjYXNlICdzYW1wbGVyMkQnOlxuICAgICAgICAgICAgcmV0dXJuIDA7XG5cbiAgICAgICAgY2FzZSAnaXZlYzInOiAgIFxuICAgICAgICAgICAgcmV0dXJuIG5ldyBJbnQzMkFycmF5KDIgKiBzaXplKTtcblxuICAgICAgICBjYXNlICdpdmVjMyc6XG4gICAgICAgICAgICByZXR1cm4gbmV3IEludDMyQXJyYXkoMyAqIHNpemUpO1xuXG4gICAgICAgIGNhc2UgJ2l2ZWM0JzogXG4gICAgICAgICAgICByZXR1cm4gbmV3IEludDMyQXJyYXkoNCAqIHNpemUpO1xuXG4gICAgICAgIGNhc2UgJ2Jvb2wnOiAgICAgXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG5cbiAgICAgICAgY2FzZSAnYnZlYzInOlxuXG4gICAgICAgICAgICByZXR1cm4gYm9vbGVhbkFycmF5KCAyICogc2l6ZSk7XG5cbiAgICAgICAgY2FzZSAnYnZlYzMnOlxuICAgICAgICAgICAgcmV0dXJuIGJvb2xlYW5BcnJheSgzICogc2l6ZSk7XG5cbiAgICAgICAgY2FzZSAnYnZlYzQnOlxuICAgICAgICAgICAgcmV0dXJuIGJvb2xlYW5BcnJheSg0ICogc2l6ZSk7XG5cbiAgICAgICAgY2FzZSAnbWF0Mic6XG4gICAgICAgICAgICByZXR1cm4gbmV3IEZsb2F0MzJBcnJheShbMSwgMFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLDAsIDFdKTtcblxuICAgICAgICBjYXNlICdtYXQzJzogXG4gICAgICAgICAgICByZXR1cm4gbmV3IEZsb2F0MzJBcnJheShbMSwgMCwgMFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLDAsIDEsIDBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwwLCAwLCAxXSk7XG5cbiAgICAgICAgY2FzZSAnbWF0NCc6XG4gICAgICAgICAgICByZXR1cm4gbmV3IEZsb2F0MzJBcnJheShbMSwgMCwgMCwgMFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLDAsIDEsIDAsIDBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwwLCAwLCAxLCAwXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsMCwgMCwgMCwgMV0pO1xuICAgIH1cbn1cblxudmFyIGJvb2xlYW5BcnJheSA9IGZ1bmN0aW9uKHNpemUpXG57XG4gICAgdmFyIGFycmF5ID0gbmV3IEFycmF5KHNpemUpO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcnJheS5sZW5ndGg7IGkrKykgXG4gICAge1xuICAgICAgICBhcnJheVtpXSA9IGZhbHNlO1xuICAgIH07XG5cbiAgICByZXR1cm4gYXJyYXk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZGVmYXVsdFZhbHVlO1xuIiwiXG52YXIgbWFwVHlwZSA9IHJlcXVpcmUoJy4vbWFwVHlwZScpO1xudmFyIG1hcFNpemUgPSByZXF1aXJlKCcuL21hcFNpemUnKTtcblxudmFyIGV4dHJhY3RBdHRyaWJ1dGVzID0gZnVuY3Rpb24oZ2wsIHByb2dyYW0pXG57XG4gICAgdmFyIGF0dHJpYnV0ZXMgPSB7fTtcblxuICAgIHZhciB0b3RhbEF0dHJpYnV0ZXMgPSBnbC5nZXRQcm9ncmFtUGFyYW1ldGVyKHByb2dyYW0sIGdsLkFDVElWRV9BVFRSSUJVVEVTKVxuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0b3RhbEF0dHJpYnV0ZXM7IGkrKykgXG4gICAge1xuICAgICAgICB2YXIgYXR0cmliRGF0YSA9IGdsLmdldEFjdGl2ZUF0dHJpYihwcm9ncmFtLCBpKTtcbiAgICAgICAgdmFyIHR5cGUgPSBtYXBUeXBlKGdsLCBhdHRyaWJEYXRhLnR5cGUpO1xuXG4gICAgICAgIGF0dHJpYnV0ZXNbYXR0cmliRGF0YS5uYW1lXSA9IHtcbiAgICAgICAgICAgIHR5cGU6dHlwZSxcbiAgICAgICAgICAgIHNpemU6bWFwU2l6ZSh0eXBlKSxcbiAgICAgICAgICAgIGxvY2F0aW9uOmdsLmdldEF0dHJpYkxvY2F0aW9uKHByb2dyYW0sIGF0dHJpYkRhdGEubmFtZSksXG4gICAgICAgICAgICAvL1RPRE8gLSBtYWtlIGFuIGF0dHJpYnV0ZSBvYmplY3RcbiAgICAgICAgICAgIHBvaW50ZXI6ZnVuY3Rpb24odHlwZSwgbm9ybWFsaXplZCwgc3RyaWRlLCBzdGFydCl7XG5cbiAgICAgICAgICAgICAvLyAgIGNvbnNvbGUubG9nKHRoaXMubG9jYXRpb24pXG4gICAgICAgICAgICAgICAgZ2wudmVydGV4QXR0cmliUG9pbnRlcih0aGlzLmxvY2F0aW9uLHRoaXMuc2l6ZSwgdHlwZSB8fCBnbC5GTE9BVCwgbm9ybWFsaXplZCB8fCBmYWxzZSwgc3RyaWRlIHx8IDAsIHN0YXJ0IHx8IDApOyBcblxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfTtcblxuICAgIHJldHVybiBhdHRyaWJ1dGVzOyAgXG59XG5cbm1vZHVsZS5leHBvcnRzID0gZXh0cmFjdEF0dHJpYnV0ZXM7XG5cbiIsInZhciBtYXBUeXBlID0gcmVxdWlyZSgnLi9tYXBUeXBlJyk7XG52YXIgZGVmYXVsdFZhbHVlID0gcmVxdWlyZSgnLi9kZWZhdWx0VmFsdWUnKTtcblxuXG52YXIgZXh0cmFjdFVuaWZvcm1zID0gZnVuY3Rpb24oZ2wsIHByb2dyYW0pXG57XG5cdHZhciB1bmlmb3JtcyA9IHt9O1xuXHRcbiAgICB2YXIgdG90YWxVbmlmb3JtcyA9IGdsLmdldFByb2dyYW1QYXJhbWV0ZXIocHJvZ3JhbSwgZ2wuQUNUSVZFX1VOSUZPUk1TKVxuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0b3RhbFVuaWZvcm1zOyBpKyspIFxuICAgIHtcbiAgICBcdHZhciB1bmlmb3JtRGF0YSA9IGdsLmdldEFjdGl2ZVVuaWZvcm0ocHJvZ3JhbSwgaSk7XG4gICAgXHR2YXIgbmFtZSA9IHVuaWZvcm1EYXRhLm5hbWUucmVwbGFjZSgvXFxbLio/XFxdLywgXCJcIik7XG4gICAgICAgIHZhciB0eXBlID0gbWFwVHlwZShnbCwgdW5pZm9ybURhdGEudHlwZSApO1xuXG4gICAgXHR1bmlmb3Jtc1tuYW1lXSA9IHtcbiAgICBcdFx0dHlwZTp0eXBlLFxuICAgIFx0XHRzaXplOnVuaWZvcm1EYXRhLnNpemUsXG4gICAgXHRcdGxvY2F0aW9uOmdsLmdldFVuaWZvcm1Mb2NhdGlvbihwcm9ncmFtLCBuYW1lKSxcbiAgICBcdFx0dmFsdWU6ZGVmYXVsdFZhbHVlKHR5cGUsIHVuaWZvcm1EYXRhLnNpemUpXG4gICAgXHR9XG4gICAgfTtcblx0XG5cdHJldHVybiB1bmlmb3JtcztcdFxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGV4dHJhY3RVbmlmb3JtcztcblxuIiwiXG52YXIgZ2VuZXJhdGVVbmlmb3JtQWNjZXNzT2JqZWN0ID0gZnVuY3Rpb24oZ2wsIHVuaWZvcm1EYXRhKVxue1xuICAgIC8vIHRoaXMgaXMgdGhlIG9iamVjdCB3ZSB3aWxsIGJlIHNlbmRpbmcgYmFjay5cbiAgICAvLyBhbiBvYmplY3QgaGllcmFjaHkgd2lsbCBiZSBjcmVhdGVkIGZvciBzdHJ1Y3RzXG4gICAgdmFyIHVuaWZvcm1zID0ge2RhdGE6e319O1xuXG4gICAgdW5pZm9ybXMuZ2wgPSBnbDtcbiAgICBcbiAgICB2YXIgdW5pZm9ybUtleXM9IE9iamVjdC5rZXlzKHVuaWZvcm1EYXRhKTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdW5pZm9ybUtleXMubGVuZ3RoOyBpKyspIFxuICAgIHtcbiAgICAgICAgdmFyIGZ1bGxOYW1lID0gdW5pZm9ybUtleXNbaV1cblxuICAgICAgICB2YXIgbmFtZVRva2VucyA9IGZ1bGxOYW1lLnNwbGl0KCcuJyk7XG4gICAgICAgIHZhciBuYW1lID0gbmFtZVRva2Vuc1tuYW1lVG9rZW5zLmxlbmd0aCAtIDFdO1xuXG4gICAgICAgIHZhciB1bmlmb3JtR3JvdXAgPSBnZXRVbmlmb3JtR3JvdXAobmFtZVRva2VucywgdW5pZm9ybXMpO1xuXG4gICAgICAgIHZhciB1bmlmb3JtID0gIHVuaWZvcm1EYXRhW2Z1bGxOYW1lXTtcbiAgICAgICAgdW5pZm9ybUdyb3VwLmRhdGFbbmFtZV0gPSB1bmlmb3JtO1xuXG4gICAgICAgIHVuaWZvcm1Hcm91cC5nbCA9IGdsO1xuXG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh1bmlmb3JtR3JvdXAsIG5hbWUsIHtcbiAgICAgICAgICAgIGdldDogZ2VuZXJhdGVHZXR0ZXIobmFtZSksXG4gICAgICAgICAgICBzZXQ6IGdlbmVyYXRlU2V0dGVyKG5hbWUsIHVuaWZvcm0pXG4gICAgICAgIH0pXG4gICAgfTtcblxuICAgIHJldHVybiB1bmlmb3Jtcztcbn1cblxudmFyIGdlbmVyYXRlR2V0dGVyID0gZnVuY3Rpb24obmFtZSlcbntcblx0dmFyIHRlbXBsYXRlID0gZ2V0dGVyVGVtcGxhdGUucmVwbGFjZSgnJSUnLCBuYW1lKTtcblx0cmV0dXJuIG5ldyBGdW5jdGlvbih0ZW1wbGF0ZSk7XG59XG5cbnZhciBnZW5lcmF0ZVNldHRlciA9IGZ1bmN0aW9uKG5hbWUsIHVuaWZvcm0pXG57XG4gICAgdmFyIHRlbXBsYXRlID0gc2V0dGVyVGVtcGxhdGUucmVwbGFjZSgvJSUvZywgbmFtZSk7XG4gICAgdmFyIHNldFRlbXBsYXRlXG4gICAgXG4gICAgaWYodW5pZm9ybS5zaXplID09PSAxKVxuICAgIHtcbiAgICAgICAgc2V0VGVtcGxhdGUgPSBHTFNMX1RPX1NJTkdMRV9TRVRURVJTW3VuaWZvcm0udHlwZV07XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHNldFRlbXBsYXRlID0gR0xTTF9UT19BUlJBWV9TRVRURVJTW3VuaWZvcm0udHlwZV07XG4gICAgfVxuXG4gICAgaWYoc2V0VGVtcGxhdGUpXG4gICAge1xuICAgICAgICB0ZW1wbGF0ZSArPSBcIlxcbnRoaXMuZ2wuXCIgKyBzZXRUZW1wbGF0ZSArIFwiO1wiO1xuICAgIH1cblxuICBcdHJldHVybiBuZXcgRnVuY3Rpb24oJ3ZhbHVlJywgdGVtcGxhdGUpO1xufVxuXG52YXIgZ2V0VW5pZm9ybUdyb3VwID0gZnVuY3Rpb24obmFtZVRva2VucywgdW5pZm9ybSlcbntcbiAgICB2YXIgY3VyID0gdW5pZm9ybTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbmFtZVRva2Vucy5sZW5ndGggLSAxOyBpKyspIFxuICAgIHtcbiAgICAgICAgdmFyIG8gPSBjdXJbbmFtZVRva2Vuc1tpXV0gfHwge2RhdGE6e319O1xuICAgICAgICBjdXJbbmFtZVRva2Vuc1tpXV0gPSBvO1xuICAgICAgICBjdXIgPSBvO1xuICAgIH07XG5cbiAgICByZXR1cm4gY3VyXG59XG5cbnZhciBnZXR0ZXJUZW1wbGF0ZSA9IFtcbiAgICAncmV0dXJuIHRoaXMuZGF0YS4lJS52YWx1ZTsnLFxuXS5qb2luKCdcXG4nKTtcblxudmFyIHNldHRlclRlbXBsYXRlID0gW1xuICAgICd0aGlzLmRhdGEuJSUudmFsdWUgPSB2YWx1ZTsnLFxuICAgICd2YXIgbG9jYXRpb24gPSB0aGlzLmRhdGEuJSUubG9jYXRpb247J1xuXS5qb2luKCdcXG4nKTtcblxuXG52YXIgR0xTTF9UT19TSU5HTEVfU0VUVEVSUyA9IHtcblxuICAgICdmbG9hdCc6ICAgICd1bmlmb3JtMWYobG9jYXRpb24sIHZhbHVlKScsXG5cbiAgICAndmVjMic6ICAgICAndW5pZm9ybTJmKGxvY2F0aW9uLCB2YWx1ZVswXSwgdmFsdWVbMV0pJyxcbiAgICAndmVjMyc6ICAgICAndW5pZm9ybTNmKGxvY2F0aW9uLCB2YWx1ZVswXSwgdmFsdWVbMV0sIHZhbHVlWzJdKScsXG4gICAgJ3ZlYzQnOiAgICAgJ3VuaWZvcm00Zihsb2NhdGlvbiwgdmFsdWVbMF0sIHZhbHVlWzFdLCB2YWx1ZVsyXSwgdmFsdWVbM10pJyxcbiAgICBcdFxuICAgICdpbnQnOiAgICAgICd1bmlmb3JtMWkobG9jYXRpb24sIHZhbHVlKScsXG4gICAgJ2l2ZWMyJzogICAgJ3VuaWZvcm0yaShsb2NhdGlvbiwgdmFsdWVbMF0sIHZhbHVlWzFdKScsXG4gICAgJ2l2ZWMzJzogICAgJ3VuaWZvcm0zaShsb2NhdGlvbiwgdmFsdWVbMF0sIHZhbHVlWzFdLCB2YWx1ZVsyXSknLFxuICAgICdpdmVjNCc6ICAgICd1bmlmb3JtNGkobG9jYXRpb24sIHZhbHVlWzBdLCB2YWx1ZVsxXSwgdmFsdWVbMl0sIHZhbHVlWzNdKScsXG5cbiAgICAnYm9vbCc6ICAgICAndW5pZm9ybTFpKGxvY2F0aW9uLCB2YWx1ZSknLFxuICAgICdidmVjMic6ICAgICd1bmlmb3JtMmkobG9jYXRpb24sIHZhbHVlWzBdLCB2YWx1ZVsxXSknLFxuICAgICdidmVjMyc6ICAgICd1bmlmb3JtM2kobG9jYXRpb24sIHZhbHVlWzBdLCB2YWx1ZVsxXSwgdmFsdWVbMl0pJyxcbiAgICAnYnZlYzQnOiAgICAndW5pZm9ybTRpKGxvY2F0aW9uLCB2YWx1ZVswXSwgdmFsdWVbMV0sIHZhbHVlWzJdLCB2YWx1ZVszXSknLFxuXG4gICAgJ21hdDInOiAgICAgJ3VuaWZvcm1NYXRyaXgyZnYobG9jYXRpb24sIGZhbHNlLCB2YWx1ZSknLFxuICAgICdtYXQzJzogICAgICd1bmlmb3JtTWF0cml4M2Z2KGxvY2F0aW9uLCBmYWxzZSwgdmFsdWUpJyxcbiAgICAnbWF0NCc6ICAgICAndW5pZm9ybU1hdHJpeDRmdihsb2NhdGlvbiwgZmFsc2UsIHZhbHVlKScsXG5cbiAgICAnc2FtcGxlcjJEJzondW5pZm9ybTFpKGxvY2F0aW9uLCB2YWx1ZSknXG59XG5cbnZhciBHTFNMX1RPX0FSUkFZX1NFVFRFUlMgPSB7XG5cbiAgICAnZmxvYXQnOiAgICAndW5pZm9ybTFmdihsb2NhdGlvbiwgdmFsdWUpJyxcblxuICAgICd2ZWMyJzogICAgICd1bmlmb3JtMmZ2KGxvY2F0aW9uLCB2YWx1ZSknLFxuICAgICd2ZWMzJzogICAgICd1bmlmb3JtM2Z2KGxvY2F0aW9uLCB2YWx1ZSknLFxuICAgICd2ZWM0JzogICAgICd1bmlmb3JtNGZ2KGxvY2F0aW9uLCB2YWx1ZSknLFxuICAgIFx0XG4gICAgJ2ludCc6ICAgICAgJ3VuaWZvcm0xaXYobG9jYXRpb24sIHZhbHVlKScsXG4gICAgJ2l2ZWMyJzogICAgJ3VuaWZvcm0yaXYobG9jYXRpb24sIHZhbHVlKScsXG4gICAgJ2l2ZWMzJzogICAgJ3VuaWZvcm0zaXYobG9jYXRpb24sIHZhbHVlKScsXG4gICAgJ2l2ZWM0JzogICAgJ3VuaWZvcm00aXYobG9jYXRpb24sIHZhbHVlKScsXG5cbiAgICAnYm9vbCc6ICAgICAndW5pZm9ybTFpdihsb2NhdGlvbiwgdmFsdWUpJyxcbiAgICAnYnZlYzInOiAgICAndW5pZm9ybTJpdihsb2NhdGlvbiwgdmFsdWUpJyxcbiAgICAnYnZlYzMnOiAgICAndW5pZm9ybTNpdihsb2NhdGlvbiwgdmFsdWUpJyxcbiAgICAnYnZlYzQnOiAgICAndW5pZm9ybTRpdihsb2NhdGlvbiwgdmFsdWUpJyxcbiAgIFxuICAgICdzYW1wbGVyMkQnOid1bmlmb3JtMWl2KGxvY2F0aW9uLCB2YWx1ZSknXG59XG5cbm1vZHVsZS5leHBvcnRzID0gZ2VuZXJhdGVVbmlmb3JtQWNjZXNzT2JqZWN0O1xuXG4iLCJcblxudmFyIG1hcFNpemUgPSBmdW5jdGlvbih0eXBlKSBcbnsgXG4gICAgcmV0dXJuIEdMU0xfVE9fU0laRVt0eXBlXTtcbn1cblxuXG52YXIgR0xTTF9UT19TSVpFID0ge1xuICAgICdmbG9hdCc6ICAgIDEsXG4gICAgJ3ZlYzInOiAgICAgMixcbiAgICAndmVjMyc6ICAgICAzLFxuICAgICd2ZWM0JzogICAgIDQsXG5cbiAgICAnaW50JzogICAgICAxLFxuICAgICdpdmVjMic6ICAgIDIsXG4gICAgJ2l2ZWMzJzogICAgMyxcbiAgICAnaXZlYzQnOiAgICA0LFxuXG4gICAgJ2Jvb2wnOiAgICAgMSxcbiAgICAnYnZlYzInOiAgICAyLFxuICAgICdidmVjMyc6ICAgIDMsXG4gICAgJ2J2ZWM0JzogICAgNCxcblxuICAgICdtYXQyJzogICAgIDQsXG4gICAgJ21hdDMnOiAgICAgOSxcbiAgICAnbWF0NCc6ICAgICAxNixcblxuICAgICdzYW1wbGVyMkQnOiAgMVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IG1hcFNpemU7XG4iLCJcblxudmFyIG1hcFNpemUgPSBmdW5jdGlvbihnbCwgdHlwZSkgXG57XG4gICAgaWYoIUdMX1RBQkxFKSBcbiAgICB7XG4gICAgICAgIHZhciB0eXBlTmFtZXMgPSBPYmplY3Qua2V5cyhHTF9UT19HTFNMX1RZUEVTKTtcblxuICAgICAgICBHTF9UQUJMRSA9IHt9O1xuXG4gICAgICAgIGZvcih2YXIgaSA9IDA7IGkgPCB0eXBlTmFtZXMubGVuZ3RoOyArK2kpIFxuICAgICAgICB7XG4gICAgICAgICAgICB2YXIgdG4gPSB0eXBlTmFtZXNbaV07XG4gICAgICAgICAgICBHTF9UQUJMRVsgZ2xbdG5dIF0gPSBHTF9UT19HTFNMX1RZUEVTW3RuXTtcbiAgICAgICAgfVxuICAgIH1cblxuICByZXR1cm4gR0xfVEFCTEVbdHlwZV07XG59XG5cbnZhciBHTF9UQUJMRSA9IG51bGw7XG5cbnZhciBHTF9UT19HTFNMX1RZUEVTID0ge1xuICAnRkxPQVQnOiAgICAgICAnZmxvYXQnLFxuICAnRkxPQVRfVkVDMic6ICAndmVjMicsXG4gICdGTE9BVF9WRUMzJzogICd2ZWMzJyxcbiAgJ0ZMT0FUX1ZFQzQnOiAgJ3ZlYzQnLFxuXG4gICdJTlQnOiAgICAgICAgICdpbnQnLFxuICAnSU5UX1ZFQzInOiAgICAnaXZlYzInLFxuICAnSU5UX1ZFQzMnOiAgICAnaXZlYzMnLFxuICAnSU5UX1ZFQzQnOiAgICAnaXZlYzQnLFxuICBcbiAgJ0JPT0wnOiAgICAgICAgJ2Jvb2wnLFxuICAnQk9PTF9WRUMyJzogICAnYnZlYzInLFxuICAnQk9PTF9WRUMzJzogICAnYnZlYzMnLFxuICAnQk9PTF9WRUM0JzogICAnYnZlYzQnLFxuICBcbiAgJ0ZMT0FUX01BVDInOiAgJ21hdDInLFxuICAnRkxPQVRfTUFUMyc6ICAnbWF0MycsXG4gICdGTE9BVF9NQVQ0JzogICdtYXQ0JyxcbiAgXG4gICdTQU1QTEVSXzJEJzogICdzYW1wbGVyMkQnICBcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBtYXBTaXplO1xuIiwiLyohXG4gKiBhc3luY1xuICogaHR0cHM6Ly9naXRodWIuY29tL2Nhb2xhbi9hc3luY1xuICpcbiAqIENvcHlyaWdodCAyMDEwLTIwMTQgQ2FvbGFuIE1jTWFob25cbiAqIFJlbGVhc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZVxuICovXG4oZnVuY3Rpb24gKCkge1xuXG4gICAgdmFyIGFzeW5jID0ge307XG4gICAgZnVuY3Rpb24gbm9vcCgpIHt9XG4gICAgZnVuY3Rpb24gaWRlbnRpdHkodikge1xuICAgICAgICByZXR1cm4gdjtcbiAgICB9XG4gICAgZnVuY3Rpb24gdG9Cb29sKHYpIHtcbiAgICAgICAgcmV0dXJuICEhdjtcbiAgICB9XG4gICAgZnVuY3Rpb24gbm90SWQodikge1xuICAgICAgICByZXR1cm4gIXY7XG4gICAgfVxuXG4gICAgLy8gZ2xvYmFsIG9uIHRoZSBzZXJ2ZXIsIHdpbmRvdyBpbiB0aGUgYnJvd3NlclxuICAgIHZhciBwcmV2aW91c19hc3luYztcblxuICAgIC8vIEVzdGFibGlzaCB0aGUgcm9vdCBvYmplY3QsIGB3aW5kb3dgIChgc2VsZmApIGluIHRoZSBicm93c2VyLCBgZ2xvYmFsYFxuICAgIC8vIG9uIHRoZSBzZXJ2ZXIsIG9yIGB0aGlzYCBpbiBzb21lIHZpcnR1YWwgbWFjaGluZXMuIFdlIHVzZSBgc2VsZmBcbiAgICAvLyBpbnN0ZWFkIG9mIGB3aW5kb3dgIGZvciBgV2ViV29ya2VyYCBzdXBwb3J0LlxuICAgIHZhciByb290ID0gdHlwZW9mIHNlbGYgPT09ICdvYmplY3QnICYmIHNlbGYuc2VsZiA9PT0gc2VsZiAmJiBzZWxmIHx8XG4gICAgICAgICAgICB0eXBlb2YgZ2xvYmFsID09PSAnb2JqZWN0JyAmJiBnbG9iYWwuZ2xvYmFsID09PSBnbG9iYWwgJiYgZ2xvYmFsIHx8XG4gICAgICAgICAgICB0aGlzO1xuXG4gICAgaWYgKHJvb3QgIT0gbnVsbCkge1xuICAgICAgICBwcmV2aW91c19hc3luYyA9IHJvb3QuYXN5bmM7XG4gICAgfVxuXG4gICAgYXN5bmMubm9Db25mbGljdCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcm9vdC5hc3luYyA9IHByZXZpb3VzX2FzeW5jO1xuICAgICAgICByZXR1cm4gYXN5bmM7XG4gICAgfTtcblxuICAgIGZ1bmN0aW9uIG9ubHlfb25jZShmbikge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICBpZiAoZm4gPT09IG51bGwpIHRocm93IG5ldyBFcnJvcihcIkNhbGxiYWNrIHdhcyBhbHJlYWR5IGNhbGxlZC5cIik7XG4gICAgICAgICAgICBmbi5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgICAgICAgICAgZm4gPSBudWxsO1xuICAgICAgICB9O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIF9vbmNlKGZuKSB7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIGlmIChmbiA9PT0gbnVsbCkgcmV0dXJuO1xuICAgICAgICAgICAgZm4uYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICAgICAgICAgIGZuID0gbnVsbDtcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICAvLy8vIGNyb3NzLWJyb3dzZXIgY29tcGF0aWJsaXR5IGZ1bmN0aW9ucyAvLy8vXG5cbiAgICB2YXIgX3RvU3RyaW5nID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZztcblxuICAgIHZhciBfaXNBcnJheSA9IEFycmF5LmlzQXJyYXkgfHwgZnVuY3Rpb24gKG9iaikge1xuICAgICAgICByZXR1cm4gX3RvU3RyaW5nLmNhbGwob2JqKSA9PT0gJ1tvYmplY3QgQXJyYXldJztcbiAgICB9O1xuXG4gICAgLy8gUG9ydGVkIGZyb20gdW5kZXJzY29yZS5qcyBpc09iamVjdFxuICAgIHZhciBfaXNPYmplY3QgPSBmdW5jdGlvbihvYmopIHtcbiAgICAgICAgdmFyIHR5cGUgPSB0eXBlb2Ygb2JqO1xuICAgICAgICByZXR1cm4gdHlwZSA9PT0gJ2Z1bmN0aW9uJyB8fCB0eXBlID09PSAnb2JqZWN0JyAmJiAhIW9iajtcbiAgICB9O1xuXG4gICAgZnVuY3Rpb24gX2lzQXJyYXlMaWtlKGFycikge1xuICAgICAgICByZXR1cm4gX2lzQXJyYXkoYXJyKSB8fCAoXG4gICAgICAgICAgICAvLyBoYXMgYSBwb3NpdGl2ZSBpbnRlZ2VyIGxlbmd0aCBwcm9wZXJ0eVxuICAgICAgICAgICAgdHlwZW9mIGFyci5sZW5ndGggPT09IFwibnVtYmVyXCIgJiZcbiAgICAgICAgICAgIGFyci5sZW5ndGggPj0gMCAmJlxuICAgICAgICAgICAgYXJyLmxlbmd0aCAlIDEgPT09IDBcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBfYXJyYXlFYWNoKGFyciwgaXRlcmF0b3IpIHtcbiAgICAgICAgdmFyIGluZGV4ID0gLTEsXG4gICAgICAgICAgICBsZW5ndGggPSBhcnIubGVuZ3RoO1xuXG4gICAgICAgIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgICAgICAgICBpdGVyYXRvcihhcnJbaW5kZXhdLCBpbmRleCwgYXJyKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIF9tYXAoYXJyLCBpdGVyYXRvcikge1xuICAgICAgICB2YXIgaW5kZXggPSAtMSxcbiAgICAgICAgICAgIGxlbmd0aCA9IGFyci5sZW5ndGgsXG4gICAgICAgICAgICByZXN1bHQgPSBBcnJheShsZW5ndGgpO1xuXG4gICAgICAgIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgICAgICAgICByZXN1bHRbaW5kZXhdID0gaXRlcmF0b3IoYXJyW2luZGV4XSwgaW5kZXgsIGFycik7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBfcmFuZ2UoY291bnQpIHtcbiAgICAgICAgcmV0dXJuIF9tYXAoQXJyYXkoY291bnQpLCBmdW5jdGlvbiAodiwgaSkgeyByZXR1cm4gaTsgfSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gX3JlZHVjZShhcnIsIGl0ZXJhdG9yLCBtZW1vKSB7XG4gICAgICAgIF9hcnJheUVhY2goYXJyLCBmdW5jdGlvbiAoeCwgaSwgYSkge1xuICAgICAgICAgICAgbWVtbyA9IGl0ZXJhdG9yKG1lbW8sIHgsIGksIGEpO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIG1lbW87XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gX2ZvckVhY2hPZihvYmplY3QsIGl0ZXJhdG9yKSB7XG4gICAgICAgIF9hcnJheUVhY2goX2tleXMob2JqZWN0KSwgZnVuY3Rpb24gKGtleSkge1xuICAgICAgICAgICAgaXRlcmF0b3Iob2JqZWN0W2tleV0sIGtleSk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIF9pbmRleE9mKGFyciwgaXRlbSkge1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFyci5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgaWYgKGFycltpXSA9PT0gaXRlbSkgcmV0dXJuIGk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIC0xO1xuICAgIH1cblxuICAgIHZhciBfa2V5cyA9IE9iamVjdC5rZXlzIHx8IGZ1bmN0aW9uIChvYmopIHtcbiAgICAgICAgdmFyIGtleXMgPSBbXTtcbiAgICAgICAgZm9yICh2YXIgayBpbiBvYmopIHtcbiAgICAgICAgICAgIGlmIChvYmouaGFzT3duUHJvcGVydHkoaykpIHtcbiAgICAgICAgICAgICAgICBrZXlzLnB1c2goayk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGtleXM7XG4gICAgfTtcblxuICAgIGZ1bmN0aW9uIF9rZXlJdGVyYXRvcihjb2xsKSB7XG4gICAgICAgIHZhciBpID0gLTE7XG4gICAgICAgIHZhciBsZW47XG4gICAgICAgIHZhciBrZXlzO1xuICAgICAgICBpZiAoX2lzQXJyYXlMaWtlKGNvbGwpKSB7XG4gICAgICAgICAgICBsZW4gPSBjb2xsLmxlbmd0aDtcbiAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbiBuZXh0KCkge1xuICAgICAgICAgICAgICAgIGkrKztcbiAgICAgICAgICAgICAgICByZXR1cm4gaSA8IGxlbiA/IGkgOiBudWxsO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGtleXMgPSBfa2V5cyhjb2xsKTtcbiAgICAgICAgICAgIGxlbiA9IGtleXMubGVuZ3RoO1xuICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIG5leHQoKSB7XG4gICAgICAgICAgICAgICAgaSsrO1xuICAgICAgICAgICAgICAgIHJldHVybiBpIDwgbGVuID8ga2V5c1tpXSA6IG51bGw7XG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gU2ltaWxhciB0byBFUzYncyByZXN0IHBhcmFtIChodHRwOi8vYXJpeWEub2ZpbGFicy5jb20vMjAxMy8wMy9lczYtYW5kLXJlc3QtcGFyYW1ldGVyLmh0bWwpXG4gICAgLy8gVGhpcyBhY2N1bXVsYXRlcyB0aGUgYXJndW1lbnRzIHBhc3NlZCBpbnRvIGFuIGFycmF5LCBhZnRlciBhIGdpdmVuIGluZGV4LlxuICAgIC8vIEZyb20gdW5kZXJzY29yZS5qcyAoaHR0cHM6Ly9naXRodWIuY29tL2phc2hrZW5hcy91bmRlcnNjb3JlL3B1bGwvMjE0MCkuXG4gICAgZnVuY3Rpb24gX3Jlc3RQYXJhbShmdW5jLCBzdGFydEluZGV4KSB7XG4gICAgICAgIHN0YXJ0SW5kZXggPSBzdGFydEluZGV4ID09IG51bGwgPyBmdW5jLmxlbmd0aCAtIDEgOiArc3RhcnRJbmRleDtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgdmFyIGxlbmd0aCA9IE1hdGgubWF4KGFyZ3VtZW50cy5sZW5ndGggLSBzdGFydEluZGV4LCAwKTtcbiAgICAgICAgICAgIHZhciByZXN0ID0gQXJyYXkobGVuZ3RoKTtcbiAgICAgICAgICAgIGZvciAodmFyIGluZGV4ID0gMDsgaW5kZXggPCBsZW5ndGg7IGluZGV4KyspIHtcbiAgICAgICAgICAgICAgICByZXN0W2luZGV4XSA9IGFyZ3VtZW50c1tpbmRleCArIHN0YXJ0SW5kZXhdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgc3dpdGNoIChzdGFydEluZGV4KSB7XG4gICAgICAgICAgICAgICAgY2FzZSAwOiByZXR1cm4gZnVuYy5jYWxsKHRoaXMsIHJlc3QpO1xuICAgICAgICAgICAgICAgIGNhc2UgMTogcmV0dXJuIGZ1bmMuY2FsbCh0aGlzLCBhcmd1bWVudHNbMF0sIHJlc3QpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gQ3VycmVudGx5IHVudXNlZCBidXQgaGFuZGxlIGNhc2VzIG91dHNpZGUgb2YgdGhlIHN3aXRjaCBzdGF0ZW1lbnQ6XG4gICAgICAgICAgICAvLyB2YXIgYXJncyA9IEFycmF5KHN0YXJ0SW5kZXggKyAxKTtcbiAgICAgICAgICAgIC8vIGZvciAoaW5kZXggPSAwOyBpbmRleCA8IHN0YXJ0SW5kZXg7IGluZGV4KyspIHtcbiAgICAgICAgICAgIC8vICAgICBhcmdzW2luZGV4XSA9IGFyZ3VtZW50c1tpbmRleF07XG4gICAgICAgICAgICAvLyB9XG4gICAgICAgICAgICAvLyBhcmdzW3N0YXJ0SW5kZXhdID0gcmVzdDtcbiAgICAgICAgICAgIC8vIHJldHVybiBmdW5jLmFwcGx5KHRoaXMsIGFyZ3MpO1xuICAgICAgICB9O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIF93aXRob3V0SW5kZXgoaXRlcmF0b3IpIHtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICh2YWx1ZSwgaW5kZXgsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICByZXR1cm4gaXRlcmF0b3IodmFsdWUsIGNhbGxiYWNrKTtcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICAvLy8vIGV4cG9ydGVkIGFzeW5jIG1vZHVsZSBmdW5jdGlvbnMgLy8vL1xuXG4gICAgLy8vLyBuZXh0VGljayBpbXBsZW1lbnRhdGlvbiB3aXRoIGJyb3dzZXItY29tcGF0aWJsZSBmYWxsYmFjayAvLy8vXG5cbiAgICAvLyBjYXB0dXJlIHRoZSBnbG9iYWwgcmVmZXJlbmNlIHRvIGd1YXJkIGFnYWluc3QgZmFrZVRpbWVyIG1vY2tzXG4gICAgdmFyIF9zZXRJbW1lZGlhdGUgPSB0eXBlb2Ygc2V0SW1tZWRpYXRlID09PSAnZnVuY3Rpb24nICYmIHNldEltbWVkaWF0ZTtcblxuICAgIHZhciBfZGVsYXkgPSBfc2V0SW1tZWRpYXRlID8gZnVuY3Rpb24oZm4pIHtcbiAgICAgICAgLy8gbm90IGEgZGlyZWN0IGFsaWFzIGZvciBJRTEwIGNvbXBhdGliaWxpdHlcbiAgICAgICAgX3NldEltbWVkaWF0ZShmbik7XG4gICAgfSA6IGZ1bmN0aW9uKGZuKSB7XG4gICAgICAgIHNldFRpbWVvdXQoZm4sIDApO1xuICAgIH07XG5cbiAgICBpZiAodHlwZW9mIHByb2Nlc3MgPT09ICdvYmplY3QnICYmIHR5cGVvZiBwcm9jZXNzLm5leHRUaWNrID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIGFzeW5jLm5leHRUaWNrID0gcHJvY2Vzcy5uZXh0VGljaztcbiAgICB9IGVsc2Uge1xuICAgICAgICBhc3luYy5uZXh0VGljayA9IF9kZWxheTtcbiAgICB9XG4gICAgYXN5bmMuc2V0SW1tZWRpYXRlID0gX3NldEltbWVkaWF0ZSA/IF9kZWxheSA6IGFzeW5jLm5leHRUaWNrO1xuXG5cbiAgICBhc3luYy5mb3JFYWNoID1cbiAgICBhc3luYy5lYWNoID0gZnVuY3Rpb24gKGFyciwgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgIHJldHVybiBhc3luYy5lYWNoT2YoYXJyLCBfd2l0aG91dEluZGV4KGl0ZXJhdG9yKSwgY2FsbGJhY2spO1xuICAgIH07XG5cbiAgICBhc3luYy5mb3JFYWNoU2VyaWVzID1cbiAgICBhc3luYy5lYWNoU2VyaWVzID0gZnVuY3Rpb24gKGFyciwgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgIHJldHVybiBhc3luYy5lYWNoT2ZTZXJpZXMoYXJyLCBfd2l0aG91dEluZGV4KGl0ZXJhdG9yKSwgY2FsbGJhY2spO1xuICAgIH07XG5cblxuICAgIGFzeW5jLmZvckVhY2hMaW1pdCA9XG4gICAgYXN5bmMuZWFjaExpbWl0ID0gZnVuY3Rpb24gKGFyciwgbGltaXQsIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICByZXR1cm4gX2VhY2hPZkxpbWl0KGxpbWl0KShhcnIsIF93aXRob3V0SW5kZXgoaXRlcmF0b3IpLCBjYWxsYmFjayk7XG4gICAgfTtcblxuICAgIGFzeW5jLmZvckVhY2hPZiA9XG4gICAgYXN5bmMuZWFjaE9mID0gZnVuY3Rpb24gKG9iamVjdCwgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgIGNhbGxiYWNrID0gX29uY2UoY2FsbGJhY2sgfHwgbm9vcCk7XG4gICAgICAgIG9iamVjdCA9IG9iamVjdCB8fCBbXTtcblxuICAgICAgICB2YXIgaXRlciA9IF9rZXlJdGVyYXRvcihvYmplY3QpO1xuICAgICAgICB2YXIga2V5LCBjb21wbGV0ZWQgPSAwO1xuXG4gICAgICAgIHdoaWxlICgoa2V5ID0gaXRlcigpKSAhPSBudWxsKSB7XG4gICAgICAgICAgICBjb21wbGV0ZWQgKz0gMTtcbiAgICAgICAgICAgIGl0ZXJhdG9yKG9iamVjdFtrZXldLCBrZXksIG9ubHlfb25jZShkb25lKSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoY29tcGxldGVkID09PSAwKSBjYWxsYmFjayhudWxsKTtcblxuICAgICAgICBmdW5jdGlvbiBkb25lKGVycikge1xuICAgICAgICAgICAgY29tcGxldGVkLS07XG4gICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIENoZWNrIGtleSBpcyBudWxsIGluIGNhc2UgaXRlcmF0b3IgaXNuJ3QgZXhoYXVzdGVkXG4gICAgICAgICAgICAvLyBhbmQgZG9uZSByZXNvbHZlZCBzeW5jaHJvbm91c2x5LlxuICAgICAgICAgICAgZWxzZSBpZiAoa2V5ID09PSBudWxsICYmIGNvbXBsZXRlZCA8PSAwKSB7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2sobnVsbCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgYXN5bmMuZm9yRWFjaE9mU2VyaWVzID1cbiAgICBhc3luYy5lYWNoT2ZTZXJpZXMgPSBmdW5jdGlvbiAob2JqLCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgY2FsbGJhY2sgPSBfb25jZShjYWxsYmFjayB8fCBub29wKTtcbiAgICAgICAgb2JqID0gb2JqIHx8IFtdO1xuICAgICAgICB2YXIgbmV4dEtleSA9IF9rZXlJdGVyYXRvcihvYmopO1xuICAgICAgICB2YXIga2V5ID0gbmV4dEtleSgpO1xuICAgICAgICBmdW5jdGlvbiBpdGVyYXRlKCkge1xuICAgICAgICAgICAgdmFyIHN5bmMgPSB0cnVlO1xuICAgICAgICAgICAgaWYgKGtleSA9PT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBjYWxsYmFjayhudWxsKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGl0ZXJhdG9yKG9ialtrZXldLCBrZXksIG9ubHlfb25jZShmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAga2V5ID0gbmV4dEtleSgpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoa2V5ID09PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gY2FsbGJhY2sobnVsbCk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3luYykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFzeW5jLnNldEltbWVkaWF0ZShpdGVyYXRlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlcmF0ZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSkpO1xuICAgICAgICAgICAgc3luYyA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGl0ZXJhdGUoKTtcbiAgICB9O1xuXG5cblxuICAgIGFzeW5jLmZvckVhY2hPZkxpbWl0ID1cbiAgICBhc3luYy5lYWNoT2ZMaW1pdCA9IGZ1bmN0aW9uIChvYmosIGxpbWl0LCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgX2VhY2hPZkxpbWl0KGxpbWl0KShvYmosIGl0ZXJhdG9yLCBjYWxsYmFjayk7XG4gICAgfTtcblxuICAgIGZ1bmN0aW9uIF9lYWNoT2ZMaW1pdChsaW1pdCkge1xuXG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAob2JqLCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIGNhbGxiYWNrID0gX29uY2UoY2FsbGJhY2sgfHwgbm9vcCk7XG4gICAgICAgICAgICBvYmogPSBvYmogfHwgW107XG4gICAgICAgICAgICB2YXIgbmV4dEtleSA9IF9rZXlJdGVyYXRvcihvYmopO1xuICAgICAgICAgICAgaWYgKGxpbWl0IDw9IDApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gY2FsbGJhY2sobnVsbCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB2YXIgZG9uZSA9IGZhbHNlO1xuICAgICAgICAgICAgdmFyIHJ1bm5pbmcgPSAwO1xuICAgICAgICAgICAgdmFyIGVycm9yZWQgPSBmYWxzZTtcblxuICAgICAgICAgICAgKGZ1bmN0aW9uIHJlcGxlbmlzaCAoKSB7XG4gICAgICAgICAgICAgICAgaWYgKGRvbmUgJiYgcnVubmluZyA8PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBjYWxsYmFjayhudWxsKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB3aGlsZSAocnVubmluZyA8IGxpbWl0ICYmICFlcnJvcmVkKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBrZXkgPSBuZXh0S2V5KCk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChrZXkgPT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRvbmUgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJ1bm5pbmcgPD0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKG51bGwpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJ1bm5pbmcgKz0gMTtcbiAgICAgICAgICAgICAgICAgICAgaXRlcmF0b3Iob2JqW2tleV0sIGtleSwgb25seV9vbmNlKGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJ1bm5pbmcgLT0gMTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVwbGVuaXNoKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KSgpO1xuICAgICAgICB9O1xuICAgIH1cblxuXG4gICAgZnVuY3Rpb24gZG9QYXJhbGxlbChmbikge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKG9iaiwgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICByZXR1cm4gZm4oYXN5bmMuZWFjaE9mLCBvYmosIGl0ZXJhdG9yLCBjYWxsYmFjayk7XG4gICAgICAgIH07XG4gICAgfVxuICAgIGZ1bmN0aW9uIGRvUGFyYWxsZWxMaW1pdChmbikge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKG9iaiwgbGltaXQsIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICAgICAgcmV0dXJuIGZuKF9lYWNoT2ZMaW1pdChsaW1pdCksIG9iaiwgaXRlcmF0b3IsIGNhbGxiYWNrKTtcbiAgICAgICAgfTtcbiAgICB9XG4gICAgZnVuY3Rpb24gZG9TZXJpZXMoZm4pIHtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChvYmosIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICAgICAgcmV0dXJuIGZuKGFzeW5jLmVhY2hPZlNlcmllcywgb2JqLCBpdGVyYXRvciwgY2FsbGJhY2spO1xuICAgICAgICB9O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIF9hc3luY01hcChlYWNoZm4sIGFyciwgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgIGNhbGxiYWNrID0gX29uY2UoY2FsbGJhY2sgfHwgbm9vcCk7XG4gICAgICAgIGFyciA9IGFyciB8fCBbXTtcbiAgICAgICAgdmFyIHJlc3VsdHMgPSBfaXNBcnJheUxpa2UoYXJyKSA/IFtdIDoge307XG4gICAgICAgIGVhY2hmbihhcnIsIGZ1bmN0aW9uICh2YWx1ZSwgaW5kZXgsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICBpdGVyYXRvcih2YWx1ZSwgZnVuY3Rpb24gKGVyciwgdikge1xuICAgICAgICAgICAgICAgIHJlc3VsdHNbaW5kZXhdID0gdjtcbiAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgIGNhbGxiYWNrKGVyciwgcmVzdWx0cyk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGFzeW5jLm1hcCA9IGRvUGFyYWxsZWwoX2FzeW5jTWFwKTtcbiAgICBhc3luYy5tYXBTZXJpZXMgPSBkb1NlcmllcyhfYXN5bmNNYXApO1xuICAgIGFzeW5jLm1hcExpbWl0ID0gZG9QYXJhbGxlbExpbWl0KF9hc3luY01hcCk7XG5cbiAgICAvLyByZWR1Y2Ugb25seSBoYXMgYSBzZXJpZXMgdmVyc2lvbiwgYXMgZG9pbmcgcmVkdWNlIGluIHBhcmFsbGVsIHdvbid0XG4gICAgLy8gd29yayBpbiBtYW55IHNpdHVhdGlvbnMuXG4gICAgYXN5bmMuaW5qZWN0ID1cbiAgICBhc3luYy5mb2xkbCA9XG4gICAgYXN5bmMucmVkdWNlID0gZnVuY3Rpb24gKGFyciwgbWVtbywgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgIGFzeW5jLmVhY2hPZlNlcmllcyhhcnIsIGZ1bmN0aW9uICh4LCBpLCBjYWxsYmFjaykge1xuICAgICAgICAgICAgaXRlcmF0b3IobWVtbywgeCwgZnVuY3Rpb24gKGVyciwgdikge1xuICAgICAgICAgICAgICAgIG1lbW8gPSB2O1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSwgZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgY2FsbGJhY2soZXJyLCBtZW1vKTtcbiAgICAgICAgfSk7XG4gICAgfTtcblxuICAgIGFzeW5jLmZvbGRyID1cbiAgICBhc3luYy5yZWR1Y2VSaWdodCA9IGZ1bmN0aW9uIChhcnIsIG1lbW8sIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICB2YXIgcmV2ZXJzZWQgPSBfbWFwKGFyciwgaWRlbnRpdHkpLnJldmVyc2UoKTtcbiAgICAgICAgYXN5bmMucmVkdWNlKHJldmVyc2VkLCBtZW1vLCBpdGVyYXRvciwgY2FsbGJhY2spO1xuICAgIH07XG5cbiAgICBhc3luYy50cmFuc2Zvcm0gPSBmdW5jdGlvbiAoYXJyLCBtZW1vLCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDMpIHtcbiAgICAgICAgICAgIGNhbGxiYWNrID0gaXRlcmF0b3I7XG4gICAgICAgICAgICBpdGVyYXRvciA9IG1lbW87XG4gICAgICAgICAgICBtZW1vID0gX2lzQXJyYXkoYXJyKSA/IFtdIDoge307XG4gICAgICAgIH1cblxuICAgICAgICBhc3luYy5lYWNoT2YoYXJyLCBmdW5jdGlvbih2LCBrLCBjYikge1xuICAgICAgICAgICAgaXRlcmF0b3IobWVtbywgdiwgaywgY2IpO1xuICAgICAgICB9LCBmdW5jdGlvbihlcnIpIHtcbiAgICAgICAgICAgIGNhbGxiYWNrKGVyciwgbWVtbyk7XG4gICAgICAgIH0pO1xuICAgIH07XG5cbiAgICBmdW5jdGlvbiBfZmlsdGVyKGVhY2hmbiwgYXJyLCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgdmFyIHJlc3VsdHMgPSBbXTtcbiAgICAgICAgZWFjaGZuKGFyciwgZnVuY3Rpb24gKHgsIGluZGV4LCBjYWxsYmFjaykge1xuICAgICAgICAgICAgaXRlcmF0b3IoeCwgZnVuY3Rpb24gKHYpIHtcbiAgICAgICAgICAgICAgICBpZiAodikge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHRzLnB1c2goe2luZGV4OiBpbmRleCwgdmFsdWU6IHh9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2FsbGJhY2soKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBjYWxsYmFjayhfbWFwKHJlc3VsdHMuc29ydChmdW5jdGlvbiAoYSwgYikge1xuICAgICAgICAgICAgICAgIHJldHVybiBhLmluZGV4IC0gYi5pbmRleDtcbiAgICAgICAgICAgIH0pLCBmdW5jdGlvbiAoeCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB4LnZhbHVlO1xuICAgICAgICAgICAgfSkpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBhc3luYy5zZWxlY3QgPVxuICAgIGFzeW5jLmZpbHRlciA9IGRvUGFyYWxsZWwoX2ZpbHRlcik7XG5cbiAgICBhc3luYy5zZWxlY3RMaW1pdCA9XG4gICAgYXN5bmMuZmlsdGVyTGltaXQgPSBkb1BhcmFsbGVsTGltaXQoX2ZpbHRlcik7XG5cbiAgICBhc3luYy5zZWxlY3RTZXJpZXMgPVxuICAgIGFzeW5jLmZpbHRlclNlcmllcyA9IGRvU2VyaWVzKF9maWx0ZXIpO1xuXG4gICAgZnVuY3Rpb24gX3JlamVjdChlYWNoZm4sIGFyciwgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgIF9maWx0ZXIoZWFjaGZuLCBhcnIsIGZ1bmN0aW9uKHZhbHVlLCBjYikge1xuICAgICAgICAgICAgaXRlcmF0b3IodmFsdWUsIGZ1bmN0aW9uKHYpIHtcbiAgICAgICAgICAgICAgICBjYighdik7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSwgY2FsbGJhY2spO1xuICAgIH1cbiAgICBhc3luYy5yZWplY3QgPSBkb1BhcmFsbGVsKF9yZWplY3QpO1xuICAgIGFzeW5jLnJlamVjdExpbWl0ID0gZG9QYXJhbGxlbExpbWl0KF9yZWplY3QpO1xuICAgIGFzeW5jLnJlamVjdFNlcmllcyA9IGRvU2VyaWVzKF9yZWplY3QpO1xuXG4gICAgZnVuY3Rpb24gX2NyZWF0ZVRlc3RlcihlYWNoZm4sIGNoZWNrLCBnZXRSZXN1bHQpIHtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKGFyciwgbGltaXQsIGl0ZXJhdG9yLCBjYikge1xuICAgICAgICAgICAgZnVuY3Rpb24gZG9uZSgpIHtcbiAgICAgICAgICAgICAgICBpZiAoY2IpIGNiKGdldFJlc3VsdChmYWxzZSwgdm9pZCAwKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmdW5jdGlvbiBpdGVyYXRlZSh4LCBfLCBjYWxsYmFjaykge1xuICAgICAgICAgICAgICAgIGlmICghY2IpIHJldHVybiBjYWxsYmFjaygpO1xuICAgICAgICAgICAgICAgIGl0ZXJhdG9yKHgsIGZ1bmN0aW9uICh2KSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChjYiAmJiBjaGVjayh2KSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY2IoZ2V0UmVzdWx0KHRydWUsIHgpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNiID0gaXRlcmF0b3IgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPiAzKSB7XG4gICAgICAgICAgICAgICAgZWFjaGZuKGFyciwgbGltaXQsIGl0ZXJhdGVlLCBkb25lKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgY2IgPSBpdGVyYXRvcjtcbiAgICAgICAgICAgICAgICBpdGVyYXRvciA9IGxpbWl0O1xuICAgICAgICAgICAgICAgIGVhY2hmbihhcnIsIGl0ZXJhdGVlLCBkb25lKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBhc3luYy5hbnkgPVxuICAgIGFzeW5jLnNvbWUgPSBfY3JlYXRlVGVzdGVyKGFzeW5jLmVhY2hPZiwgdG9Cb29sLCBpZGVudGl0eSk7XG5cbiAgICBhc3luYy5zb21lTGltaXQgPSBfY3JlYXRlVGVzdGVyKGFzeW5jLmVhY2hPZkxpbWl0LCB0b0Jvb2wsIGlkZW50aXR5KTtcblxuICAgIGFzeW5jLmFsbCA9XG4gICAgYXN5bmMuZXZlcnkgPSBfY3JlYXRlVGVzdGVyKGFzeW5jLmVhY2hPZiwgbm90SWQsIG5vdElkKTtcblxuICAgIGFzeW5jLmV2ZXJ5TGltaXQgPSBfY3JlYXRlVGVzdGVyKGFzeW5jLmVhY2hPZkxpbWl0LCBub3RJZCwgbm90SWQpO1xuXG4gICAgZnVuY3Rpb24gX2ZpbmRHZXRSZXN1bHQodiwgeCkge1xuICAgICAgICByZXR1cm4geDtcbiAgICB9XG4gICAgYXN5bmMuZGV0ZWN0ID0gX2NyZWF0ZVRlc3Rlcihhc3luYy5lYWNoT2YsIGlkZW50aXR5LCBfZmluZEdldFJlc3VsdCk7XG4gICAgYXN5bmMuZGV0ZWN0U2VyaWVzID0gX2NyZWF0ZVRlc3Rlcihhc3luYy5lYWNoT2ZTZXJpZXMsIGlkZW50aXR5LCBfZmluZEdldFJlc3VsdCk7XG4gICAgYXN5bmMuZGV0ZWN0TGltaXQgPSBfY3JlYXRlVGVzdGVyKGFzeW5jLmVhY2hPZkxpbWl0LCBpZGVudGl0eSwgX2ZpbmRHZXRSZXN1bHQpO1xuXG4gICAgYXN5bmMuc29ydEJ5ID0gZnVuY3Rpb24gKGFyciwgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgIGFzeW5jLm1hcChhcnIsIGZ1bmN0aW9uICh4LCBjYWxsYmFjaykge1xuICAgICAgICAgICAgaXRlcmF0b3IoeCwgZnVuY3Rpb24gKGVyciwgY3JpdGVyaWEpIHtcbiAgICAgICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhudWxsLCB7dmFsdWU6IHgsIGNyaXRlcmlhOiBjcml0ZXJpYX0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LCBmdW5jdGlvbiAoZXJyLCByZXN1bHRzKSB7XG4gICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBjYWxsYmFjayhudWxsLCBfbWFwKHJlc3VsdHMuc29ydChjb21wYXJhdG9yKSwgZnVuY3Rpb24gKHgpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHgudmFsdWU7XG4gICAgICAgICAgICAgICAgfSkpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGZ1bmN0aW9uIGNvbXBhcmF0b3IobGVmdCwgcmlnaHQpIHtcbiAgICAgICAgICAgIHZhciBhID0gbGVmdC5jcml0ZXJpYSwgYiA9IHJpZ2h0LmNyaXRlcmlhO1xuICAgICAgICAgICAgcmV0dXJuIGEgPCBiID8gLTEgOiBhID4gYiA/IDEgOiAwO1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIGFzeW5jLmF1dG8gPSBmdW5jdGlvbiAodGFza3MsIGNvbmN1cnJlbmN5LCBjYWxsYmFjaykge1xuICAgICAgICBpZiAoIWNhbGxiYWNrKSB7XG4gICAgICAgICAgICAvLyBjb25jdXJyZW5jeSBpcyBvcHRpb25hbCwgc2hpZnQgdGhlIGFyZ3MuXG4gICAgICAgICAgICBjYWxsYmFjayA9IGNvbmN1cnJlbmN5O1xuICAgICAgICAgICAgY29uY3VycmVuY3kgPSBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGNhbGxiYWNrID0gX29uY2UoY2FsbGJhY2sgfHwgbm9vcCk7XG4gICAgICAgIHZhciBrZXlzID0gX2tleXModGFza3MpO1xuICAgICAgICB2YXIgcmVtYWluaW5nVGFza3MgPSBrZXlzLmxlbmd0aDtcbiAgICAgICAgaWYgKCFyZW1haW5pbmdUYXNrcykge1xuICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKG51bGwpO1xuICAgICAgICB9XG4gICAgICAgIGlmICghY29uY3VycmVuY3kpIHtcbiAgICAgICAgICAgIGNvbmN1cnJlbmN5ID0gcmVtYWluaW5nVGFza3M7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgcmVzdWx0cyA9IHt9O1xuICAgICAgICB2YXIgcnVubmluZ1Rhc2tzID0gMDtcblxuICAgICAgICB2YXIgbGlzdGVuZXJzID0gW107XG4gICAgICAgIGZ1bmN0aW9uIGFkZExpc3RlbmVyKGZuKSB7XG4gICAgICAgICAgICBsaXN0ZW5lcnMudW5zaGlmdChmbik7XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gcmVtb3ZlTGlzdGVuZXIoZm4pIHtcbiAgICAgICAgICAgIHZhciBpZHggPSBfaW5kZXhPZihsaXN0ZW5lcnMsIGZuKTtcbiAgICAgICAgICAgIGlmIChpZHggPj0gMCkgbGlzdGVuZXJzLnNwbGljZShpZHgsIDEpO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIHRhc2tDb21wbGV0ZSgpIHtcbiAgICAgICAgICAgIHJlbWFpbmluZ1Rhc2tzLS07XG4gICAgICAgICAgICBfYXJyYXlFYWNoKGxpc3RlbmVycy5zbGljZSgwKSwgZnVuY3Rpb24gKGZuKSB7XG4gICAgICAgICAgICAgICAgZm4oKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgYWRkTGlzdGVuZXIoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgaWYgKCFyZW1haW5pbmdUYXNrcykge1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrKG51bGwsIHJlc3VsdHMpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICBfYXJyYXlFYWNoKGtleXMsIGZ1bmN0aW9uIChrKSB7XG4gICAgICAgICAgICB2YXIgdGFzayA9IF9pc0FycmF5KHRhc2tzW2tdKSA/IHRhc2tzW2tdOiBbdGFza3Nba11dO1xuICAgICAgICAgICAgdmFyIHRhc2tDYWxsYmFjayA9IF9yZXN0UGFyYW0oZnVuY3Rpb24oZXJyLCBhcmdzKSB7XG4gICAgICAgICAgICAgICAgcnVubmluZ1Rhc2tzLS07XG4gICAgICAgICAgICAgICAgaWYgKGFyZ3MubGVuZ3RoIDw9IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgYXJncyA9IGFyZ3NbMF07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHNhZmVSZXN1bHRzID0ge307XG4gICAgICAgICAgICAgICAgICAgIF9mb3JFYWNoT2YocmVzdWx0cywgZnVuY3Rpb24odmFsLCBya2V5KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzYWZlUmVzdWx0c1tya2V5XSA9IHZhbDtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIHNhZmVSZXN1bHRzW2tdID0gYXJncztcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soZXJyLCBzYWZlUmVzdWx0cyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHRzW2tdID0gYXJncztcbiAgICAgICAgICAgICAgICAgICAgYXN5bmMuc2V0SW1tZWRpYXRlKHRhc2tDb21wbGV0ZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB2YXIgcmVxdWlyZXMgPSB0YXNrLnNsaWNlKDAsIHRhc2subGVuZ3RoIC0gMSk7XG4gICAgICAgICAgICAvLyBwcmV2ZW50IGRlYWQtbG9ja3NcbiAgICAgICAgICAgIHZhciBsZW4gPSByZXF1aXJlcy5sZW5ndGg7XG4gICAgICAgICAgICB2YXIgZGVwO1xuICAgICAgICAgICAgd2hpbGUgKGxlbi0tKSB7XG4gICAgICAgICAgICAgICAgaWYgKCEoZGVwID0gdGFza3NbcmVxdWlyZXNbbGVuXV0pKSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignSGFzIGluZXhpc3RhbnQgZGVwZW5kZW5jeScpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoX2lzQXJyYXkoZGVwKSAmJiBfaW5kZXhPZihkZXAsIGspID49IDApIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdIYXMgY3ljbGljIGRlcGVuZGVuY2llcycpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZ1bmN0aW9uIHJlYWR5KCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBydW5uaW5nVGFza3MgPCBjb25jdXJyZW5jeSAmJiBfcmVkdWNlKHJlcXVpcmVzLCBmdW5jdGlvbiAoYSwgeCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gKGEgJiYgcmVzdWx0cy5oYXNPd25Qcm9wZXJ0eSh4KSk7XG4gICAgICAgICAgICAgICAgfSwgdHJ1ZSkgJiYgIXJlc3VsdHMuaGFzT3duUHJvcGVydHkoayk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAocmVhZHkoKSkge1xuICAgICAgICAgICAgICAgIHJ1bm5pbmdUYXNrcysrO1xuICAgICAgICAgICAgICAgIHRhc2tbdGFzay5sZW5ndGggLSAxXSh0YXNrQ2FsbGJhY2ssIHJlc3VsdHMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgYWRkTGlzdGVuZXIobGlzdGVuZXIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZnVuY3Rpb24gbGlzdGVuZXIoKSB7XG4gICAgICAgICAgICAgICAgaWYgKHJlYWR5KCkpIHtcbiAgICAgICAgICAgICAgICAgICAgcnVubmluZ1Rhc2tzKys7XG4gICAgICAgICAgICAgICAgICAgIHJlbW92ZUxpc3RlbmVyKGxpc3RlbmVyKTtcbiAgICAgICAgICAgICAgICAgICAgdGFza1t0YXNrLmxlbmd0aCAtIDFdKHRhc2tDYWxsYmFjaywgcmVzdWx0cyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9O1xuXG5cblxuICAgIGFzeW5jLnJldHJ5ID0gZnVuY3Rpb24odGltZXMsIHRhc2ssIGNhbGxiYWNrKSB7XG4gICAgICAgIHZhciBERUZBVUxUX1RJTUVTID0gNTtcbiAgICAgICAgdmFyIERFRkFVTFRfSU5URVJWQUwgPSAwO1xuXG4gICAgICAgIHZhciBhdHRlbXB0cyA9IFtdO1xuXG4gICAgICAgIHZhciBvcHRzID0ge1xuICAgICAgICAgICAgdGltZXM6IERFRkFVTFRfVElNRVMsXG4gICAgICAgICAgICBpbnRlcnZhbDogREVGQVVMVF9JTlRFUlZBTFxuICAgICAgICB9O1xuXG4gICAgICAgIGZ1bmN0aW9uIHBhcnNlVGltZXMoYWNjLCB0KXtcbiAgICAgICAgICAgIGlmKHR5cGVvZiB0ID09PSAnbnVtYmVyJyl7XG4gICAgICAgICAgICAgICAgYWNjLnRpbWVzID0gcGFyc2VJbnQodCwgMTApIHx8IERFRkFVTFRfVElNRVM7XG4gICAgICAgICAgICB9IGVsc2UgaWYodHlwZW9mIHQgPT09ICdvYmplY3QnKXtcbiAgICAgICAgICAgICAgICBhY2MudGltZXMgPSBwYXJzZUludCh0LnRpbWVzLCAxMCkgfHwgREVGQVVMVF9USU1FUztcbiAgICAgICAgICAgICAgICBhY2MuaW50ZXJ2YWwgPSBwYXJzZUludCh0LmludGVydmFsLCAxMCkgfHwgREVGQVVMVF9JTlRFUlZBTDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdVbnN1cHBvcnRlZCBhcmd1bWVudCB0eXBlIGZvciBcXCd0aW1lc1xcJzogJyArIHR5cGVvZiB0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBsZW5ndGggPSBhcmd1bWVudHMubGVuZ3RoO1xuICAgICAgICBpZiAobGVuZ3RoIDwgMSB8fCBsZW5ndGggPiAzKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgYXJndW1lbnRzIC0gbXVzdCBiZSBlaXRoZXIgKHRhc2spLCAodGFzaywgY2FsbGJhY2spLCAodGltZXMsIHRhc2spIG9yICh0aW1lcywgdGFzaywgY2FsbGJhY2spJyk7XG4gICAgICAgIH0gZWxzZSBpZiAobGVuZ3RoIDw9IDIgJiYgdHlwZW9mIHRpbWVzID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICBjYWxsYmFjayA9IHRhc2s7XG4gICAgICAgICAgICB0YXNrID0gdGltZXM7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHR5cGVvZiB0aW1lcyAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgcGFyc2VUaW1lcyhvcHRzLCB0aW1lcyk7XG4gICAgICAgIH1cbiAgICAgICAgb3B0cy5jYWxsYmFjayA9IGNhbGxiYWNrO1xuICAgICAgICBvcHRzLnRhc2sgPSB0YXNrO1xuXG4gICAgICAgIGZ1bmN0aW9uIHdyYXBwZWRUYXNrKHdyYXBwZWRDYWxsYmFjaywgd3JhcHBlZFJlc3VsdHMpIHtcbiAgICAgICAgICAgIGZ1bmN0aW9uIHJldHJ5QXR0ZW1wdCh0YXNrLCBmaW5hbEF0dGVtcHQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24oc2VyaWVzQ2FsbGJhY2spIHtcbiAgICAgICAgICAgICAgICAgICAgdGFzayhmdW5jdGlvbihlcnIsIHJlc3VsdCl7XG4gICAgICAgICAgICAgICAgICAgICAgICBzZXJpZXNDYWxsYmFjayghZXJyIHx8IGZpbmFsQXR0ZW1wdCwge2VycjogZXJyLCByZXN1bHQ6IHJlc3VsdH0pO1xuICAgICAgICAgICAgICAgICAgICB9LCB3cmFwcGVkUmVzdWx0cyk7XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZnVuY3Rpb24gcmV0cnlJbnRlcnZhbChpbnRlcnZhbCl7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKHNlcmllc0NhbGxiYWNrKXtcbiAgICAgICAgICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpe1xuICAgICAgICAgICAgICAgICAgICAgICAgc2VyaWVzQ2FsbGJhY2sobnVsbCk7XG4gICAgICAgICAgICAgICAgICAgIH0sIGludGVydmFsKTtcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB3aGlsZSAob3B0cy50aW1lcykge1xuXG4gICAgICAgICAgICAgICAgdmFyIGZpbmFsQXR0ZW1wdCA9ICEob3B0cy50aW1lcy09MSk7XG4gICAgICAgICAgICAgICAgYXR0ZW1wdHMucHVzaChyZXRyeUF0dGVtcHQob3B0cy50YXNrLCBmaW5hbEF0dGVtcHQpKTtcbiAgICAgICAgICAgICAgICBpZighZmluYWxBdHRlbXB0ICYmIG9wdHMuaW50ZXJ2YWwgPiAwKXtcbiAgICAgICAgICAgICAgICAgICAgYXR0ZW1wdHMucHVzaChyZXRyeUludGVydmFsKG9wdHMuaW50ZXJ2YWwpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGFzeW5jLnNlcmllcyhhdHRlbXB0cywgZnVuY3Rpb24oZG9uZSwgZGF0YSl7XG4gICAgICAgICAgICAgICAgZGF0YSA9IGRhdGFbZGF0YS5sZW5ndGggLSAxXTtcbiAgICAgICAgICAgICAgICAod3JhcHBlZENhbGxiYWNrIHx8IG9wdHMuY2FsbGJhY2spKGRhdGEuZXJyLCBkYXRhLnJlc3VsdCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIElmIGEgY2FsbGJhY2sgaXMgcGFzc2VkLCBydW4gdGhpcyBhcyBhIGNvbnRyb2xsIGZsb3dcbiAgICAgICAgcmV0dXJuIG9wdHMuY2FsbGJhY2sgPyB3cmFwcGVkVGFzaygpIDogd3JhcHBlZFRhc2s7XG4gICAgfTtcblxuICAgIGFzeW5jLndhdGVyZmFsbCA9IGZ1bmN0aW9uICh0YXNrcywgY2FsbGJhY2spIHtcbiAgICAgICAgY2FsbGJhY2sgPSBfb25jZShjYWxsYmFjayB8fCBub29wKTtcbiAgICAgICAgaWYgKCFfaXNBcnJheSh0YXNrcykpIHtcbiAgICAgICAgICAgIHZhciBlcnIgPSBuZXcgRXJyb3IoJ0ZpcnN0IGFyZ3VtZW50IHRvIHdhdGVyZmFsbCBtdXN0IGJlIGFuIGFycmF5IG9mIGZ1bmN0aW9ucycpO1xuICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKGVycik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCF0YXNrcy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHJldHVybiBjYWxsYmFjaygpO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIHdyYXBJdGVyYXRvcihpdGVyYXRvcikge1xuICAgICAgICAgICAgcmV0dXJuIF9yZXN0UGFyYW0oZnVuY3Rpb24gKGVyciwgYXJncykge1xuICAgICAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2suYXBwbHkobnVsbCwgW2Vycl0uY29uY2F0KGFyZ3MpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBuZXh0ID0gaXRlcmF0b3IubmV4dCgpO1xuICAgICAgICAgICAgICAgICAgICBpZiAobmV4dCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgYXJncy5wdXNoKHdyYXBJdGVyYXRvcihuZXh0KSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhcmdzLnB1c2goY2FsbGJhY2spO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVuc3VyZUFzeW5jKGl0ZXJhdG9yKS5hcHBseShudWxsLCBhcmdzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICB3cmFwSXRlcmF0b3IoYXN5bmMuaXRlcmF0b3IodGFza3MpKSgpO1xuICAgIH07XG5cbiAgICBmdW5jdGlvbiBfcGFyYWxsZWwoZWFjaGZuLCB0YXNrcywgY2FsbGJhY2spIHtcbiAgICAgICAgY2FsbGJhY2sgPSBjYWxsYmFjayB8fCBub29wO1xuICAgICAgICB2YXIgcmVzdWx0cyA9IF9pc0FycmF5TGlrZSh0YXNrcykgPyBbXSA6IHt9O1xuXG4gICAgICAgIGVhY2hmbih0YXNrcywgZnVuY3Rpb24gKHRhc2ssIGtleSwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIHRhc2soX3Jlc3RQYXJhbShmdW5jdGlvbiAoZXJyLCBhcmdzKSB7XG4gICAgICAgICAgICAgICAgaWYgKGFyZ3MubGVuZ3RoIDw9IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgYXJncyA9IGFyZ3NbMF07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJlc3VsdHNba2V5XSA9IGFyZ3M7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgfSwgZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgY2FsbGJhY2soZXJyLCByZXN1bHRzKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgYXN5bmMucGFyYWxsZWwgPSBmdW5jdGlvbiAodGFza3MsIGNhbGxiYWNrKSB7XG4gICAgICAgIF9wYXJhbGxlbChhc3luYy5lYWNoT2YsIHRhc2tzLCBjYWxsYmFjayk7XG4gICAgfTtcblxuICAgIGFzeW5jLnBhcmFsbGVsTGltaXQgPSBmdW5jdGlvbih0YXNrcywgbGltaXQsIGNhbGxiYWNrKSB7XG4gICAgICAgIF9wYXJhbGxlbChfZWFjaE9mTGltaXQobGltaXQpLCB0YXNrcywgY2FsbGJhY2spO1xuICAgIH07XG5cbiAgICBhc3luYy5zZXJpZXMgPSBmdW5jdGlvbih0YXNrcywgY2FsbGJhY2spIHtcbiAgICAgICAgX3BhcmFsbGVsKGFzeW5jLmVhY2hPZlNlcmllcywgdGFza3MsIGNhbGxiYWNrKTtcbiAgICB9O1xuXG4gICAgYXN5bmMuaXRlcmF0b3IgPSBmdW5jdGlvbiAodGFza3MpIHtcbiAgICAgICAgZnVuY3Rpb24gbWFrZUNhbGxiYWNrKGluZGV4KSB7XG4gICAgICAgICAgICBmdW5jdGlvbiBmbigpIHtcbiAgICAgICAgICAgICAgICBpZiAodGFza3MubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgIHRhc2tzW2luZGV4XS5hcHBseShudWxsLCBhcmd1bWVudHMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gZm4ubmV4dCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZm4ubmV4dCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gKGluZGV4IDwgdGFza3MubGVuZ3RoIC0gMSkgPyBtYWtlQ2FsbGJhY2soaW5kZXggKyAxKTogbnVsbDtcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICByZXR1cm4gZm47XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG1ha2VDYWxsYmFjaygwKTtcbiAgICB9O1xuXG4gICAgYXN5bmMuYXBwbHkgPSBfcmVzdFBhcmFtKGZ1bmN0aW9uIChmbiwgYXJncykge1xuICAgICAgICByZXR1cm4gX3Jlc3RQYXJhbShmdW5jdGlvbiAoY2FsbEFyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybiBmbi5hcHBseShcbiAgICAgICAgICAgICAgICBudWxsLCBhcmdzLmNvbmNhdChjYWxsQXJncylcbiAgICAgICAgICAgICk7XG4gICAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgZnVuY3Rpb24gX2NvbmNhdChlYWNoZm4sIGFyciwgZm4sIGNhbGxiYWNrKSB7XG4gICAgICAgIHZhciByZXN1bHQgPSBbXTtcbiAgICAgICAgZWFjaGZuKGFyciwgZnVuY3Rpb24gKHgsIGluZGV4LCBjYikge1xuICAgICAgICAgICAgZm4oeCwgZnVuY3Rpb24gKGVyciwgeSkge1xuICAgICAgICAgICAgICAgIHJlc3VsdCA9IHJlc3VsdC5jb25jYXQoeSB8fCBbXSk7XG4gICAgICAgICAgICAgICAgY2IoZXJyKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICBjYWxsYmFjayhlcnIsIHJlc3VsdCk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBhc3luYy5jb25jYXQgPSBkb1BhcmFsbGVsKF9jb25jYXQpO1xuICAgIGFzeW5jLmNvbmNhdFNlcmllcyA9IGRvU2VyaWVzKF9jb25jYXQpO1xuXG4gICAgYXN5bmMud2hpbHN0ID0gZnVuY3Rpb24gKHRlc3QsIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICBjYWxsYmFjayA9IGNhbGxiYWNrIHx8IG5vb3A7XG4gICAgICAgIGlmICh0ZXN0KCkpIHtcbiAgICAgICAgICAgIHZhciBuZXh0ID0gX3Jlc3RQYXJhbShmdW5jdGlvbihlcnIsIGFyZ3MpIHtcbiAgICAgICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0ZXN0LmFwcGx5KHRoaXMsIGFyZ3MpKSB7XG4gICAgICAgICAgICAgICAgICAgIGl0ZXJhdG9yKG5leHQpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKG51bGwpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgaXRlcmF0b3IobmV4dCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjYWxsYmFjayhudWxsKTtcbiAgICAgICAgfVxuICAgIH07XG5cbiAgICBhc3luYy5kb1doaWxzdCA9IGZ1bmN0aW9uIChpdGVyYXRvciwgdGVzdCwgY2FsbGJhY2spIHtcbiAgICAgICAgdmFyIGNhbGxzID0gMDtcbiAgICAgICAgcmV0dXJuIGFzeW5jLndoaWxzdChmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIHJldHVybiArK2NhbGxzIDw9IDEgfHwgdGVzdC5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgICAgICB9LCBpdGVyYXRvciwgY2FsbGJhY2spO1xuICAgIH07XG5cbiAgICBhc3luYy51bnRpbCA9IGZ1bmN0aW9uICh0ZXN0LCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgcmV0dXJuIGFzeW5jLndoaWxzdChmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIHJldHVybiAhdGVzdC5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgICAgICB9LCBpdGVyYXRvciwgY2FsbGJhY2spO1xuICAgIH07XG5cbiAgICBhc3luYy5kb1VudGlsID0gZnVuY3Rpb24gKGl0ZXJhdG9yLCB0ZXN0LCBjYWxsYmFjaykge1xuICAgICAgICByZXR1cm4gYXN5bmMuZG9XaGlsc3QoaXRlcmF0b3IsIGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgcmV0dXJuICF0ZXN0LmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgICAgIH0sIGNhbGxiYWNrKTtcbiAgICB9O1xuXG4gICAgYXN5bmMuZHVyaW5nID0gZnVuY3Rpb24gKHRlc3QsIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICBjYWxsYmFjayA9IGNhbGxiYWNrIHx8IG5vb3A7XG5cbiAgICAgICAgdmFyIG5leHQgPSBfcmVzdFBhcmFtKGZ1bmN0aW9uKGVyciwgYXJncykge1xuICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGFyZ3MucHVzaChjaGVjayk7XG4gICAgICAgICAgICAgICAgdGVzdC5hcHBseSh0aGlzLCBhcmdzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgdmFyIGNoZWNrID0gZnVuY3Rpb24oZXJyLCB0cnV0aCkge1xuICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHRydXRoKSB7XG4gICAgICAgICAgICAgICAgaXRlcmF0b3IobmV4dCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrKG51bGwpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuXG4gICAgICAgIHRlc3QoY2hlY2spO1xuICAgIH07XG5cbiAgICBhc3luYy5kb0R1cmluZyA9IGZ1bmN0aW9uIChpdGVyYXRvciwgdGVzdCwgY2FsbGJhY2spIHtcbiAgICAgICAgdmFyIGNhbGxzID0gMDtcbiAgICAgICAgYXN5bmMuZHVyaW5nKGZ1bmN0aW9uKG5leHQpIHtcbiAgICAgICAgICAgIGlmIChjYWxscysrIDwgMSkge1xuICAgICAgICAgICAgICAgIG5leHQobnVsbCwgdHJ1ZSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRlc3QuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSwgaXRlcmF0b3IsIGNhbGxiYWNrKTtcbiAgICB9O1xuXG4gICAgZnVuY3Rpb24gX3F1ZXVlKHdvcmtlciwgY29uY3VycmVuY3ksIHBheWxvYWQpIHtcbiAgICAgICAgaWYgKGNvbmN1cnJlbmN5ID09IG51bGwpIHtcbiAgICAgICAgICAgIGNvbmN1cnJlbmN5ID0gMTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmKGNvbmN1cnJlbmN5ID09PSAwKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0NvbmN1cnJlbmN5IG11c3Qgbm90IGJlIHplcm8nKTtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBfaW5zZXJ0KHEsIGRhdGEsIHBvcywgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIGlmIChjYWxsYmFjayAhPSBudWxsICYmIHR5cGVvZiBjYWxsYmFjayAhPT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwidGFzayBjYWxsYmFjayBtdXN0IGJlIGEgZnVuY3Rpb25cIik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBxLnN0YXJ0ZWQgPSB0cnVlO1xuICAgICAgICAgICAgaWYgKCFfaXNBcnJheShkYXRhKSkge1xuICAgICAgICAgICAgICAgIGRhdGEgPSBbZGF0YV07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZihkYXRhLmxlbmd0aCA9PT0gMCAmJiBxLmlkbGUoKSkge1xuICAgICAgICAgICAgICAgIC8vIGNhbGwgZHJhaW4gaW1tZWRpYXRlbHkgaWYgdGhlcmUgYXJlIG5vIHRhc2tzXG4gICAgICAgICAgICAgICAgcmV0dXJuIGFzeW5jLnNldEltbWVkaWF0ZShmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgICAgcS5kcmFpbigpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgX2FycmF5RWFjaChkYXRhLCBmdW5jdGlvbih0YXNrKSB7XG4gICAgICAgICAgICAgICAgdmFyIGl0ZW0gPSB7XG4gICAgICAgICAgICAgICAgICAgIGRhdGE6IHRhc2ssXG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrOiBjYWxsYmFjayB8fCBub29wXG4gICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgIGlmIChwb3MpIHtcbiAgICAgICAgICAgICAgICAgICAgcS50YXNrcy51bnNoaWZ0KGl0ZW0pO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHEudGFza3MucHVzaChpdGVtKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAocS50YXNrcy5sZW5ndGggPT09IHEuY29uY3VycmVuY3kpIHtcbiAgICAgICAgICAgICAgICAgICAgcS5zYXR1cmF0ZWQoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGFzeW5jLnNldEltbWVkaWF0ZShxLnByb2Nlc3MpO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIF9uZXh0KHEsIHRhc2tzKSB7XG4gICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24oKXtcbiAgICAgICAgICAgICAgICB3b3JrZXJzIC09IDE7XG5cbiAgICAgICAgICAgICAgICB2YXIgcmVtb3ZlZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHZhciBhcmdzID0gYXJndW1lbnRzO1xuICAgICAgICAgICAgICAgIF9hcnJheUVhY2godGFza3MsIGZ1bmN0aW9uICh0YXNrKSB7XG4gICAgICAgICAgICAgICAgICAgIF9hcnJheUVhY2god29ya2Vyc0xpc3QsIGZ1bmN0aW9uICh3b3JrZXIsIGluZGV4KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAod29ya2VyID09PSB0YXNrICYmICFyZW1vdmVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd29ya2Vyc0xpc3Quc3BsaWNlKGluZGV4LCAxKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZW1vdmVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICAgICAgdGFzay5jYWxsYmFjay5hcHBseSh0YXNrLCBhcmdzKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBpZiAocS50YXNrcy5sZW5ndGggKyB3b3JrZXJzID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIHEuZHJhaW4oKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcS5wcm9jZXNzKCk7XG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIHdvcmtlcnMgPSAwO1xuICAgICAgICB2YXIgd29ya2Vyc0xpc3QgPSBbXTtcbiAgICAgICAgdmFyIHEgPSB7XG4gICAgICAgICAgICB0YXNrczogW10sXG4gICAgICAgICAgICBjb25jdXJyZW5jeTogY29uY3VycmVuY3ksXG4gICAgICAgICAgICBwYXlsb2FkOiBwYXlsb2FkLFxuICAgICAgICAgICAgc2F0dXJhdGVkOiBub29wLFxuICAgICAgICAgICAgZW1wdHk6IG5vb3AsXG4gICAgICAgICAgICBkcmFpbjogbm9vcCxcbiAgICAgICAgICAgIHN0YXJ0ZWQ6IGZhbHNlLFxuICAgICAgICAgICAgcGF1c2VkOiBmYWxzZSxcbiAgICAgICAgICAgIHB1c2g6IGZ1bmN0aW9uIChkYXRhLCBjYWxsYmFjaykge1xuICAgICAgICAgICAgICAgIF9pbnNlcnQocSwgZGF0YSwgZmFsc2UsIGNhbGxiYWNrKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBraWxsOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgcS5kcmFpbiA9IG5vb3A7XG4gICAgICAgICAgICAgICAgcS50YXNrcyA9IFtdO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHVuc2hpZnQ6IGZ1bmN0aW9uIChkYXRhLCBjYWxsYmFjaykge1xuICAgICAgICAgICAgICAgIF9pbnNlcnQocSwgZGF0YSwgdHJ1ZSwgY2FsbGJhY2spO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHByb2Nlc3M6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBpZiAoIXEucGF1c2VkICYmIHdvcmtlcnMgPCBxLmNvbmN1cnJlbmN5ICYmIHEudGFza3MubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgIHdoaWxlKHdvcmtlcnMgPCBxLmNvbmN1cnJlbmN5ICYmIHEudGFza3MubGVuZ3RoKXtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0YXNrcyA9IHEucGF5bG9hZCA/XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcS50YXNrcy5zcGxpY2UoMCwgcS5wYXlsb2FkKSA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcS50YXNrcy5zcGxpY2UoMCwgcS50YXNrcy5sZW5ndGgpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgZGF0YSA9IF9tYXAodGFza3MsIGZ1bmN0aW9uICh0YXNrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRhc2suZGF0YTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocS50YXNrcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBxLmVtcHR5KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB3b3JrZXJzICs9IDE7XG4gICAgICAgICAgICAgICAgICAgICAgICB3b3JrZXJzTGlzdC5wdXNoKHRhc2tzWzBdKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjYiA9IG9ubHlfb25jZShfbmV4dChxLCB0YXNrcykpO1xuICAgICAgICAgICAgICAgICAgICAgICAgd29ya2VyKGRhdGEsIGNiKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBsZW5ndGg6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcS50YXNrcy5sZW5ndGg7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcnVubmluZzogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB3b3JrZXJzO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHdvcmtlcnNMaXN0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHdvcmtlcnNMaXN0O1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGlkbGU6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBxLnRhc2tzLmxlbmd0aCArIHdvcmtlcnMgPT09IDA7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcGF1c2U6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBxLnBhdXNlZCA9IHRydWU7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcmVzdW1lOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgaWYgKHEucGF1c2VkID09PSBmYWxzZSkgeyByZXR1cm47IH1cbiAgICAgICAgICAgICAgICBxLnBhdXNlZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHZhciByZXN1bWVDb3VudCA9IE1hdGgubWluKHEuY29uY3VycmVuY3ksIHEudGFza3MubGVuZ3RoKTtcbiAgICAgICAgICAgICAgICAvLyBOZWVkIHRvIGNhbGwgcS5wcm9jZXNzIG9uY2UgcGVyIGNvbmN1cnJlbnRcbiAgICAgICAgICAgICAgICAvLyB3b3JrZXIgdG8gcHJlc2VydmUgZnVsbCBjb25jdXJyZW5jeSBhZnRlciBwYXVzZVxuICAgICAgICAgICAgICAgIGZvciAodmFyIHcgPSAxOyB3IDw9IHJlc3VtZUNvdW50OyB3KyspIHtcbiAgICAgICAgICAgICAgICAgICAgYXN5bmMuc2V0SW1tZWRpYXRlKHEucHJvY2Vzcyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gcTtcbiAgICB9XG5cbiAgICBhc3luYy5xdWV1ZSA9IGZ1bmN0aW9uICh3b3JrZXIsIGNvbmN1cnJlbmN5KSB7XG4gICAgICAgIHZhciBxID0gX3F1ZXVlKGZ1bmN0aW9uIChpdGVtcywgY2IpIHtcbiAgICAgICAgICAgIHdvcmtlcihpdGVtc1swXSwgY2IpO1xuICAgICAgICB9LCBjb25jdXJyZW5jeSwgMSk7XG5cbiAgICAgICAgcmV0dXJuIHE7XG4gICAgfTtcblxuICAgIGFzeW5jLnByaW9yaXR5UXVldWUgPSBmdW5jdGlvbiAod29ya2VyLCBjb25jdXJyZW5jeSkge1xuXG4gICAgICAgIGZ1bmN0aW9uIF9jb21wYXJlVGFza3MoYSwgYil7XG4gICAgICAgICAgICByZXR1cm4gYS5wcmlvcml0eSAtIGIucHJpb3JpdHk7XG4gICAgICAgIH1cblxuICAgICAgICBmdW5jdGlvbiBfYmluYXJ5U2VhcmNoKHNlcXVlbmNlLCBpdGVtLCBjb21wYXJlKSB7XG4gICAgICAgICAgICB2YXIgYmVnID0gLTEsXG4gICAgICAgICAgICAgICAgZW5kID0gc2VxdWVuY2UubGVuZ3RoIC0gMTtcbiAgICAgICAgICAgIHdoaWxlIChiZWcgPCBlbmQpIHtcbiAgICAgICAgICAgICAgICB2YXIgbWlkID0gYmVnICsgKChlbmQgLSBiZWcgKyAxKSA+Pj4gMSk7XG4gICAgICAgICAgICAgICAgaWYgKGNvbXBhcmUoaXRlbSwgc2VxdWVuY2VbbWlkXSkgPj0gMCkge1xuICAgICAgICAgICAgICAgICAgICBiZWcgPSBtaWQ7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgZW5kID0gbWlkIC0gMTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gYmVnO1xuICAgICAgICB9XG5cbiAgICAgICAgZnVuY3Rpb24gX2luc2VydChxLCBkYXRhLCBwcmlvcml0eSwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIGlmIChjYWxsYmFjayAhPSBudWxsICYmIHR5cGVvZiBjYWxsYmFjayAhPT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwidGFzayBjYWxsYmFjayBtdXN0IGJlIGEgZnVuY3Rpb25cIik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBxLnN0YXJ0ZWQgPSB0cnVlO1xuICAgICAgICAgICAgaWYgKCFfaXNBcnJheShkYXRhKSkge1xuICAgICAgICAgICAgICAgIGRhdGEgPSBbZGF0YV07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZihkYXRhLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICAgIC8vIGNhbGwgZHJhaW4gaW1tZWRpYXRlbHkgaWYgdGhlcmUgYXJlIG5vIHRhc2tzXG4gICAgICAgICAgICAgICAgcmV0dXJuIGFzeW5jLnNldEltbWVkaWF0ZShmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgICAgcS5kcmFpbigpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgX2FycmF5RWFjaChkYXRhLCBmdW5jdGlvbih0YXNrKSB7XG4gICAgICAgICAgICAgICAgdmFyIGl0ZW0gPSB7XG4gICAgICAgICAgICAgICAgICAgIGRhdGE6IHRhc2ssXG4gICAgICAgICAgICAgICAgICAgIHByaW9yaXR5OiBwcmlvcml0eSxcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2s6IHR5cGVvZiBjYWxsYmFjayA9PT0gJ2Z1bmN0aW9uJyA/IGNhbGxiYWNrIDogbm9vcFxuICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICBxLnRhc2tzLnNwbGljZShfYmluYXJ5U2VhcmNoKHEudGFza3MsIGl0ZW0sIF9jb21wYXJlVGFza3MpICsgMSwgMCwgaXRlbSk7XG5cbiAgICAgICAgICAgICAgICBpZiAocS50YXNrcy5sZW5ndGggPT09IHEuY29uY3VycmVuY3kpIHtcbiAgICAgICAgICAgICAgICAgICAgcS5zYXR1cmF0ZWQoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYXN5bmMuc2V0SW1tZWRpYXRlKHEucHJvY2Vzcyk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFN0YXJ0IHdpdGggYSBub3JtYWwgcXVldWVcbiAgICAgICAgdmFyIHEgPSBhc3luYy5xdWV1ZSh3b3JrZXIsIGNvbmN1cnJlbmN5KTtcblxuICAgICAgICAvLyBPdmVycmlkZSBwdXNoIHRvIGFjY2VwdCBzZWNvbmQgcGFyYW1ldGVyIHJlcHJlc2VudGluZyBwcmlvcml0eVxuICAgICAgICBxLnB1c2ggPSBmdW5jdGlvbiAoZGF0YSwgcHJpb3JpdHksIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICBfaW5zZXJ0KHEsIGRhdGEsIHByaW9yaXR5LCBjYWxsYmFjayk7XG4gICAgICAgIH07XG5cbiAgICAgICAgLy8gUmVtb3ZlIHVuc2hpZnQgZnVuY3Rpb25cbiAgICAgICAgZGVsZXRlIHEudW5zaGlmdDtcblxuICAgICAgICByZXR1cm4gcTtcbiAgICB9O1xuXG4gICAgYXN5bmMuY2FyZ28gPSBmdW5jdGlvbiAod29ya2VyLCBwYXlsb2FkKSB7XG4gICAgICAgIHJldHVybiBfcXVldWUod29ya2VyLCAxLCBwYXlsb2FkKTtcbiAgICB9O1xuXG4gICAgZnVuY3Rpb24gX2NvbnNvbGVfZm4obmFtZSkge1xuICAgICAgICByZXR1cm4gX3Jlc3RQYXJhbShmdW5jdGlvbiAoZm4sIGFyZ3MpIHtcbiAgICAgICAgICAgIGZuLmFwcGx5KG51bGwsIGFyZ3MuY29uY2F0KFtfcmVzdFBhcmFtKGZ1bmN0aW9uIChlcnIsIGFyZ3MpIHtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGNvbnNvbGUgPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb25zb2xlLmVycm9yKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihlcnIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKGNvbnNvbGVbbmFtZV0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIF9hcnJheUVhY2goYXJncywgZnVuY3Rpb24gKHgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlW25hbWVdKHgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KV0pKTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGFzeW5jLmxvZyA9IF9jb25zb2xlX2ZuKCdsb2cnKTtcbiAgICBhc3luYy5kaXIgPSBfY29uc29sZV9mbignZGlyJyk7XG4gICAgLyphc3luYy5pbmZvID0gX2NvbnNvbGVfZm4oJ2luZm8nKTtcbiAgICBhc3luYy53YXJuID0gX2NvbnNvbGVfZm4oJ3dhcm4nKTtcbiAgICBhc3luYy5lcnJvciA9IF9jb25zb2xlX2ZuKCdlcnJvcicpOyovXG5cbiAgICBhc3luYy5tZW1vaXplID0gZnVuY3Rpb24gKGZuLCBoYXNoZXIpIHtcbiAgICAgICAgdmFyIG1lbW8gPSB7fTtcbiAgICAgICAgdmFyIHF1ZXVlcyA9IHt9O1xuICAgICAgICBoYXNoZXIgPSBoYXNoZXIgfHwgaWRlbnRpdHk7XG4gICAgICAgIHZhciBtZW1vaXplZCA9IF9yZXN0UGFyYW0oZnVuY3Rpb24gbWVtb2l6ZWQoYXJncykge1xuICAgICAgICAgICAgdmFyIGNhbGxiYWNrID0gYXJncy5wb3AoKTtcbiAgICAgICAgICAgIHZhciBrZXkgPSBoYXNoZXIuYXBwbHkobnVsbCwgYXJncyk7XG4gICAgICAgICAgICBpZiAoa2V5IGluIG1lbW8pIHtcbiAgICAgICAgICAgICAgICBhc3luYy5zZXRJbW1lZGlhdGUoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjay5hcHBseShudWxsLCBtZW1vW2tleV0pO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoa2V5IGluIHF1ZXVlcykge1xuICAgICAgICAgICAgICAgIHF1ZXVlc1trZXldLnB1c2goY2FsbGJhY2spO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgcXVldWVzW2tleV0gPSBbY2FsbGJhY2tdO1xuICAgICAgICAgICAgICAgIGZuLmFwcGx5KG51bGwsIGFyZ3MuY29uY2F0KFtfcmVzdFBhcmFtKGZ1bmN0aW9uIChhcmdzKSB7XG4gICAgICAgICAgICAgICAgICAgIG1lbW9ba2V5XSA9IGFyZ3M7XG4gICAgICAgICAgICAgICAgICAgIHZhciBxID0gcXVldWVzW2tleV07XG4gICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBxdWV1ZXNba2V5XTtcbiAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDAsIGwgPSBxLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgcVtpXS5hcHBseShudWxsLCBhcmdzKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pXSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgbWVtb2l6ZWQubWVtbyA9IG1lbW87XG4gICAgICAgIG1lbW9pemVkLnVubWVtb2l6ZWQgPSBmbjtcbiAgICAgICAgcmV0dXJuIG1lbW9pemVkO1xuICAgIH07XG5cbiAgICBhc3luYy51bm1lbW9pemUgPSBmdW5jdGlvbiAoZm4pIHtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiAoZm4udW5tZW1vaXplZCB8fCBmbikuYXBwbHkobnVsbCwgYXJndW1lbnRzKTtcbiAgICAgICAgfTtcbiAgICB9O1xuXG4gICAgZnVuY3Rpb24gX3RpbWVzKG1hcHBlcikge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKGNvdW50LCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIG1hcHBlcihfcmFuZ2UoY291bnQpLCBpdGVyYXRvciwgY2FsbGJhY2spO1xuICAgICAgICB9O1xuICAgIH1cblxuICAgIGFzeW5jLnRpbWVzID0gX3RpbWVzKGFzeW5jLm1hcCk7XG4gICAgYXN5bmMudGltZXNTZXJpZXMgPSBfdGltZXMoYXN5bmMubWFwU2VyaWVzKTtcbiAgICBhc3luYy50aW1lc0xpbWl0ID0gZnVuY3Rpb24gKGNvdW50LCBsaW1pdCwgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgIHJldHVybiBhc3luYy5tYXBMaW1pdChfcmFuZ2UoY291bnQpLCBsaW1pdCwgaXRlcmF0b3IsIGNhbGxiYWNrKTtcbiAgICB9O1xuXG4gICAgYXN5bmMuc2VxID0gZnVuY3Rpb24gKC8qIGZ1bmN0aW9ucy4uLiAqLykge1xuICAgICAgICB2YXIgZm5zID0gYXJndW1lbnRzO1xuICAgICAgICByZXR1cm4gX3Jlc3RQYXJhbShmdW5jdGlvbiAoYXJncykge1xuICAgICAgICAgICAgdmFyIHRoYXQgPSB0aGlzO1xuXG4gICAgICAgICAgICB2YXIgY2FsbGJhY2sgPSBhcmdzW2FyZ3MubGVuZ3RoIC0gMV07XG4gICAgICAgICAgICBpZiAodHlwZW9mIGNhbGxiYWNrID09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICBhcmdzLnBvcCgpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBjYWxsYmFjayA9IG5vb3A7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGFzeW5jLnJlZHVjZShmbnMsIGFyZ3MsIGZ1bmN0aW9uIChuZXdhcmdzLCBmbiwgY2IpIHtcbiAgICAgICAgICAgICAgICBmbi5hcHBseSh0aGF0LCBuZXdhcmdzLmNvbmNhdChbX3Jlc3RQYXJhbShmdW5jdGlvbiAoZXJyLCBuZXh0YXJncykge1xuICAgICAgICAgICAgICAgICAgICBjYihlcnIsIG5leHRhcmdzKTtcbiAgICAgICAgICAgICAgICB9KV0pKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBmdW5jdGlvbiAoZXJyLCByZXN1bHRzKSB7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2suYXBwbHkodGhhdCwgW2Vycl0uY29uY2F0KHJlc3VsdHMpKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9O1xuXG4gICAgYXN5bmMuY29tcG9zZSA9IGZ1bmN0aW9uICgvKiBmdW5jdGlvbnMuLi4gKi8pIHtcbiAgICAgICAgcmV0dXJuIGFzeW5jLnNlcS5hcHBseShudWxsLCBBcnJheS5wcm90b3R5cGUucmV2ZXJzZS5jYWxsKGFyZ3VtZW50cykpO1xuICAgIH07XG5cblxuICAgIGZ1bmN0aW9uIF9hcHBseUVhY2goZWFjaGZuKSB7XG4gICAgICAgIHJldHVybiBfcmVzdFBhcmFtKGZ1bmN0aW9uKGZucywgYXJncykge1xuICAgICAgICAgICAgdmFyIGdvID0gX3Jlc3RQYXJhbShmdW5jdGlvbihhcmdzKSB7XG4gICAgICAgICAgICAgICAgdmFyIHRoYXQgPSB0aGlzO1xuICAgICAgICAgICAgICAgIHZhciBjYWxsYmFjayA9IGFyZ3MucG9wKCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGVhY2hmbihmbnMsIGZ1bmN0aW9uIChmbiwgXywgY2IpIHtcbiAgICAgICAgICAgICAgICAgICAgZm4uYXBwbHkodGhhdCwgYXJncy5jb25jYXQoW2NiXSkpO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgY2FsbGJhY2spO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBpZiAoYXJncy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZ28uYXBwbHkodGhpcywgYXJncyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZ287XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGFzeW5jLmFwcGx5RWFjaCA9IF9hcHBseUVhY2goYXN5bmMuZWFjaE9mKTtcbiAgICBhc3luYy5hcHBseUVhY2hTZXJpZXMgPSBfYXBwbHlFYWNoKGFzeW5jLmVhY2hPZlNlcmllcyk7XG5cblxuICAgIGFzeW5jLmZvcmV2ZXIgPSBmdW5jdGlvbiAoZm4sIGNhbGxiYWNrKSB7XG4gICAgICAgIHZhciBkb25lID0gb25seV9vbmNlKGNhbGxiYWNrIHx8IG5vb3ApO1xuICAgICAgICB2YXIgdGFzayA9IGVuc3VyZUFzeW5jKGZuKTtcbiAgICAgICAgZnVuY3Rpb24gbmV4dChlcnIpIHtcbiAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZG9uZShlcnIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGFzayhuZXh0KTtcbiAgICAgICAgfVxuICAgICAgICBuZXh0KCk7XG4gICAgfTtcblxuICAgIGZ1bmN0aW9uIGVuc3VyZUFzeW5jKGZuKSB7XG4gICAgICAgIHJldHVybiBfcmVzdFBhcmFtKGZ1bmN0aW9uIChhcmdzKSB7XG4gICAgICAgICAgICB2YXIgY2FsbGJhY2sgPSBhcmdzLnBvcCgpO1xuICAgICAgICAgICAgYXJncy5wdXNoKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICB2YXIgaW5uZXJBcmdzID0gYXJndW1lbnRzO1xuICAgICAgICAgICAgICAgIGlmIChzeW5jKSB7XG4gICAgICAgICAgICAgICAgICAgIGFzeW5jLnNldEltbWVkaWF0ZShmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjYWxsYmFjay5hcHBseShudWxsLCBpbm5lckFyZ3MpO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjay5hcHBseShudWxsLCBpbm5lckFyZ3MpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdmFyIHN5bmMgPSB0cnVlO1xuICAgICAgICAgICAgZm4uYXBwbHkodGhpcywgYXJncyk7XG4gICAgICAgICAgICBzeW5jID0gZmFsc2U7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGFzeW5jLmVuc3VyZUFzeW5jID0gZW5zdXJlQXN5bmM7XG5cbiAgICBhc3luYy5jb25zdGFudCA9IF9yZXN0UGFyYW0oZnVuY3Rpb24odmFsdWVzKSB7XG4gICAgICAgIHZhciBhcmdzID0gW251bGxdLmNvbmNhdCh2YWx1ZXMpO1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKGNhbGxiYWNrKSB7XG4gICAgICAgICAgICByZXR1cm4gY2FsbGJhY2suYXBwbHkodGhpcywgYXJncyk7XG4gICAgICAgIH07XG4gICAgfSk7XG5cbiAgICBhc3luYy53cmFwU3luYyA9XG4gICAgYXN5bmMuYXN5bmNpZnkgPSBmdW5jdGlvbiBhc3luY2lmeShmdW5jKSB7XG4gICAgICAgIHJldHVybiBfcmVzdFBhcmFtKGZ1bmN0aW9uIChhcmdzKSB7XG4gICAgICAgICAgICB2YXIgY2FsbGJhY2sgPSBhcmdzLnBvcCgpO1xuICAgICAgICAgICAgdmFyIHJlc3VsdDtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0ID0gZnVuYy5hcHBseSh0aGlzLCBhcmdzKTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gY2FsbGJhY2soZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBpZiByZXN1bHQgaXMgUHJvbWlzZSBvYmplY3RcbiAgICAgICAgICAgIGlmIChfaXNPYmplY3QocmVzdWx0KSAmJiB0eXBlb2YgcmVzdWx0LnRoZW4gPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICAgICAgICAgIHJlc3VsdC50aGVuKGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKG51bGwsIHZhbHVlKTtcbiAgICAgICAgICAgICAgICB9KVtcImNhdGNoXCJdKGZ1bmN0aW9uKGVycikge1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnIubWVzc2FnZSA/IGVyciA6IG5ldyBFcnJvcihlcnIpKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2sobnVsbCwgcmVzdWx0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfTtcblxuICAgIC8vIE5vZGUuanNcbiAgICBpZiAodHlwZW9mIG1vZHVsZSA9PT0gJ29iamVjdCcgJiYgbW9kdWxlLmV4cG9ydHMpIHtcbiAgICAgICAgbW9kdWxlLmV4cG9ydHMgPSBhc3luYztcbiAgICB9XG4gICAgLy8gQU1EIC8gUmVxdWlyZUpTXG4gICAgZWxzZSBpZiAodHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kKSB7XG4gICAgICAgIGRlZmluZShbXSwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIGFzeW5jO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgLy8gaW5jbHVkZWQgZGlyZWN0bHkgdmlhIDxzY3JpcHQ+IHRhZ1xuICAgIGVsc2Uge1xuICAgICAgICByb290LmFzeW5jID0gYXN5bmM7XG4gICAgfVxuXG59KCkpO1xuIiwiLy8gQ29weXJpZ2h0IEpveWVudCwgSW5jLiBhbmQgb3RoZXIgTm9kZSBjb250cmlidXRvcnMuXG4vL1xuLy8gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGFcbi8vIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGVcbi8vIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZ1xuLy8gd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLFxuLy8gZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdFxuLy8gcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlXG4vLyBmb2xsb3dpbmcgY29uZGl0aW9uczpcbi8vXG4vLyBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZFxuLy8gaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4vL1xuLy8gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTU1xuLy8gT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRlxuLy8gTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTlxuLy8gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sXG4vLyBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1Jcbi8vIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEVcbi8vIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG5cbi8vIHJlc29sdmVzIC4gYW5kIC4uIGVsZW1lbnRzIGluIGEgcGF0aCBhcnJheSB3aXRoIGRpcmVjdG9yeSBuYW1lcyB0aGVyZVxuLy8gbXVzdCBiZSBubyBzbGFzaGVzLCBlbXB0eSBlbGVtZW50cywgb3IgZGV2aWNlIG5hbWVzIChjOlxcKSBpbiB0aGUgYXJyYXlcbi8vIChzbyBhbHNvIG5vIGxlYWRpbmcgYW5kIHRyYWlsaW5nIHNsYXNoZXMgLSBpdCBkb2VzIG5vdCBkaXN0aW5ndWlzaFxuLy8gcmVsYXRpdmUgYW5kIGFic29sdXRlIHBhdGhzKVxuZnVuY3Rpb24gbm9ybWFsaXplQXJyYXkocGFydHMsIGFsbG93QWJvdmVSb290KSB7XG4gIC8vIGlmIHRoZSBwYXRoIHRyaWVzIHRvIGdvIGFib3ZlIHRoZSByb290LCBgdXBgIGVuZHMgdXAgPiAwXG4gIHZhciB1cCA9IDA7XG4gIGZvciAodmFyIGkgPSBwYXJ0cy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgIHZhciBsYXN0ID0gcGFydHNbaV07XG4gICAgaWYgKGxhc3QgPT09ICcuJykge1xuICAgICAgcGFydHMuc3BsaWNlKGksIDEpO1xuICAgIH0gZWxzZSBpZiAobGFzdCA9PT0gJy4uJykge1xuICAgICAgcGFydHMuc3BsaWNlKGksIDEpO1xuICAgICAgdXArKztcbiAgICB9IGVsc2UgaWYgKHVwKSB7XG4gICAgICBwYXJ0cy5zcGxpY2UoaSwgMSk7XG4gICAgICB1cC0tO1xuICAgIH1cbiAgfVxuXG4gIC8vIGlmIHRoZSBwYXRoIGlzIGFsbG93ZWQgdG8gZ28gYWJvdmUgdGhlIHJvb3QsIHJlc3RvcmUgbGVhZGluZyAuLnNcbiAgaWYgKGFsbG93QWJvdmVSb290KSB7XG4gICAgZm9yICg7IHVwLS07IHVwKSB7XG4gICAgICBwYXJ0cy51bnNoaWZ0KCcuLicpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBwYXJ0cztcbn1cblxuLy8gU3BsaXQgYSBmaWxlbmFtZSBpbnRvIFtyb290LCBkaXIsIGJhc2VuYW1lLCBleHRdLCB1bml4IHZlcnNpb25cbi8vICdyb290JyBpcyBqdXN0IGEgc2xhc2gsIG9yIG5vdGhpbmcuXG52YXIgc3BsaXRQYXRoUmUgPVxuICAgIC9eKFxcLz98KShbXFxzXFxTXSo/KSgoPzpcXC57MSwyfXxbXlxcL10rP3wpKFxcLlteLlxcL10qfCkpKD86W1xcL10qKSQvO1xudmFyIHNwbGl0UGF0aCA9IGZ1bmN0aW9uKGZpbGVuYW1lKSB7XG4gIHJldHVybiBzcGxpdFBhdGhSZS5leGVjKGZpbGVuYW1lKS5zbGljZSgxKTtcbn07XG5cbi8vIHBhdGgucmVzb2x2ZShbZnJvbSAuLi5dLCB0bylcbi8vIHBvc2l4IHZlcnNpb25cbmV4cG9ydHMucmVzb2x2ZSA9IGZ1bmN0aW9uKCkge1xuICB2YXIgcmVzb2x2ZWRQYXRoID0gJycsXG4gICAgICByZXNvbHZlZEFic29sdXRlID0gZmFsc2U7XG5cbiAgZm9yICh2YXIgaSA9IGFyZ3VtZW50cy5sZW5ndGggLSAxOyBpID49IC0xICYmICFyZXNvbHZlZEFic29sdXRlOyBpLS0pIHtcbiAgICB2YXIgcGF0aCA9IChpID49IDApID8gYXJndW1lbnRzW2ldIDogcHJvY2Vzcy5jd2QoKTtcblxuICAgIC8vIFNraXAgZW1wdHkgYW5kIGludmFsaWQgZW50cmllc1xuICAgIGlmICh0eXBlb2YgcGF0aCAhPT0gJ3N0cmluZycpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0FyZ3VtZW50cyB0byBwYXRoLnJlc29sdmUgbXVzdCBiZSBzdHJpbmdzJyk7XG4gICAgfSBlbHNlIGlmICghcGF0aCkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgcmVzb2x2ZWRQYXRoID0gcGF0aCArICcvJyArIHJlc29sdmVkUGF0aDtcbiAgICByZXNvbHZlZEFic29sdXRlID0gcGF0aC5jaGFyQXQoMCkgPT09ICcvJztcbiAgfVxuXG4gIC8vIEF0IHRoaXMgcG9pbnQgdGhlIHBhdGggc2hvdWxkIGJlIHJlc29sdmVkIHRvIGEgZnVsbCBhYnNvbHV0ZSBwYXRoLCBidXRcbiAgLy8gaGFuZGxlIHJlbGF0aXZlIHBhdGhzIHRvIGJlIHNhZmUgKG1pZ2h0IGhhcHBlbiB3aGVuIHByb2Nlc3MuY3dkKCkgZmFpbHMpXG5cbiAgLy8gTm9ybWFsaXplIHRoZSBwYXRoXG4gIHJlc29sdmVkUGF0aCA9IG5vcm1hbGl6ZUFycmF5KGZpbHRlcihyZXNvbHZlZFBhdGguc3BsaXQoJy8nKSwgZnVuY3Rpb24ocCkge1xuICAgIHJldHVybiAhIXA7XG4gIH0pLCAhcmVzb2x2ZWRBYnNvbHV0ZSkuam9pbignLycpO1xuXG4gIHJldHVybiAoKHJlc29sdmVkQWJzb2x1dGUgPyAnLycgOiAnJykgKyByZXNvbHZlZFBhdGgpIHx8ICcuJztcbn07XG5cbi8vIHBhdGgubm9ybWFsaXplKHBhdGgpXG4vLyBwb3NpeCB2ZXJzaW9uXG5leHBvcnRzLm5vcm1hbGl6ZSA9IGZ1bmN0aW9uKHBhdGgpIHtcbiAgdmFyIGlzQWJzb2x1dGUgPSBleHBvcnRzLmlzQWJzb2x1dGUocGF0aCksXG4gICAgICB0cmFpbGluZ1NsYXNoID0gc3Vic3RyKHBhdGgsIC0xKSA9PT0gJy8nO1xuXG4gIC8vIE5vcm1hbGl6ZSB0aGUgcGF0aFxuICBwYXRoID0gbm9ybWFsaXplQXJyYXkoZmlsdGVyKHBhdGguc3BsaXQoJy8nKSwgZnVuY3Rpb24ocCkge1xuICAgIHJldHVybiAhIXA7XG4gIH0pLCAhaXNBYnNvbHV0ZSkuam9pbignLycpO1xuXG4gIGlmICghcGF0aCAmJiAhaXNBYnNvbHV0ZSkge1xuICAgIHBhdGggPSAnLic7XG4gIH1cbiAgaWYgKHBhdGggJiYgdHJhaWxpbmdTbGFzaCkge1xuICAgIHBhdGggKz0gJy8nO1xuICB9XG5cbiAgcmV0dXJuIChpc0Fic29sdXRlID8gJy8nIDogJycpICsgcGF0aDtcbn07XG5cbi8vIHBvc2l4IHZlcnNpb25cbmV4cG9ydHMuaXNBYnNvbHV0ZSA9IGZ1bmN0aW9uKHBhdGgpIHtcbiAgcmV0dXJuIHBhdGguY2hhckF0KDApID09PSAnLyc7XG59O1xuXG4vLyBwb3NpeCB2ZXJzaW9uXG5leHBvcnRzLmpvaW4gPSBmdW5jdGlvbigpIHtcbiAgdmFyIHBhdGhzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAwKTtcbiAgcmV0dXJuIGV4cG9ydHMubm9ybWFsaXplKGZpbHRlcihwYXRocywgZnVuY3Rpb24ocCwgaW5kZXgpIHtcbiAgICBpZiAodHlwZW9mIHAgIT09ICdzdHJpbmcnKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdBcmd1bWVudHMgdG8gcGF0aC5qb2luIG11c3QgYmUgc3RyaW5ncycpO1xuICAgIH1cbiAgICByZXR1cm4gcDtcbiAgfSkuam9pbignLycpKTtcbn07XG5cblxuLy8gcGF0aC5yZWxhdGl2ZShmcm9tLCB0bylcbi8vIHBvc2l4IHZlcnNpb25cbmV4cG9ydHMucmVsYXRpdmUgPSBmdW5jdGlvbihmcm9tLCB0bykge1xuICBmcm9tID0gZXhwb3J0cy5yZXNvbHZlKGZyb20pLnN1YnN0cigxKTtcbiAgdG8gPSBleHBvcnRzLnJlc29sdmUodG8pLnN1YnN0cigxKTtcblxuICBmdW5jdGlvbiB0cmltKGFycikge1xuICAgIHZhciBzdGFydCA9IDA7XG4gICAgZm9yICg7IHN0YXJ0IDwgYXJyLmxlbmd0aDsgc3RhcnQrKykge1xuICAgICAgaWYgKGFycltzdGFydF0gIT09ICcnKSBicmVhaztcbiAgICB9XG5cbiAgICB2YXIgZW5kID0gYXJyLmxlbmd0aCAtIDE7XG4gICAgZm9yICg7IGVuZCA+PSAwOyBlbmQtLSkge1xuICAgICAgaWYgKGFycltlbmRdICE9PSAnJykgYnJlYWs7XG4gICAgfVxuXG4gICAgaWYgKHN0YXJ0ID4gZW5kKSByZXR1cm4gW107XG4gICAgcmV0dXJuIGFyci5zbGljZShzdGFydCwgZW5kIC0gc3RhcnQgKyAxKTtcbiAgfVxuXG4gIHZhciBmcm9tUGFydHMgPSB0cmltKGZyb20uc3BsaXQoJy8nKSk7XG4gIHZhciB0b1BhcnRzID0gdHJpbSh0by5zcGxpdCgnLycpKTtcblxuICB2YXIgbGVuZ3RoID0gTWF0aC5taW4oZnJvbVBhcnRzLmxlbmd0aCwgdG9QYXJ0cy5sZW5ndGgpO1xuICB2YXIgc2FtZVBhcnRzTGVuZ3RoID0gbGVuZ3RoO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgaWYgKGZyb21QYXJ0c1tpXSAhPT0gdG9QYXJ0c1tpXSkge1xuICAgICAgc2FtZVBhcnRzTGVuZ3RoID0gaTtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuXG4gIHZhciBvdXRwdXRQYXJ0cyA9IFtdO1xuICBmb3IgKHZhciBpID0gc2FtZVBhcnRzTGVuZ3RoOyBpIDwgZnJvbVBhcnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgb3V0cHV0UGFydHMucHVzaCgnLi4nKTtcbiAgfVxuXG4gIG91dHB1dFBhcnRzID0gb3V0cHV0UGFydHMuY29uY2F0KHRvUGFydHMuc2xpY2Uoc2FtZVBhcnRzTGVuZ3RoKSk7XG5cbiAgcmV0dXJuIG91dHB1dFBhcnRzLmpvaW4oJy8nKTtcbn07XG5cbmV4cG9ydHMuc2VwID0gJy8nO1xuZXhwb3J0cy5kZWxpbWl0ZXIgPSAnOic7XG5cbmV4cG9ydHMuZGlybmFtZSA9IGZ1bmN0aW9uKHBhdGgpIHtcbiAgdmFyIHJlc3VsdCA9IHNwbGl0UGF0aChwYXRoKSxcbiAgICAgIHJvb3QgPSByZXN1bHRbMF0sXG4gICAgICBkaXIgPSByZXN1bHRbMV07XG5cbiAgaWYgKCFyb290ICYmICFkaXIpIHtcbiAgICAvLyBObyBkaXJuYW1lIHdoYXRzb2V2ZXJcbiAgICByZXR1cm4gJy4nO1xuICB9XG5cbiAgaWYgKGRpcikge1xuICAgIC8vIEl0IGhhcyBhIGRpcm5hbWUsIHN0cmlwIHRyYWlsaW5nIHNsYXNoXG4gICAgZGlyID0gZGlyLnN1YnN0cigwLCBkaXIubGVuZ3RoIC0gMSk7XG4gIH1cblxuICByZXR1cm4gcm9vdCArIGRpcjtcbn07XG5cblxuZXhwb3J0cy5iYXNlbmFtZSA9IGZ1bmN0aW9uKHBhdGgsIGV4dCkge1xuICB2YXIgZiA9IHNwbGl0UGF0aChwYXRoKVsyXTtcbiAgLy8gVE9ETzogbWFrZSB0aGlzIGNvbXBhcmlzb24gY2FzZS1pbnNlbnNpdGl2ZSBvbiB3aW5kb3dzP1xuICBpZiAoZXh0ICYmIGYuc3Vic3RyKC0xICogZXh0Lmxlbmd0aCkgPT09IGV4dCkge1xuICAgIGYgPSBmLnN1YnN0cigwLCBmLmxlbmd0aCAtIGV4dC5sZW5ndGgpO1xuICB9XG4gIHJldHVybiBmO1xufTtcblxuXG5leHBvcnRzLmV4dG5hbWUgPSBmdW5jdGlvbihwYXRoKSB7XG4gIHJldHVybiBzcGxpdFBhdGgocGF0aClbM107XG59O1xuXG5mdW5jdGlvbiBmaWx0ZXIgKHhzLCBmKSB7XG4gICAgaWYgKHhzLmZpbHRlcikgcmV0dXJuIHhzLmZpbHRlcihmKTtcbiAgICB2YXIgcmVzID0gW107XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB4cy5sZW5ndGg7IGkrKykge1xuICAgICAgICBpZiAoZih4c1tpXSwgaSwgeHMpKSByZXMucHVzaCh4c1tpXSk7XG4gICAgfVxuICAgIHJldHVybiByZXM7XG59XG5cbi8vIFN0cmluZy5wcm90b3R5cGUuc3Vic3RyIC0gbmVnYXRpdmUgaW5kZXggZG9uJ3Qgd29yayBpbiBJRThcbnZhciBzdWJzdHIgPSAnYWInLnN1YnN0cigtMSkgPT09ICdiJ1xuICAgID8gZnVuY3Rpb24gKHN0ciwgc3RhcnQsIGxlbikgeyByZXR1cm4gc3RyLnN1YnN0cihzdGFydCwgbGVuKSB9XG4gICAgOiBmdW5jdGlvbiAoc3RyLCBzdGFydCwgbGVuKSB7XG4gICAgICAgIGlmIChzdGFydCA8IDApIHN0YXJ0ID0gc3RyLmxlbmd0aCArIHN0YXJ0O1xuICAgICAgICByZXR1cm4gc3RyLnN1YnN0cihzdGFydCwgbGVuKTtcbiAgICB9XG47XG4iLCIvLyBzaGltIGZvciB1c2luZyBwcm9jZXNzIGluIGJyb3dzZXJcblxudmFyIHByb2Nlc3MgPSBtb2R1bGUuZXhwb3J0cyA9IHt9O1xudmFyIHF1ZXVlID0gW107XG52YXIgZHJhaW5pbmcgPSBmYWxzZTtcbnZhciBjdXJyZW50UXVldWU7XG52YXIgcXVldWVJbmRleCA9IC0xO1xuXG5mdW5jdGlvbiBjbGVhblVwTmV4dFRpY2soKSB7XG4gICAgZHJhaW5pbmcgPSBmYWxzZTtcbiAgICBpZiAoY3VycmVudFF1ZXVlLmxlbmd0aCkge1xuICAgICAgICBxdWV1ZSA9IGN1cnJlbnRRdWV1ZS5jb25jYXQocXVldWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHF1ZXVlSW5kZXggPSAtMTtcbiAgICB9XG4gICAgaWYgKHF1ZXVlLmxlbmd0aCkge1xuICAgICAgICBkcmFpblF1ZXVlKCk7XG4gICAgfVxufVxuXG5mdW5jdGlvbiBkcmFpblF1ZXVlKCkge1xuICAgIGlmIChkcmFpbmluZykge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIHZhciB0aW1lb3V0ID0gc2V0VGltZW91dChjbGVhblVwTmV4dFRpY2spO1xuICAgIGRyYWluaW5nID0gdHJ1ZTtcblxuICAgIHZhciBsZW4gPSBxdWV1ZS5sZW5ndGg7XG4gICAgd2hpbGUobGVuKSB7XG4gICAgICAgIGN1cnJlbnRRdWV1ZSA9IHF1ZXVlO1xuICAgICAgICBxdWV1ZSA9IFtdO1xuICAgICAgICB3aGlsZSAoKytxdWV1ZUluZGV4IDwgbGVuKSB7XG4gICAgICAgICAgICBpZiAoY3VycmVudFF1ZXVlKSB7XG4gICAgICAgICAgICAgICAgY3VycmVudFF1ZXVlW3F1ZXVlSW5kZXhdLnJ1bigpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHF1ZXVlSW5kZXggPSAtMTtcbiAgICAgICAgbGVuID0gcXVldWUubGVuZ3RoO1xuICAgIH1cbiAgICBjdXJyZW50UXVldWUgPSBudWxsO1xuICAgIGRyYWluaW5nID0gZmFsc2U7XG4gICAgY2xlYXJUaW1lb3V0KHRpbWVvdXQpO1xufVxuXG5wcm9jZXNzLm5leHRUaWNrID0gZnVuY3Rpb24gKGZ1bikge1xuICAgIHZhciBhcmdzID0gbmV3IEFycmF5KGFyZ3VtZW50cy5sZW5ndGggLSAxKTtcbiAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGFyZ3NbaSAtIDFdID0gYXJndW1lbnRzW2ldO1xuICAgICAgICB9XG4gICAgfVxuICAgIHF1ZXVlLnB1c2gobmV3IEl0ZW0oZnVuLCBhcmdzKSk7XG4gICAgaWYgKHF1ZXVlLmxlbmd0aCA9PT0gMSAmJiAhZHJhaW5pbmcpIHtcbiAgICAgICAgc2V0VGltZW91dChkcmFpblF1ZXVlLCAwKTtcbiAgICB9XG59O1xuXG4vLyB2OCBsaWtlcyBwcmVkaWN0aWJsZSBvYmplY3RzXG5mdW5jdGlvbiBJdGVtKGZ1biwgYXJyYXkpIHtcbiAgICB0aGlzLmZ1biA9IGZ1bjtcbiAgICB0aGlzLmFycmF5ID0gYXJyYXk7XG59XG5JdGVtLnByb3RvdHlwZS5ydW4gPSBmdW5jdGlvbiAoKSB7XG4gICAgdGhpcy5mdW4uYXBwbHkobnVsbCwgdGhpcy5hcnJheSk7XG59O1xucHJvY2Vzcy50aXRsZSA9ICdicm93c2VyJztcbnByb2Nlc3MuYnJvd3NlciA9IHRydWU7XG5wcm9jZXNzLmVudiA9IHt9O1xucHJvY2Vzcy5hcmd2ID0gW107XG5wcm9jZXNzLnZlcnNpb24gPSAnJzsgLy8gZW1wdHkgc3RyaW5nIHRvIGF2b2lkIHJlZ2V4cCBpc3N1ZXNcbnByb2Nlc3MudmVyc2lvbnMgPSB7fTtcblxuZnVuY3Rpb24gbm9vcCgpIHt9XG5cbnByb2Nlc3Mub24gPSBub29wO1xucHJvY2Vzcy5hZGRMaXN0ZW5lciA9IG5vb3A7XG5wcm9jZXNzLm9uY2UgPSBub29wO1xucHJvY2Vzcy5vZmYgPSBub29wO1xucHJvY2Vzcy5yZW1vdmVMaXN0ZW5lciA9IG5vb3A7XG5wcm9jZXNzLnJlbW92ZUFsbExpc3RlbmVycyA9IG5vb3A7XG5wcm9jZXNzLmVtaXQgPSBub29wO1xuXG5wcm9jZXNzLmJpbmRpbmcgPSBmdW5jdGlvbiAobmFtZSkge1xuICAgIHRocm93IG5ldyBFcnJvcigncHJvY2Vzcy5iaW5kaW5nIGlzIG5vdCBzdXBwb3J0ZWQnKTtcbn07XG5cbnByb2Nlc3MuY3dkID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gJy8nIH07XG5wcm9jZXNzLmNoZGlyID0gZnVuY3Rpb24gKGRpcikge1xuICAgIHRocm93IG5ldyBFcnJvcigncHJvY2Vzcy5jaGRpciBpcyBub3Qgc3VwcG9ydGVkJyk7XG59O1xucHJvY2Vzcy51bWFzayA9IGZ1bmN0aW9uKCkgeyByZXR1cm4gMDsgfTtcbiIsIi8qISBodHRwczovL210aHMuYmUvcHVueWNvZGUgdjEuNC4wIGJ5IEBtYXRoaWFzICovXG47KGZ1bmN0aW9uKHJvb3QpIHtcblxuXHQvKiogRGV0ZWN0IGZyZWUgdmFyaWFibGVzICovXG5cdHZhciBmcmVlRXhwb3J0cyA9IHR5cGVvZiBleHBvcnRzID09ICdvYmplY3QnICYmIGV4cG9ydHMgJiZcblx0XHQhZXhwb3J0cy5ub2RlVHlwZSAmJiBleHBvcnRzO1xuXHR2YXIgZnJlZU1vZHVsZSA9IHR5cGVvZiBtb2R1bGUgPT0gJ29iamVjdCcgJiYgbW9kdWxlICYmXG5cdFx0IW1vZHVsZS5ub2RlVHlwZSAmJiBtb2R1bGU7XG5cdHZhciBmcmVlR2xvYmFsID0gdHlwZW9mIGdsb2JhbCA9PSAnb2JqZWN0JyAmJiBnbG9iYWw7XG5cdGlmIChcblx0XHRmcmVlR2xvYmFsLmdsb2JhbCA9PT0gZnJlZUdsb2JhbCB8fFxuXHRcdGZyZWVHbG9iYWwud2luZG93ID09PSBmcmVlR2xvYmFsIHx8XG5cdFx0ZnJlZUdsb2JhbC5zZWxmID09PSBmcmVlR2xvYmFsXG5cdCkge1xuXHRcdHJvb3QgPSBmcmVlR2xvYmFsO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoZSBgcHVueWNvZGVgIG9iamVjdC5cblx0ICogQG5hbWUgcHVueWNvZGVcblx0ICogQHR5cGUgT2JqZWN0XG5cdCAqL1xuXHR2YXIgcHVueWNvZGUsXG5cblx0LyoqIEhpZ2hlc3QgcG9zaXRpdmUgc2lnbmVkIDMyLWJpdCBmbG9hdCB2YWx1ZSAqL1xuXHRtYXhJbnQgPSAyMTQ3NDgzNjQ3LCAvLyBha2EuIDB4N0ZGRkZGRkYgb3IgMl4zMS0xXG5cblx0LyoqIEJvb3RzdHJpbmcgcGFyYW1ldGVycyAqL1xuXHRiYXNlID0gMzYsXG5cdHRNaW4gPSAxLFxuXHR0TWF4ID0gMjYsXG5cdHNrZXcgPSAzOCxcblx0ZGFtcCA9IDcwMCxcblx0aW5pdGlhbEJpYXMgPSA3Mixcblx0aW5pdGlhbE4gPSAxMjgsIC8vIDB4ODBcblx0ZGVsaW1pdGVyID0gJy0nLCAvLyAnXFx4MkQnXG5cblx0LyoqIFJlZ3VsYXIgZXhwcmVzc2lvbnMgKi9cblx0cmVnZXhQdW55Y29kZSA9IC9eeG4tLS8sXG5cdHJlZ2V4Tm9uQVNDSUkgPSAvW15cXHgyMC1cXHg3RV0vLCAvLyB1bnByaW50YWJsZSBBU0NJSSBjaGFycyArIG5vbi1BU0NJSSBjaGFyc1xuXHRyZWdleFNlcGFyYXRvcnMgPSAvW1xceDJFXFx1MzAwMlxcdUZGMEVcXHVGRjYxXS9nLCAvLyBSRkMgMzQ5MCBzZXBhcmF0b3JzXG5cblx0LyoqIEVycm9yIG1lc3NhZ2VzICovXG5cdGVycm9ycyA9IHtcblx0XHQnb3ZlcmZsb3cnOiAnT3ZlcmZsb3c6IGlucHV0IG5lZWRzIHdpZGVyIGludGVnZXJzIHRvIHByb2Nlc3MnLFxuXHRcdCdub3QtYmFzaWMnOiAnSWxsZWdhbCBpbnB1dCA+PSAweDgwIChub3QgYSBiYXNpYyBjb2RlIHBvaW50KScsXG5cdFx0J2ludmFsaWQtaW5wdXQnOiAnSW52YWxpZCBpbnB1dCdcblx0fSxcblxuXHQvKiogQ29udmVuaWVuY2Ugc2hvcnRjdXRzICovXG5cdGJhc2VNaW51c1RNaW4gPSBiYXNlIC0gdE1pbixcblx0Zmxvb3IgPSBNYXRoLmZsb29yLFxuXHRzdHJpbmdGcm9tQ2hhckNvZGUgPSBTdHJpbmcuZnJvbUNoYXJDb2RlLFxuXG5cdC8qKiBUZW1wb3JhcnkgdmFyaWFibGUgKi9cblx0a2V5O1xuXG5cdC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuXG5cdC8qKlxuXHQgKiBBIGdlbmVyaWMgZXJyb3IgdXRpbGl0eSBmdW5jdGlvbi5cblx0ICogQHByaXZhdGVcblx0ICogQHBhcmFtIHtTdHJpbmd9IHR5cGUgVGhlIGVycm9yIHR5cGUuXG5cdCAqIEByZXR1cm5zIHtFcnJvcn0gVGhyb3dzIGEgYFJhbmdlRXJyb3JgIHdpdGggdGhlIGFwcGxpY2FibGUgZXJyb3IgbWVzc2FnZS5cblx0ICovXG5cdGZ1bmN0aW9uIGVycm9yKHR5cGUpIHtcblx0XHR0aHJvdyBuZXcgUmFuZ2VFcnJvcihlcnJvcnNbdHlwZV0pO1xuXHR9XG5cblx0LyoqXG5cdCAqIEEgZ2VuZXJpYyBgQXJyYXkjbWFwYCB1dGlsaXR5IGZ1bmN0aW9uLlxuXHQgKiBAcHJpdmF0ZVxuXHQgKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gaXRlcmF0ZSBvdmVyLlxuXHQgKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFjayBUaGUgZnVuY3Rpb24gdGhhdCBnZXRzIGNhbGxlZCBmb3IgZXZlcnkgYXJyYXlcblx0ICogaXRlbS5cblx0ICogQHJldHVybnMge0FycmF5fSBBIG5ldyBhcnJheSBvZiB2YWx1ZXMgcmV0dXJuZWQgYnkgdGhlIGNhbGxiYWNrIGZ1bmN0aW9uLlxuXHQgKi9cblx0ZnVuY3Rpb24gbWFwKGFycmF5LCBmbikge1xuXHRcdHZhciBsZW5ndGggPSBhcnJheS5sZW5ndGg7XG5cdFx0dmFyIHJlc3VsdCA9IFtdO1xuXHRcdHdoaWxlIChsZW5ndGgtLSkge1xuXHRcdFx0cmVzdWx0W2xlbmd0aF0gPSBmbihhcnJheVtsZW5ndGhdKTtcblx0XHR9XG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fVxuXG5cdC8qKlxuXHQgKiBBIHNpbXBsZSBgQXJyYXkjbWFwYC1saWtlIHdyYXBwZXIgdG8gd29yayB3aXRoIGRvbWFpbiBuYW1lIHN0cmluZ3Mgb3IgZW1haWxcblx0ICogYWRkcmVzc2VzLlxuXHQgKiBAcHJpdmF0ZVxuXHQgKiBAcGFyYW0ge1N0cmluZ30gZG9tYWluIFRoZSBkb21haW4gbmFtZSBvciBlbWFpbCBhZGRyZXNzLlxuXHQgKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFjayBUaGUgZnVuY3Rpb24gdGhhdCBnZXRzIGNhbGxlZCBmb3IgZXZlcnlcblx0ICogY2hhcmFjdGVyLlxuXHQgKiBAcmV0dXJucyB7QXJyYXl9IEEgbmV3IHN0cmluZyBvZiBjaGFyYWN0ZXJzIHJldHVybmVkIGJ5IHRoZSBjYWxsYmFja1xuXHQgKiBmdW5jdGlvbi5cblx0ICovXG5cdGZ1bmN0aW9uIG1hcERvbWFpbihzdHJpbmcsIGZuKSB7XG5cdFx0dmFyIHBhcnRzID0gc3RyaW5nLnNwbGl0KCdAJyk7XG5cdFx0dmFyIHJlc3VsdCA9ICcnO1xuXHRcdGlmIChwYXJ0cy5sZW5ndGggPiAxKSB7XG5cdFx0XHQvLyBJbiBlbWFpbCBhZGRyZXNzZXMsIG9ubHkgdGhlIGRvbWFpbiBuYW1lIHNob3VsZCBiZSBwdW55Y29kZWQuIExlYXZlXG5cdFx0XHQvLyB0aGUgbG9jYWwgcGFydCAoaS5lLiBldmVyeXRoaW5nIHVwIHRvIGBAYCkgaW50YWN0LlxuXHRcdFx0cmVzdWx0ID0gcGFydHNbMF0gKyAnQCc7XG5cdFx0XHRzdHJpbmcgPSBwYXJ0c1sxXTtcblx0XHR9XG5cdFx0Ly8gQXZvaWQgYHNwbGl0KHJlZ2V4KWAgZm9yIElFOCBjb21wYXRpYmlsaXR5LiBTZWUgIzE3LlxuXHRcdHN0cmluZyA9IHN0cmluZy5yZXBsYWNlKHJlZ2V4U2VwYXJhdG9ycywgJ1xceDJFJyk7XG5cdFx0dmFyIGxhYmVscyA9IHN0cmluZy5zcGxpdCgnLicpO1xuXHRcdHZhciBlbmNvZGVkID0gbWFwKGxhYmVscywgZm4pLmpvaW4oJy4nKTtcblx0XHRyZXR1cm4gcmVzdWx0ICsgZW5jb2RlZDtcblx0fVxuXG5cdC8qKlxuXHQgKiBDcmVhdGVzIGFuIGFycmF5IGNvbnRhaW5pbmcgdGhlIG51bWVyaWMgY29kZSBwb2ludHMgb2YgZWFjaCBVbmljb2RlXG5cdCAqIGNoYXJhY3RlciBpbiB0aGUgc3RyaW5nLiBXaGlsZSBKYXZhU2NyaXB0IHVzZXMgVUNTLTIgaW50ZXJuYWxseSxcblx0ICogdGhpcyBmdW5jdGlvbiB3aWxsIGNvbnZlcnQgYSBwYWlyIG9mIHN1cnJvZ2F0ZSBoYWx2ZXMgKGVhY2ggb2Ygd2hpY2hcblx0ICogVUNTLTIgZXhwb3NlcyBhcyBzZXBhcmF0ZSBjaGFyYWN0ZXJzKSBpbnRvIGEgc2luZ2xlIGNvZGUgcG9pbnQsXG5cdCAqIG1hdGNoaW5nIFVURi0xNi5cblx0ICogQHNlZSBgcHVueWNvZGUudWNzMi5lbmNvZGVgXG5cdCAqIEBzZWUgPGh0dHBzOi8vbWF0aGlhc2J5bmVucy5iZS9ub3Rlcy9qYXZhc2NyaXB0LWVuY29kaW5nPlxuXHQgKiBAbWVtYmVyT2YgcHVueWNvZGUudWNzMlxuXHQgKiBAbmFtZSBkZWNvZGVcblx0ICogQHBhcmFtIHtTdHJpbmd9IHN0cmluZyBUaGUgVW5pY29kZSBpbnB1dCBzdHJpbmcgKFVDUy0yKS5cblx0ICogQHJldHVybnMge0FycmF5fSBUaGUgbmV3IGFycmF5IG9mIGNvZGUgcG9pbnRzLlxuXHQgKi9cblx0ZnVuY3Rpb24gdWNzMmRlY29kZShzdHJpbmcpIHtcblx0XHR2YXIgb3V0cHV0ID0gW10sXG5cdFx0ICAgIGNvdW50ZXIgPSAwLFxuXHRcdCAgICBsZW5ndGggPSBzdHJpbmcubGVuZ3RoLFxuXHRcdCAgICB2YWx1ZSxcblx0XHQgICAgZXh0cmE7XG5cdFx0d2hpbGUgKGNvdW50ZXIgPCBsZW5ndGgpIHtcblx0XHRcdHZhbHVlID0gc3RyaW5nLmNoYXJDb2RlQXQoY291bnRlcisrKTtcblx0XHRcdGlmICh2YWx1ZSA+PSAweEQ4MDAgJiYgdmFsdWUgPD0gMHhEQkZGICYmIGNvdW50ZXIgPCBsZW5ndGgpIHtcblx0XHRcdFx0Ly8gaGlnaCBzdXJyb2dhdGUsIGFuZCB0aGVyZSBpcyBhIG5leHQgY2hhcmFjdGVyXG5cdFx0XHRcdGV4dHJhID0gc3RyaW5nLmNoYXJDb2RlQXQoY291bnRlcisrKTtcblx0XHRcdFx0aWYgKChleHRyYSAmIDB4RkMwMCkgPT0gMHhEQzAwKSB7IC8vIGxvdyBzdXJyb2dhdGVcblx0XHRcdFx0XHRvdXRwdXQucHVzaCgoKHZhbHVlICYgMHgzRkYpIDw8IDEwKSArIChleHRyYSAmIDB4M0ZGKSArIDB4MTAwMDApO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdC8vIHVubWF0Y2hlZCBzdXJyb2dhdGU7IG9ubHkgYXBwZW5kIHRoaXMgY29kZSB1bml0LCBpbiBjYXNlIHRoZSBuZXh0XG5cdFx0XHRcdFx0Ly8gY29kZSB1bml0IGlzIHRoZSBoaWdoIHN1cnJvZ2F0ZSBvZiBhIHN1cnJvZ2F0ZSBwYWlyXG5cdFx0XHRcdFx0b3V0cHV0LnB1c2godmFsdWUpO1xuXHRcdFx0XHRcdGNvdW50ZXItLTtcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0b3V0cHV0LnB1c2godmFsdWUpO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gb3V0cHV0O1xuXHR9XG5cblx0LyoqXG5cdCAqIENyZWF0ZXMgYSBzdHJpbmcgYmFzZWQgb24gYW4gYXJyYXkgb2YgbnVtZXJpYyBjb2RlIHBvaW50cy5cblx0ICogQHNlZSBgcHVueWNvZGUudWNzMi5kZWNvZGVgXG5cdCAqIEBtZW1iZXJPZiBwdW55Y29kZS51Y3MyXG5cdCAqIEBuYW1lIGVuY29kZVxuXHQgKiBAcGFyYW0ge0FycmF5fSBjb2RlUG9pbnRzIFRoZSBhcnJheSBvZiBudW1lcmljIGNvZGUgcG9pbnRzLlxuXHQgKiBAcmV0dXJucyB7U3RyaW5nfSBUaGUgbmV3IFVuaWNvZGUgc3RyaW5nIChVQ1MtMikuXG5cdCAqL1xuXHRmdW5jdGlvbiB1Y3MyZW5jb2RlKGFycmF5KSB7XG5cdFx0cmV0dXJuIG1hcChhcnJheSwgZnVuY3Rpb24odmFsdWUpIHtcblx0XHRcdHZhciBvdXRwdXQgPSAnJztcblx0XHRcdGlmICh2YWx1ZSA+IDB4RkZGRikge1xuXHRcdFx0XHR2YWx1ZSAtPSAweDEwMDAwO1xuXHRcdFx0XHRvdXRwdXQgKz0gc3RyaW5nRnJvbUNoYXJDb2RlKHZhbHVlID4+PiAxMCAmIDB4M0ZGIHwgMHhEODAwKTtcblx0XHRcdFx0dmFsdWUgPSAweERDMDAgfCB2YWx1ZSAmIDB4M0ZGO1xuXHRcdFx0fVxuXHRcdFx0b3V0cHV0ICs9IHN0cmluZ0Zyb21DaGFyQ29kZSh2YWx1ZSk7XG5cdFx0XHRyZXR1cm4gb3V0cHV0O1xuXHRcdH0pLmpvaW4oJycpO1xuXHR9XG5cblx0LyoqXG5cdCAqIENvbnZlcnRzIGEgYmFzaWMgY29kZSBwb2ludCBpbnRvIGEgZGlnaXQvaW50ZWdlci5cblx0ICogQHNlZSBgZGlnaXRUb0Jhc2ljKClgXG5cdCAqIEBwcml2YXRlXG5cdCAqIEBwYXJhbSB7TnVtYmVyfSBjb2RlUG9pbnQgVGhlIGJhc2ljIG51bWVyaWMgY29kZSBwb2ludCB2YWx1ZS5cblx0ICogQHJldHVybnMge051bWJlcn0gVGhlIG51bWVyaWMgdmFsdWUgb2YgYSBiYXNpYyBjb2RlIHBvaW50IChmb3IgdXNlIGluXG5cdCAqIHJlcHJlc2VudGluZyBpbnRlZ2VycykgaW4gdGhlIHJhbmdlIGAwYCB0byBgYmFzZSAtIDFgLCBvciBgYmFzZWAgaWZcblx0ICogdGhlIGNvZGUgcG9pbnQgZG9lcyBub3QgcmVwcmVzZW50IGEgdmFsdWUuXG5cdCAqL1xuXHRmdW5jdGlvbiBiYXNpY1RvRGlnaXQoY29kZVBvaW50KSB7XG5cdFx0aWYgKGNvZGVQb2ludCAtIDQ4IDwgMTApIHtcblx0XHRcdHJldHVybiBjb2RlUG9pbnQgLSAyMjtcblx0XHR9XG5cdFx0aWYgKGNvZGVQb2ludCAtIDY1IDwgMjYpIHtcblx0XHRcdHJldHVybiBjb2RlUG9pbnQgLSA2NTtcblx0XHR9XG5cdFx0aWYgKGNvZGVQb2ludCAtIDk3IDwgMjYpIHtcblx0XHRcdHJldHVybiBjb2RlUG9pbnQgLSA5Nztcblx0XHR9XG5cdFx0cmV0dXJuIGJhc2U7XG5cdH1cblxuXHQvKipcblx0ICogQ29udmVydHMgYSBkaWdpdC9pbnRlZ2VyIGludG8gYSBiYXNpYyBjb2RlIHBvaW50LlxuXHQgKiBAc2VlIGBiYXNpY1RvRGlnaXQoKWBcblx0ICogQHByaXZhdGVcblx0ICogQHBhcmFtIHtOdW1iZXJ9IGRpZ2l0IFRoZSBudW1lcmljIHZhbHVlIG9mIGEgYmFzaWMgY29kZSBwb2ludC5cblx0ICogQHJldHVybnMge051bWJlcn0gVGhlIGJhc2ljIGNvZGUgcG9pbnQgd2hvc2UgdmFsdWUgKHdoZW4gdXNlZCBmb3Jcblx0ICogcmVwcmVzZW50aW5nIGludGVnZXJzKSBpcyBgZGlnaXRgLCB3aGljaCBuZWVkcyB0byBiZSBpbiB0aGUgcmFuZ2Vcblx0ICogYDBgIHRvIGBiYXNlIC0gMWAuIElmIGBmbGFnYCBpcyBub24temVybywgdGhlIHVwcGVyY2FzZSBmb3JtIGlzXG5cdCAqIHVzZWQ7IGVsc2UsIHRoZSBsb3dlcmNhc2UgZm9ybSBpcyB1c2VkLiBUaGUgYmVoYXZpb3IgaXMgdW5kZWZpbmVkXG5cdCAqIGlmIGBmbGFnYCBpcyBub24temVybyBhbmQgYGRpZ2l0YCBoYXMgbm8gdXBwZXJjYXNlIGZvcm0uXG5cdCAqL1xuXHRmdW5jdGlvbiBkaWdpdFRvQmFzaWMoZGlnaXQsIGZsYWcpIHtcblx0XHQvLyAgMC4uMjUgbWFwIHRvIEFTQ0lJIGEuLnogb3IgQS4uWlxuXHRcdC8vIDI2Li4zNSBtYXAgdG8gQVNDSUkgMC4uOVxuXHRcdHJldHVybiBkaWdpdCArIDIyICsgNzUgKiAoZGlnaXQgPCAyNikgLSAoKGZsYWcgIT0gMCkgPDwgNSk7XG5cdH1cblxuXHQvKipcblx0ICogQmlhcyBhZGFwdGF0aW9uIGZ1bmN0aW9uIGFzIHBlciBzZWN0aW9uIDMuNCBvZiBSRkMgMzQ5Mi5cblx0ICogaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzM0OTIjc2VjdGlvbi0zLjRcblx0ICogQHByaXZhdGVcblx0ICovXG5cdGZ1bmN0aW9uIGFkYXB0KGRlbHRhLCBudW1Qb2ludHMsIGZpcnN0VGltZSkge1xuXHRcdHZhciBrID0gMDtcblx0XHRkZWx0YSA9IGZpcnN0VGltZSA/IGZsb29yKGRlbHRhIC8gZGFtcCkgOiBkZWx0YSA+PiAxO1xuXHRcdGRlbHRhICs9IGZsb29yKGRlbHRhIC8gbnVtUG9pbnRzKTtcblx0XHRmb3IgKC8qIG5vIGluaXRpYWxpemF0aW9uICovOyBkZWx0YSA+IGJhc2VNaW51c1RNaW4gKiB0TWF4ID4+IDE7IGsgKz0gYmFzZSkge1xuXHRcdFx0ZGVsdGEgPSBmbG9vcihkZWx0YSAvIGJhc2VNaW51c1RNaW4pO1xuXHRcdH1cblx0XHRyZXR1cm4gZmxvb3IoayArIChiYXNlTWludXNUTWluICsgMSkgKiBkZWx0YSAvIChkZWx0YSArIHNrZXcpKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBDb252ZXJ0cyBhIFB1bnljb2RlIHN0cmluZyBvZiBBU0NJSS1vbmx5IHN5bWJvbHMgdG8gYSBzdHJpbmcgb2YgVW5pY29kZVxuXHQgKiBzeW1ib2xzLlxuXHQgKiBAbWVtYmVyT2YgcHVueWNvZGVcblx0ICogQHBhcmFtIHtTdHJpbmd9IGlucHV0IFRoZSBQdW55Y29kZSBzdHJpbmcgb2YgQVNDSUktb25seSBzeW1ib2xzLlxuXHQgKiBAcmV0dXJucyB7U3RyaW5nfSBUaGUgcmVzdWx0aW5nIHN0cmluZyBvZiBVbmljb2RlIHN5bWJvbHMuXG5cdCAqL1xuXHRmdW5jdGlvbiBkZWNvZGUoaW5wdXQpIHtcblx0XHQvLyBEb24ndCB1c2UgVUNTLTJcblx0XHR2YXIgb3V0cHV0ID0gW10sXG5cdFx0ICAgIGlucHV0TGVuZ3RoID0gaW5wdXQubGVuZ3RoLFxuXHRcdCAgICBvdXQsXG5cdFx0ICAgIGkgPSAwLFxuXHRcdCAgICBuID0gaW5pdGlhbE4sXG5cdFx0ICAgIGJpYXMgPSBpbml0aWFsQmlhcyxcblx0XHQgICAgYmFzaWMsXG5cdFx0ICAgIGosXG5cdFx0ICAgIGluZGV4LFxuXHRcdCAgICBvbGRpLFxuXHRcdCAgICB3LFxuXHRcdCAgICBrLFxuXHRcdCAgICBkaWdpdCxcblx0XHQgICAgdCxcblx0XHQgICAgLyoqIENhY2hlZCBjYWxjdWxhdGlvbiByZXN1bHRzICovXG5cdFx0ICAgIGJhc2VNaW51c1Q7XG5cblx0XHQvLyBIYW5kbGUgdGhlIGJhc2ljIGNvZGUgcG9pbnRzOiBsZXQgYGJhc2ljYCBiZSB0aGUgbnVtYmVyIG9mIGlucHV0IGNvZGVcblx0XHQvLyBwb2ludHMgYmVmb3JlIHRoZSBsYXN0IGRlbGltaXRlciwgb3IgYDBgIGlmIHRoZXJlIGlzIG5vbmUsIHRoZW4gY29weVxuXHRcdC8vIHRoZSBmaXJzdCBiYXNpYyBjb2RlIHBvaW50cyB0byB0aGUgb3V0cHV0LlxuXG5cdFx0YmFzaWMgPSBpbnB1dC5sYXN0SW5kZXhPZihkZWxpbWl0ZXIpO1xuXHRcdGlmIChiYXNpYyA8IDApIHtcblx0XHRcdGJhc2ljID0gMDtcblx0XHR9XG5cblx0XHRmb3IgKGogPSAwOyBqIDwgYmFzaWM7ICsraikge1xuXHRcdFx0Ly8gaWYgaXQncyBub3QgYSBiYXNpYyBjb2RlIHBvaW50XG5cdFx0XHRpZiAoaW5wdXQuY2hhckNvZGVBdChqKSA+PSAweDgwKSB7XG5cdFx0XHRcdGVycm9yKCdub3QtYmFzaWMnKTtcblx0XHRcdH1cblx0XHRcdG91dHB1dC5wdXNoKGlucHV0LmNoYXJDb2RlQXQoaikpO1xuXHRcdH1cblxuXHRcdC8vIE1haW4gZGVjb2RpbmcgbG9vcDogc3RhcnQganVzdCBhZnRlciB0aGUgbGFzdCBkZWxpbWl0ZXIgaWYgYW55IGJhc2ljIGNvZGVcblx0XHQvLyBwb2ludHMgd2VyZSBjb3BpZWQ7IHN0YXJ0IGF0IHRoZSBiZWdpbm5pbmcgb3RoZXJ3aXNlLlxuXG5cdFx0Zm9yIChpbmRleCA9IGJhc2ljID4gMCA/IGJhc2ljICsgMSA6IDA7IGluZGV4IDwgaW5wdXRMZW5ndGg7IC8qIG5vIGZpbmFsIGV4cHJlc3Npb24gKi8pIHtcblxuXHRcdFx0Ly8gYGluZGV4YCBpcyB0aGUgaW5kZXggb2YgdGhlIG5leHQgY2hhcmFjdGVyIHRvIGJlIGNvbnN1bWVkLlxuXHRcdFx0Ly8gRGVjb2RlIGEgZ2VuZXJhbGl6ZWQgdmFyaWFibGUtbGVuZ3RoIGludGVnZXIgaW50byBgZGVsdGFgLFxuXHRcdFx0Ly8gd2hpY2ggZ2V0cyBhZGRlZCB0byBgaWAuIFRoZSBvdmVyZmxvdyBjaGVja2luZyBpcyBlYXNpZXJcblx0XHRcdC8vIGlmIHdlIGluY3JlYXNlIGBpYCBhcyB3ZSBnbywgdGhlbiBzdWJ0cmFjdCBvZmYgaXRzIHN0YXJ0aW5nXG5cdFx0XHQvLyB2YWx1ZSBhdCB0aGUgZW5kIHRvIG9idGFpbiBgZGVsdGFgLlxuXHRcdFx0Zm9yIChvbGRpID0gaSwgdyA9IDEsIGsgPSBiYXNlOyAvKiBubyBjb25kaXRpb24gKi87IGsgKz0gYmFzZSkge1xuXG5cdFx0XHRcdGlmIChpbmRleCA+PSBpbnB1dExlbmd0aCkge1xuXHRcdFx0XHRcdGVycm9yKCdpbnZhbGlkLWlucHV0Jyk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRkaWdpdCA9IGJhc2ljVG9EaWdpdChpbnB1dC5jaGFyQ29kZUF0KGluZGV4KyspKTtcblxuXHRcdFx0XHRpZiAoZGlnaXQgPj0gYmFzZSB8fCBkaWdpdCA+IGZsb29yKChtYXhJbnQgLSBpKSAvIHcpKSB7XG5cdFx0XHRcdFx0ZXJyb3IoJ292ZXJmbG93Jyk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpICs9IGRpZ2l0ICogdztcblx0XHRcdFx0dCA9IGsgPD0gYmlhcyA/IHRNaW4gOiAoayA+PSBiaWFzICsgdE1heCA/IHRNYXggOiBrIC0gYmlhcyk7XG5cblx0XHRcdFx0aWYgKGRpZ2l0IDwgdCkge1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0YmFzZU1pbnVzVCA9IGJhc2UgLSB0O1xuXHRcdFx0XHRpZiAodyA+IGZsb29yKG1heEludCAvIGJhc2VNaW51c1QpKSB7XG5cdFx0XHRcdFx0ZXJyb3IoJ292ZXJmbG93Jyk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHR3ICo9IGJhc2VNaW51c1Q7XG5cblx0XHRcdH1cblxuXHRcdFx0b3V0ID0gb3V0cHV0Lmxlbmd0aCArIDE7XG5cdFx0XHRiaWFzID0gYWRhcHQoaSAtIG9sZGksIG91dCwgb2xkaSA9PSAwKTtcblxuXHRcdFx0Ly8gYGlgIHdhcyBzdXBwb3NlZCB0byB3cmFwIGFyb3VuZCBmcm9tIGBvdXRgIHRvIGAwYCxcblx0XHRcdC8vIGluY3JlbWVudGluZyBgbmAgZWFjaCB0aW1lLCBzbyB3ZSdsbCBmaXggdGhhdCBub3c6XG5cdFx0XHRpZiAoZmxvb3IoaSAvIG91dCkgPiBtYXhJbnQgLSBuKSB7XG5cdFx0XHRcdGVycm9yKCdvdmVyZmxvdycpO1xuXHRcdFx0fVxuXG5cdFx0XHRuICs9IGZsb29yKGkgLyBvdXQpO1xuXHRcdFx0aSAlPSBvdXQ7XG5cblx0XHRcdC8vIEluc2VydCBgbmAgYXQgcG9zaXRpb24gYGlgIG9mIHRoZSBvdXRwdXRcblx0XHRcdG91dHB1dC5zcGxpY2UoaSsrLCAwLCBuKTtcblxuXHRcdH1cblxuXHRcdHJldHVybiB1Y3MyZW5jb2RlKG91dHB1dCk7XG5cdH1cblxuXHQvKipcblx0ICogQ29udmVydHMgYSBzdHJpbmcgb2YgVW5pY29kZSBzeW1ib2xzIChlLmcuIGEgZG9tYWluIG5hbWUgbGFiZWwpIHRvIGFcblx0ICogUHVueWNvZGUgc3RyaW5nIG9mIEFTQ0lJLW9ubHkgc3ltYm9scy5cblx0ICogQG1lbWJlck9mIHB1bnljb2RlXG5cdCAqIEBwYXJhbSB7U3RyaW5nfSBpbnB1dCBUaGUgc3RyaW5nIG9mIFVuaWNvZGUgc3ltYm9scy5cblx0ICogQHJldHVybnMge1N0cmluZ30gVGhlIHJlc3VsdGluZyBQdW55Y29kZSBzdHJpbmcgb2YgQVNDSUktb25seSBzeW1ib2xzLlxuXHQgKi9cblx0ZnVuY3Rpb24gZW5jb2RlKGlucHV0KSB7XG5cdFx0dmFyIG4sXG5cdFx0ICAgIGRlbHRhLFxuXHRcdCAgICBoYW5kbGVkQ1BDb3VudCxcblx0XHQgICAgYmFzaWNMZW5ndGgsXG5cdFx0ICAgIGJpYXMsXG5cdFx0ICAgIGosXG5cdFx0ICAgIG0sXG5cdFx0ICAgIHEsXG5cdFx0ICAgIGssXG5cdFx0ICAgIHQsXG5cdFx0ICAgIGN1cnJlbnRWYWx1ZSxcblx0XHQgICAgb3V0cHV0ID0gW10sXG5cdFx0ICAgIC8qKiBgaW5wdXRMZW5ndGhgIHdpbGwgaG9sZCB0aGUgbnVtYmVyIG9mIGNvZGUgcG9pbnRzIGluIGBpbnB1dGAuICovXG5cdFx0ICAgIGlucHV0TGVuZ3RoLFxuXHRcdCAgICAvKiogQ2FjaGVkIGNhbGN1bGF0aW9uIHJlc3VsdHMgKi9cblx0XHQgICAgaGFuZGxlZENQQ291bnRQbHVzT25lLFxuXHRcdCAgICBiYXNlTWludXNULFxuXHRcdCAgICBxTWludXNUO1xuXG5cdFx0Ly8gQ29udmVydCB0aGUgaW5wdXQgaW4gVUNTLTIgdG8gVW5pY29kZVxuXHRcdGlucHV0ID0gdWNzMmRlY29kZShpbnB1dCk7XG5cblx0XHQvLyBDYWNoZSB0aGUgbGVuZ3RoXG5cdFx0aW5wdXRMZW5ndGggPSBpbnB1dC5sZW5ndGg7XG5cblx0XHQvLyBJbml0aWFsaXplIHRoZSBzdGF0ZVxuXHRcdG4gPSBpbml0aWFsTjtcblx0XHRkZWx0YSA9IDA7XG5cdFx0YmlhcyA9IGluaXRpYWxCaWFzO1xuXG5cdFx0Ly8gSGFuZGxlIHRoZSBiYXNpYyBjb2RlIHBvaW50c1xuXHRcdGZvciAoaiA9IDA7IGogPCBpbnB1dExlbmd0aDsgKytqKSB7XG5cdFx0XHRjdXJyZW50VmFsdWUgPSBpbnB1dFtqXTtcblx0XHRcdGlmIChjdXJyZW50VmFsdWUgPCAweDgwKSB7XG5cdFx0XHRcdG91dHB1dC5wdXNoKHN0cmluZ0Zyb21DaGFyQ29kZShjdXJyZW50VmFsdWUpKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRoYW5kbGVkQ1BDb3VudCA9IGJhc2ljTGVuZ3RoID0gb3V0cHV0Lmxlbmd0aDtcblxuXHRcdC8vIGBoYW5kbGVkQ1BDb3VudGAgaXMgdGhlIG51bWJlciBvZiBjb2RlIHBvaW50cyB0aGF0IGhhdmUgYmVlbiBoYW5kbGVkO1xuXHRcdC8vIGBiYXNpY0xlbmd0aGAgaXMgdGhlIG51bWJlciBvZiBiYXNpYyBjb2RlIHBvaW50cy5cblxuXHRcdC8vIEZpbmlzaCB0aGUgYmFzaWMgc3RyaW5nIC0gaWYgaXQgaXMgbm90IGVtcHR5IC0gd2l0aCBhIGRlbGltaXRlclxuXHRcdGlmIChiYXNpY0xlbmd0aCkge1xuXHRcdFx0b3V0cHV0LnB1c2goZGVsaW1pdGVyKTtcblx0XHR9XG5cblx0XHQvLyBNYWluIGVuY29kaW5nIGxvb3A6XG5cdFx0d2hpbGUgKGhhbmRsZWRDUENvdW50IDwgaW5wdXRMZW5ndGgpIHtcblxuXHRcdFx0Ly8gQWxsIG5vbi1iYXNpYyBjb2RlIHBvaW50cyA8IG4gaGF2ZSBiZWVuIGhhbmRsZWQgYWxyZWFkeS4gRmluZCB0aGUgbmV4dFxuXHRcdFx0Ly8gbGFyZ2VyIG9uZTpcblx0XHRcdGZvciAobSA9IG1heEludCwgaiA9IDA7IGogPCBpbnB1dExlbmd0aDsgKytqKSB7XG5cdFx0XHRcdGN1cnJlbnRWYWx1ZSA9IGlucHV0W2pdO1xuXHRcdFx0XHRpZiAoY3VycmVudFZhbHVlID49IG4gJiYgY3VycmVudFZhbHVlIDwgbSkge1xuXHRcdFx0XHRcdG0gPSBjdXJyZW50VmFsdWU7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0Ly8gSW5jcmVhc2UgYGRlbHRhYCBlbm91Z2ggdG8gYWR2YW5jZSB0aGUgZGVjb2RlcidzIDxuLGk+IHN0YXRlIHRvIDxtLDA+LFxuXHRcdFx0Ly8gYnV0IGd1YXJkIGFnYWluc3Qgb3ZlcmZsb3dcblx0XHRcdGhhbmRsZWRDUENvdW50UGx1c09uZSA9IGhhbmRsZWRDUENvdW50ICsgMTtcblx0XHRcdGlmIChtIC0gbiA+IGZsb29yKChtYXhJbnQgLSBkZWx0YSkgLyBoYW5kbGVkQ1BDb3VudFBsdXNPbmUpKSB7XG5cdFx0XHRcdGVycm9yKCdvdmVyZmxvdycpO1xuXHRcdFx0fVxuXG5cdFx0XHRkZWx0YSArPSAobSAtIG4pICogaGFuZGxlZENQQ291bnRQbHVzT25lO1xuXHRcdFx0biA9IG07XG5cblx0XHRcdGZvciAoaiA9IDA7IGogPCBpbnB1dExlbmd0aDsgKytqKSB7XG5cdFx0XHRcdGN1cnJlbnRWYWx1ZSA9IGlucHV0W2pdO1xuXG5cdFx0XHRcdGlmIChjdXJyZW50VmFsdWUgPCBuICYmICsrZGVsdGEgPiBtYXhJbnQpIHtcblx0XHRcdFx0XHRlcnJvcignb3ZlcmZsb3cnKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGlmIChjdXJyZW50VmFsdWUgPT0gbikge1xuXHRcdFx0XHRcdC8vIFJlcHJlc2VudCBkZWx0YSBhcyBhIGdlbmVyYWxpemVkIHZhcmlhYmxlLWxlbmd0aCBpbnRlZ2VyXG5cdFx0XHRcdFx0Zm9yIChxID0gZGVsdGEsIGsgPSBiYXNlOyAvKiBubyBjb25kaXRpb24gKi87IGsgKz0gYmFzZSkge1xuXHRcdFx0XHRcdFx0dCA9IGsgPD0gYmlhcyA/IHRNaW4gOiAoayA+PSBiaWFzICsgdE1heCA/IHRNYXggOiBrIC0gYmlhcyk7XG5cdFx0XHRcdFx0XHRpZiAocSA8IHQpIHtcblx0XHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRxTWludXNUID0gcSAtIHQ7XG5cdFx0XHRcdFx0XHRiYXNlTWludXNUID0gYmFzZSAtIHQ7XG5cdFx0XHRcdFx0XHRvdXRwdXQucHVzaChcblx0XHRcdFx0XHRcdFx0c3RyaW5nRnJvbUNoYXJDb2RlKGRpZ2l0VG9CYXNpYyh0ICsgcU1pbnVzVCAlIGJhc2VNaW51c1QsIDApKVxuXHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdHEgPSBmbG9vcihxTWludXNUIC8gYmFzZU1pbnVzVCk7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0b3V0cHV0LnB1c2goc3RyaW5nRnJvbUNoYXJDb2RlKGRpZ2l0VG9CYXNpYyhxLCAwKSkpO1xuXHRcdFx0XHRcdGJpYXMgPSBhZGFwdChkZWx0YSwgaGFuZGxlZENQQ291bnRQbHVzT25lLCBoYW5kbGVkQ1BDb3VudCA9PSBiYXNpY0xlbmd0aCk7XG5cdFx0XHRcdFx0ZGVsdGEgPSAwO1xuXHRcdFx0XHRcdCsraGFuZGxlZENQQ291bnQ7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0KytkZWx0YTtcblx0XHRcdCsrbjtcblxuXHRcdH1cblx0XHRyZXR1cm4gb3V0cHV0LmpvaW4oJycpO1xuXHR9XG5cblx0LyoqXG5cdCAqIENvbnZlcnRzIGEgUHVueWNvZGUgc3RyaW5nIHJlcHJlc2VudGluZyBhIGRvbWFpbiBuYW1lIG9yIGFuIGVtYWlsIGFkZHJlc3Ncblx0ICogdG8gVW5pY29kZS4gT25seSB0aGUgUHVueWNvZGVkIHBhcnRzIG9mIHRoZSBpbnB1dCB3aWxsIGJlIGNvbnZlcnRlZCwgaS5lLlxuXHQgKiBpdCBkb2Vzbid0IG1hdHRlciBpZiB5b3UgY2FsbCBpdCBvbiBhIHN0cmluZyB0aGF0IGhhcyBhbHJlYWR5IGJlZW5cblx0ICogY29udmVydGVkIHRvIFVuaWNvZGUuXG5cdCAqIEBtZW1iZXJPZiBwdW55Y29kZVxuXHQgKiBAcGFyYW0ge1N0cmluZ30gaW5wdXQgVGhlIFB1bnljb2RlZCBkb21haW4gbmFtZSBvciBlbWFpbCBhZGRyZXNzIHRvXG5cdCAqIGNvbnZlcnQgdG8gVW5pY29kZS5cblx0ICogQHJldHVybnMge1N0cmluZ30gVGhlIFVuaWNvZGUgcmVwcmVzZW50YXRpb24gb2YgdGhlIGdpdmVuIFB1bnljb2RlXG5cdCAqIHN0cmluZy5cblx0ICovXG5cdGZ1bmN0aW9uIHRvVW5pY29kZShpbnB1dCkge1xuXHRcdHJldHVybiBtYXBEb21haW4oaW5wdXQsIGZ1bmN0aW9uKHN0cmluZykge1xuXHRcdFx0cmV0dXJuIHJlZ2V4UHVueWNvZGUudGVzdChzdHJpbmcpXG5cdFx0XHRcdD8gZGVjb2RlKHN0cmluZy5zbGljZSg0KS50b0xvd2VyQ2FzZSgpKVxuXHRcdFx0XHQ6IHN0cmluZztcblx0XHR9KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBDb252ZXJ0cyBhIFVuaWNvZGUgc3RyaW5nIHJlcHJlc2VudGluZyBhIGRvbWFpbiBuYW1lIG9yIGFuIGVtYWlsIGFkZHJlc3MgdG9cblx0ICogUHVueWNvZGUuIE9ubHkgdGhlIG5vbi1BU0NJSSBwYXJ0cyBvZiB0aGUgZG9tYWluIG5hbWUgd2lsbCBiZSBjb252ZXJ0ZWQsXG5cdCAqIGkuZS4gaXQgZG9lc24ndCBtYXR0ZXIgaWYgeW91IGNhbGwgaXQgd2l0aCBhIGRvbWFpbiB0aGF0J3MgYWxyZWFkeSBpblxuXHQgKiBBU0NJSS5cblx0ICogQG1lbWJlck9mIHB1bnljb2RlXG5cdCAqIEBwYXJhbSB7U3RyaW5nfSBpbnB1dCBUaGUgZG9tYWluIG5hbWUgb3IgZW1haWwgYWRkcmVzcyB0byBjb252ZXJ0LCBhcyBhXG5cdCAqIFVuaWNvZGUgc3RyaW5nLlxuXHQgKiBAcmV0dXJucyB7U3RyaW5nfSBUaGUgUHVueWNvZGUgcmVwcmVzZW50YXRpb24gb2YgdGhlIGdpdmVuIGRvbWFpbiBuYW1lIG9yXG5cdCAqIGVtYWlsIGFkZHJlc3MuXG5cdCAqL1xuXHRmdW5jdGlvbiB0b0FTQ0lJKGlucHV0KSB7XG5cdFx0cmV0dXJuIG1hcERvbWFpbihpbnB1dCwgZnVuY3Rpb24oc3RyaW5nKSB7XG5cdFx0XHRyZXR1cm4gcmVnZXhOb25BU0NJSS50ZXN0KHN0cmluZylcblx0XHRcdFx0PyAneG4tLScgKyBlbmNvZGUoc3RyaW5nKVxuXHRcdFx0XHQ6IHN0cmluZztcblx0XHR9KTtcblx0fVxuXG5cdC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuXG5cdC8qKiBEZWZpbmUgdGhlIHB1YmxpYyBBUEkgKi9cblx0cHVueWNvZGUgPSB7XG5cdFx0LyoqXG5cdFx0ICogQSBzdHJpbmcgcmVwcmVzZW50aW5nIHRoZSBjdXJyZW50IFB1bnljb2RlLmpzIHZlcnNpb24gbnVtYmVyLlxuXHRcdCAqIEBtZW1iZXJPZiBwdW55Y29kZVxuXHRcdCAqIEB0eXBlIFN0cmluZ1xuXHRcdCAqL1xuXHRcdCd2ZXJzaW9uJzogJzEuMy4yJyxcblx0XHQvKipcblx0XHQgKiBBbiBvYmplY3Qgb2YgbWV0aG9kcyB0byBjb252ZXJ0IGZyb20gSmF2YVNjcmlwdCdzIGludGVybmFsIGNoYXJhY3RlclxuXHRcdCAqIHJlcHJlc2VudGF0aW9uIChVQ1MtMikgdG8gVW5pY29kZSBjb2RlIHBvaW50cywgYW5kIGJhY2suXG5cdFx0ICogQHNlZSA8aHR0cHM6Ly9tYXRoaWFzYnluZW5zLmJlL25vdGVzL2phdmFzY3JpcHQtZW5jb2Rpbmc+XG5cdFx0ICogQG1lbWJlck9mIHB1bnljb2RlXG5cdFx0ICogQHR5cGUgT2JqZWN0XG5cdFx0ICovXG5cdFx0J3VjczInOiB7XG5cdFx0XHQnZGVjb2RlJzogdWNzMmRlY29kZSxcblx0XHRcdCdlbmNvZGUnOiB1Y3MyZW5jb2RlXG5cdFx0fSxcblx0XHQnZGVjb2RlJzogZGVjb2RlLFxuXHRcdCdlbmNvZGUnOiBlbmNvZGUsXG5cdFx0J3RvQVNDSUknOiB0b0FTQ0lJLFxuXHRcdCd0b1VuaWNvZGUnOiB0b1VuaWNvZGVcblx0fTtcblxuXHQvKiogRXhwb3NlIGBwdW55Y29kZWAgKi9cblx0Ly8gU29tZSBBTUQgYnVpbGQgb3B0aW1pemVycywgbGlrZSByLmpzLCBjaGVjayBmb3Igc3BlY2lmaWMgY29uZGl0aW9uIHBhdHRlcm5zXG5cdC8vIGxpa2UgdGhlIGZvbGxvd2luZzpcblx0aWYgKFxuXHRcdHR5cGVvZiBkZWZpbmUgPT0gJ2Z1bmN0aW9uJyAmJlxuXHRcdHR5cGVvZiBkZWZpbmUuYW1kID09ICdvYmplY3QnICYmXG5cdFx0ZGVmaW5lLmFtZFxuXHQpIHtcblx0XHRkZWZpbmUoJ3B1bnljb2RlJywgZnVuY3Rpb24oKSB7XG5cdFx0XHRyZXR1cm4gcHVueWNvZGU7XG5cdFx0fSk7XG5cdH0gZWxzZSBpZiAoZnJlZUV4cG9ydHMgJiYgZnJlZU1vZHVsZSkge1xuXHRcdGlmIChtb2R1bGUuZXhwb3J0cyA9PSBmcmVlRXhwb3J0cykge1xuXHRcdFx0Ly8gaW4gTm9kZS5qcywgaW8uanMsIG9yIFJpbmdvSlMgdjAuOC4wK1xuXHRcdFx0ZnJlZU1vZHVsZS5leHBvcnRzID0gcHVueWNvZGU7XG5cdFx0fSBlbHNlIHtcblx0XHRcdC8vIGluIE5hcndoYWwgb3IgUmluZ29KUyB2MC43LjAtXG5cdFx0XHRmb3IgKGtleSBpbiBwdW55Y29kZSkge1xuXHRcdFx0XHRwdW55Y29kZS5oYXNPd25Qcm9wZXJ0eShrZXkpICYmIChmcmVlRXhwb3J0c1trZXldID0gcHVueWNvZGVba2V5XSk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9IGVsc2Uge1xuXHRcdC8vIGluIFJoaW5vIG9yIGEgd2ViIGJyb3dzZXJcblx0XHRyb290LnB1bnljb2RlID0gcHVueWNvZGU7XG5cdH1cblxufSh0aGlzKSk7XG4iLCIvLyBDb3B5cmlnaHQgSm95ZW50LCBJbmMuIGFuZCBvdGhlciBOb2RlIGNvbnRyaWJ1dG9ycy5cbi8vXG4vLyBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYVxuLy8gY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZVxuLy8gXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nXG4vLyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsXG4vLyBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0XG4vLyBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGVcbi8vIGZvbGxvd2luZyBjb25kaXRpb25zOlxuLy9cbi8vIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkXG4vLyBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbi8vXG4vLyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTXG4vLyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GXG4vLyBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOXG4vLyBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSxcbi8vIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUlxuLy8gT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRVxuLy8gVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cblxuJ3VzZSBzdHJpY3QnO1xuXG4vLyBJZiBvYmouaGFzT3duUHJvcGVydHkgaGFzIGJlZW4gb3ZlcnJpZGRlbiwgdGhlbiBjYWxsaW5nXG4vLyBvYmouaGFzT3duUHJvcGVydHkocHJvcCkgd2lsbCBicmVhay5cbi8vIFNlZTogaHR0cHM6Ly9naXRodWIuY29tL2pveWVudC9ub2RlL2lzc3Vlcy8xNzA3XG5mdW5jdGlvbiBoYXNPd25Qcm9wZXJ0eShvYmosIHByb3ApIHtcbiAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmosIHByb3ApO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKHFzLCBzZXAsIGVxLCBvcHRpb25zKSB7XG4gIHNlcCA9IHNlcCB8fCAnJic7XG4gIGVxID0gZXEgfHwgJz0nO1xuICB2YXIgb2JqID0ge307XG5cbiAgaWYgKHR5cGVvZiBxcyAhPT0gJ3N0cmluZycgfHwgcXMubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIG9iajtcbiAgfVxuXG4gIHZhciByZWdleHAgPSAvXFwrL2c7XG4gIHFzID0gcXMuc3BsaXQoc2VwKTtcblxuICB2YXIgbWF4S2V5cyA9IDEwMDA7XG4gIGlmIChvcHRpb25zICYmIHR5cGVvZiBvcHRpb25zLm1heEtleXMgPT09ICdudW1iZXInKSB7XG4gICAgbWF4S2V5cyA9IG9wdGlvbnMubWF4S2V5cztcbiAgfVxuXG4gIHZhciBsZW4gPSBxcy5sZW5ndGg7XG4gIC8vIG1heEtleXMgPD0gMCBtZWFucyB0aGF0IHdlIHNob3VsZCBub3QgbGltaXQga2V5cyBjb3VudFxuICBpZiAobWF4S2V5cyA+IDAgJiYgbGVuID4gbWF4S2V5cykge1xuICAgIGxlbiA9IG1heEtleXM7XG4gIH1cblxuICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgKytpKSB7XG4gICAgdmFyIHggPSBxc1tpXS5yZXBsYWNlKHJlZ2V4cCwgJyUyMCcpLFxuICAgICAgICBpZHggPSB4LmluZGV4T2YoZXEpLFxuICAgICAgICBrc3RyLCB2c3RyLCBrLCB2O1xuXG4gICAgaWYgKGlkeCA+PSAwKSB7XG4gICAgICBrc3RyID0geC5zdWJzdHIoMCwgaWR4KTtcbiAgICAgIHZzdHIgPSB4LnN1YnN0cihpZHggKyAxKTtcbiAgICB9IGVsc2Uge1xuICAgICAga3N0ciA9IHg7XG4gICAgICB2c3RyID0gJyc7XG4gICAgfVxuXG4gICAgayA9IGRlY29kZVVSSUNvbXBvbmVudChrc3RyKTtcbiAgICB2ID0gZGVjb2RlVVJJQ29tcG9uZW50KHZzdHIpO1xuXG4gICAgaWYgKCFoYXNPd25Qcm9wZXJ0eShvYmosIGspKSB7XG4gICAgICBvYmpba10gPSB2O1xuICAgIH0gZWxzZSBpZiAoaXNBcnJheShvYmpba10pKSB7XG4gICAgICBvYmpba10ucHVzaCh2KTtcbiAgICB9IGVsc2Uge1xuICAgICAgb2JqW2tdID0gW29ialtrXSwgdl07XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG9iajtcbn07XG5cbnZhciBpc0FycmF5ID0gQXJyYXkuaXNBcnJheSB8fCBmdW5jdGlvbiAoeHMpIHtcbiAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh4cykgPT09ICdbb2JqZWN0IEFycmF5XSc7XG59O1xuIiwiLy8gQ29weXJpZ2h0IEpveWVudCwgSW5jLiBhbmQgb3RoZXIgTm9kZSBjb250cmlidXRvcnMuXG4vL1xuLy8gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGFcbi8vIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGVcbi8vIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZ1xuLy8gd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLFxuLy8gZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdFxuLy8gcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlXG4vLyBmb2xsb3dpbmcgY29uZGl0aW9uczpcbi8vXG4vLyBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZFxuLy8gaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4vL1xuLy8gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTU1xuLy8gT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRlxuLy8gTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTlxuLy8gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sXG4vLyBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1Jcbi8vIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEVcbi8vIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG5cbid1c2Ugc3RyaWN0JztcblxudmFyIHN0cmluZ2lmeVByaW1pdGl2ZSA9IGZ1bmN0aW9uKHYpIHtcbiAgc3dpdGNoICh0eXBlb2Ygdikge1xuICAgIGNhc2UgJ3N0cmluZyc6XG4gICAgICByZXR1cm4gdjtcblxuICAgIGNhc2UgJ2Jvb2xlYW4nOlxuICAgICAgcmV0dXJuIHYgPyAndHJ1ZScgOiAnZmFsc2UnO1xuXG4gICAgY2FzZSAnbnVtYmVyJzpcbiAgICAgIHJldHVybiBpc0Zpbml0ZSh2KSA/IHYgOiAnJztcblxuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gJyc7XG4gIH1cbn07XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24ob2JqLCBzZXAsIGVxLCBuYW1lKSB7XG4gIHNlcCA9IHNlcCB8fCAnJic7XG4gIGVxID0gZXEgfHwgJz0nO1xuICBpZiAob2JqID09PSBudWxsKSB7XG4gICAgb2JqID0gdW5kZWZpbmVkO1xuICB9XG5cbiAgaWYgKHR5cGVvZiBvYmogPT09ICdvYmplY3QnKSB7XG4gICAgcmV0dXJuIG1hcChvYmplY3RLZXlzKG9iaiksIGZ1bmN0aW9uKGspIHtcbiAgICAgIHZhciBrcyA9IGVuY29kZVVSSUNvbXBvbmVudChzdHJpbmdpZnlQcmltaXRpdmUoaykpICsgZXE7XG4gICAgICBpZiAoaXNBcnJheShvYmpba10pKSB7XG4gICAgICAgIHJldHVybiBtYXAob2JqW2tdLCBmdW5jdGlvbih2KSB7XG4gICAgICAgICAgcmV0dXJuIGtzICsgZW5jb2RlVVJJQ29tcG9uZW50KHN0cmluZ2lmeVByaW1pdGl2ZSh2KSk7XG4gICAgICAgIH0pLmpvaW4oc2VwKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBrcyArIGVuY29kZVVSSUNvbXBvbmVudChzdHJpbmdpZnlQcmltaXRpdmUob2JqW2tdKSk7XG4gICAgICB9XG4gICAgfSkuam9pbihzZXApO1xuXG4gIH1cblxuICBpZiAoIW5hbWUpIHJldHVybiAnJztcbiAgcmV0dXJuIGVuY29kZVVSSUNvbXBvbmVudChzdHJpbmdpZnlQcmltaXRpdmUobmFtZSkpICsgZXEgK1xuICAgICAgICAgZW5jb2RlVVJJQ29tcG9uZW50KHN0cmluZ2lmeVByaW1pdGl2ZShvYmopKTtcbn07XG5cbnZhciBpc0FycmF5ID0gQXJyYXkuaXNBcnJheSB8fCBmdW5jdGlvbiAoeHMpIHtcbiAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh4cykgPT09ICdbb2JqZWN0IEFycmF5XSc7XG59O1xuXG5mdW5jdGlvbiBtYXAgKHhzLCBmKSB7XG4gIGlmICh4cy5tYXApIHJldHVybiB4cy5tYXAoZik7XG4gIHZhciByZXMgPSBbXTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCB4cy5sZW5ndGg7IGkrKykge1xuICAgIHJlcy5wdXNoKGYoeHNbaV0sIGkpKTtcbiAgfVxuICByZXR1cm4gcmVzO1xufVxuXG52YXIgb2JqZWN0S2V5cyA9IE9iamVjdC5rZXlzIHx8IGZ1bmN0aW9uIChvYmopIHtcbiAgdmFyIHJlcyA9IFtdO1xuICBmb3IgKHZhciBrZXkgaW4gb2JqKSB7XG4gICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmosIGtleSkpIHJlcy5wdXNoKGtleSk7XG4gIH1cbiAgcmV0dXJuIHJlcztcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbmV4cG9ydHMuZGVjb2RlID0gZXhwb3J0cy5wYXJzZSA9IHJlcXVpcmUoJy4vZGVjb2RlJyk7XG5leHBvcnRzLmVuY29kZSA9IGV4cG9ydHMuc3RyaW5naWZ5ID0gcmVxdWlyZSgnLi9lbmNvZGUnKTtcbiIsIi8vIENvcHlyaWdodCBKb3llbnQsIEluYy4gYW5kIG90aGVyIE5vZGUgY29udHJpYnV0b3JzLlxuLy9cbi8vIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhXG4vLyBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlXG4vLyBcIlNvZnR3YXJlXCIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmdcbi8vIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCxcbi8vIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXRcbi8vIHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZVxuLy8gZm9sbG93aW5nIGNvbmRpdGlvbnM6XG4vL1xuLy8gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWRcbi8vIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuLy9cbi8vIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1Ncbi8vIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0Zcbi8vIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU5cbi8vIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLFxuLy8gREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SXG4vLyBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFXG4vLyBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLlxuXG52YXIgcHVueWNvZGUgPSByZXF1aXJlKCdwdW55Y29kZScpO1xuXG5leHBvcnRzLnBhcnNlID0gdXJsUGFyc2U7XG5leHBvcnRzLnJlc29sdmUgPSB1cmxSZXNvbHZlO1xuZXhwb3J0cy5yZXNvbHZlT2JqZWN0ID0gdXJsUmVzb2x2ZU9iamVjdDtcbmV4cG9ydHMuZm9ybWF0ID0gdXJsRm9ybWF0O1xuXG5leHBvcnRzLlVybCA9IFVybDtcblxuZnVuY3Rpb24gVXJsKCkge1xuICB0aGlzLnByb3RvY29sID0gbnVsbDtcbiAgdGhpcy5zbGFzaGVzID0gbnVsbDtcbiAgdGhpcy5hdXRoID0gbnVsbDtcbiAgdGhpcy5ob3N0ID0gbnVsbDtcbiAgdGhpcy5wb3J0ID0gbnVsbDtcbiAgdGhpcy5ob3N0bmFtZSA9IG51bGw7XG4gIHRoaXMuaGFzaCA9IG51bGw7XG4gIHRoaXMuc2VhcmNoID0gbnVsbDtcbiAgdGhpcy5xdWVyeSA9IG51bGw7XG4gIHRoaXMucGF0aG5hbWUgPSBudWxsO1xuICB0aGlzLnBhdGggPSBudWxsO1xuICB0aGlzLmhyZWYgPSBudWxsO1xufVxuXG4vLyBSZWZlcmVuY2U6IFJGQyAzOTg2LCBSRkMgMTgwOCwgUkZDIDIzOTZcblxuLy8gZGVmaW5lIHRoZXNlIGhlcmUgc28gYXQgbGVhc3QgdGhleSBvbmx5IGhhdmUgdG8gYmVcbi8vIGNvbXBpbGVkIG9uY2Ugb24gdGhlIGZpcnN0IG1vZHVsZSBsb2FkLlxudmFyIHByb3RvY29sUGF0dGVybiA9IC9eKFthLXowLTkuKy1dKzopL2ksXG4gICAgcG9ydFBhdHRlcm4gPSAvOlswLTldKiQvLFxuXG4gICAgLy8gUkZDIDIzOTY6IGNoYXJhY3RlcnMgcmVzZXJ2ZWQgZm9yIGRlbGltaXRpbmcgVVJMcy5cbiAgICAvLyBXZSBhY3R1YWxseSBqdXN0IGF1dG8tZXNjYXBlIHRoZXNlLlxuICAgIGRlbGltcyA9IFsnPCcsICc+JywgJ1wiJywgJ2AnLCAnICcsICdcXHInLCAnXFxuJywgJ1xcdCddLFxuXG4gICAgLy8gUkZDIDIzOTY6IGNoYXJhY3RlcnMgbm90IGFsbG93ZWQgZm9yIHZhcmlvdXMgcmVhc29ucy5cbiAgICB1bndpc2UgPSBbJ3snLCAnfScsICd8JywgJ1xcXFwnLCAnXicsICdgJ10uY29uY2F0KGRlbGltcyksXG5cbiAgICAvLyBBbGxvd2VkIGJ5IFJGQ3MsIGJ1dCBjYXVzZSBvZiBYU1MgYXR0YWNrcy4gIEFsd2F5cyBlc2NhcGUgdGhlc2UuXG4gICAgYXV0b0VzY2FwZSA9IFsnXFwnJ10uY29uY2F0KHVud2lzZSksXG4gICAgLy8gQ2hhcmFjdGVycyB0aGF0IGFyZSBuZXZlciBldmVyIGFsbG93ZWQgaW4gYSBob3N0bmFtZS5cbiAgICAvLyBOb3RlIHRoYXQgYW55IGludmFsaWQgY2hhcnMgYXJlIGFsc28gaGFuZGxlZCwgYnV0IHRoZXNlXG4gICAgLy8gYXJlIHRoZSBvbmVzIHRoYXQgYXJlICpleHBlY3RlZCogdG8gYmUgc2Vlbiwgc28gd2UgZmFzdC1wYXRoXG4gICAgLy8gdGhlbS5cbiAgICBub25Ib3N0Q2hhcnMgPSBbJyUnLCAnLycsICc/JywgJzsnLCAnIyddLmNvbmNhdChhdXRvRXNjYXBlKSxcbiAgICBob3N0RW5kaW5nQ2hhcnMgPSBbJy8nLCAnPycsICcjJ10sXG4gICAgaG9zdG5hbWVNYXhMZW4gPSAyNTUsXG4gICAgaG9zdG5hbWVQYXJ0UGF0dGVybiA9IC9eW2EtejAtOUEtWl8tXXswLDYzfSQvLFxuICAgIGhvc3RuYW1lUGFydFN0YXJ0ID0gL14oW2EtejAtOUEtWl8tXXswLDYzfSkoLiopJC8sXG4gICAgLy8gcHJvdG9jb2xzIHRoYXQgY2FuIGFsbG93IFwidW5zYWZlXCIgYW5kIFwidW53aXNlXCIgY2hhcnMuXG4gICAgdW5zYWZlUHJvdG9jb2wgPSB7XG4gICAgICAnamF2YXNjcmlwdCc6IHRydWUsXG4gICAgICAnamF2YXNjcmlwdDonOiB0cnVlXG4gICAgfSxcbiAgICAvLyBwcm90b2NvbHMgdGhhdCBuZXZlciBoYXZlIGEgaG9zdG5hbWUuXG4gICAgaG9zdGxlc3NQcm90b2NvbCA9IHtcbiAgICAgICdqYXZhc2NyaXB0JzogdHJ1ZSxcbiAgICAgICdqYXZhc2NyaXB0Oic6IHRydWVcbiAgICB9LFxuICAgIC8vIHByb3RvY29scyB0aGF0IGFsd2F5cyBjb250YWluIGEgLy8gYml0LlxuICAgIHNsYXNoZWRQcm90b2NvbCA9IHtcbiAgICAgICdodHRwJzogdHJ1ZSxcbiAgICAgICdodHRwcyc6IHRydWUsXG4gICAgICAnZnRwJzogdHJ1ZSxcbiAgICAgICdnb3BoZXInOiB0cnVlLFxuICAgICAgJ2ZpbGUnOiB0cnVlLFxuICAgICAgJ2h0dHA6JzogdHJ1ZSxcbiAgICAgICdodHRwczonOiB0cnVlLFxuICAgICAgJ2Z0cDonOiB0cnVlLFxuICAgICAgJ2dvcGhlcjonOiB0cnVlLFxuICAgICAgJ2ZpbGU6JzogdHJ1ZVxuICAgIH0sXG4gICAgcXVlcnlzdHJpbmcgPSByZXF1aXJlKCdxdWVyeXN0cmluZycpO1xuXG5mdW5jdGlvbiB1cmxQYXJzZSh1cmwsIHBhcnNlUXVlcnlTdHJpbmcsIHNsYXNoZXNEZW5vdGVIb3N0KSB7XG4gIGlmICh1cmwgJiYgaXNPYmplY3QodXJsKSAmJiB1cmwgaW5zdGFuY2VvZiBVcmwpIHJldHVybiB1cmw7XG5cbiAgdmFyIHUgPSBuZXcgVXJsO1xuICB1LnBhcnNlKHVybCwgcGFyc2VRdWVyeVN0cmluZywgc2xhc2hlc0Rlbm90ZUhvc3QpO1xuICByZXR1cm4gdTtcbn1cblxuVXJsLnByb3RvdHlwZS5wYXJzZSA9IGZ1bmN0aW9uKHVybCwgcGFyc2VRdWVyeVN0cmluZywgc2xhc2hlc0Rlbm90ZUhvc3QpIHtcbiAgaWYgKCFpc1N0cmluZyh1cmwpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlBhcmFtZXRlciAndXJsJyBtdXN0IGJlIGEgc3RyaW5nLCBub3QgXCIgKyB0eXBlb2YgdXJsKTtcbiAgfVxuXG4gIHZhciByZXN0ID0gdXJsO1xuXG4gIC8vIHRyaW0gYmVmb3JlIHByb2NlZWRpbmcuXG4gIC8vIFRoaXMgaXMgdG8gc3VwcG9ydCBwYXJzZSBzdHVmZiBsaWtlIFwiICBodHRwOi8vZm9vLmNvbSAgXFxuXCJcbiAgcmVzdCA9IHJlc3QudHJpbSgpO1xuXG4gIHZhciBwcm90byA9IHByb3RvY29sUGF0dGVybi5leGVjKHJlc3QpO1xuICBpZiAocHJvdG8pIHtcbiAgICBwcm90byA9IHByb3RvWzBdO1xuICAgIHZhciBsb3dlclByb3RvID0gcHJvdG8udG9Mb3dlckNhc2UoKTtcbiAgICB0aGlzLnByb3RvY29sID0gbG93ZXJQcm90bztcbiAgICByZXN0ID0gcmVzdC5zdWJzdHIocHJvdG8ubGVuZ3RoKTtcbiAgfVxuXG4gIC8vIGZpZ3VyZSBvdXQgaWYgaXQncyBnb3QgYSBob3N0XG4gIC8vIHVzZXJAc2VydmVyIGlzICphbHdheXMqIGludGVycHJldGVkIGFzIGEgaG9zdG5hbWUsIGFuZCB1cmxcbiAgLy8gcmVzb2x1dGlvbiB3aWxsIHRyZWF0IC8vZm9vL2JhciBhcyBob3N0PWZvbyxwYXRoPWJhciBiZWNhdXNlIHRoYXQnc1xuICAvLyBob3cgdGhlIGJyb3dzZXIgcmVzb2x2ZXMgcmVsYXRpdmUgVVJMcy5cbiAgaWYgKHNsYXNoZXNEZW5vdGVIb3N0IHx8IHByb3RvIHx8IHJlc3QubWF0Y2goL15cXC9cXC9bXkBcXC9dK0BbXkBcXC9dKy8pKSB7XG4gICAgdmFyIHNsYXNoZXMgPSByZXN0LnN1YnN0cigwLCAyKSA9PT0gJy8vJztcbiAgICBpZiAoc2xhc2hlcyAmJiAhKHByb3RvICYmIGhvc3RsZXNzUHJvdG9jb2xbcHJvdG9dKSkge1xuICAgICAgcmVzdCA9IHJlc3Quc3Vic3RyKDIpO1xuICAgICAgdGhpcy5zbGFzaGVzID0gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICBpZiAoIWhvc3RsZXNzUHJvdG9jb2xbcHJvdG9dICYmXG4gICAgICAoc2xhc2hlcyB8fCAocHJvdG8gJiYgIXNsYXNoZWRQcm90b2NvbFtwcm90b10pKSkge1xuXG4gICAgLy8gdGhlcmUncyBhIGhvc3RuYW1lLlxuICAgIC8vIHRoZSBmaXJzdCBpbnN0YW5jZSBvZiAvLCA/LCA7LCBvciAjIGVuZHMgdGhlIGhvc3QuXG4gICAgLy9cbiAgICAvLyBJZiB0aGVyZSBpcyBhbiBAIGluIHRoZSBob3N0bmFtZSwgdGhlbiBub24taG9zdCBjaGFycyAqYXJlKiBhbGxvd2VkXG4gICAgLy8gdG8gdGhlIGxlZnQgb2YgdGhlIGxhc3QgQCBzaWduLCB1bmxlc3Mgc29tZSBob3N0LWVuZGluZyBjaGFyYWN0ZXJcbiAgICAvLyBjb21lcyAqYmVmb3JlKiB0aGUgQC1zaWduLlxuICAgIC8vIFVSTHMgYXJlIG9ibm94aW91cy5cbiAgICAvL1xuICAgIC8vIGV4OlxuICAgIC8vIGh0dHA6Ly9hQGJAYy8gPT4gdXNlcjphQGIgaG9zdDpjXG4gICAgLy8gaHR0cDovL2FAYj9AYyA9PiB1c2VyOmEgaG9zdDpjIHBhdGg6Lz9AY1xuXG4gICAgLy8gdjAuMTIgVE9ETyhpc2FhY3MpOiBUaGlzIGlzIG5vdCBxdWl0ZSBob3cgQ2hyb21lIGRvZXMgdGhpbmdzLlxuICAgIC8vIFJldmlldyBvdXIgdGVzdCBjYXNlIGFnYWluc3QgYnJvd3NlcnMgbW9yZSBjb21wcmVoZW5zaXZlbHkuXG5cbiAgICAvLyBmaW5kIHRoZSBmaXJzdCBpbnN0YW5jZSBvZiBhbnkgaG9zdEVuZGluZ0NoYXJzXG4gICAgdmFyIGhvc3RFbmQgPSAtMTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGhvc3RFbmRpbmdDaGFycy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGhlYyA9IHJlc3QuaW5kZXhPZihob3N0RW5kaW5nQ2hhcnNbaV0pO1xuICAgICAgaWYgKGhlYyAhPT0gLTEgJiYgKGhvc3RFbmQgPT09IC0xIHx8IGhlYyA8IGhvc3RFbmQpKVxuICAgICAgICBob3N0RW5kID0gaGVjO1xuICAgIH1cblxuICAgIC8vIGF0IHRoaXMgcG9pbnQsIGVpdGhlciB3ZSBoYXZlIGFuIGV4cGxpY2l0IHBvaW50IHdoZXJlIHRoZVxuICAgIC8vIGF1dGggcG9ydGlvbiBjYW5ub3QgZ28gcGFzdCwgb3IgdGhlIGxhc3QgQCBjaGFyIGlzIHRoZSBkZWNpZGVyLlxuICAgIHZhciBhdXRoLCBhdFNpZ247XG4gICAgaWYgKGhvc3RFbmQgPT09IC0xKSB7XG4gICAgICAvLyBhdFNpZ24gY2FuIGJlIGFueXdoZXJlLlxuICAgICAgYXRTaWduID0gcmVzdC5sYXN0SW5kZXhPZignQCcpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBhdFNpZ24gbXVzdCBiZSBpbiBhdXRoIHBvcnRpb24uXG4gICAgICAvLyBodHRwOi8vYUBiL2NAZCA9PiBob3N0OmIgYXV0aDphIHBhdGg6L2NAZFxuICAgICAgYXRTaWduID0gcmVzdC5sYXN0SW5kZXhPZignQCcsIGhvc3RFbmQpO1xuICAgIH1cblxuICAgIC8vIE5vdyB3ZSBoYXZlIGEgcG9ydGlvbiB3aGljaCBpcyBkZWZpbml0ZWx5IHRoZSBhdXRoLlxuICAgIC8vIFB1bGwgdGhhdCBvZmYuXG4gICAgaWYgKGF0U2lnbiAhPT0gLTEpIHtcbiAgICAgIGF1dGggPSByZXN0LnNsaWNlKDAsIGF0U2lnbik7XG4gICAgICByZXN0ID0gcmVzdC5zbGljZShhdFNpZ24gKyAxKTtcbiAgICAgIHRoaXMuYXV0aCA9IGRlY29kZVVSSUNvbXBvbmVudChhdXRoKTtcbiAgICB9XG5cbiAgICAvLyB0aGUgaG9zdCBpcyB0aGUgcmVtYWluaW5nIHRvIHRoZSBsZWZ0IG9mIHRoZSBmaXJzdCBub24taG9zdCBjaGFyXG4gICAgaG9zdEVuZCA9IC0xO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbm9uSG9zdENoYXJzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgaGVjID0gcmVzdC5pbmRleE9mKG5vbkhvc3RDaGFyc1tpXSk7XG4gICAgICBpZiAoaGVjICE9PSAtMSAmJiAoaG9zdEVuZCA9PT0gLTEgfHwgaGVjIDwgaG9zdEVuZCkpXG4gICAgICAgIGhvc3RFbmQgPSBoZWM7XG4gICAgfVxuICAgIC8vIGlmIHdlIHN0aWxsIGhhdmUgbm90IGhpdCBpdCwgdGhlbiB0aGUgZW50aXJlIHRoaW5nIGlzIGEgaG9zdC5cbiAgICBpZiAoaG9zdEVuZCA9PT0gLTEpXG4gICAgICBob3N0RW5kID0gcmVzdC5sZW5ndGg7XG5cbiAgICB0aGlzLmhvc3QgPSByZXN0LnNsaWNlKDAsIGhvc3RFbmQpO1xuICAgIHJlc3QgPSByZXN0LnNsaWNlKGhvc3RFbmQpO1xuXG4gICAgLy8gcHVsbCBvdXQgcG9ydC5cbiAgICB0aGlzLnBhcnNlSG9zdCgpO1xuXG4gICAgLy8gd2UndmUgaW5kaWNhdGVkIHRoYXQgdGhlcmUgaXMgYSBob3N0bmFtZSxcbiAgICAvLyBzbyBldmVuIGlmIGl0J3MgZW1wdHksIGl0IGhhcyB0byBiZSBwcmVzZW50LlxuICAgIHRoaXMuaG9zdG5hbWUgPSB0aGlzLmhvc3RuYW1lIHx8ICcnO1xuXG4gICAgLy8gaWYgaG9zdG5hbWUgYmVnaW5zIHdpdGggWyBhbmQgZW5kcyB3aXRoIF1cbiAgICAvLyBhc3N1bWUgdGhhdCBpdCdzIGFuIElQdjYgYWRkcmVzcy5cbiAgICB2YXIgaXB2Nkhvc3RuYW1lID0gdGhpcy5ob3N0bmFtZVswXSA9PT0gJ1snICYmXG4gICAgICAgIHRoaXMuaG9zdG5hbWVbdGhpcy5ob3N0bmFtZS5sZW5ndGggLSAxXSA9PT0gJ10nO1xuXG4gICAgLy8gdmFsaWRhdGUgYSBsaXR0bGUuXG4gICAgaWYgKCFpcHY2SG9zdG5hbWUpIHtcbiAgICAgIHZhciBob3N0cGFydHMgPSB0aGlzLmhvc3RuYW1lLnNwbGl0KC9cXC4vKTtcbiAgICAgIGZvciAodmFyIGkgPSAwLCBsID0gaG9zdHBhcnRzLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgICAgICB2YXIgcGFydCA9IGhvc3RwYXJ0c1tpXTtcbiAgICAgICAgaWYgKCFwYXJ0KSBjb250aW51ZTtcbiAgICAgICAgaWYgKCFwYXJ0Lm1hdGNoKGhvc3RuYW1lUGFydFBhdHRlcm4pKSB7XG4gICAgICAgICAgdmFyIG5ld3BhcnQgPSAnJztcbiAgICAgICAgICBmb3IgKHZhciBqID0gMCwgayA9IHBhcnQubGVuZ3RoOyBqIDwgazsgaisrKSB7XG4gICAgICAgICAgICBpZiAocGFydC5jaGFyQ29kZUF0KGopID4gMTI3KSB7XG4gICAgICAgICAgICAgIC8vIHdlIHJlcGxhY2Ugbm9uLUFTQ0lJIGNoYXIgd2l0aCBhIHRlbXBvcmFyeSBwbGFjZWhvbGRlclxuICAgICAgICAgICAgICAvLyB3ZSBuZWVkIHRoaXMgdG8gbWFrZSBzdXJlIHNpemUgb2YgaG9zdG5hbWUgaXMgbm90XG4gICAgICAgICAgICAgIC8vIGJyb2tlbiBieSByZXBsYWNpbmcgbm9uLUFTQ0lJIGJ5IG5vdGhpbmdcbiAgICAgICAgICAgICAgbmV3cGFydCArPSAneCc7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBuZXdwYXJ0ICs9IHBhcnRbal07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIC8vIHdlIHRlc3QgYWdhaW4gd2l0aCBBU0NJSSBjaGFyIG9ubHlcbiAgICAgICAgICBpZiAoIW5ld3BhcnQubWF0Y2goaG9zdG5hbWVQYXJ0UGF0dGVybikpIHtcbiAgICAgICAgICAgIHZhciB2YWxpZFBhcnRzID0gaG9zdHBhcnRzLnNsaWNlKDAsIGkpO1xuICAgICAgICAgICAgdmFyIG5vdEhvc3QgPSBob3N0cGFydHMuc2xpY2UoaSArIDEpO1xuICAgICAgICAgICAgdmFyIGJpdCA9IHBhcnQubWF0Y2goaG9zdG5hbWVQYXJ0U3RhcnQpO1xuICAgICAgICAgICAgaWYgKGJpdCkge1xuICAgICAgICAgICAgICB2YWxpZFBhcnRzLnB1c2goYml0WzFdKTtcbiAgICAgICAgICAgICAgbm90SG9zdC51bnNoaWZ0KGJpdFsyXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAobm90SG9zdC5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgcmVzdCA9ICcvJyArIG5vdEhvc3Quam9pbignLicpICsgcmVzdDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuaG9zdG5hbWUgPSB2YWxpZFBhcnRzLmpvaW4oJy4nKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0aGlzLmhvc3RuYW1lLmxlbmd0aCA+IGhvc3RuYW1lTWF4TGVuKSB7XG4gICAgICB0aGlzLmhvc3RuYW1lID0gJyc7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIGhvc3RuYW1lcyBhcmUgYWx3YXlzIGxvd2VyIGNhc2UuXG4gICAgICB0aGlzLmhvc3RuYW1lID0gdGhpcy5ob3N0bmFtZS50b0xvd2VyQ2FzZSgpO1xuICAgIH1cblxuICAgIGlmICghaXB2Nkhvc3RuYW1lKSB7XG4gICAgICAvLyBJRE5BIFN1cHBvcnQ6IFJldHVybnMgYSBwdW55IGNvZGVkIHJlcHJlc2VudGF0aW9uIG9mIFwiZG9tYWluXCIuXG4gICAgICAvLyBJdCBvbmx5IGNvbnZlcnRzIHRoZSBwYXJ0IG9mIHRoZSBkb21haW4gbmFtZSB0aGF0XG4gICAgICAvLyBoYXMgbm9uIEFTQ0lJIGNoYXJhY3RlcnMuIEkuZS4gaXQgZG9zZW50IG1hdHRlciBpZlxuICAgICAgLy8geW91IGNhbGwgaXQgd2l0aCBhIGRvbWFpbiB0aGF0IGFscmVhZHkgaXMgaW4gQVNDSUkuXG4gICAgICB2YXIgZG9tYWluQXJyYXkgPSB0aGlzLmhvc3RuYW1lLnNwbGl0KCcuJyk7XG4gICAgICB2YXIgbmV3T3V0ID0gW107XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGRvbWFpbkFycmF5Lmxlbmd0aDsgKytpKSB7XG4gICAgICAgIHZhciBzID0gZG9tYWluQXJyYXlbaV07XG4gICAgICAgIG5ld091dC5wdXNoKHMubWF0Y2goL1teQS1aYS16MC05Xy1dLykgP1xuICAgICAgICAgICAgJ3huLS0nICsgcHVueWNvZGUuZW5jb2RlKHMpIDogcyk7XG4gICAgICB9XG4gICAgICB0aGlzLmhvc3RuYW1lID0gbmV3T3V0LmpvaW4oJy4nKTtcbiAgICB9XG5cbiAgICB2YXIgcCA9IHRoaXMucG9ydCA/ICc6JyArIHRoaXMucG9ydCA6ICcnO1xuICAgIHZhciBoID0gdGhpcy5ob3N0bmFtZSB8fCAnJztcbiAgICB0aGlzLmhvc3QgPSBoICsgcDtcbiAgICB0aGlzLmhyZWYgKz0gdGhpcy5ob3N0O1xuXG4gICAgLy8gc3RyaXAgWyBhbmQgXSBmcm9tIHRoZSBob3N0bmFtZVxuICAgIC8vIHRoZSBob3N0IGZpZWxkIHN0aWxsIHJldGFpbnMgdGhlbSwgdGhvdWdoXG4gICAgaWYgKGlwdjZIb3N0bmFtZSkge1xuICAgICAgdGhpcy5ob3N0bmFtZSA9IHRoaXMuaG9zdG5hbWUuc3Vic3RyKDEsIHRoaXMuaG9zdG5hbWUubGVuZ3RoIC0gMik7XG4gICAgICBpZiAocmVzdFswXSAhPT0gJy8nKSB7XG4gICAgICAgIHJlc3QgPSAnLycgKyByZXN0O1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIG5vdyByZXN0IGlzIHNldCB0byB0aGUgcG9zdC1ob3N0IHN0dWZmLlxuICAvLyBjaG9wIG9mZiBhbnkgZGVsaW0gY2hhcnMuXG4gIGlmICghdW5zYWZlUHJvdG9jb2xbbG93ZXJQcm90b10pIHtcblxuICAgIC8vIEZpcnN0LCBtYWtlIDEwMCUgc3VyZSB0aGF0IGFueSBcImF1dG9Fc2NhcGVcIiBjaGFycyBnZXRcbiAgICAvLyBlc2NhcGVkLCBldmVuIGlmIGVuY29kZVVSSUNvbXBvbmVudCBkb2Vzbid0IHRoaW5rIHRoZXlcbiAgICAvLyBuZWVkIHRvIGJlLlxuICAgIGZvciAodmFyIGkgPSAwLCBsID0gYXV0b0VzY2FwZS5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICAgIHZhciBhZSA9IGF1dG9Fc2NhcGVbaV07XG4gICAgICB2YXIgZXNjID0gZW5jb2RlVVJJQ29tcG9uZW50KGFlKTtcbiAgICAgIGlmIChlc2MgPT09IGFlKSB7XG4gICAgICAgIGVzYyA9IGVzY2FwZShhZSk7XG4gICAgICB9XG4gICAgICByZXN0ID0gcmVzdC5zcGxpdChhZSkuam9pbihlc2MpO1xuICAgIH1cbiAgfVxuXG5cbiAgLy8gY2hvcCBvZmYgZnJvbSB0aGUgdGFpbCBmaXJzdC5cbiAgdmFyIGhhc2ggPSByZXN0LmluZGV4T2YoJyMnKTtcbiAgaWYgKGhhc2ggIT09IC0xKSB7XG4gICAgLy8gZ290IGEgZnJhZ21lbnQgc3RyaW5nLlxuICAgIHRoaXMuaGFzaCA9IHJlc3Quc3Vic3RyKGhhc2gpO1xuICAgIHJlc3QgPSByZXN0LnNsaWNlKDAsIGhhc2gpO1xuICB9XG4gIHZhciBxbSA9IHJlc3QuaW5kZXhPZignPycpO1xuICBpZiAocW0gIT09IC0xKSB7XG4gICAgdGhpcy5zZWFyY2ggPSByZXN0LnN1YnN0cihxbSk7XG4gICAgdGhpcy5xdWVyeSA9IHJlc3Quc3Vic3RyKHFtICsgMSk7XG4gICAgaWYgKHBhcnNlUXVlcnlTdHJpbmcpIHtcbiAgICAgIHRoaXMucXVlcnkgPSBxdWVyeXN0cmluZy5wYXJzZSh0aGlzLnF1ZXJ5KTtcbiAgICB9XG4gICAgcmVzdCA9IHJlc3Quc2xpY2UoMCwgcW0pO1xuICB9IGVsc2UgaWYgKHBhcnNlUXVlcnlTdHJpbmcpIHtcbiAgICAvLyBubyBxdWVyeSBzdHJpbmcsIGJ1dCBwYXJzZVF1ZXJ5U3RyaW5nIHN0aWxsIHJlcXVlc3RlZFxuICAgIHRoaXMuc2VhcmNoID0gJyc7XG4gICAgdGhpcy5xdWVyeSA9IHt9O1xuICB9XG4gIGlmIChyZXN0KSB0aGlzLnBhdGhuYW1lID0gcmVzdDtcbiAgaWYgKHNsYXNoZWRQcm90b2NvbFtsb3dlclByb3RvXSAmJlxuICAgICAgdGhpcy5ob3N0bmFtZSAmJiAhdGhpcy5wYXRobmFtZSkge1xuICAgIHRoaXMucGF0aG5hbWUgPSAnLyc7XG4gIH1cblxuICAvL3RvIHN1cHBvcnQgaHR0cC5yZXF1ZXN0XG4gIGlmICh0aGlzLnBhdGhuYW1lIHx8IHRoaXMuc2VhcmNoKSB7XG4gICAgdmFyIHAgPSB0aGlzLnBhdGhuYW1lIHx8ICcnO1xuICAgIHZhciBzID0gdGhpcy5zZWFyY2ggfHwgJyc7XG4gICAgdGhpcy5wYXRoID0gcCArIHM7XG4gIH1cblxuICAvLyBmaW5hbGx5LCByZWNvbnN0cnVjdCB0aGUgaHJlZiBiYXNlZCBvbiB3aGF0IGhhcyBiZWVuIHZhbGlkYXRlZC5cbiAgdGhpcy5ocmVmID0gdGhpcy5mb3JtYXQoKTtcbiAgcmV0dXJuIHRoaXM7XG59O1xuXG4vLyBmb3JtYXQgYSBwYXJzZWQgb2JqZWN0IGludG8gYSB1cmwgc3RyaW5nXG5mdW5jdGlvbiB1cmxGb3JtYXQob2JqKSB7XG4gIC8vIGVuc3VyZSBpdCdzIGFuIG9iamVjdCwgYW5kIG5vdCBhIHN0cmluZyB1cmwuXG4gIC8vIElmIGl0J3MgYW4gb2JqLCB0aGlzIGlzIGEgbm8tb3AuXG4gIC8vIHRoaXMgd2F5LCB5b3UgY2FuIGNhbGwgdXJsX2Zvcm1hdCgpIG9uIHN0cmluZ3NcbiAgLy8gdG8gY2xlYW4gdXAgcG90ZW50aWFsbHkgd29ua3kgdXJscy5cbiAgaWYgKGlzU3RyaW5nKG9iaikpIG9iaiA9IHVybFBhcnNlKG9iaik7XG4gIGlmICghKG9iaiBpbnN0YW5jZW9mIFVybCkpIHJldHVybiBVcmwucHJvdG90eXBlLmZvcm1hdC5jYWxsKG9iaik7XG4gIHJldHVybiBvYmouZm9ybWF0KCk7XG59XG5cblVybC5wcm90b3R5cGUuZm9ybWF0ID0gZnVuY3Rpb24oKSB7XG4gIHZhciBhdXRoID0gdGhpcy5hdXRoIHx8ICcnO1xuICBpZiAoYXV0aCkge1xuICAgIGF1dGggPSBlbmNvZGVVUklDb21wb25lbnQoYXV0aCk7XG4gICAgYXV0aCA9IGF1dGgucmVwbGFjZSgvJTNBL2ksICc6Jyk7XG4gICAgYXV0aCArPSAnQCc7XG4gIH1cblxuICB2YXIgcHJvdG9jb2wgPSB0aGlzLnByb3RvY29sIHx8ICcnLFxuICAgICAgcGF0aG5hbWUgPSB0aGlzLnBhdGhuYW1lIHx8ICcnLFxuICAgICAgaGFzaCA9IHRoaXMuaGFzaCB8fCAnJyxcbiAgICAgIGhvc3QgPSBmYWxzZSxcbiAgICAgIHF1ZXJ5ID0gJyc7XG5cbiAgaWYgKHRoaXMuaG9zdCkge1xuICAgIGhvc3QgPSBhdXRoICsgdGhpcy5ob3N0O1xuICB9IGVsc2UgaWYgKHRoaXMuaG9zdG5hbWUpIHtcbiAgICBob3N0ID0gYXV0aCArICh0aGlzLmhvc3RuYW1lLmluZGV4T2YoJzonKSA9PT0gLTEgP1xuICAgICAgICB0aGlzLmhvc3RuYW1lIDpcbiAgICAgICAgJ1snICsgdGhpcy5ob3N0bmFtZSArICddJyk7XG4gICAgaWYgKHRoaXMucG9ydCkge1xuICAgICAgaG9zdCArPSAnOicgKyB0aGlzLnBvcnQ7XG4gICAgfVxuICB9XG5cbiAgaWYgKHRoaXMucXVlcnkgJiZcbiAgICAgIGlzT2JqZWN0KHRoaXMucXVlcnkpICYmXG4gICAgICBPYmplY3Qua2V5cyh0aGlzLnF1ZXJ5KS5sZW5ndGgpIHtcbiAgICBxdWVyeSA9IHF1ZXJ5c3RyaW5nLnN0cmluZ2lmeSh0aGlzLnF1ZXJ5KTtcbiAgfVxuXG4gIHZhciBzZWFyY2ggPSB0aGlzLnNlYXJjaCB8fCAocXVlcnkgJiYgKCc/JyArIHF1ZXJ5KSkgfHwgJyc7XG5cbiAgaWYgKHByb3RvY29sICYmIHByb3RvY29sLnN1YnN0cigtMSkgIT09ICc6JykgcHJvdG9jb2wgKz0gJzonO1xuXG4gIC8vIG9ubHkgdGhlIHNsYXNoZWRQcm90b2NvbHMgZ2V0IHRoZSAvLy4gIE5vdCBtYWlsdG86LCB4bXBwOiwgZXRjLlxuICAvLyB1bmxlc3MgdGhleSBoYWQgdGhlbSB0byBiZWdpbiB3aXRoLlxuICBpZiAodGhpcy5zbGFzaGVzIHx8XG4gICAgICAoIXByb3RvY29sIHx8IHNsYXNoZWRQcm90b2NvbFtwcm90b2NvbF0pICYmIGhvc3QgIT09IGZhbHNlKSB7XG4gICAgaG9zdCA9ICcvLycgKyAoaG9zdCB8fCAnJyk7XG4gICAgaWYgKHBhdGhuYW1lICYmIHBhdGhuYW1lLmNoYXJBdCgwKSAhPT0gJy8nKSBwYXRobmFtZSA9ICcvJyArIHBhdGhuYW1lO1xuICB9IGVsc2UgaWYgKCFob3N0KSB7XG4gICAgaG9zdCA9ICcnO1xuICB9XG5cbiAgaWYgKGhhc2ggJiYgaGFzaC5jaGFyQXQoMCkgIT09ICcjJykgaGFzaCA9ICcjJyArIGhhc2g7XG4gIGlmIChzZWFyY2ggJiYgc2VhcmNoLmNoYXJBdCgwKSAhPT0gJz8nKSBzZWFyY2ggPSAnPycgKyBzZWFyY2g7XG5cbiAgcGF0aG5hbWUgPSBwYXRobmFtZS5yZXBsYWNlKC9bPyNdL2csIGZ1bmN0aW9uKG1hdGNoKSB7XG4gICAgcmV0dXJuIGVuY29kZVVSSUNvbXBvbmVudChtYXRjaCk7XG4gIH0pO1xuICBzZWFyY2ggPSBzZWFyY2gucmVwbGFjZSgnIycsICclMjMnKTtcblxuICByZXR1cm4gcHJvdG9jb2wgKyBob3N0ICsgcGF0aG5hbWUgKyBzZWFyY2ggKyBoYXNoO1xufTtcblxuZnVuY3Rpb24gdXJsUmVzb2x2ZShzb3VyY2UsIHJlbGF0aXZlKSB7XG4gIHJldHVybiB1cmxQYXJzZShzb3VyY2UsIGZhbHNlLCB0cnVlKS5yZXNvbHZlKHJlbGF0aXZlKTtcbn1cblxuVXJsLnByb3RvdHlwZS5yZXNvbHZlID0gZnVuY3Rpb24ocmVsYXRpdmUpIHtcbiAgcmV0dXJuIHRoaXMucmVzb2x2ZU9iamVjdCh1cmxQYXJzZShyZWxhdGl2ZSwgZmFsc2UsIHRydWUpKS5mb3JtYXQoKTtcbn07XG5cbmZ1bmN0aW9uIHVybFJlc29sdmVPYmplY3Qoc291cmNlLCByZWxhdGl2ZSkge1xuICBpZiAoIXNvdXJjZSkgcmV0dXJuIHJlbGF0aXZlO1xuICByZXR1cm4gdXJsUGFyc2Uoc291cmNlLCBmYWxzZSwgdHJ1ZSkucmVzb2x2ZU9iamVjdChyZWxhdGl2ZSk7XG59XG5cblVybC5wcm90b3R5cGUucmVzb2x2ZU9iamVjdCA9IGZ1bmN0aW9uKHJlbGF0aXZlKSB7XG4gIGlmIChpc1N0cmluZyhyZWxhdGl2ZSkpIHtcbiAgICB2YXIgcmVsID0gbmV3IFVybCgpO1xuICAgIHJlbC5wYXJzZShyZWxhdGl2ZSwgZmFsc2UsIHRydWUpO1xuICAgIHJlbGF0aXZlID0gcmVsO1xuICB9XG5cbiAgdmFyIHJlc3VsdCA9IG5ldyBVcmwoKTtcbiAgT2JqZWN0LmtleXModGhpcykuZm9yRWFjaChmdW5jdGlvbihrKSB7XG4gICAgcmVzdWx0W2tdID0gdGhpc1trXTtcbiAgfSwgdGhpcyk7XG5cbiAgLy8gaGFzaCBpcyBhbHdheXMgb3ZlcnJpZGRlbiwgbm8gbWF0dGVyIHdoYXQuXG4gIC8vIGV2ZW4gaHJlZj1cIlwiIHdpbGwgcmVtb3ZlIGl0LlxuICByZXN1bHQuaGFzaCA9IHJlbGF0aXZlLmhhc2g7XG5cbiAgLy8gaWYgdGhlIHJlbGF0aXZlIHVybCBpcyBlbXB0eSwgdGhlbiB0aGVyZSdzIG5vdGhpbmcgbGVmdCB0byBkbyBoZXJlLlxuICBpZiAocmVsYXRpdmUuaHJlZiA9PT0gJycpIHtcbiAgICByZXN1bHQuaHJlZiA9IHJlc3VsdC5mb3JtYXQoKTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgLy8gaHJlZnMgbGlrZSAvL2Zvby9iYXIgYWx3YXlzIGN1dCB0byB0aGUgcHJvdG9jb2wuXG4gIGlmIChyZWxhdGl2ZS5zbGFzaGVzICYmICFyZWxhdGl2ZS5wcm90b2NvbCkge1xuICAgIC8vIHRha2UgZXZlcnl0aGluZyBleGNlcHQgdGhlIHByb3RvY29sIGZyb20gcmVsYXRpdmVcbiAgICBPYmplY3Qua2V5cyhyZWxhdGl2ZSkuZm9yRWFjaChmdW5jdGlvbihrKSB7XG4gICAgICBpZiAoayAhPT0gJ3Byb3RvY29sJylcbiAgICAgICAgcmVzdWx0W2tdID0gcmVsYXRpdmVba107XG4gICAgfSk7XG5cbiAgICAvL3VybFBhcnNlIGFwcGVuZHMgdHJhaWxpbmcgLyB0byB1cmxzIGxpa2UgaHR0cDovL3d3dy5leGFtcGxlLmNvbVxuICAgIGlmIChzbGFzaGVkUHJvdG9jb2xbcmVzdWx0LnByb3RvY29sXSAmJlxuICAgICAgICByZXN1bHQuaG9zdG5hbWUgJiYgIXJlc3VsdC5wYXRobmFtZSkge1xuICAgICAgcmVzdWx0LnBhdGggPSByZXN1bHQucGF0aG5hbWUgPSAnLyc7XG4gICAgfVxuXG4gICAgcmVzdWx0LmhyZWYgPSByZXN1bHQuZm9ybWF0KCk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIGlmIChyZWxhdGl2ZS5wcm90b2NvbCAmJiByZWxhdGl2ZS5wcm90b2NvbCAhPT0gcmVzdWx0LnByb3RvY29sKSB7XG4gICAgLy8gaWYgaXQncyBhIGtub3duIHVybCBwcm90b2NvbCwgdGhlbiBjaGFuZ2luZ1xuICAgIC8vIHRoZSBwcm90b2NvbCBkb2VzIHdlaXJkIHRoaW5nc1xuICAgIC8vIGZpcnN0LCBpZiBpdCdzIG5vdCBmaWxlOiwgdGhlbiB3ZSBNVVNUIGhhdmUgYSBob3N0LFxuICAgIC8vIGFuZCBpZiB0aGVyZSB3YXMgYSBwYXRoXG4gICAgLy8gdG8gYmVnaW4gd2l0aCwgdGhlbiB3ZSBNVVNUIGhhdmUgYSBwYXRoLlxuICAgIC8vIGlmIGl0IGlzIGZpbGU6LCB0aGVuIHRoZSBob3N0IGlzIGRyb3BwZWQsXG4gICAgLy8gYmVjYXVzZSB0aGF0J3Mga25vd24gdG8gYmUgaG9zdGxlc3MuXG4gICAgLy8gYW55dGhpbmcgZWxzZSBpcyBhc3N1bWVkIHRvIGJlIGFic29sdXRlLlxuICAgIGlmICghc2xhc2hlZFByb3RvY29sW3JlbGF0aXZlLnByb3RvY29sXSkge1xuICAgICAgT2JqZWN0LmtleXMocmVsYXRpdmUpLmZvckVhY2goZnVuY3Rpb24oaykge1xuICAgICAgICByZXN1bHRba10gPSByZWxhdGl2ZVtrXTtcbiAgICAgIH0pO1xuICAgICAgcmVzdWx0LmhyZWYgPSByZXN1bHQuZm9ybWF0KCk7XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIHJlc3VsdC5wcm90b2NvbCA9IHJlbGF0aXZlLnByb3RvY29sO1xuICAgIGlmICghcmVsYXRpdmUuaG9zdCAmJiAhaG9zdGxlc3NQcm90b2NvbFtyZWxhdGl2ZS5wcm90b2NvbF0pIHtcbiAgICAgIHZhciByZWxQYXRoID0gKHJlbGF0aXZlLnBhdGhuYW1lIHx8ICcnKS5zcGxpdCgnLycpO1xuICAgICAgd2hpbGUgKHJlbFBhdGgubGVuZ3RoICYmICEocmVsYXRpdmUuaG9zdCA9IHJlbFBhdGguc2hpZnQoKSkpO1xuICAgICAgaWYgKCFyZWxhdGl2ZS5ob3N0KSByZWxhdGl2ZS5ob3N0ID0gJyc7XG4gICAgICBpZiAoIXJlbGF0aXZlLmhvc3RuYW1lKSByZWxhdGl2ZS5ob3N0bmFtZSA9ICcnO1xuICAgICAgaWYgKHJlbFBhdGhbMF0gIT09ICcnKSByZWxQYXRoLnVuc2hpZnQoJycpO1xuICAgICAgaWYgKHJlbFBhdGgubGVuZ3RoIDwgMikgcmVsUGF0aC51bnNoaWZ0KCcnKTtcbiAgICAgIHJlc3VsdC5wYXRobmFtZSA9IHJlbFBhdGguam9pbignLycpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXN1bHQucGF0aG5hbWUgPSByZWxhdGl2ZS5wYXRobmFtZTtcbiAgICB9XG4gICAgcmVzdWx0LnNlYXJjaCA9IHJlbGF0aXZlLnNlYXJjaDtcbiAgICByZXN1bHQucXVlcnkgPSByZWxhdGl2ZS5xdWVyeTtcbiAgICByZXN1bHQuaG9zdCA9IHJlbGF0aXZlLmhvc3QgfHwgJyc7XG4gICAgcmVzdWx0LmF1dGggPSByZWxhdGl2ZS5hdXRoO1xuICAgIHJlc3VsdC5ob3N0bmFtZSA9IHJlbGF0aXZlLmhvc3RuYW1lIHx8IHJlbGF0aXZlLmhvc3Q7XG4gICAgcmVzdWx0LnBvcnQgPSByZWxhdGl2ZS5wb3J0O1xuICAgIC8vIHRvIHN1cHBvcnQgaHR0cC5yZXF1ZXN0XG4gICAgaWYgKHJlc3VsdC5wYXRobmFtZSB8fCByZXN1bHQuc2VhcmNoKSB7XG4gICAgICB2YXIgcCA9IHJlc3VsdC5wYXRobmFtZSB8fCAnJztcbiAgICAgIHZhciBzID0gcmVzdWx0LnNlYXJjaCB8fCAnJztcbiAgICAgIHJlc3VsdC5wYXRoID0gcCArIHM7XG4gICAgfVxuICAgIHJlc3VsdC5zbGFzaGVzID0gcmVzdWx0LnNsYXNoZXMgfHwgcmVsYXRpdmUuc2xhc2hlcztcbiAgICByZXN1bHQuaHJlZiA9IHJlc3VsdC5mb3JtYXQoKTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgdmFyIGlzU291cmNlQWJzID0gKHJlc3VsdC5wYXRobmFtZSAmJiByZXN1bHQucGF0aG5hbWUuY2hhckF0KDApID09PSAnLycpLFxuICAgICAgaXNSZWxBYnMgPSAoXG4gICAgICAgICAgcmVsYXRpdmUuaG9zdCB8fFxuICAgICAgICAgIHJlbGF0aXZlLnBhdGhuYW1lICYmIHJlbGF0aXZlLnBhdGhuYW1lLmNoYXJBdCgwKSA9PT0gJy8nXG4gICAgICApLFxuICAgICAgbXVzdEVuZEFicyA9IChpc1JlbEFicyB8fCBpc1NvdXJjZUFicyB8fFxuICAgICAgICAgICAgICAgICAgICAocmVzdWx0Lmhvc3QgJiYgcmVsYXRpdmUucGF0aG5hbWUpKSxcbiAgICAgIHJlbW92ZUFsbERvdHMgPSBtdXN0RW5kQWJzLFxuICAgICAgc3JjUGF0aCA9IHJlc3VsdC5wYXRobmFtZSAmJiByZXN1bHQucGF0aG5hbWUuc3BsaXQoJy8nKSB8fCBbXSxcbiAgICAgIHJlbFBhdGggPSByZWxhdGl2ZS5wYXRobmFtZSAmJiByZWxhdGl2ZS5wYXRobmFtZS5zcGxpdCgnLycpIHx8IFtdLFxuICAgICAgcHN5Y2hvdGljID0gcmVzdWx0LnByb3RvY29sICYmICFzbGFzaGVkUHJvdG9jb2xbcmVzdWx0LnByb3RvY29sXTtcblxuICAvLyBpZiB0aGUgdXJsIGlzIGEgbm9uLXNsYXNoZWQgdXJsLCB0aGVuIHJlbGF0aXZlXG4gIC8vIGxpbmtzIGxpa2UgLi4vLi4gc2hvdWxkIGJlIGFibGVcbiAgLy8gdG8gY3Jhd2wgdXAgdG8gdGhlIGhvc3RuYW1lLCBhcyB3ZWxsLiAgVGhpcyBpcyBzdHJhbmdlLlxuICAvLyByZXN1bHQucHJvdG9jb2wgaGFzIGFscmVhZHkgYmVlbiBzZXQgYnkgbm93LlxuICAvLyBMYXRlciBvbiwgcHV0IHRoZSBmaXJzdCBwYXRoIHBhcnQgaW50byB0aGUgaG9zdCBmaWVsZC5cbiAgaWYgKHBzeWNob3RpYykge1xuICAgIHJlc3VsdC5ob3N0bmFtZSA9ICcnO1xuICAgIHJlc3VsdC5wb3J0ID0gbnVsbDtcbiAgICBpZiAocmVzdWx0Lmhvc3QpIHtcbiAgICAgIGlmIChzcmNQYXRoWzBdID09PSAnJykgc3JjUGF0aFswXSA9IHJlc3VsdC5ob3N0O1xuICAgICAgZWxzZSBzcmNQYXRoLnVuc2hpZnQocmVzdWx0Lmhvc3QpO1xuICAgIH1cbiAgICByZXN1bHQuaG9zdCA9ICcnO1xuICAgIGlmIChyZWxhdGl2ZS5wcm90b2NvbCkge1xuICAgICAgcmVsYXRpdmUuaG9zdG5hbWUgPSBudWxsO1xuICAgICAgcmVsYXRpdmUucG9ydCA9IG51bGw7XG4gICAgICBpZiAocmVsYXRpdmUuaG9zdCkge1xuICAgICAgICBpZiAocmVsUGF0aFswXSA9PT0gJycpIHJlbFBhdGhbMF0gPSByZWxhdGl2ZS5ob3N0O1xuICAgICAgICBlbHNlIHJlbFBhdGgudW5zaGlmdChyZWxhdGl2ZS5ob3N0KTtcbiAgICAgIH1cbiAgICAgIHJlbGF0aXZlLmhvc3QgPSBudWxsO1xuICAgIH1cbiAgICBtdXN0RW5kQWJzID0gbXVzdEVuZEFicyAmJiAocmVsUGF0aFswXSA9PT0gJycgfHwgc3JjUGF0aFswXSA9PT0gJycpO1xuICB9XG5cbiAgaWYgKGlzUmVsQWJzKSB7XG4gICAgLy8gaXQncyBhYnNvbHV0ZS5cbiAgICByZXN1bHQuaG9zdCA9IChyZWxhdGl2ZS5ob3N0IHx8IHJlbGF0aXZlLmhvc3QgPT09ICcnKSA/XG4gICAgICAgICAgICAgICAgICByZWxhdGl2ZS5ob3N0IDogcmVzdWx0Lmhvc3Q7XG4gICAgcmVzdWx0Lmhvc3RuYW1lID0gKHJlbGF0aXZlLmhvc3RuYW1lIHx8IHJlbGF0aXZlLmhvc3RuYW1lID09PSAnJykgP1xuICAgICAgICAgICAgICAgICAgICAgIHJlbGF0aXZlLmhvc3RuYW1lIDogcmVzdWx0Lmhvc3RuYW1lO1xuICAgIHJlc3VsdC5zZWFyY2ggPSByZWxhdGl2ZS5zZWFyY2g7XG4gICAgcmVzdWx0LnF1ZXJ5ID0gcmVsYXRpdmUucXVlcnk7XG4gICAgc3JjUGF0aCA9IHJlbFBhdGg7XG4gICAgLy8gZmFsbCB0aHJvdWdoIHRvIHRoZSBkb3QtaGFuZGxpbmcgYmVsb3cuXG4gIH0gZWxzZSBpZiAocmVsUGF0aC5sZW5ndGgpIHtcbiAgICAvLyBpdCdzIHJlbGF0aXZlXG4gICAgLy8gdGhyb3cgYXdheSB0aGUgZXhpc3RpbmcgZmlsZSwgYW5kIHRha2UgdGhlIG5ldyBwYXRoIGluc3RlYWQuXG4gICAgaWYgKCFzcmNQYXRoKSBzcmNQYXRoID0gW107XG4gICAgc3JjUGF0aC5wb3AoKTtcbiAgICBzcmNQYXRoID0gc3JjUGF0aC5jb25jYXQocmVsUGF0aCk7XG4gICAgcmVzdWx0LnNlYXJjaCA9IHJlbGF0aXZlLnNlYXJjaDtcbiAgICByZXN1bHQucXVlcnkgPSByZWxhdGl2ZS5xdWVyeTtcbiAgfSBlbHNlIGlmICghaXNOdWxsT3JVbmRlZmluZWQocmVsYXRpdmUuc2VhcmNoKSkge1xuICAgIC8vIGp1c3QgcHVsbCBvdXQgdGhlIHNlYXJjaC5cbiAgICAvLyBsaWtlIGhyZWY9Jz9mb28nLlxuICAgIC8vIFB1dCB0aGlzIGFmdGVyIHRoZSBvdGhlciB0d28gY2FzZXMgYmVjYXVzZSBpdCBzaW1wbGlmaWVzIHRoZSBib29sZWFuc1xuICAgIGlmIChwc3ljaG90aWMpIHtcbiAgICAgIHJlc3VsdC5ob3N0bmFtZSA9IHJlc3VsdC5ob3N0ID0gc3JjUGF0aC5zaGlmdCgpO1xuICAgICAgLy9vY2NhdGlvbmFseSB0aGUgYXV0aCBjYW4gZ2V0IHN0dWNrIG9ubHkgaW4gaG9zdFxuICAgICAgLy90aGlzIGVzcGVjaWFseSBoYXBwZW5zIGluIGNhc2VzIGxpa2VcbiAgICAgIC8vdXJsLnJlc29sdmVPYmplY3QoJ21haWx0bzpsb2NhbDFAZG9tYWluMScsICdsb2NhbDJAZG9tYWluMicpXG4gICAgICB2YXIgYXV0aEluSG9zdCA9IHJlc3VsdC5ob3N0ICYmIHJlc3VsdC5ob3N0LmluZGV4T2YoJ0AnKSA+IDAgP1xuICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQuaG9zdC5zcGxpdCgnQCcpIDogZmFsc2U7XG4gICAgICBpZiAoYXV0aEluSG9zdCkge1xuICAgICAgICByZXN1bHQuYXV0aCA9IGF1dGhJbkhvc3Quc2hpZnQoKTtcbiAgICAgICAgcmVzdWx0Lmhvc3QgPSByZXN1bHQuaG9zdG5hbWUgPSBhdXRoSW5Ib3N0LnNoaWZ0KCk7XG4gICAgICB9XG4gICAgfVxuICAgIHJlc3VsdC5zZWFyY2ggPSByZWxhdGl2ZS5zZWFyY2g7XG4gICAgcmVzdWx0LnF1ZXJ5ID0gcmVsYXRpdmUucXVlcnk7XG4gICAgLy90byBzdXBwb3J0IGh0dHAucmVxdWVzdFxuICAgIGlmICghaXNOdWxsKHJlc3VsdC5wYXRobmFtZSkgfHwgIWlzTnVsbChyZXN1bHQuc2VhcmNoKSkge1xuICAgICAgcmVzdWx0LnBhdGggPSAocmVzdWx0LnBhdGhuYW1lID8gcmVzdWx0LnBhdGhuYW1lIDogJycpICtcbiAgICAgICAgICAgICAgICAgICAgKHJlc3VsdC5zZWFyY2ggPyByZXN1bHQuc2VhcmNoIDogJycpO1xuICAgIH1cbiAgICByZXN1bHQuaHJlZiA9IHJlc3VsdC5mb3JtYXQoKTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgaWYgKCFzcmNQYXRoLmxlbmd0aCkge1xuICAgIC8vIG5vIHBhdGggYXQgYWxsLiAgZWFzeS5cbiAgICAvLyB3ZSd2ZSBhbHJlYWR5IGhhbmRsZWQgdGhlIG90aGVyIHN0dWZmIGFib3ZlLlxuICAgIHJlc3VsdC5wYXRobmFtZSA9IG51bGw7XG4gICAgLy90byBzdXBwb3J0IGh0dHAucmVxdWVzdFxuICAgIGlmIChyZXN1bHQuc2VhcmNoKSB7XG4gICAgICByZXN1bHQucGF0aCA9ICcvJyArIHJlc3VsdC5zZWFyY2g7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJlc3VsdC5wYXRoID0gbnVsbDtcbiAgICB9XG4gICAgcmVzdWx0LmhyZWYgPSByZXN1bHQuZm9ybWF0KCk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIC8vIGlmIGEgdXJsIEVORHMgaW4gLiBvciAuLiwgdGhlbiBpdCBtdXN0IGdldCBhIHRyYWlsaW5nIHNsYXNoLlxuICAvLyBob3dldmVyLCBpZiBpdCBlbmRzIGluIGFueXRoaW5nIGVsc2Ugbm9uLXNsYXNoeSxcbiAgLy8gdGhlbiBpdCBtdXN0IE5PVCBnZXQgYSB0cmFpbGluZyBzbGFzaC5cbiAgdmFyIGxhc3QgPSBzcmNQYXRoLnNsaWNlKC0xKVswXTtcbiAgdmFyIGhhc1RyYWlsaW5nU2xhc2ggPSAoXG4gICAgICAocmVzdWx0Lmhvc3QgfHwgcmVsYXRpdmUuaG9zdCkgJiYgKGxhc3QgPT09ICcuJyB8fCBsYXN0ID09PSAnLi4nKSB8fFxuICAgICAgbGFzdCA9PT0gJycpO1xuXG4gIC8vIHN0cmlwIHNpbmdsZSBkb3RzLCByZXNvbHZlIGRvdWJsZSBkb3RzIHRvIHBhcmVudCBkaXJcbiAgLy8gaWYgdGhlIHBhdGggdHJpZXMgdG8gZ28gYWJvdmUgdGhlIHJvb3QsIGB1cGAgZW5kcyB1cCA+IDBcbiAgdmFyIHVwID0gMDtcbiAgZm9yICh2YXIgaSA9IHNyY1BhdGgubGVuZ3RoOyBpID49IDA7IGktLSkge1xuICAgIGxhc3QgPSBzcmNQYXRoW2ldO1xuICAgIGlmIChsYXN0ID09ICcuJykge1xuICAgICAgc3JjUGF0aC5zcGxpY2UoaSwgMSk7XG4gICAgfSBlbHNlIGlmIChsYXN0ID09PSAnLi4nKSB7XG4gICAgICBzcmNQYXRoLnNwbGljZShpLCAxKTtcbiAgICAgIHVwKys7XG4gICAgfSBlbHNlIGlmICh1cCkge1xuICAgICAgc3JjUGF0aC5zcGxpY2UoaSwgMSk7XG4gICAgICB1cC0tO1xuICAgIH1cbiAgfVxuXG4gIC8vIGlmIHRoZSBwYXRoIGlzIGFsbG93ZWQgdG8gZ28gYWJvdmUgdGhlIHJvb3QsIHJlc3RvcmUgbGVhZGluZyAuLnNcbiAgaWYgKCFtdXN0RW5kQWJzICYmICFyZW1vdmVBbGxEb3RzKSB7XG4gICAgZm9yICg7IHVwLS07IHVwKSB7XG4gICAgICBzcmNQYXRoLnVuc2hpZnQoJy4uJyk7XG4gICAgfVxuICB9XG5cbiAgaWYgKG11c3RFbmRBYnMgJiYgc3JjUGF0aFswXSAhPT0gJycgJiZcbiAgICAgICghc3JjUGF0aFswXSB8fCBzcmNQYXRoWzBdLmNoYXJBdCgwKSAhPT0gJy8nKSkge1xuICAgIHNyY1BhdGgudW5zaGlmdCgnJyk7XG4gIH1cblxuICBpZiAoaGFzVHJhaWxpbmdTbGFzaCAmJiAoc3JjUGF0aC5qb2luKCcvJykuc3Vic3RyKC0xKSAhPT0gJy8nKSkge1xuICAgIHNyY1BhdGgucHVzaCgnJyk7XG4gIH1cblxuICB2YXIgaXNBYnNvbHV0ZSA9IHNyY1BhdGhbMF0gPT09ICcnIHx8XG4gICAgICAoc3JjUGF0aFswXSAmJiBzcmNQYXRoWzBdLmNoYXJBdCgwKSA9PT0gJy8nKTtcblxuICAvLyBwdXQgdGhlIGhvc3QgYmFja1xuICBpZiAocHN5Y2hvdGljKSB7XG4gICAgcmVzdWx0Lmhvc3RuYW1lID0gcmVzdWx0Lmhvc3QgPSBpc0Fic29sdXRlID8gJycgOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjUGF0aC5sZW5ndGggPyBzcmNQYXRoLnNoaWZ0KCkgOiAnJztcbiAgICAvL29jY2F0aW9uYWx5IHRoZSBhdXRoIGNhbiBnZXQgc3R1Y2sgb25seSBpbiBob3N0XG4gICAgLy90aGlzIGVzcGVjaWFseSBoYXBwZW5zIGluIGNhc2VzIGxpa2VcbiAgICAvL3VybC5yZXNvbHZlT2JqZWN0KCdtYWlsdG86bG9jYWwxQGRvbWFpbjEnLCAnbG9jYWwyQGRvbWFpbjInKVxuICAgIHZhciBhdXRoSW5Ib3N0ID0gcmVzdWx0Lmhvc3QgJiYgcmVzdWx0Lmhvc3QuaW5kZXhPZignQCcpID4gMCA/XG4gICAgICAgICAgICAgICAgICAgICByZXN1bHQuaG9zdC5zcGxpdCgnQCcpIDogZmFsc2U7XG4gICAgaWYgKGF1dGhJbkhvc3QpIHtcbiAgICAgIHJlc3VsdC5hdXRoID0gYXV0aEluSG9zdC5zaGlmdCgpO1xuICAgICAgcmVzdWx0Lmhvc3QgPSByZXN1bHQuaG9zdG5hbWUgPSBhdXRoSW5Ib3N0LnNoaWZ0KCk7XG4gICAgfVxuICB9XG5cbiAgbXVzdEVuZEFicyA9IG11c3RFbmRBYnMgfHwgKHJlc3VsdC5ob3N0ICYmIHNyY1BhdGgubGVuZ3RoKTtcblxuICBpZiAobXVzdEVuZEFicyAmJiAhaXNBYnNvbHV0ZSkge1xuICAgIHNyY1BhdGgudW5zaGlmdCgnJyk7XG4gIH1cblxuICBpZiAoIXNyY1BhdGgubGVuZ3RoKSB7XG4gICAgcmVzdWx0LnBhdGhuYW1lID0gbnVsbDtcbiAgICByZXN1bHQucGF0aCA9IG51bGw7XG4gIH0gZWxzZSB7XG4gICAgcmVzdWx0LnBhdGhuYW1lID0gc3JjUGF0aC5qb2luKCcvJyk7XG4gIH1cblxuICAvL3RvIHN1cHBvcnQgcmVxdWVzdC5odHRwXG4gIGlmICghaXNOdWxsKHJlc3VsdC5wYXRobmFtZSkgfHwgIWlzTnVsbChyZXN1bHQuc2VhcmNoKSkge1xuICAgIHJlc3VsdC5wYXRoID0gKHJlc3VsdC5wYXRobmFtZSA/IHJlc3VsdC5wYXRobmFtZSA6ICcnKSArXG4gICAgICAgICAgICAgICAgICAocmVzdWx0LnNlYXJjaCA/IHJlc3VsdC5zZWFyY2ggOiAnJyk7XG4gIH1cbiAgcmVzdWx0LmF1dGggPSByZWxhdGl2ZS5hdXRoIHx8IHJlc3VsdC5hdXRoO1xuICByZXN1bHQuc2xhc2hlcyA9IHJlc3VsdC5zbGFzaGVzIHx8IHJlbGF0aXZlLnNsYXNoZXM7XG4gIHJlc3VsdC5ocmVmID0gcmVzdWx0LmZvcm1hdCgpO1xuICByZXR1cm4gcmVzdWx0O1xufTtcblxuVXJsLnByb3RvdHlwZS5wYXJzZUhvc3QgPSBmdW5jdGlvbigpIHtcbiAgdmFyIGhvc3QgPSB0aGlzLmhvc3Q7XG4gIHZhciBwb3J0ID0gcG9ydFBhdHRlcm4uZXhlYyhob3N0KTtcbiAgaWYgKHBvcnQpIHtcbiAgICBwb3J0ID0gcG9ydFswXTtcbiAgICBpZiAocG9ydCAhPT0gJzonKSB7XG4gICAgICB0aGlzLnBvcnQgPSBwb3J0LnN1YnN0cigxKTtcbiAgICB9XG4gICAgaG9zdCA9IGhvc3Quc3Vic3RyKDAsIGhvc3QubGVuZ3RoIC0gcG9ydC5sZW5ndGgpO1xuICB9XG4gIGlmIChob3N0KSB0aGlzLmhvc3RuYW1lID0gaG9zdDtcbn07XG5cbmZ1bmN0aW9uIGlzU3RyaW5nKGFyZykge1xuICByZXR1cm4gdHlwZW9mIGFyZyA9PT0gXCJzdHJpbmdcIjtcbn1cblxuZnVuY3Rpb24gaXNPYmplY3QoYXJnKSB7XG4gIHJldHVybiB0eXBlb2YgYXJnID09PSAnb2JqZWN0JyAmJiBhcmcgIT09IG51bGw7XG59XG5cbmZ1bmN0aW9uIGlzTnVsbChhcmcpIHtcbiAgcmV0dXJuIGFyZyA9PT0gbnVsbDtcbn1cbmZ1bmN0aW9uIGlzTnVsbE9yVW5kZWZpbmVkKGFyZykge1xuICByZXR1cm4gIGFyZyA9PSBudWxsO1xufVxuIiwiJ3VzZSBzdHJpY3QnO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGVhcmN1dDtcblxuZnVuY3Rpb24gZWFyY3V0KGRhdGEsIGhvbGVJbmRpY2VzLCBkaW0pIHtcblxuICAgIGRpbSA9IGRpbSB8fCAyO1xuXG4gICAgdmFyIGhhc0hvbGVzID0gaG9sZUluZGljZXMgJiYgaG9sZUluZGljZXMubGVuZ3RoLFxuICAgICAgICBvdXRlckxlbiA9IGhhc0hvbGVzID8gaG9sZUluZGljZXNbMF0gKiBkaW0gOiBkYXRhLmxlbmd0aCxcbiAgICAgICAgb3V0ZXJOb2RlID0gbGlua2VkTGlzdChkYXRhLCAwLCBvdXRlckxlbiwgZGltLCB0cnVlKSxcbiAgICAgICAgdHJpYW5nbGVzID0gW107XG5cbiAgICBpZiAoIW91dGVyTm9kZSkgcmV0dXJuIHRyaWFuZ2xlcztcblxuICAgIHZhciBtaW5YLCBtaW5ZLCBtYXhYLCBtYXhZLCB4LCB5LCBzaXplO1xuXG4gICAgaWYgKGhhc0hvbGVzKSBvdXRlck5vZGUgPSBlbGltaW5hdGVIb2xlcyhkYXRhLCBob2xlSW5kaWNlcywgb3V0ZXJOb2RlLCBkaW0pO1xuXG4gICAgLy8gaWYgdGhlIHNoYXBlIGlzIG5vdCB0b28gc2ltcGxlLCB3ZSdsbCB1c2Ugei1vcmRlciBjdXJ2ZSBoYXNoIGxhdGVyOyBjYWxjdWxhdGUgcG9seWdvbiBiYm94XG4gICAgaWYgKGRhdGEubGVuZ3RoID4gODAgKiBkaW0pIHtcbiAgICAgICAgbWluWCA9IG1heFggPSBkYXRhWzBdO1xuICAgICAgICBtaW5ZID0gbWF4WSA9IGRhdGFbMV07XG5cbiAgICAgICAgZm9yICh2YXIgaSA9IGRpbTsgaSA8IG91dGVyTGVuOyBpICs9IGRpbSkge1xuICAgICAgICAgICAgeCA9IGRhdGFbaV07XG4gICAgICAgICAgICB5ID0gZGF0YVtpICsgMV07XG4gICAgICAgICAgICBpZiAoeCA8IG1pblgpIG1pblggPSB4O1xuICAgICAgICAgICAgaWYgKHkgPCBtaW5ZKSBtaW5ZID0geTtcbiAgICAgICAgICAgIGlmICh4ID4gbWF4WCkgbWF4WCA9IHg7XG4gICAgICAgICAgICBpZiAoeSA+IG1heFkpIG1heFkgPSB5O1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gbWluWCwgbWluWSBhbmQgc2l6ZSBhcmUgbGF0ZXIgdXNlZCB0byB0cmFuc2Zvcm0gY29vcmRzIGludG8gaW50ZWdlcnMgZm9yIHotb3JkZXIgY2FsY3VsYXRpb25cbiAgICAgICAgc2l6ZSA9IE1hdGgubWF4KG1heFggLSBtaW5YLCBtYXhZIC0gbWluWSk7XG4gICAgfVxuXG4gICAgZWFyY3V0TGlua2VkKG91dGVyTm9kZSwgdHJpYW5nbGVzLCBkaW0sIG1pblgsIG1pblksIHNpemUpO1xuXG4gICAgcmV0dXJuIHRyaWFuZ2xlcztcbn1cblxuLy8gY3JlYXRlIGEgY2lyY3VsYXIgZG91Ymx5IGxpbmtlZCBsaXN0IGZyb20gcG9seWdvbiBwb2ludHMgaW4gdGhlIHNwZWNpZmllZCB3aW5kaW5nIG9yZGVyXG5mdW5jdGlvbiBsaW5rZWRMaXN0KGRhdGEsIHN0YXJ0LCBlbmQsIGRpbSwgY2xvY2t3aXNlKSB7XG4gICAgdmFyIHN1bSA9IDAsXG4gICAgICAgIGksIGosIGxhc3Q7XG5cbiAgICAvLyBjYWxjdWxhdGUgb3JpZ2luYWwgd2luZGluZyBvcmRlciBvZiBhIHBvbHlnb24gcmluZ1xuICAgIGZvciAoaSA9IHN0YXJ0LCBqID0gZW5kIC0gZGltOyBpIDwgZW5kOyBpICs9IGRpbSkge1xuICAgICAgICBzdW0gKz0gKGRhdGFbal0gLSBkYXRhW2ldKSAqIChkYXRhW2kgKyAxXSArIGRhdGFbaiArIDFdKTtcbiAgICAgICAgaiA9IGk7XG4gICAgfVxuXG4gICAgLy8gbGluayBwb2ludHMgaW50byBjaXJjdWxhciBkb3VibHktbGlua2VkIGxpc3QgaW4gdGhlIHNwZWNpZmllZCB3aW5kaW5nIG9yZGVyXG4gICAgaWYgKGNsb2Nrd2lzZSA9PT0gKHN1bSA+IDApKSB7XG4gICAgICAgIGZvciAoaSA9IHN0YXJ0OyBpIDwgZW5kOyBpICs9IGRpbSkgbGFzdCA9IGluc2VydE5vZGUoaSwgZGF0YVtpXSwgZGF0YVtpICsgMV0sIGxhc3QpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIGZvciAoaSA9IGVuZCAtIGRpbTsgaSA+PSBzdGFydDsgaSAtPSBkaW0pIGxhc3QgPSBpbnNlcnROb2RlKGksIGRhdGFbaV0sIGRhdGFbaSArIDFdLCBsYXN0KTtcbiAgICB9XG5cbiAgICByZXR1cm4gbGFzdDtcbn1cblxuLy8gZWxpbWluYXRlIGNvbGluZWFyIG9yIGR1cGxpY2F0ZSBwb2ludHNcbmZ1bmN0aW9uIGZpbHRlclBvaW50cyhzdGFydCwgZW5kKSB7XG4gICAgaWYgKCFzdGFydCkgcmV0dXJuIHN0YXJ0O1xuICAgIGlmICghZW5kKSBlbmQgPSBzdGFydDtcblxuICAgIHZhciBwID0gc3RhcnQsXG4gICAgICAgIGFnYWluO1xuICAgIGRvIHtcbiAgICAgICAgYWdhaW4gPSBmYWxzZTtcblxuICAgICAgICBpZiAoIXAuc3RlaW5lciAmJiAoZXF1YWxzKHAsIHAubmV4dCkgfHwgYXJlYShwLnByZXYsIHAsIHAubmV4dCkgPT09IDApKSB7XG4gICAgICAgICAgICByZW1vdmVOb2RlKHApO1xuICAgICAgICAgICAgcCA9IGVuZCA9IHAucHJldjtcbiAgICAgICAgICAgIGlmIChwID09PSBwLm5leHQpIHJldHVybiBudWxsO1xuICAgICAgICAgICAgYWdhaW4gPSB0cnVlO1xuXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBwID0gcC5uZXh0O1xuICAgICAgICB9XG4gICAgfSB3aGlsZSAoYWdhaW4gfHwgcCAhPT0gZW5kKTtcblxuICAgIHJldHVybiBlbmQ7XG59XG5cbi8vIG1haW4gZWFyIHNsaWNpbmcgbG9vcCB3aGljaCB0cmlhbmd1bGF0ZXMgYSBwb2x5Z29uIChnaXZlbiBhcyBhIGxpbmtlZCBsaXN0KVxuZnVuY3Rpb24gZWFyY3V0TGlua2VkKGVhciwgdHJpYW5nbGVzLCBkaW0sIG1pblgsIG1pblksIHNpemUsIHBhc3MpIHtcbiAgICBpZiAoIWVhcikgcmV0dXJuO1xuXG4gICAgLy8gaW50ZXJsaW5rIHBvbHlnb24gbm9kZXMgaW4gei1vcmRlclxuICAgIGlmICghcGFzcyAmJiBzaXplKSBpbmRleEN1cnZlKGVhciwgbWluWCwgbWluWSwgc2l6ZSk7XG5cbiAgICB2YXIgc3RvcCA9IGVhcixcbiAgICAgICAgcHJldiwgbmV4dDtcblxuICAgIC8vIGl0ZXJhdGUgdGhyb3VnaCBlYXJzLCBzbGljaW5nIHRoZW0gb25lIGJ5IG9uZVxuICAgIHdoaWxlIChlYXIucHJldiAhPT0gZWFyLm5leHQpIHtcbiAgICAgICAgcHJldiA9IGVhci5wcmV2O1xuICAgICAgICBuZXh0ID0gZWFyLm5leHQ7XG5cbiAgICAgICAgaWYgKHNpemUgPyBpc0Vhckhhc2hlZChlYXIsIG1pblgsIG1pblksIHNpemUpIDogaXNFYXIoZWFyKSkge1xuICAgICAgICAgICAgLy8gY3V0IG9mZiB0aGUgdHJpYW5nbGVcbiAgICAgICAgICAgIHRyaWFuZ2xlcy5wdXNoKHByZXYuaSAvIGRpbSk7XG4gICAgICAgICAgICB0cmlhbmdsZXMucHVzaChlYXIuaSAvIGRpbSk7XG4gICAgICAgICAgICB0cmlhbmdsZXMucHVzaChuZXh0LmkgLyBkaW0pO1xuXG4gICAgICAgICAgICByZW1vdmVOb2RlKGVhcik7XG5cbiAgICAgICAgICAgIC8vIHNraXBwaW5nIHRoZSBuZXh0IHZlcnRpY2UgbGVhZHMgdG8gbGVzcyBzbGl2ZXIgdHJpYW5nbGVzXG4gICAgICAgICAgICBlYXIgPSBuZXh0Lm5leHQ7XG4gICAgICAgICAgICBzdG9wID0gbmV4dC5uZXh0O1xuXG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGVhciA9IG5leHQ7XG5cbiAgICAgICAgLy8gaWYgd2UgbG9vcGVkIHRocm91Z2ggdGhlIHdob2xlIHJlbWFpbmluZyBwb2x5Z29uIGFuZCBjYW4ndCBmaW5kIGFueSBtb3JlIGVhcnNcbiAgICAgICAgaWYgKGVhciA9PT0gc3RvcCkge1xuICAgICAgICAgICAgLy8gdHJ5IGZpbHRlcmluZyBwb2ludHMgYW5kIHNsaWNpbmcgYWdhaW5cbiAgICAgICAgICAgIGlmICghcGFzcykge1xuICAgICAgICAgICAgICAgIGVhcmN1dExpbmtlZChmaWx0ZXJQb2ludHMoZWFyKSwgdHJpYW5nbGVzLCBkaW0sIG1pblgsIG1pblksIHNpemUsIDEpO1xuXG4gICAgICAgICAgICAvLyBpZiB0aGlzIGRpZG4ndCB3b3JrLCB0cnkgY3VyaW5nIGFsbCBzbWFsbCBzZWxmLWludGVyc2VjdGlvbnMgbG9jYWxseVxuICAgICAgICAgICAgfSBlbHNlIGlmIChwYXNzID09PSAxKSB7XG4gICAgICAgICAgICAgICAgZWFyID0gY3VyZUxvY2FsSW50ZXJzZWN0aW9ucyhlYXIsIHRyaWFuZ2xlcywgZGltKTtcbiAgICAgICAgICAgICAgICBlYXJjdXRMaW5rZWQoZWFyLCB0cmlhbmdsZXMsIGRpbSwgbWluWCwgbWluWSwgc2l6ZSwgMik7XG5cbiAgICAgICAgICAgIC8vIGFzIGEgbGFzdCByZXNvcnQsIHRyeSBzcGxpdHRpbmcgdGhlIHJlbWFpbmluZyBwb2x5Z29uIGludG8gdHdvXG4gICAgICAgICAgICB9IGVsc2UgaWYgKHBhc3MgPT09IDIpIHtcbiAgICAgICAgICAgICAgICBzcGxpdEVhcmN1dChlYXIsIHRyaWFuZ2xlcywgZGltLCBtaW5YLCBtaW5ZLCBzaXplKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbi8vIGNoZWNrIHdoZXRoZXIgYSBwb2x5Z29uIG5vZGUgZm9ybXMgYSB2YWxpZCBlYXIgd2l0aCBhZGphY2VudCBub2Rlc1xuZnVuY3Rpb24gaXNFYXIoZWFyKSB7XG4gICAgdmFyIGEgPSBlYXIucHJldixcbiAgICAgICAgYiA9IGVhcixcbiAgICAgICAgYyA9IGVhci5uZXh0O1xuXG4gICAgaWYgKGFyZWEoYSwgYiwgYykgPj0gMCkgcmV0dXJuIGZhbHNlOyAvLyByZWZsZXgsIGNhbid0IGJlIGFuIGVhclxuXG4gICAgLy8gbm93IG1ha2Ugc3VyZSB3ZSBkb24ndCBoYXZlIG90aGVyIHBvaW50cyBpbnNpZGUgdGhlIHBvdGVudGlhbCBlYXJcbiAgICB2YXIgcCA9IGVhci5uZXh0Lm5leHQ7XG5cbiAgICB3aGlsZSAocCAhPT0gZWFyLnByZXYpIHtcbiAgICAgICAgaWYgKHBvaW50SW5UcmlhbmdsZShhLngsIGEueSwgYi54LCBiLnksIGMueCwgYy55LCBwLngsIHAueSkgJiZcbiAgICAgICAgICAgIGFyZWEocC5wcmV2LCBwLCBwLm5leHQpID49IDApIHJldHVybiBmYWxzZTtcbiAgICAgICAgcCA9IHAubmV4dDtcbiAgICB9XG5cbiAgICByZXR1cm4gdHJ1ZTtcbn1cblxuZnVuY3Rpb24gaXNFYXJIYXNoZWQoZWFyLCBtaW5YLCBtaW5ZLCBzaXplKSB7XG4gICAgdmFyIGEgPSBlYXIucHJldixcbiAgICAgICAgYiA9IGVhcixcbiAgICAgICAgYyA9IGVhci5uZXh0O1xuXG4gICAgaWYgKGFyZWEoYSwgYiwgYykgPj0gMCkgcmV0dXJuIGZhbHNlOyAvLyByZWZsZXgsIGNhbid0IGJlIGFuIGVhclxuXG4gICAgLy8gdHJpYW5nbGUgYmJveDsgbWluICYgbWF4IGFyZSBjYWxjdWxhdGVkIGxpa2UgdGhpcyBmb3Igc3BlZWRcbiAgICB2YXIgbWluVFggPSBhLnggPCBiLnggPyAoYS54IDwgYy54ID8gYS54IDogYy54KSA6IChiLnggPCBjLnggPyBiLnggOiBjLngpLFxuICAgICAgICBtaW5UWSA9IGEueSA8IGIueSA/IChhLnkgPCBjLnkgPyBhLnkgOiBjLnkpIDogKGIueSA8IGMueSA/IGIueSA6IGMueSksXG4gICAgICAgIG1heFRYID0gYS54ID4gYi54ID8gKGEueCA+IGMueCA/IGEueCA6IGMueCkgOiAoYi54ID4gYy54ID8gYi54IDogYy54KSxcbiAgICAgICAgbWF4VFkgPSBhLnkgPiBiLnkgPyAoYS55ID4gYy55ID8gYS55IDogYy55KSA6IChiLnkgPiBjLnkgPyBiLnkgOiBjLnkpO1xuXG4gICAgLy8gei1vcmRlciByYW5nZSBmb3IgdGhlIGN1cnJlbnQgdHJpYW5nbGUgYmJveDtcbiAgICB2YXIgbWluWiA9IHpPcmRlcihtaW5UWCwgbWluVFksIG1pblgsIG1pblksIHNpemUpLFxuICAgICAgICBtYXhaID0gek9yZGVyKG1heFRYLCBtYXhUWSwgbWluWCwgbWluWSwgc2l6ZSk7XG5cbiAgICAvLyBmaXJzdCBsb29rIGZvciBwb2ludHMgaW5zaWRlIHRoZSB0cmlhbmdsZSBpbiBpbmNyZWFzaW5nIHotb3JkZXJcbiAgICB2YXIgcCA9IGVhci5uZXh0WjtcblxuICAgIHdoaWxlIChwICYmIHAueiA8PSBtYXhaKSB7XG4gICAgICAgIGlmIChwICE9PSBlYXIucHJldiAmJiBwICE9PSBlYXIubmV4dCAmJlxuICAgICAgICAgICAgcG9pbnRJblRyaWFuZ2xlKGEueCwgYS55LCBiLngsIGIueSwgYy54LCBjLnksIHAueCwgcC55KSAmJlxuICAgICAgICAgICAgYXJlYShwLnByZXYsIHAsIHAubmV4dCkgPj0gMCkgcmV0dXJuIGZhbHNlO1xuICAgICAgICBwID0gcC5uZXh0WjtcbiAgICB9XG5cbiAgICAvLyB0aGVuIGxvb2sgZm9yIHBvaW50cyBpbiBkZWNyZWFzaW5nIHotb3JkZXJcbiAgICBwID0gZWFyLnByZXZaO1xuXG4gICAgd2hpbGUgKHAgJiYgcC56ID49IG1pblopIHtcbiAgICAgICAgaWYgKHAgIT09IGVhci5wcmV2ICYmIHAgIT09IGVhci5uZXh0ICYmXG4gICAgICAgICAgICBwb2ludEluVHJpYW5nbGUoYS54LCBhLnksIGIueCwgYi55LCBjLngsIGMueSwgcC54LCBwLnkpICYmXG4gICAgICAgICAgICBhcmVhKHAucHJldiwgcCwgcC5uZXh0KSA+PSAwKSByZXR1cm4gZmFsc2U7XG4gICAgICAgIHAgPSBwLnByZXZaO1xuICAgIH1cblxuICAgIHJldHVybiB0cnVlO1xufVxuXG4vLyBnbyB0aHJvdWdoIGFsbCBwb2x5Z29uIG5vZGVzIGFuZCBjdXJlIHNtYWxsIGxvY2FsIHNlbGYtaW50ZXJzZWN0aW9uc1xuZnVuY3Rpb24gY3VyZUxvY2FsSW50ZXJzZWN0aW9ucyhzdGFydCwgdHJpYW5nbGVzLCBkaW0pIHtcbiAgICB2YXIgcCA9IHN0YXJ0O1xuICAgIGRvIHtcbiAgICAgICAgdmFyIGEgPSBwLnByZXYsXG4gICAgICAgICAgICBiID0gcC5uZXh0Lm5leHQ7XG5cbiAgICAgICAgLy8gYSBzZWxmLWludGVyc2VjdGlvbiB3aGVyZSBlZGdlICh2W2ktMV0sdltpXSkgaW50ZXJzZWN0cyAodltpKzFdLHZbaSsyXSlcbiAgICAgICAgaWYgKGludGVyc2VjdHMoYSwgcCwgcC5uZXh0LCBiKSAmJiBsb2NhbGx5SW5zaWRlKGEsIGIpICYmIGxvY2FsbHlJbnNpZGUoYiwgYSkpIHtcblxuICAgICAgICAgICAgdHJpYW5nbGVzLnB1c2goYS5pIC8gZGltKTtcbiAgICAgICAgICAgIHRyaWFuZ2xlcy5wdXNoKHAuaSAvIGRpbSk7XG4gICAgICAgICAgICB0cmlhbmdsZXMucHVzaChiLmkgLyBkaW0pO1xuXG4gICAgICAgICAgICAvLyByZW1vdmUgdHdvIG5vZGVzIGludm9sdmVkXG4gICAgICAgICAgICByZW1vdmVOb2RlKHApO1xuICAgICAgICAgICAgcmVtb3ZlTm9kZShwLm5leHQpO1xuXG4gICAgICAgICAgICBwID0gc3RhcnQgPSBiO1xuICAgICAgICB9XG4gICAgICAgIHAgPSBwLm5leHQ7XG4gICAgfSB3aGlsZSAocCAhPT0gc3RhcnQpO1xuXG4gICAgcmV0dXJuIHA7XG59XG5cbi8vIHRyeSBzcGxpdHRpbmcgcG9seWdvbiBpbnRvIHR3byBhbmQgdHJpYW5ndWxhdGUgdGhlbSBpbmRlcGVuZGVudGx5XG5mdW5jdGlvbiBzcGxpdEVhcmN1dChzdGFydCwgdHJpYW5nbGVzLCBkaW0sIG1pblgsIG1pblksIHNpemUpIHtcbiAgICAvLyBsb29rIGZvciBhIHZhbGlkIGRpYWdvbmFsIHRoYXQgZGl2aWRlcyB0aGUgcG9seWdvbiBpbnRvIHR3b1xuICAgIHZhciBhID0gc3RhcnQ7XG4gICAgZG8ge1xuICAgICAgICB2YXIgYiA9IGEubmV4dC5uZXh0O1xuICAgICAgICB3aGlsZSAoYiAhPT0gYS5wcmV2KSB7XG4gICAgICAgICAgICBpZiAoYS5pICE9PSBiLmkgJiYgaXNWYWxpZERpYWdvbmFsKGEsIGIpKSB7XG4gICAgICAgICAgICAgICAgLy8gc3BsaXQgdGhlIHBvbHlnb24gaW4gdHdvIGJ5IHRoZSBkaWFnb25hbFxuICAgICAgICAgICAgICAgIHZhciBjID0gc3BsaXRQb2x5Z29uKGEsIGIpO1xuXG4gICAgICAgICAgICAgICAgLy8gZmlsdGVyIGNvbGluZWFyIHBvaW50cyBhcm91bmQgdGhlIGN1dHNcbiAgICAgICAgICAgICAgICBhID0gZmlsdGVyUG9pbnRzKGEsIGEubmV4dCk7XG4gICAgICAgICAgICAgICAgYyA9IGZpbHRlclBvaW50cyhjLCBjLm5leHQpO1xuXG4gICAgICAgICAgICAgICAgLy8gcnVuIGVhcmN1dCBvbiBlYWNoIGhhbGZcbiAgICAgICAgICAgICAgICBlYXJjdXRMaW5rZWQoYSwgdHJpYW5nbGVzLCBkaW0sIG1pblgsIG1pblksIHNpemUpO1xuICAgICAgICAgICAgICAgIGVhcmN1dExpbmtlZChjLCB0cmlhbmdsZXMsIGRpbSwgbWluWCwgbWluWSwgc2l6ZSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYiA9IGIubmV4dDtcbiAgICAgICAgfVxuICAgICAgICBhID0gYS5uZXh0O1xuICAgIH0gd2hpbGUgKGEgIT09IHN0YXJ0KTtcbn1cblxuLy8gbGluayBldmVyeSBob2xlIGludG8gdGhlIG91dGVyIGxvb3AsIHByb2R1Y2luZyBhIHNpbmdsZS1yaW5nIHBvbHlnb24gd2l0aG91dCBob2xlc1xuZnVuY3Rpb24gZWxpbWluYXRlSG9sZXMoZGF0YSwgaG9sZUluZGljZXMsIG91dGVyTm9kZSwgZGltKSB7XG4gICAgdmFyIHF1ZXVlID0gW10sXG4gICAgICAgIGksIGxlbiwgc3RhcnQsIGVuZCwgbGlzdDtcblxuICAgIGZvciAoaSA9IDAsIGxlbiA9IGhvbGVJbmRpY2VzLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICAgIHN0YXJ0ID0gaG9sZUluZGljZXNbaV0gKiBkaW07XG4gICAgICAgIGVuZCA9IGkgPCBsZW4gLSAxID8gaG9sZUluZGljZXNbaSArIDFdICogZGltIDogZGF0YS5sZW5ndGg7XG4gICAgICAgIGxpc3QgPSBsaW5rZWRMaXN0KGRhdGEsIHN0YXJ0LCBlbmQsIGRpbSwgZmFsc2UpO1xuICAgICAgICBpZiAobGlzdCA9PT0gbGlzdC5uZXh0KSBsaXN0LnN0ZWluZXIgPSB0cnVlO1xuICAgICAgICBxdWV1ZS5wdXNoKGdldExlZnRtb3N0KGxpc3QpKTtcbiAgICB9XG5cbiAgICBxdWV1ZS5zb3J0KGNvbXBhcmVYKTtcblxuICAgIC8vIHByb2Nlc3MgaG9sZXMgZnJvbSBsZWZ0IHRvIHJpZ2h0XG4gICAgZm9yIChpID0gMDsgaSA8IHF1ZXVlLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGVsaW1pbmF0ZUhvbGUocXVldWVbaV0sIG91dGVyTm9kZSk7XG4gICAgICAgIG91dGVyTm9kZSA9IGZpbHRlclBvaW50cyhvdXRlck5vZGUsIG91dGVyTm9kZS5uZXh0KTtcbiAgICB9XG5cbiAgICByZXR1cm4gb3V0ZXJOb2RlO1xufVxuXG5mdW5jdGlvbiBjb21wYXJlWChhLCBiKSB7XG4gICAgcmV0dXJuIGEueCAtIGIueDtcbn1cblxuLy8gZmluZCBhIGJyaWRnZSBiZXR3ZWVuIHZlcnRpY2VzIHRoYXQgY29ubmVjdHMgaG9sZSB3aXRoIGFuIG91dGVyIHJpbmcgYW5kIGFuZCBsaW5rIGl0XG5mdW5jdGlvbiBlbGltaW5hdGVIb2xlKGhvbGUsIG91dGVyTm9kZSkge1xuICAgIG91dGVyTm9kZSA9IGZpbmRIb2xlQnJpZGdlKGhvbGUsIG91dGVyTm9kZSk7XG4gICAgaWYgKG91dGVyTm9kZSkge1xuICAgICAgICB2YXIgYiA9IHNwbGl0UG9seWdvbihvdXRlck5vZGUsIGhvbGUpO1xuICAgICAgICBmaWx0ZXJQb2ludHMoYiwgYi5uZXh0KTtcbiAgICB9XG59XG5cbi8vIERhdmlkIEViZXJseSdzIGFsZ29yaXRobSBmb3IgZmluZGluZyBhIGJyaWRnZSBiZXR3ZWVuIGhvbGUgYW5kIG91dGVyIHBvbHlnb25cbmZ1bmN0aW9uIGZpbmRIb2xlQnJpZGdlKGhvbGUsIG91dGVyTm9kZSkge1xuICAgIHZhciBwID0gb3V0ZXJOb2RlLFxuICAgICAgICBoeCA9IGhvbGUueCxcbiAgICAgICAgaHkgPSBob2xlLnksXG4gICAgICAgIHF4ID0gLUluZmluaXR5LFxuICAgICAgICBtO1xuXG4gICAgLy8gZmluZCBhIHNlZ21lbnQgaW50ZXJzZWN0ZWQgYnkgYSByYXkgZnJvbSB0aGUgaG9sZSdzIGxlZnRtb3N0IHBvaW50IHRvIHRoZSBsZWZ0O1xuICAgIC8vIHNlZ21lbnQncyBlbmRwb2ludCB3aXRoIGxlc3NlciB4IHdpbGwgYmUgcG90ZW50aWFsIGNvbm5lY3Rpb24gcG9pbnRcbiAgICBkbyB7XG4gICAgICAgIGlmIChoeSA8PSBwLnkgJiYgaHkgPj0gcC5uZXh0LnkpIHtcbiAgICAgICAgICAgIHZhciB4ID0gcC54ICsgKGh5IC0gcC55KSAqIChwLm5leHQueCAtIHAueCkgLyAocC5uZXh0LnkgLSBwLnkpO1xuICAgICAgICAgICAgaWYgKHggPD0gaHggJiYgeCA+IHF4KSB7XG4gICAgICAgICAgICAgICAgcXggPSB4O1xuICAgICAgICAgICAgICAgIG0gPSBwLnggPCBwLm5leHQueCA/IHAgOiBwLm5leHQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcCA9IHAubmV4dDtcbiAgICB9IHdoaWxlIChwICE9PSBvdXRlck5vZGUpO1xuXG4gICAgaWYgKCFtKSByZXR1cm4gbnVsbDtcblxuICAgIC8vIGxvb2sgZm9yIHBvaW50cyBpbnNpZGUgdGhlIHRyaWFuZ2xlIG9mIGhvbGUgcG9pbnQsIHNlZ21lbnQgaW50ZXJzZWN0aW9uIGFuZCBlbmRwb2ludDtcbiAgICAvLyBpZiB0aGVyZSBhcmUgbm8gcG9pbnRzIGZvdW5kLCB3ZSBoYXZlIGEgdmFsaWQgY29ubmVjdGlvbjtcbiAgICAvLyBvdGhlcndpc2UgY2hvb3NlIHRoZSBwb2ludCBvZiB0aGUgbWluaW11bSBhbmdsZSB3aXRoIHRoZSByYXkgYXMgY29ubmVjdGlvbiBwb2ludFxuXG4gICAgdmFyIHN0b3AgPSBtLFxuICAgICAgICB0YW5NaW4gPSBJbmZpbml0eSxcbiAgICAgICAgdGFuO1xuXG4gICAgcCA9IG0ubmV4dDtcblxuICAgIHdoaWxlIChwICE9PSBzdG9wKSB7XG4gICAgICAgIGlmIChoeCA+PSBwLnggJiYgcC54ID49IG0ueCAmJlxuICAgICAgICAgICAgICAgIHBvaW50SW5UcmlhbmdsZShoeSA8IG0ueSA/IGh4IDogcXgsIGh5LCBtLngsIG0ueSwgaHkgPCBtLnkgPyBxeCA6IGh4LCBoeSwgcC54LCBwLnkpKSB7XG5cbiAgICAgICAgICAgIHRhbiA9IE1hdGguYWJzKGh5IC0gcC55KSAvIChoeCAtIHAueCk7IC8vIHRhbmdlbnRpYWxcblxuICAgICAgICAgICAgaWYgKCh0YW4gPCB0YW5NaW4gfHwgKHRhbiA9PT0gdGFuTWluICYmIHAueCA+IG0ueCkpICYmIGxvY2FsbHlJbnNpZGUocCwgaG9sZSkpIHtcbiAgICAgICAgICAgICAgICBtID0gcDtcbiAgICAgICAgICAgICAgICB0YW5NaW4gPSB0YW47XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBwID0gcC5uZXh0O1xuICAgIH1cblxuICAgIHJldHVybiBtO1xufVxuXG4vLyBpbnRlcmxpbmsgcG9seWdvbiBub2RlcyBpbiB6LW9yZGVyXG5mdW5jdGlvbiBpbmRleEN1cnZlKHN0YXJ0LCBtaW5YLCBtaW5ZLCBzaXplKSB7XG4gICAgdmFyIHAgPSBzdGFydDtcbiAgICBkbyB7XG4gICAgICAgIGlmIChwLnogPT09IG51bGwpIHAueiA9IHpPcmRlcihwLngsIHAueSwgbWluWCwgbWluWSwgc2l6ZSk7XG4gICAgICAgIHAucHJldlogPSBwLnByZXY7XG4gICAgICAgIHAubmV4dFogPSBwLm5leHQ7XG4gICAgICAgIHAgPSBwLm5leHQ7XG4gICAgfSB3aGlsZSAocCAhPT0gc3RhcnQpO1xuXG4gICAgcC5wcmV2Wi5uZXh0WiA9IG51bGw7XG4gICAgcC5wcmV2WiA9IG51bGw7XG5cbiAgICBzb3J0TGlua2VkKHApO1xufVxuXG4vLyBTaW1vbiBUYXRoYW0ncyBsaW5rZWQgbGlzdCBtZXJnZSBzb3J0IGFsZ29yaXRobVxuLy8gaHR0cDovL3d3dy5jaGlhcmsuZ3JlZW5lbmQub3JnLnVrL35zZ3RhdGhhbS9hbGdvcml0aG1zL2xpc3Rzb3J0Lmh0bWxcbmZ1bmN0aW9uIHNvcnRMaW5rZWQobGlzdCkge1xuICAgIHZhciBpLCBwLCBxLCBlLCB0YWlsLCBudW1NZXJnZXMsIHBTaXplLCBxU2l6ZSxcbiAgICAgICAgaW5TaXplID0gMTtcblxuICAgIGRvIHtcbiAgICAgICAgcCA9IGxpc3Q7XG4gICAgICAgIGxpc3QgPSBudWxsO1xuICAgICAgICB0YWlsID0gbnVsbDtcbiAgICAgICAgbnVtTWVyZ2VzID0gMDtcblxuICAgICAgICB3aGlsZSAocCkge1xuICAgICAgICAgICAgbnVtTWVyZ2VzKys7XG4gICAgICAgICAgICBxID0gcDtcbiAgICAgICAgICAgIHBTaXplID0gMDtcbiAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBpblNpemU7IGkrKykge1xuICAgICAgICAgICAgICAgIHBTaXplKys7XG4gICAgICAgICAgICAgICAgcSA9IHEubmV4dFo7XG4gICAgICAgICAgICAgICAgaWYgKCFxKSBicmVhaztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcVNpemUgPSBpblNpemU7XG5cbiAgICAgICAgICAgIHdoaWxlIChwU2l6ZSA+IDAgfHwgKHFTaXplID4gMCAmJiBxKSkge1xuXG4gICAgICAgICAgICAgICAgaWYgKHBTaXplID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIGUgPSBxO1xuICAgICAgICAgICAgICAgICAgICBxID0gcS5uZXh0WjtcbiAgICAgICAgICAgICAgICAgICAgcVNpemUtLTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHFTaXplID09PSAwIHx8ICFxKSB7XG4gICAgICAgICAgICAgICAgICAgIGUgPSBwO1xuICAgICAgICAgICAgICAgICAgICBwID0gcC5uZXh0WjtcbiAgICAgICAgICAgICAgICAgICAgcFNpemUtLTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHAueiA8PSBxLnopIHtcbiAgICAgICAgICAgICAgICAgICAgZSA9IHA7XG4gICAgICAgICAgICAgICAgICAgIHAgPSBwLm5leHRaO1xuICAgICAgICAgICAgICAgICAgICBwU2l6ZS0tO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGUgPSBxO1xuICAgICAgICAgICAgICAgICAgICBxID0gcS5uZXh0WjtcbiAgICAgICAgICAgICAgICAgICAgcVNpemUtLTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAodGFpbCkgdGFpbC5uZXh0WiA9IGU7XG4gICAgICAgICAgICAgICAgZWxzZSBsaXN0ID0gZTtcblxuICAgICAgICAgICAgICAgIGUucHJldlogPSB0YWlsO1xuICAgICAgICAgICAgICAgIHRhaWwgPSBlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBwID0gcTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRhaWwubmV4dFogPSBudWxsO1xuICAgICAgICBpblNpemUgKj0gMjtcblxuICAgIH0gd2hpbGUgKG51bU1lcmdlcyA+IDEpO1xuXG4gICAgcmV0dXJuIGxpc3Q7XG59XG5cbi8vIHotb3JkZXIgb2YgYSBwb2ludCBnaXZlbiBjb29yZHMgYW5kIHNpemUgb2YgdGhlIGRhdGEgYm91bmRpbmcgYm94XG5mdW5jdGlvbiB6T3JkZXIoeCwgeSwgbWluWCwgbWluWSwgc2l6ZSkge1xuICAgIC8vIGNvb3JkcyBhcmUgdHJhbnNmb3JtZWQgaW50byBub24tbmVnYXRpdmUgMTUtYml0IGludGVnZXIgcmFuZ2VcbiAgICB4ID0gMzI3NjcgKiAoeCAtIG1pblgpIC8gc2l6ZTtcbiAgICB5ID0gMzI3NjcgKiAoeSAtIG1pblkpIC8gc2l6ZTtcblxuICAgIHggPSAoeCB8ICh4IDw8IDgpKSAmIDB4MDBGRjAwRkY7XG4gICAgeCA9ICh4IHwgKHggPDwgNCkpICYgMHgwRjBGMEYwRjtcbiAgICB4ID0gKHggfCAoeCA8PCAyKSkgJiAweDMzMzMzMzMzO1xuICAgIHggPSAoeCB8ICh4IDw8IDEpKSAmIDB4NTU1NTU1NTU7XG5cbiAgICB5ID0gKHkgfCAoeSA8PCA4KSkgJiAweDAwRkYwMEZGO1xuICAgIHkgPSAoeSB8ICh5IDw8IDQpKSAmIDB4MEYwRjBGMEY7XG4gICAgeSA9ICh5IHwgKHkgPDwgMikpICYgMHgzMzMzMzMzMztcbiAgICB5ID0gKHkgfCAoeSA8PCAxKSkgJiAweDU1NTU1NTU1O1xuXG4gICAgcmV0dXJuIHggfCAoeSA8PCAxKTtcbn1cblxuLy8gZmluZCB0aGUgbGVmdG1vc3Qgbm9kZSBvZiBhIHBvbHlnb24gcmluZ1xuZnVuY3Rpb24gZ2V0TGVmdG1vc3Qoc3RhcnQpIHtcbiAgICB2YXIgcCA9IHN0YXJ0LFxuICAgICAgICBsZWZ0bW9zdCA9IHN0YXJ0O1xuICAgIGRvIHtcbiAgICAgICAgaWYgKHAueCA8IGxlZnRtb3N0LngpIGxlZnRtb3N0ID0gcDtcbiAgICAgICAgcCA9IHAubmV4dDtcbiAgICB9IHdoaWxlIChwICE9PSBzdGFydCk7XG5cbiAgICByZXR1cm4gbGVmdG1vc3Q7XG59XG5cbi8vIGNoZWNrIGlmIGEgcG9pbnQgbGllcyB3aXRoaW4gYSBjb252ZXggdHJpYW5nbGVcbmZ1bmN0aW9uIHBvaW50SW5UcmlhbmdsZShheCwgYXksIGJ4LCBieSwgY3gsIGN5LCBweCwgcHkpIHtcbiAgICByZXR1cm4gKGN4IC0gcHgpICogKGF5IC0gcHkpIC0gKGF4IC0gcHgpICogKGN5IC0gcHkpID49IDAgJiZcbiAgICAgICAgICAgKGF4IC0gcHgpICogKGJ5IC0gcHkpIC0gKGJ4IC0gcHgpICogKGF5IC0gcHkpID49IDAgJiZcbiAgICAgICAgICAgKGJ4IC0gcHgpICogKGN5IC0gcHkpIC0gKGN4IC0gcHgpICogKGJ5IC0gcHkpID49IDA7XG59XG5cbi8vIGNoZWNrIGlmIGEgZGlhZ29uYWwgYmV0d2VlbiB0d28gcG9seWdvbiBub2RlcyBpcyB2YWxpZCAobGllcyBpbiBwb2x5Z29uIGludGVyaW9yKVxuZnVuY3Rpb24gaXNWYWxpZERpYWdvbmFsKGEsIGIpIHtcbiAgICByZXR1cm4gZXF1YWxzKGEsIGIpIHx8IGEubmV4dC5pICE9PSBiLmkgJiYgYS5wcmV2LmkgIT09IGIuaSAmJiAhaW50ZXJzZWN0c1BvbHlnb24oYSwgYikgJiZcbiAgICAgICAgICAgbG9jYWxseUluc2lkZShhLCBiKSAmJiBsb2NhbGx5SW5zaWRlKGIsIGEpICYmIG1pZGRsZUluc2lkZShhLCBiKTtcbn1cblxuLy8gc2lnbmVkIGFyZWEgb2YgYSB0cmlhbmdsZVxuZnVuY3Rpb24gYXJlYShwLCBxLCByKSB7XG4gICAgcmV0dXJuIChxLnkgLSBwLnkpICogKHIueCAtIHEueCkgLSAocS54IC0gcC54KSAqIChyLnkgLSBxLnkpO1xufVxuXG4vLyBjaGVjayBpZiB0d28gcG9pbnRzIGFyZSBlcXVhbFxuZnVuY3Rpb24gZXF1YWxzKHAxLCBwMikge1xuICAgIHJldHVybiBwMS54ID09PSBwMi54ICYmIHAxLnkgPT09IHAyLnk7XG59XG5cbi8vIGNoZWNrIGlmIHR3byBzZWdtZW50cyBpbnRlcnNlY3RcbmZ1bmN0aW9uIGludGVyc2VjdHMocDEsIHExLCBwMiwgcTIpIHtcbiAgICByZXR1cm4gYXJlYShwMSwgcTEsIHAyKSA+IDAgIT09IGFyZWEocDEsIHExLCBxMikgPiAwICYmXG4gICAgICAgICAgIGFyZWEocDIsIHEyLCBwMSkgPiAwICE9PSBhcmVhKHAyLCBxMiwgcTEpID4gMDtcbn1cblxuLy8gY2hlY2sgaWYgYSBwb2x5Z29uIGRpYWdvbmFsIGludGVyc2VjdHMgYW55IHBvbHlnb24gc2VnbWVudHNcbmZ1bmN0aW9uIGludGVyc2VjdHNQb2x5Z29uKGEsIGIpIHtcbiAgICB2YXIgcCA9IGE7XG4gICAgZG8ge1xuICAgICAgICBpZiAocC5pICE9PSBhLmkgJiYgcC5uZXh0LmkgIT09IGEuaSAmJiBwLmkgIT09IGIuaSAmJiBwLm5leHQuaSAhPT0gYi5pICYmXG4gICAgICAgICAgICAgICAgaW50ZXJzZWN0cyhwLCBwLm5leHQsIGEsIGIpKSByZXR1cm4gdHJ1ZTtcbiAgICAgICAgcCA9IHAubmV4dDtcbiAgICB9IHdoaWxlIChwICE9PSBhKTtcblxuICAgIHJldHVybiBmYWxzZTtcbn1cblxuLy8gY2hlY2sgaWYgYSBwb2x5Z29uIGRpYWdvbmFsIGlzIGxvY2FsbHkgaW5zaWRlIHRoZSBwb2x5Z29uXG5mdW5jdGlvbiBsb2NhbGx5SW5zaWRlKGEsIGIpIHtcbiAgICByZXR1cm4gYXJlYShhLnByZXYsIGEsIGEubmV4dCkgPCAwID9cbiAgICAgICAgYXJlYShhLCBiLCBhLm5leHQpID49IDAgJiYgYXJlYShhLCBhLnByZXYsIGIpID49IDAgOlxuICAgICAgICBhcmVhKGEsIGIsIGEucHJldikgPCAwIHx8IGFyZWEoYSwgYS5uZXh0LCBiKSA8IDA7XG59XG5cbi8vIGNoZWNrIGlmIHRoZSBtaWRkbGUgcG9pbnQgb2YgYSBwb2x5Z29uIGRpYWdvbmFsIGlzIGluc2lkZSB0aGUgcG9seWdvblxuZnVuY3Rpb24gbWlkZGxlSW5zaWRlKGEsIGIpIHtcbiAgICB2YXIgcCA9IGEsXG4gICAgICAgIGluc2lkZSA9IGZhbHNlLFxuICAgICAgICBweCA9IChhLnggKyBiLngpIC8gMixcbiAgICAgICAgcHkgPSAoYS55ICsgYi55KSAvIDI7XG4gICAgZG8ge1xuICAgICAgICBpZiAoKChwLnkgPiBweSkgIT09IChwLm5leHQueSA+IHB5KSkgJiYgKHB4IDwgKHAubmV4dC54IC0gcC54KSAqIChweSAtIHAueSkgLyAocC5uZXh0LnkgLSBwLnkpICsgcC54KSlcbiAgICAgICAgICAgIGluc2lkZSA9ICFpbnNpZGU7XG4gICAgICAgIHAgPSBwLm5leHQ7XG4gICAgfSB3aGlsZSAocCAhPT0gYSk7XG5cbiAgICByZXR1cm4gaW5zaWRlO1xufVxuXG4vLyBsaW5rIHR3byBwb2x5Z29uIHZlcnRpY2VzIHdpdGggYSBicmlkZ2U7IGlmIHRoZSB2ZXJ0aWNlcyBiZWxvbmcgdG8gdGhlIHNhbWUgcmluZywgaXQgc3BsaXRzIHBvbHlnb24gaW50byB0d287XG4vLyBpZiBvbmUgYmVsb25ncyB0byB0aGUgb3V0ZXIgcmluZyBhbmQgYW5vdGhlciB0byBhIGhvbGUsIGl0IG1lcmdlcyBpdCBpbnRvIGEgc2luZ2xlIHJpbmdcbmZ1bmN0aW9uIHNwbGl0UG9seWdvbihhLCBiKSB7XG4gICAgdmFyIGEyID0gbmV3IE5vZGUoYS5pLCBhLngsIGEueSksXG4gICAgICAgIGIyID0gbmV3IE5vZGUoYi5pLCBiLngsIGIueSksXG4gICAgICAgIGFuID0gYS5uZXh0LFxuICAgICAgICBicCA9IGIucHJldjtcblxuICAgIGEubmV4dCA9IGI7XG4gICAgYi5wcmV2ID0gYTtcblxuICAgIGEyLm5leHQgPSBhbjtcbiAgICBhbi5wcmV2ID0gYTI7XG5cbiAgICBiMi5uZXh0ID0gYTI7XG4gICAgYTIucHJldiA9IGIyO1xuXG4gICAgYnAubmV4dCA9IGIyO1xuICAgIGIyLnByZXYgPSBicDtcblxuICAgIHJldHVybiBiMjtcbn1cblxuLy8gY3JlYXRlIGEgbm9kZSBhbmQgb3B0aW9uYWxseSBsaW5rIGl0IHdpdGggcHJldmlvdXMgb25lIChpbiBhIGNpcmN1bGFyIGRvdWJseSBsaW5rZWQgbGlzdClcbmZ1bmN0aW9uIGluc2VydE5vZGUoaSwgeCwgeSwgbGFzdCkge1xuICAgIHZhciBwID0gbmV3IE5vZGUoaSwgeCwgeSk7XG5cbiAgICBpZiAoIWxhc3QpIHtcbiAgICAgICAgcC5wcmV2ID0gcDtcbiAgICAgICAgcC5uZXh0ID0gcDtcblxuICAgIH0gZWxzZSB7XG4gICAgICAgIHAubmV4dCA9IGxhc3QubmV4dDtcbiAgICAgICAgcC5wcmV2ID0gbGFzdDtcbiAgICAgICAgbGFzdC5uZXh0LnByZXYgPSBwO1xuICAgICAgICBsYXN0Lm5leHQgPSBwO1xuICAgIH1cbiAgICByZXR1cm4gcDtcbn1cblxuZnVuY3Rpb24gcmVtb3ZlTm9kZShwKSB7XG4gICAgcC5uZXh0LnByZXYgPSBwLnByZXY7XG4gICAgcC5wcmV2Lm5leHQgPSBwLm5leHQ7XG5cbiAgICBpZiAocC5wcmV2WikgcC5wcmV2Wi5uZXh0WiA9IHAubmV4dFo7XG4gICAgaWYgKHAubmV4dFopIHAubmV4dFoucHJldlogPSBwLnByZXZaO1xufVxuXG5mdW5jdGlvbiBOb2RlKGksIHgsIHkpIHtcbiAgICAvLyB2ZXJ0aWNlIGluZGV4IGluIGNvb3JkaW5hdGVzIGFycmF5XG4gICAgdGhpcy5pID0gaTtcblxuICAgIC8vIHZlcnRleCBjb29yZGluYXRlc1xuICAgIHRoaXMueCA9IHg7XG4gICAgdGhpcy55ID0geTtcblxuICAgIC8vIHByZXZpb3VzIGFuZCBuZXh0IHZlcnRpY2Ugbm9kZXMgaW4gYSBwb2x5Z29uIHJpbmdcbiAgICB0aGlzLnByZXYgPSBudWxsO1xuICAgIHRoaXMubmV4dCA9IG51bGw7XG5cbiAgICAvLyB6LW9yZGVyIGN1cnZlIHZhbHVlXG4gICAgdGhpcy56ID0gbnVsbDtcblxuICAgIC8vIHByZXZpb3VzIGFuZCBuZXh0IG5vZGVzIGluIHotb3JkZXJcbiAgICB0aGlzLnByZXZaID0gbnVsbDtcbiAgICB0aGlzLm5leHRaID0gbnVsbDtcblxuICAgIC8vIGluZGljYXRlcyB3aGV0aGVyIHRoaXMgaXMgYSBzdGVpbmVyIHBvaW50XG4gICAgdGhpcy5zdGVpbmVyID0gZmFsc2U7XG59XG4iLCIndXNlIHN0cmljdCc7XG5cbi8vXG4vLyBXZSBzdG9yZSBvdXIgRUUgb2JqZWN0cyBpbiBhIHBsYWluIG9iamVjdCB3aG9zZSBwcm9wZXJ0aWVzIGFyZSBldmVudCBuYW1lcy5cbi8vIElmIGBPYmplY3QuY3JlYXRlKG51bGwpYCBpcyBub3Qgc3VwcG9ydGVkIHdlIHByZWZpeCB0aGUgZXZlbnQgbmFtZXMgd2l0aCBhXG4vLyBgfmAgdG8gbWFrZSBzdXJlIHRoYXQgdGhlIGJ1aWx0LWluIG9iamVjdCBwcm9wZXJ0aWVzIGFyZSBub3Qgb3ZlcnJpZGRlbiBvclxuLy8gdXNlZCBhcyBhbiBhdHRhY2sgdmVjdG9yLlxuLy8gV2UgYWxzbyBhc3N1bWUgdGhhdCBgT2JqZWN0LmNyZWF0ZShudWxsKWAgaXMgYXZhaWxhYmxlIHdoZW4gdGhlIGV2ZW50IG5hbWVcbi8vIGlzIGFuIEVTNiBTeW1ib2wuXG4vL1xudmFyIHByZWZpeCA9IHR5cGVvZiBPYmplY3QuY3JlYXRlICE9PSAnZnVuY3Rpb24nID8gJ34nIDogZmFsc2U7XG5cbi8qKlxuICogUmVwcmVzZW50YXRpb24gb2YgYSBzaW5nbGUgRXZlbnRFbWl0dGVyIGZ1bmN0aW9uLlxuICpcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZuIEV2ZW50IGhhbmRsZXIgdG8gYmUgY2FsbGVkLlxuICogQHBhcmFtIHtNaXhlZH0gY29udGV4dCBDb250ZXh0IGZvciBmdW5jdGlvbiBleGVjdXRpb24uXG4gKiBAcGFyYW0ge0Jvb2xlYW59IG9uY2UgT25seSBlbWl0IG9uY2VcbiAqIEBhcGkgcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBFRShmbiwgY29udGV4dCwgb25jZSkge1xuICB0aGlzLmZuID0gZm47XG4gIHRoaXMuY29udGV4dCA9IGNvbnRleHQ7XG4gIHRoaXMub25jZSA9IG9uY2UgfHwgZmFsc2U7XG59XG5cbi8qKlxuICogTWluaW1hbCBFdmVudEVtaXR0ZXIgaW50ZXJmYWNlIHRoYXQgaXMgbW9sZGVkIGFnYWluc3QgdGhlIE5vZGUuanNcbiAqIEV2ZW50RW1pdHRlciBpbnRlcmZhY2UuXG4gKlxuICogQGNvbnN0cnVjdG9yXG4gKiBAYXBpIHB1YmxpY1xuICovXG5mdW5jdGlvbiBFdmVudEVtaXR0ZXIoKSB7IC8qIE5vdGhpbmcgdG8gc2V0ICovIH1cblxuLyoqXG4gKiBIb2xkcyB0aGUgYXNzaWduZWQgRXZlbnRFbWl0dGVycyBieSBuYW1lLlxuICpcbiAqIEB0eXBlIHtPYmplY3R9XG4gKiBAcHJpdmF0ZVxuICovXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLl9ldmVudHMgPSB1bmRlZmluZWQ7XG5cbi8qKlxuICogUmV0dXJuIGEgbGlzdCBvZiBhc3NpZ25lZCBldmVudCBsaXN0ZW5lcnMuXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IGV2ZW50IFRoZSBldmVudHMgdGhhdCBzaG91bGQgYmUgbGlzdGVkLlxuICogQHBhcmFtIHtCb29sZWFufSBleGlzdHMgV2Ugb25seSBuZWVkIHRvIGtub3cgaWYgdGhlcmUgYXJlIGxpc3RlbmVycy5cbiAqIEByZXR1cm5zIHtBcnJheXxCb29sZWFufVxuICogQGFwaSBwdWJsaWNcbiAqL1xuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5saXN0ZW5lcnMgPSBmdW5jdGlvbiBsaXN0ZW5lcnMoZXZlbnQsIGV4aXN0cykge1xuICB2YXIgZXZ0ID0gcHJlZml4ID8gcHJlZml4ICsgZXZlbnQgOiBldmVudFxuICAgICwgYXZhaWxhYmxlID0gdGhpcy5fZXZlbnRzICYmIHRoaXMuX2V2ZW50c1tldnRdO1xuXG4gIGlmIChleGlzdHMpIHJldHVybiAhIWF2YWlsYWJsZTtcbiAgaWYgKCFhdmFpbGFibGUpIHJldHVybiBbXTtcbiAgaWYgKGF2YWlsYWJsZS5mbikgcmV0dXJuIFthdmFpbGFibGUuZm5dO1xuXG4gIGZvciAodmFyIGkgPSAwLCBsID0gYXZhaWxhYmxlLmxlbmd0aCwgZWUgPSBuZXcgQXJyYXkobCk7IGkgPCBsOyBpKyspIHtcbiAgICBlZVtpXSA9IGF2YWlsYWJsZVtpXS5mbjtcbiAgfVxuXG4gIHJldHVybiBlZTtcbn07XG5cbi8qKlxuICogRW1pdCBhbiBldmVudCB0byBhbGwgcmVnaXN0ZXJlZCBldmVudCBsaXN0ZW5lcnMuXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IGV2ZW50IFRoZSBuYW1lIG9mIHRoZSBldmVudC5cbiAqIEByZXR1cm5zIHtCb29sZWFufSBJbmRpY2F0aW9uIGlmIHdlJ3ZlIGVtaXR0ZWQgYW4gZXZlbnQuXG4gKiBAYXBpIHB1YmxpY1xuICovXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLmVtaXQgPSBmdW5jdGlvbiBlbWl0KGV2ZW50LCBhMSwgYTIsIGEzLCBhNCwgYTUpIHtcbiAgdmFyIGV2dCA9IHByZWZpeCA/IHByZWZpeCArIGV2ZW50IDogZXZlbnQ7XG5cbiAgaWYgKCF0aGlzLl9ldmVudHMgfHwgIXRoaXMuX2V2ZW50c1tldnRdKSByZXR1cm4gZmFsc2U7XG5cbiAgdmFyIGxpc3RlbmVycyA9IHRoaXMuX2V2ZW50c1tldnRdXG4gICAgLCBsZW4gPSBhcmd1bWVudHMubGVuZ3RoXG4gICAgLCBhcmdzXG4gICAgLCBpO1xuXG4gIGlmICgnZnVuY3Rpb24nID09PSB0eXBlb2YgbGlzdGVuZXJzLmZuKSB7XG4gICAgaWYgKGxpc3RlbmVycy5vbmNlKSB0aGlzLnJlbW92ZUxpc3RlbmVyKGV2ZW50LCBsaXN0ZW5lcnMuZm4sIHVuZGVmaW5lZCwgdHJ1ZSk7XG5cbiAgICBzd2l0Y2ggKGxlbikge1xuICAgICAgY2FzZSAxOiByZXR1cm4gbGlzdGVuZXJzLmZuLmNhbGwobGlzdGVuZXJzLmNvbnRleHQpLCB0cnVlO1xuICAgICAgY2FzZSAyOiByZXR1cm4gbGlzdGVuZXJzLmZuLmNhbGwobGlzdGVuZXJzLmNvbnRleHQsIGExKSwgdHJ1ZTtcbiAgICAgIGNhc2UgMzogcmV0dXJuIGxpc3RlbmVycy5mbi5jYWxsKGxpc3RlbmVycy5jb250ZXh0LCBhMSwgYTIpLCB0cnVlO1xuICAgICAgY2FzZSA0OiByZXR1cm4gbGlzdGVuZXJzLmZuLmNhbGwobGlzdGVuZXJzLmNvbnRleHQsIGExLCBhMiwgYTMpLCB0cnVlO1xuICAgICAgY2FzZSA1OiByZXR1cm4gbGlzdGVuZXJzLmZuLmNhbGwobGlzdGVuZXJzLmNvbnRleHQsIGExLCBhMiwgYTMsIGE0KSwgdHJ1ZTtcbiAgICAgIGNhc2UgNjogcmV0dXJuIGxpc3RlbmVycy5mbi5jYWxsKGxpc3RlbmVycy5jb250ZXh0LCBhMSwgYTIsIGEzLCBhNCwgYTUpLCB0cnVlO1xuICAgIH1cblxuICAgIGZvciAoaSA9IDEsIGFyZ3MgPSBuZXcgQXJyYXkobGVuIC0xKTsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICBhcmdzW2kgLSAxXSA9IGFyZ3VtZW50c1tpXTtcbiAgICB9XG5cbiAgICBsaXN0ZW5lcnMuZm4uYXBwbHkobGlzdGVuZXJzLmNvbnRleHQsIGFyZ3MpO1xuICB9IGVsc2Uge1xuICAgIHZhciBsZW5ndGggPSBsaXN0ZW5lcnMubGVuZ3RoXG4gICAgICAsIGo7XG5cbiAgICBmb3IgKGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmIChsaXN0ZW5lcnNbaV0ub25jZSkgdGhpcy5yZW1vdmVMaXN0ZW5lcihldmVudCwgbGlzdGVuZXJzW2ldLmZuLCB1bmRlZmluZWQsIHRydWUpO1xuXG4gICAgICBzd2l0Y2ggKGxlbikge1xuICAgICAgICBjYXNlIDE6IGxpc3RlbmVyc1tpXS5mbi5jYWxsKGxpc3RlbmVyc1tpXS5jb250ZXh0KTsgYnJlYWs7XG4gICAgICAgIGNhc2UgMjogbGlzdGVuZXJzW2ldLmZuLmNhbGwobGlzdGVuZXJzW2ldLmNvbnRleHQsIGExKTsgYnJlYWs7XG4gICAgICAgIGNhc2UgMzogbGlzdGVuZXJzW2ldLmZuLmNhbGwobGlzdGVuZXJzW2ldLmNvbnRleHQsIGExLCBhMik7IGJyZWFrO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIGlmICghYXJncykgZm9yIChqID0gMSwgYXJncyA9IG5ldyBBcnJheShsZW4gLTEpOyBqIDwgbGVuOyBqKyspIHtcbiAgICAgICAgICAgIGFyZ3NbaiAtIDFdID0gYXJndW1lbnRzW2pdO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGxpc3RlbmVyc1tpXS5mbi5hcHBseShsaXN0ZW5lcnNbaV0uY29udGV4dCwgYXJncyk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHRydWU7XG59O1xuXG4vKipcbiAqIFJlZ2lzdGVyIGEgbmV3IEV2ZW50TGlzdGVuZXIgZm9yIHRoZSBnaXZlbiBldmVudC5cbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gZXZlbnQgTmFtZSBvZiB0aGUgZXZlbnQuXG4gKiBAcGFyYW0ge0Z1bmN0b259IGZuIENhbGxiYWNrIGZ1bmN0aW9uLlxuICogQHBhcmFtIHtNaXhlZH0gY29udGV4dCBUaGUgY29udGV4dCBvZiB0aGUgZnVuY3Rpb24uXG4gKiBAYXBpIHB1YmxpY1xuICovXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLm9uID0gZnVuY3Rpb24gb24oZXZlbnQsIGZuLCBjb250ZXh0KSB7XG4gIHZhciBsaXN0ZW5lciA9IG5ldyBFRShmbiwgY29udGV4dCB8fCB0aGlzKVxuICAgICwgZXZ0ID0gcHJlZml4ID8gcHJlZml4ICsgZXZlbnQgOiBldmVudDtcblxuICBpZiAoIXRoaXMuX2V2ZW50cykgdGhpcy5fZXZlbnRzID0gcHJlZml4ID8ge30gOiBPYmplY3QuY3JlYXRlKG51bGwpO1xuICBpZiAoIXRoaXMuX2V2ZW50c1tldnRdKSB0aGlzLl9ldmVudHNbZXZ0XSA9IGxpc3RlbmVyO1xuICBlbHNlIHtcbiAgICBpZiAoIXRoaXMuX2V2ZW50c1tldnRdLmZuKSB0aGlzLl9ldmVudHNbZXZ0XS5wdXNoKGxpc3RlbmVyKTtcbiAgICBlbHNlIHRoaXMuX2V2ZW50c1tldnRdID0gW1xuICAgICAgdGhpcy5fZXZlbnRzW2V2dF0sIGxpc3RlbmVyXG4gICAgXTtcbiAgfVxuXG4gIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBBZGQgYW4gRXZlbnRMaXN0ZW5lciB0aGF0J3Mgb25seSBjYWxsZWQgb25jZS5cbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gZXZlbnQgTmFtZSBvZiB0aGUgZXZlbnQuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmbiBDYWxsYmFjayBmdW5jdGlvbi5cbiAqIEBwYXJhbSB7TWl4ZWR9IGNvbnRleHQgVGhlIGNvbnRleHQgb2YgdGhlIGZ1bmN0aW9uLlxuICogQGFwaSBwdWJsaWNcbiAqL1xuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5vbmNlID0gZnVuY3Rpb24gb25jZShldmVudCwgZm4sIGNvbnRleHQpIHtcbiAgdmFyIGxpc3RlbmVyID0gbmV3IEVFKGZuLCBjb250ZXh0IHx8IHRoaXMsIHRydWUpXG4gICAgLCBldnQgPSBwcmVmaXggPyBwcmVmaXggKyBldmVudCA6IGV2ZW50O1xuXG4gIGlmICghdGhpcy5fZXZlbnRzKSB0aGlzLl9ldmVudHMgPSBwcmVmaXggPyB7fSA6IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gIGlmICghdGhpcy5fZXZlbnRzW2V2dF0pIHRoaXMuX2V2ZW50c1tldnRdID0gbGlzdGVuZXI7XG4gIGVsc2Uge1xuICAgIGlmICghdGhpcy5fZXZlbnRzW2V2dF0uZm4pIHRoaXMuX2V2ZW50c1tldnRdLnB1c2gobGlzdGVuZXIpO1xuICAgIGVsc2UgdGhpcy5fZXZlbnRzW2V2dF0gPSBbXG4gICAgICB0aGlzLl9ldmVudHNbZXZ0XSwgbGlzdGVuZXJcbiAgICBdO1xuICB9XG5cbiAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIFJlbW92ZSBldmVudCBsaXN0ZW5lcnMuXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IGV2ZW50IFRoZSBldmVudCB3ZSB3YW50IHRvIHJlbW92ZS5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZuIFRoZSBsaXN0ZW5lciB0aGF0IHdlIG5lZWQgdG8gZmluZC5cbiAqIEBwYXJhbSB7TWl4ZWR9IGNvbnRleHQgT25seSByZW1vdmUgbGlzdGVuZXJzIG1hdGNoaW5nIHRoaXMgY29udGV4dC5cbiAqIEBwYXJhbSB7Qm9vbGVhbn0gb25jZSBPbmx5IHJlbW92ZSBvbmNlIGxpc3RlbmVycy5cbiAqIEBhcGkgcHVibGljXG4gKi9cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUucmVtb3ZlTGlzdGVuZXIgPSBmdW5jdGlvbiByZW1vdmVMaXN0ZW5lcihldmVudCwgZm4sIGNvbnRleHQsIG9uY2UpIHtcbiAgdmFyIGV2dCA9IHByZWZpeCA/IHByZWZpeCArIGV2ZW50IDogZXZlbnQ7XG5cbiAgaWYgKCF0aGlzLl9ldmVudHMgfHwgIXRoaXMuX2V2ZW50c1tldnRdKSByZXR1cm4gdGhpcztcblxuICB2YXIgbGlzdGVuZXJzID0gdGhpcy5fZXZlbnRzW2V2dF1cbiAgICAsIGV2ZW50cyA9IFtdO1xuXG4gIGlmIChmbikge1xuICAgIGlmIChsaXN0ZW5lcnMuZm4pIHtcbiAgICAgIGlmIChcbiAgICAgICAgICAgbGlzdGVuZXJzLmZuICE9PSBmblxuICAgICAgICB8fCAob25jZSAmJiAhbGlzdGVuZXJzLm9uY2UpXG4gICAgICAgIHx8IChjb250ZXh0ICYmIGxpc3RlbmVycy5jb250ZXh0ICE9PSBjb250ZXh0KVxuICAgICAgKSB7XG4gICAgICAgIGV2ZW50cy5wdXNoKGxpc3RlbmVycyk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGZvciAodmFyIGkgPSAwLCBsZW5ndGggPSBsaXN0ZW5lcnMubGVuZ3RoOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgIGxpc3RlbmVyc1tpXS5mbiAhPT0gZm5cbiAgICAgICAgICB8fCAob25jZSAmJiAhbGlzdGVuZXJzW2ldLm9uY2UpXG4gICAgICAgICAgfHwgKGNvbnRleHQgJiYgbGlzdGVuZXJzW2ldLmNvbnRleHQgIT09IGNvbnRleHQpXG4gICAgICAgICkge1xuICAgICAgICAgIGV2ZW50cy5wdXNoKGxpc3RlbmVyc1tpXSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvL1xuICAvLyBSZXNldCB0aGUgYXJyYXksIG9yIHJlbW92ZSBpdCBjb21wbGV0ZWx5IGlmIHdlIGhhdmUgbm8gbW9yZSBsaXN0ZW5lcnMuXG4gIC8vXG4gIGlmIChldmVudHMubGVuZ3RoKSB7XG4gICAgdGhpcy5fZXZlbnRzW2V2dF0gPSBldmVudHMubGVuZ3RoID09PSAxID8gZXZlbnRzWzBdIDogZXZlbnRzO1xuICB9IGVsc2Uge1xuICAgIGRlbGV0ZSB0aGlzLl9ldmVudHNbZXZ0XTtcbiAgfVxuXG4gIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBSZW1vdmUgYWxsIGxpc3RlbmVycyBvciBvbmx5IHRoZSBsaXN0ZW5lcnMgZm9yIHRoZSBzcGVjaWZpZWQgZXZlbnQuXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IGV2ZW50IFRoZSBldmVudCB3YW50IHRvIHJlbW92ZSBhbGwgbGlzdGVuZXJzIGZvci5cbiAqIEBhcGkgcHVibGljXG4gKi9cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUucmVtb3ZlQWxsTGlzdGVuZXJzID0gZnVuY3Rpb24gcmVtb3ZlQWxsTGlzdGVuZXJzKGV2ZW50KSB7XG4gIGlmICghdGhpcy5fZXZlbnRzKSByZXR1cm4gdGhpcztcblxuICBpZiAoZXZlbnQpIGRlbGV0ZSB0aGlzLl9ldmVudHNbcHJlZml4ID8gcHJlZml4ICsgZXZlbnQgOiBldmVudF07XG4gIGVsc2UgdGhpcy5fZXZlbnRzID0gcHJlZml4ID8ge30gOiBPYmplY3QuY3JlYXRlKG51bGwpO1xuXG4gIHJldHVybiB0aGlzO1xufTtcblxuLy9cbi8vIEFsaWFzIG1ldGhvZHMgbmFtZXMgYmVjYXVzZSBwZW9wbGUgcm9sbCBsaWtlIHRoYXQuXG4vL1xuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5vZmYgPSBFdmVudEVtaXR0ZXIucHJvdG90eXBlLnJlbW92ZUxpc3RlbmVyO1xuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5hZGRMaXN0ZW5lciA9IEV2ZW50RW1pdHRlci5wcm90b3R5cGUub247XG5cbi8vXG4vLyBUaGlzIGZ1bmN0aW9uIGRvZXNuJ3QgYXBwbHkgYW55bW9yZS5cbi8vXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLnNldE1heExpc3RlbmVycyA9IGZ1bmN0aW9uIHNldE1heExpc3RlbmVycygpIHtcbiAgcmV0dXJuIHRoaXM7XG59O1xuXG4vL1xuLy8gRXhwb3NlIHRoZSBwcmVmaXguXG4vL1xuRXZlbnRFbWl0dGVyLnByZWZpeGVkID0gcHJlZml4O1xuXG4vL1xuLy8gRXhwb3NlIHRoZSBtb2R1bGUuXG4vL1xuaWYgKCd1bmRlZmluZWQnICE9PSB0eXBlb2YgbW9kdWxlKSB7XG4gIG1vZHVsZS5leHBvcnRzID0gRXZlbnRFbWl0dGVyO1xufVxuIiwiLyogZXNsaW50LWRpc2FibGUgbm8tdW51c2VkLXZhcnMgKi9cbid1c2Ugc3RyaWN0JztcbnZhciBoYXNPd25Qcm9wZXJ0eSA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7XG52YXIgcHJvcElzRW51bWVyYWJsZSA9IE9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGU7XG5cbmZ1bmN0aW9uIHRvT2JqZWN0KHZhbCkge1xuXHRpZiAodmFsID09PSBudWxsIHx8IHZhbCA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0dGhyb3cgbmV3IFR5cGVFcnJvcignT2JqZWN0LmFzc2lnbiBjYW5ub3QgYmUgY2FsbGVkIHdpdGggbnVsbCBvciB1bmRlZmluZWQnKTtcblx0fVxuXG5cdHJldHVybiBPYmplY3QodmFsKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQsIHNvdXJjZSkge1xuXHR2YXIgZnJvbTtcblx0dmFyIHRvID0gdG9PYmplY3QodGFyZ2V0KTtcblx0dmFyIHN5bWJvbHM7XG5cblx0Zm9yICh2YXIgcyA9IDE7IHMgPCBhcmd1bWVudHMubGVuZ3RoOyBzKyspIHtcblx0XHRmcm9tID0gT2JqZWN0KGFyZ3VtZW50c1tzXSk7XG5cblx0XHRmb3IgKHZhciBrZXkgaW4gZnJvbSkge1xuXHRcdFx0aWYgKGhhc093blByb3BlcnR5LmNhbGwoZnJvbSwga2V5KSkge1xuXHRcdFx0XHR0b1trZXldID0gZnJvbVtrZXldO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7XG5cdFx0XHRzeW1ib2xzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhmcm9tKTtcblx0XHRcdGZvciAodmFyIGkgPSAwOyBpIDwgc3ltYm9scy5sZW5ndGg7IGkrKykge1xuXHRcdFx0XHRpZiAocHJvcElzRW51bWVyYWJsZS5jYWxsKGZyb20sIHN5bWJvbHNbaV0pKSB7XG5cdFx0XHRcdFx0dG9bc3ltYm9sc1tpXV0gPSBmcm9tW3N5bWJvbHNbaV1dO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIHRvO1xufTtcbiIsIi8qIVxuICogYXN5bmNcbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS9jYW9sYW4vYXN5bmNcbiAqXG4gKiBDb3B5cmlnaHQgMjAxMC0yMDE0IENhb2xhbiBNY01haG9uXG4gKiBSZWxlYXNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2VcbiAqL1xuLypqc2hpbnQgb25ldmFyOiBmYWxzZSwgaW5kZW50OjQgKi9cbi8qZ2xvYmFsIHNldEltbWVkaWF0ZTogZmFsc2UsIHNldFRpbWVvdXQ6IGZhbHNlLCBjb25zb2xlOiBmYWxzZSAqL1xuKGZ1bmN0aW9uICgpIHtcblxuICAgIHZhciBhc3luYyA9IHt9O1xuXG4gICAgLy8gZ2xvYmFsIG9uIHRoZSBzZXJ2ZXIsIHdpbmRvdyBpbiB0aGUgYnJvd3NlclxuICAgIHZhciByb290LCBwcmV2aW91c19hc3luYztcblxuICAgIHJvb3QgPSB0aGlzO1xuICAgIGlmIChyb290ICE9IG51bGwpIHtcbiAgICAgIHByZXZpb3VzX2FzeW5jID0gcm9vdC5hc3luYztcbiAgICB9XG5cbiAgICBhc3luYy5ub0NvbmZsaWN0ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByb290LmFzeW5jID0gcHJldmlvdXNfYXN5bmM7XG4gICAgICAgIHJldHVybiBhc3luYztcbiAgICB9O1xuXG4gICAgZnVuY3Rpb24gb25seV9vbmNlKGZuKSB7XG4gICAgICAgIHZhciBjYWxsZWQgPSBmYWxzZTtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgaWYgKGNhbGxlZCkgdGhyb3cgbmV3IEVycm9yKFwiQ2FsbGJhY2sgd2FzIGFscmVhZHkgY2FsbGVkLlwiKTtcbiAgICAgICAgICAgIGNhbGxlZCA9IHRydWU7XG4gICAgICAgICAgICBmbi5hcHBseShyb290LCBhcmd1bWVudHMpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8vLyBjcm9zcy1icm93c2VyIGNvbXBhdGlibGl0eSBmdW5jdGlvbnMgLy8vL1xuXG4gICAgdmFyIF90b1N0cmluZyA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7XG5cbiAgICB2YXIgX2lzQXJyYXkgPSBBcnJheS5pc0FycmF5IHx8IGZ1bmN0aW9uIChvYmopIHtcbiAgICAgICAgcmV0dXJuIF90b1N0cmluZy5jYWxsKG9iaikgPT09ICdbb2JqZWN0IEFycmF5XSc7XG4gICAgfTtcblxuICAgIHZhciBfZWFjaCA9IGZ1bmN0aW9uIChhcnIsIGl0ZXJhdG9yKSB7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXJyLmxlbmd0aDsgaSArPSAxKSB7XG4gICAgICAgICAgICBpdGVyYXRvcihhcnJbaV0sIGksIGFycik7XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgdmFyIF9tYXAgPSBmdW5jdGlvbiAoYXJyLCBpdGVyYXRvcikge1xuICAgICAgICBpZiAoYXJyLm1hcCkge1xuICAgICAgICAgICAgcmV0dXJuIGFyci5tYXAoaXRlcmF0b3IpO1xuICAgICAgICB9XG4gICAgICAgIHZhciByZXN1bHRzID0gW107XG4gICAgICAgIF9lYWNoKGFyciwgZnVuY3Rpb24gKHgsIGksIGEpIHtcbiAgICAgICAgICAgIHJlc3VsdHMucHVzaChpdGVyYXRvcih4LCBpLCBhKSk7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gcmVzdWx0cztcbiAgICB9O1xuXG4gICAgdmFyIF9yZWR1Y2UgPSBmdW5jdGlvbiAoYXJyLCBpdGVyYXRvciwgbWVtbykge1xuICAgICAgICBpZiAoYXJyLnJlZHVjZSkge1xuICAgICAgICAgICAgcmV0dXJuIGFyci5yZWR1Y2UoaXRlcmF0b3IsIG1lbW8pO1xuICAgICAgICB9XG4gICAgICAgIF9lYWNoKGFyciwgZnVuY3Rpb24gKHgsIGksIGEpIHtcbiAgICAgICAgICAgIG1lbW8gPSBpdGVyYXRvcihtZW1vLCB4LCBpLCBhKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBtZW1vO1xuICAgIH07XG5cbiAgICB2YXIgX2tleXMgPSBmdW5jdGlvbiAob2JqKSB7XG4gICAgICAgIGlmIChPYmplY3Qua2V5cykge1xuICAgICAgICAgICAgcmV0dXJuIE9iamVjdC5rZXlzKG9iaik7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIGtleXMgPSBbXTtcbiAgICAgICAgZm9yICh2YXIgayBpbiBvYmopIHtcbiAgICAgICAgICAgIGlmIChvYmouaGFzT3duUHJvcGVydHkoaykpIHtcbiAgICAgICAgICAgICAgICBrZXlzLnB1c2goayk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGtleXM7XG4gICAgfTtcblxuICAgIC8vLy8gZXhwb3J0ZWQgYXN5bmMgbW9kdWxlIGZ1bmN0aW9ucyAvLy8vXG5cbiAgICAvLy8vIG5leHRUaWNrIGltcGxlbWVudGF0aW9uIHdpdGggYnJvd3Nlci1jb21wYXRpYmxlIGZhbGxiYWNrIC8vLy9cbiAgICBpZiAodHlwZW9mIHByb2Nlc3MgPT09ICd1bmRlZmluZWQnIHx8ICEocHJvY2Vzcy5uZXh0VGljaykpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBzZXRJbW1lZGlhdGUgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIGFzeW5jLm5leHRUaWNrID0gZnVuY3Rpb24gKGZuKSB7XG4gICAgICAgICAgICAgICAgLy8gbm90IGEgZGlyZWN0IGFsaWFzIGZvciBJRTEwIGNvbXBhdGliaWxpdHlcbiAgICAgICAgICAgICAgICBzZXRJbW1lZGlhdGUoZm4pO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGFzeW5jLnNldEltbWVkaWF0ZSA9IGFzeW5jLm5leHRUaWNrO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgYXN5bmMubmV4dFRpY2sgPSBmdW5jdGlvbiAoZm4pIHtcbiAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KGZuLCAwKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBhc3luYy5zZXRJbW1lZGlhdGUgPSBhc3luYy5uZXh0VGljaztcbiAgICAgICAgfVxuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgYXN5bmMubmV4dFRpY2sgPSBwcm9jZXNzLm5leHRUaWNrO1xuICAgICAgICBpZiAodHlwZW9mIHNldEltbWVkaWF0ZSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgIGFzeW5jLnNldEltbWVkaWF0ZSA9IGZ1bmN0aW9uIChmbikge1xuICAgICAgICAgICAgICAvLyBub3QgYSBkaXJlY3QgYWxpYXMgZm9yIElFMTAgY29tcGF0aWJpbGl0eVxuICAgICAgICAgICAgICBzZXRJbW1lZGlhdGUoZm4pO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGFzeW5jLnNldEltbWVkaWF0ZSA9IGFzeW5jLm5leHRUaWNrO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgYXN5bmMuZWFjaCA9IGZ1bmN0aW9uIChhcnIsIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICBjYWxsYmFjayA9IGNhbGxiYWNrIHx8IGZ1bmN0aW9uICgpIHt9O1xuICAgICAgICBpZiAoIWFyci5sZW5ndGgpIHtcbiAgICAgICAgICAgIHJldHVybiBjYWxsYmFjaygpO1xuICAgICAgICB9XG4gICAgICAgIHZhciBjb21wbGV0ZWQgPSAwO1xuICAgICAgICBfZWFjaChhcnIsIGZ1bmN0aW9uICh4KSB7XG4gICAgICAgICAgICBpdGVyYXRvcih4LCBvbmx5X29uY2UoZG9uZSkgKTtcbiAgICAgICAgfSk7XG4gICAgICAgIGZ1bmN0aW9uIGRvbmUoZXJyKSB7XG4gICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgICBjYWxsYmFjayA9IGZ1bmN0aW9uICgpIHt9O1xuICAgICAgICAgIH1cbiAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgY29tcGxldGVkICs9IDE7XG4gICAgICAgICAgICAgIGlmIChjb21wbGV0ZWQgPj0gYXJyLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgY2FsbGJhY2soKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH07XG4gICAgYXN5bmMuZm9yRWFjaCA9IGFzeW5jLmVhY2g7XG5cbiAgICBhc3luYy5lYWNoU2VyaWVzID0gZnVuY3Rpb24gKGFyciwgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgIGNhbGxiYWNrID0gY2FsbGJhY2sgfHwgZnVuY3Rpb24gKCkge307XG4gICAgICAgIGlmICghYXJyLmxlbmd0aCkge1xuICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKCk7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIGNvbXBsZXRlZCA9IDA7XG4gICAgICAgIHZhciBpdGVyYXRlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgaXRlcmF0b3IoYXJyW2NvbXBsZXRlZF0sIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrID0gZnVuY3Rpb24gKCkge307XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBjb21wbGV0ZWQgKz0gMTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNvbXBsZXRlZCA+PSBhcnIubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgaXRlcmF0ZSgpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH07XG4gICAgICAgIGl0ZXJhdGUoKTtcbiAgICB9O1xuICAgIGFzeW5jLmZvckVhY2hTZXJpZXMgPSBhc3luYy5lYWNoU2VyaWVzO1xuXG4gICAgYXN5bmMuZWFjaExpbWl0ID0gZnVuY3Rpb24gKGFyciwgbGltaXQsIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICB2YXIgZm4gPSBfZWFjaExpbWl0KGxpbWl0KTtcbiAgICAgICAgZm4uYXBwbHkobnVsbCwgW2FyciwgaXRlcmF0b3IsIGNhbGxiYWNrXSk7XG4gICAgfTtcbiAgICBhc3luYy5mb3JFYWNoTGltaXQgPSBhc3luYy5lYWNoTGltaXQ7XG5cbiAgICB2YXIgX2VhY2hMaW1pdCA9IGZ1bmN0aW9uIChsaW1pdCkge1xuXG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAoYXJyLCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIGNhbGxiYWNrID0gY2FsbGJhY2sgfHwgZnVuY3Rpb24gKCkge307XG4gICAgICAgICAgICBpZiAoIWFyci5sZW5ndGggfHwgbGltaXQgPD0gMCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBjYWxsYmFjaygpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdmFyIGNvbXBsZXRlZCA9IDA7XG4gICAgICAgICAgICB2YXIgc3RhcnRlZCA9IDA7XG4gICAgICAgICAgICB2YXIgcnVubmluZyA9IDA7XG5cbiAgICAgICAgICAgIChmdW5jdGlvbiByZXBsZW5pc2ggKCkge1xuICAgICAgICAgICAgICAgIGlmIChjb21wbGV0ZWQgPj0gYXJyLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gY2FsbGJhY2soKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB3aGlsZSAocnVubmluZyA8IGxpbWl0ICYmIHN0YXJ0ZWQgPCBhcnIubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgIHN0YXJ0ZWQgKz0gMTtcbiAgICAgICAgICAgICAgICAgICAgcnVubmluZyArPSAxO1xuICAgICAgICAgICAgICAgICAgICBpdGVyYXRvcihhcnJbc3RhcnRlZCAtIDFdLCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayA9IGZ1bmN0aW9uICgpIHt9O1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcGxldGVkICs9IDE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcnVubmluZyAtPSAxO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb21wbGV0ZWQgPj0gYXJyLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVwbGVuaXNoKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KSgpO1xuICAgICAgICB9O1xuICAgIH07XG5cblxuICAgIHZhciBkb1BhcmFsbGVsID0gZnVuY3Rpb24gKGZuKSB7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7XG4gICAgICAgICAgICByZXR1cm4gZm4uYXBwbHkobnVsbCwgW2FzeW5jLmVhY2hdLmNvbmNhdChhcmdzKSk7XG4gICAgICAgIH07XG4gICAgfTtcbiAgICB2YXIgZG9QYXJhbGxlbExpbWl0ID0gZnVuY3Rpb24obGltaXQsIGZuKSB7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7XG4gICAgICAgICAgICByZXR1cm4gZm4uYXBwbHkobnVsbCwgW19lYWNoTGltaXQobGltaXQpXS5jb25jYXQoYXJncykpO1xuICAgICAgICB9O1xuICAgIH07XG4gICAgdmFyIGRvU2VyaWVzID0gZnVuY3Rpb24gKGZuKSB7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7XG4gICAgICAgICAgICByZXR1cm4gZm4uYXBwbHkobnVsbCwgW2FzeW5jLmVhY2hTZXJpZXNdLmNvbmNhdChhcmdzKSk7XG4gICAgICAgIH07XG4gICAgfTtcblxuXG4gICAgdmFyIF9hc3luY01hcCA9IGZ1bmN0aW9uIChlYWNoZm4sIGFyciwgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgIGFyciA9IF9tYXAoYXJyLCBmdW5jdGlvbiAoeCwgaSkge1xuICAgICAgICAgICAgcmV0dXJuIHtpbmRleDogaSwgdmFsdWU6IHh9O1xuICAgICAgICB9KTtcbiAgICAgICAgaWYgKCFjYWxsYmFjaykge1xuICAgICAgICAgICAgZWFjaGZuKGFyciwgZnVuY3Rpb24gKHgsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICAgICAgaXRlcmF0b3IoeC52YWx1ZSwgZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB2YXIgcmVzdWx0cyA9IFtdO1xuICAgICAgICAgICAgZWFjaGZuKGFyciwgZnVuY3Rpb24gKHgsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICAgICAgaXRlcmF0b3IoeC52YWx1ZSwgZnVuY3Rpb24gKGVyciwgdikge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHRzW3guaW5kZXhdID0gdjtcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0sIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnIsIHJlc3VsdHMpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIGFzeW5jLm1hcCA9IGRvUGFyYWxsZWwoX2FzeW5jTWFwKTtcbiAgICBhc3luYy5tYXBTZXJpZXMgPSBkb1NlcmllcyhfYXN5bmNNYXApO1xuICAgIGFzeW5jLm1hcExpbWl0ID0gZnVuY3Rpb24gKGFyciwgbGltaXQsIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICByZXR1cm4gX21hcExpbWl0KGxpbWl0KShhcnIsIGl0ZXJhdG9yLCBjYWxsYmFjayk7XG4gICAgfTtcblxuICAgIHZhciBfbWFwTGltaXQgPSBmdW5jdGlvbihsaW1pdCkge1xuICAgICAgICByZXR1cm4gZG9QYXJhbGxlbExpbWl0KGxpbWl0LCBfYXN5bmNNYXApO1xuICAgIH07XG5cbiAgICAvLyByZWR1Y2Ugb25seSBoYXMgYSBzZXJpZXMgdmVyc2lvbiwgYXMgZG9pbmcgcmVkdWNlIGluIHBhcmFsbGVsIHdvbid0XG4gICAgLy8gd29yayBpbiBtYW55IHNpdHVhdGlvbnMuXG4gICAgYXN5bmMucmVkdWNlID0gZnVuY3Rpb24gKGFyciwgbWVtbywgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgIGFzeW5jLmVhY2hTZXJpZXMoYXJyLCBmdW5jdGlvbiAoeCwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIGl0ZXJhdG9yKG1lbW8sIHgsIGZ1bmN0aW9uIChlcnIsIHYpIHtcbiAgICAgICAgICAgICAgICBtZW1vID0gdjtcbiAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgIGNhbGxiYWNrKGVyciwgbWVtbyk7XG4gICAgICAgIH0pO1xuICAgIH07XG4gICAgLy8gaW5qZWN0IGFsaWFzXG4gICAgYXN5bmMuaW5qZWN0ID0gYXN5bmMucmVkdWNlO1xuICAgIC8vIGZvbGRsIGFsaWFzXG4gICAgYXN5bmMuZm9sZGwgPSBhc3luYy5yZWR1Y2U7XG5cbiAgICBhc3luYy5yZWR1Y2VSaWdodCA9IGZ1bmN0aW9uIChhcnIsIG1lbW8sIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICB2YXIgcmV2ZXJzZWQgPSBfbWFwKGFyciwgZnVuY3Rpb24gKHgpIHtcbiAgICAgICAgICAgIHJldHVybiB4O1xuICAgICAgICB9KS5yZXZlcnNlKCk7XG4gICAgICAgIGFzeW5jLnJlZHVjZShyZXZlcnNlZCwgbWVtbywgaXRlcmF0b3IsIGNhbGxiYWNrKTtcbiAgICB9O1xuICAgIC8vIGZvbGRyIGFsaWFzXG4gICAgYXN5bmMuZm9sZHIgPSBhc3luYy5yZWR1Y2VSaWdodDtcblxuICAgIHZhciBfZmlsdGVyID0gZnVuY3Rpb24gKGVhY2hmbiwgYXJyLCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgdmFyIHJlc3VsdHMgPSBbXTtcbiAgICAgICAgYXJyID0gX21hcChhcnIsIGZ1bmN0aW9uICh4LCBpKSB7XG4gICAgICAgICAgICByZXR1cm4ge2luZGV4OiBpLCB2YWx1ZTogeH07XG4gICAgICAgIH0pO1xuICAgICAgICBlYWNoZm4oYXJyLCBmdW5jdGlvbiAoeCwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIGl0ZXJhdG9yKHgudmFsdWUsIGZ1bmN0aW9uICh2KSB7XG4gICAgICAgICAgICAgICAgaWYgKHYpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0cy5wdXNoKHgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgIGNhbGxiYWNrKF9tYXAocmVzdWx0cy5zb3J0KGZ1bmN0aW9uIChhLCBiKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGEuaW5kZXggLSBiLmluZGV4O1xuICAgICAgICAgICAgfSksIGZ1bmN0aW9uICh4KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHgudmFsdWU7XG4gICAgICAgICAgICB9KSk7XG4gICAgICAgIH0pO1xuICAgIH07XG4gICAgYXN5bmMuZmlsdGVyID0gZG9QYXJhbGxlbChfZmlsdGVyKTtcbiAgICBhc3luYy5maWx0ZXJTZXJpZXMgPSBkb1NlcmllcyhfZmlsdGVyKTtcbiAgICAvLyBzZWxlY3QgYWxpYXNcbiAgICBhc3luYy5zZWxlY3QgPSBhc3luYy5maWx0ZXI7XG4gICAgYXN5bmMuc2VsZWN0U2VyaWVzID0gYXN5bmMuZmlsdGVyU2VyaWVzO1xuXG4gICAgdmFyIF9yZWplY3QgPSBmdW5jdGlvbiAoZWFjaGZuLCBhcnIsIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICB2YXIgcmVzdWx0cyA9IFtdO1xuICAgICAgICBhcnIgPSBfbWFwKGFyciwgZnVuY3Rpb24gKHgsIGkpIHtcbiAgICAgICAgICAgIHJldHVybiB7aW5kZXg6IGksIHZhbHVlOiB4fTtcbiAgICAgICAgfSk7XG4gICAgICAgIGVhY2hmbihhcnIsIGZ1bmN0aW9uICh4LCBjYWxsYmFjaykge1xuICAgICAgICAgICAgaXRlcmF0b3IoeC52YWx1ZSwgZnVuY3Rpb24gKHYpIHtcbiAgICAgICAgICAgICAgICBpZiAoIXYpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0cy5wdXNoKHgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgIGNhbGxiYWNrKF9tYXAocmVzdWx0cy5zb3J0KGZ1bmN0aW9uIChhLCBiKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGEuaW5kZXggLSBiLmluZGV4O1xuICAgICAgICAgICAgfSksIGZ1bmN0aW9uICh4KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHgudmFsdWU7XG4gICAgICAgICAgICB9KSk7XG4gICAgICAgIH0pO1xuICAgIH07XG4gICAgYXN5bmMucmVqZWN0ID0gZG9QYXJhbGxlbChfcmVqZWN0KTtcbiAgICBhc3luYy5yZWplY3RTZXJpZXMgPSBkb1NlcmllcyhfcmVqZWN0KTtcblxuICAgIHZhciBfZGV0ZWN0ID0gZnVuY3Rpb24gKGVhY2hmbiwgYXJyLCBpdGVyYXRvciwgbWFpbl9jYWxsYmFjaykge1xuICAgICAgICBlYWNoZm4oYXJyLCBmdW5jdGlvbiAoeCwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIGl0ZXJhdG9yKHgsIGZ1bmN0aW9uIChyZXN1bHQpIHtcbiAgICAgICAgICAgICAgICBpZiAocmVzdWx0KSB7XG4gICAgICAgICAgICAgICAgICAgIG1haW5fY2FsbGJhY2soeCk7XG4gICAgICAgICAgICAgICAgICAgIG1haW5fY2FsbGJhY2sgPSBmdW5jdGlvbiAoKSB7fTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgIG1haW5fY2FsbGJhY2soKTtcbiAgICAgICAgfSk7XG4gICAgfTtcbiAgICBhc3luYy5kZXRlY3QgPSBkb1BhcmFsbGVsKF9kZXRlY3QpO1xuICAgIGFzeW5jLmRldGVjdFNlcmllcyA9IGRvU2VyaWVzKF9kZXRlY3QpO1xuXG4gICAgYXN5bmMuc29tZSA9IGZ1bmN0aW9uIChhcnIsIGl0ZXJhdG9yLCBtYWluX2NhbGxiYWNrKSB7XG4gICAgICAgIGFzeW5jLmVhY2goYXJyLCBmdW5jdGlvbiAoeCwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIGl0ZXJhdG9yKHgsIGZ1bmN0aW9uICh2KSB7XG4gICAgICAgICAgICAgICAgaWYgKHYpIHtcbiAgICAgICAgICAgICAgICAgICAgbWFpbl9jYWxsYmFjayh0cnVlKTtcbiAgICAgICAgICAgICAgICAgICAgbWFpbl9jYWxsYmFjayA9IGZ1bmN0aW9uICgpIHt9O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgIG1haW5fY2FsbGJhY2soZmFsc2UpO1xuICAgICAgICB9KTtcbiAgICB9O1xuICAgIC8vIGFueSBhbGlhc1xuICAgIGFzeW5jLmFueSA9IGFzeW5jLnNvbWU7XG5cbiAgICBhc3luYy5ldmVyeSA9IGZ1bmN0aW9uIChhcnIsIGl0ZXJhdG9yLCBtYWluX2NhbGxiYWNrKSB7XG4gICAgICAgIGFzeW5jLmVhY2goYXJyLCBmdW5jdGlvbiAoeCwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIGl0ZXJhdG9yKHgsIGZ1bmN0aW9uICh2KSB7XG4gICAgICAgICAgICAgICAgaWYgKCF2KSB7XG4gICAgICAgICAgICAgICAgICAgIG1haW5fY2FsbGJhY2soZmFsc2UpO1xuICAgICAgICAgICAgICAgICAgICBtYWluX2NhbGxiYWNrID0gZnVuY3Rpb24gKCkge307XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhbGxiYWNrKCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSwgZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgbWFpbl9jYWxsYmFjayh0cnVlKTtcbiAgICAgICAgfSk7XG4gICAgfTtcbiAgICAvLyBhbGwgYWxpYXNcbiAgICBhc3luYy5hbGwgPSBhc3luYy5ldmVyeTtcblxuICAgIGFzeW5jLnNvcnRCeSA9IGZ1bmN0aW9uIChhcnIsIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICBhc3luYy5tYXAoYXJyLCBmdW5jdGlvbiAoeCwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIGl0ZXJhdG9yKHgsIGZ1bmN0aW9uIChlcnIsIGNyaXRlcmlhKSB7XG4gICAgICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2sobnVsbCwge3ZhbHVlOiB4LCBjcml0ZXJpYTogY3JpdGVyaWF9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSwgZnVuY3Rpb24gKGVyciwgcmVzdWx0cykge1xuICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAgIHJldHVybiBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgdmFyIGZuID0gZnVuY3Rpb24gKGxlZnQsIHJpZ2h0KSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBhID0gbGVmdC5jcml0ZXJpYSwgYiA9IHJpZ2h0LmNyaXRlcmlhO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYSA8IGIgPyAtMSA6IGEgPiBiID8gMSA6IDA7XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICBjYWxsYmFjayhudWxsLCBfbWFwKHJlc3VsdHMuc29ydChmbiksIGZ1bmN0aW9uICh4KSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB4LnZhbHVlO1xuICAgICAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfTtcblxuICAgIGFzeW5jLmF1dG8gPSBmdW5jdGlvbiAodGFza3MsIGNhbGxiYWNrKSB7XG4gICAgICAgIGNhbGxiYWNrID0gY2FsbGJhY2sgfHwgZnVuY3Rpb24gKCkge307XG4gICAgICAgIHZhciBrZXlzID0gX2tleXModGFza3MpO1xuICAgICAgICB2YXIgcmVtYWluaW5nVGFza3MgPSBrZXlzLmxlbmd0aFxuICAgICAgICBpZiAoIXJlbWFpbmluZ1Rhc2tzKSB7XG4gICAgICAgICAgICByZXR1cm4gY2FsbGJhY2soKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciByZXN1bHRzID0ge307XG5cbiAgICAgICAgdmFyIGxpc3RlbmVycyA9IFtdO1xuICAgICAgICB2YXIgYWRkTGlzdGVuZXIgPSBmdW5jdGlvbiAoZm4pIHtcbiAgICAgICAgICAgIGxpc3RlbmVycy51bnNoaWZ0KGZuKTtcbiAgICAgICAgfTtcbiAgICAgICAgdmFyIHJlbW92ZUxpc3RlbmVyID0gZnVuY3Rpb24gKGZuKSB7XG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxpc3RlbmVycy5sZW5ndGg7IGkgKz0gMSkge1xuICAgICAgICAgICAgICAgIGlmIChsaXN0ZW5lcnNbaV0gPT09IGZuKSB7XG4gICAgICAgICAgICAgICAgICAgIGxpc3RlbmVycy5zcGxpY2UoaSwgMSk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIHZhciB0YXNrQ29tcGxldGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZW1haW5pbmdUYXNrcy0tXG4gICAgICAgICAgICBfZWFjaChsaXN0ZW5lcnMuc2xpY2UoMCksIGZ1bmN0aW9uIChmbikge1xuICAgICAgICAgICAgICAgIGZuKCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfTtcblxuICAgICAgICBhZGRMaXN0ZW5lcihmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBpZiAoIXJlbWFpbmluZ1Rhc2tzKSB7XG4gICAgICAgICAgICAgICAgdmFyIHRoZUNhbGxiYWNrID0gY2FsbGJhY2s7XG4gICAgICAgICAgICAgICAgLy8gcHJldmVudCBmaW5hbCBjYWxsYmFjayBmcm9tIGNhbGxpbmcgaXRzZWxmIGlmIGl0IGVycm9yc1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrID0gZnVuY3Rpb24gKCkge307XG5cbiAgICAgICAgICAgICAgICB0aGVDYWxsYmFjayhudWxsLCByZXN1bHRzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgX2VhY2goa2V5cywgZnVuY3Rpb24gKGspIHtcbiAgICAgICAgICAgIHZhciB0YXNrID0gX2lzQXJyYXkodGFza3Nba10pID8gdGFza3Nba106IFt0YXNrc1trXV07XG4gICAgICAgICAgICB2YXIgdGFza0NhbGxiYWNrID0gZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgICAgIHZhciBhcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKTtcbiAgICAgICAgICAgICAgICBpZiAoYXJncy5sZW5ndGggPD0gMSkge1xuICAgICAgICAgICAgICAgICAgICBhcmdzID0gYXJnc1swXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAgICAgICB2YXIgc2FmZVJlc3VsdHMgPSB7fTtcbiAgICAgICAgICAgICAgICAgICAgX2VhY2goX2tleXMocmVzdWx0cyksIGZ1bmN0aW9uKHJrZXkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNhZmVSZXN1bHRzW3JrZXldID0gcmVzdWx0c1tya2V5XTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIHNhZmVSZXN1bHRzW2tdID0gYXJncztcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soZXJyLCBzYWZlUmVzdWx0cyk7XG4gICAgICAgICAgICAgICAgICAgIC8vIHN0b3Agc3Vic2VxdWVudCBlcnJvcnMgaGl0dGluZyBjYWxsYmFjayBtdWx0aXBsZSB0aW1lc1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayA9IGZ1bmN0aW9uICgpIHt9O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0c1trXSA9IGFyZ3M7XG4gICAgICAgICAgICAgICAgICAgIGFzeW5jLnNldEltbWVkaWF0ZSh0YXNrQ29tcGxldGUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICB2YXIgcmVxdWlyZXMgPSB0YXNrLnNsaWNlKDAsIE1hdGguYWJzKHRhc2subGVuZ3RoIC0gMSkpIHx8IFtdO1xuICAgICAgICAgICAgdmFyIHJlYWR5ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBfcmVkdWNlKHJlcXVpcmVzLCBmdW5jdGlvbiAoYSwgeCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gKGEgJiYgcmVzdWx0cy5oYXNPd25Qcm9wZXJ0eSh4KSk7XG4gICAgICAgICAgICAgICAgfSwgdHJ1ZSkgJiYgIXJlc3VsdHMuaGFzT3duUHJvcGVydHkoayk7XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgaWYgKHJlYWR5KCkpIHtcbiAgICAgICAgICAgICAgICB0YXNrW3Rhc2subGVuZ3RoIC0gMV0odGFza0NhbGxiYWNrLCByZXN1bHRzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHZhciBsaXN0ZW5lciA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlYWR5KCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlbW92ZUxpc3RlbmVyKGxpc3RlbmVyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRhc2tbdGFzay5sZW5ndGggLSAxXSh0YXNrQ2FsbGJhY2ssIHJlc3VsdHMpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICBhZGRMaXN0ZW5lcihsaXN0ZW5lcik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH07XG5cbiAgICBhc3luYy5yZXRyeSA9IGZ1bmN0aW9uKHRpbWVzLCB0YXNrLCBjYWxsYmFjaykge1xuICAgICAgICB2YXIgREVGQVVMVF9USU1FUyA9IDU7XG4gICAgICAgIHZhciBhdHRlbXB0cyA9IFtdO1xuICAgICAgICAvLyBVc2UgZGVmYXVsdHMgaWYgdGltZXMgbm90IHBhc3NlZFxuICAgICAgICBpZiAodHlwZW9mIHRpbWVzID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICBjYWxsYmFjayA9IHRhc2s7XG4gICAgICAgICAgICB0YXNrID0gdGltZXM7XG4gICAgICAgICAgICB0aW1lcyA9IERFRkFVTFRfVElNRVM7XG4gICAgICAgIH1cbiAgICAgICAgLy8gTWFrZSBzdXJlIHRpbWVzIGlzIGEgbnVtYmVyXG4gICAgICAgIHRpbWVzID0gcGFyc2VJbnQodGltZXMsIDEwKSB8fCBERUZBVUxUX1RJTUVTO1xuICAgICAgICB2YXIgd3JhcHBlZFRhc2sgPSBmdW5jdGlvbih3cmFwcGVkQ2FsbGJhY2ssIHdyYXBwZWRSZXN1bHRzKSB7XG4gICAgICAgICAgICB2YXIgcmV0cnlBdHRlbXB0ID0gZnVuY3Rpb24odGFzaywgZmluYWxBdHRlbXB0KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKHNlcmllc0NhbGxiYWNrKSB7XG4gICAgICAgICAgICAgICAgICAgIHRhc2soZnVuY3Rpb24oZXJyLCByZXN1bHQpe1xuICAgICAgICAgICAgICAgICAgICAgICAgc2VyaWVzQ2FsbGJhY2soIWVyciB8fCBmaW5hbEF0dGVtcHQsIHtlcnI6IGVyciwgcmVzdWx0OiByZXN1bHR9KTtcbiAgICAgICAgICAgICAgICAgICAgfSwgd3JhcHBlZFJlc3VsdHMpO1xuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgd2hpbGUgKHRpbWVzKSB7XG4gICAgICAgICAgICAgICAgYXR0ZW1wdHMucHVzaChyZXRyeUF0dGVtcHQodGFzaywgISh0aW1lcy09MSkpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGFzeW5jLnNlcmllcyhhdHRlbXB0cywgZnVuY3Rpb24oZG9uZSwgZGF0YSl7XG4gICAgICAgICAgICAgICAgZGF0YSA9IGRhdGFbZGF0YS5sZW5ndGggLSAxXTtcbiAgICAgICAgICAgICAgICAod3JhcHBlZENhbGxiYWNrIHx8IGNhbGxiYWNrKShkYXRhLmVyciwgZGF0YS5yZXN1bHQpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gSWYgYSBjYWxsYmFjayBpcyBwYXNzZWQsIHJ1biB0aGlzIGFzIGEgY29udHJvbGwgZmxvd1xuICAgICAgICByZXR1cm4gY2FsbGJhY2sgPyB3cmFwcGVkVGFzaygpIDogd3JhcHBlZFRhc2tcbiAgICB9O1xuXG4gICAgYXN5bmMud2F0ZXJmYWxsID0gZnVuY3Rpb24gKHRhc2tzLCBjYWxsYmFjaykge1xuICAgICAgICBjYWxsYmFjayA9IGNhbGxiYWNrIHx8IGZ1bmN0aW9uICgpIHt9O1xuICAgICAgICBpZiAoIV9pc0FycmF5KHRhc2tzKSkge1xuICAgICAgICAgIHZhciBlcnIgPSBuZXcgRXJyb3IoJ0ZpcnN0IGFyZ3VtZW50IHRvIHdhdGVyZmFsbCBtdXN0IGJlIGFuIGFycmF5IG9mIGZ1bmN0aW9ucycpO1xuICAgICAgICAgIHJldHVybiBjYWxsYmFjayhlcnIpO1xuICAgICAgICB9XG4gICAgICAgIGlmICghdGFza3MubGVuZ3RoKSB7XG4gICAgICAgICAgICByZXR1cm4gY2FsbGJhY2soKTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgd3JhcEl0ZXJhdG9yID0gZnVuY3Rpb24gKGl0ZXJhdG9yKSB7XG4gICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2suYXBwbHkobnVsbCwgYXJndW1lbnRzKTtcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2sgPSBmdW5jdGlvbiAoKSB7fTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBhcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKTtcbiAgICAgICAgICAgICAgICAgICAgdmFyIG5leHQgPSBpdGVyYXRvci5uZXh0KCk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChuZXh0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhcmdzLnB1c2god3JhcEl0ZXJhdG9yKG5leHQpKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3MucHVzaChjYWxsYmFjayk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgYXN5bmMuc2V0SW1tZWRpYXRlKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGl0ZXJhdG9yLmFwcGx5KG51bGwsIGFyZ3MpO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9O1xuICAgICAgICB9O1xuICAgICAgICB3cmFwSXRlcmF0b3IoYXN5bmMuaXRlcmF0b3IodGFza3MpKSgpO1xuICAgIH07XG5cbiAgICB2YXIgX3BhcmFsbGVsID0gZnVuY3Rpb24oZWFjaGZuLCB0YXNrcywgY2FsbGJhY2spIHtcbiAgICAgICAgY2FsbGJhY2sgPSBjYWxsYmFjayB8fCBmdW5jdGlvbiAoKSB7fTtcbiAgICAgICAgaWYgKF9pc0FycmF5KHRhc2tzKSkge1xuICAgICAgICAgICAgZWFjaGZuLm1hcCh0YXNrcywgZnVuY3Rpb24gKGZuLCBjYWxsYmFjaykge1xuICAgICAgICAgICAgICAgIGlmIChmbikge1xuICAgICAgICAgICAgICAgICAgICBmbihmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoYXJncy5sZW5ndGggPD0gMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3MgPSBhcmdzWzBdO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2suY2FsbChudWxsLCBlcnIsIGFyZ3MpO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LCBjYWxsYmFjayk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB2YXIgcmVzdWx0cyA9IHt9O1xuICAgICAgICAgICAgZWFjaGZuLmVhY2goX2tleXModGFza3MpLCBmdW5jdGlvbiAoaywgY2FsbGJhY2spIHtcbiAgICAgICAgICAgICAgICB0YXNrc1trXShmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBhcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGFyZ3MubGVuZ3RoIDw9IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3MgPSBhcmdzWzBdO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdHNba10gPSBhcmdzO1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSwgZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrKGVyciwgcmVzdWx0cyk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH07XG5cbiAgICBhc3luYy5wYXJhbGxlbCA9IGZ1bmN0aW9uICh0YXNrcywgY2FsbGJhY2spIHtcbiAgICAgICAgX3BhcmFsbGVsKHsgbWFwOiBhc3luYy5tYXAsIGVhY2g6IGFzeW5jLmVhY2ggfSwgdGFza3MsIGNhbGxiYWNrKTtcbiAgICB9O1xuXG4gICAgYXN5bmMucGFyYWxsZWxMaW1pdCA9IGZ1bmN0aW9uKHRhc2tzLCBsaW1pdCwgY2FsbGJhY2spIHtcbiAgICAgICAgX3BhcmFsbGVsKHsgbWFwOiBfbWFwTGltaXQobGltaXQpLCBlYWNoOiBfZWFjaExpbWl0KGxpbWl0KSB9LCB0YXNrcywgY2FsbGJhY2spO1xuICAgIH07XG5cbiAgICBhc3luYy5zZXJpZXMgPSBmdW5jdGlvbiAodGFza3MsIGNhbGxiYWNrKSB7XG4gICAgICAgIGNhbGxiYWNrID0gY2FsbGJhY2sgfHwgZnVuY3Rpb24gKCkge307XG4gICAgICAgIGlmIChfaXNBcnJheSh0YXNrcykpIHtcbiAgICAgICAgICAgIGFzeW5jLm1hcFNlcmllcyh0YXNrcywgZnVuY3Rpb24gKGZuLCBjYWxsYmFjaykge1xuICAgICAgICAgICAgICAgIGlmIChmbikge1xuICAgICAgICAgICAgICAgICAgICBmbihmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoYXJncy5sZW5ndGggPD0gMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3MgPSBhcmdzWzBdO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2suY2FsbChudWxsLCBlcnIsIGFyZ3MpO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LCBjYWxsYmFjayk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB2YXIgcmVzdWx0cyA9IHt9O1xuICAgICAgICAgICAgYXN5bmMuZWFjaFNlcmllcyhfa2V5cyh0YXNrcyksIGZ1bmN0aW9uIChrLCBjYWxsYmFjaykge1xuICAgICAgICAgICAgICAgIHRhc2tzW2tdKGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGFyZ3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsIDEpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoYXJncy5sZW5ndGggPD0gMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgYXJncyA9IGFyZ3NbMF07XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0c1trXSA9IGFyZ3M7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9LCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2soZXJyLCByZXN1bHRzKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIGFzeW5jLml0ZXJhdG9yID0gZnVuY3Rpb24gKHRhc2tzKSB7XG4gICAgICAgIHZhciBtYWtlQ2FsbGJhY2sgPSBmdW5jdGlvbiAoaW5kZXgpIHtcbiAgICAgICAgICAgIHZhciBmbiA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBpZiAodGFza3MubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgIHRhc2tzW2luZGV4XS5hcHBseShudWxsLCBhcmd1bWVudHMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gZm4ubmV4dCgpO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGZuLm5leHQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIChpbmRleCA8IHRhc2tzLmxlbmd0aCAtIDEpID8gbWFrZUNhbGxiYWNrKGluZGV4ICsgMSk6IG51bGw7XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgcmV0dXJuIGZuO1xuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gbWFrZUNhbGxiYWNrKDApO1xuICAgIH07XG5cbiAgICBhc3luYy5hcHBseSA9IGZ1bmN0aW9uIChmbikge1xuICAgICAgICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMSk7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gZm4uYXBwbHkoXG4gICAgICAgICAgICAgICAgbnVsbCwgYXJncy5jb25jYXQoQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKSlcbiAgICAgICAgICAgICk7XG4gICAgICAgIH07XG4gICAgfTtcblxuICAgIHZhciBfY29uY2F0ID0gZnVuY3Rpb24gKGVhY2hmbiwgYXJyLCBmbiwgY2FsbGJhY2spIHtcbiAgICAgICAgdmFyIHIgPSBbXTtcbiAgICAgICAgZWFjaGZuKGFyciwgZnVuY3Rpb24gKHgsIGNiKSB7XG4gICAgICAgICAgICBmbih4LCBmdW5jdGlvbiAoZXJyLCB5KSB7XG4gICAgICAgICAgICAgICAgciA9IHIuY29uY2F0KHkgfHwgW10pO1xuICAgICAgICAgICAgICAgIGNiKGVycik7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSwgZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgY2FsbGJhY2soZXJyLCByKTtcbiAgICAgICAgfSk7XG4gICAgfTtcbiAgICBhc3luYy5jb25jYXQgPSBkb1BhcmFsbGVsKF9jb25jYXQpO1xuICAgIGFzeW5jLmNvbmNhdFNlcmllcyA9IGRvU2VyaWVzKF9jb25jYXQpO1xuXG4gICAgYXN5bmMud2hpbHN0ID0gZnVuY3Rpb24gKHRlc3QsIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICBpZiAodGVzdCgpKSB7XG4gICAgICAgICAgICBpdGVyYXRvcihmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYXN5bmMud2hpbHN0KHRlc3QsIGl0ZXJhdG9yLCBjYWxsYmFjayk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGNhbGxiYWNrKCk7XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgYXN5bmMuZG9XaGlsc3QgPSBmdW5jdGlvbiAoaXRlcmF0b3IsIHRlc3QsIGNhbGxiYWNrKSB7XG4gICAgICAgIGl0ZXJhdG9yKGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHZhciBhcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKTtcbiAgICAgICAgICAgIGlmICh0ZXN0LmFwcGx5KG51bGwsIGFyZ3MpKSB7XG4gICAgICAgICAgICAgICAgYXN5bmMuZG9XaGlsc3QoaXRlcmF0b3IsIHRlc3QsIGNhbGxiYWNrKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH07XG5cbiAgICBhc3luYy51bnRpbCA9IGZ1bmN0aW9uICh0ZXN0LCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgaWYgKCF0ZXN0KCkpIHtcbiAgICAgICAgICAgIGl0ZXJhdG9yKGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBhc3luYy51bnRpbCh0ZXN0LCBpdGVyYXRvciwgY2FsbGJhY2spO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIGFzeW5jLmRvVW50aWwgPSBmdW5jdGlvbiAoaXRlcmF0b3IsIHRlc3QsIGNhbGxiYWNrKSB7XG4gICAgICAgIGl0ZXJhdG9yKGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHZhciBhcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKTtcbiAgICAgICAgICAgIGlmICghdGVzdC5hcHBseShudWxsLCBhcmdzKSkge1xuICAgICAgICAgICAgICAgIGFzeW5jLmRvVW50aWwoaXRlcmF0b3IsIHRlc3QsIGNhbGxiYWNrKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH07XG5cbiAgICBhc3luYy5xdWV1ZSA9IGZ1bmN0aW9uICh3b3JrZXIsIGNvbmN1cnJlbmN5KSB7XG4gICAgICAgIGlmIChjb25jdXJyZW5jeSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBjb25jdXJyZW5jeSA9IDE7XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gX2luc2VydChxLCBkYXRhLCBwb3MsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgaWYgKCFxLnN0YXJ0ZWQpe1xuICAgICAgICAgICAgcS5zdGFydGVkID0gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKCFfaXNBcnJheShkYXRhKSkge1xuICAgICAgICAgICAgICBkYXRhID0gW2RhdGFdO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZihkYXRhLmxlbmd0aCA9PSAwKSB7XG4gICAgICAgICAgICAgLy8gY2FsbCBkcmFpbiBpbW1lZGlhdGVseSBpZiB0aGVyZSBhcmUgbm8gdGFza3NcbiAgICAgICAgICAgICByZXR1cm4gYXN5bmMuc2V0SW1tZWRpYXRlKGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgICBpZiAocS5kcmFpbikge1xuICAgICAgICAgICAgICAgICAgICAgcS5kcmFpbigpO1xuICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIF9lYWNoKGRhdGEsIGZ1bmN0aW9uKHRhc2spIHtcbiAgICAgICAgICAgICAgdmFyIGl0ZW0gPSB7XG4gICAgICAgICAgICAgICAgICBkYXRhOiB0YXNrLFxuICAgICAgICAgICAgICAgICAgY2FsbGJhY2s6IHR5cGVvZiBjYWxsYmFjayA9PT0gJ2Z1bmN0aW9uJyA/IGNhbGxiYWNrIDogbnVsbFxuICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgIGlmIChwb3MpIHtcbiAgICAgICAgICAgICAgICBxLnRhc2tzLnVuc2hpZnQoaXRlbSk7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcS50YXNrcy5wdXNoKGl0ZW0pO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgaWYgKHEuc2F0dXJhdGVkICYmIHEudGFza3MubGVuZ3RoID09PSBxLmNvbmN1cnJlbmN5KSB7XG4gICAgICAgICAgICAgICAgICBxLnNhdHVyYXRlZCgpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGFzeW5jLnNldEltbWVkaWF0ZShxLnByb2Nlc3MpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIHdvcmtlcnMgPSAwO1xuICAgICAgICB2YXIgcSA9IHtcbiAgICAgICAgICAgIHRhc2tzOiBbXSxcbiAgICAgICAgICAgIGNvbmN1cnJlbmN5OiBjb25jdXJyZW5jeSxcbiAgICAgICAgICAgIHNhdHVyYXRlZDogbnVsbCxcbiAgICAgICAgICAgIGVtcHR5OiBudWxsLFxuICAgICAgICAgICAgZHJhaW46IG51bGwsXG4gICAgICAgICAgICBzdGFydGVkOiBmYWxzZSxcbiAgICAgICAgICAgIHBhdXNlZDogZmFsc2UsXG4gICAgICAgICAgICBwdXNoOiBmdW5jdGlvbiAoZGF0YSwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgICAgX2luc2VydChxLCBkYXRhLCBmYWxzZSwgY2FsbGJhY2spO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGtpbGw6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgcS5kcmFpbiA9IG51bGw7XG4gICAgICAgICAgICAgIHEudGFza3MgPSBbXTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB1bnNoaWZ0OiBmdW5jdGlvbiAoZGF0YSwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgICAgX2luc2VydChxLCBkYXRhLCB0cnVlLCBjYWxsYmFjayk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcHJvY2VzczogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGlmICghcS5wYXVzZWQgJiYgd29ya2VycyA8IHEuY29uY3VycmVuY3kgJiYgcS50YXNrcy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHRhc2sgPSBxLnRhc2tzLnNoaWZ0KCk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChxLmVtcHR5ICYmIHEudGFza3MubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBxLmVtcHR5KCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgd29ya2VycyArPSAxO1xuICAgICAgICAgICAgICAgICAgICB2YXIgbmV4dCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHdvcmtlcnMgLT0gMTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0YXNrLmNhbGxiYWNrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFzay5jYWxsYmFjay5hcHBseSh0YXNrLCBhcmd1bWVudHMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHEuZHJhaW4gJiYgcS50YXNrcy5sZW5ndGggKyB3b3JrZXJzID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcS5kcmFpbigpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgcS5wcm9jZXNzKCk7XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIHZhciBjYiA9IG9ubHlfb25jZShuZXh0KTtcbiAgICAgICAgICAgICAgICAgICAgd29ya2VyKHRhc2suZGF0YSwgY2IpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBsZW5ndGg6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcS50YXNrcy5sZW5ndGg7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcnVubmluZzogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB3b3JrZXJzO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGlkbGU6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBxLnRhc2tzLmxlbmd0aCArIHdvcmtlcnMgPT09IDA7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcGF1c2U6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBpZiAocS5wYXVzZWQgPT09IHRydWUpIHsgcmV0dXJuOyB9XG4gICAgICAgICAgICAgICAgcS5wYXVzZWQgPSB0cnVlO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHJlc3VtZTogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGlmIChxLnBhdXNlZCA9PT0gZmFsc2UpIHsgcmV0dXJuOyB9XG4gICAgICAgICAgICAgICAgcS5wYXVzZWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAvLyBOZWVkIHRvIGNhbGwgcS5wcm9jZXNzIG9uY2UgcGVyIGNvbmN1cnJlbnRcbiAgICAgICAgICAgICAgICAvLyB3b3JrZXIgdG8gcHJlc2VydmUgZnVsbCBjb25jdXJyZW5jeSBhZnRlciBwYXVzZVxuICAgICAgICAgICAgICAgIGZvciAodmFyIHcgPSAxOyB3IDw9IHEuY29uY3VycmVuY3k7IHcrKykge1xuICAgICAgICAgICAgICAgICAgICBhc3luYy5zZXRJbW1lZGlhdGUocS5wcm9jZXNzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiBxO1xuICAgIH07XG5cbiAgICBhc3luYy5wcmlvcml0eVF1ZXVlID0gZnVuY3Rpb24gKHdvcmtlciwgY29uY3VycmVuY3kpIHtcblxuICAgICAgICBmdW5jdGlvbiBfY29tcGFyZVRhc2tzKGEsIGIpe1xuICAgICAgICAgIHJldHVybiBhLnByaW9yaXR5IC0gYi5wcmlvcml0eTtcbiAgICAgICAgfTtcblxuICAgICAgICBmdW5jdGlvbiBfYmluYXJ5U2VhcmNoKHNlcXVlbmNlLCBpdGVtLCBjb21wYXJlKSB7XG4gICAgICAgICAgdmFyIGJlZyA9IC0xLFxuICAgICAgICAgICAgICBlbmQgPSBzZXF1ZW5jZS5sZW5ndGggLSAxO1xuICAgICAgICAgIHdoaWxlIChiZWcgPCBlbmQpIHtcbiAgICAgICAgICAgIHZhciBtaWQgPSBiZWcgKyAoKGVuZCAtIGJlZyArIDEpID4+PiAxKTtcbiAgICAgICAgICAgIGlmIChjb21wYXJlKGl0ZW0sIHNlcXVlbmNlW21pZF0pID49IDApIHtcbiAgICAgICAgICAgICAgYmVnID0gbWlkO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgZW5kID0gbWlkIC0gMTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIGJlZztcbiAgICAgICAgfVxuXG4gICAgICAgIGZ1bmN0aW9uIF9pbnNlcnQocSwgZGF0YSwgcHJpb3JpdHksIGNhbGxiYWNrKSB7XG4gICAgICAgICAgaWYgKCFxLnN0YXJ0ZWQpe1xuICAgICAgICAgICAgcS5zdGFydGVkID0gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKCFfaXNBcnJheShkYXRhKSkge1xuICAgICAgICAgICAgICBkYXRhID0gW2RhdGFdO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZihkYXRhLmxlbmd0aCA9PSAwKSB7XG4gICAgICAgICAgICAgLy8gY2FsbCBkcmFpbiBpbW1lZGlhdGVseSBpZiB0aGVyZSBhcmUgbm8gdGFza3NcbiAgICAgICAgICAgICByZXR1cm4gYXN5bmMuc2V0SW1tZWRpYXRlKGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgICBpZiAocS5kcmFpbikge1xuICAgICAgICAgICAgICAgICAgICAgcS5kcmFpbigpO1xuICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIF9lYWNoKGRhdGEsIGZ1bmN0aW9uKHRhc2spIHtcbiAgICAgICAgICAgICAgdmFyIGl0ZW0gPSB7XG4gICAgICAgICAgICAgICAgICBkYXRhOiB0YXNrLFxuICAgICAgICAgICAgICAgICAgcHJpb3JpdHk6IHByaW9yaXR5LFxuICAgICAgICAgICAgICAgICAgY2FsbGJhY2s6IHR5cGVvZiBjYWxsYmFjayA9PT0gJ2Z1bmN0aW9uJyA/IGNhbGxiYWNrIDogbnVsbFxuICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgIHEudGFza3Muc3BsaWNlKF9iaW5hcnlTZWFyY2gocS50YXNrcywgaXRlbSwgX2NvbXBhcmVUYXNrcykgKyAxLCAwLCBpdGVtKTtcblxuICAgICAgICAgICAgICBpZiAocS5zYXR1cmF0ZWQgJiYgcS50YXNrcy5sZW5ndGggPT09IHEuY29uY3VycmVuY3kpIHtcbiAgICAgICAgICAgICAgICAgIHEuc2F0dXJhdGVkKCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgYXN5bmMuc2V0SW1tZWRpYXRlKHEucHJvY2Vzcyk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBTdGFydCB3aXRoIGEgbm9ybWFsIHF1ZXVlXG4gICAgICAgIHZhciBxID0gYXN5bmMucXVldWUod29ya2VyLCBjb25jdXJyZW5jeSk7XG5cbiAgICAgICAgLy8gT3ZlcnJpZGUgcHVzaCB0byBhY2NlcHQgc2Vjb25kIHBhcmFtZXRlciByZXByZXNlbnRpbmcgcHJpb3JpdHlcbiAgICAgICAgcS5wdXNoID0gZnVuY3Rpb24gKGRhdGEsIHByaW9yaXR5LCBjYWxsYmFjaykge1xuICAgICAgICAgIF9pbnNlcnQocSwgZGF0YSwgcHJpb3JpdHksIGNhbGxiYWNrKTtcbiAgICAgICAgfTtcblxuICAgICAgICAvLyBSZW1vdmUgdW5zaGlmdCBmdW5jdGlvblxuICAgICAgICBkZWxldGUgcS51bnNoaWZ0O1xuXG4gICAgICAgIHJldHVybiBxO1xuICAgIH07XG5cbiAgICBhc3luYy5jYXJnbyA9IGZ1bmN0aW9uICh3b3JrZXIsIHBheWxvYWQpIHtcbiAgICAgICAgdmFyIHdvcmtpbmcgICAgID0gZmFsc2UsXG4gICAgICAgICAgICB0YXNrcyAgICAgICA9IFtdO1xuXG4gICAgICAgIHZhciBjYXJnbyA9IHtcbiAgICAgICAgICAgIHRhc2tzOiB0YXNrcyxcbiAgICAgICAgICAgIHBheWxvYWQ6IHBheWxvYWQsXG4gICAgICAgICAgICBzYXR1cmF0ZWQ6IG51bGwsXG4gICAgICAgICAgICBlbXB0eTogbnVsbCxcbiAgICAgICAgICAgIGRyYWluOiBudWxsLFxuICAgICAgICAgICAgZHJhaW5lZDogdHJ1ZSxcbiAgICAgICAgICAgIHB1c2g6IGZ1bmN0aW9uIChkYXRhLCBjYWxsYmFjaykge1xuICAgICAgICAgICAgICAgIGlmICghX2lzQXJyYXkoZGF0YSkpIHtcbiAgICAgICAgICAgICAgICAgICAgZGF0YSA9IFtkYXRhXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgX2VhY2goZGF0YSwgZnVuY3Rpb24odGFzaykge1xuICAgICAgICAgICAgICAgICAgICB0YXNrcy5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGE6IHRhc2ssXG4gICAgICAgICAgICAgICAgICAgICAgICBjYWxsYmFjazogdHlwZW9mIGNhbGxiYWNrID09PSAnZnVuY3Rpb24nID8gY2FsbGJhY2sgOiBudWxsXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICBjYXJnby5kcmFpbmVkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIGlmIChjYXJnby5zYXR1cmF0ZWQgJiYgdGFza3MubGVuZ3RoID09PSBwYXlsb2FkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjYXJnby5zYXR1cmF0ZWQoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGFzeW5jLnNldEltbWVkaWF0ZShjYXJnby5wcm9jZXNzKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBwcm9jZXNzOiBmdW5jdGlvbiBwcm9jZXNzKCkge1xuICAgICAgICAgICAgICAgIGlmICh3b3JraW5nKSByZXR1cm47XG4gICAgICAgICAgICAgICAgaWYgKHRhc2tzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICBpZihjYXJnby5kcmFpbiAmJiAhY2FyZ28uZHJhaW5lZCkgY2FyZ28uZHJhaW4oKTtcbiAgICAgICAgICAgICAgICAgICAgY2FyZ28uZHJhaW5lZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB2YXIgdHMgPSB0eXBlb2YgcGF5bG9hZCA9PT0gJ251bWJlcidcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IHRhc2tzLnNwbGljZSgwLCBwYXlsb2FkKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogdGFza3Muc3BsaWNlKDAsIHRhc2tzLmxlbmd0aCk7XG5cbiAgICAgICAgICAgICAgICB2YXIgZHMgPSBfbWFwKHRzLCBmdW5jdGlvbiAodGFzaykge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGFzay5kYXRhO1xuICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgaWYoY2FyZ28uZW1wdHkpIGNhcmdvLmVtcHR5KCk7XG4gICAgICAgICAgICAgICAgd29ya2luZyA9IHRydWU7XG4gICAgICAgICAgICAgICAgd29ya2VyKGRzLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIHdvcmtpbmcgPSBmYWxzZTtcblxuICAgICAgICAgICAgICAgICAgICB2YXIgYXJncyA9IGFyZ3VtZW50cztcbiAgICAgICAgICAgICAgICAgICAgX2VhY2godHMsIGZ1bmN0aW9uIChkYXRhKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZGF0YS5jYWxsYmFjaykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEuY2FsbGJhY2suYXBwbHkobnVsbCwgYXJncyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgICAgIHByb2Nlc3MoKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBsZW5ndGg6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGFza3MubGVuZ3RoO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHJ1bm5pbmc6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gd29ya2luZztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIGNhcmdvO1xuICAgIH07XG5cbiAgICB2YXIgX2NvbnNvbGVfZm4gPSBmdW5jdGlvbiAobmFtZSkge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKGZuKSB7XG4gICAgICAgICAgICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMSk7XG4gICAgICAgICAgICBmbi5hcHBseShudWxsLCBhcmdzLmNvbmNhdChbZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgICAgIHZhciBhcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKTtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGNvbnNvbGUgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb25zb2xlLmVycm9yKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihlcnIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKGNvbnNvbGVbbmFtZV0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIF9lYWNoKGFyZ3MsIGZ1bmN0aW9uICh4KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZVtuYW1lXSh4KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfV0pKTtcbiAgICAgICAgfTtcbiAgICB9O1xuICAgIGFzeW5jLmxvZyA9IF9jb25zb2xlX2ZuKCdsb2cnKTtcbiAgICBhc3luYy5kaXIgPSBfY29uc29sZV9mbignZGlyJyk7XG4gICAgLyphc3luYy5pbmZvID0gX2NvbnNvbGVfZm4oJ2luZm8nKTtcbiAgICBhc3luYy53YXJuID0gX2NvbnNvbGVfZm4oJ3dhcm4nKTtcbiAgICBhc3luYy5lcnJvciA9IF9jb25zb2xlX2ZuKCdlcnJvcicpOyovXG5cbiAgICBhc3luYy5tZW1vaXplID0gZnVuY3Rpb24gKGZuLCBoYXNoZXIpIHtcbiAgICAgICAgdmFyIG1lbW8gPSB7fTtcbiAgICAgICAgdmFyIHF1ZXVlcyA9IHt9O1xuICAgICAgICBoYXNoZXIgPSBoYXNoZXIgfHwgZnVuY3Rpb24gKHgpIHtcbiAgICAgICAgICAgIHJldHVybiB4O1xuICAgICAgICB9O1xuICAgICAgICB2YXIgbWVtb2l6ZWQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7XG4gICAgICAgICAgICB2YXIgY2FsbGJhY2sgPSBhcmdzLnBvcCgpO1xuICAgICAgICAgICAgdmFyIGtleSA9IGhhc2hlci5hcHBseShudWxsLCBhcmdzKTtcbiAgICAgICAgICAgIGlmIChrZXkgaW4gbWVtbykge1xuICAgICAgICAgICAgICAgIGFzeW5jLm5leHRUaWNrKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2suYXBwbHkobnVsbCwgbWVtb1trZXldKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGtleSBpbiBxdWV1ZXMpIHtcbiAgICAgICAgICAgICAgICBxdWV1ZXNba2V5XS5wdXNoKGNhbGxiYWNrKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHF1ZXVlc1trZXldID0gW2NhbGxiYWNrXTtcbiAgICAgICAgICAgICAgICBmbi5hcHBseShudWxsLCBhcmdzLmNvbmNhdChbZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICBtZW1vW2tleV0gPSBhcmd1bWVudHM7XG4gICAgICAgICAgICAgICAgICAgIHZhciBxID0gcXVldWVzW2tleV07XG4gICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBxdWV1ZXNba2V5XTtcbiAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDAsIGwgPSBxLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICAgIHFbaV0uYXBwbHkobnVsbCwgYXJndW1lbnRzKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1dKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIG1lbW9pemVkLm1lbW8gPSBtZW1vO1xuICAgICAgICBtZW1vaXplZC51bm1lbW9pemVkID0gZm47XG4gICAgICAgIHJldHVybiBtZW1vaXplZDtcbiAgICB9O1xuXG4gICAgYXN5bmMudW5tZW1vaXplID0gZnVuY3Rpb24gKGZuKSB7XG4gICAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gKGZuLnVubWVtb2l6ZWQgfHwgZm4pLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7XG4gICAgICB9O1xuICAgIH07XG5cbiAgICBhc3luYy50aW1lcyA9IGZ1bmN0aW9uIChjb3VudCwgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgIHZhciBjb3VudGVyID0gW107XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY291bnQ7IGkrKykge1xuICAgICAgICAgICAgY291bnRlci5wdXNoKGkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBhc3luYy5tYXAoY291bnRlciwgaXRlcmF0b3IsIGNhbGxiYWNrKTtcbiAgICB9O1xuXG4gICAgYXN5bmMudGltZXNTZXJpZXMgPSBmdW5jdGlvbiAoY291bnQsIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICB2YXIgY291bnRlciA9IFtdO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNvdW50OyBpKyspIHtcbiAgICAgICAgICAgIGNvdW50ZXIucHVzaChpKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYXN5bmMubWFwU2VyaWVzKGNvdW50ZXIsIGl0ZXJhdG9yLCBjYWxsYmFjayk7XG4gICAgfTtcblxuICAgIGFzeW5jLnNlcSA9IGZ1bmN0aW9uICgvKiBmdW5jdGlvbnMuLi4gKi8pIHtcbiAgICAgICAgdmFyIGZucyA9IGFyZ3VtZW50cztcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHZhciB0aGF0ID0gdGhpcztcbiAgICAgICAgICAgIHZhciBhcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKTtcbiAgICAgICAgICAgIHZhciBjYWxsYmFjayA9IGFyZ3MucG9wKCk7XG4gICAgICAgICAgICBhc3luYy5yZWR1Y2UoZm5zLCBhcmdzLCBmdW5jdGlvbiAobmV3YXJncywgZm4sIGNiKSB7XG4gICAgICAgICAgICAgICAgZm4uYXBwbHkodGhhdCwgbmV3YXJncy5jb25jYXQoW2Z1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGVyciA9IGFyZ3VtZW50c1swXTtcbiAgICAgICAgICAgICAgICAgICAgdmFyIG5leHRhcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKTtcbiAgICAgICAgICAgICAgICAgICAgY2IoZXJyLCBuZXh0YXJncyk7XG4gICAgICAgICAgICAgICAgfV0pKVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGZ1bmN0aW9uIChlcnIsIHJlc3VsdHMpIHtcbiAgICAgICAgICAgICAgICBjYWxsYmFjay5hcHBseSh0aGF0LCBbZXJyXS5jb25jYXQocmVzdWx0cykpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH07XG4gICAgfTtcblxuICAgIGFzeW5jLmNvbXBvc2UgPSBmdW5jdGlvbiAoLyogZnVuY3Rpb25zLi4uICovKSB7XG4gICAgICByZXR1cm4gYXN5bmMuc2VxLmFwcGx5KG51bGwsIEFycmF5LnByb3RvdHlwZS5yZXZlcnNlLmNhbGwoYXJndW1lbnRzKSk7XG4gICAgfTtcblxuICAgIHZhciBfYXBwbHlFYWNoID0gZnVuY3Rpb24gKGVhY2hmbiwgZm5zIC8qYXJncy4uLiovKSB7XG4gICAgICAgIHZhciBnbyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHZhciB0aGF0ID0gdGhpcztcbiAgICAgICAgICAgIHZhciBhcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKTtcbiAgICAgICAgICAgIHZhciBjYWxsYmFjayA9IGFyZ3MucG9wKCk7XG4gICAgICAgICAgICByZXR1cm4gZWFjaGZuKGZucywgZnVuY3Rpb24gKGZuLCBjYikge1xuICAgICAgICAgICAgICAgIGZuLmFwcGx5KHRoYXQsIGFyZ3MuY29uY2F0KFtjYl0pKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjYWxsYmFjayk7XG4gICAgICAgIH07XG4gICAgICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID4gMikge1xuICAgICAgICAgICAgdmFyIGFyZ3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsIDIpO1xuICAgICAgICAgICAgcmV0dXJuIGdvLmFwcGx5KHRoaXMsIGFyZ3MpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIGdvO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBhc3luYy5hcHBseUVhY2ggPSBkb1BhcmFsbGVsKF9hcHBseUVhY2gpO1xuICAgIGFzeW5jLmFwcGx5RWFjaFNlcmllcyA9IGRvU2VyaWVzKF9hcHBseUVhY2gpO1xuXG4gICAgYXN5bmMuZm9yZXZlciA9IGZ1bmN0aW9uIChmbiwgY2FsbGJhY2spIHtcbiAgICAgICAgZnVuY3Rpb24gbmV4dChlcnIpIHtcbiAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICBpZiAoY2FsbGJhY2spIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRocm93IGVycjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZuKG5leHQpO1xuICAgICAgICB9XG4gICAgICAgIG5leHQoKTtcbiAgICB9O1xuXG4gICAgLy8gTm9kZS5qc1xuICAgIGlmICh0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJyAmJiBtb2R1bGUuZXhwb3J0cykge1xuICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IGFzeW5jO1xuICAgIH1cbiAgICAvLyBBTUQgLyBSZXF1aXJlSlNcbiAgICBlbHNlIGlmICh0eXBlb2YgZGVmaW5lICE9PSAndW5kZWZpbmVkJyAmJiBkZWZpbmUuYW1kKSB7XG4gICAgICAgIGRlZmluZShbXSwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIGFzeW5jO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgLy8gaW5jbHVkZWQgZGlyZWN0bHkgdmlhIDxzY3JpcHQ+IHRhZ1xuICAgIGVsc2Uge1xuICAgICAgICByb290LmFzeW5jID0gYXN5bmM7XG4gICAgfVxuXG59KCkpO1xuIiwidmFyIGFzeW5jICAgICAgID0gcmVxdWlyZSgnYXN5bmMnKSxcbiAgICB1cmxQYXJzZXIgICA9IHJlcXVpcmUoJ3VybCcpLFxuICAgIFJlc291cmNlICAgID0gcmVxdWlyZSgnLi9SZXNvdXJjZScpLFxuICAgIEV2ZW50RW1pdHRlciA9IHJlcXVpcmUoJ2V2ZW50ZW1pdHRlcjMnKTtcblxuLyoqXG4gKiBNYW5hZ2VzIHRoZSBzdGF0ZSBhbmQgbG9hZGluZyBvZiBtdWx0aXBsZSByZXNvdXJjZXMgdG8gbG9hZC5cbiAqXG4gKiBAY2xhc3NcbiAqIEBwYXJhbSBbYmFzZVVybD0nJ10ge3N0cmluZ30gVGhlIGJhc2UgdXJsIGZvciBhbGwgcmVzb3VyY2VzIGxvYWRlZCBieSB0aGlzIGxvYWRlci5cbiAqIEBwYXJhbSBbY29uY3VycmVuY3k9MTBdIHtudW1iZXJ9IFRoZSBudW1iZXIgb2YgcmVzb3VyY2VzIHRvIGxvYWQgY29uY3VycmVudGx5LlxuICovXG5mdW5jdGlvbiBMb2FkZXIoYmFzZVVybCwgY29uY3VycmVuY3kpIHtcbiAgICBFdmVudEVtaXR0ZXIuY2FsbCh0aGlzKTtcblxuICAgIGNvbmN1cnJlbmN5ID0gY29uY3VycmVuY3kgfHwgMTA7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYmFzZSB1cmwgZm9yIGFsbCByZXNvdXJjZXMgbG9hZGVkIGJ5IHRoaXMgbG9hZGVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7c3RyaW5nfVxuICAgICAqL1xuICAgIHRoaXMuYmFzZVVybCA9IGJhc2VVcmwgfHwgJyc7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgcHJvZ3Jlc3MgcGVyY2VudCBvZiB0aGUgbG9hZGVyIGdvaW5nIHRocm91Z2ggdGhlIHF1ZXVlLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMucHJvZ3Jlc3MgPSAwO1xuXG4gICAgLyoqXG4gICAgICogTG9hZGluZyBzdGF0ZSBvZiB0aGUgbG9hZGVyLCB0cnVlIGlmIGl0IGlzIGN1cnJlbnRseSBsb2FkaW5nIHJlc291cmNlcy5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICovXG4gICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgcGVyY2VudGFnZSBvZiB0b3RhbCBwcm9ncmVzcyB0aGF0IGEgc2luZ2xlIHJlc291cmNlIHJlcHJlc2VudHMuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy5fcHJvZ3Jlc3NDaHVuayA9IDA7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgbWlkZGxld2FyZSB0byBydW4gYmVmb3JlIGxvYWRpbmcgZWFjaCByZXNvdXJjZS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Z1bmN0aW9uW119XG4gICAgICovXG4gICAgdGhpcy5fYmVmb3JlTWlkZGxld2FyZSA9IFtdO1xuXG4gICAgLyoqXG4gICAgICogVGhlIG1pZGRsZXdhcmUgdG8gcnVuIGFmdGVyIGxvYWRpbmcgZWFjaCByZXNvdXJjZS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Z1bmN0aW9uW119XG4gICAgICovXG4gICAgdGhpcy5fYWZ0ZXJNaWRkbGV3YXJlID0gW107XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYF9sb2FkUmVzb3VyY2VgIGZ1bmN0aW9uIGJvdW5kIHdpdGggdGhpcyBvYmplY3QgY29udGV4dC5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQG1lbWJlciB7ZnVuY3Rpb259XG4gICAgICovXG4gICAgdGhpcy5fYm91bmRMb2FkUmVzb3VyY2UgPSB0aGlzLl9sb2FkUmVzb3VyY2UuYmluZCh0aGlzKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBgX29uTG9hZGAgZnVuY3Rpb24gYm91bmQgd2l0aCB0aGlzIG9iamVjdCBjb250ZXh0LlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAbWVtYmVyIHtmdW5jdGlvbn1cbiAgICAgKi9cbiAgICB0aGlzLl9ib3VuZE9uTG9hZCA9IHRoaXMuX29uTG9hZC5iaW5kKHRoaXMpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHJlc291cmNlIGJ1ZmZlciB0aGF0IGZpbGxzIHVudGlsIGBsb2FkYCBpcyBjYWxsZWQgdG8gc3RhcnQgbG9hZGluZyByZXNvdXJjZXMuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBtZW1iZXIge1Jlc291cmNlW119XG4gICAgICovXG4gICAgdGhpcy5fYnVmZmVyID0gW107XG5cbiAgICAvKipcbiAgICAgKiBVc2VkIHRvIHRyYWNrIGxvYWQgY29tcGxldGlvbi5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMuX251bVRvTG9hZCA9IDA7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgcmVzb3VyY2VzIHdhaXRpbmcgdG8gYmUgbG9hZGVkLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAbWVtYmVyIHtSZXNvdXJjZVtdfVxuICAgICAqL1xuICAgIHRoaXMuX3F1ZXVlID0gYXN5bmMucXVldWUodGhpcy5fYm91bmRMb2FkUmVzb3VyY2UsIGNvbmN1cnJlbmN5KTtcblxuICAgIC8qKlxuICAgICAqIEFsbCB0aGUgcmVzb3VyY2VzIGZvciB0aGlzIGxvYWRlciBrZXllZCBieSBuYW1lLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7b2JqZWN0PHN0cmluZywgUmVzb3VyY2U+fVxuICAgICAqL1xuICAgIHRoaXMucmVzb3VyY2VzID0ge307XG5cbiAgICAvKipcbiAgICAgKiBFbWl0dGVkIG9uY2UgcGVyIGxvYWRlZCBvciBlcnJvcmVkIHJlc291cmNlLlxuICAgICAqXG4gICAgICogQGV2ZW50IHByb2dyZXNzXG4gICAgICogQG1lbWJlcm9mIExvYWRlciNcbiAgICAgKi9cblxuICAgIC8qKlxuICAgICAqIEVtaXR0ZWQgb25jZSBwZXIgZXJyb3JlZCByZXNvdXJjZS5cbiAgICAgKlxuICAgICAqIEBldmVudCBlcnJvclxuICAgICAqIEBtZW1iZXJvZiBMb2FkZXIjXG4gICAgICovXG5cbiAgICAvKipcbiAgICAgKiBFbWl0dGVkIG9uY2UgcGVyIGxvYWRlZCByZXNvdXJjZS5cbiAgICAgKlxuICAgICAqIEBldmVudCBsb2FkXG4gICAgICogQG1lbWJlcm9mIExvYWRlciNcbiAgICAgKi9cblxuICAgIC8qKlxuICAgICAqIEVtaXR0ZWQgd2hlbiB0aGUgbG9hZGVyIGJlZ2lucyB0byBwcm9jZXNzIHRoZSBxdWV1ZS5cbiAgICAgKlxuICAgICAqIEBldmVudCBzdGFydFxuICAgICAqIEBtZW1iZXJvZiBMb2FkZXIjXG4gICAgICovXG5cbiAgICAvKipcbiAgICAgKiBFbWl0dGVkIHdoZW4gdGhlIHF1ZXVlZCByZXNvdXJjZXMgYWxsIGxvYWQuXG4gICAgICpcbiAgICAgKiBAZXZlbnQgY29tcGxldGVcbiAgICAgKiBAbWVtYmVyb2YgTG9hZGVyI1xuICAgICAqL1xufVxuXG5Mb2FkZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShFdmVudEVtaXR0ZXIucHJvdG90eXBlKTtcbkxvYWRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBMb2FkZXI7XG5tb2R1bGUuZXhwb3J0cyA9IExvYWRlcjtcblxuLyoqXG4gKiBBZGRzIGEgcmVzb3VyY2UgKG9yIG11bHRpcGxlIHJlc291cmNlcykgdG8gdGhlIGxvYWRlciBxdWV1ZS5cbiAqXG4gKiBUaGlzIGZ1bmN0aW9uIGNhbiB0YWtlIGEgd2lkZSB2YXJpZXR5IG9mIGRpZmZlcmVudCBwYXJhbWV0ZXJzLiBUaGUgb25seSB0aGluZyB0aGF0IGlzIGFsd2F5c1xuICogcmVxdWlyZWQgdGhlIHVybCB0byBsb2FkLiBBbGwgdGhlIGZvbGxvd2luZyB3aWxsIHdvcms6XG4gKlxuICogYGBganNcbiAqIGxvYWRlclxuICogICAgIC8vIG5vcm1hbCBwYXJhbSBzeW50YXhcbiAqICAgICAuYWRkKCdrZXknLCAnaHR0cDovLy4uLicsIGZ1bmN0aW9uICgpIHt9KVxuICogICAgIC5hZGQoJ2h0dHA6Ly8uLi4nLCBmdW5jdGlvbiAoKSB7fSlcbiAqICAgICAuYWRkKCdodHRwOi8vLi4uJylcbiAqXG4gKiAgICAgLy8gb2JqZWN0IHN5bnRheFxuICogICAgIC5hZGQoe1xuICogICAgICAgICBuYW1lOiAna2V5MicsXG4gKiAgICAgICAgIHVybDogJ2h0dHA6Ly8uLi4nXG4gKiAgICAgfSwgZnVuY3Rpb24gKCkge30pXG4gKiAgICAgLmFkZCh7XG4gKiAgICAgICAgIHVybDogJ2h0dHA6Ly8uLi4nXG4gKiAgICAgfSwgZnVuY3Rpb24gKCkge30pXG4gKiAgICAgLmFkZCh7XG4gKiAgICAgICAgIG5hbWU6ICdrZXkzJyxcbiAqICAgICAgICAgdXJsOiAnaHR0cDovLy4uLidcbiAqICAgICAgICAgb25Db21wbGV0ZTogZnVuY3Rpb24gKCkge31cbiAqICAgICB9KVxuICogICAgIC5hZGQoe1xuICogICAgICAgICB1cmw6ICdodHRwczovLy4uLicsXG4gKiAgICAgICAgIG9uQ29tcGxldGU6IGZ1bmN0aW9uICgpIHt9LFxuICogICAgICAgICBjcm9zc09yaWdpbjogdHJ1ZVxuICogICAgIH0pXG4gKlxuICogICAgIC8vIHlvdSBjYW4gYWxzbyBwYXNzIGFuIGFycmF5IG9mIG9iamVjdHMgb3IgdXJscyBvciBib3RoXG4gKiAgICAgLmFkZChbXG4gKiAgICAgICAgIHsgbmFtZTogJ2tleTQnLCB1cmw6ICdodHRwOi8vLi4uJywgb25Db21wbGV0ZTogZnVuY3Rpb24gKCkge30gfSxcbiAqICAgICAgICAgeyB1cmw6ICdodHRwOi8vLi4uJywgb25Db21wbGV0ZTogZnVuY3Rpb24gKCkge30gfSxcbiAqICAgICAgICAgJ2h0dHA6Ly8uLi4nXG4gKiAgICAgXSk7XG4gKiBgYGBcbiAqXG4gKiBAYWxpYXMgZW5xdWV1ZVxuICogQHBhcmFtIFtuYW1lXSB7c3RyaW5nfSBUaGUgbmFtZSBvZiB0aGUgcmVzb3VyY2UgdG8gbG9hZCwgaWYgbm90IHBhc3NlZCB0aGUgdXJsIGlzIHVzZWQuXG4gKiBAcGFyYW0gdXJsIHtzdHJpbmd9IFRoZSB1cmwgZm9yIHRoaXMgcmVzb3VyY2UsIHJlbGF0aXZlIHRvIHRoZSBiYXNlVXJsIG9mIHRoaXMgbG9hZGVyLlxuICogQHBhcmFtIFtvcHRpb25zXSB7b2JqZWN0fSBUaGUgb3B0aW9ucyBmb3IgdGhlIGxvYWQuXG4gKiBAcGFyYW0gW29wdGlvbnMuY3Jvc3NPcmlnaW5dIHtib29sZWFufSBJcyB0aGlzIHJlcXVlc3QgY3Jvc3Mtb3JpZ2luPyBEZWZhdWx0IGlzIHRvIGRldGVybWluZSBhdXRvbWF0aWNhbGx5LlxuICogQHBhcmFtIFtvcHRpb25zLmxvYWRUeXBlPVJlc291cmNlLkxPQURfVFlQRS5YSFJdIHtSZXNvdXJjZS5YSFJfTE9BRF9UWVBFfSBIb3cgc2hvdWxkIHRoaXMgcmVzb3VyY2UgYmUgbG9hZGVkP1xuICogQHBhcmFtIFtvcHRpb25zLnhoclR5cGU9UmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuREVGQVVMVF0ge1Jlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFfSBIb3cgc2hvdWxkIHRoZSBkYXRhIGJlaW5nXG4gKiAgICAgIGxvYWRlZCBiZSBpbnRlcnByZXRlZCB3aGVuIHVzaW5nIFhIUj9cbiAqIEBwYXJhbSBbY2FsbGJhY2tdIHtmdW5jdGlvbn0gRnVuY3Rpb24gdG8gY2FsbCB3aGVuIHRoaXMgc3BlY2lmaWMgcmVzb3VyY2UgY29tcGxldGVzIGxvYWRpbmcuXG4gKiBAcmV0dXJuIHtMb2FkZXJ9XG4gKi9cbkxvYWRlci5wcm90b3R5cGUuYWRkID0gTG9hZGVyLnByb3RvdHlwZS5lbnF1ZXVlID0gZnVuY3Rpb24gKG5hbWUsIHVybCwgb3B0aW9ucywgY2IpIHtcbiAgICAvLyBzcGVjaWFsIGNhc2Ugb2YgYW4gYXJyYXkgb2Ygb2JqZWN0cyBvciB1cmxzXG4gICAgaWYgKEFycmF5LmlzQXJyYXkobmFtZSkpIHtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBuYW1lLmxlbmd0aDsgKytpKSB7XG4gICAgICAgICAgICB0aGlzLmFkZChuYW1lW2ldKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIC8vIGlmIGFuIG9iamVjdCBpcyBwYXNzZWQgaW5zdGVhZCBvZiBwYXJhbXNcbiAgICBpZiAodHlwZW9mIG5hbWUgPT09ICdvYmplY3QnKSB7XG4gICAgICAgIGNiID0gdXJsIHx8IG5hbWUuY2FsbGJhY2sgfHwgbmFtZS5vbkNvbXBsZXRlO1xuICAgICAgICBvcHRpb25zID0gbmFtZTtcbiAgICAgICAgdXJsID0gbmFtZS51cmw7XG4gICAgICAgIG5hbWUgPSBuYW1lLm5hbWUgfHwgbmFtZS5rZXkgfHwgbmFtZS51cmw7XG4gICAgfVxuXG4gICAgLy8gY2FzZSB3aGVyZSBubyBuYW1lIGlzIHBhc3NlZCBzaGlmdCBhbGwgYXJncyBvdmVyIGJ5IG9uZS5cbiAgICBpZiAodHlwZW9mIHVybCAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgY2IgPSBvcHRpb25zO1xuICAgICAgICBvcHRpb25zID0gdXJsO1xuICAgICAgICB1cmwgPSBuYW1lO1xuICAgIH1cblxuICAgIC8vIG5vdyB0aGF0IHdlIHNoaWZ0ZWQgbWFrZSBzdXJlIHdlIGhhdmUgYSBwcm9wZXIgdXJsLlxuICAgIGlmICh0eXBlb2YgdXJsICE9PSAnc3RyaW5nJykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ05vIHVybCBwYXNzZWQgdG8gYWRkIHJlc291cmNlIHRvIGxvYWRlci4nKTtcbiAgICB9XG5cbiAgICAvLyBvcHRpb25zIGFyZSBvcHRpb25hbCBzbyBwZW9wbGUgbWlnaHQgcGFzcyBhIGZ1bmN0aW9uIGFuZCBubyBvcHRpb25zXG4gICAgaWYgKHR5cGVvZiBvcHRpb25zID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIGNiID0gb3B0aW9ucztcbiAgICAgICAgb3B0aW9ucyA9IG51bGw7XG4gICAgfVxuXG4gICAgLy8gY2hlY2sgaWYgcmVzb3VyY2UgYWxyZWFkeSBleGlzdHMuXG4gICAgaWYgKHRoaXMucmVzb3VyY2VzW25hbWVdKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignUmVzb3VyY2Ugd2l0aCBuYW1lIFwiJyArIG5hbWUgKyAnXCIgYWxyZWFkeSBleGlzdHMuJyk7XG4gICAgfVxuXG4gICAgLy8gYWRkIGJhc2UgdXJsIGlmIHRoaXMgaXNuJ3QgYW4gYWJzb2x1dGUgdXJsXG4gICAgdXJsID0gdGhpcy5faGFuZGxlQmFzZVVybCh1cmwpO1xuXG4gICAgLy8gY3JlYXRlIHRoZSBzdG9yZSB0aGUgcmVzb3VyY2VcbiAgICB0aGlzLnJlc291cmNlc1tuYW1lXSA9IG5ldyBSZXNvdXJjZShuYW1lLCB1cmwsIG9wdGlvbnMpO1xuXG4gICAgaWYgKHR5cGVvZiBjYiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB0aGlzLnJlc291cmNlc1tuYW1lXS5vbmNlKCdhZnRlck1pZGRsZXdhcmUnLCBjYik7XG4gICAgfVxuXG4gICAgdGhpcy5fbnVtVG9Mb2FkKys7XG5cbiAgICAvLyBpZiBhbHJlYWR5IGxvYWRpbmcgYWRkIGl0IHRvIHRoZSB3b3JrZXIgcXVldWVcbiAgICBpZiAodGhpcy5fcXVldWUuc3RhcnRlZCkge1xuICAgICAgICB0aGlzLl9xdWV1ZS5wdXNoKHRoaXMucmVzb3VyY2VzW25hbWVdKTtcbiAgICAgICAgdGhpcy5fcHJvZ3Jlc3NDaHVuayA9ICgxMDAgLSB0aGlzLnByb2dyZXNzKSAvICh0aGlzLl9xdWV1ZS5sZW5ndGgoKSArIHRoaXMuX3F1ZXVlLnJ1bm5pbmcoKSk7XG4gICAgfVxuICAgIC8vIG90aGVyd2lzZSBidWZmZXIgaXQgdG8gYmUgYWRkZWQgdG8gdGhlIHF1ZXVlIGxhdGVyXG4gICAgZWxzZSB7XG4gICAgICAgIHRoaXMuX2J1ZmZlci5wdXNoKHRoaXMucmVzb3VyY2VzW25hbWVdKTtcbiAgICAgICAgdGhpcy5fcHJvZ3Jlc3NDaHVuayA9IDEwMCAvIHRoaXMuX2J1ZmZlci5sZW5ndGg7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG5Mb2FkZXIucHJvdG90eXBlLl9oYW5kbGVCYXNlVXJsID0gZnVuY3Rpb24gKHVybCkge1xuICAgIHZhciBwYXJzZWRVcmwgPSB1cmxQYXJzZXIucGFyc2UodXJsKTtcblxuICAgIC8vIGFic29sdXRlIHVybCwganVzdCB1c2UgaXQgYXMgaXMuXG4gICAgaWYgKHBhcnNlZFVybC5wcm90b2NvbCB8fCBwYXJzZWRVcmwucGF0aG5hbWUuaW5kZXhPZignLy8nKSA9PT0gMCkge1xuICAgICAgICByZXR1cm4gdXJsO1xuICAgIH1cblxuICAgIC8vIGlmIGJhc2VVcmwgZG9lc24ndCBlbmQgaW4gc2xhc2ggYW5kIHVybCBkb2Vzbid0IHN0YXJ0IHdpdGggc2xhc2gsIHRoZW4gYWRkIGEgc2xhc2ggaW5iZXR3ZWVuXG4gICAgaWYgKFxuICAgICAgICB0aGlzLmJhc2VVcmwubGVuZ3RoICYmXG4gICAgICAgIHRoaXMuYmFzZVVybC5sYXN0SW5kZXhPZignLycpICE9PSB0aGlzLmJhc2VVcmwubGVuZ3RoIC0gMSAmJlxuICAgICAgICB1cmwuY2hhckF0KDApICE9PSAnLydcbiAgICApIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYmFzZVVybCArICcvJyArIHVybDtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHJldHVybiB0aGlzLmJhc2VVcmwgKyB1cmw7XG4gICAgfVxufTtcblxuXG4vKipcbiAqIFNldHMgdXAgYSBtaWRkbGV3YXJlIGZ1bmN0aW9uIHRoYXQgd2lsbCBydW4gKmJlZm9yZSogdGhlXG4gKiByZXNvdXJjZSBpcyBsb2FkZWQuXG4gKlxuICogQGFsaWFzIHByZVxuICogQHBhcmFtIG1pZGRsZXdhcmUge2Z1bmN0aW9ufSBUaGUgbWlkZGxld2FyZSBmdW5jdGlvbiB0byByZWdpc3Rlci5cbiAqIEByZXR1cm4ge0xvYWRlcn1cbiAqL1xuTG9hZGVyLnByb3RvdHlwZS5iZWZvcmUgPSBMb2FkZXIucHJvdG90eXBlLnByZSA9IGZ1bmN0aW9uIChmbikge1xuICAgIHRoaXMuX2JlZm9yZU1pZGRsZXdhcmUucHVzaChmbik7XG5cbiAgICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogU2V0cyB1cCBhIG1pZGRsZXdhcmUgZnVuY3Rpb24gdGhhdCB3aWxsIHJ1biAqYWZ0ZXIqIHRoZVxuICogcmVzb3VyY2UgaXMgbG9hZGVkLlxuICpcbiAqIEBhbGlhcyB1c2VcbiAqIEBwYXJhbSBtaWRkbGV3YXJlIHtmdW5jdGlvbn0gVGhlIG1pZGRsZXdhcmUgZnVuY3Rpb24gdG8gcmVnaXN0ZXIuXG4gKiBAcmV0dXJuIHtMb2FkZXJ9XG4gKi9cbkxvYWRlci5wcm90b3R5cGUuYWZ0ZXIgPSBMb2FkZXIucHJvdG90eXBlLnVzZSA9IGZ1bmN0aW9uIChmbikge1xuICAgIHRoaXMuX2FmdGVyTWlkZGxld2FyZS5wdXNoKGZuKTtcblxuICAgIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBSZXNldHMgdGhlIHF1ZXVlIG9mIHRoZSBsb2FkZXIgdG8gcHJlcGFyZSBmb3IgYSBuZXcgbG9hZC5cbiAqXG4gKiBAcmV0dXJuIHtMb2FkZXJ9XG4gKi9cbkxvYWRlci5wcm90b3R5cGUucmVzZXQgPSBmdW5jdGlvbiAoKSB7XG4gICAgLy8gdGhpcy5iYXNlVXJsID0gYmFzZVVybCB8fCAnJztcblxuICAgIHRoaXMucHJvZ3Jlc3MgPSAwO1xuXG4gICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XG5cbiAgICB0aGlzLl9wcm9ncmVzc0NodW5rID0gMDtcblxuICAgIC8vIHRoaXMuX2JlZm9yZU1pZGRsZXdhcmUubGVuZ3RoID0gMDtcbiAgICAvLyB0aGlzLl9hZnRlck1pZGRsZXdhcmUubGVuZ3RoID0gMDtcblxuICAgIHRoaXMuX2J1ZmZlci5sZW5ndGggPSAwO1xuXG4gICAgdGhpcy5fbnVtVG9Mb2FkID0gMDtcblxuICAgIHRoaXMuX3F1ZXVlLmtpbGwoKTtcbiAgICB0aGlzLl9xdWV1ZS5zdGFydGVkID0gZmFsc2U7XG5cbiAgICB0aGlzLnJlc291cmNlcyA9IHt9O1xufTtcblxuLyoqXG4gKiBTdGFydHMgbG9hZGluZyB0aGUgcXVldWVkIHJlc291cmNlcy5cbiAqXG4gKiBAZmlyZXMgc3RhcnRcbiAqIEBwYXJhbSBbY2FsbGJhY2tdIHtmdW5jdGlvbn0gT3B0aW9uYWwgY2FsbGJhY2sgdGhhdCB3aWxsIGJlIGJvdW5kIHRvIHRoZSBgY29tcGxldGVgIGV2ZW50LlxuICogQHJldHVybiB7TG9hZGVyfVxuICovXG5Mb2FkZXIucHJvdG90eXBlLmxvYWQgPSBmdW5jdGlvbiAoY2IpIHtcbiAgICAvLyByZWdpc3RlciBjb21wbGV0ZSBjYWxsYmFjayBpZiB0aGV5IHBhc3Mgb25lXG4gICAgaWYgKHR5cGVvZiBjYiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB0aGlzLm9uY2UoJ2NvbXBsZXRlJywgY2IpO1xuICAgIH1cblxuICAgIC8vIGlmIHRoZSBxdWV1ZSBoYXMgYWxyZWFkeSBzdGFydGVkIHdlIGFyZSBkb25lIGhlcmVcbiAgICBpZiAodGhpcy5fcXVldWUuc3RhcnRlZCkge1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICAvLyBub3RpZnkgb2Ygc3RhcnRcbiAgICB0aGlzLmVtaXQoJ3N0YXJ0JywgdGhpcyk7XG5cbiAgICAvLyBzdGFydCB0aGUgaW50ZXJuYWwgcXVldWVcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuX2J1ZmZlci5sZW5ndGg7ICsraSkge1xuICAgICAgICB0aGlzLl9xdWV1ZS5wdXNoKHRoaXMuX2J1ZmZlcltpXSk7XG4gICAgfVxuXG4gICAgLy8gZW1wdHkgdGhlIGJ1ZmZlclxuICAgIHRoaXMuX2J1ZmZlci5sZW5ndGggPSAwO1xuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIExvYWRzIGEgc2luZ2xlIHJlc291cmNlLlxuICpcbiAqIEBmaXJlcyBwcm9ncmVzc1xuICogQHByaXZhdGVcbiAqL1xuTG9hZGVyLnByb3RvdHlwZS5fbG9hZFJlc291cmNlID0gZnVuY3Rpb24gKHJlc291cmNlLCBkZXF1ZXVlKSB7XG4gICAgdmFyIHNlbGYgPSB0aGlzO1xuXG4gICAgcmVzb3VyY2UuX2RlcXVldWUgPSBkZXF1ZXVlO1xuXG4gICAgdGhpcy5fcnVuTWlkZGxld2FyZShyZXNvdXJjZSwgdGhpcy5fYmVmb3JlTWlkZGxld2FyZSwgZnVuY3Rpb24gKCkge1xuICAgICAgICAvLyByZXNvdXJjZS5vbigncHJvZ3Jlc3MnLCBzZWxmLmVtaXQuYmluZChzZWxmLCAncHJvZ3Jlc3MnKSk7XG5cbiAgICAgICAgcmVzb3VyY2UubG9hZChzZWxmLl9ib3VuZE9uTG9hZCk7XG4gICAgfSk7XG59O1xuXG4vKipcbiAqIENhbGxlZCBvbmNlIGVhY2ggcmVzb3VyY2UgaGFzIGxvYWRlZC5cbiAqXG4gKiBAZmlyZXMgY29tcGxldGVcbiAqIEBwcml2YXRlXG4gKi9cbkxvYWRlci5wcm90b3R5cGUuX29uQ29tcGxldGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgdGhpcy5lbWl0KCdjb21wbGV0ZScsIHRoaXMsIHRoaXMucmVzb3VyY2VzKTtcbn07XG5cbi8qKlxuICogQ2FsbGVkIGVhY2ggdGltZSBhIHJlc291cmNlcyBpcyBsb2FkZWQuXG4gKlxuICogQGZpcmVzIHByb2dyZXNzXG4gKiBAZmlyZXMgZXJyb3JcbiAqIEBmaXJlcyBsb2FkXG4gKiBAcHJpdmF0ZVxuICovXG5Mb2FkZXIucHJvdG90eXBlLl9vbkxvYWQgPSBmdW5jdGlvbiAocmVzb3VyY2UpIHtcbiAgICB0aGlzLnByb2dyZXNzICs9IHRoaXMuX3Byb2dyZXNzQ2h1bms7XG5cbiAgICB0aGlzLmVtaXQoJ3Byb2dyZXNzJywgdGhpcywgcmVzb3VyY2UpO1xuXG4gICAgLy8gcnVuIG1pZGRsZXdhcmUsIHRoaXMgKm11c3QqIGhhcHBlbiBiZWZvcmUgZGVxdWV1ZSBzbyBzdWItYXNzZXRzIGdldCBhZGRlZCBwcm9wZXJseVxuICAgIHRoaXMuX3J1bk1pZGRsZXdhcmUocmVzb3VyY2UsIHRoaXMuX2FmdGVyTWlkZGxld2FyZSwgZnVuY3Rpb24gKCkge1xuICAgICAgICByZXNvdXJjZS5lbWl0KCdhZnRlck1pZGRsZXdhcmUnLCByZXNvdXJjZSk7XG5cbiAgICAgICAgdGhpcy5fbnVtVG9Mb2FkLS07XG5cbiAgICAgICAgLy8gZG8gY29tcGxldGlvbiBjaGVja1xuICAgICAgICBpZiAodGhpcy5fbnVtVG9Mb2FkID09PSAwKSB7XG4gICAgICAgICAgICB0aGlzLnByb2dyZXNzID0gMTAwO1xuICAgICAgICAgICAgdGhpcy5fb25Db21wbGV0ZSgpO1xuICAgICAgICB9XG4gICAgICAgIFxuICAgICAgICBpZiAocmVzb3VyY2UuZXJyb3IpIHtcbiAgICAgICAgICAgIHRoaXMuZW1pdCgnZXJyb3InLCByZXNvdXJjZS5lcnJvciwgdGhpcywgcmVzb3VyY2UpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5lbWl0KCdsb2FkJywgdGhpcywgcmVzb3VyY2UpO1xuICAgICAgICB9XG4gICAgfSk7XG4gICAgXG5cblxuICAgIC8vIHJlbW92ZSB0aGlzIHJlc291cmNlIGZyb20gdGhlIGFzeW5jIHF1ZXVlXG4gICAgcmVzb3VyY2UuX2RlcXVldWUoKTtcbn07XG5cbi8qKlxuICogUnVuIG1pZGRsZXdhcmUgZnVuY3Rpb25zIG9uIGEgcmVzb3VyY2UuXG4gKlxuICogQHByaXZhdGVcbiAqL1xuTG9hZGVyLnByb3RvdHlwZS5fcnVuTWlkZGxld2FyZSA9IGZ1bmN0aW9uIChyZXNvdXJjZSwgZm5zLCBjYikge1xuICAgIHZhciBzZWxmID0gdGhpcztcblxuICAgIGFzeW5jLmVhY2hTZXJpZXMoZm5zLCBmdW5jdGlvbiAoZm4sIG5leHQpIHtcbiAgICAgICAgZm4uY2FsbChzZWxmLCByZXNvdXJjZSwgbmV4dCk7XG4gICAgfSwgY2IuYmluZCh0aGlzLCByZXNvdXJjZSkpO1xufTtcblxuTG9hZGVyLkxPQURfVFlQRSA9IFJlc291cmNlLkxPQURfVFlQRTtcbkxvYWRlci5YSFJfUkVBRFlfU1RBVEUgPSBSZXNvdXJjZS5YSFJfUkVBRFlfU1RBVEU7XG5Mb2FkZXIuWEhSX1JFU1BPTlNFX1RZUEUgPSBSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRTtcbiIsInZhciBFdmVudEVtaXR0ZXIgPSByZXF1aXJlKCdldmVudGVtaXR0ZXIzJyksXG4gICAgX3VybCA9IHJlcXVpcmUoJ3VybCcpLFxuICAgIC8vIHRlc3RzIGlzIENPUlMgaXMgc3VwcG9ydGVkIGluIFhIUiwgaWYgbm90IHdlIG5lZWQgdG8gdXNlIFhEUlxuICAgIHVzZVhkciA9ICEhKHdpbmRvdy5YRG9tYWluUmVxdWVzdCAmJiAhKCd3aXRoQ3JlZGVudGlhbHMnIGluIChuZXcgWE1MSHR0cFJlcXVlc3QoKSkpKSxcbiAgICB0ZW1wQW5jaG9yID0gbnVsbDtcblxuLyoqXG4gKiBNYW5hZ2VzIHRoZSBzdGF0ZSBhbmQgbG9hZGluZyBvZiBhIHNpbmdsZSByZXNvdXJjZSByZXByZXNlbnRlZCBieVxuICogYSBzaW5nbGUgVVJMLlxuICpcbiAqIEBjbGFzc1xuICogQHBhcmFtIG5hbWUge3N0cmluZ30gVGhlIG5hbWUgb2YgdGhlIHJlc291cmNlIHRvIGxvYWQuXG4gKiBAcGFyYW0gdXJsIHtzdHJpbmd8c3RyaW5nW119IFRoZSB1cmwgZm9yIHRoaXMgcmVzb3VyY2UsIGZvciBhdWRpby92aWRlbyBsb2FkcyB5b3UgY2FuIHBhc3MgYW4gYXJyYXkgb2Ygc291cmNlcy5cbiAqIEBwYXJhbSBbb3B0aW9uc10ge29iamVjdH0gVGhlIG9wdGlvbnMgZm9yIHRoZSBsb2FkLlxuICogQHBhcmFtIFtvcHRpb25zLmNyb3NzT3JpZ2luXSB7c3RyaW5nfGJvb2xlYW59IElzIHRoaXMgcmVxdWVzdCBjcm9zcy1vcmlnaW4/IERlZmF1bHQgaXMgdG8gZGV0ZXJtaW5lIGF1dG9tYXRpY2FsbHkuXG4gKiBAcGFyYW0gW29wdGlvbnMubG9hZFR5cGU9UmVzb3VyY2UuTE9BRF9UWVBFLlhIUl0ge1Jlc291cmNlLkxPQURfVFlQRX0gSG93IHNob3VsZCB0aGlzIHJlc291cmNlIGJlIGxvYWRlZD9cbiAqIEBwYXJhbSBbb3B0aW9ucy54aHJUeXBlPVJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkRFRkFVTFRdIHtSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRX0gSG93IHNob3VsZCB0aGUgZGF0YSBiZWluZ1xuICogICAgICBsb2FkZWQgYmUgaW50ZXJwcmV0ZWQgd2hlbiB1c2luZyBYSFI/XG4gKiBAcGFyYW0gW29wdGlvbnMubWV0YWRhdGFdIHtvYmplY3R9IEV4dHJhIGluZm8gZm9yIG1pZGRsZXdhcmUuXG4gKi9cbmZ1bmN0aW9uIFJlc291cmNlKG5hbWUsIHVybCwgb3B0aW9ucykge1xuICAgIEV2ZW50RW1pdHRlci5jYWxsKHRoaXMpO1xuXG4gICAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG5cbiAgICBpZiAodHlwZW9mIG5hbWUgIT09ICdzdHJpbmcnIHx8IHR5cGVvZiB1cmwgIT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignQm90aCBuYW1lIGFuZCB1cmwgYXJlIHJlcXVpcmVkIGZvciBjb25zdHJ1Y3RpbmcgYSByZXNvdXJjZS4nKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGUgbmFtZSBvZiB0aGlzIHJlc291cmNlLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7c3RyaW5nfVxuICAgICAqIEByZWFkb25seVxuICAgICAqL1xuICAgIHRoaXMubmFtZSA9IG5hbWU7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgdXJsIHVzZWQgdG8gbG9hZCB0aGlzIHJlc291cmNlLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7c3RyaW5nfVxuICAgICAqIEByZWFkb25seVxuICAgICAqL1xuICAgIHRoaXMudXJsID0gdXJsO1xuXG4gICAgLyoqXG4gICAgICogU3RvcmVzIHdoZXRoZXIgb3Igbm90IHRoaXMgdXJsIGlzIGEgZGF0YSB1cmwuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqIEByZWFkb25seVxuICAgICAqL1xuICAgIHRoaXMuaXNEYXRhVXJsID0gdGhpcy51cmwuaW5kZXhPZignZGF0YTonKSA9PT0gMDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBkYXRhIHRoYXQgd2FzIGxvYWRlZCBieSB0aGUgcmVzb3VyY2UuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHthbnl9XG4gICAgICovXG4gICAgdGhpcy5kYXRhID0gbnVsbDtcblxuICAgIC8qKlxuICAgICAqIElzIHRoaXMgcmVxdWVzdCBjcm9zcy1vcmlnaW4/IElmIHVuc2V0LCBkZXRlcm1pbmVkIGF1dG9tYXRpY2FsbHkuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtzdHJpbmd9XG4gICAgICovXG4gICAgdGhpcy5jcm9zc09yaWdpbiA9IG9wdGlvbnMuY3Jvc3NPcmlnaW4gPT09IHRydWUgPyAnYW5vbnltb3VzJyA6IG9wdGlvbnMuY3Jvc3NPcmlnaW47XG5cbiAgICAvKipcbiAgICAgKiBUaGUgbWV0aG9kIG9mIGxvYWRpbmcgdG8gdXNlIGZvciB0aGlzIHJlc291cmNlLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UmVzb3VyY2UuTE9BRF9UWVBFfVxuICAgICAqL1xuICAgIHRoaXMubG9hZFR5cGUgPSBvcHRpb25zLmxvYWRUeXBlIHx8IHRoaXMuX2RldGVybWluZUxvYWRUeXBlKCk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgdHlwZSB1c2VkIHRvIGxvYWQgdGhlIHJlc291cmNlIHZpYSBYSFIuIElmIHVuc2V0LCBkZXRlcm1pbmVkIGF1dG9tYXRpY2FsbHkuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtzdHJpbmd9XG4gICAgICovXG4gICAgdGhpcy54aHJUeXBlID0gb3B0aW9ucy54aHJUeXBlO1xuXG4gICAgLyoqXG4gICAgICogRXh0cmEgaW5mbyBmb3IgbWlkZGxld2FyZVxuICAgICAqXG4gICAgICogQG1lbWJlciB7b2JqZWN0fVxuICAgICAqL1xuICAgIHRoaXMubWV0YWRhdGEgPSBvcHRpb25zLm1ldGFkYXRhIHx8IHt9O1xuXG4gICAgLyoqXG4gICAgICogVGhlIGVycm9yIHRoYXQgb2NjdXJyZWQgd2hpbGUgbG9hZGluZyAoaWYgYW55KS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge0Vycm9yfVxuICAgICAqIEByZWFkb25seVxuICAgICAqL1xuICAgIHRoaXMuZXJyb3IgPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogVGhlIFhIUiBvYmplY3QgdGhhdCB3YXMgdXNlZCB0byBsb2FkIHRoaXMgcmVzb3VyY2UuIFRoaXMgaXMgb25seSBzZXRcbiAgICAgKiB3aGVuIGBsb2FkVHlwZWAgaXMgYFJlc291cmNlLkxPQURfVFlQRS5YSFJgLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7WE1MSHR0cFJlcXVlc3R9XG4gICAgICovXG4gICAgdGhpcy54aHIgPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogRGVzY3JpYmVzIGlmIHRoaXMgcmVzb3VyY2Ugd2FzIGxvYWRlZCBhcyBqc29uLiBPbmx5IHZhbGlkIGFmdGVyIHRoZSByZXNvdXJjZVxuICAgICAqIGhhcyBjb21wbGV0ZWx5IGxvYWRlZC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICovXG4gICAgdGhpcy5pc0pzb24gPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIERlc2NyaWJlcyBpZiB0aGlzIHJlc291cmNlIHdhcyBsb2FkZWQgYXMgeG1sLiBPbmx5IHZhbGlkIGFmdGVyIHRoZSByZXNvdXJjZVxuICAgICAqIGhhcyBjb21wbGV0ZWx5IGxvYWRlZC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICovXG4gICAgdGhpcy5pc1htbCA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogRGVzY3JpYmVzIGlmIHRoaXMgcmVzb3VyY2Ugd2FzIGxvYWRlZCBhcyBhbiBpbWFnZSB0YWcuIE9ubHkgdmFsaWQgYWZ0ZXIgdGhlIHJlc291cmNlXG4gICAgICogaGFzIGNvbXBsZXRlbHkgbG9hZGVkLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKi9cbiAgICB0aGlzLmlzSW1hZ2UgPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIERlc2NyaWJlcyBpZiB0aGlzIHJlc291cmNlIHdhcyBsb2FkZWQgYXMgYW4gYXVkaW8gdGFnLiBPbmx5IHZhbGlkIGFmdGVyIHRoZSByZXNvdXJjZVxuICAgICAqIGhhcyBjb21wbGV0ZWx5IGxvYWRlZC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICovXG4gICAgdGhpcy5pc0F1ZGlvID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBEZXNjcmliZXMgaWYgdGhpcyByZXNvdXJjZSB3YXMgbG9hZGVkIGFzIGEgdmlkZW8gdGFnLiBPbmx5IHZhbGlkIGFmdGVyIHRoZSByZXNvdXJjZVxuICAgICAqIGhhcyBjb21wbGV0ZWx5IGxvYWRlZC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICovXG4gICAgdGhpcy5pc1ZpZGVvID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYGRlcXVldWVgIG1ldGhvZCB0aGF0IHdpbGwgYmUgdXNlZCBhIHN0b3JhZ2UgcGxhY2UgZm9yIHRoZSBhc3luYyBxdWV1ZSBkZXF1ZXVlIG1ldGhvZFxuICAgICAqIHVzZWQgcHJpdmF0ZWx5IGJ5IHRoZSBsb2FkZXIuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtmdW5jdGlvbn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX2RlcXVldWUgPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGBjb21wbGV0ZWAgZnVuY3Rpb24gYm91bmQgdG8gdGhpcyByZXNvdXJjZSdzIGNvbnRleHQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtmdW5jdGlvbn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX2JvdW5kQ29tcGxldGUgPSB0aGlzLmNvbXBsZXRlLmJpbmQodGhpcyk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYF9vbkVycm9yYCBmdW5jdGlvbiBib3VuZCB0byB0aGlzIHJlc291cmNlJ3MgY29udGV4dC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Z1bmN0aW9ufVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fYm91bmRPbkVycm9yID0gdGhpcy5fb25FcnJvci5iaW5kKHRoaXMpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGBfb25Qcm9ncmVzc2AgZnVuY3Rpb24gYm91bmQgdG8gdGhpcyByZXNvdXJjZSdzIGNvbnRleHQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtmdW5jdGlvbn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX2JvdW5kT25Qcm9ncmVzcyA9IHRoaXMuX29uUHJvZ3Jlc3MuYmluZCh0aGlzKTtcblxuICAgIC8vIHhociBjYWxsYmFja3NcbiAgICB0aGlzLl9ib3VuZFhock9uRXJyb3IgPSB0aGlzLl94aHJPbkVycm9yLmJpbmQodGhpcyk7XG4gICAgdGhpcy5fYm91bmRYaHJPbkFib3J0ID0gdGhpcy5feGhyT25BYm9ydC5iaW5kKHRoaXMpO1xuICAgIHRoaXMuX2JvdW5kWGhyT25Mb2FkID0gdGhpcy5feGhyT25Mb2FkLmJpbmQodGhpcyk7XG4gICAgdGhpcy5fYm91bmRYZHJPblRpbWVvdXQgPSB0aGlzLl94ZHJPblRpbWVvdXQuYmluZCh0aGlzKTtcblxuICAgIC8qKlxuICAgICAqIEVtaXR0ZWQgd2hlbiB0aGUgcmVzb3VyY2UgYmVpbmdzIHRvIGxvYWQuXG4gICAgICpcbiAgICAgKiBAZXZlbnQgc3RhcnRcbiAgICAgKiBAbWVtYmVyb2YgUmVzb3VyY2UjXG4gICAgICovXG5cbiAgICAvKipcbiAgICAgKiBFbWl0dGVkIGVhY2ggdGltZSBwcm9ncmVzcyBvZiB0aGlzIHJlc291cmNlIGxvYWQgdXBkYXRlcy5cbiAgICAgKiBOb3QgYWxsIHJlc291cmNlcyB0eXBlcyBhbmQgbG9hZGVyIHN5c3RlbXMgY2FuIHN1cHBvcnQgdGhpcyBldmVudFxuICAgICAqIHNvIHNvbWV0aW1lcyBpdCBtYXkgbm90IGJlIGF2YWlsYWJsZS4gSWYgdGhlIHJlc291cmNlXG4gICAgICogaXMgYmVpbmcgbG9hZGVkIG9uIGEgbW9kZXJuIGJyb3dzZXIsIHVzaW5nIFhIUiwgYW5kIHRoZSByZW1vdGUgc2VydmVyXG4gICAgICogcHJvcGVybHkgc2V0cyBDb250ZW50LUxlbmd0aCBoZWFkZXJzLCB0aGVuIHRoaXMgd2lsbCBiZSBhdmFpbGFibGUuXG4gICAgICpcbiAgICAgKiBAZXZlbnQgcHJvZ3Jlc3NcbiAgICAgKiBAbWVtYmVyb2YgUmVzb3VyY2UjXG4gICAgICovXG5cbiAgICAvKipcbiAgICAgKiBFbWl0dGVkIG9uY2UgdGhpcyByZXNvdXJjZSBoYXMgbG9hZGVkLCBpZiB0aGVyZSB3YXMgYW4gZXJyb3IgaXQgd2lsbFxuICAgICAqIGJlIGluIHRoZSBgZXJyb3JgIHByb3BlcnR5LlxuICAgICAqXG4gICAgICogQGV2ZW50IGNvbXBsZXRlXG4gICAgICogQG1lbWJlcm9mIFJlc291cmNlI1xuICAgICAqL1xufVxuXG5SZXNvdXJjZS5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKEV2ZW50RW1pdHRlci5wcm90b3R5cGUpO1xuUmVzb3VyY2UucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gUmVzb3VyY2U7XG5tb2R1bGUuZXhwb3J0cyA9IFJlc291cmNlO1xuXG4vKipcbiAqIE1hcmtzIHRoZSByZXNvdXJjZSBhcyBjb21wbGV0ZS5cbiAqXG4gKiBAZmlyZXMgY29tcGxldGVcbiAqL1xuUmVzb3VyY2UucHJvdG90eXBlLmNvbXBsZXRlID0gZnVuY3Rpb24gKCkge1xuICAgIC8vIFRPRE86IENsZWFuIHRoaXMgdXAgaW4gYSB3cmFwcGVyIG9yIHNvbWV0aGluZy4uLmdyb3NzLi4uLlxuICAgIGlmICh0aGlzLmRhdGEgJiYgdGhpcy5kYXRhLnJlbW92ZUV2ZW50TGlzdGVuZXIpIHtcbiAgICAgICAgdGhpcy5kYXRhLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2Vycm9yJywgdGhpcy5fYm91bmRPbkVycm9yKTtcbiAgICAgICAgdGhpcy5kYXRhLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2xvYWQnLCB0aGlzLl9ib3VuZENvbXBsZXRlKTtcbiAgICAgICAgdGhpcy5kYXRhLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3Byb2dyZXNzJywgdGhpcy5fYm91bmRPblByb2dyZXNzKTtcbiAgICAgICAgdGhpcy5kYXRhLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2NhbnBsYXl0aHJvdWdoJywgdGhpcy5fYm91bmRDb21wbGV0ZSk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMueGhyKSB7XG4gICAgICAgIGlmICh0aGlzLnhoci5yZW1vdmVFdmVudExpc3RlbmVyKSB7XG4gICAgICAgICAgICB0aGlzLnhoci5yZW1vdmVFdmVudExpc3RlbmVyKCdlcnJvcicsIHRoaXMuX2JvdW5kWGhyT25FcnJvcik7XG4gICAgICAgICAgICB0aGlzLnhoci5yZW1vdmVFdmVudExpc3RlbmVyKCdhYm9ydCcsIHRoaXMuX2JvdW5kWGhyT25BYm9ydCk7XG4gICAgICAgICAgICB0aGlzLnhoci5yZW1vdmVFdmVudExpc3RlbmVyKCdwcm9ncmVzcycsIHRoaXMuX2JvdW5kT25Qcm9ncmVzcyk7XG4gICAgICAgICAgICB0aGlzLnhoci5yZW1vdmVFdmVudExpc3RlbmVyKCdsb2FkJywgdGhpcy5fYm91bmRYaHJPbkxvYWQpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy54aHIub25lcnJvciA9IG51bGw7XG4gICAgICAgICAgICB0aGlzLnhoci5vbnRpbWVvdXQgPSBudWxsO1xuICAgICAgICAgICAgdGhpcy54aHIub25wcm9ncmVzcyA9IG51bGw7XG4gICAgICAgICAgICB0aGlzLnhoci5vbmxvYWQgPSBudWxsO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5lbWl0KCdjb21wbGV0ZScsIHRoaXMpO1xufTtcblxuLyoqXG4gKiBLaWNrcyBvZmYgbG9hZGluZyBvZiB0aGlzIHJlc291cmNlLlxuICpcbiAqIEBmaXJlcyBzdGFydFxuICogQHBhcmFtIFtjYWxsYmFja10ge2Z1bmN0aW9ufSBPcHRpb25hbCBjYWxsYmFjayB0byBjYWxsIG9uY2UgdGhlIHJlc291cmNlIGlzIGxvYWRlZC5cbiAqL1xuUmVzb3VyY2UucHJvdG90eXBlLmxvYWQgPSBmdW5jdGlvbiAoY2IpIHtcbiAgICB0aGlzLmVtaXQoJ3N0YXJ0JywgdGhpcyk7XG5cbiAgICAvLyBpZiBhIGNhbGxiYWNrIGlzIHNldCwgbGlzdGVuIGZvciBjb21wbGV0ZSBldmVudFxuICAgIGlmIChjYikge1xuICAgICAgICB0aGlzLm9uY2UoJ2NvbXBsZXRlJywgY2IpO1xuICAgIH1cblxuICAgIC8vIGlmIHVuc2V0LCBkZXRlcm1pbmUgdGhlIHZhbHVlXG4gICAgaWYgKHRoaXMuY3Jvc3NPcmlnaW4gPT09IGZhbHNlIHx8IHR5cGVvZiB0aGlzLmNyb3NzT3JpZ2luICE9PSAnc3RyaW5nJykge1xuICAgICAgICB0aGlzLmNyb3NzT3JpZ2luID0gdGhpcy5fZGV0ZXJtaW5lQ3Jvc3NPcmlnaW4odGhpcy51cmwpO1xuICAgIH1cblxuICAgIHN3aXRjaCh0aGlzLmxvYWRUeXBlKSB7XG4gICAgICAgIGNhc2UgUmVzb3VyY2UuTE9BRF9UWVBFLklNQUdFOlxuICAgICAgICAgICAgdGhpcy5fbG9hZEltYWdlKCk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIFJlc291cmNlLkxPQURfVFlQRS5BVURJTzpcbiAgICAgICAgICAgIHRoaXMuX2xvYWRFbGVtZW50KCdhdWRpbycpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSBSZXNvdXJjZS5MT0FEX1RZUEUuVklERU86XG4gICAgICAgICAgICB0aGlzLl9sb2FkRWxlbWVudCgndmlkZW8nKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgUmVzb3VyY2UuTE9BRF9UWVBFLlhIUjpcbiAgICAgICAgICAgIC8qIGZhbGxzIHRocm91Z2ggKi9cbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIGlmICh1c2VYZHIgJiYgdGhpcy5jcm9zc09yaWdpbikge1xuICAgICAgICAgICAgICAgIHRoaXMuX2xvYWRYZHIoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuX2xvYWRYaHIoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGJyZWFrO1xuICAgIH1cbn07XG5cbi8qKlxuICogTG9hZHMgdGhpcyByZXNvdXJjZXMgdXNpbmcgYW4gSW1hZ2Ugb2JqZWN0LlxuICpcbiAqIEBwcml2YXRlXG4gKi9cblJlc291cmNlLnByb3RvdHlwZS5fbG9hZEltYWdlID0gZnVuY3Rpb24gKCkge1xuICAgIHRoaXMuZGF0YSA9IG5ldyBJbWFnZSgpO1xuXG4gICAgaWYgKHRoaXMuY3Jvc3NPcmlnaW4pIHtcbiAgICAgICAgdGhpcy5kYXRhLmNyb3NzT3JpZ2luID0gdGhpcy5jcm9zc09yaWdpbjtcbiAgICB9XG5cbiAgICB0aGlzLmRhdGEuc3JjID0gdGhpcy51cmw7XG5cbiAgICB0aGlzLmlzSW1hZ2UgPSB0cnVlO1xuXG4gICAgdGhpcy5kYXRhLmFkZEV2ZW50TGlzdGVuZXIoJ2Vycm9yJywgdGhpcy5fYm91bmRPbkVycm9yLCBmYWxzZSk7XG4gICAgdGhpcy5kYXRhLmFkZEV2ZW50TGlzdGVuZXIoJ2xvYWQnLCB0aGlzLl9ib3VuZENvbXBsZXRlLCBmYWxzZSk7XG4gICAgdGhpcy5kYXRhLmFkZEV2ZW50TGlzdGVuZXIoJ3Byb2dyZXNzJywgdGhpcy5fYm91bmRPblByb2dyZXNzLCBmYWxzZSk7XG59O1xuXG4vKipcbiAqIExvYWRzIHRoaXMgcmVzb3VyY2VzIHVzaW5nIGFuIEhUTUxBdWRpb0VsZW1lbnQgb3IgSFRNTFZpZGVvRWxlbWVudC5cbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5SZXNvdXJjZS5wcm90b3R5cGUuX2xvYWRFbGVtZW50ID0gZnVuY3Rpb24gKHR5cGUpIHtcbiAgICBpZiAodHlwZSA9PT0gJ2F1ZGlvJyAmJiB0eXBlb2YgQXVkaW8gIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIHRoaXMuZGF0YSA9IG5ldyBBdWRpbygpO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgdGhpcy5kYXRhID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCh0eXBlKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5kYXRhID09PSBudWxsKSB7XG4gICAgICAgIHRoaXMuZXJyb3IgPSBuZXcgRXJyb3IoJ1Vuc3VwcG9ydGVkIGVsZW1lbnQgJyArIHR5cGUpO1xuICAgICAgICB0aGlzLmNvbXBsZXRlKCk7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBzdXBwb3J0IGZvciBDb2Nvb25KUyBDYW52YXMrIHJ1bnRpbWUsIGxhY2tzIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NvdXJjZScpXG4gICAgaWYgKG5hdmlnYXRvci5pc0NvY29vbkpTKSB7XG4gICAgICAgIHRoaXMuZGF0YS5zcmMgPSBBcnJheS5pc0FycmF5KHRoaXMudXJsKSA/IHRoaXMudXJsWzBdIDogdGhpcy51cmw7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSh0aGlzLnVybCkpIHtcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy51cmwubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmRhdGEuYXBwZW5kQ2hpbGQodGhpcy5fY3JlYXRlU291cmNlKHR5cGUsIHRoaXMudXJsW2ldKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmRhdGEuYXBwZW5kQ2hpbGQodGhpcy5fY3JlYXRlU291cmNlKHR5cGUsIHRoaXMudXJsKSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzWydpcycgKyB0eXBlWzBdLnRvVXBwZXJDYXNlKCkgKyB0eXBlLnN1YnN0cmluZygxKV0gPSB0cnVlO1xuXG4gICAgdGhpcy5kYXRhLmFkZEV2ZW50TGlzdGVuZXIoJ2Vycm9yJywgdGhpcy5fYm91bmRPbkVycm9yLCBmYWxzZSk7XG4gICAgdGhpcy5kYXRhLmFkZEV2ZW50TGlzdGVuZXIoJ2xvYWQnLCB0aGlzLl9ib3VuZENvbXBsZXRlLCBmYWxzZSk7XG4gICAgdGhpcy5kYXRhLmFkZEV2ZW50TGlzdGVuZXIoJ3Byb2dyZXNzJywgdGhpcy5fYm91bmRPblByb2dyZXNzLCBmYWxzZSk7XG4gICAgdGhpcy5kYXRhLmFkZEV2ZW50TGlzdGVuZXIoJ2NhbnBsYXl0aHJvdWdoJywgdGhpcy5fYm91bmRDb21wbGV0ZSwgZmFsc2UpO1xuXG4gICAgdGhpcy5kYXRhLmxvYWQoKTtcbn07XG5cbi8qKlxuICogTG9hZHMgdGhpcyByZXNvdXJjZXMgdXNpbmcgYW4gWE1MSHR0cFJlcXVlc3QuXG4gKlxuICogQHByaXZhdGVcbiAqL1xuUmVzb3VyY2UucHJvdG90eXBlLl9sb2FkWGhyID0gZnVuY3Rpb24gKCkge1xuICAgIC8vIGlmIHVuc2V0LCBkZXRlcm1pbmUgdGhlIHZhbHVlXG4gICAgaWYgKHR5cGVvZiB0aGlzLnhoclR5cGUgIT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHRoaXMueGhyVHlwZSA9IHRoaXMuX2RldGVybWluZVhoclR5cGUoKTtcbiAgICB9XG5cbiAgICB2YXIgeGhyID0gdGhpcy54aHIgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTtcblxuICAgIC8vIHNldCB0aGUgcmVxdWVzdCB0eXBlIGFuZCB1cmxcbiAgICB4aHIub3BlbignR0VUJywgdGhpcy51cmwsIHRydWUpO1xuXG4gICAgLy8gbG9hZCBqc29uIGFzIHRleHQgYW5kIHBhcnNlIGl0IG91cnNlbHZlcy4gV2UgZG8gdGhpcyBiZWNhdXNlIHNvbWUgYnJvd3NlcnNcbiAgICAvLyAqY291Z2gqIHNhZmFyaSAqY291Z2gqIGNhbid0IGRlYWwgd2l0aCBpdC5cbiAgICBpZiAodGhpcy54aHJUeXBlID09PSBSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRS5KU09OIHx8IHRoaXMueGhyVHlwZSA9PT0gUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuRE9DVU1FTlQpIHtcbiAgICAgICAgeGhyLnJlc3BvbnNlVHlwZSA9IFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLlRFWFQ7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICB4aHIucmVzcG9uc2VUeXBlID0gdGhpcy54aHJUeXBlO1xuICAgIH1cblxuICAgIHhoci5hZGRFdmVudExpc3RlbmVyKCdlcnJvcicsIHRoaXMuX2JvdW5kWGhyT25FcnJvciwgZmFsc2UpO1xuICAgIHhoci5hZGRFdmVudExpc3RlbmVyKCdhYm9ydCcsIHRoaXMuX2JvdW5kWGhyT25BYm9ydCwgZmFsc2UpO1xuICAgIHhoci5hZGRFdmVudExpc3RlbmVyKCdwcm9ncmVzcycsIHRoaXMuX2JvdW5kT25Qcm9ncmVzcywgZmFsc2UpO1xuICAgIHhoci5hZGRFdmVudExpc3RlbmVyKCdsb2FkJywgdGhpcy5fYm91bmRYaHJPbkxvYWQsIGZhbHNlKTtcblxuICAgIHhoci5zZW5kKCk7XG59O1xuXG4vKipcbiAqIExvYWRzIHRoaXMgcmVzb3VyY2VzIHVzaW5nIGFuIFhEb21haW5SZXF1ZXN0LiBUaGlzIGlzIGhlcmUgYmVjYXVzZSB3ZSBuZWVkIHRvIHN1cHBvcnQgSUU5IChncm9zcykuXG4gKlxuICogQHByaXZhdGVcbiAqL1xuUmVzb3VyY2UucHJvdG90eXBlLl9sb2FkWGRyID0gZnVuY3Rpb24gKCkge1xuICAgIC8vIGlmIHVuc2V0LCBkZXRlcm1pbmUgdGhlIHZhbHVlXG4gICAgaWYgKHR5cGVvZiB0aGlzLnhoclR5cGUgIT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHRoaXMueGhyVHlwZSA9IHRoaXMuX2RldGVybWluZVhoclR5cGUoKTtcbiAgICB9XG5cbiAgICB2YXIgeGRyID0gdGhpcy54aHIgPSBuZXcgWERvbWFpblJlcXVlc3QoKTtcblxuICAgIC8vIFhEb21haW5SZXF1ZXN0IGhhcyBhIGZldyBxdWlya3MuIE9jY2FzaW9uYWxseSBpdCB3aWxsIGFib3J0IHJlcXVlc3RzXG4gICAgLy8gQSB3YXkgdG8gYXZvaWQgdGhpcyBpcyB0byBtYWtlIHN1cmUgQUxMIGNhbGxiYWNrcyBhcmUgc2V0IGV2ZW4gaWYgbm90IHVzZWRcbiAgICAvLyBNb3JlIGluZm8gaGVyZTogaHR0cDovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy8xNTc4Njk2Ni94ZG9tYWlucmVxdWVzdC1hYm9ydHMtcG9zdC1vbi1pZS05XG4gICAgeGRyLnRpbWVvdXQgPSA1MDAwO1xuXG4gICAgeGRyLm9uZXJyb3IgPSB0aGlzLl9ib3VuZFhock9uRXJyb3I7XG4gICAgeGRyLm9udGltZW91dCA9IHRoaXMuX2JvdW5kWGRyT25UaW1lb3V0O1xuICAgIHhkci5vbnByb2dyZXNzID0gdGhpcy5fYm91bmRPblByb2dyZXNzO1xuICAgIHhkci5vbmxvYWQgPSB0aGlzLl9ib3VuZFhock9uTG9hZDtcblxuICAgIHhkci5vcGVuKCdHRVQnLCB0aGlzLnVybCwgdHJ1ZSk7XG5cbiAgICAvLyAgTm90ZTogVGhlIHhkci5zZW5kKCkgY2FsbCBpcyB3cmFwcGVkIGluIGEgdGltZW91dCB0byBwcmV2ZW50IGFuIGlzc3VlIHdpdGggdGhlIGludGVyZmFjZSB3aGVyZSBzb21lIHJlcXVlc3RzIGFyZSBsb3N0XG4gICAgLy8gIGlmIG11bHRpcGxlIFhEb21haW5SZXF1ZXN0cyBhcmUgYmVpbmcgc2VudCBhdCB0aGUgc2FtZSB0aW1lLlxuICAgIC8vIFNvbWUgaW5mbyBoZXJlOiBodHRwczovL2dpdGh1Yi5jb20vcGhvdG9uc3Rvcm0vcGhhc2VyL2lzc3Vlcy8xMjQ4XG4gICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICAgIHhkci5zZW5kKCk7XG4gICAgfSwgMCk7XG59O1xuXG4vKipcbiAqIENyZWF0ZXMgYSBzb3VyY2UgdXNlZCBpbiBsb2FkaW5nIHZpYSBhbiBlbGVtZW50LlxuICpcbiAqIEBwYXJhbSB0eXBlIHtzdHJpbmd9IFRoZSBlbGVtZW50IHR5cGUgKHZpZGVvIG9yIGF1ZGlvKS5cbiAqIEBwYXJhbSB1cmwge3N0cmluZ30gVGhlIHNvdXJjZSBVUkwgdG8gbG9hZCBmcm9tLlxuICogQHBhcmFtIFttaW1lXSB7c3RyaW5nfSBUaGUgbWltZSB0eXBlIG9mIHRoZSB2aWRlb1xuICogQHByaXZhdGVcbiAqL1xuUmVzb3VyY2UucHJvdG90eXBlLl9jcmVhdGVTb3VyY2UgPSBmdW5jdGlvbiAodHlwZSwgdXJsLCBtaW1lKSB7XG4gICAgaWYgKCFtaW1lKSB7XG4gICAgICAgIG1pbWUgPSB0eXBlICsgJy8nICsgdXJsLnN1YnN0cih1cmwubGFzdEluZGV4T2YoJy4nKSArIDEpO1xuICAgIH1cblxuICAgIHZhciBzb3VyY2UgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzb3VyY2UnKTtcblxuICAgIHNvdXJjZS5zcmMgPSB1cmw7XG4gICAgc291cmNlLnR5cGUgPSBtaW1lO1xuXG4gICAgcmV0dXJuIHNvdXJjZTtcbn07XG5cbi8qKlxuICogQ2FsbGVkIGlmIGEgbG9hZCBlcnJvcnMgb3V0LlxuICpcbiAqIEBwYXJhbSBldmVudCB7RXZlbnR9IFRoZSBlcnJvciBldmVudCBmcm9tIHRoZSBlbGVtZW50IHRoYXQgZW1pdHMgaXQuXG4gKiBAcHJpdmF0ZVxuICovXG5SZXNvdXJjZS5wcm90b3R5cGUuX29uRXJyb3IgPSBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICB0aGlzLmVycm9yID0gbmV3IEVycm9yKCdGYWlsZWQgdG8gbG9hZCBlbGVtZW50IHVzaW5nICcgKyBldmVudC50YXJnZXQubm9kZU5hbWUpO1xuICAgIHRoaXMuY29tcGxldGUoKTtcbn07XG5cbi8qKlxuICogQ2FsbGVkIGlmIGEgbG9hZCBwcm9ncmVzcyBldmVudCBmaXJlcyBmb3IgeGhyL3hkci5cbiAqXG4gKiBAZmlyZXMgcHJvZ3Jlc3NcbiAqIEBwYXJhbSBldmVudCB7WE1MSHR0cFJlcXVlc3RQcm9ncmVzc0V2ZW50fEV2ZW50fVxuICogQHByaXZhdGVcbiAqL1xuUmVzb3VyY2UucHJvdG90eXBlLl9vblByb2dyZXNzID0gIGZ1bmN0aW9uIChldmVudCkge1xuICAgIGlmIChldmVudCAmJiBldmVudC5sZW5ndGhDb21wdXRhYmxlKSB7XG4gICAgICAgIHRoaXMuZW1pdCgncHJvZ3Jlc3MnLCB0aGlzLCBldmVudC5sb2FkZWQgLyBldmVudC50b3RhbCk7XG4gICAgfVxufTtcblxuLyoqXG4gKiBDYWxsZWQgaWYgYW4gZXJyb3IgZXZlbnQgZmlyZXMgZm9yIHhoci94ZHIuXG4gKlxuICogQHBhcmFtIGV2ZW50IHtYTUxIdHRwUmVxdWVzdEVycm9yRXZlbnR8RXZlbnR9XG4gKiBAcHJpdmF0ZVxuICovXG5SZXNvdXJjZS5wcm90b3R5cGUuX3hock9uRXJyb3IgPSBmdW5jdGlvbiAoKSB7XG4gICAgdGhpcy5lcnJvciA9IG5ldyBFcnJvcihcbiAgICAgICAgcmVxVHlwZSh0aGlzLnhocikgKyAnIFJlcXVlc3QgZmFpbGVkLiAnICtcbiAgICAgICAgJ1N0YXR1czogJyArIHRoaXMueGhyLnN0YXR1cyArICcsIHRleHQ6IFwiJyArIHRoaXMueGhyLnN0YXR1c1RleHQgKyAnXCInXG4gICAgKTtcblxuICAgIHRoaXMuY29tcGxldGUoKTtcbn07XG5cbi8qKlxuICogQ2FsbGVkIGlmIGFuIGFib3J0IGV2ZW50IGZpcmVzIGZvciB4aHIuXG4gKlxuICogQHBhcmFtIGV2ZW50IHtYTUxIdHRwUmVxdWVzdEFib3J0RXZlbnR9XG4gKiBAcHJpdmF0ZVxuICovXG5SZXNvdXJjZS5wcm90b3R5cGUuX3hock9uQWJvcnQgPSBmdW5jdGlvbiAoKSB7XG4gICAgdGhpcy5lcnJvciA9IG5ldyBFcnJvcihyZXFUeXBlKHRoaXMueGhyKSArICcgUmVxdWVzdCB3YXMgYWJvcnRlZCBieSB0aGUgdXNlci4nKTtcbiAgICB0aGlzLmNvbXBsZXRlKCk7XG59O1xuXG4vKipcbiAqIENhbGxlZCBpZiBhIHRpbWVvdXQgZXZlbnQgZmlyZXMgZm9yIHhkci5cbiAqXG4gKiBAcGFyYW0gZXZlbnQge0V2ZW50fVxuICogQHByaXZhdGVcbiAqL1xuUmVzb3VyY2UucHJvdG90eXBlLl94ZHJPblRpbWVvdXQgPSBmdW5jdGlvbiAoKSB7XG4gICAgdGhpcy5lcnJvciA9IG5ldyBFcnJvcihyZXFUeXBlKHRoaXMueGhyKSArICcgUmVxdWVzdCB0aW1lZCBvdXQuJyk7XG4gICAgdGhpcy5jb21wbGV0ZSgpO1xufTtcblxuLyoqXG4gKiBDYWxsZWQgd2hlbiBkYXRhIHN1Y2Nlc3NmdWxseSBsb2FkcyBmcm9tIGFuIHhoci94ZHIgcmVxdWVzdC5cbiAqXG4gKiBAcGFyYW0gZXZlbnQge1hNTEh0dHBSZXF1ZXN0TG9hZEV2ZW50fEV2ZW50fVxuICogQHByaXZhdGVcbiAqL1xuUmVzb3VyY2UucHJvdG90eXBlLl94aHJPbkxvYWQgPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHhociA9IHRoaXMueGhyLFxuICAgICAgICBzdGF0dXMgPSB4aHIuc3RhdHVzICE9PSB1bmRlZmluZWQgPyB4aHIuc3RhdHVzIDogMjAwOyAvL1hEUiBoYXMgbm8gYC5zdGF0dXNgLCBhc3N1bWUgMjAwLlxuXG4gICAgLy8gc3RhdHVzIGNhbiBiZSAwIHdoZW4gdXNpbmcgdGhlIGZpbGU6Ly8gcHJvdG9jb2wsIGFsc28gY2hlY2sgaWYgYSByZXNwb25zZSB3YXMgZm91bmRcbiAgICBpZiAoc3RhdHVzID09PSAyMDAgfHwgc3RhdHVzID09PSAyMDQgfHwgKHN0YXR1cyA9PT0gMCAmJiB4aHIucmVzcG9uc2VUZXh0Lmxlbmd0aCA+IDApKSB7XG4gICAgICAgIC8vIGlmIHRleHQsIGp1c3QgcmV0dXJuIGl0XG4gICAgICAgIGlmICh0aGlzLnhoclR5cGUgPT09IFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLlRFWFQpIHtcbiAgICAgICAgICAgIHRoaXMuZGF0YSA9IHhoci5yZXNwb25zZVRleHQ7XG4gICAgICAgIH1cbiAgICAgICAgLy8gaWYganNvbiwgcGFyc2UgaW50byBqc29uIG9iamVjdFxuICAgICAgICBlbHNlIGlmICh0aGlzLnhoclR5cGUgPT09IFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkpTT04pIHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgdGhpcy5kYXRhID0gSlNPTi5wYXJzZSh4aHIucmVzcG9uc2VUZXh0KTtcbiAgICAgICAgICAgICAgICB0aGlzLmlzSnNvbiA9IHRydWU7XG4gICAgICAgICAgICB9IGNhdGNoKGUpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmVycm9yID0gbmV3IEVycm9yKCdFcnJvciB0cnlpbmcgdG8gcGFyc2UgbG9hZGVkIGpzb246JywgZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8gaWYgeG1sLCBwYXJzZSBpbnRvIGFuIHhtbCBkb2N1bWVudCBvciBkaXYgZWxlbWVudFxuICAgICAgICBlbHNlIGlmICh0aGlzLnhoclR5cGUgPT09IFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkRPQ1VNRU5UKSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGlmICh3aW5kb3cuRE9NUGFyc2VyKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBkb21wYXJzZXIgPSBuZXcgRE9NUGFyc2VyKCk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGF0YSA9IGRvbXBhcnNlci5wYXJzZUZyb21TdHJpbmcoeGhyLnJlc3BvbnNlVGV4dCwgJ3RleHQveG1sJyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB2YXIgZGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgICAgICAgICAgICAgIGRpdi5pbm5lckhUTUwgPSB4aHIucmVzcG9uc2VUZXh0O1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmRhdGEgPSBkaXY7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXMuaXNYbWwgPSB0cnVlO1xuICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgIHRoaXMuZXJyb3IgPSBuZXcgRXJyb3IoJ0Vycm9yIHRyeWluZyB0byBwYXJzZSBsb2FkZWQgeG1sOicsIGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIG90aGVyIHR5cGVzIGp1c3QgcmV0dXJuIHRoZSByZXNwb25zZVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuZGF0YSA9IHhoci5yZXNwb25zZSB8fCB4aHIucmVzcG9uc2VUZXh0O1xuICAgICAgICB9XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICB0aGlzLmVycm9yID0gbmV3IEVycm9yKCdbJyArIHhoci5zdGF0dXMgKyAnXScgKyB4aHIuc3RhdHVzVGV4dCArICc6JyArIHhoci5yZXNwb25zZVVSTCk7XG4gICAgfVxuXG4gICAgdGhpcy5jb21wbGV0ZSgpO1xufTtcblxuZnVuY3Rpb24gcmVxVHlwZSh4aHIpIHtcbiAgICByZXR1cm4geGhyLnRvU3RyaW5nKCkucmVwbGFjZSgnb2JqZWN0ICcsICcnKTtcbn1cblxuLyoqXG4gKiBTZXRzIHRoZSBgY3Jvc3NPcmlnaW5gIHByb3BlcnR5IGZvciB0aGlzIHJlc291cmNlIGJhc2VkIG9uIGlmIHRoZSB1cmxcbiAqIGZvciB0aGlzIHJlc291cmNlIGlzIGNyb3NzLW9yaWdpbi4gSWYgY3Jvc3NPcmlnaW4gd2FzIG1hbnVhbGx5IHNldCwgdGhpc1xuICogZnVuY3Rpb24gZG9lcyBub3RoaW5nLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0gdXJsIHtzdHJpbmd9IFRoZSB1cmwgdG8gdGVzdC5cbiAqIEBwYXJhbSBbbG9jYXRpb249d2luZG93LmxvY2F0aW9uXSB7b2JqZWN0fSBUaGUgbG9jYXRpb24gb2JqZWN0IHRvIHRlc3QgYWdhaW5zdC5cbiAqIEByZXR1cm4ge3N0cmluZ30gVGhlIGNyb3NzT3JpZ2luIHZhbHVlIHRvIHVzZSAob3IgZW1wdHkgc3RyaW5nIGZvciBub25lKS5cbiAqL1xuUmVzb3VyY2UucHJvdG90eXBlLl9kZXRlcm1pbmVDcm9zc09yaWdpbiA9IGZ1bmN0aW9uICh1cmwsIGxvYykge1xuICAgIC8vIGRhdGE6IGFuZCBqYXZhc2NyaXB0OiB1cmxzIGFyZSBjb25zaWRlcmVkIHNhbWUtb3JpZ2luXG4gICAgaWYgKHVybC5pbmRleE9mKCdkYXRhOicpID09PSAwKSB7XG4gICAgICAgIHJldHVybiAnJztcbiAgICB9XG5cbiAgICAvLyBkZWZhdWx0IGlzIHdpbmRvdy5sb2NhdGlvblxuICAgIGxvYyA9IGxvYyB8fCB3aW5kb3cubG9jYXRpb247XG5cbiAgICBpZiAoIXRlbXBBbmNob3IpIHtcbiAgICAgICAgdGVtcEFuY2hvciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2EnKTtcbiAgICB9XG5cbiAgICAvLyBsZXQgdGhlIGJyb3dzZXIgZGV0ZXJtaW5lIHRoZSBmdWxsIGhyZWYgZm9yIHRoZSB1cmwgb2YgdGhpcyByZXNvdXJjZSBhbmQgdGhlblxuICAgIC8vIHBhcnNlIHdpdGggdGhlIG5vZGUgdXJsIGxpYiwgd2UgY2FuJ3QgdXNlIHRoZSBwcm9wZXJ0aWVzIG9mIHRoZSBhbmNob3IgZWxlbWVudFxuICAgIC8vIGJlY2F1c2UgdGhleSBkb24ndCB3b3JrIGluIElFOSA6KFxuICAgIHRlbXBBbmNob3IuaHJlZiA9IHVybDtcbiAgICB1cmwgPSBfdXJsLnBhcnNlKHRlbXBBbmNob3IuaHJlZik7XG5cbiAgICB2YXIgc2FtZVBvcnQgPSAoIXVybC5wb3J0ICYmIGxvYy5wb3J0ID09PSAnJykgfHwgKHVybC5wb3J0ID09PSBsb2MucG9ydCk7XG5cbiAgICAvLyBpZiBjcm9zcyBvcmlnaW5cbiAgICBpZiAodXJsLmhvc3RuYW1lICE9PSBsb2MuaG9zdG5hbWUgfHwgIXNhbWVQb3J0IHx8IHVybC5wcm90b2NvbCAhPT0gbG9jLnByb3RvY29sKSB7XG4gICAgICAgIHJldHVybiAnYW5vbnltb3VzJztcbiAgICB9XG5cbiAgICByZXR1cm4gJyc7XG59O1xuXG4vKipcbiAqIERldGVybWluZXMgdGhlIHJlc3BvbnNlVHlwZSBvZiBhbiBYSFIgcmVxdWVzdCBiYXNlZCBvbiB0aGUgZXh0ZW5zaW9uIG9mIHRoZVxuICogcmVzb3VyY2UgYmVpbmcgbG9hZGVkLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcmV0dXJuIHtSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRX0gVGhlIHJlc3BvbnNlVHlwZSB0byB1c2UuXG4gKi9cblJlc291cmNlLnByb3RvdHlwZS5fZGV0ZXJtaW5lWGhyVHlwZSA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gUmVzb3VyY2UuX3hoclR5cGVNYXBbdGhpcy5fZ2V0RXh0ZW5zaW9uKCldIHx8IFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLlRFWFQ7XG59O1xuXG5SZXNvdXJjZS5wcm90b3R5cGUuX2RldGVybWluZUxvYWRUeXBlID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBSZXNvdXJjZS5fbG9hZFR5cGVNYXBbdGhpcy5fZ2V0RXh0ZW5zaW9uKCldIHx8IFJlc291cmNlLkxPQURfVFlQRS5YSFI7XG59O1xuXG5SZXNvdXJjZS5wcm90b3R5cGUuX2dldEV4dGVuc2lvbiA9IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgdXJsID0gdGhpcy51cmwsXG4gICAgICAgIGV4dDtcblxuICAgIGlmICh0aGlzLmlzRGF0YVVybCkge1xuICAgICAgICB2YXIgc2xhc2hJbmRleCA9IHVybC5pbmRleE9mKCcvJyk7XG4gICAgICAgIGV4dCA9IHVybC5zdWJzdHJpbmcoc2xhc2hJbmRleCArIDEsIHVybC5pbmRleE9mKCc7Jywgc2xhc2hJbmRleCkpO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgdmFyIHF1ZXJ5U3RhcnQgPSB1cmwuaW5kZXhPZignPycpO1xuICAgICAgICBpZiAocXVlcnlTdGFydCAhPT0gLTEpIHtcbiAgICAgICAgICAgIHVybCA9IHVybC5zdWJzdHJpbmcoMCwgcXVlcnlTdGFydCk7XG4gICAgICAgIH1cblxuICAgICAgICBleHQgPSB1cmwuc3Vic3RyaW5nKHVybC5sYXN0SW5kZXhPZignLicpICsgMSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGV4dDtcbn07XG5cbi8qKlxuICogRGV0ZXJtaW5lcyB0aGUgbWltZSB0eXBlIG9mIGFuIFhIUiByZXF1ZXN0IGJhc2VkIG9uIHRoZSByZXNwb25zZVR5cGUgb2ZcbiAqIHJlc291cmNlIGJlaW5nIGxvYWRlZC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHJldHVybiB7c3RyaW5nfSBUaGUgbWltZSB0eXBlIHRvIHVzZS5cbiAqL1xuUmVzb3VyY2UucHJvdG90eXBlLl9nZXRNaW1lRnJvbVhoclR5cGUgPSBmdW5jdGlvbiAodHlwZSkge1xuICAgIHN3aXRjaCh0eXBlKSB7XG4gICAgICAgIGNhc2UgUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuQlVGRkVSOlxuICAgICAgICAgICAgcmV0dXJuICdhcHBsaWNhdGlvbi9vY3RldC1iaW5hcnknO1xuXG4gICAgICAgIGNhc2UgUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuQkxPQjpcbiAgICAgICAgICAgIHJldHVybiAnYXBwbGljYXRpb24vYmxvYic7XG5cbiAgICAgICAgY2FzZSBSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRS5ET0NVTUVOVDpcbiAgICAgICAgICAgIHJldHVybiAnYXBwbGljYXRpb24veG1sJztcblxuICAgICAgICBjYXNlIFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkpTT046XG4gICAgICAgICAgICByZXR1cm4gJ2FwcGxpY2F0aW9uL2pzb24nO1xuXG4gICAgICAgIGNhc2UgUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuREVGQVVMVDpcbiAgICAgICAgY2FzZSBSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRS5URVhUOlxuICAgICAgICAgICAgLyogZmFsbHMgdGhyb3VnaCAqL1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgcmV0dXJuICd0ZXh0L3BsYWluJztcblxuICAgIH1cbn07XG5cbi8qKlxuICogVGhlIHR5cGVzIG9mIGxvYWRpbmcgYSByZXNvdXJjZSBjYW4gdXNlLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBjb25zdGFudFxuICogQHByb3BlcnR5IHtvYmplY3R9IExPQURfVFlQRVxuICogQHByb3BlcnR5IHtudW1iZXJ9IExPQURfVFlQRS5YSFIgLSBVc2VzIFhNTEh0dHBSZXF1ZXN0IHRvIGxvYWQgdGhlIHJlc291cmNlLlxuICogQHByb3BlcnR5IHtudW1iZXJ9IExPQURfVFlQRS5JTUFHRSAtIFVzZXMgYW4gYEltYWdlYCBvYmplY3QgdG8gbG9hZCB0aGUgcmVzb3VyY2UuXG4gKiBAcHJvcGVydHkge251bWJlcn0gTE9BRF9UWVBFLkFVRElPIC0gVXNlcyBhbiBgQXVkaW9gIG9iamVjdCB0byBsb2FkIHRoZSByZXNvdXJjZS5cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBMT0FEX1RZUEUuVklERU8gLSBVc2VzIGEgYFZpZGVvYCBvYmplY3QgdG8gbG9hZCB0aGUgcmVzb3VyY2UuXG4gKi9cblJlc291cmNlLkxPQURfVFlQRSA9IHtcbiAgICBYSFI6ICAgIDEsXG4gICAgSU1BR0U6ICAyLFxuICAgIEFVRElPOiAgMyxcbiAgICBWSURFTzogIDRcbn07XG5cbi8qKlxuICogVGhlIFhIUiByZWFkeSBzdGF0ZXMsIHVzZWQgaW50ZXJuYWxseS5cbiAqXG4gKiBAc3RhdGljXG4gKiBAY29uc3RhbnRcbiAqIEBwcm9wZXJ0eSB7b2JqZWN0fSBYSFJfUkVBRFlfU1RBVEVcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBYSFJfUkVBRFlfU1RBVEUuVU5TRU5UIC0gb3BlbigpaGFzIG5vdCBiZWVuIGNhbGxlZCB5ZXQuXG4gKiBAcHJvcGVydHkge251bWJlcn0gWEhSX1JFQURZX1NUQVRFLk9QRU5FRCAtIHNlbmQoKWhhcyBub3QgYmVlbiBjYWxsZWQgeWV0LlxuICogQHByb3BlcnR5IHtudW1iZXJ9IFhIUl9SRUFEWV9TVEFURS5IRUFERVJTX1JFQ0VJVkVEIC0gc2VuZCgpIGhhcyBiZWVuIGNhbGxlZCwgYW5kIGhlYWRlcnMgYW5kIHN0YXR1cyBhcmUgYXZhaWxhYmxlLlxuICogQHByb3BlcnR5IHtudW1iZXJ9IFhIUl9SRUFEWV9TVEFURS5MT0FESU5HIC0gRG93bmxvYWRpbmc7IHJlc3BvbnNlVGV4dCBob2xkcyBwYXJ0aWFsIGRhdGEuXG4gKiBAcHJvcGVydHkge251bWJlcn0gWEhSX1JFQURZX1NUQVRFLkRPTkUgLSBUaGUgb3BlcmF0aW9uIGlzIGNvbXBsZXRlLlxuICovXG5SZXNvdXJjZS5YSFJfUkVBRFlfU1RBVEUgPSB7XG4gICAgVU5TRU5UOiAwLFxuICAgIE9QRU5FRDogMSxcbiAgICBIRUFERVJTX1JFQ0VJVkVEOiAyLFxuICAgIExPQURJTkc6IDMsXG4gICAgRE9ORTogNFxufTtcblxuLyoqXG4gKiBUaGUgWEhSIHJlYWR5IHN0YXRlcywgdXNlZCBpbnRlcm5hbGx5LlxuICpcbiAqIEBzdGF0aWNcbiAqIEBjb25zdGFudFxuICogQHByb3BlcnR5IHtvYmplY3R9IFhIUl9SRVNQT05TRV9UWVBFXG4gKiBAcHJvcGVydHkge3N0cmluZ30gWEhSX1JFU1BPTlNFX1RZUEUuREVGQVVMVCAtIGRlZmF1bHRzIHRvIHRleHRcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBYSFJfUkVTUE9OU0VfVFlQRS5CVUZGRVIgLSBBcnJheUJ1ZmZlclxuICogQHByb3BlcnR5IHtzdHJpbmd9IFhIUl9SRVNQT05TRV9UWVBFLkJMT0IgLSBCbG9iXG4gKiBAcHJvcGVydHkge3N0cmluZ30gWEhSX1JFU1BPTlNFX1RZUEUuRE9DVU1FTlQgLSBEb2N1bWVudFxuICogQHByb3BlcnR5IHtzdHJpbmd9IFhIUl9SRVNQT05TRV9UWVBFLkpTT04gLSBPYmplY3RcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBYSFJfUkVTUE9OU0VfVFlQRS5URVhUIC0gU3RyaW5nXG4gKi9cblJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFID0ge1xuICAgIERFRkFVTFQ6ICAgICd0ZXh0JyxcbiAgICBCVUZGRVI6ICAgICAnYXJyYXlidWZmZXInLFxuICAgIEJMT0I6ICAgICAgICdibG9iJyxcbiAgICBET0NVTUVOVDogICAnZG9jdW1lbnQnLFxuICAgIEpTT046ICAgICAgICdqc29uJyxcbiAgICBURVhUOiAgICAgICAndGV4dCdcbn07XG5cblJlc291cmNlLl9sb2FkVHlwZU1hcCA9IHtcbiAgICAnZ2lmJzogICAgICBSZXNvdXJjZS5MT0FEX1RZUEUuSU1BR0UsXG4gICAgJ3BuZyc6ICAgICAgUmVzb3VyY2UuTE9BRF9UWVBFLklNQUdFLFxuICAgICdibXAnOiAgICAgIFJlc291cmNlLkxPQURfVFlQRS5JTUFHRSxcbiAgICAnanBnJzogICAgICBSZXNvdXJjZS5MT0FEX1RZUEUuSU1BR0UsXG4gICAgJ2pwZWcnOiAgICAgUmVzb3VyY2UuTE9BRF9UWVBFLklNQUdFLFxuICAgICd0aWYnOiAgICAgIFJlc291cmNlLkxPQURfVFlQRS5JTUFHRSxcbiAgICAndGlmZic6ICAgICBSZXNvdXJjZS5MT0FEX1RZUEUuSU1BR0UsXG4gICAgJ3dlYnAnOiAgICAgUmVzb3VyY2UuTE9BRF9UWVBFLklNQUdFLFxuICAgICd0Z2EnOiAgICAgIFJlc291cmNlLkxPQURfVFlQRS5JTUFHRVxufTtcblxuUmVzb3VyY2UuX3hoclR5cGVNYXAgPSB7XG4gICAgLy8geG1sXG4gICAgJ3hodG1sJzogICAgUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuRE9DVU1FTlQsXG4gICAgJ2h0bWwnOiAgICAgUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuRE9DVU1FTlQsXG4gICAgJ2h0bSc6ICAgICAgUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuRE9DVU1FTlQsXG4gICAgJ3htbCc6ICAgICAgUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuRE9DVU1FTlQsXG4gICAgJ3RteCc6ICAgICAgUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuRE9DVU1FTlQsXG4gICAgJ3RzeCc6ICAgICAgUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuRE9DVU1FTlQsXG4gICAgJ3N2Zyc6ICAgICAgUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuRE9DVU1FTlQsXG5cbiAgICAvLyBpbWFnZXNcbiAgICAnZ2lmJzogICAgICBSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRS5CTE9CLFxuICAgICdwbmcnOiAgICAgIFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkJMT0IsXG4gICAgJ2JtcCc6ICAgICAgUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuQkxPQixcbiAgICAnanBnJzogICAgICBSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRS5CTE9CLFxuICAgICdqcGVnJzogICAgIFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkJMT0IsXG4gICAgJ3RpZic6ICAgICAgUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuQkxPQixcbiAgICAndGlmZic6ICAgICBSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRS5CTE9CLFxuICAgICd3ZWJwJzogICAgIFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkJMT0IsXG4gICAgJ3RnYSc6ICAgICAgUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuQkxPQixcblxuICAgIC8vIGpzb25cbiAgICAnanNvbic6ICAgICBSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRS5KU09OLFxuXG4gICAgLy8gdGV4dFxuICAgICd0ZXh0JzogICAgIFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLlRFWFQsXG4gICAgJ3R4dCc6ICAgICAgUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuVEVYVFxufTtcblxuLyoqXG4gKiBTZXRzIHRoZSBsb2FkIHR5cGUgdG8gYmUgdXNlZCBmb3IgYSBzcGVjaWZpYyBleHRlbnNpb24uXG4gKlxuICogQHN0YXRpY1xuICogQHBhcmFtIGV4dG5hbWUge3N0cmluZ30gVGhlIGV4dGVuc2lvbiB0byBzZXQgdGhlIHR5cGUgZm9yLCBlLmcuIFwicG5nXCIgb3IgXCJmbnRcIlxuICogQHBhcmFtIGxvYWRUeXBlIHtSZXNvdXJjZS5MT0FEX1RZUEV9IFRoZSBsb2FkIHR5cGUgdG8gc2V0IGl0IHRvLlxuICovXG5SZXNvdXJjZS5zZXRFeHRlbnNpb25Mb2FkVHlwZSA9IGZ1bmN0aW9uIChleHRuYW1lLCBsb2FkVHlwZSkge1xuICAgIHNldEV4dE1hcChSZXNvdXJjZS5fbG9hZFR5cGVNYXAsIGV4dG5hbWUsIGxvYWRUeXBlKTtcbn07XG5cbi8qKlxuICogU2V0cyB0aGUgbG9hZCB0eXBlIHRvIGJlIHVzZWQgZm9yIGEgc3BlY2lmaWMgZXh0ZW5zaW9uLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBwYXJhbSBleHRuYW1lIHtzdHJpbmd9IFRoZSBleHRlbnNpb24gdG8gc2V0IHRoZSB0eXBlIGZvciwgZS5nLiBcInBuZ1wiIG9yIFwiZm50XCJcbiAqIEBwYXJhbSB4aHJUeXBlIHtSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRX0gVGhlIHhociB0eXBlIHRvIHNldCBpdCB0by5cbiAqL1xuUmVzb3VyY2Uuc2V0RXh0ZW5zaW9uWGhyVHlwZSA9IGZ1bmN0aW9uIChleHRuYW1lLCB4aHJUeXBlKSB7XG4gICAgc2V0RXh0TWFwKFJlc291cmNlLl94aHJUeXBlTWFwLCBleHRuYW1lLCB4aHJUeXBlKTtcbn07XG5cbmZ1bmN0aW9uIHNldEV4dE1hcChtYXAsIGV4dG5hbWUsIHZhbCkge1xuICAgIGlmIChleHRuYW1lICYmIGV4dG5hbWUuaW5kZXhPZignLicpID09PSAwKSB7XG4gICAgICAgIGV4dG5hbWUgPSBleHRuYW1lLnN1YnN0cmluZygxKTtcbiAgICB9XG5cbiAgICBpZiAoIWV4dG5hbWUpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIG1hcFtleHRuYW1lXSA9IHZhbDtcbn1cbiIsIm1vZHVsZS5leHBvcnRzID0ge1xuXG4gICAgLy8gcHJpdmF0ZSBwcm9wZXJ0eVxuICAgIF9rZXlTdHI6IFwiQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkrLz1cIixcblxuICAgIGVuY29kZUJpbmFyeTogZnVuY3Rpb24gKGlucHV0KSB7XG4gICAgICAgIHZhciBvdXRwdXQgPSBcIlwiO1xuICAgICAgICB2YXIgYnl0ZWJ1ZmZlcjtcbiAgICAgICAgdmFyIGVuY29kZWRDaGFySW5kZXhlcyA9IG5ldyBBcnJheSg0KTtcbiAgICAgICAgdmFyIGlueCA9IDA7XG4gICAgICAgIHZhciBqbnggPSAwO1xuICAgICAgICB2YXIgcGFkZGluZ0J5dGVzID0gMDtcblxuICAgICAgICB3aGlsZSAoaW54IDwgaW5wdXQubGVuZ3RoKSB7XG4gICAgICAgICAgICAvLyBGaWxsIGJ5dGUgYnVmZmVyIGFycmF5XG4gICAgICAgICAgICBieXRlYnVmZmVyID0gbmV3IEFycmF5KDMpO1xuICAgICAgICAgICAgZm9yIChqbnggPSAwOyBqbnggPCBieXRlYnVmZmVyLmxlbmd0aDsgam54KyspIHtcbiAgICAgICAgICAgICAgICBpZiAoaW54IDwgaW5wdXQubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIHRocm93IGF3YXkgaGlnaC1vcmRlciBieXRlLCBhcyBkb2N1bWVudGVkIGF0OlxuICAgICAgICAgICAgICAgICAgICAvLyBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9Fbi9Vc2luZ19YTUxIdHRwUmVxdWVzdCNIYW5kbGluZ19iaW5hcnlfZGF0YVxuICAgICAgICAgICAgICAgICAgICBieXRlYnVmZmVyW2pueF0gPSBpbnB1dC5jaGFyQ29kZUF0KGlueCsrKSAmIDB4ZmY7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBieXRlYnVmZmVyW2pueF0gPSAwO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gR2V0IGVhY2ggZW5jb2RlZCBjaGFyYWN0ZXIsIDYgYml0cyBhdCBhIHRpbWVcbiAgICAgICAgICAgIC8vIGluZGV4IDE6IGZpcnN0IDYgYml0c1xuICAgICAgICAgICAgZW5jb2RlZENoYXJJbmRleGVzWzBdID0gYnl0ZWJ1ZmZlclswXSA+PiAyO1xuICAgICAgICAgICAgLy8gaW5kZXggMjogc2Vjb25kIDYgYml0cyAoMiBsZWFzdCBzaWduaWZpY2FudCBiaXRzIGZyb20gaW5wdXQgYnl0ZSAxICsgNCBtb3N0IHNpZ25pZmljYW50IGJpdHMgZnJvbSBieXRlIDIpXG4gICAgICAgICAgICBlbmNvZGVkQ2hhckluZGV4ZXNbMV0gPSAoKGJ5dGVidWZmZXJbMF0gJiAweDMpIDw8IDQpIHwgKGJ5dGVidWZmZXJbMV0gPj4gNCk7XG4gICAgICAgICAgICAvLyBpbmRleCAzOiB0aGlyZCA2IGJpdHMgKDQgbGVhc3Qgc2lnbmlmaWNhbnQgYml0cyBmcm9tIGlucHV0IGJ5dGUgMiArIDIgbW9zdCBzaWduaWZpY2FudCBiaXRzIGZyb20gYnl0ZSAzKVxuICAgICAgICAgICAgZW5jb2RlZENoYXJJbmRleGVzWzJdID0gKChieXRlYnVmZmVyWzFdICYgMHgwZikgPDwgMikgfCAoYnl0ZWJ1ZmZlclsyXSA+PiA2KTtcbiAgICAgICAgICAgIC8vIGluZGV4IDM6IGZvcnRoIDYgYml0cyAoNiBsZWFzdCBzaWduaWZpY2FudCBiaXRzIGZyb20gaW5wdXQgYnl0ZSAzKVxuICAgICAgICAgICAgZW5jb2RlZENoYXJJbmRleGVzWzNdID0gYnl0ZWJ1ZmZlclsyXSAmIDB4M2Y7XG5cbiAgICAgICAgICAgIC8vIERldGVybWluZSB3aGV0aGVyIHBhZGRpbmcgaGFwcGVuZWQsIGFuZCBhZGp1c3QgYWNjb3JkaW5nbHlcbiAgICAgICAgICAgIHBhZGRpbmdCeXRlcyA9IGlueCAtIChpbnB1dC5sZW5ndGggLSAxKTtcbiAgICAgICAgICAgIHN3aXRjaCAocGFkZGluZ0J5dGVzKSB7XG4gICAgICAgICAgICAgICAgY2FzZSAyOlxuICAgICAgICAgICAgICAgICAgICAvLyBTZXQgbGFzdCAyIGNoYXJhY3RlcnMgdG8gcGFkZGluZyBjaGFyXG4gICAgICAgICAgICAgICAgICAgIGVuY29kZWRDaGFySW5kZXhlc1szXSA9IDY0O1xuICAgICAgICAgICAgICAgICAgICBlbmNvZGVkQ2hhckluZGV4ZXNbMl0gPSA2NDtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICAgICAgICAgIC8vIFNldCBsYXN0IGNoYXJhY3RlciB0byBwYWRkaW5nIGNoYXJcbiAgICAgICAgICAgICAgICAgICAgZW5jb2RlZENoYXJJbmRleGVzWzNdID0gNjQ7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7IC8vIE5vIHBhZGRpbmcgLSBwcm9jZWVkXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIE5vdyB3ZSB3aWxsIGdyYWIgZWFjaCBhcHByb3ByaWF0ZSBjaGFyYWN0ZXIgb3V0IG9mIG91ciBrZXlzdHJpbmdcbiAgICAgICAgICAgIC8vIGJhc2VkIG9uIG91ciBpbmRleCBhcnJheSBhbmQgYXBwZW5kIGl0IHRvIHRoZSBvdXRwdXQgc3RyaW5nXG4gICAgICAgICAgICBmb3IgKGpueCA9IDA7IGpueCA8IGVuY29kZWRDaGFySW5kZXhlcy5sZW5ndGg7IGpueCsrKSB7XG4gICAgICAgICAgICAgICAgb3V0cHV0ICs9IHRoaXMuX2tleVN0ci5jaGFyQXQoZW5jb2RlZENoYXJJbmRleGVzW2pueF0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBvdXRwdXQ7XG4gICAgfVxufTtcbiIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9Mb2FkZXInKTtcblxubW9kdWxlLmV4cG9ydHMuUmVzb3VyY2UgPSByZXF1aXJlKCcuL1Jlc291cmNlJyk7XG5cbm1vZHVsZS5leHBvcnRzLm1pZGRsZXdhcmUgPSB7XG4gICAgY2FjaGluZzoge1xuICAgICAgICBtZW1vcnk6IHJlcXVpcmUoJy4vbWlkZGxld2FyZXMvY2FjaGluZy9tZW1vcnknKVxuICAgIH0sXG4gICAgcGFyc2luZzoge1xuICAgICAgICBibG9iOiByZXF1aXJlKCcuL21pZGRsZXdhcmVzL3BhcnNpbmcvYmxvYicpXG4gICAgfVxufTtcbiIsIi8vIGEgc2ltcGxlIGluLW1lbW9yeSBjYWNoZSBmb3IgcmVzb3VyY2VzXG52YXIgY2FjaGUgPSB7fTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChyZXNvdXJjZSwgbmV4dCkge1xuICAgICAgICAvLyBpZiBjYWNoZWQsIHRoZW4gc2V0IGRhdGEgYW5kIGNvbXBsZXRlIHRoZSByZXNvdXJjZVxuICAgICAgICBpZiAoY2FjaGVbcmVzb3VyY2UudXJsXSkge1xuICAgICAgICAgICAgcmVzb3VyY2UuZGF0YSA9IGNhY2hlW3Jlc291cmNlLnVybF07XG4gICAgICAgICAgICByZXNvdXJjZS5jb21wbGV0ZSgpO1xuICAgICAgICB9XG4gICAgICAgIC8vIGlmIG5vdCBjYWNoZWQsIHdhaXQgZm9yIGNvbXBsZXRlIGFuZCBzdG9yZSBpdCBpbiB0aGUgY2FjaGUuXG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcmVzb3VyY2Uub25jZSgnY29tcGxldGUnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICBjYWNoZVt0aGlzLnVybF0gPSB0aGlzLmRhdGE7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBcbiAgICAgICAgbmV4dCgpO1xuICAgIH07XG59O1xuIiwidmFyIFJlc291cmNlID0gcmVxdWlyZSgnLi4vLi4vUmVzb3VyY2UnKSxcbiAgICBiNjQgPSByZXF1aXJlKCcuLi8uLi9iNjQnKTtcblxud2luZG93LlVSTCA9IHdpbmRvdy5VUkwgfHwgd2luZG93LndlYmtpdFVSTDtcblxuLy8gYSBtaWRkbGV3YXJlIGZvciB0cmFuc2Zvcm1pbmcgWEhSIGxvYWRlZCBCbG9icyBpbnRvIG1vcmUgdXNlZnVsIG9iamVjdHNcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChyZXNvdXJjZSwgbmV4dCkge1xuICAgICAgICBpZiAoIXJlc291cmNlLmRhdGEpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXh0KCk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBpZiB0aGlzIHdhcyBhbiBYSFIgbG9hZCBvZiBhIGJsb2JcbiAgICAgICAgaWYgKHJlc291cmNlLnhociAmJiByZXNvdXJjZS54aHJUeXBlID09PSBSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRS5CTE9CKSB7XG4gICAgICAgICAgICAvLyBpZiB0aGVyZSBpcyBubyBibG9iIHN1cHBvcnQgd2UgcHJvYmFibHkgZ290IGEgYmluYXJ5IHN0cmluZyBiYWNrXG4gICAgICAgICAgICBpZiAoIXdpbmRvdy5CbG9iIHx8IHR5cGVvZiByZXNvdXJjZS5kYXRhID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgICAgIHZhciB0eXBlID0gcmVzb3VyY2UueGhyLmdldFJlc3BvbnNlSGVhZGVyKCdjb250ZW50LXR5cGUnKTtcblxuICAgICAgICAgICAgICAgIC8vIHRoaXMgaXMgYW4gaW1hZ2UsIGNvbnZlcnQgdGhlIGJpbmFyeSBzdHJpbmcgaW50byBhIGRhdGEgdXJsXG4gICAgICAgICAgICAgICAgaWYgKHR5cGUgJiYgdHlwZS5pbmRleE9mKCdpbWFnZScpID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc291cmNlLmRhdGEgPSBuZXcgSW1hZ2UoKTtcbiAgICAgICAgICAgICAgICAgICAgcmVzb3VyY2UuZGF0YS5zcmMgPSAnZGF0YTonICsgdHlwZSArICc7YmFzZTY0LCcgKyBiNjQuZW5jb2RlQmluYXJ5KHJlc291cmNlLnhoci5yZXNwb25zZVRleHQpO1xuXG4gICAgICAgICAgICAgICAgICAgIHJlc291cmNlLmlzSW1hZ2UgPSB0cnVlO1xuXG4gICAgICAgICAgICAgICAgICAgIC8vIHdhaXQgdW50aWwgdGhlIGltYWdlIGxvYWRzIGFuZCB0aGVuIGNhbGxiYWNrXG4gICAgICAgICAgICAgICAgICAgIHJlc291cmNlLmRhdGEub25sb2FkID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVzb3VyY2UuZGF0YS5vbmxvYWQgPSBudWxsO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBuZXh0KCk7XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gaWYgY29udGVudCB0eXBlIHNheXMgdGhpcyBpcyBhbiBpbWFnZSwgdGhlbiB3ZSBzaG91bGQgdHJhbnNmb3JtIHRoZSBibG9iIGludG8gYW4gSW1hZ2Ugb2JqZWN0XG4gICAgICAgICAgICBlbHNlIGlmIChyZXNvdXJjZS5kYXRhLnR5cGUuaW5kZXhPZignaW1hZ2UnKSA9PT0gMCkge1xuICAgICAgICAgICAgICAgIHZhciBzcmMgPSBVUkwuY3JlYXRlT2JqZWN0VVJMKHJlc291cmNlLmRhdGEpO1xuXG4gICAgICAgICAgICAgICAgcmVzb3VyY2UuYmxvYiA9IHJlc291cmNlLmRhdGE7XG4gICAgICAgICAgICAgICAgcmVzb3VyY2UuZGF0YSA9IG5ldyBJbWFnZSgpO1xuICAgICAgICAgICAgICAgIHJlc291cmNlLmRhdGEuc3JjID0gc3JjO1xuXG4gICAgICAgICAgICAgICAgcmVzb3VyY2UuaXNJbWFnZSA9IHRydWU7XG5cbiAgICAgICAgICAgICAgICAvLyBjbGVhbnVwIHRoZSBubyBsb25nZXIgdXNlZCBibG9iIGFmdGVyIHRoZSBpbWFnZSBsb2Fkc1xuICAgICAgICAgICAgICAgIHJlc291cmNlLmRhdGEub25sb2FkID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICBVUkwucmV2b2tlT2JqZWN0VVJMKHNyYyk7XG4gICAgICAgICAgICAgICAgICAgIHJlc291cmNlLmRhdGEub25sb2FkID0gbnVsbDtcblxuICAgICAgICAgICAgICAgICAgICBuZXh0KCk7XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIG5leHQoKTtcbiAgICAgICAgfVxuICAgIH07XG59O1xuIiwibW9kdWxlLmV4cG9ydHM9e1xuICBcIm5hbWVcIjogXCJwaXhpLmpzXCIsXG4gIFwidmVyc2lvblwiOiBcIjMuMC4xMC1kZXZcIixcbiAgXCJkZXNjcmlwdGlvblwiOiBcIlBpeGkuanMgaXMgYSBmYXN0IGxpZ2h0d2VpZ2h0IDJEIGxpYnJhcnkgdGhhdCB3b3JrcyBhY3Jvc3MgYWxsIGRldmljZXMuXCIsXG4gIFwiYXV0aG9yXCI6IFwiTWF0IEdyb3Zlc1wiLFxuICBcImNvbnRyaWJ1dG9yc1wiOiBbXG4gICAgXCJDaGFkIEVuZ2xlciA8Y2hhZEBwYW50aGVyZGV2LmNvbT5cIixcbiAgICBcIlJpY2hhcmQgRGF2ZXkgPHJkYXZleUBnbWFpbC5jb20+XCJcbiAgXSxcbiAgXCJtYWluXCI6IFwiLi9zcmMvaW5kZXguanNcIixcbiAgXCJob21lcGFnZVwiOiBcImh0dHA6Ly9nb29kYm95ZGlnaXRhbC5jb20vXCIsXG4gIFwiYnVnc1wiOiBcImh0dHBzOi8vZ2l0aHViLmNvbS9waXhpanMvcGl4aS5qcy9pc3N1ZXNcIixcbiAgXCJsaWNlbnNlXCI6IFwiTUlUXCIsXG4gIFwicmVwb3NpdG9yeVwiOiB7XG4gICAgXCJ0eXBlXCI6IFwiZ2l0XCIsXG4gICAgXCJ1cmxcIjogXCJodHRwczovL2dpdGh1Yi5jb20vcGl4aWpzL3BpeGkuanMuZ2l0XCJcbiAgfSxcbiAgXCJzY3JpcHRzXCI6IHtcbiAgICBcInN0YXJ0XCI6IFwiZ3VscCAmJiBndWxwIHdhdGNoXCIsXG4gICAgXCJ0ZXN0XCI6IFwiZ3VscCAmJiB0ZXN0ZW0gY2lcIixcbiAgICBcImJ1aWxkXCI6IFwiZ3VscFwiLFxuICAgIFwiZG9jc1wiOiBcImpzZG9jIC1jIC4vZ3VscC91dGlsL2pzZG9jLmNvbmYuanNvbiAtUiBSRUFETUUubWRcIlxuICB9LFxuICBcImZpbGVzXCI6IFtcbiAgICBcImJpbi9cIixcbiAgICBcInNyYy9cIixcbiAgICBcIkNPTlRSSUJVVElORy5tZFwiLFxuICAgIFwiTElDRU5TRVwiLFxuICAgIFwicGFja2FnZS5qc29uXCIsXG4gICAgXCJSRUFETUUubWRcIlxuICBdLFxuICBcImRlcGVuZGVuY2llc1wiOiB7XG4gICAgXCJhc3luY1wiOiBcIl4xLjUuMFwiLFxuICAgIFwiYnJmc1wiOiBcIl4xLjQuMVwiLFxuICAgIFwiZWFyY3V0XCI6IFwiXjIuMC43XCIsXG4gICAgXCJldmVudGVtaXR0ZXIzXCI6IFwiXjEuMS4xXCIsXG4gICAgXCJvYmplY3QtYXNzaWduXCI6IFwiXjQuMC4xXCIsXG4gICAgXCJwaXhpLWdsLWNvcmVcIjogXCJnaXQraHR0cHM6Ly9naXRodWIuY29tL0dvb2RCb3lEaWdpdGFsL3BpeGktZ2wtY29yZS5naXRcIixcbiAgICBcInJlc291cmNlLWxvYWRlclwiOiBcIl4xLjYuNFwiXG4gIH0sXG4gIFwiZGV2RGVwZW5kZW5jaWVzXCI6IHtcbiAgICBcImJyb3dzZXJpZnlcIjogXCJeMTEuMS4wXCIsXG4gICAgXCJjaGFpXCI6IFwiXjMuMi4wXCIsXG4gICAgXCJkZWxcIjogXCJeMi4wLjJcIixcbiAgICBcImd1bHBcIjogXCJeMy45LjBcIixcbiAgICBcImd1bHAtY2FjaGVkXCI6IFwiXjEuMS4wXCIsXG4gICAgXCJndWxwLWNvbmNhdFwiOiBcIl4yLjYuMFwiLFxuICAgIFwiZ3VscC1kZWJ1Z1wiOiBcIl4yLjEuMFwiLFxuICAgIFwiZ3VscC1oZWFkZXJcIjogXCJeMS43LjFcIixcbiAgICBcImd1bHAtanNoaW50XCI6IFwiXjEuMTEuMlwiLFxuICAgIFwiZ3VscC1taXJyb3JcIjogXCJeMC40LjBcIixcbiAgICBcImd1bHAtcGx1bWJlclwiOiBcIl4xLjAuMVwiLFxuICAgIFwiZ3VscC1yZW5hbWVcIjogXCJeMS4yLjJcIixcbiAgICBcImd1bHAtc291cmNlbWFwc1wiOiBcIl4xLjUuMlwiLFxuICAgIFwiZ3VscC11Z2xpZnlcIjogXCJeMS40LjFcIixcbiAgICBcImd1bHAtdXRpbFwiOiBcIl4zLjAuNlwiLFxuICAgIFwiamFndWFyanMtanNkb2NcIjogXCJnaXQraHR0cHM6Ly9naXRodWIuY29tL2Rhdmlkc2hpbWpzL2phZ3VhcmpzLWpzZG9jLmdpdFwiLFxuICAgIFwianNkb2NcIjogXCJeMy4zLjJcIixcbiAgICBcImpzaGludC1zdW1tYXJ5XCI6IFwiXjAuNC4wXCIsXG4gICAgXCJtaW5pbWlzdFwiOiBcIl4xLjIuMFwiLFxuICAgIFwibW9jaGFcIjogXCJeMi4zLjJcIixcbiAgICBcInJlcXVpcmUtZGlyXCI6IFwiXjAuMy4wXCIsXG4gICAgXCJydW4tc2VxdWVuY2VcIjogXCJeMS4xLjJcIixcbiAgICBcInRlc3RlbVwiOiBcIl4wLjkuNFwiLFxuICAgIFwidmlueWwtYnVmZmVyXCI6IFwiXjEuMC4wXCIsXG4gICAgXCJ2aW55bC1zb3VyY2Utc3RyZWFtXCI6IFwiXjEuMS4wXCIsXG4gICAgXCJ3YXRjaGlmeVwiOiBcIl4zLjQuMFwiXG4gIH0sXG4gIFwiYnJvd3NlcmlmeVwiOiB7XG4gICAgXCJ0cmFuc2Zvcm1cIjogW1xuICAgICAgXCJicmZzXCJcbiAgICBdXG4gIH1cbn1cbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vY29yZScpO1xuXG4vLyBhZGQgc29tZSBleHRyYSB2YXJpYWJsZXMgdG8gdGhlIGNvbnRhaW5lci4uXG5PYmplY3QuYXNzaWduKFxuICAgIGNvcmUuRGlzcGxheU9iamVjdC5wcm90b3R5cGUsXG4gICAgcmVxdWlyZSgnLi9hY2Nlc3NpYmxlVGFyZ2V0Jylcbik7XG5cblxuLyoqXG4gKiBUaGUgQWNjZXNzaWJpbGl0eSBtYW5hZ2VyIHJlYWNyZWF0ZXMgdGhlIGFiaWxpdHkgdG8gdGFiIGFuZCBhbmQgaGF2ZSBjb250ZW50IHJlYWQgYnkgc2NyZWVuIHJlYWRlcnMuIFRoaXMgaXMgdmVyeSBpbXBvcnRhbnQgYXMgaXQgY2FuIHBvc3NpYmx5IGhlbHAgcGVvcGxlIHdpdGggZGlzYWJpbGl0aWVzIGFjY2VzcyBwaXhpIGNvbnRlbnQuXG4gKiBNdWNoIGxpa2UgaW50ZXJhY3Rpb24gYW55IERpc3BsYXlPYmplY3QgY2FuIGJlIG1hZGUgYWNjZXNzaWJsZS4gVGhpcyBtYW5hZ2VyIHdpbGwgbWFwIHRoZSBldmVudHMgYXMgaWYgdGhlIG1vdXNlIHdhcyBiZWluZyB1c2VkLCBtaW5pbWl6aW5nIHRoZSBlZmZlcm90IHJlcXVpcmVkIHRvIGltcGxlbWVudC5cbiAqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuQ2FudmFzUmVuZGVyZXJ8UElYSS5XZWJHTFJlbmRlcmVyfSBBIHJlZmVyZW5jZSB0byB0aGUgY3VycmVudCByZW5kZXJlclxuICovXG5mdW5jdGlvbiBBY2Nlc3NpYmlsaXR5TWFuYWdlcihyZW5kZXJlcilcbntcblx0Ly8gZmlyc3Qgd2UgY3JlYXRlIGEgZGl2IHRoYXQgd2lsbCBzaXQgb3ZlciB0aGUgcGl4aSBlbGVtZW50LiBUaGlzIGlzIHdoZXJlIHRoZSBkaXYgb3ZlcmxheXMgd2lsbCBnby5cbiAgICB2YXIgZGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgXG4gICAgZGl2LnN0eWxlLndpZHRoID0gMTAwICsgJ3B4JztcbiAgICBkaXYuc3R5bGUuaGVpZ2h0ID0gMTAwICsgJ3B4JztcbiAgICBkaXYuc3R5bGUucG9zaXRpb24gPSAnYWJzb2x1dGUnO1xuICAgIGRpdi5zdHlsZS50b3AgPSAwO1xuICAgIGRpdi5zdHlsZS5sZWZ0ID0gMDtcbiAgIC8vXG4gICAgZGl2LnN0eWxlLnpJbmRleCA9IDI7XG4gICBcdFxuICAgXHQvKipcbiAgIFx0ICogVGhpcyBpcyB0aGUgZG9tIGVsZW1lbnQgdGhhdCB3aWxsIHNpdCBvdmVyIHRoZSBwaXhpIGVsZW1lbnQuIFRoaXMgaXMgd2hlcmUgdGhlIGRpdiBvdmVybGF5cyB3aWxsIGdvLlxuICAgXHQgKiBcbiAgIFx0ICogQHR5cGUge0hUTUxFbGVtZW50fVxuICAgXHQgKiBAcHJpdmF0ZVxuICAgXHQgKi9cbiAgIFx0dGhpcy5kaXYgPSBkaXY7XG5cbiAgIFx0LyoqXG4gICBcdCAqIEEgc2ltcGxlIHBvb2wgZm9yIHN0b3JpbmcgZGl2cy5cbiAgIFx0ICogXG4gICBcdCAqIEB0eXBlIHtBcnJheX1cbiAgIFx0ICogQHByaXZhdGVcbiAgIFx0ICovXG4gXHR0aGlzLnBvb2wgPSBbXTtcblxuIFx0LyoqXG4gXHQgKiBUaGlzIGlzIGEgdGljayB1c2VkIHRvIGNoZWNrIGlmIGFuIG9iamVjdCBpcyBubyBsb25nZXIgYmVpbmcgcmVuZGVyZWQuXG4gXHQgKiBcbiBcdCAqIEB0eXBlIHtOdW1iZXJ9XG4gXHQgKiBAcHJpdmF0ZVxuIFx0ICovXG4gICBcdHRoaXMucmVuZGVySWQgPSAwO1xuXG4gICBcdC8qKlxuICAgXHQgKiBTZXR0aW5nIHRoaXMgdG8gdHJ1ZSB3aWxsIHZpc3VhbGx5IHNob3cgdGhlIGRpdnNcbiAgIFx0ICogXG4gICBcdCAqIEB0eXBlIHtCb29sZWFufVxuICAgXHQgKi9cbiAgIFx0dGhpcy5kZWJ1ZyA9IGZhbHNlO1xuXG4gIFx0LyoqXG4gICAgICogVGhlIHJlbmRlcmVyIHRoaXMgYWNjZXNzaWJpbGl0eSBtYW5hZ2VyIHdvcmtzIGZvci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuU3lzdGVtUmVuZGVyZXJ9XG4gICAgICovXG4gICBcdHRoaXMucmVuZGVyZXIgPSByZW5kZXJlcjtcblxuICAgXHQvKipcbiAgICAgKiBUaGUgYXJyYXkgb2YgY3VycmVudGx5IGFjdGl2ZSBhY2Nlc3NpYmxlIGl0ZW1zLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7QXJyYXl9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgIFx0dGhpcy5jaGlsZHJlbiA9IFtdO1xuICAgXHRcbiAgIFx0LyoqXG4gICAgICogcHJlIGJpbmQgdGhlIGZ1bmN0aW9ucy4uXG4gICAgICovXG4gICBcdHRoaXMuX29uS2V5RG93biA9IHRoaXMuX29uS2V5RG93bi5iaW5kKHRoaXMpO1xuICAgXHR0aGlzLl9vbk1vdXNlTW92ZSA9IHRoaXMuX29uTW91c2VNb3ZlLmJpbmQodGhpcyk7XG4gICBcdFxuICAgXHQvKipcbiAgICAgKiBzdG9yZXMgdGhlIHN0YXRlIG9mIHRoZSBtYW5hZ2VyLiBJZiB0aGVyZSBhcmUgbm8gYWNjZXNzaWJsZSBvYmplY3RzIG9yIHRoZSBtb3VzZSBpcyBtb3ZpbmcgdGhlIHdpbGwgYmUgZmFsc2UuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtBcnJheX1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgXHR0aGlzLmlzQWN0aXZlID0gZmFsc2U7XG5cblxuICAgXHQvLyBsZXQgbGlzdGVuIGZvciB0YWIuLiBvbmNlIHByZXNzZWQgd2UgY2FuIGZpcmUgdXAgYW5kIHNob3cgdGhlIGFjY2Vzc2liaWxpdHkgbGF5ZXJcbiAgIFx0d2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLCB0aGlzLl9vbktleURvd24sIGZhbHNlKTtcbn1cblxuXG5BY2Nlc3NpYmlsaXR5TWFuYWdlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBBY2Nlc3NpYmlsaXR5TWFuYWdlcjtcbm1vZHVsZS5leHBvcnRzID0gQWNjZXNzaWJpbGl0eU1hbmFnZXI7XG5cbi8qKlxuICogQWN0aXZhdGluZyB3aWxsIGNhdXNlIHRoZSBBY2Nlc3NpYmlsaXR5IGxheWVyIHRvIGJlIHNob3duLiBUaGlzIGlzIGNhbGxlZCB3aGVuIGEgdXNlciBwcmVzZXMgdGhlIHRhYiBrZXlcbiAqIEBwcml2YXRlXG4gKi9cbkFjY2Vzc2liaWxpdHlNYW5hZ2VyLnByb3RvdHlwZS5hY3RpdmF0ZSA9IGZ1bmN0aW9uKClcbntcblx0aWYodGhpcy5pc0FjdGl2ZSlcblx0e1xuXHRcdHJldHVybjtcblx0fVxuXG5cdHRoaXMuaXNBY3RpdmUgPSB0cnVlO1xuXG5cdHdpbmRvdy5kb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdtb3VzZW1vdmUnLCB0aGlzLl9vbk1vdXNlTW92ZSwgdHJ1ZSk7XG5cdHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdrZXlkb3duJywgdGhpcy5fb25LZXlEb3duLCBmYWxzZSk7XG5cblx0dGhpcy5yZW5kZXJlci5vbigncG9zdHJlbmRlcicsIHRoaXMudXBkYXRlLCB0aGlzKTtcblxuXHR0aGlzLnJlbmRlcmVyLnZpZXcucGFyZW50Tm9kZS5hcHBlbmRDaGlsZCh0aGlzLmRpdik7XHRcbn07XG5cbi8qKlxuICogRGVhY3RpdmF0aW5nIHdpbGwgY2F1c2UgdGhlIEFjY2Vzc2liaWxpdHkgbGF5ZXIgdG8gYmUgaGlkZGVuLiBUaGlzIGlzIGNhbGxlZCB3aGVuIGEgdXNlciBtb3ZlcyB0aGUgbW91c2VcbiAqIEBwcml2YXRlXG4gKi9cbkFjY2Vzc2liaWxpdHlNYW5hZ2VyLnByb3RvdHlwZS5kZWFjdGl2YXRlID0gZnVuY3Rpb24oKVxue1xuXHRpZighdGhpcy5pc0FjdGl2ZSlcblx0e1xuXHRcdHJldHVybjtcblx0fVxuXG5cdHRoaXMuaXNBY3RpdmUgPSBmYWxzZTtcblxuXHR3aW5kb3cuZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignbW91c2Vtb3ZlJywgdGhpcy5fb25Nb3VzZU1vdmUpO1xuXHR3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsIHRoaXMuX29uS2V5RG93biwgZmFsc2UpO1xuXG5cdHRoaXMucmVuZGVyZXIub2ZmKCdwb3N0cmVuZGVyJywgdGhpcy51cGRhdGUpO1xuXG5cdHRoaXMuZGl2LnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodGhpcy5kaXYpO1xuXG59O1xuXG4vKipcbiAqIFRoaXMgcmVjdXJzaXZlIGZ1bmN0aW9uIHdpbGwgcnVuIHRocm91Z2h0IGhlIHNjZW5lIGdyYXBoIGFuZCBhZGQgYW55IG5ldyBhY2Nlc3NpYmxlIG9iamVjdHMgdG8gdGhlIERPTSBsYXllci5cbiAqIEBwYXJhbSBlbGVtZW50IHtQSVhJLkNvbnRhaW5lcnxQSVhJLlNwcml0ZXxQSVhJLmV4dHJhcy5UaWxpbmdTcHJpdGV9IHRoZSBEaXNwbGF5T2JqZWN0IHRvIGNoZWNrLlxuICogQHByaXZhdGVcbiAqL1xuQWNjZXNzaWJpbGl0eU1hbmFnZXIucHJvdG90eXBlLnVwZGF0ZUFjY2Vzc2libGVPYmplY3RzID0gZnVuY3Rpb24oZGlzcGxheU9iamVjdClcbntcblx0aWYoIWRpc3BsYXlPYmplY3QudmlzaWJsZSlcblx0e1xuXHRcdHJldHVybjtcblx0fVxuXG5cdGlmKGRpc3BsYXlPYmplY3QuYWNjZXNzaWJsZSAmJiBkaXNwbGF5T2JqZWN0LmludGVyYWN0aXZlKVxuXHR7XG5cdFx0aWYoIWRpc3BsYXlPYmplY3QuX2FjY2Vzc2libGVBY3RpdmUpXG5cdFx0e1xuXHRcdFx0dGhpcy5hZGRDaGlsZChkaXNwbGF5T2JqZWN0KTtcblx0XHR9XG5cdCAgIFx0XG5cdCAgIFx0ZGlzcGxheU9iamVjdC5yZW5kZXJJZCA9IHRoaXMucmVuZGVySWQ7XG5cdH1cblxuXHR2YXIgY2hpbGRyZW4gPSBkaXNwbGF5T2JqZWN0LmNoaWxkcmVuO1xuXG5cdGZvciAodmFyIGkgPSBjaGlsZHJlbi5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuXHRcdFxuXHRcdHRoaXMudXBkYXRlQWNjZXNzaWJsZU9iamVjdHMoY2hpbGRyZW5baV0pO1xuXHR9XG59O1xuXG5cbi8qKlxuICogQmVmb3JlIGVhY2ggcmVuZGVyIHRoaXMgZnVuY3Rpb24gd2lsbCBlbnN1cmUgdGhhdCBhbGwgZGl2cyBhcmUgbWFwcGVkIGNvcnJlY3RseSB0byB0aGVpciBEaXNwbGF5T2JqZWN0c1xuICogQHByaXZhdGVcbiAqL1xuQWNjZXNzaWJpbGl0eU1hbmFnZXIucHJvdG90eXBlLnVwZGF0ZSA9IGZ1bmN0aW9uKClcbntcblxuXHQvLyB1cGRhdGUgY2hpbGRyZW4uLi5cblx0dGhpcy51cGRhdGVBY2Nlc3NpYmxlT2JqZWN0cyh0aGlzLnJlbmRlcmVyLl9sYXN0T2JqZWN0UmVuZGVyZWQpO1xuXG5cdHZhciByZWN0ID0gdGhpcy5yZW5kZXJlci52aWV3LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuXHR2YXIgc3ggPSByZWN0LndpZHRoICAvIHRoaXMucmVuZGVyZXIud2lkdGg7XG5cdHZhciBzeSA9IHJlY3QuaGVpZ2h0IC8gdGhpcy5yZW5kZXJlci5oZWlnaHQ7XG5cblx0dmFyIGRpdiA9IHRoaXMuZGl2O1xuXG5cdGRpdi5zdHlsZS5sZWZ0ID0gcmVjdC5sZWZ0ICsgJ3B4Jztcblx0ZGl2LnN0eWxlLnRvcCA9IHJlY3QudG9wICsgJ3B4Jztcblx0ZGl2LnN0eWxlLndpZHRoID0gdGhpcy5yZW5kZXJlci53aWR0aCArICdweCc7XG5cdGRpdi5zdHlsZS5oZWlnaHQgPSB0aGlzLnJlbmRlcmVyLmhlaWdodCArICdweCc7XG5cblx0Zm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmNoaWxkcmVuLmxlbmd0aDsgaSsrKVxuXHR7XG5cblx0XHR2YXIgY2hpbGQgPSB0aGlzLmNoaWxkcmVuW2ldO1xuXG5cdFx0aWYoY2hpbGQucmVuZGVySWQgIT09IHRoaXMucmVuZGVySWQpXG5cdFx0e1xuXHRcdFx0Y2hpbGQuX2FjY2Vzc2libGVBY3RpdmUgPSBmYWxzZTtcblxuICAgICAgICAgICAgY29yZS51dGlscy5yZW1vdmVJdGVtcyh0aGlzLmNoaWxkcmVuLCBpLCAxKTtcblx0XHRcdHRoaXMuZGl2LnJlbW92ZUNoaWxkKCBjaGlsZC5fYWNjZXNzaWJsZURpdiApO1xuXHRcdFx0dGhpcy5wb29sLnB1c2goY2hpbGQuX2FjY2Vzc2libGVEaXYpO1xuXHRcdFx0Y2hpbGQuX2FjY2Vzc2libGVEaXYgPSBudWxsO1xuXG5cdFx0XHRpLS07XG5cblx0XHRcdGlmKHRoaXMuY2hpbGRyZW4ubGVuZ3RoID09PSAwKVxuXHRcdFx0e1xuXHRcdFx0XHR0aGlzLmRlYWN0aXZhdGUoKTtcblx0XHRcdH1cblx0XHR9XG5cdFx0ZWxzZVxuXHRcdHtcblx0XHRcdC8vIG1hcCBkaXYgdG8gZGlzcGxheS4uXG5cdFx0XHRkaXYgPSBjaGlsZC5fYWNjZXNzaWJsZURpdjtcblx0XHRcdHZhciBoaXRBcmVhID0gY2hpbGQuaGl0QXJlYTtcblx0XHRcdHZhciB3dCA9IGNoaWxkLndvcmxkVHJhbnNmb3JtO1xuXG5cdFx0XHRpZihjaGlsZC5oaXRBcmVhKVxuXHRcdFx0e1xuXHRcdFx0XHRkaXYuc3R5bGUubGVmdCA9ICgod3QudHggKyAoaGl0QXJlYS54ICogd3QuYSkpICogc3gpICsgJ3B4Jztcblx0XHRcdFx0ZGl2LnN0eWxlLnRvcCA9ICAoKHd0LnR5ICsgKGhpdEFyZWEueSAqIHd0LmQpKSAqIHN5KSArICAncHgnO1xuXG5cdFx0XHRcdGRpdi5zdHlsZS53aWR0aCA9IChoaXRBcmVhLndpZHRoICogd3QuYSAqIHN4KSArICdweCc7XG5cdFx0XHRcdGRpdi5zdHlsZS5oZWlnaHQgPSAoaGl0QXJlYS5oZWlnaHQgKiB3dC5kICogc3kpICsgJ3B4Jztcblx0XHRcdFxuXHRcdFx0fVxuXHRcdFx0ZWxzZVxuXHRcdFx0e1xuXHRcdFx0XHRoaXRBcmVhID0gY2hpbGQuZ2V0Qm91bmRzKCk7XG5cblx0XHRcdFx0dGhpcy5jYXBIaXRBcmVhKGhpdEFyZWEpO1xuXG5cdFx0XHRcdGRpdi5zdHlsZS5sZWZ0ID0gKGhpdEFyZWEueCAqIHN4KSArICdweCc7XG5cdFx0XHRcdGRpdi5zdHlsZS50b3AgPSAgKGhpdEFyZWEueSAqIHN5KSArICAncHgnO1xuXG5cdFx0XHRcdGRpdi5zdHlsZS53aWR0aCA9IChoaXRBcmVhLndpZHRoICogc3gpICsgJ3B4Jztcblx0XHRcdFx0ZGl2LnN0eWxlLmhlaWdodCA9IChoaXRBcmVhLmhlaWdodCAqIHN5KSArICdweCc7XG5cdFx0XHR9XHRcdFxuXHRcdH1cblx0fVxuXG5cdC8vIGluY3JlbWVudCB0aGUgcmVuZGVyIGlkLi5cblx0dGhpcy5yZW5kZXJJZCsrO1xufTtcblxuQWNjZXNzaWJpbGl0eU1hbmFnZXIucHJvdG90eXBlLmNhcEhpdEFyZWEgPSBmdW5jdGlvbiAoaGl0QXJlYSlcbntcbiAgICBpZiAoaGl0QXJlYS54IDwgMClcbiAgICB7XG4gICAgICAgIGhpdEFyZWEud2lkdGggKz0gaGl0QXJlYS54O1xuICAgICAgICBoaXRBcmVhLnggPSAwO1xuICAgIH1cblxuICAgIGlmIChoaXRBcmVhLnkgPCAwKVxuICAgIHtcbiAgICAgICAgaGl0QXJlYS5oZWlnaHQgKz0gaGl0QXJlYS55O1xuICAgICAgICBoaXRBcmVhLnkgPSAwO1xuICAgIH1cblxuICAgIGlmICggaGl0QXJlYS54ICsgaGl0QXJlYS53aWR0aCA+IHRoaXMucmVuZGVyZXIud2lkdGggKVxuICAgIHtcbiAgICAgICAgaGl0QXJlYS53aWR0aCA9IHRoaXMucmVuZGVyZXIud2lkdGggLSBoaXRBcmVhLng7XG4gICAgfVxuXG4gICAgaWYgKCBoaXRBcmVhLnkgKyBoaXRBcmVhLmhlaWdodCA+IHRoaXMucmVuZGVyZXIuaGVpZ2h0IClcbiAgICB7XG4gICAgICAgIGhpdEFyZWEuaGVpZ2h0ID0gdGhpcy5yZW5kZXJlci5oZWlnaHQgLSBoaXRBcmVhLnk7XG4gICAgfVxufTtcblxuXG4vKipcbiAqIEFkZHMgYSBEaXNwbGF5T2JqZWN0IHRvIHRoZSBhY2Nlc3NpYmlsaXR5IG1hbmFnZXJcbiAqIEBwcml2YXRlXG4gKi9cbkFjY2Vzc2liaWxpdHlNYW5hZ2VyLnByb3RvdHlwZS5hZGRDaGlsZCA9IGZ1bmN0aW9uKGRpc3BsYXlPYmplY3QpXG57XG4vL1x0dGhpcy5hY3RpdmF0ZSgpO1xuXHRcblx0dmFyIGRpdiA9IHRoaXMucG9vbC5wb3AoKTtcblxuXHRpZighZGl2KVxuXHR7XG5cdFx0ZGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYnV0dG9uJyk7IFxuXG5cdCAgICBkaXYuc3R5bGUud2lkdGggPSAxMDAgKyAncHgnO1xuXHQgICAgZGl2LnN0eWxlLmhlaWdodCA9IDEwMCArICdweCc7XG5cdCAgICBkaXYuc3R5bGUuYmFja2dyb3VuZENvbG9yID0gdGhpcy5kZWJ1ZyA/ICdyZ2JhKDI1NSwwLDAsMC41KScgOiAndHJhbnNwYXJlbnQnO1xuXHQgICAgZGl2LnN0eWxlLnBvc2l0aW9uID0gJ2Fic29sdXRlJztcblx0ICAgIGRpdi5zdHlsZS56SW5kZXggPSAyO1xuXHQgICAgZGl2LnN0eWxlLmJvcmRlclN0eWxlID0gJ25vbmUnO1xuXG5cdCAgICBcblx0ICAgIGRpdi5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIHRoaXMuX29uQ2xpY2suYmluZCh0aGlzKSk7XG5cdCAgICBkaXYuYWRkRXZlbnRMaXN0ZW5lcignZm9jdXMnLCB0aGlzLl9vbkZvY3VzLmJpbmQodGhpcykpO1xuXHQgICAgZGl2LmFkZEV2ZW50TGlzdGVuZXIoJ2ZvY3Vzb3V0JywgdGhpcy5fb25Gb2N1c091dC5iaW5kKHRoaXMpKTtcblx0fVxuXHQgICBcdFxuXG5cblxuXHRkaXYudGl0bGUgPSBkaXNwbGF5T2JqZWN0LmFjY2Vzc2libGVUaXRsZSB8fCAnZGlzcGxheU9iamVjdCAnICsgdGhpcy50YWJJbmRleDtcblxuXHQvL1xuXHRcblx0ZGlzcGxheU9iamVjdC5fYWNjZXNzaWJsZUFjdGl2ZSA9IHRydWU7XG5cdGRpc3BsYXlPYmplY3QuX2FjY2Vzc2libGVEaXYgPSBkaXY7XG5cdGRpdi5kaXNwbGF5T2JqZWN0ID0gZGlzcGxheU9iamVjdDtcblxuXG5cdHRoaXMuY2hpbGRyZW4ucHVzaChkaXNwbGF5T2JqZWN0KTtcblx0dGhpcy5kaXYuYXBwZW5kQ2hpbGQoIGRpc3BsYXlPYmplY3QuX2FjY2Vzc2libGVEaXYgKTtcblx0ZGlzcGxheU9iamVjdC5fYWNjZXNzaWJsZURpdi50YWJJbmRleCA9IGRpc3BsYXlPYmplY3QudGFiSW5kZXg7XG59O1xuXG5cbi8qKlxuICogTWFwcyB0aGUgZGl2IGJ1dHRvbiBwcmVzcyB0byBwaXhpJ3MgSW50ZXJhY3Rpb25NYW5hZ2VyIChjbGljaylcbiAqIEBwcml2YXRlXG4gKi9cbkFjY2Vzc2liaWxpdHlNYW5hZ2VyLnByb3RvdHlwZS5fb25DbGljayA9IGZ1bmN0aW9uKGUpXG57XG5cdHZhciBpbnRlcmFjdGlvbk1hbmFnZXIgPSB0aGlzLnJlbmRlcmVyLnBsdWdpbnMuaW50ZXJhY3Rpb247XG5cdGludGVyYWN0aW9uTWFuYWdlci5kaXNwYXRjaEV2ZW50KGUudGFyZ2V0LmRpc3BsYXlPYmplY3QsICdjbGljaycsIGludGVyYWN0aW9uTWFuYWdlci5ldmVudERhdGEpO1xufTtcblxuLyoqXG4gKiBNYXBzIHRoZSBkaXYgZm9jdXMgZXZlbnRzIHRvIHBpeGlzIEludGVyYWN0aW9uTWFuYWdlciAobW91c2VvdmVyKVxuICogQHByaXZhdGVcbiAqL1xuQWNjZXNzaWJpbGl0eU1hbmFnZXIucHJvdG90eXBlLl9vbkZvY3VzID0gZnVuY3Rpb24oZSlcbntcblx0dmFyIGludGVyYWN0aW9uTWFuYWdlciA9IHRoaXMucmVuZGVyZXIucGx1Z2lucy5pbnRlcmFjdGlvbjtcblx0aW50ZXJhY3Rpb25NYW5hZ2VyLmRpc3BhdGNoRXZlbnQoZS50YXJnZXQuZGlzcGxheU9iamVjdCwgJ21vdXNlb3ZlcicsIGludGVyYWN0aW9uTWFuYWdlci5ldmVudERhdGEpO1xufTtcblxuLyoqXG4gKiBNYXBzIHRoZSBkaXYgZm9jdXMgZXZlbnRzIHRvIHBpeGlzIEludGVyYWN0aW9uTWFuYWdlciAobW91c2VvdXQpXG4gKiBAcHJpdmF0ZVxuICovXG5BY2Nlc3NpYmlsaXR5TWFuYWdlci5wcm90b3R5cGUuX29uRm9jdXNPdXQgPSBmdW5jdGlvbihlKVxue1xuXHR2YXIgaW50ZXJhY3Rpb25NYW5hZ2VyID0gdGhpcy5yZW5kZXJlci5wbHVnaW5zLmludGVyYWN0aW9uO1xuXHRpbnRlcmFjdGlvbk1hbmFnZXIuZGlzcGF0Y2hFdmVudChlLnRhcmdldC5kaXNwbGF5T2JqZWN0LCAnbW91c2VvdXQnLCBpbnRlcmFjdGlvbk1hbmFnZXIuZXZlbnREYXRhKTtcbn07XG5cbi8qKlxuICogSXMgY2FsbGVkIHdoZW4gYSBrZXkgaXMgcHJlc3NlZFxuICpcbiAqIEBwcml2YXRlXG4gKi9cbkFjY2Vzc2liaWxpdHlNYW5hZ2VyLnByb3RvdHlwZS5fb25LZXlEb3duID0gZnVuY3Rpb24oZSlcbntcblx0aWYoZS5rZXlDb2RlICE9PSA5KVxuXHR7XG5cdFx0cmV0dXJuO1xuXHR9XG5cblx0dGhpcy5hY3RpdmF0ZSgpO1xufTtcblxuLyoqXG4gKiBJcyBjYWxsZWQgd2hlbiB0aGUgbW91c2UgbW92ZXMgYWNyb3NzIHRoZSByZW5kZXJlciBlbGVtZW50XG4gKlxuICogQHByaXZhdGVcbiAqL1xuQWNjZXNzaWJpbGl0eU1hbmFnZXIucHJvdG90eXBlLl9vbk1vdXNlTW92ZSA9IGZ1bmN0aW9uKClcbntcblx0dGhpcy5kZWFjdGl2YXRlKCk7XG59O1xuXG5cbi8qKlxuICogRGVzdHJveXMgdGhlIGFjY2Vzc2liaWxpdHkgbWFuYWdlclxuICpcbiAqL1xuQWNjZXNzaWJpbGl0eU1hbmFnZXIucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoKSBcbntcblx0dGhpcy5kaXYgPSBudWxsO1xuXG5cdGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5jaGlsZHJlbi5sZW5ndGg7IGkrKylcblx0e1xuXHRcdHRoaXMuY2hpbGRyZW5baV0uZGl2ID0gbnVsbDtcblx0fVxuXG5cdFxuXHR3aW5kb3cuZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignbW91c2Vtb3ZlJywgdGhpcy5fb25Nb3VzZU1vdmUpO1xuXHR3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsIHRoaXMuX29uS2V5RG93bik7XG5cdFx0XG5cdHRoaXMucG9vbCA9IG51bGw7XG5cdHRoaXMuY2hpbGRyZW4gPSBudWxsO1xuXHR0aGlzLnJlbmRlcmVyID0gbnVsbDtcblxufTtcblxuY29yZS5XZWJHTFJlbmRlcmVyLnJlZ2lzdGVyUGx1Z2luKCdhY2Nlc3NpYmlsaXR5JywgQWNjZXNzaWJpbGl0eU1hbmFnZXIpO1xuY29yZS5DYW52YXNSZW5kZXJlci5yZWdpc3RlclBsdWdpbignYWNjZXNzaWJpbGl0eScsIEFjY2Vzc2liaWxpdHlNYW5hZ2VyKTtcblxuIiwiLyoqXG4gKiBEZWZhdWx0IHByb3BlcnR5IHZhbHVlcyBvZiBhY2Nlc3NpYmxlIG9iamVjdHNcbiAqIHVzZWQgYnkge0BsaW5rIFBJWEkuYWNjZXNzaWJpbGl0eS5BY2Nlc3NpYmlsaXR5TWFuYWdlcn0uXG4gKlxuICogQG1peGluXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQGV4YW1wbGVcbiAqICAgICAgZnVuY3Rpb24gTXlPYmplY3QoKSB7fVxuICpcbiAqICAgICAgT2JqZWN0LmFzc2lnbihcbiAqICAgICAgICAgIE15T2JqZWN0LnByb3RvdHlwZSxcbiAqICAgICAgICAgIFBJWEkuYWNjZXNzaWJpbGl0eS5hY2Nlc3NpYmxlVGFyZ2V0XG4gKiAgICAgICk7XG4gKi9cbnZhciBhY2Nlc3NpYmxlVGFyZ2V0ID0ge1xuICAgIFxuICAgIC8qKlxuICAgICAqIEB0b2RvIE5lZWRzIGRvY3MuXG4gICAgICovXG4gICAgYWNjZXNzaWJsZTpmYWxzZSxcblxuICAgIC8qKlxuICAgICAqIEB0b2RvIE5lZWRzIGRvY3MuXG4gICAgICovXG4gICAgYWNjZXNzaWJsZVRpdGxlOm51bGwsXG5cbiAgICAvKipcbiAgICAgKiBAdG9kbyBOZWVkcyBkb2NzLlxuICAgICAqL1xuICAgIHRhYkluZGV4OjAsXG5cbiAgICAvKipcbiAgICAgKiBAdG9kbyBOZWVkcyBkb2NzLlxuICAgICAqL1xuICAgIF9hY2Nlc3NpYmxlQWN0aXZlOmZhbHNlLFxuXG4gICAgLyoqXG4gICAgICogQHRvZG8gTmVlZHMgZG9jcy5cbiAgICAgKi9cbiAgICBfYWNjZXNzaWJsZURpdjpmYWxzZVxuXG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGFjY2Vzc2libGVUYXJnZXQ7XG4iLCIvKipcbiAqIEBmaWxlICAgICAgICBNYWluIGV4cG9ydCBvZiB0aGUgUElYSSBhY2Nlc3NpYmlsaXR5IGxpYnJhcnlcbiAqIEBhdXRob3IgICAgICBNYXQgR3JvdmVzIDxtYXRAZ29vZGJveWRpZ2l0YWwuY29tPlxuICogQGNvcHlyaWdodCAgIDIwMTMtMjAxNSBHb29kQm95RGlnaXRhbFxuICogQGxpY2Vuc2UgICAgIHtAbGluayBodHRwczovL2dpdGh1Yi5jb20vcGl4aWpzL3BpeGkuanMvYmxvYi9tYXN0ZXIvTElDRU5TRXxNSVQgTGljZW5zZX1cbiAqL1xuXG4vKipcbiAqIEBuYW1lc3BhY2UgUElYSS5pbnRlcmFjdGlvblxuICovXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgICBhY2Nlc3NpYmxlVGFyZ2V0OiAgICAgcmVxdWlyZSgnLi9hY2Nlc3NpYmxlVGFyZ2V0JyksXG4gICAgQWNjZXNzaWJpbGl0eU1hbmFnZXI6IHJlcXVpcmUoJy4vQWNjZXNzaWJpbGl0eU1hbmFnZXInKVxufTtcbiIsIi8qKlxuICogQ29uc3RhbnQgdmFsdWVzIHVzZWQgaW4gcGl4aVxuICpcbiAqIEBsZW5kcyBQSVhJXG4gKi9cbnZhciBDT05TVCA9IHtcbiAgICAvKipcbiAgICAgKiBTdHJpbmcgb2YgdGhlIGN1cnJlbnQgUElYSSB2ZXJzaW9uXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQGNvbnN0YW50XG4gICAgICogQHByb3BlcnR5IHtzdHJpbmd9IFZFUlNJT05cbiAgICAgKi9cbiAgICBWRVJTSU9OOiByZXF1aXJlKCcuLi8uLi9wYWNrYWdlLmpzb24nKS52ZXJzaW9uLFxuXG4gICAgLyoqXG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IFBJXzIgLSBUd28gUGlcbiAgICAgKiBAY29uc3RhbnRcbiAgICAgKiBAc3RhdGljXG4gICAgICovXG4gICAgUElfMjogTWF0aC5QSSAqIDIsXG5cbiAgICAvKipcbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gUkFEX1RPX0RFRyAtIENvbnN0YW50IGNvbnZlcnNpb24gZmFjdG9yIGZvciBjb252ZXJ0aW5nIHJhZGlhbnMgdG8gZGVncmVlc1xuICAgICAqIEBjb25zdGFudFxuICAgICAqIEBzdGF0aWNcbiAgICAgKi9cbiAgICBSQURfVE9fREVHOiAxODAgLyBNYXRoLlBJLFxuXG4gICAgLyoqXG4gICAgICogQHByb3BlcnR5IHtOdW1iZXJ9IERFR19UT19SQUQgLSBDb25zdGFudCBjb252ZXJzaW9uIGZhY3RvciBmb3IgY29udmVydGluZyBkZWdyZWVzIHRvIHJhZGlhbnNcbiAgICAgKiBAY29uc3RhbnRcbiAgICAgKiBAc3RhdGljXG4gICAgICovXG4gICAgREVHX1RPX1JBRDogTWF0aC5QSSAvIDE4MCxcblxuICAgIC8qKlxuICAgICAqIFRhcmdldCBmcmFtZXMgcGVyIG1pbGxpc2Vjb25kLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBjb25zdGFudFxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBUQVJHRVRfRlBNUz0wLjA2XG4gICAgICovXG4gICAgVEFSR0VUX0ZQTVM6IDAuMDYsXG5cbiAgICAvKipcbiAgICAgKiBDb25zdGFudCB0byBpZGVudGlmeSB0aGUgUmVuZGVyZXIgVHlwZS5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAY29uc3RhbnRcbiAgICAgKiBAcHJvcGVydHkge29iamVjdH0gUkVOREVSRVJfVFlQRVxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBSRU5ERVJFUl9UWVBFLlVOS05PV05cbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gUkVOREVSRVJfVFlQRS5XRUJHTFxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBSRU5ERVJFUl9UWVBFLkNBTlZBU1xuICAgICAqL1xuICAgIFJFTkRFUkVSX1RZUEU6IHtcbiAgICAgICAgVU5LTk9XTjogICAgMCxcbiAgICAgICAgV0VCR0w6ICAgICAgMSxcbiAgICAgICAgQ0FOVkFTOiAgICAgMlxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBWYXJpb3VzIGJsZW5kIG1vZGVzIHN1cHBvcnRlZCBieSBQSVhJLiBJTVBPUlRBTlQgLSBUaGUgV2ViR0wgcmVuZGVyZXIgb25seSBzdXBwb3J0c1xuICAgICAqIHRoZSBOT1JNQUwsIEFERCwgTVVMVElQTFkgYW5kIFNDUkVFTiBibGVuZCBtb2Rlcy4gQW55dGhpbmcgZWxzZSB3aWxsIHNpbGVudGx5IGFjdCBsaWtlXG4gICAgICogTk9STUFMLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBjb25zdGFudFxuICAgICAqIEBwcm9wZXJ0eSB7b2JqZWN0fSBCTEVORF9NT0RFU1xuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBCTEVORF9NT0RFUy5OT1JNQUxcbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gQkxFTkRfTU9ERVMuQUREXG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IEJMRU5EX01PREVTLk1VTFRJUExZXG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IEJMRU5EX01PREVTLlNDUkVFTlxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBCTEVORF9NT0RFUy5PVkVSTEFZXG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IEJMRU5EX01PREVTLkRBUktFTlxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBCTEVORF9NT0RFUy5MSUdIVEVOXG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IEJMRU5EX01PREVTLkNPTE9SX0RPREdFXG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IEJMRU5EX01PREVTLkNPTE9SX0JVUk5cbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gQkxFTkRfTU9ERVMuSEFSRF9MSUdIVFxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBCTEVORF9NT0RFUy5TT0ZUX0xJR0hUXG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IEJMRU5EX01PREVTLkRJRkZFUkVOQ0VcbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gQkxFTkRfTU9ERVMuRVhDTFVTSU9OXG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IEJMRU5EX01PREVTLkhVRVxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBCTEVORF9NT0RFUy5TQVRVUkFUSU9OXG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IEJMRU5EX01PREVTLkNPTE9SXG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IEJMRU5EX01PREVTLkxVTUlOT1NJVFlcbiAgICAgKi9cbiAgICBCTEVORF9NT0RFUzoge1xuICAgICAgICBOT1JNQUw6ICAgICAgICAgMCxcbiAgICAgICAgQUREOiAgICAgICAgICAgIDEsXG4gICAgICAgIE1VTFRJUExZOiAgICAgICAyLFxuICAgICAgICBTQ1JFRU46ICAgICAgICAgMyxcbiAgICAgICAgT1ZFUkxBWTogICAgICAgIDQsXG4gICAgICAgIERBUktFTjogICAgICAgICA1LFxuICAgICAgICBMSUdIVEVOOiAgICAgICAgNixcbiAgICAgICAgQ09MT1JfRE9ER0U6ICAgIDcsXG4gICAgICAgIENPTE9SX0JVUk46ICAgICA4LFxuICAgICAgICBIQVJEX0xJR0hUOiAgICAgOSxcbiAgICAgICAgU09GVF9MSUdIVDogICAgIDEwLFxuICAgICAgICBESUZGRVJFTkNFOiAgICAgMTEsXG4gICAgICAgIEVYQ0xVU0lPTjogICAgICAxMixcbiAgICAgICAgSFVFOiAgICAgICAgICAgIDEzLFxuICAgICAgICBTQVRVUkFUSU9OOiAgICAgMTQsXG4gICAgICAgIENPTE9SOiAgICAgICAgICAxNSxcbiAgICAgICAgTFVNSU5PU0lUWTogICAgIDE2XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFZhcmlvdXMgd2ViZ2wgZHJhdyBtb2Rlcy4gVGhlc2UgY2FuIGJlIHVzZWQgdG8gc3BlY2lmeSB3aGljaCBHTCBkcmF3TW9kZSB0byB1c2VcbiAgICAgKiB1bmRlciBjZXJ0YWluIHNpdHVhdGlvbnMgYW5kIHJlbmRlcmVycy5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAY29uc3RhbnRcbiAgICAgKiBAcHJvcGVydHkge29iamVjdH0gRFJBV19NT0RFU1xuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBEUkFXX01PREVTLlBPSU5UU1xuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBEUkFXX01PREVTLkxJTkVTXG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IERSQVdfTU9ERVMuTElORV9MT09QXG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IERSQVdfTU9ERVMuTElORV9TVFJJUFxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBEUkFXX01PREVTLlRSSUFOR0xFU1xuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBEUkFXX01PREVTLlRSSUFOR0xFX1NUUklQXG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IERSQVdfTU9ERVMuVFJJQU5HTEVfRkFOXG4gICAgICovXG4gICAgRFJBV19NT0RFUzoge1xuICAgICAgICBQT0lOVFM6ICAgICAgICAgMCxcbiAgICAgICAgTElORVM6ICAgICAgICAgIDEsXG4gICAgICAgIExJTkVfTE9PUDogICAgICAyLFxuICAgICAgICBMSU5FX1NUUklQOiAgICAgMyxcbiAgICAgICAgVFJJQU5HTEVTOiAgICAgIDQsXG4gICAgICAgIFRSSUFOR0xFX1NUUklQOiA1LFxuICAgICAgICBUUklBTkdMRV9GQU46ICAgNlxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBUaGUgc2NhbGUgbW9kZXMgdGhhdCBhcmUgc3VwcG9ydGVkIGJ5IHBpeGkuXG4gICAgICpcbiAgICAgKiBUaGUgREVGQVVMVCBzY2FsZSBtb2RlIGFmZmVjdHMgdGhlIGRlZmF1bHQgc2NhbGluZyBtb2RlIG9mIGZ1dHVyZSBvcGVyYXRpb25zLlxuICAgICAqIEl0IGNhbiBiZSByZS1hc3NpZ25lZCB0byBlaXRoZXIgTElORUFSIG9yIE5FQVJFU1QsIGRlcGVuZGluZyB1cG9uIHN1aXRhYmlsaXR5LlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBjb25zdGFudFxuICAgICAqIEBwcm9wZXJ0eSB7b2JqZWN0fSBTQ0FMRV9NT0RFU1xuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBTQ0FMRV9NT0RFUy5ERUZBVUxUPUxJTkVBUlxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBTQ0FMRV9NT0RFUy5MSU5FQVIgU21vb3RoIHNjYWxpbmdcbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gU0NBTEVfTU9ERVMuTkVBUkVTVCBQaXhlbGF0aW5nIHNjYWxpbmdcbiAgICAgKi9cbiAgICBTQ0FMRV9NT0RFUzoge1xuICAgICAgICBERUZBVUxUOiAgICAwLFxuICAgICAgICBMSU5FQVI6ICAgICAwLFxuICAgICAgICBORUFSRVNUOiAgICAxXG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFRoZSBwcmVmaXggdGhhdCBkZW5vdGVzIGEgVVJMIGlzIGZvciBhIHJldGluYSBhc3NldFxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBjb25zdGFudFxuICAgICAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBSRVRJTkFfUFJFRklYXG4gICAgICovXG4gICAgLy9leGFtcGxlOiAnQDJ4JyxcbiAgICBSRVRJTkFfUFJFRklYOiAvQCguKyl4LyxcblxuICAgIFJFU09MVVRJT046MSxcblxuICAgIEZJTFRFUl9SRVNPTFVUSU9OOjEsXG5cbiAgICAvKipcbiAgICAgKiBUaGUgZGVmYXVsdCByZW5kZXIgb3B0aW9ucyBpZiBub25lIGFyZSBzdXBwbGllZCB0byB7QGxpbmsgUElYSS5XZWJHTFJlbmRlcmVyfVxuICAgICAqIG9yIHtAbGluayBQSVhJLkNhbnZhc1JlbmRlcmVyfS5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAY29uc3RhbnRcbiAgICAgKiBAcHJvcGVydHkge29iamVjdH0gREVGQVVMVF9SRU5ERVJfT1BUSU9OU1xuICAgICAqIEBwcm9wZXJ0eSB7SFRNTENhbnZhc0VsZW1lbnR9IERFRkFVTFRfUkVOREVSX09QVElPTlMudmlldz1udWxsXG4gICAgICogQHByb3BlcnR5IHtib29sZWFufSBERUZBVUxUX1JFTkRFUl9PUFRJT05TLnRyYW5zcGFyZW50PWZhbHNlXG4gICAgICogQHByb3BlcnR5IHtib29sZWFufSBERUZBVUxUX1JFTkRFUl9PUFRJT05TLmFudGlhbGlhcz1mYWxzZVxuICAgICAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gREVGQVVMVF9SRU5ERVJfT1BUSU9OUy5mb3JjZUZYQUE9ZmFsc2VcbiAgICAgKiBAcHJvcGVydHkge2Jvb2xlYW59IERFRkFVTFRfUkVOREVSX09QVElPTlMucHJlc2VydmVEcmF3aW5nQnVmZmVyPWZhbHNlXG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IERFRkFVTFRfUkVOREVSX09QVElPTlMucmVzb2x1dGlvbj0xXG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IERFRkFVTFRfUkVOREVSX09QVElPTlMuYmFja2dyb3VuZENvbG9yPTB4MDAwMDAwXG4gICAgICogQHByb3BlcnR5IHtib29sZWFufSBERUZBVUxUX1JFTkRFUl9PUFRJT05TLmNsZWFyQmVmb3JlUmVuZGVyPXRydWVcbiAgICAgKiBAcHJvcGVydHkge2Jvb2xlYW59IERFRkFVTFRfUkVOREVSX09QVElPTlMuYXV0b1Jlc2l6ZT1mYWxzZVxuICAgICAqL1xuICAgIERFRkFVTFRfUkVOREVSX09QVElPTlM6IHtcbiAgICAgICAgdmlldzogbnVsbCxcbiAgICAgICAgcmVzb2x1dGlvbjogMSxcbiAgICAgICAgYW50aWFsaWFzOiBmYWxzZSxcbiAgICAgICAgZm9yY2VGWEFBOiBmYWxzZSxcbiAgICAgICAgYXV0b1Jlc2l6ZTogZmFsc2UsXG4gICAgICAgIHRyYW5zcGFyZW50OiBmYWxzZSxcbiAgICAgICAgYmFja2dyb3VuZENvbG9yOiAweDAwMDAwMCxcbiAgICAgICAgY2xlYXJCZWZvcmVSZW5kZXI6IHRydWUsXG4gICAgICAgIHByZXNlcnZlRHJhd2luZ0J1ZmZlcjogZmFsc2UsXG4gICAgICAgIHJvdW5kUGl4ZWxzOiBmYWxzZVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBDb25zdGFudHMgdGhhdCBpZGVudGlmeSBzaGFwZXMsIG1haW5seSB0byBwcmV2ZW50IGBpbnN0YW5jZW9mYCBjYWxscy5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAY29uc3RhbnRcbiAgICAgKiBAcHJvcGVydHkge29iamVjdH0gU0hBUEVTXG4gICAgICogQHByb3BlcnR5IHtvYmplY3R9IFNIQVBFUy5QT0xZPTBcbiAgICAgKiBAcHJvcGVydHkge29iamVjdH0gU0hBUEVTLlJFQ1Q9MVxuICAgICAqIEBwcm9wZXJ0eSB7b2JqZWN0fSBTSEFQRVMuQ0lSQz0yXG4gICAgICogQHByb3BlcnR5IHtvYmplY3R9IFNIQVBFUy5FTElQPTNcbiAgICAgKiBAcHJvcGVydHkge29iamVjdH0gU0hBUEVTLlJSRUM9NFxuICAgICAqL1xuICAgIFNIQVBFUzoge1xuICAgICAgICBQT0xZOiAwLFxuICAgICAgICBSRUNUOiAxLFxuICAgICAgICBDSVJDOiAyLFxuICAgICAgICBFTElQOiAzLFxuICAgICAgICBSUkVDOiA0XG4gICAgfSxcblxuICAgIC8vIFRPRE86IG1heWJlIGNoYW5nZSB0byBTUFJJVEUuQkFUQ0hfU0laRTogMjAwMFxuICAgIC8vIFRPRE86IG1heWJlIGFkZCBQQVJUSUNMRS5CQVRDSF9TSVpFOiAxNTAwMFxuICAgIFNQUklURV9CQVRDSF9TSVpFOiAyMDAwIC8vbmljZSBiYWxhbmNlIGJldHdlZW4gbW9iaWxlIGFuZCBkZXNrdG9wIG1hY2hpbmVzXG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IENPTlNUO1xuIiwidmFyIG1hdGggPSByZXF1aXJlKCcuLi9tYXRoJyksXG4gICAgdXRpbHMgPSByZXF1aXJlKCcuLi91dGlscycpLFxuICAgIERpc3BsYXlPYmplY3QgPSByZXF1aXJlKCcuL0Rpc3BsYXlPYmplY3QnKSxcbiAgICBSZW5kZXJUZXh0dXJlID0gcmVxdWlyZSgnLi4vdGV4dHVyZXMvUmVuZGVyVGV4dHVyZScpLFxuICAgIF90ZW1wTWF0cml4ID0gbmV3IG1hdGguTWF0cml4KCk7XG5cbi8qKlxuICogQSBDb250YWluZXIgcmVwcmVzZW50cyBhIGNvbGxlY3Rpb24gb2YgZGlzcGxheSBvYmplY3RzLlxuICogSXQgaXMgdGhlIGJhc2UgY2xhc3Mgb2YgYWxsIGRpc3BsYXkgb2JqZWN0cyB0aGF0IGFjdCBhcyBhIGNvbnRhaW5lciBmb3Igb3RoZXIgb2JqZWN0cy5cbiAqXG4gKmBgYGpzXG4gKiB2YXIgY29udGFpbmVyID0gbmV3IFBJWEkuQ29udGFpbmVyKCk7XG4gKiBjb250YWluZXIuYWRkQ2hpbGQoc3ByaXRlKTtcbiAqIGBgYFxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLkRpc3BsYXlPYmplY3RcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKi9cbmZ1bmN0aW9uIENvbnRhaW5lcigpXG57XG4gICAgRGlzcGxheU9iamVjdC5jYWxsKHRoaXMpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGFycmF5IG9mIGNoaWxkcmVuIG9mIHRoaXMgY29udGFpbmVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5EaXNwbGF5T2JqZWN0W119XG4gICAgICogQHJlYWRvbmx5XG4gICAgICovXG4gICAgdGhpcy5jaGlsZHJlbiA9IFtdO1xufVxuXG4vLyBjb25zdHJ1Y3RvclxuQ29udGFpbmVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoRGlzcGxheU9iamVjdC5wcm90b3R5cGUpO1xuQ29udGFpbmVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IENvbnRhaW5lcjtcbm1vZHVsZS5leHBvcnRzID0gQ29udGFpbmVyO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhDb250YWluZXIucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogVGhlIHdpZHRoIG9mIHRoZSBDb250YWluZXIsIHNldHRpbmcgdGhpcyB3aWxsIGFjdHVhbGx5IG1vZGlmeSB0aGUgc2NhbGUgdG8gYWNoaWV2ZSB0aGUgdmFsdWUgc2V0XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuQ29udGFpbmVyI1xuICAgICAqL1xuICAgIHdpZHRoOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuc2NhbGUueCAqIHRoaXMuZ2V0TG9jYWxCb3VuZHMoKS53aWR0aDtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcblxuICAgICAgICAgICAgdmFyIHdpZHRoID0gdGhpcy5nZXRMb2NhbEJvdW5kcygpLndpZHRoO1xuXG4gICAgICAgICAgICBpZiAod2lkdGggIT09IDApXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdGhpcy5zY2FsZS54ID0gdmFsdWUgLyB3aWR0aDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNjYWxlLnggPSAxO1xuICAgICAgICAgICAgfVxuXG5cbiAgICAgICAgICAgIHRoaXMuX3dpZHRoID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVGhlIGhlaWdodCBvZiB0aGUgQ29udGFpbmVyLCBzZXR0aW5nIHRoaXMgd2lsbCBhY3R1YWxseSBtb2RpZnkgdGhlIHNjYWxlIHRvIGFjaGlldmUgdGhlIHZhbHVlIHNldFxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLkNvbnRhaW5lciNcbiAgICAgKi9cbiAgICBoZWlnaHQ6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gIHRoaXMuc2NhbGUueSAqIHRoaXMuZ2V0TG9jYWxCb3VuZHMoKS5oZWlnaHQ7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG5cbiAgICAgICAgICAgIHZhciBoZWlnaHQgPSB0aGlzLmdldExvY2FsQm91bmRzKCkuaGVpZ2h0O1xuXG4gICAgICAgICAgICBpZiAoaGVpZ2h0ICE9PSAwKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHRoaXMuc2NhbGUueSA9IHZhbHVlIC8gaGVpZ2h0IDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNjYWxlLnkgPSAxO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLl9oZWlnaHQgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuXG4vKipcbiAqIE92ZXJyaWRhYmxlIG1ldGhvZCB0aGF0IGNhbiBiZSB1c2VkIGJ5IENvbnRhaW5lciBzdWJjbGFzc2VzIHdoZW5ldmVyIHRoZSBjaGlsZHJlbiBhcnJheSBpcyBtb2RpZmllZFxuICpcbiAqIEBwcml2YXRlXG4gKi9cbkNvbnRhaW5lci5wcm90b3R5cGUub25DaGlsZHJlbkNoYW5nZSA9IGZ1bmN0aW9uICgpIHt9O1xuXG4vKipcbiAqIEFkZHMgYSBjaGlsZCB0byB0aGUgY29udGFpbmVyLlxuICogXG4gKiBZb3UgY2FuIGFsc28gYWRkIG11bHRwbGUgaXRlbXMgbGlrZSBzbzogbXlDb250YWluZXIuYWRkQ2hpbGQodGhpbmtPbmUsIHRoaW5nVHdvLCB0aGluZ1RocmVlKVxuICogQHBhcmFtIGNoaWxkIHtQSVhJLkRpc3BsYXlPYmplY3R9IFRoZSBEaXNwbGF5T2JqZWN0IHRvIGFkZCB0byB0aGUgY29udGFpbmVyXG4gKiBAcmV0dXJuIHtQSVhJLkRpc3BsYXlPYmplY3R9IFRoZSBjaGlsZCB0aGF0IHdhcyBhZGRlZC5cbiAqL1xuQ29udGFpbmVyLnByb3RvdHlwZS5hZGRDaGlsZCA9IGZ1bmN0aW9uIChjaGlsZClcbnsgXG4gICAgdmFyIGFyZ3VtZW50c0xlbmd0aCA9IGFyZ3VtZW50cy5sZW5ndGg7XG5cbiAgICAvLyBpZiB0aGVyZSBpcyBvbmx5IG9uZSBhcmd1bWVudCB3ZSBjYW4gYnlwYXNzIGxvb3BpbmcgdGhyb3VnaCB0aGUgdGhlbVxuICAgIGlmKGFyZ3VtZW50c0xlbmd0aCA+IDEpXG4gICAge1xuICAgICAgICAvLyBsb29wIHRocm91Z2ggdGhlIGFyZ3VtZW50cyBwcm9wZXJ0eSBhbmQgYWRkIGFsbCBjaGlsZHJlblxuICAgICAgICAvLyB1c2UgaXQgdGhlIHJpZ2h0IHdheSAoLmxlbmd0aCBhbmQgW2ldKSBzbyB0aGF0IHRoaXMgZnVuY3Rpb24gY2FuIHN0aWxsIGJlIG9wdGltaXNlZCBieSBKUyBydW50aW1lc1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFyZ3VtZW50c0xlbmd0aDsgaSsrKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmFkZENoaWxkKCBhcmd1bWVudHNbaV0gKTtcbiAgICAgICAgfVxuICAgIH0gICAgIFxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIC8vIGlmIHRoZSBjaGlsZCBoYXMgYSBwYXJlbnQgdGhlbiBsZXRzIHJlbW92ZSBpdCBhcyBQaXhpIG9iamVjdHMgY2FuIG9ubHkgZXhpc3QgaW4gb25lIHBsYWNlXG4gICAgICAgIGlmIChjaGlsZC5wYXJlbnQpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNoaWxkLnBhcmVudC5yZW1vdmVDaGlsZChjaGlsZCk7XG4gICAgICAgIH1cblxuICAgICAgICBjaGlsZC5wYXJlbnQgPSB0aGlzO1xuICAgICAgICBcbiAgICAgICAgdGhpcy5jaGlsZHJlbi5wdXNoKGNoaWxkKTtcblxuICAgICAgICAvLyBUT0RPIC0gbGV0cyBlaXRoZXIgZG8gYWxsIGNhbGxiYWNrcyBvciBhbGwgZXZlbnRzLi4gbm90IGJvdGghXG4gICAgICAgIHRoaXMub25DaGlsZHJlbkNoYW5nZSh0aGlzLmNoaWxkcmVuLmxlbmd0aC0xKTtcbiAgICAgICAgY2hpbGQuZW1pdCgnYWRkZWQnLCB0aGlzKTtcbiAgICB9XG5cbiAgICByZXR1cm4gY2hpbGQ7XG59O1xuXG4vKipcbiAqIEFkZHMgYSBjaGlsZCB0byB0aGUgY29udGFpbmVyIGF0IGEgc3BlY2lmaWVkIGluZGV4LiBJZiB0aGUgaW5kZXggaXMgb3V0IG9mIGJvdW5kcyBhbiBlcnJvciB3aWxsIGJlIHRocm93blxuICpcbiAqIEBwYXJhbSBjaGlsZCB7UElYSS5EaXNwbGF5T2JqZWN0fSBUaGUgY2hpbGQgdG8gYWRkXG4gKiBAcGFyYW0gaW5kZXgge251bWJlcn0gVGhlIGluZGV4IHRvIHBsYWNlIHRoZSBjaGlsZCBpblxuICogQHJldHVybiB7UElYSS5EaXNwbGF5T2JqZWN0fSBUaGUgY2hpbGQgdGhhdCB3YXMgYWRkZWQuXG4gKi9cbkNvbnRhaW5lci5wcm90b3R5cGUuYWRkQ2hpbGRBdCA9IGZ1bmN0aW9uIChjaGlsZCwgaW5kZXgpXG57XG4gICAgaWYgKGluZGV4ID49IDAgJiYgaW5kZXggPD0gdGhpcy5jaGlsZHJlbi5sZW5ndGgpXG4gICAge1xuICAgICAgICBpZiAoY2hpbGQucGFyZW50KVxuICAgICAgICB7XG4gICAgICAgICAgICBjaGlsZC5wYXJlbnQucmVtb3ZlQ2hpbGQoY2hpbGQpO1xuICAgICAgICB9XG5cbiAgICAgICAgY2hpbGQucGFyZW50ID0gdGhpcztcblxuICAgICAgICB0aGlzLmNoaWxkcmVuLnNwbGljZShpbmRleCwgMCwgY2hpbGQpO1xuXG4gICAgICAgIC8vIFRPRE8gLSBsZXRzIGVpdGhlciBkbyBhbGwgY2FsbGJhY2tzIG9yIGFsbCBldmVudHMuLiBub3QgYm90aCFcbiAgICAgICAgdGhpcy5vbkNoaWxkcmVuQ2hhbmdlKGluZGV4KTtcbiAgICAgICAgY2hpbGQuZW1pdCgnYWRkZWQnLCB0aGlzKTtcblxuICAgICAgICByZXR1cm4gY2hpbGQ7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihjaGlsZCArICdhZGRDaGlsZEF0OiBUaGUgaW5kZXggJysgaW5kZXggKycgc3VwcGxpZWQgaXMgb3V0IG9mIGJvdW5kcyAnICsgdGhpcy5jaGlsZHJlbi5sZW5ndGgpO1xuICAgIH1cbn07XG5cbi8qKlxuICogU3dhcHMgdGhlIHBvc2l0aW9uIG9mIDIgRGlzcGxheSBPYmplY3RzIHdpdGhpbiB0aGlzIGNvbnRhaW5lci5cbiAqXG4gKiBAcGFyYW0gY2hpbGQge1BJWEkuRGlzcGxheU9iamVjdH1cbiAqIEBwYXJhbSBjaGlsZDIge1BJWEkuRGlzcGxheU9iamVjdH1cbiAqL1xuQ29udGFpbmVyLnByb3RvdHlwZS5zd2FwQ2hpbGRyZW4gPSBmdW5jdGlvbiAoY2hpbGQsIGNoaWxkMilcbntcbiAgICBpZiAoY2hpbGQgPT09IGNoaWxkMilcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB2YXIgaW5kZXgxID0gdGhpcy5nZXRDaGlsZEluZGV4KGNoaWxkKTtcbiAgICB2YXIgaW5kZXgyID0gdGhpcy5nZXRDaGlsZEluZGV4KGNoaWxkMik7XG5cbiAgICBpZiAoaW5kZXgxIDwgMCB8fCBpbmRleDIgPCAwKVxuICAgIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdzd2FwQ2hpbGRyZW46IEJvdGggdGhlIHN1cHBsaWVkIERpc3BsYXlPYmplY3RzIG11c3QgYmUgY2hpbGRyZW4gb2YgdGhlIGNhbGxlci4nKTtcbiAgICB9XG5cbiAgICB0aGlzLmNoaWxkcmVuW2luZGV4MV0gPSBjaGlsZDI7XG4gICAgdGhpcy5jaGlsZHJlbltpbmRleDJdID0gY2hpbGQ7XG4gICAgdGhpcy5vbkNoaWxkcmVuQ2hhbmdlKGluZGV4MSA8IGluZGV4MiA/IGluZGV4MSA6IGluZGV4Mik7XG59O1xuXG4vKipcbiAqIFJldHVybnMgdGhlIGluZGV4IHBvc2l0aW9uIG9mIGEgY2hpbGQgRGlzcGxheU9iamVjdCBpbnN0YW5jZVxuICpcbiAqIEBwYXJhbSBjaGlsZCB7UElYSS5EaXNwbGF5T2JqZWN0fSBUaGUgRGlzcGxheU9iamVjdCBpbnN0YW5jZSB0byBpZGVudGlmeVxuICogQHJldHVybiB7bnVtYmVyfSBUaGUgaW5kZXggcG9zaXRpb24gb2YgdGhlIGNoaWxkIGRpc3BsYXkgb2JqZWN0IHRvIGlkZW50aWZ5XG4gKi9cbkNvbnRhaW5lci5wcm90b3R5cGUuZ2V0Q2hpbGRJbmRleCA9IGZ1bmN0aW9uIChjaGlsZClcbntcbiAgICB2YXIgaW5kZXggPSB0aGlzLmNoaWxkcmVuLmluZGV4T2YoY2hpbGQpO1xuXG4gICAgaWYgKGluZGV4ID09PSAtMSlcbiAgICB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignVGhlIHN1cHBsaWVkIERpc3BsYXlPYmplY3QgbXVzdCBiZSBhIGNoaWxkIG9mIHRoZSBjYWxsZXInKTtcbiAgICB9XG5cbiAgICByZXR1cm4gaW5kZXg7XG59O1xuXG4vKipcbiAqIENoYW5nZXMgdGhlIHBvc2l0aW9uIG9mIGFuIGV4aXN0aW5nIGNoaWxkIGluIHRoZSBkaXNwbGF5IG9iamVjdCBjb250YWluZXJcbiAqXG4gKiBAcGFyYW0gY2hpbGQge1BJWEkuRGlzcGxheU9iamVjdH0gVGhlIGNoaWxkIERpc3BsYXlPYmplY3QgaW5zdGFuY2UgZm9yIHdoaWNoIHlvdSB3YW50IHRvIGNoYW5nZSB0aGUgaW5kZXggbnVtYmVyXG4gKiBAcGFyYW0gaW5kZXgge251bWJlcn0gVGhlIHJlc3VsdGluZyBpbmRleCBudW1iZXIgZm9yIHRoZSBjaGlsZCBkaXNwbGF5IG9iamVjdFxuICovXG5Db250YWluZXIucHJvdG90eXBlLnNldENoaWxkSW5kZXggPSBmdW5jdGlvbiAoY2hpbGQsIGluZGV4KVxue1xuICAgIGlmIChpbmRleCA8IDAgfHwgaW5kZXggPj0gdGhpcy5jaGlsZHJlbi5sZW5ndGgpXG4gICAge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RoZSBzdXBwbGllZCBpbmRleCBpcyBvdXQgb2YgYm91bmRzJyk7XG4gICAgfVxuXG4gICAgdmFyIGN1cnJlbnRJbmRleCA9IHRoaXMuZ2V0Q2hpbGRJbmRleChjaGlsZCk7XG5cbiAgICB1dGlscy5yZW1vdmVJdGVtcyh0aGlzLmNoaWxkcmVuLCBjdXJyZW50SW5kZXgsIDEpOyAvLyByZW1vdmUgZnJvbSBvbGQgcG9zaXRpb25cbiAgICB0aGlzLmNoaWxkcmVuLnNwbGljZShpbmRleCwgMCwgY2hpbGQpOyAvL2FkZCBhdCBuZXcgcG9zaXRpb25cbiAgICB0aGlzLm9uQ2hpbGRyZW5DaGFuZ2UoaW5kZXgpO1xufTtcblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBjaGlsZCBhdCB0aGUgc3BlY2lmaWVkIGluZGV4XG4gKlxuICogQHBhcmFtIGluZGV4IHtudW1iZXJ9IFRoZSBpbmRleCB0byBnZXQgdGhlIGNoaWxkIGF0XG4gKiBAcmV0dXJuIHtQSVhJLkRpc3BsYXlPYmplY3R9IFRoZSBjaGlsZCBhdCB0aGUgZ2l2ZW4gaW5kZXgsIGlmIGFueS5cbiAqL1xuQ29udGFpbmVyLnByb3RvdHlwZS5nZXRDaGlsZEF0ID0gZnVuY3Rpb24gKGluZGV4KVxue1xuICAgIGlmIChpbmRleCA8IDAgfHwgaW5kZXggPj0gdGhpcy5jaGlsZHJlbi5sZW5ndGgpXG4gICAge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2dldENoaWxkQXQ6IFN1cHBsaWVkIGluZGV4ICcgKyBpbmRleCArICcgZG9lcyBub3QgZXhpc3QgaW4gdGhlIGNoaWxkIGxpc3QsIG9yIHRoZSBzdXBwbGllZCBEaXNwbGF5T2JqZWN0IGlzIG5vdCBhIGNoaWxkIG9mIHRoZSBjYWxsZXInKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5jaGlsZHJlbltpbmRleF07XG59O1xuXG4vKipcbiAqIFJlbW92ZXMgYSBjaGlsZCBmcm9tIHRoZSBjb250YWluZXIuXG4gKlxuICogQHBhcmFtIGNoaWxkIHtQSVhJLkRpc3BsYXlPYmplY3R9IFRoZSBEaXNwbGF5T2JqZWN0IHRvIHJlbW92ZVxuICogQHJldHVybiB7UElYSS5EaXNwbGF5T2JqZWN0fSBUaGUgY2hpbGQgdGhhdCB3YXMgcmVtb3ZlZC5cbiAqL1xuQ29udGFpbmVyLnByb3RvdHlwZS5yZW1vdmVDaGlsZCA9IGZ1bmN0aW9uIChjaGlsZClcbntcbiAgICB2YXIgYXJndW1lbnRzTGVuZ3RoID0gYXJndW1lbnRzLmxlbmd0aDtcblxuICAgIC8vIGlmIHRoZXJlIGlzIG9ubHkgb25lIGFyZ3VtZW50IHdlIGNhbiBieXBhc3MgbG9vcGluZyB0aHJvdWdoIHRoZSB0aGVtXG4gICAgaWYoYXJndW1lbnRzTGVuZ3RoID4gMSlcbiAgICB7XG4gICAgICAgIC8vIGxvb3AgdGhyb3VnaCB0aGUgYXJndW1lbnRzIHByb3BlcnR5IGFuZCBhZGQgYWxsIGNoaWxkcmVuXG4gICAgICAgIC8vIHVzZSBpdCB0aGUgcmlnaHQgd2F5ICgubGVuZ3RoIGFuZCBbaV0pIHNvIHRoYXQgdGhpcyBmdW5jdGlvbiBjYW4gc3RpbGwgYmUgb3B0aW1pc2VkIGJ5IEpTIHJ1bnRpbWVzXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXJndW1lbnRzTGVuZ3RoOyBpKyspXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMucmVtb3ZlQ2hpbGQoIGFyZ3VtZW50c1tpXSApO1xuICAgICAgICB9XG4gICAgfSAgICAgXG4gICAgZWxzZVxuICAgIHsgICBcbiAgICAgICAgdmFyIGluZGV4ID0gdGhpcy5jaGlsZHJlbi5pbmRleE9mKGNoaWxkKTtcblxuICAgICAgICBpZiAoaW5kZXggPT09IC0xKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjaGlsZC5wYXJlbnQgPSBudWxsO1xuICAgICAgICB1dGlscy5yZW1vdmVJdGVtcyh0aGlzLmNoaWxkcmVuLCBpbmRleCwgMSk7XG5cbiAgICAgICAgLy8gVE9ETyAtIGxldHMgZWl0aGVyIGRvIGFsbCBjYWxsYmFja3Mgb3IgYWxsIGV2ZW50cy4uIG5vdCBib3RoIVxuICAgICAgICB0aGlzLm9uQ2hpbGRyZW5DaGFuZ2UoaW5kZXgpO1xuICAgICAgICBjaGlsZC5lbWl0KCdyZW1vdmVkJywgdGhpcyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGNoaWxkO1xufTtcblxuLyoqXG4gKiBSZW1vdmVzIGEgY2hpbGQgZnJvbSB0aGUgc3BlY2lmaWVkIGluZGV4IHBvc2l0aW9uLlxuICpcbiAqIEBwYXJhbSBpbmRleCB7bnVtYmVyfSBUaGUgaW5kZXggdG8gZ2V0IHRoZSBjaGlsZCBmcm9tXG4gKiBAcmV0dXJuIHtQSVhJLkRpc3BsYXlPYmplY3R9IFRoZSBjaGlsZCB0aGF0IHdhcyByZW1vdmVkLlxuICovXG5Db250YWluZXIucHJvdG90eXBlLnJlbW92ZUNoaWxkQXQgPSBmdW5jdGlvbiAoaW5kZXgpXG57XG4gICAgdmFyIGNoaWxkID0gdGhpcy5nZXRDaGlsZEF0KGluZGV4KTtcblxuICAgIGNoaWxkLnBhcmVudCA9IG51bGw7XG4gICAgdXRpbHMucmVtb3ZlSXRlbXModGhpcy5jaGlsZHJlbiwgaW5kZXgsIDEpO1xuXG4gICAgLy8gVE9ETyAtIGxldHMgZWl0aGVyIGRvIGFsbCBjYWxsYmFja3Mgb3IgYWxsIGV2ZW50cy4uIG5vdCBib3RoIVxuICAgIHRoaXMub25DaGlsZHJlbkNoYW5nZShpbmRleCk7XG4gICAgY2hpbGQuZW1pdCgncmVtb3ZlZCcsIHRoaXMpO1xuXG4gICAgcmV0dXJuIGNoaWxkO1xufTtcblxuLyoqXG4gKiBSZW1vdmVzIGFsbCBjaGlsZHJlbiBmcm9tIHRoaXMgY29udGFpbmVyIHRoYXQgYXJlIHdpdGhpbiB0aGUgYmVnaW4gYW5kIGVuZCBpbmRleGVzLlxuICpcbiAqIEBwYXJhbSBiZWdpbkluZGV4IHtudW1iZXJ9IFRoZSBiZWdpbm5pbmcgcG9zaXRpb24uIERlZmF1bHQgdmFsdWUgaXMgMC5cbiAqIEBwYXJhbSBlbmRJbmRleCB7bnVtYmVyfSBUaGUgZW5kaW5nIHBvc2l0aW9uLiBEZWZhdWx0IHZhbHVlIGlzIHNpemUgb2YgdGhlIGNvbnRhaW5lci5cbiAqL1xuQ29udGFpbmVyLnByb3RvdHlwZS5yZW1vdmVDaGlsZHJlbiA9IGZ1bmN0aW9uIChiZWdpbkluZGV4LCBlbmRJbmRleClcbntcbiAgICB2YXIgYmVnaW4gPSBiZWdpbkluZGV4IHx8IDA7XG4gICAgdmFyIGVuZCA9IHR5cGVvZiBlbmRJbmRleCA9PT0gJ251bWJlcicgPyBlbmRJbmRleCA6IHRoaXMuY2hpbGRyZW4ubGVuZ3RoO1xuICAgIHZhciByYW5nZSA9IGVuZCAtIGJlZ2luO1xuICAgIHZhciByZW1vdmVkLCBpO1xuXG4gICAgaWYgKHJhbmdlID4gMCAmJiByYW5nZSA8PSBlbmQpXG4gICAge1xuICAgICAgICByZW1vdmVkID0gdGhpcy5jaGlsZHJlbi5zcGxpY2UoYmVnaW4sIHJhbmdlKTtcblxuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgcmVtb3ZlZC5sZW5ndGg7ICsraSlcbiAgICAgICAge1xuICAgICAgICAgICAgcmVtb3ZlZFtpXS5wYXJlbnQgPSBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5vbkNoaWxkcmVuQ2hhbmdlKGJlZ2luSW5kZXgpO1xuXG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCByZW1vdmVkLmxlbmd0aDsgKytpKVxuICAgICAgICB7XG4gICAgICAgICAgICByZW1vdmVkW2ldLmVtaXQoJ3JlbW92ZWQnLCB0aGlzKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiByZW1vdmVkO1xuICAgIH1cbiAgICBlbHNlIGlmIChyYW5nZSA9PT0gMCAmJiB0aGlzLmNoaWxkcmVuLmxlbmd0aCA9PT0gMClcbiAgICB7XG4gICAgICAgIHJldHVybiBbXTtcbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ3JlbW92ZUNoaWxkcmVuOiBudW1lcmljIHZhbHVlcyBhcmUgb3V0c2lkZSB0aGUgYWNjZXB0YWJsZSByYW5nZS4nKTtcbiAgICB9XG59O1xuXG4vKipcbiAqIFVzZWZ1bCBmdW5jdGlvbiB0aGF0IHJldHVybnMgYSB0ZXh0dXJlIG9mIHRoZSBkaXNwbGF5IG9iamVjdCB0aGF0IGNhbiB0aGVuIGJlIHVzZWQgdG8gY3JlYXRlIHNwcml0ZXNcbiAqIFRoaXMgY2FuIGJlIHF1aXRlIHVzZWZ1bCBpZiB5b3VyIGRpc3BsYXlPYmplY3QgaXMgc3RhdGljIC8gY29tcGxpY2F0ZWQgYW5kIG5lZWRzIHRvIGJlIHJldXNlZCBtdWx0aXBsZSB0aW1lcy5cbiAqXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuQ2FudmFzUmVuZGVyZXJ8UElYSS5XZWJHTFJlbmRlcmVyfSBUaGUgcmVuZGVyZXIgdXNlZCB0byBnZW5lcmF0ZSB0aGUgdGV4dHVyZS5cbiAqIEBwYXJhbSByZXNvbHV0aW9uIHtudW1iZXJ9IFRoZSByZXNvbHV0aW9uIG9mIHRoZSB0ZXh0dXJlIGJlaW5nIGdlbmVyYXRlZFxuICogQHBhcmFtIHNjYWxlTW9kZSB7bnVtYmVyfSBTZWUge0BsaW5rIFBJWEkuU0NBTEVfTU9ERVN9IGZvciBwb3NzaWJsZSB2YWx1ZXNcbiAqIEByZXR1cm4ge1BJWEkuVGV4dHVyZX0gYSB0ZXh0dXJlIG9mIHRoZSBkaXNwbGF5IG9iamVjdFxuICovXG5Db250YWluZXIucHJvdG90eXBlLmdlbmVyYXRlVGV4dHVyZSA9IGZ1bmN0aW9uIChyZW5kZXJlciwgcmVzb2x1dGlvbiwgc2NhbGVNb2RlKVxue1xuICAgIHZhciBib3VuZHMgPSB0aGlzLmdldExvY2FsQm91bmRzKCk7XG5cbiAgICB2YXIgcmVuZGVyVGV4dHVyZSA9IG5ldyBSZW5kZXJUZXh0dXJlKHJlbmRlcmVyLCBib3VuZHMud2lkdGggfCAwLCBib3VuZHMuaGVpZ2h0IHwgMCwgc2NhbGVNb2RlLCByZXNvbHV0aW9uKTtcblxuICAgIF90ZW1wTWF0cml4LnR4ID0gLWJvdW5kcy54O1xuICAgIF90ZW1wTWF0cml4LnR5ID0gLWJvdW5kcy55O1xuXG4gICAgcmVuZGVyVGV4dHVyZS5yZW5kZXIodGhpcywgX3RlbXBNYXRyaXgpO1xuXG4gICAgcmV0dXJuIHJlbmRlclRleHR1cmU7XG59O1xuXG4vKlxuICogVXBkYXRlcyB0aGUgdHJhbnNmb3JtIG9uIGFsbCBjaGlsZHJlbiBvZiB0aGlzIGNvbnRhaW5lciBmb3IgcmVuZGVyaW5nXG4gKlxuICogQHByaXZhdGVcbiAqL1xuQ29udGFpbmVyLnByb3RvdHlwZS51cGRhdGVUcmFuc2Zvcm0gPSBmdW5jdGlvbiAoKVxue1xuICAgIGlmICghdGhpcy52aXNpYmxlKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuZGlzcGxheU9iamVjdFVwZGF0ZVRyYW5zZm9ybSgpO1xuXG4gICAgZm9yICh2YXIgaSA9IDAsIGogPSB0aGlzLmNoaWxkcmVuLmxlbmd0aDsgaSA8IGo7ICsraSlcbiAgICB7XG4gICAgICAgIHRoaXMuY2hpbGRyZW5baV0udXBkYXRlVHJhbnNmb3JtKCk7XG4gICAgfVxuXG4gICAgdGhpcy5kaXJ0eVRyYW5zZm9ybSA9IGZhbHNlO1xufTtcblxuLy8gcGVyZm9ybWFuY2UgaW5jcmVhc2UgdG8gYXZvaWQgdXNpbmcgY2FsbC4uICgxMHggZmFzdGVyKVxuQ29udGFpbmVyLnByb3RvdHlwZS5jb250YWluZXJVcGRhdGVUcmFuc2Zvcm0gPSBDb250YWluZXIucHJvdG90eXBlLnVwZGF0ZVRyYW5zZm9ybTtcblxuLyoqXG4gKiBSZXRyaWV2ZXMgdGhlIGJvdW5kcyBvZiB0aGUgQ29udGFpbmVyIGFzIGEgcmVjdGFuZ2xlLiBUaGUgYm91bmRzIGNhbGN1bGF0aW9uIHRha2VzIGFsbCB2aXNpYmxlIGNoaWxkcmVuIGludG8gY29uc2lkZXJhdGlvbi5cbiAqXG4gKiBAcmV0dXJuIHtQSVhJLlJlY3RhbmdsZX0gVGhlIHJlY3Rhbmd1bGFyIGJvdW5kaW5nIGFyZWFcbiAqL1xuQ29udGFpbmVyLnByb3RvdHlwZS5nZXRCb3VuZHMgPSBmdW5jdGlvbiAoKVxue1xuICAgIGlmKCF0aGlzLl9jdXJyZW50Qm91bmRzKVxuICAgIHtcblxuICAgICAgICBpZiAodGhpcy5jaGlsZHJlbi5sZW5ndGggPT09IDApXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiBtYXRoLlJlY3RhbmdsZS5FTVBUWTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFRPRE8gdGhlIGJvdW5kcyBoYXZlIGFscmVhZHkgYmVlbiBjYWxjdWxhdGVkIHRoaXMgcmVuZGVyIHNlc3Npb24gc28gcmV0dXJuIHdoYXQgd2UgaGF2ZVxuXG4gICAgICAgIHZhciBtaW5YID0gSW5maW5pdHk7XG4gICAgICAgIHZhciBtaW5ZID0gSW5maW5pdHk7XG5cbiAgICAgICAgdmFyIG1heFggPSAtSW5maW5pdHk7XG4gICAgICAgIHZhciBtYXhZID0gLUluZmluaXR5O1xuXG4gICAgICAgIHZhciBjaGlsZEJvdW5kcztcbiAgICAgICAgdmFyIGNoaWxkTWF4WDtcbiAgICAgICAgdmFyIGNoaWxkTWF4WTtcblxuICAgICAgICB2YXIgY2hpbGRWaXNpYmxlID0gZmFsc2U7XG5cbiAgICAgICAgZm9yICh2YXIgaSA9IDAsIGogPSB0aGlzLmNoaWxkcmVuLmxlbmd0aDsgaSA8IGo7ICsraSlcbiAgICAgICAge1xuICAgICAgICAgICAgdmFyIGNoaWxkID0gdGhpcy5jaGlsZHJlbltpXTtcblxuICAgICAgICAgICAgaWYgKCFjaGlsZC52aXNpYmxlKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjaGlsZFZpc2libGUgPSB0cnVlO1xuXG4gICAgICAgICAgICBjaGlsZEJvdW5kcyA9IHRoaXMuY2hpbGRyZW5baV0uZ2V0Qm91bmRzKCk7XG5cbiAgICAgICAgICAgIG1pblggPSBtaW5YIDwgY2hpbGRCb3VuZHMueCA/IG1pblggOiBjaGlsZEJvdW5kcy54O1xuICAgICAgICAgICAgbWluWSA9IG1pblkgPCBjaGlsZEJvdW5kcy55ID8gbWluWSA6IGNoaWxkQm91bmRzLnk7XG5cbiAgICAgICAgICAgIGNoaWxkTWF4WCA9IGNoaWxkQm91bmRzLndpZHRoICsgY2hpbGRCb3VuZHMueDtcbiAgICAgICAgICAgIGNoaWxkTWF4WSA9IGNoaWxkQm91bmRzLmhlaWdodCArIGNoaWxkQm91bmRzLnk7XG5cbiAgICAgICAgICAgIG1heFggPSBtYXhYID4gY2hpbGRNYXhYID8gbWF4WCA6IGNoaWxkTWF4WDtcbiAgICAgICAgICAgIG1heFkgPSBtYXhZID4gY2hpbGRNYXhZID8gbWF4WSA6IGNoaWxkTWF4WTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghY2hpbGRWaXNpYmxlKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gbWF0aC5SZWN0YW5nbGUuRU1QVFk7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgYm91bmRzID0gdGhpcy5fYm91bmRzO1xuXG4gICAgICAgIGJvdW5kcy54ID0gbWluWDtcbiAgICAgICAgYm91bmRzLnkgPSBtaW5ZO1xuICAgICAgICBib3VuZHMud2lkdGggPSBtYXhYIC0gbWluWDtcbiAgICAgICAgYm91bmRzLmhlaWdodCA9IG1heFkgLSBtaW5ZO1xuXG4gICAgICAgIHRoaXMuX2N1cnJlbnRCb3VuZHMgPSBib3VuZHM7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuX2N1cnJlbnRCb3VuZHM7XG59O1xuXG5Db250YWluZXIucHJvdG90eXBlLmNvbnRhaW5lckdldEJvdW5kcyA9IENvbnRhaW5lci5wcm90b3R5cGUuZ2V0Qm91bmRzO1xuXG4vKipcbiAqIFJldHJpZXZlcyB0aGUgbm9uLWdsb2JhbCBsb2NhbCBib3VuZHMgb2YgdGhlIENvbnRhaW5lciBhcyBhIHJlY3RhbmdsZS5cbiAqIFRoZSBjYWxjdWxhdGlvbiB0YWtlcyBhbGwgdmlzaWJsZSBjaGlsZHJlbiBpbnRvIGNvbnNpZGVyYXRpb24uXG4gKlxuICogQHJldHVybiB7UElYSS5SZWN0YW5nbGV9IFRoZSByZWN0YW5ndWxhciBib3VuZGluZyBhcmVhXG4gKi9cbkNvbnRhaW5lci5wcm90b3R5cGUuZ2V0TG9jYWxCb3VuZHMgPSBmdW5jdGlvbiAoKVxue1xuICAgIHZhciBtYXRyaXhDYWNoZSA9IHRoaXMud29ybGRUcmFuc2Zvcm07XG5cbiAgICB0aGlzLndvcmxkVHJhbnNmb3JtID0gbWF0aC5NYXRyaXguSURFTlRJVFk7XG5cbiAgICBmb3IgKHZhciBpID0gMCwgaiA9IHRoaXMuY2hpbGRyZW4ubGVuZ3RoOyBpIDwgajsgKytpKVxuICAgIHtcbiAgICAgICAgdGhpcy5jaGlsZHJlbltpXS51cGRhdGVUcmFuc2Zvcm0oKTtcbiAgICB9XG5cbiAgICB0aGlzLndvcmxkVHJhbnNmb3JtID0gbWF0cml4Q2FjaGU7XG5cbiAgICB0aGlzLl9jdXJyZW50Qm91bmRzID0gbnVsbDtcblxuICAgIHJldHVybiB0aGlzLmdldEJvdW5kcyggbWF0aC5NYXRyaXguSURFTlRJVFkgKTtcbn07XG5cbi8qKlxuICogUmVuZGVycyB0aGUgb2JqZWN0IHVzaW5nIHRoZSBXZWJHTCByZW5kZXJlclxuICpcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5XZWJHTFJlbmRlcmVyfSBUaGUgcmVuZGVyZXJcbiAqL1xuQ29udGFpbmVyLnByb3RvdHlwZS5yZW5kZXJXZWJHTCA9IGZ1bmN0aW9uIChyZW5kZXJlcilcbntcblxuICAgIC8vIGlmIHRoZSBvYmplY3QgaXMgbm90IHZpc2libGUgb3IgdGhlIGFscGhhIGlzIDAgdGhlbiBubyBuZWVkIHRvIHJlbmRlciB0aGlzIGVsZW1lbnRcbiAgICBpZiAoIXRoaXMudmlzaWJsZSB8fCB0aGlzLndvcmxkQWxwaGEgPD0gMCB8fCAhdGhpcy5yZW5kZXJhYmxlKVxuICAgIHtcbiAgICAgIFxuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFyIGksIGo7XG5cbiAgICAvLyBkbyBhIHF1aWNrIGNoZWNrIHRvIHNlZSBpZiB0aGlzIGVsZW1lbnQgaGFzIGEgbWFzayBvciBhIGZpbHRlci5cbiAgICBpZiAodGhpcy5fbWFzayB8fCB0aGlzLl9maWx0ZXJzKVxuICAgIHtcbiAgICAgICAgcmVuZGVyZXIuY3VycmVudFJlbmRlcmVyLmZsdXNoKCk7XG5cbiAgICAgICAgLy8gcHVzaCBmaWx0ZXIgZmlyc3QgYXMgd2UgbmVlZCB0byBlbnN1cmUgdGhlIHN0ZW5jaWwgYnVmZmVyIGlzIGNvcnJlY3QgZm9yIGFueSBtYXNraW5nXG4gICAgICAgIGlmICh0aGlzLl9maWx0ZXJzICYmIHRoaXMuX2ZpbHRlcnMubGVuZ3RoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLnB1c2hGaWx0ZXIodGhpcywgdGhpcy5fZmlsdGVycyk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5fbWFzaylcbiAgICAgICAge1xuICAgICAgICAgICAgcmVuZGVyZXIubWFza01hbmFnZXIucHVzaE1hc2sodGhpcywgdGhpcy5fbWFzayk7XG4gICAgICAgIH1cblxuICAgICAgICByZW5kZXJlci5jdXJyZW50UmVuZGVyZXIuc3RhcnQoKTtcblxuICAgICAgICAvLyBhZGQgdGhpcyBvYmplY3QgdG8gdGhlIGJhdGNoLCBvbmx5IHJlbmRlcmVkIGlmIGl0IGhhcyBhIHRleHR1cmUuXG4gICAgICAgIHRoaXMuX3JlbmRlcldlYkdMKHJlbmRlcmVyKTtcblxuICAgICAgICAvLyBub3cgbG9vcCB0aHJvdWdoIHRoZSBjaGlsZHJlbiBhbmQgbWFrZSBzdXJlIHRoZXkgZ2V0IHJlbmRlcmVkXG4gICAgICAgIGZvciAoaSA9IDAsIGogPSB0aGlzLmNoaWxkcmVuLmxlbmd0aDsgaSA8IGo7IGkrKylcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5jaGlsZHJlbltpXS5yZW5kZXJXZWJHTChyZW5kZXJlcik7XG4gICAgICAgIH1cblxuICAgICAgICByZW5kZXJlci5jdXJyZW50UmVuZGVyZXIuZmx1c2goKTtcblxuICAgICAgICBpZiAodGhpcy5fbWFzaylcbiAgICAgICAge1xuICAgICAgICAgICAgcmVuZGVyZXIubWFza01hbmFnZXIucG9wTWFzayh0aGlzLCB0aGlzLl9tYXNrKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLl9maWx0ZXJzKVxuICAgICAgICB7XG4gICAgICAgICAgICByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLnBvcEZpbHRlcigpO1xuXG4gICAgICAgIH1cbiAgICAgICAgcmVuZGVyZXIuY3VycmVudFJlbmRlcmVyLnN0YXJ0KCk7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHRoaXMuX3JlbmRlcldlYkdMKHJlbmRlcmVyKTtcblxuICAgICAgICAvLyBzaW1wbGUgcmVuZGVyIGNoaWxkcmVuIVxuICAgICAgICBmb3IgKGkgPSAwLCBqID0gdGhpcy5jaGlsZHJlbi5sZW5ndGg7IGkgPCBqOyArK2kpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuY2hpbGRyZW5baV0ucmVuZGVyV2ViR0wocmVuZGVyZXIpO1xuICAgICAgICB9XG4gICAgfVxufTtcblxuLyoqXG4gKiBUbyBiZSBvdmVycmlkZGVuIGJ5IHRoZSBzdWJjbGFzc1xuICpcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5XZWJHTFJlbmRlcmVyfSBUaGUgcmVuZGVyZXJcbiAqIEBwcml2YXRlXG4gKi9cbkNvbnRhaW5lci5wcm90b3R5cGUuX3JlbmRlcldlYkdMID0gZnVuY3Rpb24gKHJlbmRlcmVyKSAvLyBqc2hpbnQgdW51c2VkOmZhbHNlXG57XG4gICAgLy8gdGhpcyBpcyB3aGVyZSBjb250ZW50IGl0c2VsZiBnZXRzIHJlbmRlcmVkLi4uXG59O1xuXG4vKipcbiAqIFRvIGJlIG92ZXJyaWRkZW4gYnkgdGhlIHN1YmNsYXNzXG4gKlxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLkNhbnZhc1JlbmRlcmVyfSBUaGUgcmVuZGVyZXJcbiAqIEBwcml2YXRlXG4gKi9cbkNvbnRhaW5lci5wcm90b3R5cGUuX3JlbmRlckNhbnZhcyA9IGZ1bmN0aW9uIChyZW5kZXJlcikgLy8ganNoaW50IHVudXNlZDpmYWxzZVxue1xuICAgIC8vIHRoaXMgaXMgd2hlcmUgY29udGVudCBpdHNlbGYgZ2V0cyByZW5kZXJlZC4uLlxufTtcblxuXG4vKipcbiAqIFJlbmRlcnMgdGhlIG9iamVjdCB1c2luZyB0aGUgQ2FudmFzIHJlbmRlcmVyXG4gKlxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLkNhbnZhc1JlbmRlcmVyfSBUaGUgcmVuZGVyZXJcbiAqL1xuQ29udGFpbmVyLnByb3RvdHlwZS5yZW5kZXJDYW52YXMgPSBmdW5jdGlvbiAocmVuZGVyZXIpXG57XG4gICAgLy8gaWYgbm90IHZpc2libGUgb3IgdGhlIGFscGhhIGlzIDAgdGhlbiBubyBuZWVkIHRvIHJlbmRlciB0aGlzXG4gICAgaWYgKCF0aGlzLnZpc2libGUgfHwgdGhpcy5hbHBoYSA8PSAwIHx8ICF0aGlzLnJlbmRlcmFibGUpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX21hc2spXG4gICAge1xuICAgICAgICByZW5kZXJlci5tYXNrTWFuYWdlci5wdXNoTWFzayh0aGlzLl9tYXNrLCByZW5kZXJlcik7XG4gICAgfVxuXG4gICAgdGhpcy5fcmVuZGVyQ2FudmFzKHJlbmRlcmVyKTtcbiAgICBmb3IgKHZhciBpID0gMCwgaiA9IHRoaXMuY2hpbGRyZW4ubGVuZ3RoOyBpIDwgajsgKytpKVxuICAgIHtcbiAgICAgICAgdGhpcy5jaGlsZHJlbltpXS5yZW5kZXJDYW52YXMocmVuZGVyZXIpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLl9tYXNrKVxuICAgIHtcbiAgICAgICAgcmVuZGVyZXIubWFza01hbmFnZXIucG9wTWFzayhyZW5kZXJlcik7XG4gICAgfVxufTtcblxuLyoqXG4gKiBEZXN0cm95cyB0aGUgY29udGFpbmVyXG4gKiBAcGFyYW0gW2Rlc3Ryb3lDaGlsZHJlbj1mYWxzZV0ge2Jvb2xlYW59IGlmIHNldCB0byB0cnVlLCBhbGwgdGhlIGNoaWxkcmVuIHdpbGwgaGF2ZSB0aGVpciBkZXN0cm95IG1ldGhvZCBjYWxsZWQgYXMgd2VsbFxuICovXG5Db250YWluZXIucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoZGVzdHJveUNoaWxkcmVuKVxue1xuICAgIERpc3BsYXlPYmplY3QucHJvdG90eXBlLmRlc3Ryb3kuY2FsbCh0aGlzKTtcblxuICAgIGlmIChkZXN0cm95Q2hpbGRyZW4pXG4gICAge1xuICAgICAgICBmb3IgKHZhciBpID0gMCwgaiA9IHRoaXMuY2hpbGRyZW4ubGVuZ3RoOyBpIDwgajsgKytpKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmNoaWxkcmVuW2ldLmRlc3Ryb3koZGVzdHJveUNoaWxkcmVuKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMucmVtb3ZlQ2hpbGRyZW4oKTtcblxuICAgIHRoaXMuY2hpbGRyZW4gPSBudWxsO1xufTtcbiIsInZhciBtYXRoID0gcmVxdWlyZSgnLi4vbWF0aCcpLFxuICAgIFJlbmRlclRleHR1cmUgPSByZXF1aXJlKCcuLi90ZXh0dXJlcy9SZW5kZXJUZXh0dXJlJyksXG4gICAgRXZlbnRFbWl0dGVyID0gcmVxdWlyZSgnZXZlbnRlbWl0dGVyMycpLFxuICAgIENPTlNUID0gcmVxdWlyZSgnLi4vY29uc3QnKSxcbiAgICBfdGVtcE1hdHJpeCA9IG5ldyBtYXRoLk1hdHJpeCgpLFxuICAgIF90ZW1wRGlzcGxheU9iamVjdFBhcmVudCA9IHt3b3JsZFRyYW5zZm9ybTpuZXcgbWF0aC5NYXRyaXgoKSwgd29ybGRBbHBoYToxLCBjaGlsZHJlbjpbXX07XG5cblxuLyoqXG4gKiBUaGUgYmFzZSBjbGFzcyBmb3IgYWxsIG9iamVjdHMgdGhhdCBhcmUgcmVuZGVyZWQgb24gdGhlIHNjcmVlbi5cbiAqIFRoaXMgaXMgYW4gYWJzdHJhY3QgY2xhc3MgYW5kIHNob3VsZCBub3QgYmUgdXNlZCBvbiBpdHMgb3duIHJhdGhlciBpdCBzaG91bGQgYmUgZXh0ZW5kZWQuXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBFdmVudEVtaXR0ZXJcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKi9cbmZ1bmN0aW9uIERpc3BsYXlPYmplY3QoKVxue1xuICAgIEV2ZW50RW1pdHRlci5jYWxsKHRoaXMpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGNvb3JkaW5hdGUgb2YgdGhlIG9iamVjdCByZWxhdGl2ZSB0byB0aGUgbG9jYWwgY29vcmRpbmF0ZXMgb2YgdGhlIHBhcmVudC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuUG9pbnR9XG4gICAgICovXG4gICAgdGhpcy5wb3NpdGlvbiA9IG5ldyBtYXRoLlBvaW50KCk7XG4gICAgdGhpcy5fcG9zaXRpb24gPSBuZXcgQ2FjaGVQb2ludCh0aGlzKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBzY2FsZSBmYWN0b3Igb2YgdGhlIG9iamVjdC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuUG9pbnR9XG4gICAgICovXG4gICAgdGhpcy5zY2FsZSA9IG5ldyBtYXRoLlBvaW50KDEsIDEpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHBpdm90IHBvaW50IG9mIHRoZSBkaXNwbGF5T2JqZWN0IHRoYXQgaXQgcm90YXRlcyBhcm91bmRcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuUG9pbnR9XG4gICAgICovXG4gICAgdGhpcy5waXZvdCA9IG5ldyBtYXRoLlBvaW50KDAsIDApO1xuXG5cbiAgICAvKipcbiAgICAgKiBUaGUgc2tldyBmYWN0b3IgZm9yIHRoZSBvYmplY3QgaW4gcmFkaWFucy5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuUG9pbnR9XG4gICAgICovXG4gICAgdGhpcy5za2V3ID0gbmV3IG1hdGguUG9pbnQoMCwgMCk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgcm90YXRpb24gb2YgdGhlIG9iamVjdCBpbiByYWRpYW5zLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMuX3JvdGF0aW9uID0gMDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBvcGFjaXR5IG9mIHRoZSBvYmplY3QuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy5hbHBoYSA9IDE7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgdmlzaWJpbGl0eSBvZiB0aGUgb2JqZWN0LiBJZiBmYWxzZSB0aGUgb2JqZWN0IHdpbGwgbm90IGJlIGRyYXduLCBhbmRcbiAgICAgKiB0aGUgdXBkYXRlVHJhbnNmb3JtIGZ1bmN0aW9uIHdpbGwgbm90IGJlIGNhbGxlZC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICovXG4gICAgdGhpcy52aXNpYmxlID0gdHJ1ZTtcblxuICAgIC8qKlxuICAgICAqIENhbiB0aGlzIG9iamVjdCBiZSByZW5kZXJlZCwgaWYgZmFsc2UgdGhlIG9iamVjdCB3aWxsIG5vdCBiZSBkcmF3biBidXQgdGhlIHVwZGF0ZVRyYW5zZm9ybVxuICAgICAqIG1ldGhvZHMgd2lsbCBzdGlsbCBiZSBjYWxsZWQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqL1xuICAgIHRoaXMucmVuZGVyYWJsZSA9IHRydWU7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgZGlzcGxheSBvYmplY3QgY29udGFpbmVyIHRoYXQgY29udGFpbnMgdGhpcyBkaXNwbGF5IG9iamVjdC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuQ29udGFpbmVyfVxuICAgICAqIEByZWFkT25seVxuICAgICAqL1xuICAgIHRoaXMucGFyZW50ID0gbnVsbDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBtdWx0aXBsaWVkIGFscGhhIG9mIHRoZSBkaXNwbGF5T2JqZWN0XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQHJlYWRPbmx5XG4gICAgICovXG4gICAgdGhpcy53b3JsZEFscGhhID0gMTtcblxuICAgIC8qKlxuICAgICAqIEN1cnJlbnQgdHJhbnNmb3JtIG9mIHRoZSBvYmplY3QgYmFzZWQgb24gd29ybGQgKHBhcmVudCkgZmFjdG9yc1xuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5NYXRyaXh9XG4gICAgICogQHJlYWRPbmx5XG4gICAgICovXG4gICAgdGhpcy53b3JsZFRyYW5zZm9ybSA9IG5ldyBtYXRoLk1hdHJpeCgpO1xuICAgIHRoaXMubG9jYWxUcmFuc2Zvcm0gPSBuZXcgbWF0aC5NYXRyaXgoKTtcblxuXG4gICAgLyoqXG4gICAgICogVGhlIGFyZWEgdGhlIGZpbHRlciBpcyBhcHBsaWVkIHRvLiBUaGlzIGlzIHVzZWQgYXMgbW9yZSBvZiBhbiBvcHRpbWlzYXRpb25cbiAgICAgKiByYXRoZXIgdGhhbiBmaWd1cmluZyBvdXQgdGhlIGRpbWVuc2lvbnMgb2YgdGhlIGRpc3BsYXlPYmplY3QgZWFjaCBmcmFtZSB5b3UgY2FuIHNldCB0aGlzIHJlY3RhbmdsZVxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5SZWN0YW5nbGV9XG4gICAgICovXG4gICAgdGhpcy5maWx0ZXJBcmVhID0gbnVsbDtcblxuICAgIC8qKlxuICAgICAqIGNhY2hlZCBzaW4gcm90YXRpb25cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX3NyID0gMDtcblxuICAgIC8qKlxuICAgICAqIGNhY2hlZCBjb3Mgcm90YXRpb25cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX2NyID0gMTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBvcmlnaW5hbCwgY2FjaGVkIGJvdW5kcyBvZiB0aGUgb2JqZWN0XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlJlY3RhbmdsZX1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX2JvdW5kcyA9IG5ldyBtYXRoLlJlY3RhbmdsZSgwLCAwLCAxLCAxKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBtb3N0IHVwLXRvLWRhdGUgYm91bmRzIG9mIHRoZSBvYmplY3RcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuUmVjdGFuZ2xlfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fY3VycmVudEJvdW5kcyA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgb3JpZ2luYWwsIGNhY2hlZCBtYXNrIG9mIHRoZSBvYmplY3RcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuUmVjdGFuZ2xlfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fbWFzayA9IG51bGw7XG5cbiAgICB0aGlzLmRpcnR5VHJhbnNmb3JtID0gdHJ1ZTtcbn1cblxuLy8gY29uc3RydWN0b3JcbkRpc3BsYXlPYmplY3QucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShFdmVudEVtaXR0ZXIucHJvdG90eXBlKTtcbkRpc3BsYXlPYmplY3QucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gRGlzcGxheU9iamVjdDtcbm1vZHVsZS5leHBvcnRzID0gRGlzcGxheU9iamVjdDtcblxudmFyIENhY2hlUG9pbnQgPSBmdW5jdGlvbihkb2Mpe1xuICAgIFxuICAgIHRoaXMuZG9jID0gZG9jO1xuXG4gICAgdGhpcy54ID0gMDtcbiAgICB0aGlzLnkgPSAwO1xufVxuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhDYWNoZVBvaW50LnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFRoZSBwb3NpdGlvbiBvZiB0aGUgZGlzcGxheU9iamVjdCBvbiB0aGUgeCBheGlzIHJlbGF0aXZlIHRvIHRoZSBsb2NhbCBjb29yZGluYXRlcyBvZiB0aGUgcGFyZW50LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLkRpc3BsYXlPYmplY3QjXG4gICAgICovXG4gICAgeDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmRvYy5wb3NpdGlvbi54O1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5kb2MucG9zaXRpb24ueCA9IHZhbHVlO1xuICAgICAgICAgICAgdGhpcy5kb2MuZGlydHlUcmFuc2Zvcm0gPSB0cnVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIHk6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5kb2MucG9zaWl0b24ueTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuZG9jLnBvc2l0aW9uLnkgPSB2YWx1ZTtcbiAgICAgICAgICAgIHRoaXMuZG9jLmRpcnR5VHJhbnNmb3JtID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuXG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKERpc3BsYXlPYmplY3QucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogVGhlIHBvc2l0aW9uIG9mIHRoZSBkaXNwbGF5T2JqZWN0IG9uIHRoZSB4IGF4aXMgcmVsYXRpdmUgdG8gdGhlIGxvY2FsIGNvb3JkaW5hdGVzIG9mIHRoZSBwYXJlbnQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuRGlzcGxheU9iamVjdCNcbiAgICAgKi9cbiAgICB4OiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMucG9zaXRpb24ueDtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMucG9zaXRpb24ueCA9IHZhbHVlO1xuICAgICAgICAgICAgdGhpcy5kaXJ0eVRyYW5zZm9ybSA9IHRydWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVGhlIHBvc2l0aW9uIG9mIHRoZSBkaXNwbGF5T2JqZWN0IG9uIHRoZSB5IGF4aXMgcmVsYXRpdmUgdG8gdGhlIGxvY2FsIGNvb3JkaW5hdGVzIG9mIHRoZSBwYXJlbnQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuRGlzcGxheU9iamVjdCNcbiAgICAgKi9cbiAgICB5OiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMucG9zaXRpb24ueTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMucG9zaXRpb24ueSA9IHZhbHVlO1xuICAgICAgICAgICAgdGhpcy5kaXJ0eVRyYW5zZm9ybSA9IHRydWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgc2NhbGVYOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuc2NhbGUueDtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuc2NhbGUueCA9IHZhbHVlO1xuICAgICAgICAgICAgdGhpcy5kaXJ0eVRyYW5zZm9ybSA9IHRydWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVGhlIHBvc2l0aW9uIG9mIHRoZSBkaXNwbGF5T2JqZWN0IG9uIHRoZSB5IGF4aXMgcmVsYXRpdmUgdG8gdGhlIGxvY2FsIGNvb3JkaW5hdGVzIG9mIHRoZSBwYXJlbnQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuRGlzcGxheU9iamVjdCNcbiAgICAgKi9cbiAgICBzY2FsZVk6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5zY2FsZS55O1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5zY2FsZS55ID0gdmFsdWU7XG4gICAgICAgICAgICB0aGlzLmRpcnR5VHJhbnNmb3JtID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICByb3RhdGlvbjoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9yb3RhdGlvbjtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuX3JvdGF0aW9uID0gdmFsdWU7XG4gICAgICAgICAgICB0aGlzLmRpcnR5VHJhbnNmb3JtID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMuX3NyID0gTWF0aC5zaW4odmFsdWUpO1xuICAgICAgICAgICAgdGhpcy5fY3IgPSBNYXRoLmNvcyh2YWx1ZSk7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVGhlIHBvc2l0aW9uIG9mIHRoZSBkaXNwbGF5T2JqZWN0IG9uIHRoZSB5IGF4aXMgcmVsYXRpdmUgdG8gdGhlIGxvY2FsIGNvb3JkaW5hdGVzIG9mIHRoZSBwYXJlbnQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuRGlzcGxheU9iamVjdCNcbiAgICAgKi9cbiAgICBzY2FsZVk6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5zY2FsZS55O1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5zY2FsZS55ID0gdmFsdWU7XG4gICAgICAgICAgICB0aGlzLmRpcnR5VHJhbnNmb3JtID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBJbmRpY2F0ZXMgaWYgdGhlIHNwcml0ZSBpcyBnbG9iYWxseSB2aXNpYmxlLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5EaXNwbGF5T2JqZWN0I1xuICAgICAqIEByZWFkb25seVxuICAgICAqL1xuICAgIHdvcmxkVmlzaWJsZToge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHZhciBpdGVtID0gdGhpcztcblxuICAgICAgICAgICAgZG8ge1xuICAgICAgICAgICAgICAgIGlmICghaXRlbS52aXNpYmxlKVxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGl0ZW0gPSBpdGVtLnBhcmVudDtcbiAgICAgICAgICAgIH0gd2hpbGUgKGl0ZW0pO1xuXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBTZXRzIGEgbWFzayBmb3IgdGhlIGRpc3BsYXlPYmplY3QuIEEgbWFzayBpcyBhbiBvYmplY3QgdGhhdCBsaW1pdHMgdGhlIHZpc2liaWxpdHkgb2YgYW4gb2JqZWN0IHRvIHRoZSBzaGFwZSBvZiB0aGUgbWFzayBhcHBsaWVkIHRvIGl0LlxuICAgICAqIEluIFBJWEkgYSByZWd1bGFyIG1hc2sgbXVzdCBiZSBhIFBJWEkuR3JhcGhpY3Mgb3IgYSBQSVhJLlNwcml0ZSBvYmplY3QuIFRoaXMgYWxsb3dzIGZvciBtdWNoIGZhc3RlciBtYXNraW5nIGluIGNhbnZhcyBhcyBpdCB1dGlsaXNlcyBzaGFwZSBjbGlwcGluZy5cbiAgICAgKiBUbyByZW1vdmUgYSBtYXNrLCBzZXQgdGhpcyBwcm9wZXJ0eSB0byBudWxsLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5HcmFwaGljc3xQSVhJLlNwcml0ZX1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5EaXNwbGF5T2JqZWN0I1xuICAgICAqL1xuICAgIG1hc2s6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fbWFzaztcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGlmICh0aGlzLl9tYXNrKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHRoaXMuX21hc2sucmVuZGVyYWJsZSA9IHRydWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuX21hc2sgPSB2YWx1ZTtcblxuICAgICAgICAgICAgaWYgKHRoaXMuX21hc2spXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdGhpcy5fbWFzay5yZW5kZXJhYmxlID0gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgZmlsdGVycyBmb3IgdGhlIGRpc3BsYXlPYmplY3QuXG4gICAgICogKiBJTVBPUlRBTlQ6IFRoaXMgaXMgYSB3ZWJHTCBvbmx5IGZlYXR1cmUgYW5kIHdpbGwgYmUgaWdub3JlZCBieSB0aGUgY2FudmFzIHJlbmRlcmVyLlxuICAgICAqIFRvIHJlbW92ZSBmaWx0ZXJzIHNpbXBseSBzZXQgdGhpcyBwcm9wZXJ0eSB0byAnbnVsbCdcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuQWJzdHJhY3RGaWx0ZXJbXX1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5EaXNwbGF5T2JqZWN0I1xuICAgICAqL1xuICAgIGZpbHRlcnM6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fZmlsdGVycyAmJiB0aGlzLl9maWx0ZXJzLnNsaWNlKCk7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLl9maWx0ZXJzID0gdmFsdWUgJiYgdmFsdWUuc2xpY2UoKTtcbiAgICAgICAgfVxuICAgIH1cblxufSk7XG5cbi8qXG4gKiBVcGRhdGVzIHRoZSBvYmplY3QgdHJhbnNmb3JtIGZvciByZW5kZXJpbmdcbiAqXG4gKiBUT0RPIC0gT3B0aW1pemF0aW9uIHBhc3MhXG4gKi9cbkRpc3BsYXlPYmplY3QucHJvdG90eXBlLnVwZGF0ZVRyYW5zZm9ybSA9IGZ1bmN0aW9uICgpXG57XG4gICAgdmFyIHB0ID0gdGhpcy5wYXJlbnQud29ybGRUcmFuc2Zvcm07XG4gICAgdmFyIHd0ID0gdGhpcy53b3JsZFRyYW5zZm9ybTtcbiAgICB2YXIgbHQgPSB0aGlzLmxvY2FsVHJhbnNmb3JtO1xuXG4gICAgaWYodGhpcy5kaXJ0eVRyYW5zZm9ybSlcbiAgICB7XG4gICAgICAgIC8vIGdldCB0aGUgbWF0cml4IHZhbHVlcyBvZiB0aGUgZGlzcGxheW9iamVjdCBiYXNlZCBvbiBpdHMgdHJhbnNmb3JtIHByb3BlcnRpZXMuLlxuICAgICAgICBsdC5hICA9ICB0aGlzLl9jciAqIHRoaXMuc2NhbGUueDtcbiAgICAgICAgbHQuYiAgPSAgdGhpcy5fc3IgKiB0aGlzLnNjYWxlLng7XG4gICAgICAgIGx0LmMgID0gLXRoaXMuX3NyICogdGhpcy5zY2FsZS55O1xuICAgICAgICBsdC5kICA9ICB0aGlzLl9jciAqIHRoaXMuc2NhbGUueTtcbiAgICAgICAgbHQudHggPSAgdGhpcy5wb3NpdGlvbi54IC0gKHRoaXMucGl2b3QueCAqIGx0LmEgKyB0aGlzLnBpdm90LnkgKiBsdC5jKTtcbiAgICAgICAgbHQudHkgPSAgdGhpcy5wb3NpdGlvbi55IC0gKHRoaXMucGl2b3QueCAqIGx0LmIgKyB0aGlzLnBpdm90LnkgKiBsdC5kKTtcbiAgICB9XG5cbiAgICBpZih0aGlzLmRpcnR5VHJhbnNmb3JtIHx8IHRoaXMucGFyZW50LmRpcnR5VHJhbnNmb3JtKVxuICAgIHsgICAgICBcbiAgICAgICAgLy8gY29uY2F0IHRoZSBwYXJlbnQgbWF0cml4IHdpdGggdGhlIG9iamVjdHMgdHJhbnNmb3JtLlxuICAgICAgICB3dC5hICA9IGx0LmEgICogcHQuYSArIGx0LmIgICogcHQuYztcbiAgICAgICAgd3QuYiAgPSBsdC5hICAqIHB0LmIgKyBsdC5iICAqIHB0LmQ7XG4gICAgICAgIHd0LmMgID0gbHQuYyAgKiBwdC5hICsgbHQuZCAgKiBwdC5jO1xuICAgICAgICB3dC5kICA9IGx0LmMgICogcHQuYiArIGx0LmQgICogcHQuZDtcbiAgICAgICAgd3QudHggPSBsdC50eCAqIHB0LmEgKyBsdC50eSAqIHB0LmMgKyBwdC50eDtcbiAgICAgICAgd3QudHkgPSBsdC50eCAqIHB0LmIgKyBsdC50eSAqIHB0LmQgKyBwdC50eTsgICAgICAgXG4gICAgXG4gICAgICAgIHRoaXMuX2N1cnJlbnRCb3VuZHMgPSBudWxsO1xuICAgIH1cblxuICAgIC8vIG11bHRpcGx5IHRoZSBhbHBoYXMuLlxuICAgIHRoaXMud29ybGRBbHBoYSA9IHRoaXMuYWxwaGEgKiB0aGlzLnBhcmVudC53b3JsZEFscGhhO1xuXG4gICAgLy8gcmVzZXQgdGhlIGJvdW5kcyBlYWNoIHRpbWUgdGhpcyBpcyBjYWxsZWQhXG4gICAgXG59O1xuXG4vLyBwZXJmb3JtYW5jZSBpbmNyZWFzZSB0byBhdm9pZCB1c2luZyBjYWxsLi4gKDEweCBmYXN0ZXIpXG5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS5kaXNwbGF5T2JqZWN0VXBkYXRlVHJhbnNmb3JtID0gRGlzcGxheU9iamVjdC5wcm90b3R5cGUudXBkYXRlVHJhbnNmb3JtO1xuXG4vKipcbiAqXG4gKlxuICogUmV0cmlldmVzIHRoZSBib3VuZHMgb2YgdGhlIGRpc3BsYXlPYmplY3QgYXMgYSByZWN0YW5nbGUgb2JqZWN0XG4gKlxuICogQHBhcmFtIG1hdHJpeCB7UElYSS5NYXRyaXh9XG4gKiBAcmV0dXJuIHtQSVhJLlJlY3RhbmdsZX0gdGhlIHJlY3Rhbmd1bGFyIGJvdW5kaW5nIGFyZWFcbiAqL1xuRGlzcGxheU9iamVjdC5wcm90b3R5cGUuZ2V0Qm91bmRzID0gZnVuY3Rpb24gKG1hdHJpeCkgLy8ganNoaW50IHVudXNlZDpmYWxzZVxue1xuICAgIHJldHVybiBtYXRoLlJlY3RhbmdsZS5FTVBUWTtcbn07XG5cbi8qKlxuICogUmV0cmlldmVzIHRoZSBsb2NhbCBib3VuZHMgb2YgdGhlIGRpc3BsYXlPYmplY3QgYXMgYSByZWN0YW5nbGUgb2JqZWN0XG4gKlxuICogQHJldHVybiB7UElYSS5SZWN0YW5nbGV9IHRoZSByZWN0YW5ndWxhciBib3VuZGluZyBhcmVhXG4gKi9cbkRpc3BsYXlPYmplY3QucHJvdG90eXBlLmdldExvY2FsQm91bmRzID0gZnVuY3Rpb24gKClcbntcbiAgICByZXR1cm4gdGhpcy5nZXRCb3VuZHMobWF0aC5NYXRyaXguSURFTlRJVFkpO1xufTtcblxuLyoqXG4gKiBDYWxjdWxhdGVzIHRoZSBnbG9iYWwgcG9zaXRpb24gb2YgdGhlIGRpc3BsYXkgb2JqZWN0XG4gKlxuICogQHBhcmFtIHBvc2l0aW9uIHtQSVhJLlBvaW50fSBUaGUgd29ybGQgb3JpZ2luIHRvIGNhbGN1bGF0ZSBmcm9tXG4gKiBAcmV0dXJuIHtQSVhJLlBvaW50fSBBIHBvaW50IG9iamVjdCByZXByZXNlbnRpbmcgdGhlIHBvc2l0aW9uIG9mIHRoaXMgb2JqZWN0XG4gKi9cbkRpc3BsYXlPYmplY3QucHJvdG90eXBlLnRvR2xvYmFsID0gZnVuY3Rpb24gKHBvc2l0aW9uKVxue1xuICAgIC8vIHRoaXMgcGFyZW50IGNoZWNrIGlzIGZvciBqdXN0IGluIGNhc2UgdGhlIGl0ZW0gaXMgYSByb290IG9iamVjdC5cbiAgICAvLyBJZiBpdCBpcyB3ZSBuZWVkIHRvIGdpdmUgaXQgYSB0ZW1wb3JhcnkgcGFyZW50IHNvIHRoYXQgZGlzcGxheU9iamVjdFVwZGF0ZVRyYW5zZm9ybSB3b3JrcyBjb3JyZWN0bHlcbiAgICAvLyB0aGlzIGlzIG1haW5seSB0byBhdm9pZCBhIHBhcmVudCBjaGVjayBpbiB0aGUgbWFpbiBsb29wLiBFdmVyeSBsaXR0bGUgaGVscHMgZm9yIHBlcmZvcm1hbmNlIDopXG4gICAgaWYoIXRoaXMucGFyZW50KVxuICAgIHtcbiAgICAgICAgdGhpcy5wYXJlbnQgPSBfdGVtcERpc3BsYXlPYmplY3RQYXJlbnQ7XG4gICAgICAgIHRoaXMuZGlzcGxheU9iamVjdFVwZGF0ZVRyYW5zZm9ybSgpO1xuICAgICAgICB0aGlzLnBhcmVudCA9IG51bGw7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHRoaXMuZGlzcGxheU9iamVjdFVwZGF0ZVRyYW5zZm9ybSgpO1xuICAgIH1cblxuICAgIC8vIGRvbid0IG5lZWQgdG8gdXBkYXRlIHRoZSBsb3RcbiAgICByZXR1cm4gdGhpcy53b3JsZFRyYW5zZm9ybS5hcHBseShwb3NpdGlvbik7XG59O1xuXG4vKipcbiAqIENhbGN1bGF0ZXMgdGhlIGxvY2FsIHBvc2l0aW9uIG9mIHRoZSBkaXNwbGF5IG9iamVjdCByZWxhdGl2ZSB0byBhbm90aGVyIHBvaW50XG4gKlxuICogQHBhcmFtIHBvc2l0aW9uIHtQSVhJLlBvaW50fSBUaGUgd29ybGQgb3JpZ2luIHRvIGNhbGN1bGF0ZSBmcm9tXG4gKiBAcGFyYW0gW2Zyb21dIHtQSVhJLkRpc3BsYXlPYmplY3R9IFRoZSBEaXNwbGF5T2JqZWN0IHRvIGNhbGN1bGF0ZSB0aGUgZ2xvYmFsIHBvc2l0aW9uIGZyb21cbiAqIEBwYXJhbSBbcG9pbnRdIHtQSVhJLlBvaW50fSBBIFBvaW50IG9iamVjdCBpbiB3aGljaCB0byBzdG9yZSB0aGUgdmFsdWUsIG9wdGlvbmFsIChvdGhlcndpc2Ugd2lsbCBjcmVhdGUgYSBuZXcgUG9pbnQpXG4gKiBAcmV0dXJuIHtQSVhJLlBvaW50fSBBIHBvaW50IG9iamVjdCByZXByZXNlbnRpbmcgdGhlIHBvc2l0aW9uIG9mIHRoaXMgb2JqZWN0XG4gKi9cbkRpc3BsYXlPYmplY3QucHJvdG90eXBlLnRvTG9jYWwgPSBmdW5jdGlvbiAocG9zaXRpb24sIGZyb20sIHBvaW50KVxue1xuICAgIGlmIChmcm9tKVxuICAgIHtcbiAgICAgICAgcG9zaXRpb24gPSBmcm9tLnRvR2xvYmFsKHBvc2l0aW9uKTtcbiAgICB9XG5cbiAgICAvLyB0aGlzIHBhcmVudCBjaGVjayBpcyBmb3IganVzdCBpbiBjYXNlIHRoZSBpdGVtIGlzIGEgcm9vdCBvYmplY3QuXG4gICAgLy8gSWYgaXQgaXMgd2UgbmVlZCB0byBnaXZlIGl0IGEgdGVtcG9yYXJ5IHBhcmVudCBzbyB0aGF0IGRpc3BsYXlPYmplY3RVcGRhdGVUcmFuc2Zvcm0gd29ya3MgY29ycmVjdGx5XG4gICAgLy8gdGhpcyBpcyBtYWlubHkgdG8gYXZvaWQgYSBwYXJlbnQgY2hlY2sgaW4gdGhlIG1haW4gbG9vcC4gRXZlcnkgbGl0dGxlIGhlbHBzIGZvciBwZXJmb3JtYW5jZSA6KVxuICAgIGlmKCF0aGlzLnBhcmVudClcbiAgICB7XG4gICAgICAgIHRoaXMucGFyZW50ID0gX3RlbXBEaXNwbGF5T2JqZWN0UGFyZW50O1xuICAgICAgICB0aGlzLmRpc3BsYXlPYmplY3RVcGRhdGVUcmFuc2Zvcm0oKTtcbiAgICAgICAgdGhpcy5wYXJlbnQgPSBudWxsO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICB0aGlzLmRpc3BsYXlPYmplY3RVcGRhdGVUcmFuc2Zvcm0oKTtcbiAgICB9XG5cbiAgICAvLyBzaW1wbHkgYXBwbHkgdGhlIG1hdHJpeC4uXG4gICAgcmV0dXJuIHRoaXMud29ybGRUcmFuc2Zvcm0uYXBwbHlJbnZlcnNlKHBvc2l0aW9uLCBwb2ludCk7XG59O1xuXG4vKipcbiAqIFJlbmRlcnMgdGhlIG9iamVjdCB1c2luZyB0aGUgV2ViR0wgcmVuZGVyZXJcbiAqXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcn0gVGhlIHJlbmRlcmVyXG4gKiBAcHJpdmF0ZVxuICovXG5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS5yZW5kZXJXZWJHTCA9IGZ1bmN0aW9uIChyZW5kZXJlcikgLy8ganNoaW50IHVudXNlZDpmYWxzZVxue1xuICAgIC8vIE9WRVJXUklURTtcbn07XG5cbi8qKlxuICogUmVuZGVycyB0aGUgb2JqZWN0IHVzaW5nIHRoZSBDYW52YXMgcmVuZGVyZXJcbiAqXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuQ2FudmFzUmVuZGVyZXJ9IFRoZSByZW5kZXJlclxuICogQHByaXZhdGVcbiAqL1xuRGlzcGxheU9iamVjdC5wcm90b3R5cGUucmVuZGVyQ2FudmFzID0gZnVuY3Rpb24gKHJlbmRlcmVyKSAvLyBqc2hpbnQgdW51c2VkOmZhbHNlXG57XG4gICAgLy8gT1ZFUldSSVRFO1xufTtcbi8qKlxuICogVXNlZnVsIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyBhIHRleHR1cmUgb2YgdGhlIGRpc3BsYXkgb2JqZWN0IHRoYXQgY2FuIHRoZW4gYmUgdXNlZCB0byBjcmVhdGUgc3ByaXRlc1xuICogVGhpcyBjYW4gYmUgcXVpdGUgdXNlZnVsIGlmIHlvdXIgZGlzcGxheU9iamVjdCBpcyBzdGF0aWMgLyBjb21wbGljYXRlZCBhbmQgbmVlZHMgdG8gYmUgcmV1c2VkIG11bHRpcGxlIHRpbWVzLlxuICpcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5DYW52YXNSZW5kZXJlcnxQSVhJLldlYkdMUmVuZGVyZXJ9IFRoZSByZW5kZXJlciB1c2VkIHRvIGdlbmVyYXRlIHRoZSB0ZXh0dXJlLlxuICogQHBhcmFtIHNjYWxlTW9kZSB7bnVtYmVyfSBTZWUge0BsaW5rIFBJWEkuU0NBTEVfTU9ERVN9IGZvciBwb3NzaWJsZSB2YWx1ZXNcbiAqIEBwYXJhbSByZXNvbHV0aW9uIHtudW1iZXJ9IFRoZSByZXNvbHV0aW9uIG9mIHRoZSB0ZXh0dXJlIGJlaW5nIGdlbmVyYXRlZFxuICogQHJldHVybiB7UElYSS5UZXh0dXJlfSBhIHRleHR1cmUgb2YgdGhlIGRpc3BsYXkgb2JqZWN0XG4gKi9cbkRpc3BsYXlPYmplY3QucHJvdG90eXBlLmdlbmVyYXRlVGV4dHVyZSA9IGZ1bmN0aW9uIChyZW5kZXJlciwgc2NhbGVNb2RlLCByZXNvbHV0aW9uKVxue1xuICAgIHZhciBib3VuZHMgPSB0aGlzLmdldExvY2FsQm91bmRzKCk7XG5cbiAgICB2YXIgcmVuZGVyVGV4dHVyZSA9IG5ldyBSZW5kZXJUZXh0dXJlKHJlbmRlcmVyLCBib3VuZHMud2lkdGggfCAwLCBib3VuZHMuaGVpZ2h0IHwgMCwgc2NhbGVNb2RlLCByZXNvbHV0aW9uKTtcblxuICAgIF90ZW1wTWF0cml4LnR4ID0gLWJvdW5kcy54O1xuICAgIF90ZW1wTWF0cml4LnR5ID0gLWJvdW5kcy55O1xuXG4gICAgcmVuZGVyVGV4dHVyZS5yZW5kZXIodGhpcywgX3RlbXBNYXRyaXgpO1xuXG4gICAgcmV0dXJuIHJlbmRlclRleHR1cmU7XG59O1xuXG4vKipcbiAqIFNldCB0aGUgcGFyZW50IENvbnRhaW5lciBvZiB0aGlzIERpc3BsYXlPYmplY3RcbiAqXG4gKiBAcGFyYW0gY29udGFpbmVyIHtDb250YWluZXJ9IFRoZSBDb250YWluZXIgdG8gYWRkIHRoaXMgRGlzcGxheU9iamVjdCB0b1xuICogQHJldHVybiB7Q29udGFpbmVyfSBUaGUgQ29udGFpbmVyIHRoYXQgdGhpcyBEaXNwbGF5T2JqZWN0IHdhcyBhZGRlZCB0b1xuICovXG5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS5zZXRQYXJlbnQgPSBmdW5jdGlvbiAoY29udGFpbmVyKVxue1xuICAgIGlmICghY29udGFpbmVyIHx8ICFjb250YWluZXIuYWRkQ2hpbGQpXG4gICAge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3NldFBhcmVudDogQXJndW1lbnQgbXVzdCBiZSBhIENvbnRhaW5lcicpO1xuICAgIH1cblxuICAgIGNvbnRhaW5lci5hZGRDaGlsZCh0aGlzKTtcbiAgICByZXR1cm4gY29udGFpbmVyO1xufTtcblxuLyoqXG4gKiBDb252ZW5pZW5jZSBmdW5jdGlvbiB0byBzZXQgdGhlIHBvc3Rpb24sIHNjYWxlLCBza2V3IGFuZCBwaXZvdCBhdCBvbmNlLlxuICpcbiAqIEBwYXJhbSBbeD0wXSB7bnVtYmVyfSBUaGUgWCBwb3NpdGlvblxuICogQHBhcmFtIFt5PTBdIHtudW1iZXJ9IFRoZSBZIHBvc2l0aW9uXG4gKiBAcGFyYW0gW3NjYWxlWD0xXSB7bnVtYmVyfSBUaGUgWCBzY2FsZSB2YWx1ZVxuICogQHBhcmFtIFtzY2FsZVk9MV0ge251bWJlcn0gVGhlIFkgc2NhbGUgdmFsdWVcbiAqIEBwYXJhbSBbcm90YXRpb249MF0ge251bWJlcn0gVGhlIHJvdGF0aW9uXG4gKiBAcGFyYW0gW3NrZXdYPTBdIHtudW1iZXJ9IFRoZSBYIHNrZXcgdmFsdWVcbiAqIEBwYXJhbSBbc2tld1k9MF0ge251bWJlcn0gVGhlIFkgc2tldyB2YWx1ZVxuICogQHBhcmFtIFtwaXZvdFg9MF0ge251bWJlcn0gVGhlIFggcGl2b3QgdmFsdWVcbiAqIEBwYXJhbSBbcGl2b3RZPTBdIHtudW1iZXJ9IFRoZSBZIHBpdm90IHZhbHVlXG4gKiBAcmV0dXJuIHtQSVhJLkRpc3BsYXlPYmplY3R9XG4gKi9cbkRpc3BsYXlPYmplY3QucHJvdG90eXBlLnNldFRyYW5zZm9ybSA9IGZ1bmN0aW9uKHgsIHksIHNjYWxlWCwgc2NhbGVZLCByb3RhdGlvbiwgc2tld1gsIHNrZXdZLCBwaXZvdFgsIHBpdm90WSkgLy9qc2hpbnQgaWdub3JlOmxpbmVcbntcbiAgICB0aGlzLnBvc2l0aW9uLnggPSB4IHx8IDA7XG4gICAgdGhpcy5wb3NpdGlvbi55ID0geSB8fCAwO1xuICAgIHRoaXMuc2NhbGUueCA9ICFzY2FsZVggPyAxIDogc2NhbGVYO1xuICAgIHRoaXMuc2NhbGUueSA9ICFzY2FsZVkgPyAxIDogc2NhbGVZO1xuICAgIHRoaXMucm90YXRpb24gPSByb3RhdGlvbiB8fCAwO1xuICAgIHRoaXMuc2tldy54ID0gc2tld1ggfHwgMDtcbiAgICB0aGlzLnNrZXcueSA9IHNrZXdZIHx8IDA7XG4gICAgdGhpcy5waXZvdC54ID0gcGl2b3RYIHx8IDA7XG4gICAgdGhpcy5waXZvdC55ID0gcGl2b3RZIHx8IDA7XG4gICAgdGhpcy5kaXJ0eVRyYW5zZm9ybSA9IHRydWU7XG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIEJhc2UgZGVzdHJveSBtZXRob2QgZm9yIGdlbmVyaWMgZGlzcGxheSBvYmplY3RzXG4gKlxuICovXG5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKClcbntcblxuICAgIHRoaXMucG9zaXRpb24gPSBudWxsO1xuICAgIHRoaXMuc2NhbGUgPSBudWxsO1xuICAgIHRoaXMucGl2b3QgPSBudWxsO1xuICAgIHRoaXMuc2tldyA9IG51bGw7XG5cbiAgICB0aGlzLnBhcmVudCA9IG51bGw7XG5cbiAgICB0aGlzLl9ib3VuZHMgPSBudWxsO1xuICAgIHRoaXMuX2N1cnJlbnRCb3VuZHMgPSBudWxsO1xuICAgIHRoaXMuX21hc2sgPSBudWxsO1xuXG4gICAgdGhpcy53b3JsZFRyYW5zZm9ybSA9IG51bGw7XG4gICAgdGhpcy5maWx0ZXJBcmVhID0gbnVsbDtcbn07XG4iLCJ2YXIgQ29udGFpbmVyID0gcmVxdWlyZSgnLi4vZGlzcGxheS9Db250YWluZXInKSxcbiAgICBUZXh0dXJlID0gcmVxdWlyZSgnLi4vdGV4dHVyZXMvVGV4dHVyZScpLFxuICAgIENhbnZhc0J1ZmZlciA9IHJlcXVpcmUoJy4uL3JlbmRlcmVycy9jYW52YXMvdXRpbHMvQ2FudmFzQnVmZmVyJyksXG4gICAgQ2FudmFzR3JhcGhpY3MgPSByZXF1aXJlKCcuLi9yZW5kZXJlcnMvY2FudmFzL3V0aWxzL0NhbnZhc0dyYXBoaWNzJyksXG4gICAgR3JhcGhpY3NEYXRhID0gcmVxdWlyZSgnLi9HcmFwaGljc0RhdGEnKSxcbiAgICBtYXRoID0gcmVxdWlyZSgnLi4vbWF0aCcpLFxuICAgIENPTlNUID0gcmVxdWlyZSgnLi4vY29uc3QnKSxcbiAgICB0ZW1wUG9pbnQgPSBuZXcgbWF0aC5Qb2ludCgpO1xuXG4vKipcbiAqIFRoZSBHcmFwaGljcyBjbGFzcyBjb250YWlucyBtZXRob2RzIHVzZWQgdG8gZHJhdyBwcmltaXRpdmUgc2hhcGVzIHN1Y2ggYXMgbGluZXMsIGNpcmNsZXMgYW5kXG4gKiByZWN0YW5nbGVzIHRvIHRoZSBkaXNwbGF5LCBhbmQgdG8gY29sb3IgYW5kIGZpbGwgdGhlbS5cbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQ29udGFpbmVyXG4gKiBAbWVtYmVyb2YgUElYSVxuICovXG5mdW5jdGlvbiBHcmFwaGljcygpXG57XG4gICAgQ29udGFpbmVyLmNhbGwodGhpcyk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYWxwaGEgdmFsdWUgdXNlZCB3aGVuIGZpbGxpbmcgdGhlIEdyYXBoaWNzIG9iamVjdC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAxXG4gICAgICovXG4gICAgdGhpcy5maWxsQWxwaGEgPSAxO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHdpZHRoICh0aGlja25lc3MpIG9mIGFueSBsaW5lcyBkcmF3bi5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAwXG4gICAgICovXG4gICAgdGhpcy5saW5lV2lkdGggPSAwO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGNvbG9yIG9mIGFueSBsaW5lcyBkcmF3bi5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge3N0cmluZ31cbiAgICAgKiBAZGVmYXVsdCAwXG4gICAgICovXG4gICAgdGhpcy5saW5lQ29sb3IgPSAwO1xuXG4gICAgLyoqXG4gICAgICogR3JhcGhpY3MgZGF0YVxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5HcmFwaGljc0RhdGFbXX1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuZ3JhcGhpY3NEYXRhID0gW107XG5cbiAgICAvKipcbiAgICAgKiBUaGUgdGludCBhcHBsaWVkIHRvIHRoZSBncmFwaGljIHNoYXBlLiBUaGlzIGlzIGEgaGV4IHZhbHVlLiBBcHBseSBhIHZhbHVlIG9mIDB4RkZGRkZGIHRvIHJlc2V0IHRoZSB0aW50LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDB4RkZGRkZGXG4gICAgICovXG4gICAgdGhpcy50aW50ID0gMHhGRkZGRkY7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgcHJldmlvdXMgdGludCBhcHBsaWVkIHRvIHRoZSBncmFwaGljIHNoYXBlLiBVc2VkIHRvIGNvbXBhcmUgdG8gdGhlIGN1cnJlbnQgdGludCBhbmQgY2hlY2sgaWYgdGhlcmVzIGNoYW5nZS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBkZWZhdWx0IDB4RkZGRkZGXG4gICAgICovXG4gICAgdGhpcy5fcHJldlRpbnQgPSAweEZGRkZGRjtcblxuICAgIC8qKlxuICAgICAqIFRoZSBibGVuZCBtb2RlIHRvIGJlIGFwcGxpZWQgdG8gdGhlIGdyYXBoaWMgc2hhcGUuIEFwcGx5IGEgdmFsdWUgb2YgYFBJWEkuQkxFTkRfTU9ERVMuTk9STUFMYCB0byByZXNldCB0aGUgYmxlbmQgbW9kZS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCBQSVhJLkJMRU5EX01PREVTLk5PUk1BTDtcbiAgICAgKiBAc2VlIFBJWEkuQkxFTkRfTU9ERVNcbiAgICAgKi9cbiAgICB0aGlzLmJsZW5kTW9kZSA9IENPTlNULkJMRU5EX01PREVTLk5PUk1BTDtcblxuICAgIC8qKlxuICAgICAqIEN1cnJlbnQgcGF0aFxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5HcmFwaGljc0RhdGF9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLmN1cnJlbnRQYXRoID0gbnVsbDtcblxuICAgIC8qKlxuICAgICAqIEFycmF5IGNvbnRhaW5pbmcgc29tZSBXZWJHTC1yZWxhdGVkIHByb3BlcnRpZXMgdXNlZCBieSB0aGUgV2ViR0wgcmVuZGVyZXIuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtvYmplY3Q8bnVtYmVyLCBvYmplY3Q+fVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgLy8gVE9ETyAtIF93ZWJnbCBzaG91bGQgdXNlIGEgcHJvdG90eXBlIG9iamVjdCwgbm90IGEgcmFuZG9tIHVuZG9jdW1lbnRlZCBvYmplY3QuLi5cbiAgICB0aGlzLl93ZWJHTCA9IHt9O1xuXG4gICAgLyoqXG4gICAgICogV2hldGhlciB0aGlzIHNoYXBlIGlzIGJlaW5nIHVzZWQgYXMgYSBtYXNrLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKi9cbiAgICB0aGlzLmlzTWFzayA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGJvdW5kcycgcGFkZGluZyB1c2VkIGZvciBib3VuZHMgY2FsY3VsYXRpb24uXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy5ib3VuZHNQYWRkaW5nID0gMDtcblxuICAgIC8qKlxuICAgICAqIEEgY2FjaGUgb2YgdGhlIGxvY2FsIGJvdW5kcyB0byBwcmV2ZW50IHJlY2FsY3VsYXRpb24uXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlJlY3RhbmdsZX1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX2xvY2FsQm91bmRzID0gbmV3IG1hdGguUmVjdGFuZ2xlKDAsMCwxLDEpO1xuXG4gICAgLyoqXG4gICAgICogVXNlZCB0byBkZXRlY3QgaWYgdGhlIGdyYXBoaWNzIG9iamVjdCBoYXMgY2hhbmdlZC4gSWYgdGhpcyBpcyBzZXQgdG8gdHJ1ZSB0aGVuIHRoZSBncmFwaGljc1xuICAgICAqIG9iamVjdCB3aWxsIGJlIHJlY2FsY3VsYXRlZC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLmRpcnR5ID0gdHJ1ZTtcblxuICAgIC8qKlxuICAgICAqIFVzZWQgdG8gZGV0ZWN0IGlmIHRoZSBXZWJHTCBncmFwaGljcyBvYmplY3QgaGFzIGNoYW5nZWQuIElmIHRoaXMgaXMgc2V0IHRvIHRydWUgdGhlbiB0aGVcbiAgICAgKiBncmFwaGljcyBvYmplY3Qgd2lsbCBiZSByZWNhbGN1bGF0ZWQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5nbERpcnR5ID0gZmFsc2U7XG5cbiAgICB0aGlzLmJvdW5kc0RpcnR5ID0gdHJ1ZTtcblxuICAgIC8qKlxuICAgICAqIFVzZWQgdG8gZGV0ZWN0IGlmIHRoZSBjYWNoZWQgc3ByaXRlIG9iamVjdCBuZWVkcyB0byBiZSB1cGRhdGVkLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuY2FjaGVkU3ByaXRlRGlydHkgPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIFdoZW4gY2FjaGVBc0JpdG1hcCBpcyBzZXQgdG8gdHJ1ZSB0aGUgZ3JhcGhpY3Mgb2JqZWN0IHdpbGwgYmUgcmVuZGVyZWQgYXMgaWYgaXQgd2FzIGEgc3ByaXRlLlxuICAgICAqIFRoaXMgaXMgdXNlZnVsIGlmIHlvdXIgZ3JhcGhpY3MgZWxlbWVudCBkb2VzIG5vdCBjaGFuZ2Ugb2Z0ZW4sIGFzIGl0IHdpbGwgc3BlZWQgdXAgdGhlIHJlbmRlcmluZ1xuICAgICAqIG9mIHRoZSBvYmplY3QgaW4gZXhjaGFuZ2UgZm9yIHRha2luZyB1cCB0ZXh0dXJlIG1lbW9yeS4gSXQgaXMgYWxzbyB1c2VmdWwgaWYgeW91IG5lZWQgdGhlIGdyYXBoaWNzXG4gICAgICogb2JqZWN0IHRvIGJlIGFudGktYWxpYXNlZCwgYmVjYXVzZSBpdCB3aWxsIGJlIHJlbmRlcmVkIHVzaW5nIGNhbnZhcy4gVGhpcyBpcyBub3QgcmVjb21tZW5kZWQgaWZcbiAgICAgKiB5b3UgYXJlIGNvbnN0YW50bHkgcmVkcmF3aW5nIHRoZSBncmFwaGljcyBlbGVtZW50LlxuICAgICAqXG4gICAgICogQG5hbWUgY2FjaGVBc0JpdG1hcFxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICogQG1lbWJlcm9mIFBJWEkuR3JhcGhpY3MjXG4gICAgICogQGRlZmF1bHQgZmFsc2VcbiAgICAgKi9cbn1cblxuLy8gY29uc3RydWN0b3JcbkdyYXBoaWNzLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoQ29udGFpbmVyLnByb3RvdHlwZSk7XG5HcmFwaGljcy5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBHcmFwaGljcztcbm1vZHVsZS5leHBvcnRzID0gR3JhcGhpY3M7XG5cbi8qKlxuICogQ3JlYXRlcyBhIG5ldyBHcmFwaGljcyBvYmplY3Qgd2l0aCB0aGUgc2FtZSB2YWx1ZXMgYXMgdGhpcyBvbmUuXG4gKiBOb3RlIHRoYXQgdGhlIG9ubHkgdGhlIHByb3BlcnRpZXMgb2YgdGhlIG9iamVjdCBhcmUgY2xvbmVkLCBub3QgaXRzIHRyYW5zZm9ybSAocG9zaXRpb24sc2NhbGUsZXRjKVxuICpcbiAqIEByZXR1cm4ge1BJWEkuR3JhcGhpY3N9XG4gKi9cbkdyYXBoaWNzLnByb3RvdHlwZS5jbG9uZSA9IGZ1bmN0aW9uICgpXG57XG4gICAgdmFyIGNsb25lID0gbmV3IEdyYXBoaWNzKCk7XG5cbiAgICBjbG9uZS5yZW5kZXJhYmxlICAgID0gdGhpcy5yZW5kZXJhYmxlO1xuICAgIGNsb25lLmZpbGxBbHBoYSAgICAgPSB0aGlzLmZpbGxBbHBoYTtcbiAgICBjbG9uZS5saW5lV2lkdGggICAgID0gdGhpcy5saW5lV2lkdGg7XG4gICAgY2xvbmUubGluZUNvbG9yICAgICA9IHRoaXMubGluZUNvbG9yO1xuICAgIGNsb25lLnRpbnQgICAgICAgICAgPSB0aGlzLnRpbnQ7XG4gICAgY2xvbmUuYmxlbmRNb2RlICAgICA9IHRoaXMuYmxlbmRNb2RlO1xuICAgIGNsb25lLmlzTWFzayAgICAgICAgPSB0aGlzLmlzTWFzaztcbiAgICBjbG9uZS5ib3VuZHNQYWRkaW5nID0gdGhpcy5ib3VuZHNQYWRkaW5nO1xuICAgIGNsb25lLmRpcnR5ICAgICAgICAgPSB0cnVlO1xuICAgIGNsb25lLmdsRGlydHkgICAgICAgPSB0cnVlO1xuICAgIGNsb25lLmNhY2hlZFNwcml0ZURpcnR5ID0gdGhpcy5jYWNoZWRTcHJpdGVEaXJ0eTtcblxuICAgIC8vIGNvcHkgZ3JhcGhpY3MgZGF0YVxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5ncmFwaGljc0RhdGEubGVuZ3RoOyArK2kpXG4gICAge1xuICAgICAgICBjbG9uZS5ncmFwaGljc0RhdGEucHVzaCh0aGlzLmdyYXBoaWNzRGF0YVtpXS5jbG9uZSgpKTtcbiAgICB9XG5cbiAgICBjbG9uZS5jdXJyZW50UGF0aCA9IGNsb25lLmdyYXBoaWNzRGF0YVtjbG9uZS5ncmFwaGljc0RhdGEubGVuZ3RoIC0gMV07XG5cbiAgICBjbG9uZS51cGRhdGVMb2NhbEJvdW5kcygpO1xuXG4gICAgcmV0dXJuIGNsb25lO1xufTtcblxuLyoqXG4gKiBTcGVjaWZpZXMgdGhlIGxpbmUgc3R5bGUgdXNlZCBmb3Igc3Vic2VxdWVudCBjYWxscyB0byBHcmFwaGljcyBtZXRob2RzIHN1Y2ggYXMgdGhlIGxpbmVUbygpIG1ldGhvZCBvciB0aGUgZHJhd0NpcmNsZSgpIG1ldGhvZC5cbiAqXG4gKiBAcGFyYW0gbGluZVdpZHRoIHtudW1iZXJ9IHdpZHRoIG9mIHRoZSBsaW5lIHRvIGRyYXcsIHdpbGwgdXBkYXRlIHRoZSBvYmplY3RzIHN0b3JlZCBzdHlsZVxuICogQHBhcmFtIGNvbG9yIHtudW1iZXJ9IGNvbG9yIG9mIHRoZSBsaW5lIHRvIGRyYXcsIHdpbGwgdXBkYXRlIHRoZSBvYmplY3RzIHN0b3JlZCBzdHlsZVxuICogQHBhcmFtIGFscGhhIHtudW1iZXJ9IGFscGhhIG9mIHRoZSBsaW5lIHRvIGRyYXcsIHdpbGwgdXBkYXRlIHRoZSBvYmplY3RzIHN0b3JlZCBzdHlsZVxuICogQHJldHVybiB7UElYSS5HcmFwaGljc31cbiAqL1xuR3JhcGhpY3MucHJvdG90eXBlLmxpbmVTdHlsZSA9IGZ1bmN0aW9uIChsaW5lV2lkdGgsIGNvbG9yLCBhbHBoYSlcbntcbiAgICB0aGlzLmxpbmVXaWR0aCA9IGxpbmVXaWR0aCB8fCAwO1xuICAgIHRoaXMubGluZUNvbG9yID0gY29sb3IgfHwgMDtcbiAgICB0aGlzLmxpbmVBbHBoYSA9IChhbHBoYSA9PT0gdW5kZWZpbmVkKSA/IDEgOiBhbHBoYTtcblxuICAgIGlmICh0aGlzLmN1cnJlbnRQYXRoKVxuICAgIHtcbiAgICAgICAgaWYgKHRoaXMuY3VycmVudFBhdGguc2hhcGUucG9pbnRzLmxlbmd0aClcbiAgICAgICAge1xuICAgICAgICAgICAgLy8gaGFsZndheSB0aHJvdWdoIGEgbGluZT8gc3RhcnQgYSBuZXcgb25lIVxuICAgICAgICAgICAgdmFyIHNoYXBlID0gbmV3IG1hdGguUG9seWdvbih0aGlzLmN1cnJlbnRQYXRoLnNoYXBlLnBvaW50cy5zbGljZSgtMikpO1xuICAgICAgICAgICAgc2hhcGUuY2xvc2VkID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLmRyYXdTaGFwZShzaGFwZSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgICAvLyBvdGhlcndpc2UgaXRzIGVtcHR5IHNvIGxldHMganVzdCBzZXQgdGhlIGxpbmUgcHJvcGVydGllc1xuICAgICAgICAgICAgdGhpcy5jdXJyZW50UGF0aC5saW5lV2lkdGggPSB0aGlzLmxpbmVXaWR0aDtcbiAgICAgICAgICAgIHRoaXMuY3VycmVudFBhdGgubGluZUNvbG9yID0gdGhpcy5saW5lQ29sb3I7XG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRQYXRoLmxpbmVBbHBoYSA9IHRoaXMubGluZUFscGhhO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIE1vdmVzIHRoZSBjdXJyZW50IGRyYXdpbmcgcG9zaXRpb24gdG8geCwgeS5cbiAqXG4gKiBAcGFyYW0geCB7bnVtYmVyfSB0aGUgWCBjb29yZGluYXRlIHRvIG1vdmUgdG9cbiAqIEBwYXJhbSB5IHtudW1iZXJ9IHRoZSBZIGNvb3JkaW5hdGUgdG8gbW92ZSB0b1xuICogQHJldHVybiB7UElYSS5HcmFwaGljc31cbiAgKi9cbkdyYXBoaWNzLnByb3RvdHlwZS5tb3ZlVG8gPSBmdW5jdGlvbiAoeCwgeSlcbntcbiAgICB2YXIgc2hhcGUgPSBuZXcgbWF0aC5Qb2x5Z29uKFt4LHldKTtcbiAgICBzaGFwZS5jbG9zZWQgPSBmYWxzZTtcbiAgICB0aGlzLmRyYXdTaGFwZShzaGFwZSk7XG5cbiAgICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogRHJhd3MgYSBsaW5lIHVzaW5nIHRoZSBjdXJyZW50IGxpbmUgc3R5bGUgZnJvbSB0aGUgY3VycmVudCBkcmF3aW5nIHBvc2l0aW9uIHRvICh4LCB5KTtcbiAqIFRoZSBjdXJyZW50IGRyYXdpbmcgcG9zaXRpb24gaXMgdGhlbiBzZXQgdG8gKHgsIHkpLlxuICpcbiAqIEBwYXJhbSB4IHtudW1iZXJ9IHRoZSBYIGNvb3JkaW5hdGUgdG8gZHJhdyB0b1xuICogQHBhcmFtIHkge251bWJlcn0gdGhlIFkgY29vcmRpbmF0ZSB0byBkcmF3IHRvXG4gKiBAcmV0dXJuIHtQSVhJLkdyYXBoaWNzfVxuICovXG5HcmFwaGljcy5wcm90b3R5cGUubGluZVRvID0gZnVuY3Rpb24gKHgsIHkpXG57XG4gICAgdGhpcy5jdXJyZW50UGF0aC5zaGFwZS5wb2ludHMucHVzaCh4LCB5KTtcbiAgICB0aGlzLmRpcnR5ID0gdHJ1ZTtcblxuICAgIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBDYWxjdWxhdGUgdGhlIHBvaW50cyBmb3IgYSBxdWFkcmF0aWMgYmV6aWVyIGN1cnZlIGFuZCB0aGVuIGRyYXdzIGl0LlxuICogQmFzZWQgb246IGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vcXVlc3Rpb25zLzc4NTA5Ny9ob3ctZG8taS1pbXBsZW1lbnQtYS1iZXppZXItY3VydmUtaW4tY1xuICpcbiAqIEBwYXJhbSBjcFgge251bWJlcn0gQ29udHJvbCBwb2ludCB4XG4gKiBAcGFyYW0gY3BZIHtudW1iZXJ9IENvbnRyb2wgcG9pbnQgeVxuICogQHBhcmFtIHRvWCB7bnVtYmVyfSBEZXN0aW5hdGlvbiBwb2ludCB4XG4gKiBAcGFyYW0gdG9ZIHtudW1iZXJ9IERlc3RpbmF0aW9uIHBvaW50IHlcbiAqIEByZXR1cm4ge1BJWEkuR3JhcGhpY3N9XG4gKi9cbkdyYXBoaWNzLnByb3RvdHlwZS5xdWFkcmF0aWNDdXJ2ZVRvID0gZnVuY3Rpb24gKGNwWCwgY3BZLCB0b1gsIHRvWSlcbntcbiAgICBpZiAodGhpcy5jdXJyZW50UGF0aClcbiAgICB7XG4gICAgICAgIGlmICh0aGlzLmN1cnJlbnRQYXRoLnNoYXBlLnBvaW50cy5sZW5ndGggPT09IDApXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuY3VycmVudFBhdGguc2hhcGUucG9pbnRzID0gWzAsIDBdO1xuICAgICAgICB9XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHRoaXMubW92ZVRvKDAsMCk7XG4gICAgfVxuXG4gICAgdmFyIHhhLFxuICAgICAgICB5YSxcbiAgICAgICAgbiA9IDIwLFxuICAgICAgICBwb2ludHMgPSB0aGlzLmN1cnJlbnRQYXRoLnNoYXBlLnBvaW50cztcblxuICAgIGlmIChwb2ludHMubGVuZ3RoID09PSAwKVxuICAgIHtcbiAgICAgICAgdGhpcy5tb3ZlVG8oMCwgMCk7XG4gICAgfVxuXG4gICAgdmFyIGZyb21YID0gcG9pbnRzW3BvaW50cy5sZW5ndGgtMl07XG4gICAgdmFyIGZyb21ZID0gcG9pbnRzW3BvaW50cy5sZW5ndGgtMV07XG5cbiAgICB2YXIgaiA9IDA7XG4gICAgZm9yICh2YXIgaSA9IDE7IGkgPD0gbjsgKytpKVxuICAgIHtcbiAgICAgICAgaiA9IGkgLyBuO1xuXG4gICAgICAgIHhhID0gZnJvbVggKyAoIChjcFggLSBmcm9tWCkgKiBqICk7XG4gICAgICAgIHlhID0gZnJvbVkgKyAoIChjcFkgLSBmcm9tWSkgKiBqICk7XG5cbiAgICAgICAgcG9pbnRzLnB1c2goIHhhICsgKCAoKGNwWCArICggKHRvWCAtIGNwWCkgKiBqICkpIC0geGEpICogaiApLFxuICAgICAgICAgICAgICAgICAgICAgeWEgKyAoICgoY3BZICsgKCAodG9ZIC0gY3BZKSAqIGogKSkgLSB5YSkgKiBqICkgKTtcbiAgICB9XG5cbiAgICB0aGlzLmRpcnR5ID0gdGhpcy5ib3VuZHNEaXJ0eSA9IHRydWU7XG5cbiAgICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogQ2FsY3VsYXRlIHRoZSBwb2ludHMgZm9yIGEgYmV6aWVyIGN1cnZlIGFuZCB0aGVuIGRyYXdzIGl0LlxuICpcbiAqIEBwYXJhbSBjcFgge251bWJlcn0gQ29udHJvbCBwb2ludCB4XG4gKiBAcGFyYW0gY3BZIHtudW1iZXJ9IENvbnRyb2wgcG9pbnQgeVxuICogQHBhcmFtIGNwWDIge251bWJlcn0gU2Vjb25kIENvbnRyb2wgcG9pbnQgeFxuICogQHBhcmFtIGNwWTIge251bWJlcn0gU2Vjb25kIENvbnRyb2wgcG9pbnQgeVxuICogQHBhcmFtIHRvWCB7bnVtYmVyfSBEZXN0aW5hdGlvbiBwb2ludCB4XG4gKiBAcGFyYW0gdG9ZIHtudW1iZXJ9IERlc3RpbmF0aW9uIHBvaW50IHlcbiAqIEByZXR1cm4ge1BJWEkuR3JhcGhpY3N9XG4gKi9cbkdyYXBoaWNzLnByb3RvdHlwZS5iZXppZXJDdXJ2ZVRvID0gZnVuY3Rpb24gKGNwWCwgY3BZLCBjcFgyLCBjcFkyLCB0b1gsIHRvWSlcbntcbiAgICBpZiAodGhpcy5jdXJyZW50UGF0aClcbiAgICB7XG4gICAgICAgIGlmICh0aGlzLmN1cnJlbnRQYXRoLnNoYXBlLnBvaW50cy5sZW5ndGggPT09IDApXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuY3VycmVudFBhdGguc2hhcGUucG9pbnRzID0gWzAsIDBdO1xuICAgICAgICB9XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHRoaXMubW92ZVRvKDAsMCk7XG4gICAgfVxuXG4gICAgdmFyIG4gPSAyMCxcbiAgICAgICAgZHQsXG4gICAgICAgIGR0MixcbiAgICAgICAgZHQzLFxuICAgICAgICB0MixcbiAgICAgICAgdDMsXG4gICAgICAgIHBvaW50cyA9IHRoaXMuY3VycmVudFBhdGguc2hhcGUucG9pbnRzO1xuXG4gICAgdmFyIGZyb21YID0gcG9pbnRzW3BvaW50cy5sZW5ndGgtMl07XG4gICAgdmFyIGZyb21ZID0gcG9pbnRzW3BvaW50cy5sZW5ndGgtMV07XG5cbiAgICB2YXIgaiA9IDA7XG5cbiAgICBmb3IgKHZhciBpID0gMTsgaSA8PSBuOyArK2kpXG4gICAge1xuICAgICAgICBqID0gaSAvIG47XG5cbiAgICAgICAgZHQgPSAoMSAtIGopO1xuICAgICAgICBkdDIgPSBkdCAqIGR0O1xuICAgICAgICBkdDMgPSBkdDIgKiBkdDtcblxuICAgICAgICB0MiA9IGogKiBqO1xuICAgICAgICB0MyA9IHQyICogajtcblxuICAgICAgICBwb2ludHMucHVzaCggZHQzICogZnJvbVggKyAzICogZHQyICogaiAqIGNwWCArIDMgKiBkdCAqIHQyICogY3BYMiArIHQzICogdG9YLFxuICAgICAgICAgICAgICAgICAgICAgZHQzICogZnJvbVkgKyAzICogZHQyICogaiAqIGNwWSArIDMgKiBkdCAqIHQyICogY3BZMiArIHQzICogdG9ZKTtcbiAgICB9XG5cbiAgICB0aGlzLmRpcnR5ID0gdGhpcy5ib3VuZHNEaXJ0eSA9IHRydWU7XG5cbiAgICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogVGhlIGFyY1RvKCkgbWV0aG9kIGNyZWF0ZXMgYW4gYXJjL2N1cnZlIGJldHdlZW4gdHdvIHRhbmdlbnRzIG9uIHRoZSBjYW52YXMuXG4gKlxuICogXCJib3Jyb3dlZFwiIGZyb20gaHR0cHM6Ly9jb2RlLmdvb2dsZS5jb20vcC9meGNhbnZhcy8gLSB0aGFua3MgZ29vZ2xlIVxuICpcbiAqIEBwYXJhbSB4MSB7bnVtYmVyfSBUaGUgeC1jb29yZGluYXRlIG9mIHRoZSBiZWdpbm5pbmcgb2YgdGhlIGFyY1xuICogQHBhcmFtIHkxIHtudW1iZXJ9IFRoZSB5LWNvb3JkaW5hdGUgb2YgdGhlIGJlZ2lubmluZyBvZiB0aGUgYXJjXG4gKiBAcGFyYW0geDIge251bWJlcn0gVGhlIHgtY29vcmRpbmF0ZSBvZiB0aGUgZW5kIG9mIHRoZSBhcmNcbiAqIEBwYXJhbSB5MiB7bnVtYmVyfSBUaGUgeS1jb29yZGluYXRlIG9mIHRoZSBlbmQgb2YgdGhlIGFyY1xuICogQHBhcmFtIHJhZGl1cyB7bnVtYmVyfSBUaGUgcmFkaXVzIG9mIHRoZSBhcmNcbiAqIEByZXR1cm4ge1BJWEkuR3JhcGhpY3N9XG4gKi9cbkdyYXBoaWNzLnByb3RvdHlwZS5hcmNUbyA9IGZ1bmN0aW9uICh4MSwgeTEsIHgyLCB5MiwgcmFkaXVzKVxue1xuICAgIGlmICh0aGlzLmN1cnJlbnRQYXRoKVxuICAgIHtcbiAgICAgICAgaWYgKHRoaXMuY3VycmVudFBhdGguc2hhcGUucG9pbnRzLmxlbmd0aCA9PT0gMClcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5jdXJyZW50UGF0aC5zaGFwZS5wb2ludHMucHVzaCh4MSwgeTEpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHRoaXMubW92ZVRvKHgxLCB5MSk7XG4gICAgfVxuXG4gICAgdmFyIHBvaW50cyA9IHRoaXMuY3VycmVudFBhdGguc2hhcGUucG9pbnRzLFxuICAgICAgICBmcm9tWCA9IHBvaW50c1twb2ludHMubGVuZ3RoLTJdLFxuICAgICAgICBmcm9tWSA9IHBvaW50c1twb2ludHMubGVuZ3RoLTFdLFxuICAgICAgICBhMSA9IGZyb21ZIC0geTEsXG4gICAgICAgIGIxID0gZnJvbVggLSB4MSxcbiAgICAgICAgYTIgPSB5MiAgIC0geTEsXG4gICAgICAgIGIyID0geDIgICAtIHgxLFxuICAgICAgICBtbSA9IE1hdGguYWJzKGExICogYjIgLSBiMSAqIGEyKTtcblxuICAgIGlmIChtbSA8IDEuMGUtOCB8fCByYWRpdXMgPT09IDApXG4gICAge1xuICAgICAgICBpZiAocG9pbnRzW3BvaW50cy5sZW5ndGgtMl0gIT09IHgxIHx8IHBvaW50c1twb2ludHMubGVuZ3RoLTFdICE9PSB5MSlcbiAgICAgICAge1xuICAgICAgICAgICAgcG9pbnRzLnB1c2goeDEsIHkxKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICB2YXIgZGQgPSBhMSAqIGExICsgYjEgKiBiMSxcbiAgICAgICAgICAgIGNjID0gYTIgKiBhMiArIGIyICogYjIsXG4gICAgICAgICAgICB0dCA9IGExICogYTIgKyBiMSAqIGIyLFxuICAgICAgICAgICAgazEgPSByYWRpdXMgKiBNYXRoLnNxcnQoZGQpIC8gbW0sXG4gICAgICAgICAgICBrMiA9IHJhZGl1cyAqIE1hdGguc3FydChjYykgLyBtbSxcbiAgICAgICAgICAgIGoxID0gazEgKiB0dCAvIGRkLFxuICAgICAgICAgICAgajIgPSBrMiAqIHR0IC8gY2MsXG4gICAgICAgICAgICBjeCA9IGsxICogYjIgKyBrMiAqIGIxLFxuICAgICAgICAgICAgY3kgPSBrMSAqIGEyICsgazIgKiBhMSxcbiAgICAgICAgICAgIHB4ID0gYjEgKiAoazIgKyBqMSksXG4gICAgICAgICAgICBweSA9IGExICogKGsyICsgajEpLFxuICAgICAgICAgICAgcXggPSBiMiAqIChrMSArIGoyKSxcbiAgICAgICAgICAgIHF5ID0gYTIgKiAoazEgKyBqMiksXG4gICAgICAgICAgICBzdGFydEFuZ2xlID0gTWF0aC5hdGFuMihweSAtIGN5LCBweCAtIGN4KSxcbiAgICAgICAgICAgIGVuZEFuZ2xlICAgPSBNYXRoLmF0YW4yKHF5IC0gY3ksIHF4IC0gY3gpO1xuXG4gICAgICAgIHRoaXMuYXJjKGN4ICsgeDEsIGN5ICsgeTEsIHJhZGl1cywgc3RhcnRBbmdsZSwgZW5kQW5nbGUsIGIxICogYTIgPiBiMiAqIGExKTtcbiAgICB9XG5cbiAgICB0aGlzLmRpcnR5ID0gdGhpcy5ib3VuZHNEaXJ0eSA9IHRydWU7XG5cbiAgICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogVGhlIGFyYyBtZXRob2QgY3JlYXRlcyBhbiBhcmMvY3VydmUgKHVzZWQgdG8gY3JlYXRlIGNpcmNsZXMsIG9yIHBhcnRzIG9mIGNpcmNsZXMpLlxuICpcbiAqIEBwYXJhbSBjeCB7bnVtYmVyfSBUaGUgeC1jb29yZGluYXRlIG9mIHRoZSBjZW50ZXIgb2YgdGhlIGNpcmNsZVxuICogQHBhcmFtIGN5IHtudW1iZXJ9IFRoZSB5LWNvb3JkaW5hdGUgb2YgdGhlIGNlbnRlciBvZiB0aGUgY2lyY2xlXG4gKiBAcGFyYW0gcmFkaXVzIHtudW1iZXJ9IFRoZSByYWRpdXMgb2YgdGhlIGNpcmNsZVxuICogQHBhcmFtIHN0YXJ0QW5nbGUge251bWJlcn0gVGhlIHN0YXJ0aW5nIGFuZ2xlLCBpbiByYWRpYW5zICgwIGlzIGF0IHRoZSAzIG8nY2xvY2sgcG9zaXRpb24gb2YgdGhlIGFyYydzIGNpcmNsZSlcbiAqIEBwYXJhbSBlbmRBbmdsZSB7bnVtYmVyfSBUaGUgZW5kaW5nIGFuZ2xlLCBpbiByYWRpYW5zXG4gKiBAcGFyYW0gYW50aWNsb2Nrd2lzZSB7Ym9vbGVhbn0gT3B0aW9uYWwuIFNwZWNpZmllcyB3aGV0aGVyIHRoZSBkcmF3aW5nIHNob3VsZCBiZSBjb3VudGVyY2xvY2t3aXNlIG9yIGNsb2Nrd2lzZS4gRmFsc2UgaXMgZGVmYXVsdCwgYW5kIGluZGljYXRlcyBjbG9ja3dpc2UsIHdoaWxlIHRydWUgaW5kaWNhdGVzIGNvdW50ZXItY2xvY2t3aXNlLlxuICogQHJldHVybiB7UElYSS5HcmFwaGljc31cbiAqL1xuR3JhcGhpY3MucHJvdG90eXBlLmFyYyA9IGZ1bmN0aW9uKGN4LCBjeSwgcmFkaXVzLCBzdGFydEFuZ2xlLCBlbmRBbmdsZSwgYW50aWNsb2Nrd2lzZSlcbntcbiAgICBhbnRpY2xvY2t3aXNlID0gYW50aWNsb2Nrd2lzZSB8fCBmYWxzZTtcblxuICAgIGlmIChzdGFydEFuZ2xlID09PSBlbmRBbmdsZSlcbiAgICB7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIGlmKCAhYW50aWNsb2Nrd2lzZSAmJiBlbmRBbmdsZSA8PSBzdGFydEFuZ2xlIClcbiAgICB7XG4gICAgICAgIGVuZEFuZ2xlICs9IE1hdGguUEkgKiAyO1xuICAgIH1cbiAgICBlbHNlIGlmKCBhbnRpY2xvY2t3aXNlICYmIHN0YXJ0QW5nbGUgPD0gZW5kQW5nbGUgKVxuICAgIHtcbiAgICAgICAgc3RhcnRBbmdsZSArPSBNYXRoLlBJICogMjtcbiAgICB9XG5cbiAgICB2YXIgc3dlZXAgPSBhbnRpY2xvY2t3aXNlID8gKHN0YXJ0QW5nbGUgLSBlbmRBbmdsZSkgKiAtMSA6IChlbmRBbmdsZSAtIHN0YXJ0QW5nbGUpO1xuICAgIHZhciBzZWdzID0gIE1hdGguY2VpbChNYXRoLmFicyhzd2VlcCkgLyAoTWF0aC5QSSAqIDIpKSAqIDQwO1xuXG4gICAgaWYoc3dlZXAgPT09IDApXG4gICAge1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICB2YXIgc3RhcnRYID0gY3ggKyBNYXRoLmNvcyhzdGFydEFuZ2xlKSAqIHJhZGl1cztcbiAgICB2YXIgc3RhcnRZID0gY3kgKyBNYXRoLnNpbihzdGFydEFuZ2xlKSAqIHJhZGl1cztcblxuICAgIGlmICh0aGlzLmN1cnJlbnRQYXRoKVxuICAgIHtcbiAgICAgICAgdGhpcy5jdXJyZW50UGF0aC5zaGFwZS5wb2ludHMucHVzaChzdGFydFgsIHN0YXJ0WSk7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHRoaXMubW92ZVRvKHN0YXJ0WCwgc3RhcnRZKTtcbiAgICB9XG5cbiAgICB2YXIgcG9pbnRzID0gdGhpcy5jdXJyZW50UGF0aC5zaGFwZS5wb2ludHM7XG5cbiAgICB2YXIgdGhldGEgPSBzd2VlcC8oc2VncyoyKTtcbiAgICB2YXIgdGhldGEyID0gdGhldGEqMjtcblxuICAgIHZhciBjVGhldGEgPSBNYXRoLmNvcyh0aGV0YSk7XG4gICAgdmFyIHNUaGV0YSA9IE1hdGguc2luKHRoZXRhKTtcblxuICAgIHZhciBzZWdNaW51cyA9IHNlZ3MgLSAxO1xuXG4gICAgdmFyIHJlbWFpbmRlciA9ICggc2VnTWludXMgJSAxICkgLyBzZWdNaW51cztcblxuICAgIGZvcih2YXIgaT0wOyBpPD1zZWdNaW51czsgaSsrKVxuICAgIHtcbiAgICAgICAgdmFyIHJlYWwgPSAgaSArIHJlbWFpbmRlciAqIGk7XG5cblxuICAgICAgICB2YXIgYW5nbGUgPSAoKHRoZXRhKSArIHN0YXJ0QW5nbGUgKyAodGhldGEyICogcmVhbCkpO1xuXG4gICAgICAgIHZhciBjID0gTWF0aC5jb3MoYW5nbGUpO1xuICAgICAgICB2YXIgcyA9IC1NYXRoLnNpbihhbmdsZSk7XG5cbiAgICAgICAgcG9pbnRzLnB1c2goKCAoY1RoZXRhICogIGMpICsgKHNUaGV0YSAqIHMpICkgKiByYWRpdXMgKyBjeCxcbiAgICAgICAgICAgICAgICAgICAgKCAoY1RoZXRhICogLXMpICsgKHNUaGV0YSAqIGMpICkgKiByYWRpdXMgKyBjeSk7XG4gICAgfVxuXG4gICAgdGhpcy5kaXJ0eSA9IHRoaXMuYm91bmRzRGlydHkgPSB0cnVlO1xuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIFNwZWNpZmllcyBhIHNpbXBsZSBvbmUtY29sb3IgZmlsbCB0aGF0IHN1YnNlcXVlbnQgY2FsbHMgdG8gb3RoZXIgR3JhcGhpY3MgbWV0aG9kc1xuICogKHN1Y2ggYXMgbGluZVRvKCkgb3IgZHJhd0NpcmNsZSgpKSB1c2Ugd2hlbiBkcmF3aW5nLlxuICpcbiAqIEBwYXJhbSBjb2xvciB7bnVtYmVyfSB0aGUgY29sb3Igb2YgdGhlIGZpbGxcbiAqIEBwYXJhbSBhbHBoYSB7bnVtYmVyfSB0aGUgYWxwaGEgb2YgdGhlIGZpbGxcbiAqIEByZXR1cm4ge1BJWEkuR3JhcGhpY3N9XG4gKi9cbkdyYXBoaWNzLnByb3RvdHlwZS5iZWdpbkZpbGwgPSBmdW5jdGlvbiAoY29sb3IsIGFscGhhKVxue1xuICAgIHRoaXMuZmlsbGluZyA9IHRydWU7XG4gICAgdGhpcy5maWxsQ29sb3IgPSBjb2xvciB8fCAwO1xuICAgIHRoaXMuZmlsbEFscGhhID0gKGFscGhhID09PSB1bmRlZmluZWQpID8gMSA6IGFscGhhO1xuXG4gICAgaWYgKHRoaXMuY3VycmVudFBhdGgpXG4gICAge1xuICAgICAgICBpZiAodGhpcy5jdXJyZW50UGF0aC5zaGFwZS5wb2ludHMubGVuZ3RoIDw9IDIpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuY3VycmVudFBhdGguZmlsbCA9IHRoaXMuZmlsbGluZztcbiAgICAgICAgICAgIHRoaXMuY3VycmVudFBhdGguZmlsbENvbG9yID0gdGhpcy5maWxsQ29sb3I7XG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRQYXRoLmZpbGxBbHBoYSA9IHRoaXMuZmlsbEFscGhhO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBBcHBsaWVzIGEgZmlsbCB0byB0aGUgbGluZXMgYW5kIHNoYXBlcyB0aGF0IHdlcmUgYWRkZWQgc2luY2UgdGhlIGxhc3QgY2FsbCB0byB0aGUgYmVnaW5GaWxsKCkgbWV0aG9kLlxuICpcbiAqIEByZXR1cm4ge0dyYXBoaWNzfVxuICovXG5HcmFwaGljcy5wcm90b3R5cGUuZW5kRmlsbCA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy5maWxsaW5nID0gZmFsc2U7XG4gICAgdGhpcy5maWxsQ29sb3IgPSBudWxsO1xuICAgIHRoaXMuZmlsbEFscGhhID0gMTtcblxuICAgIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKlxuICogQHBhcmFtIHgge251bWJlcn0gVGhlIFggY29vcmQgb2YgdGhlIHRvcC1sZWZ0IG9mIHRoZSByZWN0YW5nbGVcbiAqIEBwYXJhbSB5IHtudW1iZXJ9IFRoZSBZIGNvb3JkIG9mIHRoZSB0b3AtbGVmdCBvZiB0aGUgcmVjdGFuZ2xlXG4gKiBAcGFyYW0gd2lkdGgge251bWJlcn0gVGhlIHdpZHRoIG9mIHRoZSByZWN0YW5nbGVcbiAqIEBwYXJhbSBoZWlnaHQge251bWJlcn0gVGhlIGhlaWdodCBvZiB0aGUgcmVjdGFuZ2xlXG4gKiBAcmV0dXJuIHtQSVhJLkdyYXBoaWNzfVxuICovXG5HcmFwaGljcy5wcm90b3R5cGUuZHJhd1JlY3QgPSBmdW5jdGlvbiAoIHgsIHksIHdpZHRoLCBoZWlnaHQgKVxue1xuICAgIHRoaXMuZHJhd1NoYXBlKG5ldyBtYXRoLlJlY3RhbmdsZSh4LHksIHdpZHRoLCBoZWlnaHQpKTtcblxuICAgIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKlxuICogQHBhcmFtIHgge251bWJlcn0gVGhlIFggY29vcmQgb2YgdGhlIHRvcC1sZWZ0IG9mIHRoZSByZWN0YW5nbGVcbiAqIEBwYXJhbSB5IHtudW1iZXJ9IFRoZSBZIGNvb3JkIG9mIHRoZSB0b3AtbGVmdCBvZiB0aGUgcmVjdGFuZ2xlXG4gKiBAcGFyYW0gd2lkdGgge251bWJlcn0gVGhlIHdpZHRoIG9mIHRoZSByZWN0YW5nbGVcbiAqIEBwYXJhbSBoZWlnaHQge251bWJlcn0gVGhlIGhlaWdodCBvZiB0aGUgcmVjdGFuZ2xlXG4gKiBAcGFyYW0gcmFkaXVzIHtudW1iZXJ9IFJhZGl1cyBvZiB0aGUgcmVjdGFuZ2xlIGNvcm5lcnNcbiAqIEByZXR1cm4ge1BJWEkuR3JhcGhpY3N9XG4gKi9cbkdyYXBoaWNzLnByb3RvdHlwZS5kcmF3Um91bmRlZFJlY3QgPSBmdW5jdGlvbiAoIHgsIHksIHdpZHRoLCBoZWlnaHQsIHJhZGl1cyApXG57XG4gICAgdGhpcy5kcmF3U2hhcGUobmV3IG1hdGguUm91bmRlZFJlY3RhbmdsZSh4LCB5LCB3aWR0aCwgaGVpZ2h0LCByYWRpdXMpKTtcblxuICAgIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBEcmF3cyBhIGNpcmNsZS5cbiAqXG4gKiBAcGFyYW0geCB7bnVtYmVyfSBUaGUgWCBjb29yZGluYXRlIG9mIHRoZSBjZW50ZXIgb2YgdGhlIGNpcmNsZVxuICogQHBhcmFtIHkge251bWJlcn0gVGhlIFkgY29vcmRpbmF0ZSBvZiB0aGUgY2VudGVyIG9mIHRoZSBjaXJjbGVcbiAqIEBwYXJhbSByYWRpdXMge251bWJlcn0gVGhlIHJhZGl1cyBvZiB0aGUgY2lyY2xlXG4gKiBAcmV0dXJuIHtQSVhJLkdyYXBoaWNzfVxuICovXG5HcmFwaGljcy5wcm90b3R5cGUuZHJhd0NpcmNsZSA9IGZ1bmN0aW9uICh4LCB5LCByYWRpdXMpXG57XG4gICAgdGhpcy5kcmF3U2hhcGUobmV3IG1hdGguQ2lyY2xlKHgseSwgcmFkaXVzKSk7XG5cbiAgICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogRHJhd3MgYW4gZWxsaXBzZS5cbiAqXG4gKiBAcGFyYW0geCB7bnVtYmVyfSBUaGUgWCBjb29yZGluYXRlIG9mIHRoZSBjZW50ZXIgb2YgdGhlIGVsbGlwc2VcbiAqIEBwYXJhbSB5IHtudW1iZXJ9IFRoZSBZIGNvb3JkaW5hdGUgb2YgdGhlIGNlbnRlciBvZiB0aGUgZWxsaXBzZVxuICogQHBhcmFtIHdpZHRoIHtudW1iZXJ9IFRoZSBoYWxmIHdpZHRoIG9mIHRoZSBlbGxpcHNlXG4gKiBAcGFyYW0gaGVpZ2h0IHtudW1iZXJ9IFRoZSBoYWxmIGhlaWdodCBvZiB0aGUgZWxsaXBzZVxuICogQHJldHVybiB7UElYSS5HcmFwaGljc31cbiAqL1xuR3JhcGhpY3MucHJvdG90eXBlLmRyYXdFbGxpcHNlID0gZnVuY3Rpb24gKHgsIHksIHdpZHRoLCBoZWlnaHQpXG57XG4gICAgdGhpcy5kcmF3U2hhcGUobmV3IG1hdGguRWxsaXBzZSh4LCB5LCB3aWR0aCwgaGVpZ2h0KSk7XG5cbiAgICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogRHJhd3MgYSBwb2x5Z29uIHVzaW5nIHRoZSBnaXZlbiBwYXRoLlxuICpcbiAqIEBwYXJhbSBwYXRoIHtudW1iZXJbXXxQSVhJLlBvaW50W119IFRoZSBwYXRoIGRhdGEgdXNlZCB0byBjb25zdHJ1Y3QgdGhlIHBvbHlnb24uXG4gKiBAcmV0dXJuIHtQSVhJLkdyYXBoaWNzfVxuICovXG5HcmFwaGljcy5wcm90b3R5cGUuZHJhd1BvbHlnb24gPSBmdW5jdGlvbiAocGF0aClcbntcbiAgICAvLyBwcmV2ZW50cyBhbiBhcmd1bWVudCBhc3NpZ25tZW50IGRlb3B0XG4gICAgLy8gc2VlIHNlY3Rpb24gMy4xOiBodHRwczovL2dpdGh1Yi5jb20vcGV0a2FhbnRvbm92L2JsdWViaXJkL3dpa2kvT3B0aW1pemF0aW9uLWtpbGxlcnMjMy1tYW5hZ2luZy1hcmd1bWVudHNcbiAgICB2YXIgcG9pbnRzID0gcGF0aDtcblxuICAgIHZhciBjbG9zZWQgPSB0cnVlO1xuXG4gICAgaWYgKHBvaW50cyBpbnN0YW5jZW9mIG1hdGguUG9seWdvbilcbiAgICB7XG4gICAgICAgIGNsb3NlZCA9IHBvaW50cy5jbG9zZWQ7XG4gICAgICAgIHBvaW50cyA9IHBvaW50cy5wb2ludHM7XG4gICAgfVxuXG4gICAgaWYgKCFBcnJheS5pc0FycmF5KHBvaW50cykpXG4gICAge1xuICAgICAgICAvLyBwcmV2ZW50cyBhbiBhcmd1bWVudCBsZWFrIGRlb3B0XG4gICAgICAgIC8vIHNlZSBzZWN0aW9uIDMuMjogaHR0cHM6Ly9naXRodWIuY29tL3BldGthYW50b25vdi9ibHVlYmlyZC93aWtpL09wdGltaXphdGlvbi1raWxsZXJzIzMtbWFuYWdpbmctYXJndW1lbnRzXG4gICAgICAgIHBvaW50cyA9IG5ldyBBcnJheShhcmd1bWVudHMubGVuZ3RoKTtcblxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHBvaW50cy5sZW5ndGg7ICsraSlcbiAgICAgICAge1xuICAgICAgICAgICAgcG9pbnRzW2ldID0gYXJndW1lbnRzW2ldO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgdmFyIHNoYXBlID0gbmV3IG1hdGguUG9seWdvbihwb2ludHMpO1xuICAgIHNoYXBlLmNsb3NlZCA9IGNsb3NlZDtcblxuICAgIHRoaXMuZHJhd1NoYXBlKHNoYXBlKTtcblxuICAgIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBDbGVhcnMgdGhlIGdyYXBoaWNzIHRoYXQgd2VyZSBkcmF3biB0byB0aGlzIEdyYXBoaWNzIG9iamVjdCwgYW5kIHJlc2V0cyBmaWxsIGFuZCBsaW5lIHN0eWxlIHNldHRpbmdzLlxuICpcbiAqIEByZXR1cm4ge1BJWEkuR3JhcGhpY3N9XG4gKi9cbkdyYXBoaWNzLnByb3RvdHlwZS5jbGVhciA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy5saW5lV2lkdGggPSAwO1xuICAgIHRoaXMuZmlsbGluZyA9IGZhbHNlO1xuXG4gICAgdGhpcy5kaXJ0eSA9IHRydWU7XG4gICAgdGhpcy5jbGVhckRpcnR5ID0gdHJ1ZTtcbiAgICB0aGlzLmdyYXBoaWNzRGF0YSA9IFtdO1xuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIFVzZWZ1bCBmdW5jdGlvbiB0aGF0IHJldHVybnMgYSB0ZXh0dXJlIG9mIHRoZSBncmFwaGljcyBvYmplY3QgdGhhdCBjYW4gdGhlbiBiZSB1c2VkIHRvIGNyZWF0ZSBzcHJpdGVzXG4gKiBUaGlzIGNhbiBiZSBxdWl0ZSB1c2VmdWwgaWYgeW91ciBnZW9tZXRyeSBpcyBjb21wbGljYXRlZCBhbmQgbmVlZHMgdG8gYmUgcmV1c2VkIG11bHRpcGxlIHRpbWVzLlxuICpcbiAqIEBwYXJhbSByZXNvbHV0aW9uIHtudW1iZXJ9IFRoZSByZXNvbHV0aW9uIG9mIHRoZSB0ZXh0dXJlIGJlaW5nIGdlbmVyYXRlZFxuICogQHBhcmFtIHNjYWxlTW9kZSB7bnVtYmVyfSBTaG91bGQgYmUgb25lIG9mIHRoZSBzY2FsZU1vZGUgY29uc3RzXG4gKiBAcmV0dXJuIHtQSVhJLlRleHR1cmV9IGEgdGV4dHVyZSBvZiB0aGUgZ3JhcGhpY3Mgb2JqZWN0XG4gKi9cbkdyYXBoaWNzLnByb3RvdHlwZS5nZW5lcmF0ZVRleHR1cmUgPSBmdW5jdGlvbiAocmVuZGVyZXIsIHJlc29sdXRpb24sIHNjYWxlTW9kZSlcbntcblxuICAgIHJlc29sdXRpb24gPSByZXNvbHV0aW9uIHx8IDE7XG5cbiAgICB2YXIgYm91bmRzID0gdGhpcy5nZXRMb2NhbEJvdW5kcygpO1xuXG4gICAgdmFyIGNhbnZhc0J1ZmZlciA9IG5ldyBDYW52YXNCdWZmZXIoYm91bmRzLndpZHRoICogcmVzb2x1dGlvbiwgYm91bmRzLmhlaWdodCAqIHJlc29sdXRpb24pO1xuXG4gICAgdmFyIHRleHR1cmUgPSBUZXh0dXJlLmZyb21DYW52YXMoY2FudmFzQnVmZmVyLmNhbnZhcywgc2NhbGVNb2RlKTtcbiAgICB0ZXh0dXJlLmJhc2VUZXh0dXJlLnJlc29sdXRpb24gPSByZXNvbHV0aW9uO1xuXG4gICAgY2FudmFzQnVmZmVyLmNvbnRleHQuc2NhbGUocmVzb2x1dGlvbiwgcmVzb2x1dGlvbik7XG5cbiAgICBjYW52YXNCdWZmZXIuY29udGV4dC50cmFuc2xhdGUoLWJvdW5kcy54LC1ib3VuZHMueSk7XG5cbiAgICBDYW52YXNHcmFwaGljcy5yZW5kZXJHcmFwaGljcyh0aGlzLCBjYW52YXNCdWZmZXIuY29udGV4dCk7XG5cbiAgICByZXR1cm4gdGV4dHVyZTtcbn07XG5cbi8qKlxuICogUmVuZGVycyB0aGUgb2JqZWN0IHVzaW5nIHRoZSBXZWJHTCByZW5kZXJlclxuICpcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5XZWJHTFJlbmRlcmVyfVxuICogQHByaXZhdGVcbiAqL1xuR3JhcGhpY3MucHJvdG90eXBlLl9yZW5kZXJXZWJHTCA9IGZ1bmN0aW9uIChyZW5kZXJlcilcbntcbiAgICAvLyBpZiB0aGUgc3ByaXRlIGlzIG5vdCB2aXNpYmxlIG9yIHRoZSBhbHBoYSBpcyAwIHRoZW4gbm8gbmVlZCB0byByZW5kZXIgdGhpcyBlbGVtZW50XG5cbiAgICBpZiAodGhpcy5nbERpcnR5KVxuICAgIHtcbiAgICAgICAgdGhpcy5kaXJ0eSA9IHRydWU7XG4gICAgICAgIHRoaXMuZ2xEaXJ0eSA9IGZhbHNlO1xuICAgIH1cblxuICAgIHJlbmRlcmVyLnNldE9iamVjdFJlbmRlcmVyKHJlbmRlcmVyLnBsdWdpbnMuZ3JhcGhpY3MpO1xuICAgIHJlbmRlcmVyLnBsdWdpbnMuZ3JhcGhpY3MucmVuZGVyKHRoaXMpO1xuXG59O1xuXG4vKipcbiAqIFJlbmRlcnMgdGhlIG9iamVjdCB1c2luZyB0aGUgQ2FudmFzIHJlbmRlcmVyXG4gKlxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLkNhbnZhc1JlbmRlcmVyfVxuICogQHByaXZhdGVcbiAqL1xuR3JhcGhpY3MucHJvdG90eXBlLl9yZW5kZXJDYW52YXMgPSBmdW5jdGlvbiAocmVuZGVyZXIpXG57XG4gICAgaWYgKHRoaXMuaXNNYXNrID09PSB0cnVlKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIGlmIHRoZSB0aW50IGhhcyBjaGFuZ2VkLCBzZXQgdGhlIGdyYXBoaWNzIG9iamVjdCB0byBkaXJ0eS5cbiAgICBpZiAodGhpcy5fcHJldlRpbnQgIT09IHRoaXMudGludCkge1xuICAgICAgICB0aGlzLmRpcnR5ID0gdHJ1ZTtcbiAgICB9XG5cbiAgICAvLyB0aGlzIGNvZGUgbWF5IHN0aWxsIGJlIG5lZWRlZCBzbyBsZWF2aW5nIGZvciBub3cuLlxuICAgIC8vXG4gICAgLypcbiAgICBpZiAodGhpcy5fY2FjaGVBc0JpdG1hcClcbiAgICB7XG4gICAgICAgIGlmICh0aGlzLmRpcnR5IHx8IHRoaXMuY2FjaGVkU3ByaXRlRGlydHkpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuX2dlbmVyYXRlQ2FjaGVkU3ByaXRlKCk7XG5cbiAgICAgICAgICAgIC8vIHdlIHdpbGwgYWxzbyBuZWVkIHRvIHVwZGF0ZSB0aGUgdGV4dHVyZVxuICAgICAgICAgICAgdGhpcy51cGRhdGVDYWNoZWRTcHJpdGVUZXh0dXJlKCk7XG5cbiAgICAgICAgICAgIHRoaXMuY2FjaGVkU3ByaXRlRGlydHkgPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMuZGlydHkgPSBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX2NhY2hlZFNwcml0ZS5hbHBoYSA9IHRoaXMuYWxwaGE7XG5cbiAgICAgICAgU3ByaXRlLnByb3RvdHlwZS5fcmVuZGVyQ2FudmFzLmNhbGwodGhpcy5fY2FjaGVkU3ByaXRlLCByZW5kZXJlcik7XG5cbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICAqL1xuICAgIHZhciBjb250ZXh0ID0gcmVuZGVyZXIuY29udGV4dDtcbiAgICB2YXIgdHJhbnNmb3JtID0gdGhpcy53b3JsZFRyYW5zZm9ybTtcblxuICAgIHZhciBjb21wb3NpdGVPcGVyYXRpb24gPSByZW5kZXJlci5ibGVuZE1vZGVzW3RoaXMuYmxlbmRNb2RlXTtcbiAgICBpZiAoY29tcG9zaXRlT3BlcmF0aW9uICE9PSBjb250ZXh0Lmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbilcbiAgICB7XG4gICAgICAgIGNvbnRleHQuZ2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uID0gY29tcG9zaXRlT3BlcmF0aW9uO1xuICAgIH1cblxuICAgIHZhciByZXNvbHV0aW9uID0gcmVuZGVyZXIucmVzb2x1dGlvbjtcbiAgICBjb250ZXh0LnNldFRyYW5zZm9ybShcbiAgICAgICAgdHJhbnNmb3JtLmEgKiByZXNvbHV0aW9uLFxuICAgICAgICB0cmFuc2Zvcm0uYiAqIHJlc29sdXRpb24sXG4gICAgICAgIHRyYW5zZm9ybS5jICogcmVzb2x1dGlvbixcbiAgICAgICAgdHJhbnNmb3JtLmQgKiByZXNvbHV0aW9uLFxuICAgICAgICB0cmFuc2Zvcm0udHggKiByZXNvbHV0aW9uLFxuICAgICAgICB0cmFuc2Zvcm0udHkgKiByZXNvbHV0aW9uXG4gICAgKTtcblxuICAgIENhbnZhc0dyYXBoaWNzLnJlbmRlckdyYXBoaWNzKHRoaXMsIGNvbnRleHQpO1xufTtcblxuLyoqXG4gKiBSZXRyaWV2ZXMgdGhlIGJvdW5kcyBvZiB0aGUgZ3JhcGhpYyBzaGFwZSBhcyBhIHJlY3RhbmdsZSBvYmplY3RcbiAqXG4gKiBAcGFyYW0gW21hdHJpeF0ge1BJWEkuTWF0cml4fSBUaGUgd29ybGQgdHJhbnNmb3JtIG1hdHJpeCB0byB1c2UsIGRlZmF1bHRzIHRvIHRoaXNcbiAqICBvYmplY3QncyB3b3JsZFRyYW5zZm9ybS5cbiAqIEByZXR1cm4ge1BJWEkuUmVjdGFuZ2xlfSB0aGUgcmVjdGFuZ3VsYXIgYm91bmRpbmcgYXJlYVxuICovXG5HcmFwaGljcy5wcm90b3R5cGUuZ2V0Qm91bmRzID0gZnVuY3Rpb24gKG1hdHJpeClcbntcbiAgICBpZighdGhpcy5fY3VycmVudEJvdW5kcylcbiAgICB7XG5cbiAgICAgICAgLy8gcmV0dXJuIGFuIGVtcHR5IG9iamVjdCBpZiB0aGUgaXRlbSBpcyBhIG1hc2shXG4gICAgICAgIGlmICghdGhpcy5yZW5kZXJhYmxlKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gbWF0aC5SZWN0YW5nbGUuRU1QVFk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5ib3VuZHNEaXJ0eSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51cGRhdGVMb2NhbEJvdW5kcygpO1xuXG4gICAgICAgICAgICB0aGlzLmdsRGlydHkgPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy5jYWNoZWRTcHJpdGVEaXJ0eSA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLmJvdW5kc0RpcnR5ID0gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgYm91bmRzID0gdGhpcy5fbG9jYWxCb3VuZHM7XG5cbiAgICAgICAgdmFyIHcwID0gYm91bmRzLng7XG4gICAgICAgIHZhciB3MSA9IGJvdW5kcy53aWR0aCArIGJvdW5kcy54O1xuXG4gICAgICAgIHZhciBoMCA9IGJvdW5kcy55O1xuICAgICAgICB2YXIgaDEgPSBib3VuZHMuaGVpZ2h0ICsgYm91bmRzLnk7XG5cbiAgICAgICAgdmFyIHdvcmxkVHJhbnNmb3JtID0gbWF0cml4IHx8IHRoaXMud29ybGRUcmFuc2Zvcm07XG5cbiAgICAgICAgdmFyIGEgPSB3b3JsZFRyYW5zZm9ybS5hO1xuICAgICAgICB2YXIgYiA9IHdvcmxkVHJhbnNmb3JtLmI7XG4gICAgICAgIHZhciBjID0gd29ybGRUcmFuc2Zvcm0uYztcbiAgICAgICAgdmFyIGQgPSB3b3JsZFRyYW5zZm9ybS5kO1xuICAgICAgICB2YXIgdHggPSB3b3JsZFRyYW5zZm9ybS50eDtcbiAgICAgICAgdmFyIHR5ID0gd29ybGRUcmFuc2Zvcm0udHk7XG5cbiAgICAgICAgdmFyIHgxID0gYSAqIHcxICsgYyAqIGgxICsgdHg7XG4gICAgICAgIHZhciB5MSA9IGQgKiBoMSArIGIgKiB3MSArIHR5O1xuXG4gICAgICAgIHZhciB4MiA9IGEgKiB3MCArIGMgKiBoMSArIHR4O1xuICAgICAgICB2YXIgeTIgPSBkICogaDEgKyBiICogdzAgKyB0eTtcblxuICAgICAgICB2YXIgeDMgPSBhICogdzAgKyBjICogaDAgKyB0eDtcbiAgICAgICAgdmFyIHkzID0gZCAqIGgwICsgYiAqIHcwICsgdHk7XG5cbiAgICAgICAgdmFyIHg0ID0gIGEgKiB3MSArIGMgKiBoMCArIHR4O1xuICAgICAgICB2YXIgeTQgPSAgZCAqIGgwICsgYiAqIHcxICsgdHk7XG5cbiAgICAgICAgdmFyIG1heFggPSB4MTtcbiAgICAgICAgdmFyIG1heFkgPSB5MTtcblxuICAgICAgICB2YXIgbWluWCA9IHgxO1xuICAgICAgICB2YXIgbWluWSA9IHkxO1xuXG4gICAgICAgIG1pblggPSB4MiA8IG1pblggPyB4MiA6IG1pblg7XG4gICAgICAgIG1pblggPSB4MyA8IG1pblggPyB4MyA6IG1pblg7XG4gICAgICAgIG1pblggPSB4NCA8IG1pblggPyB4NCA6IG1pblg7XG5cbiAgICAgICAgbWluWSA9IHkyIDwgbWluWSA/IHkyIDogbWluWTtcbiAgICAgICAgbWluWSA9IHkzIDwgbWluWSA/IHkzIDogbWluWTtcbiAgICAgICAgbWluWSA9IHk0IDwgbWluWSA/IHk0IDogbWluWTtcblxuICAgICAgICBtYXhYID0geDIgPiBtYXhYID8geDIgOiBtYXhYO1xuICAgICAgICBtYXhYID0geDMgPiBtYXhYID8geDMgOiBtYXhYO1xuICAgICAgICBtYXhYID0geDQgPiBtYXhYID8geDQgOiBtYXhYO1xuXG4gICAgICAgIG1heFkgPSB5MiA+IG1heFkgPyB5MiA6IG1heFk7XG4gICAgICAgIG1heFkgPSB5MyA+IG1heFkgPyB5MyA6IG1heFk7XG4gICAgICAgIG1heFkgPSB5NCA+IG1heFkgPyB5NCA6IG1heFk7XG5cbiAgICAgICAgdGhpcy5fYm91bmRzLnggPSBtaW5YO1xuICAgICAgICB0aGlzLl9ib3VuZHMud2lkdGggPSBtYXhYIC0gbWluWDtcblxuICAgICAgICB0aGlzLl9ib3VuZHMueSA9IG1pblk7XG4gICAgICAgIHRoaXMuX2JvdW5kcy5oZWlnaHQgPSBtYXhZIC0gbWluWTtcblxuICAgICAgICB0aGlzLl9jdXJyZW50Qm91bmRzID0gdGhpcy5fYm91bmRzO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLl9jdXJyZW50Qm91bmRzO1xufTtcblxuLyoqXG4qIFRlc3RzIGlmIGEgcG9pbnQgaXMgaW5zaWRlIHRoaXMgZ3JhcGhpY3Mgb2JqZWN0XG4qXG4qIEBwYXJhbSBwb2ludCB7UElYSS5Qb2ludH0gdGhlIHBvaW50IHRvIHRlc3RcbiogQHJldHVybiB7Ym9vbGVhbn0gdGhlIHJlc3VsdCBvZiB0aGUgdGVzdFxuKi9cbkdyYXBoaWNzLnByb3RvdHlwZS5jb250YWluc1BvaW50ID0gZnVuY3Rpb24oIHBvaW50IClcbntcbiAgICB0aGlzLndvcmxkVHJhbnNmb3JtLmFwcGx5SW52ZXJzZShwb2ludCwgIHRlbXBQb2ludCk7XG5cbiAgICB2YXIgZ3JhcGhpY3NEYXRhID0gdGhpcy5ncmFwaGljc0RhdGE7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGdyYXBoaWNzRGF0YS5sZW5ndGg7IGkrKylcbiAgICB7XG4gICAgICAgIHZhciBkYXRhID0gZ3JhcGhpY3NEYXRhW2ldO1xuXG4gICAgICAgIGlmICghZGF0YS5maWxsKVxuICAgICAgICB7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIG9ubHkgZGVhbCB3aXRoIGZpbGxzLi5cbiAgICAgICAgaWYgKGRhdGEuc2hhcGUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGlmICggZGF0YS5zaGFwZS5jb250YWlucyggdGVtcFBvaW50LngsIHRlbXBQb2ludC55ICkgKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xufTtcblxuLyoqXG4gKiBVcGRhdGUgdGhlIGJvdW5kcyBvZiB0aGUgb2JqZWN0XG4gKlxuICovXG5HcmFwaGljcy5wcm90b3R5cGUudXBkYXRlTG9jYWxCb3VuZHMgPSBmdW5jdGlvbiAoKVxue1xuICAgIHZhciBtaW5YID0gSW5maW5pdHk7XG4gICAgdmFyIG1heFggPSAtSW5maW5pdHk7XG5cbiAgICB2YXIgbWluWSA9IEluZmluaXR5O1xuICAgIHZhciBtYXhZID0gLUluZmluaXR5O1xuXG4gICAgaWYgKHRoaXMuZ3JhcGhpY3NEYXRhLmxlbmd0aClcbiAgICB7XG4gICAgICAgIHZhciBzaGFwZSwgcG9pbnRzLCB4LCB5LCB3LCBoO1xuXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5ncmFwaGljc0RhdGEubGVuZ3RoOyBpKyspXG4gICAgICAgIHtcbiAgICAgICAgICAgIHZhciBkYXRhID0gdGhpcy5ncmFwaGljc0RhdGFbaV07XG4gICAgICAgICAgICB2YXIgdHlwZSA9IGRhdGEudHlwZTtcbiAgICAgICAgICAgIHZhciBsaW5lV2lkdGggPSBkYXRhLmxpbmVXaWR0aDtcbiAgICAgICAgICAgIHNoYXBlID0gZGF0YS5zaGFwZTtcblxuICAgICAgICAgICAgaWYgKHR5cGUgPT09IENPTlNULlNIQVBFUy5SRUNUIHx8IHR5cGUgPT09IENPTlNULlNIQVBFUy5SUkVDKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHggPSBzaGFwZS54IC0gbGluZVdpZHRoLzI7XG4gICAgICAgICAgICAgICAgeSA9IHNoYXBlLnkgLSBsaW5lV2lkdGgvMjtcbiAgICAgICAgICAgICAgICB3ID0gc2hhcGUud2lkdGggKyBsaW5lV2lkdGg7XG4gICAgICAgICAgICAgICAgaCA9IHNoYXBlLmhlaWdodCArIGxpbmVXaWR0aDtcblxuICAgICAgICAgICAgICAgIG1pblggPSB4IDwgbWluWCA/IHggOiBtaW5YO1xuICAgICAgICAgICAgICAgIG1heFggPSB4ICsgdyA+IG1heFggPyB4ICsgdyA6IG1heFg7XG5cbiAgICAgICAgICAgICAgICBtaW5ZID0geSA8IG1pblkgPyB5IDogbWluWTtcbiAgICAgICAgICAgICAgICBtYXhZID0geSArIGggPiBtYXhZID8geSArIGggOiBtYXhZO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAodHlwZSA9PT0gQ09OU1QuU0hBUEVTLkNJUkMpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgeCA9IHNoYXBlLng7XG4gICAgICAgICAgICAgICAgeSA9IHNoYXBlLnk7XG4gICAgICAgICAgICAgICAgdyA9IHNoYXBlLnJhZGl1cyArIGxpbmVXaWR0aC8yO1xuICAgICAgICAgICAgICAgIGggPSBzaGFwZS5yYWRpdXMgKyBsaW5lV2lkdGgvMjtcblxuICAgICAgICAgICAgICAgIG1pblggPSB4IC0gdyA8IG1pblggPyB4IC0gdyA6IG1pblg7XG4gICAgICAgICAgICAgICAgbWF4WCA9IHggKyB3ID4gbWF4WCA/IHggKyB3IDogbWF4WDtcblxuICAgICAgICAgICAgICAgIG1pblkgPSB5IC0gaCA8IG1pblkgPyB5IC0gaCA6IG1pblk7XG4gICAgICAgICAgICAgICAgbWF4WSA9IHkgKyBoID4gbWF4WSA/IHkgKyBoIDogbWF4WTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKHR5cGUgPT09IENPTlNULlNIQVBFUy5FTElQKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHggPSBzaGFwZS54O1xuICAgICAgICAgICAgICAgIHkgPSBzaGFwZS55O1xuICAgICAgICAgICAgICAgIHcgPSBzaGFwZS53aWR0aCArIGxpbmVXaWR0aC8yO1xuICAgICAgICAgICAgICAgIGggPSBzaGFwZS5oZWlnaHQgKyBsaW5lV2lkdGgvMjtcblxuICAgICAgICAgICAgICAgIG1pblggPSB4IC0gdyA8IG1pblggPyB4IC0gdyA6IG1pblg7XG4gICAgICAgICAgICAgICAgbWF4WCA9IHggKyB3ID4gbWF4WCA/IHggKyB3IDogbWF4WDtcblxuICAgICAgICAgICAgICAgIG1pblkgPSB5IC0gaCA8IG1pblkgPyB5IC0gaCA6IG1pblk7XG4gICAgICAgICAgICAgICAgbWF4WSA9IHkgKyBoID4gbWF4WSA/IHkgKyBoIDogbWF4WTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAvLyBQT0xZXG4gICAgICAgICAgICAgICAgcG9pbnRzID0gc2hhcGUucG9pbnRzO1xuXG4gICAgICAgICAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBwb2ludHMubGVuZ3RoOyBqICs9IDIpXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICB4ID0gcG9pbnRzW2pdO1xuICAgICAgICAgICAgICAgICAgICB5ID0gcG9pbnRzW2orMV07XG5cbiAgICAgICAgICAgICAgICAgICAgbWluWCA9IHgtbGluZVdpZHRoIDwgbWluWCA/IHgtbGluZVdpZHRoIDogbWluWDtcbiAgICAgICAgICAgICAgICAgICAgbWF4WCA9IHgrbGluZVdpZHRoID4gbWF4WCA/IHgrbGluZVdpZHRoIDogbWF4WDtcblxuICAgICAgICAgICAgICAgICAgICBtaW5ZID0geS1saW5lV2lkdGggPCBtaW5ZID8geS1saW5lV2lkdGggOiBtaW5ZO1xuICAgICAgICAgICAgICAgICAgICBtYXhZID0geStsaW5lV2lkdGggPiBtYXhZID8geStsaW5lV2lkdGggOiBtYXhZO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICBtaW5YID0gMDtcbiAgICAgICAgbWF4WCA9IDA7XG4gICAgICAgIG1pblkgPSAwO1xuICAgICAgICBtYXhZID0gMDtcbiAgICB9XG5cbiAgICB2YXIgcGFkZGluZyA9IHRoaXMuYm91bmRzUGFkZGluZztcblxuICAgIHRoaXMuX2xvY2FsQm91bmRzLnggPSBtaW5YIC0gcGFkZGluZztcbiAgICB0aGlzLl9sb2NhbEJvdW5kcy53aWR0aCA9IChtYXhYIC0gbWluWCkgKyBwYWRkaW5nICogMjtcblxuICAgIHRoaXMuX2xvY2FsQm91bmRzLnkgPSBtaW5ZIC0gcGFkZGluZztcbiAgICB0aGlzLl9sb2NhbEJvdW5kcy5oZWlnaHQgPSAobWF4WSAtIG1pblkpICsgcGFkZGluZyAqIDI7XG59O1xuXG4vKipcbiAqIEdlbmVyYXRlcyB0aGUgY2FjaGVkIHNwcml0ZSB3aGVuIHRoZSBzcHJpdGUgaGFzIGNhY2hlQXNCaXRtYXAgPSB0cnVlXG4gKlxuICogQHByaXZhdGVcbiAqL1xuLypcbkdyYXBoaWNzLnByb3RvdHlwZS5fZ2VuZXJhdGVDYWNoZWRTcHJpdGUgPSBmdW5jdGlvbiAoKVxue1xuICAgIHZhciBib3VuZHMgPSB0aGlzLmdldExvY2FsQm91bmRzKCk7XG5cbiAgICBpZiAoIXRoaXMuX2NhY2hlZFNwcml0ZSlcbiAgICB7XG4gICAgICAgIHZhciBjYW52YXNCdWZmZXIgPSBuZXcgQ2FudmFzQnVmZmVyKGJvdW5kcy53aWR0aCwgYm91bmRzLmhlaWdodCk7XG4gICAgICAgIHZhciB0ZXh0dXJlID0gVGV4dHVyZS5mcm9tQ2FudmFzKGNhbnZhc0J1ZmZlci5jYW52YXMpO1xuXG4gICAgICAgIHRoaXMuX2NhY2hlZFNwcml0ZSA9IG5ldyBTcHJpdGUodGV4dHVyZSk7XG4gICAgICAgIHRoaXMuX2NhY2hlZFNwcml0ZS5idWZmZXIgPSBjYW52YXNCdWZmZXI7XG5cbiAgICAgICAgdGhpcy5fY2FjaGVkU3ByaXRlLndvcmxkVHJhbnNmb3JtID0gdGhpcy53b3JsZFRyYW5zZm9ybTtcbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgdGhpcy5fY2FjaGVkU3ByaXRlLmJ1ZmZlci5yZXNpemUoYm91bmRzLndpZHRoLCBib3VuZHMuaGVpZ2h0KTtcbiAgICB9XG5cbiAgICAvLyBsZXZlcmFnZSB0aGUgYW5jaG9yIHRvIGFjY291bnQgZm9yIHRoZSBvZmZzZXQgb2YgdGhlIGVsZW1lbnRcbiAgICB0aGlzLl9jYWNoZWRTcHJpdGUuYW5jaG9yLnggPSAtKCBib3VuZHMueCAvIGJvdW5kcy53aWR0aCApO1xuICAgIHRoaXMuX2NhY2hlZFNwcml0ZS5hbmNob3IueSA9IC0oIGJvdW5kcy55IC8gYm91bmRzLmhlaWdodCApO1xuXG4gICAgLy8gdGhpcy5fY2FjaGVkU3ByaXRlLmJ1ZmZlci5jb250ZXh0LnNhdmUoKTtcbiAgICB0aGlzLl9jYWNoZWRTcHJpdGUuYnVmZmVyLmNvbnRleHQudHJhbnNsYXRlKC1ib3VuZHMueCwtYm91bmRzLnkpO1xuXG4gICAgLy8gbWFrZSBzdXJlIHdlIHNldCB0aGUgYWxwaGEgb2YgdGhlIGdyYXBoaWNzIHRvIDEgZm9yIHRoZSByZW5kZXIuLlxuICAgIHRoaXMud29ybGRBbHBoYSA9IDE7XG5cbiAgICAvLyBub3cgcmVuZGVyIHRoZSBncmFwaGljLi5cbiAgICBDYW52YXNHcmFwaGljcy5yZW5kZXJHcmFwaGljcyh0aGlzLCB0aGlzLl9jYWNoZWRTcHJpdGUuYnVmZmVyLmNvbnRleHQpO1xuXG4gICAgdGhpcy5fY2FjaGVkU3ByaXRlLmFscGhhID0gdGhpcy5hbHBoYTtcbn07XG4qL1xuLyoqXG4gKiBVcGRhdGVzIHRleHR1cmUgc2l6ZSBiYXNlZCBvbiBjYW52YXMgc2l6ZVxuICpcbiAqIEBwcml2YXRlXG4gKi9cbi8qXG5HcmFwaGljcy5wcm90b3R5cGUudXBkYXRlQ2FjaGVkU3ByaXRlVGV4dHVyZSA9IGZ1bmN0aW9uICgpXG57XG4gICAgdmFyIGNhY2hlZFNwcml0ZSA9IHRoaXMuX2NhY2hlZFNwcml0ZTtcbiAgICB2YXIgdGV4dHVyZSA9IGNhY2hlZFNwcml0ZS50ZXh0dXJlO1xuICAgIHZhciBjYW52YXMgPSBjYWNoZWRTcHJpdGUuYnVmZmVyLmNhbnZhcztcblxuICAgIHRleHR1cmUuYmFzZVRleHR1cmUud2lkdGggPSBjYW52YXMud2lkdGg7XG4gICAgdGV4dHVyZS5iYXNlVGV4dHVyZS5oZWlnaHQgPSBjYW52YXMuaGVpZ2h0O1xuICAgIHRleHR1cmUuY3JvcC53aWR0aCA9IHRleHR1cmUuZnJhbWUud2lkdGggPSBjYW52YXMud2lkdGg7XG4gICAgdGV4dHVyZS5jcm9wLmhlaWdodCA9IHRleHR1cmUuZnJhbWUuaGVpZ2h0ID0gY2FudmFzLmhlaWdodDtcblxuICAgIGNhY2hlZFNwcml0ZS5fd2lkdGggPSBjYW52YXMud2lkdGg7XG4gICAgY2FjaGVkU3ByaXRlLl9oZWlnaHQgPSBjYW52YXMuaGVpZ2h0O1xuXG4gICAgLy8gdXBkYXRlIHRoZSBkaXJ0eSBiYXNlIHRleHR1cmVzXG4gICAgdGV4dHVyZS5iYXNlVGV4dHVyZS5kaXJ0eSgpO1xufTsqL1xuXG4vKipcbiAqIERlc3Ryb3lzIGEgcHJldmlvdXMgY2FjaGVkIHNwcml0ZS5cbiAqXG4gKi9cbi8qXG5HcmFwaGljcy5wcm90b3R5cGUuZGVzdHJveUNhY2hlZFNwcml0ZSA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy5fY2FjaGVkU3ByaXRlLnRleHR1cmUuZGVzdHJveSh0cnVlKTtcblxuICAgIC8vIGxldCB0aGUgZ2MgY29sbGVjdCB0aGUgdW51c2VkIHNwcml0ZVxuICAgIC8vIFRPRE8gY291bGQgYmUgb2JqZWN0IHBvb2xlZCFcbiAgICB0aGlzLl9jYWNoZWRTcHJpdGUgPSBudWxsO1xufTsqL1xuXG4vKipcbiAqIERyYXdzIHRoZSBnaXZlbiBzaGFwZSB0byB0aGlzIEdyYXBoaWNzIG9iamVjdC4gQ2FuIGJlIGFueSBvZiBDaXJjbGUsIFJlY3RhbmdsZSwgRWxsaXBzZSwgTGluZSBvciBQb2x5Z29uLlxuICpcbiAqIEBwYXJhbSBzaGFwZSB7UElYSS5DaXJjbGV8UElYSS5SZWN0YW5nbGV8UElYSS5FbGxpcHNlfFBJWEkuTGluZXxQSVhJLlBvbHlnb259IFRoZSBzaGFwZSBvYmplY3QgdG8gZHJhdy5cbiAqIEByZXR1cm4ge1BJWEkuR3JhcGhpY3NEYXRhfSBUaGUgZ2VuZXJhdGVkIEdyYXBoaWNzRGF0YSBvYmplY3QuXG4gKi9cbkdyYXBoaWNzLnByb3RvdHlwZS5kcmF3U2hhcGUgPSBmdW5jdGlvbiAoc2hhcGUpXG57XG4gICAgaWYgKHRoaXMuY3VycmVudFBhdGgpXG4gICAge1xuICAgICAgICAvLyBjaGVjayBjdXJyZW50IHBhdGghXG4gICAgICAgIGlmICh0aGlzLmN1cnJlbnRQYXRoLnNoYXBlLnBvaW50cy5sZW5ndGggPD0gMilcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5ncmFwaGljc0RhdGEucG9wKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLmN1cnJlbnRQYXRoID0gbnVsbDtcblxuICAgIHZhciBkYXRhID0gbmV3IEdyYXBoaWNzRGF0YSh0aGlzLmxpbmVXaWR0aCwgdGhpcy5saW5lQ29sb3IsIHRoaXMubGluZUFscGhhLCB0aGlzLmZpbGxDb2xvciwgdGhpcy5maWxsQWxwaGEsIHRoaXMuZmlsbGluZywgc2hhcGUpO1xuXG4gICAgdGhpcy5ncmFwaGljc0RhdGEucHVzaChkYXRhKTtcblxuICAgIGlmIChkYXRhLnR5cGUgPT09IENPTlNULlNIQVBFUy5QT0xZKVxuICAgIHtcbiAgICAgICAgZGF0YS5zaGFwZS5jbG9zZWQgPSBkYXRhLnNoYXBlLmNsb3NlZCB8fCB0aGlzLmZpbGxpbmc7XG4gICAgICAgIHRoaXMuY3VycmVudFBhdGggPSBkYXRhO1xuICAgIH1cblxuICAgIHRoaXMuZGlydHkgPSB0aGlzLmJvdW5kc0RpcnR5ID0gdHJ1ZTtcblxuICAgIHJldHVybiBkYXRhO1xufTtcblxuLyoqXG4gKiBEZXN0cm95cyB0aGUgR3JhcGhpY3Mgb2JqZWN0LlxuICovXG5HcmFwaGljcy5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uICgpIHtcbiAgICBDb250YWluZXIucHJvdG90eXBlLmRlc3Ryb3kuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcblxuICAgIC8vIGRlc3Ryb3kgZWFjaCBvZiB0aGUgR3JhcGhpY3NEYXRhIG9iamVjdHNcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuZ3JhcGhpY3NEYXRhLmxlbmd0aDsgKytpKSB7XG4gICAgICAgIHRoaXMuZ3JhcGhpY3NEYXRhW2ldLmRlc3Ryb3koKTtcbiAgICB9XG5cbiAgICAvLyBmb3IgZWFjaCB3ZWJnbCBkYXRhIGVudHJ5LCBkZXN0cm95IHRoZSBXZWJHTEdyYXBoaWNzRGF0YVxuICAgIGZvciAodmFyIGlkIGluIHRoaXMuX3dlYmdsKSB7XG4gICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgdGhpcy5fd2ViZ2xbaWRdLmRhdGEubGVuZ3RoOyArK2opIHtcbiAgICAgICAgICAgIHRoaXMuX3dlYmdsW2lkXS5kYXRhW2pdLmRlc3Ryb3koKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMuZ3JhcGhpY3NEYXRhID0gbnVsbDtcblxuICAgIHRoaXMuY3VycmVudFBhdGggPSBudWxsO1xuICAgIHRoaXMuX3dlYmdsID0gbnVsbDtcbiAgICB0aGlzLl9sb2NhbEJvdW5kcyA9IG51bGw7XG59O1xuIiwiLyoqXG4gKiBBIEdyYXBoaWNzRGF0YSBvYmplY3QuXG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIGxpbmVXaWR0aCB7bnVtYmVyfSB0aGUgd2lkdGggb2YgdGhlIGxpbmUgdG8gZHJhd1xuICogQHBhcmFtIGxpbmVDb2xvciB7bnVtYmVyfSB0aGUgY29sb3Igb2YgdGhlIGxpbmUgdG8gZHJhd1xuICogQHBhcmFtIGxpbmVBbHBoYSB7bnVtYmVyfSB0aGUgYWxwaGEgb2YgdGhlIGxpbmUgdG8gZHJhd1xuICogQHBhcmFtIGZpbGxDb2xvciB7bnVtYmVyfSB0aGUgY29sb3Igb2YgdGhlIGZpbGxcbiAqIEBwYXJhbSBmaWxsQWxwaGEge251bWJlcn0gdGhlIGFscGhhIG9mIHRoZSBmaWxsXG4gKiBAcGFyYW0gZmlsbCAgICAgIHtib29sZWFufSB3aGV0aGVyIG9yIG5vdCB0aGUgc2hhcGUgaXMgZmlsbGVkIHdpdGggYSBjb2xvdXJcbiAqIEBwYXJhbSBzaGFwZSAgICAge0NpcmNsZXxSZWN0YW5nbGV8RWxsaXBzZXxMaW5lfFBvbHlnb259IFRoZSBzaGFwZSBvYmplY3QgdG8gZHJhdy5cbiAqL1xuZnVuY3Rpb24gR3JhcGhpY3NEYXRhKGxpbmVXaWR0aCwgbGluZUNvbG9yLCBsaW5lQWxwaGEsIGZpbGxDb2xvciwgZmlsbEFscGhhLCBmaWxsLCBzaGFwZSlcbntcbiAgICAvKlxuICAgICAqIEBtZW1iZXIge251bWJlcn0gdGhlIHdpZHRoIG9mIHRoZSBsaW5lIHRvIGRyYXdcbiAgICAgKi9cbiAgICB0aGlzLmxpbmVXaWR0aCA9IGxpbmVXaWR0aDtcblxuICAgIC8qXG4gICAgICogQG1lbWJlciB7bnVtYmVyfSB0aGUgY29sb3Igb2YgdGhlIGxpbmUgdG8gZHJhd1xuICAgICAqL1xuICAgIHRoaXMubGluZUNvbG9yID0gbGluZUNvbG9yO1xuICAgIC8qXG4gICAgICogQG1lbWJlciB7bnVtYmVyfSB0aGUgYWxwaGEgb2YgdGhlIGxpbmUgdG8gZHJhd1xuICAgICAqL1xuICAgIHRoaXMubGluZUFscGhhID0gbGluZUFscGhhO1xuICAgIC8qXG4gICAgICogQG1lbWJlciB7bnVtYmVyfSBjYWNoZWQgdGludCBvZiB0aGUgbGluZSB0byBkcmF3XG4gICAgICovXG4gICAgdGhpcy5fbGluZVRpbnQgPSBsaW5lQ29sb3I7XG5cbiAgICAvKlxuICAgICAqIEBtZW1iZXIge251bWJlcn0gdGhlIGNvbG9yIG9mIHRoZSBmaWxsXG4gICAgICovXG4gICAgdGhpcy5maWxsQ29sb3IgPSBmaWxsQ29sb3I7XG5cbiAgICAvKlxuICAgICAqIEBtZW1iZXIge251bWJlcn0gdGhlIGFscGhhIG9mIHRoZSBmaWxsXG4gICAgICovXG4gICAgdGhpcy5maWxsQWxwaGEgPSBmaWxsQWxwaGE7XG5cbiAgICAvKlxuICAgICAqIEBtZW1iZXIge251bWJlcn0gY2FjaGVkIHRpbnQgb2YgdGhlIGZpbGxcbiAgICAgKi9cbiAgICB0aGlzLl9maWxsVGludCA9IGZpbGxDb2xvcjtcblxuICAgIC8qXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn0gd2hldGhlciBvciBub3QgdGhlIHNoYXBlIGlzIGZpbGxlZCB3aXRoIGEgY29sb3VyXG4gICAgICovXG4gICAgdGhpcy5maWxsID0gZmlsbDtcblxuICAgIC8qXG4gICAgICogQG1lbWJlciB7UElYSS5DaXJjbGV8UElYSS5SZWN0YW5nbGV8UElYSS5FbGxpcHNlfFBJWEkuTGluZXxQSVhJLlBvbHlnb259IFRoZSBzaGFwZSBvYmplY3QgdG8gZHJhdy5cbiAgICAgKi9cbiAgICB0aGlzLnNoYXBlID0gc2hhcGU7XG5cbiAgICAvKlxuICAgICAqIEBtZW1iZXIge251bWJlcn0gVGhlIHR5cGUgb2YgdGhlIHNoYXBlLCBzZWUgdGhlIENvbnN0LlNoYXBlcyBmaWxlIGZvciBhbGwgdGhlIGV4aXN0aW5nIHR5cGVzLFxuICAgICAqL1xuICAgIHRoaXMudHlwZSA9IHNoYXBlLnR5cGU7XG59XG5cbkdyYXBoaWNzRGF0YS5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBHcmFwaGljc0RhdGE7XG5tb2R1bGUuZXhwb3J0cyA9IEdyYXBoaWNzRGF0YTtcblxuLyoqXG4gKiBDcmVhdGVzIGEgbmV3IEdyYXBoaWNzRGF0YSBvYmplY3Qgd2l0aCB0aGUgc2FtZSB2YWx1ZXMgYXMgdGhpcyBvbmUuXG4gKlxuICogQHJldHVybiB7UElYSS5HcmFwaGljc0RhdGF9XG4gKi9cbkdyYXBoaWNzRGF0YS5wcm90b3R5cGUuY2xvbmUgPSBmdW5jdGlvbiAoKVxue1xuICAgIHJldHVybiBuZXcgR3JhcGhpY3NEYXRhKFxuICAgICAgICB0aGlzLmxpbmVXaWR0aCxcbiAgICAgICAgdGhpcy5saW5lQ29sb3IsXG4gICAgICAgIHRoaXMubGluZUFscGhhLFxuICAgICAgICB0aGlzLmZpbGxDb2xvcixcbiAgICAgICAgdGhpcy5maWxsQWxwaGEsXG4gICAgICAgIHRoaXMuZmlsbCxcbiAgICAgICAgdGhpcy5zaGFwZVxuICAgICk7XG59O1xuXG4vKipcbiAqIERlc3Ryb3lzIHRoZSBHcmFwaGljcyBkYXRhLlxuICovXG5HcmFwaGljc0RhdGEucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoKSB7XG4gICAgdGhpcy5zaGFwZSA9IG51bGw7XG59O1xuIiwidmFyIHV0aWxzID0gcmVxdWlyZSgnLi4vLi4vdXRpbHMnKSxcbiAgICBtYXRoID0gcmVxdWlyZSgnLi4vLi4vbWF0aCcpLFxuICAgIENPTlNUID0gcmVxdWlyZSgnLi4vLi4vY29uc3QnKSxcbiAgICBPYmplY3RSZW5kZXJlciA9IHJlcXVpcmUoJy4uLy4uL3JlbmRlcmVycy93ZWJnbC91dGlscy9PYmplY3RSZW5kZXJlcicpLFxuICAgIFdlYkdMUmVuZGVyZXIgPSByZXF1aXJlKCcuLi8uLi9yZW5kZXJlcnMvd2ViZ2wvV2ViR0xSZW5kZXJlcicpLFxuICAgIFdlYkdMR3JhcGhpY3NEYXRhID0gcmVxdWlyZSgnLi9XZWJHTEdyYXBoaWNzRGF0YScpLFxuICAgIFByaW1pdGl2ZVNoYWRlciA9IHJlcXVpcmUoJy4vc2hhZGVycy9QcmltaXRpdmVTaGFkZXInKSxcblxuICAgIC8vIHNvbWUgZHJhd2luZyBmdW5jdGlvbnMuLlxuICAgIGJ1aWxkTGluZSA9IHJlcXVpcmUoJy4vdXRpbHMvYnVpbGRMaW5lJyk7XG4gICAgYnVpbGRQb2x5ID0gcmVxdWlyZSgnLi91dGlscy9idWlsZFBvbHknKTtcbiAgICBidWlsZENvbXBsZXhQb2x5ID0gcmVxdWlyZSgnLi91dGlscy9idWlsZENvbXBsZXhQb2x5Jyk7XG4gICAgYnVpbGRSZWN0YW5nbGUgPSByZXF1aXJlKCcuL3V0aWxzL2J1aWxkUmVjdGFuZ2xlJyk7XG4gICAgYnVpbGRSb3VuZGVkUmVjdGFuZ2xlID0gcmVxdWlyZSgnLi91dGlscy9idWlsZFJvdW5kZWRSZWN0YW5nbGUnKTtcbiAgICBidWlsZENpcmNsZSA9IHJlcXVpcmUoJy4vdXRpbHMvYnVpbGRDaXJjbGUnKTtcblxuICAgIGVhcmN1dCA9IHJlcXVpcmUoJ2VhcmN1dCcpO1xuXG4vKipcbiAqIFJlbmRlcnMgdGhlIGdyYXBoaWNzIG9iamVjdC5cbiAqXG4gKiBAY2xhc3NcbiAqIEBwcml2YXRlXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQGV4dGVuZHMgUElYSS5PYmplY3RSZW5kZXJlclxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLldlYkdMUmVuZGVyZXJ9IFRoZSByZW5kZXJlciB0aGlzIG9iamVjdCByZW5kZXJlciB3b3JrcyBmb3IuXG4gKi9cbmZ1bmN0aW9uIEdyYXBoaWNzUmVuZGVyZXIocmVuZGVyZXIpXG57XG4gICAgT2JqZWN0UmVuZGVyZXIuY2FsbCh0aGlzLCByZW5kZXJlcik7XG5cbiAgICB0aGlzLmdyYXBoaWNzRGF0YVBvb2wgPSBbXTtcblxuICAgIHRoaXMucHJpbWl0aXZlU2hhZGVyID0gbnVsbDtcbiAgICB0aGlzLmNvbXBsZXhQcmltaXRpdmVTaGFkZXIgPSBudWxsO1xuXG4gICAgdGhpcy5nbCA9IHJlbmRlcmVyLmdsO1xuXG4gICAgLyoqXG4gICAgICogVGhpcyBpcyB0aGUgbWF4aW11bSBudW1iZXIgb2YgcG9pbnRzIGEgcG9seSBjYW4gY29udGFpbiBiZWZvcmUgaXQgaXMgcmVuZGVyZWQgYXMgYSBjb21wbGV4IHBvbHlnb24gKHVzaW5nIHRoZSBzdGVuY2lsIGJ1ZmZlcilcbiAgICAgKiBAdHlwZSB7TnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMubWF4aW11bVNpbXBsZVBvbHlTaXplID0gMjAwO1xufVxuXG5HcmFwaGljc1JlbmRlcmVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoT2JqZWN0UmVuZGVyZXIucHJvdG90eXBlKTtcbkdyYXBoaWNzUmVuZGVyZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gR3JhcGhpY3NSZW5kZXJlcjtcbm1vZHVsZS5leHBvcnRzID0gR3JhcGhpY3NSZW5kZXJlcjtcblxuV2ViR0xSZW5kZXJlci5yZWdpc3RlclBsdWdpbignZ3JhcGhpY3MnLCBHcmFwaGljc1JlbmRlcmVyKTtcblxuLyoqXG4gKiBDYWxsZWQgd2hlbiB0aGVyZSBpcyBhIFdlYkdMIGNvbnRleHQgY2hhbmdlXG4gKlxuICogQHByaXZhdGVcbiAqXG4gKi9cbkdyYXBoaWNzUmVuZGVyZXIucHJvdG90eXBlLm9uQ29udGV4dENoYW5nZSA9IGZ1bmN0aW9uKClcbntcbiAgICB0aGlzLmdsID0gdGhpcy5yZW5kZXJlci5nbDtcbiAgICB0aGlzLnByaW1pdGl2ZVNoYWRlciA9IG5ldyBQcmltaXRpdmVTaGFkZXIodGhpcy5nbClcbn07XG5cbi8qKlxuICogRGVzdHJveXMgdGhpcyByZW5kZXJlci5cbiAqXG4gKi9cbkdyYXBoaWNzUmVuZGVyZXIucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoKSB7XG4gICAgT2JqZWN0UmVuZGVyZXIucHJvdG90eXBlLmRlc3Ryb3kuY2FsbCh0aGlzKTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5ncmFwaGljc0RhdGFQb29sLmxlbmd0aDsgKytpKSB7XG4gICAgICAgIHRoaXMuZ3JhcGhpY3NEYXRhUG9vbFtpXS5kZXN0cm95KCk7XG4gICAgfVxuXG4gICAgdGhpcy5ncmFwaGljc0RhdGFQb29sID0gbnVsbDtcbn07XG5cbi8qKlxuICogUmVuZGVycyBhIGdyYXBoaWNzIG9iamVjdC5cbiAqXG4gKiBAcGFyYW0gZ3JhcGhpY3Mge1BJWEkuR3JhcGhpY3N9IFRoZSBncmFwaGljcyBvYmplY3QgdG8gcmVuZGVyLlxuICovXG5HcmFwaGljc1JlbmRlcmVyLnByb3RvdHlwZS5yZW5kZXIgPSBmdW5jdGlvbihncmFwaGljcylcbntcbiAgICB2YXIgcmVuZGVyZXIgPSB0aGlzLnJlbmRlcmVyO1xuICAgIHZhciBnbCA9IHJlbmRlcmVyLmdsO1xuXG4gICAgdmFyIHdlYkdMRGF0YTtcbiAgLy8gIGNvbnNvbGUubG9nKGdyYXBoaWNzKVxuICAgIGlmIChncmFwaGljcy5kaXJ0eSB8fCAhZ3JhcGhpY3MuX3dlYkdMW2dsLmlkXSlcbiAgICB7XG4gICAgICAgIHRoaXMudXBkYXRlR3JhcGhpY3MoZ3JhcGhpY3MpO1xuICAgIH1cblxuICAgIHZhciB3ZWJHTCA9IGdyYXBoaWNzLl93ZWJHTFtnbC5pZF07XG5cbiAgICAvLyBUaGlzICBjb3VsZCBiZSBzcGVlZGVkIHVwIGZvciBzdXJlIVxuXG4gICAgcmVuZGVyZXIuYmxlbmRNb2RlTWFuYWdlci5zZXRCbGVuZE1vZGUoIGdyYXBoaWNzLmJsZW5kTW9kZSApO1xuXG4vLyAgICB2YXIgbWF0cml4ID0gIGdyYXBoaWNzLndvcmxkVHJhbnNmb3JtLmNsb25lKCk7XG4vLyAgICB2YXIgbWF0cml4ID0gIHJlbmRlcmVyLmN1cnJlbnRSZW5kZXJUYXJnZXQucHJvamVjdGlvbk1hdHJpeC5jbG9uZSgpO1xuLy8gICAgbWF0cml4LmFwcGVuZChncmFwaGljcy53b3JsZFRyYW5zZm9ybSk7XG5cbiAgICBmb3IgKHZhciBpID0gMCwgbiA9IHdlYkdMLmRhdGEubGVuZ3RoOyBpIDwgbjsgaSsrKVxuICAgIHtcbiAgICAgICAgd2ViR0xEYXRhID0gd2ViR0wuZGF0YVtpXTtcblxuICAgICAgICBpZiAod2ViR0wuZGF0YVtpXS5tb2RlID09PSAxKVxuICAgICAgICB7XG4gICAgICAgICAgICAvL1RPRE8gZml4IHRoaXMgb25lIVxuICAgICAgICAgICAgXG4gICAgICAgICAgICAvKlxuICAgICAgICAgICAgcmVuZGVyZXIuc3RlbmNpbE1hbmFnZXIucHVzaFN0ZW5jaWwoZ3JhcGhpY3MsIHdlYkdMRGF0YSk7XG5cbiAgICAgICAgICAgIGdsLnVuaWZvcm0xZihyZW5kZXJlci5zaGFkZXJNYW5hZ2VyLmNvbXBsZXhQcmltaXRpdmVTaGFkZXIudW5pZm9ybXMuYWxwaGEuX2xvY2F0aW9uLCBncmFwaGljcy53b3JsZEFscGhhICogd2ViR0xEYXRhLmFscGhhKTtcblxuICAgICAgICAgICAgLy8gcmVuZGVyIHF1YWQuLlxuICAgICAgICAgICAgZ2wuZHJhd0VsZW1lbnRzKGdsLlRSSUFOR0xFX0ZBTiwgNCwgZ2wuVU5TSUdORURfU0hPUlQsICggd2ViR0xEYXRhLmluZGljZXMubGVuZ3RoIC0gNCApICogMiApO1xuXG4gICAgICAgICAgICByZW5kZXJlci5zdGVuY2lsTWFuYWdlci5wb3BTdGVuY2lsKGdyYXBoaWNzLCB3ZWJHTERhdGEpO1xuICAgICAgICAgICAgKi9cbiAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgIHtcblxuICAgICAgICAgICAgc2hhZGVyID0gdGhpcy5wcmltaXRpdmVTaGFkZXI7XG5cbiAgICAgICAgICAgIHJlbmRlcmVyLmJpbmRTaGFkZXIoc2hhZGVyKVxuXG4gICAgICAgICAgICBzaGFkZXIudW5pZm9ybXMudHJhbnNsYXRpb25NYXRyaXggPSBncmFwaGljcy53b3JsZFRyYW5zZm9ybS50b0FycmF5KHRydWUpO1xuICAgICAgICAgICAgc2hhZGVyLnVuaWZvcm1zLnRpbnQgPSB1dGlscy5oZXgycmdiKGdyYXBoaWNzLnRpbnQpO1xuICAgICAgICAgICAgc2hhZGVyLnVuaWZvcm1zLmFscGhhID0gZ3JhcGhpY3Mud29ybGRBbHBoYTtcblxuXG4gICAgICAgICAgICBnbC5iaW5kQnVmZmVyKGdsLkFSUkFZX0JVRkZFUiwgd2ViR0xEYXRhLmJ1ZmZlcik7XG5cbiAgICAgICAgICAgIHNoYWRlciA9IHRoaXMucHJpbWl0aXZlU2hhZGVyO1xuXG4gICAgICAgICAgICBzaGFkZXIuYXR0cmlidXRlcy5hVmVydGV4UG9zaXRpb24ucG9pbnRlcihnbC5GTE9BVCwgZmFsc2UsIDQgKiA2LCAwKTtcbiAgICAgICAgICAgIHNoYWRlci5hdHRyaWJ1dGVzLmFDb2xvci5wb2ludGVyKGdsLkZMT0FULCBmYWxzZSwgNCAqIDYsIDIgKiA0KTtcblxuICAgICAgICAgICAgZ2wuZW5hYmxlVmVydGV4QXR0cmliQXJyYXkoc2hhZGVyLmF0dHJpYnV0ZXMuYVZlcnRleFBvc2l0aW9uLmxvY2F0aW9uKTtcbiAgICAgICAgICAgIGdsLmVuYWJsZVZlcnRleEF0dHJpYkFycmF5KHNoYWRlci5hdHRyaWJ1dGVzLmFDb2xvci5sb2NhdGlvbik7XG5cbiAgICAgICAgICAgIC8vIHNldCB0aGUgaW5kZXggYnVmZmVyIVxuICAgICAgICAgICAgZ2wuYmluZEJ1ZmZlcihnbC5FTEVNRU5UX0FSUkFZX0JVRkZFUiwgd2ViR0xEYXRhLmluZGV4QnVmZmVyKTtcbiAgICAgICAgICAgIGdsLmRyYXdFbGVtZW50cyhnbC5UUklBTkdMRV9TVFJJUCwgIHdlYkdMRGF0YS5pbmRpY2VzLmxlbmd0aCwgZ2wuVU5TSUdORURfU0hPUlQsIDAgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJlbmRlcmVyLmRyYXdDb3VudCsrO1xuICAgIH1cbn07XG5cbi8qKlxuICogVXBkYXRlcyB0aGUgZ3JhcGhpY3Mgb2JqZWN0XG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSBncmFwaGljcyB7UElYSS5HcmFwaGljc30gVGhlIGdyYXBoaWNzIG9iamVjdCB0byB1cGRhdGVcbiAqL1xuR3JhcGhpY3NSZW5kZXJlci5wcm90b3R5cGUudXBkYXRlR3JhcGhpY3MgPSBmdW5jdGlvbihncmFwaGljcylcbntcbiAgICB2YXIgZ2wgPSB0aGlzLnJlbmRlcmVyLmdsO1xuXG4gICAgIC8vIGdldCB0aGUgY29udGV4dHMgZ3JhcGhpY3Mgb2JqZWN0XG4gICAgdmFyIHdlYkdMID0gZ3JhcGhpY3MuX3dlYkdMW2dsLmlkXTtcblxuICAgIC8vIGlmIHRoZSBncmFwaGljcyBvYmplY3QgZG9lcyBub3QgZXhpc3QgaW4gdGhlIHdlYkdMIGNvbnRleHQgdGltZSB0byBjcmVhdGUgaXQhXG4gICAgaWYgKCF3ZWJHTClcbiAgICB7XG4gICAgICAgIHdlYkdMID0gZ3JhcGhpY3MuX3dlYkdMW2dsLmlkXSA9IHtsYXN0SW5kZXg6MCwgZGF0YTpbXSwgZ2w6Z2x9O1xuICAgIH1cblxuICAgXG4gICAgLy8gZmxhZyB0aGUgZ3JhcGhpY3MgYXMgbm90IGRpcnR5IGFzIHdlIGFyZSBhYm91dCB0byB1cGRhdGUgaXQuLi5cbiAgICBncmFwaGljcy5kaXJ0eSA9IGZhbHNlO1xuXG4gICAgdmFyIGk7XG5cbiAgICAvLyBpZiB0aGUgdXNlciBjbGVhcmVkIHRoZSBncmFwaGljcyBvYmplY3Qgd2Ugd2lsbCBuZWVkIHRvIGNsZWFyIGV2ZXJ5IG9iamVjdFxuICAgIGlmIChncmFwaGljcy5jbGVhckRpcnR5KVxuICAgIHtcbiAgICAgICAgZ3JhcGhpY3MuY2xlYXJEaXJ0eSA9IGZhbHNlO1xuXG4gICAgICAgIC8vIGxvb3AgdGhyb3VnaCBhbmQgcmV0dXJuIGFsbCB0aGUgd2ViR0xEYXRhcyB0byB0aGUgb2JqZWN0IHBvb2wgc28gdGhhbiBjYW4gYmUgcmV1c2VkIGxhdGVyIG9uXG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCB3ZWJHTC5kYXRhLmxlbmd0aDsgaSsrKVxuICAgICAgICB7XG4gICAgICAgICAgICB2YXIgZ3JhcGhpY3NEYXRhID0gd2ViR0wuZGF0YVtpXTtcbiAgICAgICAgICAgIGdyYXBoaWNzRGF0YS5yZXNldCgpO1xuICAgICAgICAgICAgdGhpcy5ncmFwaGljc0RhdGFQb29sLnB1c2goIGdyYXBoaWNzRGF0YSApO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gY2xlYXIgdGhlIGFycmF5IGFuZCByZXNldCB0aGUgaW5kZXguLlxuICAgICAgICB3ZWJHTC5kYXRhID0gW107XG4gICAgICAgIHdlYkdMLmxhc3RJbmRleCA9IDA7XG4gICAgfVxuXG4gICAgdmFyIHdlYkdMRGF0YTtcblxuICAgIC8vIGxvb3AgdGhyb3VnaCB0aGUgZ3JhcGhpY3MgZGF0YXMgYW5kIGNvbnN0cnVjdCBlYWNoIG9uZS4uXG4gICAgLy8gaWYgdGhlIG9iamVjdCBpcyBhIGNvbXBsZXggZmlsbCB0aGVuIHRoZSBuZXcgc3RlbmNpbCBidWZmZXIgdGVjaG5pcXVlIHdpbGwgYmUgdXNlZFxuICAgIC8vIG90aGVyIHdpc2UgZ3JhcGhpY3Mgb2JqZWN0cyB3aWxsIGJlIHB1c2hlZCBpbnRvIGEgYmF0Y2guLlxuICAgIGZvciAoaSA9IHdlYkdMLmxhc3RJbmRleDsgaSA8IGdyYXBoaWNzLmdyYXBoaWNzRGF0YS5sZW5ndGg7IGkrKylcbiAgICB7XG4gICAgICAgIHZhciBkYXRhID0gZ3JhcGhpY3MuZ3JhcGhpY3NEYXRhW2ldO1xuXG4gICAgICAgIGlmIChkYXRhLnR5cGUgPT09IENPTlNULlNIQVBFUy5QT0xZKVxuICAgICAgICB7XG4gICAgICAgICAgICAvLyBuZWVkIHRvIGFkZCB0aGUgcG9pbnRzIHRoZSB0aGUgZ3JhcGhpY3Mgb2JqZWN0Li5cbiAgICAgICAgICAgIGRhdGEucG9pbnRzID0gZGF0YS5zaGFwZS5wb2ludHMuc2xpY2UoKTtcbiAgICAgICAgICAgIGlmIChkYXRhLnNoYXBlLmNsb3NlZClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAvLyBjbG9zZSB0aGUgcG9seSBpZiB0aGUgdmFsdWUgaXMgdHJ1ZSFcbiAgICAgICAgICAgICAgICBpZiAoZGF0YS5wb2ludHNbMF0gIT09IGRhdGEucG9pbnRzW2RhdGEucG9pbnRzLmxlbmd0aC0yXSB8fCBkYXRhLnBvaW50c1sxXSAhPT0gZGF0YS5wb2ludHNbZGF0YS5wb2ludHMubGVuZ3RoLTFdKVxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgZGF0YS5wb2ludHMucHVzaChkYXRhLnBvaW50c1swXSwgZGF0YS5wb2ludHNbMV0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gTUFLRSBTVVJFIFdFIEhBVkUgVEhFIENPUlJFQ1QgVFlQRS4uXG4gICAgICAgICAgICBpZiAoZGF0YS5maWxsKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGlmIChkYXRhLnBvaW50cy5sZW5ndGggPj0gNilcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChkYXRhLnBvaW50cy5sZW5ndGggPCB0aGlzLm1heGltdW1TaW1wbGVQb2x5U2l6ZSAqIDIpXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHdlYkdMRGF0YSA9IHRoaXMuc3dpdGNoTW9kZSh3ZWJHTCwgMCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjYW5EcmF3VXNpbmdTaW1wbGUgPSBidWlsZFBvbHkoZGF0YSwgd2ViR0xEYXRhKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFjYW5EcmF3VXNpbmdTaW1wbGUpXG4gICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd2ViR0xEYXRhID0gdGhpcy5zd2l0Y2hNb2RlKHdlYkdMLCAxKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWlsZENvbXBsZXhQb2x5KGRhdGEsIHdlYkdMRGF0YSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHdlYkdMRGF0YSA9IHRoaXMuc3dpdGNoTW9kZSh3ZWJHTCwgMSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBidWlsZENvbXBsZXhQb2x5KGRhdGEsIHdlYkdMRGF0YSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChkYXRhLmxpbmVXaWR0aCA+IDApXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgd2ViR0xEYXRhID0gdGhpcy5zd2l0Y2hNb2RlKHdlYkdMLCAwKTtcbiAgICAgICAgICAgICAgICBidWlsZExpbmUoZGF0YSwgd2ViR0xEYXRhKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgIHtcbiAgICAgICAgICAgIHdlYkdMRGF0YSA9IHRoaXMuc3dpdGNoTW9kZSh3ZWJHTCwgMCk7XG5cbiAgICAgICAgICAgIGlmIChkYXRhLnR5cGUgPT09IENPTlNULlNIQVBFUy5SRUNUKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGJ1aWxkUmVjdGFuZ2xlKGRhdGEsIHdlYkdMRGF0YSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChkYXRhLnR5cGUgPT09IENPTlNULlNIQVBFUy5DSVJDIHx8IGRhdGEudHlwZSA9PT0gQ09OU1QuU0hBUEVTLkVMSVApXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgYnVpbGRDaXJjbGUoZGF0YSwgd2ViR0xEYXRhKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGRhdGEudHlwZSA9PT0gQ09OU1QuU0hBUEVTLlJSRUMpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgYnVpbGRSb3VuZGVkUmVjdGFuZ2xlKGRhdGEsIHdlYkdMRGF0YSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICB3ZWJHTC5sYXN0SW5kZXgrKztcbiAgICB9XG5cbiAgICAvLyB1cGxvYWQgYWxsIHRoZSBkaXJ0eSBkYXRhLi4uXG4gICAgZm9yIChpID0gMDsgaSA8IHdlYkdMLmRhdGEubGVuZ3RoOyBpKyspXG4gICAge1xuICAgICAgICB3ZWJHTERhdGEgPSB3ZWJHTC5kYXRhW2ldO1xuXG4gICAgICAgIGlmICh3ZWJHTERhdGEuZGlydHkpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHdlYkdMRGF0YS51cGxvYWQoKTtcbiAgICAgICAgfVxuICAgIH1cbn07XG5cbi8qKlxuICpcbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHdlYkdMIHtXZWJHTFJlbmRlcmluZ0NvbnRleHR9IHRoZSBjdXJyZW50IFdlYkdMIGRyYXdpbmcgY29udGV4dFxuICogQHBhcmFtIHR5cGUge251bWJlcn0gVE9ETyBAQWx2aW5cbiAqL1xuR3JhcGhpY3NSZW5kZXJlci5wcm90b3R5cGUuc3dpdGNoTW9kZSA9IGZ1bmN0aW9uICh3ZWJHTCwgdHlwZSlcbntcbiAgICB2YXIgd2ViR0xEYXRhO1xuXG4gICAgaWYgKCF3ZWJHTC5kYXRhLmxlbmd0aClcbiAgICB7XG4gICAgICAgIHdlYkdMRGF0YSA9IHRoaXMuZ3JhcGhpY3NEYXRhUG9vbC5wb3AoKSB8fCBuZXcgV2ViR0xHcmFwaGljc0RhdGEod2ViR0wuZ2wpO1xuICAgICAgICB3ZWJHTERhdGEubW9kZSA9IHR5cGU7XG4gICAgICAgIHdlYkdMLmRhdGEucHVzaCh3ZWJHTERhdGEpO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICB3ZWJHTERhdGEgPSB3ZWJHTC5kYXRhW3dlYkdMLmRhdGEubGVuZ3RoLTFdO1xuXG4gICAgICAgIGlmICgod2ViR0xEYXRhLnBvaW50cy5sZW5ndGggPiAzMjAwMDApIHx8IHdlYkdMRGF0YS5tb2RlICE9PSB0eXBlIHx8IHR5cGUgPT09IDEpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHdlYkdMRGF0YSA9IHRoaXMuZ3JhcGhpY3NEYXRhUG9vbC5wb3AoKSB8fCBuZXcgV2ViR0xHcmFwaGljc0RhdGEod2ViR0wuZ2wpO1xuICAgICAgICAgICAgd2ViR0xEYXRhLm1vZGUgPSB0eXBlO1xuICAgICAgICAgICAgd2ViR0wuZGF0YS5wdXNoKHdlYkdMRGF0YSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB3ZWJHTERhdGEuZGlydHkgPSB0cnVlO1xuXG4gICAgcmV0dXJuIHdlYkdMRGF0YTtcbn07XG5cbiIsIi8qKlxuICogQW4gb2JqZWN0IGNvbnRhaW5pbmcgV2ViR0wgc3BlY2lmaWMgcHJvcGVydGllcyB0byBiZSB1c2VkIGJ5IHRoZSBXZWJHTCByZW5kZXJlclxuICpcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqIEBwYXJhbSBnbCB7V2ViR0xSZW5kZXJpbmdDb250ZXh0fSB0aGUgY3VycmVudCBXZWJHTCBkcmF3aW5nIGNvbnRleHRcbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIFdlYkdMR3JhcGhpY3NEYXRhKGdsKSB7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgY3VycmVudCBXZWJHTCBkcmF3aW5nIGNvbnRleHRcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1dlYkdMUmVuZGVyaW5nQ29udGV4dH1cbiAgICAgKi9cbiAgICB0aGlzLmdsID0gZ2w7XG5cbiAgICAvL1RPRE8gZG9lcyB0aGlzIG5lZWQgdG8gYmUgc3BsaXQgYmVmb3JlIHVwbG9kaW5nPz9cbiAgICAvKipcbiAgICAgKiBBbiBhcnJheSBvZiBjb2xvciBjb21wb25lbnRzIChyLGcsYilcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJbXX1cbiAgICAgKi9cbiAgICB0aGlzLmNvbG9yID0gWzAsMCwwXTsgLy8gY29sb3Igc3BsaXQhXG5cbiAgICAvKipcbiAgICAgKiBBbiBhcnJheSBvZiBwb2ludHMgdG8gZHJhd1xuICAgICAqIEBtZW1iZXIge1BJWEkuUG9pbnRbXX1cbiAgICAgKi9cbiAgICB0aGlzLnBvaW50cyA9IFtdO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGluZGljZXMgb2YgdGhlIHZlcnRpY2VzXG4gICAgICogQG1lbWJlciB7bnVtYmVyW119XG4gICAgICovXG4gICAgdGhpcy5pbmRpY2VzID0gW107XG4gICAgLyoqXG4gICAgICogVGhlIG1haW4gYnVmZmVyXG4gICAgICogQG1lbWJlciB7V2ViR0xCdWZmZXJ9XG4gICAgICovXG4gICAgdGhpcy5idWZmZXIgPSBnbC5jcmVhdGVCdWZmZXIoKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBpbmRleCBidWZmZXJcbiAgICAgKiBAbWVtYmVyIHtXZWJHTEJ1ZmZlcn1cbiAgICAgKi9cbiAgICB0aGlzLmluZGV4QnVmZmVyID0gZ2wuY3JlYXRlQnVmZmVyKCk7XG5cbiAgICAvKipcbiAgICAgKiB0b2RvIEBhbHZpblxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLm1vZGUgPSAxO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGFscGhhIG9mIHRoZSBncmFwaGljc1xuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLmFscGhhID0gMTtcblxuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgdGhpcyBncmFwaGljcyBpcyBkaXJ0eSBvciBub3RcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqL1xuICAgIHRoaXMuZGlydHkgPSB0cnVlO1xuXG4gICAgdGhpcy5nbFBvaW50cyA9IG51bGw7XG4gICAgdGhpcy5nbEluZGljZXMgPSBudWxsO1xufVxuXG5XZWJHTEdyYXBoaWNzRGF0YS5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBXZWJHTEdyYXBoaWNzRGF0YTtcbm1vZHVsZS5leHBvcnRzID0gV2ViR0xHcmFwaGljc0RhdGE7XG5cbi8qKlxuICogUmVzZXRzIHRoZSB2ZXJ0aWNlcyBhbmQgdGhlIGluZGljZXNcbiAqL1xuV2ViR0xHcmFwaGljc0RhdGEucHJvdG90eXBlLnJlc2V0ID0gZnVuY3Rpb24gKCkge1xuICAgIHRoaXMucG9pbnRzLmxlbmd0aCA9IDA7XG4gICAgdGhpcy5pbmRpY2VzLmxlbmd0aCA9IDA7XG59O1xuXG4vKipcbiAqIEJpbmRzIHRoZSBidWZmZXJzIGFuZCB1cGxvYWRzIHRoZSBkYXRhXG4gKi9cbldlYkdMR3JhcGhpY3NEYXRhLnByb3RvdHlwZS51cGxvYWQgPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGdsID0gdGhpcy5nbDtcblxuLy8gICAgdGhpcy5sYXN0SW5kZXggPSBncmFwaGljcy5ncmFwaGljc0RhdGEubGVuZ3RoO1xuICAgIHRoaXMuZ2xQb2ludHMgPSBuZXcgRmxvYXQzMkFycmF5KHRoaXMucG9pbnRzKTtcblxuICAgIGdsLmJpbmRCdWZmZXIoZ2wuQVJSQVlfQlVGRkVSLCB0aGlzLmJ1ZmZlcik7XG4gICAgZ2wuYnVmZmVyRGF0YShnbC5BUlJBWV9CVUZGRVIsIHRoaXMuZ2xQb2ludHMsIGdsLlNUQVRJQ19EUkFXKTtcblxuICAgIHRoaXMuZ2xJbmRpY2VzID0gbmV3IFVpbnQxNkFycmF5KHRoaXMuaW5kaWNlcyk7XG5cbiAgICBnbC5iaW5kQnVmZmVyKGdsLkVMRU1FTlRfQVJSQVlfQlVGRkVSLCB0aGlzLmluZGV4QnVmZmVyKTtcbiAgICBnbC5idWZmZXJEYXRhKGdsLkVMRU1FTlRfQVJSQVlfQlVGRkVSLCB0aGlzLmdsSW5kaWNlcywgZ2wuU1RBVElDX0RSQVcpO1xuXG4gICAgdGhpcy5kaXJ0eSA9IGZhbHNlO1xufTtcblxuV2ViR0xHcmFwaGljc0RhdGEucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoKSB7XG4gICAgdGhpcy5jb2xvciA9IG51bGw7XG4gICAgdGhpcy5wb2ludHMgPSBudWxsO1xuICAgIHRoaXMuaW5kaWNlcyA9IG51bGw7XG5cbiAgICB0aGlzLmdsLmRlbGV0ZUJ1ZmZlcih0aGlzLmJ1ZmZlcik7XG4gICAgdGhpcy5nbC5kZWxldGVCdWZmZXIodGhpcy5pbmRleEJ1ZmZlcik7XG4gICAgXG4gICAgdGhpcy5nbCA9IG51bGw7XG5cbiAgICB0aGlzLmJ1ZmZlciA9IG51bGw7XG4gICAgdGhpcy5pbmRleEJ1ZmZlciA9IG51bGw7XG5cbiAgICB0aGlzLmdsUG9pbnRzID0gbnVsbDtcbiAgICB0aGlzLmdsSW5kaWNlcyA9IG51bGw7XG59O1xuIiwidmFyIFNoYWRlciA9IHJlcXVpcmUoJ3BpeGktZ2wtY29yZScpLkdMU2hhZGVyO1xuXG4vKipcbiAqIFRoaXMgc2hhZGVyIGlzIHVzZWQgdG8gZHJhdyBzaW1wbGUgcHJpbWl0aXZlIHNoYXBlcyBmb3Ige0BsaW5rIFBJWEkuR3JhcGhpY3N9LlxuICpcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqIEBleHRlbmRzIFBJWEkuU2hhZGVyXG4gKiBAcGFyYW0gc2hhZGVyTWFuYWdlciB7U2hhZGVyTWFuYWdlcn0gVGhlIHdlYmdsIHNoYWRlciBtYW5hZ2VyIHRoaXMgc2hhZGVyIHdvcmtzIGZvci5cbiAqL1xuZnVuY3Rpb24gUHJpbWl0aXZlU2hhZGVyKGdsKVxue1xuICAgIFNoYWRlci5jYWxsKHRoaXMsXG4gICAgICAgIGdsLFxuICAgICAgICAvLyB2ZXJ0ZXggc2hhZGVyXG4gICAgICAgIFtcbiAgICAgICAgICAgICdhdHRyaWJ1dGUgdmVjMiBhVmVydGV4UG9zaXRpb247JyxcbiAgICAgICAgICAgICdhdHRyaWJ1dGUgdmVjNCBhQ29sb3I7JyxcblxuICAgICAgICAgICAgJ3VuaWZvcm0gbWF0MyB0cmFuc2xhdGlvbk1hdHJpeDsnLFxuICAgICAgICAgICAgJ3VuaWZvcm0gbWF0MyBwcm9qZWN0aW9uTWF0cml4OycsXG5cbiAgICAgICAgICAgICd1bmlmb3JtIGZsb2F0IGFscGhhOycsXG4gICAgICAgICAgICAndW5pZm9ybSBmbG9hdCBmbGlwWTsnLFxuICAgICAgICAgICAgJ3VuaWZvcm0gdmVjMyB0aW50OycsXG5cbiAgICAgICAgICAgICd2YXJ5aW5nIHZlYzQgdkNvbG9yOycsXG5cbiAgICAgICAgICAgICd2b2lkIG1haW4odm9pZCl7JyxcbiAgICAgICAgICAgICcgICBnbF9Qb3NpdGlvbiA9IHZlYzQoKHByb2plY3Rpb25NYXRyaXggKiB0cmFuc2xhdGlvbk1hdHJpeCAqIHZlYzMoYVZlcnRleFBvc2l0aW9uLCAxLjApKS54eSwgMC4wLCAxLjApOycsXG4gICAgICAgICAgICAnICAgdkNvbG9yID0gYUNvbG9yICogdmVjNCh0aW50ICogYWxwaGEsIGFscGhhKTsnLFxuICAgICAgICAgICAgJ30nXG4gICAgICAgIF0uam9pbignXFxuJyksXG4gICAgICAgIC8vIGZyYWdtZW50IHNoYWRlclxuICAgICAgICBbXG4gICAgICAgICAgICAncHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7JyxcblxuICAgICAgICAgICAgJ3ZhcnlpbmcgdmVjNCB2Q29sb3I7JyxcblxuICAgICAgICAgICAgJ3ZvaWQgbWFpbih2b2lkKXsnLFxuICAgICAgICAgICAgJyAgIGdsX0ZyYWdDb2xvciA9IHZDb2xvcjsnLFxuICAgICAgICAgICAgJ30nXG4gICAgICAgIF0uam9pbignXFxuJylcbiAgICApO1xufVxuXG5QcmltaXRpdmVTaGFkZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShTaGFkZXIucHJvdG90eXBlKTtcblByaW1pdGl2ZVNoYWRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBQcmltaXRpdmVTaGFkZXI7XG5cbm1vZHVsZS5leHBvcnRzID0gUHJpbWl0aXZlU2hhZGVyO1xuIiwidmFyIGJ1aWxkTGluZSA9IHJlcXVpcmUoJy4vYnVpbGRMaW5lJyksXG4gICAgdXRpbHMgPSByZXF1aXJlKCcuLi8uLi8uLi91dGlscycpO1xuXG4vKipcbiAqIEJ1aWxkcyBhIGNpcmNsZSB0byBkcmF3XG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSBncmFwaGljc0RhdGEge1BJWEkuR3JhcGhpY3N9IFRoZSBncmFwaGljcyBvYmplY3QgdG8gZHJhd1xuICogQHBhcmFtIHdlYkdMRGF0YSB7b2JqZWN0fSBhbiBvYmplY3QgY29udGFpbmluZyBhbGwgdGhlIHdlYkdMLXNwZWNpZmljIGluZm9ybWF0aW9uIHRvIGNyZWF0ZSB0aGlzIHNoYXBlXG4gKi9cbnZhciBidWlsZENpcmNsZSA9IGZ1bmN0aW9uIChncmFwaGljc0RhdGEsIHdlYkdMRGF0YSlcbntcbiAgICAvLyBuZWVkIHRvIGNvbnZlcnQgcG9pbnRzIHRvIGEgbmljZSByZWd1bGFyIGRhdGFcbiAgICB2YXIgY2lyY2xlRGF0YSA9IGdyYXBoaWNzRGF0YS5zaGFwZTtcbiAgICB2YXIgeCA9IGNpcmNsZURhdGEueDtcbiAgICB2YXIgeSA9IGNpcmNsZURhdGEueTtcbiAgICB2YXIgd2lkdGg7XG4gICAgdmFyIGhlaWdodDtcblxuICAgIC8vIFRPRE8gLSBiaXQgaGFja3k/P1xuICAgIGlmIChncmFwaGljc0RhdGEudHlwZSA9PT0gQ09OU1QuU0hBUEVTLkNJUkMpXG4gICAge1xuICAgICAgICB3aWR0aCA9IGNpcmNsZURhdGEucmFkaXVzO1xuICAgICAgICBoZWlnaHQgPSBjaXJjbGVEYXRhLnJhZGl1cztcbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgd2lkdGggPSBjaXJjbGVEYXRhLndpZHRoO1xuICAgICAgICBoZWlnaHQgPSBjaXJjbGVEYXRhLmhlaWdodDtcbiAgICB9XG5cbiAgICB2YXIgdG90YWxTZWdzID0gTWF0aC5mbG9vcigzMCAqIE1hdGguc3FydChjaXJjbGVEYXRhLnJhZGl1cykpIHx8IE1hdGguZmxvb3IoMTUgKiBNYXRoLnNxcnQoY2lyY2xlRGF0YS53aWR0aCArIGNpcmNsZURhdGEuaGVpZ2h0KSk7XG4gICAgdmFyIHNlZyA9IChNYXRoLlBJICogMikgLyB0b3RhbFNlZ3MgO1xuXG4gICAgdmFyIGkgPSAwO1xuXG4gICAgaWYgKGdyYXBoaWNzRGF0YS5maWxsKVxuICAgIHtcbiAgICAgICAgdmFyIGNvbG9yID0gdXRpbHMuaGV4MnJnYihncmFwaGljc0RhdGEuZmlsbENvbG9yKTtcbiAgICAgICAgdmFyIGFscGhhID0gZ3JhcGhpY3NEYXRhLmZpbGxBbHBoYTtcblxuICAgICAgICB2YXIgciA9IGNvbG9yWzBdICogYWxwaGE7XG4gICAgICAgIHZhciBnID0gY29sb3JbMV0gKiBhbHBoYTtcbiAgICAgICAgdmFyIGIgPSBjb2xvclsyXSAqIGFscGhhO1xuXG4gICAgICAgIHZhciB2ZXJ0cyA9IHdlYkdMRGF0YS5wb2ludHM7XG4gICAgICAgIHZhciBpbmRpY2VzID0gd2ViR0xEYXRhLmluZGljZXM7XG5cbiAgICAgICAgdmFyIHZlY1BvcyA9IHZlcnRzLmxlbmd0aC82O1xuXG4gICAgICAgIGluZGljZXMucHVzaCh2ZWNQb3MpO1xuXG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCB0b3RhbFNlZ3MgKyAxIDsgaSsrKVxuICAgICAgICB7XG4gICAgICAgICAgICB2ZXJ0cy5wdXNoKHgseSwgciwgZywgYiwgYWxwaGEpO1xuXG4gICAgICAgICAgICB2ZXJ0cy5wdXNoKHggKyBNYXRoLnNpbihzZWcgKiBpKSAqIHdpZHRoLFxuICAgICAgICAgICAgICAgICAgICAgICB5ICsgTWF0aC5jb3Moc2VnICogaSkgKiBoZWlnaHQsXG4gICAgICAgICAgICAgICAgICAgICAgIHIsIGcsIGIsIGFscGhhKTtcblxuICAgICAgICAgICAgaW5kaWNlcy5wdXNoKHZlY1BvcysrLCB2ZWNQb3MrKyk7XG4gICAgICAgIH1cblxuICAgICAgICBpbmRpY2VzLnB1c2godmVjUG9zLTEpO1xuICAgIH1cblxuICAgIGlmIChncmFwaGljc0RhdGEubGluZVdpZHRoKVxuICAgIHtcbiAgICAgICAgdmFyIHRlbXBQb2ludHMgPSBncmFwaGljc0RhdGEucG9pbnRzO1xuXG4gICAgICAgIGdyYXBoaWNzRGF0YS5wb2ludHMgPSBbXTtcblxuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgdG90YWxTZWdzICsgMTsgaSsrKVxuICAgICAgICB7XG4gICAgICAgICAgICBncmFwaGljc0RhdGEucG9pbnRzLnB1c2goeCArIE1hdGguc2luKHNlZyAqIGkpICogd2lkdGgsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeSArIE1hdGguY29zKHNlZyAqIGkpICogaGVpZ2h0KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGJ1aWxkTGluZShncmFwaGljc0RhdGEsIHdlYkdMRGF0YSk7XG5cbiAgICAgICAgZ3JhcGhpY3NEYXRhLnBvaW50cyA9IHRlbXBQb2ludHM7XG4gICAgfVxufTtcblxuXG5tb2R1bGUuZXhwb3J0cyA9IGJ1aWxkQ2lyY2xlOyIsInZhciBidWlsZExpbmUgPSByZXF1aXJlKCcuL2J1aWxkTGluZScpLFxuICAgIHV0aWxzID0gcmVxdWlyZSgnLi4vLi4vLi4vdXRpbHMnKTtcbiAgICBcblxuXG4vKipcbiAqIEJ1aWxkcyBhIGNvbXBsZXggcG9seWdvbiB0byBkcmF3XG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSBncmFwaGljc0RhdGEge1BJWEkuR3JhcGhpY3N9IFRoZSBncmFwaGljcyBvYmplY3QgY29udGFpbmluZyBhbGwgdGhlIG5lY2Vzc2FyeSBwcm9wZXJ0aWVzXG4gKiBAcGFyYW0gd2ViR0xEYXRhIHtvYmplY3R9IGFuIG9iamVjdCBjb250YWluaW5nIGFsbCB0aGUgd2ViR0wtc3BlY2lmaWMgaW5mb3JtYXRpb24gdG8gY3JlYXRlIHRoaXMgc2hhcGVcbiAqL1xudmFyIGJ1aWxkQ29tcGxleFBvbHkgPSBmdW5jdGlvbiAoZ3JhcGhpY3NEYXRhLCB3ZWJHTERhdGEpXG57XG4gICAgLy9UT0RPIC0gbm8gbmVlZCB0byBjb3B5IHRoaXMgYXMgaXQgZ2V0cyB0dXJuZWQgaW50byBhIEZMb2F0MzJBcnJheSBhbnl3YXlzLi5cbiAgICB2YXIgcG9pbnRzID0gZ3JhcGhpY3NEYXRhLnBvaW50cy5zbGljZSgpO1xuXG4gICAgaWYgKHBvaW50cy5sZW5ndGggPCA2KVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIGdldCBmaXJzdCBhbmQgbGFzdCBwb2ludC4uIGZpZ3VyZSBvdXQgdGhlIG1pZGRsZSFcbiAgICB2YXIgaW5kaWNlcyA9IHdlYkdMRGF0YS5pbmRpY2VzO1xuICAgIHdlYkdMRGF0YS5wb2ludHMgPSBwb2ludHM7XG4gICAgd2ViR0xEYXRhLmFscGhhID0gZ3JhcGhpY3NEYXRhLmZpbGxBbHBoYTtcbiAgICB3ZWJHTERhdGEuY29sb3IgPSB1dGlscy5oZXgycmdiKGdyYXBoaWNzRGF0YS5maWxsQ29sb3IpO1xuXG4gICAgLy8gY2FsY2xhdGUgdGhlIGJvdW5kcy4uXG4gICAgdmFyIG1pblggPSBJbmZpbml0eTtcbiAgICB2YXIgbWF4WCA9IC1JbmZpbml0eTtcblxuICAgIHZhciBtaW5ZID0gSW5maW5pdHk7XG4gICAgdmFyIG1heFkgPSAtSW5maW5pdHk7XG5cbiAgICB2YXIgeCx5O1xuXG4gICAgLy8gZ2V0IHNpemUuLlxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcG9pbnRzLmxlbmd0aDsgaSs9MilcbiAgICB7XG4gICAgICAgIHggPSBwb2ludHNbaV07XG4gICAgICAgIHkgPSBwb2ludHNbaSsxXTtcblxuICAgICAgICBtaW5YID0geCA8IG1pblggPyB4IDogbWluWDtcbiAgICAgICAgbWF4WCA9IHggPiBtYXhYID8geCA6IG1heFg7XG5cbiAgICAgICAgbWluWSA9IHkgPCBtaW5ZID8geSA6IG1pblk7XG4gICAgICAgIG1heFkgPSB5ID4gbWF4WSA/IHkgOiBtYXhZO1xuICAgIH1cblxuICAgIC8vIGFkZCBhIHF1YWQgdG8gdGhlIGVuZCBjb3MgdGhlcmUgaXMgbm8gcG9pbnQgbWFraW5nIGFub3RoZXIgYnVmZmVyIVxuICAgIHBvaW50cy5wdXNoKG1pblgsIG1pblksXG4gICAgICAgICAgICAgICAgbWF4WCwgbWluWSxcbiAgICAgICAgICAgICAgICBtYXhYLCBtYXhZLFxuICAgICAgICAgICAgICAgIG1pblgsIG1heFkpO1xuXG4gICAgLy8gcHVzaCBhIHF1YWQgb250byB0aGUgZW5kLi5cblxuICAgIC8vVE9ETyAtIHRoaXMgYWludCBuZWVkZWQhXG4gICAgdmFyIGxlbmd0aCA9IHBvaW50cy5sZW5ndGggLyAyO1xuICAgIGZvciAoaSA9IDA7IGkgPCBsZW5ndGg7IGkrKylcbiAgICB7XG4gICAgICAgIGluZGljZXMucHVzaCggaSApO1xuICAgIH1cblxufTtcblxuXG5cbm1vZHVsZS5leHBvcnRzID0gYnVpbGRDb21wbGV4UG9seTsiLCJ2YXIgbWF0aCA9IHJlcXVpcmUoJy4uLy4uLy4uL21hdGgnKSxcbiAgICB1dGlscyA9IHJlcXVpcmUoJy4uLy4uLy4uL3V0aWxzJyk7XG5cbi8qKlxuICogQnVpbGRzIGEgbGluZSB0byBkcmF3XG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSBncmFwaGljc0RhdGEge1BJWEkuR3JhcGhpY3N9IFRoZSBncmFwaGljcyBvYmplY3QgY29udGFpbmluZyBhbGwgdGhlIG5lY2Vzc2FyeSBwcm9wZXJ0aWVzXG4gKiBAcGFyYW0gd2ViR0xEYXRhIHtvYmplY3R9IGFuIG9iamVjdCBjb250YWluaW5nIGFsbCB0aGUgd2ViR0wtc3BlY2lmaWMgaW5mb3JtYXRpb24gdG8gY3JlYXRlIHRoaXMgc2hhcGVcbiAqL1xudmFyIGJ1aWxkTGluZSA9IGZ1bmN0aW9uIChncmFwaGljc0RhdGEsIHdlYkdMRGF0YSlcbntcbiAgICAvLyBUT0RPIE9QVElNSVNFIVxuICAgIHZhciBpID0gMDtcbiAgICB2YXIgcG9pbnRzID0gZ3JhcGhpY3NEYXRhLnBvaW50cztcblxuICAgIGlmIChwb2ludHMubGVuZ3RoID09PSAwKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICAvLyBpZiB0aGUgbGluZSB3aWR0aCBpcyBhbiBvZGQgbnVtYmVyIGFkZCAwLjUgdG8gYWxpZ24gdG8gYSB3aG9sZSBwaXhlbFxuICAgIC8vIGNvbW1lbnRpbmcgdGhpcyBvdXQgZml4ZXMgIzcxMSBhbmQgIzE2MjBcbiAgICAvLyBpZiAoZ3JhcGhpY3NEYXRhLmxpbmVXaWR0aCUyKVxuICAgIC8vIHtcbiAgICAvLyAgICAgZm9yIChpID0gMDsgaSA8IHBvaW50cy5sZW5ndGg7IGkrKylcbiAgICAvLyAgICAge1xuICAgIC8vICAgICAgICAgcG9pbnRzW2ldICs9IDAuNTtcbiAgICAvLyAgICAgfVxuICAgIC8vIH1cblxuICAgIC8vIGdldCBmaXJzdCBhbmQgbGFzdCBwb2ludC4uIGZpZ3VyZSBvdXQgdGhlIG1pZGRsZSFcbiAgICB2YXIgZmlyc3RQb2ludCA9IG5ldyBtYXRoLlBvaW50KHBvaW50c1swXSwgcG9pbnRzWzFdKTtcbiAgICB2YXIgbGFzdFBvaW50ID0gbmV3IG1hdGguUG9pbnQocG9pbnRzW3BvaW50cy5sZW5ndGggLSAyXSwgcG9pbnRzW3BvaW50cy5sZW5ndGggLSAxXSk7XG5cbiAgICAvLyBpZiB0aGUgZmlyc3QgcG9pbnQgaXMgdGhlIGxhc3QgcG9pbnQgLSBnb25uYSBoYXZlIGlzc3VlcyA6KVxuICAgIGlmIChmaXJzdFBvaW50LnggPT09IGxhc3RQb2ludC54ICYmIGZpcnN0UG9pbnQueSA9PT0gbGFzdFBvaW50LnkpXG4gICAge1xuICAgICAgICAvLyBuZWVkIHRvIGNsb25lIGFzIHdlIGFyZSBnb2luZyB0byBzbGlnaHRseSBtb2RpZnkgdGhlIHNoYXBlLi5cbiAgICAgICAgcG9pbnRzID0gcG9pbnRzLnNsaWNlKCk7XG5cbiAgICAgICAgcG9pbnRzLnBvcCgpO1xuICAgICAgICBwb2ludHMucG9wKCk7XG5cbiAgICAgICAgbGFzdFBvaW50ID0gbmV3IG1hdGguUG9pbnQocG9pbnRzW3BvaW50cy5sZW5ndGggLSAyXSwgcG9pbnRzW3BvaW50cy5sZW5ndGggLSAxXSk7XG5cbiAgICAgICAgdmFyIG1pZFBvaW50WCA9IGxhc3RQb2ludC54ICsgKGZpcnN0UG9pbnQueCAtIGxhc3RQb2ludC54KSAqMC41O1xuICAgICAgICB2YXIgbWlkUG9pbnRZID0gbGFzdFBvaW50LnkgKyAoZmlyc3RQb2ludC55IC0gbGFzdFBvaW50LnkpICowLjU7XG5cbiAgICAgICAgcG9pbnRzLnVuc2hpZnQobWlkUG9pbnRYLCBtaWRQb2ludFkpO1xuICAgICAgICBwb2ludHMucHVzaChtaWRQb2ludFgsIG1pZFBvaW50WSk7XG4gICAgfVxuXG4gICAgdmFyIHZlcnRzID0gd2ViR0xEYXRhLnBvaW50cztcbiAgICB2YXIgaW5kaWNlcyA9IHdlYkdMRGF0YS5pbmRpY2VzO1xuICAgIHZhciBsZW5ndGggPSBwb2ludHMubGVuZ3RoIC8gMjtcbiAgICB2YXIgaW5kZXhDb3VudCA9IHBvaW50cy5sZW5ndGg7XG4gICAgdmFyIGluZGV4U3RhcnQgPSB2ZXJ0cy5sZW5ndGgvNjtcblxuICAgIC8vIERSQVcgdGhlIExpbmVcbiAgICB2YXIgd2lkdGggPSBncmFwaGljc0RhdGEubGluZVdpZHRoIC8gMjtcblxuICAgIC8vIHNvcnQgY29sb3JcbiAgICB2YXIgY29sb3IgPSB1dGlscy5oZXgycmdiKGdyYXBoaWNzRGF0YS5saW5lQ29sb3IpO1xuICAgIHZhciBhbHBoYSA9IGdyYXBoaWNzRGF0YS5saW5lQWxwaGE7XG4gICAgdmFyIHIgPSBjb2xvclswXSAqIGFscGhhO1xuICAgIHZhciBnID0gY29sb3JbMV0gKiBhbHBoYTtcbiAgICB2YXIgYiA9IGNvbG9yWzJdICogYWxwaGE7XG5cbiAgICB2YXIgcHgsIHB5LCBwMXgsIHAxeSwgcDJ4LCBwMnksIHAzeCwgcDN5O1xuICAgIHZhciBwZXJweCwgcGVycHksIHBlcnAyeCwgcGVycDJ5LCBwZXJwM3gsIHBlcnAzeTtcbiAgICB2YXIgYTEsIGIxLCBjMSwgYTIsIGIyLCBjMjtcbiAgICB2YXIgZGVub20sIHBkaXN0LCBkaXN0O1xuXG4gICAgcDF4ID0gcG9pbnRzWzBdO1xuICAgIHAxeSA9IHBvaW50c1sxXTtcblxuICAgIHAyeCA9IHBvaW50c1syXTtcbiAgICBwMnkgPSBwb2ludHNbM107XG5cbiAgICBwZXJweCA9IC0ocDF5IC0gcDJ5KTtcbiAgICBwZXJweSA9ICBwMXggLSBwMng7XG5cbiAgICBkaXN0ID0gTWF0aC5zcXJ0KHBlcnB4KnBlcnB4ICsgcGVycHkqcGVycHkpO1xuXG4gICAgcGVycHggLz0gZGlzdDtcbiAgICBwZXJweSAvPSBkaXN0O1xuICAgIHBlcnB4ICo9IHdpZHRoO1xuICAgIHBlcnB5ICo9IHdpZHRoO1xuXG4gICAgLy8gc3RhcnRcbiAgICB2ZXJ0cy5wdXNoKHAxeCAtIHBlcnB4ICwgcDF5IC0gcGVycHksXG4gICAgICAgICAgICAgICAgciwgZywgYiwgYWxwaGEpO1xuXG4gICAgdmVydHMucHVzaChwMXggKyBwZXJweCAsIHAxeSArIHBlcnB5LFxuICAgICAgICAgICAgICAgIHIsIGcsIGIsIGFscGhhKTtcblxuICAgIGZvciAoaSA9IDE7IGkgPCBsZW5ndGgtMTsgaSsrKVxuICAgIHtcbiAgICAgICAgcDF4ID0gcG9pbnRzWyhpLTEpKjJdO1xuICAgICAgICBwMXkgPSBwb2ludHNbKGktMSkqMiArIDFdO1xuXG4gICAgICAgIHAyeCA9IHBvaW50c1soaSkqMl07XG4gICAgICAgIHAyeSA9IHBvaW50c1soaSkqMiArIDFdO1xuXG4gICAgICAgIHAzeCA9IHBvaW50c1soaSsxKSoyXTtcbiAgICAgICAgcDN5ID0gcG9pbnRzWyhpKzEpKjIgKyAxXTtcblxuICAgICAgICBwZXJweCA9IC0ocDF5IC0gcDJ5KTtcbiAgICAgICAgcGVycHkgPSBwMXggLSBwMng7XG5cbiAgICAgICAgZGlzdCA9IE1hdGguc3FydChwZXJweCpwZXJweCArIHBlcnB5KnBlcnB5KTtcbiAgICAgICAgcGVycHggLz0gZGlzdDtcbiAgICAgICAgcGVycHkgLz0gZGlzdDtcbiAgICAgICAgcGVycHggKj0gd2lkdGg7XG4gICAgICAgIHBlcnB5ICo9IHdpZHRoO1xuXG4gICAgICAgIHBlcnAyeCA9IC0ocDJ5IC0gcDN5KTtcbiAgICAgICAgcGVycDJ5ID0gcDJ4IC0gcDN4O1xuXG4gICAgICAgIGRpc3QgPSBNYXRoLnNxcnQocGVycDJ4KnBlcnAyeCArIHBlcnAyeSpwZXJwMnkpO1xuICAgICAgICBwZXJwMnggLz0gZGlzdDtcbiAgICAgICAgcGVycDJ5IC89IGRpc3Q7XG4gICAgICAgIHBlcnAyeCAqPSB3aWR0aDtcbiAgICAgICAgcGVycDJ5ICo9IHdpZHRoO1xuXG4gICAgICAgIGExID0gKC1wZXJweSArIHAxeSkgLSAoLXBlcnB5ICsgcDJ5KTtcbiAgICAgICAgYjEgPSAoLXBlcnB4ICsgcDJ4KSAtICgtcGVycHggKyBwMXgpO1xuICAgICAgICBjMSA9ICgtcGVycHggKyBwMXgpICogKC1wZXJweSArIHAyeSkgLSAoLXBlcnB4ICsgcDJ4KSAqICgtcGVycHkgKyBwMXkpO1xuICAgICAgICBhMiA9ICgtcGVycDJ5ICsgcDN5KSAtICgtcGVycDJ5ICsgcDJ5KTtcbiAgICAgICAgYjIgPSAoLXBlcnAyeCArIHAyeCkgLSAoLXBlcnAyeCArIHAzeCk7XG4gICAgICAgIGMyID0gKC1wZXJwMnggKyBwM3gpICogKC1wZXJwMnkgKyBwMnkpIC0gKC1wZXJwMnggKyBwMngpICogKC1wZXJwMnkgKyBwM3kpO1xuXG4gICAgICAgIGRlbm9tID0gYTEqYjIgLSBhMipiMTtcblxuICAgICAgICBpZiAoTWF0aC5hYnMoZGVub20pIDwgMC4xIClcbiAgICAgICAge1xuXG4gICAgICAgICAgICBkZW5vbSs9MTAuMTtcbiAgICAgICAgICAgIHZlcnRzLnB1c2gocDJ4IC0gcGVycHggLCBwMnkgLSBwZXJweSxcbiAgICAgICAgICAgICAgICByLCBnLCBiLCBhbHBoYSk7XG5cbiAgICAgICAgICAgIHZlcnRzLnB1c2gocDJ4ICsgcGVycHggLCBwMnkgKyBwZXJweSxcbiAgICAgICAgICAgICAgICByLCBnLCBiLCBhbHBoYSk7XG5cbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgcHggPSAoYjEqYzIgLSBiMipjMSkvZGVub207XG4gICAgICAgIHB5ID0gKGEyKmMxIC0gYTEqYzIpL2Rlbm9tO1xuXG5cbiAgICAgICAgcGRpc3QgPSAocHggLXAyeCkgKiAocHggLXAyeCkgKyAocHkgLXAyeSkgKiAocHkgLXAyeSk7XG5cblxuICAgICAgICBpZiAocGRpc3QgPiAxNDAgKiAxNDApXG4gICAgICAgIHtcbiAgICAgICAgICAgIHBlcnAzeCA9IHBlcnB4IC0gcGVycDJ4O1xuICAgICAgICAgICAgcGVycDN5ID0gcGVycHkgLSBwZXJwMnk7XG5cbiAgICAgICAgICAgIGRpc3QgPSBNYXRoLnNxcnQocGVycDN4KnBlcnAzeCArIHBlcnAzeSpwZXJwM3kpO1xuICAgICAgICAgICAgcGVycDN4IC89IGRpc3Q7XG4gICAgICAgICAgICBwZXJwM3kgLz0gZGlzdDtcbiAgICAgICAgICAgIHBlcnAzeCAqPSB3aWR0aDtcbiAgICAgICAgICAgIHBlcnAzeSAqPSB3aWR0aDtcblxuICAgICAgICAgICAgdmVydHMucHVzaChwMnggLSBwZXJwM3gsIHAyeSAtcGVycDN5KTtcbiAgICAgICAgICAgIHZlcnRzLnB1c2gociwgZywgYiwgYWxwaGEpO1xuXG4gICAgICAgICAgICB2ZXJ0cy5wdXNoKHAyeCArIHBlcnAzeCwgcDJ5ICtwZXJwM3kpO1xuICAgICAgICAgICAgdmVydHMucHVzaChyLCBnLCBiLCBhbHBoYSk7XG5cbiAgICAgICAgICAgIHZlcnRzLnB1c2gocDJ4IC0gcGVycDN4LCBwMnkgLXBlcnAzeSk7XG4gICAgICAgICAgICB2ZXJ0cy5wdXNoKHIsIGcsIGIsIGFscGhhKTtcblxuICAgICAgICAgICAgaW5kZXhDb3VudCsrO1xuICAgICAgICB9XG4gICAgICAgIGVsc2VcbiAgICAgICAge1xuXG4gICAgICAgICAgICB2ZXJ0cy5wdXNoKHB4ICwgcHkpO1xuICAgICAgICAgICAgdmVydHMucHVzaChyLCBnLCBiLCBhbHBoYSk7XG5cbiAgICAgICAgICAgIHZlcnRzLnB1c2gocDJ4IC0gKHB4LXAyeCksIHAyeSAtIChweSAtIHAyeSkpO1xuICAgICAgICAgICAgdmVydHMucHVzaChyLCBnLCBiLCBhbHBoYSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwMXggPSBwb2ludHNbKGxlbmd0aC0yKSoyXTtcbiAgICBwMXkgPSBwb2ludHNbKGxlbmd0aC0yKSoyICsgMV07XG5cbiAgICBwMnggPSBwb2ludHNbKGxlbmd0aC0xKSoyXTtcbiAgICBwMnkgPSBwb2ludHNbKGxlbmd0aC0xKSoyICsgMV07XG5cbiAgICBwZXJweCA9IC0ocDF5IC0gcDJ5KTtcbiAgICBwZXJweSA9IHAxeCAtIHAyeDtcblxuICAgIGRpc3QgPSBNYXRoLnNxcnQocGVycHgqcGVycHggKyBwZXJweSpwZXJweSk7XG4gICAgcGVycHggLz0gZGlzdDtcbiAgICBwZXJweSAvPSBkaXN0O1xuICAgIHBlcnB4ICo9IHdpZHRoO1xuICAgIHBlcnB5ICo9IHdpZHRoO1xuXG4gICAgdmVydHMucHVzaChwMnggLSBwZXJweCAsIHAyeSAtIHBlcnB5KTtcbiAgICB2ZXJ0cy5wdXNoKHIsIGcsIGIsIGFscGhhKTtcblxuICAgIHZlcnRzLnB1c2gocDJ4ICsgcGVycHggLCBwMnkgKyBwZXJweSk7XG4gICAgdmVydHMucHVzaChyLCBnLCBiLCBhbHBoYSk7XG5cbiAgICBpbmRpY2VzLnB1c2goaW5kZXhTdGFydCk7XG5cbiAgICBmb3IgKGkgPSAwOyBpIDwgaW5kZXhDb3VudDsgaSsrKVxuICAgIHtcbiAgICAgICAgaW5kaWNlcy5wdXNoKGluZGV4U3RhcnQrKyk7XG4gICAgfVxuXG4gICAgaW5kaWNlcy5wdXNoKGluZGV4U3RhcnQtMSk7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGJ1aWxkTGluZTsiLCJ2YXIgdXRpbHMgPSByZXF1aXJlKCcuLi8uLi8uLi91dGlscycpO1xuXG4vKipcbiAqIEJ1aWxkcyBhIHBvbHlnb24gdG8gZHJhd1xuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0gZ3JhcGhpY3NEYXRhIHtQSVhJLldlYkdMR3JhcGhpY3NEYXRhfSBUaGUgZ3JhcGhpY3Mgb2JqZWN0IGNvbnRhaW5pbmcgYWxsIHRoZSBuZWNlc3NhcnkgcHJvcGVydGllc1xuICogQHBhcmFtIHdlYkdMRGF0YSB7b2JqZWN0fSBhbiBvYmplY3QgY29udGFpbmluZyBhbGwgdGhlIHdlYkdMLXNwZWNpZmljIGluZm9ybWF0aW9uIHRvIGNyZWF0ZSB0aGlzIHNoYXBlXG4gKi9cbnZhciBidWlsZFBvbHkgPSBmdW5jdGlvbiAoZ3JhcGhpY3NEYXRhLCB3ZWJHTERhdGEpXG57XG4gICAgdmFyIHBvaW50cyA9IGdyYXBoaWNzRGF0YS5wb2ludHM7XG5cbiAgICBpZiAocG9pbnRzLmxlbmd0aCA8IDYpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gZ2V0IGZpcnN0IGFuZCBsYXN0IHBvaW50Li4gZmlndXJlIG91dCB0aGUgbWlkZGxlIVxuICAgIHZhciB2ZXJ0cyA9IHdlYkdMRGF0YS5wb2ludHM7XG4gICAgdmFyIGluZGljZXMgPSB3ZWJHTERhdGEuaW5kaWNlcztcblxuICAgIHZhciBsZW5ndGggPSBwb2ludHMubGVuZ3RoIC8gMjtcblxuICAgIC8vIHNvcnQgY29sb3JcbiAgICB2YXIgY29sb3IgPSB1dGlscy5oZXgycmdiKGdyYXBoaWNzRGF0YS5maWxsQ29sb3IpO1xuICAgIHZhciBhbHBoYSA9IGdyYXBoaWNzRGF0YS5maWxsQWxwaGE7XG4gICAgdmFyIHIgPSBjb2xvclswXSAqIGFscGhhO1xuICAgIHZhciBnID0gY29sb3JbMV0gKiBhbHBoYTtcbiAgICB2YXIgYiA9IGNvbG9yWzJdICogYWxwaGE7XG5cbiAgICB2YXIgdHJpYW5nbGVzID0gZWFyY3V0KHBvaW50cywgbnVsbCwgMik7XG5cbiAgICBpZiAoIXRyaWFuZ2xlcykge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgdmFyIHZlcnRQb3MgPSB2ZXJ0cy5sZW5ndGggLyA2O1xuXG4gICAgdmFyIGkgPSAwO1xuXG4gICAgZm9yIChpID0gMDsgaSA8IHRyaWFuZ2xlcy5sZW5ndGg7IGkrPTMpXG4gICAge1xuICAgICAgICBpbmRpY2VzLnB1c2godHJpYW5nbGVzW2ldICsgdmVydFBvcyk7XG4gICAgICAgIGluZGljZXMucHVzaCh0cmlhbmdsZXNbaV0gKyB2ZXJ0UG9zKTtcbiAgICAgICAgaW5kaWNlcy5wdXNoKHRyaWFuZ2xlc1tpKzFdICsgdmVydFBvcyk7XG4gICAgICAgIGluZGljZXMucHVzaCh0cmlhbmdsZXNbaSsyXSArdmVydFBvcyk7XG4gICAgICAgIGluZGljZXMucHVzaCh0cmlhbmdsZXNbaSsyXSArIHZlcnRQb3MpO1xuICAgIH1cblxuICAgIGZvciAoaSA9IDA7IGkgPCBsZW5ndGg7IGkrKylcbiAgICB7XG4gICAgICAgIHZlcnRzLnB1c2gocG9pbnRzW2kgKiAyXSwgcG9pbnRzW2kgKiAyICsgMV0sXG4gICAgICAgICAgICAgICAgICAgciwgZywgYiwgYWxwaGEpO1xuICAgIH1cblxuICAgIHJldHVybiB0cnVlO1xufTtcblxuXG5tb2R1bGUuZXhwb3J0cyA9IGJ1aWxkUG9seTtcbiIsInZhciBidWlsZExpbmUgPSByZXF1aXJlKCcuL2J1aWxkTGluZScpLFxuICAgIHV0aWxzID0gcmVxdWlyZSgnLi4vLi4vLi4vdXRpbHMnKTtcblxuLyoqXG4gKiBCdWlsZHMgYSByZWN0YW5nbGUgdG8gZHJhd1xuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0gZ3JhcGhpY3NEYXRhIHtQSVhJLkdyYXBoaWNzfSBUaGUgZ3JhcGhpY3Mgb2JqZWN0IGNvbnRhaW5pbmcgYWxsIHRoZSBuZWNlc3NhcnkgcHJvcGVydGllc1xuICogQHBhcmFtIHdlYkdMRGF0YSB7b2JqZWN0fSBhbiBvYmplY3QgY29udGFpbmluZyBhbGwgdGhlIHdlYkdMLXNwZWNpZmljIGluZm9ybWF0aW9uIHRvIGNyZWF0ZSB0aGlzIHNoYXBlXG4gKi9cbnZhciBidWlsZFJlY3RhbmdsZSA9IGZ1bmN0aW9uIChncmFwaGljc0RhdGEsIHdlYkdMRGF0YSlcbntcbiAgICAvLyAtLS0gLy9cbiAgICAvLyBuZWVkIHRvIGNvbnZlcnQgcG9pbnRzIHRvIGEgbmljZSByZWd1bGFyIGRhdGFcbiAgICAvL1xuICAgIHZhciByZWN0RGF0YSA9IGdyYXBoaWNzRGF0YS5zaGFwZTtcbiAgICB2YXIgeCA9IHJlY3REYXRhLng7XG4gICAgdmFyIHkgPSByZWN0RGF0YS55O1xuICAgIHZhciB3aWR0aCA9IHJlY3REYXRhLndpZHRoO1xuICAgIHZhciBoZWlnaHQgPSByZWN0RGF0YS5oZWlnaHQ7XG5cbiAgICBpZiAoZ3JhcGhpY3NEYXRhLmZpbGwpXG4gICAge1xuICAgICAgICB2YXIgY29sb3IgPSB1dGlscy5oZXgycmdiKGdyYXBoaWNzRGF0YS5maWxsQ29sb3IpO1xuICAgICAgICB2YXIgYWxwaGEgPSBncmFwaGljc0RhdGEuZmlsbEFscGhhO1xuXG4gICAgICAgIHZhciByID0gY29sb3JbMF0gKiBhbHBoYTtcbiAgICAgICAgdmFyIGcgPSBjb2xvclsxXSAqIGFscGhhO1xuICAgICAgICB2YXIgYiA9IGNvbG9yWzJdICogYWxwaGE7XG5cbiAgICAgICAgdmFyIHZlcnRzID0gd2ViR0xEYXRhLnBvaW50cztcbiAgICAgICAgdmFyIGluZGljZXMgPSB3ZWJHTERhdGEuaW5kaWNlcztcblxuICAgICAgICB2YXIgdmVydFBvcyA9IHZlcnRzLmxlbmd0aC82O1xuXG4gICAgICAgIC8vIHN0YXJ0XG4gICAgICAgIHZlcnRzLnB1c2goeCwgeSk7XG4gICAgICAgIHZlcnRzLnB1c2gociwgZywgYiwgYWxwaGEpO1xuXG4gICAgICAgIHZlcnRzLnB1c2goeCArIHdpZHRoLCB5KTtcbiAgICAgICAgdmVydHMucHVzaChyLCBnLCBiLCBhbHBoYSk7XG5cbiAgICAgICAgdmVydHMucHVzaCh4ICwgeSArIGhlaWdodCk7XG4gICAgICAgIHZlcnRzLnB1c2gociwgZywgYiwgYWxwaGEpO1xuXG4gICAgICAgIHZlcnRzLnB1c2goeCArIHdpZHRoLCB5ICsgaGVpZ2h0KTtcbiAgICAgICAgdmVydHMucHVzaChyLCBnLCBiLCBhbHBoYSk7XG5cbiAgICAgICAgLy8gaW5zZXJ0IDIgZGVhZCB0cmlhbmdsZXMuLlxuICAgICAgICBpbmRpY2VzLnB1c2godmVydFBvcywgdmVydFBvcywgdmVydFBvcysxLCB2ZXJ0UG9zKzIsIHZlcnRQb3MrMywgdmVydFBvcyszKTtcbiAgICB9XG5cbiAgICBpZiAoZ3JhcGhpY3NEYXRhLmxpbmVXaWR0aClcbiAgICB7XG4gICAgICAgIHZhciB0ZW1wUG9pbnRzID0gZ3JhcGhpY3NEYXRhLnBvaW50cztcblxuICAgICAgICBncmFwaGljc0RhdGEucG9pbnRzID0gW3gsIHksXG4gICAgICAgICAgICAgICAgICB4ICsgd2lkdGgsIHksXG4gICAgICAgICAgICAgICAgICB4ICsgd2lkdGgsIHkgKyBoZWlnaHQsXG4gICAgICAgICAgICAgICAgICB4LCB5ICsgaGVpZ2h0LFxuICAgICAgICAgICAgICAgICAgeCwgeV07XG5cblxuICAgICAgICBidWlsZExpbmUoZ3JhcGhpY3NEYXRhLCB3ZWJHTERhdGEpO1xuXG4gICAgICAgIGdyYXBoaWNzRGF0YS5wb2ludHMgPSB0ZW1wUG9pbnRzO1xuICAgIH1cbn07XG5cbm1vZHVsZS5leHBvcnRzID0gYnVpbGRSZWN0YW5nbGU7IiwidmFyIGJ1aWxkTGluZSA9IHJlcXVpcmUoJy4vYnVpbGRMaW5lJyksXG4gICAgdXRpbHMgPSByZXF1aXJlKCcuLi8uLi8uLi91dGlscycpO1xuICAgIFxuLyoqXG4gKiBCdWlsZHMgYSByb3VuZGVkIHJlY3RhbmdsZSB0byBkcmF3XG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSBncmFwaGljc0RhdGEge1BJWEkuR3JhcGhpY3N9IFRoZSBncmFwaGljcyBvYmplY3QgY29udGFpbmluZyBhbGwgdGhlIG5lY2Vzc2FyeSBwcm9wZXJ0aWVzXG4gKiBAcGFyYW0gd2ViR0xEYXRhIHtvYmplY3R9IGFuIG9iamVjdCBjb250YWluaW5nIGFsbCB0aGUgd2ViR0wtc3BlY2lmaWMgaW5mb3JtYXRpb24gdG8gY3JlYXRlIHRoaXMgc2hhcGVcbiAqL1xuYnVpbGRSb3VuZGVkUmVjdGFuZ2xlID0gZnVuY3Rpb24gKGdyYXBoaWNzRGF0YSwgd2ViR0xEYXRhKVxue1xuICAgIHZhciBycmVjdERhdGEgPSBncmFwaGljc0RhdGEuc2hhcGU7XG4gICAgdmFyIHggPSBycmVjdERhdGEueDtcbiAgICB2YXIgeSA9IHJyZWN0RGF0YS55O1xuICAgIHZhciB3aWR0aCA9IHJyZWN0RGF0YS53aWR0aDtcbiAgICB2YXIgaGVpZ2h0ID0gcnJlY3REYXRhLmhlaWdodDtcblxuICAgIHZhciByYWRpdXMgPSBycmVjdERhdGEucmFkaXVzO1xuXG4gICAgdmFyIHJlY1BvaW50cyA9IFtdO1xuICAgIHJlY1BvaW50cy5wdXNoKHgsIHkgKyByYWRpdXMpO1xuICAgIHRoaXMucXVhZHJhdGljQmV6aWVyQ3VydmUoeCwgeSArIGhlaWdodCAtIHJhZGl1cywgeCwgeSArIGhlaWdodCwgeCArIHJhZGl1cywgeSArIGhlaWdodCwgcmVjUG9pbnRzKTtcbiAgICB0aGlzLnF1YWRyYXRpY0JlemllckN1cnZlKHggKyB3aWR0aCAtIHJhZGl1cywgeSArIGhlaWdodCwgeCArIHdpZHRoLCB5ICsgaGVpZ2h0LCB4ICsgd2lkdGgsIHkgKyBoZWlnaHQgLSByYWRpdXMsIHJlY1BvaW50cyk7XG4gICAgdGhpcy5xdWFkcmF0aWNCZXppZXJDdXJ2ZSh4ICsgd2lkdGgsIHkgKyByYWRpdXMsIHggKyB3aWR0aCwgeSwgeCArIHdpZHRoIC0gcmFkaXVzLCB5LCByZWNQb2ludHMpO1xuICAgIHRoaXMucXVhZHJhdGljQmV6aWVyQ3VydmUoeCArIHJhZGl1cywgeSwgeCwgeSwgeCwgeSArIHJhZGl1cyArIDAuMDAwMDAwMDAwMSwgcmVjUG9pbnRzKTtcblxuICAgIC8vIHRoaXMgdGlueSBudW1iZXIgZGVhbHMgd2l0aCB0aGUgaXNzdWUgdGhhdCBvY2N1cnMgd2hlbiBwb2ludHMgb3ZlcmxhcCBhbmQgZWFyY3V0IGZhaWxzIHRvIHRyaWFuZ3VsYXRlIHRoZSBpdGVtLlxuICAgIC8vIFRPRE8gLSBmaXggdGhpcyBwcm9wZXJseSwgdGhpcyBpcyBub3QgdmVyeSBlbGVnYW50Li4gYnV0IGl0IHdvcmtzIGZvciBub3cuXG5cbiAgICBpZiAoZ3JhcGhpY3NEYXRhLmZpbGwpXG4gICAge1xuICAgICAgICB2YXIgY29sb3IgPSB1dGlscy5oZXgycmdiKGdyYXBoaWNzRGF0YS5maWxsQ29sb3IpO1xuICAgICAgICB2YXIgYWxwaGEgPSBncmFwaGljc0RhdGEuZmlsbEFscGhhO1xuXG4gICAgICAgIHZhciByID0gY29sb3JbMF0gKiBhbHBoYTtcbiAgICAgICAgdmFyIGcgPSBjb2xvclsxXSAqIGFscGhhO1xuICAgICAgICB2YXIgYiA9IGNvbG9yWzJdICogYWxwaGE7XG5cbiAgICAgICAgdmFyIHZlcnRzID0gd2ViR0xEYXRhLnBvaW50cztcbiAgICAgICAgdmFyIGluZGljZXMgPSB3ZWJHTERhdGEuaW5kaWNlcztcblxuICAgICAgICB2YXIgdmVjUG9zID0gdmVydHMubGVuZ3RoLzY7XG5cbiAgICAgICAgdmFyIHRyaWFuZ2xlcyA9IGVhcmN1dChyZWNQb2ludHMsIG51bGwsIDIpO1xuXG4gICAgICAgIHZhciBpID0gMDtcbiAgICAgICAgZm9yIChpID0gMDsgaSA8IHRyaWFuZ2xlcy5sZW5ndGg7IGkrPTMpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGluZGljZXMucHVzaCh0cmlhbmdsZXNbaV0gKyB2ZWNQb3MpO1xuICAgICAgICAgICAgaW5kaWNlcy5wdXNoKHRyaWFuZ2xlc1tpXSArIHZlY1Bvcyk7XG4gICAgICAgICAgICBpbmRpY2VzLnB1c2godHJpYW5nbGVzW2krMV0gKyB2ZWNQb3MpO1xuICAgICAgICAgICAgaW5kaWNlcy5wdXNoKHRyaWFuZ2xlc1tpKzJdICsgdmVjUG9zKTtcbiAgICAgICAgICAgIGluZGljZXMucHVzaCh0cmlhbmdsZXNbaSsyXSArIHZlY1Bvcyk7XG4gICAgICAgIH1cblxuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgcmVjUG9pbnRzLmxlbmd0aDsgaSsrKVxuICAgICAgICB7XG4gICAgICAgICAgICB2ZXJ0cy5wdXNoKHJlY1BvaW50c1tpXSwgcmVjUG9pbnRzWysraV0sIHIsIGcsIGIsIGFscGhhKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGlmIChncmFwaGljc0RhdGEubGluZVdpZHRoKVxuICAgIHtcbiAgICAgICAgdmFyIHRlbXBQb2ludHMgPSBncmFwaGljc0RhdGEucG9pbnRzO1xuXG4gICAgICAgIGdyYXBoaWNzRGF0YS5wb2ludHMgPSByZWNQb2ludHM7XG5cbiAgICAgICAgdGhpcy5idWlsZExpbmUoZ3JhcGhpY3NEYXRhLCB3ZWJHTERhdGEpO1xuXG4gICAgICAgIGdyYXBoaWNzRGF0YS5wb2ludHMgPSB0ZW1wUG9pbnRzO1xuICAgIH1cbn07XG5cbi8qKlxuICogQ2FsY3VsYXRlIHRoZSBwb2ludHMgZm9yIGEgcXVhZHJhdGljIGJlemllciBjdXJ2ZS4gKGhlbHBlciBmdW5jdGlvbi4uKVxuICogQmFzZWQgb246IGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vcXVlc3Rpb25zLzc4NTA5Ny9ob3ctZG8taS1pbXBsZW1lbnQtYS1iZXppZXItY3VydmUtaW4tY1xuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0gZnJvbVgge251bWJlcn0gT3JpZ2luIHBvaW50IHhcbiAqIEBwYXJhbSBmcm9tWSB7bnVtYmVyfSBPcmlnaW4gcG9pbnQgeFxuICogQHBhcmFtIGNwWCB7bnVtYmVyfSBDb250cm9sIHBvaW50IHhcbiAqIEBwYXJhbSBjcFkge251bWJlcn0gQ29udHJvbCBwb2ludCB5XG4gKiBAcGFyYW0gdG9YIHtudW1iZXJ9IERlc3RpbmF0aW9uIHBvaW50IHhcbiAqIEBwYXJhbSB0b1kge251bWJlcn0gRGVzdGluYXRpb24gcG9pbnQgeVxuICogQHBhcmFtIFtvdXRdIHtudW1iZXJbXX0gVGhlIG91dHB1dCBhcnJheSB0byBhZGQgcG9pbnRzIGludG8uIElmIG5vdCBwYXNzZWQsIGEgbmV3IGFycmF5IGlzIGNyZWF0ZWQuXG4gKiBAcmV0dXJuIHtudW1iZXJbXX0gYW4gYXJyYXkgb2YgcG9pbnRzXG4gKi9cbnF1YWRyYXRpY0JlemllckN1cnZlID0gZnVuY3Rpb24gKGZyb21YLCBmcm9tWSwgY3BYLCBjcFksIHRvWCwgdG9ZLCBvdXQpXG57XG4gICAgdmFyIHhhLFxuICAgICAgICB5YSxcbiAgICAgICAgeGIsXG4gICAgICAgIHliLFxuICAgICAgICB4LFxuICAgICAgICB5LFxuICAgICAgICBuID0gMjAsXG4gICAgICAgIHBvaW50cyA9IG91dCB8fCBbXTtcblxuICAgIGZ1bmN0aW9uIGdldFB0KG4xICwgbjIsIHBlcmMpIHtcbiAgICAgICAgdmFyIGRpZmYgPSBuMiAtIG4xO1xuXG4gICAgICAgIHJldHVybiBuMSArICggZGlmZiAqIHBlcmMgKTtcbiAgICB9XG5cbiAgICB2YXIgaiA9IDA7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPD0gbjsgaSsrICkge1xuICAgICAgICBqID0gaSAvIG47XG5cbiAgICAgICAgLy8gVGhlIEdyZWVuIExpbmVcbiAgICAgICAgeGEgPSBnZXRQdCggZnJvbVggLCBjcFggLCBqICk7XG4gICAgICAgIHlhID0gZ2V0UHQoIGZyb21ZICwgY3BZICwgaiApO1xuICAgICAgICB4YiA9IGdldFB0KCBjcFggLCB0b1ggLCBqICk7XG4gICAgICAgIHliID0gZ2V0UHQoIGNwWSAsIHRvWSAsIGogKTtcblxuICAgICAgICAvLyBUaGUgQmxhY2sgRG90XG4gICAgICAgIHggPSBnZXRQdCggeGEgLCB4YiAsIGogKTtcbiAgICAgICAgeSA9IGdldFB0KCB5YSAsIHliICwgaiApO1xuXG4gICAgICAgIHBvaW50cy5wdXNoKHgsIHkpO1xuICAgIH1cblxuICAgIHJldHVybiBwb2ludHM7XG59O1xuXG5cbm1vZHVsZS5leHBvcnRzID0gYnVpbGRSb3VuZGVkUmVjdGFuZ2xlOyIsIi8qKlxuICogQGZpbGUgICAgICAgIE1haW4gZXhwb3J0IG9mIHRoZSBQSVhJIGNvcmUgbGlicmFyeVxuICogQGF1dGhvciAgICAgIE1hdCBHcm92ZXMgPG1hdEBnb29kYm95ZGlnaXRhbC5jb20+XG4gKiBAY29weXJpZ2h0ICAgMjAxMy0yMDE1IEdvb2RCb3lEaWdpdGFsXG4gKiBAbGljZW5zZSAgICAge0BsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9waXhpanMvcGl4aS5qcy9ibG9iL21hc3Rlci9MSUNFTlNFfE1JVCBMaWNlbnNlfVxuICovXG5cbi8qKlxuICogQG5hbWVzcGFjZSBQSVhJXG4gKi9cbi8vIGV4cG9ydCBjb3JlIGFuZCBjb25zdC4gV2UgYXNzaWduIGNvcmUgdG8gY29uc3Qgc28gdGhhdCB0aGUgbm9uLXJlZmVyZW5jZSB0eXBlcyBpbiBjb25zdCByZW1haW4gaW4tdGFjdFxudmFyIGNvcmUgPSBtb2R1bGUuZXhwb3J0cyA9IE9iamVjdC5hc3NpZ24ocmVxdWlyZSgnLi9jb25zdCcpLCByZXF1aXJlKCcuL21hdGgnKSwge1xuICAgIC8vIHV0aWxzXG4gICAgdXRpbHM6IHJlcXVpcmUoJy4vdXRpbHMnKSxcbiAgICB0aWNrZXI6IHJlcXVpcmUoJy4vdGlja2VyJyksXG5cbiAgICAvLyBkaXNwbGF5XG4gICAgRGlzcGxheU9iamVjdDogICAgICAgICAgcmVxdWlyZSgnLi9kaXNwbGF5L0Rpc3BsYXlPYmplY3QnKSxcbiAgICBDb250YWluZXI6ICAgICAgICAgICAgICByZXF1aXJlKCcuL2Rpc3BsYXkvQ29udGFpbmVyJyksXG5cbiAgICAvLyBzcHJpdGVzXG4gICAgU3ByaXRlOiAgICAgICAgICAgICAgICAgcmVxdWlyZSgnLi9zcHJpdGVzL1Nwcml0ZScpLFxuICAgIFBhcnRpY2xlQ29udGFpbmVyOiAgICAgIHJlcXVpcmUoJy4vcGFydGljbGVzL1BhcnRpY2xlQ29udGFpbmVyJyksXG4gICAgU3ByaXRlUmVuZGVyZXI6ICAgICAgICAgcmVxdWlyZSgnLi9zcHJpdGVzL3dlYmdsL1Nwcml0ZVJlbmRlcmVyJyksXG4gICAgUGFydGljbGVSZW5kZXJlcjogICAgICAgcmVxdWlyZSgnLi9wYXJ0aWNsZXMvd2ViZ2wvUGFydGljbGVSZW5kZXJlcicpLFxuXG4gICAgLy8gdGV4dFxuICAgIFRleHQ6ICAgICAgICAgICAgICAgICAgIHJlcXVpcmUoJy4vdGV4dC9UZXh0JyksXG5cbiAgICAvLyBwcmltaXRpdmVzXG4gICAgR3JhcGhpY3M6ICAgICAgICAgICAgICAgcmVxdWlyZSgnLi9ncmFwaGljcy9HcmFwaGljcycpLFxuICAgIEdyYXBoaWNzRGF0YTogICAgICAgICAgIHJlcXVpcmUoJy4vZ3JhcGhpY3MvR3JhcGhpY3NEYXRhJyksXG4gICAgR3JhcGhpY3NSZW5kZXJlcjogICAgICAgcmVxdWlyZSgnLi9ncmFwaGljcy93ZWJnbC9HcmFwaGljc1JlbmRlcmVyJyksXG5cbiAgICAvLyB0ZXh0dXJlc1xuICAgIFRleHR1cmU6ICAgICAgICAgICAgICAgIHJlcXVpcmUoJy4vdGV4dHVyZXMvVGV4dHVyZScpLFxuICAgIEJhc2VUZXh0dXJlOiAgICAgICAgICAgIHJlcXVpcmUoJy4vdGV4dHVyZXMvQmFzZVRleHR1cmUnKSxcbiAgICBSZW5kZXJUZXh0dXJlOiAgICAgICAgICByZXF1aXJlKCcuL3RleHR1cmVzL1JlbmRlclRleHR1cmUnKSxcbiAgICBWaWRlb0Jhc2VUZXh0dXJlOiAgICAgICByZXF1aXJlKCcuL3RleHR1cmVzL1ZpZGVvQmFzZVRleHR1cmUnKSxcbiAgICBUZXh0dXJlVXZzOiAgICAgICAgICAgICByZXF1aXJlKCcuL3RleHR1cmVzL1RleHR1cmVVdnMnKSxcblxuICAgIC8vIHJlbmRlcmVycyAtIGNhbnZhc1xuICAgIENhbnZhc1JlbmRlcmVyOiAgICAgICAgIHJlcXVpcmUoJy4vcmVuZGVyZXJzL2NhbnZhcy9DYW52YXNSZW5kZXJlcicpLFxuICAgIENhbnZhc0dyYXBoaWNzOiAgICAgICAgIHJlcXVpcmUoJy4vcmVuZGVyZXJzL2NhbnZhcy91dGlscy9DYW52YXNHcmFwaGljcycpLFxuICAgIENhbnZhc0J1ZmZlcjogICAgICAgICAgIHJlcXVpcmUoJy4vcmVuZGVyZXJzL2NhbnZhcy91dGlscy9DYW52YXNCdWZmZXInKSxcblxuICAgIC8vIHJlbmRlcmVycyAtIHdlYmdsXG4gICAgV2ViR0xSZW5kZXJlcjogICAgICAgICAgcmVxdWlyZSgnLi9yZW5kZXJlcnMvd2ViZ2wvV2ViR0xSZW5kZXJlcicpLFxuICAgIFdlYkdMTWFuYWdlcjogICAgICAgICAgcmVxdWlyZSgnLi9yZW5kZXJlcnMvd2ViZ2wvbWFuYWdlcnMvV2ViR0xNYW5hZ2VyJyksXG4gICAgU2hhZGVyTWFuYWdlcjogICAgICAgICAgcmVxdWlyZSgnLi9yZW5kZXJlcnMvd2ViZ2wvbWFuYWdlcnMvU2hhZGVyTWFuYWdlcicpLFxuICAgIFNoYWRlcjogICAgICAgICAgICAgICAgIHJlcXVpcmUoJy4vcmVuZGVyZXJzL3dlYmdsL3NoYWRlcnMvU2hhZGVyJyksXG4gICAgT2JqZWN0UmVuZGVyZXI6ICAgICAgICAgcmVxdWlyZSgnLi9yZW5kZXJlcnMvd2ViZ2wvdXRpbHMvT2JqZWN0UmVuZGVyZXInKSxcbiAgICBSZW5kZXJUYXJnZXQ6ICAgICAgICAgICByZXF1aXJlKCcuL3JlbmRlcmVycy93ZWJnbC91dGlscy9SZW5kZXJUYXJnZXQnKSxcblxuICAgIC8vIGZpbHRlcnMgLSB3ZWJnbFxuICAgIEFic3RyYWN0RmlsdGVyOiAgICAgICAgIHJlcXVpcmUoJy4vcmVuZGVyZXJzL3dlYmdsL2ZpbHRlcnMvQWJzdHJhY3RGaWx0ZXInKSxcbiAgICBGWEFBRmlsdGVyOiAgICAgICAgICAgICByZXF1aXJlKCcuL3JlbmRlcmVycy93ZWJnbC9maWx0ZXJzL0ZYQUFGaWx0ZXInKSxcbiAgICBTcHJpdGVNYXNrRmlsdGVyOiAgICAgICByZXF1aXJlKCcuL3JlbmRlcmVycy93ZWJnbC9maWx0ZXJzL1Nwcml0ZU1hc2tGaWx0ZXInKSxcblxuICAgIGdsQ29yZTogICAgICAgICAgICAgICAgICAgcmVxdWlyZSgncGl4aS1nbC1jb3JlJyksXG5cbiAgICAvKipcbiAgICAgKiBUaGlzIGhlbHBlciBmdW5jdGlvbiB3aWxsIGF1dG9tYXRpY2FsbHkgZGV0ZWN0IHdoaWNoIHJlbmRlcmVyIHlvdSBzaG91bGQgYmUgdXNpbmcuXG4gICAgICogV2ViR0wgaXMgdGhlIHByZWZlcnJlZCByZW5kZXJlciBhcyBpdCBpcyBhIGxvdCBmYXN0ZXIuIElmIHdlYkdMIGlzIG5vdCBzdXBwb3J0ZWQgYnlcbiAgICAgKiB0aGUgYnJvd3NlciB0aGVuIHRoaXMgZnVuY3Rpb24gd2lsbCByZXR1cm4gYSBjYW52YXMgcmVuZGVyZXJcbiAgICAgKlxuICAgICAqIEBtZW1iZXJvZiBQSVhJXG4gICAgICogQHBhcmFtIHdpZHRoPTgwMCB7bnVtYmVyfSB0aGUgd2lkdGggb2YgdGhlIHJlbmRlcmVycyB2aWV3XG4gICAgICogQHBhcmFtIGhlaWdodD02MDAge251bWJlcn0gdGhlIGhlaWdodCBvZiB0aGUgcmVuZGVyZXJzIHZpZXdcbiAgICAgKiBAcGFyYW0gW29wdGlvbnNdIHtvYmplY3R9IFRoZSBvcHRpb25hbCByZW5kZXJlciBwYXJhbWV0ZXJzXG4gICAgICogQHBhcmFtIFtvcHRpb25zLnZpZXddIHtIVE1MQ2FudmFzRWxlbWVudH0gdGhlIGNhbnZhcyB0byB1c2UgYXMgYSB2aWV3LCBvcHRpb25hbFxuICAgICAqIEBwYXJhbSBbb3B0aW9ucy50cmFuc3BhcmVudD1mYWxzZV0ge2Jvb2xlYW59IElmIHRoZSByZW5kZXIgdmlldyBpcyB0cmFuc3BhcmVudCwgZGVmYXVsdCBmYWxzZVxuICAgICAqIEBwYXJhbSBbb3B0aW9ucy5hbnRpYWxpYXM9ZmFsc2VdIHtib29sZWFufSBzZXRzIGFudGlhbGlhcyAob25seSBhcHBsaWNhYmxlIGluIGNocm9tZSBhdCB0aGUgbW9tZW50KVxuICAgICAqIEBwYXJhbSBbb3B0aW9ucy5wcmVzZXJ2ZURyYXdpbmdCdWZmZXI9ZmFsc2VdIHtib29sZWFufSBlbmFibGVzIGRyYXdpbmcgYnVmZmVyIHByZXNlcnZhdGlvbiwgZW5hYmxlIHRoaXMgaWYgeW91XG4gICAgICogICAgICBuZWVkIHRvIGNhbGwgdG9EYXRhVXJsIG9uIHRoZSB3ZWJnbCBjb250ZXh0XG4gICAgICogQHBhcmFtIFtvcHRpb25zLnJlc29sdXRpb249MV0ge251bWJlcn0gdGhlIHJlc29sdXRpb24gb2YgdGhlIHJlbmRlcmVyLCByZXRpbmEgd291bGQgYmUgMlxuICAgICAqIEBwYXJhbSBbbm9XZWJHTD1mYWxzZV0ge2Jvb2xlYW59IHByZXZlbnRzIHNlbGVjdGlvbiBvZiBXZWJHTCByZW5kZXJlciwgZXZlbiBpZiBzdWNoIGlzIHByZXNlbnRcbiAgICAgKlxuICAgICAqIEByZXR1cm4ge1dlYkdMUmVuZGVyZXJ8Q2FudmFzUmVuZGVyZXJ9IFJldHVybnMgV2ViR0wgcmVuZGVyZXIgaWYgYXZhaWxhYmxlLCBvdGhlcndpc2UgQ2FudmFzUmVuZGVyZXJcbiAgICAgKi9cbiAgICBhdXRvRGV0ZWN0UmVuZGVyZXI6IGZ1bmN0aW9uICh3aWR0aCwgaGVpZ2h0LCBvcHRpb25zLCBub1dlYkdMKVxuICAgIHtcbiAgICAgICAgd2lkdGggPSB3aWR0aCB8fCA4MDA7XG4gICAgICAgIGhlaWdodCA9IGhlaWdodCB8fCA2MDA7XG5cbiAgICAgICAgaWYgKCFub1dlYkdMICYmIGNvcmUudXRpbHMuaXNXZWJHTFN1cHBvcnRlZCgpKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IGNvcmUuV2ViR0xSZW5kZXJlcih3aWR0aCwgaGVpZ2h0LCBvcHRpb25zKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBuZXcgY29yZS5DYW52YXNSZW5kZXJlcih3aWR0aCwgaGVpZ2h0LCBvcHRpb25zKTtcbiAgICB9XG59KTtcbiIsIi8vIEB0b2RvIC0gaWdub3JlIHRoZSB0b28gbWFueSBwYXJhbWV0ZXJzIHdhcm5pbmcgZm9yIG5vd1xuLy8gc2hvdWxkIGVpdGhlciBmaXggaXQgb3IgY2hhbmdlIHRoZSBqc2hpbnQgY29uZmlnXG4vLyBqc2hpbnQgLVcwNzJcblxudmFyIFBvaW50ID0gcmVxdWlyZSgnLi9Qb2ludCcpO1xuXG4vKipcbiAqIFRoZSBwaXhpIE1hdHJpeCBjbGFzcyBhcyBhbiBvYmplY3QsIHdoaWNoIG1ha2VzIGl0IGEgbG90IGZhc3RlcixcbiAqIGhlcmUgaXMgYSByZXByZXNlbnRhdGlvbiBvZiBpdCA6XG4gKiB8IGEgfCBiIHwgdHh8XG4gKiB8IGMgfCBkIHwgdHl8XG4gKiB8IDAgfCAwIHwgMSB8XG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICovXG5mdW5jdGlvbiBNYXRyaXgoKVxue1xuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAxXG4gICAgICovXG4gICAgdGhpcy5hID0gMTtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAwXG4gICAgICovXG4gICAgdGhpcy5iID0gMDtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAwXG4gICAgICovXG4gICAgdGhpcy5jID0gMDtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAxXG4gICAgICovXG4gICAgdGhpcy5kID0gMTtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAwXG4gICAgICovXG4gICAgdGhpcy50eCA9IDA7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMFxuICAgICAqL1xuICAgIHRoaXMudHkgPSAwO1xufVxuXG5NYXRyaXgucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gTWF0cml4O1xubW9kdWxlLmV4cG9ydHMgPSBNYXRyaXg7XG5cbi8qKlxuICogQ3JlYXRlcyBhIE1hdHJpeCBvYmplY3QgYmFzZWQgb24gdGhlIGdpdmVuIGFycmF5LiBUaGUgRWxlbWVudCB0byBNYXRyaXggbWFwcGluZyBvcmRlciBpcyBhcyBmb2xsb3dzOlxuICpcbiAqIGEgPSBhcnJheVswXVxuICogYiA9IGFycmF5WzFdXG4gKiBjID0gYXJyYXlbM11cbiAqIGQgPSBhcnJheVs0XVxuICogdHggPSBhcnJheVsyXVxuICogdHkgPSBhcnJheVs1XVxuICpcbiAqIEBwYXJhbSBhcnJheSB7bnVtYmVyW119IFRoZSBhcnJheSB0aGF0IHRoZSBtYXRyaXggd2lsbCBiZSBwb3B1bGF0ZWQgZnJvbS5cbiAqL1xuTWF0cml4LnByb3RvdHlwZS5mcm9tQXJyYXkgPSBmdW5jdGlvbiAoYXJyYXkpXG57XG4gICAgdGhpcy5hID0gYXJyYXlbMF07XG4gICAgdGhpcy5iID0gYXJyYXlbMV07XG4gICAgdGhpcy5jID0gYXJyYXlbM107XG4gICAgdGhpcy5kID0gYXJyYXlbNF07XG4gICAgdGhpcy50eCA9IGFycmF5WzJdO1xuICAgIHRoaXMudHkgPSBhcnJheVs1XTtcbn07XG5cblxuLyoqXG4gKiBzZXRzIHRoZSBtYXRyaXggcHJvcGVydGllc1xuICpcbiAqIEBwYXJhbSB7bnVtYmVyfSBhXG4gKiBAcGFyYW0ge251bWJlcn0gYlxuICogQHBhcmFtIHtudW1iZXJ9IGNcbiAqIEBwYXJhbSB7bnVtYmVyfSBkXG4gKiBAcGFyYW0ge251bWJlcn0gdHhcbiAqIEBwYXJhbSB7bnVtYmVyfSB0eVxuICpcbiAqIEByZXR1cm4ge1BJWEkuTWF0cml4fSBUaGlzIG1hdHJpeC4gR29vZCBmb3IgY2hhaW5pbmcgbWV0aG9kIGNhbGxzLlxuICovXG5NYXRyaXgucHJvdG90eXBlLnNldCA9IGZ1bmN0aW9uIChhLCBiLCBjLCBkLCB0eCwgdHkpXG57XG4gICAgdGhpcy5hID0gYTtcbiAgICB0aGlzLmIgPSBiO1xuICAgIHRoaXMuYyA9IGM7XG4gICAgdGhpcy5kID0gZDtcbiAgICB0aGlzLnR4ID0gdHg7XG4gICAgdGhpcy50eSA9IHR5O1xuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG5cbi8qKlxuICogQ3JlYXRlcyBhbiBhcnJheSBmcm9tIHRoZSBjdXJyZW50IE1hdHJpeCBvYmplY3QuXG4gKlxuICogQHBhcmFtIHRyYW5zcG9zZSB7Ym9vbGVhbn0gV2hldGhlciB3ZSBuZWVkIHRvIHRyYW5zcG9zZSB0aGUgbWF0cml4IG9yIG5vdFxuICogQHBhcmFtIFtvdXRdIHtBcnJheX0gSWYgcHJvdmlkZWQgdGhlIGFycmF5IHdpbGwgYmUgYXNzaWduZWQgdG8gb3V0XG4gKiBAcmV0dXJuIHtudW1iZXJbXX0gdGhlIG5ld2x5IGNyZWF0ZWQgYXJyYXkgd2hpY2ggY29udGFpbnMgdGhlIG1hdHJpeFxuICovXG5NYXRyaXgucHJvdG90eXBlLnRvQXJyYXkgPSBmdW5jdGlvbiAodHJhbnNwb3NlLCBvdXQpXG57XG4gICAgaWYgKCF0aGlzLmFycmF5KVxuICAgIHtcbiAgICAgICAgdGhpcy5hcnJheSA9IG5ldyBGbG9hdDMyQXJyYXkoOSk7XG4gICAgfVxuXG4gICAgdmFyIGFycmF5ID0gb3V0IHx8IHRoaXMuYXJyYXk7XG5cbiAgICBpZiAodHJhbnNwb3NlKVxuICAgIHtcbiAgICAgICAgYXJyYXlbMF0gPSB0aGlzLmE7XG4gICAgICAgIGFycmF5WzFdID0gdGhpcy5iO1xuICAgICAgICBhcnJheVsyXSA9IDA7XG4gICAgICAgIGFycmF5WzNdID0gdGhpcy5jO1xuICAgICAgICBhcnJheVs0XSA9IHRoaXMuZDtcbiAgICAgICAgYXJyYXlbNV0gPSAwO1xuICAgICAgICBhcnJheVs2XSA9IHRoaXMudHg7XG4gICAgICAgIGFycmF5WzddID0gdGhpcy50eTtcbiAgICAgICAgYXJyYXlbOF0gPSAxO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICBhcnJheVswXSA9IHRoaXMuYTtcbiAgICAgICAgYXJyYXlbMV0gPSB0aGlzLmM7XG4gICAgICAgIGFycmF5WzJdID0gdGhpcy50eDtcbiAgICAgICAgYXJyYXlbM10gPSB0aGlzLmI7XG4gICAgICAgIGFycmF5WzRdID0gdGhpcy5kO1xuICAgICAgICBhcnJheVs1XSA9IHRoaXMudHk7XG4gICAgICAgIGFycmF5WzZdID0gMDtcbiAgICAgICAgYXJyYXlbN10gPSAwO1xuICAgICAgICBhcnJheVs4XSA9IDE7XG4gICAgfVxuXG4gICAgcmV0dXJuIGFycmF5O1xufTtcblxuLyoqXG4gKiBHZXQgYSBuZXcgcG9zaXRpb24gd2l0aCB0aGUgY3VycmVudCB0cmFuc2Zvcm1hdGlvbiBhcHBsaWVkLlxuICogQ2FuIGJlIHVzZWQgdG8gZ28gZnJvbSBhIGNoaWxkJ3MgY29vcmRpbmF0ZSBzcGFjZSB0byB0aGUgd29ybGQgY29vcmRpbmF0ZSBzcGFjZS4gKGUuZy4gcmVuZGVyaW5nKVxuICpcbiAqIEBwYXJhbSBwb3Mge1BJWEkuUG9pbnR9IFRoZSBvcmlnaW5cbiAqIEBwYXJhbSBbbmV3UG9zXSB7UElYSS5Qb2ludH0gVGhlIHBvaW50IHRoYXQgdGhlIG5ldyBwb3NpdGlvbiBpcyBhc3NpZ25lZCB0byAoYWxsb3dlZCB0byBiZSBzYW1lIGFzIGlucHV0KVxuICogQHJldHVybiB7UElYSS5Qb2ludH0gVGhlIG5ldyBwb2ludCwgdHJhbnNmb3JtZWQgdGhyb3VnaCB0aGlzIG1hdHJpeFxuICovXG5NYXRyaXgucHJvdG90eXBlLmFwcGx5ID0gZnVuY3Rpb24gKHBvcywgbmV3UG9zKVxue1xuICAgIG5ld1BvcyA9IG5ld1BvcyB8fCBuZXcgUG9pbnQoKTtcblxuICAgIHZhciB4ID0gcG9zLng7XG4gICAgdmFyIHkgPSBwb3MueTtcblxuICAgIG5ld1Bvcy54ID0gdGhpcy5hICogeCArIHRoaXMuYyAqIHkgKyB0aGlzLnR4O1xuICAgIG5ld1Bvcy55ID0gdGhpcy5iICogeCArIHRoaXMuZCAqIHkgKyB0aGlzLnR5O1xuXG4gICAgcmV0dXJuIG5ld1Bvcztcbn07XG5cbi8qKlxuICogR2V0IGEgbmV3IHBvc2l0aW9uIHdpdGggdGhlIGludmVyc2Ugb2YgdGhlIGN1cnJlbnQgdHJhbnNmb3JtYXRpb24gYXBwbGllZC5cbiAqIENhbiBiZSB1c2VkIHRvIGdvIGZyb20gdGhlIHdvcmxkIGNvb3JkaW5hdGUgc3BhY2UgdG8gYSBjaGlsZCdzIGNvb3JkaW5hdGUgc3BhY2UuIChlLmcuIGlucHV0KVxuICpcbiAqIEBwYXJhbSBwb3Mge1BJWEkuUG9pbnR9IFRoZSBvcmlnaW5cbiAqIEBwYXJhbSBbbmV3UG9zXSB7UElYSS5Qb2ludH0gVGhlIHBvaW50IHRoYXQgdGhlIG5ldyBwb3NpdGlvbiBpcyBhc3NpZ25lZCB0byAoYWxsb3dlZCB0byBiZSBzYW1lIGFzIGlucHV0KVxuICogQHJldHVybiB7UElYSS5Qb2ludH0gVGhlIG5ldyBwb2ludCwgaW52ZXJzZS10cmFuc2Zvcm1lZCB0aHJvdWdoIHRoaXMgbWF0cml4XG4gKi9cbk1hdHJpeC5wcm90b3R5cGUuYXBwbHlJbnZlcnNlID0gZnVuY3Rpb24gKHBvcywgbmV3UG9zKVxue1xuICAgIG5ld1BvcyA9IG5ld1BvcyB8fCBuZXcgUG9pbnQoKTtcblxuICAgIHZhciBpZCA9IDEgLyAodGhpcy5hICogdGhpcy5kICsgdGhpcy5jICogLXRoaXMuYik7XG5cbiAgICB2YXIgeCA9IHBvcy54O1xuICAgIHZhciB5ID0gcG9zLnk7XG5cbiAgICBuZXdQb3MueCA9IHRoaXMuZCAqIGlkICogeCArIC10aGlzLmMgKiBpZCAqIHkgKyAodGhpcy50eSAqIHRoaXMuYyAtIHRoaXMudHggKiB0aGlzLmQpICogaWQ7XG4gICAgbmV3UG9zLnkgPSB0aGlzLmEgKiBpZCAqIHkgKyAtdGhpcy5iICogaWQgKiB4ICsgKC10aGlzLnR5ICogdGhpcy5hICsgdGhpcy50eCAqIHRoaXMuYikgKiBpZDtcblxuICAgIHJldHVybiBuZXdQb3M7XG59O1xuXG4vKipcbiAqIFRyYW5zbGF0ZXMgdGhlIG1hdHJpeCBvbiB0aGUgeCBhbmQgeS5cbiAqXG4gKiBAcGFyYW0ge251bWJlcn0geFxuICogQHBhcmFtIHtudW1iZXJ9IHlcbiAqIEByZXR1cm4ge1BJWEkuTWF0cml4fSBUaGlzIG1hdHJpeC4gR29vZCBmb3IgY2hhaW5pbmcgbWV0aG9kIGNhbGxzLlxuICovXG5NYXRyaXgucHJvdG90eXBlLnRyYW5zbGF0ZSA9IGZ1bmN0aW9uICh4LCB5KVxue1xuICAgIHRoaXMudHggKz0geDtcbiAgICB0aGlzLnR5ICs9IHk7XG5cbiAgICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogQXBwbGllcyBhIHNjYWxlIHRyYW5zZm9ybWF0aW9uIHRvIHRoZSBtYXRyaXguXG4gKlxuICogQHBhcmFtIHtudW1iZXJ9IHggVGhlIGFtb3VudCB0byBzY2FsZSBob3Jpem9udGFsbHlcbiAqIEBwYXJhbSB7bnVtYmVyfSB5IFRoZSBhbW91bnQgdG8gc2NhbGUgdmVydGljYWxseVxuICogQHJldHVybiB7UElYSS5NYXRyaXh9IFRoaXMgbWF0cml4LiBHb29kIGZvciBjaGFpbmluZyBtZXRob2QgY2FsbHMuXG4gKi9cbk1hdHJpeC5wcm90b3R5cGUuc2NhbGUgPSBmdW5jdGlvbiAoeCwgeSlcbntcbiAgICB0aGlzLmEgKj0geDtcbiAgICB0aGlzLmQgKj0geTtcbiAgICB0aGlzLmMgKj0geDtcbiAgICB0aGlzLmIgKj0geTtcbiAgICB0aGlzLnR4ICo9IHg7XG4gICAgdGhpcy50eSAqPSB5O1xuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG5cbi8qKlxuICogQXBwbGllcyBhIHJvdGF0aW9uIHRyYW5zZm9ybWF0aW9uIHRvIHRoZSBtYXRyaXguXG4gKlxuICogQHBhcmFtIHtudW1iZXJ9IGFuZ2xlIC0gVGhlIGFuZ2xlIGluIHJhZGlhbnMuXG4gKiBAcmV0dXJuIHtQSVhJLk1hdHJpeH0gVGhpcyBtYXRyaXguIEdvb2QgZm9yIGNoYWluaW5nIG1ldGhvZCBjYWxscy5cbiAqL1xuTWF0cml4LnByb3RvdHlwZS5yb3RhdGUgPSBmdW5jdGlvbiAoYW5nbGUpXG57XG4gICAgdmFyIGNvcyA9IE1hdGguY29zKCBhbmdsZSApO1xuICAgIHZhciBzaW4gPSBNYXRoLnNpbiggYW5nbGUgKTtcblxuICAgIHZhciBhMSA9IHRoaXMuYTtcbiAgICB2YXIgYzEgPSB0aGlzLmM7XG4gICAgdmFyIHR4MSA9IHRoaXMudHg7XG5cbiAgICB0aGlzLmEgPSBhMSAqIGNvcy10aGlzLmIgKiBzaW47XG4gICAgdGhpcy5iID0gYTEgKiBzaW4rdGhpcy5iICogY29zO1xuICAgIHRoaXMuYyA9IGMxICogY29zLXRoaXMuZCAqIHNpbjtcbiAgICB0aGlzLmQgPSBjMSAqIHNpbit0aGlzLmQgKiBjb3M7XG4gICAgdGhpcy50eCA9IHR4MSAqIGNvcyAtIHRoaXMudHkgKiBzaW47XG4gICAgdGhpcy50eSA9IHR4MSAqIHNpbiArIHRoaXMudHkgKiBjb3M7XG5cbiAgICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogQXBwZW5kcyB0aGUgZ2l2ZW4gTWF0cml4IHRvIHRoaXMgTWF0cml4LlxuICpcbiAqIEBwYXJhbSB7UElYSS5NYXRyaXh9IG1hdHJpeFxuICogQHJldHVybiB7UElYSS5NYXRyaXh9IFRoaXMgbWF0cml4LiBHb29kIGZvciBjaGFpbmluZyBtZXRob2QgY2FsbHMuXG4gKi9cbk1hdHJpeC5wcm90b3R5cGUuYXBwZW5kID0gZnVuY3Rpb24gKG1hdHJpeClcbntcbiAgICB2YXIgYTEgPSB0aGlzLmE7XG4gICAgdmFyIGIxID0gdGhpcy5iO1xuICAgIHZhciBjMSA9IHRoaXMuYztcbiAgICB2YXIgZDEgPSB0aGlzLmQ7XG5cbiAgICB0aGlzLmEgID0gbWF0cml4LmEgKiBhMSArIG1hdHJpeC5iICogYzE7XG4gICAgdGhpcy5iICA9IG1hdHJpeC5hICogYjEgKyBtYXRyaXguYiAqIGQxO1xuICAgIHRoaXMuYyAgPSBtYXRyaXguYyAqIGExICsgbWF0cml4LmQgKiBjMTtcbiAgICB0aGlzLmQgID0gbWF0cml4LmMgKiBiMSArIG1hdHJpeC5kICogZDE7XG5cbiAgICB0aGlzLnR4ID0gbWF0cml4LnR4ICogYTEgKyBtYXRyaXgudHkgKiBjMSArIHRoaXMudHg7XG4gICAgdGhpcy50eSA9IG1hdHJpeC50eCAqIGIxICsgbWF0cml4LnR5ICogZDEgKyB0aGlzLnR5O1xuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIFNldHMgdGhlIG1hdHJpeCBiYXNlZCBvbiBhbGwgdGhlIGF2YWlsYWJsZSBwcm9wZXJ0aWVzXG4gKlxuICogQHBhcmFtIHtudW1iZXJ9IHhcbiAqIEBwYXJhbSB7bnVtYmVyfSB5XG4gKiBAcGFyYW0ge251bWJlcn0gcGl2b3RYXG4gKiBAcGFyYW0ge251bWJlcn0gcGl2b3RZXG4gKiBAcGFyYW0ge251bWJlcn0gc2NhbGVYXG4gKiBAcGFyYW0ge251bWJlcn0gc2NhbGVZXG4gKiBAcGFyYW0ge251bWJlcn0gcm90YXRpb25cbiAqIEBwYXJhbSB7bnVtYmVyfSBza2V3WFxuICogQHBhcmFtIHtudW1iZXJ9IHNrZXdZXG4gKlxuICogQHJldHVybiB7UElYSS5NYXRyaXh9IFRoaXMgbWF0cml4LiBHb29kIGZvciBjaGFpbmluZyBtZXRob2QgY2FsbHMuXG4gKi9cbk1hdHJpeC5wcm90b3R5cGUuc2V0VHJhbnNmb3JtID0gZnVuY3Rpb24gKHgsIHksIHBpdm90WCwgcGl2b3RZLCBzY2FsZVgsIHNjYWxlWSwgcm90YXRpb24sIHNrZXdYLCBza2V3WSlcbntcbiAgICB2YXIgYSwgYiwgYywgZCwgc3IsIGNyLCBjeSwgc3ksIG5zeCwgY3g7XG5cbiAgICBzciAgPSBNYXRoLnNpbihyb3RhdGlvbik7XG4gICAgY3IgID0gTWF0aC5jb3Mocm90YXRpb24pO1xuICAgIGN5ICA9IE1hdGguY29zKHNrZXdZKTtcbiAgICBzeSAgPSBNYXRoLnNpbihza2V3WSk7XG4gICAgbnN4ID0gLU1hdGguc2luKHNrZXdYKTtcbiAgICBjeCAgPSAgTWF0aC5jb3Moc2tld1gpO1xuXG4gICAgYSAgPSAgY3IgKiBzY2FsZVg7XG4gICAgYiAgPSAgc3IgKiBzY2FsZVg7XG4gICAgYyAgPSAtc3IgKiBzY2FsZVk7XG4gICAgZCAgPSAgY3IgKiBzY2FsZVk7XG5cbiAgICB0aGlzLmEgID0gY3kgKiBhICsgc3kgKiBjO1xuICAgIHRoaXMuYiAgPSBjeSAqIGIgKyBzeSAqIGQ7XG4gICAgdGhpcy5jICA9IG5zeCAqIGEgKyBjeCAqIGM7XG4gICAgdGhpcy5kICA9IG5zeCAqIGIgKyBjeCAqIGQ7XG5cbiAgICB0aGlzLnR4ID0geCArICggcGl2b3RYICogYSArIHBpdm90WSAqIGMgKTtcbiAgICB0aGlzLnR5ID0geSArICggcGl2b3RYICogYiArIHBpdm90WSAqIGQgKTtcblxuICAgIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBQcmVwZW5kcyB0aGUgZ2l2ZW4gTWF0cml4IHRvIHRoaXMgTWF0cml4LlxuICpcbiAqIEBwYXJhbSB7UElYSS5NYXRyaXh9IG1hdHJpeFxuICogQHJldHVybiB7UElYSS5NYXRyaXh9IFRoaXMgbWF0cml4LiBHb29kIGZvciBjaGFpbmluZyBtZXRob2QgY2FsbHMuXG4gKi9cbk1hdHJpeC5wcm90b3R5cGUucHJlcGVuZCA9IGZ1bmN0aW9uKG1hdHJpeClcbntcbiAgICB2YXIgdHgxID0gdGhpcy50eDtcblxuICAgIGlmIChtYXRyaXguYSAhPT0gMSB8fCBtYXRyaXguYiAhPT0gMCB8fCBtYXRyaXguYyAhPT0gMCB8fCBtYXRyaXguZCAhPT0gMSlcbiAgICB7XG4gICAgICAgIHZhciBhMSA9IHRoaXMuYTtcbiAgICAgICAgdmFyIGMxID0gdGhpcy5jO1xuICAgICAgICB0aGlzLmEgID0gYTEqbWF0cml4LmErdGhpcy5iKm1hdHJpeC5jO1xuICAgICAgICB0aGlzLmIgID0gYTEqbWF0cml4LmIrdGhpcy5iKm1hdHJpeC5kO1xuICAgICAgICB0aGlzLmMgID0gYzEqbWF0cml4LmErdGhpcy5kKm1hdHJpeC5jO1xuICAgICAgICB0aGlzLmQgID0gYzEqbWF0cml4LmIrdGhpcy5kKm1hdHJpeC5kO1xuICAgIH1cblxuICAgIHRoaXMudHggPSB0eDEqbWF0cml4LmErdGhpcy50eSptYXRyaXguYyttYXRyaXgudHg7XG4gICAgdGhpcy50eSA9IHR4MSptYXRyaXguYit0aGlzLnR5Km1hdHJpeC5kK21hdHJpeC50eTtcblxuICAgIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBJbnZlcnRzIHRoaXMgbWF0cml4XG4gKlxuICogQHJldHVybiB7UElYSS5NYXRyaXh9IFRoaXMgbWF0cml4LiBHb29kIGZvciBjaGFpbmluZyBtZXRob2QgY2FsbHMuXG4gKi9cbk1hdHJpeC5wcm90b3R5cGUuaW52ZXJ0ID0gZnVuY3Rpb24oKVxue1xuICAgIHZhciBhMSA9IHRoaXMuYTtcbiAgICB2YXIgYjEgPSB0aGlzLmI7XG4gICAgdmFyIGMxID0gdGhpcy5jO1xuICAgIHZhciBkMSA9IHRoaXMuZDtcbiAgICB2YXIgdHgxID0gdGhpcy50eDtcbiAgICB2YXIgbiA9IGExKmQxLWIxKmMxO1xuXG4gICAgdGhpcy5hID0gZDEvbjtcbiAgICB0aGlzLmIgPSAtYjEvbjtcbiAgICB0aGlzLmMgPSAtYzEvbjtcbiAgICB0aGlzLmQgPSBhMS9uO1xuICAgIHRoaXMudHggPSAoYzEqdGhpcy50eS1kMSp0eDEpL247XG4gICAgdGhpcy50eSA9IC0oYTEqdGhpcy50eS1iMSp0eDEpL247XG5cbiAgICByZXR1cm4gdGhpcztcbn07XG5cblxuLyoqXG4gKiBSZXNldHMgdGhpcyBNYXRpeCB0byBhbiBpZGVudGl0eSAoZGVmYXVsdCkgbWF0cml4LlxuICpcbiAqIEByZXR1cm4ge1BJWEkuTWF0cml4fSBUaGlzIG1hdHJpeC4gR29vZCBmb3IgY2hhaW5pbmcgbWV0aG9kIGNhbGxzLlxuICovXG5NYXRyaXgucHJvdG90eXBlLmlkZW50aXR5ID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLmEgPSAxO1xuICAgIHRoaXMuYiA9IDA7XG4gICAgdGhpcy5jID0gMDtcbiAgICB0aGlzLmQgPSAxO1xuICAgIHRoaXMudHggPSAwO1xuICAgIHRoaXMudHkgPSAwO1xuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIENyZWF0ZXMgYSBuZXcgTWF0cml4IG9iamVjdCB3aXRoIHRoZSBzYW1lIHZhbHVlcyBhcyB0aGlzIG9uZS5cbiAqXG4gKiBAcmV0dXJuIHtQSVhJLk1hdHJpeH0gQSBjb3B5IG9mIHRoaXMgbWF0cml4LiBHb29kIGZvciBjaGFpbmluZyBtZXRob2QgY2FsbHMuXG4gKi9cbk1hdHJpeC5wcm90b3R5cGUuY2xvbmUgPSBmdW5jdGlvbiAoKVxue1xuICAgIHZhciBtYXRyaXggPSBuZXcgTWF0cml4KCk7XG4gICAgbWF0cml4LmEgPSB0aGlzLmE7XG4gICAgbWF0cml4LmIgPSB0aGlzLmI7XG4gICAgbWF0cml4LmMgPSB0aGlzLmM7XG4gICAgbWF0cml4LmQgPSB0aGlzLmQ7XG4gICAgbWF0cml4LnR4ID0gdGhpcy50eDtcbiAgICBtYXRyaXgudHkgPSB0aGlzLnR5O1xuXG4gICAgcmV0dXJuIG1hdHJpeDtcbn07XG5cbi8qKlxuICogQ2hhbmdlcyB0aGUgdmFsdWVzIG9mIHRoZSBnaXZlbiBtYXRyaXggdG8gYmUgdGhlIHNhbWUgYXMgdGhlIG9uZXMgaW4gdGhpcyBtYXRyaXhcbiAqXG4gKiBAcmV0dXJuIHtQSVhJLk1hdHJpeH0gVGhlIG1hdHJpeCBnaXZlbiBpbiBwYXJhbWV0ZXIgd2l0aCBpdHMgdmFsdWVzIHVwZGF0ZWQuXG4gKi9cbk1hdHJpeC5wcm90b3R5cGUuY29weSA9IGZ1bmN0aW9uIChtYXRyaXgpXG57XG4gICAgbWF0cml4LmEgPSB0aGlzLmE7XG4gICAgbWF0cml4LmIgPSB0aGlzLmI7XG4gICAgbWF0cml4LmMgPSB0aGlzLmM7XG4gICAgbWF0cml4LmQgPSB0aGlzLmQ7XG4gICAgbWF0cml4LnR4ID0gdGhpcy50eDtcbiAgICBtYXRyaXgudHkgPSB0aGlzLnR5O1xuXG4gICAgcmV0dXJuIG1hdHJpeDtcbn07XG5cbi8qKlxuICogQSBkZWZhdWx0IChpZGVudGl0eSkgbWF0cml4XG4gKlxuICogQHN0YXRpY1xuICogQGNvbnN0XG4gKi9cbk1hdHJpeC5JREVOVElUWSA9IG5ldyBNYXRyaXgoKTtcblxuLyoqXG4gKiBBIHRlbXAgbWF0cml4XG4gKlxuICogQHN0YXRpY1xuICogQGNvbnN0XG4gKi9cbk1hdHJpeC5URU1QX01BVFJJWCA9IG5ldyBNYXRyaXgoKTtcbiIsIi8qKlxuICogVGhlIFBvaW50IG9iamVjdCByZXByZXNlbnRzIGEgbG9jYXRpb24gaW4gYSB0d28tZGltZW5zaW9uYWwgY29vcmRpbmF0ZSBzeXN0ZW0sIHdoZXJlIHggcmVwcmVzZW50c1xuICogdGhlIGhvcml6b250YWwgYXhpcyBhbmQgeSByZXByZXNlbnRzIHRoZSB2ZXJ0aWNhbCBheGlzLlxuICpcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqIEBwYXJhbSBbeD0wXSB7bnVtYmVyfSBwb3NpdGlvbiBvZiB0aGUgcG9pbnQgb24gdGhlIHggYXhpc1xuICogQHBhcmFtIFt5PTBdIHtudW1iZXJ9IHBvc2l0aW9uIG9mIHRoZSBwb2ludCBvbiB0aGUgeSBheGlzXG4gKi9cbmZ1bmN0aW9uIFBvaW50KHgsIHkpXG57XG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDBcbiAgICAgKi9cbiAgICB0aGlzLnggPSB4IHx8IDA7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMFxuICAgICAqL1xuICAgIHRoaXMueSA9IHkgfHwgMDtcbn1cblxuUG9pbnQucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gUG9pbnQ7XG5tb2R1bGUuZXhwb3J0cyA9IFBvaW50O1xuXG4vKipcbiAqIENyZWF0ZXMgYSBjbG9uZSBvZiB0aGlzIHBvaW50XG4gKlxuICogQHJldHVybiB7UElYSS5Qb2ludH0gYSBjb3B5IG9mIHRoZSBwb2ludFxuICovXG5Qb2ludC5wcm90b3R5cGUuY2xvbmUgPSBmdW5jdGlvbiAoKVxue1xuICAgIHJldHVybiBuZXcgUG9pbnQodGhpcy54LCB0aGlzLnkpO1xufTtcblxuLyoqXG4gKiBDb3BpZXMgeCBhbmQgeSBmcm9tIHRoZSBnaXZlbiBwb2ludFxuICpcbiAqIEBwYXJhbSBwIHtQSVhJLlBvaW50fVxuICovXG5Qb2ludC5wcm90b3R5cGUuY29weSA9IGZ1bmN0aW9uIChwKSB7XG4gICAgdGhpcy5zZXQocC54LCBwLnkpO1xufTtcblxuLyoqXG4gKiBSZXR1cm5zIHRydWUgaWYgdGhlIGdpdmVuIHBvaW50IGlzIGVxdWFsIHRvIHRoaXMgcG9pbnRcbiAqXG4gKiBAcGFyYW0gcCB7UElYSS5Qb2ludH1cbiAqIEByZXR1cm5zIHtib29sZWFufVxuICovXG5Qb2ludC5wcm90b3R5cGUuZXF1YWxzID0gZnVuY3Rpb24gKHApIHtcbiAgICByZXR1cm4gKHAueCA9PT0gdGhpcy54KSAmJiAocC55ID09PSB0aGlzLnkpO1xufTtcblxuLyoqXG4gKiBTZXRzIHRoZSBwb2ludCB0byBhIG5ldyB4IGFuZCB5IHBvc2l0aW9uLlxuICogSWYgeSBpcyBvbWl0dGVkLCBib3RoIHggYW5kIHkgd2lsbCBiZSBzZXQgdG8geC5cbiAqXG4gKiBAcGFyYW0gW3g9MF0ge251bWJlcn0gcG9zaXRpb24gb2YgdGhlIHBvaW50IG9uIHRoZSB4IGF4aXNcbiAqIEBwYXJhbSBbeT0wXSB7bnVtYmVyfSBwb3NpdGlvbiBvZiB0aGUgcG9pbnQgb24gdGhlIHkgYXhpc1xuICovXG5Qb2ludC5wcm90b3R5cGUuc2V0ID0gZnVuY3Rpb24gKHgsIHkpXG57XG4gICAgdGhpcy54ID0geCB8fCAwO1xuICAgIHRoaXMueSA9IHkgfHwgKCAoeSAhPT0gMCkgPyB0aGlzLnggOiAwICkgO1xufTtcbiIsIi8qKlxuICogTWF0aCBjbGFzc2VzIGFuZCB1dGlsaXRpZXMgbWl4ZWQgaW50byBQSVhJIG5hbWVzcGFjZS5cbiAqXG4gKiBAbGVuZHMgUElYSVxuICovXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgICAvLyBUaGVzZSB3aWxsIGJlIG1peGVkIHRvIGJlIG1hZGUgcHVibGljbHkgYXZhaWxhYmxlLFxuICAgIC8vIHdoaWxlIHRoaXMgbW9kdWxlIGlzIHVzZWQgaW50ZXJuYWxseSBpbiBjb3JlXG4gICAgLy8gdG8gYXZvaWQgY2lyY3VsYXIgZGVwZW5kZW5jaWVzIGFuZCBjdXQgZG93biBvblxuICAgIC8vIGludGVybmFsIG1vZHVsZSByZXF1aXJlcy5cblxuICAgIFBvaW50OiAgICAgIHJlcXVpcmUoJy4vUG9pbnQnKSxcbiAgICBNYXRyaXg6ICAgICByZXF1aXJlKCcuL01hdHJpeCcpLFxuXG4gICAgQ2lyY2xlOiAgICAgcmVxdWlyZSgnLi9zaGFwZXMvQ2lyY2xlJyksXG4gICAgRWxsaXBzZTogICAgcmVxdWlyZSgnLi9zaGFwZXMvRWxsaXBzZScpLFxuICAgIFBvbHlnb246ICAgIHJlcXVpcmUoJy4vc2hhcGVzL1BvbHlnb24nKSxcbiAgICBSZWN0YW5nbGU6ICByZXF1aXJlKCcuL3NoYXBlcy9SZWN0YW5nbGUnKSxcbiAgICBSb3VuZGVkUmVjdGFuZ2xlOiByZXF1aXJlKCcuL3NoYXBlcy9Sb3VuZGVkUmVjdGFuZ2xlJylcbn07XG4iLCJ2YXIgUmVjdGFuZ2xlID0gcmVxdWlyZSgnLi9SZWN0YW5nbGUnKSxcbiAgICBDT05TVCA9IHJlcXVpcmUoJy4uLy4uL2NvbnN0Jyk7XG5cbi8qKlxuICogVGhlIENpcmNsZSBvYmplY3QgY2FuIGJlIHVzZWQgdG8gc3BlY2lmeSBhIGhpdCBhcmVhIGZvciBkaXNwbGF5T2JqZWN0c1xuICpcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqIEBwYXJhbSB4IHtudW1iZXJ9IFRoZSBYIGNvb3JkaW5hdGUgb2YgdGhlIGNlbnRlciBvZiB0aGlzIGNpcmNsZVxuICogQHBhcmFtIHkge251bWJlcn0gVGhlIFkgY29vcmRpbmF0ZSBvZiB0aGUgY2VudGVyIG9mIHRoaXMgY2lyY2xlXG4gKiBAcGFyYW0gcmFkaXVzIHtudW1iZXJ9IFRoZSByYWRpdXMgb2YgdGhlIGNpcmNsZVxuICovXG5mdW5jdGlvbiBDaXJjbGUoeCwgeSwgcmFkaXVzKVxue1xuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAwXG4gICAgICovXG4gICAgdGhpcy54ID0geCB8fCAwO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDBcbiAgICAgKi9cbiAgICB0aGlzLnkgPSB5IHx8IDA7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMFxuICAgICAqL1xuICAgIHRoaXMucmFkaXVzID0gcmFkaXVzIHx8IDA7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgdHlwZSBvZiB0aGUgb2JqZWN0LCBtYWlubHkgdXNlZCB0byBhdm9pZCBgaW5zdGFuY2VvZmAgY2hlY2tzXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy50eXBlID0gQ09OU1QuU0hBUEVTLkNJUkM7XG59XG5cbkNpcmNsZS5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBDaXJjbGU7XG5tb2R1bGUuZXhwb3J0cyA9IENpcmNsZTtcblxuLyoqXG4gKiBDcmVhdGVzIGEgY2xvbmUgb2YgdGhpcyBDaXJjbGUgaW5zdGFuY2VcbiAqXG4gKiBAcmV0dXJuIHtQSVhJLkNpcmNsZX0gYSBjb3B5IG9mIHRoZSBDaXJjbGVcbiAqL1xuQ2lyY2xlLnByb3RvdHlwZS5jbG9uZSA9IGZ1bmN0aW9uICgpXG57XG4gICAgcmV0dXJuIG5ldyBDaXJjbGUodGhpcy54LCB0aGlzLnksIHRoaXMucmFkaXVzKTtcbn07XG5cbi8qKlxuICogQ2hlY2tzIHdoZXRoZXIgdGhlIHggYW5kIHkgY29vcmRpbmF0ZXMgZ2l2ZW4gYXJlIGNvbnRhaW5lZCB3aXRoaW4gdGhpcyBjaXJjbGVcbiAqXG4gKiBAcGFyYW0geCB7bnVtYmVyfSBUaGUgWCBjb29yZGluYXRlIG9mIHRoZSBwb2ludCB0byB0ZXN0XG4gKiBAcGFyYW0geSB7bnVtYmVyfSBUaGUgWSBjb29yZGluYXRlIG9mIHRoZSBwb2ludCB0byB0ZXN0XG4gKiBAcmV0dXJuIHtib29sZWFufSBXaGV0aGVyIHRoZSB4L3kgY29vcmRpbmF0ZXMgYXJlIHdpdGhpbiB0aGlzIENpcmNsZVxuICovXG5DaXJjbGUucHJvdG90eXBlLmNvbnRhaW5zID0gZnVuY3Rpb24gKHgsIHkpXG57XG4gICAgaWYgKHRoaXMucmFkaXVzIDw9IDApXG4gICAge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgdmFyIGR4ID0gKHRoaXMueCAtIHgpLFxuICAgICAgICBkeSA9ICh0aGlzLnkgLSB5KSxcbiAgICAgICAgcjIgPSB0aGlzLnJhZGl1cyAqIHRoaXMucmFkaXVzO1xuXG4gICAgZHggKj0gZHg7XG4gICAgZHkgKj0gZHk7XG5cbiAgICByZXR1cm4gKGR4ICsgZHkgPD0gcjIpO1xufTtcblxuLyoqXG4qIFJldHVybnMgdGhlIGZyYW1pbmcgcmVjdGFuZ2xlIG9mIHRoZSBjaXJjbGUgYXMgYSBSZWN0YW5nbGUgb2JqZWN0XG4qXG4qIEByZXR1cm4ge1BJWEkuUmVjdGFuZ2xlfSB0aGUgZnJhbWluZyByZWN0YW5nbGVcbiovXG5DaXJjbGUucHJvdG90eXBlLmdldEJvdW5kcyA9IGZ1bmN0aW9uICgpXG57XG4gICAgcmV0dXJuIG5ldyBSZWN0YW5nbGUodGhpcy54IC0gdGhpcy5yYWRpdXMsIHRoaXMueSAtIHRoaXMucmFkaXVzLCB0aGlzLnJhZGl1cyAqIDIsIHRoaXMucmFkaXVzICogMik7XG59O1xuIiwidmFyIFJlY3RhbmdsZSA9IHJlcXVpcmUoJy4vUmVjdGFuZ2xlJyksXG4gICAgQ09OU1QgPSByZXF1aXJlKCcuLi8uLi9jb25zdCcpO1xuXG4vKipcbiAqIFRoZSBFbGxpcHNlIG9iamVjdCBjYW4gYmUgdXNlZCB0byBzcGVjaWZ5IGEgaGl0IGFyZWEgZm9yIGRpc3BsYXlPYmplY3RzXG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIHgge251bWJlcn0gVGhlIFggY29vcmRpbmF0ZSBvZiB0aGUgY2VudGVyIG9mIHRoZSBlbGxpcHNlXG4gKiBAcGFyYW0geSB7bnVtYmVyfSBUaGUgWSBjb29yZGluYXRlIG9mIHRoZSBjZW50ZXIgb2YgdGhlIGVsbGlwc2VcbiAqIEBwYXJhbSB3aWR0aCB7bnVtYmVyfSBUaGUgaGFsZiB3aWR0aCBvZiB0aGlzIGVsbGlwc2VcbiAqIEBwYXJhbSBoZWlnaHQge251bWJlcn0gVGhlIGhhbGYgaGVpZ2h0IG9mIHRoaXMgZWxsaXBzZVxuICovXG5mdW5jdGlvbiBFbGxpcHNlKHgsIHksIHdpZHRoLCBoZWlnaHQpXG57XG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDBcbiAgICAgKi9cbiAgICB0aGlzLnggPSB4IHx8IDA7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMFxuICAgICAqL1xuICAgIHRoaXMueSA9IHkgfHwgMDtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAwXG4gICAgICovXG4gICAgdGhpcy53aWR0aCA9IHdpZHRoIHx8IDA7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMFxuICAgICAqL1xuICAgIHRoaXMuaGVpZ2h0ID0gaGVpZ2h0IHx8IDA7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgdHlwZSBvZiB0aGUgb2JqZWN0LCBtYWlubHkgdXNlZCB0byBhdm9pZCBgaW5zdGFuY2VvZmAgY2hlY2tzXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy50eXBlID0gQ09OU1QuU0hBUEVTLkVMSVA7XG59XG5cbkVsbGlwc2UucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gRWxsaXBzZTtcbm1vZHVsZS5leHBvcnRzID0gRWxsaXBzZTtcblxuLyoqXG4gKiBDcmVhdGVzIGEgY2xvbmUgb2YgdGhpcyBFbGxpcHNlIGluc3RhbmNlXG4gKlxuICogQHJldHVybiB7UElYSS5FbGxpcHNlfSBhIGNvcHkgb2YgdGhlIGVsbGlwc2VcbiAqL1xuRWxsaXBzZS5wcm90b3R5cGUuY2xvbmUgPSBmdW5jdGlvbiAoKVxue1xuICAgIHJldHVybiBuZXcgRWxsaXBzZSh0aGlzLngsIHRoaXMueSwgdGhpcy53aWR0aCwgdGhpcy5oZWlnaHQpO1xufTtcblxuLyoqXG4gKiBDaGVja3Mgd2hldGhlciB0aGUgeCBhbmQgeSBjb29yZGluYXRlcyBnaXZlbiBhcmUgY29udGFpbmVkIHdpdGhpbiB0aGlzIGVsbGlwc2VcbiAqXG4gKiBAcGFyYW0geCB7bnVtYmVyfSBUaGUgWCBjb29yZGluYXRlIG9mIHRoZSBwb2ludCB0byB0ZXN0XG4gKiBAcGFyYW0geSB7bnVtYmVyfSBUaGUgWSBjb29yZGluYXRlIG9mIHRoZSBwb2ludCB0byB0ZXN0XG4gKiBAcmV0dXJuIHtib29sZWFufSBXaGV0aGVyIHRoZSB4L3kgY29vcmRzIGFyZSB3aXRoaW4gdGhpcyBlbGxpcHNlXG4gKi9cbkVsbGlwc2UucHJvdG90eXBlLmNvbnRhaW5zID0gZnVuY3Rpb24gKHgsIHkpXG57XG4gICAgaWYgKHRoaXMud2lkdGggPD0gMCB8fCB0aGlzLmhlaWdodCA8PSAwKVxuICAgIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIC8vbm9ybWFsaXplIHRoZSBjb29yZHMgdG8gYW4gZWxsaXBzZSB3aXRoIGNlbnRlciAwLDBcbiAgICB2YXIgbm9ybXggPSAoKHggLSB0aGlzLngpIC8gdGhpcy53aWR0aCksXG4gICAgICAgIG5vcm15ID0gKCh5IC0gdGhpcy55KSAvIHRoaXMuaGVpZ2h0KTtcblxuICAgIG5vcm14ICo9IG5vcm14O1xuICAgIG5vcm15ICo9IG5vcm15O1xuXG4gICAgcmV0dXJuIChub3JteCArIG5vcm15IDw9IDEpO1xufTtcblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBmcmFtaW5nIHJlY3RhbmdsZSBvZiB0aGUgZWxsaXBzZSBhcyBhIFJlY3RhbmdsZSBvYmplY3RcbiAqXG4gKiBAcmV0dXJuIHtQSVhJLlJlY3RhbmdsZX0gdGhlIGZyYW1pbmcgcmVjdGFuZ2xlXG4gKi9cbkVsbGlwc2UucHJvdG90eXBlLmdldEJvdW5kcyA9IGZ1bmN0aW9uICgpXG57XG4gICAgcmV0dXJuIG5ldyBSZWN0YW5nbGUodGhpcy54IC0gdGhpcy53aWR0aCwgdGhpcy55IC0gdGhpcy5oZWlnaHQsIHRoaXMud2lkdGgsIHRoaXMuaGVpZ2h0KTtcbn07XG4iLCJ2YXIgUG9pbnQgPSByZXF1aXJlKCcuLi9Qb2ludCcpLFxuICAgIENPTlNUID0gcmVxdWlyZSgnLi4vLi4vY29uc3QnKTtcblxuLyoqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gcG9pbnRzIHtQSVhJLlBvaW50W118bnVtYmVyW118Li4uUElYSS5Qb2ludHwuLi5udW1iZXJ9IFRoaXMgY2FuIGJlIGFuIGFycmF5IG9mIFBvaW50cyB0aGF0IGZvcm0gdGhlIHBvbHlnb24sXG4gKiAgICAgIGEgZmxhdCBhcnJheSBvZiBudW1iZXJzIHRoYXQgd2lsbCBiZSBpbnRlcnByZXRlZCBhcyBbeCx5LCB4LHksIC4uLl0sIG9yIHRoZSBhcmd1bWVudHMgcGFzc2VkIGNhbiBiZVxuICogICAgICBhbGwgdGhlIHBvaW50cyBvZiB0aGUgcG9seWdvbiBlLmcuIGBuZXcgUElYSS5Qb2x5Z29uKG5ldyBQSVhJLlBvaW50KCksIG5ldyBQSVhJLlBvaW50KCksIC4uLilgLCBvciB0aGVcbiAqICAgICAgYXJndW1lbnRzIHBhc3NlZCBjYW4gYmUgZmxhdCB4LHkgdmFsdWVzIGUuZy4gYG5ldyBQb2x5Z29uKHgseSwgeCx5LCB4LHksIC4uLilgIHdoZXJlIGB4YCBhbmQgYHlgIGFyZVxuICogICAgICBOdW1iZXJzLlxuICovXG5mdW5jdGlvbiBQb2x5Z29uKHBvaW50c18pXG57XG4gICAgLy8gcHJldmVudHMgYW4gYXJndW1lbnQgYXNzaWdubWVudCBkZW9wdFxuICAgIC8vIHNlZSBzZWN0aW9uIDMuMTogaHR0cHM6Ly9naXRodWIuY29tL3BldGthYW50b25vdi9ibHVlYmlyZC93aWtpL09wdGltaXphdGlvbi1raWxsZXJzIzMtbWFuYWdpbmctYXJndW1lbnRzXG4gICAgdmFyIHBvaW50cyA9IHBvaW50c187XG5cbiAgICAvL2lmIHBvaW50cyBpc24ndCBhbiBhcnJheSwgdXNlIGFyZ3VtZW50cyBhcyB0aGUgYXJyYXlcbiAgICBpZiAoIUFycmF5LmlzQXJyYXkocG9pbnRzKSlcbiAgICB7XG4gICAgICAgIC8vIHByZXZlbnRzIGFuIGFyZ3VtZW50IGxlYWsgZGVvcHRcbiAgICAgICAgLy8gc2VlIHNlY3Rpb24gMy4yOiBodHRwczovL2dpdGh1Yi5jb20vcGV0a2FhbnRvbm92L2JsdWViaXJkL3dpa2kvT3B0aW1pemF0aW9uLWtpbGxlcnMjMy1tYW5hZ2luZy1hcmd1bWVudHNcbiAgICAgICAgcG9pbnRzID0gbmV3IEFycmF5KGFyZ3VtZW50cy5sZW5ndGgpO1xuXG4gICAgICAgIGZvciAodmFyIGEgPSAwOyBhIDwgcG9pbnRzLmxlbmd0aDsgKythKSB7XG4gICAgICAgICAgICBwb2ludHNbYV0gPSBhcmd1bWVudHNbYV07XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBpZiB0aGlzIGlzIGFuIGFycmF5IG9mIHBvaW50cywgY29udmVydCBpdCB0byBhIGZsYXQgYXJyYXkgb2YgbnVtYmVyc1xuICAgIGlmIChwb2ludHNbMF0gaW5zdGFuY2VvZiBQb2ludClcbiAgICB7XG4gICAgICAgIHZhciBwID0gW107XG4gICAgICAgIGZvciAodmFyIGkgPSAwLCBpbCA9IHBvaW50cy5sZW5ndGg7IGkgPCBpbDsgaSsrKVxuICAgICAgICB7XG4gICAgICAgICAgICBwLnB1c2gocG9pbnRzW2ldLngsIHBvaW50c1tpXS55KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHBvaW50cyA9IHA7XG4gICAgfVxuXG4gICAgdGhpcy5jbG9zZWQgPSB0cnVlO1xuXG4gICAgLyoqXG4gICAgICogQW4gYXJyYXkgb2YgdGhlIHBvaW50cyBvZiB0aGlzIHBvbHlnb25cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcltdfVxuICAgICAqL1xuICAgIHRoaXMucG9pbnRzID0gcG9pbnRzO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHR5cGUgb2YgdGhlIG9iamVjdCwgbWFpbmx5IHVzZWQgdG8gYXZvaWQgYGluc3RhbmNlb2ZgIGNoZWNrc1xuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMudHlwZSA9IENPTlNULlNIQVBFUy5QT0xZO1xufVxuXG5Qb2x5Z29uLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFBvbHlnb247XG5tb2R1bGUuZXhwb3J0cyA9IFBvbHlnb247XG5cbi8qKlxuICogQ3JlYXRlcyBhIGNsb25lIG9mIHRoaXMgcG9seWdvblxuICpcbiAqIEByZXR1cm4ge1BJWEkuUG9seWdvbn0gYSBjb3B5IG9mIHRoZSBwb2x5Z29uXG4gKi9cblBvbHlnb24ucHJvdG90eXBlLmNsb25lID0gZnVuY3Rpb24gKClcbntcbiAgICByZXR1cm4gbmV3IFBvbHlnb24odGhpcy5wb2ludHMuc2xpY2UoKSk7XG59O1xuXG4vKipcbiAqIENoZWNrcyB3aGV0aGVyIHRoZSB4IGFuZCB5IGNvb3JkaW5hdGVzIHBhc3NlZCB0byB0aGlzIGZ1bmN0aW9uIGFyZSBjb250YWluZWQgd2l0aGluIHRoaXMgcG9seWdvblxuICpcbiAqIEBwYXJhbSB4IHtudW1iZXJ9IFRoZSBYIGNvb3JkaW5hdGUgb2YgdGhlIHBvaW50IHRvIHRlc3RcbiAqIEBwYXJhbSB5IHtudW1iZXJ9IFRoZSBZIGNvb3JkaW5hdGUgb2YgdGhlIHBvaW50IHRvIHRlc3RcbiAqIEByZXR1cm4ge2Jvb2xlYW59IFdoZXRoZXIgdGhlIHgveSBjb29yZGluYXRlcyBhcmUgd2l0aGluIHRoaXMgcG9seWdvblxuICovXG5Qb2x5Z29uLnByb3RvdHlwZS5jb250YWlucyA9IGZ1bmN0aW9uICh4LCB5KVxue1xuICAgIHZhciBpbnNpZGUgPSBmYWxzZTtcblxuICAgIC8vIHVzZSBzb21lIHJheWNhc3RpbmcgdG8gdGVzdCBoaXRzXG4gICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL3N1YnN0YWNrL3BvaW50LWluLXBvbHlnb24vYmxvYi9tYXN0ZXIvaW5kZXguanNcbiAgICB2YXIgbGVuZ3RoID0gdGhpcy5wb2ludHMubGVuZ3RoIC8gMjtcblxuICAgIGZvciAodmFyIGkgPSAwLCBqID0gbGVuZ3RoIC0gMTsgaSA8IGxlbmd0aDsgaiA9IGkrKylcbiAgICB7XG4gICAgICAgIHZhciB4aSA9IHRoaXMucG9pbnRzW2kgKiAyXSwgeWkgPSB0aGlzLnBvaW50c1tpICogMiArIDFdLFxuICAgICAgICAgICAgeGogPSB0aGlzLnBvaW50c1tqICogMl0sIHlqID0gdGhpcy5wb2ludHNbaiAqIDIgKyAxXSxcbiAgICAgICAgICAgIGludGVyc2VjdCA9ICgoeWkgPiB5KSAhPT0gKHlqID4geSkpICYmICh4IDwgKHhqIC0geGkpICogKHkgLSB5aSkgLyAoeWogLSB5aSkgKyB4aSk7XG5cbiAgICAgICAgaWYgKGludGVyc2VjdClcbiAgICAgICAge1xuICAgICAgICAgICAgaW5zaWRlID0gIWluc2lkZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBpbnNpZGU7XG59O1xuIiwidmFyIENPTlNUID0gcmVxdWlyZSgnLi4vLi4vY29uc3QnKTtcblxuLyoqXG4gKiB0aGUgUmVjdGFuZ2xlIG9iamVjdCBpcyBhbiBhcmVhIGRlZmluZWQgYnkgaXRzIHBvc2l0aW9uLCBhcyBpbmRpY2F0ZWQgYnkgaXRzIHRvcC1sZWZ0IGNvcm5lciBwb2ludCAoeCwgeSkgYW5kIGJ5IGl0cyB3aWR0aCBhbmQgaXRzIGhlaWdodC5cbiAqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0geCB7bnVtYmVyfSBUaGUgWCBjb29yZGluYXRlIG9mIHRoZSB1cHBlci1sZWZ0IGNvcm5lciBvZiB0aGUgcmVjdGFuZ2xlXG4gKiBAcGFyYW0geSB7bnVtYmVyfSBUaGUgWSBjb29yZGluYXRlIG9mIHRoZSB1cHBlci1sZWZ0IGNvcm5lciBvZiB0aGUgcmVjdGFuZ2xlXG4gKiBAcGFyYW0gd2lkdGgge251bWJlcn0gVGhlIG92ZXJhbGwgd2lkdGggb2YgdGhpcyByZWN0YW5nbGVcbiAqIEBwYXJhbSBoZWlnaHQge251bWJlcn0gVGhlIG92ZXJhbGwgaGVpZ2h0IG9mIHRoaXMgcmVjdGFuZ2xlXG4gKi9cbmZ1bmN0aW9uIFJlY3RhbmdsZSh4LCB5LCB3aWR0aCwgaGVpZ2h0KVxue1xuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAwXG4gICAgICovXG4gICAgdGhpcy54ID0geCB8fCAwO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDBcbiAgICAgKi9cbiAgICB0aGlzLnkgPSB5IHx8IDA7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMFxuICAgICAqL1xuICAgIHRoaXMud2lkdGggPSB3aWR0aCB8fCAwO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDBcbiAgICAgKi9cbiAgICB0aGlzLmhlaWdodCA9IGhlaWdodCB8fCAwO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHR5cGUgb2YgdGhlIG9iamVjdCwgbWFpbmx5IHVzZWQgdG8gYXZvaWQgYGluc3RhbmNlb2ZgIGNoZWNrc1xuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMudHlwZSA9IENPTlNULlNIQVBFUy5SRUNUO1xufVxuXG5SZWN0YW5nbGUucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gUmVjdGFuZ2xlO1xubW9kdWxlLmV4cG9ydHMgPSBSZWN0YW5nbGU7XG5cbi8qKlxuICogQSBjb25zdGFudCBlbXB0eSByZWN0YW5nbGUuXG4gKlxuICogQHN0YXRpY1xuICogQGNvbnN0YW50XG4gKi9cblJlY3RhbmdsZS5FTVBUWSA9IG5ldyBSZWN0YW5nbGUoMCwgMCwgMCwgMCk7XG5cblxuLyoqXG4gKiBDcmVhdGVzIGEgY2xvbmUgb2YgdGhpcyBSZWN0YW5nbGVcbiAqXG4gKiBAcmV0dXJuIHtQSVhJLlJlY3RhbmdsZX0gYSBjb3B5IG9mIHRoZSByZWN0YW5nbGVcbiAqL1xuUmVjdGFuZ2xlLnByb3RvdHlwZS5jbG9uZSA9IGZ1bmN0aW9uICgpXG57XG4gICAgcmV0dXJuIG5ldyBSZWN0YW5nbGUodGhpcy54LCB0aGlzLnksIHRoaXMud2lkdGgsIHRoaXMuaGVpZ2h0KTtcbn07XG5cbi8qKlxuICogQ2hlY2tzIHdoZXRoZXIgdGhlIHggYW5kIHkgY29vcmRpbmF0ZXMgZ2l2ZW4gYXJlIGNvbnRhaW5lZCB3aXRoaW4gdGhpcyBSZWN0YW5nbGVcbiAqXG4gKiBAcGFyYW0geCB7bnVtYmVyfSBUaGUgWCBjb29yZGluYXRlIG9mIHRoZSBwb2ludCB0byB0ZXN0XG4gKiBAcGFyYW0geSB7bnVtYmVyfSBUaGUgWSBjb29yZGluYXRlIG9mIHRoZSBwb2ludCB0byB0ZXN0XG4gKiBAcmV0dXJuIHtib29sZWFufSBXaGV0aGVyIHRoZSB4L3kgY29vcmRpbmF0ZXMgYXJlIHdpdGhpbiB0aGlzIFJlY3RhbmdsZVxuICovXG5SZWN0YW5nbGUucHJvdG90eXBlLmNvbnRhaW5zID0gZnVuY3Rpb24gKHgsIHkpXG57XG4gICAgaWYgKHRoaXMud2lkdGggPD0gMCB8fCB0aGlzLmhlaWdodCA8PSAwKVxuICAgIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGlmICh4ID49IHRoaXMueCAmJiB4IDwgdGhpcy54ICsgdGhpcy53aWR0aClcbiAgICB7XG4gICAgICAgIGlmICh5ID49IHRoaXMueSAmJiB5IDwgdGhpcy55ICsgdGhpcy5oZWlnaHQpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xufTtcbiIsInZhciBDT05TVCA9IHJlcXVpcmUoJy4uLy4uL2NvbnN0Jyk7XG5cbi8qKlxuICogVGhlIFJvdW5kZWQgUmVjdGFuZ2xlIG9iamVjdCBpcyBhbiBhcmVhIHRoYXQgaGFzIG5pY2Ugcm91bmRlZCBjb3JuZXJzLCBhcyBpbmRpY2F0ZWQgYnkgaXRzIHRvcC1sZWZ0IGNvcm5lciBwb2ludCAoeCwgeSkgYW5kIGJ5IGl0cyB3aWR0aCBhbmQgaXRzIGhlaWdodCBhbmQgaXRzIHJhZGl1cy5cbiAqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0geCB7bnVtYmVyfSBUaGUgWCBjb29yZGluYXRlIG9mIHRoZSB1cHBlci1sZWZ0IGNvcm5lciBvZiB0aGUgcm91bmRlZCByZWN0YW5nbGVcbiAqIEBwYXJhbSB5IHtudW1iZXJ9IFRoZSBZIGNvb3JkaW5hdGUgb2YgdGhlIHVwcGVyLWxlZnQgY29ybmVyIG9mIHRoZSByb3VuZGVkIHJlY3RhbmdsZVxuICogQHBhcmFtIHdpZHRoIHtudW1iZXJ9IFRoZSBvdmVyYWxsIHdpZHRoIG9mIHRoaXMgcm91bmRlZCByZWN0YW5nbGVcbiAqIEBwYXJhbSBoZWlnaHQge251bWJlcn0gVGhlIG92ZXJhbGwgaGVpZ2h0IG9mIHRoaXMgcm91bmRlZCByZWN0YW5nbGVcbiAqIEBwYXJhbSByYWRpdXMge251bWJlcn0gQ29udHJvbHMgdGhlIHJhZGl1cyBvZiB0aGUgcm91bmRlZCBjb3JuZXJzXG4gKi9cbmZ1bmN0aW9uIFJvdW5kZWRSZWN0YW5nbGUoeCwgeSwgd2lkdGgsIGhlaWdodCwgcmFkaXVzKVxue1xuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAwXG4gICAgICovXG4gICAgdGhpcy54ID0geCB8fCAwO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDBcbiAgICAgKi9cbiAgICB0aGlzLnkgPSB5IHx8IDA7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMFxuICAgICAqL1xuICAgIHRoaXMud2lkdGggPSB3aWR0aCB8fCAwO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDBcbiAgICAgKi9cbiAgICB0aGlzLmhlaWdodCA9IGhlaWdodCB8fCAwO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDIwXG4gICAgICovXG4gICAgdGhpcy5yYWRpdXMgPSByYWRpdXMgfHwgMjA7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgdHlwZSBvZiB0aGUgb2JqZWN0LCBtYWlubHkgdXNlZCB0byBhdm9pZCBgaW5zdGFuY2VvZmAgY2hlY2tzXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy50eXBlID0gQ09OU1QuU0hBUEVTLlJSRUM7XG59XG5cblJvdW5kZWRSZWN0YW5nbGUucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gUm91bmRlZFJlY3RhbmdsZTtcbm1vZHVsZS5leHBvcnRzID0gUm91bmRlZFJlY3RhbmdsZTtcblxuLyoqXG4gKiBDcmVhdGVzIGEgY2xvbmUgb2YgdGhpcyBSb3VuZGVkIFJlY3RhbmdsZVxuICpcbiAqIEByZXR1cm4ge1BJWEkuUm91bmRlZFJlY3RhbmdsZX0gYSBjb3B5IG9mIHRoZSByb3VuZGVkIHJlY3RhbmdsZVxuICovXG5Sb3VuZGVkUmVjdGFuZ2xlLnByb3RvdHlwZS5jbG9uZSA9IGZ1bmN0aW9uICgpXG57XG4gICAgcmV0dXJuIG5ldyBSb3VuZGVkUmVjdGFuZ2xlKHRoaXMueCwgdGhpcy55LCB0aGlzLndpZHRoLCB0aGlzLmhlaWdodCwgdGhpcy5yYWRpdXMpO1xufTtcblxuLyoqXG4gKiBDaGVja3Mgd2hldGhlciB0aGUgeCBhbmQgeSBjb29yZGluYXRlcyBnaXZlbiBhcmUgY29udGFpbmVkIHdpdGhpbiB0aGlzIFJvdW5kZWQgUmVjdGFuZ2xlXG4gKlxuICogQHBhcmFtIHgge251bWJlcn0gVGhlIFggY29vcmRpbmF0ZSBvZiB0aGUgcG9pbnQgdG8gdGVzdFxuICogQHBhcmFtIHkge251bWJlcn0gVGhlIFkgY29vcmRpbmF0ZSBvZiB0aGUgcG9pbnQgdG8gdGVzdFxuICogQHJldHVybiB7Ym9vbGVhbn0gV2hldGhlciB0aGUgeC95IGNvb3JkaW5hdGVzIGFyZSB3aXRoaW4gdGhpcyBSb3VuZGVkIFJlY3RhbmdsZVxuICovXG5Sb3VuZGVkUmVjdGFuZ2xlLnByb3RvdHlwZS5jb250YWlucyA9IGZ1bmN0aW9uICh4LCB5KVxue1xuICAgIGlmICh0aGlzLndpZHRoIDw9IDAgfHwgdGhpcy5oZWlnaHQgPD0gMClcbiAgICB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBpZiAoeCA+PSB0aGlzLnggJiYgeCA8PSB0aGlzLnggKyB0aGlzLndpZHRoKVxuICAgIHtcbiAgICAgICAgaWYgKHkgPj0gdGhpcy55ICYmIHkgPD0gdGhpcy55ICsgdGhpcy5oZWlnaHQpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xufTtcbiIsInZhciBDb250YWluZXIgPSByZXF1aXJlKCcuLi9kaXNwbGF5L0NvbnRhaW5lcicpLFxuICAgIENPTlNUID0gcmVxdWlyZSgnLi4vY29uc3QnKTtcblxuLyoqXG4gKiBUaGUgUGFydGljbGVDb250YWluZXIgY2xhc3MgaXMgYSByZWFsbHkgZmFzdCB2ZXJzaW9uIG9mIHRoZSBDb250YWluZXIgYnVpbHQgc29sZWx5IGZvciBzcGVlZCxcbiAqIHNvIHVzZSB3aGVuIHlvdSBuZWVkIGEgbG90IG9mIHNwcml0ZXMgb3IgcGFydGljbGVzLiBUaGUgdHJhZGVvZmYgb2YgdGhlIFBhcnRpY2xlQ29udGFpbmVyIGlzIHRoYXQgYWR2YW5jZWRcbiAqIGZ1bmN0aW9uYWxpdHkgd2lsbCBub3Qgd29yay4gUGFydGljbGVDb250YWluZXIgaW1wbGVtZW50cyBvbmx5IHRoZSBiYXNpYyBvYmplY3QgdHJhbnNmb3JtIChwb3NpdGlvbiwgc2NhbGUsIHJvdGF0aW9uKS5cbiAqIEFueSBvdGhlciBmdW5jdGlvbmFsaXR5IGxpa2UgdGludGluZywgbWFza2luZywgZXRjIHdpbGwgbm90IHdvcmsgb24gc3ByaXRlcyBpbiB0aGlzIGJhdGNoLlxuICpcbiAqIEl0J3MgZXh0cmVtZWx5IGVhc3kgdG8gdXNlIDpcbiAqXG4gKiBgYGBqc1xuICogdmFyIGNvbnRhaW5lciA9IG5ldyBQYXJ0aWNsZUNvbnRhaW5lcigpO1xuICpcbiAqIGZvciAodmFyIGkgPSAwOyBpIDwgMTAwOyArK2kpXG4gKiB7XG4gKiAgICAgdmFyIHNwcml0ZSA9IG5ldyBQSVhJLlNwcml0ZS5mcm9tSW1hZ2UoXCJteUltYWdlLnBuZ1wiKTtcbiAqICAgICBjb250YWluZXIuYWRkQ2hpbGQoc3ByaXRlKTtcbiAqIH1cbiAqIGBgYFxuICpcbiAqIEFuZCBoZXJlIHlvdSBoYXZlIGEgaHVuZHJlZCBzcHJpdGVzIHRoYXQgd2lsbCBiZSByZW5kZXJlciBhdCB0aGUgc3BlZWQgb2YgbGlnaHQuXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLkNvbnRhaW5lclxuICogQG1lbWJlcm9mIFBJWElcbiAqIEBwYXJhbSBbbWF4U2l6ZT0xNTAwMF0ge251bWJlcn0gVGhlIG1heGltdW0gbnVtYmVyIG9mIHBhcnRpY2xlcyB0aGF0IGNhbiBiZSByZW5kZXJlciBieSB0aGUgY29udGFpbmVyLlxuICogQHBhcmFtIFtwcm9wZXJ0aWVzXSB7b2JqZWN0fSBUaGUgcHJvcGVydGllcyBvZiBjaGlsZHJlbiB0aGF0IHNob3VsZCBiZSB1cGxvYWRlZCB0byB0aGUgZ3B1IGFuZCBhcHBsaWVkLlxuICogQHBhcmFtIFtwcm9wZXJ0aWVzLnNjYWxlPWZhbHNlXSB7Ym9vbGVhbn0gV2hlbiB0cnVlLCBzY2FsZSBiZSB1cGxvYWRlZCBhbmQgYXBwbGllZC5cbiAqIEBwYXJhbSBbcHJvcGVydGllcy5wb3NpdGlvbj10cnVlXSB7Ym9vbGVhbn0gV2hlbiB0cnVlLCBwb3NpdGlvbiBiZSB1cGxvYWRlZCBhbmQgYXBwbGllZC5cbiAqIEBwYXJhbSBbcHJvcGVydGllcy5yb3RhdGlvbj1mYWxzZV0ge2Jvb2xlYW59IFdoZW4gdHJ1ZSwgcm90YXRpb24gYmUgdXBsb2FkZWQgYW5kIGFwcGxpZWQuXG4gKiBAcGFyYW0gW3Byb3BlcnRpZXMudXZzPWZhbHNlXSB7Ym9vbGVhbn0gV2hlbiB0cnVlLCB1dnMgYmUgdXBsb2FkZWQgYW5kIGFwcGxpZWQuXG4gKiBAcGFyYW0gW3Byb3BlcnRpZXMuYWxwaGE9ZmFsc2VdIHtib29sZWFufSBXaGVuIHRydWUsIGFscGhhIGJlIHVwbG9hZGVkIGFuZCBhcHBsaWVkLlxuICogQHBhcmFtIFtiYXRjaFNpemU9MTUwMDBdIHtudW1iZXJ9IE51bWJlciBvZiBwYXJ0aWNsZXMgcGVyIGJhdGNoLlxuICovXG5mdW5jdGlvbiBQYXJ0aWNsZUNvbnRhaW5lcihtYXhTaXplLCBwcm9wZXJ0aWVzLCBiYXRjaFNpemUpXG57XG4gICAgQ29udGFpbmVyLmNhbGwodGhpcyk7XG5cbiAgICBiYXRjaFNpemUgPSBiYXRjaFNpemUgfHwgMTUwMDA7IC8vQ09OU1QuU1BSSVRFX0JBVENIX1NJWkU7IC8vIDIwMDAgaXMgYSBuaWNlIGJhbGFuY2UgYmV0d2VlbiBtb2JpbGUgLyBkZXNrdG9wXG4gICAgbWF4U2l6ZSA9IG1heFNpemUgfHwgMTUwMDA7XG5cbiAgICAvLyBNYWtpbmcgc3VyZSB0aGUgYmF0Y2ggc2l6ZSBpcyB2YWxpZFxuICAgIC8vIDY1NTM1IGlzIG1heCB2ZXJ0ZXggaW5kZXggaW4gdGhlIGluZGV4IGJ1ZmZlciAoc2VlIFBhcnRpY2xlUmVuZGVyZXIpXG4gICAgLy8gc28gbWF4IG51bWJlciBvZiBwYXJ0aWNsZXMgaXMgNjU1MzYgLyA0ID0gMTYzODRcbiAgICB2YXIgbWF4QmF0Y2hTaXplID0gMTYzODQ7XG4gICAgaWYgKGJhdGNoU2l6ZSA+IG1heEJhdGNoU2l6ZSkge1xuICAgICAgICBiYXRjaFNpemUgPSBtYXhCYXRjaFNpemU7XG4gICAgfVxuXG4gICAgaWYgKGJhdGNoU2l6ZSA+IG1heFNpemUpIHtcbiAgICAgICAgYmF0Y2hTaXplID0gbWF4U2l6ZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTZXQgcHJvcGVydGllcyB0byBiZSBkeW5hbWljICh0cnVlKSAvIHN0YXRpYyAoZmFsc2UpXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFuW119XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9wcm9wZXJ0aWVzID0gW2ZhbHNlLCB0cnVlLCBmYWxzZSwgZmFsc2UsIGZhbHNlXTtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX21heFNpemUgPSBtYXhTaXplO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fYmF0Y2hTaXplID0gYmF0Y2hTaXplO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7V2ViR0xCdWZmZXJ9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9idWZmZXJzID0gbnVsbDtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX2J1ZmZlclRvVXBkYXRlID0gMDtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICpcbiAgICAgKi9cbiAgICB0aGlzLmludGVyYWN0aXZlQ2hpbGRyZW4gPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBibGVuZCBtb2RlIHRvIGJlIGFwcGxpZWQgdG8gdGhlIHNwcml0ZS4gQXBwbHkgYSB2YWx1ZSBvZiBgUElYSS5CTEVORF9NT0RFUy5OT1JNQUxgIHRvIHJlc2V0IHRoZSBibGVuZCBtb2RlLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IFBJWEkuQkxFTkRfTU9ERVMuTk9STUFMXG4gICAgICogQHNlZSBQSVhJLkJMRU5EX01PREVTXG4gICAgICovXG4gICAgdGhpcy5ibGVuZE1vZGUgPSBDT05TVC5CTEVORF9NT0RFUy5OT1JNQUw7XG5cbiAgICAvKipcbiAgICAgKiBVc2VkIGZvciBjYW52YXMgcmVuZGVyZXJpbmcuIElmIHRydWUgdGhlbiB0aGUgZWxlbWVudHMgd2lsbCBiZSBwb3NpdGlvbmVkIGF0IHRoZSBuZWFyZXN0IHBpeGVsLiBUaGlzIHByb3ZpZGVzIGEgbmljZSBzcGVlZCBib29zdC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICogQGRlZmF1bHQgdHJ1ZTtcbiAgICAgKi9cbiAgICB0aGlzLnJvdW5kUGl4ZWxzID0gdHJ1ZTtcblxuICAgIHRoaXMuc2V0UHJvcGVydGllcyhwcm9wZXJ0aWVzKTtcbn1cblxuUGFydGljbGVDb250YWluZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShDb250YWluZXIucHJvdG90eXBlKTtcblBhcnRpY2xlQ29udGFpbmVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFBhcnRpY2xlQ29udGFpbmVyO1xubW9kdWxlLmV4cG9ydHMgPSBQYXJ0aWNsZUNvbnRhaW5lcjtcblxuLyoqXG4gKiBTZXRzIHRoZSBwcml2YXRlIHByb3BlcnRpZXMgYXJyYXkgdG8gZHluYW1pYyAvIHN0YXRpYyBiYXNlZCBvbiB0aGUgcGFzc2VkIHByb3BlcnRpZXMgb2JqZWN0XG4gKlxuICogQHBhcmFtIHByb3BlcnRpZXMge29iamVjdH0gVGhlIHByb3BlcnRpZXMgdG8gYmUgdXBsb2FkZWRcbiAqL1xuUGFydGljbGVDb250YWluZXIucHJvdG90eXBlLnNldFByb3BlcnRpZXMgPSBmdW5jdGlvbihwcm9wZXJ0aWVzKVxue1xuICAgIGlmICggcHJvcGVydGllcyApIHtcbiAgICAgICAgdGhpcy5fcHJvcGVydGllc1swXSA9ICdzY2FsZScgaW4gcHJvcGVydGllcyA/ICEhcHJvcGVydGllcy5zY2FsZSA6IHRoaXMuX3Byb3BlcnRpZXNbMF07XG4gICAgICAgIHRoaXMuX3Byb3BlcnRpZXNbMV0gPSAncG9zaXRpb24nIGluIHByb3BlcnRpZXMgPyAhIXByb3BlcnRpZXMucG9zaXRpb24gOiB0aGlzLl9wcm9wZXJ0aWVzWzFdO1xuICAgICAgICB0aGlzLl9wcm9wZXJ0aWVzWzJdID0gJ3JvdGF0aW9uJyBpbiBwcm9wZXJ0aWVzID8gISFwcm9wZXJ0aWVzLnJvdGF0aW9uIDogdGhpcy5fcHJvcGVydGllc1syXTtcbiAgICAgICAgdGhpcy5fcHJvcGVydGllc1szXSA9ICd1dnMnIGluIHByb3BlcnRpZXMgPyAhIXByb3BlcnRpZXMudXZzIDogdGhpcy5fcHJvcGVydGllc1szXTtcbiAgICAgICAgdGhpcy5fcHJvcGVydGllc1s0XSA9ICdhbHBoYScgaW4gcHJvcGVydGllcyA/ICEhcHJvcGVydGllcy5hbHBoYSA6IHRoaXMuX3Byb3BlcnRpZXNbNF07XG4gICAgfVxufTtcblxuLyoqXG4gKiBVcGRhdGVzIHRoZSBvYmplY3QgdHJhbnNmb3JtIGZvciByZW5kZXJpbmdcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5QYXJ0aWNsZUNvbnRhaW5lci5wcm90b3R5cGUudXBkYXRlVHJhbnNmb3JtID0gZnVuY3Rpb24gKClcbntcblxuICAgIC8vIFRPRE8gZG9uJ3QgbmVlZCB0byFcbiAgICB0aGlzLmRpc3BsYXlPYmplY3RVcGRhdGVUcmFuc2Zvcm0oKTtcbiAgICAvLyAgUElYSS5Db250YWluZXIucHJvdG90eXBlLnVwZGF0ZVRyYW5zZm9ybS5jYWxsKCB0aGlzICk7XG59O1xuXG4vKipcbiAqIFJlbmRlcnMgdGhlIGNvbnRhaW5lciB1c2luZyB0aGUgV2ViR0wgcmVuZGVyZXJcbiAqXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcn0gVGhlIHdlYmdsIHJlbmRlcmVyXG4gKiBAcHJpdmF0ZVxuICovXG5QYXJ0aWNsZUNvbnRhaW5lci5wcm90b3R5cGUucmVuZGVyV2ViR0wgPSBmdW5jdGlvbiAocmVuZGVyZXIpXG57XG4gICAgaWYgKCF0aGlzLnZpc2libGUgfHwgdGhpcy53b3JsZEFscGhhIDw9IDAgfHwgIXRoaXMuY2hpbGRyZW4ubGVuZ3RoIHx8ICF0aGlzLnJlbmRlcmFibGUpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgcmVuZGVyZXIuc2V0T2JqZWN0UmVuZGVyZXIoIHJlbmRlcmVyLnBsdWdpbnMucGFydGljbGUgKTtcbiAgICByZW5kZXJlci5wbHVnaW5zLnBhcnRpY2xlLnJlbmRlciggdGhpcyApO1xufTtcblxuLyoqXG4gKiBTZXQgdGhlIGZsYWcgdGhhdCBzdGF0aWMgZGF0YSBzaG91bGQgYmUgdXBkYXRlZCB0byB0cnVlXG4gKlxuICogQHByaXZhdGVcbiAqL1xuUGFydGljbGVDb250YWluZXIucHJvdG90eXBlLm9uQ2hpbGRyZW5DaGFuZ2UgPSBmdW5jdGlvbiAoc21hbGxlc3RDaGlsZEluZGV4KVxue1xuICAgIHZhciBidWZmZXJJbmRleCA9IE1hdGguZmxvb3Ioc21hbGxlc3RDaGlsZEluZGV4IC8gdGhpcy5fYmF0Y2hTaXplKTtcbiAgICBpZiAoYnVmZmVySW5kZXggPCB0aGlzLl9idWZmZXJUb1VwZGF0ZSkge1xuICAgICAgICB0aGlzLl9idWZmZXJUb1VwZGF0ZSA9IGJ1ZmZlckluZGV4O1xuICAgIH1cbn07XG5cbi8qKlxuICogUmVuZGVycyB0aGUgb2JqZWN0IHVzaW5nIHRoZSBDYW52YXMgcmVuZGVyZXJcbiAqXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuQ2FudmFzUmVuZGVyZXJ9IFRoZSBjYW52YXMgcmVuZGVyZXJcbiAqIEBwcml2YXRlXG4gKi9cblBhcnRpY2xlQ29udGFpbmVyLnByb3RvdHlwZS5yZW5kZXJDYW52YXMgPSBmdW5jdGlvbiAocmVuZGVyZXIpXG57XG4gICAgaWYgKCF0aGlzLnZpc2libGUgfHwgdGhpcy53b3JsZEFscGhhIDw9IDAgfHwgIXRoaXMuY2hpbGRyZW4ubGVuZ3RoIHx8ICF0aGlzLnJlbmRlcmFibGUpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFyIGNvbnRleHQgPSByZW5kZXJlci5jb250ZXh0O1xuICAgIHZhciB0cmFuc2Zvcm0gPSB0aGlzLndvcmxkVHJhbnNmb3JtO1xuICAgIHZhciBpc1JvdGF0ZWQgPSB0cnVlO1xuXG4gICAgdmFyIHBvc2l0aW9uWCA9IDA7XG4gICAgdmFyIHBvc2l0aW9uWSA9IDA7XG5cbiAgICB2YXIgZmluYWxXaWR0aCA9IDA7XG4gICAgdmFyIGZpbmFsSGVpZ2h0ID0gMDtcblxuICAgIHZhciBjb21wb3NpdGVPcGVyYXRpb24gPSByZW5kZXJlci5ibGVuZE1vZGVzW3RoaXMuYmxlbmRNb2RlXTtcbiAgICBpZiAoY29tcG9zaXRlT3BlcmF0aW9uICE9PSBjb250ZXh0Lmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbilcbiAgICB7XG4gICAgICAgIGNvbnRleHQuZ2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uID0gY29tcG9zaXRlT3BlcmF0aW9uO1xuICAgIH1cblxuICAgIGNvbnRleHQuZ2xvYmFsQWxwaGEgPSB0aGlzLndvcmxkQWxwaGE7XG5cbiAgICB0aGlzLmRpc3BsYXlPYmplY3RVcGRhdGVUcmFuc2Zvcm0oKTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5jaGlsZHJlbi5sZW5ndGg7ICsraSlcbiAgICB7XG4gICAgICAgIHZhciBjaGlsZCA9IHRoaXMuY2hpbGRyZW5baV07XG5cbiAgICAgICAgaWYgKCFjaGlsZC52aXNpYmxlKVxuICAgICAgICB7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBmcmFtZSA9IGNoaWxkLnRleHR1cmUuZnJhbWU7XG5cbiAgICAgICAgY29udGV4dC5nbG9iYWxBbHBoYSA9IHRoaXMud29ybGRBbHBoYSAqIGNoaWxkLmFscGhhO1xuXG4gICAgICAgIGlmIChjaGlsZC5yb3RhdGlvbiAlIChNYXRoLlBJICogMikgPT09IDApXG4gICAgICAgIHtcbiAgICAgICAgICAgIC8vIHRoaXMgaXMgdGhlIGZhc3Rlc3QgIHdheSB0byBvcHRpbWlzZSEgLSBpZiByb3RhdGlvbiBpcyAwIHRoZW4gd2UgY2FuIGF2b2lkIGFueSBraW5kIG9mIHNldFRyYW5zZm9ybSBjYWxsXG4gICAgICAgICAgICBpZiAoaXNSb3RhdGVkKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGNvbnRleHQuc2V0VHJhbnNmb3JtKFxuICAgICAgICAgICAgICAgICAgICB0cmFuc2Zvcm0uYSxcbiAgICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtLmIsXG4gICAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybS5jLFxuICAgICAgICAgICAgICAgICAgICB0cmFuc2Zvcm0uZCxcbiAgICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtLnR4LFxuICAgICAgICAgICAgICAgICAgICB0cmFuc2Zvcm0udHlcbiAgICAgICAgICAgICAgICApO1xuXG4gICAgICAgICAgICAgICAgaXNSb3RhdGVkID0gZmFsc2U7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHBvc2l0aW9uWCA9ICgoY2hpbGQuYW5jaG9yLngpICogKC1mcmFtZS53aWR0aCAqIGNoaWxkLnNjYWxlLngpICsgY2hpbGQucG9zaXRpb24ueCAgKyAwLjUpO1xuICAgICAgICAgICAgcG9zaXRpb25ZID0gKChjaGlsZC5hbmNob3IueSkgKiAoLWZyYW1lLmhlaWdodCAqIGNoaWxkLnNjYWxlLnkpICsgY2hpbGQucG9zaXRpb24ueSAgKyAwLjUpO1xuXG4gICAgICAgICAgICBmaW5hbFdpZHRoID0gZnJhbWUud2lkdGggKiBjaGlsZC5zY2FsZS54O1xuICAgICAgICAgICAgZmluYWxIZWlnaHQgPSBmcmFtZS5oZWlnaHQgKiBjaGlsZC5zY2FsZS55O1xuXG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgICBpZiAoIWlzUm90YXRlZClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBpc1JvdGF0ZWQgPSB0cnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjaGlsZC5kaXNwbGF5T2JqZWN0VXBkYXRlVHJhbnNmb3JtKCk7XG5cbiAgICAgICAgICAgIHZhciBjaGlsZFRyYW5zZm9ybSA9IGNoaWxkLndvcmxkVHJhbnNmb3JtO1xuXG4gICAgICAgICAgICBpZiAocmVuZGVyZXIucm91bmRQaXhlbHMpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29udGV4dC5zZXRUcmFuc2Zvcm0oXG4gICAgICAgICAgICAgICAgICAgIGNoaWxkVHJhbnNmb3JtLmEsXG4gICAgICAgICAgICAgICAgICAgIGNoaWxkVHJhbnNmb3JtLmIsXG4gICAgICAgICAgICAgICAgICAgIGNoaWxkVHJhbnNmb3JtLmMsXG4gICAgICAgICAgICAgICAgICAgIGNoaWxkVHJhbnNmb3JtLmQsXG4gICAgICAgICAgICAgICAgICAgIGNoaWxkVHJhbnNmb3JtLnR4IHwgMCxcbiAgICAgICAgICAgICAgICAgICAgY2hpbGRUcmFuc2Zvcm0udHkgfCAwXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb250ZXh0LnNldFRyYW5zZm9ybShcbiAgICAgICAgICAgICAgICAgICAgY2hpbGRUcmFuc2Zvcm0uYSxcbiAgICAgICAgICAgICAgICAgICAgY2hpbGRUcmFuc2Zvcm0uYixcbiAgICAgICAgICAgICAgICAgICAgY2hpbGRUcmFuc2Zvcm0uYyxcbiAgICAgICAgICAgICAgICAgICAgY2hpbGRUcmFuc2Zvcm0uZCxcbiAgICAgICAgICAgICAgICAgICAgY2hpbGRUcmFuc2Zvcm0udHgsXG4gICAgICAgICAgICAgICAgICAgIGNoaWxkVHJhbnNmb3JtLnR5XG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcG9zaXRpb25YID0gKChjaGlsZC5hbmNob3IueCkgKiAoLWZyYW1lLndpZHRoKSArIDAuNSk7XG4gICAgICAgICAgICBwb3NpdGlvblkgPSAoKGNoaWxkLmFuY2hvci55KSAqICgtZnJhbWUuaGVpZ2h0KSArIDAuNSk7XG5cbiAgICAgICAgICAgIGZpbmFsV2lkdGggPSBmcmFtZS53aWR0aDtcbiAgICAgICAgICAgIGZpbmFsSGVpZ2h0ID0gZnJhbWUuaGVpZ2h0O1xuICAgICAgICB9XG5cbiAgICAgICAgY29udGV4dC5kcmF3SW1hZ2UoXG4gICAgICAgICAgICBjaGlsZC50ZXh0dXJlLmJhc2VUZXh0dXJlLnNvdXJjZSxcbiAgICAgICAgICAgIGZyYW1lLngsXG4gICAgICAgICAgICBmcmFtZS55LFxuICAgICAgICAgICAgZnJhbWUud2lkdGgsXG4gICAgICAgICAgICBmcmFtZS5oZWlnaHQsXG4gICAgICAgICAgICBwb3NpdGlvblgsXG4gICAgICAgICAgICBwb3NpdGlvblksXG4gICAgICAgICAgICBmaW5hbFdpZHRoLFxuICAgICAgICAgICAgZmluYWxIZWlnaHRcbiAgICAgICAgKTtcbiAgICB9XG59O1xuXG4vKipcbiAqIERlc3Ryb3lzIHRoZSBjb250YWluZXJcbiAqXG4gKiBAcGFyYW0gW2Rlc3Ryb3lDaGlsZHJlbj1mYWxzZV0ge2Jvb2xlYW59IGlmIHNldCB0byB0cnVlLCBhbGwgdGhlIGNoaWxkcmVuIHdpbGwgaGF2ZSB0aGVpciBkZXN0cm95IG1ldGhvZCBjYWxsZWQgYXMgd2VsbFxuICovXG5QYXJ0aWNsZUNvbnRhaW5lci5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uICgpIHtcbiAgICBDb250YWluZXIucHJvdG90eXBlLmRlc3Ryb3kuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcblxuICAgIGlmICh0aGlzLl9idWZmZXJzKSB7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5fYnVmZmVycy5sZW5ndGg7ICsraSkge1xuICAgICAgICAgICAgdGhpcy5fYnVmZmVyc1tpXS5kZXN0cm95KCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLl9wcm9wZXJ0aWVzID0gbnVsbDtcbiAgICB0aGlzLl9idWZmZXJzID0gbnVsbDtcbn07XG4iLCJcbi8qKlxuICogQGF1dGhvciBNYXQgR3JvdmVzXG4gKlxuICogQmlnIHRoYW5rcyB0byB0aGUgdmVyeSBjbGV2ZXIgTWF0dCBEZXNMYXVyaWVycyA8bWF0dGRlc2w+IGh0dHBzOi8vZ2l0aHViLmNvbS9tYXR0ZGVzbC9cbiAqIGZvciBjcmVhdGluZyB0aGUgb3JpZ2luYWwgcGl4aSB2ZXJzaW9uIVxuICogQWxzbyBhIHRoYW5rcyB0byBodHRwczovL2dpdGh1Yi5jb20vYmNoZXZhbGllciBmb3IgdHdlYWtpbmcgdGhlIHRpbnQgYW5kIGFscGhhIHNvIHRoYXQgdGhleSBub3cgc2hhcmUgNCBieXRlcyBvbiB0aGUgdmVydGV4IGJ1ZmZlclxuICpcbiAqIEhlYXZpbHkgaW5zcGlyZWQgYnkgTGliR0RYJ3MgUGFydGljbGVCdWZmZXI6XG4gKiBodHRwczovL2dpdGh1Yi5jb20vbGliZ2R4L2xpYmdkeC9ibG9iL21hc3Rlci9nZHgvc3JjL2NvbS9iYWRsb2dpYy9nZHgvZ3JhcGhpY3MvZzJkL1BhcnRpY2xlQnVmZmVyLmphdmFcbiAqL1xuXG4vKipcbiAqIFRoZSBwYXJ0aWNsZSBidWZmZXIgbWFuYWdlcyB0aGUgc3RhdGljIGFuZCBkeW5hbWljIGJ1ZmZlcnMgZm9yIGEgcGFydGljbGUgY29udGFpbmVyLlxuICpcbiAqIEBjbGFzc1xuICogQHByaXZhdGVcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKi9cbmZ1bmN0aW9uIFBhcnRpY2xlQnVmZmVyKGdsLCBwcm9wZXJ0aWVzLCBkeW5hbWljUHJvcGVydHlGbGFncywgc2l6ZSlcbntcbiAgICAvKipcbiAgICAgKiBUaGUgY3VycmVudCBXZWJHTCBkcmF3aW5nIGNvbnRleHQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtXZWJHTFJlbmRlcmluZ0NvbnRleHR9XG4gICAgICovXG4gICAgdGhpcy5nbCA9IGdsO1xuXG4gICAgLyoqXG4gICAgICogU2l6ZSBvZiBhIHNpbmdsZSB2ZXJ0ZXguXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy52ZXJ0U2l6ZSA9IDI7XG5cbiAgICAvKipcbiAgICAgKiBTaXplIG9mIGEgc2luZ2xlIHZlcnRleCBpbiBieXRlcy5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLnZlcnRCeXRlU2l6ZSA9IHRoaXMudmVydFNpemUgKiA0O1xuXG4gICAgLyoqXG4gICAgICogVGhlIG51bWJlciBvZiBwYXJ0aWNsZXMgdGhlIGJ1ZmZlciBjYW4gaG9sZFxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMuc2l6ZSA9IHNpemU7XG5cbiAgICAvKipcbiAgICAgKiBBIGxpc3Qgb2YgdGhlIHByb3BlcnRpZXMgdGhhdCBhcmUgZHluYW1pYy5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge29iamVjdFtdfVxuICAgICAqL1xuICAgIHRoaXMuZHluYW1pY1Byb3BlcnRpZXMgPSBbXTtcblxuICAgIC8qKlxuICAgICAqIEEgbGlzdCBvZiB0aGUgcHJvcGVydGllcyB0aGF0IGFyZSBzdGF0aWMuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtvYmplY3RbXX1cbiAgICAgKi9cbiAgICB0aGlzLnN0YXRpY1Byb3BlcnRpZXMgPSBbXTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcGVydGllcy5sZW5ndGg7IGkrKylcbiAgICB7XG4gICAgICAgIHZhciBwcm9wZXJ0eSA9IHByb3BlcnRpZXNbaV07XG5cbiAgICAgICAgaWYoZHluYW1pY1Byb3BlcnR5RmxhZ3NbaV0pXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuZHluYW1pY1Byb3BlcnRpZXMucHVzaChwcm9wZXJ0eSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnN0YXRpY1Byb3BlcnRpZXMucHVzaChwcm9wZXJ0eSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLnN0YXRpY1N0cmlkZSA9IDA7XG4gICAgdGhpcy5zdGF0aWNCdWZmZXIgPSBudWxsO1xuICAgIHRoaXMuc3RhdGljRGF0YSA9IG51bGw7XG5cbiAgICB0aGlzLmR5bmFtaWNTdHJpZGUgPSAwO1xuICAgIHRoaXMuZHluYW1pY0J1ZmZlciA9IG51bGw7XG4gICAgdGhpcy5keW5hbWljRGF0YSA9IG51bGw7XG5cbiAgICB0aGlzLmluaXRCdWZmZXJzKCk7XG5cbn1cblxuUGFydGljbGVCdWZmZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gUGFydGljbGVCdWZmZXI7XG5tb2R1bGUuZXhwb3J0cyA9IFBhcnRpY2xlQnVmZmVyO1xuXG4vKipcbiAqIFNldHMgdXAgdGhlIHJlbmRlcmVyIGNvbnRleHQgYW5kIG5lY2Vzc2FyeSBidWZmZXJzLlxuICpcbiAqIEBwcml2YXRlXG4gKi9cblBhcnRpY2xlQnVmZmVyLnByb3RvdHlwZS5pbml0QnVmZmVycyA9IGZ1bmN0aW9uICgpXG57XG4gICAgdmFyIGdsID0gdGhpcy5nbDtcbiAgICB2YXIgaTtcbiAgICB2YXIgcHJvcGVydHk7XG5cbiAgICB2YXIgZHluYW1pY09mZnNldCA9IDA7XG4gICAgdGhpcy5keW5hbWljU3RyaWRlID0gMDtcblxuICAgIGZvciAoaSA9IDA7IGkgPCB0aGlzLmR5bmFtaWNQcm9wZXJ0aWVzLmxlbmd0aDsgaSsrKVxuICAgIHtcbiAgICAgICAgcHJvcGVydHkgPSB0aGlzLmR5bmFtaWNQcm9wZXJ0aWVzW2ldO1xuXG4gICAgICAgIHByb3BlcnR5Lm9mZnNldCA9IGR5bmFtaWNPZmZzZXQ7XG4gICAgICAgIGR5bmFtaWNPZmZzZXQgKz0gcHJvcGVydHkuc2l6ZTtcbiAgICAgICAgdGhpcy5keW5hbWljU3RyaWRlICs9IHByb3BlcnR5LnNpemU7XG4gICAgfVxuXG4gICAgdGhpcy5keW5hbWljRGF0YSA9IG5ldyBGbG9hdDMyQXJyYXkoIHRoaXMuc2l6ZSAqIHRoaXMuZHluYW1pY1N0cmlkZSAqIDQpO1xuICAgIHRoaXMuZHluYW1pY0J1ZmZlciA9IGdsLmNyZWF0ZUJ1ZmZlcigpO1xuXG4gICAgZ2wuYmluZEJ1ZmZlcihnbC5BUlJBWV9CVUZGRVIsIHRoaXMuZHluYW1pY0J1ZmZlcik7XG4gICAgZ2wuYnVmZmVyRGF0YShnbC5BUlJBWV9CVUZGRVIsIHRoaXMuZHluYW1pY0RhdGEsIGdsLkRZTkFNSUNfRFJBVyk7XG5cblxuICAgIC8vIHN0YXRpYyAvL1xuICAgIHZhciBzdGF0aWNPZmZzZXQgPSAwO1xuICAgIHRoaXMuc3RhdGljU3RyaWRlID0gMDtcblxuICAgIGZvciAoaSA9IDA7IGkgPCB0aGlzLnN0YXRpY1Byb3BlcnRpZXMubGVuZ3RoOyBpKyspXG4gICAge1xuICAgICAgICBwcm9wZXJ0eSA9IHRoaXMuc3RhdGljUHJvcGVydGllc1tpXTtcblxuICAgICAgICBwcm9wZXJ0eS5vZmZzZXQgPSBzdGF0aWNPZmZzZXQ7XG4gICAgICAgIHN0YXRpY09mZnNldCArPSBwcm9wZXJ0eS5zaXplO1xuICAgICAgICB0aGlzLnN0YXRpY1N0cmlkZSArPSBwcm9wZXJ0eS5zaXplO1xuICAgIH1cblxuICAgIHRoaXMuc3RhdGljRGF0YSA9IG5ldyBGbG9hdDMyQXJyYXkoIHRoaXMuc2l6ZSAqIHRoaXMuc3RhdGljU3RyaWRlICogNCk7XG4gICAgdGhpcy5zdGF0aWNCdWZmZXIgPSBnbC5jcmVhdGVCdWZmZXIoKTtcblxuICAgIGdsLmJpbmRCdWZmZXIoZ2wuQVJSQVlfQlVGRkVSLCB0aGlzLnN0YXRpY0J1ZmZlcik7XG4gICAgZ2wuYnVmZmVyRGF0YShnbC5BUlJBWV9CVUZGRVIsIHRoaXMuc3RhdGljRGF0YSwgZ2wuRFlOQU1JQ19EUkFXKTtcbn07XG5cbi8qKlxuICogVXBsb2FkcyB0aGUgZHluYW1pYyBwcm9wZXJ0aWVzLlxuICpcbiAqL1xuUGFydGljbGVCdWZmZXIucHJvdG90eXBlLnVwbG9hZER5bmFtaWMgPSBmdW5jdGlvbihjaGlsZHJlbiwgc3RhcnRJbmRleCwgYW1vdW50KVxue1xuICAgIHZhciBnbCA9IHRoaXMuZ2w7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuZHluYW1pY1Byb3BlcnRpZXMubGVuZ3RoOyBpKyspXG4gICAge1xuICAgICAgICB2YXIgcHJvcGVydHkgPSB0aGlzLmR5bmFtaWNQcm9wZXJ0aWVzW2ldO1xuICAgICAgICBwcm9wZXJ0eS51cGxvYWRGdW5jdGlvbihjaGlsZHJlbiwgc3RhcnRJbmRleCwgYW1vdW50LCB0aGlzLmR5bmFtaWNEYXRhLCB0aGlzLmR5bmFtaWNTdHJpZGUsIHByb3BlcnR5Lm9mZnNldCk7XG4gICAgfVxuXG4gICAgZ2wuYmluZEJ1ZmZlcihnbC5BUlJBWV9CVUZGRVIsIHRoaXMuZHluYW1pY0J1ZmZlcik7XG4gICAgZ2wuYnVmZmVyU3ViRGF0YShnbC5BUlJBWV9CVUZGRVIsIDAsIHRoaXMuZHluYW1pY0RhdGEpO1xufTtcblxuLyoqXG4gKiBVcGxvYWRzIHRoZSBzdGF0aWMgcHJvcGVydGllcy5cbiAqXG4gKi9cblBhcnRpY2xlQnVmZmVyLnByb3RvdHlwZS51cGxvYWRTdGF0aWMgPSBmdW5jdGlvbihjaGlsZHJlbiwgc3RhcnRJbmRleCwgYW1vdW50KVxue1xuICAgIHZhciBnbCA9IHRoaXMuZ2w7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuc3RhdGljUHJvcGVydGllcy5sZW5ndGg7IGkrKylcbiAgICB7XG4gICAgICAgIHZhciBwcm9wZXJ0eSA9IHRoaXMuc3RhdGljUHJvcGVydGllc1tpXTtcbiAgICAgICAgcHJvcGVydHkudXBsb2FkRnVuY3Rpb24oY2hpbGRyZW4sIHN0YXJ0SW5kZXgsIGFtb3VudCwgdGhpcy5zdGF0aWNEYXRhLCB0aGlzLnN0YXRpY1N0cmlkZSwgcHJvcGVydHkub2Zmc2V0KTtcbiAgICB9XG5cbiAgICBnbC5iaW5kQnVmZmVyKGdsLkFSUkFZX0JVRkZFUiwgdGhpcy5zdGF0aWNCdWZmZXIpO1xuICAgIGdsLmJ1ZmZlclN1YkRhdGEoZ2wuQVJSQVlfQlVGRkVSLCAwLCB0aGlzLnN0YXRpY0RhdGEpO1xufTtcblxuLyoqXG4gKiBCaW5kcyB0aGUgYnVmZmVycyB0byB0aGUgR1BVXG4gKlxuICovXG5QYXJ0aWNsZUJ1ZmZlci5wcm90b3R5cGUuYmluZCA9IGZ1bmN0aW9uICgpXG57XG4gICAgdmFyIGdsID0gdGhpcy5nbDtcbiAgICB2YXIgaSwgcHJvcGVydHk7XG5cbiAgICBnbC5iaW5kQnVmZmVyKGdsLkFSUkFZX0JVRkZFUiwgdGhpcy5keW5hbWljQnVmZmVyKTtcblxuICAgIGZvciAoaSA9IDA7IGkgPCB0aGlzLmR5bmFtaWNQcm9wZXJ0aWVzLmxlbmd0aDsgaSsrKVxuICAgIHtcbiAgICAgICAgcHJvcGVydHkgPSB0aGlzLmR5bmFtaWNQcm9wZXJ0aWVzW2ldO1xuICAgICAgICBnbC52ZXJ0ZXhBdHRyaWJQb2ludGVyKHByb3BlcnR5LmF0dHJpYnV0ZSwgcHJvcGVydHkuc2l6ZSwgZ2wuRkxPQVQsIGZhbHNlLCB0aGlzLmR5bmFtaWNTdHJpZGUgKiA0LCBwcm9wZXJ0eS5vZmZzZXQgKiA0KTtcbiAgICB9XG5cbiAgICBnbC5iaW5kQnVmZmVyKGdsLkFSUkFZX0JVRkZFUiwgdGhpcy5zdGF0aWNCdWZmZXIpO1xuXG4gICAgZm9yIChpID0gMDsgaSA8IHRoaXMuc3RhdGljUHJvcGVydGllcy5sZW5ndGg7IGkrKylcbiAgICB7XG4gICAgICAgIHByb3BlcnR5ID0gdGhpcy5zdGF0aWNQcm9wZXJ0aWVzW2ldO1xuICAgICAgICBnbC52ZXJ0ZXhBdHRyaWJQb2ludGVyKHByb3BlcnR5LmF0dHJpYnV0ZSwgcHJvcGVydHkuc2l6ZSwgZ2wuRkxPQVQsIGZhbHNlLCB0aGlzLnN0YXRpY1N0cmlkZSAqIDQsIHByb3BlcnR5Lm9mZnNldCAqIDQpO1xuICAgIH1cbn07XG5cbi8qKlxuICogRGVzdHJveXMgdGhlIFBhcnRpY2xlQnVmZmVyLlxuICpcbiAqL1xuUGFydGljbGVCdWZmZXIucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoKVxue1xuICAgIHRoaXMuZHluYW1pY1Byb3BlcnRpZXMgPSBudWxsO1xuICAgIHRoaXMuZHluYW1pY0RhdGEgPSBudWxsO1xuICAgIHRoaXMuZ2wuZGVsZXRlQnVmZmVyKHRoaXMuZHluYW1pY0J1ZmZlcik7XG5cbiAgICB0aGlzLnN0YXRpY1Byb3BlcnRpZXMgPSBudWxsO1xuICAgIHRoaXMuc3RhdGljRGF0YSA9IG51bGw7XG4gICAgdGhpcy5nbC5kZWxldGVCdWZmZXIodGhpcy5zdGF0aWNCdWZmZXIpO1xufTtcbiIsInZhciBPYmplY3RSZW5kZXJlciA9IHJlcXVpcmUoJy4uLy4uL3JlbmRlcmVycy93ZWJnbC91dGlscy9PYmplY3RSZW5kZXJlcicpLFxuICAgIFdlYkdMUmVuZGVyZXIgPSByZXF1aXJlKCcuLi8uLi9yZW5kZXJlcnMvd2ViZ2wvV2ViR0xSZW5kZXJlcicpLFxuICAgIFBhcnRpY2xlU2hhZGVyID0gcmVxdWlyZSgnLi9QYXJ0aWNsZVNoYWRlcicpLFxuICAgIFBhcnRpY2xlQnVmZmVyID0gcmVxdWlyZSgnLi9QYXJ0aWNsZUJ1ZmZlcicpLFxuICAgIG1hdGggICAgICAgICAgICA9IHJlcXVpcmUoJy4uLy4uL21hdGgnKTtcblxuLyoqXG4gKiBAYXV0aG9yIE1hdCBHcm92ZXNcbiAqXG4gKiBCaWcgdGhhbmtzIHRvIHRoZSB2ZXJ5IGNsZXZlciBNYXR0IERlc0xhdXJpZXJzIDxtYXR0ZGVzbD4gaHR0cHM6Ly9naXRodWIuY29tL21hdHRkZXNsL1xuICogZm9yIGNyZWF0aW5nIHRoZSBvcmlnaW5hbCBwaXhpIHZlcnNpb24hXG4gKiBBbHNvIGEgdGhhbmtzIHRvIGh0dHBzOi8vZ2l0aHViLmNvbS9iY2hldmFsaWVyIGZvciB0d2Vha2luZyB0aGUgdGludCBhbmQgYWxwaGEgc28gdGhhdCB0aGV5IG5vdyBzaGFyZSA0IGJ5dGVzIG9uIHRoZSB2ZXJ0ZXggYnVmZmVyXG4gKlxuICogSGVhdmlseSBpbnNwaXJlZCBieSBMaWJHRFgncyBQYXJ0aWNsZVJlbmRlcmVyOlxuICogaHR0cHM6Ly9naXRodWIuY29tL2xpYmdkeC9saWJnZHgvYmxvYi9tYXN0ZXIvZ2R4L3NyYy9jb20vYmFkbG9naWMvZ2R4L2dyYXBoaWNzL2cyZC9QYXJ0aWNsZVJlbmRlcmVyLmphdmFcbiAqL1xuXG4vKipcbiAqXG4gKiBAY2xhc3NcbiAqIEBwcml2YXRlXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLldlYkdMUmVuZGVyZXJ9IFRoZSByZW5kZXJlciB0aGlzIHNwcml0ZSBiYXRjaCB3b3JrcyBmb3IuXG4gKi9cbmZ1bmN0aW9uIFBhcnRpY2xlUmVuZGVyZXIocmVuZGVyZXIpXG57XG4gICAgT2JqZWN0UmVuZGVyZXIuY2FsbCh0aGlzLCByZW5kZXJlcik7XG5cbiAgICAvLyA2NTUzNSBpcyBtYXggdmVydGV4IGluZGV4IGluIHRoZSBpbmRleCBidWZmZXIgKHNlZSBQYXJ0aWNsZVJlbmRlcmVyKVxuICAgIC8vIHNvIG1heCBudW1iZXIgb2YgcGFydGljbGVzIGlzIDY1NTM2IC8gNCA9IDE2Mzg0XG4gICAgLy8gYW5kIG1heCBudW1iZXIgb2YgZWxlbWVudCBpbiB0aGUgaW5kZXggYnVmZmVyIGlzIDE2Mzg0ICogNiA9IDk4MzA0XG4gICAgLy8gQ3JlYXRpbmcgYSBmdWxsIGluZGV4IGJ1ZmZlciwgb3ZlcmhlYWQgaXMgOTgzMDQgKiAyID0gMTk2S29cbiAgICB2YXIgbnVtSW5kaWNlcyA9IDk4MzA0O1xuXG4gICAgLyoqXG4gICAgICogSG9sZHMgdGhlIGluZGljZXNcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1VpbnQxNkFycmF5fVxuICAgICAqL1xuICAgIHRoaXMuaW5kaWNlcyA9IG5ldyBVaW50MTZBcnJheShudW1JbmRpY2VzKTtcblxuICAgIGZvciAodmFyIGk9MCwgaj0wOyBpIDwgbnVtSW5kaWNlczsgaSArPSA2LCBqICs9IDQpXG4gICAge1xuICAgICAgICB0aGlzLmluZGljZXNbaSArIDBdID0gaiArIDA7XG4gICAgICAgIHRoaXMuaW5kaWNlc1tpICsgMV0gPSBqICsgMTtcbiAgICAgICAgdGhpcy5pbmRpY2VzW2kgKyAyXSA9IGogKyAyO1xuICAgICAgICB0aGlzLmluZGljZXNbaSArIDNdID0gaiArIDA7XG4gICAgICAgIHRoaXMuaW5kaWNlc1tpICsgNF0gPSBqICsgMjtcbiAgICAgICAgdGhpcy5pbmRpY2VzW2kgKyA1XSA9IGogKyAzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoZSBkZWZhdWx0IHNoYWRlciB0aGF0IGlzIHVzZWQgaWYgYSBzcHJpdGUgZG9lc24ndCBoYXZlIGEgbW9yZSBzcGVjaWZpYyBvbmUuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlNoYWRlcn1cbiAgICAgKi9cbiAgICB0aGlzLnNoYWRlciA9IG51bGw7XG5cbiAgICB0aGlzLmluZGV4QnVmZmVyID0gbnVsbDtcblxuICAgIHRoaXMucHJvcGVydGllcyA9IG51bGw7XG5cbiAgICB0aGlzLnRlbXBNYXRyaXggPSBuZXcgbWF0aC5NYXRyaXgoKTtcbn1cblxuUGFydGljbGVSZW5kZXJlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKE9iamVjdFJlbmRlcmVyLnByb3RvdHlwZSk7XG5QYXJ0aWNsZVJlbmRlcmVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFBhcnRpY2xlUmVuZGVyZXI7XG5tb2R1bGUuZXhwb3J0cyA9IFBhcnRpY2xlUmVuZGVyZXI7XG5cbldlYkdMUmVuZGVyZXIucmVnaXN0ZXJQbHVnaW4oJ3BhcnRpY2xlJywgUGFydGljbGVSZW5kZXJlcik7XG5cbi8qKlxuICogV2hlbiB0aGVyZSBpcyBhIFdlYkdMIGNvbnRleHQgY2hhbmdlXG4gKlxuICogQHByaXZhdGVcbiAqL1xuUGFydGljbGVSZW5kZXJlci5wcm90b3R5cGUub25Db250ZXh0Q2hhbmdlID0gZnVuY3Rpb24gKClcbntcbiAgICB2YXIgZ2wgPSB0aGlzLnJlbmRlcmVyLmdsO1xuXG4gICAgLy8gc2V0dXAgZGVmYXVsdCBzaGFkZXJcbiAgICB0aGlzLnNoYWRlciA9IG5ldyBQYXJ0aWNsZVNoYWRlcih0aGlzLnJlbmRlcmVyLnNoYWRlck1hbmFnZXIpO1xuXG4gICAgdGhpcy5pbmRleEJ1ZmZlciA9IGdsLmNyZWF0ZUJ1ZmZlcigpO1xuXG4gICAgLy8gNjU1MzUgaXMgbWF4IGluZGV4LCBzbyA2NTUzNSAvIDYgPSAxMDkyMi5cblxuICAgIC8vdXBsb2FkIHRoZSBpbmRleCBkYXRhXG4gICAgZ2wuYmluZEJ1ZmZlcihnbC5FTEVNRU5UX0FSUkFZX0JVRkZFUiwgdGhpcy5pbmRleEJ1ZmZlcik7XG4gICAgZ2wuYnVmZmVyRGF0YShnbC5FTEVNRU5UX0FSUkFZX0JVRkZFUiwgdGhpcy5pbmRpY2VzLCBnbC5TVEFUSUNfRFJBVyk7XG5cbiAgICB0aGlzLnByb3BlcnRpZXMgPSBbXG4gICAgICAgIC8vIHZlcnRpY2VzRGF0YVxuICAgICAgICB7XG4gICAgICAgICAgICBhdHRyaWJ1dGU6dGhpcy5zaGFkZXIuYXR0cmlidXRlcy5hVmVydGV4UG9zaXRpb24sXG4gICAgICAgICAgICBzaXplOjIsXG4gICAgICAgICAgICB1cGxvYWRGdW5jdGlvbjp0aGlzLnVwbG9hZFZlcnRpY2VzLFxuICAgICAgICAgICAgb2Zmc2V0OjBcbiAgICAgICAgfSxcbiAgICAgICAgLy8gcG9zaXRpb25EYXRhXG4gICAgICAgIHtcbiAgICAgICAgICAgIGF0dHJpYnV0ZTp0aGlzLnNoYWRlci5hdHRyaWJ1dGVzLmFQb3NpdGlvbkNvb3JkLFxuICAgICAgICAgICAgc2l6ZToyLFxuICAgICAgICAgICAgdXBsb2FkRnVuY3Rpb246dGhpcy51cGxvYWRQb3NpdGlvbixcbiAgICAgICAgICAgIG9mZnNldDowXG4gICAgICAgIH0sXG4gICAgICAgIC8vIHJvdGF0aW9uRGF0YVxuICAgICAgICB7XG4gICAgICAgICAgICBhdHRyaWJ1dGU6dGhpcy5zaGFkZXIuYXR0cmlidXRlcy5hUm90YXRpb24sXG4gICAgICAgICAgICBzaXplOjEsXG4gICAgICAgICAgICB1cGxvYWRGdW5jdGlvbjp0aGlzLnVwbG9hZFJvdGF0aW9uLFxuICAgICAgICAgICAgb2Zmc2V0OjBcbiAgICAgICAgfSxcbiAgICAgICAgLy8gdXZzRGF0YVxuICAgICAgICB7XG4gICAgICAgICAgICBhdHRyaWJ1dGU6dGhpcy5zaGFkZXIuYXR0cmlidXRlcy5hVGV4dHVyZUNvb3JkLFxuICAgICAgICAgICAgc2l6ZToyLFxuICAgICAgICAgICAgdXBsb2FkRnVuY3Rpb246dGhpcy51cGxvYWRVdnMsXG4gICAgICAgICAgICBvZmZzZXQ6MFxuICAgICAgICB9LFxuICAgICAgICAvLyBhbHBoYURhdGFcbiAgICAgICAge1xuICAgICAgICAgICAgYXR0cmlidXRlOnRoaXMuc2hhZGVyLmF0dHJpYnV0ZXMuYUNvbG9yLFxuICAgICAgICAgICAgc2l6ZToxLFxuICAgICAgICAgICAgdXBsb2FkRnVuY3Rpb246dGhpcy51cGxvYWRBbHBoYSxcbiAgICAgICAgICAgIG9mZnNldDowXG4gICAgICAgIH1cbiAgICBdO1xufTtcblxuLyoqXG4gKiBTdGFydHMgYSBuZXcgcGFydGljbGUgYmF0Y2guXG4gKlxuICovXG5QYXJ0aWNsZVJlbmRlcmVyLnByb3RvdHlwZS5zdGFydCA9IGZ1bmN0aW9uICgpXG57XG4gICAgdmFyIGdsID0gdGhpcy5yZW5kZXJlci5nbDtcblxuICAgIC8vIGJpbmQgdGhlIG1haW4gdGV4dHVyZVxuICAgIGdsLmFjdGl2ZVRleHR1cmUoZ2wuVEVYVFVSRTApO1xuXG4gICAgLy8gYmluZCB0aGUgYnVmZmVyc1xuXG4gICAgZ2wuYmluZEJ1ZmZlcihnbC5FTEVNRU5UX0FSUkFZX0JVRkZFUiwgdGhpcy5pbmRleEJ1ZmZlcik7XG5cbiAgICB2YXIgc2hhZGVyID0gdGhpcy5zaGFkZXI7XG5cbiAgICB0aGlzLnJlbmRlcmVyLnNoYWRlck1hbmFnZXIuc2V0U2hhZGVyKHNoYWRlcik7XG59O1xuXG5cbi8qKlxuICogUmVuZGVycyB0aGUgcGFydGljbGUgY29udGFpbmVyIG9iamVjdC5cbiAqXG4gKiBAcGFyYW0gY29udGFpbmVyIHtQSVhJLlBhcnRpY2xlQ29udGFpbmVyfSBUaGUgY29udGFpbmVyIHRvIHJlbmRlciB1c2luZyB0aGlzIFBhcnRpY2xlUmVuZGVyZXJcbiAqL1xuUGFydGljbGVSZW5kZXJlci5wcm90b3R5cGUucmVuZGVyID0gZnVuY3Rpb24gKGNvbnRhaW5lcilcbntcbiAgICB2YXIgY2hpbGRyZW4gPSBjb250YWluZXIuY2hpbGRyZW4sXG4gICAgICAgIHRvdGFsQ2hpbGRyZW4gPSBjaGlsZHJlbi5sZW5ndGgsXG4gICAgICAgIG1heFNpemUgPSBjb250YWluZXIuX21heFNpemUsXG4gICAgICAgIGJhdGNoU2l6ZSA9IGNvbnRhaW5lci5fYmF0Y2hTaXplO1xuXG4gICAgaWYodG90YWxDaGlsZHJlbiA9PT0gMClcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgZWxzZSBpZih0b3RhbENoaWxkcmVuID4gbWF4U2l6ZSlcbiAgICB7XG4gICAgICAgIHRvdGFsQ2hpbGRyZW4gPSBtYXhTaXplO1xuICAgIH1cblxuICAgIGlmKCFjb250YWluZXIuX2J1ZmZlcnMpXG4gICAge1xuICAgICAgICBjb250YWluZXIuX2J1ZmZlcnMgPSB0aGlzLmdlbmVyYXRlQnVmZmVycyggY29udGFpbmVyICk7XG4gICAgfVxuXG4gICAgLy8gaWYgdGhlIHV2cyBoYXZlIG5vdCB1cGRhdGVkIHRoZW4gbm8gcG9pbnQgcmVuZGVyaW5nIGp1c3QgeWV0IVxuICAgIHRoaXMucmVuZGVyZXIuYmxlbmRNb2RlTWFuYWdlci5zZXRCbGVuZE1vZGUoY29udGFpbmVyLmJsZW5kTW9kZSk7XG5cbiAgICB2YXIgZ2wgPSB0aGlzLnJlbmRlcmVyLmdsO1xuXG4gICAgdmFyIG0gPSAgY29udGFpbmVyLndvcmxkVHJhbnNmb3JtLmNvcHkoIHRoaXMudGVtcE1hdHJpeCApO1xuICAgIG0ucHJlcGVuZCggdGhpcy5yZW5kZXJlci5jdXJyZW50UmVuZGVyVGFyZ2V0LnByb2plY3Rpb25NYXRyaXggKTtcbiAgICBnbC51bmlmb3JtTWF0cml4M2Z2KHRoaXMuc2hhZGVyLnVuaWZvcm1zLnByb2plY3Rpb25NYXRyaXguX2xvY2F0aW9uLCBmYWxzZSwgbS50b0FycmF5KHRydWUpKTtcbiAgICBnbC51bmlmb3JtMWYodGhpcy5zaGFkZXIudW5pZm9ybXMudUFscGhhLl9sb2NhdGlvbiwgY29udGFpbmVyLndvcmxkQWxwaGEpO1xuXG5cbiAgICAvLyBtYWtlIHN1cmUgdGhlIHRleHR1cmUgaXMgYm91bmQuLlxuICAgIHZhciBiYXNlVGV4dHVyZSA9IGNoaWxkcmVuWzBdLl90ZXh0dXJlLmJhc2VUZXh0dXJlO1xuXG4gICAgaWYgKCFiYXNlVGV4dHVyZS5fZ2xUZXh0dXJlc1tnbC5pZF0pXG4gICAge1xuICAgICAgICAvLyBpZiB0aGUgdGV4dHVyZSBoYXMgbm90IHVwZGF0ZWQgdGhlbiBsZXRzIG5vdCB1cGxvYWQgYW55IHN0YXRpYyBwcm9wZXJ0aWVzXG4gICAgICAgIGlmKCF0aGlzLnJlbmRlcmVyLnVwZGF0ZVRleHR1cmUoYmFzZVRleHR1cmUpKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZighY29udGFpbmVyLl9wcm9wZXJ0aWVzWzBdIHx8ICFjb250YWluZXIuX3Byb3BlcnRpZXNbM10pXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNvbnRhaW5lci5fYnVmZmVyVG9VcGRhdGUgPSAwO1xuICAgICAgICB9XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIGdsLmJpbmRUZXh0dXJlKGdsLlRFWFRVUkVfMkQsIGJhc2VUZXh0dXJlLl9nbFRleHR1cmVzW2dsLmlkXSk7XG4gICAgfVxuXG4gICAgLy8gbm93IGxldHMgdXBsb2FkIGFuZCByZW5kZXIgdGhlIGJ1ZmZlcnMuLlxuICAgIGZvciAodmFyIGkgPSAwLCBqID0gMDsgaSA8IHRvdGFsQ2hpbGRyZW47IGkgKz0gYmF0Y2hTaXplLCBqICs9IDEpXG4gICAge1xuICAgICAgICB2YXIgYW1vdW50ID0gKCB0b3RhbENoaWxkcmVuIC0gaSk7XG4gICAgICAgIGlmKGFtb3VudCA+IGJhdGNoU2l6ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgYW1vdW50ID0gYmF0Y2hTaXplO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGJ1ZmZlciA9IGNvbnRhaW5lci5fYnVmZmVyc1tqXTtcblxuICAgICAgICAvLyB3ZSBhbHdheXMgdXBsb2FkIHRoZSBkeW5hbWljXG4gICAgICAgIGJ1ZmZlci51cGxvYWREeW5hbWljKGNoaWxkcmVuLCBpLCBhbW91bnQpO1xuXG4gICAgICAgIC8vIHdlIG9ubHkgdXBsb2FkIHRoZSBzdGF0aWMgY29udGVudCB3aGVuIHdlIGhhdmUgdG8hXG4gICAgICAgIGlmKGNvbnRhaW5lci5fYnVmZmVyVG9VcGRhdGUgPT09IGopXG4gICAgICAgIHtcbiAgICAgICAgICAgIGJ1ZmZlci51cGxvYWRTdGF0aWMoY2hpbGRyZW4sIGksIGFtb3VudCk7XG4gICAgICAgICAgICBjb250YWluZXIuX2J1ZmZlclRvVXBkYXRlID0gaiArIDE7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBiaW5kIHRoZSBidWZmZXJcbiAgICAgICAgYnVmZmVyLmJpbmQoIHRoaXMuc2hhZGVyICk7XG5cbiAgICAgICAgIC8vIG5vdyBkcmF3IHRob3NlIHN1Y2thcyFcbiAgICAgICAgZ2wuZHJhd0VsZW1lbnRzKGdsLlRSSUFOR0xFUywgYW1vdW50ICogNiwgZ2wuVU5TSUdORURfU0hPUlQsIDApO1xuICAgICAgICB0aGlzLnJlbmRlcmVyLmRyYXdDb3VudCsrO1xuICAgIH1cbn07XG5cbi8qKlxuICogQ3JlYXRlcyBvbmUgcGFydGljbGUgYnVmZmVyIGZvciBlYWNoIGNoaWxkIGluIHRoZSBjb250YWluZXIgd2Ugd2FudCB0byByZW5kZXIgYW5kIHVwZGF0ZXMgaW50ZXJuYWwgcHJvcGVydGllc1xuICpcbiAqIEBwYXJhbSBjb250YWluZXIge1BJWEkuUGFydGljbGVDb250YWluZXJ9IFRoZSBjb250YWluZXIgdG8gcmVuZGVyIHVzaW5nIHRoaXMgUGFydGljbGVSZW5kZXJlclxuICovXG5QYXJ0aWNsZVJlbmRlcmVyLnByb3RvdHlwZS5nZW5lcmF0ZUJ1ZmZlcnMgPSBmdW5jdGlvbiAoY29udGFpbmVyKVxue1xuICAgIHZhciBnbCA9IHRoaXMucmVuZGVyZXIuZ2wsXG4gICAgICAgIGJ1ZmZlcnMgPSBbXSxcbiAgICAgICAgc2l6ZSA9IGNvbnRhaW5lci5fbWF4U2l6ZSxcbiAgICAgICAgYmF0Y2hTaXplID0gY29udGFpbmVyLl9iYXRjaFNpemUsXG4gICAgICAgIGR5bmFtaWNQcm9wZXJ0eUZsYWdzID0gY29udGFpbmVyLl9wcm9wZXJ0aWVzLFxuICAgICAgICBpO1xuXG4gICAgZm9yIChpID0gMDsgaSA8IHNpemU7IGkgKz0gYmF0Y2hTaXplKVxuICAgIHtcbiAgICAgICAgYnVmZmVycy5wdXNoKG5ldyBQYXJ0aWNsZUJ1ZmZlcihnbCwgdGhpcy5wcm9wZXJ0aWVzLCBkeW5hbWljUHJvcGVydHlGbGFncywgYmF0Y2hTaXplKSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGJ1ZmZlcnM7XG59O1xuXG4vKipcbiAqIFVwbG9hZHMgdGhlIHZlcnRpY2llcy5cbiAqXG4gKiBAcGFyYW0gY2hpbGRyZW4ge1BJWEkuRGlzcGxheU9iamVjdFtdfSB0aGUgYXJyYXkgb2YgZGlzcGxheSBvYmplY3RzIHRvIHJlbmRlclxuICogQHBhcmFtIHN0YXJ0SW5kZXgge251bWJlcn0gdGhlIGluZGV4IHRvIHN0YXJ0IGZyb20gaW4gdGhlIGNoaWxkcmVuIGFycmF5XG4gKiBAcGFyYW0gYW1vdW50IHtudW1iZXJ9IHRoZSBhbW91bnQgb2YgY2hpbGRyZW4gdGhhdCB3aWxsIGhhdmUgdGhlaXIgdmVydGljZXMgdXBsb2FkZWRcbiAqIEBwYXJhbSBhcnJheSB7bnVtYmVyW119XG4gKiBAcGFyYW0gc3RyaWRlIHtudW1iZXJ9XG4gKiBAcGFyYW0gb2Zmc2V0IHtudW1iZXJ9XG4gKi9cblBhcnRpY2xlUmVuZGVyZXIucHJvdG90eXBlLnVwbG9hZFZlcnRpY2VzID0gZnVuY3Rpb24gKGNoaWxkcmVuLCBzdGFydEluZGV4LCBhbW91bnQsIGFycmF5LCBzdHJpZGUsIG9mZnNldClcbntcbiAgICB2YXIgc3ByaXRlLFxuICAgICAgICB0ZXh0dXJlLFxuICAgICAgICB0cmltLFxuICAgICAgICBzeCxcbiAgICAgICAgc3ksXG4gICAgICAgIHcwLCB3MSwgaDAsIGgxO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhbW91bnQ7IGkrKykge1xuXG4gICAgICAgIHNwcml0ZSA9IGNoaWxkcmVuW3N0YXJ0SW5kZXggKyBpXTtcbiAgICAgICAgdGV4dHVyZSA9IHNwcml0ZS5fdGV4dHVyZTtcbiAgICAgICAgc3ggPSBzcHJpdGUuc2NhbGUueDtcbiAgICAgICAgc3kgPSBzcHJpdGUuc2NhbGUueTtcblxuICAgICAgICBpZiAodGV4dHVyZS50cmltKVxuICAgICAgICB7XG4gICAgICAgICAgICAvLyBpZiB0aGUgc3ByaXRlIGlzIHRyaW1tZWQgdGhlbiB3ZSBuZWVkIHRvIGFkZCB0aGUgZXh0cmEgc3BhY2UgYmVmb3JlIHRyYW5zZm9ybWluZyB0aGUgc3ByaXRlIGNvb3Jkcy4uXG4gICAgICAgICAgICB0cmltID0gdGV4dHVyZS50cmltO1xuXG4gICAgICAgICAgICB3MSA9IHRyaW0ueCAtIHNwcml0ZS5hbmNob3IueCAqIHRyaW0ud2lkdGg7XG4gICAgICAgICAgICB3MCA9IHcxICsgdGV4dHVyZS5jcm9wLndpZHRoO1xuXG4gICAgICAgICAgICBoMSA9IHRyaW0ueSAtIHNwcml0ZS5hbmNob3IueSAqIHRyaW0uaGVpZ2h0O1xuICAgICAgICAgICAgaDAgPSBoMSArIHRleHR1cmUuY3JvcC5oZWlnaHQ7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgICB3MCA9ICh0ZXh0dXJlLl9mcmFtZS53aWR0aCApICogKDEtc3ByaXRlLmFuY2hvci54KTtcbiAgICAgICAgICAgIHcxID0gKHRleHR1cmUuX2ZyYW1lLndpZHRoICkgKiAtc3ByaXRlLmFuY2hvci54O1xuXG4gICAgICAgICAgICBoMCA9IHRleHR1cmUuX2ZyYW1lLmhlaWdodCAqICgxLXNwcml0ZS5hbmNob3IueSk7XG4gICAgICAgICAgICBoMSA9IHRleHR1cmUuX2ZyYW1lLmhlaWdodCAqIC1zcHJpdGUuYW5jaG9yLnk7XG4gICAgICAgIH1cblxuICAgICAgICBhcnJheVtvZmZzZXRdID0gdzEgKiBzeDtcbiAgICAgICAgYXJyYXlbb2Zmc2V0ICsgMV0gPSBoMSAqIHN5O1xuXG4gICAgICAgIGFycmF5W29mZnNldCArIHN0cmlkZV0gPSB3MCAqIHN4O1xuICAgICAgICBhcnJheVtvZmZzZXQgKyBzdHJpZGUgKyAxXSA9IGgxICogc3k7XG5cbiAgICAgICAgYXJyYXlbb2Zmc2V0ICsgc3RyaWRlICogMl0gPSB3MCAqIHN4O1xuICAgICAgICBhcnJheVtvZmZzZXQgKyBzdHJpZGUgKiAyICsgMV0gPSBoMCAqIHN5O1xuXG4gICAgICAgIGFycmF5W29mZnNldCArIHN0cmlkZSAqIDNdID0gdzEgKiBzeDtcbiAgICAgICAgYXJyYXlbb2Zmc2V0ICsgc3RyaWRlICogMyArIDFdID0gaDAgKiBzeTtcblxuICAgICAgICBvZmZzZXQgKz0gc3RyaWRlICogNDtcbiAgICB9XG5cbn07XG5cbi8qKlxuICpcbiAqIEBwYXJhbSBjaGlsZHJlbiB7UElYSS5EaXNwbGF5T2JqZWN0W119IHRoZSBhcnJheSBvZiBkaXNwbGF5IG9iamVjdHMgdG8gcmVuZGVyXG4gKiBAcGFyYW0gc3RhcnRJbmRleCB7bnVtYmVyfSB0aGUgaW5kZXggdG8gc3RhcnQgZnJvbSBpbiB0aGUgY2hpbGRyZW4gYXJyYXlcbiAqIEBwYXJhbSBhbW91bnQge251bWJlcn0gdGhlIGFtb3VudCBvZiBjaGlsZHJlbiB0aGF0IHdpbGwgaGF2ZSB0aGVpciBwb3NpdGlvbnMgdXBsb2FkZWRcbiAqIEBwYXJhbSBhcnJheSB7bnVtYmVyW119XG4gKiBAcGFyYW0gc3RyaWRlIHtudW1iZXJ9XG4gKiBAcGFyYW0gb2Zmc2V0IHtudW1iZXJ9XG4gKi9cblBhcnRpY2xlUmVuZGVyZXIucHJvdG90eXBlLnVwbG9hZFBvc2l0aW9uID0gZnVuY3Rpb24gKGNoaWxkcmVuLHN0YXJ0SW5kZXgsIGFtb3VudCwgYXJyYXksIHN0cmlkZSwgb2Zmc2V0KVxue1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYW1vdW50OyBpKyspXG4gICAge1xuICAgICAgICB2YXIgc3ByaXRlUG9zaXRpb24gPSBjaGlsZHJlbltzdGFydEluZGV4ICsgaV0ucG9zaXRpb247XG5cbiAgICAgICAgYXJyYXlbb2Zmc2V0XSA9IHNwcml0ZVBvc2l0aW9uLng7XG4gICAgICAgIGFycmF5W29mZnNldCArIDFdID0gc3ByaXRlUG9zaXRpb24ueTtcblxuICAgICAgICBhcnJheVtvZmZzZXQgKyBzdHJpZGVdID0gc3ByaXRlUG9zaXRpb24ueDtcbiAgICAgICAgYXJyYXlbb2Zmc2V0ICsgc3RyaWRlICsgMV0gPSBzcHJpdGVQb3NpdGlvbi55O1xuXG4gICAgICAgIGFycmF5W29mZnNldCArIHN0cmlkZSAqIDJdID0gc3ByaXRlUG9zaXRpb24ueDtcbiAgICAgICAgYXJyYXlbb2Zmc2V0ICsgc3RyaWRlICogMiArIDFdID0gc3ByaXRlUG9zaXRpb24ueTtcblxuICAgICAgICBhcnJheVtvZmZzZXQgKyBzdHJpZGUgKiAzXSA9IHNwcml0ZVBvc2l0aW9uLng7XG4gICAgICAgIGFycmF5W29mZnNldCArIHN0cmlkZSAqIDMgKyAxXSA9IHNwcml0ZVBvc2l0aW9uLnk7XG5cbiAgICAgICAgb2Zmc2V0ICs9IHN0cmlkZSAqIDQ7XG4gICAgfVxuXG59O1xuXG4vKipcbiAqXG4gKiBAcGFyYW0gY2hpbGRyZW4ge1BJWEkuRGlzcGxheU9iamVjdFtdfSB0aGUgYXJyYXkgb2YgZGlzcGxheSBvYmplY3RzIHRvIHJlbmRlclxuICogQHBhcmFtIHN0YXJ0SW5kZXgge251bWJlcn0gdGhlIGluZGV4IHRvIHN0YXJ0IGZyb20gaW4gdGhlIGNoaWxkcmVuIGFycmF5XG4gKiBAcGFyYW0gYW1vdW50IHtudW1iZXJ9IHRoZSBhbW91bnQgb2YgY2hpbGRyZW4gdGhhdCB3aWxsIGhhdmUgdGhlaXIgcm90YXRpb24gdXBsb2FkZWRcbiAqIEBwYXJhbSBhcnJheSB7bnVtYmVyW119XG4gKiBAcGFyYW0gc3RyaWRlIHtudW1iZXJ9XG4gKiBAcGFyYW0gb2Zmc2V0IHtudW1iZXJ9XG4gKi9cblBhcnRpY2xlUmVuZGVyZXIucHJvdG90eXBlLnVwbG9hZFJvdGF0aW9uID0gZnVuY3Rpb24gKGNoaWxkcmVuLHN0YXJ0SW5kZXgsIGFtb3VudCwgYXJyYXksIHN0cmlkZSwgb2Zmc2V0KVxue1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYW1vdW50OyBpKyspXG4gICAge1xuICAgICAgICB2YXIgc3ByaXRlUm90YXRpb24gPSBjaGlsZHJlbltzdGFydEluZGV4ICsgaV0ucm90YXRpb247XG5cblxuICAgICAgICBhcnJheVtvZmZzZXRdID0gc3ByaXRlUm90YXRpb247XG4gICAgICAgIGFycmF5W29mZnNldCArIHN0cmlkZV0gPSBzcHJpdGVSb3RhdGlvbjtcbiAgICAgICAgYXJyYXlbb2Zmc2V0ICsgc3RyaWRlICogMl0gPSBzcHJpdGVSb3RhdGlvbjtcbiAgICAgICAgYXJyYXlbb2Zmc2V0ICsgc3RyaWRlICogM10gPSBzcHJpdGVSb3RhdGlvbjtcblxuICAgICAgICBvZmZzZXQgKz0gc3RyaWRlICogNDtcbiAgICB9XG59O1xuXG4vKipcbiAqXG4gKiBAcGFyYW0gY2hpbGRyZW4ge1BJWEkuRGlzcGxheU9iamVjdFtdfSB0aGUgYXJyYXkgb2YgZGlzcGxheSBvYmplY3RzIHRvIHJlbmRlclxuICogQHBhcmFtIHN0YXJ0SW5kZXgge251bWJlcn0gdGhlIGluZGV4IHRvIHN0YXJ0IGZyb20gaW4gdGhlIGNoaWxkcmVuIGFycmF5XG4gKiBAcGFyYW0gYW1vdW50IHtudW1iZXJ9IHRoZSBhbW91bnQgb2YgY2hpbGRyZW4gdGhhdCB3aWxsIGhhdmUgdGhlaXIgVXZzIHVwbG9hZGVkXG4gKiBAcGFyYW0gYXJyYXkge251bWJlcltdfVxuICogQHBhcmFtIHN0cmlkZSB7bnVtYmVyfVxuICogQHBhcmFtIG9mZnNldCB7bnVtYmVyfVxuICovXG5QYXJ0aWNsZVJlbmRlcmVyLnByb3RvdHlwZS51cGxvYWRVdnMgPSBmdW5jdGlvbiAoY2hpbGRyZW4sc3RhcnRJbmRleCwgYW1vdW50LCBhcnJheSwgc3RyaWRlLCBvZmZzZXQpXG57XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhbW91bnQ7IGkrKylcbiAgICB7XG4gICAgICAgIHZhciB0ZXh0dXJlVXZzID0gY2hpbGRyZW5bc3RhcnRJbmRleCArIGldLl90ZXh0dXJlLl91dnM7XG5cbiAgICAgICAgaWYgKHRleHR1cmVVdnMpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGFycmF5W29mZnNldF0gPSB0ZXh0dXJlVXZzLngwO1xuICAgICAgICAgICAgYXJyYXlbb2Zmc2V0ICsgMV0gPSB0ZXh0dXJlVXZzLnkwO1xuXG4gICAgICAgICAgICBhcnJheVtvZmZzZXQgKyBzdHJpZGVdID0gdGV4dHVyZVV2cy54MTtcbiAgICAgICAgICAgIGFycmF5W29mZnNldCArIHN0cmlkZSArIDFdID0gdGV4dHVyZVV2cy55MTtcblxuICAgICAgICAgICAgYXJyYXlbb2Zmc2V0ICsgc3RyaWRlICogMl0gPSB0ZXh0dXJlVXZzLngyO1xuICAgICAgICAgICAgYXJyYXlbb2Zmc2V0ICsgc3RyaWRlICogMiArIDFdID0gdGV4dHVyZVV2cy55MjtcblxuICAgICAgICAgICAgYXJyYXlbb2Zmc2V0ICsgc3RyaWRlICogM10gPSB0ZXh0dXJlVXZzLngzO1xuICAgICAgICAgICAgYXJyYXlbb2Zmc2V0ICsgc3RyaWRlICogMyArIDFdID0gdGV4dHVyZVV2cy55MztcblxuICAgICAgICAgICAgb2Zmc2V0ICs9IHN0cmlkZSAqIDQ7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgICAvL1RPRE8geW91IGtub3cgdGhpcyBjYW4gYmUgZWFzaWVyIVxuICAgICAgICAgICAgYXJyYXlbb2Zmc2V0XSA9IDA7XG4gICAgICAgICAgICBhcnJheVtvZmZzZXQgKyAxXSA9IDA7XG5cbiAgICAgICAgICAgIGFycmF5W29mZnNldCArIHN0cmlkZV0gPSAwO1xuICAgICAgICAgICAgYXJyYXlbb2Zmc2V0ICsgc3RyaWRlICsgMV0gPSAwO1xuXG4gICAgICAgICAgICBhcnJheVtvZmZzZXQgKyBzdHJpZGUgKiAyXSA9IDA7XG4gICAgICAgICAgICBhcnJheVtvZmZzZXQgKyBzdHJpZGUgKiAyICsgMV0gPSAwO1xuXG4gICAgICAgICAgICBhcnJheVtvZmZzZXQgKyBzdHJpZGUgKiAzXSA9IDA7XG4gICAgICAgICAgICBhcnJheVtvZmZzZXQgKyBzdHJpZGUgKiAzICsgMV0gPSAwO1xuXG4gICAgICAgICAgICBvZmZzZXQgKz0gc3RyaWRlICogNDtcbiAgICAgICAgfVxuICAgIH1cbn07XG5cbi8qKlxuICpcbiAqIEBwYXJhbSBjaGlsZHJlbiB7UElYSS5EaXNwbGF5T2JqZWN0W119IHRoZSBhcnJheSBvZiBkaXNwbGF5IG9iamVjdHMgdG8gcmVuZGVyXG4gKiBAcGFyYW0gc3RhcnRJbmRleCB7bnVtYmVyfSB0aGUgaW5kZXggdG8gc3RhcnQgZnJvbSBpbiB0aGUgY2hpbGRyZW4gYXJyYXlcbiAqIEBwYXJhbSBhbW91bnQge251bWJlcn0gdGhlIGFtb3VudCBvZiBjaGlsZHJlbiB0aGF0IHdpbGwgaGF2ZSB0aGVpciBhbHBoYSB1cGxvYWRlZFxuICogQHBhcmFtIGFycmF5IHtudW1iZXJbXX1cbiAqIEBwYXJhbSBzdHJpZGUge251bWJlcn1cbiAqIEBwYXJhbSBvZmZzZXQge251bWJlcn1cbiAqL1xuUGFydGljbGVSZW5kZXJlci5wcm90b3R5cGUudXBsb2FkQWxwaGEgPSBmdW5jdGlvbiAoY2hpbGRyZW4sc3RhcnRJbmRleCwgYW1vdW50LCBhcnJheSwgc3RyaWRlLCBvZmZzZXQpXG57XG4gICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYW1vdW50OyBpKyspXG4gICAgIHtcbiAgICAgICAgdmFyIHNwcml0ZUFscGhhID0gY2hpbGRyZW5bc3RhcnRJbmRleCArIGldLmFscGhhO1xuXG4gICAgICAgIGFycmF5W29mZnNldF0gPSBzcHJpdGVBbHBoYTtcbiAgICAgICAgYXJyYXlbb2Zmc2V0ICsgc3RyaWRlXSA9IHNwcml0ZUFscGhhO1xuICAgICAgICBhcnJheVtvZmZzZXQgKyBzdHJpZGUgKiAyXSA9IHNwcml0ZUFscGhhO1xuICAgICAgICBhcnJheVtvZmZzZXQgKyBzdHJpZGUgKiAzXSA9IHNwcml0ZUFscGhhO1xuXG4gICAgICAgIG9mZnNldCArPSBzdHJpZGUgKiA0O1xuICAgIH1cbn07XG5cblxuLyoqXG4gKiBEZXN0cm95cyB0aGUgUGFydGljbGVSZW5kZXJlci5cbiAqXG4gKi9cblBhcnRpY2xlUmVuZGVyZXIucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoKVxue1xuICAgIGlmICh0aGlzLnJlbmRlcmVyLmdsKSB7XG4gICAgICAgIHRoaXMucmVuZGVyZXIuZ2wuZGVsZXRlQnVmZmVyKHRoaXMuaW5kZXhCdWZmZXIpO1xuICAgIH1cblxuICAgIE9iamVjdFJlbmRlcmVyLnByb3RvdHlwZS5kZXN0cm95LmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG5cbiAgICB0aGlzLnNoYWRlci5kZXN0cm95KCk7XG5cbiAgICB0aGlzLmluZGljZXMgPSBudWxsO1xuICAgIHRoaXMudGVtcE1hdHJpeCA9IG51bGw7XG59O1xuIiwidmFyIFRleHR1cmVTaGFkZXIgPSByZXF1aXJlKCcuLi8uLi9yZW5kZXJlcnMvd2ViZ2wvc2hhZGVycy9UZXh0dXJlU2hhZGVyJyk7XG5cbi8qKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLlRleHR1cmVTaGFkZXJcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gc2hhZGVyTWFuYWdlciB7U2hhZGVyTWFuYWdlcn0gVGhlIHdlYmdsIHNoYWRlciBtYW5hZ2VyIHRoaXMgc2hhZGVyIHdvcmtzIGZvci5cbiAqL1xuZnVuY3Rpb24gUGFydGljbGVTaGFkZXIoc2hhZGVyTWFuYWdlcilcbntcbiAgICBUZXh0dXJlU2hhZGVyLmNhbGwodGhpcyxcbiAgICAgICAgc2hhZGVyTWFuYWdlcixcbiAgICAgICAgLy8gdmVydGV4IHNoYWRlclxuICAgICAgICBbXG4gICAgICAgICAgICAnYXR0cmlidXRlIHZlYzIgYVZlcnRleFBvc2l0aW9uOycsXG4gICAgICAgICAgICAnYXR0cmlidXRlIHZlYzIgYVRleHR1cmVDb29yZDsnLFxuICAgICAgICAgICAgJ2F0dHJpYnV0ZSBmbG9hdCBhQ29sb3I7JyxcblxuICAgICAgICAgICAgJ2F0dHJpYnV0ZSB2ZWMyIGFQb3NpdGlvbkNvb3JkOycsXG4gICAgICAgICAgICAnYXR0cmlidXRlIHZlYzIgYVNjYWxlOycsXG4gICAgICAgICAgICAnYXR0cmlidXRlIGZsb2F0IGFSb3RhdGlvbjsnLFxuXG4gICAgICAgICAgICAndW5pZm9ybSBtYXQzIHByb2plY3Rpb25NYXRyaXg7JyxcblxuICAgICAgICAgICAgJ3ZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkOycsXG4gICAgICAgICAgICAndmFyeWluZyBmbG9hdCB2Q29sb3I7JyxcblxuICAgICAgICAgICAgJ3ZvaWQgbWFpbih2b2lkKXsnLFxuICAgICAgICAgICAgJyAgIHZlYzIgdiA9IGFWZXJ0ZXhQb3NpdGlvbjsnLFxuXG4gICAgICAgICAgICAnICAgdi54ID0gKGFWZXJ0ZXhQb3NpdGlvbi54KSAqIGNvcyhhUm90YXRpb24pIC0gKGFWZXJ0ZXhQb3NpdGlvbi55KSAqIHNpbihhUm90YXRpb24pOycsXG4gICAgICAgICAgICAnICAgdi55ID0gKGFWZXJ0ZXhQb3NpdGlvbi54KSAqIHNpbihhUm90YXRpb24pICsgKGFWZXJ0ZXhQb3NpdGlvbi55KSAqIGNvcyhhUm90YXRpb24pOycsXG4gICAgICAgICAgICAnICAgdiA9IHYgKyBhUG9zaXRpb25Db29yZDsnLFxuXG4gICAgICAgICAgICAnICAgZ2xfUG9zaXRpb24gPSB2ZWM0KChwcm9qZWN0aW9uTWF0cml4ICogdmVjMyh2LCAxLjApKS54eSwgMC4wLCAxLjApOycsXG5cbiAgICAgICAgICAgICcgICB2VGV4dHVyZUNvb3JkID0gYVRleHR1cmVDb29yZDsnLFxuICAgICAgICAgICAgJyAgIHZDb2xvciA9IGFDb2xvcjsnLFxuICAgICAgICAgICAgJ30nXG4gICAgICAgIF0uam9pbignXFxuJyksXG4gICAgICAgIC8vIGhlbGxvXG4gICAgICAgICBbXG4gICAgICAgICAgICAncHJlY2lzaW9uIGxvd3AgZmxvYXQ7JyxcblxuICAgICAgICAgICAgJ3ZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkOycsXG4gICAgICAgICAgICAndmFyeWluZyBmbG9hdCB2Q29sb3I7JyxcblxuICAgICAgICAgICAgJ3VuaWZvcm0gc2FtcGxlcjJEIHVTYW1wbGVyOycsXG4gICAgICAgICAgICAndW5pZm9ybSBmbG9hdCB1QWxwaGE7JyxcblxuICAgICAgICAgICAgJ3ZvaWQgbWFpbih2b2lkKXsnLFxuICAgICAgICAgICAgJyAgdmVjNCBjb2xvciA9IHRleHR1cmUyRCh1U2FtcGxlciwgdlRleHR1cmVDb29yZCkgKiB2Q29sb3IgKiB1QWxwaGE7JyxcbiAgICAgICAgICAgICcgIGlmIChjb2xvci5hID09IDAuMCkgZGlzY2FyZDsnLFxuICAgICAgICAgICAgJyAgZ2xfRnJhZ0NvbG9yID0gY29sb3I7JyxcbiAgICAgICAgICAgICd9J1xuICAgICAgICBdLmpvaW4oJ1xcbicpLFxuICAgICAgICAvLyBjdXN0b20gdW5pZm9ybXNcbiAgICAgICAge1xuICAgICAgICAgICAgdUFscGhhOiAgeyB0eXBlOiAnMWYnLCB2YWx1ZTogMSB9XG4gICAgICAgIH0sXG4gICAgICAgIC8vIGN1c3RvbSBhdHRyaWJ1dGVzXG4gICAgICAgIHtcbiAgICAgICAgICAgIGFQb3NpdGlvbkNvb3JkOiAwLFxuICAgICAgICAgICAvLyBhU2NhbGU6ICAgICAgICAgMCxcbiAgICAgICAgICAgIGFSb3RhdGlvbjogICAgICAwXG4gICAgICAgIH1cbiAgICApO1xuXG4gICAgLy8gVEVNUCBIQUNLXG5cbn1cblxuUGFydGljbGVTaGFkZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShUZXh0dXJlU2hhZGVyLnByb3RvdHlwZSk7XG5QYXJ0aWNsZVNoYWRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBQYXJ0aWNsZVNoYWRlcjtcblxubW9kdWxlLmV4cG9ydHMgPSBQYXJ0aWNsZVNoYWRlcjtcbiIsInZhciB1dGlscyA9IHJlcXVpcmUoJy4uL3V0aWxzJyksXG4gICAgbWF0aCA9IHJlcXVpcmUoJy4uL21hdGgnKSxcbiAgICBDT05TVCA9IHJlcXVpcmUoJy4uL2NvbnN0JyksXG4gICAgRXZlbnRFbWl0dGVyID0gcmVxdWlyZSgnZXZlbnRlbWl0dGVyMycpO1xuXG4vKipcbiAqIFRoZSBDYW52YXNSZW5kZXJlciBkcmF3cyB0aGUgc2NlbmUgYW5kIGFsbCBpdHMgY29udGVudCBvbnRvIGEgMmQgY2FudmFzLiBUaGlzIHJlbmRlcmVyIHNob3VsZCBiZSB1c2VkIGZvciBicm93c2VycyB0aGF0IGRvIG5vdCBzdXBwb3J0IHdlYkdMLlxuICogRG9uJ3QgZm9yZ2V0IHRvIGFkZCB0aGUgQ2FudmFzUmVuZGVyZXIudmlldyB0byB5b3VyIERPTSBvciB5b3Ugd2lsbCBub3Qgc2VlIGFueXRoaW5nIDopXG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIHN5c3RlbSB7c3RyaW5nfSBUaGUgbmFtZSBvZiB0aGUgc3lzdGVtIHRoaXMgcmVuZGVyZXIgaXMgZm9yLlxuICogQHBhcmFtIFt3aWR0aD04MDBdIHtudW1iZXJ9IHRoZSB3aWR0aCBvZiB0aGUgY2FudmFzIHZpZXdcbiAqIEBwYXJhbSBbaGVpZ2h0PTYwMF0ge251bWJlcn0gdGhlIGhlaWdodCBvZiB0aGUgY2FudmFzIHZpZXdcbiAqIEBwYXJhbSBbb3B0aW9uc10ge29iamVjdH0gVGhlIG9wdGlvbmFsIHJlbmRlcmVyIHBhcmFtZXRlcnNcbiAqIEBwYXJhbSBbb3B0aW9ucy52aWV3XSB7SFRNTENhbnZhc0VsZW1lbnR9IHRoZSBjYW52YXMgdG8gdXNlIGFzIGEgdmlldywgb3B0aW9uYWxcbiAqIEBwYXJhbSBbb3B0aW9ucy50cmFuc3BhcmVudD1mYWxzZV0ge2Jvb2xlYW59IElmIHRoZSByZW5kZXIgdmlldyBpcyB0cmFuc3BhcmVudCwgZGVmYXVsdCBmYWxzZVxuICogQHBhcmFtIFtvcHRpb25zLmF1dG9SZXNpemU9ZmFsc2VdIHtib29sZWFufSBJZiB0aGUgcmVuZGVyIHZpZXcgaXMgYXV0b21hdGljYWxseSByZXNpemVkLCBkZWZhdWx0IGZhbHNlXG4gKiBAcGFyYW0gW29wdGlvbnMuYW50aWFsaWFzPWZhbHNlXSB7Ym9vbGVhbn0gc2V0cyBhbnRpYWxpYXMgKG9ubHkgYXBwbGljYWJsZSBpbiBjaHJvbWUgYXQgdGhlIG1vbWVudClcbiAqIEBwYXJhbSBbb3B0aW9ucy5yZXNvbHV0aW9uPTFdIHtudW1iZXJ9IHRoZSByZXNvbHV0aW9uIG9mIHRoZSByZW5kZXJlciByZXRpbmEgd291bGQgYmUgMlxuICogQHBhcmFtIFtvcHRpb25zLmNsZWFyQmVmb3JlUmVuZGVyPXRydWVdIHtib29sZWFufSBUaGlzIHNldHMgaWYgdGhlIENhbnZhc1JlbmRlcmVyIHdpbGwgY2xlYXIgdGhlIGNhbnZhcyBvclxuICogICAgICBub3QgYmVmb3JlIHRoZSBuZXcgcmVuZGVyIHBhc3MuXG4gKiBAcGFyYW0gW29wdGlvbnMuYmFja2dyb3VuZENvbG9yPTB4MDAwMDAwXSB7bnVtYmVyfSBUaGUgYmFja2dyb3VuZCBjb2xvciBvZiB0aGUgcmVuZGVyZWQgYXJlYSAoc2hvd24gaWYgbm90IHRyYW5zcGFyZW50KS5cbiAqIEBwYXJhbSBbb3B0aW9ucy5yb3VuZFBpeGVscz1mYWxzZV0ge2Jvb2xlYW59IElmIHRydWUgUGl4aSB3aWxsIE1hdGguZmxvb3IoKSB4L3kgdmFsdWVzIHdoZW4gcmVuZGVyaW5nLCBzdG9wcGluZyBwaXhlbCBpbnRlcnBvbGF0aW9uLlxuICovXG5mdW5jdGlvbiBTeXN0ZW1SZW5kZXJlcihzeXN0ZW0sIHdpZHRoLCBoZWlnaHQsIG9wdGlvbnMpXG57XG4gICAgRXZlbnRFbWl0dGVyLmNhbGwodGhpcyk7XG5cbiAgICB1dGlscy5zYXlIZWxsbyhzeXN0ZW0pO1xuXG4gICAgLy8gcHJlcGFyZSBvcHRpb25zXG4gICAgaWYgKG9wdGlvbnMpXG4gICAge1xuICAgICAgICBmb3IgKHZhciBpIGluIENPTlNULkRFRkFVTFRfUkVOREVSX09QVElPTlMpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGlmICh0eXBlb2Ygb3B0aW9uc1tpXSA9PT0gJ3VuZGVmaW5lZCcpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgb3B0aW9uc1tpXSA9IENPTlNULkRFRkFVTFRfUkVOREVSX09QVElPTlNbaV07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgb3B0aW9ucyA9IENPTlNULkRFRkFVTFRfUkVOREVSX09QVElPTlM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhlIHR5cGUgb2YgdGhlIHJlbmRlcmVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IFBJWEkuUkVOREVSRVJfVFlQRS5VTktOT1dOXG4gICAgICogQHNlZSBQSVhJLlJFTkRFUkVSX1RZUEVcbiAgICAgKi9cbiAgICB0aGlzLnR5cGUgPSBDT05TVC5SRU5ERVJFUl9UWVBFLlVOS05PV047XG5cbiAgICAvKipcbiAgICAgKiBUaGUgd2lkdGggb2YgdGhlIGNhbnZhcyB2aWV3XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgODAwXG4gICAgICovXG4gICAgdGhpcy53aWR0aCA9IHdpZHRoIHx8IDgwMDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBoZWlnaHQgb2YgdGhlIGNhbnZhcyB2aWV3XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgNjAwXG4gICAgICovXG4gICAgdGhpcy5oZWlnaHQgPSBoZWlnaHQgfHwgNjAwO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGNhbnZhcyBlbGVtZW50IHRoYXQgZXZlcnl0aGluZyBpcyBkcmF3biB0b1xuICAgICAqXG4gICAgICogQG1lbWJlciB7SFRNTENhbnZhc0VsZW1lbnR9XG4gICAgICovXG4gICAgdGhpcy52aWV3ID0gb3B0aW9ucy52aWV3IHx8IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NhbnZhcycpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHJlc29sdXRpb24gb2YgdGhlIHJlbmRlcmVyXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMVxuICAgICAqL1xuICAgIHRoaXMucmVzb2x1dGlvbiA9IG9wdGlvbnMucmVzb2x1dGlvbjtcblxuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgdGhlIHJlbmRlciB2aWV3IGlzIHRyYW5zcGFyZW50XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqL1xuICAgIHRoaXMudHJhbnNwYXJlbnQgPSBvcHRpb25zLnRyYW5zcGFyZW50O1xuXG4gICAgLyoqXG4gICAgICogV2hldGhlciB0aGUgcmVuZGVyIHZpZXcgc2hvdWxkIGJlIHJlc2l6ZWQgYXV0b21hdGljYWxseVxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKi9cbiAgICB0aGlzLmF1dG9SZXNpemUgPSBvcHRpb25zLmF1dG9SZXNpemUgfHwgZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBUcmFja3MgdGhlIGJsZW5kIG1vZGVzIHVzZWZ1bCBmb3IgdGhpcyByZW5kZXJlci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge29iamVjdDxzdHJpbmcsIG1peGVkPn1cbiAgICAgKi9cbiAgICB0aGlzLmJsZW5kTW9kZXMgPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHZhbHVlIG9mIHRoZSBwcmVzZXJ2ZURyYXdpbmdCdWZmZXIgZmxhZyBhZmZlY3RzIHdoZXRoZXIgb3Igbm90IHRoZSBjb250ZW50cyBvZiB0aGUgc3RlbmNpbCBidWZmZXIgaXMgcmV0YWluZWQgYWZ0ZXIgcmVuZGVyaW5nLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKi9cbiAgICB0aGlzLnByZXNlcnZlRHJhd2luZ0J1ZmZlciA9IG9wdGlvbnMucHJlc2VydmVEcmF3aW5nQnVmZmVyO1xuXG4gICAgLyoqXG4gICAgICogVGhpcyBzZXRzIGlmIHRoZSBDYW52YXNSZW5kZXJlciB3aWxsIGNsZWFyIHRoZSBjYW52YXMgb3Igbm90IGJlZm9yZSB0aGUgbmV3IHJlbmRlciBwYXNzLlxuICAgICAqIElmIHRoZSBzY2VuZSBpcyBOT1QgdHJhbnNwYXJlbnQgUGl4aSB3aWxsIHVzZSBhIGNhbnZhcyBzaXplZCBmaWxsUmVjdCBvcGVyYXRpb24gZXZlcnkgZnJhbWUgdG8gc2V0IHRoZSBjYW52YXMgYmFja2dyb3VuZCBjb2xvci5cbiAgICAgKiBJZiB0aGUgc2NlbmUgaXMgdHJhbnNwYXJlbnQgUGl4aSB3aWxsIHVzZSBjbGVhclJlY3QgdG8gY2xlYXIgdGhlIGNhbnZhcyBldmVyeSBmcmFtZS5cbiAgICAgKiBEaXNhYmxlIHRoaXMgYnkgc2V0dGluZyB0aGlzIHRvIGZhbHNlLiBGb3IgZXhhbXBsZSBpZiB5b3VyIGdhbWUgaGFzIGEgY2FudmFzIGZpbGxpbmcgYmFja2dyb3VuZCBpbWFnZSB5b3Ugb2Z0ZW4gZG9uJ3QgbmVlZCB0aGlzIHNldC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICogQGRlZmF1bHRcbiAgICAgKi9cbiAgICB0aGlzLmNsZWFyQmVmb3JlUmVuZGVyID0gb3B0aW9ucy5jbGVhckJlZm9yZVJlbmRlcjtcblxuICAgIC8qKlxuICAgICAqIElmIHRydWUgUGl4aSB3aWxsIE1hdGguZmxvb3IoKSB4L3kgdmFsdWVzIHdoZW4gcmVuZGVyaW5nLCBzdG9wcGluZyBwaXhlbCBpbnRlcnBvbGF0aW9uLlxuICAgICAqIEhhbmR5IGZvciBjcmlzcCBwaXhlbCBhcnQgYW5kIHNwZWVkIG9uIGxlZ2FjeSBkZXZpY2VzLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKi9cbiAgICB0aGlzLnJvdW5kUGl4ZWxzID0gb3B0aW9ucy5yb3VuZFBpeGVscztcblxuICAgIC8qKlxuICAgICAqIFRoZSBiYWNrZ3JvdW5kIGNvbG9yIGFzIGEgbnVtYmVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fYmFja2dyb3VuZENvbG9yID0gMHgwMDAwMDA7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYmFja2dyb3VuZCBjb2xvciBhcyBhbiBbUiwgRywgQl0gYXJyYXkuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJbXX1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX2JhY2tncm91bmRDb2xvclJnYmEgPSBbMCwgMCwgMCwgMF07XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYmFja2dyb3VuZCBjb2xvciBhcyBhIHN0cmluZy5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge3N0cmluZ31cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX2JhY2tncm91bmRDb2xvclN0cmluZyA9ICcjMDAwMDAwJztcblxuICAgIHRoaXMuYmFja2dyb3VuZENvbG9yID0gb3B0aW9ucy5iYWNrZ3JvdW5kQ29sb3IgfHwgdGhpcy5fYmFja2dyb3VuZENvbG9yOyAvLyBydW4gYmcgY29sb3Igc2V0dGVyXG5cbiAgICAvKipcbiAgICAgKiBUaGlzIHRlbXBvcmFyeSBkaXNwbGF5IG9iamVjdCB1c2VkIGFzIHRoZSBwYXJlbnQgb2YgdGhlIGN1cnJlbnRseSBiZWluZyByZW5kZXJlZCBpdGVtXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLkRpc3BsYXlPYmplY3R9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl90ZW1wRGlzcGxheU9iamVjdFBhcmVudCA9IHt3b3JsZFRyYW5zZm9ybTpuZXcgbWF0aC5NYXRyaXgoKSwgd29ybGRBbHBoYToxLCBjaGlsZHJlbjpbXX07XG5cbiAgICAvKipcbiAgICAgKiBUaGUgbGFzdCByb290IG9iamVjdCB0aGF0IHRoZSByZW5kZXJlciB0cmllZCB0byByZW5kZXIuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLkRpc3BsYXlPYmplY3R9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9sYXN0T2JqZWN0UmVuZGVyZWQgPSB0aGlzLl90ZW1wRGlzcGxheU9iamVjdFBhcmVudDtcbn1cblxuLy8gY29uc3RydWN0b3JcblN5c3RlbVJlbmRlcmVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoRXZlbnRFbWl0dGVyLnByb3RvdHlwZSk7XG5TeXN0ZW1SZW5kZXJlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBTeXN0ZW1SZW5kZXJlcjtcbm1vZHVsZS5leHBvcnRzID0gU3lzdGVtUmVuZGVyZXI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKFN5c3RlbVJlbmRlcmVyLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFRoZSBiYWNrZ3JvdW5kIGNvbG9yIHRvIGZpbGwgaWYgbm90IHRyYW5zcGFyZW50XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuU3lzdGVtUmVuZGVyZXIjXG4gICAgICovXG4gICAgYmFja2dyb3VuZENvbG9yOlxuICAgIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fYmFja2dyb3VuZENvbG9yO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWwpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuX2JhY2tncm91bmRDb2xvciA9IHZhbDtcbiAgICAgICAgICAgIHRoaXMuX2JhY2tncm91bmRDb2xvclN0cmluZyA9IHV0aWxzLmhleDJzdHJpbmcodmFsKTtcbiAgICAgICAgICAgIHV0aWxzLmhleDJyZ2IodmFsLCB0aGlzLl9iYWNrZ3JvdW5kQ29sb3JSZ2JhKTtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuXG4vKipcbiAqIFJlc2l6ZXMgdGhlIGNhbnZhcyB2aWV3IHRvIHRoZSBzcGVjaWZpZWQgd2lkdGggYW5kIGhlaWdodFxuICpcbiAqIEBwYXJhbSB3aWR0aCB7bnVtYmVyfSB0aGUgbmV3IHdpZHRoIG9mIHRoZSBjYW52YXMgdmlld1xuICogQHBhcmFtIGhlaWdodCB7bnVtYmVyfSB0aGUgbmV3IGhlaWdodCBvZiB0aGUgY2FudmFzIHZpZXdcbiAqL1xuU3lzdGVtUmVuZGVyZXIucHJvdG90eXBlLnJlc2l6ZSA9IGZ1bmN0aW9uICh3aWR0aCwgaGVpZ2h0KSB7XG4gICAgdGhpcy53aWR0aCA9IHdpZHRoICogdGhpcy5yZXNvbHV0aW9uO1xuICAgIHRoaXMuaGVpZ2h0ID0gaGVpZ2h0ICogdGhpcy5yZXNvbHV0aW9uO1xuXG4gICAgdGhpcy52aWV3LndpZHRoID0gdGhpcy53aWR0aDtcbiAgICB0aGlzLnZpZXcuaGVpZ2h0ID0gdGhpcy5oZWlnaHQ7XG5cbiAgICBpZiAodGhpcy5hdXRvUmVzaXplKVxuICAgIHtcbiAgICAgICAgdGhpcy52aWV3LnN0eWxlLndpZHRoID0gdGhpcy53aWR0aCAvIHRoaXMucmVzb2x1dGlvbiArICdweCc7XG4gICAgICAgIHRoaXMudmlldy5zdHlsZS5oZWlnaHQgPSB0aGlzLmhlaWdodCAvIHRoaXMucmVzb2x1dGlvbiArICdweCc7XG4gICAgfVxufTtcblxuLyoqXG4gKiBSZW1vdmVzIGV2ZXJ5dGhpbmcgZnJvbSB0aGUgcmVuZGVyZXIgYW5kIG9wdGlvbmFsbHkgcmVtb3ZlcyB0aGUgQ2FudmFzIERPTSBlbGVtZW50LlxuICpcbiAqIEBwYXJhbSBbcmVtb3ZlVmlldz1mYWxzZV0ge2Jvb2xlYW59IFJlbW92ZXMgdGhlIENhbnZhcyBlbGVtZW50IGZyb20gdGhlIERPTS5cbiAqL1xuU3lzdGVtUmVuZGVyZXIucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAocmVtb3ZlVmlldykge1xuICAgIGlmIChyZW1vdmVWaWV3ICYmIHRoaXMudmlldy5wYXJlbnROb2RlKVxuICAgIHtcbiAgICAgICAgdGhpcy52aWV3LnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodGhpcy52aWV3KTtcbiAgICB9XG5cbiAgICB0aGlzLnR5cGUgPSBDT05TVC5SRU5ERVJFUl9UWVBFLlVOS05PV047XG5cbiAgICB0aGlzLndpZHRoID0gMDtcbiAgICB0aGlzLmhlaWdodCA9IDA7XG5cbiAgICB0aGlzLnZpZXcgPSBudWxsO1xuXG4gICAgdGhpcy5yZXNvbHV0aW9uID0gMDtcblxuICAgIHRoaXMudHJhbnNwYXJlbnQgPSBmYWxzZTtcblxuICAgIHRoaXMuYXV0b1Jlc2l6ZSA9IGZhbHNlO1xuXG4gICAgdGhpcy5ibGVuZE1vZGVzID0gbnVsbDtcblxuICAgIHRoaXMucHJlc2VydmVEcmF3aW5nQnVmZmVyID0gZmFsc2U7XG4gICAgdGhpcy5jbGVhckJlZm9yZVJlbmRlciA9IGZhbHNlO1xuXG4gICAgdGhpcy5yb3VuZFBpeGVscyA9IGZhbHNlO1xuXG4gICAgdGhpcy5fYmFja2dyb3VuZENvbG9yID0gMDtcbiAgICB0aGlzLl9iYWNrZ3JvdW5kQ29sb3JSZ2JhID0gbnVsbDtcbiAgICB0aGlzLl9iYWNrZ3JvdW5kQ29sb3JTdHJpbmcgPSBudWxsO1xufTtcbiIsInZhciBTeXN0ZW1SZW5kZXJlciA9IHJlcXVpcmUoJy4uL1N5c3RlbVJlbmRlcmVyJyksXG4gICAgQ2FudmFzTWFza01hbmFnZXIgPSByZXF1aXJlKCcuL3V0aWxzL0NhbnZhc01hc2tNYW5hZ2VyJyksXG4gICAgdXRpbHMgPSByZXF1aXJlKCcuLi8uLi91dGlscycpLFxuICAgIG1hdGggPSByZXF1aXJlKCcuLi8uLi9tYXRoJyksXG4gICAgQ09OU1QgPSByZXF1aXJlKCcuLi8uLi9jb25zdCcpO1xuXG4vKipcbiAqIFRoZSBDYW52YXNSZW5kZXJlciBkcmF3cyB0aGUgc2NlbmUgYW5kIGFsbCBpdHMgY29udGVudCBvbnRvIGEgMmQgY2FudmFzLiBUaGlzIHJlbmRlcmVyIHNob3VsZCBiZSB1c2VkIGZvciBicm93c2VycyB0aGF0IGRvIG5vdCBzdXBwb3J0IHdlYkdMLlxuICogRG9uJ3QgZm9yZ2V0IHRvIGFkZCB0aGUgQ2FudmFzUmVuZGVyZXIudmlldyB0byB5b3VyIERPTSBvciB5b3Ugd2lsbCBub3Qgc2VlIGFueXRoaW5nIDopXG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQGV4dGVuZHMgUElYSS5TeXN0ZW1SZW5kZXJlclxuICogQHBhcmFtIFt3aWR0aD04MDBdIHtudW1iZXJ9IHRoZSB3aWR0aCBvZiB0aGUgY2FudmFzIHZpZXdcbiAqIEBwYXJhbSBbaGVpZ2h0PTYwMF0ge251bWJlcn0gdGhlIGhlaWdodCBvZiB0aGUgY2FudmFzIHZpZXdcbiAqIEBwYXJhbSBbb3B0aW9uc10ge29iamVjdH0gVGhlIG9wdGlvbmFsIHJlbmRlcmVyIHBhcmFtZXRlcnNcbiAqIEBwYXJhbSBbb3B0aW9ucy52aWV3XSB7SFRNTENhbnZhc0VsZW1lbnR9IHRoZSBjYW52YXMgdG8gdXNlIGFzIGEgdmlldywgb3B0aW9uYWxcbiAqIEBwYXJhbSBbb3B0aW9ucy50cmFuc3BhcmVudD1mYWxzZV0ge2Jvb2xlYW59IElmIHRoZSByZW5kZXIgdmlldyBpcyB0cmFuc3BhcmVudCwgZGVmYXVsdCBmYWxzZVxuICogQHBhcmFtIFtvcHRpb25zLmF1dG9SZXNpemU9ZmFsc2VdIHtib29sZWFufSBJZiB0aGUgcmVuZGVyIHZpZXcgaXMgYXV0b21hdGljYWxseSByZXNpemVkLCBkZWZhdWx0IGZhbHNlXG4gKiBAcGFyYW0gW29wdGlvbnMuYW50aWFsaWFzPWZhbHNlXSB7Ym9vbGVhbn0gc2V0cyBhbnRpYWxpYXMgKG9ubHkgYXBwbGljYWJsZSBpbiBjaHJvbWUgYXQgdGhlIG1vbWVudClcbiAqIEBwYXJhbSBbb3B0aW9ucy5yZXNvbHV0aW9uPTFdIHtudW1iZXJ9IHRoZSByZXNvbHV0aW9uIG9mIHRoZSByZW5kZXJlciByZXRpbmEgd291bGQgYmUgMlxuICogQHBhcmFtIFtvcHRpb25zLmNsZWFyQmVmb3JlUmVuZGVyPXRydWVdIHtib29sZWFufSBUaGlzIHNldHMgaWYgdGhlIENhbnZhc1JlbmRlcmVyIHdpbGwgY2xlYXIgdGhlIGNhbnZhcyBvclxuICogICAgICBub3QgYmVmb3JlIHRoZSBuZXcgcmVuZGVyIHBhc3MuXG4gKiBAcGFyYW0gW29wdGlvbnMucm91bmRQaXhlbHM9ZmFsc2VdIHtib29sZWFufSBJZiB0cnVlIFBpeGkgd2lsbCBNYXRoLmZsb29yKCkgeC95IHZhbHVlcyB3aGVuIHJlbmRlcmluZywgc3RvcHBpbmcgcGl4ZWwgaW50ZXJwb2xhdGlvbi5cbiAqL1xuZnVuY3Rpb24gQ2FudmFzUmVuZGVyZXIod2lkdGgsIGhlaWdodCwgb3B0aW9ucylcbntcbiAgICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcblxuICAgIFN5c3RlbVJlbmRlcmVyLmNhbGwodGhpcywgJ0NhbnZhcycsIHdpZHRoLCBoZWlnaHQsIG9wdGlvbnMpO1xuXG4gICAgdGhpcy50eXBlID0gQ09OU1QuUkVOREVSRVJfVFlQRS5DQU5WQVM7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgY2FudmFzIDJkIGNvbnRleHQgdGhhdCBldmVyeXRoaW5nIGlzIGRyYXduIHdpdGguXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtDYW52YXNSZW5kZXJpbmdDb250ZXh0MkR9XG4gICAgICovXG4gICAgdGhpcy5jb250ZXh0ID0gdGhpcy52aWV3LmdldENvbnRleHQoJzJkJywgeyBhbHBoYTogdGhpcy50cmFuc3BhcmVudCB9KTtcblxuICAgIC8qKlxuICAgICAqIEJvb2xlYW4gZmxhZyBjb250cm9sbGluZyBjYW52YXMgcmVmcmVzaC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICovXG4gICAgdGhpcy5yZWZyZXNoID0gdHJ1ZTtcblxuICAgIC8qKlxuICAgICAqIEluc3RhbmNlIG9mIGEgQ2FudmFzTWFza01hbmFnZXIsIGhhbmRsZXMgbWFza2luZyB3aGVuIHVzaW5nIHRoZSBjYW52YXMgcmVuZGVyZXIuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLkNhbnZhc01hc2tNYW5hZ2VyfVxuICAgICAqL1xuICAgIHRoaXMubWFza01hbmFnZXIgPSBuZXcgQ2FudmFzTWFza01hbmFnZXIoKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBjYW52YXMgcHJvcGVydHkgdXNlZCB0byBzZXQgdGhlIGNhbnZhcyBzbW9vdGhpbmcgcHJvcGVydHkuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtzdHJpbmd9XG4gICAgICovXG4gICAgdGhpcy5zbW9vdGhQcm9wZXJ0eSA9ICdpbWFnZVNtb290aGluZ0VuYWJsZWQnO1xuXG4gICAgaWYgKCF0aGlzLmNvbnRleHQuaW1hZ2VTbW9vdGhpbmdFbmFibGVkKVxuICAgIHtcbiAgICAgICAgaWYgKHRoaXMuY29udGV4dC53ZWJraXRJbWFnZVNtb290aGluZ0VuYWJsZWQpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuc21vb3RoUHJvcGVydHkgPSAnd2Via2l0SW1hZ2VTbW9vdGhpbmdFbmFibGVkJztcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh0aGlzLmNvbnRleHQubW96SW1hZ2VTbW9vdGhpbmdFbmFibGVkKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnNtb290aFByb3BlcnR5ID0gJ21vekltYWdlU21vb3RoaW5nRW5hYmxlZCc7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodGhpcy5jb250ZXh0Lm9JbWFnZVNtb290aGluZ0VuYWJsZWQpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuc21vb3RoUHJvcGVydHkgPSAnb0ltYWdlU21vb3RoaW5nRW5hYmxlZCc7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodGhpcy5jb250ZXh0Lm1zSW1hZ2VTbW9vdGhpbmdFbmFibGVkKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnNtb290aFByb3BlcnR5ID0gJ21zSW1hZ2VTbW9vdGhpbmdFbmFibGVkJztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMuaW5pdFBsdWdpbnMoKTtcblxuICAgIHRoaXMuX21hcEJsZW5kTW9kZXMoKTtcblxuICAgIC8qKlxuICAgICAqIFRoaXMgdGVtcG9yYXJ5IGRpc3BsYXkgb2JqZWN0IHVzZWQgYXMgdGhlIHBhcmVudCBvZiB0aGUgY3VycmVudGx5IGJlaW5nIHJlbmRlcmVkIGl0ZW1cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuRGlzcGxheU9iamVjdH1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX3RlbXBEaXNwbGF5T2JqZWN0UGFyZW50ID0ge1xuICAgICAgICB3b3JsZFRyYW5zZm9ybTogbmV3IG1hdGguTWF0cml4KCksXG4gICAgICAgIHdvcmxkQWxwaGE6IDFcbiAgICB9O1xuXG5cbiAgICB0aGlzLnJlc2l6ZSh3aWR0aCwgaGVpZ2h0KTtcbn1cblxuLy8gY29uc3RydWN0b3JcbkNhbnZhc1JlbmRlcmVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoU3lzdGVtUmVuZGVyZXIucHJvdG90eXBlKTtcbkNhbnZhc1JlbmRlcmVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IENhbnZhc1JlbmRlcmVyO1xubW9kdWxlLmV4cG9ydHMgPSBDYW52YXNSZW5kZXJlcjtcbnV0aWxzLnBsdWdpblRhcmdldC5taXhpbihDYW52YXNSZW5kZXJlcik7XG5cbi8qKlxuICogUmVuZGVycyB0aGUgb2JqZWN0IHRvIHRoaXMgY2FudmFzIHZpZXdcbiAqXG4gKiBAcGFyYW0gb2JqZWN0IHtQSVhJLkRpc3BsYXlPYmplY3R9IHRoZSBvYmplY3QgdG8gYmUgcmVuZGVyZWRcbiAqL1xuQ2FudmFzUmVuZGVyZXIucHJvdG90eXBlLnJlbmRlciA9IGZ1bmN0aW9uIChvYmplY3QpXG57XG4gICAgdGhpcy5lbWl0KCdwcmVyZW5kZXInKTtcblxuICAgIHZhciBjYWNoZVBhcmVudCA9IG9iamVjdC5wYXJlbnQ7XG5cbiAgICB0aGlzLl9sYXN0T2JqZWN0UmVuZGVyZWQgPSBvYmplY3Q7XG5cbiAgICBvYmplY3QucGFyZW50ID0gdGhpcy5fdGVtcERpc3BsYXlPYmplY3RQYXJlbnQ7XG5cbiAgICAvLyB1cGRhdGUgdGhlIHNjZW5lIGdyYXBoXG4gICAgb2JqZWN0LnVwZGF0ZVRyYW5zZm9ybSgpO1xuXG4gICAgb2JqZWN0LnBhcmVudCA9IGNhY2hlUGFyZW50O1xuXG4gICAgdGhpcy5jb250ZXh0LnNldFRyYW5zZm9ybSgxLCAwLCAwLCAxLCAwLCAwKTtcblxuICAgIHRoaXMuY29udGV4dC5nbG9iYWxBbHBoYSA9IDE7XG5cbiAgICB0aGlzLmNvbnRleHQuZ2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uID0gdGhpcy5ibGVuZE1vZGVzW0NPTlNULkJMRU5EX01PREVTLk5PUk1BTF07XG5cbiAgICBpZiAobmF2aWdhdG9yLmlzQ29jb29uSlMgJiYgdGhpcy52aWV3LnNjcmVlbmNhbnZhcylcbiAgICB7XG4gICAgICAgIHRoaXMuY29udGV4dC5maWxsU3R5bGUgPSAnYmxhY2snO1xuICAgICAgICB0aGlzLmNvbnRleHQuY2xlYXIoKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5jbGVhckJlZm9yZVJlbmRlcilcbiAgICB7XG4gICAgICAgIGlmICh0aGlzLnRyYW5zcGFyZW50KVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmNvbnRleHQuY2xlYXJSZWN0KDAsIDAsIHRoaXMud2lkdGgsIHRoaXMuaGVpZ2h0KTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuY29udGV4dC5maWxsU3R5bGUgPSB0aGlzLl9iYWNrZ3JvdW5kQ29sb3JTdHJpbmc7XG4gICAgICAgICAgICB0aGlzLmNvbnRleHQuZmlsbFJlY3QoMCwgMCwgdGhpcy53aWR0aCAsIHRoaXMuaGVpZ2h0KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMucmVuZGVyRGlzcGxheU9iamVjdChvYmplY3QsIHRoaXMuY29udGV4dCk7XG5cbiAgICB0aGlzLmVtaXQoJ3Bvc3RyZW5kZXInKTtcbn07XG5cbi8qKlxuICogUmVtb3ZlcyBldmVyeXRoaW5nIGZyb20gdGhlIHJlbmRlcmVyIGFuZCBvcHRpb25hbGx5IHJlbW92ZXMgdGhlIENhbnZhcyBET00gZWxlbWVudC5cbiAqXG4gKiBAcGFyYW0gW3JlbW92ZVZpZXc9ZmFsc2VdIHtib29sZWFufSBSZW1vdmVzIHRoZSBDYW52YXMgZWxlbWVudCBmcm9tIHRoZSBET00uXG4gKi9cbkNhbnZhc1JlbmRlcmVyLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKHJlbW92ZVZpZXcpXG57XG4gICAgdGhpcy5kZXN0cm95UGx1Z2lucygpO1xuXG4gICAgLy8gY2FsbCB0aGUgYmFzZSBkZXN0cm95XG4gICAgU3lzdGVtUmVuZGVyZXIucHJvdG90eXBlLmRlc3Ryb3kuY2FsbCh0aGlzLCByZW1vdmVWaWV3KTtcblxuICAgIHRoaXMuY29udGV4dCA9IG51bGw7XG5cbiAgICB0aGlzLnJlZnJlc2ggPSB0cnVlO1xuXG4gICAgdGhpcy5tYXNrTWFuYWdlci5kZXN0cm95KCk7XG4gICAgdGhpcy5tYXNrTWFuYWdlciA9IG51bGw7XG5cbiAgICB0aGlzLnNtb290aFByb3BlcnR5ID0gbnVsbDtcbn07XG5cbi8qKlxuICogUmVuZGVycyBhIGRpc3BsYXkgb2JqZWN0XG4gKlxuICogQHBhcmFtIGRpc3BsYXlPYmplY3Qge1BJWEkuRGlzcGxheU9iamVjdH0gVGhlIGRpc3BsYXlPYmplY3QgdG8gcmVuZGVyXG4gKiBAcHJpdmF0ZVxuICovXG5DYW52YXNSZW5kZXJlci5wcm90b3R5cGUucmVuZGVyRGlzcGxheU9iamVjdCA9IGZ1bmN0aW9uIChkaXNwbGF5T2JqZWN0LCBjb250ZXh0KVxue1xuICAgIHZhciB0ZW1wQ29udGV4dCA9IHRoaXMuY29udGV4dDtcblxuICAgIHRoaXMuY29udGV4dCA9IGNvbnRleHQ7XG4gICAgZGlzcGxheU9iamVjdC5yZW5kZXJDYW52YXModGhpcyk7XG4gICAgdGhpcy5jb250ZXh0ID0gdGVtcENvbnRleHQ7XG59O1xuXG4vKipcbiAqIEBleHRlbmRzIFBJWEkuU3lzdGVtUmVuZGVyZXIjcmVzaXplXG4gKlxuICogQHBhcmFtIHtudW1iZXJ9IHdcbiAqIEBwYXJhbSB7bnVtYmVyfSBoXG4gKi9cbkNhbnZhc1JlbmRlcmVyLnByb3RvdHlwZS5yZXNpemUgPSBmdW5jdGlvbiAodywgaClcbntcbiAgICBTeXN0ZW1SZW5kZXJlci5wcm90b3R5cGUucmVzaXplLmNhbGwodGhpcywgdywgaCk7XG5cbiAgICAvL3Jlc2V0IHRoZSBzY2FsZSBtb2RlLi4gb2RkbHkgdGhpcyBzZWVtcyB0byBiZSByZXNldCB3aGVuIHRoZSBjYW52YXMgaXMgcmVzaXplZC5cbiAgICAvL3N1cmVseSBhIGJyb3dzZXIgYnVnPz8gTGV0IHBpeGkgZml4IHRoYXQgZm9yIHlvdS4uXG4gICAgaWYodGhpcy5zbW9vdGhQcm9wZXJ0eSlcbiAgICB7XG4gICAgICAgIHRoaXMuY29udGV4dFt0aGlzLnNtb290aFByb3BlcnR5XSA9IChDT05TVC5TQ0FMRV9NT0RFUy5ERUZBVUxUID09PSBDT05TVC5TQ0FMRV9NT0RFUy5MSU5FQVIpO1xuICAgIH1cblxufTtcblxuLyoqXG4gKiBNYXBzIFBpeGkgYmxlbmQgbW9kZXMgdG8gY2FudmFzIGJsZW5kIG1vZGVzLlxuICpcbiAqIEBwcml2YXRlXG4gKi9cbkNhbnZhc1JlbmRlcmVyLnByb3RvdHlwZS5fbWFwQmxlbmRNb2RlcyA9IGZ1bmN0aW9uICgpXG57XG4gICAgaWYgKCF0aGlzLmJsZW5kTW9kZXMpXG4gICAge1xuICAgICAgICB0aGlzLmJsZW5kTW9kZXMgPSB7fTtcblxuICAgICAgICBpZiAodXRpbHMuY2FuVXNlTmV3Q2FudmFzQmxlbmRNb2RlcygpKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuTk9STUFMXSAgICAgICAgPSAnc291cmNlLW92ZXInO1xuICAgICAgICAgICAgdGhpcy5ibGVuZE1vZGVzW0NPTlNULkJMRU5EX01PREVTLkFERF0gICAgICAgICAgID0gJ2xpZ2h0ZXInOyAvL0lTIFRISVMgT0s/Pz9cbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5NVUxUSVBMWV0gICAgICA9ICdtdWx0aXBseSc7XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuU0NSRUVOXSAgICAgICAgPSAnc2NyZWVuJztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5PVkVSTEFZXSAgICAgICA9ICdvdmVybGF5JztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5EQVJLRU5dICAgICAgICA9ICdkYXJrZW4nO1xuICAgICAgICAgICAgdGhpcy5ibGVuZE1vZGVzW0NPTlNULkJMRU5EX01PREVTLkxJR0hURU5dICAgICAgID0gJ2xpZ2h0ZW4nO1xuICAgICAgICAgICAgdGhpcy5ibGVuZE1vZGVzW0NPTlNULkJMRU5EX01PREVTLkNPTE9SX0RPREdFXSAgID0gJ2NvbG9yLWRvZGdlJztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5DT0xPUl9CVVJOXSAgICA9ICdjb2xvci1idXJuJztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5IQVJEX0xJR0hUXSAgICA9ICdoYXJkLWxpZ2h0JztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5TT0ZUX0xJR0hUXSAgICA9ICdzb2Z0LWxpZ2h0JztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5ESUZGRVJFTkNFXSAgICA9ICdkaWZmZXJlbmNlJztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5FWENMVVNJT05dICAgICA9ICdleGNsdXNpb24nO1xuICAgICAgICAgICAgdGhpcy5ibGVuZE1vZGVzW0NPTlNULkJMRU5EX01PREVTLkhVRV0gICAgICAgICAgID0gJ2h1ZSc7XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuU0FUVVJBVElPTl0gICAgPSAnc2F0dXJhdGUnO1xuICAgICAgICAgICAgdGhpcy5ibGVuZE1vZGVzW0NPTlNULkJMRU5EX01PREVTLkNPTE9SXSAgICAgICAgID0gJ2NvbG9yJztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5MVU1JTk9TSVRZXSAgICA9ICdsdW1pbm9zaXR5JztcbiAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgIHtcbiAgICAgICAgICAgIC8vIHRoaXMgbWVhbnMgdGhhdCB0aGUgYnJvd3NlciBkb2VzIG5vdCBzdXBwb3J0IHRoZSBjb29sIG5ldyBibGVuZCBtb2RlcyBpbiBjYW52YXMgJ2NvdWdoJyBpZSAnY291Z2gnXG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuTk9STUFMXSAgICAgICAgPSAnc291cmNlLW92ZXInO1xuICAgICAgICAgICAgdGhpcy5ibGVuZE1vZGVzW0NPTlNULkJMRU5EX01PREVTLkFERF0gICAgICAgICAgID0gJ2xpZ2h0ZXInOyAvL0lTIFRISVMgT0s/Pz9cbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5NVUxUSVBMWV0gICAgICA9ICdzb3VyY2Utb3Zlcic7XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuU0NSRUVOXSAgICAgICAgPSAnc291cmNlLW92ZXInO1xuICAgICAgICAgICAgdGhpcy5ibGVuZE1vZGVzW0NPTlNULkJMRU5EX01PREVTLk9WRVJMQVldICAgICAgID0gJ3NvdXJjZS1vdmVyJztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5EQVJLRU5dICAgICAgICA9ICdzb3VyY2Utb3Zlcic7XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuTElHSFRFTl0gICAgICAgPSAnc291cmNlLW92ZXInO1xuICAgICAgICAgICAgdGhpcy5ibGVuZE1vZGVzW0NPTlNULkJMRU5EX01PREVTLkNPTE9SX0RPREdFXSAgID0gJ3NvdXJjZS1vdmVyJztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5DT0xPUl9CVVJOXSAgICA9ICdzb3VyY2Utb3Zlcic7XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuSEFSRF9MSUdIVF0gICAgPSAnc291cmNlLW92ZXInO1xuICAgICAgICAgICAgdGhpcy5ibGVuZE1vZGVzW0NPTlNULkJMRU5EX01PREVTLlNPRlRfTElHSFRdICAgID0gJ3NvdXJjZS1vdmVyJztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5ESUZGRVJFTkNFXSAgICA9ICdzb3VyY2Utb3Zlcic7XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuRVhDTFVTSU9OXSAgICAgPSAnc291cmNlLW92ZXInO1xuICAgICAgICAgICAgdGhpcy5ibGVuZE1vZGVzW0NPTlNULkJMRU5EX01PREVTLkhVRV0gICAgICAgICAgID0gJ3NvdXJjZS1vdmVyJztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5TQVRVUkFUSU9OXSAgICA9ICdzb3VyY2Utb3Zlcic7XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuQ09MT1JdICAgICAgICAgPSAnc291cmNlLW92ZXInO1xuICAgICAgICAgICAgdGhpcy5ibGVuZE1vZGVzW0NPTlNULkJMRU5EX01PREVTLkxVTUlOT1NJVFldICAgID0gJ3NvdXJjZS1vdmVyJztcbiAgICAgICAgfVxuICAgIH1cbn07XG4iLCIvKipcbiAqIENyZWF0ZXMgYSBDYW52YXMgZWxlbWVudCBvZiB0aGUgZ2l2ZW4gc2l6ZS5cbiAqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gd2lkdGgge251bWJlcn0gdGhlIHdpZHRoIGZvciB0aGUgbmV3bHkgY3JlYXRlZCBjYW52YXNcbiAqIEBwYXJhbSBoZWlnaHQge251bWJlcn0gdGhlIGhlaWdodCBmb3IgdGhlIG5ld2x5IGNyZWF0ZWQgY2FudmFzXG4gKi9cbmZ1bmN0aW9uIENhbnZhc0J1ZmZlcih3aWR0aCwgaGVpZ2h0KVxue1xuICAgIC8qKlxuICAgICAqIFRoZSBDYW52YXMgb2JqZWN0IHRoYXQgYmVsb25ncyB0byB0aGlzIENhbnZhc0J1ZmZlci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge0hUTUxDYW52YXNFbGVtZW50fVxuICAgICAqL1xuICAgIHRoaXMuY2FudmFzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnY2FudmFzJyk7XG5cbiAgICAvKipcbiAgICAgKiBBIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRCBvYmplY3QgcmVwcmVzZW50aW5nIGEgdHdvLWRpbWVuc2lvbmFsIHJlbmRlcmluZyBjb250ZXh0LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEfVxuICAgICAqL1xuICAgIHRoaXMuY29udGV4dCA9IHRoaXMuY2FudmFzLmdldENvbnRleHQoJzJkJyk7XG5cbiAgICB0aGlzLmNhbnZhcy53aWR0aCA9IHdpZHRoO1xuICAgIHRoaXMuY2FudmFzLmhlaWdodCA9IGhlaWdodDtcbn1cblxuQ2FudmFzQnVmZmVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IENhbnZhc0J1ZmZlcjtcbm1vZHVsZS5leHBvcnRzID0gQ2FudmFzQnVmZmVyO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhDYW52YXNCdWZmZXIucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogVGhlIHdpZHRoIG9mIHRoZSBjYW52YXMgYnVmZmVyIGluIHBpeGVscy5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5DYW52YXNCdWZmZXIjXG4gICAgICovXG4gICAgd2lkdGg6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jYW52YXMud2lkdGg7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbClcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5jYW52YXMud2lkdGggPSB2YWw7XG4gICAgICAgIH1cbiAgICB9LFxuICAgIC8qKlxuICAgICAqIFRoZSBoZWlnaHQgb2YgdGhlIGNhbnZhcyBidWZmZXIgaW4gcGl4ZWxzLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLkNhbnZhc0J1ZmZlciNcbiAgICAgKi9cbiAgICBoZWlnaHQ6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jYW52YXMuaGVpZ2h0O1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWwpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuY2FudmFzLmhlaWdodCA9IHZhbDtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuXG4vKipcbiAqIENsZWFycyB0aGUgY2FudmFzIHRoYXQgd2FzIGNyZWF0ZWQgYnkgdGhlIENhbnZhc0J1ZmZlciBjbGFzcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5DYW52YXNCdWZmZXIucHJvdG90eXBlLmNsZWFyID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLmNvbnRleHQuc2V0VHJhbnNmb3JtKDEsIDAsIDAsIDEsIDAsIDApO1xuICAgIHRoaXMuY29udGV4dC5jbGVhclJlY3QoMCwwLCB0aGlzLmNhbnZhcy53aWR0aCwgdGhpcy5jYW52YXMuaGVpZ2h0KTtcbn07XG5cbi8qKlxuICogUmVzaXplcyB0aGUgY2FudmFzIHRvIHRoZSBzcGVjaWZpZWQgd2lkdGggYW5kIGhlaWdodC5cbiAqXG4gKiBAcGFyYW0gd2lkdGgge251bWJlcn0gdGhlIG5ldyB3aWR0aCBvZiB0aGUgY2FudmFzXG4gKiBAcGFyYW0gaGVpZ2h0IHtudW1iZXJ9IHRoZSBuZXcgaGVpZ2h0IG9mIHRoZSBjYW52YXNcbiAqL1xuQ2FudmFzQnVmZmVyLnByb3RvdHlwZS5yZXNpemUgPSBmdW5jdGlvbiAod2lkdGgsIGhlaWdodClcbntcbiAgICB0aGlzLmNhbnZhcy53aWR0aCA9IHdpZHRoO1xuICAgIHRoaXMuY2FudmFzLmhlaWdodCA9IGhlaWdodDtcbn07XG5cbi8qKlxuICogRGVzdHJveXMgdGhpcyBjYW52YXMuXG4gKlxuICovXG5DYW52YXNCdWZmZXIucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoKVxue1xuICAgIHRoaXMuY29udGV4dCA9IG51bGw7XG4gICAgdGhpcy5jYW52YXMgPSBudWxsO1xufTtcbiIsInZhciBDT05TVCA9IHJlcXVpcmUoJy4uLy4uLy4uL2NvbnN0Jyk7XG5cbi8qKlxuICogQSBzZXQgb2YgZnVuY3Rpb25zIHVzZWQgYnkgdGhlIGNhbnZhcyByZW5kZXJlciB0byBkcmF3IHRoZSBwcmltaXRpdmUgZ3JhcGhpY3MgZGF0YS5cbiAqIEBzdGF0aWNcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqL1xudmFyIENhbnZhc0dyYXBoaWNzID0ge307XG5tb2R1bGUuZXhwb3J0cyA9IENhbnZhc0dyYXBoaWNzO1xuXG4vKlxuICogUmVuZGVycyBhIEdyYXBoaWNzIG9iamVjdCB0byBhIGNhbnZhcy5cbiAqXG4gKiBAcGFyYW0gZ3JhcGhpY3Mge1BJWEkuR3JhcGhpY3N9IHRoZSBhY3R1YWwgZ3JhcGhpY3Mgb2JqZWN0IHRvIHJlbmRlclxuICogQHBhcmFtIGNvbnRleHQge0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRH0gdGhlIDJkIGRyYXdpbmcgbWV0aG9kIG9mIHRoZSBjYW52YXNcbiAqL1xuQ2FudmFzR3JhcGhpY3MucmVuZGVyR3JhcGhpY3MgPSBmdW5jdGlvbiAoZ3JhcGhpY3MsIGNvbnRleHQpXG57XG4gICAgdmFyIHdvcmxkQWxwaGEgPSBncmFwaGljcy53b3JsZEFscGhhO1xuXG4gICAgaWYgKGdyYXBoaWNzLmRpcnR5KVxuICAgIHtcbiAgICAgICAgdGhpcy51cGRhdGVHcmFwaGljc1RpbnQoZ3JhcGhpY3MpO1xuICAgICAgICBncmFwaGljcy5kaXJ0eSA9IGZhbHNlO1xuICAgIH1cblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZ3JhcGhpY3MuZ3JhcGhpY3NEYXRhLmxlbmd0aDsgaSsrKVxuICAgIHtcbiAgICAgICAgdmFyIGRhdGEgPSBncmFwaGljcy5ncmFwaGljc0RhdGFbaV07XG4gICAgICAgIHZhciBzaGFwZSA9IGRhdGEuc2hhcGU7XG5cbiAgICAgICAgdmFyIGZpbGxDb2xvciA9IGRhdGEuX2ZpbGxUaW50O1xuICAgICAgICB2YXIgbGluZUNvbG9yID0gZGF0YS5fbGluZVRpbnQ7XG5cbiAgICAgICAgY29udGV4dC5saW5lV2lkdGggPSBkYXRhLmxpbmVXaWR0aDtcblxuICAgICAgICBpZiAoZGF0YS50eXBlID09PSBDT05TVC5TSEFQRVMuUE9MWSlcbiAgICAgICAge1xuICAgICAgICAgICAgY29udGV4dC5iZWdpblBhdGgoKTtcblxuICAgICAgICAgICAgdmFyIHBvaW50cyA9IHNoYXBlLnBvaW50cztcblxuICAgICAgICAgICAgY29udGV4dC5tb3ZlVG8ocG9pbnRzWzBdLCBwb2ludHNbMV0pO1xuXG4gICAgICAgICAgICBmb3IgKHZhciBqPTE7IGogPCBwb2ludHMubGVuZ3RoLzI7IGorKylcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb250ZXh0LmxpbmVUbyhwb2ludHNbaiAqIDJdLCBwb2ludHNbaiAqIDIgKyAxXSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChzaGFwZS5jbG9zZWQpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29udGV4dC5saW5lVG8ocG9pbnRzWzBdLCBwb2ludHNbMV0pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBpZiB0aGUgZmlyc3QgYW5kIGxhc3QgcG9pbnQgYXJlIHRoZSBzYW1lIGNsb3NlIHRoZSBwYXRoIC0gbXVjaCBuZWF0ZXIgOilcbiAgICAgICAgICAgIGlmIChwb2ludHNbMF0gPT09IHBvaW50c1twb2ludHMubGVuZ3RoLTJdICYmIHBvaW50c1sxXSA9PT0gcG9pbnRzW3BvaW50cy5sZW5ndGgtMV0pXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29udGV4dC5jbG9zZVBhdGgoKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGRhdGEuZmlsbClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb250ZXh0Lmdsb2JhbEFscGhhID0gZGF0YS5maWxsQWxwaGEgKiB3b3JsZEFscGhhO1xuICAgICAgICAgICAgICAgIGNvbnRleHQuZmlsbFN0eWxlID0gJyMnICsgKCcwMDAwMCcgKyAoIGZpbGxDb2xvciB8IDApLnRvU3RyaW5nKDE2KSkuc3Vic3RyKC02KTtcbiAgICAgICAgICAgICAgICBjb250ZXh0LmZpbGwoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChkYXRhLmxpbmVXaWR0aClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb250ZXh0Lmdsb2JhbEFscGhhID0gZGF0YS5saW5lQWxwaGEgKiB3b3JsZEFscGhhO1xuICAgICAgICAgICAgICAgIGNvbnRleHQuc3Ryb2tlU3R5bGUgPSAnIycgKyAoJzAwMDAwJyArICggbGluZUNvbG9yIHwgMCkudG9TdHJpbmcoMTYpKS5zdWJzdHIoLTYpO1xuICAgICAgICAgICAgICAgIGNvbnRleHQuc3Ryb2tlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoZGF0YS50eXBlID09PSBDT05TVC5TSEFQRVMuUkVDVClcbiAgICAgICAge1xuXG4gICAgICAgICAgICBpZiAoZGF0YS5maWxsQ29sb3IgfHwgZGF0YS5maWxsQ29sb3IgPT09IDApXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29udGV4dC5nbG9iYWxBbHBoYSA9IGRhdGEuZmlsbEFscGhhICogd29ybGRBbHBoYTtcbiAgICAgICAgICAgICAgICBjb250ZXh0LmZpbGxTdHlsZSA9ICcjJyArICgnMDAwMDAnICsgKCBmaWxsQ29sb3IgfCAwKS50b1N0cmluZygxNikpLnN1YnN0cigtNik7XG4gICAgICAgICAgICAgICAgY29udGV4dC5maWxsUmVjdChzaGFwZS54LCBzaGFwZS55LCBzaGFwZS53aWR0aCwgc2hhcGUuaGVpZ2h0KTtcblxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGRhdGEubGluZVdpZHRoKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGNvbnRleHQuZ2xvYmFsQWxwaGEgPSBkYXRhLmxpbmVBbHBoYSAqIHdvcmxkQWxwaGE7XG4gICAgICAgICAgICAgICAgY29udGV4dC5zdHJva2VTdHlsZSA9ICcjJyArICgnMDAwMDAnICsgKCBsaW5lQ29sb3IgfCAwKS50b1N0cmluZygxNikpLnN1YnN0cigtNik7XG4gICAgICAgICAgICAgICAgY29udGV4dC5zdHJva2VSZWN0KHNoYXBlLngsIHNoYXBlLnksIHNoYXBlLndpZHRoLCBzaGFwZS5oZWlnaHQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGRhdGEudHlwZSA9PT0gQ09OU1QuU0hBUEVTLkNJUkMpXG4gICAgICAgIHtcbiAgICAgICAgICAgIC8vIFRPRE8gLSBuZWVkIHRvIGJlIFVuZGVmaW5lZCFcbiAgICAgICAgICAgIGNvbnRleHQuYmVnaW5QYXRoKCk7XG4gICAgICAgICAgICBjb250ZXh0LmFyYyhzaGFwZS54LCBzaGFwZS55LCBzaGFwZS5yYWRpdXMsMCwyKk1hdGguUEkpO1xuICAgICAgICAgICAgY29udGV4dC5jbG9zZVBhdGgoKTtcblxuICAgICAgICAgICAgaWYgKGRhdGEuZmlsbClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb250ZXh0Lmdsb2JhbEFscGhhID0gZGF0YS5maWxsQWxwaGEgKiB3b3JsZEFscGhhO1xuICAgICAgICAgICAgICAgIGNvbnRleHQuZmlsbFN0eWxlID0gJyMnICsgKCcwMDAwMCcgKyAoIGZpbGxDb2xvciB8IDApLnRvU3RyaW5nKDE2KSkuc3Vic3RyKC02KTtcbiAgICAgICAgICAgICAgICBjb250ZXh0LmZpbGwoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChkYXRhLmxpbmVXaWR0aClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb250ZXh0Lmdsb2JhbEFscGhhID0gZGF0YS5saW5lQWxwaGEgKiB3b3JsZEFscGhhO1xuICAgICAgICAgICAgICAgIGNvbnRleHQuc3Ryb2tlU3R5bGUgPSAnIycgKyAoJzAwMDAwJyArICggbGluZUNvbG9yIHwgMCkudG9TdHJpbmcoMTYpKS5zdWJzdHIoLTYpO1xuICAgICAgICAgICAgICAgIGNvbnRleHQuc3Ryb2tlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoZGF0YS50eXBlID09PSBDT05TVC5TSEFQRVMuRUxJUClcbiAgICAgICAge1xuICAgICAgICAgICAgLy8gZWxsaXBzZSBjb2RlIHRha2VuIGZyb206IGh0dHA6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvMjE3Mjc5OC9ob3ctdG8tZHJhdy1hbi1vdmFsLWluLWh0bWw1LWNhbnZhc1xuXG4gICAgICAgICAgICB2YXIgdyA9IHNoYXBlLndpZHRoICogMjtcbiAgICAgICAgICAgIHZhciBoID0gc2hhcGUuaGVpZ2h0ICogMjtcblxuICAgICAgICAgICAgdmFyIHggPSBzaGFwZS54IC0gdy8yO1xuICAgICAgICAgICAgdmFyIHkgPSBzaGFwZS55IC0gaC8yO1xuXG4gICAgICAgICAgICBjb250ZXh0LmJlZ2luUGF0aCgpO1xuXG4gICAgICAgICAgICB2YXIga2FwcGEgPSAwLjU1MjI4NDgsXG4gICAgICAgICAgICAgICAgb3ggPSAodyAvIDIpICoga2FwcGEsIC8vIGNvbnRyb2wgcG9pbnQgb2Zmc2V0IGhvcml6b250YWxcbiAgICAgICAgICAgICAgICBveSA9IChoIC8gMikgKiBrYXBwYSwgLy8gY29udHJvbCBwb2ludCBvZmZzZXQgdmVydGljYWxcbiAgICAgICAgICAgICAgICB4ZSA9IHggKyB3LCAgICAgICAgICAgLy8geC1lbmRcbiAgICAgICAgICAgICAgICB5ZSA9IHkgKyBoLCAgICAgICAgICAgLy8geS1lbmRcbiAgICAgICAgICAgICAgICB4bSA9IHggKyB3IC8gMiwgICAgICAgLy8geC1taWRkbGVcbiAgICAgICAgICAgICAgICB5bSA9IHkgKyBoIC8gMjsgICAgICAgLy8geS1taWRkbGVcblxuICAgICAgICAgICAgY29udGV4dC5tb3ZlVG8oeCwgeW0pO1xuICAgICAgICAgICAgY29udGV4dC5iZXppZXJDdXJ2ZVRvKHgsIHltIC0gb3ksIHhtIC0gb3gsIHksIHhtLCB5KTtcbiAgICAgICAgICAgIGNvbnRleHQuYmV6aWVyQ3VydmVUbyh4bSArIG94LCB5LCB4ZSwgeW0gLSBveSwgeGUsIHltKTtcbiAgICAgICAgICAgIGNvbnRleHQuYmV6aWVyQ3VydmVUbyh4ZSwgeW0gKyBveSwgeG0gKyBveCwgeWUsIHhtLCB5ZSk7XG4gICAgICAgICAgICBjb250ZXh0LmJlemllckN1cnZlVG8oeG0gLSBveCwgeWUsIHgsIHltICsgb3ksIHgsIHltKTtcblxuICAgICAgICAgICAgY29udGV4dC5jbG9zZVBhdGgoKTtcblxuICAgICAgICAgICAgaWYgKGRhdGEuZmlsbClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb250ZXh0Lmdsb2JhbEFscGhhID0gZGF0YS5maWxsQWxwaGEgKiB3b3JsZEFscGhhO1xuICAgICAgICAgICAgICAgIGNvbnRleHQuZmlsbFN0eWxlID0gJyMnICsgKCcwMDAwMCcgKyAoIGZpbGxDb2xvciB8IDApLnRvU3RyaW5nKDE2KSkuc3Vic3RyKC02KTtcbiAgICAgICAgICAgICAgICBjb250ZXh0LmZpbGwoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChkYXRhLmxpbmVXaWR0aClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb250ZXh0Lmdsb2JhbEFscGhhID0gZGF0YS5saW5lQWxwaGEgKiB3b3JsZEFscGhhO1xuICAgICAgICAgICAgICAgIGNvbnRleHQuc3Ryb2tlU3R5bGUgPSAnIycgKyAoJzAwMDAwJyArICggbGluZUNvbG9yIHwgMCkudG9TdHJpbmcoMTYpKS5zdWJzdHIoLTYpO1xuICAgICAgICAgICAgICAgIGNvbnRleHQuc3Ryb2tlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoZGF0YS50eXBlID09PSBDT05TVC5TSEFQRVMuUlJFQylcbiAgICAgICAge1xuICAgICAgICAgICAgdmFyIHJ4ID0gc2hhcGUueDtcbiAgICAgICAgICAgIHZhciByeSA9IHNoYXBlLnk7XG4gICAgICAgICAgICB2YXIgd2lkdGggPSBzaGFwZS53aWR0aDtcbiAgICAgICAgICAgIHZhciBoZWlnaHQgPSBzaGFwZS5oZWlnaHQ7XG4gICAgICAgICAgICB2YXIgcmFkaXVzID0gc2hhcGUucmFkaXVzO1xuXG4gICAgICAgICAgICB2YXIgbWF4UmFkaXVzID0gTWF0aC5taW4od2lkdGgsIGhlaWdodCkgLyAyIHwgMDtcbiAgICAgICAgICAgIHJhZGl1cyA9IHJhZGl1cyA+IG1heFJhZGl1cyA/IG1heFJhZGl1cyA6IHJhZGl1cztcblxuICAgICAgICAgICAgY29udGV4dC5iZWdpblBhdGgoKTtcbiAgICAgICAgICAgIGNvbnRleHQubW92ZVRvKHJ4LCByeSArIHJhZGl1cyk7XG4gICAgICAgICAgICBjb250ZXh0LmxpbmVUbyhyeCwgcnkgKyBoZWlnaHQgLSByYWRpdXMpO1xuICAgICAgICAgICAgY29udGV4dC5xdWFkcmF0aWNDdXJ2ZVRvKHJ4LCByeSArIGhlaWdodCwgcnggKyByYWRpdXMsIHJ5ICsgaGVpZ2h0KTtcbiAgICAgICAgICAgIGNvbnRleHQubGluZVRvKHJ4ICsgd2lkdGggLSByYWRpdXMsIHJ5ICsgaGVpZ2h0KTtcbiAgICAgICAgICAgIGNvbnRleHQucXVhZHJhdGljQ3VydmVUbyhyeCArIHdpZHRoLCByeSArIGhlaWdodCwgcnggKyB3aWR0aCwgcnkgKyBoZWlnaHQgLSByYWRpdXMpO1xuICAgICAgICAgICAgY29udGV4dC5saW5lVG8ocnggKyB3aWR0aCwgcnkgKyByYWRpdXMpO1xuICAgICAgICAgICAgY29udGV4dC5xdWFkcmF0aWNDdXJ2ZVRvKHJ4ICsgd2lkdGgsIHJ5LCByeCArIHdpZHRoIC0gcmFkaXVzLCByeSk7XG4gICAgICAgICAgICBjb250ZXh0LmxpbmVUbyhyeCArIHJhZGl1cywgcnkpO1xuICAgICAgICAgICAgY29udGV4dC5xdWFkcmF0aWNDdXJ2ZVRvKHJ4LCByeSwgcngsIHJ5ICsgcmFkaXVzKTtcbiAgICAgICAgICAgIGNvbnRleHQuY2xvc2VQYXRoKCk7XG5cbiAgICAgICAgICAgIGlmIChkYXRhLmZpbGxDb2xvciB8fCBkYXRhLmZpbGxDb2xvciA9PT0gMClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb250ZXh0Lmdsb2JhbEFscGhhID0gZGF0YS5maWxsQWxwaGEgKiB3b3JsZEFscGhhO1xuICAgICAgICAgICAgICAgIGNvbnRleHQuZmlsbFN0eWxlID0gJyMnICsgKCcwMDAwMCcgKyAoIGZpbGxDb2xvciB8IDApLnRvU3RyaW5nKDE2KSkuc3Vic3RyKC02KTtcbiAgICAgICAgICAgICAgICBjb250ZXh0LmZpbGwoKTtcblxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGRhdGEubGluZVdpZHRoKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGNvbnRleHQuZ2xvYmFsQWxwaGEgPSBkYXRhLmxpbmVBbHBoYSAqIHdvcmxkQWxwaGE7XG4gICAgICAgICAgICAgICAgY29udGV4dC5zdHJva2VTdHlsZSA9ICcjJyArICgnMDAwMDAnICsgKCBsaW5lQ29sb3IgfCAwKS50b1N0cmluZygxNikpLnN1YnN0cigtNik7XG4gICAgICAgICAgICAgICAgY29udGV4dC5zdHJva2UoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn07XG5cbi8qXG4gKiBSZW5kZXJzIGEgZ3JhcGhpY3MgbWFza1xuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0gZ3JhcGhpY3Mge1BJWEkuR3JhcGhpY3N9IHRoZSBncmFwaGljcyB3aGljaCB3aWxsIGJlIHVzZWQgYXMgYSBtYXNrXG4gKiBAcGFyYW0gY29udGV4dCB7Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEfSB0aGUgY29udGV4dCAyZCBtZXRob2Qgb2YgdGhlIGNhbnZhc1xuICovXG5DYW52YXNHcmFwaGljcy5yZW5kZXJHcmFwaGljc01hc2sgPSBmdW5jdGlvbiAoZ3JhcGhpY3MsIGNvbnRleHQpXG57XG4gICAgdmFyIGxlbiA9IGdyYXBoaWNzLmdyYXBoaWNzRGF0YS5sZW5ndGg7XG5cbiAgICBpZiAobGVuID09PSAwKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnRleHQuYmVnaW5QYXRoKCk7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgaSsrKVxuICAgIHtcbiAgICAgICAgdmFyIGRhdGEgPSBncmFwaGljcy5ncmFwaGljc0RhdGFbaV07XG4gICAgICAgIHZhciBzaGFwZSA9IGRhdGEuc2hhcGU7XG5cbiAgICAgICAgaWYgKGRhdGEudHlwZSA9PT0gQ09OU1QuU0hBUEVTLlBPTFkpXG4gICAgICAgIHtcblxuICAgICAgICAgICAgdmFyIHBvaW50cyA9IHNoYXBlLnBvaW50cztcblxuICAgICAgICAgICAgY29udGV4dC5tb3ZlVG8ocG9pbnRzWzBdLCBwb2ludHNbMV0pO1xuXG4gICAgICAgICAgICBmb3IgKHZhciBqPTE7IGogPCBwb2ludHMubGVuZ3RoLzI7IGorKylcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb250ZXh0LmxpbmVUbyhwb2ludHNbaiAqIDJdLCBwb2ludHNbaiAqIDIgKyAxXSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIGlmIHRoZSBmaXJzdCBhbmQgbGFzdCBwb2ludCBhcmUgdGhlIHNhbWUgY2xvc2UgdGhlIHBhdGggLSBtdWNoIG5lYXRlciA6KVxuICAgICAgICAgICAgaWYgKHBvaW50c1swXSA9PT0gcG9pbnRzW3BvaW50cy5sZW5ndGgtMl0gJiYgcG9pbnRzWzFdID09PSBwb2ludHNbcG9pbnRzLmxlbmd0aC0xXSlcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb250ZXh0LmNsb3NlUGF0aCgpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoZGF0YS50eXBlID09PSBDT05TVC5TSEFQRVMuUkVDVClcbiAgICAgICAge1xuICAgICAgICAgICAgY29udGV4dC5yZWN0KHNoYXBlLngsIHNoYXBlLnksIHNoYXBlLndpZHRoLCBzaGFwZS5oZWlnaHQpO1xuICAgICAgICAgICAgY29udGV4dC5jbG9zZVBhdGgoKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChkYXRhLnR5cGUgPT09IENPTlNULlNIQVBFUy5DSVJDKVxuICAgICAgICB7XG4gICAgICAgICAgICAvLyBUT0RPIC0gbmVlZCB0byBiZSBVbmRlZmluZWQhXG4gICAgICAgICAgICBjb250ZXh0LmFyYyhzaGFwZS54LCBzaGFwZS55LCBzaGFwZS5yYWRpdXMsIDAsIDIgKiBNYXRoLlBJKTtcbiAgICAgICAgICAgIGNvbnRleHQuY2xvc2VQYXRoKCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoZGF0YS50eXBlID09PSBDT05TVC5TSEFQRVMuRUxJUClcbiAgICAgICAge1xuXG4gICAgICAgICAgICAvLyBlbGxpcHNlIGNvZGUgdGFrZW4gZnJvbTogaHR0cDovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy8yMTcyNzk4L2hvdy10by1kcmF3LWFuLW92YWwtaW4taHRtbDUtY2FudmFzXG5cbiAgICAgICAgICAgIHZhciB3ID0gc2hhcGUud2lkdGggKiAyO1xuICAgICAgICAgICAgdmFyIGggPSBzaGFwZS5oZWlnaHQgKiAyO1xuXG4gICAgICAgICAgICB2YXIgeCA9IHNoYXBlLnggLSB3LzI7XG4gICAgICAgICAgICB2YXIgeSA9IHNoYXBlLnkgLSBoLzI7XG5cbiAgICAgICAgICAgIHZhciBrYXBwYSA9IDAuNTUyMjg0OCxcbiAgICAgICAgICAgICAgICBveCA9ICh3IC8gMikgKiBrYXBwYSwgLy8gY29udHJvbCBwb2ludCBvZmZzZXQgaG9yaXpvbnRhbFxuICAgICAgICAgICAgICAgIG95ID0gKGggLyAyKSAqIGthcHBhLCAvLyBjb250cm9sIHBvaW50IG9mZnNldCB2ZXJ0aWNhbFxuICAgICAgICAgICAgICAgIHhlID0geCArIHcsICAgICAgICAgICAvLyB4LWVuZFxuICAgICAgICAgICAgICAgIHllID0geSArIGgsICAgICAgICAgICAvLyB5LWVuZFxuICAgICAgICAgICAgICAgIHhtID0geCArIHcgLyAyLCAgICAgICAvLyB4LW1pZGRsZVxuICAgICAgICAgICAgICAgIHltID0geSArIGggLyAyOyAgICAgICAvLyB5LW1pZGRsZVxuXG4gICAgICAgICAgICBjb250ZXh0Lm1vdmVUbyh4LCB5bSk7XG4gICAgICAgICAgICBjb250ZXh0LmJlemllckN1cnZlVG8oeCwgeW0gLSBveSwgeG0gLSBveCwgeSwgeG0sIHkpO1xuICAgICAgICAgICAgY29udGV4dC5iZXppZXJDdXJ2ZVRvKHhtICsgb3gsIHksIHhlLCB5bSAtIG95LCB4ZSwgeW0pO1xuICAgICAgICAgICAgY29udGV4dC5iZXppZXJDdXJ2ZVRvKHhlLCB5bSArIG95LCB4bSArIG94LCB5ZSwgeG0sIHllKTtcbiAgICAgICAgICAgIGNvbnRleHQuYmV6aWVyQ3VydmVUbyh4bSAtIG94LCB5ZSwgeCwgeW0gKyBveSwgeCwgeW0pO1xuICAgICAgICAgICAgY29udGV4dC5jbG9zZVBhdGgoKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChkYXRhLnR5cGUgPT09IENPTlNULlNIQVBFUy5SUkVDKVxuICAgICAgICB7XG5cbiAgICAgICAgICAgIHZhciByeCA9IHNoYXBlLng7XG4gICAgICAgICAgICB2YXIgcnkgPSBzaGFwZS55O1xuICAgICAgICAgICAgdmFyIHdpZHRoID0gc2hhcGUud2lkdGg7XG4gICAgICAgICAgICB2YXIgaGVpZ2h0ID0gc2hhcGUuaGVpZ2h0O1xuICAgICAgICAgICAgdmFyIHJhZGl1cyA9IHNoYXBlLnJhZGl1cztcblxuICAgICAgICAgICAgdmFyIG1heFJhZGl1cyA9IE1hdGgubWluKHdpZHRoLCBoZWlnaHQpIC8gMiB8IDA7XG4gICAgICAgICAgICByYWRpdXMgPSByYWRpdXMgPiBtYXhSYWRpdXMgPyBtYXhSYWRpdXMgOiByYWRpdXM7XG5cbiAgICAgICAgICAgIGNvbnRleHQubW92ZVRvKHJ4LCByeSArIHJhZGl1cyk7XG4gICAgICAgICAgICBjb250ZXh0LmxpbmVUbyhyeCwgcnkgKyBoZWlnaHQgLSByYWRpdXMpO1xuICAgICAgICAgICAgY29udGV4dC5xdWFkcmF0aWNDdXJ2ZVRvKHJ4LCByeSArIGhlaWdodCwgcnggKyByYWRpdXMsIHJ5ICsgaGVpZ2h0KTtcbiAgICAgICAgICAgIGNvbnRleHQubGluZVRvKHJ4ICsgd2lkdGggLSByYWRpdXMsIHJ5ICsgaGVpZ2h0KTtcbiAgICAgICAgICAgIGNvbnRleHQucXVhZHJhdGljQ3VydmVUbyhyeCArIHdpZHRoLCByeSArIGhlaWdodCwgcnggKyB3aWR0aCwgcnkgKyBoZWlnaHQgLSByYWRpdXMpO1xuICAgICAgICAgICAgY29udGV4dC5saW5lVG8ocnggKyB3aWR0aCwgcnkgKyByYWRpdXMpO1xuICAgICAgICAgICAgY29udGV4dC5xdWFkcmF0aWNDdXJ2ZVRvKHJ4ICsgd2lkdGgsIHJ5LCByeCArIHdpZHRoIC0gcmFkaXVzLCByeSk7XG4gICAgICAgICAgICBjb250ZXh0LmxpbmVUbyhyeCArIHJhZGl1cywgcnkpO1xuICAgICAgICAgICAgY29udGV4dC5xdWFkcmF0aWNDdXJ2ZVRvKHJ4LCByeSwgcngsIHJ5ICsgcmFkaXVzKTtcbiAgICAgICAgICAgIGNvbnRleHQuY2xvc2VQYXRoKCk7XG4gICAgICAgIH1cbiAgICB9XG59O1xuXG4vKlxuICogVXBkYXRlcyB0aGUgdGludCBvZiBhIGdyYXBoaWNzIG9iamVjdFxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0gZ3JhcGhpY3Mge1BJWEkuR3JhcGhpY3N9IHRoZSBncmFwaGljcyB0aGF0IHdpbGwgaGF2ZSBpdHMgdGludCB1cGRhdGVkXG4gKlxuICovXG5DYW52YXNHcmFwaGljcy51cGRhdGVHcmFwaGljc1RpbnQgPSBmdW5jdGlvbiAoZ3JhcGhpY3MpXG57XG4gICAgaWYgKGdyYXBoaWNzLnRpbnQgPT09IDB4RkZGRkZGICYmIGdyYXBoaWNzLl9wcmV2VGludCA9PT0gZ3JhcGhpY3MudGludClcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgZ3JhcGhpY3MuX3ByZXZUaW50ID0gZ3JhcGhpY3MudGludDtcblxuICAgIHZhciB0aW50UiA9IChncmFwaGljcy50aW50ID4+IDE2ICYgMHhGRikgLyAyNTU7XG4gICAgdmFyIHRpbnRHID0gKGdyYXBoaWNzLnRpbnQgPj4gOCAmIDB4RkYpIC8gMjU1O1xuICAgIHZhciB0aW50QiA9IChncmFwaGljcy50aW50ICYgMHhGRikvIDI1NTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZ3JhcGhpY3MuZ3JhcGhpY3NEYXRhLmxlbmd0aDsgaSsrKVxuICAgIHtcbiAgICAgICAgdmFyIGRhdGEgPSBncmFwaGljcy5ncmFwaGljc0RhdGFbaV07XG5cbiAgICAgICAgdmFyIGZpbGxDb2xvciA9IGRhdGEuZmlsbENvbG9yIHwgMDtcbiAgICAgICAgdmFyIGxpbmVDb2xvciA9IGRhdGEubGluZUNvbG9yIHwgMDtcblxuICAgICAgICAvKlxuICAgICAgICB2YXIgY29sb3JSID0gKGZpbGxDb2xvciA+PiAxNiAmIDB4RkYpIC8gMjU1O1xuICAgICAgICB2YXIgY29sb3JHID0gKGZpbGxDb2xvciA+PiA4ICYgMHhGRikgLyAyNTU7XG4gICAgICAgIHZhciBjb2xvckIgPSAoZmlsbENvbG9yICYgMHhGRikgLyAyNTU7XG5cbiAgICAgICAgY29sb3JSICo9IHRpbnRSO1xuICAgICAgICBjb2xvckcgKj0gdGludEc7XG4gICAgICAgIGNvbG9yQiAqPSB0aW50QjtcblxuICAgICAgICBmaWxsQ29sb3IgPSAoKGNvbG9yUioyNTUgPDwgMTYpICsgKGNvbG9yRyoyNTUgPDwgOCkgKyBjb2xvckIqMjU1KTtcblxuICAgICAgICBjb2xvclIgPSAobGluZUNvbG9yID4+IDE2ICYgMHhGRikgLyAyNTU7XG4gICAgICAgIGNvbG9yRyA9IChsaW5lQ29sb3IgPj4gOCAmIDB4RkYpIC8gMjU1O1xuICAgICAgICBjb2xvckIgPSAobGluZUNvbG9yICYgMHhGRikgLyAyNTU7XG5cbiAgICAgICAgY29sb3JSICo9IHRpbnRSO1xuICAgICAgICBjb2xvckcgKj0gdGludEc7XG4gICAgICAgIGNvbG9yQiAqPSB0aW50QjtcblxuICAgICAgICBsaW5lQ29sb3IgPSAoKGNvbG9yUioyNTUgPDwgMTYpICsgKGNvbG9yRyoyNTUgPDwgOCkgKyBjb2xvckIqMjU1KTtcbiAgICAgICAgKi9cblxuICAgICAgICAvLyBzdXBlciBpbmxpbmUgY29zIGltIGFuIG9wdGltaXphdGlvbiBOQVpJIDopXG4gICAgICAgIGRhdGEuX2ZpbGxUaW50ID0gKCgoZmlsbENvbG9yID4+IDE2ICYgMHhGRikgLyAyNTUgKiB0aW50UioyNTUgPDwgMTYpICsgKChmaWxsQ29sb3IgPj4gOCAmIDB4RkYpIC8gMjU1ICogdGludEcqMjU1IDw8IDgpICsgIChmaWxsQ29sb3IgJiAweEZGKSAvIDI1NSAqIHRpbnRCKjI1NSk7XG4gICAgICAgIGRhdGEuX2xpbmVUaW50ID0gKCgobGluZUNvbG9yID4+IDE2ICYgMHhGRikgLyAyNTUgKiB0aW50UioyNTUgPDwgMTYpICsgKChsaW5lQ29sb3IgPj4gOCAmIDB4RkYpIC8gMjU1ICogdGludEcqMjU1IDw8IDgpICsgIChsaW5lQ29sb3IgJiAweEZGKSAvIDI1NSAqIHRpbnRCKjI1NSk7XG5cbiAgICB9XG59O1xuXG4iLCJ2YXIgQ2FudmFzR3JhcGhpY3MgPSByZXF1aXJlKCcuL0NhbnZhc0dyYXBoaWNzJyk7XG5cbi8qKlxuICogQSBzZXQgb2YgZnVuY3Rpb25zIHVzZWQgdG8gaGFuZGxlIG1hc2tpbmcuXG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICovXG5mdW5jdGlvbiBDYW52YXNNYXNrTWFuYWdlcigpXG57fVxuXG5DYW52YXNNYXNrTWFuYWdlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBDYW52YXNNYXNrTWFuYWdlcjtcbm1vZHVsZS5leHBvcnRzID0gQ2FudmFzTWFza01hbmFnZXI7XG5cbi8qKlxuICogVGhpcyBtZXRob2QgYWRkcyBpdCB0byB0aGUgY3VycmVudCBzdGFjayBvZiBtYXNrcy5cbiAqXG4gKiBAcGFyYW0gbWFza0RhdGEge29iamVjdH0gdGhlIG1hc2tEYXRhIHRoYXQgd2lsbCBiZSBwdXNoZWRcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5XZWJHTFJlbmRlcmVyfFBJWEkuQ2FudmFzUmVuZGVyZXJ9IFRoZSByZW5kZXJlciBjb250ZXh0IHRvIHVzZS5cbiAqL1xuQ2FudmFzTWFza01hbmFnZXIucHJvdG90eXBlLnB1c2hNYXNrID0gZnVuY3Rpb24gKG1hc2tEYXRhLCByZW5kZXJlcilcbntcblxuICAgIHJlbmRlcmVyLmNvbnRleHQuc2F2ZSgpO1xuXG4gICAgdmFyIGNhY2hlQWxwaGEgPSBtYXNrRGF0YS5hbHBoYTtcbiAgICB2YXIgdHJhbnNmb3JtID0gbWFza0RhdGEud29ybGRUcmFuc2Zvcm07XG4gICAgdmFyIHJlc29sdXRpb24gPSByZW5kZXJlci5yZXNvbHV0aW9uO1xuXG4gICAgcmVuZGVyZXIuY29udGV4dC5zZXRUcmFuc2Zvcm0oXG4gICAgICAgIHRyYW5zZm9ybS5hICogcmVzb2x1dGlvbixcbiAgICAgICAgdHJhbnNmb3JtLmIgKiByZXNvbHV0aW9uLFxuICAgICAgICB0cmFuc2Zvcm0uYyAqIHJlc29sdXRpb24sXG4gICAgICAgIHRyYW5zZm9ybS5kICogcmVzb2x1dGlvbixcbiAgICAgICAgdHJhbnNmb3JtLnR4ICogcmVzb2x1dGlvbixcbiAgICAgICAgdHJhbnNmb3JtLnR5ICogcmVzb2x1dGlvblxuICAgICk7XG5cbiAgICAvL1RPRE8gc3Vwb3J0IHNwcml0ZSBhbHBoYSBtYXNrcz8/XG4gICAgLy9sb3RzIG9mIGVmZm9ydCByZXF1aXJlZC4gSWYgZGVtYW5kIGlzIGdyZWF0IGVub3VnaC4uXG4gICAgaWYoIW1hc2tEYXRhLnRleHR1cmUpXG4gICAge1xuICAgICAgICBDYW52YXNHcmFwaGljcy5yZW5kZXJHcmFwaGljc01hc2sobWFza0RhdGEsIHJlbmRlcmVyLmNvbnRleHQpO1xuICAgICAgICByZW5kZXJlci5jb250ZXh0LmNsaXAoKTtcbiAgICB9XG5cbiAgICBtYXNrRGF0YS53b3JsZEFscGhhID0gY2FjaGVBbHBoYTtcbn07XG5cbi8qKlxuICogUmVzdG9yZXMgdGhlIGN1cnJlbnQgZHJhd2luZyBjb250ZXh0IHRvIHRoZSBzdGF0ZSBpdCB3YXMgYmVmb3JlIHRoZSBtYXNrIHdhcyBhcHBsaWVkLlxuICpcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5XZWJHTFJlbmRlcmVyfFBJWEkuQ2FudmFzUmVuZGVyZXJ9IFRoZSByZW5kZXJlciBjb250ZXh0IHRvIHVzZS5cbiAqL1xuQ2FudmFzTWFza01hbmFnZXIucHJvdG90eXBlLnBvcE1hc2sgPSBmdW5jdGlvbiAocmVuZGVyZXIpXG57XG4gICAgcmVuZGVyZXIuY29udGV4dC5yZXN0b3JlKCk7XG59O1xuXG5DYW52YXNNYXNrTWFuYWdlci5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uICgpIHt9O1xuIiwidmFyIHV0aWxzID0gcmVxdWlyZSgnLi4vLi4vLi4vdXRpbHMnKTtcblxuLyoqXG4gKiBVdGlsaXR5IG1ldGhvZHMgZm9yIFNwcml0ZS9UZXh0dXJlIHRpbnRpbmcuXG4gKiBAc3RhdGljXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKi9cbnZhciBDYW52YXNUaW50ZXIgPSB7fTtcbm1vZHVsZS5leHBvcnRzID0gQ2FudmFzVGludGVyO1xuXG4vKipcbiAqIEJhc2ljYWxseSB0aGlzIG1ldGhvZCBqdXN0IG5lZWRzIGEgc3ByaXRlIGFuZCBhIGNvbG9yIGFuZCB0aW50cyB0aGUgc3ByaXRlIHdpdGggdGhlIGdpdmVuIGNvbG9yLlxuICpcbiAqIEBwYXJhbSBzcHJpdGUge1BJWEkuU3ByaXRlfSB0aGUgc3ByaXRlIHRvIHRpbnRcbiAqIEBwYXJhbSBjb2xvciB7bnVtYmVyfSB0aGUgY29sb3IgdG8gdXNlIHRvIHRpbnQgdGhlIHNwcml0ZSB3aXRoXG4gKiBAcmV0dXJuIHtIVE1MQ2FudmFzRWxlbWVudH0gVGhlIHRpbnRlZCBjYW52YXNcbiAqL1xuQ2FudmFzVGludGVyLmdldFRpbnRlZFRleHR1cmUgPSBmdW5jdGlvbiAoc3ByaXRlLCBjb2xvcilcbntcbiAgICB2YXIgdGV4dHVyZSA9IHNwcml0ZS50ZXh0dXJlO1xuXG4gICAgY29sb3IgPSBDYW52YXNUaW50ZXIucm91bmRDb2xvcihjb2xvcik7XG5cbiAgICB2YXIgc3RyaW5nQ29sb3IgPSAnIycgKyAoJzAwMDAwJyArICggY29sb3IgfCAwKS50b1N0cmluZygxNikpLnN1YnN0cigtNik7XG5cbiAgICB0ZXh0dXJlLnRpbnRDYWNoZSA9IHRleHR1cmUudGludENhY2hlIHx8IHt9O1xuXG4gICAgaWYgKHRleHR1cmUudGludENhY2hlW3N0cmluZ0NvbG9yXSlcbiAgICB7XG4gICAgICAgIHJldHVybiB0ZXh0dXJlLnRpbnRDYWNoZVtzdHJpbmdDb2xvcl07XG4gICAgfVxuXG4gICAgIC8vIGNsb25lIHRleHR1cmUuLlxuICAgIHZhciBjYW52YXMgPSBDYW52YXNUaW50ZXIuY2FudmFzIHx8IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NhbnZhcycpO1xuXG4gICAgLy9DYW52YXNUaW50ZXIudGludFdpdGhQZXJQaXhlbCh0ZXh0dXJlLCBzdHJpbmdDb2xvciwgY2FudmFzKTtcbiAgICBDYW52YXNUaW50ZXIudGludE1ldGhvZCh0ZXh0dXJlLCBjb2xvciwgY2FudmFzKTtcblxuICAgIGlmIChDYW52YXNUaW50ZXIuY29udmVydFRpbnRUb0ltYWdlKVxuICAgIHtcbiAgICAgICAgLy8gaXMgdGhpcyBiZXR0ZXI/XG4gICAgICAgIHZhciB0aW50SW1hZ2UgPSBuZXcgSW1hZ2UoKTtcbiAgICAgICAgdGludEltYWdlLnNyYyA9IGNhbnZhcy50b0RhdGFVUkwoKTtcblxuICAgICAgICB0ZXh0dXJlLnRpbnRDYWNoZVtzdHJpbmdDb2xvcl0gPSB0aW50SW1hZ2U7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHRleHR1cmUudGludENhY2hlW3N0cmluZ0NvbG9yXSA9IGNhbnZhcztcbiAgICAgICAgLy8gaWYgd2UgYXJlIG5vdCBjb252ZXJ0aW5nIHRoZSB0ZXh0dXJlIHRvIGFuIGltYWdlIHRoZW4gd2UgbmVlZCB0byBsb3NlIHRoZSByZWZlcmVuY2UgdG8gdGhlIGNhbnZhc1xuICAgICAgICBDYW52YXNUaW50ZXIuY2FudmFzID0gbnVsbDtcbiAgICB9XG5cbiAgICByZXR1cm4gY2FudmFzO1xufTtcblxuLyoqXG4gKiBUaW50IGEgdGV4dHVyZSB1c2luZyB0aGUgJ211bHRpcGx5JyBvcGVyYXRpb24uXG4gKlxuICogQHBhcmFtIHRleHR1cmUge1BJWEkuVGV4dHVyZX0gdGhlIHRleHR1cmUgdG8gdGludFxuICogQHBhcmFtIGNvbG9yIHtudW1iZXJ9IHRoZSBjb2xvciB0byB1c2UgdG8gdGludCB0aGUgc3ByaXRlIHdpdGhcbiAqIEBwYXJhbSBjYW52YXMge0hUTUxDYW52YXNFbGVtZW50fSB0aGUgY3VycmVudCBjYW52YXNcbiAqL1xuQ2FudmFzVGludGVyLnRpbnRXaXRoTXVsdGlwbHkgPSBmdW5jdGlvbiAodGV4dHVyZSwgY29sb3IsIGNhbnZhcylcbntcbiAgICB2YXIgY29udGV4dCA9IGNhbnZhcy5nZXRDb250ZXh0KCAnMmQnICk7XG5cbiAgICB2YXIgcmVzb2x1dGlvbiA9IHRleHR1cmUuYmFzZVRleHR1cmUucmVzb2x1dGlvbjtcblxuICAgIHZhciBjcm9wID0gdGV4dHVyZS5jcm9wLmNsb25lKCk7XG4gICAgY3JvcC54ICo9IHJlc29sdXRpb247XG4gICAgY3JvcC55ICo9IHJlc29sdXRpb247XG4gICAgY3JvcC53aWR0aCAqPSByZXNvbHV0aW9uO1xuICAgIGNyb3AuaGVpZ2h0ICo9IHJlc29sdXRpb247XG5cbiAgICBjYW52YXMud2lkdGggPSBjcm9wLndpZHRoO1xuICAgIGNhbnZhcy5oZWlnaHQgPSBjcm9wLmhlaWdodDtcblxuICAgIGNvbnRleHQuZmlsbFN0eWxlID0gJyMnICsgKCcwMDAwMCcgKyAoIGNvbG9yIHwgMCkudG9TdHJpbmcoMTYpKS5zdWJzdHIoLTYpO1xuXG4gICAgY29udGV4dC5maWxsUmVjdCgwLCAwLCBjcm9wLndpZHRoLCBjcm9wLmhlaWdodCk7XG5cbiAgICBjb250ZXh0Lmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbiA9ICdtdWx0aXBseSc7XG5cbiAgICBjb250ZXh0LmRyYXdJbWFnZShcbiAgICAgICAgdGV4dHVyZS5iYXNlVGV4dHVyZS5zb3VyY2UsXG4gICAgICAgIGNyb3AueCxcbiAgICAgICAgY3JvcC55LFxuICAgICAgICBjcm9wLndpZHRoLFxuICAgICAgICBjcm9wLmhlaWdodCxcbiAgICAgICAgMCxcbiAgICAgICAgMCxcbiAgICAgICAgY3JvcC53aWR0aCxcbiAgICAgICAgY3JvcC5oZWlnaHRcbiAgICApO1xuXG4gICAgY29udGV4dC5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb24gPSAnZGVzdGluYXRpb24tYXRvcCc7XG5cbiAgICBjb250ZXh0LmRyYXdJbWFnZShcbiAgICAgICAgdGV4dHVyZS5iYXNlVGV4dHVyZS5zb3VyY2UsXG4gICAgICAgIGNyb3AueCxcbiAgICAgICAgY3JvcC55LFxuICAgICAgICBjcm9wLndpZHRoLFxuICAgICAgICBjcm9wLmhlaWdodCxcbiAgICAgICAgMCxcbiAgICAgICAgMCxcbiAgICAgICAgY3JvcC53aWR0aCxcbiAgICAgICAgY3JvcC5oZWlnaHRcbiAgICApO1xufTtcblxuLyoqXG4gKiBUaW50IGEgdGV4dHVyZSB1c2luZyB0aGUgJ292ZXJsYXknIG9wZXJhdGlvbi5cbiAqXG4gKiBAcGFyYW0gdGV4dHVyZSB7UElYSS5UZXh0dXJlfSB0aGUgdGV4dHVyZSB0byB0aW50XG4gKiBAcGFyYW0gY29sb3Ige251bWJlcn0gdGhlIGNvbG9yIHRvIHVzZSB0byB0aW50IHRoZSBzcHJpdGUgd2l0aFxuICogQHBhcmFtIGNhbnZhcyB7SFRNTENhbnZhc0VsZW1lbnR9IHRoZSBjdXJyZW50IGNhbnZhc1xuICovXG5DYW52YXNUaW50ZXIudGludFdpdGhPdmVybGF5ID0gZnVuY3Rpb24gKHRleHR1cmUsIGNvbG9yLCBjYW52YXMpXG57XG4gICAgdmFyIGNvbnRleHQgPSBjYW52YXMuZ2V0Q29udGV4dCggJzJkJyApO1xuXG4gICAgdmFyIHJlc29sdXRpb24gPSB0ZXh0dXJlLmJhc2VUZXh0dXJlLnJlc29sdXRpb247XG5cbiAgICB2YXIgY3JvcCA9IHRleHR1cmUuY3JvcC5jbG9uZSgpO1xuICAgIGNyb3AueCAqPSByZXNvbHV0aW9uO1xuICAgIGNyb3AueSAqPSByZXNvbHV0aW9uO1xuICAgIGNyb3Aud2lkdGggKj0gcmVzb2x1dGlvbjtcbiAgICBjcm9wLmhlaWdodCAqPSByZXNvbHV0aW9uO1xuXG4gICAgY2FudmFzLndpZHRoID0gY3JvcC53aWR0aDtcbiAgICBjYW52YXMuaGVpZ2h0ID0gY3JvcC5oZWlnaHQ7XG5cbiAgICBjb250ZXh0Lmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbiA9ICdjb3B5JztcbiAgICBjb250ZXh0LmZpbGxTdHlsZSA9ICcjJyArICgnMDAwMDAnICsgKCBjb2xvciB8IDApLnRvU3RyaW5nKDE2KSkuc3Vic3RyKC02KTtcbiAgICBjb250ZXh0LmZpbGxSZWN0KDAsIDAsIGNyb3Aud2lkdGgsIGNyb3AuaGVpZ2h0KTtcblxuICAgIGNvbnRleHQuZ2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uID0gJ2Rlc3RpbmF0aW9uLWF0b3AnO1xuICAgIGNvbnRleHQuZHJhd0ltYWdlKFxuICAgICAgICB0ZXh0dXJlLmJhc2VUZXh0dXJlLnNvdXJjZSxcbiAgICAgICAgY3JvcC54LFxuICAgICAgICBjcm9wLnksXG4gICAgICAgIGNyb3Aud2lkdGgsXG4gICAgICAgIGNyb3AuaGVpZ2h0LFxuICAgICAgICAwLFxuICAgICAgICAwLFxuICAgICAgICBjcm9wLndpZHRoLFxuICAgICAgICBjcm9wLmhlaWdodFxuICAgICk7XG5cbiAgICAvLyBjb250ZXh0Lmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbiA9ICdjb3B5Jztcbn07XG5cbi8qKlxuICogVGludCBhIHRleHR1cmUgcGl4ZWwgcGVyIHBpeGVsLlxuICpcbiAqIEBwYXJhbSB0ZXh0dXJlIHtQSVhJLlRleHR1cmV9IHRoZSB0ZXh0dXJlIHRvIHRpbnRcbiAqIEBwYXJhbSBjb2xvciB7bnVtYmVyfSB0aGUgY29sb3IgdG8gdXNlIHRvIHRpbnQgdGhlIHNwcml0ZSB3aXRoXG4gKiBAcGFyYW0gY2FudmFzIHtIVE1MQ2FudmFzRWxlbWVudH0gdGhlIGN1cnJlbnQgY2FudmFzXG4gKi9cbkNhbnZhc1RpbnRlci50aW50V2l0aFBlclBpeGVsID0gZnVuY3Rpb24gKHRleHR1cmUsIGNvbG9yLCBjYW52YXMpXG57XG4gICAgdmFyIGNvbnRleHQgPSBjYW52YXMuZ2V0Q29udGV4dCggJzJkJyApO1xuXG4gICAgdmFyIHJlc29sdXRpb24gPSB0ZXh0dXJlLmJhc2VUZXh0dXJlLnJlc29sdXRpb247XG5cbiAgICB2YXIgY3JvcCA9IHRleHR1cmUuY3JvcC5jbG9uZSgpO1xuICAgIGNyb3AueCAqPSByZXNvbHV0aW9uO1xuICAgIGNyb3AueSAqPSByZXNvbHV0aW9uO1xuICAgIGNyb3Aud2lkdGggKj0gcmVzb2x1dGlvbjtcbiAgICBjcm9wLmhlaWdodCAqPSByZXNvbHV0aW9uO1xuXG4gICAgY2FudmFzLndpZHRoID0gY3JvcC53aWR0aDtcbiAgICBjYW52YXMuaGVpZ2h0ID0gY3JvcC5oZWlnaHQ7XG5cbiAgICBjb250ZXh0Lmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbiA9ICdjb3B5JztcbiAgICBjb250ZXh0LmRyYXdJbWFnZShcbiAgICAgICAgdGV4dHVyZS5iYXNlVGV4dHVyZS5zb3VyY2UsXG4gICAgICAgIGNyb3AueCxcbiAgICAgICAgY3JvcC55LFxuICAgICAgICBjcm9wLndpZHRoLFxuICAgICAgICBjcm9wLmhlaWdodCxcbiAgICAgICAgMCxcbiAgICAgICAgMCxcbiAgICAgICAgY3JvcC53aWR0aCxcbiAgICAgICAgY3JvcC5oZWlnaHRcbiAgICApO1xuXG4gICAgdmFyIHJnYlZhbHVlcyA9IHV0aWxzLmhleDJyZ2IoY29sb3IpO1xuICAgIHZhciByID0gcmdiVmFsdWVzWzBdLCBnID0gcmdiVmFsdWVzWzFdLCBiID0gcmdiVmFsdWVzWzJdO1xuXG4gICAgdmFyIHBpeGVsRGF0YSA9IGNvbnRleHQuZ2V0SW1hZ2VEYXRhKDAsIDAsIGNyb3Aud2lkdGgsIGNyb3AuaGVpZ2h0KTtcblxuICAgIHZhciBwaXhlbHMgPSBwaXhlbERhdGEuZGF0YTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcGl4ZWxzLmxlbmd0aDsgaSArPSA0KVxuICAgIHtcbiAgICAgICAgcGl4ZWxzW2krMF0gKj0gcjtcbiAgICAgICAgcGl4ZWxzW2krMV0gKj0gZztcbiAgICAgICAgcGl4ZWxzW2krMl0gKj0gYjtcbiAgICB9XG5cbiAgICBjb250ZXh0LnB1dEltYWdlRGF0YShwaXhlbERhdGEsIDAsIDApO1xufTtcblxuLyoqXG4gKiBSb3VuZHMgdGhlIHNwZWNpZmllZCBjb2xvciBhY2NvcmRpbmcgdG8gdGhlIENhbnZhc1RpbnRlci5jYWNoZVN0ZXBzUGVyQ29sb3JDaGFubmVsLlxuICpcbiAqIEBwYXJhbSBjb2xvciB7bnVtYmVyfSB0aGUgY29sb3IgdG8gcm91bmQsIHNob3VsZCBiZSBhIGhleCBjb2xvclxuICovXG5DYW52YXNUaW50ZXIucm91bmRDb2xvciA9IGZ1bmN0aW9uIChjb2xvcilcbntcbiAgICB2YXIgc3RlcCA9IENhbnZhc1RpbnRlci5jYWNoZVN0ZXBzUGVyQ29sb3JDaGFubmVsO1xuXG4gICAgdmFyIHJnYlZhbHVlcyA9IHV0aWxzLmhleDJyZ2IoY29sb3IpO1xuXG4gICAgcmdiVmFsdWVzWzBdID0gTWF0aC5taW4oMjU1LCAocmdiVmFsdWVzWzBdIC8gc3RlcCkgKiBzdGVwKTtcbiAgICByZ2JWYWx1ZXNbMV0gPSBNYXRoLm1pbigyNTUsIChyZ2JWYWx1ZXNbMV0gLyBzdGVwKSAqIHN0ZXApO1xuICAgIHJnYlZhbHVlc1syXSA9IE1hdGgubWluKDI1NSwgKHJnYlZhbHVlc1syXSAvIHN0ZXApICogc3RlcCk7XG5cbiAgICByZXR1cm4gdXRpbHMucmdiMmhleChyZ2JWYWx1ZXMpO1xufTtcblxuLyoqXG4gKiBOdW1iZXIgb2Ygc3RlcHMgd2hpY2ggd2lsbCBiZSB1c2VkIGFzIGEgY2FwIHdoZW4gcm91bmRpbmcgY29sb3JzLlxuICpcbiAqIEBtZW1iZXJcbiAqL1xuQ2FudmFzVGludGVyLmNhY2hlU3RlcHNQZXJDb2xvckNoYW5uZWwgPSA4O1xuXG4vKipcbiAqIFRpbnQgY2FjaGUgYm9vbGVhbiBmbGFnLlxuICpcbiAqIEBtZW1iZXJcbiAqL1xuQ2FudmFzVGludGVyLmNvbnZlcnRUaW50VG9JbWFnZSA9IGZhbHNlO1xuXG4vKipcbiAqIFdoZXRoZXIgb3Igbm90IHRoZSBDYW52YXMgQmxlbmRNb2RlcyBhcmUgc3VwcG9ydGVkLCBjb25zZXF1ZW50bHkgdGhlIGFiaWxpdHkgdG8gdGludCB1c2luZyB0aGUgbXVsdGlwbHkgbWV0aG9kLlxuICpcbiAqIEBtZW1iZXJcbiAqL1xuQ2FudmFzVGludGVyLmNhblVzZU11bHRpcGx5ID0gdXRpbHMuY2FuVXNlTmV3Q2FudmFzQmxlbmRNb2RlcygpO1xuXG4vKipcbiAqIFRoZSB0aW50aW5nIG1ldGhvZCB0aGF0IHdpbGwgYmUgdXNlZC5cbiAqXG4gKi9cbkNhbnZhc1RpbnRlci50aW50TWV0aG9kID0gQ2FudmFzVGludGVyLmNhblVzZU11bHRpcGx5ID8gQ2FudmFzVGludGVyLnRpbnRXaXRoTXVsdGlwbHkgOiAgQ2FudmFzVGludGVyLnRpbnRXaXRoUGVyUGl4ZWw7XG4iLCJ2YXIgR0xUZXh0dXJlID0gcmVxdWlyZSgncGl4aS1nbC1jb3JlJykuR0xUZXh0dXJlLFxuXHR1dGlscyA9IHJlcXVpcmUoJy4uLy4uL3V0aWxzJyk7XG5cbi8qKlxuICogSGVscGVyIGNsYXNzIHRvIGNyZWF0ZSBhIHdlYkdMIFRleHR1cmVcbiAqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gZ2wge1dlYkdMUmVuZGVyaW5nQ29udGV4dH1cbiAqL1xuXG52YXIgVGV4dHVyZU1hbmFnZXIgPSBmdW5jdGlvbihnbClcbntcblx0dGhpcy5nbCA9IGdsO1xuXG5cdC8vIHRyYWNrIHRleHR1cmVzIGluIHRoZSByZW5kZXJlciBzbyB3ZSBjYW4gbm8gbG9uZ2VyIGxpc3RlbiB0byB0aGVtIG9uIGRlc3RydWN0aW9uLlxuXHR0aGlzLl9tYW5hZ2VkVGV4dHVyZXMgPSBbXTtcbiAgICB0aGlzLmdsVGV4dHVyZXMgPSB7fTtcblxufVxuXG5UZXh0dXJlTWFuYWdlci5wcm90b3R5cGUuYmluZFRleHR1cmUgPSBmdW5jdGlvbih0ZXh0dXJlKVxue1xuXG59XG5cblxuVGV4dHVyZU1hbmFnZXIucHJvdG90eXBlLmdldFRleHR1cmUgPSBmdW5jdGlvbih0ZXh0dXJlKVxue1xuXG59XG5cbi8qKlxuICogVXBkYXRlcyBhbmQvb3IgQ3JlYXRlcyBhIFdlYkdMIHRleHR1cmUgZm9yIHRoZSByZW5kZXJlcidzIGNvbnRleHQuXG4gKlxuICogQHBhcmFtIHRleHR1cmUge1BJWEkuQmFzZVRleHR1cmV8UElYSS5UZXh0dXJlfSB0aGUgdGV4dHVyZSB0byB1cGRhdGVcbiAqL1xuVGV4dHVyZU1hbmFnZXIucHJvdG90eXBlLnVwZGF0ZVRleHR1cmUgPSBmdW5jdGlvbih0ZXh0dXJlKVxue1xuXHR0ZXh0dXJlID0gdGV4dHVyZS5iYXNlVGV4dHVyZSB8fCB0ZXh0dXJlO1xuXG5cdGlmICghdGV4dHVyZS5oYXNMb2FkZWQpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgXG4gICAgdmFyIGdsID0gdGhpcy5nbDtcbiAgICB2YXIgZ2xUZXh0dXJlID0gdGhpcy5nbFRleHR1cmVzW3RleHR1cmUudWlkXS8vdGV4dHVyZS5fZ2xUZXh0dXJlc1tnbC5pZF07XG5cbiAgICBpZiAoIWdsVGV4dHVyZSlcbiAgICB7XG4gICAgICAgIGdsVGV4dHVyZSA9IG5ldyBHTFRleHR1cmUoZ2wpO1xuICAgICAgICBnbFRleHR1cmUucHJlbXVsdGlwbHlBbHBoYSA9IHRydWVcbiAgICAgICAgdGV4dHVyZS5fZ2xUZXh0dXJlc1tnbC5pZF0gPSBnbFRleHR1cmU7XG5cbiAgICAgICAvLyB0aGlzLmdsVGV4dHVyZXNbdGV4dHVyZS51aWRdID0gZ2xUZXh0dXJlO1xuXG4gICAgICAgIHRleHR1cmUub24oJ3VwZGF0ZScsIHRoaXMudXBkYXRlVGV4dHVyZSwgdGhpcyk7XG4gICAgICAgIHRleHR1cmUub24oJ2Rpc3Bvc2UnLCB0aGlzLmRlc3Ryb3lUZXh0dXJlLCB0aGlzKTtcbiAgICAgICAgXG4gICAgICAgIHRoaXMuX21hbmFnZWRUZXh0dXJlcy5wdXNoKHRleHR1cmUpO1xuICAgIH1cblxuICAgIGdsVGV4dHVyZS51cGxvYWQodGV4dHVyZS5zb3VyY2UpO1xuICAgIFxuICAgIC8vVE9ETyBjaGVjayBpcyBwb3dlciBvZiB0d28uLlxuICAgIGdsVGV4dHVyZS5lbmFibGVXcmFwQ2xhbXAoKTtcblxuXG4gICAgLy8gVE9ETyBjaGVjayBmb3Igc2NhbGluZyB0eXBlXG4gICAgZ2xUZXh0dXJlLmVuYWJsZUxpbmVhclNjYWxpbmcoKTtcblxuICAgIHJldHVybiAgdGV4dHVyZS5fZ2xUZXh0dXJlc1tnbC5pZF07XG59XG5cbi8qKlxuICogRGVsZXRlcyB0aGUgdGV4dHVyZSBmcm9tIFdlYkdMXG4gKlxuICogQHBhcmFtIHRleHR1cmUge1BJWEkuQmFzZVRleHR1cmV8UElYSS5UZXh0dXJlfSB0aGUgdGV4dHVyZSB0byBkZXN0cm95XG4gKi9cblRleHR1cmVNYW5hZ2VyLnByb3RvdHlwZS5kZXN0cm95VGV4dHVyZSA9IGZ1bmN0aW9uKHRleHR1cmUsIF9za2lwUmVtb3ZlKVxue1xuXHR0ZXh0dXJlID0gdGV4dHVyZS5iYXNlVGV4dHVyZSB8fCB0ZXh0dXJlO1xuXG4gICAgaWYgKCF0ZXh0dXJlLmhhc0xvYWRlZClcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAodGV4dHVyZS5fZ2xUZXh0dXJlc1t0aGlzLmdsLmlkXSlcbiAgICB7XG4gICAgICAgIHRleHR1cmUuX2dsVGV4dHVyZXNbdGhpcy5nbC5pZF0uZGVzdHJveSgpO1xuICAgICAgICB0ZXh0dXJlLm9mZigndXBkYXRlJywgdGhpcy51cGRhdGVUZXh0dXJlLCB0aGlzKTtcbiAgICAgICAgdGV4dHVyZS5vZmYoJ2Rpc3Bvc2UnLCB0aGlzLmRlc3Ryb3lUZXh0dXJlLCB0aGlzKTtcblxuXG4gICAgICAgIGRlbGV0ZSB0ZXh0dXJlLl9nbFRleHR1cmVzW3RoaXMuZ2wuaWRdO1xuXG4gICAgICAgIGlmICghX3NraXBSZW1vdmUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHZhciBpID0gdGhpcy5fbWFuYWdlZFRleHR1cmVzLmluZGV4T2YodGV4dHVyZSk7XG4gICAgICAgICAgICBpZiAoaSAhPT0gLTEpIHtcbiAgICAgICAgICAgICAgICB1dGlscy5yZW1vdmVJdGVtcyh0aGlzLl9tYW5hZ2VkVGV4dHVyZXMsIGksIDEpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxufVxuXG5UZXh0dXJlTWFuYWdlci5wcm90b3R5cGUucmVtb3ZlQWxsID0gZnVuY3Rpb24oKVxue1xuXHQvLyBlbXB0eSBhbGwgdGhlIG9sZCBnbCB0ZXh0dXJlcyBhcyB0aGV5IGFyZSB1c2VsZXNzIG5vd1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5fbWFuYWdlZFRleHR1cmVzLmxlbmd0aDsgKytpKVxuICAgIHtcbiAgICAgICAgdmFyIHRleHR1cmUgPSB0aGlzLl9tYW5hZ2VkVGV4dHVyZXNbaV07XG4gICAgICAgIGlmICh0ZXh0dXJlLl9nbFRleHR1cmVzW3RoaXMuZ2wuaWRdKVxuICAgICAgICB7XG4gICAgICAgICAgICBkZWxldGUgdGV4dHVyZS5fZ2xUZXh0dXJlc1t0aGlzLmdsLmlkXTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuVGV4dHVyZU1hbmFnZXIucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbigpXG57XG4gICAgLy8gZGVzdHJveSBtYW5hZ2VkIHRleHR1cmVzXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLl9tYW5hZ2VkVGV4dHVyZXMubGVuZ3RoOyArK2kpXG4gICAge1xuICAgICAgICB2YXIgdGV4dHVyZSA9IHRoaXMuX21hbmFnZWRUZXh0dXJlc1tpXTtcbiAgICAgICAgdGhpcy5kZXN0cm95VGV4dHVyZSh0ZXh0dXJlLCB0cnVlKTtcbiAgICAgICAgdGV4dHVyZS5vZmYoJ3VwZGF0ZScsIHRoaXMudXBkYXRlVGV4dHVyZSwgdGhpcyk7XG4gICAgICAgIHRleHR1cmUub2ZmKCdkaXNwb3NlJywgdGhpcy5kZXN0cm95VGV4dHVyZSwgdGhpcyk7XG4gICAgfVxuXG4gICAgdGhpcy5fbWFuYWdlZFRleHR1cmVzID0gbnVsbDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBUZXh0dXJlTWFuYWdlcjtcblxuIiwidmFyIFN5c3RlbVJlbmRlcmVyID0gcmVxdWlyZSgnLi4vU3lzdGVtUmVuZGVyZXInKSxcbiAgICBTaGFkZXJNYW5hZ2VyID0gcmVxdWlyZSgnLi9tYW5hZ2Vycy9TaGFkZXJNYW5hZ2VyJyksXG4gICAgTWFza01hbmFnZXIgPSByZXF1aXJlKCcuL21hbmFnZXJzL01hc2tNYW5hZ2VyJyksXG4gICAgU3RlbmNpbE1hbmFnZXIgPSByZXF1aXJlKCcuL21hbmFnZXJzL1N0ZW5jaWxNYW5hZ2VyJyksXG4gICAgRmlsdGVyTWFuYWdlciA9IHJlcXVpcmUoJy4vbWFuYWdlcnMvRmlsdGVyTWFuYWdlcicpLFxuICAgIEJsZW5kTW9kZU1hbmFnZXIgPSByZXF1aXJlKCcuL21hbmFnZXJzL0JsZW5kTW9kZU1hbmFnZXInKSxcbiAgICBSZW5kZXJUYXJnZXQgPSByZXF1aXJlKCcuL3V0aWxzL1JlbmRlclRhcmdldCcpLFxuICAgIE9iamVjdFJlbmRlcmVyID0gcmVxdWlyZSgnLi91dGlscy9PYmplY3RSZW5kZXJlcicpLFxuICAgIEZYQUFGaWx0ZXIgPSByZXF1aXJlKCcuL2ZpbHRlcnMvRlhBQUZpbHRlcicpLFxuICAgIFRleHR1cmVNYW5hZ2VyID0gcmVxdWlyZSgnLi9UZXh0dXJlTWFuYWdlcicpLFxuICAgIGNyZWF0ZUNvbnRleHQgPSByZXF1aXJlKCdwaXhpLWdsLWNvcmUnKS5jcmVhdGVDb250ZXh0LFxuICAgIG1hcFdlYkdMQmxlbmRNb2Rlc1RvUGl4aSA9IHJlcXVpcmUoJy4vdXRpbHMvbWFwV2ViR0xCbGVuZE1vZGVzVG9QaXhpJyksXG4gICAgbWFwV2ViR0xEcmF3TW9kZXNUb1BpeGkgPSByZXF1aXJlKCcuL3V0aWxzL21hcFdlYkdMRHJhd01vZGVzVG9QaXhpJyksXG4gICAgdXRpbHMgPSByZXF1aXJlKCcuLi8uLi91dGlscycpLFxuICAgIENPTlNUID0gcmVxdWlyZSgnLi4vLi4vY29uc3QnKTtcblxuLyoqXG4gKiBUaGUgV2ViR0xSZW5kZXJlciBkcmF3cyB0aGUgc2NlbmUgYW5kIGFsbCBpdHMgY29udGVudCBvbnRvIGEgd2ViR0wgZW5hYmxlZCBjYW52YXMuIFRoaXMgcmVuZGVyZXJcbiAqIHNob3VsZCBiZSB1c2VkIGZvciBicm93c2VycyB0aGF0IHN1cHBvcnQgd2ViR0wuIFRoaXMgUmVuZGVyIHdvcmtzIGJ5IGF1dG9tYXRpY2FsbHkgbWFuYWdpbmcgd2ViR0xCYXRjaHMuXG4gKiBTbyBubyBuZWVkIGZvciBTcHJpdGUgQmF0Y2hlcyBvciBTcHJpdGUgQ2xvdWRzLlxuICogRG9uJ3QgZm9yZ2V0IHRvIGFkZCB0aGUgdmlldyB0byB5b3VyIERPTSBvciB5b3Ugd2lsbCBub3Qgc2VlIGFueXRoaW5nIDopXG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQGV4dGVuZHMgUElYSS5TeXN0ZW1SZW5kZXJlclxuICogQHBhcmFtIFt3aWR0aD0wXSB7bnVtYmVyfSB0aGUgd2lkdGggb2YgdGhlIGNhbnZhcyB2aWV3XG4gKiBAcGFyYW0gW2hlaWdodD0wXSB7bnVtYmVyfSB0aGUgaGVpZ2h0IG9mIHRoZSBjYW52YXMgdmlld1xuICogQHBhcmFtIFtvcHRpb25zXSB7b2JqZWN0fSBUaGUgb3B0aW9uYWwgcmVuZGVyZXIgcGFyYW1ldGVyc1xuICogQHBhcmFtIFtvcHRpb25zLnZpZXddIHtIVE1MQ2FudmFzRWxlbWVudH0gdGhlIGNhbnZhcyB0byB1c2UgYXMgYSB2aWV3LCBvcHRpb25hbFxuICogQHBhcmFtIFtvcHRpb25zLnRyYW5zcGFyZW50PWZhbHNlXSB7Ym9vbGVhbn0gSWYgdGhlIHJlbmRlciB2aWV3IGlzIHRyYW5zcGFyZW50LCBkZWZhdWx0IGZhbHNlXG4gKiBAcGFyYW0gW29wdGlvbnMuYXV0b1Jlc2l6ZT1mYWxzZV0ge2Jvb2xlYW59IElmIHRoZSByZW5kZXIgdmlldyBpcyBhdXRvbWF0aWNhbGx5IHJlc2l6ZWQsIGRlZmF1bHQgZmFsc2VcbiAqIEBwYXJhbSBbb3B0aW9ucy5hbnRpYWxpYXM9ZmFsc2VdIHtib29sZWFufSBzZXRzIGFudGlhbGlhcy4gSWYgbm90IGF2YWlsYWJsZSBuYXRpdmVseSB0aGVuIEZYQUEgYW50aWFsaWFzaW5nIGlzIHVzZWRcbiAqIEBwYXJhbSBbb3B0aW9ucy5mb3JjZUZYQUE9ZmFsc2VdIHtib29sZWFufSBmb3JjZXMgRlhBQSBhbnRpYWxpYXNpbmcgdG8gYmUgdXNlZCBvdmVyIG5hdGl2ZS4gRlhBQSBpcyBmYXN0ZXIsIGJ1dCBtYXkgbm90IGFsd2F5cyBsb29rIGFzIGdyZWF0XG4gKiBAcGFyYW0gW29wdGlvbnMucmVzb2x1dGlvbj0xXSB7bnVtYmVyfSB0aGUgcmVzb2x1dGlvbiBvZiB0aGUgcmVuZGVyZXIgcmV0aW5hIHdvdWxkIGJlIDJcbiAqIEBwYXJhbSBbb3B0aW9ucy5jbGVhckJlZm9yZVJlbmRlcj10cnVlXSB7Ym9vbGVhbn0gVGhpcyBzZXRzIGlmIHRoZSBDYW52YXNSZW5kZXJlciB3aWxsIGNsZWFyIHRoZSBjYW52YXMgb3JcbiAqICAgICAgbm90IGJlZm9yZSB0aGUgbmV3IHJlbmRlciBwYXNzLiBJZiB5b3Ugd2lzaCB0byBzZXQgdGhpcyB0byBmYWxzZSwgeW91ICptdXN0KiBzZXQgcHJlc2VydmVEcmF3aW5nQnVmZmVyIHRvIGB0cnVlYC5cbiAqIEBwYXJhbSBbb3B0aW9ucy5wcmVzZXJ2ZURyYXdpbmdCdWZmZXI9ZmFsc2VdIHtib29sZWFufSBlbmFibGVzIGRyYXdpbmcgYnVmZmVyIHByZXNlcnZhdGlvbiwgZW5hYmxlIHRoaXMgaWZcbiAqICAgICAgeW91IG5lZWQgdG8gY2FsbCB0b0RhdGFVcmwgb24gdGhlIHdlYmdsIGNvbnRleHQuXG4gKiBAcGFyYW0gW29wdGlvbnMucm91bmRQaXhlbHM9ZmFsc2VdIHtib29sZWFufSBJZiB0cnVlIFBpeGkgd2lsbCBNYXRoLmZsb29yKCkgeC95IHZhbHVlcyB3aGVuIHJlbmRlcmluZywgc3RvcHBpbmcgcGl4ZWwgaW50ZXJwb2xhdGlvbi5cbiAqL1xuZnVuY3Rpb24gV2ViR0xSZW5kZXJlcih3aWR0aCwgaGVpZ2h0LCBvcHRpb25zKVxue1xuICAgIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuXG4gICAgU3lzdGVtUmVuZGVyZXIuY2FsbCh0aGlzLCAnV2ViR0wnLCB3aWR0aCwgaGVpZ2h0LCBvcHRpb25zKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSB0eXBlIG9mIHRoaXMgcmVuZGVyZXIgYXMgYSBzdGFuZGFyZGlzZWQgY29uc3RcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn0vL1xuICAgICAqXG4gICAgICovXG4gICAgdGhpcy50eXBlID0gQ09OU1QuUkVOREVSRVJfVFlQRS5XRUJHTDtcblxuICAgIHRoaXMuaGFuZGxlQ29udGV4dExvc3QgPSB0aGlzLmhhbmRsZUNvbnRleHRMb3N0LmJpbmQodGhpcyk7XG4gICAgdGhpcy5oYW5kbGVDb250ZXh0UmVzdG9yZWQgPSB0aGlzLmhhbmRsZUNvbnRleHRSZXN0b3JlZC5iaW5kKHRoaXMpO1xuXG4gICAgdGhpcy52aWV3LmFkZEV2ZW50TGlzdGVuZXIoJ3dlYmdsY29udGV4dGxvc3QnLCB0aGlzLmhhbmRsZUNvbnRleHRMb3N0LCBmYWxzZSk7XG4gICAgdGhpcy52aWV3LmFkZEV2ZW50TGlzdGVuZXIoJ3dlYmdsY29udGV4dHJlc3RvcmVkJywgdGhpcy5oYW5kbGVDb250ZXh0UmVzdG9yZWQsIGZhbHNlKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBvcHRpb25zIHBhc3NlZCBpbiB0byBjcmVhdGUgYSBuZXcgd2ViZ2wgY29udGV4dC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge29iamVjdH1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX2NvbnRleHRPcHRpb25zID0ge1xuICAgICAgICBhbHBoYTogdGhpcy50cmFuc3BhcmVudCxcbiAgICAgICAgYW50aWFsaWFzOiBvcHRpb25zLmFudGlhbGlhcyxcbiAgICAgICAgcHJlbXVsdGlwbGllZEFscGhhOiB0aGlzLnRyYW5zcGFyZW50ICYmIHRoaXMudHJhbnNwYXJlbnQgIT09ICdub3RNdWx0aXBsaWVkJyxcbiAgICAgICAgc3RlbmNpbDogdHJ1ZSxcbiAgICAgICAgcHJlc2VydmVEcmF3aW5nQnVmZmVyOiBvcHRpb25zLnByZXNlcnZlRHJhd2luZ0J1ZmZlclxuICAgIH07XG5cbiAgICB0aGlzLl9iYWNrZ3JvdW5kQ29sb3JSZ2JhWzNdID0gdGhpcy50cmFuc3BhcmVudCA/IDAgOiAxO1xuXG4gICAgLyoqXG4gICAgICogRGVhbHMgd2l0aCBtYW5hZ2luZyB0aGUgc2hhZGVyIHByb2dyYW1zIGFuZCB0aGVpciBhdHRyaWJzLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5TaGFkZXJNYW5hZ2VyfVxuICAgICAqL1xuICAgIHRoaXMuc2hhZGVyTWFuYWdlciA9IG5ldyBTaGFkZXJNYW5hZ2VyKHRoaXMpO1xuXG4gICAgLyoqXG4gICAgICogTWFuYWdlcyB0aGUgbWFza3MgdXNpbmcgdGhlIHN0ZW5jaWwgYnVmZmVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5NYXNrTWFuYWdlcn1cbiAgICAgKi9cbiAgICB0aGlzLm1hc2tNYW5hZ2VyID0gbmV3IE1hc2tNYW5hZ2VyKHRoaXMpO1xuXG4gICAgLyoqXG4gICAgICogTWFuYWdlcyB0aGUgc3RlbmNpbCBidWZmZXIuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlN0ZW5jaWxNYW5hZ2VyfVxuICAgICAqL1xuICAgIHRoaXMuc3RlbmNpbE1hbmFnZXIgPSBuZXcgU3RlbmNpbE1hbmFnZXIodGhpcyk7XG5cbiAgICAvKipcbiAgICAgKiBNYW5hZ2VzIHRoZSBmaWx0ZXJzLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5GaWx0ZXJNYW5hZ2VyfVxuICAgICAqL1xuICAgIHRoaXMuZmlsdGVyTWFuYWdlciA9IG5ldyBGaWx0ZXJNYW5hZ2VyKHRoaXMpO1xuXG4gICAgLyoqXG4gICAgICogTWFuYWdlcyB0aGUgYmxlbmRNb2Rlc1xuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5CbGVuZE1vZGVNYW5hZ2VyfVxuICAgICAqL1xuICAgIHRoaXMuYmxlbmRNb2RlTWFuYWdlciA9IG5ldyBCbGVuZE1vZGVNYW5hZ2VyKHRoaXMpO1xuXG4gICAgXG4gICAgLyoqXG4gICAgICogVGhlIGN1cnJlbnRseSBhY3RpdmUgT2JqZWN0UmVuZGVyZXIuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLk9iamVjdFJlbmRlcmVyfVxuICAgICAqL1xuICAgIHRoaXMuY3VycmVudFJlbmRlcmVyID0gbmV3IE9iamVjdFJlbmRlcmVyKHRoaXMpO1xuXG4gICAgdGhpcy5pbml0UGx1Z2lucygpO1xuXG4gICAgLy8gaW5pdGlhbGl6ZSB0aGUgY29udGV4dCBzbyBpdCBpcyByZWFkeSBmb3IgdGhlIG1hbmFnZXJzLlxuICAgIHRoaXMuZ2wgPSBjcmVhdGVDb250ZXh0KHRoaXMudmlldywgdGhpcy5fY29udGV4dE9wdGlvbnMpO1xuXG4gICAgdGhpcy5faW5pdENvbnRleHQoKTtcblxuICAgIC8vIG1hcCBzb21lIHdlYkdMIGJsZW5kIGFuZCBkcmF3bW9kZXMuLlxuICAgIHRoaXMuYmxlbmRNb2RlcyA9IG1hcFdlYkdMQmxlbmRNb2Rlc1RvUGl4aShnbCk7XG4gICAgdGhpcy5kcmF3TW9kZXMgPSBtYXBXZWJHTERyYXdNb2Rlc1RvUGl4aShnbClcblxuICAgIHRoaXMuX2FjdGl2ZVNoYWRlciA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBIb2xkcyB0aGUgY3VycmVudCByZW5kZXIgdGFyZ2V0XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlJlbmRlclRhcmdldH1cbiAgICAgKi9cbiAgICB0aGlzLl9hY3RpdmVSZW5kZXJUYXJnZXQgPSBudWxsO1xuICAgIHRoaXMuX2FjdGl2ZVRleHR1cmVMb2NhdGlvbiA9IG51bGw7XG4gICAgdGhpcy5fYWN0aXZlVGV4dHVyZSA9IG51bGw7XG59XG5cbi8vIGNvbnN0cnVjdG9yXG5XZWJHTFJlbmRlcmVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoU3lzdGVtUmVuZGVyZXIucHJvdG90eXBlKTtcbldlYkdMUmVuZGVyZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gV2ViR0xSZW5kZXJlcjtcbm1vZHVsZS5leHBvcnRzID0gV2ViR0xSZW5kZXJlcjtcbnV0aWxzLnBsdWdpblRhcmdldC5taXhpbihXZWJHTFJlbmRlcmVyKTtcblxuLyoqXG4gKiBDcmVhdGVzIHRoZSBXZWJHTCBjb250ZXh0XG4gKlxuICogQHByaXZhdGVcbiAqL1xuV2ViR0xSZW5kZXJlci5wcm90b3R5cGUuX2luaXRDb250ZXh0ID0gZnVuY3Rpb24gKClcbntcbiAgICB2YXIgZ2wgPSB0aGlzLmdsO1xuXG4gICAgLy8gY3JlYXRlIGEgdGV4dHVyZSBtYW5hZ2VyLi4uXG4gICAgdGhpcy50ZXh0dXJlTWFuYWdlciA9IG5ldyBUZXh0dXJlTWFuYWdlcihnbCk7XG5cbiAgICAvLyBzZXQgdXAgdGhlIGRlZmF1bHQgcGl4aSBzZXR0aW5ncy4uXG4gICAgZ2wuZGlzYWJsZShnbC5ERVBUSF9URVNUKTtcbiAgICBnbC5kaXNhYmxlKGdsLkNVTExfRkFDRSk7XG4gICAgZ2wuZW5hYmxlKGdsLkJMRU5EKTtcblxuXG4gICAgdGhpcy5yb290UmVuZGVyVGFyZ2V0ID0gbmV3IFJlbmRlclRhcmdldChnbCwgdGhpcy53aWR0aCwgdGhpcy5oZWlnaHQsIG51bGwsIHRoaXMucmVzb2x1dGlvbiwgdHJ1ZSk7XG4gICAgdGhpcy5yb290UmVuZGVyVGFyZ2V0LmNsZWFyQ29sb3IgPSB0aGlzLl9iYWNrZ3JvdW5kQ29sb3JSZ2JhO1xuICAgIFxuICAgIHRoaXMuYmluZFJlbmRlclRhcmdldCh0aGlzLnJvb3RSZW5kZXJUYXJnZXQpO1xuXG4gICAgdGhpcy5lbWl0KCdjb250ZXh0JywgZ2wpO1xuXG4gICAgLy8gc2V0dXAgdGhlIHdpZHRoL2hlaWdodCBwcm9wZXJ0aWVzIGFuZCBnbCB2aWV3cG9ydFxuICAgIHRoaXMucmVzaXplKHRoaXMud2lkdGgsIHRoaXMuaGVpZ2h0KTsgICAgXG59O1xuXG4vKipcbiAqIFJlbmRlcnMgdGhlIG9iamVjdCB0byBpdHMgd2ViR0wgdmlld1xuICpcbiAqIEBwYXJhbSBvYmplY3Qge1BJWEkuRGlzcGxheU9iamVjdH0gdGhlIG9iamVjdCB0byBiZSByZW5kZXJlZFxuICovXG5XZWJHTFJlbmRlcmVyLnByb3RvdHlwZS5yZW5kZXIgPSBmdW5jdGlvbiAoZGlzcGxheU9iamVjdClcbntcbiAgICB0aGlzLmVtaXQoJ3ByZXJlbmRlcicpO1xuXG4gICAgLy8gbm8gcG9pbnQgcmVuZGVyaW5nIGlmIG91ciBjb250ZXh0IGhhcyBiZWVuIGJsb3duIHVwIVxuICAgIGlmICh0aGlzLmdsLmlzQ29udGV4dExvc3QoKSlcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLl9sYXN0T2JqZWN0UmVuZGVyZWQgPSBkaXNwbGF5T2JqZWN0O1xuXG4gICAgdmFyIGNhY2hlUGFyZW50ID0gZGlzcGxheU9iamVjdC5wYXJlbnQ7XG4gICAgZGlzcGxheU9iamVjdC5wYXJlbnQgPSB0aGlzLl90ZW1wRGlzcGxheU9iamVjdFBhcmVudDtcbiAgICAvLyB1cGRhdGUgdGhlIHNjZW5lIGdyYXBoXG4gICAgZGlzcGxheU9iamVjdC51cGRhdGVUcmFuc2Zvcm0oKTtcbiAgICBkaXNwbGF5T2JqZWN0LnBhcmVudCA9IGNhY2hlUGFyZW50O1xuXG4gICAgdGhpcy5yZW5kZXJEaXNwbGF5T2JqZWN0KGRpc3BsYXlPYmplY3QsIHRoaXMucm9vdFJlbmRlclRhcmdldCwgdGhpcy5jbGVhckJlZm9yZVJlbmRlcik7Ly90aGlzLnByb2plY3Rpb24pO1xuXG4gICAgdGhpcy5lbWl0KCdwb3N0cmVuZGVyJyk7XG59O1xuXG4vKipcbiAqIFJlbmRlcnMgYSBEaXNwbGF5IE9iamVjdC5cbiAqXG4gKiBAcGFyYW0gZGlzcGxheU9iamVjdCB7UElYSS5EaXNwbGF5T2JqZWN0fSBUaGUgRGlzcGxheU9iamVjdCB0byByZW5kZXJcbiAqIEBwYXJhbSByZW5kZXJUYXJnZXQge1BJWEkuUmVuZGVyVGFyZ2V0fSBUaGUgcmVuZGVyIHRhcmdldCB0byB1c2UgdG8gcmVuZGVyIHRoaXMgZGlzcGxheSBvYmplY3RcbiAqXG4gKi9cbldlYkdMUmVuZGVyZXIucHJvdG90eXBlLnJlbmRlckRpc3BsYXlPYmplY3QgPSBmdW5jdGlvbiAoZGlzcGxheU9iamVjdCwgcmVuZGVyVGFyZ2V0LCBjbGVhcikvL3Byb2plY3Rpb24sIGJ1ZmZlcilcbntcbiAgICB0aGlzLmJpbmRSZW5kZXJUYXJnZXQocmVuZGVyVGFyZ2V0KTtcblxuICAgIGlmKGNsZWFyKVxuICAgIHtcbiAgICAgICAgcmVuZGVyVGFyZ2V0LmNsZWFyKCk7XG4gICAgfVxuXG4gICAgLy8gc3RhcnQgdGhlIGZpbHRlciBtYW5hZ2VyXG4gICAgdGhpcy5maWx0ZXJNYW5hZ2VyLnNldEZpbHRlclN0YWNrKCByZW5kZXJUYXJnZXQuZmlsdGVyU3RhY2sgKTtcblxuICAgIC8vIHJlbmRlciB0aGUgc2NlbmUhXG4gICAgZGlzcGxheU9iamVjdC5yZW5kZXJXZWJHTCh0aGlzKTtcblxuICAgIC8vIGZpbmlzaCB0aGUgY3VycmVudCByZW5kZXJlci4uXG4gICAgdGhpcy5jdXJyZW50UmVuZGVyZXIuZmx1c2goKTtcbn07XG5cbi8qKlxuICogQ2hhbmdlcyB0aGUgY3VycmVudCByZW5kZXJlciB0byB0aGUgb25lIGdpdmVuIGluIHBhcmFtZXRlclxuICpcbiAqIEBwYXJhbSBvYmplY3RSZW5kZXJlciB7UElYSS5PYmplY3RSZW5kZXJlcn0gVGhlIG9iamVjdCByZW5kZXJlciB0byB1c2UuXG4gKi9cbldlYkdMUmVuZGVyZXIucHJvdG90eXBlLnNldE9iamVjdFJlbmRlcmVyID0gZnVuY3Rpb24gKG9iamVjdFJlbmRlcmVyKVxue1xuICAgIGlmICh0aGlzLmN1cnJlbnRSZW5kZXJlciA9PT0gb2JqZWN0UmVuZGVyZXIpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5jdXJyZW50UmVuZGVyZXIuc3RvcCgpO1xuICAgIHRoaXMuY3VycmVudFJlbmRlcmVyID0gb2JqZWN0UmVuZGVyZXI7XG4gICAgdGhpcy5jdXJyZW50UmVuZGVyZXIuc3RhcnQoKTtcbn07XG5cbi8qKlxuICogUmVzaXplcyB0aGUgd2ViR0wgdmlldyB0byB0aGUgc3BlY2lmaWVkIHdpZHRoIGFuZCBoZWlnaHQuXG4gKlxuICogQHBhcmFtIHdpZHRoIHtudW1iZXJ9IHRoZSBuZXcgd2lkdGggb2YgdGhlIHdlYkdMIHZpZXdcbiAqIEBwYXJhbSBoZWlnaHQge251bWJlcn0gdGhlIG5ldyBoZWlnaHQgb2YgdGhlIHdlYkdMIHZpZXdcbiAqL1xuV2ViR0xSZW5kZXJlci5wcm90b3R5cGUucmVzaXplID0gZnVuY3Rpb24gKHdpZHRoLCBoZWlnaHQpXG57XG4gICAgU3lzdGVtUmVuZGVyZXIucHJvdG90eXBlLnJlc2l6ZS5jYWxsKHRoaXMsIHdpZHRoLCBoZWlnaHQpO1xuXG4gICAgdGhpcy5maWx0ZXJNYW5hZ2VyLnJlc2l6ZSh3aWR0aCwgaGVpZ2h0KTtcbiAgICB0aGlzLnJvb3RSZW5kZXJUYXJnZXQucmVzaXplKHdpZHRoLCBoZWlnaHQpO1xuXG4gICAgaWYodGhpcy5jdXJyZW50UmVuZGVyVGFyZ2V0ID09PSB0aGlzLnJlbmRlclRhcmdldClcbiAgICB7XG4gICAgICAgIHRoaXMucm9vdFJlbmRlclRhcmdldC5hY3RpdmF0ZSgpO1xuICAgIH1cbn07XG5cbi8qKlxuICogQ2hhbmdlcyB0aGUgY3VycmVudCByZW5kZXIgdGFyZ2V0IHRvIHRoZSBvbmUgZ2l2ZW4gaW4gcGFyYW1ldGVyXG4gKlxuICogQHBhcmFtIHJlbmRlclRhcmdldCB7UElYSS5SZW5kZXJUYXJnZXR9IHRoZSBuZXcgcmVuZGVyIHRhcmdldFxuICovXG5XZWJHTFJlbmRlcmVyLnByb3RvdHlwZS5iaW5kUmVuZGVyVGFyZ2V0ID0gZnVuY3Rpb24gKHJlbmRlclRhcmdldCkvL3Byb2plY3Rpb24sIGJ1ZmZlcilcbntcbiAgICBpZihyZW5kZXJUYXJnZXQgIT09IHRoaXMuX2FjdGl2ZVJlbmRlclRhcmdldClcbiAgICB7XG4gICAgICAgIHRoaXMuX2FjdGl2ZVJlbmRlclRhcmdldCA9IHJlbmRlclRhcmdldDtcblxuICAgICAgICBpZih0aGlzLl9hY3RpdmVTaGFkZXIpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuX2FjdGl2ZVNoYWRlci51bmlmb3Jtcy5wcm9qZWN0aW9uTWF0cml4ID0gcmVuZGVyVGFyZ2V0LnByb2plY3Rpb25NYXRyaXgudG9BcnJheSh0cnVlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJlbmRlclRhcmdldC5hY3RpdmF0ZSgpO1xuXG4gICAgICAgIHRoaXMuc3RlbmNpbE1hbmFnZXIuc2V0TWFza1N0YWNrKCByZW5kZXJUYXJnZXQuc3RlbmNpbE1hc2tTdGFjayApO1xuICAgIH1cbn1cblxuV2ViR0xSZW5kZXJlci5wcm90b3R5cGUuYmluZFNoYWRlciA9IGZ1bmN0aW9uIChzaGFkZXIpLy9wcm9qZWN0aW9uLCBidWZmZXIpXG57XG4gICAgLy9UT0RPIGNhY2hlXG4gICAgaWYodGhpcy5fYWN0aXZlU2hhZGVyICE9PSBzaGFkZXIpXG4gICAge1xuICAgICAgICB0aGlzLl9hY3RpdmVTaGFkZXIgPSBzaGFkZXI7XG4gICAgICAgIHNoYWRlci5iaW5kKCk7XG5cbiAgICAgICAgLy8gYXV0b21hdGljYWxseSBzZXQgdGhlIHByb2plY3Rpb24gbWF0cml4XG4gICAgICAgIHNoYWRlci51bmlmb3Jtcy5wcm9qZWN0aW9uTWF0cml4ID0gdGhpcy5fYWN0aXZlUmVuZGVyVGFyZ2V0LnByb2plY3Rpb25NYXRyaXgudG9BcnJheSh0cnVlKTtcbiAgICB9XG59XG5cblxuV2ViR0xSZW5kZXJlci5wcm90b3R5cGUuYmluZFRleHR1cmUgPSBmdW5jdGlvbiAodGV4dHVyZSwgbG9jYXRpb24pXG57XG4gICAgdmFyIGdsID0gdGhpcy5nbDtcblxuICAgIC8vVE9ETyB0ZXN0IHBlcmYgb2YgY2FjaGU/XG4gICAgbG9jYXRpb24gPSBsb2NhdGlvbiB8fCAwO1xuXG4gICAgaWYodGhpcy5fYWN0aXZlVGV4dHVyZUxvY2F0aW9uICE9PSBsb2NhdGlvbikvL1xuICAgIHtcbiAgICAgICAgdGhpcy5fYWN0aXZlVGV4dHVyZUxvY2F0aW9uID0gbG9jYXRpb25cbiAgICAgICAgZ2wuYWN0aXZlVGV4dHVyZShnbC5URVhUVVJFMCArIGxvY2F0aW9uICk7XG4gICAgfVxuXG4gICAgLy9UT0RPIC0gY2FuIHdlIGNhY2hlIHRoaXMgdGV4dHVyZSB0b28/XG4gICAgdGhpcy5fYWN0aXZlVGV4dHVyZSA9IHRleHR1cmU7ICAgICAgXG4gICAgXG4gICAgaWYgKCF0ZXh0dXJlLl9nbFRleHR1cmVzW2dsLmlkXSlcbiAgICB7XG4gICAgICAgIC8vIHRoaXMgd2lsbCBhbHNvIGJpbmQgdGhlIHRleHR1cmUuLlxuICAgICAgICB0aGlzLnRleHR1cmVNYW5hZ2VyLnVwZGF0ZVRleHR1cmUodGV4dHVyZSk7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7ICAgXG4gICAgICAgIC8vIGJpbmQgdGhlIGN1cnJlbnQgdGV4dHVyZVxuICAgICAgICB0ZXh0dXJlLl9nbFRleHR1cmVzW2dsLmlkXS5iaW5kKCk7XG4gICAgfVxufVxuXG5cbi8qKlxuICogSGFuZGxlcyBhIGxvc3Qgd2ViZ2wgY29udGV4dFxuICpcbiAqIEBwcml2YXRlXG4gKi9cbldlYkdMUmVuZGVyZXIucHJvdG90eXBlLmhhbmRsZUNvbnRleHRMb3N0ID0gZnVuY3Rpb24gKGV2ZW50KVxue1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG59O1xuXG4vKipcbiAqIEhhbmRsZXMgYSByZXN0b3JlZCB3ZWJnbCBjb250ZXh0XG4gKlxuICogQHByaXZhdGVcbiAqL1xuV2ViR0xSZW5kZXJlci5wcm90b3R5cGUuaGFuZGxlQ29udGV4dFJlc3RvcmVkID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLl9pbml0Q29udGV4dCgpO1xuICAgIHRoaXMudGV4dHVyZU1hbmFnZXIucmVtb3ZlQWxsKCk7XG59O1xuXG4vKipcbiAqIFJlbW92ZXMgZXZlcnl0aGluZyBmcm9tIHRoZSByZW5kZXJlciAoZXZlbnQgbGlzdGVuZXJzLCBzcHJpdGViYXRjaCwgZXRjLi4uKVxuICpcbiAqIEBwYXJhbSBbcmVtb3ZlVmlldz1mYWxzZV0ge2Jvb2xlYW59IFJlbW92ZXMgdGhlIENhbnZhcyBlbGVtZW50IGZyb20gdGhlIERPTS5cbiAqL1xuV2ViR0xSZW5kZXJlci5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uIChyZW1vdmVWaWV3KVxue1xuICAgIHRoaXMuZGVzdHJveVBsdWdpbnMoKTtcblxuICAgIC8vIHJlbW92ZSBsaXN0ZW5lcnNcbiAgICB0aGlzLnZpZXcucmVtb3ZlRXZlbnRMaXN0ZW5lcignd2ViZ2xjb250ZXh0bG9zdCcsIHRoaXMuaGFuZGxlQ29udGV4dExvc3QpO1xuICAgIHRoaXMudmlldy5yZW1vdmVFdmVudExpc3RlbmVyKCd3ZWJnbGNvbnRleHRyZXN0b3JlZCcsIHRoaXMuaGFuZGxlQ29udGV4dFJlc3RvcmVkKTtcblxuICAgIHRoaXMudGV4dHVyZU1hbmFnZXIuZGVzdHJveUFsbCgpO1xuXG4gICAgLy8gY2FsbCBiYXNlIGRlc3Ryb3lcbiAgICBTeXN0ZW1SZW5kZXJlci5wcm90b3R5cGUuZGVzdHJveS5jYWxsKHRoaXMsIHJlbW92ZVZpZXcpO1xuXG4gICAgdGhpcy51aWQgPSAwO1xuXG4gICAgLy8gZGVzdHJveSB0aGUgbWFuYWdlcnNcbiAgICB0aGlzLnNoYWRlck1hbmFnZXIuZGVzdHJveSgpO1xuICAgIHRoaXMubWFza01hbmFnZXIuZGVzdHJveSgpO1xuICAgIHRoaXMuc3RlbmNpbE1hbmFnZXIuZGVzdHJveSgpO1xuICAgIHRoaXMuZmlsdGVyTWFuYWdlci5kZXN0cm95KCk7XG4gICAgdGhpcy5ibGVuZE1vZGVNYW5hZ2VyLmRlc3Ryb3koKTtcblxuICAgIHRoaXMuc2hhZGVyTWFuYWdlciA9IG51bGw7XG4gICAgdGhpcy5tYXNrTWFuYWdlciA9IG51bGw7XG4gICAgdGhpcy5maWx0ZXJNYW5hZ2VyID0gbnVsbDtcbiAgICB0aGlzLmJsZW5kTW9kZU1hbmFnZXIgPSBudWxsO1xuICAgIHRoaXMuY3VycmVudFJlbmRlcmVyID0gbnVsbDtcblxuICAgIHRoaXMuaGFuZGxlQ29udGV4dExvc3QgPSBudWxsO1xuICAgIHRoaXMuaGFuZGxlQ29udGV4dFJlc3RvcmVkID0gbnVsbDtcblxuICAgIHRoaXMuX2NvbnRleHRPcHRpb25zID0gbnVsbDtcblxuICAgIHRoaXMuZ2wudXNlUHJvZ3JhbShudWxsKTtcbiAgICB0aGlzLmdsID0gbnVsbDtcbn07XG5cbiIsInZhciBEZWZhdWx0U2hhZGVyID0gcmVxdWlyZSgnLi4vc2hhZGVycy9UZXh0dXJlU2hhZGVyJyk7XG5cbi8qKlxuICogVGhpcyBpcyB0aGUgYmFzZSBjbGFzcyBmb3IgY3JlYXRpbmcgYSBQSVhJIGZpbHRlci4gQ3VycmVudGx5IG9ubHkgV2ViR0wgc3VwcG9ydHMgZmlsdGVycy5cbiAqIElmIHlvdSB3YW50IHRvIG1ha2UgYSBjdXN0b20gZmlsdGVyIHRoaXMgc2hvdWxkIGJlIHlvdXIgYmFzZSBjbGFzcy5cbiAqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gdmVydGV4U3JjIHtzdHJpbmd8c3RyaW5nW119IFRoZSB2ZXJ0ZXggc2hhZGVyIHNvdXJjZSBhcyBhbiBhcnJheSBvZiBzdHJpbmdzLlxuICogQHBhcmFtIGZyYWdtZW50U3JjIHtzdHJpbmd8c3RyaW5nW119IFRoZSBmcmFnbWVudCBzaGFkZXIgc291cmNlIGFzIGFuIGFycmF5IG9mIHN0cmluZ3MuXG4gKiBAcGFyYW0gdW5pZm9ybXMge29iamVjdH0gQW4gb2JqZWN0IGNvbnRhaW5pbmcgdGhlIHVuaWZvcm1zIGZvciB0aGlzIGZpbHRlci5cbiAqL1xuZnVuY3Rpb24gQWJzdHJhY3RGaWx0ZXIodmVydGV4U3JjLCBmcmFnbWVudFNyYywgdW5pZm9ybXMpXG57XG5cbiAgICAvKipcbiAgICAgKiBBbiBhcnJheSBvZiBzaGFkZXJzXG4gICAgICogQG1lbWJlciB7UElYSS5TaGFkZXJbXX1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuc2hhZGVycyA9IFtdO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGV4dHJhIHBhZGRpbmcgdGhhdCB0aGUgZmlsdGVyIG1pZ2h0IG5lZWRcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy5wYWRkaW5nID0gMDtcblxuICAgIC8qKlxuICAgICAqIFRoZSB1bmlmb3JtcyBhcyBhbiBvYmplY3RcbiAgICAgKiBAbWVtYmVyIHtvYmplY3R9XG4gICAgICovXG4gICAgdGhpcy51bmlmb3JtcyA9IHVuaWZvcm1zIHx8IHt9O1xuXG5cbiAgICAvKipcbiAgICAgKiBUaGUgY29kZSBvZiB0aGUgdmVydGV4IHNoYWRlclxuICAgICAqIEBtZW1iZXIge3N0cmluZ1tdfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy52ZXJ0ZXhTcmMgPSB2ZXJ0ZXhTcmMgfHwgRGVmYXVsdFNoYWRlci5kZWZhdWx0VmVydGV4U3JjO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGNvZGUgb2YgdGhlIGZyYW1lbnQgc2hhZGVyXG4gICAgICogQG1lbWJlciB7c3RyaW5nW119XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLmZyYWdtZW50U3JjID0gZnJhZ21lbnRTcmMgfHwgRGVmYXVsdFNoYWRlci5kZWZhdWx0RnJhZ21lbnRTcmM7XG5cbiAgICAvL1RPRE8gYSByZW1pbmRlciAtIHdvdWxkIGJlIGNvb2wgdG8gaGF2ZSBsb3dlciByZXMgZmlsdGVycyBhcyB0aGlzIHdvdWxkIGdpdmUgYmV0dGVyIHBlcmZvcm1hbmNlLlxuXG4gICAgLy90eXBlb2YgZnJhZ21lbnRTcmMgPT09ICdzdHJpbmcnID8gZnJhZ21lbnRTcmMuc3BsaXQoJycpIDogKGZyYWdtZW50U3JjIHx8IFtdKTtcblxufVxuXG5BYnN0cmFjdEZpbHRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBBYnN0cmFjdEZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gQWJzdHJhY3RGaWx0ZXI7XG5cbi8qKlxuICogR3JhYnMgYSBzaGFkZXIgZnJvbSB0aGUgY3VycmVudCByZW5kZXJlclxuICpcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5XZWJHTFJlbmRlcmVyfSBUaGUgcmVuZGVyZXIgdG8gcmV0cmlldmUgdGhlIHNoYWRlciBmcm9tXG4gKi9cbkFic3RyYWN0RmlsdGVyLnByb3RvdHlwZS5nZXRTaGFkZXIgPSBmdW5jdGlvbiAocmVuZGVyZXIpXG57XG4gICAgdmFyIGdsID0gcmVuZGVyZXIuZ2w7XG5cbiAgICB2YXIgc2hhZGVyID0gdGhpcy5zaGFkZXJzW2dsLmlkXTtcblxuICAgIGlmICghc2hhZGVyKVxuICAgIHtcbiAgICAgICAgc2hhZGVyID0gbmV3IERlZmF1bHRTaGFkZXIocmVuZGVyZXIuc2hhZGVyTWFuYWdlcixcbiAgICAgICAgICAgIHRoaXMudmVydGV4U3JjLFxuICAgICAgICAgICAgdGhpcy5mcmFnbWVudFNyYyxcbiAgICAgICAgICAgIHRoaXMudW5pZm9ybXMsXG4gICAgICAgICAgICB0aGlzLmF0dHJpYnV0ZXNcbiAgICAgICAgKTtcblxuICAgICAgICB0aGlzLnNoYWRlcnNbZ2wuaWRdID0gc2hhZGVyO1xuICAgIH1cblxuICAgIHJldHVybiBzaGFkZXI7XG59O1xuXG4vKipcbiAqIEFwcGxpZXMgdGhlIGZpbHRlclxuICpcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5XZWJHTFJlbmRlcmVyfSBUaGUgcmVuZGVyZXIgdG8gcmV0cmlldmUgdGhlIGZpbHRlciBmcm9tXG4gKiBAcGFyYW0gaW5wdXQge1BJWEkuUmVuZGVyVGFyZ2V0fVxuICogQHBhcmFtIG91dHB1dCB7UElYSS5SZW5kZXJUYXJnZXR9XG4gKiBAcGFyYW0gY2xlYXIge2Jvb2xlYW59IFdoZXRoZXIgb3Igbm90IHdlIHdhbnQgdG8gY2xlYXIgdGhlIG91dHB1dFRhcmdldFxuICovXG5BYnN0cmFjdEZpbHRlci5wcm90b3R5cGUuYXBwbHlGaWx0ZXIgPSBmdW5jdGlvbiAocmVuZGVyZXIsIGlucHV0LCBvdXRwdXQsIGNsZWFyKVxue1xuICAgIHZhciBzaGFkZXIgPSB0aGlzLmdldFNoYWRlcihyZW5kZXJlcik7XG5cbiAgICByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLmFwcGx5RmlsdGVyKHNoYWRlciwgaW5wdXQsIG91dHB1dCwgY2xlYXIpO1xufTtcblxuLyoqXG4gKiBTeW5jcyBhIHVuaWZvcm0gYmV0d2VlbiB0aGUgY2xhc3Mgb2JqZWN0IGFuZCB0aGUgc2hhZGVycy5cbiAqXG4gKi9cbkFic3RyYWN0RmlsdGVyLnByb3RvdHlwZS5zeW5jVW5pZm9ybSA9IGZ1bmN0aW9uICh1bmlmb3JtKVxue1xuICAgIGZvciAodmFyIGkgPSAwLCBqID0gdGhpcy5zaGFkZXJzLmxlbmd0aDsgaSA8IGo7ICsraSlcbiAgICB7XG4gICAgICAgIHRoaXMuc2hhZGVyc1tpXS5zeW5jVW5pZm9ybSh1bmlmb3JtKTtcbiAgICB9XG59O1xuIiwidmFyIEFic3RyYWN0RmlsdGVyID0gcmVxdWlyZSgnLi9BYnN0cmFjdEZpbHRlcicpO1xuLy8gQHNlZSBodHRwczovL2dpdGh1Yi5jb20vc3Vic3RhY2svYnJmcy9pc3N1ZXMvMjVcblxuXG4vKipcbiAqXG4gKiBCYXNpYyBGWEFBIGltcGxlbWVudGF0aW9uIGJhc2VkIG9uIHRoZSBjb2RlIG9uIGdlZWtzM2QuY29tIHdpdGggdGhlXG4gKiBtb2RpZmljYXRpb24gdGhhdCB0aGUgdGV4dHVyZTJETG9kIHN0dWZmIHdhcyByZW1vdmVkIHNpbmNlIGl0J3NcbiAqIHVuc3VwcG9ydGVkIGJ5IFdlYkdMLlxuICpcbiAqIC0tXG4gKiBGcm9tOlxuICogaHR0cHM6Ly9naXRodWIuY29tL21pdHN1aGlrby93ZWJnbC1tZWluY3JhZnRcbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQWJzdHJhY3RGaWx0ZXJcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKlxuICovXG5mdW5jdGlvbiBGWEFBRmlsdGVyKClcbntcbiAgICBBYnN0cmFjdEZpbHRlci5jYWxsKHRoaXMsXG4gICAgICAgIC8vIHZlcnRleCBzaGFkZXJcbiAgICAgICAgXCJcXG5wcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcXG5cXG5hdHRyaWJ1dGUgdmVjMiBhVmVydGV4UG9zaXRpb247XFxuYXR0cmlidXRlIHZlYzIgYVRleHR1cmVDb29yZDtcXG5hdHRyaWJ1dGUgdmVjNCBhQ29sb3I7XFxuXFxudW5pZm9ybSBtYXQzIHByb2plY3Rpb25NYXRyaXg7XFxudW5pZm9ybSB2ZWMyIHJlc29sdXRpb247XFxuXFxudmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7XFxudmFyeWluZyB2ZWM0IHZDb2xvcjtcXG5cXG52YXJ5aW5nIHZlYzIgdlJlc29sdXRpb247XFxuXFxuLy90ZXhjb29yZHMgY29tcHV0ZWQgaW4gdmVydGV4IHN0ZXBcXG4vL3RvIGF2b2lkIGRlcGVuZGVudCB0ZXh0dXJlIHJlYWRzXFxudmFyeWluZyB2ZWMyIHZfcmdiTlc7XFxudmFyeWluZyB2ZWMyIHZfcmdiTkU7XFxudmFyeWluZyB2ZWMyIHZfcmdiU1c7XFxudmFyeWluZyB2ZWMyIHZfcmdiU0U7XFxudmFyeWluZyB2ZWMyIHZfcmdiTTtcXG5cXG5cXG52b2lkIHRleGNvb3Jkcyh2ZWMyIGZyYWdDb29yZCwgdmVjMiByZXNvbHV0aW9uLFxcbiAgICAgICAgICAgIG91dCB2ZWMyIHZfcmdiTlcsIG91dCB2ZWMyIHZfcmdiTkUsXFxuICAgICAgICAgICAgb3V0IHZlYzIgdl9yZ2JTVywgb3V0IHZlYzIgdl9yZ2JTRSxcXG4gICAgICAgICAgICBvdXQgdmVjMiB2X3JnYk0pIHtcXG4gICAgdmVjMiBpbnZlcnNlVlAgPSAxLjAgLyByZXNvbHV0aW9uLnh5O1xcbiAgICB2X3JnYk5XID0gKGZyYWdDb29yZCArIHZlYzIoLTEuMCwgLTEuMCkpICogaW52ZXJzZVZQO1xcbiAgICB2X3JnYk5FID0gKGZyYWdDb29yZCArIHZlYzIoMS4wLCAtMS4wKSkgKiBpbnZlcnNlVlA7XFxuICAgIHZfcmdiU1cgPSAoZnJhZ0Nvb3JkICsgdmVjMigtMS4wLCAxLjApKSAqIGludmVyc2VWUDtcXG4gICAgdl9yZ2JTRSA9IChmcmFnQ29vcmQgKyB2ZWMyKDEuMCwgMS4wKSkgKiBpbnZlcnNlVlA7XFxuICAgIHZfcmdiTSA9IHZlYzIoZnJhZ0Nvb3JkICogaW52ZXJzZVZQKTtcXG59XFxuXFxudm9pZCBtYWluKHZvaWQpe1xcbiAgIGdsX1Bvc2l0aW9uID0gdmVjNCgocHJvamVjdGlvbk1hdHJpeCAqIHZlYzMoYVZlcnRleFBvc2l0aW9uLCAxLjApKS54eSwgMC4wLCAxLjApO1xcbiAgIHZUZXh0dXJlQ29vcmQgPSBhVGV4dHVyZUNvb3JkO1xcbiAgIHZDb2xvciA9IHZlYzQoYUNvbG9yLnJnYiAqIGFDb2xvci5hLCBhQ29sb3IuYSk7XFxuICAgdlJlc29sdXRpb24gPSByZXNvbHV0aW9uO1xcblxcbiAgIC8vY29tcHV0ZSB0aGUgdGV4dHVyZSBjb29yZHMgYW5kIHNlbmQgdGhlbSB0byB2YXJ5aW5nc1xcbiAgIHRleGNvb3JkcyhhVGV4dHVyZUNvb3JkICogcmVzb2x1dGlvbiwgcmVzb2x1dGlvbiwgdl9yZ2JOVywgdl9yZ2JORSwgdl9yZ2JTVywgdl9yZ2JTRSwgdl9yZ2JNKTtcXG59XFxuXCIsXG4gICAgICAgIC8vIGZyYWdtZW50IHNoYWRlclxuICAgICAgICBcInByZWNpc2lvbiBsb3dwIGZsb2F0O1xcblxcblxcbi8qKlxcbkJhc2ljIEZYQUEgaW1wbGVtZW50YXRpb24gYmFzZWQgb24gdGhlIGNvZGUgb24gZ2Vla3MzZC5jb20gd2l0aCB0aGVcXG5tb2RpZmljYXRpb24gdGhhdCB0aGUgdGV4dHVyZTJETG9kIHN0dWZmIHdhcyByZW1vdmVkIHNpbmNlIGl0J3NcXG51bnN1cHBvcnRlZCBieSBXZWJHTC5cXG5cXG4tLVxcblxcbkZyb206XFxuaHR0cHM6Ly9naXRodWIuY29tL21pdHN1aGlrby93ZWJnbC1tZWluY3JhZnRcXG5cXG5Db3B5cmlnaHQgKGMpIDIwMTEgYnkgQXJtaW4gUm9uYWNoZXIuXFxuXFxuU29tZSByaWdodHMgcmVzZXJ2ZWQuXFxuXFxuUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0XFxubW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZVxcbm1ldDpcXG5cXG4gICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodFxcbiAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci5cXG5cXG4gICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlXFxuICAgICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmdcXG4gICAgICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWRcXG4gICAgICB3aXRoIHRoZSBkaXN0cmlidXRpb24uXFxuXFxuICAgICogVGhlIG5hbWVzIG9mIHRoZSBjb250cmlidXRvcnMgbWF5IG5vdCBiZSB1c2VkIHRvIGVuZG9yc2Ugb3JcXG4gICAgICBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWNcXG4gICAgICBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uXFxuXFxuVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SU1xcblxcXCJBUyBJU1xcXCIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UXFxuTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SXFxuQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFRcXG5PV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCxcXG5TUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UXFxuTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsXFxuREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZXFxuVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVFxcbihJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRVxcbk9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuXFxuKi9cXG5cXG4jaWZuZGVmIEZYQUFfUkVEVUNFX01JTlxcbiAgICAjZGVmaW5lIEZYQUFfUkVEVUNFX01JTiAgICgxLjAvIDEyOC4wKVxcbiNlbmRpZlxcbiNpZm5kZWYgRlhBQV9SRURVQ0VfTVVMXFxuICAgICNkZWZpbmUgRlhBQV9SRURVQ0VfTVVMICAgKDEuMCAvIDguMClcXG4jZW5kaWZcXG4jaWZuZGVmIEZYQUFfU1BBTl9NQVhcXG4gICAgI2RlZmluZSBGWEFBX1NQQU5fTUFYICAgICA4LjBcXG4jZW5kaWZcXG5cXG4vL29wdGltaXplZCB2ZXJzaW9uIGZvciBtb2JpbGUsIHdoZXJlIGRlcGVuZGVudFxcbi8vdGV4dHVyZSByZWFkcyBjYW4gYmUgYSBib3R0bGVuZWNrXFxudmVjNCBmeGFhKHNhbXBsZXIyRCB0ZXgsIHZlYzIgZnJhZ0Nvb3JkLCB2ZWMyIHJlc29sdXRpb24sXFxuICAgICAgICAgICAgdmVjMiB2X3JnYk5XLCB2ZWMyIHZfcmdiTkUsXFxuICAgICAgICAgICAgdmVjMiB2X3JnYlNXLCB2ZWMyIHZfcmdiU0UsXFxuICAgICAgICAgICAgdmVjMiB2X3JnYk0pIHtcXG4gICAgdmVjNCBjb2xvcjtcXG4gICAgbWVkaXVtcCB2ZWMyIGludmVyc2VWUCA9IHZlYzIoMS4wIC8gcmVzb2x1dGlvbi54LCAxLjAgLyByZXNvbHV0aW9uLnkpO1xcbiAgICB2ZWMzIHJnYk5XID0gdGV4dHVyZTJEKHRleCwgdl9yZ2JOVykueHl6O1xcbiAgICB2ZWMzIHJnYk5FID0gdGV4dHVyZTJEKHRleCwgdl9yZ2JORSkueHl6O1xcbiAgICB2ZWMzIHJnYlNXID0gdGV4dHVyZTJEKHRleCwgdl9yZ2JTVykueHl6O1xcbiAgICB2ZWMzIHJnYlNFID0gdGV4dHVyZTJEKHRleCwgdl9yZ2JTRSkueHl6O1xcbiAgICB2ZWM0IHRleENvbG9yID0gdGV4dHVyZTJEKHRleCwgdl9yZ2JNKTtcXG4gICAgdmVjMyByZ2JNICA9IHRleENvbG9yLnh5ejtcXG4gICAgdmVjMyBsdW1hID0gdmVjMygwLjI5OSwgMC41ODcsIDAuMTE0KTtcXG4gICAgZmxvYXQgbHVtYU5XID0gZG90KHJnYk5XLCBsdW1hKTtcXG4gICAgZmxvYXQgbHVtYU5FID0gZG90KHJnYk5FLCBsdW1hKTtcXG4gICAgZmxvYXQgbHVtYVNXID0gZG90KHJnYlNXLCBsdW1hKTtcXG4gICAgZmxvYXQgbHVtYVNFID0gZG90KHJnYlNFLCBsdW1hKTtcXG4gICAgZmxvYXQgbHVtYU0gID0gZG90KHJnYk0sICBsdW1hKTtcXG4gICAgZmxvYXQgbHVtYU1pbiA9IG1pbihsdW1hTSwgbWluKG1pbihsdW1hTlcsIGx1bWFORSksIG1pbihsdW1hU1csIGx1bWFTRSkpKTtcXG4gICAgZmxvYXQgbHVtYU1heCA9IG1heChsdW1hTSwgbWF4KG1heChsdW1hTlcsIGx1bWFORSksIG1heChsdW1hU1csIGx1bWFTRSkpKTtcXG5cXG4gICAgbWVkaXVtcCB2ZWMyIGRpcjtcXG4gICAgZGlyLnggPSAtKChsdW1hTlcgKyBsdW1hTkUpIC0gKGx1bWFTVyArIGx1bWFTRSkpO1xcbiAgICBkaXIueSA9ICAoKGx1bWFOVyArIGx1bWFTVykgLSAobHVtYU5FICsgbHVtYVNFKSk7XFxuXFxuICAgIGZsb2F0IGRpclJlZHVjZSA9IG1heCgobHVtYU5XICsgbHVtYU5FICsgbHVtYVNXICsgbHVtYVNFKSAqXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAoMC4yNSAqIEZYQUFfUkVEVUNFX01VTCksIEZYQUFfUkVEVUNFX01JTik7XFxuXFxuICAgIGZsb2F0IHJjcERpck1pbiA9IDEuMCAvIChtaW4oYWJzKGRpci54KSwgYWJzKGRpci55KSkgKyBkaXJSZWR1Y2UpO1xcbiAgICBkaXIgPSBtaW4odmVjMihGWEFBX1NQQU5fTUFYLCBGWEFBX1NQQU5fTUFYKSxcXG4gICAgICAgICAgICAgIG1heCh2ZWMyKC1GWEFBX1NQQU5fTUFYLCAtRlhBQV9TUEFOX01BWCksXFxuICAgICAgICAgICAgICBkaXIgKiByY3BEaXJNaW4pKSAqIGludmVyc2VWUDtcXG5cXG4gICAgdmVjMyByZ2JBID0gMC41ICogKFxcbiAgICAgICAgdGV4dHVyZTJEKHRleCwgZnJhZ0Nvb3JkICogaW52ZXJzZVZQICsgZGlyICogKDEuMCAvIDMuMCAtIDAuNSkpLnh5eiArXFxuICAgICAgICB0ZXh0dXJlMkQodGV4LCBmcmFnQ29vcmQgKiBpbnZlcnNlVlAgKyBkaXIgKiAoMi4wIC8gMy4wIC0gMC41KSkueHl6KTtcXG4gICAgdmVjMyByZ2JCID0gcmdiQSAqIDAuNSArIDAuMjUgKiAoXFxuICAgICAgICB0ZXh0dXJlMkQodGV4LCBmcmFnQ29vcmQgKiBpbnZlcnNlVlAgKyBkaXIgKiAtMC41KS54eXogK1xcbiAgICAgICAgdGV4dHVyZTJEKHRleCwgZnJhZ0Nvb3JkICogaW52ZXJzZVZQICsgZGlyICogMC41KS54eXopO1xcblxcbiAgICBmbG9hdCBsdW1hQiA9IGRvdChyZ2JCLCBsdW1hKTtcXG4gICAgaWYgKChsdW1hQiA8IGx1bWFNaW4pIHx8IChsdW1hQiA+IGx1bWFNYXgpKVxcbiAgICAgICAgY29sb3IgPSB2ZWM0KHJnYkEsIHRleENvbG9yLmEpO1xcbiAgICBlbHNlXFxuICAgICAgICBjb2xvciA9IHZlYzQocmdiQiwgdGV4Q29sb3IuYSk7XFxuICAgIHJldHVybiBjb2xvcjtcXG59XFxuXFxuXFxudmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7XFxudmFyeWluZyB2ZWM0IHZDb2xvcjtcXG52YXJ5aW5nIHZlYzIgdlJlc29sdXRpb247XFxuXFxuLy90ZXhjb29yZHMgY29tcHV0ZWQgaW4gdmVydGV4IHN0ZXBcXG4vL3RvIGF2b2lkIGRlcGVuZGVudCB0ZXh0dXJlIHJlYWRzXFxudmFyeWluZyB2ZWMyIHZfcmdiTlc7XFxudmFyeWluZyB2ZWMyIHZfcmdiTkU7XFxudmFyeWluZyB2ZWMyIHZfcmdiU1c7XFxudmFyeWluZyB2ZWMyIHZfcmdiU0U7XFxudmFyeWluZyB2ZWMyIHZfcmdiTTtcXG5cXG51bmlmb3JtIHNhbXBsZXIyRCB1U2FtcGxlcjtcXG5cXG5cXG52b2lkIG1haW4odm9pZCl7XFxuXFxuICAgIGdsX0ZyYWdDb2xvciA9IGZ4YWEodVNhbXBsZXIsIHZUZXh0dXJlQ29vcmQgKiB2UmVzb2x1dGlvbiwgdlJlc29sdXRpb24sIHZfcmdiTlcsIHZfcmdiTkUsIHZfcmdiU1csIHZfcmdiU0UsIHZfcmdiTSk7XFxuXFxufVxcblwiLFxuICAgICAgICAvLyB1bmlmb3Jtc1xuICAgICAgICB7XG4gICAgICAgICAgICByZXNvbHV0aW9uOiB7IHR5cGU6ICd2MicsIHZhbHVlOiB7IHg6IDEsIHk6IDEgfSB9XG4gICAgICAgIH1cbiAgICApO1xuXG59XG5cbkZYQUFGaWx0ZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShBYnN0cmFjdEZpbHRlci5wcm90b3R5cGUpO1xuRlhBQUZpbHRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBGWEFBRmlsdGVyO1xubW9kdWxlLmV4cG9ydHMgPSBGWEFBRmlsdGVyO1xuXG4vKipcbiAqIEFwcGxpZXMgdGhlIGZpbHRlclxuICpcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5XZWJHTFJlbmRlcmVyfSBUaGUgcmVuZGVyZXIgdG8gcmV0cmlldmUgdGhlIGZpbHRlciBmcm9tXG4gKiBAcGFyYW0gaW5wdXQge1BJWEkuUmVuZGVyVGFyZ2V0fVxuICogQHBhcmFtIG91dHB1dCB7UElYSS5SZW5kZXJUYXJnZXR9XG4gKi9cbkZYQUFGaWx0ZXIucHJvdG90eXBlLmFwcGx5RmlsdGVyID0gZnVuY3Rpb24gKHJlbmRlcmVyLCBpbnB1dCwgb3V0cHV0KVxue1xuICAgIHZhciBmaWx0ZXJNYW5hZ2VyID0gcmVuZGVyZXIuZmlsdGVyTWFuYWdlcjtcblxuICAgIHZhciBzaGFkZXIgPSB0aGlzLmdldFNoYWRlciggcmVuZGVyZXIgKTtcbiAgICAgLy8gZHJhdyB0aGUgZmlsdGVyLi4uXG4gICAgZmlsdGVyTWFuYWdlci5hcHBseUZpbHRlcihzaGFkZXIsIGlucHV0LCBvdXRwdXQpO1xufTtcbiIsInZhciBBYnN0cmFjdEZpbHRlciA9IHJlcXVpcmUoJy4vQWJzdHJhY3RGaWx0ZXInKSxcbiAgICBtYXRoID0gIHJlcXVpcmUoJy4uLy4uLy4uL21hdGgnKTtcblxuLy8gQHNlZSBodHRwczovL2dpdGh1Yi5jb20vc3Vic3RhY2svYnJmcy9pc3N1ZXMvMjVcblxuXG4vKipcbiAqIFRoZSBTcHJpdGVNYXNrRmlsdGVyIGNsYXNzXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLkFic3RyYWN0RmlsdGVyXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIHNwcml0ZSB7UElYSS5TcHJpdGV9IHRoZSB0YXJnZXQgc3ByaXRlXG4gKi9cbmZ1bmN0aW9uIFNwcml0ZU1hc2tGaWx0ZXIoc3ByaXRlKVxue1xuICAgIHZhciBtYXNrTWF0cml4ID0gbmV3IG1hdGguTWF0cml4KCk7XG5cbiAgICBBYnN0cmFjdEZpbHRlci5jYWxsKHRoaXMsXG4gICAgICAgIFwiYXR0cmlidXRlIHZlYzIgYVZlcnRleFBvc2l0aW9uO1xcbmF0dHJpYnV0ZSB2ZWMyIGFUZXh0dXJlQ29vcmQ7XFxuYXR0cmlidXRlIHZlYzQgYUNvbG9yO1xcblxcbnVuaWZvcm0gbWF0MyBwcm9qZWN0aW9uTWF0cml4O1xcbnVuaWZvcm0gbWF0MyBvdGhlck1hdHJpeDtcXG5cXG52YXJ5aW5nIHZlYzIgdk1hc2tDb29yZDtcXG52YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDtcXG52YXJ5aW5nIHZlYzQgdkNvbG9yO1xcblxcbnZvaWQgbWFpbih2b2lkKVxcbntcXG4gICAgZ2xfUG9zaXRpb24gPSB2ZWM0KChwcm9qZWN0aW9uTWF0cml4ICogdmVjMyhhVmVydGV4UG9zaXRpb24sIDEuMCkpLnh5LCAwLjAsIDEuMCk7XFxuICAgIHZUZXh0dXJlQ29vcmQgPSBhVGV4dHVyZUNvb3JkO1xcbiAgICB2TWFza0Nvb3JkID0gKCBvdGhlck1hdHJpeCAqIHZlYzMoIGFUZXh0dXJlQ29vcmQsIDEuMCkgICkueHk7XFxuICAgIHZDb2xvciA9IHZlYzQoYUNvbG9yLnJnYiAqIGFDb2xvci5hLCBhQ29sb3IuYSk7XFxufVxcblwiLFxuICAgICAgICBcInByZWNpc2lvbiBsb3dwIGZsb2F0O1xcblxcbnZhcnlpbmcgdmVjMiB2TWFza0Nvb3JkO1xcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xcbnZhcnlpbmcgdmVjNCB2Q29sb3I7XFxuXFxudW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXI7XFxudW5pZm9ybSBmbG9hdCBhbHBoYTtcXG51bmlmb3JtIHNhbXBsZXIyRCBtYXNrO1xcblxcbnZvaWQgbWFpbih2b2lkKVxcbntcXG4gICAgLy8gY2hlY2sgY2xpcCEgdGhpcyB3aWxsIHN0b3AgdGhlIG1hc2sgYmxlZWRpbmcgb3V0IGZyb20gdGhlIGVkZ2VzXFxuICAgIHZlYzIgdGV4dCA9IGFicyggdk1hc2tDb29yZCAtIDAuNSApO1xcbiAgICB0ZXh0ID0gc3RlcCgwLjUsIHRleHQpO1xcbiAgICBmbG9hdCBjbGlwID0gMS4wIC0gbWF4KHRleHQueSwgdGV4dC54KTtcXG4gICAgdmVjNCBvcmlnaW5hbCA9IHRleHR1cmUyRCh1U2FtcGxlciwgdlRleHR1cmVDb29yZCk7XFxuICAgIHZlYzQgbWFza3kgPSB0ZXh0dXJlMkQobWFzaywgdk1hc2tDb29yZCk7XFxuICAgIG9yaWdpbmFsICo9IChtYXNreS5yICogbWFza3kuYSAqIGFscGhhICogY2xpcCk7XFxuICAgIGdsX0ZyYWdDb2xvciA9IG9yaWdpbmFsO1xcbn1cXG5cIixcbiAgICAgICAge1xuICAgICAgICAgICAgbWFzazogICAgICAgICAgIHsgdHlwZTogJ3NhbXBsZXIyRCcsIHZhbHVlOiBzcHJpdGUuX3RleHR1cmUgfSxcbiAgICAgICAgICAgIGFscGhhOiAgICAgICAgICB7IHR5cGU6ICdmJywgdmFsdWU6IDF9LFxuICAgICAgICAgICAgb3RoZXJNYXRyaXg6ICAgIHsgdHlwZTogJ21hdDMnLCB2YWx1ZTogbWFza01hdHJpeC50b0FycmF5KHRydWUpIH1cbiAgICAgICAgfVxuICAgICk7XG5cbiAgICB0aGlzLm1hc2tTcHJpdGUgPSBzcHJpdGU7XG4gICAgdGhpcy5tYXNrTWF0cml4ID0gbWFza01hdHJpeDtcbn1cblxuU3ByaXRlTWFza0ZpbHRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKEFic3RyYWN0RmlsdGVyLnByb3RvdHlwZSk7XG5TcHJpdGVNYXNrRmlsdGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFNwcml0ZU1hc2tGaWx0ZXI7XG5tb2R1bGUuZXhwb3J0cyA9IFNwcml0ZU1hc2tGaWx0ZXI7XG5cbi8qKlxuICogQXBwbGllcyB0aGUgZmlsdGVyXG4gKlxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLldlYkdMUmVuZGVyZXJ9IFRoZSByZW5kZXJlciB0byByZXRyaWV2ZSB0aGUgZmlsdGVyIGZyb21cbiAqIEBwYXJhbSBpbnB1dCB7UElYSS5SZW5kZXJUYXJnZXR9XG4gKiBAcGFyYW0gb3V0cHV0IHtQSVhJLlJlbmRlclRhcmdldH1cbiAqL1xuU3ByaXRlTWFza0ZpbHRlci5wcm90b3R5cGUuYXBwbHlGaWx0ZXIgPSBmdW5jdGlvbiAocmVuZGVyZXIsIGlucHV0LCBvdXRwdXQpXG57XG4gICAgdmFyIGZpbHRlck1hbmFnZXIgPSByZW5kZXJlci5maWx0ZXJNYW5hZ2VyO1xuXG4gICAgdGhpcy51bmlmb3Jtcy5tYXNrLnZhbHVlID0gdGhpcy5tYXNrU3ByaXRlLl90ZXh0dXJlO1xuXG4gICAgZmlsdGVyTWFuYWdlci5jYWxjdWxhdGVNYXBwZWRNYXRyaXgoaW5wdXQuZnJhbWUsIHRoaXMubWFza1Nwcml0ZSwgdGhpcy5tYXNrTWF0cml4KTtcblxuICAgIHRoaXMudW5pZm9ybXMub3RoZXJNYXRyaXgudmFsdWUgPSB0aGlzLm1hc2tNYXRyaXgudG9BcnJheSh0cnVlKTtcbiAgICB0aGlzLnVuaWZvcm1zLmFscGhhLnZhbHVlID0gdGhpcy5tYXNrU3ByaXRlLndvcmxkQWxwaGE7XG5cbiAgICB2YXIgc2hhZGVyID0gdGhpcy5nZXRTaGFkZXIocmVuZGVyZXIpO1xuICAgICAvLyBkcmF3IHRoZSBmaWx0ZXIuLi5cbiAgICBmaWx0ZXJNYW5hZ2VyLmFwcGx5RmlsdGVyKHNoYWRlciwgaW5wdXQsIG91dHB1dCk7XG59O1xuXG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKFNwcml0ZU1hc2tGaWx0ZXIucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogVGhlIHRleHR1cmUgdXNlZCBmb3IgdGhlIGRpc3BsYWNlbWVudCBtYXAuIE11c3QgYmUgcG93ZXIgb2YgMiBzaXplZCB0ZXh0dXJlLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5UZXh0dXJlfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLlNwcml0ZU1hc2tGaWx0ZXIjXG4gICAgICovXG4gICAgbWFwOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudW5pZm9ybXMubWFzay52YWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudW5pZm9ybXMubWFzay52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFRoZSBvZmZzZXQgdXNlZCB0byBtb3ZlIHRoZSBkaXNwbGFjZW1lbnQgbWFwLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5Qb2ludH1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5TcHJpdGVNYXNrRmlsdGVyI1xuICAgICAqL1xuICAgIG9mZnNldDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudW5pZm9ybXMub2Zmc2V0LnZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLm9mZnNldC52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfVxufSk7XG4iLCJ2YXIgV2ViR0xNYW5hZ2VyID0gcmVxdWlyZSgnLi9XZWJHTE1hbmFnZXInKTtcblxuLyoqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAZXh0ZW5kcyBQSVhJLldlYkdsTWFuYWdlclxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLldlYkdMUmVuZGVyZXJ9IFRoZSByZW5kZXJlciB0aGlzIG1hbmFnZXIgd29ya3MgZm9yLlxuICovXG5mdW5jdGlvbiBCbGVuZE1vZGVNYW5hZ2VyKHJlbmRlcmVyKVxue1xuICAgIFdlYkdMTWFuYWdlci5jYWxsKHRoaXMsIHJlbmRlcmVyKTtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLmN1cnJlbnRCbGVuZE1vZGUgPSA5OTk5OTtcbn1cblxuQmxlbmRNb2RlTWFuYWdlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFdlYkdMTWFuYWdlci5wcm90b3R5cGUpO1xuQmxlbmRNb2RlTWFuYWdlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBCbGVuZE1vZGVNYW5hZ2VyO1xubW9kdWxlLmV4cG9ydHMgPSBCbGVuZE1vZGVNYW5hZ2VyO1xuXG4vKipcbiAqIFNldHMtdXAgdGhlIGdpdmVuIGJsZW5kTW9kZSBmcm9tIFdlYkdMJ3MgcG9pbnQgb2Ygdmlldy5cbiAqXG4gKiBAcGFyYW0gYmxlbmRNb2RlIHtudW1iZXJ9IHRoZSBibGVuZE1vZGUsIHNob3VsZCBiZSBhIFBpeGkgY29uc3QsIHN1Y2ggYXMgYFBJWEkuQkxFTkRfTU9ERVMuQUREYC4gU2VlXG4gKiAge0BsaW5rIFBJWEkuQkxFTkRfTU9ERVN9IGZvciBwb3NzaWJsZSB2YWx1ZXMuXG4gKi9cbkJsZW5kTW9kZU1hbmFnZXIucHJvdG90eXBlLnNldEJsZW5kTW9kZSA9IGZ1bmN0aW9uIChibGVuZE1vZGUpXG57XG4gICAgaWYgKHRoaXMuY3VycmVudEJsZW5kTW9kZSA9PT0gYmxlbmRNb2RlKVxuICAgIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHRoaXMuY3VycmVudEJsZW5kTW9kZSA9IGJsZW5kTW9kZTtcblxuICAgIHZhciBtb2RlID0gdGhpcy5yZW5kZXJlci5ibGVuZE1vZGVzW3RoaXMuY3VycmVudEJsZW5kTW9kZV07XG4gICAgdGhpcy5yZW5kZXJlci5nbC5ibGVuZEZ1bmMobW9kZVswXSwgbW9kZVsxXSk7XG5cbiAgICByZXR1cm4gdHJ1ZTtcbn07XG4iLCJ2YXIgV2ViR0xNYW5hZ2VyID0gcmVxdWlyZSgnLi9XZWJHTE1hbmFnZXInKSxcbiAgICBSZW5kZXJUYXJnZXQgPSByZXF1aXJlKCcuLi91dGlscy9SZW5kZXJUYXJnZXQnKSxcbiAgICBDT05TVCA9IHJlcXVpcmUoJy4uLy4uLy4uL2NvbnN0JyksXG4gICAgUXVhZCA9IHJlcXVpcmUoJy4uL3V0aWxzL1F1YWQnKSxcbiAgICBtYXRoID0gIHJlcXVpcmUoJy4uLy4uLy4uL21hdGgnKTtcblxuLyoqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAZXh0ZW5kcyBQSVhJLldlYkdMTWFuYWdlclxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLldlYkdMUmVuZGVyZXJ9IFRoZSByZW5kZXJlciB0aGlzIG1hbmFnZXIgd29ya3MgZm9yLlxuICovXG5mdW5jdGlvbiBGaWx0ZXJNYW5hZ2VyKHJlbmRlcmVyKVxue1xuICAgIFdlYkdMTWFuYWdlci5jYWxsKHRoaXMsIHJlbmRlcmVyKTtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge29iamVjdFtdfVxuICAgICAqL1xuICAgIHRoaXMuZmlsdGVyU3RhY2sgPSBbXTtcblxuICAgIHRoaXMuZmlsdGVyU3RhY2sucHVzaCh7XG4gICAgICAgIHJlbmRlclRhcmdldDpyZW5kZXJlci5jdXJyZW50UmVuZGVyVGFyZ2V0LFxuICAgICAgICBmaWx0ZXI6W10sXG4gICAgICAgIGJvdW5kczpudWxsXG4gICAgfSk7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlJlbmRlclRhcmdldFtdfVxuICAgICAqL1xuICAgIHRoaXMudGV4dHVyZVBvb2wgPSBbXTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBzaXplIG9mIHRoZSB0ZXh0dXJlXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlJlY3RhbmdsZX1cbiAgICAgKi9cbiAgICAvLyBsaXN0ZW4gZm9yIGNvbnRleHQgYW5kIHVwZGF0ZSBuZWNlc3NhcnkgYnVmZmVyc1xuICAgIC8vVE9ETyBtYWtlIHRoaXMgZHluYW1pYyFcbiAgICAvL1RPRE8gdGVzdCB0aGlzIG91dCBieSBmb3JjZXMgcG93ZXIgb2YgdHdvP1xuICAgIHRoaXMudGV4dHVyZVNpemUgPSBuZXcgbWF0aC5SZWN0YW5nbGUoMCwgMCwgcmVuZGVyZXIud2lkdGgsIHJlbmRlcmVyLmhlaWdodCk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgY3VycmVudCBmcmFtZVxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5SZWN0YW5nbGV9XG4gICAgICovXG4gICAgdGhpcy5jdXJyZW50RnJhbWUgPSBudWxsO1xufVxuXG5GaWx0ZXJNYW5hZ2VyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoV2ViR0xNYW5hZ2VyLnByb3RvdHlwZSk7XG5GaWx0ZXJNYW5hZ2VyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IEZpbHRlck1hbmFnZXI7XG5tb2R1bGUuZXhwb3J0cyA9IEZpbHRlck1hbmFnZXI7XG5cblxuLyoqXG4gKiBDYWxsZWQgd2hlbiB0aGVyZSBpcyBhIFdlYkdMIGNvbnRleHQgY2hhbmdlLlxuICpcbiAqL1xuRmlsdGVyTWFuYWdlci5wcm90b3R5cGUub25Db250ZXh0Q2hhbmdlID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLnRleHR1cmVQb29sLmxlbmd0aCA9IDA7XG5cbiAgICB2YXIgZ2wgPSB0aGlzLnJlbmRlcmVyLmdsO1xuICAgIHRoaXMucXVhZCA9IG5ldyBRdWFkKGdsKTtcbn07XG5cbi8qKlxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLldlYkdMUmVuZGVyZXJ9XG4gKiBAcGFyYW0gYnVmZmVyIHtBcnJheUJ1ZmZlcn1cbiAqL1xuRmlsdGVyTWFuYWdlci5wcm90b3R5cGUuc2V0RmlsdGVyU3RhY2sgPSBmdW5jdGlvbiAoIGZpbHRlclN0YWNrIClcbntcbiAgICB0aGlzLmZpbHRlclN0YWNrID0gZmlsdGVyU3RhY2s7XG59O1xuXG4vKipcbiAqIEFwcGxpZXMgdGhlIGZpbHRlciBhbmQgYWRkcyBpdCB0byB0aGUgY3VycmVudCBmaWx0ZXIgc3RhY2suXG4gKlxuICogQHBhcmFtIHRhcmdldCB7UElYSS5EaXNwbGF5T2JqZWN0fVxuICogQHBhcmFtIGZpbHRlcnMge1BJWEkuQWJzdHJhY3RGaWxlcltdfSB0aGUgZmlsdGVycyB0aGF0IHdpbGwgYmUgcHVzaGVkIHRvIHRoZSBjdXJyZW50IGZpbHRlciBzdGFja1xuICovXG5GaWx0ZXJNYW5hZ2VyLnByb3RvdHlwZS5wdXNoRmlsdGVyID0gZnVuY3Rpb24gKHRhcmdldCwgZmlsdGVycylcbntcbiAgICAvLyBnZXQgdGhlIGJvdW5kcyBvZiB0aGUgb2JqZWN0Li5cbiAgICAvLyBUT0RPIHJlcGxhY2UgY2xvbmUgd2l0aCBhIGNvcHkgdG8gc2F2ZSBvYmplY3QgY3JlYXRpb25cbiAgICB2YXIgYm91bmRzID0gdGFyZ2V0LmZpbHRlckFyZWEgPyB0YXJnZXQuZmlsdGVyQXJlYS5jbG9uZSgpIDogdGFyZ2V0LmdldEJvdW5kcygpO1xuXG4gICAgLy9ib3VuZHMgPSBib3VuZHMuY2xvbmUoKTtcblxuICAgIC8vIHJvdW5kIG9mZiB0aGUgcmVjdGFuZ2xlIHRvIGdldCBhIG5pY2Ugc21vb29vb29vdGggZmlsdGVyIDopXG4gICAgYm91bmRzLnggPSBib3VuZHMueCB8IDA7XG4gICAgYm91bmRzLnkgPSBib3VuZHMueSB8IDA7XG4gICAgYm91bmRzLndpZHRoID0gYm91bmRzLndpZHRoIHwgMDtcbiAgICBib3VuZHMuaGVpZ2h0ID0gYm91bmRzLmhlaWdodCB8IDA7XG5cblxuICAgIC8vIHBhZGRpbmchXG4gICAgdmFyIHBhZGRpbmcgPSBmaWx0ZXJzWzBdLnBhZGRpbmcgfCAwO1xuICAgIGJvdW5kcy54IC09IHBhZGRpbmc7XG4gICAgYm91bmRzLnkgLT0gcGFkZGluZztcbiAgICBib3VuZHMud2lkdGggKz0gcGFkZGluZyAqIDI7XG4gICAgYm91bmRzLmhlaWdodCArPSBwYWRkaW5nICogMjtcblxuXG4gICAgaWYodGhpcy5yZW5kZXJlci5jdXJyZW50UmVuZGVyVGFyZ2V0LnRyYW5zZm9ybSlcbiAgICB7XG4gICAgICAgIC8vVE9ETyB0aGlzIHdpbGwgYnJlYWsgaWYgdGhlIHJlbmRlclRleHR1cmUgdHJhbnNmb3JtIGlzIGFueXRoaW5nIG90aGVyIHRoYW4gYSB0cmFuc2xhdGlvbi5cbiAgICAgICAgLy9XaWxsIG5lZWQgdG8gdGFrZSB0aGUgZnVsbCBtYXRyaXggdHJhbnNmb3JtIGludG8gYWNvdW50Li5cbiAgICAgICAgdmFyIHRyYW5zZm9ybSA9IHRoaXMucmVuZGVyZXIuY3VycmVudFJlbmRlclRhcmdldC50cmFuc2Zvcm07XG5cbiAgICAgICAgYm91bmRzLnggKz0gdHJhbnNmb3JtLnR4O1xuICAgICAgICBib3VuZHMueSArPSB0cmFuc2Zvcm0udHk7XG5cbiAgICAgICAgdGhpcy5jYXBGaWx0ZXJBcmVhKCBib3VuZHMgKTtcblxuICAgICAgICBib3VuZHMueCAtPSB0cmFuc2Zvcm0udHg7XG4gICAgICAgIGJvdW5kcy55IC09IHRyYW5zZm9ybS50eTtcbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgIHRoaXMuY2FwRmlsdGVyQXJlYSggYm91bmRzICk7XG4gICAgfVxuXG4gICAgaWYoYm91bmRzLndpZHRoID4gMCAmJiBib3VuZHMuaGVpZ2h0ID4gMClcbiAgICB7XG4gICAgICAgIHRoaXMuY3VycmVudEZyYW1lID0gYm91bmRzO1xuXG4gICAgICAgIHZhciB0ZXh0dXJlID0gdGhpcy5nZXRSZW5kZXJUYXJnZXQoKTtcblxuICAgICAgICB0aGlzLnJlbmRlcmVyLnNldFJlbmRlclRhcmdldCh0ZXh0dXJlKTtcblxuICAgICAgICAvLyBjbGVhciB0aGUgdGV4dHVyZS4uXG4gICAgICAgIHRleHR1cmUuY2xlYXIoKTtcblxuICAgICAgICAvLyBUT0RPIGdldCByaWQgb2Ygb2JqZWN0IGNyZWF0aW9uIVxuICAgICAgICB0aGlzLmZpbHRlclN0YWNrLnB1c2goe1xuICAgICAgICAgICAgcmVuZGVyVGFyZ2V0OiB0ZXh0dXJlLFxuICAgICAgICAgICAgZmlsdGVyOiBmaWx0ZXJzXG4gICAgICAgIH0pO1xuXG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIC8vIHB1c2ggc29tdGhpbmcgb24gdG8gdGhlIHN0YWNrIHRoYXQgaXMgZW1wdHlcbiAgICAgICAgdGhpcy5maWx0ZXJTdGFjay5wdXNoKHtcbiAgICAgICAgICAgIHJlbmRlclRhcmdldDogbnVsbCxcbiAgICAgICAgICAgIGZpbHRlcjogZmlsdGVyc1xuICAgICAgICB9KTtcbiAgICB9XG59O1xuXG5cbi8qKlxuICogUmVtb3ZlcyB0aGUgbGFzdCBmaWx0ZXIgZnJvbSB0aGUgZmlsdGVyIHN0YWNrIGFuZCByZXR1cm5zIGl0LlxuICpcbiAqL1xuRmlsdGVyTWFuYWdlci5wcm90b3R5cGUucG9wRmlsdGVyID0gZnVuY3Rpb24gKClcbntcbiAgICB2YXIgZmlsdGVyRGF0YSA9IHRoaXMuZmlsdGVyU3RhY2sucG9wKCk7XG4gICAgdmFyIHByZXZpb3VzRmlsdGVyRGF0YSA9IHRoaXMuZmlsdGVyU3RhY2tbdGhpcy5maWx0ZXJTdGFjay5sZW5ndGgtMV07XG5cbiAgICB2YXIgaW5wdXQgPSBmaWx0ZXJEYXRhLnJlbmRlclRhcmdldDtcblxuICAgIC8vIGlmIHRoZSByZW5kZXJUYXJnZXQgaXMgbnVsbCB0aGVuIHdlIGRvbid0IGFwcGx5IHRoZSBmaWx0ZXIgYXMgaXRzIG9mZnNjcmVlblxuICAgIGlmKCFmaWx0ZXJEYXRhLnJlbmRlclRhcmdldClcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB2YXIgb3V0cHV0ID0gcHJldmlvdXNGaWx0ZXJEYXRhLnJlbmRlclRhcmdldDtcblxuICAgIC8vIHVzZSBwcm9ncmFtXG4gICAgdmFyIGdsID0gdGhpcy5yZW5kZXJlci5nbDtcblxuXG4gICAgdGhpcy5jdXJyZW50RnJhbWUgPSBpbnB1dC5mcmFtZTtcblxuICAgIHRoaXMucXVhZC5tYXAodGhpcy50ZXh0dXJlU2l6ZSwgaW5wdXQuZnJhbWUpO1xuXG5cbiAgICAvLyBUT0RPLi4gdGhpcyBwcm9iYWJseSBvbmx5IG5lZWRzIHRvIGJlIGRvbmUgb25jZSFcbiAgICBnbC5iaW5kQnVmZmVyKGdsLkFSUkFZX0JVRkZFUiwgdGhpcy5xdWFkLnZlcnRleEJ1ZmZlcik7XG4gICAgZ2wuYmluZEJ1ZmZlcihnbC5FTEVNRU5UX0FSUkFZX0JVRkZFUiwgdGhpcy5xdWFkLmluZGV4QnVmZmVyKTtcblxuICAgIHZhciBmaWx0ZXJzID0gZmlsdGVyRGF0YS5maWx0ZXI7XG5cbiAgICAvLyBhc3N1bWluZyBhbGwgZmlsdGVycyBmb2xsb3cgdGhlIGNvcnJlY3QgZm9ybWF0Pz9cbiAgICBnbC52ZXJ0ZXhBdHRyaWJQb2ludGVyKHRoaXMucmVuZGVyZXIuc2hhZGVyTWFuYWdlci5kZWZhdWx0U2hhZGVyLmF0dHJpYnV0ZXMuYVZlcnRleFBvc2l0aW9uLCAyLCBnbC5GTE9BVCwgZmFsc2UsIDAsIDApO1xuICAgIGdsLnZlcnRleEF0dHJpYlBvaW50ZXIodGhpcy5yZW5kZXJlci5zaGFkZXJNYW5hZ2VyLmRlZmF1bHRTaGFkZXIuYXR0cmlidXRlcy5hVGV4dHVyZUNvb3JkLCAyLCBnbC5GTE9BVCwgZmFsc2UsIDAsIDIgKiA0ICogNCk7XG4gICAgZ2wudmVydGV4QXR0cmliUG9pbnRlcih0aGlzLnJlbmRlcmVyLnNoYWRlck1hbmFnZXIuZGVmYXVsdFNoYWRlci5hdHRyaWJ1dGVzLmFDb2xvciwgNCwgZ2wuRkxPQVQsIGZhbHNlLCAwLCA0ICogNCAqIDQpO1xuXG4gICAgLy8gcmVzdG9yZSB0aGUgbm9ybWFsIGJsZW5kbW9kZSFcbiAgICB0aGlzLnJlbmRlcmVyLmJsZW5kTW9kZU1hbmFnZXIuc2V0QmxlbmRNb2RlKENPTlNULkJMRU5EX01PREVTLk5PUk1BTCk7XG5cbiAgICBpZiAoZmlsdGVycy5sZW5ndGggPT09IDEpXG4gICAge1xuICAgICAgICAvLyBUT0RPIChjZW5nbGVyKSAtIFRoZXJlIGhhcyB0byBiZSBhIGJldHRlciB3YXkgdGhlbiBzZXR0aW5nIHRoaXMgZWFjaCB0aW1lP1xuICAgICAgICBpZiAoZmlsdGVyc1swXS51bmlmb3Jtcy5kaW1lbnNpb25zKVxuICAgICAgICB7XG4gICAgICAgICAgICBmaWx0ZXJzWzBdLnVuaWZvcm1zLmRpbWVuc2lvbnMudmFsdWVbMF0gPSB0aGlzLnJlbmRlcmVyLndpZHRoO1xuICAgICAgICAgICAgZmlsdGVyc1swXS51bmlmb3Jtcy5kaW1lbnNpb25zLnZhbHVlWzFdID0gdGhpcy5yZW5kZXJlci5oZWlnaHQ7XG4gICAgICAgICAgICBmaWx0ZXJzWzBdLnVuaWZvcm1zLmRpbWVuc2lvbnMudmFsdWVbMl0gPSB0aGlzLnF1YWQudmVydGljZXNbMF07XG4gICAgICAgICAgICBmaWx0ZXJzWzBdLnVuaWZvcm1zLmRpbWVuc2lvbnMudmFsdWVbM10gPSB0aGlzLnF1YWQudmVydGljZXNbNV07XG4gICAgICAgIH1cblxuICAgICAgICBmaWx0ZXJzWzBdLmFwcGx5RmlsdGVyKCB0aGlzLnJlbmRlcmVyLCBpbnB1dCwgb3V0cHV0ICk7XG4gICAgICAgIHRoaXMucmV0dXJuUmVuZGVyVGFyZ2V0KCBpbnB1dCApO1xuXG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHZhciBmbGlwVGV4dHVyZSA9IGlucHV0O1xuICAgICAgICB2YXIgZmxvcFRleHR1cmUgPSB0aGlzLmdldFJlbmRlclRhcmdldCh0cnVlKTtcblxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGZpbHRlcnMubGVuZ3RoLTE7IGkrKylcbiAgICAgICAge1xuICAgICAgICAgICAgdmFyIGZpbHRlciA9IGZpbHRlcnNbaV07XG5cbiAgICAgICAgICAgIC8vIFRPRE8gKGNlbmdsZXIpIC0gVGhlcmUgaGFzIHRvIGJlIGEgYmV0dGVyIHdheSB0aGVuIHNldHRpbmcgdGhpcyBlYWNoIHRpbWU/XG4gICAgICAgICAgICBpZiAoZmlsdGVyLnVuaWZvcm1zLmRpbWVuc2lvbnMpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgZmlsdGVyLnVuaWZvcm1zLmRpbWVuc2lvbnMudmFsdWVbMF0gPSB0aGlzLnJlbmRlcmVyLndpZHRoO1xuICAgICAgICAgICAgICAgIGZpbHRlci51bmlmb3Jtcy5kaW1lbnNpb25zLnZhbHVlWzFdID0gdGhpcy5yZW5kZXJlci5oZWlnaHQ7XG4gICAgICAgICAgICAgICAgZmlsdGVyLnVuaWZvcm1zLmRpbWVuc2lvbnMudmFsdWVbMl0gPSB0aGlzLnF1YWQudmVydGljZXNbMF07XG4gICAgICAgICAgICAgICAgZmlsdGVyLnVuaWZvcm1zLmRpbWVuc2lvbnMudmFsdWVbM10gPSB0aGlzLnF1YWQudmVydGljZXNbNV07XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGZpbHRlci5hcHBseUZpbHRlciggdGhpcy5yZW5kZXJlciwgZmxpcFRleHR1cmUsIGZsb3BUZXh0dXJlICk7XG5cbiAgICAgICAgICAgIHZhciB0ZW1wID0gZmxpcFRleHR1cmU7XG4gICAgICAgICAgICBmbGlwVGV4dHVyZSA9IGZsb3BUZXh0dXJlO1xuICAgICAgICAgICAgZmxvcFRleHR1cmUgPSB0ZW1wO1xuICAgICAgICB9XG5cbiAgICAgICAgZmlsdGVyc1tmaWx0ZXJzLmxlbmd0aC0xXS5hcHBseUZpbHRlciggdGhpcy5yZW5kZXJlciwgZmxpcFRleHR1cmUsIG91dHB1dCApO1xuXG4gICAgICAgIHRoaXMucmV0dXJuUmVuZGVyVGFyZ2V0KCBmbGlwVGV4dHVyZSApO1xuICAgICAgICB0aGlzLnJldHVyblJlbmRlclRhcmdldCggZmxvcFRleHR1cmUgKTtcbiAgICB9XG5cbiAgICByZXR1cm4gZmlsdGVyRGF0YS5maWx0ZXI7XG59O1xuXG4vKipcbiAqIEdyYWJzIGFuIHJlbmRlciB0YXJnZXQgZnJvbSB0aGUgaW50ZXJuYWwgcG9vbFxuICpcbiAqIEBwYXJhbSBjbGVhciB7Ym9vbGVhbn0gV2hldGhlciBvciBub3Qgd2UgbmVlZCB0byBjbGVhciB0aGUgUmVuZGVyVGFyZ2V0XG4gKiBAcmV0dXJuIHtSZW5kZXJUYXJnZXR9XG4gKi9cbkZpbHRlck1hbmFnZXIucHJvdG90eXBlLmdldFJlbmRlclRhcmdldCA9IGZ1bmN0aW9uICggY2xlYXIgKVxue1xuICAgIHZhciByZW5kZXJUYXJnZXQgPSB0aGlzLnRleHR1cmVQb29sLnBvcCgpIHx8IG5ldyBSZW5kZXJUYXJnZXQodGhpcy5yZW5kZXJlci5nbCwgdGhpcy50ZXh0dXJlU2l6ZS53aWR0aCwgdGhpcy50ZXh0dXJlU2l6ZS5oZWlnaHQsIENPTlNULlNDQUxFX01PREVTLkxJTkVBUiwgdGhpcy5yZW5kZXJlci5yZXNvbHV0aW9uICogQ09OU1QuRklMVEVSX1JFU09MVVRJT04pO1xuICAgIHJlbmRlclRhcmdldC5mcmFtZSA9IHRoaXMuY3VycmVudEZyYW1lO1xuXG4gICAgaWYgKGNsZWFyKVxuICAgIHtcbiAgICAgICAgcmVuZGVyVGFyZ2V0LmNsZWFyKHRydWUpO1xuICAgIH1cblxuICAgIHJldHVybiByZW5kZXJUYXJnZXQ7XG59O1xuXG4vKlxuICogUmV0dXJucyBhIFJlbmRlclRhcmdldCB0byB0aGUgaW50ZXJuYWwgcG9vbFxuICogQHBhcmFtIHJlbmRlclRhcmdldCB7UmVuZGVyVGFyZ2V0fSBUaGUgUmVuZGVyVGFyZ2V0IHdlIHdhbnQgdG8gcmV0dXJuIHRvIHRoZSBwb29sXG4gKi9cbkZpbHRlck1hbmFnZXIucHJvdG90eXBlLnJldHVyblJlbmRlclRhcmdldCA9IGZ1bmN0aW9uIChyZW5kZXJUYXJnZXQpXG57XG4gICAgdGhpcy50ZXh0dXJlUG9vbC5wdXNoKCByZW5kZXJUYXJnZXQgKTtcbn07XG5cbi8qXG4gKiBBcHBsaWVzIHRoZSBmaWx0ZXJcbiAqIEBwYXJhbSBzaGFkZXIge1NoYWRlcn0gVGhlIHNoYWRlciB0byB1cGxvYWRcbiAqIEBwYXJhbSBpbnB1dFRhcmdldCB7UmVuZGVyVGFyZ2V0fVxuICogQHBhcmFtIG91dHB1dFRhcmdldCB7UmVuZGVyVGFyZ2V0fVxuICogQHBhcmFtIGNsZWFyIHtib29sZWFufSBXaGV0aGVyIG9yIG5vdCB3ZSB3YW50IHRvIGNsZWFyIHRoZSBvdXRwdXRUYXJnZXRcbiAqL1xuRmlsdGVyTWFuYWdlci5wcm90b3R5cGUuYXBwbHlGaWx0ZXIgPSBmdW5jdGlvbiAoc2hhZGVyLCBpbnB1dFRhcmdldCwgb3V0cHV0VGFyZ2V0LCBjbGVhcilcbntcbiAgICB2YXIgZ2wgPSB0aGlzLnJlbmRlcmVyLmdsO1xuXG4gICAgdGhpcy5yZW5kZXJlci5zZXRSZW5kZXJUYXJnZXQob3V0cHV0VGFyZ2V0KTtcblxuICAgIGlmIChjbGVhcilcbiAgICB7XG4gICAgICAgIG91dHB1dFRhcmdldC5jbGVhcigpO1xuICAgIH1cblxuICAgIC8vIHNldCB0aGUgc2hhZGVyXG4gICAgdGhpcy5yZW5kZXJlci5zaGFkZXJNYW5hZ2VyLnNldFNoYWRlcihzaGFkZXIpO1xuXG4gICAgLy8gVE9ETyAoY2VuZ2xlcikgLSBDYW4gdGhpcyBiZSBjYWNoZWQgYW5kIG5vdCBgdG9BcnJheWBlZCBlYWNoIGZyYW1lP1xuICAgIHNoYWRlci51bmlmb3Jtcy5wcm9qZWN0aW9uTWF0cml4LnZhbHVlID0gdGhpcy5yZW5kZXJlci5jdXJyZW50UmVuZGVyVGFyZ2V0LnByb2plY3Rpb25NYXRyaXgudG9BcnJheSh0cnVlKTtcblxuICAgIC8vVE9ETyBjYW4gdGhpcyBiZSBvcHRpbWlzZWQ/XG4gICAgc2hhZGVyLnN5bmNVbmlmb3JtcygpO1xuLypcbiAgICBnbC52ZXJ0ZXhBdHRyaWJQb2ludGVyKHNoYWRlci5hdHRyaWJ1dGVzLmFWZXJ0ZXhQb3NpdGlvbiwgMiwgZ2wuRkxPQVQsIGZhbHNlLCAwLCAwKTtcbiAgICBnbC52ZXJ0ZXhBdHRyaWJQb2ludGVyKHNoYWRlci5hdHRyaWJ1dGVzLmFUZXh0dXJlQ29vcmQsIDIsIGdsLkZMT0FULCBmYWxzZSwgMCwgMiAqIDQgKiA0KTtcbiAgICBnbC52ZXJ0ZXhBdHRyaWJQb2ludGVyKHNoYWRlci5hdHRyaWJ1dGVzLmFDb2xvciwgNCwgZ2wuRkxPQVQsIGZhbHNlLCAwLCA0ICogNCAqIDQpO1xuKi9cblxuICAgIGdsLmFjdGl2ZVRleHR1cmUoZ2wuVEVYVFVSRTApO1xuICAgIGdsLmJpbmRUZXh0dXJlKGdsLlRFWFRVUkVfMkQsIGlucHV0VGFyZ2V0LnRleHR1cmUpO1xuXG4gICAgZ2wuZHJhd0VsZW1lbnRzKGdsLlRSSUFOR0xFUywgNiwgZ2wuVU5TSUdORURfU0hPUlQsIDAgKTtcbiAgICB0aGlzLnJlbmRlcmVyLmRyYXdDb3VudCsrO1xufTtcblxuLypcbiAqIENhbGN1bGF0ZXMgdGhlIG1hcHBlZCBtYXRyaXhcbiAqIEBwYXJhbSBmaWx0ZXJBcmVhIHtSZWN0YW5nbGV9IFRoZSBmaWx0ZXIgYXJlYVxuICogQHBhcmFtIHNwcml0ZSB7U3ByaXRlfSB0aGUgdGFyZ2V0IHNwcml0ZVxuICogQHBhcmFtIG91dHB1dE1hdHJpeCB7TWF0cml4fSBAYWx2aW5cbiAqL1xuLy8gVE9ETyBwbGF5aW5nIGFyb3VuZCBoZXJlLi4gdGhpcyBpcyB0ZW1wb3JhcnkgLSAod2lsbCBlbmQgdXAgaW4gdGhlIHNoYWRlcilcbkZpbHRlck1hbmFnZXIucHJvdG90eXBlLmNhbGN1bGF0ZU1hcHBlZE1hdHJpeCA9IGZ1bmN0aW9uIChmaWx0ZXJBcmVhLCBzcHJpdGUsIG91dHB1dE1hdHJpeClcbntcbiAgICB2YXIgd29ybGRUcmFuc2Zvcm0gPSBzcHJpdGUud29ybGRUcmFuc2Zvcm0uY29weShtYXRoLk1hdHJpeC5URU1QX01BVFJJWCksXG4gICAgdGV4dHVyZSA9IHNwcml0ZS5fdGV4dHVyZS5iYXNlVGV4dHVyZTtcblxuICAgIHZhciBtYXBwZWRNYXRyaXggPSBvdXRwdXRNYXRyaXguaWRlbnRpdHkoKTtcblxuICAgIC8vIHNjYWxlLi5cbiAgICB2YXIgcmF0aW8gPSB0aGlzLnRleHR1cmVTaXplLmhlaWdodCAvIHRoaXMudGV4dHVyZVNpemUud2lkdGg7XG5cbiAgICBtYXBwZWRNYXRyaXgudHJhbnNsYXRlKGZpbHRlckFyZWEueCAvIHRoaXMudGV4dHVyZVNpemUud2lkdGgsIGZpbHRlckFyZWEueSAvIHRoaXMudGV4dHVyZVNpemUuaGVpZ2h0ICk7XG5cbiAgICBtYXBwZWRNYXRyaXguc2NhbGUoMSAsIHJhdGlvKTtcblxuICAgIHZhciB0cmFuc2xhdGVTY2FsZVggPSAodGhpcy50ZXh0dXJlU2l6ZS53aWR0aCAvIHRleHR1cmUud2lkdGgpO1xuICAgIHZhciB0cmFuc2xhdGVTY2FsZVkgPSAodGhpcy50ZXh0dXJlU2l6ZS5oZWlnaHQgLyB0ZXh0dXJlLmhlaWdodCk7XG5cbiAgICB3b3JsZFRyYW5zZm9ybS50eCAvPSB0ZXh0dXJlLndpZHRoICogdHJhbnNsYXRlU2NhbGVYO1xuICAgIHdvcmxkVHJhbnNmb3JtLnR5IC89IHRleHR1cmUud2lkdGggKiB0cmFuc2xhdGVTY2FsZVg7XG5cbiAgICB3b3JsZFRyYW5zZm9ybS5pbnZlcnQoKTtcblxuICAgIG1hcHBlZE1hdHJpeC5wcmVwZW5kKHdvcmxkVHJhbnNmb3JtKTtcblxuICAgIC8vIGFwcGx5IGludmVyc2Ugc2NhbGUuLlxuICAgIG1hcHBlZE1hdHJpeC5zY2FsZSgxICwgMS9yYXRpbyk7XG5cbiAgICBtYXBwZWRNYXRyaXguc2NhbGUoIHRyYW5zbGF0ZVNjYWxlWCAsIHRyYW5zbGF0ZVNjYWxlWSApO1xuXG4gICAgbWFwcGVkTWF0cml4LnRyYW5zbGF0ZShzcHJpdGUuYW5jaG9yLngsIHNwcml0ZS5hbmNob3IueSk7XG5cbiAgICByZXR1cm4gbWFwcGVkTWF0cml4O1xuXG4gICAgLy8gS2VlcGluZyB0aGUgb3JnaW5hbCBhcyBhIHJlbWluZGVyIHRvIG1lIG9uIGhvdyB0aGlzIHdvcmtzIVxuICAgIC8vXG4gICAgLy8gdmFyIG0gPSBuZXcgbWF0aC5NYXRyaXgoKTtcblxuICAgIC8vIC8vIHNjYWxlLi5cbiAgICAvLyB2YXIgcmF0aW8gPSB0aGlzLnRleHR1cmVTaXplLmhlaWdodCAvIHRoaXMudGV4dHVyZVNpemUud2lkdGg7XG5cbiAgICAvLyBtLnRyYW5zbGF0ZShmaWx0ZXJBcmVhLnggLyB0aGlzLnRleHR1cmVTaXplLndpZHRoLCBmaWx0ZXJBcmVhLnkgLyB0aGlzLnRleHR1cmVTaXplLmhlaWdodCk7XG5cblxuICAgIC8vIG0uc2NhbGUoMSAsIHJhdGlvKTtcblxuXG4gICAgLy8gdmFyIHRyYW5zZm9ybSA9IHd0LmNsb25lKCk7XG5cbiAgICAvLyB2YXIgdHJhbnNsYXRlU2NhbGVYID0gKHRoaXMudGV4dHVyZVNpemUud2lkdGggLyA2MjApO1xuICAgIC8vIHZhciB0cmFuc2xhdGVTY2FsZVkgPSAodGhpcy50ZXh0dXJlU2l6ZS5oZWlnaHQgLyAzODApO1xuXG4gICAgLy8gdHJhbnNmb3JtLnR4IC89IDYyMCAqIHRyYW5zbGF0ZVNjYWxlWDtcbiAgICAvLyB0cmFuc2Zvcm0udHkgLz0gNjIwICogdHJhbnNsYXRlU2NhbGVYO1xuXG4gICAgLy8gdHJhbnNmb3JtLmludmVydCgpO1xuXG4gICAgLy8gdHJhbnNmb3JtLmFwcGVuZChtKTtcblxuICAgIC8vIC8vIGFwcGx5IGludmVyc2Ugc2NhbGUuLlxuICAgIC8vIHRyYW5zZm9ybS5zY2FsZSgxICwgMS9yYXRpbyk7XG5cbiAgICAvLyB0cmFuc2Zvcm0uc2NhbGUoIHRyYW5zbGF0ZVNjYWxlWCAsIHRyYW5zbGF0ZVNjYWxlWSApO1xuXG4gICAgLy8gcmV0dXJuIHRyYW5zZm9ybTtcbn07XG5cbi8qXG4gKiBDb25zdHJhaW5zIHRoZSBmaWx0ZXIgYXJlYSB0byB0aGUgdGV4dHVyZSBzaXplXG4gKiBAcGFyYW0gZmlsdGVyQXJlYSB7UmVjdGFuZ2xlfSBUaGUgZmlsdGVyIGFyZWEgd2Ugd2FudCB0byBjYXBcbiAqL1xuRmlsdGVyTWFuYWdlci5wcm90b3R5cGUuY2FwRmlsdGVyQXJlYSA9IGZ1bmN0aW9uIChmaWx0ZXJBcmVhKVxue1xuICAgIGlmIChmaWx0ZXJBcmVhLnggPCAwKVxuICAgIHtcbiAgICAgICAgZmlsdGVyQXJlYS53aWR0aCArPSBmaWx0ZXJBcmVhLng7XG4gICAgICAgIGZpbHRlckFyZWEueCA9IDA7XG4gICAgfVxuXG4gICAgaWYgKGZpbHRlckFyZWEueSA8IDApXG4gICAge1xuICAgICAgICBmaWx0ZXJBcmVhLmhlaWdodCArPSBmaWx0ZXJBcmVhLnk7XG4gICAgICAgIGZpbHRlckFyZWEueSA9IDA7XG4gICAgfVxuXG4gICAgaWYgKCBmaWx0ZXJBcmVhLnggKyBmaWx0ZXJBcmVhLndpZHRoID4gdGhpcy50ZXh0dXJlU2l6ZS53aWR0aCApXG4gICAge1xuICAgICAgICBmaWx0ZXJBcmVhLndpZHRoID0gdGhpcy50ZXh0dXJlU2l6ZS53aWR0aCAtIGZpbHRlckFyZWEueDtcbiAgICB9XG5cbiAgICBpZiAoIGZpbHRlckFyZWEueSArIGZpbHRlckFyZWEuaGVpZ2h0ID4gdGhpcy50ZXh0dXJlU2l6ZS5oZWlnaHQgKVxuICAgIHtcbiAgICAgICAgZmlsdGVyQXJlYS5oZWlnaHQgPSB0aGlzLnRleHR1cmVTaXplLmhlaWdodCAtIGZpbHRlckFyZWEueTtcbiAgICB9XG59O1xuXG4vKlxuICogUmVzaXplcyBhbGwgdGhlIHJlbmRlciB0YXJnZXRzIGluIHRoZSBwb29sXG4gKiBAcGFyYW0gd2lkdGgge251bWJlcn0gdGhlIG5ldyB3aWR0aFxuICogQHBhcmFtIGhlaWdodCB7bnVtYmVyfSB0aGUgbmV3IGhlaWdodFxuICovXG5GaWx0ZXJNYW5hZ2VyLnByb3RvdHlwZS5yZXNpemUgPSBmdW5jdGlvbiAoIHdpZHRoLCBoZWlnaHQgKVxue1xuICAgIHRoaXMudGV4dHVyZVNpemUud2lkdGggPSB3aWR0aDtcbiAgICB0aGlzLnRleHR1cmVTaXplLmhlaWdodCA9IGhlaWdodDtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy50ZXh0dXJlUG9vbC5sZW5ndGg7IGkrKylcbiAgICB7XG4gICAgICAgIHRoaXMudGV4dHVyZVBvb2xbaV0ucmVzaXplKCB3aWR0aCwgaGVpZ2h0ICk7XG4gICAgfVxufTtcblxuLyoqXG4gKiBEZXN0cm95cyB0aGUgZmlsdGVyIGFuZCByZW1vdmVzIGl0IGZyb20gdGhlIGZpbHRlciBzdGFjay5cbiAqXG4gKi9cbkZpbHRlck1hbmFnZXIucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoKVxue1xuICAgIHRoaXMucXVhZC5kZXN0cm95KCk7XG4gICAgXG4gICAgV2ViR0xNYW5hZ2VyLnByb3RvdHlwZS5kZXN0cm95LmNhbGwodGhpcyk7XG4gICAgXG4gICAgdGhpcy5maWx0ZXJTdGFjayA9IG51bGw7XG4gICAgdGhpcy5vZmZzZXRZID0gMDtcblxuICAgIC8vIGRlc3Ryb3kgdGV4dHVyZXNcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMudGV4dHVyZVBvb2wubGVuZ3RoOyBpKyspXG4gICAge1xuICAgICAgICB0aGlzLnRleHR1cmVQb29sW2ldLmRlc3Ryb3koKTtcbiAgICB9XG5cbiAgICB0aGlzLnRleHR1cmVQb29sID0gbnVsbDtcbn07XG4iLCJ2YXIgV2ViR0xNYW5hZ2VyID0gcmVxdWlyZSgnLi9XZWJHTE1hbmFnZXInKSxcbiAgICBBbHBoYU1hc2tGaWx0ZXIgPSByZXF1aXJlKCcuLi9maWx0ZXJzL1Nwcml0ZU1hc2tGaWx0ZXInKTtcblxuLyoqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcn0gVGhlIHJlbmRlcmVyIHRoaXMgbWFuYWdlciB3b3JrcyBmb3IuXG4gKi9cbmZ1bmN0aW9uIE1hc2tNYW5hZ2VyKHJlbmRlcmVyKVxue1xuICAgIFdlYkdMTWFuYWdlci5jYWxsKHRoaXMsIHJlbmRlcmVyKTtcblxuICAgIHRoaXMuc3RlbmNpbFN0YWNrID0gW107XG4gICAgdGhpcy5yZXZlcnNlID0gdHJ1ZTtcbiAgICB0aGlzLmNvdW50ID0gMDtcblxuICAgIHRoaXMuYWxwaGFNYXNrUG9vbCA9IFtdO1xufVxuXG5NYXNrTWFuYWdlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFdlYkdMTWFuYWdlci5wcm90b3R5cGUpO1xuTWFza01hbmFnZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gTWFza01hbmFnZXI7XG5tb2R1bGUuZXhwb3J0cyA9IE1hc2tNYW5hZ2VyO1xuXG4vKipcbiAqIEFwcGxpZXMgdGhlIE1hc2sgYW5kIGFkZHMgaXQgdG8gdGhlIGN1cnJlbnQgZmlsdGVyIHN0YWNrLlxuICpcbiAqIEBwYXJhbSBncmFwaGljcyB7UElYSS5HcmFwaGljc31cbiAqIEBwYXJhbSB3ZWJHTERhdGEge2FueVtdfVxuICovXG5NYXNrTWFuYWdlci5wcm90b3R5cGUucHVzaE1hc2sgPSBmdW5jdGlvbiAodGFyZ2V0LCBtYXNrRGF0YSlcbntcbiAgICBpZiAobWFza0RhdGEudGV4dHVyZSlcbiAgICB7XG4gICAgICAgIHRoaXMucHVzaFNwcml0ZU1hc2sodGFyZ2V0LCBtYXNrRGF0YSk7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHRoaXMucHVzaFN0ZW5jaWxNYXNrKHRhcmdldCwgbWFza0RhdGEpO1xuICAgIH1cblxufTtcblxuLyoqXG4gKiBSZW1vdmVzIHRoZSBsYXN0IG1hc2sgZnJvbSB0aGUgbWFzayBzdGFjayBhbmQgZG9lc24ndCByZXR1cm4gaXQuXG4gKlxuICogQHBhcmFtIHRhcmdldCB7UElYSS5SZW5kZXJUYXJnZXR9XG4gKiBAcGFyYW0gbWFza0RhdGEge2FueVtdfVxuICovXG5NYXNrTWFuYWdlci5wcm90b3R5cGUucG9wTWFzayA9IGZ1bmN0aW9uICh0YXJnZXQsIG1hc2tEYXRhKVxue1xuICAgIGlmIChtYXNrRGF0YS50ZXh0dXJlKVxuICAgIHtcbiAgICAgICAgdGhpcy5wb3BTcHJpdGVNYXNrKHRhcmdldCwgbWFza0RhdGEpO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICB0aGlzLnBvcFN0ZW5jaWxNYXNrKHRhcmdldCwgbWFza0RhdGEpO1xuICAgIH1cbn07XG5cbi8qKlxuICogQXBwbGllcyB0aGUgTWFzayBhbmQgYWRkcyBpdCB0byB0aGUgY3VycmVudCBmaWx0ZXIgc3RhY2suXG4gKlxuICogQHBhcmFtIHRhcmdldCB7UElYSS5SZW5kZXJUYXJnZXR9XG4gKiBAcGFyYW0gbWFza0RhdGEge2FueVtdfVxuICovXG5NYXNrTWFuYWdlci5wcm90b3R5cGUucHVzaFNwcml0ZU1hc2sgPSBmdW5jdGlvbiAodGFyZ2V0LCBtYXNrRGF0YSlcbntcbiAgICB2YXIgYWxwaGFNYXNrRmlsdGVyID0gdGhpcy5hbHBoYU1hc2tQb29sLnBvcCgpO1xuXG4gICAgaWYgKCFhbHBoYU1hc2tGaWx0ZXIpXG4gICAge1xuICAgICAgICBhbHBoYU1hc2tGaWx0ZXIgPSBbbmV3IEFscGhhTWFza0ZpbHRlcihtYXNrRGF0YSldO1xuICAgIH1cblxuICAgIGFscGhhTWFza0ZpbHRlclswXS5tYXNrU3ByaXRlID0gbWFza0RhdGE7XG4gICAgdGhpcy5yZW5kZXJlci5maWx0ZXJNYW5hZ2VyLnB1c2hGaWx0ZXIodGFyZ2V0LCBhbHBoYU1hc2tGaWx0ZXIpO1xufTtcblxuLyoqXG4gKiBSZW1vdmVzIHRoZSBsYXN0IGZpbHRlciBmcm9tIHRoZSBmaWx0ZXIgc3RhY2sgYW5kIGRvZXNuJ3QgcmV0dXJuIGl0LlxuICpcbiAqL1xuTWFza01hbmFnZXIucHJvdG90eXBlLnBvcFNwcml0ZU1hc2sgPSBmdW5jdGlvbiAoKVxue1xuICAgIHZhciBmaWx0ZXJzID0gdGhpcy5yZW5kZXJlci5maWx0ZXJNYW5hZ2VyLnBvcEZpbHRlcigpO1xuXG4gICAgdGhpcy5hbHBoYU1hc2tQb29sLnB1c2goZmlsdGVycyk7XG59O1xuXG5cbi8qKlxuICogQXBwbGllcyB0aGUgTWFzayBhbmQgYWRkcyBpdCB0byB0aGUgY3VycmVudCBmaWx0ZXIgc3RhY2suXG4gKlxuICogQHBhcmFtIHRhcmdldCB7UElYSS5SZW5kZXJUYXJnZXR9XG4gKiBAcGFyYW0gbWFza0RhdGEge2FueVtdfVxuICovXG5NYXNrTWFuYWdlci5wcm90b3R5cGUucHVzaFN0ZW5jaWxNYXNrID0gZnVuY3Rpb24gKHRhcmdldCwgbWFza0RhdGEpXG57XG4gICAgdGhpcy5yZW5kZXJlci5zdGVuY2lsTWFuYWdlci5wdXNoTWFzayhtYXNrRGF0YSk7XG59O1xuXG4vKipcbiAqIFJlbW92ZXMgdGhlIGxhc3QgZmlsdGVyIGZyb20gdGhlIGZpbHRlciBzdGFjayBhbmQgZG9lc24ndCByZXR1cm4gaXQuXG4gKlxuICogQHBhcmFtIHRhcmdldCB7UElYSS5SZW5kZXJUYXJnZXR9XG4gKiBAcGFyYW0gbWFza0RhdGEge2FueVtdfVxuICovXG5NYXNrTWFuYWdlci5wcm90b3R5cGUucG9wU3RlbmNpbE1hc2sgPSBmdW5jdGlvbiAodGFyZ2V0LCBtYXNrRGF0YSlcbntcbiAgICB0aGlzLnJlbmRlcmVyLnN0ZW5jaWxNYW5hZ2VyLnBvcE1hc2sobWFza0RhdGEpO1xufTtcblxuIiwidmFyIFdlYkdMTWFuYWdlciA9IHJlcXVpcmUoJy4vV2ViR0xNYW5hZ2VyJyksXG4gICAgVGV4dHVyZVNoYWRlciA9IHJlcXVpcmUoJy4uL3NoYWRlcnMvVGV4dHVyZVNoYWRlcicpLFxuICAgIENvbXBsZXhQcmltaXRpdmVTaGFkZXIgPSByZXF1aXJlKCcuLi9zaGFkZXJzL0NvbXBsZXhQcmltaXRpdmVTaGFkZXInKSxcbiAgICBQcmltaXRpdmVTaGFkZXIgPSByZXF1aXJlKCcuLi9zaGFkZXJzL1ByaW1pdGl2ZVNoYWRlcicpLFxuICAgIHV0aWxzID0gcmVxdWlyZSgnLi4vLi4vLi4vdXRpbHMnKTtcblxuLyoqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAZXh0ZW5kcyBQSVhJLldlYkdMTWFuYWdlclxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLldlYkdMUmVuZGVyZXJ9IFRoZSByZW5kZXJlciB0aGlzIG1hbmFnZXIgd29ya3MgZm9yLlxuICovXG5mdW5jdGlvbiBTaGFkZXJNYW5hZ2VyKHJlbmRlcmVyKVxue1xuICAgIFdlYkdMTWFuYWdlci5jYWxsKHRoaXMsIHJlbmRlcmVyKTtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLm1heEF0dGlicyA9IDEwO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7YW55W119XG4gICAgICovXG4gICAgdGhpcy5hdHRyaWJTdGF0ZSA9IFtdO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7YW55W119XG4gICAgICovXG4gICAgdGhpcy50ZW1wQXR0cmliU3RhdGUgPSBbXTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5tYXhBdHRpYnM7IGkrKylcbiAgICB7XG4gICAgICAgIHRoaXMuYXR0cmliU3RhdGVbaV0gPSBmYWxzZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHthbnlbXX1cbiAgICAgKi9cbiAgICB0aGlzLnN0YWNrID0gW107XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9jdXJyZW50SWQgPSAtMTtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge1BJWEkuU2hhZGVyfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5jdXJyZW50U2hhZGVyID0gbnVsbDtcblxuLy8gICAgdGhpcy5pbml0UGx1Z2lucygpO1xufVxuXG5TaGFkZXJNYW5hZ2VyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoV2ViR0xNYW5hZ2VyLnByb3RvdHlwZSk7XG5TaGFkZXJNYW5hZ2VyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFNoYWRlck1hbmFnZXI7XG51dGlscy5wbHVnaW5UYXJnZXQubWl4aW4oU2hhZGVyTWFuYWdlcik7XG5cbm1vZHVsZS5leHBvcnRzID0gU2hhZGVyTWFuYWdlcjtcblxuLyoqXG4gKiBDYWxsZWQgd2hlbiB0aGVyZSBpcyBhIFdlYkdMIGNvbnRleHQgY2hhbmdlLlxuICpcbiAqL1xuU2hhZGVyTWFuYWdlci5wcm90b3R5cGUub25Db250ZXh0Q2hhbmdlID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLmluaXRQbHVnaW5zKCk7XG5cbiAgICB2YXIgZ2wgPSB0aGlzLnJlbmRlcmVyLmdsO1xuXG4gICAgLy8gZ2V0IHRoZSBtYXhpbXVtIG51bWJlciBvZiBhdHRyaWJ1dGUgY29ycmVjdGx5IGFzIHRoaXMgdGVuZHMgdG8gdmFyeVxuICAgIHRoaXMubWF4QXR0aWJzID0gZ2wuZ2V0UGFyYW1ldGVyKGdsLk1BWF9WRVJURVhfQVRUUklCUyk7XG5cbiAgICB0aGlzLmF0dHJpYlN0YXRlID0gW107XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMubWF4QXR0aWJzOyBpKyspXG4gICAge1xuICAgICAgICB0aGlzLmF0dHJpYlN0YXRlW2ldID0gZmFsc2U7XG4gICAgfVxuXG4gICAgLy8gVE9ETyAtIFdoeSBhcmUgdGhlc2Ugbm90IHBsdWdpbnM/IFdlIGNhbid0IGRlY291cGxlIHByaW1pdGl2ZXMgdW5sZXNzIHRoZXkgYXJlLi4uLlxuICAgIHRoaXMuZGVmYXVsdFNoYWRlciA9IG5ldyBUZXh0dXJlU2hhZGVyKHRoaXMpO1xuICAgIHRoaXMucHJpbWl0aXZlU2hhZGVyID0gbmV3IFByaW1pdGl2ZVNoYWRlcih0aGlzKTtcbiAgICB0aGlzLmNvbXBsZXhQcmltaXRpdmVTaGFkZXIgPSBuZXcgQ29tcGxleFByaW1pdGl2ZVNoYWRlcih0aGlzKTtcbn07XG5cbi8qKlxuICogVGFrZXMgdGhlIGF0dHJpYnV0ZXMgZ2l2ZW4gaW4gcGFyYW1ldGVycyBhbmQgdXBsb2FkcyB0aGVtLlxuICpcbiAqIEBwYXJhbSBhdHRyaWJzIHthbnlbXX0gYXR0cmlic1xuICovXG5TaGFkZXJNYW5hZ2VyLnByb3RvdHlwZS5zZXRBdHRyaWJzID0gZnVuY3Rpb24gKGF0dHJpYnMpXG57XG4gICAgLy8gcmVzZXQgdGVtcCBzdGF0ZVxuICAgIHZhciBpO1xuXG4gICAgZm9yIChpID0gMDsgaSA8IHRoaXMudGVtcEF0dHJpYlN0YXRlLmxlbmd0aDsgaSsrKVxuICAgIHtcbiAgICAgICAgdGhpcy50ZW1wQXR0cmliU3RhdGVbaV0gPSBmYWxzZTtcbiAgICB9XG5cbiAgICAvLyBzZXQgdGhlIG5ldyBhdHRyaWJzXG4gICAgZm9yICh2YXIgYSBpbiBhdHRyaWJzKVxuICAgIHtcbiAgICAgICAgdGhpcy50ZW1wQXR0cmliU3RhdGVbYXR0cmlic1thXV0gPSB0cnVlO1xuICAgIH1cblxuICAgIHZhciBnbCA9IHRoaXMucmVuZGVyZXIuZ2w7XG5cbiAgICBmb3IgKGkgPSAwOyBpIDwgdGhpcy5hdHRyaWJTdGF0ZS5sZW5ndGg7IGkrKylcbiAgICB7XG4gICAgICAgIGlmICh0aGlzLmF0dHJpYlN0YXRlW2ldICE9PSB0aGlzLnRlbXBBdHRyaWJTdGF0ZVtpXSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5hdHRyaWJTdGF0ZVtpXSA9IHRoaXMudGVtcEF0dHJpYlN0YXRlW2ldO1xuXG4gICAgICAgICAgICBpZiAodGhpcy5hdHRyaWJTdGF0ZVtpXSlcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBnbC5lbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBnbC5kaXNhYmxlVmVydGV4QXR0cmliQXJyYXkoaSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG59O1xuXG4vKipcbiAqIFNldHMgdGhlIGN1cnJlbnQgc2hhZGVyLlxuICpcbiAqIEBwYXJhbSBzaGFkZXIge1BJWEkuU2hhZGVyfSB0aGUgc2hhZGVyIHRvIHVwbG9hZFxuICovXG5TaGFkZXJNYW5hZ2VyLnByb3RvdHlwZS5zZXRTaGFkZXIgPSBmdW5jdGlvbiAoc2hhZGVyKVxue1xuICAgIHJldHVybjtcbiAgICBpZiAodGhpcy5fY3VycmVudElkID09PSBzaGFkZXIudWlkKVxuICAgIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHRoaXMuX2N1cnJlbnRJZCA9IHNoYWRlci51aWQ7XG5cbiAgICB0aGlzLmN1cnJlbnRTaGFkZXIgPSBzaGFkZXI7XG5cbiAgICB0aGlzLnJlbmRlcmVyLmdsLnVzZVByb2dyYW0oc2hhZGVyLnByb2dyYW0pO1xuICAgIHRoaXMuc2V0QXR0cmlicyhzaGFkZXIuYXR0cmlidXRlcyk7XG5cbiAgICByZXR1cm4gdHJ1ZTtcbn07XG5cbi8qKlxuICogRGVzdHJveXMgdGhpcyBvYmplY3QuXG4gKlxuICovXG5TaGFkZXJNYW5hZ2VyLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLnByaW1pdGl2ZVNoYWRlci5kZXN0cm95KCk7XG4gICAgdGhpcy5jb21wbGV4UHJpbWl0aXZlU2hhZGVyLmRlc3Ryb3koKTtcbiAgICBXZWJHTE1hbmFnZXIucHJvdG90eXBlLmRlc3Ryb3kuY2FsbCh0aGlzKTtcblxuICAgIHRoaXMuZGVzdHJveVBsdWdpbnMoKTtcblxuICAgIHRoaXMuYXR0cmliU3RhdGUgPSBudWxsO1xuXG4gICAgdGhpcy50ZW1wQXR0cmliU3RhdGUgPSBudWxsO1xufTtcbiIsInZhciBXZWJHTE1hbmFnZXIgPSByZXF1aXJlKCcuL1dlYkdMTWFuYWdlcicpLFxuICAgIHV0aWxzID0gcmVxdWlyZSgnLi4vLi4vLi4vdXRpbHMnKTtcblxuLyoqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcn0gVGhlIHJlbmRlcmVyIHRoaXMgbWFuYWdlciB3b3JrcyBmb3IuXG4gKi9cbmZ1bmN0aW9uIFdlYkdMTWFza01hbmFnZXIocmVuZGVyZXIpXG57XG4gICAgV2ViR0xNYW5hZ2VyLmNhbGwodGhpcywgcmVuZGVyZXIpO1xuICAgIHRoaXMuc3RlbmNpbE1hc2tTdGFjayA9IG51bGw7XG59XG5cbldlYkdMTWFza01hbmFnZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShXZWJHTE1hbmFnZXIucHJvdG90eXBlKTtcbldlYkdMTWFza01hbmFnZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gV2ViR0xNYXNrTWFuYWdlcjtcbm1vZHVsZS5leHBvcnRzID0gV2ViR0xNYXNrTWFuYWdlcjtcblxuLyoqXG4gKiBDaGFuZ2VzIHRoZSBtYXNrIHN0YWNrIHRoYXQgaXMgdXNlZCBieSB0aGlzIG1hbmFnZXIuXG4gKlxuICogQHBhcmFtIHN0ZW5jaWxNYXNrU3RhY2sge1BJWEkuU3RlbmNpbE1hc2tTdGFja30gVGhlIG1hc2sgc3RhY2tcbiAqL1xuV2ViR0xNYXNrTWFuYWdlci5wcm90b3R5cGUuc2V0TWFza1N0YWNrID0gZnVuY3Rpb24gKCBzdGVuY2lsTWFza1N0YWNrIClcbntcbiAgICB0aGlzLnN0ZW5jaWxNYXNrU3RhY2sgPSBzdGVuY2lsTWFza1N0YWNrO1xuXG4gICAgdmFyIGdsID0gdGhpcy5yZW5kZXJlci5nbDtcblxuICAgIGlmIChzdGVuY2lsTWFza1N0YWNrLnN0ZW5jaWxTdGFjay5sZW5ndGggPT09IDApXG4gICAge1xuICAgICAgICBnbC5kaXNhYmxlKGdsLlNURU5DSUxfVEVTVCk7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIGdsLmVuYWJsZShnbC5TVEVOQ0lMX1RFU1QpO1xuICAgIH1cbn07XG5cbi8qKlxuICogQXBwbGllcyB0aGUgTWFzayBhbmQgYWRkcyBpdCB0byB0aGUgY3VycmVudCBmaWx0ZXIgc3RhY2suIEBhbHZpblxuICpcbiAqIEBwYXJhbSBncmFwaGljcyB7UElYSS5HcmFwaGljc31cbiAqIEBwYXJhbSB3ZWJHTERhdGEge2FueVtdfVxuICovXG5XZWJHTE1hc2tNYW5hZ2VyLnByb3RvdHlwZS5wdXNoU3RlbmNpbCA9IGZ1bmN0aW9uIChncmFwaGljcywgd2ViR0xEYXRhKVxue1xuICAgIHRoaXMucmVuZGVyZXIuX2FjdGl2ZVJlbmRlclRhcmdldC5hdHRhY2hTdGVuY2lsQnVmZmVyKCk7XG5cbiAgICB2YXIgZ2wgPSB0aGlzLnJlbmRlcmVyLmdsLFxuICAgICAgICBzbXMgPSB0aGlzLnN0ZW5jaWxNYXNrU3RhY2s7XG5cbiAgICB0aGlzLmJpbmRHcmFwaGljcyhncmFwaGljcywgd2ViR0xEYXRhKTtcblxuICAgIGlmIChzbXMuc3RlbmNpbFN0YWNrLmxlbmd0aCA9PT0gMClcbiAgICB7XG4gICAgICAgIGdsLmVuYWJsZShnbC5TVEVOQ0lMX1RFU1QpO1xuICAgICAgICBnbC5jbGVhcihnbC5TVEVOQ0lMX0JVRkZFUl9CSVQpO1xuICAgICAgICBzbXMucmV2ZXJzZSA9IHRydWU7XG4gICAgICAgIHNtcy5jb3VudCA9IDA7XG4gICAgfVxuXG4gICAgc21zLnN0ZW5jaWxTdGFjay5wdXNoKHdlYkdMRGF0YSk7XG5cbiAgICB2YXIgbGV2ZWwgPSBzbXMuY291bnQ7XG5cbiAgICBnbC5jb2xvck1hc2soZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UpO1xuXG4gICAgZ2wuc3RlbmNpbEZ1bmMoZ2wuQUxXQVlTLDAsMHhGRik7XG4gICAgZ2wuc3RlbmNpbE9wKGdsLktFRVAsZ2wuS0VFUCxnbC5JTlZFUlQpO1xuXG4gICAgLy8gZHJhdyB0aGUgdHJpYW5nbGUgc3RyaXAhXG5cbiAgICBpZiAod2ViR0xEYXRhLm1vZGUgPT09IDEpXG4gICAge1xuICAgICAgICBnbC5kcmF3RWxlbWVudHMoZ2wuVFJJQU5HTEVfRkFOLCAgd2ViR0xEYXRhLmluZGljZXMubGVuZ3RoIC0gNCwgZ2wuVU5TSUdORURfU0hPUlQsIDAgKTtcblxuICAgICAgICBpZiAoc21zLnJldmVyc2UpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGdsLnN0ZW5jaWxGdW5jKGdsLkVRVUFMLCAweEZGIC0gbGV2ZWwsIDB4RkYpO1xuICAgICAgICAgICAgZ2wuc3RlbmNpbE9wKGdsLktFRVAsZ2wuS0VFUCxnbC5ERUNSKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgIHtcbiAgICAgICAgICAgIGdsLnN0ZW5jaWxGdW5jKGdsLkVRVUFMLGxldmVsLCAweEZGKTtcbiAgICAgICAgICAgIGdsLnN0ZW5jaWxPcChnbC5LRUVQLGdsLktFRVAsZ2wuSU5DUik7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBkcmF3IGEgcXVhZCB0byBpbmNyZW1lbnQuLlxuICAgICAgICBnbC5kcmF3RWxlbWVudHMoZ2wuVFJJQU5HTEVfRkFOLCA0LCBnbC5VTlNJR05FRF9TSE9SVCwgKCB3ZWJHTERhdGEuaW5kaWNlcy5sZW5ndGggLSA0ICkgKiAyICk7XG5cbiAgICAgICAgaWYgKHNtcy5yZXZlcnNlKVxuICAgICAgICB7XG4gICAgICAgICAgICBnbC5zdGVuY2lsRnVuYyhnbC5FUVVBTCwweEZGLShsZXZlbCsxKSwgMHhGRik7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgICBnbC5zdGVuY2lsRnVuYyhnbC5FUVVBTCxsZXZlbCsxLCAweEZGKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHNtcy5yZXZlcnNlID0gIXNtcy5yZXZlcnNlO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICBpZiAoIXNtcy5yZXZlcnNlKVxuICAgICAgICB7XG4gICAgICAgICAgICBnbC5zdGVuY2lsRnVuYyhnbC5FUVVBTCwgMHhGRiAtIGxldmVsLCAweEZGKTtcbiAgICAgICAgICAgIGdsLnN0ZW5jaWxPcChnbC5LRUVQLGdsLktFRVAsZ2wuREVDUik7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgICBnbC5zdGVuY2lsRnVuYyhnbC5FUVVBTCxsZXZlbCwgMHhGRik7XG4gICAgICAgICAgICBnbC5zdGVuY2lsT3AoZ2wuS0VFUCxnbC5LRUVQLGdsLklOQ1IpO1xuICAgICAgICB9XG5cbiAgICAgICAgZ2wuZHJhd0VsZW1lbnRzKGdsLlRSSUFOR0xFX1NUUklQLCAgd2ViR0xEYXRhLmluZGljZXMubGVuZ3RoLCBnbC5VTlNJR05FRF9TSE9SVCwgMCApO1xuXG4gICAgICAgIGlmICghc21zLnJldmVyc2UpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGdsLnN0ZW5jaWxGdW5jKGdsLkVRVUFMLDB4RkYtKGxldmVsKzEpLCAweEZGKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgIHtcbiAgICAgICAgICAgIGdsLnN0ZW5jaWxGdW5jKGdsLkVRVUFMLGxldmVsKzEsIDB4RkYpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZ2wuY29sb3JNYXNrKHRydWUsIHRydWUsIHRydWUsIHRydWUpO1xuICAgIGdsLnN0ZW5jaWxPcChnbC5LRUVQLGdsLktFRVAsZ2wuS0VFUCk7XG5cbiAgICBzbXMuY291bnQrKztcbn07XG5cbi8qKlxuICogVE9ETyB0aGlzIGRvZXMgbm90IGJlbG9uZyBoZXJlIVxuICpcbiAqIEBwYXJhbSBncmFwaGljcyB7UElYSS5HcmFwaGljc31cbiAqIEBwYXJhbSB3ZWJHTERhdGEge2FueVtdfVxuICovXG5XZWJHTE1hc2tNYW5hZ2VyLnByb3RvdHlwZS5iaW5kR3JhcGhpY3MgPSBmdW5jdGlvbiAoZ3JhcGhpY3MsIHdlYkdMRGF0YSlcbntcbiAgICAvL2lmICh0aGlzLl9jdXJyZW50R3JhcGhpY3MgPT09IGdyYXBoaWNzKXJldHVybjtcbiAgICB2YXIgZ2wgPSB0aGlzLnJlbmRlcmVyLmdsO1xuXG4gICAgIC8vIGJpbmQgdGhlIGdyYXBoaWNzIG9iamVjdC4uXG4gICAgdmFyIHNoYWRlciA9IHRoaXMucmVuZGVyZXIucGx1Z2lucy5ncmFwaGljcy5wcmltaXRpdmVTaGFkZXI7XG5cbiAgICBpZiAod2ViR0xEYXRhLm1vZGUgPT09IDEpXG4gICAge1xuICAgICAgICAvKlxuICAgICAgICBzaGFkZXIgPSB0aGlzLnJlbmRlcmVyLnNoYWRlck1hbmFnZXIuY29tcGxleFByaW1pdGl2ZVNoYWRlcjtcblxuICAgICAgICB0aGlzLnJlbmRlcmVyLnNoYWRlck1hbmFnZXIuc2V0U2hhZGVyKHNoYWRlcik7XG5cbiAgICAgICAgZ2wudW5pZm9ybU1hdHJpeDNmdihzaGFkZXIudW5pZm9ybXMudHJhbnNsYXRpb25NYXRyaXguX2xvY2F0aW9uLCBmYWxzZSwgZ3JhcGhpY3Mud29ybGRUcmFuc2Zvcm0udG9BcnJheSh0cnVlKSk7XG5cbiAgICAgICAgZ2wudW5pZm9ybU1hdHJpeDNmdihzaGFkZXIudW5pZm9ybXMucHJvamVjdGlvbk1hdHJpeC5fbG9jYXRpb24sIGZhbHNlLCB0aGlzLnJlbmRlcmVyLmN1cnJlbnRSZW5kZXJUYXJnZXQucHJvamVjdGlvbk1hdHJpeC50b0FycmF5KHRydWUpKTtcblxuICAgICAgICBnbC51bmlmb3JtM2Z2KHNoYWRlci51bmlmb3Jtcy50aW50Ll9sb2NhdGlvbiwgdXRpbHMuaGV4MnJnYihncmFwaGljcy50aW50KSk7XG5cbiAgICAgICAgZ2wudW5pZm9ybTNmdihzaGFkZXIudW5pZm9ybXMuY29sb3IuX2xvY2F0aW9uLCB3ZWJHTERhdGEuY29sb3IpO1xuXG4gICAgICAgIGdsLnVuaWZvcm0xZihzaGFkZXIudW5pZm9ybXMuYWxwaGEuX2xvY2F0aW9uLCBncmFwaGljcy53b3JsZEFscGhhKTtcblxuICAgICAgICBnbC5iaW5kQnVmZmVyKGdsLkFSUkFZX0JVRkZFUiwgd2ViR0xEYXRhLmJ1ZmZlcik7XG5cbiAgICAgICAgZ2wudmVydGV4QXR0cmliUG9pbnRlcihzaGFkZXIuYXR0cmlidXRlcy5hVmVydGV4UG9zaXRpb24sIDIsIGdsLkZMT0FULCBmYWxzZSwgNCAqIDIsIDApO1xuXG4gICAgICAgIC8vIG5vdyBkbyB0aGUgcmVzdC4uXG4gICAgICAgIC8vIHNldCB0aGUgaW5kZXggYnVmZmVyIVxuICAgICAgICBnbC5iaW5kQnVmZmVyKGdsLkVMRU1FTlRfQVJSQVlfQlVGRkVSLCB3ZWJHTERhdGEuaW5kZXhCdWZmZXIpO1xuICAgICovXG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIC8vdGhpcy5yZW5kZXJlci5zaGFkZXJNYW5hZ2VyLmFjdGl2YXRlUHJpbWl0aXZlU2hhZGVyKCk7XG4vLyAgICAgICAgc2hhZGVyID0gdGhpcy5yZW5kZXJlci5zaGFkZXJNYW5hZ2VyLnByaW1pdGl2ZVNoYWRlcjtcbiAgICAgICBcbiAgICAgICAgdGhpcy5yZW5kZXJlci5iaW5kU2hhZGVyKHNoYWRlcilcblxuICAgICAgICBzaGFkZXIudW5pZm9ybXMudHJhbnNsYXRpb25NYXRyaXggPSBncmFwaGljcy53b3JsZFRyYW5zZm9ybS50b0FycmF5KHRydWUpO1xuICAgICAgICBzaGFkZXIudW5pZm9ybXMudGludCA9IHV0aWxzLmhleDJyZ2IoZ3JhcGhpY3MudGludCk7XG4gICAgICAgIHNoYWRlci51bmlmb3Jtcy5hbHBoYSA9IGdyYXBoaWNzLndvcmxkQWxwaGE7XG5cblxuICAgICAgICBnbC5iaW5kQnVmZmVyKGdsLkFSUkFZX0JVRkZFUiwgd2ViR0xEYXRhLmJ1ZmZlcik7XG5cblxuICAgICAgICBzaGFkZXIuYXR0cmlidXRlcy5hVmVydGV4UG9zaXRpb24ucG9pbnRlcihnbC5GTE9BVCwgZmFsc2UsIDQgKiA2LCAwKTtcbiAgICAgICAgc2hhZGVyLmF0dHJpYnV0ZXMuYUNvbG9yLnBvaW50ZXIoZ2wuRkxPQVQsIGZhbHNlLCA0ICogNiwgMiAqIDQpO1xuXG4gICAgICAgIGdsLmVuYWJsZVZlcnRleEF0dHJpYkFycmF5KHNoYWRlci5hdHRyaWJ1dGVzLmFWZXJ0ZXhQb3NpdGlvbi5sb2NhdGlvbik7XG4gICAgICAgIGdsLmVuYWJsZVZlcnRleEF0dHJpYkFycmF5KHNoYWRlci5hdHRyaWJ1dGVzLmFDb2xvci5sb2NhdGlvbik7XG5cbiAgICAgICAgLy8gc2V0IHRoZSBpbmRleCBidWZmZXIhXG4gICAgICAgIGdsLmJpbmRCdWZmZXIoZ2wuRUxFTUVOVF9BUlJBWV9CVUZGRVIsIHdlYkdMRGF0YS5pbmRleEJ1ZmZlcik7XG4vLyAgICAgICAgZ2wuZHJhd0VsZW1lbnRzKGdsLlRSSUFOR0xFX1NUUklQLCAgd2ViR0xEYXRhLmluZGljZXMubGVuZ3RoLCBnbC5VTlNJR05FRF9TSE9SVCwgMCApO1xuXG5cbiAgICAgIC8qICB0aGlzLnJlbmRlcmVyLnNoYWRlck1hbmFnZXIuc2V0U2hhZGVyKHNoYWRlcik7XG5cbiAgICAgICAgZ2wudW5pZm9ybU1hdHJpeDNmdihzaGFkZXIudW5pZm9ybXMudHJhbnNsYXRpb25NYXRyaXguX2xvY2F0aW9uLCBmYWxzZSwgZ3JhcGhpY3Mud29ybGRUcmFuc2Zvcm0udG9BcnJheSh0cnVlKSk7XG5cbiAgICAgICAgZ2wudW5pZm9ybU1hdHJpeDNmdihzaGFkZXIudW5pZm9ybXMucHJvamVjdGlvbk1hdHJpeC5fbG9jYXRpb24sIGZhbHNlLCB0aGlzLnJlbmRlcmVyLmN1cnJlbnRSZW5kZXJUYXJnZXQucHJvamVjdGlvbk1hdHJpeC50b0FycmF5KHRydWUpKTtcblxuICAgICAgICBnbC51bmlmb3JtM2Z2KHNoYWRlci51bmlmb3Jtcy50aW50Ll9sb2NhdGlvbiwgdXRpbHMuaGV4MnJnYihncmFwaGljcy50aW50KSk7XG5cbiAgICAgICAgZ2wudW5pZm9ybTFmKHNoYWRlci51bmlmb3Jtcy5hbHBoYS5fbG9jYXRpb24sIGdyYXBoaWNzLndvcmxkQWxwaGEpO1xuXG4gICAgICAgIGdsLmJpbmRCdWZmZXIoZ2wuQVJSQVlfQlVGRkVSLCB3ZWJHTERhdGEuYnVmZmVyKTtcblxuICAgICAgICBnbC52ZXJ0ZXhBdHRyaWJQb2ludGVyKHNoYWRlci5hdHRyaWJ1dGVzLmFWZXJ0ZXhQb3NpdGlvbiwgMiwgZ2wuRkxPQVQsIGZhbHNlLCA0ICogNiwgMCk7XG4gICAgICAgIGdsLnZlcnRleEF0dHJpYlBvaW50ZXIoc2hhZGVyLmF0dHJpYnV0ZXMuYUNvbG9yLCA0LCBnbC5GTE9BVCwgZmFsc2UsNCAqIDYsIDIgKiA0KTtcblxuICAgICAgICAvLyBzZXQgdGhlIGluZGV4IGJ1ZmZlciFcbiAgICAgICAgZ2wuYmluZEJ1ZmZlcihnbC5FTEVNRU5UX0FSUkFZX0JVRkZFUiwgd2ViR0xEYXRhLmluZGV4QnVmZmVyKTsqL1xuICAgIH1cbn07XG5cbi8qKlxuICogVE9ETyBAYWx2aW5cbiAqIEBwYXJhbSBncmFwaGljcyB7UElYSS5HcmFwaGljc31cbiAqIEBwYXJhbSB3ZWJHTERhdGEge2FueVtdfVxuICovXG5XZWJHTE1hc2tNYW5hZ2VyLnByb3RvdHlwZS5wb3BTdGVuY2lsID0gZnVuY3Rpb24gKGdyYXBoaWNzLCB3ZWJHTERhdGEpXG57XG4gICAgdmFyIGdsID0gdGhpcy5yZW5kZXJlci5nbCxcbiAgICAgICAgc21zID0gdGhpcy5zdGVuY2lsTWFza1N0YWNrO1xuXG4gICAgc21zLnN0ZW5jaWxTdGFjay5wb3AoKTtcblxuICAgIHNtcy5jb3VudC0tO1xuXG4gICAgaWYgKHNtcy5zdGVuY2lsU3RhY2subGVuZ3RoID09PSAwKVxuICAgIHtcbiAgICAgICAgLy8gdGhlIHN0YWNrIGlzIGVtcHR5IVxuICAgICAgICBnbC5kaXNhYmxlKGdsLlNURU5DSUxfVEVTVCk7XG5cbiAgICB9XG4gICAgZWxzZVxuICAgIHtcblxuICAgICAgICB2YXIgbGV2ZWwgPSBzbXMuY291bnQ7XG5cbiAgICAgICAgdGhpcy5iaW5kR3JhcGhpY3MoZ3JhcGhpY3MsIHdlYkdMRGF0YSk7XG5cbiAgICAgICAgZ2wuY29sb3JNYXNrKGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlKTtcblxuICAgICAgICBpZiAod2ViR0xEYXRhLm1vZGUgPT09IDEpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHNtcy5yZXZlcnNlID0gIXNtcy5yZXZlcnNlO1xuXG4gICAgICAgICAgICBpZiAoc21zLnJldmVyc2UpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgZ2wuc3RlbmNpbEZ1bmMoZ2wuRVFVQUwsIDB4RkYgLSAobGV2ZWwrMSksIDB4RkYpO1xuICAgICAgICAgICAgICAgIGdsLnN0ZW5jaWxPcChnbC5LRUVQLGdsLktFRVAsZ2wuSU5DUik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgZ2wuc3RlbmNpbEZ1bmMoZ2wuRVFVQUwsbGV2ZWwrMSwgMHhGRik7XG4gICAgICAgICAgICAgICAgZ2wuc3RlbmNpbE9wKGdsLktFRVAsZ2wuS0VFUCxnbC5ERUNSKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gZHJhdyBhIHF1YWQgdG8gaW5jcmVtZW50Li5cbiAgICAgICAgICAgIGdsLmRyYXdFbGVtZW50cyhnbC5UUklBTkdMRV9GQU4sIDQsIGdsLlVOU0lHTkVEX1NIT1JULCAoIHdlYkdMRGF0YS5pbmRpY2VzLmxlbmd0aCAtIDQgKSAqIDIgKTtcblxuICAgICAgICAgICAgZ2wuc3RlbmNpbEZ1bmMoZ2wuQUxXQVlTLDAsMHhGRik7XG4gICAgICAgICAgICBnbC5zdGVuY2lsT3AoZ2wuS0VFUCxnbC5LRUVQLGdsLklOVkVSVCk7XG5cbiAgICAgICAgICAgIC8vIGRyYXcgdGhlIHRyaWFuZ2xlIHN0cmlwIVxuICAgICAgICAgICAgZ2wuZHJhd0VsZW1lbnRzKGdsLlRSSUFOR0xFX0ZBTiwgIHdlYkdMRGF0YS5pbmRpY2VzLmxlbmd0aCAtIDQsIGdsLlVOU0lHTkVEX1NIT1JULCAwICk7XG5cbiAgICAgICAgICAgIHRoaXMucmVuZGVyZXIuZHJhd0NvdW50ICs9IDI7XG5cbiAgICAgICAgICAgIGlmICghc21zLnJldmVyc2UpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgZ2wuc3RlbmNpbEZ1bmMoZ2wuRVFVQUwsMHhGRi0obGV2ZWwpLCAweEZGKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBnbC5zdGVuY2lsRnVuYyhnbC5FUVVBTCxsZXZlbCwgMHhGRik7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgIHtcbiAgICAgICAgICAvLyAgY29uc29sZS5sb2coXCI8PD4+XCIpXG4gICAgICAgICAgICBpZiAoIXNtcy5yZXZlcnNlKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGdsLnN0ZW5jaWxGdW5jKGdsLkVRVUFMLCAweEZGIC0gKGxldmVsKzEpLCAweEZGKTtcbiAgICAgICAgICAgICAgICBnbC5zdGVuY2lsT3AoZ2wuS0VFUCxnbC5LRUVQLGdsLklOQ1IpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGdsLnN0ZW5jaWxGdW5jKGdsLkVRVUFMLGxldmVsKzEsIDB4RkYpO1xuICAgICAgICAgICAgICAgIGdsLnN0ZW5jaWxPcChnbC5LRUVQLGdsLktFRVAsZ2wuREVDUik7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGdsLmRyYXdFbGVtZW50cyhnbC5UUklBTkdMRV9TVFJJUCwgIHdlYkdMRGF0YS5pbmRpY2VzLmxlbmd0aCwgZ2wuVU5TSUdORURfU0hPUlQsIDAgKTtcblxuICAgICAgICAgICAgdGhpcy5yZW5kZXJlci5kcmF3Q291bnQrKztcblxuICAgICAgICAgICAgaWYgKCFzbXMucmV2ZXJzZSlcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBnbC5zdGVuY2lsRnVuYyhnbC5FUVVBTCwweEZGLShsZXZlbCksIDB4RkYpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGdsLnN0ZW5jaWxGdW5jKGdsLkVRVUFMLGxldmVsLCAweEZGKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGdsLmNvbG9yTWFzayh0cnVlLCB0cnVlLCB0cnVlLCB0cnVlKTtcbiAgICAgICAgZ2wuc3RlbmNpbE9wKGdsLktFRVAsZ2wuS0VFUCxnbC5LRUVQKTtcblxuXG4gICAgfVxufTtcblxuLyoqXG4gKiBEZXN0cm95cyB0aGUgbWFzayBzdGFjay5cbiAqXG4gKi9cbldlYkdMTWFza01hbmFnZXIucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoKVxue1xuICAgIFdlYkdMTWFuYWdlci5wcm90b3R5cGUuZGVzdHJveS5jYWxsKHRoaXMpO1xuXG4gICAgdGhpcy5zdGVuY2lsTWFza1N0YWNrLnN0ZW5jaWxTdGFjayA9IG51bGw7XG59O1xuXG4vKipcbiAqIEFwcGxpZXMgdGhlIE1hc2sgYW5kIGFkZHMgaXQgdG8gdGhlIGN1cnJlbnQgZmlsdGVyIHN0YWNrLlxuICpcbiAqIEBwYXJhbSBtYXNrRGF0YSB7YW55W119IFRoZSBtYXNrIGRhdGEgc3RydWN0dXJlIHRvIHVzZVxuICovXG5XZWJHTE1hc2tNYW5hZ2VyLnByb3RvdHlwZS5wdXNoTWFzayA9IGZ1bmN0aW9uIChtYXNrRGF0YSlcbntcbiAgICB0aGlzLnJlbmRlcmVyLnNldE9iamVjdFJlbmRlcmVyKHRoaXMucmVuZGVyZXIucGx1Z2lucy5ncmFwaGljcyk7XG4gICAgXG4gICAgLy9UT0RPIEZJWFxuICAgIGlmIChtYXNrRGF0YS5kaXJ0eSlcbiAgICB7XG4gICAgICAgIHRoaXMucmVuZGVyZXIucGx1Z2lucy5ncmFwaGljcy51cGRhdGVHcmFwaGljcyhtYXNrRGF0YSwgdGhpcy5yZW5kZXJlci5nbCk7XG4gICAgfVxuXG4gICAgaWYgKCFtYXNrRGF0YS5fd2ViR0xbdGhpcy5yZW5kZXJlci5nbC5pZF0uZGF0YS5sZW5ndGgpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5wdXNoU3RlbmNpbChtYXNrRGF0YSwgbWFza0RhdGEuX3dlYkdMW3RoaXMucmVuZGVyZXIuZ2wuaWRdLmRhdGFbMF0pO1xufTtcblxuLyoqXG4gKiBSZW1vdmVzIHRoZSBsYXN0IGZpbHRlciBmcm9tIHRoZSBmaWx0ZXIgc3RhY2sgYW5kIGRvZXNuJ3QgcmV0dXJuIGl0LlxuICpcbiAqIEBwYXJhbSBtYXNrRGF0YSB7YW55W119XG4gKi9cbldlYkdMTWFza01hbmFnZXIucHJvdG90eXBlLnBvcE1hc2sgPSBmdW5jdGlvbiAobWFza0RhdGEpXG57XG4gICAgdGhpcy5yZW5kZXJlci5zZXRPYmplY3RSZW5kZXJlcih0aGlzLnJlbmRlcmVyLnBsdWdpbnMuZ3JhcGhpY3MpO1xuXG4gICAgdGhpcy5wb3BTdGVuY2lsKG1hc2tEYXRhLCBtYXNrRGF0YS5fd2ViR0xbdGhpcy5yZW5kZXJlci5nbC5pZF0uZGF0YVswXSk7XG59O1xuXG4iLCIvKipcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5XZWJHTFJlbmRlcmVyfSBUaGUgcmVuZGVyZXIgdGhpcyBtYW5hZ2VyIHdvcmtzIGZvci5cbiAqL1xuZnVuY3Rpb24gV2ViR0xNYW5hZ2VyKHJlbmRlcmVyKVxue1xuICAgIC8qKlxuICAgICAqIFRoZSByZW5kZXJlciB0aGlzIG1hbmFnZXIgd29ya3MgZm9yLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5XZWJHTFJlbmRlcmVyfVxuICAgICAqL1xuICAgIHRoaXMucmVuZGVyZXIgPSByZW5kZXJlcjtcblxuICAgIHRoaXMucmVuZGVyZXIub24oJ2NvbnRleHQnLCB0aGlzLm9uQ29udGV4dENoYW5nZSwgdGhpcyk7XG59XG5cbldlYkdMTWFuYWdlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBXZWJHTE1hbmFnZXI7XG5tb2R1bGUuZXhwb3J0cyA9IFdlYkdMTWFuYWdlcjtcblxuLyoqXG4gKiBHZW5lcmljIG1ldGhvZCBjYWxsZWQgd2hlbiB0aGVyZSBpcyBhIFdlYkdMIGNvbnRleHQgY2hhbmdlLlxuICpcbiAqL1xuV2ViR0xNYW5hZ2VyLnByb3RvdHlwZS5vbkNvbnRleHRDaGFuZ2UgPSBmdW5jdGlvbiAoKVxue1xuXHQvLyBkbyBzb21lIGNvZGVzIGluaXQhXG59O1xuXG4vKipcbiAqIEdlbmVyaWMgZGVzdHJveSBtZXRob2RzIHRvIGJlIG92ZXJyaWRkZW4gYnkgdGhlIHN1YmNsYXNzXG4gKlxuICovXG5XZWJHTE1hbmFnZXIucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoKVxue1xuICAgIHRoaXMucmVuZGVyZXIub2ZmKCdjb250ZXh0JywgdGhpcy5vbkNvbnRleHRDaGFuZ2UsIHRoaXMpO1xuXG4gICAgdGhpcy5yZW5kZXJlciA9IG51bGw7XG59O1xuIiwidmFyIFNoYWRlciA9IHJlcXVpcmUoJy4vU2hhZGVyJyk7XG5cbi8qKlxuICogVGhpcyBzaGFkZXIgaXMgdXNlZCB0byBkcmF3IGNvbXBsZXggcHJpbWl0aXZlIHNoYXBlcyBmb3Ige0BsaW5rIFBJWEkuR3JhcGhpY3N9LlxuICpcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqIEBleHRlbmRzIFBJWEkuU2hhZGVyXG4gKiBAcGFyYW0gc2hhZGVyTWFuYWdlciB7UElYSS5TaGFkZXJNYW5hZ2VyfSBUaGUgd2ViZ2wgc2hhZGVyIG1hbmFnZXIgdGhpcyBzaGFkZXIgd29ya3MgZm9yLlxuICovXG5mdW5jdGlvbiBDb21wbGV4UHJpbWl0aXZlU2hhZGVyKHNoYWRlck1hbmFnZXIpXG57XG4gICAgU2hhZGVyLmNhbGwodGhpcyxcbiAgICAgICAgc2hhZGVyTWFuYWdlcixcbiAgICAgICAgLy8gdmVydGV4IHNoYWRlclxuICAgICAgICBbXG4gICAgICAgICAgICAnYXR0cmlidXRlIHZlYzIgYVZlcnRleFBvc2l0aW9uOycsXG5cbiAgICAgICAgICAgICd1bmlmb3JtIG1hdDMgdHJhbnNsYXRpb25NYXRyaXg7JyxcbiAgICAgICAgICAgICd1bmlmb3JtIG1hdDMgcHJvamVjdGlvbk1hdHJpeDsnLFxuXG4gICAgICAgICAgICAndW5pZm9ybSB2ZWMzIHRpbnQ7JyxcbiAgICAgICAgICAgICd1bmlmb3JtIGZsb2F0IGFscGhhOycsXG4gICAgICAgICAgICAndW5pZm9ybSB2ZWMzIGNvbG9yOycsXG5cbiAgICAgICAgICAgICd2YXJ5aW5nIHZlYzQgdkNvbG9yOycsXG5cbiAgICAgICAgICAgICd2b2lkIG1haW4odm9pZCl7JyxcbiAgICAgICAgICAgICcgICBnbF9Qb3NpdGlvbiA9IHZlYzQoKHByb2plY3Rpb25NYXRyaXggKiB0cmFuc2xhdGlvbk1hdHJpeCAqIHZlYzMoYVZlcnRleFBvc2l0aW9uLCAxLjApKS54eSwgMC4wLCAxLjApOycsXG4gICAgICAgICAgICAnICAgdkNvbG9yID0gdmVjNChjb2xvciAqIGFscGhhICogdGludCwgYWxwaGEpOycsLy9cIiAqIHZlYzQodGludCAqIGFscGhhLCBhbHBoYSk7JyxcbiAgICAgICAgICAgICd9J1xuICAgICAgICBdLmpvaW4oJ1xcbicpLFxuICAgICAgICAvLyBmcmFnbWVudCBzaGFkZXJcbiAgICAgICAgW1xuICAgICAgICAgICAgJ3ByZWNpc2lvbiBtZWRpdW1wIGZsb2F0OycsXG5cbiAgICAgICAgICAgICd2YXJ5aW5nIHZlYzQgdkNvbG9yOycsXG5cbiAgICAgICAgICAgICd2b2lkIG1haW4odm9pZCl7JyxcbiAgICAgICAgICAgICcgICBnbF9GcmFnQ29sb3IgPSB2Q29sb3I7JyxcbiAgICAgICAgICAgICd9J1xuICAgICAgICBdLmpvaW4oJ1xcbicpLFxuICAgICAgICAvLyBjdXN0b20gdW5pZm9ybXNcbiAgICAgICAge1xuICAgICAgICAgICAgdGludDogICB7IHR5cGU6ICczZicsIHZhbHVlOiBbMCwgMCwgMF0gfSxcbiAgICAgICAgICAgIGFscGhhOiAgeyB0eXBlOiAnMWYnLCB2YWx1ZTogMCB9LFxuICAgICAgICAgICAgY29sb3I6ICB7IHR5cGU6ICczZicsIHZhbHVlOiBbMCwwLDBdIH0sXG4gICAgICAgICAgICB0cmFuc2xhdGlvbk1hdHJpeDogeyB0eXBlOiAnbWF0MycsIHZhbHVlOiBuZXcgRmxvYXQzMkFycmF5KDkpIH0sXG4gICAgICAgICAgICBwcm9qZWN0aW9uTWF0cml4OiB7IHR5cGU6ICdtYXQzJywgdmFsdWU6IG5ldyBGbG9hdDMyQXJyYXkoOSkgfVxuICAgICAgICB9LFxuICAgICAgICAvLyBhdHRyaWJ1dGVzXG4gICAgICAgIHtcbiAgICAgICAgICAgIGFWZXJ0ZXhQb3NpdGlvbjowXG4gICAgICAgIH1cbiAgICApO1xufVxuXG5Db21wbGV4UHJpbWl0aXZlU2hhZGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoU2hhZGVyLnByb3RvdHlwZSk7XG5Db21wbGV4UHJpbWl0aXZlU2hhZGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IENvbXBsZXhQcmltaXRpdmVTaGFkZXI7XG5tb2R1bGUuZXhwb3J0cyA9IENvbXBsZXhQcmltaXRpdmVTaGFkZXI7XG4iLCJ2YXIgU2hhZGVyID0gcmVxdWlyZSgnLi9TaGFkZXInKTtcblxuLyoqXG4gKiBUaGlzIHNoYWRlciBpcyB1c2VkIHRvIGRyYXcgc2ltcGxlIHByaW1pdGl2ZSBzaGFwZXMgZm9yIHtAbGluayBQSVhJLkdyYXBoaWNzfS5cbiAqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAZXh0ZW5kcyBQSVhJLlNoYWRlclxuICogQHBhcmFtIHNoYWRlck1hbmFnZXIge1NoYWRlck1hbmFnZXJ9IFRoZSB3ZWJnbCBzaGFkZXIgbWFuYWdlciB0aGlzIHNoYWRlciB3b3JrcyBmb3IuXG4gKi9cbmZ1bmN0aW9uIFByaW1pdGl2ZVNoYWRlcihzaGFkZXJNYW5hZ2VyKVxue1xuICAgIFNoYWRlci5jYWxsKHRoaXMsXG4gICAgICAgIHNoYWRlck1hbmFnZXIsXG4gICAgICAgIC8vIHZlcnRleCBzaGFkZXJcbiAgICAgICAgW1xuICAgICAgICAgICAgJ2F0dHJpYnV0ZSB2ZWMyIGFWZXJ0ZXhQb3NpdGlvbjsnLFxuICAgICAgICAgICAgJ2F0dHJpYnV0ZSB2ZWM0IGFDb2xvcjsnLFxuXG4gICAgICAgICAgICAndW5pZm9ybSBtYXQzIHRyYW5zbGF0aW9uTWF0cml4OycsXG4gICAgICAgICAgICAndW5pZm9ybSBtYXQzIHByb2plY3Rpb25NYXRyaXg7JyxcblxuICAgICAgICAgICAgJ3VuaWZvcm0gZmxvYXQgYWxwaGE7JyxcbiAgICAgICAgICAgICd1bmlmb3JtIGZsb2F0IGZsaXBZOycsXG4gICAgICAgICAgICAndW5pZm9ybSB2ZWMzIHRpbnQ7JyxcblxuICAgICAgICAgICAgJ3ZhcnlpbmcgdmVjNCB2Q29sb3I7JyxcblxuICAgICAgICAgICAgJ3ZvaWQgbWFpbih2b2lkKXsnLFxuICAgICAgICAgICAgJyAgIGdsX1Bvc2l0aW9uID0gdmVjNCgocHJvamVjdGlvbk1hdHJpeCAqIHRyYW5zbGF0aW9uTWF0cml4ICogdmVjMyhhVmVydGV4UG9zaXRpb24sIDEuMCkpLnh5LCAwLjAsIDEuMCk7JyxcbiAgICAgICAgICAgICcgICB2Q29sb3IgPSBhQ29sb3IgKiB2ZWM0KHRpbnQgKiBhbHBoYSwgYWxwaGEpOycsXG4gICAgICAgICAgICAnfSdcbiAgICAgICAgXS5qb2luKCdcXG4nKSxcbiAgICAgICAgLy8gZnJhZ21lbnQgc2hhZGVyXG4gICAgICAgIFtcbiAgICAgICAgICAgICdwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDsnLFxuXG4gICAgICAgICAgICAndmFyeWluZyB2ZWM0IHZDb2xvcjsnLFxuXG4gICAgICAgICAgICAndm9pZCBtYWluKHZvaWQpeycsXG4gICAgICAgICAgICAnICAgZ2xfRnJhZ0NvbG9yID0gdkNvbG9yOycsXG4gICAgICAgICAgICAnfSdcbiAgICAgICAgXS5qb2luKCdcXG4nKSxcbiAgICAgICAgLy8gY3VzdG9tIHVuaWZvcm1zXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRpbnQ6ICAgeyB0eXBlOiAnM2YnLCB2YWx1ZTogWzAsIDAsIDBdIH0sXG4gICAgICAgICAgICBhbHBoYTogIHsgdHlwZTogJzFmJywgdmFsdWU6IDAgfSxcbiAgICAgICAgICAgIHRyYW5zbGF0aW9uTWF0cml4OiB7IHR5cGU6ICdtYXQzJywgdmFsdWU6IG5ldyBGbG9hdDMyQXJyYXkoOSkgfSxcbiAgICAgICAgICAgIHByb2plY3Rpb25NYXRyaXg6IHsgdHlwZTogJ21hdDMnLCB2YWx1ZTogbmV3IEZsb2F0MzJBcnJheSg5KSB9XG4gICAgICAgIH0sXG4gICAgICAgIC8vIGN1c3RvbSBhdHRyaWJ1dGVzXG4gICAgICAgIHtcbiAgICAgICAgICAgIGFWZXJ0ZXhQb3NpdGlvbjowLFxuICAgICAgICAgICAgYUNvbG9yOjBcbiAgICAgICAgfVxuICAgICk7XG59XG5cblByaW1pdGl2ZVNoYWRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFNoYWRlci5wcm90b3R5cGUpO1xuUHJpbWl0aXZlU2hhZGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFByaW1pdGl2ZVNoYWRlcjtcbm1vZHVsZS5leHBvcnRzID0gUHJpbWl0aXZlU2hhZGVyO1xuIiwiLypnbG9iYWwgY29uc29sZSAqL1xudmFyIHV0aWxzID0gcmVxdWlyZSgnLi4vLi4vLi4vdXRpbHMnKTtcblxuLyoqXG4gKiBCYXNlIHNoYWRlciBjbGFzcyBmb3IgUElYSSBtYW5hZ2VkIHNoYWRlcnMuXG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIHNoYWRlck1hbmFnZXIge1BJWEkuU2hhZGVyTWFuYWdlcn0gVGhlIHdlYmdsIHNoYWRlciBtYW5hZ2VyIHRoaXMgc2hhZGVyIHdvcmtzIGZvci5cbiAqIEBwYXJhbSBbdmVydGV4U3JjXSB7c3RyaW5nfSBUaGUgc291cmNlIG9mIHRoZSB2ZXJ0ZXggc2hhZGVyLlxuICogQHBhcmFtIFtmcmFnbWVudFNyY10ge3N0cmluZ30gVGhlIHNvdXJjZSBvZiB0aGUgZnJhZ21lbnQgc2hhZGVyLlxuICogQHBhcmFtIFt1bmlmb3Jtc10ge29iamVjdH0gVW5pZm9ybXMgZm9yIHRoaXMgc2hhZGVyLlxuICogQHBhcmFtIFthdHRyaWJ1dGVzXSB7b2JqZWN0fSBBdHRyaWJ1dGVzIGZvciB0aGlzIHNoYWRlci5cbiAqL1xuZnVuY3Rpb24gU2hhZGVyKHNoYWRlck1hbmFnZXIsIHZlcnRleFNyYywgZnJhZ21lbnRTcmMsIHVuaWZvcm1zLCBhdHRyaWJ1dGVzKVxue1xuICAgIGlmICghdmVydGV4U3JjIHx8ICFmcmFnbWVudFNyYylcbiAgICB7XG4gICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1BpeGkuanMgRXJyb3IuIFNoYWRlciByZXF1aXJlcyB2ZXJ0ZXhTcmMgYW5kIGZyYWdtZW50U3JjJyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQSB1bmlxdWUgaWRcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQHJlYWRvbmx5XG4gICAgICovXG4gICAgdGhpcy51aWQgPSB1dGlscy51aWQoKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBjdXJyZW50IFdlYkdMIGRyYXdpbmcgY29udGV4dFxuICAgICAqIEBtZW1iZXIge1dlYkdMUmVuZGVyaW5nQ29udGV4dH1cbiAgICAgKiBAcmVhZG9ubHlcbiAgICAgKi9cbiAgICB0aGlzLmdsID0gc2hhZGVyTWFuYWdlci5yZW5kZXJlci5nbDtcblxuICAgIC8vVE9ETyBtYXliZSB3ZSBzaG91bGQgcGFzcyByZW5kZXJlciByYXRoZXIgdGhhbiBzaGFkZXIgbWFuZ2VyPz8gZm9vZCBmb3IgdGhvdWdodC4uXG4gICAgdGhpcy5zaGFkZXJNYW5hZ2VyID0gc2hhZGVyTWFuYWdlcjtcblxuICAgIC8qKlxuICAgICAqIFRoZSBXZWJHTCBwcm9ncmFtLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7V2ViR0xQcm9ncmFtfVxuICAgICAqIEByZWFkb25seVxuICAgICAqL1xuICAgIHRoaXMucHJvZ3JhbSA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgdW5pZm9ybXMgYXMgYW4gb2JqZWN0XG4gICAgICogQG1lbWJlciB7b2JqZWN0fVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy51bmlmb3JtcyA9IHVuaWZvcm1zIHx8IHt9O1xuXG4gICAgLyoqXG4gICAgICogVGhlIGF0dHJpYnV0ZXMgYXMgYW4gb2JqZWN0XG4gICAgICogQG1lbWJlciB7b2JqZWN0fVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5hdHRyaWJ1dGVzID0gYXR0cmlidXRlcyB8fCB7fTtcblxuICAgIC8qKlxuICAgICAqIEludGVybmFsIHRleHR1cmUgY291bnRlclxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMudGV4dHVyZUNvdW50ID0gMTtcblxuICAgIC8qKlxuICAgICAqIFRoZSB2ZXJ0ZXggc2hhZGVyIGFzIGFuIGFycmF5IG9mIHN0cmluZ3NcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge3N0cmluZ31cbiAgICAgKi9cbiAgICB0aGlzLnZlcnRleFNyYyA9IHZlcnRleFNyYztcblxuICAgIC8qKlxuICAgICAqIFRoZSBmcmFnbWVudCBzaGFkZXIgYXMgYW4gYXJyYXkgb2Ygc3RyaW5nc1xuICAgICAqXG4gICAgICogQG1lbWJlciB7c3RyaW5nfVxuICAgICAqL1xuICAgIHRoaXMuZnJhZ21lbnRTcmMgPSBmcmFnbWVudFNyYztcblxuICAgIHRoaXMuaW5pdCgpO1xufVxuXG5TaGFkZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gU2hhZGVyO1xubW9kdWxlLmV4cG9ydHMgPSBTaGFkZXI7XG5cbi8qKlxuICogQ3JlYXRlcyB0aGUgc2hhZGVyIGFuZCB1c2VzIGl0XG4gKlxuICovXG5TaGFkZXIucHJvdG90eXBlLmluaXQgPSBmdW5jdGlvbiAoKVxue1xuICAgIHRoaXMuY29tcGlsZSgpO1xuXG4gICAgdGhpcy5nbC51c2VQcm9ncmFtKHRoaXMucHJvZ3JhbSk7XG5cbiAgICB0aGlzLmNhY2hlVW5pZm9ybUxvY2F0aW9ucyhPYmplY3Qua2V5cyh0aGlzLnVuaWZvcm1zKSk7XG4gICAgdGhpcy5jYWNoZUF0dHJpYnV0ZUxvY2F0aW9ucyhPYmplY3Qua2V5cyh0aGlzLmF0dHJpYnV0ZXMpKTtcbn07XG5cbi8qKlxuICogQ2FjaGVzIHRoZSBsb2NhdGlvbnMgb2YgdGhlIHVuaWZvcm0gZm9yIHJldXNlLlxuICpcbiAqIEBwYXJhbSBrZXlzIHtzdHJpbmd9IHRoZSB1bmlmb3JtcyB0byBjYWNoZVxuICovXG5TaGFkZXIucHJvdG90eXBlLmNhY2hlVW5pZm9ybUxvY2F0aW9ucyA9IGZ1bmN0aW9uIChrZXlzKVxue1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7ICsraSlcbiAgICB7XG4gICAgICAgIHRoaXMudW5pZm9ybXNba2V5c1tpXV0uX2xvY2F0aW9uID0gdGhpcy5nbC5nZXRVbmlmb3JtTG9jYXRpb24odGhpcy5wcm9ncmFtLCBrZXlzW2ldKTtcbiAgICB9XG59O1xuXG4vKipcbiAqIENhY2hlcyB0aGUgbG9jYXRpb25zIG9mIHRoZSBhdHRyaWJ1dGUgZm9yIHJldXNlLlxuICpcbiAqIEBwYXJhbSBrZXlzIHtzdHJpbmd9IHRoZSBhdHRyaWJ1dGVzIHRvIGNhY2hlXG4gKi9cblNoYWRlci5wcm90b3R5cGUuY2FjaGVBdHRyaWJ1dGVMb2NhdGlvbnMgPSBmdW5jdGlvbiAoa2V5cylcbntcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyArK2kpXG4gICAge1xuICAgICAgICB0aGlzLmF0dHJpYnV0ZXNba2V5c1tpXV0gPSB0aGlzLmdsLmdldEF0dHJpYkxvY2F0aW9uKHRoaXMucHJvZ3JhbSwga2V5c1tpXSk7XG4gICAgfVxuXG4gICAgLy8gVE9ETzogQ2hlY2sgaWYgdGhpcyBpcyBuZWVkZWQgYW55bW9yZS4uLlxuXG4gICAgLy8gQmVnaW4gd29yc3QgaGFjayBldmEgLy9cblxuICAgIC8vIFdIWT8/PyBPTkxZIG9uIG15IGNocm9tZSBwaXhlbCB0aGUgbGluZSBhYm92ZSByZXR1cm5zIC0xIHdoZW4gdXNpbmcgZmlsdGVycz9cbiAgICAvLyBtYXliZSBpdHMgc29tZXRoaW5nIHRvIGRvIHdpdGggdGhlIGN1cnJlbnQgc3RhdGUgb2YgdGhlIGdsIGNvbnRleHQuXG4gICAgLy8gSSdtIGNvbnZpbmNlZCB0aGlzIGlzIGEgYnVnIGluIHRoZSBjaHJvbWUgYnJvd3NlciBhcyB0aGVyZSBpcyBOTyByZWFzb24gd2h5IHRoaXMgc2hvdWxkIGJlIHJldHVybmluZyAtMSBlc3BlY2lhbGx5IGFzIGl0IG9ubHkgbWFuaWZlc3RzIG9uIG15IGNocm9tZSBwaXhlbFxuICAgIC8vIElmIHRoZXJlcyBhbnkgd2ViR0wgcGVvcGxlIHRoYXQga25vdyB3aHkgY291bGQgaGFwcGVuIHBsZWFzZSBoZWxwIDopXG4gICAgLy8gaWYgKHRoaXMuYXR0cmlidXRlcy5hQ29sb3IgPT09IC0xKXtcbiAgICAvLyAgICAgdGhpcy5hdHRyaWJ1dGVzLmFDb2xvciA9IDI7XG4gICAgLy8gfVxuXG4gICAgLy8gRW5kIHdvcnN0IGhhY2sgZXZhIC8vXG59O1xuXG4vKipcbiAqIEF0dGFjaGVzIHRoZSBzaGFkZXJzIGFuZCBjcmVhdGVzIHRoZSBwcm9ncmFtLlxuICpcbiAqIEByZXR1cm4ge1dlYkdMUHJvZ3JhbX1cbiAqL1xuU2hhZGVyLnByb3RvdHlwZS5jb21waWxlID0gZnVuY3Rpb24gKClcbntcbiAgICB2YXIgZ2wgPSB0aGlzLmdsO1xuXG4gICAgdmFyIGdsVmVydFNoYWRlciA9IHRoaXMuX2dsQ29tcGlsZShnbC5WRVJURVhfU0hBREVSLCB0aGlzLnZlcnRleFNyYyk7XG4gICAgdmFyIGdsRnJhZ1NoYWRlciA9IHRoaXMuX2dsQ29tcGlsZShnbC5GUkFHTUVOVF9TSEFERVIsIHRoaXMuZnJhZ21lbnRTcmMpO1xuXG4gICAgdmFyIHByb2dyYW0gPSBnbC5jcmVhdGVQcm9ncmFtKCk7XG5cbiAgICBnbC5hdHRhY2hTaGFkZXIocHJvZ3JhbSwgZ2xWZXJ0U2hhZGVyKTtcbiAgICBnbC5hdHRhY2hTaGFkZXIocHJvZ3JhbSwgZ2xGcmFnU2hhZGVyKTtcbiAgICBnbC5saW5rUHJvZ3JhbShwcm9ncmFtKTtcblxuICAgIC8vIGlmIGxpbmtpbmcgZmFpbHMsIHRoZW4gbG9nIGFuZCBjbGVhbnVwXG4gICAgaWYgKCFnbC5nZXRQcm9ncmFtUGFyYW1ldGVyKHByb2dyYW0sIGdsLkxJTktfU1RBVFVTKSlcbiAgICB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ1BpeGkuanMgRXJyb3I6IENvdWxkIG5vdCBpbml0aWFsaXplIHNoYWRlci4nKTtcbiAgICAgICAgY29uc29sZS5lcnJvcignZ2wuVkFMSURBVEVfU1RBVFVTJywgZ2wuZ2V0UHJvZ3JhbVBhcmFtZXRlcihwcm9ncmFtLCBnbC5WQUxJREFURV9TVEFUVVMpKTtcbiAgICAgICAgY29uc29sZS5lcnJvcignZ2wuZ2V0RXJyb3IoKScsIGdsLmdldEVycm9yKCkpO1xuXG4gICAgICAgIC8vIGlmIHRoZXJlIGlzIGEgcHJvZ3JhbSBpbmZvIGxvZywgbG9nIGl0XG4gICAgICAgIGlmIChnbC5nZXRQcm9ncmFtSW5mb0xvZyhwcm9ncmFtKSAhPT0gJycpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignUGl4aS5qcyBXYXJuaW5nOiBnbC5nZXRQcm9ncmFtSW5mb0xvZygpJywgZ2wuZ2V0UHJvZ3JhbUluZm9Mb2cocHJvZ3JhbSkpO1xuICAgICAgICB9XG5cbiAgICAgICAgZ2wuZGVsZXRlUHJvZ3JhbShwcm9ncmFtKTtcbiAgICAgICAgcHJvZ3JhbSA9IG51bGw7XG4gICAgfVxuXG4gICAgLy8gY2xlYW4gdXAgc29tZSBzaGFkZXJzXG4gICAgZ2wuZGVsZXRlU2hhZGVyKGdsVmVydFNoYWRlcik7XG4gICAgZ2wuZGVsZXRlU2hhZGVyKGdsRnJhZ1NoYWRlcik7XG5cbiAgICByZXR1cm4gKHRoaXMucHJvZ3JhbSA9IHByb2dyYW0pO1xufTtcblxuLyoqXG4qIEFkZHMgYSBuZXcgdW5pZm9ybVxuKlxuKiBAcGFyYW0gdW5pZm9ybSB7b2JqZWN0fSB0aGUgbmV3IHVuaWZvcm0gdG8gYXR0YWNoXG4qL1xuU2hhZGVyLnByb3RvdHlwZS5zeW5jVW5pZm9ybSA9IGZ1bmN0aW9uICh1bmlmb3JtKVxue1xuICAgIHZhciBsb2NhdGlvbiA9IHVuaWZvcm0uX2xvY2F0aW9uLFxuICAgICAgICB2YWx1ZSA9IHVuaWZvcm0udmFsdWUsXG4gICAgICAgIGdsID0gdGhpcy5nbCxcbiAgICAgICAgaSwgaWw7XG5cbiAgICBzd2l0Y2ggKHVuaWZvcm0udHlwZSlcbiAgICB7XG4gICAgICAgIGNhc2UgJ2InOlxuICAgICAgICBjYXNlICdib29sJzpcbiAgICAgICAgY2FzZSAnYm9vbGVhbic6XG4gICAgICAgICAgICBnbC51bmlmb3JtMWkobG9jYXRpb24sIHZhbHVlID8gMSA6IDApO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLy8gc2luZ2xlIGludCB2YWx1ZVxuICAgICAgICBjYXNlICdpJzpcbiAgICAgICAgY2FzZSAnMWknOlxuICAgICAgICAgICAgZ2wudW5pZm9ybTFpKGxvY2F0aW9uLCB2YWx1ZSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAvLyBzaW5nbGUgZmxvYXQgdmFsdWVcbiAgICAgICAgY2FzZSAnZic6XG4gICAgICAgIGNhc2UgJzFmJzpcbiAgICAgICAgICAgIGdsLnVuaWZvcm0xZihsb2NhdGlvbiwgdmFsdWUpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLy8gRmxvYXQzMkFycmF5KDIpIG9yIEpTIEFycnJheVxuICAgICAgICBjYXNlICcyZic6XG4gICAgICAgICAgICBnbC51bmlmb3JtMmYobG9jYXRpb24sIHZhbHVlWzBdLCB2YWx1ZVsxXSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAvLyBGbG9hdDMyQXJyYXkoMykgb3IgSlMgQXJycmF5XG4gICAgICAgIGNhc2UgJzNmJzpcbiAgICAgICAgICAgIGdsLnVuaWZvcm0zZihsb2NhdGlvbiwgdmFsdWVbMF0sIHZhbHVlWzFdLCB2YWx1ZVsyXSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAvLyBGbG9hdDMyQXJyYXkoNCkgb3IgSlMgQXJycmF5XG4gICAgICAgIGNhc2UgJzRmJzpcbiAgICAgICAgICAgIGdsLnVuaWZvcm00Zihsb2NhdGlvbiwgdmFsdWVbMF0sIHZhbHVlWzFdLCB2YWx1ZVsyXSwgdmFsdWVbM10pO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLy8gYSAyRCBQb2ludCBvYmplY3RcbiAgICAgICAgY2FzZSAndjInOlxuICAgICAgICAgICAgZ2wudW5pZm9ybTJmKGxvY2F0aW9uLCB2YWx1ZS54LCB2YWx1ZS55KTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIC8vIGEgM0QgUG9pbnQgb2JqZWN0XG4gICAgICAgIGNhc2UgJ3YzJzpcbiAgICAgICAgICAgIGdsLnVuaWZvcm0zZihsb2NhdGlvbiwgdmFsdWUueCwgdmFsdWUueSwgdmFsdWUueik7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAvLyBhIDREIFBvaW50IG9iamVjdFxuICAgICAgICBjYXNlICd2NCc6XG4gICAgICAgICAgICBnbC51bmlmb3JtNGYobG9jYXRpb24sIHZhbHVlLngsIHZhbHVlLnksIHZhbHVlLnosIHZhbHVlLncpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLy8gSW50MzJBcnJheSBvciBKUyBBcnJheVxuICAgICAgICBjYXNlICcxaXYnOlxuICAgICAgICAgICAgZ2wudW5pZm9ybTFpdihsb2NhdGlvbiwgdmFsdWUpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLy8gSW50MzJBcnJheSBvciBKUyBBcnJheVxuICAgICAgICBjYXNlICcyaXYnOlxuICAgICAgICAgICAgZ2wudW5pZm9ybTJpdihsb2NhdGlvbiwgdmFsdWUpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLy8gSW50MzJBcnJheSBvciBKUyBBcnJheVxuICAgICAgICBjYXNlICczaXYnOlxuICAgICAgICAgICAgZ2wudW5pZm9ybTNpdihsb2NhdGlvbiwgdmFsdWUpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLy8gSW50MzJBcnJheSBvciBKUyBBcnJheVxuICAgICAgICBjYXNlICc0aXYnOlxuICAgICAgICAgICAgZ2wudW5pZm9ybTRpdihsb2NhdGlvbiwgdmFsdWUpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLy8gRmxvYXQzMkFycmF5IG9yIEpTIEFycmF5XG4gICAgICAgIGNhc2UgJzFmdic6XG4gICAgICAgICAgICBnbC51bmlmb3JtMWZ2KGxvY2F0aW9uLCB2YWx1ZSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAvLyBGbG9hdDMyQXJyYXkgb3IgSlMgQXJyYXlcbiAgICAgICAgY2FzZSAnMmZ2JzpcbiAgICAgICAgICAgIGdsLnVuaWZvcm0yZnYobG9jYXRpb24sIHZhbHVlKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIC8vIEZsb2F0MzJBcnJheSBvciBKUyBBcnJheVxuICAgICAgICBjYXNlICczZnYnOlxuICAgICAgICAgICAgZ2wudW5pZm9ybTNmdihsb2NhdGlvbiwgdmFsdWUpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLy8gRmxvYXQzMkFycmF5IG9yIEpTIEFycmF5XG4gICAgICAgIGNhc2UgJzRmdic6XG4gICAgICAgICAgICBnbC51bmlmb3JtNGZ2KGxvY2F0aW9uLCB2YWx1ZSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAvLyBGbG9hdDMyQXJyYXkgb3IgSlMgQXJyYXlcbiAgICAgICAgY2FzZSAnbTInOlxuICAgICAgICBjYXNlICdtYXQyJzpcbiAgICAgICAgY2FzZSAnTWF0cml4MmZ2JzpcbiAgICAgICAgICAgIGdsLnVuaWZvcm1NYXRyaXgyZnYobG9jYXRpb24sIHVuaWZvcm0udHJhbnNwb3NlLCB2YWx1ZSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAvLyBGbG9hdDMyQXJyYXkgb3IgSlMgQXJyYXlcbiAgICAgICAgY2FzZSAnbTMnOlxuICAgICAgICBjYXNlICdtYXQzJzpcbiAgICAgICAgY2FzZSAnTWF0cml4M2Z2JzpcblxuICAgICAgICAgICAgZ2wudW5pZm9ybU1hdHJpeDNmdihsb2NhdGlvbiwgdW5pZm9ybS50cmFuc3Bvc2UsIHZhbHVlKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIC8vIEZsb2F0MzJBcnJheSBvciBKUyBBcnJheVxuICAgICAgICBjYXNlICdtNCc6XG4gICAgICAgIGNhc2UgJ21hdDQnOlxuICAgICAgICBjYXNlICdNYXRyaXg0ZnYnOlxuICAgICAgICAgICAgZ2wudW5pZm9ybU1hdHJpeDRmdihsb2NhdGlvbiwgdW5pZm9ybS50cmFuc3Bvc2UsIHZhbHVlKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIC8vIGEgQ29sb3IgVmFsdWVcbiAgICAgICAgY2FzZSAnYyc6XG4gICAgICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJylcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB2YWx1ZSA9IHV0aWxzLmhleDJyZ2IodmFsdWUpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBnbC51bmlmb3JtM2YobG9jYXRpb24sIHZhbHVlWzBdLCB2YWx1ZVsxXSwgdmFsdWVbMl0pO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLy8gZmxhdCBhcnJheSBvZiBpbnRlZ2VycyAoSlMgb3IgdHlwZWQgYXJyYXkpXG4gICAgICAgIGNhc2UgJ2l2MSc6XG4gICAgICAgICAgICBnbC51bmlmb3JtMWl2KGxvY2F0aW9uLCB2YWx1ZSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAvLyBmbGF0IGFycmF5IG9mIGludGVnZXJzIHdpdGggMyB4IE4gc2l6ZSAoSlMgb3IgdHlwZWQgYXJyYXkpXG4gICAgICAgIGNhc2UgJ2l2JzpcbiAgICAgICAgICAgIGdsLnVuaWZvcm0zaXYobG9jYXRpb24sIHZhbHVlKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIC8vIGZsYXQgYXJyYXkgb2YgZmxvYXRzIChKUyBvciB0eXBlZCBhcnJheSlcbiAgICAgICAgY2FzZSAnZnYxJzpcbiAgICAgICAgICAgIGdsLnVuaWZvcm0xZnYobG9jYXRpb24sIHZhbHVlKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIC8vIGZsYXQgYXJyYXkgb2YgZmxvYXRzIHdpdGggMyB4IE4gc2l6ZSAoSlMgb3IgdHlwZWQgYXJyYXkpXG4gICAgICAgIGNhc2UgJ2Z2JzpcbiAgICAgICAgICAgIGdsLnVuaWZvcm0zZnYobG9jYXRpb24sIHZhbHVlKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIC8vIGFycmF5IG9mIDJEIFBvaW50IG9iamVjdHNcbiAgICAgICAgY2FzZSAndjJ2JzpcbiAgICAgICAgICAgIGlmICghdW5pZm9ybS5fYXJyYXkpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdW5pZm9ybS5fYXJyYXkgPSBuZXcgRmxvYXQzMkFycmF5KDIgKiB2YWx1ZS5sZW5ndGgpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBmb3IgKGkgPSAwLCBpbCA9IHZhbHVlLmxlbmd0aDsgaSA8IGlsOyArK2kpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdW5pZm9ybS5fYXJyYXlbaSAqIDJdICAgICAgID0gdmFsdWVbaV0ueDtcbiAgICAgICAgICAgICAgICB1bmlmb3JtLl9hcnJheVtpICogMiArIDFdICAgPSB2YWx1ZVtpXS55O1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBnbC51bmlmb3JtMmZ2KGxvY2F0aW9uLCB1bmlmb3JtLl9hcnJheSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAvLyBhcnJheSBvZiAzRCBQb2ludCBvYmplY3RzXG4gICAgICAgIGNhc2UgJ3Yzdic6XG4gICAgICAgICAgICBpZiAoIXVuaWZvcm0uX2FycmF5KVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHVuaWZvcm0uX2FycmF5ID0gbmV3IEZsb2F0MzJBcnJheSgzICogdmFsdWUubGVuZ3RoKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZm9yIChpID0gMCwgaWwgPSB2YWx1ZS5sZW5ndGg7IGkgPCBpbDsgKytpKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHVuaWZvcm0uX2FycmF5W2kgKiAzXSAgICAgICA9IHZhbHVlW2ldLng7XG4gICAgICAgICAgICAgICAgdW5pZm9ybS5fYXJyYXlbaSAqIDMgKyAxXSAgID0gdmFsdWVbaV0ueTtcbiAgICAgICAgICAgICAgICB1bmlmb3JtLl9hcnJheVtpICogMyArIDJdICAgPSB2YWx1ZVtpXS56O1xuXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGdsLnVuaWZvcm0zZnYobG9jYXRpb24sIHVuaWZvcm0uX2FycmF5KTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIC8vIGFycmF5IG9mIDREIFBvaW50IG9iamVjdHNcbiAgICAgICAgY2FzZSAndjR2JzpcbiAgICAgICAgICAgIGlmICghdW5pZm9ybS5fYXJyYXkpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdW5pZm9ybS5fYXJyYXkgPSBuZXcgRmxvYXQzMkFycmF5KDQgKiB2YWx1ZS5sZW5ndGgpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBmb3IgKGkgPSAwLCBpbCA9IHZhbHVlLmxlbmd0aDsgaSA8IGlsOyArK2kpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdW5pZm9ybS5fYXJyYXlbaSAqIDRdICAgICAgID0gdmFsdWVbaV0ueDtcbiAgICAgICAgICAgICAgICB1bmlmb3JtLl9hcnJheVtpICogNCArIDFdICAgPSB2YWx1ZVtpXS55O1xuICAgICAgICAgICAgICAgIHVuaWZvcm0uX2FycmF5W2kgKiA0ICsgMl0gICA9IHZhbHVlW2ldLno7XG4gICAgICAgICAgICAgICAgdW5pZm9ybS5fYXJyYXlbaSAqIDQgKyAzXSAgID0gdmFsdWVbaV0udztcblxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBnbC51bmlmb3JtNGZ2KGxvY2F0aW9uLCB1bmlmb3JtLl9hcnJheSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAvLyBQSVhJLlRleHR1cmVcbiAgICAgICAgY2FzZSAndCc6XG4gICAgICAgIGNhc2UgJ3NhbXBsZXIyRCc6XG5cbiAgICAgICAgICAgIGlmICghdW5pZm9ybS52YWx1ZSB8fCAhdW5pZm9ybS52YWx1ZS5iYXNlVGV4dHVyZS5oYXNMb2FkZWQpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIGFjdGl2YXRlIHRoaXMgdGV4dHVyZVxuICAgICAgICAgICAgZ2wuYWN0aXZlVGV4dHVyZShnbFsnVEVYVFVSRScgKyB0aGlzLnRleHR1cmVDb3VudF0pO1xuXG4gICAgICAgICAgICB2YXIgdGV4dHVyZSA9IHVuaWZvcm0udmFsdWUuYmFzZVRleHR1cmUuX2dsVGV4dHVyZXNbZ2wuaWRdO1xuXG4gICAgICAgICAgICBpZiAoIXRleHR1cmUpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdGhpcy5pbml0U2FtcGxlcjJEKHVuaWZvcm0pO1xuXG4gICAgICAgICAgICAgICAgLy8gc2V0IHRoZSB0ZXh0dXIgdG8gdGhlIG5ld2x5IGNyZWF0ZWQgb25lLi5cbiAgICAgICAgICAgICAgICB0ZXh0dXJlID0gdW5pZm9ybS52YWx1ZS5iYXNlVGV4dHVyZS5fZ2xUZXh0dXJlc1tnbC5pZF07XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIGJpbmQgdGhlIHRleHR1cmVcbiAgICAgICAgICAgIGdsLmJpbmRUZXh0dXJlKGdsLlRFWFRVUkVfMkQsIHRleHR1cmUpO1xuXG4gICAgICAgICAgICAvLyBzZXQgdW5pZm9ybSB0byB0ZXh0dXJlIGluZGV4XG4gICAgICAgICAgICBnbC51bmlmb3JtMWkodW5pZm9ybS5fbG9jYXRpb24sIHRoaXMudGV4dHVyZUNvdW50KTtcblxuICAgICAgICAgICAgLy8gaW5jcmVtZW50IG5leHQgdGV4dHVyZSBpZFxuICAgICAgICAgICAgdGhpcy50ZXh0dXJlQ291bnQrKztcblxuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignUGl4aS5qcyBTaGFkZXIgV2FybmluZzogVW5rbm93biB1bmlmb3JtIHR5cGU6ICcgKyB1bmlmb3JtLnR5cGUpO1xuICAgIH1cbn07XG5cbi8qKlxuICogVXBkYXRlcyB0aGUgc2hhZGVyIHVuaWZvcm0gdmFsdWVzLlxuICpcbiAqL1xuU2hhZGVyLnByb3RvdHlwZS5zeW5jVW5pZm9ybXMgPSBmdW5jdGlvbiAoKVxue1xuICAgIHRoaXMudGV4dHVyZUNvdW50ID0gMTtcblxuICAgIGZvciAodmFyIGtleSBpbiB0aGlzLnVuaWZvcm1zKVxuICAgIHtcbiAgICAgICAgdGhpcy5zeW5jVW5pZm9ybSh0aGlzLnVuaWZvcm1zW2tleV0pO1xuICAgIH1cbn07XG5cblxuLyoqXG4gKiBJbml0aWFsaXNlcyBhIFNhbXBsZXIyRCB1bmlmb3JtICh3aGljaCBtYXkgb25seSBiZSBhdmFpbGFibGUgbGF0ZXIgb24gYWZ0ZXIgaW5pdFVuaWZvcm1zIG9uY2UgdGhlIHRleHR1cmUgaGFzIGxvYWRlZClcbiAqXG4gKi9cblNoYWRlci5wcm90b3R5cGUuaW5pdFNhbXBsZXIyRCA9IGZ1bmN0aW9uICh1bmlmb3JtKVxue1xuICAgIHZhciBnbCA9IHRoaXMuZ2w7XG5cbiAgICB2YXIgdGV4dHVyZSA9IHVuaWZvcm0udmFsdWUuYmFzZVRleHR1cmU7XG5cbiAgICBpZighdGV4dHVyZS5oYXNMb2FkZWQpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG5cblxuICAgIGlmICh1bmlmb3JtLnRleHR1cmVEYXRhKVxuICAgIHtcblxuICAgICAgICAvL1RPRE8gbW92ZSB0aGlzLi4uXG4gICAgICAgIHZhciBkYXRhID0gdW5pZm9ybS50ZXh0dXJlRGF0YTtcblxuICAgICAgICB0ZXh0dXJlLl9nbFRleHR1cmVzW2dsLmlkXSA9IGdsLmNyZWF0ZVRleHR1cmUoKTtcblxuICAgICAgICBnbC5iaW5kVGV4dHVyZShnbC5URVhUVVJFXzJELCB0ZXh0dXJlLl9nbFRleHR1cmVzW2dsLmlkXSk7XG5cbiAgICAgICAgZ2wucGl4ZWxTdG9yZWkoZ2wuVU5QQUNLX1BSRU1VTFRJUExZX0FMUEhBX1dFQkdMLCB0ZXh0dXJlLnByZW11bHRpcGxpZWRBbHBoYSk7XG4gICAgICAgIC8vIEdMVGV4dHVyZSA9IG1hZyBsaW5lYXIsIG1pbiBsaW5lYXJfbWlwbWFwX2xpbmVhciwgd3JhcCByZXBlYXQgKyBnbC5nZW5lcmF0ZU1pcG1hcChnbC5URVhUVVJFXzJEKTtcbiAgICAgICAgLy8gR0xUZXh0dXJlTGluZWFyID0gbWFnL21pbiBsaW5lYXIsIHdyYXAgY2xhbXBcbiAgICAgICAgLy8gR0xUZXh0dXJlTmVhcmVzdFJlcGVhdCA9IG1hZy9taW4gTkVBUkVTVCwgd3JhcCByZXBlYXRcbiAgICAgICAgLy8gR0xUZXh0dXJlTmVhcmVzdCA9IG1hZy9taW4gbmVhcmVzdCwgd3JhcCBjbGFtcFxuICAgICAgICAvLyBBdWRpb1RleHR1cmUgPSB3aGF0ZXZlciArIGx1bWluYW5jZSArIHdpZHRoIDUxMiwgaGVpZ2h0IDIsIGJvcmRlciAwXG4gICAgICAgIC8vIEtleVRleHR1cmUgPSB3aGF0ZXZlciArIGx1bWluYW5jZSArIHdpZHRoIDI1NiwgaGVpZ2h0IDIsIGJvcmRlciAwXG5cbiAgICAgICAgLy8gIG1hZ0ZpbHRlciBjYW4gYmU6IGdsLkxJTkVBUiwgZ2wuTElORUFSX01JUE1BUF9MSU5FQVIgb3IgZ2wuTkVBUkVTVFxuICAgICAgICAvLyAgd3JhcFMvVCBjYW4gYmU6IGdsLkNMQU1QX1RPX0VER0Ugb3IgZ2wuUkVQRUFUXG5cbiAgICAgICAgZ2wudGV4SW1hZ2UyRChnbC5URVhUVVJFXzJELCAwLCBkYXRhLmx1bWluYW5jZSA/IGdsLkxVTUlOQU5DRSA6IGdsLlJHQkEsIGdsLlJHQkEsIGdsLlVOU0lHTkVEX0JZVEUsIHRleHR1cmUuc291cmNlKTtcblxuICAgICAgICBnbC50ZXhQYXJhbWV0ZXJpKGdsLlRFWFRVUkVfMkQsIGdsLlRFWFRVUkVfTUFHX0ZJTFRFUiwgZGF0YS5tYWdGaWx0ZXIgPyBkYXRhLm1hZ0ZpbHRlciA6IGdsLkxJTkVBUiApO1xuICAgICAgICBnbC50ZXhQYXJhbWV0ZXJpKGdsLlRFWFRVUkVfMkQsIGdsLlRFWFRVUkVfTUlOX0ZJTFRFUiwgZGF0YS53cmFwUyA/IGRhdGEud3JhcFMgOiBnbC5DTEFNUF9UT19FREdFICk7XG5cbiAgICAgICAgZ2wudGV4UGFyYW1ldGVyaShnbC5URVhUVVJFXzJELCBnbC5URVhUVVJFX1dSQVBfVCwgZGF0YS53cmFwUyA/IGRhdGEud3JhcFMgOiBnbC5DTEFNUF9UT19FREdFKTtcbiAgICAgICAgZ2wudGV4UGFyYW1ldGVyaShnbC5URVhUVVJFXzJELCBnbC5URVhUVVJFX1dSQVBfUywgZGF0YS53cmFwVCA/IGRhdGEud3JhcFQgOiBnbC5DTEFNUF9UT19FREdFKTtcbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgdGhpcy5zaGFkZXJNYW5hZ2VyLnJlbmRlcmVyLnVwZGF0ZVRleHR1cmUodGV4dHVyZSk7XG4gICAgfVxufTtcblxuLyoqXG4gKiBEZXN0cm95cyB0aGUgc2hhZGVyLlxuICpcbiAqL1xuU2hhZGVyLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLmdsLmRlbGV0ZVByb2dyYW0odGhpcy5wcm9ncmFtKTtcblxuICAgIHRoaXMuZ2wgPSBudWxsO1xuICAgIHRoaXMudW5pZm9ybXMgPSBudWxsO1xuICAgIHRoaXMuYXR0cmlidXRlcyA9IG51bGw7XG5cbiAgICB0aGlzLnZlcnRleFNyYyA9IG51bGw7XG4gICAgdGhpcy5mcmFnbWVudFNyYyA9IG51bGw7XG59O1xuXG5TaGFkZXIucHJvdG90eXBlLl9nbENvbXBpbGUgPSBmdW5jdGlvbiAodHlwZSwgc3JjKVxue1xuICAgIHZhciBzaGFkZXIgPSB0aGlzLmdsLmNyZWF0ZVNoYWRlcih0eXBlKTtcblxuICAgIHRoaXMuZ2wuc2hhZGVyU291cmNlKHNoYWRlciwgc3JjKTtcbiAgICB0aGlzLmdsLmNvbXBpbGVTaGFkZXIoc2hhZGVyKTtcblxuICAgIGlmICghdGhpcy5nbC5nZXRTaGFkZXJQYXJhbWV0ZXIoc2hhZGVyLCB0aGlzLmdsLkNPTVBJTEVfU1RBVFVTKSlcbiAgICB7XG4gICAgICAgIGNvbnNvbGUubG9nKHRoaXMuZ2wuZ2V0U2hhZGVySW5mb0xvZyhzaGFkZXIpKTtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgcmV0dXJuIHNoYWRlcjtcbn07XG4iLCJ2YXIgU2hhZGVyID0gcmVxdWlyZSgnLi9TaGFkZXInKTtcblxuLyoqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAZXh0ZW5kcyBQSVhJLlNoYWRlclxuICogQHBhcmFtIHNoYWRlck1hbmFnZXIge1BJWEkuU2hhZGVyTWFuYWdlcn0gVGhlIHdlYmdsIHNoYWRlciBtYW5hZ2VyIHRoaXMgc2hhZGVyIHdvcmtzIGZvci5cbiAqIEBwYXJhbSBbdmVydGV4U3JjXSB7c3RyaW5nfSBUaGUgc291cmNlIG9mIHRoZSB2ZXJ0ZXggc2hhZGVyLlxuICogQHBhcmFtIFtmcmFnbWVudFNyY10ge3N0cmluZ30gVGhlIHNvdXJjZSBvZiB0aGUgZnJhZ21lbnQgc2hhZGVyLlxuICogQHBhcmFtIFtjdXN0b21Vbmlmb3Jtc10ge29iamVjdH0gQ3VzdG9tIHVuaWZvcm1zIHRvIHVzZSB0byBhdWdtZW50IHRoZSBidWlsdC1pbiBvbmVzLlxuICogQHBhcmFtIFtmcmFnbWVudFNyY10ge3N0cmluZ30gVGhlIHNvdXJjZSBvZiB0aGUgZnJhZ21lbnQgc2hhZGVyLlxuICovXG5mdW5jdGlvbiBUZXh0dXJlU2hhZGVyKHNoYWRlck1hbmFnZXIsIHZlcnRleFNyYywgZnJhZ21lbnRTcmMsIGN1c3RvbVVuaWZvcm1zLCBjdXN0b21BdHRyaWJ1dGVzKVxue1xuICAgIHZhciB1bmlmb3JtcyA9IHtcblxuICAgICAgICB1U2FtcGxlcjogICAgICAgICAgIHsgdHlwZTogJ3NhbXBsZXIyRCcsIHZhbHVlOiAwIH0sXG4gICAgICAgIHByb2plY3Rpb25NYXRyaXg6ICAgeyB0eXBlOiAnbWF0MycsIHZhbHVlOiBuZXcgRmxvYXQzMkFycmF5KFsxLCAwLCAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgMSwgMCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsIDAsIDFdKSB9XG4gICAgfTtcblxuICAgIGlmIChjdXN0b21Vbmlmb3JtcylcbiAgICB7XG4gICAgICAgIGZvciAodmFyIHUgaW4gY3VzdG9tVW5pZm9ybXMpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHVuaWZvcm1zW3VdID0gY3VzdG9tVW5pZm9ybXNbdV07XG4gICAgICAgIH1cbiAgICB9XG5cblxuICAgIHZhciBhdHRyaWJ1dGVzID0ge1xuICAgICAgICBhVmVydGV4UG9zaXRpb246ICAgIDAsXG4gICAgICAgIGFUZXh0dXJlQ29vcmQ6ICAgICAgMCxcbiAgICAgICAgYUNvbG9yOiAgICAgICAgICAgICAwXG4gICAgfTtcblxuICAgIGlmIChjdXN0b21BdHRyaWJ1dGVzKVxuICAgIHtcbiAgICAgICAgZm9yICh2YXIgYSBpbiBjdXN0b21BdHRyaWJ1dGVzKVxuICAgICAgICB7XG4gICAgICAgICAgICBhdHRyaWJ1dGVzW2FdID0gY3VzdG9tQXR0cmlidXRlc1thXTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoZSB2ZXJ0ZXggc2hhZGVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7c3RyaW5nfVxuICAgICAqL1xuICAgIHZlcnRleFNyYyA9IHZlcnRleFNyYyB8fCBUZXh0dXJlU2hhZGVyLmRlZmF1bHRWZXJ0ZXhTcmM7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgZnJhZ21lbnQgc2hhZGVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7c3RyaW5nfVxuICAgICAqL1xuICAgIGZyYWdtZW50U3JjID0gZnJhZ21lbnRTcmMgfHwgVGV4dHVyZVNoYWRlci5kZWZhdWx0RnJhZ21lbnRTcmM7XG5cbiAgICBTaGFkZXIuY2FsbCh0aGlzLCBzaGFkZXJNYW5hZ2VyLCB2ZXJ0ZXhTcmMsIGZyYWdtZW50U3JjLCB1bmlmb3JtcywgYXR0cmlidXRlcyk7XG59XG5cbi8vIGNvbnN0cnVjdG9yXG5UZXh0dXJlU2hhZGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoU2hhZGVyLnByb3RvdHlwZSk7XG5UZXh0dXJlU2hhZGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFRleHR1cmVTaGFkZXI7XG5tb2R1bGUuZXhwb3J0cyA9IFRleHR1cmVTaGFkZXI7XG5cbi8qKlxuICogVGhlIGRlZmF1bHQgdmVydGV4IHNoYWRlciBzb3VyY2VcbiAqXG4gKiBAc3RhdGljXG4gKiBAY29uc3RhbnRcbiAqL1xuVGV4dHVyZVNoYWRlci5kZWZhdWx0VmVydGV4U3JjID0gW1xuICAgICdwcmVjaXNpb24gbG93cCBmbG9hdDsnLFxuICAgICdhdHRyaWJ1dGUgdmVjMiBhVmVydGV4UG9zaXRpb247JyxcbiAgICAnYXR0cmlidXRlIHZlYzIgYVRleHR1cmVDb29yZDsnLFxuICAgICdhdHRyaWJ1dGUgdmVjNCBhQ29sb3I7JyxcblxuICAgICd1bmlmb3JtIG1hdDMgcHJvamVjdGlvbk1hdHJpeDsnLFxuXG4gICAgJ3ZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkOycsXG4gICAgJ3ZhcnlpbmcgdmVjNCB2Q29sb3I7JyxcblxuICAgICd2b2lkIG1haW4odm9pZCl7JyxcbiAgICAnICAgZ2xfUG9zaXRpb24gPSB2ZWM0KChwcm9qZWN0aW9uTWF0cml4ICogdmVjMyhhVmVydGV4UG9zaXRpb24sIDEuMCkpLnh5LCAwLjAsIDEuMCk7JyxcbiAgICAnICAgdlRleHR1cmVDb29yZCA9IGFUZXh0dXJlQ29vcmQ7JyxcbiAgICAnICAgdkNvbG9yID0gdmVjNChhQ29sb3IucmdiICogYUNvbG9yLmEsIGFDb2xvci5hKTsnLFxuICAgICd9J1xuXS5qb2luKCdcXG4nKTtcblxuLyoqXG4gKiBUaGUgZGVmYXVsdCBmcmFnbWVudCBzaGFkZXIgc291cmNlXG4gKlxuICogQHN0YXRpY1xuICogQGNvbnN0YW50XG4gKi9cblRleHR1cmVTaGFkZXIuZGVmYXVsdEZyYWdtZW50U3JjID0gW1xuICAgICdwcmVjaXNpb24gbG93cCBmbG9hdDsnLFxuXG4gICAgJ3ZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkOycsXG4gICAgJ3ZhcnlpbmcgdmVjNCB2Q29sb3I7JyxcblxuICAgICd1bmlmb3JtIHNhbXBsZXIyRCB1U2FtcGxlcjsnLFxuXG4gICAgJ3ZvaWQgbWFpbih2b2lkKXsnLFxuICAgICcgICBnbF9GcmFnQ29sb3IgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZUZXh0dXJlQ29vcmQpICogdkNvbG9yIDsnLFxuICAgICd9J1xuXS5qb2luKCdcXG4nKTtcbiIsInZhciBTaGFkZXIgPSByZXF1aXJlKCdwaXhpLWdsLWNvcmUnKS5HTFNoYWRlcjtcblxuLyoqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAZXh0ZW5kcyBQSVhJLlNoYWRlclxuICogQHBhcmFtIHNoYWRlck1hbmFnZXIge1BJWEkuU2hhZGVyTWFuYWdlcn0gVGhlIHdlYmdsIHNoYWRlciBtYW5hZ2VyIHRoaXMgc2hhZGVyIHdvcmtzIGZvci5cbiAqIEBwYXJhbSBbdmVydGV4U3JjXSB7c3RyaW5nfSBUaGUgc291cmNlIG9mIHRoZSB2ZXJ0ZXggc2hhZGVyLlxuICogQHBhcmFtIFtmcmFnbWVudFNyY10ge3N0cmluZ30gVGhlIHNvdXJjZSBvZiB0aGUgZnJhZ21lbnQgc2hhZGVyLlxuICogQHBhcmFtIFtjdXN0b21Vbmlmb3Jtc10ge29iamVjdH0gQ3VzdG9tIHVuaWZvcm1zIHRvIHVzZSB0byBhdWdtZW50IHRoZSBidWlsdC1pbiBvbmVzLlxuICogQHBhcmFtIFtmcmFnbWVudFNyY10ge3N0cmluZ30gVGhlIHNvdXJjZSBvZiB0aGUgZnJhZ21lbnQgc2hhZGVyLlxuICovXG5mdW5jdGlvbiBUZXh0dXJlU2hhZGVyKGdsKVxue1xuICAgIC8qKlxuICAgICAqIFRoZSB2ZXJ0ZXggc2hhZGVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7c3RyaW5nfVxuICAgICAqL1xuICAgIHZlcnRleFNyYyA9IFRleHR1cmVTaGFkZXIuZGVmYXVsdFZlcnRleFNyYztcblxuICAgIC8qKlxuICAgICAqIFRoZSBmcmFnbWVudCBzaGFkZXIuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtzdHJpbmd9XG4gICAgICovXG4gICAgZnJhZ21lbnRTcmMgPSBUZXh0dXJlU2hhZGVyLmRlZmF1bHRGcmFnbWVudFNyYztcblxuICAgIFNoYWRlci5jYWxsKHRoaXMsIGdsLCB2ZXJ0ZXhTcmMsIGZyYWdtZW50U3JjKTsvLywgdW5pZm9ybXMsIGF0dHJpYnV0ZXMpO1xuXG59XG5cbi8vIGNvbnN0cnVjdG9yXG5UZXh0dXJlU2hhZGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoU2hhZGVyLnByb3RvdHlwZSk7XG5UZXh0dXJlU2hhZGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFRleHR1cmVTaGFkZXI7XG5tb2R1bGUuZXhwb3J0cyA9IFRleHR1cmVTaGFkZXI7XG5cbi8qKlxuICogVGhlIGRlZmF1bHQgdmVydGV4IHNoYWRlciBzb3VyY2VcbiAqXG4gKiBAc3RhdGljXG4gKiBAY29uc3RhbnRcbiAqL1xuVGV4dHVyZVNoYWRlci5kZWZhdWx0VmVydGV4U3JjID0gW1xuICAgICdwcmVjaXNpb24gbG93cCBmbG9hdDsnLFxuICAgICdhdHRyaWJ1dGUgdmVjMiBhVmVydGV4UG9zaXRpb247JyxcbiAgICAnYXR0cmlidXRlIHZlYzIgYVRleHR1cmVDb29yZDsnLFxuICAgICdhdHRyaWJ1dGUgdmVjNCBhQ29sb3I7JyxcblxuICAgICd1bmlmb3JtIG1hdDMgcHJvamVjdGlvbk1hdHJpeDsnLFxuXG4gICAgJ3ZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkOycsXG4gICAgJ3ZhcnlpbmcgdmVjNCB2Q29sb3I7JyxcblxuICAgICd2b2lkIG1haW4odm9pZCl7JyxcbiAgICAnICAgZ2xfUG9zaXRpb24gPSB2ZWM0KChwcm9qZWN0aW9uTWF0cml4ICogdmVjMyhhVmVydGV4UG9zaXRpb24sIDEuMCkpLnh5LCAwLjAsIDEuMCk7JyxcbiAgICAnICAgdlRleHR1cmVDb29yZCA9IGFUZXh0dXJlQ29vcmQ7JyxcbiAgICAnICAgdkNvbG9yID0gdmVjNChhQ29sb3IucmdiICogYUNvbG9yLmEsIGFDb2xvci5hKTsnLFxuICAgICd9J1xuXS5qb2luKCdcXG4nKTtcblxuLyoqXG4gKiBUaGUgZGVmYXVsdCBmcmFnbWVudCBzaGFkZXIgc291cmNlXG4gKlxuICogQHN0YXRpY1xuICogQGNvbnN0YW50XG4gKi9cblRleHR1cmVTaGFkZXIuZGVmYXVsdEZyYWdtZW50U3JjID0gW1xuICAgICdwcmVjaXNpb24gbG93cCBmbG9hdDsnLFxuXG4gICAgJ3ZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkOycsXG4gICAgJ3ZhcnlpbmcgdmVjNCB2Q29sb3I7JyxcblxuICAgICd1bmlmb3JtIHNhbXBsZXIyRCB1U2FtcGxlcjsnLFxuXG4gICAgJ3ZvaWQgbWFpbih2b2lkKXsnLFxuICAgICcgICBnbF9GcmFnQ29sb3IgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZUZXh0dXJlQ29vcmQpICogdkNvbG9yIDsnLFxuICAgICd9J1xuXS5qb2luKCdcXG4nKTtcbiIsInZhciBXZWJHTE1hbmFnZXIgPSByZXF1aXJlKCcuLi9tYW5hZ2Vycy9XZWJHTE1hbmFnZXInKTtcblxuLyoqXG4gKiBCYXNlIGZvciBhIGNvbW1vbiBvYmplY3QgcmVuZGVyZXIgdGhhdCBjYW4gYmUgdXNlZCBhcyBhIHN5c3RlbSByZW5kZXJlciBwbHVnaW4uXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLldlYkdMTWFuYWdlclxuICogQG1lbWJlcm9mIFBJWElcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5XZWJHTFJlbmRlcmVyfSBUaGUgcmVuZGVyZXIgdGhpcyBvYmplY3QgcmVuZGVyZXIgd29ya3MgZm9yLlxuICovXG5mdW5jdGlvbiBPYmplY3RSZW5kZXJlcihyZW5kZXJlcilcbntcbiAgICBXZWJHTE1hbmFnZXIuY2FsbCh0aGlzLCByZW5kZXJlcik7XG59XG5cblxuT2JqZWN0UmVuZGVyZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShXZWJHTE1hbmFnZXIucHJvdG90eXBlKTtcbk9iamVjdFJlbmRlcmVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IE9iamVjdFJlbmRlcmVyO1xubW9kdWxlLmV4cG9ydHMgPSBPYmplY3RSZW5kZXJlcjtcblxuLyoqXG4gKiBTdGFydHMgdGhlIHJlbmRlcmVyIGFuZCBzZXRzIHRoZSBzaGFkZXJcbiAqXG4gKi9cbk9iamVjdFJlbmRlcmVyLnByb3RvdHlwZS5zdGFydCA9IGZ1bmN0aW9uICgpXG57XG4gICAgLy8gc2V0IHRoZSBzaGFkZXIuLlxufTtcblxuLyoqXG4gKiBTdG9wcyB0aGUgcmVuZGVyZXJcbiAqXG4gKi9cbk9iamVjdFJlbmRlcmVyLnByb3RvdHlwZS5zdG9wID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLmZsdXNoKCk7XG59O1xuXG4vKipcbiAqIGZsdXNoZXNcbiAqXG4gKi9cbk9iamVjdFJlbmRlcmVyLnByb3RvdHlwZS5mbHVzaCA9IGZ1bmN0aW9uICgpXG57XG4gICAgLy8gZmx1c2ghXG59O1xuXG4vKipcbiAqIFJlbmRlcnMgYW4gb2JqZWN0XG4gKlxuICogQHBhcmFtIG9iamVjdCB7UElYSS5EaXNwbGF5T2JqZWN0fSBUaGUgb2JqZWN0IHRvIHJlbmRlci5cbiAqL1xuT2JqZWN0UmVuZGVyZXIucHJvdG90eXBlLnJlbmRlciA9IGZ1bmN0aW9uIChvYmplY3QpIC8vIGpzaGludCB1bnVzZWQ6ZmFsc2VcbntcbiAgICAvLyByZW5kZXIgdGhlIG9iamVjdFxufTtcbiIsIi8qKlxuICogSGVscGVyIGNsYXNzIHRvIGNyZWF0ZSBhIHF1YWRcbiAqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gZ2wge1dlYkdMUmVuZGVyaW5nQ29udGV4dH0gVGhlIGdsIGNvbnRleHQgZm9yIHRoaXMgcXVhZCB0byB1c2UuXG4gKi9cbmZ1bmN0aW9uIFF1YWQoZ2wpXG57XG4gICAgLypcbiAgICAgKiB0aGUgY3VycmVudCBXZWJHTCBkcmF3aW5nIGNvbnRleHRcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1dlYkdMUmVuZGVyaW5nQ29udGV4dH1cbiAgICAgKi9cbiAgICB0aGlzLmdsID0gZ2w7XG5cbi8vICAgIHRoaXMudGV4dHVyZXMgPSBuZXcgVGV4dHVyZVV2cygpO1xuXG4gICAgLyoqXG4gICAgICogQW4gYXJyYXkgb2YgdmVydGljZXNcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge0Zsb2F0MzJBcnJheX1cbiAgICAgKi9cbiAgICB0aGlzLnZlcnRpY2VzID0gbmV3IEZsb2F0MzJBcnJheShbXG4gICAgICAgIDAsMCxcbiAgICAgICAgMjAwLDAsXG4gICAgICAgIDIwMCwyMDAsXG4gICAgICAgIDAsMjAwXG4gICAgXSk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgVXZzIG9mIHRoZSBxdWFkXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtGbG9hdDMyQXJyYXl9XG4gICAgICovXG4gICAgdGhpcy51dnMgPSBuZXcgRmxvYXQzMkFycmF5KFtcbiAgICAgICAgMCwwLFxuICAgICAgICAxLDAsXG4gICAgICAgIDEsMSxcbiAgICAgICAgMCwxXG4gICAgXSk7XG5cbi8vICAgIHZhciB3aGl0ZSA9ICgweEZGRkZGRiA+PiAxNikgKyAoMHhGRkZGRkYgJiAweGZmMDApICsgKCgweEZGRkZGRiAmIDB4ZmYpIDw8IDE2KSArICgxICogMjU1IDw8IDI0KTtcbiAgICAvL1RPRE8gY29udmVydCB0aGlzIHRvIGEgMzIgdW5zaWduZWQgaW50IGFycmF5XG4gICAgLyoqXG4gICAgICogVGhlIGNvbG9yIGNvbXBvbmVudHMgb2YgdGhlIHRyaWFuZ2xlc1xuICAgICAqXG4gICAgICogQG1lbWJlciB7RmxvYXQzMkFycmF5fVxuICAgICAqL1xuICAgIHRoaXMuY29sb3JzID0gbmV3IEZsb2F0MzJBcnJheShbXG4gICAgICAgIDEsMSwxLDEsXG4gICAgICAgIDEsMSwxLDEsXG4gICAgICAgIDEsMSwxLDEsXG4gICAgICAgIDEsMSwxLDFcbiAgICBdKTtcblxuICAgIC8qXG4gICAgICogQG1lbWJlciB7VWludDE2QXJyYXl9IEFuIGFycmF5IGNvbnRhaW5pbmcgdGhlIGluZGljZXMgb2YgdGhlIHZlcnRpY2VzXG4gICAgICovXG4gICAgdGhpcy5pbmRpY2VzID0gbmV3IFVpbnQxNkFycmF5KFtcbiAgICAgICAgMCwgMSwgMiwgMCwgMywgMlxuICAgIF0pO1xuXG4gICAgLypcbiAgICAgKiBAbWVtYmVyIHtXZWJHTEJ1ZmZlcn0gVGhlIHZlcnRleCBidWZmZXJcbiAgICAgKi9cbiAgICB0aGlzLnZlcnRleEJ1ZmZlciA9IGdsLmNyZWF0ZUJ1ZmZlcigpO1xuXG4gICAgLypcbiAgICAgKiBAbWVtYmVyIHtXZWJHTEJ1ZmZlcn0gVGhlIGluZGV4IGJ1ZmZlclxuICAgICAqL1xuICAgIHRoaXMuaW5kZXhCdWZmZXIgPSBnbC5jcmVhdGVCdWZmZXIoKTtcblxuICAgIGdsLmJpbmRCdWZmZXIoZ2wuQVJSQVlfQlVGRkVSLCB0aGlzLnZlcnRleEJ1ZmZlcik7XG4gICAgZ2wuYnVmZmVyRGF0YShnbC5BUlJBWV9CVUZGRVIsICg4ICsgOCArIDE2KSAqIDQsIGdsLkRZTkFNSUNfRFJBVyk7XG5cbiAgICBnbC5iaW5kQnVmZmVyKGdsLkVMRU1FTlRfQVJSQVlfQlVGRkVSLCB0aGlzLmluZGV4QnVmZmVyKTtcbiAgICBnbC5idWZmZXJEYXRhKGdsLkVMRU1FTlRfQVJSQVlfQlVGRkVSLCB0aGlzLmluZGljZXMsIGdsLlNUQVRJQ19EUkFXKTtcblxuICAgIHRoaXMudXBsb2FkKCk7XG59XG5cblF1YWQucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gUXVhZDtcblxuLyoqXG4gKiBNYXBzIHR3byBSZWN0YW5nbGUgdG8gdGhlIHF1YWRcbiAqIEBwYXJhbSByZWN0IHtQSVhJLlJlY3RhbmdsZX0gdGhlIGZpcnN0IHJlY3RhbmdsZVxuICogQHBhcmFtIHJlY3QyIHtQSVhJLlJlY3RhbmdsZX0gdGhlIHNlY29uZCByZWN0YW5nbGVcbiAqL1xuUXVhZC5wcm90b3R5cGUubWFwID0gZnVuY3Rpb24ocmVjdCwgcmVjdDIpXG57XG4gICAgdmFyIHggPSAwOyAvL3JlY3QyLnggLyByZWN0LndpZHRoO1xuICAgIHZhciB5ID0gMDsgLy9yZWN0Mi55IC8gcmVjdC5oZWlnaHQ7XG5cbiAgICB0aGlzLnV2c1swXSA9IHg7XG4gICAgdGhpcy51dnNbMV0gPSB5O1xuXG4gICAgdGhpcy51dnNbMl0gPSB4ICsgcmVjdDIud2lkdGggLyByZWN0LndpZHRoO1xuICAgIHRoaXMudXZzWzNdID0geTtcblxuICAgIHRoaXMudXZzWzRdID0geCArIHJlY3QyLndpZHRoIC8gcmVjdC53aWR0aDtcbiAgICB0aGlzLnV2c1s1XSA9IHkgKyByZWN0Mi5oZWlnaHQgLyByZWN0LmhlaWdodDtcblxuICAgIHRoaXMudXZzWzZdID0geDtcbiAgICB0aGlzLnV2c1s3XSA9IHkgKyByZWN0Mi5oZWlnaHQgLyByZWN0LmhlaWdodDtcblxuICAgIC8vLyAtLS0tLVxuICAgIHggPSByZWN0Mi54O1xuICAgIHkgPSByZWN0Mi55O1xuXG4gICAgdGhpcy52ZXJ0aWNlc1swXSA9IHg7XG4gICAgdGhpcy52ZXJ0aWNlc1sxXSA9IHk7XG5cbiAgICB0aGlzLnZlcnRpY2VzWzJdID0geCArIHJlY3QyLndpZHRoO1xuICAgIHRoaXMudmVydGljZXNbM10gPSB5O1xuXG4gICAgdGhpcy52ZXJ0aWNlc1s0XSA9IHggKyByZWN0Mi53aWR0aDtcbiAgICB0aGlzLnZlcnRpY2VzWzVdID0geSArIHJlY3QyLmhlaWdodDtcblxuICAgIHRoaXMudmVydGljZXNbNl0gPSB4O1xuICAgIHRoaXMudmVydGljZXNbN10gPSB5ICsgcmVjdDIuaGVpZ2h0O1xuXG4gICAgdGhpcy51cGxvYWQoKTtcbn07XG5cbi8qKlxuICogQmluZHMgdGhlIGJ1ZmZlciBhbmQgdXBsb2FkcyB0aGUgZGF0YVxuICovXG5RdWFkLnByb3RvdHlwZS51cGxvYWQgPSBmdW5jdGlvbigpXG57XG4gICAgdmFyIGdsID0gdGhpcy5nbDtcblxuICAgIC8vIFRPRE8gY291bGQgcHJvYmFibHkgYmUgcHVzaGVkIGludG8gb25lIHVwbG9hZCFcbiAgICBnbC5iaW5kQnVmZmVyKCBnbC5BUlJBWV9CVUZGRVIsIHRoaXMudmVydGV4QnVmZmVyICk7XG5cbiAgICBnbC5idWZmZXJTdWJEYXRhKGdsLkFSUkFZX0JVRkZFUiwgMCwgdGhpcy52ZXJ0aWNlcyk7XG5cbiAgICBnbC5idWZmZXJTdWJEYXRhKGdsLkFSUkFZX0JVRkZFUiwgOCAqIDQsIHRoaXMudXZzKTtcblxuICAgIGdsLmJ1ZmZlclN1YkRhdGEoZ2wuQVJSQVlfQlVGRkVSLCAoOCArIDgpICogNCwgdGhpcy5jb2xvcnMpO1xufTtcblxuUXVhZC5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uKClcbntcbiAgICB2YXIgZ2wgPSB0aGlzLmdsO1xuICAgIFxuICAgICBnbC5kZWxldGVCdWZmZXIodGhpcy52ZXJ0ZXhCdWZmZXIpO1xuICAgICBnbC5kZWxldGVCdWZmZXIodGhpcy5pbmRleEJ1ZmZlcik7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IFF1YWQ7XG5cblxuIiwidmFyIG1hdGggPSByZXF1aXJlKCcuLi8uLi8uLi9tYXRoJyksXG4gICAgdXRpbHMgPSByZXF1aXJlKCcuLi8uLi8uLi91dGlscycpLFxuICAgIENPTlNUID0gcmVxdWlyZSgnLi4vLi4vLi4vY29uc3QnKSxcbiAgICAgICAgXG4gICAgR0xUZXh0dXJlID0gcmVxdWlyZSgncGl4aS1nbC1jb3JlJykuR0xUZXh0dXJlLFxuICAgIEdMRnJhbWVidWZmZXIgPSByZXF1aXJlKCdwaXhpLWdsLWNvcmUnKS5HTEZyYW1lYnVmZmVyLFxuICAgIFxuICAgIFN0ZW5jaWxNYXNrU3RhY2sgPSByZXF1aXJlKCcuL1N0ZW5jaWxNYXNrU3RhY2snKTtcblxuLyoqXG4gKiBAYXV0aG9yIE1hdCBHcm92ZXMgaHR0cDovL21hdGdyb3Zlcy5jb20vIEBEb29ybWF0MjNcbiAqL1xuXG4vKipcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqIEBwYXJhbSBnbCB7V2ViR0xSZW5kZXJpbmdDb250ZXh0fSB0aGUgY3VycmVudCBXZWJHTCBkcmF3aW5nIGNvbnRleHRcbiAqIEBwYXJhbSB3aWR0aCB7bnVtYmVyfSB0aGUgaG9yaXpvbnRhbCByYW5nZSBvZiB0aGUgZmlsdGVyXG4gKiBAcGFyYW0gaGVpZ2h0IHtudW1iZXJ9IHRoZSB2ZXJ0aWNhbCByYW5nZSBvZiB0aGUgZmlsdGVyXG4gKiBAcGFyYW0gc2NhbGVNb2RlIHtudW1iZXJ9IFNlZSB7QGxpbmsgUElYSS5TQ0FMRV9NT0RFU30gZm9yIHBvc3NpYmxlIHZhbHVlc1xuICogQHBhcmFtIHJlc29sdXRpb24ge251bWJlcn0gdGhlIGN1cnJlbnQgcmVzb2x1dGlvblxuICogQHBhcmFtIHJvb3Qge2Jvb2xlYW59IFdoZXRoZXIgdGhpcyBvYmplY3QgaXMgdGhlIHJvb3QgZWxlbWVudCBvciBub3RcbiAqL1xudmFyIFJlbmRlclRhcmdldCA9IGZ1bmN0aW9uKGdsLCB3aWR0aCwgaGVpZ2h0LCBzY2FsZU1vZGUsIHJlc29sdXRpb24sIHJvb3QpXG57XG4gICAgLy9UT0RPIFJlc29sdXRpb24gY291bGQgZ28gaGVyZSAoIGVnIGxvdyByZXMgYmx1cnMgKVxuXG4gICAgLyoqXG4gICAgICogVGhlIGN1cnJlbnQgV2ViR0wgZHJhd2luZyBjb250ZXh0LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7V2ViR0xSZW5kZXJpbmdDb250ZXh0fVxuICAgICAqL1xuICAgIHRoaXMuZ2wgPSBnbDtcblxuICAgIC8vIG5leHQgdGltZSB0byBjcmVhdGUgYSBmcmFtZSBidWZmZXIgYW5kIHRleHR1cmVcblxuICAgIC8qKlxuICAgICAqIEEgZnJhbWUgYnVmZmVyXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtXZWJHTEZyYW1lQnVmZmVyfVxuICAgICAqL1xuICAgIHRoaXMuZnJhbWVCdWZmZXIgPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHRleHR1cmVcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuVGV4dHVyZX1cbiAgICAgKi9cbiAgICB0aGlzLnRleHR1cmUgPSBudWxsO1xuXG4gICAgdGhpcy5jbGVhckNvbG9yID0gWzAsIDAsIDAsIDBdO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHNpemUgb2YgdGhlIG9iamVjdCBhcyBhIHJlY3RhbmdsZVxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5SZWN0YW5nbGV9XG4gICAgICovXG4gICAgdGhpcy5zaXplID0gbmV3IG1hdGguUmVjdGFuZ2xlKDAsIDAsIDEsIDEpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGN1cnJlbnQgcmVzb2x1dGlvblxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMucmVzb2x1dGlvbiA9IHJlc29sdXRpb24gfHwgQ09OU1QuUkVTT0xVVElPTjtcblxuICAgIC8qKlxuICAgICAqIFRoZSBwcm9qZWN0aW9uIG1hdHJpeFxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5NYXRyaXh9XG4gICAgICovXG4gICAgdGhpcy5wcm9qZWN0aW9uTWF0cml4ID0gbmV3IG1hdGguTWF0cml4KCk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgb2JqZWN0J3MgdHJhbnNmb3JtXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLk1hdHJpeH1cbiAgICAgKi9cbiAgICB0aGlzLnRyYW5zZm9ybSA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgZnJhbWUuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlJlY3RhbmdsZX1cbiAgICAgKi9cbiAgICB0aGlzLmZyYW1lID0gbnVsbDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBzdGVuY2lsIGJ1ZmZlciBzdG9yZXMgbWFza2luZyBkYXRhIGZvciB0aGUgcmVuZGVyIHRhcmdldFxuICAgICAqXG4gICAgICogQG1lbWJlciB7V2ViR0xSZW5kZXJCdWZmZXJ9XG4gICAgICovXG4gICAgdGhpcy5zdGVuY2lsQnVmZmVyID0gbnVsbDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBkYXRhIHN0cnVjdHVyZSBmb3IgdGhlIHN0ZW5jaWwgbWFza3NcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuU3RlbmNpbE1hc2tTdGFja31cbiAgICAgKi9cbiAgICB0aGlzLnN0ZW5jaWxNYXNrU3RhY2sgPSBuZXcgU3RlbmNpbE1hc2tTdGFjaygpO1xuXG4gICAgLyoqXG4gICAgICogU3RvcmVzIGZpbHRlciBkYXRhIGZvciB0aGUgcmVuZGVyIHRhcmdldFxuICAgICAqXG4gICAgICogQG1lbWJlciB7b2JqZWN0W119XG4gICAgICovXG4gICAgdGhpcy5maWx0ZXJTdGFjayA9IFtcbiAgICAgICAge1xuICAgICAgICAgICAgcmVuZGVyVGFyZ2V0OnRoaXMsXG4gICAgICAgICAgICBmaWx0ZXI6W10sXG4gICAgICAgICAgICBib3VuZHM6dGhpcy5zaXplXG4gICAgICAgIH1cbiAgICBdO1xuXG5cbiAgICAvKipcbiAgICAgKiBUaGUgc2NhbGUgbW9kZS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCBQSVhJLlNDQUxFX01PREVTLkRFRkFVTFRcbiAgICAgKiBAc2VlIFBJWEkuU0NBTEVfTU9ERVNcbiAgICAgKi9cbiAgICB0aGlzLnNjYWxlTW9kZSA9IHNjYWxlTW9kZSB8fCBDT05TVC5TQ0FMRV9NT0RFUy5ERUZBVUxUO1xuXG4gICAgLyoqXG4gICAgICogV2hldGhlciB0aGlzIG9iamVjdCBpcyB0aGUgcm9vdCBlbGVtZW50IG9yIG5vdFxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKi9cbiAgICB0aGlzLnJvb3QgPSByb290O1xuXG4gICAgdGhpcy5mcmFtZUJ1ZmZlciA9IEdMRnJhbWVidWZmZXIuY3JlYXRlUkdCQShnbCwgMTAwLCAxMDApO1xuICAgIGlmKHRoaXMuZnJhbWVCdWZmZXIpdGhpcy5mcmFtZUJ1ZmZlci51bmJpbmQoKTtcblxuICAgLy8gdGhpcy5mcmFtZUJ1ZmZlciA9IHtmcmFtZWJ1ZmZlcjpudWxsLCBiaW5kOmZ1bmN0aW9uKCl7fSwgY2xlYXI6ZnVuY3Rpb24oKXt9LCByZXNpemU6ZnVuY3Rpb24oKXt9fS8vbmV3IEdMRnJhbWVidWZmZXIuY3JlYXRlUkdCQShnbCwgMTAwLCAxMDApO1xuXG5cblxuICAgIGlmICghdGhpcy5yb290KVxuICAgIHtcbiAgICAgICAgLypcbiAgICAgICAgICAgIEEgZnJhbWUgYnVmZmVyIG5lZWRzIGEgdGFyZ2V0IHRvIHJlbmRlciB0by4uXG4gICAgICAgICAgICBjcmVhdGUgYSB0ZXh0dXJlIGFuZCBiaW5kIGl0IGF0dGFjaCBpdCB0byB0aGUgZnJhbWVidWZmZXIuLlxuICAgICAgICAgKi9cbiAgICAgICAgXG4gICAgICAgIC8vIGNyZWF0ZSBhIHRleHR1cmUgdG8gYmluZCBhdHRhY2ggdG8gdGhlIGZyYW1lQnVmZmVyLi5cbiAgICAgICAgdmFyIHRleHR1cmUgPSBuZXcgR0xUZXh0dXJlKGdsKTtcblxuICAgICAgICB0ZXh0dXJlLmVuYWJsZUxpbmVhclNjYWxpbmcoKVxuICAgICAgICB0ZXh0dXJlLmVuYWJsZVdyYXBDbGFtcCgpXG5cbiAgICAgICAgdGhpcy5mcmFtZUJ1ZmZlci5lbmFibGVUZXh0dXJlKHRleHR1cmUpO1xuXG4gICAgICAgIC8vIFRPRE8gY2hhbmdlIVxuICAgICAgICAvLyB0aGlzIGlzIHVzZWQgYnkgdGhlIGJhc2UgdGV4dHVyZVxuICAgICAgICB0aGlzLnRleHR1cmUgPSB0ZXh0dXJlLnRleHR1cmU7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIC8vIG1ha2UgaXQgYSBudWxsIGZyYW1lYnVmZmVyLi5cbiAgICAgICAgdGhpcy5mcmFtZUJ1ZmZlci5mcmFtZWJ1ZmZlciA9IG51bGw7XG4gICAgfVxuXG4gICAgdGhpcy5yZXNpemUod2lkdGgsIGhlaWdodCk7XG59O1xuXG5SZW5kZXJUYXJnZXQucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gUmVuZGVyVGFyZ2V0O1xubW9kdWxlLmV4cG9ydHMgPSBSZW5kZXJUYXJnZXQ7XG5cbi8qKlxuICogQ2xlYXJzIHRoZSBmaWx0ZXIgdGV4dHVyZS5cbiAqXG4gKiBAcGFyYW0gW2JpbmQ9ZmFsc2VdIHtib29sZWFufSBTaG91bGQgd2UgYmluZCBvdXIgZnJhbWVidWZmZXIgYmVmb3JlIGNsZWFyaW5nP1xuICovXG5SZW5kZXJUYXJnZXQucHJvdG90eXBlLmNsZWFyID0gZnVuY3Rpb24oY2xlYXJDb2xvcilcbntcbiAgICB2YXIgY2MgPSBjbGVhckNvbG9yIHx8IHRoaXMuY2xlYXJDb2xvclxuICAgIHRoaXMuZnJhbWVCdWZmZXIuY2xlYXIoY2NbMF0sY2NbMV0sY2NbMl0sY2NbM10pLy9yLGcsYixhKTtcbn07XG5cbi8qKlxuICogQmluZHMgdGhlIHN0ZW5jaWwgYnVmZmVyLlxuICpcbiAqL1xuUmVuZGVyVGFyZ2V0LnByb3RvdHlwZS5hdHRhY2hTdGVuY2lsQnVmZmVyID0gZnVuY3Rpb24oKVxue1xuICAgIC8vVE9ETyBjaGVjayBpZiBzdGVuY2lsIGlzIGRvbmU/XG4gICAgLyoqXG4gICAgICogVGhlIHN0ZW5jaWwgYnVmZmVyIGlzIHVzZWQgZm9yIG1hc2tpbmcgaW4gcGl4aVxuICAgICAqIGxldHMgY3JlYXRlIG9uZSBhbmQgdGhlbiBhZGQgYXR0YWNoIGl0IHRvIHRoZSBmcmFtZWJ1ZmZlci4uXG4gICAgICovXG4gICAgaWYgKCF0aGlzLnJvb3QpXG4gICAge1xuICAgICAgICB0aGlzLmZyYW1lQnVmZmVyLmVuYWJsZVN0ZW5jaWwoKTtcbiAgICB9XG59O1xuXG4vKipcbiAqIEJpbmRzIHRoZSBidWZmZXJzIGFuZCBpbml0aWFsaXNlcyB0aGUgdmlld3BvcnQuXG4gKlxuICovXG5SZW5kZXJUYXJnZXQucHJvdG90eXBlLmFjdGl2YXRlID0gZnVuY3Rpb24oKVxue1xuICAgIC8vVE9PRCByZWZhY3RvciB1c2FnZSBvZiBmcmFtZS4uXG4gICAgdmFyIGdsID0gdGhpcy5nbDtcblxuICAgIHRoaXMuZnJhbWVCdWZmZXIuYmluZCgpO1xuXG5cbiAgICB2YXIgcHJvamVjdGlvbkZyYW1lID0gdGhpcy5mcmFtZSB8fCB0aGlzLnNpemU7XG5cbiAgICAvLyBUT0RPIGFkZCBhIGRpcnR5IGZsYWcgdG8gdGhpcyBvZiBhIHNldHRlciBmb3IgdGhlIGZyYW1lP1xuICAgIHRoaXMuY2FsY3VsYXRlUHJvamVjdGlvbiggcHJvamVjdGlvbkZyYW1lICk7XG5cbiAgICBpZih0aGlzLnRyYW5zZm9ybSlcbiAgICB7XG4gICAgICAgIHRoaXMucHJvamVjdGlvbk1hdHJpeC5hcHBlbmQodGhpcy50cmFuc2Zvcm0pO1xuICAgIH1cblxuICAgIGdsLnZpZXdwb3J0KDAsMCwgcHJvamVjdGlvbkZyYW1lLndpZHRoICogdGhpcy5yZXNvbHV0aW9uLCBwcm9qZWN0aW9uRnJhbWUuaGVpZ2h0ICogdGhpcy5yZXNvbHV0aW9uKTtcbn07XG5cbi8qKlxuICogVXBkYXRlcyB0aGUgcHJvamVjdGlvbiBtYXRyaXggYmFzZWQgb24gYSBwcm9qZWN0aW9uIGZyYW1lICh3aGljaCBpcyBhIHJlY3RhbmdsZSlcbiAqXG4gKi9cblJlbmRlclRhcmdldC5wcm90b3R5cGUuY2FsY3VsYXRlUHJvamVjdGlvbiA9IGZ1bmN0aW9uIChwcm9qZWN0aW9uRnJhbWUpXG57XG4gICAgdmFyIHBtID0gdGhpcy5wcm9qZWN0aW9uTWF0cml4O1xuXG4gICAgcG0uaWRlbnRpdHkoKTtcblxuICAgIGlmICghdGhpcy5yb290KVxuICAgIHtcbiAgICAgICAgcG0uYSA9IDEgLyBwcm9qZWN0aW9uRnJhbWUud2lkdGgqMjtcbiAgICAgICAgcG0uZCA9IDEgLyBwcm9qZWN0aW9uRnJhbWUuaGVpZ2h0KjI7XG5cbiAgICAgICAgcG0udHggPSAtMSAtIHByb2plY3Rpb25GcmFtZS54ICogcG0uYTtcbiAgICAgICAgcG0udHkgPSAtMSAtIHByb2plY3Rpb25GcmFtZS55ICogcG0uZDtcbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgcG0uYSA9IDEgLyBwcm9qZWN0aW9uRnJhbWUud2lkdGgqMjtcbiAgICAgICAgcG0uZCA9IC0xIC8gcHJvamVjdGlvbkZyYW1lLmhlaWdodCoyO1xuXG4gICAgICAgIHBtLnR4ID0gLTEgLSBwcm9qZWN0aW9uRnJhbWUueCAqIHBtLmE7XG4gICAgICAgIHBtLnR5ID0gMSAtIHByb2plY3Rpb25GcmFtZS55ICogcG0uZDtcbiAgICB9XG59O1xuXG4vKipcbiAqIFJlc2l6ZXMgdGhlIHRleHR1cmUgdG8gdGhlIHNwZWNpZmllZCB3aWR0aCBhbmQgaGVpZ2h0XG4gKlxuICogQHBhcmFtIHdpZHRoIHtOdW1iZXJ9IHRoZSBuZXcgd2lkdGggb2YgdGhlIHRleHR1cmVcbiAqIEBwYXJhbSBoZWlnaHQge051bWJlcn0gdGhlIG5ldyBoZWlnaHQgb2YgdGhlIHRleHR1cmVcbiAqL1xuUmVuZGVyVGFyZ2V0LnByb3RvdHlwZS5yZXNpemUgPSBmdW5jdGlvbiAod2lkdGgsIGhlaWdodClcbntcbiAgICB3aWR0aCA9IHdpZHRoIHwgMDtcbiAgICBoZWlnaHQgPSBoZWlnaHQgfCAwO1xuXG4gICAgaWYgKHRoaXMuc2l6ZS53aWR0aCA9PT0gd2lkdGggJiYgdGhpcy5zaXplLmhlaWdodCA9PT0gaGVpZ2h0KSBcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLnNpemUud2lkdGggPSB3aWR0aDtcbiAgICB0aGlzLnNpemUuaGVpZ2h0ID0gaGVpZ2h0O1xuXG4gICAgdGhpcy5mcmFtZUJ1ZmZlci5yZXNpemUod2lkdGggKiB0aGlzLnJlc29sdXRpb24sIGhlaWdodCAqIHRoaXMucmVzb2x1dGlvbik7XG4gICAgXG4gICAgdmFyIHByb2plY3Rpb25GcmFtZSA9IHRoaXMuZnJhbWUgfHwgdGhpcy5zaXplO1xuXG4gICAgdGhpcy5jYWxjdWxhdGVQcm9qZWN0aW9uKCBwcm9qZWN0aW9uRnJhbWUgKTtcbn07XG5cbi8qKlxuICogRGVzdHJveXMgdGhlIHJlbmRlciB0YXJnZXQuXG4gKlxuICovXG5SZW5kZXJUYXJnZXQucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoKVxue1xuICAgIHZhciBnbCA9IHRoaXMuZ2w7XG4gICAgXG4gICAgdGhpcy5mcmFtZUJ1ZmZlci5kZXN0cm95KCk7XG5cbiAgICB0aGlzLmZyYW1lQnVmZmVyID0gbnVsbDtcbiAgICB0aGlzLnRleHR1cmUgPSBudWxsO1xufTtcbiIsIi8qKlxuICogR2VuZXJpYyBNYXNrIFN0YWNrIGRhdGEgc3RydWN0dXJlXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKi9cbmZ1bmN0aW9uIFN0ZW5jaWxNYXNrU3RhY2soKVxue1xuXHQvKipcbiAgICAgKiBUaGUgYWN0dWFsIHN0YWNrXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHthbnlbXX1cbiAgICAgKi9cbiAgICB0aGlzLnN0ZW5jaWxTdGFjayA9IFtdO1xuXG4gICAgLyoqXG4gICAgICogVE9ETyBAYWx2aW5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICovXG4gICAgdGhpcy5yZXZlcnNlID0gdHJ1ZTtcblxuICAgIC8qKlxuICAgICAqIEludGVybmFsIGNvdW50XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy5jb3VudCA9IDA7XG59XG5cblN0ZW5jaWxNYXNrU3RhY2sucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gU3RlbmNpbE1hc2tTdGFjaztcbm1vZHVsZS5leHBvcnRzID0gU3RlbmNpbE1hc2tTdGFjaztcbiIsIkNPTlNUID0gcmVxdWlyZSgnLi4vLi4vLi4vY29uc3QnKTtcblxuLyoqXG4gKiBNYXBzIGdsIGJsZW5kIGNvbWJpbmF0aW9ucyB0byBXZWJHTFxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICovXG5mdW5jdGlvbiBtYXBXZWJHTEJsZW5kTW9kZXNUb1BpeGkoZ2wsIG9iamVjdClcbntcbiAgICBvYmplY3QgPSBvYmplY3QgfHwge307XG5cbiAgICAvL1RPRE8gLSBwcmVtdWx0aXBseSBhbHBoYSB3b3VsZCBiZSBkaWZmZXJlbnQuXG4gICAgLy9hZGQgYSBib29sZWFuIGZvciB0aGF0IVxuICAgIG9iamVjdFtDT05TVC5CTEVORF9NT0RFUy5OT1JNQUxdICAgICAgICA9IFtnbC5PTkUsICAgICAgIGdsLk9ORV9NSU5VU19TUkNfQUxQSEFdO1xuICAgIG9iamVjdFtDT05TVC5CTEVORF9NT0RFUy5BRERdICAgICAgICAgICA9IFtnbC5TUkNfQUxQSEEsIGdsLkRTVF9BTFBIQV07XG4gICAgb2JqZWN0W0NPTlNULkJMRU5EX01PREVTLk1VTFRJUExZXSAgICAgID0gW2dsLkRTVF9DT0xPUiwgZ2wuT05FX01JTlVTX1NSQ19BTFBIQV07XG4gICAgb2JqZWN0W0NPTlNULkJMRU5EX01PREVTLlNDUkVFTl0gICAgICAgID0gW2dsLlNSQ19BTFBIQSwgZ2wuT05FXTtcbiAgICBvYmplY3RbQ09OU1QuQkxFTkRfTU9ERVMuT1ZFUkxBWV0gICAgICAgPSBbZ2wuT05FLCAgICAgICBnbC5PTkVfTUlOVVNfU1JDX0FMUEhBXTtcbiAgICBvYmplY3RbQ09OU1QuQkxFTkRfTU9ERVMuREFSS0VOXSAgICAgICAgPSBbZ2wuT05FLCAgICAgICBnbC5PTkVfTUlOVVNfU1JDX0FMUEhBXTtcbiAgICBvYmplY3RbQ09OU1QuQkxFTkRfTU9ERVMuTElHSFRFTl0gICAgICAgPSBbZ2wuT05FLCAgICAgICBnbC5PTkVfTUlOVVNfU1JDX0FMUEhBXTtcbiAgICBvYmplY3RbQ09OU1QuQkxFTkRfTU9ERVMuQ09MT1JfRE9ER0VdICAgPSBbZ2wuT05FLCAgICAgICBnbC5PTkVfTUlOVVNfU1JDX0FMUEhBXTtcbiAgICBvYmplY3RbQ09OU1QuQkxFTkRfTU9ERVMuQ09MT1JfQlVSTl0gICAgPSBbZ2wuT05FLCAgICAgICBnbC5PTkVfTUlOVVNfU1JDX0FMUEhBXTtcbiAgICBvYmplY3RbQ09OU1QuQkxFTkRfTU9ERVMuSEFSRF9MSUdIVF0gICAgPSBbZ2wuT05FLCAgICAgICBnbC5PTkVfTUlOVVNfU1JDX0FMUEhBXTtcbiAgICBvYmplY3RbQ09OU1QuQkxFTkRfTU9ERVMuU09GVF9MSUdIVF0gICAgPSBbZ2wuT05FLCAgICAgICBnbC5PTkVfTUlOVVNfU1JDX0FMUEhBXTtcbiAgICBvYmplY3RbQ09OU1QuQkxFTkRfTU9ERVMuRElGRkVSRU5DRV0gICAgPSBbZ2wuT05FLCAgICAgICBnbC5PTkVfTUlOVVNfU1JDX0FMUEhBXTtcbiAgICBvYmplY3RbQ09OU1QuQkxFTkRfTU9ERVMuRVhDTFVTSU9OXSAgICAgPSBbZ2wuT05FLCAgICAgICBnbC5PTkVfTUlOVVNfU1JDX0FMUEhBXTtcbiAgICBvYmplY3RbQ09OU1QuQkxFTkRfTU9ERVMuSFVFXSAgICAgICAgICAgPSBbZ2wuT05FLCAgICAgICBnbC5PTkVfTUlOVVNfU1JDX0FMUEhBXTtcbiAgICBvYmplY3RbQ09OU1QuQkxFTkRfTU9ERVMuU0FUVVJBVElPTl0gICAgPSBbZ2wuT05FLCAgICAgICBnbC5PTkVfTUlOVVNfU1JDX0FMUEhBXTtcbiAgICBvYmplY3RbQ09OU1QuQkxFTkRfTU9ERVMuQ09MT1JdICAgICAgICAgPSBbZ2wuT05FLCAgICAgICBnbC5PTkVfTUlOVVNfU1JDX0FMUEhBXTtcbiAgICBvYmplY3RbQ09OU1QuQkxFTkRfTU9ERVMuTFVNSU5PU0lUWV0gICAgPSBbZ2wuT05FLCAgICAgICBnbC5PTkVfTUlOVVNfU1JDX0FMUEhBXTtcblxuICAgIHJldHVybiBvYmplY3Q7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gbWFwV2ViR0xCbGVuZE1vZGVzVG9QaXhpO1xuIiwiQ09OU1QgPSByZXF1aXJlKCcuLi8uLi8uLi9jb25zdCcpO1xuXG4vKipcbiAqIEdlbmVyaWMgTWFzayBTdGFjayBkYXRhIHN0cnVjdHVyZVxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICovXG5mdW5jdGlvbiBtYXBXZWJHTERyYXdNb2Rlc1RvUGl4aShnbCwgb2JqZWN0KVxue1xuXHRvYmplY3Q9IG9iamVjdCB8fCB7fTtcblxuICAgIG9iamVjdFtDT05TVC5EUkFXX01PREVTLlBPSU5UU10gICAgICAgICA9IGdsLlBPSU5UUztcbiAgICBvYmplY3RbQ09OU1QuRFJBV19NT0RFUy5MSU5FU10gICAgICAgICAgPSBnbC5MSU5FUztcbiAgICBvYmplY3RbQ09OU1QuRFJBV19NT0RFUy5MSU5FX0xPT1BdICAgICAgPSBnbC5MSU5FX0xPT1A7XG4gICAgb2JqZWN0W0NPTlNULkRSQVdfTU9ERVMuTElORV9TVFJJUF0gICAgID0gZ2wuTElORV9TVFJJUDtcbiAgICBvYmplY3RbQ09OU1QuRFJBV19NT0RFUy5UUklBTkdMRVNdICAgICAgPSBnbC5UUklBTkdMRVM7XG4gICAgb2JqZWN0W0NPTlNULkRSQVdfTU9ERVMuVFJJQU5HTEVfU1RSSVBdID0gZ2wuVFJJQU5HTEVfU1RSSVA7XG4gICAgb2JqZWN0W0NPTlNULkRSQVdfTU9ERVMuVFJJQU5HTEVfRkFOXSAgID0gZ2wuVFJJQU5HTEVfRkFOO1xuXG59XG5cbm1vZHVsZS5leHBvcnRzID0gbWFwV2ViR0xEcmF3TW9kZXNUb1BpeGk7XG4iLCJ2YXIgbWF0aCA9IHJlcXVpcmUoJy4uL21hdGgnKSxcbiAgICBUZXh0dXJlID0gcmVxdWlyZSgnLi4vdGV4dHVyZXMvVGV4dHVyZScpLFxuICAgIENvbnRhaW5lciA9IHJlcXVpcmUoJy4uL2Rpc3BsYXkvQ29udGFpbmVyJyksXG4gICAgQ2FudmFzVGludGVyID0gcmVxdWlyZSgnLi4vcmVuZGVyZXJzL2NhbnZhcy91dGlscy9DYW52YXNUaW50ZXInKSxcbiAgICB1dGlscyA9IHJlcXVpcmUoJy4uL3V0aWxzJyksXG4gICAgQ09OU1QgPSByZXF1aXJlKCcuLi9jb25zdCcpLFxuICAgIHRlbXBQb2ludCA9IG5ldyBtYXRoLlBvaW50KCk7XG5cbi8qKlxuICogVGhlIFNwcml0ZSBvYmplY3QgaXMgdGhlIGJhc2UgZm9yIGFsbCB0ZXh0dXJlZCBvYmplY3RzIHRoYXQgYXJlIHJlbmRlcmVkIHRvIHRoZSBzY3JlZW5cbiAqXG4gKiBBIHNwcml0ZSBjYW4gYmUgY3JlYXRlZCBkaXJlY3RseSBmcm9tIGFuIGltYWdlIGxpa2UgdGhpczpcbiAqXG4gKiBgYGBqc1xuICogdmFyIHNwcml0ZSA9IG5ldyBQSVhJLlNwcml0ZS5mcm9tSW1hZ2UoJ2Fzc2V0cy9pbWFnZS5wbmcnKTtcbiAqIGBgYFxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5Db250YWluZXJcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gdGV4dHVyZSB7UElYSS5UZXh0dXJlfSBUaGUgdGV4dHVyZSBmb3IgdGhpcyBzcHJpdGVcbiAqL1xuZnVuY3Rpb24gU3ByaXRlKHRleHR1cmUpXG57XG4gICAgQ29udGFpbmVyLmNhbGwodGhpcyk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYW5jaG9yIHNldHMgdGhlIG9yaWdpbiBwb2ludCBvZiB0aGUgdGV4dHVyZS5cbiAgICAgKiBUaGUgZGVmYXVsdCBpcyAwLDAgdGhpcyBtZWFucyB0aGUgdGV4dHVyZSdzIG9yaWdpbiBpcyB0aGUgdG9wIGxlZnRcbiAgICAgKiBTZXR0aW5nIHRoZSBhbmNob3IgdG8gMC41LDAuNSBtZWFucyB0aGUgdGV4dHVyZSdzIG9yaWdpbiBpcyBjZW50ZXJlZFxuICAgICAqIFNldHRpbmcgdGhlIGFuY2hvciB0byAxLDEgd291bGQgbWVhbiB0aGUgdGV4dHVyZSdzIG9yaWdpbiBwb2ludCB3aWxsIGJlIHRoZSBib3R0b20gcmlnaHQgY29ybmVyXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlBvaW50fVxuICAgICAqL1xuICAgIHRoaXMuYW5jaG9yID0gbmV3IG1hdGguUG9pbnQoKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSB0ZXh0dXJlIHRoYXQgdGhlIHNwcml0ZSBpcyB1c2luZ1xuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5UZXh0dXJlfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fdGV4dHVyZSA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgd2lkdGggb2YgdGhlIHNwcml0ZSAodGhpcyBpcyBpbml0aWFsbHkgc2V0IGJ5IHRoZSB0ZXh0dXJlKVxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fd2lkdGggPSAwO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGhlaWdodCBvZiB0aGUgc3ByaXRlICh0aGlzIGlzIGluaXRpYWxseSBzZXQgYnkgdGhlIHRleHR1cmUpXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9oZWlnaHQgPSAwO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHRpbnQgYXBwbGllZCB0byB0aGUgc3ByaXRlLiBUaGlzIGlzIGEgaGV4IHZhbHVlLiBBIHZhbHVlIG9mIDB4RkZGRkZGIHdpbGwgcmVtb3ZlIGFueSB0aW50IGVmZmVjdC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAweEZGRkZGRlxuICAgICAqL1xuICAgIHRoaXMudGludCA9IDB4RkZGRkZGO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGJsZW5kIG1vZGUgdG8gYmUgYXBwbGllZCB0byB0aGUgc3ByaXRlLiBBcHBseSBhIHZhbHVlIG9mIGBQSVhJLkJMRU5EX01PREVTLk5PUk1BTGAgdG8gcmVzZXQgdGhlIGJsZW5kIG1vZGUuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgUElYSS5CTEVORF9NT0RFUy5OT1JNQUxcbiAgICAgKiBAc2VlIFBJWEkuQkxFTkRfTU9ERVNcbiAgICAgKi9cbiAgICB0aGlzLmJsZW5kTW9kZSA9IENPTlNULkJMRU5EX01PREVTLk5PUk1BTDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBzaGFkZXIgdGhhdCB3aWxsIGJlIHVzZWQgdG8gcmVuZGVyIHRoZSBzcHJpdGUuIFNldCB0byBudWxsIHRvIHJlbW92ZSBhIGN1cnJlbnQgc2hhZGVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5BYnN0cmFjdEZpbHRlcnxQSVhJLlNoYWRlcn1cbiAgICAgKi9cbiAgICB0aGlzLnNoYWRlciA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBBbiBpbnRlcm5hbCBjYWNoZWQgdmFsdWUgb2YgdGhlIHRpbnQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMHhGRkZGRkZcbiAgICAgKi9cbiAgICB0aGlzLmNhY2hlZFRpbnQgPSAweEZGRkZGRjtcblxuICAgIC8vIGNhbGwgdGV4dHVyZSBzZXR0ZXJcbiAgICB0aGlzLnRleHR1cmUgPSB0ZXh0dXJlIHx8IFRleHR1cmUuRU1QVFk7XG4gICAgdGhpcy50ZXh0dXJlRGlydHkgPSB0cnVlXG4gICAgdGhpcy52ZXJ0ZXhEaXJ0eSA9IHRydWU7XG4gICAgdGhpcy52ZXJ0ZXhEYXRhID0gbmV3IEZsb2F0MzJBcnJheSg4KTtcbn1cblxuLy8gY29uc3RydWN0b3JcblNwcml0ZS5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKENvbnRhaW5lci5wcm90b3R5cGUpO1xuU3ByaXRlLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFNwcml0ZTtcbm1vZHVsZS5leHBvcnRzID0gU3ByaXRlO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhTcHJpdGUucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogVGhlIHdpZHRoIG9mIHRoZSBzcHJpdGUsIHNldHRpbmcgdGhpcyB3aWxsIGFjdHVhbGx5IG1vZGlmeSB0aGUgc2NhbGUgdG8gYWNoaWV2ZSB0aGUgdmFsdWUgc2V0XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuU3ByaXRlI1xuICAgICAqL1xuICAgIHdpZHRoOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIE1hdGguYWJzKHRoaXMuc2NhbGUueCkgKiB0aGlzLnRleHR1cmUuX2ZyYW1lLndpZHRoO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdmFyIHNpZ24gPSB1dGlscy5zaWduKHRoaXMuc2NhbGUueCkgfHwgMTtcbiAgICAgICAgICAgIHRoaXMuc2NhbGUueCA9IHNpZ24gKiB2YWx1ZSAvIHRoaXMudGV4dHVyZS5fZnJhbWUud2lkdGg7XG4gICAgICAgICAgICB0aGlzLl93aWR0aCA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFRoZSBoZWlnaHQgb2YgdGhlIHNwcml0ZSwgc2V0dGluZyB0aGlzIHdpbGwgYWN0dWFsbHkgbW9kaWZ5IHRoZSBzY2FsZSB0byBhY2hpZXZlIHRoZSB2YWx1ZSBzZXRcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5TcHJpdGUjXG4gICAgICovXG4gICAgaGVpZ2h0OiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuICBNYXRoLmFicyh0aGlzLnNjYWxlLnkpICogdGhpcy50ZXh0dXJlLl9mcmFtZS5oZWlnaHQ7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB2YXIgc2lnbiA9IHV0aWxzLnNpZ24odGhpcy5zY2FsZS55KSB8fCAxO1xuICAgICAgICAgICAgdGhpcy5zY2FsZS55ID0gc2lnbiAqIHZhbHVlIC8gdGhpcy50ZXh0dXJlLl9mcmFtZS5oZWlnaHQ7XG4gICAgICAgICAgICB0aGlzLl9oZWlnaHQgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBUaGUgdGV4dHVyZSB0aGF0IHRoZSBzcHJpdGUgaXMgdXNpbmdcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuVGV4dHVyZX1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5TcHJpdGUjXG4gICAgICovXG4gICAgdGV4dHVyZToge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiAgdGhpcy5fdGV4dHVyZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGlmICh0aGlzLl90ZXh0dXJlID09PSB2YWx1ZSlcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuX3RleHR1cmUgPSB2YWx1ZTtcbiAgICAgICAgICAgIHRoaXMuY2FjaGVkVGludCA9IDB4RkZGRkZGO1xuXG4gICAgICAgICAgICB0aGlzLnRleHR1cmVEaXJ0eSA9IHRydWU7XG5cbiAgICAgICAgICAgIGlmICh2YWx1ZSlcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAvLyB3YWl0IGZvciB0aGUgdGV4dHVyZSB0byBsb2FkXG4gICAgICAgICAgICAgICAgaWYgKHZhbHVlLmJhc2VUZXh0dXJlLmhhc0xvYWRlZClcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX29uVGV4dHVyZVVwZGF0ZSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICB2YWx1ZS5vbmNlKCd1cGRhdGUnLCB0aGlzLl9vblRleHR1cmVVcGRhdGUsIHRoaXMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn0pO1xuXG4vKipcbiAqIFdoZW4gdGhlIHRleHR1cmUgaXMgdXBkYXRlZCwgdGhpcyBldmVudCB3aWxsIGZpcmUgdG8gdXBkYXRlIHRoZSBzY2FsZSBhbmQgZnJhbWVcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5TcHJpdGUucHJvdG90eXBlLl9vblRleHR1cmVVcGRhdGUgPSBmdW5jdGlvbiAoKVxue1xuICAgIHRoaXMudGV4dHVyZURpcnR5ID0gdHJ1ZTtcblxuICAgIC8vIHNvIGlmIF93aWR0aCBpcyAwIHRoZW4gd2lkdGggd2FzIG5vdCBzZXQuLlxuICAgIGlmICh0aGlzLl93aWR0aClcbiAgICB7XG4gICAgICAgIHRoaXMuc2NhbGUueCA9IHV0aWxzLnNpZ24odGhpcy5zY2FsZS54KSAqIHRoaXMuX3dpZHRoIC8gdGhpcy50ZXh0dXJlLmZyYW1lLndpZHRoO1xuICAgIH1cblxuICAgIGlmICh0aGlzLl9oZWlnaHQpXG4gICAge1xuICAgICAgICB0aGlzLnNjYWxlLnkgPSB1dGlscy5zaWduKHRoaXMuc2NhbGUueSkgKiB0aGlzLl9oZWlnaHQgLyB0aGlzLnRleHR1cmUuZnJhbWUuaGVpZ2h0O1xuICAgIH1cbn07XG5cblNwcml0ZS5wcm90b3R5cGUuY2FjbHVsYXRlVmVydGljZXMgPSBmdW5jdGlvbiAoKVxue1xuXG4gICAgdmFyIHRleHR1cmUgPSB0aGlzLl90ZXh0dXJlLFxuICAgICAgICB3dCA9IHRoaXMud29ybGRUcmFuc2Zvcm0sXG4gICAgICAgIGEgPSB3dC5hLCBiID0gd3QuYiwgYyA9IHd0LmMsIGQgPSB3dC5kLCB0eCA9IHd0LnR4LCB0eSA9IHd0LnR5LFxuICAgICAgICB2ZXJ0ZXhEYXRhID0gdGhpcy52ZXJ0ZXhEYXRhLFxuICAgICAgICB3MCwgdzEsIGgwLCBoMSxcbiAgICAgICAgdHJpbSA9IHRleHR1cmUudHJpbTtcbiAgICBcbiAgICBpZiAodHJpbSlcbiAgICB7XG4gICAgICAgIC8vIGlmIHRoZSBzcHJpdGUgaXMgdHJpbW1lZCBhbmQgaXMgbm90IGEgdGlsaW5nc3ByaXRlIHRoZW4gd2UgbmVlZCB0byBhZGQgdGhlIGV4dHJhIHNwYWNlIGJlZm9yZSB0cmFuc2Zvcm1pbmcgdGhlIHNwcml0ZSBjb29yZHMuLlxuICAgICAgICB3MSA9IHRyaW0ueCAtIHRoaXMuYW5jaG9yLnggKiB0cmltLndpZHRoO1xuICAgICAgICB3MCA9IHcxICsgdGV4dHVyZS5jcm9wLndpZHRoO1xuXG4gICAgICAgIGgxID0gdHJpbS55IC0gdGhpcy5hbmNob3IueSAqIHRyaW0uaGVpZ2h0O1xuICAgICAgICBoMCA9IGgxICsgdGV4dHVyZS5jcm9wLmhlaWdodDtcblxuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICB3MCA9ICh0ZXh0dXJlLl9mcmFtZS53aWR0aCApICogKDEtdGhpcy5hbmNob3IueCk7XG4gICAgICAgIHcxID0gKHRleHR1cmUuX2ZyYW1lLndpZHRoICkgKiAtdGhpcy5hbmNob3IueDtcblxuICAgICAgICBoMCA9IHRleHR1cmUuX2ZyYW1lLmhlaWdodCAqICgxLXRoaXMuYW5jaG9yLnkpO1xuICAgICAgICBoMSA9IHRleHR1cmUuX2ZyYW1lLmhlaWdodCAqIC10aGlzLmFuY2hvci55O1xuICAgIH1cblxuICAgIC8vIHh5XG4gICAgdmVydGV4RGF0YVswXSA9IGEgKiB3MSArIGMgKiBoMSArIHR4O1xuICAgIHZlcnRleERhdGFbMV0gPSBkICogaDEgKyBiICogdzEgKyB0eTtcblxuICAgIC8vIHh5XG4gICAgdmVydGV4RGF0YVsyXSA9IGEgKiB3MCArIGMgKiBoMSArIHR4O1xuICAgIHZlcnRleERhdGFbM10gPSBkICogaDEgKyBiICogdzAgKyB0eTtcblxuICAgICAvLyB4eVxuICAgIHZlcnRleERhdGFbNF0gPSBhICogdzAgKyBjICogaDAgKyB0eDtcbiAgICB2ZXJ0ZXhEYXRhWzVdID0gZCAqIGgwICsgYiAqIHcwICsgdHk7XG5cbiAgICAvLyB4eVxuICAgIHZlcnRleERhdGFbNl0gPSBhICogdzEgKyBjICogaDAgKyB0eDtcbiAgICB2ZXJ0ZXhEYXRhWzddID0gZCAqIGgwICsgYiAqIHcxICsgdHk7XG5cblxufVxuXG4vKipcbipcbiogUmVuZGVycyB0aGUgb2JqZWN0IHVzaW5nIHRoZSBXZWJHTCByZW5kZXJlclxuKlxuKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcn1cbiogQHByaXZhdGVcbiovXG5TcHJpdGUucHJvdG90eXBlLl9yZW5kZXJXZWJHTCA9IGZ1bmN0aW9uIChyZW5kZXJlcilcbntcbiAgICBpZih0aGlzLnRleHR1cmVEaXJ0eSlcbiAgICB7XG4gICAgICAgIHRoaXMudGV4dHVyZURpcnR5ID0gZmFsc2U7XG5cbiAgICAgICAgdGhpcy5fb25UZXh0dXJlVXBkYXRlKCk7XG4gICAgICAgIFxuICAgICAgICB0aGlzLnZlcnRleERpcnR5ID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBpZih0aGlzLnZlcnRleERpcnR5KVxuICAgIHtcbiAgICAgICAgdGhpcy52ZXJ0ZXhEaXJ0eSA9IGZhbHNlO1xuXG4gICAgICAgIC8vIHNldCB0aGUgdmVydGV4IGRhdGFcbiAgICAgICAgdGhpcy5jYWNsdWxhdGVWZXJ0aWNlcygpO1xuXG4gICAgfVxuICAgIFxuICAgIHJlbmRlcmVyLnNldE9iamVjdFJlbmRlcmVyKHJlbmRlcmVyLnBsdWdpbnMuc3ByaXRlKTtcbiAgICByZW5kZXJlci5wbHVnaW5zLnNwcml0ZS5yZW5kZXIodGhpcyk7XG59O1xuXG4vKipcbiAqIFJldHVybnMgdGhlIGJvdW5kcyBvZiB0aGUgU3ByaXRlIGFzIGEgcmVjdGFuZ2xlLiBUaGUgYm91bmRzIGNhbGN1bGF0aW9uIHRha2VzIHRoZSB3b3JsZFRyYW5zZm9ybSBpbnRvIGFjY291bnQuXG4gKlxuICogQHBhcmFtIG1hdHJpeCB7UElYSS5NYXRyaXh9IHRoZSB0cmFuc2Zvcm1hdGlvbiBtYXRyaXggb2YgdGhlIHNwcml0ZVxuICogQHJldHVybiB7UElYSS5SZWN0YW5nbGV9IHRoZSBmcmFtaW5nIHJlY3RhbmdsZVxuICovXG5TcHJpdGUucHJvdG90eXBlLmdldEJvdW5kcyA9IGZ1bmN0aW9uIChtYXRyaXgpXG57XG4gICAgaWYoIXRoaXMuX2N1cnJlbnRCb3VuZHMpXG4gICAge1xuICAgICAgICBpZih0aGlzLnZlcnRleERpcnR5KVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnZlcnRleERpcnR5ID0gZmFsc2U7XG5cbiAgICAgICAgICAgIC8vIHNldCB0aGUgdmVydGV4IGRhdGFcbiAgICAgICAgICAgIHRoaXMuY2FjbHVsYXRlVmVydGljZXMoKTtcblxuICAgICAgICB9XG5cbiAgICAgICAgdmFyIG1pblgsXG4gICAgICAgICAgICBtYXhYLFxuICAgICAgICAgICAgbWluWSxcbiAgICAgICAgICAgIG1heFksXG4gICAgICAgICAgICB2ZXJ0ZXhEYXRhID0gdGhpcy52ZXJ0ZXhEYXRhO1xuXG4gICAgICAgIHZhciB4MSA9IHZlcnRleERhdGFbMF1cbiAgICAgICAgdmFyIHkxID0gdmVydGV4RGF0YVsxXVxuXG4gICAgICAgIHZhciB4MiA9IHZlcnRleERhdGFbMl1cbiAgICAgICAgdmFyIHkyID0gdmVydGV4RGF0YVszXVxuXG4gICAgICAgIHZhciB4MyA9IHZlcnRleERhdGFbNF1cbiAgICAgICAgdmFyIHkzID0gdmVydGV4RGF0YVs1XVxuXG4gICAgICAgIHZhciB4NCA9IHZlcnRleERhdGFbNl1cbiAgICAgICAgdmFyIHk0ID0gdmVydGV4RGF0YVs3XVxuXG4gICAgICAgIG1pblggPSB4MTtcbiAgICAgICAgbWluWCA9IHgyIDwgbWluWCA/IHgyIDogbWluWDtcbiAgICAgICAgbWluWCA9IHgzIDwgbWluWCA/IHgzIDogbWluWDtcbiAgICAgICAgbWluWCA9IHg0IDwgbWluWCA/IHg0IDogbWluWDtcblxuICAgICAgICBtaW5ZID0geTE7XG4gICAgICAgIG1pblkgPSB5MiA8IG1pblkgPyB5MiA6IG1pblk7XG4gICAgICAgIG1pblkgPSB5MyA8IG1pblkgPyB5MyA6IG1pblk7XG4gICAgICAgIG1pblkgPSB5NCA8IG1pblkgPyB5NCA6IG1pblk7XG5cbiAgICAgICAgbWF4WCA9IHgxO1xuICAgICAgICBtYXhYID0geDIgPiBtYXhYID8geDIgOiBtYXhYO1xuICAgICAgICBtYXhYID0geDMgPiBtYXhYID8geDMgOiBtYXhYO1xuICAgICAgICBtYXhYID0geDQgPiBtYXhYID8geDQgOiBtYXhYO1xuXG4gICAgICAgIG1heFkgPSB5MTtcbiAgICAgICAgbWF4WSA9IHkyID4gbWF4WSA/IHkyIDogbWF4WTtcbiAgICAgICAgbWF4WSA9IHkzID4gbWF4WSA/IHkzIDogbWF4WTtcbiAgICAgICAgbWF4WSA9IHk0ID4gbWF4WSA/IHk0IDogbWF4WTtcblxuICAgICAgICAvLyBjaGVjayBmb3IgY2hpbGRyZW5cbiAgICAgICAgaWYodGhpcy5jaGlsZHJlbi5sZW5ndGgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHZhciBjaGlsZEJvdW5kcyA9IHRoaXMuY29udGFpbmVyR2V0Qm91bmRzKCk7XG5cbiAgICAgICAgICAgIHcwID0gY2hpbGRCb3VuZHMueDtcbiAgICAgICAgICAgIHcxID0gY2hpbGRCb3VuZHMueCArIGNoaWxkQm91bmRzLndpZHRoO1xuICAgICAgICAgICAgaDAgPSBjaGlsZEJvdW5kcy55O1xuICAgICAgICAgICAgaDEgPSBjaGlsZEJvdW5kcy55ICsgY2hpbGRCb3VuZHMuaGVpZ2h0O1xuXG4gICAgICAgICAgICBtaW5YID0gKG1pblggPCB3MCkgPyBtaW5YIDogdzA7XG4gICAgICAgICAgICBtaW5ZID0gKG1pblkgPCBoMCkgPyBtaW5ZIDogaDA7XG5cbiAgICAgICAgICAgIG1heFggPSAobWF4WCA+IHcxKSA/IG1heFggOiB3MTtcbiAgICAgICAgICAgIG1heFkgPSAobWF4WSA+IGgxKSA/IG1heFkgOiBoMTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBib3VuZHMgPSB0aGlzLl9ib3VuZHM7XG5cbiAgICAgICAgYm91bmRzLnggPSBtaW5YO1xuICAgICAgICBib3VuZHMud2lkdGggPSBtYXhYIC0gbWluWDtcblxuICAgICAgICBib3VuZHMueSA9IG1pblk7XG4gICAgICAgIGJvdW5kcy5oZWlnaHQgPSBtYXhZIC0gbWluWTtcblxuICAgICAgICAvLyBzdG9yZSBhIHJlZmVyZW5jZSBzbyB0aGF0IGlmIHRoaXMgZnVuY3Rpb24gZ2V0cyBjYWxsZWQgYWdhaW4gaW4gdGhlIHJlbmRlciBjeWNsZSB3ZSBkbyBub3QgaGF2ZSB0byByZWNhbGN1bGF0ZVxuICAgICAgICB0aGlzLl9jdXJyZW50Qm91bmRzID0gYm91bmRzO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLl9jdXJyZW50Qm91bmRzO1xufTtcblxuLyoqXG4gKiBHZXRzIHRoZSBsb2NhbCBib3VuZHMgb2YgdGhlIHNwcml0ZSBvYmplY3QuXG4gKlxuICovXG5TcHJpdGUucHJvdG90eXBlLmdldExvY2FsQm91bmRzID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLl9ib3VuZHMueCA9IC10aGlzLl90ZXh0dXJlLl9mcmFtZS53aWR0aCAqIHRoaXMuYW5jaG9yLng7XG4gICAgdGhpcy5fYm91bmRzLnkgPSAtdGhpcy5fdGV4dHVyZS5fZnJhbWUuaGVpZ2h0ICogdGhpcy5hbmNob3IueTtcbiAgICB0aGlzLl9ib3VuZHMud2lkdGggPSB0aGlzLl90ZXh0dXJlLl9mcmFtZS53aWR0aDtcbiAgICB0aGlzLl9ib3VuZHMuaGVpZ2h0ID0gdGhpcy5fdGV4dHVyZS5fZnJhbWUuaGVpZ2h0O1xuICAgIHJldHVybiB0aGlzLl9ib3VuZHM7XG59O1xuXG4vKipcbiogVGVzdHMgaWYgYSBwb2ludCBpcyBpbnNpZGUgdGhpcyBzcHJpdGVcbipcbiogQHBhcmFtIHBvaW50IHtQSVhJLlBvaW50fSB0aGUgcG9pbnQgdG8gdGVzdFxuKiBAcmV0dXJuIHtib29sZWFufSB0aGUgcmVzdWx0IG9mIHRoZSB0ZXN0XG4qL1xuU3ByaXRlLnByb3RvdHlwZS5jb250YWluc1BvaW50ID0gZnVuY3Rpb24oIHBvaW50IClcbntcbiAgICB0aGlzLndvcmxkVHJhbnNmb3JtLmFwcGx5SW52ZXJzZShwb2ludCwgIHRlbXBQb2ludCk7XG5cbiAgICB2YXIgd2lkdGggPSB0aGlzLl90ZXh0dXJlLl9mcmFtZS53aWR0aDtcbiAgICB2YXIgaGVpZ2h0ID0gdGhpcy5fdGV4dHVyZS5fZnJhbWUuaGVpZ2h0O1xuICAgIHZhciB4MSA9IC13aWR0aCAqIHRoaXMuYW5jaG9yLng7XG4gICAgdmFyIHkxO1xuXG4gICAgaWYgKCB0ZW1wUG9pbnQueCA+IHgxICYmIHRlbXBQb2ludC54IDwgeDEgKyB3aWR0aCApXG4gICAge1xuICAgICAgICB5MSA9IC1oZWlnaHQgKiB0aGlzLmFuY2hvci55O1xuXG4gICAgICAgIGlmICggdGVtcFBvaW50LnkgPiB5MSAmJiB0ZW1wUG9pbnQueSA8IHkxICsgaGVpZ2h0IClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2U7XG59O1xuXG4vKipcbiogUmVuZGVycyB0aGUgb2JqZWN0IHVzaW5nIHRoZSBDYW52YXMgcmVuZGVyZXJcbipcbiogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLkNhbnZhc1JlbmRlcmVyfSBUaGUgcmVuZGVyZXJcbiogQHByaXZhdGVcbiovXG5TcHJpdGUucHJvdG90eXBlLl9yZW5kZXJDYW52YXMgPSBmdW5jdGlvbiAocmVuZGVyZXIpXG57XG4gICAgaWYgKHRoaXMudGV4dHVyZS5jcm9wLndpZHRoIDw9IDAgfHwgdGhpcy50ZXh0dXJlLmNyb3AuaGVpZ2h0IDw9IDApXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFyIGNvbXBvc2l0ZU9wZXJhdGlvbiA9IHJlbmRlcmVyLmJsZW5kTW9kZXNbdGhpcy5ibGVuZE1vZGVdO1xuICAgIGlmIChjb21wb3NpdGVPcGVyYXRpb24gIT09IHJlbmRlcmVyLmNvbnRleHQuZ2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uKVxuICAgIHtcbiAgICAgICAgcmVuZGVyZXIuY29udGV4dC5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb24gPSBjb21wb3NpdGVPcGVyYXRpb247XG4gICAgfVxuXG4gICAgLy8gIElnbm9yZSBudWxsIHNvdXJjZXNcbiAgICBpZiAodGhpcy50ZXh0dXJlLnZhbGlkKVxuICAgIHtcbiAgICAgICAgdmFyIHRleHR1cmUgPSB0aGlzLl90ZXh0dXJlLFxuICAgICAgICAgICAgd3QgPSB0aGlzLndvcmxkVHJhbnNmb3JtLFxuICAgICAgICAgICAgZHgsXG4gICAgICAgICAgICBkeSxcbiAgICAgICAgICAgIHdpZHRoLFxuICAgICAgICAgICAgaGVpZ2h0O1xuXG4gICAgICAgIHJlbmRlcmVyLmNvbnRleHQuZ2xvYmFsQWxwaGEgPSB0aGlzLndvcmxkQWxwaGE7XG5cbiAgICAgICAgLy8gSWYgc21vb3RoaW5nRW5hYmxlZCBpcyBzdXBwb3J0ZWQgYW5kIHdlIG5lZWQgdG8gY2hhbmdlIHRoZSBzbW9vdGhpbmcgcHJvcGVydHkgZm9yIHRoaXMgdGV4dHVyZVxuICAgICAgICB2YXIgc21vb3RoaW5nRW5hYmxlZCA9IHRleHR1cmUuYmFzZVRleHR1cmUuc2NhbGVNb2RlID09PSBDT05TVC5TQ0FMRV9NT0RFUy5MSU5FQVI7XG4gICAgICAgIGlmIChyZW5kZXJlci5zbW9vdGhQcm9wZXJ0eSAmJiByZW5kZXJlci5jb250ZXh0W3JlbmRlcmVyLnNtb290aFByb3BlcnR5XSAhPT0gc21vb3RoaW5nRW5hYmxlZClcbiAgICAgICAge1xuICAgICAgICAgICAgcmVuZGVyZXIuY29udGV4dFtyZW5kZXJlci5zbW9vdGhQcm9wZXJ0eV0gPSBzbW9vdGhpbmdFbmFibGVkO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gSWYgdGhlIHRleHR1cmUgaXMgdHJpbW1lZCB3ZSBvZmZzZXQgYnkgdGhlIHRyaW0geC95LCBvdGhlcndpc2Ugd2UgdXNlIHRoZSBmcmFtZSBkaW1lbnNpb25zXG5cbiAgICAgICAgaWYodGV4dHVyZS5yb3RhdGUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHdpZHRoID0gdGV4dHVyZS5jcm9wLmhlaWdodDtcbiAgICAgICAgICAgIGhlaWdodCA9IHRleHR1cmUuY3JvcC53aWR0aDtcblxuICAgICAgICAgICAgZHggPSAodGV4dHVyZS50cmltKSA/IHRleHR1cmUudHJpbS55IC0gdGhpcy5hbmNob3IueSAqIHRleHR1cmUudHJpbS5oZWlnaHQgOiB0aGlzLmFuY2hvci55ICogLXRleHR1cmUuX2ZyYW1lLmhlaWdodDtcbiAgICAgICAgICAgIGR5ID0gKHRleHR1cmUudHJpbSkgPyB0ZXh0dXJlLnRyaW0ueCAtIHRoaXMuYW5jaG9yLnggKiB0ZXh0dXJlLnRyaW0ud2lkdGggOiB0aGlzLmFuY2hvci54ICogLXRleHR1cmUuX2ZyYW1lLndpZHRoO1xuICAgICAgIFxuICAgICAgICAgICAgZHggKz0gd2lkdGg7XG5cbiAgICAgICAgICAgIHd0LnR4ID0gZHkgKiB3dC5hICsgZHggKiB3dC5jICsgd3QudHg7XG4gICAgICAgICAgICB3dC50eSA9IGR5ICogd3QuYiArIGR4ICogd3QuZCArIHd0LnR5O1xuXG4gICAgICAgICAgICB2YXIgdGVtcCA9IHd0LmE7XG4gICAgICAgICAgICB3dC5hICA9IC13dC5jO1xuICAgICAgICAgICAgd3QuYyAgPSAgdGVtcDtcblxuICAgICAgICAgICAgdGVtcCA9IHd0LmI7XG4gICAgICAgICAgICB3dC5iICA9IC13dC5kO1xuICAgICAgICAgICAgd3QuZCAgPSAgdGVtcDtcblxuICAgICAgICAgICAgLy8gdGhlIGFuY2hvciBoYXMgYWxyZWFkeSBiZWVuIGFwcGxpZWQgYWJvdmUsIHNvIGxldHMgc2V0IGl0IHRvIHplcm9cbiAgICAgICAgICAgIGR4ID0gMDtcbiAgICAgICAgICAgIGR5ID0gMDtcblxuICAgICAgICB9XG4gICAgICAgIGVsc2VcbiAgICAgICAge1xuICAgICAgICAgICAgd2lkdGggPSB0ZXh0dXJlLmNyb3Aud2lkdGg7XG4gICAgICAgICAgICBoZWlnaHQgPSB0ZXh0dXJlLmNyb3AuaGVpZ2h0O1xuXG4gICAgICAgICAgICBkeCA9ICh0ZXh0dXJlLnRyaW0pID8gdGV4dHVyZS50cmltLnggLSB0aGlzLmFuY2hvci54ICogdGV4dHVyZS50cmltLndpZHRoIDogdGhpcy5hbmNob3IueCAqIC10ZXh0dXJlLl9mcmFtZS53aWR0aDtcbiAgICAgICAgICAgIGR5ID0gKHRleHR1cmUudHJpbSkgPyB0ZXh0dXJlLnRyaW0ueSAtIHRoaXMuYW5jaG9yLnkgKiB0ZXh0dXJlLnRyaW0uaGVpZ2h0IDogdGhpcy5hbmNob3IueSAqIC10ZXh0dXJlLl9mcmFtZS5oZWlnaHQ7XG4gICAgICAgIH1cblxuXG5cbiAgICAgICAgLy8gQWxsb3cgZm9yIHBpeGVsIHJvdW5kaW5nXG4gICAgICAgIGlmIChyZW5kZXJlci5yb3VuZFBpeGVscylcbiAgICAgICAge1xuICAgICAgICAgICAgcmVuZGVyZXIuY29udGV4dC5zZXRUcmFuc2Zvcm0oXG4gICAgICAgICAgICAgICAgd3QuYSxcbiAgICAgICAgICAgICAgICB3dC5iLFxuICAgICAgICAgICAgICAgIHd0LmMsXG4gICAgICAgICAgICAgICAgd3QuZCxcbiAgICAgICAgICAgICAgICAod3QudHggKiByZW5kZXJlci5yZXNvbHV0aW9uKSB8IDAsXG4gICAgICAgICAgICAgICAgKHd0LnR5ICogcmVuZGVyZXIucmVzb2x1dGlvbikgfCAwXG4gICAgICAgICAgICApO1xuXG4gICAgICAgICAgICBkeCA9IGR4IHwgMDtcbiAgICAgICAgICAgIGR5ID0gZHkgfCAwO1xuICAgICAgICB9XG4gICAgICAgIGVsc2VcbiAgICAgICAge1xuXG4gICAgICAgICAgICByZW5kZXJlci5jb250ZXh0LnNldFRyYW5zZm9ybShcbiAgICAgICAgICAgICAgICB3dC5hLFxuICAgICAgICAgICAgICAgIHd0LmIsXG4gICAgICAgICAgICAgICAgd3QuYyxcbiAgICAgICAgICAgICAgICB3dC5kLFxuICAgICAgICAgICAgICAgIHd0LnR4ICogcmVuZGVyZXIucmVzb2x1dGlvbixcbiAgICAgICAgICAgICAgICB3dC50eSAqIHJlbmRlcmVyLnJlc29sdXRpb25cbiAgICAgICAgICAgICk7XG5cblxuICAgICAgICB9XG5cbiAgICAgICAgdmFyIHJlc29sdXRpb24gPSB0ZXh0dXJlLmJhc2VUZXh0dXJlLnJlc29sdXRpb247XG5cbiAgICAgICAgaWYgKHRoaXMudGludCAhPT0gMHhGRkZGRkYpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmNhY2hlZFRpbnQgIT09IHRoaXMudGludClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB0aGlzLmNhY2hlZFRpbnQgPSB0aGlzLnRpbnQ7XG5cbiAgICAgICAgICAgICAgICAvLyBUT0RPIGNsZWFuIHVwIGNhY2hpbmcgLSBob3cgdG8gY2xlYW4gdXAgdGhlIGNhY2hlcz9cbiAgICAgICAgICAgICAgICB0aGlzLnRpbnRlZFRleHR1cmUgPSBDYW52YXNUaW50ZXIuZ2V0VGludGVkVGV4dHVyZSh0aGlzLCB0aGlzLnRpbnQpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZW5kZXJlci5jb250ZXh0LmRyYXdJbWFnZShcbiAgICAgICAgICAgICAgICB0aGlzLnRpbnRlZFRleHR1cmUsXG4gICAgICAgICAgICAgICAgMCxcbiAgICAgICAgICAgICAgICAwLFxuICAgICAgICAgICAgICAgIHdpZHRoICogcmVzb2x1dGlvbixcbiAgICAgICAgICAgICAgICBoZWlnaHQgKiByZXNvbHV0aW9uLFxuICAgICAgICAgICAgICAgIGR4ICogcmVuZGVyZXIucmVzb2x1dGlvbixcbiAgICAgICAgICAgICAgICBkeSAqIHJlbmRlcmVyLnJlc29sdXRpb24sXG4gICAgICAgICAgICAgICAgd2lkdGggKiByZW5kZXJlci5yZXNvbHV0aW9uLFxuICAgICAgICAgICAgICAgIGhlaWdodCAqIHJlbmRlcmVyLnJlc29sdXRpb25cbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgICByZW5kZXJlci5jb250ZXh0LmRyYXdJbWFnZShcbiAgICAgICAgICAgICAgICB0ZXh0dXJlLmJhc2VUZXh0dXJlLnNvdXJjZSxcbiAgICAgICAgICAgICAgICB0ZXh0dXJlLmNyb3AueCAqIHJlc29sdXRpb24sXG4gICAgICAgICAgICAgICAgdGV4dHVyZS5jcm9wLnkgKiByZXNvbHV0aW9uLFxuICAgICAgICAgICAgICAgIHdpZHRoICogcmVzb2x1dGlvbixcbiAgICAgICAgICAgICAgICBoZWlnaHQgKiByZXNvbHV0aW9uLFxuICAgICAgICAgICAgICAgIGR4ICAqIHJlbmRlcmVyLnJlc29sdXRpb24sXG4gICAgICAgICAgICAgICAgZHkgICogcmVuZGVyZXIucmVzb2x1dGlvbixcbiAgICAgICAgICAgICAgICB3aWR0aCAqIHJlbmRlcmVyLnJlc29sdXRpb24sXG4gICAgICAgICAgICAgICAgaGVpZ2h0ICogcmVuZGVyZXIucmVzb2x1dGlvblxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgIH1cbn07XG5cbi8qKlxuICogRGVzdHJveXMgdGhpcyBzcHJpdGUgYW5kIG9wdGlvbmFsbHkgaXRzIHRleHR1cmVcbiAqXG4gKiBAcGFyYW0gW2Rlc3Ryb3lUZXh0dXJlPWZhbHNlXSB7Ym9vbGVhbn0gU2hvdWxkIGl0IGRlc3Ryb3kgdGhlIGN1cnJlbnQgdGV4dHVyZSBvZiB0aGUgc3ByaXRlIGFzIHdlbGxcbiAqIEBwYXJhbSBbZGVzdHJveUJhc2VUZXh0dXJlPWZhbHNlXSB7Ym9vbGVhbn0gU2hvdWxkIGl0IGRlc3Ryb3kgdGhlIGJhc2UgdGV4dHVyZSBvZiB0aGUgc3ByaXRlIGFzIHdlbGxcbiAqL1xuU3ByaXRlLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKGRlc3Ryb3lUZXh0dXJlLCBkZXN0cm95QmFzZVRleHR1cmUpXG57XG4gICAgQ29udGFpbmVyLnByb3RvdHlwZS5kZXN0cm95LmNhbGwodGhpcyk7XG5cbiAgICB0aGlzLmFuY2hvciA9IG51bGw7XG5cbiAgICBpZiAoZGVzdHJveVRleHR1cmUpXG4gICAge1xuICAgICAgICB0aGlzLl90ZXh0dXJlLmRlc3Ryb3koZGVzdHJveUJhc2VUZXh0dXJlKTtcbiAgICB9XG5cbiAgICB0aGlzLl90ZXh0dXJlID0gbnVsbDtcbiAgICB0aGlzLnNoYWRlciA9IG51bGw7XG59O1xuXG4vLyBzb21lIGhlbHBlciBmdW5jdGlvbnMuLlxuXG4vKipcbiAqIEhlbHBlciBmdW5jdGlvbiB0aGF0IGNyZWF0ZXMgYSBzcHJpdGUgdGhhdCB3aWxsIGNvbnRhaW4gYSB0ZXh0dXJlIGZyb20gdGhlIFRleHR1cmVDYWNoZSBiYXNlZCBvbiB0aGUgZnJhbWVJZFxuICogVGhlIGZyYW1lIGlkcyBhcmUgY3JlYXRlZCB3aGVuIGEgVGV4dHVyZSBwYWNrZXIgZmlsZSBoYXMgYmVlbiBsb2FkZWRcbiAqXG4gKiBAc3RhdGljXG4gKiBAcGFyYW0gZnJhbWVJZCB7c3RyaW5nfSBUaGUgZnJhbWUgSWQgb2YgdGhlIHRleHR1cmUgaW4gdGhlIGNhY2hlXG4gKiBAcGFyYW0gW2Nyb3Nzb3JpZ2luPShhdXRvKV0ge2Jvb2xlYW59IGlmIHlvdSB3YW50IHRvIHNwZWNpZnkgdGhlIGNyb3NzLW9yaWdpbiBwYXJhbWV0ZXJcbiAqIEBwYXJhbSBbc2NhbGVNb2RlPVBJWEkuU0NBTEVfTU9ERVMuREVGQVVMVF0ge251bWJlcn0gaWYgeW91IHdhbnQgdG8gc3BlY2lmeSB0aGUgc2NhbGUgbW9kZSwgc2VlIHtAbGluayBQSVhJLlNDQUxFX01PREVTfSBmb3IgcG9zc2libGUgdmFsdWVzXG4gKiBAcmV0dXJuIHtQSVhJLlNwcml0ZX0gQSBuZXcgU3ByaXRlIHVzaW5nIGEgdGV4dHVyZSBmcm9tIHRoZSB0ZXh0dXJlIGNhY2hlIG1hdGNoaW5nIHRoZSBmcmFtZUlkXG4gKi9cblNwcml0ZS5mcm9tRnJhbWUgPSBmdW5jdGlvbiAoZnJhbWVJZClcbntcbiAgICB2YXIgdGV4dHVyZSA9IHV0aWxzLlRleHR1cmVDYWNoZVtmcmFtZUlkXTtcblxuICAgIGlmICghdGV4dHVyZSlcbiAgICB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignVGhlIGZyYW1lSWQgXCInICsgZnJhbWVJZCArICdcIiBkb2VzIG5vdCBleGlzdCBpbiB0aGUgdGV4dHVyZSBjYWNoZScpO1xuICAgIH1cblxuICAgIHJldHVybiBuZXcgU3ByaXRlKHRleHR1cmUpO1xufTtcblxuLyoqXG4gKiBIZWxwZXIgZnVuY3Rpb24gdGhhdCBjcmVhdGVzIGEgc3ByaXRlIHRoYXQgd2lsbCBjb250YWluIGEgdGV4dHVyZSBiYXNlZCBvbiBhbiBpbWFnZSB1cmxcbiAqIElmIHRoZSBpbWFnZSBpcyBub3QgaW4gdGhlIHRleHR1cmUgY2FjaGUgaXQgd2lsbCBiZSBsb2FkZWRcbiAqXG4gKiBAc3RhdGljXG4gKiBAcGFyYW0gaW1hZ2VJZCB7c3RyaW5nfSBUaGUgaW1hZ2UgdXJsIG9mIHRoZSB0ZXh0dXJlXG4gKiBAcmV0dXJuIHtQSVhJLlNwcml0ZX0gQSBuZXcgU3ByaXRlIHVzaW5nIGEgdGV4dHVyZSBmcm9tIHRoZSB0ZXh0dXJlIGNhY2hlIG1hdGNoaW5nIHRoZSBpbWFnZSBpZFxuICovXG5TcHJpdGUuZnJvbUltYWdlID0gZnVuY3Rpb24gKGltYWdlSWQsIGNyb3Nzb3JpZ2luLCBzY2FsZU1vZGUpXG57XG4gICAgcmV0dXJuIG5ldyBTcHJpdGUoVGV4dHVyZS5mcm9tSW1hZ2UoaW1hZ2VJZCwgY3Jvc3NvcmlnaW4sIHNjYWxlTW9kZSkpO1xufTtcbiIsInZhciBPYmplY3RSZW5kZXJlciA9IHJlcXVpcmUoJy4uLy4uL3JlbmRlcmVycy93ZWJnbC91dGlscy9PYmplY3RSZW5kZXJlcicpLFxuICAgIFdlYkdMUmVuZGVyZXIgPSByZXF1aXJlKCcuLi8uLi9yZW5kZXJlcnMvd2ViZ2wvV2ViR0xSZW5kZXJlcicpLFxuICAgIFRleHR1cmVTaGFkZXIgPSByZXF1aXJlKCcuLi8uLi9yZW5kZXJlcnMvd2ViZ2wvc2hhZGVycy9fVGV4dHVyZVNoYWRlcicpLFxuICAgIGNyZWF0ZUluZGljZXNGb3JRdWFkcyA9IHJlcXVpcmUoJy4uLy4uL3V0aWxzL2NyZWF0ZUluZGljZXNGb3JRdWFkcycpLFxuICAgIGdlbmVyYXRlTXVsdGlUZXh0dXJlU2hhZGVyID0gcmVxdWlyZSgnLi9nZW5lcmF0ZU11bHRpVGV4dHVyZVNoYWRlcicpLFxuICAgIENPTlNUID0gcmVxdWlyZSgnLi4vLi4vY29uc3QnKSxcbiAgICBnbENvcmUgPSByZXF1aXJlKCdwaXhpLWdsLWNvcmUnKTtcblxuLyoqXG4gKiBAYXV0aG9yIE1hdCBHcm92ZXNcbiAqXG4gKiBCaWcgdGhhbmtzIHRvIHRoZSB2ZXJ5IGNsZXZlciBNYXR0IERlc0xhdXJpZXJzIDxtYXR0ZGVzbD4gaHR0cHM6Ly9naXRodWIuY29tL21hdHRkZXNsL1xuICogZm9yIGNyZWF0aW5nIHRoZSBvcmlnaW5hbCBwaXhpIHZlcnNpb24hXG4gKiBBbHNvIGEgdGhhbmtzIHRvIGh0dHBzOi8vZ2l0aHViLmNvbS9iY2hldmFsaWVyIGZvciB0d2Vha2luZyB0aGUgdGludCBhbmQgYWxwaGEgc28gdGhhdCB0aGV5IG5vdyBzaGFyZSA0IGJ5dGVzIG9uIHRoZSB2ZXJ0ZXggYnVmZmVyXG4gKlxuICogSGVhdmlseSBpbnNwaXJlZCBieSBMaWJHRFgncyBTcHJpdGVSZW5kZXJlcjpcbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS9saWJnZHgvbGliZ2R4L2Jsb2IvbWFzdGVyL2dkeC9zcmMvY29tL2JhZGxvZ2ljL2dkeC9ncmFwaGljcy9nMmQvU3ByaXRlUmVuZGVyZXIuamF2YVxuICovXG5cbi8qKlxuICogUmVuZGVyZXIgZGVkaWNhdGVkIHRvIGRyYXdpbmcgYW5kIGJhdGNoaW5nIHNwcml0ZXMuXG4gKlxuICogQGNsYXNzXG4gKiBAcHJpdmF0ZVxuICogQG1lbWJlcm9mIFBJWElcbiAqIEBleHRlbmRzIFBJWEkuT2JqZWN0UmVuZGVyZXJcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5XZWJHTFJlbmRlcmVyfSBUaGUgcmVuZGVyZXIgdGhpcyBzcHJpdGUgYmF0Y2ggd29ya3MgZm9yLlxuICovXG5mdW5jdGlvbiBTcHJpdGVSZW5kZXJlcihyZW5kZXJlcilcbntcbiAgICBPYmplY3RSZW5kZXJlci5jYWxsKHRoaXMsIHJlbmRlcmVyKTtcblxuICAgIC8qKlxuICAgICAqIE51bWJlciBvZiB2YWx1ZXMgc2VudCBpbiB0aGUgdmVydGV4IGJ1ZmZlci5cbiAgICAgKiBwb3NpdGlvblgsIHBvc2l0aW9uWSwgY29sb3JSLCBjb2xvckcsIGNvbG9yQiA9IDVcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLnZlcnRTaXplID0gNTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBzaXplIG9mIHRoZSB2ZXJ0ZXggaW5mb3JtYXRpb24gaW4gYnl0ZXMuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy52ZXJ0Qnl0ZVNpemUgPSB0aGlzLnZlcnRTaXplICogNDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBudW1iZXIgb2YgaW1hZ2VzIGluIHRoZSBTcHJpdGVCYXRjaCBiZWZvcmUgaXQgZmx1c2hlcy5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLnNpemUgPSBDT05TVC5TUFJJVEVfQkFUQ0hfU0laRTsgLy8gMjAwMCBpcyBhIG5pY2UgYmFsYW5jZSBiZXR3ZWVuIG1vYmlsZSAvIGRlc2t0b3BcblxuICAgIC8vIHRoZSB0b3RhbCBudW1iZXIgb2YgYnl0ZXMgaW4gb3VyIGJhdGNoXG4gICAgdmFyIG51bVZlcnRzID0gKHRoaXMuc2l6ZSAqIDQpICogdGhpcy52ZXJ0Qnl0ZVNpemU7XG5cbiAgICAvLyB0aGUgdG90YWwgbnVtYmVyIG9mIGluZGljZXMgaW4gb3VyIGJhdGNoLCB0aGVyZSBhcmUgNiBwb2ludHMgcGVyIHF1YWQuXG4gICAgdmFyIG51bUluZGljZXMgPSB0aGlzLnNpemUgKiA2O1xuXG4gICAgLyoqXG4gICAgICogSG9sZHMgdGhlIHZlcnRleCBkYXRhIHRoYXQgd2lsbCBiZSBzZW50IHRvIHRoZSB2ZXJ0ZXggc2hhZGVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7QXJyYXlCdWZmZXJ9XG4gICAgICovXG4gICAgdGhpcy52ZXJ0aWNlcyA9IG5ldyBBcnJheUJ1ZmZlcihudW1WZXJ0cyk7XG5cbiAgICAvKipcbiAgICAgKiBWaWV3IG9uIHRoZSB2ZXJ0aWNlcyBhcyBhIEZsb2F0MzJBcnJheSBmb3IgcG9zaXRpb25zXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtGbG9hdDMyQXJyYXl9XG4gICAgICovXG4gICAgdGhpcy5wb3NpdGlvbnMgPSBuZXcgRmxvYXQzMkFycmF5KHRoaXMudmVydGljZXMpO1xuICAgIFxuICAgIC8qKlxuICAgICAqIFZpZXcgb24gdGhlIHZlcnRpY2VzIGFzIGEgVWludDMyQXJyYXkgZm9yIHV2c1xuICAgICAqXG4gICAgICogQG1lbWJlciB7RmxvYXQzMkFycmF5fVxuICAgICAqL1xuICAgIHRoaXMudXZzID0gbmV3IFVpbnQzMkFycmF5KHRoaXMudmVydGljZXMpO1xuXG4gICAgLyoqXG4gICAgICogVmlldyBvbiB0aGUgdmVydGljZXMgYXMgYSBVaW50MzJBcnJheSBmb3IgY29sb3JzXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtVaW50MzJBcnJheX1cbiAgICAgKi9cbiAgICB0aGlzLmNvbG9ycyA9IG5ldyBVaW50MzJBcnJheSh0aGlzLnZlcnRpY2VzKTtcblxuICAgIC8qKlxuICAgICAqIEhvbGRzIHRoZSBpbmRpY2VzIG9mIHRoZSBnZW9tZXRyeSAocXVhZHMpIHRvIGRyYXdcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1VpbnQxNkFycmF5fVxuICAgICAqL1xuICAgIHRoaXMuaW5kaWNlcyA9IGNyZWF0ZUluZGljZXNGb3JRdWFkcyh0aGlzLnNpemUpXG5cbiAgICAvKipcbiAgICAgKiBUaGUgZGVmYXVsdCBzaGFkZXIgdGhhdCBpcyB1c2VkIGlmIGEgc3ByaXRlIGRvZXNuJ3QgaGF2ZSBhIG1vcmUgc3BlY2lmaWMgb25lLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5TaGFkZXJ9XG4gICAgICovXG4gICAgdGhpcy5zaGFkZXIgPSBudWxsO1xuXG4gICAgdGhpcy50ZXh0dXJlQ291bnQgPSAwO1xuICAgIHRoaXMuY3VycmVudEluZGV4ID0gMDtcbiAgXG4gICAgdGhpcy5ncm91cENvdW50ID0gMDtcbiAgICB0aGlzLmdyb3VwcyA9IFtdO1xuICAgIFxuICAgIC8vVE9ETyAtIDMwMCBpcyBhIGJpdCBtYWdpYywgZmlndXJlIG91dCBhIG5pY2VyIGFtb3VudCFcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuc2l6ZTsgaSsrKSBcbiAgICB7XG4gICAgICAgIHRoaXMuZ3JvdXBzW2ldID0ge3RleHR1cmVzOltdLCB0ZXh0dXJlQ291bnQ6MCwgaWRzOltdLCBzaXplOjAsIHN0YXJ0OjAsIGJsZW5kOjB9OyBcbiAgICB9O1xuICAgIFxuICAgIHRoaXMuY3VycmVudEdyb3VwID0gdGhpcy5ncm91cHNbdGhpcy5ncm91cENvdW50KytdO1xuXG4gICAgdGhpcy5jdXJyZW50VGV4dHVyZSA9IG51bGw7ICAgIFxufVxuXG5cblNwcml0ZVJlbmRlcmVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoT2JqZWN0UmVuZGVyZXIucHJvdG90eXBlKTtcblNwcml0ZVJlbmRlcmVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFNwcml0ZVJlbmRlcmVyO1xubW9kdWxlLmV4cG9ydHMgPSBTcHJpdGVSZW5kZXJlcjtcblxuV2ViR0xSZW5kZXJlci5yZWdpc3RlclBsdWdpbignc3ByaXRlJywgU3ByaXRlUmVuZGVyZXIpO1xuXG4vKipcbiAqIFNldHMgdXAgdGhlIHJlbmRlcmVyIGNvbnRleHQgYW5kIG5lY2Vzc2FyeSBidWZmZXJzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0gZ2wge1dlYkdMUmVuZGVyaW5nQ29udGV4dH0gdGhlIGN1cnJlbnQgV2ViR0wgZHJhd2luZyBjb250ZXh0XG4gKi9cblNwcml0ZVJlbmRlcmVyLnByb3RvdHlwZS5vbkNvbnRleHRDaGFuZ2UgPSBmdW5jdGlvbiAoKVxue1xuICAgIHZhciBnbCA9IHRoaXMucmVuZGVyZXIuZ2w7XG5cbiAgICB0aGlzLk1BWF9URVhUVUVTID0gZ2wuZ2V0UGFyYW1ldGVyKGdsLk1BWF9URVhUVVJFX0lNQUdFX1VOSVRTKTtcblxuICAgIHRoaXMuX3NoYWRlciA9IGdlbmVyYXRlTXVsdGlUZXh0dXJlU2hhZGVyKGdsLCB0aGlzLk1BWF9URVhUVUVTKS8vbmV3IFRleHR1cmVTaGFkZXIoZ2wpO1xuXG4gICAgLy8gc2V0dXAgZGVmYXVsdCBzaGFkZXJcbiAgICB0aGlzLnNoYWRlciA9IHRoaXMucmVuZGVyZXIuc2hhZGVyTWFuYWdlci5kZWZhdWx0U2hhZGVyO1xuXG4gICAgLy8gY3JlYXRlIGEgY291cGxlIG9mIGJ1ZmZlcnNcbiAgICB0aGlzLnZlcnRleEJ1ZmZlciA9IGdsQ29yZS5HTEJ1ZmZlci5jcmVhdGVWZXJ0ZXhCdWZmZXIoZ2wsIG51bGwsIGdsLkRZTkFNSUNfRFJBVyk7XG4gICAgdGhpcy5pbmRleEJ1ZmZlciA9IGdsQ29yZS5HTEJ1ZmZlci5jcmVhdGVJbmRleEJ1ZmZlcihnbCwgdGhpcy5pbmRpY2VzLCBnbC5TVEFUSUNfRFJBVyk7XG5cbiAgICAvLyBidWlsZCB0aGUgdmFvIG9iamVjdCB0aGF0IHdpbGwgcmVuZGVyLi5cbiAgICB0aGlzLnZhbyA9IG5ldyBnbENvcmUuVmVydGV4QXJyYXlPYmplY3QoZ2wpO1xuXG4gICAgdGhpcy52YW8uYWRkSW5kZXgodGhpcy5pbmRleEJ1ZmZlcik7XG4gICAgdGhpcy52YW8uYWRkQXR0cmlidXRlKHRoaXMudmVydGV4QnVmZmVyLCB0aGlzLl9zaGFkZXIuYXR0cmlidXRlcy5hVmVydGV4UG9zaXRpb24sIGdsLkZMT0FULCBmYWxzZSwgdGhpcy52ZXJ0Qnl0ZVNpemUsIDApO1xuICAgIHRoaXMudmFvLmFkZEF0dHJpYnV0ZSh0aGlzLnZlcnRleEJ1ZmZlciwgdGhpcy5fc2hhZGVyLmF0dHJpYnV0ZXMuYVRleHR1cmVDb29yZCwgZ2wuVU5TSUdORURfU0hPUlQsIHRydWUsIHRoaXMudmVydEJ5dGVTaXplLCAyICogNCk7XG4gICAgdGhpcy52YW8uYWRkQXR0cmlidXRlKHRoaXMudmVydGV4QnVmZmVyLCB0aGlzLl9zaGFkZXIuYXR0cmlidXRlcy5hQ29sb3IsIGdsLlVOU0lHTkVEX0JZVEUsIHRydWUsIHRoaXMudmVydEJ5dGVTaXplLCAzICogNCk7XG4gICAgdGhpcy52YW8uYWRkQXR0cmlidXRlKHRoaXMudmVydGV4QnVmZmVyLCB0aGlzLl9zaGFkZXIuYXR0cmlidXRlcy5hVGV4dHVyZUlkLCBnbC5GTE9BVCwgZmFsc2UsIHRoaXMudmVydEJ5dGVTaXplLCA0ICogNCk7XG5cbiAgICB0aGlzLmN1cnJlbnRCbGVuZE1vZGUgPSA5OTk5OTtcbn07XG5cbi8qKlxuICogUmVuZGVycyB0aGUgc3ByaXRlIG9iamVjdC5cbiAqXG4gKiBAcGFyYW0gc3ByaXRlIHtQSVhJLlNwcml0ZX0gdGhlIHNwcml0ZSB0byByZW5kZXIgd2hlbiB1c2luZyB0aGlzIHNwcml0ZWJhdGNoXG4gKi9cblNwcml0ZVJlbmRlcmVyLnByb3RvdHlwZS5yZW5kZXIgPSBmdW5jdGlvbiAoc3ByaXRlKVxue1xuICAgIC8vVE9ETyBzZXQgYmxlbmQgbW9kZXMuLlxuICAgIC8vIGNoZWNrIHRleHR1cmUuLlxuICAgIGlmICh0aGlzLmN1cnJlbnRJbmRleCA+PSB0aGlzLnNpemUpXG4gICAge1xuICAgICAgICB0aGlzLmZsdXNoKCk7XG4gICAgfVxuXG4gIFxuICAgIC8vIGdldCB0aGUgdXZzIGZvciB0aGUgdGV4dHVyZVxuICAgXG5cbiAgICAvLyBpZiB0aGUgdXZzIGhhdmUgbm90IHVwZGF0ZWQgdGhlbiBubyBwb2ludCByZW5kZXJpbmcganVzdCB5ZXQhXG4gICAgaWYgKCFzcHJpdGUudGV4dHVyZS5fdXZzKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgICAvLyBwdXNoIGEgdGV4dHVyZS5cbiAgICAvLyBpbmNyZW1lbnQgdGhlIGJhdGNoc2l6ZVxuICAgIHZhciBuZXh0VGV4dHVyZSA9ICBzcHJpdGUudGV4dHVyZS5iYXNlVGV4dHVyZTtcbiAgICB2YXIgY3VycmVudEdyb3VwID0gdGhpcy5jdXJyZW50R3JvdXA7XG4gICAgdmFyIGk7XG5cbiAgICBpZih0aGlzLmN1cnJlbnRUZXh0dXJlICE9PSBuZXh0VGV4dHVyZSlcbiAgICB7XG4gICAgICAgIHRoaXMuY3VycmVudFRleHR1cmUgPSBuZXh0VGV4dHVyZTtcbiAgICAgICAgXG4gICAgICAgIGlmKCFuZXh0VGV4dHVyZS5fZW5hYmxlZClcbiAgICAgICAge1xuICAgICAgICAgICAgbmV4dFRleHR1cmUuX2VuYWJsZWQgPSB0cnVlO1xuICAgICAgICAgICAgbmV4dFRleHR1cmUuX2lkID0gdGhpcy50ZXh0dXJlQ291bnQ7XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIGlmKHRoaXMudGV4dHVyZUNvdW50ID09PSB0aGlzLk1BWF9URVhUVUVTKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGZvciAoIGkgPSAwOyBpIDwgY3VycmVudEdyb3VwLnRleHR1cmVDb3VudDsgaSsrKSBcbiAgICAgICAgICAgICAgICB7ICAgICBcbiAgICAgICAgICAgICAgICAgICAgY3VycmVudEdyb3VwLnRleHR1cmVzW2ldLl9lbmFibGVkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgIHRoaXMudGV4dHVyZUNvdW50ID0gMDtcblxuICAgICAgICAgICAgICAgIGN1cnJlbnRHcm91cC5zaXplID0gdGhpcy5jdXJyZW50SW5kZXggLSBjdXJyZW50R3JvdXAuc3RhcnQ7XG4gICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICBjdXJyZW50R3JvdXAgPSB0aGlzLmN1cnJlbnRHcm91cCA9IHRoaXMuZ3JvdXBzW3RoaXMuZ3JvdXBDb3VudCsrXTtcbiAgICAgICAgICAgICAgICBjdXJyZW50R3JvdXAudGV4dHVyZUNvdW50ID0gMDtcbiAgICAgICAgICAgICAgICBjdXJyZW50R3JvdXAuc3RhcnQgPSB0aGlzLmN1cnJlbnRJbmRleDtcbiAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY3VycmVudEdyb3VwLnRleHR1cmVzW2N1cnJlbnRHcm91cC50ZXh0dXJlQ291bnQrK10gPSBuZXh0VGV4dHVyZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMudGV4dHVyZUNvdW50Kys7XG4gICAgfVxuXG4gICAgLy8gVE9ETyB0cmltPz9cbiAgICB2YXIgaW5kZXggPSB0aGlzLmN1cnJlbnRJbmRleCAqIHRoaXMudmVydEJ5dGVTaXplO1xuXG4gICAgdGhpcy5jdXJyZW50SW5kZXgrKztcblxuICAgIC8vIHVwbG9hZCB0aGUgc3ByaXRlIGVsZW1ldG5zLi4uXG4gICAgLy8gdGhleSBoYXZlIGFsbCByZWFkeSBiZWVuIGNhbGN1bGF0ZWQgc28gd2UganVzdCBuZWVkIHRvIHB1c2ggdGhlbSBpbnRvIHRoZSBidWZmZXIuXG4gICAgdmFyIGNvbG9ycyA9IHRoaXMuY29sb3JzO1xuICAgIHZhciBwb3NpdGlvbnMgPSB0aGlzLnBvc2l0aW9ucztcbiAgICB2YXIgdmVydGV4RGF0YSA9IHNwcml0ZS52ZXJ0ZXhEYXRhXG4gICAgdmFyIHRpbnQgPSAoc3ByaXRlLnRpbnQgPj4gMTYpICsgKHNwcml0ZS50aW50ICYgMHhmZjAwKSArICgoc3ByaXRlLnRpbnQgJiAweGZmKSA8PCAxNikgKyAoc3ByaXRlLndvcmxkQWxwaGEgKiAyNTUgPDwgMjQpO1xuICAgIHZhciB1dnMgPSBzcHJpdGUudGV4dHVyZS5fdXZzLnV2c191aW50MzI7XG4gICAgLy94eVxuICAgIHBvc2l0aW9uc1tpbmRleCsrXSA9IHZlcnRleERhdGFbMF07XG4gICAgcG9zaXRpb25zW2luZGV4KytdID0gdmVydGV4RGF0YVsxXTtcbiAgICB0aGlzLnV2c1tpbmRleCsrXSA9IHV2c1swXTtcbiAgICBjb2xvcnNbaW5kZXgrK10gPSB0aW50O1xuICAgIHBvc2l0aW9uc1tpbmRleCsrXSA9IG5leHRUZXh0dXJlLl9pZDsgXG4gICAgXG4gICAgLy8geHlcbiAgICBwb3NpdGlvbnNbaW5kZXgrK10gPSB2ZXJ0ZXhEYXRhWzJdO1xuICAgIHBvc2l0aW9uc1tpbmRleCsrXSA9IHZlcnRleERhdGFbM107XG4gICAgdGhpcy51dnNbaW5kZXgrK10gPSB1dnNbMV07XG4gICAgY29sb3JzW2luZGV4KytdID0gdGludDtcbiAgICBwb3NpdGlvbnNbaW5kZXgrK10gPSBuZXh0VGV4dHVyZS5faWQ7XG5cbiAgICAgLy8geHlcbiAgICBwb3NpdGlvbnNbaW5kZXgrK10gPSB2ZXJ0ZXhEYXRhWzRdO1xuICAgIHBvc2l0aW9uc1tpbmRleCsrXSA9IHZlcnRleERhdGFbNV07XG4gICAgdGhpcy51dnNbaW5kZXgrK10gPSB1dnNbMl07XG4gICAgY29sb3JzW2luZGV4KytdID0gdGludDtcbiAgICBwb3NpdGlvbnNbaW5kZXgrK10gPSBuZXh0VGV4dHVyZS5faWQ7XG5cbiAgICAvLyB4eVxuICAgIHBvc2l0aW9uc1tpbmRleCsrXSA9IHZlcnRleERhdGFbNl07XG4gICAgcG9zaXRpb25zW2luZGV4KytdID0gdmVydGV4RGF0YVs3XTtcbiAgICB0aGlzLnV2c1tpbmRleCsrXSA9IHV2c1szXTtcbiAgICBjb2xvcnNbaW5kZXgrK10gPSB0aW50O1xuICAgIHBvc2l0aW9uc1tpbmRleCsrXSA9IG5leHRUZXh0dXJlLl9pZDtcbn07XG5cbi8qKlxuICogUmVuZGVycyB0aGUgY29udGVudCBhbmQgZW1wdGllcyB0aGUgY3VycmVudCBiYXRjaC5cbiAqXG4gKi9cblNwcml0ZVJlbmRlcmVyLnByb3RvdHlwZS5mbHVzaCA9IGZ1bmN0aW9uICgpXG57XG4gICAgaWYgKHRoaXMuY3VycmVudEluZGV4ID09PSAwKXJldHVybjtcblxuICAgIHZhciBnbCA9IHRoaXMucmVuZGVyZXIuZ2w7XG5cblxuICAgIHRoaXMuY3VycmVudEdyb3VwLnNpemUgPSB0aGlzLmN1cnJlbnRJbmRleCAtIHRoaXMuY3VycmVudEdyb3VwLnN0YXJ0O1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5jdXJyZW50R3JvdXAudGV4dHVyZUNvdW50OyBpKyspIFxuICAgIHsgICAgIFxuICAgICAgICB0aGlzLmN1cnJlbnRHcm91cC50ZXh0dXJlc1tpXS5fZW5hYmxlZCA9IGZhbHNlO1xuICAgIH07XG4gICBcbiAgICAvLyBkbyBzb21lIHNtYXJ0IGFycmF5IHN0dWZmLi5cbiAgICAvLyBkb3VibGUgc2l6ZSBzbyB3ZSBkb250IGFsd2F5IHN1YmFycmF5IHRoZSBlbGVtZW50cy4uXG4gICAgLy8gdXBsb2FkIHRoZSB2ZXJ0cyB0byB0aGUgYnVmZmVyXG4gICAgaWYgKHRoaXMuY3VycmVudEJhdGNoU2l6ZSA+ICggdGhpcy5zaXplICogMC41ICkgKVxuICAgIHtcbiAgICAgICAgdGhpcy52ZXJ0ZXhCdWZmZXIudXBsb2FkKHRoaXMudmVydGljZXMsIDAsIHRydWUpO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICAvLyBvIGsgLi4gc3ViIGFycmF5IGlzIFNMT1c+P1xuICAgICAgICB2YXIgdmlldyA9IHRoaXMucG9zaXRpb25zLnN1YmFycmF5KDAsIHRoaXMuY3VycmVudEluZGV4ICogdGhpcy52ZXJ0Qnl0ZVNpemUpO1xuICAgICAgICB0aGlzLnZlcnRleEJ1ZmZlci51cGxvYWQodmlldywgMCwgdHJ1ZSk7XG4gICAgfVxuXG4gICAgLy8gYmluZCBzaGFkZXIuLlxuICAgIHRoaXMucmVuZGVyZXIuYmluZFNoYWRlcih0aGlzLl9zaGFkZXIpO1xuICAgIHRoaXMucmVuZGVyZXIuYmxlbmRNb2RlTWFuYWdlci5zZXRCbGVuZE1vZGUoIDAgKTtcblxuICAgIC8vLyByZW5kZXIgdGhlIGdyb3Vwcy4uXG4gICAgZm9yIChpID0gMDsgaSA8IHRoaXMuZ3JvdXBDb3VudDsgaSsrKSB7XG4gICAgICAgIFxuICAgICAgICB2YXIgZ3JvdXAgPSB0aGlzLmdyb3Vwc1tpXTtcblxuICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IGdyb3VwLnRleHR1cmVDb3VudDsgaisrKSB7XG4gICAgICAgICAgICB0aGlzLnJlbmRlcmVyLmJpbmRUZXh0dXJlKGdyb3VwLnRleHR1cmVzW2pdLCBqKTtcbiAgICAgICAgfTtcblxuICAgICAgICBnbC5kcmF3RWxlbWVudHMoZ2wuVFJJQU5HTEVTLCBncm91cC5zaXplICogNiwgZ2wuVU5TSUdORURfU0hPUlQsIGdyb3VwLnN0YXJ0ICogNiAqIDIpO1xuICAgIH07XG5cbiAgICAvLyByZXNldCBlbGVtZW50cyBmb3IgdGhlIG5leHQgZmx1c2hcbiAgICB0aGlzLmN1cnJlbnRUZXh0dXJlID0gbnVsbDtcbiAgICB0aGlzLmN1cnJlbnRJbmRleCA9IDA7XG4gICAgdGhpcy50ZXh0dXJlQ291bnQgPSAwO1xuICAgIHRoaXMuZ3JvdXBDb3VudCA9IDA7XG4gICAgXG4gICAgdGhpcy5jdXJyZW50R3JvdXAgPSB0aGlzLmdyb3Vwc1t0aGlzLmdyb3VwQ291bnQrK107XG4gICAgdGhpcy5jdXJyZW50R3JvdXAudGV4dHVyZUNvdW50ID0gMDtcbn07XG5cbi8qKlxuICogU3RhcnRzIGEgbmV3IHNwcml0ZSBiYXRjaC5cbiAqXG4gKi9cblNwcml0ZVJlbmRlcmVyLnByb3RvdHlwZS5zdGFydCA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy52YW8uYmluZCgpO1xufTtcblxuU3ByaXRlUmVuZGVyZXIucHJvdG90eXBlLnN0b3AgPSBmdW5jdGlvbiAoKVxue1xuICAgIHRoaXMuZmx1c2goKTtcbiAgICB0aGlzLnZhby51bmJpbmQoKTtcbn07XG4vKipcbiAqIERlc3Ryb3lzIHRoZSBTcHJpdGVCYXRjaC5cbiAqXG4gKi9cblNwcml0ZVJlbmRlcmVyLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLnZlcnRleEJ1ZmZlci5kZXN0cm95KCk7XG4gICAgdGhpcy5pbmRleEJ1ZmZlci5kZXN0cm95KCk7XG5cbiAgICBPYmplY3RSZW5kZXJlci5wcm90b3R5cGUuZGVzdHJveS5jYWxsKHRoaXMpO1xuXG4gICAgdGhpcy5zaGFkZXIuZGVzdHJveSgpO1xuXG4gICAgdGhpcy5yZW5kZXJlciA9IG51bGw7XG5cbiAgICB0aGlzLnZlcnRpY2VzID0gbnVsbDtcbiAgICB0aGlzLnBvc2l0aW9ucyA9IG51bGw7XG4gICAgdGhpcy5jb2xvcnMgPSBudWxsO1xuICAgIHRoaXMuaW5kaWNlcyA9IG51bGw7XG5cbiAgICB0aGlzLnZlcnRleEJ1ZmZlciA9IG51bGw7XG4gICAgdGhpcy5pbmRleEJ1ZmZlciA9IG51bGw7XG5cbiAgICB0aGlzLnNwcml0ZXMgPSBudWxsO1xuICAgIHRoaXMuc2hhZGVyID0gbnVsbDtcbn07XG4iLCJ2YXIgU2hhZGVyID0gcmVxdWlyZSgncGl4aS1nbC1jb3JlJykuR0xTaGFkZXI7XG5cblxuZnVuY3Rpb24gZ2VuZXJhdGVNdWx0aVRleHR1cmVTaGFkZXIoZ2wsIG1heFRleHR1cmVzKVxue1xuICAgIHZhciB2ZXJ0ZXhTcmMgPSBcInByZWNpc2lvbiBsb3dwIGZsb2F0O1xcbmF0dHJpYnV0ZSB2ZWMyIGFWZXJ0ZXhQb3NpdGlvbjtcXG5hdHRyaWJ1dGUgdmVjMiBhVGV4dHVyZUNvb3JkO1xcbmF0dHJpYnV0ZSB2ZWM0IGFDb2xvcjtcXG5hdHRyaWJ1dGUgZmxvYXQgYVRleHR1cmVJZDtcXG5cXG51bmlmb3JtIG1hdDMgcHJvamVjdGlvbk1hdHJpeDtcXG5cXG52YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDtcXG52YXJ5aW5nIHZlYzQgdkNvbG9yO1xcbnZhcnlpbmcgZmxvYXQgdlRleHR1cmVJZDtcXG5cXG52b2lkIG1haW4odm9pZCl7XFxuICAgZ2xfUG9zaXRpb24gPSB2ZWM0KChwcm9qZWN0aW9uTWF0cml4ICogdmVjMyhhVmVydGV4UG9zaXRpb24sIDEuMCkpLnh5LCAwLjAsIDEuMCk7XFxuICAgdlRleHR1cmVDb29yZCA9IGFUZXh0dXJlQ29vcmQ7XFxuICAgdlRleHR1cmVJZCA9IGFUZXh0dXJlSWQ7XFxuICAgdkNvbG9yID0gdmVjNChhQ29sb3IucmdiICogYUNvbG9yLmEsIGFDb2xvci5hKTtcXG59XCI7XG4gICAgdmFyIGZyYWdtZW50U3JjID0gJ3ByZWNpc2lvbiBsb3dwIGZsb2F0O1xcblxcbicgKyBnZW5lcmF0ZVNhbXBsZVNyYyhtYXhUZXh0dXJlcykgKyBcIlxcblxcblwiICsgZnJhZ1RlbXBsYXRlXG5cbiAgICBmcmFnbWVudFNyYyA9IGZyYWdtZW50U3JjLnJlcGxhY2UoL1xcJVxcJS9naSwgJzE2Jyk7XG5cbiAgICB2YXIgc2hhZGVyID0gbmV3IFNoYWRlcihnbCwgdmVydGV4U3JjLCBmcmFnbWVudFNyYyk7XG5cblxuICAgIHZhciBzYW1wbGVWYWx1ZXMgPSBbXTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG1heFRleHR1cmVzOyBpKyspIHtcbiAgICAgICAgc2FtcGxlVmFsdWVzW2ldID0gaTtcbiAgICB9O1xuXG4gICAgc2hhZGVyLmJpbmQoKTtcbiAgICBzaGFkZXIudW5pZm9ybXMudVNhbXBsZXJzID0gc2FtcGxlVmFsdWVzO1xuXG4gICAgcmV0dXJuIHNoYWRlcjtcbn1cblxuZnVuY3Rpb24gZ2VuZXJhdGVTYW1wbGVTcmMobWF4VGV4dHVyZXMpXG57XG4gICAgdmFyIHNyYyA9ICd2ZWM0IGdldFNhbXBsZUZyb21BcnJheShzYW1wbGVyMkQgdGV4dHVyZXNbJSVdLCBpbnQgbmR4LCB2ZWMyIHV2KSB7XFxuXFxudmVjNCBjb2xvcjsnXG5cbiAgICBzcmMgKz0gJ1xcbic7XG4gICAgc3JjICs9ICdcXG4nO1xuICAgIFxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbWF4VGV4dHVyZXM7IGkrKykgXG4gICAge1xuICAgICAgICBpZihpID4gMClzcmMgKz0gJ1xcbmVsc2UgJztcbiAgICAgICAgaWYoaSA8IG1heFRleHR1cmVzLTEpc3JjICs9ICdpZihuZHggPT0gJyArIGkgKyAnKSc7XG4gICAgICAgIHNyYyArPSAnXFxueyc7XG4gICAgICAgIHNyYyArPSAnXFxuXFx0Y29sb3IgPSB0ZXh0dXJlMkQodGV4dHVyZXNbJytpKyddLCB1dik7JztcbiAgICAgICAgc3JjICs9ICdcXG59JztcbiAgICB9O1xuXG4gICAgc3JjICs9ICdcXG4nO1xuICAgIHNyYyArPSAnXFxuJztcbiAgICBzcmMgKz0gJ3JldHVybiBjb2xvcjsnO1xuICAgIHNyYyArPSAnXFxufSc7XG5cbiAgICByZXR1cm4gc3JjO1xufVxuXG52YXIgZnJhZ1RlbXBsYXRlID0gW1xuXG4gICAgJ3ZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkOycsXG4gICAgJ3ZhcnlpbmcgdmVjNCB2Q29sb3I7JyxcbiAgICAndmFyeWluZyBmbG9hdCB2VGV4dHVyZUlkOycsXG4gICAgJ3VuaWZvcm0gc2FtcGxlcjJEIHVTYW1wbGVyc1slJV07JyxcblxuICAgICd2b2lkIG1haW4odm9pZCl7JyxcbiAgICAgICAgJ2dsX0ZyYWdDb2xvciA9IGdldFNhbXBsZUZyb21BcnJheSh1U2FtcGxlcnMsIGludCh2VGV4dHVyZUlkKSwgdlRleHR1cmVDb29yZCkgKiB2Q29sb3I7JyxcbiAgICAnfSdcbl0uam9pbignXFxuJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZ2VuZXJhdGVNdWx0aVRleHR1cmVTaGFkZXI7XG4iLCJ2YXIgU3ByaXRlID0gcmVxdWlyZSgnLi4vc3ByaXRlcy9TcHJpdGUnKSxcbiAgICBUZXh0dXJlID0gcmVxdWlyZSgnLi4vdGV4dHVyZXMvVGV4dHVyZScpLFxuICAgIG1hdGggPSByZXF1aXJlKCcuLi9tYXRoJyksXG4gICAgdXRpbHMgPSByZXF1aXJlKCcuLi91dGlscycpLFxuICAgIENPTlNUID0gcmVxdWlyZSgnLi4vY29uc3QnKTtcblxuLyoqXG4gKiBBIFRleHQgT2JqZWN0IHdpbGwgY3JlYXRlIGEgbGluZSBvciBtdWx0aXBsZSBsaW5lcyBvZiB0ZXh0LiBUbyBzcGxpdCBhIGxpbmUgeW91IGNhbiB1c2UgJ1xcbicgaW4geW91ciB0ZXh0IHN0cmluZyxcbiAqIG9yIGFkZCBhIHdvcmRXcmFwIHByb3BlcnR5IHNldCB0byB0cnVlIGFuZCBhbmQgd29yZFdyYXBXaWR0aCBwcm9wZXJ0eSB3aXRoIGEgdmFsdWUgaW4gdGhlIHN0eWxlIG9iamVjdC5cbiAqXG4gKiBBIFRleHQgY2FuIGJlIGNyZWF0ZWQgZGlyZWN0bHkgZnJvbSBhIHN0cmluZyBhbmQgYSBzdHlsZSBvYmplY3RcbiAqXG4gKiBgYGBqc1xuICogdmFyIHRleHQgPSBuZXcgUElYSS5UZXh0KCdUaGlzIGlzIGEgcGl4aSB0ZXh0Jyx7Zm9udCA6ICcyNHB4IEFyaWFsJywgZmlsbCA6IDB4ZmYxMDEwLCBhbGlnbiA6ICdjZW50ZXInfSk7XG4gKiBgYGBcbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuU3ByaXRlXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIHRleHQge3N0cmluZ30gVGhlIGNvcHkgdGhhdCB5b3Ugd291bGQgbGlrZSB0aGUgdGV4dCB0byBkaXNwbGF5XG4gKiBAcGFyYW0gW3N0eWxlXSB7b2JqZWN0fSBUaGUgc3R5bGUgcGFyYW1ldGVyc1xuICogQHBhcmFtIFtzdHlsZS5mb250XSB7c3RyaW5nfSBkZWZhdWx0ICdib2xkIDIwcHggQXJpYWwnIFRoZSBzdHlsZSBhbmQgc2l6ZSBvZiB0aGUgZm9udFxuICogQHBhcmFtIFtzdHlsZS5maWxsPSdibGFjayddIHtTdHJpbmd8TnVtYmVyfSBBIGNhbnZhcyBmaWxsc3R5bGUgdGhhdCB3aWxsIGJlIHVzZWQgb24gdGhlIHRleHQgZS5nICdyZWQnLCAnIzAwRkYwMCdcbiAqIEBwYXJhbSBbc3R5bGUuYWxpZ249J2xlZnQnXSB7c3RyaW5nfSBBbGlnbm1lbnQgZm9yIG11bHRpbGluZSB0ZXh0ICgnbGVmdCcsICdjZW50ZXInIG9yICdyaWdodCcpLCBkb2VzIG5vdCBhZmZlY3Qgc2luZ2xlIGxpbmUgdGV4dFxuICogQHBhcmFtIFtzdHlsZS5zdHJva2VdIHtTdHJpbmd8TnVtYmVyfSBBIGNhbnZhcyBmaWxsc3R5bGUgdGhhdCB3aWxsIGJlIHVzZWQgb24gdGhlIHRleHQgc3Ryb2tlIGUuZyAnYmx1ZScsICcjRkNGRjAwJ1xuICogQHBhcmFtIFtzdHlsZS5zdHJva2VUaGlja25lc3M9MF0ge251bWJlcn0gQSBudW1iZXIgdGhhdCByZXByZXNlbnRzIHRoZSB0aGlja25lc3Mgb2YgdGhlIHN0cm9rZS4gRGVmYXVsdCBpcyAwIChubyBzdHJva2UpXG4gKiBAcGFyYW0gW3N0eWxlLndvcmRXcmFwPWZhbHNlXSB7Ym9vbGVhbn0gSW5kaWNhdGVzIGlmIHdvcmQgd3JhcCBzaG91bGQgYmUgdXNlZFxuICogQHBhcmFtIFtzdHlsZS53b3JkV3JhcFdpZHRoPTEwMF0ge251bWJlcn0gVGhlIHdpZHRoIGF0IHdoaWNoIHRleHQgd2lsbCB3cmFwLCBpdCBuZWVkcyB3b3JkV3JhcCB0byBiZSBzZXQgdG8gdHJ1ZVxuICogQHBhcmFtIFtzdHlsZS5saW5lSGVpZ2h0XSB7bnVtYmVyfSBUaGUgbGluZSBoZWlnaHQsIGEgbnVtYmVyIHRoYXQgcmVwcmVzZW50cyB0aGUgdmVydGljYWwgc3BhY2UgdGhhdCBhIGxldHRlciB1c2VzXG4gKiBAcGFyYW0gW3N0eWxlLmRyb3BTaGFkb3c9ZmFsc2VdIHtib29sZWFufSBTZXQgYSBkcm9wIHNoYWRvdyBmb3IgdGhlIHRleHRcbiAqIEBwYXJhbSBbc3R5bGUuZHJvcFNoYWRvd0NvbG9yPScjMDAwMDAwJ10ge3N0cmluZ30gQSBmaWxsIHN0eWxlIHRvIGJlIHVzZWQgb24gdGhlIGRyb3BzaGFkb3cgZS5nICdyZWQnLCAnIzAwRkYwMCdcbiAqIEBwYXJhbSBbc3R5bGUuZHJvcFNoYWRvd0FuZ2xlPU1hdGguUEkvNF0ge251bWJlcn0gU2V0IGEgYW5nbGUgb2YgdGhlIGRyb3Agc2hhZG93XG4gKiBAcGFyYW0gW3N0eWxlLmRyb3BTaGFkb3dEaXN0YW5jZT01XSB7bnVtYmVyfSBTZXQgYSBkaXN0YW5jZSBvZiB0aGUgZHJvcCBzaGFkb3dcbiAqIEBwYXJhbSBbc3R5bGUuZHJvcFNoYWRvd0JsdXI9MF0ge251bWJlcn0gU2V0IGEgc2hhZG93IGJsdXIgcmFkaXVzXG4gKiBAcGFyYW0gW3N0eWxlLnBhZGRpbmc9MF0ge251bWJlcn0gT2NjYXNpb25hbGx5IHNvbWUgZm9udHMgYXJlIGNyb3BwZWQgb24gdG9wIG9yIGJvdHRvbS4gQWRkaW5nIHNvbWUgcGFkZGluZyB3aWxsXG4gKiAgICAgIHByZXZlbnQgdGhpcyBmcm9tIGhhcHBlbmluZyBieSBhZGRpbmcgcGFkZGluZyB0byB0aGUgdG9wIGFuZCBib3R0b20gb2YgdGV4dCBoZWlnaHQuXG4gKiBAcGFyYW0gW3N0eWxlLnRleHRCYXNlbGluZT0nYWxwaGFiZXRpYyddIHtzdHJpbmd9IFRoZSBiYXNlbGluZSBvZiB0aGUgdGV4dCB0aGF0IGlzIHJlbmRlcmVkLlxuICogQHBhcmFtIFtzdHlsZS5saW5lSm9pbj0nbWl0ZXInXSB7c3RyaW5nfSBUaGUgbGluZUpvaW4gcHJvcGVydHkgc2V0cyB0aGUgdHlwZSBvZiBjb3JuZXIgY3JlYXRlZCwgaXQgY2FuIHJlc29sdmVcbiAqICAgICAgc3Bpa2VkIHRleHQgaXNzdWVzLiBEZWZhdWx0IGlzICdtaXRlcicgKGNyZWF0ZXMgYSBzaGFycCBjb3JuZXIpLlxuICogQHBhcmFtIFtzdHlsZS5taXRlckxpbWl0PTEwXSB7bnVtYmVyfSBUaGUgbWl0ZXIgbGltaXQgdG8gdXNlIHdoZW4gdXNpbmcgdGhlICdtaXRlcicgbGluZUpvaW4gbW9kZS4gVGhpcyBjYW4gcmVkdWNlXG4gKiAgICAgIG9yIGluY3JlYXNlIHRoZSBzcGlraW5lc3Mgb2YgcmVuZGVyZWQgdGV4dC5cbiAqL1xuZnVuY3Rpb24gVGV4dCh0ZXh0LCBzdHlsZSwgcmVzb2x1dGlvbilcbntcbiAgICAvKipcbiAgICAgKiBUaGUgY2FudmFzIGVsZW1lbnQgdGhhdCBldmVyeXRoaW5nIGlzIGRyYXduIHRvXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtIVE1MQ2FudmFzRWxlbWVudH1cbiAgICAgKi9cbiAgICB0aGlzLmNhbnZhcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NhbnZhcycpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGNhbnZhcyAyZCBjb250ZXh0IHRoYXQgZXZlcnl0aGluZyBpcyBkcmF3biB3aXRoXG4gICAgICogQG1lbWJlciB7SFRNTENhbnZhc0VsZW1lbnR9XG4gICAgICovXG4gICAgdGhpcy5jb250ZXh0ID0gdGhpcy5jYW52YXMuZ2V0Q29udGV4dCgnMmQnKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSByZXNvbHV0aW9uIG9mIHRoZSBjYW52YXMuXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMucmVzb2x1dGlvbiA9IHJlc29sdXRpb24gfHwgQ09OU1QuUkVTT0xVVElPTjtcblxuICAgIC8qKlxuICAgICAqIFByaXZhdGUgdHJhY2tlciBmb3IgdGhlIGN1cnJlbnQgdGV4dC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge3N0cmluZ31cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX3RleHQgPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogUHJpdmF0ZSB0cmFja2VyIGZvciB0aGUgY3VycmVudCBzdHlsZS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge29iamVjdH1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX3N0eWxlID0gbnVsbDtcblxuICAgIHZhciB0ZXh0dXJlID0gVGV4dHVyZS5mcm9tQ2FudmFzKHRoaXMuY2FudmFzKTtcbiAgICB0ZXh0dXJlLnRyaW0gPSBuZXcgbWF0aC5SZWN0YW5nbGUoKTtcbiAgICBTcHJpdGUuY2FsbCh0aGlzLCB0ZXh0dXJlKTtcblxuICAgIHRoaXMudGV4dCA9IHRleHQ7XG4gICAgdGhpcy5zdHlsZSA9IHN0eWxlO1xufVxuXG4vLyBjb25zdHJ1Y3RvclxuVGV4dC5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFNwcml0ZS5wcm90b3R5cGUpO1xuVGV4dC5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBUZXh0O1xubW9kdWxlLmV4cG9ydHMgPSBUZXh0O1xuXG5UZXh0LmZvbnRQcm9wZXJ0aWVzQ2FjaGUgPSB7fTtcblRleHQuZm9udFByb3BlcnRpZXNDYW52YXMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdjYW52YXMnKTtcblRleHQuZm9udFByb3BlcnRpZXNDb250ZXh0ID0gVGV4dC5mb250UHJvcGVydGllc0NhbnZhcy5nZXRDb250ZXh0KCcyZCcpO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhUZXh0LnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFRoZSB3aWR0aCBvZiB0aGUgVGV4dCwgc2V0dGluZyB0aGlzIHdpbGwgYWN0dWFsbHkgbW9kaWZ5IHRoZSBzY2FsZSB0byBhY2hpZXZlIHRoZSB2YWx1ZSBzZXRcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5UZXh0I1xuICAgICAqL1xuICAgIHdpZHRoOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgaWYgKHRoaXMuZGlydHkpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdGhpcy51cGRhdGVUZXh0KCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiB0aGlzLnNjYWxlLnggKiB0aGlzLl90ZXh0dXJlLl9mcmFtZS53aWR0aDtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuc2NhbGUueCA9IHZhbHVlIC8gdGhpcy5fdGV4dHVyZS5fZnJhbWUud2lkdGg7XG4gICAgICAgICAgICB0aGlzLl93aWR0aCA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFRoZSBoZWlnaHQgb2YgdGhlIFRleHQsIHNldHRpbmcgdGhpcyB3aWxsIGFjdHVhbGx5IG1vZGlmeSB0aGUgc2NhbGUgdG8gYWNoaWV2ZSB0aGUgdmFsdWUgc2V0XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuVGV4dCNcbiAgICAgKi9cbiAgICBoZWlnaHQ6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICBpZiAodGhpcy5kaXJ0eSlcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZVRleHQoKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuICB0aGlzLnNjYWxlLnkgKiB0aGlzLl90ZXh0dXJlLl9mcmFtZS5oZWlnaHQ7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnNjYWxlLnkgPSB2YWx1ZSAvIHRoaXMuX3RleHR1cmUuX2ZyYW1lLmhlaWdodDtcbiAgICAgICAgICAgIHRoaXMuX2hlaWdodCA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFNldCB0aGUgc3R5bGUgb2YgdGhlIHRleHRcbiAgICAgKlxuICAgICAqIEBwYXJhbSBbc3R5bGVdIHtvYmplY3R9IFRoZSBzdHlsZSBwYXJhbWV0ZXJzXG4gICAgICogQHBhcmFtIFtzdHlsZS5mb250PSdib2xkIDIwcHQgQXJpYWwnXSB7c3RyaW5nfSBUaGUgc3R5bGUgYW5kIHNpemUgb2YgdGhlIGZvbnRcbiAgICAgKiBAcGFyYW0gW3N0eWxlLmZpbGw9J2JsYWNrJ10ge3N0cmluZ3xudW1iZXJ9IEEgY2FudmFzIGZpbGxzdHlsZSB0aGF0IHdpbGwgYmUgdXNlZCBvbiB0aGUgdGV4dCBlZyAncmVkJywgJyMwMEZGMDAnXG4gICAgICogQHBhcmFtIFtzdHlsZS5hbGlnbj0nbGVmdCddIHtzdHJpbmd9IEFsaWdubWVudCBmb3IgbXVsdGlsaW5lIHRleHQgKCdsZWZ0JywgJ2NlbnRlcicgb3IgJ3JpZ2h0JyksIGRvZXMgbm90IGFmZmVjdCBzaW5nbGUgbGluZSB0ZXh0XG4gICAgICogQHBhcmFtIFtzdHlsZS5zdHJva2U9J2JsYWNrJ10ge3N0cmluZ3xudW1iZXJ9IEEgY2FudmFzIGZpbGxzdHlsZSB0aGF0IHdpbGwgYmUgdXNlZCBvbiB0aGUgdGV4dCBzdHJva2UgZWcgJ2JsdWUnLCAnI0ZDRkYwMCdcbiAgICAgKiBAcGFyYW0gW3N0eWxlLnN0cm9rZVRoaWNrbmVzcz0wXSB7bnVtYmVyfSBBIG51bWJlciB0aGF0IHJlcHJlc2VudHMgdGhlIHRoaWNrbmVzcyBvZiB0aGUgc3Ryb2tlLiBEZWZhdWx0IGlzIDAgKG5vIHN0cm9rZSlcbiAgICAgKiBAcGFyYW0gW3N0eWxlLndvcmRXcmFwPWZhbHNlXSB7Ym9vbGVhbn0gSW5kaWNhdGVzIGlmIHdvcmQgd3JhcCBzaG91bGQgYmUgdXNlZFxuICAgICAqIEBwYXJhbSBbc3R5bGUud29yZFdyYXBXaWR0aD0xMDBdIHtudW1iZXJ9IFRoZSB3aWR0aCBhdCB3aGljaCB0ZXh0IHdpbGwgd3JhcFxuICAgICAqIEBwYXJhbSBbc3R5bGUubGluZUhlaWdodF0ge251bWJlcn0gVGhlIGxpbmUgaGVpZ2h0LCBhIG51bWJlciB0aGF0IHJlcHJlc2VudHMgdGhlIHZlcnRpY2FsIHNwYWNlIHRoYXQgYSBsZXR0ZXIgdXNlc1xuICAgICAqIEBwYXJhbSBbc3R5bGUuZHJvcFNoYWRvdz1mYWxzZV0ge2Jvb2xlYW59IFNldCBhIGRyb3Agc2hhZG93IGZvciB0aGUgdGV4dFxuICAgICAqIEBwYXJhbSBbc3R5bGUuZHJvcFNoYWRvd0NvbG9yPScjMDAwMDAwJ10ge3N0cmluZ3xudW1iZXJ9IEEgZmlsbCBzdHlsZSB0byBiZSB1c2VkIG9uIHRoZSBkcm9wc2hhZG93IGUuZyAncmVkJywgJyMwMEZGMDAnXG4gICAgICogQHBhcmFtIFtzdHlsZS5kcm9wU2hhZG93QW5nbGU9TWF0aC5QSS82XSB7bnVtYmVyfSBTZXQgYSBhbmdsZSBvZiB0aGUgZHJvcCBzaGFkb3dcbiAgICAgKiBAcGFyYW0gW3N0eWxlLmRyb3BTaGFkb3dEaXN0YW5jZT01XSB7bnVtYmVyfSBTZXQgYSBkaXN0YW5jZSBvZiB0aGUgZHJvcCBzaGFkb3dcbiAgICAgKiBAcGFyYW0gW3N0eWxlLmRyb3BTaGFkb3dCbHVyPTBdIHtudW1iZXJ9IFNldCBhIHNoYWRvdyBibHVyIHJhZGl1c1xuICAgICAqIEBwYXJhbSBbc3R5bGUucGFkZGluZz0wXSB7bnVtYmVyfSBPY2Nhc2lvbmFsbHkgc29tZSBmb250cyBhcmUgY3JvcHBlZCBvbiB0b3Agb3IgYm90dG9tLiBBZGRpbmcgc29tZSBwYWRkaW5nIHdpbGxcbiAgICAgKiAgICAgIHByZXZlbnQgdGhpcyBmcm9tIGhhcHBlbmluZyBieSBhZGRpbmcgcGFkZGluZyB0byB0aGUgdG9wIGFuZCBib3R0b20gb2YgdGV4dCBoZWlnaHQuXG4gICAgICogQHBhcmFtIFtzdHlsZS50ZXh0QmFzZWxpbmU9J2FscGhhYmV0aWMnXSB7c3RyaW5nfSBUaGUgYmFzZWxpbmUgb2YgdGhlIHRleHQgdGhhdCBpcyByZW5kZXJlZC5cbiAgICAgKiBAcGFyYW0gW3N0eWxlLmxpbmVKb2luPSdtaXRlciddIHtzdHJpbmd9IFRoZSBsaW5lSm9pbiBwcm9wZXJ0eSBzZXRzIHRoZSB0eXBlIG9mIGNvcm5lciBjcmVhdGVkLCBpdCBjYW4gcmVzb2x2ZVxuICAgICAqICAgICAgc3Bpa2VkIHRleHQgaXNzdWVzLiBEZWZhdWx0IGlzICdtaXRlcicgKGNyZWF0ZXMgYSBzaGFycCBjb3JuZXIpLlxuICAgICAqIEBwYXJhbSBbc3R5bGUubWl0ZXJMaW1pdD0xMF0ge251bWJlcn0gVGhlIG1pdGVyIGxpbWl0IHRvIHVzZSB3aGVuIHVzaW5nIHRoZSAnbWl0ZXInIGxpbmVKb2luIG1vZGUuIFRoaXMgY2FuIHJlZHVjZVxuICAgICAqICAgICAgb3IgaW5jcmVhc2UgdGhlIHNwaWtpbmVzcyBvZiByZW5kZXJlZCB0ZXh0LlxuICAgICAqIEBtZW1iZXJvZiBQSVhJLlRleHQjXG4gICAgICovXG4gICAgc3R5bGU6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fc3R5bGU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHN0eWxlKVxuICAgICAgICB7XG4gICAgICAgICAgICBzdHlsZSA9IHN0eWxlIHx8IHt9O1xuXG4gICAgICAgICAgICBpZiAodHlwZW9mIHN0eWxlLmZpbGwgPT09ICdudW1iZXInKSB7XG4gICAgICAgICAgICAgICAgc3R5bGUuZmlsbCA9IHV0aWxzLmhleDJzdHJpbmcoc3R5bGUuZmlsbCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICh0eXBlb2Ygc3R5bGUuc3Ryb2tlID09PSAnbnVtYmVyJykge1xuICAgICAgICAgICAgICAgIHN0eWxlLnN0cm9rZSA9IHV0aWxzLmhleDJzdHJpbmcoc3R5bGUuc3Ryb2tlKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHR5cGVvZiBzdHlsZS5kcm9wU2hhZG93Q29sb3IgPT09ICdudW1iZXInKSB7XG4gICAgICAgICAgICAgICAgc3R5bGUuZHJvcFNoYWRvd0NvbG9yID0gdXRpbHMuaGV4MnN0cmluZyhzdHlsZS5kcm9wU2hhZG93Q29sb3IpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBzdHlsZS5mb250ID0gc3R5bGUuZm9udCB8fCAnYm9sZCAyMHB0IEFyaWFsJztcbiAgICAgICAgICAgIHN0eWxlLmZpbGwgPSBzdHlsZS5maWxsIHx8ICdibGFjayc7XG4gICAgICAgICAgICBzdHlsZS5hbGlnbiA9IHN0eWxlLmFsaWduIHx8ICdsZWZ0JztcbiAgICAgICAgICAgIHN0eWxlLnN0cm9rZSA9IHN0eWxlLnN0cm9rZSB8fCAnYmxhY2snOyAvL3Byb3ZpZGUgYSBkZWZhdWx0LCBzZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9waXhpanMvcGl4aS5qcy9pc3N1ZXMvMTM2XG4gICAgICAgICAgICBzdHlsZS5zdHJva2VUaGlja25lc3MgPSBzdHlsZS5zdHJva2VUaGlja25lc3MgfHwgMDtcbiAgICAgICAgICAgIHN0eWxlLndvcmRXcmFwID0gc3R5bGUud29yZFdyYXAgfHwgZmFsc2U7XG4gICAgICAgICAgICBzdHlsZS53b3JkV3JhcFdpZHRoID0gc3R5bGUud29yZFdyYXBXaWR0aCB8fCAxMDA7XG5cbiAgICAgICAgICAgIHN0eWxlLmRyb3BTaGFkb3cgPSBzdHlsZS5kcm9wU2hhZG93IHx8IGZhbHNlO1xuICAgICAgICAgICAgc3R5bGUuZHJvcFNoYWRvd0NvbG9yID0gc3R5bGUuZHJvcFNoYWRvd0NvbG9yIHx8ICcjMDAwMDAwJztcbiAgICAgICAgICAgIHN0eWxlLmRyb3BTaGFkb3dBbmdsZSA9IHN0eWxlLmRyb3BTaGFkb3dBbmdsZSAhPT0gdW5kZWZpbmVkID8gc3R5bGUuZHJvcFNoYWRvd0FuZ2xlIDogTWF0aC5QSSAvIDY7XG4gICAgICAgICAgICBzdHlsZS5kcm9wU2hhZG93RGlzdGFuY2UgPSBzdHlsZS5kcm9wU2hhZG93RGlzdGFuY2UgIT09IHVuZGVmaW5lZCA/IHN0eWxlLmRyb3BTaGFkb3dEaXN0YW5jZSA6IDU7XG4gICAgICAgICAgICBzdHlsZS5kcm9wU2hhZG93Qmx1ciA9IHN0eWxlLmRyb3BTaGFkb3dCbHVyICE9PSB1bmRlZmluZWQgPyBzdHlsZS5kcm9wU2hhZG93Qmx1ciA6IDA7IC8vc2hhZG93Qmx1ciBpcyAnMCcgYnkgZGVmYXVsdCBhY2NvcmRpbmcgdG8gSFRNTFxuXG4gICAgICAgICAgICBzdHlsZS5wYWRkaW5nID0gc3R5bGUucGFkZGluZyB8fCAwO1xuXG4gICAgICAgICAgICBzdHlsZS50ZXh0QmFzZWxpbmUgPSBzdHlsZS50ZXh0QmFzZWxpbmUgfHwgJ2FscGhhYmV0aWMnO1xuXG4gICAgICAgICAgICBzdHlsZS5saW5lSm9pbiA9IHN0eWxlLmxpbmVKb2luIHx8ICdtaXRlcic7XG4gICAgICAgICAgICBzdHlsZS5taXRlckxpbWl0ID0gc3R5bGUubWl0ZXJMaW1pdCB8fCAxMDtcblxuICAgICAgICAgICAgdGhpcy5fc3R5bGUgPSBzdHlsZTtcbiAgICAgICAgICAgIHRoaXMuZGlydHkgPSB0cnVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFNldCB0aGUgY29weSBmb3IgdGhlIHRleHQgb2JqZWN0LiBUbyBzcGxpdCBhIGxpbmUgeW91IGNhbiB1c2UgJ1xcbicuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gdGV4dCB7c3RyaW5nfSBUaGUgY29weSB0aGF0IHlvdSB3b3VsZCBsaWtlIHRoZSB0ZXh0IHRvIGRpc3BsYXlcbiAgICAgKiBAbWVtYmVyb2YgUElYSS5UZXh0I1xuICAgICAqL1xuICAgIHRleHQ6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbigpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl90ZXh0O1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh0ZXh0KXtcbiAgICAgICAgICAgIHRleHQgPSB0ZXh0LnRvU3RyaW5nKCkgfHwgJyAnO1xuICAgICAgICAgICAgaWYgKHRoaXMuX3RleHQgPT09IHRleHQpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5fdGV4dCA9IHRleHQ7XG4gICAgICAgICAgICB0aGlzLmRpcnR5ID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuXG4vKipcbiAqIFJlbmRlcnMgdGV4dCBhbmQgdXBkYXRlcyBpdCB3aGVuIG5lZWRlZFxuICpcbiAqIEBwcml2YXRlXG4gKi9cblRleHQucHJvdG90eXBlLnVwZGF0ZVRleHQgPSBmdW5jdGlvbiAoKVxue1xuICAgIHZhciBzdHlsZSA9IHRoaXMuX3N0eWxlO1xuICAgIHRoaXMuY29udGV4dC5mb250ID0gc3R5bGUuZm9udDtcblxuICAgIC8vIHdvcmQgd3JhcFxuICAgIC8vIHByZXNlcnZlIG9yaWdpbmFsIHRleHRcbiAgICB2YXIgb3V0cHV0VGV4dCA9IHN0eWxlLndvcmRXcmFwID8gdGhpcy53b3JkV3JhcCh0aGlzLl90ZXh0KSA6IHRoaXMuX3RleHQ7XG5cbiAgICAvLyBzcGxpdCB0ZXh0IGludG8gbGluZXNcbiAgICB2YXIgbGluZXMgPSBvdXRwdXRUZXh0LnNwbGl0KC8oPzpcXHJcXG58XFxyfFxcbikvKTtcblxuICAgIC8vIGNhbGN1bGF0ZSB0ZXh0IHdpZHRoXG4gICAgdmFyIGxpbmVXaWR0aHMgPSBuZXcgQXJyYXkobGluZXMubGVuZ3RoKTtcbiAgICB2YXIgbWF4TGluZVdpZHRoID0gMDtcbiAgICB2YXIgZm9udFByb3BlcnRpZXMgPSB0aGlzLmRldGVybWluZUZvbnRQcm9wZXJ0aWVzKHN0eWxlLmZvbnQpO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGluZXMubGVuZ3RoOyBpKyspXG4gICAge1xuICAgICAgICB2YXIgbGluZVdpZHRoID0gdGhpcy5jb250ZXh0Lm1lYXN1cmVUZXh0KGxpbmVzW2ldKS53aWR0aDtcbiAgICAgICAgbGluZVdpZHRoc1tpXSA9IGxpbmVXaWR0aDtcbiAgICAgICAgbWF4TGluZVdpZHRoID0gTWF0aC5tYXgobWF4TGluZVdpZHRoLCBsaW5lV2lkdGgpO1xuICAgIH1cblxuICAgIHZhciB3aWR0aCA9IG1heExpbmVXaWR0aCArIHN0eWxlLnN0cm9rZVRoaWNrbmVzcztcbiAgICBpZiAoc3R5bGUuZHJvcFNoYWRvdylcbiAgICB7XG4gICAgICAgIHdpZHRoICs9IHN0eWxlLmRyb3BTaGFkb3dEaXN0YW5jZTtcbiAgICB9XG5cbiAgICB0aGlzLmNhbnZhcy53aWR0aCA9ICggd2lkdGggKyB0aGlzLmNvbnRleHQubGluZVdpZHRoICkgKiB0aGlzLnJlc29sdXRpb247XG5cbiAgICAvLyBjYWxjdWxhdGUgdGV4dCBoZWlnaHRcbiAgICB2YXIgbGluZUhlaWdodCA9IHRoaXMuc3R5bGUubGluZUhlaWdodCB8fCBmb250UHJvcGVydGllcy5mb250U2l6ZSArIHN0eWxlLnN0cm9rZVRoaWNrbmVzcztcblxuICAgIHZhciBoZWlnaHQgPSBsaW5lSGVpZ2h0ICogbGluZXMubGVuZ3RoO1xuICAgIGlmIChzdHlsZS5kcm9wU2hhZG93KVxuICAgIHtcbiAgICAgICAgaGVpZ2h0ICs9IHN0eWxlLmRyb3BTaGFkb3dEaXN0YW5jZTtcbiAgICB9XG5cbiAgICB0aGlzLmNhbnZhcy5oZWlnaHQgPSAoIGhlaWdodCArIHRoaXMuX3N0eWxlLnBhZGRpbmcgKiAyICkgKiB0aGlzLnJlc29sdXRpb247XG5cbiAgICB0aGlzLmNvbnRleHQuc2NhbGUoIHRoaXMucmVzb2x1dGlvbiwgdGhpcy5yZXNvbHV0aW9uKTtcblxuICAgIGlmIChuYXZpZ2F0b3IuaXNDb2Nvb25KUylcbiAgICB7XG4gICAgICAgIHRoaXMuY29udGV4dC5jbGVhclJlY3QoMCwgMCwgdGhpcy5jYW52YXMud2lkdGgsIHRoaXMuY2FudmFzLmhlaWdodCk7XG5cbiAgICB9XG5cbiAgICAvL3RoaXMuY29udGV4dC5maWxsU3R5bGU9XCIjRkYwMDAwXCI7XG4gICAgLy90aGlzLmNvbnRleHQuZmlsbFJlY3QoMCwgMCwgdGhpcy5jYW52YXMud2lkdGgsIHRoaXMuY2FudmFzLmhlaWdodCk7XG5cbiAgICB0aGlzLmNvbnRleHQuZm9udCA9IHN0eWxlLmZvbnQ7XG4gICAgdGhpcy5jb250ZXh0LnN0cm9rZVN0eWxlID0gc3R5bGUuc3Ryb2tlO1xuICAgIHRoaXMuY29udGV4dC5saW5lV2lkdGggPSBzdHlsZS5zdHJva2VUaGlja25lc3M7XG4gICAgdGhpcy5jb250ZXh0LnRleHRCYXNlbGluZSA9IHN0eWxlLnRleHRCYXNlbGluZTtcbiAgICB0aGlzLmNvbnRleHQubGluZUpvaW4gPSBzdHlsZS5saW5lSm9pbjtcbiAgICB0aGlzLmNvbnRleHQubWl0ZXJMaW1pdCA9IHN0eWxlLm1pdGVyTGltaXQ7XG5cbiAgICB2YXIgbGluZVBvc2l0aW9uWDtcbiAgICB2YXIgbGluZVBvc2l0aW9uWTtcblxuICAgIGlmIChzdHlsZS5kcm9wU2hhZG93KVxuICAgIHtcbiAgICAgICAgaWYgKHN0eWxlLmRyb3BTaGFkb3dCbHVyID4gMCkge1xuICAgICAgICAgICAgdGhpcy5jb250ZXh0LnNoYWRvd0NvbG9yID0gc3R5bGUuZHJvcFNoYWRvd0NvbG9yO1xuICAgICAgICAgICAgdGhpcy5jb250ZXh0LnNoYWRvd0JsdXIgPSBzdHlsZS5kcm9wU2hhZG93Qmx1cjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuY29udGV4dC5maWxsU3R5bGUgPSBzdHlsZS5kcm9wU2hhZG93Q29sb3I7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgeFNoYWRvd09mZnNldCA9IE1hdGguY29zKHN0eWxlLmRyb3BTaGFkb3dBbmdsZSkgKiBzdHlsZS5kcm9wU2hhZG93RGlzdGFuY2U7XG4gICAgICAgIHZhciB5U2hhZG93T2Zmc2V0ID0gTWF0aC5zaW4oc3R5bGUuZHJvcFNoYWRvd0FuZ2xlKSAqIHN0eWxlLmRyb3BTaGFkb3dEaXN0YW5jZTtcblxuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbGluZXMubGVuZ3RoOyBpKyspXG4gICAgICAgIHtcbiAgICAgICAgICAgIGxpbmVQb3NpdGlvblggPSBzdHlsZS5zdHJva2VUaGlja25lc3MgLyAyO1xuICAgICAgICAgICAgbGluZVBvc2l0aW9uWSA9IChzdHlsZS5zdHJva2VUaGlja25lc3MgLyAyICsgaSAqIGxpbmVIZWlnaHQpICsgZm9udFByb3BlcnRpZXMuYXNjZW50O1xuXG4gICAgICAgICAgICBpZiAoc3R5bGUuYWxpZ24gPT09ICdyaWdodCcpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgbGluZVBvc2l0aW9uWCArPSBtYXhMaW5lV2lkdGggLSBsaW5lV2lkdGhzW2ldO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoc3R5bGUuYWxpZ24gPT09ICdjZW50ZXInKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGxpbmVQb3NpdGlvblggKz0gKG1heExpbmVXaWR0aCAtIGxpbmVXaWR0aHNbaV0pIC8gMjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHN0eWxlLmZpbGwpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdGhpcy5jb250ZXh0LmZpbGxUZXh0KGxpbmVzW2ldLCBsaW5lUG9zaXRpb25YICsgeFNoYWRvd09mZnNldCwgbGluZVBvc2l0aW9uWSArIHlTaGFkb3dPZmZzZXQgKyB0aGlzLl9zdHlsZS5wYWRkaW5nKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vc2V0IGNhbnZhcyB0ZXh0IHN0eWxlc1xuICAgIHRoaXMuY29udGV4dC5maWxsU3R5bGUgPSBzdHlsZS5maWxsO1xuXG4gICAgLy9kcmF3IGxpbmVzIGxpbmUgYnkgbGluZVxuICAgIGZvciAoaSA9IDA7IGkgPCBsaW5lcy5sZW5ndGg7IGkrKylcbiAgICB7XG4gICAgICAgIGxpbmVQb3NpdGlvblggPSBzdHlsZS5zdHJva2VUaGlja25lc3MgLyAyO1xuICAgICAgICBsaW5lUG9zaXRpb25ZID0gKHN0eWxlLnN0cm9rZVRoaWNrbmVzcyAvIDIgKyBpICogbGluZUhlaWdodCkgKyBmb250UHJvcGVydGllcy5hc2NlbnQ7XG5cbiAgICAgICAgaWYgKHN0eWxlLmFsaWduID09PSAncmlnaHQnKVxuICAgICAgICB7XG4gICAgICAgICAgICBsaW5lUG9zaXRpb25YICs9IG1heExpbmVXaWR0aCAtIGxpbmVXaWR0aHNbaV07XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoc3R5bGUuYWxpZ24gPT09ICdjZW50ZXInKVxuICAgICAgICB7XG4gICAgICAgICAgICBsaW5lUG9zaXRpb25YICs9IChtYXhMaW5lV2lkdGggLSBsaW5lV2lkdGhzW2ldKSAvIDI7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoc3R5bGUuc3Ryb2tlICYmIHN0eWxlLnN0cm9rZVRoaWNrbmVzcylcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5jb250ZXh0LnN0cm9rZVRleHQobGluZXNbaV0sIGxpbmVQb3NpdGlvblgsIGxpbmVQb3NpdGlvblkgKyB0aGlzLl9zdHlsZS5wYWRkaW5nKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChzdHlsZS5maWxsKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmNvbnRleHQuZmlsbFRleHQobGluZXNbaV0sIGxpbmVQb3NpdGlvblgsIGxpbmVQb3NpdGlvblkgKyB0aGlzLl9zdHlsZS5wYWRkaW5nKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMudXBkYXRlVGV4dHVyZSgpO1xufTtcblxuLyoqXG4gKiBVcGRhdGVzIHRleHR1cmUgc2l6ZSBiYXNlZCBvbiBjYW52YXMgc2l6ZVxuICpcbiAqIEBwcml2YXRlXG4gKi9cblRleHQucHJvdG90eXBlLnVwZGF0ZVRleHR1cmUgPSBmdW5jdGlvbiAoKVxue1xuICAgIHZhciB0ZXh0dXJlID0gdGhpcy5fdGV4dHVyZTtcblxuICAgIHRleHR1cmUuYmFzZVRleHR1cmUuaGFzTG9hZGVkID0gdHJ1ZTtcbiAgICB0ZXh0dXJlLmJhc2VUZXh0dXJlLnJlc29sdXRpb24gPSB0aGlzLnJlc29sdXRpb247XG5cbiAgICB0ZXh0dXJlLmJhc2VUZXh0dXJlLndpZHRoID0gdGhpcy5jYW52YXMud2lkdGggLyB0aGlzLnJlc29sdXRpb247XG4gICAgdGV4dHVyZS5iYXNlVGV4dHVyZS5oZWlnaHQgPSB0aGlzLmNhbnZhcy5oZWlnaHQgLyB0aGlzLnJlc29sdXRpb247XG4gICAgdGV4dHVyZS5jcm9wLndpZHRoID0gdGV4dHVyZS5fZnJhbWUud2lkdGggPSB0aGlzLmNhbnZhcy53aWR0aCAvIHRoaXMucmVzb2x1dGlvbjtcbiAgICB0ZXh0dXJlLmNyb3AuaGVpZ2h0ID0gdGV4dHVyZS5fZnJhbWUuaGVpZ2h0ID0gdGhpcy5jYW52YXMuaGVpZ2h0IC8gdGhpcy5yZXNvbHV0aW9uO1xuXG4gICAgdGV4dHVyZS50cmltLnggPSAwO1xuICAgIHRleHR1cmUudHJpbS55ID0gLXRoaXMuX3N0eWxlLnBhZGRpbmc7XG5cbiAgICB0ZXh0dXJlLnRyaW0ud2lkdGggPSB0ZXh0dXJlLl9mcmFtZS53aWR0aDtcbiAgICB0ZXh0dXJlLnRyaW0uaGVpZ2h0ID0gdGV4dHVyZS5fZnJhbWUuaGVpZ2h0IC0gdGhpcy5fc3R5bGUucGFkZGluZyoyO1xuXG4gICAgdGhpcy5fd2lkdGggPSB0aGlzLmNhbnZhcy53aWR0aCAvIHRoaXMucmVzb2x1dGlvbjtcbiAgICB0aGlzLl9oZWlnaHQgPSB0aGlzLmNhbnZhcy5oZWlnaHQgLyB0aGlzLnJlc29sdXRpb247XG5cbiAgICB0ZXh0dXJlLmJhc2VUZXh0dXJlLmVtaXQoJ3VwZGF0ZScsICB0ZXh0dXJlLmJhc2VUZXh0dXJlKTtcblxuICAgIHRoaXMuZGlydHkgPSBmYWxzZTtcbn07XG5cbi8qKlxuICogUmVuZGVycyB0aGUgb2JqZWN0IHVzaW5nIHRoZSBXZWJHTCByZW5kZXJlclxuICpcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5XZWJHTFJlbmRlcmVyfVxuICovXG5UZXh0LnByb3RvdHlwZS5yZW5kZXJXZWJHTCA9IGZ1bmN0aW9uIChyZW5kZXJlcilcbntcbiAgICBpZiAodGhpcy5kaXJ0eSlcbiAgICB7XG4gICAgICAgIC8vdGhpcy5yZXNvbHV0aW9uID0gMS8vcmVuZGVyZXIucmVzb2x1dGlvbjtcblxuICAgICAgICB0aGlzLnVwZGF0ZVRleHQoKTtcbiAgICB9XG5cbiAgICBTcHJpdGUucHJvdG90eXBlLnJlbmRlcldlYkdMLmNhbGwodGhpcywgcmVuZGVyZXIpO1xufTtcblxuLyoqXG4gKiBSZW5kZXJzIHRoZSBvYmplY3QgdXNpbmcgdGhlIENhbnZhcyByZW5kZXJlclxuICpcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5DYW52YXNSZW5kZXJlcn1cbiAqIEBwcml2YXRlXG4gKi9cblRleHQucHJvdG90eXBlLl9yZW5kZXJDYW52YXMgPSBmdW5jdGlvbiAocmVuZGVyZXIpXG57XG4gICAgaWYgKHRoaXMuZGlydHkpXG4gICAge1xuICAgICAvLyAgIHRoaXMucmVzb2x1dGlvbiA9IDEvL3JlbmRlcmVyLnJlc29sdXRpb247XG5cbiAgICAgICAgdGhpcy51cGRhdGVUZXh0KCk7XG4gICAgfVxuXG4gICAgU3ByaXRlLnByb3RvdHlwZS5fcmVuZGVyQ2FudmFzLmNhbGwodGhpcywgcmVuZGVyZXIpO1xufTtcblxuLyoqXG4gKiBDYWxjdWxhdGVzIHRoZSBhc2NlbnQsIGRlc2NlbnQgYW5kIGZvbnRTaXplIG9mIGEgZ2l2ZW4gZm9udFN0eWxlXG4gKlxuICogQHBhcmFtIGZvbnRTdHlsZSB7b2JqZWN0fVxuICogQHByaXZhdGVcbiAqL1xuVGV4dC5wcm90b3R5cGUuZGV0ZXJtaW5lRm9udFByb3BlcnRpZXMgPSBmdW5jdGlvbiAoZm9udFN0eWxlKVxue1xuICAgIHZhciBwcm9wZXJ0aWVzID0gVGV4dC5mb250UHJvcGVydGllc0NhY2hlW2ZvbnRTdHlsZV07XG5cbiAgICBpZiAoIXByb3BlcnRpZXMpXG4gICAge1xuICAgICAgICBwcm9wZXJ0aWVzID0ge307XG5cbiAgICAgICAgdmFyIGNhbnZhcyA9IFRleHQuZm9udFByb3BlcnRpZXNDYW52YXM7XG4gICAgICAgIHZhciBjb250ZXh0ID0gVGV4dC5mb250UHJvcGVydGllc0NvbnRleHQ7XG5cbiAgICAgICAgY29udGV4dC5mb250ID0gZm9udFN0eWxlO1xuXG4gICAgICAgIHZhciB3aWR0aCA9IE1hdGguY2VpbChjb250ZXh0Lm1lYXN1cmVUZXh0KCd8TcOJcScpLndpZHRoKTtcbiAgICAgICAgdmFyIGJhc2VsaW5lID0gTWF0aC5jZWlsKGNvbnRleHQubWVhc3VyZVRleHQoJ00nKS53aWR0aCk7XG4gICAgICAgIHZhciBoZWlnaHQgPSAyICogYmFzZWxpbmU7XG5cbiAgICAgICAgYmFzZWxpbmUgPSBiYXNlbGluZSAqIDEuNCB8IDA7XG5cbiAgICAgICAgY2FudmFzLndpZHRoID0gd2lkdGg7XG4gICAgICAgIGNhbnZhcy5oZWlnaHQgPSBoZWlnaHQ7XG5cbiAgICAgICAgY29udGV4dC5maWxsU3R5bGUgPSAnI2YwMCc7XG4gICAgICAgIGNvbnRleHQuZmlsbFJlY3QoMCwgMCwgd2lkdGgsIGhlaWdodCk7XG5cbiAgICAgICAgY29udGV4dC5mb250ID0gZm9udFN0eWxlO1xuXG4gICAgICAgIGNvbnRleHQudGV4dEJhc2VsaW5lID0gJ2FscGhhYmV0aWMnO1xuICAgICAgICBjb250ZXh0LmZpbGxTdHlsZSA9ICcjMDAwJztcbiAgICAgICAgY29udGV4dC5maWxsVGV4dCgnfE3DiXEnLCAwLCBiYXNlbGluZSk7XG5cbiAgICAgICAgdmFyIGltYWdlZGF0YSA9IGNvbnRleHQuZ2V0SW1hZ2VEYXRhKDAsIDAsIHdpZHRoLCBoZWlnaHQpLmRhdGE7XG4gICAgICAgIHZhciBwaXhlbHMgPSBpbWFnZWRhdGEubGVuZ3RoO1xuICAgICAgICB2YXIgbGluZSA9IHdpZHRoICogNDtcblxuICAgICAgICB2YXIgaSwgajtcblxuICAgICAgICB2YXIgaWR4ID0gMDtcbiAgICAgICAgdmFyIHN0b3AgPSBmYWxzZTtcblxuICAgICAgICAvLyBhc2NlbnQuIHNjYW4gZnJvbSB0b3AgdG8gYm90dG9tIHVudGlsIHdlIGZpbmQgYSBub24gcmVkIHBpeGVsXG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCBiYXNlbGluZTsgaSsrKVxuICAgICAgICB7XG4gICAgICAgICAgICBmb3IgKGogPSAwOyBqIDwgbGluZTsgaiArPSA0KVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGlmIChpbWFnZWRhdGFbaWR4ICsgal0gIT09IDI1NSlcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIHN0b3AgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIXN0b3ApXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgaWR4ICs9IGxpbmU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBwcm9wZXJ0aWVzLmFzY2VudCA9IGJhc2VsaW5lIC0gaTtcblxuICAgICAgICBpZHggPSBwaXhlbHMgLSBsaW5lO1xuICAgICAgICBzdG9wID0gZmFsc2U7XG5cbiAgICAgICAgLy8gZGVzY2VudC4gc2NhbiBmcm9tIGJvdHRvbSB0byB0b3AgdW50aWwgd2UgZmluZCBhIG5vbiByZWQgcGl4ZWxcbiAgICAgICAgZm9yIChpID0gaGVpZ2h0OyBpID4gYmFzZWxpbmU7IGktLSlcbiAgICAgICAge1xuICAgICAgICAgICAgZm9yIChqID0gMDsgaiA8IGxpbmU7IGogKz0gNClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBpZiAoaW1hZ2VkYXRhW2lkeCArIGpdICE9PSAyNTUpXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBzdG9wID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCFzdG9wKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGlkeCAtPSBsaW5lO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcHJvcGVydGllcy5kZXNjZW50ID0gaSAtIGJhc2VsaW5lO1xuICAgICAgICBwcm9wZXJ0aWVzLmZvbnRTaXplID0gcHJvcGVydGllcy5hc2NlbnQgKyBwcm9wZXJ0aWVzLmRlc2NlbnQ7XG5cbiAgICAgICAgVGV4dC5mb250UHJvcGVydGllc0NhY2hlW2ZvbnRTdHlsZV0gPSBwcm9wZXJ0aWVzO1xuICAgIH1cblxuICAgIHJldHVybiBwcm9wZXJ0aWVzO1xufTtcblxuLyoqXG4gKiBBcHBsaWVzIG5ld2xpbmVzIHRvIGEgc3RyaW5nIHRvIGhhdmUgaXQgb3B0aW1hbGx5IGZpdCBpbnRvIHRoZSBob3Jpem9udGFsXG4gKiBib3VuZHMgc2V0IGJ5IHRoZSBUZXh0IG9iamVjdCdzIHdvcmRXcmFwV2lkdGggcHJvcGVydHkuXG4gKlxuICogQHBhcmFtIHRleHQge3N0cmluZ31cbiAqIEBwcml2YXRlXG4gKi9cblRleHQucHJvdG90eXBlLndvcmRXcmFwID0gZnVuY3Rpb24gKHRleHQpXG57XG4gICAgLy8gR3JlZWR5IHdyYXBwaW5nIGFsZ29yaXRobSB0aGF0IHdpbGwgd3JhcCB3b3JkcyBhcyB0aGUgbGluZSBncm93cyBsb25nZXJcbiAgICAvLyB0aGFuIGl0cyBob3Jpem9udGFsIGJvdW5kcy5cbiAgICB2YXIgcmVzdWx0ID0gJyc7XG4gICAgdmFyIGxpbmVzID0gdGV4dC5zcGxpdCgnXFxuJyk7XG4gICAgdmFyIHdvcmRXcmFwV2lkdGggPSB0aGlzLl9zdHlsZS53b3JkV3JhcFdpZHRoO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGluZXMubGVuZ3RoOyBpKyspXG4gICAge1xuICAgICAgICB2YXIgc3BhY2VMZWZ0ID0gd29yZFdyYXBXaWR0aDtcbiAgICAgICAgdmFyIHdvcmRzID0gbGluZXNbaV0uc3BsaXQoJyAnKTtcbiAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCB3b3Jkcy5sZW5ndGg7IGorKylcbiAgICAgICAge1xuICAgICAgICAgICAgdmFyIHdvcmRXaWR0aCA9IHRoaXMuY29udGV4dC5tZWFzdXJlVGV4dCh3b3Jkc1tqXSkud2lkdGg7XG4gICAgICAgICAgICB2YXIgd29yZFdpZHRoV2l0aFNwYWNlID0gd29yZFdpZHRoICsgdGhpcy5jb250ZXh0Lm1lYXN1cmVUZXh0KCcgJykud2lkdGg7XG4gICAgICAgICAgICBpZiAoaiA9PT0gMCB8fCB3b3JkV2lkdGhXaXRoU3BhY2UgPiBzcGFjZUxlZnQpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgLy8gU2tpcCBwcmludGluZyB0aGUgbmV3bGluZSBpZiBpdCdzIHRoZSBmaXJzdCB3b3JkIG9mIHRoZSBsaW5lIHRoYXQgaXNcbiAgICAgICAgICAgICAgICAvLyBncmVhdGVyIHRoYW4gdGhlIHdvcmQgd3JhcCB3aWR0aC5cbiAgICAgICAgICAgICAgICBpZiAoaiA+IDApXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQgKz0gJ1xcbic7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJlc3VsdCArPSB3b3Jkc1tqXTtcbiAgICAgICAgICAgICAgICBzcGFjZUxlZnQgPSB3b3JkV3JhcFdpZHRoIC0gd29yZFdpZHRoO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHNwYWNlTGVmdCAtPSB3b3JkV2lkdGhXaXRoU3BhY2U7XG4gICAgICAgICAgICAgICAgcmVzdWx0ICs9ICcgJyArIHdvcmRzW2pdO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGkgPCBsaW5lcy5sZW5ndGgtMSlcbiAgICAgICAge1xuICAgICAgICAgICAgcmVzdWx0ICs9ICdcXG4nO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG59O1xuXG4vKipcbiAqIFJldHVybnMgdGhlIGJvdW5kcyBvZiB0aGUgVGV4dCBhcyBhIHJlY3RhbmdsZS4gVGhlIGJvdW5kcyBjYWxjdWxhdGlvbiB0YWtlcyB0aGUgd29ybGRUcmFuc2Zvcm0gaW50byBhY2NvdW50LlxuICpcbiAqIEBwYXJhbSBtYXRyaXgge1BJWEkuTWF0cml4fSB0aGUgdHJhbnNmb3JtYXRpb24gbWF0cml4IG9mIHRoZSBUZXh0XG4gKiBAcmV0dXJuIHtQSVhJLlJlY3RhbmdsZX0gdGhlIGZyYW1pbmcgcmVjdGFuZ2xlXG4gKi9cblRleHQucHJvdG90eXBlLmdldEJvdW5kcyA9IGZ1bmN0aW9uIChtYXRyaXgpXG57XG4gICAgaWYgKHRoaXMuZGlydHkpXG4gICAge1xuICAgICAgICB0aGlzLnVwZGF0ZVRleHQoKTtcbiAgICB9XG5cbiAgICByZXR1cm4gU3ByaXRlLnByb3RvdHlwZS5nZXRCb3VuZHMuY2FsbCh0aGlzLCBtYXRyaXgpO1xufTtcblxuLyoqXG4gKiBEZXN0cm95cyB0aGlzIHRleHQgb2JqZWN0LlxuICpcbiAqIEBwYXJhbSBbZGVzdHJveUJhc2VUZXh0dXJlPXRydWVdIHtib29sZWFufSB3aGV0aGVyIHRvIGRlc3Ryb3kgdGhlIGJhc2UgdGV4dHVyZSBhcyB3ZWxsXG4gKi9cblRleHQucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoZGVzdHJveUJhc2VUZXh0dXJlKVxue1xuICAgIC8vIG1ha2Ugc3VyZSB0byByZXNldCB0aGUgdGhlIGNvbnRleHQgYW5kIGNhbnZhcy4uIGRvbnQgd2FudCB0aGlzIGhhbmdpbmcgYXJvdW5kIGluIG1lbW9yeSFcbiAgICB0aGlzLmNvbnRleHQgPSBudWxsO1xuICAgIHRoaXMuY2FudmFzID0gbnVsbDtcblxuICAgIHRoaXMuX3N0eWxlID0gbnVsbDtcblxuICAgIHRoaXMuX3RleHR1cmUuZGVzdHJveShkZXN0cm95QmFzZVRleHR1cmUgPT09IHVuZGVmaW5lZCA/IHRydWUgOiBkZXN0cm95QmFzZVRleHR1cmUpO1xufTtcbiIsInZhciB1dGlscyA9IHJlcXVpcmUoJy4uL3V0aWxzJyksXG4gICAgQ09OU1QgPSByZXF1aXJlKCcuLi9jb25zdCcpLFxuICAgIEV2ZW50RW1pdHRlciA9IHJlcXVpcmUoJ2V2ZW50ZW1pdHRlcjMnKTtcblxuLyoqXG4gKiBBIHRleHR1cmUgc3RvcmVzIHRoZSBpbmZvcm1hdGlvbiB0aGF0IHJlcHJlc2VudHMgYW4gaW1hZ2UuIEFsbCB0ZXh0dXJlcyBoYXZlIGEgYmFzZSB0ZXh0dXJlLlxuICpcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqIEBwYXJhbSBzb3VyY2Uge0ltYWdlfENhbnZhc30gdGhlIHNvdXJjZSBvYmplY3Qgb2YgdGhlIHRleHR1cmUuXG4gKiBAcGFyYW0gW3NjYWxlTW9kZT1QSVhJLlNDQUxFX01PREVTLkRFRkFVTFRdIHtudW1iZXJ9IFNlZSB7QGxpbmsgUElYSS5TQ0FMRV9NT0RFU30gZm9yIHBvc3NpYmxlIHZhbHVlc1xuICogQHBhcmFtIHJlc29sdXRpb24ge251bWJlcn0gdGhlIHJlc29sdXRpb24gb2YgdGhlIHRleHR1cmUgZm9yIGRldmljZXMgd2l0aCBkaWZmZXJlbnQgcGl4ZWwgcmF0aW9zXG4gKi9cbmZ1bmN0aW9uIEJhc2VUZXh0dXJlKHNvdXJjZSwgc2NhbGVNb2RlLCByZXNvbHV0aW9uKVxue1xuICAgIEV2ZW50RW1pdHRlci5jYWxsKHRoaXMpO1xuXG4gICAgdGhpcy51aWQgPSB1dGlscy51aWQoKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBSZXNvbHV0aW9uIG9mIHRoZSB0ZXh0dXJlLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMucmVzb2x1dGlvbiA9IHJlc29sdXRpb24gfHwgMTtcblxuICAgIC8qKlxuICAgICAqIFRoZSB3aWR0aCBvZiB0aGUgYmFzZSB0ZXh0dXJlIHNldCB3aGVuIHRoZSBpbWFnZSBoYXMgbG9hZGVkXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQHJlYWRPbmx5XG4gICAgICovXG4gICAgdGhpcy53aWR0aCA9IDEwMDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBoZWlnaHQgb2YgdGhlIGJhc2UgdGV4dHVyZSBzZXQgd2hlbiB0aGUgaW1hZ2UgaGFzIGxvYWRlZFxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEByZWFkT25seVxuICAgICAqL1xuICAgIHRoaXMuaGVpZ2h0ID0gMTAwO1xuXG4gICAgLy8gVE9ETyBkb2NzXG4gICAgLy8gdXNlZCB0byBzdG9yZSB0aGUgYWN0dWFsIGRpbWVuc2lvbnMgb2YgdGhlIHNvdXJjZVxuICAgIC8qKlxuICAgICAqIFVzZWQgdG8gc3RvcmUgdGhlIGFjdHVhbCB3aWR0aCBvZiB0aGUgc291cmNlIG9mIHRoaXMgdGV4dHVyZVxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEByZWFkT25seVxuICAgICAqL1xuICAgIHRoaXMucmVhbFdpZHRoID0gMTAwO1xuICAgIC8qKlxuICAgICAqIFVzZWQgdG8gc3RvcmUgdGhlIGFjdHVhbCBoZWlnaHQgb2YgdGhlIHNvdXJjZSBvZiB0aGlzIHRleHR1cmVcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAcmVhZE9ubHlcbiAgICAgKi9cbiAgICB0aGlzLnJlYWxIZWlnaHQgPSAxMDA7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgc2NhbGUgbW9kZSB0byBhcHBseSB3aGVuIHNjYWxpbmcgdGhpcyB0ZXh0dXJlXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgUElYSS5TQ0FMRV9NT0RFUy5MSU5FQVJcbiAgICAgKiBAc2VlIFBJWEkuU0NBTEVfTU9ERVNcbiAgICAgKi9cbiAgICB0aGlzLnNjYWxlTW9kZSA9IHNjYWxlTW9kZSB8fCBDT05TVC5TQ0FMRV9NT0RFUy5ERUZBVUxUO1xuXG4gICAgLyoqXG4gICAgICogU2V0IHRvIHRydWUgb25jZSB0aGUgYmFzZSB0ZXh0dXJlIGhhcyBzdWNjZXNzZnVsbHkgbG9hZGVkLlxuICAgICAqXG4gICAgICogVGhpcyBpcyBuZXZlciB0cnVlIGlmIHRoZSB1bmRlcmx5aW5nIHNvdXJjZSBmYWlscyB0byBsb2FkIG9yIGhhcyBubyB0ZXh0dXJlIGRhdGEuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqIEByZWFkT25seVxuICAgICAqL1xuICAgIHRoaXMuaGFzTG9hZGVkID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBTZXQgdG8gdHJ1ZSBpZiB0aGUgc291cmNlIGlzIGN1cnJlbnRseSBsb2FkaW5nLlxuICAgICAqXG4gICAgICogSWYgYW4gSW1hZ2Ugc291cmNlIGlzIGxvYWRpbmcgdGhlICdsb2FkZWQnIG9yICdlcnJvcicgZXZlbnQgd2lsbCBiZVxuICAgICAqIGRpc3BhdGNoZWQgd2hlbiB0aGUgb3BlcmF0aW9uIGVuZHMuIEFuIHVuZGVyeWxpbmcgc291cmNlIHRoYXQgaXNcbiAgICAgKiBpbW1lZGlhdGVseS1hdmFpbGFibGUgYnlwYXNzZXMgbG9hZGluZyBlbnRpcmVseS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICogQHJlYWRvbmx5XG4gICAgICovXG4gICAgdGhpcy5pc0xvYWRpbmcgPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBpbWFnZSBzb3VyY2UgdGhhdCBpcyB1c2VkIHRvIGNyZWF0ZSB0aGUgdGV4dHVyZS5cbiAgICAgKlxuICAgICAqIFRPRE86IE1ha2UgdGhpcyBhIHNldHRlciB0aGF0IGNhbGxzIGxvYWRTb3VyY2UoKTtcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge0ltYWdlfENhbnZhc31cbiAgICAgKiBAcmVhZG9ubHlcbiAgICAgKi9cbiAgICB0aGlzLnNvdXJjZSA9IG51bGw7IC8vIHNldCBpbiBsb2FkU291cmNlLCBpZiBhdCBhbGxcblxuICAgIC8qKlxuICAgICAqIENvbnRyb2xzIGlmIFJHQiBjaGFubmVscyBzaG91bGQgYmUgcHJlLW11bHRpcGxpZWQgYnkgQWxwaGEgIChXZWJHTCBvbmx5KVxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKiBAZGVmYXVsdCB0cnVlXG4gICAgICovXG4gICAgdGhpcy5wcmVtdWx0aXBsaWVkQWxwaGEgPSB0cnVlO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7c3RyaW5nfVxuICAgICAqL1xuICAgIHRoaXMuaW1hZ2VVcmwgPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogV2V0aGVyIG9yIG5vdCB0aGUgdGV4dHVyZSBpcyBhIHBvd2VyIG9mIHR3bywgdHJ5IHRvIHVzZSBwb3dlciBvZiB0d28gdGV4dHVyZXMgYXMgbXVjaCBhcyB5b3UgY2FuXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuaXNQb3dlck9mVHdvID0gZmFsc2U7XG5cbiAgICAvLyB1c2VkIGZvciB3ZWJHTFxuXG4gICAgLyoqXG4gICAgICpcbiAgICAgKiBTZXQgdGhpcyB0byB0cnVlIGlmIGEgbWlwbWFwIG9mIHRoaXMgdGV4dHVyZSBuZWVkcyB0byBiZSBnZW5lcmF0ZWQuIFRoaXMgdmFsdWUgbmVlZHMgdG8gYmUgc2V0IGJlZm9yZSB0aGUgdGV4dHVyZSBpcyB1c2VkXG4gICAgICogQWxzbyB0aGUgdGV4dHVyZSBtdXN0IGJlIGEgcG93ZXIgb2YgdHdvIHNpemUgdG8gd29ya1xuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKi9cbiAgICB0aGlzLm1pcG1hcCA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogQSBtYXAgb2YgcmVuZGVyZXIgSURzIHRvIHdlYmdsIHRleHR1cmVzXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtvYmplY3Q8bnVtYmVyLCBXZWJHTFRleHR1cmU+fVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fZ2xUZXh0dXJlcyA9IHt9O1xuICAgIHRoaXMuX2FjdGl2ZSA9IGZhbHNlO1xuICAgIHRoaXMuX2lkID0gMDtcbiAgICBcbiAgICAvLyBpZiBubyBzb3VyY2UgcGFzc2VkIGRvbid0IHRyeSB0byBsb2FkXG4gICAgaWYgKHNvdXJjZSlcbiAgICB7XG4gICAgICAgIHRoaXMubG9hZFNvdXJjZShzb3VyY2UpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEZpcmVkIHdoZW4gYSBub3QtaW1tZWRpYXRlbHktYXZhaWxhYmxlIHNvdXJjZSBmaW5pc2hlcyBsb2FkaW5nLlxuICAgICAqXG4gICAgICogQGV2ZW50IGxvYWRlZFxuICAgICAqIEBtZW1iZXJvZiBQSVhJLkJhc2VUZXh0dXJlI1xuICAgICAqIEBwcm90ZWN0ZWRcbiAgICAgKi9cblxuICAgIC8qKlxuICAgICAqIEZpcmVkIHdoZW4gYSBub3QtaW1tZWRpYXRlbHktYXZhaWxhYmxlIHNvdXJjZSBmYWlscyB0byBsb2FkLlxuICAgICAqXG4gICAgICogQGV2ZW50IGVycm9yXG4gICAgICogQG1lbWJlcm9mIFBJWEkuQmFzZVRleHR1cmUjXG4gICAgICogQHByb3RlY3RlZFxuICAgICAqL1xufVxuXG5CYXNlVGV4dHVyZS5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKEV2ZW50RW1pdHRlci5wcm90b3R5cGUpO1xuQmFzZVRleHR1cmUucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gQmFzZVRleHR1cmU7XG5tb2R1bGUuZXhwb3J0cyA9IEJhc2VUZXh0dXJlO1xuXG4vKipcbiAqIFVwZGF0ZXMgdGhlIHRleHR1cmUgb24gYWxsIHRoZSB3ZWJnbCByZW5kZXJlcnMsIHRoaXMgYWxzbyBhc3N1bWVzIHRoZSBzcmMgaGFzIGNoYW5nZWQuXG4gKlxuICogQGZpcmVzIHVwZGF0ZVxuICovXG5CYXNlVGV4dHVyZS5wcm90b3R5cGUudXBkYXRlID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLnJlYWxXaWR0aCA9IHRoaXMuc291cmNlLm5hdHVyYWxXaWR0aCB8fCB0aGlzLnNvdXJjZS53aWR0aDtcbiAgICB0aGlzLnJlYWxIZWlnaHQgPSB0aGlzLnNvdXJjZS5uYXR1cmFsSGVpZ2h0IHx8IHRoaXMuc291cmNlLmhlaWdodDtcblxuICAgIHRoaXMud2lkdGggPSB0aGlzLnJlYWxXaWR0aCAvIHRoaXMucmVzb2x1dGlvbjtcbiAgICB0aGlzLmhlaWdodCA9IHRoaXMucmVhbEhlaWdodCAvIHRoaXMucmVzb2x1dGlvbjtcblxuICAgIHRoaXMuaXNQb3dlck9mVHdvID0gdXRpbHMuaXNQb3dlck9mVHdvKHRoaXMucmVhbFdpZHRoLCB0aGlzLnJlYWxIZWlnaHQpO1xuXG4gICAgdGhpcy5lbWl0KCd1cGRhdGUnLCB0aGlzKTtcbn07XG5cbi8qKlxuICogTG9hZCBhIHNvdXJjZS5cbiAqXG4gKiBJZiB0aGUgc291cmNlIGlzIG5vdC1pbW1lZGlhdGVseS1hdmFpbGFibGUsIHN1Y2ggYXMgYW4gaW1hZ2UgdGhhdCBuZWVkcyB0byBiZVxuICogZG93bmxvYWRlZCwgdGhlbiB0aGUgJ2xvYWRlZCcgb3IgJ2Vycm9yJyBldmVudCB3aWxsIGJlIGRpc3BhdGNoZWQgaW4gdGhlIGZ1dHVyZVxuICogYW5kIGBoYXNMb2FkZWRgIHdpbGwgcmVtYWluIGZhbHNlIGFmdGVyIHRoaXMgY2FsbC5cbiAqXG4gKiBUaGUgbG9naWMgc3RhdGUgYWZ0ZXIgY2FsbGluZyBgbG9hZFNvdXJjZWAgZGlyZWN0bHkgb3IgaW5kaXJlY3RseSAoZWcuIGBmcm9tSW1hZ2VgLCBgbmV3IEJhc2VUZXh0dXJlYCkgaXM6XG4gKlxuICogICAgIGlmICh0ZXh0dXJlLmhhc0xvYWRlZClcbiB7XG4gKiAgICAgICAgLy8gdGV4dHVyZSByZWFkeSBmb3IgdXNlXG4gKiAgICAgfSBlbHNlIGlmICh0ZXh0dXJlLmlzTG9hZGluZylcbiB7XG4gKiAgICAgICAgLy8gbGlzdGVuIHRvICdsb2FkZWQnIGFuZC9vciAnZXJyb3InIGV2ZW50cyBvbiB0ZXh0dXJlXG4gKiAgICAgfSBlbHNlIHtcbiAqICAgICAgICAvLyBub3QgbG9hZGluZywgbm90IGdvaW5nIHRvIGxvYWQgVU5MRVNTIHRoZSBzb3VyY2UgaXMgcmVsb2FkZWRcbiAqICAgICAgICAvLyAoaXQgbWF5IHN0aWxsIG1ha2Ugc2Vuc2UgdG8gbGlzdGVuIHRvIHRoZSBldmVudHMpXG4gKiAgICAgfVxuICpcbiAqIEBwcm90ZWN0ZWRcbiAqIEBwYXJhbSBzb3VyY2Uge0ltYWdlfENhbnZhc30gdGhlIHNvdXJjZSBvYmplY3Qgb2YgdGhlIHRleHR1cmUuXG4gKi9cbkJhc2VUZXh0dXJlLnByb3RvdHlwZS5sb2FkU291cmNlID0gZnVuY3Rpb24gKHNvdXJjZSlcbntcbiAgICB2YXIgd2FzTG9hZGluZyA9IHRoaXMuaXNMb2FkaW5nO1xuICAgIHRoaXMuaGFzTG9hZGVkID0gZmFsc2U7XG4gICAgdGhpcy5pc0xvYWRpbmcgPSBmYWxzZTtcblxuICAgIGlmICh3YXNMb2FkaW5nICYmIHRoaXMuc291cmNlKVxuICAgIHtcbiAgICAgICAgdGhpcy5zb3VyY2Uub25sb2FkID0gbnVsbDtcbiAgICAgICAgdGhpcy5zb3VyY2Uub25lcnJvciA9IG51bGw7XG4gICAgfVxuXG4gICAgdGhpcy5zb3VyY2UgPSBzb3VyY2U7XG5cbiAgICAvLyBBcHBseSBzb3VyY2UgaWYgbG9hZGVkLiBPdGhlcndpc2Ugc2V0dXAgYXBwcm9wcmlhdGUgbG9hZGluZyBtb25pdG9ycy5cbiAgICBpZiAoKHRoaXMuc291cmNlLmNvbXBsZXRlIHx8IHRoaXMuc291cmNlLmdldENvbnRleHQpICYmIHRoaXMuc291cmNlLndpZHRoICYmIHRoaXMuc291cmNlLmhlaWdodClcbiAgICB7XG4gICAgICAgIHRoaXMuX3NvdXJjZUxvYWRlZCgpO1xuICAgIH1cbiAgICBlbHNlIGlmICghc291cmNlLmdldENvbnRleHQpXG4gICAge1xuXG4gICAgICAgIC8vIEltYWdlIGZhaWwgLyBub3QgcmVhZHlcbiAgICAgICAgdGhpcy5pc0xvYWRpbmcgPSB0cnVlO1xuXG4gICAgICAgIHZhciBzY29wZSA9IHRoaXM7XG5cbiAgICAgICAgc291cmNlLm9ubG9hZCA9IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHNvdXJjZS5vbmxvYWQgPSBudWxsO1xuICAgICAgICAgICAgc291cmNlLm9uZXJyb3IgPSBudWxsO1xuXG4gICAgICAgICAgICBpZiAoIXNjb3BlLmlzTG9hZGluZylcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHNjb3BlLmlzTG9hZGluZyA9IGZhbHNlO1xuICAgICAgICAgICAgc2NvcGUuX3NvdXJjZUxvYWRlZCgpO1xuXG4gICAgICAgICAgICBzY29wZS5lbWl0KCdsb2FkZWQnLCBzY29wZSk7XG4gICAgICAgIH07XG5cbiAgICAgICAgc291cmNlLm9uZXJyb3IgPSBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICBzb3VyY2Uub25sb2FkID0gbnVsbDtcbiAgICAgICAgICAgIHNvdXJjZS5vbmVycm9yID0gbnVsbDtcblxuICAgICAgICAgICAgaWYgKCFzY29wZS5pc0xvYWRpbmcpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBzY29wZS5pc0xvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgICAgIHNjb3BlLmVtaXQoJ2Vycm9yJywgc2NvcGUpO1xuICAgICAgICB9O1xuXG4gICAgICAgIC8vIFBlciBodHRwOi8vd3d3LnczLm9yZy9UUi9odG1sNS9lbWJlZGRlZC1jb250ZW50LTAuaHRtbCN0aGUtaW1nLWVsZW1lbnRcbiAgICAgICAgLy8gICBcIlRoZSB2YWx1ZSBvZiBgY29tcGxldGVgIGNhbiB0aHVzIGNoYW5nZSB3aGlsZSBhIHNjcmlwdCBpcyBleGVjdXRpbmcuXCJcbiAgICAgICAgLy8gU28gY29tcGxldGUgbmVlZHMgdG8gYmUgcmUtY2hlY2tlZCBhZnRlciB0aGUgY2FsbGJhY2tzIGhhdmUgYmVlbiBhZGRlZC4uXG4gICAgICAgIC8vIE5PVEU6IGNvbXBsZXRlIHdpbGwgYmUgdHJ1ZSBpZiB0aGUgaW1hZ2UgaGFzIG5vIHNyYyBzbyBiZXN0IHRvIGNoZWNrIGlmIHRoZSBzcmMgaXMgc2V0LlxuICAgICAgICBpZiAoc291cmNlLmNvbXBsZXRlICYmIHNvdXJjZS5zcmMpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuaXNMb2FkaW5nID0gZmFsc2U7XG5cbiAgICAgICAgICAgIC8vIC4uYW5kIGlmIHdlJ3JlIGNvbXBsZXRlIG5vdywgbm8gbmVlZCBmb3IgY2FsbGJhY2tzXG4gICAgICAgICAgICBzb3VyY2Uub25sb2FkID0gbnVsbDtcbiAgICAgICAgICAgIHNvdXJjZS5vbmVycm9yID0gbnVsbDtcblxuICAgICAgICAgICAgaWYgKHNvdXJjZS53aWR0aCAmJiBzb3VyY2UuaGVpZ2h0KVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHRoaXMuX3NvdXJjZUxvYWRlZCgpO1xuXG4gICAgICAgICAgICAgICAgLy8gSWYgYW55IHByZXZpb3VzIHN1YnNjcmliZXJzIHBvc3NpYmxlXG4gICAgICAgICAgICAgICAgaWYgKHdhc0xvYWRpbmcpXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmVtaXQoJ2xvYWRlZCcsIHRoaXMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAvLyBJZiBhbnkgcHJldmlvdXMgc3Vic2NyaWJlcnMgcG9zc2libGVcbiAgICAgICAgICAgICAgICBpZiAod2FzTG9hZGluZylcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZW1pdCgnZXJyb3InLCB0aGlzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG59O1xuXG4vKipcbiAqIFVzZWQgaW50ZXJuYWxseSB0byB1cGRhdGUgdGhlIHdpZHRoLCBoZWlnaHQsIGFuZCBzb21lIG90aGVyIHRyYWNraW5nIHZhcnMgb25jZVxuICogYSBzb3VyY2UgaGFzIHN1Y2Nlc3NmdWxseSBsb2FkZWQuXG4gKlxuICogQHByaXZhdGVcbiAqL1xuQmFzZVRleHR1cmUucHJvdG90eXBlLl9zb3VyY2VMb2FkZWQgPSBmdW5jdGlvbiAoKVxue1xuICAgIHRoaXMuaGFzTG9hZGVkID0gdHJ1ZTtcbiAgICB0aGlzLnVwZGF0ZSgpO1xufTtcblxuLyoqXG4gKiBEZXN0cm95cyB0aGlzIGJhc2UgdGV4dHVyZVxuICpcbiAqL1xuQmFzZVRleHR1cmUucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoKVxue1xuICAgIGlmICh0aGlzLmltYWdlVXJsKVxuICAgIHtcbiAgICAgICAgZGVsZXRlIHV0aWxzLkJhc2VUZXh0dXJlQ2FjaGVbdGhpcy5pbWFnZVVybF07XG4gICAgICAgIGRlbGV0ZSB1dGlscy5UZXh0dXJlQ2FjaGVbdGhpcy5pbWFnZVVybF07XG5cbiAgICAgICAgdGhpcy5pbWFnZVVybCA9IG51bGw7XG5cbiAgICAgICAgaWYgKCFuYXZpZ2F0b3IuaXNDb2Nvb25KUylcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5zb3VyY2Uuc3JjID0gJyc7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZWxzZSBpZiAodGhpcy5zb3VyY2UgJiYgdGhpcy5zb3VyY2UuX3BpeGlJZClcbiAgICB7XG4gICAgICAgIGRlbGV0ZSB1dGlscy5CYXNlVGV4dHVyZUNhY2hlW3RoaXMuc291cmNlLl9waXhpSWRdO1xuICAgIH1cblxuICAgIHRoaXMuc291cmNlID0gbnVsbDtcblxuICAgIHRoaXMuZGlzcG9zZSgpO1xufTtcblxuLyoqXG4gKiBGcmVlcyB0aGUgdGV4dHVyZSBmcm9tIFdlYkdMIG1lbW9yeSB3aXRob3V0IGRlc3Ryb3lpbmcgdGhpcyB0ZXh0dXJlIG9iamVjdC5cbiAqIFRoaXMgbWVhbnMgeW91IGNhbiBzdGlsbCB1c2UgdGhlIHRleHR1cmUgbGF0ZXIgd2hpY2ggd2lsbCB1cGxvYWQgaXQgdG8gR1BVXG4gKiBtZW1vcnkgYWdhaW4uXG4gKlxuICovXG5CYXNlVGV4dHVyZS5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy5lbWl0KCdkaXNwb3NlJywgdGhpcyk7XG5cbiAgICAvLyB0aGlzIHNob3VsZCBubyBsb25nZXIgYmUgbmVlZGVkLCB0aGUgcmVuZGVyZXJzIHNob3VsZCBjbGVhbnVwIGFsbCB0aGUgZ2wgdGV4dHVyZXMuXG4gICAgLy8gdGhpcy5fZ2xUZXh0dXJlcyA9IHt9O1xufTtcblxuLyoqXG4gKiBDaGFuZ2VzIHRoZSBzb3VyY2UgaW1hZ2Ugb2YgdGhlIHRleHR1cmUuXG4gKiBUaGUgb3JpZ2luYWwgc291cmNlIG11c3QgYmUgYW4gSW1hZ2UgZWxlbWVudC5cbiAqXG4gKiBAcGFyYW0gbmV3U3JjIHtzdHJpbmd9IHRoZSBwYXRoIG9mIHRoZSBpbWFnZVxuICovXG5CYXNlVGV4dHVyZS5wcm90b3R5cGUudXBkYXRlU291cmNlSW1hZ2UgPSBmdW5jdGlvbiAobmV3U3JjKVxue1xuICAgIHRoaXMuc291cmNlLnNyYyA9IG5ld1NyYztcblxuICAgIHRoaXMubG9hZFNvdXJjZSh0aGlzLnNvdXJjZSk7XG59O1xuXG4vKipcbiAqIEhlbHBlciBmdW5jdGlvbiB0aGF0IGNyZWF0ZXMgYSBiYXNlIHRleHR1cmUgZnJvbSB0aGUgZ2l2ZW4gaW1hZ2UgdXJsLlxuICogSWYgdGhlIGltYWdlIGlzIG5vdCBpbiB0aGUgYmFzZSB0ZXh0dXJlIGNhY2hlIGl0IHdpbGwgYmUgY3JlYXRlZCBhbmQgbG9hZGVkLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBwYXJhbSBpbWFnZVVybCB7c3RyaW5nfSBUaGUgaW1hZ2UgdXJsIG9mIHRoZSB0ZXh0dXJlXG4gKiBAcGFyYW0gW2Nyb3Nzb3JpZ2luPShhdXRvKV0ge2Jvb2xlYW59IFNob3VsZCB1c2UgYW5vbnltb3VzIENPUlM/IERlZmF1bHRzIHRvIHRydWUgaWYgdGhlIFVSTCBpcyBub3QgYSBkYXRhLVVSSS5cbiAqIEBwYXJhbSBbc2NhbGVNb2RlPVBJWEkuU0NBTEVfTU9ERVMuREVGQVVMVF0ge251bWJlcn0gU2VlIHtAbGluayBQSVhJLlNDQUxFX01PREVTfSBmb3IgcG9zc2libGUgdmFsdWVzXG4gKiBAcmV0dXJuIFBJWEkuQmFzZVRleHR1cmVcbiAqL1xuQmFzZVRleHR1cmUuZnJvbUltYWdlID0gZnVuY3Rpb24gKGltYWdlVXJsLCBjcm9zc29yaWdpbiwgc2NhbGVNb2RlKVxue1xuICAgIHZhciBiYXNlVGV4dHVyZSA9IHV0aWxzLkJhc2VUZXh0dXJlQ2FjaGVbaW1hZ2VVcmxdO1xuXG4gICAgaWYgKGNyb3Nzb3JpZ2luID09PSB1bmRlZmluZWQgJiYgaW1hZ2VVcmwuaW5kZXhPZignZGF0YTonKSAhPT0gMClcbiAgICB7XG4gICAgICAgIGNyb3Nzb3JpZ2luID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBpZiAoIWJhc2VUZXh0dXJlKVxuICAgIHtcbiAgICAgICAgLy8gbmV3IEltYWdlKCkgYnJlYWtzIHRleCBsb2FkaW5nIGluIHNvbWUgdmVyc2lvbnMgb2YgQ2hyb21lLlxuICAgICAgICAvLyBTZWUgaHR0cHM6Ly9jb2RlLmdvb2dsZS5jb20vcC9jaHJvbWl1bS9pc3N1ZXMvZGV0YWlsP2lkPTIzODA3MVxuICAgICAgICB2YXIgaW1hZ2UgPSBuZXcgSW1hZ2UoKTsvL2RvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2ltZycpO1xuICAgICAgICBpZiAoY3Jvc3NvcmlnaW4pXG4gICAgICAgIHtcbiAgICAgICAgICAgIGltYWdlLmNyb3NzT3JpZ2luID0gJyc7XG4gICAgICAgIH1cblxuICAgICAgICBiYXNlVGV4dHVyZSA9IG5ldyBCYXNlVGV4dHVyZShpbWFnZSwgc2NhbGVNb2RlKTtcbiAgICAgICAgYmFzZVRleHR1cmUuaW1hZ2VVcmwgPSBpbWFnZVVybDtcblxuICAgICAgICBpbWFnZS5zcmMgPSBpbWFnZVVybDtcblxuICAgICAgICB1dGlscy5CYXNlVGV4dHVyZUNhY2hlW2ltYWdlVXJsXSA9IGJhc2VUZXh0dXJlO1xuXG4gICAgICAgIC8vIGlmIHRoZXJlIGlzIGFuIEAyeCBhdCB0aGUgZW5kIG9mIHRoZSB1cmwgd2UgYXJlIGdvaW5nIHRvIGFzc3VtZSBpdHMgYSBoaWdocmVzIGltYWdlXG4gICAgICAgIGJhc2VUZXh0dXJlLnJlc29sdXRpb24gPSB1dGlscy5nZXRSZXNvbHV0aW9uT2ZVcmwoaW1hZ2VVcmwpO1xuICAgIH1cblxuICAgIHJldHVybiBiYXNlVGV4dHVyZTtcbn07XG5cbi8qKlxuICogSGVscGVyIGZ1bmN0aW9uIHRoYXQgY3JlYXRlcyBhIGJhc2UgdGV4dHVyZSBmcm9tIHRoZSBnaXZlbiBjYW52YXMgZWxlbWVudC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAcGFyYW0gY2FudmFzIHtDYW52YXN9IFRoZSBjYW52YXMgZWxlbWVudCBzb3VyY2Ugb2YgdGhlIHRleHR1cmVcbiAqIEBwYXJhbSBzY2FsZU1vZGUge251bWJlcn0gU2VlIHtAbGluayBQSVhJLlNDQUxFX01PREVTfSBmb3IgcG9zc2libGUgdmFsdWVzXG4gKiBAcmV0dXJuIFBJWEkuQmFzZVRleHR1cmVcbiAqL1xuQmFzZVRleHR1cmUuZnJvbUNhbnZhcyA9IGZ1bmN0aW9uIChjYW52YXMsIHNjYWxlTW9kZSlcbntcbiAgICBpZiAoIWNhbnZhcy5fcGl4aUlkKVxuICAgIHtcbiAgICAgICAgY2FudmFzLl9waXhpSWQgPSAnY2FudmFzXycgKyB1dGlscy51aWQoKTtcbiAgICB9XG5cbiAgICB2YXIgYmFzZVRleHR1cmUgPSB1dGlscy5CYXNlVGV4dHVyZUNhY2hlW2NhbnZhcy5fcGl4aUlkXTtcblxuICAgIGlmICghYmFzZVRleHR1cmUpXG4gICAge1xuICAgICAgICBiYXNlVGV4dHVyZSA9IG5ldyBCYXNlVGV4dHVyZShjYW52YXMsIHNjYWxlTW9kZSk7XG4gICAgICAgIHV0aWxzLkJhc2VUZXh0dXJlQ2FjaGVbY2FudmFzLl9waXhpSWRdID0gYmFzZVRleHR1cmU7XG4gICAgfVxuXG4gICAgcmV0dXJuIGJhc2VUZXh0dXJlO1xufTtcbiIsInZhciBCYXNlVGV4dHVyZSA9IHJlcXVpcmUoJy4vQmFzZVRleHR1cmUnKSxcbiAgICBUZXh0dXJlID0gcmVxdWlyZSgnLi9UZXh0dXJlJyksXG4gICAgUmVuZGVyVGFyZ2V0ID0gcmVxdWlyZSgnLi4vcmVuZGVyZXJzL3dlYmdsL3V0aWxzL1JlbmRlclRhcmdldCcpLFxuICAgIEZpbHRlck1hbmFnZXIgPSByZXF1aXJlKCcuLi9yZW5kZXJlcnMvd2ViZ2wvbWFuYWdlcnMvRmlsdGVyTWFuYWdlcicpLFxuICAgIENhbnZhc0J1ZmZlciA9IHJlcXVpcmUoJy4uL3JlbmRlcmVycy9jYW52YXMvdXRpbHMvQ2FudmFzQnVmZmVyJyksXG4gICAgbWF0aCA9IHJlcXVpcmUoJy4uL21hdGgnKSxcbiAgICBDT05TVCA9IHJlcXVpcmUoJy4uL2NvbnN0JyksXG4gICAgdGVtcE1hdHJpeCA9IG5ldyBtYXRoLk1hdHJpeCgpO1xuXG4vKipcbiAqIEEgUmVuZGVyVGV4dHVyZSBpcyBhIHNwZWNpYWwgdGV4dHVyZSB0aGF0IGFsbG93cyBhbnkgUGl4aSBkaXNwbGF5IG9iamVjdCB0byBiZSByZW5kZXJlZCB0byBpdC5cbiAqXG4gKiBfX0hpbnRfXzogQWxsIERpc3BsYXlPYmplY3RzIChpLmUuIFNwcml0ZXMpIHRoYXQgcmVuZGVyIHRvIGEgUmVuZGVyVGV4dHVyZSBzaG91bGQgYmUgcHJlbG9hZGVkXG4gKiBvdGhlcndpc2UgYmxhY2sgcmVjdGFuZ2xlcyB3aWxsIGJlIGRyYXduIGluc3RlYWQuXG4gKlxuICogQSBSZW5kZXJUZXh0dXJlIHRha2VzIGEgc25hcHNob3Qgb2YgYW55IERpc3BsYXkgT2JqZWN0IGdpdmVuIHRvIGl0cyByZW5kZXIgbWV0aG9kLiBUaGUgcG9zaXRpb25cbiAqIGFuZCByb3RhdGlvbiBvZiB0aGUgZ2l2ZW4gRGlzcGxheSBPYmplY3RzIGlzIGlnbm9yZWQuIEZvciBleGFtcGxlOlxuICpcbiAqIGBgYGpzXG4gKiB2YXIgcmVuZGVyZXIgPSBQSVhJLmF1dG9EZXRlY3RSZW5kZXJlcigxMDI0LCAxMDI0LCB7IHZpZXc6IGNhbnZhcywgcmF0aW86IDEgfSk7XG4gKiB2YXIgcmVuZGVyVGV4dHVyZSA9IG5ldyBQSVhJLlJlbmRlclRleHR1cmUocmVuZGVyZXIsIDgwMCwgNjAwKTtcbiAqIHZhciBzcHJpdGUgPSBQSVhJLlNwcml0ZS5mcm9tSW1hZ2UoXCJzcGluT2JqXzAxLnBuZ1wiKTtcbiAqXG4gKiBzcHJpdGUucG9zaXRpb24ueCA9IDgwMC8yO1xuICogc3ByaXRlLnBvc2l0aW9uLnkgPSA2MDAvMjtcbiAqIHNwcml0ZS5hbmNob3IueCA9IDAuNTtcbiAqIHNwcml0ZS5hbmNob3IueSA9IDAuNTtcbiAqXG4gKiByZW5kZXJUZXh0dXJlLnJlbmRlcihzcHJpdGUpO1xuICogYGBgXG4gKlxuICogVGhlIFNwcml0ZSBpbiB0aGlzIGNhc2Ugd2lsbCBiZSByZW5kZXJlZCB0byBhIHBvc2l0aW9uIG9mIDAsMC4gVG8gcmVuZGVyIHRoaXMgc3ByaXRlIGF0IGl0cyBhY3R1YWxcbiAqIHBvc2l0aW9uIGEgQ29udGFpbmVyIHNob3VsZCBiZSB1c2VkOlxuICpcbiAqIGBgYGpzXG4gKiB2YXIgZG9jID0gbmV3IFBJWEkuQ29udGFpbmVyKCk7XG4gKlxuICogZG9jLmFkZENoaWxkKHNwcml0ZSk7XG4gKlxuICogcmVuZGVyVGV4dHVyZS5yZW5kZXIoZG9jKTsgIC8vIFJlbmRlcnMgdG8gY2VudGVyIG9mIHJlbmRlclRleHR1cmVcbiAqIGBgYFxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5UZXh0dXJlXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLkNhbnZhc1JlbmRlcmVyfFBJWEkuV2ViR0xSZW5kZXJlcn0gVGhlIHJlbmRlcmVyIHVzZWQgZm9yIHRoaXMgUmVuZGVyVGV4dHVyZVxuICogQHBhcmFtIFt3aWR0aD0xMDBdIHtudW1iZXJ9IFRoZSB3aWR0aCBvZiB0aGUgcmVuZGVyIHRleHR1cmVcbiAqIEBwYXJhbSBbaGVpZ2h0PTEwMF0ge251bWJlcn0gVGhlIGhlaWdodCBvZiB0aGUgcmVuZGVyIHRleHR1cmVcbiAqIEBwYXJhbSBbc2NhbGVNb2RlXSB7bnVtYmVyfSBTZWUge0BsaW5rIFBJWEkuU0NBTEVfTU9ERVN9IGZvciBwb3NzaWJsZSB2YWx1ZXNcbiAqIEBwYXJhbSBbcmVzb2x1dGlvbj0xXSB7bnVtYmVyfSBUaGUgcmVzb2x1dGlvbiBvZiB0aGUgdGV4dHVyZSBiZWluZyBnZW5lcmF0ZWRcbiAqL1xuZnVuY3Rpb24gUmVuZGVyVGV4dHVyZShyZW5kZXJlciwgd2lkdGgsIGhlaWdodCwgc2NhbGVNb2RlLCByZXNvbHV0aW9uKVxue1xuICAgIGlmICghcmVuZGVyZXIpXG4gICAge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1VuYWJsZSB0byBjcmVhdGUgUmVuZGVyVGV4dHVyZSwgeW91IG11c3QgcGFzcyBhIHJlbmRlcmVyIGludG8gdGhlIGNvbnN0cnVjdG9yLicpO1xuICAgIH1cblxuICAgIHdpZHRoID0gd2lkdGggfHwgMTAwO1xuICAgIGhlaWdodCA9IGhlaWdodCB8fCAxMDA7XG4gICAgcmVzb2x1dGlvbiA9IHJlc29sdXRpb24gfHwgQ09OU1QuUkVTT0xVVElPTjtcblxuICAgIC8qKlxuICAgICAqIFRoZSBiYXNlIHRleHR1cmUgb2JqZWN0IHRoYXQgdGhpcyB0ZXh0dXJlIHVzZXNcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge0Jhc2VUZXh0dXJlfVxuICAgICAqL1xuICAgIHZhciBiYXNlVGV4dHVyZSA9IG5ldyBCYXNlVGV4dHVyZSgpO1xuICAgIGJhc2VUZXh0dXJlLndpZHRoID0gd2lkdGg7XG4gICAgYmFzZVRleHR1cmUuaGVpZ2h0ID0gaGVpZ2h0O1xuICAgIGJhc2VUZXh0dXJlLnJlc29sdXRpb24gPSByZXNvbHV0aW9uO1xuICAgIGJhc2VUZXh0dXJlLnNjYWxlTW9kZSA9IHNjYWxlTW9kZSB8fCBDT05TVC5TQ0FMRV9NT0RFUy5ERUZBVUxUO1xuICAgIGJhc2VUZXh0dXJlLmhhc0xvYWRlZCA9IHRydWU7XG5cblxuICAgIFRleHR1cmUuY2FsbCh0aGlzLFxuICAgICAgICBiYXNlVGV4dHVyZSxcbiAgICAgICAgbmV3IG1hdGguUmVjdGFuZ2xlKDAsIDAsIHdpZHRoLCBoZWlnaHQpXG4gICAgKTtcblxuXG4gICAgLyoqXG4gICAgICogVGhlIHdpdGggb2YgdGhlIHJlbmRlciB0ZXh0dXJlXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy53aWR0aCA9IHdpZHRoO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGhlaWdodCBvZiB0aGUgcmVuZGVyIHRleHR1cmVcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLmhlaWdodCA9IGhlaWdodDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBSZXNvbHV0aW9uIG9mIHRoZSB0ZXh0dXJlLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMucmVzb2x1dGlvbiA9IHJlc29sdXRpb247XG5cbiAgICAvKipcbiAgICAgKiBEcmF3L3JlbmRlciB0aGUgZ2l2ZW4gRGlzcGxheU9iamVjdCBvbnRvIHRoZSB0ZXh0dXJlLlxuICAgICAqXG4gICAgICogVGhlIGRpc3BsYXlPYmplY3QgYW5kIGRlc2NlbmRlbnRzIGFyZSB0cmFuc2Zvcm1lZCBkdXJpbmcgdGhpcyBvcGVyYXRpb24uXG4gICAgICogSWYgYHVwZGF0ZVRyYW5zZm9ybWAgaXMgdHJ1ZSB0aGVuIHRoZSB0cmFuc2Zvcm1hdGlvbnMgd2lsbCBiZSByZXN0b3JlZCBiZWZvcmUgdGhlXG4gICAgICogbWV0aG9kIHJldHVybnMuIE90aGVyd2lzZSBpdCBpcyB1cCB0byB0aGUgY2FsbGluZyBjb2RlIHRvIGNvcnJlY3RseSB1c2Ugb3IgcmVzZXRcbiAgICAgKiB0aGUgdHJhbnNmb3JtZWQgZGlzcGxheSBvYmplY3RzLlxuICAgICAqXG4gICAgICogVGhlIGRpc3BsYXkgb2JqZWN0IGlzIGFsd2F5cyByZW5kZXJlZCB3aXRoIGEgd29ybGRBbHBoYSB2YWx1ZSBvZiAxLlxuICAgICAqXG4gICAgICogQG1ldGhvZFxuICAgICAqIEBwYXJhbSBkaXNwbGF5T2JqZWN0IHtQSVhJLkRpc3BsYXlPYmplY3R9IFRoZSBkaXNwbGF5IG9iamVjdCB0byByZW5kZXIgdGhpcyB0ZXh0dXJlIG9uXG4gICAgICogQHBhcmFtIFttYXRyaXhdIHtQSVhJLk1hdHJpeH0gT3B0aW9uYWwgbWF0cml4IHRvIGFwcGx5IHRvIHRoZSBkaXNwbGF5IG9iamVjdCBiZWZvcmUgcmVuZGVyaW5nLlxuICAgICAqIEBwYXJhbSBbY2xlYXI9ZmFsc2VdIHtib29sZWFufSBJZiB0cnVlIHRoZSB0ZXh0dXJlIHdpbGwgYmUgY2xlYXJlZCBiZWZvcmUgdGhlIGRpc3BsYXlPYmplY3QgaXMgZHJhd25cbiAgICAgKiBAcGFyYW0gW3VwZGF0ZVRyYW5zZm9ybT10cnVlXSB7Ym9vbGVhbn0gSWYgdHJ1ZSB0aGUgZGlzcGxheU9iamVjdCdzIHdvcmxkVHJhbnNmb3JtL3dvcmxkQWxwaGEgYW5kIGFsbCBjaGlsZHJlblxuICAgICAqICB0cmFuc2Zvcm1hdGlvbnMgd2lsbCBiZSByZXN0b3JlZC4gTm90IHJlc3RvcmluZyB0aGlzIGluZm9ybWF0aW9uIHdpbGwgYmUgYSBsaXR0bGUgZmFzdGVyLlxuICAgICAqL1xuICAgIHRoaXMucmVuZGVyID0gbnVsbDtcblxuICAgIC8qKlxuICAgICAqIFRoZSByZW5kZXJlciB0aGlzIFJlbmRlclRleHR1cmUgdXNlcy4gQSBSZW5kZXJUZXh0dXJlIGNhbiBvbmx5IGJlbG9uZyB0byBvbmUgcmVuZGVyZXIgYXQgdGhlIG1vbWVudCBpZiBpdHMgd2ViR0wuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLkNhbnZhc1JlbmRlcmVyfFBJWEkuV2ViR0xSZW5kZXJlcn1cbiAgICAgKi9cbiAgICB0aGlzLnJlbmRlcmVyID0gcmVuZGVyZXI7XG5cbiAgICBpZiAodGhpcy5yZW5kZXJlci50eXBlID09PSBDT05TVC5SRU5ERVJFUl9UWVBFLldFQkdMKVxuICAgIHtcbiAgICAgICAgdmFyIGdsID0gdGhpcy5yZW5kZXJlci5nbDtcblxuICAgICAgICB0aGlzLnRleHR1cmVCdWZmZXIgPSBuZXcgUmVuZGVyVGFyZ2V0KGdsLCB0aGlzLndpZHRoLCB0aGlzLmhlaWdodCwgYmFzZVRleHR1cmUuc2NhbGVNb2RlLCB0aGlzLnJlc29sdXRpb24pOy8vLCB0aGlzLmJhc2VUZXh0dXJlLnNjYWxlTW9kZSk7XG4gICAgICAgIHRoaXMuYmFzZVRleHR1cmUuX2dsVGV4dHVyZXNbZ2wuaWRdID0gdGhpcy50ZXh0dXJlQnVmZmVyLnRleHR1cmU7XG5cbiAgICAgICAgLy9UT0RPIHJlZmFjdG9yIGZpbHRlciBtYW5hZ2VyLi4gYXMgcmVhbGx5IGl0cyBubyBsb25nZXIgYSBtYW5hZ2VyIGlmIHdlIHVzZSBpdCBoZXJlLi5cbiAgICAgICAgdGhpcy5maWx0ZXJNYW5hZ2VyID0gbmV3IEZpbHRlck1hbmFnZXIodGhpcy5yZW5kZXJlcik7XG4gICAgICAgIHRoaXMuZmlsdGVyTWFuYWdlci5vbkNvbnRleHRDaGFuZ2UoKTtcbiAgICAgICAgdGhpcy5maWx0ZXJNYW5hZ2VyLnJlc2l6ZSh3aWR0aCwgaGVpZ2h0KTtcbiAgICAgICAgdGhpcy5yZW5kZXIgPSB0aGlzLnJlbmRlcldlYkdMO1xuXG4gICAgICAgIC8vIHRoZSBjcmVhdGlvbiBvZiBhIGZpbHRlciBtYW5hZ2VyIHVuYmluZHMgdGhlIGJ1ZmZlcnMuLlxuICAgICAgICB0aGlzLnJlbmRlcmVyLmN1cnJlbnRSZW5kZXJlci5zdGFydCgpO1xuICAgICAgICB0aGlzLnJlbmRlcmVyLmN1cnJlbnRSZW5kZXJUYXJnZXQuYWN0aXZhdGUoKTtcbiAgICB9XG4gICAgZWxzZVxuICAgIHtcblxuICAgICAgICB0aGlzLnJlbmRlciA9IHRoaXMucmVuZGVyQ2FudmFzO1xuICAgICAgICB0aGlzLnRleHR1cmVCdWZmZXIgPSBuZXcgQ2FudmFzQnVmZmVyKHRoaXMud2lkdGgqIHRoaXMucmVzb2x1dGlvbiwgdGhpcy5oZWlnaHQqIHRoaXMucmVzb2x1dGlvbik7XG4gICAgICAgIHRoaXMuYmFzZVRleHR1cmUuc291cmNlID0gdGhpcy50ZXh0dXJlQnVmZmVyLmNhbnZhcztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqL1xuICAgIHRoaXMudmFsaWQgPSB0cnVlO1xuXG4gICAgdGhpcy5fdXBkYXRlVXZzKCk7XG59XG5cblJlbmRlclRleHR1cmUucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShUZXh0dXJlLnByb3RvdHlwZSk7XG5SZW5kZXJUZXh0dXJlLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFJlbmRlclRleHR1cmU7XG5tb2R1bGUuZXhwb3J0cyA9IFJlbmRlclRleHR1cmU7XG5cbi8qKlxuICogUmVzaXplcyB0aGUgUmVuZGVyVGV4dHVyZS5cbiAqXG4gKiBAcGFyYW0gd2lkdGgge251bWJlcn0gVGhlIHdpZHRoIHRvIHJlc2l6ZSB0by5cbiAqIEBwYXJhbSBoZWlnaHQge251bWJlcn0gVGhlIGhlaWdodCB0byByZXNpemUgdG8uXG4gKiBAcGFyYW0gdXBkYXRlQmFzZSB7Ym9vbGVhbn0gU2hvdWxkIHRoZSBiYXNlVGV4dHVyZS53aWR0aCBhbmQgaGVpZ2h0IHZhbHVlcyBiZSByZXNpemVkIGFzIHdlbGw/XG4gKi9cblJlbmRlclRleHR1cmUucHJvdG90eXBlLnJlc2l6ZSA9IGZ1bmN0aW9uICh3aWR0aCwgaGVpZ2h0LCB1cGRhdGVCYXNlKVxue1xuICAgIGlmICh3aWR0aCA9PT0gdGhpcy53aWR0aCAmJiBoZWlnaHQgPT09IHRoaXMuaGVpZ2h0KVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMudmFsaWQgPSAod2lkdGggPiAwICYmIGhlaWdodCA+IDApO1xuXG4gICAgdGhpcy53aWR0aCA9IHRoaXMuX2ZyYW1lLndpZHRoID0gdGhpcy5jcm9wLndpZHRoID0gd2lkdGg7XG4gICAgdGhpcy5oZWlnaHQgPSAgdGhpcy5fZnJhbWUuaGVpZ2h0ID0gdGhpcy5jcm9wLmhlaWdodCA9IGhlaWdodDtcblxuICAgIGlmICh1cGRhdGVCYXNlKVxuICAgIHtcbiAgICAgICAgdGhpcy5iYXNlVGV4dHVyZS53aWR0aCA9IHRoaXMud2lkdGg7XG4gICAgICAgIHRoaXMuYmFzZVRleHR1cmUuaGVpZ2h0ID0gdGhpcy5oZWlnaHQ7XG4gICAgfVxuXG4gICAgaWYgKCF0aGlzLnZhbGlkKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMudGV4dHVyZUJ1ZmZlci5yZXNpemUodGhpcy53aWR0aCwgdGhpcy5oZWlnaHQpO1xuXG4gICAgaWYodGhpcy5maWx0ZXJNYW5hZ2VyKVxuICAgIHtcbiAgICAgICAgdGhpcy5maWx0ZXJNYW5hZ2VyLnJlc2l6ZSh0aGlzLndpZHRoLCB0aGlzLmhlaWdodCk7XG4gICAgfVxufTtcblxuLyoqXG4gKiBDbGVhcnMgdGhlIFJlbmRlclRleHR1cmUuXG4gKlxuICovXG5SZW5kZXJUZXh0dXJlLnByb3RvdHlwZS5jbGVhciA9IGZ1bmN0aW9uICgpXG57XG4gICAgaWYgKCF0aGlzLnZhbGlkKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnJlbmRlcmVyLnR5cGUgPT09IENPTlNULlJFTkRFUkVSX1RZUEUuV0VCR0wpXG4gICAge1xuICAgICAgICB0aGlzLnJlbmRlcmVyLmdsLmJpbmRGcmFtZWJ1ZmZlcih0aGlzLnJlbmRlcmVyLmdsLkZSQU1FQlVGRkVSLCB0aGlzLnRleHR1cmVCdWZmZXIuZnJhbWVCdWZmZXIpO1xuICAgIH1cblxuICAgIHRoaXMudGV4dHVyZUJ1ZmZlci5jbGVhcigpO1xufTtcblxuLyoqXG4gKiBJbnRlcm5hbCBtZXRob2QgYXNzaWduZWQgdG8gdGhlIGByZW5kZXJgIHByb3BlcnR5IGlmIHVzaW5nIGEgQ2FudmFzUmVuZGVyZXIuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSBkaXNwbGF5T2JqZWN0IHtQSVhJLkRpc3BsYXlPYmplY3R9IFRoZSBkaXNwbGF5IG9iamVjdCB0byByZW5kZXIgdGhpcyB0ZXh0dXJlIG9uXG4gKiBAcGFyYW0gW21hdHJpeF0ge1BJWEkuTWF0cml4fSBPcHRpb25hbCBtYXRyaXggdG8gYXBwbHkgdG8gdGhlIGRpc3BsYXkgb2JqZWN0IGJlZm9yZSByZW5kZXJpbmcuXG4gKiBAcGFyYW0gW2NsZWFyPWZhbHNlXSB7Ym9vbGVhbn0gSWYgdHJ1ZSB0aGUgdGV4dHVyZSB3aWxsIGJlIGNsZWFyZWQgYmVmb3JlIHRoZSBkaXNwbGF5T2JqZWN0IGlzIGRyYXduXG4gKiBAcGFyYW0gW3VwZGF0ZVRyYW5zZm9ybT10cnVlXSB7Ym9vbGVhbn0gSWYgdHJ1ZSB0aGUgZGlzcGxheU9iamVjdCdzIHdvcmxkVHJhbnNmb3JtL3dvcmxkQWxwaGEgYW5kIGFsbCBjaGlsZHJlblxuICogIHRyYW5zZm9ybWF0aW9ucyB3aWxsIGJlIHJlc3RvcmVkLiBOb3QgcmVzdG9yaW5nIHRoaXMgaW5mb3JtYXRpb24gd2lsbCBiZSBhIGxpdHRsZSBmYXN0ZXIuXG4gKi9cblJlbmRlclRleHR1cmUucHJvdG90eXBlLnJlbmRlcldlYkdMID0gZnVuY3Rpb24gKGRpc3BsYXlPYmplY3QsIG1hdHJpeCwgY2xlYXIsIHVwZGF0ZVRyYW5zZm9ybSlcbntcbiAgICBpZiAoIXRoaXMudmFsaWQpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG5cbiAgICB1cGRhdGVUcmFuc2Zvcm0gPSAodXBkYXRlVHJhbnNmb3JtICE9PSB1bmRlZmluZWQpID8gdXBkYXRlVHJhbnNmb3JtIDogdHJ1ZTsvLyF1cGRhdGVUcmFuc2Zvcm07XG5cbiAgICB0aGlzLnRleHR1cmVCdWZmZXIudHJhbnNmb3JtID0gbWF0cml4O1xuXG4gICAgLy9UT0RPIG5vdCBhIGZhbiB0aGF0IHRoaXMgaXMgaGVyZS4uLiBpdCB3aWxsIG1vdmUhXG4gICAgdGhpcy50ZXh0dXJlQnVmZmVyLmFjdGl2YXRlKCk7XG5cbiAgICAvLyBzZXRXb3JsZCBBbHBoYSB0byBlbnN1cmUgdGhhdCB0aGUgb2JqZWN0IGlzIHJlbmRlcmVyIGF0IGZ1bGwgb3BhY2l0eVxuICAgIGRpc3BsYXlPYmplY3Qud29ybGRBbHBoYSA9IDE7XG5cbiAgICBpZiAodXBkYXRlVHJhbnNmb3JtKVxuICAgIHtcblxuICAgICAgICAvLyByZXNldCB0aGUgbWF0cml4IG9mIHRoZSBkaXNwbGF0eU9iamVjdC4uXG4gICAgICAgIGRpc3BsYXlPYmplY3Qud29ybGRUcmFuc2Zvcm0uaWRlbnRpdHkoKTtcblxuICAgICAgICBkaXNwbGF5T2JqZWN0LmN1cnJlbnRCb3VuZHMgPSBudWxsO1xuXG4gICAgICAgIC8vIFRpbWUgdG8gdXBkYXRlIGFsbCB0aGUgY2hpbGRyZW4gb2YgdGhlIGRpc3BsYXlPYmplY3Qgd2l0aCB0aGUgbmV3IG1hdHJpeC4uXG4gICAgICAgIHZhciBjaGlsZHJlbiA9IGRpc3BsYXlPYmplY3QuY2hpbGRyZW47XG4gICAgICAgIHZhciBpLCBqO1xuXG4gICAgICAgIGZvciAoaSA9IDAsIGogPSBjaGlsZHJlbi5sZW5ndGg7IGkgPCBqOyArK2kpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNoaWxkcmVuW2ldLnVwZGF0ZVRyYW5zZm9ybSgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy9UT0RPIHJlbmFtZSB0ZXh0dXJlQnVmZmVyIHRvIHJlbmRlclRhcmdldC4uXG4gICAgdmFyIHRlbXAgPSAgdGhpcy5yZW5kZXJlci5maWx0ZXJNYW5hZ2VyO1xuXG4gICAgdGhpcy5yZW5kZXJlci5maWx0ZXJNYW5hZ2VyID0gdGhpcy5maWx0ZXJNYW5hZ2VyO1xuICAgIHRoaXMucmVuZGVyZXIucmVuZGVyRGlzcGxheU9iamVjdChkaXNwbGF5T2JqZWN0LCB0aGlzLnRleHR1cmVCdWZmZXIsIGNsZWFyKTtcblxuICAgIHRoaXMucmVuZGVyZXIuZmlsdGVyTWFuYWdlciA9IHRlbXA7XG59O1xuXG5cbi8qKlxuICogSW50ZXJuYWwgbWV0aG9kIGFzc2lnbmVkIHRvIHRoZSBgcmVuZGVyYCBwcm9wZXJ0eSBpZiB1c2luZyBhIENhbnZhc1JlbmRlcmVyLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0gZGlzcGxheU9iamVjdCB7UElYSS5EaXNwbGF5T2JqZWN0fSBUaGUgZGlzcGxheSBvYmplY3QgdG8gcmVuZGVyIHRoaXMgdGV4dHVyZSBvblxuICogQHBhcmFtIFttYXRyaXhdIHtQSVhJLk1hdHJpeH0gT3B0aW9uYWwgbWF0cml4IHRvIGFwcGx5IHRvIHRoZSBkaXNwbGF5IG9iamVjdCBiZWZvcmUgcmVuZGVyaW5nLlxuICogQHBhcmFtIFtjbGVhcl0ge2Jvb2xlYW59IElmIHRydWUgdGhlIHRleHR1cmUgd2lsbCBiZSBjbGVhcmVkIGJlZm9yZSB0aGUgZGlzcGxheU9iamVjdCBpcyBkcmF3blxuICovXG5SZW5kZXJUZXh0dXJlLnByb3RvdHlwZS5yZW5kZXJDYW52YXMgPSBmdW5jdGlvbiAoZGlzcGxheU9iamVjdCwgbWF0cml4LCBjbGVhciwgdXBkYXRlVHJhbnNmb3JtKVxue1xuICAgIGlmICghdGhpcy52YWxpZClcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB1cGRhdGVUcmFuc2Zvcm0gPSAhIXVwZGF0ZVRyYW5zZm9ybTtcblxuICAgIHZhciB3dCA9IHRlbXBNYXRyaXg7XG5cbiAgICB3dC5pZGVudGl0eSgpO1xuXG4gICAgaWYgKG1hdHJpeClcbiAgICB7XG4gICAgICAgIHd0LmFwcGVuZChtYXRyaXgpO1xuICAgIH1cblxuICAgIHZhciBjYWNoZWRXdCA9IGRpc3BsYXlPYmplY3Qud29ybGRUcmFuc2Zvcm07XG4gICAgZGlzcGxheU9iamVjdC53b3JsZFRyYW5zZm9ybSA9IHd0O1xuXG4gICAgLy8gc2V0V29ybGQgQWxwaGEgdG8gZW5zdXJlIHRoYXQgdGhlIG9iamVjdCBpcyByZW5kZXJlciBhdCBmdWxsIG9wYWNpdHlcbiAgICBkaXNwbGF5T2JqZWN0LndvcmxkQWxwaGEgPSAxO1xuXG4gICAgLy8gVGltZSB0byB1cGRhdGUgYWxsIHRoZSBjaGlsZHJlbiBvZiB0aGUgZGlzcGxheU9iamVjdCB3aXRoIHRoZSBuZXcgbWF0cml4Li5cbiAgICB2YXIgY2hpbGRyZW4gPSBkaXNwbGF5T2JqZWN0LmNoaWxkcmVuO1xuICAgIHZhciBpLCBqO1xuXG4gICAgZm9yIChpID0gMCwgaiA9IGNoaWxkcmVuLmxlbmd0aDsgaSA8IGo7ICsraSlcbiAgICB7XG4gICAgICAgIGNoaWxkcmVuW2ldLnVwZGF0ZVRyYW5zZm9ybSgpO1xuICAgIH1cblxuICAgIGlmIChjbGVhcilcbiAgICB7XG4gICAgICAgIHRoaXMudGV4dHVyZUJ1ZmZlci5jbGVhcigpO1xuICAgIH1cblxuXG4vLyAgICB0aGlzLnRleHR1cmVCdWZmZXIuXG4gICAgdmFyIGNvbnRleHQgPSB0aGlzLnRleHR1cmVCdWZmZXIuY29udGV4dDtcblxuICAgIHZhciByZWFsUmVzb2x1dGlvbiA9IHRoaXMucmVuZGVyZXIucmVzb2x1dGlvbjtcblxuICAgIHRoaXMucmVuZGVyZXIucmVzb2x1dGlvbiA9IHRoaXMucmVzb2x1dGlvbjtcblxuICAgIHRoaXMucmVuZGVyZXIucmVuZGVyRGlzcGxheU9iamVjdChkaXNwbGF5T2JqZWN0LCBjb250ZXh0KTtcblxuICAgIHRoaXMucmVuZGVyZXIucmVzb2x1dGlvbiA9IHJlYWxSZXNvbHV0aW9uO1xuXG4gICAgaWYoZGlzcGxheU9iamVjdC53b3JsZFRyYW5zZm9ybSA9PT0gd3QpXG4gICAge1xuICAgICAgICAvLyBmaXhlcyBjYWNoZUFzQml0bWFwIEhhcHBlbmluZyBkdXJpbmcgdGhlIGFib3ZlLi5cbiAgICAgICAgZGlzcGxheU9iamVjdC53b3JsZFRyYW5zZm9ybSA9IGNhY2hlZFd0O1xuICAgIH1cblxufTtcblxuLyoqXG4gKiBEZXN0cm95cyB0aGlzIHRleHR1cmVcbiAqXG4gKiBAcGFyYW0gZGVzdHJveUJhc2Uge2Jvb2xlYW59IFdoZXRoZXIgdG8gZGVzdHJveSB0aGUgYmFzZSB0ZXh0dXJlIGFzIHdlbGxcbiAqL1xuUmVuZGVyVGV4dHVyZS5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uICgpXG57XG4gICAgVGV4dHVyZS5wcm90b3R5cGUuZGVzdHJveS5jYWxsKHRoaXMsIHRydWUpO1xuXG4gICAgdGhpcy50ZXh0dXJlQnVmZmVyLmRlc3Ryb3koKTtcblxuICAgIC8vIGRlc3Ryb3kgdGhlIGZpbHRlcm1hbmFnZXIuLlxuICAgIGlmKHRoaXMuZmlsdGVyTWFuYWdlcilcbiAgICB7XG4gICAgICAgIHRoaXMuZmlsdGVyTWFuYWdlci5kZXN0cm95KCk7XG4gICAgfVxuXG4gICAgdGhpcy5yZW5kZXJlciA9IG51bGw7XG59O1xuXG4vKipcbiAqIFdpbGwgcmV0dXJuIGEgSFRNTCBJbWFnZSBvZiB0aGUgdGV4dHVyZVxuICpcbiAqIEByZXR1cm4ge0ltYWdlfVxuICovXG5SZW5kZXJUZXh0dXJlLnByb3RvdHlwZS5nZXRJbWFnZSA9IGZ1bmN0aW9uICgpXG57XG4gICAgdmFyIGltYWdlID0gbmV3IEltYWdlKCk7XG4gICAgaW1hZ2Uuc3JjID0gdGhpcy5nZXRCYXNlNjQoKTtcbiAgICByZXR1cm4gaW1hZ2U7XG59O1xuXG4vKipcbiAqIFdpbGwgcmV0dXJuIGEgYSBiYXNlNjQgZW5jb2RlZCBzdHJpbmcgb2YgdGhpcyB0ZXh0dXJlLiBJdCB3b3JrcyBieSBjYWxsaW5nIFJlbmRlclRleHR1cmUuZ2V0Q2FudmFzIGFuZCB0aGVuIHJ1bm5pbmcgdG9EYXRhVVJMIG9uIHRoYXQuXG4gKlxuICogQHJldHVybiB7c3RyaW5nfSBBIGJhc2U2NCBlbmNvZGVkIHN0cmluZyBvZiB0aGUgdGV4dHVyZS5cbiAqL1xuUmVuZGVyVGV4dHVyZS5wcm90b3R5cGUuZ2V0QmFzZTY0ID0gZnVuY3Rpb24gKClcbntcbiAgICByZXR1cm4gdGhpcy5nZXRDYW52YXMoKS50b0RhdGFVUkwoKTtcbn07XG5cbi8qKlxuICogQ3JlYXRlcyBhIENhbnZhcyBlbGVtZW50LCByZW5kZXJzIHRoaXMgUmVuZGVyVGV4dHVyZSB0byBpdCBhbmQgdGhlbiByZXR1cm5zIGl0LlxuICpcbiAqIEByZXR1cm4ge0hUTUxDYW52YXNFbGVtZW50fSBBIENhbnZhcyBlbGVtZW50IHdpdGggdGhlIHRleHR1cmUgcmVuZGVyZWQgb24uXG4gKi9cblJlbmRlclRleHR1cmUucHJvdG90eXBlLmdldENhbnZhcyA9IGZ1bmN0aW9uICgpXG57XG4gICAgaWYgKHRoaXMucmVuZGVyZXIudHlwZSA9PT0gQ09OU1QuUkVOREVSRVJfVFlQRS5XRUJHTClcbiAgICB7XG4gICAgICAgIHZhciBnbCA9IHRoaXMucmVuZGVyZXIuZ2w7XG4gICAgICAgIHZhciB3aWR0aCA9IHRoaXMudGV4dHVyZUJ1ZmZlci5zaXplLndpZHRoO1xuICAgICAgICB2YXIgaGVpZ2h0ID0gdGhpcy50ZXh0dXJlQnVmZmVyLnNpemUuaGVpZ2h0O1xuXG4gICAgICAgIHZhciB3ZWJHTFBpeGVscyA9IG5ldyBVaW50OEFycmF5KDQgKiB3aWR0aCAqIGhlaWdodCk7XG5cbiAgICAgICAgZ2wuYmluZEZyYW1lYnVmZmVyKGdsLkZSQU1FQlVGRkVSLCB0aGlzLnRleHR1cmVCdWZmZXIuZnJhbWVCdWZmZXIpO1xuICAgICAgICBnbC5yZWFkUGl4ZWxzKDAsIDAsIHdpZHRoLCBoZWlnaHQsIGdsLlJHQkEsIGdsLlVOU0lHTkVEX0JZVEUsIHdlYkdMUGl4ZWxzKTtcbiAgICAgICAgZ2wuYmluZEZyYW1lYnVmZmVyKGdsLkZSQU1FQlVGRkVSLCBudWxsKTtcblxuICAgICAgICB2YXIgdGVtcENhbnZhcyA9IG5ldyBDYW52YXNCdWZmZXIod2lkdGgsIGhlaWdodCk7XG4gICAgICAgIHZhciBjYW52YXNEYXRhID0gdGVtcENhbnZhcy5jb250ZXh0LmdldEltYWdlRGF0YSgwLCAwLCB3aWR0aCwgaGVpZ2h0KTtcbiAgICAgICAgY2FudmFzRGF0YS5kYXRhLnNldCh3ZWJHTFBpeGVscyk7XG5cbiAgICAgICAgdGVtcENhbnZhcy5jb250ZXh0LnB1dEltYWdlRGF0YShjYW52YXNEYXRhLCAwLCAwKTtcblxuICAgICAgICByZXR1cm4gdGVtcENhbnZhcy5jYW52YXM7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHJldHVybiB0aGlzLnRleHR1cmVCdWZmZXIuY2FudmFzO1xuICAgIH1cbn07XG5cbi8qKlxuICogV2lsbCByZXR1cm4gYSBvbmUtZGltZW5zaW9uYWwgYXJyYXkgY29udGFpbmluZyB0aGUgcGl4ZWwgZGF0YSBvZiB0aGUgZW50aXJlIHRleHR1cmUgaW4gUkdCQSBvcmRlciwgd2l0aCBpbnRlZ2VyIHZhbHVlcyBiZXR3ZWVuIDAgYW5kIDI1NSAoaW5jbHVkZWQpLlxuICpcbiAqIEByZXR1cm4ge1VpbnQ4Q2xhbXBlZEFycmF5fVxuICovXG5SZW5kZXJUZXh0dXJlLnByb3RvdHlwZS5nZXRQaXhlbHMgPSBmdW5jdGlvbiAoKVxue1xuICAgIHZhciB3aWR0aCwgaGVpZ2h0O1xuXG4gICAgaWYgKHRoaXMucmVuZGVyZXIudHlwZSA9PT0gQ09OU1QuUkVOREVSRVJfVFlQRS5XRUJHTClcbiAgICB7XG4gICAgICAgIHZhciBnbCA9IHRoaXMucmVuZGVyZXIuZ2w7XG4gICAgICAgIHdpZHRoID0gdGhpcy50ZXh0dXJlQnVmZmVyLnNpemUud2lkdGg7XG4gICAgICAgIGhlaWdodCA9IHRoaXMudGV4dHVyZUJ1ZmZlci5zaXplLmhlaWdodDtcblxuICAgICAgICB2YXIgd2ViR0xQaXhlbHMgPSBuZXcgVWludDhBcnJheSg0ICogd2lkdGggKiBoZWlnaHQpO1xuXG4gICAgICAgIGdsLmJpbmRGcmFtZWJ1ZmZlcihnbC5GUkFNRUJVRkZFUiwgdGhpcy50ZXh0dXJlQnVmZmVyLmZyYW1lQnVmZmVyKTtcbiAgICAgICAgZ2wucmVhZFBpeGVscygwLCAwLCB3aWR0aCwgaGVpZ2h0LCBnbC5SR0JBLCBnbC5VTlNJR05FRF9CWVRFLCB3ZWJHTFBpeGVscyk7XG4gICAgICAgIGdsLmJpbmRGcmFtZWJ1ZmZlcihnbC5GUkFNRUJVRkZFUiwgbnVsbCk7XG5cbiAgICAgICAgcmV0dXJuIHdlYkdMUGl4ZWxzO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICB3aWR0aCA9IHRoaXMudGV4dHVyZUJ1ZmZlci5jYW52YXMud2lkdGg7XG4gICAgICAgIGhlaWdodCA9IHRoaXMudGV4dHVyZUJ1ZmZlci5jYW52YXMuaGVpZ2h0O1xuXG4gICAgICAgIHJldHVybiB0aGlzLnRleHR1cmVCdWZmZXIuY2FudmFzLmdldENvbnRleHQoJzJkJykuZ2V0SW1hZ2VEYXRhKDAsIDAsIHdpZHRoLCBoZWlnaHQpLmRhdGE7XG4gICAgfVxufTtcblxuLyoqXG4gKiBXaWxsIHJldHVybiBhIG9uZS1kaW1lbnNpb25hbCBhcnJheSBjb250YWluaW5nIHRoZSBwaXhlbCBkYXRhIG9mIGEgcGl4ZWwgd2l0aGluIHRoZSB0ZXh0dXJlIGluIFJHQkEgb3JkZXIsIHdpdGggaW50ZWdlciB2YWx1ZXMgYmV0d2VlbiAwIGFuZCAyNTUgKGluY2x1ZGVkKS5cbiAqXG4gKiBAcGFyYW0geCB7bnVtYmVyfSBUaGUgeCBjb29yZGluYXRlIG9mIHRoZSBwaXhlbCB0byByZXRyaWV2ZS5cbiAqIEBwYXJhbSB5IHtudW1iZXJ9IFRoZSB5IGNvb3JkaW5hdGUgb2YgdGhlIHBpeGVsIHRvIHJldHJpZXZlLlxuICogQHJldHVybiB7VWludDhDbGFtcGVkQXJyYXl9XG4gKi9cblJlbmRlclRleHR1cmUucHJvdG90eXBlLmdldFBpeGVsID0gZnVuY3Rpb24gKHgsIHkpXG57XG4gICAgaWYgKHRoaXMucmVuZGVyZXIudHlwZSA9PT0gQ09OU1QuUkVOREVSRVJfVFlQRS5XRUJHTClcbiAgICB7XG4gICAgICAgIHZhciBnbCA9IHRoaXMucmVuZGVyZXIuZ2w7XG5cbiAgICAgICAgdmFyIHdlYkdMUGl4ZWxzID0gbmV3IFVpbnQ4QXJyYXkoNCk7XG5cbiAgICAgICAgZ2wuYmluZEZyYW1lYnVmZmVyKGdsLkZSQU1FQlVGRkVSLCB0aGlzLnRleHR1cmVCdWZmZXIuZnJhbWVCdWZmZXIpO1xuICAgICAgICBnbC5yZWFkUGl4ZWxzKHgsIHksIDEsIDEsIGdsLlJHQkEsIGdsLlVOU0lHTkVEX0JZVEUsIHdlYkdMUGl4ZWxzKTtcbiAgICAgICAgZ2wuYmluZEZyYW1lYnVmZmVyKGdsLkZSQU1FQlVGRkVSLCBudWxsKTtcblxuICAgICAgICByZXR1cm4gd2ViR0xQaXhlbHM7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHJldHVybiB0aGlzLnRleHR1cmVCdWZmZXIuY2FudmFzLmdldENvbnRleHQoJzJkJykuZ2V0SW1hZ2VEYXRhKHgsIHksIDEsIDEpLmRhdGE7XG4gICAgfVxufTtcbiIsInZhciBCYXNlVGV4dHVyZSA9IHJlcXVpcmUoJy4vQmFzZVRleHR1cmUnKSxcbiAgICBWaWRlb0Jhc2VUZXh0dXJlID0gcmVxdWlyZSgnLi9WaWRlb0Jhc2VUZXh0dXJlJyksXG4gICAgVGV4dHVyZVV2cyA9IHJlcXVpcmUoJy4vVGV4dHVyZVV2cycpLFxuICAgIEV2ZW50RW1pdHRlciA9IHJlcXVpcmUoJ2V2ZW50ZW1pdHRlcjMnKSxcbiAgICBtYXRoID0gcmVxdWlyZSgnLi4vbWF0aCcpLFxuICAgIHV0aWxzID0gcmVxdWlyZSgnLi4vdXRpbHMnKTtcblxuLyoqXG4gKiBBIHRleHR1cmUgc3RvcmVzIHRoZSBpbmZvcm1hdGlvbiB0aGF0IHJlcHJlc2VudHMgYW4gaW1hZ2Ugb3IgcGFydCBvZiBhbiBpbWFnZS4gSXQgY2Fubm90IGJlIGFkZGVkXG4gKiB0byB0aGUgZGlzcGxheSBsaXN0IGRpcmVjdGx5LiBJbnN0ZWFkIHVzZSBpdCBhcyB0aGUgdGV4dHVyZSBmb3IgYSBTcHJpdGUuIElmIG5vIGZyYW1lIGlzIHByb3ZpZGVkIHRoZW4gdGhlIHdob2xlIGltYWdlIGlzIHVzZWQuXG4gKlxuICogWW91IGNhbiBkaXJlY3RseSBjcmVhdGUgYSB0ZXh0dXJlIGZyb20gYW4gaW1hZ2UgYW5kIHRoZW4gcmV1c2UgaXQgbXVsdGlwbGUgdGltZXMgbGlrZSB0aGlzIDpcbiAqXG4gKiBgYGBqc1xuICogdmFyIHRleHR1cmUgPSBQSVhJLlRleHR1cmUuZnJvbUltYWdlKCdhc3NldHMvaW1hZ2UucG5nJyk7XG4gKiB2YXIgc3ByaXRlMSA9IG5ldyBQSVhJLlNwcml0ZSh0ZXh0dXJlKTtcbiAqIHZhciBzcHJpdGUyID0gbmV3IFBJWEkuU3ByaXRlKHRleHR1cmUpO1xuICogYGBgXG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIGJhc2VUZXh0dXJlIHtQSVhJLkJhc2VUZXh0dXJlfSBUaGUgYmFzZSB0ZXh0dXJlIHNvdXJjZSB0byBjcmVhdGUgdGhlIHRleHR1cmUgZnJvbVxuICogQHBhcmFtIFtmcmFtZV0ge1BJWEkuUmVjdGFuZ2xlfSBUaGUgcmVjdGFuZ2xlIGZyYW1lIG9mIHRoZSB0ZXh0dXJlIHRvIHNob3dcbiAqIEBwYXJhbSBbY3JvcF0ge1BJWEkuUmVjdGFuZ2xlfSBUaGUgYXJlYSBvZiBvcmlnaW5hbCB0ZXh0dXJlXG4gKiBAcGFyYW0gW3RyaW1dIHtQSVhJLlJlY3RhbmdsZX0gVHJpbW1lZCB0ZXh0dXJlIHJlY3RhbmdsZVxuICogQHBhcmFtIFtyb3RhdGVdIHtib29sZWFufSBpbmRpY2F0ZXMgd2hldGhlciB0aGUgdGV4dHVyZSBzaG91bGQgYmUgcm90YXRlZCBieSA5MCBkZWdyZWVzICggdXNlZCBieSB0ZXh0dXJlIHBhY2tlciApXG4gKi9cbmZ1bmN0aW9uIFRleHR1cmUoYmFzZVRleHR1cmUsIGZyYW1lLCBjcm9wLCB0cmltLCByb3RhdGUpXG57XG4gICAgRXZlbnRFbWl0dGVyLmNhbGwodGhpcyk7XG5cbiAgICAvKipcbiAgICAgKiBEb2VzIHRoaXMgVGV4dHVyZSBoYXZlIGFueSBmcmFtZSBkYXRhIGFzc2lnbmVkIHRvIGl0P1xuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKi9cbiAgICB0aGlzLm5vRnJhbWUgPSBmYWxzZTtcblxuICAgIGlmICghZnJhbWUpXG4gICAge1xuICAgICAgICB0aGlzLm5vRnJhbWUgPSB0cnVlO1xuICAgICAgICBmcmFtZSA9IG5ldyBtYXRoLlJlY3RhbmdsZSgwLCAwLCAxLCAxKTtcbiAgICB9XG5cbiAgICBpZiAoYmFzZVRleHR1cmUgaW5zdGFuY2VvZiBUZXh0dXJlKVxuICAgIHtcbiAgICAgICAgYmFzZVRleHR1cmUgPSBiYXNlVGV4dHVyZS5iYXNlVGV4dHVyZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYmFzZSB0ZXh0dXJlIHRoYXQgdGhpcyB0ZXh0dXJlIHVzZXMuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLkJhc2VUZXh0dXJlfVxuICAgICAqL1xuICAgIHRoaXMuYmFzZVRleHR1cmUgPSBiYXNlVGV4dHVyZTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBmcmFtZSBzcGVjaWZpZXMgdGhlIHJlZ2lvbiBvZiB0aGUgYmFzZSB0ZXh0dXJlIHRoYXQgdGhpcyB0ZXh0dXJlIHVzZXNcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuUmVjdGFuZ2xlfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fZnJhbWUgPSBmcmFtZTtcblxuICAgIC8qKlxuICAgICAqIFRoZSB0ZXh0dXJlIHRyaW0gZGF0YS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuUmVjdGFuZ2xlfVxuICAgICAqL1xuICAgIHRoaXMudHJpbSA9IHRyaW07XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIHdpbGwgbGV0IHRoZSByZW5kZXJlciBrbm93IGlmIHRoZSB0ZXh0dXJlIGlzIHZhbGlkLiBJZiBpdCdzIG5vdCB0aGVuIGl0IGNhbm5vdCBiZSByZW5kZXJlZC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICovXG4gICAgdGhpcy52YWxpZCA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogVGhpcyB3aWxsIGxldCBhIHJlbmRlcmVyIGtub3cgdGhhdCBhIHRleHR1cmUgaGFzIGJlZW4gdXBkYXRlZCAodXNlZCBtYWlubHkgZm9yIHdlYkdMIHV2IHVwZGF0ZXMpXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqL1xuICAgIHRoaXMucmVxdWlyZXNVcGRhdGUgPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBXZWJHTCBVViBkYXRhIGNhY2hlLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5UZXh0dXJlVXZzfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fdXZzID0gbnVsbDtcblxuICAgIC8qKlxuICAgICAqIFRoZSB3aWR0aCBvZiB0aGUgVGV4dHVyZSBpbiBwaXhlbHMuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy53aWR0aCA9IDA7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgaGVpZ2h0IG9mIHRoZSBUZXh0dXJlIGluIHBpeGVscy5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLmhlaWdodCA9IDA7XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIGlzIHRoZSBhcmVhIG9mIHRoZSBCYXNlVGV4dHVyZSBpbWFnZSB0byBhY3R1YWxseSBjb3B5IHRvIHRoZSBDYW52YXMgLyBXZWJHTCB3aGVuIHJlbmRlcmluZyxcbiAgICAgKiBpcnJlc3BlY3RpdmUgb2YgdGhlIGFjdHVhbCBmcmFtZSBzaXplIG9yIHBsYWNlbWVudCAod2hpY2ggY2FuIGJlIGluZmx1ZW5jZWQgYnkgdHJpbW1lZCB0ZXh0dXJlIGF0bGFzZXMpXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlJlY3RhbmdsZX1cbiAgICAgKi9cbiAgICB0aGlzLmNyb3AgPSBjcm9wIHx8IGZyYW1lOy8vbmV3IG1hdGguUmVjdGFuZ2xlKDAsIDAsIDEsIDEpO1xuXG4gICAgLyoqXG4gICAgICogSW5kaWNhdGVzIHdoZXRoZXIgdGhlIHRleHR1cmUgc2hvdWxkIGJlIHJvdGF0ZWQgYnkgOTAgZGVncmVlc1xuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqL1xuICAgIHRoaXMucm90YXRlID0gISFyb3RhdGU7XG5cbiAgICBpZiAoYmFzZVRleHR1cmUuaGFzTG9hZGVkKVxuICAgIHtcbiAgICAgICAgaWYgKHRoaXMubm9GcmFtZSlcbiAgICAgICAge1xuICAgICAgICAgICAgZnJhbWUgPSBuZXcgbWF0aC5SZWN0YW5nbGUoMCwgMCwgYmFzZVRleHR1cmUud2lkdGgsIGJhc2VUZXh0dXJlLmhlaWdodCk7XG5cbiAgICAgICAgICAgIC8vIGlmIHRoZXJlIGlzIG5vIGZyYW1lIHdlIHNob3VsZCBtb25pdG9yIGZvciBhbnkgYmFzZSB0ZXh0dXJlIGNoYW5nZXMuLlxuICAgICAgICAgICAgYmFzZVRleHR1cmUub24oJ3VwZGF0ZScsIHRoaXMub25CYXNlVGV4dHVyZVVwZGF0ZWQsIHRoaXMpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZnJhbWUgPSBmcmFtZTtcbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgYmFzZVRleHR1cmUub25jZSgnbG9hZGVkJywgdGhpcy5vbkJhc2VUZXh0dXJlTG9hZGVkLCB0aGlzKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBGaXJlZCB3aGVuIHRoZSB0ZXh0dXJlIGlzIHVwZGF0ZWQuIFRoaXMgaGFwcGVucyBpZiB0aGUgZnJhbWUgb3IgdGhlIGJhc2VUZXh0dXJlIGlzIHVwZGF0ZWQuXG4gICAgICpcbiAgICAgKiBAZXZlbnQgdXBkYXRlXG4gICAgICogQG1lbWJlcm9mIFBJWEkuVGV4dHVyZSNcbiAgICAgKiBAcHJvdGVjdGVkXG4gICAgICovXG59XG5cblRleHR1cmUucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShFdmVudEVtaXR0ZXIucHJvdG90eXBlKTtcblRleHR1cmUucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gVGV4dHVyZTtcbm1vZHVsZS5leHBvcnRzID0gVGV4dHVyZTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoVGV4dHVyZS5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBUaGUgZnJhbWUgc3BlY2lmaWVzIHRoZSByZWdpb24gb2YgdGhlIGJhc2UgdGV4dHVyZSB0aGF0IHRoaXMgdGV4dHVyZSB1c2VzLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5SZWN0YW5nbGV9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuVGV4dHVyZSNcbiAgICAgKi9cbiAgICBmcmFtZToge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9mcmFtZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAoZnJhbWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuX2ZyYW1lID0gZnJhbWU7XG5cbiAgICAgICAgICAgIHRoaXMubm9GcmFtZSA9IGZhbHNlO1xuXG4gICAgICAgICAgICB0aGlzLndpZHRoID0gZnJhbWUud2lkdGg7XG4gICAgICAgICAgICB0aGlzLmhlaWdodCA9IGZyYW1lLmhlaWdodDtcblxuICAgICAgICAgICAgaWYgKCF0aGlzLnRyaW0gJiYgIXRoaXMucm90YXRlICYmIChmcmFtZS54ICsgZnJhbWUud2lkdGggPiB0aGlzLmJhc2VUZXh0dXJlLndpZHRoIHx8IGZyYW1lLnkgKyBmcmFtZS5oZWlnaHQgPiB0aGlzLmJhc2VUZXh0dXJlLmhlaWdodCkpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdUZXh0dXJlIEVycm9yOiBmcmFtZSBkb2VzIG5vdCBmaXQgaW5zaWRlIHRoZSBiYXNlIFRleHR1cmUgZGltZW5zaW9ucyAnICsgdGhpcyk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vdGhpcy52YWxpZCA9IGZyYW1lICYmIGZyYW1lLndpZHRoICYmIGZyYW1lLmhlaWdodCAmJiB0aGlzLmJhc2VUZXh0dXJlLnNvdXJjZSAmJiB0aGlzLmJhc2VUZXh0dXJlLmhhc0xvYWRlZDtcbiAgICAgICAgICAgIHRoaXMudmFsaWQgPSBmcmFtZSAmJiBmcmFtZS53aWR0aCAmJiBmcmFtZS5oZWlnaHQgJiYgdGhpcy5iYXNlVGV4dHVyZS5oYXNMb2FkZWQ7XG5cbiAgICAgICAgICAgIGlmICh0aGlzLnRyaW0pXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdGhpcy53aWR0aCA9IHRoaXMudHJpbS53aWR0aDtcbiAgICAgICAgICAgICAgICB0aGlzLmhlaWdodCA9IHRoaXMudHJpbS5oZWlnaHQ7XG4gICAgICAgICAgICAgICAgdGhpcy5fZnJhbWUud2lkdGggPSB0aGlzLnRyaW0ud2lkdGg7XG4gICAgICAgICAgICAgICAgdGhpcy5fZnJhbWUuaGVpZ2h0ID0gdGhpcy50cmltLmhlaWdodDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB0aGlzLmNyb3AgPSBmcmFtZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHRoaXMudmFsaWQpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdGhpcy5fdXBkYXRlVXZzKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG59KTtcblxuLyoqXG4gKiBVcGRhdGVzIHRoaXMgdGV4dHVyZSBvbiB0aGUgZ3B1LlxuICpcbiAqL1xuVGV4dHVyZS5wcm90b3R5cGUudXBkYXRlID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLmJhc2VUZXh0dXJlLnVwZGF0ZSgpO1xufTtcblxuLyoqXG4gKiBDYWxsZWQgd2hlbiB0aGUgYmFzZSB0ZXh0dXJlIGlzIGxvYWRlZFxuICpcbiAqIEBwcml2YXRlXG4gKi9cblRleHR1cmUucHJvdG90eXBlLm9uQmFzZVRleHR1cmVMb2FkZWQgPSBmdW5jdGlvbiAoYmFzZVRleHR1cmUpXG57XG4gICAgLy8gVE9ETyB0aGlzIGNvZGUgbG9va3MgY29uZnVzaW5nLi4gYm9vIHRvIGFidXNpbmcgZ2V0dGVycyBhbmQgc2V0dGVyc3MhXG4gICAgaWYgKHRoaXMubm9GcmFtZSlcbiAgICB7XG4gICAgICAgIHRoaXMuZnJhbWUgPSBuZXcgbWF0aC5SZWN0YW5nbGUoMCwgMCwgYmFzZVRleHR1cmUud2lkdGgsIGJhc2VUZXh0dXJlLmhlaWdodCk7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHRoaXMuZnJhbWUgPSB0aGlzLl9mcmFtZTtcbiAgICB9XG5cbiAgICB0aGlzLmVtaXQoJ3VwZGF0ZScsIHRoaXMpO1xufTtcblxuLyoqXG4gKiBDYWxsZWQgd2hlbiB0aGUgYmFzZSB0ZXh0dXJlIGlzIHVwZGF0ZWRcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5UZXh0dXJlLnByb3RvdHlwZS5vbkJhc2VUZXh0dXJlVXBkYXRlZCA9IGZ1bmN0aW9uIChiYXNlVGV4dHVyZSlcbntcbiAgICB0aGlzLl9mcmFtZS53aWR0aCA9IGJhc2VUZXh0dXJlLndpZHRoO1xuICAgIHRoaXMuX2ZyYW1lLmhlaWdodCA9IGJhc2VUZXh0dXJlLmhlaWdodDtcblxuICAgIHRoaXMuZW1pdCgndXBkYXRlJywgdGhpcyk7XG59O1xuXG4vKipcbiAqIERlc3Ryb3lzIHRoaXMgdGV4dHVyZVxuICpcbiAqIEBwYXJhbSBbZGVzdHJveUJhc2U9ZmFsc2VdIHtib29sZWFufSBXaGV0aGVyIHRvIGRlc3Ryb3kgdGhlIGJhc2UgdGV4dHVyZSBhcyB3ZWxsXG4gKi9cblRleHR1cmUucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoZGVzdHJveUJhc2UpXG57XG4gICAgaWYgKHRoaXMuYmFzZVRleHR1cmUpXG4gICAge1xuICAgICAgICBpZiAoZGVzdHJveUJhc2UpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuYmFzZVRleHR1cmUuZGVzdHJveSgpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5iYXNlVGV4dHVyZS5vZmYoJ3VwZGF0ZScsIHRoaXMub25CYXNlVGV4dHVyZVVwZGF0ZWQsIHRoaXMpO1xuICAgICAgICB0aGlzLmJhc2VUZXh0dXJlLm9mZignbG9hZGVkJywgdGhpcy5vbkJhc2VUZXh0dXJlTG9hZGVkLCB0aGlzKTtcblxuICAgICAgICB0aGlzLmJhc2VUZXh0dXJlID0gbnVsbDtcbiAgICB9XG5cbiAgICB0aGlzLl9mcmFtZSA9IG51bGw7XG4gICAgdGhpcy5fdXZzID0gbnVsbDtcbiAgICB0aGlzLnRyaW0gPSBudWxsO1xuICAgIHRoaXMuY3JvcCA9IG51bGw7XG5cbiAgICB0aGlzLnZhbGlkID0gZmFsc2U7XG5cbiAgICB0aGlzLm9mZignZGlzcG9zZScsIHRoaXMuZGlzcG9zZSwgdGhpcyk7XG4gICAgdGhpcy5vZmYoJ3VwZGF0ZScsIHRoaXMudXBkYXRlLCB0aGlzKTtcbn07XG5cbi8qKlxuICogQ3JlYXRlcyBhIG5ldyB0ZXh0dXJlIG9iamVjdCB0aGF0IGFjdHMgdGhlIHNhbWUgYXMgdGhpcyBvbmUuXG4gKlxuICogQHJldHVybiB7UElYSS5UZXh0dXJlfVxuICovXG5UZXh0dXJlLnByb3RvdHlwZS5jbG9uZSA9IGZ1bmN0aW9uICgpXG57XG4gICAgcmV0dXJuIG5ldyBUZXh0dXJlKHRoaXMuYmFzZVRleHR1cmUsIHRoaXMuZnJhbWUsIHRoaXMuY3JvcCwgdGhpcy50cmltLCB0aGlzLnJvdGF0ZSk7XG59O1xuXG4vKipcbiAqIFVwZGF0ZXMgdGhlIGludGVybmFsIFdlYkdMIFVWIGNhY2hlLlxuICpcbiAqIEBwcml2YXRlXG4gKi9cblRleHR1cmUucHJvdG90eXBlLl91cGRhdGVVdnMgPSBmdW5jdGlvbiAoKVxue1xuICAgIGlmICghdGhpcy5fdXZzKVxuICAgIHtcbiAgICAgICAgdGhpcy5fdXZzID0gbmV3IFRleHR1cmVVdnMoKTtcbiAgICB9XG5cbiAgICB0aGlzLl91dnMuc2V0KHRoaXMuY3JvcCwgdGhpcy5iYXNlVGV4dHVyZSwgdGhpcy5yb3RhdGUpO1xufTtcblxuLyoqXG4gKiBIZWxwZXIgZnVuY3Rpb24gdGhhdCBjcmVhdGVzIGEgVGV4dHVyZSBvYmplY3QgZnJvbSB0aGUgZ2l2ZW4gaW1hZ2UgdXJsLlxuICogSWYgdGhlIGltYWdlIGlzIG5vdCBpbiB0aGUgdGV4dHVyZSBjYWNoZSBpdCB3aWxsIGJlICBjcmVhdGVkIGFuZCBsb2FkZWQuXG4gKlxuICogQHN0YXRpY1xuICogQHBhcmFtIGltYWdlVXJsIHtzdHJpbmd9IFRoZSBpbWFnZSB1cmwgb2YgdGhlIHRleHR1cmVcbiAqIEBwYXJhbSBjcm9zc29yaWdpbiB7Ym9vbGVhbn0gV2hldGhlciByZXF1ZXN0cyBzaG91bGQgYmUgdHJlYXRlZCBhcyBjcm9zc29yaWdpblxuICogQHBhcmFtIHNjYWxlTW9kZSB7bnVtYmVyfSBTZWUge0BsaW5rIFBJWEkuU0NBTEVfTU9ERVN9IGZvciBwb3NzaWJsZSB2YWx1ZXNcbiAqIEByZXR1cm4ge1BJWEkuVGV4dHVyZX0gVGhlIG5ld2x5IGNyZWF0ZWQgdGV4dHVyZVxuICovXG5UZXh0dXJlLmZyb21JbWFnZSA9IGZ1bmN0aW9uIChpbWFnZVVybCwgY3Jvc3NvcmlnaW4sIHNjYWxlTW9kZSlcbntcbiAgICB2YXIgdGV4dHVyZSA9IHV0aWxzLlRleHR1cmVDYWNoZVtpbWFnZVVybF07XG5cbiAgICBpZiAoIXRleHR1cmUpXG4gICAge1xuICAgICAgICB0ZXh0dXJlID0gbmV3IFRleHR1cmUoQmFzZVRleHR1cmUuZnJvbUltYWdlKGltYWdlVXJsLCBjcm9zc29yaWdpbiwgc2NhbGVNb2RlKSk7XG4gICAgICAgIHV0aWxzLlRleHR1cmVDYWNoZVtpbWFnZVVybF0gPSB0ZXh0dXJlO1xuICAgIH1cblxuICAgIHJldHVybiB0ZXh0dXJlO1xufTtcblxuLyoqXG4gKiBIZWxwZXIgZnVuY3Rpb24gdGhhdCBjcmVhdGVzIGEgc3ByaXRlIHRoYXQgd2lsbCBjb250YWluIGEgdGV4dHVyZSBmcm9tIHRoZSBUZXh0dXJlQ2FjaGUgYmFzZWQgb24gdGhlIGZyYW1lSWRcbiAqIFRoZSBmcmFtZSBpZHMgYXJlIGNyZWF0ZWQgd2hlbiBhIFRleHR1cmUgcGFja2VyIGZpbGUgaGFzIGJlZW4gbG9hZGVkXG4gKlxuICogQHN0YXRpY1xuICogQHBhcmFtIGZyYW1lSWQge3N0cmluZ30gVGhlIGZyYW1lIElkIG9mIHRoZSB0ZXh0dXJlIGluIHRoZSBjYWNoZVxuICogQHJldHVybiB7UElYSS5UZXh0dXJlfSBUaGUgbmV3bHkgY3JlYXRlZCB0ZXh0dXJlXG4gKi9cblRleHR1cmUuZnJvbUZyYW1lID0gZnVuY3Rpb24gKGZyYW1lSWQpXG57XG4gICAgdmFyIHRleHR1cmUgPSB1dGlscy5UZXh0dXJlQ2FjaGVbZnJhbWVJZF07XG5cbiAgICBpZiAoIXRleHR1cmUpXG4gICAge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RoZSBmcmFtZUlkIFwiJyArIGZyYW1lSWQgKyAnXCIgZG9lcyBub3QgZXhpc3QgaW4gdGhlIHRleHR1cmUgY2FjaGUnKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGV4dHVyZTtcbn07XG5cbi8qKlxuICogSGVscGVyIGZ1bmN0aW9uIHRoYXQgY3JlYXRlcyBhIG5ldyBUZXh0dXJlIGJhc2VkIG9uIHRoZSBnaXZlbiBjYW52YXMgZWxlbWVudC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAcGFyYW0gY2FudmFzIHtDYW52YXN9IFRoZSBjYW52YXMgZWxlbWVudCBzb3VyY2Ugb2YgdGhlIHRleHR1cmVcbiAqIEBwYXJhbSBzY2FsZU1vZGUge251bWJlcn0gU2VlIHtAbGluayBQSVhJLlNDQUxFX01PREVTfSBmb3IgcG9zc2libGUgdmFsdWVzXG4gKiBAcmV0dXJuIHtQSVhJLlRleHR1cmV9XG4gKi9cblRleHR1cmUuZnJvbUNhbnZhcyA9IGZ1bmN0aW9uIChjYW52YXMsIHNjYWxlTW9kZSlcbntcbiAgICByZXR1cm4gbmV3IFRleHR1cmUoQmFzZVRleHR1cmUuZnJvbUNhbnZhcyhjYW52YXMsIHNjYWxlTW9kZSkpO1xufTtcblxuLyoqXG4gKiBIZWxwZXIgZnVuY3Rpb24gdGhhdCBjcmVhdGVzIGEgbmV3IFRleHR1cmUgYmFzZWQgb24gdGhlIGdpdmVuIHZpZGVvIGVsZW1lbnQuXG4gKlxuICogQHN0YXRpY1xuICogQHBhcmFtIHZpZGVvIHtIVE1MVmlkZW9FbGVtZW50fVxuICogQHBhcmFtIHNjYWxlTW9kZSB7bnVtYmVyfSBTZWUge0BsaW5rIFBJWEkuU0NBTEVfTU9ERVN9IGZvciBwb3NzaWJsZSB2YWx1ZXNcbiAqIEByZXR1cm4ge1BJWEkuVGV4dHVyZX0gQSBUZXh0dXJlXG4gKi9cblRleHR1cmUuZnJvbVZpZGVvID0gZnVuY3Rpb24gKHZpZGVvLCBzY2FsZU1vZGUpXG57XG4gICAgaWYgKHR5cGVvZiB2aWRlbyA9PT0gJ3N0cmluZycpXG4gICAge1xuICAgICAgICByZXR1cm4gVGV4dHVyZS5mcm9tVmlkZW9VcmwodmlkZW8sIHNjYWxlTW9kZSk7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHJldHVybiBuZXcgVGV4dHVyZShWaWRlb0Jhc2VUZXh0dXJlLmZyb21WaWRlbyh2aWRlbywgc2NhbGVNb2RlKSk7XG4gICAgfVxufTtcblxuLyoqXG4gKiBIZWxwZXIgZnVuY3Rpb24gdGhhdCBjcmVhdGVzIGEgbmV3IFRleHR1cmUgYmFzZWQgb24gdGhlIHZpZGVvIHVybC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAcGFyYW0gdmlkZW9Vcmwge3N0cmluZ31cbiAqIEBwYXJhbSBzY2FsZU1vZGUge251bWJlcn0gU2VlIHtAbGluayBQSVhJLlNDQUxFX01PREVTfSBmb3IgcG9zc2libGUgdmFsdWVzXG4gKiBAcmV0dXJuIHtQSVhJLlRleHR1cmV9IEEgVGV4dHVyZVxuICovXG5UZXh0dXJlLmZyb21WaWRlb1VybCA9IGZ1bmN0aW9uICh2aWRlb1VybCwgc2NhbGVNb2RlKVxue1xuICAgIHJldHVybiBuZXcgVGV4dHVyZShWaWRlb0Jhc2VUZXh0dXJlLmZyb21VcmwodmlkZW9VcmwsIHNjYWxlTW9kZSkpO1xufTtcblxuLyoqXG4gKiBBZGRzIGEgdGV4dHVyZSB0byB0aGUgZ2xvYmFsIHV0aWxzLlRleHR1cmVDYWNoZS4gVGhpcyBjYWNoZSBpcyBzaGFyZWQgYWNyb3NzIHRoZSB3aG9sZSBQSVhJIG9iamVjdC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAcGFyYW0gdGV4dHVyZSB7UElYSS5UZXh0dXJlfSBUaGUgVGV4dHVyZSB0byBhZGQgdG8gdGhlIGNhY2hlLlxuICogQHBhcmFtIGlkIHtzdHJpbmd9IFRoZSBpZCB0aGF0IHRoZSB0ZXh0dXJlIHdpbGwgYmUgc3RvcmVkIGFnYWluc3QuXG4gKi9cblRleHR1cmUuYWRkVGV4dHVyZVRvQ2FjaGUgPSBmdW5jdGlvbiAodGV4dHVyZSwgaWQpXG57XG4gICAgdXRpbHMuVGV4dHVyZUNhY2hlW2lkXSA9IHRleHR1cmU7XG59O1xuXG4vKipcbiAqIFJlbW92ZSBhIHRleHR1cmUgZnJvbSB0aGUgZ2xvYmFsIHV0aWxzLlRleHR1cmVDYWNoZS5cbiAqXG4gKiBAc3RhdGljXG4gKiBAcGFyYW0gaWQge3N0cmluZ30gVGhlIGlkIG9mIHRoZSB0ZXh0dXJlIHRvIGJlIHJlbW92ZWRcbiAqIEByZXR1cm4ge1BJWEkuVGV4dHVyZX0gVGhlIHRleHR1cmUgdGhhdCB3YXMgcmVtb3ZlZFxuICovXG5UZXh0dXJlLnJlbW92ZVRleHR1cmVGcm9tQ2FjaGUgPSBmdW5jdGlvbiAoaWQpXG57XG4gICAgdmFyIHRleHR1cmUgPSB1dGlscy5UZXh0dXJlQ2FjaGVbaWRdO1xuXG4gICAgZGVsZXRlIHV0aWxzLlRleHR1cmVDYWNoZVtpZF07XG4gICAgZGVsZXRlIHV0aWxzLkJhc2VUZXh0dXJlQ2FjaGVbaWRdO1xuXG4gICAgcmV0dXJuIHRleHR1cmU7XG59O1xuXG4vKipcbiAqIEFuIGVtcHR5IHRleHR1cmUsIHVzZWQgb2Z0ZW4gdG8gbm90IGhhdmUgdG8gY3JlYXRlIG11bHRpcGxlIGVtcHR5IHRleHR1cmVzLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBjb25zdGFudFxuICovXG5UZXh0dXJlLkVNUFRZID0gbmV3IFRleHR1cmUobmV3IEJhc2VUZXh0dXJlKCkpO1xuIiwiXG4vKipcbiAqIEEgc3RhbmRhcmQgb2JqZWN0IHRvIHN0b3JlIHRoZSBVdnMgb2YgYSB0ZXh0dXJlXG4gKlxuICogQGNsYXNzXG4gKiBAcHJpdmF0ZVxuICogQG1lbWJlcm9mIFBJWElcbiAqL1xuZnVuY3Rpb24gVGV4dHVyZVV2cygpXG57XG4gICAgdGhpcy54MCA9IDA7XG4gICAgdGhpcy55MCA9IDA7XG5cbiAgICB0aGlzLngxID0gMTtcbiAgICB0aGlzLnkxID0gMDtcblxuICAgIHRoaXMueDIgPSAxO1xuICAgIHRoaXMueTIgPSAxO1xuXG4gICAgdGhpcy54MyA9IDA7XG4gICAgdGhpcy55MyA9IDE7XG5cbiAgICB0aGlzLnh5MF91aW50MzIgPSAwO1xuICAgIHRoaXMueHkxX3VpbnQzMiA9IDA7XG4gICAgdGhpcy54eTJfdWludDMyID0gMDtcbiAgICB0aGlzLnh5M191aW50MzIgPSAwO1xuXG4gICAgdGhpcy51dnNfdWludDMyID0gbmV3IFVpbnQzMkFycmF5KDQpXG59XG5cbm1vZHVsZS5leHBvcnRzID0gVGV4dHVyZVV2cztcblxuLyoqXG4gKiBTZXRzIHRoZSB0ZXh0dXJlIFV2cyBiYXNlZCBvbiB0aGUgZ2l2ZW4gZnJhbWUgaW5mb3JtYXRpb25cbiAqIEBwYXJhbSBmcmFtZSB7UElYSS5SZWN0YW5nbGV9XG4gKiBAcGFyYW0gYmFzZUZyYW1lIHtQSVhJLlJlY3RhbmdsZX1cbiAqIEBwYXJhbSByb3RhdGUge2Jvb2xlYW59IFdoZXRoZXIgb3Igbm90IHRoZSBmcmFtZSBpcyByb3RhdGVkXG4gKiBAcHJpdmF0ZVxuICovXG5UZXh0dXJlVXZzLnByb3RvdHlwZS5zZXQgPSBmdW5jdGlvbiAoZnJhbWUsIGJhc2VGcmFtZSwgcm90YXRlKVxue1xuICAgIHZhciB0dyA9IGJhc2VGcmFtZS53aWR0aDtcbiAgICB2YXIgdGggPSBiYXNlRnJhbWUuaGVpZ2h0O1xuXG4gICAgaWYocm90YXRlKVxuICAgIHtcbiAgICAgICAgdGhpcy54MCA9IChmcmFtZS54ICsgZnJhbWUuaGVpZ2h0KSAvIHR3O1xuICAgICAgICB0aGlzLnkwID0gZnJhbWUueSAvIHRoO1xuXG4gICAgICAgIHRoaXMueDEgPSAoZnJhbWUueCArIGZyYW1lLmhlaWdodCkgLyB0dztcbiAgICAgICAgdGhpcy55MSA9IChmcmFtZS55ICsgZnJhbWUud2lkdGgpIC8gdGg7XG5cbiAgICAgICAgdGhpcy54MiA9IGZyYW1lLnggLyB0dztcbiAgICAgICAgdGhpcy55MiA9IChmcmFtZS55ICsgZnJhbWUud2lkdGgpIC8gdGg7XG5cbiAgICAgICAgdGhpcy54MyA9IGZyYW1lLnggLyB0dztcbiAgICAgICAgdGhpcy55MyA9IGZyYW1lLnkgLyB0aDtcbiAgICB9XG4gICAgZWxzZVxuICAgIHtcblxuICAgICAgICB0aGlzLngwID0gZnJhbWUueCAvIHR3O1xuICAgICAgICB0aGlzLnkwID0gZnJhbWUueSAvIHRoO1xuXG4gICAgICAgIHRoaXMueDEgPSAoZnJhbWUueCArIGZyYW1lLndpZHRoKSAvIHR3O1xuICAgICAgICB0aGlzLnkxID0gZnJhbWUueSAvIHRoO1xuXG4gICAgICAgIHRoaXMueDIgPSAoZnJhbWUueCArIGZyYW1lLndpZHRoKSAvIHR3O1xuICAgICAgICB0aGlzLnkyID0gKGZyYW1lLnkgKyBmcmFtZS5oZWlnaHQpIC8gdGg7XG5cbiAgICAgICAgdGhpcy54MyA9IGZyYW1lLnggLyB0dztcbiAgICAgICAgdGhpcy55MyA9IChmcmFtZS55ICsgZnJhbWUuaGVpZ2h0KSAvIHRoO1xuICAgIH1cblxuICAgIHRoaXMudXZzX3VpbnQzMlswXSA9ICgoKHRoaXMueTAgKiA2NTUzNSkgJiAweEZGRkYpIDw8IDE2KSB8ICgodGhpcy54MCAqIDY1NTM1KSAmIDB4RkZGRik7XG4gICAgdGhpcy51dnNfdWludDMyWzFdID0gKCgodGhpcy55MSAqIDY1NTM1KSAmIDB4RkZGRikgPDwgMTYpIHwgKCh0aGlzLngxICogNjU1MzUpICYgMHhGRkZGKTtcbiAgICB0aGlzLnV2c191aW50MzJbMl0gPSAoKCh0aGlzLnkyICogNjU1MzUpICYgMHhGRkZGKSA8PCAxNikgfCAoKHRoaXMueDIgKiA2NTUzNSkgJiAweEZGRkYpO1xuICAgIHRoaXMudXZzX3VpbnQzMlszXSA9ICgoKHRoaXMueTMgKiA2NTUzNSkgJiAweEZGRkYpIDw8IDE2KSB8ICgodGhpcy54MyAqIDY1NTM1KSAmIDB4RkZGRik7XG59O1xuIiwidmFyIEJhc2VUZXh0dXJlID0gcmVxdWlyZSgnLi9CYXNlVGV4dHVyZScpLFxuICAgIHV0aWxzID0gcmVxdWlyZSgnLi4vdXRpbHMnKTtcblxuLyoqXG4gKiBBIHRleHR1cmUgb2YgYSBbcGxheWluZ10gVmlkZW8uXG4gKlxuICogVmlkZW8gYmFzZSB0ZXh0dXJlcyBtaW1pYyBQaXhpIEJhc2VUZXh0dXJlLmZyb20uLi4uIG1ldGhvZCBpbiB0aGVpciBjcmVhdGlvbiBwcm9jZXNzLlxuICpcbiAqIFRoaXMgY2FuIGJlIHVzZWQgaW4gc2V2ZXJhbCB3YXlzLCBzdWNoIGFzOlxuICpcbiAqIGBgYGpzXG4gKiB2YXIgdGV4dHVyZSA9IFBJWEkuVmlkZW9CYXNlVGV4dHVyZS5mcm9tVXJsKCdodHRwOi8vbXlkb21haW4uY29tL3ZpZGVvLm1wNCcpO1xuICpcbiAqIHZhciB0ZXh0dXJlID0gUElYSS5WaWRlb0Jhc2VUZXh0dXJlLmZyb21VcmwoeyBzcmM6ICdodHRwOi8vbXlkb21haW4uY29tL3ZpZGVvLm1wNCcsIG1pbWU6ICd2aWRlby9tcDQnIH0pO1xuICpcbiAqIHZhciB0ZXh0dXJlID0gUElYSS5WaWRlb0Jhc2VUZXh0dXJlLmZyb21VcmxzKFsnL3ZpZGVvLndlYm0nLCAnL3ZpZGVvLm1wNCddKTtcbiAqXG4gKiB2YXIgdGV4dHVyZSA9IFBJWEkuVmlkZW9CYXNlVGV4dHVyZS5mcm9tVXJscyhbXG4gKiAgICAgeyBzcmM6ICcvdmlkZW8ud2VibScsIG1pbWU6ICd2aWRlby93ZWJtJyB9LFxuICogICAgIHsgc3JjOiAnL3ZpZGVvLm1wNCcsIG1pbWU6ICd2aWRlby9tcDQnIH1cbiAqIF0pO1xuICogYGBgXG4gKlxuICogU2VlIHRoZSBbXCJkZXVzXCIgZGVtb10oaHR0cDovL3d3dy5nb29kYm95ZGlnaXRhbC5jb20vcGl4aWpzL2V4YW1wbGVzL2RldXMvKS5cbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQmFzZVRleHR1cmVcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gc291cmNlIHtIVE1MVmlkZW9FbGVtZW50fVxuICogQHBhcmFtIFtzY2FsZU1vZGVdIHtudW1iZXJ9IFNlZSB7QGxpbmsgUElYSS5TQ0FMRV9NT0RFU30gZm9yIHBvc3NpYmxlIHZhbHVlc1xuICovXG5mdW5jdGlvbiBWaWRlb0Jhc2VUZXh0dXJlKHNvdXJjZSwgc2NhbGVNb2RlKVxue1xuICAgIGlmICghc291cmNlKVxuICAgIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdObyB2aWRlbyBzb3VyY2UgZWxlbWVudCBzcGVjaWZpZWQuJyk7XG4gICAgfVxuXG4gICAgLy8gaG9vayBpbiBoZXJlIHRvIGNoZWNrIGlmIHZpZGVvIGlzIGFscmVhZHkgYXZhaWxhYmxlLlxuICAgIC8vIEJhc2VUZXh0dXJlIGxvb2tzIGZvciBhIHNvdXJjZS5jb21wbGV0ZSBib29sZWFuLCBwbHVzIHdpZHRoICYgaGVpZ2h0LlxuXG4gICAgaWYgKChzb3VyY2UucmVhZHlTdGF0ZSA9PT0gc291cmNlLkhBVkVfRU5PVUdIX0RBVEEgfHwgc291cmNlLnJlYWR5U3RhdGUgPT09IHNvdXJjZS5IQVZFX0ZVVFVSRV9EQVRBKSAmJiBzb3VyY2Uud2lkdGggJiYgc291cmNlLmhlaWdodClcbiAgICB7XG4gICAgICAgIHNvdXJjZS5jb21wbGV0ZSA9IHRydWU7XG4gICAgfVxuXG4gICAgQmFzZVRleHR1cmUuY2FsbCh0aGlzLCBzb3VyY2UsIHNjYWxlTW9kZSk7XG5cbiAgICAvKipcbiAgICAgKiBTaG91bGQgdGhlIGJhc2UgdGV4dHVyZSBhdXRvbWF0aWNhbGx5IHVwZGF0ZSBpdHNlbGYsIHNldCB0byB0cnVlIGJ5IGRlZmF1bHRcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICogQGRlZmF1bHQgdHJ1ZVxuICAgICAqL1xuICAgIHRoaXMuYXV0b1VwZGF0ZSA9IGZhbHNlO1xuXG4gICAgdGhpcy5fb25VcGRhdGUgPSB0aGlzLl9vblVwZGF0ZS5iaW5kKHRoaXMpO1xuICAgIHRoaXMuX29uQ2FuUGxheSA9IHRoaXMuX29uQ2FuUGxheS5iaW5kKHRoaXMpO1xuXG4gICAgaWYgKCFzb3VyY2UuY29tcGxldGUpXG4gICAge1xuICAgICAgICBzb3VyY2UuYWRkRXZlbnRMaXN0ZW5lcignY2FucGxheScsIHRoaXMuX29uQ2FuUGxheSk7XG4gICAgICAgIHNvdXJjZS5hZGRFdmVudExpc3RlbmVyKCdjYW5wbGF5dGhyb3VnaCcsIHRoaXMuX29uQ2FuUGxheSk7XG5cbiAgICAgICAgLy8gc3RhcnRlZCBwbGF5aW5nLi5cbiAgICAgICAgc291cmNlLmFkZEV2ZW50TGlzdGVuZXIoJ3BsYXknLCB0aGlzLl9vblBsYXlTdGFydC5iaW5kKHRoaXMpKTtcbiAgICAgICAgc291cmNlLmFkZEV2ZW50TGlzdGVuZXIoJ3BhdXNlJywgdGhpcy5fb25QbGF5U3RvcC5iaW5kKHRoaXMpKTtcbiAgICB9XG5cbiAgICB0aGlzLl9fbG9hZGVkID0gZmFsc2U7XG59XG5cblZpZGVvQmFzZVRleHR1cmUucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShCYXNlVGV4dHVyZS5wcm90b3R5cGUpO1xuVmlkZW9CYXNlVGV4dHVyZS5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBWaWRlb0Jhc2VUZXh0dXJlO1xubW9kdWxlLmV4cG9ydHMgPSBWaWRlb0Jhc2VUZXh0dXJlO1xuXG4vKipcbiAqIFRoZSBpbnRlcm5hbCB1cGRhdGUgbG9vcCBvZiB0aGUgdmlkZW8gYmFzZSB0ZXh0dXJlLCBvbmx5IHJ1bnMgd2hlbiBhdXRvVXBkYXRlIGlzIHNldCB0byB0cnVlXG4gKlxuICogQHByaXZhdGVcbiAqL1xuVmlkZW9CYXNlVGV4dHVyZS5wcm90b3R5cGUuX29uVXBkYXRlID0gZnVuY3Rpb24gKClcbntcbiAgICBpZiAodGhpcy5hdXRvVXBkYXRlKVxuICAgIHtcbiAgICAgICAgd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZSh0aGlzLl9vblVwZGF0ZSk7XG4gICAgICAgIHRoaXMudXBkYXRlKCk7XG4gICAgfVxufTtcblxuLyoqXG4gKiBSdW5zIHRoZSB1cGRhdGUgbG9vcCB3aGVuIHRoZSB2aWRlbyBpcyByZWFkeSB0byBwbGF5XG4gKlxuICogQHByaXZhdGVcbiAqL1xuVmlkZW9CYXNlVGV4dHVyZS5wcm90b3R5cGUuX29uUGxheVN0YXJ0ID0gZnVuY3Rpb24gKClcbntcbiAgICBpZiAoIXRoaXMuYXV0b1VwZGF0ZSlcbiAgICB7XG4gICAgICAgIHdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUodGhpcy5fb25VcGRhdGUpO1xuICAgICAgICB0aGlzLmF1dG9VcGRhdGUgPSB0cnVlO1xuICAgIH1cbn07XG5cbi8qKlxuICogRmlyZWQgd2hlbiBhIHBhdXNlIGV2ZW50IGlzIHRyaWdnZXJlZCwgc3RvcHMgdGhlIHVwZGF0ZSBsb29wXG4gKlxuICogQHByaXZhdGVcbiAqL1xuVmlkZW9CYXNlVGV4dHVyZS5wcm90b3R5cGUuX29uUGxheVN0b3AgPSBmdW5jdGlvbiAoKVxue1xuICAgIHRoaXMuYXV0b1VwZGF0ZSA9IGZhbHNlO1xufTtcblxuLyoqXG4gKiBGaXJlZCB3aGVuIHRoZSB2aWRlbyBpcyBsb2FkZWQgYW5kIHJlYWR5IHRvIHBsYXlcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5WaWRlb0Jhc2VUZXh0dXJlLnByb3RvdHlwZS5fb25DYW5QbGF5ID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLmhhc0xvYWRlZCA9IHRydWU7XG5cbiAgICBpZiAodGhpcy5zb3VyY2UpXG4gICAge1xuICAgICAgICB0aGlzLnNvdXJjZS5yZW1vdmVFdmVudExpc3RlbmVyKCdjYW5wbGF5JywgdGhpcy5fb25DYW5QbGF5KTtcbiAgICAgICAgdGhpcy5zb3VyY2UucmVtb3ZlRXZlbnRMaXN0ZW5lcignY2FucGxheXRocm91Z2gnLCB0aGlzLl9vbkNhblBsYXkpO1xuXG4gICAgICAgIHRoaXMud2lkdGggPSB0aGlzLnNvdXJjZS52aWRlb1dpZHRoO1xuICAgICAgICB0aGlzLmhlaWdodCA9IHRoaXMuc291cmNlLnZpZGVvSGVpZ2h0O1xuXG4gICAgICAgIHRoaXMuc291cmNlLnBsYXkoKTtcblxuICAgICAgICAvLyBwcmV2ZW50IG11bHRpcGxlIGxvYWRlZCBkaXNwYXRjaGVzLi5cbiAgICAgICAgaWYgKCF0aGlzLl9fbG9hZGVkKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLl9fbG9hZGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMuZW1pdCgnbG9hZGVkJywgdGhpcyk7XG4gICAgICAgIH1cbiAgICB9XG59O1xuXG4vKipcbiAqIERlc3Ryb3lzIHRoaXMgdGV4dHVyZVxuICpcbiAqL1xuVmlkZW9CYXNlVGV4dHVyZS5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uICgpXG57XG4gICAgaWYgKHRoaXMuc291cmNlICYmIHRoaXMuc291cmNlLl9waXhpSWQpXG4gICAge1xuICAgICAgICBkZWxldGUgdXRpbHMuQmFzZVRleHR1cmVDYWNoZVsgdGhpcy5zb3VyY2UuX3BpeGlJZCBdO1xuICAgICAgICBkZWxldGUgdGhpcy5zb3VyY2UuX3BpeGlJZDtcbiAgICB9XG5cbiAgICBCYXNlVGV4dHVyZS5wcm90b3R5cGUuZGVzdHJveS5jYWxsKHRoaXMpO1xufTtcblxuLyoqXG4gKiBNaW1pYyBQaXhpIEJhc2VUZXh0dXJlLmZyb20uLi4uIG1ldGhvZC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAcGFyYW0gdmlkZW8ge0hUTUxWaWRlb0VsZW1lbnR9XG4gKiBAcGFyYW0gc2NhbGVNb2RlIHtudW1iZXJ9IFNlZSB7QGxpbmsgUElYSS5TQ0FMRV9NT0RFU30gZm9yIHBvc3NpYmxlIHZhbHVlc1xuICogQHJldHVybiB7UElYSS5WaWRlb0Jhc2VUZXh0dXJlfVxuICovXG5WaWRlb0Jhc2VUZXh0dXJlLmZyb21WaWRlbyA9IGZ1bmN0aW9uICh2aWRlbywgc2NhbGVNb2RlKVxue1xuICAgIGlmICghdmlkZW8uX3BpeGlJZClcbiAgICB7XG4gICAgICAgIHZpZGVvLl9waXhpSWQgPSAndmlkZW9fJyArIHV0aWxzLnVpZCgpO1xuICAgIH1cblxuICAgIHZhciBiYXNlVGV4dHVyZSA9IHV0aWxzLkJhc2VUZXh0dXJlQ2FjaGVbdmlkZW8uX3BpeGlJZF07XG5cbiAgICBpZiAoIWJhc2VUZXh0dXJlKVxuICAgIHtcbiAgICAgICAgYmFzZVRleHR1cmUgPSBuZXcgVmlkZW9CYXNlVGV4dHVyZSh2aWRlbywgc2NhbGVNb2RlKTtcbiAgICAgICAgdXRpbHMuQmFzZVRleHR1cmVDYWNoZVsgdmlkZW8uX3BpeGlJZCBdID0gYmFzZVRleHR1cmU7XG4gICAgfVxuXG4gICAgcmV0dXJuIGJhc2VUZXh0dXJlO1xufTtcblxuLyoqXG4gKiBIZWxwZXIgZnVuY3Rpb24gdGhhdCBjcmVhdGVzIGEgbmV3IEJhc2VUZXh0dXJlIGJhc2VkIG9uIHRoZSBnaXZlbiB2aWRlbyBlbGVtZW50LlxuICogVGhpcyBCYXNlVGV4dHVyZSBjYW4gdGhlbiBiZSB1c2VkIHRvIGNyZWF0ZSBhIHRleHR1cmVcbiAqXG4gKiBAc3RhdGljXG4gKiBAcGFyYW0gdmlkZW9TcmMge3N0cmluZ3xvYmplY3R8c3RyaW5nW118b2JqZWN0W119IFRoZSBVUkwocykgZm9yIHRoZSB2aWRlby5cbiAqIEBwYXJhbSBbdmlkZW9TcmMuc3JjXSB7c3RyaW5nfSBPbmUgb2YgdGhlIHNvdXJjZSB1cmxzIGZvciB0aGUgdmlkZW9cbiAqIEBwYXJhbSBbdmlkZW9TcmMubWltZV0ge3N0cmluZ30gVGhlIG1pbWV0eXBlIG9mIHRoZSB2aWRlbyAoZS5nLiAndmlkZW8vbXA0JykuIElmIG5vdCBzcGVjaWZpZWRcbiAqICB0aGUgdXJsJ3MgZXh0ZW5zaW9uIHdpbGwgYmUgdXNlZCBhcyB0aGUgc2Vjb25kIHBhcnQgb2YgdGhlIG1pbWUgdHlwZS5cbiAqIEBwYXJhbSBzY2FsZU1vZGUge251bWJlcn0gU2VlIHtAbGluayBQSVhJLlNDQUxFX01PREVTfSBmb3IgcG9zc2libGUgdmFsdWVzXG4gKiBAcmV0dXJuIHtQSVhJLlZpZGVvQmFzZVRleHR1cmV9XG4gKi9cblZpZGVvQmFzZVRleHR1cmUuZnJvbVVybCA9IGZ1bmN0aW9uICh2aWRlb1NyYywgc2NhbGVNb2RlKVxue1xuICAgIHZhciB2aWRlbyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3ZpZGVvJyk7XG5cbiAgICAvLyBhcnJheSBvZiBvYmplY3RzIG9yIHN0cmluZ3NcbiAgICBpZiAoQXJyYXkuaXNBcnJheSh2aWRlb1NyYykpXG4gICAge1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHZpZGVvU3JjLmxlbmd0aDsgKytpKVxuICAgICAgICB7XG4gICAgICAgICAgICB2aWRlby5hcHBlbmRDaGlsZChjcmVhdGVTb3VyY2UodmlkZW9TcmNbaV0uc3JjIHx8IHZpZGVvU3JjW2ldLCB2aWRlb1NyY1tpXS5taW1lKSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLy8gc2luZ2xlIG9iamVjdCBvciBzdHJpbmdcbiAgICBlbHNlXG4gICAge1xuICAgICAgICB2aWRlby5hcHBlbmRDaGlsZChjcmVhdGVTb3VyY2UodmlkZW9TcmMuc3JjIHx8IHZpZGVvU3JjLCB2aWRlb1NyYy5taW1lKSk7XG4gICAgfVxuXG4gICAgdmlkZW8ubG9hZCgpO1xuICAgIHZpZGVvLnBsYXkoKTtcblxuICAgIHJldHVybiBWaWRlb0Jhc2VUZXh0dXJlLmZyb21WaWRlbyh2aWRlbywgc2NhbGVNb2RlKTtcbn07XG5cblZpZGVvQmFzZVRleHR1cmUuZnJvbVVybHMgPSBWaWRlb0Jhc2VUZXh0dXJlLmZyb21Vcmw7XG5cbmZ1bmN0aW9uIGNyZWF0ZVNvdXJjZShwYXRoLCB0eXBlKVxue1xuICAgIGlmICghdHlwZSlcbiAgICB7XG4gICAgICAgIHR5cGUgPSAndmlkZW8vJyArIHBhdGguc3Vic3RyKHBhdGgubGFzdEluZGV4T2YoJy4nKSArIDEpO1xuICAgIH1cblxuICAgIHZhciBzb3VyY2UgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzb3VyY2UnKTtcblxuICAgIHNvdXJjZS5zcmMgPSBwYXRoO1xuICAgIHNvdXJjZS50eXBlID0gdHlwZTtcblxuICAgIHJldHVybiBzb3VyY2U7XG59XG4iLCJ2YXIgQ09OU1QgPSByZXF1aXJlKCcuLi9jb25zdCcpLFxuICAgIEV2ZW50RW1pdHRlciA9IHJlcXVpcmUoJ2V2ZW50ZW1pdHRlcjMnKSxcbiAgICAvLyBJbnRlcm5hbCBldmVudCB1c2VkIGJ5IGNvbXBvc2VkIGVtaXR0ZXJcbiAgICBUSUNLID0gJ3RpY2snO1xuXG4vKipcbiAqIEEgVGlja2VyIGNsYXNzIHRoYXQgcnVucyBhbiB1cGRhdGUgbG9vcCB0aGF0IG90aGVyIG9iamVjdHMgbGlzdGVuIHRvLlxuICogVGhpcyBjbGFzcyBpcyBjb21wb3NlZCBhcm91bmQgYW4gRXZlbnRFbWl0dGVyIG9iamVjdCB0byBhZGQgbGlzdGVuZXJzXG4gKiBtZWFudCBmb3IgZXhlY3V0aW9uIG9uIHRoZSBuZXh0IHJlcXVlc3RlZCBhbmltYXRpb24gZnJhbWUuXG4gKiBBbmltYXRpb24gZnJhbWVzIGFyZSByZXF1ZXN0ZWQgb25seSB3aGVuIG5lY2Vzc2FyeSxcbiAqIGUuZy4gV2hlbiB0aGUgdGlja2VyIGlzIHN0YXJ0ZWQgYW5kIHRoZSBlbWl0dGVyIGhhcyBsaXN0ZW5lcnMuXG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSS50aWNrZXJcbiAqL1xuZnVuY3Rpb24gVGlja2VyKClcbntcbiAgICB2YXIgX3RoaXMgPSB0aGlzO1xuXG4gICAgLyoqXG4gICAgICogSW50ZXJuYWwgdGljayBtZXRob2QgYm91bmQgdG8gdGlja2VyIGluc3RhbmNlLlxuICAgICAqIFRoaXMgaXMgYmVjYXVzZSBpbiBlYXJseSAyMDE1LCBGdW5jdGlvbi5iaW5kXG4gICAgICogaXMgc3RpbGwgNjAlIHNsb3dlciBpbiBoaWdoIHBlcmZvcm1hbmNlIHNjZW5hcmlvcy5cbiAgICAgKiBBbHNvIHNlcGFyYXRpbmcgZnJhbWUgcmVxdWVzdHMgZnJvbSB1cGRhdGUgbWV0aG9kXG4gICAgICogc28gbGlzdGVuZXJzIG1heSBiZSBjYWxsZWQgYXQgYW55IHRpbWUgYW5kIHdpdGhcbiAgICAgKiBhbnkgYW5pbWF0aW9uIEFQSSwganVzdCBpbnZva2UgdGlja2VyLnVwZGF0ZSh0aW1lKS5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fdGljayA9IGZ1bmN0aW9uIF90aWNrKHRpbWUpIHtcblxuICAgICAgICBfdGhpcy5fcmVxdWVzdElkID0gbnVsbDtcblxuICAgICAgICBpZiAoX3RoaXMuc3RhcnRlZClcbiAgICAgICAge1xuICAgICAgICAgICAgLy8gSW52b2tlIGxpc3RlbmVycyBub3dcbiAgICAgICAgICAgIF90aGlzLnVwZGF0ZSh0aW1lKTtcbiAgICAgICAgICAgIC8vIExpc3RlbmVyIHNpZGUgZWZmZWN0cyBtYXkgaGF2ZSBtb2RpZmllZCB0aWNrZXIgc3RhdGUuXG4gICAgICAgICAgICBpZiAoX3RoaXMuc3RhcnRlZCAmJiBfdGhpcy5fcmVxdWVzdElkID09PSBudWxsICYmIF90aGlzLl9lbWl0dGVyLmxpc3RlbmVycyhUSUNLLCB0cnVlKSlcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBfdGhpcy5fcmVxdWVzdElkID0gcmVxdWVzdEFuaW1hdGlvbkZyYW1lKF90aGlzLl90aWNrKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH07XG5cbiAgICAvKipcbiAgICAgKiBJbnRlcm5hbCBlbWl0dGVyIHVzZWQgdG8gZmlyZSAndGljaycgZXZlbnRcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX2VtaXR0ZXIgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgICAvKipcbiAgICAgKiBJbnRlcm5hbCBjdXJyZW50IGZyYW1lIHJlcXVlc3QgSURcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX3JlcXVlc3RJZCA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBJbnRlcm5hbCB2YWx1ZSBtYW5hZ2VkIGJ5IG1pbkZQUyBwcm9wZXJ0eSBzZXR0ZXIgYW5kIGdldHRlci5cbiAgICAgKiBUaGlzIGlzIHRoZSBtYXhpbXVtIGFsbG93ZWQgbWlsbGlzZWNvbmRzIGJldHdlZW4gdXBkYXRlcy5cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX21heEVsYXBzZWRNUyA9IDEwMDtcblxuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgb3Igbm90IHRoaXMgdGlja2VyIHNob3VsZCBpbnZva2UgdGhlIG1ldGhvZFxuICAgICAqIHtAbGluayBQSVhJLnRpY2tlci5UaWNrZXIjc3RhcnR9IGF1dG9tYXRpY2FsbHlcbiAgICAgKiB3aGVuIGEgbGlzdGVuZXIgaXMgYWRkZWQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqIEBkZWZhdWx0IGZhbHNlXG4gICAgICovXG4gICAgdGhpcy5hdXRvU3RhcnQgPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIFNjYWxhciB0aW1lIHZhbHVlIGZyb20gbGFzdCBmcmFtZSB0byB0aGlzIGZyYW1lLlxuICAgICAqIFRoaXMgdmFsdWUgaXMgY2FwcGVkIGJ5IHNldHRpbmcge0BsaW5rIFBJWEkudGlja2VyLlRpY2tlciNtaW5GUFN9XG4gICAgICogYW5kIGlzIHNjYWxlZCB3aXRoIHtAbGluayBQSVhJLnRpY2tlci5UaWNrZXIjc3BlZWR9LlxuICAgICAqICoqTm90ZToqKiBUaGUgY2FwIG1heSBiZSBleGNlZWRlZCBieSBzY2FsaW5nLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDFcbiAgICAgKi9cbiAgICB0aGlzLmRlbHRhVGltZSA9IDE7XG5cbiAgICAvKipcbiAgICAgKiBUaW1lIGVsYXBzZWQgaW4gbWlsbGlzZWNvbmRzIGZyb20gbGFzdCBmcmFtZSB0byB0aGlzIGZyYW1lLlxuICAgICAqIE9wcG9zZWQgdG8gd2hhdCB0aGUgc2NhbGFyIHtAbGluayBQSVhJLnRpY2tlci5UaWNrZXIjZGVsdGFUaW1lfVxuICAgICAqIGlzIGJhc2VkLCB0aGlzIHZhbHVlIGlzIG5laXRoZXIgY2FwcGVkIG5vciBzY2FsZWQuXG4gICAgICogSWYgdGhlIHBsYXRmb3JtIHN1cHBvcnRzIERPTUhpZ2hSZXNUaW1lU3RhbXAsXG4gICAgICogdGhpcyB2YWx1ZSB3aWxsIGhhdmUgYSBwcmVjaXNpb24gb2YgMSDCtXMuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtET01IaWdoUmVzVGltZVN0YW1wfG51bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAxIC8gVEFSR0VUX0ZQTVNcbiAgICAgKi9cbiAgICB0aGlzLmVsYXBzZWRNUyA9IDEgLyBDT05TVC5UQVJHRVRfRlBNUzsgLy8gZGVmYXVsdCB0byB0YXJnZXQgZnJhbWUgdGltZVxuXG4gICAgLyoqXG4gICAgICogVGhlIGxhc3QgdGltZSB7QGxpbmsgUElYSS50aWNrZXIuVGlja2VyI3VwZGF0ZX0gd2FzIGludm9rZWQuXG4gICAgICogVGhpcyB2YWx1ZSBpcyBhbHNvIHJlc2V0IGludGVybmFsbHkgb3V0c2lkZSBvZiBpbnZva2luZ1xuICAgICAqIHVwZGF0ZSwgYnV0IG9ubHkgd2hlbiBhIG5ldyBhbmltYXRpb24gZnJhbWUgaXMgcmVxdWVzdGVkLlxuICAgICAqIElmIHRoZSBwbGF0Zm9ybSBzdXBwb3J0cyBET01IaWdoUmVzVGltZVN0YW1wLFxuICAgICAqIHRoaXMgdmFsdWUgd2lsbCBoYXZlIGEgcHJlY2lzaW9uIG9mIDEgwrVzLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7RE9NSGlnaFJlc1RpbWVTdGFtcHxudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMFxuICAgICAqL1xuICAgIHRoaXMubGFzdFRpbWUgPSAwO1xuXG4gICAgLyoqXG4gICAgICogRmFjdG9yIG9mIGN1cnJlbnQge0BsaW5rIFBJWEkudGlja2VyLlRpY2tlciNkZWx0YVRpbWV9LlxuICAgICAqIEBleGFtcGxlXG4gICAgICogLy8gU2NhbGVzIHRpY2tlci5kZWx0YVRpbWUgdG8gd2hhdCB3b3VsZCBiZVxuICAgICAqIC8vIHRoZSBlcXVpdmFsZW50IG9mIGFwcHJveGltYXRlbHkgMTIwIEZQU1xuICAgICAqIHRpY2tlci5zcGVlZCA9IDI7XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMVxuICAgICAqL1xuICAgIHRoaXMuc3BlZWQgPSAxO1xuXG4gICAgLyoqXG4gICAgICogV2hldGhlciBvciBub3QgdGhpcyB0aWNrZXIgaGFzIGJlZW4gc3RhcnRlZC5cbiAgICAgKiBgdHJ1ZWAgaWYge0BsaW5rIFBJWEkudGlja2VyLlRpY2tlciNzdGFydH0gaGFzIGJlZW4gY2FsbGVkLlxuICAgICAqIGBmYWxzZWAgaWYge0BsaW5rIFBJWEkudGlja2VyLlRpY2tlciNzdG9wfSBoYXMgYmVlbiBjYWxsZWQuXG4gICAgICogV2hpbGUgYGZhbHNlYCwgdGhpcyB2YWx1ZSBtYXkgY2hhbmdlIHRvIGB0cnVlYCBpbiB0aGVcbiAgICAgKiBldmVudCBvZiB7QGxpbmsgUElYSS50aWNrZXIuVGlja2VyI2F1dG9TdGFydH0gYmVpbmcgYHRydWVgXG4gICAgICogYW5kIGEgbGlzdGVuZXIgaXMgYWRkZWQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqIEBkZWZhdWx0IGZhbHNlXG4gICAgICovXG4gICAgdGhpcy5zdGFydGVkID0gZmFsc2U7XG59XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKFRpY2tlci5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBUaGUgZnJhbWVzIHBlciBzZWNvbmQgYXQgd2hpY2ggdGhpcyB0aWNrZXIgaXMgcnVubmluZy5cbiAgICAgKiBUaGUgZGVmYXVsdCBpcyBhcHByb3hpbWF0ZWx5IDYwIGluIG1vc3QgbW9kZXJuIGJyb3dzZXJzLlxuICAgICAqICoqTm90ZToqKiBUaGlzIGRvZXMgbm90IGZhY3RvciBpbiB0aGUgdmFsdWUgb2ZcbiAgICAgKiB7QGxpbmsgUElYSS50aWNrZXIuVGlja2VyI3NwZWVkfSwgd2hpY2ggaXMgc3BlY2lmaWNcbiAgICAgKiB0byBzY2FsaW5nIHtAbGluayBQSVhJLnRpY2tlci5UaWNrZXIjZGVsdGFUaW1lfS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXJcbiAgICAgKiBAbWVtYmVyb2YgUElYSS50aWNrZXIuVGlja2VyI1xuICAgICAqIEByZWFkb25seVxuICAgICAqL1xuICAgIEZQUzoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIDEwMDAgLyB0aGlzLmVsYXBzZWRNUztcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBNYW5hZ2VzIHRoZSBtYXhpbXVtIGFtb3VudCBvZiBtaWxsaXNlY29uZHMgYWxsb3dlZCB0b1xuICAgICAqIGVsYXBzZSBiZXR3ZWVuIGludm9raW5nIHtAbGluayBQSVhJLnRpY2tlci5UaWNrZXIjdXBkYXRlfS5cbiAgICAgKiBUaGlzIHZhbHVlIGlzIHVzZWQgdG8gY2FwIHtAbGluayBQSVhJLnRpY2tlci5UaWNrZXIjZGVsdGFUaW1lfSxcbiAgICAgKiBidXQgZG9lcyBub3QgZWZmZWN0IHRoZSBtZWFzdXJlZCB2YWx1ZSBvZiB7QGxpbmsgUElYSS50aWNrZXIuVGlja2VyI0ZQU30uXG4gICAgICogV2hlbiBzZXR0aW5nIHRoaXMgcHJvcGVydHkgaXQgaXMgY2xhbXBlZCB0byBhIHZhbHVlIGJldHdlZW5cbiAgICAgKiBgMGAgYW5kIGBQSVhJLlRBUkdFVF9GUE1TICogMTAwMGAuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyXG4gICAgICogQG1lbWJlcm9mIFBJWEkudGlja2VyLlRpY2tlciNcbiAgICAgKiBAZGVmYXVsdCAxMFxuICAgICAqL1xuICAgIG1pbkZQUzoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIDEwMDAgLyB0aGlzLl9tYXhFbGFwc2VkTVM7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24oZnBzKVxuICAgICAgICB7XG4gICAgICAgICAgICAvLyBDbGFtcDogMCB0byBUQVJHRVRfRlBNU1xuICAgICAgICAgICAgdmFyIG1pbkZQTVMgPSBNYXRoLm1pbihNYXRoLm1heCgwLCBmcHMpIC8gMTAwMCwgQ09OU1QuVEFSR0VUX0ZQTVMpO1xuICAgICAgICAgICAgdGhpcy5fbWF4RWxhcHNlZE1TID0gMSAvIG1pbkZQTVM7XG4gICAgICAgIH1cbiAgICB9XG59KTtcblxuLyoqXG4gKiBDb25kaXRpb25hbGx5IHJlcXVlc3RzIGEgbmV3IGFuaW1hdGlvbiBmcmFtZS5cbiAqIElmIGEgZnJhbWUgaGFzIG5vdCBhbHJlYWR5IGJlZW4gcmVxdWVzdGVkLCBhbmQgaWYgdGhlIGludGVybmFsXG4gKiBlbWl0dGVyIGhhcyBsaXN0ZW5lcnMsIGEgbmV3IGZyYW1lIGlzIHJlcXVlc3RlZC5cbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5UaWNrZXIucHJvdG90eXBlLl9yZXF1ZXN0SWZOZWVkZWQgPSBmdW5jdGlvbiBfcmVxdWVzdElmTmVlZGVkKClcbntcbiAgICBpZiAodGhpcy5fcmVxdWVzdElkID09PSBudWxsICYmIHRoaXMuX2VtaXR0ZXIubGlzdGVuZXJzKFRJQ0ssIHRydWUpKVxuICAgIHtcbiAgICAgICAgLy8gZW5zdXJlIGNhbGxiYWNrcyBnZXQgY29ycmVjdCBkZWx0YVxuICAgICAgICB0aGlzLmxhc3RUaW1lID0gcGVyZm9ybWFuY2Uubm93KCk7XG4gICAgICAgIHRoaXMuX3JlcXVlc3RJZCA9IHJlcXVlc3RBbmltYXRpb25GcmFtZSh0aGlzLl90aWNrKTtcbiAgICB9XG59O1xuXG4vKipcbiAqIENvbmRpdGlvbmFsbHkgY2FuY2VscyBhIHBlbmRpbmcgYW5pbWF0aW9uIGZyYW1lLlxuICpcbiAqIEBwcml2YXRlXG4gKi9cblRpY2tlci5wcm90b3R5cGUuX2NhbmNlbElmTmVlZGVkID0gZnVuY3Rpb24gX2NhbmNlbElmTmVlZGVkKClcbntcbiAgICBpZiAodGhpcy5fcmVxdWVzdElkICE9PSBudWxsKVxuICAgIHtcbiAgICAgICAgY2FuY2VsQW5pbWF0aW9uRnJhbWUodGhpcy5fcmVxdWVzdElkKTtcbiAgICAgICAgdGhpcy5fcmVxdWVzdElkID0gbnVsbDtcbiAgICB9XG59O1xuXG4vKipcbiAqIENvbmRpdGlvbmFsbHkgcmVxdWVzdHMgYSBuZXcgYW5pbWF0aW9uIGZyYW1lLlxuICogSWYgdGhlIHRpY2tlciBoYXMgYmVlbiBzdGFydGVkIGl0IGNoZWNrcyBpZiBhIGZyYW1lIGhhcyBub3QgYWxyZWFkeVxuICogYmVlbiByZXF1ZXN0ZWQsIGFuZCBpZiB0aGUgaW50ZXJuYWwgZW1pdHRlciBoYXMgbGlzdGVuZXJzLiBJZiB0aGVzZVxuICogY29uZGl0aW9ucyBhcmUgbWV0LCBhIG5ldyBmcmFtZSBpcyByZXF1ZXN0ZWQuIElmIHRoZSB0aWNrZXIgaGFzIG5vdFxuICogYmVlbiBzdGFydGVkLCBidXQgYXV0b1N0YXJ0IGlzIGB0cnVlYCwgdGhlbiB0aGUgdGlja2VyIHN0YXJ0cyBub3csXG4gKiBhbmQgY29udGludWVzIHdpdGggdGhlIHByZXZpb3VzIGNvbmRpdGlvbnMgdG8gcmVxdWVzdCBhIG5ldyBmcmFtZS5cbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5UaWNrZXIucHJvdG90eXBlLl9zdGFydElmUG9zc2libGUgPSBmdW5jdGlvbiBfc3RhcnRJZlBvc3NpYmxlKClcbntcbiAgICBpZiAodGhpcy5zdGFydGVkKVxuICAgIHtcbiAgICAgICAgdGhpcy5fcmVxdWVzdElmTmVlZGVkKCk7XG4gICAgfVxuICAgIGVsc2UgaWYgKHRoaXMuYXV0b1N0YXJ0KVxuICAgIHtcbiAgICAgICAgdGhpcy5zdGFydCgpO1xuICAgIH1cbn07XG5cbi8qKlxuICogQ2FsbHMge0BsaW5rIG1vZHVsZTpldmVudGVtaXR0ZXIzLkV2ZW50RW1pdHRlciNvbn0gaW50ZXJuYWxseSBmb3IgdGhlXG4gKiBpbnRlcm5hbCAndGljaycgZXZlbnQuIEl0IGNoZWNrcyBpZiB0aGUgZW1pdHRlciBoYXMgbGlzdGVuZXJzLFxuICogYW5kIGlmIHNvIGl0IHJlcXVlc3RzIGEgbmV3IGFuaW1hdGlvbiBmcmFtZSBhdCB0aGlzIHBvaW50LlxuICpcbiAqIEBwYXJhbSBmbiB7RnVuY3Rpb259IFRoZSBsaXN0ZW5lciBmdW5jdGlvbiB0byBiZSBhZGRlZCBmb3IgdXBkYXRlc1xuICogQHBhcmFtIFtjb250ZXh0XSB7RnVuY3Rpb259IFRoZSBsaXN0ZW5lciBjb250ZXh0XG4gKiBAcmV0dXJucyB7UElYSS50aWNrZXIuVGlja2VyfSB0aGlzXG4gKi9cblRpY2tlci5wcm90b3R5cGUuYWRkID0gZnVuY3Rpb24gYWRkKGZuLCBjb250ZXh0KVxue1xuICAgIHRoaXMuX2VtaXR0ZXIub24oVElDSywgZm4sIGNvbnRleHQpO1xuXG4gICAgdGhpcy5fc3RhcnRJZlBvc3NpYmxlKCk7XG5cbiAgICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogQ2FsbHMge0BsaW5rIG1vZHVsZTpldmVudGVtaXR0ZXIzLkV2ZW50RW1pdHRlciNvbmNlfSBpbnRlcm5hbGx5IGZvciB0aGVcbiAqIGludGVybmFsICd0aWNrJyBldmVudC4gSXQgY2hlY2tzIGlmIHRoZSBlbWl0dGVyIGhhcyBsaXN0ZW5lcnMsXG4gKiBhbmQgaWYgc28gaXQgcmVxdWVzdHMgYSBuZXcgYW5pbWF0aW9uIGZyYW1lIGF0IHRoaXMgcG9pbnQuXG4gKlxuICogQHBhcmFtIGZuIHtGdW5jdGlvbn0gVGhlIGxpc3RlbmVyIGZ1bmN0aW9uIHRvIGJlIGFkZGVkIGZvciBvbmUgdXBkYXRlXG4gKiBAcGFyYW0gW2NvbnRleHRdIHtGdW5jdGlvbn0gVGhlIGxpc3RlbmVyIGNvbnRleHRcbiAqIEByZXR1cm5zIHtQSVhJLnRpY2tlci5UaWNrZXJ9IHRoaXNcbiAqL1xuVGlja2VyLnByb3RvdHlwZS5hZGRPbmNlID0gZnVuY3Rpb24gYWRkT25jZShmbiwgY29udGV4dClcbntcbiAgICB0aGlzLl9lbWl0dGVyLm9uY2UoVElDSywgZm4sIGNvbnRleHQpO1xuXG4gICAgdGhpcy5fc3RhcnRJZlBvc3NpYmxlKCk7XG5cbiAgICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogQ2FsbHMge0BsaW5rIG1vZHVsZTpldmVudGVtaXR0ZXIzLkV2ZW50RW1pdHRlciNvZmZ9IGludGVybmFsbHkgZm9yICd0aWNrJyBldmVudC5cbiAqIEl0IGNoZWNrcyBpZiB0aGUgZW1pdHRlciBoYXMgbGlzdGVuZXJzIGZvciAndGljaycgZXZlbnQuXG4gKiBJZiBpdCBkb2VzLCB0aGVuIGl0IGNhbmNlbHMgdGhlIGFuaW1hdGlvbiBmcmFtZS5cbiAqXG4gKiBAcGFyYW0gW2ZuXSB7RnVuY3Rpb259IFRoZSBsaXN0ZW5lciBmdW5jdGlvbiB0byBiZSByZW1vdmVkXG4gKiBAcGFyYW0gW2NvbnRleHRdIHtGdW5jdGlvbn0gVGhlIGxpc3RlbmVyIGNvbnRleHQgdG8gYmUgcmVtb3ZlZFxuICogQHJldHVybnMge1BJWEkudGlja2VyLlRpY2tlcn0gdGhpc1xuICovXG5UaWNrZXIucHJvdG90eXBlLnJlbW92ZSA9IGZ1bmN0aW9uIHJlbW92ZShmbiwgY29udGV4dClcbntcbiAgICB0aGlzLl9lbWl0dGVyLm9mZihUSUNLLCBmbiwgY29udGV4dCk7XG5cbiAgICBpZiAoIXRoaXMuX2VtaXR0ZXIubGlzdGVuZXJzKFRJQ0ssIHRydWUpKVxuICAgIHtcbiAgICAgICAgdGhpcy5fY2FuY2VsSWZOZWVkZWQoKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogU3RhcnRzIHRoZSB0aWNrZXIuIElmIHRoZSB0aWNrZXIgaGFzIGxpc3RlbmVyc1xuICogYSBuZXcgYW5pbWF0aW9uIGZyYW1lIGlzIHJlcXVlc3RlZCBhdCB0aGlzIHBvaW50LlxuICovXG5UaWNrZXIucHJvdG90eXBlLnN0YXJ0ID0gZnVuY3Rpb24gc3RhcnQoKVxue1xuICAgIGlmICghdGhpcy5zdGFydGVkKVxuICAgIHtcbiAgICAgICAgdGhpcy5zdGFydGVkID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5fcmVxdWVzdElmTmVlZGVkKCk7XG4gICAgfVxufTtcblxuLyoqXG4gKiBTdG9wcyB0aGUgdGlja2VyLiBJZiB0aGUgdGlja2VyIGhhcyByZXF1ZXN0ZWRcbiAqIGFuIGFuaW1hdGlvbiBmcmFtZSBpdCBpcyBjYW5jZWxlZCBhdCB0aGlzIHBvaW50LlxuICovXG5UaWNrZXIucHJvdG90eXBlLnN0b3AgPSBmdW5jdGlvbiBzdG9wKClcbntcbiAgICBpZiAodGhpcy5zdGFydGVkKVxuICAgIHtcbiAgICAgICAgdGhpcy5zdGFydGVkID0gZmFsc2U7XG4gICAgICAgIHRoaXMuX2NhbmNlbElmTmVlZGVkKCk7XG4gICAgfVxufTtcblxuLyoqXG4gKiBUcmlnZ2VycyBhbiB1cGRhdGUuIEFuIHVwZGF0ZSBlbnRhaWxzIHNldHRpbmcgdGhlXG4gKiBjdXJyZW50IHtAbGluayBQSVhJLnRpY2tlci5UaWNrZXIjZWxhcHNlZE1TfSxcbiAqIHRoZSBjdXJyZW50IHtAbGluayBQSVhJLnRpY2tlci5UaWNrZXIjZGVsdGFUaW1lfSxcbiAqIGludm9raW5nIGFsbCBsaXN0ZW5lcnMgd2l0aCBjdXJyZW50IGRlbHRhVGltZSxcbiAqIGFuZCB0aGVuIGZpbmFsbHkgc2V0dGluZyB7QGxpbmsgUElYSS50aWNrZXIuVGlja2VyI2xhc3RUaW1lfVxuICogd2l0aCB0aGUgdmFsdWUgb2YgY3VycmVudFRpbWUgdGhhdCB3YXMgcHJvdmlkZWQuXG4gKiBUaGlzIG1ldGhvZCB3aWxsIGJlIGNhbGxlZCBhdXRvbWF0aWNhbGx5IGJ5IGFuaW1hdGlvblxuICogZnJhbWUgY2FsbGJhY2tzIGlmIHRoZSB0aWNrZXIgaW5zdGFuY2UgaGFzIGJlZW4gc3RhcnRlZFxuICogYW5kIGxpc3RlbmVycyBhcmUgYWRkZWQuXG4gKlxuICogQHBhcmFtIFtjdXJyZW50VGltZT1wZXJmb3JtYW5jZS5ub3coKV0ge0RPTUhpZ2hSZXNUaW1lU3RhbXB8bnVtYmVyfSB0aGUgY3VycmVudCB0aW1lIG9mIGV4ZWN1dGlvblxuICovXG5UaWNrZXIucHJvdG90eXBlLnVwZGF0ZSA9IGZ1bmN0aW9uIHVwZGF0ZShjdXJyZW50VGltZSlcbntcbiAgICB2YXIgZWxhcHNlZE1TO1xuXG4gICAgLy8gQWxsb3cgY2FsbGluZyB1cGRhdGUgZGlyZWN0bHkgd2l0aCBkZWZhdWx0IGN1cnJlbnRUaW1lLlxuICAgIGN1cnJlbnRUaW1lID0gY3VycmVudFRpbWUgfHwgcGVyZm9ybWFuY2Uubm93KCk7XG4gICAgLy8gU2F2ZSB1bmNhcHBlZCBlbGFwc2VkTVMgZm9yIG1lYXN1cmVtZW50XG4gICAgZWxhcHNlZE1TID0gdGhpcy5lbGFwc2VkTVMgPSBjdXJyZW50VGltZSAtIHRoaXMubGFzdFRpbWU7XG5cbiAgICAvLyBjYXAgdGhlIG1pbGxpc2Vjb25kcyBlbGFwc2VkIHVzZWQgZm9yIGRlbHRhVGltZVxuICAgIGlmIChlbGFwc2VkTVMgPiB0aGlzLl9tYXhFbGFwc2VkTVMpXG4gICAge1xuICAgICAgICBlbGFwc2VkTVMgPSB0aGlzLl9tYXhFbGFwc2VkTVM7XG4gICAgfVxuXG4gICAgdGhpcy5kZWx0YVRpbWUgPSBlbGFwc2VkTVMgKiBDT05TVC5UQVJHRVRfRlBNUyAqIHRoaXMuc3BlZWQ7XG5cbiAgICAvLyBJbnZva2UgbGlzdGVuZXJzIGFkZGVkIHRvIGludGVybmFsIGVtaXR0ZXJcbiAgICB0aGlzLl9lbWl0dGVyLmVtaXQoVElDSywgdGhpcy5kZWx0YVRpbWUpO1xuXG4gICAgdGhpcy5sYXN0VGltZSA9IGN1cnJlbnRUaW1lO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBUaWNrZXI7XG4iLCJ2YXIgVGlja2VyID0gcmVxdWlyZSgnLi9UaWNrZXInKTtcblxuLyoqXG4gKiBUaGUgc2hhcmVkIHRpY2tlciBpbnN0YW5jZSB1c2VkIGJ5IHtAbGluayBQSVhJLmV4dHJhcy5Nb3ZpZUNsaXB9LlxuICogYW5kIGJ5IHtAbGluayBQSVhJLmludGVyYWN0aW9uLkludGVyYWN0aW9uTWFuYWdlcn0uXG4gKiBUaGUgcHJvcGVydHkge0BsaW5rIFBJWEkudGlja2VyLlRpY2tlciNhdXRvU3RhcnR9IGlzIHNldCB0byBgdHJ1ZWBcbiAqIGZvciB0aGlzIGluc3RhbmNlLiBQbGVhc2UgZm9sbG93IHRoZSBleGFtcGxlcyBmb3IgdXNhZ2UsIGluY2x1ZGluZ1xuICogaG93IHRvIG9wdC1vdXQgb2YgYXV0by1zdGFydGluZyB0aGUgc2hhcmVkIHRpY2tlci5cbiAqXG4gKiBAZXhhbXBsZVxuICogdmFyIHRpY2tlciA9IFBJWEkudGlja2VyLnNoYXJlZDtcbiAqIC8vIFNldCB0aGlzIHRvIHByZXZlbnQgc3RhcnRpbmcgdGhpcyB0aWNrZXIgd2hlbiBsaXN0ZW5lcnMgYXJlIGFkZGVkLlxuICogLy8gQnkgZGVmYXVsdCB0aGlzIGlzIHRydWUgb25seSBmb3IgdGhlIFBJWEkudGlja2VyLnNoYXJlZCBpbnN0YW5jZS5cbiAqIHRpY2tlci5hdXRvU3RhcnQgPSBmYWxzZTtcbiAqIC8vIEZZSSwgY2FsbCB0aGlzIHRvIGVuc3VyZSB0aGUgdGlja2VyIGlzIHN0b3BwZWQuIEl0IHNob3VsZCBiZSBzdG9wcGVkXG4gKiAvLyBpZiB5b3UgaGF2ZSBub3QgYXR0ZW1wdGVkIHRvIHJlbmRlciBhbnl0aGluZyB5ZXQuXG4gKiB0aWNrZXIuc3RvcCgpO1xuICogLy8gQ2FsbCB0aGlzIHdoZW4geW91IGFyZSByZWFkeSBmb3IgYSBydW5uaW5nIHNoYXJlZCB0aWNrZXIuXG4gKiB0aWNrZXIuc3RhcnQoKTtcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gWW91IG1heSB1c2UgdGhlIHNoYXJlZCB0aWNrZXIgdG8gcmVuZGVyLi4uXG4gKiB2YXIgcmVuZGVyZXIgPSBQSVhJLmF1dG9EZXRlY3RSZW5kZXJlcig4MDAsIDYwMCk7XG4gKiB2YXIgc3RhZ2UgPSBuZXcgUElYSS5Db250YWluZXIoKTtcbiAqIHZhciBpbnRlcmFjdGlvbk1hbmFnZXIgPSBQSVhJLmludGVyYWN0aW9uLkludGVyYWN0aW9uTWFuYWdlcihyZW5kZXJlcik7XG4gKiBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKHJlbmRlcmVyLnZpZXcpO1xuICogdGlja2VyLmFkZChmdW5jdGlvbiAodGltZSkge1xuICogICAgIHJlbmRlcmVyLnJlbmRlcihzdGFnZSk7XG4gKiB9KTtcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gT3IgeW91IGNhbiBqdXN0IHVwZGF0ZSBpdCBtYW51YWxseS5cbiAqIHRpY2tlci5hdXRvU3RhcnQgPSBmYWxzZTtcbiAqIHRpY2tlci5zdG9wKCk7XG4gKiBmdW5jdGlvbiBhbmltYXRlKHRpbWUpIHtcbiAqICAgICB0aWNrZXIudXBkYXRlKHRpbWUpO1xuICogICAgIHJlbmRlcmVyLnJlbmRlcihzdGFnZSk7XG4gKiAgICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKGFuaW1hdGUpO1xuICogfVxuICogYW5pbWF0ZShwZXJmb3JtYW5jZS5ub3coKSk7XG4gKlxuICogQHR5cGUge1BJWEkudGlja2VyLlRpY2tlcn1cbiAqIEBtZW1iZXJvZiBQSVhJLnRpY2tlclxuICovXG52YXIgc2hhcmVkID0gbmV3IFRpY2tlcigpO1xuc2hhcmVkLmF1dG9TdGFydCA9IHRydWU7XG5cbi8qKlxuICogQG5hbWVzcGFjZSBQSVhJLnRpY2tlclxuICovXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgICBzaGFyZWQ6IHNoYXJlZCxcbiAgICBUaWNrZXI6IFRpY2tlclxufTtcbiIsIi8qKlxuICogR2VuZXJpYyBNYXNrIFN0YWNrIGRhdGEgc3RydWN0dXJlXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKi9cblxudmFyIEdMX01BUCA9IHt9O1xuXG5cbnZhciBjcmVhdGVJbmRpY2VzRm9yUXVhZHMgPSBmdW5jdGlvbiAoc2l6ZSlcbntcbiAgICAvLyB0aGUgdG90YWwgbnVtYmVyIG9mIGluZGljZXMgaW4gb3VyIGFycmF5LCB0aGVyZSBhcmUgNiBwb2ludHMgcGVyIHF1YWQuXG4gICBcbiAgICB2YXIgdG90YWxJbmRpY2VzID0gc2l6ZSAqIDY7XG5cbiAgICB2YXIgaW5kaWNlcyA9IG5ldyBVaW50MTZBcnJheSh0b3RhbEluZGljZXMpO1xuXG5cdC8vIGZpbGwgdGhlIGluZGljZXMgd2l0aCB0aGUgcXVhZHMgdG8gZHJhd1xuICAgIGZvciAodmFyIGk9MCwgaj0wOyBpIDwgdG90YWxJbmRpY2VzOyBpICs9IDYsIGogKz0gNClcbiAgICB7XG4gICAgICAgIGluZGljZXNbaSArIDBdID0gaiArIDA7XG4gICAgICAgIGluZGljZXNbaSArIDFdID0gaiArIDE7XG4gICAgICAgIGluZGljZXNbaSArIDJdID0gaiArIDI7XG4gICAgICAgIGluZGljZXNbaSArIDNdID0gaiArIDA7XG4gICAgICAgIGluZGljZXNbaSArIDRdID0gaiArIDI7XG4gICAgICAgIGluZGljZXNbaSArIDVdID0gaiArIDM7XG4gICAgfVxuXG4gICAgcmV0dXJuIGluZGljZXM7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGNyZWF0ZUluZGljZXNGb3JRdWFkczsiLCJ2YXIgQ09OU1QgPSByZXF1aXJlKCcuLi9jb25zdCcpO1xuXG4vKipcbiAqIEBuYW1lc3BhY2UgUElYSS51dGlsc1xuICovXG52YXIgdXRpbHMgPSBtb2R1bGUuZXhwb3J0cyA9IHtcbiAgICBfdWlkOiAwLFxuICAgIF9zYWlkSGVsbG86IGZhbHNlLFxuXG4gICAgRXZlbnRFbWl0dGVyOiAgIHJlcXVpcmUoJ2V2ZW50ZW1pdHRlcjMnKSxcbiAgICBwbHVnaW5UYXJnZXQ6ICAgcmVxdWlyZSgnLi9wbHVnaW5UYXJnZXQnKSxcbiAgICBhc3luYzogICAgICAgICAgcmVxdWlyZSgnYXN5bmMnKSxcblxuICAgIC8qKlxuICAgICAqIEdldHMgdGhlIG5leHQgdW5pcXVlIGlkZW50aWZpZXJcbiAgICAgKlxuICAgICAqIEByZXR1cm4ge251bWJlcn0gVGhlIG5leHQgdW5pcXVlIGlkZW50aWZpZXIgdG8gdXNlLlxuICAgICAqL1xuICAgIHVpZDogZnVuY3Rpb24gKClcbiAgICB7XG4gICAgICAgIHJldHVybiArK3V0aWxzLl91aWQ7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIENvbnZlcnRzIGEgaGV4IGNvbG9yIG51bWJlciB0byBhbiBbUiwgRywgQl0gYXJyYXlcbiAgICAgKlxuICAgICAqIEBwYXJhbSBoZXgge251bWJlcn1cbiAgICAgKiBAcGFyYW0gIHtudW1iZXJbXX0gW291dD1bXV1cbiAgICAgKiBAcmV0dXJuIHtudW1iZXJbXX0gQW4gYXJyYXkgcmVwcmVzZW50aW5nIHRoZSBbUiwgRywgQl0gb2YgdGhlIGNvbG9yLlxuICAgICAqL1xuICAgIGhleDJyZ2I6IGZ1bmN0aW9uIChoZXgsIG91dClcbiAgICB7XG4gICAgICAgIG91dCA9IG91dCB8fCBbXTtcblxuICAgICAgICBvdXRbMF0gPSAoaGV4ID4+IDE2ICYgMHhGRikgLyAyNTU7XG4gICAgICAgIG91dFsxXSA9IChoZXggPj4gOCAmIDB4RkYpIC8gMjU1O1xuICAgICAgICBvdXRbMl0gPSAoaGV4ICYgMHhGRikgLyAyNTU7XG5cbiAgICAgICAgcmV0dXJuIG91dDtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQ29udmVydHMgYSBoZXggY29sb3IgbnVtYmVyIHRvIGEgc3RyaW5nLlxuICAgICAqXG4gICAgICogQHBhcmFtIGhleCB7bnVtYmVyfVxuICAgICAqIEByZXR1cm4ge3N0cmluZ30gVGhlIHN0cmluZyBjb2xvci5cbiAgICAgKi9cbiAgICBoZXgyc3RyaW5nOiBmdW5jdGlvbiAoaGV4KVxuICAgIHtcbiAgICAgICAgaGV4ID0gaGV4LnRvU3RyaW5nKDE2KTtcbiAgICAgICAgaGV4ID0gJzAwMDAwMCcuc3Vic3RyKDAsIDYgLSBoZXgubGVuZ3RoKSArIGhleDtcblxuICAgICAgICByZXR1cm4gJyMnICsgaGV4O1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBDb252ZXJ0cyBhIGNvbG9yIGFzIGFuIFtSLCBHLCBCXSBhcnJheSB0byBhIGhleCBudW1iZXJcbiAgICAgKlxuICAgICAqIEBwYXJhbSByZ2Ige251bWJlcltdfVxuICAgICAqIEByZXR1cm4ge251bWJlcn0gVGhlIGNvbG9yIG51bWJlclxuICAgICAqL1xuICAgIHJnYjJoZXg6IGZ1bmN0aW9uIChyZ2IpXG4gICAge1xuICAgICAgICByZXR1cm4gKChyZ2JbMF0qMjU1IDw8IDE2KSArIChyZ2JbMV0qMjU1IDw8IDgpICsgcmdiWzJdKjI1NSk7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIENoZWNrcyB3aGV0aGVyIHRoZSBDYW52YXMgQmxlbmRNb2RlcyBhcmUgc3VwcG9ydGVkIGJ5IHRoZSBjdXJyZW50IGJyb3dzZXJcbiAgICAgKlxuICAgICAqIEByZXR1cm4ge2Jvb2xlYW59IHdoZXRoZXIgdGhleSBhcmUgc3VwcG9ydGVkXG4gICAgICovXG4gICAgY2FuVXNlTmV3Q2FudmFzQmxlbmRNb2RlczogZnVuY3Rpb24gKClcbiAgICB7XG4gICAgICAgIGlmICh0eXBlb2YgZG9jdW1lbnQgPT09ICd1bmRlZmluZWQnKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgcG5nSGVhZCA9ICdkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQUFRQUFBQUJBUU1BQUFERDhwMk9BQUFBQTFCTVZFWC8nO1xuICAgICAgICB2YXIgcG5nRW5kID0gJ0FBQUFDa2xFUVZRSTEyTmdBQUFBQWdBQjRpRzhNd0FBQUFCSlJVNUVya0pnZ2c9PSc7XG5cbiAgICAgICAgdmFyIG1hZ2VudGEgPSBuZXcgSW1hZ2UoKTtcbiAgICAgICAgbWFnZW50YS5zcmMgPSBwbmdIZWFkICsgJ0FQODA0T2E2JyArIHBuZ0VuZDtcblxuICAgICAgICB2YXIgeWVsbG93ID0gbmV3IEltYWdlKCk7XG4gICAgICAgIHllbGxvdy5zcmMgPSBwbmdIZWFkICsgJy93Q0t4dlJGJyArIHBuZ0VuZDtcblxuICAgICAgICB2YXIgY2FudmFzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnY2FudmFzJyk7XG4gICAgICAgIGNhbnZhcy53aWR0aCA9IDY7XG4gICAgICAgIGNhbnZhcy5oZWlnaHQgPSAxO1xuXG4gICAgICAgIHZhciBjb250ZXh0ID0gY2FudmFzLmdldENvbnRleHQoJzJkJyk7XG4gICAgICAgIGNvbnRleHQuZ2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uID0gJ211bHRpcGx5JztcbiAgICAgICAgY29udGV4dC5kcmF3SW1hZ2UobWFnZW50YSwgMCwgMCk7XG4gICAgICAgIGNvbnRleHQuZHJhd0ltYWdlKHllbGxvdywgMiwgMCk7XG5cbiAgICAgICAgdmFyIGRhdGEgPSBjb250ZXh0LmdldEltYWdlRGF0YSgyLDAsMSwxKS5kYXRhO1xuXG4gICAgICAgIHJldHVybiAoZGF0YVswXSA9PT0gMjU1ICYmIGRhdGFbMV0gPT09IDAgJiYgZGF0YVsyXSA9PT0gMCk7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIEdpdmVuIGEgbnVtYmVyLCB0aGlzIGZ1bmN0aW9uIHJldHVybnMgdGhlIGNsb3Nlc3QgbnVtYmVyIHRoYXQgaXMgYSBwb3dlciBvZiB0d29cbiAgICAgKiB0aGlzIGZ1bmN0aW9uIGlzIHRha2VuIGZyb20gU3RhcmxpbmcgRnJhbWV3b3JrIGFzIGl0cyBwcmV0dHkgbmVhdCA7KVxuICAgICAqXG4gICAgICogQHBhcmFtIG51bWJlciB7bnVtYmVyfVxuICAgICAqIEByZXR1cm4ge251bWJlcn0gdGhlIGNsb3Nlc3QgbnVtYmVyIHRoYXQgaXMgYSBwb3dlciBvZiB0d29cbiAgICAgKi9cbiAgICBnZXROZXh0UG93ZXJPZlR3bzogZnVuY3Rpb24gKG51bWJlcilcbiAgICB7XG4gICAgICAgIC8vIHNlZTogaHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9Qb3dlcl9vZl90d28jRmFzdF9hbGdvcml0aG1fdG9fY2hlY2tfaWZfYV9wb3NpdGl2ZV9udW1iZXJfaXNfYV9wb3dlcl9vZl90d29cbiAgICAgICAgaWYgKG51bWJlciA+IDAgJiYgKG51bWJlciAmIChudW1iZXIgLSAxKSkgPT09IDApXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiBudW1iZXI7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgICB2YXIgcmVzdWx0ID0gMTtcblxuICAgICAgICAgICAgd2hpbGUgKHJlc3VsdCA8IG51bWJlcilcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICByZXN1bHQgPDw9IDE7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogY2hlY2tzIGlmIHRoZSBnaXZlbiB3aWR0aCBhbmQgaGVpZ2h0IG1ha2UgYSBwb3dlciBvZiB0d28gcmVjdGFuZ2xlXG4gICAgICpcbiAgICAgKiBAcGFyYW0gd2lkdGgge251bWJlcn1cbiAgICAgKiBAcGFyYW0gaGVpZ2h0IHtudW1iZXJ9XG4gICAgICogQHJldHVybiB7Ym9vbGVhbn1cbiAgICAgKi9cbiAgICBpc1Bvd2VyT2ZUd286IGZ1bmN0aW9uICh3aWR0aCwgaGVpZ2h0KVxuICAgIHtcbiAgICAgICAgcmV0dXJuICh3aWR0aCA+IDAgJiYgKHdpZHRoICYgKHdpZHRoIC0gMSkpID09PSAwICYmIGhlaWdodCA+IDAgJiYgKGhlaWdodCAmIChoZWlnaHQgLSAxKSkgPT09IDApO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBnZXQgdGhlIHJlc29sdXRpb24gb2YgYW4gYXNzZXQgYnkgbG9va2luZyBmb3IgdGhlIHByZWZpeFxuICAgICAqIHVzZWQgYnkgc3ByaXRlc2hlZXRzIGFuZCBpbWFnZSB1cmxzXG4gICAgICpcbiAgICAgKiBAcGFyYW0gdXJsIHtzdHJpbmd9IHRoZSBpbWFnZSBwYXRoXG4gICAgICogQHJldHVybiB7bnVtYmVyfVxuICAgICAqL1xuICAgIGdldFJlc29sdXRpb25PZlVybDogZnVuY3Rpb24gKHVybClcbiAgICB7XG4gICAgICAgIHZhciByZXNvbHV0aW9uID0gQ09OU1QuUkVUSU5BX1BSRUZJWC5leGVjKHVybCk7XG5cbiAgICAgICAgaWYgKHJlc29sdXRpb24pXG4gICAgICAgIHtcbiAgICAgICAgICAgcmV0dXJuIHBhcnNlRmxvYXQocmVzb2x1dGlvblsxXSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gMTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogTG9ncyBvdXQgdGhlIHZlcnNpb24gYW5kIHJlbmRlcmVyIGluZm9ybWF0aW9uIGZvciB0aGlzIHJ1bm5pbmcgaW5zdGFuY2Ugb2YgUElYSS5cbiAgICAgKiBJZiB5b3UgZG9uJ3Qgd2FudCB0byBzZWUgdGhpcyBtZXNzYWdlIHlvdSBjYW4gc2V0IGBQSVhJLnV0aWxzLl9zYWlkSGVsbG8gPSB0cnVlO2BcbiAgICAgKiBzbyB0aGUgbGlicmFyeSB0aGlua3MgaXQgYWxyZWFkeSBzYWlkIGl0LiBLZWVwIGluIG1pbmQgdGhhdCBkb2luZyB0aGF0IHdpbGwgZm9yZXZlclxuICAgICAqIG1ha2VzIHlvdSBhIGplcmsgZmFjZS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSB0eXBlIC0gVGhlIHN0cmluZyByZW5kZXJlciB0eXBlIHRvIGxvZy5cbiAgICAgKiBAY29uc3RhbnRcbiAgICAgKiBAc3RhdGljXG4gICAgICovXG4gICAgc2F5SGVsbG86IGZ1bmN0aW9uICh0eXBlKVxuICAgIHtcbiAgICAgICAgaWYgKHV0aWxzLl9zYWlkSGVsbG8pXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChuYXZpZ2F0b3IudXNlckFnZW50LnRvTG93ZXJDYXNlKCkuaW5kZXhPZignY2hyb21lJykgPiAtMSlcbiAgICAgICAge1xuICAgICAgICAgICAgdmFyIGFyZ3MgPSBbXG4gICAgICAgICAgICAgICAgJ1xcbiAlYyAlYyAlYyBQaXhpLmpzICcgKyBDT05TVC5WRVJTSU9OICsgJyAtIOKcsCAnICsgdHlwZSArICcg4pywICAlYyAnICsgJyAlYyAnICsgJyBodHRwOi8vd3d3LnBpeGlqcy5jb20vICAlYyAlYyDimaUlY+KZpSVj4pmlIFxcblxcbicsXG4gICAgICAgICAgICAgICAgJ2JhY2tncm91bmQ6ICNmZjY2YTU7IHBhZGRpbmc6NXB4IDA7JyxcbiAgICAgICAgICAgICAgICAnYmFja2dyb3VuZDogI2ZmNjZhNTsgcGFkZGluZzo1cHggMDsnLFxuICAgICAgICAgICAgICAgICdjb2xvcjogI2ZmNjZhNTsgYmFja2dyb3VuZDogIzAzMDMwNzsgcGFkZGluZzo1cHggMDsnLFxuICAgICAgICAgICAgICAgICdiYWNrZ3JvdW5kOiAjZmY2NmE1OyBwYWRkaW5nOjVweCAwOycsXG4gICAgICAgICAgICAgICAgJ2JhY2tncm91bmQ6ICNmZmMzZGM7IHBhZGRpbmc6NXB4IDA7JyxcbiAgICAgICAgICAgICAgICAnYmFja2dyb3VuZDogI2ZmNjZhNTsgcGFkZGluZzo1cHggMDsnLFxuICAgICAgICAgICAgICAgICdjb2xvcjogI2ZmMjQyNDsgYmFja2dyb3VuZDogI2ZmZjsgcGFkZGluZzo1cHggMDsnLFxuICAgICAgICAgICAgICAgICdjb2xvcjogI2ZmMjQyNDsgYmFja2dyb3VuZDogI2ZmZjsgcGFkZGluZzo1cHggMDsnLFxuICAgICAgICAgICAgICAgICdjb2xvcjogI2ZmMjQyNDsgYmFja2dyb3VuZDogI2ZmZjsgcGFkZGluZzo1cHggMDsnXG4gICAgICAgICAgICBdO1xuXG4gICAgICAgICAgICB3aW5kb3cuY29uc29sZS5sb2cuYXBwbHkoY29uc29sZSwgYXJncyk7IC8vanNoaW50IGlnbm9yZTpsaW5lXG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAod2luZG93LmNvbnNvbGUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHdpbmRvdy5jb25zb2xlLmxvZygnUGl4aS5qcyAnICsgQ09OU1QuVkVSU0lPTiArICcgLSAnICsgdHlwZSArICcgLSBodHRwOi8vd3d3LnBpeGlqcy5jb20vJyk7IC8vanNoaW50IGlnbm9yZTpsaW5lXG4gICAgICAgIH1cblxuICAgICAgICB1dGlscy5fc2FpZEhlbGxvID0gdHJ1ZTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogSGVscGVyIGZvciBjaGVja2luZyBmb3Igd2ViZ2wgc3VwcG9ydFxuICAgICAqXG4gICAgICogQHJldHVybiB7Ym9vbGVhbn1cbiAgICAgKi9cbiAgICBpc1dlYkdMU3VwcG9ydGVkOiBmdW5jdGlvbiAoKVxuICAgIHtcbiAgICAgICAgdmFyIGNvbnRleHRPcHRpb25zID0geyBzdGVuY2lsOiB0cnVlIH07XG4gICAgICAgIHRyeVxuICAgICAgICB7XG4gICAgICAgICAgICBpZiAoIXdpbmRvdy5XZWJHTFJlbmRlcmluZ0NvbnRleHQpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB2YXIgY2FudmFzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnY2FudmFzJyksXG4gICAgICAgICAgICAgICAgZ2wgPSBjYW52YXMuZ2V0Q29udGV4dCgnd2ViZ2wnLCBjb250ZXh0T3B0aW9ucykgfHwgY2FudmFzLmdldENvbnRleHQoJ2V4cGVyaW1lbnRhbC13ZWJnbCcsIGNvbnRleHRPcHRpb25zKTtcblxuICAgICAgICAgICAgcmV0dXJuICEhKGdsICYmIGdsLmdldENvbnRleHRBdHRyaWJ1dGVzKCkuc3RlbmNpbCk7XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHNpZ24gb2YgbnVtYmVyXG4gICAgICpcbiAgICAgKiBAcGFyYW0gbiB7bnVtYmVyfVxuICAgICAqIEByZXR1cm5zIHtudW1iZXJ9IDAgaWYgbiBpcyAwLCAtMSBpZiBuIGlzIG5lZ2F0aXZlLCAxIGlmIG4gaSBwb3NpdGl2ZVxuICAgICAqL1xuICAgIHNpZ246IGZ1bmN0aW9uIChuKVxuICAgIHtcbiAgICAgICAgcmV0dXJuIG4gPyAobiA8IDAgPyAtMSA6IDEpIDogMDtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogcmVtb3ZlSXRlbXNcbiAgICAgKlxuICAgICAqIEBwYXJhbSB7YXJyYXl9IGFyciBUaGUgdGFyZ2V0IGFycmF5XG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHN0YXJ0SWR4IFRoZSBpbmRleCB0byBiZWdpbiByZW1vdmluZyBmcm9tIChpbmNsdXNpdmUpXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHJlbW92ZUNvdW50IEhvdyBtYW55IGl0ZW1zIHRvIHJlbW92ZVxuICAgICAqL1xuICAgIHJlbW92ZUl0ZW1zOiBmdW5jdGlvbiAoYXJyLCBzdGFydElkeCwgcmVtb3ZlQ291bnQpXG4gICAge1xuICAgICAgICB2YXIgbGVuZ3RoID0gYXJyLmxlbmd0aDtcblxuICAgICAgICBpZiAoc3RhcnRJZHggPj0gbGVuZ3RoIHx8IHJlbW92ZUNvdW50ID09PSAwKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICByZW1vdmVDb3VudCA9IChzdGFydElkeCtyZW1vdmVDb3VudCA+IGxlbmd0aCA/IGxlbmd0aC1zdGFydElkeCA6IHJlbW92ZUNvdW50KTtcbiAgICAgICAgZm9yICh2YXIgaSA9IHN0YXJ0SWR4LCBsZW4gPSBsZW5ndGgtcmVtb3ZlQ291bnQ7IGkgPCBsZW47ICsraSlcbiAgICAgICAge1xuICAgICAgICAgICAgYXJyW2ldID0gYXJyW2kgKyByZW1vdmVDb3VudF07XG4gICAgICAgIH1cblxuICAgICAgICBhcnIubGVuZ3RoID0gbGVuO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBAdG9kbyBEZXNjcmliZSBwcm9wZXJ0eSB1c2FnZVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgVGV4dHVyZUNhY2hlOiB7fSxcblxuICAgIC8qKlxuICAgICAqIEB0b2RvIERlc2NyaWJlIHByb3BlcnR5IHVzYWdlXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICBCYXNlVGV4dHVyZUNhY2hlOiB7fVxufTtcbiIsIi8qKlxuICogTWl4aW5zIGZ1bmN0aW9uYWxpdHkgdG8gbWFrZSBhbiBvYmplY3QgaGF2ZSBcInBsdWdpbnNcIi5cbiAqXG4gKiBAbWl4aW5cbiAqIEBtZW1iZXJvZiBQSVhJLnV0aWxzXG4gKiBAcGFyYW0gb2JqIHtvYmplY3R9IFRoZSBvYmplY3QgdG8gbWl4IGludG8uXG4gKiBAZXhhbXBsZVxuICogICAgICBmdW5jdGlvbiBNeU9iamVjdCgpIHt9XG4gKlxuICogICAgICBwbHVnaW5UYXJnZXQubWl4aW4oTXlPYmplY3QpO1xuICovXG5mdW5jdGlvbiBwbHVnaW5UYXJnZXQob2JqKVxue1xuICAgIG9iai5fX3BsdWdpbnMgPSB7fTtcblxuICAgIC8qKlxuICAgICAqIEFkZHMgYSBwbHVnaW4gdG8gYW4gb2JqZWN0XG4gICAgICpcbiAgICAgKiBAcGFyYW0gcGx1Z2luTmFtZSB7c3RyaW5nfSBUaGUgZXZlbnRzIHRoYXQgc2hvdWxkIGJlIGxpc3RlZC5cbiAgICAgKiBAcGFyYW0gY3RvciB7RnVuY3Rpb259IFRoZSBjb25zdHJ1Y3RvciBmdW5jdGlvbiBmb3IgdGhlIHBsdWdpbi5cbiAgICAgKi9cbiAgICBvYmoucmVnaXN0ZXJQbHVnaW4gPSBmdW5jdGlvbiAocGx1Z2luTmFtZSwgY3RvcilcbiAgICB7XG4gICAgICAgIG9iai5fX3BsdWdpbnNbcGx1Z2luTmFtZV0gPSBjdG9yO1xuICAgIH07XG5cbiAgICAvKipcbiAgICAgKiBJbnN0YW50aWF0ZXMgYWxsIHRoZSBwbHVnaW5zIG9mIHRoaXMgb2JqZWN0XG4gICAgICpcbiAgICAgKi9cbiAgICBvYmoucHJvdG90eXBlLmluaXRQbHVnaW5zID0gZnVuY3Rpb24gKClcbiAgICB7XG4gICAgICAgIHRoaXMucGx1Z2lucyA9IHRoaXMucGx1Z2lucyB8fCB7fTtcblxuICAgICAgICBmb3IgKHZhciBvIGluIG9iai5fX3BsdWdpbnMpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMucGx1Z2luc1tvXSA9IG5ldyAob2JqLl9fcGx1Z2luc1tvXSkodGhpcyk7XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgLyoqXG4gICAgICogUmVtb3ZlcyBhbGwgdGhlIHBsdWdpbnMgb2YgdGhpcyBvYmplY3RcbiAgICAgKlxuICAgICAqL1xuICAgIG9iai5wcm90b3R5cGUuZGVzdHJveVBsdWdpbnMgPSBmdW5jdGlvbiAoKVxuICAgIHtcbiAgICAgICAgZm9yICh2YXIgbyBpbiB0aGlzLnBsdWdpbnMpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMucGx1Z2luc1tvXS5kZXN0cm95KCk7XG4gICAgICAgICAgICB0aGlzLnBsdWdpbnNbb10gPSBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5wbHVnaW5zID0gbnVsbDtcbiAgICB9O1xufVxuXG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICAgIC8qKlxuICAgICAqIE1peGVzIGluIHRoZSBwcm9wZXJ0aWVzIG9mIHRoZSBwbHVnaW5UYXJnZXQgaW50byBhbm90aGVyIG9iamVjdFxuICAgICAqXG4gICAgICogQHBhcmFtIG9iamVjdCB7b2JqZWN0fSBUaGUgb2JqIHRvIG1peCBpbnRvXG4gICAgICovXG4gICAgbWl4aW46IGZ1bmN0aW9uIG1peGluKG9iailcbiAgICB7XG4gICAgICAgIHBsdWdpblRhcmdldChvYmopO1xuICAgIH1cbn07XG4iLCIvKmdsb2JhbCBjb25zb2xlICovXG52YXIgY29yZSA9IHJlcXVpcmUoJy4vY29yZScpLFxuICAgIG1lc2ggPSByZXF1aXJlKCcuL21lc2gnKSxcbiAgICBleHRyYXMgPSByZXF1aXJlKCcuL2V4dHJhcycpLFxuICAgIGZpbHRlcnMgPSByZXF1aXJlKCcuL2ZpbHRlcnMnKTtcblxuLyoqXG4gKiBAY2xhc3NcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBTcHJpdGVCYXRjaFxuICogQG1lbWJlcm9mIFBJWElcbiAqIEBzZWUgUElYSS5QYXJ0aWNsZUNvbnRhaW5lclxuICogQHRocm93cyB7UmVmZXJlbmNlRXJyb3J9IFNwcml0ZUJhdGNoIGRvZXMgbm90IGV4aXN0IGFueSBtb3JlLCBwbGVhc2UgdXNlIHRoZSBuZXcgUGFydGljbGVDb250YWluZXIgaW5zdGVhZC5cbiAqIEBkZXByZWNhdGVkIHNpbmNlIHZlcnNpb24gMy4wLjBcbiAqL1xuY29yZS5TcHJpdGVCYXRjaCA9IGZ1bmN0aW9uKClcbntcbiAgICB0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoJ1Nwcml0ZUJhdGNoIGRvZXMgbm90IGV4aXN0IGFueSBtb3JlLCBwbGVhc2UgdXNlIHRoZSBuZXcgUGFydGljbGVDb250YWluZXIgaW5zdGVhZC4nKTtcbn07XG5cbi8qKlxuICogQGNsYXNzXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgQXNzZXRMb2FkZXJcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAc2VlIFBJWEkubG9hZGVycy5Mb2FkZXJcbiAqIEB0aHJvd3Mge1JlZmVyZW5jZUVycm9yfSBUaGUgbG9hZGVyIHN5c3RlbSB3YXMgb3ZlcmhhdWxlZCBpbiBwaXhpIHYzLCBwbGVhc2Ugc2VlIHRoZSBuZXcgUElYSS5sb2FkZXJzLkxvYWRlciBjbGFzcy5cbiAqIEBkZXByZWNhdGVkIHNpbmNlIHZlcnNpb24gMy4wLjBcbiAqL1xuY29yZS5Bc3NldExvYWRlciA9IGZ1bmN0aW9uKClcbntcbiAgICB0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoJ1RoZSBsb2FkZXIgc3lzdGVtIHdhcyBvdmVyaGF1bGVkIGluIHBpeGkgdjMsIHBsZWFzZSBzZWUgdGhlIG5ldyBQSVhJLmxvYWRlcnMuTG9hZGVyIGNsYXNzLicpO1xufTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoY29yZSwge1xuXG4gICAgLyoqXG4gICAgICogQGNsYXNzXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAbmFtZSBTdGFnZVxuICAgICAqIEBtZW1iZXJvZiBQSVhJXG4gICAgICogQHNlZSBQSVhJLkNvbnRhaW5lclxuICAgICAqIEBkZXByZWNhdGVkIHNpbmNlIHZlcnNpb24gMy4wLjBcbiAgICAgKi9cbiAgICBTdGFnZToge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uKClcbiAgICAgICAge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKCdZb3UgZG8gbm90IG5lZWQgdG8gdXNlIGEgUElYSSBTdGFnZSBhbnkgbW9yZSwgeW91IGNhbiBzaW1wbHkgcmVuZGVyIGFueSBjb250YWluZXIuJyk7XG4gICAgICAgICAgICByZXR1cm4gY29yZS5Db250YWluZXI7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQGNsYXNzXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAbmFtZSBEaXNwbGF5T2JqZWN0Q29udGFpbmVyXG4gICAgICogQG1lbWJlcm9mIFBJWElcbiAgICAgKiBAc2VlIFBJWEkuQ29udGFpbmVyXG4gICAgICogQGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiAzLjAuMFxuICAgICAqL1xuICAgIERpc3BsYXlPYmplY3RDb250YWluZXI6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbigpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignRGlzcGxheU9iamVjdENvbnRhaW5lciBoYXMgYmVlbiBzaG9ydGVuZWQgdG8gQ29udGFpbmVyLCBwbGVhc2UgdXNlIENvbnRhaW5lciBmcm9tIG5vdyBvbi4nKTtcbiAgICAgICAgICAgIHJldHVybiBjb3JlLkNvbnRhaW5lcjtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBAY2xhc3NcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBuYW1lIFN0cmlwXG4gICAgICogQG1lbWJlcm9mIFBJWElcbiAgICAgKiBAc2VlIFBJWEkubWVzaC5NZXNoXG4gICAgICogQGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiAzLjAuMFxuICAgICAqL1xuICAgIFN0cmlwOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24oKVxuICAgICAgICB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ1RoZSBTdHJpcCBjbGFzcyBoYXMgYmVlbiByZW5hbWVkIHRvIE1lc2ggYW5kIG1vdmVkIHRvIG1lc2guTWVzaCwgcGxlYXNlIHVzZSBtZXNoLk1lc2ggZnJvbSBub3cgb24uJyk7XG4gICAgICAgICAgICByZXR1cm4gbWVzaC5NZXNoO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIEBjbGFzc1xuICAgICAqIEBwcml2YXRlXG4gICAgICogQG5hbWUgUm9wZVxuICAgICAqIEBtZW1iZXJvZiBQSVhJXG4gICAgICogQHNlZSBQSVhJLm1lc2guUm9wZVxuICAgICAqIEBkZXByZWNhdGVkIHNpbmNlIHZlcnNpb24gMy4wLjBcbiAgICAgKi9cbiAgICBSb3BlOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24oKVxuICAgICAgICB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ1RoZSBSb3BlIGNsYXNzIGhhcyBiZWVuIG1vdmVkIHRvIG1lc2guUm9wZSwgcGxlYXNlIHVzZSBtZXNoLlJvcGUgZnJvbSBub3cgb24uJyk7XG4gICAgICAgICAgICByZXR1cm4gbWVzaC5Sb3BlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIEBjbGFzc1xuICAgICAqIEBwcml2YXRlXG4gICAgICogQG5hbWUgTW92aWVDbGlwXG4gICAgICogQG1lbWJlcm9mIFBJWElcbiAgICAgKiBAc2VlIFBJWEkuZXh0cmFzLk1vdmllQ2xpcFxuICAgICAqIEBkZXByZWNhdGVkIHNpbmNlIHZlcnNpb24gMy4wLjBcbiAgICAgKi9cbiAgICBNb3ZpZUNsaXA6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbigpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignVGhlIE1vdmllQ2xpcCBjbGFzcyBoYXMgYmVlbiBtb3ZlZCB0byBleHRyYXMuTW92aWVDbGlwLCBwbGVhc2UgdXNlIGV4dHJhcy5Nb3ZpZUNsaXAgZnJvbSBub3cgb24uJyk7XG4gICAgICAgICAgICByZXR1cm4gZXh0cmFzLk1vdmllQ2xpcDtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBAY2xhc3NcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBuYW1lIFRpbGluZ1Nwcml0ZVxuICAgICAqIEBtZW1iZXJvZiBQSVhJXG4gICAgICogQHNlZSBQSVhJLmV4dHJhcy5UaWxpbmdTcHJpdGVcbiAgICAgKiBAZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDMuMC4wXG4gICAgICovXG4gICAgVGlsaW5nU3ByaXRlOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24oKVxuICAgICAgICB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ1RoZSBUaWxpbmdTcHJpdGUgY2xhc3MgaGFzIGJlZW4gbW92ZWQgdG8gZXh0cmFzLlRpbGluZ1Nwcml0ZSwgcGxlYXNlIHVzZSBleHRyYXMuVGlsaW5nU3ByaXRlIGZyb20gbm93IG9uLicpO1xuICAgICAgICAgICAgcmV0dXJuIGV4dHJhcy5UaWxpbmdTcHJpdGU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQGNsYXNzXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAbmFtZSBCaXRtYXBUZXh0XG4gICAgICogQG1lbWJlcm9mIFBJWElcbiAgICAgKiBAc2VlIFBJWEkuZXh0cmFzLkJpdG1hcFRleHRcbiAgICAgKiBAZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDMuMC4wXG4gICAgICovXG4gICAgQml0bWFwVGV4dDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uKClcbiAgICAgICAge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKCdUaGUgQml0bWFwVGV4dCBjbGFzcyBoYXMgYmVlbiBtb3ZlZCB0byBleHRyYXMuQml0bWFwVGV4dCwgcGxlYXNlIHVzZSBleHRyYXMuQml0bWFwVGV4dCBmcm9tIG5vdyBvbi4nKTtcbiAgICAgICAgICAgIHJldHVybiBleHRyYXMuQml0bWFwVGV4dDtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBAY2xhc3NcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBuYW1lIGJsZW5kTW9kZXNcbiAgICAgKiBAbWVtYmVyb2YgUElYSVxuICAgICAqIEBzZWUgUElYSS5CTEVORF9NT0RFU1xuICAgICAqIEBkZXByZWNhdGVkIHNpbmNlIHZlcnNpb24gMy4wLjBcbiAgICAgKi9cbiAgICBibGVuZE1vZGVzOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24oKVxuICAgICAgICB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ1RoZSBibGVuZE1vZGVzIGhhcyBiZWVuIG1vdmVkIHRvIEJMRU5EX01PREVTLCBwbGVhc2UgdXNlIEJMRU5EX01PREVTIGZyb20gbm93IG9uLicpO1xuICAgICAgICAgICAgcmV0dXJuIGNvcmUuQkxFTkRfTU9ERVM7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQGNsYXNzXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAbmFtZSBzY2FsZU1vZGVzXG4gICAgICogQG1lbWJlcm9mIFBJWElcbiAgICAgKiBAc2VlIFBJWEkuU0NBTEVfTU9ERVNcbiAgICAgKiBAZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDMuMC4wXG4gICAgICovXG4gICAgc2NhbGVNb2Rlczoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uKClcbiAgICAgICAge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKCdUaGUgc2NhbGVNb2RlcyBoYXMgYmVlbiBtb3ZlZCB0byBTQ0FMRV9NT0RFUywgcGxlYXNlIHVzZSBTQ0FMRV9NT0RFUyBmcm9tIG5vdyBvbi4nKTtcbiAgICAgICAgICAgIHJldHVybiBjb3JlLlNDQUxFX01PREVTO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIEBjbGFzc1xuICAgICAqIEBwcml2YXRlXG4gICAgICogQG5hbWUgQmFzZVRleHR1cmVDYWNoZVxuICAgICAqIEBtZW1iZXJvZiBQSVhJXG4gICAgICogQHNlZSBQSVhJLnV0aWxzLkJhc2VUZXh0dXJlQ2FjaGVcbiAgICAgKiBAZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDMuMC4wXG4gICAgICovXG4gICAgQmFzZVRleHR1cmVDYWNoZToge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignVGhlIEJhc2VUZXh0dXJlQ2FjaGUgY2xhc3MgaGFzIGJlZW4gbW92ZWQgdG8gdXRpbHMuQmFzZVRleHR1cmVDYWNoZSwgcGxlYXNlIHVzZSB1dGlscy5CYXNlVGV4dHVyZUNhY2hlIGZyb20gbm93IG9uLicpO1xuICAgICAgICAgICAgcmV0dXJuIGNvcmUudXRpbHMuQmFzZVRleHR1cmVDYWNoZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBAY2xhc3NcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBuYW1lIFRleHR1cmVDYWNoZVxuICAgICAqIEBtZW1iZXJvZiBQSVhJXG4gICAgICogQHNlZSBQSVhJLnV0aWxzLlRleHR1cmVDYWNoZVxuICAgICAqIEBkZXByZWNhdGVkIHNpbmNlIHZlcnNpb24gMy4wLjBcbiAgICAgKi9cbiAgICBUZXh0dXJlQ2FjaGU6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ1RoZSBUZXh0dXJlQ2FjaGUgY2xhc3MgaGFzIGJlZW4gbW92ZWQgdG8gdXRpbHMuVGV4dHVyZUNhY2hlLCBwbGVhc2UgdXNlIHV0aWxzLlRleHR1cmVDYWNoZSBmcm9tIG5vdyBvbi4nKTtcbiAgICAgICAgICAgIHJldHVybiBjb3JlLnV0aWxzLlRleHR1cmVDYWNoZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBAbmFtZXNwYWNlXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAbmFtZSBtYXRoXG4gICAgICogQG1lbWJlcm9mIFBJWElcbiAgICAgKiBAc2VlIFBJWElcbiAgICAgKiBAZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDMuMC42XG4gICAgICovXG4gICAgbWF0aDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignVGhlIG1hdGggbmFtZXNwYWNlIGlzIGRlcHJlY2F0ZWQsIHBsZWFzZSBhY2Nlc3MgbWVtYmVycyBhbHJlYWR5IGFjY2Vzc2libGUgb24gUElYSS4nKTtcbiAgICAgICAgICAgIHJldHVybiBjb3JlO1xuICAgICAgICB9XG4gICAgfVxufSk7XG5cbi8qKlxuICogQG1ldGhvZFxuICogQHByaXZhdGVcbiAqIEBuYW1lIFBJWEkuU3ByaXRlI3NldFRleHR1cmVcbiAqIEBzZWUgUElYSS5TcHJpdGUjdGV4dHVyZVxuICogQGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiAzLjAuMFxuICovXG5jb3JlLlNwcml0ZS5wcm90b3R5cGUuc2V0VGV4dHVyZSA9IGZ1bmN0aW9uKHRleHR1cmUpXG57XG4gICAgdGhpcy50ZXh0dXJlID0gdGV4dHVyZTtcbiAgICBjb25zb2xlLndhcm4oJ3NldFRleHR1cmUgaXMgbm93IGRlcHJlY2F0ZWQsIHBsZWFzZSB1c2UgdGhlIHRleHR1cmUgcHJvcGVydHksIGUuZyA6IHNwcml0ZS50ZXh0dXJlID0gdGV4dHVyZTsnKTtcbn07XG5cbi8qKlxuICogQG1ldGhvZFxuICogQG5hbWUgUElYSS5leHRyYXMuQml0bWFwVGV4dCNzZXRUZXh0XG4gKiBAc2VlIFBJWEkuZXh0cmFzLkJpdG1hcFRleHQjdGV4dFxuICogQGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiAzLjAuMFxuICovXG5leHRyYXMuQml0bWFwVGV4dC5wcm90b3R5cGUuc2V0VGV4dCA9IGZ1bmN0aW9uKHRleHQpXG57XG4gICAgdGhpcy50ZXh0ID0gdGV4dDtcbiAgICBjb25zb2xlLndhcm4oJ3NldFRleHQgaXMgbm93IGRlcHJlY2F0ZWQsIHBsZWFzZSB1c2UgdGhlIHRleHQgcHJvcGVydHksIGUuZyA6IG15Qml0bWFwVGV4dC50ZXh0ID0gXFwnbXkgdGV4dFxcJzsnKTtcbn07XG5cbi8qKlxuICogQG1ldGhvZFxuICogQG5hbWUgUElYSS5UZXh0I3NldFRleHRcbiAqIEBzZWUgUElYSS5UZXh0I3RleHRcbiAqIEBkZXByZWNhdGVkIHNpbmNlIHZlcnNpb24gMy4wLjBcbiAqL1xuY29yZS5UZXh0LnByb3RvdHlwZS5zZXRUZXh0ID0gZnVuY3Rpb24odGV4dClcbntcbiAgICB0aGlzLnRleHQgPSB0ZXh0O1xuICAgIGNvbnNvbGUud2Fybignc2V0VGV4dCBpcyBub3cgZGVwcmVjYXRlZCwgcGxlYXNlIHVzZSB0aGUgdGV4dCBwcm9wZXJ0eSwgZS5nIDogbXlUZXh0LnRleHQgPSBcXCdteSB0ZXh0XFwnOycpO1xufTtcblxuLyoqXG4gKiBAbWV0aG9kXG4gKiBAbmFtZSBQSVhJLlRleHQjc2V0U3R5bGVcbiAqIEBzZWUgUElYSS5UZXh0I3N0eWxlXG4gKiBAZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDMuMC4wXG4gKi9cbmNvcmUuVGV4dC5wcm90b3R5cGUuc2V0U3R5bGUgPSBmdW5jdGlvbihzdHlsZSlcbntcbiAgICB0aGlzLnN0eWxlID0gc3R5bGU7XG4gICAgY29uc29sZS53YXJuKCdzZXRTdHlsZSBpcyBub3cgZGVwcmVjYXRlZCwgcGxlYXNlIHVzZSB0aGUgc3R5bGUgcHJvcGVydHksIGUuZyA6IG15VGV4dC5zdHlsZSA9IHN0eWxlOycpO1xufTtcblxuLyoqXG4gKiBAbWV0aG9kXG4gKiBAbmFtZSBQSVhJLlRleHR1cmUjc2V0RnJhbWVcbiAqIEBzZWUgUElYSS5UZXh0dXJlI3NldEZyYW1lXG4gKiBAZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDMuMC4wXG4gKi9cbmNvcmUuVGV4dHVyZS5wcm90b3R5cGUuc2V0RnJhbWUgPSBmdW5jdGlvbihmcmFtZSlcbntcbiAgICB0aGlzLmZyYW1lID0gZnJhbWU7XG4gICAgY29uc29sZS53YXJuKCdzZXRGcmFtZSBpcyBub3cgZGVwcmVjYXRlZCwgcGxlYXNlIHVzZSB0aGUgZnJhbWUgcHJvcGVydHksIGUuZyA6IG15VGV4dHVyZS5mcmFtZSA9IGZyYW1lOycpO1xufTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoZmlsdGVycywge1xuXG4gICAgLyoqXG4gICAgICogQGNsYXNzXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAbmFtZSBQSVhJLmZpbHRlcnMuQWJzdHJhY3RGaWx0ZXJcbiAgICAgKiBAc2VlIFBJWEkuQWJzdHJhY3RGaWx0ZXJcbiAgICAgKiBAZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDMuMC42XG4gICAgICovXG4gICAgQWJzdHJhY3RGaWx0ZXI6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbigpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignZmlsdGVycy5BYnN0cmFjdEZpbHRlciBpcyBhbiB1bmRvY3VtZW50ZWQgYWxpYXMsIHBsZWFzZSB1c2UgQWJzdHJhY3RGaWx0ZXIgZnJvbSBub3cgb24uJyk7XG4gICAgICAgICAgICByZXR1cm4gY29yZS5BYnN0cmFjdEZpbHRlcjtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBAY2xhc3NcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBuYW1lIFBJWEkuZmlsdGVycy5GWEFBRmlsdGVyXG4gICAgICogQHNlZSBQSVhJLkZYQUFGaWx0ZXJcbiAgICAgKiBAZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDMuMC42XG4gICAgICovXG4gICAgRlhBQUZpbHRlcjoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uKClcbiAgICAgICAge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKCdmaWx0ZXJzLkZYQUFGaWx0ZXIgaXMgYW4gdW5kb2N1bWVudGVkIGFsaWFzLCBwbGVhc2UgdXNlIEZYQUFGaWx0ZXIgZnJvbSBub3cgb24uJyk7XG4gICAgICAgICAgICByZXR1cm4gY29yZS5GWEFBRmlsdGVyO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIEBjbGFzc1xuICAgICAqIEBwcml2YXRlXG4gICAgICogQG5hbWUgUElYSS5maWx0ZXJzLlNwcml0ZU1hc2tGaWx0ZXJcbiAgICAgKiBAc2VlIFBJWEkuU3ByaXRlTWFza0ZpbHRlclxuICAgICAqIEBkZXByZWNhdGVkIHNpbmNlIHZlcnNpb24gMy4wLjZcbiAgICAgKi9cbiAgICBTcHJpdGVNYXNrRmlsdGVyOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24oKVxuICAgICAgICB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ2ZpbHRlcnMuU3ByaXRlTWFza0ZpbHRlciBpcyBhbiB1bmRvY3VtZW50ZWQgYWxpYXMsIHBsZWFzZSB1c2UgU3ByaXRlTWFza0ZpbHRlciBmcm9tIG5vdyBvbi4nKTtcbiAgICAgICAgICAgIHJldHVybiBjb3JlLlNwcml0ZU1hc2tGaWx0ZXI7XG4gICAgICAgIH1cbiAgICB9XG59KTtcblxuLyoqXG4gKiBAbWV0aG9kXG4gKiBAbmFtZSBQSVhJLnV0aWxzLnV1aWRcbiAqIEBzZWUgUElYSS51dGlscy51aWRcbiAqIEBkZXByZWNhdGVkIHNpbmNlIHZlcnNpb24gMy4wLjZcbiAqL1xuY29yZS51dGlscy51dWlkID0gZnVuY3Rpb24gKClcbntcbiAgICBjb25zb2xlLndhcm4oJ3V0aWxzLnV1aWQoKSBpcyBkZXByZWNhdGVkLCBwbGVhc2UgdXNlIHV0aWxzLnVpZCgpIGZyb20gbm93IG9uLicpO1xuICAgIHJldHVybiBjb3JlLnV0aWxzLnVpZCgpO1xufTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vY29yZScpO1xuXG4vKipcbiAqIEEgQml0bWFwVGV4dCBvYmplY3Qgd2lsbCBjcmVhdGUgYSBsaW5lIG9yIG11bHRpcGxlIGxpbmVzIG9mIHRleHQgdXNpbmcgYml0bWFwIGZvbnQuIFRvXG4gKiBzcGxpdCBhIGxpbmUgeW91IGNhbiB1c2UgJ1xcbicsICdcXHInIG9yICdcXHJcXG4nIGluIHlvdXIgc3RyaW5nLiBZb3UgY2FuIGdlbmVyYXRlIHRoZSBmbnQgZmlsZXMgdXNpbmc6XG4gKlxuICogQSBCaXRtYXBUZXh0IGNhbiBvbmx5IGJlIGNyZWF0ZWQgd2hlbiB0aGUgZm9udCBpcyBsb2FkZWRcbiAqXG4gKiBgYGBqc1xuICogLy8gaW4gdGhpcyBjYXNlIHRoZSBmb250IGlzIGluIGEgZmlsZSBjYWxsZWQgJ2Rlc3lyZWwuZm50J1xuICogdmFyIGJpdG1hcFRleHQgPSBuZXcgUElYSS5leHRyYXMuQml0bWFwVGV4dChcInRleHQgdXNpbmcgYSBmYW5jeSBmb250IVwiLCB7Zm9udDogXCIzNXB4IERlc3lyZWxcIiwgYWxpZ246IFwicmlnaHRcIn0pO1xuICogYGBgXG4gKlxuICpcbiAqIGh0dHA6Ly93d3cuYW5nZWxjb2RlLmNvbS9wcm9kdWN0cy9ibWZvbnQvIGZvciB3aW5kb3dzIG9yXG4gKiBodHRwOi8vd3d3LmJtZ2x5cGguY29tLyBmb3IgbWFjLlxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5Db250YWluZXJcbiAqIEBtZW1iZXJvZiBQSVhJLmV4dHJhc1xuICogQHBhcmFtIHRleHQge3N0cmluZ30gVGhlIGNvcHkgdGhhdCB5b3Ugd291bGQgbGlrZSB0aGUgdGV4dCB0byBkaXNwbGF5XG4gKiBAcGFyYW0gc3R5bGUge29iamVjdH0gVGhlIHN0eWxlIHBhcmFtZXRlcnNcbiAqIEBwYXJhbSBzdHlsZS5mb250IHtzdHJpbmd8b2JqZWN0fSBUaGUgZm9udCBkZXNjcmlwdG9yIGZvciB0aGUgb2JqZWN0LCBjYW4gYmUgcGFzc2VkIGFzIGEgc3RyaW5nIG9mIGZvcm1cbiAqICAgICAgXCIyNHB4IEZvbnROYW1lXCIgb3IgXCJGb250TmFtZVwiIG9yIGFzIGFuIG9iamVjdCB3aXRoIGV4cGxpY2l0IG5hbWUvc2l6ZSBwcm9wZXJ0aWVzLlxuICogQHBhcmFtIFtzdHlsZS5mb250Lm5hbWVdIHtzdHJpbmd9IFRoZSBiaXRtYXAgZm9udCBpZFxuICogQHBhcmFtIFtzdHlsZS5mb250LnNpemVdIHtudW1iZXJ9IFRoZSBzaXplIG9mIHRoZSBmb250IGluIHBpeGVscywgZS5nLiAyNFxuICogQHBhcmFtIFtzdHlsZS5hbGlnbj0nbGVmdCddIHtzdHJpbmd9IEFsaWdubWVudCBmb3IgbXVsdGlsaW5lIHRleHQgKCdsZWZ0JywgJ2NlbnRlcicgb3IgJ3JpZ2h0JyksIGRvZXMgbm90IGFmZmVjdFxuICogICAgICBzaW5nbGUgbGluZSB0ZXh0XG4gKiBAcGFyYW0gW3N0eWxlLnRpbnQ9MHhGRkZGRkZdIHtudW1iZXJ9IFRoZSB0aW50IGNvbG9yXG4gKi9cbmZ1bmN0aW9uIEJpdG1hcFRleHQodGV4dCwgc3R5bGUpXG57XG4gICAgY29yZS5Db250YWluZXIuY2FsbCh0aGlzKTtcblxuICAgIHN0eWxlID0gc3R5bGUgfHwge307XG5cbiAgICAvKipcbiAgICAgKiBUaGUgd2lkdGggb2YgdGhlIG92ZXJhbGwgdGV4dCwgZGlmZmVyZW50IGZyb20gZm9udFNpemUsXG4gICAgICogd2hpY2ggaXMgZGVmaW5lZCBpbiB0aGUgc3R5bGUgb2JqZWN0XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQHJlYWRPbmx5XG4gICAgICovXG4gICAgdGhpcy50ZXh0V2lkdGggPSAwO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGhlaWdodCBvZiB0aGUgb3ZlcmFsbCB0ZXh0LCBkaWZmZXJlbnQgZnJvbSBmb250U2l6ZSxcbiAgICAgKiB3aGljaCBpcyBkZWZpbmVkIGluIHRoZSBzdHlsZSBvYmplY3RcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAcmVhZE9ubHlcbiAgICAgKi9cbiAgICB0aGlzLnRleHRIZWlnaHQgPSAwO1xuXG4gICAgLyoqXG4gICAgICogUHJpdmF0ZSB0cmFja2VyIGZvciB0aGUgbGV0dGVyIHNwcml0ZSBwb29sLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5TcHJpdGVbXX1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX2dseXBocyA9IFtdO1xuXG4gICAgLyoqXG4gICAgICogUHJpdmF0ZSB0cmFja2VyIGZvciB0aGUgY3VycmVudCBzdHlsZS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge29iamVjdH1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX2ZvbnQgPSB7XG4gICAgICAgIHRpbnQ6IHN0eWxlLnRpbnQgIT09IHVuZGVmaW5lZCA/IHN0eWxlLnRpbnQgOiAweEZGRkZGRixcbiAgICAgICAgYWxpZ246IHN0eWxlLmFsaWduIHx8ICdsZWZ0JyxcbiAgICAgICAgbmFtZTogbnVsbCxcbiAgICAgICAgc2l6ZTogMFxuICAgIH07XG5cbiAgICAvKipcbiAgICAgKiBQcml2YXRlIHRyYWNrZXIgZm9yIHRoZSBjdXJyZW50IGZvbnQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtvYmplY3R9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLmZvbnQgPSBzdHlsZS5mb250OyAvLyBydW4gZm9udCBzZXR0ZXJcblxuICAgIC8qKlxuICAgICAqIFByaXZhdGUgdHJhY2tlciBmb3IgdGhlIGN1cnJlbnQgdGV4dC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge3N0cmluZ31cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX3RleHQgPSB0ZXh0O1xuXG4gICAgLyoqXG4gICAgICogVGhlIG1heCB3aWR0aCBvZiB0aGlzIGJpdG1hcCB0ZXh0IGluIHBpeGVscy4gSWYgdGhlIHRleHQgcHJvdmlkZWQgaXMgbG9uZ2VyIHRoYW4gdGhlIHZhbHVlIHByb3ZpZGVkLCBsaW5lIGJyZWFrcyB3aWxsIGJlIGF1dG9tYXRpY2FsbHkgaW5zZXJ0ZWQgaW4gdGhlIGxhc3Qgd2hpdGVzcGFjZS5cbiAgICAgKiBEaXNhYmxlIGJ5IHNldHRpbmcgdmFsdWUgdG8gMFxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMubWF4V2lkdGggPSAwO1xuXG4gICAgLyoqXG4gICAgICogVGhlIG1heCBsaW5lIGhlaWdodC4gVGhpcyBpcyB1c2VmdWwgd2hlbiB0cnlpbmcgdG8gdXNlIHRoZSB0b3RhbCBoZWlnaHQgb2YgdGhlIFRleHQsIGllOiB3aGVuIHRyeWluZyB0byB2ZXJ0aWNhbGx5IGFsaWduLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMubWF4TGluZUhlaWdodCA9IDA7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgZGlydHkgc3RhdGUgb2YgdGhpcyBvYmplY3QuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqL1xuICAgIHRoaXMuZGlydHkgPSBmYWxzZTtcblxuICAgIHRoaXMudXBkYXRlVGV4dCgpO1xufVxuXG4vLyBjb25zdHJ1Y3RvclxuQml0bWFwVGV4dC5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuQ29udGFpbmVyLnByb3RvdHlwZSk7XG5CaXRtYXBUZXh0LnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IEJpdG1hcFRleHQ7XG5tb2R1bGUuZXhwb3J0cyA9IEJpdG1hcFRleHQ7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKEJpdG1hcFRleHQucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogVGhlIHRpbnQgb2YgdGhlIEJpdG1hcFRleHQgb2JqZWN0XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZXh0cmFzLkJpdG1hcFRleHQjXG4gICAgICovXG4gICAgdGludDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9mb250LnRpbnQ7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLl9mb250LnRpbnQgPSAodHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJyAmJiB2YWx1ZSA+PSAwKSA/IHZhbHVlIDogMHhGRkZGRkY7XG5cbiAgICAgICAgICAgIHRoaXMuZGlydHkgPSB0cnVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFRoZSBhbGlnbm1lbnQgb2YgdGhlIEJpdG1hcFRleHQgb2JqZWN0XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtzdHJpbmd9XG4gICAgICogQGRlZmF1bHQgJ2xlZnQnXG4gICAgICogQG1lbWJlcm9mIFBJWEkuZXh0cmFzLkJpdG1hcFRleHQjXG4gICAgICovXG4gICAgYWxpZ246IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fZm9udC5hbGlnbjtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuX2ZvbnQuYWxpZ24gPSB2YWx1ZSB8fCAnbGVmdCc7XG5cbiAgICAgICAgICAgIHRoaXMuZGlydHkgPSB0cnVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFRoZSBmb250IGRlc2NyaXB0b3Igb2YgdGhlIEJpdG1hcFRleHQgb2JqZWN0XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtGb250fVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmV4dHJhcy5CaXRtYXBUZXh0I1xuICAgICAqL1xuICAgIGZvbnQ6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fZm9udDtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGlmICghdmFsdWUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICAgICAgdmFsdWUgPSB2YWx1ZS5zcGxpdCgnICcpO1xuXG4gICAgICAgICAgICAgICAgdGhpcy5fZm9udC5uYW1lID0gdmFsdWUubGVuZ3RoID09PSAxID8gdmFsdWVbMF0gOiB2YWx1ZS5zbGljZSgxKS5qb2luKCcgJyk7XG4gICAgICAgICAgICAgICAgdGhpcy5fZm9udC5zaXplID0gdmFsdWUubGVuZ3RoID49IDIgPyBwYXJzZUludCh2YWx1ZVswXSwgMTApIDogQml0bWFwVGV4dC5mb250c1t0aGlzLl9mb250Lm5hbWVdLnNpemU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9mb250Lm5hbWUgPSB2YWx1ZS5uYW1lO1xuICAgICAgICAgICAgICAgIHRoaXMuX2ZvbnQuc2l6ZSA9IHR5cGVvZiB2YWx1ZS5zaXplID09PSAnbnVtYmVyJyA/IHZhbHVlLnNpemUgOiBwYXJzZUludCh2YWx1ZS5zaXplLCAxMCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuZGlydHkgPSB0cnVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFRoZSB0ZXh0IG9mIHRoZSBCaXRtYXBUZXh0IG9iamVjdFxuICAgICAqXG4gICAgICogQG1lbWJlciB7c3RyaW5nfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmV4dHJhcy5CaXRtYXBUZXh0I1xuICAgICAqL1xuICAgIHRleHQ6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fdGV4dDtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHZhbHVlID0gdmFsdWUudG9TdHJpbmcoKSB8fCAnICc7XG4gICAgICAgICAgICBpZiAodGhpcy5fdGV4dCA9PT0gdmFsdWUpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5fdGV4dCA9IHZhbHVlO1xuICAgICAgICAgICAgdGhpcy5kaXJ0eSA9IHRydWU7XG4gICAgICAgIH1cbiAgICB9XG59KTtcblxuLyoqXG4gKiBSZW5kZXJzIHRleHQgYW5kIHVwZGF0ZXMgaXQgd2hlbiBuZWVkZWRcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5CaXRtYXBUZXh0LnByb3RvdHlwZS51cGRhdGVUZXh0ID0gZnVuY3Rpb24gKClcbntcbiAgICB2YXIgZGF0YSA9IEJpdG1hcFRleHQuZm9udHNbdGhpcy5fZm9udC5uYW1lXTtcbiAgICB2YXIgcG9zID0gbmV3IGNvcmUuUG9pbnQoKTtcbiAgICB2YXIgcHJldkNoYXJDb2RlID0gbnVsbDtcbiAgICB2YXIgY2hhcnMgPSBbXTtcbiAgICB2YXIgbGFzdExpbmVXaWR0aCA9IDA7XG4gICAgdmFyIG1heExpbmVXaWR0aCA9IDA7XG4gICAgdmFyIGxpbmVXaWR0aHMgPSBbXTtcbiAgICB2YXIgbGluZSA9IDA7XG4gICAgdmFyIHNjYWxlID0gdGhpcy5fZm9udC5zaXplIC8gZGF0YS5zaXplO1xuICAgIHZhciBsYXN0U3BhY2UgPSAtMTtcbiAgICB2YXIgbWF4TGluZUhlaWdodCA9IDA7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMudGV4dC5sZW5ndGg7IGkrKylcbiAgICB7XG4gICAgICAgIHZhciBjaGFyQ29kZSA9IHRoaXMudGV4dC5jaGFyQ29kZUF0KGkpO1xuICAgICAgICBsYXN0U3BhY2UgPSAvKFxccykvLnRlc3QodGhpcy50ZXh0LmNoYXJBdChpKSkgPyBpIDogbGFzdFNwYWNlO1xuXG4gICAgICAgIGlmICgvKD86XFxyXFxufFxccnxcXG4pLy50ZXN0KHRoaXMudGV4dC5jaGFyQXQoaSkpKVxuICAgICAgICB7XG4gICAgICAgICAgICBsaW5lV2lkdGhzLnB1c2gobGFzdExpbmVXaWR0aCk7XG4gICAgICAgICAgICBtYXhMaW5lV2lkdGggPSBNYXRoLm1heChtYXhMaW5lV2lkdGgsIGxhc3RMaW5lV2lkdGgpO1xuICAgICAgICAgICAgbGluZSsrO1xuXG4gICAgICAgICAgICBwb3MueCA9IDA7XG4gICAgICAgICAgICBwb3MueSArPSBkYXRhLmxpbmVIZWlnaHQ7XG4gICAgICAgICAgICBwcmV2Q2hhckNvZGUgPSBudWxsO1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAobGFzdFNwYWNlICE9PSAtMSAmJiB0aGlzLm1heFdpZHRoID4gMCAmJiBwb3MueCAqIHNjYWxlID4gdGhpcy5tYXhXaWR0aClcbiAgICAgICAge1xuICAgICAgICAgICAgY29yZS51dGlscy5yZW1vdmVJdGVtcyhjaGFycywgbGFzdFNwYWNlLCBpIC0gbGFzdFNwYWNlKTtcbiAgICAgICAgICAgIGkgPSBsYXN0U3BhY2U7XG4gICAgICAgICAgICBsYXN0U3BhY2UgPSAtMTtcblxuICAgICAgICAgICAgbGluZVdpZHRocy5wdXNoKGxhc3RMaW5lV2lkdGgpO1xuICAgICAgICAgICAgbWF4TGluZVdpZHRoID0gTWF0aC5tYXgobWF4TGluZVdpZHRoLCBsYXN0TGluZVdpZHRoKTtcbiAgICAgICAgICAgIGxpbmUrKztcblxuICAgICAgICAgICAgcG9zLnggPSAwO1xuICAgICAgICAgICAgcG9zLnkgKz0gZGF0YS5saW5lSGVpZ2h0O1xuICAgICAgICAgICAgcHJldkNoYXJDb2RlID0gbnVsbDtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGNoYXJEYXRhID0gZGF0YS5jaGFyc1tjaGFyQ29kZV07XG5cbiAgICAgICAgaWYgKCFjaGFyRGF0YSlcbiAgICAgICAge1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAocHJldkNoYXJDb2RlICYmIGNoYXJEYXRhLmtlcm5pbmdbcHJldkNoYXJDb2RlXSlcbiAgICAgICAge1xuICAgICAgICAgICAgcG9zLnggKz0gY2hhckRhdGEua2VybmluZ1twcmV2Q2hhckNvZGVdO1xuICAgICAgICB9XG5cbiAgICAgICAgY2hhcnMucHVzaCh7dGV4dHVyZTpjaGFyRGF0YS50ZXh0dXJlLCBsaW5lOiBsaW5lLCBjaGFyQ29kZTogY2hhckNvZGUsIHBvc2l0aW9uOiBuZXcgY29yZS5Qb2ludChwb3MueCArIGNoYXJEYXRhLnhPZmZzZXQsIHBvcy55ICsgY2hhckRhdGEueU9mZnNldCl9KTtcbiAgICAgICAgbGFzdExpbmVXaWR0aCA9IHBvcy54ICsgKGNoYXJEYXRhLnRleHR1cmUud2lkdGggKyBjaGFyRGF0YS54T2Zmc2V0KTtcbiAgICAgICAgcG9zLnggKz0gY2hhckRhdGEueEFkdmFuY2U7XG4gICAgICAgIG1heExpbmVIZWlnaHQgPSBNYXRoLm1heChtYXhMaW5lSGVpZ2h0LCAoY2hhckRhdGEueU9mZnNldCArIGNoYXJEYXRhLnRleHR1cmUuaGVpZ2h0KSk7XG4gICAgICAgIHByZXZDaGFyQ29kZSA9IGNoYXJDb2RlO1xuICAgIH1cblxuICAgIGxpbmVXaWR0aHMucHVzaChsYXN0TGluZVdpZHRoKTtcbiAgICBtYXhMaW5lV2lkdGggPSBNYXRoLm1heChtYXhMaW5lV2lkdGgsIGxhc3RMaW5lV2lkdGgpO1xuXG4gICAgdmFyIGxpbmVBbGlnbk9mZnNldHMgPSBbXTtcblxuICAgIGZvciAoaSA9IDA7IGkgPD0gbGluZTsgaSsrKVxuICAgIHtcbiAgICAgICAgdmFyIGFsaWduT2Zmc2V0ID0gMDtcblxuICAgICAgICBpZiAodGhpcy5fZm9udC5hbGlnbiA9PT0gJ3JpZ2h0JylcbiAgICAgICAge1xuICAgICAgICAgICAgYWxpZ25PZmZzZXQgPSBtYXhMaW5lV2lkdGggLSBsaW5lV2lkdGhzW2ldO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHRoaXMuX2ZvbnQuYWxpZ24gPT09ICdjZW50ZXInKVxuICAgICAgICB7XG4gICAgICAgICAgICBhbGlnbk9mZnNldCA9IChtYXhMaW5lV2lkdGggLSBsaW5lV2lkdGhzW2ldKSAvIDI7XG4gICAgICAgIH1cblxuICAgICAgICBsaW5lQWxpZ25PZmZzZXRzLnB1c2goYWxpZ25PZmZzZXQpO1xuICAgIH1cblxuICAgIHZhciBsZW5DaGFycyA9IGNoYXJzLmxlbmd0aDtcbiAgICB2YXIgdGludCA9IHRoaXMudGludDtcblxuICAgIGZvciAoaSA9IDA7IGkgPCBsZW5DaGFyczsgaSsrKVxuICAgIHtcbiAgICAgICAgdmFyIGMgPSB0aGlzLl9nbHlwaHNbaV07IC8vIGdldCB0aGUgbmV4dCBnbHlwaCBzcHJpdGVcblxuICAgICAgICBpZiAoYylcbiAgICAgICAge1xuICAgICAgICAgICAgYy50ZXh0dXJlID0gY2hhcnNbaV0udGV4dHVyZTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgIHtcbiAgICAgICAgICAgIGMgPSBuZXcgY29yZS5TcHJpdGUoY2hhcnNbaV0udGV4dHVyZSk7XG4gICAgICAgICAgICB0aGlzLl9nbHlwaHMucHVzaChjKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGMucG9zaXRpb24ueCA9IChjaGFyc1tpXS5wb3NpdGlvbi54ICsgbGluZUFsaWduT2Zmc2V0c1tjaGFyc1tpXS5saW5lXSkgKiBzY2FsZTtcbiAgICAgICAgYy5wb3NpdGlvbi55ID0gY2hhcnNbaV0ucG9zaXRpb24ueSAqIHNjYWxlO1xuICAgICAgICBjLnNjYWxlLnggPSBjLnNjYWxlLnkgPSBzY2FsZTtcbiAgICAgICAgYy50aW50ID0gdGludDtcblxuICAgICAgICBpZiAoIWMucGFyZW50KVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmFkZENoaWxkKGMpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gcmVtb3ZlIHVubmVjZXNzYXJ5IGNoaWxkcmVuLlxuICAgIGZvciAoaSA9IGxlbkNoYXJzOyBpIDwgdGhpcy5fZ2x5cGhzLmxlbmd0aDsgKytpKVxuICAgIHtcbiAgICAgICAgdGhpcy5yZW1vdmVDaGlsZCh0aGlzLl9nbHlwaHNbaV0pO1xuICAgIH1cblxuICAgIHRoaXMudGV4dFdpZHRoID0gbWF4TGluZVdpZHRoICogc2NhbGU7XG4gICAgdGhpcy50ZXh0SGVpZ2h0ID0gKHBvcy55ICsgZGF0YS5saW5lSGVpZ2h0KSAqIHNjYWxlO1xuICAgIHRoaXMubWF4TGluZUhlaWdodCA9IG1heExpbmVIZWlnaHQgKiBzY2FsZTtcbn07XG5cbi8qKlxuICogVXBkYXRlcyB0aGUgdHJhbnNmb3JtIG9mIHRoaXMgb2JqZWN0XG4gKlxuICogQHByaXZhdGVcbiAqL1xuQml0bWFwVGV4dC5wcm90b3R5cGUudXBkYXRlVHJhbnNmb3JtID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLnZhbGlkYXRlKCk7XG4gICAgdGhpcy5jb250YWluZXJVcGRhdGVUcmFuc2Zvcm0oKTtcbn07XG5cbi8qKlxuICogVmFsaWRhdGVzIHRleHQgYmVmb3JlIGNhbGxpbmcgcGFyZW50J3MgZ2V0TG9jYWxCb3VuZHNcbiAqXG4gKiBAcmV0dXJuIHtQSVhJLlJlY3RhbmdsZX0gVGhlIHJlY3Rhbmd1bGFyIGJvdW5kaW5nIGFyZWFcbiAqL1xuXG5CaXRtYXBUZXh0LnByb3RvdHlwZS5nZXRMb2NhbEJvdW5kcyA9IGZ1bmN0aW9uKClcbntcbiAgICB0aGlzLnZhbGlkYXRlKCk7XG4gICAgcmV0dXJuIGNvcmUuQ29udGFpbmVyLnByb3RvdHlwZS5nZXRMb2NhbEJvdW5kcy5jYWxsKHRoaXMpO1xufTtcblxuLyoqXG4gKiBVcGRhdGVzIHRleHQgd2hlbiBuZWVkZWRcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5CaXRtYXBUZXh0LnByb3RvdHlwZS52YWxpZGF0ZSA9IGZ1bmN0aW9uKClcbntcbiAgICBpZiAodGhpcy5kaXJ0eSlcbiAgICB7XG4gICAgICAgIHRoaXMudXBkYXRlVGV4dCgpO1xuICAgICAgICB0aGlzLmRpcnR5ID0gZmFsc2U7XG4gICAgfVxufTtcblxuQml0bWFwVGV4dC5mb250cyA9IHt9O1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi9jb3JlJyk7XG5cbi8qKlxuICogQSBNb3ZpZUNsaXAgaXMgYSBzaW1wbGUgd2F5IHRvIGRpc3BsYXkgYW4gYW5pbWF0aW9uIGRlcGljdGVkIGJ5IGEgbGlzdCBvZiB0ZXh0dXJlcy5cbiAqXG4gKiBgYGBqc1xuICogdmFyIGFsaWVuSW1hZ2VzID0gW1wiaW1hZ2Vfc2VxdWVuY2VfMDEucG5nXCIsXCJpbWFnZV9zZXF1ZW5jZV8wMi5wbmdcIixcImltYWdlX3NlcXVlbmNlXzAzLnBuZ1wiLFwiaW1hZ2Vfc2VxdWVuY2VfMDQucG5nXCJdO1xuICogdmFyIHRleHR1cmVBcnJheSA9IFtdO1xuICpcbiAqIGZvciAodmFyIGk9MDsgaSA8IDQ7IGkrKylcbiAqIHtcbiAqICAgICAgdmFyIHRleHR1cmUgPSBQSVhJLlRleHR1cmUuZnJvbUltYWdlKGFsaWVuSW1hZ2VzW2ldKTtcbiAqICAgICAgdGV4dHVyZUFycmF5LnB1c2godGV4dHVyZSk7XG4gKiB9O1xuICpcbiAqIHZhciBtYyA9IG5ldyBQSVhJLk1vdmllQ2xpcCh0ZXh0dXJlQXJyYXkpO1xuICogYGBgXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLlNwcml0ZVxuICogQG1lbWJlcm9mIFBJWEkuZXh0cmFzXG4gKiBAcGFyYW0gdGV4dHVyZXMge1BJWEkuVGV4dHVyZVtdfE9iamVjdFtdfSBhbiBhcnJheSBvZiB7QGxpbmsgUElYSS5UZXh0dXJlfSBvciBmcmFtZSBvYmplY3RzIHRoYXQgbWFrZSB1cCB0aGUgYW5pbWF0aW9uXG4gKiBAcGFyYW0gdGV4dHVyZXNbXS50ZXh0dXJlIHtQSVhJLlRleHR1cmV9IHRoZSB7QGxpbmsgUElYSS5UZXh0dXJlfSBvZiB0aGUgZnJhbWVcbiAqIEBwYXJhbSB0ZXh0dXJlc1tdLnRpbWUge251bWJlcn0gdGhlIGR1cmF0aW9uIG9mIHRoZSBmcmFtZSBpbiBtc1xuICovXG5mdW5jdGlvbiBNb3ZpZUNsaXAodGV4dHVyZXMpXG57XG4gICAgY29yZS5TcHJpdGUuY2FsbCh0aGlzLCB0ZXh0dXJlc1swXSBpbnN0YW5jZW9mIGNvcmUuVGV4dHVyZSA/IHRleHR1cmVzWzBdIDogdGV4dHVyZXNbMF0udGV4dHVyZSk7XG5cbiAgICAvKipcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX3RleHR1cmVzID0gbnVsbDtcblxuICAgIC8qKlxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fZHVyYXRpb25zID0gbnVsbDtcblxuICAgIHRoaXMudGV4dHVyZXMgPSB0ZXh0dXJlcztcblxuICAgIC8qKlxuICAgICAqIFRoZSBzcGVlZCB0aGF0IHRoZSBNb3ZpZUNsaXAgd2lsbCBwbGF5IGF0LiBIaWdoZXIgaXMgZmFzdGVyLCBsb3dlciBpcyBzbG93ZXJcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAxXG4gICAgICovXG4gICAgdGhpcy5hbmltYXRpb25TcGVlZCA9IDE7XG5cbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIG9yIG5vdCB0aGUgbW92aWUgY2xpcCByZXBlYXRzIGFmdGVyIHBsYXlpbmcuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqIEBkZWZhdWx0IHRydWVcbiAgICAgKi9cbiAgICB0aGlzLmxvb3AgPSB0cnVlO1xuXG4gICAgLyoqXG4gICAgICogRnVuY3Rpb24gdG8gY2FsbCB3aGVuIGEgTW92aWVDbGlwIGZpbmlzaGVzIHBsYXlpbmdcbiAgICAgKlxuICAgICAqIEBtZXRob2RcbiAgICAgKiBAbWVtYmVyb2YgUElYSS5leHRyYXMuTW92aWVDbGlwI1xuICAgICAqL1xuICAgIHRoaXMub25Db21wbGV0ZSA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBFbGFwc2VkIHRpbWUgc2luY2UgYW5pbWF0aW9uIGhhcyBiZWVuIHN0YXJ0ZWQsIHVzZWQgaW50ZXJuYWxseSB0byBkaXNwbGF5IGN1cnJlbnQgdGV4dHVyZVxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fY3VycmVudFRpbWUgPSAwO1xuXG4gICAgLyoqXG4gICAgICogSW5kaWNhdGVzIGlmIHRoZSBNb3ZpZUNsaXAgaXMgY3VycmVudGx5IHBsYXlpbmdcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICogQHJlYWRvbmx5XG4gICAgICovXG4gICAgdGhpcy5wbGF5aW5nID0gZmFsc2U7XG59XG5cbi8vIGNvbnN0cnVjdG9yXG5Nb3ZpZUNsaXAucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShjb3JlLlNwcml0ZS5wcm90b3R5cGUpO1xuTW92aWVDbGlwLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IE1vdmllQ2xpcDtcbm1vZHVsZS5leHBvcnRzID0gTW92aWVDbGlwO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhNb3ZpZUNsaXAucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogdG90YWxGcmFtZXMgaXMgdGhlIHRvdGFsIG51bWJlciBvZiBmcmFtZXMgaW4gdGhlIE1vdmllQ2xpcC4gVGhpcyBpcyB0aGUgc2FtZSBhcyBudW1iZXIgb2YgdGV4dHVyZXNcbiAgICAgKiBhc3NpZ25lZCB0byB0aGUgTW92aWVDbGlwLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmV4dHJhcy5Nb3ZpZUNsaXAjXG4gICAgICogQGRlZmF1bHQgMFxuICAgICAqIEByZWFkb25seVxuICAgICAqL1xuICAgIHRvdGFsRnJhbWVzOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24oKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fdGV4dHVyZXMubGVuZ3RoO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFRoZSBhcnJheSBvZiB0ZXh0dXJlcyB1c2VkIGZvciB0aGlzIE1vdmllQ2xpcFxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5UZXh0dXJlW119XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZXh0cmFzLk1vdmllQ2xpcCNcbiAgICAgKlxuICAgICAqL1xuICAgIHRleHR1cmVzOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3RleHR1cmVzO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgaWYodmFsdWVbMF0gaW5zdGFuY2VvZiBjb3JlLlRleHR1cmUpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdGhpcy5fdGV4dHVyZXMgPSB2YWx1ZTtcbiAgICAgICAgICAgICAgICB0aGlzLl9kdXJhdGlvbnMgPSBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHRoaXMuX3RleHR1cmVzID0gW107XG4gICAgICAgICAgICAgICAgdGhpcy5fZHVyYXRpb25zID0gW107XG4gICAgICAgICAgICAgICAgZm9yKHZhciBpID0gMDsgaSA8IHZhbHVlLmxlbmd0aDsgaSsrKVxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fdGV4dHVyZXMucHVzaCh2YWx1ZVtpXS50ZXh0dXJlKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fZHVyYXRpb25zLnB1c2godmFsdWVbaV0udGltZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICogVGhlIE1vdmllQ2xpcHMgY3VycmVudCBmcmFtZSBpbmRleFxuICAgICpcbiAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAqIEBtZW1iZXJvZiBQSVhJLmV4dHJhcy5Nb3ZpZUNsaXAjXG4gICAgKiBAcmVhZG9ubHlcbiAgICAqL1xuICAgIGN1cnJlbnRGcmFtZToge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHZhciBjdXJyZW50RnJhbWUgPSBNYXRoLmZsb29yKHRoaXMuX2N1cnJlbnRUaW1lKSAlIHRoaXMuX3RleHR1cmVzLmxlbmd0aDtcbiAgICAgICAgICAgIGlmIChjdXJyZW50RnJhbWUgPCAwKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGN1cnJlbnRGcmFtZSArPSB0aGlzLl90ZXh0dXJlcy5sZW5ndGg7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gY3VycmVudEZyYW1lO1xuICAgICAgICB9XG4gICAgfVxuXG59KTtcblxuLyoqXG4gKiBTdG9wcyB0aGUgTW92aWVDbGlwXG4gKlxuICovXG5Nb3ZpZUNsaXAucHJvdG90eXBlLnN0b3AgPSBmdW5jdGlvbiAoKVxue1xuICAgIGlmKCF0aGlzLnBsYXlpbmcpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5wbGF5aW5nID0gZmFsc2U7XG4gICAgY29yZS50aWNrZXIuc2hhcmVkLnJlbW92ZSh0aGlzLnVwZGF0ZSwgdGhpcyk7XG59O1xuXG4vKipcbiAqIFBsYXlzIHRoZSBNb3ZpZUNsaXBcbiAqXG4gKi9cbk1vdmllQ2xpcC5wcm90b3R5cGUucGxheSA9IGZ1bmN0aW9uICgpXG57XG4gICAgaWYodGhpcy5wbGF5aW5nKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMucGxheWluZyA9IHRydWU7XG4gICAgY29yZS50aWNrZXIuc2hhcmVkLmFkZCh0aGlzLnVwZGF0ZSwgdGhpcyk7XG59O1xuXG4vKipcbiAqIFN0b3BzIHRoZSBNb3ZpZUNsaXAgYW5kIGdvZXMgdG8gYSBzcGVjaWZpYyBmcmFtZVxuICpcbiAqIEBwYXJhbSBmcmFtZU51bWJlciB7bnVtYmVyfSBmcmFtZSBpbmRleCB0byBzdG9wIGF0XG4gKi9cbk1vdmllQ2xpcC5wcm90b3R5cGUuZ290b0FuZFN0b3AgPSBmdW5jdGlvbiAoZnJhbWVOdW1iZXIpXG57XG4gICAgdGhpcy5zdG9wKCk7XG5cbiAgICB0aGlzLl9jdXJyZW50VGltZSA9IGZyYW1lTnVtYmVyO1xuXG4gICAgdGhpcy5fdGV4dHVyZSA9IHRoaXMuX3RleHR1cmVzW3RoaXMuY3VycmVudEZyYW1lXTtcbn07XG5cbi8qKlxuICogR29lcyB0byBhIHNwZWNpZmljIGZyYW1lIGFuZCBiZWdpbnMgcGxheWluZyB0aGUgTW92aWVDbGlwXG4gKlxuICogQHBhcmFtIGZyYW1lTnVtYmVyIHtudW1iZXJ9IGZyYW1lIGluZGV4IHRvIHN0YXJ0IGF0XG4gKi9cbk1vdmllQ2xpcC5wcm90b3R5cGUuZ290b0FuZFBsYXkgPSBmdW5jdGlvbiAoZnJhbWVOdW1iZXIpXG57XG4gICAgdGhpcy5fY3VycmVudFRpbWUgPSBmcmFtZU51bWJlcjtcblxuICAgIHRoaXMucGxheSgpO1xufTtcblxuLypcbiAqIFVwZGF0ZXMgdGhlIG9iamVjdCB0cmFuc2Zvcm0gZm9yIHJlbmRlcmluZ1xuICogQHByaXZhdGVcbiAqL1xuTW92aWVDbGlwLnByb3RvdHlwZS51cGRhdGUgPSBmdW5jdGlvbiAoZGVsdGFUaW1lKVxue1xuICAgIHZhciBlbGFwc2VkID0gdGhpcy5hbmltYXRpb25TcGVlZCAqIGRlbHRhVGltZTtcblxuICAgIGlmICh0aGlzLl9kdXJhdGlvbnMgIT09IG51bGwpXG4gICAge1xuICAgICAgICB2YXIgbGFnID0gdGhpcy5fY3VycmVudFRpbWUgJSAxICogdGhpcy5fZHVyYXRpb25zW3RoaXMuY3VycmVudEZyYW1lXTtcblxuICAgICAgICBsYWcgKz0gZWxhcHNlZCAvIDYwICogMTAwMDtcblxuICAgICAgICB3aGlsZSAobGFnIDwgMClcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5fY3VycmVudFRpbWUtLTtcbiAgICAgICAgICAgIGxhZyArPSB0aGlzLl9kdXJhdGlvbnNbdGhpcy5jdXJyZW50RnJhbWVdO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIHNpZ24gPSBNYXRoLnNpZ24odGhpcy5hbmltYXRpb25TcGVlZCAqIGRlbHRhVGltZSk7XG4gICAgICAgIHRoaXMuX2N1cnJlbnRUaW1lID0gTWF0aC5mbG9vcih0aGlzLl9jdXJyZW50VGltZSk7XG5cbiAgICAgICAgd2hpbGUgKGxhZyA+PSB0aGlzLl9kdXJhdGlvbnNbdGhpcy5jdXJyZW50RnJhbWVdKVxuICAgICAgICB7XG4gICAgICAgICAgICBsYWcgLT0gdGhpcy5fZHVyYXRpb25zW3RoaXMuY3VycmVudEZyYW1lXSAqIHNpZ247XG4gICAgICAgICAgICB0aGlzLl9jdXJyZW50VGltZSArPSBzaWduO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fY3VycmVudFRpbWUgKz0gbGFnIC8gdGhpcy5fZHVyYXRpb25zW3RoaXMuY3VycmVudEZyYW1lXTtcbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgdGhpcy5fY3VycmVudFRpbWUgKz0gZWxhcHNlZDtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5fY3VycmVudFRpbWUgPCAwICYmICF0aGlzLmxvb3ApXG4gICAge1xuICAgICAgICB0aGlzLmdvdG9BbmRTdG9wKDApO1xuXG4gICAgICAgIGlmICh0aGlzLm9uQ29tcGxldGUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMub25Db21wbGV0ZSgpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGVsc2UgaWYgKHRoaXMuX2N1cnJlbnRUaW1lID49IHRoaXMuX3RleHR1cmVzLmxlbmd0aCAmJiAhdGhpcy5sb29wKVxuICAgIHtcbiAgICAgICAgdGhpcy5nb3RvQW5kU3RvcCh0aGlzLl90ZXh0dXJlcy5sZW5ndGggLSAxKTtcblxuICAgICAgICBpZiAodGhpcy5vbkNvbXBsZXRlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLm9uQ29tcGxldGUoKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICB0aGlzLl90ZXh0dXJlID0gdGhpcy5fdGV4dHVyZXNbdGhpcy5jdXJyZW50RnJhbWVdO1xuICAgIH1cblxufTtcblxuLypcbiAqIFN0b3BzIHRoZSBNb3ZpZUNsaXAgYW5kIGRlc3Ryb3lzIGl0XG4gKlxuICovXG5Nb3ZpZUNsaXAucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoIClcbntcbiAgICB0aGlzLnN0b3AoKTtcbiAgICBjb3JlLlNwcml0ZS5wcm90b3R5cGUuZGVzdHJveS5jYWxsKHRoaXMpO1xufTtcblxuLyoqXG4gKiBBIHNob3J0IGhhbmQgd2F5IG9mIGNyZWF0aW5nIGEgbW92aWVjbGlwIGZyb20gYW4gYXJyYXkgb2YgZnJhbWUgaWRzXG4gKlxuICogQHN0YXRpY1xuICogQHBhcmFtIGZyYW1lcyB7c3RyaW5nW119IHRoZSBhcnJheSBvZiBmcmFtZXMgaWRzIHRoZSBtb3ZpZWNsaXAgd2lsbCB1c2UgYXMgaXRzIHRleHR1cmUgZnJhbWVzXG4gKi9cbk1vdmllQ2xpcC5mcm9tRnJhbWVzID0gZnVuY3Rpb24gKGZyYW1lcylcbntcbiAgICB2YXIgdGV4dHVyZXMgPSBbXTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZnJhbWVzLmxlbmd0aDsgKytpKVxuICAgIHtcbiAgICAgICAgdGV4dHVyZXMucHVzaChuZXcgY29yZS5UZXh0dXJlLmZyb21GcmFtZShmcmFtZXNbaV0pKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IE1vdmllQ2xpcCh0ZXh0dXJlcyk7XG59O1xuXG4vKipcbiAqIEEgc2hvcnQgaGFuZCB3YXkgb2YgY3JlYXRpbmcgYSBtb3ZpZWNsaXAgZnJvbSBhbiBhcnJheSBvZiBpbWFnZSBpZHNcbiAqXG4gKiBAc3RhdGljXG4gKiBAcGFyYW0gaW1hZ2VzIHtzdHJpbmdbXX0gdGhlIGFycmF5IG9mIGltYWdlIHVybHMgdGhlIG1vdmllY2xpcCB3aWxsIHVzZSBhcyBpdHMgdGV4dHVyZSBmcmFtZXNcbiAqL1xuTW92aWVDbGlwLmZyb21JbWFnZXMgPSBmdW5jdGlvbiAoaW1hZ2VzKVxue1xuICAgIHZhciB0ZXh0dXJlcyA9IFtdO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBpbWFnZXMubGVuZ3RoOyArK2kpXG4gICAge1xuICAgICAgICB0ZXh0dXJlcy5wdXNoKG5ldyBjb3JlLlRleHR1cmUuZnJvbUltYWdlKGltYWdlc1tpXSkpO1xuICAgIH1cblxuICAgIHJldHVybiBuZXcgTW92aWVDbGlwKHRleHR1cmVzKTtcbn07IiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi9jb3JlJyksXG4gICAgLy8gYSBzcHJpdGUgdXNlIGRmb3IgcmVuZGVyaW5nIHRleHR1cmVzLi5cbiAgICB0ZW1wUG9pbnQgPSBuZXcgY29yZS5Qb2ludCgpLFxuICAgIENhbnZhc1RpbnRlciA9IHJlcXVpcmUoJy4uL2NvcmUvcmVuZGVyZXJzL2NhbnZhcy91dGlscy9DYW52YXNUaW50ZXInKTtcblxuLyoqXG4gKiBBIHRpbGluZyBzcHJpdGUgaXMgYSBmYXN0IHdheSBvZiByZW5kZXJpbmcgYSB0aWxpbmcgaW1hZ2VcbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuU3ByaXRlXG4gKiBAbWVtYmVyb2YgUElYSS5leHRyYXNcbiAqIEBwYXJhbSB0ZXh0dXJlIHtUZXh0dXJlfSB0aGUgdGV4dHVyZSBvZiB0aGUgdGlsaW5nIHNwcml0ZVxuICogQHBhcmFtIHdpZHRoIHtudW1iZXJ9ICB0aGUgd2lkdGggb2YgdGhlIHRpbGluZyBzcHJpdGVcbiAqIEBwYXJhbSBoZWlnaHQge251bWJlcn0gdGhlIGhlaWdodCBvZiB0aGUgdGlsaW5nIHNwcml0ZVxuICovXG5mdW5jdGlvbiBUaWxpbmdTcHJpdGUodGV4dHVyZSwgd2lkdGgsIGhlaWdodClcbntcbiAgICBjb3JlLlNwcml0ZS5jYWxsKHRoaXMsIHRleHR1cmUpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHNjYWxpbmcgb2YgdGhlIGltYWdlIHRoYXQgaXMgYmVpbmcgdGlsZWRcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuUG9pbnR9XG4gICAgICovXG4gICAgdGhpcy50aWxlU2NhbGUgPSBuZXcgY29yZS5Qb2ludCgxLDEpO1xuXG5cbiAgICAvKipcbiAgICAgKiBUaGUgb2Zmc2V0IHBvc2l0aW9uIG9mIHRoZSBpbWFnZSB0aGF0IGlzIGJlaW5nIHRpbGVkXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlBvaW50fVxuICAgICAqL1xuICAgIHRoaXMudGlsZVBvc2l0aW9uID0gbmV3IGNvcmUuUG9pbnQoMCwwKTtcblxuICAgIC8vLy8vIHByaXZhdGVcblxuICAgIC8qKlxuICAgICAqIFRoZSB3aXRoIG9mIHRoZSB0aWxpbmcgc3ByaXRlXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl93aWR0aCA9IHdpZHRoIHx8IDEwMDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBoZWlnaHQgb2YgdGhlIHRpbGluZyBzcHJpdGVcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX2hlaWdodCA9IGhlaWdodCB8fCAxMDA7XG5cbiAgICAvKipcbiAgICAgKiBBbiBpbnRlcm5hbCBXZWJHTCBVViBjYWNoZS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuVGV4dHVyZVV2c31cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX3V2cyA9IG5ldyBjb3JlLlRleHR1cmVVdnMoKTtcblxuICAgIHRoaXMuX2NhbnZhc1BhdHRlcm4gPSBudWxsO1xuXG4gICAgLy9UT0RPIG1vdmUuLlxuICAgIHRoaXMuc2hhZGVyID0gbmV3IGNvcmUuQWJzdHJhY3RGaWx0ZXIoXG5cbiAgICAgIFtcbiAgICAgICAgJ3ByZWNpc2lvbiBsb3dwIGZsb2F0OycsXG4gICAgICAgICdhdHRyaWJ1dGUgdmVjMiBhVmVydGV4UG9zaXRpb247JyxcbiAgICAgICAgJ2F0dHJpYnV0ZSB2ZWMyIGFUZXh0dXJlQ29vcmQ7JyxcbiAgICAgICAgJ2F0dHJpYnV0ZSB2ZWM0IGFDb2xvcjsnLFxuXG4gICAgICAgICd1bmlmb3JtIG1hdDMgcHJvamVjdGlvbk1hdHJpeDsnLFxuXG4gICAgICAgICd1bmlmb3JtIHZlYzQgdUZyYW1lOycsXG4gICAgICAgICd1bmlmb3JtIHZlYzQgdVRyYW5zZm9ybTsnLFxuXG4gICAgICAgICd2YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDsnLFxuICAgICAgICAndmFyeWluZyB2ZWM0IHZDb2xvcjsnLFxuXG4gICAgICAgICd2b2lkIG1haW4odm9pZCl7JyxcbiAgICAgICAgJyAgIGdsX1Bvc2l0aW9uID0gdmVjNCgocHJvamVjdGlvbk1hdHJpeCAqIHZlYzMoYVZlcnRleFBvc2l0aW9uLCAxLjApKS54eSwgMC4wLCAxLjApOycsXG5cbiAgICAgICAgJyAgIHZlYzIgY29vcmQgPSBhVGV4dHVyZUNvb3JkOycsXG4gICAgICAgICcgICBjb29yZCAtPSB1VHJhbnNmb3JtLnh5OycsXG4gICAgICAgICcgICBjb29yZCAvPSB1VHJhbnNmb3JtLnp3OycsXG4gICAgICAgICcgICB2VGV4dHVyZUNvb3JkID0gY29vcmQ7JyxcblxuICAgICAgICAnICAgdkNvbG9yID0gdmVjNChhQ29sb3IucmdiICogYUNvbG9yLmEsIGFDb2xvci5hKTsnLFxuICAgICAgICAnfSdcbiAgICAgIF0uam9pbignXFxuJyksXG4gICAgICBbXG4gICAgICAgICdwcmVjaXNpb24gbG93cCBmbG9hdDsnLFxuXG4gICAgICAgICd2YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDsnLFxuICAgICAgICAndmFyeWluZyB2ZWM0IHZDb2xvcjsnLFxuXG4gICAgICAgICd1bmlmb3JtIHNhbXBsZXIyRCB1U2FtcGxlcjsnLFxuICAgICAgICAndW5pZm9ybSB2ZWM0IHVGcmFtZTsnLFxuICAgICAgICAndW5pZm9ybSB2ZWMyIHVQaXhlbFNpemU7JyxcblxuICAgICAgICAndm9pZCBtYWluKHZvaWQpeycsXG5cbiAgICAgICAgJyAgIHZlYzIgY29vcmQgPSBtb2QodlRleHR1cmVDb29yZCwgdUZyYW1lLnp3KTsnLFxuICAgICAgICAnICAgY29vcmQgPSBjbGFtcChjb29yZCwgdVBpeGVsU2l6ZSwgdUZyYW1lLnp3IC0gdVBpeGVsU2l6ZSk7JyxcbiAgICAgICAgJyAgIGNvb3JkICs9IHVGcmFtZS54eTsnLFxuXG4gICAgICAgICcgICBnbF9GcmFnQ29sb3IgPSAgdGV4dHVyZTJEKHVTYW1wbGVyLCBjb29yZCkgKiB2Q29sb3IgOycsXG4gICAgICAgICd9J1xuICAgICAgXS5qb2luKCdcXG4nKSxcblxuICAgICAgICAgICAgLy8gc2V0IHRoZSB1bmlmb3Jtc1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHVGcmFtZTogeyB0eXBlOiAnNGZ2JywgdmFsdWU6IFswLDAsMSwxXSB9LFxuICAgICAgICAgICAgICAgIHVUcmFuc2Zvcm06IHsgdHlwZTogJzRmdicsIHZhbHVlOiBbMCwwLDEsMV0gfSxcbiAgICAgICAgICAgICAgICB1UGl4ZWxTaXplIDogeyB0eXBlIDogJzJmdicsIHZhbHVlOiBbMSwgMV19XG4gICAgICAgICAgICB9XG4gICAgICApO1xufVxuXG5UaWxpbmdTcHJpdGUucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShjb3JlLlNwcml0ZS5wcm90b3R5cGUpO1xuVGlsaW5nU3ByaXRlLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFRpbGluZ1Nwcml0ZTtcbm1vZHVsZS5leHBvcnRzID0gVGlsaW5nU3ByaXRlO1xuXG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKFRpbGluZ1Nwcml0ZS5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBUaGUgd2lkdGggb2YgdGhlIHNwcml0ZSwgc2V0dGluZyB0aGlzIHdpbGwgYWN0dWFsbHkgbW9kaWZ5IHRoZSBzY2FsZSB0byBhY2hpZXZlIHRoZSB2YWx1ZSBzZXRcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5leHRyYXMuVGlsaW5nU3ByaXRlI1xuICAgICAqL1xuICAgIHdpZHRoOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3dpZHRoO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5fd2lkdGggPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBUaGUgaGVpZ2h0IG9mIHRoZSBUaWxpbmdTcHJpdGUsIHNldHRpbmcgdGhpcyB3aWxsIGFjdHVhbGx5IG1vZGlmeSB0aGUgc2NhbGUgdG8gYWNoaWV2ZSB0aGUgdmFsdWUgc2V0XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZXh0cmFzLlRpbGluZ1Nwcml0ZSNcbiAgICAgKi9cbiAgICBoZWlnaHQ6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5faGVpZ2h0O1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5faGVpZ2h0ID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG59KTtcblxuVGlsaW5nU3ByaXRlLnByb3RvdHlwZS5fb25UZXh0dXJlVXBkYXRlID0gZnVuY3Rpb24gKClcbntcbiAgICByZXR1cm47XG59O1xuXG5cbi8qKlxuICogUmVuZGVycyB0aGUgb2JqZWN0IHVzaW5nIHRoZSBXZWJHTCByZW5kZXJlclxuICpcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5XZWJHTFJlbmRlcmVyfVxuICogQHByaXZhdGVcbiAqL1xuVGlsaW5nU3ByaXRlLnByb3RvdHlwZS5fcmVuZGVyV2ViR0wgPSBmdW5jdGlvbiAocmVuZGVyZXIpXG57XG4gICAgLy8gdHdlYWsgb3VyIHRleHR1cmUgdGVtcG9yYXJpbHkuLlxuICAgIHZhciB0ZXh0dXJlID0gdGhpcy5fdGV4dHVyZTtcblxuICAgIGlmKCF0ZXh0dXJlIHx8ICF0ZXh0dXJlLl91dnMpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFyIHRlbXBVdnMgPSB0ZXh0dXJlLl91dnMsXG4gICAgICAgIHRlbXBXaWR0aCA9IHRleHR1cmUuX2ZyYW1lLndpZHRoLFxuICAgICAgICB0ZW1wSGVpZ2h0ID0gdGV4dHVyZS5fZnJhbWUuaGVpZ2h0LFxuICAgICAgICB0dyA9IHRleHR1cmUuYmFzZVRleHR1cmUud2lkdGgsXG4gICAgICAgIHRoID0gdGV4dHVyZS5iYXNlVGV4dHVyZS5oZWlnaHQ7XG5cbiAgICB0ZXh0dXJlLl91dnMgPSB0aGlzLl91dnM7XG4gICAgdGV4dHVyZS5fZnJhbWUud2lkdGggPSB0aGlzLndpZHRoO1xuICAgIHRleHR1cmUuX2ZyYW1lLmhlaWdodCA9IHRoaXMuaGVpZ2h0O1xuXG4gICAgdGhpcy5zaGFkZXIudW5pZm9ybXMudVBpeGVsU2l6ZS52YWx1ZVswXSA9IDEuMC90dztcbiAgICB0aGlzLnNoYWRlci51bmlmb3Jtcy51UGl4ZWxTaXplLnZhbHVlWzFdID0gMS4wL3RoO1xuXG4gICAgdGhpcy5zaGFkZXIudW5pZm9ybXMudUZyYW1lLnZhbHVlWzBdID0gdGVtcFV2cy54MDtcbiAgICB0aGlzLnNoYWRlci51bmlmb3Jtcy51RnJhbWUudmFsdWVbMV0gPSB0ZW1wVXZzLnkwO1xuICAgIHRoaXMuc2hhZGVyLnVuaWZvcm1zLnVGcmFtZS52YWx1ZVsyXSA9IHRlbXBVdnMueDEgLSB0ZW1wVXZzLngwO1xuICAgIHRoaXMuc2hhZGVyLnVuaWZvcm1zLnVGcmFtZS52YWx1ZVszXSA9IHRlbXBVdnMueTIgLSB0ZW1wVXZzLnkwO1xuXG4gICAgdGhpcy5zaGFkZXIudW5pZm9ybXMudVRyYW5zZm9ybS52YWx1ZVswXSA9ICh0aGlzLnRpbGVQb3NpdGlvbi54ICUgKHRlbXBXaWR0aCAqIHRoaXMudGlsZVNjYWxlLngpKSAvIHRoaXMuX3dpZHRoO1xuICAgIHRoaXMuc2hhZGVyLnVuaWZvcm1zLnVUcmFuc2Zvcm0udmFsdWVbMV0gPSAodGhpcy50aWxlUG9zaXRpb24ueSAlICh0ZW1wSGVpZ2h0ICogdGhpcy50aWxlU2NhbGUueSkpIC8gdGhpcy5faGVpZ2h0O1xuICAgIHRoaXMuc2hhZGVyLnVuaWZvcm1zLnVUcmFuc2Zvcm0udmFsdWVbMl0gPSAoIHR3IC8gdGhpcy5fd2lkdGggKSAqIHRoaXMudGlsZVNjYWxlLng7XG4gICAgdGhpcy5zaGFkZXIudW5pZm9ybXMudVRyYW5zZm9ybS52YWx1ZVszXSA9ICggdGggLyB0aGlzLl9oZWlnaHQgKSAqIHRoaXMudGlsZVNjYWxlLnk7XG5cbiAgICByZW5kZXJlci5zZXRPYmplY3RSZW5kZXJlcihyZW5kZXJlci5wbHVnaW5zLnNwcml0ZSk7XG4gICAgcmVuZGVyZXIucGx1Z2lucy5zcHJpdGUucmVuZGVyKHRoaXMpO1xuXG4gICAgdGV4dHVyZS5fdXZzID0gdGVtcFV2cztcbiAgICB0ZXh0dXJlLl9mcmFtZS53aWR0aCA9IHRlbXBXaWR0aDtcbiAgICB0ZXh0dXJlLl9mcmFtZS5oZWlnaHQgPSB0ZW1wSGVpZ2h0O1xufTtcblxuLyoqXG4gKiBSZW5kZXJzIHRoZSBvYmplY3QgdXNpbmcgdGhlIENhbnZhcyByZW5kZXJlclxuICpcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5DYW52YXNSZW5kZXJlcn0gYSByZWZlcmVuY2UgdG8gdGhlIGNhbnZhcyByZW5kZXJlclxuICogQHByaXZhdGVcbiAqL1xuVGlsaW5nU3ByaXRlLnByb3RvdHlwZS5fcmVuZGVyQ2FudmFzID0gZnVuY3Rpb24gKHJlbmRlcmVyKVxue1xuICAgIHZhciB0ZXh0dXJlID0gdGhpcy5fdGV4dHVyZTtcblxuICAgIGlmICghdGV4dHVyZS5iYXNlVGV4dHVyZS5oYXNMb2FkZWQpXG4gICAge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHZhciBjb250ZXh0ID0gcmVuZGVyZXIuY29udGV4dCxcbiAgICAgICAgdHJhbnNmb3JtID0gdGhpcy53b3JsZFRyYW5zZm9ybSxcbiAgICAgICAgcmVzb2x1dGlvbiA9IHJlbmRlcmVyLnJlc29sdXRpb24sXG4gICAgICAgIGJhc2VUZXh0dXJlID0gdGV4dHVyZS5iYXNlVGV4dHVyZSxcbiAgICAgICAgbW9kWCA9ICh0aGlzLnRpbGVQb3NpdGlvbi54IC8gdGhpcy50aWxlU2NhbGUueCkgJSB0ZXh0dXJlLl9mcmFtZS53aWR0aCxcbiAgICAgICAgbW9kWSA9ICh0aGlzLnRpbGVQb3NpdGlvbi55IC8gdGhpcy50aWxlU2NhbGUueSkgJSB0ZXh0dXJlLl9mcmFtZS5oZWlnaHQ7XG5cbiAgICAvLyBjcmVhdGUgYSBuaWNlIHNoaW55IHBhdHRlcm4hXG4gICAgLy8gVE9ETyB0aGlzIG5lZWRzIHRvIGJlIHJlZnJlc2hlZCBpZiB0ZXh0dXJlIGNoYW5nZXMuLlxuICAgIGlmKCF0aGlzLl9jYW52YXNQYXR0ZXJuKVxuICAgIHtcbiAgICAgICAgLy8gY3V0IGFuIG9iamVjdCBmcm9tIGEgc3ByaXRlc2hlZXQuLlxuICAgICAgICB2YXIgdGVtcENhbnZhcyA9IG5ldyBjb3JlLkNhbnZhc0J1ZmZlcih0ZXh0dXJlLl9mcmFtZS53aWR0aCwgdGV4dHVyZS5fZnJhbWUuaGVpZ2h0KTtcblxuICAgICAgICAvLyBUaW50IHRoZSB0aWxpbmcgc3ByaXRlXG4gICAgICAgIGlmICh0aGlzLnRpbnQgIT09IDB4RkZGRkZGKVxuICAgICAgICB7XG4gICAgICAgICAgICBpZiAodGhpcy5jYWNoZWRUaW50ICE9PSB0aGlzLnRpbnQpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdGhpcy5jYWNoZWRUaW50ID0gdGhpcy50aW50O1xuXG4gICAgICAgICAgICAgICAgdGhpcy50aW50ZWRUZXh0dXJlID0gQ2FudmFzVGludGVyLmdldFRpbnRlZFRleHR1cmUodGhpcywgdGhpcy50aW50KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRlbXBDYW52YXMuY29udGV4dC5kcmF3SW1hZ2UodGhpcy50aW50ZWRUZXh0dXJlLCAwLCAwKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRlbXBDYW52YXMuY29udGV4dC5kcmF3SW1hZ2UoYmFzZVRleHR1cmUuc291cmNlLCAtdGV4dHVyZS5fZnJhbWUueCwgLXRleHR1cmUuX2ZyYW1lLnkpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX2NhbnZhc1BhdHRlcm4gPSB0ZW1wQ2FudmFzLmNvbnRleHQuY3JlYXRlUGF0dGVybiggdGVtcENhbnZhcy5jYW52YXMsICdyZXBlYXQnICk7XG4gICAgfVxuXG4gICAgLy8gc2V0IGNvbnRleHQgc3RhdGUuLlxuICAgIGNvbnRleHQuZ2xvYmFsQWxwaGEgPSB0aGlzLndvcmxkQWxwaGE7XG4gICAgY29udGV4dC5zZXRUcmFuc2Zvcm0odHJhbnNmb3JtLmEgKiByZXNvbHV0aW9uLFxuICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2Zvcm0uYiAqIHJlc29sdXRpb24sXG4gICAgICAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybS5jICogcmVzb2x1dGlvbixcbiAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtLmQgKiByZXNvbHV0aW9uLFxuICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2Zvcm0udHggKiByZXNvbHV0aW9uLFxuICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2Zvcm0udHkgKiByZXNvbHV0aW9uKTtcblxuICAgIC8vIFRPRE8gLSB0aGlzIHNob3VsZCBiZSByb2xsZWQgaW50byB0aGUgc2V0VHJhbnNmb3JtIGFib3ZlLi5cbiAgICBjb250ZXh0LnNjYWxlKHRoaXMudGlsZVNjYWxlLngsdGhpcy50aWxlU2NhbGUueSk7XG5cbiAgICBjb250ZXh0LnRyYW5zbGF0ZShtb2RYICsgKHRoaXMuYW5jaG9yLnggKiAtdGhpcy5fd2lkdGggKSxcbiAgICAgICAgICAgICAgICAgICAgICBtb2RZICsgKHRoaXMuYW5jaG9yLnkgKiAtdGhpcy5faGVpZ2h0KSk7XG5cbiAgICAvLyBjaGVjayBibGVuZCBtb2RlXG4gICAgdmFyIGNvbXBvc2l0ZU9wZXJhdGlvbiA9IHJlbmRlcmVyLmJsZW5kTW9kZXNbdGhpcy5ibGVuZE1vZGVdO1xuICAgIGlmIChjb21wb3NpdGVPcGVyYXRpb24gIT09IHJlbmRlcmVyLmNvbnRleHQuZ2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uKVxuICAgIHtcbiAgICAgICAgY29udGV4dC5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb24gPSBjb21wb3NpdGVPcGVyYXRpb247XG4gICAgfVxuXG4gICAgLy8gZmlsbCB0aGUgcGF0dGVybiFcbiAgICBjb250ZXh0LmZpbGxTdHlsZSA9IHRoaXMuX2NhbnZhc1BhdHRlcm47XG4gICAgY29udGV4dC5maWxsUmVjdCgtbW9kWCxcbiAgICAgICAgICAgICAgICAgICAgIC1tb2RZLFxuICAgICAgICAgICAgICAgICAgICAgdGhpcy5fd2lkdGggLyB0aGlzLnRpbGVTY2FsZS54LFxuICAgICAgICAgICAgICAgICAgICAgdGhpcy5faGVpZ2h0IC8gdGhpcy50aWxlU2NhbGUueSk7XG5cblxuICAgIC8vVE9ETyAtIHByZXR0eSBzdXJlIHRoaXMgY2FuIGJlIGRlbGV0ZWQuLi5cbiAgICAvL2NvbnRleHQudHJhbnNsYXRlKC10aGlzLnRpbGVQb3NpdGlvbi54ICsgKHRoaXMuYW5jaG9yLnggKiB0aGlzLl93aWR0aCksIC10aGlzLnRpbGVQb3NpdGlvbi55ICsgKHRoaXMuYW5jaG9yLnkgKiB0aGlzLl9oZWlnaHQpKTtcbiAgICAvL2NvbnRleHQuc2NhbGUoMSAvIHRoaXMudGlsZVNjYWxlLngsIDEgLyB0aGlzLnRpbGVTY2FsZS55KTtcbn07XG5cblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBmcmFtaW5nIHJlY3RhbmdsZSBvZiB0aGUgc3ByaXRlIGFzIGEgUmVjdGFuZ2xlIG9iamVjdFxuKlxuICogQHJldHVybiB7UElYSS5SZWN0YW5nbGV9IHRoZSBmcmFtaW5nIHJlY3RhbmdsZVxuICovXG5UaWxpbmdTcHJpdGUucHJvdG90eXBlLmdldEJvdW5kcyA9IGZ1bmN0aW9uICgpXG57XG4gICAgdmFyIHdpZHRoID0gdGhpcy5fd2lkdGg7XG4gICAgdmFyIGhlaWdodCA9IHRoaXMuX2hlaWdodDtcblxuICAgIHZhciB3MCA9IHdpZHRoICogKDEtdGhpcy5hbmNob3IueCk7XG4gICAgdmFyIHcxID0gd2lkdGggKiAtdGhpcy5hbmNob3IueDtcblxuICAgIHZhciBoMCA9IGhlaWdodCAqICgxLXRoaXMuYW5jaG9yLnkpO1xuICAgIHZhciBoMSA9IGhlaWdodCAqIC10aGlzLmFuY2hvci55O1xuXG4gICAgdmFyIHdvcmxkVHJhbnNmb3JtID0gdGhpcy53b3JsZFRyYW5zZm9ybTtcblxuICAgIHZhciBhID0gd29ybGRUcmFuc2Zvcm0uYTtcbiAgICB2YXIgYiA9IHdvcmxkVHJhbnNmb3JtLmI7XG4gICAgdmFyIGMgPSB3b3JsZFRyYW5zZm9ybS5jO1xuICAgIHZhciBkID0gd29ybGRUcmFuc2Zvcm0uZDtcbiAgICB2YXIgdHggPSB3b3JsZFRyYW5zZm9ybS50eDtcbiAgICB2YXIgdHkgPSB3b3JsZFRyYW5zZm9ybS50eTtcblxuICAgIHZhciB4MSA9IGEgKiB3MSArIGMgKiBoMSArIHR4O1xuICAgIHZhciB5MSA9IGQgKiBoMSArIGIgKiB3MSArIHR5O1xuXG4gICAgdmFyIHgyID0gYSAqIHcwICsgYyAqIGgxICsgdHg7XG4gICAgdmFyIHkyID0gZCAqIGgxICsgYiAqIHcwICsgdHk7XG5cbiAgICB2YXIgeDMgPSBhICogdzAgKyBjICogaDAgKyB0eDtcbiAgICB2YXIgeTMgPSBkICogaDAgKyBiICogdzAgKyB0eTtcblxuICAgIHZhciB4NCA9ICBhICogdzEgKyBjICogaDAgKyB0eDtcbiAgICB2YXIgeTQgPSAgZCAqIGgwICsgYiAqIHcxICsgdHk7XG5cbiAgICB2YXIgbWluWCxcbiAgICAgICAgbWF4WCxcbiAgICAgICAgbWluWSxcbiAgICAgICAgbWF4WTtcblxuICAgIG1pblggPSB4MTtcbiAgICBtaW5YID0geDIgPCBtaW5YID8geDIgOiBtaW5YO1xuICAgIG1pblggPSB4MyA8IG1pblggPyB4MyA6IG1pblg7XG4gICAgbWluWCA9IHg0IDwgbWluWCA/IHg0IDogbWluWDtcblxuICAgIG1pblkgPSB5MTtcbiAgICBtaW5ZID0geTIgPCBtaW5ZID8geTIgOiBtaW5ZO1xuICAgIG1pblkgPSB5MyA8IG1pblkgPyB5MyA6IG1pblk7XG4gICAgbWluWSA9IHk0IDwgbWluWSA/IHk0IDogbWluWTtcblxuICAgIG1heFggPSB4MTtcbiAgICBtYXhYID0geDIgPiBtYXhYID8geDIgOiBtYXhYO1xuICAgIG1heFggPSB4MyA+IG1heFggPyB4MyA6IG1heFg7XG4gICAgbWF4WCA9IHg0ID4gbWF4WCA/IHg0IDogbWF4WDtcblxuICAgIG1heFkgPSB5MTtcbiAgICBtYXhZID0geTIgPiBtYXhZID8geTIgOiBtYXhZO1xuICAgIG1heFkgPSB5MyA+IG1heFkgPyB5MyA6IG1heFk7XG4gICAgbWF4WSA9IHk0ID4gbWF4WSA/IHk0IDogbWF4WTtcblxuICAgIHZhciBib3VuZHMgPSB0aGlzLl9ib3VuZHM7XG5cbiAgICBib3VuZHMueCA9IG1pblg7XG4gICAgYm91bmRzLndpZHRoID0gbWF4WCAtIG1pblg7XG5cbiAgICBib3VuZHMueSA9IG1pblk7XG4gICAgYm91bmRzLmhlaWdodCA9IG1heFkgLSBtaW5ZO1xuXG4gICAgLy8gc3RvcmUgYSByZWZlcmVuY2Ugc28gdGhhdCBpZiB0aGlzIGZ1bmN0aW9uIGdldHMgY2FsbGVkIGFnYWluIGluIHRoZSByZW5kZXIgY3ljbGUgd2UgZG8gbm90IGhhdmUgdG8gcmVjYWxjdWxhdGVcbiAgICB0aGlzLl9jdXJyZW50Qm91bmRzID0gYm91bmRzO1xuXG4gICAgcmV0dXJuIGJvdW5kcztcbn07XG5cbi8qKlxuICogQ2hlY2tzIGlmIGEgcG9pbnQgaXMgaW5zaWRlIHRoaXMgdGlsaW5nIHNwcml0ZVxuICogQHBhcmFtIHBvaW50IHtQSVhJLlBvaW50fSB0aGUgcG9pbnQgdG8gY2hlY2tcbiAqL1xuVGlsaW5nU3ByaXRlLnByb3RvdHlwZS5jb250YWluc1BvaW50ID0gZnVuY3Rpb24oIHBvaW50IClcbntcbiAgICB0aGlzLndvcmxkVHJhbnNmb3JtLmFwcGx5SW52ZXJzZShwb2ludCwgIHRlbXBQb2ludCk7XG5cbiAgICB2YXIgd2lkdGggPSB0aGlzLl93aWR0aDtcbiAgICB2YXIgaGVpZ2h0ID0gdGhpcy5faGVpZ2h0O1xuICAgIHZhciB4MSA9IC13aWR0aCAqIHRoaXMuYW5jaG9yLng7XG4gICAgdmFyIHkxO1xuXG4gICAgaWYgKCB0ZW1wUG9pbnQueCA+IHgxICYmIHRlbXBQb2ludC54IDwgeDEgKyB3aWR0aCApXG4gICAge1xuICAgICAgICB5MSA9IC1oZWlnaHQgKiB0aGlzLmFuY2hvci55O1xuXG4gICAgICAgIGlmICggdGVtcFBvaW50LnkgPiB5MSAmJiB0ZW1wUG9pbnQueSA8IHkxICsgaGVpZ2h0IClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2U7XG59O1xuXG4vKipcbiAqIERlc3Ryb3lzIHRoaXMgdGlsaW5nIHNwcml0ZVxuICpcbiAqL1xuVGlsaW5nU3ByaXRlLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKCkge1xuICAgIGNvcmUuU3ByaXRlLnByb3RvdHlwZS5kZXN0cm95LmNhbGwodGhpcyk7XG5cbiAgICB0aGlzLnRpbGVTY2FsZSA9IG51bGw7XG4gICAgdGhpcy5fdGlsZVNjYWxlT2Zmc2V0ID0gbnVsbDtcbiAgICB0aGlzLnRpbGVQb3NpdGlvbiA9IG51bGw7XG5cbiAgICB0aGlzLl91dnMgPSBudWxsO1xufTtcblxuLyoqXG4gKiBIZWxwZXIgZnVuY3Rpb24gdGhhdCBjcmVhdGVzIGEgdGlsaW5nIHNwcml0ZSB0aGF0IHdpbGwgdXNlIGEgdGV4dHVyZSBmcm9tIHRoZSBUZXh0dXJlQ2FjaGUgYmFzZWQgb24gdGhlIGZyYW1lSWRcbiAqIFRoZSBmcmFtZSBpZHMgYXJlIGNyZWF0ZWQgd2hlbiBhIFRleHR1cmUgcGFja2VyIGZpbGUgaGFzIGJlZW4gbG9hZGVkXG4gKlxuICogQHN0YXRpY1xuICogQHBhcmFtIGZyYW1lSWQge3N0cmluZ30gVGhlIGZyYW1lIElkIG9mIHRoZSB0ZXh0dXJlIGluIHRoZSBjYWNoZVxuICogQHJldHVybiB7UElYSS5leHRyYXMuVGlsaW5nU3ByaXRlfSBBIG5ldyBUaWxpbmdTcHJpdGUgdXNpbmcgYSB0ZXh0dXJlIGZyb20gdGhlIHRleHR1cmUgY2FjaGUgbWF0Y2hpbmcgdGhlIGZyYW1lSWRcbiAqIEBwYXJhbSB3aWR0aCB7bnVtYmVyfSAgdGhlIHdpZHRoIG9mIHRoZSB0aWxpbmcgc3ByaXRlXG4gKiBAcGFyYW0gaGVpZ2h0IHtudW1iZXJ9IHRoZSBoZWlnaHQgb2YgdGhlIHRpbGluZyBzcHJpdGVcbiAqL1xuVGlsaW5nU3ByaXRlLmZyb21GcmFtZSA9IGZ1bmN0aW9uIChmcmFtZUlkLHdpZHRoLGhlaWdodClcbntcbiAgICB2YXIgdGV4dHVyZSA9IGNvcmUudXRpbHMuVGV4dHVyZUNhY2hlW2ZyYW1lSWRdO1xuXG4gICAgaWYgKCF0ZXh0dXJlKVxuICAgIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdUaGUgZnJhbWVJZCBcIicgKyBmcmFtZUlkICsgJ1wiIGRvZXMgbm90IGV4aXN0IGluIHRoZSB0ZXh0dXJlIGNhY2hlICcgKyB0aGlzKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IFRpbGluZ1Nwcml0ZSh0ZXh0dXJlLHdpZHRoLGhlaWdodCk7XG59O1xuXG4vKipcbiAqIEhlbHBlciBmdW5jdGlvbiB0aGF0IGNyZWF0ZXMgYSBzcHJpdGUgdGhhdCB3aWxsIGNvbnRhaW4gYSB0ZXh0dXJlIGJhc2VkIG9uIGFuIGltYWdlIHVybFxuICogSWYgdGhlIGltYWdlIGlzIG5vdCBpbiB0aGUgdGV4dHVyZSBjYWNoZSBpdCB3aWxsIGJlIGxvYWRlZFxuICpcbiAqIEBzdGF0aWNcbiAqIEBwYXJhbSBpbWFnZUlkIHtzdHJpbmd9IFRoZSBpbWFnZSB1cmwgb2YgdGhlIHRleHR1cmVcbiAqIEBwYXJhbSB3aWR0aCB7bnVtYmVyfSAgdGhlIHdpZHRoIG9mIHRoZSB0aWxpbmcgc3ByaXRlXG4gKiBAcGFyYW0gaGVpZ2h0IHtudW1iZXJ9IHRoZSBoZWlnaHQgb2YgdGhlIHRpbGluZyBzcHJpdGVcbiAqIEBwYXJhbSBbY3Jvc3NvcmlnaW49KGF1dG8pXSB7Ym9vbGVhbn0gaWYgeW91IHdhbnQgdG8gc3BlY2lmeSB0aGUgY3Jvc3Mtb3JpZ2luIHBhcmFtZXRlclxuICogQHBhcmFtIFtzY2FsZU1vZGU9UElYSS5TQ0FMRV9NT0RFUy5ERUZBVUxUXSB7bnVtYmVyfSBpZiB5b3Ugd2FudCB0byBzcGVjaWZ5IHRoZSBzY2FsZSBtb2RlLCBzZWUge0BsaW5rIFBJWEkuU0NBTEVfTU9ERVN9IGZvciBwb3NzaWJsZSB2YWx1ZXNcbiAqIEByZXR1cm4ge1BJWEkuZXh0cmFzLlRpbGluZ1Nwcml0ZX0gQSBuZXcgVGlsaW5nU3ByaXRlIHVzaW5nIGEgdGV4dHVyZSBmcm9tIHRoZSB0ZXh0dXJlIGNhY2hlIG1hdGNoaW5nIHRoZSBpbWFnZSBpZFxuICovXG5UaWxpbmdTcHJpdGUuZnJvbUltYWdlID0gZnVuY3Rpb24gKGltYWdlSWQsIHdpZHRoLCBoZWlnaHQsIGNyb3Nzb3JpZ2luLCBzY2FsZU1vZGUpXG57XG4gICAgcmV0dXJuIG5ldyBUaWxpbmdTcHJpdGUoY29yZS5UZXh0dXJlLmZyb21JbWFnZShpbWFnZUlkLCBjcm9zc29yaWdpbiwgc2NhbGVNb2RlKSx3aWR0aCxoZWlnaHQpO1xufTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vY29yZScpLFxuICAgIERpc3BsYXlPYmplY3QgPSBjb3JlLkRpc3BsYXlPYmplY3QsXG4gICAgX3RlbXBNYXRyaXggPSBuZXcgY29yZS5NYXRyaXgoKTtcblxuRGlzcGxheU9iamVjdC5wcm90b3R5cGUuX2NhY2hlQXNCaXRtYXAgPSBmYWxzZTtcbkRpc3BsYXlPYmplY3QucHJvdG90eXBlLl9vcmlnaW5hbFJlbmRlcldlYkdMID0gbnVsbDtcbkRpc3BsYXlPYmplY3QucHJvdG90eXBlLl9vcmlnaW5hbFJlbmRlckNhbnZhcyA9IG51bGw7XG5cbkRpc3BsYXlPYmplY3QucHJvdG90eXBlLl9vcmlnaW5hbFVwZGF0ZVRyYW5zZm9ybSA9IG51bGw7XG5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS5fb3JpZ2luYWxIaXRUZXN0ID0gbnVsbDtcbkRpc3BsYXlPYmplY3QucHJvdG90eXBlLl9vcmlnaW5hbERlc3Ryb3kgPSBudWxsO1xuRGlzcGxheU9iamVjdC5wcm90b3R5cGUuX2NhY2hlZFNwcml0ZSA9IG51bGw7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKERpc3BsYXlPYmplY3QucHJvdG90eXBlLCB7XG5cbiAgICAvKipcbiAgICAgKiBTZXQgdGhpcyB0byB0cnVlIGlmIHlvdSB3YW50IHRoaXMgZGlzcGxheSBvYmplY3QgdG8gYmUgY2FjaGVkIGFzIGEgYml0bWFwLlxuICAgICAqIFRoaXMgYmFzaWNhbGx5IHRha2VzIGEgc25hcCBzaG90IG9mIHRoZSBkaXNwbGF5IG9iamVjdCBhcyBpdCBpcyBhdCB0aGF0IG1vbWVudC4gSXQgY2FuIHByb3ZpZGUgYSBwZXJmb3JtYW5jZSBiZW5lZml0IGZvciBjb21wbGV4IHN0YXRpYyBkaXNwbGF5T2JqZWN0cy5cbiAgICAgKiBUbyByZW1vdmUgc2ltcGx5IHNldCB0aGlzIHByb3BlcnR5IHRvICdmYWxzZSdcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICogQG1lbWJlcm9mIFBJWEkuRGlzcGxheU9iamVjdCNcbiAgICAgKi9cbiAgICBjYWNoZUFzQml0bWFwOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2NhY2hlQXNCaXRtYXA7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICBpZiAodGhpcy5fY2FjaGVBc0JpdG1hcCA9PT0gdmFsdWUpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLl9jYWNoZUFzQml0bWFwID0gdmFsdWU7XG5cbiAgICAgICAgICAgIGlmICh2YWx1ZSlcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9vcmlnaW5hbFJlbmRlcldlYkdMID0gdGhpcy5yZW5kZXJXZWJHTDtcbiAgICAgICAgICAgICAgICB0aGlzLl9vcmlnaW5hbFJlbmRlckNhbnZhcyA9IHRoaXMucmVuZGVyQ2FudmFzO1xuXG4gICAgICAgICAgICAgICAgdGhpcy5fb3JpZ2luYWxVcGRhdGVUcmFuc2Zvcm0gPSB0aGlzLnVwZGF0ZVRyYW5zZm9ybTtcbiAgICAgICAgICAgICAgICB0aGlzLl9vcmlnaW5hbEdldEJvdW5kcyA9IHRoaXMuZ2V0Qm91bmRzO1xuXG4gICAgICAgICAgICAgICAgdGhpcy5fb3JpZ2luYWxEZXN0cm95ID0gdGhpcy5kZXN0cm95O1xuXG4gICAgICAgICAgICAgICAgdGhpcy5fb3JpZ2luYWxDb250YWluc1BvaW50ID0gdGhpcy5jb250YWluc1BvaW50O1xuXG4gICAgICAgICAgICAgICAgdGhpcy5yZW5kZXJXZWJHTCA9IHRoaXMuX3JlbmRlckNhY2hlZFdlYkdMO1xuICAgICAgICAgICAgICAgIHRoaXMucmVuZGVyQ2FudmFzID0gdGhpcy5fcmVuZGVyQ2FjaGVkQ2FudmFzO1xuXG4gICAgICAgICAgICAgICAgdGhpcy5kZXN0cm95ID0gdGhpcy5fY2FjaGVBc0JpdG1hcERlc3Ryb3k7XG5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5fY2FjaGVkU3ByaXRlKVxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fZGVzdHJveUNhY2hlZERpc3BsYXlPYmplY3QoKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB0aGlzLnJlbmRlcldlYkdMID0gdGhpcy5fb3JpZ2luYWxSZW5kZXJXZWJHTDtcbiAgICAgICAgICAgICAgICB0aGlzLnJlbmRlckNhbnZhcyA9IHRoaXMuX29yaWdpbmFsUmVuZGVyQ2FudmFzO1xuICAgICAgICAgICAgICAgIHRoaXMuZ2V0Qm91bmRzID0gdGhpcy5fb3JpZ2luYWxHZXRCb3VuZHM7XG5cbiAgICAgICAgICAgICAgICB0aGlzLmRlc3Ryb3kgPSB0aGlzLl9vcmlnaW5hbERlc3Ryb3k7XG5cbiAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZVRyYW5zZm9ybSA9IHRoaXMuX29yaWdpbmFsVXBkYXRlVHJhbnNmb3JtO1xuICAgICAgICAgICAgICAgIHRoaXMuY29udGFpbnNQb2ludCA9IHRoaXMuX29yaWdpbmFsQ29udGFpbnNQb2ludDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn0pO1xuLyoqXG4qIFJlbmRlcnMgYSBjYWNoZWQgdmVyc2lvbiBvZiB0aGUgc3ByaXRlIHdpdGggV2ViR0xcbipcbiogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLldlYkdMUmVuZGVyZXJ9IHRoZSBXZWJHTCByZW5kZXJlclxuKiBAcHJpdmF0ZVxuKi9cbkRpc3BsYXlPYmplY3QucHJvdG90eXBlLl9yZW5kZXJDYWNoZWRXZWJHTCA9IGZ1bmN0aW9uIChyZW5kZXJlcilcbntcbiAgICBpZiAoIXRoaXMudmlzaWJsZSB8fCB0aGlzLndvcmxkQWxwaGEgPD0gMCB8fCAhdGhpcy5yZW5kZXJhYmxlKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuX2luaXRDYWNoZWREaXNwbGF5T2JqZWN0KCByZW5kZXJlciApO1xuXG4gICAgdGhpcy5fY2FjaGVkU3ByaXRlLndvcmxkQWxwaGEgPSB0aGlzLndvcmxkQWxwaGE7XG5cbiAgICByZW5kZXJlci5zZXRPYmplY3RSZW5kZXJlcihyZW5kZXJlci5wbHVnaW5zLnNwcml0ZSk7XG4gICAgcmVuZGVyZXIucGx1Z2lucy5zcHJpdGUucmVuZGVyKCB0aGlzLl9jYWNoZWRTcHJpdGUgKTtcbn07XG5cbi8qKlxuKiBQcmVwYXJlcyB0aGUgV2ViR0wgcmVuZGVyZXIgdG8gY2FjaGUgdGhlIHNwcml0ZVxuKlxuKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcn0gdGhlIFdlYkdMIHJlbmRlcmVyXG4qIEBwcml2YXRlXG4qL1xuRGlzcGxheU9iamVjdC5wcm90b3R5cGUuX2luaXRDYWNoZWREaXNwbGF5T2JqZWN0ID0gZnVuY3Rpb24gKHJlbmRlcmVyKVxue1xuICAgIGlmKHRoaXMuX2NhY2hlZFNwcml0ZSlcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBmaXJzdCB3ZSBmbHVzaCBhbnl0aGluZyBsZWZ0IGluIHRoZSByZW5kZXJlciAob3RoZXJ3aXNlIGl0IHdvdWxkIGdldCByZW5kZXJlZCB0byB0aGUgY2FjaGVkIHRleHR1cmUpXG4gICAgcmVuZGVyZXIuY3VycmVudFJlbmRlcmVyLmZsdXNoKCk7XG4gICAgLy90aGlzLmZpbHRlcnM9IFtdO1xuICAgIC8vIG5leHQgd2UgZmluZCB0aGUgZGltZW5zaW9ucyBvZiB0aGUgdW50cmFuc2Zvcm1lZCBvYmplY3RcbiAgICAvLyB0aGlzIGZ1bmN0aW9uIGFsc28gY2FsbHMgdXBkYXRldHJhbnNmb3JtIG9uIGFsbCBpdHMgY2hpbGRyZW4gYXMgcGFydCBvZiB0aGUgbWVhc3VyaW5nLiBUaGlzIG1lYW5zIHdlIGRvbid0IG5lZWQgdG8gdXBkYXRlIHRoZSB0cmFuc2Zvcm0gYWdhaW4gaW4gdGhpcyBmdW5jdGlvblxuICAgIC8vIFRPRE8gcGFzcyBhbiBvYmplY3QgdG8gY2xvbmUgdG9vPyBzYXZlcyBoYXZpbmcgdG8gY3JlYXRlIGEgbmV3IG9uZSBlYWNoIHRpbWUhXG4gICAgdmFyIGJvdW5kcyA9IHRoaXMuZ2V0TG9jYWxCb3VuZHMoKS5jbG9uZSgpO1xuXG4gICAgLy8gYWRkIHNvbWUgcGFkZGluZyFcbiAgICBpZih0aGlzLl9maWx0ZXJzKVxuICAgIHtcbiAgICAgICAgdmFyIHBhZGRpbmcgPSB0aGlzLl9maWx0ZXJzWzBdLnBhZGRpbmc7XG4gICAgICAgIGJvdW5kcy54IC09IHBhZGRpbmc7XG4gICAgICAgIGJvdW5kcy55IC09IHBhZGRpbmc7XG5cbiAgICAgICAgYm91bmRzLndpZHRoICs9IHBhZGRpbmcgKiAyO1xuICAgICAgICBib3VuZHMuaGVpZ2h0ICs9IHBhZGRpbmcgKiAyO1xuICAgIH1cblxuICAgIC8vIGZvciBub3cgd2UgY2FjaGUgdGhlIGN1cnJlbnQgcmVuZGVyVGFyZ2V0IHRoYXQgdGhlIHdlYkdMIHJlbmRlcmVyIGlzIGN1cnJlbnRseSB1c2luZy5cbiAgICAvLyB0aGlzIGNvdWxkIGJlIG1vcmUgZWxlZ2VudC4uXG4gICAgdmFyIGNhY2hlZFJlbmRlclRhcmdldCA9IHJlbmRlcmVyLmN1cnJlbnRSZW5kZXJUYXJnZXQ7XG4gICAgLy8gV2UgYWxzbyBzdG9yZSB0aGUgZmlsdGVyIHN0YWNrIC0gSSB3aWxsIGRlZmluaXRlbHkgbG9vayB0byBjaGFuZ2UgaG93IHRoaXMgd29ya3MgYSBsaXR0bGUgbGF0ZXIgZG93biB0aGUgbGluZS5cbiAgICB2YXIgc3RhY2sgPSByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLmZpbHRlclN0YWNrO1xuXG4gICAgLy8gdGhpcyByZW5kZXJUZXh0dXJlIHdpbGwgYmUgdXNlZCB0byBzdG9yZSB0aGUgY2FjaGVkIERpc3BsYXlPYmplY3RcbiAgICB2YXIgcmVuZGVyVGV4dHVyZSA9IG5ldyBjb3JlLlJlbmRlclRleHR1cmUocmVuZGVyZXIsIGJvdW5kcy53aWR0aCB8IDAsIGJvdW5kcy5oZWlnaHQgfCAwKTtcblxuICAgIC8vIG5lZWQgdG8gc2V0IC8vXG4gICAgdmFyIG0gPSBfdGVtcE1hdHJpeDtcblxuICAgIG0udHggPSAtYm91bmRzLng7XG4gICAgbS50eSA9IC1ib3VuZHMueTtcblxuXG5cbiAgICAvLyBzZXQgYWxsIHByb3BlcnRpZXMgdG8gdGhlcmUgb3JpZ2luYWwgc28gd2UgY2FuIHJlbmRlciB0byBhIHRleHR1cmVcbiAgICB0aGlzLnJlbmRlcldlYkdMID0gdGhpcy5fb3JpZ2luYWxSZW5kZXJXZWJHTDtcblxuICAgIHJlbmRlclRleHR1cmUucmVuZGVyKHRoaXMsIG0sIHRydWUsIHRydWUpO1xuXG4gICAgLy8gbm93IHJlc3RvcmUgdGhlIHN0YXRlIGJlIHNldHRpbmcgdGhlIG5ldyBwcm9wZXJ0aWVzXG4gICAgcmVuZGVyZXIuc2V0UmVuZGVyVGFyZ2V0KGNhY2hlZFJlbmRlclRhcmdldCk7XG4gICAgcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5maWx0ZXJTdGFjayA9IHN0YWNrO1xuXG4gICAgdGhpcy5yZW5kZXJXZWJHTCAgICAgPSB0aGlzLl9yZW5kZXJDYWNoZWRXZWJHTDtcbiAgICB0aGlzLnVwZGF0ZVRyYW5zZm9ybSA9IHRoaXMuZGlzcGxheU9iamVjdFVwZGF0ZVRyYW5zZm9ybTtcbiAgICB0aGlzLmdldEJvdW5kcyAgICAgICA9IHRoaXMuX2dldENhY2hlZEJvdW5kcztcblxuXG4gICAgLy8gY3JlYXRlIG91ciBjYWNoZWQgc3ByaXRlXG4gICAgdGhpcy5fY2FjaGVkU3ByaXRlID0gbmV3IGNvcmUuU3ByaXRlKHJlbmRlclRleHR1cmUpO1xuICAgIHRoaXMuX2NhY2hlZFNwcml0ZS53b3JsZFRyYW5zZm9ybSA9IHRoaXMud29ybGRUcmFuc2Zvcm07XG4gICAgdGhpcy5fY2FjaGVkU3ByaXRlLmFuY2hvci54ID0gLSggYm91bmRzLnggLyBib3VuZHMud2lkdGggKTtcbiAgICB0aGlzLl9jYWNoZWRTcHJpdGUuYW5jaG9yLnkgPSAtKCBib3VuZHMueSAvIGJvdW5kcy5oZWlnaHQgKTtcblxuICAgIC8vIHJlc3RvcmUgdGhlIHRyYW5zZm9ybSBvZiB0aGUgY2FjaGVkIHNwcml0ZSB0byBhdm9pZCB0aGUgbmFzdHkgZmxpY2tlci4uXG4gICAgdGhpcy51cGRhdGVUcmFuc2Zvcm0oKTtcblxuICAgIC8vIG1hcCB0aGUgaGl0IHRlc3QuLlxuICAgIHRoaXMuY29udGFpbnNQb2ludCA9IHRoaXMuX2NhY2hlZFNwcml0ZS5jb250YWluc1BvaW50LmJpbmQodGhpcy5fY2FjaGVkU3ByaXRlKTtcbn07XG5cbi8qKlxuKiBSZW5kZXJzIGEgY2FjaGVkIHZlcnNpb24gb2YgdGhlIHNwcml0ZSB3aXRoIGNhbnZhc1xuKlxuKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuQ2FudmFzUmVuZGVyZXJ9IHRoZSBDYW52YXMgcmVuZGVyZXJcbiogQHByaXZhdGVcbiovXG5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS5fcmVuZGVyQ2FjaGVkQ2FudmFzID0gZnVuY3Rpb24gKHJlbmRlcmVyKVxue1xuICAgIGlmICghdGhpcy52aXNpYmxlIHx8IHRoaXMud29ybGRBbHBoYSA8PSAwIHx8ICF0aGlzLnJlbmRlcmFibGUpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5faW5pdENhY2hlZERpc3BsYXlPYmplY3RDYW52YXMoIHJlbmRlcmVyICk7XG5cbiAgICB0aGlzLl9jYWNoZWRTcHJpdGUud29ybGRBbHBoYSA9IHRoaXMud29ybGRBbHBoYTtcblxuICAgIHRoaXMuX2NhY2hlZFNwcml0ZS5yZW5kZXJDYW52YXMocmVuZGVyZXIpO1xufTtcblxuLy9UT0RPIHRoaXMgY2FuIGJlIHRoZSBzYW1lIGFzIHRoZSB3ZWJHTCB2ZXJpc29uLi4gd2lsbCBuZWVkIHRvIGRvIGEgbGl0dGxlIHR3ZWFraW5nIGZpcnN0IHRob3VnaC4uXG4vKipcbiogUHJlcGFyZXMgdGhlIENhbnZhcyByZW5kZXJlciB0byBjYWNoZSB0aGUgc3ByaXRlXG4qXG4qIEBwYXJhbSByZW5kZXJlciB7UElYSS5DYW52YXNSZW5kZXJlcn0gdGhlIENhbnZhcyByZW5kZXJlclxuKiBAcHJpdmF0ZVxuKi9cbkRpc3BsYXlPYmplY3QucHJvdG90eXBlLl9pbml0Q2FjaGVkRGlzcGxheU9iamVjdENhbnZhcyA9IGZ1bmN0aW9uIChyZW5kZXJlcilcbntcbiAgICBpZih0aGlzLl9jYWNoZWRTcHJpdGUpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy9nZXQgYm91bmRzIGFjdHVhbGx5IHRyYW5zZm9ybXMgdGhlIG9iamVjdCBmb3IgdXMgYWxyZWFkeSFcbiAgICB2YXIgYm91bmRzID0gdGhpcy5nZXRMb2NhbEJvdW5kcygpO1xuXG4gICAgdmFyIGNhY2hlZFJlbmRlclRhcmdldCA9IHJlbmRlcmVyLmNvbnRleHQ7XG5cbiAgICB2YXIgcmVuZGVyVGV4dHVyZSA9IG5ldyBjb3JlLlJlbmRlclRleHR1cmUocmVuZGVyZXIsIGJvdW5kcy53aWR0aCB8IDAsIGJvdW5kcy5oZWlnaHQgfCAwKTtcblxuICAgIC8vIG5lZWQgdG8gc2V0IC8vXG4gICAgdmFyIG0gPSBfdGVtcE1hdHJpeDtcblxuICAgIG0udHggPSAtYm91bmRzLng7XG4gICAgbS50eSA9IC1ib3VuZHMueTtcblxuICAgIC8vIHNldCBhbGwgcHJvcGVydGllcyB0byB0aGVyZSBvcmlnaW5hbCBzbyB3ZSBjYW4gcmVuZGVyIHRvIGEgdGV4dHVyZVxuICAgIHRoaXMucmVuZGVyQ2FudmFzID0gdGhpcy5fb3JpZ2luYWxSZW5kZXJDYW52YXM7XG5cbiAgICByZW5kZXJUZXh0dXJlLnJlbmRlcih0aGlzLCBtLCB0cnVlKTtcblxuICAgIC8vIG5vdyByZXN0b3JlIHRoZSBzdGF0ZSBiZSBzZXR0aW5nIHRoZSBuZXcgcHJvcGVydGllc1xuICAgIHJlbmRlcmVyLmNvbnRleHQgPSBjYWNoZWRSZW5kZXJUYXJnZXQ7XG5cbiAgICB0aGlzLnJlbmRlckNhbnZhcyA9IHRoaXMuX3JlbmRlckNhY2hlZENhbnZhcztcbiAgICB0aGlzLnVwZGF0ZVRyYW5zZm9ybSA9IHRoaXMuZGlzcGxheU9iamVjdFVwZGF0ZVRyYW5zZm9ybTtcbiAgICB0aGlzLmdldEJvdW5kcyAgPSB0aGlzLl9nZXRDYWNoZWRCb3VuZHM7XG5cblxuICAgIC8vIGNyZWF0ZSBvdXIgY2FjaGVkIHNwcml0ZVxuICAgIHRoaXMuX2NhY2hlZFNwcml0ZSA9IG5ldyBjb3JlLlNwcml0ZShyZW5kZXJUZXh0dXJlKTtcbiAgICB0aGlzLl9jYWNoZWRTcHJpdGUud29ybGRUcmFuc2Zvcm0gPSB0aGlzLndvcmxkVHJhbnNmb3JtO1xuICAgIHRoaXMuX2NhY2hlZFNwcml0ZS5hbmNob3IueCA9IC0oIGJvdW5kcy54IC8gYm91bmRzLndpZHRoICk7XG4gICAgdGhpcy5fY2FjaGVkU3ByaXRlLmFuY2hvci55ID0gLSggYm91bmRzLnkgLyBib3VuZHMuaGVpZ2h0ICk7XG5cbiAgICB0aGlzLnVwZGF0ZVRyYW5zZm9ybSgpO1xuXG4gICAgdGhpcy5jb250YWluc1BvaW50ID0gdGhpcy5fY2FjaGVkU3ByaXRlLmNvbnRhaW5zUG9pbnQuYmluZCh0aGlzLl9jYWNoZWRTcHJpdGUpO1xufTtcblxuLyoqXG4qIENhbGN1bGF0ZXMgdGhlIGJvdW5kcyBvZiB0aGUgY2FjaGVkIHNwcml0ZVxuKlxuKiBAcHJpdmF0ZVxuKi9cbkRpc3BsYXlPYmplY3QucHJvdG90eXBlLl9nZXRDYWNoZWRCb3VuZHMgPSBmdW5jdGlvbiAoKVxue1xuICAgIHRoaXMuX2NhY2hlZFNwcml0ZS5fY3VycmVudEJvdW5kcyA9IG51bGw7XG5cbiAgICByZXR1cm4gdGhpcy5fY2FjaGVkU3ByaXRlLmdldEJvdW5kcygpO1xufTtcblxuLyoqXG4qIERlc3Ryb3lzIHRoZSBjYWNoZWQgc3ByaXRlLlxuKlxuKiBAcHJpdmF0ZVxuKi9cbkRpc3BsYXlPYmplY3QucHJvdG90eXBlLl9kZXN0cm95Q2FjaGVkRGlzcGxheU9iamVjdCA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy5fY2FjaGVkU3ByaXRlLl90ZXh0dXJlLmRlc3Ryb3koKTtcbiAgICB0aGlzLl9jYWNoZWRTcHJpdGUgPSBudWxsO1xufTtcblxuRGlzcGxheU9iamVjdC5wcm90b3R5cGUuX2NhY2hlQXNCaXRtYXBEZXN0cm95ID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLmNhY2hlQXNCaXRtYXAgPSBmYWxzZTtcbiAgICB0aGlzLl9vcmlnaW5hbERlc3Ryb3koKTtcbn07XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uL2NvcmUnKTtcblxuLyoqXG4gKiBUaGUgaW5zdGFuY2UgbmFtZSBvZiB0aGUgb2JqZWN0LlxuICpcbiAqIEBtZW1iZXJvZiBQSVhJLkRpc3BsYXlPYmplY3QjXG4gKiBAbWVtYmVyIHtzdHJpbmd9XG4gKi9cbmNvcmUuRGlzcGxheU9iamVjdC5wcm90b3R5cGUubmFtZSA9IG51bGw7XG5cbi8qKlxuKiBSZXR1cm5zIHRoZSBkaXNwbGF5IG9iamVjdCBpbiB0aGUgY29udGFpbmVyXG4qXG4qIEBtZW1iZXJvZiBQSVhJLkNvbnRhaW5lciNcbiogQHBhcmFtIG5hbWUge3N0cmluZ30gaW5zdGFuY2UgbmFtZVxuKiBAcmV0dXJuIHtQSVhJLkRpc3BsYXlPYmplY3R9XG4qL1xuY29yZS5Db250YWluZXIucHJvdG90eXBlLmdldENoaWxkQnlOYW1lID0gZnVuY3Rpb24gKG5hbWUpXG57XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmNoaWxkcmVuLmxlbmd0aDsgaSsrKVxuICAgIHtcbiAgICAgICAgaWYgKHRoaXMuY2hpbGRyZW5baV0ubmFtZSA9PT0gbmFtZSlcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY2hpbGRyZW5baV07XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG59O1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi9jb3JlJyk7XG5cbi8qKlxuKiBSZXR1cm5zIHRoZSBnbG9iYWwgcG9zaXRpb24gb2YgdGhlIGRpc3BsYXlPYmplY3RcbipcbiogQG1lbWJlcm9mIFBJWEkuRGlzcGxheU9iamVjdCNcbiogQHBhcmFtIHBvaW50IHtQb2ludH0gdGhlIHBvaW50IHRvIHdyaXRlIHRoZSBnbG9iYWwgdmFsdWUgdG8uIElmIG51bGwgYSBuZXcgcG9pbnQgd2lsbCBiZSByZXR1cm5lZFxuKiBAcmV0dXJuIHtQb2ludH1cbiovXG5jb3JlLkRpc3BsYXlPYmplY3QucHJvdG90eXBlLmdldEdsb2JhbFBvc2l0aW9uID0gZnVuY3Rpb24gKHBvaW50KVxue1xuICAgIHBvaW50ID0gcG9pbnQgfHwgbmV3IGNvcmUuUG9pbnQoKTtcblxuICAgIGlmKHRoaXMucGFyZW50KVxuICAgIHtcbiAgICAgICAgdGhpcy5kaXNwbGF5T2JqZWN0VXBkYXRlVHJhbnNmb3JtKCk7XG5cbiAgICAgICAgcG9pbnQueCA9IHRoaXMud29ybGRUcmFuc2Zvcm0udHg7XG4gICAgICAgIHBvaW50LnkgPSB0aGlzLndvcmxkVHJhbnNmb3JtLnR5O1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICBwb2ludC54ID0gdGhpcy5wb3NpdGlvbi54O1xuICAgICAgICBwb2ludC55ID0gdGhpcy5wb3NpdGlvbi55O1xuICAgIH1cblxuICAgIHJldHVybiBwb2ludDtcbn07XG4iLCIvKipcbiAqIEBmaWxlICAgICAgICBNYWluIGV4cG9ydCBvZiB0aGUgUElYSSBleHRyYXMgbGlicmFyeVxuICogQGF1dGhvciAgICAgIE1hdCBHcm92ZXMgPG1hdEBnb29kYm95ZGlnaXRhbC5jb20+XG4gKiBAY29weXJpZ2h0ICAgMjAxMy0yMDE1IEdvb2RCb3lEaWdpdGFsXG4gKiBAbGljZW5zZSAgICAge0BsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9waXhpanMvcGl4aS5qcy9ibG9iL21hc3Rlci9MSUNFTlNFfE1JVCBMaWNlbnNlfVxuICovXG5cbnJlcXVpcmUoJy4vY2FjaGVBc0JpdG1hcCcpO1xucmVxdWlyZSgnLi9nZXRDaGlsZEJ5TmFtZScpO1xucmVxdWlyZSgnLi9nZXRHbG9iYWxQb3NpdGlvbicpO1xuXG4vKipcbiAqIEBuYW1lc3BhY2UgUElYSS5leHRyYXNcbiAqL1xubW9kdWxlLmV4cG9ydHMgPSB7XG4gICAgTW92aWVDbGlwOiAgICAgIHJlcXVpcmUoJy4vTW92aWVDbGlwJyksXG4gICAgVGlsaW5nU3ByaXRlOiAgIHJlcXVpcmUoJy4vVGlsaW5nU3ByaXRlJyksXG4gICAgQml0bWFwVGV4dDogICAgIHJlcXVpcmUoJy4vQml0bWFwVGV4dCcpXG59O1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi8uLi9jb3JlJyk7XG4vLyBAc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9zdWJzdGFjay9icmZzL2lzc3Vlcy8yNVxuXG5cbi8vIFRPRE8gKGNlbmdsZXIpIC0gVGhlIFkgaXMgZmxpcHBlZCBpbiB0aGlzIHNoYWRlciBmb3Igc29tZSByZWFzb24uXG5cbi8qKlxuICogQGF1dGhvciBWaWNvIEB2aWNvY290ZWFcbiAqIG9yaWdpbmFsIHNoYWRlciA6IGh0dHBzOi8vd3d3LnNoYWRlcnRveS5jb20vdmlldy9sc3NHRGogYnkgQG1vdkFYMTNoXG4gKi9cblxuLyoqXG4gKiBBbiBBU0NJSSBmaWx0ZXIuXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLkFic3RyYWN0RmlsdGVyXG4gKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzXG4gKi9cbmZ1bmN0aW9uIEFzY2lpRmlsdGVyKClcbntcbiAgICBjb3JlLkFic3RyYWN0RmlsdGVyLmNhbGwodGhpcyxcbiAgICAgICAgLy8gdmVydGV4IHNoYWRlclxuICAgICAgICBudWxsLFxuICAgICAgICAvLyBmcmFnbWVudCBzaGFkZXJcbiAgICAgICAgXCJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcXG5cXG51bmlmb3JtIHZlYzQgZGltZW5zaW9ucztcXG51bmlmb3JtIGZsb2F0IHBpeGVsU2l6ZTtcXG51bmlmb3JtIHNhbXBsZXIyRCB1U2FtcGxlcjtcXG5cXG5mbG9hdCBjaGFyYWN0ZXIoZmxvYXQgbiwgdmVjMiBwKVxcbntcXG4gICAgcCA9IGZsb29yKHAqdmVjMig0LjAsIC00LjApICsgMi41KTtcXG4gICAgaWYgKGNsYW1wKHAueCwgMC4wLCA0LjApID09IHAueCAmJiBjbGFtcChwLnksIDAuMCwgNC4wKSA9PSBwLnkpXFxuICAgIHtcXG4gICAgICAgIGlmIChpbnQobW9kKG4vZXhwMihwLnggKyA1LjAqcC55KSwgMi4wKSkgPT0gMSkgcmV0dXJuIDEuMDtcXG4gICAgfVxcbiAgICByZXR1cm4gMC4wO1xcbn1cXG5cXG52b2lkIG1haW4oKVxcbntcXG4gICAgdmVjMiB1diA9IGdsX0ZyYWdDb29yZC54eTtcXG5cXG4gICAgdmVjMyBjb2wgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIGZsb29yKCB1diAvIHBpeGVsU2l6ZSApICogcGl4ZWxTaXplIC8gZGltZW5zaW9ucy54eSkucmdiO1xcblxcbiAgICBmbG9hdCBncmF5ID0gKGNvbC5yICsgY29sLmcgKyBjb2wuYikgLyAzLjA7XFxuXFxuICAgIGZsb2F0IG4gPSAgNjU1MzYuMDsgICAgICAgICAgICAgLy8gLlxcbiAgICBpZiAoZ3JheSA+IDAuMikgbiA9IDY1NjAwLjA7ICAgIC8vIDpcXG4gICAgaWYgKGdyYXkgPiAwLjMpIG4gPSAzMzI3NzIuMDsgICAvLyAqXFxuICAgIGlmIChncmF5ID4gMC40KSBuID0gMTUyNTUwODYuMDsgLy8gb1xcbiAgICBpZiAoZ3JheSA+IDAuNSkgbiA9IDIzMzg1MTY0LjA7IC8vICZcXG4gICAgaWYgKGdyYXkgPiAwLjYpIG4gPSAxNTI1MjAxNC4wOyAvLyA4XFxuICAgIGlmIChncmF5ID4gMC43KSBuID0gMTMxOTk0NTIuMDsgLy8gQFxcbiAgICBpZiAoZ3JheSA+IDAuOCkgbiA9IDExNTEyODEwLjA7IC8vICNcXG5cXG4gICAgdmVjMiBwID0gbW9kKCB1diAvICggcGl4ZWxTaXplICogMC41ICksIDIuMCkgLSB2ZWMyKDEuMCk7XFxuICAgIGNvbCA9IGNvbCAqIGNoYXJhY3RlcihuLCBwKTtcXG5cXG4gICAgZ2xfRnJhZ0NvbG9yID0gdmVjNChjb2wsIDEuMCk7XFxufVxcblwiLFxuICAgICAgICAvLyBjdXN0b20gdW5pZm9ybXNcbiAgICAgICAge1xuICAgICAgICAgICAgZGltZW5zaW9uczogeyB0eXBlOiAnNGZ2JywgdmFsdWU6IG5ldyBGbG9hdDMyQXJyYXkoWzAsIDAsIDAsIDBdKSB9LFxuICAgICAgICAgICAgcGl4ZWxTaXplOiAgeyB0eXBlOiAnMWYnLCB2YWx1ZTogOCB9XG4gICAgICAgIH1cbiAgICApO1xufVxuXG5Bc2NpaUZpbHRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuQWJzdHJhY3RGaWx0ZXIucHJvdG90eXBlKTtcbkFzY2lpRmlsdGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IEFzY2lpRmlsdGVyO1xubW9kdWxlLmV4cG9ydHMgPSBBc2NpaUZpbHRlcjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoQXNjaWlGaWx0ZXIucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogVGhlIHBpeGVsIHNpemUgdXNlZCBieSB0aGUgZmlsdGVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuQXNjaWlGaWx0ZXIjXG4gICAgICovXG4gICAgc2l6ZToge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVuaWZvcm1zLnBpeGVsU2l6ZS52YWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudW5pZm9ybXMucGl4ZWxTaXplLnZhbHVlID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG59KTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vLi4vY29yZScpLFxuICAgIEJsdXJYRmlsdGVyID0gcmVxdWlyZSgnLi4vYmx1ci9CbHVyWEZpbHRlcicpLFxuICAgIEJsdXJZRmlsdGVyID0gcmVxdWlyZSgnLi4vYmx1ci9CbHVyWUZpbHRlcicpO1xuXG4vKipcbiAqIFRoZSBCbG9vbUZpbHRlciBhcHBsaWVzIGEgR2F1c3NpYW4gYmx1ciB0byBhbiBvYmplY3QuXG4gKiBUaGUgc3RyZW5ndGggb2YgdGhlIGJsdXIgY2FuIGJlIHNldCBmb3IgeC0gYW5kIHktYXhpcyBzZXBhcmF0ZWx5LlxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5BYnN0cmFjdEZpbHRlclxuICogQG1lbWJlcm9mIFBJWEkuZmlsdGVyc1xuICovXG5mdW5jdGlvbiBCbG9vbUZpbHRlcigpXG57XG4gICAgY29yZS5BYnN0cmFjdEZpbHRlci5jYWxsKHRoaXMpO1xuXG4gICAgdGhpcy5ibHVyWEZpbHRlciA9IG5ldyBCbHVyWEZpbHRlcigpO1xuICAgIHRoaXMuYmx1cllGaWx0ZXIgPSBuZXcgQmx1cllGaWx0ZXIoKTtcblxuICAgIHRoaXMuZGVmYXVsdEZpbHRlciA9IG5ldyBjb3JlLkFic3RyYWN0RmlsdGVyKCk7XG59XG5cbkJsb29tRmlsdGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoY29yZS5BYnN0cmFjdEZpbHRlci5wcm90b3R5cGUpO1xuQmxvb21GaWx0ZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gQmxvb21GaWx0ZXI7XG5tb2R1bGUuZXhwb3J0cyA9IEJsb29tRmlsdGVyO1xuXG5CbG9vbUZpbHRlci5wcm90b3R5cGUuYXBwbHlGaWx0ZXIgPSBmdW5jdGlvbiAocmVuZGVyZXIsIGlucHV0LCBvdXRwdXQpXG57XG4gICAgdmFyIHJlbmRlclRhcmdldCA9IHJlbmRlcmVyLmZpbHRlck1hbmFnZXIuZ2V0UmVuZGVyVGFyZ2V0KHRydWUpO1xuXG4gICAgLy9UT0RPIC0gY29weVRleFN1YkltYWdlMkQgY291bGQgYmUgdXNlZCBoZXJlP1xuICAgIHRoaXMuZGVmYXVsdEZpbHRlci5hcHBseUZpbHRlcihyZW5kZXJlciwgaW5wdXQsIG91dHB1dCk7XG5cbiAgICB0aGlzLmJsdXJYRmlsdGVyLmFwcGx5RmlsdGVyKHJlbmRlcmVyLCBpbnB1dCwgcmVuZGVyVGFyZ2V0KTtcblxuICAgIHJlbmRlcmVyLmJsZW5kTW9kZU1hbmFnZXIuc2V0QmxlbmRNb2RlKGNvcmUuQkxFTkRfTU9ERVMuU0NSRUVOKTtcblxuICAgIHRoaXMuYmx1cllGaWx0ZXIuYXBwbHlGaWx0ZXIocmVuZGVyZXIsIHJlbmRlclRhcmdldCwgb3V0cHV0KTtcblxuICAgIHJlbmRlcmVyLmJsZW5kTW9kZU1hbmFnZXIuc2V0QmxlbmRNb2RlKGNvcmUuQkxFTkRfTU9ERVMuTk9STUFMKTtcblxuICAgIHJlbmRlcmVyLmZpbHRlck1hbmFnZXIucmV0dXJuUmVuZGVyVGFyZ2V0KHJlbmRlclRhcmdldCk7XG59O1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhCbG9vbUZpbHRlci5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBzdHJlbmd0aCBvZiBib3RoIHRoZSBibHVyWCBhbmQgYmx1clkgcHJvcGVydGllcyBzaW11bHRhbmVvdXNseVxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJPZiBQSVhJLmZpbHRlcnMuQmxvb21GaWx0ZXIjXG4gICAgICogQGRlZmF1bHQgMlxuICAgICAqL1xuICAgIGJsdXI6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5ibHVyWEZpbHRlci5ibHVyO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5ibHVyWEZpbHRlci5ibHVyID0gdGhpcy5ibHVyWUZpbHRlci5ibHVyID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgc3RyZW5ndGggb2YgdGhlIGJsdXJYIHByb3BlcnR5XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlck9mIFBJWEkuZmlsdGVycy5CbG9vbUZpbHRlciNcbiAgICAgKiBAZGVmYXVsdCAyXG4gICAgICovXG4gICAgYmx1clg6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5ibHVyWEZpbHRlci5ibHVyO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5ibHVyWEZpbHRlci5ibHVyID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgc3RyZW5ndGggb2YgdGhlIGJsdXJZIHByb3BlcnR5XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlck9mIFBJWEkuZmlsdGVycy5CbG9vbUZpbHRlciNcbiAgICAgKiBAZGVmYXVsdCAyXG4gICAgICovXG4gICAgYmx1clk6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5ibHVyWUZpbHRlci5ibHVyO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5ibHVyWUZpbHRlci5ibHVyID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG59KTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vLi4vY29yZScpO1xuXG5cbi8qKlxuICogVGhlIEJsdXJEaXJGaWx0ZXIgYXBwbGllcyBhIEdhdXNzaWFuIGJsdXIgdG93YXJkIGEgZGlyZWN0aW9uIHRvIGFuIG9iamVjdC5cbiAqXG4gKiBAY2xhc3NcbiAqIEBwYXJhbSB7bnVtYmVyfSBkaXJYXG4gKiBAcGFyYW0ge251bWJlcn0gZGlyWVxuICogQGV4dGVuZHMgUElYSS5BYnN0cmFjdEZpbHRlclxuICogQG1lbWJlcm9mIFBJWEkuZmlsdGVyc1xuICovXG5mdW5jdGlvbiBCbHVyRGlyRmlsdGVyKGRpclgsIGRpclkpXG57XG4gICAgY29yZS5BYnN0cmFjdEZpbHRlci5jYWxsKHRoaXMsXG4gICAgICAgIC8vIHZlcnRleCBzaGFkZXJcbiAgICAgICAgXCJhdHRyaWJ1dGUgdmVjMiBhVmVydGV4UG9zaXRpb247XFxuYXR0cmlidXRlIHZlYzIgYVRleHR1cmVDb29yZDtcXG5hdHRyaWJ1dGUgdmVjNCBhQ29sb3I7XFxuXFxudW5pZm9ybSBmbG9hdCBzdHJlbmd0aDtcXG51bmlmb3JtIGZsb2F0IGRpclg7XFxudW5pZm9ybSBmbG9hdCBkaXJZO1xcbnVuaWZvcm0gbWF0MyBwcm9qZWN0aW9uTWF0cml4O1xcblxcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xcbnZhcnlpbmcgdmVjNCB2Q29sb3I7XFxudmFyeWluZyB2ZWMyIHZCbHVyVGV4Q29vcmRzWzNdO1xcblxcbnZvaWQgbWFpbih2b2lkKVxcbntcXG4gICAgZ2xfUG9zaXRpb24gPSB2ZWM0KChwcm9qZWN0aW9uTWF0cml4ICogdmVjMygoYVZlcnRleFBvc2l0aW9uKSwgMS4wKSkueHksIDAuMCwgMS4wKTtcXG4gICAgdlRleHR1cmVDb29yZCA9IGFUZXh0dXJlQ29vcmQ7XFxuXFxuICAgIHZCbHVyVGV4Q29vcmRzWzBdID0gYVRleHR1cmVDb29yZCArIHZlYzIoICgwLjAwNCAqIHN0cmVuZ3RoKSAqIGRpclgsICgwLjAwNCAqIHN0cmVuZ3RoKSAqIGRpclkgKTtcXG4gICAgdkJsdXJUZXhDb29yZHNbMV0gPSBhVGV4dHVyZUNvb3JkICsgdmVjMiggKDAuMDA4ICogc3RyZW5ndGgpICogZGlyWCwgKDAuMDA4ICogc3RyZW5ndGgpICogZGlyWSApO1xcbiAgICB2Qmx1clRleENvb3Jkc1syXSA9IGFUZXh0dXJlQ29vcmQgKyB2ZWMyKCAoMC4wMTIgKiBzdHJlbmd0aCkgKiBkaXJYLCAoMC4wMTIgKiBzdHJlbmd0aCkgKiBkaXJZICk7XFxuXFxuICAgIHZDb2xvciA9IHZlYzQoYUNvbG9yLnJnYiAqIGFDb2xvci5hLCBhQ29sb3IuYSk7XFxufVxcblwiLFxuICAgICAgICAvLyBmcmFnbWVudCBzaGFkZXJcbiAgICAgICAgXCJwcmVjaXNpb24gbG93cCBmbG9hdDtcXG5cXG52YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDtcXG52YXJ5aW5nIHZlYzIgdkJsdXJUZXhDb29yZHNbM107XFxudmFyeWluZyB2ZWM0IHZDb2xvcjtcXG5cXG51bmlmb3JtIHNhbXBsZXIyRCB1U2FtcGxlcjtcXG5cXG52b2lkIG1haW4odm9pZClcXG57XFxuICAgIGdsX0ZyYWdDb2xvciA9IHZlYzQoMC4wKTtcXG5cXG4gICAgZ2xfRnJhZ0NvbG9yICs9IHRleHR1cmUyRCh1U2FtcGxlciwgdlRleHR1cmVDb29yZCAgICAgKSAqIDAuMzk4OTQyMjgwNDAxNDMyNztcXG4gICAgZ2xfRnJhZ0NvbG9yICs9IHRleHR1cmUyRCh1U2FtcGxlciwgdkJsdXJUZXhDb29yZHNbIDBdKSAqIDAuMjQxOTcwNzI0NTE5MTQ1NDtcXG4gICAgZ2xfRnJhZ0NvbG9yICs9IHRleHR1cmUyRCh1U2FtcGxlciwgdkJsdXJUZXhDb29yZHNbIDFdKSAqIDAuMDUzOTkwOTY2NTEzMTg5ODU7XFxuICAgIGdsX0ZyYWdDb2xvciArPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZCbHVyVGV4Q29vcmRzWyAyXSkgKiAwLjAwNDQzMTg0ODQxMTkzODM0MTtcXG59XFxuXCIsXG4gICAgICAgIC8vIHNldCB0aGUgdW5pZm9ybXNcbiAgICAgICAge1xuICAgICAgICAgICAgc3RyZW5ndGg6IHsgdHlwZTogJzFmJywgdmFsdWU6IDEgfSxcbiAgICAgICAgICAgIGRpclg6IHsgdHlwZTogJzFmJywgdmFsdWU6IGRpclggfHwgMCB9LFxuICAgICAgICAgICAgZGlyWTogeyB0eXBlOiAnMWYnLCB2YWx1ZTogZGlyWSB8fCAwIH1cbiAgICAgICAgfVxuICAgICk7XG5cbiAgICB0aGlzLmRlZmF1bHRGaWx0ZXIgPSBuZXcgY29yZS5BYnN0cmFjdEZpbHRlcigpO1xuXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgbnVtYmVyIG9mIHBhc3NlcyBmb3IgYmx1ci4gTW9yZSBwYXNzZXMgbWVhbnMgaGlnaGVyIHF1YWlsaXR5IGJsdXJpbmcuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMVxuICAgICAqL1xuICAgIHRoaXMucGFzc2VzID0gMTtcblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIFggZGlyZWN0aW9uIG9mIHRoZSBibHVyXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMFxuICAgICAqL1xuICAgIHRoaXMuZGlyWCA9IGRpclggfHwgMDtcblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIFkgZGlyZWN0aW9uIG9mIHRoZSBibHVyXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMFxuICAgICAqL1xuICAgIHRoaXMuZGlyWSA9IGRpclkgfHwgMDtcblxuICAgIHRoaXMuc3RyZW5ndGggPSA0O1xufVxuXG5CbHVyRGlyRmlsdGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoY29yZS5BYnN0cmFjdEZpbHRlci5wcm90b3R5cGUpO1xuQmx1ckRpckZpbHRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBCbHVyRGlyRmlsdGVyO1xubW9kdWxlLmV4cG9ydHMgPSBCbHVyRGlyRmlsdGVyO1xuXG5CbHVyRGlyRmlsdGVyLnByb3RvdHlwZS5hcHBseUZpbHRlciA9IGZ1bmN0aW9uIChyZW5kZXJlciwgaW5wdXQsIG91dHB1dCwgY2xlYXIpIHtcblxuICAgIHZhciBzaGFkZXIgPSB0aGlzLmdldFNoYWRlcihyZW5kZXJlcik7XG5cbiAgICB0aGlzLnVuaWZvcm1zLnN0cmVuZ3RoLnZhbHVlID0gdGhpcy5zdHJlbmd0aCAvIDQgLyB0aGlzLnBhc3NlcyAqIChpbnB1dC5mcmFtZS53aWR0aCAvIGlucHV0LnNpemUud2lkdGgpO1xuXG4gICAgaWYgKHRoaXMucGFzc2VzID09PSAxKSB7XG4gICAgICAgIHJlbmRlcmVyLmZpbHRlck1hbmFnZXIuYXBwbHlGaWx0ZXIoc2hhZGVyLCBpbnB1dCwgb3V0cHV0LCBjbGVhcik7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgdmFyIHJlbmRlclRhcmdldCA9IHJlbmRlcmVyLmZpbHRlck1hbmFnZXIuZ2V0UmVuZGVyVGFyZ2V0KHRydWUpO1xuXG4gICAgICAgIHJlbmRlcmVyLmZpbHRlck1hbmFnZXIuYXBwbHlGaWx0ZXIoc2hhZGVyLCBpbnB1dCwgcmVuZGVyVGFyZ2V0LCBjbGVhcik7XG5cbiAgICAgICAgZm9yKHZhciBpID0gMDsgaSA8IHRoaXMucGFzc2VzLTI7IGkrKylcbiAgICAgICAge1xuICAgICAgICAgICAgLy90aGlzLnVuaWZvcm1zLnN0cmVuZ3RoLnZhbHVlID0gdGhpcy5zdHJlbmd0aCAvIDQgLyAodGhpcy5wYXNzZXMrKGkqMikpICogKGlucHV0LmZyYW1lLndpZHRoIC8gaW5wdXQuc2l6ZS53aWR0aCk7XG4gICAgICAgICAgICByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLmFwcGx5RmlsdGVyKHNoYWRlciwgcmVuZGVyVGFyZ2V0LCByZW5kZXJUYXJnZXQsIGNsZWFyKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJlbmRlcmVyLmZpbHRlck1hbmFnZXIuYXBwbHlGaWx0ZXIoc2hhZGVyLCByZW5kZXJUYXJnZXQsIG91dHB1dCwgY2xlYXIpO1xuXG4gICAgICAgIHJlbmRlcmVyLmZpbHRlck1hbmFnZXIucmV0dXJuUmVuZGVyVGFyZ2V0KHJlbmRlclRhcmdldCk7XG4gICAgfVxufTtcblxuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhCbHVyRGlyRmlsdGVyLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIHN0cmVuZ3RoIG9mIGJvdGggdGhlIGJsdXIuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5CbHVyRGlyRmlsdGVyI1xuICAgICAqIEBkZWZhdWx0IDJcbiAgICAgKi9cbiAgICBibHVyOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuc3RyZW5ndGg7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnBhZGRpbmcgPSB2YWx1ZSAqIDAuNTtcbiAgICAgICAgICAgIHRoaXMuc3RyZW5ndGggPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgWCBkaXJlY3Rpb24gb2YgdGhlIGJsdXIuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5CbHVyWUZpbHRlciNcbiAgICAgKiBAZGVmYXVsdCAwXG4gICAgICovXG4gICAgZGlyWDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmRpclg7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLmRpclgudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgWSBkaXJlY3Rpb24gb2YgdGhlIGJsdXIuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5CbHVyRGlyRmlsdGVyI1xuICAgICAqIEBkZWZhdWx0IDBcbiAgICAgKi9cbiAgICBkaXJZOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZGlyWTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudW5pZm9ybXMuZGlyWS52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfVxufSk7XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uLy4uL2NvcmUnKSxcbiAgICBCbHVyWEZpbHRlciA9IHJlcXVpcmUoJy4vQmx1clhGaWx0ZXInKSxcbiAgICBCbHVyWUZpbHRlciA9IHJlcXVpcmUoJy4vQmx1cllGaWx0ZXInKTtcblxuLyoqXG4gKiBUaGUgQmx1ckZpbHRlciBhcHBsaWVzIGEgR2F1c3NpYW4gYmx1ciB0byBhbiBvYmplY3QuXG4gKiBUaGUgc3RyZW5ndGggb2YgdGhlIGJsdXIgY2FuIGJlIHNldCBmb3IgeC0gYW5kIHktYXhpcyBzZXBhcmF0ZWx5LlxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5BYnN0cmFjdEZpbHRlclxuICogQG1lbWJlcm9mIFBJWEkuZmlsdGVyc1xuICovXG5mdW5jdGlvbiBCbHVyRmlsdGVyKClcbntcbiAgICBjb3JlLkFic3RyYWN0RmlsdGVyLmNhbGwodGhpcyk7XG5cbiAgICB0aGlzLmJsdXJYRmlsdGVyID0gbmV3IEJsdXJYRmlsdGVyKCk7XG4gICAgdGhpcy5ibHVyWUZpbHRlciA9IG5ldyBCbHVyWUZpbHRlcigpO1xufVxuXG5CbHVyRmlsdGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoY29yZS5BYnN0cmFjdEZpbHRlci5wcm90b3R5cGUpO1xuQmx1ckZpbHRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBCbHVyRmlsdGVyO1xubW9kdWxlLmV4cG9ydHMgPSBCbHVyRmlsdGVyO1xuXG5CbHVyRmlsdGVyLnByb3RvdHlwZS5hcHBseUZpbHRlciA9IGZ1bmN0aW9uIChyZW5kZXJlciwgaW5wdXQsIG91dHB1dClcbntcbiAgICB2YXIgcmVuZGVyVGFyZ2V0ID0gcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5nZXRSZW5kZXJUYXJnZXQodHJ1ZSk7XG5cbiAgICB0aGlzLmJsdXJYRmlsdGVyLmFwcGx5RmlsdGVyKHJlbmRlcmVyLCBpbnB1dCwgcmVuZGVyVGFyZ2V0KTtcbiAgICB0aGlzLmJsdXJZRmlsdGVyLmFwcGx5RmlsdGVyKHJlbmRlcmVyLCByZW5kZXJUYXJnZXQsIG91dHB1dCk7XG5cbiAgICByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLnJldHVyblJlbmRlclRhcmdldChyZW5kZXJUYXJnZXQpO1xufTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoQmx1ckZpbHRlci5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBzdHJlbmd0aCBvZiBib3RoIHRoZSBibHVyWCBhbmQgYmx1clkgcHJvcGVydGllcyBzaW11bHRhbmVvdXNseVxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJPZiBQSVhJLmZpbHRlcnMuQmx1ckZpbHRlciNcbiAgICAgKiBAZGVmYXVsdCAyXG4gICAgICovXG4gICAgYmx1cjoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmJsdXJYRmlsdGVyLmJsdXI7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnBhZGRpbmcgPSBNYXRoLmFicyh2YWx1ZSkgKiAwLjU7XG4gICAgICAgICAgICB0aGlzLmJsdXJYRmlsdGVyLmJsdXIgPSB0aGlzLmJsdXJZRmlsdGVyLmJsdXIgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBudW1iZXIgb2YgcGFzc2VzIGZvciBibHVyLiBNb3JlIHBhc3NlcyBtZWFucyBoaWdoZXIgcXVhaWxpdHkgYmx1cmluZy5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLkJsdXJZRmlsdGVyI1xuICAgICAqIEBkZWZhdWx0IDFcbiAgICAgKi9cbiAgICBwYXNzZXM6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gIHRoaXMuYmx1clhGaWx0ZXIucGFzc2VzO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5ibHVyWEZpbHRlci5wYXNzZXMgPSB0aGlzLmJsdXJZRmlsdGVyLnBhc3NlcyA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIHN0cmVuZ3RoIG9mIHRoZSBibHVyWCBwcm9wZXJ0eVxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJPZiBQSVhJLmZpbHRlcnMuQmx1ckZpbHRlciNcbiAgICAgKiBAZGVmYXVsdCAyXG4gICAgICovXG4gICAgYmx1clg6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5ibHVyWEZpbHRlci5ibHVyO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5ibHVyWEZpbHRlci5ibHVyID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgc3RyZW5ndGggb2YgdGhlIGJsdXJZIHByb3BlcnR5XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlck9mIFBJWEkuZmlsdGVycy5CbHVyRmlsdGVyI1xuICAgICAqIEBkZWZhdWx0IDJcbiAgICAgKi9cbiAgICBibHVyWToge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmJsdXJZRmlsdGVyLmJsdXI7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmJsdXJZRmlsdGVyLmJsdXIgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi8uLi9jb3JlJyk7XG4vLyBAc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9zdWJzdGFjay9icmZzL2lzc3Vlcy8yNVxuXG5cbi8qKlxuICogVGhlIEJsdXJYRmlsdGVyIGFwcGxpZXMgYSBob3Jpem9udGFsIEdhdXNzaWFuIGJsdXIgdG8gYW4gb2JqZWN0LlxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5BYnN0cmFjdEZpbHRlclxuICogQG1lbWJlcm9mIFBJWEkuZmlsdGVyc1xuICovXG5mdW5jdGlvbiBCbHVyWEZpbHRlcigpXG57XG4gICAgY29yZS5BYnN0cmFjdEZpbHRlci5jYWxsKHRoaXMsXG4gICAgICAgIC8vIHZlcnRleCBzaGFkZXJcbiAgICAgICAgXCJhdHRyaWJ1dGUgdmVjMiBhVmVydGV4UG9zaXRpb247XFxuYXR0cmlidXRlIHZlYzIgYVRleHR1cmVDb29yZDtcXG5hdHRyaWJ1dGUgdmVjNCBhQ29sb3I7XFxuXFxudW5pZm9ybSBmbG9hdCBzdHJlbmd0aDtcXG51bmlmb3JtIG1hdDMgcHJvamVjdGlvbk1hdHJpeDtcXG5cXG52YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDtcXG52YXJ5aW5nIHZlYzQgdkNvbG9yO1xcbnZhcnlpbmcgdmVjMiB2Qmx1clRleENvb3Jkc1s2XTtcXG5cXG52b2lkIG1haW4odm9pZClcXG57XFxuICAgIGdsX1Bvc2l0aW9uID0gdmVjNCgocHJvamVjdGlvbk1hdHJpeCAqIHZlYzMoKGFWZXJ0ZXhQb3NpdGlvbiksIDEuMCkpLnh5LCAwLjAsIDEuMCk7XFxuICAgIHZUZXh0dXJlQ29vcmQgPSBhVGV4dHVyZUNvb3JkO1xcblxcbiAgICB2Qmx1clRleENvb3Jkc1sgMF0gPSBhVGV4dHVyZUNvb3JkICsgdmVjMigtMC4wMTIgKiBzdHJlbmd0aCwgMC4wKTtcXG4gICAgdkJsdXJUZXhDb29yZHNbIDFdID0gYVRleHR1cmVDb29yZCArIHZlYzIoLTAuMDA4ICogc3RyZW5ndGgsIDAuMCk7XFxuICAgIHZCbHVyVGV4Q29vcmRzWyAyXSA9IGFUZXh0dXJlQ29vcmQgKyB2ZWMyKC0wLjAwNCAqIHN0cmVuZ3RoLCAwLjApO1xcbiAgICB2Qmx1clRleENvb3Jkc1sgM10gPSBhVGV4dHVyZUNvb3JkICsgdmVjMiggMC4wMDQgKiBzdHJlbmd0aCwgMC4wKTtcXG4gICAgdkJsdXJUZXhDb29yZHNbIDRdID0gYVRleHR1cmVDb29yZCArIHZlYzIoIDAuMDA4ICogc3RyZW5ndGgsIDAuMCk7XFxuICAgIHZCbHVyVGV4Q29vcmRzWyA1XSA9IGFUZXh0dXJlQ29vcmQgKyB2ZWMyKCAwLjAxMiAqIHN0cmVuZ3RoLCAwLjApO1xcblxcbiAgICB2Q29sb3IgPSB2ZWM0KGFDb2xvci5yZ2IgKiBhQ29sb3IuYSwgYUNvbG9yLmEpO1xcbn1cXG5cIixcbiAgICAgICAgLy8gZnJhZ21lbnQgc2hhZGVyXG4gICAgICAgIFwicHJlY2lzaW9uIGxvd3AgZmxvYXQ7XFxuXFxudmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7XFxudmFyeWluZyB2ZWMyIHZCbHVyVGV4Q29vcmRzWzZdO1xcbnZhcnlpbmcgdmVjNCB2Q29sb3I7XFxuXFxudW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXI7XFxuXFxudm9pZCBtYWluKHZvaWQpXFxue1xcbiAgICBnbF9GcmFnQ29sb3IgPSB2ZWM0KDAuMCk7XFxuXFxuICAgIGdsX0ZyYWdDb2xvciArPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZCbHVyVGV4Q29vcmRzWyAwXSkqMC4wMDQ0MzE4NDg0MTE5MzgzNDE7XFxuICAgIGdsX0ZyYWdDb2xvciArPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZCbHVyVGV4Q29vcmRzWyAxXSkqMC4wNTM5OTA5NjY1MTMxODk4NTtcXG4gICAgZ2xfRnJhZ0NvbG9yICs9IHRleHR1cmUyRCh1U2FtcGxlciwgdkJsdXJUZXhDb29yZHNbIDJdKSowLjI0MTk3MDcyNDUxOTE0NTQ7XFxuICAgIGdsX0ZyYWdDb2xvciArPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZUZXh0dXJlQ29vcmQgICAgICkqMC4zOTg5NDIyODA0MDE0MzI3O1xcbiAgICBnbF9GcmFnQ29sb3IgKz0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2Qmx1clRleENvb3Jkc1sgM10pKjAuMjQxOTcwNzI0NTE5MTQ1NDtcXG4gICAgZ2xfRnJhZ0NvbG9yICs9IHRleHR1cmUyRCh1U2FtcGxlciwgdkJsdXJUZXhDb29yZHNbIDRdKSowLjA1Mzk5MDk2NjUxMzE4OTg1O1xcbiAgICBnbF9GcmFnQ29sb3IgKz0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2Qmx1clRleENvb3Jkc1sgNV0pKjAuMDA0NDMxODQ4NDExOTM4MzQxO1xcbn1cXG5cIixcbiAgICAgICAgLy8gc2V0IHRoZSB1bmlmb3Jtc1xuICAgICAgICB7XG4gICAgICAgICAgICBzdHJlbmd0aDogeyB0eXBlOiAnMWYnLCB2YWx1ZTogMSB9XG4gICAgICAgIH1cbiAgICApO1xuXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgbnVtYmVyIG9mIHBhc3NlcyBmb3IgYmx1ci4gTW9yZSBwYXNzZXMgbWVhbnMgaGlnaGVyIHF1YWlsaXR5IGJsdXJpbmcuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMVxuICAgICAqL1xuICAgIHRoaXMucGFzc2VzID0gMTtcblxuICAgIHRoaXMuc3RyZW5ndGggPSA0O1xufVxuXG5CbHVyWEZpbHRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuQWJzdHJhY3RGaWx0ZXIucHJvdG90eXBlKTtcbkJsdXJYRmlsdGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IEJsdXJYRmlsdGVyO1xubW9kdWxlLmV4cG9ydHMgPSBCbHVyWEZpbHRlcjtcblxuQmx1clhGaWx0ZXIucHJvdG90eXBlLmFwcGx5RmlsdGVyID0gZnVuY3Rpb24gKHJlbmRlcmVyLCBpbnB1dCwgb3V0cHV0LCBjbGVhcilcbntcbiAgICB2YXIgc2hhZGVyID0gdGhpcy5nZXRTaGFkZXIocmVuZGVyZXIpO1xuXG4gICAgdGhpcy51bmlmb3Jtcy5zdHJlbmd0aC52YWx1ZSA9IHRoaXMuc3RyZW5ndGggLyA0IC8gdGhpcy5wYXNzZXMgKiAoaW5wdXQuZnJhbWUud2lkdGggLyBpbnB1dC5zaXplLndpZHRoKTtcblxuICAgIGlmKHRoaXMucGFzc2VzID09PSAxKVxuICAgIHtcbiAgICAgICAgcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5hcHBseUZpbHRlcihzaGFkZXIsIGlucHV0LCBvdXRwdXQsIGNsZWFyKTtcbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgdmFyIHJlbmRlclRhcmdldCA9IHJlbmRlcmVyLmZpbHRlck1hbmFnZXIuZ2V0UmVuZGVyVGFyZ2V0KHRydWUpO1xuICAgICAgICB2YXIgZmxpcCA9IGlucHV0O1xuICAgICAgICB2YXIgZmxvcCA9IHJlbmRlclRhcmdldDtcblxuICAgICAgICBmb3IodmFyIGkgPSAwOyBpIDwgdGhpcy5wYXNzZXMtMTsgaSsrKVxuICAgICAgICB7XG4gICAgICAgICAgICByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLmFwcGx5RmlsdGVyKHNoYWRlciwgZmxpcCwgZmxvcCwgdHJ1ZSk7XG5cbiAgICAgICAgICAgdmFyIHRlbXAgPSBmbG9wO1xuICAgICAgICAgICBmbG9wID0gZmxpcDtcbiAgICAgICAgICAgZmxpcCA9IHRlbXA7XG4gICAgICAgIH1cblxuICAgICAgICByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLmFwcGx5RmlsdGVyKHNoYWRlciwgZmxpcCwgb3V0cHV0LCBjbGVhcik7XG5cbiAgICAgICAgcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5yZXR1cm5SZW5kZXJUYXJnZXQocmVuZGVyVGFyZ2V0KTtcbiAgICB9XG59O1xuXG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKEJsdXJYRmlsdGVyLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIHN0cmVuZ3RoIG9mIGJvdGggdGhlIGJsdXIuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5CbHVyWEZpbHRlciNcbiAgICAgKiBAZGVmYXVsdCAyXG4gICAgICovXG4gICAgYmx1cjoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiAgdGhpcy5zdHJlbmd0aDtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMucGFkZGluZyA9ICBNYXRoLmFicyh2YWx1ZSkgKiAwLjU7XG4gICAgICAgICAgICB0aGlzLnN0cmVuZ3RoID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG59KTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vLi4vY29yZScpO1xuLy8gQHNlZSBodHRwczovL2dpdGh1Yi5jb20vc3Vic3RhY2svYnJmcy9pc3N1ZXMvMjVcblxuXG4vKipcbiAqIFRoZSBCbHVyWUZpbHRlciBhcHBsaWVzIGEgaG9yaXpvbnRhbCBHYXVzc2lhbiBibHVyIHRvIGFuIG9iamVjdC5cbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQWJzdHJhY3RGaWx0ZXJcbiAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnNcbiAqL1xuZnVuY3Rpb24gQmx1cllGaWx0ZXIoKVxue1xuICAgIGNvcmUuQWJzdHJhY3RGaWx0ZXIuY2FsbCh0aGlzLFxuICAgICAgICAvLyB2ZXJ0ZXggc2hhZGVyXG4gICAgICAgIFwiYXR0cmlidXRlIHZlYzIgYVZlcnRleFBvc2l0aW9uO1xcbmF0dHJpYnV0ZSB2ZWMyIGFUZXh0dXJlQ29vcmQ7XFxuYXR0cmlidXRlIHZlYzQgYUNvbG9yO1xcblxcbnVuaWZvcm0gZmxvYXQgc3RyZW5ndGg7XFxudW5pZm9ybSBtYXQzIHByb2plY3Rpb25NYXRyaXg7XFxuXFxudmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7XFxudmFyeWluZyB2ZWM0IHZDb2xvcjtcXG52YXJ5aW5nIHZlYzIgdkJsdXJUZXhDb29yZHNbNl07XFxuXFxudm9pZCBtYWluKHZvaWQpXFxue1xcbiAgICBnbF9Qb3NpdGlvbiA9IHZlYzQoKHByb2plY3Rpb25NYXRyaXggKiB2ZWMzKChhVmVydGV4UG9zaXRpb24pLCAxLjApKS54eSwgMC4wLCAxLjApO1xcbiAgICB2VGV4dHVyZUNvb3JkID0gYVRleHR1cmVDb29yZDtcXG5cXG4gICAgdkJsdXJUZXhDb29yZHNbIDBdID0gYVRleHR1cmVDb29yZCArIHZlYzIoMC4wLCAtMC4wMTIgKiBzdHJlbmd0aCk7XFxuICAgIHZCbHVyVGV4Q29vcmRzWyAxXSA9IGFUZXh0dXJlQ29vcmQgKyB2ZWMyKDAuMCwgLTAuMDA4ICogc3RyZW5ndGgpO1xcbiAgICB2Qmx1clRleENvb3Jkc1sgMl0gPSBhVGV4dHVyZUNvb3JkICsgdmVjMigwLjAsIC0wLjAwNCAqIHN0cmVuZ3RoKTtcXG4gICAgdkJsdXJUZXhDb29yZHNbIDNdID0gYVRleHR1cmVDb29yZCArIHZlYzIoMC4wLCAgMC4wMDQgKiBzdHJlbmd0aCk7XFxuICAgIHZCbHVyVGV4Q29vcmRzWyA0XSA9IGFUZXh0dXJlQ29vcmQgKyB2ZWMyKDAuMCwgIDAuMDA4ICogc3RyZW5ndGgpO1xcbiAgICB2Qmx1clRleENvb3Jkc1sgNV0gPSBhVGV4dHVyZUNvb3JkICsgdmVjMigwLjAsICAwLjAxMiAqIHN0cmVuZ3RoKTtcXG5cXG4gICB2Q29sb3IgPSB2ZWM0KGFDb2xvci5yZ2IgKiBhQ29sb3IuYSwgYUNvbG9yLmEpO1xcbn1cXG5cIixcbiAgICAgICAgLy8gZnJhZ21lbnQgc2hhZGVyXG4gICAgICAgIFwicHJlY2lzaW9uIGxvd3AgZmxvYXQ7XFxuXFxudmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7XFxudmFyeWluZyB2ZWMyIHZCbHVyVGV4Q29vcmRzWzZdO1xcbnZhcnlpbmcgdmVjNCB2Q29sb3I7XFxuXFxudW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXI7XFxuXFxudm9pZCBtYWluKHZvaWQpXFxue1xcbiAgICBnbF9GcmFnQ29sb3IgPSB2ZWM0KDAuMCk7XFxuXFxuICAgIGdsX0ZyYWdDb2xvciArPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZCbHVyVGV4Q29vcmRzWyAwXSkqMC4wMDQ0MzE4NDg0MTE5MzgzNDE7XFxuICAgIGdsX0ZyYWdDb2xvciArPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZCbHVyVGV4Q29vcmRzWyAxXSkqMC4wNTM5OTA5NjY1MTMxODk4NTtcXG4gICAgZ2xfRnJhZ0NvbG9yICs9IHRleHR1cmUyRCh1U2FtcGxlciwgdkJsdXJUZXhDb29yZHNbIDJdKSowLjI0MTk3MDcyNDUxOTE0NTQ7XFxuICAgIGdsX0ZyYWdDb2xvciArPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZUZXh0dXJlQ29vcmQgICAgICkqMC4zOTg5NDIyODA0MDE0MzI3O1xcbiAgICBnbF9GcmFnQ29sb3IgKz0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2Qmx1clRleENvb3Jkc1sgM10pKjAuMjQxOTcwNzI0NTE5MTQ1NDtcXG4gICAgZ2xfRnJhZ0NvbG9yICs9IHRleHR1cmUyRCh1U2FtcGxlciwgdkJsdXJUZXhDb29yZHNbIDRdKSowLjA1Mzk5MDk2NjUxMzE4OTg1O1xcbiAgICBnbF9GcmFnQ29sb3IgKz0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2Qmx1clRleENvb3Jkc1sgNV0pKjAuMDA0NDMxODQ4NDExOTM4MzQxO1xcbn1cXG5cIixcbiAgICAgICAgLy8gc2V0IHRoZSB1bmlmb3Jtc1xuICAgICAgICB7XG4gICAgICAgICAgICBzdHJlbmd0aDogeyB0eXBlOiAnMWYnLCB2YWx1ZTogMSB9XG4gICAgICAgIH1cbiAgICApO1xuXG4gICAgdGhpcy5wYXNzZXMgPSAxO1xuICAgIHRoaXMuc3RyZW5ndGggPSA0O1xufVxuXG5CbHVyWUZpbHRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuQWJzdHJhY3RGaWx0ZXIucHJvdG90eXBlKTtcbkJsdXJZRmlsdGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IEJsdXJZRmlsdGVyO1xubW9kdWxlLmV4cG9ydHMgPSBCbHVyWUZpbHRlcjtcblxuQmx1cllGaWx0ZXIucHJvdG90eXBlLmFwcGx5RmlsdGVyID0gZnVuY3Rpb24gKHJlbmRlcmVyLCBpbnB1dCwgb3V0cHV0LCBjbGVhcilcbntcbiAgICB2YXIgc2hhZGVyID0gdGhpcy5nZXRTaGFkZXIocmVuZGVyZXIpO1xuXG4gICAgdGhpcy51bmlmb3Jtcy5zdHJlbmd0aC52YWx1ZSA9IE1hdGguYWJzKHRoaXMuc3RyZW5ndGgpIC8gNCAvIHRoaXMucGFzc2VzICogKGlucHV0LmZyYW1lLmhlaWdodCAvIGlucHV0LnNpemUuaGVpZ2h0KTtcblxuICAgIGlmKHRoaXMucGFzc2VzID09PSAxKVxuICAgIHtcbiAgICAgICAgcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5hcHBseUZpbHRlcihzaGFkZXIsIGlucHV0LCBvdXRwdXQsIGNsZWFyKTtcbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgdmFyIHJlbmRlclRhcmdldCA9IHJlbmRlcmVyLmZpbHRlck1hbmFnZXIuZ2V0UmVuZGVyVGFyZ2V0KHRydWUpO1xuICAgICAgICB2YXIgZmxpcCA9IGlucHV0O1xuICAgICAgICB2YXIgZmxvcCA9IHJlbmRlclRhcmdldDtcblxuICAgICAgICBmb3IodmFyIGkgPSAwOyBpIDwgdGhpcy5wYXNzZXMtMTsgaSsrKVxuICAgICAgICB7XG4gICAgICAgICAgICByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLmFwcGx5RmlsdGVyKHNoYWRlciwgZmxpcCwgZmxvcCwgdHJ1ZSk7XG5cbiAgICAgICAgICAgdmFyIHRlbXAgPSBmbG9wO1xuICAgICAgICAgICBmbG9wID0gZmxpcDtcbiAgICAgICAgICAgZmxpcCA9IHRlbXA7XG4gICAgICAgIH1cblxuICAgICAgICByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLmFwcGx5RmlsdGVyKHNoYWRlciwgZmxpcCwgb3V0cHV0LCBjbGVhcik7XG5cbiAgICAgICAgcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5yZXR1cm5SZW5kZXJUYXJnZXQocmVuZGVyVGFyZ2V0KTtcbiAgICB9XG59O1xuXG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKEJsdXJZRmlsdGVyLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIHN0cmVuZ3RoIG9mIGJvdGggdGhlIGJsdXIuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5CbHVyWUZpbHRlciNcbiAgICAgKiBAZGVmYXVsdCAyXG4gICAgICovXG4gICAgYmx1cjoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiAgdGhpcy5zdHJlbmd0aDtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMucGFkZGluZyA9IE1hdGguYWJzKHZhbHVlKSAqIDAuNTtcbiAgICAgICAgICAgIHRoaXMuc3RyZW5ndGggPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi8uLi9jb3JlJyk7XG4vLyBAc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9zdWJzdGFjay9icmZzL2lzc3Vlcy8yNVxuXG5cbi8qKlxuICogQSBTbWFydCBCbHVyIEZpbHRlci5cbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQWJzdHJhY3RGaWx0ZXJcbiAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnNcbiAqL1xuZnVuY3Rpb24gU21hcnRCbHVyRmlsdGVyKClcbntcbiAgICBjb3JlLkFic3RyYWN0RmlsdGVyLmNhbGwodGhpcyxcbiAgICAgICAgLy8gdmVydGV4IHNoYWRlclxuICAgICAgICBudWxsLFxuICAgICAgICAvLyBmcmFnbWVudCBzaGFkZXJcbiAgICAgICAgXCJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcXG5cXG52YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDtcXG5cXG51bmlmb3JtIHNhbXBsZXIyRCB1U2FtcGxlcjtcXG51bmlmb3JtIHZlYzIgZGVsdGE7XFxuXFxuZmxvYXQgcmFuZG9tKHZlYzMgc2NhbGUsIGZsb2F0IHNlZWQpXFxue1xcbiAgICByZXR1cm4gZnJhY3Qoc2luKGRvdChnbF9GcmFnQ29vcmQueHl6ICsgc2VlZCwgc2NhbGUpKSAqIDQzNzU4LjU0NTMgKyBzZWVkKTtcXG59XFxuXFxudm9pZCBtYWluKHZvaWQpXFxue1xcbiAgICB2ZWM0IGNvbG9yID0gdmVjNCgwLjApO1xcbiAgICBmbG9hdCB0b3RhbCA9IDAuMDtcXG5cXG4gICAgZmxvYXQgb2Zmc2V0ID0gcmFuZG9tKHZlYzMoMTIuOTg5OCwgNzguMjMzLCAxNTEuNzE4MiksIDAuMCk7XFxuXFxuICAgIGZvciAoZmxvYXQgdCA9IC0zMC4wOyB0IDw9IDMwLjA7IHQrKylcXG4gICAge1xcbiAgICAgICAgZmxvYXQgcGVyY2VudCA9ICh0ICsgb2Zmc2V0IC0gMC41KSAvIDMwLjA7XFxuICAgICAgICBmbG9hdCB3ZWlnaHQgPSAxLjAgLSBhYnMocGVyY2VudCk7XFxuICAgICAgICB2ZWM0IHNhbXBsZSA9IHRleHR1cmUyRCh1U2FtcGxlciwgdlRleHR1cmVDb29yZCArIGRlbHRhICogcGVyY2VudCk7XFxuICAgICAgICBzYW1wbGUucmdiICo9IHNhbXBsZS5hO1xcbiAgICAgICAgY29sb3IgKz0gc2FtcGxlICogd2VpZ2h0O1xcbiAgICAgICAgdG90YWwgKz0gd2VpZ2h0O1xcbiAgICB9XFxuXFxuICAgIGdsX0ZyYWdDb2xvciA9IGNvbG9yIC8gdG90YWw7XFxuICAgIGdsX0ZyYWdDb2xvci5yZ2IgLz0gZ2xfRnJhZ0NvbG9yLmEgKyAwLjAwMDAxO1xcbn1cXG5cIixcbiAgICAgICAgLy8gdW5pZm9ybXNcbiAgICAgICAge1xuICAgICAgICAgIGRlbHRhOiB7IHR5cGU6ICd2MicsIHZhbHVlOiB7IHg6IDAuMSwgeTogMC4wIH0gfVxuICAgICAgICB9XG4gICAgKTtcbn1cblxuU21hcnRCbHVyRmlsdGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoY29yZS5BYnN0cmFjdEZpbHRlci5wcm90b3R5cGUpO1xuU21hcnRCbHVyRmlsdGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFNtYXJ0Qmx1ckZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gU21hcnRCbHVyRmlsdGVyO1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi8uLi9jb3JlJyk7XG4vLyBAc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9zdWJzdGFjay9icmZzL2lzc3Vlcy8yNVxuXG5cbi8qKlxuICogVGhlIENvbG9yTWF0cml4RmlsdGVyIGNsYXNzIGxldHMgeW91IGFwcGx5IGEgNXg0IG1hdHJpeCB0cmFuc2Zvcm1hdGlvbiBvbiB0aGUgUkdCQVxuICogY29sb3IgYW5kIGFscGhhIHZhbHVlcyBvZiBldmVyeSBwaXhlbCBvbiB5b3VyIGRpc3BsYXlPYmplY3QgdG8gcHJvZHVjZSBhIHJlc3VsdFxuICogd2l0aCBhIG5ldyBzZXQgb2YgUkdCQSBjb2xvciBhbmQgYWxwaGEgdmFsdWVzLiBJdCdzIHByZXR0eSBwb3dlcmZ1bCFcbiAqXG4gKiBgYGBqc1xuICogIHZhciBjb2xvck1hdHJpeCA9IG5ldyBQSVhJLkNvbG9yTWF0cml4RmlsdGVyKCk7XG4gKiAgY29udGFpbmVyLmZpbHRlcnMgPSBbY29sb3JNYXRyaXhdO1xuICogIGNvbG9yTWF0cml4LmNvbnRyYXN0KDIpO1xuICogYGBgXG4gKiBAYXV0aG9yIENsw6ltZW50IENoZW5lYmF1bHQgPGNsZW1lbnRAZ29vZGJveWRpZ2l0YWwuY29tPlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLkFic3RyYWN0RmlsdGVyXG4gKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzXG4gKi9cbmZ1bmN0aW9uIENvbG9yTWF0cml4RmlsdGVyKClcbntcbiAgICBjb3JlLkFic3RyYWN0RmlsdGVyLmNhbGwodGhpcyxcbiAgICAgICAgLy8gdmVydGV4IHNoYWRlclxuICAgICAgICBudWxsLFxuICAgICAgICAvLyBmcmFnbWVudCBzaGFkZXJcbiAgICAgICAgXCJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcXG5cXG52YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDtcXG51bmlmb3JtIHNhbXBsZXIyRCB1U2FtcGxlcjtcXG51bmlmb3JtIGZsb2F0IG1bMjVdO1xcblxcbnZvaWQgbWFpbih2b2lkKVxcbntcXG5cXG4gICAgdmVjNCBjID0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2VGV4dHVyZUNvb3JkKTtcXG5cXG4gICAgZ2xfRnJhZ0NvbG9yLnIgPSAobVswXSAqIGMucik7XFxuICAgICAgICBnbF9GcmFnQ29sb3IuciArPSAobVsxXSAqIGMuZyk7XFxuICAgICAgICBnbF9GcmFnQ29sb3IuciArPSAobVsyXSAqIGMuYik7XFxuICAgICAgICBnbF9GcmFnQ29sb3IuciArPSAobVszXSAqIGMuYSk7XFxuICAgICAgICBnbF9GcmFnQ29sb3IuciArPSBtWzRdO1xcblxcbiAgICBnbF9GcmFnQ29sb3IuZyA9IChtWzVdICogYy5yKTtcXG4gICAgICAgIGdsX0ZyYWdDb2xvci5nICs9IChtWzZdICogYy5nKTtcXG4gICAgICAgIGdsX0ZyYWdDb2xvci5nICs9IChtWzddICogYy5iKTtcXG4gICAgICAgIGdsX0ZyYWdDb2xvci5nICs9IChtWzhdICogYy5hKTtcXG4gICAgICAgIGdsX0ZyYWdDb2xvci5nICs9IG1bOV07XFxuXFxuICAgICBnbF9GcmFnQ29sb3IuYiA9IChtWzEwXSAqIGMucik7XFxuICAgICAgICBnbF9GcmFnQ29sb3IuYiArPSAobVsxMV0gKiBjLmcpO1xcbiAgICAgICAgZ2xfRnJhZ0NvbG9yLmIgKz0gKG1bMTJdICogYy5iKTtcXG4gICAgICAgIGdsX0ZyYWdDb2xvci5iICs9IChtWzEzXSAqIGMuYSk7XFxuICAgICAgICBnbF9GcmFnQ29sb3IuYiArPSBtWzE0XTtcXG5cXG4gICAgIGdsX0ZyYWdDb2xvci5hID0gKG1bMTVdICogYy5yKTtcXG4gICAgICAgIGdsX0ZyYWdDb2xvci5hICs9IChtWzE2XSAqIGMuZyk7XFxuICAgICAgICBnbF9GcmFnQ29sb3IuYSArPSAobVsxN10gKiBjLmIpO1xcbiAgICAgICAgZ2xfRnJhZ0NvbG9yLmEgKz0gKG1bMThdICogYy5hKTtcXG4gICAgICAgIGdsX0ZyYWdDb2xvci5hICs9IG1bMTldO1xcblxcbn1cXG5cIixcbiAgICAgICAgLy8gY3VzdG9tIHVuaWZvcm1zXG4gICAgICAgIHtcbiAgICAgICAgICAgIG06IHtcbiAgICAgICAgICAgICAgICB0eXBlOiAnMWZ2JywgdmFsdWU6IFtcbiAgICAgICAgICAgICAgICAgICAgMSwgMCwgMCwgMCwgMCxcbiAgICAgICAgICAgICAgICAgICAgMCwgMSwgMCwgMCwgMCxcbiAgICAgICAgICAgICAgICAgICAgMCwgMCwgMSwgMCwgMCxcbiAgICAgICAgICAgICAgICAgICAgMCwgMCwgMCwgMSwgMFxuICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICk7XG59XG5cbkNvbG9yTWF0cml4RmlsdGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoY29yZS5BYnN0cmFjdEZpbHRlci5wcm90b3R5cGUpO1xuQ29sb3JNYXRyaXhGaWx0ZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gQ29sb3JNYXRyaXhGaWx0ZXI7XG5tb2R1bGUuZXhwb3J0cyA9IENvbG9yTWF0cml4RmlsdGVyO1xuXG5cbi8qKlxuICogVHJhbnNmb3JtcyBjdXJyZW50IG1hdHJpeCBhbmQgc2V0IHRoZSBuZXcgb25lXG4gKlxuICogQHBhcmFtIG1hdHJpeCB7bnVtYmVyW119IChtYXQgNXg0KVxuICogQHBhcmFtIG11bHRpcGx5IHtib29sZWFufSBpZiB0cnVlLCBjdXJyZW50IG1hdHJpeCBhbmQgbWF0cml4IGFyZSBtdWx0aXBsaWVkLiBJZiBmYWxzZSwganVzdCBzZXQgdGhlIGN1cnJlbnQgbWF0cml4IHdpdGggQHBhcmFtIG1hdHJpeFxuICovXG5Db2xvck1hdHJpeEZpbHRlci5wcm90b3R5cGUuX2xvYWRNYXRyaXggPSBmdW5jdGlvbiAobWF0cml4LCBtdWx0aXBseSlcbntcbiAgICBtdWx0aXBseSA9ICEhbXVsdGlwbHk7XG5cbiAgICB2YXIgbmV3TWF0cml4ID0gbWF0cml4O1xuXG4gICAgaWYgKG11bHRpcGx5KSB7XG4gICAgICAgIHRoaXMuX211bHRpcGx5KG5ld01hdHJpeCwgdGhpcy51bmlmb3Jtcy5tLnZhbHVlLCBtYXRyaXgpO1xuICAgICAgICBuZXdNYXRyaXggPSB0aGlzLl9jb2xvck1hdHJpeChuZXdNYXRyaXgpO1xuICAgIH1cblxuICAgIC8vIHNldCB0aGUgbmV3IG1hdHJpeFxuICAgIHRoaXMudW5pZm9ybXMubS52YWx1ZSA9IG5ld01hdHJpeDtcbn07XG5cbi8qKlxuICogTXVsdGlwbGllcyB0d28gbWF0NSdzXG4gKlxuICogQHBhcmFtIG91dCB7bnVtYmVyW119IChtYXQgNXg0KSB0aGUgcmVjZWl2aW5nIG1hdHJpeFxuICogQHBhcmFtIGEge251bWJlcltdfSAobWF0IDV4NCkgdGhlIGZpcnN0IG9wZXJhbmRcbiAqIEBwYXJhbSBiIHtudW1iZXJbXX0gKG1hdCA1eDQpIHRoZSBzZWNvbmQgb3BlcmFuZFxuICogQHJldHVybnMgb3V0IHtudW1iZXJbXX0gKG1hdCA1eDQpXG4gKi9cbkNvbG9yTWF0cml4RmlsdGVyLnByb3RvdHlwZS5fbXVsdGlwbHkgPSBmdW5jdGlvbiAob3V0LCBhLCBiKVxue1xuXG4gICAgLy8gUmVkIENoYW5uZWxcbiAgICBvdXRbMF0gPSAoYVswXSAqIGJbMF0pICsgKGFbMV0gKiBiWzVdKSArIChhWzJdICogYlsxMF0pICsgKGFbM10gKiBiWzE1XSk7XG4gICAgb3V0WzFdID0gKGFbMF0gKiBiWzFdKSArIChhWzFdICogYls2XSkgKyAoYVsyXSAqIGJbMTFdKSArIChhWzNdICogYlsxNl0pO1xuICAgIG91dFsyXSA9IChhWzBdICogYlsyXSkgKyAoYVsxXSAqIGJbN10pICsgKGFbMl0gKiBiWzEyXSkgKyAoYVszXSAqIGJbMTddKTtcbiAgICBvdXRbM10gPSAoYVswXSAqIGJbM10pICsgKGFbMV0gKiBiWzhdKSArIChhWzJdICogYlsxM10pICsgKGFbM10gKiBiWzE4XSk7XG4gICAgb3V0WzRdID0gKGFbMF0gKiBiWzRdKSArIChhWzFdICogYls5XSkgKyAoYVsyXSAqIGJbMTRdKSArIChhWzNdICogYlsxOV0pO1xuXG4gICAgLy8gR3JlZW4gQ2hhbm5lbFxuICAgIG91dFs1XSA9IChhWzVdICogYlswXSkgKyAoYVs2XSAqIGJbNV0pICsgKGFbN10gKiBiWzEwXSkgKyAoYVs4XSAqIGJbMTVdKTtcbiAgICBvdXRbNl0gPSAoYVs1XSAqIGJbMV0pICsgKGFbNl0gKiBiWzZdKSArIChhWzddICogYlsxMV0pICsgKGFbOF0gKiBiWzE2XSk7XG4gICAgb3V0WzddID0gKGFbNV0gKiBiWzJdKSArIChhWzZdICogYls3XSkgKyAoYVs3XSAqIGJbMTJdKSArIChhWzhdICogYlsxN10pO1xuICAgIG91dFs4XSA9IChhWzVdICogYlszXSkgKyAoYVs2XSAqIGJbOF0pICsgKGFbN10gKiBiWzEzXSkgKyAoYVs4XSAqIGJbMThdKTtcbiAgICBvdXRbOV0gPSAoYVs1XSAqIGJbNF0pICsgKGFbNl0gKiBiWzldKSArIChhWzddICogYlsxNF0pICsgKGFbOF0gKiBiWzE5XSk7XG5cbiAgICAvLyBCbHVlIENoYW5uZWxcbiAgICBvdXRbMTBdID0gKGFbMTBdICogYlswXSkgKyAoYVsxMV0gKiBiWzVdKSArIChhWzEyXSAqIGJbMTBdKSArIChhWzEzXSAqIGJbMTVdKTtcbiAgICBvdXRbMTFdID0gKGFbMTBdICogYlsxXSkgKyAoYVsxMV0gKiBiWzZdKSArIChhWzEyXSAqIGJbMTFdKSArIChhWzEzXSAqIGJbMTZdKTtcbiAgICBvdXRbMTJdID0gKGFbMTBdICogYlsyXSkgKyAoYVsxMV0gKiBiWzddKSArIChhWzEyXSAqIGJbMTJdKSArIChhWzEzXSAqIGJbMTddKTtcbiAgICBvdXRbMTNdID0gKGFbMTBdICogYlszXSkgKyAoYVsxMV0gKiBiWzhdKSArIChhWzEyXSAqIGJbMTNdKSArIChhWzEzXSAqIGJbMThdKTtcbiAgICBvdXRbMTRdID0gKGFbMTBdICogYls0XSkgKyAoYVsxMV0gKiBiWzldKSArIChhWzEyXSAqIGJbMTRdKSArIChhWzEzXSAqIGJbMTldKTtcblxuICAgIC8vIEFscGhhIENoYW5uZWxcbiAgICBvdXRbMTVdID0gKGFbMTVdICogYlswXSkgKyAoYVsxNl0gKiBiWzVdKSArIChhWzE3XSAqIGJbMTBdKSArIChhWzE4XSAqIGJbMTVdKTtcbiAgICBvdXRbMTZdID0gKGFbMTVdICogYlsxXSkgKyAoYVsxNl0gKiBiWzZdKSArIChhWzE3XSAqIGJbMTFdKSArIChhWzE4XSAqIGJbMTZdKTtcbiAgICBvdXRbMTddID0gKGFbMTVdICogYlsyXSkgKyAoYVsxNl0gKiBiWzddKSArIChhWzE3XSAqIGJbMTJdKSArIChhWzE4XSAqIGJbMTddKTtcbiAgICBvdXRbMThdID0gKGFbMTVdICogYlszXSkgKyAoYVsxNl0gKiBiWzhdKSArIChhWzE3XSAqIGJbMTNdKSArIChhWzE4XSAqIGJbMThdKTtcbiAgICBvdXRbMTldID0gKGFbMTVdICogYls0XSkgKyAoYVsxNl0gKiBiWzldKSArIChhWzE3XSAqIGJbMTRdKSArIChhWzE4XSAqIGJbMTldKTtcblxuICAgIHJldHVybiBvdXQ7XG59O1xuXG4vKipcbiAqIENyZWF0ZSBhIEZsb2F0MzIgQXJyYXkgYW5kIG5vcm1hbGl6ZSB0aGUgb2Zmc2V0IGNvbXBvbmVudCB0byAwLTFcbiAqXG4gKiBAcGFyYW0gbWF0cml4IHtudW1iZXJbXX0gKG1hdCA1eDQpXG4gKiBAcmV0dXJuIG0ge251bWJlcltdfSAobWF0IDV4NCkgd2l0aCBhbGwgdmFsdWVzIGJldHdlZW4gMC0xXG4gKi9cbkNvbG9yTWF0cml4RmlsdGVyLnByb3RvdHlwZS5fY29sb3JNYXRyaXggPSBmdW5jdGlvbiAobWF0cml4KVxue1xuICAgIC8vIENyZWF0ZSBhIEZsb2F0MzIgQXJyYXkgYW5kIG5vcm1hbGl6ZSB0aGUgb2Zmc2V0IGNvbXBvbmVudCB0byAwLTFcbiAgICB2YXIgbSA9IG5ldyBGbG9hdDMyQXJyYXkobWF0cml4KTtcbiAgICBtWzRdIC89IDI1NTtcbiAgICBtWzldIC89IDI1NTtcbiAgICBtWzE0XSAvPSAyNTU7XG4gICAgbVsxOV0gLz0gMjU1O1xuXG4gICAgcmV0dXJuIG07XG59O1xuXG4vKipcbiAqIEFkanVzdHMgYnJpZ2h0bmVzc1xuICpcbiAqIEBwYXJhbSBiIHtudW1iZXJ9IHZhbHVlIG9mIHRoZSBicmlndGhuZXNzICgwIGlzIGJsYWNrKVxuICogQHBhcmFtIG11bHRpcGx5IHtib29sZWFufSByZWZlciB0byAuX2xvYWRNYXRyaXgoKSBtZXRob2RcbiAqL1xuQ29sb3JNYXRyaXhGaWx0ZXIucHJvdG90eXBlLmJyaWdodG5lc3MgPSBmdW5jdGlvbiAoYiwgbXVsdGlwbHkpXG57XG4gICAgdmFyIG1hdHJpeCA9IFtcbiAgICAgICAgYiwgMCwgMCwgMCwgMCxcbiAgICAgICAgMCwgYiwgMCwgMCwgMCxcbiAgICAgICAgMCwgMCwgYiwgMCwgMCxcbiAgICAgICAgMCwgMCwgMCwgMSwgMFxuICAgIF07XG5cbiAgICB0aGlzLl9sb2FkTWF0cml4KG1hdHJpeCwgbXVsdGlwbHkpO1xufTtcblxuLyoqXG4gKiBTZXQgdGhlIG1hdHJpY2VzIGluIGdyZXkgc2NhbGVzXG4gKlxuICogQHBhcmFtIHNjYWxlIHtudW1iZXJ9IHZhbHVlIG9mIHRoZSBncmV5ICgwIGlzIGJsYWNrKVxuICogQHBhcmFtIG11bHRpcGx5IHtib29sZWFufSByZWZlciB0byAuX2xvYWRNYXRyaXgoKSBtZXRob2RcbiAqL1xuQ29sb3JNYXRyaXhGaWx0ZXIucHJvdG90eXBlLmdyZXlzY2FsZSA9IGZ1bmN0aW9uIChzY2FsZSwgbXVsdGlwbHkpXG57XG4gICAgdmFyIG1hdHJpeCA9IFtcbiAgICAgICAgc2NhbGUsIHNjYWxlLCBzY2FsZSwgMCwgMCxcbiAgICAgICAgc2NhbGUsIHNjYWxlLCBzY2FsZSwgMCwgMCxcbiAgICAgICAgc2NhbGUsIHNjYWxlLCBzY2FsZSwgMCwgMCxcbiAgICAgICAgMCwgMCwgMCwgMSwgMFxuICAgIF07XG5cbiAgICB0aGlzLl9sb2FkTWF0cml4KG1hdHJpeCwgbXVsdGlwbHkpO1xufTtcbi8vQW1lcmljYW5pemVkIGFsaWFzXG5Db2xvck1hdHJpeEZpbHRlci5wcm90b3R5cGUuZ3JheXNjYWxlID0gQ29sb3JNYXRyaXhGaWx0ZXIucHJvdG90eXBlLmdyZXlzY2FsZTtcblxuLyoqXG4gKiBTZXQgdGhlIGJsYWNrIGFuZCB3aGl0ZSBtYXRyaWNlXG4gKiBNdWx0aXBseSB0aGUgY3VycmVudCBtYXRyaXhcbiAqXG4gKiBAcGFyYW0gbXVsdGlwbHkge2Jvb2xlYW59IHJlZmVyIHRvIC5fbG9hZE1hdHJpeCgpIG1ldGhvZFxuICovXG5Db2xvck1hdHJpeEZpbHRlci5wcm90b3R5cGUuYmxhY2tBbmRXaGl0ZSA9IGZ1bmN0aW9uIChtdWx0aXBseSlcbntcbiAgICB2YXIgbWF0cml4ID0gW1xuICAgICAgICAwLjMsIDAuNiwgMC4xLCAwLCAwLFxuICAgICAgICAwLjMsIDAuNiwgMC4xLCAwLCAwLFxuICAgICAgICAwLjMsIDAuNiwgMC4xLCAwLCAwLFxuICAgICAgICAwLCAwLCAwLCAxLCAwXG4gICAgXTtcblxuICAgIHRoaXMuX2xvYWRNYXRyaXgobWF0cml4LCBtdWx0aXBseSk7XG59O1xuXG4vKipcbiAqIFNldCB0aGUgaHVlIHByb3BlcnR5IG9mIHRoZSBjb2xvclxuICpcbiAqIEBwYXJhbSByb3RhdGlvbiB7bnVtYmVyfSBpbiBkZWdyZWVzXG4gKiBAcGFyYW0gbXVsdGlwbHkge2Jvb2xlYW59IHJlZmVyIHRvIC5fbG9hZE1hdHJpeCgpIG1ldGhvZFxuICovXG5Db2xvck1hdHJpeEZpbHRlci5wcm90b3R5cGUuaHVlID0gZnVuY3Rpb24gKHJvdGF0aW9uLCBtdWx0aXBseSlcbntcbiAgICByb3RhdGlvbiA9IChyb3RhdGlvbiB8fCAwKSAvIDE4MCAqIE1hdGguUEk7XG4gICAgdmFyIGNvcyA9IE1hdGguY29zKHJvdGF0aW9uKSxcbiAgICAgICAgc2luID0gTWF0aC5zaW4ocm90YXRpb24pO1xuXG4gICAgLy8gbHVtaW5hbmNlUmVkLCBsdW1pbmFuY2VHcmVlbiwgbHVtaW5hbmNlQmx1ZVxuICAgIHZhciBsdW1SID0gMC4yMTMsIC8vIG9yIDAuMzA4NlxuICAgICAgICBsdW1HID0gMC43MTUsIC8vIG9yIDAuNjA5NFxuICAgICAgICBsdW1CID0gMC4wNzI7IC8vIG9yIDAuMDgyMFxuXG4gICAgdmFyIG1hdHJpeCA9IFtcbiAgICAgICAgbHVtUiArIGNvcyAqICgxIC0gbHVtUikgKyBzaW4gKiAoLWx1bVIpLCBsdW1HICsgY29zICogKC1sdW1HKSArIHNpbiAqICgtbHVtRyksIGx1bUIgKyBjb3MgKiAoLWx1bUIpICsgc2luICogKDEgLSBsdW1CKSwgMCwgMCxcbiAgICAgICAgbHVtUiArIGNvcyAqICgtbHVtUikgKyBzaW4gKiAoMC4xNDMpLCBsdW1HICsgY29zICogKDEgLSBsdW1HKSArIHNpbiAqICgwLjE0MCksIGx1bUIgKyBjb3MgKiAoLWx1bUIpICsgc2luICogKC0wLjI4MyksIDAsIDAsXG4gICAgICAgIGx1bVIgKyBjb3MgKiAoLWx1bVIpICsgc2luICogKC0oMSAtIGx1bVIpKSwgbHVtRyArIGNvcyAqICgtbHVtRykgKyBzaW4gKiAobHVtRyksIGx1bUIgKyBjb3MgKiAoMSAtIGx1bUIpICsgc2luICogKGx1bUIpLCAwLCAwLFxuICAgICAgICAwLCAwLCAwLCAxLCAwXG4gICAgXTtcblxuICAgIHRoaXMuX2xvYWRNYXRyaXgobWF0cml4LCBtdWx0aXBseSk7XG59O1xuXG5cbi8qKlxuICogU2V0IHRoZSBjb250cmFzdCBtYXRyaXgsIGluY3JlYXNlIHRoZSBzZXBhcmF0aW9uIGJldHdlZW4gZGFyayBhbmQgYnJpZ2h0XG4gKiBJbmNyZWFzZSBjb250cmFzdCA6IHNoYWRvd3MgZGFya2VyIGFuZCBoaWdobGlnaHRzIGJyaWdodGVyXG4gKiBEZWNyZWFzZSBjb250cmFzdCA6IGJyaW5nIHRoZSBzaGFkb3dzIHVwIGFuZCB0aGUgaGlnaGxpZ2h0cyBkb3duXG4gKlxuICogQHBhcmFtIGFtb3VudCB7bnVtYmVyfSB2YWx1ZSBvZiB0aGUgY29udHJhc3RcbiAqIEBwYXJhbSBtdWx0aXBseSB7Ym9vbGVhbn0gcmVmZXIgdG8gLl9sb2FkTWF0cml4KCkgbWV0aG9kXG4gKi9cbkNvbG9yTWF0cml4RmlsdGVyLnByb3RvdHlwZS5jb250cmFzdCA9IGZ1bmN0aW9uIChhbW91bnQsIG11bHRpcGx5KVxue1xuICAgIHZhciB2ID0gKGFtb3VudCB8fCAwKSArIDE7XG4gICAgdmFyIG8gPSAtMTI4ICogKHYgLSAxKTtcblxuICAgIHZhciBtYXRyaXggPSBbXG4gICAgICAgIHYsIDAsIDAsIDAsIG8sXG4gICAgICAgIDAsIHYsIDAsIDAsIG8sXG4gICAgICAgIDAsIDAsIHYsIDAsIG8sXG4gICAgICAgIDAsIDAsIDAsIDEsIDBcbiAgICBdO1xuXG4gICAgdGhpcy5fbG9hZE1hdHJpeChtYXRyaXgsIG11bHRpcGx5KTtcbn07XG5cbi8qKlxuICogU2V0IHRoZSBzYXR1cmF0aW9uIG1hdHJpeCwgaW5jcmVhc2UgdGhlIHNlcGFyYXRpb24gYmV0d2VlbiBjb2xvcnNcbiAqIEluY3JlYXNlIHNhdHVyYXRpb24gOiBpbmNyZWFzZSBjb250cmFzdCwgYnJpZ2h0bmVzcywgYW5kIHNoYXJwbmVzc1xuICpcbiAqIEBwYXJhbSBhbW91bnQge251bWJlcn1cbiAqIEBwYXJhbSBtdWx0aXBseSB7Ym9vbGVhbn0gcmVmZXIgdG8gLl9sb2FkTWF0cml4KCkgbWV0aG9kXG4gKi9cbkNvbG9yTWF0cml4RmlsdGVyLnByb3RvdHlwZS5zYXR1cmF0ZSA9IGZ1bmN0aW9uIChhbW91bnQsIG11bHRpcGx5KVxue1xuICAgIHZhciB4ID0gKGFtb3VudCB8fCAwKSAqIDIgLyAzICsgMTtcbiAgICB2YXIgeSA9ICgoeCAtIDEpICogLTAuNSk7XG5cbiAgICB2YXIgbWF0cml4ID0gW1xuICAgICAgICB4LCB5LCB5LCAwLCAwLFxuICAgICAgICB5LCB4LCB5LCAwLCAwLFxuICAgICAgICB5LCB5LCB4LCAwLCAwLFxuICAgICAgICAwLCAwLCAwLCAxLCAwXG4gICAgXTtcblxuICAgIHRoaXMuX2xvYWRNYXRyaXgobWF0cml4LCBtdWx0aXBseSk7XG59O1xuXG4vKipcbiAqIERlc2F0dXJhdGUgaW1hZ2UgKHJlbW92ZSBjb2xvcilcbiAqXG4gKiBDYWxsIHRoZSBzYXR1cmF0ZSBmdW5jdGlvblxuICpcbiAqIEBwYXJhbSBtdWx0aXBseSB7Ym9vbGVhbn0gcmVmZXIgdG8gLl9sb2FkTWF0cml4KCkgbWV0aG9kXG4gKi9cbkNvbG9yTWF0cml4RmlsdGVyLnByb3RvdHlwZS5kZXNhdHVyYXRlID0gZnVuY3Rpb24gKG11bHRpcGx5KSAvLyBqc2hpbnQgdW51c2VkOmZhbHNlXG57XG4gICAgdGhpcy5zYXR1cmF0ZSgtMSk7XG59O1xuXG4vKipcbiAqIE5lZ2F0aXZlIGltYWdlIChpbnZlcnNlIG9mIGNsYXNzaWMgcmdiIG1hdHJpeClcbiAqXG4gKiBAcGFyYW0gbXVsdGlwbHkge2Jvb2xlYW59IHJlZmVyIHRvIC5fbG9hZE1hdHJpeCgpIG1ldGhvZFxuICovXG5Db2xvck1hdHJpeEZpbHRlci5wcm90b3R5cGUubmVnYXRpdmUgPSBmdW5jdGlvbiAobXVsdGlwbHkpXG57XG4gICAgdmFyIG1hdHJpeCA9IFtcbiAgICAgICAgMCwgMSwgMSwgMCwgMCxcbiAgICAgICAgMSwgMCwgMSwgMCwgMCxcbiAgICAgICAgMSwgMSwgMCwgMCwgMCxcbiAgICAgICAgMCwgMCwgMCwgMSwgMFxuICAgIF07XG5cbiAgICB0aGlzLl9sb2FkTWF0cml4KG1hdHJpeCwgbXVsdGlwbHkpO1xufTtcblxuLyoqXG4gKiBTZXBpYSBpbWFnZVxuICpcbiAqIEBwYXJhbSBtdWx0aXBseSB7Ym9vbGVhbn0gcmVmZXIgdG8gLl9sb2FkTWF0cml4KCkgbWV0aG9kXG4gKi9cbkNvbG9yTWF0cml4RmlsdGVyLnByb3RvdHlwZS5zZXBpYSA9IGZ1bmN0aW9uIChtdWx0aXBseSlcbntcbiAgICB2YXIgbWF0cml4ID0gW1xuICAgICAgICAwLjM5MywgMC43Njg5OTk5LCAwLjE4ODk5OTk5LCAwLCAwLFxuICAgICAgICAwLjM0OSwgMC42ODU5OTk5LCAwLjE2Nzk5OTk5LCAwLCAwLFxuICAgICAgICAwLjI3MiwgMC41MzM5OTk5LCAwLjEzMDk5OTk5LCAwLCAwLFxuICAgICAgICAwLCAwLCAwLCAxLCAwXG4gICAgXTtcblxuICAgIHRoaXMuX2xvYWRNYXRyaXgobWF0cml4LCBtdWx0aXBseSk7XG59O1xuXG4vKipcbiAqIENvbG9yIG1vdGlvbiBwaWN0dXJlIHByb2Nlc3MgaW52ZW50ZWQgaW4gMTkxNiAodGhhbmtzIERvbWluaWMgU3phYmxld3NraSlcbiAqXG4gKiBAcGFyYW0gbXVsdGlwbHkge2Jvb2xlYW59IHJlZmVyIHRvIC5fbG9hZE1hdHJpeCgpIG1ldGhvZFxuICovXG5Db2xvck1hdHJpeEZpbHRlci5wcm90b3R5cGUudGVjaG5pY29sb3IgPSBmdW5jdGlvbiAobXVsdGlwbHkpXG57XG4gICAgdmFyIG1hdHJpeCA9IFtcbiAgICAgICAgMS45MTI1Mjc3ODkxNDU2MDgzLCAtMC44NTQ1MzQ0OTc2OTUxNjQ1LCAtMC4wOTE1NTUwODQ4Mjc1NTU4NSwgMCwgMTEuNzkzNjAzNDM0Mzc3MzM3LFxuICAgICAgICAtMC4zMDg3ODMzMzg1OTI4MDk3LCAxLjc2NTg5MDg1NTU0NTg0MjgsIC0wLjEwNjAxNzQzMDc0NzIyMjQ1LCAwLCAtNzAuMzUyMDUxNjE0NjEzOTgsXG4gICAgICAgIC0wLjIzMTEwMzM3NzU0ODYxNiwgLTAuNzUwMTg5OTE5NzQ0MDIxMiwgMS44NDc1OTc4MTYxMDgxODksIDAsIDMwLjk1MDk0MDg2OTQ5MTEzOCxcbiAgICAgICAgMCwgMCwgMCwgMSwgMFxuICAgIF07XG5cbiAgICB0aGlzLl9sb2FkTWF0cml4KG1hdHJpeCwgbXVsdGlwbHkpO1xufTtcblxuLyoqXG4gKiBQb2xhcm9pZCBmaWx0ZXJcbiAqXG4gKiBAcGFyYW0gbXVsdGlwbHkge2Jvb2xlYW59IHJlZmVyIHRvIC5fbG9hZE1hdHJpeCgpIG1ldGhvZFxuICovXG5Db2xvck1hdHJpeEZpbHRlci5wcm90b3R5cGUucG9sYXJvaWQgPSBmdW5jdGlvbiAobXVsdGlwbHkpXG57XG4gICAgdmFyIG1hdHJpeCA9IFtcbiAgICAgICAgMS40MzgsIC0wLjA2MiwgLTAuMDYyLCAwLCAwLFxuICAgICAgICAtMC4xMjIsIDEuMzc4LCAtMC4xMjIsIDAsIDAsXG4gICAgICAgIC0wLjAxNiwgLTAuMDE2LCAxLjQ4MywgMCwgMCxcbiAgICAgICAgMCwgMCwgMCwgMSwgMFxuICAgIF07XG5cbiAgICB0aGlzLl9sb2FkTWF0cml4KG1hdHJpeCwgbXVsdGlwbHkpO1xufTtcblxuLyoqXG4gKiBGaWx0ZXIgd2hvIHRyYW5zZm9ybXMgOiBSZWQgLT4gQmx1ZSBhbmQgQmx1ZSAtPiBSZWRcbiAqXG4gKiBAcGFyYW0gbXVsdGlwbHkge2Jvb2xlYW59IHJlZmVyIHRvIC5fbG9hZE1hdHJpeCgpIG1ldGhvZFxuICovXG5Db2xvck1hdHJpeEZpbHRlci5wcm90b3R5cGUudG9CR1IgPSBmdW5jdGlvbiAobXVsdGlwbHkpXG57XG4gICAgdmFyIG1hdHJpeCA9IFtcbiAgICAgICAgMCwgMCwgMSwgMCwgMCxcbiAgICAgICAgMCwgMSwgMCwgMCwgMCxcbiAgICAgICAgMSwgMCwgMCwgMCwgMCxcbiAgICAgICAgMCwgMCwgMCwgMSwgMFxuICAgIF07XG5cbiAgICB0aGlzLl9sb2FkTWF0cml4KG1hdHJpeCwgbXVsdGlwbHkpO1xufTtcblxuLyoqXG4gKiBDb2xvciByZXZlcnNhbCBmaWxtIGludHJvZHVjZWQgYnkgRWFzdG1hbiBLb2RhayBpbiAxOTM1LiAodGhhbmtzIERvbWluaWMgU3phYmxld3NraSlcbiAqXG4gKiBAcGFyYW0gbXVsdGlwbHkge2Jvb2xlYW59IHJlZmVyIHRvIC5fbG9hZE1hdHJpeCgpIG1ldGhvZFxuICovXG5Db2xvck1hdHJpeEZpbHRlci5wcm90b3R5cGUua29kYWNocm9tZSA9IGZ1bmN0aW9uIChtdWx0aXBseSlcbntcbiAgICB2YXIgbWF0cml4ID0gW1xuICAgICAgICAxLjEyODU1ODIzOTY1OTM1MjUsIC0wLjM5NjczODIyODM2MDEzNDgsIC0wLjAzOTkyNTU5MTcyOTIxNzkzLCAwLCA2My43Mjk1ODc2MjE5NjUwMixcbiAgICAgICAgLTAuMTY0MDQzMzk5NjIyNDQ2MTYsIDEuMDgzNTI1MTU2NjI5MTMwNCwgLTAuMDU0OTg4MDUxMTU2MzMxMzIsIDAsIDI0LjczMjQwNzg5NjcwNjIwMyxcbiAgICAgICAgLTAuMTY3ODYwMTA3MDYxNTU3NjMsIC0wLjU2MDM0MTYyNzc2OTUyNDgsIDEuNjAxNDg1MDc2MTk2NDk0MywgMCwgMzUuNjI5ODI4MDc0NjA5NDYsXG4gICAgICAgIDAsIDAsIDAsIDEsIDBcbiAgICBdO1xuXG4gICAgdGhpcy5fbG9hZE1hdHJpeChtYXRyaXgsIG11bHRpcGx5KTtcbn07XG5cbi8qKlxuICogQnJvd24gZGVsaWNpb3VzIGJyb3duaSBmaWx0ZXIgKHRoYW5rcyBEb21pbmljIFN6YWJsZXdza2kpXG4gKlxuICogQHBhcmFtIG11bHRpcGx5IHtib29sZWFufSByZWZlciB0byAuX2xvYWRNYXRyaXgoKSBtZXRob2RcbiAqL1xuQ29sb3JNYXRyaXhGaWx0ZXIucHJvdG90eXBlLmJyb3duaSA9IGZ1bmN0aW9uIChtdWx0aXBseSlcbntcbiAgICB2YXIgbWF0cml4ID0gW1xuICAgICAgICAwLjU5OTcwMjM0OTgxNTk3MTUsIDAuMzQ1NTMyNDMwNDgzOTEyNjMsIC0wLjI3MDgyOTg2NzQ1MzgwNDIsIDAsIDQ3LjQzMTkyODU1NjAwODczLFxuICAgICAgICAtMC4wMzc3MDMyNDk4Mzc3ODMxNTcsIDAuODYwOTU3NzU4Nzk5MjY0MSwgMC4xNTA1OTU1MjM4ODQ1OTkxMywgMCwgLTM2Ljk2ODQxNDk4MzE5MTI3LFxuICAgICAgICAwLjI0MTEzNjM1MTI4MTUzMzM1LCAtMC4wNzQ0MTAzNzkwODQyMjQ5MiwgMC40NDk3MjE4MjA2NDg3NzE1MywgMCwgLTcuNTYyMDc1Mjc3NTkxMjgzLFxuICAgICAgICAwLCAwLCAwLCAxLCAwXG4gICAgXTtcblxuICAgIHRoaXMuX2xvYWRNYXRyaXgobWF0cml4LCBtdWx0aXBseSk7XG59O1xuXG4vKlxuICogVmludGFnZSBmaWx0ZXIgKHRoYW5rcyBEb21pbmljIFN6YWJsZXdza2kpXG4gKlxuICogQHBhcmFtIG11bHRpcGx5IHtib29sZWFufSByZWZlciB0byAuX2xvYWRNYXRyaXgoKSBtZXRob2RcbiAqL1xuQ29sb3JNYXRyaXhGaWx0ZXIucHJvdG90eXBlLnZpbnRhZ2UgPSBmdW5jdGlvbiAobXVsdGlwbHkpXG57XG4gICAgdmFyIG1hdHJpeCA9IFtcbiAgICAgICAgMC42Mjc5MzQ1NjM1NjA1OTk0LCAwLjMyMDIxODM0MjA4MTkzNjcsIC0wLjAzOTY1NDA4MjExMzEyNDUzLCAwLCA5LjY1MTI4NTgzNTI5NDEyMyxcbiAgICAgICAgMC4wMjU3ODM5NzcwNDgwODg2OCwgMC42NDQxMTg4NjQ0Mzc0NzcxLCAwLjAzMjU5MTI3NjE2MTQ5Mjk0LCAwLCA3LjQ2MjgyOTE3NjQ3MDU5MSxcbiAgICAgICAgMC4wNDY2MDU1NTU2NzgyNzE5LCAtMC4wODUxMjMyOTg3MjQ3ODkxLCAwLjUyNDE2NDgwMTg3MDA0NjUsIDAsIDUuMTU5MTkwNTg4MjM1Mjk2LFxuICAgICAgICAwLCAwLCAwLCAxLCAwXG4gICAgXTtcblxuICAgIHRoaXMuX2xvYWRNYXRyaXgobWF0cml4LCBtdWx0aXBseSk7XG59O1xuXG4vKlxuICogV2UgZG9uJ3Qga25vdyBleGFjdGx5IHdoYXQgaXQgZG9lcywga2luZCBvZiBncmFkaWVudCBtYXAsIGJ1dCBmdW5ueSB0byBwbGF5IHdpdGghXG4gKlxuICogQHBhcmFtIGRlc2F0dXJhdGlvbiB7bnVtYmVyfVxuICogQHBhcmFtIHRvbmVkIHtudW1iZXJ9XG4gKiBAcGFyYW0gbGlnaHRDb2xvciB7c3RyaW5nfSAoZXhhbXBsZSA6IFwiMHhGRkU1ODBcIilcbiAqIEBwYXJhbSBkYXJrQ29sb3Ige3N0cmluZ30gIChleGFtcGxlIDogXCIweEZGRTU4MFwiKVxuICpcbiAqIEBwYXJhbSBtdWx0aXBseSB7Ym9vbGVhbn0gcmVmZXIgdG8gLl9sb2FkTWF0cml4KCkgbWV0aG9kXG4gKi9cbkNvbG9yTWF0cml4RmlsdGVyLnByb3RvdHlwZS5jb2xvclRvbmUgPSBmdW5jdGlvbiAoZGVzYXR1cmF0aW9uLCB0b25lZCwgbGlnaHRDb2xvciwgZGFya0NvbG9yLCBtdWx0aXBseSlcbntcbiAgICBkZXNhdHVyYXRpb24gPSBkZXNhdHVyYXRpb24gfHwgMC4yO1xuICAgIHRvbmVkID0gdG9uZWQgfHwgMC4xNTtcbiAgICBsaWdodENvbG9yID0gbGlnaHRDb2xvciB8fCAweEZGRTU4MDtcbiAgICBkYXJrQ29sb3IgPSBkYXJrQ29sb3IgfHwgMHgzMzgwMDA7XG5cbiAgICB2YXIgbFIgPSAoKGxpZ2h0Q29sb3IgPj4gMTYpICYgMHhGRikgLyAyNTU7XG4gICAgdmFyIGxHID0gKChsaWdodENvbG9yID4+IDgpICYgMHhGRikgLyAyNTU7XG4gICAgdmFyIGxCID0gKGxpZ2h0Q29sb3IgJiAweEZGKSAvIDI1NTtcblxuICAgIHZhciBkUiA9ICgoZGFya0NvbG9yID4+IDE2KSAmIDB4RkYpIC8gMjU1O1xuICAgIHZhciBkRyA9ICgoZGFya0NvbG9yID4+IDgpICYgMHhGRikgLyAyNTU7XG4gICAgdmFyIGRCID0gKGRhcmtDb2xvciAmIDB4RkYpIC8gMjU1O1xuXG4gICAgdmFyIG1hdHJpeCA9IFtcbiAgICAgICAgMC4zLCAwLjU5LCAwLjExLCAwLCAwLFxuICAgICAgICBsUiwgbEcsIGxCLCBkZXNhdHVyYXRpb24sIDAsXG4gICAgICAgIGRSLCBkRywgZEIsIHRvbmVkLCAwLFxuICAgICAgICBsUiAtIGRSLCBsRyAtIGRHLCBsQiAtIGRCLCAwLCAwXG4gICAgXTtcblxuICAgIHRoaXMuX2xvYWRNYXRyaXgobWF0cml4LCBtdWx0aXBseSk7XG59O1xuXG4vKlxuICogTmlnaHQgZWZmZWN0XG4gKlxuICogQHBhcmFtIGludGVuc2l0eSB7bnVtYmVyfVxuICogQHBhcmFtIG11bHRpcGx5IHtib29sZWFufSByZWZlciB0byAuX2xvYWRNYXRyaXgoKSBtZXRob2RcbiAqL1xuQ29sb3JNYXRyaXhGaWx0ZXIucHJvdG90eXBlLm5pZ2h0ID0gZnVuY3Rpb24gKGludGVuc2l0eSwgbXVsdGlwbHkpXG57XG4gICAgaW50ZW5zaXR5ID0gaW50ZW5zaXR5IHx8IDAuMTtcbiAgICB2YXIgbWF0cml4ID0gW1xuICAgICAgICBpbnRlbnNpdHkgKiAoIC0yLjApLCAtaW50ZW5zaXR5LCAwLCAwLCAwLFxuICAgICAgICAtaW50ZW5zaXR5LCAwLCBpbnRlbnNpdHksIDAsIDAsXG4gICAgICAgIDAsIGludGVuc2l0eSwgaW50ZW5zaXR5ICogMi4wLCAwLCAwLFxuICAgICAgICAwLCAwLCAwLCAxLCAwXG4gICAgXTtcblxuICAgIHRoaXMuX2xvYWRNYXRyaXgobWF0cml4LCBtdWx0aXBseSk7XG59O1xuXG5cbi8qXG4gKiBQcmVkYXRvciBlZmZlY3RcbiAqXG4gKiBFcmFzZSB0aGUgY3VycmVudCBtYXRyaXggYnkgc2V0dGluZyBhIG5ldyBpbmRlcGVudCBvbmVcbiAqXG4gKiBAcGFyYW0gYW1vdW50IHtudW1iZXJ9IGhvdyBtdWNoIHRoZSBwcmVkYXRvciBmZWVscyBoaXMgZnV0dXJlIHZpY3RpbVxuICogQHBhcmFtIG11bHRpcGx5IHtib29sZWFufSByZWZlciB0byAuX2xvYWRNYXRyaXgoKSBtZXRob2RcbiAqL1xuQ29sb3JNYXRyaXhGaWx0ZXIucHJvdG90eXBlLnByZWRhdG9yID0gZnVuY3Rpb24gKGFtb3VudCwgbXVsdGlwbHkpXG57XG4gICAgdmFyIG1hdHJpeCA9IFtcbiAgICAgICAgMTEuMjI0MTMwNjMwNDkzMTY0ICogYW1vdW50LCAtNC43OTQ0ODY5OTk1MTE3MTkgKiBhbW91bnQsIC0yLjg3NDYxMTg1NDU1MzIyMjcgKiBhbW91bnQsIDAgKiBhbW91bnQsIDAuNDAzNDI0MzgyMjA5Nzc3ODMgKiBhbW91bnQsXG4gICAgICAgIC0zLjYzMzA2OTc1MzY0Njg1MDYgKiBhbW91bnQsIDkuMTkzMTU3MTk2MDQ0OTIyICogYW1vdW50LCAtMi45NTE4MTA4MzY3OTE5OTIgKiBhbW91bnQsIDAgKiBhbW91bnQsIC0xLjMxNjEzNTA0ODg2NjI3MiAqIGFtb3VudCxcbiAgICAgICAgLTMuMjE4NDE5NzkwMjY3OTQ0MyAqIGFtb3VudCwgLTQuMjM3NTAzMDUxNzU3ODEyNSAqIGFtb3VudCwgNy40NzY0NDgwNTkwODIwMzEgKiBhbW91bnQsIDAgKiBhbW91bnQsIDAuODA0NDQ1OTIyMzc0NzI1MyAqIGFtb3VudCxcbiAgICAgICAgMCwgMCwgMCwgMSwgMFxuICAgIF07XG5cbiAgICB0aGlzLl9sb2FkTWF0cml4KG1hdHJpeCwgbXVsdGlwbHkpO1xufTtcblxuLypcbiAqIExTRCBlZmZlY3RcbiAqXG4gKiBNdWx0aXBseSB0aGUgY3VycmVudCBtYXRyaXhcbiAqXG4gKiBAcGFyYW0gYW1vdW50IHtudW1iZXJ9IEhvdyBjcmF6eSBpcyB5b3VyIGVmZmVjdFxuICogQHBhcmFtIG11bHRpcGx5IHtib29sZWFufSByZWZlciB0byAuX2xvYWRNYXRyaXgoKSBtZXRob2RcbiAqL1xuQ29sb3JNYXRyaXhGaWx0ZXIucHJvdG90eXBlLmxzZCA9IGZ1bmN0aW9uIChtdWx0aXBseSlcbntcbiAgICB2YXIgbWF0cml4ID0gW1xuICAgICAgICAyLCAtMC40LCAwLjUsIDAsIDAsXG4gICAgICAgIC0wLjUsIDIsIC0wLjQsIDAsIDAsXG4gICAgICAgIC0wLjQsIC0wLjUsIDMsIDAsIDAsXG4gICAgICAgIDAsIDAsIDAsIDEsIDBcbiAgICBdO1xuXG4gICAgdGhpcy5fbG9hZE1hdHJpeChtYXRyaXgsIG11bHRpcGx5KTtcbn07XG5cbi8qXG4gKiBFcmFzZSB0aGUgY3VycmVudCBtYXRyaXggYnkgc2V0dGluZyB0aGUgZGVmYXVsdCBvbmVcbiAqXG4gKi9cbkNvbG9yTWF0cml4RmlsdGVyLnByb3RvdHlwZS5yZXNldCA9IGZ1bmN0aW9uICgpXG57XG4gICAgdmFyIG1hdHJpeCA9IFtcbiAgICAgICAgMSwgMCwgMCwgMCwgMCxcbiAgICAgICAgMCwgMSwgMCwgMCwgMCxcbiAgICAgICAgMCwgMCwgMSwgMCwgMCxcbiAgICAgICAgMCwgMCwgMCwgMSwgMFxuICAgIF07XG5cbiAgICB0aGlzLl9sb2FkTWF0cml4KG1hdHJpeCwgZmFsc2UpO1xufTtcblxuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhDb2xvck1hdHJpeEZpbHRlci5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBtYXRyaXggb2YgdGhlIGNvbG9yIG1hdHJpeCBmaWx0ZXJcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcltdfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuQ29sb3JNYXRyaXhGaWx0ZXIjXG4gICAgICogQGRlZmF1bHQgWzEsIDAsIDAsIDAsIDAsIDAsIDEsIDAsIDAsIDAsIDAsIDAsIDEsIDAsIDAsIDAsIDAsIDAsIDEsIDBdXG4gICAgICovXG4gICAgbWF0cml4OiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudW5pZm9ybXMubS52YWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudW5pZm9ybXMubS52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfVxufSk7XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uLy4uL2NvcmUnKTtcbi8vIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL3N1YnN0YWNrL2JyZnMvaXNzdWVzLzI1XG5cblxuLyoqXG4gKiBUaGlzIGxvd2VycyB0aGUgY29sb3IgZGVwdGggb2YgeW91ciBpbWFnZSBieSB0aGUgZ2l2ZW4gYW1vdW50LCBwcm9kdWNpbmcgYW4gaW1hZ2Ugd2l0aCBhIHNtYWxsZXIgcGFsZXR0ZS5cbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQWJzdHJhY3RGaWx0ZXJcbiAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnNcbiAqL1xuZnVuY3Rpb24gQ29sb3JTdGVwRmlsdGVyKClcbntcbiAgICBjb3JlLkFic3RyYWN0RmlsdGVyLmNhbGwodGhpcyxcbiAgICAgICAgLy8gdmVydGV4IHNoYWRlclxuICAgICAgICBudWxsLFxuICAgICAgICAvLyBmcmFnbWVudCBzaGFkZXJcbiAgICAgICAgXCJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcXG5cXG52YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDtcXG5cXG51bmlmb3JtIHNhbXBsZXIyRCB1U2FtcGxlcjtcXG51bmlmb3JtIGZsb2F0IHN0ZXA7XFxuXFxudm9pZCBtYWluKHZvaWQpXFxue1xcbiAgICB2ZWM0IGNvbG9yID0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2VGV4dHVyZUNvb3JkKTtcXG5cXG4gICAgY29sb3IgPSBmbG9vcihjb2xvciAqIHN0ZXApIC8gc3RlcDtcXG5cXG4gICAgZ2xfRnJhZ0NvbG9yID0gY29sb3I7XFxufVxcblwiLFxuICAgICAgICAvLyBjdXN0b20gdW5pZm9ybXNcbiAgICAgICAge1xuICAgICAgICAgICAgc3RlcDogeyB0eXBlOiAnMWYnLCB2YWx1ZTogNSB9XG4gICAgICAgIH1cbiAgICApO1xufVxuXG5Db2xvclN0ZXBGaWx0ZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShjb3JlLkFic3RyYWN0RmlsdGVyLnByb3RvdHlwZSk7XG5Db2xvclN0ZXBGaWx0ZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gQ29sb3JTdGVwRmlsdGVyO1xubW9kdWxlLmV4cG9ydHMgPSBDb2xvclN0ZXBGaWx0ZXI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKENvbG9yU3RlcEZpbHRlci5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBUaGUgbnVtYmVyIG9mIHN0ZXBzIHRvIHJlZHVjZSB0aGUgcGFsZXR0ZSBieS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLkNvbG9yU3RlcEZpbHRlciNcbiAgICAgKi9cbiAgICBzdGVwOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudW5pZm9ybXMuc3RlcC52YWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudW5pZm9ybXMuc3RlcC52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfVxufSk7XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uLy4uL2NvcmUnKTtcbi8vIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL3N1YnN0YWNrL2JyZnMvaXNzdWVzLzI1XG5cblxuLyoqXG4gKiBUaGUgQ29udm9sdXRpb25GaWx0ZXIgY2xhc3MgYXBwbGllcyBhIG1hdHJpeCBjb252b2x1dGlvbiBmaWx0ZXIgZWZmZWN0LlxuICogQSBjb252b2x1dGlvbiBjb21iaW5lcyBwaXhlbHMgaW4gdGhlIGlucHV0IGltYWdlIHdpdGggbmVpZ2hib3JpbmcgcGl4ZWxzIHRvIHByb2R1Y2UgYSBuZXcgaW1hZ2UuXG4gKiBBIHdpZGUgdmFyaWV0eSBvZiBpbWFnZSBlZmZlY3RzIGNhbiBiZSBhY2hpZXZlZCB0aHJvdWdoIGNvbnZvbHV0aW9ucywgaW5jbHVkaW5nIGJsdXJyaW5nLCBlZGdlXG4gKiBkZXRlY3Rpb24sIHNoYXJwZW5pbmcsIGVtYm9zc2luZywgYW5kIGJldmVsaW5nLiBUaGUgbWF0cml4IHNob3VsZCBiZSBzcGVjaWZpZWQgYXMgYSA5IHBvaW50IEFycmF5LlxuICogU2VlIGh0dHA6Ly9kb2NzLmdpbXAub3JnL2VuL3BsdWctaW4tY29udm1hdHJpeC5odG1sIGZvciBtb3JlIGluZm8uXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLkFic3RyYWN0RmlsdGVyXG4gKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzXG4gKiBAcGFyYW0gbWF0cml4IHtudW1iZXJbXX0gQW4gYXJyYXkgb2YgdmFsdWVzIHVzZWQgZm9yIG1hdHJpeCB0cmFuc2Zvcm1hdGlvbi4gU3BlY2lmaWVkIGFzIGEgOSBwb2ludCBBcnJheS5cbiAqIEBwYXJhbSB3aWR0aCB7bnVtYmVyfSBXaWR0aCBvZiB0aGUgb2JqZWN0IHlvdSBhcmUgdHJhbnNmb3JtaW5nXG4gKiBAcGFyYW0gaGVpZ2h0IHtudW1iZXJ9IEhlaWdodCBvZiB0aGUgb2JqZWN0IHlvdSBhcmUgdHJhbnNmb3JtaW5nXG4gKi9cbmZ1bmN0aW9uIENvbnZvbHV0aW9uRmlsdGVyKG1hdHJpeCwgd2lkdGgsIGhlaWdodClcbntcbiAgICBjb3JlLkFic3RyYWN0RmlsdGVyLmNhbGwodGhpcyxcbiAgICAgICAgLy8gdmVydGV4IHNoYWRlclxuICAgICAgICBudWxsLFxuICAgICAgICAvLyBmcmFnbWVudCBzaGFkZXJcbiAgICAgICAgXCJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcXG5cXG52YXJ5aW5nIG1lZGl1bXAgdmVjMiB2VGV4dHVyZUNvb3JkO1xcblxcbnVuaWZvcm0gc2FtcGxlcjJEIHVTYW1wbGVyO1xcbnVuaWZvcm0gdmVjMiB0ZXhlbFNpemU7XFxudW5pZm9ybSBmbG9hdCBtYXRyaXhbOV07XFxuXFxudm9pZCBtYWluKHZvaWQpXFxue1xcbiAgIHZlYzQgYzExID0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2VGV4dHVyZUNvb3JkIC0gdGV4ZWxTaXplKTsgLy8gdG9wIGxlZnRcXG4gICB2ZWM0IGMxMiA9IHRleHR1cmUyRCh1U2FtcGxlciwgdmVjMih2VGV4dHVyZUNvb3JkLngsIHZUZXh0dXJlQ29vcmQueSAtIHRleGVsU2l6ZS55KSk7IC8vIHRvcCBjZW50ZXJcXG4gICB2ZWM0IGMxMyA9IHRleHR1cmUyRCh1U2FtcGxlciwgdmVjMih2VGV4dHVyZUNvb3JkLnggKyB0ZXhlbFNpemUueCwgdlRleHR1cmVDb29yZC55IC0gdGV4ZWxTaXplLnkpKTsgLy8gdG9wIHJpZ2h0XFxuXFxuICAgdmVjNCBjMjEgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZlYzIodlRleHR1cmVDb29yZC54IC0gdGV4ZWxTaXplLngsIHZUZXh0dXJlQ29vcmQueSkpOyAvLyBtaWQgbGVmdFxcbiAgIHZlYzQgYzIyID0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2VGV4dHVyZUNvb3JkKTsgLy8gbWlkIGNlbnRlclxcbiAgIHZlYzQgYzIzID0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2ZWMyKHZUZXh0dXJlQ29vcmQueCArIHRleGVsU2l6ZS54LCB2VGV4dHVyZUNvb3JkLnkpKTsgLy8gbWlkIHJpZ2h0XFxuXFxuICAgdmVjNCBjMzEgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZlYzIodlRleHR1cmVDb29yZC54IC0gdGV4ZWxTaXplLngsIHZUZXh0dXJlQ29vcmQueSArIHRleGVsU2l6ZS55KSk7IC8vIGJvdHRvbSBsZWZ0XFxuICAgdmVjNCBjMzIgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZlYzIodlRleHR1cmVDb29yZC54LCB2VGV4dHVyZUNvb3JkLnkgKyB0ZXhlbFNpemUueSkpOyAvLyBib3R0b20gY2VudGVyXFxuICAgdmVjNCBjMzMgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZUZXh0dXJlQ29vcmQgKyB0ZXhlbFNpemUpOyAvLyBib3R0b20gcmlnaHRcXG5cXG4gICBnbF9GcmFnQ29sb3IgPVxcbiAgICAgICBjMTEgKiBtYXRyaXhbMF0gKyBjMTIgKiBtYXRyaXhbMV0gKyBjMTMgKiBtYXRyaXhbMl0gK1xcbiAgICAgICBjMjEgKiBtYXRyaXhbM10gKyBjMjIgKiBtYXRyaXhbNF0gKyBjMjMgKiBtYXRyaXhbNV0gK1xcbiAgICAgICBjMzEgKiBtYXRyaXhbNl0gKyBjMzIgKiBtYXRyaXhbN10gKyBjMzMgKiBtYXRyaXhbOF07XFxuXFxuICAgZ2xfRnJhZ0NvbG9yLmEgPSBjMjIuYTtcXG59XFxuXCIsXG4gICAgICAgIC8vIGN1c3RvbSB1bmlmb3Jtc1xuICAgICAgICB7XG4gICAgICAgICAgICBtYXRyaXg6ICAgICB7IHR5cGU6ICcxZnYnLCB2YWx1ZTogbmV3IEZsb2F0MzJBcnJheShtYXRyaXgpIH0sXG4gICAgICAgICAgICB0ZXhlbFNpemU6ICB7IHR5cGU6ICd2MicsIHZhbHVlOiB7IHg6IDEgLyB3aWR0aCwgeTogMSAvIGhlaWdodCB9IH1cbiAgICAgICAgfVxuICAgICk7XG59XG5cbkNvbnZvbHV0aW9uRmlsdGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoY29yZS5BYnN0cmFjdEZpbHRlci5wcm90b3R5cGUpO1xuQ29udm9sdXRpb25GaWx0ZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gQ29udm9sdXRpb25GaWx0ZXI7XG5tb2R1bGUuZXhwb3J0cyA9IENvbnZvbHV0aW9uRmlsdGVyO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhDb252b2x1dGlvbkZpbHRlci5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBBbiBhcnJheSBvZiB2YWx1ZXMgdXNlZCBmb3IgbWF0cml4IHRyYW5zZm9ybWF0aW9uLiBTcGVjaWZpZWQgYXMgYSA5IHBvaW50IEFycmF5LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyW119XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5Db252b2x1dGlvbkZpbHRlciNcbiAgICAgKi9cbiAgICBtYXRyaXg6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy51bmlmb3Jtcy5tYXRyaXgudmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLm1hdHJpeC52YWx1ZSA9IG5ldyBGbG9hdDMyQXJyYXkodmFsdWUpO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFdpZHRoIG9mIHRoZSBvYmplY3QgeW91IGFyZSB0cmFuc2Zvcm1pbmdcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLkNvbnZvbHV0aW9uRmlsdGVyI1xuICAgICAqL1xuICAgIHdpZHRoOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIDEvdGhpcy51bmlmb3Jtcy50ZXhlbFNpemUudmFsdWUueDtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudW5pZm9ybXMudGV4ZWxTaXplLnZhbHVlLnggPSAxL3ZhbHVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIEhlaWdodCBvZiB0aGUgb2JqZWN0IHlvdSBhcmUgdHJhbnNmb3JtaW5nXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5Db252b2x1dGlvbkZpbHRlciNcbiAgICAgKi9cbiAgICBoZWlnaHQ6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gMS90aGlzLnVuaWZvcm1zLnRleGVsU2l6ZS52YWx1ZS55O1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy50ZXhlbFNpemUudmFsdWUueSA9IDEvdmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG59KTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vLi4vY29yZScpO1xuLy8gQHNlZSBodHRwczovL2dpdGh1Yi5jb20vc3Vic3RhY2svYnJmcy9pc3N1ZXMvMjVcblxuXG4vKipcbiAqIEEgQ3Jvc3MgSGF0Y2ggZWZmZWN0IGZpbHRlci5cbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQWJzdHJhY3RGaWx0ZXJcbiAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnNcbiAqL1xuZnVuY3Rpb24gQ3Jvc3NIYXRjaEZpbHRlcigpXG57XG4gICAgY29yZS5BYnN0cmFjdEZpbHRlci5jYWxsKHRoaXMsXG4gICAgICAgIC8vIHZlcnRleCBzaGFkZXJcbiAgICAgICAgbnVsbCxcbiAgICAgICAgLy8gZnJhZ21lbnQgc2hhZGVyXG4gICAgICAgIFwicHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XFxuXFxudmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7XFxuXFxudW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXI7XFxuXFxudm9pZCBtYWluKHZvaWQpXFxue1xcbiAgICBmbG9hdCBsdW0gPSBsZW5ndGgodGV4dHVyZTJEKHVTYW1wbGVyLCB2VGV4dHVyZUNvb3JkLnh5KS5yZ2IpO1xcblxcbiAgICBnbF9GcmFnQ29sb3IgPSB2ZWM0KDEuMCwgMS4wLCAxLjAsIDEuMCk7XFxuXFxuICAgIGlmIChsdW0gPCAxLjAwKVxcbiAgICB7XFxuICAgICAgICBpZiAobW9kKGdsX0ZyYWdDb29yZC54ICsgZ2xfRnJhZ0Nvb3JkLnksIDEwLjApID09IDAuMClcXG4gICAgICAgIHtcXG4gICAgICAgICAgICBnbF9GcmFnQ29sb3IgPSB2ZWM0KDAuMCwgMC4wLCAwLjAsIDEuMCk7XFxuICAgICAgICB9XFxuICAgIH1cXG5cXG4gICAgaWYgKGx1bSA8IDAuNzUpXFxuICAgIHtcXG4gICAgICAgIGlmIChtb2QoZ2xfRnJhZ0Nvb3JkLnggLSBnbF9GcmFnQ29vcmQueSwgMTAuMCkgPT0gMC4wKVxcbiAgICAgICAge1xcbiAgICAgICAgICAgIGdsX0ZyYWdDb2xvciA9IHZlYzQoMC4wLCAwLjAsIDAuMCwgMS4wKTtcXG4gICAgICAgIH1cXG4gICAgfVxcblxcbiAgICBpZiAobHVtIDwgMC41MClcXG4gICAge1xcbiAgICAgICAgaWYgKG1vZChnbF9GcmFnQ29vcmQueCArIGdsX0ZyYWdDb29yZC55IC0gNS4wLCAxMC4wKSA9PSAwLjApXFxuICAgICAgICB7XFxuICAgICAgICAgICAgZ2xfRnJhZ0NvbG9yID0gdmVjNCgwLjAsIDAuMCwgMC4wLCAxLjApO1xcbiAgICAgICAgfVxcbiAgICB9XFxuXFxuICAgIGlmIChsdW0gPCAwLjMpXFxuICAgIHtcXG4gICAgICAgIGlmIChtb2QoZ2xfRnJhZ0Nvb3JkLnggLSBnbF9GcmFnQ29vcmQueSAtIDUuMCwgMTAuMCkgPT0gMC4wKVxcbiAgICAgICAge1xcbiAgICAgICAgICAgIGdsX0ZyYWdDb2xvciA9IHZlYzQoMC4wLCAwLjAsIDAuMCwgMS4wKTtcXG4gICAgICAgIH1cXG4gICAgfVxcbn1cXG5cIlxuICAgICk7XG59XG5cbkNyb3NzSGF0Y2hGaWx0ZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShjb3JlLkFic3RyYWN0RmlsdGVyLnByb3RvdHlwZSk7XG5Dcm9zc0hhdGNoRmlsdGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IENyb3NzSGF0Y2hGaWx0ZXI7XG5tb2R1bGUuZXhwb3J0cyA9IENyb3NzSGF0Y2hGaWx0ZXI7XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uLy4uL2NvcmUnKTtcbi8vIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL3N1YnN0YWNrL2JyZnMvaXNzdWVzLzI1XG5cblxuLyoqXG4gKiBUaGUgRGlzcGxhY2VtZW50RmlsdGVyIGNsYXNzIHVzZXMgdGhlIHBpeGVsIHZhbHVlcyBmcm9tIHRoZSBzcGVjaWZpZWQgdGV4dHVyZSAoY2FsbGVkIHRoZSBkaXNwbGFjZW1lbnQgbWFwKSB0byBwZXJmb3JtIGEgZGlzcGxhY2VtZW50IG9mIGFuIG9iamVjdC5cbiAqIFlvdSBjYW4gdXNlIHRoaXMgZmlsdGVyIHRvIGFwcGx5IGFsbCBtYW5vciBvZiBjcmF6eSB3YXJwaW5nIGVmZmVjdHNcbiAqIEN1cnJlbnRseSB0aGUgciBwcm9wZXJ0eSBvZiB0aGUgdGV4dHVyZSBpcyB1c2VkIHRvIG9mZnNldCB0aGUgeCBhbmQgdGhlIGcgcHJvcGVydHkgb2YgdGhlIHRleHR1cmUgaXMgdXNlZCB0byBvZmZzZXQgdGhlIHkuXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLkFic3RyYWN0RmlsdGVyXG4gKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzXG4gKiBAcGFyYW0gc3ByaXRlIHtQSVhJLlNwcml0ZX0gdGhlIHNwcml0ZSB1c2VkIGZvciB0aGUgZGlzcGxhY2VtZW50IG1hcC4gKG1ha2Ugc3VyZSBpdHMgYWRkZWQgdG8gdGhlIHNjZW5lISlcbiAqL1xuZnVuY3Rpb24gRGlzcGxhY2VtZW50RmlsdGVyKHNwcml0ZSwgc2NhbGUpXG57XG4gICAgdmFyIG1hc2tNYXRyaXggPSBuZXcgY29yZS5NYXRyaXgoKTtcbiAgICBzcHJpdGUucmVuZGVyYWJsZSA9IGZhbHNlO1xuXG4gICAgY29yZS5BYnN0cmFjdEZpbHRlci5jYWxsKHRoaXMsXG4gICAgICAgIC8vIHZlcnRleCBzaGFkZXJcbiAgICAgICAgXCJhdHRyaWJ1dGUgdmVjMiBhVmVydGV4UG9zaXRpb247XFxuYXR0cmlidXRlIHZlYzIgYVRleHR1cmVDb29yZDtcXG5hdHRyaWJ1dGUgdmVjNCBhQ29sb3I7XFxuXFxudW5pZm9ybSBtYXQzIHByb2plY3Rpb25NYXRyaXg7XFxudW5pZm9ybSBtYXQzIG90aGVyTWF0cml4O1xcblxcbnZhcnlpbmcgdmVjMiB2TWFwQ29vcmQ7XFxudmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7XFxudmFyeWluZyB2ZWM0IHZDb2xvcjtcXG5cXG52b2lkIG1haW4odm9pZClcXG57XFxuICAgZ2xfUG9zaXRpb24gPSB2ZWM0KChwcm9qZWN0aW9uTWF0cml4ICogdmVjMyhhVmVydGV4UG9zaXRpb24sIDEuMCkpLnh5LCAwLjAsIDEuMCk7XFxuICAgdlRleHR1cmVDb29yZCA9IGFUZXh0dXJlQ29vcmQ7XFxuICAgdk1hcENvb3JkID0gKCBvdGhlck1hdHJpeCAqIHZlYzMoIGFUZXh0dXJlQ29vcmQsIDEuMCkgICkueHk7XFxuICAgdkNvbG9yID0gdmVjNChhQ29sb3IucmdiICogYUNvbG9yLmEsIGFDb2xvci5hKTtcXG59XFxuXCIsXG4gICAgICAgIC8vIGZyYWdtZW50IHNoYWRlclxuICAgICAgICBcInByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xcblxcbnZhcnlpbmcgdmVjMiB2TWFwQ29vcmQ7XFxudmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7XFxudmFyeWluZyB2ZWM0IHZDb2xvcjtcXG5cXG51bmlmb3JtIHZlYzIgc2NhbGU7XFxuXFxudW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXI7XFxudW5pZm9ybSBzYW1wbGVyMkQgbWFwU2FtcGxlcjtcXG5cXG52b2lkIG1haW4odm9pZClcXG57XFxuICAgdmVjNCBtYXAgPSAgdGV4dHVyZTJEKG1hcFNhbXBsZXIsIHZNYXBDb29yZCk7XFxuXFxuICAgbWFwIC09IDAuNTtcXG4gICBtYXAueHkgKj0gc2NhbGU7XFxuXFxuICAgZ2xfRnJhZ0NvbG9yID0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2ZWMyKHZUZXh0dXJlQ29vcmQueCArIG1hcC54LCB2VGV4dHVyZUNvb3JkLnkgKyBtYXAueSkpO1xcbn1cXG5cIixcbiAgICAgICAgLy8gdW5pZm9ybXNcbiAgICAgICAge1xuICAgICAgICAgICAgbWFwU2FtcGxlcjogICAgIHsgdHlwZTogJ3NhbXBsZXIyRCcsIHZhbHVlOiBzcHJpdGUudGV4dHVyZSB9LFxuICAgICAgICAgICAgb3RoZXJNYXRyaXg6ICAgIHsgdHlwZTogJ21hdDMnLCB2YWx1ZTogbWFza01hdHJpeC50b0FycmF5KHRydWUpIH0sXG4gICAgICAgICAgICBzY2FsZTogICAgICAgICAgeyB0eXBlOiAndjInLCB2YWx1ZTogeyB4OiAxLCB5OiAxIH0gfVxuICAgICAgICB9XG4gICAgKTtcblxuICAgIHRoaXMubWFza1Nwcml0ZSA9IHNwcml0ZTtcbiAgICB0aGlzLm1hc2tNYXRyaXggPSBtYXNrTWF0cml4O1xuXG4gICAgaWYgKHNjYWxlID09PSBudWxsIHx8IHNjYWxlID09PSB1bmRlZmluZWQpXG4gICAge1xuICAgICAgICBzY2FsZSA9IDIwO1xuICAgIH1cblxuICAgIHRoaXMuc2NhbGUgPSBuZXcgY29yZS5Qb2ludChzY2FsZSwgc2NhbGUpO1xufVxuXG5EaXNwbGFjZW1lbnRGaWx0ZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShjb3JlLkFic3RyYWN0RmlsdGVyLnByb3RvdHlwZSk7XG5EaXNwbGFjZW1lbnRGaWx0ZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gRGlzcGxhY2VtZW50RmlsdGVyO1xubW9kdWxlLmV4cG9ydHMgPSBEaXNwbGFjZW1lbnRGaWx0ZXI7XG5cbkRpc3BsYWNlbWVudEZpbHRlci5wcm90b3R5cGUuYXBwbHlGaWx0ZXIgPSBmdW5jdGlvbiAocmVuZGVyZXIsIGlucHV0LCBvdXRwdXQpXG57XG4gICAgdmFyIGZpbHRlck1hbmFnZXIgPSByZW5kZXJlci5maWx0ZXJNYW5hZ2VyO1xuXG4gICAgZmlsdGVyTWFuYWdlci5jYWxjdWxhdGVNYXBwZWRNYXRyaXgoaW5wdXQuZnJhbWUsIHRoaXMubWFza1Nwcml0ZSwgdGhpcy5tYXNrTWF0cml4KTtcblxuICAgIHRoaXMudW5pZm9ybXMub3RoZXJNYXRyaXgudmFsdWUgPSB0aGlzLm1hc2tNYXRyaXgudG9BcnJheSh0cnVlKTtcbiAgICB0aGlzLnVuaWZvcm1zLnNjYWxlLnZhbHVlLnggPSB0aGlzLnNjYWxlLnggKiAoMS9pbnB1dC5mcmFtZS53aWR0aCk7XG4gICAgdGhpcy51bmlmb3Jtcy5zY2FsZS52YWx1ZS55ID0gdGhpcy5zY2FsZS55ICogKDEvaW5wdXQuZnJhbWUuaGVpZ2h0KTtcblxuICAgIHZhciBzaGFkZXIgPSB0aGlzLmdldFNoYWRlcihyZW5kZXJlcik7XG4gICAgIC8vIGRyYXcgdGhlIGZpbHRlci4uLlxuICAgIGZpbHRlck1hbmFnZXIuYXBwbHlGaWx0ZXIoc2hhZGVyLCBpbnB1dCwgb3V0cHV0KTtcbn07XG5cblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoRGlzcGxhY2VtZW50RmlsdGVyLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFRoZSB0ZXh0dXJlIHVzZWQgZm9yIHRoZSBkaXNwbGFjZW1lbnQgbWFwLiBNdXN0IGJlIHBvd2VyIG9mIDIgc2l6ZWQgdGV4dHVyZS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuVGV4dHVyZX1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLkRpc3BsYWNlbWVudEZpbHRlciNcbiAgICAgKi9cbiAgICBtYXA6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy51bmlmb3Jtcy5tYXBTYW1wbGVyLnZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy5tYXBTYW1wbGVyLnZhbHVlID0gdmFsdWU7XG5cbiAgICAgICAgfVxuICAgIH1cbn0pO1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi8uLi9jb3JlJyk7XG4vLyBAc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9zdWJzdGFjay9icmZzL2lzc3Vlcy8yNVxuXG5cbi8qKlxuICogQGF1dGhvciBNYXQgR3JvdmVzIGh0dHA6Ly9tYXRncm92ZXMuY29tLyBARG9vcm1hdDIzXG4gKiBvcmlnaW5hbCBmaWx0ZXI6IGh0dHBzOi8vZ2l0aHViLmNvbS9ldmFudy9nbGZ4LmpzL2Jsb2IvbWFzdGVyL3NyYy9maWx0ZXJzL2Z1bi9kb3RzY3JlZW4uanNcbiAqL1xuXG4vKipcbiAqIFRoaXMgZmlsdGVyIGFwcGxpZXMgYSBkb3RzY3JlZW4gZWZmZWN0IG1ha2luZyBkaXNwbGF5IG9iamVjdHMgYXBwZWFyIHRvIGJlIG1hZGUgb3V0IG9mXG4gKiBibGFjayBhbmQgd2hpdGUgaGFsZnRvbmUgZG90cyBsaWtlIGFuIG9sZCBwcmludGVyLlxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5BYnN0cmFjdEZpbHRlclxuICogQG1lbWJlcm9mIFBJWEkuZmlsdGVyc1xuICovXG5mdW5jdGlvbiBEb3RTY3JlZW5GaWx0ZXIoKVxue1xuICAgIGNvcmUuQWJzdHJhY3RGaWx0ZXIuY2FsbCh0aGlzLFxuICAgICAgICAvLyB2ZXJ0ZXggc2hhZGVyXG4gICAgICAgIG51bGwsXG4gICAgICAgIC8vIGZyYWdtZW50IHNoYWRlclxuICAgICAgICBcInByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xcblxcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xcbnZhcnlpbmcgdmVjNCB2Q29sb3I7XFxuXFxudW5pZm9ybSB2ZWM0IGRpbWVuc2lvbnM7XFxudW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXI7XFxuXFxudW5pZm9ybSBmbG9hdCBhbmdsZTtcXG51bmlmb3JtIGZsb2F0IHNjYWxlO1xcblxcbmZsb2F0IHBhdHRlcm4oKVxcbntcXG4gICBmbG9hdCBzID0gc2luKGFuZ2xlKSwgYyA9IGNvcyhhbmdsZSk7XFxuICAgdmVjMiB0ZXggPSB2VGV4dHVyZUNvb3JkICogZGltZW5zaW9ucy54eTtcXG4gICB2ZWMyIHBvaW50ID0gdmVjMihcXG4gICAgICAgYyAqIHRleC54IC0gcyAqIHRleC55LFxcbiAgICAgICBzICogdGV4LnggKyBjICogdGV4LnlcXG4gICApICogc2NhbGU7XFxuICAgcmV0dXJuIChzaW4ocG9pbnQueCkgKiBzaW4ocG9pbnQueSkpICogNC4wO1xcbn1cXG5cXG52b2lkIG1haW4oKVxcbntcXG4gICB2ZWM0IGNvbG9yID0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2VGV4dHVyZUNvb3JkKTtcXG4gICBmbG9hdCBhdmVyYWdlID0gKGNvbG9yLnIgKyBjb2xvci5nICsgY29sb3IuYikgLyAzLjA7XFxuICAgZ2xfRnJhZ0NvbG9yID0gdmVjNCh2ZWMzKGF2ZXJhZ2UgKiAxMC4wIC0gNS4wICsgcGF0dGVybigpKSwgY29sb3IuYSk7XFxufVxcblwiLFxuICAgICAgICAvLyBjdXN0b20gdW5pZm9ybXNcbiAgICAgICAge1xuICAgICAgICAgICAgc2NhbGU6ICAgICAgeyB0eXBlOiAnMWYnLCB2YWx1ZTogMSB9LFxuICAgICAgICAgICAgYW5nbGU6ICAgICAgeyB0eXBlOiAnMWYnLCB2YWx1ZTogNSB9LFxuICAgICAgICAgICAgZGltZW5zaW9uczogeyB0eXBlOiAnNGZ2JywgdmFsdWU6IFswLCAwLCAwLCAwXSB9XG4gICAgICAgIH1cbiAgICApO1xufVxuXG5Eb3RTY3JlZW5GaWx0ZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShjb3JlLkFic3RyYWN0RmlsdGVyLnByb3RvdHlwZSk7XG5Eb3RTY3JlZW5GaWx0ZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gRG90U2NyZWVuRmlsdGVyO1xubW9kdWxlLmV4cG9ydHMgPSBEb3RTY3JlZW5GaWx0ZXI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKERvdFNjcmVlbkZpbHRlci5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBUaGUgc2NhbGUgb2YgdGhlIGVmZmVjdC5cbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5Eb3RTY3JlZW5GaWx0ZXIjXG4gICAgICovXG4gICAgc2NhbGU6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy51bmlmb3Jtcy5zY2FsZS52YWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudW5pZm9ybXMuc2NhbGUudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBUaGUgcmFkaXVzIG9mIHRoZSBlZmZlY3QuXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuRG90U2NyZWVuRmlsdGVyI1xuICAgICAqL1xuICAgIGFuZ2xlOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudW5pZm9ybXMuYW5nbGUudmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLmFuZ2xlLnZhbHVlID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG59KTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vLi4vY29yZScpO1xuXG4vLyBAc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9zdWJzdGFjay9icmZzL2lzc3Vlcy8yNVxuXG5cbi8qKlxuICogVGhlIEJsdXJZVGludEZpbHRlciBhcHBsaWVzIGEgdmVydGljYWwgR2F1c3NpYW4gYmx1ciB0byBhbiBvYmplY3QuXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLkFic3RyYWN0RmlsdGVyXG4gKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzXG4gKi9cbmZ1bmN0aW9uIEJsdXJZVGludEZpbHRlcigpXG57XG4gICAgY29yZS5BYnN0cmFjdEZpbHRlci5jYWxsKHRoaXMsXG4gICAgICAgIC8vIHZlcnRleCBzaGFkZXJcbiAgICAgICAgXCJhdHRyaWJ1dGUgdmVjMiBhVmVydGV4UG9zaXRpb247XFxuYXR0cmlidXRlIHZlYzIgYVRleHR1cmVDb29yZDtcXG5hdHRyaWJ1dGUgdmVjNCBhQ29sb3I7XFxuXFxudW5pZm9ybSBmbG9hdCBzdHJlbmd0aDtcXG51bmlmb3JtIHZlYzIgb2Zmc2V0O1xcblxcbnVuaWZvcm0gbWF0MyBwcm9qZWN0aW9uTWF0cml4O1xcblxcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xcbnZhcnlpbmcgdmVjNCB2Q29sb3I7XFxudmFyeWluZyB2ZWMyIHZCbHVyVGV4Q29vcmRzWzZdO1xcblxcbnZvaWQgbWFpbih2b2lkKVxcbntcXG4gICAgZ2xfUG9zaXRpb24gPSB2ZWM0KChwcm9qZWN0aW9uTWF0cml4ICogdmVjMygoYVZlcnRleFBvc2l0aW9uK29mZnNldCksIDEuMCkpLnh5LCAwLjAsIDEuMCk7XFxuICAgIHZUZXh0dXJlQ29vcmQgPSBhVGV4dHVyZUNvb3JkO1xcblxcbiAgICB2Qmx1clRleENvb3Jkc1sgMF0gPSBhVGV4dHVyZUNvb3JkICsgdmVjMigwLjAsIC0wLjAxMiAqIHN0cmVuZ3RoKTtcXG4gICAgdkJsdXJUZXhDb29yZHNbIDFdID0gYVRleHR1cmVDb29yZCArIHZlYzIoMC4wLCAtMC4wMDggKiBzdHJlbmd0aCk7XFxuICAgIHZCbHVyVGV4Q29vcmRzWyAyXSA9IGFUZXh0dXJlQ29vcmQgKyB2ZWMyKDAuMCwgLTAuMDA0ICogc3RyZW5ndGgpO1xcbiAgICB2Qmx1clRleENvb3Jkc1sgM10gPSBhVGV4dHVyZUNvb3JkICsgdmVjMigwLjAsICAwLjAwNCAqIHN0cmVuZ3RoKTtcXG4gICAgdkJsdXJUZXhDb29yZHNbIDRdID0gYVRleHR1cmVDb29yZCArIHZlYzIoMC4wLCAgMC4wMDggKiBzdHJlbmd0aCk7XFxuICAgIHZCbHVyVGV4Q29vcmRzWyA1XSA9IGFUZXh0dXJlQ29vcmQgKyB2ZWMyKDAuMCwgIDAuMDEyICogc3RyZW5ndGgpO1xcblxcbiAgIHZDb2xvciA9IHZlYzQoYUNvbG9yLnJnYiAqIGFDb2xvci5hLCBhQ29sb3IuYSk7XFxufVxcblwiLFxuICAgICAgICAvLyBmcmFnbWVudCBzaGFkZXJcbiAgICAgICAgXCJwcmVjaXNpb24gbG93cCBmbG9hdDtcXG5cXG52YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDtcXG52YXJ5aW5nIHZlYzIgdkJsdXJUZXhDb29yZHNbNl07XFxudmFyeWluZyB2ZWM0IHZDb2xvcjtcXG5cXG51bmlmb3JtIHZlYzMgY29sb3I7XFxudW5pZm9ybSBmbG9hdCBhbHBoYTtcXG5cXG51bmlmb3JtIHNhbXBsZXIyRCB1U2FtcGxlcjtcXG5cXG52b2lkIG1haW4odm9pZClcXG57XFxuICAgIHZlYzQgc3VtID0gdmVjNCgwLjApO1xcblxcbiAgICBzdW0gKz0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2Qmx1clRleENvb3Jkc1sgMF0pKjAuMDA0NDMxODQ4NDExOTM4MzQxO1xcbiAgICBzdW0gKz0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2Qmx1clRleENvb3Jkc1sgMV0pKjAuMDUzOTkwOTY2NTEzMTg5ODU7XFxuICAgIHN1bSArPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZCbHVyVGV4Q29vcmRzWyAyXSkqMC4yNDE5NzA3MjQ1MTkxNDU0O1xcbiAgICBzdW0gKz0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2VGV4dHVyZUNvb3JkICAgICApKjAuMzk4OTQyMjgwNDAxNDMyNztcXG4gICAgc3VtICs9IHRleHR1cmUyRCh1U2FtcGxlciwgdkJsdXJUZXhDb29yZHNbIDNdKSowLjI0MTk3MDcyNDUxOTE0NTQ7XFxuICAgIHN1bSArPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZCbHVyVGV4Q29vcmRzWyA0XSkqMC4wNTM5OTA5NjY1MTMxODk4NTtcXG4gICAgc3VtICs9IHRleHR1cmUyRCh1U2FtcGxlciwgdkJsdXJUZXhDb29yZHNbIDVdKSowLjAwNDQzMTg0ODQxMTkzODM0MTtcXG5cXG4gICAgZ2xfRnJhZ0NvbG9yID0gdmVjNCggY29sb3IucmdiICogc3VtLmEgKiBhbHBoYSwgc3VtLmEgKiBhbHBoYSApO1xcbn1cXG5cIixcbiAgICAgICAgLy8gc2V0IHRoZSB1bmlmb3Jtc1xuICAgICAgICB7XG4gICAgICAgICAgICBibHVyOiB7IHR5cGU6ICcxZicsIHZhbHVlOiAxIC8gNTEyIH0sXG4gICAgICAgICAgICBjb2xvcjogeyB0eXBlOiAnYycsIHZhbHVlOiBbMCwwLDBdfSxcbiAgICAgICAgICAgIGFscGhhOiB7IHR5cGU6ICcxZicsIHZhbHVlOiAwLjcgfSxcbiAgICAgICAgICAgIG9mZnNldDogeyB0eXBlOiAnMmYnLCB2YWx1ZTpbNSwgNV19LFxuICAgICAgICAgICAgc3RyZW5ndGg6IHsgdHlwZTogJzFmJywgdmFsdWU6MX1cbiAgICAgICAgfVxuICAgICk7XG5cbiAgICB0aGlzLnBhc3NlcyA9IDE7XG4gICAgdGhpcy5zdHJlbmd0aCA9IDQ7XG59XG5cbkJsdXJZVGludEZpbHRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuQWJzdHJhY3RGaWx0ZXIucHJvdG90eXBlKTtcbkJsdXJZVGludEZpbHRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBCbHVyWVRpbnRGaWx0ZXI7XG5tb2R1bGUuZXhwb3J0cyA9IEJsdXJZVGludEZpbHRlcjtcblxuQmx1cllUaW50RmlsdGVyLnByb3RvdHlwZS5hcHBseUZpbHRlciA9IGZ1bmN0aW9uIChyZW5kZXJlciwgaW5wdXQsIG91dHB1dCwgY2xlYXIpXG57XG4gICAgdmFyIHNoYWRlciA9IHRoaXMuZ2V0U2hhZGVyKHJlbmRlcmVyKTtcblxuICAgIHRoaXMudW5pZm9ybXMuc3RyZW5ndGgudmFsdWUgPSB0aGlzLnN0cmVuZ3RoIC8gNCAvIHRoaXMucGFzc2VzICogKGlucHV0LmZyYW1lLmhlaWdodCAvIGlucHV0LnNpemUuaGVpZ2h0KTtcblxuICAgIGlmKHRoaXMucGFzc2VzID09PSAxKVxuICAgIHtcbiAgICAgICAgcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5hcHBseUZpbHRlcihzaGFkZXIsIGlucHV0LCBvdXRwdXQsIGNsZWFyKTtcbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgdmFyIHJlbmRlclRhcmdldCA9IHJlbmRlcmVyLmZpbHRlck1hbmFnZXIuZ2V0UmVuZGVyVGFyZ2V0KHRydWUpO1xuICAgICAgICB2YXIgZmxpcCA9IGlucHV0O1xuICAgICAgICB2YXIgZmxvcCA9IHJlbmRlclRhcmdldDtcblxuICAgICAgICBmb3IodmFyIGkgPSAwOyBpIDwgdGhpcy5wYXNzZXMtMTsgaSsrKVxuICAgICAgICB7XG4gICAgICAgICAgICByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLmFwcGx5RmlsdGVyKHNoYWRlciwgZmxpcCwgZmxvcCwgY2xlYXIpO1xuXG4gICAgICAgICAgIHZhciB0ZW1wID0gZmxvcDtcbiAgICAgICAgICAgZmxvcCA9IGZsaXA7XG4gICAgICAgICAgIGZsaXAgPSB0ZW1wO1xuICAgICAgICB9XG5cbiAgICAgICAgcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5hcHBseUZpbHRlcihzaGFkZXIsIGZsaXAsIG91dHB1dCwgY2xlYXIpO1xuXG4gICAgICAgIHJlbmRlcmVyLmZpbHRlck1hbmFnZXIucmV0dXJuUmVuZGVyVGFyZ2V0KHJlbmRlclRhcmdldCk7XG4gICAgfVxufTtcblxuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhCbHVyWVRpbnRGaWx0ZXIucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgc3RyZW5ndGggb2YgYm90aCB0aGUgYmx1ci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLkJsdXJZVGludEZpbHRlciNcbiAgICAgKiBAZGVmYXVsdCAyXG4gICAgICovXG4gICAgYmx1cjoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiAgdGhpcy5zdHJlbmd0aDtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMucGFkZGluZyA9IHZhbHVlICogMC41O1xuICAgICAgICAgICAgdGhpcy5zdHJlbmd0aCA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfVxufSk7XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uLy4uL2NvcmUnKSxcbiAgICBCbHVyWEZpbHRlciA9IHJlcXVpcmUoJy4uL2JsdXIvQmx1clhGaWx0ZXInKSxcbiAgICBCbHVyWVRpbnRGaWx0ZXIgPSByZXF1aXJlKCcuL0JsdXJZVGludEZpbHRlcicpO1xuXG4vKipcbiAqIFRoZSBEcm9wU2hhZG93RmlsdGVyIGFwcGxpZXMgYSBHYXVzc2lhbiBibHVyIHRvIGFuIG9iamVjdC5cbiAqIFRoZSBzdHJlbmd0aCBvZiB0aGUgYmx1ciBjYW4gYmUgc2V0IGZvciB4LSBhbmQgeS1heGlzIHNlcGFyYXRlbHkuXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLkFic3RyYWN0RmlsdGVyXG4gKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzXG4gKi9cbmZ1bmN0aW9uIERyb3BTaGFkb3dGaWx0ZXIoKVxue1xuICAgIGNvcmUuQWJzdHJhY3RGaWx0ZXIuY2FsbCh0aGlzKTtcblxuICAgIHRoaXMuYmx1clhGaWx0ZXIgPSBuZXcgQmx1clhGaWx0ZXIoKTtcbiAgICB0aGlzLmJsdXJZVGludEZpbHRlciA9IG5ldyBCbHVyWVRpbnRGaWx0ZXIoKTtcblxuICAgIHRoaXMuZGVmYXVsdEZpbHRlciA9IG5ldyBjb3JlLkFic3RyYWN0RmlsdGVyKCk7XG5cbiAgICB0aGlzLnBhZGRpbmcgPSAzMDtcblxuICAgIHRoaXMuX2RpcnR5UG9zaXRpb24gPSB0cnVlO1xuICAgIHRoaXMuX2FuZ2xlID0gNDUgKiBNYXRoLlBJIC8gMTgwO1xuICAgIHRoaXMuX2Rpc3RhbmNlID0gMTA7XG4gICAgdGhpcy5hbHBoYSA9IDAuNzU7XG4gICAgdGhpcy5oaWRlT2JqZWN0ID0gZmFsc2U7XG4gICAgdGhpcy5ibGVuZE1vZGUgPSBjb3JlLkJMRU5EX01PREVTLk1VTFRJUExZO1xufVxuXG5Ecm9wU2hhZG93RmlsdGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoY29yZS5BYnN0cmFjdEZpbHRlci5wcm90b3R5cGUpO1xuRHJvcFNoYWRvd0ZpbHRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBEcm9wU2hhZG93RmlsdGVyO1xubW9kdWxlLmV4cG9ydHMgPSBEcm9wU2hhZG93RmlsdGVyO1xuXG5Ecm9wU2hhZG93RmlsdGVyLnByb3RvdHlwZS5hcHBseUZpbHRlciA9IGZ1bmN0aW9uIChyZW5kZXJlciwgaW5wdXQsIG91dHB1dClcbntcbiAgICB2YXIgcmVuZGVyVGFyZ2V0ID0gcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5nZXRSZW5kZXJUYXJnZXQodHJ1ZSk7XG5cbiAgICAvL1RPRE8gLSBjb3B5VGV4U3ViSW1hZ2UyRCBjb3VsZCBiZSB1c2VkIGhlcmU/XG4gICAgaWYodGhpcy5fZGlydHlQb3NpdGlvbilcbiAgICB7XG4gICAgICAgIHRoaXMuX2RpcnR5UG9zaXRpb24gPSBmYWxzZTtcblxuICAgICAgICB0aGlzLmJsdXJZVGludEZpbHRlci51bmlmb3Jtcy5vZmZzZXQudmFsdWVbMF0gPSBNYXRoLnNpbih0aGlzLl9hbmdsZSkgKiB0aGlzLl9kaXN0YW5jZTtcbiAgICAgICAgdGhpcy5ibHVyWVRpbnRGaWx0ZXIudW5pZm9ybXMub2Zmc2V0LnZhbHVlWzFdID0gTWF0aC5jb3ModGhpcy5fYW5nbGUpICogdGhpcy5fZGlzdGFuY2U7XG4gICAgfVxuXG4gICAgdGhpcy5ibHVyWEZpbHRlci5hcHBseUZpbHRlcihyZW5kZXJlciwgaW5wdXQsIHJlbmRlclRhcmdldCk7XG5cbiAgICByZW5kZXJlci5ibGVuZE1vZGVNYW5hZ2VyLnNldEJsZW5kTW9kZSh0aGlzLmJsZW5kTW9kZSk7XG5cbiAgICB0aGlzLmJsdXJZVGludEZpbHRlci5hcHBseUZpbHRlcihyZW5kZXJlciwgcmVuZGVyVGFyZ2V0LCBvdXRwdXQpO1xuXG4gICAgcmVuZGVyZXIuYmxlbmRNb2RlTWFuYWdlci5zZXRCbGVuZE1vZGUoY29yZS5CTEVORF9NT0RFUy5OT1JNQUwpO1xuXG4gICAgaWYoIXRoaXMuaGlkZU9iamVjdClcbiAgICB7XG5cbiAgICAgICAgdGhpcy5kZWZhdWx0RmlsdGVyLmFwcGx5RmlsdGVyKHJlbmRlcmVyLCBpbnB1dCwgb3V0cHV0KTtcbiAgICB9XG5cblxuICAgIHJlbmRlcmVyLmZpbHRlck1hbmFnZXIucmV0dXJuUmVuZGVyVGFyZ2V0KHJlbmRlclRhcmdldCk7XG59O1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhEcm9wU2hhZG93RmlsdGVyLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIHN0cmVuZ3RoIG9mIGJvdGggdGhlIGJsdXJYIGFuZCBibHVyWSBwcm9wZXJ0aWVzIHNpbXVsdGFuZW91c2x5XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlck9mIFBJWEkuZmlsdGVycy5Ecm9wU2hhZG93RmlsdGVyI1xuICAgICAqIEBkZWZhdWx0IDJcbiAgICAgKi9cbiAgICBibHVyOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuYmx1clhGaWx0ZXIuYmx1cjtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuYmx1clhGaWx0ZXIuYmx1ciA9IHRoaXMuYmx1cllUaW50RmlsdGVyLmJsdXIgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBzdHJlbmd0aCBvZiB0aGUgYmx1clggcHJvcGVydHlcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyT2YgUElYSS5maWx0ZXJzLkRyb3BTaGFkb3dGaWx0ZXIjXG4gICAgICogQGRlZmF1bHQgMlxuICAgICAqL1xuICAgIGJsdXJYOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuYmx1clhGaWx0ZXIuYmx1cjtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuYmx1clhGaWx0ZXIuYmx1ciA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIHN0cmVuZ3RoIG9mIHRoZSBibHVyWSBwcm9wZXJ0eVxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJPZiBQSVhJLmZpbHRlcnMuRHJvcFNoYWRvd0ZpbHRlciNcbiAgICAgKiBAZGVmYXVsdCAyXG4gICAgICovXG4gICAgYmx1clk6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5ibHVyWVRpbnRGaWx0ZXIuYmx1cjtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuYmx1cllUaW50RmlsdGVyLmJsdXIgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBjb2xvciBvZiB0aGUgc2hhZG93XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlck9mIFBJWEkuZmlsdGVycy5Ecm9wU2hhZG93RmlsdGVyI1xuICAgICAqL1xuICAgIGNvbG9yOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuICBjb3JlLnV0aWxzLnJnYjJoZXgoIHRoaXMuYmx1cllUaW50RmlsdGVyLnVuaWZvcm1zLmNvbG9yLnZhbHVlICk7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmJsdXJZVGludEZpbHRlci51bmlmb3Jtcy5jb2xvci52YWx1ZSA9IGNvcmUudXRpbHMuaGV4MnJnYih2YWx1ZSk7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgYWxwaGEgb2YgdGhlIHNoYWRvd1xuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJPZiBQSVhJLmZpbHRlcnMuRHJvcFNoYWRvd0ZpbHRlciNcbiAgICAgKi9cbiAgICBhbHBoYToge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiAgdGhpcy5ibHVyWVRpbnRGaWx0ZXIudW5pZm9ybXMuYWxwaGEudmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmJsdXJZVGludEZpbHRlci51bmlmb3Jtcy5hbHBoYS52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIGRpc3RhbmNlIG9mIHRoZSBzaGFkb3dcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyT2YgUElYSS5maWx0ZXJzLkRyb3BTaGFkb3dGaWx0ZXIjXG4gICAgICovXG4gICAgZGlzdGFuY2U6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gIHRoaXMuX2Rpc3RhbmNlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5fZGlydHlQb3NpdGlvbiA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLl9kaXN0YW5jZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIGFuZ2xlIG9mIHRoZSBzaGFkb3dcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyT2YgUElYSS5maWx0ZXJzLkRyb3BTaGFkb3dGaWx0ZXIjXG4gICAgICovXG4gICAgYW5nbGU6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gIHRoaXMuX2FuZ2xlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5fZGlydHlQb3NpdGlvbiA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLl9hbmdsZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfVxufSk7XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uLy4uL2NvcmUnKTtcbi8vIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL3N1YnN0YWNrL2JyZnMvaXNzdWVzLzI1XG5cblxuLyoqXG4gKiBUaGlzIGdyZXlzY2FsZXMgdGhlIHBhbGV0dGUgb2YgeW91ciBEaXNwbGF5IE9iamVjdHMuXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLkFic3RyYWN0RmlsdGVyXG4gKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzXG4gKi9cbmZ1bmN0aW9uIEdyYXlGaWx0ZXIoKVxue1xuICAgIGNvcmUuQWJzdHJhY3RGaWx0ZXIuY2FsbCh0aGlzLFxuICAgICAgICAvLyB2ZXJ0ZXggc2hhZGVyXG4gICAgICAgIG51bGwsXG4gICAgICAgIC8vIGZyYWdtZW50IHNoYWRlclxuICAgICAgICBcInByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xcblxcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xcbnZhcnlpbmcgdmVjNCB2Q29sb3I7XFxuXFxudW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXI7XFxudW5pZm9ybSBmbG9hdCBncmF5O1xcblxcbnZvaWQgbWFpbih2b2lkKVxcbntcXG4gICBnbF9GcmFnQ29sb3IgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZUZXh0dXJlQ29vcmQpO1xcbiAgIGdsX0ZyYWdDb2xvci5yZ2IgPSBtaXgoZ2xfRnJhZ0NvbG9yLnJnYiwgdmVjMygwLjIxMjYqZ2xfRnJhZ0NvbG9yLnIgKyAwLjcxNTIqZ2xfRnJhZ0NvbG9yLmcgKyAwLjA3MjIqZ2xfRnJhZ0NvbG9yLmIpLCBncmF5KTtcXG59XFxuXCIsXG4gICAgICAgIC8vIHNldCB0aGUgdW5pZm9ybXNcbiAgICAgICAge1xuICAgICAgICAgICAgZ3JheTogeyB0eXBlOiAnMWYnLCB2YWx1ZTogMSB9XG4gICAgICAgIH1cbiAgICApO1xufVxuXG5HcmF5RmlsdGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoY29yZS5BYnN0cmFjdEZpbHRlci5wcm90b3R5cGUpO1xuR3JheUZpbHRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBHcmF5RmlsdGVyO1xubW9kdWxlLmV4cG9ydHMgPSBHcmF5RmlsdGVyO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhHcmF5RmlsdGVyLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFRoZSBzdHJlbmd0aCBvZiB0aGUgZ3JheS4gMSB3aWxsIG1ha2UgdGhlIG9iamVjdCBibGFjayBhbmQgd2hpdGUsIDAgd2lsbCBtYWtlIHRoZSBvYmplY3QgaXRzIG5vcm1hbCBjb2xvci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLkdyYXlGaWx0ZXIjXG4gICAgICovXG4gICAgZ3JheToge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVuaWZvcm1zLmdyYXkudmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLmdyYXkudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuIiwiLyoqXG4gKiBAZmlsZSAgICAgICAgTWFpbiBleHBvcnQgb2YgdGhlIFBJWEkgZmlsdGVycyBsaWJyYXJ5XG4gKiBAYXV0aG9yICAgICAgTWF0IEdyb3ZlcyA8bWF0QGdvb2Rib3lkaWdpdGFsLmNvbT5cbiAqIEBjb3B5cmlnaHQgICAyMDEzLTIwMTUgR29vZEJveURpZ2l0YWxcbiAqIEBsaWNlbnNlICAgICB7QGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL3BpeGlqcy9waXhpLmpzL2Jsb2IvbWFzdGVyL0xJQ0VOU0V8TUlUIExpY2Vuc2V9XG4gKi9cblxuLyoqXG4gKiBAbmFtZXNwYWNlIFBJWEkuZmlsdGVyc1xuICovXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgICBBc2NpaUZpbHRlcjogICAgICAgIHJlcXVpcmUoJy4vYXNjaWkvQXNjaWlGaWx0ZXInKSxcbiAgICBCbG9vbUZpbHRlcjogICAgICAgIHJlcXVpcmUoJy4vYmxvb20vQmxvb21GaWx0ZXInKSxcbiAgICBCbHVyRmlsdGVyOiAgICAgICAgIHJlcXVpcmUoJy4vYmx1ci9CbHVyRmlsdGVyJyksXG4gICAgQmx1clhGaWx0ZXI6ICAgICAgICByZXF1aXJlKCcuL2JsdXIvQmx1clhGaWx0ZXInKSxcbiAgICBCbHVyWUZpbHRlcjogICAgICAgIHJlcXVpcmUoJy4vYmx1ci9CbHVyWUZpbHRlcicpLFxuICAgIEJsdXJEaXJGaWx0ZXI6ICAgICAgcmVxdWlyZSgnLi9ibHVyL0JsdXJEaXJGaWx0ZXInKSxcbiAgICBDb2xvck1hdHJpeEZpbHRlcjogIHJlcXVpcmUoJy4vY29sb3IvQ29sb3JNYXRyaXhGaWx0ZXInKSxcbiAgICBDb2xvclN0ZXBGaWx0ZXI6ICAgIHJlcXVpcmUoJy4vY29sb3IvQ29sb3JTdGVwRmlsdGVyJyksXG4gICAgQ29udm9sdXRpb25GaWx0ZXI6ICByZXF1aXJlKCcuL2NvbnZvbHV0aW9uL0NvbnZvbHV0aW9uRmlsdGVyJyksXG4gICAgQ3Jvc3NIYXRjaEZpbHRlcjogICByZXF1aXJlKCcuL2Nyb3NzaGF0Y2gvQ3Jvc3NIYXRjaEZpbHRlcicpLFxuICAgIERpc3BsYWNlbWVudEZpbHRlcjogcmVxdWlyZSgnLi9kaXNwbGFjZW1lbnQvRGlzcGxhY2VtZW50RmlsdGVyJyksXG4gICAgRG90U2NyZWVuRmlsdGVyOiAgICByZXF1aXJlKCcuL2RvdC9Eb3RTY3JlZW5GaWx0ZXInKSxcbiAgICBHcmF5RmlsdGVyOiAgICAgICAgIHJlcXVpcmUoJy4vZ3JheS9HcmF5RmlsdGVyJyksXG4gICAgRHJvcFNoYWRvd0ZpbHRlcjogICByZXF1aXJlKCcuL2Ryb3BzaGFkb3cvRHJvcFNoYWRvd0ZpbHRlcicpLFxuICAgIEludmVydEZpbHRlcjogICAgICAgcmVxdWlyZSgnLi9pbnZlcnQvSW52ZXJ0RmlsdGVyJyksXG4gICAgTm9pc2VGaWx0ZXI6ICAgICAgICByZXF1aXJlKCcuL25vaXNlL05vaXNlRmlsdGVyJyksXG4gICAgUGl4ZWxhdGVGaWx0ZXI6ICAgICByZXF1aXJlKCcuL3BpeGVsYXRlL1BpeGVsYXRlRmlsdGVyJyksXG4gICAgUkdCU3BsaXRGaWx0ZXI6ICAgICByZXF1aXJlKCcuL3JnYi9SR0JTcGxpdEZpbHRlcicpLFxuICAgIFNob2Nrd2F2ZUZpbHRlcjogICAgcmVxdWlyZSgnLi9zaG9ja3dhdmUvU2hvY2t3YXZlRmlsdGVyJyksXG4gICAgU2VwaWFGaWx0ZXI6ICAgICAgICByZXF1aXJlKCcuL3NlcGlhL1NlcGlhRmlsdGVyJyksXG4gICAgU21hcnRCbHVyRmlsdGVyOiAgICByZXF1aXJlKCcuL2JsdXIvU21hcnRCbHVyRmlsdGVyJyksXG4gICAgVGlsdFNoaWZ0RmlsdGVyOiAgICByZXF1aXJlKCcuL3RpbHRzaGlmdC9UaWx0U2hpZnRGaWx0ZXInKSxcbiAgICBUaWx0U2hpZnRYRmlsdGVyOiAgIHJlcXVpcmUoJy4vdGlsdHNoaWZ0L1RpbHRTaGlmdFhGaWx0ZXInKSxcbiAgICBUaWx0U2hpZnRZRmlsdGVyOiAgIHJlcXVpcmUoJy4vdGlsdHNoaWZ0L1RpbHRTaGlmdFlGaWx0ZXInKSxcbiAgICBUd2lzdEZpbHRlcjogICAgICAgIHJlcXVpcmUoJy4vdHdpc3QvVHdpc3RGaWx0ZXInKVxufTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vLi4vY29yZScpO1xuLy8gQHNlZSBodHRwczovL2dpdGh1Yi5jb20vc3Vic3RhY2svYnJmcy9pc3N1ZXMvMjVcblxuXG4vKipcbiAqIFRoaXMgaW52ZXJ0cyB5b3VyIERpc3BsYXkgT2JqZWN0cyBjb2xvcnMuXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLkFic3RyYWN0RmlsdGVyXG4gKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzXG4gKi9cbmZ1bmN0aW9uIEludmVydEZpbHRlcigpXG57XG4gICAgY29yZS5BYnN0cmFjdEZpbHRlci5jYWxsKHRoaXMsXG4gICAgICAgIC8vIHZlcnRleCBzaGFkZXJcbiAgICAgICAgbnVsbCxcbiAgICAgICAgLy8gZnJhZ21lbnQgc2hhZGVyXG4gICAgICAgIFwicHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XFxuXFxudmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7XFxuXFxudW5pZm9ybSBmbG9hdCBpbnZlcnQ7XFxudW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXI7XFxuXFxudm9pZCBtYWluKHZvaWQpXFxue1xcbiAgICBnbF9GcmFnQ29sb3IgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZUZXh0dXJlQ29vcmQpO1xcblxcbiAgICBnbF9GcmFnQ29sb3IucmdiID0gbWl4KCAodmVjMygxKS1nbF9GcmFnQ29sb3IucmdiKSAqIGdsX0ZyYWdDb2xvci5hLCBnbF9GcmFnQ29sb3IucmdiLCAxLjAgLSBpbnZlcnQpO1xcbn1cXG5cIixcbiAgICAgICAgLy8gY3VzdG9tIHVuaWZvcm1zXG4gICAgICAgIHtcbiAgICAgICAgICAgIGludmVydDogeyB0eXBlOiAnMWYnLCB2YWx1ZTogMSB9XG4gICAgICAgIH1cbiAgICApO1xufVxuXG5JbnZlcnRGaWx0ZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShjb3JlLkFic3RyYWN0RmlsdGVyLnByb3RvdHlwZSk7XG5JbnZlcnRGaWx0ZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gSW52ZXJ0RmlsdGVyO1xubW9kdWxlLmV4cG9ydHMgPSBJbnZlcnRGaWx0ZXI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKEludmVydEZpbHRlci5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBUaGUgc3RyZW5ndGggb2YgdGhlIGludmVydC4gYDFgIHdpbGwgZnVsbHkgaW52ZXJ0IHRoZSBjb2xvcnMsIGFuZFxuICAgICAqIGAwYCB3aWxsIG1ha2UgdGhlIG9iamVjdCBpdHMgbm9ybWFsIGNvbG9yLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuSW52ZXJ0RmlsdGVyI1xuICAgICAqL1xuICAgIGludmVydDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVuaWZvcm1zLmludmVydC52YWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudW5pZm9ybXMuaW52ZXJ0LnZhbHVlID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG59KTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vLi4vY29yZScpO1xuLy8gQHNlZSBodHRwczovL2dpdGh1Yi5jb20vc3Vic3RhY2svYnJmcy9pc3N1ZXMvMjVcblxuXG4vKipcbiAqIEBhdXRob3IgVmljbyBAdmljb2NvdGVhXG4gKiBvcmlnaW5hbCBmaWx0ZXI6IGh0dHBzOi8vZ2l0aHViLmNvbS9ldmFudy9nbGZ4LmpzL2Jsb2IvbWFzdGVyL3NyYy9maWx0ZXJzL2FkanVzdC9ub2lzZS5qc1xuICovXG5cbi8qKlxuICogQSBOb2lzZSBlZmZlY3QgZmlsdGVyLlxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5BYnN0cmFjdEZpbHRlclxuICogQG1lbWJlcm9mIFBJWEkuZmlsdGVyc1xuICovXG5mdW5jdGlvbiBOb2lzZUZpbHRlcigpXG57XG4gICAgY29yZS5BYnN0cmFjdEZpbHRlci5jYWxsKHRoaXMsXG4gICAgICAgIC8vIHZlcnRleCBzaGFkZXJcbiAgICAgICAgbnVsbCxcbiAgICAgICAgLy8gZnJhZ21lbnQgc2hhZGVyXG4gICAgICAgIFwicHJlY2lzaW9uIGhpZ2hwIGZsb2F0O1xcblxcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xcbnZhcnlpbmcgdmVjNCB2Q29sb3I7XFxuXFxudW5pZm9ybSBmbG9hdCBub2lzZTtcXG51bmlmb3JtIHNhbXBsZXIyRCB1U2FtcGxlcjtcXG5cXG5mbG9hdCByYW5kKHZlYzIgY28pXFxue1xcbiAgICByZXR1cm4gZnJhY3Qoc2luKGRvdChjby54eSwgdmVjMigxMi45ODk4LCA3OC4yMzMpKSkgKiA0Mzc1OC41NDUzKTtcXG59XFxuXFxudm9pZCBtYWluKClcXG57XFxuICAgIHZlYzQgY29sb3IgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZUZXh0dXJlQ29vcmQpO1xcblxcbiAgICBmbG9hdCBkaWZmID0gKHJhbmQodlRleHR1cmVDb29yZCkgLSAwLjUpICogbm9pc2U7XFxuXFxuICAgIGNvbG9yLnIgKz0gZGlmZjtcXG4gICAgY29sb3IuZyArPSBkaWZmO1xcbiAgICBjb2xvci5iICs9IGRpZmY7XFxuXFxuICAgIGdsX0ZyYWdDb2xvciA9IGNvbG9yO1xcbn1cXG5cIixcbiAgICAgICAgLy8gY3VzdG9tIHVuaWZvcm1zXG4gICAgICAgIHtcbiAgICAgICAgICAgIG5vaXNlOiB7IHR5cGU6ICcxZicsIHZhbHVlOiAwLjUgfVxuICAgICAgICB9XG4gICAgKTtcbn1cblxuTm9pc2VGaWx0ZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShjb3JlLkFic3RyYWN0RmlsdGVyLnByb3RvdHlwZSk7XG5Ob2lzZUZpbHRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBOb2lzZUZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gTm9pc2VGaWx0ZXI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKE5vaXNlRmlsdGVyLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFRoZSBhbW91bnQgb2Ygbm9pc2UgdG8gYXBwbHkuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5Ob2lzZUZpbHRlciNcbiAgICAgKiBAZGVmYXVsdCAwLjVcbiAgICAgKi9cbiAgICBub2lzZToge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVuaWZvcm1zLm5vaXNlLnZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy5ub2lzZS52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfVxufSk7XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uLy4uL2NvcmUnKTtcbi8vIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL3N1YnN0YWNrL2JyZnMvaXNzdWVzLzI1XG5cblxuLyoqXG4gKiBUaGlzIGZpbHRlciBhcHBsaWVzIGEgcGl4ZWxhdGUgZWZmZWN0IG1ha2luZyBkaXNwbGF5IG9iamVjdHMgYXBwZWFyICdibG9ja3knLlxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5BYnN0cmFjdEZpbHRlclxuICogQG1lbWJlcm9mIFBJWEkuZmlsdGVyc1xuICovXG5mdW5jdGlvbiBQaXhlbGF0ZUZpbHRlcigpXG57XG4gICAgY29yZS5BYnN0cmFjdEZpbHRlci5jYWxsKHRoaXMsXG4gICAgICAgIC8vIHZlcnRleCBzaGFkZXJcbiAgICAgICAgbnVsbCxcbiAgICAgICAgLy8gZnJhZ21lbnQgc2hhZGVyXG4gICAgICAgIFwicHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XFxuXFxudmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7XFxuXFxudW5pZm9ybSB2ZWM0IGRpbWVuc2lvbnM7XFxudW5pZm9ybSB2ZWMyIHBpeGVsU2l6ZTtcXG51bmlmb3JtIHNhbXBsZXIyRCB1U2FtcGxlcjtcXG5cXG52b2lkIG1haW4odm9pZClcXG57XFxuICAgIHZlYzIgY29vcmQgPSB2VGV4dHVyZUNvb3JkO1xcblxcbiAgICB2ZWMyIHNpemUgPSBkaW1lbnNpb25zLnh5IC8gcGl4ZWxTaXplO1xcblxcbiAgICB2ZWMyIGNvbG9yID0gZmxvb3IoICggdlRleHR1cmVDb29yZCAqIHNpemUgKSApIC8gc2l6ZSArIHBpeGVsU2l6ZS9kaW1lbnNpb25zLnh5ICogMC41O1xcblxcbiAgICBnbF9GcmFnQ29sb3IgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIGNvbG9yKTtcXG59XFxuXCIsXG4gICAgICAgIC8vIGN1c3RvbSB1bmlmb3Jtc1xuICAgICAgICB7XG4gICAgICAgICAgICBkaW1lbnNpb25zOiB7IHR5cGU6ICc0ZnYnLCAgdmFsdWU6IG5ldyBGbG9hdDMyQXJyYXkoWzAsIDAsIDAsIDBdKSB9LFxuICAgICAgICAgICAgcGl4ZWxTaXplOiAgeyB0eXBlOiAndjInLCAgIHZhbHVlOiB7IHg6IDEwLCB5OiAxMCB9IH1cbiAgICAgICAgfVxuICAgICk7XG59XG5cblBpeGVsYXRlRmlsdGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoY29yZS5BYnN0cmFjdEZpbHRlci5wcm90b3R5cGUpO1xuUGl4ZWxhdGVGaWx0ZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gUGl4ZWxhdGVGaWx0ZXI7XG5tb2R1bGUuZXhwb3J0cyA9IFBpeGVsYXRlRmlsdGVyO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhQaXhlbGF0ZUZpbHRlci5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBUaGlzIGEgcG9pbnQgdGhhdCBkZXNjcmliZXMgdGhlIHNpemUgb2YgdGhlIGJsb2Nrcy5cbiAgICAgKiB4IGlzIHRoZSB3aWR0aCBvZiB0aGUgYmxvY2sgYW5kIHkgaXMgdGhlIGhlaWdodC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuUG9pbnR9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5QaXhlbGF0ZUZpbHRlciNcbiAgICAgKi9cbiAgICBzaXplOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudW5pZm9ybXMucGl4ZWxTaXplLnZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy5waXhlbFNpemUudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi8uLi9jb3JlJyk7XG4vLyBAc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9zdWJzdGFjay9icmZzL2lzc3Vlcy8yNVxuXG5cbi8qKlxuICogQW4gUkdCIFNwbGl0IEZpbHRlci5cbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQWJzdHJhY3RGaWx0ZXJcbiAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnNcbiAqL1xuZnVuY3Rpb24gUkdCU3BsaXRGaWx0ZXIoKVxue1xuICAgIGNvcmUuQWJzdHJhY3RGaWx0ZXIuY2FsbCh0aGlzLFxuICAgICAgICAvLyB2ZXJ0ZXggc2hhZGVyXG4gICAgICAgIG51bGwsXG4gICAgICAgIC8vIGZyYWdtZW50IHNoYWRlclxuICAgICAgICBcInByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xcblxcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xcblxcbnVuaWZvcm0gc2FtcGxlcjJEIHVTYW1wbGVyO1xcbnVuaWZvcm0gdmVjNCBkaW1lbnNpb25zO1xcbnVuaWZvcm0gdmVjMiByZWQ7XFxudW5pZm9ybSB2ZWMyIGdyZWVuO1xcbnVuaWZvcm0gdmVjMiBibHVlO1xcblxcbnZvaWQgbWFpbih2b2lkKVxcbntcXG4gICBnbF9GcmFnQ29sb3IuciA9IHRleHR1cmUyRCh1U2FtcGxlciwgdlRleHR1cmVDb29yZCArIHJlZC9kaW1lbnNpb25zLnh5KS5yO1xcbiAgIGdsX0ZyYWdDb2xvci5nID0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2VGV4dHVyZUNvb3JkICsgZ3JlZW4vZGltZW5zaW9ucy54eSkuZztcXG4gICBnbF9GcmFnQ29sb3IuYiA9IHRleHR1cmUyRCh1U2FtcGxlciwgdlRleHR1cmVDb29yZCArIGJsdWUvZGltZW5zaW9ucy54eSkuYjtcXG4gICBnbF9GcmFnQ29sb3IuYSA9IHRleHR1cmUyRCh1U2FtcGxlciwgdlRleHR1cmVDb29yZCkuYTtcXG59XFxuXCIsXG4gICAgICAgIC8vIGN1c3RvbSB1bmlmb3Jtc1xuICAgICAgICB7XG4gICAgICAgICAgICByZWQ6ICAgICAgICB7IHR5cGU6ICd2MicsIHZhbHVlOiB7IHg6IDIwLCB5OiAyMCB9IH0sXG4gICAgICAgICAgICBncmVlbjogICAgICB7IHR5cGU6ICd2MicsIHZhbHVlOiB7IHg6IC0yMCwgeTogMjAgfSB9LFxuICAgICAgICAgICAgYmx1ZTogICAgICAgeyB0eXBlOiAndjInLCB2YWx1ZTogeyB4OiAyMCwgeTogLTIwIH0gfSxcbiAgICAgICAgICAgIGRpbWVuc2lvbnM6IHsgdHlwZTogJzRmdicsIHZhbHVlOiBbMCwgMCwgMCwgMF0gfVxuICAgICAgICB9XG4gICAgKTtcbn1cblxuUkdCU3BsaXRGaWx0ZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShjb3JlLkFic3RyYWN0RmlsdGVyLnByb3RvdHlwZSk7XG5SR0JTcGxpdEZpbHRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBSR0JTcGxpdEZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gUkdCU3BsaXRGaWx0ZXI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKFJHQlNwbGl0RmlsdGVyLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFJlZCBjaGFubmVsIG9mZnNldC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuUG9pbnR9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5SR0JTcGxpdEZpbHRlciNcbiAgICAgKi9cbiAgICByZWQ6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy51bmlmb3Jtcy5yZWQudmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLnJlZC52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIEdyZWVuIGNoYW5uZWwgb2Zmc2V0LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5Qb2ludH1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLlJHQlNwbGl0RmlsdGVyI1xuICAgICAqL1xuICAgIGdyZWVuOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudW5pZm9ybXMuZ3JlZW4udmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLmdyZWVuLnZhbHVlID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQmx1ZSBvZmZzZXQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlBvaW50fVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuUkdCU3BsaXRGaWx0ZXIjXG4gICAgICovXG4gICAgYmx1ZToge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVuaWZvcm1zLmJsdWUudmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLmJsdWUudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi8uLi9jb3JlJyk7XG4vLyBAc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9zdWJzdGFjay9icmZzL2lzc3Vlcy8yNVxuXG5cbi8qKlxuICogVGhpcyBhcHBsaWVzIGEgc2VwaWEgZWZmZWN0IHRvIHlvdXIgRGlzcGxheSBPYmplY3RzLlxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5BYnN0cmFjdEZpbHRlclxuICogQG1lbWJlcm9mIFBJWEkuZmlsdGVyc1xuICovXG5mdW5jdGlvbiBTZXBpYUZpbHRlcigpXG57XG4gICAgY29yZS5BYnN0cmFjdEZpbHRlci5jYWxsKHRoaXMsXG4gICAgICAgIC8vIHZlcnRleCBzaGFkZXJcbiAgICAgICAgbnVsbCxcbiAgICAgICAgLy8gZnJhZ21lbnQgc2hhZGVyXG4gICAgICAgIFwicHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XFxuXFxudmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7XFxuXFxudW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXI7XFxudW5pZm9ybSBmbG9hdCBzZXBpYTtcXG5cXG5jb25zdCBtYXQzIHNlcGlhTWF0cml4ID0gbWF0MygwLjM1ODgsIDAuNzA0NCwgMC4xMzY4LCAwLjI5OTAsIDAuNTg3MCwgMC4xMTQwLCAwLjIzOTIsIDAuNDY5NiwgMC4wOTEyKTtcXG5cXG52b2lkIG1haW4odm9pZClcXG57XFxuICAgZ2xfRnJhZ0NvbG9yID0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2VGV4dHVyZUNvb3JkKTtcXG4gICBnbF9GcmFnQ29sb3IucmdiID0gbWl4KCBnbF9GcmFnQ29sb3IucmdiLCBnbF9GcmFnQ29sb3IucmdiICogc2VwaWFNYXRyaXgsIHNlcGlhKTtcXG59XFxuXCIsXG4gICAgICAgIC8vIGN1c3RvbSB1bmlmb3Jtc1xuICAgICAgICB7XG4gICAgICAgICAgICBzZXBpYTogeyB0eXBlOiAnMWYnLCB2YWx1ZTogMSB9XG4gICAgICAgIH1cbiAgICApO1xufVxuXG5TZXBpYUZpbHRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuQWJzdHJhY3RGaWx0ZXIucHJvdG90eXBlKTtcblNlcGlhRmlsdGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFNlcGlhRmlsdGVyO1xubW9kdWxlLmV4cG9ydHMgPSBTZXBpYUZpbHRlcjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoU2VwaWFGaWx0ZXIucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogVGhlIHN0cmVuZ3RoIG9mIHRoZSBzZXBpYS4gYDFgIHdpbGwgYXBwbHkgdGhlIGZ1bGwgc2VwaWEgZWZmZWN0LCBhbmRcbiAgICAgKiBgMGAgd2lsbCBtYWtlIHRoZSBvYmplY3QgaXRzIG5vcm1hbCBjb2xvci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLlNlcGlhRmlsdGVyI1xuICAgICAqL1xuICAgIHNlcGlhOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudW5pZm9ybXMuc2VwaWEudmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLnNlcGlhLnZhbHVlID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG59KTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vLi4vY29yZScpO1xuLy8gQHNlZSBodHRwczovL2dpdGh1Yi5jb20vc3Vic3RhY2svYnJmcy9pc3N1ZXMvMjVcblxuXG4vKipcbiAqIFRoZSBDb2xvck1hdHJpeEZpbHRlciBjbGFzcyBsZXRzIHlvdSBhcHBseSBhIDR4NCBtYXRyaXggdHJhbnNmb3JtYXRpb24gb24gdGhlIFJHQkFcbiAqIGNvbG9yIGFuZCBhbHBoYSB2YWx1ZXMgb2YgZXZlcnkgcGl4ZWwgb24geW91ciBkaXNwbGF5T2JqZWN0IHRvIHByb2R1Y2UgYSByZXN1bHRcbiAqIHdpdGggYSBuZXcgc2V0IG9mIFJHQkEgY29sb3IgYW5kIGFscGhhIHZhbHVlcy4gSXQncyBwcmV0dHkgcG93ZXJmdWwhXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLkFic3RyYWN0RmlsdGVyXG4gKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzXG4gKi9cbmZ1bmN0aW9uIFNob2Nrd2F2ZUZpbHRlcigpXG57XG4gICAgY29yZS5BYnN0cmFjdEZpbHRlci5jYWxsKHRoaXMsXG4gICAgICAgIC8vIHZlcnRleCBzaGFkZXJcbiAgICAgICAgbnVsbCxcbiAgICAgICAgLy8gZnJhZ21lbnQgc2hhZGVyXG4gICAgICAgIFwicHJlY2lzaW9uIGxvd3AgZmxvYXQ7XFxuXFxudmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7XFxuXFxudW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXI7XFxuXFxudW5pZm9ybSB2ZWMyIGNlbnRlcjtcXG51bmlmb3JtIHZlYzMgcGFyYW1zOyAvLyAxMC4wLCAwLjgsIDAuMVxcbnVuaWZvcm0gZmxvYXQgdGltZTtcXG5cXG52b2lkIG1haW4oKVxcbntcXG4gICAgdmVjMiB1diA9IHZUZXh0dXJlQ29vcmQ7XFxuICAgIHZlYzIgdGV4Q29vcmQgPSB1djtcXG5cXG4gICAgZmxvYXQgZGlzdCA9IGRpc3RhbmNlKHV2LCBjZW50ZXIpO1xcblxcbiAgICBpZiAoIChkaXN0IDw9ICh0aW1lICsgcGFyYW1zLnopKSAmJiAoZGlzdCA+PSAodGltZSAtIHBhcmFtcy56KSkgKVxcbiAgICB7XFxuICAgICAgICBmbG9hdCBkaWZmID0gKGRpc3QgLSB0aW1lKTtcXG4gICAgICAgIGZsb2F0IHBvd0RpZmYgPSAxLjAgLSBwb3coYWJzKGRpZmYqcGFyYW1zLngpLCBwYXJhbXMueSk7XFxuXFxuICAgICAgICBmbG9hdCBkaWZmVGltZSA9IGRpZmYgICogcG93RGlmZjtcXG4gICAgICAgIHZlYzIgZGlmZlVWID0gbm9ybWFsaXplKHV2IC0gY2VudGVyKTtcXG4gICAgICAgIHRleENvb3JkID0gdXYgKyAoZGlmZlVWICogZGlmZlRpbWUpO1xcbiAgICB9XFxuXFxuICAgIGdsX0ZyYWdDb2xvciA9IHRleHR1cmUyRCh1U2FtcGxlciwgdGV4Q29vcmQpO1xcbn1cXG5cIixcbiAgICAgICAgLy8gY3VzdG9tIHVuaWZvcm1zXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNlbnRlcjogeyB0eXBlOiAndjInLCB2YWx1ZTogeyB4OiAwLjUsIHk6IDAuNSB9IH0sXG4gICAgICAgICAgICBwYXJhbXM6IHsgdHlwZTogJ3YzJywgdmFsdWU6IHsgeDogMTAsIHk6IDAuOCwgejogMC4xIH0gfSxcbiAgICAgICAgICAgIHRpbWU6IHsgdHlwZTogJzFmJywgdmFsdWU6IDAgfVxuICAgICAgICB9XG4gICAgKTtcbn1cblxuU2hvY2t3YXZlRmlsdGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoY29yZS5BYnN0cmFjdEZpbHRlci5wcm90b3R5cGUpO1xuU2hvY2t3YXZlRmlsdGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFNob2Nrd2F2ZUZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gU2hvY2t3YXZlRmlsdGVyO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhTaG9ja3dhdmVGaWx0ZXIucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgY2VudGVyIG9mIHRoZSBzaG9ja3dhdmUgaW4gbm9ybWFsaXplZCBzY3JlZW4gY29vcmRzLiBUaGF0IGlzXG4gICAgICogKDAsMCkgaXMgdGhlIHRvcC1sZWZ0IGFuZCAoMSwxKSBpcyB0aGUgYm90dG9tIHJpZ2h0LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7b2JqZWN0PHN0cmluZywgbnVtYmVyPn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLlNob2Nrd2F2ZUZpbHRlciNcbiAgICAgKi9cbiAgICBjZW50ZXI6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy51bmlmb3Jtcy5jZW50ZXIudmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLmNlbnRlci52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfSxcbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBwYXJhbXMgb2YgdGhlIHNob2Nrd2F2ZS4gVGhlc2UgbW9kaWZ5IHRoZSBsb29rIGFuZCBiZWhhdmlvciBvZlxuICAgICAqIHRoZSBzaG9ja3dhdmUgYXMgaXQgcmlwcGxlcyBvdXQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtvYmplY3Q8c3RyaW5nLCBudW1iZXI+fVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuU2hvY2t3YXZlRmlsdGVyI1xuICAgICAqL1xuICAgIHBhcmFtczoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVuaWZvcm1zLnBhcmFtcy52YWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudW5pZm9ybXMucGFyYW1zLnZhbHVlID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9LFxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIGVsYXBzZWQgdGltZSBvZiB0aGUgc2hvY2t3YXZlLiBUaGlzIGNvbnRyb2xzIHRoZSBzcGVlZCBhdCB3aGljaFxuICAgICAqIHRoZSBzaG9ja3dhdmUgcmlwcGxlcyBvdXQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5TaG9ja3dhdmVGaWx0ZXIjXG4gICAgICovXG4gICAgdGltZToge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVuaWZvcm1zLnRpbWUudmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLnRpbWUudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi8uLi9jb3JlJyk7XG4vLyBAc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9zdWJzdGFjay9icmZzL2lzc3Vlcy8yNVxuXG5cbi8qKlxuICogQGF1dGhvciBWaWNvIEB2aWNvY290ZWFcbiAqIG9yaWdpbmFsIGZpbHRlciBodHRwczovL2dpdGh1Yi5jb20vZXZhbncvZ2xmeC5qcy9ibG9iL21hc3Rlci9zcmMvZmlsdGVycy9ibHVyL3RpbHRzaGlmdC5qcyBieSBFdmFuIFdhbGxhY2UgOiBodHRwOi8vbWFkZWJ5ZXZhbi5jb20vXG4gKi9cblxuLyoqXG4gKiBBIFRpbHRTaGlmdEF4aXNGaWx0ZXIuXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLkFic3RyYWN0RmlsdGVyXG4gKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzXG4gKi9cbmZ1bmN0aW9uIFRpbHRTaGlmdEF4aXNGaWx0ZXIoKVxue1xuICAgIGNvcmUuQWJzdHJhY3RGaWx0ZXIuY2FsbCh0aGlzLFxuICAgICAgICAvLyB2ZXJ0ZXggc2hhZGVyXG4gICAgICAgIG51bGwsXG4gICAgICAgIC8vIGZyYWdtZW50IHNoYWRlclxuICAgICAgICBcInByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xcblxcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xcblxcbnVuaWZvcm0gc2FtcGxlcjJEIHVTYW1wbGVyO1xcbnVuaWZvcm0gZmxvYXQgYmx1cjtcXG51bmlmb3JtIGZsb2F0IGdyYWRpZW50Qmx1cjtcXG51bmlmb3JtIHZlYzIgc3RhcnQ7XFxudW5pZm9ybSB2ZWMyIGVuZDtcXG51bmlmb3JtIHZlYzIgZGVsdGE7XFxudW5pZm9ybSB2ZWMyIHRleFNpemU7XFxuXFxuZmxvYXQgcmFuZG9tKHZlYzMgc2NhbGUsIGZsb2F0IHNlZWQpXFxue1xcbiAgICByZXR1cm4gZnJhY3Qoc2luKGRvdChnbF9GcmFnQ29vcmQueHl6ICsgc2VlZCwgc2NhbGUpKSAqIDQzNzU4LjU0NTMgKyBzZWVkKTtcXG59XFxuXFxudm9pZCBtYWluKHZvaWQpXFxue1xcbiAgICB2ZWM0IGNvbG9yID0gdmVjNCgwLjApO1xcbiAgICBmbG9hdCB0b3RhbCA9IDAuMDtcXG5cXG4gICAgZmxvYXQgb2Zmc2V0ID0gcmFuZG9tKHZlYzMoMTIuOTg5OCwgNzguMjMzLCAxNTEuNzE4MiksIDAuMCk7XFxuICAgIHZlYzIgbm9ybWFsID0gbm9ybWFsaXplKHZlYzIoc3RhcnQueSAtIGVuZC55LCBlbmQueCAtIHN0YXJ0LngpKTtcXG4gICAgZmxvYXQgcmFkaXVzID0gc21vb3Roc3RlcCgwLjAsIDEuMCwgYWJzKGRvdCh2VGV4dHVyZUNvb3JkICogdGV4U2l6ZSAtIHN0YXJ0LCBub3JtYWwpKSAvIGdyYWRpZW50Qmx1cikgKiBibHVyO1xcblxcbiAgICBmb3IgKGZsb2F0IHQgPSAtMzAuMDsgdCA8PSAzMC4wOyB0KyspXFxuICAgIHtcXG4gICAgICAgIGZsb2F0IHBlcmNlbnQgPSAodCArIG9mZnNldCAtIDAuNSkgLyAzMC4wO1xcbiAgICAgICAgZmxvYXQgd2VpZ2h0ID0gMS4wIC0gYWJzKHBlcmNlbnQpO1xcbiAgICAgICAgdmVjNCBzYW1wbGUgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZUZXh0dXJlQ29vcmQgKyBkZWx0YSAvIHRleFNpemUgKiBwZXJjZW50ICogcmFkaXVzKTtcXG4gICAgICAgIHNhbXBsZS5yZ2IgKj0gc2FtcGxlLmE7XFxuICAgICAgICBjb2xvciArPSBzYW1wbGUgKiB3ZWlnaHQ7XFxuICAgICAgICB0b3RhbCArPSB3ZWlnaHQ7XFxuICAgIH1cXG5cXG4gICAgZ2xfRnJhZ0NvbG9yID0gY29sb3IgLyB0b3RhbDtcXG4gICAgZ2xfRnJhZ0NvbG9yLnJnYiAvPSBnbF9GcmFnQ29sb3IuYSArIDAuMDAwMDE7XFxufVxcblwiLFxuICAgICAgICAvLyBjdXN0b20gdW5pZm9ybXNcbiAgICAgICAge1xuICAgICAgICAgICAgYmx1cjogICAgICAgICAgIHsgdHlwZTogJzFmJywgdmFsdWU6IDEwMCB9LFxuICAgICAgICAgICAgZ3JhZGllbnRCbHVyOiAgIHsgdHlwZTogJzFmJywgdmFsdWU6IDYwMCB9LFxuICAgICAgICAgICAgc3RhcnQ6ICAgICAgICAgIHsgdHlwZTogJ3YyJywgdmFsdWU6IHsgeDogMCwgICAgeTogd2luZG93LmlubmVySGVpZ2h0IC8gMiB9IH0sXG4gICAgICAgICAgICBlbmQ6ICAgICAgICAgICAgeyB0eXBlOiAndjInLCB2YWx1ZTogeyB4OiA2MDAsICB5OiB3aW5kb3cuaW5uZXJIZWlnaHQgLyAyIH0gfSxcbiAgICAgICAgICAgIGRlbHRhOiAgICAgICAgICB7IHR5cGU6ICd2MicsIHZhbHVlOiB7IHg6IDMwLCAgIHk6IDMwIH0gfSxcbiAgICAgICAgICAgIHRleFNpemU6ICAgICAgICB7IHR5cGU6ICd2MicsIHZhbHVlOiB7IHg6IHdpbmRvdy5pbm5lcldpZHRoLCB5OiB3aW5kb3cuaW5uZXJIZWlnaHQgfSB9XG4gICAgICAgIH1cbiAgICApO1xuXG4gICAgdGhpcy51cGRhdGVEZWx0YSgpO1xufVxuXG5UaWx0U2hpZnRBeGlzRmlsdGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoY29yZS5BYnN0cmFjdEZpbHRlci5wcm90b3R5cGUpO1xuVGlsdFNoaWZ0QXhpc0ZpbHRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBUaWx0U2hpZnRBeGlzRmlsdGVyO1xubW9kdWxlLmV4cG9ydHMgPSBUaWx0U2hpZnRBeGlzRmlsdGVyO1xuXG4vKipcbiAqIFVwZGF0ZXMgdGhlIGZpbHRlciBkZWx0YSB2YWx1ZXMuXG4gKiBUaGlzIGlzIG92ZXJyaWRkZW4gaW4gdGhlIFggYW5kIFkgZmlsdGVycywgZG9lcyBub3RoaW5nIGZvciB0aGlzIGNsYXNzLlxuICpcbiAqL1xuVGlsdFNoaWZ0QXhpc0ZpbHRlci5wcm90b3R5cGUudXBkYXRlRGVsdGEgPSBmdW5jdGlvbiAoKVxue1xuICAgIHRoaXMudW5pZm9ybXMuZGVsdGEudmFsdWUueCA9IDA7XG4gICAgdGhpcy51bmlmb3Jtcy5kZWx0YS52YWx1ZS55ID0gMDtcbn07XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKFRpbHRTaGlmdEF4aXNGaWx0ZXIucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogVGhlIHN0cmVuZ3RoIG9mIHRoZSBibHVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuVGlsdFNoaWZ0QXhpc0ZpbHRlciNcbiAgICAgKi9cbiAgICBibHVyOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudW5pZm9ybXMuYmx1ci52YWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudW5pZm9ybXMuYmx1ci52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFRoZSBzdHJlbmd0aCBvZiB0aGUgZ3JhZGllbnQgYmx1ci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLlRpbHRTaGlmdEF4aXNGaWx0ZXIjXG4gICAgICovXG4gICAgZ3JhZGllbnRCbHVyOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudW5pZm9ybXMuZ3JhZGllbnRCbHVyLnZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy5ncmFkaWVudEJsdXIudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBUaGUgWCB2YWx1ZSB0byBzdGFydCB0aGUgZWZmZWN0IGF0LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5Qb2ludH1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLlRpbHRTaGlmdEF4aXNGaWx0ZXIjXG4gICAgICovXG4gICAgc3RhcnQ6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy51bmlmb3Jtcy5zdGFydC52YWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudW5pZm9ybXMuc3RhcnQudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlRGVsdGEoKTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBUaGUgWCB2YWx1ZSB0byBlbmQgdGhlIGVmZmVjdCBhdC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuUG9pbnR9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5UaWx0U2hpZnRBeGlzRmlsdGVyI1xuICAgICAqL1xuICAgIGVuZDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVuaWZvcm1zLmVuZC52YWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudW5pZm9ybXMuZW5kLnZhbHVlID0gdmFsdWU7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZURlbHRhKCk7XG4gICAgICAgIH1cbiAgICB9XG59KTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vLi4vY29yZScpLFxuICAgIFRpbHRTaGlmdFhGaWx0ZXIgPSByZXF1aXJlKCcuL1RpbHRTaGlmdFhGaWx0ZXInKSxcbiAgICBUaWx0U2hpZnRZRmlsdGVyID0gcmVxdWlyZSgnLi9UaWx0U2hpZnRZRmlsdGVyJyk7XG5cbi8qKlxuICogQGF1dGhvciBWaWNvIEB2aWNvY290ZWFcbiAqIG9yaWdpbmFsIGZpbHRlciBodHRwczovL2dpdGh1Yi5jb20vZXZhbncvZ2xmeC5qcy9ibG9iL21hc3Rlci9zcmMvZmlsdGVycy9ibHVyL3RpbHRzaGlmdC5qcyBieSBFdmFuIFdhbGxhY2UgOiBodHRwOi8vbWFkZWJ5ZXZhbi5jb20vXG4gKi9cblxuLyoqXG4gKiBBIFRpbHRTaGlmdCBGaWx0ZXIuIE1hbmFnZXMgdGhlIHBhc3Mgb2YgYm90aCBhIFRpbHRTaGlmdFhGaWx0ZXIgYW5kIFRpbHRTaGlmdFlGaWx0ZXIuXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLkFic3RyYWN0RmlsdGVyXG4gKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzXG4gKi9cbmZ1bmN0aW9uIFRpbHRTaGlmdEZpbHRlcigpXG57XG4gICAgY29yZS5BYnN0cmFjdEZpbHRlci5jYWxsKHRoaXMpO1xuXG4gICAgdGhpcy50aWx0U2hpZnRYRmlsdGVyID0gbmV3IFRpbHRTaGlmdFhGaWx0ZXIoKTtcbiAgICB0aGlzLnRpbHRTaGlmdFlGaWx0ZXIgPSBuZXcgVGlsdFNoaWZ0WUZpbHRlcigpO1xufVxuXG5UaWx0U2hpZnRGaWx0ZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShjb3JlLkFic3RyYWN0RmlsdGVyLnByb3RvdHlwZSk7XG5UaWx0U2hpZnRGaWx0ZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gVGlsdFNoaWZ0RmlsdGVyO1xubW9kdWxlLmV4cG9ydHMgPSBUaWx0U2hpZnRGaWx0ZXI7XG5cblRpbHRTaGlmdEZpbHRlci5wcm90b3R5cGUuYXBwbHlGaWx0ZXIgPSBmdW5jdGlvbiAocmVuZGVyZXIsIGlucHV0LCBvdXRwdXQpXG57XG4gICAgdmFyIHJlbmRlclRhcmdldCA9IHJlbmRlcmVyLmZpbHRlck1hbmFnZXIuZ2V0UmVuZGVyVGFyZ2V0KHRydWUpO1xuXG4gICAgdGhpcy50aWx0U2hpZnRYRmlsdGVyLmFwcGx5RmlsdGVyKHJlbmRlcmVyLCBpbnB1dCwgcmVuZGVyVGFyZ2V0KTtcblxuICAgIHRoaXMudGlsdFNoaWZ0WUZpbHRlci5hcHBseUZpbHRlcihyZW5kZXJlciwgcmVuZGVyVGFyZ2V0LCBvdXRwdXQpO1xuXG4gICAgcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5yZXR1cm5SZW5kZXJUYXJnZXQocmVuZGVyVGFyZ2V0KTtcbn07XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKFRpbHRTaGlmdEZpbHRlci5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBUaGUgc3RyZW5ndGggb2YgdGhlIGJsdXIuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5UaWx0U2hpZnRGaWx0ZXIjXG4gICAgICovXG4gICAgYmx1cjoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnRpbHRTaGlmdFhGaWx0ZXIuYmx1cjtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudGlsdFNoaWZ0WEZpbHRlci5ibHVyID0gdGhpcy50aWx0U2hpZnRZRmlsdGVyLmJsdXIgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBUaGUgc3RyZW5ndGggb2YgdGhlIGdyYWRpZW50IGJsdXIuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5UaWx0U2hpZnRGaWx0ZXIjXG4gICAgICovXG4gICAgZ3JhZGllbnRCbHVyOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudGlsdFNoaWZ0WEZpbHRlci5ncmFkaWVudEJsdXI7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnRpbHRTaGlmdFhGaWx0ZXIuZ3JhZGllbnRCbHVyID0gdGhpcy50aWx0U2hpZnRZRmlsdGVyLmdyYWRpZW50Qmx1ciA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFRoZSBZIHZhbHVlIHRvIHN0YXJ0IHRoZSBlZmZlY3QgYXQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5UaWx0U2hpZnRGaWx0ZXIjXG4gICAgICovXG4gICAgc3RhcnQ6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy50aWx0U2hpZnRYRmlsdGVyLnN0YXJ0O1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy50aWx0U2hpZnRYRmlsdGVyLnN0YXJ0ID0gdGhpcy50aWx0U2hpZnRZRmlsdGVyLnN0YXJ0ID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVGhlIFkgdmFsdWUgdG8gZW5kIHRoZSBlZmZlY3QgYXQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5UaWx0U2hpZnRGaWx0ZXIjXG4gICAgICovXG4gICAgZW5kOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudGlsdFNoaWZ0WEZpbHRlci5lbmQ7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnRpbHRTaGlmdFhGaWx0ZXIuZW5kID0gdGhpcy50aWx0U2hpZnRZRmlsdGVyLmVuZCA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfVxufSk7XG4iLCJ2YXIgVGlsdFNoaWZ0QXhpc0ZpbHRlciA9IHJlcXVpcmUoJy4vVGlsdFNoaWZ0QXhpc0ZpbHRlcicpO1xuXG4vKipcbiAqIEBhdXRob3IgVmljbyBAdmljb2NvdGVhXG4gKiBvcmlnaW5hbCBmaWx0ZXIgaHR0cHM6Ly9naXRodWIuY29tL2V2YW53L2dsZnguanMvYmxvYi9tYXN0ZXIvc3JjL2ZpbHRlcnMvYmx1ci90aWx0c2hpZnQuanMgYnkgRXZhbiBXYWxsYWNlIDogaHR0cDovL21hZGVieWV2YW4uY29tL1xuICovXG5cbi8qKlxuICogQSBUaWx0U2hpZnRYRmlsdGVyLlxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5UaWx0U2hpZnRBeGlzRmlsdGVyXG4gKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzXG4gKi9cbmZ1bmN0aW9uIFRpbHRTaGlmdFhGaWx0ZXIoKVxue1xuICAgIFRpbHRTaGlmdEF4aXNGaWx0ZXIuY2FsbCh0aGlzKTtcbn1cblxuVGlsdFNoaWZ0WEZpbHRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFRpbHRTaGlmdEF4aXNGaWx0ZXIucHJvdG90eXBlKTtcblRpbHRTaGlmdFhGaWx0ZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gVGlsdFNoaWZ0WEZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gVGlsdFNoaWZ0WEZpbHRlcjtcblxuLyoqXG4gKiBVcGRhdGVzIHRoZSBmaWx0ZXIgZGVsdGEgdmFsdWVzLlxuICpcbiAqL1xuVGlsdFNoaWZ0WEZpbHRlci5wcm90b3R5cGUudXBkYXRlRGVsdGEgPSBmdW5jdGlvbiAoKVxue1xuICAgIHZhciBkeCA9IHRoaXMudW5pZm9ybXMuZW5kLnZhbHVlLnggLSB0aGlzLnVuaWZvcm1zLnN0YXJ0LnZhbHVlLng7XG4gICAgdmFyIGR5ID0gdGhpcy51bmlmb3Jtcy5lbmQudmFsdWUueSAtIHRoaXMudW5pZm9ybXMuc3RhcnQudmFsdWUueTtcbiAgICB2YXIgZCA9IE1hdGguc3FydChkeCAqIGR4ICsgZHkgKiBkeSk7XG5cbiAgICB0aGlzLnVuaWZvcm1zLmRlbHRhLnZhbHVlLnggPSBkeCAvIGQ7XG4gICAgdGhpcy51bmlmb3Jtcy5kZWx0YS52YWx1ZS55ID0gZHkgLyBkO1xufTtcbiIsInZhciBUaWx0U2hpZnRBeGlzRmlsdGVyID0gcmVxdWlyZSgnLi9UaWx0U2hpZnRBeGlzRmlsdGVyJyk7XG5cbi8qKlxuICogQGF1dGhvciBWaWNvIEB2aWNvY290ZWFcbiAqIG9yaWdpbmFsIGZpbHRlciBodHRwczovL2dpdGh1Yi5jb20vZXZhbncvZ2xmeC5qcy9ibG9iL21hc3Rlci9zcmMvZmlsdGVycy9ibHVyL3RpbHRzaGlmdC5qcyBieSBFdmFuIFdhbGxhY2UgOiBodHRwOi8vbWFkZWJ5ZXZhbi5jb20vXG4gKi9cblxuLyoqXG4gKiBBIFRpbHRTaGlmdFlGaWx0ZXIuXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLlRpbHRTaGlmdEF4aXNGaWx0ZXJcbiAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnNcbiAqL1xuZnVuY3Rpb24gVGlsdFNoaWZ0WUZpbHRlcigpXG57XG4gICAgVGlsdFNoaWZ0QXhpc0ZpbHRlci5jYWxsKHRoaXMpO1xufVxuXG5UaWx0U2hpZnRZRmlsdGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoVGlsdFNoaWZ0QXhpc0ZpbHRlci5wcm90b3R5cGUpO1xuVGlsdFNoaWZ0WUZpbHRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBUaWx0U2hpZnRZRmlsdGVyO1xubW9kdWxlLmV4cG9ydHMgPSBUaWx0U2hpZnRZRmlsdGVyO1xuXG4vKipcbiAqIFVwZGF0ZXMgdGhlIGZpbHRlciBkZWx0YSB2YWx1ZXMuXG4gKlxuICovXG5UaWx0U2hpZnRZRmlsdGVyLnByb3RvdHlwZS51cGRhdGVEZWx0YSA9IGZ1bmN0aW9uICgpXG57XG4gICAgdmFyIGR4ID0gdGhpcy51bmlmb3Jtcy5lbmQudmFsdWUueCAtIHRoaXMudW5pZm9ybXMuc3RhcnQudmFsdWUueDtcbiAgICB2YXIgZHkgPSB0aGlzLnVuaWZvcm1zLmVuZC52YWx1ZS55IC0gdGhpcy51bmlmb3Jtcy5zdGFydC52YWx1ZS55O1xuICAgIHZhciBkID0gTWF0aC5zcXJ0KGR4ICogZHggKyBkeSAqIGR5KTtcblxuICAgIHRoaXMudW5pZm9ybXMuZGVsdGEudmFsdWUueCA9IC1keSAvIGQ7XG4gICAgdGhpcy51bmlmb3Jtcy5kZWx0YS52YWx1ZS55ID0gZHggLyBkO1xufTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vLi4vY29yZScpO1xuLy8gQHNlZSBodHRwczovL2dpdGh1Yi5jb20vc3Vic3RhY2svYnJmcy9pc3N1ZXMvMjVcblxuXG4vKipcbiAqIFRoaXMgZmlsdGVyIGFwcGxpZXMgYSB0d2lzdCBlZmZlY3QgbWFraW5nIGRpc3BsYXkgb2JqZWN0cyBhcHBlYXIgdHdpc3RlZCBpbiB0aGUgZ2l2ZW4gZGlyZWN0aW9uLlxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5BYnN0cmFjdEZpbHRlclxuICogQG1lbWJlcm9mIFBJWEkuZmlsdGVyc1xuICovXG5mdW5jdGlvbiBUd2lzdEZpbHRlcigpXG57XG4gICAgY29yZS5BYnN0cmFjdEZpbHRlci5jYWxsKHRoaXMsXG4gICAgICAgIC8vIHZlcnRleCBzaGFkZXJcbiAgICAgICAgbnVsbCxcbiAgICAgICAgLy8gZnJhZ21lbnQgc2hhZGVyXG4gICAgICAgIFwicHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XFxuXFxudmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7XFxuXFxudW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXI7XFxudW5pZm9ybSBmbG9hdCByYWRpdXM7XFxudW5pZm9ybSBmbG9hdCBhbmdsZTtcXG51bmlmb3JtIHZlYzIgb2Zmc2V0O1xcblxcbnZvaWQgbWFpbih2b2lkKVxcbntcXG4gICB2ZWMyIGNvb3JkID0gdlRleHR1cmVDb29yZCAtIG9mZnNldDtcXG4gICBmbG9hdCBkaXN0ID0gbGVuZ3RoKGNvb3JkKTtcXG5cXG4gICBpZiAoZGlzdCA8IHJhZGl1cylcXG4gICB7XFxuICAgICAgIGZsb2F0IHJhdGlvID0gKHJhZGl1cyAtIGRpc3QpIC8gcmFkaXVzO1xcbiAgICAgICBmbG9hdCBhbmdsZU1vZCA9IHJhdGlvICogcmF0aW8gKiBhbmdsZTtcXG4gICAgICAgZmxvYXQgcyA9IHNpbihhbmdsZU1vZCk7XFxuICAgICAgIGZsb2F0IGMgPSBjb3MoYW5nbGVNb2QpO1xcbiAgICAgICBjb29yZCA9IHZlYzIoY29vcmQueCAqIGMgLSBjb29yZC55ICogcywgY29vcmQueCAqIHMgKyBjb29yZC55ICogYyk7XFxuICAgfVxcblxcbiAgIGdsX0ZyYWdDb2xvciA9IHRleHR1cmUyRCh1U2FtcGxlciwgY29vcmQrb2Zmc2V0KTtcXG59XFxuXCIsXG4gICAgICAgIC8vIGN1c3RvbSB1bmlmb3Jtc1xuICAgICAgICB7XG4gICAgICAgICAgICByYWRpdXM6ICAgICB7IHR5cGU6ICcxZicsIHZhbHVlOiAwLjUgfSxcbiAgICAgICAgICAgIGFuZ2xlOiAgICAgIHsgdHlwZTogJzFmJywgdmFsdWU6IDUgfSxcbiAgICAgICAgICAgIG9mZnNldDogICAgIHsgdHlwZTogJ3YyJywgdmFsdWU6IHsgeDogMC41LCB5OiAwLjUgfSB9XG4gICAgICAgIH1cbiAgICApO1xufVxuXG5Ud2lzdEZpbHRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuQWJzdHJhY3RGaWx0ZXIucHJvdG90eXBlKTtcblR3aXN0RmlsdGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFR3aXN0RmlsdGVyO1xubW9kdWxlLmV4cG9ydHMgPSBUd2lzdEZpbHRlcjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoVHdpc3RGaWx0ZXIucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogVGhpcyBwb2ludCBkZXNjcmliZXMgdGhlIHRoZSBvZmZzZXQgb2YgdGhlIHR3aXN0LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5Qb2ludH1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLlR3aXN0RmlsdGVyI1xuICAgICAqL1xuICAgIG9mZnNldDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVuaWZvcm1zLm9mZnNldC52YWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudW5pZm9ybXMub2Zmc2V0LnZhbHVlID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVGhpcyByYWRpdXMgb2YgdGhlIHR3aXN0LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuVHdpc3RGaWx0ZXIjXG4gICAgICovXG4gICAgcmFkaXVzOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudW5pZm9ybXMucmFkaXVzLnZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy5yYWRpdXMudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBUaGlzIGFuZ2xlIG9mIHRoZSB0d2lzdC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLlR3aXN0RmlsdGVyI1xuICAgICAqL1xuICAgIGFuZ2xlOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudW5pZm9ybXMuYW5nbGUudmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLmFuZ2xlLnZhbHVlID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG59KTtcbiIsIi8vIHJ1biB0aGUgcG9seWZpbGxzXG5yZXF1aXJlKCcuL3BvbHlmaWxsJyk7XG5cbnZhciBjb3JlID0gbW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL2NvcmUnKTtcblxuLy8gYWRkIGNvcmUgcGx1Z2lucy5cbmNvcmUuZXh0cmFzICAgICAgICAgPSByZXF1aXJlKCcuL2V4dHJhcycpO1xuY29yZS5maWx0ZXJzICAgICAgICA9IHJlcXVpcmUoJy4vZmlsdGVycycpO1xuY29yZS5pbnRlcmFjdGlvbiAgICA9IHJlcXVpcmUoJy4vaW50ZXJhY3Rpb24nKTtcbmNvcmUubG9hZGVycyAgICAgICAgPSByZXF1aXJlKCcuL2xvYWRlcnMnKTtcbmNvcmUubWVzaCAgICAgICAgICAgPSByZXF1aXJlKCcuL21lc2gnKTtcbmNvcmUuYWNjZXNzaWJpbGl0eSAgPSByZXF1aXJlKCcuL2FjY2Vzc2liaWxpdHknKTtcblxuLy8gZXhwb3J0IGEgcHJlbWFkZSBsb2FkZXIgaW5zdGFuY2Vcbi8qKlxuICogQSBwcmVtYWRlIGluc3RhbmNlIG9mIHRoZSBsb2FkZXIgdGhhdCBjYW4gYmUgdXNlZCB0byBsb2FkZXIgcmVzb3VyY2VzLlxuICpcbiAqIEBuYW1lIGxvYWRlclxuICogQG1lbWJlcm9mIFBJWElcbiAqIEBwcm9wZXJ0eSB7UElYSS5sb2FkZXJzLkxvYWRlcn1cbiAqL1xuY29yZS5sb2FkZXIgPSBuZXcgY29yZS5sb2FkZXJzLkxvYWRlcigpO1xuXG4vLyBtaXhpbiB0aGUgZGVwcmVjYXRpb24gZmVhdHVyZXMuXG5PYmplY3QuYXNzaWduKGNvcmUsIHJlcXVpcmUoJy4vZGVwcmVjYXRpb24nKSk7XG5cbi8vIEFsd2F5cyBleHBvcnQgcGl4aSBnbG9iYWxseS5cbmdsb2JhbC5QSVhJID0gY29yZTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vY29yZScpO1xuXG4vKipcbiAqIEhvbGRzIGFsbCBpbmZvcm1hdGlvbiByZWxhdGVkIHRvIGFuIEludGVyYWN0aW9uIGV2ZW50XG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSS5pbnRlcmFjdGlvblxuICovXG5mdW5jdGlvbiBJbnRlcmFjdGlvbkRhdGEoKVxue1xuICAgIC8qKlxuICAgICAqIFRoaXMgcG9pbnQgc3RvcmVzIHRoZSBnbG9iYWwgY29vcmRzIG9mIHdoZXJlIHRoZSB0b3VjaC9tb3VzZSBldmVudCBoYXBwZW5lZFxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5Qb2ludH1cbiAgICAgKi9cbiAgICB0aGlzLmdsb2JhbCA9IG5ldyBjb3JlLlBvaW50KCk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgdGFyZ2V0IFNwcml0ZSB0aGF0IHdhcyBpbnRlcmFjdGVkIHdpdGhcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuU3ByaXRlfVxuICAgICAqL1xuICAgIHRoaXMudGFyZ2V0ID0gbnVsbDtcblxuICAgIC8qKlxuICAgICAqIFdoZW4gcGFzc2VkIHRvIGFuIGV2ZW50IGhhbmRsZXIsIHRoaXMgd2lsbCBiZSB0aGUgb3JpZ2luYWwgRE9NIEV2ZW50IHRoYXQgd2FzIGNhcHR1cmVkXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtFdmVudH1cbiAgICAgKi9cbiAgICB0aGlzLm9yaWdpbmFsRXZlbnQgPSBudWxsO1xufVxuXG5JbnRlcmFjdGlvbkRhdGEucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gSW50ZXJhY3Rpb25EYXRhO1xubW9kdWxlLmV4cG9ydHMgPSBJbnRlcmFjdGlvbkRhdGE7XG5cbi8qKlxuICogVGhpcyB3aWxsIHJldHVybiB0aGUgbG9jYWwgY29vcmRpbmF0ZXMgb2YgdGhlIHNwZWNpZmllZCBkaXNwbGF5T2JqZWN0IGZvciB0aGlzIEludGVyYWN0aW9uRGF0YVxuICpcbiAqIEBwYXJhbSBkaXNwbGF5T2JqZWN0IHtQSVhJLkRpc3BsYXlPYmplY3R9IFRoZSBEaXNwbGF5T2JqZWN0IHRoYXQgeW91IHdvdWxkIGxpa2UgdGhlIGxvY2FsIGNvb3JkcyBvZmZcbiAqIEBwYXJhbSBbcG9pbnRdIHtQSVhJLlBvaW50fSBBIFBvaW50IG9iamVjdCBpbiB3aGljaCB0byBzdG9yZSB0aGUgdmFsdWUsIG9wdGlvbmFsIChvdGhlcndpc2Ugd2lsbCBjcmVhdGUgYSBuZXcgcG9pbnQpXG4gKiBAcGFyYW0gW2dsb2JhbFBvc10ge1BJWEkuUG9pbnR9IEEgUG9pbnQgb2JqZWN0IGNvbnRhaW5pbmcgeW91ciBjdXN0b20gZ2xvYmFsIGNvb3Jkcywgb3B0aW9uYWwgKG90aGVyd2lzZSB3aWxsIHVzZSB0aGUgY3VycmVudCBnbG9iYWwgY29vcmRzKVxuICogQHJldHVybiB7UElYSS5Qb2ludH0gQSBwb2ludCBjb250YWluaW5nIHRoZSBjb29yZGluYXRlcyBvZiB0aGUgSW50ZXJhY3Rpb25EYXRhIHBvc2l0aW9uIHJlbGF0aXZlIHRvIHRoZSBEaXNwbGF5T2JqZWN0XG4gKi9cbkludGVyYWN0aW9uRGF0YS5wcm90b3R5cGUuZ2V0TG9jYWxQb3NpdGlvbiA9IGZ1bmN0aW9uIChkaXNwbGF5T2JqZWN0LCBwb2ludCwgZ2xvYmFsUG9zKVxue1xuICAgIHJldHVybiBkaXNwbGF5T2JqZWN0LndvcmxkVHJhbnNmb3JtLmFwcGx5SW52ZXJzZShnbG9iYWxQb3MgfHwgdGhpcy5nbG9iYWwsIHBvaW50KTtcbn07XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uL2NvcmUnKSxcbiAgICBJbnRlcmFjdGlvbkRhdGEgPSByZXF1aXJlKCcuL0ludGVyYWN0aW9uRGF0YScpO1xuXG4vLyBNaXggaW50ZXJhY3RpdmVUYXJnZXQgaW50byBjb3JlLkRpc3BsYXlPYmplY3QucHJvdG90eXBlXG5PYmplY3QuYXNzaWduKFxuICAgIGNvcmUuRGlzcGxheU9iamVjdC5wcm90b3R5cGUsXG4gICAgcmVxdWlyZSgnLi9pbnRlcmFjdGl2ZVRhcmdldCcpXG4pO1xuXG4vKipcbiAqIFRoZSBpbnRlcmFjdGlvbiBtYW5hZ2VyIGRlYWxzIHdpdGggbW91c2UgYW5kIHRvdWNoIGV2ZW50cy4gQW55IERpc3BsYXlPYmplY3QgY2FuIGJlIGludGVyYWN0aXZlXG4gKiBpZiBpdHMgaW50ZXJhY3RpdmUgcGFyYW1ldGVyIGlzIHNldCB0byB0cnVlXG4gKiBUaGlzIG1hbmFnZXIgYWxzbyBzdXBwb3J0cyBtdWx0aXRvdWNoLlxuICpcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWEkuaW50ZXJhY3Rpb25cbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5DYW52YXNSZW5kZXJlcnxQSVhJLldlYkdMUmVuZGVyZXJ9IEEgcmVmZXJlbmNlIHRvIHRoZSBjdXJyZW50IHJlbmRlcmVyXG4gKiBAcGFyYW0gW29wdGlvbnNdIHtvYmplY3R9XG4gKiBAcGFyYW0gW29wdGlvbnMuYXV0b1ByZXZlbnREZWZhdWx0PXRydWVdIHtib29sZWFufSBTaG91bGQgdGhlIG1hbmFnZXIgYXV0b21hdGljYWxseSBwcmV2ZW50IGRlZmF1bHQgYnJvd3NlciBhY3Rpb25zLlxuICogQHBhcmFtIFtvcHRpb25zLmludGVyYWN0aW9uRnJlcXVlbmN5PTEwXSB7bnVtYmVyfSBGcmVxdWVuY3kgaW5jcmVhc2VzIHRoZSBpbnRlcmFjdGlvbiBldmVudHMgd2lsbCBiZSBjaGVja2VkLlxuICovXG5mdW5jdGlvbiBJbnRlcmFjdGlvbk1hbmFnZXIocmVuZGVyZXIsIG9wdGlvbnMpXG57XG4gICAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG5cbiAgICAvKipcbiAgICAgKiBUaGUgcmVuZGVyZXIgdGhpcyBpbnRlcmFjdGlvbiBtYW5hZ2VyIHdvcmtzIGZvci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuU3lzdGVtUmVuZGVyZXJ9XG4gICAgICovXG4gICAgdGhpcy5yZW5kZXJlciA9IHJlbmRlcmVyO1xuXG4gICAgLyoqXG4gICAgICogU2hvdWxkIGRlZmF1bHQgYnJvd3NlciBhY3Rpb25zIGF1dG9tYXRpY2FsbHkgYmUgcHJldmVudGVkLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKiBAZGVmYXVsdCB0cnVlXG4gICAgICovXG4gICAgdGhpcy5hdXRvUHJldmVudERlZmF1bHQgPSBvcHRpb25zLmF1dG9QcmV2ZW50RGVmYXVsdCAhPT0gdW5kZWZpbmVkID8gb3B0aW9ucy5hdXRvUHJldmVudERlZmF1bHQgOiB0cnVlO1xuXG4gICAgLyoqXG4gICAgICogQXMgdGhpcyBmcmVxdWVuY3kgaW5jcmVhc2VzIHRoZSBpbnRlcmFjdGlvbiBldmVudHMgd2lsbCBiZSBjaGVja2VkIG1vcmUgb2Z0ZW4uXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMTBcbiAgICAgKi9cbiAgICB0aGlzLmludGVyYWN0aW9uRnJlcXVlbmN5ID0gb3B0aW9ucy5pbnRlcmFjdGlvbkZyZXF1ZW5jeSB8fCAxMDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBtb3VzZSBkYXRhXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLmludGVyYWN0aW9uLkludGVyYWN0aW9uRGF0YX1cbiAgICAgKi9cbiAgICB0aGlzLm1vdXNlID0gbmV3IEludGVyYWN0aW9uRGF0YSgpO1xuXG4gICAgLyoqXG4gICAgICogQW4gZXZlbnQgZGF0YSBvYmplY3QgdG8gaGFuZGxlIGFsbCB0aGUgZXZlbnQgdHJhY2tpbmcvZGlzcGF0Y2hpbmdcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge29iamVjdH1cbiAgICAgKi9cbiAgICB0aGlzLmV2ZW50RGF0YSA9IHtcbiAgICAgICAgc3RvcHBlZDogZmFsc2UsXG4gICAgICAgIHRhcmdldDogbnVsbCxcbiAgICAgICAgdHlwZTogbnVsbCxcbiAgICAgICAgZGF0YTogdGhpcy5tb3VzZSxcbiAgICAgICAgc3RvcFByb3BhZ2F0aW9uOmZ1bmN0aW9uKCl7XG4gICAgICAgICAgICB0aGlzLnN0b3BwZWQgPSB0cnVlO1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIC8qKlxuICAgICAqIFRpbnkgbGl0dGxlIGludGVyYWN0aXZlRGF0YSBwb29sICFcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuaW50ZXJhY3Rpb24uSW50ZXJhY3Rpb25EYXRhW119XG4gICAgICovXG4gICAgdGhpcy5pbnRlcmFjdGl2ZURhdGFQb29sID0gW107XG5cbiAgICAvKipcbiAgICAgKiBUaGUgRE9NIGVsZW1lbnQgdG8gYmluZCB0by5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge0hUTUxFbGVtZW50fVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5pbnRlcmFjdGlvbkRPTUVsZW1lbnQgPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogSGF2ZSBldmVudHMgYmVlbiBhdHRhY2hlZCB0byB0aGUgZG9tIGVsZW1lbnQ/XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5ldmVudHNBZGRlZCA9IGZhbHNlO1xuXG4gICAgLy90aGlzIHdpbGwgbWFrZSBpdCBzbyB0aGF0IHlvdSBkb24ndCBoYXZlIHRvIGNhbGwgYmluZCBhbGwgdGhlIHRpbWVcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge0Z1bmN0aW9ufVxuICAgICAqL1xuICAgIHRoaXMub25Nb3VzZVVwID0gdGhpcy5vbk1vdXNlVXAuYmluZCh0aGlzKTtcbiAgICB0aGlzLnByb2Nlc3NNb3VzZVVwID0gdGhpcy5wcm9jZXNzTW91c2VVcC5iaW5kKCB0aGlzICk7XG5cblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge0Z1bmN0aW9ufVxuICAgICAqL1xuICAgIHRoaXMub25Nb3VzZURvd24gPSB0aGlzLm9uTW91c2VEb3duLmJpbmQodGhpcyk7XG4gICAgdGhpcy5wcm9jZXNzTW91c2VEb3duID0gdGhpcy5wcm9jZXNzTW91c2VEb3duLmJpbmQoIHRoaXMgKTtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge0Z1bmN0aW9ufVxuICAgICAqL1xuICAgIHRoaXMub25Nb3VzZU1vdmUgPSB0aGlzLm9uTW91c2VNb3ZlLmJpbmQoIHRoaXMgKTtcbiAgICB0aGlzLnByb2Nlc3NNb3VzZU1vdmUgPSB0aGlzLnByb2Nlc3NNb3VzZU1vdmUuYmluZCggdGhpcyApO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7RnVuY3Rpb259XG4gICAgICovXG4gICAgdGhpcy5vbk1vdXNlT3V0ID0gdGhpcy5vbk1vdXNlT3V0LmJpbmQodGhpcyk7XG4gICAgdGhpcy5wcm9jZXNzTW91c2VPdmVyT3V0ID0gdGhpcy5wcm9jZXNzTW91c2VPdmVyT3V0LmJpbmQoIHRoaXMgKTtcblxuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7RnVuY3Rpb259XG4gICAgICovXG4gICAgdGhpcy5vblRvdWNoU3RhcnQgPSB0aGlzLm9uVG91Y2hTdGFydC5iaW5kKHRoaXMpO1xuICAgIHRoaXMucHJvY2Vzc1RvdWNoU3RhcnQgPSB0aGlzLnByb2Nlc3NUb3VjaFN0YXJ0LmJpbmQodGhpcyk7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtGdW5jdGlvbn1cbiAgICAgKi9cbiAgICB0aGlzLm9uVG91Y2hFbmQgPSB0aGlzLm9uVG91Y2hFbmQuYmluZCh0aGlzKTtcbiAgICB0aGlzLnByb2Nlc3NUb3VjaEVuZCA9IHRoaXMucHJvY2Vzc1RvdWNoRW5kLmJpbmQodGhpcyk7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtGdW5jdGlvbn1cbiAgICAgKi9cbiAgICB0aGlzLm9uVG91Y2hNb3ZlID0gdGhpcy5vblRvdWNoTW92ZS5iaW5kKHRoaXMpO1xuICAgIHRoaXMucHJvY2Vzc1RvdWNoTW92ZSA9IHRoaXMucHJvY2Vzc1RvdWNoTW92ZS5iaW5kKHRoaXMpO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMubGFzdCA9IDA7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgY3NzIHN0eWxlIG9mIHRoZSBjdXJzb3IgdGhhdCBpcyBiZWluZyB1c2VkXG4gICAgICogQG1lbWJlciB7c3RyaW5nfVxuICAgICAqL1xuICAgIHRoaXMuY3VycmVudEN1cnNvclN0eWxlID0gJ2luaGVyaXQnO1xuXG4gICAgLyoqXG4gICAgICogSW50ZXJuYWwgY2FjaGVkIHZhclxuICAgICAqIEBtZW1iZXIge1BJWEkuUG9pbnR9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl90ZW1wUG9pbnQgPSBuZXcgY29yZS5Qb2ludCgpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGN1cnJlbnQgcmVzb2x1dGlvblxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLnJlc29sdXRpb24gPSAxO1xuXG4gICAgdGhpcy5zZXRUYXJnZXRFbGVtZW50KHRoaXMucmVuZGVyZXIudmlldywgdGhpcy5yZW5kZXJlci5yZXNvbHV0aW9uKTtcbn1cblxuSW50ZXJhY3Rpb25NYW5hZ2VyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IEludGVyYWN0aW9uTWFuYWdlcjtcbm1vZHVsZS5leHBvcnRzID0gSW50ZXJhY3Rpb25NYW5hZ2VyO1xuXG4vKipcbiAqIFNldHMgdGhlIERPTSBlbGVtZW50IHdoaWNoIHdpbGwgcmVjZWl2ZSBtb3VzZS90b3VjaCBldmVudHMuIFRoaXMgaXMgdXNlZnVsIGZvciB3aGVuIHlvdSBoYXZlXG4gKiBvdGhlciBET00gZWxlbWVudHMgb24gdG9wIG9mIHRoZSByZW5kZXJlcnMgQ2FudmFzIGVsZW1lbnQuIFdpdGggdGhpcyB5b3UnbGwgYmUgYmFsZSB0byBkZWxldGVnYXRlXG4gKiBhbm90aGVyIERPTSBlbGVtZW50IHRvIHJlY2VpdmUgdGhvc2UgZXZlbnRzLlxuICpcbiAqIEBwYXJhbSBlbGVtZW50IHtIVE1MRWxlbWVudH0gdGhlIERPTSBlbGVtZW50IHdoaWNoIHdpbGwgcmVjZWl2ZSBtb3VzZSBhbmQgdG91Y2ggZXZlbnRzLlxuICogQHBhcmFtIFtyZXNvbHV0aW9uPTFdIHtudW1iZXJ9IFRIZSByZXNvbHV0aW9uIG9mIHRoZSBuZXcgZWxlbWVudCAocmVsYXRpdmUgdG8gdGhlIGNhbnZhcykuXG4gKiBAcHJpdmF0ZVxuICovXG5JbnRlcmFjdGlvbk1hbmFnZXIucHJvdG90eXBlLnNldFRhcmdldEVsZW1lbnQgPSBmdW5jdGlvbiAoZWxlbWVudCwgcmVzb2x1dGlvbilcbntcbiAgICB0aGlzLnJlbW92ZUV2ZW50cygpO1xuXG4gICAgdGhpcy5pbnRlcmFjdGlvbkRPTUVsZW1lbnQgPSBlbGVtZW50O1xuXG4gICAgdGhpcy5yZXNvbHV0aW9uID0gcmVzb2x1dGlvbiB8fCAxO1xuXG4gICAgdGhpcy5hZGRFdmVudHMoKTtcbn07XG5cbi8qKlxuICogUmVnaXN0ZXJzIGFsbCB0aGUgRE9NIGV2ZW50c1xuICpcbiAqIEBwcml2YXRlXG4gKi9cbkludGVyYWN0aW9uTWFuYWdlci5wcm90b3R5cGUuYWRkRXZlbnRzID0gZnVuY3Rpb24gKClcbntcbiAgICBpZiAoIXRoaXMuaW50ZXJhY3Rpb25ET01FbGVtZW50KVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvcmUudGlja2VyLnNoYXJlZC5hZGQodGhpcy51cGRhdGUsIHRoaXMpO1xuXG4gICAgaWYgKHdpbmRvdy5uYXZpZ2F0b3IubXNQb2ludGVyRW5hYmxlZClcbiAgICB7XG4gICAgICAgIHRoaXMuaW50ZXJhY3Rpb25ET01FbGVtZW50LnN0eWxlWyctbXMtY29udGVudC16b29taW5nJ10gPSAnbm9uZSc7XG4gICAgICAgIHRoaXMuaW50ZXJhY3Rpb25ET01FbGVtZW50LnN0eWxlWyctbXMtdG91Y2gtYWN0aW9uJ10gPSAnbm9uZSc7XG4gICAgfVxuXG4gICAgd2luZG93LmRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlbW92ZScsICAgIHRoaXMub25Nb3VzZU1vdmUsIHRydWUpO1xuICAgIHRoaXMuaW50ZXJhY3Rpb25ET01FbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlZG93bicsICAgIHRoaXMub25Nb3VzZURvd24sIHRydWUpO1xuICAgIHRoaXMuaW50ZXJhY3Rpb25ET01FbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlb3V0JywgICAgIHRoaXMub25Nb3VzZU91dCwgdHJ1ZSk7XG5cbiAgICB0aGlzLmludGVyYWN0aW9uRE9NRWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCd0b3VjaHN0YXJ0JywgICB0aGlzLm9uVG91Y2hTdGFydCwgdHJ1ZSk7XG4gICAgdGhpcy5pbnRlcmFjdGlvbkRPTUVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigndG91Y2hlbmQnLCAgICAgdGhpcy5vblRvdWNoRW5kLCB0cnVlKTtcbiAgICB0aGlzLmludGVyYWN0aW9uRE9NRWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCd0b3VjaG1vdmUnLCAgICB0aGlzLm9uVG91Y2hNb3ZlLCB0cnVlKTtcblxuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdtb3VzZXVwJywgIHRoaXMub25Nb3VzZVVwLCB0cnVlKTtcblxuICAgIHRoaXMuZXZlbnRzQWRkZWQgPSB0cnVlO1xufTtcblxuLyoqXG4gKiBSZW1vdmVzIGFsbCB0aGUgRE9NIGV2ZW50cyB0aGF0IHdlcmUgcHJldmlvdXNseSByZWdpc3RlcmVkXG4gKlxuICogQHByaXZhdGVcbiAqL1xuSW50ZXJhY3Rpb25NYW5hZ2VyLnByb3RvdHlwZS5yZW1vdmVFdmVudHMgPSBmdW5jdGlvbiAoKVxue1xuICAgIGlmICghdGhpcy5pbnRlcmFjdGlvbkRPTUVsZW1lbnQpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29yZS50aWNrZXIuc2hhcmVkLnJlbW92ZSh0aGlzLnVwZGF0ZSk7XG5cbiAgICBpZiAod2luZG93Lm5hdmlnYXRvci5tc1BvaW50ZXJFbmFibGVkKVxuICAgIHtcbiAgICAgICAgdGhpcy5pbnRlcmFjdGlvbkRPTUVsZW1lbnQuc3R5bGVbJy1tcy1jb250ZW50LXpvb21pbmcnXSA9ICcnO1xuICAgICAgICB0aGlzLmludGVyYWN0aW9uRE9NRWxlbWVudC5zdHlsZVsnLW1zLXRvdWNoLWFjdGlvbiddID0gJyc7XG4gICAgfVxuXG4gICAgd2luZG93LmRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21vdXNlbW92ZScsIHRoaXMub25Nb3VzZU1vdmUsIHRydWUpO1xuICAgIHRoaXMuaW50ZXJhY3Rpb25ET01FbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21vdXNlZG93bicsIHRoaXMub25Nb3VzZURvd24sIHRydWUpO1xuICAgIHRoaXMuaW50ZXJhY3Rpb25ET01FbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21vdXNlb3V0JywgIHRoaXMub25Nb3VzZU91dCwgdHJ1ZSk7XG5cbiAgICB0aGlzLmludGVyYWN0aW9uRE9NRWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCd0b3VjaHN0YXJ0JywgdGhpcy5vblRvdWNoU3RhcnQsIHRydWUpO1xuICAgIHRoaXMuaW50ZXJhY3Rpb25ET01FbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3RvdWNoZW5kJywgIHRoaXMub25Ub3VjaEVuZCwgdHJ1ZSk7XG4gICAgdGhpcy5pbnRlcmFjdGlvbkRPTUVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigndG91Y2htb3ZlJywgdGhpcy5vblRvdWNoTW92ZSwgdHJ1ZSk7XG5cbiAgICB0aGlzLmludGVyYWN0aW9uRE9NRWxlbWVudCA9IG51bGw7XG5cbiAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcignbW91c2V1cCcsICB0aGlzLm9uTW91c2VVcCwgdHJ1ZSk7XG5cbiAgICB0aGlzLmV2ZW50c0FkZGVkID0gZmFsc2U7XG59O1xuXG4vKipcbiAqIFVwZGF0ZXMgdGhlIHN0YXRlIG9mIGludGVyYWN0aXZlIG9iamVjdHMuXG4gKiBJbnZva2VkIGJ5IGEgdGhyb3R0bGVkIHRpY2tlciB1cGRhdGUgZnJvbVxuICoge0BsaW5rIFBJWEkudGlja2VyLnNoYXJlZH0uXG4gKlxuICogQHBhcmFtIGRlbHRhVGltZSB7bnVtYmVyfVxuICovXG5JbnRlcmFjdGlvbk1hbmFnZXIucHJvdG90eXBlLnVwZGF0ZSA9IGZ1bmN0aW9uIChkZWx0YVRpbWUpXG57XG4gICAgdGhpcy5fZGVsdGFUaW1lICs9IGRlbHRhVGltZTtcblxuICAgIGlmICh0aGlzLl9kZWx0YVRpbWUgPCB0aGlzLmludGVyYWN0aW9uRnJlcXVlbmN5KVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuX2RlbHRhVGltZSA9IDA7XG5cbiAgICBpZiAoIXRoaXMuaW50ZXJhY3Rpb25ET01FbGVtZW50KVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIGlmIHRoZSB1c2VyIG1vdmUgdGhlIG1vdXNlIHRoaXMgY2hlY2sgaGFzIGFscmVhZHkgYmVlbiBkZm9uZSB1c2luZyB0aGUgbW91c2UgbW92ZSFcbiAgICBpZih0aGlzLmRpZE1vdmUpXG4gICAge1xuICAgICAgICB0aGlzLmRpZE1vdmUgPSBmYWxzZTtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuY3Vyc29yID0gJ2luaGVyaXQnO1xuXG4gICAgdGhpcy5wcm9jZXNzSW50ZXJhY3RpdmUodGhpcy5tb3VzZS5nbG9iYWwsIHRoaXMucmVuZGVyZXIuX2xhc3RPYmplY3RSZW5kZXJlZCwgdGhpcy5wcm9jZXNzTW91c2VPdmVyT3V0LCB0cnVlICk7XG5cbiAgICBpZiAodGhpcy5jdXJyZW50Q3Vyc29yU3R5bGUgIT09IHRoaXMuY3Vyc29yKVxuICAgIHtcbiAgICAgICAgdGhpcy5jdXJyZW50Q3Vyc29yU3R5bGUgPSB0aGlzLmN1cnNvcjtcbiAgICAgICAgdGhpcy5pbnRlcmFjdGlvbkRPTUVsZW1lbnQuc3R5bGUuY3Vyc29yID0gdGhpcy5jdXJzb3I7XG4gICAgfVxuXG4gICAgLy9UT0RPXG59O1xuXG4vKipcbiAqIERpc3BhdGNoZXMgYW4gZXZlbnQgb24gdGhlIGRpc3BsYXkgb2JqZWN0IHRoYXQgd2FzIGludGVyYWN0ZWQgd2l0aFxuICpcbiAqIEBwYXJhbSBkaXNwbGF5T2JqZWN0IHtQSVhJLkNvbnRhaW5lcnxQSVhJLlNwcml0ZXxQSVhJLmV4dHJhcy5UaWxpbmdTcHJpdGV9IHRoZSBkaXNwbGF5IG9iamVjdCBpbiBxdWVzdGlvblxuICogQHBhcmFtIGV2ZW50U3RyaW5nIHtzdHJpbmd9IHRoZSBuYW1lIG9mIHRoZSBldmVudCAoZS5nLCBtb3VzZWRvd24pXG4gKiBAcGFyYW0gZXZlbnREYXRhIHtvYmplY3R9IHRoZSBldmVudCBkYXRhIG9iamVjdFxuICogQHByaXZhdGVcbiAqL1xuSW50ZXJhY3Rpb25NYW5hZ2VyLnByb3RvdHlwZS5kaXNwYXRjaEV2ZW50ID0gZnVuY3Rpb24gKCBkaXNwbGF5T2JqZWN0LCBldmVudFN0cmluZywgZXZlbnREYXRhIClcbntcbiAgICBpZighZXZlbnREYXRhLnN0b3BwZWQpXG4gICAge1xuICAgICAgICBldmVudERhdGEudGFyZ2V0ID0gZGlzcGxheU9iamVjdDtcbiAgICAgICAgZXZlbnREYXRhLnR5cGUgPSBldmVudFN0cmluZztcblxuICAgICAgICBkaXNwbGF5T2JqZWN0LmVtaXQoIGV2ZW50U3RyaW5nLCBldmVudERhdGEgKTtcblxuICAgICAgICBpZiggZGlzcGxheU9iamVjdFtldmVudFN0cmluZ10gKVxuICAgICAgICB7XG4gICAgICAgICAgICBkaXNwbGF5T2JqZWN0W2V2ZW50U3RyaW5nXSggZXZlbnREYXRhICk7XG4gICAgICAgIH1cbiAgICB9XG59O1xuXG4vKipcbiAqIE1hcHMgeCBhbmQgeSBjb29yZHMgZnJvbSBhIERPTSBvYmplY3QgYW5kIG1hcHMgdGhlbSBjb3JyZWN0bHkgdG8gdGhlIHBpeGkgdmlldy4gVGhlIHJlc3VsdGluZyB2YWx1ZSBpcyBzdG9yZWQgaW4gdGhlIHBvaW50LlxuICogVGhpcyB0YWtlcyBpbnRvIGFjY291bnQgdGhlIGZhY3QgdGhhdCB0aGUgRE9NIGVsZW1lbnQgY291bGQgYmUgc2NhbGVkIGFuZCBwb3NpdGlvbmVkIGFueXdoZXJlIG9uIHRoZSBzY3JlZW4uXG4gKlxuICogQHBhcmFtICB7UElYSS5Qb2ludH0gcG9pbnQgdGhlIHBvaW50IHRoYXQgdGhlIHJlc3VsdCB3aWxsIGJlIHN0b3JlZCBpblxuICogQHBhcmFtICB7bnVtYmVyfSB4ICAgICB0aGUgeCBjb29yZCBvZiB0aGUgcG9zaXRpb24gdG8gbWFwXG4gKiBAcGFyYW0gIHtudW1iZXJ9IHkgICAgIHRoZSB5IGNvb3JkIG9mIHRoZSBwb3NpdGlvbiB0byBtYXBcbiAqL1xuSW50ZXJhY3Rpb25NYW5hZ2VyLnByb3RvdHlwZS5tYXBQb3NpdGlvblRvUG9pbnQgPSBmdW5jdGlvbiAoIHBvaW50LCB4LCB5IClcbntcbiAgICB2YXIgcmVjdCA9IHRoaXMuaW50ZXJhY3Rpb25ET01FbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgIHBvaW50LnggPSAoICggeCAtIHJlY3QubGVmdCApICogKHRoaXMuaW50ZXJhY3Rpb25ET01FbGVtZW50LndpZHRoICAvIHJlY3Qud2lkdGggICkgKSAvIHRoaXMucmVzb2x1dGlvbjtcbiAgICBwb2ludC55ID0gKCAoIHkgLSByZWN0LnRvcCAgKSAqICh0aGlzLmludGVyYWN0aW9uRE9NRWxlbWVudC5oZWlnaHQgLyByZWN0LmhlaWdodCApICkgLyB0aGlzLnJlc29sdXRpb247XG59O1xuXG4vKipcbiAqIFRoaXMgZnVuY3Rpb24gaXMgcHJvdmlkZXMgYSBuZWF0IHdheSBvZiBjcmF3bGluZyB0aHJvdWdoIHRoZSBzY2VuZSBncmFwaCBhbmQgcnVubmluZyBhIHNwZWNpZmllZCBmdW5jdGlvbiBvbiBhbGwgaW50ZXJhY3RpdmUgb2JqZWN0cyBpdCBmaW5kcy5cbiAqIEl0IHdpbGwgYWxzbyB0YWtlIGNhcmUgb2YgaGl0IHRlc3RpbmcgdGhlIGludGVyYWN0aXZlIG9iamVjdHMgYW5kIHBhc3NlcyB0aGUgaGl0IGFjcm9zcyBpbiB0aGUgZnVuY3Rpb24uXG4gKlxuICogQHBhcmFtICB7UElYSS5Qb2ludH0gcG9pbnQgdGhlIHBvaW50IHRoYXQgaXMgdGVzdGVkIGZvciBjb2xsaXNpb25cbiAqIEBwYXJhbSAge1BJWEkuQ29udGFpbmVyfFBJWEkuU3ByaXRlfFBJWEkuZXh0cmFzLlRpbGluZ1Nwcml0ZX0gZGlzcGxheU9iamVjdCB0aGUgZGlzcGxheU9iamVjdCB0aGF0IHdpbGwgYmUgaGl0IHRlc3QgKHJlY3VyY3Npdmx5IGNyYXdscyBpdHMgY2hpbGRyZW4pXG4gKiBAcGFyYW0gIHtGdW5jdGlvbn0gZnVuYyB0aGUgZnVuY3Rpb24gdGhhdCB3aWxsIGJlIGNhbGxlZCBvbiBlYWNoIGludGVyYWN0aXZlIG9iamVjdC4gVGhlIGRpc3BsYXlPYmplY3QgYW5kIGhpdCB3aWxsIGJlIHBhc3NlZCB0byB0aGUgZnVuY3Rpb25cbiAqIEBwYXJhbSAge2Jvb2xlYW59IGhpdFRlc3QgdGhpcyBpbmRpY2F0ZXMgaWYgdGhlIG9iamVjdHMgaW5zaWRlIHNob3VsZCBiZSBoaXQgdGVzdCBhZ2FpbnN0IHRoZSBwb2ludFxuICogQHJldHVybiB7Ym9vbGVhbn0gcmV0dXJucyB0cnVlIGlmIHRoZSBkaXNwbGF5T2JqZWN0IGhpdCB0aGUgcG9pbnRcbiAqL1xuSW50ZXJhY3Rpb25NYW5hZ2VyLnByb3RvdHlwZS5wcm9jZXNzSW50ZXJhY3RpdmUgPSBmdW5jdGlvbiAocG9pbnQsIGRpc3BsYXlPYmplY3QsIGZ1bmMsIGhpdFRlc3QsIGludGVyYWN0aXZlKVxue1xuICAgIGlmKCFkaXNwbGF5T2JqZWN0IHx8ICFkaXNwbGF5T2JqZWN0LnZpc2libGUpXG4gICAge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgLy8gVG9vayBhIGxpdHRsZSB3aGlsZSB0byByZXdvcmsgdGhpcyBmdW5jdGlvbiBjb3JyZWN0bHkhIEJ1dCBub3cgaXQgaXMgZG9uZSBhbmQgbmljZSBhbmQgb3B0aW1pc2VkLiBeX15cbiAgICAvLyBcbiAgICAvLyBUaGlzIGZ1bmN0aW9uIHdpbGwgbm93IGxvb3AgdGhyb3VnaCBhbGwgb2JqZWN0cyBhbmQgdGhlbiBvbmx5IGhpdCB0ZXN0IHRoZSBvYmplY3RzIGl0IEhBUyB0bywgbm90IGFsbCBvZiB0aGVtLiBNVUNIIGZhc3Rlci4uXG4gICAgLy8gQW4gb2JqZWN0IHdpbGwgYmUgaGl0IHRlc3QgaWYgdGhlIGZvbGxvd2luZyBpcyB0cnVlOlxuICAgIC8vIFxuICAgIC8vIDE6IEl0IGlzIGludGVyYWN0aXZlLlxuICAgIC8vIDI6IEl0IGJlbG9uZ3MgdG8gYSBwYXJlbnQgdGhhdCBpcyBpbnRlcmFjdGl2ZSBBTkQgb25lIG9mIHRoZSBwYXJlbnRzIGNoaWxkcmVuIGhhdmUgbm90IGFscmVhZHkgYmVlbiBoaXQuXG4gICAgLy8gXG4gICAgLy8gQXMgYW5vdGhlciBsaXR0bGUgb3B0aW1pc2F0aW9uIG9uY2UgYW4gaW50ZXJhY3RpdmUgb2JqZWN0IGhhcyBiZWVuIGhpdCB3ZSBjYW4gY2Fycnkgb24gdGhyb3VnaCB0aGUgc2NlbmVncmFwaCwgYnV0IHdlIGtub3cgdGhhdCB0aGVyZSB3aWxsIGJlIG5vIG1vcmUgaGl0cyEgU28gd2UgY2FuIGF2b2lkIGV4dHJhIGhpdCB0ZXN0c1xuICAgIC8vIEEgZmluYWwgb3B0aW1pc2F0aW9uIGlzIHRoYXQgYW4gb2JqZWN0IGlzIG5vdCBoaXQgdGVzdCBkaXJlY3RseSBpZiBhIGNoaWxkIGhhcyBhbHJlYWR5IGJlZW4gaGl0LlxuICAgIFxuICAgIHZhciBoaXQgPSBmYWxzZSxcbiAgICAgICAgaW50ZXJhY3RpdmVQYXJlbnQgPSBpbnRlcmFjdGl2ZSA9IGRpc3BsYXlPYmplY3QuaW50ZXJhY3RpdmUgfHwgaW50ZXJhY3RpdmU7XG5cbiAgICAvLyBpZiB0aGUgZGlzcGxheW9iamVjdCBoYXMgYSBoaXRBcmVhLCB0aGVuIGl0IGRvZXMgbm90IG5lZWQgdG8gaGl0VGVzdCBjaGlsZHJlbi5cbiAgICBpZihkaXNwbGF5T2JqZWN0LmhpdEFyZWEpXG4gICAge1xuICAgICAgICBpbnRlcmFjdGl2ZVBhcmVudCA9IGZhbHNlO1xuICAgIH1cblxuICAgIC8vICoqIEZSRUUgVElQICoqISBJZiBhbiBvYmplY3QgaXMgbm90IGludGVyYWN0dGl2ZSBvciBoYXMgbm8gYnV0dG9ucyBpbiBpdCAoc3VjaCBhcyBhIGdhbWUgc2NlbmUhKSBzZXQgaW50ZXJhY3RpdmVDaGlsZHJlbiB0byBmYWxzZSBmb3IgdGhhdCBkaXNwbGF5T2JqZWN0LlxuICAgIC8vIFRoaXMgd2lsbCBhbGxvdyBwaXhpIHRvIGNvbXBsZXRseSBpZ25vcmUgYW5kIGJ5cGFzcyBjaGVja2luZyB0aGUgZGlzcGxheU9iamVjdHMgY2hpbGRyZW4uXG4gICAgaWYoZGlzcGxheU9iamVjdC5pbnRlcmFjdGl2ZUNoaWxkcmVuKVxuICAgIHsgICAgICAgXG4gICAgICAgIHZhciBjaGlsZHJlbiA9IGRpc3BsYXlPYmplY3QuY2hpbGRyZW47XG4gICAgICAgIFxuICAgICAgICBmb3IgKHZhciBpID0gY2hpbGRyZW4ubGVuZ3RoLTE7IGkgPj0gMDsgaS0tKVxuICAgICAgICB7XG4gICAgICAgICAgICAvLyB0aW1lIHRvIGdldCByZWN1cnNpdmUuLiBpZiB0aGlzIGZ1bmN0aW9uIHdpbGwgcmV0dXJuIGlmIHNvbXRoaW5nIGlzIGhpdC4uXG4gICAgICAgICAgICBpZiggdGhpcy5wcm9jZXNzSW50ZXJhY3RpdmUocG9pbnQsIGNoaWxkcmVuW2ldLCBmdW5jLCBoaXRUZXN0LCBpbnRlcmFjdGl2ZVBhcmVudCkgKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGhpdCA9IHRydWU7XG5cbiAgICAgICAgICAgICAgICAvLyB3ZSBubyBsb25nZXIgbmVlZCB0byBoaXQgdGVzdCBhbnkgbW9yZSBvYmplY3RzIGluIHRoaXMgY29udGFpbmVyIGFzIHdlIHdlIG5vdyBrbm93IHRoZSBwYXJlbnQgaGFzIGJlZW4gaGl0XG4gICAgICAgICAgICAgICAgaW50ZXJhY3RpdmVQYXJlbnQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAvLyBJZiB0aGUgY2hpbGQgaXMgaW50ZXJhY3RpdmUgLCB0aGF0IG1lYW5zIHRoYXQgdGhlIG9iamVjdCBoaXQgd2FzIGFjdHVhbGx5IGludGVyYWN0aXZlIGFuZCBub3QganVzdCB0aGUgY2hpbGQgb2YgYW4gaW50ZXJhY3RpdmUgb2JqZWN0LiBcbiAgICAgICAgICAgICAgICAvLyBUaGlzIG1lYW5zIHdlIG5vIGxvbmdlciBuZWVkIHRvIGhpdCB0ZXN0IGFueXRoaW5nIGVsc2UuIFdlIHN0aWxsIG5lZWQgdG8gcnVuIHRocm91Z2ggYWxsIG9iamVjdHMsIGJ1dCB3ZSBkb24ndCBuZWVkIHRvIHBlcmZvcm0gYW55IGhpdCB0ZXN0cy5cbiAgICAgICAgICAgICAgICBpZihjaGlsZHJlbltpXS5pbnRlcmFjdGl2ZSlcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIGhpdFRlc3QgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBubyBwb2ludCBydW5uaW5nIHRoaXMgaWYgdGhlIGl0ZW0gaXMgbm90IGludGVyYWN0aXZlIG9yIGRvZXMgbm90IGhhdmUgYW4gaW50ZXJhY3RpdmUgcGFyZW50LlxuICAgIGlmKGludGVyYWN0aXZlKVxuICAgIHtcbiAgICAgICAgLy8gaWYgd2UgYXJlIGhpdCB0ZXN0aW5nIChhcyBpbiB3ZSBoYXZlIG5vIGhpdCBhbnkgb2JqZWN0cyB5ZXQpXG4gICAgICAgIC8vIFdlIGFsc28gZG9uJ3QgbmVlZCB0byB3b3JyeSBhYm91dCBoaXQgdGVzdGluZyBpZiBvbmNlIG9mIHRoZSBkaXNwbGF5T2JqZWN0cyBjaGlsZHJlbiBoYXMgYWxyZWFkeSBiZWVuIGhpdCFcbiAgICAgICAgaWYoaGl0VGVzdCAmJiAhaGl0KVxuICAgICAgICB7ICBcbiAgICAgICAgICAgIGlmKGRpc3BsYXlPYmplY3QuaGl0QXJlYSlcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBkaXNwbGF5T2JqZWN0LndvcmxkVHJhbnNmb3JtLmFwcGx5SW52ZXJzZShwb2ludCwgIHRoaXMuX3RlbXBQb2ludCk7XG4gICAgICAgICAgICAgICAgaGl0ID0gZGlzcGxheU9iamVjdC5oaXRBcmVhLmNvbnRhaW5zKCB0aGlzLl90ZW1wUG9pbnQueCwgdGhpcy5fdGVtcFBvaW50LnkgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYoZGlzcGxheU9iamVjdC5jb250YWluc1BvaW50KVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGhpdCA9IGRpc3BsYXlPYmplY3QuY29udGFpbnNQb2ludChwb2ludCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZihkaXNwbGF5T2JqZWN0LmludGVyYWN0aXZlKVxuICAgICAgICB7XG4gICAgICAgICAgICBmdW5jKGRpc3BsYXlPYmplY3QsIGhpdCk7IFxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGhpdDtcbiAgXG59O1xuXG5cbi8qKlxuICogSXMgY2FsbGVkIHdoZW4gdGhlIG1vdXNlIGJ1dHRvbiBpcyBwcmVzc2VkIGRvd24gb24gdGhlIHJlbmRlcmVyIGVsZW1lbnRcbiAqXG4gKiBAcGFyYW0gZXZlbnQge0V2ZW50fSBUaGUgRE9NIGV2ZW50IG9mIGEgbW91c2UgYnV0dG9uIGJlaW5nIHByZXNzZWQgZG93blxuICogQHByaXZhdGVcbiAqL1xuSW50ZXJhY3Rpb25NYW5hZ2VyLnByb3RvdHlwZS5vbk1vdXNlRG93biA9IGZ1bmN0aW9uIChldmVudClcbntcbiAgICB0aGlzLm1vdXNlLm9yaWdpbmFsRXZlbnQgPSBldmVudDtcbiAgICB0aGlzLmV2ZW50RGF0YS5kYXRhID0gdGhpcy5tb3VzZTtcbiAgICB0aGlzLmV2ZW50RGF0YS5zdG9wcGVkID0gZmFsc2U7XG5cbiAgICAvLyBVcGRhdGUgaW50ZXJuYWwgbW91c2UgcmVmZXJlbmNlXG4gICAgdGhpcy5tYXBQb3NpdGlvblRvUG9pbnQoIHRoaXMubW91c2UuZ2xvYmFsLCBldmVudC5jbGllbnRYLCBldmVudC5jbGllbnRZKTtcblxuICAgIGlmICh0aGlzLmF1dG9QcmV2ZW50RGVmYXVsdClcbiAgICB7XG4gICAgICAgIHRoaXMubW91c2Uub3JpZ2luYWxFdmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIH1cblxuICAgIHRoaXMucHJvY2Vzc0ludGVyYWN0aXZlKHRoaXMubW91c2UuZ2xvYmFsLCB0aGlzLnJlbmRlcmVyLl9sYXN0T2JqZWN0UmVuZGVyZWQsIHRoaXMucHJvY2Vzc01vdXNlRG93biwgdHJ1ZSApO1xufTtcblxuLyoqXG4gKiBQcm9jZXNzZXMgdGhlIHJlc3VsdCBvZiB0aGUgbW91c2UgZG93biBjaGVjayBhbmQgZGlzcGF0Y2hlcyB0aGUgZXZlbnQgaWYgbmVlZCBiZVxuICpcbiAqIEBwYXJhbSBkaXNwbGF5T2JqZWN0IHtQSVhJLkNvbnRhaW5lcnxQSVhJLlNwcml0ZXxQSVhJLmV4dHJhcy5UaWxpbmdTcHJpdGV9IFRoZSBkaXNwbGF5IG9iamVjdCB0aGF0IHdhcyB0ZXN0ZWRcbiAqIEBwYXJhbSBoaXQge2Jvb2xlYW59IHRoZSByZXN1bHQgb2YgdGhlIGhpdCB0ZXN0IG9uIHRoZSBkaXNwYXkgb2JqZWN0XG4gKiBAcHJpdmF0ZVxuICovXG5JbnRlcmFjdGlvbk1hbmFnZXIucHJvdG90eXBlLnByb2Nlc3NNb3VzZURvd24gPSBmdW5jdGlvbiAoIGRpc3BsYXlPYmplY3QsIGhpdCApXG57XG4gICAgdmFyIGUgPSB0aGlzLm1vdXNlLm9yaWdpbmFsRXZlbnQ7XG4gICAgXG4gICAgdmFyIGlzUmlnaHRCdXR0b24gPSBlLmJ1dHRvbiA9PT0gMiB8fCBlLndoaWNoID09PSAzO1xuXG4gICAgaWYoaGl0KVxuICAgIHtcbiAgICAgICAgZGlzcGxheU9iamVjdFsgaXNSaWdodEJ1dHRvbiA/ICdfaXNSaWdodERvd24nIDogJ19pc0xlZnREb3duJyBdID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50KCBkaXNwbGF5T2JqZWN0LCBpc1JpZ2h0QnV0dG9uID8gJ3JpZ2h0ZG93bicgOiAnbW91c2Vkb3duJywgdGhpcy5ldmVudERhdGEgKTtcbiAgICB9XG59O1xuXG5cblxuLyoqXG4gKiBJcyBjYWxsZWQgd2hlbiB0aGUgbW91c2UgYnV0dG9uIGlzIHJlbGVhc2VkIG9uIHRoZSByZW5kZXJlciBlbGVtZW50XG4gKlxuICogQHBhcmFtIGV2ZW50IHtFdmVudH0gVGhlIERPTSBldmVudCBvZiBhIG1vdXNlIGJ1dHRvbiBiZWluZyByZWxlYXNlZFxuICogQHByaXZhdGVcbiAqL1xuSW50ZXJhY3Rpb25NYW5hZ2VyLnByb3RvdHlwZS5vbk1vdXNlVXAgPSBmdW5jdGlvbiAoZXZlbnQpXG57XG4gICAgdGhpcy5tb3VzZS5vcmlnaW5hbEV2ZW50ID0gZXZlbnQ7XG4gICAgdGhpcy5ldmVudERhdGEuZGF0YSA9IHRoaXMubW91c2U7XG4gICAgdGhpcy5ldmVudERhdGEuc3RvcHBlZCA9IGZhbHNlO1xuXG4gICAgLy8gVXBkYXRlIGludGVybmFsIG1vdXNlIHJlZmVyZW5jZVxuICAgIHRoaXMubWFwUG9zaXRpb25Ub1BvaW50KCB0aGlzLm1vdXNlLmdsb2JhbCwgZXZlbnQuY2xpZW50WCwgZXZlbnQuY2xpZW50WSk7XG5cbiAgICB0aGlzLnByb2Nlc3NJbnRlcmFjdGl2ZSh0aGlzLm1vdXNlLmdsb2JhbCwgdGhpcy5yZW5kZXJlci5fbGFzdE9iamVjdFJlbmRlcmVkLCB0aGlzLnByb2Nlc3NNb3VzZVVwLCB0cnVlICk7XG59O1xuXG4vKipcbiAqIFByb2Nlc3NlcyB0aGUgcmVzdWx0IG9mIHRoZSBtb3VzZSB1cCBjaGVjayBhbmQgZGlzcGF0Y2hlcyB0aGUgZXZlbnQgaWYgbmVlZCBiZVxuICpcbiAqIEBwYXJhbSBkaXNwbGF5T2JqZWN0IHtQSVhJLkNvbnRhaW5lcnxQSVhJLlNwcml0ZXxQSVhJLmV4dHJhcy5UaWxpbmdTcHJpdGV9IFRoZSBkaXNwbGF5IG9iamVjdCB0aGF0IHdhcyB0ZXN0ZWRcbiAqIEBwYXJhbSBoaXQge2Jvb2xlYW59IHRoZSByZXN1bHQgb2YgdGhlIGhpdCB0ZXN0IG9uIHRoZSBkaXNwbGF5IG9iamVjdFxuICogQHByaXZhdGVcbiAqL1xuSW50ZXJhY3Rpb25NYW5hZ2VyLnByb3RvdHlwZS5wcm9jZXNzTW91c2VVcCA9IGZ1bmN0aW9uICggZGlzcGxheU9iamVjdCwgaGl0IClcbntcbiAgICB2YXIgZSA9IHRoaXMubW91c2Uub3JpZ2luYWxFdmVudDtcblxuICAgIHZhciBpc1JpZ2h0QnV0dG9uID0gZS5idXR0b24gPT09IDIgfHwgZS53aGljaCA9PT0gMztcbiAgICB2YXIgaXNEb3duID0gIGlzUmlnaHRCdXR0b24gPyAnX2lzUmlnaHREb3duJyA6ICdfaXNMZWZ0RG93bic7XG5cbiAgICBpZihoaXQpXG4gICAge1xuICAgICAgICB0aGlzLmRpc3BhdGNoRXZlbnQoIGRpc3BsYXlPYmplY3QsIGlzUmlnaHRCdXR0b24gPyAncmlnaHR1cCcgOiAnbW91c2V1cCcsIHRoaXMuZXZlbnREYXRhICk7XG5cbiAgICAgICAgaWYoIGRpc3BsYXlPYmplY3RbIGlzRG93biBdIClcbiAgICAgICAge1xuICAgICAgICAgICAgZGlzcGxheU9iamVjdFsgaXNEb3duIF0gPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudCggZGlzcGxheU9iamVjdCwgaXNSaWdodEJ1dHRvbiA/ICdyaWdodGNsaWNrJyA6ICdjbGljaycsIHRoaXMuZXZlbnREYXRhICk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgaWYoIGRpc3BsYXlPYmplY3RbIGlzRG93biBdIClcbiAgICAgICAge1xuICAgICAgICAgICAgZGlzcGxheU9iamVjdFsgaXNEb3duIF0gPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudCggZGlzcGxheU9iamVjdCwgaXNSaWdodEJ1dHRvbiA/ICdyaWdodHVwb3V0c2lkZScgOiAnbW91c2V1cG91dHNpZGUnLCB0aGlzLmV2ZW50RGF0YSApO1xuICAgICAgICB9XG4gICAgfVxufTtcblxuXG4vKipcbiAqIElzIGNhbGxlZCB3aGVuIHRoZSBtb3VzZSBtb3ZlcyBhY3Jvc3MgdGhlIHJlbmRlcmVyIGVsZW1lbnRcbiAqXG4gKiBAcGFyYW0gZXZlbnQge0V2ZW50fSBUaGUgRE9NIGV2ZW50IG9mIHRoZSBtb3VzZSBtb3ZpbmdcbiAqIEBwcml2YXRlXG4gKi9cbkludGVyYWN0aW9uTWFuYWdlci5wcm90b3R5cGUub25Nb3VzZU1vdmUgPSBmdW5jdGlvbiAoZXZlbnQpXG57XG4gICAgdGhpcy5tb3VzZS5vcmlnaW5hbEV2ZW50ID0gZXZlbnQ7XG4gICAgdGhpcy5ldmVudERhdGEuZGF0YSA9IHRoaXMubW91c2U7XG4gICAgdGhpcy5ldmVudERhdGEuc3RvcHBlZCA9IGZhbHNlO1xuXG4gICAgdGhpcy5tYXBQb3NpdGlvblRvUG9pbnQoIHRoaXMubW91c2UuZ2xvYmFsLCBldmVudC5jbGllbnRYLCBldmVudC5jbGllbnRZKTtcblxuICAgIHRoaXMuZGlkTW92ZSA9IHRydWU7XG5cbiAgICB0aGlzLmN1cnNvciA9ICdpbmhlcml0JztcblxuICAgIHRoaXMucHJvY2Vzc0ludGVyYWN0aXZlKHRoaXMubW91c2UuZ2xvYmFsLCB0aGlzLnJlbmRlcmVyLl9sYXN0T2JqZWN0UmVuZGVyZWQsIHRoaXMucHJvY2Vzc01vdXNlTW92ZSwgdHJ1ZSApO1xuXG4gICAgaWYgKHRoaXMuY3VycmVudEN1cnNvclN0eWxlICE9PSB0aGlzLmN1cnNvcilcbiAgICB7XG4gICAgICAgIHRoaXMuY3VycmVudEN1cnNvclN0eWxlID0gdGhpcy5jdXJzb3I7XG4gICAgICAgIHRoaXMuaW50ZXJhY3Rpb25ET01FbGVtZW50LnN0eWxlLmN1cnNvciA9IHRoaXMuY3Vyc29yO1xuICAgIH1cblxuICAgIC8vVE9ETyBCVUcgZm9yIHBhcmVudHMgaW5lcmFjdGl2ZSBvYmplY3QgKGJvcmRlciBvcmRlciBpc3N1ZSlcbn07XG5cbi8qKlxuICogUHJvY2Vzc2VzIHRoZSByZXN1bHQgb2YgdGhlIG1vdXNlIG1vdmUgY2hlY2sgYW5kIGRpc3BhdGNoZXMgdGhlIGV2ZW50IGlmIG5lZWQgYmVcbiAqXG4gKiBAcGFyYW0gZGlzcGxheU9iamVjdCB7UElYSS5Db250YWluZXJ8UElYSS5TcHJpdGV8UElYSS5leHRyYXMuVGlsaW5nU3ByaXRlfSBUaGUgZGlzcGxheSBvYmplY3QgdGhhdCB3YXMgdGVzdGVkXG4gKiBAcGFyYW0gaGl0IHtib29sZWFufSB0aGUgcmVzdWx0IG9mIHRoZSBoaXQgdGVzdCBvbiB0aGUgZGlzcGxheSBvYmplY3RcbiAqIEBwcml2YXRlXG4gKi9cbkludGVyYWN0aW9uTWFuYWdlci5wcm90b3R5cGUucHJvY2Vzc01vdXNlTW92ZSA9IGZ1bmN0aW9uICggZGlzcGxheU9iamVjdCwgaGl0IClcbntcbiAgICB0aGlzLmRpc3BhdGNoRXZlbnQoIGRpc3BsYXlPYmplY3QsICdtb3VzZW1vdmUnLCB0aGlzLmV2ZW50RGF0YSk7XG4gICAgdGhpcy5wcm9jZXNzTW91c2VPdmVyT3V0KGRpc3BsYXlPYmplY3QsIGhpdCk7XG59O1xuXG5cbi8qKlxuICogSXMgY2FsbGVkIHdoZW4gdGhlIG1vdXNlIGlzIG1vdmVkIG91dCBvZiB0aGUgcmVuZGVyZXIgZWxlbWVudFxuICpcbiAqIEBwYXJhbSBldmVudCB7RXZlbnR9IFRoZSBET00gZXZlbnQgb2YgYSBtb3VzZSBiZWluZyBtb3ZlZCBvdXRcbiAqIEBwcml2YXRlXG4gKi9cbkludGVyYWN0aW9uTWFuYWdlci5wcm90b3R5cGUub25Nb3VzZU91dCA9IGZ1bmN0aW9uIChldmVudClcbntcbiAgICB0aGlzLm1vdXNlLm9yaWdpbmFsRXZlbnQgPSBldmVudDtcbiAgICB0aGlzLmV2ZW50RGF0YS5zdG9wcGVkID0gZmFsc2U7XG5cbiAgICAvLyBVcGRhdGUgaW50ZXJuYWwgbW91c2UgcmVmZXJlbmNlXG4gICAgdGhpcy5tYXBQb3NpdGlvblRvUG9pbnQoIHRoaXMubW91c2UuZ2xvYmFsLCBldmVudC5jbGllbnRYLCBldmVudC5jbGllbnRZKTtcblxuICAgIHRoaXMuaW50ZXJhY3Rpb25ET01FbGVtZW50LnN0eWxlLmN1cnNvciA9ICdpbmhlcml0JztcblxuICAgIC8vIFRPRE8gb3B0aW1pemUgYnkgbm90IGNoZWNrIEVWRVJZIFRJTUUhIG1heWJlIGhhbGYgYXMgb2Z0ZW4/IC8vXG4gICAgdGhpcy5tYXBQb3NpdGlvblRvUG9pbnQoIHRoaXMubW91c2UuZ2xvYmFsLCBldmVudC5jbGllbnRYLCBldmVudC5jbGllbnRZICk7XG5cbiAgICB0aGlzLnByb2Nlc3NJbnRlcmFjdGl2ZSggdGhpcy5tb3VzZS5nbG9iYWwsIHRoaXMucmVuZGVyZXIuX2xhc3RPYmplY3RSZW5kZXJlZCwgdGhpcy5wcm9jZXNzTW91c2VPdmVyT3V0LCBmYWxzZSApO1xufTtcblxuLyoqXG4gKiBQcm9jZXNzZXMgdGhlIHJlc3VsdCBvZiB0aGUgbW91c2Ugb3Zlci9vdXQgY2hlY2sgYW5kIGRpc3BhdGNoZXMgdGhlIGV2ZW50IGlmIG5lZWQgYmVcbiAqXG4gKiBAcGFyYW0gZGlzcGxheU9iamVjdCB7UElYSS5Db250YWluZXJ8UElYSS5TcHJpdGV8UElYSS5leHRyYXMuVGlsaW5nU3ByaXRlfSBUaGUgZGlzcGxheSBvYmplY3QgdGhhdCB3YXMgdGVzdGVkXG4gKiBAcGFyYW0gaGl0IHtib29sZWFufSB0aGUgcmVzdWx0IG9mIHRoZSBoaXQgdGVzdCBvbiB0aGUgZGlzcGxheSBvYmplY3RcbiAqIEBwcml2YXRlXG4gKi9cbkludGVyYWN0aW9uTWFuYWdlci5wcm90b3R5cGUucHJvY2Vzc01vdXNlT3Zlck91dCA9IGZ1bmN0aW9uICggZGlzcGxheU9iamVjdCwgaGl0IClcbntcbiAgICBpZihoaXQpXG4gICAge1xuICAgICAgICBpZighZGlzcGxheU9iamVjdC5fb3ZlcilcbiAgICAgICAge1xuICAgICAgICAgICAgZGlzcGxheU9iamVjdC5fb3ZlciA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLmRpc3BhdGNoRXZlbnQoIGRpc3BsYXlPYmplY3QsICdtb3VzZW92ZXInLCB0aGlzLmV2ZW50RGF0YSApO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGRpc3BsYXlPYmplY3QuYnV0dG9uTW9kZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5jdXJzb3IgPSBkaXNwbGF5T2JqZWN0LmRlZmF1bHRDdXJzb3I7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgaWYoZGlzcGxheU9iamVjdC5fb3ZlcilcbiAgICAgICAge1xuICAgICAgICAgICAgZGlzcGxheU9iamVjdC5fb3ZlciA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50KCBkaXNwbGF5T2JqZWN0LCAnbW91c2VvdXQnLCB0aGlzLmV2ZW50RGF0YSk7XG4gICAgICAgIH1cbiAgICB9XG59O1xuXG5cbi8qKlxuICogSXMgY2FsbGVkIHdoZW4gYSB0b3VjaCBpcyBzdGFydGVkIG9uIHRoZSByZW5kZXJlciBlbGVtZW50XG4gKlxuICogQHBhcmFtIGV2ZW50IHtFdmVudH0gVGhlIERPTSBldmVudCBvZiBhIHRvdWNoIHN0YXJ0aW5nIG9uIHRoZSByZW5kZXJlciB2aWV3XG4gKiBAcHJpdmF0ZVxuICovXG5JbnRlcmFjdGlvbk1hbmFnZXIucHJvdG90eXBlLm9uVG91Y2hTdGFydCA9IGZ1bmN0aW9uIChldmVudClcbntcbiAgICBpZiAodGhpcy5hdXRvUHJldmVudERlZmF1bHQpXG4gICAge1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIH1cblxuICAgIHZhciBjaGFuZ2VkVG91Y2hlcyA9IGV2ZW50LmNoYW5nZWRUb3VjaGVzO1xuICAgIHZhciBjTGVuZ3RoID0gY2hhbmdlZFRvdWNoZXMubGVuZ3RoO1xuXG4gICAgZm9yICh2YXIgaT0wOyBpIDwgY0xlbmd0aDsgaSsrKVxuICAgIHtcbiAgICAgICAgdmFyIHRvdWNoRXZlbnQgPSBjaGFuZ2VkVG91Y2hlc1tpXTtcbiAgICAgICAgLy9UT0RPIFBPT0xcbiAgICAgICAgdmFyIHRvdWNoRGF0YSA9IHRoaXMuZ2V0VG91Y2hEYXRhKCB0b3VjaEV2ZW50ICk7XG5cbiAgICAgICAgdG91Y2hEYXRhLm9yaWdpbmFsRXZlbnQgPSBldmVudDtcblxuICAgICAgICB0aGlzLmV2ZW50RGF0YS5kYXRhID0gdG91Y2hEYXRhO1xuICAgICAgICB0aGlzLmV2ZW50RGF0YS5zdG9wcGVkID0gZmFsc2U7XG5cbiAgICAgICAgdGhpcy5wcm9jZXNzSW50ZXJhY3RpdmUoIHRvdWNoRGF0YS5nbG9iYWwsIHRoaXMucmVuZGVyZXIuX2xhc3RPYmplY3RSZW5kZXJlZCwgdGhpcy5wcm9jZXNzVG91Y2hTdGFydCwgdHJ1ZSApO1xuXG4gICAgICAgIHRoaXMucmV0dXJuVG91Y2hEYXRhKCB0b3VjaERhdGEgKTtcbiAgICB9XG59O1xuXG4vKipcbiAqIFByb2Nlc3NlcyB0aGUgcmVzdWx0IG9mIGEgdG91Y2ggY2hlY2sgYW5kIGRpc3BhdGNoZXMgdGhlIGV2ZW50IGlmIG5lZWQgYmVcbiAqXG4gKiBAcGFyYW0gZGlzcGxheU9iamVjdCB7UElYSS5Db250YWluZXJ8UElYSS5TcHJpdGV8UElYSS5leHRyYXMuVGlsaW5nU3ByaXRlfSBUaGUgZGlzcGxheSBvYmplY3QgdGhhdCB3YXMgdGVzdGVkXG4gKiBAcGFyYW0gaGl0IHtib29sZWFufSB0aGUgcmVzdWx0IG9mIHRoZSBoaXQgdGVzdCBvbiB0aGUgZGlzcGxheSBvYmplY3RcbiAqIEBwcml2YXRlXG4gKi9cbkludGVyYWN0aW9uTWFuYWdlci5wcm90b3R5cGUucHJvY2Vzc1RvdWNoU3RhcnQgPSBmdW5jdGlvbiAoIGRpc3BsYXlPYmplY3QsIGhpdCApXG57XG4gICAgaWYoaGl0KVxuICAgIHtcbiAgICAgICAgZGlzcGxheU9iamVjdC5fdG91Y2hEb3duID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50KCBkaXNwbGF5T2JqZWN0LCAndG91Y2hzdGFydCcsIHRoaXMuZXZlbnREYXRhICk7XG4gICAgfVxufTtcblxuXG4vKipcbiAqIElzIGNhbGxlZCB3aGVuIGEgdG91Y2ggZW5kcyBvbiB0aGUgcmVuZGVyZXIgZWxlbWVudFxuICpcbiAqIEBwYXJhbSBldmVudCB7RXZlbnR9IFRoZSBET00gZXZlbnQgb2YgYSB0b3VjaCBlbmRpbmcgb24gdGhlIHJlbmRlcmVyIHZpZXdcbiAqL1xuSW50ZXJhY3Rpb25NYW5hZ2VyLnByb3RvdHlwZS5vblRvdWNoRW5kID0gZnVuY3Rpb24gKGV2ZW50KVxue1xuICAgIGlmICh0aGlzLmF1dG9QcmV2ZW50RGVmYXVsdClcbiAgICB7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgfVxuXG4gICAgdmFyIGNoYW5nZWRUb3VjaGVzID0gZXZlbnQuY2hhbmdlZFRvdWNoZXM7XG4gICAgdmFyIGNMZW5ndGggPSBjaGFuZ2VkVG91Y2hlcy5sZW5ndGg7XG5cbiAgICBmb3IgKHZhciBpPTA7IGkgPCBjTGVuZ3RoOyBpKyspXG4gICAge1xuICAgICAgICB2YXIgdG91Y2hFdmVudCA9IGNoYW5nZWRUb3VjaGVzW2ldO1xuXG4gICAgICAgIHZhciB0b3VjaERhdGEgPSB0aGlzLmdldFRvdWNoRGF0YSggdG91Y2hFdmVudCApO1xuXG4gICAgICAgIHRvdWNoRGF0YS5vcmlnaW5hbEV2ZW50ID0gZXZlbnQ7XG5cbiAgICAgICAgLy9UT0RPIHRoaXMgc2hvdWxkIGJlIHBhc3NlZCBhbG9uZy4uIG5vIHNldFxuICAgICAgICB0aGlzLmV2ZW50RGF0YS5kYXRhID0gdG91Y2hEYXRhO1xuICAgICAgICB0aGlzLmV2ZW50RGF0YS5zdG9wcGVkID0gZmFsc2U7XG5cblxuICAgICAgICB0aGlzLnByb2Nlc3NJbnRlcmFjdGl2ZSggdG91Y2hEYXRhLmdsb2JhbCwgdGhpcy5yZW5kZXJlci5fbGFzdE9iamVjdFJlbmRlcmVkLCB0aGlzLnByb2Nlc3NUb3VjaEVuZCwgdHJ1ZSApO1xuXG4gICAgICAgIHRoaXMucmV0dXJuVG91Y2hEYXRhKCB0b3VjaERhdGEgKTtcbiAgICB9XG59O1xuXG4vKipcbiAqIFByb2Nlc3NlcyB0aGUgcmVzdWx0IG9mIHRoZSBlbmQgb2YgYSB0b3VjaCBhbmQgZGlzcGF0Y2hlcyB0aGUgZXZlbnQgaWYgbmVlZCBiZVxuICpcbiAqIEBwYXJhbSBkaXNwbGF5T2JqZWN0IHtQSVhJLkNvbnRhaW5lcnxQSVhJLlNwcml0ZXxQSVhJLmV4dHJhcy5UaWxpbmdTcHJpdGV9IFRoZSBkaXNwbGF5IG9iamVjdCB0aGF0IHdhcyB0ZXN0ZWRcbiAqIEBwYXJhbSBoaXQge2Jvb2xlYW59IHRoZSByZXN1bHQgb2YgdGhlIGhpdCB0ZXN0IG9uIHRoZSBkaXNwbGF5IG9iamVjdFxuICogQHByaXZhdGVcbiAqL1xuSW50ZXJhY3Rpb25NYW5hZ2VyLnByb3RvdHlwZS5wcm9jZXNzVG91Y2hFbmQgPSBmdW5jdGlvbiAoIGRpc3BsYXlPYmplY3QsIGhpdCApXG57XG4gICAgaWYoaGl0KVxuICAgIHtcbiAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50KCBkaXNwbGF5T2JqZWN0LCAndG91Y2hlbmQnLCB0aGlzLmV2ZW50RGF0YSApO1xuXG4gICAgICAgIGlmKCBkaXNwbGF5T2JqZWN0Ll90b3VjaERvd24gKVxuICAgICAgICB7XG4gICAgICAgICAgICBkaXNwbGF5T2JqZWN0Ll90b3VjaERvd24gPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudCggZGlzcGxheU9iamVjdCwgJ3RhcCcsIHRoaXMuZXZlbnREYXRhICk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgaWYoIGRpc3BsYXlPYmplY3QuX3RvdWNoRG93biApXG4gICAgICAgIHtcbiAgICAgICAgICAgIGRpc3BsYXlPYmplY3QuX3RvdWNoRG93biA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50KCBkaXNwbGF5T2JqZWN0LCAndG91Y2hlbmRvdXRzaWRlJywgdGhpcy5ldmVudERhdGEgKTtcbiAgICAgICAgfVxuICAgIH1cbn07XG5cbi8qKlxuICogSXMgY2FsbGVkIHdoZW4gYSB0b3VjaCBpcyBtb3ZlZCBhY3Jvc3MgdGhlIHJlbmRlcmVyIGVsZW1lbnRcbiAqXG4gKiBAcGFyYW0gZXZlbnQge0V2ZW50fSBUaGUgRE9NIGV2ZW50IG9mIGEgdG91Y2ggbW92aW5nIGFjcm9zcyB0aGUgcmVuZGVyZXIgdmlld1xuICogQHByaXZhdGVcbiAqL1xuSW50ZXJhY3Rpb25NYW5hZ2VyLnByb3RvdHlwZS5vblRvdWNoTW92ZSA9IGZ1bmN0aW9uIChldmVudClcbntcbiAgICBpZiAodGhpcy5hdXRvUHJldmVudERlZmF1bHQpXG4gICAge1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIH1cblxuICAgIHZhciBjaGFuZ2VkVG91Y2hlcyA9IGV2ZW50LmNoYW5nZWRUb3VjaGVzO1xuICAgIHZhciBjTGVuZ3RoID0gY2hhbmdlZFRvdWNoZXMubGVuZ3RoO1xuXG4gICAgZm9yICh2YXIgaT0wOyBpIDwgY0xlbmd0aDsgaSsrKVxuICAgIHtcbiAgICAgICAgdmFyIHRvdWNoRXZlbnQgPSBjaGFuZ2VkVG91Y2hlc1tpXTtcblxuICAgICAgICB2YXIgdG91Y2hEYXRhID0gdGhpcy5nZXRUb3VjaERhdGEoIHRvdWNoRXZlbnQgKTtcblxuICAgICAgICB0b3VjaERhdGEub3JpZ2luYWxFdmVudCA9IGV2ZW50O1xuXG4gICAgICAgIHRoaXMuZXZlbnREYXRhLmRhdGEgPSB0b3VjaERhdGE7XG4gICAgICAgIHRoaXMuZXZlbnREYXRhLnN0b3BwZWQgPSBmYWxzZTtcblxuICAgICAgICB0aGlzLnByb2Nlc3NJbnRlcmFjdGl2ZSggdG91Y2hEYXRhLmdsb2JhbCwgdGhpcy5yZW5kZXJlci5fbGFzdE9iamVjdFJlbmRlcmVkLCB0aGlzLnByb2Nlc3NUb3VjaE1vdmUsIHRydWUgKTtcblxuICAgICAgICB0aGlzLnJldHVyblRvdWNoRGF0YSggdG91Y2hEYXRhICk7XG4gICAgfVxufTtcblxuLyoqXG4gKiBQcm9jZXNzZXMgdGhlIHJlc3VsdCBvZiBhIHRvdWNoIG1vdmUgY2hlY2sgYW5kIGRpc3BhdGNoZXMgdGhlIGV2ZW50IGlmIG5lZWQgYmVcbiAqXG4gKiBAcGFyYW0gZGlzcGxheU9iamVjdCB7UElYSS5Db250YWluZXJ8UElYSS5TcHJpdGV8UElYSS5leHRyYXMuVGlsaW5nU3ByaXRlfSBUaGUgZGlzcGxheSBvYmplY3QgdGhhdCB3YXMgdGVzdGVkXG4gKiBAcGFyYW0gaGl0IHtib29sZWFufSB0aGUgcmVzdWx0IG9mIHRoZSBoaXQgdGVzdCBvbiB0aGUgZGlzcGxheSBvYmplY3RcbiAqIEBwcml2YXRlXG4gKi9cbkludGVyYWN0aW9uTWFuYWdlci5wcm90b3R5cGUucHJvY2Vzc1RvdWNoTW92ZSA9IGZ1bmN0aW9uICggZGlzcGxheU9iamVjdCwgaGl0IClcbntcbiAgICBoaXQgPSBoaXQ7XG4gICAgdGhpcy5kaXNwYXRjaEV2ZW50KCBkaXNwbGF5T2JqZWN0LCAndG91Y2htb3ZlJywgdGhpcy5ldmVudERhdGEpO1xufTtcblxuLyoqXG4gKiBHcmFicyBhbiBpbnRlcmFjdGlvbiBkYXRhIG9iamVjdCBmcm9tIHRoZSBpbnRlcm5hbCBwb29sXG4gKlxuICogQHBhcmFtIHRvdWNoRXZlbnQge0V2ZW50RGF0YX0gVGhlIHRvdWNoIGV2ZW50IHdlIG5lZWQgdG8gcGFpciB3aXRoIGFuIGludGVyYWN0aW9uRGF0YSBvYmplY3RcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5JbnRlcmFjdGlvbk1hbmFnZXIucHJvdG90eXBlLmdldFRvdWNoRGF0YSA9IGZ1bmN0aW9uICh0b3VjaEV2ZW50KVxue1xuICAgIHZhciB0b3VjaERhdGEgPSB0aGlzLmludGVyYWN0aXZlRGF0YVBvb2wucG9wKCk7XG5cbiAgICBpZighdG91Y2hEYXRhKVxuICAgIHtcbiAgICAgICAgdG91Y2hEYXRhID0gbmV3IEludGVyYWN0aW9uRGF0YSgpO1xuICAgIH1cblxuICAgIHRvdWNoRGF0YS5pZGVudGlmaWVyID0gdG91Y2hFdmVudC5pZGVudGlmaWVyO1xuICAgIHRoaXMubWFwUG9zaXRpb25Ub1BvaW50KCB0b3VjaERhdGEuZ2xvYmFsLCB0b3VjaEV2ZW50LmNsaWVudFgsIHRvdWNoRXZlbnQuY2xpZW50WSApO1xuXG4gICAgaWYobmF2aWdhdG9yLmlzQ29jb29uSlMpXG4gICAge1xuICAgICAgICB0b3VjaERhdGEuZ2xvYmFsLnggPSB0b3VjaERhdGEuZ2xvYmFsLnggLyB0aGlzLnJlc29sdXRpb247XG4gICAgICAgIHRvdWNoRGF0YS5nbG9iYWwueSA9IHRvdWNoRGF0YS5nbG9iYWwueSAvIHRoaXMucmVzb2x1dGlvbjtcbiAgICB9XG5cbiAgICB0b3VjaEV2ZW50Lmdsb2JhbFggPSB0b3VjaERhdGEuZ2xvYmFsLng7XG4gICAgdG91Y2hFdmVudC5nbG9iYWxZID0gdG91Y2hEYXRhLmdsb2JhbC55O1xuXG4gICAgcmV0dXJuIHRvdWNoRGF0YTtcbn07XG5cbi8qKlxuICogUmV0dXJucyBhbiBpbnRlcmFjdGlvbiBkYXRhIG9iamVjdCB0byB0aGUgaW50ZXJuYWwgcG9vbFxuICpcbiAqIEBwYXJhbSB0b3VjaERhdGEge1BJWEkuaW50ZXJhY3Rpb24uSW50ZXJhY3Rpb25EYXRhfSBUaGUgdG91Y2ggZGF0YSBvYmplY3Qgd2Ugd2FudCB0byByZXR1cm4gdG8gdGhlIHBvb2xcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5JbnRlcmFjdGlvbk1hbmFnZXIucHJvdG90eXBlLnJldHVyblRvdWNoRGF0YSA9IGZ1bmN0aW9uICggdG91Y2hEYXRhIClcbntcbiAgICB0aGlzLmludGVyYWN0aXZlRGF0YVBvb2wucHVzaCggdG91Y2hEYXRhICk7XG59O1xuXG4vKipcbiAqIERlc3Ryb3lzIHRoZSBpbnRlcmFjdGlvbiBtYW5hZ2VyXG4gKlxuICovXG5JbnRlcmFjdGlvbk1hbmFnZXIucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoKSB7XG4gICAgdGhpcy5yZW1vdmVFdmVudHMoKTtcblxuICAgIHRoaXMucmVuZGVyZXIgPSBudWxsO1xuXG4gICAgdGhpcy5tb3VzZSA9IG51bGw7XG5cbiAgICB0aGlzLmV2ZW50RGF0YSA9IG51bGw7XG5cbiAgICB0aGlzLmludGVyYWN0aXZlRGF0YVBvb2wgPSBudWxsO1xuXG4gICAgdGhpcy5pbnRlcmFjdGlvbkRPTUVsZW1lbnQgPSBudWxsO1xuXG4gICAgdGhpcy5vbk1vdXNlVXAgPSBudWxsO1xuICAgIHRoaXMucHJvY2Vzc01vdXNlVXAgPSBudWxsO1xuXG5cbiAgICB0aGlzLm9uTW91c2VEb3duID0gbnVsbDtcbiAgICB0aGlzLnByb2Nlc3NNb3VzZURvd24gPSBudWxsO1xuXG4gICAgdGhpcy5vbk1vdXNlTW92ZSA9IG51bGw7XG4gICAgdGhpcy5wcm9jZXNzTW91c2VNb3ZlID0gbnVsbDtcblxuICAgIHRoaXMub25Nb3VzZU91dCA9IG51bGw7XG4gICAgdGhpcy5wcm9jZXNzTW91c2VPdmVyT3V0ID0gbnVsbDtcblxuXG4gICAgdGhpcy5vblRvdWNoU3RhcnQgPSBudWxsO1xuICAgIHRoaXMucHJvY2Vzc1RvdWNoU3RhcnQgPSBudWxsO1xuXG4gICAgdGhpcy5vblRvdWNoRW5kID0gbnVsbDtcbiAgICB0aGlzLnByb2Nlc3NUb3VjaEVuZCA9IG51bGw7XG5cbiAgICB0aGlzLm9uVG91Y2hNb3ZlID0gbnVsbDtcbiAgICB0aGlzLnByb2Nlc3NUb3VjaE1vdmUgPSBudWxsO1xuXG4gICAgdGhpcy5fdGVtcFBvaW50ID0gbnVsbDtcbn07XG5cbmNvcmUuV2ViR0xSZW5kZXJlci5yZWdpc3RlclBsdWdpbignaW50ZXJhY3Rpb24nLCBJbnRlcmFjdGlvbk1hbmFnZXIpO1xuY29yZS5DYW52YXNSZW5kZXJlci5yZWdpc3RlclBsdWdpbignaW50ZXJhY3Rpb24nLCBJbnRlcmFjdGlvbk1hbmFnZXIpO1xuIiwiLyoqXG4gKiBAZmlsZSAgICAgICAgTWFpbiBleHBvcnQgb2YgdGhlIFBJWEkgaW50ZXJhY3Rpb25zIGxpYnJhcnlcbiAqIEBhdXRob3IgICAgICBNYXQgR3JvdmVzIDxtYXRAZ29vZGJveWRpZ2l0YWwuY29tPlxuICogQGNvcHlyaWdodCAgIDIwMTMtMjAxNSBHb29kQm95RGlnaXRhbFxuICogQGxpY2Vuc2UgICAgIHtAbGluayBodHRwczovL2dpdGh1Yi5jb20vcGl4aWpzL3BpeGkuanMvYmxvYi9tYXN0ZXIvTElDRU5TRXxNSVQgTGljZW5zZX1cbiAqL1xuXG4vKipcbiAqIEBuYW1lc3BhY2UgUElYSS5pbnRlcmFjdGlvblxuICovXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgICBJbnRlcmFjdGlvbkRhdGE6ICAgIHJlcXVpcmUoJy4vSW50ZXJhY3Rpb25EYXRhJyksXG4gICAgSW50ZXJhY3Rpb25NYW5hZ2VyOiByZXF1aXJlKCcuL0ludGVyYWN0aW9uTWFuYWdlcicpLFxuICAgIGludGVyYWN0aXZlVGFyZ2V0OiAgcmVxdWlyZSgnLi9pbnRlcmFjdGl2ZVRhcmdldCcpXG59O1xuIiwiLyoqXG4gKiBEZWZhdWx0IHByb3BlcnR5IHZhbHVlcyBvZiBpbnRlcmFjdGl2ZSBvYmplY3RzXG4gKiB1c2VkIGJ5IHtAbGluayBQSVhJLmludGVyYWN0aW9uLkludGVyYWN0aW9uTWFuYWdlcn0uXG4gKlxuICogQG1peGluXG4gKiBAbWVtYmVyb2YgUElYSS5pbnRlcmFjdGlvblxuICogQGV4YW1wbGVcbiAqICAgICAgZnVuY3Rpb24gTXlPYmplY3QoKSB7fVxuICpcbiAqICAgICAgT2JqZWN0LmFzc2lnbihcbiAqICAgICAgICAgIE15T2JqZWN0LnByb3RvdHlwZSxcbiAqICAgICAgICAgIFBJWEkuaW50ZXJhY3Rpb24uaW50ZXJhY3RpdmVUYXJnZXRcbiAqICAgICAgKTtcbiAqL1xudmFyIGludGVyYWN0aXZlVGFyZ2V0ID0ge1xuICAgIC8qKlxuICAgICAqIEB0b2RvIE5lZWRzIGRvY3MuXG4gICAgICovXG4gICAgaW50ZXJhY3RpdmU6IGZhbHNlLFxuICAgIC8qKlxuICAgICAqIEB0b2RvIE5lZWRzIGRvY3MuXG4gICAgICovXG4gICAgYnV0dG9uTW9kZTogZmFsc2UsXG4gICAgLyoqXG4gICAgICogQHRvZG8gTmVlZHMgZG9jcy5cbiAgICAgKi9cbiAgICBpbnRlcmFjdGl2ZUNoaWxkcmVuOiB0cnVlLFxuICAgIC8qKlxuICAgICAqIEB0b2RvIE5lZWRzIGRvY3MuXG4gICAgICovXG4gICAgZGVmYXVsdEN1cnNvcjogJ3BvaW50ZXInLFxuXG4gICAgLy8gc29tZSBpbnRlcm5hbCBjaGVja3MuLlxuXG4gICAgLyoqXG4gICAgICogQHRvZG8gTmVlZHMgZG9jcy5cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIF9vdmVyOiBmYWxzZSxcbiAgICAvKipcbiAgICAgKiBAdG9kbyBOZWVkcyBkb2NzLlxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgX3RvdWNoRG93bjogZmFsc2Vcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gaW50ZXJhY3RpdmVUYXJnZXQ7XG4iLCJ2YXIgUmVzb3VyY2UgPSByZXF1aXJlKCdyZXNvdXJjZS1sb2FkZXInKS5SZXNvdXJjZSxcbiAgICBjb3JlID0gcmVxdWlyZSgnLi4vY29yZScpLFxuICAgIGV4dHJhcyA9IHJlcXVpcmUoJy4uL2V4dHJhcycpLFxuICAgIHBhdGggPSByZXF1aXJlKCdwYXRoJyk7XG5cblxuZnVuY3Rpb24gcGFyc2UocmVzb3VyY2UsIHRleHR1cmUpIHtcbiAgICB2YXIgZGF0YSA9IHt9O1xuICAgIHZhciBpbmZvID0gcmVzb3VyY2UuZGF0YS5nZXRFbGVtZW50c0J5VGFnTmFtZSgnaW5mbycpWzBdO1xuICAgIHZhciBjb21tb24gPSByZXNvdXJjZS5kYXRhLmdldEVsZW1lbnRzQnlUYWdOYW1lKCdjb21tb24nKVswXTtcblxuICAgIGRhdGEuZm9udCA9IGluZm8uZ2V0QXR0cmlidXRlKCdmYWNlJyk7XG4gICAgZGF0YS5zaXplID0gcGFyc2VJbnQoaW5mby5nZXRBdHRyaWJ1dGUoJ3NpemUnKSwgMTApO1xuICAgIGRhdGEubGluZUhlaWdodCA9IHBhcnNlSW50KGNvbW1vbi5nZXRBdHRyaWJ1dGUoJ2xpbmVIZWlnaHQnKSwgMTApO1xuICAgIGRhdGEuY2hhcnMgPSB7fTtcblxuICAgIC8vcGFyc2UgbGV0dGVyc1xuICAgIHZhciBsZXR0ZXJzID0gcmVzb3VyY2UuZGF0YS5nZXRFbGVtZW50c0J5VGFnTmFtZSgnY2hhcicpO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZXR0ZXJzLmxlbmd0aDsgaSsrKVxuICAgIHtcbiAgICAgICAgdmFyIGNoYXJDb2RlID0gcGFyc2VJbnQobGV0dGVyc1tpXS5nZXRBdHRyaWJ1dGUoJ2lkJyksIDEwKTtcblxuICAgICAgICB2YXIgdGV4dHVyZVJlY3QgPSBuZXcgY29yZS5SZWN0YW5nbGUoXG4gICAgICAgICAgICBwYXJzZUludChsZXR0ZXJzW2ldLmdldEF0dHJpYnV0ZSgneCcpLCAxMCkgKyB0ZXh0dXJlLmZyYW1lLngsXG4gICAgICAgICAgICBwYXJzZUludChsZXR0ZXJzW2ldLmdldEF0dHJpYnV0ZSgneScpLCAxMCkgKyB0ZXh0dXJlLmZyYW1lLnksXG4gICAgICAgICAgICBwYXJzZUludChsZXR0ZXJzW2ldLmdldEF0dHJpYnV0ZSgnd2lkdGgnKSwgMTApLFxuICAgICAgICAgICAgcGFyc2VJbnQobGV0dGVyc1tpXS5nZXRBdHRyaWJ1dGUoJ2hlaWdodCcpLCAxMClcbiAgICAgICAgKTtcblxuICAgICAgICBkYXRhLmNoYXJzW2NoYXJDb2RlXSA9IHtcbiAgICAgICAgICAgIHhPZmZzZXQ6IHBhcnNlSW50KGxldHRlcnNbaV0uZ2V0QXR0cmlidXRlKCd4b2Zmc2V0JyksIDEwKSxcbiAgICAgICAgICAgIHlPZmZzZXQ6IHBhcnNlSW50KGxldHRlcnNbaV0uZ2V0QXR0cmlidXRlKCd5b2Zmc2V0JyksIDEwKSxcbiAgICAgICAgICAgIHhBZHZhbmNlOiBwYXJzZUludChsZXR0ZXJzW2ldLmdldEF0dHJpYnV0ZSgneGFkdmFuY2UnKSwgMTApLFxuICAgICAgICAgICAga2VybmluZzoge30sXG4gICAgICAgICAgICB0ZXh0dXJlOiBuZXcgY29yZS5UZXh0dXJlKHRleHR1cmUuYmFzZVRleHR1cmUsIHRleHR1cmVSZWN0KVxuXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgLy9wYXJzZSBrZXJuaW5nc1xuICAgIHZhciBrZXJuaW5ncyA9IHJlc291cmNlLmRhdGEuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2tlcm5pbmcnKTtcbiAgICBmb3IgKGkgPSAwOyBpIDwga2VybmluZ3MubGVuZ3RoOyBpKyspXG4gICAge1xuICAgICAgICB2YXIgZmlyc3QgPSBwYXJzZUludChrZXJuaW5nc1tpXS5nZXRBdHRyaWJ1dGUoJ2ZpcnN0JyksIDEwKTtcbiAgICAgICAgdmFyIHNlY29uZCA9IHBhcnNlSW50KGtlcm5pbmdzW2ldLmdldEF0dHJpYnV0ZSgnc2Vjb25kJyksIDEwKTtcbiAgICAgICAgdmFyIGFtb3VudCA9IHBhcnNlSW50KGtlcm5pbmdzW2ldLmdldEF0dHJpYnV0ZSgnYW1vdW50JyksIDEwKTtcblxuICAgICAgICBkYXRhLmNoYXJzW3NlY29uZF0ua2VybmluZ1tmaXJzdF0gPSBhbW91bnQ7XG4gICAgfVxuXG4gICAgcmVzb3VyY2UuYml0bWFwRm9udCA9IGRhdGE7XG5cbiAgICAvLyBJJ20gbGVhdmluZyB0aGlzIGFzIGEgdGVtcG9yYXJ5IGZpeCBzbyB3ZSBjYW4gdGVzdCB0aGUgYml0bWFwIGZvbnRzIGluIHYzXG4gICAgLy8gYnV0IGl0J3MgdmVyeSBsaWtlbHkgdG8gY2hhbmdlXG4gICAgZXh0cmFzLkJpdG1hcFRleHQuZm9udHNbZGF0YS5mb250XSA9IGRhdGE7XG59XG5cblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoKVxue1xuICAgIHJldHVybiBmdW5jdGlvbiAocmVzb3VyY2UsIG5leHQpXG4gICAge1xuICAgICAgICAvLyBza2lwIGlmIG5vIGRhdGEgb3Igbm90IHhtbCBkYXRhXG4gICAgICAgIGlmICghcmVzb3VyY2UuZGF0YSB8fCAhcmVzb3VyY2UuaXNYbWwpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiBuZXh0KCk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBza2lwIGlmIG5vdCBiaXRtYXAgZm9udCBkYXRhLCB1c2luZyBzb21lIHNpbGx5IGR1Y2stdHlwaW5nXG4gICAgICAgIGlmIChcbiAgICAgICAgICAgIHJlc291cmNlLmRhdGEuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ3BhZ2UnKS5sZW5ndGggPT09IDAgfHxcbiAgICAgICAgICAgIHJlc291cmNlLmRhdGEuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2luZm8nKS5sZW5ndGggPT09IDAgfHxcbiAgICAgICAgICAgIHJlc291cmNlLmRhdGEuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2luZm8nKVswXS5nZXRBdHRyaWJ1dGUoJ2ZhY2UnKSA9PT0gbnVsbFxuICAgICAgICAgICAgKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gbmV4dCgpO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIHhtbFVybCA9IHBhdGguZGlybmFtZShyZXNvdXJjZS51cmwpO1xuXG4gICAgICAgIGlmICh4bWxVcmwgPT09ICcuJykge1xuICAgICAgICAgICAgeG1sVXJsID0gJyc7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5iYXNlVXJsICYmIHhtbFVybCkge1xuICAgICAgICAgICAgLy8gaWYgYmFzZXVybCBoYXMgYSB0cmFpbGluZyBzbGFzaCB0aGVuIGFkZCBvbmUgdG8geG1sVXJsIHNvIHRoZSByZXBsYWNlIHdvcmtzIGJlbG93XG4gICAgICAgICAgICBpZiAodGhpcy5iYXNlVXJsLmNoYXJBdCh0aGlzLmJhc2VVcmwubGVuZ3RoIC0gMSkgPT09ICcvJykge1xuICAgICAgICAgICAgICAgIHhtbFVybCArPSAnLyc7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIHJlbW92ZSBiYXNlVXJsIGZyb20geG1sVXJsXG4gICAgICAgICAgICB4bWxVcmwgPSB4bWxVcmwucmVwbGFjZSh0aGlzLmJhc2VVcmwsICcnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGlmIHRoZXJlIGlzIGFuIHhtbFVybCBub3csIGl0IG5lZWRzIGEgdHJhaWxpbmcgc2xhc2guIEVuc3VyZSB0aGF0IGl0IGRvZXMgaWYgdGhlIHN0cmluZyBpc24ndCBlbXB0eS5cbiAgICAgICAgaWYgKHhtbFVybCAmJiB4bWxVcmwuY2hhckF0KHhtbFVybC5sZW5ndGggLSAxKSAhPT0gJy8nKSB7XG4gICAgICAgICAgICB4bWxVcmwgKz0gJy8nO1xuICAgICAgICB9XG4gICAgICAgIHZhciB0ZXh0dXJlVXJsID0geG1sVXJsICsgcmVzb3VyY2UuZGF0YS5nZXRFbGVtZW50c0J5VGFnTmFtZSgncGFnZScpWzBdLmdldEF0dHJpYnV0ZSgnZmlsZScpO1xuICAgICAgICBpZiAoY29yZS51dGlscy5UZXh0dXJlQ2FjaGVbdGV4dHVyZVVybF0pIHtcbiAgICAgICAgICAgIC8vcmV1c2UgZXhpc3RpbmcgdGV4dHVyZVxuICAgICAgICAgICAgcGFyc2UocmVzb3VyY2UsIGNvcmUudXRpbHMuVGV4dHVyZUNhY2hlW3RleHR1cmVVcmxdKTtcbiAgICAgICAgICAgIG5leHQoKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHZhciBsb2FkT3B0aW9ucyA9IHtcbiAgICAgICAgICAgICAgICBjcm9zc09yaWdpbjogcmVzb3VyY2UuY3Jvc3NPcmlnaW4sXG4gICAgICAgICAgICAgICAgbG9hZFR5cGU6IFJlc291cmNlLkxPQURfVFlQRS5JTUFHRSxcbiAgICAgICAgICAgICAgICBtZXRhZGF0YTogcmVzb3VyY2UubWV0YWRhdGEuaW1hZ2VNZXRhZGF0YVxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIC8vIGxvYWQgdGhlIHRleHR1cmUgZm9yIHRoZSBmb250XG4gICAgICAgICAgICB0aGlzLmFkZChyZXNvdXJjZS5uYW1lICsgJ19pbWFnZScsIHRleHR1cmVVcmwsIGxvYWRPcHRpb25zLCBmdW5jdGlvbiAocmVzKSB7XG4gICAgICAgICAgICAgICAgcGFyc2UocmVzb3VyY2UsIHJlcy50ZXh0dXJlKTtcbiAgICAgICAgICAgICAgICBuZXh0KCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH07XG59O1xuIiwiLyoqXG4gKiBAZmlsZSAgICAgICAgTWFpbiBleHBvcnQgb2YgdGhlIFBJWEkgbG9hZGVycyBsaWJyYXJ5XG4gKiBAYXV0aG9yICAgICAgTWF0IEdyb3ZlcyA8bWF0QGdvb2Rib3lkaWdpdGFsLmNvbT5cbiAqIEBjb3B5cmlnaHQgICAyMDEzLTIwMTUgR29vZEJveURpZ2l0YWxcbiAqIEBsaWNlbnNlICAgICB7QGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL3BpeGlqcy9waXhpLmpzL2Jsb2IvbWFzdGVyL0xJQ0VOU0V8TUlUIExpY2Vuc2V9XG4gKi9cblxuLyoqXG4gKiBAbmFtZXNwYWNlIFBJWEkubG9hZGVyc1xuICovXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgICBMb2FkZXI6ICAgICAgICAgICAgIHJlcXVpcmUoJy4vbG9hZGVyJyksXG5cbiAgICAvLyBwYXJzZXJzXG4gICAgYml0bWFwRm9udFBhcnNlcjogICByZXF1aXJlKCcuL2JpdG1hcEZvbnRQYXJzZXInKSxcbiAgICBzcHJpdGVzaGVldFBhcnNlcjogIHJlcXVpcmUoJy4vc3ByaXRlc2hlZXRQYXJzZXInKSxcbiAgICB0ZXh0dXJlUGFyc2VyOiAgICAgIHJlcXVpcmUoJy4vdGV4dHVyZVBhcnNlcicpLFxuICAgIFJlc291cmNlOiAgICAgICAgICAgcmVxdWlyZSgncmVzb3VyY2UtbG9hZGVyJykuUmVzb3VyY2Vcbn07XG4iLCJ2YXIgUmVzb3VyY2VMb2FkZXIgPSByZXF1aXJlKCdyZXNvdXJjZS1sb2FkZXInKSxcbiAgICB0ZXh0dXJlUGFyc2VyID0gcmVxdWlyZSgnLi90ZXh0dXJlUGFyc2VyJyksXG4gICAgc3ByaXRlc2hlZXRQYXJzZXIgPSByZXF1aXJlKCcuL3Nwcml0ZXNoZWV0UGFyc2VyJyksXG4gICAgYml0bWFwRm9udFBhcnNlciA9IHJlcXVpcmUoJy4vYml0bWFwRm9udFBhcnNlcicpO1xuXG4vKipcbiAqXG4gKiBUaGUgbmV3IGxvYWRlciwgZXh0ZW5kcyBSZXNvdXJjZSBMb2FkZXIgYnkgQ2hhZCBFbmdsZXIgOiBodHRwczovL2dpdGh1Yi5jb20vZW5nbGVyY2ovcmVzb3VyY2UtbG9hZGVyXG4gKlxuICogYGBganNcbiAqIHZhciBsb2FkZXIgPSBQSVhJLmxvYWRlcjsgLy8gcGl4aSBleHBvc2VzIGEgcHJlbWFkZSBpbnN0YW5jZSBmb3IgeW91IHRvIHVzZS5cbiAqIC8vb3JcbiAqIHZhciBsb2FkZXIgPSBuZXcgUElYSS5sb2FkZXJzLkxvYWRlcigpOyAvLyB5b3UgY2FuIGFsc28gY3JlYXRlIHlvdXIgb3duIGlmIHlvdSB3YW50XG4gKlxuICogbG9hZGVyLmFkZCgnYnVubnknLFwiZGF0YS9idW5ueS5wbmdcIik7XG4gKlxuICogbG9hZGVyLm9uY2UoJ2NvbXBsZXRlJyxvbkFzc2V0c0xvYWRlZCk7XG4gKlxuICogbG9hZGVyLmxvYWQoKTtcbiAqIGBgYFxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5SZXNvdXJjZUxvYWRlclxuICogQG1lbWJlcm9mIFBJWEkubG9hZGVyc1xuICogQHBhcmFtIFtiYXNlVXJsPScnXSB7c3RyaW5nfSBUaGUgYmFzZSB1cmwgZm9yIGFsbCByZXNvdXJjZXMgbG9hZGVkIGJ5IHRoaXMgbG9hZGVyLlxuICogQHBhcmFtIFtjb25jdXJyZW5jeT0xMF0ge251bWJlcn0gVGhlIG51bWJlciBvZiByZXNvdXJjZXMgdG8gbG9hZCBjb25jdXJyZW50bHkuXG4gKi9cbmZ1bmN0aW9uIExvYWRlcihiYXNlVXJsLCBjb25jdXJyZW5jeSlcbntcbiAgICBSZXNvdXJjZUxvYWRlci5jYWxsKHRoaXMsIGJhc2VVcmwsIGNvbmN1cnJlbmN5KTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgTG9hZGVyLl9waXhpTWlkZGxld2FyZS5sZW5ndGg7ICsraSkge1xuICAgICAgICB0aGlzLnVzZShMb2FkZXIuX3BpeGlNaWRkbGV3YXJlW2ldKCkpO1xuICAgIH1cbn1cblxuTG9hZGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoUmVzb3VyY2VMb2FkZXIucHJvdG90eXBlKTtcbkxvYWRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBMb2FkZXI7XG5cbm1vZHVsZS5leHBvcnRzID0gTG9hZGVyO1xuXG5Mb2FkZXIuX3BpeGlNaWRkbGV3YXJlID0gW1xuICAgIC8vIHBhcnNlIGFueSBibG9iIGludG8gbW9yZSB1c2FibGUgb2JqZWN0cyAoZS5nLiBJbWFnZSlcbiAgICBSZXNvdXJjZUxvYWRlci5taWRkbGV3YXJlLnBhcnNpbmcuYmxvYixcbiAgICAvLyBwYXJzZSBhbnkgSW1hZ2Ugb2JqZWN0cyBpbnRvIHRleHR1cmVzXG4gICAgdGV4dHVyZVBhcnNlcixcbiAgICAvLyBwYXJzZSBhbnkgc3ByaXRlc2hlZXQgZGF0YSBpbnRvIG11bHRpcGxlIHRleHR1cmVzXG4gICAgc3ByaXRlc2hlZXRQYXJzZXIsXG4gICAgLy8gcGFyc2UgYW55IHNwcml0ZXNoZWV0IGRhdGEgaW50byBtdWx0aXBsZSB0ZXh0dXJlc1xuICAgIGJpdG1hcEZvbnRQYXJzZXJcbl07XG5cbkxvYWRlci5hZGRQaXhpTWlkZGxld2FyZSA9IGZ1bmN0aW9uIChmbikge1xuICAgIExvYWRlci5fcGl4aU1pZGRsZXdhcmUucHVzaChmbik7XG59O1xuXG4vLyBBZGQgY3VzdG9tIGV4dGVudGlvbnNcbnZhciBSZXNvdXJjZSA9IFJlc291cmNlTG9hZGVyLlJlc291cmNlO1xuXG5SZXNvdXJjZS5zZXRFeHRlbnNpb25YaHJUeXBlKCdmbnQnLCBSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRS5ET0NVTUVOVCk7XG4iLCJ2YXIgUmVzb3VyY2UgPSByZXF1aXJlKCdyZXNvdXJjZS1sb2FkZXInKS5SZXNvdXJjZSxcbiAgICBwYXRoID0gcmVxdWlyZSgncGF0aCcpLFxuICAgIGNvcmUgPSByZXF1aXJlKCcuLi9jb3JlJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKClcbntcbiAgICByZXR1cm4gZnVuY3Rpb24gKHJlc291cmNlLCBuZXh0KVxuICAgIHtcbiAgICAgICAgLy8gc2tpcCBpZiBubyBkYXRhLCBpdHMgbm90IGpzb24sIG9yIGl0IGlzbid0IHNwcml0ZXNoZWV0IGRhdGFcbiAgICAgICAgaWYgKCFyZXNvdXJjZS5kYXRhIHx8ICFyZXNvdXJjZS5pc0pzb24gfHwgIXJlc291cmNlLmRhdGEuZnJhbWVzKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gbmV4dCgpO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGxvYWRPcHRpb25zID0ge1xuICAgICAgICAgICAgY3Jvc3NPcmlnaW46IHJlc291cmNlLmNyb3NzT3JpZ2luLFxuICAgICAgICAgICAgbG9hZFR5cGU6IFJlc291cmNlLkxPQURfVFlQRS5JTUFHRSxcbiAgICAgICAgICAgIG1ldGFkYXRhOiByZXNvdXJjZS5tZXRhZGF0YS5pbWFnZU1ldGFkYXRhXG4gICAgICAgIH07XG5cbiAgICAgICAgdmFyIHJvdXRlID0gcGF0aC5kaXJuYW1lKHJlc291cmNlLnVybC5yZXBsYWNlKHRoaXMuYmFzZVVybCwgJycpKTtcblxuICAgICAgICB2YXIgcmVzb2x1dGlvbiA9IGNvcmUudXRpbHMuZ2V0UmVzb2x1dGlvbk9mVXJsKCByZXNvdXJjZS51cmwgKTtcblxuICAgICAgICAvLyBsb2FkIHRoZSBpbWFnZSBmb3IgdGhpcyBzaGVldFxuICAgICAgICB0aGlzLmFkZChyZXNvdXJjZS5uYW1lICsgJ19pbWFnZScsIHJvdXRlICsgJy8nICsgcmVzb3VyY2UuZGF0YS5tZXRhLmltYWdlLCBsb2FkT3B0aW9ucywgZnVuY3Rpb24gKHJlcylcbiAgICAgICAge1xuICAgICAgICAgICAgcmVzb3VyY2UudGV4dHVyZXMgPSB7fTtcblxuICAgICAgICAgICAgdmFyIGZyYW1lcyA9IHJlc291cmNlLmRhdGEuZnJhbWVzO1xuXG4gICAgICAgICAgICBmb3IgKHZhciBpIGluIGZyYW1lcylcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB2YXIgcmVjdCA9IGZyYW1lc1tpXS5mcmFtZTtcblxuICAgICAgICAgICAgICAgIGlmIChyZWN0KVxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHNpemUgPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICB2YXIgdHJpbSA9IG51bGw7XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKGZyYW1lc1tpXS5yb3RhdGVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzaXplID0gbmV3IGNvcmUuUmVjdGFuZ2xlKHJlY3QueCwgcmVjdC55LCByZWN0LmgsIHJlY3Qudyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzaXplID0gbmV3IGNvcmUuUmVjdGFuZ2xlKHJlY3QueCwgcmVjdC55LCByZWN0LncsIHJlY3QuaCk7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAvLyAgQ2hlY2sgdG8gc2VlIGlmIHRoZSBzcHJpdGUgaXMgdHJpbW1lZFxuICAgICAgICAgICAgICAgICAgICBpZiAoZnJhbWVzW2ldLnRyaW1tZWQpXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRyaW0gPSBuZXcgY29yZS5SZWN0YW5nbGUoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJhbWVzW2ldLnNwcml0ZVNvdXJjZVNpemUueCAvIHJlc29sdXRpb24sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJhbWVzW2ldLnNwcml0ZVNvdXJjZVNpemUueSAvIHJlc29sdXRpb24sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJhbWVzW2ldLnNvdXJjZVNpemUudyAvIHJlc29sdXRpb24sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJhbWVzW2ldLnNvdXJjZVNpemUuaCAvIHJlc29sdXRpb25cbiAgICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgLy8gZmxpcCB0aGUgd2lkdGggYW5kIGhlaWdodCFcbiAgICAgICAgICAgICAgICAgICAgaWYgKGZyYW1lc1tpXS5yb3RhdGVkKVxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgdGVtcCA9IHNpemUud2lkdGg7XG4gICAgICAgICAgICAgICAgICAgICAgICBzaXplLndpZHRoID0gc2l6ZS5oZWlnaHQ7XG4gICAgICAgICAgICAgICAgICAgICAgICBzaXplLmhlaWdodCA9IHRlbXA7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBzaXplLnggLz0gcmVzb2x1dGlvbjtcbiAgICAgICAgICAgICAgICAgICAgc2l6ZS55IC89IHJlc29sdXRpb247XG4gICAgICAgICAgICAgICAgICAgIHNpemUud2lkdGggLz0gcmVzb2x1dGlvbjtcbiAgICAgICAgICAgICAgICAgICAgc2l6ZS5oZWlnaHQgLz0gcmVzb2x1dGlvbjtcblxuICAgICAgICAgICAgICAgICAgICByZXNvdXJjZS50ZXh0dXJlc1tpXSA9IG5ldyBjb3JlLlRleHR1cmUocmVzLnRleHR1cmUuYmFzZVRleHR1cmUsIHNpemUsIHNpemUuY2xvbmUoKSwgdHJpbSwgZnJhbWVzW2ldLnJvdGF0ZWQpO1xuXG4gICAgICAgICAgICAgICAgICAgIC8vIGxldHMgYWxzbyBhZGQgdGhlIGZyYW1lIHRvIHBpeGkncyBnbG9iYWwgY2FjaGUgZm9yIGZyb21GcmFtZSBhbmQgZnJvbUltYWdlIGZ1bmN0aW9uc1xuICAgICAgICAgICAgICAgICAgICBjb3JlLnV0aWxzLlRleHR1cmVDYWNoZVtpXSA9IHJlc291cmNlLnRleHR1cmVzW2ldO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgbmV4dCgpO1xuICAgICAgICB9KTtcbiAgICB9O1xufTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vY29yZScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICgpXG57XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChyZXNvdXJjZSwgbmV4dClcbiAgICB7XG4gICAgICAgIC8vIGNyZWF0ZSBhIG5ldyB0ZXh0dXJlIGlmIHRoZSBkYXRhIGlzIGFuIEltYWdlIG9iamVjdFxuICAgICAgICBpZiAocmVzb3VyY2UuZGF0YSAmJiByZXNvdXJjZS5pc0ltYWdlKVxuICAgICAgICB7XG4gICAgICAgICAgICB2YXIgYmFzZVRleHR1cmUgPSBuZXcgY29yZS5CYXNlVGV4dHVyZShyZXNvdXJjZS5kYXRhLCBudWxsLCBjb3JlLnV0aWxzLmdldFJlc29sdXRpb25PZlVybChyZXNvdXJjZS51cmwpKTtcbiAgICAgICAgICAgIGJhc2VUZXh0dXJlLmltYWdlVXJsID0gcmVzb3VyY2UudXJsO1xuICAgICAgICAgICAgcmVzb3VyY2UudGV4dHVyZSA9IG5ldyBjb3JlLlRleHR1cmUoYmFzZVRleHR1cmUpO1xuICAgICAgICAgICAgLy8gbGV0cyBhbHNvIGFkZCB0aGUgZnJhbWUgdG8gcGl4aSdzIGdsb2JhbCBjYWNoZSBmb3IgZnJvbUZyYW1lIGFuZCBmcm9tSW1hZ2UgZnVjbnRpb25zXG4gICAgICAgICAgICBjb3JlLnV0aWxzLkJhc2VUZXh0dXJlQ2FjaGVbcmVzb3VyY2UudXJsXSA9IGJhc2VUZXh0dXJlO1xuICAgICAgICAgICAgY29yZS51dGlscy5UZXh0dXJlQ2FjaGVbcmVzb3VyY2UudXJsXSA9IHJlc291cmNlLnRleHR1cmU7XG4gICAgICAgIH1cblxuICAgICAgICBuZXh0KCk7XG4gICAgfTtcbn07XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uL2NvcmUnKSxcbiAgICB0ZW1wUG9pbnQgPSBuZXcgY29yZS5Qb2ludCgpLFxuICAgIHRlbXBQb2x5Z29uID0gbmV3IGNvcmUuUG9seWdvbigpO1xuXG4vKipcbiAqIEJhc2UgbWVzaCBjbGFzc1xuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLkNvbnRhaW5lclxuICogQG1lbWJlcm9mIFBJWEkubWVzaFxuICogQHBhcmFtIHRleHR1cmUge1BJWEkuVGV4dHVyZX0gVGhlIHRleHR1cmUgdG8gdXNlXG4gKiBAcGFyYW0gW3ZlcnRpY2VzXSB7RmxvYXQzMkFycmF5fSBpZiB5b3Ugd2FudCB0byBzcGVjaWZ5IHRoZSB2ZXJ0aWNlc1xuICogQHBhcmFtIFt1dnNdIHtGbG9hdDMyQXJyYXl9IGlmIHlvdSB3YW50IHRvIHNwZWNpZnkgdGhlIHV2c1xuICogQHBhcmFtIFtpbmRpY2VzXSB7VWludDE2QXJyYXl9IGlmIHlvdSB3YW50IHRvIHNwZWNpZnkgdGhlIGluZGljZXNcbiAqIEBwYXJhbSBbZHJhd01vZGVdIHtudW1iZXJ9IHRoZSBkcmF3TW9kZSwgY2FuIGJlIGFueSBvZiB0aGUgTWVzaC5EUkFXX01PREVTIGNvbnN0c1xuICovXG5mdW5jdGlvbiBNZXNoKHRleHR1cmUsIHZlcnRpY2VzLCB1dnMsIGluZGljZXMsIGRyYXdNb2RlKVxue1xuICAgIGNvcmUuQ29udGFpbmVyLmNhbGwodGhpcyk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgdGV4dHVyZSBvZiB0aGUgTWVzaFxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5UZXh0dXJlfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fdGV4dHVyZSA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgVXZzIG9mIHRoZSBNZXNoXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtGbG9hdDMyQXJyYXl9XG4gICAgICovXG4gICAgdGhpcy51dnMgPSB1dnMgfHwgbmV3IEZsb2F0MzJBcnJheShbMCwgMCxcbiAgICAgICAgMSwgMCxcbiAgICAgICAgMSwgMSxcbiAgICAgICAgMCwgMV0pO1xuXG4gICAgLyoqXG4gICAgICogQW4gYXJyYXkgb2YgdmVydGljZXNcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge0Zsb2F0MzJBcnJheX1cbiAgICAgKi9cbiAgICB0aGlzLnZlcnRpY2VzID0gdmVydGljZXMgfHwgbmV3IEZsb2F0MzJBcnJheShbMCwgMCxcbiAgICAgICAgMTAwLCAwLFxuICAgICAgICAxMDAsIDEwMCxcbiAgICAgICAgMCwgMTAwXSk7XG5cbiAgICAvKlxuICAgICAqIEBtZW1iZXIge1VpbnQxNkFycmF5fSBBbiBhcnJheSBjb250YWluaW5nIHRoZSBpbmRpY2VzIG9mIHRoZSB2ZXJ0aWNlc1xuICAgICAqL1xuICAgIC8vICBUT0RPIGF1dG8gZ2VuZXJhdGUgdGhpcyBiYXNlZCBvbiBkcmF3IG1vZGUhXG4gICAgdGhpcy5pbmRpY2VzID0gaW5kaWNlcyB8fCBuZXcgVWludDE2QXJyYXkoWzAsIDEsIDMsIDJdKTtcblxuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgdGhlIE1lc2ggaXMgZGlydHkgb3Igbm90XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqL1xuICAgIHRoaXMuZGlydHkgPSB0cnVlO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGJsZW5kIG1vZGUgdG8gYmUgYXBwbGllZCB0byB0aGUgc3ByaXRlLiBTZXQgdG8gYFBJWEkuQkxFTkRfTU9ERVMuTk9STUFMYCB0byByZW1vdmUgYW55IGJsZW5kIG1vZGUuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgUElYSS5CTEVORF9NT0RFUy5OT1JNQUxcbiAgICAgKiBAc2VlIFBJWEkuQkxFTkRfTU9ERVNcbiAgICAgKi9cbiAgICB0aGlzLmJsZW5kTW9kZSA9IGNvcmUuQkxFTkRfTU9ERVMuTk9STUFMO1xuXG4gICAgLyoqXG4gICAgICogVHJpYW5nbGVzIGluIGNhbnZhcyBtb2RlIGFyZSBhdXRvbWF0aWNhbGx5IGFudGlhbGlhc2VkLCB1c2UgdGhpcyB2YWx1ZSB0byBmb3JjZSB0cmlhbmdsZXMgdG8gb3ZlcmxhcCBhIGJpdCB3aXRoIGVhY2ggb3RoZXIuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy5jYW52YXNQYWRkaW5nID0gMDtcblxuICAgIC8qKlxuICAgICAqIFRoZSB3YXkgdGhlIE1lc2ggc2hvdWxkIGJlIGRyYXduLCBjYW4gYmUgYW55IG9mIHRoZSB7QGxpbmsgUElYSS5tZXNoLk1lc2guRFJBV19NT0RFU30gY29uc3RzXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQHNlZSBQSVhJLm1lc2guTWVzaC5EUkFXX01PREVTXG4gICAgICovXG4gICAgdGhpcy5kcmF3TW9kZSA9IGRyYXdNb2RlIHx8IE1lc2guRFJBV19NT0RFUy5UUklBTkdMRV9NRVNIO1xuXG4gICAgLy8gcnVuIHRleHR1cmUgc2V0dGVyO1xuICAgIHRoaXMudGV4dHVyZSA9IHRleHR1cmU7XG5cbiAgICAgLyoqXG4gICAgICogVGhlIGRlZmF1bHQgc2hhZGVyIHRoYXQgaXMgdXNlZCBpZiBhIG1lc2ggZG9lc24ndCBoYXZlIGEgbW9yZSBzcGVjaWZpYyBvbmUuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlNoYWRlcn1cbiAgICAgKi9cbiAgICB0aGlzLnNoYWRlciA9IG51bGw7XG59XG5cbi8vIGNvbnN0cnVjdG9yXG5NZXNoLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoY29yZS5Db250YWluZXIucHJvdG90eXBlKTtcbk1lc2gucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gTWVzaDtcbm1vZHVsZS5leHBvcnRzID0gTWVzaDtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoTWVzaC5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBUaGUgdGV4dHVyZSB0aGF0IHRoZSBzcHJpdGUgaXMgdXNpbmdcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuVGV4dHVyZX1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5tZXNoLk1lc2gjXG4gICAgICovXG4gICAgdGV4dHVyZToge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiAgdGhpcy5fdGV4dHVyZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGlmICh0aGlzLl90ZXh0dXJlID09PSB2YWx1ZSlcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuX3RleHR1cmUgPSB2YWx1ZTtcblxuICAgICAgICAgICAgaWYgKHZhbHVlKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIC8vIHdhaXQgZm9yIHRoZSB0ZXh0dXJlIHRvIGxvYWRcbiAgICAgICAgICAgICAgICBpZiAodmFsdWUuYmFzZVRleHR1cmUuaGFzTG9hZGVkKVxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fb25UZXh0dXJlVXBkYXRlKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlLm9uY2UoJ3VwZGF0ZScsIHRoaXMuX29uVGV4dHVyZVVwZGF0ZSwgdGhpcyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxufSk7XG5cbi8qKlxuICogUmVuZGVycyB0aGUgb2JqZWN0IHVzaW5nIHRoZSBXZWJHTCByZW5kZXJlclxuICpcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5XZWJHTFJlbmRlcmVyfSBhIHJlZmVyZW5jZSB0byB0aGUgV2ViR0wgcmVuZGVyZXJcbiAqIEBwcml2YXRlXG4gKi9cbk1lc2gucHJvdG90eXBlLl9yZW5kZXJXZWJHTCA9IGZ1bmN0aW9uIChyZW5kZXJlcilcbntcbiAgICByZW5kZXJlci5zZXRPYmplY3RSZW5kZXJlcihyZW5kZXJlci5wbHVnaW5zLm1lc2gpO1xuICAgIHJlbmRlcmVyLnBsdWdpbnMubWVzaC5yZW5kZXIodGhpcyk7XG59O1xuXG4vKipcbiAqIFJlbmRlcnMgdGhlIG9iamVjdCB1c2luZyB0aGUgQ2FudmFzIHJlbmRlcmVyXG4gKlxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLkNhbnZhc1JlbmRlcmVyfVxuICogQHByaXZhdGVcbiAqL1xuTWVzaC5wcm90b3R5cGUuX3JlbmRlckNhbnZhcyA9IGZ1bmN0aW9uIChyZW5kZXJlcilcbntcbiAgICB2YXIgY29udGV4dCA9IHJlbmRlcmVyLmNvbnRleHQ7XG5cbiAgICB2YXIgdHJhbnNmb3JtID0gdGhpcy53b3JsZFRyYW5zZm9ybTtcblxuICAgIGlmIChyZW5kZXJlci5yb3VuZFBpeGVscylcbiAgICB7XG4gICAgICAgIGNvbnRleHQuc2V0VHJhbnNmb3JtKHRyYW5zZm9ybS5hLCB0cmFuc2Zvcm0uYiwgdHJhbnNmb3JtLmMsIHRyYW5zZm9ybS5kLCB0cmFuc2Zvcm0udHggfCAwLCB0cmFuc2Zvcm0udHkgfCAwKTtcbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgY29udGV4dC5zZXRUcmFuc2Zvcm0odHJhbnNmb3JtLmEsIHRyYW5zZm9ybS5iLCB0cmFuc2Zvcm0uYywgdHJhbnNmb3JtLmQsIHRyYW5zZm9ybS50eCwgdHJhbnNmb3JtLnR5KTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5kcmF3TW9kZSA9PT0gTWVzaC5EUkFXX01PREVTLlRSSUFOR0xFX01FU0gpXG4gICAge1xuICAgICAgICB0aGlzLl9yZW5kZXJDYW52YXNUcmlhbmdsZU1lc2goY29udGV4dCk7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHRoaXMuX3JlbmRlckNhbnZhc1RyaWFuZ2xlcyhjb250ZXh0KTtcbiAgICB9XG59O1xuXG4vKipcbiAqIERyYXdzIHRoZSBvYmplY3QgaW4gVHJpYW5nbGUgTWVzaCBtb2RlIHVzaW5nIGNhbnZhc1xuICpcbiAqIEBwYXJhbSBjb250ZXh0IHtDYW52YXNSZW5kZXJpbmdDb250ZXh0MkR9IHRoZSBjdXJyZW50IGRyYXdpbmcgY29udGV4dFxuICogQHByaXZhdGVcbiAqL1xuTWVzaC5wcm90b3R5cGUuX3JlbmRlckNhbnZhc1RyaWFuZ2xlTWVzaCA9IGZ1bmN0aW9uIChjb250ZXh0KVxue1xuICAgIC8vIGRyYXcgdHJpYW5nbGVzISFcbiAgICB2YXIgdmVydGljZXMgPSB0aGlzLnZlcnRpY2VzO1xuICAgIHZhciB1dnMgPSB0aGlzLnV2cztcblxuICAgIHZhciBsZW5ndGggPSB2ZXJ0aWNlcy5sZW5ndGggLyAyO1xuICAgIC8vIHRoaXMuY291bnQrKztcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoIC0gMjsgaSsrKVxuICAgIHtcbiAgICAgICAgLy8gZHJhdyBzb21lIHRyaWFuZ2xlcyFcbiAgICAgICAgdmFyIGluZGV4ID0gaSAqIDI7XG4gICAgICAgIHRoaXMuX3JlbmRlckNhbnZhc0RyYXdUcmlhbmdsZShjb250ZXh0LCB2ZXJ0aWNlcywgdXZzLCBpbmRleCwgKGluZGV4ICsgMiksIChpbmRleCArIDQpKTtcbiAgICB9XG59O1xuXG4vKipcbiAqIERyYXdzIHRoZSBvYmplY3QgaW4gdHJpYW5nbGUgbW9kZSB1c2luZyBjYW52YXNcbiAqXG4gKiBAcGFyYW0gY29udGV4dCB7Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEfSB0aGUgY3VycmVudCBkcmF3aW5nIGNvbnRleHRcbiAqIEBwcml2YXRlXG4gKi9cbk1lc2gucHJvdG90eXBlLl9yZW5kZXJDYW52YXNUcmlhbmdsZXMgPSBmdW5jdGlvbiAoY29udGV4dClcbntcbiAgICAvLyBkcmF3IHRyaWFuZ2xlcyEhXG4gICAgdmFyIHZlcnRpY2VzID0gdGhpcy52ZXJ0aWNlcztcbiAgICB2YXIgdXZzID0gdGhpcy51dnM7XG4gICAgdmFyIGluZGljZXMgPSB0aGlzLmluZGljZXM7XG5cbiAgICB2YXIgbGVuZ3RoID0gaW5kaWNlcy5sZW5ndGg7XG4gICAgLy8gdGhpcy5jb3VudCsrO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7IGkgKz0gMylcbiAgICB7XG4gICAgICAgIC8vIGRyYXcgc29tZSB0cmlhbmdsZXMhXG4gICAgICAgIHZhciBpbmRleDAgPSBpbmRpY2VzW2ldICogMiwgaW5kZXgxID0gaW5kaWNlc1tpICsgMV0gKiAyLCBpbmRleDIgPSBpbmRpY2VzW2kgKyAyXSAqIDI7XG4gICAgICAgIHRoaXMuX3JlbmRlckNhbnZhc0RyYXdUcmlhbmdsZShjb250ZXh0LCB2ZXJ0aWNlcywgdXZzLCBpbmRleDAsIGluZGV4MSwgaW5kZXgyKTtcbiAgICB9XG59O1xuXG4vKipcbiAqIERyYXdzIG9uZSBvZiB0aGUgdHJpYW5nbGVzIHRoYXQgZm9ybSB0aGlzIE1lc2hcbiAqXG4gKiBAcGFyYW0gY29udGV4dCB7Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEfSB0aGUgY3VycmVudCBkcmF3aW5nIGNvbnRleHRcbiAqIEBwYXJhbSB2ZXJ0aWNlcyB7RmxvYXQzMkFycmF5fSBhIHJlZmVyZW5jZSB0byB0aGUgdmVydGljZXMgb2YgdGhlIE1lc2hcbiAqIEBwYXJhbSB1dnMge0Zsb2F0MzJBcnJheX0gYSByZWZlcmVuY2UgdG8gdGhlIHV2cyBvZiB0aGUgTWVzaFxuICogQHBhcmFtIGluZGV4MCB7bnVtYmVyfSB0aGUgaW5kZXggb2YgdGhlIGZpcnN0IHZlcnRleFxuICogQHBhcmFtIGluZGV4MSB7bnVtYmVyfSB0aGUgaW5kZXggb2YgdGhlIHNlY29uZCB2ZXJ0ZXhcbiAqIEBwYXJhbSBpbmRleDIge251bWJlcn0gdGhlIGluZGV4IG9mIHRoZSB0aGlyZCB2ZXJ0ZXhcbiAqIEBwcml2YXRlXG4gKi9cbk1lc2gucHJvdG90eXBlLl9yZW5kZXJDYW52YXNEcmF3VHJpYW5nbGUgPSBmdW5jdGlvbiAoY29udGV4dCwgdmVydGljZXMsIHV2cywgaW5kZXgwLCBpbmRleDEsIGluZGV4MilcbntcbiAgICB2YXIgdGV4dHVyZVNvdXJjZSA9IHRoaXMuX3RleHR1cmUuYmFzZVRleHR1cmUuc291cmNlO1xuICAgIHZhciB0ZXh0dXJlV2lkdGggPSB0aGlzLl90ZXh0dXJlLmJhc2VUZXh0dXJlLndpZHRoO1xuICAgIHZhciB0ZXh0dXJlSGVpZ2h0ID0gdGhpcy5fdGV4dHVyZS5iYXNlVGV4dHVyZS5oZWlnaHQ7XG5cbiAgICB2YXIgeDAgPSB2ZXJ0aWNlc1tpbmRleDBdLCB4MSA9IHZlcnRpY2VzW2luZGV4MV0sIHgyID0gdmVydGljZXNbaW5kZXgyXTtcbiAgICB2YXIgeTAgPSB2ZXJ0aWNlc1tpbmRleDAgKyAxXSwgeTEgPSB2ZXJ0aWNlc1tpbmRleDEgKyAxXSwgeTIgPSB2ZXJ0aWNlc1tpbmRleDIgKyAxXTtcblxuICAgIHZhciB1MCA9IHV2c1tpbmRleDBdICogdGV4dHVyZVdpZHRoLCB1MSA9IHV2c1tpbmRleDFdICogdGV4dHVyZVdpZHRoLCB1MiA9IHV2c1tpbmRleDJdICogdGV4dHVyZVdpZHRoO1xuICAgIHZhciB2MCA9IHV2c1tpbmRleDAgKyAxXSAqIHRleHR1cmVIZWlnaHQsIHYxID0gdXZzW2luZGV4MSArIDFdICogdGV4dHVyZUhlaWdodCwgdjIgPSB1dnNbaW5kZXgyICsgMV0gKiB0ZXh0dXJlSGVpZ2h0O1xuXG4gICAgaWYgKHRoaXMuY2FudmFzUGFkZGluZyA+IDApXG4gICAge1xuICAgICAgICB2YXIgcGFkZGluZ1ggPSB0aGlzLmNhbnZhc1BhZGRpbmcgLyB0aGlzLndvcmxkVHJhbnNmb3JtLmE7XG4gICAgICAgIHZhciBwYWRkaW5nWSA9IHRoaXMuY2FudmFzUGFkZGluZyAvIHRoaXMud29ybGRUcmFuc2Zvcm0uZDtcbiAgICAgICAgdmFyIGNlbnRlclggPSAoeDAgKyB4MSArIHgyKSAvIDM7XG4gICAgICAgIHZhciBjZW50ZXJZID0gKHkwICsgeTEgKyB5MikgLyAzO1xuXG4gICAgICAgIHZhciBub3JtWCA9IHgwIC0gY2VudGVyWDtcbiAgICAgICAgdmFyIG5vcm1ZID0geTAgLSBjZW50ZXJZO1xuXG4gICAgICAgIHZhciBkaXN0ID0gTWF0aC5zcXJ0KG5vcm1YICogbm9ybVggKyBub3JtWSAqIG5vcm1ZKTtcbiAgICAgICAgeDAgPSBjZW50ZXJYICsgKG5vcm1YIC8gZGlzdCkgKiAoZGlzdCArIHBhZGRpbmdYKTtcbiAgICAgICAgeTAgPSBjZW50ZXJZICsgKG5vcm1ZIC8gZGlzdCkgKiAoZGlzdCArIHBhZGRpbmdZKTtcblxuICAgICAgICAvL1xuXG4gICAgICAgIG5vcm1YID0geDEgLSBjZW50ZXJYO1xuICAgICAgICBub3JtWSA9IHkxIC0gY2VudGVyWTtcblxuICAgICAgICBkaXN0ID0gTWF0aC5zcXJ0KG5vcm1YICogbm9ybVggKyBub3JtWSAqIG5vcm1ZKTtcbiAgICAgICAgeDEgPSBjZW50ZXJYICsgKG5vcm1YIC8gZGlzdCkgKiAoZGlzdCArIHBhZGRpbmdYKTtcbiAgICAgICAgeTEgPSBjZW50ZXJZICsgKG5vcm1ZIC8gZGlzdCkgKiAoZGlzdCArIHBhZGRpbmdZKTtcblxuICAgICAgICBub3JtWCA9IHgyIC0gY2VudGVyWDtcbiAgICAgICAgbm9ybVkgPSB5MiAtIGNlbnRlclk7XG5cbiAgICAgICAgZGlzdCA9IE1hdGguc3FydChub3JtWCAqIG5vcm1YICsgbm9ybVkgKiBub3JtWSk7XG4gICAgICAgIHgyID0gY2VudGVyWCArIChub3JtWCAvIGRpc3QpICogKGRpc3QgKyBwYWRkaW5nWCk7XG4gICAgICAgIHkyID0gY2VudGVyWSArIChub3JtWSAvIGRpc3QpICogKGRpc3QgKyBwYWRkaW5nWSk7XG4gICAgfVxuXG4gICAgY29udGV4dC5zYXZlKCk7XG4gICAgY29udGV4dC5iZWdpblBhdGgoKTtcblxuXG4gICAgY29udGV4dC5tb3ZlVG8oeDAsIHkwKTtcbiAgICBjb250ZXh0LmxpbmVUbyh4MSwgeTEpO1xuICAgIGNvbnRleHQubGluZVRvKHgyLCB5Mik7XG5cbiAgICBjb250ZXh0LmNsb3NlUGF0aCgpO1xuXG4gICAgY29udGV4dC5jbGlwKCk7XG5cbiAgICAvLyBDb21wdXRlIG1hdHJpeCB0cmFuc2Zvcm1cbiAgICB2YXIgZGVsdGEgPSAgKHUwICogdjEpICAgICAgKyAodjAgKiB1MikgICAgICArICh1MSAqIHYyKSAgICAgIC0gKHYxICogdTIpICAgICAgLSAodjAgKiB1MSkgICAgICAtICh1MCAqIHYyKTtcbiAgICB2YXIgZGVsdGFBID0gKHgwICogdjEpICAgICAgKyAodjAgKiB4MikgICAgICArICh4MSAqIHYyKSAgICAgIC0gKHYxICogeDIpICAgICAgLSAodjAgKiB4MSkgICAgICAtICh4MCAqIHYyKTtcbiAgICB2YXIgZGVsdGFCID0gKHUwICogeDEpICAgICAgKyAoeDAgKiB1MikgICAgICArICh1MSAqIHgyKSAgICAgIC0gKHgxICogdTIpICAgICAgLSAoeDAgKiB1MSkgICAgICAtICh1MCAqIHgyKTtcbiAgICB2YXIgZGVsdGFDID0gKHUwICogdjEgKiB4MikgKyAodjAgKiB4MSAqIHUyKSArICh4MCAqIHUxICogdjIpIC0gKHgwICogdjEgKiB1MikgLSAodjAgKiB1MSAqIHgyKSAtICh1MCAqIHgxICogdjIpO1xuICAgIHZhciBkZWx0YUQgPSAoeTAgKiB2MSkgICAgICArICh2MCAqIHkyKSAgICAgICsgKHkxICogdjIpICAgICAgLSAodjEgKiB5MikgICAgICAtICh2MCAqIHkxKSAgICAgIC0gKHkwICogdjIpO1xuICAgIHZhciBkZWx0YUUgPSAodTAgKiB5MSkgICAgICArICh5MCAqIHUyKSAgICAgICsgKHUxICogeTIpICAgICAgLSAoeTEgKiB1MikgICAgICAtICh5MCAqIHUxKSAgICAgIC0gKHUwICogeTIpO1xuICAgIHZhciBkZWx0YUYgPSAodTAgKiB2MSAqIHkyKSArICh2MCAqIHkxICogdTIpICsgKHkwICogdTEgKiB2MikgLSAoeTAgKiB2MSAqIHUyKSAtICh2MCAqIHUxICogeTIpIC0gKHUwICogeTEgKiB2Mik7XG5cbiAgICBjb250ZXh0LnRyYW5zZm9ybShkZWx0YUEgLyBkZWx0YSwgZGVsdGFEIC8gZGVsdGEsXG4gICAgICAgIGRlbHRhQiAvIGRlbHRhLCBkZWx0YUUgLyBkZWx0YSxcbiAgICAgICAgZGVsdGFDIC8gZGVsdGEsIGRlbHRhRiAvIGRlbHRhKTtcblxuICAgIGNvbnRleHQuZHJhd0ltYWdlKHRleHR1cmVTb3VyY2UsIDAsIDApO1xuICAgIGNvbnRleHQucmVzdG9yZSgpO1xufTtcblxuXG5cbi8qKlxuICogUmVuZGVycyBhIGZsYXQgTWVzaFxuICpcbiAqIEBwYXJhbSBNZXNoIHtQSVhJLm1lc2guTWVzaH0gVGhlIE1lc2ggdG8gcmVuZGVyXG4gKiBAcHJpdmF0ZVxuICovXG5NZXNoLnByb3RvdHlwZS5yZW5kZXJNZXNoRmxhdCA9IGZ1bmN0aW9uIChNZXNoKVxue1xuICAgIHZhciBjb250ZXh0ID0gdGhpcy5jb250ZXh0O1xuICAgIHZhciB2ZXJ0aWNlcyA9IE1lc2gudmVydGljZXM7XG5cbiAgICB2YXIgbGVuZ3RoID0gdmVydGljZXMubGVuZ3RoLzI7XG4gICAgLy8gdGhpcy5jb3VudCsrO1xuXG4gICAgY29udGV4dC5iZWdpblBhdGgoKTtcbiAgICBmb3IgKHZhciBpPTE7IGkgPCBsZW5ndGgtMjsgaSsrKVxuICAgIHtcbiAgICAgICAgLy8gZHJhdyBzb21lIHRyaWFuZ2xlcyFcbiAgICAgICAgdmFyIGluZGV4ID0gaSoyO1xuXG4gICAgICAgIHZhciB4MCA9IHZlcnRpY2VzW2luZGV4XSwgICB4MSA9IHZlcnRpY2VzW2luZGV4KzJdLCB4MiA9IHZlcnRpY2VzW2luZGV4KzRdO1xuICAgICAgICB2YXIgeTAgPSB2ZXJ0aWNlc1tpbmRleCsxXSwgeTEgPSB2ZXJ0aWNlc1tpbmRleCszXSwgeTIgPSB2ZXJ0aWNlc1tpbmRleCs1XTtcblxuICAgICAgICBjb250ZXh0Lm1vdmVUbyh4MCwgeTApO1xuICAgICAgICBjb250ZXh0LmxpbmVUbyh4MSwgeTEpO1xuICAgICAgICBjb250ZXh0LmxpbmVUbyh4MiwgeTIpO1xuICAgIH1cblxuICAgIGNvbnRleHQuZmlsbFN0eWxlID0gJyNGRjAwMDAnO1xuICAgIGNvbnRleHQuZmlsbCgpO1xuICAgIGNvbnRleHQuY2xvc2VQYXRoKCk7XG59O1xuXG4vKipcbiAqIFdoZW4gdGhlIHRleHR1cmUgaXMgdXBkYXRlZCwgdGhpcyBldmVudCB3aWxsIGZpcmUgdG8gdXBkYXRlIHRoZSBzY2FsZSBhbmQgZnJhbWVcbiAqXG4gKiBAcGFyYW0gZXZlbnRcbiAqIEBwcml2YXRlXG4gKi9cbk1lc2gucHJvdG90eXBlLl9vblRleHR1cmVVcGRhdGUgPSBmdW5jdGlvbiAoKVxue1xuICAgIHRoaXMudXBkYXRlRnJhbWUgPSB0cnVlO1xufTtcblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBib3VuZHMgb2YgdGhlIG1lc2ggYXMgYSByZWN0YW5nbGUuIFRoZSBib3VuZHMgY2FsY3VsYXRpb24gdGFrZXMgdGhlIHdvcmxkVHJhbnNmb3JtIGludG8gYWNjb3VudC5cbiAqXG4gKiBAcGFyYW0gbWF0cml4IHtQSVhJLk1hdHJpeH0gdGhlIHRyYW5zZm9ybWF0aW9uIG1hdHJpeCBvZiB0aGUgc3ByaXRlXG4gKiBAcmV0dXJuIHtQSVhJLlJlY3RhbmdsZX0gdGhlIGZyYW1pbmcgcmVjdGFuZ2xlXG4gKi9cbk1lc2gucHJvdG90eXBlLmdldEJvdW5kcyA9IGZ1bmN0aW9uIChtYXRyaXgpXG57XG4gICAgaWYgKCF0aGlzLl9jdXJyZW50Qm91bmRzKSB7XG4gICAgICAgIHZhciB3b3JsZFRyYW5zZm9ybSA9IG1hdHJpeCB8fCB0aGlzLndvcmxkVHJhbnNmb3JtO1xuXG4gICAgICAgIHZhciBhID0gd29ybGRUcmFuc2Zvcm0uYTtcbiAgICAgICAgdmFyIGIgPSB3b3JsZFRyYW5zZm9ybS5iO1xuICAgICAgICB2YXIgYyA9IHdvcmxkVHJhbnNmb3JtLmM7XG4gICAgICAgIHZhciBkID0gd29ybGRUcmFuc2Zvcm0uZDtcbiAgICAgICAgdmFyIHR4ID0gd29ybGRUcmFuc2Zvcm0udHg7XG4gICAgICAgIHZhciB0eSA9IHdvcmxkVHJhbnNmb3JtLnR5O1xuXG4gICAgICAgIHZhciBtYXhYID0gLUluZmluaXR5O1xuICAgICAgICB2YXIgbWF4WSA9IC1JbmZpbml0eTtcblxuICAgICAgICB2YXIgbWluWCA9IEluZmluaXR5O1xuICAgICAgICB2YXIgbWluWSA9IEluZmluaXR5O1xuXG4gICAgICAgIHZhciB2ZXJ0aWNlcyA9IHRoaXMudmVydGljZXM7XG4gICAgICAgIGZvciAodmFyIGkgPSAwLCBuID0gdmVydGljZXMubGVuZ3RoOyBpIDwgbjsgaSArPSAyKSB7XG4gICAgICAgICAgICB2YXIgcmF3WCA9IHZlcnRpY2VzW2ldLCByYXdZID0gdmVydGljZXNbaSArIDFdO1xuICAgICAgICAgICAgdmFyIHggPSAoYSAqIHJhd1gpICsgKGMgKiByYXdZKSArIHR4O1xuICAgICAgICAgICAgdmFyIHkgPSAoZCAqIHJhd1kpICsgKGIgKiByYXdYKSArIHR5O1xuXG4gICAgICAgICAgICBtaW5YID0geCA8IG1pblggPyB4IDogbWluWDtcbiAgICAgICAgICAgIG1pblkgPSB5IDwgbWluWSA/IHkgOiBtaW5ZO1xuXG4gICAgICAgICAgICBtYXhYID0geCA+IG1heFggPyB4IDogbWF4WDtcbiAgICAgICAgICAgIG1heFkgPSB5ID4gbWF4WSA/IHkgOiBtYXhZO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG1pblggPT09IC1JbmZpbml0eSB8fCBtYXhZID09PSBJbmZpbml0eSkge1xuICAgICAgICAgICAgcmV0dXJuIGNvcmUuUmVjdGFuZ2xlLkVNUFRZO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGJvdW5kcyA9IHRoaXMuX2JvdW5kcztcblxuICAgICAgICBib3VuZHMueCA9IG1pblg7XG4gICAgICAgIGJvdW5kcy53aWR0aCA9IG1heFggLSBtaW5YO1xuXG4gICAgICAgIGJvdW5kcy55ID0gbWluWTtcbiAgICAgICAgYm91bmRzLmhlaWdodCA9IG1heFkgLSBtaW5ZO1xuXG4gICAgICAgIC8vIHN0b3JlIGEgcmVmZXJlbmNlIHNvIHRoYXQgaWYgdGhpcyBmdW5jdGlvbiBnZXRzIGNhbGxlZCBhZ2FpbiBpbiB0aGUgcmVuZGVyIGN5Y2xlIHdlIGRvIG5vdCBoYXZlIHRvIHJlY2FsY3VsYXRlXG4gICAgICAgIHRoaXMuX2N1cnJlbnRCb3VuZHMgPSBib3VuZHM7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuX2N1cnJlbnRCb3VuZHM7XG59O1xuXG4vKipcbiAqIFRlc3RzIGlmIGEgcG9pbnQgaXMgaW5zaWRlIHRoaXMgbWVzaC4gV29ya3Mgb25seSBmb3IgVFJJQU5HTEVfTUVTSFxuICpcbiAqIEBwYXJhbSBwb2ludCB7UElYSS5Qb2ludH0gdGhlIHBvaW50IHRvIHRlc3RcbiAqIEByZXR1cm4ge2Jvb2xlYW59IHRoZSByZXN1bHQgb2YgdGhlIHRlc3RcbiAqL1xuTWVzaC5wcm90b3R5cGUuY29udGFpbnNQb2ludCA9IGZ1bmN0aW9uKCBwb2ludCApIHtcbiAgICBpZiAoIXRoaXMuZ2V0Qm91bmRzKCkuY29udGFpbnMocG9pbnQueCwgcG9pbnQueSkpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICB0aGlzLndvcmxkVHJhbnNmb3JtLmFwcGx5SW52ZXJzZShwb2ludCwgIHRlbXBQb2ludCk7XG5cbiAgICB2YXIgdmVydGljZXMgPSB0aGlzLnZlcnRpY2VzO1xuICAgIHZhciBwb2ludHMgPSB0ZW1wUG9seWdvbi5wb2ludHM7XG4gICAgdmFyIGksIGxlbjtcblxuICAgIGlmICh0aGlzLmRyYXdNb2RlID09PSBNZXNoLkRSQVdfTU9ERVMuVFJJQU5HTEVTKSB7XG4gICAgICAgIHZhciBpbmRpY2VzID0gdGhpcy5pbmRpY2VzO1xuICAgICAgICBsZW4gPSB0aGlzLmluZGljZXMubGVuZ3RoO1xuICAgICAgICAvL1RPRE86IGlubGluZSB0aGlzLlxuICAgICAgICBmb3IgKGk9MDtpPGxlbjtpKz0zKSB7XG4gICAgICAgICAgICB2YXIgaW5kMCA9IGluZGljZXNbaV0qMiwgaW5kMSA9IGluZGljZXNbaSsxXSoyLCBpbmQyID0gaW5kaWNlc1tpKzJdKjI7XG4gICAgICAgICAgICBwb2ludHNbMF0gPSB2ZXJ0aWNlc1tpbmQwXTtcbiAgICAgICAgICAgIHBvaW50c1sxXSA9IHZlcnRpY2VzW2luZDArMV07XG4gICAgICAgICAgICBwb2ludHNbMl0gPSB2ZXJ0aWNlc1tpbmQxXTtcbiAgICAgICAgICAgIHBvaW50c1szXSA9IHZlcnRpY2VzW2luZDErMV07XG4gICAgICAgICAgICBwb2ludHNbNF0gPSB2ZXJ0aWNlc1tpbmQyXTtcbiAgICAgICAgICAgIHBvaW50c1s1XSA9IHZlcnRpY2VzW2luZDIrMV07XG4gICAgICAgICAgICBpZiAodGVtcFBvbHlnb24uY29udGFpbnModGVtcFBvaW50LngsIHRlbXBQb2ludC55KSkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgICAgbGVuID0gdmVydGljZXMubGVuZ3RoO1xuICAgICAgICBmb3IgKGk9MDtpPGxlbjtpKz02KSB7XG4gICAgICAgICAgICBwb2ludHNbMF0gPSB2ZXJ0aWNlc1tpXTtcbiAgICAgICAgICAgIHBvaW50c1sxXSA9IHZlcnRpY2VzW2krMV07XG4gICAgICAgICAgICBwb2ludHNbMl0gPSB2ZXJ0aWNlc1tpKzJdO1xuICAgICAgICAgICAgcG9pbnRzWzNdID0gdmVydGljZXNbaSszXTtcbiAgICAgICAgICAgIHBvaW50c1s0XSA9IHZlcnRpY2VzW2krNF07XG4gICAgICAgICAgICBwb2ludHNbNV0gPSB2ZXJ0aWNlc1tpKzVdO1xuICAgICAgICAgICAgaWYgKHRlbXBQb2x5Z29uLmNvbnRhaW5zKHRlbXBQb2ludC54LCB0ZW1wUG9pbnQueSkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG59O1xuXG4vKipcbiAqIERpZmZlcmVudCBkcmF3aW5nIGJ1ZmZlciBtb2RlcyBzdXBwb3J0ZWRcbiAqXG4gKiBAc3RhdGljXG4gKiBAY29uc3RhbnRcbiAqIEBwcm9wZXJ0eSB7b2JqZWN0fSBEUkFXX01PREVTXG4gKiBAcHJvcGVydHkge251bWJlcn0gRFJBV19NT0RFUy5UUklBTkdMRV9NRVNIXG4gKiBAcHJvcGVydHkge251bWJlcn0gRFJBV19NT0RFUy5UUklBTkdMRVNcbiAqL1xuTWVzaC5EUkFXX01PREVTID0ge1xuICAgIFRSSUFOR0xFX01FU0g6IDAsXG4gICAgVFJJQU5HTEVTOiAxXG59O1xuIiwidmFyIE1lc2ggPSByZXF1aXJlKCcuL01lc2gnKTtcblxuLyoqXG4gKiBUaGUgUGxhbmUgYWxsb3dzIHlvdSB0byBkcmF3IGEgdGV4dHVyZSBhY3Jvc3Mgc2V2ZXJhbCBwb2ludHMgYW5kIHRoZW0gbWFuaXB1bGF0ZSB0aGVzZSBwb2ludHNcbiAqXG4gKmBgYGpzXG4gKiBmb3IgKHZhciBpID0gMDsgaSA8IDIwOyBpKyspIHtcbiAqICAgICBwb2ludHMucHVzaChuZXcgUElYSS5Qb2ludChpICogNTAsIDApKTtcbiAqIH07XG4gKiB2YXIgUGxhbmUgPSBuZXcgUElYSS5QbGFuZShQSVhJLlRleHR1cmUuZnJvbUltYWdlKFwic25ha2UucG5nXCIpLCBwb2ludHMpO1xuICogIGBgYFxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5tZXNoLk1lc2hcbiAqIEBtZW1iZXJvZiBQSVhJLm1lc2hcbiAqIEBwYXJhbSB7UElYSS5UZXh0dXJlfSB0ZXh0dXJlIC0gVGhlIHRleHR1cmUgdG8gdXNlIG9uIHRoZSBQbGFuZS5cbiAqIEBwYXJhbSB7aW50fSBzZWdtZW50c1ggLSBUaGUgbnVtYmVyIG94IHggc2VnbWVudHNcbiAqIEBwYXJhbSB7aW50fSBzZWdtZW50c1kgLSBUaGUgbnVtYmVyIG9mIHkgc2VnbWVudHNcbiAqXG4gKi9cbmZ1bmN0aW9uIFBsYW5lKHRleHR1cmUsIHNlZ21lbnRzWCwgc2VnbWVudHNZKVxue1xuICAgIE1lc2guY2FsbCh0aGlzLCB0ZXh0dXJlKTtcblxuICAgIC8qKlxuICAgICAqIFRyYWNrZXIgZm9yIGlmIHRoZSBQbGFuZSBpcyByZWFkeSB0byBiZSBkcmF3bi4gTmVlZGVkIGJlY2F1c2UgTWVzaCBjdG9yIGNhblxuICAgICAqIGNhbGwgX29uVGV4dHVyZVVwZGF0ZWQgd2hpY2ggY291bGQgY2FsbCByZWZyZXNoIHRvbyBlYXJseS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9yZWFkeSA9IHRydWU7XG5cbiAgICB0aGlzLnNlZ21lbnRzWCA9ICBzZWdtZW50c1ggfHwgMTA7XG4gICAgdGhpcy5zZWdtZW50c1kgPSBzZWdtZW50c1kgfHwgMTA7XG5cbiAgICB0aGlzLmRyYXdNb2RlID0gTWVzaC5EUkFXX01PREVTLlRSSUFOR0xFUztcbiAgICB0aGlzLnJlZnJlc2goKTtcblxufVxuXG5cbi8vIGNvbnN0cnVjdG9yXG5QbGFuZS5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKCBNZXNoLnByb3RvdHlwZSApO1xuUGxhbmUucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gUGxhbmU7XG5tb2R1bGUuZXhwb3J0cyA9IFBsYW5lO1xuXG4vKipcbiAqIFJlZnJlc2hlc1xuICpcbiAqL1xuUGxhbmUucHJvdG90eXBlLnJlZnJlc2ggPSBmdW5jdGlvbigpXG57XG4gICAgdmFyIHRvdGFsID0gdGhpcy5zZWdtZW50c1ggKiB0aGlzLnNlZ21lbnRzWTtcbiAgICB2YXIgdmVydHMgPSBbXTtcbiAgICB2YXIgY29sb3JzID0gW107XG4gICAgdmFyIHV2cyA9IFtdO1xuICAgIHZhciBpbmRpY2VzID0gW107XG4gICAgdmFyIHRleHR1cmUgPSB0aGlzLnRleHR1cmU7XG5cbiAgLy8gIHRleHR1cmUud2lkdGggPSA4MDAgdGV4dHVyZS53aWR0aCB8fCA4MDA7XG4gLy8gICB0ZXh0dXJlLmhlaWdodCA9IDgwMC8vdGV4dHVyZS5oZWlnaHQgfHwgODAwO1xuXG4gICAgdmFyIHNlZ21lbnRzWFN1YiA9IHRoaXMuc2VnbWVudHNYIC0gMTtcbiAgICB2YXIgc2VnbWVudHNZU3ViID0gdGhpcy5zZWdtZW50c1kgLSAxO1xuICAgIHZhciBpID0gMDtcblxuICAgIHZhciBzaXplWCA9IHRleHR1cmUud2lkdGggLyBzZWdtZW50c1hTdWI7XG4gICAgdmFyIHNpemVZID0gdGV4dHVyZS5oZWlnaHQgLyBzZWdtZW50c1lTdWI7XG5cbiAgICBmb3IgKGkgPSAwOyBpIDwgdG90YWw7IGkrKykge1xuXG4gICAgICAgIHZhciB4ID0gKGkgJSB0aGlzLnNlZ21lbnRzWCk7XG4gICAgICAgIHZhciB5ID0gKCAoaSAvIHRoaXMuc2VnbWVudHNYICkgfCAwICk7XG5cblxuICAgICAgICB2ZXJ0cy5wdXNoKCh4ICogc2l6ZVgpLFxuICAgICAgICAgICAgICAgICAgICh5ICogc2l6ZVkpKTtcblxuICAgICAgICAvLyB0aGlzIHdvcmtzIGZvciByZWN0YW5ndWxhciB0ZXh0dXJlcy4gXG4gICAgICAgIHV2cy5wdXNoKHRleHR1cmUuX3V2cy54MCArICh0ZXh0dXJlLl91dnMueDEgLSB0ZXh0dXJlLl91dnMueDApICogKHggLyAodGhpcy5zZWdtZW50c1gtMSkpLCB0ZXh0dXJlLl91dnMueTAgKyAodGV4dHVyZS5fdXZzLnkzLXRleHR1cmUuX3V2cy55MCkgKiAoeS8gKHRoaXMuc2VnbWVudHNZLTEpKSk7XG4gICAgICB9XG5cbiAgICAvLyAgY29uc1xuXG4gICAgdmFyIHRvdGFsU3ViID0gc2VnbWVudHNYU3ViICogc2VnbWVudHNZU3ViO1xuXG4gICAgZm9yIChpID0gMDsgaSA8IHRvdGFsU3ViOyBpKyspIHtcblxuICAgICAgICB2YXIgeHBvcyA9IGkgJSBzZWdtZW50c1hTdWI7XG4gICAgICAgIHZhciB5cG9zID0gKGkgLyBzZWdtZW50c1hTdWIgKSB8IDA7XG5cblxuICAgICAgICB2YXIgIHZhbHVlID0gKHlwb3MgKiB0aGlzLnNlZ21lbnRzWCkgKyB4cG9zO1xuICAgICAgICB2YXIgIHZhbHVlMiA9ICh5cG9zICogdGhpcy5zZWdtZW50c1gpICsgeHBvcyArIDE7XG4gICAgICAgIHZhciAgdmFsdWUzID0gKCh5cG9zKzEpICogdGhpcy5zZWdtZW50c1gpICsgeHBvcztcbiAgICAgICAgdmFyICB2YWx1ZTQgPSAoKHlwb3MrMSkgKiB0aGlzLnNlZ21lbnRzWCkgKyB4cG9zICsgMTtcblxuICAgICAgICBpbmRpY2VzLnB1c2godmFsdWUsIHZhbHVlMiwgdmFsdWUzKTtcbiAgICAgICAgaW5kaWNlcy5wdXNoKHZhbHVlMiwgdmFsdWU0LCB2YWx1ZTMpO1xuICAgIH1cblxuXG4gICAgLy9jb25zb2xlLmxvZyhpbmRpY2VzKVxuICAgIHRoaXMudmVydGljZXMgPSBuZXcgRmxvYXQzMkFycmF5KHZlcnRzKTtcbiAgICB0aGlzLnV2cyA9IG5ldyBGbG9hdDMyQXJyYXkodXZzKTtcbiAgICB0aGlzLmNvbG9ycyA9IG5ldyBGbG9hdDMyQXJyYXkoY29sb3JzKTtcbiAgICB0aGlzLmluZGljZXMgPSBuZXcgVWludDE2QXJyYXkoaW5kaWNlcyk7XG59O1xuXG4vKipcbiAqIENsZWFyIHRleHR1cmUgVVZzIHdoZW4gbmV3IHRleHR1cmUgaXMgc2V0XG4gKlxuICogQHByaXZhdGVcbiAqL1xuUGxhbmUucHJvdG90eXBlLl9vblRleHR1cmVVcGRhdGUgPSBmdW5jdGlvbiAoKVxue1xuICAgIE1lc2gucHJvdG90eXBlLl9vblRleHR1cmVVcGRhdGUuY2FsbCh0aGlzKTtcblxuICAgIC8vIHdhaXQgZm9yIHRoZSBQbGFuZSBjdG9yIHRvIGZpbmlzaCBiZWZvcmUgY2FsbGluZyByZWZyZXNoXG4gICAgaWYgKHRoaXMuX3JlYWR5KSB7XG4gICAgICAgIHRoaXMucmVmcmVzaCgpO1xuICAgIH1cbn07XG4iLCJ2YXIgTWVzaCA9IHJlcXVpcmUoJy4vTWVzaCcpO1xudmFyIGNvcmUgPSByZXF1aXJlKCcuLi9jb3JlJyk7XG5cbi8qKlxuICogVGhlIHJvcGUgYWxsb3dzIHlvdSB0byBkcmF3IGEgdGV4dHVyZSBhY3Jvc3Mgc2V2ZXJhbCBwb2ludHMgYW5kIHRoZW0gbWFuaXB1bGF0ZSB0aGVzZSBwb2ludHNcbiAqXG4gKmBgYGpzXG4gKiBmb3IgKHZhciBpID0gMDsgaSA8IDIwOyBpKyspIHtcbiAqICAgICBwb2ludHMucHVzaChuZXcgUElYSS5Qb2ludChpICogNTAsIDApKTtcbiAqIH07XG4gKiB2YXIgcm9wZSA9IG5ldyBQSVhJLlJvcGUoUElYSS5UZXh0dXJlLmZyb21JbWFnZShcInNuYWtlLnBuZ1wiKSwgcG9pbnRzKTtcbiAqICBgYGBcbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkubWVzaC5NZXNoXG4gKiBAbWVtYmVyb2YgUElYSS5tZXNoXG4gKiBAcGFyYW0ge1BJWEkuVGV4dHVyZX0gdGV4dHVyZSAtIFRoZSB0ZXh0dXJlIHRvIHVzZSBvbiB0aGUgcm9wZS5cbiAqIEBwYXJhbSB7UElYSS5Qb2ludFtdfSBwb2ludHMgLSBBbiBhcnJheSBvZiB7QGxpbmsgUElYSS5Qb2ludH0gb2JqZWN0cyB0byBjb25zdHJ1Y3QgdGhpcyByb3BlLlxuICpcbiAqL1xuZnVuY3Rpb24gUm9wZSh0ZXh0dXJlLCBwb2ludHMpXG57XG4gICAgTWVzaC5jYWxsKHRoaXMsIHRleHR1cmUpO1xuXG4gICAgLypcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlBvaW50W119IEFuIGFycmF5IG9mIHBvaW50cyB0aGF0IGRldGVybWluZSB0aGUgcm9wZVxuICAgICAqL1xuICAgIHRoaXMucG9pbnRzID0gcG9pbnRzO1xuXG4gICAgLypcbiAgICAgKiBAbWVtYmVyIHtGbG9hdDMyQXJyYXl9IEFuIGFycmF5IG9mIHZlcnRpY2VzIHVzZWQgdG8gY29uc3RydWN0IHRoaXMgcm9wZS5cbiAgICAgKi9cbiAgICB0aGlzLnZlcnRpY2VzID0gbmV3IEZsb2F0MzJBcnJheShwb2ludHMubGVuZ3RoICogNCk7XG5cbiAgICAvKlxuICAgICAqIEBtZW1iZXIge0Zsb2F0MzJBcnJheX0gVGhlIFdlYkdMIFV2cyBvZiB0aGUgcm9wZS5cbiAgICAgKi9cbiAgICB0aGlzLnV2cyA9IG5ldyBGbG9hdDMyQXJyYXkocG9pbnRzLmxlbmd0aCAqIDQpO1xuXG4gICAgLypcbiAgICAgKiBAbWVtYmVyIHtGbG9hdDMyQXJyYXl9IEFuIGFycmF5IGNvbnRhaW5pbmcgdGhlIGNvbG9yIGNvbXBvbmVudHNcbiAgICAgKi9cbiAgICB0aGlzLmNvbG9ycyA9IG5ldyBGbG9hdDMyQXJyYXkocG9pbnRzLmxlbmd0aCAqIDIpO1xuXG4gICAgLypcbiAgICAgKiBAbWVtYmVyIHtVaW50MTZBcnJheX0gQW4gYXJyYXkgY29udGFpbmluZyB0aGUgaW5kaWNlcyBvZiB0aGUgdmVydGljZXNcbiAgICAgKi9cbiAgICB0aGlzLmluZGljZXMgPSBuZXcgVWludDE2QXJyYXkocG9pbnRzLmxlbmd0aCAqIDIpO1xuXG4gICAgLyoqXG4gICAgICogVHJhY2tlciBmb3IgaWYgdGhlIHJvcGUgaXMgcmVhZHkgdG8gYmUgZHJhd24uIE5lZWRlZCBiZWNhdXNlIE1lc2ggY3RvciBjYW5cbiAgICAgKiBjYWxsIF9vblRleHR1cmVVcGRhdGVkIHdoaWNoIGNvdWxkIGNhbGwgcmVmcmVzaCB0b28gZWFybHkuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgIHRoaXMuX3JlYWR5ID0gdHJ1ZTtcblxuICAgICB0aGlzLnJlZnJlc2goKTtcbn1cblxuXG4vLyBjb25zdHJ1Y3RvclxuUm9wZS5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKE1lc2gucHJvdG90eXBlKTtcblJvcGUucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gUm9wZTtcbm1vZHVsZS5leHBvcnRzID0gUm9wZTtcblxuLyoqXG4gKiBSZWZyZXNoZXNcbiAqXG4gKi9cblJvcGUucHJvdG90eXBlLnJlZnJlc2ggPSBmdW5jdGlvbiAoKVxue1xuICAgIHZhciBwb2ludHMgPSB0aGlzLnBvaW50cztcblxuICAgIC8vIGlmIHRvbyBsaXR0bGUgcG9pbnRzLCBvciB0ZXh0dXJlIGhhc24ndCBnb3QgVVZzIHNldCB5ZXQganVzdCBtb3ZlIG9uLlxuICAgIGlmIChwb2ludHMubGVuZ3RoIDwgMSB8fCAhdGhpcy5fdGV4dHVyZS5fdXZzKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHZhciB1dnMgPSB0aGlzLnV2cztcblxuICAgIHZhciBpbmRpY2VzID0gdGhpcy5pbmRpY2VzO1xuICAgIHZhciBjb2xvcnMgPSB0aGlzLmNvbG9ycztcblxuICAgIHZhciB0ZXh0dXJlVXZzID0gdGhpcy5fdGV4dHVyZS5fdXZzO1xuICAgIHZhciBvZmZzZXQgPSBuZXcgY29yZS5Qb2ludCh0ZXh0dXJlVXZzLngwLCB0ZXh0dXJlVXZzLnkwKTtcbiAgICB2YXIgZmFjdG9yID0gbmV3IGNvcmUuUG9pbnQodGV4dHVyZVV2cy54MiAtIHRleHR1cmVVdnMueDAsIHRleHR1cmVVdnMueTIgLSB0ZXh0dXJlVXZzLnkwKTtcblxuICAgIHV2c1swXSA9IDAgKyBvZmZzZXQueDtcbiAgICB1dnNbMV0gPSAwICsgb2Zmc2V0Lnk7XG4gICAgdXZzWzJdID0gMCArIG9mZnNldC54O1xuICAgIHV2c1szXSA9IDEgKiBmYWN0b3IueSArIG9mZnNldC55O1xuXG4gICAgY29sb3JzWzBdID0gMTtcbiAgICBjb2xvcnNbMV0gPSAxO1xuXG4gICAgaW5kaWNlc1swXSA9IDA7XG4gICAgaW5kaWNlc1sxXSA9IDE7XG5cbiAgICB2YXIgdG90YWwgPSBwb2ludHMubGVuZ3RoLFxuICAgICAgICBwb2ludCwgaW5kZXgsIGFtb3VudDtcblxuICAgIGZvciAodmFyIGkgPSAxOyBpIDwgdG90YWw7IGkrKylcbiAgICB7XG4gICAgICAgIHBvaW50ID0gcG9pbnRzW2ldO1xuICAgICAgICBpbmRleCA9IGkgKiA0O1xuICAgICAgICAvLyB0aW1lIHRvIGRvIHNvbWUgc21hcnQgZHJhd2luZyFcbiAgICAgICAgYW1vdW50ID0gaSAvICh0b3RhbC0xKTtcblxuICAgICAgICB1dnNbaW5kZXhdID0gYW1vdW50ICogZmFjdG9yLnggKyBvZmZzZXQueDtcbiAgICAgICAgdXZzW2luZGV4KzFdID0gMCArIG9mZnNldC55O1xuXG4gICAgICAgIHV2c1tpbmRleCsyXSA9IGFtb3VudCAqIGZhY3Rvci54ICsgb2Zmc2V0Lng7XG4gICAgICAgIHV2c1tpbmRleCszXSA9IDEgKiBmYWN0b3IueSArIG9mZnNldC55O1xuXG4gICAgICAgIGluZGV4ID0gaSAqIDI7XG4gICAgICAgIGNvbG9yc1tpbmRleF0gPSAxO1xuICAgICAgICBjb2xvcnNbaW5kZXgrMV0gPSAxO1xuXG4gICAgICAgIGluZGV4ID0gaSAqIDI7XG4gICAgICAgIGluZGljZXNbaW5kZXhdID0gaW5kZXg7XG4gICAgICAgIGluZGljZXNbaW5kZXggKyAxXSA9IGluZGV4ICsgMTtcbiAgICB9XG5cbiAgICB0aGlzLmRpcnR5ID0gdHJ1ZTtcbn07XG5cbi8qKlxuICogQ2xlYXIgdGV4dHVyZSBVVnMgd2hlbiBuZXcgdGV4dHVyZSBpcyBzZXRcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5Sb3BlLnByb3RvdHlwZS5fb25UZXh0dXJlVXBkYXRlID0gZnVuY3Rpb24gKClcbntcbiAgICBNZXNoLnByb3RvdHlwZS5fb25UZXh0dXJlVXBkYXRlLmNhbGwodGhpcyk7XG5cbiAgICAvLyB3YWl0IGZvciB0aGUgUm9wZSBjdG9yIHRvIGZpbmlzaCBiZWZvcmUgY2FsbGluZyByZWZyZXNoXG4gICAgaWYgKHRoaXMuX3JlYWR5KSB7XG4gICAgICAgIHRoaXMucmVmcmVzaCgpO1xuICAgIH1cbn07XG5cbi8qKlxuICogVXBkYXRlcyB0aGUgb2JqZWN0IHRyYW5zZm9ybSBmb3IgcmVuZGVyaW5nXG4gKlxuICogQHByaXZhdGVcbiAqL1xuUm9wZS5wcm90b3R5cGUudXBkYXRlVHJhbnNmb3JtID0gZnVuY3Rpb24gKClcbntcbiAgICB2YXIgcG9pbnRzID0gdGhpcy5wb2ludHM7XG5cbiAgICBpZiAocG9pbnRzLmxlbmd0aCA8IDEpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFyIGxhc3RQb2ludCA9IHBvaW50c1swXTtcbiAgICB2YXIgbmV4dFBvaW50O1xuICAgIHZhciBwZXJwWCA9IDA7XG4gICAgdmFyIHBlcnBZID0gMDtcblxuICAgIC8vIHRoaXMuY291bnQgLT0gMC4yO1xuXG4gICAgdmFyIHZlcnRpY2VzID0gdGhpcy52ZXJ0aWNlcztcbiAgICB2YXIgdG90YWwgPSBwb2ludHMubGVuZ3RoLFxuICAgICAgICBwb2ludCwgaW5kZXgsIHJhdGlvLCBwZXJwTGVuZ3RoLCBudW07XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRvdGFsOyBpKyspXG4gICAge1xuICAgICAgICBwb2ludCA9IHBvaW50c1tpXTtcbiAgICAgICAgaW5kZXggPSBpICogNDtcblxuICAgICAgICBpZiAoaSA8IHBvaW50cy5sZW5ndGgtMSlcbiAgICAgICAge1xuICAgICAgICAgICAgbmV4dFBvaW50ID0gcG9pbnRzW2krMV07XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgICBuZXh0UG9pbnQgPSBwb2ludDtcbiAgICAgICAgfVxuXG4gICAgICAgIHBlcnBZID0gLShuZXh0UG9pbnQueCAtIGxhc3RQb2ludC54KTtcbiAgICAgICAgcGVycFggPSBuZXh0UG9pbnQueSAtIGxhc3RQb2ludC55O1xuXG4gICAgICAgIHJhdGlvID0gKDEgLSAoaSAvICh0b3RhbC0xKSkpICogMTA7XG5cbiAgICAgICAgaWYgKHJhdGlvID4gMSlcbiAgICAgICAge1xuICAgICAgICAgICAgcmF0aW8gPSAxO1xuICAgICAgICB9XG5cbiAgICAgICAgcGVycExlbmd0aCA9IE1hdGguc3FydChwZXJwWCAqIHBlcnBYICsgcGVycFkgKiBwZXJwWSk7XG4gICAgICAgIG51bSA9IHRoaXMuX3RleHR1cmUuaGVpZ2h0IC8gMjsgLy8oMjAgKyBNYXRoLmFicyhNYXRoLnNpbigoaSArIHRoaXMuY291bnQpICogMC4zKSAqIDUwKSApKiByYXRpbztcbiAgICAgICAgcGVycFggLz0gcGVycExlbmd0aDtcbiAgICAgICAgcGVycFkgLz0gcGVycExlbmd0aDtcblxuICAgICAgICBwZXJwWCAqPSBudW07XG4gICAgICAgIHBlcnBZICo9IG51bTtcblxuICAgICAgICB2ZXJ0aWNlc1tpbmRleF0gPSBwb2ludC54ICsgcGVycFg7XG4gICAgICAgIHZlcnRpY2VzW2luZGV4KzFdID0gcG9pbnQueSArIHBlcnBZO1xuICAgICAgICB2ZXJ0aWNlc1tpbmRleCsyXSA9IHBvaW50LnggLSBwZXJwWDtcbiAgICAgICAgdmVydGljZXNbaW5kZXgrM10gPSBwb2ludC55IC0gcGVycFk7XG5cbiAgICAgICAgbGFzdFBvaW50ID0gcG9pbnQ7XG4gICAgfVxuXG4gICAgdGhpcy5jb250YWluZXJVcGRhdGVUcmFuc2Zvcm0oKTtcbn07XG4iLCIvKipcbiAqIEBmaWxlICAgICAgICBNYWluIGV4cG9ydCBvZiB0aGUgUElYSSBleHRyYXMgbGlicmFyeVxuICogQGF1dGhvciAgICAgIE1hdCBHcm92ZXMgPG1hdEBnb29kYm95ZGlnaXRhbC5jb20+XG4gKiBAY29weXJpZ2h0ICAgMjAxMy0yMDE1IEdvb2RCb3lEaWdpdGFsXG4gKiBAbGljZW5zZSAgICAge0BsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9waXhpanMvcGl4aS5qcy9ibG9iL21hc3Rlci9MSUNFTlNFfE1JVCBMaWNlbnNlfVxuICovXG5cbi8qKlxuICogQG5hbWVzcGFjZSBQSVhJLm1lc2hcbiAqL1xubW9kdWxlLmV4cG9ydHMgPSB7XG4gICAgTWVzaDogICAgICAgICAgIHJlcXVpcmUoJy4vTWVzaCcpLFxuICAgIFBsYW5lOiAgICAgICAgICAgcmVxdWlyZSgnLi9QbGFuZScpLFxuICAgIFJvcGU6ICAgICAgICAgICByZXF1aXJlKCcuL1JvcGUnKSxcbiAgICBNZXNoUmVuZGVyZXI6ICAgcmVxdWlyZSgnLi93ZWJnbC9NZXNoUmVuZGVyZXInKSxcbiAgICBNZXNoU2hhZGVyOiAgICAgcmVxdWlyZSgnLi93ZWJnbC9NZXNoU2hhZGVyJylcbn07XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uLy4uL2NvcmUnKSxcbiAgICBNZXNoID0gcmVxdWlyZSgnLi4vTWVzaCcpO1xuXG4vKipcbiAqIEBhdXRob3IgTWF0IEdyb3Zlc1xuICpcbiAqIEJpZyB0aGFua3MgdG8gdGhlIHZlcnkgY2xldmVyIE1hdHQgRGVzTGF1cmllcnMgPG1hdHRkZXNsPiBodHRwczovL2dpdGh1Yi5jb20vbWF0dGRlc2wvXG4gKiBmb3IgY3JlYXRpbmcgdGhlIG9yaWdpbmFsIHBpeGkgdmVyc2lvbiFcbiAqIEFsc28gYSB0aGFua3MgdG8gaHR0cHM6Ly9naXRodWIuY29tL2JjaGV2YWxpZXIgZm9yIHR3ZWFraW5nIHRoZSB0aW50IGFuZCBhbHBoYSBzbyB0aGF0IHRoZXkgbm93IHNoYXJlIDQgYnl0ZXMgb24gdGhlIHZlcnRleCBidWZmZXJcbiAqXG4gKiBIZWF2aWx5IGluc3BpcmVkIGJ5IExpYkdEWCdzIE1lc2hSZW5kZXJlcjpcbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS9saWJnZHgvbGliZ2R4L2Jsb2IvbWFzdGVyL2dkeC9zcmMvY29tL2JhZGxvZ2ljL2dkeC9ncmFwaGljcy9nMmQvTWVzaFJlbmRlcmVyLmphdmFcbiAqL1xuXG4vKipcbiAqXG4gKiBAY2xhc3NcbiAqIEBwcml2YXRlXG4gKiBAbWVtYmVyb2YgUElYSS5tZXNoXG4gKiBAZXh0ZW5kcyBQSVhJLk9iamVjdFJlbmRlcmVyXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcn0gVGhlIHJlbmRlcmVyIHRoaXMgc3ByaXRlIGJhdGNoIHdvcmtzIGZvci5cbiAqL1xuZnVuY3Rpb24gTWVzaFJlbmRlcmVyKHJlbmRlcmVyKVxue1xuICAgIGNvcmUuT2JqZWN0UmVuZGVyZXIuY2FsbCh0aGlzLCByZW5kZXJlcik7XG5cblxuICAgIC8qKlxuICAgICAqIEhvbGRzIHRoZSBpbmRpY2VzXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtVaW50MTZBcnJheX1cbiAgICAgKi9cbiAgICBcbiAgICB0aGlzLmluZGljZXMgPSBuZXcgVWludDE2QXJyYXkoMTUwMDApO1xuXG4gICAgLy9UT0RPIHRoaXMgY291bGQgYmUgYSBzaW5nbGUgYnVmZmVyIHNoYXJlZCBhbW9uZ3N0IGFsbCByZW5kZXJlcnMgYXMgd2UgcmV1c2UgdGhpcyBzZXQgdXAgaW4gbW9zdCByZW5kZXJlcnNcbiAgICBmb3IgKHZhciBpPTAsIGo9MDsgaSA8IDE1MDAwOyBpICs9IDYsIGogKz0gNClcbiAgICB7XG4gICAgICAgIHRoaXMuaW5kaWNlc1tpICsgMF0gPSBqICsgMDtcbiAgICAgICAgdGhpcy5pbmRpY2VzW2kgKyAxXSA9IGogKyAxO1xuICAgICAgICB0aGlzLmluZGljZXNbaSArIDJdID0gaiArIDI7XG4gICAgICAgIHRoaXMuaW5kaWNlc1tpICsgM10gPSBqICsgMDtcbiAgICAgICAgdGhpcy5pbmRpY2VzW2kgKyA0XSA9IGogKyAyO1xuICAgICAgICB0aGlzLmluZGljZXNbaSArIDVdID0gaiArIDM7XG4gICAgfVxuXG4gICAgdGhpcy5jdXJyZW50U2hhZGVyID0gbnVsbDtcbn1cblxuTWVzaFJlbmRlcmVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoY29yZS5PYmplY3RSZW5kZXJlci5wcm90b3R5cGUpO1xuTWVzaFJlbmRlcmVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IE1lc2hSZW5kZXJlcjtcbm1vZHVsZS5leHBvcnRzID0gTWVzaFJlbmRlcmVyO1xuXG5jb3JlLldlYkdMUmVuZGVyZXIucmVnaXN0ZXJQbHVnaW4oJ21lc2gnLCBNZXNoUmVuZGVyZXIpO1xuXG4vKipcbiAqIFNldHMgdXAgdGhlIHJlbmRlcmVyIGNvbnRleHQgYW5kIG5lY2Vzc2FyeSBidWZmZXJzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0gZ2wge1dlYkdMUmVuZGVyaW5nQ29udGV4dH0gdGhlIGN1cnJlbnQgV2ViR0wgZHJhd2luZyBjb250ZXh0XG4gKi9cbk1lc2hSZW5kZXJlci5wcm90b3R5cGUub25Db250ZXh0Q2hhbmdlID0gZnVuY3Rpb24gKClcbntcblxufTtcblxuLyoqXG4gKiBSZW5kZXJzIHRoZSBzcHJpdGUgb2JqZWN0LlxuICpcbiAqIEBwYXJhbSBtZXNoIHtQSVhJLm1lc2guTWVzaH0gdGhlIG1lc2ggdG8gcmVuZGVyXG4gKi9cbk1lc2hSZW5kZXJlci5wcm90b3R5cGUucmVuZGVyID0gZnVuY3Rpb24gKG1lc2gpXG57XG4gICAgaWYoIW1lc2guX3ZlcnRleEJ1ZmZlcilcbiAgICB7XG4gICAgICAgIHRoaXMuX2luaXRXZWJHTChtZXNoKTtcbiAgICB9XG5cbiAgICB2YXIgcmVuZGVyZXIgPSB0aGlzLnJlbmRlcmVyLFxuICAgICAgICBnbCA9IHJlbmRlcmVyLmdsLFxuICAgICAgICB0ZXh0dXJlID0gbWVzaC5fdGV4dHVyZS5iYXNlVGV4dHVyZSxcbiAgICAgICAgc2hhZGVyID0gbWVzaC5zaGFkZXI7Ly8gfHwgcmVuZGVyZXIuc2hhZGVyTWFuYWdlci5wbHVnaW5zLm1lc2hTaGFkZXI7XG5cbiAgICB2YXIgZHJhd01vZGUgPSBtZXNoLmRyYXdNb2RlID09PSBNZXNoLkRSQVdfTU9ERVMuVFJJQU5HTEVfTUVTSCA/IGdsLlRSSUFOR0xFX1NUUklQIDogZ2wuVFJJQU5HTEVTO1xuXG4gICAgcmVuZGVyZXIuYmxlbmRNb2RlTWFuYWdlci5zZXRCbGVuZE1vZGUobWVzaC5ibGVuZE1vZGUpO1xuXG4gICAgLy9UT0RPIGNhY2hlIGN1c3RvbSBzdGF0ZS4uXG4gICAgaWYgKCFzaGFkZXIpXG4gICAge1xuICAgICAgICBzaGFkZXIgPSByZW5kZXJlci5zaGFkZXJNYW5hZ2VyLnBsdWdpbnMubWVzaFNoYWRlcjtcbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgc2hhZGVyID0gc2hhZGVyLnNoYWRlcnNbZ2wuaWRdIHx8IHNoYWRlci5nZXRTaGFkZXIocmVuZGVyZXIpOy8vIDogc2hhZGVyO1xuICAgIH1cblxuICAgIHRoaXMucmVuZGVyZXIuc2hhZGVyTWFuYWdlci5zZXRTaGFkZXIoc2hhZGVyKTtcblxuICAgIHNoYWRlci51bmlmb3Jtcy50cmFuc2xhdGlvbk1hdHJpeC52YWx1ZSA9IG1lc2gud29ybGRUcmFuc2Zvcm0udG9BcnJheSh0cnVlKTtcbiAgICBzaGFkZXIudW5pZm9ybXMucHJvamVjdGlvbk1hdHJpeC52YWx1ZSA9IHJlbmRlcmVyLmN1cnJlbnRSZW5kZXJUYXJnZXQucHJvamVjdGlvbk1hdHJpeC50b0FycmF5KHRydWUpO1xuICAgIHNoYWRlci51bmlmb3Jtcy5hbHBoYS52YWx1ZSA9IG1lc2gud29ybGRBbHBoYTtcblxuICAgIHNoYWRlci5zeW5jVW5pZm9ybXMoKTtcblxuICAgIGlmICghbWVzaC5kaXJ0eSlcbiAgICB7XG5cbiAgICAgICAgZ2wuYmluZEJ1ZmZlcihnbC5BUlJBWV9CVUZGRVIsIG1lc2guX3ZlcnRleEJ1ZmZlcik7XG4gICAgICAgIGdsLmJ1ZmZlclN1YkRhdGEoZ2wuQVJSQVlfQlVGRkVSLCAwLCBtZXNoLnZlcnRpY2VzKTtcbiAgICAgICAgZ2wudmVydGV4QXR0cmliUG9pbnRlcihzaGFkZXIuYXR0cmlidXRlcy5hVmVydGV4UG9zaXRpb24sIDIsIGdsLkZMT0FULCBmYWxzZSwgMCwgMCk7XG5cbiAgICAgICAgLy8gdXBkYXRlIHRoZSB1dnNcbiAgICAgICAgZ2wuYmluZEJ1ZmZlcihnbC5BUlJBWV9CVUZGRVIsIG1lc2guX3V2QnVmZmVyKTtcbiAgICAgICAgZ2wudmVydGV4QXR0cmliUG9pbnRlcihzaGFkZXIuYXR0cmlidXRlcy5hVGV4dHVyZUNvb3JkLCAyLCBnbC5GTE9BVCwgZmFsc2UsIDAsIDApO1xuXG5cbiAgICAgICAgZ2wuYWN0aXZlVGV4dHVyZShnbC5URVhUVVJFMCk7XG5cbiAgICAgICBpZiAoIXRleHR1cmUuX2dsVGV4dHVyZXNbZ2wuaWRdKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnJlbmRlcmVyLnVwZGF0ZVRleHR1cmUodGV4dHVyZSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgICAvLyBiaW5kIHRoZSBjdXJyZW50IHRleHR1cmVcbiAgICAgICAgICAgIGdsLmJpbmRUZXh0dXJlKGdsLlRFWFRVUkVfMkQsIHRleHR1cmUuX2dsVGV4dHVyZXNbZ2wuaWRdKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGdsLmJpbmRCdWZmZXIoZ2wuRUxFTUVOVF9BUlJBWV9CVUZGRVIsIG1lc2guX2luZGV4QnVmZmVyKTtcbiAgICAgICAgZ2wuYnVmZmVyU3ViRGF0YShnbC5FTEVNRU5UX0FSUkFZX0JVRkZFUiwgMCwgbWVzaC5pbmRpY2VzKTtcbiAgICB9XG4gICAgZWxzZVxuICAgIHtcblxuICAgICAgICBtZXNoLmRpcnR5ID0gZmFsc2U7XG4gICAgICAgIGdsLmJpbmRCdWZmZXIoZ2wuQVJSQVlfQlVGRkVSLCBtZXNoLl92ZXJ0ZXhCdWZmZXIpO1xuICAgICAgICBnbC5idWZmZXJEYXRhKGdsLkFSUkFZX0JVRkZFUiwgbWVzaC52ZXJ0aWNlcywgZ2wuU1RBVElDX0RSQVcpO1xuICAgICAgICBnbC52ZXJ0ZXhBdHRyaWJQb2ludGVyKHNoYWRlci5hdHRyaWJ1dGVzLmFWZXJ0ZXhQb3NpdGlvbiwgMiwgZ2wuRkxPQVQsIGZhbHNlLCAwLCAwKTtcblxuICAgICAgICAvLyB1cGRhdGUgdGhlIHV2c1xuICAgICAgICBnbC5iaW5kQnVmZmVyKGdsLkFSUkFZX0JVRkZFUiwgbWVzaC5fdXZCdWZmZXIpO1xuICAgICAgICBnbC5idWZmZXJEYXRhKGdsLkFSUkFZX0JVRkZFUiwgbWVzaC51dnMsIGdsLlNUQVRJQ19EUkFXKTtcbiAgICAgICAgZ2wudmVydGV4QXR0cmliUG9pbnRlcihzaGFkZXIuYXR0cmlidXRlcy5hVGV4dHVyZUNvb3JkLCAyLCBnbC5GTE9BVCwgZmFsc2UsIDAsIDApO1xuXG4gICAgICAgICBnbC5hY3RpdmVUZXh0dXJlKGdsLlRFWFRVUkUwKTtcblxuICAgICAgICBpZiAoIXRleHR1cmUuX2dsVGV4dHVyZXNbZ2wuaWRdKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnJlbmRlcmVyLnVwZGF0ZVRleHR1cmUodGV4dHVyZSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgICAvLyBiaW5kIHRoZSBjdXJyZW50IHRleHR1cmVcbiAgICAgICAgICAgIGdsLmJpbmRUZXh0dXJlKGdsLlRFWFRVUkVfMkQsIHRleHR1cmUuX2dsVGV4dHVyZXNbZ2wuaWRdKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGRvbnQgbmVlZCB0byB1cGxvYWQhXG4gICAgICAgIGdsLmJpbmRCdWZmZXIoZ2wuRUxFTUVOVF9BUlJBWV9CVUZGRVIsIG1lc2guX2luZGV4QnVmZmVyKTtcbiAgICAgICAgZ2wuYnVmZmVyRGF0YShnbC5FTEVNRU5UX0FSUkFZX0JVRkZFUiwgbWVzaC5pbmRpY2VzLCBnbC5TVEFUSUNfRFJBVyk7XG5cbiAgICB9XG5cbiAgICBnbC5kcmF3RWxlbWVudHMoZHJhd01vZGUsIG1lc2guaW5kaWNlcy5sZW5ndGgsIGdsLlVOU0lHTkVEX1NIT1JULCAwKTtcblxufTtcblxuLyoqXG4gKiBQcmVwYXJlcyBhbGwgdGhlIGJ1ZmZlcnMgdG8gcmVuZGVyIHRoaXMgbWVzaFxuICogQHBhcmFtIG1lc2gge1BJWEkubWVzaC5NZXNofSB0aGUgbWVzaCB0byByZW5kZXJcbiAqL1xuTWVzaFJlbmRlcmVyLnByb3RvdHlwZS5faW5pdFdlYkdMID0gZnVuY3Rpb24gKG1lc2gpXG57XG4gICAgLy8gYnVpbGQgdGhlIHN0cmlwIVxuICAgIHZhciBnbCA9IHRoaXMucmVuZGVyZXIuZ2w7XG5cbiAgICBtZXNoLl92ZXJ0ZXhCdWZmZXIgPSBnbC5jcmVhdGVCdWZmZXIoKTtcbiAgICBtZXNoLl9pbmRleEJ1ZmZlciA9IGdsLmNyZWF0ZUJ1ZmZlcigpO1xuICAgIG1lc2guX3V2QnVmZmVyID0gZ2wuY3JlYXRlQnVmZmVyKCk7XG5cblxuXG4gICAgZ2wuYmluZEJ1ZmZlcihnbC5BUlJBWV9CVUZGRVIsIG1lc2guX3ZlcnRleEJ1ZmZlcik7XG4gICAgZ2wuYnVmZmVyRGF0YShnbC5BUlJBWV9CVUZGRVIsIG1lc2gudmVydGljZXMsIGdsLkRZTkFNSUNfRFJBVyk7XG5cbiAgICBnbC5iaW5kQnVmZmVyKGdsLkFSUkFZX0JVRkZFUiwgbWVzaC5fdXZCdWZmZXIpO1xuICAgIGdsLmJ1ZmZlckRhdGEoZ2wuQVJSQVlfQlVGRkVSLCAgbWVzaC51dnMsIGdsLlNUQVRJQ19EUkFXKTtcblxuICAgIGlmKG1lc2guY29sb3JzKXtcbiAgICAgICAgbWVzaC5fY29sb3JCdWZmZXIgPSBnbC5jcmVhdGVCdWZmZXIoKTtcbiAgICAgICAgZ2wuYmluZEJ1ZmZlcihnbC5BUlJBWV9CVUZGRVIsIG1lc2guX2NvbG9yQnVmZmVyKTtcbiAgICAgICAgZ2wuYnVmZmVyRGF0YShnbC5BUlJBWV9CVUZGRVIsIG1lc2guY29sb3JzLCBnbC5TVEFUSUNfRFJBVyk7XG4gICAgfVxuXG4gICAgZ2wuYmluZEJ1ZmZlcihnbC5FTEVNRU5UX0FSUkFZX0JVRkZFUiwgbWVzaC5faW5kZXhCdWZmZXIpO1xuICAgIGdsLmJ1ZmZlckRhdGEoZ2wuRUxFTUVOVF9BUlJBWV9CVUZGRVIsIG1lc2guaW5kaWNlcywgZ2wuU1RBVElDX0RSQVcpO1xufTtcblxuXG4vKipcbiAqIEVtcHRpZXMgdGhlIGN1cnJlbnQgYmF0Y2guXG4gKlxuICovXG5NZXNoUmVuZGVyZXIucHJvdG90eXBlLmZsdXNoID0gZnVuY3Rpb24gKClcbntcblxufTtcblxuLyoqXG4gKiBTdGFydHMgYSBuZXcgbWVzaCByZW5kZXJlci5cbiAqXG4gKi9cbk1lc2hSZW5kZXJlci5wcm90b3R5cGUuc3RhcnQgPSBmdW5jdGlvbiAoKVxue1xuICAgIFxuXG4gICAgdGhpcy5jdXJyZW50U2hhZGVyID0gbnVsbDtcbn07XG5cbi8qKlxuICogRGVzdHJveXMgdGhlIE1lc2ggcmVuZGVyZXJcbiAqXG4gKi9cbk1lc2hSZW5kZXJlci5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uICgpXG57XG4gICAgY29yZS5PYmplY3RSZW5kZXJlci5wcm90b3R5cGUuZGVzdHJveS5jYWxsKHRoaXMpO1xufTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vLi4vY29yZScpO1xuXG4vKipcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5TaGFkZXJcbiAqIEBtZW1iZXJvZiBQSVhJLm1lc2hcbiAqIEBwYXJhbSBzaGFkZXJNYW5hZ2VyIHtQSVhJLlNoYWRlck1hbmFnZXJ9IFRoZSBXZWJHTCBzaGFkZXIgbWFuYWdlciB0aGlzIHNoYWRlciB3b3JrcyBmb3IuXG4gKi9cbmZ1bmN0aW9uIE1lc2hTaGFkZXIoc2hhZGVyTWFuYWdlcilcbntcbiAgICBjb3JlLlNoYWRlci5jYWxsKHRoaXMsXG4gICAgICAgIHNoYWRlck1hbmFnZXIsXG4gICAgICAgIC8vIHZlcnRleCBzaGFkZXJcbiAgICAgICAgW1xuICAgICAgICAgICAgJ3ByZWNpc2lvbiBsb3dwIGZsb2F0OycsXG4gICAgICAgICAgICAnYXR0cmlidXRlIHZlYzIgYVZlcnRleFBvc2l0aW9uOycsXG4gICAgICAgICAgICAnYXR0cmlidXRlIHZlYzIgYVRleHR1cmVDb29yZDsnLFxuXG4gICAgICAgICAgICAndW5pZm9ybSBtYXQzIHRyYW5zbGF0aW9uTWF0cml4OycsXG4gICAgICAgICAgICAndW5pZm9ybSBtYXQzIHByb2plY3Rpb25NYXRyaXg7JyxcblxuICAgICAgICAgICAgJ3ZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkOycsXG5cbiAgICAgICAgICAgICd2b2lkIG1haW4odm9pZCl7JyxcbiAgICAgICAgICAgICcgICBnbF9Qb3NpdGlvbiA9IHZlYzQoKHByb2plY3Rpb25NYXRyaXggKiB0cmFuc2xhdGlvbk1hdHJpeCAqIHZlYzMoYVZlcnRleFBvc2l0aW9uLCAxLjApKS54eSwgMC4wLCAxLjApOycsXG4gICAgICAgICAgICAnICAgdlRleHR1cmVDb29yZCA9IGFUZXh0dXJlQ29vcmQ7JyxcbiAgICAgICAgICAgICd9J1xuICAgICAgICBdLmpvaW4oJ1xcbicpLFxuICAgICAgICBbXG4gICAgICAgICAgICAncHJlY2lzaW9uIGxvd3AgZmxvYXQ7JyxcblxuICAgICAgICAgICAgJ3ZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkOycsXG4gICAgICAgICAgICAndW5pZm9ybSBmbG9hdCBhbHBoYTsnLFxuXG4gICAgICAgICAgICAndW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXI7JyxcblxuICAgICAgICAgICAgJ3ZvaWQgbWFpbih2b2lkKXsnLFxuICAgICAgICAgICAgJyAgIGdsX0ZyYWdDb2xvciA9IHRleHR1cmUyRCh1U2FtcGxlciwgdlRleHR1cmVDb29yZCkgKiBhbHBoYSA7JyxcbiAgICAgICAgICAgICd9J1xuICAgICAgICBdLmpvaW4oJ1xcbicpLFxuICAgICAgICAvLyBjdXN0b20gdW5pZm9ybXNcbiAgICAgICAge1xuICAgICAgICAgICAgYWxwaGE6ICB7IHR5cGU6ICcxZicsIHZhbHVlOiAwIH0sXG4gICAgICAgICAgICB0cmFuc2xhdGlvbk1hdHJpeDogeyB0eXBlOiAnbWF0MycsIHZhbHVlOiBuZXcgRmxvYXQzMkFycmF5KDkpIH0sXG4gICAgICAgICAgICBwcm9qZWN0aW9uTWF0cml4OiB7IHR5cGU6ICdtYXQzJywgdmFsdWU6IG5ldyBGbG9hdDMyQXJyYXkoOSkgfVxuICAgICAgICB9LFxuICAgICAgICAvLyBjdXN0b20gYXR0cmlidXRlc1xuICAgICAgICB7XG4gICAgICAgICAgICBhVmVydGV4UG9zaXRpb246MCxcbiAgICAgICAgICAgIGFUZXh0dXJlQ29vcmQ6MFxuICAgICAgICB9XG4gICAgKTtcbn1cblxuTWVzaFNoYWRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuU2hhZGVyLnByb3RvdHlwZSk7XG5NZXNoU2hhZGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IE1lc2hTaGFkZXI7XG5tb2R1bGUuZXhwb3J0cyA9IE1lc2hTaGFkZXI7XG5cbmNvcmUuU2hhZGVyTWFuYWdlci5yZWdpc3RlclBsdWdpbignbWVzaFNoYWRlcicsIE1lc2hTaGFkZXIpO1xuIiwiLy8gUmVmZXJlbmNlczpcbi8vIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0phdmFTY3JpcHQvUmVmZXJlbmNlL0dsb2JhbF9PYmplY3RzL01hdGgvc2lnblxuXG5pZiAoIU1hdGguc2lnbilcbntcbiAgICBNYXRoLnNpZ24gPSBmdW5jdGlvbiAoeCkge1xuICAgICAgICB4ID0gK3g7XG4gICAgICAgIGlmICh4ID09PSAwIHx8IGlzTmFOKHgpKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4geDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4geCA+IDAgPyAxIDogLTE7XG4gICAgfTtcbn1cbiIsIi8vIFJlZmVyZW5jZXM6XG4vLyBodHRwczovL2dpdGh1Yi5jb20vc2luZHJlc29yaHVzL29iamVjdC1hc3NpZ25cbi8vIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0phdmFTY3JpcHQvUmVmZXJlbmNlL0dsb2JhbF9PYmplY3RzL09iamVjdC9hc3NpZ25cblxuaWYgKCFPYmplY3QuYXNzaWduKVxue1xuICAgIE9iamVjdC5hc3NpZ24gPSByZXF1aXJlKCdvYmplY3QtYXNzaWduJyk7XG59XG4iLCJyZXF1aXJlKCcuL09iamVjdC5hc3NpZ24nKTtcbnJlcXVpcmUoJy4vcmVxdWVzdEFuaW1hdGlvbkZyYW1lJyk7XG5yZXF1aXJlKCcuL01hdGguc2lnbicpO1xuIiwiLy8gUmVmZXJlbmNlczpcbi8vIGh0dHA6Ly9wYXVsaXJpc2guY29tLzIwMTEvcmVxdWVzdGFuaW1hdGlvbmZyYW1lLWZvci1zbWFydC1hbmltYXRpbmcvXG4vLyBodHRwczovL2dpc3QuZ2l0aHViLmNvbS8xNTc5NjcxXG4vLyBodHRwOi8vdXBkYXRlcy5odG1sNXJvY2tzLmNvbS8yMDEyLzA1L3JlcXVlc3RBbmltYXRpb25GcmFtZS1BUEktbm93LXdpdGgtc3ViLW1pbGxpc2Vjb25kLXByZWNpc2lvblxuLy8gaHR0cHM6Ly9naXN0LmdpdGh1Yi5jb20vdGltaGFsbC80MDc4NjE0XG4vLyBodHRwczovL2dpdGh1Yi5jb20vRmluYW5jaWFsLVRpbWVzL3BvbHlmaWxsLXNlcnZpY2UvdHJlZS9tYXN0ZXIvcG9seWZpbGxzL3JlcXVlc3RBbmltYXRpb25GcmFtZVxuXG4vLyBFeHBlY3RlZCB0byBiZSB1c2VkIHdpdGggQnJvd3NlcmZpeVxuLy8gQnJvd3NlcmlmeSBhdXRvbWF0aWNhbGx5IGRldGVjdHMgdGhlIHVzZSBvZiBgZ2xvYmFsYCBhbmQgcGFzc2VzIHRoZVxuLy8gY29ycmVjdCByZWZlcmVuY2Ugb2YgYGdsb2JhbGAsIGBzZWxmYCwgYW5kIGZpbmFsbHkgYHdpbmRvd2BcblxuLy8gRGF0ZS5ub3dcbmlmICghKERhdGUubm93ICYmIERhdGUucHJvdG90eXBlLmdldFRpbWUpKSB7XG4gICAgRGF0ZS5ub3cgPSBmdW5jdGlvbiBub3coKSB7XG4gICAgICAgIHJldHVybiBuZXcgRGF0ZSgpLmdldFRpbWUoKTtcbiAgICB9O1xufVxuXG4vLyBwZXJmb3JtYW5jZS5ub3dcbmlmICghKGdsb2JhbC5wZXJmb3JtYW5jZSAmJiBnbG9iYWwucGVyZm9ybWFuY2Uubm93KSkge1xuICAgIHZhciBzdGFydFRpbWUgPSBEYXRlLm5vdygpO1xuICAgIGlmICghZ2xvYmFsLnBlcmZvcm1hbmNlKSB7XG4gICAgICAgIGdsb2JhbC5wZXJmb3JtYW5jZSA9IHt9O1xuICAgIH1cbiAgICBnbG9iYWwucGVyZm9ybWFuY2Uubm93ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gRGF0ZS5ub3coKSAtIHN0YXJ0VGltZTtcbiAgICB9O1xufVxuXG4vLyByZXF1ZXN0QW5pbWF0aW9uRnJhbWVcbnZhciBsYXN0VGltZSA9IERhdGUubm93KCk7XG52YXIgdmVuZG9ycyA9IFsnbXMnLCAnbW96JywgJ3dlYmtpdCcsICdvJ107XG5cbmZvcih2YXIgeCA9IDA7IHggPCB2ZW5kb3JzLmxlbmd0aCAmJiAhZ2xvYmFsLnJlcXVlc3RBbmltYXRpb25GcmFtZTsgKyt4KSB7XG4gICAgZ2xvYmFsLnJlcXVlc3RBbmltYXRpb25GcmFtZSA9IGdsb2JhbFt2ZW5kb3JzW3hdICsgJ1JlcXVlc3RBbmltYXRpb25GcmFtZSddO1xuICAgIGdsb2JhbC5jYW5jZWxBbmltYXRpb25GcmFtZSA9IGdsb2JhbFt2ZW5kb3JzW3hdICsgJ0NhbmNlbEFuaW1hdGlvbkZyYW1lJ10gfHxcbiAgICAgICAgZ2xvYmFsW3ZlbmRvcnNbeF0gKyAnQ2FuY2VsUmVxdWVzdEFuaW1hdGlvbkZyYW1lJ107XG59XG5cbmlmICghZ2xvYmFsLnJlcXVlc3RBbmltYXRpb25GcmFtZSkge1xuICAgIGdsb2JhbC5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUgPSBmdW5jdGlvbiAoY2FsbGJhY2spIHtcbiAgICAgICAgaWYgKHR5cGVvZiBjYWxsYmFjayAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihjYWxsYmFjayArICdpcyBub3QgYSBmdW5jdGlvbicpO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGN1cnJlbnRUaW1lID0gRGF0ZS5ub3coKSxcbiAgICAgICAgICAgIGRlbGF5ID0gMTYgKyBsYXN0VGltZSAtIGN1cnJlbnRUaW1lO1xuXG4gICAgICAgIGlmIChkZWxheSA8IDApIHtcbiAgICAgICAgICAgIGRlbGF5ID0gMDtcbiAgICAgICAgfVxuXG4gICAgICAgIGxhc3RUaW1lID0gY3VycmVudFRpbWU7XG5cbiAgICAgICAgcmV0dXJuIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgbGFzdFRpbWUgPSBEYXRlLm5vdygpO1xuICAgICAgICAgICAgY2FsbGJhY2socGVyZm9ybWFuY2Uubm93KCkpO1xuICAgICAgICB9LCBkZWxheSk7XG4gICAgfTtcbn1cblxuaWYgKCFnbG9iYWwuY2FuY2VsQW5pbWF0aW9uRnJhbWUpIHtcbiAgICBnbG9iYWwuY2FuY2VsQW5pbWF0aW9uRnJhbWUgPSBmdW5jdGlvbihpZCkge1xuICAgICAgICBjbGVhclRpbWVvdXQoaWQpO1xuICAgIH07XG59XG4iXX0= //# sourceMappingURL=pixi.js.map diff --git a/bin/pixi.min.js b/bin/pixi.min.js index f7a788e..d59cd98 100644 --- a/bin/pixi.min.js +++ b/bin/pixi.min.js @@ -1,11 +1,11 @@ -!function(t){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=t();else if("function"==typeof define&&define.amd)define([],t);else{var e;e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:this,e.PIXI=t()}}(function(){var t;return function e(t,r,i){function n(s,a){if(!r[s]){if(!t[s]){var h="function"==typeof require&&require;if(!a&&h)return h(s,!0);if(o)return o(s,!0);var u=new Error("Cannot find module '"+s+"'");throw u.code="MODULE_NOT_FOUND",u}var l=r[s]={exports:{}};t[s][0].call(l.exports,function(e){var r=t[s][1][e];return n(r?r:e)},l,l.exports,e,t,r,i)}return r[s].exports}for(var o="function"==typeof require&&require,s=0;s=t.byteLength?i.bufferSubData(this.type,e,t):i.bufferData(this.type,t,this.drawType),this.data=t},n.prototype.bind=function(){var t=this.gl;t.bindBuffer(this.type,this.buffer)},n.createVertexBuffer=function(t,e,r){return new n(t,t.ARRAY_BUFFER,e,r)},n.createIndexBuffer=function(t,e,r){return new n(t,t.ELEMENT_ARRAY_BUFFER,e,r)},n.create=function(t,e,r,i){return new n(t,e,i)},e.exports=n},{}],3:[function(t,e,r){var i=t("./GLTexture"),n=function(t,e,r){this.gl=t,this.framebuffer=t.createFramebuffer(),this.stencil=null,this.texture=null,this.width=e||100,this.height=r||100};n.prototype.enableTexture=function(t){var e=this.gl;this.texture=t||new i(e),this.texture.bind(),this.bind(),e.framebufferTexture2D(e.FRAMEBUFFER,e.COLOR_ATTACHMENT0,e.TEXTURE_2D,this.texture.texture,0)},n.prototype.enableStencil=function(){if(!this.stencil){var t=this.gl;this.stencil=t.createRenderbuffer(),t.bindRenderbuffer(t.RENDERBUFFER,this.stencil),t.framebufferRenderbuffer(t.FRAMEBUFFER,t.DEPTH_STENCIL_ATTACHMENT,t.RENDERBUFFER,this.stencil),t.renderbufferStorage(t.RENDERBUFFER,t.DEPTH_STENCIL,this.width,this.height)}},n.prototype.clear=function(t,e,r,i){this.bind();var n=this.gl;n.clearColor(t,e,r,i),n.clear(n.COLOR_BUFFER_BIT)},n.prototype.bind=function(){var t=this.gl;t.bindFramebuffer(t.FRAMEBUFFER,this.framebuffer)},n.prototype.unbind=function(){gl.bindFramebuffer(gl.FRAMEBUFFER,null)},n.prototype.resize=function(t,e){var r=this.gl;this.width=t,this.height=e,this.texture&&(this.texture.bind(),r.texImage2D(r.TEXTURE_2D,0,this.format,t,e,0,this.format,this.type,null)),this.stencil&&(r.bindRenderbuffer(r.RENDERBUFFER,this.stencil),r.renderbufferStorage(r.RENDERBUFFER,r.DEPTH_STENCIL,t,e))},n.prototype.destroy=function(){var t=this.gl;t.deleteFramebuffer(this.framebuffer)},n.createRGBA=function(t,e,r,o){var s=new i(t,e,r);s.enableNearestScaling(),s.enableWrapClamp(),t.texImage2D(t.TEXTURE_2D,0,t.RGBA,e,r,0,t.RGBA,t.UNSIGNED_BYTE,o);var a=new n(t,e,r);return a.enableTexture(s),a},n.createFloat32=function(t,e,r,o){var s=new i.fromData(t,o,e,r);s.enableNearestScaling(),s.enableWrapClamp();var a=new n(t,e,r);return a.enableTexture(s),a},e.exports=n},{"./GLTexture":5}],4:[function(t,e,r){var i=t("./shader/compileProgram"),n=t("./shader/extractAttributes"),o=t("./shader/extractUniforms"),s=t("./shader/generateUniformAccessObject"),a=function(t,e,r){this.gl=t,this.program=i(t,e,r),this.attributes=n(t,this.program);var a=o(t,this.program);this.uniforms=s(t,a)};a.prototype.bind=function(){this.gl.useProgram(this.program)},a.prototype.destroy=function(){this.gl},e.exports=a},{"./shader/compileProgram":9,"./shader/extractAttributes":11,"./shader/extractUniforms":12,"./shader/generateUniformAccessObject":13}],5:[function(t,e,r){var i=function(t,e,r,i,n){this.gl=t,this.texture=t.createTexture(),this.mipmap=!1,this.premultiplyAlpha=!1,this.width=e||0,this.height=r||0,this.format=i||t.RGBA,this.type=n||t.UNSIGNED_BYTE};i.prototype.upload=function(t){this.bind();var e=this.gl;this.width=t.width,this.height=t.height,e.pixelStorei(e.UNPACK_PREMULTIPLY_ALPHA_WEBGL,this.premultiplyAlpha),e.texImage2D(e.TEXTURE_2D,0,this.format,this.format,this.type,t)};var n=!1;i.prototype.uploadData=function(t,e,r){if(this.bind(),this.width=e||this.width,this.height=r||this.height,t instanceof Float32Array){if(!n){var i=gl.getExtension("OES_texture_float");if(!i)throw new Error("floating point textures not available");n=!0}this.type=gl.FLOAT}else this.type=gl.UNSIGNED_BYTE;gl.pixelStorei(gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL,this.premultiplyAlpha),gl.texImage2D(gl.TEXTURE_2D,0,this.format,this.width,this.height,0,this.format,this.type,t)},i.prototype.bind=function(t){var e=this.gl;void 0!==t&&e.activeTexture(e.TEXTURE0+t),e.bindTexture(e.TEXTURE_2D,this.texture)},i.prototype.unbind=function(){var t=this.gl;t.bindTexture(t.TEXTURE_2D,null)},i.prototype.minFilter=function(t){var e=this.gl;this.bind(),this.mipmap?e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MIN_FILTER,t?e.LINEAR_MIPMAP_LINEAR:e.NEAREST_MIPMAP_NEAREST):e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MIN_FILTER,t?e.LINEAR:e.NEAREST)},i.prototype.magFilter=function(t){var e=this.gl;this.bind(),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MAG_FILTER,t?e.LINEAR:e.NEAREST)},i.prototype.enableMipmap=function(){this.bind(),this.mipmap=!0,gl.generateMipmap(gl.TEXTURE_2D)},i.prototype.enableLinearScaling=function(){this.minFilter(!0),this.magFilter(!0)},i.prototype.enableNearestScaling=function(){this.minFilter(!1),this.magFilter(!1)},i.prototype.enableWrapClamp=function(){var t=this.gl;this.bind(),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_WRAP_S,t.CLAMP_TO_EDGE),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_WRAP_T,t.CLAMP_TO_EDGE)},i.prototype.enableWrapRepeat=function(){var t=this.gl;this.bind(),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_WRAP_S,t.REPEAT),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_WRAP_T,t.REPEAT)},i.prototype.destroy=function(){var t=this.gl;t.deleteTexture(this.texture)},i.fromSource=function(t,e,r){var n=new i(t);return n.premultiplyAlpha=r||!1,n.upload(e),n},i.fromData=function(t,e,r,n){var o=new i(t);return o.uploadData(e,r,n),o},e.exports=i},{}],6:[function(t,e,r){function i(t){this.nativeVaoExtension=t.getExtension("OES_vertex_array_object")||t.getExtension("MOZ_OES_vertex_array_object")||t.getExtension("WEBKIT_OES_vertex_array_object"),this.nativeVaoExtension&&(this.nativeVao=this.nativeVaoExtension.createVertexArrayOES()),this.gl=t,this.attributes=[],this.indexBuffer=null,this.dirty=!1}i.prototype.constructor=i,e.exports=i,i.prototype.bind=function(){this.nativeVao?(this.nativeVaoExtension.bindVertexArrayOES(this.nativeVao),this.dirty&&(this.dirty=!1,this.activate())):this.activate()},i.prototype.unbind=function(){this.nativeVao&&this.nativeVaoExtension.bindVertexArrayOES(null)},i.prototype.activate=function(){for(var t=this.gl,e=0;es;s++){var a=t.getActiveAttrib(e,s),h=i(t,a.type);r[a.name]={type:h,size:n(h),location:t.getAttribLocation(e,a.name),pointer:function(e,r,i,n){t.vertexAttribPointer(this.location,this.size,e||t.FLOAT,r||!1,i||0,n||0)}}}return r};e.exports=o},{"./mapSize":14,"./mapType":15}],12:[function(t,e,r){var i=t("./mapType"),n=t("./defaultValue"),o=function(t,e){for(var r={},o=t.getProgramParameter(e,t.ACTIVE_UNIFORMS),s=0;o>s;s++){var a=t.getActiveUniform(e,s),h=a.name.replace(/\[.*?\]/,""),u=i(t,a.type);r[h]={type:u,size:a.size,location:t.getUniformLocation(e,h),value:n(u,a.size)}}return r};e.exports=o},{"./defaultValue":10,"./mapType":15}],13:[function(t,e,r){var i=function(t,e){var r={data:{}};r.gl=t;for(var i=Object.keys(e),a=0;a=0&&t.length%1===0}function c(t,e){for(var r=-1,i=t.length;++ri?i:null}):(r=Y(t),e=r.length,function(){return i++,e>i?r[i]:null})}function y(t,e){return e=null==e?t.length-1:+e,function(){for(var r=Math.max(arguments.length-e,0),i=Array(r),n=0;r>n;n++)i[n]=arguments[n+e];switch(e){case 0:return t.call(this,i);case 1:return t.call(this,arguments[0],i)}}}function x(t){return function(e,r,i){return t(e,i)}}function b(t){return function(e,r,i){i=u(i||n),e=e||[];var o=m(e);if(0>=t)return i(null);var s=!1,a=0,l=!1;!function c(){if(s&&0>=a)return i(null);for(;t>a&&!l;){var n=o();if(null===n)return s=!0,void(0>=a&&i(null));a+=1,r(e[n],n,h(function(t){a-=1,t?(i(t),l=!0):c()}))}}()}}function _(t){return function(e,r,i){return t(N.eachOf,e,r,i)}}function T(t){return function(e,r,i,n){return t(b(r),e,i,n)}}function E(t){return function(e,r,i){return t(N.eachOfSeries,e,r,i)}}function S(t,e,r,i){i=u(i||n),e=e||[];var o=l(e)?[]:{};t(e,function(t,e,i){r(t,function(t,r){o[e]=r,i(t)})},function(t){i(t,o)})}function w(t,e,r,i){var n=[];t(e,function(t,e,i){r(t,function(r){r&&n.push({index:e,value:t}),i()})},function(){i(p(n.sort(function(t,e){return t.index-e.index}),function(t){return t.value}))})}function C(t,e,r,i){w(t,e,function(t,e){r(t,function(t){e(!t)})},i)}function A(t,e,r){return function(i,n,o,s){function a(){s&&s(r(!1,void 0))}function h(t,i,n){return s?void o(t,function(i){s&&e(i)&&(s(r(!0,t)),s=o=!1),n()}):n()}arguments.length>3?t(i,n,h,a):(s=o,o=n,t(i,h,a))}}function M(t,e){return e}function R(t,e,r){r=r||n;var i=l(e)?[]:{};t(e,function(t,e,r){t(y(function(t,n){n.length<=1&&(n=n[0]),i[e]=n,r(t)}))},function(t){r(t,i)})}function O(t,e,r,i){var n=[];t(e,function(t,e,i){r(t,function(t,e){n=n.concat(e||[]),i(t)})},function(t){i(t,n)})}function D(t,e,r){function i(t,e,r,i){if(null!=i&&"function"!=typeof i)throw new Error("task callback must be a function");return t.started=!0,j(e)||(e=[e]),0===e.length&&t.idle()?N.setImmediate(function(){t.drain()}):(c(e,function(e){var o={data:e,callback:i||n};r?t.tasks.unshift(o):t.tasks.push(o),t.tasks.length===t.concurrency&&t.saturated()}),void N.setImmediate(t.process))}function o(t,e){return function(){s-=1;var r=!1,i=arguments;c(e,function(t){c(a,function(e,i){e!==t||r||(a.splice(i,1),r=!0)}),t.callback.apply(t,i)}),t.tasks.length+s===0&&t.drain(),t.process()}}if(null==e)e=1;else if(0===e)throw new Error("Concurrency must not be zero");var s=0,a=[],u={tasks:[],concurrency:e,payload:r,saturated:n,empty:n,drain:n,started:!1,paused:!1,push:function(t,e){i(u,t,!1,e)},kill:function(){u.drain=n,u.tasks=[]},unshift:function(t,e){i(u,t,!0,e)},process:function(){if(!u.paused&&s=e;e++)N.setImmediate(u.process)}}};return u}function P(t){return y(function(e,r){e.apply(null,r.concat([y(function(e,r){"object"==typeof console&&(e?console.error&&console.error(e):console[t]&&c(r,function(e){console[t](e)}))})]))})}function F(t){return function(e,r,i){t(d(e),r,i)}}function L(t){return y(function(e,r){var i=y(function(r){var i=this,n=r.pop();return t(e,function(t,e,n){t.apply(i,r.concat([n]))},n)});return r.length?i.apply(this,r):i})}function B(t){return y(function(e){var r=e.pop();e.push(function(){var t=arguments;i?N.setImmediate(function(){r.apply(null,t)}):r.apply(null,t)});var i=!0;t.apply(this,e),i=!1})}var I,N={},U="object"==typeof self&&self.self===self&&self||"object"==typeof i&&i.global===i&&i||this;null!=U&&(I=U.async),N.noConflict=function(){return U.async=I,N};var k=Object.prototype.toString,j=Array.isArray||function(t){return"[object Array]"===k.call(t)},G=function(t){var e=typeof t;return"function"===e||"object"===e&&!!t},Y=Object.keys||function(t){var e=[];for(var r in t)t.hasOwnProperty(r)&&e.push(r);return e},X="function"==typeof setImmediate&&setImmediate,z=X?function(t){X(t)}:function(t){setTimeout(t,0)};"object"==typeof e&&"function"==typeof e.nextTick?N.nextTick=e.nextTick:N.nextTick=z,N.setImmediate=X?z:N.nextTick,N.forEach=N.each=function(t,e,r){return N.eachOf(t,x(e),r)},N.forEachSeries=N.eachSeries=function(t,e,r){return N.eachOfSeries(t,x(e),r)},N.forEachLimit=N.eachLimit=function(t,e,r,i){return b(e)(t,x(r),i)},N.forEachOf=N.eachOf=function(t,e,r){function i(t){a--,t?r(t):null===o&&0>=a&&r(null)}r=u(r||n),t=t||[];for(var o,s=m(t),a=0;null!=(o=s());)a+=1,e(t[o],o,h(i));0===a&&r(null)},N.forEachOfSeries=N.eachOfSeries=function(t,e,r){function i(){var n=!0;return null===s?r(null):(e(t[s],s,h(function(t){if(t)r(t);else{if(s=o(),null===s)return r(null);n?N.setImmediate(i):i()}})),void(n=!1))}r=u(r||n),t=t||[];var o=m(t),s=o();i()},N.forEachOfLimit=N.eachOfLimit=function(t,e,r,i){b(e)(t,r,i)},N.map=_(S),N.mapSeries=E(S),N.mapLimit=T(S),N.inject=N.foldl=N.reduce=function(t,e,r,i){N.eachOfSeries(t,function(t,i,n){r(e,t,function(t,r){e=r,n(t)})},function(t){i(t,e)})},N.foldr=N.reduceRight=function(t,e,r,i){var n=p(t,o).reverse();N.reduce(n,e,r,i)},N.transform=function(t,e,r,i){3===arguments.length&&(i=r,r=e,e=j(t)?[]:{}),N.eachOf(t,function(t,i,n){r(e,t,i,n)},function(t){i(t,e)})},N.select=N.filter=_(w),N.selectLimit=N.filterLimit=T(w),N.selectSeries=N.filterSeries=E(w),N.reject=_(C),N.rejectLimit=T(C),N.rejectSeries=E(C),N.any=N.some=A(N.eachOf,s,o),N.someLimit=A(N.eachOfLimit,s,o),N.all=N.every=A(N.eachOf,a,a),N.everyLimit=A(N.eachOfLimit,a,a),N.detect=A(N.eachOf,o,M),N.detectSeries=A(N.eachOfSeries,o,M),N.detectLimit=A(N.eachOfLimit,o,M),N.sortBy=function(t,e,r){function i(t,e){var r=t.criteria,i=e.criteria;return i>r?-1:r>i?1:0}N.map(t,function(t,r){e(t,function(e,i){e?r(e):r(null,{value:t,criteria:i})})},function(t,e){return t?r(t):void r(null,p(e.sort(i),function(t){return t.value}))})},N.auto=function(t,e,r){function i(t){d.unshift(t)}function o(t){var e=g(d,t);e>=0&&d.splice(e,1)}function s(){h--,c(d.slice(0),function(t){t()})}r||(r=e,e=null),r=u(r||n);var a=Y(t),h=a.length;if(!h)return r(null);e||(e=h);var l={},p=0,d=[];i(function(){h||r(null,l)}),c(a,function(n){function a(){return e>p&&f(m,function(t,e){return t&&l.hasOwnProperty(e)},!0)&&!l.hasOwnProperty(n)}function h(){a()&&(p++,o(h),c[c.length-1](d,l))}for(var u,c=j(t[n])?t[n]:[t[n]],d=y(function(t,e){if(p--,e.length<=1&&(e=e[0]),t){var i={};v(l,function(t,e){i[e]=t}),i[n]=e,r(t,i)}else l[n]=e,N.setImmediate(s)}),m=c.slice(0,c.length-1),x=m.length;x--;){if(!(u=t[m[x]]))throw new Error("Has inexistant dependency");if(j(u)&&g(u,n)>=0)throw new Error("Has cyclic dependencies")}a()?(p++,c[c.length-1](d,l)):i(h)})},N.retry=function(t,e,r){function i(t,e){if("number"==typeof e)t.times=parseInt(e,10)||o;else{if("object"!=typeof e)throw new Error("Unsupported argument type for 'times': "+typeof e);t.times=parseInt(e.times,10)||o,t.interval=parseInt(e.interval,10)||s}}function n(t,e){function r(t,r){return function(i){t(function(t,e){i(!t||r,{err:t,result:e})},e)}}function i(t){return function(e){setTimeout(function(){e(null)},t)}}for(;h.times;){var n=!(h.times-=1);a.push(r(h.task,n)),!n&&h.interval>0&&a.push(i(h.interval))}N.series(a,function(e,r){r=r[r.length-1],(t||h.callback)(r.err,r.result)})}var o=5,s=0,a=[],h={times:o,interval:s},u=arguments.length;if(1>u||u>3)throw new Error("Invalid arguments - must be either (task), (task, callback), (times, task) or (times, task, callback)");return 2>=u&&"function"==typeof t&&(r=e,e=t),"function"!=typeof t&&i(h,t),h.callback=r,h.task=e,h.callback?n():n},N.waterfall=function(t,e){function r(t){return y(function(i,n){if(i)e.apply(null,[i].concat(n));else{var o=t.next();o?n.push(r(o)):n.push(e),B(t).apply(null,n)}})}if(e=u(e||n),!j(t)){var i=new Error("First argument to waterfall must be an array of functions");return e(i)}return t.length?void r(N.iterator(t))():e()},N.parallel=function(t,e){R(N.eachOf,t,e)},N.parallelLimit=function(t,e,r){R(b(e),t,r)},N.series=function(t,e){R(N.eachOfSeries,t,e)},N.iterator=function(t){function e(r){function i(){return t.length&&t[r].apply(null,arguments),i.next()}return i.next=function(){return ri;){var o=i+(n-i+1>>>1);r(e,t[o])>=0?i=o:n=o-1}return i}function o(t,e,o,s){if(null!=s&&"function"!=typeof s)throw new Error("task callback must be a function");return t.started=!0,j(e)||(e=[e]),0===e.length?N.setImmediate(function(){t.drain()}):void c(e,function(e){var a={data:e,priority:o,callback:"function"==typeof s?s:n};t.tasks.splice(i(t.tasks,a,r)+1,0,a),t.tasks.length===t.concurrency&&t.saturated(),N.setImmediate(t.process)})}var s=N.queue(t,e);return s.push=function(t,e,r){o(s,t,e,r)},delete s.unshift,s},N.cargo=function(t,e){return D(t,1,e)},N.log=P("log"),N.dir=P("dir"),N.memoize=function(t,e){var r={},i={};e=e||o;var n=y(function(n){var o=n.pop(),s=e.apply(null,n);s in r?N.setImmediate(function(){o.apply(null,r[s])}):s in i?i[s].push(o):(i[s]=[o],t.apply(null,n.concat([y(function(t){r[s]=t;var e=i[s];delete i[s];for(var n=0,o=e.length;o>n;n++)e[n].apply(null,t)})])))});return n.memo=r,n.unmemoized=t,n},N.unmemoize=function(t){return function(){return(t.unmemoized||t).apply(null,arguments)}},N.times=F(N.map),N.timesSeries=F(N.mapSeries),N.timesLimit=function(t,e,r,i){return N.mapLimit(d(t),e,r,i)},N.seq=function(){var t=arguments;return y(function(e){var r=this,i=e[e.length-1];"function"==typeof i?e.pop():i=n,N.reduce(t,e,function(t,e,i){e.apply(r,t.concat([y(function(t,e){i(t,e)})]))},function(t,e){i.apply(r,[t].concat(e))})})},N.compose=function(){return N.seq.apply(null,Array.prototype.reverse.call(arguments))},N.applyEach=L(N.eachOf),N.applyEachSeries=L(N.eachOfSeries),N.forever=function(t,e){function r(t){return t?i(t):void o(r)}var i=h(e||n),o=B(t);r()},N.ensureAsync=B,N.constant=y(function(t){var e=[null].concat(t);return function(t){return t.apply(this,e)}}),N.wrapSync=N.asyncify=function(t){return y(function(e){var r,i=e.pop();try{r=t.apply(this,e)}catch(n){return i(n)}G(r)&&"function"==typeof r.then?r.then(function(t){i(null,t)})["catch"](function(t){i(t.message?t:new Error(t))}):i(null,r)})},"object"==typeof r&&r.exports?r.exports=N:"function"==typeof t&&t.amd?t([],function(){return N}):U.async=N}()}).call(this,e("_process"),"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{_process:18}],17:[function(t,e,r){(function(t){function e(t,e){for(var r=0,i=t.length-1;i>=0;i--){var n=t[i];"."===n?t.splice(i,1):".."===n?(t.splice(i,1),r++):r&&(t.splice(i,1),r--)}if(e)for(;r--;r)t.unshift("..");return t}function i(t,e){if(t.filter)return t.filter(e);for(var r=[],i=0;i=-1&&!n;o--){var s=o>=0?arguments[o]:t.cwd();if("string"!=typeof s)throw new TypeError("Arguments to path.resolve must be strings");s&&(r=s+"/"+r,n="/"===s.charAt(0))}return r=e(i(r.split("/"),function(t){return!!t}),!n).join("/"),(n?"/":"")+r||"."},r.normalize=function(t){var n=r.isAbsolute(t),o="/"===s(t,-1);return t=e(i(t.split("/"),function(t){return!!t}),!n).join("/"),t||n||(t="."),t&&o&&(t+="/"),(n?"/":"")+t},r.isAbsolute=function(t){return"/"===t.charAt(0)},r.join=function(){var t=Array.prototype.slice.call(arguments,0);return r.normalize(i(t,function(t,e){if("string"!=typeof t)throw new TypeError("Arguments to path.join must be strings");return t}).join("/"))},r.relative=function(t,e){function i(t){for(var e=0;e=0&&""===t[r];r--);return e>r?[]:t.slice(e,r-e+1)}t=r.resolve(t).substr(1),e=r.resolve(e).substr(1);for(var n=i(t.split("/")),o=i(e.split("/")),s=Math.min(n.length,o.length),a=s,h=0;s>h;h++)if(n[h]!==o[h]){a=h;break}for(var u=[],h=a;he&&(e=t.length+e),t.substr(e,r)}}).call(this,t("_process"))},{_process:18}],18:[function(t,e,r){function i(){l=!1,a.length?u=a.concat(u):c=-1,u.length&&n()}function n(){if(!l){var t=setTimeout(i);l=!0;for(var e=u.length;e;){for(a=u,u=[];++c1)for(var r=1;r1&&(i=r[0]+"@",t=r[1]),t=t.replace(F,".");var n=t.split("."),o=s(n,e).join(".");return i+o}function h(t){for(var e,r,i=[],n=0,o=t.length;o>n;)e=t.charCodeAt(n++),e>=55296&&56319>=e&&o>n?(r=t.charCodeAt(n++),56320==(64512&r)?i.push(((1023&e)<<10)+(1023&r)+65536):(i.push(e),n--)):i.push(e);return i}function u(t){return s(t,function(t){var e="";return t>65535&&(t-=65536,e+=N(t>>>10&1023|55296),t=56320|1023&t),e+=N(t)}).join("")}function l(t){return 10>t-48?t-22:26>t-65?t-65:26>t-97?t-97:E}function c(t,e){return t+22+75*(26>t)-((0!=e)<<5)}function p(t,e,r){var i=0;for(t=r?I(t/A):t>>1,t+=I(t/e);t>B*w>>1;i+=E)t=I(t/B);return I(i+(B+1)*t/(t+C))}function d(t){var e,r,i,n,s,a,h,c,d,f,v=[],g=t.length,m=0,y=R,x=M;for(r=t.lastIndexOf(O),0>r&&(r=0),i=0;r>i;++i)t.charCodeAt(i)>=128&&o("not-basic"),v.push(t.charCodeAt(i));for(n=r>0?r+1:0;g>n;){for(s=m,a=1,h=E;n>=g&&o("invalid-input"),c=l(t.charCodeAt(n++)),(c>=E||c>I((T-m)/a))&&o("overflow"),m+=c*a,d=x>=h?S:h>=x+w?w:h-x,!(d>c);h+=E)f=E-d,a>I(T/f)&&o("overflow"),a*=f;e=v.length+1,x=p(m-s,e,0==s),I(m/e)>T-y&&o("overflow"),y+=I(m/e),m%=e,v.splice(m++,0,y)}return u(v)}function f(t){var e,r,i,n,s,a,u,l,d,f,v,g,m,y,x,b=[];for(t=h(t),g=t.length,e=R,r=0,s=M,a=0;g>a;++a)v=t[a],128>v&&b.push(N(v));for(i=n=b.length,n&&b.push(O);g>i;){for(u=T,a=0;g>a;++a)v=t[a],v>=e&&u>v&&(u=v);for(m=i+1,u-e>I((T-r)/m)&&o("overflow"),r+=(u-e)*m,e=u,a=0;g>a;++a)if(v=t[a],e>v&&++r>T&&o("overflow"),v==e){for(l=r,d=E;f=s>=d?S:d>=s+w?w:d-s,!(f>l);d+=E)x=l-f,y=E-f,b.push(N(c(f+x%y,0))),l=I(x/y);b.push(N(c(l,0))),s=p(r,m,i==n),r=0,++i}++r,++e}return b.join("")}function v(t){return a(t,function(t){return D.test(t)?d(t.slice(4).toLowerCase()):t})}function g(t){return a(t,function(t){return P.test(t)?"xn--"+f(t):t})}var m="object"==typeof i&&i&&!i.nodeType&&i,y="object"==typeof r&&r&&!r.nodeType&&r,x="object"==typeof e&&e;(x.global===x||x.window===x||x.self===x)&&(n=x);var b,_,T=2147483647,E=36,S=1,w=26,C=38,A=700,M=72,R=128,O="-",D=/^xn--/,P=/[^\x20-\x7E]/,F=/[\x2E\u3002\uFF0E\uFF61]/g,L={overflow:"Overflow: input needs wider integers to process","not-basic":"Illegal input >= 0x80 (not a basic code point)","invalid-input":"Invalid input"},B=E-S,I=Math.floor,N=String.fromCharCode;if(b={version:"1.3.2",ucs2:{decode:h,encode:u},decode:d,encode:f,toASCII:g,toUnicode:v},"function"==typeof t&&"object"==typeof t.amd&&t.amd)t("punycode",function(){return b});else if(m&&y)if(r.exports==m)y.exports=b;else for(_ in b)b.hasOwnProperty(_)&&(m[_]=b[_]);else n.punycode=b}(this)}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{}],20:[function(t,e,r){"use strict";function i(t,e){return Object.prototype.hasOwnProperty.call(t,e)}e.exports=function(t,e,r,o){e=e||"&",r=r||"=";var s={};if("string"!=typeof t||0===t.length)return s;var a=/\+/g;t=t.split(e);var h=1e3;o&&"number"==typeof o.maxKeys&&(h=o.maxKeys);var u=t.length;h>0&&u>h&&(u=h);for(var l=0;u>l;++l){var c,p,d,f,v=t[l].replace(a,"%20"),g=v.indexOf(r);g>=0?(c=v.substr(0,g),p=v.substr(g+1)):(c=v, -p=""),d=decodeURIComponent(c),f=decodeURIComponent(p),i(s,d)?n(s[d])?s[d].push(f):s[d]=[s[d],f]:s[d]=f}return s};var n=Array.isArray||function(t){return"[object Array]"===Object.prototype.toString.call(t)}},{}],21:[function(t,e,r){"use strict";function i(t,e){if(t.map)return t.map(e);for(var r=[],i=0;i",'"',"`"," ","\r","\n"," "],g=["{","}","|","\\","^","`"].concat(v),m=["'"].concat(g),y=["%","/","?",";","#"].concat(m),x=["/","?","#"],b=255,_=/^[a-z0-9A-Z_-]{0,63}$/,T=/^([a-z0-9A-Z_-]{0,63})(.*)$/,E={javascript:!0,"javascript:":!0},S={javascript:!0,"javascript:":!0},w={http:!0,https:!0,ftp:!0,gopher:!0,file:!0,"http:":!0,"https:":!0,"ftp:":!0,"gopher:":!0,"file:":!0},C=t("querystring");i.prototype.parse=function(t,e,r){if(!h(t))throw new TypeError("Parameter 'url' must be a string, not "+typeof t);var i=t;i=i.trim();var n=d.exec(i);if(n){n=n[0];var o=n.toLowerCase();this.protocol=o,i=i.substr(n.length)}if(r||n||i.match(/^\/\/[^@\/]+@[^@\/]+/)){var s="//"===i.substr(0,2);!s||n&&S[n]||(i=i.substr(2),this.slashes=!0)}if(!S[n]&&(s||n&&!w[n])){for(var a=-1,u=0;ul)&&(a=l)}var c,f;f=-1===a?i.lastIndexOf("@"):i.lastIndexOf("@",a),-1!==f&&(c=i.slice(0,f),i=i.slice(f+1),this.auth=decodeURIComponent(c)),a=-1;for(var u=0;ul)&&(a=l)}-1===a&&(a=i.length),this.host=i.slice(0,a),i=i.slice(a),this.parseHost(),this.hostname=this.hostname||"";var v="["===this.hostname[0]&&"]"===this.hostname[this.hostname.length-1];if(!v)for(var g=this.hostname.split(/\./),u=0,A=g.length;A>u;u++){var M=g[u];if(M&&!M.match(_)){for(var R="",O=0,D=M.length;D>O;O++)R+=M.charCodeAt(O)>127?"x":M[O];if(!R.match(_)){var P=g.slice(0,u),F=g.slice(u+1),L=M.match(T);L&&(P.push(L[1]),F.unshift(L[2])),F.length&&(i="/"+F.join(".")+i),this.hostname=P.join(".");break}}}if(this.hostname.length>b?this.hostname="":this.hostname=this.hostname.toLowerCase(),!v){for(var B=this.hostname.split("."),I=[],u=0;uu;u++){var j=m[u],G=encodeURIComponent(j);G===j&&(G=escape(j)),i=i.split(j).join(G)}var Y=i.indexOf("#");-1!==Y&&(this.hash=i.substr(Y),i=i.slice(0,Y));var X=i.indexOf("?");if(-1!==X?(this.search=i.substr(X),this.query=i.substr(X+1),e&&(this.query=C.parse(this.query)),i=i.slice(0,X)):e&&(this.search="",this.query={}),i&&(this.pathname=i),w[o]&&this.hostname&&!this.pathname&&(this.pathname="/"),this.pathname||this.search){var U=this.pathname||"",N=this.search||"";this.path=U+N}return this.href=this.format(),this},i.prototype.format=function(){var t=this.auth||"";t&&(t=encodeURIComponent(t),t=t.replace(/%3A/i,":"),t+="@");var e=this.protocol||"",r=this.pathname||"",i=this.hash||"",n=!1,o="";this.host?n=t+this.host:this.hostname&&(n=t+(-1===this.hostname.indexOf(":")?this.hostname:"["+this.hostname+"]"),this.port&&(n+=":"+this.port)),this.query&&u(this.query)&&Object.keys(this.query).length&&(o=C.stringify(this.query));var s=this.search||o&&"?"+o||"";return e&&":"!==e.substr(-1)&&(e+=":"),this.slashes||(!e||w[e])&&n!==!1?(n="//"+(n||""),r&&"/"!==r.charAt(0)&&(r="/"+r)):n||(n=""),i&&"#"!==i.charAt(0)&&(i="#"+i),s&&"?"!==s.charAt(0)&&(s="?"+s),r=r.replace(/[?#]/g,function(t){return encodeURIComponent(t)}),s=s.replace("#","%23"),e+n+r+s+i},i.prototype.resolve=function(t){return this.resolveObject(n(t,!1,!0)).format()},i.prototype.resolveObject=function(t){if(h(t)){var e=new i;e.parse(t,!1,!0),t=e}var r=new i;if(Object.keys(this).forEach(function(t){r[t]=this[t]},this),r.hash=t.hash,""===t.href)return r.href=r.format(),r;if(t.slashes&&!t.protocol)return Object.keys(t).forEach(function(e){"protocol"!==e&&(r[e]=t[e])}),w[r.protocol]&&r.hostname&&!r.pathname&&(r.path=r.pathname="/"),r.href=r.format(),r;if(t.protocol&&t.protocol!==r.protocol){if(!w[t.protocol])return Object.keys(t).forEach(function(e){r[e]=t[e]}),r.href=r.format(),r;if(r.protocol=t.protocol,t.host||S[t.protocol])r.pathname=t.pathname;else{for(var n=(t.pathname||"").split("/");n.length&&!(t.host=n.shift()););t.host||(t.host=""),t.hostname||(t.hostname=""),""!==n[0]&&n.unshift(""),n.length<2&&n.unshift(""),r.pathname=n.join("/")}if(r.search=t.search,r.query=t.query,r.host=t.host||"",r.auth=t.auth,r.hostname=t.hostname||t.host,r.port=t.port,r.pathname||r.search){var o=r.pathname||"",s=r.search||"";r.path=o+s}return r.slashes=r.slashes||t.slashes,r.href=r.format(),r}var a=r.pathname&&"/"===r.pathname.charAt(0),u=t.host||t.pathname&&"/"===t.pathname.charAt(0),p=u||a||r.host&&t.pathname,d=p,f=r.pathname&&r.pathname.split("/")||[],n=t.pathname&&t.pathname.split("/")||[],v=r.protocol&&!w[r.protocol];if(v&&(r.hostname="",r.port=null,r.host&&(""===f[0]?f[0]=r.host:f.unshift(r.host)),r.host="",t.protocol&&(t.hostname=null,t.port=null,t.host&&(""===n[0]?n[0]=t.host:n.unshift(t.host)),t.host=null),p=p&&(""===n[0]||""===f[0])),u)r.host=t.host||""===t.host?t.host:r.host,r.hostname=t.hostname||""===t.hostname?t.hostname:r.hostname,r.search=t.search,r.query=t.query,f=n;else if(n.length)f||(f=[]),f.pop(),f=f.concat(n),r.search=t.search,r.query=t.query;else if(!c(t.search)){if(v){r.hostname=r.host=f.shift();var g=r.host&&r.host.indexOf("@")>0?r.host.split("@"):!1;g&&(r.auth=g.shift(),r.host=r.hostname=g.shift())}return r.search=t.search,r.query=t.query,l(r.pathname)&&l(r.search)||(r.path=(r.pathname?r.pathname:"")+(r.search?r.search:"")),r.href=r.format(),r}if(!f.length)return r.pathname=null,r.search?r.path="/"+r.search:r.path=null,r.href=r.format(),r;for(var m=f.slice(-1)[0],y=(r.host||t.host)&&("."===m||".."===m)||""===m,x=0,b=f.length;b>=0;b--)m=f[b],"."==m?f.splice(b,1):".."===m?(f.splice(b,1),x++):x&&(f.splice(b,1),x--);if(!p&&!d)for(;x--;x)f.unshift("..");!p||""===f[0]||f[0]&&"/"===f[0].charAt(0)||f.unshift(""),y&&"/"!==f.join("/").substr(-1)&&f.push("");var _=""===f[0]||f[0]&&"/"===f[0].charAt(0);if(v){r.hostname=r.host=_?"":f.length?f.shift():"";var g=r.host&&r.host.indexOf("@")>0?r.host.split("@"):!1;g&&(r.auth=g.shift(),r.host=r.hostname=g.shift())}return p=p||r.host&&f.length,p&&!_&&f.unshift(""),f.length?r.pathname=f.join("/"):(r.pathname=null,r.path=null),l(r.pathname)&&l(r.search)||(r.path=(r.pathname?r.pathname:"")+(r.search?r.search:"")),r.auth=t.auth||r.auth,r.slashes=r.slashes||t.slashes,r.href=r.format(),r},i.prototype.parseHost=function(){var t=this.host,e=f.exec(t);e&&(e=e[0],":"!==e&&(this.port=e.substr(1)),t=t.substr(0,t.length-e.length)),t&&(this.hostname=t)}},{punycode:19,querystring:22}],24:[function(t,e,r){"use strict";function i(t,e,r){r=r||2;var i=e&&e.length,o=i?e[0]*r:t.length,a=n(t,0,o,r,!0),h=[];if(!a)return h;var u,l,p,d,f,v,g;if(i&&(a=c(t,e,a,r)),t.length>80*r){u=p=t[0],l=d=t[1];for(var m=r;o>m;m+=r)f=t[m],v=t[m+1],u>f&&(u=f),l>v&&(l=v),f>p&&(p=f),v>d&&(d=v);g=Math.max(p-u,d-l)}return s(a,h,r,u,l,g),h}function n(t,e,r,i,n){var o,s,a,h=0;for(o=e,s=r-i;r>o;o+=i)h+=(t[s]-t[o])*(t[o+1]+t[s+1]),s=o;if(n===h>0)for(o=e;r>o;o+=i)a=M(o,t[o],t[o+1],a);else for(o=r-i;o>=e;o-=i)a=M(o,t[o],t[o+1],a);return a}function o(t,e){if(!t)return t;e||(e=t);var r,i=t;do if(r=!1,i.steiner||!T(i,i.next)&&0!==_(i.prev,i,i.next))i=i.next;else{if(R(i),i=e=i.prev,i===i.next)return null;r=!0}while(r||i!==e);return e}function s(t,e,r,i,n,c,p){if(t){!p&&c&&v(t,i,n,c);for(var d,f,g=t;t.prev!==t.next;)if(d=t.prev,f=t.next,c?h(t,i,n,c):a(t))e.push(d.i/r),e.push(t.i/r),e.push(f.i/r),R(t),t=f.next,g=f.next;else if(t=f,t===g){p?1===p?(t=u(t,e,r),s(t,e,r,i,n,c,2)):2===p&&l(t,e,r,i,n,c):s(o(t),e,r,i,n,c,1);break}}}function a(t){var e=t.prev,r=t,i=t.next;if(_(e,r,i)>=0)return!1;for(var n=t.next.next;n!==t.prev;){if(x(e.x,e.y,r.x,r.y,i.x,i.y,n.x,n.y)&&_(n.prev,n,n.next)>=0)return!1;n=n.next}return!0}function h(t,e,r,i){var n=t.prev,o=t,s=t.next;if(_(n,o,s)>=0)return!1;for(var a=n.xo.x?n.x>s.x?n.x:s.x:o.x>s.x?o.x:s.x,l=n.y>o.y?n.y>s.y?n.y:s.y:o.y>s.y?o.y:s.y,c=m(a,h,e,r,i),p=m(u,l,e,r,i),d=t.nextZ;d&&d.z<=p;){if(d!==t.prev&&d!==t.next&&x(n.x,n.y,o.x,o.y,s.x,s.y,d.x,d.y)&&_(d.prev,d,d.next)>=0)return!1;d=d.nextZ}for(d=t.prevZ;d&&d.z>=c;){if(d!==t.prev&&d!==t.next&&x(n.x,n.y,o.x,o.y,s.x,s.y,d.x,d.y)&&_(d.prev,d,d.next)>=0)return!1;d=d.prevZ}return!0}function u(t,e,r){var i=t;do{var n=i.prev,o=i.next.next;E(n,i,i.next,o)&&w(n,o)&&w(o,n)&&(e.push(n.i/r),e.push(i.i/r),e.push(o.i/r),R(i),R(i.next),i=t=o),i=i.next}while(i!==t);return i}function l(t,e,r,i,n,a){var h=t;do{for(var u=h.next.next;u!==h.prev;){if(h.i!==u.i&&b(h,u)){var l=A(h,u);return h=o(h,h.next),l=o(l,l.next),s(h,e,r,i,n,a),void s(l,e,r,i,n,a)}u=u.next}h=h.next}while(h!==t)}function c(t,e,r,i){var s,a,h,u,l,c=[];for(s=0,a=e.length;a>s;s++)h=e[s]*i,u=a-1>s?e[s+1]*i:t.length,l=n(t,h,u,i,!1),l===l.next&&(l.steiner=!0),c.push(y(l));for(c.sort(p),s=0;s=i.next.y){var a=i.x+(o-i.y)*(i.next.x-i.x)/(i.next.y-i.y);n>=a&&a>s&&(s=a,r=i.x=i.x&&i.x>=r.x&&x(oh||h===l&&i.x>r.x)&&w(i,t)&&(r=i,l=h)),i=i.next;return r}function v(t,e,r,i){var n=t;do null===n.z&&(n.z=m(n.x,n.y,e,r,i)),n.prevZ=n.prev,n.nextZ=n.next,n=n.next;while(n!==t);n.prevZ.nextZ=null,n.prevZ=null,g(n)}function g(t){var e,r,i,n,o,s,a,h,u=1;do{for(r=t,t=null,o=null,s=0;r;){for(s++,i=r,a=0,e=0;u>e&&(a++,i=i.nextZ,i);e++);for(h=u;a>0||h>0&&i;)0===a?(n=i,i=i.nextZ,h--):0!==h&&i?r.z<=i.z?(n=r,r=r.nextZ,a--):(n=i,i=i.nextZ,h--):(n=r,r=r.nextZ,a--),o?o.nextZ=n:t=n,n.prevZ=o,o=n;r=i}o.nextZ=null,u*=2}while(s>1);return t}function m(t,e,r,i,n){return t=32767*(t-r)/n,e=32767*(e-i)/n,t=16711935&(t|t<<8),t=252645135&(t|t<<4),t=858993459&(t|t<<2),t=1431655765&(t|t<<1),e=16711935&(e|e<<8),e=252645135&(e|e<<4),e=858993459&(e|e<<2),e=1431655765&(e|e<<1),t|e<<1}function y(t){var e=t,r=t;do e.x=0&&(t-s)*(i-a)-(r-s)*(e-a)>=0&&(r-s)*(o-a)-(n-s)*(i-a)>=0}function b(t,e){return T(t,e)||t.next.i!==e.i&&t.prev.i!==e.i&&!S(t,e)&&w(t,e)&&w(e,t)&&C(t,e)}function _(t,e,r){return(e.y-t.y)*(r.x-e.x)-(e.x-t.x)*(r.y-e.y)}function T(t,e){return t.x===e.x&&t.y===e.y}function E(t,e,r,i){return _(t,e,r)>0!=_(t,e,i)>0&&_(r,i,t)>0!=_(r,i,e)>0}function S(t,e){var r=t;do{if(r.i!==t.i&&r.next.i!==t.i&&r.i!==e.i&&r.next.i!==e.i&&E(r,r.next,t,e))return!0;r=r.next}while(r!==t);return!1}function w(t,e){return _(t.prev,t,t.next)<0?_(t,e,t.next)>=0&&_(t,t.prev,e)>=0:_(t,e,t.prev)<0||_(t,t.next,e)<0}function C(t,e){var r=t,i=!1,n=(t.x+e.x)/2,o=(t.y+e.y)/2;do r.y>o!=r.next.y>o&&n<(r.next.x-r.x)*(o-r.y)/(r.next.y-r.y)+r.x&&(i=!i),r=r.next;while(r!==t);return i}function A(t,e){var r=new O(t.i,t.x,t.y),i=new O(e.i,e.x,e.y),n=t.next,o=e.prev;return t.next=e,e.prev=t,r.next=n,n.prev=r,i.next=r,r.prev=i,o.next=i,i.prev=o,i}function M(t,e,r,i){var n=new O(t,e,r);return i?(n.next=i.next,n.prev=i,i.next.prev=n,i.next=n):(n.prev=n,n.next=n),n}function R(t){t.next.prev=t.prev,t.prev.next=t.next,t.prevZ&&(t.prevZ.nextZ=t.nextZ),t.nextZ&&(t.nextZ.prevZ=t.prevZ)}function O(t,e,r){this.i=t,this.x=e,this.y=r,this.prev=null,this.next=null,this.z=null,this.prevZ=null,this.nextZ=null,this.steiner=!1}e.exports=i},{}],25:[function(t,e,r){"use strict";function i(t,e,r){this.fn=t,this.context=e,this.once=r||!1}function n(){}var o="function"!=typeof Object.create?"~":!1;n.prototype._events=void 0,n.prototype.listeners=function(t,e){var r=o?o+t:t,i=this._events&&this._events[r];if(e)return!!i;if(!i)return[];if(i.fn)return[i.fn];for(var n=0,s=i.length,a=new Array(s);s>n;n++)a[n]=i[n].fn;return a},n.prototype.emit=function(t,e,r,i,n,s){var a=o?o+t:t;if(!this._events||!this._events[a])return!1;var h,u,l=this._events[a],c=arguments.length;if("function"==typeof l.fn){switch(l.once&&this.removeListener(t,l.fn,void 0,!0),c){case 1:return l.fn.call(l.context),!0;case 2:return l.fn.call(l.context,e),!0;case 3:return l.fn.call(l.context,e,r),!0;case 4:return l.fn.call(l.context,e,r,i),!0;case 5:return l.fn.call(l.context,e,r,i,n),!0;case 6:return l.fn.call(l.context,e,r,i,n,s),!0}for(u=1,h=new Array(c-1);c>u;u++)h[u-1]=arguments[u];l.fn.apply(l.context,h)}else{var p,d=l.length;for(u=0;d>u;u++)switch(l[u].once&&this.removeListener(t,l[u].fn,void 0,!0),c){case 1:l[u].fn.call(l[u].context);break;case 2:l[u].fn.call(l[u].context,e);break;case 3:l[u].fn.call(l[u].context,e,r);break;default:if(!h)for(p=1,h=new Array(c-1);c>p;p++)h[p-1]=arguments[p];l[u].fn.apply(l[u].context,h)}}return!0},n.prototype.on=function(t,e,r){var n=new i(e,r||this),s=o?o+t:t;return this._events||(this._events=o?{}:Object.create(null)),this._events[s]?this._events[s].fn?this._events[s]=[this._events[s],n]:this._events[s].push(n):this._events[s]=n,this},n.prototype.once=function(t,e,r){var n=new i(e,r||this,!0),s=o?o+t:t;return this._events||(this._events=o?{}:Object.create(null)),this._events[s]?this._events[s].fn?this._events[s]=[this._events[s],n]:this._events[s].push(n):this._events[s]=n,this},n.prototype.removeListener=function(t,e,r,i){var n=o?o+t:t;if(!this._events||!this._events[n])return this;var s=this._events[n],a=[];if(e)if(s.fn)(s.fn!==e||i&&!s.once||r&&s.context!==r)&&a.push(s);else for(var h=0,u=s.length;u>h;h++)(s[h].fn!==e||i&&!s[h].once||r&&s[h].context!==r)&&a.push(s[h]);return a.length?this._events[n]=1===a.length?a[0]:a:delete this._events[n],this},n.prototype.removeAllListeners=function(t){return this._events?(t?delete this._events[o?o+t:t]:this._events=o?{}:Object.create(null),this):this},n.prototype.off=n.prototype.removeListener,n.prototype.addListener=n.prototype.on,n.prototype.setMaxListeners=function(){return this},n.prefixed=o,"undefined"!=typeof e&&(e.exports=n)},{}],26:[function(t,e,r){"use strict";function i(t){if(null===t||void 0===t)throw new TypeError("Object.assign cannot be called with null or undefined");return Object(t)}var n=Object.prototype.hasOwnProperty,o=Object.prototype.propertyIsEnumerable;e.exports=Object.assign||function(t,e){for(var r,s,a=i(t),h=1;h=t.length&&r())}if(r=r||function(){},!t.length)return r();var o=0;u(t,function(t){e(t,i(n))})},s.forEach=s.each,s.eachSeries=function(t,e,r){if(r=r||function(){},!t.length)return r();var i=0,n=function(){e(t[i],function(e){e?(r(e),r=function(){}):(i+=1,i>=t.length?r():n())})};n()},s.forEachSeries=s.eachSeries,s.eachLimit=function(t,e,r,i){var n=d(e);n.apply(null,[t,r,i])},s.forEachLimit=s.eachLimit;var d=function(t){return function(e,r,i){if(i=i||function(){},!e.length||0>=t)return i();var n=0,o=0,s=0;!function a(){if(n>=e.length)return i();for(;t>s&&o=e.length?i():a())})}()}},f=function(t){return function(){var e=Array.prototype.slice.call(arguments);return t.apply(null,[s.each].concat(e))}},v=function(t,e){return function(){var r=Array.prototype.slice.call(arguments);return e.apply(null,[d(t)].concat(r))}},g=function(t){return function(){var e=Array.prototype.slice.call(arguments);return t.apply(null,[s.eachSeries].concat(e))}},m=function(t,e,r,i){if(e=l(e,function(t,e){return{index:e,value:t}}),i){var n=[];t(e,function(t,e){r(t.value,function(r,i){n[t.index]=i,e(r)})},function(t){i(t,n)})}else t(e,function(t,e){r(t.value,function(t){e(t)})})};s.map=f(m),s.mapSeries=g(m),s.mapLimit=function(t,e,r,i){return y(e)(t,r,i)};var y=function(t){return v(t,m)};s.reduce=function(t,e,r,i){s.eachSeries(t,function(t,i){r(e,t,function(t,r){e=r,i(t)})},function(t){i(t,e)})},s.inject=s.reduce,s.foldl=s.reduce,s.reduceRight=function(t,e,r,i){var n=l(t,function(t){return t}).reverse();s.reduce(n,e,r,i)},s.foldr=s.reduceRight;var x=function(t,e,r,i){var n=[];e=l(e,function(t,e){return{index:e,value:t}}),t(e,function(t,e){r(t.value,function(r){r&&n.push(t),e()})},function(t){i(l(n.sort(function(t,e){return t.index-e.index}),function(t){return t.value}))})};s.filter=f(x),s.filterSeries=g(x),s.select=s.filter,s.selectSeries=s.filterSeries;var b=function(t,e,r,i){var n=[];e=l(e,function(t,e){return{index:e,value:t}}),t(e,function(t,e){r(t.value,function(r){r||n.push(t),e()})},function(t){i(l(n.sort(function(t,e){return t.index-e.index}),function(t){return t.value}))})};s.reject=f(b),s.rejectSeries=g(b);var _=function(t,e,r,i){t(e,function(t,e){r(t,function(r){r?(i(t),i=function(){}):e()})},function(t){i()})};s.detect=f(_),s.detectSeries=g(_),s.some=function(t,e,r){s.each(t,function(t,i){e(t,function(t){t&&(r(!0),r=function(){}),i()})},function(t){r(!1)})},s.any=s.some,s.every=function(t,e,r){s.each(t,function(t,i){e(t,function(t){t||(r(!1),r=function(){}),i()})},function(t){r(!0)})},s.all=s.every,s.sortBy=function(t,e,r){s.map(t,function(t,r){e(t,function(e,i){e?r(e):r(null,{value:t,criteria:i})})},function(t,e){if(t)return r(t);var i=function(t,e){var r=t.criteria,i=e.criteria;return i>r?-1:r>i?1:0};r(null,l(e.sort(i),function(t){return t.value}))})},s.auto=function(t,e){e=e||function(){};var r=p(t),i=r.length;if(!i)return e();var n={},o=[],a=function(t){o.unshift(t)},l=function(t){for(var e=0;ei;){var o=i+(n-i+1>>>1);r(e,t[o])>=0?i=o:n=o-1}return i}function n(t,e,n,o){return t.started||(t.started=!0),h(e)||(e=[e]),0==e.length?s.setImmediate(function(){t.drain&&t.drain()}):void u(e,function(e){var a={data:e,priority:n,callback:"function"==typeof o?o:null};t.tasks.splice(i(t.tasks,a,r)+1,0,a),t.saturated&&t.tasks.length===t.concurrency&&t.saturated(),s.setImmediate(t.process)})}var o=s.queue(t,e);return o.push=function(t,e,r){n(o,t,e,r)},delete o.unshift,o},s.cargo=function(t,e){var r=!1,i=[],n={tasks:i,payload:e,saturated:null,empty:null,drain:null,drained:!0,push:function(t,r){h(t)||(t=[t]),u(t,function(t){i.push({data:t,callback:"function"==typeof r?r:null}),n.drained=!1,n.saturated&&i.length===e&&n.saturated()}),s.setImmediate(n.process)},process:function o(){if(!r){if(0===i.length)return n.drain&&!n.drained&&n.drain(),void(n.drained=!0);var s="number"==typeof e?i.splice(0,e):i.splice(0,i.length),a=l(s,function(t){return t.data});n.empty&&n.empty(),r=!0,t(a,function(){r=!1;var t=arguments;u(s,function(e){e.callback&&e.callback.apply(null,t)}),o()})}},length:function(){return i.length},running:function(){return r}};return n};var S=function(t){return function(e){var r=Array.prototype.slice.call(arguments,1);e.apply(null,r.concat([function(e){var r=Array.prototype.slice.call(arguments,1);"undefined"!=typeof console&&(e?console.error&&console.error(e):console[t]&&u(r,function(e){console[t](e)}))}]))}};s.log=S("log"),s.dir=S("dir"),s.memoize=function(t,e){var r={},i={};e=e||function(t){return t};var n=function(){var n=Array.prototype.slice.call(arguments),o=n.pop(),a=e.apply(null,n);a in r?s.nextTick(function(){o.apply(null,r[a])}):a in i?i[a].push(o):(i[a]=[o],t.apply(null,n.concat([function(){r[a]=arguments;var t=i[a];delete i[a];for(var e=0,n=t.length;n>e;e++)t[e].apply(null,arguments)}])))};return n.memo=r,n.unmemoized=t,n},s.unmemoize=function(t){return function(){return(t.unmemoized||t).apply(null,arguments)}},s.times=function(t,e,r){for(var i=[],n=0;t>n;n++)i.push(n);return s.map(i,e,r)},s.timesSeries=function(t,e,r){for(var i=[],n=0;t>n;n++)i.push(n);return s.mapSeries(i,e,r)},s.seq=function(){var t=arguments;return function(){var e=this,r=Array.prototype.slice.call(arguments),i=r.pop();s.reduce(t,r,function(t,r,i){r.apply(e,t.concat([function(){var t=arguments[0],e=Array.prototype.slice.call(arguments,1);i(t,e)}]))},function(t,r){i.apply(e,[t].concat(r))})}},s.compose=function(){return s.seq.apply(null,Array.prototype.reverse.call(arguments))};var w=function(t,e){var r=function(){var r=this,i=Array.prototype.slice.call(arguments),n=i.pop();return t(e,function(t,e){t.apply(r,i.concat([e]))},n)};if(arguments.length>2){var i=Array.prototype.slice.call(arguments,2);return r.apply(this,i)}return r};s.applyEach=f(w),s.applyEachSeries=g(w),s.forever=function(t,e){function r(i){if(i){if(e)return e(i);throw i}t(r)}r()},"undefined"!=typeof r&&r.exports?r.exports=s:"undefined"!=typeof t&&t.amd?t([],function(){return s}):n.async=s}()}).call(this,e("_process"))},{_process:18}],28:[function(t,e,r){function i(t,e){a.call(this),e=e||10,this.baseUrl=t||"",this.progress=0,this.loading=!1,this._progressChunk=0,this._beforeMiddleware=[],this._afterMiddleware=[],this._boundLoadResource=this._loadResource.bind(this),this._boundOnLoad=this._onLoad.bind(this),this._buffer=[],this._numToLoad=0,this._queue=n.queue(this._boundLoadResource,e),this.resources={}}var n=t("async"),o=t("url"),s=t("./Resource"),a=t("eventemitter3");i.prototype=Object.create(a.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.add=i.prototype.enqueue=function(t,e,r,i){if(Array.isArray(t)){for(var n=0;n0)if(this.xhrType===i.XHR_RESPONSE_TYPE.TEXT)this.data=t.responseText;else if(this.xhrType===i.XHR_RESPONSE_TYPE.JSON)try{this.data=JSON.parse(t.responseText),this.isJson=!0}catch(r){this.error=new Error("Error trying to parse loaded json:",r)}else if(this.xhrType===i.XHR_RESPONSE_TYPE.DOCUMENT)try{if(window.DOMParser){var n=new DOMParser;this.data=n.parseFromString(t.responseText,"text/xml")}else{var o=document.createElement("div");o.innerHTML=t.responseText,this.data=o}this.isXml=!0}catch(r){this.error=new Error("Error trying to parse loaded xml:",r)}else this.data=t.response||t.responseText;else this.error=new Error("["+t.status+"]"+t.statusText+":"+t.responseURL);this.complete()},i.prototype._determineCrossOrigin=function(t,e){if(0===t.indexOf("data:"))return"";e=e||window.location,u||(u=document.createElement("a")),u.href=t,t=a.parse(u.href);var r=!t.port&&""===e.port||t.port===e.port;return t.hostname===e.hostname&&r&&t.protocol===e.protocol?"":"anonymous"},i.prototype._determineXhrType=function(){return i._xhrTypeMap[this._getExtension()]||i.XHR_RESPONSE_TYPE.TEXT},i.prototype._determineLoadType=function(){return i._loadTypeMap[this._getExtension()]||i.LOAD_TYPE.XHR},i.prototype._getExtension=function(){var t,e=this.url;if(this.isDataUrl){var r=e.indexOf("/");t=e.substring(r+1,e.indexOf(";",r))}else{var i=e.indexOf("?");-1!==i&&(e=e.substring(0,i)),t=e.substring(e.lastIndexOf(".")+1)}return t},i.prototype._getMimeFromXhrType=function(t){switch(t){case i.XHR_RESPONSE_TYPE.BUFFER:return"application/octet-binary";case i.XHR_RESPONSE_TYPE.BLOB:return"application/blob";case i.XHR_RESPONSE_TYPE.DOCUMENT:return"application/xml";case i.XHR_RESPONSE_TYPE.JSON:return"application/json";case i.XHR_RESPONSE_TYPE.DEFAULT:case i.XHR_RESPONSE_TYPE.TEXT:default:return"text/plain"}},i.LOAD_TYPE={XHR:1,IMAGE:2,AUDIO:3,VIDEO:4},i.XHR_READY_STATE={UNSENT:0,OPENED:1,HEADERS_RECEIVED:2,LOADING:3,DONE:4},i.XHR_RESPONSE_TYPE={DEFAULT:"text",BUFFER:"arraybuffer",BLOB:"blob",DOCUMENT:"document",JSON:"json",TEXT:"text"},i._loadTypeMap={gif:i.LOAD_TYPE.IMAGE,png:i.LOAD_TYPE.IMAGE,bmp:i.LOAD_TYPE.IMAGE,jpg:i.LOAD_TYPE.IMAGE,jpeg:i.LOAD_TYPE.IMAGE,tif:i.LOAD_TYPE.IMAGE,tiff:i.LOAD_TYPE.IMAGE,webp:i.LOAD_TYPE.IMAGE,tga:i.LOAD_TYPE.IMAGE},i._xhrTypeMap={xhtml:i.XHR_RESPONSE_TYPE.DOCUMENT,html:i.XHR_RESPONSE_TYPE.DOCUMENT,htm:i.XHR_RESPONSE_TYPE.DOCUMENT,xml:i.XHR_RESPONSE_TYPE.DOCUMENT,tmx:i.XHR_RESPONSE_TYPE.DOCUMENT,tsx:i.XHR_RESPONSE_TYPE.DOCUMENT,svg:i.XHR_RESPONSE_TYPE.DOCUMENT,gif:i.XHR_RESPONSE_TYPE.BLOB,png:i.XHR_RESPONSE_TYPE.BLOB,bmp:i.XHR_RESPONSE_TYPE.BLOB,jpg:i.XHR_RESPONSE_TYPE.BLOB,jpeg:i.XHR_RESPONSE_TYPE.BLOB,tif:i.XHR_RESPONSE_TYPE.BLOB,tiff:i.XHR_RESPONSE_TYPE.BLOB,webp:i.XHR_RESPONSE_TYPE.BLOB,tga:i.XHR_RESPONSE_TYPE.BLOB,json:i.XHR_RESPONSE_TYPE.JSON,text:i.XHR_RESPONSE_TYPE.TEXT,txt:i.XHR_RESPONSE_TYPE.TEXT},i.setExtensionLoadType=function(t,e){o(i._loadTypeMap,t,e)},i.setExtensionXhrType=function(t,e){o(i._xhrTypeMap,t,e)}},{eventemitter3:25,url:23}],30:[function(t,e,r){e.exports={_keyStr:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",encodeBinary:function(t){for(var e,r="",i=new Array(4),n=0,o=0,s=0;n>2,i[1]=(3&e[0])<<4|e[1]>>4,i[2]=(15&e[1])<<2|e[2]>>6,i[3]=63&e[2],s=n-(t.length-1)){case 2:i[3]=64,i[2]=64;break;case 1:i[3]=64}for(o=0;o","Richard Davey "],main:"./src/index.js",homepage:"http://goodboydigital.com/",bugs:"https://github.com/pixijs/pixi.js/issues",license:"MIT",repository:{type:"git",url:"https://github.com/pixijs/pixi.js.git"},scripts:{start:"gulp && gulp watch",test:"gulp && testem ci",build:"gulp",docs:"jsdoc -c ./gulp/util/jsdoc.conf.json -R README.md"},files:["bin/","src/","CONTRIBUTING.md","LICENSE","package.json","README.md"],dependencies:{async:"^1.5.0",brfs:"^1.4.1",earcut:"^2.0.7",eventemitter3:"^1.1.1","object-assign":"^4.0.1","pixi-gl-core":"git+https://github.com/GoodBoyDigital/pixi-gl-core.git","resource-loader":"^1.6.4"},devDependencies:{browserify:"^11.1.0",chai:"^3.2.0",del:"^2.0.2",gulp:"^3.9.0","gulp-cached":"^1.1.0","gulp-concat":"^2.6.0","gulp-debug":"^2.1.0","gulp-header":"^1.7.1","gulp-jshint":"^1.11.2","gulp-mirror":"^0.4.0","gulp-plumber":"^1.0.1","gulp-rename":"^1.2.2","gulp-sourcemaps":"^1.5.2","gulp-uglify":"^1.4.1","gulp-util":"^3.0.6","jaguarjs-jsdoc":"git+https://github.com/davidshimjs/jaguarjs-jsdoc.git",jsdoc:"^3.3.2","jshint-summary":"^0.4.0",minimist:"^1.2.0",mocha:"^2.3.2","require-dir":"^0.3.0","run-sequence":"^1.1.2",testem:"^0.9.4","vinyl-buffer":"^1.0.0","vinyl-source-stream":"^1.1.0",watchify:"^3.4.0"},browserify:{transform:["brfs"]}}},{}],35:[function(t,e,r){function i(t){var e=document.createElement("div");e.style.width="100px",e.style.height="100px",e.style.position="absolute",e.style.top=0,e.style.left=0,e.style.zIndex=2,this.div=e,this.pool=[],this.renderId=0,this.debug=!1,this.renderer=t,this.children=[],this._onKeyDown=this._onKeyDown.bind(this),this._onMouseMove=this._onMouseMove.bind(this),this.isActive=!1,window.addEventListener("keydown",this._onKeyDown,!1)}var n=t("../core");Object.assign(n.DisplayObject.prototype,t("./accessibleTarget")),i.prototype.constructor=i,e.exports=i,i.prototype.activate=function(){this.isActive||(this.isActive=!0,window.document.addEventListener("mousemove",this._onMouseMove,!0),window.removeEventListener("keydown",this._onKeyDown,!1),this.renderer.on("postrender",this.update,this),this.renderer.view.parentNode.appendChild(this.div))},i.prototype.deactivate=function(){this.isActive&&(this.isActive=!1,window.document.removeEventListener("mousemove",this._onMouseMove),window.addEventListener("keydown",this._onKeyDown,!1),this.renderer.off("postrender",this.update),this.div.parentNode.removeChild(this.div))},i.prototype.updateAccessibleObjects=function(t){if(t.visible){t.accessible&&t.interactive&&(t._accessibleActive||this.addChild(t),t.renderId=this.renderId);for(var e=t.children,r=e.length-1;r>=0;r--)this.updateAccessibleObjects(e[r])}},i.prototype.update=function(){this.updateAccessibleObjects(this.renderer._lastObjectRendered);var t=this.renderer.view.getBoundingClientRect(),e=t.width/this.renderer.width,r=t.height/this.renderer.height,i=this.div;i.style.left=t.left+"px",i.style.top=t.top+"px",i.style.width=this.renderer.width+"px",i.style.height=this.renderer.height+"px";for(var o=0;othis.renderer.width&&(t.width=this.renderer.width-t.x),t.y+t.height>this.renderer.height&&(t.height=this.renderer.height-t.y)},i.prototype.addChild=function(t){var e=this.pool.pop();e||(e=document.createElement("button"),e.style.width="100px",e.style.height="100px",e.style.backgroundColor=this.debug?"rgba(255,0,0,0.5)":"transparent",e.style.position="absolute",e.style.zIndex=2,e.style.borderStyle="none",e.addEventListener("click",this._onClick.bind(this)),e.addEventListener("focus",this._onFocus.bind(this)),e.addEventListener("focusout",this._onFocusOut.bind(this))),e.title=t.accessibleTitle||"displayObject "+this.tabIndex,t._accessibleActive=!0,t._accessibleDiv=e,e.displayObject=t,this.children.push(t),this.div.appendChild(t._accessibleDiv),t._accessibleDiv.tabIndex=t.tabIndex},i.prototype._onClick=function(t){var e=this.renderer.plugins.interaction;e.dispatchEvent(t.target.displayObject,"click",e.eventData)},i.prototype._onFocus=function(t){var e=this.renderer.plugins.interaction;e.dispatchEvent(t.target.displayObject,"mouseover",e.eventData)},i.prototype._onFocusOut=function(t){var e=this.renderer.plugins.interaction;e.dispatchEvent(t.target.displayObject,"mouseout",e.eventData)},i.prototype._onKeyDown=function(t){9===t.keyCode&&this.activate()},i.prototype._onMouseMove=function(){this.deactivate()},i.prototype.destroy=function(){this.div=null;for(var t=0;t1)for(var r=0;e>r;r++)this.addChild(arguments[r]);else t.parent&&t.parent.removeChild(t),t.parent=this,this.children.push(t),this.onChildrenChange(this.children.length-1),t.emit("added",this);return t},i.prototype.addChildAt=function(t,e){if(e>=0&&e<=this.children.length)return t.parent&&t.parent.removeChild(t),t.parent=this,this.children.splice(e,0,t),this.onChildrenChange(e),t.emit("added",this),t;throw new Error(t+"addChildAt: The index "+e+" supplied is out of bounds "+this.children.length)},i.prototype.swapChildren=function(t,e){if(t!==e){var r=this.getChildIndex(t),i=this.getChildIndex(e);if(0>r||0>i)throw new Error("swapChildren: Both the supplied DisplayObjects must be children of the caller.");this.children[r]=e,this.children[i]=t,this.onChildrenChange(i>r?r:i)}},i.prototype.getChildIndex=function(t){var e=this.children.indexOf(t);if(-1===e)throw new Error("The supplied DisplayObject must be a child of the caller");return e},i.prototype.setChildIndex=function(t,e){if(0>e||e>=this.children.length)throw new Error("The supplied index is out of bounds");var r=this.getChildIndex(t);o.removeItems(this.children,r,1),this.children.splice(e,0,t),this.onChildrenChange(e)},i.prototype.getChildAt=function(t){if(0>t||t>=this.children.length)throw new Error("getChildAt: Supplied index "+t+" does not exist in the child list, or the supplied DisplayObject is not a child of the caller");return this.children[t]},i.prototype.removeChild=function(t){var e=arguments.length;if(e>1)for(var r=0;e>r;r++)this.removeChild(arguments[r]);else{var i=this.children.indexOf(t);if(-1===i)return;t.parent=null,o.removeItems(this.children,i,1),this.onChildrenChange(i),t.emit("removed",this)}return t},i.prototype.removeChildAt=function(t){var e=this.getChildAt(t);return e.parent=null,o.removeItems(this.children,t,1),this.onChildrenChange(t),e.emit("removed",this),e},i.prototype.removeChildren=function(t,e){var r,i,n=t||0,o="number"==typeof e?e:this.children.length,s=o-n;if(s>0&&o>=s){for(r=this.children.splice(n,s),i=0;it;++t)this.children[t].updateTransform();this.dirty=!1}},i.prototype.containerUpdateTransform=i.prototype.updateTransform,i.prototype.getBounds=function(){if(!this._currentBounds){if(0===this.children.length)return n.Rectangle.EMPTY;for(var t,e,r,i=1/0,o=1/0,s=-(1/0),a=-(1/0),h=!1,u=0,l=this.children.length;l>u;++u){var c=this.children[u];c.visible&&(h=!0,t=this.children[u].getBounds(),i=ie?s:e,a=a>r?a:r)}if(!h)return n.Rectangle.EMPTY;var p=this._bounds;p.x=i,p.y=o,p.width=s-i,p.height=a-o,this._currentBounds=p}return this._currentBounds},i.prototype.containerGetBounds=i.prototype.getBounds,i.prototype.getLocalBounds=function(){var t=this.worldTransform;this.worldTransform=n.Matrix.IDENTITY;for(var e=0,r=this.children.length;r>e;++e)this.children[e].updateTransform();return this.worldTransform=t,this._currentBounds=null,this.getBounds(n.Matrix.IDENTITY)},i.prototype.renderWebGL=function(t){if(this.visible&&!(this.worldAlpha<=0)&&this.renderable){var e,r;if(this._mask||this._filters){for(t.currentRenderer.flush(),this._filters&&this._filters.length&&t.filterManager.pushFilter(this,this._filters),this._mask&&t.maskManager.pushMask(this,this._mask),t.currentRenderer.start(),this._renderWebGL(t),e=0,r=this.children.length;r>e;e++)this.children[e].renderWebGL(t);t.currentRenderer.flush(),this._mask&&t.maskManager.popMask(this,this._mask),this._filters&&t.filterManager.popFilter(),t.currentRenderer.start()}else for(this._renderWebGL(t),e=0,r=this.children.length;r>e;++e)this.children[e].renderWebGL(t)}},i.prototype._renderWebGL=function(t){},i.prototype._renderCanvas=function(t){},i.prototype.renderCanvas=function(t){if(this.visible&&!(this.alpha<=0)&&this.renderable){this._mask&&t.maskManager.pushMask(this._mask,t),this._renderCanvas(t);for(var e=0,r=this.children.length;r>e;++e)this.children[e].renderCanvas(t);this._mask&&t.maskManager.popMask(t)}},i.prototype.destroy=function(t){if(s.prototype.destroy.call(this),t)for(var e=0,r=this.children.length;r>e;++e)this.children[e].destroy(t);this.removeChildren(),this.children=null}},{"../math":48,"../textures/RenderTexture":91,"../utils":98,"./DisplayObject":40}],40:[function(t,e,r){function i(){s.call(this),this.position=new n.Point,this.scale=new n.Point(1,1),this.pivot=new n.Point(0,0),this.skew=new n.Point(0,0),this._rotation=0,this.alpha=1,this.visible=!0,this.renderable=!0,this.parent=null,this.worldAlpha=1,this.worldTransform=new n.Matrix,this.localTransform=new n.Matrix,this.filterArea=null,this._sr=0,this._cr=1,this._bounds=new n.Rectangle(0,0,1,1),this._currentBounds=null,this._mask=null,this.dirty=!0}var n=t("../math"),o=t("../textures/RenderTexture"),s=t("eventemitter3"),a=(t("../const"),new n.Matrix),h={worldTransform:new n.Matrix,worldAlpha:1,children:[]};i.prototype=Object.create(s.prototype),i.prototype.constructor=i,e.exports=i,Object.defineProperties(i.prototype,{x:{get:function(){return this.position.x},set:function(t){this.position.x=t,this.dirty=!0}},y:{get:function(){return this.position.y},set:function(t){this.position.y=t,this.dirty=!0}},scaleX:{get:function(){return this.scale.x},set:function(t){this.scale.x=t,this.dirty=!0}},scaleY:{get:function(){return this.scale.y},set:function(t){this.scale.y=t,this.dirty=!0}},rotation:{get:function(){return this._rotation},set:function(t){this._rotation=t,this.dirty=!0,this._sr=Math.sin(t),this._cr=Math.cos(t)}},scaleY:{get:function(){return this.scale.y},set:function(t){this.scale.y=t,this.dirty=!0}},worldVisible:{get:function(){var t=this;do{if(!t.visible)return!1;t=t.parent}while(t);return!0}},mask:{get:function(){return this._mask},set:function(t){this._mask&&(this._mask.renderable=!0),this._mask=t,this._mask&&(this._mask.renderable=!1)}},filters:{get:function(){return this._filters&&this._filters.slice()},set:function(t){this._filters=t&&t.slice()}}}),i.prototype.updateTransform=function(){var t=this.parent.worldTransform,e=this.worldTransform,r=this.localTransform;this.dirty&&(r.a=this._cr*this.scale.x,r.b=this._sr*this.scale.x,r.c=-this._sr*this.scale.y,r.d=this._cr*this.scale.y,r.tx=this.position.x-(this.pivot.x*r.a+this.pivot.y*r.c),r.ty=this.position.y-(this.pivot.x*r.b+this.pivot.y*r.d)),(this.dirty||this.parent.dirty)&&(e.a=r.a*t.a+r.b*t.c,e.b=r.a*t.b+r.b*t.d,e.c=r.c*t.a+r.d*t.c,e.d=r.c*t.b+r.d*t.d,e.tx=r.tx*t.a+r.ty*t.c+t.tx,e.ty=r.tx*t.b+r.ty*t.d+t.ty,this._currentBounds=null),this.worldAlpha=this.alpha*this.parent.worldAlpha},i.prototype.displayObjectUpdateTransform=i.prototype.updateTransform,i.prototype.getBounds=function(t){return n.Rectangle.EMPTY},i.prototype.getLocalBounds=function(){return this.getBounds(n.Matrix.IDENTITY)},i.prototype.toGlobal=function(t){return this.parent?this.displayObjectUpdateTransform():(this.parent=h,this.displayObjectUpdateTransform(),this.parent=null),this.worldTransform.apply(t)},i.prototype.toLocal=function(t,e,r){return e&&(t=e.toGlobal(t)),this.parent?this.displayObjectUpdateTransform():(this.parent=h,this.displayObjectUpdateTransform(),this.parent=null),this.worldTransform.applyInverse(t,r)},i.prototype.renderWebGL=function(t){},i.prototype.renderCanvas=function(t){},i.prototype.generateTexture=function(t,e,r){var i=this.getLocalBounds(),n=new o(t,0|i.width,0|i.height,e,r);return a.tx=-i.x,a.ty=-i.y,n.render(this,a),n},i.prototype.setParent=function(t){if(!t||!t.addChild)throw new Error("setParent: Argument must be a Container");return t.addChild(this),t},i.prototype.setTransform=function(t,e,r,i,n,o,s,a,h){return this.position.x=t||0,this.position.y=e||0,this.scale.x=r?r:1,this.scale.y=i?i:1,this.rotation=n||0,this.skew.x=o||0,this.skew.y=s||0,this.pivot.x=a||0,this.pivot.y=h||0,this.dirty=!0,this},i.prototype.destroy=function(){this.position=null,this.scale=null,this.pivot=null,this.skew=null,this.parent=null,this._bounds=null,this._currentBounds=null,this._mask=null,this.worldTransform=null,this.filterArea=null}},{"../const":38,"../math":48,"../textures/RenderTexture":91,eventemitter3:25}],41:[function(t,e,r){function i(){n.call(this),this.fillAlpha=1,this.lineWidth=0,this.lineColor=0,this.graphicsData=[],this.tint=16777215,this._prevTint=16777215,this.blendMode=l.BLEND_MODES.NORMAL,this.currentPath=null,this._webGL={},this.isMask=!1,this.boundsPadding=0,this._localBounds=new u.Rectangle(0,0,1,1),this.dirty=!0,this.glDirty=!1,this.boundsDirty=!0,this.cachedSpriteDirty=!1}var n=t("../display/Container"),o=t("../textures/Texture"),s=t("../renderers/canvas/utils/CanvasBuffer"),a=t("../renderers/canvas/utils/CanvasGraphics"),h=t("./GraphicsData"),u=t("../math"),l=t("../const"),c=new u.Point;i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.clone=function(){var t=new i;t.renderable=this.renderable,t.fillAlpha=this.fillAlpha,t.lineWidth=this.lineWidth,t.lineColor=this.lineColor,t.tint=this.tint,t.blendMode=this.blendMode,t.isMask=this.isMask,t.boundsPadding=this.boundsPadding,t.dirty=!0,t.glDirty=!0,t.cachedSpriteDirty=this.cachedSpriteDirty;for(var e=0;e=c;++c)l=c/s,n=h+(t-h)*l,o=u+(e-u)*l,a.push(n+(t+(r-t)*l-n)*l,o+(e+(i-e)*l-o)*l);return this.dirty=this.boundsDirty=!0,this},i.prototype.bezierCurveTo=function(t,e,r,i,n,o){this.currentPath?0===this.currentPath.shape.points.length&&(this.currentPath.shape.points=[0,0]):this.moveTo(0,0);for(var s,a,h,u,l,c=20,p=this.currentPath.shape.points,d=p[p.length-2],f=p[p.length-1],v=0,g=1;c>=g;++g)v=g/c,s=1-v,a=s*s,h=a*s,u=v*v,l=u*v,p.push(h*d+3*a*v*t+3*s*u*r+l*n,h*f+3*a*v*e+3*s*u*i+l*o);return this.dirty=this.boundsDirty=!0,this},i.prototype.arcTo=function(t,e,r,i,n){this.currentPath?0===this.currentPath.shape.points.length&&this.currentPath.shape.points.push(t,e):this.moveTo(t,e);var o=this.currentPath.shape.points,s=o[o.length-2],a=o[o.length-1],h=a-e,u=s-t,l=i-e,c=r-t,p=Math.abs(h*c-u*l);if(1e-8>p||0===n)(o[o.length-2]!==t||o[o.length-1]!==e)&&o.push(t,e);else{var d=h*h+u*u,f=l*l+c*c,v=h*l+u*c,g=n*Math.sqrt(d)/p,m=n*Math.sqrt(f)/p,y=g*v/d,x=m*v/f,b=g*c+m*u,_=g*l+m*h,T=u*(m+y),E=h*(m+y),S=c*(g+x),w=l*(g+x),C=Math.atan2(E-_,T-b),A=Math.atan2(w-_,S-b);this.arc(b+t,_+e,n,C,A,u*l>c*h)}return this.dirty=this.boundsDirty=!0,this},i.prototype.arc=function(t,e,r,i,n,o){if(o=o||!1,i===n)return this;!o&&i>=n?n+=2*Math.PI:o&&n>=i&&(i+=2*Math.PI);var s=o?-1*(i-n):n-i,a=40*Math.ceil(Math.abs(s)/(2*Math.PI));if(0===s)return this;var h=t+Math.cos(i)*r,u=e+Math.sin(i)*r;this.currentPath?this.currentPath.shape.points.push(h,u):this.moveTo(h,u);for(var l=this.currentPath.shape.points,c=s/(2*a),p=2*c,d=Math.cos(c),f=Math.sin(c),v=a-1,g=v%1/v,m=0;v>=m;m++){var y=m+g*m,x=c+i+p*y,b=Math.cos(x),_=-Math.sin(x);l.push((d*b+f*_)*r+t,(d*-_+f*b)*r+e)}return this.dirty=this.boundsDirty=!0,this},i.prototype.beginFill=function(t,e){return this.filling=!0,this.fillColor=t||0,this.fillAlpha=void 0===e?1:e,this.currentPath&&this.currentPath.shape.points.length<=2&&(this.currentPath.fill=this.filling,this.currentPath.fillColor=this.fillColor,this.currentPath.fillAlpha=this.fillAlpha),this},i.prototype.endFill=function(){return this.filling=!1,this.fillColor=null,this.fillAlpha=1,this},i.prototype.drawRect=function(t,e,r,i){return this.drawShape(new u.Rectangle(t,e,r,i)),this},i.prototype.drawRoundedRect=function(t,e,r,i,n){return this.drawShape(new u.RoundedRectangle(t,e,r,i,n)),this},i.prototype.drawCircle=function(t,e,r){return this.drawShape(new u.Circle(t,e,r)),this},i.prototype.drawEllipse=function(t,e,r,i){return this.drawShape(new u.Ellipse(t,e,r,i)),this},i.prototype.drawPolygon=function(t){var e=t,r=!0;if(e instanceof u.Polygon&&(r=e.closed,e=e.points),!Array.isArray(e)){e=new Array(arguments.length);for(var i=0;ig?g:S,S=S>y?y:S,S=S>b?b:S,w=w>m?m:w,w=w>x?x:w,w=w>_?_:w,T=g>T?g:T,T=y>T?y:T,T=b>T?b:T,E=m>E?m:E,E=x>E?x:E,E=_>E?_:E,this._bounds.x=S,this._bounds.width=T-S,this._bounds.y=w,this._bounds.height=E-w,this._currentBounds=this._bounds}return this._currentBounds},i.prototype.containsPoint=function(t){this.worldTransform.applyInverse(t,c);for(var e=this.graphicsData,r=0;rs?s:t,e=s+h>e?s+h:e,r=r>a?a:r,i=a+u>i?a+u:i;else if(d===l.SHAPES.CIRC)s=n.x,a=n.y,h=n.radius+f/2,u=n.radius+f/2,t=t>s-h?s-h:t,e=s+h>e?s+h:e,r=r>a-u?a-u:r,i=a+u>i?a+u:i;else if(d===l.SHAPES.ELIP)s=n.x,a=n.y,h=n.width+f/2,u=n.height+f/2,t=t>s-h?s-h:t,e=s+h>e?s+h:e,r=r>a-u?a-u:r,i=a+u>i?a+u:i;else{o=n.points;for(var v=0;vs-f?s-f:t,e=s+f>e?s+f:e,r=r>a-f?a-f:r,i=a+f>i?a+f:i}}else t=0,e=0,r=0,i=0;var g=this.boundsPadding;this._localBounds.x=t-g,this._localBounds.width=e-t+2*g,this._localBounds.y=r-g,this._localBounds.height=i-r+2*g},i.prototype.drawShape=function(t){this.currentPath&&this.currentPath.shape.points.length<=2&&this.graphicsData.pop(),this.currentPath=null;var e=new h(this.lineWidth,this.lineColor,this.lineAlpha,this.fillColor,this.fillAlpha,this.filling,t);return this.graphicsData.push(e),e.type===l.SHAPES.POLY&&(e.shape.closed=e.shape.closed||this.filling,this.currentPath=e),this.dirty=this.boundsDirty=!0,e},i.prototype.destroy=function(){n.prototype.destroy.apply(this,arguments);for(var t=0;ta;a++)e=s.data[a],1===s.data[a].mode?(r.stencilManager.pushStencil(t,e),i.uniform1f(r.shaderManager.complexPrimitiveShader.uniforms.alpha._location,t.worldAlpha*e.alpha),i.drawElements(i.TRIANGLE_FAN,4,i.UNSIGNED_SHORT,2*(e.indices.length-4)),r.stencilManager.popStencil(t,e)):(o=r.shaderManager.primitiveShader,r.shaderManager.setShader(o),i.uniformMatrix3fv(o.uniforms.translationMatrix._location,!1,t.worldTransform.toArray(!0)),i.uniformMatrix3fv(o.uniforms.projectionMatrix._location,!1,r.currentRenderTarget.projectionMatrix.toArray(!0)),i.uniform3fv(o.uniforms.tint._location,n.hex2rgb(t.tint)),i.uniform1f(o.uniforms.alpha._location,t.worldAlpha),i.bindBuffer(i.ARRAY_BUFFER,e.buffer),i.vertexAttribPointer(o.attributes.aVertexPosition,2,i.FLOAT,!1,24,0),i.vertexAttribPointer(o.attributes.aColor,4,i.FLOAT,!1,24,8),i.bindBuffer(i.ELEMENT_ARRAY_BUFFER,e.indexBuffer),i.drawElements(i.TRIANGLE_STRIP,e.indices.length,i.UNSIGNED_SHORT,0)),r.drawCount++},i.prototype.updateGraphics=function(t){var e=this.renderer.gl,r=t._webGL[e.id];r||(r=t._webGL[e.id]={lastIndex:0,data:[],gl:e}),t.dirty=!1;var i;if(t.clearDirty){for(t.clearDirty=!1,i=0;i=6)if(a.points.length<2*this.maximumSimplePolySize){o=this.switchMode(r,0);var h=this.buildPoly(a,o);h||(o=this.switchMode(r,1),this.buildComplexPoly(a,o))}else o=this.switchMode(r,1),this.buildComplexPoly(a,o);a.lineWidth>0&&(o=this.switchMode(r,0),this.buildLine(a,o))}else o=this.switchMode(r,0),a.type===s.SHAPES.RECT?this.buildRectangle(a,o):a.type===s.SHAPES.CIRC||a.type===s.SHAPES.ELIP?this.buildCircle(a,o):a.type===s.SHAPES.RREC&&this.buildRoundedRectangle(a,o);r.lastIndex++}for(i=0;i32e4||r.mode!==e||1===e)&&(r=this.graphicsDataPool.pop()||new u(t.gl),r.mode=e,t.data.push(r))):(r=this.graphicsDataPool.pop()||new u(t.gl),r.mode=e,t.data.push(r)),r.dirty=!0,r},i.prototype.buildRectangle=function(t,e){var r=t.shape,i=r.x,o=r.y,s=r.width,a=r.height;if(t.fill){var h=n.hex2rgb(t.fillColor),u=t.fillAlpha,l=h[0]*u,c=h[1]*u,p=h[2]*u,d=e.points,f=e.indices,v=d.length/6;d.push(i,o),d.push(l,c,p,u),d.push(i+s,o),d.push(l,c,p,u),d.push(i,o+a),d.push(l,c,p,u),d.push(i+s,o+a),d.push(l,c,p,u),f.push(v,v,v+1,v+2,v+3,v+3)}if(t.lineWidth){var g=t.points;t.points=[i,o,i+s,o,i+s,o+a,i,o+a,i,o],this.buildLine(t,e),t.points=g}},i.prototype.buildRoundedRectangle=function(t,e){var r=t.shape,i=r.x,o=r.y,s=r.width,a=r.height,h=r.radius,u=[];if(u.push(i,o+h),this.quadraticBezierCurve(i,o+a-h,i,o+a,i+h,o+a,u),this.quadraticBezierCurve(i+s-h,o+a,i+s,o+a,i+s,o+a-h,u),this.quadraticBezierCurve(i+s,o+h,i+s,o,i+s-h,o,u),this.quadraticBezierCurve(i+h,o,i,o,i,o+h+1e-10,u),t.fill){var c=n.hex2rgb(t.fillColor),p=t.fillAlpha,d=c[0]*p,f=c[1]*p,v=c[2]*p,g=e.points,m=e.indices,y=g.length/6,x=l(u,null,2),b=0;for(b=0;b=m;m++)g=m/f,h=a(t,r,g),u=a(e,i,g),l=a(r,n,g),c=a(i,o,g),p=a(h,l,g),d=a(u,c,g),v.push(p,d);return v},i.prototype.buildCircle=function(t,e){var r,i,o=t.shape,a=o.x,h=o.y;t.type===s.SHAPES.CIRC?(r=o.radius,i=o.radius):(r=o.width,i=o.height);var u=Math.floor(30*Math.sqrt(o.radius))||Math.floor(15*Math.sqrt(o.width+o.height)),l=2*Math.PI/u,c=0;if(t.fill){var p=n.hex2rgb(t.fillColor),d=t.fillAlpha,f=p[0]*d,v=p[1]*d,g=p[2]*d,m=e.points,y=e.indices,x=m.length/6;for(y.push(x),c=0;u+1>c;c++)m.push(a,h,f,v,g,d),m.push(a+Math.sin(l*c)*r,h+Math.cos(l*c)*i,f,v,g,d),y.push(x++,x++);y.push(x-1)}if(t.lineWidth){var b=t.points;for(t.points=[],c=0;u+1>c;c++)t.points.push(a+Math.sin(l*c)*r,h+Math.cos(l*c)*i);this.buildLine(t,e),t.points=b}},i.prototype.buildLine=function(t,e){var r=0,i=t.points;if(0!==i.length){var s=new o.Point(i[0],i[1]),a=new o.Point(i[i.length-2],i[i.length-1]);if(s.x===a.x&&s.y===a.y){i=i.slice(),i.pop(),i.pop(),a=new o.Point(i[i.length-2],i[i.length-1]);var h=a.x+.5*(s.x-a.x),u=a.y+.5*(s.y-a.y);i.unshift(h,u),i.push(h,u)}var l,c,p,d,f,v,g,m,y,x,b,_,T,E,S,w,C,A,M,R,O,D,P,F=e.points,L=e.indices,B=i.length/2,I=i.length,N=F.length/6,U=t.lineWidth/2,k=n.hex2rgb(t.lineColor),j=t.lineAlpha,G=k[0]*j,Y=k[1]*j,X=k[2]*j;for(p=i[0],d=i[1],f=i[2],v=i[3],y=-(d-v),x=p-f,P=Math.sqrt(y*y+x*x),y/=P,x/=P,y*=U,x*=U,F.push(p-y,d-x,G,Y,X,j),F.push(p+y,d+x,G,Y,X,j),r=1;B-1>r;r++)p=i[2*(r-1)],d=i[2*(r-1)+1],f=i[2*r],v=i[2*r+1],g=i[2*(r+1)],m=i[2*(r+1)+1],y=-(d-v),x=p-f,P=Math.sqrt(y*y+x*x),y/=P,x/=P,y*=U,x*=U,b=-(v-m),_=f-g,P=Math.sqrt(b*b+_*_),b/=P,_/=P,b*=U,_*=U,S=-x+d-(-x+v),w=-y+f-(-y+p),C=(-y+p)*(-x+v)-(-y+f)*(-x+d),A=-_+m-(-_+v),M=-b+f-(-b+g),R=(-b+g)*(-_+v)-(-b+f)*(-_+m),O=S*M-A*w,Math.abs(O)<.1?(O+=10.1,F.push(f-y,v-x,G,Y,X,j),F.push(f+y,v+x,G,Y,X,j)):(l=(w*R-M*C)/O,c=(A*C-S*R)/O,D=(l-f)*(l-f)+(c-v)*(c-v),D>19600?(T=y-b,E=x-_,P=Math.sqrt(T*T+E*E),T/=P,E/=P,T*=U,E*=U,F.push(f-T,v-E),F.push(G,Y,X,j),F.push(f+T,v+E),F.push(G,Y,X,j),F.push(f-T,v-E),F.push(G,Y,X,j),I++):(F.push(l,c),F.push(G,Y,X,j),F.push(f-(l-f),v-(c-v)),F.push(G,Y,X,j)));for(p=i[2*(B-2)],d=i[2*(B-2)+1],f=i[2*(B-1)],v=i[2*(B-1)+1],y=-(d-v),x=p-f,P=Math.sqrt(y*y+x*x),y/=P,x/=P,y*=U,x*=U,F.push(f-y,v-x),F.push(G,Y,X,j),F.push(f+y,v+x),F.push(G,Y,X,j),L.push(N),r=0;I>r;r++)L.push(N++);L.push(N-1)}},i.prototype.buildComplexPoly=function(t,e){var r=t.points.slice();if(!(r.length<6)){var i=e.indices;e.points=r,e.alpha=t.fillAlpha,e.color=n.hex2rgb(t.fillColor);for(var o,s,a=1/0,h=-(1/0),u=1/0,l=-(1/0),c=0;co?o:a,h=o>h?o:h,u=u>s?s:u,l=s>l?s:l;r.push(a,u,h,u,h,l,a,l);var p=r.length/2;for(c=0;p>c;c++)i.push(c)}},i.prototype.buildPoly=function(t,e){var r=t.points;if(!(r.length<6)){var i=e.points,o=e.indices,s=r.length/2,a=n.hex2rgb(t.fillColor),h=t.fillAlpha,u=a[0]*h,c=a[1]*h,p=a[2]*h,d=l(r,null,2);if(!d)return!1;var f=i.length/6,v=0;for(v=0;vv;v++)i.push(r[2*v],r[2*v+1],u,c,p,h);return!0}}},{"../../const":38,"../../math":48,"../../renderers/webgl/WebGLRenderer":65,"../../renderers/webgl/utils/ObjectRenderer":80,"../../utils":98,"./WebGLGraphicsData":44,earcut:24}],44:[function(t,e,r){function i(t){this.gl=t,this.color=[0,0,0],this.points=[],this.indices=[],this.buffer=t.createBuffer(),this.indexBuffer=t.createBuffer(),this.mode=1,this.alpha=1,this.dirty=!0,this.glPoints=null,this.glIndices=null}i.prototype.constructor=i,e.exports=i,i.prototype.reset=function(){this.points.length=0,this.indices.length=0},i.prototype.upload=function(){var t=this.gl;this.glPoints=new Float32Array(this.points),t.bindBuffer(t.ARRAY_BUFFER,this.buffer),t.bufferData(t.ARRAY_BUFFER,this.glPoints,t.STATIC_DRAW),this.glIndices=new Uint16Array(this.indices),t.bindBuffer(t.ELEMENT_ARRAY_BUFFER,this.indexBuffer),t.bufferData(t.ELEMENT_ARRAY_BUFFER,this.glIndices,t.STATIC_DRAW),this.dirty=!1},i.prototype.destroy=function(){this.color=null,this.points=null,this.indices=null,this.gl.deleteBuffer(this.buffer),this.gl.deleteBuffer(this.indexBuffer),this.gl=null,this.buffer=null,this.indexBuffer=null,this.glPoints=null,this.glIndices=null}},{}],45:[function(t,e,r){var i=e.exports=Object.assign(t("./const"),t("./math"),{utils:t("./utils"),ticker:t("./ticker"),DisplayObject:t("./display/DisplayObject"),Container:t("./display/Container"),Sprite:t("./sprites/Sprite"),ParticleContainer:t("./particles/ParticleContainer"),SpriteRenderer:t("./sprites/webgl/SpriteRenderer"),ParticleRenderer:t("./particles/webgl/ParticleRenderer"),Text:t("./text/Text"),Graphics:t("./graphics/Graphics"),GraphicsData:t("./graphics/GraphicsData"),GraphicsRenderer:t("./graphics/webgl/GraphicsRenderer"),Texture:t("./textures/Texture"),BaseTexture:t("./textures/BaseTexture"),RenderTexture:t("./textures/RenderTexture"),VideoBaseTexture:t("./textures/VideoBaseTexture"),TextureUvs:t("./textures/TextureUvs"),CanvasRenderer:t("./renderers/canvas/CanvasRenderer"),CanvasGraphics:t("./renderers/canvas/utils/CanvasGraphics"),CanvasBuffer:t("./renderers/canvas/utils/CanvasBuffer"),WebGLRenderer:t("./renderers/webgl/WebGLRenderer"),WebGLManager:t("./renderers/webgl/managers/WebGLManager"),ShaderManager:t("./renderers/webgl/managers/ShaderManager"),Shader:t("./renderers/webgl/shaders/Shader"),ObjectRenderer:t("./renderers/webgl/utils/ObjectRenderer"),RenderTarget:t("./renderers/webgl/utils/RenderTarget"),AbstractFilter:t("./renderers/webgl/filters/AbstractFilter"),FXAAFilter:t("./renderers/webgl/filters/FXAAFilter"),SpriteMaskFilter:t("./renderers/webgl/filters/SpriteMaskFilter"),glCore:t("pixi-gl-core"),autoDetectRenderer:function(t,e,r,n){return t=t||800,e=e||600,!n&&i.utils.isWebGLSupported()?new i.WebGLRenderer(t,e,r):new i.CanvasRenderer(t,e,r)}})},{"./const":38,"./display/Container":39,"./display/DisplayObject":40,"./graphics/Graphics":41,"./graphics/GraphicsData":42,"./graphics/webgl/GraphicsRenderer":43,"./math":48,"./particles/ParticleContainer":54,"./particles/webgl/ParticleRenderer":56,"./renderers/canvas/CanvasRenderer":59,"./renderers/canvas/utils/CanvasBuffer":60,"./renderers/canvas/utils/CanvasGraphics":61,"./renderers/webgl/WebGLRenderer":65,"./renderers/webgl/filters/AbstractFilter":66,"./renderers/webgl/filters/FXAAFilter":67,"./renderers/webgl/filters/SpriteMaskFilter":68,"./renderers/webgl/managers/ShaderManager":72,"./renderers/webgl/managers/WebGLManager":74,"./renderers/webgl/shaders/Shader":77,"./renderers/webgl/utils/ObjectRenderer":80,"./renderers/webgl/utils/RenderTarget":82,"./sprites/Sprite":86,"./sprites/webgl/SpriteRenderer":87,"./text/Text":89,"./textures/BaseTexture":90,"./textures/RenderTexture":91,"./textures/Texture":92,"./textures/TextureUvs":93,"./textures/VideoBaseTexture":94,"./ticker":96,"./utils":98,"pixi-gl-core":1}],46:[function(t,e,r){function i(){this.a=1,this.b=0,this.c=0,this.d=1,this.tx=0,this.ty=0}var n=t("./Point");i.prototype.constructor=i,e.exports=i,i.prototype.fromArray=function(t){this.a=t[0],this.b=t[1],this.c=t[3],this.d=t[4],this.tx=t[2],this.ty=t[5]},i.prototype.set=function(t,e,r,i,n,o){return this.a=t,this.b=e,this.c=r,this.d=i,this.tx=n,this.ty=o,this},i.prototype.toArray=function(t,e){this.array||(this.array=new Float32Array(9));var r=e||this.array;return t?(r[0]=this.a,r[1]=this.b,r[2]=0,r[3]=this.c,r[4]=this.d,r[5]=0,r[6]=this.tx,r[7]=this.ty,r[8]=1):(r[0]=this.a,r[1]=this.c,r[2]=this.tx,r[3]=this.b,r[4]=this.d,r[5]=this.ty,r[6]=0,r[7]=0,r[8]=1),r},i.prototype.apply=function(t,e){e=e||new n;var r=t.x,i=t.y;return e.x=this.a*r+this.c*i+this.tx,e.y=this.b*r+this.d*i+this.ty,e},i.prototype.applyInverse=function(t,e){e=e||new n;var r=1/(this.a*this.d+this.c*-this.b),i=t.x,o=t.y;return e.x=this.d*r*i+-this.c*r*o+(this.ty*this.c-this.tx*this.d)*r,e.y=this.a*r*o+-this.b*r*i+(-this.ty*this.a+this.tx*this.b)*r,e},i.prototype.translate=function(t,e){return this.tx+=t,this.ty+=e,this},i.prototype.scale=function(t,e){return this.a*=t,this.d*=e,this.c*=t,this.b*=e,this.tx*=t,this.ty*=e,this},i.prototype.rotate=function(t){var e=Math.cos(t),r=Math.sin(t),i=this.a,n=this.c,o=this.tx;return this.a=i*e-this.b*r,this.b=i*r+this.b*e,this.c=n*e-this.d*r,this.d=n*r+this.d*e,this.tx=o*e-this.ty*r,this.ty=o*r+this.ty*e,this},i.prototype.append=function(t){var e=this.a,r=this.b,i=this.c,n=this.d;return this.a=t.a*e+t.b*i,this.b=t.a*r+t.b*n,this.c=t.c*e+t.d*i,this.d=t.c*r+t.d*n,this.tx=t.tx*e+t.ty*i+this.tx,this.ty=t.tx*r+t.ty*n+this.ty,this},i.prototype.setTransform=function(t,e,r,i,n,o,s,a,h){var u,l,c,p,d,f,v,g,m,y;return d=Math.sin(s),f=Math.cos(s),v=Math.cos(h),g=Math.sin(h),m=-Math.sin(a),y=Math.cos(a),u=f*n,l=d*n,c=-d*o,p=f*o,this.a=v*u+g*c,this.b=v*l+g*p,this.c=m*u+y*c,this.d=m*l+y*p,this.tx=t+(r*u+i*c),this.ty=e+(r*l+i*p),this},i.prototype.prepend=function(t){var e=this.tx;if(1!==t.a||0!==t.b||0!==t.c||1!==t.d){var r=this.a,i=this.c;this.a=r*t.a+this.b*t.c,this.b=r*t.b+this.b*t.d,this.c=i*t.a+this.d*t.c,this.d=i*t.b+this.d*t.d}return this.tx=e*t.a+this.ty*t.c+t.tx,this.ty=e*t.b+this.ty*t.d+t.ty,this},i.prototype.invert=function(){var t=this.a,e=this.b,r=this.c,i=this.d,n=this.tx,o=t*i-e*r;return this.a=i/o,this.b=-e/o,this.c=-r/o,this.d=t/o,this.tx=(r*this.ty-i*n)/o,this.ty=-(t*this.ty-e*n)/o,this},i.prototype.identity=function(){return this.a=1,this.b=0,this.c=0,this.d=1,this.tx=0,this.ty=0,this},i.prototype.clone=function(){var t=new i;return t.a=this.a,t.b=this.b,t.c=this.c,t.d=this.d,t.tx=this.tx,t.ty=this.ty,t},i.prototype.copy=function(t){return t.a=this.a,t.b=this.b,t.c=this.c,t.d=this.d,t.tx=this.tx,t.ty=this.ty,t},i.IDENTITY=new i,i.TEMP_MATRIX=new i},{"./Point":47}],47:[function(t,e,r){function i(t,e){this.x=t||0,this.y=e||0}i.prototype.constructor=i,e.exports=i,i.prototype.clone=function(){return new i(this.x,this.y)},i.prototype.copy=function(t){this.set(t.x,t.y)},i.prototype.equals=function(t){return t.x===this.x&&t.y===this.y},i.prototype.set=function(t,e){this.x=t||0,this.y=e||(0!==e?this.x:0)}},{}],48:[function(t,e,r){e.exports={Point:t("./Point"),Matrix:t("./Matrix"),Circle:t("./shapes/Circle"),Ellipse:t("./shapes/Ellipse"),Polygon:t("./shapes/Polygon"),Rectangle:t("./shapes/Rectangle"),RoundedRectangle:t("./shapes/RoundedRectangle")}},{"./Matrix":46,"./Point":47,"./shapes/Circle":49,"./shapes/Ellipse":50,"./shapes/Polygon":51,"./shapes/Rectangle":52,"./shapes/RoundedRectangle":53}],49:[function(t,e,r){function i(t,e,r){this.x=t||0,this.y=e||0,this.radius=r||0,this.type=o.SHAPES.CIRC}var n=t("./Rectangle"),o=t("../../const");i.prototype.constructor=i,e.exports=i,i.prototype.clone=function(){return new i(this.x,this.y,this.radius)},i.prototype.contains=function(t,e){if(this.radius<=0)return!1;var r=this.x-t,i=this.y-e,n=this.radius*this.radius;return r*=r,i*=i,n>=r+i},i.prototype.getBounds=function(){return new n(this.x-this.radius,this.y-this.radius,2*this.radius,2*this.radius)}},{"../../const":38,"./Rectangle":52}],50:[function(t,e,r){function i(t,e,r,i){this.x=t||0,this.y=e||0,this.width=r||0,this.height=i||0,this.type=o.SHAPES.ELIP}var n=t("./Rectangle"),o=t("../../const");i.prototype.constructor=i,e.exports=i,i.prototype.clone=function(){return new i(this.x,this.y,this.width,this.height)},i.prototype.contains=function(t,e){if(this.width<=0||this.height<=0)return!1;var r=(t-this.x)/this.width,i=(e-this.y)/this.height;return r*=r,i*=i,1>=r+i},i.prototype.getBounds=function(){return new n(this.x-this.width,this.y-this.height,this.width,this.height)}},{"../../const":38,"./Rectangle":52}],51:[function(t,e,r){function i(t){var e=t;if(!Array.isArray(e)){e=new Array(arguments.length);for(var r=0;rs;s++)i.push(e[s].x,e[s].y);e=i}this.closed=!0,this.points=e,this.type=o.SHAPES.POLY}var n=t("../Point"),o=t("../../const");i.prototype.constructor=i,e.exports=i,i.prototype.clone=function(){return new i(this.points.slice())},i.prototype.contains=function(t,e){for(var r=!1,i=this.points.length/2,n=0,o=i-1;i>n;o=n++){var s=this.points[2*n],a=this.points[2*n+1],h=this.points[2*o],u=this.points[2*o+1],l=a>e!=u>e&&(h-s)*(e-a)/(u-a)+s>t;l&&(r=!r)}return r}},{"../../const":38,"../Point":47}],52:[function(t,e,r){function i(t,e,r,i){this.x=t||0,this.y=e||0,this.width=r||0,this.height=i||0,this.type=n.SHAPES.RECT}var n=t("../../const");i.prototype.constructor=i,e.exports=i,i.EMPTY=new i(0,0,0,0),i.prototype.clone=function(){return new i(this.x,this.y,this.width,this.height)},i.prototype.contains=function(t,e){return this.width<=0||this.height<=0?!1:t>=this.x&&t=this.y&&e=this.x&&t<=this.x+this.width&&e>=this.y&&e<=this.y+this.height?!0:!1}},{"../../const":38}],54:[function(t,e,r){function i(t,e,r){n.call(this),r=r||15e3,t=t||15e3;var i=16384;r>i&&(r=i),r>t&&(r=t),this._properties=[!1,!0,!1,!1,!1],this._maxSize=t,this._batchSize=r,this._buffers=null,this._bufferToUpdate=0,this.interactiveChildren=!1,this.blendMode=o.BLEND_MODES.NORMAL,this.roundPixels=!0,this.setProperties(e)}var n=t("../display/Container"),o=t("../const");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.setProperties=function(t){t&&(this._properties[0]="scale"in t?!!t.scale:this._properties[0],this._properties[1]="position"in t?!!t.position:this._properties[1],this._properties[2]="rotation"in t?!!t.rotation:this._properties[2],this._properties[3]="uvs"in t?!!t.uvs:this._properties[3],this._properties[4]="alpha"in t?!!t.alpha:this._properties[4])},i.prototype.updateTransform=function(){this.displayObjectUpdateTransform()},i.prototype.renderWebGL=function(t){this.visible&&!(this.worldAlpha<=0)&&this.children.length&&this.renderable&&(t.setObjectRenderer(t.plugins.particle),t.plugins.particle.render(this))},i.prototype.onChildrenChange=function(t){var e=Math.floor(t/this._batchSize);er;r+=6,i+=4)this.indices[r+0]=i+0,this.indices[r+1]=i+1,this.indices[r+2]=i+2,this.indices[r+3]=i+0,this.indices[r+4]=i+2,this.indices[r+5]=i+3;this.shader=null,this.indexBuffer=null,this.properties=null,this.tempMatrix=new h.Matrix}var n=t("../../renderers/webgl/utils/ObjectRenderer"),o=t("../../renderers/webgl/WebGLRenderer"),s=t("./ParticleShader"),a=t("./ParticleBuffer"),h=t("../../math");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,o.registerPlugin("particle",i),i.prototype.onContextChange=function(){var t=this.renderer.gl;this.shader=new s(this.renderer.shaderManager),this.indexBuffer=t.createBuffer(),t.bindBuffer(t.ELEMENT_ARRAY_BUFFER,this.indexBuffer),t.bufferData(t.ELEMENT_ARRAY_BUFFER,this.indices,t.STATIC_DRAW),this.properties=[{attribute:this.shader.attributes.aVertexPosition,size:2,uploadFunction:this.uploadVertices,offset:0},{attribute:this.shader.attributes.aPositionCoord,size:2,uploadFunction:this.uploadPosition,offset:0},{attribute:this.shader.attributes.aRotation,size:1,uploadFunction:this.uploadRotation,offset:0},{attribute:this.shader.attributes.aTextureCoord,size:2,uploadFunction:this.uploadUvs,offset:0},{attribute:this.shader.attributes.aColor,size:1,uploadFunction:this.uploadAlpha,offset:0}]},i.prototype.start=function(){var t=this.renderer.gl;t.activeTexture(t.TEXTURE0),t.bindBuffer(t.ELEMENT_ARRAY_BUFFER,this.indexBuffer);var e=this.shader;this.renderer.shaderManager.setShader(e)},i.prototype.render=function(t){var e=t.children,r=e.length,i=t._maxSize,n=t._batchSize;if(0!==r){r>i&&(r=i),t._buffers||(t._buffers=this.generateBuffers(t)),this.renderer.blendModeManager.setBlendMode(t.blendMode);var o=this.renderer.gl,s=t.worldTransform.copy(this.tempMatrix);s.prepend(this.renderer.currentRenderTarget.projectionMatrix),o.uniformMatrix3fv(this.shader.uniforms.projectionMatrix._location,!1,s.toArray(!0)),o.uniform1f(this.shader.uniforms.uAlpha._location,t.worldAlpha);var a=e[0]._texture.baseTexture;if(a._glTextures[o.id])o.bindTexture(o.TEXTURE_2D,a._glTextures[o.id]);else{if(!this.renderer.updateTexture(a))return;t._properties[0]&&t._properties[3]||(t._bufferToUpdate=0)}for(var h=0,u=0;r>h;h+=n,u+=1){var l=r-h;l>n&&(l=n);var c=t._buffers[u];c.uploadDynamic(e,h,l),t._bufferToUpdate===u&&(c.uploadStatic(e,h,l),t._bufferToUpdate=u+1),c.bind(this.shader),o.drawElements(o.TRIANGLES,6*l,o.UNSIGNED_SHORT,0),this.renderer.drawCount++}}},i.prototype.generateBuffers=function(t){var e,r=this.renderer.gl,i=[],n=t._maxSize,o=t._batchSize,s=t._properties;for(e=0;n>e;e+=o)i.push(new a(r,this.properties,s,o));return i},i.prototype.uploadVertices=function(t,e,r,i,n,o){for(var s,a,h,u,l,c,p,d,f,v=0;r>v;v++)s=t[e+v],a=s._texture,u=s.scale.x,l=s.scale.y,a.trim?(h=a.trim,p=h.x-s.anchor.x*h.width,c=p+a.crop.width,f=h.y-s.anchor.y*h.height,d=f+a.crop.height):(c=a._frame.width*(1-s.anchor.x),p=a._frame.width*-s.anchor.x,d=a._frame.height*(1-s.anchor.y),f=a._frame.height*-s.anchor.y),i[o]=p*u,i[o+1]=f*l,i[o+n]=c*u,i[o+n+1]=f*l,i[o+2*n]=c*u,i[o+2*n+1]=d*l,i[o+3*n]=p*u,i[o+3*n+1]=d*l,o+=4*n},i.prototype.uploadPosition=function(t,e,r,i,n,o){for(var s=0;r>s;s++){var a=t[e+s].position;i[o]=a.x,i[o+1]=a.y,i[o+n]=a.x,i[o+n+1]=a.y,i[o+2*n]=a.x,i[o+2*n+1]=a.y,i[o+3*n]=a.x,i[o+3*n+1]=a.y,o+=4*n}},i.prototype.uploadRotation=function(t,e,r,i,n,o){for(var s=0;r>s;s++){var a=t[e+s].rotation;i[o]=a,i[o+n]=a,i[o+2*n]=a,i[o+3*n]=a,o+=4*n}},i.prototype.uploadUvs=function(t,e,r,i,n,o){for(var s=0;r>s;s++){var a=t[e+s]._texture._uvs;a?(i[o]=a.x0,i[o+1]=a.y0,i[o+n]=a.x1,i[o+n+1]=a.y1,i[o+2*n]=a.x2,i[o+2*n+1]=a.y2,i[o+3*n]=a.x3,i[o+3*n+1]=a.y3,o+=4*n):(i[o]=0,i[o+1]=0,i[o+n]=0,i[o+n+1]=0,i[o+2*n]=0,i[o+2*n+1]=0,i[o+3*n]=0,i[o+3*n+1]=0,o+=4*n)}},i.prototype.uploadAlpha=function(t,e,r,i,n,o){for(var s=0;r>s;s++){var a=t[e+s].alpha;i[o]=a,i[o+n]=a,i[o+2*n]=a,i[o+3*n]=a,o+=4*n}},i.prototype.destroy=function(){this.renderer.gl&&this.renderer.gl.deleteBuffer(this.indexBuffer),n.prototype.destroy.apply(this,arguments),this.shader.destroy(),this.indices=null,this.tempMatrix=null}},{"../../math":48,"../../renderers/webgl/WebGLRenderer":65,"../../renderers/webgl/utils/ObjectRenderer":80,"./ParticleBuffer":55,"./ParticleShader":57}],57:[function(t,e,r){function i(t){n.call(this,t,["attribute vec2 aVertexPosition;","attribute vec2 aTextureCoord;","attribute float aColor;","attribute vec2 aPositionCoord;","attribute vec2 aScale;","attribute float aRotation;","uniform mat3 projectionMatrix;","varying vec2 vTextureCoord;","varying float vColor;","void main(void){"," vec2 v = aVertexPosition;"," v.x = (aVertexPosition.x) * cos(aRotation) - (aVertexPosition.y) * sin(aRotation);"," v.y = (aVertexPosition.x) * sin(aRotation) + (aVertexPosition.y) * cos(aRotation);"," v = v + aPositionCoord;"," gl_Position = vec4((projectionMatrix * vec3(v, 1.0)).xy, 0.0, 1.0);"," vTextureCoord = aTextureCoord;"," vColor = aColor;","}"].join("\n"),["precision lowp float;","varying vec2 vTextureCoord;","varying float vColor;","uniform sampler2D uSampler;","uniform float uAlpha;","void main(void){"," vec4 color = texture2D(uSampler, vTextureCoord) * vColor * uAlpha;"," if (color.a == 0.0) discard;"," gl_FragColor = color;","}"].join("\n"),{uAlpha:{type:"1f",value:1}},{aPositionCoord:0,aRotation:0})}var n=t("../../renderers/webgl/shaders/TextureShader");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i},{"../../renderers/webgl/shaders/TextureShader":78}],58:[function(t,e,r){function i(t,e,r,i){if(a.call(this),n.sayHello(t),i)for(var h in s.DEFAULT_RENDER_OPTIONS)"undefined"==typeof i[h]&&(i[h]=s.DEFAULT_RENDER_OPTIONS[h]);else i=s.DEFAULT_RENDER_OPTIONS;this.type=s.RENDERER_TYPE.UNKNOWN,this.width=e||800,this.height=r||600,this.view=i.view||document.createElement("canvas"),this.resolution=i.resolution,this.transparent=i.transparent,this.autoResize=i.autoResize||!1,this.blendModes=null,this.preserveDrawingBuffer=i.preserveDrawingBuffer,this.clearBeforeRender=i.clearBeforeRender,this.roundPixels=i.roundPixels,this._backgroundColor=0,this._backgroundColorRgba=[0,0,0,0],this._backgroundColorString="#000000",this.backgroundColor=i.backgroundColor||this._backgroundColor,this._tempDisplayObjectParent={worldTransform:new o.Matrix,worldAlpha:1,children:[]},this._lastObjectRendered=this._tempDisplayObjectParent}var n=t("../utils"),o=t("../math"),s=t("../const"),a=t("eventemitter3");i.prototype=Object.create(a.prototype),i.prototype.constructor=i,e.exports=i,Object.defineProperties(i.prototype,{backgroundColor:{get:function(){return this._backgroundColor},set:function(t){this._backgroundColor=t,this._backgroundColorString=n.hex2string(t),n.hex2rgb(t,this._backgroundColorRgba)}}}),i.prototype.resize=function(t,e){this.width=t*this.resolution,this.height=e*this.resolution,this.view.width=this.width,this.view.height=this.height,this.autoResize&&(this.view.style.width=this.width/this.resolution+"px",this.view.style.height=this.height/this.resolution+"px")},i.prototype.destroy=function(t){t&&this.view.parentNode&&this.view.parentNode.removeChild(this.view),this.type=s.RENDERER_TYPE.UNKNOWN,this.width=0,this.height=0,this.view=null,this.resolution=0,this.transparent=!1,this.autoResize=!1,this.blendModes=null,this.preserveDrawingBuffer=!1,this.clearBeforeRender=!1,this.roundPixels=!1,this._backgroundColor=0, -this._backgroundColorRgba=null,this._backgroundColorString=null}},{"../const":38,"../math":48,"../utils":98,eventemitter3:25}],59:[function(t,e,r){function i(t,e,r){r=r||{},n.call(this,"Canvas",t,e,r),this.type=h.RENDERER_TYPE.CANVAS,this.context=this.view.getContext("2d",{alpha:this.transparent}),this.refresh=!0,this.maskManager=new o,this.smoothProperty="imageSmoothingEnabled",this.context.imageSmoothingEnabled||(this.context.webkitImageSmoothingEnabled?this.smoothProperty="webkitImageSmoothingEnabled":this.context.mozImageSmoothingEnabled?this.smoothProperty="mozImageSmoothingEnabled":this.context.oImageSmoothingEnabled?this.smoothProperty="oImageSmoothingEnabled":this.context.msImageSmoothingEnabled&&(this.smoothProperty="msImageSmoothingEnabled")),this.initPlugins(),this._mapBlendModes(),this._tempDisplayObjectParent={worldTransform:new a.Matrix,worldAlpha:1},this.resize(t,e)}var n=t("../SystemRenderer"),o=t("./utils/CanvasMaskManager"),s=t("../../utils"),a=t("../../math"),h=t("../../const");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,s.pluginTarget.mixin(i),i.prototype.render=function(t){this.emit("prerender");var e=t.parent;this._lastObjectRendered=t,t.parent=this._tempDisplayObjectParent,t.updateTransform(),t.parent=e,this.context.setTransform(1,0,0,1,0,0),this.context.globalAlpha=1,this.context.globalCompositeOperation=this.blendModes[h.BLEND_MODES.NORMAL],navigator.isCocoonJS&&this.view.screencanvas&&(this.context.fillStyle="black",this.context.clear()),this.clearBeforeRender&&(this.transparent?this.context.clearRect(0,0,this.width,this.height):(this.context.fillStyle=this._backgroundColorString,this.context.fillRect(0,0,this.width,this.height))),this.renderDisplayObject(t,this.context),this.emit("postrender")},i.prototype.destroy=function(t){this.destroyPlugins(),n.prototype.destroy.call(this,t),this.context=null,this.refresh=!0,this.maskManager.destroy(),this.maskManager=null,this.smoothProperty=null},i.prototype.renderDisplayObject=function(t,e){var r=this.context;this.context=e,t.renderCanvas(this),this.context=r},i.prototype.resize=function(t,e){n.prototype.resize.call(this,t,e),this.smoothProperty&&(this.context[this.smoothProperty]=h.SCALE_MODES.DEFAULT===h.SCALE_MODES.LINEAR)},i.prototype._mapBlendModes=function(){this.blendModes||(this.blendModes={},s.canUseNewCanvasBlendModes()?(this.blendModes[h.BLEND_MODES.NORMAL]="source-over",this.blendModes[h.BLEND_MODES.ADD]="lighter",this.blendModes[h.BLEND_MODES.MULTIPLY]="multiply",this.blendModes[h.BLEND_MODES.SCREEN]="screen",this.blendModes[h.BLEND_MODES.OVERLAY]="overlay",this.blendModes[h.BLEND_MODES.DARKEN]="darken",this.blendModes[h.BLEND_MODES.LIGHTEN]="lighten",this.blendModes[h.BLEND_MODES.COLOR_DODGE]="color-dodge",this.blendModes[h.BLEND_MODES.COLOR_BURN]="color-burn",this.blendModes[h.BLEND_MODES.HARD_LIGHT]="hard-light",this.blendModes[h.BLEND_MODES.SOFT_LIGHT]="soft-light",this.blendModes[h.BLEND_MODES.DIFFERENCE]="difference",this.blendModes[h.BLEND_MODES.EXCLUSION]="exclusion",this.blendModes[h.BLEND_MODES.HUE]="hue",this.blendModes[h.BLEND_MODES.SATURATION]="saturate",this.blendModes[h.BLEND_MODES.COLOR]="color",this.blendModes[h.BLEND_MODES.LUMINOSITY]="luminosity"):(this.blendModes[h.BLEND_MODES.NORMAL]="source-over",this.blendModes[h.BLEND_MODES.ADD]="lighter",this.blendModes[h.BLEND_MODES.MULTIPLY]="source-over",this.blendModes[h.BLEND_MODES.SCREEN]="source-over",this.blendModes[h.BLEND_MODES.OVERLAY]="source-over",this.blendModes[h.BLEND_MODES.DARKEN]="source-over",this.blendModes[h.BLEND_MODES.LIGHTEN]="source-over",this.blendModes[h.BLEND_MODES.COLOR_DODGE]="source-over",this.blendModes[h.BLEND_MODES.COLOR_BURN]="source-over",this.blendModes[h.BLEND_MODES.HARD_LIGHT]="source-over",this.blendModes[h.BLEND_MODES.SOFT_LIGHT]="source-over",this.blendModes[h.BLEND_MODES.DIFFERENCE]="source-over",this.blendModes[h.BLEND_MODES.EXCLUSION]="source-over",this.blendModes[h.BLEND_MODES.HUE]="source-over",this.blendModes[h.BLEND_MODES.SATURATION]="source-over",this.blendModes[h.BLEND_MODES.COLOR]="source-over",this.blendModes[h.BLEND_MODES.LUMINOSITY]="source-over"))}},{"../../const":38,"../../math":48,"../../utils":98,"../SystemRenderer":58,"./utils/CanvasMaskManager":62}],60:[function(t,e,r){function i(t,e){this.canvas=document.createElement("canvas"),this.context=this.canvas.getContext("2d"),this.canvas.width=t,this.canvas.height=e}i.prototype.constructor=i,e.exports=i,Object.defineProperties(i.prototype,{width:{get:function(){return this.canvas.width},set:function(t){this.canvas.width=t}},height:{get:function(){return this.canvas.height},set:function(t){this.canvas.height=t}}}),i.prototype.clear=function(){this.context.setTransform(1,0,0,1,0,0),this.context.clearRect(0,0,this.canvas.width,this.canvas.height)},i.prototype.resize=function(t,e){this.canvas.width=t,this.canvas.height=e},i.prototype.destroy=function(){this.context=null,this.canvas=null}},{}],61:[function(t,e,r){var i=t("../../../const"),n={};e.exports=n,n.renderGraphics=function(t,e){var r=t.worldAlpha;t.dirty&&(this.updateGraphicsTint(t),t.dirty=!1);for(var n=0;nA?A:C,e.beginPath(),e.moveTo(T,E+C),e.lineTo(T,E+w-C),e.quadraticCurveTo(T,E+w,T+C,E+w),e.lineTo(T+S-C,E+w),e.quadraticCurveTo(T+S,E+w,T+S,E+w-C),e.lineTo(T+S,E+C),e.quadraticCurveTo(T+S,E,T+S-C,E),e.lineTo(T+C,E),e.quadraticCurveTo(T,E,T,E+C),e.closePath(),(o.fillColor||0===o.fillColor)&&(e.globalAlpha=o.fillAlpha*r,e.fillStyle="#"+("00000"+(0|a).toString(16)).substr(-6),e.fill()),o.lineWidth&&(e.globalAlpha=o.lineAlpha*r,e.strokeStyle="#"+("00000"+(0|h).toString(16)).substr(-6),e.stroke())}}},n.renderGraphicsMask=function(t,e){var r=t.graphicsData.length;if(0!==r){e.beginPath();for(var n=0;r>n;n++){var o=t.graphicsData[n],s=o.shape;if(o.type===i.SHAPES.POLY){var a=s.points;e.moveTo(a[0],a[1]);for(var h=1;hw?w:S,e.moveTo(b,_+S),e.lineTo(b,_+E-S),e.quadraticCurveTo(b,_+E,b+S,_+E),e.lineTo(b+T-S,_+E),e.quadraticCurveTo(b+T,_+E,b+T,_+E-S),e.lineTo(b+T,_+S),e.quadraticCurveTo(b+T,_,b+T-S,_),e.lineTo(b+S,_),e.quadraticCurveTo(b,_,b,_+S),e.closePath()}}}},n.updateGraphicsTint=function(t){if(16777215!==t.tint||t._prevTint!==t.tint){t._prevTint=t.tint;for(var e=(t.tint>>16&255)/255,r=(t.tint>>8&255)/255,i=(255&t.tint)/255,n=0;n>16&255)/255*e*255<<16)+((s>>8&255)/255*r*255<<8)+(255&s)/255*i*255,o._lineTint=((a>>16&255)/255*e*255<<16)+((a>>8&255)/255*r*255<<8)+(255&a)/255*i*255}}}},{"../../../const":38}],62:[function(t,e,r){function i(){}var n=t("./CanvasGraphics");i.prototype.constructor=i,e.exports=i,i.prototype.pushMask=function(t,e){e.context.save();var r=t.alpha,i=t.worldTransform,o=e.resolution;e.context.setTransform(i.a*o,i.b*o,i.c*o,i.d*o,i.tx*o,i.ty*o),t.texture||(n.renderGraphicsMask(t,e.context),e.context.clip()),t.worldAlpha=r},i.prototype.popMask=function(t){t.context.restore()},i.prototype.destroy=function(){}},{"./CanvasGraphics":61}],63:[function(t,e,r){var i=t("../../../utils"),n={};e.exports=n,n.getTintedTexture=function(t,e){var r=t.texture;e=n.roundColor(e);var i="#"+("00000"+(0|e).toString(16)).substr(-6);if(r.tintCache=r.tintCache||{},r.tintCache[i])return r.tintCache[i];var o=n.canvas||document.createElement("canvas");if(n.tintMethod(r,e,o),n.convertTintToImage){var s=new Image;s.src=o.toDataURL(),r.tintCache[i]=s}else r.tintCache[i]=o,n.canvas=null;return o},n.tintWithMultiply=function(t,e,r){var i=r.getContext("2d"),n=t.baseTexture.resolution,o=t.crop.clone();o.x*=n,o.y*=n,o.width*=n,o.height*=n,r.width=o.width,r.height=o.height,i.fillStyle="#"+("00000"+(0|e).toString(16)).substr(-6),i.fillRect(0,0,o.width,o.height),i.globalCompositeOperation="multiply",i.drawImage(t.baseTexture.source,o.x,o.y,o.width,o.height,0,0,o.width,o.height),i.globalCompositeOperation="destination-atop",i.drawImage(t.baseTexture.source,o.x,o.y,o.width,o.height,0,0,o.width,o.height)},n.tintWithOverlay=function(t,e,r){var i=r.getContext("2d"),n=t.baseTexture.resolution,o=t.crop.clone();o.x*=n,o.y*=n,o.width*=n,o.height*=n,r.width=o.width,r.height=o.height,i.globalCompositeOperation="copy",i.fillStyle="#"+("00000"+(0|e).toString(16)).substr(-6),i.fillRect(0,0,o.width,o.height),i.globalCompositeOperation="destination-atop",i.drawImage(t.baseTexture.source,o.x,o.y,o.width,o.height,0,0,o.width,o.height)},n.tintWithPerPixel=function(t,e,r){var n=r.getContext("2d"),o=t.baseTexture.resolution,s=t.crop.clone();s.x*=o,s.y*=o,s.width*=o,s.height*=o,r.width=s.width,r.height=s.height,n.globalCompositeOperation="copy",n.drawImage(t.baseTexture.source,s.x,s.y,s.width,s.height,0,0,s.width,s.height);for(var a=i.hex2rgb(e),h=a[0],u=a[1],l=a[2],c=n.getImageData(0,0,s.width,s.height),p=c.data,d=0;de;++e)this.shaders[e].syncUniform(t)}},{"../shaders/TextureShader":78}],67:[function(t,e,r){function i(){n.call(this,"\nprecision mediump float;\n\nattribute vec2 aVertexPosition;\nattribute vec2 aTextureCoord;\nattribute vec4 aColor;\n\nuniform mat3 projectionMatrix;\nuniform vec2 resolution;\n\nvarying vec2 vTextureCoord;\nvarying vec4 vColor;\n\nvarying vec2 vResolution;\n\n//texcoords computed in vertex step\n//to avoid dependent texture reads\nvarying vec2 v_rgbNW;\nvarying vec2 v_rgbNE;\nvarying vec2 v_rgbSW;\nvarying vec2 v_rgbSE;\nvarying vec2 v_rgbM;\n\n\nvoid texcoords(vec2 fragCoord, vec2 resolution,\n out vec2 v_rgbNW, out vec2 v_rgbNE,\n out vec2 v_rgbSW, out vec2 v_rgbSE,\n out vec2 v_rgbM) {\n vec2 inverseVP = 1.0 / resolution.xy;\n v_rgbNW = (fragCoord + vec2(-1.0, -1.0)) * inverseVP;\n v_rgbNE = (fragCoord + vec2(1.0, -1.0)) * inverseVP;\n v_rgbSW = (fragCoord + vec2(-1.0, 1.0)) * inverseVP;\n v_rgbSE = (fragCoord + vec2(1.0, 1.0)) * inverseVP;\n v_rgbM = vec2(fragCoord * inverseVP);\n}\n\nvoid main(void){\n gl_Position = vec4((projectionMatrix * vec3(aVertexPosition, 1.0)).xy, 0.0, 1.0);\n vTextureCoord = aTextureCoord;\n vColor = vec4(aColor.rgb * aColor.a, aColor.a);\n vResolution = resolution;\n\n //compute the texture coords and send them to varyings\n texcoords(aTextureCoord * resolution, resolution, v_rgbNW, v_rgbNE, v_rgbSW, v_rgbSE, v_rgbM);\n}\n",'precision lowp float;\n\n\n/**\nBasic FXAA implementation based on the code on geeks3d.com with the\nmodification that the texture2DLod stuff was removed since it\'s\nunsupported by WebGL.\n\n--\n\nFrom:\nhttps://github.com/mitsuhiko/webgl-meincraft\n\nCopyright (c) 2011 by Armin Ronacher.\n\nSome rights reserved.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are\nmet:\n\n * Redistributions of source code must retain the above copyright\n notice, this list of conditions and the following disclaimer.\n\n * Redistributions in binary form must reproduce the above\n copyright notice, this list of conditions and the following\n disclaimer in the documentation and/or other materials provided\n with the distribution.\n\n * The names of the contributors may not be used to endorse or\n promote products derived from this software without specific\n prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\nLIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\nA PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\nOWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\nSPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\nLIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\nDATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\nTHEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\nOF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n*/\n\n#ifndef FXAA_REDUCE_MIN\n #define FXAA_REDUCE_MIN (1.0/ 128.0)\n#endif\n#ifndef FXAA_REDUCE_MUL\n #define FXAA_REDUCE_MUL (1.0 / 8.0)\n#endif\n#ifndef FXAA_SPAN_MAX\n #define FXAA_SPAN_MAX 8.0\n#endif\n\n//optimized version for mobile, where dependent\n//texture reads can be a bottleneck\nvec4 fxaa(sampler2D tex, vec2 fragCoord, vec2 resolution,\n vec2 v_rgbNW, vec2 v_rgbNE,\n vec2 v_rgbSW, vec2 v_rgbSE,\n vec2 v_rgbM) {\n vec4 color;\n mediump vec2 inverseVP = vec2(1.0 / resolution.x, 1.0 / resolution.y);\n vec3 rgbNW = texture2D(tex, v_rgbNW).xyz;\n vec3 rgbNE = texture2D(tex, v_rgbNE).xyz;\n vec3 rgbSW = texture2D(tex, v_rgbSW).xyz;\n vec3 rgbSE = texture2D(tex, v_rgbSE).xyz;\n vec4 texColor = texture2D(tex, v_rgbM);\n vec3 rgbM = texColor.xyz;\n vec3 luma = vec3(0.299, 0.587, 0.114);\n float lumaNW = dot(rgbNW, luma);\n float lumaNE = dot(rgbNE, luma);\n float lumaSW = dot(rgbSW, luma);\n float lumaSE = dot(rgbSE, luma);\n float lumaM = dot(rgbM, luma);\n float lumaMin = min(lumaM, min(min(lumaNW, lumaNE), min(lumaSW, lumaSE)));\n float lumaMax = max(lumaM, max(max(lumaNW, lumaNE), max(lumaSW, lumaSE)));\n\n mediump vec2 dir;\n dir.x = -((lumaNW + lumaNE) - (lumaSW + lumaSE));\n dir.y = ((lumaNW + lumaSW) - (lumaNE + lumaSE));\n\n float dirReduce = max((lumaNW + lumaNE + lumaSW + lumaSE) *\n (0.25 * FXAA_REDUCE_MUL), FXAA_REDUCE_MIN);\n\n float rcpDirMin = 1.0 / (min(abs(dir.x), abs(dir.y)) + dirReduce);\n dir = min(vec2(FXAA_SPAN_MAX, FXAA_SPAN_MAX),\n max(vec2(-FXAA_SPAN_MAX, -FXAA_SPAN_MAX),\n dir * rcpDirMin)) * inverseVP;\n\n vec3 rgbA = 0.5 * (\n texture2D(tex, fragCoord * inverseVP + dir * (1.0 / 3.0 - 0.5)).xyz +\n texture2D(tex, fragCoord * inverseVP + dir * (2.0 / 3.0 - 0.5)).xyz);\n vec3 rgbB = rgbA * 0.5 + 0.25 * (\n texture2D(tex, fragCoord * inverseVP + dir * -0.5).xyz +\n texture2D(tex, fragCoord * inverseVP + dir * 0.5).xyz);\n\n float lumaB = dot(rgbB, luma);\n if ((lumaB < lumaMin) || (lumaB > lumaMax))\n color = vec4(rgbA, texColor.a);\n else\n color = vec4(rgbB, texColor.a);\n return color;\n}\n\n\nvarying vec2 vTextureCoord;\nvarying vec4 vColor;\nvarying vec2 vResolution;\n\n//texcoords computed in vertex step\n//to avoid dependent texture reads\nvarying vec2 v_rgbNW;\nvarying vec2 v_rgbNE;\nvarying vec2 v_rgbSW;\nvarying vec2 v_rgbSE;\nvarying vec2 v_rgbM;\n\nuniform sampler2D uSampler;\n\n\nvoid main(void){\n\n gl_FragColor = fxaa(uSampler, vTextureCoord * vResolution, vResolution, v_rgbNW, v_rgbNE, v_rgbSW, v_rgbSE, v_rgbM);\n\n}\n',{resolution:{type:"v2",value:{x:1,y:1}}})}var n=t("./AbstractFilter");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.applyFilter=function(t,e,r){var i=t.filterManager,n=this.getShader(t);i.applyFilter(n,e,r)}},{"./AbstractFilter":66}],68:[function(t,e,r){function i(t){var e=new o.Matrix;n.call(this,"attribute vec2 aVertexPosition;\nattribute vec2 aTextureCoord;\nattribute vec4 aColor;\n\nuniform mat3 projectionMatrix;\nuniform mat3 otherMatrix;\n\nvarying vec2 vMaskCoord;\nvarying vec2 vTextureCoord;\nvarying vec4 vColor;\n\nvoid main(void)\n{\n gl_Position = vec4((projectionMatrix * vec3(aVertexPosition, 1.0)).xy, 0.0, 1.0);\n vTextureCoord = aTextureCoord;\n vMaskCoord = ( otherMatrix * vec3( aTextureCoord, 1.0) ).xy;\n vColor = vec4(aColor.rgb * aColor.a, aColor.a);\n}\n","precision lowp float;\n\nvarying vec2 vMaskCoord;\nvarying vec2 vTextureCoord;\nvarying vec4 vColor;\n\nuniform sampler2D uSampler;\nuniform float alpha;\nuniform sampler2D mask;\n\nvoid main(void)\n{\n // check clip! this will stop the mask bleeding out from the edges\n vec2 text = abs( vMaskCoord - 0.5 );\n text = step(0.5, text);\n float clip = 1.0 - max(text.y, text.x);\n vec4 original = texture2D(uSampler, vTextureCoord);\n vec4 masky = texture2D(mask, vMaskCoord);\n original *= (masky.r * masky.a * alpha * clip);\n gl_FragColor = original;\n}\n",{mask:{type:"sampler2D",value:t._texture},alpha:{type:"f",value:1},otherMatrix:{type:"mat3",value:e.toArray(!0)}}),this.maskSprite=t,this.maskMatrix=e}var n=t("./AbstractFilter"),o=t("../../../math");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.applyFilter=function(t,e,r){var i=t.filterManager;this.uniforms.mask.value=this.maskSprite._texture,i.calculateMappedMatrix(e.frame,this.maskSprite,this.maskMatrix),this.uniforms.otherMatrix.value=this.maskMatrix.toArray(!0),this.uniforms.alpha.value=this.maskSprite.worldAlpha;var n=this.getShader(t);i.applyFilter(n,e,r)},Object.defineProperties(i.prototype,{map:{get:function(){return this.uniforms.mask.value},set:function(t){this.uniforms.mask.value=t}},offset:{get:function(){return this.uniforms.offset.value},set:function(t){this.uniforms.offset.value=t}}})},{"../../../math":48,"./AbstractFilter":66}],69:[function(t,e,r){function i(t){n.call(this,t),this.currentBlendMode=99999}var n=t("./WebGLManager");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.setBlendMode=function(t){if(this.currentBlendMode===t)return!1;this.currentBlendMode=t;var e=this.renderer.blendModes[this.currentBlendMode];return this.renderer.gl.blendFunc(e[0],e[1]),!0}},{"./WebGLManager":74}],70:[function(t,e,r){function i(t){n.call(this,t),this.filterStack=[],this.filterStack.push({renderTarget:t.currentRenderTarget,filter:[],bounds:null}),this.texturePool=[],this.textureSize=new h.Rectangle(0,0,t.width,t.height),this.currentFrame=null}var n=t("./WebGLManager"),o=t("../utils/RenderTarget"),s=t("../../../const"),a=t("../utils/Quad"),h=t("../../../math");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.onContextChange=function(){this.texturePool.length=0;var t=this.renderer.gl;this.quad=new a(t)},i.prototype.setFilterStack=function(t){this.filterStack=t},i.prototype.pushFilter=function(t,e){var r=t.filterArea?t.filterArea.clone():t.getBounds();r.x=0|r.x,r.y=0|r.y,r.width=0|r.width,r.height=0|r.height;var i=0|e[0].padding;if(r.x-=i,r.y-=i,r.width+=2*i,r.height+=2*i,this.renderer.currentRenderTarget.transform){var n=this.renderer.currentRenderTarget.transform;r.x+=n.tx,r.y+=n.ty,this.capFilterArea(r),r.x-=n.tx,r.y-=n.ty}else this.capFilterArea(r);if(r.width>0&&r.height>0){this.currentFrame=r;var o=this.getRenderTarget();this.renderer.setRenderTarget(o),o.clear(),this.filterStack.push({renderTarget:o,filter:e})}else this.filterStack.push({renderTarget:null,filter:e})},i.prototype.popFilter=function(){var t=this.filterStack.pop(),e=this.filterStack[this.filterStack.length-1],r=t.renderTarget;if(t.renderTarget){var i=e.renderTarget,n=this.renderer.gl;this.currentFrame=r.frame,this.quad.map(this.textureSize,r.frame),n.bindBuffer(n.ARRAY_BUFFER,this.quad.vertexBuffer),n.bindBuffer(n.ELEMENT_ARRAY_BUFFER,this.quad.indexBuffer);var o=t.filter;if(n.vertexAttribPointer(this.renderer.shaderManager.defaultShader.attributes.aVertexPosition,2,n.FLOAT,!1,0,0),n.vertexAttribPointer(this.renderer.shaderManager.defaultShader.attributes.aTextureCoord,2,n.FLOAT,!1,0,32),n.vertexAttribPointer(this.renderer.shaderManager.defaultShader.attributes.aColor,4,n.FLOAT,!1,0,64),this.renderer.blendModeManager.setBlendMode(s.BLEND_MODES.NORMAL),1===o.length)o[0].uniforms.dimensions&&(o[0].uniforms.dimensions.value[0]=this.renderer.width,o[0].uniforms.dimensions.value[1]=this.renderer.height,o[0].uniforms.dimensions.value[2]=this.quad.vertices[0],o[0].uniforms.dimensions.value[3]=this.quad.vertices[5]),o[0].applyFilter(this.renderer,r,i),this.returnRenderTarget(r);else{for(var a=r,h=this.getRenderTarget(!0),u=0;uthis.textureSize.width&&(t.width=this.textureSize.width-t.x),t.y+t.height>this.textureSize.height&&(t.height=this.textureSize.height-t.y)},i.prototype.resize=function(t,e){this.textureSize.width=t,this.textureSize.height=e;for(var r=0;re;++e)t._array[2*e]=o[e].x,t._array[2*e+1]=o[e].y;s.uniform2fv(i,t._array);break;case"v3v":for(t._array||(t._array=new Float32Array(3*o.length)),e=0,r=o.length;r>e;++e)t._array[3*e]=o[e].x,t._array[3*e+1]=o[e].y,t._array[3*e+2]=o[e].z;s.uniform3fv(i,t._array);break;case"v4v":for(t._array||(t._array=new Float32Array(4*o.length)),e=0,r=o.length;r>e;++e)t._array[4*e]=o[e].x,t._array[4*e+1]=o[e].y,t._array[4*e+2]=o[e].z,t._array[4*e+3]=o[e].w;s.uniform4fv(i,t._array);break;case"t":case"sampler2D":if(!t.value||!t.value.baseTexture.hasLoaded)break;s.activeTexture(s["TEXTURE"+this.textureCount]);var a=t.value.baseTexture._glTextures[s.id];a||(this.initSampler2D(t),a=t.value.baseTexture._glTextures[s.id]),s.bindTexture(s.TEXTURE_2D,a),s.uniform1i(t._location,this.textureCount),this.textureCount++;break;default:console.warn("Pixi.js Shader Warning: Unknown uniform type: "+t.type)}},i.prototype.syncUniforms=function(){this.textureCount=1;for(var t in this.uniforms)this.syncUniform(this.uniforms[t])},i.prototype.initSampler2D=function(t){var e=this.gl,r=t.value.baseTexture;if(r.hasLoaded)if(t.textureData){var i=t.textureData;r._glTextures[e.id]=e.createTexture(),e.bindTexture(e.TEXTURE_2D,r._glTextures[e.id]),e.pixelStorei(e.UNPACK_PREMULTIPLY_ALPHA_WEBGL,r.premultipliedAlpha),e.texImage2D(e.TEXTURE_2D,0,i.luminance?e.LUMINANCE:e.RGBA,e.RGBA,e.UNSIGNED_BYTE,r.source),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MAG_FILTER,i.magFilter?i.magFilter:e.LINEAR),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MIN_FILTER,i.wrapS?i.wrapS:e.CLAMP_TO_EDGE),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,i.wrapS?i.wrapS:e.CLAMP_TO_EDGE),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,i.wrapT?i.wrapT:e.CLAMP_TO_EDGE)}else this.shaderManager.renderer.updateTexture(r)},i.prototype.destroy=function(){this.gl.deleteProgram(this.program),this.gl=null,this.uniforms=null,this.attributes=null,this.vertexSrc=null,this.fragmentSrc=null},i.prototype._glCompile=function(t,e){var r=this.gl.createShader(t);return this.gl.shaderSource(r,e),this.gl.compileShader(r),this.gl.getShaderParameter(r,this.gl.COMPILE_STATUS)?r:(console.log(this.gl.getShaderInfoLog(r)),null)}},{"../../../utils":98}],78:[function(t,e,r){function i(t,e,r,o,s){var a={uSampler:{type:"sampler2D",value:0},projectionMatrix:{type:"mat3",value:new Float32Array([1,0,0,0,1,0,0,0,1])}};if(o)for(var h in o)a[h]=o[h];var u={aVertexPosition:0,aTextureCoord:0,aColor:0};if(s)for(var l in s)u[l]=s[l];e=e||i.defaultVertexSrc,r=r||i.defaultFragmentSrc,n.call(this,t,e,r,a,u)}var n=t("./Shader");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.defaultVertexSrc=["precision lowp float;","attribute vec2 aVertexPosition;","attribute vec2 aTextureCoord;","attribute vec4 aColor;","uniform mat3 projectionMatrix;","varying vec2 vTextureCoord;","varying vec4 vColor;","void main(void){"," gl_Position = vec4((projectionMatrix * vec3(aVertexPosition, 1.0)).xy, 0.0, 1.0);"," vTextureCoord = aTextureCoord;"," vColor = vec4(aColor.rgb * aColor.a, aColor.a);","}"].join("\n"),i.defaultFragmentSrc=["precision lowp float;","varying vec2 vTextureCoord;","varying vec4 vColor;","uniform sampler2D uSampler;","void main(void){"," gl_FragColor = texture2D(uSampler, vTextureCoord) * vColor ;","}"].join("\n")},{"./Shader":77}],79:[function(t,e,r){function i(t){vertexSrc=i.defaultVertexSrc,fragmentSrc=i.defaultFragmentSrc,console.log(fragmentSrc),n.call(this,t,vertexSrc,fragmentSrc)}var n=t("pixi-gl-core").GLShader;i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.defaultVertexSrc=["precision lowp float;","attribute vec2 aVertexPosition;","attribute vec2 aTextureCoord;","attribute vec4 aColor;","uniform mat3 projectionMatrix;","varying vec2 vTextureCoord;","varying vec4 vColor;","void main(void){"," gl_Position = vec4((projectionMatrix * vec3(aVertexPosition, 1.0)).xy, 0.0, 1.0);"," vTextureCoord = aTextureCoord;"," vColor = vec4(aColor.rgb * aColor.a, aColor.a);","}"].join("\n"),i.defaultFragmentSrc=["precision lowp float;","varying vec2 vTextureCoord;","varying vec4 vColor;","uniform sampler2D uSampler;","void main(void){"," gl_FragColor = texture2D(uSampler, vTextureCoord) * vColor ;","}"].join("\n")},{"pixi-gl-core":1}],80:[function(t,e,r){function i(t){n.call(this,t)}var n=t("../managers/WebGLManager");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.start=function(){},i.prototype.stop=function(){this.flush()},i.prototype.flush=function(){},i.prototype.render=function(t){}},{"../managers/WebGLManager":74}],81:[function(t,e,r){function i(t){this.gl=t,this.vertices=new Float32Array([0,0,200,0,200,200,0,200]),this.uvs=new Float32Array([0,0,1,0,1,1,0,1]),this.colors=new Float32Array([1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]),this.indices=new Uint16Array([0,1,2,0,3,2]),this.vertexBuffer=t.createBuffer(),this.indexBuffer=t.createBuffer(),t.bindBuffer(t.ARRAY_BUFFER,this.vertexBuffer),t.bufferData(t.ARRAY_BUFFER,128,t.DYNAMIC_DRAW),t.bindBuffer(t.ELEMENT_ARRAY_BUFFER,this.indexBuffer),t.bufferData(t.ELEMENT_ARRAY_BUFFER,this.indices,t.STATIC_DRAW),this.upload()}i.prototype.constructor=i,i.prototype.map=function(t,e){var r=0,i=0;this.uvs[0]=r,this.uvs[1]=i,this.uvs[2]=r+e.width/t.width,this.uvs[3]=i,this.uvs[4]=r+e.width/t.width,this.uvs[5]=i+e.height/t.height,this.uvs[6]=r,this.uvs[7]=i+e.height/t.height,r=e.x,i=e.y,this.vertices[0]=r,this.vertices[1]=i,this.vertices[2]=r+e.width,this.vertices[3]=i,this.vertices[4]=r+e.width,this.vertices[5]=i+e.height,this.vertices[6]=r,this.vertices[7]=i+e.height,this.upload()},i.prototype.upload=function(){var t=this.gl;t.bindBuffer(t.ARRAY_BUFFER,this.vertexBuffer),t.bufferSubData(t.ARRAY_BUFFER,0,this.vertices),t.bufferSubData(t.ARRAY_BUFFER,32,this.uvs),t.bufferSubData(t.ARRAY_BUFFER,64,this.colors)},i.prototype.destroy=function(){var t=this.gl;t.deleteBuffer(this.vertexBuffer),t.deleteBuffer(this.indexBuffer)},e.exports=i},{}],82:[function(t,e,r){var i=t("../../../math"),n=(t("../../../utils"),t("../../../const")),o=t("pixi-gl-core").GLTexture,s=t("pixi-gl-core").GLFramebuffer,a=t("./StencilMaskStack"),h=function(t,e,r,h,u,l){if(this.gl=t,this.frameBuffer=null,this.texture=null,this.clearColor=[0,0,0,0],this.size=new i.Rectangle(0,0,1,1),this.resolution=u||n.RESOLUTION,this.projectionMatrix=new i.Matrix,this.transform=null,this.frame=null,this.stencilBuffer=null,this.stencilMaskStack=new a,this.filterStack=[{renderTarget:this,filter:[],bounds:this.size}],this.scaleMode=h||n.SCALE_MODES.DEFAULT,this.root=l,this.frameBuffer=new s.createRGBA(t,100,100),this.root)this.frameBuffer.framebuffer=null;else{var c=new o(t);c.enableLinearScaling(),c.enableWrapClamp(),this.frameBuffer.enableTexture(c),this.texture=c.texture}this.resize(e,r)};h.prototype.constructor=h,e.exports=h,h.prototype.clear=function(t){var e=t||this.clearColor;this.frameBuffer.clear(e[0],e[1],e[2],e[3])},h.prototype.attachStencilBuffer=function(){this.root||this.frameBuffer.enableStencil()},h.prototype.activate=function(){var t=this.gl;this.frameBuffer.bind();var e=this.frame||this.size;this.calculateProjection(e),this.transform&&this.projectionMatrix.append(this.transform),t.viewport(0,0,e.width*this.resolution,e.height*this.resolution)},h.prototype.calculateProjection=function(t){var e=this.projectionMatrix;e.identity(),this.root?(e.a=1/t.width*2,e.d=-1/t.height*2,e.tx=-1-t.x*e.a,e.ty=1-t.y*e.d):(e.a=1/t.width*2,e.d=1/t.height*2,e.tx=-1-t.x*e.a,e.ty=-1-t.y*e.d)},h.prototype.resize=function(t,e){if(t=0|t,e=0|e,this.size.width!==t||this.size.height!==e){this.size.width=t,this.size.height=e,this.frameBuffer.resize(t*this.resolution,e*this.resolution);var r=this.frame||this.size;this.calculateProjection(r)}},h.prototype.destroy=function(){this.gl;this.frameBuffer.destroy(),this.frameBuffer=null,this.texture=null}},{"../../../const":38,"../../../math":48,"../../../utils":98,"./StencilMaskStack":83,"pixi-gl-core":1}],83:[function(t,e,r){function i(){this.stencilStack=[],this.reverse=!0,this.count=0}i.prototype.constructor=i,e.exports=i},{}],84:[function(t,e,r){function i(t,e){return e=e||{},e[CONST.BLEND_MODES.NORMAL]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.ADD]=[t.SRC_ALPHA,t.DST_ALPHA],e[CONST.BLEND_MODES.MULTIPLY]=[t.DST_COLOR,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.SCREEN]=[t.SRC_ALPHA,t.ONE],e[CONST.BLEND_MODES.OVERLAY]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.DARKEN]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.LIGHTEN]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.COLOR_DODGE]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.COLOR_BURN]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.HARD_LIGHT]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.SOFT_LIGHT]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.DIFFERENCE]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.EXCLUSION]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.HUE]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.SATURATION]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.COLOR]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.LUMINOSITY]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e}CONST=t("../../../const"),e.exports=i},{"../../../const":38}],85:[function(t,e,r){function i(t,e){e=e||{},e[CONST.DRAW_MODES.POINTS]=t.POINTS,e[CONST.DRAW_MODES.LINES]=t.LINES,e[CONST.DRAW_MODES.LINE_LOOP]=t.LINE_LOOP,e[CONST.DRAW_MODES.LINE_STRIP]=t.LINE_STRIP,e[CONST.DRAW_MODES.TRIANGLES]=t.TRIANGLES,e[CONST.DRAW_MODES.TRIANGLE_STRIP]=t.TRIANGLE_STRIP,e[CONST.DRAW_MODES.TRIANGLE_FAN]=t.TRIANGLE_FAN}CONST=t("../../../const"),e.exports=i},{"../../../const":38}],86:[function(t,e,r){function i(t){s.call(this),this.anchor=new n.Point,this._texture=null,this._width=0,this._height=0,this.tint=16777215,this.blendMode=u.BLEND_MODES.NORMAL,this.shader=null,this.cachedTint=16777215,this.texture=t||o.EMPTY,this.textureDirty=!0,this.vertexDirty=!0,this.vertexData=new Float32Array(8)}var n=t("../math"),o=t("../textures/Texture"),s=t("../display/Container"),a=t("../renderers/canvas/utils/CanvasTinter"),h=t("../utils"),u=t("../const"),l=new n.Point;i.prototype=Object.create(s.prototype),i.prototype.constructor=i,e.exports=i,Object.defineProperties(i.prototype,{width:{get:function(){return Math.abs(this.scale.x)*this.texture._frame.width},set:function(t){var e=h.sign(this.scale.x)||1;this.scale.x=e*t/this.texture._frame.width,this._width=t}},height:{get:function(){return Math.abs(this.scale.y)*this.texture._frame.height},set:function(t){var e=h.sign(this.scale.y)||1;this.scale.y=e*t/this.texture._frame.height,this._height=t}},texture:{get:function(){return this._texture},set:function(t){this._texture!==t&&(this._texture=t,this.cachedTint=16777215,this.textureDirty=!0,t&&(t.baseTexture.hasLoaded?this._onTextureUpdate():t.once("update",this._onTextureUpdate,this)))}}}),i.prototype._onTextureUpdate=function(){this.textureDirty=!0,this._width&&(this.scale.x=h.sign(this.scale.x)*this._width/this.texture.frame.width),this._height&&(this.scale.y=h.sign(this.scale.y)*this._height/this.texture.frame.height)},i.prototype.caclulateVertices=function(){var t,e,r,i,n=this._texture,o=this.worldTransform,s=o.a,a=o.b,h=o.c,u=o.d,l=o.tx,c=o.ty,p=this.vertexData,d=n.trim;d?(e=d.x-this.anchor.x*d.width,t=e+n.crop.width,i=d.y-this.anchor.y*d.height,r=i+n.crop.height):(t=n._frame.width*(1-this.anchor.x),e=n._frame.width*-this.anchor.x,r=n._frame.height*(1-this.anchor.y),i=n._frame.height*-this.anchor.y),p[0]=s*e+h*i+l,p[1]=u*i+a*e+c,p[2]=s*t+h*i+l,p[3]=u*i+a*t+c,p[4]=s*t+h*r+l,p[5]=u*r+a*t+c,p[6]=s*e+h*r+l,p[7]=u*r+a*e+c},i.prototype._renderWebGL=function(t){this.textureDirty&&(this.textureDirty=!1,this._onTextureUpdate(),this.vertexDirty=!0),this.vertexDirty&&(this.vertexDirty=!1,this.caclulateVertices()),t.setObjectRenderer(t.plugins.sprite),t.plugins.sprite.render(this)},i.prototype.getBounds=function(t){if(!this._currentBounds){this.vertexDirty&&(this.vertexDirty=!1,this.caclulateVertices());var e,r,i,n,o=this.vertexData,s=o[0],a=o[1],h=o[2],u=o[3],l=o[4],c=o[5],p=o[6],d=o[7];if(e=s,e=e>h?h:e,e=e>l?l:e,e=e>p?p:e,i=a,i=i>u?u:i,i=i>c?c:i,i=i>d?d:i,r=s,r=h>r?h:r,r=l>r?l:r,r=p>r?p:r,n=a,n=u>n?u:n,n=c>n?c:n,n=d>n?d:n,this.children.length){var f=this.containerGetBounds();w0=f.x,w1=f.x+f.width,h0=f.y,h1=f.y+f.height,e=ew1?r:w1,n=n>h1?n:h1}var v=this._bounds;v.x=e,v.width=r-e,v.y=i,v.height=n-i,this._currentBounds=v}return this._currentBounds},i.prototype.getLocalBounds=function(){return this._bounds.x=-this._texture._frame.width*this.anchor.x,this._bounds.y=-this._texture._frame.height*this.anchor.y,this._bounds.width=this._texture._frame.width,this._bounds.height=this._texture._frame.height,this._bounds},i.prototype.containsPoint=function(t){this.worldTransform.applyInverse(t,l);var e,r=this._texture._frame.width,i=this._texture._frame.height,n=-r*this.anchor.x;return l.x>n&&l.xe&&l.yr;r++)this.groups[r]={textures:[],textureCount:0,ids:[],size:0,start:0,blend:0};this.currentGroup=this.groups[this.groupCount++],this.currentTexture=null}var n=t("../../renderers/webgl/utils/ObjectRenderer"),o=t("../../renderers/webgl/WebGLRenderer"),s=(t("../../renderers/webgl/shaders/_TextureShader"),t("../../utils/createIndicesForQuads")),a=t("./generateMultiTextureShader"),h=t("../../const"),u=t("pixi-gl-core"),l=2;i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,o.registerPlugin("sprite",i),i.prototype.onContextChange=function(){var t=this.renderer.gl;this._shader=a(t,l),this.shader=this.renderer.shaderManager.defaultShader,this.vertexBuffer=u.GLBuffer.createVertexBuffer(t,null,t.DYNAMIC_DRAW),this.indexBuffer=u.GLBuffer.createIndexBuffer(t,this.indices,t.STATIC_DRAW),this.vao=new u.VertexArrayObject(t),this.vao.addIndex(this.indexBuffer),this.vao.addAttribute(this.vertexBuffer,this._shader.attributes.aVertexPosition,t.FLOAT,!1,this.vertByteSize,0),this.vao.addAttribute(this.vertexBuffer,this._shader.attributes.aTextureCoord,t.UNSIGNED_SHORT,!0,this.vertByteSize,8),this.vao.addAttribute(this.vertexBuffer,this._shader.attributes.aColor,t.UNSIGNED_BYTE,!0,this.vertByteSize,12),this.vao.addAttribute(this.vertexBuffer,this._shader.attributes.aTextureId,t.FLOAT,!1,this.vertByteSize,16),this.currentBlendMode=99999},i.prototype.render=function(t){this.currentIndex>=this.size&&this.flush();var e=t.texture._uvs;if(e){var r=(this.groups,t.texture.baseTexture),i=this.currentGroup;if(this.currentTexture!==r&&(this.currentTexture=r,!r._enabled)){if(r._enabled=!0,r._id=this.textureCount,this.textureCount===l){for(var n=0;n>16)+(65280&t.tint)+((255&t.tint)<<16)+(255*t.worldAlpha<<24);a[o++]=h[0],a[o++]=h[1],this.uvs[o++]=e.uvs_uint32[0],s[o++]=u,a[o++]=r._id,a[o++]=h[2],a[o++]=h[3],this.uvs[o++]=e.uvs_uint32[1],s[o++]=u,a[o++]=r._id,a[o++]=h[4],a[o++]=h[5],this.uvs[o++]=e.uvs_uint32[2],s[o++]=u,a[o++]=r._id,a[o++]=h[6],a[o++]=h[7],this.uvs[o++]=e.uvs_uint32[3],s[o++]=u,a[o++]=r._id,this.sprites[this.currentBatchSize++]=t}},i.prototype.renderSprites=function(t){for(var e=0;e.5*this.size)this.vertexBuffer.upload(this.vertices,0,!0);else{var e=this.positions.subarray(0,this.currentIndex*this.vertByteSize);this.vertexBuffer.upload(e,0,!0)}for(this.renderer.bindShader(this._shader),this.renderer.blendModeManager.setBlendMode(0),t=0;tu;u++)h[u]=u;return a.bind(),a.uniforms.uSamplers=h,a}function n(t){var e="vec4 getSampleFromArray(sampler2D textures[%%], int ndx, vec2 uv) {\n\nvec4 color;";e+="\n", -e+="\n";for(var r=0;t>r;r++)r>0&&(e+="\nelse "),t-1>r&&(e+="if(ndx == "+r+")"),e+="\n{",e+="\n color = texture2D(textures["+r+"], uv);",e+="\n}";return e+="\n",e+="\n",e+="return color;",e+="\n}"}var o=t("pixi-gl-core").GLShader,s=["varying vec2 vTextureCoord;","varying vec4 vColor;","varying float vTextureId;","uniform sampler2D uSamplers[%%];","void main(void){","gl_FragColor = getSampleFromArray(uSamplers, int(vTextureId), vTextureCoord) * vColor;","}"].join("\n");e.exports=i},{"pixi-gl-core":1}],89:[function(t,e,r){function i(t,e,r){this.canvas=document.createElement("canvas"),this.context=this.canvas.getContext("2d"),this.resolution=r||h.RESOLUTION,this._text=null,this._style=null;var i=o.fromCanvas(this.canvas);i.trim=new s.Rectangle,n.call(this,i),this.text=t,this.style=e}var n=t("../sprites/Sprite"),o=t("../textures/Texture"),s=t("../math"),a=t("../utils"),h=t("../const");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.fontPropertiesCache={},i.fontPropertiesCanvas=document.createElement("canvas"),i.fontPropertiesContext=i.fontPropertiesCanvas.getContext("2d"),Object.defineProperties(i.prototype,{width:{get:function(){return this.dirty&&this.updateText(),this.scale.x*this._texture._frame.width},set:function(t){this.scale.x=t/this._texture._frame.width,this._width=t}},height:{get:function(){return this.dirty&&this.updateText(),this.scale.y*this._texture._frame.height},set:function(t){this.scale.y=t/this._texture._frame.height,this._height=t}},style:{get:function(){return this._style},set:function(t){t=t||{},"number"==typeof t.fill&&(t.fill=a.hex2string(t.fill)),"number"==typeof t.stroke&&(t.stroke=a.hex2string(t.stroke)),"number"==typeof t.dropShadowColor&&(t.dropShadowColor=a.hex2string(t.dropShadowColor)),t.font=t.font||"bold 20pt Arial",t.fill=t.fill||"black",t.align=t.align||"left",t.stroke=t.stroke||"black",t.strokeThickness=t.strokeThickness||0,t.wordWrap=t.wordWrap||!1,t.wordWrapWidth=t.wordWrapWidth||100,t.dropShadow=t.dropShadow||!1,t.dropShadowColor=t.dropShadowColor||"#000000",t.dropShadowAngle=void 0!==t.dropShadowAngle?t.dropShadowAngle:Math.PI/6,t.dropShadowDistance=void 0!==t.dropShadowDistance?t.dropShadowDistance:5,t.dropShadowBlur=void 0!==t.dropShadowBlur?t.dropShadowBlur:0,t.padding=t.padding||0,t.textBaseline=t.textBaseline||"alphabetic",t.lineJoin=t.lineJoin||"miter",t.miterLimit=t.miterLimit||10,this._style=t,this.dirty=!0}},text:{get:function(){return this._text},set:function(t){t=t.toString()||" ",this._text!==t&&(this._text=t,this.dirty=!0)}}}),i.prototype.updateText=function(){var t=this._style;this.context.font=t.font;for(var e=t.wordWrap?this.wordWrap(this._text):this._text,r=e.split(/(?:\r\n|\r|\n)/),i=new Array(r.length),n=0,o=this.determineFontProperties(t.font),s=0;s0?(this.context.shadowColor=t.dropShadowColor,this.context.shadowBlur=t.dropShadowBlur):this.context.fillStyle=t.dropShadowColor;var d=Math.cos(t.dropShadowAngle)*t.dropShadowDistance,f=Math.sin(t.dropShadowAngle)*t.dropShadowDistance;for(s=0;sh;h++){for(u=0;p>u;u+=4)if(255!==l[d+u]){f=!0;break}if(f)break;d+=p}for(e.ascent=s-h,d=c-p,f=!1,h=a;h>s;h--){for(u=0;p>u;u+=4)if(255!==l[d+u]){f=!0;break}if(f)break;d-=p}e.descent=h-s,e.fontSize=e.ascent+e.descent,i.fontPropertiesCache[t]=e}return e},i.prototype.wordWrap=function(t){for(var e="",r=t.split("\n"),i=this._style.wordWrapWidth,n=0;no?(a>0&&(e+="\n"),e+=s[a],o=i-h):(o-=u,e+=" "+s[a])}n0&&e>0,this.width=this._frame.width=this.crop.width=t,this.height=this._frame.height=this.crop.height=e,r&&(this.baseTexture.width=this.width,this.baseTexture.height=this.height),this.valid&&(this.textureBuffer.resize(this.width,this.height),this.filterManager&&this.filterManager.resize(this.width,this.height)))},i.prototype.clear=function(){this.valid&&(this.renderer.type===l.RENDERER_TYPE.WEBGL&&this.renderer.gl.bindFramebuffer(this.renderer.gl.FRAMEBUFFER,this.textureBuffer.frameBuffer),this.textureBuffer.clear())},i.prototype.renderWebGL=function(t,e,r,i){if(this.valid){if(i=void 0!==i?i:!0,this.textureBuffer.transform=e,this.textureBuffer.activate(),t.worldAlpha=1,i){t.worldTransform.identity(),t.currentBounds=null;var n,o,s=t.children;for(n=0,o=s.length;o>n;++n)s[n].updateTransform()}var a=this.renderer.filterManager;this.renderer.filterManager=this.filterManager,this.renderer.renderDisplayObject(t,this.textureBuffer,r),this.renderer.filterManager=a}},i.prototype.renderCanvas=function(t,e,r,i){if(this.valid){i=!!i;var n=c;n.identity(),e&&n.append(e);var o=t.worldTransform;t.worldTransform=n,t.worldAlpha=1;var s,a,h=t.children;for(s=0,a=h.length;a>s;++s)h[s].updateTransform();r&&this.textureBuffer.clear();var u=this.textureBuffer.context,l=this.renderer.resolution;this.renderer.resolution=this.resolution,this.renderer.renderDisplayObject(t,u),this.renderer.resolution=l,t.worldTransform===n&&(t.worldTransform=o)}},i.prototype.destroy=function(){o.prototype.destroy.call(this,!0),this.textureBuffer.destroy(),this.filterManager&&this.filterManager.destroy(),this.renderer=null},i.prototype.getImage=function(){var t=new Image;return t.src=this.getBase64(),t},i.prototype.getBase64=function(){return this.getCanvas().toDataURL()},i.prototype.getCanvas=function(){if(this.renderer.type===l.RENDERER_TYPE.WEBGL){var t=this.renderer.gl,e=this.textureBuffer.size.width,r=this.textureBuffer.size.height,i=new Uint8Array(4*e*r);t.bindFramebuffer(t.FRAMEBUFFER,this.textureBuffer.frameBuffer),t.readPixels(0,0,e,r,t.RGBA,t.UNSIGNED_BYTE,i),t.bindFramebuffer(t.FRAMEBUFFER,null);var n=new h(e,r),o=n.context.getImageData(0,0,e,r);return o.data.set(i),n.context.putImageData(o,0,0),n.canvas}return this.textureBuffer.canvas},i.prototype.getPixels=function(){var t,e;if(this.renderer.type===l.RENDERER_TYPE.WEBGL){var r=this.renderer.gl;t=this.textureBuffer.size.width,e=this.textureBuffer.size.height;var i=new Uint8Array(4*t*e);return r.bindFramebuffer(r.FRAMEBUFFER,this.textureBuffer.frameBuffer),r.readPixels(0,0,t,e,r.RGBA,r.UNSIGNED_BYTE,i),r.bindFramebuffer(r.FRAMEBUFFER,null),i}return t=this.textureBuffer.canvas.width,e=this.textureBuffer.canvas.height,this.textureBuffer.canvas.getContext("2d").getImageData(0,0,t,e).data},i.prototype.getPixel=function(t,e){if(this.renderer.type===l.RENDERER_TYPE.WEBGL){var r=this.renderer.gl,i=new Uint8Array(4);return r.bindFramebuffer(r.FRAMEBUFFER,this.textureBuffer.frameBuffer),r.readPixels(t,e,1,1,r.RGBA,r.UNSIGNED_BYTE,i),r.bindFramebuffer(r.FRAMEBUFFER,null),i}return this.textureBuffer.canvas.getContext("2d").getImageData(t,e,1,1).data}},{"../const":38,"../math":48,"../renderers/canvas/utils/CanvasBuffer":60,"../renderers/webgl/managers/FilterManager":70,"../renderers/webgl/utils/RenderTarget":82,"./BaseTexture":90,"./Texture":92}],92:[function(t,e,r){function i(t,e,r,n,o){a.call(this),this.noFrame=!1,e||(this.noFrame=!0,e=new h.Rectangle(0,0,1,1)),t instanceof i&&(t=t.baseTexture),this.baseTexture=t,this._frame=e,this.trim=n,this.valid=!1,this.requiresUpdate=!1,this._uvs=null,this.width=0,this.height=0,this.crop=r||e,this.rotate=!!o,t.hasLoaded?(this.noFrame&&(e=new h.Rectangle(0,0,t.width,t.height),t.on("update",this.onBaseTextureUpdated,this)),this.frame=e):t.once("loaded",this.onBaseTextureLoaded,this)}var n=t("./BaseTexture"),o=t("./VideoBaseTexture"),s=t("./TextureUvs"),a=t("eventemitter3"),h=t("../math"),u=t("../utils");i.prototype=Object.create(a.prototype),i.prototype.constructor=i,e.exports=i,Object.defineProperties(i.prototype,{frame:{get:function(){return this._frame},set:function(t){if(this._frame=t,this.noFrame=!1,this.width=t.width,this.height=t.height,!this.trim&&!this.rotate&&(t.x+t.width>this.baseTexture.width||t.y+t.height>this.baseTexture.height))throw new Error("Texture Error: frame does not fit inside the base Texture dimensions "+this);this.valid=t&&t.width&&t.height&&this.baseTexture.hasLoaded,this.trim?(this.width=this.trim.width,this.height=this.trim.height,this._frame.width=this.trim.width,this._frame.height=this.trim.height):this.crop=t,this.valid&&this._updateUvs()}}}),i.prototype.update=function(){this.baseTexture.update()},i.prototype.onBaseTextureLoaded=function(t){this.noFrame?this.frame=new h.Rectangle(0,0,t.width,t.height):this.frame=this._frame,this.emit("update",this)},i.prototype.onBaseTextureUpdated=function(t){this._frame.width=t.width,this._frame.height=t.height,this.emit("update",this)},i.prototype.destroy=function(t){this.baseTexture&&(t&&this.baseTexture.destroy(),this.baseTexture.off("update",this.onBaseTextureUpdated,this),this.baseTexture.off("loaded",this.onBaseTextureLoaded,this),this.baseTexture=null),this._frame=null,this._uvs=null,this.trim=null,this.crop=null,this.valid=!1,this.off("dispose",this.dispose,this),this.off("update",this.update,this)},i.prototype.clone=function(){return new i(this.baseTexture,this.frame,this.crop,this.trim,this.rotate)},i.prototype._updateUvs=function(){this._uvs||(this._uvs=new s),this._uvs.set(this.crop,this.baseTexture,this.rotate)},i.fromImage=function(t,e,r){var o=u.TextureCache[t];return o||(o=new i(n.fromImage(t,e,r)),u.TextureCache[t]=o),o},i.fromFrame=function(t){var e=u.TextureCache[t];if(!e)throw new Error('The frameId "'+t+'" does not exist in the texture cache');return e},i.fromCanvas=function(t,e){return new i(n.fromCanvas(t,e))},i.fromVideo=function(t,e){return"string"==typeof t?i.fromVideoUrl(t,e):new i(o.fromVideo(t,e))},i.fromVideoUrl=function(t,e){return new i(o.fromUrl(t,e))},i.addTextureToCache=function(t,e){u.TextureCache[e]=t},i.removeTextureFromCache=function(t){var e=u.TextureCache[t];return delete u.TextureCache[t],delete u.BaseTextureCache[t],e},i.EMPTY=new i(new n)},{"../math":48,"../utils":98,"./BaseTexture":90,"./TextureUvs":93,"./VideoBaseTexture":94,eventemitter3:25}],93:[function(t,e,r){function i(){this.x0=0,this.y0=0,this.x1=1,this.y1=0,this.x2=1,this.y2=1,this.x3=0,this.y3=1,this.xy0_uint32=0,this.xy1_uint32=0,this.xy2_uint32=0,this.xy3_uint32=0,this.uvs_uint32=new Uint32Array(4)}e.exports=i,i.prototype.set=function(t,e,r){var i=e.width,n=e.height;r?(this.x0=(t.x+t.height)/i,this.y0=t.y/n,this.x1=(t.x+t.height)/i,this.y1=(t.y+t.width)/n,this.x2=t.x/i,this.y2=(t.y+t.width)/n,this.x3=t.x/i,this.y3=t.y/n):(this.x0=t.x/i,this.y0=t.y/n,this.x1=(t.x+t.width)/i,this.y1=t.y/n,this.x2=(t.x+t.width)/i,this.y2=(t.y+t.height)/n,this.x3=t.x/i,this.y3=(t.y+t.height)/n),this.uvs_uint32[0]=(65535*this.y0&65535)<<16|65535*this.x0&65535,this.uvs_uint32[1]=(65535*this.y1&65535)<<16|65535*this.x1&65535,this.uvs_uint32[2]=(65535*this.y2&65535)<<16|65535*this.x2&65535,this.uvs_uint32[3]=(65535*this.y3&65535)<<16|65535*this.x3&65535}},{}],94:[function(t,e,r){function i(t,e){if(!t)throw new Error("No video source element specified.");(t.readyState===t.HAVE_ENOUGH_DATA||t.readyState===t.HAVE_FUTURE_DATA)&&t.width&&t.height&&(t.complete=!0),o.call(this,t,e),this.autoUpdate=!1,this._onUpdate=this._onUpdate.bind(this),this._onCanPlay=this._onCanPlay.bind(this),t.complete||(t.addEventListener("canplay",this._onCanPlay),t.addEventListener("canplaythrough",this._onCanPlay),t.addEventListener("play",this._onPlayStart.bind(this)),t.addEventListener("pause",this._onPlayStop.bind(this))),this.__loaded=!1}function n(t,e){e||(e="video/"+t.substr(t.lastIndexOf(".")+1));var r=document.createElement("source");return r.src=t,r.type=e,r}var o=t("./BaseTexture"),s=t("../utils");i.prototype=Object.create(o.prototype),i.prototype.constructor=i,e.exports=i,i.prototype._onUpdate=function(){this.autoUpdate&&(window.requestAnimationFrame(this._onUpdate),this.update())},i.prototype._onPlayStart=function(){this.autoUpdate||(window.requestAnimationFrame(this._onUpdate),this.autoUpdate=!0)},i.prototype._onPlayStop=function(){this.autoUpdate=!1},i.prototype._onCanPlay=function(){this.hasLoaded=!0,this.source&&(this.source.removeEventListener("canplay",this._onCanPlay),this.source.removeEventListener("canplaythrough",this._onCanPlay),this.width=this.source.videoWidth,this.height=this.source.videoHeight,this.source.play(),this.__loaded||(this.__loaded=!0,this.emit("loaded",this)))},i.prototype.destroy=function(){this.source&&this.source._pixiId&&(delete s.BaseTextureCache[this.source._pixiId],delete this.source._pixiId),o.prototype.destroy.call(this)},i.fromVideo=function(t,e){t._pixiId||(t._pixiId="video_"+s.uid());var r=s.BaseTextureCache[t._pixiId];return r||(r=new i(t,e),s.BaseTextureCache[t._pixiId]=r),r},i.fromUrl=function(t,e){var r=document.createElement("video");if(Array.isArray(t))for(var o=0;othis._maxElapsedMS&&(e=this._maxElapsedMS),this.deltaTime=e*n.TARGET_FPMS*this.speed,this._emitter.emit(s,this.deltaTime),this.lastTime=t},e.exports=i},{"../const":38,eventemitter3:25}],96:[function(t,e,r){var i=t("./Ticker"),n=new i;n.autoStart=!0,e.exports={shared:n,Ticker:i}},{"./Ticker":95}],97:[function(t,e,r){var i=function(t){for(var e=6*t,r=new Uint16Array(e),i=0,n=0;e>i;i+=6,n+=4)r[i+0]=n+0,r[i+1]=n+1,r[i+2]=n+2,r[i+3]=n+0,r[i+4]=n+2,r[i+5]=n+3;return r};e.exports=i},{}],98:[function(t,e,r){var i=t("../const"),n=e.exports={_uid:0,_saidHello:!1,EventEmitter:t("eventemitter3"),pluginTarget:t("./pluginTarget"),async:t("async"),uid:function(){return++n._uid},hex2rgb:function(t,e){return e=e||[],e[0]=(t>>16&255)/255,e[1]=(t>>8&255)/255,e[2]=(255&t)/255,e},hex2string:function(t){return t=t.toString(16),t="000000".substr(0,6-t.length)+t,"#"+t},rgb2hex:function(t){return(255*t[0]<<16)+(255*t[1]<<8)+255*t[2]},canUseNewCanvasBlendModes:function(){if("undefined"==typeof document)return!1;var t="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAQAAAABAQMAAADD8p2OAAAAA1BMVEX/",e="AAAACklEQVQI12NgAAAAAgAB4iG8MwAAAABJRU5ErkJggg==",r=new Image;r.src=t+"AP804Oa6"+e;var i=new Image;i.src=t+"/wCKxvRF"+e;var n=document.createElement("canvas");n.width=6,n.height=1;var o=n.getContext("2d");o.globalCompositeOperation="multiply",o.drawImage(r,0,0),o.drawImage(i,2,0);var s=o.getImageData(2,0,1,1).data;return 255===s[0]&&0===s[1]&&0===s[2]},getNextPowerOfTwo:function(t){if(t>0&&0===(t&t-1))return t;for(var e=1;t>e;)e<<=1;return e},isPowerOfTwo:function(t,e){return t>0&&0===(t&t-1)&&e>0&&0===(e&e-1)},getResolutionOfUrl:function(t){var e=i.RETINA_PREFIX.exec(t);return e?parseFloat(e[1]):1},sayHello:function(t){if(!n._saidHello){if(navigator.userAgent.toLowerCase().indexOf("chrome")>-1){var e=["\n %c %c %c Pixi.js "+i.VERSION+" - ✰ "+t+" ✰ %c %c http://www.pixijs.com/ %c %c ♥%c♥%c♥ \n\n","background: #ff66a5; padding:5px 0;","background: #ff66a5; padding:5px 0;","color: #ff66a5; background: #030307; padding:5px 0;","background: #ff66a5; padding:5px 0;","background: #ffc3dc; padding:5px 0;","background: #ff66a5; padding:5px 0;","color: #ff2424; background: #fff; padding:5px 0;","color: #ff2424; background: #fff; padding:5px 0;","color: #ff2424; background: #fff; padding:5px 0;"];window.console.log.apply(console,e)}else window.console&&window.console.log("Pixi.js "+i.VERSION+" - "+t+" - http://www.pixijs.com/");n._saidHello=!0}},isWebGLSupported:function(){var t={stencil:!0};try{if(!window.WebGLRenderingContext)return!1;var e=document.createElement("canvas"),r=e.getContext("webgl",t)||e.getContext("experimental-webgl",t);return!(!r||!r.getContextAttributes().stencil)}catch(i){return!1}},sign:function(t){return t?0>t?-1:1:0},removeItems:function(t,e,r){var i=t.length;if(!(e>=i||0===r)){r=e+r>i?i-e:r;for(var n=e,o=i-r;o>n;++n)t[n]=t[n+r];t.length=o}},TextureCache:{},BaseTextureCache:{}}},{"../const":38,"./pluginTarget":99,async:16,eventemitter3:25}],99:[function(t,e,r){function i(t){t.__plugins={},t.registerPlugin=function(e,r){t.__plugins[e]=r},t.prototype.initPlugins=function(){this.plugins=this.plugins||{};for(var e in t.__plugins)this.plugins[e]=new t.__plugins[e](this)},t.prototype.destroyPlugins=function(){for(var t in this.plugins)this.plugins[t].destroy(),this.plugins[t]=null;this.plugins=null}}e.exports={mixin:function(t){i(t)}}},{}],100:[function(t,e,r){var i=t("./core"),n=t("./mesh"),o=t("./extras"),s=t("./filters");i.SpriteBatch=function(){throw new ReferenceError("SpriteBatch does not exist any more, please use the new ParticleContainer instead.")},i.AssetLoader=function(){throw new ReferenceError("The loader system was overhauled in pixi v3, please see the new PIXI.loaders.Loader class.")},Object.defineProperties(i,{Stage:{get:function(){return console.warn("You do not need to use a PIXI Stage any more, you can simply render any container."),i.Container}},DisplayObjectContainer:{get:function(){return console.warn("DisplayObjectContainer has been shortened to Container, please use Container from now on."),i.Container}},Strip:{get:function(){return console.warn("The Strip class has been renamed to Mesh and moved to mesh.Mesh, please use mesh.Mesh from now on."),n.Mesh}},Rope:{get:function(){return console.warn("The Rope class has been moved to mesh.Rope, please use mesh.Rope from now on."),n.Rope}},MovieClip:{get:function(){return console.warn("The MovieClip class has been moved to extras.MovieClip, please use extras.MovieClip from now on."),o.MovieClip}},TilingSprite:{get:function(){return console.warn("The TilingSprite class has been moved to extras.TilingSprite, please use extras.TilingSprite from now on."),o.TilingSprite}},BitmapText:{get:function(){return console.warn("The BitmapText class has been moved to extras.BitmapText, please use extras.BitmapText from now on."),o.BitmapText}},blendModes:{get:function(){return console.warn("The blendModes has been moved to BLEND_MODES, please use BLEND_MODES from now on."),i.BLEND_MODES}},scaleModes:{get:function(){return console.warn("The scaleModes has been moved to SCALE_MODES, please use SCALE_MODES from now on."),i.SCALE_MODES}},BaseTextureCache:{get:function(){return console.warn("The BaseTextureCache class has been moved to utils.BaseTextureCache, please use utils.BaseTextureCache from now on."),i.utils.BaseTextureCache}},TextureCache:{get:function(){return console.warn("The TextureCache class has been moved to utils.TextureCache, please use utils.TextureCache from now on."),i.utils.TextureCache}},math:{get:function(){return console.warn("The math namespace is deprecated, please access members already accessible on PIXI."),i}}}),i.Sprite.prototype.setTexture=function(t){this.texture=t,console.warn("setTexture is now deprecated, please use the texture property, e.g : sprite.texture = texture;")},o.BitmapText.prototype.setText=function(t){this.text=t,console.warn("setText is now deprecated, please use the text property, e.g : myBitmapText.text = 'my text';")},i.Text.prototype.setText=function(t){this.text=t,console.warn("setText is now deprecated, please use the text property, e.g : myText.text = 'my text';")},i.Text.prototype.setStyle=function(t){this.style=t,console.warn("setStyle is now deprecated, please use the style property, e.g : myText.style = style;")},i.Texture.prototype.setFrame=function(t){this.frame=t,console.warn("setFrame is now deprecated, please use the frame property, e.g : myTexture.frame = frame;")},Object.defineProperties(s,{AbstractFilter:{get:function(){return console.warn("filters.AbstractFilter is an undocumented alias, please use AbstractFilter from now on."),i.AbstractFilter}},FXAAFilter:{get:function(){return console.warn("filters.FXAAFilter is an undocumented alias, please use FXAAFilter from now on."),i.FXAAFilter}},SpriteMaskFilter:{get:function(){return console.warn("filters.SpriteMaskFilter is an undocumented alias, please use SpriteMaskFilter from now on."),i.SpriteMaskFilter}}}),i.utils.uuid=function(){return console.warn("utils.uuid() is deprecated, please use utils.uid() from now on."),i.utils.uid()}},{"./core":45,"./extras":107,"./filters":124,"./mesh":149}],101:[function(t,e,r){function i(t,e){n.Container.call(this),e=e||{},this.textWidth=0,this.textHeight=0,this._glyphs=[],this._font={tint:void 0!==e.tint?e.tint:16777215,align:e.align||"left",name:null,size:0},this.font=e.font,this._text=t,this.maxWidth=0,this.maxLineHeight=0,this.dirty=!1,this.updateText()}var n=t("../core");i.prototype=Object.create(n.Container.prototype),i.prototype.constructor=i,e.exports=i,Object.defineProperties(i.prototype,{tint:{get:function(){return this._font.tint},set:function(t){this._font.tint="number"==typeof t&&t>=0?t:16777215,this.dirty=!0}},align:{get:function(){return this._font.align},set:function(t){this._font.align=t||"left",this.dirty=!0}},font:{get:function(){return this._font},set:function(t){t&&("string"==typeof t?(t=t.split(" "),this._font.name=1===t.length?t[0]:t.slice(1).join(" "),this._font.size=t.length>=2?parseInt(t[0],10):i.fonts[this._font.name].size):(this._font.name=t.name,this._font.size="number"==typeof t.size?t.size:parseInt(t.size,10)),this.dirty=!0)}},text:{get:function(){return this._text},set:function(t){t=t.toString()||" ",this._text!==t&&(this._text=t,this.dirty=!0)}}}),i.prototype.updateText=function(){for(var t=i.fonts[this._font.name],e=new n.Point,r=null,o=[],s=0,a=0,h=[],u=0,l=this._font.size/t.size,c=-1,p=0,d=0;d0&&e.x*l>this.maxWidth)n.utils.removeItems(o,c,d-c),d=c,c=-1,h.push(s),a=Math.max(a,s),u++,e.x=0,e.y+=t.lineHeight,r=null;else{var v=t.chars[f];v&&(r&&v.kerning[r]&&(e.x+=v.kerning[r]),o.push({texture:v.texture,line:u,charCode:f,position:new n.Point(e.x+v.xOffset,e.y+v.yOffset)}),s=e.x+(v.texture.width+v.xOffset),e.x+=v.xAdvance,p=Math.max(p,v.yOffset+v.texture.height),r=f)}}h.push(s),a=Math.max(a,s);var g=[];for(d=0;u>=d;d++){var m=0;"right"===this._font.align?m=a-h[d]:"center"===this._font.align&&(m=(a-h[d])/2),g.push(m)}var y=o.length,x=this.tint;for(d=0;y>d;d++){var b=this._glyphs[d];b?b.texture=o[d].texture:(b=new n.Sprite(o[d].texture),this._glyphs.push(b)),b.position.x=(o[d].position.x+g[o[d].line])*l,b.position.y=o[d].position.y*l,b.scale.x=b.scale.y=l,b.tint=x,b.parent||this.addChild(b)}for(d=y;dt&&(t+=this._textures.length),t}}}),i.prototype.stop=function(){this.playing&&(this.playing=!1,n.ticker.shared.remove(this.update,this))},i.prototype.play=function(){this.playing||(this.playing=!0,n.ticker.shared.add(this.update,this))},i.prototype.gotoAndStop=function(t){this.stop(),this._currentTime=t,this._texture=this._textures[this.currentFrame]},i.prototype.gotoAndPlay=function(t){this._currentTime=t,this.play()},i.prototype.update=function(t){var e=this.animationSpeed*t;if(null!==this._durations){var r=this._currentTime%1*this._durations[this.currentFrame];for(r+=e/60*1e3;0>r;)this._currentTime--,r+=this._durations[this.currentFrame];var i=Math.sign(this.animationSpeed*t);for(this._currentTime=Math.floor(this._currentTime);r>=this._durations[this.currentFrame];)r-=this._durations[this.currentFrame]*i,this._currentTime+=i;this._currentTime+=r/this._durations[this.currentFrame]}else this._currentTime+=e;this._currentTime<0&&!this.loop?(this.gotoAndStop(0),this.onComplete&&this.onComplete()):this._currentTime>=this._textures.length&&!this.loop?(this.gotoAndStop(this._textures.length-1),this.onComplete&&this.onComplete()):this._texture=this._textures[this.currentFrame]},i.prototype.destroy=function(){this.stop(),n.Sprite.prototype.destroy.call(this)},i.fromFrames=function(t){for(var e=[],r=0;rx?x:t,t=t>_?_:t,t=t>E?E:t,r=y,r=r>b?b:r,r=r>T?T:r,r=r>S?S:r,e=m,e=x>e?x:e,e=_>e?_:e,e=E>e?E:e,i=y,i=b>i?b:i,i=T>i?T:i,i=S>i?S:i;var w=this._bounds;return w.x=t,w.width=e-t,w.y=r,w.height=i-r,this._currentBounds=w,w},i.prototype.containsPoint=function(t){this.worldTransform.applyInverse(t,o);var e,r=this._width,i=this._height,n=-r*this.anchor.x;return o.x>n&&o.xe&&o.y 0.2) n = 65600.0; // :\n if (gray > 0.3) n = 332772.0; // *\n if (gray > 0.4) n = 15255086.0; // o\n if (gray > 0.5) n = 23385164.0; // &\n if (gray > 0.6) n = 15252014.0; // 8\n if (gray > 0.7) n = 13199452.0; // @\n if (gray > 0.8) n = 11512810.0; // #\n\n vec2 p = mod( uv / ( pixelSize * 0.5 ), 2.0) - vec2(1.0);\n col = col * character(n, p);\n\n gl_FragColor = vec4(col, 1.0);\n}\n",{dimensions:{type:"4fv",value:new Float32Array([0,0,0,0])},pixelSize:{type:"1f",value:8}})}var n=t("../../core");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i,Object.defineProperties(i.prototype,{size:{get:function(){return this.uniforms.pixelSize.value},set:function(t){this.uniforms.pixelSize.value=t}}})},{"../../core":45}],109:[function(t,e,r){function i(){n.AbstractFilter.call(this),this.blurXFilter=new o,this.blurYFilter=new s,this.defaultFilter=new n.AbstractFilter}var n=t("../../core"),o=t("../blur/BlurXFilter"),s=t("../blur/BlurYFilter");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.applyFilter=function(t,e,r){var i=t.filterManager.getRenderTarget(!0);this.defaultFilter.applyFilter(t,e,r),this.blurXFilter.applyFilter(t,e,i),t.blendModeManager.setBlendMode(n.BLEND_MODES.SCREEN),this.blurYFilter.applyFilter(t,i,r),t.blendModeManager.setBlendMode(n.BLEND_MODES.NORMAL),t.filterManager.returnRenderTarget(i)},Object.defineProperties(i.prototype,{blur:{get:function(){return this.blurXFilter.blur},set:function(t){this.blurXFilter.blur=this.blurYFilter.blur=t}},blurX:{get:function(){return this.blurXFilter.blur},set:function(t){this.blurXFilter.blur=t}},blurY:{get:function(){return this.blurYFilter.blur},set:function(t){this.blurYFilter.blur=t}}})},{"../../core":45,"../blur/BlurXFilter":112,"../blur/BlurYFilter":113}],110:[function(t,e,r){function i(t,e){n.AbstractFilter.call(this,"attribute vec2 aVertexPosition;\nattribute vec2 aTextureCoord;\nattribute vec4 aColor;\n\nuniform float strength;\nuniform float dirX;\nuniform float dirY;\nuniform mat3 projectionMatrix;\n\nvarying vec2 vTextureCoord;\nvarying vec4 vColor;\nvarying vec2 vBlurTexCoords[3];\n\nvoid main(void)\n{\n gl_Position = vec4((projectionMatrix * vec3((aVertexPosition), 1.0)).xy, 0.0, 1.0);\n vTextureCoord = aTextureCoord;\n\n vBlurTexCoords[0] = aTextureCoord + vec2( (0.004 * strength) * dirX, (0.004 * strength) * dirY );\n vBlurTexCoords[1] = aTextureCoord + vec2( (0.008 * strength) * dirX, (0.008 * strength) * dirY );\n vBlurTexCoords[2] = aTextureCoord + vec2( (0.012 * strength) * dirX, (0.012 * strength) * dirY );\n\n vColor = vec4(aColor.rgb * aColor.a, aColor.a);\n}\n","precision lowp float;\n\nvarying vec2 vTextureCoord;\nvarying vec2 vBlurTexCoords[3];\nvarying vec4 vColor;\n\nuniform sampler2D uSampler;\n\nvoid main(void)\n{\n gl_FragColor = vec4(0.0);\n\n gl_FragColor += texture2D(uSampler, vTextureCoord ) * 0.3989422804014327;\n gl_FragColor += texture2D(uSampler, vBlurTexCoords[ 0]) * 0.2419707245191454;\n gl_FragColor += texture2D(uSampler, vBlurTexCoords[ 1]) * 0.05399096651318985;\n gl_FragColor += texture2D(uSampler, vBlurTexCoords[ 2]) * 0.004431848411938341;\n}\n",{strength:{type:"1f",value:1},dirX:{type:"1f",value:t||0},dirY:{type:"1f",value:e||0}}),this.defaultFilter=new n.AbstractFilter,this.passes=1,this.dirX=t||0,this.dirY=e||0,this.strength=4}var n=t("../../core");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.applyFilter=function(t,e,r,i){var n=this.getShader(t);if(this.uniforms.strength.value=this.strength/4/this.passes*(e.frame.width/e.size.width),1===this.passes)t.filterManager.applyFilter(n,e,r,i);else{var o=t.filterManager.getRenderTarget(!0);t.filterManager.applyFilter(n,e,o,i);for(var s=0;s>16&255)/255,s=(r>>8&255)/255,a=(255&r)/255,h=(i>>16&255)/255,u=(i>>8&255)/255,l=(255&i)/255,c=[.3,.59,.11,0,0,o,s,a,t,0,h,u,l,e,0,o-h,s-u,a-l,0,0];this._loadMatrix(c,n)},i.prototype.night=function(t,e){t=t||.1;var r=[-2*t,-t,0,0,0,-t,0,t,0,0,0,t,2*t,0,0,0,0,0,1,0];this._loadMatrix(r,e)},i.prototype.predator=function(t,e){var r=[11.224130630493164*t,-4.794486999511719*t,-2.8746118545532227*t,0*t,.40342438220977783*t,-3.6330697536468506*t,9.193157196044922*t,-2.951810836791992*t,0*t,-1.316135048866272*t,-3.2184197902679443*t,-4.2375030517578125*t,7.476448059082031*t,0*t,.8044459223747253*t,0,0,0,1,0];this._loadMatrix(r,e)},i.prototype.lsd=function(t){var e=[2,-.4,.5,0,0,-.5,2,-.4,0,0,-.4,-.5,3,0,0,0,0,0,1,0];this._loadMatrix(e,t)},i.prototype.reset=function(){var t=[1,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,1,0];this._loadMatrix(t,!1)},Object.defineProperties(i.prototype,{matrix:{get:function(){return this.uniforms.m.value},set:function(t){this.uniforms.m.value=t}}})},{"../../core":45}],116:[function(t,e,r){function i(){n.AbstractFilter.call(this,null,"precision mediump float;\n\nvarying vec2 vTextureCoord;\n\nuniform sampler2D uSampler;\nuniform float step;\n\nvoid main(void)\n{\n vec4 color = texture2D(uSampler, vTextureCoord);\n\n color = floor(color * step) / step;\n\n gl_FragColor = color;\n}\n",{step:{type:"1f",value:5}})}var n=t("../../core");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i,Object.defineProperties(i.prototype,{step:{get:function(){return this.uniforms.step.value},set:function(t){this.uniforms.step.value=t}}})},{"../../core":45}],117:[function(t,e,r){function i(t,e,r){n.AbstractFilter.call(this,null,"precision mediump float;\n\nvarying mediump vec2 vTextureCoord;\n\nuniform sampler2D uSampler;\nuniform vec2 texelSize;\nuniform float matrix[9];\n\nvoid main(void)\n{\n vec4 c11 = texture2D(uSampler, vTextureCoord - texelSize); // top left\n vec4 c12 = texture2D(uSampler, vec2(vTextureCoord.x, vTextureCoord.y - texelSize.y)); // top center\n vec4 c13 = texture2D(uSampler, vec2(vTextureCoord.x + texelSize.x, vTextureCoord.y - texelSize.y)); // top right\n\n vec4 c21 = texture2D(uSampler, vec2(vTextureCoord.x - texelSize.x, vTextureCoord.y)); // mid left\n vec4 c22 = texture2D(uSampler, vTextureCoord); // mid center\n vec4 c23 = texture2D(uSampler, vec2(vTextureCoord.x + texelSize.x, vTextureCoord.y)); // mid right\n\n vec4 c31 = texture2D(uSampler, vec2(vTextureCoord.x - texelSize.x, vTextureCoord.y + texelSize.y)); // bottom left\n vec4 c32 = texture2D(uSampler, vec2(vTextureCoord.x, vTextureCoord.y + texelSize.y)); // bottom center\n vec4 c33 = texture2D(uSampler, vTextureCoord + texelSize); // bottom right\n\n gl_FragColor =\n c11 * matrix[0] + c12 * matrix[1] + c13 * matrix[2] +\n c21 * matrix[3] + c22 * matrix[4] + c23 * matrix[5] +\n c31 * matrix[6] + c32 * matrix[7] + c33 * matrix[8];\n\n gl_FragColor.a = c22.a;\n}\n",{matrix:{type:"1fv",value:new Float32Array(t)},texelSize:{type:"v2",value:{x:1/e,y:1/r}}})}var n=t("../../core");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i,Object.defineProperties(i.prototype,{matrix:{get:function(){return this.uniforms.matrix.value},set:function(t){this.uniforms.matrix.value=new Float32Array(t)}},width:{get:function(){return 1/this.uniforms.texelSize.value.x},set:function(t){this.uniforms.texelSize.value.x=1/t}},height:{get:function(){return 1/this.uniforms.texelSize.value.y},set:function(t){this.uniforms.texelSize.value.y=1/t}}})},{"../../core":45 -}],118:[function(t,e,r){function i(){n.AbstractFilter.call(this,null,"precision mediump float;\n\nvarying vec2 vTextureCoord;\n\nuniform sampler2D uSampler;\n\nvoid main(void)\n{\n float lum = length(texture2D(uSampler, vTextureCoord.xy).rgb);\n\n gl_FragColor = vec4(1.0, 1.0, 1.0, 1.0);\n\n if (lum < 1.00)\n {\n if (mod(gl_FragCoord.x + gl_FragCoord.y, 10.0) == 0.0)\n {\n gl_FragColor = vec4(0.0, 0.0, 0.0, 1.0);\n }\n }\n\n if (lum < 0.75)\n {\n if (mod(gl_FragCoord.x - gl_FragCoord.y, 10.0) == 0.0)\n {\n gl_FragColor = vec4(0.0, 0.0, 0.0, 1.0);\n }\n }\n\n if (lum < 0.50)\n {\n if (mod(gl_FragCoord.x + gl_FragCoord.y - 5.0, 10.0) == 0.0)\n {\n gl_FragColor = vec4(0.0, 0.0, 0.0, 1.0);\n }\n }\n\n if (lum < 0.3)\n {\n if (mod(gl_FragCoord.x - gl_FragCoord.y - 5.0, 10.0) == 0.0)\n {\n gl_FragColor = vec4(0.0, 0.0, 0.0, 1.0);\n }\n }\n}\n")}var n=t("../../core");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i},{"../../core":45}],119:[function(t,e,r){function i(t,e){var r=new n.Matrix;t.renderable=!1,n.AbstractFilter.call(this,"attribute vec2 aVertexPosition;\nattribute vec2 aTextureCoord;\nattribute vec4 aColor;\n\nuniform mat3 projectionMatrix;\nuniform mat3 otherMatrix;\n\nvarying vec2 vMapCoord;\nvarying vec2 vTextureCoord;\nvarying vec4 vColor;\n\nvoid main(void)\n{\n gl_Position = vec4((projectionMatrix * vec3(aVertexPosition, 1.0)).xy, 0.0, 1.0);\n vTextureCoord = aTextureCoord;\n vMapCoord = ( otherMatrix * vec3( aTextureCoord, 1.0) ).xy;\n vColor = vec4(aColor.rgb * aColor.a, aColor.a);\n}\n","precision mediump float;\n\nvarying vec2 vMapCoord;\nvarying vec2 vTextureCoord;\nvarying vec4 vColor;\n\nuniform vec2 scale;\n\nuniform sampler2D uSampler;\nuniform sampler2D mapSampler;\n\nvoid main(void)\n{\n vec4 map = texture2D(mapSampler, vMapCoord);\n\n map -= 0.5;\n map.xy *= scale;\n\n gl_FragColor = texture2D(uSampler, vec2(vTextureCoord.x + map.x, vTextureCoord.y + map.y));\n}\n",{mapSampler:{type:"sampler2D",value:t.texture},otherMatrix:{type:"mat3",value:r.toArray(!0)},scale:{type:"v2",value:{x:1,y:1}}}),this.maskSprite=t,this.maskMatrix=r,(null===e||void 0===e)&&(e=20),this.scale=new n.Point(e,e)}var n=t("../../core");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.applyFilter=function(t,e,r){var i=t.filterManager;i.calculateMappedMatrix(e.frame,this.maskSprite,this.maskMatrix),this.uniforms.otherMatrix.value=this.maskMatrix.toArray(!0),this.uniforms.scale.value.x=this.scale.x*(1/e.frame.width),this.uniforms.scale.value.y=this.scale.y*(1/e.frame.height);var n=this.getShader(t);i.applyFilter(n,e,r)},Object.defineProperties(i.prototype,{map:{get:function(){return this.uniforms.mapSampler.value},set:function(t){this.uniforms.mapSampler.value=t}}})},{"../../core":45}],120:[function(t,e,r){function i(){n.AbstractFilter.call(this,null,"precision mediump float;\n\nvarying vec2 vTextureCoord;\nvarying vec4 vColor;\n\nuniform vec4 dimensions;\nuniform sampler2D uSampler;\n\nuniform float angle;\nuniform float scale;\n\nfloat pattern()\n{\n float s = sin(angle), c = cos(angle);\n vec2 tex = vTextureCoord * dimensions.xy;\n vec2 point = vec2(\n c * tex.x - s * tex.y,\n s * tex.x + c * tex.y\n ) * scale;\n return (sin(point.x) * sin(point.y)) * 4.0;\n}\n\nvoid main()\n{\n vec4 color = texture2D(uSampler, vTextureCoord);\n float average = (color.r + color.g + color.b) / 3.0;\n gl_FragColor = vec4(vec3(average * 10.0 - 5.0 + pattern()), color.a);\n}\n",{scale:{type:"1f",value:1},angle:{type:"1f",value:5},dimensions:{type:"4fv",value:[0,0,0,0]}})}var n=t("../../core");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i,Object.defineProperties(i.prototype,{scale:{get:function(){return this.uniforms.scale.value},set:function(t){this.uniforms.scale.value=t}},angle:{get:function(){return this.uniforms.angle.value},set:function(t){this.uniforms.angle.value=t}}})},{"../../core":45}],121:[function(t,e,r){function i(){n.AbstractFilter.call(this,"attribute vec2 aVertexPosition;\nattribute vec2 aTextureCoord;\nattribute vec4 aColor;\n\nuniform float strength;\nuniform vec2 offset;\n\nuniform mat3 projectionMatrix;\n\nvarying vec2 vTextureCoord;\nvarying vec4 vColor;\nvarying vec2 vBlurTexCoords[6];\n\nvoid main(void)\n{\n gl_Position = vec4((projectionMatrix * vec3((aVertexPosition+offset), 1.0)).xy, 0.0, 1.0);\n vTextureCoord = aTextureCoord;\n\n vBlurTexCoords[ 0] = aTextureCoord + vec2(0.0, -0.012 * strength);\n vBlurTexCoords[ 1] = aTextureCoord + vec2(0.0, -0.008 * strength);\n vBlurTexCoords[ 2] = aTextureCoord + vec2(0.0, -0.004 * strength);\n vBlurTexCoords[ 3] = aTextureCoord + vec2(0.0, 0.004 * strength);\n vBlurTexCoords[ 4] = aTextureCoord + vec2(0.0, 0.008 * strength);\n vBlurTexCoords[ 5] = aTextureCoord + vec2(0.0, 0.012 * strength);\n\n vColor = vec4(aColor.rgb * aColor.a, aColor.a);\n}\n","precision lowp float;\n\nvarying vec2 vTextureCoord;\nvarying vec2 vBlurTexCoords[6];\nvarying vec4 vColor;\n\nuniform vec3 color;\nuniform float alpha;\n\nuniform sampler2D uSampler;\n\nvoid main(void)\n{\n vec4 sum = vec4(0.0);\n\n sum += texture2D(uSampler, vBlurTexCoords[ 0])*0.004431848411938341;\n sum += texture2D(uSampler, vBlurTexCoords[ 1])*0.05399096651318985;\n sum += texture2D(uSampler, vBlurTexCoords[ 2])*0.2419707245191454;\n sum += texture2D(uSampler, vTextureCoord )*0.3989422804014327;\n sum += texture2D(uSampler, vBlurTexCoords[ 3])*0.2419707245191454;\n sum += texture2D(uSampler, vBlurTexCoords[ 4])*0.05399096651318985;\n sum += texture2D(uSampler, vBlurTexCoords[ 5])*0.004431848411938341;\n\n gl_FragColor = vec4( color.rgb * sum.a * alpha, sum.a * alpha );\n}\n",{blur:{type:"1f",value:1/512},color:{type:"c",value:[0,0,0]},alpha:{type:"1f",value:.7},offset:{type:"2f",value:[5,5]},strength:{type:"1f",value:1}}),this.passes=1,this.strength=4}var n=t("../../core");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.applyFilter=function(t,e,r,i){var n=this.getShader(t);if(this.uniforms.strength.value=this.strength/4/this.passes*(e.frame.height/e.size.height),1===this.passes)t.filterManager.applyFilter(n,e,r,i);else{for(var o=t.filterManager.getRenderTarget(!0),s=e,a=o,h=0;h= (time - params.z)) )\n {\n float diff = (dist - time);\n float powDiff = 1.0 - pow(abs(diff*params.x), params.y);\n\n float diffTime = diff * powDiff;\n vec2 diffUV = normalize(uv - center);\n texCoord = uv + (diffUV * diffTime);\n }\n\n gl_FragColor = texture2D(uSampler, texCoord);\n}\n",{center:{type:"v2",value:{x:.5,y:.5}},params:{type:"v3",value:{x:10,y:.8,z:.1}},time:{type:"1f",value:0}})}var n=t("../../core");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i,Object.defineProperties(i.prototype,{center:{get:function(){return this.uniforms.center.value},set:function(t){this.uniforms.center.value=t}},params:{get:function(){return this.uniforms.params.value},set:function(t){this.uniforms.params.value=t}},time:{get:function(){return this.uniforms.time.value},set:function(t){this.uniforms.time.value=t}}})},{"../../core":45}],131:[function(t,e,r){function i(){n.AbstractFilter.call(this,null,"precision mediump float;\n\nvarying vec2 vTextureCoord;\n\nuniform sampler2D uSampler;\nuniform float blur;\nuniform float gradientBlur;\nuniform vec2 start;\nuniform vec2 end;\nuniform vec2 delta;\nuniform vec2 texSize;\n\nfloat random(vec3 scale, float seed)\n{\n return fract(sin(dot(gl_FragCoord.xyz + seed, scale)) * 43758.5453 + seed);\n}\n\nvoid main(void)\n{\n vec4 color = vec4(0.0);\n float total = 0.0;\n\n float offset = random(vec3(12.9898, 78.233, 151.7182), 0.0);\n vec2 normal = normalize(vec2(start.y - end.y, end.x - start.x));\n float radius = smoothstep(0.0, 1.0, abs(dot(vTextureCoord * texSize - start, normal)) / gradientBlur) * blur;\n\n for (float t = -30.0; t <= 30.0; t++)\n {\n float percent = (t + offset - 0.5) / 30.0;\n float weight = 1.0 - abs(percent);\n vec4 sample = texture2D(uSampler, vTextureCoord + delta / texSize * percent * radius);\n sample.rgb *= sample.a;\n color += sample * weight;\n total += weight;\n }\n\n gl_FragColor = color / total;\n gl_FragColor.rgb /= gl_FragColor.a + 0.00001;\n}\n",{blur:{type:"1f",value:100},gradientBlur:{type:"1f",value:600},start:{type:"v2",value:{x:0,y:window.innerHeight/2}},end:{type:"v2",value:{x:600,y:window.innerHeight/2}},delta:{type:"v2",value:{x:30,y:30}},texSize:{type:"v2",value:{x:window.innerWidth,y:window.innerHeight}}}),this.updateDelta()}var n=t("../../core");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.updateDelta=function(){this.uniforms.delta.value.x=0,this.uniforms.delta.value.y=0},Object.defineProperties(i.prototype,{blur:{get:function(){return this.uniforms.blur.value},set:function(t){this.uniforms.blur.value=t}},gradientBlur:{get:function(){return this.uniforms.gradientBlur.value},set:function(t){this.uniforms.gradientBlur.value=t}},start:{get:function(){return this.uniforms.start.value},set:function(t){this.uniforms.start.value=t,this.updateDelta()}},end:{get:function(){return this.uniforms.end.value},set:function(t){this.uniforms.end.value=t,this.updateDelta()}}})},{"../../core":45}],132:[function(t,e,r){function i(){n.AbstractFilter.call(this),this.tiltShiftXFilter=new o,this.tiltShiftYFilter=new s}var n=t("../../core"),o=t("./TiltShiftXFilter"),s=t("./TiltShiftYFilter");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.applyFilter=function(t,e,r){var i=t.filterManager.getRenderTarget(!0);this.tiltShiftXFilter.applyFilter(t,e,i),this.tiltShiftYFilter.applyFilter(t,i,r),t.filterManager.returnRenderTarget(i)},Object.defineProperties(i.prototype,{blur:{get:function(){return this.tiltShiftXFilter.blur},set:function(t){this.tiltShiftXFilter.blur=this.tiltShiftYFilter.blur=t}},gradientBlur:{get:function(){return this.tiltShiftXFilter.gradientBlur},set:function(t){this.tiltShiftXFilter.gradientBlur=this.tiltShiftYFilter.gradientBlur=t}},start:{get:function(){return this.tiltShiftXFilter.start},set:function(t){this.tiltShiftXFilter.start=this.tiltShiftYFilter.start=t}},end:{get:function(){return this.tiltShiftXFilter.end},set:function(t){this.tiltShiftXFilter.end=this.tiltShiftYFilter.end=t}}})},{"../../core":45,"./TiltShiftXFilter":133,"./TiltShiftYFilter":134}],133:[function(t,e,r){function i(){n.call(this)}var n=t("./TiltShiftAxisFilter");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.updateDelta=function(){var t=this.uniforms.end.value.x-this.uniforms.start.value.x,e=this.uniforms.end.value.y-this.uniforms.start.value.y,r=Math.sqrt(t*t+e*e);this.uniforms.delta.value.x=t/r,this.uniforms.delta.value.y=e/r}},{"./TiltShiftAxisFilter":131}],134:[function(t,e,r){function i(){n.call(this)}var n=t("./TiltShiftAxisFilter");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.updateDelta=function(){var t=this.uniforms.end.value.x-this.uniforms.start.value.x,e=this.uniforms.end.value.y-this.uniforms.start.value.y,r=Math.sqrt(t*t+e*e);this.uniforms.delta.value.x=-e/r,this.uniforms.delta.value.y=t/r}},{"./TiltShiftAxisFilter":131}],135:[function(t,e,r){function i(){n.AbstractFilter.call(this,null,"precision mediump float;\n\nvarying vec2 vTextureCoord;\n\nuniform sampler2D uSampler;\nuniform float radius;\nuniform float angle;\nuniform vec2 offset;\n\nvoid main(void)\n{\n vec2 coord = vTextureCoord - offset;\n float dist = length(coord);\n\n if (dist < radius)\n {\n float ratio = (radius - dist) / radius;\n float angleMod = ratio * ratio * angle;\n float s = sin(angleMod);\n float c = cos(angleMod);\n coord = vec2(coord.x * c - coord.y * s, coord.x * s + coord.y * c);\n }\n\n gl_FragColor = texture2D(uSampler, coord+offset);\n}\n",{radius:{type:"1f",value:.5},angle:{type:"1f",value:5},offset:{type:"v2",value:{x:.5,y:.5}}})}var n=t("../../core");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i,Object.defineProperties(i.prototype,{offset:{get:function(){return this.uniforms.offset.value},set:function(t){this.uniforms.offset.value=t}},radius:{get:function(){return this.uniforms.radius.value},set:function(t){this.uniforms.radius.value=t}},angle:{get:function(){return this.uniforms.angle.value},set:function(t){this.uniforms.angle.value=t}}})},{"../../core":45}],136:[function(t,e,r){(function(r){t("./polyfill");var i=e.exports=t("./core");i.extras=t("./extras"),i.filters=t("./filters"),i.interaction=t("./interaction"),i.loaders=t("./loaders"),i.mesh=t("./mesh"),i.accessibility=t("./accessibility"),i.loader=new i.loaders.Loader,Object.assign(i,t("./deprecation")),r.PIXI=i}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{"./accessibility":37,"./core":45,"./deprecation":100,"./extras":107,"./filters":124,"./interaction":139,"./loaders":142,"./mesh":149,"./polyfill":154}],137:[function(t,e,r){function i(){this.global=new n.Point,this.target=null,this.originalEvent=null}var n=t("../core");i.prototype.constructor=i,e.exports=i,i.prototype.getLocalPosition=function(t,e,r){return t.worldTransform.applyInverse(r||this.global,e)}},{"../core":45}],138:[function(t,e,r){function i(t,e){e=e||{},this.renderer=t,this.autoPreventDefault=void 0!==e.autoPreventDefault?e.autoPreventDefault:!0,this.interactionFrequency=e.interactionFrequency||10,this.mouse=new o,this.eventData={stopped:!1,target:null,type:null,data:this.mouse,stopPropagation:function(){this.stopped=!0}},this.interactiveDataPool=[],this.interactionDOMElement=null,this.eventsAdded=!1,this.onMouseUp=this.onMouseUp.bind(this),this.processMouseUp=this.processMouseUp.bind(this),this.onMouseDown=this.onMouseDown.bind(this),this.processMouseDown=this.processMouseDown.bind(this),this.onMouseMove=this.onMouseMove.bind(this),this.processMouseMove=this.processMouseMove.bind(this),this.onMouseOut=this.onMouseOut.bind(this),this.processMouseOverOut=this.processMouseOverOut.bind(this),this.onTouchStart=this.onTouchStart.bind(this),this.processTouchStart=this.processTouchStart.bind(this),this.onTouchEnd=this.onTouchEnd.bind(this),this.processTouchEnd=this.processTouchEnd.bind(this),this.onTouchMove=this.onTouchMove.bind(this),this.processTouchMove=this.processTouchMove.bind(this),this.last=0,this.currentCursorStyle="inherit",this._tempPoint=new n.Point,this.resolution=1,this.setTargetElement(this.renderer.view,this.renderer.resolution)}var n=t("../core"),o=t("./InteractionData");Object.assign(n.DisplayObject.prototype,t("./interactiveTarget")),i.prototype.constructor=i,e.exports=i,i.prototype.setTargetElement=function(t,e){this.removeEvents(),this.interactionDOMElement=t,this.resolution=e||1,this.addEvents()},i.prototype.addEvents=function(){this.interactionDOMElement&&(n.ticker.shared.add(this.update,this),window.navigator.msPointerEnabled&&(this.interactionDOMElement.style["-ms-content-zooming"]="none",this.interactionDOMElement.style["-ms-touch-action"]="none"),window.document.addEventListener("mousemove",this.onMouseMove,!0),this.interactionDOMElement.addEventListener("mousedown",this.onMouseDown,!0),this.interactionDOMElement.addEventListener("mouseout",this.onMouseOut,!0),this.interactionDOMElement.addEventListener("touchstart",this.onTouchStart,!0),this.interactionDOMElement.addEventListener("touchend",this.onTouchEnd,!0),this.interactionDOMElement.addEventListener("touchmove",this.onTouchMove,!0),window.addEventListener("mouseup",this.onMouseUp,!0),this.eventsAdded=!0)},i.prototype.removeEvents=function(){this.interactionDOMElement&&(n.ticker.shared.remove(this.update),window.navigator.msPointerEnabled&&(this.interactionDOMElement.style["-ms-content-zooming"]="",this.interactionDOMElement.style["-ms-touch-action"]=""),window.document.removeEventListener("mousemove",this.onMouseMove,!0),this.interactionDOMElement.removeEventListener("mousedown",this.onMouseDown,!0),this.interactionDOMElement.removeEventListener("mouseout",this.onMouseOut,!0),this.interactionDOMElement.removeEventListener("touchstart",this.onTouchStart,!0),this.interactionDOMElement.removeEventListener("touchend",this.onTouchEnd,!0),this.interactionDOMElement.removeEventListener("touchmove",this.onTouchMove,!0),this.interactionDOMElement=null,window.removeEventListener("mouseup",this.onMouseUp,!0),this.eventsAdded=!1)},i.prototype.update=function(t){if(this._deltaTime+=t,!(this._deltaTime=0;h--)this.processInteractive(t,a[h],r,i,s)&&(o=!0,s=!1,a[h].interactive&&(i=!1));return n&&(i&&!o&&(e.hitArea?(e.worldTransform.applyInverse(t,this._tempPoint),o=e.hitArea.contains(this._tempPoint.x,this._tempPoint.y)):e.containsPoint&&(o=e.containsPoint(t))),e.interactive&&r(e,o)),o},i.prototype.onMouseDown=function(t){this.mouse.originalEvent=t,this.eventData.data=this.mouse,this.eventData.stopped=!1,this.mapPositionToPoint(this.mouse.global,t.clientX,t.clientY),this.autoPreventDefault&&this.mouse.originalEvent.preventDefault(),this.processInteractive(this.mouse.global,this.renderer._lastObjectRendered,this.processMouseDown,!0)},i.prototype.processMouseDown=function(t,e){var r=this.mouse.originalEvent,i=2===r.button||3===r.which;e&&(t[i?"_isRightDown":"_isLeftDown"]=!0,this.dispatchEvent(t,i?"rightdown":"mousedown",this.eventData))},i.prototype.onMouseUp=function(t){this.mouse.originalEvent=t,this.eventData.data=this.mouse,this.eventData.stopped=!1,this.mapPositionToPoint(this.mouse.global,t.clientX,t.clientY),this.processInteractive(this.mouse.global,this.renderer._lastObjectRendered,this.processMouseUp,!0)},i.prototype.processMouseUp=function(t,e){var r=this.mouse.originalEvent,i=2===r.button||3===r.which,n=i?"_isRightDown":"_isLeftDown";e?(this.dispatchEvent(t,i?"rightup":"mouseup",this.eventData),t[n]&&(t[n]=!1,this.dispatchEvent(t,i?"rightclick":"click",this.eventData))):t[n]&&(t[n]=!1,this.dispatchEvent(t,i?"rightupoutside":"mouseupoutside",this.eventData))},i.prototype.onMouseMove=function(t){this.mouse.originalEvent=t,this.eventData.data=this.mouse,this.eventData.stopped=!1,this.mapPositionToPoint(this.mouse.global,t.clientX,t.clientY),this.didMove=!0,this.cursor="inherit",this.processInteractive(this.mouse.global,this.renderer._lastObjectRendered,this.processMouseMove,!0),this.currentCursorStyle!==this.cursor&&(this.currentCursorStyle=this.cursor,this.interactionDOMElement.style.cursor=this.cursor)},i.prototype.processMouseMove=function(t,e){this.dispatchEvent(t,"mousemove",this.eventData),this.processMouseOverOut(t,e)},i.prototype.onMouseOut=function(t){this.mouse.originalEvent=t,this.eventData.stopped=!1,this.mapPositionToPoint(this.mouse.global,t.clientX,t.clientY),this.interactionDOMElement.style.cursor="inherit",this.mapPositionToPoint(this.mouse.global,t.clientX,t.clientY),this.processInteractive(this.mouse.global,this.renderer._lastObjectRendered,this.processMouseOverOut,!1)},i.prototype.processMouseOverOut=function(t,e){e?(t._over||(t._over=!0,this.dispatchEvent(t,"mouseover",this.eventData)),t.buttonMode&&(this.cursor=t.defaultCursor)):t._over&&(t._over=!1,this.dispatchEvent(t,"mouseout",this.eventData))},i.prototype.onTouchStart=function(t){this.autoPreventDefault&&t.preventDefault();for(var e=t.changedTouches,r=e.length,i=0;r>i;i++){var n=e[i],o=this.getTouchData(n);o.originalEvent=t,this.eventData.data=o,this.eventData.stopped=!1,this.processInteractive(o.global,this.renderer._lastObjectRendered,this.processTouchStart,!0),this.returnTouchData(o)}},i.prototype.processTouchStart=function(t,e){e&&(t._touchDown=!0,this.dispatchEvent(t,"touchstart",this.eventData))},i.prototype.onTouchEnd=function(t){this.autoPreventDefault&&t.preventDefault();for(var e=t.changedTouches,r=e.length,i=0;r>i;i++){var n=e[i],o=this.getTouchData(n);o.originalEvent=t,this.eventData.data=o,this.eventData.stopped=!1,this.processInteractive(o.global,this.renderer._lastObjectRendered,this.processTouchEnd,!0),this.returnTouchData(o)}},i.prototype.processTouchEnd=function(t,e){e?(this.dispatchEvent(t,"touchend",this.eventData),t._touchDown&&(t._touchDown=!1,this.dispatchEvent(t,"tap",this.eventData))):t._touchDown&&(t._touchDown=!1,this.dispatchEvent(t,"touchendoutside",this.eventData))},i.prototype.onTouchMove=function(t){this.autoPreventDefault&&t.preventDefault();for(var e=t.changedTouches,r=e.length,i=0;r>i;i++){var n=e[i],o=this.getTouchData(n);o.originalEvent=t,this.eventData.data=o,this.eventData.stopped=!1,this.processInteractive(o.global,this.renderer._lastObjectRendered,this.processTouchMove,!0),this.returnTouchData(o)}},i.prototype.processTouchMove=function(t,e){e=e,this.dispatchEvent(t,"touchmove",this.eventData)},i.prototype.getTouchData=function(t){var e=this.interactiveDataPool.pop();return e||(e=new o),e.identifier=t.identifier,this.mapPositionToPoint(e.global,t.clientX,t.clientY),navigator.isCocoonJS&&(e.global.x=e.global.x/this.resolution,e.global.y=e.global.y/this.resolution),t.globalX=e.global.x,t.globalY=e.global.y,e},i.prototype.returnTouchData=function(t){ -this.interactiveDataPool.push(t)},i.prototype.destroy=function(){this.removeEvents(),this.renderer=null,this.mouse=null,this.eventData=null,this.interactiveDataPool=null,this.interactionDOMElement=null,this.onMouseUp=null,this.processMouseUp=null,this.onMouseDown=null,this.processMouseDown=null,this.onMouseMove=null,this.processMouseMove=null,this.onMouseOut=null,this.processMouseOverOut=null,this.onTouchStart=null,this.processTouchStart=null,this.onTouchEnd=null,this.processTouchEnd=null,this.onTouchMove=null,this.processTouchMove=null,this._tempPoint=null},n.WebGLRenderer.registerPlugin("interaction",i),n.CanvasRenderer.registerPlugin("interaction",i)},{"../core":45,"./InteractionData":137,"./interactiveTarget":140}],139:[function(t,e,r){e.exports={InteractionData:t("./InteractionData"),InteractionManager:t("./InteractionManager"),interactiveTarget:t("./interactiveTarget")}},{"./InteractionData":137,"./InteractionManager":138,"./interactiveTarget":140}],140:[function(t,e,r){var i={interactive:!1,buttonMode:!1,interactiveChildren:!0,defaultCursor:"pointer",_over:!1,_touchDown:!1};e.exports=i},{}],141:[function(t,e,r){function i(t,e){var r={},i=t.data.getElementsByTagName("info")[0],n=t.data.getElementsByTagName("common")[0];r.font=i.getAttribute("face"),r.size=parseInt(i.getAttribute("size"),10),r.lineHeight=parseInt(n.getAttribute("lineHeight"),10),r.chars={};for(var a=t.data.getElementsByTagName("char"),h=0;hn;n++){var o=2*n;this._renderCanvasDrawTriangle(t,e,r,o,o+2,o+4)}},i.prototype._renderCanvasTriangles=function(t){for(var e=this.vertices,r=this.uvs,i=this.indices,n=i.length,o=0;n>o;o+=3){var s=2*i[o],a=2*i[o+1],h=2*i[o+2];this._renderCanvasDrawTriangle(t,e,r,s,a,h)}},i.prototype._renderCanvasDrawTriangle=function(t,e,r,i,n,o){var s=this._texture.baseTexture.source,a=this._texture.baseTexture.width,h=this._texture.baseTexture.height,u=e[i],l=e[n],c=e[o],p=e[i+1],d=e[n+1],f=e[o+1],v=r[i]*a,g=r[n]*a,m=r[o]*a,y=r[i+1]*h,x=r[n+1]*h,b=r[o+1]*h;if(this.canvasPadding>0){var _=this.canvasPadding/this.worldTransform.a,T=this.canvasPadding/this.worldTransform.d,E=(u+l+c)/3,S=(p+d+f)/3,w=u-E,C=p-S,A=Math.sqrt(w*w+C*C);u=E+w/A*(A+_),p=S+C/A*(A+T),w=l-E,C=d-S,A=Math.sqrt(w*w+C*C),l=E+w/A*(A+_),d=S+C/A*(A+T),w=c-E,C=f-S,A=Math.sqrt(w*w+C*C),c=E+w/A*(A+_),f=S+C/A*(A+T)}t.save(),t.beginPath(),t.moveTo(u,p),t.lineTo(l,d),t.lineTo(c,f),t.closePath(),t.clip();var M=v*x+y*m+g*b-x*m-y*g-v*b,R=u*x+y*c+l*b-x*c-y*l-u*b,O=v*l+u*m+g*c-l*m-u*g-v*c,D=v*x*c+y*l*m+u*g*b-u*x*m-y*g*c-v*l*b,P=p*x+y*f+d*b-x*f-y*d-p*b,F=v*d+p*m+g*f-d*m-p*g-v*f,L=v*x*f+y*d*m+p*g*b-p*x*m-y*g*f-v*d*b;t.transform(R/M,P/M,O/M,F/M,D/M,L/M),t.drawImage(s,0,0),t.restore()},i.prototype.renderMeshFlat=function(t){var e=this.context,r=t.vertices,i=r.length/2;e.beginPath();for(var n=1;i-2>n;n++){var o=2*n,s=r[o],a=r[o+2],h=r[o+4],u=r[o+1],l=r[o+3],c=r[o+5];e.moveTo(s,u),e.lineTo(a,l),e.lineTo(h,c)}e.fillStyle="#FF0000",e.fill(),e.closePath()},i.prototype._onTextureUpdate=function(){this.updateFrame=!0},i.prototype.getBounds=function(t){if(!this._currentBounds){for(var e=t||this.worldTransform,r=e.a,i=e.b,o=e.c,s=e.d,a=e.tx,h=e.ty,u=-(1/0),l=-(1/0),c=1/0,p=1/0,d=this.vertices,f=0,v=d.length;v>f;f+=2){var g=d[f],m=d[f+1],y=r*g+o*m+a,x=s*m+i*g+h;c=c>y?y:c,p=p>x?x:p,u=y>u?y:u,l=x>l?x:l}if(c===-(1/0)||l===1/0)return n.Rectangle.EMPTY;var b=this._bounds;b.x=c,b.width=u-c,b.y=p,b.height=l-p,this._currentBounds=b}return this._currentBounds},i.prototype.containsPoint=function(t){if(!this.getBounds().contains(t.x,t.y))return!1;this.worldTransform.applyInverse(t,o);var e,r,n=this.vertices,a=s.points;if(this.drawMode===i.DRAW_MODES.TRIANGLES){var h=this.indices;for(r=this.indices.length,e=0;r>e;e+=3){var u=2*h[e],l=2*h[e+1],c=2*h[e+2];if(a[0]=n[u],a[1]=n[u+1],a[2]=n[l],a[3]=n[l+1],a[4]=n[c],a[5]=n[c+1],s.contains(o.x,o.y))return!0}}else for(r=n.length,e=0;r>e;e+=6)if(a[0]=n[e],a[1]=n[e+1],a[2]=n[e+2],a[3]=n[e+3],a[4]=n[e+4],a[5]=n[e+5],s.contains(o.x,o.y))return!0;return!1},i.DRAW_MODES={TRIANGLE_MESH:0,TRIANGLES:1}},{"../core":45}],147:[function(t,e,r){function i(t,e,r){n.call(this,t),this._ready=!0,this.segmentsX=e||10,this.segmentsY=r||10,this.drawMode=n.DRAW_MODES.TRIANGLES,this.refresh()}var n=t("./Mesh");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.refresh=function(){var t=this.segmentsX*this.segmentsY,e=[],r=[],i=[],n=[],o=this.texture,s=this.segmentsX-1,a=this.segmentsY-1,h=0,u=o.width/s,l=o.height/a;for(h=0;t>h;h++){var c=h%this.segmentsX,p=h/this.segmentsX|0;e.push(c*u,p*l),i.push(o._uvs.x0+(o._uvs.x1-o._uvs.x0)*(c/(this.segmentsX-1)),o._uvs.y0+(o._uvs.y3-o._uvs.y0)*(p/(this.segmentsY-1)))}var d=s*a;for(h=0;d>h;h++){var f=h%s,v=h/s|0,g=v*this.segmentsX+f,m=v*this.segmentsX+f+1,y=(v+1)*this.segmentsX+f,x=(v+1)*this.segmentsX+f+1;n.push(g,m,y),n.push(m,x,y)}this.vertices=new Float32Array(e),this.uvs=new Float32Array(i),this.colors=new Float32Array(r),this.indices=new Uint16Array(n)},i.prototype._onTextureUpdate=function(){n.prototype._onTextureUpdate.call(this),this._ready&&this.refresh()}},{"./Mesh":146}],148:[function(t,e,r){function i(t,e){n.call(this,t),this.points=e,this.vertices=new Float32Array(4*e.length),this.uvs=new Float32Array(4*e.length),this.colors=new Float32Array(2*e.length),this.indices=new Uint16Array(2*e.length),this._ready=!0,this.refresh()}var n=t("./Mesh"),o=t("../core");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.refresh=function(){var t=this.points;if(!(t.length<1)&&this._texture._uvs){var e=this.uvs,r=this.indices,i=this.colors,n=this._texture._uvs,s=new o.Point(n.x0,n.y0),a=new o.Point(n.x2-n.x0,n.y2-n.y0);e[0]=0+s.x,e[1]=0+s.y,e[2]=0+s.x,e[3]=1*a.y+s.y,i[0]=1,i[1]=1,r[0]=0,r[1]=1;for(var h,u,l,c=t.length,p=1;c>p;p++)h=t[p],u=4*p,l=p/(c-1),e[u]=l*a.x+s.x,e[u+1]=0+s.y,e[u+2]=l*a.x+s.x,e[u+3]=1*a.y+s.y,u=2*p,i[u]=1,i[u+1]=1,u=2*p,r[u]=u,r[u+1]=u+1;this.dirty=!0}},i.prototype._onTextureUpdate=function(){n.prototype._onTextureUpdate.call(this),this._ready&&this.refresh()},i.prototype.updateTransform=function(){var t=this.points;if(!(t.length<1)){for(var e,r,i,n,o,s,a=t[0],h=0,u=0,l=this.vertices,c=t.length,p=0;c>p;p++)r=t[p],i=4*p,e=p1&&(n=1),o=Math.sqrt(h*h+u*u),s=this._texture.height/2,h/=o,u/=o,h*=s,u*=s,l[i]=r.x+h,l[i+1]=r.y+u,l[i+2]=r.x-h,l[i+3]=r.y-u,a=r;this.containerUpdateTransform()}}},{"../core":45,"./Mesh":146}],149:[function(t,e,r){e.exports={Mesh:t("./Mesh"),Plane:t("./Plane"),Rope:t("./Rope"),MeshRenderer:t("./webgl/MeshRenderer"),MeshShader:t("./webgl/MeshShader")}},{"./Mesh":146,"./Plane":147,"./Rope":148,"./webgl/MeshRenderer":150,"./webgl/MeshShader":151}],150:[function(t,e,r){function i(t){n.ObjectRenderer.call(this,t),this.indices=new Uint16Array(15e3);for(var e=0,r=0;15e3>e;e+=6,r+=4)this.indices[e+0]=r+0,this.indices[e+1]=r+1,this.indices[e+2]=r+2,this.indices[e+3]=r+0,this.indices[e+4]=r+2,this.indices[e+5]=r+3;this.currentShader=null}var n=t("../../core"),o=t("../Mesh");i.prototype=Object.create(n.ObjectRenderer.prototype),i.prototype.constructor=i,e.exports=i,n.WebGLRenderer.registerPlugin("mesh",i),i.prototype.onContextChange=function(){},i.prototype.render=function(t){t._vertexBuffer||this._initWebGL(t);var e=this.renderer,r=e.gl,i=t._texture.baseTexture,n=t.shader,s=t.drawMode===o.DRAW_MODES.TRIANGLE_MESH?r.TRIANGLE_STRIP:r.TRIANGLES;e.blendModeManager.setBlendMode(t.blendMode),n=n?n.shaders[r.id]||n.getShader(e):e.shaderManager.plugins.meshShader,this.renderer.shaderManager.setShader(n),n.uniforms.translationMatrix.value=t.worldTransform.toArray(!0),n.uniforms.projectionMatrix.value=e.currentRenderTarget.projectionMatrix.toArray(!0),n.uniforms.alpha.value=t.worldAlpha,n.syncUniforms(),t.dirty?(t.dirty=!1,r.bindBuffer(r.ARRAY_BUFFER,t._vertexBuffer),r.bufferData(r.ARRAY_BUFFER,t.vertices,r.STATIC_DRAW),r.vertexAttribPointer(n.attributes.aVertexPosition,2,r.FLOAT,!1,0,0),r.bindBuffer(r.ARRAY_BUFFER,t._uvBuffer),r.bufferData(r.ARRAY_BUFFER,t.uvs,r.STATIC_DRAW),r.vertexAttribPointer(n.attributes.aTextureCoord,2,r.FLOAT,!1,0,0),r.activeTexture(r.TEXTURE0),i._glTextures[r.id]?r.bindTexture(r.TEXTURE_2D,i._glTextures[r.id]):this.renderer.updateTexture(i),r.bindBuffer(r.ELEMENT_ARRAY_BUFFER,t._indexBuffer),r.bufferData(r.ELEMENT_ARRAY_BUFFER,t.indices,r.STATIC_DRAW)):(r.bindBuffer(r.ARRAY_BUFFER,t._vertexBuffer),r.bufferSubData(r.ARRAY_BUFFER,0,t.vertices),r.vertexAttribPointer(n.attributes.aVertexPosition,2,r.FLOAT,!1,0,0),r.bindBuffer(r.ARRAY_BUFFER,t._uvBuffer),r.vertexAttribPointer(n.attributes.aTextureCoord,2,r.FLOAT,!1,0,0),r.activeTexture(r.TEXTURE0),i._glTextures[r.id]?r.bindTexture(r.TEXTURE_2D,i._glTextures[r.id]):this.renderer.updateTexture(i),r.bindBuffer(r.ELEMENT_ARRAY_BUFFER,t._indexBuffer),r.bufferSubData(r.ELEMENT_ARRAY_BUFFER,0,t.indices)),r.drawElements(s,t.indices.length,r.UNSIGNED_SHORT,0)},i.prototype._initWebGL=function(t){var e=this.renderer.gl;t._vertexBuffer=e.createBuffer(),t._indexBuffer=e.createBuffer(),t._uvBuffer=e.createBuffer(),e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferData(e.ARRAY_BUFFER,t.vertices,e.DYNAMIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferData(e.ARRAY_BUFFER,t.uvs,e.STATIC_DRAW),t.colors&&(t._colorBuffer=e.createBuffer(),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.bufferData(e.ARRAY_BUFFER,t.colors,e.STATIC_DRAW)),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer),e.bufferData(e.ELEMENT_ARRAY_BUFFER,t.indices,e.STATIC_DRAW)},i.prototype.flush=function(){},i.prototype.start=function(){this.currentShader=null},i.prototype.destroy=function(){n.ObjectRenderer.prototype.destroy.call(this)}},{"../../core":45,"../Mesh":146}],151:[function(t,e,r){function i(t){n.Shader.call(this,t,["precision lowp float;","attribute vec2 aVertexPosition;","attribute vec2 aTextureCoord;","uniform mat3 translationMatrix;","uniform mat3 projectionMatrix;","varying vec2 vTextureCoord;","void main(void){"," gl_Position = vec4((projectionMatrix * translationMatrix * vec3(aVertexPosition, 1.0)).xy, 0.0, 1.0);"," vTextureCoord = aTextureCoord;","}"].join("\n"),["precision lowp float;","varying vec2 vTextureCoord;","uniform float alpha;","uniform sampler2D uSampler;","void main(void){"," gl_FragColor = texture2D(uSampler, vTextureCoord) * alpha ;","}"].join("\n"),{alpha:{type:"1f",value:0},translationMatrix:{type:"mat3",value:new Float32Array(9)},projectionMatrix:{type:"mat3",value:new Float32Array(9)}},{aVertexPosition:0,aTextureCoord:0})}var n=t("../../core");i.prototype=Object.create(n.Shader.prototype),i.prototype.constructor=i,e.exports=i,n.ShaderManager.registerPlugin("meshShader",i)},{"../../core":45}],152:[function(t,e,r){Math.sign||(Math.sign=function(t){return t=+t,0===t||isNaN(t)?t:t>0?1:-1})},{}],153:[function(t,e,r){Object.assign||(Object.assign=t("object-assign"))},{"object-assign":26}],154:[function(t,e,r){t("./Object.assign"),t("./requestAnimationFrame"),t("./Math.sign")},{"./Math.sign":152,"./Object.assign":153,"./requestAnimationFrame":155}],155:[function(t,e,r){(function(t){if(Date.now&&Date.prototype.getTime||(Date.now=function(){return(new Date).getTime()}),!t.performance||!t.performance.now){var e=Date.now();t.performance||(t.performance={}),t.performance.now=function(){return Date.now()-e}}for(var r=Date.now(),i=["ms","moz","webkit","o"],n=0;ni&&(i=0),r=e,setTimeout(function(){r=Date.now(),t(performance.now())},i)}),t.cancelAnimationFrame||(t.cancelAnimationFrame=function(t){clearTimeout(t)})}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{}]},{},[136])(136)}); +!function(t){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=t();else if("function"==typeof define&&define.amd)define([],t);else{var e;e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:this,e.PIXI=t()}}(function(){var t;return function e(t,r,i){function n(s,a){if(!r[s]){if(!t[s]){var h="function"==typeof require&&require;if(!a&&h)return h(s,!0);if(o)return o(s,!0);var u=new Error("Cannot find module '"+s+"'");throw u.code="MODULE_NOT_FOUND",u}var l=r[s]={exports:{}};t[s][0].call(l.exports,function(e){var r=t[s][1][e];return n(r?r:e)},l,l.exports,e,t,r,i)}return r[s].exports}for(var o="function"==typeof require&&require,s=0;s=t.byteLength?i.bufferSubData(this.type,e,t):i.bufferData(this.type,t,this.drawType),this.data=t},n.prototype.bind=function(){var t=this.gl;t.bindBuffer(this.type,this.buffer)},n.createVertexBuffer=function(t,e,r){return new n(t,t.ARRAY_BUFFER,e,r)},n.createIndexBuffer=function(t,e,r){return new n(t,t.ELEMENT_ARRAY_BUFFER,e,r)},n.create=function(t,e,r,i){return new n(t,e,i)},e.exports=n},{}],3:[function(t,e,r){var i=t("./GLTexture"),n=function(t,e,r){this.gl=t,this.framebuffer=t.createFramebuffer(),this.stencil=null,this.texture=null,this.width=e||100,this.height=r||100};n.prototype.enableTexture=function(t){var e=this.gl;this.texture=t||new i(e),this.texture.bind(),this.bind(),e.framebufferTexture2D(e.FRAMEBUFFER,e.COLOR_ATTACHMENT0,e.TEXTURE_2D,this.texture.texture,0)},n.prototype.enableStencil=function(){if(!this.stencil){var t=this.gl;this.stencil=t.createRenderbuffer(),t.bindRenderbuffer(t.RENDERBUFFER,this.stencil),t.framebufferRenderbuffer(t.FRAMEBUFFER,t.DEPTH_STENCIL_ATTACHMENT,t.RENDERBUFFER,this.stencil),t.renderbufferStorage(t.RENDERBUFFER,t.DEPTH_STENCIL,this.width,this.height)}},n.prototype.clear=function(t,e,r,i){this.bind();var n=this.gl;n.clearColor(t,e,r,i),n.clear(n.COLOR_BUFFER_BIT)},n.prototype.bind=function(){var t=this.gl;t.bindFramebuffer(t.FRAMEBUFFER,this.framebuffer)},n.prototype.unbind=function(){gl.bindFramebuffer(gl.FRAMEBUFFER,null)},n.prototype.resize=function(t,e){var r=this.gl;this.width=t,this.height=e,this.texture&&this.texture.uploadData(null,t,e),this.stencil&&(r.bindRenderbuffer(r.RENDERBUFFER,this.stencil),r.renderbufferStorage(r.RENDERBUFFER,r.DEPTH_STENCIL,t,e))},n.prototype.destroy=function(){var t=this.gl;t.deleteFramebuffer(this.framebuffer)},n.createRGBA=function(t,e,r,o){var s=i.fromData(t,null,e,r);s.enableNearestScaling(),s.enableWrapClamp();var a=new n(t,e,r);return a.enableTexture(s),a},n.createFloat32=function(t,e,r,o){var s=new i.fromData(t,o,e,r);s.enableNearestScaling(),s.enableWrapClamp();var a=new n(t,e,r);return a.enableTexture(s),a},e.exports=n},{"./GLTexture":5}],4:[function(t,e,r){var i=t("./shader/compileProgram"),n=t("./shader/extractAttributes"),o=t("./shader/extractUniforms"),s=t("./shader/generateUniformAccessObject"),a=function(t,e,r){this.gl=t,this.program=i(t,e,r),this.attributes=n(t,this.program);var a=o(t,this.program);this.uniforms=s(t,a)};a.prototype.bind=function(){this.gl.useProgram(this.program)},a.prototype.destroy=function(){this.gl},e.exports=a},{"./shader/compileProgram":9,"./shader/extractAttributes":11,"./shader/extractUniforms":12,"./shader/generateUniformAccessObject":13}],5:[function(t,e,r){var i=function(t,e,r,i,n){this.gl=t,this.texture=t.createTexture(),this.mipmap=!1,this.premultiplyAlpha=!1,this.width=e||0,this.height=r||0,this.format=i||t.RGBA,this.type=n||t.UNSIGNED_BYTE};i.prototype.upload=function(t){this.bind();var e=this.gl;this.width=t.width,this.height=t.height,e.pixelStorei(e.UNPACK_PREMULTIPLY_ALPHA_WEBGL,this.premultiplyAlpha),e.texImage2D(e.TEXTURE_2D,0,this.format,this.format,this.type,t)};var n=!1;i.prototype.uploadData=function(t,e,r){if(this.bind(),this.width=e||this.width,this.height=r||this.height,t instanceof Float32Array){if(!n){var i=gl.getExtension("OES_texture_float");if(!i)throw new Error("floating point textures not available");n=!0}this.type=gl.FLOAT}else this.type=gl.UNSIGNED_BYTE;gl.pixelStorei(gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL,this.premultiplyAlpha),gl.texImage2D(gl.TEXTURE_2D,0,this.format,this.width,this.height,0,this.format,this.type,t||null)},i.prototype.bind=function(t){var e=this.gl;void 0!==t&&e.activeTexture(e.TEXTURE0+t),e.bindTexture(e.TEXTURE_2D,this.texture)},i.prototype.unbind=function(){var t=this.gl;t.bindTexture(t.TEXTURE_2D,null)},i.prototype.minFilter=function(t){var e=this.gl;this.bind(),this.mipmap?e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MIN_FILTER,t?e.LINEAR_MIPMAP_LINEAR:e.NEAREST_MIPMAP_NEAREST):e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MIN_FILTER,t?e.LINEAR:e.NEAREST)},i.prototype.magFilter=function(t){var e=this.gl;this.bind(),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MAG_FILTER,t?e.LINEAR:e.NEAREST)},i.prototype.enableMipmap=function(){this.bind(),this.mipmap=!0,gl.generateMipmap(gl.TEXTURE_2D)},i.prototype.enableLinearScaling=function(){this.minFilter(!0),this.magFilter(!0)},i.prototype.enableNearestScaling=function(){this.minFilter(!1),this.magFilter(!1)},i.prototype.enableWrapClamp=function(){var t=this.gl;this.bind(),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_WRAP_S,t.CLAMP_TO_EDGE),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_WRAP_T,t.CLAMP_TO_EDGE)},i.prototype.enableWrapRepeat=function(){var t=this.gl;this.bind(),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_WRAP_S,t.REPEAT),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_WRAP_T,t.REPEAT)},i.prototype.destroy=function(){var t=this.gl;t.deleteTexture(this.texture)},i.fromSource=function(t,e,r){var n=new i(t);return n.premultiplyAlpha=r||!1,n.upload(e),n},i.fromData=function(t,e,r,n){var o=new i(t);return o.uploadData(e,r,n),o},e.exports=i},{}],6:[function(t,e,r){function i(t){this.nativeVaoExtension=t.getExtension("OES_vertex_array_object")||t.getExtension("MOZ_OES_vertex_array_object")||t.getExtension("WEBKIT_OES_vertex_array_object"),this.nativeVaoExtension&&(this.nativeVao=this.nativeVaoExtension.createVertexArrayOES()),this.gl=t,this.attributes=[],this.indexBuffer=null,this.dirty=!1}i.prototype.constructor=i,e.exports=i,i.prototype.bind=function(){this.nativeVao?(this.nativeVaoExtension.bindVertexArrayOES(this.nativeVao),this.dirty&&(this.dirty=!1,this.activate())):this.activate()},i.prototype.unbind=function(){this.nativeVao&&this.nativeVaoExtension.bindVertexArrayOES(null)},i.prototype.activate=function(){for(var t=this.gl,e=0;es;s++){var a=t.getActiveAttrib(e,s),h=i(t,a.type);r[a.name]={type:h,size:n(h),location:t.getAttribLocation(e,a.name),pointer:function(e,r,i,n){t.vertexAttribPointer(this.location,this.size,e||t.FLOAT,r||!1,i||0,n||0)}}}return r};e.exports=o},{"./mapSize":14,"./mapType":15}],12:[function(t,e,r){var i=t("./mapType"),n=t("./defaultValue"),o=function(t,e){for(var r={},o=t.getProgramParameter(e,t.ACTIVE_UNIFORMS),s=0;o>s;s++){var a=t.getActiveUniform(e,s),h=a.name.replace(/\[.*?\]/,""),u=i(t,a.type);r[h]={type:u,size:a.size,location:t.getUniformLocation(e,h),value:n(u,a.size)}}return r};e.exports=o},{"./defaultValue":10,"./mapType":15}],13:[function(t,e,r){var i=function(t,e){var r={data:{}};r.gl=t;for(var i=Object.keys(e),a=0;a=0&&t.length%1===0}function c(t,e){for(var r=-1,i=t.length;++ri?i:null}):(r=X(t),e=r.length,function(){return i++,e>i?r[i]:null})}function y(t,e){return e=null==e?t.length-1:+e,function(){for(var r=Math.max(arguments.length-e,0),i=Array(r),n=0;r>n;n++)i[n]=arguments[n+e];switch(e){case 0:return t.call(this,i);case 1:return t.call(this,arguments[0],i)}}}function x(t){return function(e,r,i){return t(e,i)}}function b(t){return function(e,r,i){i=u(i||n),e=e||[];var o=m(e);if(0>=t)return i(null);var s=!1,a=0,l=!1;!function c(){if(s&&0>=a)return i(null);for(;t>a&&!l;){var n=o();if(null===n)return s=!0,void(0>=a&&i(null));a+=1,r(e[n],n,h(function(t){a-=1,t?(i(t),l=!0):c()}))}}()}}function _(t){return function(e,r,i){return t(N.eachOf,e,r,i)}}function T(t){return function(e,r,i,n){return t(b(r),e,i,n)}}function E(t){return function(e,r,i){return t(N.eachOfSeries,e,r,i)}}function S(t,e,r,i){i=u(i||n),e=e||[];var o=l(e)?[]:{};t(e,function(t,e,i){r(t,function(t,r){o[e]=r,i(t)})},function(t){i(t,o)})}function w(t,e,r,i){var n=[];t(e,function(t,e,i){r(t,function(r){r&&n.push({index:e,value:t}),i()})},function(){i(p(n.sort(function(t,e){return t.index-e.index}),function(t){return t.value}))})}function C(t,e,r,i){w(t,e,function(t,e){r(t,function(t){e(!t)})},i)}function A(t,e,r){return function(i,n,o,s){function a(){s&&s(r(!1,void 0))}function h(t,i,n){return s?void o(t,function(i){s&&e(i)&&(s(r(!0,t)),s=o=!1),n()}):n()}arguments.length>3?t(i,n,h,a):(s=o,o=n,t(i,h,a))}}function M(t,e){return e}function R(t,e,r){r=r||n;var i=l(e)?[]:{};t(e,function(t,e,r){t(y(function(t,n){n.length<=1&&(n=n[0]),i[e]=n,r(t)}))},function(t){r(t,i)})}function O(t,e,r,i){var n=[];t(e,function(t,e,i){r(t,function(t,e){n=n.concat(e||[]),i(t)})},function(t){i(t,n)})}function P(t,e,r){function i(t,e,r,i){if(null!=i&&"function"!=typeof i)throw new Error("task callback must be a function");return t.started=!0,j(e)||(e=[e]),0===e.length&&t.idle()?N.setImmediate(function(){t.drain()}):(c(e,function(e){var o={data:e,callback:i||n};r?t.tasks.unshift(o):t.tasks.push(o),t.tasks.length===t.concurrency&&t.saturated()}),void N.setImmediate(t.process))}function o(t,e){return function(){s-=1;var r=!1,i=arguments;c(e,function(t){c(a,function(e,i){e!==t||r||(a.splice(i,1),r=!0)}),t.callback.apply(t,i)}),t.tasks.length+s===0&&t.drain(),t.process()}}if(null==e)e=1;else if(0===e)throw new Error("Concurrency must not be zero");var s=0,a=[],u={tasks:[],concurrency:e,payload:r,saturated:n,empty:n,drain:n,started:!1,paused:!1,push:function(t,e){i(u,t,!1,e)},kill:function(){u.drain=n,u.tasks=[]},unshift:function(t,e){i(u,t,!0,e)},process:function(){if(!u.paused&&s=e;e++)N.setImmediate(u.process)}}};return u}function D(t){return y(function(e,r){e.apply(null,r.concat([y(function(e,r){"object"==typeof console&&(e?console.error&&console.error(e):console[t]&&c(r,function(e){console[t](e)}))})]))})}function F(t){return function(e,r,i){t(d(e),r,i)}}function L(t){return y(function(e,r){var i=y(function(r){var i=this,n=r.pop();return t(e,function(t,e,n){t.apply(i,r.concat([n]))},n)});return r.length?i.apply(this,r):i})}function B(t){return y(function(e){var r=e.pop();e.push(function(){var t=arguments;i?N.setImmediate(function(){r.apply(null,t)}):r.apply(null,t)});var i=!0;t.apply(this,e),i=!1})}var I,N={},U="object"==typeof self&&self.self===self&&self||"object"==typeof i&&i.global===i&&i||this;null!=U&&(I=U.async),N.noConflict=function(){return U.async=I,N};var k=Object.prototype.toString,j=Array.isArray||function(t){return"[object Array]"===k.call(t)},G=function(t){var e=typeof t;return"function"===e||"object"===e&&!!t},X=Object.keys||function(t){var e=[];for(var r in t)t.hasOwnProperty(r)&&e.push(r);return e},Y="function"==typeof setImmediate&&setImmediate,z=Y?function(t){Y(t)}:function(t){setTimeout(t,0)};"object"==typeof e&&"function"==typeof e.nextTick?N.nextTick=e.nextTick:N.nextTick=z,N.setImmediate=Y?z:N.nextTick,N.forEach=N.each=function(t,e,r){return N.eachOf(t,x(e),r)},N.forEachSeries=N.eachSeries=function(t,e,r){return N.eachOfSeries(t,x(e),r)},N.forEachLimit=N.eachLimit=function(t,e,r,i){return b(e)(t,x(r),i)},N.forEachOf=N.eachOf=function(t,e,r){function i(t){a--,t?r(t):null===o&&0>=a&&r(null)}r=u(r||n),t=t||[];for(var o,s=m(t),a=0;null!=(o=s());)a+=1,e(t[o],o,h(i));0===a&&r(null)},N.forEachOfSeries=N.eachOfSeries=function(t,e,r){function i(){var n=!0;return null===s?r(null):(e(t[s],s,h(function(t){if(t)r(t);else{if(s=o(),null===s)return r(null);n?N.setImmediate(i):i()}})),void(n=!1))}r=u(r||n),t=t||[];var o=m(t),s=o();i()},N.forEachOfLimit=N.eachOfLimit=function(t,e,r,i){b(e)(t,r,i)},N.map=_(S),N.mapSeries=E(S),N.mapLimit=T(S),N.inject=N.foldl=N.reduce=function(t,e,r,i){N.eachOfSeries(t,function(t,i,n){r(e,t,function(t,r){e=r,n(t)})},function(t){i(t,e)})},N.foldr=N.reduceRight=function(t,e,r,i){var n=p(t,o).reverse();N.reduce(n,e,r,i)},N.transform=function(t,e,r,i){3===arguments.length&&(i=r,r=e,e=j(t)?[]:{}),N.eachOf(t,function(t,i,n){r(e,t,i,n)},function(t){i(t,e)})},N.select=N.filter=_(w),N.selectLimit=N.filterLimit=T(w),N.selectSeries=N.filterSeries=E(w),N.reject=_(C),N.rejectLimit=T(C),N.rejectSeries=E(C),N.any=N.some=A(N.eachOf,s,o),N.someLimit=A(N.eachOfLimit,s,o),N.all=N.every=A(N.eachOf,a,a),N.everyLimit=A(N.eachOfLimit,a,a),N.detect=A(N.eachOf,o,M),N.detectSeries=A(N.eachOfSeries,o,M),N.detectLimit=A(N.eachOfLimit,o,M),N.sortBy=function(t,e,r){function i(t,e){var r=t.criteria,i=e.criteria;return i>r?-1:r>i?1:0}N.map(t,function(t,r){e(t,function(e,i){e?r(e):r(null,{value:t,criteria:i})})},function(t,e){return t?r(t):void r(null,p(e.sort(i),function(t){return t.value}))})},N.auto=function(t,e,r){function i(t){d.unshift(t)}function o(t){var e=g(d,t);e>=0&&d.splice(e,1)}function s(){h--,c(d.slice(0),function(t){t()})}r||(r=e,e=null),r=u(r||n);var a=X(t),h=a.length;if(!h)return r(null);e||(e=h);var l={},p=0,d=[];i(function(){h||r(null,l)}),c(a,function(n){function a(){return e>p&&f(m,function(t,e){return t&&l.hasOwnProperty(e)},!0)&&!l.hasOwnProperty(n)}function h(){a()&&(p++,o(h),c[c.length-1](d,l))}for(var u,c=j(t[n])?t[n]:[t[n]],d=y(function(t,e){if(p--,e.length<=1&&(e=e[0]),t){var i={};v(l,function(t,e){i[e]=t}),i[n]=e,r(t,i)}else l[n]=e,N.setImmediate(s)}),m=c.slice(0,c.length-1),x=m.length;x--;){if(!(u=t[m[x]]))throw new Error("Has inexistant dependency");if(j(u)&&g(u,n)>=0)throw new Error("Has cyclic dependencies")}a()?(p++,c[c.length-1](d,l)):i(h)})},N.retry=function(t,e,r){function i(t,e){if("number"==typeof e)t.times=parseInt(e,10)||o;else{if("object"!=typeof e)throw new Error("Unsupported argument type for 'times': "+typeof e);t.times=parseInt(e.times,10)||o,t.interval=parseInt(e.interval,10)||s}}function n(t,e){function r(t,r){return function(i){t(function(t,e){i(!t||r,{err:t,result:e})},e)}}function i(t){return function(e){setTimeout(function(){e(null)},t)}}for(;h.times;){var n=!(h.times-=1);a.push(r(h.task,n)),!n&&h.interval>0&&a.push(i(h.interval))}N.series(a,function(e,r){r=r[r.length-1],(t||h.callback)(r.err,r.result)})}var o=5,s=0,a=[],h={times:o,interval:s},u=arguments.length;if(1>u||u>3)throw new Error("Invalid arguments - must be either (task), (task, callback), (times, task) or (times, task, callback)");return 2>=u&&"function"==typeof t&&(r=e,e=t),"function"!=typeof t&&i(h,t),h.callback=r,h.task=e,h.callback?n():n},N.waterfall=function(t,e){function r(t){return y(function(i,n){if(i)e.apply(null,[i].concat(n));else{var o=t.next();o?n.push(r(o)):n.push(e),B(t).apply(null,n)}})}if(e=u(e||n),!j(t)){var i=new Error("First argument to waterfall must be an array of functions");return e(i)}return t.length?void r(N.iterator(t))():e()},N.parallel=function(t,e){R(N.eachOf,t,e)},N.parallelLimit=function(t,e,r){R(b(e),t,r)},N.series=function(t,e){R(N.eachOfSeries,t,e)},N.iterator=function(t){function e(r){function i(){return t.length&&t[r].apply(null,arguments),i.next()}return i.next=function(){return ri;){var o=i+(n-i+1>>>1);r(e,t[o])>=0?i=o:n=o-1}return i}function o(t,e,o,s){if(null!=s&&"function"!=typeof s)throw new Error("task callback must be a function");return t.started=!0,j(e)||(e=[e]),0===e.length?N.setImmediate(function(){t.drain()}):void c(e,function(e){var a={data:e,priority:o,callback:"function"==typeof s?s:n};t.tasks.splice(i(t.tasks,a,r)+1,0,a),t.tasks.length===t.concurrency&&t.saturated(),N.setImmediate(t.process)})}var s=N.queue(t,e);return s.push=function(t,e,r){o(s,t,e,r)},delete s.unshift,s},N.cargo=function(t,e){return P(t,1,e)},N.log=D("log"),N.dir=D("dir"),N.memoize=function(t,e){var r={},i={};e=e||o;var n=y(function(n){var o=n.pop(),s=e.apply(null,n);s in r?N.setImmediate(function(){o.apply(null,r[s])}):s in i?i[s].push(o):(i[s]=[o],t.apply(null,n.concat([y(function(t){r[s]=t;var e=i[s];delete i[s];for(var n=0,o=e.length;o>n;n++)e[n].apply(null,t)})])))});return n.memo=r,n.unmemoized=t,n},N.unmemoize=function(t){return function(){return(t.unmemoized||t).apply(null,arguments)}},N.times=F(N.map),N.timesSeries=F(N.mapSeries),N.timesLimit=function(t,e,r,i){return N.mapLimit(d(t),e,r,i)},N.seq=function(){var t=arguments;return y(function(e){var r=this,i=e[e.length-1];"function"==typeof i?e.pop():i=n,N.reduce(t,e,function(t,e,i){e.apply(r,t.concat([y(function(t,e){i(t,e)})]))},function(t,e){i.apply(r,[t].concat(e))})})},N.compose=function(){return N.seq.apply(null,Array.prototype.reverse.call(arguments))},N.applyEach=L(N.eachOf),N.applyEachSeries=L(N.eachOfSeries),N.forever=function(t,e){function r(t){return t?i(t):void o(r)}var i=h(e||n),o=B(t);r()},N.ensureAsync=B,N.constant=y(function(t){var e=[null].concat(t);return function(t){return t.apply(this,e)}}),N.wrapSync=N.asyncify=function(t){return y(function(e){var r,i=e.pop();try{r=t.apply(this,e)}catch(n){return i(n)}G(r)&&"function"==typeof r.then?r.then(function(t){i(null,t)})["catch"](function(t){i(t.message?t:new Error(t))}):i(null,r)})},"object"==typeof r&&r.exports?r.exports=N:"function"==typeof t&&t.amd?t([],function(){return N}):U.async=N}()}).call(this,e("_process"),"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{_process:18}],17:[function(t,e,r){(function(t){function e(t,e){for(var r=0,i=t.length-1;i>=0;i--){var n=t[i];"."===n?t.splice(i,1):".."===n?(t.splice(i,1),r++):r&&(t.splice(i,1),r--)}if(e)for(;r--;r)t.unshift("..");return t}function i(t,e){if(t.filter)return t.filter(e);for(var r=[],i=0;i=-1&&!n;o--){var s=o>=0?arguments[o]:t.cwd();if("string"!=typeof s)throw new TypeError("Arguments to path.resolve must be strings");s&&(r=s+"/"+r,n="/"===s.charAt(0))}return r=e(i(r.split("/"),function(t){return!!t}),!n).join("/"),(n?"/":"")+r||"."},r.normalize=function(t){var n=r.isAbsolute(t),o="/"===s(t,-1);return t=e(i(t.split("/"),function(t){return!!t}),!n).join("/"),t||n||(t="."),t&&o&&(t+="/"),(n?"/":"")+t},r.isAbsolute=function(t){return"/"===t.charAt(0)},r.join=function(){var t=Array.prototype.slice.call(arguments,0);return r.normalize(i(t,function(t,e){if("string"!=typeof t)throw new TypeError("Arguments to path.join must be strings");return t}).join("/"))},r.relative=function(t,e){function i(t){for(var e=0;e=0&&""===t[r];r--);return e>r?[]:t.slice(e,r-e+1)}t=r.resolve(t).substr(1),e=r.resolve(e).substr(1);for(var n=i(t.split("/")),o=i(e.split("/")),s=Math.min(n.length,o.length),a=s,h=0;s>h;h++)if(n[h]!==o[h]){a=h;break}for(var u=[],h=a;he&&(e=t.length+e),t.substr(e,r)}}).call(this,t("_process"))},{_process:18}],18:[function(t,e,r){function i(){l=!1,a.length?u=a.concat(u):c=-1,u.length&&n()}function n(){if(!l){var t=setTimeout(i);l=!0;for(var e=u.length;e;){for(a=u,u=[];++c1)for(var r=1;r1&&(i=r[0]+"@",t=r[1]),t=t.replace(F,".");var n=t.split("."),o=s(n,e).join(".");return i+o}function h(t){for(var e,r,i=[],n=0,o=t.length;o>n;)e=t.charCodeAt(n++),e>=55296&&56319>=e&&o>n?(r=t.charCodeAt(n++),56320==(64512&r)?i.push(((1023&e)<<10)+(1023&r)+65536):(i.push(e),n--)):i.push(e);return i}function u(t){return s(t,function(t){var e="";return t>65535&&(t-=65536,e+=N(t>>>10&1023|55296),t=56320|1023&t),e+=N(t)}).join("")}function l(t){return 10>t-48?t-22:26>t-65?t-65:26>t-97?t-97:E}function c(t,e){return t+22+75*(26>t)-((0!=e)<<5)}function p(t,e,r){var i=0;for(t=r?I(t/A):t>>1,t+=I(t/e);t>B*w>>1;i+=E)t=I(t/B);return I(i+(B+1)*t/(t+C))}function d(t){var e,r,i,n,s,a,h,c,d,f,v=[],g=t.length,m=0,y=R,x=M;for(r=t.lastIndexOf(O),0>r&&(r=0),i=0;r>i;++i)t.charCodeAt(i)>=128&&o("not-basic"),v.push(t.charCodeAt(i));for(n=r>0?r+1:0;g>n;){for(s=m,a=1,h=E;n>=g&&o("invalid-input"),c=l(t.charCodeAt(n++)),(c>=E||c>I((T-m)/a))&&o("overflow"),m+=c*a,d=x>=h?S:h>=x+w?w:h-x,!(d>c);h+=E)f=E-d,a>I(T/f)&&o("overflow"),a*=f;e=v.length+1,x=p(m-s,e,0==s),I(m/e)>T-y&&o("overflow"),y+=I(m/e),m%=e,v.splice(m++,0,y)}return u(v)}function f(t){var e,r,i,n,s,a,u,l,d,f,v,g,m,y,x,b=[];for(t=h(t),g=t.length,e=R,r=0,s=M,a=0;g>a;++a)v=t[a],128>v&&b.push(N(v));for(i=n=b.length,n&&b.push(O);g>i;){for(u=T,a=0;g>a;++a)v=t[a],v>=e&&u>v&&(u=v);for(m=i+1,u-e>I((T-r)/m)&&o("overflow"),r+=(u-e)*m,e=u,a=0;g>a;++a)if(v=t[a],e>v&&++r>T&&o("overflow"),v==e){for(l=r,d=E;f=s>=d?S:d>=s+w?w:d-s,!(f>l);d+=E)x=l-f,y=E-f,b.push(N(c(f+x%y,0))),l=I(x/y);b.push(N(c(l,0))),s=p(r,m,i==n),r=0,++i}++r,++e}return b.join("")}function v(t){return a(t,function(t){return P.test(t)?d(t.slice(4).toLowerCase()):t})}function g(t){return a(t,function(t){return D.test(t)?"xn--"+f(t):t})}var m="object"==typeof i&&i&&!i.nodeType&&i,y="object"==typeof r&&r&&!r.nodeType&&r,x="object"==typeof e&&e;(x.global===x||x.window===x||x.self===x)&&(n=x);var b,_,T=2147483647,E=36,S=1,w=26,C=38,A=700,M=72,R=128,O="-",P=/^xn--/,D=/[^\x20-\x7E]/,F=/[\x2E\u3002\uFF0E\uFF61]/g,L={overflow:"Overflow: input needs wider integers to process","not-basic":"Illegal input >= 0x80 (not a basic code point)","invalid-input":"Invalid input"},B=E-S,I=Math.floor,N=String.fromCharCode;if(b={version:"1.3.2",ucs2:{decode:h,encode:u},decode:d,encode:f,toASCII:g,toUnicode:v},"function"==typeof t&&"object"==typeof t.amd&&t.amd)t("punycode",function(){return b});else if(m&&y)if(r.exports==m)y.exports=b;else for(_ in b)b.hasOwnProperty(_)&&(m[_]=b[_]);else n.punycode=b}(this)}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{}],20:[function(t,e,r){"use strict";function i(t,e){return Object.prototype.hasOwnProperty.call(t,e)}e.exports=function(t,e,r,o){e=e||"&",r=r||"=";var s={};if("string"!=typeof t||0===t.length)return s;var a=/\+/g;t=t.split(e);var h=1e3;o&&"number"==typeof o.maxKeys&&(h=o.maxKeys);var u=t.length;h>0&&u>h&&(u=h);for(var l=0;u>l;++l){var c,p,d,f,v=t[l].replace(a,"%20"),g=v.indexOf(r);g>=0?(c=v.substr(0,g),p=v.substr(g+1)):(c=v,p=""),d=decodeURIComponent(c), +f=decodeURIComponent(p),i(s,d)?n(s[d])?s[d].push(f):s[d]=[s[d],f]:s[d]=f}return s};var n=Array.isArray||function(t){return"[object Array]"===Object.prototype.toString.call(t)}},{}],21:[function(t,e,r){"use strict";function i(t,e){if(t.map)return t.map(e);for(var r=[],i=0;i",'"',"`"," ","\r","\n"," "],g=["{","}","|","\\","^","`"].concat(v),m=["'"].concat(g),y=["%","/","?",";","#"].concat(m),x=["/","?","#"],b=255,_=/^[a-z0-9A-Z_-]{0,63}$/,T=/^([a-z0-9A-Z_-]{0,63})(.*)$/,E={javascript:!0,"javascript:":!0},S={javascript:!0,"javascript:":!0},w={http:!0,https:!0,ftp:!0,gopher:!0,file:!0,"http:":!0,"https:":!0,"ftp:":!0,"gopher:":!0,"file:":!0},C=t("querystring");i.prototype.parse=function(t,e,r){if(!h(t))throw new TypeError("Parameter 'url' must be a string, not "+typeof t);var i=t;i=i.trim();var n=d.exec(i);if(n){n=n[0];var o=n.toLowerCase();this.protocol=o,i=i.substr(n.length)}if(r||n||i.match(/^\/\/[^@\/]+@[^@\/]+/)){var s="//"===i.substr(0,2);!s||n&&S[n]||(i=i.substr(2),this.slashes=!0)}if(!S[n]&&(s||n&&!w[n])){for(var a=-1,u=0;ul)&&(a=l)}var c,f;f=-1===a?i.lastIndexOf("@"):i.lastIndexOf("@",a),-1!==f&&(c=i.slice(0,f),i=i.slice(f+1),this.auth=decodeURIComponent(c)),a=-1;for(var u=0;ul)&&(a=l)}-1===a&&(a=i.length),this.host=i.slice(0,a),i=i.slice(a),this.parseHost(),this.hostname=this.hostname||"";var v="["===this.hostname[0]&&"]"===this.hostname[this.hostname.length-1];if(!v)for(var g=this.hostname.split(/\./),u=0,A=g.length;A>u;u++){var M=g[u];if(M&&!M.match(_)){for(var R="",O=0,P=M.length;P>O;O++)R+=M.charCodeAt(O)>127?"x":M[O];if(!R.match(_)){var D=g.slice(0,u),F=g.slice(u+1),L=M.match(T);L&&(D.push(L[1]),F.unshift(L[2])),F.length&&(i="/"+F.join(".")+i),this.hostname=D.join(".");break}}}if(this.hostname.length>b?this.hostname="":this.hostname=this.hostname.toLowerCase(),!v){for(var B=this.hostname.split("."),I=[],u=0;uu;u++){var j=m[u],G=encodeURIComponent(j);G===j&&(G=escape(j)),i=i.split(j).join(G)}var X=i.indexOf("#");-1!==X&&(this.hash=i.substr(X),i=i.slice(0,X));var Y=i.indexOf("?");if(-1!==Y?(this.search=i.substr(Y),this.query=i.substr(Y+1),e&&(this.query=C.parse(this.query)),i=i.slice(0,Y)):e&&(this.search="",this.query={}),i&&(this.pathname=i),w[o]&&this.hostname&&!this.pathname&&(this.pathname="/"),this.pathname||this.search){var U=this.pathname||"",N=this.search||"";this.path=U+N}return this.href=this.format(),this},i.prototype.format=function(){var t=this.auth||"";t&&(t=encodeURIComponent(t),t=t.replace(/%3A/i,":"),t+="@");var e=this.protocol||"",r=this.pathname||"",i=this.hash||"",n=!1,o="";this.host?n=t+this.host:this.hostname&&(n=t+(-1===this.hostname.indexOf(":")?this.hostname:"["+this.hostname+"]"),this.port&&(n+=":"+this.port)),this.query&&u(this.query)&&Object.keys(this.query).length&&(o=C.stringify(this.query));var s=this.search||o&&"?"+o||"";return e&&":"!==e.substr(-1)&&(e+=":"),this.slashes||(!e||w[e])&&n!==!1?(n="//"+(n||""),r&&"/"!==r.charAt(0)&&(r="/"+r)):n||(n=""),i&&"#"!==i.charAt(0)&&(i="#"+i),s&&"?"!==s.charAt(0)&&(s="?"+s),r=r.replace(/[?#]/g,function(t){return encodeURIComponent(t)}),s=s.replace("#","%23"),e+n+r+s+i},i.prototype.resolve=function(t){return this.resolveObject(n(t,!1,!0)).format()},i.prototype.resolveObject=function(t){if(h(t)){var e=new i;e.parse(t,!1,!0),t=e}var r=new i;if(Object.keys(this).forEach(function(t){r[t]=this[t]},this),r.hash=t.hash,""===t.href)return r.href=r.format(),r;if(t.slashes&&!t.protocol)return Object.keys(t).forEach(function(e){"protocol"!==e&&(r[e]=t[e])}),w[r.protocol]&&r.hostname&&!r.pathname&&(r.path=r.pathname="/"),r.href=r.format(),r;if(t.protocol&&t.protocol!==r.protocol){if(!w[t.protocol])return Object.keys(t).forEach(function(e){r[e]=t[e]}),r.href=r.format(),r;if(r.protocol=t.protocol,t.host||S[t.protocol])r.pathname=t.pathname;else{for(var n=(t.pathname||"").split("/");n.length&&!(t.host=n.shift()););t.host||(t.host=""),t.hostname||(t.hostname=""),""!==n[0]&&n.unshift(""),n.length<2&&n.unshift(""),r.pathname=n.join("/")}if(r.search=t.search,r.query=t.query,r.host=t.host||"",r.auth=t.auth,r.hostname=t.hostname||t.host,r.port=t.port,r.pathname||r.search){var o=r.pathname||"",s=r.search||"";r.path=o+s}return r.slashes=r.slashes||t.slashes,r.href=r.format(),r}var a=r.pathname&&"/"===r.pathname.charAt(0),u=t.host||t.pathname&&"/"===t.pathname.charAt(0),p=u||a||r.host&&t.pathname,d=p,f=r.pathname&&r.pathname.split("/")||[],n=t.pathname&&t.pathname.split("/")||[],v=r.protocol&&!w[r.protocol];if(v&&(r.hostname="",r.port=null,r.host&&(""===f[0]?f[0]=r.host:f.unshift(r.host)),r.host="",t.protocol&&(t.hostname=null,t.port=null,t.host&&(""===n[0]?n[0]=t.host:n.unshift(t.host)),t.host=null),p=p&&(""===n[0]||""===f[0])),u)r.host=t.host||""===t.host?t.host:r.host,r.hostname=t.hostname||""===t.hostname?t.hostname:r.hostname,r.search=t.search,r.query=t.query,f=n;else if(n.length)f||(f=[]),f.pop(),f=f.concat(n),r.search=t.search,r.query=t.query;else if(!c(t.search)){if(v){r.hostname=r.host=f.shift();var g=r.host&&r.host.indexOf("@")>0?r.host.split("@"):!1;g&&(r.auth=g.shift(),r.host=r.hostname=g.shift())}return r.search=t.search,r.query=t.query,l(r.pathname)&&l(r.search)||(r.path=(r.pathname?r.pathname:"")+(r.search?r.search:"")),r.href=r.format(),r}if(!f.length)return r.pathname=null,r.search?r.path="/"+r.search:r.path=null,r.href=r.format(),r;for(var m=f.slice(-1)[0],y=(r.host||t.host)&&("."===m||".."===m)||""===m,x=0,b=f.length;b>=0;b--)m=f[b],"."==m?f.splice(b,1):".."===m?(f.splice(b,1),x++):x&&(f.splice(b,1),x--);if(!p&&!d)for(;x--;x)f.unshift("..");!p||""===f[0]||f[0]&&"/"===f[0].charAt(0)||f.unshift(""),y&&"/"!==f.join("/").substr(-1)&&f.push("");var _=""===f[0]||f[0]&&"/"===f[0].charAt(0);if(v){r.hostname=r.host=_?"":f.length?f.shift():"";var g=r.host&&r.host.indexOf("@")>0?r.host.split("@"):!1;g&&(r.auth=g.shift(),r.host=r.hostname=g.shift())}return p=p||r.host&&f.length,p&&!_&&f.unshift(""),f.length?r.pathname=f.join("/"):(r.pathname=null,r.path=null),l(r.pathname)&&l(r.search)||(r.path=(r.pathname?r.pathname:"")+(r.search?r.search:"")),r.auth=t.auth||r.auth,r.slashes=r.slashes||t.slashes,r.href=r.format(),r},i.prototype.parseHost=function(){var t=this.host,e=f.exec(t);e&&(e=e[0],":"!==e&&(this.port=e.substr(1)),t=t.substr(0,t.length-e.length)),t&&(this.hostname=t)}},{punycode:19,querystring:22}],24:[function(t,e,r){"use strict";function i(t,e,r){r=r||2;var i=e&&e.length,o=i?e[0]*r:t.length,a=n(t,0,o,r,!0),h=[];if(!a)return h;var u,l,p,d,f,v,g;if(i&&(a=c(t,e,a,r)),t.length>80*r){u=p=t[0],l=d=t[1];for(var m=r;o>m;m+=r)f=t[m],v=t[m+1],u>f&&(u=f),l>v&&(l=v),f>p&&(p=f),v>d&&(d=v);g=Math.max(p-u,d-l)}return s(a,h,r,u,l,g),h}function n(t,e,r,i,n){var o,s,a,h=0;for(o=e,s=r-i;r>o;o+=i)h+=(t[s]-t[o])*(t[o+1]+t[s+1]),s=o;if(n===h>0)for(o=e;r>o;o+=i)a=M(o,t[o],t[o+1],a);else for(o=r-i;o>=e;o-=i)a=M(o,t[o],t[o+1],a);return a}function o(t,e){if(!t)return t;e||(e=t);var r,i=t;do if(r=!1,i.steiner||!T(i,i.next)&&0!==_(i.prev,i,i.next))i=i.next;else{if(R(i),i=e=i.prev,i===i.next)return null;r=!0}while(r||i!==e);return e}function s(t,e,r,i,n,c,p){if(t){!p&&c&&v(t,i,n,c);for(var d,f,g=t;t.prev!==t.next;)if(d=t.prev,f=t.next,c?h(t,i,n,c):a(t))e.push(d.i/r),e.push(t.i/r),e.push(f.i/r),R(t),t=f.next,g=f.next;else if(t=f,t===g){p?1===p?(t=u(t,e,r),s(t,e,r,i,n,c,2)):2===p&&l(t,e,r,i,n,c):s(o(t),e,r,i,n,c,1);break}}}function a(t){var e=t.prev,r=t,i=t.next;if(_(e,r,i)>=0)return!1;for(var n=t.next.next;n!==t.prev;){if(x(e.x,e.y,r.x,r.y,i.x,i.y,n.x,n.y)&&_(n.prev,n,n.next)>=0)return!1;n=n.next}return!0}function h(t,e,r,i){var n=t.prev,o=t,s=t.next;if(_(n,o,s)>=0)return!1;for(var a=n.xo.x?n.x>s.x?n.x:s.x:o.x>s.x?o.x:s.x,l=n.y>o.y?n.y>s.y?n.y:s.y:o.y>s.y?o.y:s.y,c=m(a,h,e,r,i),p=m(u,l,e,r,i),d=t.nextZ;d&&d.z<=p;){if(d!==t.prev&&d!==t.next&&x(n.x,n.y,o.x,o.y,s.x,s.y,d.x,d.y)&&_(d.prev,d,d.next)>=0)return!1;d=d.nextZ}for(d=t.prevZ;d&&d.z>=c;){if(d!==t.prev&&d!==t.next&&x(n.x,n.y,o.x,o.y,s.x,s.y,d.x,d.y)&&_(d.prev,d,d.next)>=0)return!1;d=d.prevZ}return!0}function u(t,e,r){var i=t;do{var n=i.prev,o=i.next.next;E(n,i,i.next,o)&&w(n,o)&&w(o,n)&&(e.push(n.i/r),e.push(i.i/r),e.push(o.i/r),R(i),R(i.next),i=t=o),i=i.next}while(i!==t);return i}function l(t,e,r,i,n,a){var h=t;do{for(var u=h.next.next;u!==h.prev;){if(h.i!==u.i&&b(h,u)){var l=A(h,u);return h=o(h,h.next),l=o(l,l.next),s(h,e,r,i,n,a),void s(l,e,r,i,n,a)}u=u.next}h=h.next}while(h!==t)}function c(t,e,r,i){var s,a,h,u,l,c=[];for(s=0,a=e.length;a>s;s++)h=e[s]*i,u=a-1>s?e[s+1]*i:t.length,l=n(t,h,u,i,!1),l===l.next&&(l.steiner=!0),c.push(y(l));for(c.sort(p),s=0;s=i.next.y){var a=i.x+(o-i.y)*(i.next.x-i.x)/(i.next.y-i.y);n>=a&&a>s&&(s=a,r=i.x=i.x&&i.x>=r.x&&x(oh||h===l&&i.x>r.x)&&w(i,t)&&(r=i,l=h)),i=i.next;return r}function v(t,e,r,i){var n=t;do null===n.z&&(n.z=m(n.x,n.y,e,r,i)),n.prevZ=n.prev,n.nextZ=n.next,n=n.next;while(n!==t);n.prevZ.nextZ=null,n.prevZ=null,g(n)}function g(t){var e,r,i,n,o,s,a,h,u=1;do{for(r=t,t=null,o=null,s=0;r;){for(s++,i=r,a=0,e=0;u>e&&(a++,i=i.nextZ,i);e++);for(h=u;a>0||h>0&&i;)0===a?(n=i,i=i.nextZ,h--):0!==h&&i?r.z<=i.z?(n=r,r=r.nextZ,a--):(n=i,i=i.nextZ,h--):(n=r,r=r.nextZ,a--),o?o.nextZ=n:t=n,n.prevZ=o,o=n;r=i}o.nextZ=null,u*=2}while(s>1);return t}function m(t,e,r,i,n){return t=32767*(t-r)/n,e=32767*(e-i)/n,t=16711935&(t|t<<8),t=252645135&(t|t<<4),t=858993459&(t|t<<2),t=1431655765&(t|t<<1),e=16711935&(e|e<<8),e=252645135&(e|e<<4),e=858993459&(e|e<<2),e=1431655765&(e|e<<1),t|e<<1}function y(t){var e=t,r=t;do e.x=0&&(t-s)*(i-a)-(r-s)*(e-a)>=0&&(r-s)*(o-a)-(n-s)*(i-a)>=0}function b(t,e){return T(t,e)||t.next.i!==e.i&&t.prev.i!==e.i&&!S(t,e)&&w(t,e)&&w(e,t)&&C(t,e)}function _(t,e,r){return(e.y-t.y)*(r.x-e.x)-(e.x-t.x)*(r.y-e.y)}function T(t,e){return t.x===e.x&&t.y===e.y}function E(t,e,r,i){return _(t,e,r)>0!=_(t,e,i)>0&&_(r,i,t)>0!=_(r,i,e)>0}function S(t,e){var r=t;do{if(r.i!==t.i&&r.next.i!==t.i&&r.i!==e.i&&r.next.i!==e.i&&E(r,r.next,t,e))return!0;r=r.next}while(r!==t);return!1}function w(t,e){return _(t.prev,t,t.next)<0?_(t,e,t.next)>=0&&_(t,t.prev,e)>=0:_(t,e,t.prev)<0||_(t,t.next,e)<0}function C(t,e){var r=t,i=!1,n=(t.x+e.x)/2,o=(t.y+e.y)/2;do r.y>o!=r.next.y>o&&n<(r.next.x-r.x)*(o-r.y)/(r.next.y-r.y)+r.x&&(i=!i),r=r.next;while(r!==t);return i}function A(t,e){var r=new O(t.i,t.x,t.y),i=new O(e.i,e.x,e.y),n=t.next,o=e.prev;return t.next=e,e.prev=t,r.next=n,n.prev=r,i.next=r,r.prev=i,o.next=i,i.prev=o,i}function M(t,e,r,i){var n=new O(t,e,r);return i?(n.next=i.next,n.prev=i,i.next.prev=n,i.next=n):(n.prev=n,n.next=n),n}function R(t){t.next.prev=t.prev,t.prev.next=t.next,t.prevZ&&(t.prevZ.nextZ=t.nextZ),t.nextZ&&(t.nextZ.prevZ=t.prevZ)}function O(t,e,r){this.i=t,this.x=e,this.y=r,this.prev=null,this.next=null,this.z=null,this.prevZ=null,this.nextZ=null,this.steiner=!1}e.exports=i},{}],25:[function(t,e,r){"use strict";function i(t,e,r){this.fn=t,this.context=e,this.once=r||!1}function n(){}var o="function"!=typeof Object.create?"~":!1;n.prototype._events=void 0,n.prototype.listeners=function(t,e){var r=o?o+t:t,i=this._events&&this._events[r];if(e)return!!i;if(!i)return[];if(i.fn)return[i.fn];for(var n=0,s=i.length,a=new Array(s);s>n;n++)a[n]=i[n].fn;return a},n.prototype.emit=function(t,e,r,i,n,s){var a=o?o+t:t;if(!this._events||!this._events[a])return!1;var h,u,l=this._events[a],c=arguments.length;if("function"==typeof l.fn){switch(l.once&&this.removeListener(t,l.fn,void 0,!0),c){case 1:return l.fn.call(l.context),!0;case 2:return l.fn.call(l.context,e),!0;case 3:return l.fn.call(l.context,e,r),!0;case 4:return l.fn.call(l.context,e,r,i),!0;case 5:return l.fn.call(l.context,e,r,i,n),!0;case 6:return l.fn.call(l.context,e,r,i,n,s),!0}for(u=1,h=new Array(c-1);c>u;u++)h[u-1]=arguments[u];l.fn.apply(l.context,h)}else{var p,d=l.length;for(u=0;d>u;u++)switch(l[u].once&&this.removeListener(t,l[u].fn,void 0,!0),c){case 1:l[u].fn.call(l[u].context);break;case 2:l[u].fn.call(l[u].context,e);break;case 3:l[u].fn.call(l[u].context,e,r);break;default:if(!h)for(p=1,h=new Array(c-1);c>p;p++)h[p-1]=arguments[p];l[u].fn.apply(l[u].context,h)}}return!0},n.prototype.on=function(t,e,r){var n=new i(e,r||this),s=o?o+t:t;return this._events||(this._events=o?{}:Object.create(null)),this._events[s]?this._events[s].fn?this._events[s]=[this._events[s],n]:this._events[s].push(n):this._events[s]=n,this},n.prototype.once=function(t,e,r){var n=new i(e,r||this,!0),s=o?o+t:t;return this._events||(this._events=o?{}:Object.create(null)),this._events[s]?this._events[s].fn?this._events[s]=[this._events[s],n]:this._events[s].push(n):this._events[s]=n,this},n.prototype.removeListener=function(t,e,r,i){var n=o?o+t:t;if(!this._events||!this._events[n])return this;var s=this._events[n],a=[];if(e)if(s.fn)(s.fn!==e||i&&!s.once||r&&s.context!==r)&&a.push(s);else for(var h=0,u=s.length;u>h;h++)(s[h].fn!==e||i&&!s[h].once||r&&s[h].context!==r)&&a.push(s[h]);return a.length?this._events[n]=1===a.length?a[0]:a:delete this._events[n],this},n.prototype.removeAllListeners=function(t){return this._events?(t?delete this._events[o?o+t:t]:this._events=o?{}:Object.create(null),this):this},n.prototype.off=n.prototype.removeListener,n.prototype.addListener=n.prototype.on,n.prototype.setMaxListeners=function(){return this},n.prefixed=o,"undefined"!=typeof e&&(e.exports=n)},{}],26:[function(t,e,r){"use strict";function i(t){if(null===t||void 0===t)throw new TypeError("Object.assign cannot be called with null or undefined");return Object(t)}var n=Object.prototype.hasOwnProperty,o=Object.prototype.propertyIsEnumerable;e.exports=Object.assign||function(t,e){for(var r,s,a=i(t),h=1;h=t.length&&r())}if(r=r||function(){},!t.length)return r();var o=0;u(t,function(t){e(t,i(n))})},s.forEach=s.each,s.eachSeries=function(t,e,r){if(r=r||function(){},!t.length)return r();var i=0,n=function(){e(t[i],function(e){e?(r(e),r=function(){}):(i+=1,i>=t.length?r():n())})};n()},s.forEachSeries=s.eachSeries,s.eachLimit=function(t,e,r,i){var n=d(e);n.apply(null,[t,r,i])},s.forEachLimit=s.eachLimit;var d=function(t){return function(e,r,i){if(i=i||function(){},!e.length||0>=t)return i();var n=0,o=0,s=0;!function a(){if(n>=e.length)return i();for(;t>s&&o=e.length?i():a())})}()}},f=function(t){return function(){var e=Array.prototype.slice.call(arguments);return t.apply(null,[s.each].concat(e))}},v=function(t,e){return function(){var r=Array.prototype.slice.call(arguments);return e.apply(null,[d(t)].concat(r))}},g=function(t){return function(){var e=Array.prototype.slice.call(arguments);return t.apply(null,[s.eachSeries].concat(e))}},m=function(t,e,r,i){if(e=l(e,function(t,e){return{index:e,value:t}}),i){var n=[];t(e,function(t,e){r(t.value,function(r,i){n[t.index]=i,e(r)})},function(t){i(t,n)})}else t(e,function(t,e){r(t.value,function(t){e(t)})})};s.map=f(m),s.mapSeries=g(m),s.mapLimit=function(t,e,r,i){return y(e)(t,r,i)};var y=function(t){return v(t,m)};s.reduce=function(t,e,r,i){s.eachSeries(t,function(t,i){r(e,t,function(t,r){e=r,i(t)})},function(t){i(t,e)})},s.inject=s.reduce,s.foldl=s.reduce,s.reduceRight=function(t,e,r,i){var n=l(t,function(t){return t}).reverse();s.reduce(n,e,r,i)},s.foldr=s.reduceRight;var x=function(t,e,r,i){var n=[];e=l(e,function(t,e){return{index:e,value:t}}),t(e,function(t,e){r(t.value,function(r){r&&n.push(t),e()})},function(t){i(l(n.sort(function(t,e){return t.index-e.index}),function(t){return t.value}))})};s.filter=f(x),s.filterSeries=g(x),s.select=s.filter,s.selectSeries=s.filterSeries;var b=function(t,e,r,i){var n=[];e=l(e,function(t,e){return{index:e,value:t}}),t(e,function(t,e){r(t.value,function(r){r||n.push(t),e()})},function(t){i(l(n.sort(function(t,e){return t.index-e.index}),function(t){return t.value}))})};s.reject=f(b),s.rejectSeries=g(b);var _=function(t,e,r,i){t(e,function(t,e){r(t,function(r){r?(i(t),i=function(){}):e()})},function(t){i()})};s.detect=f(_),s.detectSeries=g(_),s.some=function(t,e,r){s.each(t,function(t,i){e(t,function(t){t&&(r(!0),r=function(){}),i()})},function(t){r(!1)})},s.any=s.some,s.every=function(t,e,r){s.each(t,function(t,i){e(t,function(t){t||(r(!1),r=function(){}),i()})},function(t){r(!0)})},s.all=s.every,s.sortBy=function(t,e,r){s.map(t,function(t,r){e(t,function(e,i){e?r(e):r(null,{value:t,criteria:i})})},function(t,e){if(t)return r(t);var i=function(t,e){var r=t.criteria,i=e.criteria;return i>r?-1:r>i?1:0};r(null,l(e.sort(i),function(t){return t.value}))})},s.auto=function(t,e){e=e||function(){};var r=p(t),i=r.length;if(!i)return e();var n={},o=[],a=function(t){o.unshift(t)},l=function(t){for(var e=0;ei;){var o=i+(n-i+1>>>1);r(e,t[o])>=0?i=o:n=o-1}return i}function n(t,e,n,o){return t.started||(t.started=!0),h(e)||(e=[e]),0==e.length?s.setImmediate(function(){t.drain&&t.drain()}):void u(e,function(e){var a={data:e,priority:n,callback:"function"==typeof o?o:null};t.tasks.splice(i(t.tasks,a,r)+1,0,a),t.saturated&&t.tasks.length===t.concurrency&&t.saturated(),s.setImmediate(t.process)})}var o=s.queue(t,e);return o.push=function(t,e,r){n(o,t,e,r)},delete o.unshift,o},s.cargo=function(t,e){var r=!1,i=[],n={tasks:i,payload:e,saturated:null,empty:null,drain:null,drained:!0,push:function(t,r){h(t)||(t=[t]),u(t,function(t){i.push({data:t,callback:"function"==typeof r?r:null}),n.drained=!1,n.saturated&&i.length===e&&n.saturated()}),s.setImmediate(n.process)},process:function o(){if(!r){if(0===i.length)return n.drain&&!n.drained&&n.drain(),void(n.drained=!0);var s="number"==typeof e?i.splice(0,e):i.splice(0,i.length),a=l(s,function(t){return t.data});n.empty&&n.empty(),r=!0,t(a,function(){r=!1;var t=arguments;u(s,function(e){e.callback&&e.callback.apply(null,t)}),o()})}},length:function(){return i.length},running:function(){return r}};return n};var S=function(t){return function(e){var r=Array.prototype.slice.call(arguments,1);e.apply(null,r.concat([function(e){var r=Array.prototype.slice.call(arguments,1);"undefined"!=typeof console&&(e?console.error&&console.error(e):console[t]&&u(r,function(e){console[t](e)}))}]))}};s.log=S("log"),s.dir=S("dir"),s.memoize=function(t,e){var r={},i={};e=e||function(t){return t};var n=function(){var n=Array.prototype.slice.call(arguments),o=n.pop(),a=e.apply(null,n);a in r?s.nextTick(function(){o.apply(null,r[a])}):a in i?i[a].push(o):(i[a]=[o],t.apply(null,n.concat([function(){r[a]=arguments;var t=i[a];delete i[a];for(var e=0,n=t.length;n>e;e++)t[e].apply(null,arguments)}])))};return n.memo=r,n.unmemoized=t,n},s.unmemoize=function(t){return function(){return(t.unmemoized||t).apply(null,arguments)}},s.times=function(t,e,r){for(var i=[],n=0;t>n;n++)i.push(n);return s.map(i,e,r)},s.timesSeries=function(t,e,r){for(var i=[],n=0;t>n;n++)i.push(n);return s.mapSeries(i,e,r)},s.seq=function(){var t=arguments;return function(){var e=this,r=Array.prototype.slice.call(arguments),i=r.pop();s.reduce(t,r,function(t,r,i){r.apply(e,t.concat([function(){var t=arguments[0],e=Array.prototype.slice.call(arguments,1);i(t,e)}]))},function(t,r){i.apply(e,[t].concat(r))})}},s.compose=function(){return s.seq.apply(null,Array.prototype.reverse.call(arguments))};var w=function(t,e){var r=function(){var r=this,i=Array.prototype.slice.call(arguments),n=i.pop();return t(e,function(t,e){t.apply(r,i.concat([e]))},n)};if(arguments.length>2){var i=Array.prototype.slice.call(arguments,2);return r.apply(this,i)}return r};s.applyEach=f(w),s.applyEachSeries=g(w),s.forever=function(t,e){function r(i){if(i){if(e)return e(i);throw i}t(r)}r()},"undefined"!=typeof r&&r.exports?r.exports=s:"undefined"!=typeof t&&t.amd?t([],function(){return s}):n.async=s}()}).call(this,e("_process"))},{_process:18}],28:[function(t,e,r){function i(t,e){a.call(this),e=e||10,this.baseUrl=t||"",this.progress=0,this.loading=!1,this._progressChunk=0,this._beforeMiddleware=[],this._afterMiddleware=[],this._boundLoadResource=this._loadResource.bind(this),this._boundOnLoad=this._onLoad.bind(this),this._buffer=[],this._numToLoad=0,this._queue=n.queue(this._boundLoadResource,e),this.resources={}}var n=t("async"),o=t("url"),s=t("./Resource"),a=t("eventemitter3");i.prototype=Object.create(a.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.add=i.prototype.enqueue=function(t,e,r,i){if(Array.isArray(t)){for(var n=0;n0)if(this.xhrType===i.XHR_RESPONSE_TYPE.TEXT)this.data=t.responseText;else if(this.xhrType===i.XHR_RESPONSE_TYPE.JSON)try{this.data=JSON.parse(t.responseText),this.isJson=!0}catch(r){this.error=new Error("Error trying to parse loaded json:",r)}else if(this.xhrType===i.XHR_RESPONSE_TYPE.DOCUMENT)try{if(window.DOMParser){var n=new DOMParser;this.data=n.parseFromString(t.responseText,"text/xml")}else{var o=document.createElement("div");o.innerHTML=t.responseText,this.data=o}this.isXml=!0}catch(r){this.error=new Error("Error trying to parse loaded xml:",r)}else this.data=t.response||t.responseText;else this.error=new Error("["+t.status+"]"+t.statusText+":"+t.responseURL);this.complete()},i.prototype._determineCrossOrigin=function(t,e){if(0===t.indexOf("data:"))return"";e=e||window.location,u||(u=document.createElement("a")),u.href=t,t=a.parse(u.href);var r=!t.port&&""===e.port||t.port===e.port;return t.hostname===e.hostname&&r&&t.protocol===e.protocol?"":"anonymous"},i.prototype._determineXhrType=function(){return i._xhrTypeMap[this._getExtension()]||i.XHR_RESPONSE_TYPE.TEXT},i.prototype._determineLoadType=function(){return i._loadTypeMap[this._getExtension()]||i.LOAD_TYPE.XHR},i.prototype._getExtension=function(){var t,e=this.url;if(this.isDataUrl){var r=e.indexOf("/");t=e.substring(r+1,e.indexOf(";",r))}else{var i=e.indexOf("?");-1!==i&&(e=e.substring(0,i)),t=e.substring(e.lastIndexOf(".")+1)}return t},i.prototype._getMimeFromXhrType=function(t){switch(t){case i.XHR_RESPONSE_TYPE.BUFFER:return"application/octet-binary";case i.XHR_RESPONSE_TYPE.BLOB:return"application/blob";case i.XHR_RESPONSE_TYPE.DOCUMENT:return"application/xml";case i.XHR_RESPONSE_TYPE.JSON:return"application/json";case i.XHR_RESPONSE_TYPE.DEFAULT:case i.XHR_RESPONSE_TYPE.TEXT:default:return"text/plain"}},i.LOAD_TYPE={XHR:1,IMAGE:2,AUDIO:3,VIDEO:4},i.XHR_READY_STATE={UNSENT:0,OPENED:1,HEADERS_RECEIVED:2,LOADING:3,DONE:4},i.XHR_RESPONSE_TYPE={DEFAULT:"text",BUFFER:"arraybuffer",BLOB:"blob",DOCUMENT:"document",JSON:"json",TEXT:"text"},i._loadTypeMap={gif:i.LOAD_TYPE.IMAGE,png:i.LOAD_TYPE.IMAGE,bmp:i.LOAD_TYPE.IMAGE,jpg:i.LOAD_TYPE.IMAGE,jpeg:i.LOAD_TYPE.IMAGE,tif:i.LOAD_TYPE.IMAGE,tiff:i.LOAD_TYPE.IMAGE,webp:i.LOAD_TYPE.IMAGE,tga:i.LOAD_TYPE.IMAGE},i._xhrTypeMap={xhtml:i.XHR_RESPONSE_TYPE.DOCUMENT,html:i.XHR_RESPONSE_TYPE.DOCUMENT,htm:i.XHR_RESPONSE_TYPE.DOCUMENT,xml:i.XHR_RESPONSE_TYPE.DOCUMENT,tmx:i.XHR_RESPONSE_TYPE.DOCUMENT,tsx:i.XHR_RESPONSE_TYPE.DOCUMENT,svg:i.XHR_RESPONSE_TYPE.DOCUMENT,gif:i.XHR_RESPONSE_TYPE.BLOB,png:i.XHR_RESPONSE_TYPE.BLOB,bmp:i.XHR_RESPONSE_TYPE.BLOB,jpg:i.XHR_RESPONSE_TYPE.BLOB,jpeg:i.XHR_RESPONSE_TYPE.BLOB,tif:i.XHR_RESPONSE_TYPE.BLOB,tiff:i.XHR_RESPONSE_TYPE.BLOB,webp:i.XHR_RESPONSE_TYPE.BLOB,tga:i.XHR_RESPONSE_TYPE.BLOB,json:i.XHR_RESPONSE_TYPE.JSON,text:i.XHR_RESPONSE_TYPE.TEXT,txt:i.XHR_RESPONSE_TYPE.TEXT},i.setExtensionLoadType=function(t,e){o(i._loadTypeMap,t,e)},i.setExtensionXhrType=function(t,e){o(i._xhrTypeMap,t,e)}},{eventemitter3:25,url:23}],30:[function(t,e,r){e.exports={_keyStr:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",encodeBinary:function(t){for(var e,r="",i=new Array(4),n=0,o=0,s=0;n>2,i[1]=(3&e[0])<<4|e[1]>>4,i[2]=(15&e[1])<<2|e[2]>>6,i[3]=63&e[2],s=n-(t.length-1)){case 2:i[3]=64,i[2]=64;break;case 1:i[3]=64}for(o=0;o","Richard Davey "],main:"./src/index.js",homepage:"http://goodboydigital.com/",bugs:"https://github.com/pixijs/pixi.js/issues",license:"MIT",repository:{type:"git",url:"https://github.com/pixijs/pixi.js.git"},scripts:{start:"gulp && gulp watch",test:"gulp && testem ci",build:"gulp",docs:"jsdoc -c ./gulp/util/jsdoc.conf.json -R README.md"},files:["bin/","src/","CONTRIBUTING.md","LICENSE","package.json","README.md"],dependencies:{async:"^1.5.0",brfs:"^1.4.1",earcut:"^2.0.7",eventemitter3:"^1.1.1","object-assign":"^4.0.1","pixi-gl-core":"git+https://github.com/GoodBoyDigital/pixi-gl-core.git","resource-loader":"^1.6.4"},devDependencies:{browserify:"^11.1.0",chai:"^3.2.0",del:"^2.0.2",gulp:"^3.9.0","gulp-cached":"^1.1.0","gulp-concat":"^2.6.0","gulp-debug":"^2.1.0","gulp-header":"^1.7.1","gulp-jshint":"^1.11.2","gulp-mirror":"^0.4.0","gulp-plumber":"^1.0.1","gulp-rename":"^1.2.2","gulp-sourcemaps":"^1.5.2","gulp-uglify":"^1.4.1","gulp-util":"^3.0.6","jaguarjs-jsdoc":"git+https://github.com/davidshimjs/jaguarjs-jsdoc.git",jsdoc:"^3.3.2","jshint-summary":"^0.4.0",minimist:"^1.2.0",mocha:"^2.3.2","require-dir":"^0.3.0","run-sequence":"^1.1.2",testem:"^0.9.4","vinyl-buffer":"^1.0.0","vinyl-source-stream":"^1.1.0",watchify:"^3.4.0"},browserify:{transform:["brfs"]}}},{}],35:[function(t,e,r){function i(t){var e=document.createElement("div");e.style.width="100px",e.style.height="100px",e.style.position="absolute",e.style.top=0,e.style.left=0,e.style.zIndex=2,this.div=e,this.pool=[],this.renderId=0,this.debug=!1,this.renderer=t,this.children=[],this._onKeyDown=this._onKeyDown.bind(this),this._onMouseMove=this._onMouseMove.bind(this),this.isActive=!1,window.addEventListener("keydown",this._onKeyDown,!1)}var n=t("../core");Object.assign(n.DisplayObject.prototype,t("./accessibleTarget")),i.prototype.constructor=i,e.exports=i,i.prototype.activate=function(){this.isActive||(this.isActive=!0,window.document.addEventListener("mousemove",this._onMouseMove,!0),window.removeEventListener("keydown",this._onKeyDown,!1),this.renderer.on("postrender",this.update,this),this.renderer.view.parentNode.appendChild(this.div))},i.prototype.deactivate=function(){this.isActive&&(this.isActive=!1,window.document.removeEventListener("mousemove",this._onMouseMove),window.addEventListener("keydown",this._onKeyDown,!1),this.renderer.off("postrender",this.update),this.div.parentNode.removeChild(this.div))},i.prototype.updateAccessibleObjects=function(t){if(t.visible){t.accessible&&t.interactive&&(t._accessibleActive||this.addChild(t),t.renderId=this.renderId);for(var e=t.children,r=e.length-1;r>=0;r--)this.updateAccessibleObjects(e[r])}},i.prototype.update=function(){this.updateAccessibleObjects(this.renderer._lastObjectRendered);var t=this.renderer.view.getBoundingClientRect(),e=t.width/this.renderer.width,r=t.height/this.renderer.height,i=this.div;i.style.left=t.left+"px",i.style.top=t.top+"px",i.style.width=this.renderer.width+"px",i.style.height=this.renderer.height+"px";for(var o=0;othis.renderer.width&&(t.width=this.renderer.width-t.x),t.y+t.height>this.renderer.height&&(t.height=this.renderer.height-t.y)},i.prototype.addChild=function(t){var e=this.pool.pop();e||(e=document.createElement("button"),e.style.width="100px",e.style.height="100px",e.style.backgroundColor=this.debug?"rgba(255,0,0,0.5)":"transparent",e.style.position="absolute",e.style.zIndex=2,e.style.borderStyle="none",e.addEventListener("click",this._onClick.bind(this)),e.addEventListener("focus",this._onFocus.bind(this)),e.addEventListener("focusout",this._onFocusOut.bind(this))),e.title=t.accessibleTitle||"displayObject "+this.tabIndex,t._accessibleActive=!0,t._accessibleDiv=e,e.displayObject=t,this.children.push(t),this.div.appendChild(t._accessibleDiv),t._accessibleDiv.tabIndex=t.tabIndex},i.prototype._onClick=function(t){var e=this.renderer.plugins.interaction;e.dispatchEvent(t.target.displayObject,"click",e.eventData)},i.prototype._onFocus=function(t){var e=this.renderer.plugins.interaction;e.dispatchEvent(t.target.displayObject,"mouseover",e.eventData)},i.prototype._onFocusOut=function(t){var e=this.renderer.plugins.interaction;e.dispatchEvent(t.target.displayObject,"mouseout",e.eventData)},i.prototype._onKeyDown=function(t){9===t.keyCode&&this.activate()},i.prototype._onMouseMove=function(){this.deactivate()},i.prototype.destroy=function(){this.div=null;for(var t=0;t1)for(var r=0;e>r;r++)this.addChild(arguments[r]);else t.parent&&t.parent.removeChild(t),t.parent=this,this.children.push(t),this.onChildrenChange(this.children.length-1),t.emit("added",this);return t},i.prototype.addChildAt=function(t,e){if(e>=0&&e<=this.children.length)return t.parent&&t.parent.removeChild(t),t.parent=this,this.children.splice(e,0,t),this.onChildrenChange(e),t.emit("added",this),t;throw new Error(t+"addChildAt: The index "+e+" supplied is out of bounds "+this.children.length)},i.prototype.swapChildren=function(t,e){if(t!==e){var r=this.getChildIndex(t),i=this.getChildIndex(e);if(0>r||0>i)throw new Error("swapChildren: Both the supplied DisplayObjects must be children of the caller.");this.children[r]=e,this.children[i]=t,this.onChildrenChange(i>r?r:i)}},i.prototype.getChildIndex=function(t){var e=this.children.indexOf(t);if(-1===e)throw new Error("The supplied DisplayObject must be a child of the caller");return e},i.prototype.setChildIndex=function(t,e){if(0>e||e>=this.children.length)throw new Error("The supplied index is out of bounds");var r=this.getChildIndex(t);o.removeItems(this.children,r,1),this.children.splice(e,0,t),this.onChildrenChange(e)},i.prototype.getChildAt=function(t){if(0>t||t>=this.children.length)throw new Error("getChildAt: Supplied index "+t+" does not exist in the child list, or the supplied DisplayObject is not a child of the caller");return this.children[t]},i.prototype.removeChild=function(t){var e=arguments.length;if(e>1)for(var r=0;e>r;r++)this.removeChild(arguments[r]);else{var i=this.children.indexOf(t);if(-1===i)return;t.parent=null,o.removeItems(this.children,i,1),this.onChildrenChange(i),t.emit("removed",this)}return t},i.prototype.removeChildAt=function(t){var e=this.getChildAt(t);return e.parent=null,o.removeItems(this.children,t,1),this.onChildrenChange(t),e.emit("removed",this),e},i.prototype.removeChildren=function(t,e){var r,i,n=t||0,o="number"==typeof e?e:this.children.length,s=o-n;if(s>0&&o>=s){for(r=this.children.splice(n,s),i=0;it;++t)this.children[t].updateTransform();this.dirtyTransform=!1}},i.prototype.containerUpdateTransform=i.prototype.updateTransform,i.prototype.getBounds=function(){if(!this._currentBounds){if(0===this.children.length)return n.Rectangle.EMPTY;for(var t,e,r,i=1/0,o=1/0,s=-(1/0),a=-(1/0),h=!1,u=0,l=this.children.length;l>u;++u){var c=this.children[u];c.visible&&(h=!0,t=this.children[u].getBounds(),i=ie?s:e,a=a>r?a:r)}if(!h)return n.Rectangle.EMPTY;var p=this._bounds;p.x=i,p.y=o,p.width=s-i,p.height=a-o,this._currentBounds=p}return this._currentBounds},i.prototype.containerGetBounds=i.prototype.getBounds,i.prototype.getLocalBounds=function(){var t=this.worldTransform;this.worldTransform=n.Matrix.IDENTITY;for(var e=0,r=this.children.length;r>e;++e)this.children[e].updateTransform();return this.worldTransform=t,this._currentBounds=null,this.getBounds(n.Matrix.IDENTITY)},i.prototype.renderWebGL=function(t){if(this.visible&&!(this.worldAlpha<=0)&&this.renderable){var e,r;if(this._mask||this._filters){for(t.currentRenderer.flush(),this._filters&&this._filters.length&&t.filterManager.pushFilter(this,this._filters),this._mask&&t.maskManager.pushMask(this,this._mask),t.currentRenderer.start(),this._renderWebGL(t),e=0,r=this.children.length;r>e;e++)this.children[e].renderWebGL(t);t.currentRenderer.flush(),this._mask&&t.maskManager.popMask(this,this._mask),this._filters&&t.filterManager.popFilter(),t.currentRenderer.start()}else for(this._renderWebGL(t),e=0,r=this.children.length;r>e;++e)this.children[e].renderWebGL(t)}},i.prototype._renderWebGL=function(t){},i.prototype._renderCanvas=function(t){},i.prototype.renderCanvas=function(t){if(this.visible&&!(this.alpha<=0)&&this.renderable){this._mask&&t.maskManager.pushMask(this._mask,t),this._renderCanvas(t);for(var e=0,r=this.children.length;r>e;++e)this.children[e].renderCanvas(t);this._mask&&t.maskManager.popMask(t)}},i.prototype.destroy=function(t){if(s.prototype.destroy.call(this),t)for(var e=0,r=this.children.length;r>e;++e)this.children[e].destroy(t);this.removeChildren(),this.children=null}},{"../math":55,"../textures/RenderTexture":98,"../utils":105,"./DisplayObject":40}],40:[function(t,e,r){function i(){s.call(this),this.position=new n.Point,this._position=new u(this),this.scale=new n.Point(1,1),this.pivot=new n.Point(0,0),this.skew=new n.Point(0,0),this._rotation=0,this.alpha=1,this.visible=!0,this.renderable=!0,this.parent=null,this.worldAlpha=1,this.worldTransform=new n.Matrix,this.localTransform=new n.Matrix,this.filterArea=null,this._sr=0,this._cr=1,this._bounds=new n.Rectangle(0,0,1,1),this._currentBounds=null,this._mask=null,this.dirtyTransform=!0}var n=t("../math"),o=t("../textures/RenderTexture"),s=t("eventemitter3"),a=(t("../const"),new n.Matrix),h={worldTransform:new n.Matrix,worldAlpha:1,children:[]};i.prototype=Object.create(s.prototype),i.prototype.constructor=i,e.exports=i;var u=function(t){this.doc=t,this.x=0,this.y=0};Object.defineProperties(u.prototype,{x:{get:function(){return this.doc.position.x},set:function(t){this.doc.position.x=t,this.doc.dirtyTransform=!0}},y:{get:function(){return this.doc.posiiton.y},set:function(t){this.doc.position.y=t,this.doc.dirtyTransform=!0}}}),Object.defineProperties(i.prototype,{x:{get:function(){return this.position.x},set:function(t){this.position.x=t,this.dirtyTransform=!0}},y:{get:function(){return this.position.y},set:function(t){this.position.y=t,this.dirtyTransform=!0}},scaleX:{get:function(){return this.scale.x},set:function(t){this.scale.x=t,this.dirtyTransform=!0}},scaleY:{get:function(){return this.scale.y},set:function(t){this.scale.y=t,this.dirtyTransform=!0}},rotation:{get:function(){return this._rotation},set:function(t){this._rotation=t,this.dirtyTransform=!0,this._sr=Math.sin(t),this._cr=Math.cos(t)}},scaleY:{get:function(){return this.scale.y},set:function(t){this.scale.y=t,this.dirtyTransform=!0}},worldVisible:{get:function(){var t=this;do{if(!t.visible)return!1;t=t.parent}while(t);return!0}},mask:{get:function(){return this._mask},set:function(t){this._mask&&(this._mask.renderable=!0),this._mask=t,this._mask&&(this._mask.renderable=!1)}},filters:{get:function(){return this._filters&&this._filters.slice()},set:function(t){this._filters=t&&t.slice()}}}),i.prototype.updateTransform=function(){var t=this.parent.worldTransform,e=this.worldTransform,r=this.localTransform;this.dirtyTransform&&(r.a=this._cr*this.scale.x,r.b=this._sr*this.scale.x,r.c=-this._sr*this.scale.y,r.d=this._cr*this.scale.y,r.tx=this.position.x-(this.pivot.x*r.a+this.pivot.y*r.c),r.ty=this.position.y-(this.pivot.x*r.b+this.pivot.y*r.d)),(this.dirtyTransform||this.parent.dirtyTransform)&&(e.a=r.a*t.a+r.b*t.c,e.b=r.a*t.b+r.b*t.d,e.c=r.c*t.a+r.d*t.c,e.d=r.c*t.b+r.d*t.d,e.tx=r.tx*t.a+r.ty*t.c+t.tx,e.ty=r.tx*t.b+r.ty*t.d+t.ty,this._currentBounds=null),this.worldAlpha=this.alpha*this.parent.worldAlpha},i.prototype.displayObjectUpdateTransform=i.prototype.updateTransform,i.prototype.getBounds=function(t){return n.Rectangle.EMPTY},i.prototype.getLocalBounds=function(){return this.getBounds(n.Matrix.IDENTITY)},i.prototype.toGlobal=function(t){return this.parent?this.displayObjectUpdateTransform():(this.parent=h,this.displayObjectUpdateTransform(),this.parent=null),this.worldTransform.apply(t)},i.prototype.toLocal=function(t,e,r){return e&&(t=e.toGlobal(t)),this.parent?this.displayObjectUpdateTransform():(this.parent=h,this.displayObjectUpdateTransform(),this.parent=null),this.worldTransform.applyInverse(t,r)},i.prototype.renderWebGL=function(t){},i.prototype.renderCanvas=function(t){},i.prototype.generateTexture=function(t,e,r){var i=this.getLocalBounds(),n=new o(t,0|i.width,0|i.height,e,r);return a.tx=-i.x,a.ty=-i.y,n.render(this,a),n},i.prototype.setParent=function(t){if(!t||!t.addChild)throw new Error("setParent: Argument must be a Container");return t.addChild(this),t},i.prototype.setTransform=function(t,e,r,i,n,o,s,a,h){return this.position.x=t||0,this.position.y=e||0,this.scale.x=r?r:1,this.scale.y=i?i:1,this.rotation=n||0,this.skew.x=o||0,this.skew.y=s||0,this.pivot.x=a||0,this.pivot.y=h||0,this.dirtyTransform=!0,this},i.prototype.destroy=function(){this.position=null,this.scale=null,this.pivot=null,this.skew=null,this.parent=null,this._bounds=null,this._currentBounds=null,this._mask=null,this.worldTransform=null,this.filterArea=null}},{"../const":38,"../math":55,"../textures/RenderTexture":98,eventemitter3:25}],41:[function(t,e,r){function i(){n.call(this),this.fillAlpha=1,this.lineWidth=0,this.lineColor=0,this.graphicsData=[],this.tint=16777215,this._prevTint=16777215,this.blendMode=l.BLEND_MODES.NORMAL,this.currentPath=null,this._webGL={},this.isMask=!1,this.boundsPadding=0,this._localBounds=new u.Rectangle(0,0,1,1),this.dirty=!0,this.glDirty=!1,this.boundsDirty=!0,this.cachedSpriteDirty=!1}var n=t("../display/Container"),o=t("../textures/Texture"),s=t("../renderers/canvas/utils/CanvasBuffer"),a=t("../renderers/canvas/utils/CanvasGraphics"),h=t("./GraphicsData"),u=t("../math"),l=t("../const"),c=new u.Point;i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.clone=function(){var t=new i;t.renderable=this.renderable,t.fillAlpha=this.fillAlpha,t.lineWidth=this.lineWidth,t.lineColor=this.lineColor,t.tint=this.tint,t.blendMode=this.blendMode,t.isMask=this.isMask,t.boundsPadding=this.boundsPadding,t.dirty=!0,t.glDirty=!0,t.cachedSpriteDirty=this.cachedSpriteDirty;for(var e=0;e=c;++c)l=c/s,n=h+(t-h)*l,o=u+(e-u)*l,a.push(n+(t+(r-t)*l-n)*l,o+(e+(i-e)*l-o)*l);return this.dirty=this.boundsDirty=!0,this},i.prototype.bezierCurveTo=function(t,e,r,i,n,o){this.currentPath?0===this.currentPath.shape.points.length&&(this.currentPath.shape.points=[0,0]):this.moveTo(0,0);for(var s,a,h,u,l,c=20,p=this.currentPath.shape.points,d=p[p.length-2],f=p[p.length-1],v=0,g=1;c>=g;++g)v=g/c,s=1-v,a=s*s,h=a*s,u=v*v,l=u*v,p.push(h*d+3*a*v*t+3*s*u*r+l*n,h*f+3*a*v*e+3*s*u*i+l*o);return this.dirty=this.boundsDirty=!0,this},i.prototype.arcTo=function(t,e,r,i,n){this.currentPath?0===this.currentPath.shape.points.length&&this.currentPath.shape.points.push(t,e):this.moveTo(t,e);var o=this.currentPath.shape.points,s=o[o.length-2],a=o[o.length-1],h=a-e,u=s-t,l=i-e,c=r-t,p=Math.abs(h*c-u*l);if(1e-8>p||0===n)(o[o.length-2]!==t||o[o.length-1]!==e)&&o.push(t,e);else{var d=h*h+u*u,f=l*l+c*c,v=h*l+u*c,g=n*Math.sqrt(d)/p,m=n*Math.sqrt(f)/p,y=g*v/d,x=m*v/f,b=g*c+m*u,_=g*l+m*h,T=u*(m+y),E=h*(m+y),S=c*(g+x),w=l*(g+x),C=Math.atan2(E-_,T-b),A=Math.atan2(w-_,S-b);this.arc(b+t,_+e,n,C,A,u*l>c*h)}return this.dirty=this.boundsDirty=!0,this},i.prototype.arc=function(t,e,r,i,n,o){if(o=o||!1,i===n)return this;!o&&i>=n?n+=2*Math.PI:o&&n>=i&&(i+=2*Math.PI);var s=o?-1*(i-n):n-i,a=40*Math.ceil(Math.abs(s)/(2*Math.PI));if(0===s)return this;var h=t+Math.cos(i)*r,u=e+Math.sin(i)*r;this.currentPath?this.currentPath.shape.points.push(h,u):this.moveTo(h,u);for(var l=this.currentPath.shape.points,c=s/(2*a),p=2*c,d=Math.cos(c),f=Math.sin(c),v=a-1,g=v%1/v,m=0;v>=m;m++){var y=m+g*m,x=c+i+p*y,b=Math.cos(x),_=-Math.sin(x);l.push((d*b+f*_)*r+t,(d*-_+f*b)*r+e)}return this.dirty=this.boundsDirty=!0,this},i.prototype.beginFill=function(t,e){return this.filling=!0,this.fillColor=t||0,this.fillAlpha=void 0===e?1:e,this.currentPath&&this.currentPath.shape.points.length<=2&&(this.currentPath.fill=this.filling,this.currentPath.fillColor=this.fillColor,this.currentPath.fillAlpha=this.fillAlpha),this},i.prototype.endFill=function(){return this.filling=!1,this.fillColor=null,this.fillAlpha=1,this},i.prototype.drawRect=function(t,e,r,i){return this.drawShape(new u.Rectangle(t,e,r,i)),this},i.prototype.drawRoundedRect=function(t,e,r,i,n){return this.drawShape(new u.RoundedRectangle(t,e,r,i,n)),this},i.prototype.drawCircle=function(t,e,r){return this.drawShape(new u.Circle(t,e,r)),this},i.prototype.drawEllipse=function(t,e,r,i){return this.drawShape(new u.Ellipse(t,e,r,i)),this},i.prototype.drawPolygon=function(t){var e=t,r=!0;if(e instanceof u.Polygon&&(r=e.closed,e=e.points),!Array.isArray(e)){e=new Array(arguments.length);for(var i=0;ig?g:S,S=S>y?y:S,S=S>b?b:S,w=w>m?m:w,w=w>x?x:w,w=w>_?_:w,T=g>T?g:T,T=y>T?y:T,T=b>T?b:T,E=m>E?m:E,E=x>E?x:E,E=_>E?_:E,this._bounds.x=S,this._bounds.width=T-S,this._bounds.y=w,this._bounds.height=E-w,this._currentBounds=this._bounds}return this._currentBounds},i.prototype.containsPoint=function(t){this.worldTransform.applyInverse(t,c); +for(var e=this.graphicsData,r=0;rs?s:t,e=s+h>e?s+h:e,r=r>a?a:r,i=a+u>i?a+u:i;else if(d===l.SHAPES.CIRC)s=n.x,a=n.y,h=n.radius+f/2,u=n.radius+f/2,t=t>s-h?s-h:t,e=s+h>e?s+h:e,r=r>a-u?a-u:r,i=a+u>i?a+u:i;else if(d===l.SHAPES.ELIP)s=n.x,a=n.y,h=n.width+f/2,u=n.height+f/2,t=t>s-h?s-h:t,e=s+h>e?s+h:e,r=r>a-u?a-u:r,i=a+u>i?a+u:i;else{o=n.points;for(var v=0;vs-f?s-f:t,e=s+f>e?s+f:e,r=r>a-f?a-f:r,i=a+f>i?a+f:i}}else t=0,e=0,r=0,i=0;var g=this.boundsPadding;this._localBounds.x=t-g,this._localBounds.width=e-t+2*g,this._localBounds.y=r-g,this._localBounds.height=i-r+2*g},i.prototype.drawShape=function(t){this.currentPath&&this.currentPath.shape.points.length<=2&&this.graphicsData.pop(),this.currentPath=null;var e=new h(this.lineWidth,this.lineColor,this.lineAlpha,this.fillColor,this.fillAlpha,this.filling,t);return this.graphicsData.push(e),e.type===l.SHAPES.POLY&&(e.shape.closed=e.shape.closed||this.filling,this.currentPath=e),this.dirty=this.boundsDirty=!0,e},i.prototype.destroy=function(){n.prototype.destroy.apply(this,arguments);for(var t=0;ts;s++)e=o.data[s],1===o.data[s].mode||(shader=this.primitiveShader,r.bindShader(shader),shader.uniforms.translationMatrix=t.worldTransform.toArray(!0),shader.uniforms.tint=n.hex2rgb(t.tint),shader.uniforms.alpha=t.worldAlpha,i.bindBuffer(i.ARRAY_BUFFER,e.buffer),shader=this.primitiveShader,shader.attributes.aVertexPosition.pointer(i.FLOAT,!1,24,0),shader.attributes.aColor.pointer(i.FLOAT,!1,24,8),i.enableVertexAttribArray(shader.attributes.aVertexPosition.location),i.enableVertexAttribArray(shader.attributes.aColor.location),i.bindBuffer(i.ELEMENT_ARRAY_BUFFER,e.indexBuffer),i.drawElements(i.TRIANGLE_STRIP,e.indices.length,i.UNSIGNED_SHORT,0)),r.drawCount++},i.prototype.updateGraphics=function(t){var e=this.renderer.gl,r=t._webGL[e.id];r||(r=t._webGL[e.id]={lastIndex:0,data:[],gl:e}),t.dirty=!1;var i;if(t.clearDirty){for(t.clearDirty=!1,i=0;i=6)if(a.points.length<2*this.maximumSimplePolySize){s=this.switchMode(r,0);var h=buildPoly(a,s);h||(s=this.switchMode(r,1),buildComplexPoly(a,s))}else s=this.switchMode(r,1),buildComplexPoly(a,s);a.lineWidth>0&&(s=this.switchMode(r,0),l(a,s))}else s=this.switchMode(r,0),a.type===o.SHAPES.RECT?buildRectangle(a,s):a.type===o.SHAPES.CIRC||a.type===o.SHAPES.ELIP?buildCircle(a,s):a.type===o.SHAPES.RREC&&buildRoundedRectangle(a,s);r.lastIndex++}for(i=0;i32e4||r.mode!==e||1===e)&&(r=this.graphicsDataPool.pop()||new h(t.gl),r.mode=e,t.data.push(r))):(r=this.graphicsDataPool.pop()||new h(t.gl),r.mode=e,t.data.push(r)),r.dirty=!0,r}},{"../../const":38,"../../math":55,"../../renderers/webgl/WebGLRenderer":72,"../../renderers/webgl/utils/ObjectRenderer":87,"../../utils":105,"./WebGLGraphicsData":44,"./shaders/PrimitiveShader":45,"./utils/buildCircle":46,"./utils/buildComplexPoly":47,"./utils/buildLine":48,"./utils/buildPoly":49,"./utils/buildRectangle":50,"./utils/buildRoundedRectangle":51,earcut:24}],44:[function(t,e,r){function i(t){this.gl=t,this.color=[0,0,0],this.points=[],this.indices=[],this.buffer=t.createBuffer(),this.indexBuffer=t.createBuffer(),this.mode=1,this.alpha=1,this.dirty=!0,this.glPoints=null,this.glIndices=null}i.prototype.constructor=i,e.exports=i,i.prototype.reset=function(){this.points.length=0,this.indices.length=0},i.prototype.upload=function(){var t=this.gl;this.glPoints=new Float32Array(this.points),t.bindBuffer(t.ARRAY_BUFFER,this.buffer),t.bufferData(t.ARRAY_BUFFER,this.glPoints,t.STATIC_DRAW),this.glIndices=new Uint16Array(this.indices),t.bindBuffer(t.ELEMENT_ARRAY_BUFFER,this.indexBuffer),t.bufferData(t.ELEMENT_ARRAY_BUFFER,this.glIndices,t.STATIC_DRAW),this.dirty=!1},i.prototype.destroy=function(){this.color=null,this.points=null,this.indices=null,this.gl.deleteBuffer(this.buffer),this.gl.deleteBuffer(this.indexBuffer),this.gl=null,this.buffer=null,this.indexBuffer=null,this.glPoints=null,this.glIndices=null}},{}],45:[function(t,e,r){function i(t){n.call(this,t,["attribute vec2 aVertexPosition;","attribute vec4 aColor;","uniform mat3 translationMatrix;","uniform mat3 projectionMatrix;","uniform float alpha;","uniform float flipY;","uniform vec3 tint;","varying vec4 vColor;","void main(void){"," gl_Position = vec4((projectionMatrix * translationMatrix * vec3(aVertexPosition, 1.0)).xy, 0.0, 1.0);"," vColor = aColor * vec4(tint * alpha, alpha);","}"].join("\n"),["precision mediump float;","varying vec4 vColor;","void main(void){"," gl_FragColor = vColor;","}"].join("\n"))}var n=t("pixi-gl-core").GLShader;i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i},{"pixi-gl-core":1}],46:[function(t,e,r){var i=t("./buildLine"),n=t("../../../utils"),o=function(t,e){var r,o,s=t.shape,a=s.x,h=s.y;t.type===CONST.SHAPES.CIRC?(r=s.radius,o=s.radius):(r=s.width,o=s.height);var u=Math.floor(30*Math.sqrt(s.radius))||Math.floor(15*Math.sqrt(s.width+s.height)),l=2*Math.PI/u,c=0;if(t.fill){var p=n.hex2rgb(t.fillColor),d=t.fillAlpha,f=p[0]*d,v=p[1]*d,g=p[2]*d,m=e.points,y=e.indices,x=m.length/6;for(y.push(x),c=0;u+1>c;c++)m.push(a,h,f,v,g,d),m.push(a+Math.sin(l*c)*r,h+Math.cos(l*c)*o,f,v,g,d),y.push(x++,x++);y.push(x-1)}if(t.lineWidth){var b=t.points;for(t.points=[],c=0;u+1>c;c++)t.points.push(a+Math.sin(l*c)*r,h+Math.cos(l*c)*o);i(t,e),t.points=b}};e.exports=o},{"../../../utils":105,"./buildLine":48}],47:[function(t,e,r){var i=(t("./buildLine"),t("../../../utils")),n=function(t,e){var r=t.points.slice();if(!(r.length<6)){var n=e.indices;e.points=r,e.alpha=t.fillAlpha,e.color=i.hex2rgb(t.fillColor);for(var o,s,a=1/0,h=-(1/0),u=1/0,l=-(1/0),c=0;co?o:a,h=o>h?o:h,u=u>s?s:u,l=s>l?s:l;r.push(a,u,h,u,h,l,a,l);var p=r.length/2;for(c=0;p>c;c++)n.push(c)}};e.exports=n},{"../../../utils":105,"./buildLine":48}],48:[function(t,e,r){var i=t("../../../math"),n=t("../../../utils"),o=function(t,e){var r=0,o=t.points;if(0!==o.length){var s=new i.Point(o[0],o[1]),a=new i.Point(o[o.length-2],o[o.length-1]);if(s.x===a.x&&s.y===a.y){o=o.slice(),o.pop(),o.pop(),a=new i.Point(o[o.length-2],o[o.length-1]);var h=a.x+.5*(s.x-a.x),u=a.y+.5*(s.y-a.y);o.unshift(h,u),o.push(h,u)}var l,c,p,d,f,v,g,m,y,x,b,_,T,E,S,w,C,A,M,R,O,P,D,F=e.points,L=e.indices,B=o.length/2,I=o.length,N=F.length/6,U=t.lineWidth/2,k=n.hex2rgb(t.lineColor),j=t.lineAlpha,G=k[0]*j,X=k[1]*j,Y=k[2]*j;for(p=o[0],d=o[1],f=o[2],v=o[3],y=-(d-v),x=p-f,D=Math.sqrt(y*y+x*x),y/=D,x/=D,y*=U,x*=U,F.push(p-y,d-x,G,X,Y,j),F.push(p+y,d+x,G,X,Y,j),r=1;B-1>r;r++)p=o[2*(r-1)],d=o[2*(r-1)+1],f=o[2*r],v=o[2*r+1],g=o[2*(r+1)],m=o[2*(r+1)+1],y=-(d-v),x=p-f,D=Math.sqrt(y*y+x*x),y/=D,x/=D,y*=U,x*=U,b=-(v-m),_=f-g,D=Math.sqrt(b*b+_*_),b/=D,_/=D,b*=U,_*=U,S=-x+d-(-x+v),w=-y+f-(-y+p),C=(-y+p)*(-x+v)-(-y+f)*(-x+d),A=-_+m-(-_+v),M=-b+f-(-b+g),R=(-b+g)*(-_+v)-(-b+f)*(-_+m),O=S*M-A*w,Math.abs(O)<.1?(O+=10.1,F.push(f-y,v-x,G,X,Y,j),F.push(f+y,v+x,G,X,Y,j)):(l=(w*R-M*C)/O,c=(A*C-S*R)/O,P=(l-f)*(l-f)+(c-v)*(c-v),P>19600?(T=y-b,E=x-_,D=Math.sqrt(T*T+E*E),T/=D,E/=D,T*=U,E*=U,F.push(f-T,v-E),F.push(G,X,Y,j),F.push(f+T,v+E),F.push(G,X,Y,j),F.push(f-T,v-E),F.push(G,X,Y,j),I++):(F.push(l,c),F.push(G,X,Y,j),F.push(f-(l-f),v-(c-v)),F.push(G,X,Y,j)));for(p=o[2*(B-2)],d=o[2*(B-2)+1],f=o[2*(B-1)],v=o[2*(B-1)+1],y=-(d-v),x=p-f,D=Math.sqrt(y*y+x*x),y/=D,x/=D,y*=U,x*=U,F.push(f-y,v-x),F.push(G,X,Y,j),F.push(f+y,v+x),F.push(G,X,Y,j),L.push(N),r=0;I>r;r++)L.push(N++);L.push(N-1)}};e.exports=o},{"../../../math":55,"../../../utils":105}],49:[function(t,e,r){var i=t("../../../utils"),n=function(t,e){var r=t.points;if(!(r.length<6)){var n=e.points,o=e.indices,s=r.length/2,a=i.hex2rgb(t.fillColor),h=t.fillAlpha,u=a[0]*h,l=a[1]*h,c=a[2]*h,p=earcut(r,null,2);if(!p)return!1;var d=n.length/6,f=0;for(f=0;ff;f++)n.push(r[2*f],r[2*f+1],u,l,c,h);return!0}};e.exports=n},{"../../../utils":105}],50:[function(t,e,r){var i=t("./buildLine"),n=t("../../../utils"),o=function(t,e){var r=t.shape,o=r.x,s=r.y,a=r.width,h=r.height;if(t.fill){var u=n.hex2rgb(t.fillColor),l=t.fillAlpha,c=u[0]*l,p=u[1]*l,d=u[2]*l,f=e.points,v=e.indices,g=f.length/6;f.push(o,s),f.push(c,p,d,l),f.push(o+a,s),f.push(c,p,d,l),f.push(o,s+h),f.push(c,p,d,l),f.push(o+a,s+h),f.push(c,p,d,l),v.push(g,g,g+1,g+2,g+3,g+3)}if(t.lineWidth){var m=t.points;t.points=[o,s,o+a,s,o+a,s+h,o,s+h,o,s],i(t,e),t.points=m}};e.exports=o},{"../../../utils":105,"./buildLine":48}],51:[function(t,e,r){var i=(t("./buildLine"),t("../../../utils"));buildRoundedRectangle=function(t,e){var r=t.shape,n=r.x,o=r.y,s=r.width,a=r.height,h=r.radius,u=[];if(u.push(n,o+h),this.quadraticBezierCurve(n,o+a-h,n,o+a,n+h,o+a,u),this.quadraticBezierCurve(n+s-h,o+a,n+s,o+a,n+s,o+a-h,u),this.quadraticBezierCurve(n+s,o+h,n+s,o,n+s-h,o,u),this.quadraticBezierCurve(n+h,o,n,o,n,o+h+1e-10,u),t.fill){var l=i.hex2rgb(t.fillColor),c=t.fillAlpha,p=l[0]*c,d=l[1]*c,f=l[2]*c,v=e.points,g=e.indices,m=v.length/6,y=earcut(u,null,2),x=0;for(x=0;x=m;m++)g=m/f,h=a(t,r,g),u=a(e,i,g),l=a(r,n,g),c=a(i,o,g),p=a(h,l,g),d=a(u,c,g),v.push(p,d);return v},e.exports=buildRoundedRectangle},{"../../../utils":105,"./buildLine":48}],52:[function(t,e,r){var i=e.exports=Object.assign(t("./const"),t("./math"),{utils:t("./utils"),ticker:t("./ticker"),DisplayObject:t("./display/DisplayObject"),Container:t("./display/Container"),Sprite:t("./sprites/Sprite"),ParticleContainer:t("./particles/ParticleContainer"),SpriteRenderer:t("./sprites/webgl/SpriteRenderer"),ParticleRenderer:t("./particles/webgl/ParticleRenderer"),Text:t("./text/Text"),Graphics:t("./graphics/Graphics"),GraphicsData:t("./graphics/GraphicsData"),GraphicsRenderer:t("./graphics/webgl/GraphicsRenderer"),Texture:t("./textures/Texture"),BaseTexture:t("./textures/BaseTexture"),RenderTexture:t("./textures/RenderTexture"),VideoBaseTexture:t("./textures/VideoBaseTexture"),TextureUvs:t("./textures/TextureUvs"),CanvasRenderer:t("./renderers/canvas/CanvasRenderer"),CanvasGraphics:t("./renderers/canvas/utils/CanvasGraphics"),CanvasBuffer:t("./renderers/canvas/utils/CanvasBuffer"),WebGLRenderer:t("./renderers/webgl/WebGLRenderer"),WebGLManager:t("./renderers/webgl/managers/WebGLManager"),ShaderManager:t("./renderers/webgl/managers/ShaderManager"),Shader:t("./renderers/webgl/shaders/Shader"),ObjectRenderer:t("./renderers/webgl/utils/ObjectRenderer"),RenderTarget:t("./renderers/webgl/utils/RenderTarget"),AbstractFilter:t("./renderers/webgl/filters/AbstractFilter"),FXAAFilter:t("./renderers/webgl/filters/FXAAFilter"),SpriteMaskFilter:t("./renderers/webgl/filters/SpriteMaskFilter"),glCore:t("pixi-gl-core"),autoDetectRenderer:function(t,e,r,n){return t=t||800,e=e||600,!n&&i.utils.isWebGLSupported()?new i.WebGLRenderer(t,e,r):new i.CanvasRenderer(t,e,r)}})},{"./const":38,"./display/Container":39,"./display/DisplayObject":40,"./graphics/Graphics":41,"./graphics/GraphicsData":42,"./graphics/webgl/GraphicsRenderer":43,"./math":55,"./particles/ParticleContainer":61,"./particles/webgl/ParticleRenderer":63,"./renderers/canvas/CanvasRenderer":66,"./renderers/canvas/utils/CanvasBuffer":67,"./renderers/canvas/utils/CanvasGraphics":68,"./renderers/webgl/WebGLRenderer":72,"./renderers/webgl/filters/AbstractFilter":73,"./renderers/webgl/filters/FXAAFilter":74,"./renderers/webgl/filters/SpriteMaskFilter":75,"./renderers/webgl/managers/ShaderManager":79,"./renderers/webgl/managers/WebGLManager":81,"./renderers/webgl/shaders/Shader":84,"./renderers/webgl/utils/ObjectRenderer":87,"./renderers/webgl/utils/RenderTarget":89,"./sprites/Sprite":93,"./sprites/webgl/SpriteRenderer":94,"./text/Text":96,"./textures/BaseTexture":97,"./textures/RenderTexture":98,"./textures/Texture":99,"./textures/TextureUvs":100,"./textures/VideoBaseTexture":101,"./ticker":103,"./utils":105,"pixi-gl-core":1}],53:[function(t,e,r){function i(){this.a=1,this.b=0,this.c=0,this.d=1,this.tx=0,this.ty=0}var n=t("./Point");i.prototype.constructor=i,e.exports=i,i.prototype.fromArray=function(t){this.a=t[0],this.b=t[1],this.c=t[3],this.d=t[4],this.tx=t[2],this.ty=t[5]},i.prototype.set=function(t,e,r,i,n,o){return this.a=t,this.b=e,this.c=r,this.d=i,this.tx=n,this.ty=o,this},i.prototype.toArray=function(t,e){this.array||(this.array=new Float32Array(9));var r=e||this.array;return t?(r[0]=this.a,r[1]=this.b,r[2]=0,r[3]=this.c,r[4]=this.d,r[5]=0,r[6]=this.tx,r[7]=this.ty,r[8]=1):(r[0]=this.a,r[1]=this.c,r[2]=this.tx,r[3]=this.b,r[4]=this.d,r[5]=this.ty,r[6]=0,r[7]=0,r[8]=1),r},i.prototype.apply=function(t,e){e=e||new n;var r=t.x,i=t.y;return e.x=this.a*r+this.c*i+this.tx,e.y=this.b*r+this.d*i+this.ty,e},i.prototype.applyInverse=function(t,e){e=e||new n;var r=1/(this.a*this.d+this.c*-this.b),i=t.x,o=t.y;return e.x=this.d*r*i+-this.c*r*o+(this.ty*this.c-this.tx*this.d)*r,e.y=this.a*r*o+-this.b*r*i+(-this.ty*this.a+this.tx*this.b)*r,e},i.prototype.translate=function(t,e){return this.tx+=t,this.ty+=e,this},i.prototype.scale=function(t,e){return this.a*=t,this.d*=e,this.c*=t,this.b*=e,this.tx*=t,this.ty*=e,this},i.prototype.rotate=function(t){var e=Math.cos(t),r=Math.sin(t),i=this.a,n=this.c,o=this.tx;return this.a=i*e-this.b*r,this.b=i*r+this.b*e,this.c=n*e-this.d*r,this.d=n*r+this.d*e,this.tx=o*e-this.ty*r,this.ty=o*r+this.ty*e,this},i.prototype.append=function(t){var e=this.a,r=this.b,i=this.c,n=this.d;return this.a=t.a*e+t.b*i,this.b=t.a*r+t.b*n,this.c=t.c*e+t.d*i,this.d=t.c*r+t.d*n,this.tx=t.tx*e+t.ty*i+this.tx,this.ty=t.tx*r+t.ty*n+this.ty,this},i.prototype.setTransform=function(t,e,r,i,n,o,s,a,h){var u,l,c,p,d,f,v,g,m,y;return d=Math.sin(s),f=Math.cos(s),v=Math.cos(h),g=Math.sin(h),m=-Math.sin(a),y=Math.cos(a),u=f*n,l=d*n,c=-d*o,p=f*o,this.a=v*u+g*c,this.b=v*l+g*p,this.c=m*u+y*c,this.d=m*l+y*p,this.tx=t+(r*u+i*c),this.ty=e+(r*l+i*p),this},i.prototype.prepend=function(t){var e=this.tx;if(1!==t.a||0!==t.b||0!==t.c||1!==t.d){var r=this.a,i=this.c;this.a=r*t.a+this.b*t.c,this.b=r*t.b+this.b*t.d,this.c=i*t.a+this.d*t.c,this.d=i*t.b+this.d*t.d}return this.tx=e*t.a+this.ty*t.c+t.tx,this.ty=e*t.b+this.ty*t.d+t.ty,this},i.prototype.invert=function(){var t=this.a,e=this.b,r=this.c,i=this.d,n=this.tx,o=t*i-e*r;return this.a=i/o,this.b=-e/o,this.c=-r/o,this.d=t/o,this.tx=(r*this.ty-i*n)/o,this.ty=-(t*this.ty-e*n)/o,this},i.prototype.identity=function(){return this.a=1,this.b=0,this.c=0,this.d=1,this.tx=0,this.ty=0,this},i.prototype.clone=function(){var t=new i;return t.a=this.a,t.b=this.b,t.c=this.c,t.d=this.d,t.tx=this.tx,t.ty=this.ty,t},i.prototype.copy=function(t){return t.a=this.a,t.b=this.b,t.c=this.c,t.d=this.d,t.tx=this.tx,t.ty=this.ty,t},i.IDENTITY=new i,i.TEMP_MATRIX=new i},{"./Point":54}],54:[function(t,e,r){function i(t,e){this.x=t||0,this.y=e||0}i.prototype.constructor=i,e.exports=i,i.prototype.clone=function(){return new i(this.x,this.y)},i.prototype.copy=function(t){this.set(t.x,t.y)},i.prototype.equals=function(t){return t.x===this.x&&t.y===this.y},i.prototype.set=function(t,e){this.x=t||0,this.y=e||(0!==e?this.x:0)}},{}],55:[function(t,e,r){e.exports={Point:t("./Point"),Matrix:t("./Matrix"),Circle:t("./shapes/Circle"),Ellipse:t("./shapes/Ellipse"),Polygon:t("./shapes/Polygon"),Rectangle:t("./shapes/Rectangle"),RoundedRectangle:t("./shapes/RoundedRectangle")}},{"./Matrix":53,"./Point":54,"./shapes/Circle":56,"./shapes/Ellipse":57,"./shapes/Polygon":58,"./shapes/Rectangle":59,"./shapes/RoundedRectangle":60}],56:[function(t,e,r){function i(t,e,r){this.x=t||0,this.y=e||0,this.radius=r||0,this.type=o.SHAPES.CIRC}var n=t("./Rectangle"),o=t("../../const");i.prototype.constructor=i,e.exports=i,i.prototype.clone=function(){return new i(this.x,this.y,this.radius)},i.prototype.contains=function(t,e){if(this.radius<=0)return!1;var r=this.x-t,i=this.y-e,n=this.radius*this.radius;return r*=r,i*=i,n>=r+i},i.prototype.getBounds=function(){return new n(this.x-this.radius,this.y-this.radius,2*this.radius,2*this.radius)}},{"../../const":38,"./Rectangle":59}],57:[function(t,e,r){function i(t,e,r,i){this.x=t||0,this.y=e||0,this.width=r||0,this.height=i||0,this.type=o.SHAPES.ELIP}var n=t("./Rectangle"),o=t("../../const");i.prototype.constructor=i,e.exports=i,i.prototype.clone=function(){return new i(this.x,this.y,this.width,this.height)},i.prototype.contains=function(t,e){if(this.width<=0||this.height<=0)return!1;var r=(t-this.x)/this.width,i=(e-this.y)/this.height;return r*=r,i*=i,1>=r+i},i.prototype.getBounds=function(){return new n(this.x-this.width,this.y-this.height,this.width,this.height)}},{"../../const":38,"./Rectangle":59}],58:[function(t,e,r){function i(t){var e=t;if(!Array.isArray(e)){e=new Array(arguments.length);for(var r=0;rs;s++)i.push(e[s].x,e[s].y);e=i}this.closed=!0,this.points=e,this.type=o.SHAPES.POLY}var n=t("../Point"),o=t("../../const");i.prototype.constructor=i,e.exports=i,i.prototype.clone=function(){return new i(this.points.slice())},i.prototype.contains=function(t,e){for(var r=!1,i=this.points.length/2,n=0,o=i-1;i>n;o=n++){var s=this.points[2*n],a=this.points[2*n+1],h=this.points[2*o],u=this.points[2*o+1],l=a>e!=u>e&&(h-s)*(e-a)/(u-a)+s>t;l&&(r=!r)}return r}},{"../../const":38,"../Point":54}],59:[function(t,e,r){function i(t,e,r,i){this.x=t||0,this.y=e||0,this.width=r||0,this.height=i||0,this.type=n.SHAPES.RECT}var n=t("../../const");i.prototype.constructor=i,e.exports=i,i.EMPTY=new i(0,0,0,0),i.prototype.clone=function(){return new i(this.x,this.y,this.width,this.height)},i.prototype.contains=function(t,e){return this.width<=0||this.height<=0?!1:t>=this.x&&t=this.y&&e=this.x&&t<=this.x+this.width&&e>=this.y&&e<=this.y+this.height?!0:!1}},{"../../const":38}],61:[function(t,e,r){function i(t,e,r){n.call(this),r=r||15e3,t=t||15e3;var i=16384;r>i&&(r=i),r>t&&(r=t),this._properties=[!1,!0,!1,!1,!1],this._maxSize=t,this._batchSize=r,this._buffers=null,this._bufferToUpdate=0,this.interactiveChildren=!1,this.blendMode=o.BLEND_MODES.NORMAL,this.roundPixels=!0,this.setProperties(e)}var n=t("../display/Container"),o=t("../const");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.setProperties=function(t){t&&(this._properties[0]="scale"in t?!!t.scale:this._properties[0],this._properties[1]="position"in t?!!t.position:this._properties[1],this._properties[2]="rotation"in t?!!t.rotation:this._properties[2],this._properties[3]="uvs"in t?!!t.uvs:this._properties[3],this._properties[4]="alpha"in t?!!t.alpha:this._properties[4])},i.prototype.updateTransform=function(){this.displayObjectUpdateTransform()},i.prototype.renderWebGL=function(t){this.visible&&!(this.worldAlpha<=0)&&this.children.length&&this.renderable&&(t.setObjectRenderer(t.plugins.particle),t.plugins.particle.render(this))},i.prototype.onChildrenChange=function(t){var e=Math.floor(t/this._batchSize);er;r+=6,i+=4)this.indices[r+0]=i+0,this.indices[r+1]=i+1,this.indices[r+2]=i+2,this.indices[r+3]=i+0,this.indices[r+4]=i+2,this.indices[r+5]=i+3;this.shader=null,this.indexBuffer=null,this.properties=null,this.tempMatrix=new h.Matrix}var n=t("../../renderers/webgl/utils/ObjectRenderer"),o=t("../../renderers/webgl/WebGLRenderer"),s=t("./ParticleShader"),a=t("./ParticleBuffer"),h=t("../../math");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,o.registerPlugin("particle",i),i.prototype.onContextChange=function(){var t=this.renderer.gl;this.shader=new s(this.renderer.shaderManager),this.indexBuffer=t.createBuffer(),t.bindBuffer(t.ELEMENT_ARRAY_BUFFER,this.indexBuffer),t.bufferData(t.ELEMENT_ARRAY_BUFFER,this.indices,t.STATIC_DRAW),this.properties=[{attribute:this.shader.attributes.aVertexPosition,size:2,uploadFunction:this.uploadVertices,offset:0},{attribute:this.shader.attributes.aPositionCoord,size:2,uploadFunction:this.uploadPosition,offset:0},{attribute:this.shader.attributes.aRotation,size:1,uploadFunction:this.uploadRotation,offset:0},{attribute:this.shader.attributes.aTextureCoord,size:2,uploadFunction:this.uploadUvs,offset:0},{attribute:this.shader.attributes.aColor,size:1,uploadFunction:this.uploadAlpha,offset:0}]},i.prototype.start=function(){var t=this.renderer.gl;t.activeTexture(t.TEXTURE0),t.bindBuffer(t.ELEMENT_ARRAY_BUFFER,this.indexBuffer);var e=this.shader;this.renderer.shaderManager.setShader(e)},i.prototype.render=function(t){var e=t.children,r=e.length,i=t._maxSize,n=t._batchSize;if(0!==r){r>i&&(r=i),t._buffers||(t._buffers=this.generateBuffers(t)),this.renderer.blendModeManager.setBlendMode(t.blendMode);var o=this.renderer.gl,s=t.worldTransform.copy(this.tempMatrix);s.prepend(this.renderer.currentRenderTarget.projectionMatrix),o.uniformMatrix3fv(this.shader.uniforms.projectionMatrix._location,!1,s.toArray(!0)),o.uniform1f(this.shader.uniforms.uAlpha._location,t.worldAlpha);var a=e[0]._texture.baseTexture;if(a._glTextures[o.id])o.bindTexture(o.TEXTURE_2D,a._glTextures[o.id]);else{if(!this.renderer.updateTexture(a))return;t._properties[0]&&t._properties[3]||(t._bufferToUpdate=0)}for(var h=0,u=0;r>h;h+=n,u+=1){var l=r-h;l>n&&(l=n);var c=t._buffers[u];c.uploadDynamic(e,h,l),t._bufferToUpdate===u&&(c.uploadStatic(e,h,l),t._bufferToUpdate=u+1),c.bind(this.shader),o.drawElements(o.TRIANGLES,6*l,o.UNSIGNED_SHORT,0),this.renderer.drawCount++}}},i.prototype.generateBuffers=function(t){var e,r=this.renderer.gl,i=[],n=t._maxSize,o=t._batchSize,s=t._properties;for(e=0;n>e;e+=o)i.push(new a(r,this.properties,s,o));return i},i.prototype.uploadVertices=function(t,e,r,i,n,o){for(var s,a,h,u,l,c,p,d,f,v=0;r>v;v++)s=t[e+v],a=s._texture,u=s.scale.x,l=s.scale.y,a.trim?(h=a.trim,p=h.x-s.anchor.x*h.width,c=p+a.crop.width,f=h.y-s.anchor.y*h.height,d=f+a.crop.height):(c=a._frame.width*(1-s.anchor.x),p=a._frame.width*-s.anchor.x,d=a._frame.height*(1-s.anchor.y),f=a._frame.height*-s.anchor.y),i[o]=p*u,i[o+1]=f*l,i[o+n]=c*u,i[o+n+1]=f*l,i[o+2*n]=c*u,i[o+2*n+1]=d*l,i[o+3*n]=p*u,i[o+3*n+1]=d*l,o+=4*n},i.prototype.uploadPosition=function(t,e,r,i,n,o){for(var s=0;r>s;s++){var a=t[e+s].position;i[o]=a.x,i[o+1]=a.y,i[o+n]=a.x,i[o+n+1]=a.y,i[o+2*n]=a.x,i[o+2*n+1]=a.y,i[o+3*n]=a.x,i[o+3*n+1]=a.y,o+=4*n}},i.prototype.uploadRotation=function(t,e,r,i,n,o){for(var s=0;r>s;s++){var a=t[e+s].rotation;i[o]=a,i[o+n]=a,i[o+2*n]=a,i[o+3*n]=a,o+=4*n}},i.prototype.uploadUvs=function(t,e,r,i,n,o){for(var s=0;r>s;s++){var a=t[e+s]._texture._uvs;a?(i[o]=a.x0,i[o+1]=a.y0,i[o+n]=a.x1,i[o+n+1]=a.y1,i[o+2*n]=a.x2,i[o+2*n+1]=a.y2,i[o+3*n]=a.x3,i[o+3*n+1]=a.y3,o+=4*n):(i[o]=0,i[o+1]=0,i[o+n]=0,i[o+n+1]=0,i[o+2*n]=0,i[o+2*n+1]=0,i[o+3*n]=0,i[o+3*n+1]=0,o+=4*n)}},i.prototype.uploadAlpha=function(t,e,r,i,n,o){for(var s=0;r>s;s++){var a=t[e+s].alpha;i[o]=a,i[o+n]=a,i[o+2*n]=a,i[o+3*n]=a,o+=4*n}},i.prototype.destroy=function(){this.renderer.gl&&this.renderer.gl.deleteBuffer(this.indexBuffer),n.prototype.destroy.apply(this,arguments),this.shader.destroy(),this.indices=null,this.tempMatrix=null}},{"../../math":55,"../../renderers/webgl/WebGLRenderer":72,"../../renderers/webgl/utils/ObjectRenderer":87,"./ParticleBuffer":62,"./ParticleShader":64}],64:[function(t,e,r){function i(t){n.call(this,t,["attribute vec2 aVertexPosition;","attribute vec2 aTextureCoord;","attribute float aColor;","attribute vec2 aPositionCoord;","attribute vec2 aScale;","attribute float aRotation;","uniform mat3 projectionMatrix;","varying vec2 vTextureCoord;","varying float vColor;","void main(void){"," vec2 v = aVertexPosition;"," v.x = (aVertexPosition.x) * cos(aRotation) - (aVertexPosition.y) * sin(aRotation);"," v.y = (aVertexPosition.x) * sin(aRotation) + (aVertexPosition.y) * cos(aRotation);"," v = v + aPositionCoord;"," gl_Position = vec4((projectionMatrix * vec3(v, 1.0)).xy, 0.0, 1.0);"," vTextureCoord = aTextureCoord;"," vColor = aColor;","}"].join("\n"),["precision lowp float;","varying vec2 vTextureCoord;","varying float vColor;","uniform sampler2D uSampler;","uniform float uAlpha;","void main(void){"," vec4 color = texture2D(uSampler, vTextureCoord) * vColor * uAlpha;"," if (color.a == 0.0) discard;"," gl_FragColor = color;","}"].join("\n"),{uAlpha:{type:"1f",value:1}},{aPositionCoord:0,aRotation:0})}var n=t("../../renderers/webgl/shaders/TextureShader");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i},{"../../renderers/webgl/shaders/TextureShader":85}],65:[function(t,e,r){ +function i(t,e,r,i){if(a.call(this),n.sayHello(t),i)for(var h in s.DEFAULT_RENDER_OPTIONS)"undefined"==typeof i[h]&&(i[h]=s.DEFAULT_RENDER_OPTIONS[h]);else i=s.DEFAULT_RENDER_OPTIONS;this.type=s.RENDERER_TYPE.UNKNOWN,this.width=e||800,this.height=r||600,this.view=i.view||document.createElement("canvas"),this.resolution=i.resolution,this.transparent=i.transparent,this.autoResize=i.autoResize||!1,this.blendModes=null,this.preserveDrawingBuffer=i.preserveDrawingBuffer,this.clearBeforeRender=i.clearBeforeRender,this.roundPixels=i.roundPixels,this._backgroundColor=0,this._backgroundColorRgba=[0,0,0,0],this._backgroundColorString="#000000",this.backgroundColor=i.backgroundColor||this._backgroundColor,this._tempDisplayObjectParent={worldTransform:new o.Matrix,worldAlpha:1,children:[]},this._lastObjectRendered=this._tempDisplayObjectParent}var n=t("../utils"),o=t("../math"),s=t("../const"),a=t("eventemitter3");i.prototype=Object.create(a.prototype),i.prototype.constructor=i,e.exports=i,Object.defineProperties(i.prototype,{backgroundColor:{get:function(){return this._backgroundColor},set:function(t){this._backgroundColor=t,this._backgroundColorString=n.hex2string(t),n.hex2rgb(t,this._backgroundColorRgba)}}}),i.prototype.resize=function(t,e){this.width=t*this.resolution,this.height=e*this.resolution,this.view.width=this.width,this.view.height=this.height,this.autoResize&&(this.view.style.width=this.width/this.resolution+"px",this.view.style.height=this.height/this.resolution+"px")},i.prototype.destroy=function(t){t&&this.view.parentNode&&this.view.parentNode.removeChild(this.view),this.type=s.RENDERER_TYPE.UNKNOWN,this.width=0,this.height=0,this.view=null,this.resolution=0,this.transparent=!1,this.autoResize=!1,this.blendModes=null,this.preserveDrawingBuffer=!1,this.clearBeforeRender=!1,this.roundPixels=!1,this._backgroundColor=0,this._backgroundColorRgba=null,this._backgroundColorString=null}},{"../const":38,"../math":55,"../utils":105,eventemitter3:25}],66:[function(t,e,r){function i(t,e,r){r=r||{},n.call(this,"Canvas",t,e,r),this.type=h.RENDERER_TYPE.CANVAS,this.context=this.view.getContext("2d",{alpha:this.transparent}),this.refresh=!0,this.maskManager=new o,this.smoothProperty="imageSmoothingEnabled",this.context.imageSmoothingEnabled||(this.context.webkitImageSmoothingEnabled?this.smoothProperty="webkitImageSmoothingEnabled":this.context.mozImageSmoothingEnabled?this.smoothProperty="mozImageSmoothingEnabled":this.context.oImageSmoothingEnabled?this.smoothProperty="oImageSmoothingEnabled":this.context.msImageSmoothingEnabled&&(this.smoothProperty="msImageSmoothingEnabled")),this.initPlugins(),this._mapBlendModes(),this._tempDisplayObjectParent={worldTransform:new a.Matrix,worldAlpha:1},this.resize(t,e)}var n=t("../SystemRenderer"),o=t("./utils/CanvasMaskManager"),s=t("../../utils"),a=t("../../math"),h=t("../../const");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,s.pluginTarget.mixin(i),i.prototype.render=function(t){this.emit("prerender");var e=t.parent;this._lastObjectRendered=t,t.parent=this._tempDisplayObjectParent,t.updateTransform(),t.parent=e,this.context.setTransform(1,0,0,1,0,0),this.context.globalAlpha=1,this.context.globalCompositeOperation=this.blendModes[h.BLEND_MODES.NORMAL],navigator.isCocoonJS&&this.view.screencanvas&&(this.context.fillStyle="black",this.context.clear()),this.clearBeforeRender&&(this.transparent?this.context.clearRect(0,0,this.width,this.height):(this.context.fillStyle=this._backgroundColorString,this.context.fillRect(0,0,this.width,this.height))),this.renderDisplayObject(t,this.context),this.emit("postrender")},i.prototype.destroy=function(t){this.destroyPlugins(),n.prototype.destroy.call(this,t),this.context=null,this.refresh=!0,this.maskManager.destroy(),this.maskManager=null,this.smoothProperty=null},i.prototype.renderDisplayObject=function(t,e){var r=this.context;this.context=e,t.renderCanvas(this),this.context=r},i.prototype.resize=function(t,e){n.prototype.resize.call(this,t,e),this.smoothProperty&&(this.context[this.smoothProperty]=h.SCALE_MODES.DEFAULT===h.SCALE_MODES.LINEAR)},i.prototype._mapBlendModes=function(){this.blendModes||(this.blendModes={},s.canUseNewCanvasBlendModes()?(this.blendModes[h.BLEND_MODES.NORMAL]="source-over",this.blendModes[h.BLEND_MODES.ADD]="lighter",this.blendModes[h.BLEND_MODES.MULTIPLY]="multiply",this.blendModes[h.BLEND_MODES.SCREEN]="screen",this.blendModes[h.BLEND_MODES.OVERLAY]="overlay",this.blendModes[h.BLEND_MODES.DARKEN]="darken",this.blendModes[h.BLEND_MODES.LIGHTEN]="lighten",this.blendModes[h.BLEND_MODES.COLOR_DODGE]="color-dodge",this.blendModes[h.BLEND_MODES.COLOR_BURN]="color-burn",this.blendModes[h.BLEND_MODES.HARD_LIGHT]="hard-light",this.blendModes[h.BLEND_MODES.SOFT_LIGHT]="soft-light",this.blendModes[h.BLEND_MODES.DIFFERENCE]="difference",this.blendModes[h.BLEND_MODES.EXCLUSION]="exclusion",this.blendModes[h.BLEND_MODES.HUE]="hue",this.blendModes[h.BLEND_MODES.SATURATION]="saturate",this.blendModes[h.BLEND_MODES.COLOR]="color",this.blendModes[h.BLEND_MODES.LUMINOSITY]="luminosity"):(this.blendModes[h.BLEND_MODES.NORMAL]="source-over",this.blendModes[h.BLEND_MODES.ADD]="lighter",this.blendModes[h.BLEND_MODES.MULTIPLY]="source-over",this.blendModes[h.BLEND_MODES.SCREEN]="source-over",this.blendModes[h.BLEND_MODES.OVERLAY]="source-over",this.blendModes[h.BLEND_MODES.DARKEN]="source-over",this.blendModes[h.BLEND_MODES.LIGHTEN]="source-over",this.blendModes[h.BLEND_MODES.COLOR_DODGE]="source-over",this.blendModes[h.BLEND_MODES.COLOR_BURN]="source-over",this.blendModes[h.BLEND_MODES.HARD_LIGHT]="source-over",this.blendModes[h.BLEND_MODES.SOFT_LIGHT]="source-over",this.blendModes[h.BLEND_MODES.DIFFERENCE]="source-over",this.blendModes[h.BLEND_MODES.EXCLUSION]="source-over",this.blendModes[h.BLEND_MODES.HUE]="source-over",this.blendModes[h.BLEND_MODES.SATURATION]="source-over",this.blendModes[h.BLEND_MODES.COLOR]="source-over",this.blendModes[h.BLEND_MODES.LUMINOSITY]="source-over"))}},{"../../const":38,"../../math":55,"../../utils":105,"../SystemRenderer":65,"./utils/CanvasMaskManager":69}],67:[function(t,e,r){function i(t,e){this.canvas=document.createElement("canvas"),this.context=this.canvas.getContext("2d"),this.canvas.width=t,this.canvas.height=e}i.prototype.constructor=i,e.exports=i,Object.defineProperties(i.prototype,{width:{get:function(){return this.canvas.width},set:function(t){this.canvas.width=t}},height:{get:function(){return this.canvas.height},set:function(t){this.canvas.height=t}}}),i.prototype.clear=function(){this.context.setTransform(1,0,0,1,0,0),this.context.clearRect(0,0,this.canvas.width,this.canvas.height)},i.prototype.resize=function(t,e){this.canvas.width=t,this.canvas.height=e},i.prototype.destroy=function(){this.context=null,this.canvas=null}},{}],68:[function(t,e,r){var i=t("../../../const"),n={};e.exports=n,n.renderGraphics=function(t,e){var r=t.worldAlpha;t.dirty&&(this.updateGraphicsTint(t),t.dirty=!1);for(var n=0;nA?A:C,e.beginPath(),e.moveTo(T,E+C),e.lineTo(T,E+w-C),e.quadraticCurveTo(T,E+w,T+C,E+w),e.lineTo(T+S-C,E+w),e.quadraticCurveTo(T+S,E+w,T+S,E+w-C),e.lineTo(T+S,E+C),e.quadraticCurveTo(T+S,E,T+S-C,E),e.lineTo(T+C,E),e.quadraticCurveTo(T,E,T,E+C),e.closePath(),(o.fillColor||0===o.fillColor)&&(e.globalAlpha=o.fillAlpha*r,e.fillStyle="#"+("00000"+(0|a).toString(16)).substr(-6),e.fill()),o.lineWidth&&(e.globalAlpha=o.lineAlpha*r,e.strokeStyle="#"+("00000"+(0|h).toString(16)).substr(-6),e.stroke())}}},n.renderGraphicsMask=function(t,e){var r=t.graphicsData.length;if(0!==r){e.beginPath();for(var n=0;r>n;n++){var o=t.graphicsData[n],s=o.shape;if(o.type===i.SHAPES.POLY){var a=s.points;e.moveTo(a[0],a[1]);for(var h=1;hw?w:S,e.moveTo(b,_+S),e.lineTo(b,_+E-S),e.quadraticCurveTo(b,_+E,b+S,_+E),e.lineTo(b+T-S,_+E),e.quadraticCurveTo(b+T,_+E,b+T,_+E-S),e.lineTo(b+T,_+S),e.quadraticCurveTo(b+T,_,b+T-S,_),e.lineTo(b+S,_),e.quadraticCurveTo(b,_,b,_+S),e.closePath()}}}},n.updateGraphicsTint=function(t){if(16777215!==t.tint||t._prevTint!==t.tint){t._prevTint=t.tint;for(var e=(t.tint>>16&255)/255,r=(t.tint>>8&255)/255,i=(255&t.tint)/255,n=0;n>16&255)/255*e*255<<16)+((s>>8&255)/255*r*255<<8)+(255&s)/255*i*255,o._lineTint=((a>>16&255)/255*e*255<<16)+((a>>8&255)/255*r*255<<8)+(255&a)/255*i*255}}}},{"../../../const":38}],69:[function(t,e,r){function i(){}var n=t("./CanvasGraphics");i.prototype.constructor=i,e.exports=i,i.prototype.pushMask=function(t,e){e.context.save();var r=t.alpha,i=t.worldTransform,o=e.resolution;e.context.setTransform(i.a*o,i.b*o,i.c*o,i.d*o,i.tx*o,i.ty*o),t.texture||(n.renderGraphicsMask(t,e.context),e.context.clip()),t.worldAlpha=r},i.prototype.popMask=function(t){t.context.restore()},i.prototype.destroy=function(){}},{"./CanvasGraphics":68}],70:[function(t,e,r){var i=t("../../../utils"),n={};e.exports=n,n.getTintedTexture=function(t,e){var r=t.texture;e=n.roundColor(e);var i="#"+("00000"+(0|e).toString(16)).substr(-6);if(r.tintCache=r.tintCache||{},r.tintCache[i])return r.tintCache[i];var o=n.canvas||document.createElement("canvas");if(n.tintMethod(r,e,o),n.convertTintToImage){var s=new Image;s.src=o.toDataURL(),r.tintCache[i]=s}else r.tintCache[i]=o,n.canvas=null;return o},n.tintWithMultiply=function(t,e,r){var i=r.getContext("2d"),n=t.baseTexture.resolution,o=t.crop.clone();o.x*=n,o.y*=n,o.width*=n,o.height*=n,r.width=o.width,r.height=o.height,i.fillStyle="#"+("00000"+(0|e).toString(16)).substr(-6),i.fillRect(0,0,o.width,o.height),i.globalCompositeOperation="multiply",i.drawImage(t.baseTexture.source,o.x,o.y,o.width,o.height,0,0,o.width,o.height),i.globalCompositeOperation="destination-atop",i.drawImage(t.baseTexture.source,o.x,o.y,o.width,o.height,0,0,o.width,o.height)},n.tintWithOverlay=function(t,e,r){var i=r.getContext("2d"),n=t.baseTexture.resolution,o=t.crop.clone();o.x*=n,o.y*=n,o.width*=n,o.height*=n,r.width=o.width,r.height=o.height,i.globalCompositeOperation="copy",i.fillStyle="#"+("00000"+(0|e).toString(16)).substr(-6),i.fillRect(0,0,o.width,o.height),i.globalCompositeOperation="destination-atop",i.drawImage(t.baseTexture.source,o.x,o.y,o.width,o.height,0,0,o.width,o.height)},n.tintWithPerPixel=function(t,e,r){var n=r.getContext("2d"),o=t.baseTexture.resolution,s=t.crop.clone();s.x*=o,s.y*=o,s.width*=o,s.height*=o,r.width=s.width,r.height=s.height,n.globalCompositeOperation="copy",n.drawImage(t.baseTexture.source,s.x,s.y,s.width,s.height,0,0,s.width,s.height);for(var a=i.hex2rgb(e),h=a[0],u=a[1],l=a[2],c=n.getImageData(0,0,s.width,s.height),p=c.data,d=0;de;++e)this.shaders[e].syncUniform(t)}},{"../shaders/TextureShader":85}],74:[function(t,e,r){function i(){n.call(this,"\nprecision mediump float;\n\nattribute vec2 aVertexPosition;\nattribute vec2 aTextureCoord;\nattribute vec4 aColor;\n\nuniform mat3 projectionMatrix;\nuniform vec2 resolution;\n\nvarying vec2 vTextureCoord;\nvarying vec4 vColor;\n\nvarying vec2 vResolution;\n\n//texcoords computed in vertex step\n//to avoid dependent texture reads\nvarying vec2 v_rgbNW;\nvarying vec2 v_rgbNE;\nvarying vec2 v_rgbSW;\nvarying vec2 v_rgbSE;\nvarying vec2 v_rgbM;\n\n\nvoid texcoords(vec2 fragCoord, vec2 resolution,\n out vec2 v_rgbNW, out vec2 v_rgbNE,\n out vec2 v_rgbSW, out vec2 v_rgbSE,\n out vec2 v_rgbM) {\n vec2 inverseVP = 1.0 / resolution.xy;\n v_rgbNW = (fragCoord + vec2(-1.0, -1.0)) * inverseVP;\n v_rgbNE = (fragCoord + vec2(1.0, -1.0)) * inverseVP;\n v_rgbSW = (fragCoord + vec2(-1.0, 1.0)) * inverseVP;\n v_rgbSE = (fragCoord + vec2(1.0, 1.0)) * inverseVP;\n v_rgbM = vec2(fragCoord * inverseVP);\n}\n\nvoid main(void){\n gl_Position = vec4((projectionMatrix * vec3(aVertexPosition, 1.0)).xy, 0.0, 1.0);\n vTextureCoord = aTextureCoord;\n vColor = vec4(aColor.rgb * aColor.a, aColor.a);\n vResolution = resolution;\n\n //compute the texture coords and send them to varyings\n texcoords(aTextureCoord * resolution, resolution, v_rgbNW, v_rgbNE, v_rgbSW, v_rgbSE, v_rgbM);\n}\n",'precision lowp float;\n\n\n/**\nBasic FXAA implementation based on the code on geeks3d.com with the\nmodification that the texture2DLod stuff was removed since it\'s\nunsupported by WebGL.\n\n--\n\nFrom:\nhttps://github.com/mitsuhiko/webgl-meincraft\n\nCopyright (c) 2011 by Armin Ronacher.\n\nSome rights reserved.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are\nmet:\n\n * Redistributions of source code must retain the above copyright\n notice, this list of conditions and the following disclaimer.\n\n * Redistributions in binary form must reproduce the above\n copyright notice, this list of conditions and the following\n disclaimer in the documentation and/or other materials provided\n with the distribution.\n\n * The names of the contributors may not be used to endorse or\n promote products derived from this software without specific\n prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\nLIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\nA PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\nOWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\nSPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\nLIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\nDATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\nTHEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\nOF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n*/\n\n#ifndef FXAA_REDUCE_MIN\n #define FXAA_REDUCE_MIN (1.0/ 128.0)\n#endif\n#ifndef FXAA_REDUCE_MUL\n #define FXAA_REDUCE_MUL (1.0 / 8.0)\n#endif\n#ifndef FXAA_SPAN_MAX\n #define FXAA_SPAN_MAX 8.0\n#endif\n\n//optimized version for mobile, where dependent\n//texture reads can be a bottleneck\nvec4 fxaa(sampler2D tex, vec2 fragCoord, vec2 resolution,\n vec2 v_rgbNW, vec2 v_rgbNE,\n vec2 v_rgbSW, vec2 v_rgbSE,\n vec2 v_rgbM) {\n vec4 color;\n mediump vec2 inverseVP = vec2(1.0 / resolution.x, 1.0 / resolution.y);\n vec3 rgbNW = texture2D(tex, v_rgbNW).xyz;\n vec3 rgbNE = texture2D(tex, v_rgbNE).xyz;\n vec3 rgbSW = texture2D(tex, v_rgbSW).xyz;\n vec3 rgbSE = texture2D(tex, v_rgbSE).xyz;\n vec4 texColor = texture2D(tex, v_rgbM);\n vec3 rgbM = texColor.xyz;\n vec3 luma = vec3(0.299, 0.587, 0.114);\n float lumaNW = dot(rgbNW, luma);\n float lumaNE = dot(rgbNE, luma);\n float lumaSW = dot(rgbSW, luma);\n float lumaSE = dot(rgbSE, luma);\n float lumaM = dot(rgbM, luma);\n float lumaMin = min(lumaM, min(min(lumaNW, lumaNE), min(lumaSW, lumaSE)));\n float lumaMax = max(lumaM, max(max(lumaNW, lumaNE), max(lumaSW, lumaSE)));\n\n mediump vec2 dir;\n dir.x = -((lumaNW + lumaNE) - (lumaSW + lumaSE));\n dir.y = ((lumaNW + lumaSW) - (lumaNE + lumaSE));\n\n float dirReduce = max((lumaNW + lumaNE + lumaSW + lumaSE) *\n (0.25 * FXAA_REDUCE_MUL), FXAA_REDUCE_MIN);\n\n float rcpDirMin = 1.0 / (min(abs(dir.x), abs(dir.y)) + dirReduce);\n dir = min(vec2(FXAA_SPAN_MAX, FXAA_SPAN_MAX),\n max(vec2(-FXAA_SPAN_MAX, -FXAA_SPAN_MAX),\n dir * rcpDirMin)) * inverseVP;\n\n vec3 rgbA = 0.5 * (\n texture2D(tex, fragCoord * inverseVP + dir * (1.0 / 3.0 - 0.5)).xyz +\n texture2D(tex, fragCoord * inverseVP + dir * (2.0 / 3.0 - 0.5)).xyz);\n vec3 rgbB = rgbA * 0.5 + 0.25 * (\n texture2D(tex, fragCoord * inverseVP + dir * -0.5).xyz +\n texture2D(tex, fragCoord * inverseVP + dir * 0.5).xyz);\n\n float lumaB = dot(rgbB, luma);\n if ((lumaB < lumaMin) || (lumaB > lumaMax))\n color = vec4(rgbA, texColor.a);\n else\n color = vec4(rgbB, texColor.a);\n return color;\n}\n\n\nvarying vec2 vTextureCoord;\nvarying vec4 vColor;\nvarying vec2 vResolution;\n\n//texcoords computed in vertex step\n//to avoid dependent texture reads\nvarying vec2 v_rgbNW;\nvarying vec2 v_rgbNE;\nvarying vec2 v_rgbSW;\nvarying vec2 v_rgbSE;\nvarying vec2 v_rgbM;\n\nuniform sampler2D uSampler;\n\n\nvoid main(void){\n\n gl_FragColor = fxaa(uSampler, vTextureCoord * vResolution, vResolution, v_rgbNW, v_rgbNE, v_rgbSW, v_rgbSE, v_rgbM);\n\n}\n',{resolution:{type:"v2",value:{x:1,y:1}}})}var n=t("./AbstractFilter");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.applyFilter=function(t,e,r){var i=t.filterManager,n=this.getShader(t);i.applyFilter(n,e,r)}},{"./AbstractFilter":73}],75:[function(t,e,r){function i(t){var e=new o.Matrix;n.call(this,"attribute vec2 aVertexPosition;\nattribute vec2 aTextureCoord;\nattribute vec4 aColor;\n\nuniform mat3 projectionMatrix;\nuniform mat3 otherMatrix;\n\nvarying vec2 vMaskCoord;\nvarying vec2 vTextureCoord;\nvarying vec4 vColor;\n\nvoid main(void)\n{\n gl_Position = vec4((projectionMatrix * vec3(aVertexPosition, 1.0)).xy, 0.0, 1.0);\n vTextureCoord = aTextureCoord;\n vMaskCoord = ( otherMatrix * vec3( aTextureCoord, 1.0) ).xy;\n vColor = vec4(aColor.rgb * aColor.a, aColor.a);\n}\n","precision lowp float;\n\nvarying vec2 vMaskCoord;\nvarying vec2 vTextureCoord;\nvarying vec4 vColor;\n\nuniform sampler2D uSampler;\nuniform float alpha;\nuniform sampler2D mask;\n\nvoid main(void)\n{\n // check clip! this will stop the mask bleeding out from the edges\n vec2 text = abs( vMaskCoord - 0.5 );\n text = step(0.5, text);\n float clip = 1.0 - max(text.y, text.x);\n vec4 original = texture2D(uSampler, vTextureCoord);\n vec4 masky = texture2D(mask, vMaskCoord);\n original *= (masky.r * masky.a * alpha * clip);\n gl_FragColor = original;\n}\n",{mask:{type:"sampler2D",value:t._texture},alpha:{type:"f",value:1},otherMatrix:{type:"mat3",value:e.toArray(!0)}}),this.maskSprite=t,this.maskMatrix=e}var n=t("./AbstractFilter"),o=t("../../../math");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.applyFilter=function(t,e,r){var i=t.filterManager;this.uniforms.mask.value=this.maskSprite._texture,i.calculateMappedMatrix(e.frame,this.maskSprite,this.maskMatrix),this.uniforms.otherMatrix.value=this.maskMatrix.toArray(!0),this.uniforms.alpha.value=this.maskSprite.worldAlpha;var n=this.getShader(t);i.applyFilter(n,e,r)},Object.defineProperties(i.prototype,{map:{get:function(){return this.uniforms.mask.value},set:function(t){this.uniforms.mask.value=t}},offset:{get:function(){return this.uniforms.offset.value},set:function(t){this.uniforms.offset.value=t}}})},{"../../../math":55,"./AbstractFilter":73}],76:[function(t,e,r){function i(t){n.call(this,t),this.currentBlendMode=99999}var n=t("./WebGLManager");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.setBlendMode=function(t){if(this.currentBlendMode===t)return!1;this.currentBlendMode=t;var e=this.renderer.blendModes[this.currentBlendMode];return this.renderer.gl.blendFunc(e[0],e[1]),!0}},{"./WebGLManager":81}],77:[function(t,e,r){function i(t){n.call(this,t),this.filterStack=[],this.filterStack.push({renderTarget:t.currentRenderTarget,filter:[],bounds:null}),this.texturePool=[],this.textureSize=new h.Rectangle(0,0,t.width,t.height),this.currentFrame=null}var n=t("./WebGLManager"),o=t("../utils/RenderTarget"),s=t("../../../const"),a=t("../utils/Quad"),h=t("../../../math");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.onContextChange=function(){this.texturePool.length=0;var t=this.renderer.gl;this.quad=new a(t)},i.prototype.setFilterStack=function(t){this.filterStack=t},i.prototype.pushFilter=function(t,e){var r=t.filterArea?t.filterArea.clone():t.getBounds();r.x=0|r.x,r.y=0|r.y,r.width=0|r.width,r.height=0|r.height;var i=0|e[0].padding;if(r.x-=i,r.y-=i,r.width+=2*i,r.height+=2*i,this.renderer.currentRenderTarget.transform){var n=this.renderer.currentRenderTarget.transform;r.x+=n.tx,r.y+=n.ty,this.capFilterArea(r),r.x-=n.tx,r.y-=n.ty}else this.capFilterArea(r);if(r.width>0&&r.height>0){this.currentFrame=r;var o=this.getRenderTarget();this.renderer.setRenderTarget(o),o.clear(),this.filterStack.push({renderTarget:o,filter:e})}else this.filterStack.push({renderTarget:null,filter:e})},i.prototype.popFilter=function(){var t=this.filterStack.pop(),e=this.filterStack[this.filterStack.length-1],r=t.renderTarget;if(t.renderTarget){var i=e.renderTarget,n=this.renderer.gl;this.currentFrame=r.frame,this.quad.map(this.textureSize,r.frame),n.bindBuffer(n.ARRAY_BUFFER,this.quad.vertexBuffer),n.bindBuffer(n.ELEMENT_ARRAY_BUFFER,this.quad.indexBuffer);var o=t.filter;if(n.vertexAttribPointer(this.renderer.shaderManager.defaultShader.attributes.aVertexPosition,2,n.FLOAT,!1,0,0),n.vertexAttribPointer(this.renderer.shaderManager.defaultShader.attributes.aTextureCoord,2,n.FLOAT,!1,0,32),n.vertexAttribPointer(this.renderer.shaderManager.defaultShader.attributes.aColor,4,n.FLOAT,!1,0,64),this.renderer.blendModeManager.setBlendMode(s.BLEND_MODES.NORMAL),1===o.length)o[0].uniforms.dimensions&&(o[0].uniforms.dimensions.value[0]=this.renderer.width,o[0].uniforms.dimensions.value[1]=this.renderer.height,o[0].uniforms.dimensions.value[2]=this.quad.vertices[0],o[0].uniforms.dimensions.value[3]=this.quad.vertices[5]),o[0].applyFilter(this.renderer,r,i),this.returnRenderTarget(r);else{for(var a=r,h=this.getRenderTarget(!0),u=0;uthis.textureSize.width&&(t.width=this.textureSize.width-t.x),t.y+t.height>this.textureSize.height&&(t.height=this.textureSize.height-t.y)},i.prototype.resize=function(t,e){this.textureSize.width=t,this.textureSize.height=e;for(var r=0;re;++e)t._array[2*e]=o[e].x,t._array[2*e+1]=o[e].y;s.uniform2fv(i,t._array);break;case"v3v":for(t._array||(t._array=new Float32Array(3*o.length)),e=0,r=o.length;r>e;++e)t._array[3*e]=o[e].x,t._array[3*e+1]=o[e].y,t._array[3*e+2]=o[e].z;s.uniform3fv(i,t._array);break;case"v4v":for(t._array||(t._array=new Float32Array(4*o.length)),e=0,r=o.length;r>e;++e)t._array[4*e]=o[e].x,t._array[4*e+1]=o[e].y,t._array[4*e+2]=o[e].z,t._array[4*e+3]=o[e].w;s.uniform4fv(i,t._array);break;case"t":case"sampler2D":if(!t.value||!t.value.baseTexture.hasLoaded)break;s.activeTexture(s["TEXTURE"+this.textureCount]);var a=t.value.baseTexture._glTextures[s.id];a||(this.initSampler2D(t),a=t.value.baseTexture._glTextures[s.id]),s.bindTexture(s.TEXTURE_2D,a),s.uniform1i(t._location,this.textureCount),this.textureCount++;break;default:console.warn("Pixi.js Shader Warning: Unknown uniform type: "+t.type)}},i.prototype.syncUniforms=function(){this.textureCount=1;for(var t in this.uniforms)this.syncUniform(this.uniforms[t])},i.prototype.initSampler2D=function(t){var e=this.gl,r=t.value.baseTexture;if(r.hasLoaded)if(t.textureData){var i=t.textureData;r._glTextures[e.id]=e.createTexture(),e.bindTexture(e.TEXTURE_2D,r._glTextures[e.id]),e.pixelStorei(e.UNPACK_PREMULTIPLY_ALPHA_WEBGL,r.premultipliedAlpha),e.texImage2D(e.TEXTURE_2D,0,i.luminance?e.LUMINANCE:e.RGBA,e.RGBA,e.UNSIGNED_BYTE,r.source),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MAG_FILTER,i.magFilter?i.magFilter:e.LINEAR),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MIN_FILTER,i.wrapS?i.wrapS:e.CLAMP_TO_EDGE),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,i.wrapS?i.wrapS:e.CLAMP_TO_EDGE),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,i.wrapT?i.wrapT:e.CLAMP_TO_EDGE)}else this.shaderManager.renderer.updateTexture(r)},i.prototype.destroy=function(){this.gl.deleteProgram(this.program),this.gl=null,this.uniforms=null,this.attributes=null,this.vertexSrc=null,this.fragmentSrc=null},i.prototype._glCompile=function(t,e){var r=this.gl.createShader(t);return this.gl.shaderSource(r,e),this.gl.compileShader(r),this.gl.getShaderParameter(r,this.gl.COMPILE_STATUS)?r:(console.log(this.gl.getShaderInfoLog(r)),null)}},{"../../../utils":105}],85:[function(t,e,r){function i(t,e,r,o,s){var a={uSampler:{type:"sampler2D",value:0},projectionMatrix:{type:"mat3",value:new Float32Array([1,0,0,0,1,0,0,0,1])}};if(o)for(var h in o)a[h]=o[h];var u={aVertexPosition:0,aTextureCoord:0,aColor:0};if(s)for(var l in s)u[l]=s[l];e=e||i.defaultVertexSrc,r=r||i.defaultFragmentSrc,n.call(this,t,e,r,a,u)}var n=t("./Shader");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.defaultVertexSrc=["precision lowp float;","attribute vec2 aVertexPosition;","attribute vec2 aTextureCoord;","attribute vec4 aColor;","uniform mat3 projectionMatrix;","varying vec2 vTextureCoord;","varying vec4 vColor;","void main(void){"," gl_Position = vec4((projectionMatrix * vec3(aVertexPosition, 1.0)).xy, 0.0, 1.0);"," vTextureCoord = aTextureCoord;"," vColor = vec4(aColor.rgb * aColor.a, aColor.a);","}"].join("\n"),i.defaultFragmentSrc=["precision lowp float;","varying vec2 vTextureCoord;","varying vec4 vColor;","uniform sampler2D uSampler;","void main(void){"," gl_FragColor = texture2D(uSampler, vTextureCoord) * vColor ;","}"].join("\n")},{"./Shader":84}],86:[function(t,e,r){function i(t){vertexSrc=i.defaultVertexSrc,fragmentSrc=i.defaultFragmentSrc,n.call(this,t,vertexSrc,fragmentSrc)}var n=t("pixi-gl-core").GLShader;i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.defaultVertexSrc=["precision lowp float;","attribute vec2 aVertexPosition;","attribute vec2 aTextureCoord;","attribute vec4 aColor;","uniform mat3 projectionMatrix;","varying vec2 vTextureCoord;","varying vec4 vColor;","void main(void){"," gl_Position = vec4((projectionMatrix * vec3(aVertexPosition, 1.0)).xy, 0.0, 1.0);"," vTextureCoord = aTextureCoord;"," vColor = vec4(aColor.rgb * aColor.a, aColor.a);","}"].join("\n"),i.defaultFragmentSrc=["precision lowp float;","varying vec2 vTextureCoord;","varying vec4 vColor;","uniform sampler2D uSampler;","void main(void){"," gl_FragColor = texture2D(uSampler, vTextureCoord) * vColor ;","}"].join("\n")},{"pixi-gl-core":1}],87:[function(t,e,r){function i(t){n.call(this,t)}var n=t("../managers/WebGLManager");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.start=function(){},i.prototype.stop=function(){this.flush()},i.prototype.flush=function(){},i.prototype.render=function(t){}},{"../managers/WebGLManager":81}],88:[function(t,e,r){function i(t){this.gl=t,this.vertices=new Float32Array([0,0,200,0,200,200,0,200]),this.uvs=new Float32Array([0,0,1,0,1,1,0,1]),this.colors=new Float32Array([1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]),this.indices=new Uint16Array([0,1,2,0,3,2]),this.vertexBuffer=t.createBuffer(),this.indexBuffer=t.createBuffer(),t.bindBuffer(t.ARRAY_BUFFER,this.vertexBuffer),t.bufferData(t.ARRAY_BUFFER,128,t.DYNAMIC_DRAW),t.bindBuffer(t.ELEMENT_ARRAY_BUFFER,this.indexBuffer),t.bufferData(t.ELEMENT_ARRAY_BUFFER,this.indices,t.STATIC_DRAW),this.upload()}i.prototype.constructor=i,i.prototype.map=function(t,e){var r=0,i=0;this.uvs[0]=r,this.uvs[1]=i,this.uvs[2]=r+e.width/t.width,this.uvs[3]=i,this.uvs[4]=r+e.width/t.width,this.uvs[5]=i+e.height/t.height,this.uvs[6]=r,this.uvs[7]=i+e.height/t.height,r=e.x,i=e.y,this.vertices[0]=r,this.vertices[1]=i,this.vertices[2]=r+e.width,this.vertices[3]=i,this.vertices[4]=r+e.width,this.vertices[5]=i+e.height,this.vertices[6]=r,this.vertices[7]=i+e.height,this.upload()},i.prototype.upload=function(){var t=this.gl;t.bindBuffer(t.ARRAY_BUFFER,this.vertexBuffer),t.bufferSubData(t.ARRAY_BUFFER,0,this.vertices),t.bufferSubData(t.ARRAY_BUFFER,32,this.uvs),t.bufferSubData(t.ARRAY_BUFFER,64,this.colors)},i.prototype.destroy=function(){var t=this.gl;t.deleteBuffer(this.vertexBuffer),t.deleteBuffer(this.indexBuffer)},e.exports=i},{}],89:[function(t,e,r){var i=t("../../../math"),n=(t("../../../utils"),t("../../../const")),o=t("pixi-gl-core").GLTexture,s=t("pixi-gl-core").GLFramebuffer,a=t("./StencilMaskStack"),h=function(t,e,r,h,u,l){if(this.gl=t,this.frameBuffer=null,this.texture=null,this.clearColor=[0,0,0,0],this.size=new i.Rectangle(0,0,1,1),this.resolution=u||n.RESOLUTION,this.projectionMatrix=new i.Matrix,this.transform=null,this.frame=null,this.stencilBuffer=null,this.stencilMaskStack=new a,this.filterStack=[{renderTarget:this,filter:[],bounds:this.size}],this.scaleMode=h||n.SCALE_MODES.DEFAULT,this.root=l,this.frameBuffer=s.createRGBA(t,100,100),this.frameBuffer&&this.frameBuffer.unbind(),this.root)this.frameBuffer.framebuffer=null;else{var c=new o(t);c.enableLinearScaling(),c.enableWrapClamp(),this.frameBuffer.enableTexture(c),this.texture=c.texture}this.resize(e,r)};h.prototype.constructor=h,e.exports=h,h.prototype.clear=function(t){var e=t||this.clearColor;this.frameBuffer.clear(e[0],e[1],e[2],e[3])},h.prototype.attachStencilBuffer=function(){this.root||this.frameBuffer.enableStencil()},h.prototype.activate=function(){var t=this.gl;this.frameBuffer.bind();var e=this.frame||this.size;this.calculateProjection(e),this.transform&&this.projectionMatrix.append(this.transform),t.viewport(0,0,e.width*this.resolution,e.height*this.resolution)},h.prototype.calculateProjection=function(t){var e=this.projectionMatrix;e.identity(),this.root?(e.a=1/t.width*2,e.d=-1/t.height*2,e.tx=-1-t.x*e.a,e.ty=1-t.y*e.d):(e.a=1/t.width*2,e.d=1/t.height*2,e.tx=-1-t.x*e.a,e.ty=-1-t.y*e.d)},h.prototype.resize=function(t,e){if(t=0|t,e=0|e,this.size.width!==t||this.size.height!==e){this.size.width=t,this.size.height=e,this.frameBuffer.resize(t*this.resolution,e*this.resolution);var r=this.frame||this.size;this.calculateProjection(r)}},h.prototype.destroy=function(){this.gl;this.frameBuffer.destroy(),this.frameBuffer=null,this.texture=null}},{"../../../const":38,"../../../math":55,"../../../utils":105,"./StencilMaskStack":90,"pixi-gl-core":1}],90:[function(t,e,r){function i(){this.stencilStack=[],this.reverse=!0,this.count=0}i.prototype.constructor=i,e.exports=i},{}],91:[function(t,e,r){function i(t,e){return e=e||{},e[CONST.BLEND_MODES.NORMAL]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.ADD]=[t.SRC_ALPHA,t.DST_ALPHA],e[CONST.BLEND_MODES.MULTIPLY]=[t.DST_COLOR,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.SCREEN]=[t.SRC_ALPHA,t.ONE],e[CONST.BLEND_MODES.OVERLAY]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.DARKEN]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.LIGHTEN]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.COLOR_DODGE]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.COLOR_BURN]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.HARD_LIGHT]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.SOFT_LIGHT]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.DIFFERENCE]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.EXCLUSION]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.HUE]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.SATURATION]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.COLOR]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.LUMINOSITY]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e}CONST=t("../../../const"),e.exports=i},{"../../../const":38}],92:[function(t,e,r){function i(t,e){e=e||{},e[CONST.DRAW_MODES.POINTS]=t.POINTS,e[CONST.DRAW_MODES.LINES]=t.LINES,e[CONST.DRAW_MODES.LINE_LOOP]=t.LINE_LOOP,e[CONST.DRAW_MODES.LINE_STRIP]=t.LINE_STRIP,e[CONST.DRAW_MODES.TRIANGLES]=t.TRIANGLES,e[CONST.DRAW_MODES.TRIANGLE_STRIP]=t.TRIANGLE_STRIP,e[CONST.DRAW_MODES.TRIANGLE_FAN]=t.TRIANGLE_FAN}CONST=t("../../../const"),e.exports=i},{"../../../const":38}],93:[function(t,e,r){function i(t){s.call(this),this.anchor=new n.Point,this._texture=null,this._width=0,this._height=0,this.tint=16777215,this.blendMode=u.BLEND_MODES.NORMAL,this.shader=null,this.cachedTint=16777215,this.texture=t||o.EMPTY,this.textureDirty=!0,this.vertexDirty=!0,this.vertexData=new Float32Array(8)}var n=t("../math"),o=t("../textures/Texture"),s=t("../display/Container"),a=t("../renderers/canvas/utils/CanvasTinter"),h=t("../utils"),u=t("../const"),l=new n.Point;i.prototype=Object.create(s.prototype),i.prototype.constructor=i,e.exports=i,Object.defineProperties(i.prototype,{width:{get:function(){return Math.abs(this.scale.x)*this.texture._frame.width},set:function(t){var e=h.sign(this.scale.x)||1;this.scale.x=e*t/this.texture._frame.width,this._width=t}},height:{get:function(){return Math.abs(this.scale.y)*this.texture._frame.height},set:function(t){var e=h.sign(this.scale.y)||1;this.scale.y=e*t/this.texture._frame.height,this._height=t}},texture:{get:function(){return this._texture},set:function(t){this._texture!==t&&(this._texture=t,this.cachedTint=16777215,this.textureDirty=!0,t&&(t.baseTexture.hasLoaded?this._onTextureUpdate():t.once("update",this._onTextureUpdate,this)))}}}),i.prototype._onTextureUpdate=function(){this.textureDirty=!0,this._width&&(this.scale.x=h.sign(this.scale.x)*this._width/this.texture.frame.width),this._height&&(this.scale.y=h.sign(this.scale.y)*this._height/this.texture.frame.height)},i.prototype.caclulateVertices=function(){var t,e,r,i,n=this._texture,o=this.worldTransform,s=o.a,a=o.b,h=o.c,u=o.d,l=o.tx,c=o.ty,p=this.vertexData,d=n.trim;d?(e=d.x-this.anchor.x*d.width,t=e+n.crop.width,i=d.y-this.anchor.y*d.height,r=i+n.crop.height):(t=n._frame.width*(1-this.anchor.x),e=n._frame.width*-this.anchor.x,r=n._frame.height*(1-this.anchor.y),i=n._frame.height*-this.anchor.y),p[0]=s*e+h*i+l,p[1]=u*i+a*e+c,p[2]=s*t+h*i+l,p[3]=u*i+a*t+c,p[4]=s*t+h*r+l,p[5]=u*r+a*t+c,p[6]=s*e+h*r+l,p[7]=u*r+a*e+c},i.prototype._renderWebGL=function(t){this.textureDirty&&(this.textureDirty=!1,this._onTextureUpdate(),this.vertexDirty=!0),this.vertexDirty&&(this.vertexDirty=!1,this.caclulateVertices()),t.setObjectRenderer(t.plugins.sprite),t.plugins.sprite.render(this)},i.prototype.getBounds=function(t){if(!this._currentBounds){this.vertexDirty&&(this.vertexDirty=!1,this.caclulateVertices());var e,r,i,n,o=this.vertexData,s=o[0],a=o[1],h=o[2],u=o[3],l=o[4],c=o[5],p=o[6],d=o[7];if(e=s,e=e>h?h:e,e=e>l?l:e,e=e>p?p:e,i=a,i=i>u?u:i,i=i>c?c:i,i=i>d?d:i,r=s,r=h>r?h:r,r=l>r?l:r,r=p>r?p:r,n=a,n=u>n?u:n,n=c>n?c:n,n=d>n?d:n,this.children.length){var f=this.containerGetBounds();w0=f.x,w1=f.x+f.width,h0=f.y,h1=f.y+f.height,e=ew1?r:w1,n=n>h1?n:h1}var v=this._bounds;v.x=e,v.width=r-e,v.y=i,v.height=n-i,this._currentBounds=v}return this._currentBounds},i.prototype.getLocalBounds=function(){return this._bounds.x=-this._texture._frame.width*this.anchor.x,this._bounds.y=-this._texture._frame.height*this.anchor.y,this._bounds.width=this._texture._frame.width,this._bounds.height=this._texture._frame.height,this._bounds},i.prototype.containsPoint=function(t){this.worldTransform.applyInverse(t,l);var e,r=this._texture._frame.width,i=this._texture._frame.height,n=-r*this.anchor.x;return l.x>n&&l.xe&&l.y=this.size&&this.flush(),t.texture._uvs){var e,r=t.texture.baseTexture,i=this.currentGroup;if(this.currentTexture!==r){if(this.currentTexture=r,!r._enabled){if(r._enabled=!0,r._id=this.textureCount,this.textureCount===this.MAX_TEXTUES){for(e=0;e>16)+(65280&t.tint)+((255&t.tint)<<16)+(255*t.worldAlpha<<24),u=t.texture._uvs.uvs_uint32;s[n++]=a[0],s[n++]=a[1],this.uvs[n++]=u[0],o[n++]=h,s[n++]=r._id,s[n++]=a[2],s[n++]=a[3],this.uvs[n++]=u[1],o[n++]=h,s[n++]=r._id,s[n++]=a[4],s[n++]=a[5],this.uvs[n++]=u[2],o[n++]=h,s[n++]=r._id,s[n++]=a[6],s[n++]=a[7],this.uvs[n++]=u[3],o[n++]=h,s[n++]=r._id}},i.prototype.flush=function(){if(0!==this.currentIndex){var t=this.renderer.gl;this.currentGroup.size=this.currentIndex-this.currentGroup.start;for(var e=0;e.5*this.size)this.vertexBuffer.upload(this.vertices,0,!0);else{var r=this.positions.subarray(0,this.currentIndex*this.vertByteSize);this.vertexBuffer.upload(r,0,!0)}for(this.renderer.bindShader(this._shader),this.renderer.blendModeManager.setBlendMode(0),e=0;eu;u++)h[u]=u;return a.bind(),a.uniforms.uSamplers=h,a}function n(t){var e="vec4 getSampleFromArray(sampler2D textures[%%], int ndx, vec2 uv) {\n\nvec4 color;";e+="\n",e+="\n";for(var r=0;t>r;r++)r>0&&(e+="\nelse "),t-1>r&&(e+="if(ndx == "+r+")"),e+="\n{",e+="\n color = texture2D(textures["+r+"], uv);",e+="\n}";return e+="\n",e+="\n",e+="return color;",e+="\n}"}var o=t("pixi-gl-core").GLShader,s=["varying vec2 vTextureCoord;","varying vec4 vColor;","varying float vTextureId;","uniform sampler2D uSamplers[%%];","void main(void){","gl_FragColor = getSampleFromArray(uSamplers, int(vTextureId), vTextureCoord) * vColor;","}"].join("\n");e.exports=i},{"pixi-gl-core":1}],96:[function(t,e,r){function i(t,e,r){this.canvas=document.createElement("canvas"),this.context=this.canvas.getContext("2d"),this.resolution=r||h.RESOLUTION,this._text=null,this._style=null;var i=o.fromCanvas(this.canvas);i.trim=new s.Rectangle,n.call(this,i),this.text=t,this.style=e}var n=t("../sprites/Sprite"),o=t("../textures/Texture"),s=t("../math"),a=t("../utils"),h=t("../const");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.fontPropertiesCache={},i.fontPropertiesCanvas=document.createElement("canvas"),i.fontPropertiesContext=i.fontPropertiesCanvas.getContext("2d"),Object.defineProperties(i.prototype,{width:{get:function(){return this.dirty&&this.updateText(),this.scale.x*this._texture._frame.width},set:function(t){this.scale.x=t/this._texture._frame.width,this._width=t}},height:{get:function(){return this.dirty&&this.updateText(),this.scale.y*this._texture._frame.height},set:function(t){this.scale.y=t/this._texture._frame.height,this._height=t}},style:{get:function(){return this._style},set:function(t){t=t||{},"number"==typeof t.fill&&(t.fill=a.hex2string(t.fill)),"number"==typeof t.stroke&&(t.stroke=a.hex2string(t.stroke)),"number"==typeof t.dropShadowColor&&(t.dropShadowColor=a.hex2string(t.dropShadowColor)),t.font=t.font||"bold 20pt Arial",t.fill=t.fill||"black",t.align=t.align||"left",t.stroke=t.stroke||"black",t.strokeThickness=t.strokeThickness||0,t.wordWrap=t.wordWrap||!1,t.wordWrapWidth=t.wordWrapWidth||100,t.dropShadow=t.dropShadow||!1,t.dropShadowColor=t.dropShadowColor||"#000000",t.dropShadowAngle=void 0!==t.dropShadowAngle?t.dropShadowAngle:Math.PI/6,t.dropShadowDistance=void 0!==t.dropShadowDistance?t.dropShadowDistance:5,t.dropShadowBlur=void 0!==t.dropShadowBlur?t.dropShadowBlur:0,t.padding=t.padding||0,t.textBaseline=t.textBaseline||"alphabetic",t.lineJoin=t.lineJoin||"miter",t.miterLimit=t.miterLimit||10,this._style=t,this.dirty=!0}},text:{get:function(){return this._text},set:function(t){t=t.toString()||" ",this._text!==t&&(this._text=t,this.dirty=!0)}}}),i.prototype.updateText=function(){var t=this._style;this.context.font=t.font;for(var e=t.wordWrap?this.wordWrap(this._text):this._text,r=e.split(/(?:\r\n|\r|\n)/),i=new Array(r.length),n=0,o=this.determineFontProperties(t.font),s=0;s0?(this.context.shadowColor=t.dropShadowColor,this.context.shadowBlur=t.dropShadowBlur):this.context.fillStyle=t.dropShadowColor;var d=Math.cos(t.dropShadowAngle)*t.dropShadowDistance,f=Math.sin(t.dropShadowAngle)*t.dropShadowDistance;for(s=0;sh;h++){for(u=0;p>u;u+=4)if(255!==l[d+u]){f=!0;break}if(f)break;d+=p}for(e.ascent=s-h,d=c-p,f=!1,h=a;h>s;h--){for(u=0;p>u;u+=4)if(255!==l[d+u]){f=!0;break}if(f)break;d-=p}e.descent=h-s,e.fontSize=e.ascent+e.descent,i.fontPropertiesCache[t]=e}return e},i.prototype.wordWrap=function(t){for(var e="",r=t.split("\n"),i=this._style.wordWrapWidth,n=0;no?(a>0&&(e+="\n"),e+=s[a],o=i-h):(o-=u,e+=" "+s[a])}n0&&e>0,this.width=this._frame.width=this.crop.width=t,this.height=this._frame.height=this.crop.height=e,r&&(this.baseTexture.width=this.width,this.baseTexture.height=this.height),this.valid&&(this.textureBuffer.resize(this.width,this.height),this.filterManager&&this.filterManager.resize(this.width,this.height)))},i.prototype.clear=function(){this.valid&&(this.renderer.type===l.RENDERER_TYPE.WEBGL&&this.renderer.gl.bindFramebuffer(this.renderer.gl.FRAMEBUFFER,this.textureBuffer.frameBuffer),this.textureBuffer.clear())},i.prototype.renderWebGL=function(t,e,r,i){if(this.valid){if(i=void 0!==i?i:!0,this.textureBuffer.transform=e,this.textureBuffer.activate(),t.worldAlpha=1,i){t.worldTransform.identity(),t.currentBounds=null;var n,o,s=t.children;for(n=0,o=s.length;o>n;++n)s[n].updateTransform()}var a=this.renderer.filterManager;this.renderer.filterManager=this.filterManager,this.renderer.renderDisplayObject(t,this.textureBuffer,r),this.renderer.filterManager=a}},i.prototype.renderCanvas=function(t,e,r,i){if(this.valid){i=!!i;var n=c;n.identity(),e&&n.append(e);var o=t.worldTransform;t.worldTransform=n,t.worldAlpha=1;var s,a,h=t.children;for(s=0,a=h.length;a>s;++s)h[s].updateTransform();r&&this.textureBuffer.clear();var u=this.textureBuffer.context,l=this.renderer.resolution;this.renderer.resolution=this.resolution,this.renderer.renderDisplayObject(t,u),this.renderer.resolution=l,t.worldTransform===n&&(t.worldTransform=o)}},i.prototype.destroy=function(){o.prototype.destroy.call(this,!0),this.textureBuffer.destroy(),this.filterManager&&this.filterManager.destroy(),this.renderer=null},i.prototype.getImage=function(){var t=new Image;return t.src=this.getBase64(),t},i.prototype.getBase64=function(){return this.getCanvas().toDataURL()},i.prototype.getCanvas=function(){if(this.renderer.type===l.RENDERER_TYPE.WEBGL){var t=this.renderer.gl,e=this.textureBuffer.size.width,r=this.textureBuffer.size.height,i=new Uint8Array(4*e*r);t.bindFramebuffer(t.FRAMEBUFFER,this.textureBuffer.frameBuffer),t.readPixels(0,0,e,r,t.RGBA,t.UNSIGNED_BYTE,i),t.bindFramebuffer(t.FRAMEBUFFER,null);var n=new h(e,r),o=n.context.getImageData(0,0,e,r);return o.data.set(i),n.context.putImageData(o,0,0),n.canvas}return this.textureBuffer.canvas},i.prototype.getPixels=function(){var t,e;if(this.renderer.type===l.RENDERER_TYPE.WEBGL){var r=this.renderer.gl;t=this.textureBuffer.size.width,e=this.textureBuffer.size.height;var i=new Uint8Array(4*t*e);return r.bindFramebuffer(r.FRAMEBUFFER,this.textureBuffer.frameBuffer),r.readPixels(0,0,t,e,r.RGBA,r.UNSIGNED_BYTE,i),r.bindFramebuffer(r.FRAMEBUFFER,null),i}return t=this.textureBuffer.canvas.width,e=this.textureBuffer.canvas.height,this.textureBuffer.canvas.getContext("2d").getImageData(0,0,t,e).data},i.prototype.getPixel=function(t,e){if(this.renderer.type===l.RENDERER_TYPE.WEBGL){var r=this.renderer.gl,i=new Uint8Array(4);return r.bindFramebuffer(r.FRAMEBUFFER,this.textureBuffer.frameBuffer),r.readPixels(t,e,1,1,r.RGBA,r.UNSIGNED_BYTE,i),r.bindFramebuffer(r.FRAMEBUFFER,null),i}return this.textureBuffer.canvas.getContext("2d").getImageData(t,e,1,1).data}},{"../const":38,"../math":55,"../renderers/canvas/utils/CanvasBuffer":67,"../renderers/webgl/managers/FilterManager":77,"../renderers/webgl/utils/RenderTarget":89,"./BaseTexture":97,"./Texture":99}],99:[function(t,e,r){function i(t,e,r,n,o){a.call(this),this.noFrame=!1,e||(this.noFrame=!0,e=new h.Rectangle(0,0,1,1)),t instanceof i&&(t=t.baseTexture),this.baseTexture=t,this._frame=e,this.trim=n,this.valid=!1,this.requiresUpdate=!1,this._uvs=null,this.width=0,this.height=0,this.crop=r||e,this.rotate=!!o,t.hasLoaded?(this.noFrame&&(e=new h.Rectangle(0,0,t.width,t.height),t.on("update",this.onBaseTextureUpdated,this)),this.frame=e):t.once("loaded",this.onBaseTextureLoaded,this)}var n=t("./BaseTexture"),o=t("./VideoBaseTexture"),s=t("./TextureUvs"),a=t("eventemitter3"),h=t("../math"),u=t("../utils");i.prototype=Object.create(a.prototype),i.prototype.constructor=i,e.exports=i,Object.defineProperties(i.prototype,{frame:{get:function(){return this._frame},set:function(t){if(this._frame=t,this.noFrame=!1,this.width=t.width,this.height=t.height,!this.trim&&!this.rotate&&(t.x+t.width>this.baseTexture.width||t.y+t.height>this.baseTexture.height))throw new Error("Texture Error: frame does not fit inside the base Texture dimensions "+this);this.valid=t&&t.width&&t.height&&this.baseTexture.hasLoaded,this.trim?(this.width=this.trim.width,this.height=this.trim.height,this._frame.width=this.trim.width,this._frame.height=this.trim.height):this.crop=t,this.valid&&this._updateUvs()}}}),i.prototype.update=function(){this.baseTexture.update()},i.prototype.onBaseTextureLoaded=function(t){this.noFrame?this.frame=new h.Rectangle(0,0,t.width,t.height):this.frame=this._frame,this.emit("update",this)},i.prototype.onBaseTextureUpdated=function(t){this._frame.width=t.width,this._frame.height=t.height,this.emit("update",this)},i.prototype.destroy=function(t){this.baseTexture&&(t&&this.baseTexture.destroy(),this.baseTexture.off("update",this.onBaseTextureUpdated,this),this.baseTexture.off("loaded",this.onBaseTextureLoaded,this),this.baseTexture=null),this._frame=null,this._uvs=null,this.trim=null,this.crop=null,this.valid=!1,this.off("dispose",this.dispose,this),this.off("update",this.update,this)},i.prototype.clone=function(){return new i(this.baseTexture,this.frame,this.crop,this.trim,this.rotate)},i.prototype._updateUvs=function(){this._uvs||(this._uvs=new s),this._uvs.set(this.crop,this.baseTexture,this.rotate)},i.fromImage=function(t,e,r){var o=u.TextureCache[t];return o||(o=new i(n.fromImage(t,e,r)),u.TextureCache[t]=o),o},i.fromFrame=function(t){var e=u.TextureCache[t];if(!e)throw new Error('The frameId "'+t+'" does not exist in the texture cache');return e},i.fromCanvas=function(t,e){return new i(n.fromCanvas(t,e))},i.fromVideo=function(t,e){return"string"==typeof t?i.fromVideoUrl(t,e):new i(o.fromVideo(t,e))},i.fromVideoUrl=function(t,e){return new i(o.fromUrl(t,e))},i.addTextureToCache=function(t,e){u.TextureCache[e]=t},i.removeTextureFromCache=function(t){var e=u.TextureCache[t];return delete u.TextureCache[t],delete u.BaseTextureCache[t],e},i.EMPTY=new i(new n)},{"../math":55,"../utils":105,"./BaseTexture":97,"./TextureUvs":100,"./VideoBaseTexture":101,eventemitter3:25}],100:[function(t,e,r){function i(){this.x0=0,this.y0=0,this.x1=1,this.y1=0,this.x2=1,this.y2=1,this.x3=0,this.y3=1,this.xy0_uint32=0,this.xy1_uint32=0,this.xy2_uint32=0,this.xy3_uint32=0,this.uvs_uint32=new Uint32Array(4)}e.exports=i,i.prototype.set=function(t,e,r){var i=e.width,n=e.height;r?(this.x0=(t.x+t.height)/i,this.y0=t.y/n,this.x1=(t.x+t.height)/i,this.y1=(t.y+t.width)/n,this.x2=t.x/i,this.y2=(t.y+t.width)/n,this.x3=t.x/i,this.y3=t.y/n):(this.x0=t.x/i,this.y0=t.y/n,this.x1=(t.x+t.width)/i,this.y1=t.y/n,this.x2=(t.x+t.width)/i,this.y2=(t.y+t.height)/n,this.x3=t.x/i,this.y3=(t.y+t.height)/n),this.uvs_uint32[0]=(65535*this.y0&65535)<<16|65535*this.x0&65535,this.uvs_uint32[1]=(65535*this.y1&65535)<<16|65535*this.x1&65535,this.uvs_uint32[2]=(65535*this.y2&65535)<<16|65535*this.x2&65535,this.uvs_uint32[3]=(65535*this.y3&65535)<<16|65535*this.x3&65535}},{}],101:[function(t,e,r){function i(t,e){if(!t)throw new Error("No video source element specified.");(t.readyState===t.HAVE_ENOUGH_DATA||t.readyState===t.HAVE_FUTURE_DATA)&&t.width&&t.height&&(t.complete=!0),o.call(this,t,e),this.autoUpdate=!1,this._onUpdate=this._onUpdate.bind(this),this._onCanPlay=this._onCanPlay.bind(this),t.complete||(t.addEventListener("canplay",this._onCanPlay),t.addEventListener("canplaythrough",this._onCanPlay),t.addEventListener("play",this._onPlayStart.bind(this)),t.addEventListener("pause",this._onPlayStop.bind(this))),this.__loaded=!1}function n(t,e){e||(e="video/"+t.substr(t.lastIndexOf(".")+1));var r=document.createElement("source");return r.src=t,r.type=e,r}var o=t("./BaseTexture"),s=t("../utils");i.prototype=Object.create(o.prototype),i.prototype.constructor=i,e.exports=i,i.prototype._onUpdate=function(){this.autoUpdate&&(window.requestAnimationFrame(this._onUpdate),this.update())},i.prototype._onPlayStart=function(){this.autoUpdate||(window.requestAnimationFrame(this._onUpdate),this.autoUpdate=!0)},i.prototype._onPlayStop=function(){this.autoUpdate=!1},i.prototype._onCanPlay=function(){this.hasLoaded=!0,this.source&&(this.source.removeEventListener("canplay",this._onCanPlay),this.source.removeEventListener("canplaythrough",this._onCanPlay),this.width=this.source.videoWidth,this.height=this.source.videoHeight,this.source.play(),this.__loaded||(this.__loaded=!0,this.emit("loaded",this)))},i.prototype.destroy=function(){this.source&&this.source._pixiId&&(delete s.BaseTextureCache[this.source._pixiId],delete this.source._pixiId),o.prototype.destroy.call(this)},i.fromVideo=function(t,e){t._pixiId||(t._pixiId="video_"+s.uid());var r=s.BaseTextureCache[t._pixiId];return r||(r=new i(t,e),s.BaseTextureCache[t._pixiId]=r),r},i.fromUrl=function(t,e){var r=document.createElement("video");if(Array.isArray(t))for(var o=0;othis._maxElapsedMS&&(e=this._maxElapsedMS),this.deltaTime=e*n.TARGET_FPMS*this.speed,this._emitter.emit(s,this.deltaTime),this.lastTime=t},e.exports=i},{"../const":38,eventemitter3:25}],103:[function(t,e,r){var i=t("./Ticker"),n=new i;n.autoStart=!0,e.exports={shared:n,Ticker:i}},{"./Ticker":102}],104:[function(t,e,r){var i=function(t){for(var e=6*t,r=new Uint16Array(e),i=0,n=0;e>i;i+=6,n+=4)r[i+0]=n+0,r[i+1]=n+1,r[i+2]=n+2,r[i+3]=n+0,r[i+4]=n+2,r[i+5]=n+3;return r};e.exports=i},{}],105:[function(t,e,r){var i=t("../const"),n=e.exports={_uid:0,_saidHello:!1,EventEmitter:t("eventemitter3"),pluginTarget:t("./pluginTarget"),async:t("async"),uid:function(){return++n._uid},hex2rgb:function(t,e){return e=e||[],e[0]=(t>>16&255)/255,e[1]=(t>>8&255)/255,e[2]=(255&t)/255,e},hex2string:function(t){return t=t.toString(16),t="000000".substr(0,6-t.length)+t,"#"+t},rgb2hex:function(t){return(255*t[0]<<16)+(255*t[1]<<8)+255*t[2]},canUseNewCanvasBlendModes:function(){if("undefined"==typeof document)return!1;var t="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAQAAAABAQMAAADD8p2OAAAAA1BMVEX/",e="AAAACklEQVQI12NgAAAAAgAB4iG8MwAAAABJRU5ErkJggg==",r=new Image;r.src=t+"AP804Oa6"+e;var i=new Image;i.src=t+"/wCKxvRF"+e;var n=document.createElement("canvas");n.width=6,n.height=1;var o=n.getContext("2d");o.globalCompositeOperation="multiply",o.drawImage(r,0,0),o.drawImage(i,2,0);var s=o.getImageData(2,0,1,1).data;return 255===s[0]&&0===s[1]&&0===s[2]},getNextPowerOfTwo:function(t){if(t>0&&0===(t&t-1))return t;for(var e=1;t>e;)e<<=1;return e},isPowerOfTwo:function(t,e){return t>0&&0===(t&t-1)&&e>0&&0===(e&e-1)},getResolutionOfUrl:function(t){var e=i.RETINA_PREFIX.exec(t);return e?parseFloat(e[1]):1},sayHello:function(t){if(!n._saidHello){if(navigator.userAgent.toLowerCase().indexOf("chrome")>-1){var e=["\n %c %c %c Pixi.js "+i.VERSION+" - ✰ "+t+" ✰ %c %c http://www.pixijs.com/ %c %c ♥%c♥%c♥ \n\n","background: #ff66a5; padding:5px 0;","background: #ff66a5; padding:5px 0;","color: #ff66a5; background: #030307; padding:5px 0;","background: #ff66a5; padding:5px 0;","background: #ffc3dc; padding:5px 0;","background: #ff66a5; padding:5px 0;","color: #ff2424; background: #fff; padding:5px 0;","color: #ff2424; background: #fff; padding:5px 0;","color: #ff2424; background: #fff; padding:5px 0;"];window.console.log.apply(console,e)}else window.console&&window.console.log("Pixi.js "+i.VERSION+" - "+t+" - http://www.pixijs.com/");n._saidHello=!0}},isWebGLSupported:function(){var t={stencil:!0};try{if(!window.WebGLRenderingContext)return!1;var e=document.createElement("canvas"),r=e.getContext("webgl",t)||e.getContext("experimental-webgl",t);return!(!r||!r.getContextAttributes().stencil)}catch(i){return!1}},sign:function(t){return t?0>t?-1:1:0},removeItems:function(t,e,r){var i=t.length;if(!(e>=i||0===r)){r=e+r>i?i-e:r;for(var n=e,o=i-r;o>n;++n)t[n]=t[n+r];t.length=o}},TextureCache:{},BaseTextureCache:{}}},{"../const":38,"./pluginTarget":106,async:16,eventemitter3:25}],106:[function(t,e,r){function i(t){t.__plugins={},t.registerPlugin=function(e,r){t.__plugins[e]=r},t.prototype.initPlugins=function(){this.plugins=this.plugins||{};for(var e in t.__plugins)this.plugins[e]=new t.__plugins[e](this)},t.prototype.destroyPlugins=function(){for(var t in this.plugins)this.plugins[t].destroy(),this.plugins[t]=null;this.plugins=null}}e.exports={mixin:function(t){i(t)}}},{}],107:[function(t,e,r){var i=t("./core"),n=t("./mesh"),o=t("./extras"),s=t("./filters");i.SpriteBatch=function(){throw new ReferenceError("SpriteBatch does not exist any more, please use the new ParticleContainer instead.")},i.AssetLoader=function(){throw new ReferenceError("The loader system was overhauled in pixi v3, please see the new PIXI.loaders.Loader class.")},Object.defineProperties(i,{Stage:{get:function(){return console.warn("You do not need to use a PIXI Stage any more, you can simply render any container."),i.Container}},DisplayObjectContainer:{get:function(){return console.warn("DisplayObjectContainer has been shortened to Container, please use Container from now on."),i.Container}},Strip:{get:function(){return console.warn("The Strip class has been renamed to Mesh and moved to mesh.Mesh, please use mesh.Mesh from now on."),n.Mesh}},Rope:{get:function(){return console.warn("The Rope class has been moved to mesh.Rope, please use mesh.Rope from now on."),n.Rope}},MovieClip:{get:function(){return console.warn("The MovieClip class has been moved to extras.MovieClip, please use extras.MovieClip from now on."),o.MovieClip}},TilingSprite:{get:function(){return console.warn("The TilingSprite class has been moved to extras.TilingSprite, please use extras.TilingSprite from now on."),o.TilingSprite}},BitmapText:{get:function(){return console.warn("The BitmapText class has been moved to extras.BitmapText, please use extras.BitmapText from now on."),o.BitmapText}},blendModes:{get:function(){return console.warn("The blendModes has been moved to BLEND_MODES, please use BLEND_MODES from now on."),i.BLEND_MODES}},scaleModes:{get:function(){return console.warn("The scaleModes has been moved to SCALE_MODES, please use SCALE_MODES from now on."),i.SCALE_MODES}},BaseTextureCache:{get:function(){return console.warn("The BaseTextureCache class has been moved to utils.BaseTextureCache, please use utils.BaseTextureCache from now on."),i.utils.BaseTextureCache}},TextureCache:{get:function(){return console.warn("The TextureCache class has been moved to utils.TextureCache, please use utils.TextureCache from now on."),i.utils.TextureCache}},math:{get:function(){return console.warn("The math namespace is deprecated, please access members already accessible on PIXI."),i}}}),i.Sprite.prototype.setTexture=function(t){this.texture=t,console.warn("setTexture is now deprecated, please use the texture property, e.g : sprite.texture = texture;")},o.BitmapText.prototype.setText=function(t){this.text=t,console.warn("setText is now deprecated, please use the text property, e.g : myBitmapText.text = 'my text';")},i.Text.prototype.setText=function(t){this.text=t,console.warn("setText is now deprecated, please use the text property, e.g : myText.text = 'my text';")},i.Text.prototype.setStyle=function(t){this.style=t,console.warn("setStyle is now deprecated, please use the style property, e.g : myText.style = style;")},i.Texture.prototype.setFrame=function(t){this.frame=t,console.warn("setFrame is now deprecated, please use the frame property, e.g : myTexture.frame = frame;")},Object.defineProperties(s,{AbstractFilter:{get:function(){return console.warn("filters.AbstractFilter is an undocumented alias, please use AbstractFilter from now on."),i.AbstractFilter}},FXAAFilter:{get:function(){return console.warn("filters.FXAAFilter is an undocumented alias, please use FXAAFilter from now on."),i.FXAAFilter}},SpriteMaskFilter:{get:function(){return console.warn("filters.SpriteMaskFilter is an undocumented alias, please use SpriteMaskFilter from now on."),i.SpriteMaskFilter}}}),i.utils.uuid=function(){return console.warn("utils.uuid() is deprecated, please use utils.uid() from now on."),i.utils.uid()}},{"./core":52,"./extras":114,"./filters":131,"./mesh":156}],108:[function(t,e,r){function i(t,e){n.Container.call(this),e=e||{},this.textWidth=0,this.textHeight=0,this._glyphs=[],this._font={tint:void 0!==e.tint?e.tint:16777215,align:e.align||"left",name:null,size:0},this.font=e.font,this._text=t,this.maxWidth=0,this.maxLineHeight=0,this.dirty=!1,this.updateText()}var n=t("../core");i.prototype=Object.create(n.Container.prototype),i.prototype.constructor=i,e.exports=i,Object.defineProperties(i.prototype,{tint:{get:function(){return this._font.tint},set:function(t){this._font.tint="number"==typeof t&&t>=0?t:16777215,this.dirty=!0}},align:{get:function(){return this._font.align},set:function(t){this._font.align=t||"left",this.dirty=!0}},font:{get:function(){return this._font},set:function(t){t&&("string"==typeof t?(t=t.split(" "),this._font.name=1===t.length?t[0]:t.slice(1).join(" "),this._font.size=t.length>=2?parseInt(t[0],10):i.fonts[this._font.name].size):(this._font.name=t.name,this._font.size="number"==typeof t.size?t.size:parseInt(t.size,10)),this.dirty=!0)}},text:{get:function(){return this._text},set:function(t){t=t.toString()||" ",this._text!==t&&(this._text=t,this.dirty=!0)}}}),i.prototype.updateText=function(){for(var t=i.fonts[this._font.name],e=new n.Point,r=null,o=[],s=0,a=0,h=[],u=0,l=this._font.size/t.size,c=-1,p=0,d=0;d0&&e.x*l>this.maxWidth)n.utils.removeItems(o,c,d-c),d=c,c=-1,h.push(s),a=Math.max(a,s),u++,e.x=0,e.y+=t.lineHeight,r=null;else{var v=t.chars[f];v&&(r&&v.kerning[r]&&(e.x+=v.kerning[r]),o.push({texture:v.texture,line:u,charCode:f,position:new n.Point(e.x+v.xOffset,e.y+v.yOffset)}),s=e.x+(v.texture.width+v.xOffset),e.x+=v.xAdvance,p=Math.max(p,v.yOffset+v.texture.height),r=f)}}h.push(s),a=Math.max(a,s);var g=[];for(d=0;u>=d;d++){var m=0;"right"===this._font.align?m=a-h[d]:"center"===this._font.align&&(m=(a-h[d])/2),g.push(m)}var y=o.length,x=this.tint;for(d=0;y>d;d++){var b=this._glyphs[d];b?b.texture=o[d].texture:(b=new n.Sprite(o[d].texture),this._glyphs.push(b)),b.position.x=(o[d].position.x+g[o[d].line])*l,b.position.y=o[d].position.y*l, +b.scale.x=b.scale.y=l,b.tint=x,b.parent||this.addChild(b)}for(d=y;dt&&(t+=this._textures.length),t}}}),i.prototype.stop=function(){this.playing&&(this.playing=!1,n.ticker.shared.remove(this.update,this))},i.prototype.play=function(){this.playing||(this.playing=!0,n.ticker.shared.add(this.update,this))},i.prototype.gotoAndStop=function(t){this.stop(),this._currentTime=t,this._texture=this._textures[this.currentFrame]},i.prototype.gotoAndPlay=function(t){this._currentTime=t,this.play()},i.prototype.update=function(t){var e=this.animationSpeed*t;if(null!==this._durations){var r=this._currentTime%1*this._durations[this.currentFrame];for(r+=e/60*1e3;0>r;)this._currentTime--,r+=this._durations[this.currentFrame];var i=Math.sign(this.animationSpeed*t);for(this._currentTime=Math.floor(this._currentTime);r>=this._durations[this.currentFrame];)r-=this._durations[this.currentFrame]*i,this._currentTime+=i;this._currentTime+=r/this._durations[this.currentFrame]}else this._currentTime+=e;this._currentTime<0&&!this.loop?(this.gotoAndStop(0),this.onComplete&&this.onComplete()):this._currentTime>=this._textures.length&&!this.loop?(this.gotoAndStop(this._textures.length-1),this.onComplete&&this.onComplete()):this._texture=this._textures[this.currentFrame]},i.prototype.destroy=function(){this.stop(),n.Sprite.prototype.destroy.call(this)},i.fromFrames=function(t){for(var e=[],r=0;rx?x:t,t=t>_?_:t,t=t>E?E:t,r=y,r=r>b?b:r,r=r>T?T:r,r=r>S?S:r,e=m,e=x>e?x:e,e=_>e?_:e,e=E>e?E:e,i=y,i=b>i?b:i,i=T>i?T:i,i=S>i?S:i;var w=this._bounds;return w.x=t,w.width=e-t,w.y=r,w.height=i-r,this._currentBounds=w,w},i.prototype.containsPoint=function(t){this.worldTransform.applyInverse(t,o);var e,r=this._width,i=this._height,n=-r*this.anchor.x;return o.x>n&&o.xe&&o.y 0.2) n = 65600.0; // :\n if (gray > 0.3) n = 332772.0; // *\n if (gray > 0.4) n = 15255086.0; // o\n if (gray > 0.5) n = 23385164.0; // &\n if (gray > 0.6) n = 15252014.0; // 8\n if (gray > 0.7) n = 13199452.0; // @\n if (gray > 0.8) n = 11512810.0; // #\n\n vec2 p = mod( uv / ( pixelSize * 0.5 ), 2.0) - vec2(1.0);\n col = col * character(n, p);\n\n gl_FragColor = vec4(col, 1.0);\n}\n",{dimensions:{type:"4fv",value:new Float32Array([0,0,0,0])},pixelSize:{type:"1f",value:8}})}var n=t("../../core");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i,Object.defineProperties(i.prototype,{size:{get:function(){return this.uniforms.pixelSize.value},set:function(t){this.uniforms.pixelSize.value=t}}})},{"../../core":52}],116:[function(t,e,r){function i(){n.AbstractFilter.call(this),this.blurXFilter=new o,this.blurYFilter=new s,this.defaultFilter=new n.AbstractFilter}var n=t("../../core"),o=t("../blur/BlurXFilter"),s=t("../blur/BlurYFilter");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.applyFilter=function(t,e,r){var i=t.filterManager.getRenderTarget(!0);this.defaultFilter.applyFilter(t,e,r),this.blurXFilter.applyFilter(t,e,i),t.blendModeManager.setBlendMode(n.BLEND_MODES.SCREEN),this.blurYFilter.applyFilter(t,i,r),t.blendModeManager.setBlendMode(n.BLEND_MODES.NORMAL),t.filterManager.returnRenderTarget(i)},Object.defineProperties(i.prototype,{blur:{get:function(){return this.blurXFilter.blur},set:function(t){this.blurXFilter.blur=this.blurYFilter.blur=t}},blurX:{get:function(){return this.blurXFilter.blur},set:function(t){this.blurXFilter.blur=t}},blurY:{get:function(){return this.blurYFilter.blur},set:function(t){this.blurYFilter.blur=t}}})},{"../../core":52,"../blur/BlurXFilter":119,"../blur/BlurYFilter":120}],117:[function(t,e,r){function i(t,e){n.AbstractFilter.call(this,"attribute vec2 aVertexPosition;\nattribute vec2 aTextureCoord;\nattribute vec4 aColor;\n\nuniform float strength;\nuniform float dirX;\nuniform float dirY;\nuniform mat3 projectionMatrix;\n\nvarying vec2 vTextureCoord;\nvarying vec4 vColor;\nvarying vec2 vBlurTexCoords[3];\n\nvoid main(void)\n{\n gl_Position = vec4((projectionMatrix * vec3((aVertexPosition), 1.0)).xy, 0.0, 1.0);\n vTextureCoord = aTextureCoord;\n\n vBlurTexCoords[0] = aTextureCoord + vec2( (0.004 * strength) * dirX, (0.004 * strength) * dirY );\n vBlurTexCoords[1] = aTextureCoord + vec2( (0.008 * strength) * dirX, (0.008 * strength) * dirY );\n vBlurTexCoords[2] = aTextureCoord + vec2( (0.012 * strength) * dirX, (0.012 * strength) * dirY );\n\n vColor = vec4(aColor.rgb * aColor.a, aColor.a);\n}\n","precision lowp float;\n\nvarying vec2 vTextureCoord;\nvarying vec2 vBlurTexCoords[3];\nvarying vec4 vColor;\n\nuniform sampler2D uSampler;\n\nvoid main(void)\n{\n gl_FragColor = vec4(0.0);\n\n gl_FragColor += texture2D(uSampler, vTextureCoord ) * 0.3989422804014327;\n gl_FragColor += texture2D(uSampler, vBlurTexCoords[ 0]) * 0.2419707245191454;\n gl_FragColor += texture2D(uSampler, vBlurTexCoords[ 1]) * 0.05399096651318985;\n gl_FragColor += texture2D(uSampler, vBlurTexCoords[ 2]) * 0.004431848411938341;\n}\n",{strength:{type:"1f",value:1},dirX:{type:"1f",value:t||0},dirY:{type:"1f",value:e||0}}),this.defaultFilter=new n.AbstractFilter,this.passes=1,this.dirX=t||0,this.dirY=e||0,this.strength=4}var n=t("../../core");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.applyFilter=function(t,e,r,i){var n=this.getShader(t);if(this.uniforms.strength.value=this.strength/4/this.passes*(e.frame.width/e.size.width),1===this.passes)t.filterManager.applyFilter(n,e,r,i);else{var o=t.filterManager.getRenderTarget(!0);t.filterManager.applyFilter(n,e,o,i);for(var s=0;s>16&255)/255,s=(r>>8&255)/255,a=(255&r)/255,h=(i>>16&255)/255,u=(i>>8&255)/255,l=(255&i)/255,c=[.3,.59,.11,0,0,o,s,a,t,0,h,u,l,e,0,o-h,s-u,a-l,0,0];this._loadMatrix(c,n)},i.prototype.night=function(t,e){t=t||.1;var r=[-2*t,-t,0,0,0,-t,0,t,0,0,0,t,2*t,0,0,0,0,0,1,0];this._loadMatrix(r,e)},i.prototype.predator=function(t,e){var r=[11.224130630493164*t,-4.794486999511719*t,-2.8746118545532227*t,0*t,.40342438220977783*t,-3.6330697536468506*t,9.193157196044922*t,-2.951810836791992*t,0*t,-1.316135048866272*t,-3.2184197902679443*t,-4.2375030517578125*t,7.476448059082031*t,0*t,.8044459223747253*t,0,0,0,1,0];this._loadMatrix(r,e)},i.prototype.lsd=function(t){var e=[2,-.4,.5,0,0,-.5,2,-.4,0,0,-.4,-.5,3,0,0,0,0,0,1,0];this._loadMatrix(e,t)},i.prototype.reset=function(){var t=[1,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,1,0];this._loadMatrix(t,!1)},Object.defineProperties(i.prototype,{matrix:{get:function(){return this.uniforms.m.value},set:function(t){this.uniforms.m.value=t}}})},{"../../core":52}],123:[function(t,e,r){function i(){n.AbstractFilter.call(this,null,"precision mediump float;\n\nvarying vec2 vTextureCoord;\n\nuniform sampler2D uSampler;\nuniform float step;\n\nvoid main(void)\n{\n vec4 color = texture2D(uSampler, vTextureCoord);\n\n color = floor(color * step) / step;\n\n gl_FragColor = color;\n}\n",{step:{type:"1f",value:5}})}var n=t("../../core");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i,Object.defineProperties(i.prototype,{step:{get:function(){return this.uniforms.step.value},set:function(t){this.uniforms.step.value=t}}})},{"../../core":52}],124:[function(t,e,r){function i(t,e,r){n.AbstractFilter.call(this,null,"precision mediump float;\n\nvarying mediump vec2 vTextureCoord;\n\nuniform sampler2D uSampler;\nuniform vec2 texelSize;\nuniform float matrix[9];\n\nvoid main(void)\n{\n vec4 c11 = texture2D(uSampler, vTextureCoord - texelSize); // top left\n vec4 c12 = texture2D(uSampler, vec2(vTextureCoord.x, vTextureCoord.y - texelSize.y)); // top center\n vec4 c13 = texture2D(uSampler, vec2(vTextureCoord.x + texelSize.x, vTextureCoord.y - texelSize.y)); // top right\n\n vec4 c21 = texture2D(uSampler, vec2(vTextureCoord.x - texelSize.x, vTextureCoord.y)); // mid left\n vec4 c22 = texture2D(uSampler, vTextureCoord); // mid center\n vec4 c23 = texture2D(uSampler, vec2(vTextureCoord.x + texelSize.x, vTextureCoord.y)); // mid right\n\n vec4 c31 = texture2D(uSampler, vec2(vTextureCoord.x - texelSize.x, vTextureCoord.y + texelSize.y)); // bottom left\n vec4 c32 = texture2D(uSampler, vec2(vTextureCoord.x, vTextureCoord.y + texelSize.y)); // bottom center\n vec4 c33 = texture2D(uSampler, vTextureCoord + texelSize); // bottom right\n\n gl_FragColor =\n c11 * matrix[0] + c12 * matrix[1] + c13 * matrix[2] +\n c21 * matrix[3] + c22 * matrix[4] + c23 * matrix[5] +\n c31 * matrix[6] + c32 * matrix[7] + c33 * matrix[8];\n\n gl_FragColor.a = c22.a;\n}\n",{ +matrix:{type:"1fv",value:new Float32Array(t)},texelSize:{type:"v2",value:{x:1/e,y:1/r}}})}var n=t("../../core");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i,Object.defineProperties(i.prototype,{matrix:{get:function(){return this.uniforms.matrix.value},set:function(t){this.uniforms.matrix.value=new Float32Array(t)}},width:{get:function(){return 1/this.uniforms.texelSize.value.x},set:function(t){this.uniforms.texelSize.value.x=1/t}},height:{get:function(){return 1/this.uniforms.texelSize.value.y},set:function(t){this.uniforms.texelSize.value.y=1/t}}})},{"../../core":52}],125:[function(t,e,r){function i(){n.AbstractFilter.call(this,null,"precision mediump float;\n\nvarying vec2 vTextureCoord;\n\nuniform sampler2D uSampler;\n\nvoid main(void)\n{\n float lum = length(texture2D(uSampler, vTextureCoord.xy).rgb);\n\n gl_FragColor = vec4(1.0, 1.0, 1.0, 1.0);\n\n if (lum < 1.00)\n {\n if (mod(gl_FragCoord.x + gl_FragCoord.y, 10.0) == 0.0)\n {\n gl_FragColor = vec4(0.0, 0.0, 0.0, 1.0);\n }\n }\n\n if (lum < 0.75)\n {\n if (mod(gl_FragCoord.x - gl_FragCoord.y, 10.0) == 0.0)\n {\n gl_FragColor = vec4(0.0, 0.0, 0.0, 1.0);\n }\n }\n\n if (lum < 0.50)\n {\n if (mod(gl_FragCoord.x + gl_FragCoord.y - 5.0, 10.0) == 0.0)\n {\n gl_FragColor = vec4(0.0, 0.0, 0.0, 1.0);\n }\n }\n\n if (lum < 0.3)\n {\n if (mod(gl_FragCoord.x - gl_FragCoord.y - 5.0, 10.0) == 0.0)\n {\n gl_FragColor = vec4(0.0, 0.0, 0.0, 1.0);\n }\n }\n}\n")}var n=t("../../core");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i},{"../../core":52}],126:[function(t,e,r){function i(t,e){var r=new n.Matrix;t.renderable=!1,n.AbstractFilter.call(this,"attribute vec2 aVertexPosition;\nattribute vec2 aTextureCoord;\nattribute vec4 aColor;\n\nuniform mat3 projectionMatrix;\nuniform mat3 otherMatrix;\n\nvarying vec2 vMapCoord;\nvarying vec2 vTextureCoord;\nvarying vec4 vColor;\n\nvoid main(void)\n{\n gl_Position = vec4((projectionMatrix * vec3(aVertexPosition, 1.0)).xy, 0.0, 1.0);\n vTextureCoord = aTextureCoord;\n vMapCoord = ( otherMatrix * vec3( aTextureCoord, 1.0) ).xy;\n vColor = vec4(aColor.rgb * aColor.a, aColor.a);\n}\n","precision mediump float;\n\nvarying vec2 vMapCoord;\nvarying vec2 vTextureCoord;\nvarying vec4 vColor;\n\nuniform vec2 scale;\n\nuniform sampler2D uSampler;\nuniform sampler2D mapSampler;\n\nvoid main(void)\n{\n vec4 map = texture2D(mapSampler, vMapCoord);\n\n map -= 0.5;\n map.xy *= scale;\n\n gl_FragColor = texture2D(uSampler, vec2(vTextureCoord.x + map.x, vTextureCoord.y + map.y));\n}\n",{mapSampler:{type:"sampler2D",value:t.texture},otherMatrix:{type:"mat3",value:r.toArray(!0)},scale:{type:"v2",value:{x:1,y:1}}}),this.maskSprite=t,this.maskMatrix=r,(null===e||void 0===e)&&(e=20),this.scale=new n.Point(e,e)}var n=t("../../core");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.applyFilter=function(t,e,r){var i=t.filterManager;i.calculateMappedMatrix(e.frame,this.maskSprite,this.maskMatrix),this.uniforms.otherMatrix.value=this.maskMatrix.toArray(!0),this.uniforms.scale.value.x=this.scale.x*(1/e.frame.width),this.uniforms.scale.value.y=this.scale.y*(1/e.frame.height);var n=this.getShader(t);i.applyFilter(n,e,r)},Object.defineProperties(i.prototype,{map:{get:function(){return this.uniforms.mapSampler.value},set:function(t){this.uniforms.mapSampler.value=t}}})},{"../../core":52}],127:[function(t,e,r){function i(){n.AbstractFilter.call(this,null,"precision mediump float;\n\nvarying vec2 vTextureCoord;\nvarying vec4 vColor;\n\nuniform vec4 dimensions;\nuniform sampler2D uSampler;\n\nuniform float angle;\nuniform float scale;\n\nfloat pattern()\n{\n float s = sin(angle), c = cos(angle);\n vec2 tex = vTextureCoord * dimensions.xy;\n vec2 point = vec2(\n c * tex.x - s * tex.y,\n s * tex.x + c * tex.y\n ) * scale;\n return (sin(point.x) * sin(point.y)) * 4.0;\n}\n\nvoid main()\n{\n vec4 color = texture2D(uSampler, vTextureCoord);\n float average = (color.r + color.g + color.b) / 3.0;\n gl_FragColor = vec4(vec3(average * 10.0 - 5.0 + pattern()), color.a);\n}\n",{scale:{type:"1f",value:1},angle:{type:"1f",value:5},dimensions:{type:"4fv",value:[0,0,0,0]}})}var n=t("../../core");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i,Object.defineProperties(i.prototype,{scale:{get:function(){return this.uniforms.scale.value},set:function(t){this.uniforms.scale.value=t}},angle:{get:function(){return this.uniforms.angle.value},set:function(t){this.uniforms.angle.value=t}}})},{"../../core":52}],128:[function(t,e,r){function i(){n.AbstractFilter.call(this,"attribute vec2 aVertexPosition;\nattribute vec2 aTextureCoord;\nattribute vec4 aColor;\n\nuniform float strength;\nuniform vec2 offset;\n\nuniform mat3 projectionMatrix;\n\nvarying vec2 vTextureCoord;\nvarying vec4 vColor;\nvarying vec2 vBlurTexCoords[6];\n\nvoid main(void)\n{\n gl_Position = vec4((projectionMatrix * vec3((aVertexPosition+offset), 1.0)).xy, 0.0, 1.0);\n vTextureCoord = aTextureCoord;\n\n vBlurTexCoords[ 0] = aTextureCoord + vec2(0.0, -0.012 * strength);\n vBlurTexCoords[ 1] = aTextureCoord + vec2(0.0, -0.008 * strength);\n vBlurTexCoords[ 2] = aTextureCoord + vec2(0.0, -0.004 * strength);\n vBlurTexCoords[ 3] = aTextureCoord + vec2(0.0, 0.004 * strength);\n vBlurTexCoords[ 4] = aTextureCoord + vec2(0.0, 0.008 * strength);\n vBlurTexCoords[ 5] = aTextureCoord + vec2(0.0, 0.012 * strength);\n\n vColor = vec4(aColor.rgb * aColor.a, aColor.a);\n}\n","precision lowp float;\n\nvarying vec2 vTextureCoord;\nvarying vec2 vBlurTexCoords[6];\nvarying vec4 vColor;\n\nuniform vec3 color;\nuniform float alpha;\n\nuniform sampler2D uSampler;\n\nvoid main(void)\n{\n vec4 sum = vec4(0.0);\n\n sum += texture2D(uSampler, vBlurTexCoords[ 0])*0.004431848411938341;\n sum += texture2D(uSampler, vBlurTexCoords[ 1])*0.05399096651318985;\n sum += texture2D(uSampler, vBlurTexCoords[ 2])*0.2419707245191454;\n sum += texture2D(uSampler, vTextureCoord )*0.3989422804014327;\n sum += texture2D(uSampler, vBlurTexCoords[ 3])*0.2419707245191454;\n sum += texture2D(uSampler, vBlurTexCoords[ 4])*0.05399096651318985;\n sum += texture2D(uSampler, vBlurTexCoords[ 5])*0.004431848411938341;\n\n gl_FragColor = vec4( color.rgb * sum.a * alpha, sum.a * alpha );\n}\n",{blur:{type:"1f",value:1/512},color:{type:"c",value:[0,0,0]},alpha:{type:"1f",value:.7},offset:{type:"2f",value:[5,5]},strength:{type:"1f",value:1}}),this.passes=1,this.strength=4}var n=t("../../core");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.applyFilter=function(t,e,r,i){var n=this.getShader(t);if(this.uniforms.strength.value=this.strength/4/this.passes*(e.frame.height/e.size.height),1===this.passes)t.filterManager.applyFilter(n,e,r,i);else{for(var o=t.filterManager.getRenderTarget(!0),s=e,a=o,h=0;h= (time - params.z)) )\n {\n float diff = (dist - time);\n float powDiff = 1.0 - pow(abs(diff*params.x), params.y);\n\n float diffTime = diff * powDiff;\n vec2 diffUV = normalize(uv - center);\n texCoord = uv + (diffUV * diffTime);\n }\n\n gl_FragColor = texture2D(uSampler, texCoord);\n}\n",{center:{type:"v2",value:{x:.5,y:.5}},params:{type:"v3",value:{x:10,y:.8,z:.1}},time:{type:"1f",value:0}})}var n=t("../../core");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i,Object.defineProperties(i.prototype,{center:{get:function(){return this.uniforms.center.value},set:function(t){this.uniforms.center.value=t}},params:{get:function(){return this.uniforms.params.value},set:function(t){this.uniforms.params.value=t}},time:{get:function(){return this.uniforms.time.value},set:function(t){this.uniforms.time.value=t}}})},{"../../core":52}],138:[function(t,e,r){function i(){n.AbstractFilter.call(this,null,"precision mediump float;\n\nvarying vec2 vTextureCoord;\n\nuniform sampler2D uSampler;\nuniform float blur;\nuniform float gradientBlur;\nuniform vec2 start;\nuniform vec2 end;\nuniform vec2 delta;\nuniform vec2 texSize;\n\nfloat random(vec3 scale, float seed)\n{\n return fract(sin(dot(gl_FragCoord.xyz + seed, scale)) * 43758.5453 + seed);\n}\n\nvoid main(void)\n{\n vec4 color = vec4(0.0);\n float total = 0.0;\n\n float offset = random(vec3(12.9898, 78.233, 151.7182), 0.0);\n vec2 normal = normalize(vec2(start.y - end.y, end.x - start.x));\n float radius = smoothstep(0.0, 1.0, abs(dot(vTextureCoord * texSize - start, normal)) / gradientBlur) * blur;\n\n for (float t = -30.0; t <= 30.0; t++)\n {\n float percent = (t + offset - 0.5) / 30.0;\n float weight = 1.0 - abs(percent);\n vec4 sample = texture2D(uSampler, vTextureCoord + delta / texSize * percent * radius);\n sample.rgb *= sample.a;\n color += sample * weight;\n total += weight;\n }\n\n gl_FragColor = color / total;\n gl_FragColor.rgb /= gl_FragColor.a + 0.00001;\n}\n",{blur:{type:"1f",value:100},gradientBlur:{type:"1f",value:600},start:{type:"v2",value:{x:0,y:window.innerHeight/2}},end:{type:"v2",value:{x:600,y:window.innerHeight/2}},delta:{type:"v2",value:{x:30,y:30}},texSize:{type:"v2",value:{x:window.innerWidth,y:window.innerHeight}}}),this.updateDelta()}var n=t("../../core");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.updateDelta=function(){this.uniforms.delta.value.x=0,this.uniforms.delta.value.y=0},Object.defineProperties(i.prototype,{blur:{get:function(){return this.uniforms.blur.value},set:function(t){this.uniforms.blur.value=t}},gradientBlur:{get:function(){return this.uniforms.gradientBlur.value},set:function(t){this.uniforms.gradientBlur.value=t}},start:{get:function(){return this.uniforms.start.value},set:function(t){this.uniforms.start.value=t,this.updateDelta()}},end:{get:function(){return this.uniforms.end.value},set:function(t){this.uniforms.end.value=t,this.updateDelta()}}})},{"../../core":52}],139:[function(t,e,r){function i(){n.AbstractFilter.call(this),this.tiltShiftXFilter=new o,this.tiltShiftYFilter=new s}var n=t("../../core"),o=t("./TiltShiftXFilter"),s=t("./TiltShiftYFilter");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.applyFilter=function(t,e,r){var i=t.filterManager.getRenderTarget(!0);this.tiltShiftXFilter.applyFilter(t,e,i),this.tiltShiftYFilter.applyFilter(t,i,r),t.filterManager.returnRenderTarget(i)},Object.defineProperties(i.prototype,{blur:{get:function(){return this.tiltShiftXFilter.blur},set:function(t){this.tiltShiftXFilter.blur=this.tiltShiftYFilter.blur=t}},gradientBlur:{get:function(){return this.tiltShiftXFilter.gradientBlur},set:function(t){this.tiltShiftXFilter.gradientBlur=this.tiltShiftYFilter.gradientBlur=t}},start:{get:function(){return this.tiltShiftXFilter.start},set:function(t){this.tiltShiftXFilter.start=this.tiltShiftYFilter.start=t}},end:{get:function(){return this.tiltShiftXFilter.end},set:function(t){this.tiltShiftXFilter.end=this.tiltShiftYFilter.end=t}}})},{"../../core":52,"./TiltShiftXFilter":140,"./TiltShiftYFilter":141}],140:[function(t,e,r){function i(){n.call(this)}var n=t("./TiltShiftAxisFilter");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.updateDelta=function(){var t=this.uniforms.end.value.x-this.uniforms.start.value.x,e=this.uniforms.end.value.y-this.uniforms.start.value.y,r=Math.sqrt(t*t+e*e);this.uniforms.delta.value.x=t/r,this.uniforms.delta.value.y=e/r}},{"./TiltShiftAxisFilter":138}],141:[function(t,e,r){function i(){n.call(this)}var n=t("./TiltShiftAxisFilter");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.updateDelta=function(){var t=this.uniforms.end.value.x-this.uniforms.start.value.x,e=this.uniforms.end.value.y-this.uniforms.start.value.y,r=Math.sqrt(t*t+e*e);this.uniforms.delta.value.x=-e/r,this.uniforms.delta.value.y=t/r}},{"./TiltShiftAxisFilter":138}],142:[function(t,e,r){function i(){n.AbstractFilter.call(this,null,"precision mediump float;\n\nvarying vec2 vTextureCoord;\n\nuniform sampler2D uSampler;\nuniform float radius;\nuniform float angle;\nuniform vec2 offset;\n\nvoid main(void)\n{\n vec2 coord = vTextureCoord - offset;\n float dist = length(coord);\n\n if (dist < radius)\n {\n float ratio = (radius - dist) / radius;\n float angleMod = ratio * ratio * angle;\n float s = sin(angleMod);\n float c = cos(angleMod);\n coord = vec2(coord.x * c - coord.y * s, coord.x * s + coord.y * c);\n }\n\n gl_FragColor = texture2D(uSampler, coord+offset);\n}\n",{radius:{type:"1f",value:.5},angle:{type:"1f",value:5},offset:{type:"v2",value:{x:.5,y:.5}}})}var n=t("../../core");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i,Object.defineProperties(i.prototype,{offset:{get:function(){return this.uniforms.offset.value},set:function(t){this.uniforms.offset.value=t}},radius:{get:function(){return this.uniforms.radius.value},set:function(t){this.uniforms.radius.value=t}},angle:{get:function(){return this.uniforms.angle.value},set:function(t){this.uniforms.angle.value=t}}})},{"../../core":52}],143:[function(t,e,r){(function(r){t("./polyfill");var i=e.exports=t("./core");i.extras=t("./extras"),i.filters=t("./filters"),i.interaction=t("./interaction"),i.loaders=t("./loaders"),i.mesh=t("./mesh"),i.accessibility=t("./accessibility"),i.loader=new i.loaders.Loader,Object.assign(i,t("./deprecation")),r.PIXI=i}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{"./accessibility":37,"./core":52,"./deprecation":107,"./extras":114,"./filters":131,"./interaction":146,"./loaders":149,"./mesh":156,"./polyfill":161}],144:[function(t,e,r){function i(){this.global=new n.Point,this.target=null,this.originalEvent=null}var n=t("../core");i.prototype.constructor=i,e.exports=i,i.prototype.getLocalPosition=function(t,e,r){return t.worldTransform.applyInverse(r||this.global,e)}},{"../core":52}],145:[function(t,e,r){function i(t,e){e=e||{},this.renderer=t,this.autoPreventDefault=void 0!==e.autoPreventDefault?e.autoPreventDefault:!0,this.interactionFrequency=e.interactionFrequency||10,this.mouse=new o,this.eventData={stopped:!1,target:null,type:null,data:this.mouse,stopPropagation:function(){this.stopped=!0}},this.interactiveDataPool=[],this.interactionDOMElement=null,this.eventsAdded=!1,this.onMouseUp=this.onMouseUp.bind(this),this.processMouseUp=this.processMouseUp.bind(this),this.onMouseDown=this.onMouseDown.bind(this),this.processMouseDown=this.processMouseDown.bind(this),this.onMouseMove=this.onMouseMove.bind(this),this.processMouseMove=this.processMouseMove.bind(this),this.onMouseOut=this.onMouseOut.bind(this),this.processMouseOverOut=this.processMouseOverOut.bind(this),this.onTouchStart=this.onTouchStart.bind(this),this.processTouchStart=this.processTouchStart.bind(this),this.onTouchEnd=this.onTouchEnd.bind(this),this.processTouchEnd=this.processTouchEnd.bind(this),this.onTouchMove=this.onTouchMove.bind(this),this.processTouchMove=this.processTouchMove.bind(this),this.last=0,this.currentCursorStyle="inherit",this._tempPoint=new n.Point,this.resolution=1,this.setTargetElement(this.renderer.view,this.renderer.resolution)}var n=t("../core"),o=t("./InteractionData");Object.assign(n.DisplayObject.prototype,t("./interactiveTarget")),i.prototype.constructor=i,e.exports=i,i.prototype.setTargetElement=function(t,e){this.removeEvents(),this.interactionDOMElement=t,this.resolution=e||1,this.addEvents()},i.prototype.addEvents=function(){this.interactionDOMElement&&(n.ticker.shared.add(this.update,this),window.navigator.msPointerEnabled&&(this.interactionDOMElement.style["-ms-content-zooming"]="none",this.interactionDOMElement.style["-ms-touch-action"]="none"),window.document.addEventListener("mousemove",this.onMouseMove,!0),this.interactionDOMElement.addEventListener("mousedown",this.onMouseDown,!0),this.interactionDOMElement.addEventListener("mouseout",this.onMouseOut,!0),this.interactionDOMElement.addEventListener("touchstart",this.onTouchStart,!0),this.interactionDOMElement.addEventListener("touchend",this.onTouchEnd,!0),this.interactionDOMElement.addEventListener("touchmove",this.onTouchMove,!0),window.addEventListener("mouseup",this.onMouseUp,!0),this.eventsAdded=!0)},i.prototype.removeEvents=function(){this.interactionDOMElement&&(n.ticker.shared.remove(this.update),window.navigator.msPointerEnabled&&(this.interactionDOMElement.style["-ms-content-zooming"]="",this.interactionDOMElement.style["-ms-touch-action"]=""),window.document.removeEventListener("mousemove",this.onMouseMove,!0),this.interactionDOMElement.removeEventListener("mousedown",this.onMouseDown,!0),this.interactionDOMElement.removeEventListener("mouseout",this.onMouseOut,!0),this.interactionDOMElement.removeEventListener("touchstart",this.onTouchStart,!0),this.interactionDOMElement.removeEventListener("touchend",this.onTouchEnd,!0),this.interactionDOMElement.removeEventListener("touchmove",this.onTouchMove,!0),this.interactionDOMElement=null,window.removeEventListener("mouseup",this.onMouseUp,!0),this.eventsAdded=!1)},i.prototype.update=function(t){if(this._deltaTime+=t,!(this._deltaTime=0;h--)this.processInteractive(t,a[h],r,i,s)&&(o=!0,s=!1,a[h].interactive&&(i=!1));return n&&(i&&!o&&(e.hitArea?(e.worldTransform.applyInverse(t,this._tempPoint),o=e.hitArea.contains(this._tempPoint.x,this._tempPoint.y)):e.containsPoint&&(o=e.containsPoint(t))),e.interactive&&r(e,o)),o},i.prototype.onMouseDown=function(t){this.mouse.originalEvent=t,this.eventData.data=this.mouse,this.eventData.stopped=!1,this.mapPositionToPoint(this.mouse.global,t.clientX,t.clientY),this.autoPreventDefault&&this.mouse.originalEvent.preventDefault(),this.processInteractive(this.mouse.global,this.renderer._lastObjectRendered,this.processMouseDown,!0)},i.prototype.processMouseDown=function(t,e){var r=this.mouse.originalEvent,i=2===r.button||3===r.which;e&&(t[i?"_isRightDown":"_isLeftDown"]=!0,this.dispatchEvent(t,i?"rightdown":"mousedown",this.eventData))},i.prototype.onMouseUp=function(t){this.mouse.originalEvent=t,this.eventData.data=this.mouse,this.eventData.stopped=!1,this.mapPositionToPoint(this.mouse.global,t.clientX,t.clientY),this.processInteractive(this.mouse.global,this.renderer._lastObjectRendered,this.processMouseUp,!0)},i.prototype.processMouseUp=function(t,e){var r=this.mouse.originalEvent,i=2===r.button||3===r.which,n=i?"_isRightDown":"_isLeftDown";e?(this.dispatchEvent(t,i?"rightup":"mouseup",this.eventData),t[n]&&(t[n]=!1,this.dispatchEvent(t,i?"rightclick":"click",this.eventData))):t[n]&&(t[n]=!1,this.dispatchEvent(t,i?"rightupoutside":"mouseupoutside",this.eventData))},i.prototype.onMouseMove=function(t){this.mouse.originalEvent=t,this.eventData.data=this.mouse,this.eventData.stopped=!1,this.mapPositionToPoint(this.mouse.global,t.clientX,t.clientY),this.didMove=!0,this.cursor="inherit",this.processInteractive(this.mouse.global,this.renderer._lastObjectRendered,this.processMouseMove,!0),this.currentCursorStyle!==this.cursor&&(this.currentCursorStyle=this.cursor,this.interactionDOMElement.style.cursor=this.cursor)},i.prototype.processMouseMove=function(t,e){this.dispatchEvent(t,"mousemove",this.eventData),this.processMouseOverOut(t,e)},i.prototype.onMouseOut=function(t){this.mouse.originalEvent=t,this.eventData.stopped=!1,this.mapPositionToPoint(this.mouse.global,t.clientX,t.clientY),this.interactionDOMElement.style.cursor="inherit",this.mapPositionToPoint(this.mouse.global,t.clientX,t.clientY),this.processInteractive(this.mouse.global,this.renderer._lastObjectRendered,this.processMouseOverOut,!1)},i.prototype.processMouseOverOut=function(t,e){e?(t._over||(t._over=!0,this.dispatchEvent(t,"mouseover",this.eventData)),t.buttonMode&&(this.cursor=t.defaultCursor)):t._over&&(t._over=!1,this.dispatchEvent(t,"mouseout",this.eventData))},i.prototype.onTouchStart=function(t){this.autoPreventDefault&&t.preventDefault();for(var e=t.changedTouches,r=e.length,i=0;r>i;i++){var n=e[i],o=this.getTouchData(n);o.originalEvent=t,this.eventData.data=o,this.eventData.stopped=!1,this.processInteractive(o.global,this.renderer._lastObjectRendered,this.processTouchStart,!0),this.returnTouchData(o)}},i.prototype.processTouchStart=function(t,e){e&&(t._touchDown=!0,this.dispatchEvent(t,"touchstart",this.eventData))},i.prototype.onTouchEnd=function(t){this.autoPreventDefault&&t.preventDefault();for(var e=t.changedTouches,r=e.length,i=0;r>i;i++){var n=e[i],o=this.getTouchData(n);o.originalEvent=t,this.eventData.data=o,this.eventData.stopped=!1,this.processInteractive(o.global,this.renderer._lastObjectRendered,this.processTouchEnd,!0),this.returnTouchData(o)}},i.prototype.processTouchEnd=function(t,e){e?(this.dispatchEvent(t,"touchend",this.eventData),t._touchDown&&(t._touchDown=!1,this.dispatchEvent(t,"tap",this.eventData))):t._touchDown&&(t._touchDown=!1,this.dispatchEvent(t,"touchendoutside",this.eventData))},i.prototype.onTouchMove=function(t){this.autoPreventDefault&&t.preventDefault();for(var e=t.changedTouches,r=e.length,i=0;r>i;i++){var n=e[i],o=this.getTouchData(n);o.originalEvent=t, +this.eventData.data=o,this.eventData.stopped=!1,this.processInteractive(o.global,this.renderer._lastObjectRendered,this.processTouchMove,!0),this.returnTouchData(o)}},i.prototype.processTouchMove=function(t,e){e=e,this.dispatchEvent(t,"touchmove",this.eventData)},i.prototype.getTouchData=function(t){var e=this.interactiveDataPool.pop();return e||(e=new o),e.identifier=t.identifier,this.mapPositionToPoint(e.global,t.clientX,t.clientY),navigator.isCocoonJS&&(e.global.x=e.global.x/this.resolution,e.global.y=e.global.y/this.resolution),t.globalX=e.global.x,t.globalY=e.global.y,e},i.prototype.returnTouchData=function(t){this.interactiveDataPool.push(t)},i.prototype.destroy=function(){this.removeEvents(),this.renderer=null,this.mouse=null,this.eventData=null,this.interactiveDataPool=null,this.interactionDOMElement=null,this.onMouseUp=null,this.processMouseUp=null,this.onMouseDown=null,this.processMouseDown=null,this.onMouseMove=null,this.processMouseMove=null,this.onMouseOut=null,this.processMouseOverOut=null,this.onTouchStart=null,this.processTouchStart=null,this.onTouchEnd=null,this.processTouchEnd=null,this.onTouchMove=null,this.processTouchMove=null,this._tempPoint=null},n.WebGLRenderer.registerPlugin("interaction",i),n.CanvasRenderer.registerPlugin("interaction",i)},{"../core":52,"./InteractionData":144,"./interactiveTarget":147}],146:[function(t,e,r){e.exports={InteractionData:t("./InteractionData"),InteractionManager:t("./InteractionManager"),interactiveTarget:t("./interactiveTarget")}},{"./InteractionData":144,"./InteractionManager":145,"./interactiveTarget":147}],147:[function(t,e,r){var i={interactive:!1,buttonMode:!1,interactiveChildren:!0,defaultCursor:"pointer",_over:!1,_touchDown:!1};e.exports=i},{}],148:[function(t,e,r){function i(t,e){var r={},i=t.data.getElementsByTagName("info")[0],n=t.data.getElementsByTagName("common")[0];r.font=i.getAttribute("face"),r.size=parseInt(i.getAttribute("size"),10),r.lineHeight=parseInt(n.getAttribute("lineHeight"),10),r.chars={};for(var a=t.data.getElementsByTagName("char"),h=0;hn;n++){var o=2*n;this._renderCanvasDrawTriangle(t,e,r,o,o+2,o+4)}},i.prototype._renderCanvasTriangles=function(t){for(var e=this.vertices,r=this.uvs,i=this.indices,n=i.length,o=0;n>o;o+=3){var s=2*i[o],a=2*i[o+1],h=2*i[o+2];this._renderCanvasDrawTriangle(t,e,r,s,a,h)}},i.prototype._renderCanvasDrawTriangle=function(t,e,r,i,n,o){var s=this._texture.baseTexture.source,a=this._texture.baseTexture.width,h=this._texture.baseTexture.height,u=e[i],l=e[n],c=e[o],p=e[i+1],d=e[n+1],f=e[o+1],v=r[i]*a,g=r[n]*a,m=r[o]*a,y=r[i+1]*h,x=r[n+1]*h,b=r[o+1]*h;if(this.canvasPadding>0){var _=this.canvasPadding/this.worldTransform.a,T=this.canvasPadding/this.worldTransform.d,E=(u+l+c)/3,S=(p+d+f)/3,w=u-E,C=p-S,A=Math.sqrt(w*w+C*C);u=E+w/A*(A+_),p=S+C/A*(A+T),w=l-E,C=d-S,A=Math.sqrt(w*w+C*C),l=E+w/A*(A+_),d=S+C/A*(A+T),w=c-E,C=f-S,A=Math.sqrt(w*w+C*C),c=E+w/A*(A+_),f=S+C/A*(A+T)}t.save(),t.beginPath(),t.moveTo(u,p),t.lineTo(l,d),t.lineTo(c,f),t.closePath(),t.clip();var M=v*x+y*m+g*b-x*m-y*g-v*b,R=u*x+y*c+l*b-x*c-y*l-u*b,O=v*l+u*m+g*c-l*m-u*g-v*c,P=v*x*c+y*l*m+u*g*b-u*x*m-y*g*c-v*l*b,D=p*x+y*f+d*b-x*f-y*d-p*b,F=v*d+p*m+g*f-d*m-p*g-v*f,L=v*x*f+y*d*m+p*g*b-p*x*m-y*g*f-v*d*b;t.transform(R/M,D/M,O/M,F/M,P/M,L/M),t.drawImage(s,0,0),t.restore()},i.prototype.renderMeshFlat=function(t){var e=this.context,r=t.vertices,i=r.length/2;e.beginPath();for(var n=1;i-2>n;n++){var o=2*n,s=r[o],a=r[o+2],h=r[o+4],u=r[o+1],l=r[o+3],c=r[o+5];e.moveTo(s,u),e.lineTo(a,l),e.lineTo(h,c)}e.fillStyle="#FF0000",e.fill(),e.closePath()},i.prototype._onTextureUpdate=function(){this.updateFrame=!0},i.prototype.getBounds=function(t){if(!this._currentBounds){for(var e=t||this.worldTransform,r=e.a,i=e.b,o=e.c,s=e.d,a=e.tx,h=e.ty,u=-(1/0),l=-(1/0),c=1/0,p=1/0,d=this.vertices,f=0,v=d.length;v>f;f+=2){var g=d[f],m=d[f+1],y=r*g+o*m+a,x=s*m+i*g+h;c=c>y?y:c,p=p>x?x:p,u=y>u?y:u,l=x>l?x:l}if(c===-(1/0)||l===1/0)return n.Rectangle.EMPTY;var b=this._bounds;b.x=c,b.width=u-c,b.y=p,b.height=l-p,this._currentBounds=b}return this._currentBounds},i.prototype.containsPoint=function(t){if(!this.getBounds().contains(t.x,t.y))return!1;this.worldTransform.applyInverse(t,o);var e,r,n=this.vertices,a=s.points;if(this.drawMode===i.DRAW_MODES.TRIANGLES){var h=this.indices;for(r=this.indices.length,e=0;r>e;e+=3){var u=2*h[e],l=2*h[e+1],c=2*h[e+2];if(a[0]=n[u],a[1]=n[u+1],a[2]=n[l],a[3]=n[l+1],a[4]=n[c],a[5]=n[c+1],s.contains(o.x,o.y))return!0}}else for(r=n.length,e=0;r>e;e+=6)if(a[0]=n[e],a[1]=n[e+1],a[2]=n[e+2],a[3]=n[e+3],a[4]=n[e+4],a[5]=n[e+5],s.contains(o.x,o.y))return!0;return!1},i.DRAW_MODES={TRIANGLE_MESH:0,TRIANGLES:1}},{"../core":52}],154:[function(t,e,r){function i(t,e,r){n.call(this,t),this._ready=!0,this.segmentsX=e||10,this.segmentsY=r||10,this.drawMode=n.DRAW_MODES.TRIANGLES,this.refresh()}var n=t("./Mesh");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.refresh=function(){var t=this.segmentsX*this.segmentsY,e=[],r=[],i=[],n=[],o=this.texture,s=this.segmentsX-1,a=this.segmentsY-1,h=0,u=o.width/s,l=o.height/a;for(h=0;t>h;h++){var c=h%this.segmentsX,p=h/this.segmentsX|0;e.push(c*u,p*l),i.push(o._uvs.x0+(o._uvs.x1-o._uvs.x0)*(c/(this.segmentsX-1)),o._uvs.y0+(o._uvs.y3-o._uvs.y0)*(p/(this.segmentsY-1)))}var d=s*a;for(h=0;d>h;h++){var f=h%s,v=h/s|0,g=v*this.segmentsX+f,m=v*this.segmentsX+f+1,y=(v+1)*this.segmentsX+f,x=(v+1)*this.segmentsX+f+1;n.push(g,m,y),n.push(m,x,y)}this.vertices=new Float32Array(e),this.uvs=new Float32Array(i),this.colors=new Float32Array(r),this.indices=new Uint16Array(n)},i.prototype._onTextureUpdate=function(){n.prototype._onTextureUpdate.call(this),this._ready&&this.refresh()}},{"./Mesh":153}],155:[function(t,e,r){function i(t,e){n.call(this,t),this.points=e,this.vertices=new Float32Array(4*e.length),this.uvs=new Float32Array(4*e.length),this.colors=new Float32Array(2*e.length),this.indices=new Uint16Array(2*e.length),this._ready=!0,this.refresh()}var n=t("./Mesh"),o=t("../core");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.refresh=function(){var t=this.points;if(!(t.length<1)&&this._texture._uvs){var e=this.uvs,r=this.indices,i=this.colors,n=this._texture._uvs,s=new o.Point(n.x0,n.y0),a=new o.Point(n.x2-n.x0,n.y2-n.y0);e[0]=0+s.x,e[1]=0+s.y,e[2]=0+s.x,e[3]=1*a.y+s.y,i[0]=1,i[1]=1,r[0]=0,r[1]=1;for(var h,u,l,c=t.length,p=1;c>p;p++)h=t[p],u=4*p,l=p/(c-1),e[u]=l*a.x+s.x,e[u+1]=0+s.y,e[u+2]=l*a.x+s.x,e[u+3]=1*a.y+s.y,u=2*p,i[u]=1,i[u+1]=1,u=2*p,r[u]=u,r[u+1]=u+1;this.dirty=!0}},i.prototype._onTextureUpdate=function(){n.prototype._onTextureUpdate.call(this),this._ready&&this.refresh()},i.prototype.updateTransform=function(){var t=this.points;if(!(t.length<1)){for(var e,r,i,n,o,s,a=t[0],h=0,u=0,l=this.vertices,c=t.length,p=0;c>p;p++)r=t[p],i=4*p,e=p1&&(n=1),o=Math.sqrt(h*h+u*u),s=this._texture.height/2,h/=o,u/=o,h*=s,u*=s,l[i]=r.x+h,l[i+1]=r.y+u,l[i+2]=r.x-h,l[i+3]=r.y-u,a=r;this.containerUpdateTransform()}}},{"../core":52,"./Mesh":153}],156:[function(t,e,r){e.exports={Mesh:t("./Mesh"),Plane:t("./Plane"),Rope:t("./Rope"),MeshRenderer:t("./webgl/MeshRenderer"),MeshShader:t("./webgl/MeshShader")}},{"./Mesh":153,"./Plane":154,"./Rope":155,"./webgl/MeshRenderer":157,"./webgl/MeshShader":158}],157:[function(t,e,r){function i(t){n.ObjectRenderer.call(this,t),this.indices=new Uint16Array(15e3);for(var e=0,r=0;15e3>e;e+=6,r+=4)this.indices[e+0]=r+0,this.indices[e+1]=r+1,this.indices[e+2]=r+2,this.indices[e+3]=r+0,this.indices[e+4]=r+2,this.indices[e+5]=r+3;this.currentShader=null}var n=t("../../core"),o=t("../Mesh");i.prototype=Object.create(n.ObjectRenderer.prototype),i.prototype.constructor=i,e.exports=i,n.WebGLRenderer.registerPlugin("mesh",i),i.prototype.onContextChange=function(){},i.prototype.render=function(t){t._vertexBuffer||this._initWebGL(t);var e=this.renderer,r=e.gl,i=t._texture.baseTexture,n=t.shader,s=t.drawMode===o.DRAW_MODES.TRIANGLE_MESH?r.TRIANGLE_STRIP:r.TRIANGLES;e.blendModeManager.setBlendMode(t.blendMode),n=n?n.shaders[r.id]||n.getShader(e):e.shaderManager.plugins.meshShader,this.renderer.shaderManager.setShader(n),n.uniforms.translationMatrix.value=t.worldTransform.toArray(!0),n.uniforms.projectionMatrix.value=e.currentRenderTarget.projectionMatrix.toArray(!0),n.uniforms.alpha.value=t.worldAlpha,n.syncUniforms(),t.dirty?(t.dirty=!1,r.bindBuffer(r.ARRAY_BUFFER,t._vertexBuffer),r.bufferData(r.ARRAY_BUFFER,t.vertices,r.STATIC_DRAW),r.vertexAttribPointer(n.attributes.aVertexPosition,2,r.FLOAT,!1,0,0),r.bindBuffer(r.ARRAY_BUFFER,t._uvBuffer),r.bufferData(r.ARRAY_BUFFER,t.uvs,r.STATIC_DRAW),r.vertexAttribPointer(n.attributes.aTextureCoord,2,r.FLOAT,!1,0,0),r.activeTexture(r.TEXTURE0),i._glTextures[r.id]?r.bindTexture(r.TEXTURE_2D,i._glTextures[r.id]):this.renderer.updateTexture(i),r.bindBuffer(r.ELEMENT_ARRAY_BUFFER,t._indexBuffer),r.bufferData(r.ELEMENT_ARRAY_BUFFER,t.indices,r.STATIC_DRAW)):(r.bindBuffer(r.ARRAY_BUFFER,t._vertexBuffer),r.bufferSubData(r.ARRAY_BUFFER,0,t.vertices),r.vertexAttribPointer(n.attributes.aVertexPosition,2,r.FLOAT,!1,0,0),r.bindBuffer(r.ARRAY_BUFFER,t._uvBuffer),r.vertexAttribPointer(n.attributes.aTextureCoord,2,r.FLOAT,!1,0,0),r.activeTexture(r.TEXTURE0),i._glTextures[r.id]?r.bindTexture(r.TEXTURE_2D,i._glTextures[r.id]):this.renderer.updateTexture(i),r.bindBuffer(r.ELEMENT_ARRAY_BUFFER,t._indexBuffer),r.bufferSubData(r.ELEMENT_ARRAY_BUFFER,0,t.indices)),r.drawElements(s,t.indices.length,r.UNSIGNED_SHORT,0)},i.prototype._initWebGL=function(t){var e=this.renderer.gl;t._vertexBuffer=e.createBuffer(),t._indexBuffer=e.createBuffer(),t._uvBuffer=e.createBuffer(),e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferData(e.ARRAY_BUFFER,t.vertices,e.DYNAMIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferData(e.ARRAY_BUFFER,t.uvs,e.STATIC_DRAW),t.colors&&(t._colorBuffer=e.createBuffer(),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.bufferData(e.ARRAY_BUFFER,t.colors,e.STATIC_DRAW)),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer),e.bufferData(e.ELEMENT_ARRAY_BUFFER,t.indices,e.STATIC_DRAW)},i.prototype.flush=function(){},i.prototype.start=function(){this.currentShader=null},i.prototype.destroy=function(){n.ObjectRenderer.prototype.destroy.call(this)}},{"../../core":52,"../Mesh":153}],158:[function(t,e,r){function i(t){n.Shader.call(this,t,["precision lowp float;","attribute vec2 aVertexPosition;","attribute vec2 aTextureCoord;","uniform mat3 translationMatrix;","uniform mat3 projectionMatrix;","varying vec2 vTextureCoord;","void main(void){"," gl_Position = vec4((projectionMatrix * translationMatrix * vec3(aVertexPosition, 1.0)).xy, 0.0, 1.0);"," vTextureCoord = aTextureCoord;","}"].join("\n"),["precision lowp float;","varying vec2 vTextureCoord;","uniform float alpha;","uniform sampler2D uSampler;","void main(void){"," gl_FragColor = texture2D(uSampler, vTextureCoord) * alpha ;","}"].join("\n"),{alpha:{type:"1f",value:0},translationMatrix:{type:"mat3",value:new Float32Array(9)},projectionMatrix:{type:"mat3",value:new Float32Array(9)}},{aVertexPosition:0,aTextureCoord:0})}var n=t("../../core");i.prototype=Object.create(n.Shader.prototype),i.prototype.constructor=i,e.exports=i,n.ShaderManager.registerPlugin("meshShader",i)},{"../../core":52}],159:[function(t,e,r){Math.sign||(Math.sign=function(t){return t=+t,0===t||isNaN(t)?t:t>0?1:-1})},{}],160:[function(t,e,r){Object.assign||(Object.assign=t("object-assign"))},{"object-assign":26}],161:[function(t,e,r){t("./Object.assign"),t("./requestAnimationFrame"),t("./Math.sign")},{"./Math.sign":159,"./Object.assign":160,"./requestAnimationFrame":162}],162:[function(t,e,r){(function(t){if(Date.now&&Date.prototype.getTime||(Date.now=function(){return(new Date).getTime()}),!t.performance||!t.performance.now){var e=Date.now();t.performance||(t.performance={}),t.performance.now=function(){return Date.now()-e}}for(var r=Date.now(),i=["ms","moz","webkit","o"],n=0;ni&&(i=0),r=e,setTimeout(function(){r=Date.now(),t(performance.now())},i)}),t.cancelAnimationFrame||(t.cancelAnimationFrame=function(t){clearTimeout(t)})}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{}]},{},[143])(143)}); //# sourceMappingURL=pixi.min.js.map diff --git a/bin/pixi.min.js.map b/bin/pixi.min.js.map index 857d92a..419daff 100644 --- a/bin/pixi.min.js.map +++ b/bin/pixi.min.js.map @@ -1 +1 @@ -{"version":3,"sources":["pixi.js"],"names":["f","exports","module","define","amd","g","window","global","self","this","PIXI","e","t","n","r","s","o","u","a","require","i","Error","code","l","call","length",1,"createContext","setVertexAttribArrays","GLBuffer","GLFramebuffer","GLShader","GLTexture","VertexArrayObject","./lib/GLBuffer","./lib/GLFramebuffer","./lib/GLShader","./lib/GLTexture","./lib/VertexArrayObject","./lib/createContext","./lib/setVertexAttribArrays",2,"EMPTY_ARRAY_BUFFER","ArrayBuffer","Buffer","gl","type","data","drawType","buffer","createBuffer","ARRAY_BUFFER","STATIC_DRAW","upload","prototype","offset","dontBind","bind","byteLength","bufferSubData","bufferData","bindBuffer","createVertexBuffer","createIndexBuffer","ELEMENT_ARRAY_BUFFER","create",3,"Texture","Framebuffer","width","height","framebuffer","createFramebuffer","stencil","texture","enableTexture","framebufferTexture2D","FRAMEBUFFER","COLOR_ATTACHMENT0","TEXTURE_2D","enableStencil","createRenderbuffer","bindRenderbuffer","RENDERBUFFER","framebufferRenderbuffer","DEPTH_STENCIL_ATTACHMENT","renderbufferStorage","DEPTH_STENCIL","clear","b","clearColor","COLOR_BUFFER_BIT","bindFramebuffer","unbind","resize","texImage2D","format","destroy","deleteFramebuffer","createRGBA","enableNearestScaling","enableWrapClamp","RGBA","UNSIGNED_BYTE","fbo","createFloat32","fromData","./GLTexture",4,"compileProgram","extractAttributes","extractUniforms","generateUniformAccessObject","Shader","vertexSrc","fragmentSrc","program","attributes","uniformData","uniforms","useProgram","./shader/compileProgram","./shader/extractAttributes","./shader/extractUniforms","./shader/generateUniformAccessObject",5,"createTexture","mipmap","premultiplyAlpha","source","pixelStorei","UNPACK_PREMULTIPLY_ALPHA_WEBGL","FLOATING_POINT_AVAILABLE","uploadData","Float32Array","ext","getExtension","FLOAT","location","undefined","activeTexture","TEXTURE0","bindTexture","minFilter","linear","texParameteri","TEXTURE_MIN_FILTER","LINEAR_MIPMAP_LINEAR","NEAREST_MIPMAP_NEAREST","LINEAR","NEAREST","magFilter","TEXTURE_MAG_FILTER","enableMipmap","generateMipmap","enableLinearScaling","TEXTURE_WRAP_S","CLAMP_TO_EDGE","TEXTURE_WRAP_T","enableWrapRepeat","REPEAT","deleteTexture","fromSource",6,"nativeVaoExtension","nativeVao","createVertexArrayOES","indexBuffer","dirty","constructor","bindVertexArrayOES","activate","attrib","attribute","pointer","normalized","stride","start","enableVertexAttribArray","addAttribute","push","addIndex","options",7,"CONTEXT_UID","canvas","getContext","id",8,"GL_MAP","attribs","maxAttribs","getParameter","MAX_VERTEX_ATTRIBS","tempAttribState","Array","attribState","disableVertexAttribArray",9,"glVertShader","compileShader","VERTEX_SHADER","glFragShader","FRAGMENT_SHADER","createProgram","attachShader","linkProgram","getProgramParameter","LINK_STATUS","console","error","VALIDATE_STATUS","getError","getProgramInfoLog","warn","deleteProgram","deleteShader","src","shader","createShader","shaderSource","getShaderParameter","COMPILE_STATUS","log","getShaderInfoLog",10,"defaultValue","size","Int32Array","booleanArray","array",11,"mapType","mapSize","totalAttributes","ACTIVE_ATTRIBUTES","attribData","getActiveAttrib","name","getAttribLocation","vertexAttribPointer","./mapSize","./mapType",12,"totalUniforms","ACTIVE_UNIFORMS","getActiveUniform","replace","getUniformLocation","value","./defaultValue",13,"uniformKeys","Object","keys","fullName","nameTokens","split","uniformGroup","getUniformGroup","uniform","defineProperty","get","generateGetter","set","generateSetter","template","getterTemplate","Function","setTemplate","setterTemplate","GLSL_TO_SINGLE_SETTERS","GLSL_TO_ARRAY_SETTERS","cur","join","float","vec2","vec3","vec4","int","ivec2","ivec3","ivec4","bool","bvec2","bvec3","bvec4","mat2","mat3","mat4","sampler2D",14,"GLSL_TO_SIZE",15,"GL_TABLE","typeNames","GL_TO_GLSL_TYPES","tn","FLOAT_VEC2","FLOAT_VEC3","FLOAT_VEC4","INT","INT_VEC2","INT_VEC3","INT_VEC4","BOOL","BOOL_VEC2","BOOL_VEC3","BOOL_VEC4","FLOAT_MAT2","FLOAT_MAT3","FLOAT_MAT4","SAMPLER_2D",16,"process","noop","identity","v","toBool","notId","only_once","fn","apply","arguments","_once","_isArrayLike","arr","_isArray","_arrayEach","iterator","index","_map","result","_range","count","_reduce","memo","x","_forEachOf","object","_keys","key","_indexOf","item","_keyIterator","coll","len","_restParam","func","startIndex","Math","max","rest","_withoutIndex","callback","_eachOfLimit","limit","obj","nextKey","done","running","errored","replenish","err","doParallel","async","eachOf","doParallelLimit","doSeries","eachOfSeries","_asyncMap","eachfn","results","_filter","sort","_reject","cb","_createTester","check","getResult","iteratee","_","_findGetResult","_parallel","tasks","task","args","_concat","y","concat","_queue","worker","concurrency","payload","_insert","q","pos","started","idle","setImmediate","drain","unshift","saturated","_next","workers","removed","workersList","splice","empty","paused","kill","pause","resume","resumeCount","min","w","_console_fn","_times","mapper","_applyEach","fns","go","that","pop","ensureAsync","innerArgs","sync","previous_async","root","noConflict","_toString","toString","isArray","_isObject","k","hasOwnProperty","_setImmediate","_delay","setTimeout","nextTick","forEach","each","forEachSeries","eachSeries","forEachLimit","eachLimit","forEachOf","completed","iter","forEachOfSeries","iterate","forEachOfLimit","eachOfLimit","map","mapSeries","mapLimit","inject","foldl","reduce","foldr","reduceRight","reversed","reverse","transform","select","filter","selectLimit","filterLimit","selectSeries","filterSeries","reject","rejectLimit","rejectSeries","any","some","someLimit","all","every","everyLimit","detect","detectSeries","detectLimit","sortBy","comparator","left","right","criteria","auto","addListener","listeners","removeListener","idx","taskComplete","remainingTasks","slice","runningTasks","ready","requires","listener","taskCallback","dep","safeResults","val","rkey","retry","times","parseTimes","acc","parseInt","DEFAULT_TIMES","interval","DEFAULT_INTERVAL","wrappedTask","wrappedCallback","wrappedResults","retryAttempt","finalAttempt","seriesCallback","retryInterval","opts","attempts","series","waterfall","wrapIterator","next","parallel","parallelLimit","makeCallback","callArgs","concatSeries","whilst","test","doWhilst","calls","until","doUntil","during","truth","doDuring","queue","items","priorityQueue","_compareTasks","priority","_binarySearch","sequence","compare","beg","end","mid","cargo","dir","memoize","hasher","queues","memoized","unmemoized","unmemoize","timesSeries","timesLimit","seq","newargs","nextargs","compose","applyEach","applyEachSeries","forever","constant","values","wrapSync","asyncify","then","message","_process",17,"normalizeArray","parts","allowAboveRoot","up","last","xs","res","splitPathRe","splitPath","filename","exec","resolve","resolvedPath","resolvedAbsolute","path","cwd","TypeError","charAt","p","normalize","isAbsolute","trailingSlash","substr","paths","relative","from","to","trim","fromParts","toParts","samePartsLength","outputParts","sep","delimiter","dirname","basename","extname","str",18,"cleanUpNextTick","draining","currentQueue","queueIndex","drainQueue","timeout","run","clearTimeout","Item","fun","title","browser","env","argv","version","versions","on","once","off","removeAllListeners","emit","binding","chdir","umask",19,"RangeError","errors","mapDomain","string","regexSeparators","labels","encoded","ucs2decode","extra","output","counter","charCodeAt","ucs2encode","stringFromCharCode","basicToDigit","codePoint","base","digitToBasic","digit","flag","adapt","delta","numPoints","firstTime","floor","damp","baseMinusTMin","tMax","skew","decode","input","out","basic","j","oldi","baseMinusT","inputLength","initialN","bias","initialBias","lastIndexOf","maxInt","tMin","encode","handledCPCount","basicLength","m","currentValue","handledCPCountPlusOne","qMinusT","toUnicode","regexPunycode","toLowerCase","toASCII","regexNonASCII","freeExports","nodeType","freeModule","freeGlobal","punycode","overflow","not-basic","invalid-input","String","fromCharCode","ucs2",20,"prop","qs","eq","regexp","maxKeys","kstr","vstr","indexOf","decodeURIComponent",21,"stringifyPrimitive","isFinite","objectKeys","ks","encodeURIComponent",22,"parse","stringify","./decode","./encode",23,"Url","protocol","slashes","auth","host","port","hostname","hash","search","query","pathname","href","urlParse","url","parseQueryString","slashesDenoteHost","isObject","urlFormat","isString","urlResolve","urlResolveObject","resolveObject","arg","isNull","isNullOrUndefined","protocolPattern","portPattern","delims","unwise","autoEscape","nonHostChars","hostEndingChars","hostnameMaxLen","hostnamePartPattern","hostnamePartStart","unsafeProtocol","javascript","javascript:","hostlessProtocol","slashedProtocol","http","https","ftp","gopher","file","http:","https:","ftp:","gopher:","file:","querystring","proto","lowerProto","match","hostEnd","hec","atSign","parseHost","ipv6Hostname","hostparts","part","newpart","validParts","notHost","bit","domainArray","newOut","h","ae","esc","escape","qm","rel","relPath","shift","isSourceAbs","isRelAbs","mustEndAbs","removeAllDots","srcPath","psychotic","authInHost","hasTrailingSlash",24,"earcut","holeIndices","dim","hasHoles","outerLen","outerNode","linkedList","triangles","minX","minY","maxX","maxY","eliminateHoles","earcutLinked","clockwise","sum","insertNode","filterPoints","again","steiner","equals","area","prev","removeNode","ear","pass","indexCurve","stop","isEarHashed","isEar","cureLocalIntersections","splitEarcut","c","pointInTriangle","minTX","minTY","maxTX","maxTY","minZ","zOrder","maxZ","nextZ","z","prevZ","intersects","locallyInside","isValidDiagonal","splitPolygon","list","getLeftmost","compareX","eliminateHole","hole","findHoleBridge","hx","hy","qx","Infinity","tan","tanMin","abs","sortLinked","tail","numMerges","pSize","qSize","inSize","leftmost","ax","ay","bx","by","cx","cy","px","py","intersectsPolygon","middleInside","p1","p2","q1","q2","inside","a2","Node","b2","an","bp",25,"EE","context","EventEmitter","prefix","_events","event","exists","evt","available","ee","a1","a3","a4","a5","events","setMaxListeners","prefixed",26,"toObject","propIsEnumerable","propertyIsEnumerable","assign","target","symbols","getOwnPropertySymbols",27,"called","_each","_eachLimit","_mapLimit","_detect","main_callback","theCallback","working","drained","ts","ds",28,"Loader","baseUrl","progress","loading","_progressChunk","_beforeMiddleware","_afterMiddleware","_boundLoadResource","_loadResource","_boundOnLoad","_onLoad","_buffer","_numToLoad","resources","urlParser","Resource","add","enqueue","onComplete","_handleBaseUrl","parsedUrl","before","pre","after","use","reset","load","resource","dequeue","_dequeue","_runMiddleware","_onComplete","LOAD_TYPE","XHR_READY_STATE","XHR_RESPONSE_TYPE","./Resource","eventemitter3",29,"isDataUrl","crossOrigin","loadType","_determineLoadType","xhrType","metadata","xhr","isJson","isXml","isImage","isAudio","isVideo","_boundComplete","complete","_boundOnError","_onError","_boundOnProgress","_onProgress","_boundXhrOnError","_xhrOnError","_boundXhrOnAbort","_xhrOnAbort","_boundXhrOnLoad","_xhrOnLoad","_boundXdrOnTimeout","_xdrOnTimeout","reqType","setExtMap","substring","_url","useXdr","XDomainRequest","XMLHttpRequest","tempAnchor","removeEventListener","onerror","ontimeout","onprogress","onload","_determineCrossOrigin","IMAGE","_loadImage","AUDIO","_loadElement","VIDEO","XHR","_loadXdr","_loadXhr","Image","addEventListener","Audio","document","createElement","navigator","isCocoonJS","appendChild","_createSource","toUpperCase","_determineXhrType","open","JSON","DOCUMENT","responseType","TEXT","send","xdr","mime","nodeName","lengthComputable","loaded","total","status","statusText","responseText","DOMParser","domparser","parseFromString","div","innerHTML","response","responseURL","loc","samePort","_xhrTypeMap","_getExtension","_loadTypeMap","slashIndex","queryStart","_getMimeFromXhrType","BUFFER","BLOB","DEFAULT","UNSENT","OPENED","HEADERS_RECEIVED","LOADING","DONE","gif","png","bmp","jpg","jpeg","tif","tiff","webp","tga","xhtml","html","htm","xml","tmx","tsx","svg","json","text","txt","setExtensionLoadType","setExtensionXhrType",30,"_keyStr","encodeBinary","bytebuffer","encodedCharIndexes","inx","jnx","paddingBytes",31,"middleware","caching","memory","parsing","blob","./Loader","./middlewares/caching/memory","./middlewares/parsing/blob",32,"cache",33,"b64","URL","webkitURL","Blob","createObjectURL","revokeObjectURL","getResponseHeader","../../Resource","../../b64",34,"description","author","contributors","main","homepage","bugs","license","repository","scripts","build","docs","files","dependencies","brfs","object-assign","pixi-gl-core","resource-loader","devDependencies","browserify","chai","del","gulp","gulp-cached","gulp-concat","gulp-debug","gulp-header","gulp-jshint","gulp-mirror","gulp-plumber","gulp-rename","gulp-sourcemaps","gulp-uglify","gulp-util","jaguarjs-jsdoc","jsdoc","jshint-summary","minimist","mocha","require-dir","run-sequence","testem","vinyl-buffer","vinyl-source-stream","watchify",35,"AccessibilityManager","renderer","style","position","top","zIndex","pool","renderId","debug","children","_onKeyDown","_onMouseMove","isActive","core","DisplayObject","update","view","parentNode","deactivate","removeChild","updateAccessibleObjects","displayObject","visible","accessible","interactive","_accessibleActive","addChild","_lastObjectRendered","rect","getBoundingClientRect","sx","sy","child","utils","removeItems","_accessibleDiv","hitArea","wt","worldTransform","tx","ty","d","getBounds","capHitArea","backgroundColor","borderStyle","_onClick","_onFocus","_onFocusOut","accessibleTitle","tabIndex","interactionManager","plugins","interaction","dispatchEvent","eventData","keyCode","WebGLRenderer","registerPlugin","CanvasRenderer","../core","./accessibleTarget",36,"accessibleTarget",37,"./AccessibilityManager",38,"CONST","VERSION","PI_2","PI","RAD_TO_DEG","DEG_TO_RAD","TARGET_FPMS","RENDERER_TYPE","UNKNOWN","WEBGL","CANVAS","BLEND_MODES","NORMAL","ADD","MULTIPLY","SCREEN","OVERLAY","DARKEN","LIGHTEN","COLOR_DODGE","COLOR_BURN","HARD_LIGHT","SOFT_LIGHT","DIFFERENCE","EXCLUSION","HUE","SATURATION","COLOR","LUMINOSITY","DRAW_MODES","POINTS","LINES","LINE_LOOP","LINE_STRIP","TRIANGLES","TRIANGLE_STRIP","TRIANGLE_FAN","SCALE_MODES","RETINA_PREFIX","RESOLUTION","FILTER_RESOLUTION","DEFAULT_RENDER_OPTIONS","resolution","antialias","forceFXAA","autoResize","transparent","clearBeforeRender","preserveDrawingBuffer","roundPixels","SHAPES","POLY","RECT","CIRC","ELIP","RREC","SPRITE_BATCH_SIZE","../../package.json",39,"Container","math","RenderTexture","_tempMatrix","Matrix","defineProperties","scale","getLocalBounds","_width","_height","onChildrenChange","argumentsLength","parent","addChildAt","swapChildren","child2","index1","getChildIndex","index2","setChildIndex","currentIndex","getChildAt","removeChildAt","removeChildren","beginIndex","endIndex","begin","range","generateTexture","scaleMode","bounds","renderTexture","render","updateTransform","displayObjectUpdateTransform","containerUpdateTransform","_currentBounds","Rectangle","EMPTY","childBounds","childMaxX","childMaxY","childVisible","_bounds","containerGetBounds","matrixCache","IDENTITY","renderWebGL","worldAlpha","renderable","_mask","_filters","currentRenderer","flush","filterManager","pushFilter","maskManager","pushMask","_renderWebGL","popMask","popFilter","_renderCanvas","renderCanvas","alpha","destroyChildren","../math","../textures/RenderTexture","../utils","./DisplayObject",40,"Point","pivot","_rotation","localTransform","filterArea","_sr","_cr","_tempDisplayObjectParent","scaleX","scaleY","rotation","sin","cos","worldVisible","mask","filters","pt","lt","matrix","toGlobal","toLocal","point","applyInverse","setParent","container","setTransform","skewX","skewY","pivotX","pivotY","../const",41,"Graphics","fillAlpha","lineWidth","lineColor","graphicsData","tint","_prevTint","blendMode","currentPath","_webGL","isMask","boundsPadding","_localBounds","glDirty","boundsDirty","cachedSpriteDirty","CanvasBuffer","CanvasGraphics","GraphicsData","tempPoint","clone","updateLocalBounds","lineStyle","color","lineAlpha","shape","points","Polygon","closed","drawShape","moveTo","lineTo","quadraticCurveTo","cpX","cpY","toX","toY","xa","ya","fromX","fromY","bezierCurveTo","cpX2","cpY2","dt","dt2","dt3","t2","t3","arcTo","x1","y1","x2","y2","radius","b1","mm","dd","cc","tt","k1","sqrt","k2","j1","j2","qy","startAngle","atan2","endAngle","arc","anticlockwise","sweep","segs","ceil","startX","startY","theta","theta2","cTheta","sTheta","segMinus","remainder","real","angle","beginFill","filling","fillColor","fill","endFill","drawRect","drawRoundedRect","RoundedRectangle","drawCircle","Circle","drawEllipse","Ellipse","drawPolygon","clearDirty","canvasBuffer","fromCanvas","baseTexture","translate","renderGraphics","setObjectRenderer","graphics","compositeOperation","blendModes","globalCompositeOperation","w0","w1","h0","h1","x3","y3","x4","y4","containsPoint","contains","padding","_webgl","../display/Container","../renderers/canvas/utils/CanvasBuffer","../renderers/canvas/utils/CanvasGraphics","../textures/Texture","./GraphicsData",42,"_lineTint","_fillTint",43,"GraphicsRenderer","ObjectRenderer","graphicsDataPool","primitiveShader","complexPrimitiveShader","maximumSimplePolySize","WebGLGraphicsData","onContextChange","webGLData","shaderManager","updateGraphics","webGL","blendModeManager","setBlendMode","mode","stencilManager","pushStencil","uniform1f","_location","drawElements","UNSIGNED_SHORT","indices","popStencil","setShader","uniformMatrix3fv","translationMatrix","toArray","projectionMatrix","currentRenderTarget","uniform3fv","hex2rgb","aVertexPosition","aColor","drawCount","lastIndex","switchMode","canDrawUsingSimple","buildPoly","buildComplexPoly","buildLine","buildRectangle","buildCircle","buildRoundedRectangle","rectData","verts","vertPos","tempPoints","rrectData","recPoints","quadraticBezierCurve","vecPos","getPt","n1","n2","perc","diff","xb","yb","circleData","totalSegs","seg","firstPoint","lastPoint","midPointX","midPointY","p1x","p1y","p2x","p2y","p3x","p3y","perpx","perpy","perp2x","perp2y","perp3x","perp3y","c1","c2","denom","pdist","dist","indexCount","indexStart","../../const","../../math","../../renderers/webgl/WebGLRenderer","../../renderers/webgl/utils/ObjectRenderer","../../utils","./WebGLGraphicsData",44,"glPoints","glIndices","Uint16Array","deleteBuffer",45,"ticker","Sprite","ParticleContainer","SpriteRenderer","ParticleRenderer","Text","BaseTexture","VideoBaseTexture","TextureUvs","WebGLManager","ShaderManager","RenderTarget","AbstractFilter","FXAAFilter","SpriteMaskFilter","glCore","autoDetectRenderer","noWebGL","isWebGLSupported","./const","./display/Container","./display/DisplayObject","./graphics/Graphics","./graphics/GraphicsData","./graphics/webgl/GraphicsRenderer","./math","./particles/ParticleContainer","./particles/webgl/ParticleRenderer","./renderers/canvas/CanvasRenderer","./renderers/canvas/utils/CanvasBuffer","./renderers/canvas/utils/CanvasGraphics","./renderers/webgl/WebGLRenderer","./renderers/webgl/filters/AbstractFilter","./renderers/webgl/filters/FXAAFilter","./renderers/webgl/filters/SpriteMaskFilter","./renderers/webgl/managers/ShaderManager","./renderers/webgl/managers/WebGLManager","./renderers/webgl/shaders/Shader","./renderers/webgl/utils/ObjectRenderer","./renderers/webgl/utils/RenderTarget","./sprites/Sprite","./sprites/webgl/SpriteRenderer","./text/Text","./textures/BaseTexture","./textures/RenderTexture","./textures/Texture","./textures/TextureUvs","./textures/VideoBaseTexture","./ticker","./utils",46,"fromArray","transpose","newPos","rotate","tx1","append","d1","sr","cr","nsx","prepend","invert","copy","TEMP_MATRIX","./Point",47,48,"./Matrix","./shapes/Circle","./shapes/Ellipse","./shapes/Polygon","./shapes/Rectangle","./shapes/RoundedRectangle",49,"dx","dy","r2","./Rectangle",50,"normx","normy",51,"points_","il","xi","yi","xj","yj","intersect","../Point",52,53,54,"maxSize","properties","batchSize","maxBatchSize","_properties","_maxSize","_batchSize","_buffers","_bufferToUpdate","interactiveChildren","setProperties","uvs","particle","smallestChildIndex","bufferIndex","isRotated","positionX","positionY","finalWidth","finalHeight","globalAlpha","frame","anchor","childTransform","drawImage",55,"ParticleBuffer","dynamicPropertyFlags","vertSize","vertByteSize","dynamicProperties","staticProperties","property","staticStride","staticBuffer","staticData","dynamicStride","dynamicBuffer","dynamicData","initBuffers","dynamicOffset","DYNAMIC_DRAW","staticOffset","uploadDynamic","amount","uploadFunction","uploadStatic",56,"numIndices","tempMatrix","ParticleShader","uploadVertices","aPositionCoord","uploadPosition","aRotation","uploadRotation","aTextureCoord","uploadUvs","uploadAlpha","totalChildren","generateBuffers","uAlpha","_texture","_glTextures","updateTexture","buffers","sprite","crop","_frame","spritePosition","spriteRotation","textureUvs","_uvs","x0","y0","spriteAlpha","./ParticleBuffer","./ParticleShader",57,"TextureShader","../../renderers/webgl/shaders/TextureShader",58,"SystemRenderer","system","sayHello","_backgroundColor","_backgroundColorRgba","_backgroundColorString","hex2string","removeView",59,"refresh","CanvasMaskManager","smoothProperty","imageSmoothingEnabled","webkitImageSmoothingEnabled","mozImageSmoothingEnabled","oImageSmoothingEnabled","msImageSmoothingEnabled","initPlugins","_mapBlendModes","pluginTarget","mixin","cacheParent","screencanvas","fillStyle","clearRect","fillRect","renderDisplayObject","destroyPlugins","tempContext","canUseNewCanvasBlendModes","../SystemRenderer","./utils/CanvasMaskManager",60,61,"updateGraphicsTint","beginPath","closePath","strokeStyle","stroke","strokeRect","kappa","ox","oy","xe","ye","xm","ym","rx","ry","maxRadius","renderGraphicsMask","tintR","tintG","tintB","../../../const",62,"maskData","save","cacheAlpha","clip","restore","./CanvasGraphics",63,"CanvasTinter","getTintedTexture","roundColor","stringColor","tintCache","tintMethod","convertTintToImage","tintImage","toDataURL","tintWithMultiply","tintWithOverlay","tintWithPerPixel","rgbValues","pixelData","getImageData","pixels","putImageData","step","cacheStepsPerColorChannel","rgb2hex","canUseMultiply","../../../utils",64,"TextureManager","_managedTextures","glTextures","getTexture","hasLoaded","glTexture","uid","destroyTexture","_skipRemove","removeAll",65,"handleContextLost","handleContextRestored","_contextOptions","premultipliedAlpha","MaskManager","StencilManager","FilterManager","BlendModeManager","_initContext","mapWebGLBlendModesToPixi","drawModes","mapWebGLDrawModesToPixi","_activeShader","_activeRenderTarget","_activeTextureLocation","_activeTexture","textureManager","disable","DEPTH_TEST","CULL_FACE","enable","BLEND","rootRenderTarget","bindRenderTarget","isContextLost","renderTarget","setFilterStack","filterStack","objectRenderer","setMaskStack","stencilMaskStack","bindShader","preventDefault","destroyAll","./TextureManager","./filters/FXAAFilter","./managers/BlendModeManager","./managers/FilterManager","./managers/MaskManager","./managers/ShaderManager","./managers/StencilManager","./utils/ObjectRenderer","./utils/RenderTarget","./utils/mapWebGLBlendModesToPixi","./utils/mapWebGLDrawModesToPixi",66,"shaders","DefaultShader","defaultVertexSrc","defaultFragmentSrc","getShader","applyFilter","syncUniform","../shaders/TextureShader",67,"./AbstractFilter",68,"maskMatrix","otherMatrix","maskSprite","calculateMappedMatrix","../../../math",69,"currentBlendMode","blendFunc","./WebGLManager",70,"texturePool","textureSize","currentFrame","Quad","quad","capFilterArea","getRenderTarget","setRenderTarget","filterData","previousFilterData","vertexBuffer","defaultShader","dimensions","vertices","returnRenderTarget","flipTexture","flopTexture","temp","inputTarget","outputTarget","syncUniforms","outputMatrix","mappedMatrix","ratio","translateScaleX","translateScaleY","offsetY","../utils/Quad","../utils/RenderTarget",71,"stencilStack","alphaMaskPool","AlphaMaskFilter","pushSpriteMask","pushStencilMask","popSpriteMask","popStencilMask","alphaMaskFilter","../filters/SpriteMaskFilter",72,"maxAttibs","stack","_currentId","currentShader","ComplexPrimitiveShader","PrimitiveShader","setAttribs","../shaders/ComplexPrimitiveShader","../shaders/PrimitiveShader",73,"WebGLMaskManager","STENCIL_TEST","attachStencilBuffer","sms","bindGraphics","STENCIL_BUFFER_BIT","level","colorMask","stencilFunc","ALWAYS","stencilOp","KEEP","INVERT","EQUAL","DECR","INCR",74,75,"./Shader",76,77,"textureCount","init","compile","cacheUniformLocations","cacheAttributeLocations","_glCompile","uniform1i","uniform2f","uniform3f","uniform4f","uniform1iv","uniform2iv","uniform3iv","uniform4iv","uniform1fv","uniform2fv","uniform4fv","uniformMatrix2fv","uniformMatrix4fv","_array","initSampler2D","textureData","luminance","LUMINANCE","wrapS","wrapT",78,"customUniforms","customAttributes","uSampler",79,80,"../managers/WebGLManager",81,"colors","rect2",82,"StencilMaskStack","frameBuffer","stencilBuffer","projectionFrame","calculateProjection","viewport","pm","./StencilMaskStack",83,84,"ONE","ONE_MINUS_SRC_ALPHA","SRC_ALPHA","DST_ALPHA","DST_COLOR",85,86,"cachedTint","textureDirty","vertexDirty","vertexData","sign","_onTextureUpdate","caclulateVertices","valid","smoothingEnabled","tintedTexture","destroyBaseTexture","fromFrame","frameId","TextureCache","fromImage","imageId","crossorigin","../renderers/canvas/utils/CanvasTinter",87,"numVerts","positions","Uint32Array","createIndicesForQuads","currentBatchSize","sprites","groupCount","groups","textures","ids","blend","currentGroup","currentTexture","generateMultiTextureShader","MAX_TEXTUES","_shader","vao","aTextureId","nextTexture","_enabled","_id","uvs_uint32","renderSprites","subarray","group","../../renderers/webgl/shaders/_TextureShader","../../utils/createIndicesForQuads","./generateMultiTextureShader",88,"maxTextures","generateSampleSrc","fragTemplate","sampleValues","uSamplers",89,"_text","_style","fontPropertiesCache","fontPropertiesCanvas","fontPropertiesContext","updateText","dropShadowColor","font","align","strokeThickness","wordWrap","wordWrapWidth","dropShadow","dropShadowAngle","dropShadowDistance","dropShadowBlur","textBaseline","lineJoin","miterLimit","outputText","lines","lineWidths","maxLineWidth","fontProperties","determineFontProperties","measureText","lineHeight","fontSize","linePositionX","linePositionY","shadowColor","shadowBlur","xShadowOffset","yShadowOffset","ascent","fillText","strokeText","fontStyle","baseline","imagedata","line","descent","spaceLeft","words","wordWidth","wordWidthWithSpace","../sprites/Sprite",90,"realWidth","realHeight","isLoading","imageUrl","isPowerOfTwo","_active","loadSource","naturalWidth","naturalHeight","wasLoading","_sourceLoaded","scope","BaseTextureCache","_pixiId","dispose","updateSourceImage","newSrc","image","getResolutionOfUrl",91,"textureBuffer","_updateUvs","updateBase","currentBounds","cachedWt","realResolution","getImage","getBase64","getCanvas","webGLPixels","Uint8Array","readPixels","tempCanvas","canvasData","getPixels","getPixel","../renderers/webgl/managers/FilterManager","../renderers/webgl/utils/RenderTarget","./BaseTexture","./Texture",92,"noFrame","requiresUpdate","onBaseTextureUpdated","onBaseTextureLoaded","destroyBase","fromVideo","video","fromVideoUrl","videoUrl","fromUrl","addTextureToCache","removeTextureFromCache","./TextureUvs","./VideoBaseTexture",93,"xy0_uint32","xy1_uint32","xy2_uint32","xy3_uint32","baseFrame","tw","th",94,"readyState","HAVE_ENOUGH_DATA","HAVE_FUTURE_DATA","autoUpdate","_onUpdate","_onCanPlay","_onPlayStart","_onPlayStop","__loaded","createSource","requestAnimationFrame","videoWidth","videoHeight","play","videoSrc","fromUrls",95,"Ticker","_this","_tick","time","_requestId","_emitter","TICK","_maxElapsedMS","autoStart","deltaTime","elapsedMS","lastTime","speed","FPS","minFPS","fps","minFPMS","_requestIfNeeded","performance","now","_cancelIfNeeded","cancelAnimationFrame","_startIfPossible","addOnce","remove","currentTime",96,"shared","./Ticker",97,"totalIndices",98,"_uid","_saidHello","hex","rgb","pngHead","pngEnd","magenta","yellow","getNextPowerOfTwo","number","parseFloat","userAgent","contextOptions","WebGLRenderingContext","getContextAttributes","startIdx","removeCount","./pluginTarget",99,"__plugins","pluginName","ctor",100,"mesh","extras","SpriteBatch","ReferenceError","AssetLoader","Stage","DisplayObjectContainer","Strip","Mesh","Rope","MovieClip","TilingSprite","BitmapText","scaleModes","setTexture","setText","setStyle","setFrame","uuid","./core","./extras","./filters","./mesh",101,"textWidth","textHeight","_glyphs","_font","maxWidth","maxLineHeight","fonts","prevCharCode","chars","lastLineWidth","lastSpace","charCode","charData","kerning","xOffset","yOffset","xAdvance","lineAlignOffsets","alignOffset","lenChars","validate",102,"_textures","_durations","animationSpeed","loop","_currentTime","playing","totalFrames","gotoAndStop","frameNumber","gotoAndPlay","elapsed","lag","fromFrames","frames","fromImages","images",103,"tileScale","tilePosition","_canvasPattern","uFrame","uTransform","uPixelSize","tempUvs","tempWidth","tempHeight","modX","modY","createPattern","_tileScaleOffset","../core/renderers/canvas/utils/CanvasTinter",104,"_cacheAsBitmap","_originalRenderWebGL","_originalRenderCanvas","_originalUpdateTransform","_originalHitTest","_originalDestroy","_cachedSprite","cacheAsBitmap","_originalGetBounds","_originalContainsPoint","_renderCachedWebGL","_renderCachedCanvas","_cacheAsBitmapDestroy","_destroyCachedDisplayObject","_initCachedDisplayObject","cachedRenderTarget","_getCachedBounds","_initCachedDisplayObjectCanvas",105,"getChildByName",106,"getGlobalPosition",107,"./BitmapText","./MovieClip","./TilingSprite","./cacheAsBitmap","./getChildByName","./getGlobalPosition",108,"AsciiFilter","pixelSize","../../core",109,"BloomFilter","blurXFilter","BlurXFilter","blurYFilter","BlurYFilter","defaultFilter","blur","blurX","blurY","../blur/BlurXFilter","../blur/BlurYFilter",110,"BlurDirFilter","dirX","dirY","strength","passes",111,"BlurFilter","./BlurXFilter","./BlurYFilter",112,"flip","flop",113,114,"SmartBlurFilter",115,"ColorMatrixFilter","_loadMatrix","multiply","newMatrix","_multiply","_colorMatrix","brightness","greyscale","grayscale","blackAndWhite","hue","lumR","lumG","lumB","contrast","saturate","desaturate","negative","sepia","technicolor","polaroid","toBGR","kodachrome","browni","vintage","colorTone","desaturation","toned","lightColor","darkColor","lR","lG","lB","dR","dG","dB","night","intensity","predator","lsd",116,"ColorStepFilter",117,"ConvolutionFilter","texelSize",118,"CrossHatchFilter",119,"DisplacementFilter","mapSampler",120,"DotScreenFilter",121,"BlurYTintFilter",122,"DropShadowFilter","blurYTintFilter","_dirtyPosition","_angle","_distance","hideObject","distance","./BlurYTintFilter",123,"GrayFilter","gray",124,"InvertFilter","NoiseFilter","PixelateFilter","RGBSplitFilter","ShockwaveFilter","SepiaFilter","TiltShiftFilter","TiltShiftXFilter","TiltShiftYFilter","TwistFilter","./ascii/AsciiFilter","./bloom/BloomFilter","./blur/BlurDirFilter","./blur/BlurFilter","./blur/BlurXFilter","./blur/BlurYFilter","./blur/SmartBlurFilter","./color/ColorMatrixFilter","./color/ColorStepFilter","./convolution/ConvolutionFilter","./crosshatch/CrossHatchFilter","./displacement/DisplacementFilter","./dot/DotScreenFilter","./dropshadow/DropShadowFilter","./gray/GrayFilter","./invert/InvertFilter","./noise/NoiseFilter","./pixelate/PixelateFilter","./rgb/RGBSplitFilter","./sepia/SepiaFilter","./shockwave/ShockwaveFilter","./tiltshift/TiltShiftFilter","./tiltshift/TiltShiftXFilter","./tiltshift/TiltShiftYFilter","./twist/TwistFilter",125,126,"noise",127,128,"red","green","blue",129,130,"center","params",131,"TiltShiftAxisFilter","gradientBlur","innerHeight","texSize","innerWidth","updateDelta",132,"tiltShiftXFilter","tiltShiftYFilter","./TiltShiftXFilter","./TiltShiftYFilter",133,"./TiltShiftAxisFilter",134,135,136,"loaders","accessibility","loader","./accessibility","./deprecation","./interaction","./loaders","./polyfill",137,"InteractionData","originalEvent","getLocalPosition","globalPos",138,"InteractionManager","autoPreventDefault","interactionFrequency","mouse","stopped","stopPropagation","interactiveDataPool","interactionDOMElement","eventsAdded","onMouseUp","processMouseUp","onMouseDown","processMouseDown","onMouseMove","processMouseMove","onMouseOut","processMouseOverOut","onTouchStart","processTouchStart","onTouchEnd","processTouchEnd","onTouchMove","processTouchMove","currentCursorStyle","_tempPoint","setTargetElement","element","removeEvents","addEvents","msPointerEnabled","_deltaTime","didMove","cursor","processInteractive","eventString","mapPositionToPoint","hitTest","hit","interactiveParent","clientX","clientY","isRightButton","button","which","isDown","_over","buttonMode","defaultCursor","changedTouches","cLength","touchEvent","touchData","getTouchData","returnTouchData","_touchDown","identifier","globalX","globalY","./InteractionData","./interactiveTarget",139,"interactiveTarget","./InteractionManager",140,141,"info","getElementsByTagName","common","getAttribute","letters","textureRect","kernings","first","second","bitmapFont","xmlUrl","textureUrl","loadOptions","imageMetadata","../extras",142,"bitmapFontParser","spritesheetParser","textureParser","./bitmapFontParser","./loader","./spritesheetParser","./textureParser",143,"ResourceLoader","_pixiMiddleware","addPixiMiddleware",144,"route","meta","rotated","trimmed","spriteSourceSize","sourceSize",145,146,"drawMode","canvasPadding","TRIANGLE_MESH","tempPolygon","_renderCanvasTriangleMesh","_renderCanvasTriangles","_renderCanvasDrawTriangle","index0","textureSource","textureWidth","textureHeight","u0","u1","u2","v0","v1","v2","paddingX","paddingY","centerX","centerY","normX","normY","deltaA","deltaB","deltaC","deltaD","deltaE","deltaF","renderMeshFlat","updateFrame","rawX","rawY","ind0","ind1","ind2",147,"Plane","segmentsX","segmentsY","_ready","segmentsXSub","segmentsYSub","sizeX","sizeY","totalSub","xpos","ypos","value2","value3","value4","./Mesh",148,"factor","nextPoint","perpLength","num","perpX","perpY",149,"MeshRenderer","MeshShader","./Plane","./Rope","./webgl/MeshRenderer","./webgl/MeshShader",150,"_vertexBuffer","_initWebGL","meshShader","_uvBuffer","_indexBuffer","_colorBuffer","../Mesh",151,152,"isNaN",153,154,"./Math.sign","./Object.assign","./requestAnimationFrame",155,"Date","getTime","startTime","vendors","delay"],"mappings":"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EAAA,GAAAuE,EAAA,GAAAvE,EAAA,GAAAuE,EAAA,GAAAvE,EAAA,GAAAuE,EAAA,IAAAvE,EAAA,GAAAuE,EAAA,IACAqkB,EAAA,GAAA5oB,EAAA,GAAAuE,EAAA,GAAAvE,EAAA,GAAAuE,EAAA,GAAAvE,EAAA,GAAAuE,EAAA,IAAAvE,EAAA,GAAAuE,EAAA,IAGAqkB,EAAA,IAAA5oB,EAAA,IAAAuE,EAAA,GAAAvE,EAAA,IAAAuE,EAAA,GAAAvE,EAAA,IAAAuE,EAAA,IAAAvE,EAAA,IAAAuE,EAAA,IACAqkB,EAAA,IAAA5oB,EAAA,IAAAuE,EAAA,GAAAvE,EAAA,IAAAuE,EAAA,GAAAvE,EAAA,IAAAuE,EAAA,IAAAvE,EAAA,IAAAuE,EAAA,IACAqkB,EAAA,IAAA5oB,EAAA,IAAAuE,EAAA,GAAAvE,EAAA,IAAAuE,EAAA,GAAAvE,EAAA,IAAAuE,EAAA,IAAAvE,EAAA,IAAAuE,EAAA,IACAqkB,EAAA,IAAA5oB,EAAA,IAAAuE,EAAA,GAAAvE,EAAA,IAAAuE,EAAA,GAAAvE,EAAA,IAAAuE,EAAA,IAAAvE,EAAA,IAAAuE,EAAA,IACAqkB,EAAA,IAAA5oB,EAAA,IAAAuE,EAAA,GAAAvE,EAAA,IAAAuE,EAAA,GAAAvE,EAAA,IAAAuE,EAAA,IAAAvE,EAAA,IAAAuE,EAAA,IAGAqkB,EAAA,IAAA5oB,EAAA,IAAAuE,EAAA,GAAAvE,EAAA,IAAAuE,EAAA,GAAAvE,EAAA,IAAAuE,EAAA,IAAAvE,EAAA,IAAAuE,EAAA,IACAqkB,EAAA,IAAA5oB,EAAA,IAAAuE,EAAA,GAAAvE,EAAA,IAAAuE,EAAA,GAAAvE,EAAA,IAAAuE,EAAA,IAAAvE,EAAA,IAAAuE,EAAA,IACAqkB,EAAA,IAAA5oB,EAAA,IAAAuE,EAAA,GAAAvE,EAAA,IAAAuE,EAAA,GAAAvE,EAAA,IAAAuE,EAAA,IAAAvE,EAAA,IAAAuE,EAAA,IACAqkB,EAAA,IAAA5oB,EAAA,IAAAuE,EAAA,GAAAvE,EAAA,IAAAuE,EAAA,GAAAvE,EAAA,IAAAuE,EAAA,IAAAvE,EAAA,IAAAuE,EAAA,IACAqkB,EAA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","file":"pixi.min.js","sourcesContent":[null],"sourceRoot":"./"} \ No newline at end of file +{"version":3,"sources":["pixi.js"],"names":["f","exports","module","define","amd","g","window","global","self","this","PIXI","e","t","n","r","s","o","u","a","require","i","Error","code","l","call","length",1,"createContext","setVertexAttribArrays","GLBuffer","GLFramebuffer","GLShader","GLTexture","VertexArrayObject","./lib/GLBuffer","./lib/GLFramebuffer","./lib/GLShader","./lib/GLTexture","./lib/VertexArrayObject","./lib/createContext","./lib/setVertexAttribArrays",2,"EMPTY_ARRAY_BUFFER","ArrayBuffer","Buffer","gl","type","data","drawType","buffer","createBuffer","ARRAY_BUFFER","STATIC_DRAW","upload","prototype","offset","dontBind","bind","byteLength","bufferSubData","bufferData","bindBuffer","createVertexBuffer","createIndexBuffer","ELEMENT_ARRAY_BUFFER","create",3,"Texture","Framebuffer","width","height","framebuffer","createFramebuffer","stencil","texture","enableTexture","framebufferTexture2D","FRAMEBUFFER","COLOR_ATTACHMENT0","TEXTURE_2D","enableStencil","createRenderbuffer","bindRenderbuffer","RENDERBUFFER","framebufferRenderbuffer","DEPTH_STENCIL_ATTACHMENT","renderbufferStorage","DEPTH_STENCIL","clear","b","clearColor","COLOR_BUFFER_BIT","bindFramebuffer","unbind","resize","uploadData","destroy","deleteFramebuffer","createRGBA","fromData","enableNearestScaling","enableWrapClamp","fbo","createFloat32","./GLTexture",4,"compileProgram","extractAttributes","extractUniforms","generateUniformAccessObject","Shader","vertexSrc","fragmentSrc","program","attributes","uniformData","uniforms","useProgram","./shader/compileProgram","./shader/extractAttributes","./shader/extractUniforms","./shader/generateUniformAccessObject",5,"format","createTexture","mipmap","premultiplyAlpha","RGBA","UNSIGNED_BYTE","source","pixelStorei","UNPACK_PREMULTIPLY_ALPHA_WEBGL","texImage2D","FLOATING_POINT_AVAILABLE","Float32Array","ext","getExtension","FLOAT","location","undefined","activeTexture","TEXTURE0","bindTexture","minFilter","linear","texParameteri","TEXTURE_MIN_FILTER","LINEAR_MIPMAP_LINEAR","NEAREST_MIPMAP_NEAREST","LINEAR","NEAREST","magFilter","TEXTURE_MAG_FILTER","enableMipmap","generateMipmap","enableLinearScaling","TEXTURE_WRAP_S","CLAMP_TO_EDGE","TEXTURE_WRAP_T","enableWrapRepeat","REPEAT","deleteTexture","fromSource",6,"nativeVaoExtension","nativeVao","createVertexArrayOES","indexBuffer","dirty","constructor","bindVertexArrayOES","activate","attrib","attribute","pointer","normalized","stride","start","enableVertexAttribArray","addAttribute","push","addIndex","options","draw","size","drawElements","UNSIGNED_SHORT",7,"CONTEXT_UID","canvas","getContext","id",8,"GL_MAP","attribs","maxAttribs","getParameter","MAX_VERTEX_ATTRIBS","tempAttribState","Array","attribState","disableVertexAttribArray",9,"glVertShader","compileShader","VERTEX_SHADER","glFragShader","FRAGMENT_SHADER","createProgram","attachShader","linkProgram","getProgramParameter","LINK_STATUS","console","error","VALIDATE_STATUS","getError","getProgramInfoLog","warn","deleteProgram","deleteShader","src","shader","createShader","shaderSource","getShaderParameter","COMPILE_STATUS","log","getShaderInfoLog",10,"defaultValue","Int32Array","booleanArray","array",11,"mapType","mapSize","totalAttributes","ACTIVE_ATTRIBUTES","attribData","getActiveAttrib","name","getAttribLocation","vertexAttribPointer","./mapSize","./mapType",12,"totalUniforms","ACTIVE_UNIFORMS","getActiveUniform","replace","getUniformLocation","value","./defaultValue",13,"uniformKeys","Object","keys","fullName","nameTokens","split","uniformGroup","getUniformGroup","uniform","defineProperty","get","generateGetter","set","generateSetter","template","getterTemplate","Function","setTemplate","setterTemplate","GLSL_TO_SINGLE_SETTERS","GLSL_TO_ARRAY_SETTERS","cur","join","float","vec2","vec3","vec4","int","ivec2","ivec3","ivec4","bool","bvec2","bvec3","bvec4","mat2","mat3","mat4","sampler2D",14,"GLSL_TO_SIZE",15,"GL_TABLE","typeNames","GL_TO_GLSL_TYPES","tn","FLOAT_VEC2","FLOAT_VEC3","FLOAT_VEC4","INT","INT_VEC2","INT_VEC3","INT_VEC4","BOOL","BOOL_VEC2","BOOL_VEC3","BOOL_VEC4","FLOAT_MAT2","FLOAT_MAT3","FLOAT_MAT4","SAMPLER_2D",16,"process","noop","identity","v","toBool","notId","only_once","fn","apply","arguments","_once","_isArrayLike","arr","_isArray","_arrayEach","iterator","index","_map","result","_range","count","_reduce","memo","x","_forEachOf","object","_keys","key","_indexOf","item","_keyIterator","coll","len","_restParam","func","startIndex","Math","max","rest","_withoutIndex","callback","_eachOfLimit","limit","obj","nextKey","done","running","errored","replenish","err","doParallel","async","eachOf","doParallelLimit","doSeries","eachOfSeries","_asyncMap","eachfn","results","_filter","sort","_reject","cb","_createTester","check","getResult","iteratee","_","_findGetResult","_parallel","tasks","task","args","_concat","y","concat","_queue","worker","concurrency","payload","_insert","q","pos","started","idle","setImmediate","drain","unshift","saturated","_next","workers","removed","workersList","splice","empty","paused","kill","pause","resume","resumeCount","min","w","_console_fn","_times","mapper","_applyEach","fns","go","that","pop","ensureAsync","innerArgs","sync","previous_async","root","noConflict","_toString","toString","isArray","_isObject","k","hasOwnProperty","_setImmediate","_delay","setTimeout","nextTick","forEach","each","forEachSeries","eachSeries","forEachLimit","eachLimit","forEachOf","completed","iter","forEachOfSeries","iterate","forEachOfLimit","eachOfLimit","map","mapSeries","mapLimit","inject","foldl","reduce","foldr","reduceRight","reversed","reverse","transform","select","filter","selectLimit","filterLimit","selectSeries","filterSeries","reject","rejectLimit","rejectSeries","any","some","someLimit","all","every","everyLimit","detect","detectSeries","detectLimit","sortBy","comparator","left","right","criteria","auto","addListener","listeners","removeListener","idx","taskComplete","remainingTasks","slice","runningTasks","ready","requires","listener","taskCallback","dep","safeResults","val","rkey","retry","times","parseTimes","acc","parseInt","DEFAULT_TIMES","interval","DEFAULT_INTERVAL","wrappedTask","wrappedCallback","wrappedResults","retryAttempt","finalAttempt","seriesCallback","retryInterval","opts","attempts","series","waterfall","wrapIterator","next","parallel","parallelLimit","makeCallback","callArgs","concatSeries","whilst","test","doWhilst","calls","until","doUntil","during","truth","doDuring","queue","items","priorityQueue","_compareTasks","priority","_binarySearch","sequence","compare","beg","end","mid","cargo","dir","memoize","hasher","queues","memoized","unmemoized","unmemoize","timesSeries","timesLimit","seq","newargs","nextargs","compose","applyEach","applyEachSeries","forever","constant","values","wrapSync","asyncify","then","message","_process",17,"normalizeArray","parts","allowAboveRoot","up","last","xs","res","splitPathRe","splitPath","filename","exec","resolve","resolvedPath","resolvedAbsolute","path","cwd","TypeError","charAt","p","normalize","isAbsolute","trailingSlash","substr","paths","relative","from","to","trim","fromParts","toParts","samePartsLength","outputParts","sep","delimiter","dirname","basename","extname","str",18,"cleanUpNextTick","draining","currentQueue","queueIndex","drainQueue","timeout","run","clearTimeout","Item","fun","title","browser","env","argv","version","versions","on","once","off","removeAllListeners","emit","binding","chdir","umask",19,"RangeError","errors","mapDomain","string","regexSeparators","labels","encoded","ucs2decode","extra","output","counter","charCodeAt","ucs2encode","stringFromCharCode","basicToDigit","codePoint","base","digitToBasic","digit","flag","adapt","delta","numPoints","firstTime","floor","damp","baseMinusTMin","tMax","skew","decode","input","out","basic","j","oldi","baseMinusT","inputLength","initialN","bias","initialBias","lastIndexOf","maxInt","tMin","encode","handledCPCount","basicLength","m","currentValue","handledCPCountPlusOne","qMinusT","toUnicode","regexPunycode","toLowerCase","toASCII","regexNonASCII","freeExports","nodeType","freeModule","freeGlobal","punycode","overflow","not-basic","invalid-input","String","fromCharCode","ucs2",20,"prop","qs","eq","regexp","maxKeys","kstr","vstr","indexOf","decodeURIComponent",21,"stringifyPrimitive","isFinite","objectKeys","ks","encodeURIComponent",22,"parse","stringify","./decode","./encode",23,"Url","protocol","slashes","auth","host","port","hostname","hash","search","query","pathname","href","urlParse","url","parseQueryString","slashesDenoteHost","isObject","urlFormat","isString","urlResolve","urlResolveObject","resolveObject","arg","isNull","isNullOrUndefined","protocolPattern","portPattern","delims","unwise","autoEscape","nonHostChars","hostEndingChars","hostnameMaxLen","hostnamePartPattern","hostnamePartStart","unsafeProtocol","javascript","javascript:","hostlessProtocol","slashedProtocol","http","https","ftp","gopher","file","http:","https:","ftp:","gopher:","file:","querystring","proto","lowerProto","match","hostEnd","hec","atSign","parseHost","ipv6Hostname","hostparts","part","newpart","validParts","notHost","bit","domainArray","newOut","h","ae","esc","escape","qm","rel","relPath","shift","isSourceAbs","isRelAbs","mustEndAbs","removeAllDots","srcPath","psychotic","authInHost","hasTrailingSlash",24,"earcut","holeIndices","dim","hasHoles","outerLen","outerNode","linkedList","triangles","minX","minY","maxX","maxY","eliminateHoles","earcutLinked","clockwise","sum","insertNode","filterPoints","again","steiner","equals","area","prev","removeNode","ear","pass","indexCurve","stop","isEarHashed","isEar","cureLocalIntersections","splitEarcut","c","pointInTriangle","minTX","minTY","maxTX","maxTY","minZ","zOrder","maxZ","nextZ","z","prevZ","intersects","locallyInside","isValidDiagonal","splitPolygon","list","getLeftmost","compareX","eliminateHole","hole","findHoleBridge","hx","hy","qx","Infinity","tan","tanMin","abs","sortLinked","tail","numMerges","pSize","qSize","inSize","leftmost","ax","ay","bx","by","cx","cy","px","py","intersectsPolygon","middleInside","p1","p2","q1","q2","inside","a2","Node","b2","an","bp",25,"EE","context","EventEmitter","prefix","_events","event","exists","evt","available","ee","a1","a3","a4","a5","events","setMaxListeners","prefixed",26,"toObject","propIsEnumerable","propertyIsEnumerable","assign","target","symbols","getOwnPropertySymbols",27,"called","_each","_eachLimit","_mapLimit","_detect","main_callback","theCallback","working","drained","ts","ds",28,"Loader","baseUrl","progress","loading","_progressChunk","_beforeMiddleware","_afterMiddleware","_boundLoadResource","_loadResource","_boundOnLoad","_onLoad","_buffer","_numToLoad","resources","urlParser","Resource","add","enqueue","onComplete","_handleBaseUrl","parsedUrl","before","pre","after","use","reset","load","resource","dequeue","_dequeue","_runMiddleware","_onComplete","LOAD_TYPE","XHR_READY_STATE","XHR_RESPONSE_TYPE","./Resource","eventemitter3",29,"isDataUrl","crossOrigin","loadType","_determineLoadType","xhrType","metadata","xhr","isJson","isXml","isImage","isAudio","isVideo","_boundComplete","complete","_boundOnError","_onError","_boundOnProgress","_onProgress","_boundXhrOnError","_xhrOnError","_boundXhrOnAbort","_xhrOnAbort","_boundXhrOnLoad","_xhrOnLoad","_boundXdrOnTimeout","_xdrOnTimeout","reqType","setExtMap","substring","_url","useXdr","XDomainRequest","XMLHttpRequest","tempAnchor","removeEventListener","onerror","ontimeout","onprogress","onload","_determineCrossOrigin","IMAGE","_loadImage","AUDIO","_loadElement","VIDEO","XHR","_loadXdr","_loadXhr","Image","addEventListener","Audio","document","createElement","navigator","isCocoonJS","appendChild","_createSource","toUpperCase","_determineXhrType","open","JSON","DOCUMENT","responseType","TEXT","send","xdr","mime","nodeName","lengthComputable","loaded","total","status","statusText","responseText","DOMParser","domparser","parseFromString","div","innerHTML","response","responseURL","loc","samePort","_xhrTypeMap","_getExtension","_loadTypeMap","slashIndex","queryStart","_getMimeFromXhrType","BUFFER","BLOB","DEFAULT","UNSENT","OPENED","HEADERS_RECEIVED","LOADING","DONE","gif","png","bmp","jpg","jpeg","tif","tiff","webp","tga","xhtml","html","htm","xml","tmx","tsx","svg","json","text","txt","setExtensionLoadType","setExtensionXhrType",30,"_keyStr","encodeBinary","bytebuffer","encodedCharIndexes","inx","jnx","paddingBytes",31,"middleware","caching","memory","parsing","blob","./Loader","./middlewares/caching/memory","./middlewares/parsing/blob",32,"cache",33,"b64","URL","webkitURL","Blob","createObjectURL","revokeObjectURL","getResponseHeader","../../Resource","../../b64",34,"description","author","contributors","main","homepage","bugs","license","repository","scripts","build","docs","files","dependencies","brfs","object-assign","pixi-gl-core","resource-loader","devDependencies","browserify","chai","del","gulp","gulp-cached","gulp-concat","gulp-debug","gulp-header","gulp-jshint","gulp-mirror","gulp-plumber","gulp-rename","gulp-sourcemaps","gulp-uglify","gulp-util","jaguarjs-jsdoc","jsdoc","jshint-summary","minimist","mocha","require-dir","run-sequence","testem","vinyl-buffer","vinyl-source-stream","watchify",35,"AccessibilityManager","renderer","style","position","top","zIndex","pool","renderId","debug","children","_onKeyDown","_onMouseMove","isActive","core","DisplayObject","update","view","parentNode","deactivate","removeChild","updateAccessibleObjects","displayObject","visible","accessible","interactive","_accessibleActive","addChild","_lastObjectRendered","rect","getBoundingClientRect","sx","sy","child","utils","removeItems","_accessibleDiv","hitArea","wt","worldTransform","tx","ty","d","getBounds","capHitArea","backgroundColor","borderStyle","_onClick","_onFocus","_onFocusOut","accessibleTitle","tabIndex","interactionManager","plugins","interaction","dispatchEvent","eventData","keyCode","WebGLRenderer","registerPlugin","CanvasRenderer","../core","./accessibleTarget",36,"accessibleTarget",37,"./AccessibilityManager",38,"CONST","VERSION","PI_2","PI","RAD_TO_DEG","DEG_TO_RAD","TARGET_FPMS","RENDERER_TYPE","UNKNOWN","WEBGL","CANVAS","BLEND_MODES","NORMAL","ADD","MULTIPLY","SCREEN","OVERLAY","DARKEN","LIGHTEN","COLOR_DODGE","COLOR_BURN","HARD_LIGHT","SOFT_LIGHT","DIFFERENCE","EXCLUSION","HUE","SATURATION","COLOR","LUMINOSITY","DRAW_MODES","POINTS","LINES","LINE_LOOP","LINE_STRIP","TRIANGLES","TRIANGLE_STRIP","TRIANGLE_FAN","SCALE_MODES","RETINA_PREFIX","RESOLUTION","FILTER_RESOLUTION","DEFAULT_RENDER_OPTIONS","resolution","antialias","forceFXAA","autoResize","transparent","clearBeforeRender","preserveDrawingBuffer","roundPixels","SHAPES","POLY","RECT","CIRC","ELIP","RREC","SPRITE_BATCH_SIZE","../../package.json",39,"Container","math","RenderTexture","_tempMatrix","Matrix","defineProperties","scale","getLocalBounds","_width","_height","onChildrenChange","argumentsLength","parent","addChildAt","swapChildren","child2","index1","getChildIndex","index2","setChildIndex","currentIndex","getChildAt","removeChildAt","removeChildren","beginIndex","endIndex","begin","range","generateTexture","scaleMode","bounds","renderTexture","render","updateTransform","displayObjectUpdateTransform","dirtyTransform","containerUpdateTransform","_currentBounds","Rectangle","EMPTY","childBounds","childMaxX","childMaxY","childVisible","_bounds","containerGetBounds","matrixCache","IDENTITY","renderWebGL","worldAlpha","renderable","_mask","_filters","currentRenderer","flush","filterManager","pushFilter","maskManager","pushMask","_renderWebGL","popMask","popFilter","_renderCanvas","renderCanvas","alpha","destroyChildren","../math","../textures/RenderTexture","../utils","./DisplayObject",40,"Point","_position","CachePoint","pivot","_rotation","localTransform","filterArea","_sr","_cr","_tempDisplayObjectParent","doc","posiiton","scaleX","scaleY","rotation","sin","cos","worldVisible","mask","filters","pt","lt","matrix","toGlobal","toLocal","point","applyInverse","setParent","container","setTransform","skewX","skewY","pivotX","pivotY","../const",41,"Graphics","fillAlpha","lineWidth","lineColor","graphicsData","tint","_prevTint","blendMode","currentPath","_webGL","isMask","boundsPadding","_localBounds","glDirty","boundsDirty","cachedSpriteDirty","CanvasBuffer","CanvasGraphics","GraphicsData","tempPoint","clone","updateLocalBounds","lineStyle","color","lineAlpha","shape","points","Polygon","closed","drawShape","moveTo","lineTo","quadraticCurveTo","cpX","cpY","toX","toY","xa","ya","fromX","fromY","bezierCurveTo","cpX2","cpY2","dt","dt2","dt3","t2","t3","arcTo","x1","y1","x2","y2","radius","b1","mm","dd","cc","tt","k1","sqrt","k2","j1","j2","qy","startAngle","atan2","endAngle","arc","anticlockwise","sweep","segs","ceil","startX","startY","theta","theta2","cTheta","sTheta","segMinus","remainder","real","angle","beginFill","filling","fillColor","fill","endFill","drawRect","drawRoundedRect","RoundedRectangle","drawCircle","Circle","drawEllipse","Ellipse","drawPolygon","clearDirty","canvasBuffer","fromCanvas","baseTexture","translate","renderGraphics","setObjectRenderer","graphics","compositeOperation","blendModes","globalCompositeOperation","w0","w1","h0","h1","x3","y3","x4","y4","containsPoint","contains","padding","_webgl","../display/Container","../renderers/canvas/utils/CanvasBuffer","../renderers/canvas/utils/CanvasGraphics","../textures/Texture","./GraphicsData",42,"_lineTint","_fillTint",43,"GraphicsRenderer","ObjectRenderer","graphicsDataPool","primitiveShader","complexPrimitiveShader","maximumSimplePolySize","WebGLGraphicsData","PrimitiveShader","buildLine","buildPoly","buildComplexPoly","buildRectangle","buildRoundedRectangle","buildCircle","onContextChange","webGLData","updateGraphics","webGL","blendModeManager","setBlendMode","mode","bindShader","translationMatrix","toArray","hex2rgb","aVertexPosition","aColor","indices","drawCount","lastIndex","switchMode","canDrawUsingSimple","../../const","../../math","../../renderers/webgl/WebGLRenderer","../../renderers/webgl/utils/ObjectRenderer","../../utils","./WebGLGraphicsData","./shaders/PrimitiveShader","./utils/buildCircle","./utils/buildComplexPoly","./utils/buildLine","./utils/buildPoly","./utils/buildRectangle","./utils/buildRoundedRectangle",44,"glPoints","glIndices","Uint16Array","deleteBuffer",45,46,"circleData","totalSegs","seg","verts","vecPos","tempPoints","../../../utils","./buildLine",47,48,"firstPoint","lastPoint","midPointX","midPointY","p1x","p1y","p2x","p2y","p3x","p3y","perpx","perpy","perp2x","perp2y","perp3x","perp3y","c1","c2","denom","pdist","dist","indexCount","indexStart","../../../math",49,"vertPos",50,"rectData",51,"rrectData","recPoints","quadraticBezierCurve","getPt","n1","n2","perc","diff","xb","yb",52,"ticker","Sprite","ParticleContainer","SpriteRenderer","ParticleRenderer","Text","BaseTexture","VideoBaseTexture","TextureUvs","WebGLManager","ShaderManager","RenderTarget","AbstractFilter","FXAAFilter","SpriteMaskFilter","glCore","autoDetectRenderer","noWebGL","isWebGLSupported","./const","./display/Container","./display/DisplayObject","./graphics/Graphics","./graphics/GraphicsData","./graphics/webgl/GraphicsRenderer","./math","./particles/ParticleContainer","./particles/webgl/ParticleRenderer","./renderers/canvas/CanvasRenderer","./renderers/canvas/utils/CanvasBuffer","./renderers/canvas/utils/CanvasGraphics","./renderers/webgl/WebGLRenderer","./renderers/webgl/filters/AbstractFilter","./renderers/webgl/filters/FXAAFilter","./renderers/webgl/filters/SpriteMaskFilter","./renderers/webgl/managers/ShaderManager","./renderers/webgl/managers/WebGLManager","./renderers/webgl/shaders/Shader","./renderers/webgl/utils/ObjectRenderer","./renderers/webgl/utils/RenderTarget","./sprites/Sprite","./sprites/webgl/SpriteRenderer","./text/Text","./textures/BaseTexture","./textures/RenderTexture","./textures/Texture","./textures/TextureUvs","./textures/VideoBaseTexture","./ticker","./utils",53,"fromArray","transpose","newPos","rotate","tx1","append","d1","sr","cr","nsx","prepend","invert","copy","TEMP_MATRIX","./Point",54,55,"./Matrix","./shapes/Circle","./shapes/Ellipse","./shapes/Polygon","./shapes/Rectangle","./shapes/RoundedRectangle",56,"dx","dy","r2","./Rectangle",57,"normx","normy",58,"points_","il","xi","yi","xj","yj","intersect","../Point",59,60,61,"maxSize","properties","batchSize","maxBatchSize","_properties","_maxSize","_batchSize","_buffers","_bufferToUpdate","interactiveChildren","setProperties","uvs","particle","smallestChildIndex","bufferIndex","isRotated","positionX","positionY","finalWidth","finalHeight","globalAlpha","frame","anchor","childTransform","drawImage",62,"ParticleBuffer","dynamicPropertyFlags","vertSize","vertByteSize","dynamicProperties","staticProperties","property","staticStride","staticBuffer","staticData","dynamicStride","dynamicBuffer","dynamicData","initBuffers","dynamicOffset","DYNAMIC_DRAW","staticOffset","uploadDynamic","amount","uploadFunction","uploadStatic",63,"numIndices","tempMatrix","ParticleShader","shaderManager","uploadVertices","aPositionCoord","uploadPosition","aRotation","uploadRotation","aTextureCoord","uploadUvs","uploadAlpha","setShader","totalChildren","generateBuffers","currentRenderTarget","projectionMatrix","uniformMatrix3fv","_location","uniform1f","uAlpha","_texture","_glTextures","updateTexture","buffers","sprite","crop","_frame","spritePosition","spriteRotation","textureUvs","_uvs","x0","y0","spriteAlpha","./ParticleBuffer","./ParticleShader",64,"TextureShader","../../renderers/webgl/shaders/TextureShader",65,"SystemRenderer","system","sayHello","_backgroundColor","_backgroundColorRgba","_backgroundColorString","hex2string","removeView",66,"refresh","CanvasMaskManager","smoothProperty","imageSmoothingEnabled","webkitImageSmoothingEnabled","mozImageSmoothingEnabled","oImageSmoothingEnabled","msImageSmoothingEnabled","initPlugins","_mapBlendModes","pluginTarget","mixin","cacheParent","screencanvas","fillStyle","clearRect","fillRect","renderDisplayObject","destroyPlugins","tempContext","canUseNewCanvasBlendModes","../SystemRenderer","./utils/CanvasMaskManager",67,68,"updateGraphicsTint","beginPath","closePath","strokeStyle","stroke","strokeRect","kappa","ox","oy","xe","ye","xm","ym","rx","ry","maxRadius","renderGraphicsMask","tintR","tintG","tintB","../../../const",69,"maskData","save","cacheAlpha","clip","restore","./CanvasGraphics",70,"CanvasTinter","getTintedTexture","roundColor","stringColor","tintCache","tintMethod","convertTintToImage","tintImage","toDataURL","tintWithMultiply","tintWithOverlay","tintWithPerPixel","rgbValues","pixelData","getImageData","pixels","putImageData","step","cacheStepsPerColorChannel","rgb2hex","canUseMultiply",71,"TextureManager","_managedTextures","glTextures","getTexture","hasLoaded","glTexture","uid","destroyTexture","_skipRemove","removeAll",72,"handleContextLost","handleContextRestored","_contextOptions","premultipliedAlpha","MaskManager","stencilManager","StencilManager","FilterManager","BlendModeManager","_initContext","mapWebGLBlendModesToPixi","drawModes","mapWebGLDrawModesToPixi","_activeShader","_activeRenderTarget","_activeTextureLocation","_activeTexture","textureManager","disable","DEPTH_TEST","CULL_FACE","enable","BLEND","rootRenderTarget","bindRenderTarget","isContextLost","renderTarget","setFilterStack","filterStack","objectRenderer","setMaskStack","stencilMaskStack","preventDefault","destroyAll","./TextureManager","./filters/FXAAFilter","./managers/BlendModeManager","./managers/FilterManager","./managers/MaskManager","./managers/ShaderManager","./managers/StencilManager","./utils/ObjectRenderer","./utils/RenderTarget","./utils/mapWebGLBlendModesToPixi","./utils/mapWebGLDrawModesToPixi",73,"shaders","DefaultShader","defaultVertexSrc","defaultFragmentSrc","getShader","applyFilter","syncUniform","../shaders/TextureShader",74,"./AbstractFilter",75,"maskMatrix","otherMatrix","maskSprite","calculateMappedMatrix",76,"currentBlendMode","blendFunc","./WebGLManager",77,"texturePool","textureSize","currentFrame","Quad","quad","capFilterArea","getRenderTarget","setRenderTarget","filterData","previousFilterData","vertexBuffer","defaultShader","dimensions","vertices","returnRenderTarget","flipTexture","flopTexture","temp","inputTarget","outputTarget","syncUniforms","outputMatrix","mappedMatrix","ratio","translateScaleX","translateScaleY","offsetY","../utils/Quad","../utils/RenderTarget",78,"stencilStack","alphaMaskPool","AlphaMaskFilter","pushSpriteMask","pushStencilMask","popSpriteMask","popStencilMask","alphaMaskFilter","../filters/SpriteMaskFilter",79,"maxAttibs","stack","_currentId","currentShader","ComplexPrimitiveShader","setAttribs","../shaders/ComplexPrimitiveShader","../shaders/PrimitiveShader",80,"WebGLMaskManager","STENCIL_TEST","pushStencil","attachStencilBuffer","sms","bindGraphics","STENCIL_BUFFER_BIT","level","colorMask","stencilFunc","ALWAYS","stencilOp","KEEP","INVERT","EQUAL","DECR","INCR","popStencil",81,82,"./Shader",83,84,"textureCount","init","compile","cacheUniformLocations","cacheAttributeLocations","_glCompile","uniform1i","uniform2f","uniform3f","uniform4f","uniform1iv","uniform2iv","uniform3iv","uniform4iv","uniform1fv","uniform2fv","uniform3fv","uniform4fv","uniformMatrix2fv","uniformMatrix4fv","_array","initSampler2D","textureData","luminance","LUMINANCE","wrapS","wrapT",85,"customUniforms","customAttributes","uSampler",86,87,"../managers/WebGLManager",88,"colors","rect2",89,"StencilMaskStack","frameBuffer","stencilBuffer","projectionFrame","calculateProjection","viewport","pm","./StencilMaskStack",90,91,"ONE","ONE_MINUS_SRC_ALPHA","SRC_ALPHA","DST_ALPHA","DST_COLOR",92,93,"cachedTint","textureDirty","vertexDirty","vertexData","sign","_onTextureUpdate","caclulateVertices","valid","smoothingEnabled","tintedTexture","destroyBaseTexture","fromFrame","frameId","TextureCache","fromImage","imageId","crossorigin","../renderers/canvas/utils/CanvasTinter",94,"numVerts","positions","Uint32Array","createIndicesForQuads","groupCount","groups","textures","ids","blend","currentGroup","currentTexture","generateMultiTextureShader","MAX_TEXTUES","MAX_TEXTURE_IMAGE_UNITS","_shader","vao","aTextureId","nextTexture","_enabled","_id","uvs_uint32","currentBatchSize","subarray","group","sprites","../../renderers/webgl/shaders/_TextureShader","../../utils/createIndicesForQuads","./generateMultiTextureShader",95,"maxTextures","generateSampleSrc","fragTemplate","sampleValues","uSamplers",96,"_text","_style","fontPropertiesCache","fontPropertiesCanvas","fontPropertiesContext","updateText","dropShadowColor","font","align","strokeThickness","wordWrap","wordWrapWidth","dropShadow","dropShadowAngle","dropShadowDistance","dropShadowBlur","textBaseline","lineJoin","miterLimit","outputText","lines","lineWidths","maxLineWidth","fontProperties","determineFontProperties","measureText","lineHeight","fontSize","linePositionX","linePositionY","shadowColor","shadowBlur","xShadowOffset","yShadowOffset","ascent","fillText","strokeText","fontStyle","baseline","imagedata","line","descent","spaceLeft","words","wordWidth","wordWidthWithSpace","../sprites/Sprite",97,"realWidth","realHeight","isLoading","imageUrl","isPowerOfTwo","_active","loadSource","naturalWidth","naturalHeight","wasLoading","_sourceLoaded","scope","BaseTextureCache","_pixiId","dispose","updateSourceImage","newSrc","image","getResolutionOfUrl",98,"textureBuffer","_updateUvs","updateBase","currentBounds","cachedWt","realResolution","getImage","getBase64","getCanvas","webGLPixels","Uint8Array","readPixels","tempCanvas","canvasData","getPixels","getPixel","../renderers/webgl/managers/FilterManager","../renderers/webgl/utils/RenderTarget","./BaseTexture","./Texture",99,"noFrame","requiresUpdate","onBaseTextureUpdated","onBaseTextureLoaded","destroyBase","fromVideo","video","fromVideoUrl","videoUrl","fromUrl","addTextureToCache","removeTextureFromCache","./TextureUvs","./VideoBaseTexture",100,"xy0_uint32","xy1_uint32","xy2_uint32","xy3_uint32","baseFrame","tw","th",101,"readyState","HAVE_ENOUGH_DATA","HAVE_FUTURE_DATA","autoUpdate","_onUpdate","_onCanPlay","_onPlayStart","_onPlayStop","__loaded","createSource","requestAnimationFrame","videoWidth","videoHeight","play","videoSrc","fromUrls",102,"Ticker","_this","_tick","time","_requestId","_emitter","TICK","_maxElapsedMS","autoStart","deltaTime","elapsedMS","lastTime","speed","FPS","minFPS","fps","minFPMS","_requestIfNeeded","performance","now","_cancelIfNeeded","cancelAnimationFrame","_startIfPossible","addOnce","remove","currentTime",103,"shared","./Ticker",104,"totalIndices",105,"_uid","_saidHello","hex","rgb","pngHead","pngEnd","magenta","yellow","getNextPowerOfTwo","number","parseFloat","userAgent","contextOptions","WebGLRenderingContext","getContextAttributes","startIdx","removeCount","./pluginTarget",106,"__plugins","pluginName","ctor",107,"mesh","extras","SpriteBatch","ReferenceError","AssetLoader","Stage","DisplayObjectContainer","Strip","Mesh","Rope","MovieClip","TilingSprite","BitmapText","scaleModes","setTexture","setText","setStyle","setFrame","uuid","./core","./extras","./filters","./mesh",108,"textWidth","textHeight","_glyphs","_font","maxWidth","maxLineHeight","fonts","prevCharCode","chars","lastLineWidth","lastSpace","charCode","charData","kerning","xOffset","yOffset","xAdvance","lineAlignOffsets","alignOffset","lenChars","validate",109,"_textures","_durations","animationSpeed","loop","_currentTime","playing","totalFrames","gotoAndStop","frameNumber","gotoAndPlay","elapsed","lag","fromFrames","frames","fromImages","images",110,"tileScale","tilePosition","_canvasPattern","uFrame","uTransform","uPixelSize","tempUvs","tempWidth","tempHeight","modX","modY","createPattern","_tileScaleOffset","../core/renderers/canvas/utils/CanvasTinter",111,"_cacheAsBitmap","_originalRenderWebGL","_originalRenderCanvas","_originalUpdateTransform","_originalHitTest","_originalDestroy","_cachedSprite","cacheAsBitmap","_originalGetBounds","_originalContainsPoint","_renderCachedWebGL","_renderCachedCanvas","_cacheAsBitmapDestroy","_destroyCachedDisplayObject","_initCachedDisplayObject","cachedRenderTarget","_getCachedBounds","_initCachedDisplayObjectCanvas",112,"getChildByName",113,"getGlobalPosition",114,"./BitmapText","./MovieClip","./TilingSprite","./cacheAsBitmap","./getChildByName","./getGlobalPosition",115,"AsciiFilter","pixelSize","../../core",116,"BloomFilter","blurXFilter","BlurXFilter","blurYFilter","BlurYFilter","defaultFilter","blur","blurX","blurY","../blur/BlurXFilter","../blur/BlurYFilter",117,"BlurDirFilter","dirX","dirY","strength","passes",118,"BlurFilter","./BlurXFilter","./BlurYFilter",119,"flip","flop",120,121,"SmartBlurFilter",122,"ColorMatrixFilter","_loadMatrix","multiply","newMatrix","_multiply","_colorMatrix","brightness","greyscale","grayscale","blackAndWhite","hue","lumR","lumG","lumB","contrast","saturate","desaturate","negative","sepia","technicolor","polaroid","toBGR","kodachrome","browni","vintage","colorTone","desaturation","toned","lightColor","darkColor","lR","lG","lB","dR","dG","dB","night","intensity","predator","lsd",123,"ColorStepFilter",124,"ConvolutionFilter","texelSize",125,"CrossHatchFilter",126,"DisplacementFilter","mapSampler",127,"DotScreenFilter",128,"BlurYTintFilter",129,"DropShadowFilter","blurYTintFilter","_dirtyPosition","_angle","_distance","hideObject","distance","./BlurYTintFilter",130,"GrayFilter","gray",131,"InvertFilter","NoiseFilter","PixelateFilter","RGBSplitFilter","ShockwaveFilter","SepiaFilter","TiltShiftFilter","TiltShiftXFilter","TiltShiftYFilter","TwistFilter","./ascii/AsciiFilter","./bloom/BloomFilter","./blur/BlurDirFilter","./blur/BlurFilter","./blur/BlurXFilter","./blur/BlurYFilter","./blur/SmartBlurFilter","./color/ColorMatrixFilter","./color/ColorStepFilter","./convolution/ConvolutionFilter","./crosshatch/CrossHatchFilter","./displacement/DisplacementFilter","./dot/DotScreenFilter","./dropshadow/DropShadowFilter","./gray/GrayFilter","./invert/InvertFilter","./noise/NoiseFilter","./pixelate/PixelateFilter","./rgb/RGBSplitFilter","./sepia/SepiaFilter","./shockwave/ShockwaveFilter","./tiltshift/TiltShiftFilter","./tiltshift/TiltShiftXFilter","./tiltshift/TiltShiftYFilter","./twist/TwistFilter",132,133,"noise",134,135,"red","green","blue",136,137,"center","params",138,"TiltShiftAxisFilter","gradientBlur","innerHeight","texSize","innerWidth","updateDelta",139,"tiltShiftXFilter","tiltShiftYFilter","./TiltShiftXFilter","./TiltShiftYFilter",140,"./TiltShiftAxisFilter",141,142,143,"loaders","accessibility","loader","./accessibility","./deprecation","./interaction","./loaders","./polyfill",144,"InteractionData","originalEvent","getLocalPosition","globalPos",145,"InteractionManager","autoPreventDefault","interactionFrequency","mouse","stopped","stopPropagation","interactiveDataPool","interactionDOMElement","eventsAdded","onMouseUp","processMouseUp","onMouseDown","processMouseDown","onMouseMove","processMouseMove","onMouseOut","processMouseOverOut","onTouchStart","processTouchStart","onTouchEnd","processTouchEnd","onTouchMove","processTouchMove","currentCursorStyle","_tempPoint","setTargetElement","element","removeEvents","addEvents","msPointerEnabled","_deltaTime","didMove","cursor","processInteractive","eventString","mapPositionToPoint","hitTest","hit","interactiveParent","clientX","clientY","isRightButton","button","which","isDown","_over","buttonMode","defaultCursor","changedTouches","cLength","touchEvent","touchData","getTouchData","returnTouchData","_touchDown","identifier","globalX","globalY","./InteractionData","./interactiveTarget",146,"interactiveTarget","./InteractionManager",147,148,"info","getElementsByTagName","common","getAttribute","letters","textureRect","kernings","first","second","bitmapFont","xmlUrl","textureUrl","loadOptions","imageMetadata","../extras",149,"bitmapFontParser","spritesheetParser","textureParser","./bitmapFontParser","./loader","./spritesheetParser","./textureParser",150,"ResourceLoader","_pixiMiddleware","addPixiMiddleware",151,"route","meta","rotated","trimmed","spriteSourceSize","sourceSize",152,153,"drawMode","canvasPadding","TRIANGLE_MESH","tempPolygon","_renderCanvasTriangleMesh","_renderCanvasTriangles","_renderCanvasDrawTriangle","index0","textureSource","textureWidth","textureHeight","u0","u1","u2","v0","v1","v2","paddingX","paddingY","centerX","centerY","normX","normY","deltaA","deltaB","deltaC","deltaD","deltaE","deltaF","renderMeshFlat","updateFrame","rawX","rawY","ind0","ind1","ind2",154,"Plane","segmentsX","segmentsY","_ready","segmentsXSub","segmentsYSub","sizeX","sizeY","totalSub","xpos","ypos","value2","value3","value4","./Mesh",155,"factor","nextPoint","perpLength","num","perpX","perpY",156,"MeshRenderer","MeshShader","./Plane","./Rope","./webgl/MeshRenderer","./webgl/MeshShader",157,"_vertexBuffer","_initWebGL","meshShader","_uvBuffer","_indexBuffer","_colorBuffer","../Mesh",158,159,"isNaN",160,161,"./Math.sign","./Object.assign","./requestAnimationFrame",162,"Date","getTime","startTime","vendors","delay"],"mappings":"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E,EAAA,GAAAuE,EAAA,GAAAvE,EAAA,GAAAuE,EAAA,IAAAvE,EAAA,GAAAuE,EAAA,IACAwkB,EAAA,GAAA/oB,EAAA,GAAAuE,EAAA,GAAAvE,EAAA,GAAAuE,EAAA,GAAAvE,EAAA,GAAAuE,EAAA,IAAAvE,EAAA,GAAAuE,EAAA,IACAwkB,EAAA,GAAA/oB,EAAA,GAAAuE,EAAA,GAAAvE,EAAA,GAAAuE,EAAA,GAAAvE,EAAA,GAAAuE,EAAA,IAAAvE,EAAA,GAAAuE,EAAA,IAGAwkB,EAAA,GAAA/oB,EAAA,GAAAuE,EAAA,GAAAvE,EAAA,GAAAuE,EAAA,GAAAvE,EAAA,GAAAuE,EAAA,IAAAvE,EAAA,GAAAuE,EAAA,IACAwkB,EAAA,GAAA/oB,EAAA,GAAAuE,EAAA,GAAAvE,EAAA,GAAAuE,EAAA,GAAAvE,EAAA,GAAAuE,EAAA,IAAAvE,EAAA,GAAAuE,EAAA,IACAwkB,EAAA,GAAA/oB,EAAA,GAAAuE,EAAA,GAAAvE,EAAA,GAAAuE,EAAA,GAAAvE,EAAA,GAAAuE,EAAA,IAAAvE,EAAA,GAAAuE,EAAA,IACAwkB,EAAA,GAAA/oB,EAAA,GAAAuE,EAAA,GAAAvE,EAAA,GAAAuE,EAAA,GAAAvE,EAAA,GAAAuE,EAAA,IAAAvE,EAAA,GAAAuE,EAAA,IACAwkB,EAAA,GAAA/oB,EAAA,GAAAuE,EAAA,GAAAvE,EAAA,GAAAuE,EAAA,GAAAvE,EAAA,GAAAuE,EAAA,IAAAvE,EAAA,GAAAuE,EAAA,IAGAwkB,EAAA,IAAA/oB,EAAA,IAAAuE,EAAA,GAAAvE,EAAA,IAAAuE,EAAA,GAAAvE,EAAA,IAAAuE,EAAA,IAAAvE,EAAA,IAAAuE,EAAA,IACAwkB,EAAA,IAAA/oB,EAAA,IAAAuE,EAAA,GAAAvE,EAAA,IAAAuE,EAAA,GAAAvE,EAAA,IAAAuE,EAAA,IAAAvE,EAAA,IAAAuE,EAAA,IACAwkB,EAAA,IAAA/oB,EAAA,IAAAuE,EAAA,GAAAvE,EAAA,IAAAuE,EAAA,GAAAvE,EAAA,IAAAuE,EAAA,IAAAvE,EAAA,IAAAuE,EAAA,IACAwkB,EAAA,IAAA/oB,EAAA,IAAAuE,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","file":"pixi.min.js","sourcesContent":[null],"sourceRoot":"./"} \ No newline at end of file diff --git a/src/core/graphics/webgl/GraphicsRenderer.js b/src/core/graphics/webgl/GraphicsRenderer.js index 279525e..12d80c0 100644 --- a/src/core/graphics/webgl/GraphicsRenderer.js +++ b/src/core/graphics/webgl/GraphicsRenderer.js @@ -4,15 +4,15 @@ ObjectRenderer = require('../../renderers/webgl/utils/ObjectRenderer'), WebGLRenderer = require('../../renderers/webgl/WebGLRenderer'), WebGLGraphicsData = require('./WebGLGraphicsData'), - PrimitiveShader = require('./PrimitiveShader'), + PrimitiveShader = require('./shaders/PrimitiveShader'), // some drawing functions.. - buildLine = require('../buildLine'); - buildPoly = require('../buildPoly'); - buildComplexPoly = require('../buildComplexPoly'); - buildRectangle = require('../buildRectangle'); - buildRoundedRectangle = require('../buildRoundedRectangle'); - buildCircle = require('../buildCircle'); + buildLine = require('./utils/buildLine'); + buildPoly = require('./utils/buildPoly'); + buildComplexPoly = require('./utils/buildComplexPoly'); + buildRectangle = require('./utils/buildRectangle'); + buildRoundedRectangle = require('./utils/buildRoundedRectangle'); + buildCircle = require('./utils/buildCircle'); earcut = require('earcut'); diff --git a/src/core/graphics/webgl/PrimitiveShader.js b/src/core/graphics/webgl/PrimitiveShader.js deleted file mode 100644 index 44166b3..0000000 --- a/src/core/graphics/webgl/PrimitiveShader.js +++ /dev/null @@ -1,50 +0,0 @@ -var Shader = require('pixi-gl-core').GLShader; - -/** - * This shader is used to draw simple primitive shapes for {@link PIXI.Graphics}. - * - * @class - * @memberof PIXI - * @extends PIXI.Shader - * @param shaderManager {ShaderManager} The webgl shader manager this shader works for. - */ -function PrimitiveShader(gl) -{ - Shader.call(this, - gl, - // vertex shader - [ - 'attribute vec2 aVertexPosition;', - 'attribute vec4 aColor;', - - 'uniform mat3 translationMatrix;', - 'uniform mat3 projectionMatrix;', - - 'uniform float alpha;', - 'uniform float flipY;', - 'uniform vec3 tint;', - - 'varying vec4 vColor;', - - 'void main(void){', - ' gl_Position = vec4((projectionMatrix * translationMatrix * vec3(aVertexPosition, 1.0)).xy, 0.0, 1.0);', - ' vColor = aColor * vec4(tint * alpha, alpha);', - '}' - ].join('\n'), - // fragment shader - [ - 'precision mediump float;', - - 'varying vec4 vColor;', - - 'void main(void){', - ' gl_FragColor = vColor;', - '}' - ].join('\n') - ); -} - -PrimitiveShader.prototype = Object.create(Shader.prototype); -PrimitiveShader.prototype.constructor = PrimitiveShader; - -module.exports = PrimitiveShader; diff --git a/src/core/graphics/webgl/buildRoundedRectangle.js b/src/core/graphics/webgl/buildRoundedRectangle.js deleted file mode 100644 index 55bb1b4..0000000 --- a/src/core/graphics/webgl/buildRoundedRectangle.js +++ /dev/null @@ -1,127 +0,0 @@ -var buildLine = require('./buildLine'), - utils = require('../../utils'); - -/** - * Builds a rounded rectangle to draw - * - * @private - * @param graphicsData {PIXI.Graphics} The graphics object containing all the necessary properties - * @param webGLData {object} an object containing all the webGL-specific information to create this shape - */ -buildRoundedRectangle = function (graphicsData, webGLData) -{ - var rrectData = graphicsData.shape; - var x = rrectData.x; - var y = rrectData.y; - var width = rrectData.width; - var height = rrectData.height; - - var radius = rrectData.radius; - - var recPoints = []; - recPoints.push(x, y + radius); - this.quadraticBezierCurve(x, y + height - radius, x, y + height, x + radius, y + height, recPoints); - this.quadraticBezierCurve(x + width - radius, y + height, x + width, y + height, x + width, y + height - radius, recPoints); - this.quadraticBezierCurve(x + width, y + radius, x + width, y, x + width - radius, y, recPoints); - this.quadraticBezierCurve(x + radius, y, x, y, x, y + radius + 0.0000000001, recPoints); - - // this tiny number deals with the issue that occurs when points overlap and earcut fails to triangulate the item. - // TODO - fix this properly, this is not very elegant.. but it works for now. - - if (graphicsData.fill) - { - var color = utils.hex2rgb(graphicsData.fillColor); - var alpha = graphicsData.fillAlpha; - - var r = color[0] * alpha; - var g = color[1] * alpha; - var b = color[2] * alpha; - - var verts = webGLData.points; - var indices = webGLData.indices; - - var vecPos = verts.length/6; - - var triangles = earcut(recPoints, null, 2); - - var i = 0; - for (i = 0; i < triangles.length; i+=3) - { - indices.push(triangles[i] + vecPos); - indices.push(triangles[i] + vecPos); - indices.push(triangles[i+1] + vecPos); - indices.push(triangles[i+2] + vecPos); - indices.push(triangles[i+2] + vecPos); - } - - for (i = 0; i < recPoints.length; i++) - { - verts.push(recPoints[i], recPoints[++i], r, g, b, alpha); - } - } - - if (graphicsData.lineWidth) - { - var tempPoints = graphicsData.points; - - graphicsData.points = recPoints; - - this.buildLine(graphicsData, webGLData); - - graphicsData.points = tempPoints; - } -}; - -/** - * Calculate the points for a quadratic bezier curve. (helper function..) - * Based on: https://stackoverflow.com/questions/785097/how-do-i-implement-a-bezier-curve-in-c - * - * @private - * @param fromX {number} Origin point x - * @param fromY {number} Origin point x - * @param cpX {number} Control point x - * @param cpY {number} Control point y - * @param toX {number} Destination point x - * @param toY {number} Destination point y - * @param [out] {number[]} The output array to add points into. If not passed, a new array is created. - * @return {number[]} an array of points - */ -quadraticBezierCurve = function (fromX, fromY, cpX, cpY, toX, toY, out) -{ - var xa, - ya, - xb, - yb, - x, - y, - n = 20, - points = out || []; - - function getPt(n1 , n2, perc) { - var diff = n2 - n1; - - return n1 + ( diff * perc ); - } - - var j = 0; - for (var i = 0; i <= n; i++ ) { - j = i / n; - - // The Green Line - xa = getPt( fromX , cpX , j ); - ya = getPt( fromY , cpY , j ); - xb = getPt( cpX , toX , j ); - yb = getPt( cpY , toY , j ); - - // The Black Dot - x = getPt( xa , xb , j ); - y = getPt( ya , yb , j ); - - points.push(x, y); - } - - return points; -}; - - -module.exports = buildRoundedRectangle; \ No newline at end of file diff --git a/src/core/graphics/webgl/shaders/PrimitiveShader.js b/src/core/graphics/webgl/shaders/PrimitiveShader.js new file mode 100644 index 0000000..44166b3 --- /dev/null +++ b/src/core/graphics/webgl/shaders/PrimitiveShader.js @@ -0,0 +1,50 @@ +var Shader = require('pixi-gl-core').GLShader; + +/** + * This shader is used to draw simple primitive shapes for {@link PIXI.Graphics}. + * + * @class + * @memberof PIXI + * @extends PIXI.Shader + * @param shaderManager {ShaderManager} The webgl shader manager this shader works for. + */ +function PrimitiveShader(gl) +{ + Shader.call(this, + gl, + // vertex shader + [ + 'attribute vec2 aVertexPosition;', + 'attribute vec4 aColor;', + + 'uniform mat3 translationMatrix;', + 'uniform mat3 projectionMatrix;', + + 'uniform float alpha;', + 'uniform float flipY;', + 'uniform vec3 tint;', + + 'varying vec4 vColor;', + + 'void main(void){', + ' gl_Position = vec4((projectionMatrix * translationMatrix * vec3(aVertexPosition, 1.0)).xy, 0.0, 1.0);', + ' vColor = aColor * vec4(tint * alpha, alpha);', + '}' + ].join('\n'), + // fragment shader + [ + 'precision mediump float;', + + 'varying vec4 vColor;', + + 'void main(void){', + ' gl_FragColor = vColor;', + '}' + ].join('\n') + ); +} + +PrimitiveShader.prototype = Object.create(Shader.prototype); +PrimitiveShader.prototype.constructor = PrimitiveShader; + +module.exports = PrimitiveShader; diff --git a/bin/pixi.js b/bin/pixi.js index b57ad10..40862ec 100644 --- a/bin/pixi.js +++ b/bin/pixi.js @@ -1,7 +1,7 @@ /** * @license * pixi.js - v3.0.10-dev - * Compiled 2016-01-17T18:07:22.522Z + * Compiled 2016-01-17T18:16:46.120Z * * pixi.js is licensed under the MIT License. * http://www.opensource.org/licenses/mit-license.php @@ -10864,15 +10864,15 @@ ObjectRenderer = require('../../renderers/webgl/utils/ObjectRenderer'), WebGLRenderer = require('../../renderers/webgl/WebGLRenderer'), WebGLGraphicsData = require('./WebGLGraphicsData'), - PrimitiveShader = require('./PrimitiveShader'), + PrimitiveShader = require('./shaders/PrimitiveShader'), // some drawing functions.. - buildLine = require('./buildLine'); - buildPoly = require('./buildPoly'); - buildComplexPoly = require('./buildComplexPoly'); - buildRectangle = require('./buildRectangle'); - buildRoundedRectangle = require('./buildRoundedRectangle'); - buildCircle = require('./buildCircle'); + buildLine = require('./utils/buildLine'); + buildPoly = require('./utils/buildPoly'); + buildComplexPoly = require('./utils/buildComplexPoly'); + buildRectangle = require('./utils/buildRectangle'); + buildRoundedRectangle = require('./utils/buildRoundedRectangle'); + buildCircle = require('./utils/buildCircle'); earcut = require('earcut'); @@ -11177,59 +11177,7 @@ }; -},{"../../const":38,"../../math":55,"../../renderers/webgl/WebGLRenderer":72,"../../renderers/webgl/utils/ObjectRenderer":87,"../../utils":105,"./PrimitiveShader":44,"./WebGLGraphicsData":45,"./buildCircle":46,"./buildComplexPoly":47,"./buildLine":48,"./buildPoly":49,"./buildRectangle":50,"./buildRoundedRectangle":51,"earcut":24}],44:[function(require,module,exports){ -var Shader = require('pixi-gl-core').GLShader; - -/** - * This shader is used to draw simple primitive shapes for {@link PIXI.Graphics}. - * - * @class - * @memberof PIXI - * @extends PIXI.Shader - * @param shaderManager {ShaderManager} The webgl shader manager this shader works for. - */ -function PrimitiveShader(gl) -{ - Shader.call(this, - gl, - // vertex shader - [ - 'attribute vec2 aVertexPosition;', - 'attribute vec4 aColor;', - - 'uniform mat3 translationMatrix;', - 'uniform mat3 projectionMatrix;', - - 'uniform float alpha;', - 'uniform float flipY;', - 'uniform vec3 tint;', - - 'varying vec4 vColor;', - - 'void main(void){', - ' gl_Position = vec4((projectionMatrix * translationMatrix * vec3(aVertexPosition, 1.0)).xy, 0.0, 1.0);', - ' vColor = aColor * vec4(tint * alpha, alpha);', - '}' - ].join('\n'), - // fragment shader - [ - 'precision mediump float;', - - 'varying vec4 vColor;', - - 'void main(void){', - ' gl_FragColor = vColor;', - '}' - ].join('\n') - ); -} - -PrimitiveShader.prototype = Object.create(Shader.prototype); -PrimitiveShader.prototype.constructor = PrimitiveShader; - -module.exports = PrimitiveShader; - -},{"pixi-gl-core":1}],45:[function(require,module,exports){ +},{"../../const":38,"../../math":55,"../../renderers/webgl/WebGLRenderer":72,"../../renderers/webgl/utils/ObjectRenderer":87,"../../utils":105,"./WebGLGraphicsData":44,"./shaders/PrimitiveShader":45,"./utils/buildCircle":46,"./utils/buildComplexPoly":47,"./utils/buildLine":48,"./utils/buildPoly":49,"./utils/buildRectangle":50,"./utils/buildRoundedRectangle":51,"earcut":24}],44:[function(require,module,exports){ /** * An object containing WebGL specific properties to be used by the WebGL renderer * @@ -11347,9 +11295,61 @@ this.glIndices = null; }; -},{}],46:[function(require,module,exports){ +},{}],45:[function(require,module,exports){ +var Shader = require('pixi-gl-core').GLShader; + +/** + * This shader is used to draw simple primitive shapes for {@link PIXI.Graphics}. + * + * @class + * @memberof PIXI + * @extends PIXI.Shader + * @param shaderManager {ShaderManager} The webgl shader manager this shader works for. + */ +function PrimitiveShader(gl) +{ + Shader.call(this, + gl, + // vertex shader + [ + 'attribute vec2 aVertexPosition;', + 'attribute vec4 aColor;', + + 'uniform mat3 translationMatrix;', + 'uniform mat3 projectionMatrix;', + + 'uniform float alpha;', + 'uniform float flipY;', + 'uniform vec3 tint;', + + 'varying vec4 vColor;', + + 'void main(void){', + ' gl_Position = vec4((projectionMatrix * translationMatrix * vec3(aVertexPosition, 1.0)).xy, 0.0, 1.0);', + ' vColor = aColor * vec4(tint * alpha, alpha);', + '}' + ].join('\n'), + // fragment shader + [ + 'precision mediump float;', + + 'varying vec4 vColor;', + + 'void main(void){', + ' gl_FragColor = vColor;', + '}' + ].join('\n') + ); +} + +PrimitiveShader.prototype = Object.create(Shader.prototype); +PrimitiveShader.prototype.constructor = PrimitiveShader; + +module.exports = PrimitiveShader; + +},{"pixi-gl-core":1}],46:[function(require,module,exports){ var buildLine = require('./buildLine'), - utils = require('../../utils'); + utils = require('../../../utils'); /** * Builds a circle to draw @@ -11426,7 +11426,7 @@ y + Math.cos(seg * i) * height); } - this.buildLine(graphicsData, webGLData); + buildLine(graphicsData, webGLData); graphicsData.points = tempPoints; } @@ -11434,9 +11434,9 @@ module.exports = buildCircle; -},{"../../utils":105,"./buildLine":48}],47:[function(require,module,exports){ +},{"../../../utils":105,"./buildLine":48}],47:[function(require,module,exports){ var buildLine = require('./buildLine'), - utils = require('../../utils'); + utils = require('../../../utils'); @@ -11505,9 +11505,9 @@ module.exports = buildComplexPoly; -},{"../../utils":105,"./buildLine":48}],48:[function(require,module,exports){ -var math = require('../../math'), - utils = require('../../utils'); +},{"../../../utils":105,"./buildLine":48}],48:[function(require,module,exports){ +var math = require('../../../math'), + utils = require('../../../utils'); /** * Builds a line to draw @@ -11725,8 +11725,8 @@ }; module.exports = buildLine; -},{"../../math":55,"../../utils":105}],49:[function(require,module,exports){ -var utils = require('../../utils'); +},{"../../../math":55,"../../../utils":105}],49:[function(require,module,exports){ +var utils = require('../../../utils'); /** * Builds a polygon to draw @@ -11788,9 +11788,9 @@ module.exports = buildPoly; -},{"../../utils":105}],50:[function(require,module,exports){ +},{"../../../utils":105}],50:[function(require,module,exports){ var buildLine = require('./buildLine'), - utils = require('../../utils'); + utils = require('../../../utils'); /** * Builds a rectangle to draw @@ -11859,9 +11859,9 @@ }; module.exports = buildRectangle; -},{"../../utils":105,"./buildLine":48}],51:[function(require,module,exports){ +},{"../../../utils":105,"./buildLine":48}],51:[function(require,module,exports){ var buildLine = require('./buildLine'), - utils = require('../../utils'); + utils = require('../../../utils'); /** * Builds a rounded rectangle to draw @@ -11987,7 +11987,7 @@ module.exports = buildRoundedRectangle; -},{"../../utils":105,"./buildLine":48}],52:[function(require,module,exports){ +},{"../../../utils":105,"./buildLine":48}],52:[function(require,module,exports){ /** * @file Main export of the PIXI core library * @author Mat Groves @@ -30075,6 +30075,6 @@ },{}]},{},[143])(143) }); -//# sourceMappingURL=data:application/json;charset:utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIm5vZGVfbW9kdWxlcy9icm93c2VyaWZ5L25vZGVfbW9kdWxlcy9icm93c2VyLXBhY2svX3ByZWx1ZGUuanMiLCIuLi9waXhpLWdsLWNvcmUvaW5kZXguanMiLCIuLi9waXhpLWdsLWNvcmUvbGliL0dMQnVmZmVyLmpzIiwiLi4vcGl4aS1nbC1jb3JlL2xpYi9HTEZyYW1lYnVmZmVyLmpzIiwiLi4vcGl4aS1nbC1jb3JlL2xpYi9HTFNoYWRlci5qcyIsIi4uL3BpeGktZ2wtY29yZS9saWIvR0xUZXh0dXJlLmpzIiwiLi4vcGl4aS1nbC1jb3JlL2xpYi9WZXJ0ZXhBcnJheU9iamVjdC5qcyIsIi4uL3BpeGktZ2wtY29yZS9saWIvY3JlYXRlQ29udGV4dC5qcyIsIi4uL3BpeGktZ2wtY29yZS9saWIvc2V0VmVydGV4QXR0cmliQXJyYXlzLmpzIiwiLi4vcGl4aS1nbC1jb3JlL2xpYi9zaGFkZXIvY29tcGlsZVByb2dyYW0uanMiLCIuLi9waXhpLWdsLWNvcmUvbGliL3NoYWRlci9kZWZhdWx0VmFsdWUuanMiLCIuLi9waXhpLWdsLWNvcmUvbGliL3NoYWRlci9leHRyYWN0QXR0cmlidXRlcy5qcyIsIi4uL3BpeGktZ2wtY29yZS9saWIvc2hhZGVyL2V4dHJhY3RVbmlmb3Jtcy5qcyIsIi4uL3BpeGktZ2wtY29yZS9saWIvc2hhZGVyL2dlbmVyYXRlVW5pZm9ybUFjY2Vzc09iamVjdC5qcyIsIi4uL3BpeGktZ2wtY29yZS9saWIvc2hhZGVyL21hcFNpemUuanMiLCIuLi9waXhpLWdsLWNvcmUvbGliL3NoYWRlci9tYXBUeXBlLmpzIiwibm9kZV9tb2R1bGVzL2FzeW5jL2xpYi9hc3luYy5qcyIsIm5vZGVfbW9kdWxlcy9icm93c2VyaWZ5L25vZGVfbW9kdWxlcy9wYXRoLWJyb3dzZXJpZnkvaW5kZXguanMiLCJub2RlX21vZHVsZXMvYnJvd3NlcmlmeS9ub2RlX21vZHVsZXMvcHJvY2Vzcy9icm93c2VyLmpzIiwibm9kZV9tb2R1bGVzL2Jyb3dzZXJpZnkvbm9kZV9tb2R1bGVzL3B1bnljb2RlL3B1bnljb2RlLmpzIiwibm9kZV9tb2R1bGVzL2Jyb3dzZXJpZnkvbm9kZV9tb2R1bGVzL3F1ZXJ5c3RyaW5nLWVzMy9kZWNvZGUuanMiLCJub2RlX21vZHVsZXMvYnJvd3NlcmlmeS9ub2RlX21vZHVsZXMvcXVlcnlzdHJpbmctZXMzL2VuY29kZS5qcyIsIm5vZGVfbW9kdWxlcy9icm93c2VyaWZ5L25vZGVfbW9kdWxlcy9xdWVyeXN0cmluZy1lczMvaW5kZXguanMiLCJub2RlX21vZHVsZXMvYnJvd3NlcmlmeS9ub2RlX21vZHVsZXMvdXJsL3VybC5qcyIsIm5vZGVfbW9kdWxlcy9lYXJjdXQvc3JjL2VhcmN1dC5qcyIsIm5vZGVfbW9kdWxlcy9ldmVudGVtaXR0ZXIzL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL29iamVjdC1hc3NpZ24vaW5kZXguanMiLCJub2RlX21vZHVsZXMvcmVzb3VyY2UtbG9hZGVyL25vZGVfbW9kdWxlcy9hc3luYy9saWIvYXN5bmMuanMiLCJub2RlX21vZHVsZXMvcmVzb3VyY2UtbG9hZGVyL3NyYy9Mb2FkZXIuanMiLCJub2RlX21vZHVsZXMvcmVzb3VyY2UtbG9hZGVyL3NyYy9SZXNvdXJjZS5qcyIsIm5vZGVfbW9kdWxlcy9yZXNvdXJjZS1sb2FkZXIvc3JjL2I2NC5qcyIsIm5vZGVfbW9kdWxlcy9yZXNvdXJjZS1sb2FkZXIvc3JjL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL3Jlc291cmNlLWxvYWRlci9zcmMvbWlkZGxld2FyZXMvY2FjaGluZy9tZW1vcnkuanMiLCJub2RlX21vZHVsZXMvcmVzb3VyY2UtbG9hZGVyL3NyYy9taWRkbGV3YXJlcy9wYXJzaW5nL2Jsb2IuanMiLCJwYWNrYWdlLmpzb24iLCJzcmMvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5TWFuYWdlci5qcyIsInNyYy9hY2Nlc3NpYmlsaXR5L2FjY2Vzc2libGVUYXJnZXQuanMiLCJzcmMvYWNjZXNzaWJpbGl0eS9pbmRleC5qcyIsInNyYy9jb3JlL2NvbnN0LmpzIiwic3JjL2NvcmUvZGlzcGxheS9Db250YWluZXIuanMiLCJzcmMvY29yZS9kaXNwbGF5L0Rpc3BsYXlPYmplY3QuanMiLCJzcmMvY29yZS9ncmFwaGljcy9HcmFwaGljcy5qcyIsInNyYy9jb3JlL2dyYXBoaWNzL0dyYXBoaWNzRGF0YS5qcyIsInNyYy9jb3JlL2dyYXBoaWNzL3dlYmdsL0dyYXBoaWNzUmVuZGVyZXIuanMiLCJzcmMvY29yZS9ncmFwaGljcy93ZWJnbC9QcmltaXRpdmVTaGFkZXIuanMiLCJzcmMvY29yZS9ncmFwaGljcy93ZWJnbC9XZWJHTEdyYXBoaWNzRGF0YS5qcyIsInNyYy9jb3JlL2dyYXBoaWNzL3dlYmdsL2J1aWxkQ2lyY2xlLmpzIiwic3JjL2NvcmUvZ3JhcGhpY3Mvd2ViZ2wvYnVpbGRDb21wbGV4UG9seS5qcyIsInNyYy9jb3JlL2dyYXBoaWNzL3dlYmdsL2J1aWxkTGluZS5qcyIsInNyYy9jb3JlL2dyYXBoaWNzL3dlYmdsL2J1aWxkUG9seS5qcyIsInNyYy9jb3JlL2dyYXBoaWNzL3dlYmdsL2J1aWxkUmVjdGFuZ2xlLmpzIiwic3JjL2NvcmUvZ3JhcGhpY3Mvd2ViZ2wvYnVpbGRSb3VuZGVkUmVjdGFuZ2xlLmpzIiwic3JjL2NvcmUvaW5kZXguanMiLCJzcmMvY29yZS9tYXRoL01hdHJpeC5qcyIsInNyYy9jb3JlL21hdGgvUG9pbnQuanMiLCJzcmMvY29yZS9tYXRoL2luZGV4LmpzIiwic3JjL2NvcmUvbWF0aC9zaGFwZXMvQ2lyY2xlLmpzIiwic3JjL2NvcmUvbWF0aC9zaGFwZXMvRWxsaXBzZS5qcyIsInNyYy9jb3JlL21hdGgvc2hhcGVzL1BvbHlnb24uanMiLCJzcmMvY29yZS9tYXRoL3NoYXBlcy9SZWN0YW5nbGUuanMiLCJzcmMvY29yZS9tYXRoL3NoYXBlcy9Sb3VuZGVkUmVjdGFuZ2xlLmpzIiwic3JjL2NvcmUvcGFydGljbGVzL1BhcnRpY2xlQ29udGFpbmVyLmpzIiwic3JjL2NvcmUvcGFydGljbGVzL3dlYmdsL1BhcnRpY2xlQnVmZmVyLmpzIiwic3JjL2NvcmUvcGFydGljbGVzL3dlYmdsL1BhcnRpY2xlUmVuZGVyZXIuanMiLCJzcmMvY29yZS9wYXJ0aWNsZXMvd2ViZ2wvUGFydGljbGVTaGFkZXIuanMiLCJzcmMvY29yZS9yZW5kZXJlcnMvU3lzdGVtUmVuZGVyZXIuanMiLCJzcmMvY29yZS9yZW5kZXJlcnMvY2FudmFzL0NhbnZhc1JlbmRlcmVyLmpzIiwic3JjL2NvcmUvcmVuZGVyZXJzL2NhbnZhcy91dGlscy9DYW52YXNCdWZmZXIuanMiLCJzcmMvY29yZS9yZW5kZXJlcnMvY2FudmFzL3V0aWxzL0NhbnZhc0dyYXBoaWNzLmpzIiwic3JjL2NvcmUvcmVuZGVyZXJzL2NhbnZhcy91dGlscy9DYW52YXNNYXNrTWFuYWdlci5qcyIsInNyYy9jb3JlL3JlbmRlcmVycy9jYW52YXMvdXRpbHMvQ2FudmFzVGludGVyLmpzIiwic3JjL2NvcmUvcmVuZGVyZXJzL3dlYmdsL1RleHR1cmVNYW5hZ2VyLmpzIiwic3JjL2NvcmUvcmVuZGVyZXJzL3dlYmdsL1dlYkdMUmVuZGVyZXIuanMiLCJzcmMvY29yZS9yZW5kZXJlcnMvd2ViZ2wvZmlsdGVycy9BYnN0cmFjdEZpbHRlci5qcyIsInNyYy9jb3JlL3JlbmRlcmVycy93ZWJnbC9maWx0ZXJzL0ZYQUFGaWx0ZXIuanMiLCJzcmMvY29yZS9yZW5kZXJlcnMvd2ViZ2wvZmlsdGVycy9TcHJpdGVNYXNrRmlsdGVyLmpzIiwic3JjL2NvcmUvcmVuZGVyZXJzL3dlYmdsL21hbmFnZXJzL0JsZW5kTW9kZU1hbmFnZXIuanMiLCJzcmMvY29yZS9yZW5kZXJlcnMvd2ViZ2wvbWFuYWdlcnMvRmlsdGVyTWFuYWdlci5qcyIsInNyYy9jb3JlL3JlbmRlcmVycy93ZWJnbC9tYW5hZ2Vycy9NYXNrTWFuYWdlci5qcyIsInNyYy9jb3JlL3JlbmRlcmVycy93ZWJnbC9tYW5hZ2Vycy9TaGFkZXJNYW5hZ2VyLmpzIiwic3JjL2NvcmUvcmVuZGVyZXJzL3dlYmdsL21hbmFnZXJzL1N0ZW5jaWxNYW5hZ2VyLmpzIiwic3JjL2NvcmUvcmVuZGVyZXJzL3dlYmdsL21hbmFnZXJzL1dlYkdMTWFuYWdlci5qcyIsInNyYy9jb3JlL3JlbmRlcmVycy93ZWJnbC9zaGFkZXJzL0NvbXBsZXhQcmltaXRpdmVTaGFkZXIuanMiLCJzcmMvY29yZS9yZW5kZXJlcnMvd2ViZ2wvc2hhZGVycy9QcmltaXRpdmVTaGFkZXIuanMiLCJzcmMvY29yZS9yZW5kZXJlcnMvd2ViZ2wvc2hhZGVycy9TaGFkZXIuanMiLCJzcmMvY29yZS9yZW5kZXJlcnMvd2ViZ2wvc2hhZGVycy9UZXh0dXJlU2hhZGVyLmpzIiwic3JjL2NvcmUvcmVuZGVyZXJzL3dlYmdsL3NoYWRlcnMvX1RleHR1cmVTaGFkZXIuanMiLCJzcmMvY29yZS9yZW5kZXJlcnMvd2ViZ2wvdXRpbHMvT2JqZWN0UmVuZGVyZXIuanMiLCJzcmMvY29yZS9yZW5kZXJlcnMvd2ViZ2wvdXRpbHMvUXVhZC5qcyIsInNyYy9jb3JlL3JlbmRlcmVycy93ZWJnbC91dGlscy9SZW5kZXJUYXJnZXQuanMiLCJzcmMvY29yZS9yZW5kZXJlcnMvd2ViZ2wvdXRpbHMvU3RlbmNpbE1hc2tTdGFjay5qcyIsInNyYy9jb3JlL3JlbmRlcmVycy93ZWJnbC91dGlscy9tYXBXZWJHTEJsZW5kTW9kZXNUb1BpeGkuanMiLCJzcmMvY29yZS9yZW5kZXJlcnMvd2ViZ2wvdXRpbHMvbWFwV2ViR0xEcmF3TW9kZXNUb1BpeGkuanMiLCJzcmMvY29yZS9zcHJpdGVzL1Nwcml0ZS5qcyIsInNyYy9jb3JlL3Nwcml0ZXMvd2ViZ2wvU3ByaXRlUmVuZGVyZXIuanMiLCJzcmMvY29yZS9zcHJpdGVzL3dlYmdsL2dlbmVyYXRlTXVsdGlUZXh0dXJlU2hhZGVyLmpzIiwic3JjL2NvcmUvdGV4dC9UZXh0LmpzIiwic3JjL2NvcmUvdGV4dHVyZXMvQmFzZVRleHR1cmUuanMiLCJzcmMvY29yZS90ZXh0dXJlcy9SZW5kZXJUZXh0dXJlLmpzIiwic3JjL2NvcmUvdGV4dHVyZXMvVGV4dHVyZS5qcyIsInNyYy9jb3JlL3RleHR1cmVzL1RleHR1cmVVdnMuanMiLCJzcmMvY29yZS90ZXh0dXJlcy9WaWRlb0Jhc2VUZXh0dXJlLmpzIiwic3JjL2NvcmUvdGlja2VyL1RpY2tlci5qcyIsInNyYy9jb3JlL3RpY2tlci9pbmRleC5qcyIsInNyYy9jb3JlL3V0aWxzL2NyZWF0ZUluZGljZXNGb3JRdWFkcy5qcyIsInNyYy9jb3JlL3V0aWxzL2luZGV4LmpzIiwic3JjL2NvcmUvdXRpbHMvcGx1Z2luVGFyZ2V0LmpzIiwic3JjL2RlcHJlY2F0aW9uLmpzIiwic3JjL2V4dHJhcy9CaXRtYXBUZXh0LmpzIiwic3JjL2V4dHJhcy9Nb3ZpZUNsaXAuanMiLCJzcmMvZXh0cmFzL1RpbGluZ1Nwcml0ZS5qcyIsInNyYy9leHRyYXMvY2FjaGVBc0JpdG1hcC5qcyIsInNyYy9leHRyYXMvZ2V0Q2hpbGRCeU5hbWUuanMiLCJzcmMvZXh0cmFzL2dldEdsb2JhbFBvc2l0aW9uLmpzIiwic3JjL2V4dHJhcy9pbmRleC5qcyIsInNyYy9maWx0ZXJzL2FzY2lpL0FzY2lpRmlsdGVyLmpzIiwic3JjL2ZpbHRlcnMvYmxvb20vQmxvb21GaWx0ZXIuanMiLCJzcmMvZmlsdGVycy9ibHVyL0JsdXJEaXJGaWx0ZXIuanMiLCJzcmMvZmlsdGVycy9ibHVyL0JsdXJGaWx0ZXIuanMiLCJzcmMvZmlsdGVycy9ibHVyL0JsdXJYRmlsdGVyLmpzIiwic3JjL2ZpbHRlcnMvYmx1ci9CbHVyWUZpbHRlci5qcyIsInNyYy9maWx0ZXJzL2JsdXIvU21hcnRCbHVyRmlsdGVyLmpzIiwic3JjL2ZpbHRlcnMvY29sb3IvQ29sb3JNYXRyaXhGaWx0ZXIuanMiLCJzcmMvZmlsdGVycy9jb2xvci9Db2xvclN0ZXBGaWx0ZXIuanMiLCJzcmMvZmlsdGVycy9jb252b2x1dGlvbi9Db252b2x1dGlvbkZpbHRlci5qcyIsInNyYy9maWx0ZXJzL2Nyb3NzaGF0Y2gvQ3Jvc3NIYXRjaEZpbHRlci5qcyIsInNyYy9maWx0ZXJzL2Rpc3BsYWNlbWVudC9EaXNwbGFjZW1lbnRGaWx0ZXIuanMiLCJzcmMvZmlsdGVycy9kb3QvRG90U2NyZWVuRmlsdGVyLmpzIiwic3JjL2ZpbHRlcnMvZHJvcHNoYWRvdy9CbHVyWVRpbnRGaWx0ZXIuanMiLCJzcmMvZmlsdGVycy9kcm9wc2hhZG93L0Ryb3BTaGFkb3dGaWx0ZXIuanMiLCJzcmMvZmlsdGVycy9ncmF5L0dyYXlGaWx0ZXIuanMiLCJzcmMvZmlsdGVycy9pbmRleC5qcyIsInNyYy9maWx0ZXJzL2ludmVydC9JbnZlcnRGaWx0ZXIuanMiLCJzcmMvZmlsdGVycy9ub2lzZS9Ob2lzZUZpbHRlci5qcyIsInNyYy9maWx0ZXJzL3BpeGVsYXRlL1BpeGVsYXRlRmlsdGVyLmpzIiwic3JjL2ZpbHRlcnMvcmdiL1JHQlNwbGl0RmlsdGVyLmpzIiwic3JjL2ZpbHRlcnMvc2VwaWEvU2VwaWFGaWx0ZXIuanMiLCJzcmMvZmlsdGVycy9zaG9ja3dhdmUvU2hvY2t3YXZlRmlsdGVyLmpzIiwic3JjL2ZpbHRlcnMvdGlsdHNoaWZ0L1RpbHRTaGlmdEF4aXNGaWx0ZXIuanMiLCJzcmMvZmlsdGVycy90aWx0c2hpZnQvVGlsdFNoaWZ0RmlsdGVyLmpzIiwic3JjL2ZpbHRlcnMvdGlsdHNoaWZ0L1RpbHRTaGlmdFhGaWx0ZXIuanMiLCJzcmMvZmlsdGVycy90aWx0c2hpZnQvVGlsdFNoaWZ0WUZpbHRlci5qcyIsInNyYy9maWx0ZXJzL3R3aXN0L1R3aXN0RmlsdGVyLmpzIiwic3JjL3NyYy9pbmRleC5qcyIsInNyYy9pbnRlcmFjdGlvbi9JbnRlcmFjdGlvbkRhdGEuanMiLCJzcmMvaW50ZXJhY3Rpb24vSW50ZXJhY3Rpb25NYW5hZ2VyLmpzIiwic3JjL2ludGVyYWN0aW9uL2luZGV4LmpzIiwic3JjL2ludGVyYWN0aW9uL2ludGVyYWN0aXZlVGFyZ2V0LmpzIiwic3JjL2xvYWRlcnMvYml0bWFwRm9udFBhcnNlci5qcyIsInNyYy9sb2FkZXJzL2luZGV4LmpzIiwic3JjL2xvYWRlcnMvbG9hZGVyLmpzIiwic3JjL2xvYWRlcnMvc3ByaXRlc2hlZXRQYXJzZXIuanMiLCJzcmMvbG9hZGVycy90ZXh0dXJlUGFyc2VyLmpzIiwic3JjL21lc2gvTWVzaC5qcyIsInNyYy9tZXNoL1BsYW5lLmpzIiwic3JjL21lc2gvUm9wZS5qcyIsInNyYy9tZXNoL2luZGV4LmpzIiwic3JjL21lc2gvd2ViZ2wvTWVzaFJlbmRlcmVyLmpzIiwic3JjL21lc2gvd2ViZ2wvTWVzaFNoYWRlci5qcyIsInNyYy9wb2x5ZmlsbC9NYXRoLnNpZ24uanMiLCJzcmMvcG9seWZpbGwvT2JqZWN0LmFzc2lnbi5qcyIsInNyYy9wb2x5ZmlsbC9pbmRleC5qcyIsInNyYy9wb2x5ZmlsbC9yZXF1ZXN0QW5pbWF0aW9uRnJhbWUuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUNBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbklBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDeENBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdk1BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNqSEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDOUJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3REQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN6REE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2xDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDN0JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0SUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2hDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUM5Q0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7O0FDNXVDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7QUNoT0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FDM0ZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7OztBQ3JoQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDcEZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDckZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDSkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ25zQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdGtCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3RRQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FDdkNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7QUNubUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3hjQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDaHlCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2hFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNaQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDcEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDMURBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMxRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuWkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzVDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzdOQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNyb0JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3ZtQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdG9DQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzNGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM5VEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2xEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDcEhBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDckZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3JFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDMU5BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDN0RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3JFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM5SEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDN0ZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3RiQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDcEVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNwQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3RGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM3RkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3JHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNUZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzFGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDN1RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMxTkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDMWRBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDblFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMxUUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2xHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2hXQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM1REE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMxUEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDMUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMzWUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzlHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDckRBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMvRkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDMUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2xjQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDakhBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3hLQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDN1dBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3ZDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM1REE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM3REE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM5Z0JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDN0dBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDL0VBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN4REE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDekpBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDalNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDL0JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3ptQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3ZXQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzdEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzNtQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbmJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzdkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3hhQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQy9FQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzNPQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDaldBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3REQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQy9CQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDblJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNwRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM3VkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2xZQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM5VEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbGNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzlRQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzVCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzVCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ25CQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3ZEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzVJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM1R0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMzRkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDcEZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNUJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3RoQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQy9DQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDekZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3hCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2xGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3RFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDekZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMvTEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQy9DQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3JDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNoREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3JEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2pEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNwRkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDaERBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0RkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDM0hBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzVHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNwQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDcENBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FDbkZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7QUM1QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQy9DQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzEyQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQy9DQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdkhBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbkJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzVEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2xGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDcEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzFkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzVIQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ25OQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDakJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuT0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzNEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ1JBO0FBQ0E7QUFDQTtBQUNBOzs7QUNIQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsImZpbGUiOiJnZW5lcmF0ZWQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlc0NvbnRlbnQiOlsiKGZ1bmN0aW9uIGUodCxuLHIpe2Z1bmN0aW9uIHMobyx1KXtpZighbltvXSl7aWYoIXRbb10pe3ZhciBhPXR5cGVvZiByZXF1aXJlPT1cImZ1bmN0aW9uXCImJnJlcXVpcmU7aWYoIXUmJmEpcmV0dXJuIGEobywhMCk7aWYoaSlyZXR1cm4gaShvLCEwKTt2YXIgZj1uZXcgRXJyb3IoXCJDYW5ub3QgZmluZCBtb2R1bGUgJ1wiK28rXCInXCIpO3Rocm93IGYuY29kZT1cIk1PRFVMRV9OT1RfRk9VTkRcIixmfXZhciBsPW5bb109e2V4cG9ydHM6e319O3Rbb11bMF0uY2FsbChsLmV4cG9ydHMsZnVuY3Rpb24oZSl7dmFyIG49dFtvXVsxXVtlXTtyZXR1cm4gcyhuP246ZSl9LGwsbC5leHBvcnRzLGUsdCxuLHIpfXJldHVybiBuW29dLmV4cG9ydHN9dmFyIGk9dHlwZW9mIHJlcXVpcmU9PVwiZnVuY3Rpb25cIiYmcmVxdWlyZTtmb3IodmFyIG89MDtvPHIubGVuZ3RoO28rKylzKHJbb10pO3JldHVybiBzfSkiLCJcblxubW9kdWxlLmV4cG9ydHMgPSB7XG5cbiAgICBjcmVhdGVDb250ZXh0OiBcdFx0XHRyZXF1aXJlKCcuL2xpYi9jcmVhdGVDb250ZXh0JyksXG4gICAgc2V0VmVydGV4QXR0cmliQXJyYXlzOiBcdHJlcXVpcmUoJy4vbGliL3NldFZlcnRleEF0dHJpYkFycmF5cycpLFxuICAgIFxuICAgIEdMQnVmZmVyOiBcdFx0XHRcdHJlcXVpcmUoJy4vbGliL0dMQnVmZmVyJyksXG4gICAgR0xGcmFtZWJ1ZmZlcjogXHRcdFx0cmVxdWlyZSgnLi9saWIvR0xGcmFtZWJ1ZmZlcicpLFxuICAgIEdMU2hhZGVyOiBcdFx0XHRcdHJlcXVpcmUoJy4vbGliL0dMU2hhZGVyJyksXG4gICAgR0xUZXh0dXJlOiBcdFx0XHRcdHJlcXVpcmUoJy4vbGliL0dMVGV4dHVyZScpLFxuICAgIFxuICAgIFZlcnRleEFycmF5T2JqZWN0OiBcdFx0cmVxdWlyZSgnLi9saWIvVmVydGV4QXJyYXlPYmplY3QnKVxuXG59OyIsIlxuLyoqXG4gKiBIZWxwZXIgY2xhc3MgdG8gY3JlYXRlIGEgd2ViR0wgYnVmZmVyXG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIGdsIHtXZWJHTFJlbmRlcmluZ0NvbnRleHR9XG4gKi9cblxudmFyIEVNUFRZX0FSUkFZX0JVRkZFUiA9IG5ldyBBcnJheUJ1ZmZlcigwKTtcblxudmFyIEJ1ZmZlciA9IGZ1bmN0aW9uKGdsLCB0eXBlLCBkYXRhLCBkcmF3VHlwZSlcbntcblx0dGhpcy5nbCA9IGdsO1xuXG5cdHRoaXMuYnVmZmVyID0gZ2wuY3JlYXRlQnVmZmVyKCk7XG5cdHRoaXMudHlwZSA9IHR5cGUgfHwgZ2wuQVJSQVlfQlVGRkVSO1xuXHR0aGlzLmRyYXdUeXBlID0gZHJhd1R5cGUgfHwgZ2wuU1RBVElDX0RSQVc7XG5cdHRoaXMuZGF0YSA9IEVNUFRZX0FSUkFZX0JVRkZFUjtcblxuXHRpZihkYXRhKVxuXHR7XG5cdFx0dGhpcy51cGxvYWQoZGF0YSk7XG5cdH1cbn1cblxuQnVmZmVyLnByb3RvdHlwZS51cGxvYWQgPSBmdW5jdGlvbihkYXRhLCBvZmZzZXQsIGRvbnRCaW5kKVxue1xuXHQvLyB0b2RvIC0gbmVlZGVkP1xuXHQvL2lmKCFkb250QmluZClcblx0dGhpcy5iaW5kKCk7XG5cblx0dmFyIGdsID0gdGhpcy5nbDtcblx0XG5cdGRhdGEgPSBkYXRhIHx8IHRoaXMuZGF0YTtcblx0b2Zmc2V0ID0gb2Zmc2V0IHx8IDA7XG5cblx0aWYodGhpcy5kYXRhLmJ5dGVMZW5ndGggPj0gZGF0YS5ieXRlTGVuZ3RoKVxuXHR7XHRcblx0XHRnbC5idWZmZXJTdWJEYXRhKHRoaXMudHlwZSwgb2Zmc2V0LCBkYXRhKTtcblx0fVxuXHRlbHNlXG5cdHtcblx0XHRnbC5idWZmZXJEYXRhKHRoaXMudHlwZSwgZGF0YSwgdGhpcy5kcmF3VHlwZSk7XG5cdH1cblxuXHR0aGlzLmRhdGEgPSBkYXRhO1xufVxuXG5CdWZmZXIucHJvdG90eXBlLmJpbmQgPSBmdW5jdGlvbigpXG57XG5cdHZhciBnbCA9IHRoaXMuZ2w7XG5cdGdsLmJpbmRCdWZmZXIodGhpcy50eXBlLCB0aGlzLmJ1ZmZlcik7XG59XG5cbkJ1ZmZlci5jcmVhdGVWZXJ0ZXhCdWZmZXIgPSBmdW5jdGlvbihnbCwgZGF0YSwgZHJhd1R5cGUpXG57XG5cdHJldHVybiBuZXcgQnVmZmVyKGdsLCBnbC5BUlJBWV9CVUZGRVIsIGRhdGEsIGRyYXdUeXBlKTtcbn1cblxuQnVmZmVyLmNyZWF0ZUluZGV4QnVmZmVyID0gZnVuY3Rpb24oZ2wsIGRhdGEsIGRyYXdUeXBlKVxue1xuXHRyZXR1cm4gbmV3IEJ1ZmZlcihnbCwgZ2wuRUxFTUVOVF9BUlJBWV9CVUZGRVIsIGRhdGEsIGRyYXdUeXBlKTtcbn1cblxuQnVmZmVyLmNyZWF0ZSA9IGZ1bmN0aW9uKGdsLCB0eXBlLCBkYXRhLCBkcmF3VHlwZSlcbntcblx0cmV0dXJuIG5ldyBCdWZmZXIoZ2wsIHR5cGUsIGRyYXdUeXBlKTtcbn1cblxuLy9UT0RPIERlc3Ryb3kuLlxuXG5tb2R1bGUuZXhwb3J0cyA9IEJ1ZmZlcjtcblxuIiwiXG52YXIgVGV4dHVyZSA9IHJlcXVpcmUoJy4vR0xUZXh0dXJlJyk7XG5cbi8qKlxuICogSGVscGVyIGNsYXNzIHRvIGNyZWF0ZSBhIHdlYkdMIEZyYW1lYnVmZmVyXG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIGdsIHtXZWJHTFJlbmRlcmluZ0NvbnRleHR9XG4gKi9cblxudmFyIEZyYW1lYnVmZmVyID0gZnVuY3Rpb24oZ2wsIHdpZHRoLCBoZWlnaHQpXG57XG5cdHRoaXMuZ2wgPSBnbDtcblxuXHR0aGlzLmZyYW1lYnVmZmVyID0gZ2wuY3JlYXRlRnJhbWVidWZmZXIoKTtcblx0XG5cdHRoaXMuc3RlbmNpbCA9IG51bGw7XG5cdHRoaXMudGV4dHVyZSA9IG51bGw7XG5cblx0dGhpcy53aWR0aCA9IHdpZHRoIHx8IDEwMDtcblx0dGhpcy5oZWlnaHQgPSBoZWlnaHQgfHwgMTAwO1xufVxuXG5GcmFtZWJ1ZmZlci5wcm90b3R5cGUuZW5hYmxlVGV4dHVyZSA9IGZ1bmN0aW9uKHRleHR1cmUpXG57XG5cdHZhciBnbCA9IHRoaXMuZ2w7XG5cblx0dGhpcy50ZXh0dXJlID0gdGV4dHVyZSB8fCBuZXcgVGV4dHVyZShnbCk7XG5cblx0dGhpcy50ZXh0dXJlLmJpbmQoKTtcblxuXHQvL2dsLnRleEltYWdlMkQoZ2wuVEVYVFVSRV8yRCwgMCwgZ2wuUkdCQSwgIHRoaXMud2lkdGgsIHRoaXMuaGVpZ2h0LCAwLCBnbC5SR0JBLCBnbC5VTlNJR05FRF9CWVRFLCBudWxsKTtcblxuXHR0aGlzLmJpbmQoKTtcblxuXHRnbC5mcmFtZWJ1ZmZlclRleHR1cmUyRChnbC5GUkFNRUJVRkZFUiwgZ2wuQ09MT1JfQVRUQUNITUVOVDAsIGdsLlRFWFRVUkVfMkQsIHRoaXMudGV4dHVyZS50ZXh0dXJlLCAwKTtcbn1cblxuRnJhbWVidWZmZXIucHJvdG90eXBlLmVuYWJsZVN0ZW5jaWwgPSBmdW5jdGlvbigpXG57XG5cdGlmKHRoaXMuc3RlbmNpbClyZXR1cm47XG5cblx0dmFyIGdsID0gdGhpcy5nbDtcblxuXHR0aGlzLnN0ZW5jaWwgPSBnbC5jcmVhdGVSZW5kZXJidWZmZXIoKTtcbiAgICBcbiAgICBnbC5iaW5kUmVuZGVyYnVmZmVyKGdsLlJFTkRFUkJVRkZFUiwgdGhpcy5zdGVuY2lsKTtcbiAgICBcbiAgICAvLyBUT0RPLi4gdGhpcyBpcyBkZXB0aCBBTkQgc3RlbmNpbD9cbiAgICBnbC5mcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcihnbC5GUkFNRUJVRkZFUiwgZ2wuREVQVEhfU1RFTkNJTF9BVFRBQ0hNRU5ULCBnbC5SRU5ERVJCVUZGRVIsIHRoaXMuc3RlbmNpbCk7XG4gICAgZ2wucmVuZGVyYnVmZmVyU3RvcmFnZShnbC5SRU5ERVJCVUZGRVIsIGdsLkRFUFRIX1NURU5DSUwsICB0aGlzLndpZHRoICAsIHRoaXMuaGVpZ2h0ICk7XG59XG5cbkZyYW1lYnVmZmVyLnByb3RvdHlwZS5jbGVhciA9IGZ1bmN0aW9uKCByLCBnLCBiLCBhIClcbntcblx0dGhpcy5iaW5kKCk7XG5cblx0dmFyIGdsID0gdGhpcy5nbDtcbiAgICBcbiAgICBnbC5jbGVhckNvbG9yKHIsIGcsIGIsIGEpO1xuICAgIGdsLmNsZWFyKGdsLkNPTE9SX0JVRkZFUl9CSVQpO1xufVxuXG5GcmFtZWJ1ZmZlci5wcm90b3R5cGUuYmluZCA9IGZ1bmN0aW9uKClcbntcblx0dmFyIGdsID0gdGhpcy5nbDtcblx0Z2wuYmluZEZyYW1lYnVmZmVyKGdsLkZSQU1FQlVGRkVSLCB0aGlzLmZyYW1lYnVmZmVyICk7XHRcbn1cblxuRnJhbWVidWZmZXIucHJvdG90eXBlLnVuYmluZCA9IGZ1bmN0aW9uKClcbntcblx0Z2wuYmluZEZyYW1lYnVmZmVyKGdsLkZSQU1FQlVGRkVSLCBudWxsICk7XHRcbn1cblxuRnJhbWVidWZmZXIucHJvdG90eXBlLnJlc2l6ZSA9IGZ1bmN0aW9uKHdpZHRoLCBoZWlnaHQpXG57XG5cdHZhciBnbCA9IHRoaXMuZ2w7XG5cblx0dGhpcy53aWR0aCA9IHdpZHRoO1xuXHR0aGlzLmhlaWdodCA9IGhlaWdodDtcblxuXHRpZiAoIHRoaXMudGV4dHVyZSApXG4gICAge1xuICAgIFx0dGhpcy50ZXh0dXJlLnVwbG9hZERhdGEobnVsbCwgd2lkdGgsIGhlaWdodCk7XG5cdH1cblxuXHRpZiAoIHRoaXMuc3RlbmNpbCApXG4gICAge1xuICAgICAgICAvLyB1cGRhdGUgdGhlIHN0ZW5jaWwgYnVmZmVyIHdpZHRoIGFuZCBoZWlnaHRcbiAgICAgICAgZ2wuYmluZFJlbmRlcmJ1ZmZlcihnbC5SRU5ERVJCVUZGRVIsIHRoaXMuc3RlbmNpbCk7XG4gICAgICAgIGdsLnJlbmRlcmJ1ZmZlclN0b3JhZ2UoZ2wuUkVOREVSQlVGRkVSLCBnbC5ERVBUSF9TVEVOQ0lMLCB3aWR0aCwgaGVpZ2h0KTtcbiAgICB9XG59XG5cbkZyYW1lYnVmZmVyLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24oKVxue1xuXHR2YXIgZ2wgPSB0aGlzLmdsO1xuXHQvL1RPRE9cblx0Z2wuZGVsZXRlRnJhbWVidWZmZXIodGhpcy5mcmFtZWJ1ZmZlcik7XG59XG5cbkZyYW1lYnVmZmVyLmNyZWF0ZVJHQkEgPSBmdW5jdGlvbihnbCwgd2lkdGgsIGhlaWdodCwgZGF0YSlcbntcblx0dmFyIHRleHR1cmUgPSBUZXh0dXJlLmZyb21EYXRhKGdsLCBudWxsLCB3aWR0aCwgaGVpZ2h0KTtcblx0dGV4dHVyZS5lbmFibGVOZWFyZXN0U2NhbGluZygpO1xuICAgIHRleHR1cmUuZW5hYmxlV3JhcENsYW1wKCk7XG5cbiAgICAvL25vdyBjcmVhdGUgdGhlIGZyYW1lYnVmZmVyIG9iamVjdCBhbmQgYXR0YWNoIHRoZSB0ZXh0dXJlIHRvIGl0LlxuICAgIHZhciBmYm8gPSBuZXcgRnJhbWVidWZmZXIoZ2wsIHdpZHRoLCBoZWlnaHQpO1xuICAgIGZiby5lbmFibGVUZXh0dXJlKHRleHR1cmUpO1xuXG4gICAgcmV0dXJuIGZibztcbn1cblxuRnJhbWVidWZmZXIuY3JlYXRlRmxvYXQzMiA9IGZ1bmN0aW9uKGdsLCB3aWR0aCwgaGVpZ2h0LCBkYXRhKVxue1xuXHQvLyBjcmVhdGUgYSBuZXcgdGV4dHVyZS4uXG4gICAgdmFyIHRleHR1cmUgPSBuZXcgVGV4dHVyZS5mcm9tRGF0YShnbCwgZGF0YSwgd2lkdGgsIGhlaWdodCk7XG4gICAgdGV4dHVyZS5lbmFibGVOZWFyZXN0U2NhbGluZygpO1xuICAgIHRleHR1cmUuZW5hYmxlV3JhcENsYW1wKCk7XG5cbiAgICAvL25vdyBjcmVhdGUgdGhlIGZyYW1lYnVmZmVyIG9iamVjdCBhbmQgYXR0YWNoIHRoZSB0ZXh0dXJlIHRvIGl0LlxuICAgIHZhciBmYm8gPSBuZXcgRnJhbWVidWZmZXIoZ2wsIHdpZHRoLCBoZWlnaHQpO1xuICAgIGZiby5lbmFibGVUZXh0dXJlKHRleHR1cmUpXG5cbiAgICByZXR1cm4gZmJvO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IEZyYW1lYnVmZmVyO1xuXG4iLCJcbnZhciBjb21waWxlUHJvZ3JhbSA9IHJlcXVpcmUoJy4vc2hhZGVyL2NvbXBpbGVQcm9ncmFtJyksXG5cdGV4dHJhY3RBdHRyaWJ1dGVzID0gcmVxdWlyZSgnLi9zaGFkZXIvZXh0cmFjdEF0dHJpYnV0ZXMnKSxcblx0ZXh0cmFjdFVuaWZvcm1zID0gcmVxdWlyZSgnLi9zaGFkZXIvZXh0cmFjdFVuaWZvcm1zJyksXG5cdGdlbmVyYXRlVW5pZm9ybUFjY2Vzc09iamVjdCA9IHJlcXVpcmUoJy4vc2hhZGVyL2dlbmVyYXRlVW5pZm9ybUFjY2Vzc09iamVjdCcpO1xuXG4vKipcbiAqIEhlbHBlciBjbGFzcyB0byBjcmVhdGUgYSB3ZWJHTCBTaGFkZXJcbiAqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gZ2wge1dlYkdMUmVuZGVyaW5nQ29udGV4dH1cbiAqL1xudmFyIFNoYWRlciA9IGZ1bmN0aW9uKGdsLCB2ZXJ0ZXhTcmMsIGZyYWdtZW50U3JjKVxue1xuXHR0aGlzLmdsID0gZ2w7XG5cblx0Ly8gRmlyc3QgY29tcGlsZSB0aGUgcHJvZ3JhbS4uXG5cdHRoaXMucHJvZ3JhbSA9IGNvbXBpbGVQcm9ncmFtKGdsLCB2ZXJ0ZXhTcmMsIGZyYWdtZW50U3JjKTtcblxuXHQvLyBuZXh0IGV4dHJhY3QgdGhlIGF0dHJpYnV0ZXNcblx0dGhpcy5hdHRyaWJ1dGVzID0gZXh0cmFjdEF0dHJpYnV0ZXMoZ2wsIHRoaXMucHJvZ3JhbSk7IFxuXG4gICAgdmFyIHVuaWZvcm1EYXRhID0gZXh0cmFjdFVuaWZvcm1zKGdsLCB0aGlzLnByb2dyYW0pO1xuXG4gICAgdGhpcy51bmlmb3JtcyA9IGdlbmVyYXRlVW5pZm9ybUFjY2Vzc09iamVjdCggZ2wsIHVuaWZvcm1EYXRhICk7XG59XG5cblNoYWRlci5wcm90b3R5cGUuYmluZCA9IGZ1bmN0aW9uKClcbntcblx0dGhpcy5nbC51c2VQcm9ncmFtKHRoaXMucHJvZ3JhbSk7XG59XG5cblNoYWRlci5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uKClcbntcblx0dmFyIGdsID0gdGhpcy5nbDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBTaGFkZXI7XG5cbiIsIlxuLyoqXG4gKiBIZWxwZXIgY2xhc3MgdG8gY3JlYXRlIGEgd2ViR0wgVGV4dHVyZVxuICpcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqIEBwYXJhbSBnbCB7V2ViR0xSZW5kZXJpbmdDb250ZXh0fSBhIFdlYkdMIGNvbnRleHRcbiAqIEBwYXJhbSB3aWR0aCB7bnVtYmVyfSB0aGUgd2lkdGggb2YgdGhlIHRleHR1cmUgXG4gKiBAcGFyYW0gaGVpZ2h0IHtudW1iZXJ9IHRoZSBoZWlnaHQgb2YgdGhlIHRleHR1cmUgXG4gKiBAcGFyYW0gZm9ybWF0IHtudW1iZXJ9IHRoZSBwaXhlbCBmb3JtYXQgb2YgdGhlIHRleHR1cmUuIGRlZmF1bHRzIHRvIGdsLlJHQkFcbiAqIEBwYXJhbSB0eXBlIHtudW1iZXJ9IHRoZSBnbCB0eXBlIG9mIHRoZSB0ZXh0dXJlLiBkZWZhdWx0cyB0byBnbC5VTlNJR05FRF9CWVRFXG4gKi9cbnZhciBUZXh0dXJlID0gZnVuY3Rpb24oZ2wsIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgdHlwZSlcbntcblx0dGhpcy5nbCA9IGdsO1xuXG5cdHRoaXMudGV4dHVyZSA9IGdsLmNyZWF0ZVRleHR1cmUoKTtcblxuXHQvLyBzb21lIHNldHRpbmdzLi5cblx0dGhpcy5taXBtYXAgPSBmYWxzZTtcblxuXHR0aGlzLnByZW11bHRpcGx5QWxwaGEgPSBmYWxzZTtcblxuXHR0aGlzLndpZHRoID0gd2lkdGggfHwgMDtcblx0dGhpcy5oZWlnaHQgPSBoZWlnaHQgfHwgMDtcblxuXHR0aGlzLmZvcm1hdCA9IGZvcm1hdCB8fCBnbC5SR0JBO1xuXHR0aGlzLnR5cGUgPSB0eXBlIHx8IGdsLlVOU0lHTkVEX0JZVEU7XG5cblxufVxuXG4vKipcbiAqIEBwYXJhbSB7UElYSS5nbENvcmUuVGV4dHVyZX0gW3Zhcm5hbWVdIFtkZXNjcmlwdGlvbl1cbiAqL1xuVGV4dHVyZS5wcm90b3R5cGUudXBsb2FkID0gZnVuY3Rpb24oc291cmNlKVxue1xuXHR0aGlzLmJpbmQoKTtcblxuXHR2YXIgZ2wgPSB0aGlzLmdsO1xuXG5cdHRoaXMud2lkdGggPSBzb3VyY2Uud2lkdGg7XG5cdHRoaXMuaGVpZ2h0ID0gc291cmNlLmhlaWdodDtcblxuXHRnbC5waXhlbFN0b3JlaShnbC5VTlBBQ0tfUFJFTVVMVElQTFlfQUxQSEFfV0VCR0wsIHRoaXMucHJlbXVsdGlwbHlBbHBoYSk7XG4gICAgZ2wudGV4SW1hZ2UyRChnbC5URVhUVVJFXzJELCAwLCB0aGlzLmZvcm1hdCwgdGhpcy5mb3JtYXQsIHRoaXMudHlwZSwgc291cmNlKTtcbn1cblxudmFyIEZMT0FUSU5HX1BPSU5UX0FWQUlMQUJMRSA9IGZhbHNlO1xuXG5UZXh0dXJlLnByb3RvdHlwZS51cGxvYWREYXRhID0gZnVuY3Rpb24oZGF0YSwgd2lkdGgsIGhlaWdodClcbntcblx0dGhpcy5iaW5kKCk7XG5cdFxuXHR0aGlzLndpZHRoID0gd2lkdGggfHwgdGhpcy53aWR0aDtcblx0dGhpcy5oZWlnaHQgPSBoZWlnaHQgfHwgdGhpcy5oZWlnaHQ7XG5cblx0aWYoZGF0YSBpbnN0YW5jZW9mIEZsb2F0MzJBcnJheSlcblx0e1xuXHRcdGlmKCFGTE9BVElOR19QT0lOVF9BVkFJTEFCTEUpXG5cdFx0e1xuXHRcdFx0dmFyIGV4dCA9IGdsLmdldEV4dGVuc2lvbihcIk9FU190ZXh0dXJlX2Zsb2F0XCIpO1xuXHRcdFx0XG5cdFx0XHRpZihleHQpXG5cdFx0XHR7XG5cdFx0XHRcdEZMT0FUSU5HX1BPSU5UX0FWQUlMQUJMRSA9IHRydWU7XG5cdFx0XHR9XG5cdFx0XHRlbHNlXG5cdFx0XHR7XG5cdFx0XHRcdHRocm93IG5ldyBFcnJvcignZmxvYXRpbmcgcG9pbnQgdGV4dHVyZXMgbm90IGF2YWlsYWJsZScpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHRoaXMudHlwZSA9IGdsLkZMT0FUO1xuXHR9XG5cdGVsc2Vcblx0e1xuXHRcdC8vIFRPRE8gc3VwcG9ydCBmb3Igb3RoZXIgdHlwZXNcblx0XHR0aGlzLnR5cGUgPSBnbC5VTlNJR05FRF9CWVRFO1xuXHR9XG5cblx0Ly8gd2hhdCB0eXBlIG9mIGRhdGE/XG5cdGdsLnBpeGVsU3RvcmVpKGdsLlVOUEFDS19QUkVNVUxUSVBMWV9BTFBIQV9XRUJHTCwgdGhpcy5wcmVtdWx0aXBseUFscGhhKTtcblx0Z2wudGV4SW1hZ2UyRChnbC5URVhUVVJFXzJELCAwLCB0aGlzLmZvcm1hdCwgIHRoaXMud2lkdGgsIHRoaXMuaGVpZ2h0LCAwLCB0aGlzLmZvcm1hdCwgdGhpcy50eXBlLCBkYXRhIHx8IG51bGwpO1xuXG59XG5cblRleHR1cmUucHJvdG90eXBlLmJpbmQgPSBmdW5jdGlvbihsb2NhdGlvbilcbntcblx0dmFyIGdsID0gdGhpcy5nbDtcblxuXHRpZihsb2NhdGlvbiAhPT0gdW5kZWZpbmVkKVxuXHR7XG5cdFx0Z2wuYWN0aXZlVGV4dHVyZShnbC5URVhUVVJFMCArIGxvY2F0aW9uKTtcblx0fVxuXG5cdGdsLmJpbmRUZXh0dXJlKGdsLlRFWFRVUkVfMkQsIHRoaXMudGV4dHVyZSk7XG59XG5cblRleHR1cmUucHJvdG90eXBlLnVuYmluZCA9IGZ1bmN0aW9uKClcbntcblx0dmFyIGdsID0gdGhpcy5nbDtcblx0Z2wuYmluZFRleHR1cmUoZ2wuVEVYVFVSRV8yRCwgbnVsbCk7XG59XG5cblRleHR1cmUucHJvdG90eXBlLm1pbkZpbHRlciA9IGZ1bmN0aW9uKCBsaW5lYXIgKVxue1xuXHR2YXIgZ2wgPSB0aGlzLmdsO1xuXG5cdHRoaXMuYmluZCgpO1xuXG5cdGlmKHRoaXMubWlwbWFwKVxuXHR7XG5cdFx0Z2wudGV4UGFyYW1ldGVyaShnbC5URVhUVVJFXzJELCBnbC5URVhUVVJFX01JTl9GSUxURVIsIGxpbmVhciA/IGdsLkxJTkVBUl9NSVBNQVBfTElORUFSIDogZ2wuTkVBUkVTVF9NSVBNQVBfTkVBUkVTVCk7XG5cdH1cblx0ZWxzZVxuXHR7XG5cdFx0Z2wudGV4UGFyYW1ldGVyaShnbC5URVhUVVJFXzJELCBnbC5URVhUVVJFX01JTl9GSUxURVIsIGxpbmVhciA/IGdsLkxJTkVBUiA6IGdsLk5FQVJFU1QpO1xuXHR9XHRcbn1cblxuVGV4dHVyZS5wcm90b3R5cGUubWFnRmlsdGVyID0gZnVuY3Rpb24oIGxpbmVhciApXG57XG5cdHZhciBnbCA9IHRoaXMuZ2w7XG5cblx0dGhpcy5iaW5kKCk7XG5cblx0Z2wudGV4UGFyYW1ldGVyaShnbC5URVhUVVJFXzJELCBnbC5URVhUVVJFX01BR19GSUxURVIsIGxpbmVhciA/IGdsLkxJTkVBUiA6IGdsLk5FQVJFU1QpO1xufVxuXG5UZXh0dXJlLnByb3RvdHlwZS5lbmFibGVNaXBtYXAgPSBmdW5jdGlvbigpXG57XG5cdHRoaXMuYmluZCgpO1xuXG5cdHRoaXMubWlwbWFwID0gdHJ1ZTtcblx0Z2wuZ2VuZXJhdGVNaXBtYXAoZ2wuVEVYVFVSRV8yRCk7XG59XG5cblRleHR1cmUucHJvdG90eXBlLmVuYWJsZUxpbmVhclNjYWxpbmcgPSBmdW5jdGlvbigpXG57XG5cdHRoaXMubWluRmlsdGVyKHRydWUpO1xuXHR0aGlzLm1hZ0ZpbHRlcih0cnVlKTtcbn1cblxuVGV4dHVyZS5wcm90b3R5cGUuZW5hYmxlTmVhcmVzdFNjYWxpbmcgPSBmdW5jdGlvbigpXG57XG5cdHRoaXMubWluRmlsdGVyKGZhbHNlKTtcblx0dGhpcy5tYWdGaWx0ZXIoZmFsc2UpO1xufVxuXG5UZXh0dXJlLnByb3RvdHlwZS5lbmFibGVXcmFwQ2xhbXAgPSBmdW5jdGlvbigpXG57XG5cdHZhciBnbCA9IHRoaXMuZ2w7XG5cblx0dGhpcy5iaW5kKCk7XG5cblx0Z2wudGV4UGFyYW1ldGVyaShnbC5URVhUVVJFXzJELCBnbC5URVhUVVJFX1dSQVBfUywgZ2wuQ0xBTVBfVE9fRURHRSk7XG4gICAgZ2wudGV4UGFyYW1ldGVyaShnbC5URVhUVVJFXzJELCBnbC5URVhUVVJFX1dSQVBfVCwgZ2wuQ0xBTVBfVE9fRURHRSk7XG59XG5cblRleHR1cmUucHJvdG90eXBlLmVuYWJsZVdyYXBSZXBlYXQgPSBmdW5jdGlvbigpXG57XG5cdHZhciBnbCA9IHRoaXMuZ2w7XG5cblx0dGhpcy5iaW5kKCk7XG5cdFxuXHRnbC50ZXhQYXJhbWV0ZXJpKGdsLlRFWFRVUkVfMkQsIGdsLlRFWFRVUkVfV1JBUF9TLCBnbC5SRVBFQVQpO1xuICAgIGdsLnRleFBhcmFtZXRlcmkoZ2wuVEVYVFVSRV8yRCwgZ2wuVEVYVFVSRV9XUkFQX1QsIGdsLlJFUEVBVCk7XG59XG5cblRleHR1cmUucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbigpXG57XG5cdHZhciBnbCA9IHRoaXMuZ2w7XG5cdC8vVE9ET1xuXHRnbC5kZWxldGVUZXh0dXJlKHRoaXMudGV4dHVyZSk7XG59XG5cbi8vVGV4dHVyZS5cblRleHR1cmUuZnJvbVNvdXJjZSA9IGZ1bmN0aW9uKGdsLCBzb3VyY2UsIHByZW11bHRpcGx5QWxwaGEpXG57XG5cdHZhciB0ZXh0dXJlID0gbmV3IFRleHR1cmUoZ2wpO1xuXHR0ZXh0dXJlLnByZW11bHRpcGx5QWxwaGEgPSBwcmVtdWx0aXBseUFscGhhIHx8IGZhbHNlO1xuXHR0ZXh0dXJlLnVwbG9hZChzb3VyY2UpO1xuXG5cdHJldHVybiB0ZXh0dXJlO1xufVxuXG5UZXh0dXJlLmZyb21EYXRhID0gZnVuY3Rpb24oZ2wsIGRhdGEsIHdpZHRoLCBoZWlnaHQpXG57XG5cdC8vY29uc29sZS5sb2coZGF0YSwgd2lkdGgsIGhlaWdodCk7XG5cdHZhciB0ZXh0dXJlID0gbmV3IFRleHR1cmUoZ2wpO1xuXHR0ZXh0dXJlLnVwbG9hZERhdGEoZGF0YSwgd2lkdGgsIGhlaWdodCk7XG5cblx0cmV0dXJuIHRleHR1cmU7XG59XG5cblxubW9kdWxlLmV4cG9ydHMgPSBUZXh0dXJlO1xuXG4iLCJcbi8qKlxuICogR2VuZXJpYyBNYXNrIFN0YWNrIGRhdGEgc3RydWN0dXJlXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKi9cblxuLy8gc3RhdGUgb2JqZWN0Ly9cblxuXG5mdW5jdGlvbiBWZXJ0ZXhBcnJheU9iamVjdChnbClcbntcblx0XG5cdHRoaXMubmF0aXZlVmFvRXh0ZW5zaW9uID0gKFxuICAgICAgZ2wuZ2V0RXh0ZW5zaW9uKCdPRVNfdmVydGV4X2FycmF5X29iamVjdCcpIHx8XG4gICAgICBnbC5nZXRFeHRlbnNpb24oJ01PWl9PRVNfdmVydGV4X2FycmF5X29iamVjdCcpIHx8XG4gICAgICBnbC5nZXRFeHRlbnNpb24oJ1dFQktJVF9PRVNfdmVydGV4X2FycmF5X29iamVjdCcpXG4gICAgKTtcblxuLy9cdHRoaXMubmF0aXZlVmFvRXh0ZW5zaW9uID0gbnVsbDtcblxuXHRpZih0aGlzLm5hdGl2ZVZhb0V4dGVuc2lvbilcblx0e1xuXHRcdHRoaXMubmF0aXZlVmFvID0gdGhpcy5uYXRpdmVWYW9FeHRlbnNpb24uY3JlYXRlVmVydGV4QXJyYXlPRVMoKTsgIFxuXHR9XG5cblx0dGhpcy5nbCA9IGdsO1xuXG5cdHRoaXMuYXR0cmlidXRlcyA9IFtdO1xuXG5cdHRoaXMuaW5kZXhCdWZmZXIgPSBudWxsO1xuXG5cdHRoaXMuZGlydHkgPSBmYWxzZTtcblxuXHRcbn1cblxuVmVydGV4QXJyYXlPYmplY3QucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gVmVydGV4QXJyYXlPYmplY3Q7XG5tb2R1bGUuZXhwb3J0cyA9IFZlcnRleEFycmF5T2JqZWN0O1xuXG5WZXJ0ZXhBcnJheU9iamVjdC5wcm90b3R5cGUuYmluZCA9IGZ1bmN0aW9uKClcbntcblx0aWYodGhpcy5uYXRpdmVWYW8pXG5cdHtcblx0XHR0aGlzLm5hdGl2ZVZhb0V4dGVuc2lvbi5iaW5kVmVydGV4QXJyYXlPRVModGhpcy5uYXRpdmVWYW8pOyAgXG5cblx0XHRpZih0aGlzLmRpcnR5KVxuXHRcdHtcblx0XHRcdHRoaXMuZGlydHkgPSBmYWxzZTtcblx0XHRcdHRoaXMuYWN0aXZhdGUoKTtcblx0XHR9XG5cdH1cblx0ZWxzZVxuXHR7XG5cdFx0dGhpcy5hY3RpdmF0ZSgpO1xuXHR9XG59XG5cblZlcnRleEFycmF5T2JqZWN0LnByb3RvdHlwZS51bmJpbmQgPSBmdW5jdGlvbigpXG57XG5cdGlmKHRoaXMubmF0aXZlVmFvKVxuXHR7XG5cdFx0dGhpcy5uYXRpdmVWYW9FeHRlbnNpb24uYmluZFZlcnRleEFycmF5T0VTKG51bGwpO1xuXHR9XG59XG5cblZlcnRleEFycmF5T2JqZWN0LnByb3RvdHlwZS5hY3RpdmF0ZSA9IGZ1bmN0aW9uKClcbntcblx0dmFyIGdsID0gdGhpcy5nbDtcblxuXHRmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuYXR0cmlidXRlcy5sZW5ndGg7IGkrKykgXG5cdHtcblx0XHR2YXIgYXR0cmliID0gdGhpcy5hdHRyaWJ1dGVzW2ldO1xuXHRcdGF0dHJpYi5idWZmZXIuYmluZCgpO1x0XG5cblx0XHRhdHRyaWIuYXR0cmlidXRlLnBvaW50ZXIoYXR0cmliLnR5cGUsIGF0dHJpYi5ub3JtYWxpemVkLCBhdHRyaWIuc3RyaWRlLCBhdHRyaWIuc3RhcnQpOyBcblx0XHRcblx0XHRnbC5lbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShhdHRyaWIuYXR0cmlidXRlLmxvY2F0aW9uKTtcblx0fTtcblxuXHR0aGlzLmluZGV4QnVmZmVyLmJpbmQoKTtcbn1cblxuVmVydGV4QXJyYXlPYmplY3QucHJvdG90eXBlLmFkZEF0dHJpYnV0ZSA9IGZ1bmN0aW9uKGJ1ZmZlciwgYXR0cmlidXRlLCB0eXBlLCBub3JtYWxpemVkLCBzdHJpZGUsIHN0YXJ0KVxue1xuICAgIHRoaXMuYXR0cmlidXRlcy5wdXNoKHtcbiAgICBcdGJ1ZmZlcjogXHRidWZmZXIsXG4gICAgXHRhdHRyaWJ1dGU6IFx0YXR0cmlidXRlLFxuXG4gICAgXHRsb2NhdGlvbjogXHRhdHRyaWJ1dGUubG9jYXRpb24sXG5cdCBcdHR5cGU6IFx0XHR0eXBlIHx8IHRoaXMuZ2wuRkxPQVQsXG5cdCBcdG5vcm1hbGl6ZWQ6IG5vcm1hbGl6ZWQgfHwgZmFsc2UsXG5cdCBcdHN0cmlkZTogXHRzdHJpZGUgfHwgMCxcblx0IFx0c3RhcnQ6IFx0XHRzdGFydCB8fCAwXG5cdH0pXG5cblx0dGhpcy5kaXJ0eSA9IHRydWU7XG59XG5cblxuVmVydGV4QXJyYXlPYmplY3QucHJvdG90eXBlLmFkZEluZGV4ID0gZnVuY3Rpb24oYnVmZmVyLCBvcHRpb25zKVxue1xuICAgIHRoaXMuaW5kZXhCdWZmZXIgPSBidWZmZXI7XG5cbiAgICB0aGlzLmRpcnR5ID0gdHJ1ZTtcbn1cblxuVmVydGV4QXJyYXlPYmplY3QucHJvdG90eXBlLmRyYXcgPSBmdW5jdGlvbih0eXBlLCBzaXplLCBzdGFydClcbntcblx0dmFyIGdsID0gdGhpcy5nbDtcblx0Z2wuZHJhd0VsZW1lbnRzKHR5cGUsIHNpemUsIGdsLlVOU0lHTkVEX1NIT1JULCBzdGFydCk7XG59XG5cbiIsIlxuLyoqXG4gKiBIZWxwZXIgY2xhc3MgdG8gY3JlYXRlIGEgd2ViR0wgQ29udGV4dFxuICpcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqIEBwYXJhbSBnbCB7V2ViR0xSZW5kZXJpbmdDb250ZXh0fVxuICovXG5cbnZhciBDT05URVhUX1VJRCA9IDA7XG5cbnZhciBjcmVhdGVDb250ZXh0ID0gZnVuY3Rpb24oY2FudmFzLCBvcHRpb25zKVxue1xuICAgIGdsID0gY2FudmFzLmdldENvbnRleHQoJ3dlYmdsJywgb3B0aW9ucykgfHwgXG4gICAgXHQgY2FudmFzLmdldENvbnRleHQoJ2V4cGVyaW1lbnRhbC13ZWJnbCcsIG9wdGlvbnMpO1xuXG4gICAgaWYgKCFnbClcbiAgICB7XG4gICAgICAgIC8vIGZhaWwsIG5vdCBhYmxlIHRvIGdldCBhIGNvbnRleHRcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdUaGlzIGJyb3dzZXIgZG9lcyBub3Qgc3VwcG9ydCB3ZWJHTC4gVHJ5IHVzaW5nIHRoZSBjYW52YXMgcmVuZGVyZXInKTtcbiAgICB9XG5cbiAgICAvLyBtaWdodCB3YW50IHRvIHBoYXNlIHRoaXMgb3V0P1xuICAgIGdsLmlkID0gQ09OVEVYVF9VSUQrKztcblxuICAgIHJldHVybiBnbDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBjcmVhdGVDb250ZXh0O1xuXG4iLCIvKipcbiAqIEdlbmVyaWMgTWFzayBTdGFjayBkYXRhIHN0cnVjdHVyZVxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICovXG5cbnZhciBHTF9NQVAgPSB7fTtcblxuXG52YXIgc2V0VmVydGV4QXR0cmliQXJyYXlzID0gZnVuY3Rpb24gKGdsLCBhdHRyaWJzKVxue1x0XG4gICAvLyBjb25zb2xlLmxvZyhnbC5pZClcbiAgICB2YXIgZGF0YSA9IEdMX01BUFtnbC5pZF07XG5cbiAgICBpZighZGF0YSlcbiAgICB7XG5cdCAgIHZhciBtYXhBdHRyaWJzID0gZ2wuZ2V0UGFyYW1ldGVyKGdsLk1BWF9WRVJURVhfQVRUUklCUyk7XG5cdFx0ZGF0YSA9IEdMX01BUFtnbC5pZF0gPSB7dGVtcEF0dHJpYlN0YXRlOm5ldyBBcnJheShtYXhBdHRyaWJzKVxuXHRcdFx0XHQgXHQgXHRcdCAgICxhdHRyaWJTdGF0ZTpuZXcgQXJyYXkobWF4QXR0cmlicyl9O1xuXHR9XG5cdFxuICAgIHZhciBpLFxuICAgIFx0dGVtcEF0dHJpYlN0YXRlID0gZGF0YS50ZW1wQXR0cmliU3RhdGUsXG4gICAgXHRhdHRyaWJTdGF0ZSA9IGRhdGEuYXR0cmliU3RhdGU7XG5cbiAgICBmb3IgKGkgPSAwOyBpIDwgdGVtcEF0dHJpYlN0YXRlLmxlbmd0aDsgaSsrKVxuICAgIHtcbiAgICAgICAgdGVtcEF0dHJpYlN0YXRlW2ldID0gZmFsc2U7XG4gICAgfVxuXG4gICAgLy8gc2V0IHRoZSBuZXcgYXR0cmlic1xuICAgIGZvciAoaSBpbiBhdHRyaWJzKVxuICAgIHtcbiAgICAgICAgdGVtcEF0dHJpYlN0YXRlW2F0dHJpYnNbaV0ubG9jYXRpb25dID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBmb3IgKGkgPSAxOyBpIDwgYXR0cmliU3RhdGUubGVuZ3RoOyBpKyspXG4gICAge1xuICAgICAgICBpZiAoYXR0cmliU3RhdGVbaV0gIT09IHRlbXBBdHRyaWJTdGF0ZVtpXSlcbiAgICAgICAge1xuICAgICAgICAgICAgYXR0cmliU3RhdGVbaV0gPSB0ZW1wQXR0cmliU3RhdGVbaV07XG5cbiAgICAgICAgICAgIGlmIChkYXRhLmF0dHJpYlN0YXRlW2ldKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGdsLmVuYWJsZVZlcnRleEF0dHJpYkFycmF5KGkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGdsLmRpc2FibGVWZXJ0ZXhBdHRyaWJBcnJheShpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn07XG5cbm1vZHVsZS5leHBvcnRzID0gc2V0VmVydGV4QXR0cmliQXJyYXlzOyIsIlxuXG5cblxuY29tcGlsZVByb2dyYW0gPSBmdW5jdGlvbihnbCwgdmVydGV4U3JjLCBmcmFnbWVudFNyYylcbntcbiAgICB2YXIgZ2xWZXJ0U2hhZGVyID0gY29tcGlsZVNoYWRlcihnbCwgZ2wuVkVSVEVYX1NIQURFUiwgdmVydGV4U3JjKTtcbiAgICB2YXIgZ2xGcmFnU2hhZGVyID0gY29tcGlsZVNoYWRlcihnbCwgZ2wuRlJBR01FTlRfU0hBREVSLCBmcmFnbWVudFNyYyk7XG5cbiAgICB2YXIgcHJvZ3JhbSA9IGdsLmNyZWF0ZVByb2dyYW0oKTtcblxuICAgIGdsLmF0dGFjaFNoYWRlcihwcm9ncmFtLCBnbFZlcnRTaGFkZXIpO1xuICAgIGdsLmF0dGFjaFNoYWRlcihwcm9ncmFtLCBnbEZyYWdTaGFkZXIpO1xuICAgIGdsLmxpbmtQcm9ncmFtKHByb2dyYW0pO1xuXG4gICAgLy8gaWYgbGlua2luZyBmYWlscywgdGhlbiBsb2cgYW5kIGNsZWFudXBcbiAgICBpZiAoIWdsLmdldFByb2dyYW1QYXJhbWV0ZXIocHJvZ3JhbSwgZ2wuTElOS19TVEFUVVMpKVxuICAgIHtcbiAgICAgICAgY29uc29sZS5lcnJvcignUGl4aS5qcyBFcnJvcjogQ291bGQgbm90IGluaXRpYWxpemUgc2hhZGVyLicpO1xuICAgICAgICBjb25zb2xlLmVycm9yKCdnbC5WQUxJREFURV9TVEFUVVMnLCBnbC5nZXRQcm9ncmFtUGFyYW1ldGVyKHByb2dyYW0sIGdsLlZBTElEQVRFX1NUQVRVUykpO1xuICAgICAgICBjb25zb2xlLmVycm9yKCdnbC5nZXRFcnJvcigpJywgZ2wuZ2V0RXJyb3IoKSk7XG5cbiAgICAgICAgLy8gaWYgdGhlcmUgaXMgYSBwcm9ncmFtIGluZm8gbG9nLCBsb2cgaXRcbiAgICAgICAgaWYgKGdsLmdldFByb2dyYW1JbmZvTG9nKHByb2dyYW0pICE9PSAnJylcbiAgICAgICAge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKCdQaXhpLmpzIFdhcm5pbmc6IGdsLmdldFByb2dyYW1JbmZvTG9nKCknLCBnbC5nZXRQcm9ncmFtSW5mb0xvZyhwcm9ncmFtKSk7XG4gICAgICAgIH1cblxuICAgICAgICBnbC5kZWxldGVQcm9ncmFtKHByb2dyYW0pO1xuICAgICAgICBwcm9ncmFtID0gbnVsbDtcbiAgICB9XG5cbiAgICAvLyBjbGVhbiB1cCBzb21lIHNoYWRlcnNcbiAgICBnbC5kZWxldGVTaGFkZXIoZ2xWZXJ0U2hhZGVyKTtcbiAgICBnbC5kZWxldGVTaGFkZXIoZ2xGcmFnU2hhZGVyKTtcblxuICAgIHJldHVybiBwcm9ncmFtO1xufVxuXG52YXIgY29tcGlsZVNoYWRlciA9IGZ1bmN0aW9uIChnbCwgdHlwZSwgc3JjKVxue1xuICAgIHZhciBzaGFkZXIgPSBnbC5jcmVhdGVTaGFkZXIodHlwZSk7XG5cbiAgICBnbC5zaGFkZXJTb3VyY2Uoc2hhZGVyLCBzcmMpO1xuICAgIGdsLmNvbXBpbGVTaGFkZXIoc2hhZGVyKTtcblxuICAgIGlmICghZ2wuZ2V0U2hhZGVyUGFyYW1ldGVyKHNoYWRlciwgZ2wuQ09NUElMRV9TVEFUVVMpKVxuICAgIHtcbiAgICAgICAgY29uc29sZS5sb2coZ2wuZ2V0U2hhZGVySW5mb0xvZyhzaGFkZXIpKTtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgcmV0dXJuIHNoYWRlcjtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gY29tcGlsZVByb2dyYW07XG5cbiIsIlxuXG52YXIgZGVmYXVsdFZhbHVlID0gZnVuY3Rpb24odHlwZSwgc2l6ZSkgXG57XG4gICAgc3dpdGNoICh0eXBlKVxuICAgIHtcbiAgICAgICAgY2FzZSAnZmxvYXQnOlxuICAgICAgICAgICAgcmV0dXJuIDA7XG5cbiAgICAgICAgY2FzZSAndmVjMic6IFxuICAgICAgICAgICAgcmV0dXJuIG5ldyBGbG9hdDMyQXJyYXkoMiAqIHNpemUpO1xuXG4gICAgICAgIGNhc2UgJ3ZlYzMnOlxuICAgICAgICAgICAgcmV0dXJuIG5ldyBGbG9hdDMyQXJyYXkoMyAqIHNpemUpO1xuXG4gICAgICAgIGNhc2UgJ3ZlYzQnOiAgICAgXG4gICAgICAgICAgICByZXR1cm4gbmV3IEZsb2F0MzJBcnJheSg0ICogc2l6ZSk7XG4gICAgICAgICAgICBcbiAgICAgICAgY2FzZSAnaW50JzpcbiAgICAgICAgY2FzZSAnc2FtcGxlcjJEJzpcbiAgICAgICAgICAgIHJldHVybiAwO1xuXG4gICAgICAgIGNhc2UgJ2l2ZWMyJzogICBcbiAgICAgICAgICAgIHJldHVybiBuZXcgSW50MzJBcnJheSgyICogc2l6ZSk7XG5cbiAgICAgICAgY2FzZSAnaXZlYzMnOlxuICAgICAgICAgICAgcmV0dXJuIG5ldyBJbnQzMkFycmF5KDMgKiBzaXplKTtcblxuICAgICAgICBjYXNlICdpdmVjNCc6IFxuICAgICAgICAgICAgcmV0dXJuIG5ldyBJbnQzMkFycmF5KDQgKiBzaXplKTtcblxuICAgICAgICBjYXNlICdib29sJzogICAgIFxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuXG4gICAgICAgIGNhc2UgJ2J2ZWMyJzpcblxuICAgICAgICAgICAgcmV0dXJuIGJvb2xlYW5BcnJheSggMiAqIHNpemUpO1xuXG4gICAgICAgIGNhc2UgJ2J2ZWMzJzpcbiAgICAgICAgICAgIHJldHVybiBib29sZWFuQXJyYXkoMyAqIHNpemUpO1xuXG4gICAgICAgIGNhc2UgJ2J2ZWM0JzpcbiAgICAgICAgICAgIHJldHVybiBib29sZWFuQXJyYXkoNCAqIHNpemUpO1xuXG4gICAgICAgIGNhc2UgJ21hdDInOlxuICAgICAgICAgICAgcmV0dXJuIG5ldyBGbG9hdDMyQXJyYXkoWzEsIDBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwwLCAxXSk7XG5cbiAgICAgICAgY2FzZSAnbWF0Myc6IFxuICAgICAgICAgICAgcmV0dXJuIG5ldyBGbG9hdDMyQXJyYXkoWzEsIDAsIDBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwwLCAxLCAwXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsMCwgMCwgMV0pO1xuXG4gICAgICAgIGNhc2UgJ21hdDQnOlxuICAgICAgICAgICAgcmV0dXJuIG5ldyBGbG9hdDMyQXJyYXkoWzEsIDAsIDAsIDBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwwLCAxLCAwLCAwXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsMCwgMCwgMSwgMFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLDAsIDAsIDAsIDFdKTtcbiAgICB9XG59XG5cbnZhciBib29sZWFuQXJyYXkgPSBmdW5jdGlvbihzaXplKVxue1xuICAgIHZhciBhcnJheSA9IG5ldyBBcnJheShzaXplKTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXJyYXkubGVuZ3RoOyBpKyspIFxuICAgIHtcbiAgICAgICAgYXJyYXlbaV0gPSBmYWxzZTtcbiAgICB9O1xuXG4gICAgcmV0dXJuIGFycmF5O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGRlZmF1bHRWYWx1ZTtcbiIsIlxudmFyIG1hcFR5cGUgPSByZXF1aXJlKCcuL21hcFR5cGUnKTtcbnZhciBtYXBTaXplID0gcmVxdWlyZSgnLi9tYXBTaXplJyk7XG5cbnZhciBleHRyYWN0QXR0cmlidXRlcyA9IGZ1bmN0aW9uKGdsLCBwcm9ncmFtKVxue1xuICAgIHZhciBhdHRyaWJ1dGVzID0ge307XG5cbiAgICB2YXIgdG90YWxBdHRyaWJ1dGVzID0gZ2wuZ2V0UHJvZ3JhbVBhcmFtZXRlcihwcm9ncmFtLCBnbC5BQ1RJVkVfQVRUUklCVVRFUylcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdG90YWxBdHRyaWJ1dGVzOyBpKyspIFxuICAgIHtcbiAgICAgICAgdmFyIGF0dHJpYkRhdGEgPSBnbC5nZXRBY3RpdmVBdHRyaWIocHJvZ3JhbSwgaSk7XG4gICAgICAgIHZhciB0eXBlID0gbWFwVHlwZShnbCwgYXR0cmliRGF0YS50eXBlKTtcblxuICAgICAgICBhdHRyaWJ1dGVzW2F0dHJpYkRhdGEubmFtZV0gPSB7XG4gICAgICAgICAgICB0eXBlOnR5cGUsXG4gICAgICAgICAgICBzaXplOm1hcFNpemUodHlwZSksXG4gICAgICAgICAgICBsb2NhdGlvbjpnbC5nZXRBdHRyaWJMb2NhdGlvbihwcm9ncmFtLCBhdHRyaWJEYXRhLm5hbWUpLFxuICAgICAgICAgICAgLy9UT0RPIC0gbWFrZSBhbiBhdHRyaWJ1dGUgb2JqZWN0XG4gICAgICAgICAgICBwb2ludGVyOmZ1bmN0aW9uKHR5cGUsIG5vcm1hbGl6ZWQsIHN0cmlkZSwgc3RhcnQpe1xuXG4gICAgICAgICAgICAgLy8gICBjb25zb2xlLmxvZyh0aGlzLmxvY2F0aW9uKVxuICAgICAgICAgICAgICAgIGdsLnZlcnRleEF0dHJpYlBvaW50ZXIodGhpcy5sb2NhdGlvbix0aGlzLnNpemUsIHR5cGUgfHwgZ2wuRkxPQVQsIG5vcm1hbGl6ZWQgfHwgZmFsc2UsIHN0cmlkZSB8fCAwLCBzdGFydCB8fCAwKTsgXG5cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH07XG5cbiAgICByZXR1cm4gYXR0cmlidXRlczsgIFxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGV4dHJhY3RBdHRyaWJ1dGVzO1xuXG4iLCJ2YXIgbWFwVHlwZSA9IHJlcXVpcmUoJy4vbWFwVHlwZScpO1xudmFyIGRlZmF1bHRWYWx1ZSA9IHJlcXVpcmUoJy4vZGVmYXVsdFZhbHVlJyk7XG5cblxudmFyIGV4dHJhY3RVbmlmb3JtcyA9IGZ1bmN0aW9uKGdsLCBwcm9ncmFtKVxue1xuXHR2YXIgdW5pZm9ybXMgPSB7fTtcblx0XG4gICAgdmFyIHRvdGFsVW5pZm9ybXMgPSBnbC5nZXRQcm9ncmFtUGFyYW1ldGVyKHByb2dyYW0sIGdsLkFDVElWRV9VTklGT1JNUylcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdG90YWxVbmlmb3JtczsgaSsrKSBcbiAgICB7XG4gICAgXHR2YXIgdW5pZm9ybURhdGEgPSBnbC5nZXRBY3RpdmVVbmlmb3JtKHByb2dyYW0sIGkpO1xuICAgIFx0dmFyIG5hbWUgPSB1bmlmb3JtRGF0YS5uYW1lLnJlcGxhY2UoL1xcWy4qP1xcXS8sIFwiXCIpO1xuICAgICAgICB2YXIgdHlwZSA9IG1hcFR5cGUoZ2wsIHVuaWZvcm1EYXRhLnR5cGUgKTtcblxuICAgIFx0dW5pZm9ybXNbbmFtZV0gPSB7XG4gICAgXHRcdHR5cGU6dHlwZSxcbiAgICBcdFx0c2l6ZTp1bmlmb3JtRGF0YS5zaXplLFxuICAgIFx0XHRsb2NhdGlvbjpnbC5nZXRVbmlmb3JtTG9jYXRpb24ocHJvZ3JhbSwgbmFtZSksXG4gICAgXHRcdHZhbHVlOmRlZmF1bHRWYWx1ZSh0eXBlLCB1bmlmb3JtRGF0YS5zaXplKVxuICAgIFx0fVxuICAgIH07XG5cdFxuXHRyZXR1cm4gdW5pZm9ybXM7XHRcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBleHRyYWN0VW5pZm9ybXM7XG5cbiIsIlxudmFyIGdlbmVyYXRlVW5pZm9ybUFjY2Vzc09iamVjdCA9IGZ1bmN0aW9uKGdsLCB1bmlmb3JtRGF0YSlcbntcbiAgICAvLyB0aGlzIGlzIHRoZSBvYmplY3Qgd2Ugd2lsbCBiZSBzZW5kaW5nIGJhY2suXG4gICAgLy8gYW4gb2JqZWN0IGhpZXJhY2h5IHdpbGwgYmUgY3JlYXRlZCBmb3Igc3RydWN0c1xuICAgIHZhciB1bmlmb3JtcyA9IHtkYXRhOnt9fTtcblxuICAgIHVuaWZvcm1zLmdsID0gZ2w7XG4gICAgXG4gICAgdmFyIHVuaWZvcm1LZXlzPSBPYmplY3Qua2V5cyh1bmlmb3JtRGF0YSk7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHVuaWZvcm1LZXlzLmxlbmd0aDsgaSsrKSBcbiAgICB7XG4gICAgICAgIHZhciBmdWxsTmFtZSA9IHVuaWZvcm1LZXlzW2ldXG5cbiAgICAgICAgdmFyIG5hbWVUb2tlbnMgPSBmdWxsTmFtZS5zcGxpdCgnLicpO1xuICAgICAgICB2YXIgbmFtZSA9IG5hbWVUb2tlbnNbbmFtZVRva2Vucy5sZW5ndGggLSAxXTtcblxuICAgICAgICB2YXIgdW5pZm9ybUdyb3VwID0gZ2V0VW5pZm9ybUdyb3VwKG5hbWVUb2tlbnMsIHVuaWZvcm1zKTtcblxuICAgICAgICB2YXIgdW5pZm9ybSA9ICB1bmlmb3JtRGF0YVtmdWxsTmFtZV07XG4gICAgICAgIHVuaWZvcm1Hcm91cC5kYXRhW25hbWVdID0gdW5pZm9ybTtcblxuICAgICAgICB1bmlmb3JtR3JvdXAuZ2wgPSBnbDtcblxuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodW5pZm9ybUdyb3VwLCBuYW1lLCB7XG4gICAgICAgICAgICBnZXQ6IGdlbmVyYXRlR2V0dGVyKG5hbWUpLFxuICAgICAgICAgICAgc2V0OiBnZW5lcmF0ZVNldHRlcihuYW1lLCB1bmlmb3JtKVxuICAgICAgICB9KVxuICAgIH07XG5cbiAgICByZXR1cm4gdW5pZm9ybXM7XG59XG5cbnZhciBnZW5lcmF0ZUdldHRlciA9IGZ1bmN0aW9uKG5hbWUpXG57XG5cdHZhciB0ZW1wbGF0ZSA9IGdldHRlclRlbXBsYXRlLnJlcGxhY2UoJyUlJywgbmFtZSk7XG5cdHJldHVybiBuZXcgRnVuY3Rpb24odGVtcGxhdGUpO1xufVxuXG52YXIgZ2VuZXJhdGVTZXR0ZXIgPSBmdW5jdGlvbihuYW1lLCB1bmlmb3JtKVxue1xuICAgIHZhciB0ZW1wbGF0ZSA9IHNldHRlclRlbXBsYXRlLnJlcGxhY2UoLyUlL2csIG5hbWUpO1xuICAgIHZhciBzZXRUZW1wbGF0ZVxuICAgIFxuICAgIGlmKHVuaWZvcm0uc2l6ZSA9PT0gMSlcbiAgICB7XG4gICAgICAgIHNldFRlbXBsYXRlID0gR0xTTF9UT19TSU5HTEVfU0VUVEVSU1t1bmlmb3JtLnR5cGVdO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICBzZXRUZW1wbGF0ZSA9IEdMU0xfVE9fQVJSQVlfU0VUVEVSU1t1bmlmb3JtLnR5cGVdO1xuICAgIH1cblxuICAgIGlmKHNldFRlbXBsYXRlKVxuICAgIHtcbiAgICAgICAgdGVtcGxhdGUgKz0gXCJcXG50aGlzLmdsLlwiICsgc2V0VGVtcGxhdGUgKyBcIjtcIjtcbiAgICB9XG5cbiAgXHRyZXR1cm4gbmV3IEZ1bmN0aW9uKCd2YWx1ZScsIHRlbXBsYXRlKTtcbn1cblxudmFyIGdldFVuaWZvcm1Hcm91cCA9IGZ1bmN0aW9uKG5hbWVUb2tlbnMsIHVuaWZvcm0pXG57XG4gICAgdmFyIGN1ciA9IHVuaWZvcm07XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG5hbWVUb2tlbnMubGVuZ3RoIC0gMTsgaSsrKSBcbiAgICB7XG4gICAgICAgIHZhciBvID0gY3VyW25hbWVUb2tlbnNbaV1dIHx8IHtkYXRhOnt9fTtcbiAgICAgICAgY3VyW25hbWVUb2tlbnNbaV1dID0gbztcbiAgICAgICAgY3VyID0gbztcbiAgICB9O1xuXG4gICAgcmV0dXJuIGN1clxufVxuXG52YXIgZ2V0dGVyVGVtcGxhdGUgPSBbXG4gICAgJ3JldHVybiB0aGlzLmRhdGEuJSUudmFsdWU7Jyxcbl0uam9pbignXFxuJyk7XG5cbnZhciBzZXR0ZXJUZW1wbGF0ZSA9IFtcbiAgICAndGhpcy5kYXRhLiUlLnZhbHVlID0gdmFsdWU7JyxcbiAgICAndmFyIGxvY2F0aW9uID0gdGhpcy5kYXRhLiUlLmxvY2F0aW9uOydcbl0uam9pbignXFxuJyk7XG5cblxudmFyIEdMU0xfVE9fU0lOR0xFX1NFVFRFUlMgPSB7XG5cbiAgICAnZmxvYXQnOiAgICAndW5pZm9ybTFmKGxvY2F0aW9uLCB2YWx1ZSknLFxuXG4gICAgJ3ZlYzInOiAgICAgJ3VuaWZvcm0yZihsb2NhdGlvbiwgdmFsdWVbMF0sIHZhbHVlWzFdKScsXG4gICAgJ3ZlYzMnOiAgICAgJ3VuaWZvcm0zZihsb2NhdGlvbiwgdmFsdWVbMF0sIHZhbHVlWzFdLCB2YWx1ZVsyXSknLFxuICAgICd2ZWM0JzogICAgICd1bmlmb3JtNGYobG9jYXRpb24sIHZhbHVlWzBdLCB2YWx1ZVsxXSwgdmFsdWVbMl0sIHZhbHVlWzNdKScsXG4gICAgXHRcbiAgICAnaW50JzogICAgICAndW5pZm9ybTFpKGxvY2F0aW9uLCB2YWx1ZSknLFxuICAgICdpdmVjMic6ICAgICd1bmlmb3JtMmkobG9jYXRpb24sIHZhbHVlWzBdLCB2YWx1ZVsxXSknLFxuICAgICdpdmVjMyc6ICAgICd1bmlmb3JtM2kobG9jYXRpb24sIHZhbHVlWzBdLCB2YWx1ZVsxXSwgdmFsdWVbMl0pJyxcbiAgICAnaXZlYzQnOiAgICAndW5pZm9ybTRpKGxvY2F0aW9uLCB2YWx1ZVswXSwgdmFsdWVbMV0sIHZhbHVlWzJdLCB2YWx1ZVszXSknLFxuXG4gICAgJ2Jvb2wnOiAgICAgJ3VuaWZvcm0xaShsb2NhdGlvbiwgdmFsdWUpJyxcbiAgICAnYnZlYzInOiAgICAndW5pZm9ybTJpKGxvY2F0aW9uLCB2YWx1ZVswXSwgdmFsdWVbMV0pJyxcbiAgICAnYnZlYzMnOiAgICAndW5pZm9ybTNpKGxvY2F0aW9uLCB2YWx1ZVswXSwgdmFsdWVbMV0sIHZhbHVlWzJdKScsXG4gICAgJ2J2ZWM0JzogICAgJ3VuaWZvcm00aShsb2NhdGlvbiwgdmFsdWVbMF0sIHZhbHVlWzFdLCB2YWx1ZVsyXSwgdmFsdWVbM10pJyxcblxuICAgICdtYXQyJzogICAgICd1bmlmb3JtTWF0cml4MmZ2KGxvY2F0aW9uLCBmYWxzZSwgdmFsdWUpJyxcbiAgICAnbWF0Myc6ICAgICAndW5pZm9ybU1hdHJpeDNmdihsb2NhdGlvbiwgZmFsc2UsIHZhbHVlKScsXG4gICAgJ21hdDQnOiAgICAgJ3VuaWZvcm1NYXRyaXg0ZnYobG9jYXRpb24sIGZhbHNlLCB2YWx1ZSknLFxuXG4gICAgJ3NhbXBsZXIyRCc6J3VuaWZvcm0xaShsb2NhdGlvbiwgdmFsdWUpJ1xufVxuXG52YXIgR0xTTF9UT19BUlJBWV9TRVRURVJTID0ge1xuXG4gICAgJ2Zsb2F0JzogICAgJ3VuaWZvcm0xZnYobG9jYXRpb24sIHZhbHVlKScsXG5cbiAgICAndmVjMic6ICAgICAndW5pZm9ybTJmdihsb2NhdGlvbiwgdmFsdWUpJyxcbiAgICAndmVjMyc6ICAgICAndW5pZm9ybTNmdihsb2NhdGlvbiwgdmFsdWUpJyxcbiAgICAndmVjNCc6ICAgICAndW5pZm9ybTRmdihsb2NhdGlvbiwgdmFsdWUpJyxcbiAgICBcdFxuICAgICdpbnQnOiAgICAgICd1bmlmb3JtMWl2KGxvY2F0aW9uLCB2YWx1ZSknLFxuICAgICdpdmVjMic6ICAgICd1bmlmb3JtMml2KGxvY2F0aW9uLCB2YWx1ZSknLFxuICAgICdpdmVjMyc6ICAgICd1bmlmb3JtM2l2KGxvY2F0aW9uLCB2YWx1ZSknLFxuICAgICdpdmVjNCc6ICAgICd1bmlmb3JtNGl2KGxvY2F0aW9uLCB2YWx1ZSknLFxuXG4gICAgJ2Jvb2wnOiAgICAgJ3VuaWZvcm0xaXYobG9jYXRpb24sIHZhbHVlKScsXG4gICAgJ2J2ZWMyJzogICAgJ3VuaWZvcm0yaXYobG9jYXRpb24sIHZhbHVlKScsXG4gICAgJ2J2ZWMzJzogICAgJ3VuaWZvcm0zaXYobG9jYXRpb24sIHZhbHVlKScsXG4gICAgJ2J2ZWM0JzogICAgJ3VuaWZvcm00aXYobG9jYXRpb24sIHZhbHVlKScsXG4gICBcbiAgICAnc2FtcGxlcjJEJzondW5pZm9ybTFpdihsb2NhdGlvbiwgdmFsdWUpJ1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGdlbmVyYXRlVW5pZm9ybUFjY2Vzc09iamVjdDtcblxuIiwiXG5cbnZhciBtYXBTaXplID0gZnVuY3Rpb24odHlwZSkgXG57IFxuICAgIHJldHVybiBHTFNMX1RPX1NJWkVbdHlwZV07XG59XG5cblxudmFyIEdMU0xfVE9fU0laRSA9IHtcbiAgICAnZmxvYXQnOiAgICAxLFxuICAgICd2ZWMyJzogICAgIDIsXG4gICAgJ3ZlYzMnOiAgICAgMyxcbiAgICAndmVjNCc6ICAgICA0LFxuXG4gICAgJ2ludCc6ICAgICAgMSxcbiAgICAnaXZlYzInOiAgICAyLFxuICAgICdpdmVjMyc6ICAgIDMsXG4gICAgJ2l2ZWM0JzogICAgNCxcblxuICAgICdib29sJzogICAgIDEsXG4gICAgJ2J2ZWMyJzogICAgMixcbiAgICAnYnZlYzMnOiAgICAzLFxuICAgICdidmVjNCc6ICAgIDQsXG5cbiAgICAnbWF0Mic6ICAgICA0LFxuICAgICdtYXQzJzogICAgIDksXG4gICAgJ21hdDQnOiAgICAgMTYsXG5cbiAgICAnc2FtcGxlcjJEJzogIDFcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBtYXBTaXplO1xuIiwiXG5cbnZhciBtYXBTaXplID0gZnVuY3Rpb24oZ2wsIHR5cGUpIFxue1xuICAgIGlmKCFHTF9UQUJMRSkgXG4gICAge1xuICAgICAgICB2YXIgdHlwZU5hbWVzID0gT2JqZWN0LmtleXMoR0xfVE9fR0xTTF9UWVBFUyk7XG5cbiAgICAgICAgR0xfVEFCTEUgPSB7fTtcblxuICAgICAgICBmb3IodmFyIGkgPSAwOyBpIDwgdHlwZU5hbWVzLmxlbmd0aDsgKytpKSBcbiAgICAgICAge1xuICAgICAgICAgICAgdmFyIHRuID0gdHlwZU5hbWVzW2ldO1xuICAgICAgICAgICAgR0xfVEFCTEVbIGdsW3RuXSBdID0gR0xfVE9fR0xTTF9UWVBFU1t0bl07XG4gICAgICAgIH1cbiAgICB9XG5cbiAgcmV0dXJuIEdMX1RBQkxFW3R5cGVdO1xufVxuXG52YXIgR0xfVEFCTEUgPSBudWxsO1xuXG52YXIgR0xfVE9fR0xTTF9UWVBFUyA9IHtcbiAgJ0ZMT0FUJzogICAgICAgJ2Zsb2F0JyxcbiAgJ0ZMT0FUX1ZFQzInOiAgJ3ZlYzInLFxuICAnRkxPQVRfVkVDMyc6ICAndmVjMycsXG4gICdGTE9BVF9WRUM0JzogICd2ZWM0JyxcblxuICAnSU5UJzogICAgICAgICAnaW50JyxcbiAgJ0lOVF9WRUMyJzogICAgJ2l2ZWMyJyxcbiAgJ0lOVF9WRUMzJzogICAgJ2l2ZWMzJyxcbiAgJ0lOVF9WRUM0JzogICAgJ2l2ZWM0JyxcbiAgXG4gICdCT09MJzogICAgICAgICdib29sJyxcbiAgJ0JPT0xfVkVDMic6ICAgJ2J2ZWMyJyxcbiAgJ0JPT0xfVkVDMyc6ICAgJ2J2ZWMzJyxcbiAgJ0JPT0xfVkVDNCc6ICAgJ2J2ZWM0JyxcbiAgXG4gICdGTE9BVF9NQVQyJzogICdtYXQyJyxcbiAgJ0ZMT0FUX01BVDMnOiAgJ21hdDMnLFxuICAnRkxPQVRfTUFUNCc6ICAnbWF0NCcsXG4gIFxuICAnU0FNUExFUl8yRCc6ICAnc2FtcGxlcjJEJyAgXG59XG5cbm1vZHVsZS5leHBvcnRzID0gbWFwU2l6ZTtcbiIsIi8qIVxuICogYXN5bmNcbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS9jYW9sYW4vYXN5bmNcbiAqXG4gKiBDb3B5cmlnaHQgMjAxMC0yMDE0IENhb2xhbiBNY01haG9uXG4gKiBSZWxlYXNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2VcbiAqL1xuKGZ1bmN0aW9uICgpIHtcblxuICAgIHZhciBhc3luYyA9IHt9O1xuICAgIGZ1bmN0aW9uIG5vb3AoKSB7fVxuICAgIGZ1bmN0aW9uIGlkZW50aXR5KHYpIHtcbiAgICAgICAgcmV0dXJuIHY7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHRvQm9vbCh2KSB7XG4gICAgICAgIHJldHVybiAhIXY7XG4gICAgfVxuICAgIGZ1bmN0aW9uIG5vdElkKHYpIHtcbiAgICAgICAgcmV0dXJuICF2O1xuICAgIH1cblxuICAgIC8vIGdsb2JhbCBvbiB0aGUgc2VydmVyLCB3aW5kb3cgaW4gdGhlIGJyb3dzZXJcbiAgICB2YXIgcHJldmlvdXNfYXN5bmM7XG5cbiAgICAvLyBFc3RhYmxpc2ggdGhlIHJvb3Qgb2JqZWN0LCBgd2luZG93YCAoYHNlbGZgKSBpbiB0aGUgYnJvd3NlciwgYGdsb2JhbGBcbiAgICAvLyBvbiB0aGUgc2VydmVyLCBvciBgdGhpc2AgaW4gc29tZSB2aXJ0dWFsIG1hY2hpbmVzLiBXZSB1c2UgYHNlbGZgXG4gICAgLy8gaW5zdGVhZCBvZiBgd2luZG93YCBmb3IgYFdlYldvcmtlcmAgc3VwcG9ydC5cbiAgICB2YXIgcm9vdCA9IHR5cGVvZiBzZWxmID09PSAnb2JqZWN0JyAmJiBzZWxmLnNlbGYgPT09IHNlbGYgJiYgc2VsZiB8fFxuICAgICAgICAgICAgdHlwZW9mIGdsb2JhbCA9PT0gJ29iamVjdCcgJiYgZ2xvYmFsLmdsb2JhbCA9PT0gZ2xvYmFsICYmIGdsb2JhbCB8fFxuICAgICAgICAgICAgdGhpcztcblxuICAgIGlmIChyb290ICE9IG51bGwpIHtcbiAgICAgICAgcHJldmlvdXNfYXN5bmMgPSByb290LmFzeW5jO1xuICAgIH1cblxuICAgIGFzeW5jLm5vQ29uZmxpY3QgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJvb3QuYXN5bmMgPSBwcmV2aW91c19hc3luYztcbiAgICAgICAgcmV0dXJuIGFzeW5jO1xuICAgIH07XG5cbiAgICBmdW5jdGlvbiBvbmx5X29uY2UoZm4pIHtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgaWYgKGZuID09PSBudWxsKSB0aHJvdyBuZXcgRXJyb3IoXCJDYWxsYmFjayB3YXMgYWxyZWFkeSBjYWxsZWQuXCIpO1xuICAgICAgICAgICAgZm4uYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICAgICAgICAgIGZuID0gbnVsbDtcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBfb25jZShmbikge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICBpZiAoZm4gPT09IG51bGwpIHJldHVybjtcbiAgICAgICAgICAgIGZuLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgICAgICAgICBmbiA9IG51bGw7XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgLy8vLyBjcm9zcy1icm93c2VyIGNvbXBhdGlibGl0eSBmdW5jdGlvbnMgLy8vL1xuXG4gICAgdmFyIF90b1N0cmluZyA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7XG5cbiAgICB2YXIgX2lzQXJyYXkgPSBBcnJheS5pc0FycmF5IHx8IGZ1bmN0aW9uIChvYmopIHtcbiAgICAgICAgcmV0dXJuIF90b1N0cmluZy5jYWxsKG9iaikgPT09ICdbb2JqZWN0IEFycmF5XSc7XG4gICAgfTtcblxuICAgIC8vIFBvcnRlZCBmcm9tIHVuZGVyc2NvcmUuanMgaXNPYmplY3RcbiAgICB2YXIgX2lzT2JqZWN0ID0gZnVuY3Rpb24ob2JqKSB7XG4gICAgICAgIHZhciB0eXBlID0gdHlwZW9mIG9iajtcbiAgICAgICAgcmV0dXJuIHR5cGUgPT09ICdmdW5jdGlvbicgfHwgdHlwZSA9PT0gJ29iamVjdCcgJiYgISFvYmo7XG4gICAgfTtcblxuICAgIGZ1bmN0aW9uIF9pc0FycmF5TGlrZShhcnIpIHtcbiAgICAgICAgcmV0dXJuIF9pc0FycmF5KGFycikgfHwgKFxuICAgICAgICAgICAgLy8gaGFzIGEgcG9zaXRpdmUgaW50ZWdlciBsZW5ndGggcHJvcGVydHlcbiAgICAgICAgICAgIHR5cGVvZiBhcnIubGVuZ3RoID09PSBcIm51bWJlclwiICYmXG4gICAgICAgICAgICBhcnIubGVuZ3RoID49IDAgJiZcbiAgICAgICAgICAgIGFyci5sZW5ndGggJSAxID09PSAwXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gX2FycmF5RWFjaChhcnIsIGl0ZXJhdG9yKSB7XG4gICAgICAgIHZhciBpbmRleCA9IC0xLFxuICAgICAgICAgICAgbGVuZ3RoID0gYXJyLmxlbmd0aDtcblxuICAgICAgICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgICAgICAgICAgaXRlcmF0b3IoYXJyW2luZGV4XSwgaW5kZXgsIGFycik7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBfbWFwKGFyciwgaXRlcmF0b3IpIHtcbiAgICAgICAgdmFyIGluZGV4ID0gLTEsXG4gICAgICAgICAgICBsZW5ndGggPSBhcnIubGVuZ3RoLFxuICAgICAgICAgICAgcmVzdWx0ID0gQXJyYXkobGVuZ3RoKTtcblxuICAgICAgICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgICAgICAgICAgcmVzdWx0W2luZGV4XSA9IGl0ZXJhdG9yKGFycltpbmRleF0sIGluZGV4LCBhcnIpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gX3JhbmdlKGNvdW50KSB7XG4gICAgICAgIHJldHVybiBfbWFwKEFycmF5KGNvdW50KSwgZnVuY3Rpb24gKHYsIGkpIHsgcmV0dXJuIGk7IH0pO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIF9yZWR1Y2UoYXJyLCBpdGVyYXRvciwgbWVtbykge1xuICAgICAgICBfYXJyYXlFYWNoKGFyciwgZnVuY3Rpb24gKHgsIGksIGEpIHtcbiAgICAgICAgICAgIG1lbW8gPSBpdGVyYXRvcihtZW1vLCB4LCBpLCBhKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBtZW1vO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIF9mb3JFYWNoT2Yob2JqZWN0LCBpdGVyYXRvcikge1xuICAgICAgICBfYXJyYXlFYWNoKF9rZXlzKG9iamVjdCksIGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgICAgIGl0ZXJhdG9yKG9iamVjdFtrZXldLCBrZXkpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBfaW5kZXhPZihhcnIsIGl0ZW0pIHtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcnIubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGlmIChhcnJbaV0gPT09IGl0ZW0pIHJldHVybiBpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiAtMTtcbiAgICB9XG5cbiAgICB2YXIgX2tleXMgPSBPYmplY3Qua2V5cyB8fCBmdW5jdGlvbiAob2JqKSB7XG4gICAgICAgIHZhciBrZXlzID0gW107XG4gICAgICAgIGZvciAodmFyIGsgaW4gb2JqKSB7XG4gICAgICAgICAgICBpZiAob2JqLmhhc093blByb3BlcnR5KGspKSB7XG4gICAgICAgICAgICAgICAga2V5cy5wdXNoKGspO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBrZXlzO1xuICAgIH07XG5cbiAgICBmdW5jdGlvbiBfa2V5SXRlcmF0b3IoY29sbCkge1xuICAgICAgICB2YXIgaSA9IC0xO1xuICAgICAgICB2YXIgbGVuO1xuICAgICAgICB2YXIga2V5cztcbiAgICAgICAgaWYgKF9pc0FycmF5TGlrZShjb2xsKSkge1xuICAgICAgICAgICAgbGVuID0gY29sbC5sZW5ndGg7XG4gICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24gbmV4dCgpIHtcbiAgICAgICAgICAgICAgICBpKys7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGkgPCBsZW4gPyBpIDogbnVsbDtcbiAgICAgICAgICAgIH07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBrZXlzID0gX2tleXMoY29sbCk7XG4gICAgICAgICAgICBsZW4gPSBrZXlzLmxlbmd0aDtcbiAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbiBuZXh0KCkge1xuICAgICAgICAgICAgICAgIGkrKztcbiAgICAgICAgICAgICAgICByZXR1cm4gaSA8IGxlbiA/IGtleXNbaV0gOiBudWxsO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIFNpbWlsYXIgdG8gRVM2J3MgcmVzdCBwYXJhbSAoaHR0cDovL2FyaXlhLm9maWxhYnMuY29tLzIwMTMvMDMvZXM2LWFuZC1yZXN0LXBhcmFtZXRlci5odG1sKVxuICAgIC8vIFRoaXMgYWNjdW11bGF0ZXMgdGhlIGFyZ3VtZW50cyBwYXNzZWQgaW50byBhbiBhcnJheSwgYWZ0ZXIgYSBnaXZlbiBpbmRleC5cbiAgICAvLyBGcm9tIHVuZGVyc2NvcmUuanMgKGh0dHBzOi8vZ2l0aHViLmNvbS9qYXNoa2VuYXMvdW5kZXJzY29yZS9wdWxsLzIxNDApLlxuICAgIGZ1bmN0aW9uIF9yZXN0UGFyYW0oZnVuYywgc3RhcnRJbmRleCkge1xuICAgICAgICBzdGFydEluZGV4ID0gc3RhcnRJbmRleCA9PSBudWxsID8gZnVuYy5sZW5ndGggLSAxIDogK3N0YXJ0SW5kZXg7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIHZhciBsZW5ndGggPSBNYXRoLm1heChhcmd1bWVudHMubGVuZ3RoIC0gc3RhcnRJbmRleCwgMCk7XG4gICAgICAgICAgICB2YXIgcmVzdCA9IEFycmF5KGxlbmd0aCk7XG4gICAgICAgICAgICBmb3IgKHZhciBpbmRleCA9IDA7IGluZGV4IDwgbGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgICAgICAgICAgICAgcmVzdFtpbmRleF0gPSBhcmd1bWVudHNbaW5kZXggKyBzdGFydEluZGV4XTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHN3aXRjaCAoc3RhcnRJbmRleCkge1xuICAgICAgICAgICAgICAgIGNhc2UgMDogcmV0dXJuIGZ1bmMuY2FsbCh0aGlzLCByZXN0KTtcbiAgICAgICAgICAgICAgICBjYXNlIDE6IHJldHVybiBmdW5jLmNhbGwodGhpcywgYXJndW1lbnRzWzBdLCByZXN0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIEN1cnJlbnRseSB1bnVzZWQgYnV0IGhhbmRsZSBjYXNlcyBvdXRzaWRlIG9mIHRoZSBzd2l0Y2ggc3RhdGVtZW50OlxuICAgICAgICAgICAgLy8gdmFyIGFyZ3MgPSBBcnJheShzdGFydEluZGV4ICsgMSk7XG4gICAgICAgICAgICAvLyBmb3IgKGluZGV4ID0gMDsgaW5kZXggPCBzdGFydEluZGV4OyBpbmRleCsrKSB7XG4gICAgICAgICAgICAvLyAgICAgYXJnc1tpbmRleF0gPSBhcmd1bWVudHNbaW5kZXhdO1xuICAgICAgICAgICAgLy8gfVxuICAgICAgICAgICAgLy8gYXJnc1tzdGFydEluZGV4XSA9IHJlc3Q7XG4gICAgICAgICAgICAvLyByZXR1cm4gZnVuYy5hcHBseSh0aGlzLCBhcmdzKTtcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBfd2l0aG91dEluZGV4KGl0ZXJhdG9yKSB7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAodmFsdWUsIGluZGV4LCBjYWxsYmFjaykge1xuICAgICAgICAgICAgcmV0dXJuIGl0ZXJhdG9yKHZhbHVlLCBjYWxsYmFjayk7XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgLy8vLyBleHBvcnRlZCBhc3luYyBtb2R1bGUgZnVuY3Rpb25zIC8vLy9cblxuICAgIC8vLy8gbmV4dFRpY2sgaW1wbGVtZW50YXRpb24gd2l0aCBicm93c2VyLWNvbXBhdGlibGUgZmFsbGJhY2sgLy8vL1xuXG4gICAgLy8gY2FwdHVyZSB0aGUgZ2xvYmFsIHJlZmVyZW5jZSB0byBndWFyZCBhZ2FpbnN0IGZha2VUaW1lciBtb2Nrc1xuICAgIHZhciBfc2V0SW1tZWRpYXRlID0gdHlwZW9mIHNldEltbWVkaWF0ZSA9PT0gJ2Z1bmN0aW9uJyAmJiBzZXRJbW1lZGlhdGU7XG5cbiAgICB2YXIgX2RlbGF5ID0gX3NldEltbWVkaWF0ZSA/IGZ1bmN0aW9uKGZuKSB7XG4gICAgICAgIC8vIG5vdCBhIGRpcmVjdCBhbGlhcyBmb3IgSUUxMCBjb21wYXRpYmlsaXR5XG4gICAgICAgIF9zZXRJbW1lZGlhdGUoZm4pO1xuICAgIH0gOiBmdW5jdGlvbihmbikge1xuICAgICAgICBzZXRUaW1lb3V0KGZuLCAwKTtcbiAgICB9O1xuXG4gICAgaWYgKHR5cGVvZiBwcm9jZXNzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgcHJvY2Vzcy5uZXh0VGljayA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBhc3luYy5uZXh0VGljayA9IHByb2Nlc3MubmV4dFRpY2s7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgYXN5bmMubmV4dFRpY2sgPSBfZGVsYXk7XG4gICAgfVxuICAgIGFzeW5jLnNldEltbWVkaWF0ZSA9IF9zZXRJbW1lZGlhdGUgPyBfZGVsYXkgOiBhc3luYy5uZXh0VGljaztcblxuXG4gICAgYXN5bmMuZm9yRWFjaCA9XG4gICAgYXN5bmMuZWFjaCA9IGZ1bmN0aW9uIChhcnIsIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICByZXR1cm4gYXN5bmMuZWFjaE9mKGFyciwgX3dpdGhvdXRJbmRleChpdGVyYXRvciksIGNhbGxiYWNrKTtcbiAgICB9O1xuXG4gICAgYXN5bmMuZm9yRWFjaFNlcmllcyA9XG4gICAgYXN5bmMuZWFjaFNlcmllcyA9IGZ1bmN0aW9uIChhcnIsIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICByZXR1cm4gYXN5bmMuZWFjaE9mU2VyaWVzKGFyciwgX3dpdGhvdXRJbmRleChpdGVyYXRvciksIGNhbGxiYWNrKTtcbiAgICB9O1xuXG5cbiAgICBhc3luYy5mb3JFYWNoTGltaXQgPVxuICAgIGFzeW5jLmVhY2hMaW1pdCA9IGZ1bmN0aW9uIChhcnIsIGxpbWl0LCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgcmV0dXJuIF9lYWNoT2ZMaW1pdChsaW1pdCkoYXJyLCBfd2l0aG91dEluZGV4KGl0ZXJhdG9yKSwgY2FsbGJhY2spO1xuICAgIH07XG5cbiAgICBhc3luYy5mb3JFYWNoT2YgPVxuICAgIGFzeW5jLmVhY2hPZiA9IGZ1bmN0aW9uIChvYmplY3QsIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICBjYWxsYmFjayA9IF9vbmNlKGNhbGxiYWNrIHx8IG5vb3ApO1xuICAgICAgICBvYmplY3QgPSBvYmplY3QgfHwgW107XG5cbiAgICAgICAgdmFyIGl0ZXIgPSBfa2V5SXRlcmF0b3Iob2JqZWN0KTtcbiAgICAgICAgdmFyIGtleSwgY29tcGxldGVkID0gMDtcblxuICAgICAgICB3aGlsZSAoKGtleSA9IGl0ZXIoKSkgIT0gbnVsbCkge1xuICAgICAgICAgICAgY29tcGxldGVkICs9IDE7XG4gICAgICAgICAgICBpdGVyYXRvcihvYmplY3Rba2V5XSwga2V5LCBvbmx5X29uY2UoZG9uZSkpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGNvbXBsZXRlZCA9PT0gMCkgY2FsbGJhY2sobnVsbCk7XG5cbiAgICAgICAgZnVuY3Rpb24gZG9uZShlcnIpIHtcbiAgICAgICAgICAgIGNvbXBsZXRlZC0tO1xuICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBDaGVjayBrZXkgaXMgbnVsbCBpbiBjYXNlIGl0ZXJhdG9yIGlzbid0IGV4aGF1c3RlZFxuICAgICAgICAgICAgLy8gYW5kIGRvbmUgcmVzb2x2ZWQgc3luY2hyb25vdXNseS5cbiAgICAgICAgICAgIGVsc2UgaWYgKGtleSA9PT0gbnVsbCAmJiBjb21wbGV0ZWQgPD0gMCkge1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrKG51bGwpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfTtcblxuICAgIGFzeW5jLmZvckVhY2hPZlNlcmllcyA9XG4gICAgYXN5bmMuZWFjaE9mU2VyaWVzID0gZnVuY3Rpb24gKG9iaiwgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgIGNhbGxiYWNrID0gX29uY2UoY2FsbGJhY2sgfHwgbm9vcCk7XG4gICAgICAgIG9iaiA9IG9iaiB8fCBbXTtcbiAgICAgICAgdmFyIG5leHRLZXkgPSBfa2V5SXRlcmF0b3Iob2JqKTtcbiAgICAgICAgdmFyIGtleSA9IG5leHRLZXkoKTtcbiAgICAgICAgZnVuY3Rpb24gaXRlcmF0ZSgpIHtcbiAgICAgICAgICAgIHZhciBzeW5jID0gdHJ1ZTtcbiAgICAgICAgICAgIGlmIChrZXkgPT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gY2FsbGJhY2sobnVsbCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpdGVyYXRvcihvYmpba2V5XSwga2V5LCBvbmx5X29uY2UoZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGtleSA9IG5leHRLZXkoKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGtleSA9PT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKG51bGwpO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN5bmMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhc3luYy5zZXRJbW1lZGlhdGUoaXRlcmF0ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZXJhdGUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgIHN5bmMgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBpdGVyYXRlKCk7XG4gICAgfTtcblxuXG5cbiAgICBhc3luYy5mb3JFYWNoT2ZMaW1pdCA9XG4gICAgYXN5bmMuZWFjaE9mTGltaXQgPSBmdW5jdGlvbiAob2JqLCBsaW1pdCwgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgIF9lYWNoT2ZMaW1pdChsaW1pdCkob2JqLCBpdGVyYXRvciwgY2FsbGJhY2spO1xuICAgIH07XG5cbiAgICBmdW5jdGlvbiBfZWFjaE9mTGltaXQobGltaXQpIHtcblxuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKG9iaiwgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICBjYWxsYmFjayA9IF9vbmNlKGNhbGxiYWNrIHx8IG5vb3ApO1xuICAgICAgICAgICAgb2JqID0gb2JqIHx8IFtdO1xuICAgICAgICAgICAgdmFyIG5leHRLZXkgPSBfa2V5SXRlcmF0b3Iob2JqKTtcbiAgICAgICAgICAgIGlmIChsaW1pdCA8PSAwKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKG51bGwpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdmFyIGRvbmUgPSBmYWxzZTtcbiAgICAgICAgICAgIHZhciBydW5uaW5nID0gMDtcbiAgICAgICAgICAgIHZhciBlcnJvcmVkID0gZmFsc2U7XG5cbiAgICAgICAgICAgIChmdW5jdGlvbiByZXBsZW5pc2ggKCkge1xuICAgICAgICAgICAgICAgIGlmIChkb25lICYmIHJ1bm5pbmcgPD0gMCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gY2FsbGJhY2sobnVsbCk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgd2hpbGUgKHJ1bm5pbmcgPCBsaW1pdCAmJiAhZXJyb3JlZCkge1xuICAgICAgICAgICAgICAgICAgICB2YXIga2V5ID0gbmV4dEtleSgpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoa2V5ID09PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBkb25lID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChydW5uaW5nIDw9IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhudWxsKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBydW5uaW5nICs9IDE7XG4gICAgICAgICAgICAgICAgICAgIGl0ZXJhdG9yKG9ialtrZXldLCBrZXksIG9ubHlfb25jZShmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBydW5uaW5nIC09IDE7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvcmVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcGxlbmlzaCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSkoKTtcbiAgICAgICAgfTtcbiAgICB9XG5cblxuICAgIGZ1bmN0aW9uIGRvUGFyYWxsZWwoZm4pIHtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChvYmosIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICAgICAgcmV0dXJuIGZuKGFzeW5jLmVhY2hPZiwgb2JqLCBpdGVyYXRvciwgY2FsbGJhY2spO1xuICAgICAgICB9O1xuICAgIH1cbiAgICBmdW5jdGlvbiBkb1BhcmFsbGVsTGltaXQoZm4pIHtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChvYmosIGxpbWl0LCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIHJldHVybiBmbihfZWFjaE9mTGltaXQobGltaXQpLCBvYmosIGl0ZXJhdG9yLCBjYWxsYmFjayk7XG4gICAgICAgIH07XG4gICAgfVxuICAgIGZ1bmN0aW9uIGRvU2VyaWVzKGZuKSB7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAob2JqLCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIHJldHVybiBmbihhc3luYy5lYWNoT2ZTZXJpZXMsIG9iaiwgaXRlcmF0b3IsIGNhbGxiYWNrKTtcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBfYXN5bmNNYXAoZWFjaGZuLCBhcnIsIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICBjYWxsYmFjayA9IF9vbmNlKGNhbGxiYWNrIHx8IG5vb3ApO1xuICAgICAgICBhcnIgPSBhcnIgfHwgW107XG4gICAgICAgIHZhciByZXN1bHRzID0gX2lzQXJyYXlMaWtlKGFycikgPyBbXSA6IHt9O1xuICAgICAgICBlYWNoZm4oYXJyLCBmdW5jdGlvbiAodmFsdWUsIGluZGV4LCBjYWxsYmFjaykge1xuICAgICAgICAgICAgaXRlcmF0b3IodmFsdWUsIGZ1bmN0aW9uIChlcnIsIHYpIHtcbiAgICAgICAgICAgICAgICByZXN1bHRzW2luZGV4XSA9IHY7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICBjYWxsYmFjayhlcnIsIHJlc3VsdHMpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBhc3luYy5tYXAgPSBkb1BhcmFsbGVsKF9hc3luY01hcCk7XG4gICAgYXN5bmMubWFwU2VyaWVzID0gZG9TZXJpZXMoX2FzeW5jTWFwKTtcbiAgICBhc3luYy5tYXBMaW1pdCA9IGRvUGFyYWxsZWxMaW1pdChfYXN5bmNNYXApO1xuXG4gICAgLy8gcmVkdWNlIG9ubHkgaGFzIGEgc2VyaWVzIHZlcnNpb24sIGFzIGRvaW5nIHJlZHVjZSBpbiBwYXJhbGxlbCB3b24ndFxuICAgIC8vIHdvcmsgaW4gbWFueSBzaXR1YXRpb25zLlxuICAgIGFzeW5jLmluamVjdCA9XG4gICAgYXN5bmMuZm9sZGwgPVxuICAgIGFzeW5jLnJlZHVjZSA9IGZ1bmN0aW9uIChhcnIsIG1lbW8sIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICBhc3luYy5lYWNoT2ZTZXJpZXMoYXJyLCBmdW5jdGlvbiAoeCwgaSwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIGl0ZXJhdG9yKG1lbW8sIHgsIGZ1bmN0aW9uIChlcnIsIHYpIHtcbiAgICAgICAgICAgICAgICBtZW1vID0gdjtcbiAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgIGNhbGxiYWNrKGVyciwgbWVtbyk7XG4gICAgICAgIH0pO1xuICAgIH07XG5cbiAgICBhc3luYy5mb2xkciA9XG4gICAgYXN5bmMucmVkdWNlUmlnaHQgPSBmdW5jdGlvbiAoYXJyLCBtZW1vLCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgdmFyIHJldmVyc2VkID0gX21hcChhcnIsIGlkZW50aXR5KS5yZXZlcnNlKCk7XG4gICAgICAgIGFzeW5jLnJlZHVjZShyZXZlcnNlZCwgbWVtbywgaXRlcmF0b3IsIGNhbGxiYWNrKTtcbiAgICB9O1xuXG4gICAgYXN5bmMudHJhbnNmb3JtID0gZnVuY3Rpb24gKGFyciwgbWVtbywgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAzKSB7XG4gICAgICAgICAgICBjYWxsYmFjayA9IGl0ZXJhdG9yO1xuICAgICAgICAgICAgaXRlcmF0b3IgPSBtZW1vO1xuICAgICAgICAgICAgbWVtbyA9IF9pc0FycmF5KGFycikgPyBbXSA6IHt9O1xuICAgICAgICB9XG5cbiAgICAgICAgYXN5bmMuZWFjaE9mKGFyciwgZnVuY3Rpb24odiwgaywgY2IpIHtcbiAgICAgICAgICAgIGl0ZXJhdG9yKG1lbW8sIHYsIGssIGNiKTtcbiAgICAgICAgfSwgZnVuY3Rpb24oZXJyKSB7XG4gICAgICAgICAgICBjYWxsYmFjayhlcnIsIG1lbW8pO1xuICAgICAgICB9KTtcbiAgICB9O1xuXG4gICAgZnVuY3Rpb24gX2ZpbHRlcihlYWNoZm4sIGFyciwgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgIHZhciByZXN1bHRzID0gW107XG4gICAgICAgIGVhY2hmbihhcnIsIGZ1bmN0aW9uICh4LCBpbmRleCwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIGl0ZXJhdG9yKHgsIGZ1bmN0aW9uICh2KSB7XG4gICAgICAgICAgICAgICAgaWYgKHYpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0cy5wdXNoKHtpbmRleDogaW5kZXgsIHZhbHVlOiB4fSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhbGxiYWNrKCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgY2FsbGJhY2soX21hcChyZXN1bHRzLnNvcnQoZnVuY3Rpb24gKGEsIGIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gYS5pbmRleCAtIGIuaW5kZXg7XG4gICAgICAgICAgICB9KSwgZnVuY3Rpb24gKHgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4geC52YWx1ZTtcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgYXN5bmMuc2VsZWN0ID1cbiAgICBhc3luYy5maWx0ZXIgPSBkb1BhcmFsbGVsKF9maWx0ZXIpO1xuXG4gICAgYXN5bmMuc2VsZWN0TGltaXQgPVxuICAgIGFzeW5jLmZpbHRlckxpbWl0ID0gZG9QYXJhbGxlbExpbWl0KF9maWx0ZXIpO1xuXG4gICAgYXN5bmMuc2VsZWN0U2VyaWVzID1cbiAgICBhc3luYy5maWx0ZXJTZXJpZXMgPSBkb1NlcmllcyhfZmlsdGVyKTtcblxuICAgIGZ1bmN0aW9uIF9yZWplY3QoZWFjaGZuLCBhcnIsIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICBfZmlsdGVyKGVhY2hmbiwgYXJyLCBmdW5jdGlvbih2YWx1ZSwgY2IpIHtcbiAgICAgICAgICAgIGl0ZXJhdG9yKHZhbHVlLCBmdW5jdGlvbih2KSB7XG4gICAgICAgICAgICAgICAgY2IoIXYpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sIGNhbGxiYWNrKTtcbiAgICB9XG4gICAgYXN5bmMucmVqZWN0ID0gZG9QYXJhbGxlbChfcmVqZWN0KTtcbiAgICBhc3luYy5yZWplY3RMaW1pdCA9IGRvUGFyYWxsZWxMaW1pdChfcmVqZWN0KTtcbiAgICBhc3luYy5yZWplY3RTZXJpZXMgPSBkb1NlcmllcyhfcmVqZWN0KTtcblxuICAgIGZ1bmN0aW9uIF9jcmVhdGVUZXN0ZXIoZWFjaGZuLCBjaGVjaywgZ2V0UmVzdWx0KSB7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbihhcnIsIGxpbWl0LCBpdGVyYXRvciwgY2IpIHtcbiAgICAgICAgICAgIGZ1bmN0aW9uIGRvbmUoKSB7XG4gICAgICAgICAgICAgICAgaWYgKGNiKSBjYihnZXRSZXN1bHQoZmFsc2UsIHZvaWQgMCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZnVuY3Rpb24gaXRlcmF0ZWUoeCwgXywgY2FsbGJhY2spIHtcbiAgICAgICAgICAgICAgICBpZiAoIWNiKSByZXR1cm4gY2FsbGJhY2soKTtcbiAgICAgICAgICAgICAgICBpdGVyYXRvcih4LCBmdW5jdGlvbiAodikge1xuICAgICAgICAgICAgICAgICAgICBpZiAoY2IgJiYgY2hlY2sodikpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNiKGdldFJlc3VsdCh0cnVlLCB4KSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBjYiA9IGl0ZXJhdG9yID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID4gMykge1xuICAgICAgICAgICAgICAgIGVhY2hmbihhcnIsIGxpbWl0LCBpdGVyYXRlZSwgZG9uZSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGNiID0gaXRlcmF0b3I7XG4gICAgICAgICAgICAgICAgaXRlcmF0b3IgPSBsaW1pdDtcbiAgICAgICAgICAgICAgICBlYWNoZm4oYXJyLCBpdGVyYXRlZSwgZG9uZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgYXN5bmMuYW55ID1cbiAgICBhc3luYy5zb21lID0gX2NyZWF0ZVRlc3Rlcihhc3luYy5lYWNoT2YsIHRvQm9vbCwgaWRlbnRpdHkpO1xuXG4gICAgYXN5bmMuc29tZUxpbWl0ID0gX2NyZWF0ZVRlc3Rlcihhc3luYy5lYWNoT2ZMaW1pdCwgdG9Cb29sLCBpZGVudGl0eSk7XG5cbiAgICBhc3luYy5hbGwgPVxuICAgIGFzeW5jLmV2ZXJ5ID0gX2NyZWF0ZVRlc3Rlcihhc3luYy5lYWNoT2YsIG5vdElkLCBub3RJZCk7XG5cbiAgICBhc3luYy5ldmVyeUxpbWl0ID0gX2NyZWF0ZVRlc3Rlcihhc3luYy5lYWNoT2ZMaW1pdCwgbm90SWQsIG5vdElkKTtcblxuICAgIGZ1bmN0aW9uIF9maW5kR2V0UmVzdWx0KHYsIHgpIHtcbiAgICAgICAgcmV0dXJuIHg7XG4gICAgfVxuICAgIGFzeW5jLmRldGVjdCA9IF9jcmVhdGVUZXN0ZXIoYXN5bmMuZWFjaE9mLCBpZGVudGl0eSwgX2ZpbmRHZXRSZXN1bHQpO1xuICAgIGFzeW5jLmRldGVjdFNlcmllcyA9IF9jcmVhdGVUZXN0ZXIoYXN5bmMuZWFjaE9mU2VyaWVzLCBpZGVudGl0eSwgX2ZpbmRHZXRSZXN1bHQpO1xuICAgIGFzeW5jLmRldGVjdExpbWl0ID0gX2NyZWF0ZVRlc3Rlcihhc3luYy5lYWNoT2ZMaW1pdCwgaWRlbnRpdHksIF9maW5kR2V0UmVzdWx0KTtcblxuICAgIGFzeW5jLnNvcnRCeSA9IGZ1bmN0aW9uIChhcnIsIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICBhc3luYy5tYXAoYXJyLCBmdW5jdGlvbiAoeCwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIGl0ZXJhdG9yKHgsIGZ1bmN0aW9uIChlcnIsIGNyaXRlcmlhKSB7XG4gICAgICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2sobnVsbCwge3ZhbHVlOiB4LCBjcml0ZXJpYTogY3JpdGVyaWF9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSwgZnVuY3Rpb24gKGVyciwgcmVzdWx0cykge1xuICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAgIHJldHVybiBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2sobnVsbCwgX21hcChyZXN1bHRzLnNvcnQoY29tcGFyYXRvciksIGZ1bmN0aW9uICh4KSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB4LnZhbHVlO1xuICAgICAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICB9KTtcblxuICAgICAgICBmdW5jdGlvbiBjb21wYXJhdG9yKGxlZnQsIHJpZ2h0KSB7XG4gICAgICAgICAgICB2YXIgYSA9IGxlZnQuY3JpdGVyaWEsIGIgPSByaWdodC5jcml0ZXJpYTtcbiAgICAgICAgICAgIHJldHVybiBhIDwgYiA/IC0xIDogYSA+IGIgPyAxIDogMDtcbiAgICAgICAgfVxuICAgIH07XG5cbiAgICBhc3luYy5hdXRvID0gZnVuY3Rpb24gKHRhc2tzLCBjb25jdXJyZW5jeSwgY2FsbGJhY2spIHtcbiAgICAgICAgaWYgKCFjYWxsYmFjaykge1xuICAgICAgICAgICAgLy8gY29uY3VycmVuY3kgaXMgb3B0aW9uYWwsIHNoaWZ0IHRoZSBhcmdzLlxuICAgICAgICAgICAgY2FsbGJhY2sgPSBjb25jdXJyZW5jeTtcbiAgICAgICAgICAgIGNvbmN1cnJlbmN5ID0gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBjYWxsYmFjayA9IF9vbmNlKGNhbGxiYWNrIHx8IG5vb3ApO1xuICAgICAgICB2YXIga2V5cyA9IF9rZXlzKHRhc2tzKTtcbiAgICAgICAgdmFyIHJlbWFpbmluZ1Rhc2tzID0ga2V5cy5sZW5ndGg7XG4gICAgICAgIGlmICghcmVtYWluaW5nVGFza3MpIHtcbiAgICAgICAgICAgIHJldHVybiBjYWxsYmFjayhudWxsKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWNvbmN1cnJlbmN5KSB7XG4gICAgICAgICAgICBjb25jdXJyZW5jeSA9IHJlbWFpbmluZ1Rhc2tzO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIHJlc3VsdHMgPSB7fTtcbiAgICAgICAgdmFyIHJ1bm5pbmdUYXNrcyA9IDA7XG5cbiAgICAgICAgdmFyIGxpc3RlbmVycyA9IFtdO1xuICAgICAgICBmdW5jdGlvbiBhZGRMaXN0ZW5lcihmbikge1xuICAgICAgICAgICAgbGlzdGVuZXJzLnVuc2hpZnQoZm4pO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIHJlbW92ZUxpc3RlbmVyKGZuKSB7XG4gICAgICAgICAgICB2YXIgaWR4ID0gX2luZGV4T2YobGlzdGVuZXJzLCBmbik7XG4gICAgICAgICAgICBpZiAoaWR4ID49IDApIGxpc3RlbmVycy5zcGxpY2UoaWR4LCAxKTtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiB0YXNrQ29tcGxldGUoKSB7XG4gICAgICAgICAgICByZW1haW5pbmdUYXNrcy0tO1xuICAgICAgICAgICAgX2FycmF5RWFjaChsaXN0ZW5lcnMuc2xpY2UoMCksIGZ1bmN0aW9uIChmbikge1xuICAgICAgICAgICAgICAgIGZuKCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGFkZExpc3RlbmVyKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGlmICghcmVtYWluaW5nVGFza3MpIHtcbiAgICAgICAgICAgICAgICBjYWxsYmFjayhudWxsLCByZXN1bHRzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgX2FycmF5RWFjaChrZXlzLCBmdW5jdGlvbiAoaykge1xuICAgICAgICAgICAgdmFyIHRhc2sgPSBfaXNBcnJheSh0YXNrc1trXSkgPyB0YXNrc1trXTogW3Rhc2tzW2tdXTtcbiAgICAgICAgICAgIHZhciB0YXNrQ2FsbGJhY2sgPSBfcmVzdFBhcmFtKGZ1bmN0aW9uKGVyciwgYXJncykge1xuICAgICAgICAgICAgICAgIHJ1bm5pbmdUYXNrcy0tO1xuICAgICAgICAgICAgICAgIGlmIChhcmdzLmxlbmd0aCA8PSAxKSB7XG4gICAgICAgICAgICAgICAgICAgIGFyZ3MgPSBhcmdzWzBdO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBzYWZlUmVzdWx0cyA9IHt9O1xuICAgICAgICAgICAgICAgICAgICBfZm9yRWFjaE9mKHJlc3VsdHMsIGZ1bmN0aW9uKHZhbCwgcmtleSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgc2FmZVJlc3VsdHNbcmtleV0gPSB2YWw7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICBzYWZlUmVzdWx0c1trXSA9IGFyZ3M7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKGVyciwgc2FmZVJlc3VsdHMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0c1trXSA9IGFyZ3M7XG4gICAgICAgICAgICAgICAgICAgIGFzeW5jLnNldEltbWVkaWF0ZSh0YXNrQ29tcGxldGUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdmFyIHJlcXVpcmVzID0gdGFzay5zbGljZSgwLCB0YXNrLmxlbmd0aCAtIDEpO1xuICAgICAgICAgICAgLy8gcHJldmVudCBkZWFkLWxvY2tzXG4gICAgICAgICAgICB2YXIgbGVuID0gcmVxdWlyZXMubGVuZ3RoO1xuICAgICAgICAgICAgdmFyIGRlcDtcbiAgICAgICAgICAgIHdoaWxlIChsZW4tLSkge1xuICAgICAgICAgICAgICAgIGlmICghKGRlcCA9IHRhc2tzW3JlcXVpcmVzW2xlbl1dKSkge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0hhcyBpbmV4aXN0YW50IGRlcGVuZGVuY3knKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKF9pc0FycmF5KGRlcCkgJiYgX2luZGV4T2YoZGVwLCBrKSA+PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignSGFzIGN5Y2xpYyBkZXBlbmRlbmNpZXMnKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmdW5jdGlvbiByZWFkeSgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcnVubmluZ1Rhc2tzIDwgY29uY3VycmVuY3kgJiYgX3JlZHVjZShyZXF1aXJlcywgZnVuY3Rpb24gKGEsIHgpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChhICYmIHJlc3VsdHMuaGFzT3duUHJvcGVydHkoeCkpO1xuICAgICAgICAgICAgICAgIH0sIHRydWUpICYmICFyZXN1bHRzLmhhc093blByb3BlcnR5KGspO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHJlYWR5KCkpIHtcbiAgICAgICAgICAgICAgICBydW5uaW5nVGFza3MrKztcbiAgICAgICAgICAgICAgICB0YXNrW3Rhc2subGVuZ3RoIC0gMV0odGFza0NhbGxiYWNrLCByZXN1bHRzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGFkZExpc3RlbmVyKGxpc3RlbmVyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZ1bmN0aW9uIGxpc3RlbmVyKCkge1xuICAgICAgICAgICAgICAgIGlmIChyZWFkeSgpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJ1bm5pbmdUYXNrcysrO1xuICAgICAgICAgICAgICAgICAgICByZW1vdmVMaXN0ZW5lcihsaXN0ZW5lcik7XG4gICAgICAgICAgICAgICAgICAgIHRhc2tbdGFzay5sZW5ndGggLSAxXSh0YXNrQ2FsbGJhY2ssIHJlc3VsdHMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfTtcblxuXG5cbiAgICBhc3luYy5yZXRyeSA9IGZ1bmN0aW9uKHRpbWVzLCB0YXNrLCBjYWxsYmFjaykge1xuICAgICAgICB2YXIgREVGQVVMVF9USU1FUyA9IDU7XG4gICAgICAgIHZhciBERUZBVUxUX0lOVEVSVkFMID0gMDtcblxuICAgICAgICB2YXIgYXR0ZW1wdHMgPSBbXTtcblxuICAgICAgICB2YXIgb3B0cyA9IHtcbiAgICAgICAgICAgIHRpbWVzOiBERUZBVUxUX1RJTUVTLFxuICAgICAgICAgICAgaW50ZXJ2YWw6IERFRkFVTFRfSU5URVJWQUxcbiAgICAgICAgfTtcblxuICAgICAgICBmdW5jdGlvbiBwYXJzZVRpbWVzKGFjYywgdCl7XG4gICAgICAgICAgICBpZih0eXBlb2YgdCA9PT0gJ251bWJlcicpe1xuICAgICAgICAgICAgICAgIGFjYy50aW1lcyA9IHBhcnNlSW50KHQsIDEwKSB8fCBERUZBVUxUX1RJTUVTO1xuICAgICAgICAgICAgfSBlbHNlIGlmKHR5cGVvZiB0ID09PSAnb2JqZWN0Jyl7XG4gICAgICAgICAgICAgICAgYWNjLnRpbWVzID0gcGFyc2VJbnQodC50aW1lcywgMTApIHx8IERFRkFVTFRfVElNRVM7XG4gICAgICAgICAgICAgICAgYWNjLmludGVydmFsID0gcGFyc2VJbnQodC5pbnRlcnZhbCwgMTApIHx8IERFRkFVTFRfSU5URVJWQUw7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignVW5zdXBwb3J0ZWQgYXJndW1lbnQgdHlwZSBmb3IgXFwndGltZXNcXCc6ICcgKyB0eXBlb2YgdCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgbGVuZ3RoID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgICAgICAgaWYgKGxlbmd0aCA8IDEgfHwgbGVuZ3RoID4gMykge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIGFyZ3VtZW50cyAtIG11c3QgYmUgZWl0aGVyICh0YXNrKSwgKHRhc2ssIGNhbGxiYWNrKSwgKHRpbWVzLCB0YXNrKSBvciAodGltZXMsIHRhc2ssIGNhbGxiYWNrKScpO1xuICAgICAgICB9IGVsc2UgaWYgKGxlbmd0aCA8PSAyICYmIHR5cGVvZiB0aW1lcyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgY2FsbGJhY2sgPSB0YXNrO1xuICAgICAgICAgICAgdGFzayA9IHRpbWVzO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0eXBlb2YgdGltZXMgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIHBhcnNlVGltZXMob3B0cywgdGltZXMpO1xuICAgICAgICB9XG4gICAgICAgIG9wdHMuY2FsbGJhY2sgPSBjYWxsYmFjaztcbiAgICAgICAgb3B0cy50YXNrID0gdGFzaztcblxuICAgICAgICBmdW5jdGlvbiB3cmFwcGVkVGFzayh3cmFwcGVkQ2FsbGJhY2ssIHdyYXBwZWRSZXN1bHRzKSB7XG4gICAgICAgICAgICBmdW5jdGlvbiByZXRyeUF0dGVtcHQodGFzaywgZmluYWxBdHRlbXB0KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKHNlcmllc0NhbGxiYWNrKSB7XG4gICAgICAgICAgICAgICAgICAgIHRhc2soZnVuY3Rpb24oZXJyLCByZXN1bHQpe1xuICAgICAgICAgICAgICAgICAgICAgICAgc2VyaWVzQ2FsbGJhY2soIWVyciB8fCBmaW5hbEF0dGVtcHQsIHtlcnI6IGVyciwgcmVzdWx0OiByZXN1bHR9KTtcbiAgICAgICAgICAgICAgICAgICAgfSwgd3JhcHBlZFJlc3VsdHMpO1xuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGZ1bmN0aW9uIHJldHJ5SW50ZXJ2YWwoaW50ZXJ2YWwpe1xuICAgICAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbihzZXJpZXNDYWxsYmFjayl7XG4gICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKXtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlcmllc0NhbGxiYWNrKG51bGwpO1xuICAgICAgICAgICAgICAgICAgICB9LCBpbnRlcnZhbCk7XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgd2hpbGUgKG9wdHMudGltZXMpIHtcblxuICAgICAgICAgICAgICAgIHZhciBmaW5hbEF0dGVtcHQgPSAhKG9wdHMudGltZXMtPTEpO1xuICAgICAgICAgICAgICAgIGF0dGVtcHRzLnB1c2gocmV0cnlBdHRlbXB0KG9wdHMudGFzaywgZmluYWxBdHRlbXB0KSk7XG4gICAgICAgICAgICAgICAgaWYoIWZpbmFsQXR0ZW1wdCAmJiBvcHRzLmludGVydmFsID4gMCl7XG4gICAgICAgICAgICAgICAgICAgIGF0dGVtcHRzLnB1c2gocmV0cnlJbnRlcnZhbChvcHRzLmludGVydmFsKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBhc3luYy5zZXJpZXMoYXR0ZW1wdHMsIGZ1bmN0aW9uKGRvbmUsIGRhdGEpe1xuICAgICAgICAgICAgICAgIGRhdGEgPSBkYXRhW2RhdGEubGVuZ3RoIC0gMV07XG4gICAgICAgICAgICAgICAgKHdyYXBwZWRDYWxsYmFjayB8fCBvcHRzLmNhbGxiYWNrKShkYXRhLmVyciwgZGF0YS5yZXN1bHQpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBJZiBhIGNhbGxiYWNrIGlzIHBhc3NlZCwgcnVuIHRoaXMgYXMgYSBjb250cm9sbCBmbG93XG4gICAgICAgIHJldHVybiBvcHRzLmNhbGxiYWNrID8gd3JhcHBlZFRhc2soKSA6IHdyYXBwZWRUYXNrO1xuICAgIH07XG5cbiAgICBhc3luYy53YXRlcmZhbGwgPSBmdW5jdGlvbiAodGFza3MsIGNhbGxiYWNrKSB7XG4gICAgICAgIGNhbGxiYWNrID0gX29uY2UoY2FsbGJhY2sgfHwgbm9vcCk7XG4gICAgICAgIGlmICghX2lzQXJyYXkodGFza3MpKSB7XG4gICAgICAgICAgICB2YXIgZXJyID0gbmV3IEVycm9yKCdGaXJzdCBhcmd1bWVudCB0byB3YXRlcmZhbGwgbXVzdCBiZSBhbiBhcnJheSBvZiBmdW5jdGlvbnMnKTtcbiAgICAgICAgICAgIHJldHVybiBjYWxsYmFjayhlcnIpO1xuICAgICAgICB9XG4gICAgICAgIGlmICghdGFza3MubGVuZ3RoKSB7XG4gICAgICAgICAgICByZXR1cm4gY2FsbGJhY2soKTtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiB3cmFwSXRlcmF0b3IoaXRlcmF0b3IpIHtcbiAgICAgICAgICAgIHJldHVybiBfcmVzdFBhcmFtKGZ1bmN0aW9uIChlcnIsIGFyZ3MpIHtcbiAgICAgICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrLmFwcGx5KG51bGwsIFtlcnJdLmNvbmNhdChhcmdzKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB2YXIgbmV4dCA9IGl0ZXJhdG9yLm5leHQoKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKG5leHQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3MucHVzaCh3cmFwSXRlcmF0b3IobmV4dCkpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgYXJncy5wdXNoKGNhbGxiYWNrKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbnN1cmVBc3luYyhpdGVyYXRvcikuYXBwbHkobnVsbCwgYXJncyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgd3JhcEl0ZXJhdG9yKGFzeW5jLml0ZXJhdG9yKHRhc2tzKSkoKTtcbiAgICB9O1xuXG4gICAgZnVuY3Rpb24gX3BhcmFsbGVsKGVhY2hmbiwgdGFza3MsIGNhbGxiYWNrKSB7XG4gICAgICAgIGNhbGxiYWNrID0gY2FsbGJhY2sgfHwgbm9vcDtcbiAgICAgICAgdmFyIHJlc3VsdHMgPSBfaXNBcnJheUxpa2UodGFza3MpID8gW10gOiB7fTtcblxuICAgICAgICBlYWNoZm4odGFza3MsIGZ1bmN0aW9uICh0YXNrLCBrZXksIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICB0YXNrKF9yZXN0UGFyYW0oZnVuY3Rpb24gKGVyciwgYXJncykge1xuICAgICAgICAgICAgICAgIGlmIChhcmdzLmxlbmd0aCA8PSAxKSB7XG4gICAgICAgICAgICAgICAgICAgIGFyZ3MgPSBhcmdzWzBdO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXN1bHRzW2tleV0gPSBhcmdzO1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgICB9KSk7XG4gICAgICAgIH0sIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgIGNhbGxiYWNrKGVyciwgcmVzdWx0cyk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGFzeW5jLnBhcmFsbGVsID0gZnVuY3Rpb24gKHRhc2tzLCBjYWxsYmFjaykge1xuICAgICAgICBfcGFyYWxsZWwoYXN5bmMuZWFjaE9mLCB0YXNrcywgY2FsbGJhY2spO1xuICAgIH07XG5cbiAgICBhc3luYy5wYXJhbGxlbExpbWl0ID0gZnVuY3Rpb24odGFza3MsIGxpbWl0LCBjYWxsYmFjaykge1xuICAgICAgICBfcGFyYWxsZWwoX2VhY2hPZkxpbWl0KGxpbWl0KSwgdGFza3MsIGNhbGxiYWNrKTtcbiAgICB9O1xuXG4gICAgYXN5bmMuc2VyaWVzID0gZnVuY3Rpb24odGFza3MsIGNhbGxiYWNrKSB7XG4gICAgICAgIF9wYXJhbGxlbChhc3luYy5lYWNoT2ZTZXJpZXMsIHRhc2tzLCBjYWxsYmFjayk7XG4gICAgfTtcblxuICAgIGFzeW5jLml0ZXJhdG9yID0gZnVuY3Rpb24gKHRhc2tzKSB7XG4gICAgICAgIGZ1bmN0aW9uIG1ha2VDYWxsYmFjayhpbmRleCkge1xuICAgICAgICAgICAgZnVuY3Rpb24gZm4oKSB7XG4gICAgICAgICAgICAgICAgaWYgKHRhc2tzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICB0YXNrc1tpbmRleF0uYXBwbHkobnVsbCwgYXJndW1lbnRzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZuLm5leHQoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZuLm5leHQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIChpbmRleCA8IHRhc2tzLmxlbmd0aCAtIDEpID8gbWFrZUNhbGxiYWNrKGluZGV4ICsgMSk6IG51bGw7XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgcmV0dXJuIGZuO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBtYWtlQ2FsbGJhY2soMCk7XG4gICAgfTtcblxuICAgIGFzeW5jLmFwcGx5ID0gX3Jlc3RQYXJhbShmdW5jdGlvbiAoZm4sIGFyZ3MpIHtcbiAgICAgICAgcmV0dXJuIF9yZXN0UGFyYW0oZnVuY3Rpb24gKGNhbGxBcmdzKSB7XG4gICAgICAgICAgICByZXR1cm4gZm4uYXBwbHkoXG4gICAgICAgICAgICAgICAgbnVsbCwgYXJncy5jb25jYXQoY2FsbEFyZ3MpXG4gICAgICAgICAgICApO1xuICAgICAgICB9KTtcbiAgICB9KTtcblxuICAgIGZ1bmN0aW9uIF9jb25jYXQoZWFjaGZuLCBhcnIsIGZuLCBjYWxsYmFjaykge1xuICAgICAgICB2YXIgcmVzdWx0ID0gW107XG4gICAgICAgIGVhY2hmbihhcnIsIGZ1bmN0aW9uICh4LCBpbmRleCwgY2IpIHtcbiAgICAgICAgICAgIGZuKHgsIGZ1bmN0aW9uIChlcnIsIHkpIHtcbiAgICAgICAgICAgICAgICByZXN1bHQgPSByZXN1bHQuY29uY2F0KHkgfHwgW10pO1xuICAgICAgICAgICAgICAgIGNiKGVycik7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSwgZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgY2FsbGJhY2soZXJyLCByZXN1bHQpO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgYXN5bmMuY29uY2F0ID0gZG9QYXJhbGxlbChfY29uY2F0KTtcbiAgICBhc3luYy5jb25jYXRTZXJpZXMgPSBkb1NlcmllcyhfY29uY2F0KTtcblxuICAgIGFzeW5jLndoaWxzdCA9IGZ1bmN0aW9uICh0ZXN0LCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgY2FsbGJhY2sgPSBjYWxsYmFjayB8fCBub29wO1xuICAgICAgICBpZiAodGVzdCgpKSB7XG4gICAgICAgICAgICB2YXIgbmV4dCA9IF9yZXN0UGFyYW0oZnVuY3Rpb24oZXJyLCBhcmdzKSB7XG4gICAgICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodGVzdC5hcHBseSh0aGlzLCBhcmdzKSkge1xuICAgICAgICAgICAgICAgICAgICBpdGVyYXRvcihuZXh0KTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhudWxsKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGl0ZXJhdG9yKG5leHQpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY2FsbGJhY2sobnVsbCk7XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgYXN5bmMuZG9XaGlsc3QgPSBmdW5jdGlvbiAoaXRlcmF0b3IsIHRlc3QsIGNhbGxiYWNrKSB7XG4gICAgICAgIHZhciBjYWxscyA9IDA7XG4gICAgICAgIHJldHVybiBhc3luYy53aGlsc3QoZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICByZXR1cm4gKytjYWxscyA8PSAxIHx8IHRlc3QuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICAgICAgfSwgaXRlcmF0b3IsIGNhbGxiYWNrKTtcbiAgICB9O1xuXG4gICAgYXN5bmMudW50aWwgPSBmdW5jdGlvbiAodGVzdCwgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgIHJldHVybiBhc3luYy53aGlsc3QoZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICByZXR1cm4gIXRlc3QuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICAgICAgfSwgaXRlcmF0b3IsIGNhbGxiYWNrKTtcbiAgICB9O1xuXG4gICAgYXN5bmMuZG9VbnRpbCA9IGZ1bmN0aW9uIChpdGVyYXRvciwgdGVzdCwgY2FsbGJhY2spIHtcbiAgICAgICAgcmV0dXJuIGFzeW5jLmRvV2hpbHN0KGl0ZXJhdG9yLCBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIHJldHVybiAhdGVzdC5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgICAgICB9LCBjYWxsYmFjayk7XG4gICAgfTtcblxuICAgIGFzeW5jLmR1cmluZyA9IGZ1bmN0aW9uICh0ZXN0LCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgY2FsbGJhY2sgPSBjYWxsYmFjayB8fCBub29wO1xuXG4gICAgICAgIHZhciBuZXh0ID0gX3Jlc3RQYXJhbShmdW5jdGlvbihlcnIsIGFyZ3MpIHtcbiAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBhcmdzLnB1c2goY2hlY2spO1xuICAgICAgICAgICAgICAgIHRlc3QuYXBwbHkodGhpcywgYXJncyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHZhciBjaGVjayA9IGZ1bmN0aW9uKGVyciwgdHJ1dGgpIHtcbiAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh0cnV0aCkge1xuICAgICAgICAgICAgICAgIGl0ZXJhdG9yKG5leHQpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBjYWxsYmFjayhudWxsKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcblxuICAgICAgICB0ZXN0KGNoZWNrKTtcbiAgICB9O1xuXG4gICAgYXN5bmMuZG9EdXJpbmcgPSBmdW5jdGlvbiAoaXRlcmF0b3IsIHRlc3QsIGNhbGxiYWNrKSB7XG4gICAgICAgIHZhciBjYWxscyA9IDA7XG4gICAgICAgIGFzeW5jLmR1cmluZyhmdW5jdGlvbihuZXh0KSB7XG4gICAgICAgICAgICBpZiAoY2FsbHMrKyA8IDEpIHtcbiAgICAgICAgICAgICAgICBuZXh0KG51bGwsIHRydWUpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0ZXN0LmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sIGl0ZXJhdG9yLCBjYWxsYmFjayk7XG4gICAgfTtcblxuICAgIGZ1bmN0aW9uIF9xdWV1ZSh3b3JrZXIsIGNvbmN1cnJlbmN5LCBwYXlsb2FkKSB7XG4gICAgICAgIGlmIChjb25jdXJyZW5jeSA9PSBudWxsKSB7XG4gICAgICAgICAgICBjb25jdXJyZW5jeSA9IDE7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZihjb25jdXJyZW5jeSA9PT0gMCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdDb25jdXJyZW5jeSBtdXN0IG5vdCBiZSB6ZXJvJyk7XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gX2luc2VydChxLCBkYXRhLCBwb3MsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICBpZiAoY2FsbGJhY2sgIT0gbnVsbCAmJiB0eXBlb2YgY2FsbGJhY2sgIT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcInRhc2sgY2FsbGJhY2sgbXVzdCBiZSBhIGZ1bmN0aW9uXCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcS5zdGFydGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIGlmICghX2lzQXJyYXkoZGF0YSkpIHtcbiAgICAgICAgICAgICAgICBkYXRhID0gW2RhdGFdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYoZGF0YS5sZW5ndGggPT09IDAgJiYgcS5pZGxlKCkpIHtcbiAgICAgICAgICAgICAgICAvLyBjYWxsIGRyYWluIGltbWVkaWF0ZWx5IGlmIHRoZXJlIGFyZSBubyB0YXNrc1xuICAgICAgICAgICAgICAgIHJldHVybiBhc3luYy5zZXRJbW1lZGlhdGUoZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgICAgIHEuZHJhaW4oKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIF9hcnJheUVhY2goZGF0YSwgZnVuY3Rpb24odGFzaykge1xuICAgICAgICAgICAgICAgIHZhciBpdGVtID0ge1xuICAgICAgICAgICAgICAgICAgICBkYXRhOiB0YXNrLFxuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjazogY2FsbGJhY2sgfHwgbm9vcFxuICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICBpZiAocG9zKSB7XG4gICAgICAgICAgICAgICAgICAgIHEudGFza3MudW5zaGlmdChpdGVtKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBxLnRhc2tzLnB1c2goaXRlbSk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKHEudGFza3MubGVuZ3RoID09PSBxLmNvbmN1cnJlbmN5KSB7XG4gICAgICAgICAgICAgICAgICAgIHEuc2F0dXJhdGVkKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBhc3luYy5zZXRJbW1lZGlhdGUocS5wcm9jZXNzKTtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBfbmV4dChxLCB0YXNrcykge1xuICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKCl7XG4gICAgICAgICAgICAgICAgd29ya2VycyAtPSAxO1xuXG4gICAgICAgICAgICAgICAgdmFyIHJlbW92ZWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB2YXIgYXJncyA9IGFyZ3VtZW50cztcbiAgICAgICAgICAgICAgICBfYXJyYXlFYWNoKHRhc2tzLCBmdW5jdGlvbiAodGFzaykge1xuICAgICAgICAgICAgICAgICAgICBfYXJyYXlFYWNoKHdvcmtlcnNMaXN0LCBmdW5jdGlvbiAod29ya2VyLCBpbmRleCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHdvcmtlciA9PT0gdGFzayAmJiAhcmVtb3ZlZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdvcmtlcnNMaXN0LnNwbGljZShpbmRleCwgMSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVtb3ZlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgICAgIHRhc2suY2FsbGJhY2suYXBwbHkodGFzaywgYXJncyk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgaWYgKHEudGFza3MubGVuZ3RoICsgd29ya2VycyA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICBxLmRyYWluKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHEucHJvY2VzcygpO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciB3b3JrZXJzID0gMDtcbiAgICAgICAgdmFyIHdvcmtlcnNMaXN0ID0gW107XG4gICAgICAgIHZhciBxID0ge1xuICAgICAgICAgICAgdGFza3M6IFtdLFxuICAgICAgICAgICAgY29uY3VycmVuY3k6IGNvbmN1cnJlbmN5LFxuICAgICAgICAgICAgcGF5bG9hZDogcGF5bG9hZCxcbiAgICAgICAgICAgIHNhdHVyYXRlZDogbm9vcCxcbiAgICAgICAgICAgIGVtcHR5OiBub29wLFxuICAgICAgICAgICAgZHJhaW46IG5vb3AsXG4gICAgICAgICAgICBzdGFydGVkOiBmYWxzZSxcbiAgICAgICAgICAgIHBhdXNlZDogZmFsc2UsXG4gICAgICAgICAgICBwdXNoOiBmdW5jdGlvbiAoZGF0YSwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgICAgICBfaW5zZXJ0KHEsIGRhdGEsIGZhbHNlLCBjYWxsYmFjayk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAga2lsbDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHEuZHJhaW4gPSBub29wO1xuICAgICAgICAgICAgICAgIHEudGFza3MgPSBbXTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB1bnNoaWZ0OiBmdW5jdGlvbiAoZGF0YSwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgICAgICBfaW5zZXJ0KHEsIGRhdGEsIHRydWUsIGNhbGxiYWNrKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBwcm9jZXNzOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgaWYgKCFxLnBhdXNlZCAmJiB3b3JrZXJzIDwgcS5jb25jdXJyZW5jeSAmJiBxLnRhc2tzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICB3aGlsZSh3b3JrZXJzIDwgcS5jb25jdXJyZW5jeSAmJiBxLnRhc2tzLmxlbmd0aCl7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgdGFza3MgPSBxLnBheWxvYWQgP1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHEudGFza3Muc3BsaWNlKDAsIHEucGF5bG9hZCkgOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHEudGFza3Muc3BsaWNlKDAsIHEudGFza3MubGVuZ3RoKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGRhdGEgPSBfbWFwKHRhc2tzLCBmdW5jdGlvbiAodGFzaykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0YXNrLmRhdGE7XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHEudGFza3MubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcS5lbXB0eSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgd29ya2VycyArPSAxO1xuICAgICAgICAgICAgICAgICAgICAgICAgd29ya2Vyc0xpc3QucHVzaCh0YXNrc1swXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgY2IgPSBvbmx5X29uY2UoX25leHQocSwgdGFza3MpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHdvcmtlcihkYXRhLCBjYik7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbGVuZ3RoOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHEudGFza3MubGVuZ3RoO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHJ1bm5pbmc6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gd29ya2VycztcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB3b3JrZXJzTGlzdDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB3b3JrZXJzTGlzdDtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBpZGxlOiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcS50YXNrcy5sZW5ndGggKyB3b3JrZXJzID09PSAwO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHBhdXNlOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgcS5wYXVzZWQgPSB0cnVlO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHJlc3VtZTogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGlmIChxLnBhdXNlZCA9PT0gZmFsc2UpIHsgcmV0dXJuOyB9XG4gICAgICAgICAgICAgICAgcS5wYXVzZWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB2YXIgcmVzdW1lQ291bnQgPSBNYXRoLm1pbihxLmNvbmN1cnJlbmN5LCBxLnRhc2tzLmxlbmd0aCk7XG4gICAgICAgICAgICAgICAgLy8gTmVlZCB0byBjYWxsIHEucHJvY2VzcyBvbmNlIHBlciBjb25jdXJyZW50XG4gICAgICAgICAgICAgICAgLy8gd29ya2VyIHRvIHByZXNlcnZlIGZ1bGwgY29uY3VycmVuY3kgYWZ0ZXIgcGF1c2VcbiAgICAgICAgICAgICAgICBmb3IgKHZhciB3ID0gMTsgdyA8PSByZXN1bWVDb3VudDsgdysrKSB7XG4gICAgICAgICAgICAgICAgICAgIGFzeW5jLnNldEltbWVkaWF0ZShxLnByb2Nlc3MpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIHE7XG4gICAgfVxuXG4gICAgYXN5bmMucXVldWUgPSBmdW5jdGlvbiAod29ya2VyLCBjb25jdXJyZW5jeSkge1xuICAgICAgICB2YXIgcSA9IF9xdWV1ZShmdW5jdGlvbiAoaXRlbXMsIGNiKSB7XG4gICAgICAgICAgICB3b3JrZXIoaXRlbXNbMF0sIGNiKTtcbiAgICAgICAgfSwgY29uY3VycmVuY3ksIDEpO1xuXG4gICAgICAgIHJldHVybiBxO1xuICAgIH07XG5cbiAgICBhc3luYy5wcmlvcml0eVF1ZXVlID0gZnVuY3Rpb24gKHdvcmtlciwgY29uY3VycmVuY3kpIHtcblxuICAgICAgICBmdW5jdGlvbiBfY29tcGFyZVRhc2tzKGEsIGIpe1xuICAgICAgICAgICAgcmV0dXJuIGEucHJpb3JpdHkgLSBiLnByaW9yaXR5O1xuICAgICAgICB9XG5cbiAgICAgICAgZnVuY3Rpb24gX2JpbmFyeVNlYXJjaChzZXF1ZW5jZSwgaXRlbSwgY29tcGFyZSkge1xuICAgICAgICAgICAgdmFyIGJlZyA9IC0xLFxuICAgICAgICAgICAgICAgIGVuZCA9IHNlcXVlbmNlLmxlbmd0aCAtIDE7XG4gICAgICAgICAgICB3aGlsZSAoYmVnIDwgZW5kKSB7XG4gICAgICAgICAgICAgICAgdmFyIG1pZCA9IGJlZyArICgoZW5kIC0gYmVnICsgMSkgPj4+IDEpO1xuICAgICAgICAgICAgICAgIGlmIChjb21wYXJlKGl0ZW0sIHNlcXVlbmNlW21pZF0pID49IDApIHtcbiAgICAgICAgICAgICAgICAgICAgYmVnID0gbWlkO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGVuZCA9IG1pZCAtIDE7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGJlZztcbiAgICAgICAgfVxuXG4gICAgICAgIGZ1bmN0aW9uIF9pbnNlcnQocSwgZGF0YSwgcHJpb3JpdHksIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICBpZiAoY2FsbGJhY2sgIT0gbnVsbCAmJiB0eXBlb2YgY2FsbGJhY2sgIT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcInRhc2sgY2FsbGJhY2sgbXVzdCBiZSBhIGZ1bmN0aW9uXCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcS5zdGFydGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIGlmICghX2lzQXJyYXkoZGF0YSkpIHtcbiAgICAgICAgICAgICAgICBkYXRhID0gW2RhdGFdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYoZGF0YS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgICAvLyBjYWxsIGRyYWluIGltbWVkaWF0ZWx5IGlmIHRoZXJlIGFyZSBubyB0YXNrc1xuICAgICAgICAgICAgICAgIHJldHVybiBhc3luYy5zZXRJbW1lZGlhdGUoZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgICAgIHEuZHJhaW4oKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIF9hcnJheUVhY2goZGF0YSwgZnVuY3Rpb24odGFzaykge1xuICAgICAgICAgICAgICAgIHZhciBpdGVtID0ge1xuICAgICAgICAgICAgICAgICAgICBkYXRhOiB0YXNrLFxuICAgICAgICAgICAgICAgICAgICBwcmlvcml0eTogcHJpb3JpdHksXG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrOiB0eXBlb2YgY2FsbGJhY2sgPT09ICdmdW5jdGlvbicgPyBjYWxsYmFjayA6IG5vb3BcbiAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgcS50YXNrcy5zcGxpY2UoX2JpbmFyeVNlYXJjaChxLnRhc2tzLCBpdGVtLCBfY29tcGFyZVRhc2tzKSArIDEsIDAsIGl0ZW0pO1xuXG4gICAgICAgICAgICAgICAgaWYgKHEudGFza3MubGVuZ3RoID09PSBxLmNvbmN1cnJlbmN5KSB7XG4gICAgICAgICAgICAgICAgICAgIHEuc2F0dXJhdGVkKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGFzeW5jLnNldEltbWVkaWF0ZShxLnByb2Nlc3MpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBTdGFydCB3aXRoIGEgbm9ybWFsIHF1ZXVlXG4gICAgICAgIHZhciBxID0gYXN5bmMucXVldWUod29ya2VyLCBjb25jdXJyZW5jeSk7XG5cbiAgICAgICAgLy8gT3ZlcnJpZGUgcHVzaCB0byBhY2NlcHQgc2Vjb25kIHBhcmFtZXRlciByZXByZXNlbnRpbmcgcHJpb3JpdHlcbiAgICAgICAgcS5wdXNoID0gZnVuY3Rpb24gKGRhdGEsIHByaW9yaXR5LCBjYWxsYmFjaykge1xuICAgICAgICAgICAgX2luc2VydChxLCBkYXRhLCBwcmlvcml0eSwgY2FsbGJhY2spO1xuICAgICAgICB9O1xuXG4gICAgICAgIC8vIFJlbW92ZSB1bnNoaWZ0IGZ1bmN0aW9uXG4gICAgICAgIGRlbGV0ZSBxLnVuc2hpZnQ7XG5cbiAgICAgICAgcmV0dXJuIHE7XG4gICAgfTtcblxuICAgIGFzeW5jLmNhcmdvID0gZnVuY3Rpb24gKHdvcmtlciwgcGF5bG9hZCkge1xuICAgICAgICByZXR1cm4gX3F1ZXVlKHdvcmtlciwgMSwgcGF5bG9hZCk7XG4gICAgfTtcblxuICAgIGZ1bmN0aW9uIF9jb25zb2xlX2ZuKG5hbWUpIHtcbiAgICAgICAgcmV0dXJuIF9yZXN0UGFyYW0oZnVuY3Rpb24gKGZuLCBhcmdzKSB7XG4gICAgICAgICAgICBmbi5hcHBseShudWxsLCBhcmdzLmNvbmNhdChbX3Jlc3RQYXJhbShmdW5jdGlvbiAoZXJyLCBhcmdzKSB7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBjb25zb2xlID09PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoY29uc29sZS5lcnJvcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChjb25zb2xlW25hbWVdKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBfYXJyYXlFYWNoKGFyZ3MsIGZ1bmN0aW9uICh4KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZVtuYW1lXSh4KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSldKSk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBhc3luYy5sb2cgPSBfY29uc29sZV9mbignbG9nJyk7XG4gICAgYXN5bmMuZGlyID0gX2NvbnNvbGVfZm4oJ2RpcicpO1xuICAgIC8qYXN5bmMuaW5mbyA9IF9jb25zb2xlX2ZuKCdpbmZvJyk7XG4gICAgYXN5bmMud2FybiA9IF9jb25zb2xlX2ZuKCd3YXJuJyk7XG4gICAgYXN5bmMuZXJyb3IgPSBfY29uc29sZV9mbignZXJyb3InKTsqL1xuXG4gICAgYXN5bmMubWVtb2l6ZSA9IGZ1bmN0aW9uIChmbiwgaGFzaGVyKSB7XG4gICAgICAgIHZhciBtZW1vID0ge307XG4gICAgICAgIHZhciBxdWV1ZXMgPSB7fTtcbiAgICAgICAgaGFzaGVyID0gaGFzaGVyIHx8IGlkZW50aXR5O1xuICAgICAgICB2YXIgbWVtb2l6ZWQgPSBfcmVzdFBhcmFtKGZ1bmN0aW9uIG1lbW9pemVkKGFyZ3MpIHtcbiAgICAgICAgICAgIHZhciBjYWxsYmFjayA9IGFyZ3MucG9wKCk7XG4gICAgICAgICAgICB2YXIga2V5ID0gaGFzaGVyLmFwcGx5KG51bGwsIGFyZ3MpO1xuICAgICAgICAgICAgaWYgKGtleSBpbiBtZW1vKSB7XG4gICAgICAgICAgICAgICAgYXN5bmMuc2V0SW1tZWRpYXRlKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2suYXBwbHkobnVsbCwgbWVtb1trZXldKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGtleSBpbiBxdWV1ZXMpIHtcbiAgICAgICAgICAgICAgICBxdWV1ZXNba2V5XS5wdXNoKGNhbGxiYWNrKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHF1ZXVlc1trZXldID0gW2NhbGxiYWNrXTtcbiAgICAgICAgICAgICAgICBmbi5hcHBseShudWxsLCBhcmdzLmNvbmNhdChbX3Jlc3RQYXJhbShmdW5jdGlvbiAoYXJncykge1xuICAgICAgICAgICAgICAgICAgICBtZW1vW2tleV0gPSBhcmdzO1xuICAgICAgICAgICAgICAgICAgICB2YXIgcSA9IHF1ZXVlc1trZXldO1xuICAgICAgICAgICAgICAgICAgICBkZWxldGUgcXVldWVzW2tleV07XG4gICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwLCBsID0gcS5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHFbaV0uYXBwbHkobnVsbCwgYXJncyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KV0pKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIG1lbW9pemVkLm1lbW8gPSBtZW1vO1xuICAgICAgICBtZW1vaXplZC51bm1lbW9pemVkID0gZm47XG4gICAgICAgIHJldHVybiBtZW1vaXplZDtcbiAgICB9O1xuXG4gICAgYXN5bmMudW5tZW1vaXplID0gZnVuY3Rpb24gKGZuKSB7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gKGZuLnVubWVtb2l6ZWQgfHwgZm4pLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7XG4gICAgICAgIH07XG4gICAgfTtcblxuICAgIGZ1bmN0aW9uIF90aW1lcyhtYXBwZXIpIHtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChjb3VudCwgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICBtYXBwZXIoX3JhbmdlKGNvdW50KSwgaXRlcmF0b3IsIGNhbGxiYWNrKTtcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBhc3luYy50aW1lcyA9IF90aW1lcyhhc3luYy5tYXApO1xuICAgIGFzeW5jLnRpbWVzU2VyaWVzID0gX3RpbWVzKGFzeW5jLm1hcFNlcmllcyk7XG4gICAgYXN5bmMudGltZXNMaW1pdCA9IGZ1bmN0aW9uIChjb3VudCwgbGltaXQsIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICByZXR1cm4gYXN5bmMubWFwTGltaXQoX3JhbmdlKGNvdW50KSwgbGltaXQsIGl0ZXJhdG9yLCBjYWxsYmFjayk7XG4gICAgfTtcblxuICAgIGFzeW5jLnNlcSA9IGZ1bmN0aW9uICgvKiBmdW5jdGlvbnMuLi4gKi8pIHtcbiAgICAgICAgdmFyIGZucyA9IGFyZ3VtZW50cztcbiAgICAgICAgcmV0dXJuIF9yZXN0UGFyYW0oZnVuY3Rpb24gKGFyZ3MpIHtcbiAgICAgICAgICAgIHZhciB0aGF0ID0gdGhpcztcblxuICAgICAgICAgICAgdmFyIGNhbGxiYWNrID0gYXJnc1thcmdzLmxlbmd0aCAtIDFdO1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBjYWxsYmFjayA9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgYXJncy5wb3AoKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2sgPSBub29wO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBhc3luYy5yZWR1Y2UoZm5zLCBhcmdzLCBmdW5jdGlvbiAobmV3YXJncywgZm4sIGNiKSB7XG4gICAgICAgICAgICAgICAgZm4uYXBwbHkodGhhdCwgbmV3YXJncy5jb25jYXQoW19yZXN0UGFyYW0oZnVuY3Rpb24gKGVyciwgbmV4dGFyZ3MpIHtcbiAgICAgICAgICAgICAgICAgICAgY2IoZXJyLCBuZXh0YXJncyk7XG4gICAgICAgICAgICAgICAgfSldKSk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZnVuY3Rpb24gKGVyciwgcmVzdWx0cykge1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrLmFwcGx5KHRoYXQsIFtlcnJdLmNvbmNhdChyZXN1bHRzKSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfTtcblxuICAgIGFzeW5jLmNvbXBvc2UgPSBmdW5jdGlvbiAoLyogZnVuY3Rpb25zLi4uICovKSB7XG4gICAgICAgIHJldHVybiBhc3luYy5zZXEuYXBwbHkobnVsbCwgQXJyYXkucHJvdG90eXBlLnJldmVyc2UuY2FsbChhcmd1bWVudHMpKTtcbiAgICB9O1xuXG5cbiAgICBmdW5jdGlvbiBfYXBwbHlFYWNoKGVhY2hmbikge1xuICAgICAgICByZXR1cm4gX3Jlc3RQYXJhbShmdW5jdGlvbihmbnMsIGFyZ3MpIHtcbiAgICAgICAgICAgIHZhciBnbyA9IF9yZXN0UGFyYW0oZnVuY3Rpb24oYXJncykge1xuICAgICAgICAgICAgICAgIHZhciB0aGF0ID0gdGhpcztcbiAgICAgICAgICAgICAgICB2YXIgY2FsbGJhY2sgPSBhcmdzLnBvcCgpO1xuICAgICAgICAgICAgICAgIHJldHVybiBlYWNoZm4oZm5zLCBmdW5jdGlvbiAoZm4sIF8sIGNiKSB7XG4gICAgICAgICAgICAgICAgICAgIGZuLmFwcGx5KHRoYXQsIGFyZ3MuY29uY2F0KFtjYl0pKTtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIGNhbGxiYWNrKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgaWYgKGFyZ3MubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGdvLmFwcGx5KHRoaXMsIGFyZ3MpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGdvO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBhc3luYy5hcHBseUVhY2ggPSBfYXBwbHlFYWNoKGFzeW5jLmVhY2hPZik7XG4gICAgYXN5bmMuYXBwbHlFYWNoU2VyaWVzID0gX2FwcGx5RWFjaChhc3luYy5lYWNoT2ZTZXJpZXMpO1xuXG5cbiAgICBhc3luYy5mb3JldmVyID0gZnVuY3Rpb24gKGZuLCBjYWxsYmFjaykge1xuICAgICAgICB2YXIgZG9uZSA9IG9ubHlfb25jZShjYWxsYmFjayB8fCBub29wKTtcbiAgICAgICAgdmFyIHRhc2sgPSBlbnN1cmVBc3luYyhmbik7XG4gICAgICAgIGZ1bmN0aW9uIG5leHQoZXJyKSB7XG4gICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGRvbmUoZXJyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRhc2sobmV4dCk7XG4gICAgICAgIH1cbiAgICAgICAgbmV4dCgpO1xuICAgIH07XG5cbiAgICBmdW5jdGlvbiBlbnN1cmVBc3luYyhmbikge1xuICAgICAgICByZXR1cm4gX3Jlc3RQYXJhbShmdW5jdGlvbiAoYXJncykge1xuICAgICAgICAgICAgdmFyIGNhbGxiYWNrID0gYXJncy5wb3AoKTtcbiAgICAgICAgICAgIGFyZ3MucHVzaChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgdmFyIGlubmVyQXJncyA9IGFyZ3VtZW50cztcbiAgICAgICAgICAgICAgICBpZiAoc3luYykge1xuICAgICAgICAgICAgICAgICAgICBhc3luYy5zZXRJbW1lZGlhdGUoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2suYXBwbHkobnVsbCwgaW5uZXJBcmdzKTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2suYXBwbHkobnVsbCwgaW5uZXJBcmdzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHZhciBzeW5jID0gdHJ1ZTtcbiAgICAgICAgICAgIGZuLmFwcGx5KHRoaXMsIGFyZ3MpO1xuICAgICAgICAgICAgc3luYyA9IGZhbHNlO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBhc3luYy5lbnN1cmVBc3luYyA9IGVuc3VyZUFzeW5jO1xuXG4gICAgYXN5bmMuY29uc3RhbnQgPSBfcmVzdFBhcmFtKGZ1bmN0aW9uKHZhbHVlcykge1xuICAgICAgICB2YXIgYXJncyA9IFtudWxsXS5jb25jYXQodmFsdWVzKTtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChjYWxsYmFjaykge1xuICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrLmFwcGx5KHRoaXMsIGFyZ3MpO1xuICAgICAgICB9O1xuICAgIH0pO1xuXG4gICAgYXN5bmMud3JhcFN5bmMgPVxuICAgIGFzeW5jLmFzeW5jaWZ5ID0gZnVuY3Rpb24gYXN5bmNpZnkoZnVuYykge1xuICAgICAgICByZXR1cm4gX3Jlc3RQYXJhbShmdW5jdGlvbiAoYXJncykge1xuICAgICAgICAgICAgdmFyIGNhbGxiYWNrID0gYXJncy5wb3AoKTtcbiAgICAgICAgICAgIHZhciByZXN1bHQ7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIHJlc3VsdCA9IGZ1bmMuYXBwbHkodGhpcywgYXJncyk7XG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gaWYgcmVzdWx0IGlzIFByb21pc2Ugb2JqZWN0XG4gICAgICAgICAgICBpZiAoX2lzT2JqZWN0KHJlc3VsdCkgJiYgdHlwZW9mIHJlc3VsdC50aGVuID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgICAgICAgICByZXN1bHQudGhlbihmdW5jdGlvbih2YWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhudWxsLCB2YWx1ZSk7XG4gICAgICAgICAgICAgICAgfSlbXCJjYXRjaFwiXShmdW5jdGlvbihlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soZXJyLm1lc3NhZ2UgPyBlcnIgOiBuZXcgRXJyb3IoZXJyKSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrKG51bGwsIHJlc3VsdCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH07XG5cbiAgICAvLyBOb2RlLmpzXG4gICAgaWYgKHR5cGVvZiBtb2R1bGUgPT09ICdvYmplY3QnICYmIG1vZHVsZS5leHBvcnRzKSB7XG4gICAgICAgIG1vZHVsZS5leHBvcnRzID0gYXN5bmM7XG4gICAgfVxuICAgIC8vIEFNRCAvIFJlcXVpcmVKU1xuICAgIGVsc2UgaWYgKHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCkge1xuICAgICAgICBkZWZpbmUoW10sIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiBhc3luYztcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8vIGluY2x1ZGVkIGRpcmVjdGx5IHZpYSA8c2NyaXB0PiB0YWdcbiAgICBlbHNlIHtcbiAgICAgICAgcm9vdC5hc3luYyA9IGFzeW5jO1xuICAgIH1cblxufSgpKTtcbiIsIi8vIENvcHlyaWdodCBKb3llbnQsIEluYy4gYW5kIG90aGVyIE5vZGUgY29udHJpYnV0b3JzLlxuLy9cbi8vIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhXG4vLyBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlXG4vLyBcIlNvZnR3YXJlXCIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmdcbi8vIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCxcbi8vIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXRcbi8vIHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZVxuLy8gZm9sbG93aW5nIGNvbmRpdGlvbnM6XG4vL1xuLy8gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWRcbi8vIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuLy9cbi8vIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1Ncbi8vIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0Zcbi8vIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU5cbi8vIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLFxuLy8gREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SXG4vLyBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFXG4vLyBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLlxuXG4vLyByZXNvbHZlcyAuIGFuZCAuLiBlbGVtZW50cyBpbiBhIHBhdGggYXJyYXkgd2l0aCBkaXJlY3RvcnkgbmFtZXMgdGhlcmVcbi8vIG11c3QgYmUgbm8gc2xhc2hlcywgZW1wdHkgZWxlbWVudHMsIG9yIGRldmljZSBuYW1lcyAoYzpcXCkgaW4gdGhlIGFycmF5XG4vLyAoc28gYWxzbyBubyBsZWFkaW5nIGFuZCB0cmFpbGluZyBzbGFzaGVzIC0gaXQgZG9lcyBub3QgZGlzdGluZ3Vpc2hcbi8vIHJlbGF0aXZlIGFuZCBhYnNvbHV0ZSBwYXRocylcbmZ1bmN0aW9uIG5vcm1hbGl6ZUFycmF5KHBhcnRzLCBhbGxvd0Fib3ZlUm9vdCkge1xuICAvLyBpZiB0aGUgcGF0aCB0cmllcyB0byBnbyBhYm92ZSB0aGUgcm9vdCwgYHVwYCBlbmRzIHVwID4gMFxuICB2YXIgdXAgPSAwO1xuICBmb3IgKHZhciBpID0gcGFydHMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICB2YXIgbGFzdCA9IHBhcnRzW2ldO1xuICAgIGlmIChsYXN0ID09PSAnLicpIHtcbiAgICAgIHBhcnRzLnNwbGljZShpLCAxKTtcbiAgICB9IGVsc2UgaWYgKGxhc3QgPT09ICcuLicpIHtcbiAgICAgIHBhcnRzLnNwbGljZShpLCAxKTtcbiAgICAgIHVwKys7XG4gICAgfSBlbHNlIGlmICh1cCkge1xuICAgICAgcGFydHMuc3BsaWNlKGksIDEpO1xuICAgICAgdXAtLTtcbiAgICB9XG4gIH1cblxuICAvLyBpZiB0aGUgcGF0aCBpcyBhbGxvd2VkIHRvIGdvIGFib3ZlIHRoZSByb290LCByZXN0b3JlIGxlYWRpbmcgLi5zXG4gIGlmIChhbGxvd0Fib3ZlUm9vdCkge1xuICAgIGZvciAoOyB1cC0tOyB1cCkge1xuICAgICAgcGFydHMudW5zaGlmdCgnLi4nKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gcGFydHM7XG59XG5cbi8vIFNwbGl0IGEgZmlsZW5hbWUgaW50byBbcm9vdCwgZGlyLCBiYXNlbmFtZSwgZXh0XSwgdW5peCB2ZXJzaW9uXG4vLyAncm9vdCcgaXMganVzdCBhIHNsYXNoLCBvciBub3RoaW5nLlxudmFyIHNwbGl0UGF0aFJlID1cbiAgICAvXihcXC8/fCkoW1xcc1xcU10qPykoKD86XFwuezEsMn18W15cXC9dKz98KShcXC5bXi5cXC9dKnwpKSg/OltcXC9dKikkLztcbnZhciBzcGxpdFBhdGggPSBmdW5jdGlvbihmaWxlbmFtZSkge1xuICByZXR1cm4gc3BsaXRQYXRoUmUuZXhlYyhmaWxlbmFtZSkuc2xpY2UoMSk7XG59O1xuXG4vLyBwYXRoLnJlc29sdmUoW2Zyb20gLi4uXSwgdG8pXG4vLyBwb3NpeCB2ZXJzaW9uXG5leHBvcnRzLnJlc29sdmUgPSBmdW5jdGlvbigpIHtcbiAgdmFyIHJlc29sdmVkUGF0aCA9ICcnLFxuICAgICAgcmVzb2x2ZWRBYnNvbHV0ZSA9IGZhbHNlO1xuXG4gIGZvciAodmFyIGkgPSBhcmd1bWVudHMubGVuZ3RoIC0gMTsgaSA+PSAtMSAmJiAhcmVzb2x2ZWRBYnNvbHV0ZTsgaS0tKSB7XG4gICAgdmFyIHBhdGggPSAoaSA+PSAwKSA/IGFyZ3VtZW50c1tpXSA6IHByb2Nlc3MuY3dkKCk7XG5cbiAgICAvLyBTa2lwIGVtcHR5IGFuZCBpbnZhbGlkIGVudHJpZXNcbiAgICBpZiAodHlwZW9mIHBhdGggIT09ICdzdHJpbmcnKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdBcmd1bWVudHMgdG8gcGF0aC5yZXNvbHZlIG11c3QgYmUgc3RyaW5ncycpO1xuICAgIH0gZWxzZSBpZiAoIXBhdGgpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIHJlc29sdmVkUGF0aCA9IHBhdGggKyAnLycgKyByZXNvbHZlZFBhdGg7XG4gICAgcmVzb2x2ZWRBYnNvbHV0ZSA9IHBhdGguY2hhckF0KDApID09PSAnLyc7XG4gIH1cblxuICAvLyBBdCB0aGlzIHBvaW50IHRoZSBwYXRoIHNob3VsZCBiZSByZXNvbHZlZCB0byBhIGZ1bGwgYWJzb2x1dGUgcGF0aCwgYnV0XG4gIC8vIGhhbmRsZSByZWxhdGl2ZSBwYXRocyB0byBiZSBzYWZlIChtaWdodCBoYXBwZW4gd2hlbiBwcm9jZXNzLmN3ZCgpIGZhaWxzKVxuXG4gIC8vIE5vcm1hbGl6ZSB0aGUgcGF0aFxuICByZXNvbHZlZFBhdGggPSBub3JtYWxpemVBcnJheShmaWx0ZXIocmVzb2x2ZWRQYXRoLnNwbGl0KCcvJyksIGZ1bmN0aW9uKHApIHtcbiAgICByZXR1cm4gISFwO1xuICB9KSwgIXJlc29sdmVkQWJzb2x1dGUpLmpvaW4oJy8nKTtcblxuICByZXR1cm4gKChyZXNvbHZlZEFic29sdXRlID8gJy8nIDogJycpICsgcmVzb2x2ZWRQYXRoKSB8fCAnLic7XG59O1xuXG4vLyBwYXRoLm5vcm1hbGl6ZShwYXRoKVxuLy8gcG9zaXggdmVyc2lvblxuZXhwb3J0cy5ub3JtYWxpemUgPSBmdW5jdGlvbihwYXRoKSB7XG4gIHZhciBpc0Fic29sdXRlID0gZXhwb3J0cy5pc0Fic29sdXRlKHBhdGgpLFxuICAgICAgdHJhaWxpbmdTbGFzaCA9IHN1YnN0cihwYXRoLCAtMSkgPT09ICcvJztcblxuICAvLyBOb3JtYWxpemUgdGhlIHBhdGhcbiAgcGF0aCA9IG5vcm1hbGl6ZUFycmF5KGZpbHRlcihwYXRoLnNwbGl0KCcvJyksIGZ1bmN0aW9uKHApIHtcbiAgICByZXR1cm4gISFwO1xuICB9KSwgIWlzQWJzb2x1dGUpLmpvaW4oJy8nKTtcblxuICBpZiAoIXBhdGggJiYgIWlzQWJzb2x1dGUpIHtcbiAgICBwYXRoID0gJy4nO1xuICB9XG4gIGlmIChwYXRoICYmIHRyYWlsaW5nU2xhc2gpIHtcbiAgICBwYXRoICs9ICcvJztcbiAgfVxuXG4gIHJldHVybiAoaXNBYnNvbHV0ZSA/ICcvJyA6ICcnKSArIHBhdGg7XG59O1xuXG4vLyBwb3NpeCB2ZXJzaW9uXG5leHBvcnRzLmlzQWJzb2x1dGUgPSBmdW5jdGlvbihwYXRoKSB7XG4gIHJldHVybiBwYXRoLmNoYXJBdCgwKSA9PT0gJy8nO1xufTtcblxuLy8gcG9zaXggdmVyc2lvblxuZXhwb3J0cy5qb2luID0gZnVuY3Rpb24oKSB7XG4gIHZhciBwYXRocyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMCk7XG4gIHJldHVybiBleHBvcnRzLm5vcm1hbGl6ZShmaWx0ZXIocGF0aHMsIGZ1bmN0aW9uKHAsIGluZGV4KSB7XG4gICAgaWYgKHR5cGVvZiBwICE9PSAnc3RyaW5nJykge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignQXJndW1lbnRzIHRvIHBhdGguam9pbiBtdXN0IGJlIHN0cmluZ3MnKTtcbiAgICB9XG4gICAgcmV0dXJuIHA7XG4gIH0pLmpvaW4oJy8nKSk7XG59O1xuXG5cbi8vIHBhdGgucmVsYXRpdmUoZnJvbSwgdG8pXG4vLyBwb3NpeCB2ZXJzaW9uXG5leHBvcnRzLnJlbGF0aXZlID0gZnVuY3Rpb24oZnJvbSwgdG8pIHtcbiAgZnJvbSA9IGV4cG9ydHMucmVzb2x2ZShmcm9tKS5zdWJzdHIoMSk7XG4gIHRvID0gZXhwb3J0cy5yZXNvbHZlKHRvKS5zdWJzdHIoMSk7XG5cbiAgZnVuY3Rpb24gdHJpbShhcnIpIHtcbiAgICB2YXIgc3RhcnQgPSAwO1xuICAgIGZvciAoOyBzdGFydCA8IGFyci5sZW5ndGg7IHN0YXJ0KyspIHtcbiAgICAgIGlmIChhcnJbc3RhcnRdICE9PSAnJykgYnJlYWs7XG4gICAgfVxuXG4gICAgdmFyIGVuZCA9IGFyci5sZW5ndGggLSAxO1xuICAgIGZvciAoOyBlbmQgPj0gMDsgZW5kLS0pIHtcbiAgICAgIGlmIChhcnJbZW5kXSAhPT0gJycpIGJyZWFrO1xuICAgIH1cblxuICAgIGlmIChzdGFydCA+IGVuZCkgcmV0dXJuIFtdO1xuICAgIHJldHVybiBhcnIuc2xpY2Uoc3RhcnQsIGVuZCAtIHN0YXJ0ICsgMSk7XG4gIH1cblxuICB2YXIgZnJvbVBhcnRzID0gdHJpbShmcm9tLnNwbGl0KCcvJykpO1xuICB2YXIgdG9QYXJ0cyA9IHRyaW0odG8uc3BsaXQoJy8nKSk7XG5cbiAgdmFyIGxlbmd0aCA9IE1hdGgubWluKGZyb21QYXJ0cy5sZW5ndGgsIHRvUGFydHMubGVuZ3RoKTtcbiAgdmFyIHNhbWVQYXJ0c0xlbmd0aCA9IGxlbmd0aDtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgIGlmIChmcm9tUGFydHNbaV0gIT09IHRvUGFydHNbaV0pIHtcbiAgICAgIHNhbWVQYXJ0c0xlbmd0aCA9IGk7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICB2YXIgb3V0cHV0UGFydHMgPSBbXTtcbiAgZm9yICh2YXIgaSA9IHNhbWVQYXJ0c0xlbmd0aDsgaSA8IGZyb21QYXJ0cy5sZW5ndGg7IGkrKykge1xuICAgIG91dHB1dFBhcnRzLnB1c2goJy4uJyk7XG4gIH1cblxuICBvdXRwdXRQYXJ0cyA9IG91dHB1dFBhcnRzLmNvbmNhdCh0b1BhcnRzLnNsaWNlKHNhbWVQYXJ0c0xlbmd0aCkpO1xuXG4gIHJldHVybiBvdXRwdXRQYXJ0cy5qb2luKCcvJyk7XG59O1xuXG5leHBvcnRzLnNlcCA9ICcvJztcbmV4cG9ydHMuZGVsaW1pdGVyID0gJzonO1xuXG5leHBvcnRzLmRpcm5hbWUgPSBmdW5jdGlvbihwYXRoKSB7XG4gIHZhciByZXN1bHQgPSBzcGxpdFBhdGgocGF0aCksXG4gICAgICByb290ID0gcmVzdWx0WzBdLFxuICAgICAgZGlyID0gcmVzdWx0WzFdO1xuXG4gIGlmICghcm9vdCAmJiAhZGlyKSB7XG4gICAgLy8gTm8gZGlybmFtZSB3aGF0c29ldmVyXG4gICAgcmV0dXJuICcuJztcbiAgfVxuXG4gIGlmIChkaXIpIHtcbiAgICAvLyBJdCBoYXMgYSBkaXJuYW1lLCBzdHJpcCB0cmFpbGluZyBzbGFzaFxuICAgIGRpciA9IGRpci5zdWJzdHIoMCwgZGlyLmxlbmd0aCAtIDEpO1xuICB9XG5cbiAgcmV0dXJuIHJvb3QgKyBkaXI7XG59O1xuXG5cbmV4cG9ydHMuYmFzZW5hbWUgPSBmdW5jdGlvbihwYXRoLCBleHQpIHtcbiAgdmFyIGYgPSBzcGxpdFBhdGgocGF0aClbMl07XG4gIC8vIFRPRE86IG1ha2UgdGhpcyBjb21wYXJpc29uIGNhc2UtaW5zZW5zaXRpdmUgb24gd2luZG93cz9cbiAgaWYgKGV4dCAmJiBmLnN1YnN0cigtMSAqIGV4dC5sZW5ndGgpID09PSBleHQpIHtcbiAgICBmID0gZi5zdWJzdHIoMCwgZi5sZW5ndGggLSBleHQubGVuZ3RoKTtcbiAgfVxuICByZXR1cm4gZjtcbn07XG5cblxuZXhwb3J0cy5leHRuYW1lID0gZnVuY3Rpb24ocGF0aCkge1xuICByZXR1cm4gc3BsaXRQYXRoKHBhdGgpWzNdO1xufTtcblxuZnVuY3Rpb24gZmlsdGVyICh4cywgZikge1xuICAgIGlmICh4cy5maWx0ZXIpIHJldHVybiB4cy5maWx0ZXIoZik7XG4gICAgdmFyIHJlcyA9IFtdO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgeHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgaWYgKGYoeHNbaV0sIGksIHhzKSkgcmVzLnB1c2goeHNbaV0pO1xuICAgIH1cbiAgICByZXR1cm4gcmVzO1xufVxuXG4vLyBTdHJpbmcucHJvdG90eXBlLnN1YnN0ciAtIG5lZ2F0aXZlIGluZGV4IGRvbid0IHdvcmsgaW4gSUU4XG52YXIgc3Vic3RyID0gJ2FiJy5zdWJzdHIoLTEpID09PSAnYidcbiAgICA/IGZ1bmN0aW9uIChzdHIsIHN0YXJ0LCBsZW4pIHsgcmV0dXJuIHN0ci5zdWJzdHIoc3RhcnQsIGxlbikgfVxuICAgIDogZnVuY3Rpb24gKHN0ciwgc3RhcnQsIGxlbikge1xuICAgICAgICBpZiAoc3RhcnQgPCAwKSBzdGFydCA9IHN0ci5sZW5ndGggKyBzdGFydDtcbiAgICAgICAgcmV0dXJuIHN0ci5zdWJzdHIoc3RhcnQsIGxlbik7XG4gICAgfVxuO1xuIiwiLy8gc2hpbSBmb3IgdXNpbmcgcHJvY2VzcyBpbiBicm93c2VyXG5cbnZhciBwcm9jZXNzID0gbW9kdWxlLmV4cG9ydHMgPSB7fTtcbnZhciBxdWV1ZSA9IFtdO1xudmFyIGRyYWluaW5nID0gZmFsc2U7XG52YXIgY3VycmVudFF1ZXVlO1xudmFyIHF1ZXVlSW5kZXggPSAtMTtcblxuZnVuY3Rpb24gY2xlYW5VcE5leHRUaWNrKCkge1xuICAgIGRyYWluaW5nID0gZmFsc2U7XG4gICAgaWYgKGN1cnJlbnRRdWV1ZS5sZW5ndGgpIHtcbiAgICAgICAgcXVldWUgPSBjdXJyZW50UXVldWUuY29uY2F0KHF1ZXVlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICBxdWV1ZUluZGV4ID0gLTE7XG4gICAgfVxuICAgIGlmIChxdWV1ZS5sZW5ndGgpIHtcbiAgICAgICAgZHJhaW5RdWV1ZSgpO1xuICAgIH1cbn1cblxuZnVuY3Rpb24gZHJhaW5RdWV1ZSgpIHtcbiAgICBpZiAoZHJhaW5pbmcpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB2YXIgdGltZW91dCA9IHNldFRpbWVvdXQoY2xlYW5VcE5leHRUaWNrKTtcbiAgICBkcmFpbmluZyA9IHRydWU7XG5cbiAgICB2YXIgbGVuID0gcXVldWUubGVuZ3RoO1xuICAgIHdoaWxlKGxlbikge1xuICAgICAgICBjdXJyZW50UXVldWUgPSBxdWV1ZTtcbiAgICAgICAgcXVldWUgPSBbXTtcbiAgICAgICAgd2hpbGUgKCsrcXVldWVJbmRleCA8IGxlbikge1xuICAgICAgICAgICAgaWYgKGN1cnJlbnRRdWV1ZSkge1xuICAgICAgICAgICAgICAgIGN1cnJlbnRRdWV1ZVtxdWV1ZUluZGV4XS5ydW4oKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBxdWV1ZUluZGV4ID0gLTE7XG4gICAgICAgIGxlbiA9IHF1ZXVlLmxlbmd0aDtcbiAgICB9XG4gICAgY3VycmVudFF1ZXVlID0gbnVsbDtcbiAgICBkcmFpbmluZyA9IGZhbHNlO1xuICAgIGNsZWFyVGltZW91dCh0aW1lb3V0KTtcbn1cblxucHJvY2Vzcy5uZXh0VGljayA9IGZ1bmN0aW9uIChmdW4pIHtcbiAgICB2YXIgYXJncyA9IG5ldyBBcnJheShhcmd1bWVudHMubGVuZ3RoIC0gMSk7XG4gICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPiAxKSB7XG4gICAgICAgIGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBhcmdzW2kgLSAxXSA9IGFyZ3VtZW50c1tpXTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBxdWV1ZS5wdXNoKG5ldyBJdGVtKGZ1biwgYXJncykpO1xuICAgIGlmIChxdWV1ZS5sZW5ndGggPT09IDEgJiYgIWRyYWluaW5nKSB7XG4gICAgICAgIHNldFRpbWVvdXQoZHJhaW5RdWV1ZSwgMCk7XG4gICAgfVxufTtcblxuLy8gdjggbGlrZXMgcHJlZGljdGlibGUgb2JqZWN0c1xuZnVuY3Rpb24gSXRlbShmdW4sIGFycmF5KSB7XG4gICAgdGhpcy5mdW4gPSBmdW47XG4gICAgdGhpcy5hcnJheSA9IGFycmF5O1xufVxuSXRlbS5wcm90b3R5cGUucnVuID0gZnVuY3Rpb24gKCkge1xuICAgIHRoaXMuZnVuLmFwcGx5KG51bGwsIHRoaXMuYXJyYXkpO1xufTtcbnByb2Nlc3MudGl0bGUgPSAnYnJvd3Nlcic7XG5wcm9jZXNzLmJyb3dzZXIgPSB0cnVlO1xucHJvY2Vzcy5lbnYgPSB7fTtcbnByb2Nlc3MuYXJndiA9IFtdO1xucHJvY2Vzcy52ZXJzaW9uID0gJyc7IC8vIGVtcHR5IHN0cmluZyB0byBhdm9pZCByZWdleHAgaXNzdWVzXG5wcm9jZXNzLnZlcnNpb25zID0ge307XG5cbmZ1bmN0aW9uIG5vb3AoKSB7fVxuXG5wcm9jZXNzLm9uID0gbm9vcDtcbnByb2Nlc3MuYWRkTGlzdGVuZXIgPSBub29wO1xucHJvY2Vzcy5vbmNlID0gbm9vcDtcbnByb2Nlc3Mub2ZmID0gbm9vcDtcbnByb2Nlc3MucmVtb3ZlTGlzdGVuZXIgPSBub29wO1xucHJvY2Vzcy5yZW1vdmVBbGxMaXN0ZW5lcnMgPSBub29wO1xucHJvY2Vzcy5lbWl0ID0gbm9vcDtcblxucHJvY2Vzcy5iaW5kaW5nID0gZnVuY3Rpb24gKG5hbWUpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3Byb2Nlc3MuYmluZGluZyBpcyBub3Qgc3VwcG9ydGVkJyk7XG59O1xuXG5wcm9jZXNzLmN3ZCA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuICcvJyB9O1xucHJvY2Vzcy5jaGRpciA9IGZ1bmN0aW9uIChkaXIpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3Byb2Nlc3MuY2hkaXIgaXMgbm90IHN1cHBvcnRlZCcpO1xufTtcbnByb2Nlc3MudW1hc2sgPSBmdW5jdGlvbigpIHsgcmV0dXJuIDA7IH07XG4iLCIvKiEgaHR0cHM6Ly9tdGhzLmJlL3B1bnljb2RlIHYxLjQuMCBieSBAbWF0aGlhcyAqL1xuOyhmdW5jdGlvbihyb290KSB7XG5cblx0LyoqIERldGVjdCBmcmVlIHZhcmlhYmxlcyAqL1xuXHR2YXIgZnJlZUV4cG9ydHMgPSB0eXBlb2YgZXhwb3J0cyA9PSAnb2JqZWN0JyAmJiBleHBvcnRzICYmXG5cdFx0IWV4cG9ydHMubm9kZVR5cGUgJiYgZXhwb3J0cztcblx0dmFyIGZyZWVNb2R1bGUgPSB0eXBlb2YgbW9kdWxlID09ICdvYmplY3QnICYmIG1vZHVsZSAmJlxuXHRcdCFtb2R1bGUubm9kZVR5cGUgJiYgbW9kdWxlO1xuXHR2YXIgZnJlZUdsb2JhbCA9IHR5cGVvZiBnbG9iYWwgPT0gJ29iamVjdCcgJiYgZ2xvYmFsO1xuXHRpZiAoXG5cdFx0ZnJlZUdsb2JhbC5nbG9iYWwgPT09IGZyZWVHbG9iYWwgfHxcblx0XHRmcmVlR2xvYmFsLndpbmRvdyA9PT0gZnJlZUdsb2JhbCB8fFxuXHRcdGZyZWVHbG9iYWwuc2VsZiA9PT0gZnJlZUdsb2JhbFxuXHQpIHtcblx0XHRyb290ID0gZnJlZUdsb2JhbDtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGUgYHB1bnljb2RlYCBvYmplY3QuXG5cdCAqIEBuYW1lIHB1bnljb2RlXG5cdCAqIEB0eXBlIE9iamVjdFxuXHQgKi9cblx0dmFyIHB1bnljb2RlLFxuXG5cdC8qKiBIaWdoZXN0IHBvc2l0aXZlIHNpZ25lZCAzMi1iaXQgZmxvYXQgdmFsdWUgKi9cblx0bWF4SW50ID0gMjE0NzQ4MzY0NywgLy8gYWthLiAweDdGRkZGRkZGIG9yIDJeMzEtMVxuXG5cdC8qKiBCb290c3RyaW5nIHBhcmFtZXRlcnMgKi9cblx0YmFzZSA9IDM2LFxuXHR0TWluID0gMSxcblx0dE1heCA9IDI2LFxuXHRza2V3ID0gMzgsXG5cdGRhbXAgPSA3MDAsXG5cdGluaXRpYWxCaWFzID0gNzIsXG5cdGluaXRpYWxOID0gMTI4LCAvLyAweDgwXG5cdGRlbGltaXRlciA9ICctJywgLy8gJ1xceDJEJ1xuXG5cdC8qKiBSZWd1bGFyIGV4cHJlc3Npb25zICovXG5cdHJlZ2V4UHVueWNvZGUgPSAvXnhuLS0vLFxuXHRyZWdleE5vbkFTQ0lJID0gL1teXFx4MjAtXFx4N0VdLywgLy8gdW5wcmludGFibGUgQVNDSUkgY2hhcnMgKyBub24tQVNDSUkgY2hhcnNcblx0cmVnZXhTZXBhcmF0b3JzID0gL1tcXHgyRVxcdTMwMDJcXHVGRjBFXFx1RkY2MV0vZywgLy8gUkZDIDM0OTAgc2VwYXJhdG9yc1xuXG5cdC8qKiBFcnJvciBtZXNzYWdlcyAqL1xuXHRlcnJvcnMgPSB7XG5cdFx0J292ZXJmbG93JzogJ092ZXJmbG93OiBpbnB1dCBuZWVkcyB3aWRlciBpbnRlZ2VycyB0byBwcm9jZXNzJyxcblx0XHQnbm90LWJhc2ljJzogJ0lsbGVnYWwgaW5wdXQgPj0gMHg4MCAobm90IGEgYmFzaWMgY29kZSBwb2ludCknLFxuXHRcdCdpbnZhbGlkLWlucHV0JzogJ0ludmFsaWQgaW5wdXQnXG5cdH0sXG5cblx0LyoqIENvbnZlbmllbmNlIHNob3J0Y3V0cyAqL1xuXHRiYXNlTWludXNUTWluID0gYmFzZSAtIHRNaW4sXG5cdGZsb29yID0gTWF0aC5mbG9vcixcblx0c3RyaW5nRnJvbUNoYXJDb2RlID0gU3RyaW5nLmZyb21DaGFyQ29kZSxcblxuXHQvKiogVGVtcG9yYXJ5IHZhcmlhYmxlICovXG5cdGtleTtcblxuXHQvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cblxuXHQvKipcblx0ICogQSBnZW5lcmljIGVycm9yIHV0aWxpdHkgZnVuY3Rpb24uXG5cdCAqIEBwcml2YXRlXG5cdCAqIEBwYXJhbSB7U3RyaW5nfSB0eXBlIFRoZSBlcnJvciB0eXBlLlxuXHQgKiBAcmV0dXJucyB7RXJyb3J9IFRocm93cyBhIGBSYW5nZUVycm9yYCB3aXRoIHRoZSBhcHBsaWNhYmxlIGVycm9yIG1lc3NhZ2UuXG5cdCAqL1xuXHRmdW5jdGlvbiBlcnJvcih0eXBlKSB7XG5cdFx0dGhyb3cgbmV3IFJhbmdlRXJyb3IoZXJyb3JzW3R5cGVdKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBBIGdlbmVyaWMgYEFycmF5I21hcGAgdXRpbGl0eSBmdW5jdGlvbi5cblx0ICogQHByaXZhdGVcblx0ICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIGl0ZXJhdGUgb3Zlci5cblx0ICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2sgVGhlIGZ1bmN0aW9uIHRoYXQgZ2V0cyBjYWxsZWQgZm9yIGV2ZXJ5IGFycmF5XG5cdCAqIGl0ZW0uXG5cdCAqIEByZXR1cm5zIHtBcnJheX0gQSBuZXcgYXJyYXkgb2YgdmFsdWVzIHJldHVybmVkIGJ5IHRoZSBjYWxsYmFjayBmdW5jdGlvbi5cblx0ICovXG5cdGZ1bmN0aW9uIG1hcChhcnJheSwgZm4pIHtcblx0XHR2YXIgbGVuZ3RoID0gYXJyYXkubGVuZ3RoO1xuXHRcdHZhciByZXN1bHQgPSBbXTtcblx0XHR3aGlsZSAobGVuZ3RoLS0pIHtcblx0XHRcdHJlc3VsdFtsZW5ndGhdID0gZm4oYXJyYXlbbGVuZ3RoXSk7XG5cdFx0fVxuXHRcdHJldHVybiByZXN1bHQ7XG5cdH1cblxuXHQvKipcblx0ICogQSBzaW1wbGUgYEFycmF5I21hcGAtbGlrZSB3cmFwcGVyIHRvIHdvcmsgd2l0aCBkb21haW4gbmFtZSBzdHJpbmdzIG9yIGVtYWlsXG5cdCAqIGFkZHJlc3Nlcy5cblx0ICogQHByaXZhdGVcblx0ICogQHBhcmFtIHtTdHJpbmd9IGRvbWFpbiBUaGUgZG9tYWluIG5hbWUgb3IgZW1haWwgYWRkcmVzcy5cblx0ICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2sgVGhlIGZ1bmN0aW9uIHRoYXQgZ2V0cyBjYWxsZWQgZm9yIGV2ZXJ5XG5cdCAqIGNoYXJhY3Rlci5cblx0ICogQHJldHVybnMge0FycmF5fSBBIG5ldyBzdHJpbmcgb2YgY2hhcmFjdGVycyByZXR1cm5lZCBieSB0aGUgY2FsbGJhY2tcblx0ICogZnVuY3Rpb24uXG5cdCAqL1xuXHRmdW5jdGlvbiBtYXBEb21haW4oc3RyaW5nLCBmbikge1xuXHRcdHZhciBwYXJ0cyA9IHN0cmluZy5zcGxpdCgnQCcpO1xuXHRcdHZhciByZXN1bHQgPSAnJztcblx0XHRpZiAocGFydHMubGVuZ3RoID4gMSkge1xuXHRcdFx0Ly8gSW4gZW1haWwgYWRkcmVzc2VzLCBvbmx5IHRoZSBkb21haW4gbmFtZSBzaG91bGQgYmUgcHVueWNvZGVkLiBMZWF2ZVxuXHRcdFx0Ly8gdGhlIGxvY2FsIHBhcnQgKGkuZS4gZXZlcnl0aGluZyB1cCB0byBgQGApIGludGFjdC5cblx0XHRcdHJlc3VsdCA9IHBhcnRzWzBdICsgJ0AnO1xuXHRcdFx0c3RyaW5nID0gcGFydHNbMV07XG5cdFx0fVxuXHRcdC8vIEF2b2lkIGBzcGxpdChyZWdleClgIGZvciBJRTggY29tcGF0aWJpbGl0eS4gU2VlICMxNy5cblx0XHRzdHJpbmcgPSBzdHJpbmcucmVwbGFjZShyZWdleFNlcGFyYXRvcnMsICdcXHgyRScpO1xuXHRcdHZhciBsYWJlbHMgPSBzdHJpbmcuc3BsaXQoJy4nKTtcblx0XHR2YXIgZW5jb2RlZCA9IG1hcChsYWJlbHMsIGZuKS5qb2luKCcuJyk7XG5cdFx0cmV0dXJuIHJlc3VsdCArIGVuY29kZWQ7XG5cdH1cblxuXHQvKipcblx0ICogQ3JlYXRlcyBhbiBhcnJheSBjb250YWluaW5nIHRoZSBudW1lcmljIGNvZGUgcG9pbnRzIG9mIGVhY2ggVW5pY29kZVxuXHQgKiBjaGFyYWN0ZXIgaW4gdGhlIHN0cmluZy4gV2hpbGUgSmF2YVNjcmlwdCB1c2VzIFVDUy0yIGludGVybmFsbHksXG5cdCAqIHRoaXMgZnVuY3Rpb24gd2lsbCBjb252ZXJ0IGEgcGFpciBvZiBzdXJyb2dhdGUgaGFsdmVzIChlYWNoIG9mIHdoaWNoXG5cdCAqIFVDUy0yIGV4cG9zZXMgYXMgc2VwYXJhdGUgY2hhcmFjdGVycykgaW50byBhIHNpbmdsZSBjb2RlIHBvaW50LFxuXHQgKiBtYXRjaGluZyBVVEYtMTYuXG5cdCAqIEBzZWUgYHB1bnljb2RlLnVjczIuZW5jb2RlYFxuXHQgKiBAc2VlIDxodHRwczovL21hdGhpYXNieW5lbnMuYmUvbm90ZXMvamF2YXNjcmlwdC1lbmNvZGluZz5cblx0ICogQG1lbWJlck9mIHB1bnljb2RlLnVjczJcblx0ICogQG5hbWUgZGVjb2RlXG5cdCAqIEBwYXJhbSB7U3RyaW5nfSBzdHJpbmcgVGhlIFVuaWNvZGUgaW5wdXQgc3RyaW5nIChVQ1MtMikuXG5cdCAqIEByZXR1cm5zIHtBcnJheX0gVGhlIG5ldyBhcnJheSBvZiBjb2RlIHBvaW50cy5cblx0ICovXG5cdGZ1bmN0aW9uIHVjczJkZWNvZGUoc3RyaW5nKSB7XG5cdFx0dmFyIG91dHB1dCA9IFtdLFxuXHRcdCAgICBjb3VudGVyID0gMCxcblx0XHQgICAgbGVuZ3RoID0gc3RyaW5nLmxlbmd0aCxcblx0XHQgICAgdmFsdWUsXG5cdFx0ICAgIGV4dHJhO1xuXHRcdHdoaWxlIChjb3VudGVyIDwgbGVuZ3RoKSB7XG5cdFx0XHR2YWx1ZSA9IHN0cmluZy5jaGFyQ29kZUF0KGNvdW50ZXIrKyk7XG5cdFx0XHRpZiAodmFsdWUgPj0gMHhEODAwICYmIHZhbHVlIDw9IDB4REJGRiAmJiBjb3VudGVyIDwgbGVuZ3RoKSB7XG5cdFx0XHRcdC8vIGhpZ2ggc3Vycm9nYXRlLCBhbmQgdGhlcmUgaXMgYSBuZXh0IGNoYXJhY3RlclxuXHRcdFx0XHRleHRyYSA9IHN0cmluZy5jaGFyQ29kZUF0KGNvdW50ZXIrKyk7XG5cdFx0XHRcdGlmICgoZXh0cmEgJiAweEZDMDApID09IDB4REMwMCkgeyAvLyBsb3cgc3Vycm9nYXRlXG5cdFx0XHRcdFx0b3V0cHV0LnB1c2goKCh2YWx1ZSAmIDB4M0ZGKSA8PCAxMCkgKyAoZXh0cmEgJiAweDNGRikgKyAweDEwMDAwKTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHQvLyB1bm1hdGNoZWQgc3Vycm9nYXRlOyBvbmx5IGFwcGVuZCB0aGlzIGNvZGUgdW5pdCwgaW4gY2FzZSB0aGUgbmV4dFxuXHRcdFx0XHRcdC8vIGNvZGUgdW5pdCBpcyB0aGUgaGlnaCBzdXJyb2dhdGUgb2YgYSBzdXJyb2dhdGUgcGFpclxuXHRcdFx0XHRcdG91dHB1dC5wdXNoKHZhbHVlKTtcblx0XHRcdFx0XHRjb3VudGVyLS07XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdG91dHB1dC5wdXNoKHZhbHVlKTtcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIG91dHB1dDtcblx0fVxuXG5cdC8qKlxuXHQgKiBDcmVhdGVzIGEgc3RyaW5nIGJhc2VkIG9uIGFuIGFycmF5IG9mIG51bWVyaWMgY29kZSBwb2ludHMuXG5cdCAqIEBzZWUgYHB1bnljb2RlLnVjczIuZGVjb2RlYFxuXHQgKiBAbWVtYmVyT2YgcHVueWNvZGUudWNzMlxuXHQgKiBAbmFtZSBlbmNvZGVcblx0ICogQHBhcmFtIHtBcnJheX0gY29kZVBvaW50cyBUaGUgYXJyYXkgb2YgbnVtZXJpYyBjb2RlIHBvaW50cy5cblx0ICogQHJldHVybnMge1N0cmluZ30gVGhlIG5ldyBVbmljb2RlIHN0cmluZyAoVUNTLTIpLlxuXHQgKi9cblx0ZnVuY3Rpb24gdWNzMmVuY29kZShhcnJheSkge1xuXHRcdHJldHVybiBtYXAoYXJyYXksIGZ1bmN0aW9uKHZhbHVlKSB7XG5cdFx0XHR2YXIgb3V0cHV0ID0gJyc7XG5cdFx0XHRpZiAodmFsdWUgPiAweEZGRkYpIHtcblx0XHRcdFx0dmFsdWUgLT0gMHgxMDAwMDtcblx0XHRcdFx0b3V0cHV0ICs9IHN0cmluZ0Zyb21DaGFyQ29kZSh2YWx1ZSA+Pj4gMTAgJiAweDNGRiB8IDB4RDgwMCk7XG5cdFx0XHRcdHZhbHVlID0gMHhEQzAwIHwgdmFsdWUgJiAweDNGRjtcblx0XHRcdH1cblx0XHRcdG91dHB1dCArPSBzdHJpbmdGcm9tQ2hhckNvZGUodmFsdWUpO1xuXHRcdFx0cmV0dXJuIG91dHB1dDtcblx0XHR9KS5qb2luKCcnKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBDb252ZXJ0cyBhIGJhc2ljIGNvZGUgcG9pbnQgaW50byBhIGRpZ2l0L2ludGVnZXIuXG5cdCAqIEBzZWUgYGRpZ2l0VG9CYXNpYygpYFxuXHQgKiBAcHJpdmF0ZVxuXHQgKiBAcGFyYW0ge051bWJlcn0gY29kZVBvaW50IFRoZSBiYXNpYyBudW1lcmljIGNvZGUgcG9pbnQgdmFsdWUuXG5cdCAqIEByZXR1cm5zIHtOdW1iZXJ9IFRoZSBudW1lcmljIHZhbHVlIG9mIGEgYmFzaWMgY29kZSBwb2ludCAoZm9yIHVzZSBpblxuXHQgKiByZXByZXNlbnRpbmcgaW50ZWdlcnMpIGluIHRoZSByYW5nZSBgMGAgdG8gYGJhc2UgLSAxYCwgb3IgYGJhc2VgIGlmXG5cdCAqIHRoZSBjb2RlIHBvaW50IGRvZXMgbm90IHJlcHJlc2VudCBhIHZhbHVlLlxuXHQgKi9cblx0ZnVuY3Rpb24gYmFzaWNUb0RpZ2l0KGNvZGVQb2ludCkge1xuXHRcdGlmIChjb2RlUG9pbnQgLSA0OCA8IDEwKSB7XG5cdFx0XHRyZXR1cm4gY29kZVBvaW50IC0gMjI7XG5cdFx0fVxuXHRcdGlmIChjb2RlUG9pbnQgLSA2NSA8IDI2KSB7XG5cdFx0XHRyZXR1cm4gY29kZVBvaW50IC0gNjU7XG5cdFx0fVxuXHRcdGlmIChjb2RlUG9pbnQgLSA5NyA8IDI2KSB7XG5cdFx0XHRyZXR1cm4gY29kZVBvaW50IC0gOTc7XG5cdFx0fVxuXHRcdHJldHVybiBiYXNlO1xuXHR9XG5cblx0LyoqXG5cdCAqIENvbnZlcnRzIGEgZGlnaXQvaW50ZWdlciBpbnRvIGEgYmFzaWMgY29kZSBwb2ludC5cblx0ICogQHNlZSBgYmFzaWNUb0RpZ2l0KClgXG5cdCAqIEBwcml2YXRlXG5cdCAqIEBwYXJhbSB7TnVtYmVyfSBkaWdpdCBUaGUgbnVtZXJpYyB2YWx1ZSBvZiBhIGJhc2ljIGNvZGUgcG9pbnQuXG5cdCAqIEByZXR1cm5zIHtOdW1iZXJ9IFRoZSBiYXNpYyBjb2RlIHBvaW50IHdob3NlIHZhbHVlICh3aGVuIHVzZWQgZm9yXG5cdCAqIHJlcHJlc2VudGluZyBpbnRlZ2VycykgaXMgYGRpZ2l0YCwgd2hpY2ggbmVlZHMgdG8gYmUgaW4gdGhlIHJhbmdlXG5cdCAqIGAwYCB0byBgYmFzZSAtIDFgLiBJZiBgZmxhZ2AgaXMgbm9uLXplcm8sIHRoZSB1cHBlcmNhc2UgZm9ybSBpc1xuXHQgKiB1c2VkOyBlbHNlLCB0aGUgbG93ZXJjYXNlIGZvcm0gaXMgdXNlZC4gVGhlIGJlaGF2aW9yIGlzIHVuZGVmaW5lZFxuXHQgKiBpZiBgZmxhZ2AgaXMgbm9uLXplcm8gYW5kIGBkaWdpdGAgaGFzIG5vIHVwcGVyY2FzZSBmb3JtLlxuXHQgKi9cblx0ZnVuY3Rpb24gZGlnaXRUb0Jhc2ljKGRpZ2l0LCBmbGFnKSB7XG5cdFx0Ly8gIDAuLjI1IG1hcCB0byBBU0NJSSBhLi56IG9yIEEuLlpcblx0XHQvLyAyNi4uMzUgbWFwIHRvIEFTQ0lJIDAuLjlcblx0XHRyZXR1cm4gZGlnaXQgKyAyMiArIDc1ICogKGRpZ2l0IDwgMjYpIC0gKChmbGFnICE9IDApIDw8IDUpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEJpYXMgYWRhcHRhdGlvbiBmdW5jdGlvbiBhcyBwZXIgc2VjdGlvbiAzLjQgb2YgUkZDIDM0OTIuXG5cdCAqIGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmMzNDkyI3NlY3Rpb24tMy40XG5cdCAqIEBwcml2YXRlXG5cdCAqL1xuXHRmdW5jdGlvbiBhZGFwdChkZWx0YSwgbnVtUG9pbnRzLCBmaXJzdFRpbWUpIHtcblx0XHR2YXIgayA9IDA7XG5cdFx0ZGVsdGEgPSBmaXJzdFRpbWUgPyBmbG9vcihkZWx0YSAvIGRhbXApIDogZGVsdGEgPj4gMTtcblx0XHRkZWx0YSArPSBmbG9vcihkZWx0YSAvIG51bVBvaW50cyk7XG5cdFx0Zm9yICgvKiBubyBpbml0aWFsaXphdGlvbiAqLzsgZGVsdGEgPiBiYXNlTWludXNUTWluICogdE1heCA+PiAxOyBrICs9IGJhc2UpIHtcblx0XHRcdGRlbHRhID0gZmxvb3IoZGVsdGEgLyBiYXNlTWludXNUTWluKTtcblx0XHR9XG5cdFx0cmV0dXJuIGZsb29yKGsgKyAoYmFzZU1pbnVzVE1pbiArIDEpICogZGVsdGEgLyAoZGVsdGEgKyBza2V3KSk7XG5cdH1cblxuXHQvKipcblx0ICogQ29udmVydHMgYSBQdW55Y29kZSBzdHJpbmcgb2YgQVNDSUktb25seSBzeW1ib2xzIHRvIGEgc3RyaW5nIG9mIFVuaWNvZGVcblx0ICogc3ltYm9scy5cblx0ICogQG1lbWJlck9mIHB1bnljb2RlXG5cdCAqIEBwYXJhbSB7U3RyaW5nfSBpbnB1dCBUaGUgUHVueWNvZGUgc3RyaW5nIG9mIEFTQ0lJLW9ubHkgc3ltYm9scy5cblx0ICogQHJldHVybnMge1N0cmluZ30gVGhlIHJlc3VsdGluZyBzdHJpbmcgb2YgVW5pY29kZSBzeW1ib2xzLlxuXHQgKi9cblx0ZnVuY3Rpb24gZGVjb2RlKGlucHV0KSB7XG5cdFx0Ly8gRG9uJ3QgdXNlIFVDUy0yXG5cdFx0dmFyIG91dHB1dCA9IFtdLFxuXHRcdCAgICBpbnB1dExlbmd0aCA9IGlucHV0Lmxlbmd0aCxcblx0XHQgICAgb3V0LFxuXHRcdCAgICBpID0gMCxcblx0XHQgICAgbiA9IGluaXRpYWxOLFxuXHRcdCAgICBiaWFzID0gaW5pdGlhbEJpYXMsXG5cdFx0ICAgIGJhc2ljLFxuXHRcdCAgICBqLFxuXHRcdCAgICBpbmRleCxcblx0XHQgICAgb2xkaSxcblx0XHQgICAgdyxcblx0XHQgICAgayxcblx0XHQgICAgZGlnaXQsXG5cdFx0ICAgIHQsXG5cdFx0ICAgIC8qKiBDYWNoZWQgY2FsY3VsYXRpb24gcmVzdWx0cyAqL1xuXHRcdCAgICBiYXNlTWludXNUO1xuXG5cdFx0Ly8gSGFuZGxlIHRoZSBiYXNpYyBjb2RlIHBvaW50czogbGV0IGBiYXNpY2AgYmUgdGhlIG51bWJlciBvZiBpbnB1dCBjb2RlXG5cdFx0Ly8gcG9pbnRzIGJlZm9yZSB0aGUgbGFzdCBkZWxpbWl0ZXIsIG9yIGAwYCBpZiB0aGVyZSBpcyBub25lLCB0aGVuIGNvcHlcblx0XHQvLyB0aGUgZmlyc3QgYmFzaWMgY29kZSBwb2ludHMgdG8gdGhlIG91dHB1dC5cblxuXHRcdGJhc2ljID0gaW5wdXQubGFzdEluZGV4T2YoZGVsaW1pdGVyKTtcblx0XHRpZiAoYmFzaWMgPCAwKSB7XG5cdFx0XHRiYXNpYyA9IDA7XG5cdFx0fVxuXG5cdFx0Zm9yIChqID0gMDsgaiA8IGJhc2ljOyArK2opIHtcblx0XHRcdC8vIGlmIGl0J3Mgbm90IGEgYmFzaWMgY29kZSBwb2ludFxuXHRcdFx0aWYgKGlucHV0LmNoYXJDb2RlQXQoaikgPj0gMHg4MCkge1xuXHRcdFx0XHRlcnJvcignbm90LWJhc2ljJyk7XG5cdFx0XHR9XG5cdFx0XHRvdXRwdXQucHVzaChpbnB1dC5jaGFyQ29kZUF0KGopKTtcblx0XHR9XG5cblx0XHQvLyBNYWluIGRlY29kaW5nIGxvb3A6IHN0YXJ0IGp1c3QgYWZ0ZXIgdGhlIGxhc3QgZGVsaW1pdGVyIGlmIGFueSBiYXNpYyBjb2RlXG5cdFx0Ly8gcG9pbnRzIHdlcmUgY29waWVkOyBzdGFydCBhdCB0aGUgYmVnaW5uaW5nIG90aGVyd2lzZS5cblxuXHRcdGZvciAoaW5kZXggPSBiYXNpYyA+IDAgPyBiYXNpYyArIDEgOiAwOyBpbmRleCA8IGlucHV0TGVuZ3RoOyAvKiBubyBmaW5hbCBleHByZXNzaW9uICovKSB7XG5cblx0XHRcdC8vIGBpbmRleGAgaXMgdGhlIGluZGV4IG9mIHRoZSBuZXh0IGNoYXJhY3RlciB0byBiZSBjb25zdW1lZC5cblx0XHRcdC8vIERlY29kZSBhIGdlbmVyYWxpemVkIHZhcmlhYmxlLWxlbmd0aCBpbnRlZ2VyIGludG8gYGRlbHRhYCxcblx0XHRcdC8vIHdoaWNoIGdldHMgYWRkZWQgdG8gYGlgLiBUaGUgb3ZlcmZsb3cgY2hlY2tpbmcgaXMgZWFzaWVyXG5cdFx0XHQvLyBpZiB3ZSBpbmNyZWFzZSBgaWAgYXMgd2UgZ28sIHRoZW4gc3VidHJhY3Qgb2ZmIGl0cyBzdGFydGluZ1xuXHRcdFx0Ly8gdmFsdWUgYXQgdGhlIGVuZCB0byBvYnRhaW4gYGRlbHRhYC5cblx0XHRcdGZvciAob2xkaSA9IGksIHcgPSAxLCBrID0gYmFzZTsgLyogbm8gY29uZGl0aW9uICovOyBrICs9IGJhc2UpIHtcblxuXHRcdFx0XHRpZiAoaW5kZXggPj0gaW5wdXRMZW5ndGgpIHtcblx0XHRcdFx0XHRlcnJvcignaW52YWxpZC1pbnB1dCcpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0ZGlnaXQgPSBiYXNpY1RvRGlnaXQoaW5wdXQuY2hhckNvZGVBdChpbmRleCsrKSk7XG5cblx0XHRcdFx0aWYgKGRpZ2l0ID49IGJhc2UgfHwgZGlnaXQgPiBmbG9vcigobWF4SW50IC0gaSkgLyB3KSkge1xuXHRcdFx0XHRcdGVycm9yKCdvdmVyZmxvdycpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0aSArPSBkaWdpdCAqIHc7XG5cdFx0XHRcdHQgPSBrIDw9IGJpYXMgPyB0TWluIDogKGsgPj0gYmlhcyArIHRNYXggPyB0TWF4IDogayAtIGJpYXMpO1xuXG5cdFx0XHRcdGlmIChkaWdpdCA8IHQpIHtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGJhc2VNaW51c1QgPSBiYXNlIC0gdDtcblx0XHRcdFx0aWYgKHcgPiBmbG9vcihtYXhJbnQgLyBiYXNlTWludXNUKSkge1xuXHRcdFx0XHRcdGVycm9yKCdvdmVyZmxvdycpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0dyAqPSBiYXNlTWludXNUO1xuXG5cdFx0XHR9XG5cblx0XHRcdG91dCA9IG91dHB1dC5sZW5ndGggKyAxO1xuXHRcdFx0YmlhcyA9IGFkYXB0KGkgLSBvbGRpLCBvdXQsIG9sZGkgPT0gMCk7XG5cblx0XHRcdC8vIGBpYCB3YXMgc3VwcG9zZWQgdG8gd3JhcCBhcm91bmQgZnJvbSBgb3V0YCB0byBgMGAsXG5cdFx0XHQvLyBpbmNyZW1lbnRpbmcgYG5gIGVhY2ggdGltZSwgc28gd2UnbGwgZml4IHRoYXQgbm93OlxuXHRcdFx0aWYgKGZsb29yKGkgLyBvdXQpID4gbWF4SW50IC0gbikge1xuXHRcdFx0XHRlcnJvcignb3ZlcmZsb3cnKTtcblx0XHRcdH1cblxuXHRcdFx0biArPSBmbG9vcihpIC8gb3V0KTtcblx0XHRcdGkgJT0gb3V0O1xuXG5cdFx0XHQvLyBJbnNlcnQgYG5gIGF0IHBvc2l0aW9uIGBpYCBvZiB0aGUgb3V0cHV0XG5cdFx0XHRvdXRwdXQuc3BsaWNlKGkrKywgMCwgbik7XG5cblx0XHR9XG5cblx0XHRyZXR1cm4gdWNzMmVuY29kZShvdXRwdXQpO1xuXHR9XG5cblx0LyoqXG5cdCAqIENvbnZlcnRzIGEgc3RyaW5nIG9mIFVuaWNvZGUgc3ltYm9scyAoZS5nLiBhIGRvbWFpbiBuYW1lIGxhYmVsKSB0byBhXG5cdCAqIFB1bnljb2RlIHN0cmluZyBvZiBBU0NJSS1vbmx5IHN5bWJvbHMuXG5cdCAqIEBtZW1iZXJPZiBwdW55Y29kZVxuXHQgKiBAcGFyYW0ge1N0cmluZ30gaW5wdXQgVGhlIHN0cmluZyBvZiBVbmljb2RlIHN5bWJvbHMuXG5cdCAqIEByZXR1cm5zIHtTdHJpbmd9IFRoZSByZXN1bHRpbmcgUHVueWNvZGUgc3RyaW5nIG9mIEFTQ0lJLW9ubHkgc3ltYm9scy5cblx0ICovXG5cdGZ1bmN0aW9uIGVuY29kZShpbnB1dCkge1xuXHRcdHZhciBuLFxuXHRcdCAgICBkZWx0YSxcblx0XHQgICAgaGFuZGxlZENQQ291bnQsXG5cdFx0ICAgIGJhc2ljTGVuZ3RoLFxuXHRcdCAgICBiaWFzLFxuXHRcdCAgICBqLFxuXHRcdCAgICBtLFxuXHRcdCAgICBxLFxuXHRcdCAgICBrLFxuXHRcdCAgICB0LFxuXHRcdCAgICBjdXJyZW50VmFsdWUsXG5cdFx0ICAgIG91dHB1dCA9IFtdLFxuXHRcdCAgICAvKiogYGlucHV0TGVuZ3RoYCB3aWxsIGhvbGQgdGhlIG51bWJlciBvZiBjb2RlIHBvaW50cyBpbiBgaW5wdXRgLiAqL1xuXHRcdCAgICBpbnB1dExlbmd0aCxcblx0XHQgICAgLyoqIENhY2hlZCBjYWxjdWxhdGlvbiByZXN1bHRzICovXG5cdFx0ICAgIGhhbmRsZWRDUENvdW50UGx1c09uZSxcblx0XHQgICAgYmFzZU1pbnVzVCxcblx0XHQgICAgcU1pbnVzVDtcblxuXHRcdC8vIENvbnZlcnQgdGhlIGlucHV0IGluIFVDUy0yIHRvIFVuaWNvZGVcblx0XHRpbnB1dCA9IHVjczJkZWNvZGUoaW5wdXQpO1xuXG5cdFx0Ly8gQ2FjaGUgdGhlIGxlbmd0aFxuXHRcdGlucHV0TGVuZ3RoID0gaW5wdXQubGVuZ3RoO1xuXG5cdFx0Ly8gSW5pdGlhbGl6ZSB0aGUgc3RhdGVcblx0XHRuID0gaW5pdGlhbE47XG5cdFx0ZGVsdGEgPSAwO1xuXHRcdGJpYXMgPSBpbml0aWFsQmlhcztcblxuXHRcdC8vIEhhbmRsZSB0aGUgYmFzaWMgY29kZSBwb2ludHNcblx0XHRmb3IgKGogPSAwOyBqIDwgaW5wdXRMZW5ndGg7ICsraikge1xuXHRcdFx0Y3VycmVudFZhbHVlID0gaW5wdXRbal07XG5cdFx0XHRpZiAoY3VycmVudFZhbHVlIDwgMHg4MCkge1xuXHRcdFx0XHRvdXRwdXQucHVzaChzdHJpbmdGcm9tQ2hhckNvZGUoY3VycmVudFZhbHVlKSk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0aGFuZGxlZENQQ291bnQgPSBiYXNpY0xlbmd0aCA9IG91dHB1dC5sZW5ndGg7XG5cblx0XHQvLyBgaGFuZGxlZENQQ291bnRgIGlzIHRoZSBudW1iZXIgb2YgY29kZSBwb2ludHMgdGhhdCBoYXZlIGJlZW4gaGFuZGxlZDtcblx0XHQvLyBgYmFzaWNMZW5ndGhgIGlzIHRoZSBudW1iZXIgb2YgYmFzaWMgY29kZSBwb2ludHMuXG5cblx0XHQvLyBGaW5pc2ggdGhlIGJhc2ljIHN0cmluZyAtIGlmIGl0IGlzIG5vdCBlbXB0eSAtIHdpdGggYSBkZWxpbWl0ZXJcblx0XHRpZiAoYmFzaWNMZW5ndGgpIHtcblx0XHRcdG91dHB1dC5wdXNoKGRlbGltaXRlcik7XG5cdFx0fVxuXG5cdFx0Ly8gTWFpbiBlbmNvZGluZyBsb29wOlxuXHRcdHdoaWxlIChoYW5kbGVkQ1BDb3VudCA8IGlucHV0TGVuZ3RoKSB7XG5cblx0XHRcdC8vIEFsbCBub24tYmFzaWMgY29kZSBwb2ludHMgPCBuIGhhdmUgYmVlbiBoYW5kbGVkIGFscmVhZHkuIEZpbmQgdGhlIG5leHRcblx0XHRcdC8vIGxhcmdlciBvbmU6XG5cdFx0XHRmb3IgKG0gPSBtYXhJbnQsIGogPSAwOyBqIDwgaW5wdXRMZW5ndGg7ICsraikge1xuXHRcdFx0XHRjdXJyZW50VmFsdWUgPSBpbnB1dFtqXTtcblx0XHRcdFx0aWYgKGN1cnJlbnRWYWx1ZSA+PSBuICYmIGN1cnJlbnRWYWx1ZSA8IG0pIHtcblx0XHRcdFx0XHRtID0gY3VycmVudFZhbHVlO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdC8vIEluY3JlYXNlIGBkZWx0YWAgZW5vdWdoIHRvIGFkdmFuY2UgdGhlIGRlY29kZXIncyA8bixpPiBzdGF0ZSB0byA8bSwwPixcblx0XHRcdC8vIGJ1dCBndWFyZCBhZ2FpbnN0IG92ZXJmbG93XG5cdFx0XHRoYW5kbGVkQ1BDb3VudFBsdXNPbmUgPSBoYW5kbGVkQ1BDb3VudCArIDE7XG5cdFx0XHRpZiAobSAtIG4gPiBmbG9vcigobWF4SW50IC0gZGVsdGEpIC8gaGFuZGxlZENQQ291bnRQbHVzT25lKSkge1xuXHRcdFx0XHRlcnJvcignb3ZlcmZsb3cnKTtcblx0XHRcdH1cblxuXHRcdFx0ZGVsdGEgKz0gKG0gLSBuKSAqIGhhbmRsZWRDUENvdW50UGx1c09uZTtcblx0XHRcdG4gPSBtO1xuXG5cdFx0XHRmb3IgKGogPSAwOyBqIDwgaW5wdXRMZW5ndGg7ICsraikge1xuXHRcdFx0XHRjdXJyZW50VmFsdWUgPSBpbnB1dFtqXTtcblxuXHRcdFx0XHRpZiAoY3VycmVudFZhbHVlIDwgbiAmJiArK2RlbHRhID4gbWF4SW50KSB7XG5cdFx0XHRcdFx0ZXJyb3IoJ292ZXJmbG93Jyk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZiAoY3VycmVudFZhbHVlID09IG4pIHtcblx0XHRcdFx0XHQvLyBSZXByZXNlbnQgZGVsdGEgYXMgYSBnZW5lcmFsaXplZCB2YXJpYWJsZS1sZW5ndGggaW50ZWdlclxuXHRcdFx0XHRcdGZvciAocSA9IGRlbHRhLCBrID0gYmFzZTsgLyogbm8gY29uZGl0aW9uICovOyBrICs9IGJhc2UpIHtcblx0XHRcdFx0XHRcdHQgPSBrIDw9IGJpYXMgPyB0TWluIDogKGsgPj0gYmlhcyArIHRNYXggPyB0TWF4IDogayAtIGJpYXMpO1xuXHRcdFx0XHRcdFx0aWYgKHEgPCB0KSB7XG5cdFx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0cU1pbnVzVCA9IHEgLSB0O1xuXHRcdFx0XHRcdFx0YmFzZU1pbnVzVCA9IGJhc2UgLSB0O1xuXHRcdFx0XHRcdFx0b3V0cHV0LnB1c2goXG5cdFx0XHRcdFx0XHRcdHN0cmluZ0Zyb21DaGFyQ29kZShkaWdpdFRvQmFzaWModCArIHFNaW51c1QgJSBiYXNlTWludXNULCAwKSlcblx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0XHRxID0gZmxvb3IocU1pbnVzVCAvIGJhc2VNaW51c1QpO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdG91dHB1dC5wdXNoKHN0cmluZ0Zyb21DaGFyQ29kZShkaWdpdFRvQmFzaWMocSwgMCkpKTtcblx0XHRcdFx0XHRiaWFzID0gYWRhcHQoZGVsdGEsIGhhbmRsZWRDUENvdW50UGx1c09uZSwgaGFuZGxlZENQQ291bnQgPT0gYmFzaWNMZW5ndGgpO1xuXHRcdFx0XHRcdGRlbHRhID0gMDtcblx0XHRcdFx0XHQrK2hhbmRsZWRDUENvdW50O1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdCsrZGVsdGE7XG5cdFx0XHQrK247XG5cblx0XHR9XG5cdFx0cmV0dXJuIG91dHB1dC5qb2luKCcnKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBDb252ZXJ0cyBhIFB1bnljb2RlIHN0cmluZyByZXByZXNlbnRpbmcgYSBkb21haW4gbmFtZSBvciBhbiBlbWFpbCBhZGRyZXNzXG5cdCAqIHRvIFVuaWNvZGUuIE9ubHkgdGhlIFB1bnljb2RlZCBwYXJ0cyBvZiB0aGUgaW5wdXQgd2lsbCBiZSBjb252ZXJ0ZWQsIGkuZS5cblx0ICogaXQgZG9lc24ndCBtYXR0ZXIgaWYgeW91IGNhbGwgaXQgb24gYSBzdHJpbmcgdGhhdCBoYXMgYWxyZWFkeSBiZWVuXG5cdCAqIGNvbnZlcnRlZCB0byBVbmljb2RlLlxuXHQgKiBAbWVtYmVyT2YgcHVueWNvZGVcblx0ICogQHBhcmFtIHtTdHJpbmd9IGlucHV0IFRoZSBQdW55Y29kZWQgZG9tYWluIG5hbWUgb3IgZW1haWwgYWRkcmVzcyB0b1xuXHQgKiBjb252ZXJ0IHRvIFVuaWNvZGUuXG5cdCAqIEByZXR1cm5zIHtTdHJpbmd9IFRoZSBVbmljb2RlIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBnaXZlbiBQdW55Y29kZVxuXHQgKiBzdHJpbmcuXG5cdCAqL1xuXHRmdW5jdGlvbiB0b1VuaWNvZGUoaW5wdXQpIHtcblx0XHRyZXR1cm4gbWFwRG9tYWluKGlucHV0LCBmdW5jdGlvbihzdHJpbmcpIHtcblx0XHRcdHJldHVybiByZWdleFB1bnljb2RlLnRlc3Qoc3RyaW5nKVxuXHRcdFx0XHQ/IGRlY29kZShzdHJpbmcuc2xpY2UoNCkudG9Mb3dlckNhc2UoKSlcblx0XHRcdFx0OiBzdHJpbmc7XG5cdFx0fSk7XG5cdH1cblxuXHQvKipcblx0ICogQ29udmVydHMgYSBVbmljb2RlIHN0cmluZyByZXByZXNlbnRpbmcgYSBkb21haW4gbmFtZSBvciBhbiBlbWFpbCBhZGRyZXNzIHRvXG5cdCAqIFB1bnljb2RlLiBPbmx5IHRoZSBub24tQVNDSUkgcGFydHMgb2YgdGhlIGRvbWFpbiBuYW1lIHdpbGwgYmUgY29udmVydGVkLFxuXHQgKiBpLmUuIGl0IGRvZXNuJ3QgbWF0dGVyIGlmIHlvdSBjYWxsIGl0IHdpdGggYSBkb21haW4gdGhhdCdzIGFscmVhZHkgaW5cblx0ICogQVNDSUkuXG5cdCAqIEBtZW1iZXJPZiBwdW55Y29kZVxuXHQgKiBAcGFyYW0ge1N0cmluZ30gaW5wdXQgVGhlIGRvbWFpbiBuYW1lIG9yIGVtYWlsIGFkZHJlc3MgdG8gY29udmVydCwgYXMgYVxuXHQgKiBVbmljb2RlIHN0cmluZy5cblx0ICogQHJldHVybnMge1N0cmluZ30gVGhlIFB1bnljb2RlIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBnaXZlbiBkb21haW4gbmFtZSBvclxuXHQgKiBlbWFpbCBhZGRyZXNzLlxuXHQgKi9cblx0ZnVuY3Rpb24gdG9BU0NJSShpbnB1dCkge1xuXHRcdHJldHVybiBtYXBEb21haW4oaW5wdXQsIGZ1bmN0aW9uKHN0cmluZykge1xuXHRcdFx0cmV0dXJuIHJlZ2V4Tm9uQVNDSUkudGVzdChzdHJpbmcpXG5cdFx0XHRcdD8gJ3huLS0nICsgZW5jb2RlKHN0cmluZylcblx0XHRcdFx0OiBzdHJpbmc7XG5cdFx0fSk7XG5cdH1cblxuXHQvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cblxuXHQvKiogRGVmaW5lIHRoZSBwdWJsaWMgQVBJICovXG5cdHB1bnljb2RlID0ge1xuXHRcdC8qKlxuXHRcdCAqIEEgc3RyaW5nIHJlcHJlc2VudGluZyB0aGUgY3VycmVudCBQdW55Y29kZS5qcyB2ZXJzaW9uIG51bWJlci5cblx0XHQgKiBAbWVtYmVyT2YgcHVueWNvZGVcblx0XHQgKiBAdHlwZSBTdHJpbmdcblx0XHQgKi9cblx0XHQndmVyc2lvbic6ICcxLjMuMicsXG5cdFx0LyoqXG5cdFx0ICogQW4gb2JqZWN0IG9mIG1ldGhvZHMgdG8gY29udmVydCBmcm9tIEphdmFTY3JpcHQncyBpbnRlcm5hbCBjaGFyYWN0ZXJcblx0XHQgKiByZXByZXNlbnRhdGlvbiAoVUNTLTIpIHRvIFVuaWNvZGUgY29kZSBwb2ludHMsIGFuZCBiYWNrLlxuXHRcdCAqIEBzZWUgPGh0dHBzOi8vbWF0aGlhc2J5bmVucy5iZS9ub3Rlcy9qYXZhc2NyaXB0LWVuY29kaW5nPlxuXHRcdCAqIEBtZW1iZXJPZiBwdW55Y29kZVxuXHRcdCAqIEB0eXBlIE9iamVjdFxuXHRcdCAqL1xuXHRcdCd1Y3MyJzoge1xuXHRcdFx0J2RlY29kZSc6IHVjczJkZWNvZGUsXG5cdFx0XHQnZW5jb2RlJzogdWNzMmVuY29kZVxuXHRcdH0sXG5cdFx0J2RlY29kZSc6IGRlY29kZSxcblx0XHQnZW5jb2RlJzogZW5jb2RlLFxuXHRcdCd0b0FTQ0lJJzogdG9BU0NJSSxcblx0XHQndG9Vbmljb2RlJzogdG9Vbmljb2RlXG5cdH07XG5cblx0LyoqIEV4cG9zZSBgcHVueWNvZGVgICovXG5cdC8vIFNvbWUgQU1EIGJ1aWxkIG9wdGltaXplcnMsIGxpa2Ugci5qcywgY2hlY2sgZm9yIHNwZWNpZmljIGNvbmRpdGlvbiBwYXR0ZXJuc1xuXHQvLyBsaWtlIHRoZSBmb2xsb3dpbmc6XG5cdGlmIChcblx0XHR0eXBlb2YgZGVmaW5lID09ICdmdW5jdGlvbicgJiZcblx0XHR0eXBlb2YgZGVmaW5lLmFtZCA9PSAnb2JqZWN0JyAmJlxuXHRcdGRlZmluZS5hbWRcblx0KSB7XG5cdFx0ZGVmaW5lKCdwdW55Y29kZScsIGZ1bmN0aW9uKCkge1xuXHRcdFx0cmV0dXJuIHB1bnljb2RlO1xuXHRcdH0pO1xuXHR9IGVsc2UgaWYgKGZyZWVFeHBvcnRzICYmIGZyZWVNb2R1bGUpIHtcblx0XHRpZiAobW9kdWxlLmV4cG9ydHMgPT0gZnJlZUV4cG9ydHMpIHtcblx0XHRcdC8vIGluIE5vZGUuanMsIGlvLmpzLCBvciBSaW5nb0pTIHYwLjguMCtcblx0XHRcdGZyZWVNb2R1bGUuZXhwb3J0cyA9IHB1bnljb2RlO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHQvLyBpbiBOYXJ3aGFsIG9yIFJpbmdvSlMgdjAuNy4wLVxuXHRcdFx0Zm9yIChrZXkgaW4gcHVueWNvZGUpIHtcblx0XHRcdFx0cHVueWNvZGUuaGFzT3duUHJvcGVydHkoa2V5KSAmJiAoZnJlZUV4cG9ydHNba2V5XSA9IHB1bnljb2RlW2tleV0pO1xuXHRcdFx0fVxuXHRcdH1cblx0fSBlbHNlIHtcblx0XHQvLyBpbiBSaGlubyBvciBhIHdlYiBicm93c2VyXG5cdFx0cm9vdC5wdW55Y29kZSA9IHB1bnljb2RlO1xuXHR9XG5cbn0odGhpcykpO1xuIiwiLy8gQ29weXJpZ2h0IEpveWVudCwgSW5jLiBhbmQgb3RoZXIgTm9kZSBjb250cmlidXRvcnMuXG4vL1xuLy8gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGFcbi8vIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGVcbi8vIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZ1xuLy8gd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLFxuLy8gZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdFxuLy8gcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlXG4vLyBmb2xsb3dpbmcgY29uZGl0aW9uczpcbi8vXG4vLyBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZFxuLy8gaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4vL1xuLy8gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTU1xuLy8gT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRlxuLy8gTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTlxuLy8gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sXG4vLyBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1Jcbi8vIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEVcbi8vIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG5cbid1c2Ugc3RyaWN0JztcblxuLy8gSWYgb2JqLmhhc093blByb3BlcnR5IGhhcyBiZWVuIG92ZXJyaWRkZW4sIHRoZW4gY2FsbGluZ1xuLy8gb2JqLmhhc093blByb3BlcnR5KHByb3ApIHdpbGwgYnJlYWsuXG4vLyBTZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9qb3llbnQvbm9kZS9pc3N1ZXMvMTcwN1xuZnVuY3Rpb24gaGFzT3duUHJvcGVydHkob2JqLCBwcm9wKSB7XG4gIHJldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqLCBwcm9wKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihxcywgc2VwLCBlcSwgb3B0aW9ucykge1xuICBzZXAgPSBzZXAgfHwgJyYnO1xuICBlcSA9IGVxIHx8ICc9JztcbiAgdmFyIG9iaiA9IHt9O1xuXG4gIGlmICh0eXBlb2YgcXMgIT09ICdzdHJpbmcnIHx8IHFzLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiBvYmo7XG4gIH1cblxuICB2YXIgcmVnZXhwID0gL1xcKy9nO1xuICBxcyA9IHFzLnNwbGl0KHNlcCk7XG5cbiAgdmFyIG1heEtleXMgPSAxMDAwO1xuICBpZiAob3B0aW9ucyAmJiB0eXBlb2Ygb3B0aW9ucy5tYXhLZXlzID09PSAnbnVtYmVyJykge1xuICAgIG1heEtleXMgPSBvcHRpb25zLm1heEtleXM7XG4gIH1cblxuICB2YXIgbGVuID0gcXMubGVuZ3RoO1xuICAvLyBtYXhLZXlzIDw9IDAgbWVhbnMgdGhhdCB3ZSBzaG91bGQgbm90IGxpbWl0IGtleXMgY291bnRcbiAgaWYgKG1heEtleXMgPiAwICYmIGxlbiA+IG1heEtleXMpIHtcbiAgICBsZW4gPSBtYXhLZXlzO1xuICB9XG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47ICsraSkge1xuICAgIHZhciB4ID0gcXNbaV0ucmVwbGFjZShyZWdleHAsICclMjAnKSxcbiAgICAgICAgaWR4ID0geC5pbmRleE9mKGVxKSxcbiAgICAgICAga3N0ciwgdnN0ciwgaywgdjtcblxuICAgIGlmIChpZHggPj0gMCkge1xuICAgICAga3N0ciA9IHguc3Vic3RyKDAsIGlkeCk7XG4gICAgICB2c3RyID0geC5zdWJzdHIoaWR4ICsgMSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGtzdHIgPSB4O1xuICAgICAgdnN0ciA9ICcnO1xuICAgIH1cblxuICAgIGsgPSBkZWNvZGVVUklDb21wb25lbnQoa3N0cik7XG4gICAgdiA9IGRlY29kZVVSSUNvbXBvbmVudCh2c3RyKTtcblxuICAgIGlmICghaGFzT3duUHJvcGVydHkob2JqLCBrKSkge1xuICAgICAgb2JqW2tdID0gdjtcbiAgICB9IGVsc2UgaWYgKGlzQXJyYXkob2JqW2tdKSkge1xuICAgICAgb2JqW2tdLnB1c2godik7XG4gICAgfSBlbHNlIHtcbiAgICAgIG9ialtrXSA9IFtvYmpba10sIHZdO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBvYmo7XG59O1xuXG52YXIgaXNBcnJheSA9IEFycmF5LmlzQXJyYXkgfHwgZnVuY3Rpb24gKHhzKSB7XG4gIHJldHVybiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoeHMpID09PSAnW29iamVjdCBBcnJheV0nO1xufTtcbiIsIi8vIENvcHlyaWdodCBKb3llbnQsIEluYy4gYW5kIG90aGVyIE5vZGUgY29udHJpYnV0b3JzLlxuLy9cbi8vIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhXG4vLyBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlXG4vLyBcIlNvZnR3YXJlXCIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmdcbi8vIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCxcbi8vIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXRcbi8vIHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZVxuLy8gZm9sbG93aW5nIGNvbmRpdGlvbnM6XG4vL1xuLy8gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWRcbi8vIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuLy9cbi8vIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1Ncbi8vIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0Zcbi8vIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU5cbi8vIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLFxuLy8gREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SXG4vLyBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFXG4vLyBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLlxuXG4ndXNlIHN0cmljdCc7XG5cbnZhciBzdHJpbmdpZnlQcmltaXRpdmUgPSBmdW5jdGlvbih2KSB7XG4gIHN3aXRjaCAodHlwZW9mIHYpIHtcbiAgICBjYXNlICdzdHJpbmcnOlxuICAgICAgcmV0dXJuIHY7XG5cbiAgICBjYXNlICdib29sZWFuJzpcbiAgICAgIHJldHVybiB2ID8gJ3RydWUnIDogJ2ZhbHNlJztcblxuICAgIGNhc2UgJ251bWJlcic6XG4gICAgICByZXR1cm4gaXNGaW5pdGUodikgPyB2IDogJyc7XG5cbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuICcnO1xuICB9XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKG9iaiwgc2VwLCBlcSwgbmFtZSkge1xuICBzZXAgPSBzZXAgfHwgJyYnO1xuICBlcSA9IGVxIHx8ICc9JztcbiAgaWYgKG9iaiA9PT0gbnVsbCkge1xuICAgIG9iaiA9IHVuZGVmaW5lZDtcbiAgfVxuXG4gIGlmICh0eXBlb2Ygb2JqID09PSAnb2JqZWN0Jykge1xuICAgIHJldHVybiBtYXAob2JqZWN0S2V5cyhvYmopLCBmdW5jdGlvbihrKSB7XG4gICAgICB2YXIga3MgPSBlbmNvZGVVUklDb21wb25lbnQoc3RyaW5naWZ5UHJpbWl0aXZlKGspKSArIGVxO1xuICAgICAgaWYgKGlzQXJyYXkob2JqW2tdKSkge1xuICAgICAgICByZXR1cm4gbWFwKG9ialtrXSwgZnVuY3Rpb24odikge1xuICAgICAgICAgIHJldHVybiBrcyArIGVuY29kZVVSSUNvbXBvbmVudChzdHJpbmdpZnlQcmltaXRpdmUodikpO1xuICAgICAgICB9KS5qb2luKHNlcCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4ga3MgKyBlbmNvZGVVUklDb21wb25lbnQoc3RyaW5naWZ5UHJpbWl0aXZlKG9ialtrXSkpO1xuICAgICAgfVxuICAgIH0pLmpvaW4oc2VwKTtcblxuICB9XG5cbiAgaWYgKCFuYW1lKSByZXR1cm4gJyc7XG4gIHJldHVybiBlbmNvZGVVUklDb21wb25lbnQoc3RyaW5naWZ5UHJpbWl0aXZlKG5hbWUpKSArIGVxICtcbiAgICAgICAgIGVuY29kZVVSSUNvbXBvbmVudChzdHJpbmdpZnlQcmltaXRpdmUob2JqKSk7XG59O1xuXG52YXIgaXNBcnJheSA9IEFycmF5LmlzQXJyYXkgfHwgZnVuY3Rpb24gKHhzKSB7XG4gIHJldHVybiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoeHMpID09PSAnW29iamVjdCBBcnJheV0nO1xufTtcblxuZnVuY3Rpb24gbWFwICh4cywgZikge1xuICBpZiAoeHMubWFwKSByZXR1cm4geHMubWFwKGYpO1xuICB2YXIgcmVzID0gW107XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgeHMubGVuZ3RoOyBpKyspIHtcbiAgICByZXMucHVzaChmKHhzW2ldLCBpKSk7XG4gIH1cbiAgcmV0dXJuIHJlcztcbn1cblxudmFyIG9iamVjdEtleXMgPSBPYmplY3Qua2V5cyB8fCBmdW5jdGlvbiAob2JqKSB7XG4gIHZhciByZXMgPSBbXTtcbiAgZm9yICh2YXIga2V5IGluIG9iaikge1xuICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqLCBrZXkpKSByZXMucHVzaChrZXkpO1xuICB9XG4gIHJldHVybiByZXM7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG5leHBvcnRzLmRlY29kZSA9IGV4cG9ydHMucGFyc2UgPSByZXF1aXJlKCcuL2RlY29kZScpO1xuZXhwb3J0cy5lbmNvZGUgPSBleHBvcnRzLnN0cmluZ2lmeSA9IHJlcXVpcmUoJy4vZW5jb2RlJyk7XG4iLCIvLyBDb3B5cmlnaHQgSm95ZW50LCBJbmMuIGFuZCBvdGhlciBOb2RlIGNvbnRyaWJ1dG9ycy5cbi8vXG4vLyBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYVxuLy8gY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZVxuLy8gXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nXG4vLyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsXG4vLyBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0XG4vLyBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGVcbi8vIGZvbGxvd2luZyBjb25kaXRpb25zOlxuLy9cbi8vIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkXG4vLyBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbi8vXG4vLyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTXG4vLyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GXG4vLyBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOXG4vLyBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSxcbi8vIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUlxuLy8gT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRVxuLy8gVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cblxudmFyIHB1bnljb2RlID0gcmVxdWlyZSgncHVueWNvZGUnKTtcblxuZXhwb3J0cy5wYXJzZSA9IHVybFBhcnNlO1xuZXhwb3J0cy5yZXNvbHZlID0gdXJsUmVzb2x2ZTtcbmV4cG9ydHMucmVzb2x2ZU9iamVjdCA9IHVybFJlc29sdmVPYmplY3Q7XG5leHBvcnRzLmZvcm1hdCA9IHVybEZvcm1hdDtcblxuZXhwb3J0cy5VcmwgPSBVcmw7XG5cbmZ1bmN0aW9uIFVybCgpIHtcbiAgdGhpcy5wcm90b2NvbCA9IG51bGw7XG4gIHRoaXMuc2xhc2hlcyA9IG51bGw7XG4gIHRoaXMuYXV0aCA9IG51bGw7XG4gIHRoaXMuaG9zdCA9IG51bGw7XG4gIHRoaXMucG9ydCA9IG51bGw7XG4gIHRoaXMuaG9zdG5hbWUgPSBudWxsO1xuICB0aGlzLmhhc2ggPSBudWxsO1xuICB0aGlzLnNlYXJjaCA9IG51bGw7XG4gIHRoaXMucXVlcnkgPSBudWxsO1xuICB0aGlzLnBhdGhuYW1lID0gbnVsbDtcbiAgdGhpcy5wYXRoID0gbnVsbDtcbiAgdGhpcy5ocmVmID0gbnVsbDtcbn1cblxuLy8gUmVmZXJlbmNlOiBSRkMgMzk4NiwgUkZDIDE4MDgsIFJGQyAyMzk2XG5cbi8vIGRlZmluZSB0aGVzZSBoZXJlIHNvIGF0IGxlYXN0IHRoZXkgb25seSBoYXZlIHRvIGJlXG4vLyBjb21waWxlZCBvbmNlIG9uIHRoZSBmaXJzdCBtb2R1bGUgbG9hZC5cbnZhciBwcm90b2NvbFBhdHRlcm4gPSAvXihbYS16MC05ListXSs6KS9pLFxuICAgIHBvcnRQYXR0ZXJuID0gLzpbMC05XSokLyxcblxuICAgIC8vIFJGQyAyMzk2OiBjaGFyYWN0ZXJzIHJlc2VydmVkIGZvciBkZWxpbWl0aW5nIFVSTHMuXG4gICAgLy8gV2UgYWN0dWFsbHkganVzdCBhdXRvLWVzY2FwZSB0aGVzZS5cbiAgICBkZWxpbXMgPSBbJzwnLCAnPicsICdcIicsICdgJywgJyAnLCAnXFxyJywgJ1xcbicsICdcXHQnXSxcblxuICAgIC8vIFJGQyAyMzk2OiBjaGFyYWN0ZXJzIG5vdCBhbGxvd2VkIGZvciB2YXJpb3VzIHJlYXNvbnMuXG4gICAgdW53aXNlID0gWyd7JywgJ30nLCAnfCcsICdcXFxcJywgJ14nLCAnYCddLmNvbmNhdChkZWxpbXMpLFxuXG4gICAgLy8gQWxsb3dlZCBieSBSRkNzLCBidXQgY2F1c2Ugb2YgWFNTIGF0dGFja3MuICBBbHdheXMgZXNjYXBlIHRoZXNlLlxuICAgIGF1dG9Fc2NhcGUgPSBbJ1xcJyddLmNvbmNhdCh1bndpc2UpLFxuICAgIC8vIENoYXJhY3RlcnMgdGhhdCBhcmUgbmV2ZXIgZXZlciBhbGxvd2VkIGluIGEgaG9zdG5hbWUuXG4gICAgLy8gTm90ZSB0aGF0IGFueSBpbnZhbGlkIGNoYXJzIGFyZSBhbHNvIGhhbmRsZWQsIGJ1dCB0aGVzZVxuICAgIC8vIGFyZSB0aGUgb25lcyB0aGF0IGFyZSAqZXhwZWN0ZWQqIHRvIGJlIHNlZW4sIHNvIHdlIGZhc3QtcGF0aFxuICAgIC8vIHRoZW0uXG4gICAgbm9uSG9zdENoYXJzID0gWyclJywgJy8nLCAnPycsICc7JywgJyMnXS5jb25jYXQoYXV0b0VzY2FwZSksXG4gICAgaG9zdEVuZGluZ0NoYXJzID0gWycvJywgJz8nLCAnIyddLFxuICAgIGhvc3RuYW1lTWF4TGVuID0gMjU1LFxuICAgIGhvc3RuYW1lUGFydFBhdHRlcm4gPSAvXlthLXowLTlBLVpfLV17MCw2M30kLyxcbiAgICBob3N0bmFtZVBhcnRTdGFydCA9IC9eKFthLXowLTlBLVpfLV17MCw2M30pKC4qKSQvLFxuICAgIC8vIHByb3RvY29scyB0aGF0IGNhbiBhbGxvdyBcInVuc2FmZVwiIGFuZCBcInVud2lzZVwiIGNoYXJzLlxuICAgIHVuc2FmZVByb3RvY29sID0ge1xuICAgICAgJ2phdmFzY3JpcHQnOiB0cnVlLFxuICAgICAgJ2phdmFzY3JpcHQ6JzogdHJ1ZVxuICAgIH0sXG4gICAgLy8gcHJvdG9jb2xzIHRoYXQgbmV2ZXIgaGF2ZSBhIGhvc3RuYW1lLlxuICAgIGhvc3RsZXNzUHJvdG9jb2wgPSB7XG4gICAgICAnamF2YXNjcmlwdCc6IHRydWUsXG4gICAgICAnamF2YXNjcmlwdDonOiB0cnVlXG4gICAgfSxcbiAgICAvLyBwcm90b2NvbHMgdGhhdCBhbHdheXMgY29udGFpbiBhIC8vIGJpdC5cbiAgICBzbGFzaGVkUHJvdG9jb2wgPSB7XG4gICAgICAnaHR0cCc6IHRydWUsXG4gICAgICAnaHR0cHMnOiB0cnVlLFxuICAgICAgJ2Z0cCc6IHRydWUsXG4gICAgICAnZ29waGVyJzogdHJ1ZSxcbiAgICAgICdmaWxlJzogdHJ1ZSxcbiAgICAgICdodHRwOic6IHRydWUsXG4gICAgICAnaHR0cHM6JzogdHJ1ZSxcbiAgICAgICdmdHA6JzogdHJ1ZSxcbiAgICAgICdnb3BoZXI6JzogdHJ1ZSxcbiAgICAgICdmaWxlOic6IHRydWVcbiAgICB9LFxuICAgIHF1ZXJ5c3RyaW5nID0gcmVxdWlyZSgncXVlcnlzdHJpbmcnKTtcblxuZnVuY3Rpb24gdXJsUGFyc2UodXJsLCBwYXJzZVF1ZXJ5U3RyaW5nLCBzbGFzaGVzRGVub3RlSG9zdCkge1xuICBpZiAodXJsICYmIGlzT2JqZWN0KHVybCkgJiYgdXJsIGluc3RhbmNlb2YgVXJsKSByZXR1cm4gdXJsO1xuXG4gIHZhciB1ID0gbmV3IFVybDtcbiAgdS5wYXJzZSh1cmwsIHBhcnNlUXVlcnlTdHJpbmcsIHNsYXNoZXNEZW5vdGVIb3N0KTtcbiAgcmV0dXJuIHU7XG59XG5cblVybC5wcm90b3R5cGUucGFyc2UgPSBmdW5jdGlvbih1cmwsIHBhcnNlUXVlcnlTdHJpbmcsIHNsYXNoZXNEZW5vdGVIb3N0KSB7XG4gIGlmICghaXNTdHJpbmcodXJsKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJQYXJhbWV0ZXIgJ3VybCcgbXVzdCBiZSBhIHN0cmluZywgbm90IFwiICsgdHlwZW9mIHVybCk7XG4gIH1cblxuICB2YXIgcmVzdCA9IHVybDtcblxuICAvLyB0cmltIGJlZm9yZSBwcm9jZWVkaW5nLlxuICAvLyBUaGlzIGlzIHRvIHN1cHBvcnQgcGFyc2Ugc3R1ZmYgbGlrZSBcIiAgaHR0cDovL2Zvby5jb20gIFxcblwiXG4gIHJlc3QgPSByZXN0LnRyaW0oKTtcblxuICB2YXIgcHJvdG8gPSBwcm90b2NvbFBhdHRlcm4uZXhlYyhyZXN0KTtcbiAgaWYgKHByb3RvKSB7XG4gICAgcHJvdG8gPSBwcm90b1swXTtcbiAgICB2YXIgbG93ZXJQcm90byA9IHByb3RvLnRvTG93ZXJDYXNlKCk7XG4gICAgdGhpcy5wcm90b2NvbCA9IGxvd2VyUHJvdG87XG4gICAgcmVzdCA9IHJlc3Quc3Vic3RyKHByb3RvLmxlbmd0aCk7XG4gIH1cblxuICAvLyBmaWd1cmUgb3V0IGlmIGl0J3MgZ290IGEgaG9zdFxuICAvLyB1c2VyQHNlcnZlciBpcyAqYWx3YXlzKiBpbnRlcnByZXRlZCBhcyBhIGhvc3RuYW1lLCBhbmQgdXJsXG4gIC8vIHJlc29sdXRpb24gd2lsbCB0cmVhdCAvL2Zvby9iYXIgYXMgaG9zdD1mb28scGF0aD1iYXIgYmVjYXVzZSB0aGF0J3NcbiAgLy8gaG93IHRoZSBicm93c2VyIHJlc29sdmVzIHJlbGF0aXZlIFVSTHMuXG4gIGlmIChzbGFzaGVzRGVub3RlSG9zdCB8fCBwcm90byB8fCByZXN0Lm1hdGNoKC9eXFwvXFwvW15AXFwvXStAW15AXFwvXSsvKSkge1xuICAgIHZhciBzbGFzaGVzID0gcmVzdC5zdWJzdHIoMCwgMikgPT09ICcvLyc7XG4gICAgaWYgKHNsYXNoZXMgJiYgIShwcm90byAmJiBob3N0bGVzc1Byb3RvY29sW3Byb3RvXSkpIHtcbiAgICAgIHJlc3QgPSByZXN0LnN1YnN0cigyKTtcbiAgICAgIHRoaXMuc2xhc2hlcyA9IHRydWU7XG4gICAgfVxuICB9XG5cbiAgaWYgKCFob3N0bGVzc1Byb3RvY29sW3Byb3RvXSAmJlxuICAgICAgKHNsYXNoZXMgfHwgKHByb3RvICYmICFzbGFzaGVkUHJvdG9jb2xbcHJvdG9dKSkpIHtcblxuICAgIC8vIHRoZXJlJ3MgYSBob3N0bmFtZS5cbiAgICAvLyB0aGUgZmlyc3QgaW5zdGFuY2Ugb2YgLywgPywgOywgb3IgIyBlbmRzIHRoZSBob3N0LlxuICAgIC8vXG4gICAgLy8gSWYgdGhlcmUgaXMgYW4gQCBpbiB0aGUgaG9zdG5hbWUsIHRoZW4gbm9uLWhvc3QgY2hhcnMgKmFyZSogYWxsb3dlZFxuICAgIC8vIHRvIHRoZSBsZWZ0IG9mIHRoZSBsYXN0IEAgc2lnbiwgdW5sZXNzIHNvbWUgaG9zdC1lbmRpbmcgY2hhcmFjdGVyXG4gICAgLy8gY29tZXMgKmJlZm9yZSogdGhlIEAtc2lnbi5cbiAgICAvLyBVUkxzIGFyZSBvYm5veGlvdXMuXG4gICAgLy9cbiAgICAvLyBleDpcbiAgICAvLyBodHRwOi8vYUBiQGMvID0+IHVzZXI6YUBiIGhvc3Q6Y1xuICAgIC8vIGh0dHA6Ly9hQGI/QGMgPT4gdXNlcjphIGhvc3Q6YyBwYXRoOi8/QGNcblxuICAgIC8vIHYwLjEyIFRPRE8oaXNhYWNzKTogVGhpcyBpcyBub3QgcXVpdGUgaG93IENocm9tZSBkb2VzIHRoaW5ncy5cbiAgICAvLyBSZXZpZXcgb3VyIHRlc3QgY2FzZSBhZ2FpbnN0IGJyb3dzZXJzIG1vcmUgY29tcHJlaGVuc2l2ZWx5LlxuXG4gICAgLy8gZmluZCB0aGUgZmlyc3QgaW5zdGFuY2Ugb2YgYW55IGhvc3RFbmRpbmdDaGFyc1xuICAgIHZhciBob3N0RW5kID0gLTE7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBob3N0RW5kaW5nQ2hhcnMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBoZWMgPSByZXN0LmluZGV4T2YoaG9zdEVuZGluZ0NoYXJzW2ldKTtcbiAgICAgIGlmIChoZWMgIT09IC0xICYmIChob3N0RW5kID09PSAtMSB8fCBoZWMgPCBob3N0RW5kKSlcbiAgICAgICAgaG9zdEVuZCA9IGhlYztcbiAgICB9XG5cbiAgICAvLyBhdCB0aGlzIHBvaW50LCBlaXRoZXIgd2UgaGF2ZSBhbiBleHBsaWNpdCBwb2ludCB3aGVyZSB0aGVcbiAgICAvLyBhdXRoIHBvcnRpb24gY2Fubm90IGdvIHBhc3QsIG9yIHRoZSBsYXN0IEAgY2hhciBpcyB0aGUgZGVjaWRlci5cbiAgICB2YXIgYXV0aCwgYXRTaWduO1xuICAgIGlmIChob3N0RW5kID09PSAtMSkge1xuICAgICAgLy8gYXRTaWduIGNhbiBiZSBhbnl3aGVyZS5cbiAgICAgIGF0U2lnbiA9IHJlc3QubGFzdEluZGV4T2YoJ0AnKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gYXRTaWduIG11c3QgYmUgaW4gYXV0aCBwb3J0aW9uLlxuICAgICAgLy8gaHR0cDovL2FAYi9jQGQgPT4gaG9zdDpiIGF1dGg6YSBwYXRoOi9jQGRcbiAgICAgIGF0U2lnbiA9IHJlc3QubGFzdEluZGV4T2YoJ0AnLCBob3N0RW5kKTtcbiAgICB9XG5cbiAgICAvLyBOb3cgd2UgaGF2ZSBhIHBvcnRpb24gd2hpY2ggaXMgZGVmaW5pdGVseSB0aGUgYXV0aC5cbiAgICAvLyBQdWxsIHRoYXQgb2ZmLlxuICAgIGlmIChhdFNpZ24gIT09IC0xKSB7XG4gICAgICBhdXRoID0gcmVzdC5zbGljZSgwLCBhdFNpZ24pO1xuICAgICAgcmVzdCA9IHJlc3Quc2xpY2UoYXRTaWduICsgMSk7XG4gICAgICB0aGlzLmF1dGggPSBkZWNvZGVVUklDb21wb25lbnQoYXV0aCk7XG4gICAgfVxuXG4gICAgLy8gdGhlIGhvc3QgaXMgdGhlIHJlbWFpbmluZyB0byB0aGUgbGVmdCBvZiB0aGUgZmlyc3Qgbm9uLWhvc3QgY2hhclxuICAgIGhvc3RFbmQgPSAtMTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG5vbkhvc3RDaGFycy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGhlYyA9IHJlc3QuaW5kZXhPZihub25Ib3N0Q2hhcnNbaV0pO1xuICAgICAgaWYgKGhlYyAhPT0gLTEgJiYgKGhvc3RFbmQgPT09IC0xIHx8IGhlYyA8IGhvc3RFbmQpKVxuICAgICAgICBob3N0RW5kID0gaGVjO1xuICAgIH1cbiAgICAvLyBpZiB3ZSBzdGlsbCBoYXZlIG5vdCBoaXQgaXQsIHRoZW4gdGhlIGVudGlyZSB0aGluZyBpcyBhIGhvc3QuXG4gICAgaWYgKGhvc3RFbmQgPT09IC0xKVxuICAgICAgaG9zdEVuZCA9IHJlc3QubGVuZ3RoO1xuXG4gICAgdGhpcy5ob3N0ID0gcmVzdC5zbGljZSgwLCBob3N0RW5kKTtcbiAgICByZXN0ID0gcmVzdC5zbGljZShob3N0RW5kKTtcblxuICAgIC8vIHB1bGwgb3V0IHBvcnQuXG4gICAgdGhpcy5wYXJzZUhvc3QoKTtcblxuICAgIC8vIHdlJ3ZlIGluZGljYXRlZCB0aGF0IHRoZXJlIGlzIGEgaG9zdG5hbWUsXG4gICAgLy8gc28gZXZlbiBpZiBpdCdzIGVtcHR5LCBpdCBoYXMgdG8gYmUgcHJlc2VudC5cbiAgICB0aGlzLmhvc3RuYW1lID0gdGhpcy5ob3N0bmFtZSB8fCAnJztcblxuICAgIC8vIGlmIGhvc3RuYW1lIGJlZ2lucyB3aXRoIFsgYW5kIGVuZHMgd2l0aCBdXG4gICAgLy8gYXNzdW1lIHRoYXQgaXQncyBhbiBJUHY2IGFkZHJlc3MuXG4gICAgdmFyIGlwdjZIb3N0bmFtZSA9IHRoaXMuaG9zdG5hbWVbMF0gPT09ICdbJyAmJlxuICAgICAgICB0aGlzLmhvc3RuYW1lW3RoaXMuaG9zdG5hbWUubGVuZ3RoIC0gMV0gPT09ICddJztcblxuICAgIC8vIHZhbGlkYXRlIGEgbGl0dGxlLlxuICAgIGlmICghaXB2Nkhvc3RuYW1lKSB7XG4gICAgICB2YXIgaG9zdHBhcnRzID0gdGhpcy5ob3N0bmFtZS5zcGxpdCgvXFwuLyk7XG4gICAgICBmb3IgKHZhciBpID0gMCwgbCA9IGhvc3RwYXJ0cy5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICAgICAgdmFyIHBhcnQgPSBob3N0cGFydHNbaV07XG4gICAgICAgIGlmICghcGFydCkgY29udGludWU7XG4gICAgICAgIGlmICghcGFydC5tYXRjaChob3N0bmFtZVBhcnRQYXR0ZXJuKSkge1xuICAgICAgICAgIHZhciBuZXdwYXJ0ID0gJyc7XG4gICAgICAgICAgZm9yICh2YXIgaiA9IDAsIGsgPSBwYXJ0Lmxlbmd0aDsgaiA8IGs7IGorKykge1xuICAgICAgICAgICAgaWYgKHBhcnQuY2hhckNvZGVBdChqKSA+IDEyNykge1xuICAgICAgICAgICAgICAvLyB3ZSByZXBsYWNlIG5vbi1BU0NJSSBjaGFyIHdpdGggYSB0ZW1wb3JhcnkgcGxhY2Vob2xkZXJcbiAgICAgICAgICAgICAgLy8gd2UgbmVlZCB0aGlzIHRvIG1ha2Ugc3VyZSBzaXplIG9mIGhvc3RuYW1lIGlzIG5vdFxuICAgICAgICAgICAgICAvLyBicm9rZW4gYnkgcmVwbGFjaW5nIG5vbi1BU0NJSSBieSBub3RoaW5nXG4gICAgICAgICAgICAgIG5ld3BhcnQgKz0gJ3gnO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgbmV3cGFydCArPSBwYXJ0W2pdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICAvLyB3ZSB0ZXN0IGFnYWluIHdpdGggQVNDSUkgY2hhciBvbmx5XG4gICAgICAgICAgaWYgKCFuZXdwYXJ0Lm1hdGNoKGhvc3RuYW1lUGFydFBhdHRlcm4pKSB7XG4gICAgICAgICAgICB2YXIgdmFsaWRQYXJ0cyA9IGhvc3RwYXJ0cy5zbGljZSgwLCBpKTtcbiAgICAgICAgICAgIHZhciBub3RIb3N0ID0gaG9zdHBhcnRzLnNsaWNlKGkgKyAxKTtcbiAgICAgICAgICAgIHZhciBiaXQgPSBwYXJ0Lm1hdGNoKGhvc3RuYW1lUGFydFN0YXJ0KTtcbiAgICAgICAgICAgIGlmIChiaXQpIHtcbiAgICAgICAgICAgICAgdmFsaWRQYXJ0cy5wdXNoKGJpdFsxXSk7XG4gICAgICAgICAgICAgIG5vdEhvc3QudW5zaGlmdChiaXRbMl0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKG5vdEhvc3QubGVuZ3RoKSB7XG4gICAgICAgICAgICAgIHJlc3QgPSAnLycgKyBub3RIb3N0LmpvaW4oJy4nKSArIHJlc3Q7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmhvc3RuYW1lID0gdmFsaWRQYXJ0cy5qb2luKCcuJyk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodGhpcy5ob3N0bmFtZS5sZW5ndGggPiBob3N0bmFtZU1heExlbikge1xuICAgICAgdGhpcy5ob3N0bmFtZSA9ICcnO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBob3N0bmFtZXMgYXJlIGFsd2F5cyBsb3dlciBjYXNlLlxuICAgICAgdGhpcy5ob3N0bmFtZSA9IHRoaXMuaG9zdG5hbWUudG9Mb3dlckNhc2UoKTtcbiAgICB9XG5cbiAgICBpZiAoIWlwdjZIb3N0bmFtZSkge1xuICAgICAgLy8gSUROQSBTdXBwb3J0OiBSZXR1cm5zIGEgcHVueSBjb2RlZCByZXByZXNlbnRhdGlvbiBvZiBcImRvbWFpblwiLlxuICAgICAgLy8gSXQgb25seSBjb252ZXJ0cyB0aGUgcGFydCBvZiB0aGUgZG9tYWluIG5hbWUgdGhhdFxuICAgICAgLy8gaGFzIG5vbiBBU0NJSSBjaGFyYWN0ZXJzLiBJLmUuIGl0IGRvc2VudCBtYXR0ZXIgaWZcbiAgICAgIC8vIHlvdSBjYWxsIGl0IHdpdGggYSBkb21haW4gdGhhdCBhbHJlYWR5IGlzIGluIEFTQ0lJLlxuICAgICAgdmFyIGRvbWFpbkFycmF5ID0gdGhpcy5ob3N0bmFtZS5zcGxpdCgnLicpO1xuICAgICAgdmFyIG5ld091dCA9IFtdO1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBkb21haW5BcnJheS5sZW5ndGg7ICsraSkge1xuICAgICAgICB2YXIgcyA9IGRvbWFpbkFycmF5W2ldO1xuICAgICAgICBuZXdPdXQucHVzaChzLm1hdGNoKC9bXkEtWmEtejAtOV8tXS8pID9cbiAgICAgICAgICAgICd4bi0tJyArIHB1bnljb2RlLmVuY29kZShzKSA6IHMpO1xuICAgICAgfVxuICAgICAgdGhpcy5ob3N0bmFtZSA9IG5ld091dC5qb2luKCcuJyk7XG4gICAgfVxuXG4gICAgdmFyIHAgPSB0aGlzLnBvcnQgPyAnOicgKyB0aGlzLnBvcnQgOiAnJztcbiAgICB2YXIgaCA9IHRoaXMuaG9zdG5hbWUgfHwgJyc7XG4gICAgdGhpcy5ob3N0ID0gaCArIHA7XG4gICAgdGhpcy5ocmVmICs9IHRoaXMuaG9zdDtcblxuICAgIC8vIHN0cmlwIFsgYW5kIF0gZnJvbSB0aGUgaG9zdG5hbWVcbiAgICAvLyB0aGUgaG9zdCBmaWVsZCBzdGlsbCByZXRhaW5zIHRoZW0sIHRob3VnaFxuICAgIGlmIChpcHY2SG9zdG5hbWUpIHtcbiAgICAgIHRoaXMuaG9zdG5hbWUgPSB0aGlzLmhvc3RuYW1lLnN1YnN0cigxLCB0aGlzLmhvc3RuYW1lLmxlbmd0aCAtIDIpO1xuICAgICAgaWYgKHJlc3RbMF0gIT09ICcvJykge1xuICAgICAgICByZXN0ID0gJy8nICsgcmVzdDtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyBub3cgcmVzdCBpcyBzZXQgdG8gdGhlIHBvc3QtaG9zdCBzdHVmZi5cbiAgLy8gY2hvcCBvZmYgYW55IGRlbGltIGNoYXJzLlxuICBpZiAoIXVuc2FmZVByb3RvY29sW2xvd2VyUHJvdG9dKSB7XG5cbiAgICAvLyBGaXJzdCwgbWFrZSAxMDAlIHN1cmUgdGhhdCBhbnkgXCJhdXRvRXNjYXBlXCIgY2hhcnMgZ2V0XG4gICAgLy8gZXNjYXBlZCwgZXZlbiBpZiBlbmNvZGVVUklDb21wb25lbnQgZG9lc24ndCB0aGluayB0aGV5XG4gICAgLy8gbmVlZCB0byBiZS5cbiAgICBmb3IgKHZhciBpID0gMCwgbCA9IGF1dG9Fc2NhcGUubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgICB2YXIgYWUgPSBhdXRvRXNjYXBlW2ldO1xuICAgICAgdmFyIGVzYyA9IGVuY29kZVVSSUNvbXBvbmVudChhZSk7XG4gICAgICBpZiAoZXNjID09PSBhZSkge1xuICAgICAgICBlc2MgPSBlc2NhcGUoYWUpO1xuICAgICAgfVxuICAgICAgcmVzdCA9IHJlc3Quc3BsaXQoYWUpLmpvaW4oZXNjKTtcbiAgICB9XG4gIH1cblxuXG4gIC8vIGNob3Agb2ZmIGZyb20gdGhlIHRhaWwgZmlyc3QuXG4gIHZhciBoYXNoID0gcmVzdC5pbmRleE9mKCcjJyk7XG4gIGlmIChoYXNoICE9PSAtMSkge1xuICAgIC8vIGdvdCBhIGZyYWdtZW50IHN0cmluZy5cbiAgICB0aGlzLmhhc2ggPSByZXN0LnN1YnN0cihoYXNoKTtcbiAgICByZXN0ID0gcmVzdC5zbGljZSgwLCBoYXNoKTtcbiAgfVxuICB2YXIgcW0gPSByZXN0LmluZGV4T2YoJz8nKTtcbiAgaWYgKHFtICE9PSAtMSkge1xuICAgIHRoaXMuc2VhcmNoID0gcmVzdC5zdWJzdHIocW0pO1xuICAgIHRoaXMucXVlcnkgPSByZXN0LnN1YnN0cihxbSArIDEpO1xuICAgIGlmIChwYXJzZVF1ZXJ5U3RyaW5nKSB7XG4gICAgICB0aGlzLnF1ZXJ5ID0gcXVlcnlzdHJpbmcucGFyc2UodGhpcy5xdWVyeSk7XG4gICAgfVxuICAgIHJlc3QgPSByZXN0LnNsaWNlKDAsIHFtKTtcbiAgfSBlbHNlIGlmIChwYXJzZVF1ZXJ5U3RyaW5nKSB7XG4gICAgLy8gbm8gcXVlcnkgc3RyaW5nLCBidXQgcGFyc2VRdWVyeVN0cmluZyBzdGlsbCByZXF1ZXN0ZWRcbiAgICB0aGlzLnNlYXJjaCA9ICcnO1xuICAgIHRoaXMucXVlcnkgPSB7fTtcbiAgfVxuICBpZiAocmVzdCkgdGhpcy5wYXRobmFtZSA9IHJlc3Q7XG4gIGlmIChzbGFzaGVkUHJvdG9jb2xbbG93ZXJQcm90b10gJiZcbiAgICAgIHRoaXMuaG9zdG5hbWUgJiYgIXRoaXMucGF0aG5hbWUpIHtcbiAgICB0aGlzLnBhdGhuYW1lID0gJy8nO1xuICB9XG5cbiAgLy90byBzdXBwb3J0IGh0dHAucmVxdWVzdFxuICBpZiAodGhpcy5wYXRobmFtZSB8fCB0aGlzLnNlYXJjaCkge1xuICAgIHZhciBwID0gdGhpcy5wYXRobmFtZSB8fCAnJztcbiAgICB2YXIgcyA9IHRoaXMuc2VhcmNoIHx8ICcnO1xuICAgIHRoaXMucGF0aCA9IHAgKyBzO1xuICB9XG5cbiAgLy8gZmluYWxseSwgcmVjb25zdHJ1Y3QgdGhlIGhyZWYgYmFzZWQgb24gd2hhdCBoYXMgYmVlbiB2YWxpZGF0ZWQuXG4gIHRoaXMuaHJlZiA9IHRoaXMuZm9ybWF0KCk7XG4gIHJldHVybiB0aGlzO1xufTtcblxuLy8gZm9ybWF0IGEgcGFyc2VkIG9iamVjdCBpbnRvIGEgdXJsIHN0cmluZ1xuZnVuY3Rpb24gdXJsRm9ybWF0KG9iaikge1xuICAvLyBlbnN1cmUgaXQncyBhbiBvYmplY3QsIGFuZCBub3QgYSBzdHJpbmcgdXJsLlxuICAvLyBJZiBpdCdzIGFuIG9iaiwgdGhpcyBpcyBhIG5vLW9wLlxuICAvLyB0aGlzIHdheSwgeW91IGNhbiBjYWxsIHVybF9mb3JtYXQoKSBvbiBzdHJpbmdzXG4gIC8vIHRvIGNsZWFuIHVwIHBvdGVudGlhbGx5IHdvbmt5IHVybHMuXG4gIGlmIChpc1N0cmluZyhvYmopKSBvYmogPSB1cmxQYXJzZShvYmopO1xuICBpZiAoIShvYmogaW5zdGFuY2VvZiBVcmwpKSByZXR1cm4gVXJsLnByb3RvdHlwZS5mb3JtYXQuY2FsbChvYmopO1xuICByZXR1cm4gb2JqLmZvcm1hdCgpO1xufVxuXG5VcmwucHJvdG90eXBlLmZvcm1hdCA9IGZ1bmN0aW9uKCkge1xuICB2YXIgYXV0aCA9IHRoaXMuYXV0aCB8fCAnJztcbiAgaWYgKGF1dGgpIHtcbiAgICBhdXRoID0gZW5jb2RlVVJJQ29tcG9uZW50KGF1dGgpO1xuICAgIGF1dGggPSBhdXRoLnJlcGxhY2UoLyUzQS9pLCAnOicpO1xuICAgIGF1dGggKz0gJ0AnO1xuICB9XG5cbiAgdmFyIHByb3RvY29sID0gdGhpcy5wcm90b2NvbCB8fCAnJyxcbiAgICAgIHBhdGhuYW1lID0gdGhpcy5wYXRobmFtZSB8fCAnJyxcbiAgICAgIGhhc2ggPSB0aGlzLmhhc2ggfHwgJycsXG4gICAgICBob3N0ID0gZmFsc2UsXG4gICAgICBxdWVyeSA9ICcnO1xuXG4gIGlmICh0aGlzLmhvc3QpIHtcbiAgICBob3N0ID0gYXV0aCArIHRoaXMuaG9zdDtcbiAgfSBlbHNlIGlmICh0aGlzLmhvc3RuYW1lKSB7XG4gICAgaG9zdCA9IGF1dGggKyAodGhpcy5ob3N0bmFtZS5pbmRleE9mKCc6JykgPT09IC0xID9cbiAgICAgICAgdGhpcy5ob3N0bmFtZSA6XG4gICAgICAgICdbJyArIHRoaXMuaG9zdG5hbWUgKyAnXScpO1xuICAgIGlmICh0aGlzLnBvcnQpIHtcbiAgICAgIGhvc3QgKz0gJzonICsgdGhpcy5wb3J0O1xuICAgIH1cbiAgfVxuXG4gIGlmICh0aGlzLnF1ZXJ5ICYmXG4gICAgICBpc09iamVjdCh0aGlzLnF1ZXJ5KSAmJlxuICAgICAgT2JqZWN0LmtleXModGhpcy5xdWVyeSkubGVuZ3RoKSB7XG4gICAgcXVlcnkgPSBxdWVyeXN0cmluZy5zdHJpbmdpZnkodGhpcy5xdWVyeSk7XG4gIH1cblxuICB2YXIgc2VhcmNoID0gdGhpcy5zZWFyY2ggfHwgKHF1ZXJ5ICYmICgnPycgKyBxdWVyeSkpIHx8ICcnO1xuXG4gIGlmIChwcm90b2NvbCAmJiBwcm90b2NvbC5zdWJzdHIoLTEpICE9PSAnOicpIHByb3RvY29sICs9ICc6JztcblxuICAvLyBvbmx5IHRoZSBzbGFzaGVkUHJvdG9jb2xzIGdldCB0aGUgLy8uICBOb3QgbWFpbHRvOiwgeG1wcDosIGV0Yy5cbiAgLy8gdW5sZXNzIHRoZXkgaGFkIHRoZW0gdG8gYmVnaW4gd2l0aC5cbiAgaWYgKHRoaXMuc2xhc2hlcyB8fFxuICAgICAgKCFwcm90b2NvbCB8fCBzbGFzaGVkUHJvdG9jb2xbcHJvdG9jb2xdKSAmJiBob3N0ICE9PSBmYWxzZSkge1xuICAgIGhvc3QgPSAnLy8nICsgKGhvc3QgfHwgJycpO1xuICAgIGlmIChwYXRobmFtZSAmJiBwYXRobmFtZS5jaGFyQXQoMCkgIT09ICcvJykgcGF0aG5hbWUgPSAnLycgKyBwYXRobmFtZTtcbiAgfSBlbHNlIGlmICghaG9zdCkge1xuICAgIGhvc3QgPSAnJztcbiAgfVxuXG4gIGlmIChoYXNoICYmIGhhc2guY2hhckF0KDApICE9PSAnIycpIGhhc2ggPSAnIycgKyBoYXNoO1xuICBpZiAoc2VhcmNoICYmIHNlYXJjaC5jaGFyQXQoMCkgIT09ICc/Jykgc2VhcmNoID0gJz8nICsgc2VhcmNoO1xuXG4gIHBhdGhuYW1lID0gcGF0aG5hbWUucmVwbGFjZSgvWz8jXS9nLCBmdW5jdGlvbihtYXRjaCkge1xuICAgIHJldHVybiBlbmNvZGVVUklDb21wb25lbnQobWF0Y2gpO1xuICB9KTtcbiAgc2VhcmNoID0gc2VhcmNoLnJlcGxhY2UoJyMnLCAnJTIzJyk7XG5cbiAgcmV0dXJuIHByb3RvY29sICsgaG9zdCArIHBhdGhuYW1lICsgc2VhcmNoICsgaGFzaDtcbn07XG5cbmZ1bmN0aW9uIHVybFJlc29sdmUoc291cmNlLCByZWxhdGl2ZSkge1xuICByZXR1cm4gdXJsUGFyc2Uoc291cmNlLCBmYWxzZSwgdHJ1ZSkucmVzb2x2ZShyZWxhdGl2ZSk7XG59XG5cblVybC5wcm90b3R5cGUucmVzb2x2ZSA9IGZ1bmN0aW9uKHJlbGF0aXZlKSB7XG4gIHJldHVybiB0aGlzLnJlc29sdmVPYmplY3QodXJsUGFyc2UocmVsYXRpdmUsIGZhbHNlLCB0cnVlKSkuZm9ybWF0KCk7XG59O1xuXG5mdW5jdGlvbiB1cmxSZXNvbHZlT2JqZWN0KHNvdXJjZSwgcmVsYXRpdmUpIHtcbiAgaWYgKCFzb3VyY2UpIHJldHVybiByZWxhdGl2ZTtcbiAgcmV0dXJuIHVybFBhcnNlKHNvdXJjZSwgZmFsc2UsIHRydWUpLnJlc29sdmVPYmplY3QocmVsYXRpdmUpO1xufVxuXG5VcmwucHJvdG90eXBlLnJlc29sdmVPYmplY3QgPSBmdW5jdGlvbihyZWxhdGl2ZSkge1xuICBpZiAoaXNTdHJpbmcocmVsYXRpdmUpKSB7XG4gICAgdmFyIHJlbCA9IG5ldyBVcmwoKTtcbiAgICByZWwucGFyc2UocmVsYXRpdmUsIGZhbHNlLCB0cnVlKTtcbiAgICByZWxhdGl2ZSA9IHJlbDtcbiAgfVxuXG4gIHZhciByZXN1bHQgPSBuZXcgVXJsKCk7XG4gIE9iamVjdC5rZXlzKHRoaXMpLmZvckVhY2goZnVuY3Rpb24oaykge1xuICAgIHJlc3VsdFtrXSA9IHRoaXNba107XG4gIH0sIHRoaXMpO1xuXG4gIC8vIGhhc2ggaXMgYWx3YXlzIG92ZXJyaWRkZW4sIG5vIG1hdHRlciB3aGF0LlxuICAvLyBldmVuIGhyZWY9XCJcIiB3aWxsIHJlbW92ZSBpdC5cbiAgcmVzdWx0Lmhhc2ggPSByZWxhdGl2ZS5oYXNoO1xuXG4gIC8vIGlmIHRoZSByZWxhdGl2ZSB1cmwgaXMgZW1wdHksIHRoZW4gdGhlcmUncyBub3RoaW5nIGxlZnQgdG8gZG8gaGVyZS5cbiAgaWYgKHJlbGF0aXZlLmhyZWYgPT09ICcnKSB7XG4gICAgcmVzdWx0LmhyZWYgPSByZXN1bHQuZm9ybWF0KCk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIC8vIGhyZWZzIGxpa2UgLy9mb28vYmFyIGFsd2F5cyBjdXQgdG8gdGhlIHByb3RvY29sLlxuICBpZiAocmVsYXRpdmUuc2xhc2hlcyAmJiAhcmVsYXRpdmUucHJvdG9jb2wpIHtcbiAgICAvLyB0YWtlIGV2ZXJ5dGhpbmcgZXhjZXB0IHRoZSBwcm90b2NvbCBmcm9tIHJlbGF0aXZlXG4gICAgT2JqZWN0LmtleXMocmVsYXRpdmUpLmZvckVhY2goZnVuY3Rpb24oaykge1xuICAgICAgaWYgKGsgIT09ICdwcm90b2NvbCcpXG4gICAgICAgIHJlc3VsdFtrXSA9IHJlbGF0aXZlW2tdO1xuICAgIH0pO1xuXG4gICAgLy91cmxQYXJzZSBhcHBlbmRzIHRyYWlsaW5nIC8gdG8gdXJscyBsaWtlIGh0dHA6Ly93d3cuZXhhbXBsZS5jb21cbiAgICBpZiAoc2xhc2hlZFByb3RvY29sW3Jlc3VsdC5wcm90b2NvbF0gJiZcbiAgICAgICAgcmVzdWx0Lmhvc3RuYW1lICYmICFyZXN1bHQucGF0aG5hbWUpIHtcbiAgICAgIHJlc3VsdC5wYXRoID0gcmVzdWx0LnBhdGhuYW1lID0gJy8nO1xuICAgIH1cblxuICAgIHJlc3VsdC5ocmVmID0gcmVzdWx0LmZvcm1hdCgpO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICBpZiAocmVsYXRpdmUucHJvdG9jb2wgJiYgcmVsYXRpdmUucHJvdG9jb2wgIT09IHJlc3VsdC5wcm90b2NvbCkge1xuICAgIC8vIGlmIGl0J3MgYSBrbm93biB1cmwgcHJvdG9jb2wsIHRoZW4gY2hhbmdpbmdcbiAgICAvLyB0aGUgcHJvdG9jb2wgZG9lcyB3ZWlyZCB0aGluZ3NcbiAgICAvLyBmaXJzdCwgaWYgaXQncyBub3QgZmlsZTosIHRoZW4gd2UgTVVTVCBoYXZlIGEgaG9zdCxcbiAgICAvLyBhbmQgaWYgdGhlcmUgd2FzIGEgcGF0aFxuICAgIC8vIHRvIGJlZ2luIHdpdGgsIHRoZW4gd2UgTVVTVCBoYXZlIGEgcGF0aC5cbiAgICAvLyBpZiBpdCBpcyBmaWxlOiwgdGhlbiB0aGUgaG9zdCBpcyBkcm9wcGVkLFxuICAgIC8vIGJlY2F1c2UgdGhhdCdzIGtub3duIHRvIGJlIGhvc3RsZXNzLlxuICAgIC8vIGFueXRoaW5nIGVsc2UgaXMgYXNzdW1lZCB0byBiZSBhYnNvbHV0ZS5cbiAgICBpZiAoIXNsYXNoZWRQcm90b2NvbFtyZWxhdGl2ZS5wcm90b2NvbF0pIHtcbiAgICAgIE9iamVjdC5rZXlzKHJlbGF0aXZlKS5mb3JFYWNoKGZ1bmN0aW9uKGspIHtcbiAgICAgICAgcmVzdWx0W2tdID0gcmVsYXRpdmVba107XG4gICAgICB9KTtcbiAgICAgIHJlc3VsdC5ocmVmID0gcmVzdWx0LmZvcm1hdCgpO1xuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICByZXN1bHQucHJvdG9jb2wgPSByZWxhdGl2ZS5wcm90b2NvbDtcbiAgICBpZiAoIXJlbGF0aXZlLmhvc3QgJiYgIWhvc3RsZXNzUHJvdG9jb2xbcmVsYXRpdmUucHJvdG9jb2xdKSB7XG4gICAgICB2YXIgcmVsUGF0aCA9IChyZWxhdGl2ZS5wYXRobmFtZSB8fCAnJykuc3BsaXQoJy8nKTtcbiAgICAgIHdoaWxlIChyZWxQYXRoLmxlbmd0aCAmJiAhKHJlbGF0aXZlLmhvc3QgPSByZWxQYXRoLnNoaWZ0KCkpKTtcbiAgICAgIGlmICghcmVsYXRpdmUuaG9zdCkgcmVsYXRpdmUuaG9zdCA9ICcnO1xuICAgICAgaWYgKCFyZWxhdGl2ZS5ob3N0bmFtZSkgcmVsYXRpdmUuaG9zdG5hbWUgPSAnJztcbiAgICAgIGlmIChyZWxQYXRoWzBdICE9PSAnJykgcmVsUGF0aC51bnNoaWZ0KCcnKTtcbiAgICAgIGlmIChyZWxQYXRoLmxlbmd0aCA8IDIpIHJlbFBhdGgudW5zaGlmdCgnJyk7XG4gICAgICByZXN1bHQucGF0aG5hbWUgPSByZWxQYXRoLmpvaW4oJy8nKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmVzdWx0LnBhdGhuYW1lID0gcmVsYXRpdmUucGF0aG5hbWU7XG4gICAgfVxuICAgIHJlc3VsdC5zZWFyY2ggPSByZWxhdGl2ZS5zZWFyY2g7XG4gICAgcmVzdWx0LnF1ZXJ5ID0gcmVsYXRpdmUucXVlcnk7XG4gICAgcmVzdWx0Lmhvc3QgPSByZWxhdGl2ZS5ob3N0IHx8ICcnO1xuICAgIHJlc3VsdC5hdXRoID0gcmVsYXRpdmUuYXV0aDtcbiAgICByZXN1bHQuaG9zdG5hbWUgPSByZWxhdGl2ZS5ob3N0bmFtZSB8fCByZWxhdGl2ZS5ob3N0O1xuICAgIHJlc3VsdC5wb3J0ID0gcmVsYXRpdmUucG9ydDtcbiAgICAvLyB0byBzdXBwb3J0IGh0dHAucmVxdWVzdFxuICAgIGlmIChyZXN1bHQucGF0aG5hbWUgfHwgcmVzdWx0LnNlYXJjaCkge1xuICAgICAgdmFyIHAgPSByZXN1bHQucGF0aG5hbWUgfHwgJyc7XG4gICAgICB2YXIgcyA9IHJlc3VsdC5zZWFyY2ggfHwgJyc7XG4gICAgICByZXN1bHQucGF0aCA9IHAgKyBzO1xuICAgIH1cbiAgICByZXN1bHQuc2xhc2hlcyA9IHJlc3VsdC5zbGFzaGVzIHx8IHJlbGF0aXZlLnNsYXNoZXM7XG4gICAgcmVzdWx0LmhyZWYgPSByZXN1bHQuZm9ybWF0KCk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIHZhciBpc1NvdXJjZUFicyA9IChyZXN1bHQucGF0aG5hbWUgJiYgcmVzdWx0LnBhdGhuYW1lLmNoYXJBdCgwKSA9PT0gJy8nKSxcbiAgICAgIGlzUmVsQWJzID0gKFxuICAgICAgICAgIHJlbGF0aXZlLmhvc3QgfHxcbiAgICAgICAgICByZWxhdGl2ZS5wYXRobmFtZSAmJiByZWxhdGl2ZS5wYXRobmFtZS5jaGFyQXQoMCkgPT09ICcvJ1xuICAgICAgKSxcbiAgICAgIG11c3RFbmRBYnMgPSAoaXNSZWxBYnMgfHwgaXNTb3VyY2VBYnMgfHxcbiAgICAgICAgICAgICAgICAgICAgKHJlc3VsdC5ob3N0ICYmIHJlbGF0aXZlLnBhdGhuYW1lKSksXG4gICAgICByZW1vdmVBbGxEb3RzID0gbXVzdEVuZEFicyxcbiAgICAgIHNyY1BhdGggPSByZXN1bHQucGF0aG5hbWUgJiYgcmVzdWx0LnBhdGhuYW1lLnNwbGl0KCcvJykgfHwgW10sXG4gICAgICByZWxQYXRoID0gcmVsYXRpdmUucGF0aG5hbWUgJiYgcmVsYXRpdmUucGF0aG5hbWUuc3BsaXQoJy8nKSB8fCBbXSxcbiAgICAgIHBzeWNob3RpYyA9IHJlc3VsdC5wcm90b2NvbCAmJiAhc2xhc2hlZFByb3RvY29sW3Jlc3VsdC5wcm90b2NvbF07XG5cbiAgLy8gaWYgdGhlIHVybCBpcyBhIG5vbi1zbGFzaGVkIHVybCwgdGhlbiByZWxhdGl2ZVxuICAvLyBsaW5rcyBsaWtlIC4uLy4uIHNob3VsZCBiZSBhYmxlXG4gIC8vIHRvIGNyYXdsIHVwIHRvIHRoZSBob3N0bmFtZSwgYXMgd2VsbC4gIFRoaXMgaXMgc3RyYW5nZS5cbiAgLy8gcmVzdWx0LnByb3RvY29sIGhhcyBhbHJlYWR5IGJlZW4gc2V0IGJ5IG5vdy5cbiAgLy8gTGF0ZXIgb24sIHB1dCB0aGUgZmlyc3QgcGF0aCBwYXJ0IGludG8gdGhlIGhvc3QgZmllbGQuXG4gIGlmIChwc3ljaG90aWMpIHtcbiAgICByZXN1bHQuaG9zdG5hbWUgPSAnJztcbiAgICByZXN1bHQucG9ydCA9IG51bGw7XG4gICAgaWYgKHJlc3VsdC5ob3N0KSB7XG4gICAgICBpZiAoc3JjUGF0aFswXSA9PT0gJycpIHNyY1BhdGhbMF0gPSByZXN1bHQuaG9zdDtcbiAgICAgIGVsc2Ugc3JjUGF0aC51bnNoaWZ0KHJlc3VsdC5ob3N0KTtcbiAgICB9XG4gICAgcmVzdWx0Lmhvc3QgPSAnJztcbiAgICBpZiAocmVsYXRpdmUucHJvdG9jb2wpIHtcbiAgICAgIHJlbGF0aXZlLmhvc3RuYW1lID0gbnVsbDtcbiAgICAgIHJlbGF0aXZlLnBvcnQgPSBudWxsO1xuICAgICAgaWYgKHJlbGF0aXZlLmhvc3QpIHtcbiAgICAgICAgaWYgKHJlbFBhdGhbMF0gPT09ICcnKSByZWxQYXRoWzBdID0gcmVsYXRpdmUuaG9zdDtcbiAgICAgICAgZWxzZSByZWxQYXRoLnVuc2hpZnQocmVsYXRpdmUuaG9zdCk7XG4gICAgICB9XG4gICAgICByZWxhdGl2ZS5ob3N0ID0gbnVsbDtcbiAgICB9XG4gICAgbXVzdEVuZEFicyA9IG11c3RFbmRBYnMgJiYgKHJlbFBhdGhbMF0gPT09ICcnIHx8IHNyY1BhdGhbMF0gPT09ICcnKTtcbiAgfVxuXG4gIGlmIChpc1JlbEFicykge1xuICAgIC8vIGl0J3MgYWJzb2x1dGUuXG4gICAgcmVzdWx0Lmhvc3QgPSAocmVsYXRpdmUuaG9zdCB8fCByZWxhdGl2ZS5ob3N0ID09PSAnJykgP1xuICAgICAgICAgICAgICAgICAgcmVsYXRpdmUuaG9zdCA6IHJlc3VsdC5ob3N0O1xuICAgIHJlc3VsdC5ob3N0bmFtZSA9IChyZWxhdGl2ZS5ob3N0bmFtZSB8fCByZWxhdGl2ZS5ob3N0bmFtZSA9PT0gJycpID9cbiAgICAgICAgICAgICAgICAgICAgICByZWxhdGl2ZS5ob3N0bmFtZSA6IHJlc3VsdC5ob3N0bmFtZTtcbiAgICByZXN1bHQuc2VhcmNoID0gcmVsYXRpdmUuc2VhcmNoO1xuICAgIHJlc3VsdC5xdWVyeSA9IHJlbGF0aXZlLnF1ZXJ5O1xuICAgIHNyY1BhdGggPSByZWxQYXRoO1xuICAgIC8vIGZhbGwgdGhyb3VnaCB0byB0aGUgZG90LWhhbmRsaW5nIGJlbG93LlxuICB9IGVsc2UgaWYgKHJlbFBhdGgubGVuZ3RoKSB7XG4gICAgLy8gaXQncyByZWxhdGl2ZVxuICAgIC8vIHRocm93IGF3YXkgdGhlIGV4aXN0aW5nIGZpbGUsIGFuZCB0YWtlIHRoZSBuZXcgcGF0aCBpbnN0ZWFkLlxuICAgIGlmICghc3JjUGF0aCkgc3JjUGF0aCA9IFtdO1xuICAgIHNyY1BhdGgucG9wKCk7XG4gICAgc3JjUGF0aCA9IHNyY1BhdGguY29uY2F0KHJlbFBhdGgpO1xuICAgIHJlc3VsdC5zZWFyY2ggPSByZWxhdGl2ZS5zZWFyY2g7XG4gICAgcmVzdWx0LnF1ZXJ5ID0gcmVsYXRpdmUucXVlcnk7XG4gIH0gZWxzZSBpZiAoIWlzTnVsbE9yVW5kZWZpbmVkKHJlbGF0aXZlLnNlYXJjaCkpIHtcbiAgICAvLyBqdXN0IHB1bGwgb3V0IHRoZSBzZWFyY2guXG4gICAgLy8gbGlrZSBocmVmPSc/Zm9vJy5cbiAgICAvLyBQdXQgdGhpcyBhZnRlciB0aGUgb3RoZXIgdHdvIGNhc2VzIGJlY2F1c2UgaXQgc2ltcGxpZmllcyB0aGUgYm9vbGVhbnNcbiAgICBpZiAocHN5Y2hvdGljKSB7XG4gICAgICByZXN1bHQuaG9zdG5hbWUgPSByZXN1bHQuaG9zdCA9IHNyY1BhdGguc2hpZnQoKTtcbiAgICAgIC8vb2NjYXRpb25hbHkgdGhlIGF1dGggY2FuIGdldCBzdHVjayBvbmx5IGluIGhvc3RcbiAgICAgIC8vdGhpcyBlc3BlY2lhbHkgaGFwcGVucyBpbiBjYXNlcyBsaWtlXG4gICAgICAvL3VybC5yZXNvbHZlT2JqZWN0KCdtYWlsdG86bG9jYWwxQGRvbWFpbjEnLCAnbG9jYWwyQGRvbWFpbjInKVxuICAgICAgdmFyIGF1dGhJbkhvc3QgPSByZXN1bHQuaG9zdCAmJiByZXN1bHQuaG9zdC5pbmRleE9mKCdAJykgPiAwID9cbiAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0Lmhvc3Quc3BsaXQoJ0AnKSA6IGZhbHNlO1xuICAgICAgaWYgKGF1dGhJbkhvc3QpIHtcbiAgICAgICAgcmVzdWx0LmF1dGggPSBhdXRoSW5Ib3N0LnNoaWZ0KCk7XG4gICAgICAgIHJlc3VsdC5ob3N0ID0gcmVzdWx0Lmhvc3RuYW1lID0gYXV0aEluSG9zdC5zaGlmdCgpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXN1bHQuc2VhcmNoID0gcmVsYXRpdmUuc2VhcmNoO1xuICAgIHJlc3VsdC5xdWVyeSA9IHJlbGF0aXZlLnF1ZXJ5O1xuICAgIC8vdG8gc3VwcG9ydCBodHRwLnJlcXVlc3RcbiAgICBpZiAoIWlzTnVsbChyZXN1bHQucGF0aG5hbWUpIHx8ICFpc051bGwocmVzdWx0LnNlYXJjaCkpIHtcbiAgICAgIHJlc3VsdC5wYXRoID0gKHJlc3VsdC5wYXRobmFtZSA/IHJlc3VsdC5wYXRobmFtZSA6ICcnKSArXG4gICAgICAgICAgICAgICAgICAgIChyZXN1bHQuc2VhcmNoID8gcmVzdWx0LnNlYXJjaCA6ICcnKTtcbiAgICB9XG4gICAgcmVzdWx0LmhyZWYgPSByZXN1bHQuZm9ybWF0KCk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIGlmICghc3JjUGF0aC5sZW5ndGgpIHtcbiAgICAvLyBubyBwYXRoIGF0IGFsbC4gIGVhc3kuXG4gICAgLy8gd2UndmUgYWxyZWFkeSBoYW5kbGVkIHRoZSBvdGhlciBzdHVmZiBhYm92ZS5cbiAgICByZXN1bHQucGF0aG5hbWUgPSBudWxsO1xuICAgIC8vdG8gc3VwcG9ydCBodHRwLnJlcXVlc3RcbiAgICBpZiAocmVzdWx0LnNlYXJjaCkge1xuICAgICAgcmVzdWx0LnBhdGggPSAnLycgKyByZXN1bHQuc2VhcmNoO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXN1bHQucGF0aCA9IG51bGw7XG4gICAgfVxuICAgIHJlc3VsdC5ocmVmID0gcmVzdWx0LmZvcm1hdCgpO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICAvLyBpZiBhIHVybCBFTkRzIGluIC4gb3IgLi4sIHRoZW4gaXQgbXVzdCBnZXQgYSB0cmFpbGluZyBzbGFzaC5cbiAgLy8gaG93ZXZlciwgaWYgaXQgZW5kcyBpbiBhbnl0aGluZyBlbHNlIG5vbi1zbGFzaHksXG4gIC8vIHRoZW4gaXQgbXVzdCBOT1QgZ2V0IGEgdHJhaWxpbmcgc2xhc2guXG4gIHZhciBsYXN0ID0gc3JjUGF0aC5zbGljZSgtMSlbMF07XG4gIHZhciBoYXNUcmFpbGluZ1NsYXNoID0gKFxuICAgICAgKHJlc3VsdC5ob3N0IHx8IHJlbGF0aXZlLmhvc3QpICYmIChsYXN0ID09PSAnLicgfHwgbGFzdCA9PT0gJy4uJykgfHxcbiAgICAgIGxhc3QgPT09ICcnKTtcblxuICAvLyBzdHJpcCBzaW5nbGUgZG90cywgcmVzb2x2ZSBkb3VibGUgZG90cyB0byBwYXJlbnQgZGlyXG4gIC8vIGlmIHRoZSBwYXRoIHRyaWVzIHRvIGdvIGFib3ZlIHRoZSByb290LCBgdXBgIGVuZHMgdXAgPiAwXG4gIHZhciB1cCA9IDA7XG4gIGZvciAodmFyIGkgPSBzcmNQYXRoLmxlbmd0aDsgaSA+PSAwOyBpLS0pIHtcbiAgICBsYXN0ID0gc3JjUGF0aFtpXTtcbiAgICBpZiAobGFzdCA9PSAnLicpIHtcbiAgICAgIHNyY1BhdGguc3BsaWNlKGksIDEpO1xuICAgIH0gZWxzZSBpZiAobGFzdCA9PT0gJy4uJykge1xuICAgICAgc3JjUGF0aC5zcGxpY2UoaSwgMSk7XG4gICAgICB1cCsrO1xuICAgIH0gZWxzZSBpZiAodXApIHtcbiAgICAgIHNyY1BhdGguc3BsaWNlKGksIDEpO1xuICAgICAgdXAtLTtcbiAgICB9XG4gIH1cblxuICAvLyBpZiB0aGUgcGF0aCBpcyBhbGxvd2VkIHRvIGdvIGFib3ZlIHRoZSByb290LCByZXN0b3JlIGxlYWRpbmcgLi5zXG4gIGlmICghbXVzdEVuZEFicyAmJiAhcmVtb3ZlQWxsRG90cykge1xuICAgIGZvciAoOyB1cC0tOyB1cCkge1xuICAgICAgc3JjUGF0aC51bnNoaWZ0KCcuLicpO1xuICAgIH1cbiAgfVxuXG4gIGlmIChtdXN0RW5kQWJzICYmIHNyY1BhdGhbMF0gIT09ICcnICYmXG4gICAgICAoIXNyY1BhdGhbMF0gfHwgc3JjUGF0aFswXS5jaGFyQXQoMCkgIT09ICcvJykpIHtcbiAgICBzcmNQYXRoLnVuc2hpZnQoJycpO1xuICB9XG5cbiAgaWYgKGhhc1RyYWlsaW5nU2xhc2ggJiYgKHNyY1BhdGguam9pbignLycpLnN1YnN0cigtMSkgIT09ICcvJykpIHtcbiAgICBzcmNQYXRoLnB1c2goJycpO1xuICB9XG5cbiAgdmFyIGlzQWJzb2x1dGUgPSBzcmNQYXRoWzBdID09PSAnJyB8fFxuICAgICAgKHNyY1BhdGhbMF0gJiYgc3JjUGF0aFswXS5jaGFyQXQoMCkgPT09ICcvJyk7XG5cbiAgLy8gcHV0IHRoZSBob3N0IGJhY2tcbiAgaWYgKHBzeWNob3RpYykge1xuICAgIHJlc3VsdC5ob3N0bmFtZSA9IHJlc3VsdC5ob3N0ID0gaXNBYnNvbHV0ZSA/ICcnIDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyY1BhdGgubGVuZ3RoID8gc3JjUGF0aC5zaGlmdCgpIDogJyc7XG4gICAgLy9vY2NhdGlvbmFseSB0aGUgYXV0aCBjYW4gZ2V0IHN0dWNrIG9ubHkgaW4gaG9zdFxuICAgIC8vdGhpcyBlc3BlY2lhbHkgaGFwcGVucyBpbiBjYXNlcyBsaWtlXG4gICAgLy91cmwucmVzb2x2ZU9iamVjdCgnbWFpbHRvOmxvY2FsMUBkb21haW4xJywgJ2xvY2FsMkBkb21haW4yJylcbiAgICB2YXIgYXV0aEluSG9zdCA9IHJlc3VsdC5ob3N0ICYmIHJlc3VsdC5ob3N0LmluZGV4T2YoJ0AnKSA+IDAgP1xuICAgICAgICAgICAgICAgICAgICAgcmVzdWx0Lmhvc3Quc3BsaXQoJ0AnKSA6IGZhbHNlO1xuICAgIGlmIChhdXRoSW5Ib3N0KSB7XG4gICAgICByZXN1bHQuYXV0aCA9IGF1dGhJbkhvc3Quc2hpZnQoKTtcbiAgICAgIHJlc3VsdC5ob3N0ID0gcmVzdWx0Lmhvc3RuYW1lID0gYXV0aEluSG9zdC5zaGlmdCgpO1xuICAgIH1cbiAgfVxuXG4gIG11c3RFbmRBYnMgPSBtdXN0RW5kQWJzIHx8IChyZXN1bHQuaG9zdCAmJiBzcmNQYXRoLmxlbmd0aCk7XG5cbiAgaWYgKG11c3RFbmRBYnMgJiYgIWlzQWJzb2x1dGUpIHtcbiAgICBzcmNQYXRoLnVuc2hpZnQoJycpO1xuICB9XG5cbiAgaWYgKCFzcmNQYXRoLmxlbmd0aCkge1xuICAgIHJlc3VsdC5wYXRobmFtZSA9IG51bGw7XG4gICAgcmVzdWx0LnBhdGggPSBudWxsO1xuICB9IGVsc2Uge1xuICAgIHJlc3VsdC5wYXRobmFtZSA9IHNyY1BhdGguam9pbignLycpO1xuICB9XG5cbiAgLy90byBzdXBwb3J0IHJlcXVlc3QuaHR0cFxuICBpZiAoIWlzTnVsbChyZXN1bHQucGF0aG5hbWUpIHx8ICFpc051bGwocmVzdWx0LnNlYXJjaCkpIHtcbiAgICByZXN1bHQucGF0aCA9IChyZXN1bHQucGF0aG5hbWUgPyByZXN1bHQucGF0aG5hbWUgOiAnJykgK1xuICAgICAgICAgICAgICAgICAgKHJlc3VsdC5zZWFyY2ggPyByZXN1bHQuc2VhcmNoIDogJycpO1xuICB9XG4gIHJlc3VsdC5hdXRoID0gcmVsYXRpdmUuYXV0aCB8fCByZXN1bHQuYXV0aDtcbiAgcmVzdWx0LnNsYXNoZXMgPSByZXN1bHQuc2xhc2hlcyB8fCByZWxhdGl2ZS5zbGFzaGVzO1xuICByZXN1bHQuaHJlZiA9IHJlc3VsdC5mb3JtYXQoKTtcbiAgcmV0dXJuIHJlc3VsdDtcbn07XG5cblVybC5wcm90b3R5cGUucGFyc2VIb3N0ID0gZnVuY3Rpb24oKSB7XG4gIHZhciBob3N0ID0gdGhpcy5ob3N0O1xuICB2YXIgcG9ydCA9IHBvcnRQYXR0ZXJuLmV4ZWMoaG9zdCk7XG4gIGlmIChwb3J0KSB7XG4gICAgcG9ydCA9IHBvcnRbMF07XG4gICAgaWYgKHBvcnQgIT09ICc6Jykge1xuICAgICAgdGhpcy5wb3J0ID0gcG9ydC5zdWJzdHIoMSk7XG4gICAgfVxuICAgIGhvc3QgPSBob3N0LnN1YnN0cigwLCBob3N0Lmxlbmd0aCAtIHBvcnQubGVuZ3RoKTtcbiAgfVxuICBpZiAoaG9zdCkgdGhpcy5ob3N0bmFtZSA9IGhvc3Q7XG59O1xuXG5mdW5jdGlvbiBpc1N0cmluZyhhcmcpIHtcbiAgcmV0dXJuIHR5cGVvZiBhcmcgPT09IFwic3RyaW5nXCI7XG59XG5cbmZ1bmN0aW9uIGlzT2JqZWN0KGFyZykge1xuICByZXR1cm4gdHlwZW9mIGFyZyA9PT0gJ29iamVjdCcgJiYgYXJnICE9PSBudWxsO1xufVxuXG5mdW5jdGlvbiBpc051bGwoYXJnKSB7XG4gIHJldHVybiBhcmcgPT09IG51bGw7XG59XG5mdW5jdGlvbiBpc051bGxPclVuZGVmaW5lZChhcmcpIHtcbiAgcmV0dXJuICBhcmcgPT0gbnVsbDtcbn1cbiIsIid1c2Ugc3RyaWN0JztcblxubW9kdWxlLmV4cG9ydHMgPSBlYXJjdXQ7XG5cbmZ1bmN0aW9uIGVhcmN1dChkYXRhLCBob2xlSW5kaWNlcywgZGltKSB7XG5cbiAgICBkaW0gPSBkaW0gfHwgMjtcblxuICAgIHZhciBoYXNIb2xlcyA9IGhvbGVJbmRpY2VzICYmIGhvbGVJbmRpY2VzLmxlbmd0aCxcbiAgICAgICAgb3V0ZXJMZW4gPSBoYXNIb2xlcyA/IGhvbGVJbmRpY2VzWzBdICogZGltIDogZGF0YS5sZW5ndGgsXG4gICAgICAgIG91dGVyTm9kZSA9IGxpbmtlZExpc3QoZGF0YSwgMCwgb3V0ZXJMZW4sIGRpbSwgdHJ1ZSksXG4gICAgICAgIHRyaWFuZ2xlcyA9IFtdO1xuXG4gICAgaWYgKCFvdXRlck5vZGUpIHJldHVybiB0cmlhbmdsZXM7XG5cbiAgICB2YXIgbWluWCwgbWluWSwgbWF4WCwgbWF4WSwgeCwgeSwgc2l6ZTtcblxuICAgIGlmIChoYXNIb2xlcykgb3V0ZXJOb2RlID0gZWxpbWluYXRlSG9sZXMoZGF0YSwgaG9sZUluZGljZXMsIG91dGVyTm9kZSwgZGltKTtcblxuICAgIC8vIGlmIHRoZSBzaGFwZSBpcyBub3QgdG9vIHNpbXBsZSwgd2UnbGwgdXNlIHotb3JkZXIgY3VydmUgaGFzaCBsYXRlcjsgY2FsY3VsYXRlIHBvbHlnb24gYmJveFxuICAgIGlmIChkYXRhLmxlbmd0aCA+IDgwICogZGltKSB7XG4gICAgICAgIG1pblggPSBtYXhYID0gZGF0YVswXTtcbiAgICAgICAgbWluWSA9IG1heFkgPSBkYXRhWzFdO1xuXG4gICAgICAgIGZvciAodmFyIGkgPSBkaW07IGkgPCBvdXRlckxlbjsgaSArPSBkaW0pIHtcbiAgICAgICAgICAgIHggPSBkYXRhW2ldO1xuICAgICAgICAgICAgeSA9IGRhdGFbaSArIDFdO1xuICAgICAgICAgICAgaWYgKHggPCBtaW5YKSBtaW5YID0geDtcbiAgICAgICAgICAgIGlmICh5IDwgbWluWSkgbWluWSA9IHk7XG4gICAgICAgICAgICBpZiAoeCA+IG1heFgpIG1heFggPSB4O1xuICAgICAgICAgICAgaWYgKHkgPiBtYXhZKSBtYXhZID0geTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIG1pblgsIG1pblkgYW5kIHNpemUgYXJlIGxhdGVyIHVzZWQgdG8gdHJhbnNmb3JtIGNvb3JkcyBpbnRvIGludGVnZXJzIGZvciB6LW9yZGVyIGNhbGN1bGF0aW9uXG4gICAgICAgIHNpemUgPSBNYXRoLm1heChtYXhYIC0gbWluWCwgbWF4WSAtIG1pblkpO1xuICAgIH1cblxuICAgIGVhcmN1dExpbmtlZChvdXRlck5vZGUsIHRyaWFuZ2xlcywgZGltLCBtaW5YLCBtaW5ZLCBzaXplKTtcblxuICAgIHJldHVybiB0cmlhbmdsZXM7XG59XG5cbi8vIGNyZWF0ZSBhIGNpcmN1bGFyIGRvdWJseSBsaW5rZWQgbGlzdCBmcm9tIHBvbHlnb24gcG9pbnRzIGluIHRoZSBzcGVjaWZpZWQgd2luZGluZyBvcmRlclxuZnVuY3Rpb24gbGlua2VkTGlzdChkYXRhLCBzdGFydCwgZW5kLCBkaW0sIGNsb2Nrd2lzZSkge1xuICAgIHZhciBzdW0gPSAwLFxuICAgICAgICBpLCBqLCBsYXN0O1xuXG4gICAgLy8gY2FsY3VsYXRlIG9yaWdpbmFsIHdpbmRpbmcgb3JkZXIgb2YgYSBwb2x5Z29uIHJpbmdcbiAgICBmb3IgKGkgPSBzdGFydCwgaiA9IGVuZCAtIGRpbTsgaSA8IGVuZDsgaSArPSBkaW0pIHtcbiAgICAgICAgc3VtICs9IChkYXRhW2pdIC0gZGF0YVtpXSkgKiAoZGF0YVtpICsgMV0gKyBkYXRhW2ogKyAxXSk7XG4gICAgICAgIGogPSBpO1xuICAgIH1cblxuICAgIC8vIGxpbmsgcG9pbnRzIGludG8gY2lyY3VsYXIgZG91Ymx5LWxpbmtlZCBsaXN0IGluIHRoZSBzcGVjaWZpZWQgd2luZGluZyBvcmRlclxuICAgIGlmIChjbG9ja3dpc2UgPT09IChzdW0gPiAwKSkge1xuICAgICAgICBmb3IgKGkgPSBzdGFydDsgaSA8IGVuZDsgaSArPSBkaW0pIGxhc3QgPSBpbnNlcnROb2RlKGksIGRhdGFbaV0sIGRhdGFbaSArIDFdLCBsYXN0KTtcbiAgICB9IGVsc2Uge1xuICAgICAgICBmb3IgKGkgPSBlbmQgLSBkaW07IGkgPj0gc3RhcnQ7IGkgLT0gZGltKSBsYXN0ID0gaW5zZXJ0Tm9kZShpLCBkYXRhW2ldLCBkYXRhW2kgKyAxXSwgbGFzdCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGxhc3Q7XG59XG5cbi8vIGVsaW1pbmF0ZSBjb2xpbmVhciBvciBkdXBsaWNhdGUgcG9pbnRzXG5mdW5jdGlvbiBmaWx0ZXJQb2ludHMoc3RhcnQsIGVuZCkge1xuICAgIGlmICghc3RhcnQpIHJldHVybiBzdGFydDtcbiAgICBpZiAoIWVuZCkgZW5kID0gc3RhcnQ7XG5cbiAgICB2YXIgcCA9IHN0YXJ0LFxuICAgICAgICBhZ2FpbjtcbiAgICBkbyB7XG4gICAgICAgIGFnYWluID0gZmFsc2U7XG5cbiAgICAgICAgaWYgKCFwLnN0ZWluZXIgJiYgKGVxdWFscyhwLCBwLm5leHQpIHx8IGFyZWEocC5wcmV2LCBwLCBwLm5leHQpID09PSAwKSkge1xuICAgICAgICAgICAgcmVtb3ZlTm9kZShwKTtcbiAgICAgICAgICAgIHAgPSBlbmQgPSBwLnByZXY7XG4gICAgICAgICAgICBpZiAocCA9PT0gcC5uZXh0KSByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIGFnYWluID0gdHJ1ZTtcblxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcCA9IHAubmV4dDtcbiAgICAgICAgfVxuICAgIH0gd2hpbGUgKGFnYWluIHx8IHAgIT09IGVuZCk7XG5cbiAgICByZXR1cm4gZW5kO1xufVxuXG4vLyBtYWluIGVhciBzbGljaW5nIGxvb3Agd2hpY2ggdHJpYW5ndWxhdGVzIGEgcG9seWdvbiAoZ2l2ZW4gYXMgYSBsaW5rZWQgbGlzdClcbmZ1bmN0aW9uIGVhcmN1dExpbmtlZChlYXIsIHRyaWFuZ2xlcywgZGltLCBtaW5YLCBtaW5ZLCBzaXplLCBwYXNzKSB7XG4gICAgaWYgKCFlYXIpIHJldHVybjtcblxuICAgIC8vIGludGVybGluayBwb2x5Z29uIG5vZGVzIGluIHotb3JkZXJcbiAgICBpZiAoIXBhc3MgJiYgc2l6ZSkgaW5kZXhDdXJ2ZShlYXIsIG1pblgsIG1pblksIHNpemUpO1xuXG4gICAgdmFyIHN0b3AgPSBlYXIsXG4gICAgICAgIHByZXYsIG5leHQ7XG5cbiAgICAvLyBpdGVyYXRlIHRocm91Z2ggZWFycywgc2xpY2luZyB0aGVtIG9uZSBieSBvbmVcbiAgICB3aGlsZSAoZWFyLnByZXYgIT09IGVhci5uZXh0KSB7XG4gICAgICAgIHByZXYgPSBlYXIucHJldjtcbiAgICAgICAgbmV4dCA9IGVhci5uZXh0O1xuXG4gICAgICAgIGlmIChzaXplID8gaXNFYXJIYXNoZWQoZWFyLCBtaW5YLCBtaW5ZLCBzaXplKSA6IGlzRWFyKGVhcikpIHtcbiAgICAgICAgICAgIC8vIGN1dCBvZmYgdGhlIHRyaWFuZ2xlXG4gICAgICAgICAgICB0cmlhbmdsZXMucHVzaChwcmV2LmkgLyBkaW0pO1xuICAgICAgICAgICAgdHJpYW5nbGVzLnB1c2goZWFyLmkgLyBkaW0pO1xuICAgICAgICAgICAgdHJpYW5nbGVzLnB1c2gobmV4dC5pIC8gZGltKTtcblxuICAgICAgICAgICAgcmVtb3ZlTm9kZShlYXIpO1xuXG4gICAgICAgICAgICAvLyBza2lwcGluZyB0aGUgbmV4dCB2ZXJ0aWNlIGxlYWRzIHRvIGxlc3Mgc2xpdmVyIHRyaWFuZ2xlc1xuICAgICAgICAgICAgZWFyID0gbmV4dC5uZXh0O1xuICAgICAgICAgICAgc3RvcCA9IG5leHQubmV4dDtcblxuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICBlYXIgPSBuZXh0O1xuXG4gICAgICAgIC8vIGlmIHdlIGxvb3BlZCB0aHJvdWdoIHRoZSB3aG9sZSByZW1haW5pbmcgcG9seWdvbiBhbmQgY2FuJ3QgZmluZCBhbnkgbW9yZSBlYXJzXG4gICAgICAgIGlmIChlYXIgPT09IHN0b3ApIHtcbiAgICAgICAgICAgIC8vIHRyeSBmaWx0ZXJpbmcgcG9pbnRzIGFuZCBzbGljaW5nIGFnYWluXG4gICAgICAgICAgICBpZiAoIXBhc3MpIHtcbiAgICAgICAgICAgICAgICBlYXJjdXRMaW5rZWQoZmlsdGVyUG9pbnRzKGVhciksIHRyaWFuZ2xlcywgZGltLCBtaW5YLCBtaW5ZLCBzaXplLCAxKTtcblxuICAgICAgICAgICAgLy8gaWYgdGhpcyBkaWRuJ3Qgd29yaywgdHJ5IGN1cmluZyBhbGwgc21hbGwgc2VsZi1pbnRlcnNlY3Rpb25zIGxvY2FsbHlcbiAgICAgICAgICAgIH0gZWxzZSBpZiAocGFzcyA9PT0gMSkge1xuICAgICAgICAgICAgICAgIGVhciA9IGN1cmVMb2NhbEludGVyc2VjdGlvbnMoZWFyLCB0cmlhbmdsZXMsIGRpbSk7XG4gICAgICAgICAgICAgICAgZWFyY3V0TGlua2VkKGVhciwgdHJpYW5nbGVzLCBkaW0sIG1pblgsIG1pblksIHNpemUsIDIpO1xuXG4gICAgICAgICAgICAvLyBhcyBhIGxhc3QgcmVzb3J0LCB0cnkgc3BsaXR0aW5nIHRoZSByZW1haW5pbmcgcG9seWdvbiBpbnRvIHR3b1xuICAgICAgICAgICAgfSBlbHNlIGlmIChwYXNzID09PSAyKSB7XG4gICAgICAgICAgICAgICAgc3BsaXRFYXJjdXQoZWFyLCB0cmlhbmdsZXMsIGRpbSwgbWluWCwgbWluWSwgc2l6ZSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgfVxufVxuXG4vLyBjaGVjayB3aGV0aGVyIGEgcG9seWdvbiBub2RlIGZvcm1zIGEgdmFsaWQgZWFyIHdpdGggYWRqYWNlbnQgbm9kZXNcbmZ1bmN0aW9uIGlzRWFyKGVhcikge1xuICAgIHZhciBhID0gZWFyLnByZXYsXG4gICAgICAgIGIgPSBlYXIsXG4gICAgICAgIGMgPSBlYXIubmV4dDtcblxuICAgIGlmIChhcmVhKGEsIGIsIGMpID49IDApIHJldHVybiBmYWxzZTsgLy8gcmVmbGV4LCBjYW4ndCBiZSBhbiBlYXJcblxuICAgIC8vIG5vdyBtYWtlIHN1cmUgd2UgZG9uJ3QgaGF2ZSBvdGhlciBwb2ludHMgaW5zaWRlIHRoZSBwb3RlbnRpYWwgZWFyXG4gICAgdmFyIHAgPSBlYXIubmV4dC5uZXh0O1xuXG4gICAgd2hpbGUgKHAgIT09IGVhci5wcmV2KSB7XG4gICAgICAgIGlmIChwb2ludEluVHJpYW5nbGUoYS54LCBhLnksIGIueCwgYi55LCBjLngsIGMueSwgcC54LCBwLnkpICYmXG4gICAgICAgICAgICBhcmVhKHAucHJldiwgcCwgcC5uZXh0KSA+PSAwKSByZXR1cm4gZmFsc2U7XG4gICAgICAgIHAgPSBwLm5leHQ7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRydWU7XG59XG5cbmZ1bmN0aW9uIGlzRWFySGFzaGVkKGVhciwgbWluWCwgbWluWSwgc2l6ZSkge1xuICAgIHZhciBhID0gZWFyLnByZXYsXG4gICAgICAgIGIgPSBlYXIsXG4gICAgICAgIGMgPSBlYXIubmV4dDtcblxuICAgIGlmIChhcmVhKGEsIGIsIGMpID49IDApIHJldHVybiBmYWxzZTsgLy8gcmVmbGV4LCBjYW4ndCBiZSBhbiBlYXJcblxuICAgIC8vIHRyaWFuZ2xlIGJib3g7IG1pbiAmIG1heCBhcmUgY2FsY3VsYXRlZCBsaWtlIHRoaXMgZm9yIHNwZWVkXG4gICAgdmFyIG1pblRYID0gYS54IDwgYi54ID8gKGEueCA8IGMueCA/IGEueCA6IGMueCkgOiAoYi54IDwgYy54ID8gYi54IDogYy54KSxcbiAgICAgICAgbWluVFkgPSBhLnkgPCBiLnkgPyAoYS55IDwgYy55ID8gYS55IDogYy55KSA6IChiLnkgPCBjLnkgPyBiLnkgOiBjLnkpLFxuICAgICAgICBtYXhUWCA9IGEueCA+IGIueCA/IChhLnggPiBjLnggPyBhLnggOiBjLngpIDogKGIueCA+IGMueCA/IGIueCA6IGMueCksXG4gICAgICAgIG1heFRZID0gYS55ID4gYi55ID8gKGEueSA+IGMueSA/IGEueSA6IGMueSkgOiAoYi55ID4gYy55ID8gYi55IDogYy55KTtcblxuICAgIC8vIHotb3JkZXIgcmFuZ2UgZm9yIHRoZSBjdXJyZW50IHRyaWFuZ2xlIGJib3g7XG4gICAgdmFyIG1pblogPSB6T3JkZXIobWluVFgsIG1pblRZLCBtaW5YLCBtaW5ZLCBzaXplKSxcbiAgICAgICAgbWF4WiA9IHpPcmRlcihtYXhUWCwgbWF4VFksIG1pblgsIG1pblksIHNpemUpO1xuXG4gICAgLy8gZmlyc3QgbG9vayBmb3IgcG9pbnRzIGluc2lkZSB0aGUgdHJpYW5nbGUgaW4gaW5jcmVhc2luZyB6LW9yZGVyXG4gICAgdmFyIHAgPSBlYXIubmV4dFo7XG5cbiAgICB3aGlsZSAocCAmJiBwLnogPD0gbWF4Wikge1xuICAgICAgICBpZiAocCAhPT0gZWFyLnByZXYgJiYgcCAhPT0gZWFyLm5leHQgJiZcbiAgICAgICAgICAgIHBvaW50SW5UcmlhbmdsZShhLngsIGEueSwgYi54LCBiLnksIGMueCwgYy55LCBwLngsIHAueSkgJiZcbiAgICAgICAgICAgIGFyZWEocC5wcmV2LCBwLCBwLm5leHQpID49IDApIHJldHVybiBmYWxzZTtcbiAgICAgICAgcCA9IHAubmV4dFo7XG4gICAgfVxuXG4gICAgLy8gdGhlbiBsb29rIGZvciBwb2ludHMgaW4gZGVjcmVhc2luZyB6LW9yZGVyXG4gICAgcCA9IGVhci5wcmV2WjtcblxuICAgIHdoaWxlIChwICYmIHAueiA+PSBtaW5aKSB7XG4gICAgICAgIGlmIChwICE9PSBlYXIucHJldiAmJiBwICE9PSBlYXIubmV4dCAmJlxuICAgICAgICAgICAgcG9pbnRJblRyaWFuZ2xlKGEueCwgYS55LCBiLngsIGIueSwgYy54LCBjLnksIHAueCwgcC55KSAmJlxuICAgICAgICAgICAgYXJlYShwLnByZXYsIHAsIHAubmV4dCkgPj0gMCkgcmV0dXJuIGZhbHNlO1xuICAgICAgICBwID0gcC5wcmV2WjtcbiAgICB9XG5cbiAgICByZXR1cm4gdHJ1ZTtcbn1cblxuLy8gZ28gdGhyb3VnaCBhbGwgcG9seWdvbiBub2RlcyBhbmQgY3VyZSBzbWFsbCBsb2NhbCBzZWxmLWludGVyc2VjdGlvbnNcbmZ1bmN0aW9uIGN1cmVMb2NhbEludGVyc2VjdGlvbnMoc3RhcnQsIHRyaWFuZ2xlcywgZGltKSB7XG4gICAgdmFyIHAgPSBzdGFydDtcbiAgICBkbyB7XG4gICAgICAgIHZhciBhID0gcC5wcmV2LFxuICAgICAgICAgICAgYiA9IHAubmV4dC5uZXh0O1xuXG4gICAgICAgIC8vIGEgc2VsZi1pbnRlcnNlY3Rpb24gd2hlcmUgZWRnZSAodltpLTFdLHZbaV0pIGludGVyc2VjdHMgKHZbaSsxXSx2W2krMl0pXG4gICAgICAgIGlmIChpbnRlcnNlY3RzKGEsIHAsIHAubmV4dCwgYikgJiYgbG9jYWxseUluc2lkZShhLCBiKSAmJiBsb2NhbGx5SW5zaWRlKGIsIGEpKSB7XG5cbiAgICAgICAgICAgIHRyaWFuZ2xlcy5wdXNoKGEuaSAvIGRpbSk7XG4gICAgICAgICAgICB0cmlhbmdsZXMucHVzaChwLmkgLyBkaW0pO1xuICAgICAgICAgICAgdHJpYW5nbGVzLnB1c2goYi5pIC8gZGltKTtcblxuICAgICAgICAgICAgLy8gcmVtb3ZlIHR3byBub2RlcyBpbnZvbHZlZFxuICAgICAgICAgICAgcmVtb3ZlTm9kZShwKTtcbiAgICAgICAgICAgIHJlbW92ZU5vZGUocC5uZXh0KTtcblxuICAgICAgICAgICAgcCA9IHN0YXJ0ID0gYjtcbiAgICAgICAgfVxuICAgICAgICBwID0gcC5uZXh0O1xuICAgIH0gd2hpbGUgKHAgIT09IHN0YXJ0KTtcblxuICAgIHJldHVybiBwO1xufVxuXG4vLyB0cnkgc3BsaXR0aW5nIHBvbHlnb24gaW50byB0d28gYW5kIHRyaWFuZ3VsYXRlIHRoZW0gaW5kZXBlbmRlbnRseVxuZnVuY3Rpb24gc3BsaXRFYXJjdXQoc3RhcnQsIHRyaWFuZ2xlcywgZGltLCBtaW5YLCBtaW5ZLCBzaXplKSB7XG4gICAgLy8gbG9vayBmb3IgYSB2YWxpZCBkaWFnb25hbCB0aGF0IGRpdmlkZXMgdGhlIHBvbHlnb24gaW50byB0d29cbiAgICB2YXIgYSA9IHN0YXJ0O1xuICAgIGRvIHtcbiAgICAgICAgdmFyIGIgPSBhLm5leHQubmV4dDtcbiAgICAgICAgd2hpbGUgKGIgIT09IGEucHJldikge1xuICAgICAgICAgICAgaWYgKGEuaSAhPT0gYi5pICYmIGlzVmFsaWREaWFnb25hbChhLCBiKSkge1xuICAgICAgICAgICAgICAgIC8vIHNwbGl0IHRoZSBwb2x5Z29uIGluIHR3byBieSB0aGUgZGlhZ29uYWxcbiAgICAgICAgICAgICAgICB2YXIgYyA9IHNwbGl0UG9seWdvbihhLCBiKTtcblxuICAgICAgICAgICAgICAgIC8vIGZpbHRlciBjb2xpbmVhciBwb2ludHMgYXJvdW5kIHRoZSBjdXRzXG4gICAgICAgICAgICAgICAgYSA9IGZpbHRlclBvaW50cyhhLCBhLm5leHQpO1xuICAgICAgICAgICAgICAgIGMgPSBmaWx0ZXJQb2ludHMoYywgYy5uZXh0KTtcblxuICAgICAgICAgICAgICAgIC8vIHJ1biBlYXJjdXQgb24gZWFjaCBoYWxmXG4gICAgICAgICAgICAgICAgZWFyY3V0TGlua2VkKGEsIHRyaWFuZ2xlcywgZGltLCBtaW5YLCBtaW5ZLCBzaXplKTtcbiAgICAgICAgICAgICAgICBlYXJjdXRMaW5rZWQoYywgdHJpYW5nbGVzLCBkaW0sIG1pblgsIG1pblksIHNpemUpO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGIgPSBiLm5leHQ7XG4gICAgICAgIH1cbiAgICAgICAgYSA9IGEubmV4dDtcbiAgICB9IHdoaWxlIChhICE9PSBzdGFydCk7XG59XG5cbi8vIGxpbmsgZXZlcnkgaG9sZSBpbnRvIHRoZSBvdXRlciBsb29wLCBwcm9kdWNpbmcgYSBzaW5nbGUtcmluZyBwb2x5Z29uIHdpdGhvdXQgaG9sZXNcbmZ1bmN0aW9uIGVsaW1pbmF0ZUhvbGVzKGRhdGEsIGhvbGVJbmRpY2VzLCBvdXRlck5vZGUsIGRpbSkge1xuICAgIHZhciBxdWV1ZSA9IFtdLFxuICAgICAgICBpLCBsZW4sIHN0YXJ0LCBlbmQsIGxpc3Q7XG5cbiAgICBmb3IgKGkgPSAwLCBsZW4gPSBob2xlSW5kaWNlcy5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuICAgICAgICBzdGFydCA9IGhvbGVJbmRpY2VzW2ldICogZGltO1xuICAgICAgICBlbmQgPSBpIDwgbGVuIC0gMSA/IGhvbGVJbmRpY2VzW2kgKyAxXSAqIGRpbSA6IGRhdGEubGVuZ3RoO1xuICAgICAgICBsaXN0ID0gbGlua2VkTGlzdChkYXRhLCBzdGFydCwgZW5kLCBkaW0sIGZhbHNlKTtcbiAgICAgICAgaWYgKGxpc3QgPT09IGxpc3QubmV4dCkgbGlzdC5zdGVpbmVyID0gdHJ1ZTtcbiAgICAgICAgcXVldWUucHVzaChnZXRMZWZ0bW9zdChsaXN0KSk7XG4gICAgfVxuXG4gICAgcXVldWUuc29ydChjb21wYXJlWCk7XG5cbiAgICAvLyBwcm9jZXNzIGhvbGVzIGZyb20gbGVmdCB0byByaWdodFxuICAgIGZvciAoaSA9IDA7IGkgPCBxdWV1ZS5sZW5ndGg7IGkrKykge1xuICAgICAgICBlbGltaW5hdGVIb2xlKHF1ZXVlW2ldLCBvdXRlck5vZGUpO1xuICAgICAgICBvdXRlck5vZGUgPSBmaWx0ZXJQb2ludHMob3V0ZXJOb2RlLCBvdXRlck5vZGUubmV4dCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG91dGVyTm9kZTtcbn1cblxuZnVuY3Rpb24gY29tcGFyZVgoYSwgYikge1xuICAgIHJldHVybiBhLnggLSBiLng7XG59XG5cbi8vIGZpbmQgYSBicmlkZ2UgYmV0d2VlbiB2ZXJ0aWNlcyB0aGF0IGNvbm5lY3RzIGhvbGUgd2l0aCBhbiBvdXRlciByaW5nIGFuZCBhbmQgbGluayBpdFxuZnVuY3Rpb24gZWxpbWluYXRlSG9sZShob2xlLCBvdXRlck5vZGUpIHtcbiAgICBvdXRlck5vZGUgPSBmaW5kSG9sZUJyaWRnZShob2xlLCBvdXRlck5vZGUpO1xuICAgIGlmIChvdXRlck5vZGUpIHtcbiAgICAgICAgdmFyIGIgPSBzcGxpdFBvbHlnb24ob3V0ZXJOb2RlLCBob2xlKTtcbiAgICAgICAgZmlsdGVyUG9pbnRzKGIsIGIubmV4dCk7XG4gICAgfVxufVxuXG4vLyBEYXZpZCBFYmVybHkncyBhbGdvcml0aG0gZm9yIGZpbmRpbmcgYSBicmlkZ2UgYmV0d2VlbiBob2xlIGFuZCBvdXRlciBwb2x5Z29uXG5mdW5jdGlvbiBmaW5kSG9sZUJyaWRnZShob2xlLCBvdXRlck5vZGUpIHtcbiAgICB2YXIgcCA9IG91dGVyTm9kZSxcbiAgICAgICAgaHggPSBob2xlLngsXG4gICAgICAgIGh5ID0gaG9sZS55LFxuICAgICAgICBxeCA9IC1JbmZpbml0eSxcbiAgICAgICAgbTtcblxuICAgIC8vIGZpbmQgYSBzZWdtZW50IGludGVyc2VjdGVkIGJ5IGEgcmF5IGZyb20gdGhlIGhvbGUncyBsZWZ0bW9zdCBwb2ludCB0byB0aGUgbGVmdDtcbiAgICAvLyBzZWdtZW50J3MgZW5kcG9pbnQgd2l0aCBsZXNzZXIgeCB3aWxsIGJlIHBvdGVudGlhbCBjb25uZWN0aW9uIHBvaW50XG4gICAgZG8ge1xuICAgICAgICBpZiAoaHkgPD0gcC55ICYmIGh5ID49IHAubmV4dC55KSB7XG4gICAgICAgICAgICB2YXIgeCA9IHAueCArIChoeSAtIHAueSkgKiAocC5uZXh0LnggLSBwLngpIC8gKHAubmV4dC55IC0gcC55KTtcbiAgICAgICAgICAgIGlmICh4IDw9IGh4ICYmIHggPiBxeCkge1xuICAgICAgICAgICAgICAgIHF4ID0geDtcbiAgICAgICAgICAgICAgICBtID0gcC54IDwgcC5uZXh0LnggPyBwIDogcC5uZXh0O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHAgPSBwLm5leHQ7XG4gICAgfSB3aGlsZSAocCAhPT0gb3V0ZXJOb2RlKTtcblxuICAgIGlmICghbSkgcmV0dXJuIG51bGw7XG5cbiAgICAvLyBsb29rIGZvciBwb2ludHMgaW5zaWRlIHRoZSB0cmlhbmdsZSBvZiBob2xlIHBvaW50LCBzZWdtZW50IGludGVyc2VjdGlvbiBhbmQgZW5kcG9pbnQ7XG4gICAgLy8gaWYgdGhlcmUgYXJlIG5vIHBvaW50cyBmb3VuZCwgd2UgaGF2ZSBhIHZhbGlkIGNvbm5lY3Rpb247XG4gICAgLy8gb3RoZXJ3aXNlIGNob29zZSB0aGUgcG9pbnQgb2YgdGhlIG1pbmltdW0gYW5nbGUgd2l0aCB0aGUgcmF5IGFzIGNvbm5lY3Rpb24gcG9pbnRcblxuICAgIHZhciBzdG9wID0gbSxcbiAgICAgICAgdGFuTWluID0gSW5maW5pdHksXG4gICAgICAgIHRhbjtcblxuICAgIHAgPSBtLm5leHQ7XG5cbiAgICB3aGlsZSAocCAhPT0gc3RvcCkge1xuICAgICAgICBpZiAoaHggPj0gcC54ICYmIHAueCA+PSBtLnggJiZcbiAgICAgICAgICAgICAgICBwb2ludEluVHJpYW5nbGUoaHkgPCBtLnkgPyBoeCA6IHF4LCBoeSwgbS54LCBtLnksIGh5IDwgbS55ID8gcXggOiBoeCwgaHksIHAueCwgcC55KSkge1xuXG4gICAgICAgICAgICB0YW4gPSBNYXRoLmFicyhoeSAtIHAueSkgLyAoaHggLSBwLngpOyAvLyB0YW5nZW50aWFsXG5cbiAgICAgICAgICAgIGlmICgodGFuIDwgdGFuTWluIHx8ICh0YW4gPT09IHRhbk1pbiAmJiBwLnggPiBtLngpKSAmJiBsb2NhbGx5SW5zaWRlKHAsIGhvbGUpKSB7XG4gICAgICAgICAgICAgICAgbSA9IHA7XG4gICAgICAgICAgICAgICAgdGFuTWluID0gdGFuO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcCA9IHAubmV4dDtcbiAgICB9XG5cbiAgICByZXR1cm4gbTtcbn1cblxuLy8gaW50ZXJsaW5rIHBvbHlnb24gbm9kZXMgaW4gei1vcmRlclxuZnVuY3Rpb24gaW5kZXhDdXJ2ZShzdGFydCwgbWluWCwgbWluWSwgc2l6ZSkge1xuICAgIHZhciBwID0gc3RhcnQ7XG4gICAgZG8ge1xuICAgICAgICBpZiAocC56ID09PSBudWxsKSBwLnogPSB6T3JkZXIocC54LCBwLnksIG1pblgsIG1pblksIHNpemUpO1xuICAgICAgICBwLnByZXZaID0gcC5wcmV2O1xuICAgICAgICBwLm5leHRaID0gcC5uZXh0O1xuICAgICAgICBwID0gcC5uZXh0O1xuICAgIH0gd2hpbGUgKHAgIT09IHN0YXJ0KTtcblxuICAgIHAucHJldloubmV4dFogPSBudWxsO1xuICAgIHAucHJldlogPSBudWxsO1xuXG4gICAgc29ydExpbmtlZChwKTtcbn1cblxuLy8gU2ltb24gVGF0aGFtJ3MgbGlua2VkIGxpc3QgbWVyZ2Ugc29ydCBhbGdvcml0aG1cbi8vIGh0dHA6Ly93d3cuY2hpYXJrLmdyZWVuZW5kLm9yZy51ay9+c2d0YXRoYW0vYWxnb3JpdGhtcy9saXN0c29ydC5odG1sXG5mdW5jdGlvbiBzb3J0TGlua2VkKGxpc3QpIHtcbiAgICB2YXIgaSwgcCwgcSwgZSwgdGFpbCwgbnVtTWVyZ2VzLCBwU2l6ZSwgcVNpemUsXG4gICAgICAgIGluU2l6ZSA9IDE7XG5cbiAgICBkbyB7XG4gICAgICAgIHAgPSBsaXN0O1xuICAgICAgICBsaXN0ID0gbnVsbDtcbiAgICAgICAgdGFpbCA9IG51bGw7XG4gICAgICAgIG51bU1lcmdlcyA9IDA7XG5cbiAgICAgICAgd2hpbGUgKHApIHtcbiAgICAgICAgICAgIG51bU1lcmdlcysrO1xuICAgICAgICAgICAgcSA9IHA7XG4gICAgICAgICAgICBwU2l6ZSA9IDA7XG4gICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgaW5TaXplOyBpKyspIHtcbiAgICAgICAgICAgICAgICBwU2l6ZSsrO1xuICAgICAgICAgICAgICAgIHEgPSBxLm5leHRaO1xuICAgICAgICAgICAgICAgIGlmICghcSkgYnJlYWs7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHFTaXplID0gaW5TaXplO1xuXG4gICAgICAgICAgICB3aGlsZSAocFNpemUgPiAwIHx8IChxU2l6ZSA+IDAgJiYgcSkpIHtcblxuICAgICAgICAgICAgICAgIGlmIChwU2l6ZSA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICBlID0gcTtcbiAgICAgICAgICAgICAgICAgICAgcSA9IHEubmV4dFo7XG4gICAgICAgICAgICAgICAgICAgIHFTaXplLS07XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChxU2l6ZSA9PT0gMCB8fCAhcSkge1xuICAgICAgICAgICAgICAgICAgICBlID0gcDtcbiAgICAgICAgICAgICAgICAgICAgcCA9IHAubmV4dFo7XG4gICAgICAgICAgICAgICAgICAgIHBTaXplLS07XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChwLnogPD0gcS56KSB7XG4gICAgICAgICAgICAgICAgICAgIGUgPSBwO1xuICAgICAgICAgICAgICAgICAgICBwID0gcC5uZXh0WjtcbiAgICAgICAgICAgICAgICAgICAgcFNpemUtLTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBlID0gcTtcbiAgICAgICAgICAgICAgICAgICAgcSA9IHEubmV4dFo7XG4gICAgICAgICAgICAgICAgICAgIHFTaXplLS07XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKHRhaWwpIHRhaWwubmV4dFogPSBlO1xuICAgICAgICAgICAgICAgIGVsc2UgbGlzdCA9IGU7XG5cbiAgICAgICAgICAgICAgICBlLnByZXZaID0gdGFpbDtcbiAgICAgICAgICAgICAgICB0YWlsID0gZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcCA9IHE7XG4gICAgICAgIH1cblxuICAgICAgICB0YWlsLm5leHRaID0gbnVsbDtcbiAgICAgICAgaW5TaXplICo9IDI7XG5cbiAgICB9IHdoaWxlIChudW1NZXJnZXMgPiAxKTtcblxuICAgIHJldHVybiBsaXN0O1xufVxuXG4vLyB6LW9yZGVyIG9mIGEgcG9pbnQgZ2l2ZW4gY29vcmRzIGFuZCBzaXplIG9mIHRoZSBkYXRhIGJvdW5kaW5nIGJveFxuZnVuY3Rpb24gek9yZGVyKHgsIHksIG1pblgsIG1pblksIHNpemUpIHtcbiAgICAvLyBjb29yZHMgYXJlIHRyYW5zZm9ybWVkIGludG8gbm9uLW5lZ2F0aXZlIDE1LWJpdCBpbnRlZ2VyIHJhbmdlXG4gICAgeCA9IDMyNzY3ICogKHggLSBtaW5YKSAvIHNpemU7XG4gICAgeSA9IDMyNzY3ICogKHkgLSBtaW5ZKSAvIHNpemU7XG5cbiAgICB4ID0gKHggfCAoeCA8PCA4KSkgJiAweDAwRkYwMEZGO1xuICAgIHggPSAoeCB8ICh4IDw8IDQpKSAmIDB4MEYwRjBGMEY7XG4gICAgeCA9ICh4IHwgKHggPDwgMikpICYgMHgzMzMzMzMzMztcbiAgICB4ID0gKHggfCAoeCA8PCAxKSkgJiAweDU1NTU1NTU1O1xuXG4gICAgeSA9ICh5IHwgKHkgPDwgOCkpICYgMHgwMEZGMDBGRjtcbiAgICB5ID0gKHkgfCAoeSA8PCA0KSkgJiAweDBGMEYwRjBGO1xuICAgIHkgPSAoeSB8ICh5IDw8IDIpKSAmIDB4MzMzMzMzMzM7XG4gICAgeSA9ICh5IHwgKHkgPDwgMSkpICYgMHg1NTU1NTU1NTtcblxuICAgIHJldHVybiB4IHwgKHkgPDwgMSk7XG59XG5cbi8vIGZpbmQgdGhlIGxlZnRtb3N0IG5vZGUgb2YgYSBwb2x5Z29uIHJpbmdcbmZ1bmN0aW9uIGdldExlZnRtb3N0KHN0YXJ0KSB7XG4gICAgdmFyIHAgPSBzdGFydCxcbiAgICAgICAgbGVmdG1vc3QgPSBzdGFydDtcbiAgICBkbyB7XG4gICAgICAgIGlmIChwLnggPCBsZWZ0bW9zdC54KSBsZWZ0bW9zdCA9IHA7XG4gICAgICAgIHAgPSBwLm5leHQ7XG4gICAgfSB3aGlsZSAocCAhPT0gc3RhcnQpO1xuXG4gICAgcmV0dXJuIGxlZnRtb3N0O1xufVxuXG4vLyBjaGVjayBpZiBhIHBvaW50IGxpZXMgd2l0aGluIGEgY29udmV4IHRyaWFuZ2xlXG5mdW5jdGlvbiBwb2ludEluVHJpYW5nbGUoYXgsIGF5LCBieCwgYnksIGN4LCBjeSwgcHgsIHB5KSB7XG4gICAgcmV0dXJuIChjeCAtIHB4KSAqIChheSAtIHB5KSAtIChheCAtIHB4KSAqIChjeSAtIHB5KSA+PSAwICYmXG4gICAgICAgICAgIChheCAtIHB4KSAqIChieSAtIHB5KSAtIChieCAtIHB4KSAqIChheSAtIHB5KSA+PSAwICYmXG4gICAgICAgICAgIChieCAtIHB4KSAqIChjeSAtIHB5KSAtIChjeCAtIHB4KSAqIChieSAtIHB5KSA+PSAwO1xufVxuXG4vLyBjaGVjayBpZiBhIGRpYWdvbmFsIGJldHdlZW4gdHdvIHBvbHlnb24gbm9kZXMgaXMgdmFsaWQgKGxpZXMgaW4gcG9seWdvbiBpbnRlcmlvcilcbmZ1bmN0aW9uIGlzVmFsaWREaWFnb25hbChhLCBiKSB7XG4gICAgcmV0dXJuIGVxdWFscyhhLCBiKSB8fCBhLm5leHQuaSAhPT0gYi5pICYmIGEucHJldi5pICE9PSBiLmkgJiYgIWludGVyc2VjdHNQb2x5Z29uKGEsIGIpICYmXG4gICAgICAgICAgIGxvY2FsbHlJbnNpZGUoYSwgYikgJiYgbG9jYWxseUluc2lkZShiLCBhKSAmJiBtaWRkbGVJbnNpZGUoYSwgYik7XG59XG5cbi8vIHNpZ25lZCBhcmVhIG9mIGEgdHJpYW5nbGVcbmZ1bmN0aW9uIGFyZWEocCwgcSwgcikge1xuICAgIHJldHVybiAocS55IC0gcC55KSAqIChyLnggLSBxLngpIC0gKHEueCAtIHAueCkgKiAoci55IC0gcS55KTtcbn1cblxuLy8gY2hlY2sgaWYgdHdvIHBvaW50cyBhcmUgZXF1YWxcbmZ1bmN0aW9uIGVxdWFscyhwMSwgcDIpIHtcbiAgICByZXR1cm4gcDEueCA9PT0gcDIueCAmJiBwMS55ID09PSBwMi55O1xufVxuXG4vLyBjaGVjayBpZiB0d28gc2VnbWVudHMgaW50ZXJzZWN0XG5mdW5jdGlvbiBpbnRlcnNlY3RzKHAxLCBxMSwgcDIsIHEyKSB7XG4gICAgcmV0dXJuIGFyZWEocDEsIHExLCBwMikgPiAwICE9PSBhcmVhKHAxLCBxMSwgcTIpID4gMCAmJlxuICAgICAgICAgICBhcmVhKHAyLCBxMiwgcDEpID4gMCAhPT0gYXJlYShwMiwgcTIsIHExKSA+IDA7XG59XG5cbi8vIGNoZWNrIGlmIGEgcG9seWdvbiBkaWFnb25hbCBpbnRlcnNlY3RzIGFueSBwb2x5Z29uIHNlZ21lbnRzXG5mdW5jdGlvbiBpbnRlcnNlY3RzUG9seWdvbihhLCBiKSB7XG4gICAgdmFyIHAgPSBhO1xuICAgIGRvIHtcbiAgICAgICAgaWYgKHAuaSAhPT0gYS5pICYmIHAubmV4dC5pICE9PSBhLmkgJiYgcC5pICE9PSBiLmkgJiYgcC5uZXh0LmkgIT09IGIuaSAmJlxuICAgICAgICAgICAgICAgIGludGVyc2VjdHMocCwgcC5uZXh0LCBhLCBiKSkgcmV0dXJuIHRydWU7XG4gICAgICAgIHAgPSBwLm5leHQ7XG4gICAgfSB3aGlsZSAocCAhPT0gYSk7XG5cbiAgICByZXR1cm4gZmFsc2U7XG59XG5cbi8vIGNoZWNrIGlmIGEgcG9seWdvbiBkaWFnb25hbCBpcyBsb2NhbGx5IGluc2lkZSB0aGUgcG9seWdvblxuZnVuY3Rpb24gbG9jYWxseUluc2lkZShhLCBiKSB7XG4gICAgcmV0dXJuIGFyZWEoYS5wcmV2LCBhLCBhLm5leHQpIDwgMCA/XG4gICAgICAgIGFyZWEoYSwgYiwgYS5uZXh0KSA+PSAwICYmIGFyZWEoYSwgYS5wcmV2LCBiKSA+PSAwIDpcbiAgICAgICAgYXJlYShhLCBiLCBhLnByZXYpIDwgMCB8fCBhcmVhKGEsIGEubmV4dCwgYikgPCAwO1xufVxuXG4vLyBjaGVjayBpZiB0aGUgbWlkZGxlIHBvaW50IG9mIGEgcG9seWdvbiBkaWFnb25hbCBpcyBpbnNpZGUgdGhlIHBvbHlnb25cbmZ1bmN0aW9uIG1pZGRsZUluc2lkZShhLCBiKSB7XG4gICAgdmFyIHAgPSBhLFxuICAgICAgICBpbnNpZGUgPSBmYWxzZSxcbiAgICAgICAgcHggPSAoYS54ICsgYi54KSAvIDIsXG4gICAgICAgIHB5ID0gKGEueSArIGIueSkgLyAyO1xuICAgIGRvIHtcbiAgICAgICAgaWYgKCgocC55ID4gcHkpICE9PSAocC5uZXh0LnkgPiBweSkpICYmIChweCA8IChwLm5leHQueCAtIHAueCkgKiAocHkgLSBwLnkpIC8gKHAubmV4dC55IC0gcC55KSArIHAueCkpXG4gICAgICAgICAgICBpbnNpZGUgPSAhaW5zaWRlO1xuICAgICAgICBwID0gcC5uZXh0O1xuICAgIH0gd2hpbGUgKHAgIT09IGEpO1xuXG4gICAgcmV0dXJuIGluc2lkZTtcbn1cblxuLy8gbGluayB0d28gcG9seWdvbiB2ZXJ0aWNlcyB3aXRoIGEgYnJpZGdlOyBpZiB0aGUgdmVydGljZXMgYmVsb25nIHRvIHRoZSBzYW1lIHJpbmcsIGl0IHNwbGl0cyBwb2x5Z29uIGludG8gdHdvO1xuLy8gaWYgb25lIGJlbG9uZ3MgdG8gdGhlIG91dGVyIHJpbmcgYW5kIGFub3RoZXIgdG8gYSBob2xlLCBpdCBtZXJnZXMgaXQgaW50byBhIHNpbmdsZSByaW5nXG5mdW5jdGlvbiBzcGxpdFBvbHlnb24oYSwgYikge1xuICAgIHZhciBhMiA9IG5ldyBOb2RlKGEuaSwgYS54LCBhLnkpLFxuICAgICAgICBiMiA9IG5ldyBOb2RlKGIuaSwgYi54LCBiLnkpLFxuICAgICAgICBhbiA9IGEubmV4dCxcbiAgICAgICAgYnAgPSBiLnByZXY7XG5cbiAgICBhLm5leHQgPSBiO1xuICAgIGIucHJldiA9IGE7XG5cbiAgICBhMi5uZXh0ID0gYW47XG4gICAgYW4ucHJldiA9IGEyO1xuXG4gICAgYjIubmV4dCA9IGEyO1xuICAgIGEyLnByZXYgPSBiMjtcblxuICAgIGJwLm5leHQgPSBiMjtcbiAgICBiMi5wcmV2ID0gYnA7XG5cbiAgICByZXR1cm4gYjI7XG59XG5cbi8vIGNyZWF0ZSBhIG5vZGUgYW5kIG9wdGlvbmFsbHkgbGluayBpdCB3aXRoIHByZXZpb3VzIG9uZSAoaW4gYSBjaXJjdWxhciBkb3VibHkgbGlua2VkIGxpc3QpXG5mdW5jdGlvbiBpbnNlcnROb2RlKGksIHgsIHksIGxhc3QpIHtcbiAgICB2YXIgcCA9IG5ldyBOb2RlKGksIHgsIHkpO1xuXG4gICAgaWYgKCFsYXN0KSB7XG4gICAgICAgIHAucHJldiA9IHA7XG4gICAgICAgIHAubmV4dCA9IHA7XG5cbiAgICB9IGVsc2Uge1xuICAgICAgICBwLm5leHQgPSBsYXN0Lm5leHQ7XG4gICAgICAgIHAucHJldiA9IGxhc3Q7XG4gICAgICAgIGxhc3QubmV4dC5wcmV2ID0gcDtcbiAgICAgICAgbGFzdC5uZXh0ID0gcDtcbiAgICB9XG4gICAgcmV0dXJuIHA7XG59XG5cbmZ1bmN0aW9uIHJlbW92ZU5vZGUocCkge1xuICAgIHAubmV4dC5wcmV2ID0gcC5wcmV2O1xuICAgIHAucHJldi5uZXh0ID0gcC5uZXh0O1xuXG4gICAgaWYgKHAucHJldlopIHAucHJldloubmV4dFogPSBwLm5leHRaO1xuICAgIGlmIChwLm5leHRaKSBwLm5leHRaLnByZXZaID0gcC5wcmV2Wjtcbn1cblxuZnVuY3Rpb24gTm9kZShpLCB4LCB5KSB7XG4gICAgLy8gdmVydGljZSBpbmRleCBpbiBjb29yZGluYXRlcyBhcnJheVxuICAgIHRoaXMuaSA9IGk7XG5cbiAgICAvLyB2ZXJ0ZXggY29vcmRpbmF0ZXNcbiAgICB0aGlzLnggPSB4O1xuICAgIHRoaXMueSA9IHk7XG5cbiAgICAvLyBwcmV2aW91cyBhbmQgbmV4dCB2ZXJ0aWNlIG5vZGVzIGluIGEgcG9seWdvbiByaW5nXG4gICAgdGhpcy5wcmV2ID0gbnVsbDtcbiAgICB0aGlzLm5leHQgPSBudWxsO1xuXG4gICAgLy8gei1vcmRlciBjdXJ2ZSB2YWx1ZVxuICAgIHRoaXMueiA9IG51bGw7XG5cbiAgICAvLyBwcmV2aW91cyBhbmQgbmV4dCBub2RlcyBpbiB6LW9yZGVyXG4gICAgdGhpcy5wcmV2WiA9IG51bGw7XG4gICAgdGhpcy5uZXh0WiA9IG51bGw7XG5cbiAgICAvLyBpbmRpY2F0ZXMgd2hldGhlciB0aGlzIGlzIGEgc3RlaW5lciBwb2ludFxuICAgIHRoaXMuc3RlaW5lciA9IGZhbHNlO1xufVxuIiwiJ3VzZSBzdHJpY3QnO1xuXG4vL1xuLy8gV2Ugc3RvcmUgb3VyIEVFIG9iamVjdHMgaW4gYSBwbGFpbiBvYmplY3Qgd2hvc2UgcHJvcGVydGllcyBhcmUgZXZlbnQgbmFtZXMuXG4vLyBJZiBgT2JqZWN0LmNyZWF0ZShudWxsKWAgaXMgbm90IHN1cHBvcnRlZCB3ZSBwcmVmaXggdGhlIGV2ZW50IG5hbWVzIHdpdGggYVxuLy8gYH5gIHRvIG1ha2Ugc3VyZSB0aGF0IHRoZSBidWlsdC1pbiBvYmplY3QgcHJvcGVydGllcyBhcmUgbm90IG92ZXJyaWRkZW4gb3Jcbi8vIHVzZWQgYXMgYW4gYXR0YWNrIHZlY3Rvci5cbi8vIFdlIGFsc28gYXNzdW1lIHRoYXQgYE9iamVjdC5jcmVhdGUobnVsbClgIGlzIGF2YWlsYWJsZSB3aGVuIHRoZSBldmVudCBuYW1lXG4vLyBpcyBhbiBFUzYgU3ltYm9sLlxuLy9cbnZhciBwcmVmaXggPSB0eXBlb2YgT2JqZWN0LmNyZWF0ZSAhPT0gJ2Z1bmN0aW9uJyA/ICd+JyA6IGZhbHNlO1xuXG4vKipcbiAqIFJlcHJlc2VudGF0aW9uIG9mIGEgc2luZ2xlIEV2ZW50RW1pdHRlciBmdW5jdGlvbi5cbiAqXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmbiBFdmVudCBoYW5kbGVyIHRvIGJlIGNhbGxlZC5cbiAqIEBwYXJhbSB7TWl4ZWR9IGNvbnRleHQgQ29udGV4dCBmb3IgZnVuY3Rpb24gZXhlY3V0aW9uLlxuICogQHBhcmFtIHtCb29sZWFufSBvbmNlIE9ubHkgZW1pdCBvbmNlXG4gKiBAYXBpIHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gRUUoZm4sIGNvbnRleHQsIG9uY2UpIHtcbiAgdGhpcy5mbiA9IGZuO1xuICB0aGlzLmNvbnRleHQgPSBjb250ZXh0O1xuICB0aGlzLm9uY2UgPSBvbmNlIHx8IGZhbHNlO1xufVxuXG4vKipcbiAqIE1pbmltYWwgRXZlbnRFbWl0dGVyIGludGVyZmFjZSB0aGF0IGlzIG1vbGRlZCBhZ2FpbnN0IHRoZSBOb2RlLmpzXG4gKiBFdmVudEVtaXR0ZXIgaW50ZXJmYWNlLlxuICpcbiAqIEBjb25zdHJ1Y3RvclxuICogQGFwaSBwdWJsaWNcbiAqL1xuZnVuY3Rpb24gRXZlbnRFbWl0dGVyKCkgeyAvKiBOb3RoaW5nIHRvIHNldCAqLyB9XG5cbi8qKlxuICogSG9sZHMgdGhlIGFzc2lnbmVkIEV2ZW50RW1pdHRlcnMgYnkgbmFtZS5cbiAqXG4gKiBAdHlwZSB7T2JqZWN0fVxuICogQHByaXZhdGVcbiAqL1xuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5fZXZlbnRzID0gdW5kZWZpbmVkO1xuXG4vKipcbiAqIFJldHVybiBhIGxpc3Qgb2YgYXNzaWduZWQgZXZlbnQgbGlzdGVuZXJzLlxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBldmVudCBUaGUgZXZlbnRzIHRoYXQgc2hvdWxkIGJlIGxpc3RlZC5cbiAqIEBwYXJhbSB7Qm9vbGVhbn0gZXhpc3RzIFdlIG9ubHkgbmVlZCB0byBrbm93IGlmIHRoZXJlIGFyZSBsaXN0ZW5lcnMuXG4gKiBAcmV0dXJucyB7QXJyYXl8Qm9vbGVhbn1cbiAqIEBhcGkgcHVibGljXG4gKi9cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUubGlzdGVuZXJzID0gZnVuY3Rpb24gbGlzdGVuZXJzKGV2ZW50LCBleGlzdHMpIHtcbiAgdmFyIGV2dCA9IHByZWZpeCA/IHByZWZpeCArIGV2ZW50IDogZXZlbnRcbiAgICAsIGF2YWlsYWJsZSA9IHRoaXMuX2V2ZW50cyAmJiB0aGlzLl9ldmVudHNbZXZ0XTtcblxuICBpZiAoZXhpc3RzKSByZXR1cm4gISFhdmFpbGFibGU7XG4gIGlmICghYXZhaWxhYmxlKSByZXR1cm4gW107XG4gIGlmIChhdmFpbGFibGUuZm4pIHJldHVybiBbYXZhaWxhYmxlLmZuXTtcblxuICBmb3IgKHZhciBpID0gMCwgbCA9IGF2YWlsYWJsZS5sZW5ndGgsIGVlID0gbmV3IEFycmF5KGwpOyBpIDwgbDsgaSsrKSB7XG4gICAgZWVbaV0gPSBhdmFpbGFibGVbaV0uZm47XG4gIH1cblxuICByZXR1cm4gZWU7XG59O1xuXG4vKipcbiAqIEVtaXQgYW4gZXZlbnQgdG8gYWxsIHJlZ2lzdGVyZWQgZXZlbnQgbGlzdGVuZXJzLlxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBldmVudCBUaGUgbmFtZSBvZiB0aGUgZXZlbnQuXG4gKiBAcmV0dXJucyB7Qm9vbGVhbn0gSW5kaWNhdGlvbiBpZiB3ZSd2ZSBlbWl0dGVkIGFuIGV2ZW50LlxuICogQGFwaSBwdWJsaWNcbiAqL1xuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5lbWl0ID0gZnVuY3Rpb24gZW1pdChldmVudCwgYTEsIGEyLCBhMywgYTQsIGE1KSB7XG4gIHZhciBldnQgPSBwcmVmaXggPyBwcmVmaXggKyBldmVudCA6IGV2ZW50O1xuXG4gIGlmICghdGhpcy5fZXZlbnRzIHx8ICF0aGlzLl9ldmVudHNbZXZ0XSkgcmV0dXJuIGZhbHNlO1xuXG4gIHZhciBsaXN0ZW5lcnMgPSB0aGlzLl9ldmVudHNbZXZ0XVxuICAgICwgbGVuID0gYXJndW1lbnRzLmxlbmd0aFxuICAgICwgYXJnc1xuICAgICwgaTtcblxuICBpZiAoJ2Z1bmN0aW9uJyA9PT0gdHlwZW9mIGxpc3RlbmVycy5mbikge1xuICAgIGlmIChsaXN0ZW5lcnMub25jZSkgdGhpcy5yZW1vdmVMaXN0ZW5lcihldmVudCwgbGlzdGVuZXJzLmZuLCB1bmRlZmluZWQsIHRydWUpO1xuXG4gICAgc3dpdGNoIChsZW4pIHtcbiAgICAgIGNhc2UgMTogcmV0dXJuIGxpc3RlbmVycy5mbi5jYWxsKGxpc3RlbmVycy5jb250ZXh0KSwgdHJ1ZTtcbiAgICAgIGNhc2UgMjogcmV0dXJuIGxpc3RlbmVycy5mbi5jYWxsKGxpc3RlbmVycy5jb250ZXh0LCBhMSksIHRydWU7XG4gICAgICBjYXNlIDM6IHJldHVybiBsaXN0ZW5lcnMuZm4uY2FsbChsaXN0ZW5lcnMuY29udGV4dCwgYTEsIGEyKSwgdHJ1ZTtcbiAgICAgIGNhc2UgNDogcmV0dXJuIGxpc3RlbmVycy5mbi5jYWxsKGxpc3RlbmVycy5jb250ZXh0LCBhMSwgYTIsIGEzKSwgdHJ1ZTtcbiAgICAgIGNhc2UgNTogcmV0dXJuIGxpc3RlbmVycy5mbi5jYWxsKGxpc3RlbmVycy5jb250ZXh0LCBhMSwgYTIsIGEzLCBhNCksIHRydWU7XG4gICAgICBjYXNlIDY6IHJldHVybiBsaXN0ZW5lcnMuZm4uY2FsbChsaXN0ZW5lcnMuY29udGV4dCwgYTEsIGEyLCBhMywgYTQsIGE1KSwgdHJ1ZTtcbiAgICB9XG5cbiAgICBmb3IgKGkgPSAxLCBhcmdzID0gbmV3IEFycmF5KGxlbiAtMSk7IGkgPCBsZW47IGkrKykge1xuICAgICAgYXJnc1tpIC0gMV0gPSBhcmd1bWVudHNbaV07XG4gICAgfVxuXG4gICAgbGlzdGVuZXJzLmZuLmFwcGx5KGxpc3RlbmVycy5jb250ZXh0LCBhcmdzKTtcbiAgfSBlbHNlIHtcbiAgICB2YXIgbGVuZ3RoID0gbGlzdGVuZXJzLmxlbmd0aFxuICAgICAgLCBqO1xuXG4gICAgZm9yIChpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAobGlzdGVuZXJzW2ldLm9uY2UpIHRoaXMucmVtb3ZlTGlzdGVuZXIoZXZlbnQsIGxpc3RlbmVyc1tpXS5mbiwgdW5kZWZpbmVkLCB0cnVlKTtcblxuICAgICAgc3dpdGNoIChsZW4pIHtcbiAgICAgICAgY2FzZSAxOiBsaXN0ZW5lcnNbaV0uZm4uY2FsbChsaXN0ZW5lcnNbaV0uY29udGV4dCk7IGJyZWFrO1xuICAgICAgICBjYXNlIDI6IGxpc3RlbmVyc1tpXS5mbi5jYWxsKGxpc3RlbmVyc1tpXS5jb250ZXh0LCBhMSk7IGJyZWFrO1xuICAgICAgICBjYXNlIDM6IGxpc3RlbmVyc1tpXS5mbi5jYWxsKGxpc3RlbmVyc1tpXS5jb250ZXh0LCBhMSwgYTIpOyBicmVhaztcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICBpZiAoIWFyZ3MpIGZvciAoaiA9IDEsIGFyZ3MgPSBuZXcgQXJyYXkobGVuIC0xKTsgaiA8IGxlbjsgaisrKSB7XG4gICAgICAgICAgICBhcmdzW2ogLSAxXSA9IGFyZ3VtZW50c1tqXTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBsaXN0ZW5lcnNbaV0uZm4uYXBwbHkobGlzdGVuZXJzW2ldLmNvbnRleHQsIGFyZ3MpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiB0cnVlO1xufTtcblxuLyoqXG4gKiBSZWdpc3RlciBhIG5ldyBFdmVudExpc3RlbmVyIGZvciB0aGUgZ2l2ZW4gZXZlbnQuXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IGV2ZW50IE5hbWUgb2YgdGhlIGV2ZW50LlxuICogQHBhcmFtIHtGdW5jdG9ufSBmbiBDYWxsYmFjayBmdW5jdGlvbi5cbiAqIEBwYXJhbSB7TWl4ZWR9IGNvbnRleHQgVGhlIGNvbnRleHQgb2YgdGhlIGZ1bmN0aW9uLlxuICogQGFwaSBwdWJsaWNcbiAqL1xuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5vbiA9IGZ1bmN0aW9uIG9uKGV2ZW50LCBmbiwgY29udGV4dCkge1xuICB2YXIgbGlzdGVuZXIgPSBuZXcgRUUoZm4sIGNvbnRleHQgfHwgdGhpcylcbiAgICAsIGV2dCA9IHByZWZpeCA/IHByZWZpeCArIGV2ZW50IDogZXZlbnQ7XG5cbiAgaWYgKCF0aGlzLl9ldmVudHMpIHRoaXMuX2V2ZW50cyA9IHByZWZpeCA/IHt9IDogT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgaWYgKCF0aGlzLl9ldmVudHNbZXZ0XSkgdGhpcy5fZXZlbnRzW2V2dF0gPSBsaXN0ZW5lcjtcbiAgZWxzZSB7XG4gICAgaWYgKCF0aGlzLl9ldmVudHNbZXZ0XS5mbikgdGhpcy5fZXZlbnRzW2V2dF0ucHVzaChsaXN0ZW5lcik7XG4gICAgZWxzZSB0aGlzLl9ldmVudHNbZXZ0XSA9IFtcbiAgICAgIHRoaXMuX2V2ZW50c1tldnRdLCBsaXN0ZW5lclxuICAgIF07XG4gIH1cblxuICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogQWRkIGFuIEV2ZW50TGlzdGVuZXIgdGhhdCdzIG9ubHkgY2FsbGVkIG9uY2UuXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IGV2ZW50IE5hbWUgb2YgdGhlIGV2ZW50LlxuICogQHBhcmFtIHtGdW5jdGlvbn0gZm4gQ2FsbGJhY2sgZnVuY3Rpb24uXG4gKiBAcGFyYW0ge01peGVkfSBjb250ZXh0IFRoZSBjb250ZXh0IG9mIHRoZSBmdW5jdGlvbi5cbiAqIEBhcGkgcHVibGljXG4gKi9cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUub25jZSA9IGZ1bmN0aW9uIG9uY2UoZXZlbnQsIGZuLCBjb250ZXh0KSB7XG4gIHZhciBsaXN0ZW5lciA9IG5ldyBFRShmbiwgY29udGV4dCB8fCB0aGlzLCB0cnVlKVxuICAgICwgZXZ0ID0gcHJlZml4ID8gcHJlZml4ICsgZXZlbnQgOiBldmVudDtcblxuICBpZiAoIXRoaXMuX2V2ZW50cykgdGhpcy5fZXZlbnRzID0gcHJlZml4ID8ge30gOiBPYmplY3QuY3JlYXRlKG51bGwpO1xuICBpZiAoIXRoaXMuX2V2ZW50c1tldnRdKSB0aGlzLl9ldmVudHNbZXZ0XSA9IGxpc3RlbmVyO1xuICBlbHNlIHtcbiAgICBpZiAoIXRoaXMuX2V2ZW50c1tldnRdLmZuKSB0aGlzLl9ldmVudHNbZXZ0XS5wdXNoKGxpc3RlbmVyKTtcbiAgICBlbHNlIHRoaXMuX2V2ZW50c1tldnRdID0gW1xuICAgICAgdGhpcy5fZXZlbnRzW2V2dF0sIGxpc3RlbmVyXG4gICAgXTtcbiAgfVxuXG4gIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBSZW1vdmUgZXZlbnQgbGlzdGVuZXJzLlxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBldmVudCBUaGUgZXZlbnQgd2Ugd2FudCB0byByZW1vdmUuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmbiBUaGUgbGlzdGVuZXIgdGhhdCB3ZSBuZWVkIHRvIGZpbmQuXG4gKiBAcGFyYW0ge01peGVkfSBjb250ZXh0IE9ubHkgcmVtb3ZlIGxpc3RlbmVycyBtYXRjaGluZyB0aGlzIGNvbnRleHQuXG4gKiBAcGFyYW0ge0Jvb2xlYW59IG9uY2UgT25seSByZW1vdmUgb25jZSBsaXN0ZW5lcnMuXG4gKiBAYXBpIHB1YmxpY1xuICovXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLnJlbW92ZUxpc3RlbmVyID0gZnVuY3Rpb24gcmVtb3ZlTGlzdGVuZXIoZXZlbnQsIGZuLCBjb250ZXh0LCBvbmNlKSB7XG4gIHZhciBldnQgPSBwcmVmaXggPyBwcmVmaXggKyBldmVudCA6IGV2ZW50O1xuXG4gIGlmICghdGhpcy5fZXZlbnRzIHx8ICF0aGlzLl9ldmVudHNbZXZ0XSkgcmV0dXJuIHRoaXM7XG5cbiAgdmFyIGxpc3RlbmVycyA9IHRoaXMuX2V2ZW50c1tldnRdXG4gICAgLCBldmVudHMgPSBbXTtcblxuICBpZiAoZm4pIHtcbiAgICBpZiAobGlzdGVuZXJzLmZuKSB7XG4gICAgICBpZiAoXG4gICAgICAgICAgIGxpc3RlbmVycy5mbiAhPT0gZm5cbiAgICAgICAgfHwgKG9uY2UgJiYgIWxpc3RlbmVycy5vbmNlKVxuICAgICAgICB8fCAoY29udGV4dCAmJiBsaXN0ZW5lcnMuY29udGV4dCAhPT0gY29udGV4dClcbiAgICAgICkge1xuICAgICAgICBldmVudHMucHVzaChsaXN0ZW5lcnMpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBmb3IgKHZhciBpID0gMCwgbGVuZ3RoID0gbGlzdGVuZXJzLmxlbmd0aDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICAgICBsaXN0ZW5lcnNbaV0uZm4gIT09IGZuXG4gICAgICAgICAgfHwgKG9uY2UgJiYgIWxpc3RlbmVyc1tpXS5vbmNlKVxuICAgICAgICAgIHx8IChjb250ZXh0ICYmIGxpc3RlbmVyc1tpXS5jb250ZXh0ICE9PSBjb250ZXh0KVxuICAgICAgICApIHtcbiAgICAgICAgICBldmVudHMucHVzaChsaXN0ZW5lcnNbaV0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLy9cbiAgLy8gUmVzZXQgdGhlIGFycmF5LCBvciByZW1vdmUgaXQgY29tcGxldGVseSBpZiB3ZSBoYXZlIG5vIG1vcmUgbGlzdGVuZXJzLlxuICAvL1xuICBpZiAoZXZlbnRzLmxlbmd0aCkge1xuICAgIHRoaXMuX2V2ZW50c1tldnRdID0gZXZlbnRzLmxlbmd0aCA9PT0gMSA/IGV2ZW50c1swXSA6IGV2ZW50cztcbiAgfSBlbHNlIHtcbiAgICBkZWxldGUgdGhpcy5fZXZlbnRzW2V2dF07XG4gIH1cblxuICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogUmVtb3ZlIGFsbCBsaXN0ZW5lcnMgb3Igb25seSB0aGUgbGlzdGVuZXJzIGZvciB0aGUgc3BlY2lmaWVkIGV2ZW50LlxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBldmVudCBUaGUgZXZlbnQgd2FudCB0byByZW1vdmUgYWxsIGxpc3RlbmVycyBmb3IuXG4gKiBAYXBpIHB1YmxpY1xuICovXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLnJlbW92ZUFsbExpc3RlbmVycyA9IGZ1bmN0aW9uIHJlbW92ZUFsbExpc3RlbmVycyhldmVudCkge1xuICBpZiAoIXRoaXMuX2V2ZW50cykgcmV0dXJuIHRoaXM7XG5cbiAgaWYgKGV2ZW50KSBkZWxldGUgdGhpcy5fZXZlbnRzW3ByZWZpeCA/IHByZWZpeCArIGV2ZW50IDogZXZlbnRdO1xuICBlbHNlIHRoaXMuX2V2ZW50cyA9IHByZWZpeCA/IHt9IDogT2JqZWN0LmNyZWF0ZShudWxsKTtcblxuICByZXR1cm4gdGhpcztcbn07XG5cbi8vXG4vLyBBbGlhcyBtZXRob2RzIG5hbWVzIGJlY2F1c2UgcGVvcGxlIHJvbGwgbGlrZSB0aGF0LlxuLy9cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUub2ZmID0gRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5yZW1vdmVMaXN0ZW5lcjtcbkV2ZW50RW1pdHRlci5wcm90b3R5cGUuYWRkTGlzdGVuZXIgPSBFdmVudEVtaXR0ZXIucHJvdG90eXBlLm9uO1xuXG4vL1xuLy8gVGhpcyBmdW5jdGlvbiBkb2Vzbid0IGFwcGx5IGFueW1vcmUuXG4vL1xuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5zZXRNYXhMaXN0ZW5lcnMgPSBmdW5jdGlvbiBzZXRNYXhMaXN0ZW5lcnMoKSB7XG4gIHJldHVybiB0aGlzO1xufTtcblxuLy9cbi8vIEV4cG9zZSB0aGUgcHJlZml4LlxuLy9cbkV2ZW50RW1pdHRlci5wcmVmaXhlZCA9IHByZWZpeDtcblxuLy9cbi8vIEV4cG9zZSB0aGUgbW9kdWxlLlxuLy9cbmlmICgndW5kZWZpbmVkJyAhPT0gdHlwZW9mIG1vZHVsZSkge1xuICBtb2R1bGUuZXhwb3J0cyA9IEV2ZW50RW1pdHRlcjtcbn1cbiIsIi8qIGVzbGludC1kaXNhYmxlIG5vLXVudXNlZC12YXJzICovXG4ndXNlIHN0cmljdCc7XG52YXIgaGFzT3duUHJvcGVydHkgPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O1xudmFyIHByb3BJc0VudW1lcmFibGUgPSBPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlO1xuXG5mdW5jdGlvbiB0b09iamVjdCh2YWwpIHtcblx0aWYgKHZhbCA9PT0gbnVsbCB8fCB2YWwgPT09IHVuZGVmaW5lZCkge1xuXHRcdHRocm93IG5ldyBUeXBlRXJyb3IoJ09iamVjdC5hc3NpZ24gY2Fubm90IGJlIGNhbGxlZCB3aXRoIG51bGwgb3IgdW5kZWZpbmVkJyk7XG5cdH1cblxuXHRyZXR1cm4gT2JqZWN0KHZhbCk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0LCBzb3VyY2UpIHtcblx0dmFyIGZyb207XG5cdHZhciB0byA9IHRvT2JqZWN0KHRhcmdldCk7XG5cdHZhciBzeW1ib2xzO1xuXG5cdGZvciAodmFyIHMgPSAxOyBzIDwgYXJndW1lbnRzLmxlbmd0aDsgcysrKSB7XG5cdFx0ZnJvbSA9IE9iamVjdChhcmd1bWVudHNbc10pO1xuXG5cdFx0Zm9yICh2YXIga2V5IGluIGZyb20pIHtcblx0XHRcdGlmIChoYXNPd25Qcm9wZXJ0eS5jYWxsKGZyb20sIGtleSkpIHtcblx0XHRcdFx0dG9ba2V5XSA9IGZyb21ba2V5XTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykge1xuXHRcdFx0c3ltYm9scyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZnJvbSk7XG5cdFx0XHRmb3IgKHZhciBpID0gMDsgaSA8IHN5bWJvbHMubGVuZ3RoOyBpKyspIHtcblx0XHRcdFx0aWYgKHByb3BJc0VudW1lcmFibGUuY2FsbChmcm9tLCBzeW1ib2xzW2ldKSkge1xuXHRcdFx0XHRcdHRvW3N5bWJvbHNbaV1dID0gZnJvbVtzeW1ib2xzW2ldXTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdHJldHVybiB0bztcbn07XG4iLCIvKiFcbiAqIGFzeW5jXG4gKiBodHRwczovL2dpdGh1Yi5jb20vY2FvbGFuL2FzeW5jXG4gKlxuICogQ29weXJpZ2h0IDIwMTAtMjAxNCBDYW9sYW4gTWNNYWhvblxuICogUmVsZWFzZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlXG4gKi9cbi8qanNoaW50IG9uZXZhcjogZmFsc2UsIGluZGVudDo0ICovXG4vKmdsb2JhbCBzZXRJbW1lZGlhdGU6IGZhbHNlLCBzZXRUaW1lb3V0OiBmYWxzZSwgY29uc29sZTogZmFsc2UgKi9cbihmdW5jdGlvbiAoKSB7XG5cbiAgICB2YXIgYXN5bmMgPSB7fTtcblxuICAgIC8vIGdsb2JhbCBvbiB0aGUgc2VydmVyLCB3aW5kb3cgaW4gdGhlIGJyb3dzZXJcbiAgICB2YXIgcm9vdCwgcHJldmlvdXNfYXN5bmM7XG5cbiAgICByb290ID0gdGhpcztcbiAgICBpZiAocm9vdCAhPSBudWxsKSB7XG4gICAgICBwcmV2aW91c19hc3luYyA9IHJvb3QuYXN5bmM7XG4gICAgfVxuXG4gICAgYXN5bmMubm9Db25mbGljdCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcm9vdC5hc3luYyA9IHByZXZpb3VzX2FzeW5jO1xuICAgICAgICByZXR1cm4gYXN5bmM7XG4gICAgfTtcblxuICAgIGZ1bmN0aW9uIG9ubHlfb25jZShmbikge1xuICAgICAgICB2YXIgY2FsbGVkID0gZmFsc2U7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIGlmIChjYWxsZWQpIHRocm93IG5ldyBFcnJvcihcIkNhbGxiYWNrIHdhcyBhbHJlYWR5IGNhbGxlZC5cIik7XG4gICAgICAgICAgICBjYWxsZWQgPSB0cnVlO1xuICAgICAgICAgICAgZm4uYXBwbHkocm9vdCwgYXJndW1lbnRzKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vLy8gY3Jvc3MtYnJvd3NlciBjb21wYXRpYmxpdHkgZnVuY3Rpb25zIC8vLy9cblxuICAgIHZhciBfdG9TdHJpbmcgPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nO1xuXG4gICAgdmFyIF9pc0FycmF5ID0gQXJyYXkuaXNBcnJheSB8fCBmdW5jdGlvbiAob2JqKSB7XG4gICAgICAgIHJldHVybiBfdG9TdHJpbmcuY2FsbChvYmopID09PSAnW29iamVjdCBBcnJheV0nO1xuICAgIH07XG5cbiAgICB2YXIgX2VhY2ggPSBmdW5jdGlvbiAoYXJyLCBpdGVyYXRvcikge1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFyci5sZW5ndGg7IGkgKz0gMSkge1xuICAgICAgICAgICAgaXRlcmF0b3IoYXJyW2ldLCBpLCBhcnIpO1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIHZhciBfbWFwID0gZnVuY3Rpb24gKGFyciwgaXRlcmF0b3IpIHtcbiAgICAgICAgaWYgKGFyci5tYXApIHtcbiAgICAgICAgICAgIHJldHVybiBhcnIubWFwKGl0ZXJhdG9yKTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgcmVzdWx0cyA9IFtdO1xuICAgICAgICBfZWFjaChhcnIsIGZ1bmN0aW9uICh4LCBpLCBhKSB7XG4gICAgICAgICAgICByZXN1bHRzLnB1c2goaXRlcmF0b3IoeCwgaSwgYSkpO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdHM7XG4gICAgfTtcblxuICAgIHZhciBfcmVkdWNlID0gZnVuY3Rpb24gKGFyciwgaXRlcmF0b3IsIG1lbW8pIHtcbiAgICAgICAgaWYgKGFyci5yZWR1Y2UpIHtcbiAgICAgICAgICAgIHJldHVybiBhcnIucmVkdWNlKGl0ZXJhdG9yLCBtZW1vKTtcbiAgICAgICAgfVxuICAgICAgICBfZWFjaChhcnIsIGZ1bmN0aW9uICh4LCBpLCBhKSB7XG4gICAgICAgICAgICBtZW1vID0gaXRlcmF0b3IobWVtbywgeCwgaSwgYSk7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gbWVtbztcbiAgICB9O1xuXG4gICAgdmFyIF9rZXlzID0gZnVuY3Rpb24gKG9iaikge1xuICAgICAgICBpZiAoT2JqZWN0LmtleXMpIHtcbiAgICAgICAgICAgIHJldHVybiBPYmplY3Qua2V5cyhvYmopO1xuICAgICAgICB9XG4gICAgICAgIHZhciBrZXlzID0gW107XG4gICAgICAgIGZvciAodmFyIGsgaW4gb2JqKSB7XG4gICAgICAgICAgICBpZiAob2JqLmhhc093blByb3BlcnR5KGspKSB7XG4gICAgICAgICAgICAgICAga2V5cy5wdXNoKGspO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBrZXlzO1xuICAgIH07XG5cbiAgICAvLy8vIGV4cG9ydGVkIGFzeW5jIG1vZHVsZSBmdW5jdGlvbnMgLy8vL1xuXG4gICAgLy8vLyBuZXh0VGljayBpbXBsZW1lbnRhdGlvbiB3aXRoIGJyb3dzZXItY29tcGF0aWJsZSBmYWxsYmFjayAvLy8vXG4gICAgaWYgKHR5cGVvZiBwcm9jZXNzID09PSAndW5kZWZpbmVkJyB8fCAhKHByb2Nlc3MubmV4dFRpY2spKSB7XG4gICAgICAgIGlmICh0eXBlb2Ygc2V0SW1tZWRpYXRlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICBhc3luYy5uZXh0VGljayA9IGZ1bmN0aW9uIChmbikge1xuICAgICAgICAgICAgICAgIC8vIG5vdCBhIGRpcmVjdCBhbGlhcyBmb3IgSUUxMCBjb21wYXRpYmlsaXR5XG4gICAgICAgICAgICAgICAgc2V0SW1tZWRpYXRlKGZuKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBhc3luYy5zZXRJbW1lZGlhdGUgPSBhc3luYy5uZXh0VGljaztcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGFzeW5jLm5leHRUaWNrID0gZnVuY3Rpb24gKGZuKSB7XG4gICAgICAgICAgICAgICAgc2V0VGltZW91dChmbiwgMCk7XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgYXN5bmMuc2V0SW1tZWRpYXRlID0gYXN5bmMubmV4dFRpY2s7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIGFzeW5jLm5leHRUaWNrID0gcHJvY2Vzcy5uZXh0VGljaztcbiAgICAgICAgaWYgKHR5cGVvZiBzZXRJbW1lZGlhdGUgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICBhc3luYy5zZXRJbW1lZGlhdGUgPSBmdW5jdGlvbiAoZm4pIHtcbiAgICAgICAgICAgICAgLy8gbm90IGEgZGlyZWN0IGFsaWFzIGZvciBJRTEwIGNvbXBhdGliaWxpdHlcbiAgICAgICAgICAgICAgc2V0SW1tZWRpYXRlKGZuKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBhc3luYy5zZXRJbW1lZGlhdGUgPSBhc3luYy5uZXh0VGljaztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGFzeW5jLmVhY2ggPSBmdW5jdGlvbiAoYXJyLCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgY2FsbGJhY2sgPSBjYWxsYmFjayB8fCBmdW5jdGlvbiAoKSB7fTtcbiAgICAgICAgaWYgKCFhcnIubGVuZ3RoKSB7XG4gICAgICAgICAgICByZXR1cm4gY2FsbGJhY2soKTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgY29tcGxldGVkID0gMDtcbiAgICAgICAgX2VhY2goYXJyLCBmdW5jdGlvbiAoeCkge1xuICAgICAgICAgICAgaXRlcmF0b3IoeCwgb25seV9vbmNlKGRvbmUpICk7XG4gICAgICAgIH0pO1xuICAgICAgICBmdW5jdGlvbiBkb25lKGVycikge1xuICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgICAgY2FsbGJhY2sgPSBmdW5jdGlvbiAoKSB7fTtcbiAgICAgICAgICB9XG4gICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgIGNvbXBsZXRlZCArPSAxO1xuICAgICAgICAgICAgICBpZiAoY29tcGxldGVkID49IGFyci5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9O1xuICAgIGFzeW5jLmZvckVhY2ggPSBhc3luYy5lYWNoO1xuXG4gICAgYXN5bmMuZWFjaFNlcmllcyA9IGZ1bmN0aW9uIChhcnIsIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICBjYWxsYmFjayA9IGNhbGxiYWNrIHx8IGZ1bmN0aW9uICgpIHt9O1xuICAgICAgICBpZiAoIWFyci5sZW5ndGgpIHtcbiAgICAgICAgICAgIHJldHVybiBjYWxsYmFjaygpO1xuICAgICAgICB9XG4gICAgICAgIHZhciBjb21wbGV0ZWQgPSAwO1xuICAgICAgICB2YXIgaXRlcmF0ZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGl0ZXJhdG9yKGFycltjb21wbGV0ZWRdLCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayA9IGZ1bmN0aW9uICgpIHt9O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgY29tcGxldGVkICs9IDE7XG4gICAgICAgICAgICAgICAgICAgIGlmIChjb21wbGV0ZWQgPj0gYXJyLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGl0ZXJhdGUoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9O1xuICAgICAgICBpdGVyYXRlKCk7XG4gICAgfTtcbiAgICBhc3luYy5mb3JFYWNoU2VyaWVzID0gYXN5bmMuZWFjaFNlcmllcztcblxuICAgIGFzeW5jLmVhY2hMaW1pdCA9IGZ1bmN0aW9uIChhcnIsIGxpbWl0LCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgdmFyIGZuID0gX2VhY2hMaW1pdChsaW1pdCk7XG4gICAgICAgIGZuLmFwcGx5KG51bGwsIFthcnIsIGl0ZXJhdG9yLCBjYWxsYmFja10pO1xuICAgIH07XG4gICAgYXN5bmMuZm9yRWFjaExpbWl0ID0gYXN5bmMuZWFjaExpbWl0O1xuXG4gICAgdmFyIF9lYWNoTGltaXQgPSBmdW5jdGlvbiAobGltaXQpIHtcblxuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKGFyciwgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICBjYWxsYmFjayA9IGNhbGxiYWNrIHx8IGZ1bmN0aW9uICgpIHt9O1xuICAgICAgICAgICAgaWYgKCFhcnIubGVuZ3RoIHx8IGxpbWl0IDw9IDApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gY2FsbGJhY2soKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHZhciBjb21wbGV0ZWQgPSAwO1xuICAgICAgICAgICAgdmFyIHN0YXJ0ZWQgPSAwO1xuICAgICAgICAgICAgdmFyIHJ1bm5pbmcgPSAwO1xuXG4gICAgICAgICAgICAoZnVuY3Rpb24gcmVwbGVuaXNoICgpIHtcbiAgICAgICAgICAgICAgICBpZiAoY29tcGxldGVkID49IGFyci5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKCk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgd2hpbGUgKHJ1bm5pbmcgPCBsaW1pdCAmJiBzdGFydGVkIDwgYXJyLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICBzdGFydGVkICs9IDE7XG4gICAgICAgICAgICAgICAgICAgIHJ1bm5pbmcgKz0gMTtcbiAgICAgICAgICAgICAgICAgICAgaXRlcmF0b3IoYXJyW3N0YXJ0ZWQgLSAxXSwgZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2sgPSBmdW5jdGlvbiAoKSB7fTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBsZXRlZCArPSAxO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJ1bm5pbmcgLT0gMTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY29tcGxldGVkID49IGFyci5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcGxlbmlzaCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSkoKTtcbiAgICAgICAgfTtcbiAgICB9O1xuXG5cbiAgICB2YXIgZG9QYXJhbGxlbCA9IGZ1bmN0aW9uIChmbikge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIGFyZ3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMpO1xuICAgICAgICAgICAgcmV0dXJuIGZuLmFwcGx5KG51bGwsIFthc3luYy5lYWNoXS5jb25jYXQoYXJncykpO1xuICAgICAgICB9O1xuICAgIH07XG4gICAgdmFyIGRvUGFyYWxsZWxMaW1pdCA9IGZ1bmN0aW9uKGxpbWl0LCBmbikge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIGFyZ3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMpO1xuICAgICAgICAgICAgcmV0dXJuIGZuLmFwcGx5KG51bGwsIFtfZWFjaExpbWl0KGxpbWl0KV0uY29uY2F0KGFyZ3MpKTtcbiAgICAgICAgfTtcbiAgICB9O1xuICAgIHZhciBkb1NlcmllcyA9IGZ1bmN0aW9uIChmbikge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIGFyZ3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMpO1xuICAgICAgICAgICAgcmV0dXJuIGZuLmFwcGx5KG51bGwsIFthc3luYy5lYWNoU2VyaWVzXS5jb25jYXQoYXJncykpO1xuICAgICAgICB9O1xuICAgIH07XG5cblxuICAgIHZhciBfYXN5bmNNYXAgPSBmdW5jdGlvbiAoZWFjaGZuLCBhcnIsIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICBhcnIgPSBfbWFwKGFyciwgZnVuY3Rpb24gKHgsIGkpIHtcbiAgICAgICAgICAgIHJldHVybiB7aW5kZXg6IGksIHZhbHVlOiB4fTtcbiAgICAgICAgfSk7XG4gICAgICAgIGlmICghY2FsbGJhY2spIHtcbiAgICAgICAgICAgIGVhY2hmbihhcnIsIGZ1bmN0aW9uICh4LCBjYWxsYmFjaykge1xuICAgICAgICAgICAgICAgIGl0ZXJhdG9yKHgudmFsdWUsIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdmFyIHJlc3VsdHMgPSBbXTtcbiAgICAgICAgICAgIGVhY2hmbihhcnIsIGZ1bmN0aW9uICh4LCBjYWxsYmFjaykge1xuICAgICAgICAgICAgICAgIGl0ZXJhdG9yKHgudmFsdWUsIGZ1bmN0aW9uIChlcnIsIHYpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0c1t4LmluZGV4XSA9IHY7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9LCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2soZXJyLCByZXN1bHRzKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBhc3luYy5tYXAgPSBkb1BhcmFsbGVsKF9hc3luY01hcCk7XG4gICAgYXN5bmMubWFwU2VyaWVzID0gZG9TZXJpZXMoX2FzeW5jTWFwKTtcbiAgICBhc3luYy5tYXBMaW1pdCA9IGZ1bmN0aW9uIChhcnIsIGxpbWl0LCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgcmV0dXJuIF9tYXBMaW1pdChsaW1pdCkoYXJyLCBpdGVyYXRvciwgY2FsbGJhY2spO1xuICAgIH07XG5cbiAgICB2YXIgX21hcExpbWl0ID0gZnVuY3Rpb24obGltaXQpIHtcbiAgICAgICAgcmV0dXJuIGRvUGFyYWxsZWxMaW1pdChsaW1pdCwgX2FzeW5jTWFwKTtcbiAgICB9O1xuXG4gICAgLy8gcmVkdWNlIG9ubHkgaGFzIGEgc2VyaWVzIHZlcnNpb24sIGFzIGRvaW5nIHJlZHVjZSBpbiBwYXJhbGxlbCB3b24ndFxuICAgIC8vIHdvcmsgaW4gbWFueSBzaXR1YXRpb25zLlxuICAgIGFzeW5jLnJlZHVjZSA9IGZ1bmN0aW9uIChhcnIsIG1lbW8sIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICBhc3luYy5lYWNoU2VyaWVzKGFyciwgZnVuY3Rpb24gKHgsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICBpdGVyYXRvcihtZW1vLCB4LCBmdW5jdGlvbiAoZXJyLCB2KSB7XG4gICAgICAgICAgICAgICAgbWVtbyA9IHY7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICBjYWxsYmFjayhlcnIsIG1lbW8pO1xuICAgICAgICB9KTtcbiAgICB9O1xuICAgIC8vIGluamVjdCBhbGlhc1xuICAgIGFzeW5jLmluamVjdCA9IGFzeW5jLnJlZHVjZTtcbiAgICAvLyBmb2xkbCBhbGlhc1xuICAgIGFzeW5jLmZvbGRsID0gYXN5bmMucmVkdWNlO1xuXG4gICAgYXN5bmMucmVkdWNlUmlnaHQgPSBmdW5jdGlvbiAoYXJyLCBtZW1vLCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgdmFyIHJldmVyc2VkID0gX21hcChhcnIsIGZ1bmN0aW9uICh4KSB7XG4gICAgICAgICAgICByZXR1cm4geDtcbiAgICAgICAgfSkucmV2ZXJzZSgpO1xuICAgICAgICBhc3luYy5yZWR1Y2UocmV2ZXJzZWQsIG1lbW8sIGl0ZXJhdG9yLCBjYWxsYmFjayk7XG4gICAgfTtcbiAgICAvLyBmb2xkciBhbGlhc1xuICAgIGFzeW5jLmZvbGRyID0gYXN5bmMucmVkdWNlUmlnaHQ7XG5cbiAgICB2YXIgX2ZpbHRlciA9IGZ1bmN0aW9uIChlYWNoZm4sIGFyciwgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgIHZhciByZXN1bHRzID0gW107XG4gICAgICAgIGFyciA9IF9tYXAoYXJyLCBmdW5jdGlvbiAoeCwgaSkge1xuICAgICAgICAgICAgcmV0dXJuIHtpbmRleDogaSwgdmFsdWU6IHh9O1xuICAgICAgICB9KTtcbiAgICAgICAgZWFjaGZuKGFyciwgZnVuY3Rpb24gKHgsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICBpdGVyYXRvcih4LnZhbHVlLCBmdW5jdGlvbiAodikge1xuICAgICAgICAgICAgICAgIGlmICh2KSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdHMucHVzaCh4KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2FsbGJhY2soKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICBjYWxsYmFjayhfbWFwKHJlc3VsdHMuc29ydChmdW5jdGlvbiAoYSwgYikge1xuICAgICAgICAgICAgICAgIHJldHVybiBhLmluZGV4IC0gYi5pbmRleDtcbiAgICAgICAgICAgIH0pLCBmdW5jdGlvbiAoeCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB4LnZhbHVlO1xuICAgICAgICAgICAgfSkpO1xuICAgICAgICB9KTtcbiAgICB9O1xuICAgIGFzeW5jLmZpbHRlciA9IGRvUGFyYWxsZWwoX2ZpbHRlcik7XG4gICAgYXN5bmMuZmlsdGVyU2VyaWVzID0gZG9TZXJpZXMoX2ZpbHRlcik7XG4gICAgLy8gc2VsZWN0IGFsaWFzXG4gICAgYXN5bmMuc2VsZWN0ID0gYXN5bmMuZmlsdGVyO1xuICAgIGFzeW5jLnNlbGVjdFNlcmllcyA9IGFzeW5jLmZpbHRlclNlcmllcztcblxuICAgIHZhciBfcmVqZWN0ID0gZnVuY3Rpb24gKGVhY2hmbiwgYXJyLCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgdmFyIHJlc3VsdHMgPSBbXTtcbiAgICAgICAgYXJyID0gX21hcChhcnIsIGZ1bmN0aW9uICh4LCBpKSB7XG4gICAgICAgICAgICByZXR1cm4ge2luZGV4OiBpLCB2YWx1ZTogeH07XG4gICAgICAgIH0pO1xuICAgICAgICBlYWNoZm4oYXJyLCBmdW5jdGlvbiAoeCwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIGl0ZXJhdG9yKHgudmFsdWUsIGZ1bmN0aW9uICh2KSB7XG4gICAgICAgICAgICAgICAgaWYgKCF2KSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdHMucHVzaCh4KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2FsbGJhY2soKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICBjYWxsYmFjayhfbWFwKHJlc3VsdHMuc29ydChmdW5jdGlvbiAoYSwgYikge1xuICAgICAgICAgICAgICAgIHJldHVybiBhLmluZGV4IC0gYi5pbmRleDtcbiAgICAgICAgICAgIH0pLCBmdW5jdGlvbiAoeCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB4LnZhbHVlO1xuICAgICAgICAgICAgfSkpO1xuICAgICAgICB9KTtcbiAgICB9O1xuICAgIGFzeW5jLnJlamVjdCA9IGRvUGFyYWxsZWwoX3JlamVjdCk7XG4gICAgYXN5bmMucmVqZWN0U2VyaWVzID0gZG9TZXJpZXMoX3JlamVjdCk7XG5cbiAgICB2YXIgX2RldGVjdCA9IGZ1bmN0aW9uIChlYWNoZm4sIGFyciwgaXRlcmF0b3IsIG1haW5fY2FsbGJhY2spIHtcbiAgICAgICAgZWFjaGZuKGFyciwgZnVuY3Rpb24gKHgsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICBpdGVyYXRvcih4LCBmdW5jdGlvbiAocmVzdWx0KSB7XG4gICAgICAgICAgICAgICAgaWYgKHJlc3VsdCkge1xuICAgICAgICAgICAgICAgICAgICBtYWluX2NhbGxiYWNrKHgpO1xuICAgICAgICAgICAgICAgICAgICBtYWluX2NhbGxiYWNrID0gZnVuY3Rpb24gKCkge307XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICBtYWluX2NhbGxiYWNrKCk7XG4gICAgICAgIH0pO1xuICAgIH07XG4gICAgYXN5bmMuZGV0ZWN0ID0gZG9QYXJhbGxlbChfZGV0ZWN0KTtcbiAgICBhc3luYy5kZXRlY3RTZXJpZXMgPSBkb1NlcmllcyhfZGV0ZWN0KTtcblxuICAgIGFzeW5jLnNvbWUgPSBmdW5jdGlvbiAoYXJyLCBpdGVyYXRvciwgbWFpbl9jYWxsYmFjaykge1xuICAgICAgICBhc3luYy5lYWNoKGFyciwgZnVuY3Rpb24gKHgsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICBpdGVyYXRvcih4LCBmdW5jdGlvbiAodikge1xuICAgICAgICAgICAgICAgIGlmICh2KSB7XG4gICAgICAgICAgICAgICAgICAgIG1haW5fY2FsbGJhY2sodHJ1ZSk7XG4gICAgICAgICAgICAgICAgICAgIG1haW5fY2FsbGJhY2sgPSBmdW5jdGlvbiAoKSB7fTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2FsbGJhY2soKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICBtYWluX2NhbGxiYWNrKGZhbHNlKTtcbiAgICAgICAgfSk7XG4gICAgfTtcbiAgICAvLyBhbnkgYWxpYXNcbiAgICBhc3luYy5hbnkgPSBhc3luYy5zb21lO1xuXG4gICAgYXN5bmMuZXZlcnkgPSBmdW5jdGlvbiAoYXJyLCBpdGVyYXRvciwgbWFpbl9jYWxsYmFjaykge1xuICAgICAgICBhc3luYy5lYWNoKGFyciwgZnVuY3Rpb24gKHgsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICBpdGVyYXRvcih4LCBmdW5jdGlvbiAodikge1xuICAgICAgICAgICAgICAgIGlmICghdikge1xuICAgICAgICAgICAgICAgICAgICBtYWluX2NhbGxiYWNrKGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgICAgbWFpbl9jYWxsYmFjayA9IGZ1bmN0aW9uICgpIHt9O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgIG1haW5fY2FsbGJhY2sodHJ1ZSk7XG4gICAgICAgIH0pO1xuICAgIH07XG4gICAgLy8gYWxsIGFsaWFzXG4gICAgYXN5bmMuYWxsID0gYXN5bmMuZXZlcnk7XG5cbiAgICBhc3luYy5zb3J0QnkgPSBmdW5jdGlvbiAoYXJyLCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgYXN5bmMubWFwKGFyciwgZnVuY3Rpb24gKHgsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICBpdGVyYXRvcih4LCBmdW5jdGlvbiAoZXJyLCBjcml0ZXJpYSkge1xuICAgICAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKG51bGwsIHt2YWx1ZTogeCwgY3JpdGVyaWE6IGNyaXRlcmlhfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sIGZ1bmN0aW9uIChlcnIsIHJlc3VsdHMpIHtcbiAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHZhciBmbiA9IGZ1bmN0aW9uIChsZWZ0LCByaWdodCkge1xuICAgICAgICAgICAgICAgICAgICB2YXIgYSA9IGxlZnQuY3JpdGVyaWEsIGIgPSByaWdodC5jcml0ZXJpYTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGEgPCBiID8gLTEgOiBhID4gYiA/IDEgOiAwO1xuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgY2FsbGJhY2sobnVsbCwgX21hcChyZXN1bHRzLnNvcnQoZm4pLCBmdW5jdGlvbiAoeCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4geC52YWx1ZTtcbiAgICAgICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH07XG5cbiAgICBhc3luYy5hdXRvID0gZnVuY3Rpb24gKHRhc2tzLCBjYWxsYmFjaykge1xuICAgICAgICBjYWxsYmFjayA9IGNhbGxiYWNrIHx8IGZ1bmN0aW9uICgpIHt9O1xuICAgICAgICB2YXIga2V5cyA9IF9rZXlzKHRhc2tzKTtcbiAgICAgICAgdmFyIHJlbWFpbmluZ1Rhc2tzID0ga2V5cy5sZW5ndGhcbiAgICAgICAgaWYgKCFyZW1haW5pbmdUYXNrcykge1xuICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKCk7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgcmVzdWx0cyA9IHt9O1xuXG4gICAgICAgIHZhciBsaXN0ZW5lcnMgPSBbXTtcbiAgICAgICAgdmFyIGFkZExpc3RlbmVyID0gZnVuY3Rpb24gKGZuKSB7XG4gICAgICAgICAgICBsaXN0ZW5lcnMudW5zaGlmdChmbik7XG4gICAgICAgIH07XG4gICAgICAgIHZhciByZW1vdmVMaXN0ZW5lciA9IGZ1bmN0aW9uIChmbikge1xuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsaXN0ZW5lcnMubGVuZ3RoOyBpICs9IDEpIHtcbiAgICAgICAgICAgICAgICBpZiAobGlzdGVuZXJzW2ldID09PSBmbikge1xuICAgICAgICAgICAgICAgICAgICBsaXN0ZW5lcnMuc3BsaWNlKGksIDEpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICB2YXIgdGFza0NvbXBsZXRlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmVtYWluaW5nVGFza3MtLVxuICAgICAgICAgICAgX2VhY2gobGlzdGVuZXJzLnNsaWNlKDApLCBmdW5jdGlvbiAoZm4pIHtcbiAgICAgICAgICAgICAgICBmbigpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH07XG5cbiAgICAgICAgYWRkTGlzdGVuZXIoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgaWYgKCFyZW1haW5pbmdUYXNrcykge1xuICAgICAgICAgICAgICAgIHZhciB0aGVDYWxsYmFjayA9IGNhbGxiYWNrO1xuICAgICAgICAgICAgICAgIC8vIHByZXZlbnQgZmluYWwgY2FsbGJhY2sgZnJvbSBjYWxsaW5nIGl0c2VsZiBpZiBpdCBlcnJvcnNcbiAgICAgICAgICAgICAgICBjYWxsYmFjayA9IGZ1bmN0aW9uICgpIHt9O1xuXG4gICAgICAgICAgICAgICAgdGhlQ2FsbGJhY2sobnVsbCwgcmVzdWx0cyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIF9lYWNoKGtleXMsIGZ1bmN0aW9uIChrKSB7XG4gICAgICAgICAgICB2YXIgdGFzayA9IF9pc0FycmF5KHRhc2tzW2tdKSA/IHRhc2tzW2tdOiBbdGFza3Nba11dO1xuICAgICAgICAgICAgdmFyIHRhc2tDYWxsYmFjayA9IGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgICAgICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMSk7XG4gICAgICAgICAgICAgICAgaWYgKGFyZ3MubGVuZ3RoIDw9IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgYXJncyA9IGFyZ3NbMF07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHNhZmVSZXN1bHRzID0ge307XG4gICAgICAgICAgICAgICAgICAgIF9lYWNoKF9rZXlzKHJlc3VsdHMpLCBmdW5jdGlvbihya2V5KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzYWZlUmVzdWx0c1tya2V5XSA9IHJlc3VsdHNbcmtleV07XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICBzYWZlUmVzdWx0c1trXSA9IGFyZ3M7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKGVyciwgc2FmZVJlc3VsdHMpO1xuICAgICAgICAgICAgICAgICAgICAvLyBzdG9wIHN1YnNlcXVlbnQgZXJyb3JzIGhpdHRpbmcgY2FsbGJhY2sgbXVsdGlwbGUgdGltZXNcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2sgPSBmdW5jdGlvbiAoKSB7fTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdHNba10gPSBhcmdzO1xuICAgICAgICAgICAgICAgICAgICBhc3luYy5zZXRJbW1lZGlhdGUodGFza0NvbXBsZXRlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgdmFyIHJlcXVpcmVzID0gdGFzay5zbGljZSgwLCBNYXRoLmFicyh0YXNrLmxlbmd0aCAtIDEpKSB8fCBbXTtcbiAgICAgICAgICAgIHZhciByZWFkeSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gX3JlZHVjZShyZXF1aXJlcywgZnVuY3Rpb24gKGEsIHgpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChhICYmIHJlc3VsdHMuaGFzT3duUHJvcGVydHkoeCkpO1xuICAgICAgICAgICAgICAgIH0sIHRydWUpICYmICFyZXN1bHRzLmhhc093blByb3BlcnR5KGspO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGlmIChyZWFkeSgpKSB7XG4gICAgICAgICAgICAgICAgdGFza1t0YXNrLmxlbmd0aCAtIDFdKHRhc2tDYWxsYmFjaywgcmVzdWx0cyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICB2YXIgbGlzdGVuZXIgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChyZWFkeSgpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZW1vdmVMaXN0ZW5lcihsaXN0ZW5lcik7XG4gICAgICAgICAgICAgICAgICAgICAgICB0YXNrW3Rhc2subGVuZ3RoIC0gMV0odGFza0NhbGxiYWNrLCByZXN1bHRzKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgYWRkTGlzdGVuZXIobGlzdGVuZXIpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9O1xuXG4gICAgYXN5bmMucmV0cnkgPSBmdW5jdGlvbih0aW1lcywgdGFzaywgY2FsbGJhY2spIHtcbiAgICAgICAgdmFyIERFRkFVTFRfVElNRVMgPSA1O1xuICAgICAgICB2YXIgYXR0ZW1wdHMgPSBbXTtcbiAgICAgICAgLy8gVXNlIGRlZmF1bHRzIGlmIHRpbWVzIG5vdCBwYXNzZWRcbiAgICAgICAgaWYgKHR5cGVvZiB0aW1lcyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgY2FsbGJhY2sgPSB0YXNrO1xuICAgICAgICAgICAgdGFzayA9IHRpbWVzO1xuICAgICAgICAgICAgdGltZXMgPSBERUZBVUxUX1RJTUVTO1xuICAgICAgICB9XG4gICAgICAgIC8vIE1ha2Ugc3VyZSB0aW1lcyBpcyBhIG51bWJlclxuICAgICAgICB0aW1lcyA9IHBhcnNlSW50KHRpbWVzLCAxMCkgfHwgREVGQVVMVF9USU1FUztcbiAgICAgICAgdmFyIHdyYXBwZWRUYXNrID0gZnVuY3Rpb24od3JhcHBlZENhbGxiYWNrLCB3cmFwcGVkUmVzdWx0cykge1xuICAgICAgICAgICAgdmFyIHJldHJ5QXR0ZW1wdCA9IGZ1bmN0aW9uKHRhc2ssIGZpbmFsQXR0ZW1wdCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbihzZXJpZXNDYWxsYmFjaykge1xuICAgICAgICAgICAgICAgICAgICB0YXNrKGZ1bmN0aW9uKGVyciwgcmVzdWx0KXtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlcmllc0NhbGxiYWNrKCFlcnIgfHwgZmluYWxBdHRlbXB0LCB7ZXJyOiBlcnIsIHJlc3VsdDogcmVzdWx0fSk7XG4gICAgICAgICAgICAgICAgICAgIH0sIHdyYXBwZWRSZXN1bHRzKTtcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIHdoaWxlICh0aW1lcykge1xuICAgICAgICAgICAgICAgIGF0dGVtcHRzLnB1c2gocmV0cnlBdHRlbXB0KHRhc2ssICEodGltZXMtPTEpKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBhc3luYy5zZXJpZXMoYXR0ZW1wdHMsIGZ1bmN0aW9uKGRvbmUsIGRhdGEpe1xuICAgICAgICAgICAgICAgIGRhdGEgPSBkYXRhW2RhdGEubGVuZ3RoIC0gMV07XG4gICAgICAgICAgICAgICAgKHdyYXBwZWRDYWxsYmFjayB8fCBjYWxsYmFjaykoZGF0YS5lcnIsIGRhdGEucmVzdWx0KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIC8vIElmIGEgY2FsbGJhY2sgaXMgcGFzc2VkLCBydW4gdGhpcyBhcyBhIGNvbnRyb2xsIGZsb3dcbiAgICAgICAgcmV0dXJuIGNhbGxiYWNrID8gd3JhcHBlZFRhc2soKSA6IHdyYXBwZWRUYXNrXG4gICAgfTtcblxuICAgIGFzeW5jLndhdGVyZmFsbCA9IGZ1bmN0aW9uICh0YXNrcywgY2FsbGJhY2spIHtcbiAgICAgICAgY2FsbGJhY2sgPSBjYWxsYmFjayB8fCBmdW5jdGlvbiAoKSB7fTtcbiAgICAgICAgaWYgKCFfaXNBcnJheSh0YXNrcykpIHtcbiAgICAgICAgICB2YXIgZXJyID0gbmV3IEVycm9yKCdGaXJzdCBhcmd1bWVudCB0byB3YXRlcmZhbGwgbXVzdCBiZSBhbiBhcnJheSBvZiBmdW5jdGlvbnMnKTtcbiAgICAgICAgICByZXR1cm4gY2FsbGJhY2soZXJyKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIXRhc2tzLmxlbmd0aCkge1xuICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKCk7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIHdyYXBJdGVyYXRvciA9IGZ1bmN0aW9uIChpdGVyYXRvcikge1xuICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrID0gZnVuY3Rpb24gKCkge307XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMSk7XG4gICAgICAgICAgICAgICAgICAgIHZhciBuZXh0ID0gaXRlcmF0b3IubmV4dCgpO1xuICAgICAgICAgICAgICAgICAgICBpZiAobmV4dCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgYXJncy5wdXNoKHdyYXBJdGVyYXRvcihuZXh0KSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhcmdzLnB1c2goY2FsbGJhY2spO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGFzeW5jLnNldEltbWVkaWF0ZShmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpdGVyYXRvci5hcHBseShudWxsLCBhcmdzKTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfTtcbiAgICAgICAgfTtcbiAgICAgICAgd3JhcEl0ZXJhdG9yKGFzeW5jLml0ZXJhdG9yKHRhc2tzKSkoKTtcbiAgICB9O1xuXG4gICAgdmFyIF9wYXJhbGxlbCA9IGZ1bmN0aW9uKGVhY2hmbiwgdGFza3MsIGNhbGxiYWNrKSB7XG4gICAgICAgIGNhbGxiYWNrID0gY2FsbGJhY2sgfHwgZnVuY3Rpb24gKCkge307XG4gICAgICAgIGlmIChfaXNBcnJheSh0YXNrcykpIHtcbiAgICAgICAgICAgIGVhY2hmbi5tYXAodGFza3MsIGZ1bmN0aW9uIChmbiwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgICAgICBpZiAoZm4pIHtcbiAgICAgICAgICAgICAgICAgICAgZm4oZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGFyZ3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsIDEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFyZ3MubGVuZ3RoIDw9IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmdzID0gYXJnc1swXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrLmNhbGwobnVsbCwgZXJyLCBhcmdzKTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSwgY2FsbGJhY2spO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdmFyIHJlc3VsdHMgPSB7fTtcbiAgICAgICAgICAgIGVhY2hmbi5lYWNoKF9rZXlzKHRhc2tzKSwgZnVuY3Rpb24gKGssIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICAgICAgdGFza3Nba10oZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgICAgICAgICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMSk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChhcmdzLmxlbmd0aCA8PSAxKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhcmdzID0gYXJnc1swXTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICByZXN1bHRzW2tdID0gYXJncztcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0sIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnIsIHJlc3VsdHMpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgYXN5bmMucGFyYWxsZWwgPSBmdW5jdGlvbiAodGFza3MsIGNhbGxiYWNrKSB7XG4gICAgICAgIF9wYXJhbGxlbCh7IG1hcDogYXN5bmMubWFwLCBlYWNoOiBhc3luYy5lYWNoIH0sIHRhc2tzLCBjYWxsYmFjayk7XG4gICAgfTtcblxuICAgIGFzeW5jLnBhcmFsbGVsTGltaXQgPSBmdW5jdGlvbih0YXNrcywgbGltaXQsIGNhbGxiYWNrKSB7XG4gICAgICAgIF9wYXJhbGxlbCh7IG1hcDogX21hcExpbWl0KGxpbWl0KSwgZWFjaDogX2VhY2hMaW1pdChsaW1pdCkgfSwgdGFza3MsIGNhbGxiYWNrKTtcbiAgICB9O1xuXG4gICAgYXN5bmMuc2VyaWVzID0gZnVuY3Rpb24gKHRhc2tzLCBjYWxsYmFjaykge1xuICAgICAgICBjYWxsYmFjayA9IGNhbGxiYWNrIHx8IGZ1bmN0aW9uICgpIHt9O1xuICAgICAgICBpZiAoX2lzQXJyYXkodGFza3MpKSB7XG4gICAgICAgICAgICBhc3luYy5tYXBTZXJpZXModGFza3MsIGZ1bmN0aW9uIChmbiwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgICAgICBpZiAoZm4pIHtcbiAgICAgICAgICAgICAgICAgICAgZm4oZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGFyZ3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsIDEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFyZ3MubGVuZ3RoIDw9IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmdzID0gYXJnc1swXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrLmNhbGwobnVsbCwgZXJyLCBhcmdzKTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSwgY2FsbGJhY2spO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdmFyIHJlc3VsdHMgPSB7fTtcbiAgICAgICAgICAgIGFzeW5jLmVhY2hTZXJpZXMoX2tleXModGFza3MpLCBmdW5jdGlvbiAoaywgY2FsbGJhY2spIHtcbiAgICAgICAgICAgICAgICB0YXNrc1trXShmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBhcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGFyZ3MubGVuZ3RoIDw9IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3MgPSBhcmdzWzBdO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdHNba10gPSBhcmdzO1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSwgZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrKGVyciwgcmVzdWx0cyk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH07XG5cbiAgICBhc3luYy5pdGVyYXRvciA9IGZ1bmN0aW9uICh0YXNrcykge1xuICAgICAgICB2YXIgbWFrZUNhbGxiYWNrID0gZnVuY3Rpb24gKGluZGV4KSB7XG4gICAgICAgICAgICB2YXIgZm4gPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgaWYgKHRhc2tzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICB0YXNrc1tpbmRleF0uYXBwbHkobnVsbCwgYXJndW1lbnRzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZuLm5leHQoKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBmbi5uZXh0ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiAoaW5kZXggPCB0YXNrcy5sZW5ndGggLSAxKSA/IG1ha2VDYWxsYmFjayhpbmRleCArIDEpOiBudWxsO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIHJldHVybiBmbjtcbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIG1ha2VDYWxsYmFjaygwKTtcbiAgICB9O1xuXG4gICAgYXN5bmMuYXBwbHkgPSBmdW5jdGlvbiAoZm4pIHtcbiAgICAgICAgdmFyIGFyZ3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsIDEpO1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIGZuLmFwcGx5KFxuICAgICAgICAgICAgICAgIG51bGwsIGFyZ3MuY29uY2F0KEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cykpXG4gICAgICAgICAgICApO1xuICAgICAgICB9O1xuICAgIH07XG5cbiAgICB2YXIgX2NvbmNhdCA9IGZ1bmN0aW9uIChlYWNoZm4sIGFyciwgZm4sIGNhbGxiYWNrKSB7XG4gICAgICAgIHZhciByID0gW107XG4gICAgICAgIGVhY2hmbihhcnIsIGZ1bmN0aW9uICh4LCBjYikge1xuICAgICAgICAgICAgZm4oeCwgZnVuY3Rpb24gKGVyciwgeSkge1xuICAgICAgICAgICAgICAgIHIgPSByLmNvbmNhdCh5IHx8IFtdKTtcbiAgICAgICAgICAgICAgICBjYihlcnIpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgIGNhbGxiYWNrKGVyciwgcik7XG4gICAgICAgIH0pO1xuICAgIH07XG4gICAgYXN5bmMuY29uY2F0ID0gZG9QYXJhbGxlbChfY29uY2F0KTtcbiAgICBhc3luYy5jb25jYXRTZXJpZXMgPSBkb1NlcmllcyhfY29uY2F0KTtcblxuICAgIGFzeW5jLndoaWxzdCA9IGZ1bmN0aW9uICh0ZXN0LCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgaWYgKHRlc3QoKSkge1xuICAgICAgICAgICAgaXRlcmF0b3IoZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGFzeW5jLndoaWxzdCh0ZXN0LCBpdGVyYXRvciwgY2FsbGJhY2spO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIGFzeW5jLmRvV2hpbHN0ID0gZnVuY3Rpb24gKGl0ZXJhdG9yLCB0ZXN0LCBjYWxsYmFjaykge1xuICAgICAgICBpdGVyYXRvcihmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMSk7XG4gICAgICAgICAgICBpZiAodGVzdC5hcHBseShudWxsLCBhcmdzKSkge1xuICAgICAgICAgICAgICAgIGFzeW5jLmRvV2hpbHN0KGl0ZXJhdG9yLCB0ZXN0LCBjYWxsYmFjayk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9O1xuXG4gICAgYXN5bmMudW50aWwgPSBmdW5jdGlvbiAodGVzdCwgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgIGlmICghdGVzdCgpKSB7XG4gICAgICAgICAgICBpdGVyYXRvcihmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYXN5bmMudW50aWwodGVzdCwgaXRlcmF0b3IsIGNhbGxiYWNrKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgY2FsbGJhY2soKTtcbiAgICAgICAgfVxuICAgIH07XG5cbiAgICBhc3luYy5kb1VudGlsID0gZnVuY3Rpb24gKGl0ZXJhdG9yLCB0ZXN0LCBjYWxsYmFjaykge1xuICAgICAgICBpdGVyYXRvcihmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMSk7XG4gICAgICAgICAgICBpZiAoIXRlc3QuYXBwbHkobnVsbCwgYXJncykpIHtcbiAgICAgICAgICAgICAgICBhc3luYy5kb1VudGlsKGl0ZXJhdG9yLCB0ZXN0LCBjYWxsYmFjayk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9O1xuXG4gICAgYXN5bmMucXVldWUgPSBmdW5jdGlvbiAod29ya2VyLCBjb25jdXJyZW5jeSkge1xuICAgICAgICBpZiAoY29uY3VycmVuY3kgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgY29uY3VycmVuY3kgPSAxO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIF9pbnNlcnQocSwgZGF0YSwgcG9zLCBjYWxsYmFjaykge1xuICAgICAgICAgIGlmICghcS5zdGFydGVkKXtcbiAgICAgICAgICAgIHEuc3RhcnRlZCA9IHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICghX2lzQXJyYXkoZGF0YSkpIHtcbiAgICAgICAgICAgICAgZGF0YSA9IFtkYXRhXTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYoZGF0YS5sZW5ndGggPT0gMCkge1xuICAgICAgICAgICAgIC8vIGNhbGwgZHJhaW4gaW1tZWRpYXRlbHkgaWYgdGhlcmUgYXJlIG5vIHRhc2tzXG4gICAgICAgICAgICAgcmV0dXJuIGFzeW5jLnNldEltbWVkaWF0ZShmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgaWYgKHEuZHJhaW4pIHtcbiAgICAgICAgICAgICAgICAgICAgIHEuZHJhaW4oKTtcbiAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgICBfZWFjaChkYXRhLCBmdW5jdGlvbih0YXNrKSB7XG4gICAgICAgICAgICAgIHZhciBpdGVtID0ge1xuICAgICAgICAgICAgICAgICAgZGF0YTogdGFzayxcbiAgICAgICAgICAgICAgICAgIGNhbGxiYWNrOiB0eXBlb2YgY2FsbGJhY2sgPT09ICdmdW5jdGlvbicgPyBjYWxsYmFjayA6IG51bGxcbiAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICBpZiAocG9zKSB7XG4gICAgICAgICAgICAgICAgcS50YXNrcy51bnNoaWZ0KGl0ZW0pO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHEudGFza3MucHVzaChpdGVtKTtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGlmIChxLnNhdHVyYXRlZCAmJiBxLnRhc2tzLmxlbmd0aCA9PT0gcS5jb25jdXJyZW5jeSkge1xuICAgICAgICAgICAgICAgICAgcS5zYXR1cmF0ZWQoKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBhc3luYy5zZXRJbW1lZGlhdGUocS5wcm9jZXNzKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciB3b3JrZXJzID0gMDtcbiAgICAgICAgdmFyIHEgPSB7XG4gICAgICAgICAgICB0YXNrczogW10sXG4gICAgICAgICAgICBjb25jdXJyZW5jeTogY29uY3VycmVuY3ksXG4gICAgICAgICAgICBzYXR1cmF0ZWQ6IG51bGwsXG4gICAgICAgICAgICBlbXB0eTogbnVsbCxcbiAgICAgICAgICAgIGRyYWluOiBudWxsLFxuICAgICAgICAgICAgc3RhcnRlZDogZmFsc2UsXG4gICAgICAgICAgICBwYXVzZWQ6IGZhbHNlLFxuICAgICAgICAgICAgcHVzaDogZnVuY3Rpb24gKGRhdGEsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICAgIF9pbnNlcnQocSwgZGF0YSwgZmFsc2UsIGNhbGxiYWNrKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBraWxsOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgIHEuZHJhaW4gPSBudWxsO1xuICAgICAgICAgICAgICBxLnRhc2tzID0gW107XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdW5zaGlmdDogZnVuY3Rpb24gKGRhdGEsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICAgIF9pbnNlcnQocSwgZGF0YSwgdHJ1ZSwgY2FsbGJhY2spO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHByb2Nlc3M6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBpZiAoIXEucGF1c2VkICYmIHdvcmtlcnMgPCBxLmNvbmN1cnJlbmN5ICYmIHEudGFza3MubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciB0YXNrID0gcS50YXNrcy5zaGlmdCgpO1xuICAgICAgICAgICAgICAgICAgICBpZiAocS5lbXB0eSAmJiBxLnRhc2tzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcS5lbXB0eSgpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHdvcmtlcnMgKz0gMTtcbiAgICAgICAgICAgICAgICAgICAgdmFyIG5leHQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB3b3JrZXJzIC09IDE7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodGFzay5jYWxsYmFjaykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhc2suY2FsbGJhY2suYXBwbHkodGFzaywgYXJndW1lbnRzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChxLmRyYWluICYmIHEudGFza3MubGVuZ3RoICsgd29ya2VycyA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHEuZHJhaW4oKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHEucHJvY2VzcygpO1xuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICB2YXIgY2IgPSBvbmx5X29uY2UobmV4dCk7XG4gICAgICAgICAgICAgICAgICAgIHdvcmtlcih0YXNrLmRhdGEsIGNiKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbGVuZ3RoOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHEudGFza3MubGVuZ3RoO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHJ1bm5pbmc6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gd29ya2VycztcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBpZGxlOiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcS50YXNrcy5sZW5ndGggKyB3b3JrZXJzID09PSAwO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHBhdXNlOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgaWYgKHEucGF1c2VkID09PSB0cnVlKSB7IHJldHVybjsgfVxuICAgICAgICAgICAgICAgIHEucGF1c2VkID0gdHJ1ZTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICByZXN1bWU6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBpZiAocS5wYXVzZWQgPT09IGZhbHNlKSB7IHJldHVybjsgfVxuICAgICAgICAgICAgICAgIHEucGF1c2VkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgLy8gTmVlZCB0byBjYWxsIHEucHJvY2VzcyBvbmNlIHBlciBjb25jdXJyZW50XG4gICAgICAgICAgICAgICAgLy8gd29ya2VyIHRvIHByZXNlcnZlIGZ1bGwgY29uY3VycmVuY3kgYWZ0ZXIgcGF1c2VcbiAgICAgICAgICAgICAgICBmb3IgKHZhciB3ID0gMTsgdyA8PSBxLmNvbmN1cnJlbmN5OyB3KyspIHtcbiAgICAgICAgICAgICAgICAgICAgYXN5bmMuc2V0SW1tZWRpYXRlKHEucHJvY2Vzcyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gcTtcbiAgICB9O1xuXG4gICAgYXN5bmMucHJpb3JpdHlRdWV1ZSA9IGZ1bmN0aW9uICh3b3JrZXIsIGNvbmN1cnJlbmN5KSB7XG5cbiAgICAgICAgZnVuY3Rpb24gX2NvbXBhcmVUYXNrcyhhLCBiKXtcbiAgICAgICAgICByZXR1cm4gYS5wcmlvcml0eSAtIGIucHJpb3JpdHk7XG4gICAgICAgIH07XG5cbiAgICAgICAgZnVuY3Rpb24gX2JpbmFyeVNlYXJjaChzZXF1ZW5jZSwgaXRlbSwgY29tcGFyZSkge1xuICAgICAgICAgIHZhciBiZWcgPSAtMSxcbiAgICAgICAgICAgICAgZW5kID0gc2VxdWVuY2UubGVuZ3RoIC0gMTtcbiAgICAgICAgICB3aGlsZSAoYmVnIDwgZW5kKSB7XG4gICAgICAgICAgICB2YXIgbWlkID0gYmVnICsgKChlbmQgLSBiZWcgKyAxKSA+Pj4gMSk7XG4gICAgICAgICAgICBpZiAoY29tcGFyZShpdGVtLCBzZXF1ZW5jZVttaWRdKSA+PSAwKSB7XG4gICAgICAgICAgICAgIGJlZyA9IG1pZDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGVuZCA9IG1pZCAtIDE7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBiZWc7XG4gICAgICAgIH1cblxuICAgICAgICBmdW5jdGlvbiBfaW5zZXJ0KHEsIGRhdGEsIHByaW9yaXR5LCBjYWxsYmFjaykge1xuICAgICAgICAgIGlmICghcS5zdGFydGVkKXtcbiAgICAgICAgICAgIHEuc3RhcnRlZCA9IHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICghX2lzQXJyYXkoZGF0YSkpIHtcbiAgICAgICAgICAgICAgZGF0YSA9IFtkYXRhXTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYoZGF0YS5sZW5ndGggPT0gMCkge1xuICAgICAgICAgICAgIC8vIGNhbGwgZHJhaW4gaW1tZWRpYXRlbHkgaWYgdGhlcmUgYXJlIG5vIHRhc2tzXG4gICAgICAgICAgICAgcmV0dXJuIGFzeW5jLnNldEltbWVkaWF0ZShmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgaWYgKHEuZHJhaW4pIHtcbiAgICAgICAgICAgICAgICAgICAgIHEuZHJhaW4oKTtcbiAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgICBfZWFjaChkYXRhLCBmdW5jdGlvbih0YXNrKSB7XG4gICAgICAgICAgICAgIHZhciBpdGVtID0ge1xuICAgICAgICAgICAgICAgICAgZGF0YTogdGFzayxcbiAgICAgICAgICAgICAgICAgIHByaW9yaXR5OiBwcmlvcml0eSxcbiAgICAgICAgICAgICAgICAgIGNhbGxiYWNrOiB0eXBlb2YgY2FsbGJhY2sgPT09ICdmdW5jdGlvbicgPyBjYWxsYmFjayA6IG51bGxcbiAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICBxLnRhc2tzLnNwbGljZShfYmluYXJ5U2VhcmNoKHEudGFza3MsIGl0ZW0sIF9jb21wYXJlVGFza3MpICsgMSwgMCwgaXRlbSk7XG5cbiAgICAgICAgICAgICAgaWYgKHEuc2F0dXJhdGVkICYmIHEudGFza3MubGVuZ3RoID09PSBxLmNvbmN1cnJlbmN5KSB7XG4gICAgICAgICAgICAgICAgICBxLnNhdHVyYXRlZCgpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGFzeW5jLnNldEltbWVkaWF0ZShxLnByb2Nlc3MpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gU3RhcnQgd2l0aCBhIG5vcm1hbCBxdWV1ZVxuICAgICAgICB2YXIgcSA9IGFzeW5jLnF1ZXVlKHdvcmtlciwgY29uY3VycmVuY3kpO1xuXG4gICAgICAgIC8vIE92ZXJyaWRlIHB1c2ggdG8gYWNjZXB0IHNlY29uZCBwYXJhbWV0ZXIgcmVwcmVzZW50aW5nIHByaW9yaXR5XG4gICAgICAgIHEucHVzaCA9IGZ1bmN0aW9uIChkYXRhLCBwcmlvcml0eSwgY2FsbGJhY2spIHtcbiAgICAgICAgICBfaW5zZXJ0KHEsIGRhdGEsIHByaW9yaXR5LCBjYWxsYmFjayk7XG4gICAgICAgIH07XG5cbiAgICAgICAgLy8gUmVtb3ZlIHVuc2hpZnQgZnVuY3Rpb25cbiAgICAgICAgZGVsZXRlIHEudW5zaGlmdDtcblxuICAgICAgICByZXR1cm4gcTtcbiAgICB9O1xuXG4gICAgYXN5bmMuY2FyZ28gPSBmdW5jdGlvbiAod29ya2VyLCBwYXlsb2FkKSB7XG4gICAgICAgIHZhciB3b3JraW5nICAgICA9IGZhbHNlLFxuICAgICAgICAgICAgdGFza3MgICAgICAgPSBbXTtcblxuICAgICAgICB2YXIgY2FyZ28gPSB7XG4gICAgICAgICAgICB0YXNrczogdGFza3MsXG4gICAgICAgICAgICBwYXlsb2FkOiBwYXlsb2FkLFxuICAgICAgICAgICAgc2F0dXJhdGVkOiBudWxsLFxuICAgICAgICAgICAgZW1wdHk6IG51bGwsXG4gICAgICAgICAgICBkcmFpbjogbnVsbCxcbiAgICAgICAgICAgIGRyYWluZWQ6IHRydWUsXG4gICAgICAgICAgICBwdXNoOiBmdW5jdGlvbiAoZGF0YSwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgICAgICBpZiAoIV9pc0FycmF5KGRhdGEpKSB7XG4gICAgICAgICAgICAgICAgICAgIGRhdGEgPSBbZGF0YV07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIF9lYWNoKGRhdGEsIGZ1bmN0aW9uKHRhc2spIHtcbiAgICAgICAgICAgICAgICAgICAgdGFza3MucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgICAgICBkYXRhOiB0YXNrLFxuICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2s6IHR5cGVvZiBjYWxsYmFjayA9PT0gJ2Z1bmN0aW9uJyA/IGNhbGxiYWNrIDogbnVsbFxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgY2FyZ28uZHJhaW5lZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICBpZiAoY2FyZ28uc2F0dXJhdGVkICYmIHRhc2tzLmxlbmd0aCA9PT0gcGF5bG9hZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY2FyZ28uc2F0dXJhdGVkKCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBhc3luYy5zZXRJbW1lZGlhdGUoY2FyZ28ucHJvY2Vzcyk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcHJvY2VzczogZnVuY3Rpb24gcHJvY2VzcygpIHtcbiAgICAgICAgICAgICAgICBpZiAod29ya2luZykgcmV0dXJuO1xuICAgICAgICAgICAgICAgIGlmICh0YXNrcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgaWYoY2FyZ28uZHJhaW4gJiYgIWNhcmdvLmRyYWluZWQpIGNhcmdvLmRyYWluKCk7XG4gICAgICAgICAgICAgICAgICAgIGNhcmdvLmRyYWluZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgdmFyIHRzID0gdHlwZW9mIHBheWxvYWQgPT09ICdudW1iZXInXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPyB0YXNrcy5zcGxpY2UoMCwgcGF5bG9hZClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IHRhc2tzLnNwbGljZSgwLCB0YXNrcy5sZW5ndGgpO1xuXG4gICAgICAgICAgICAgICAgdmFyIGRzID0gX21hcCh0cywgZnVuY3Rpb24gKHRhc2spIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRhc2suZGF0YTtcbiAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgIGlmKGNhcmdvLmVtcHR5KSBjYXJnby5lbXB0eSgpO1xuICAgICAgICAgICAgICAgIHdvcmtpbmcgPSB0cnVlO1xuICAgICAgICAgICAgICAgIHdvcmtlcihkcywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICB3b3JraW5nID0gZmFsc2U7XG5cbiAgICAgICAgICAgICAgICAgICAgdmFyIGFyZ3MgPSBhcmd1bWVudHM7XG4gICAgICAgICAgICAgICAgICAgIF9lYWNoKHRzLCBmdW5jdGlvbiAoZGF0YSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRhdGEuY2FsbGJhY2spIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLmNhbGxiYWNrLmFwcGx5KG51bGwsIGFyZ3MpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgICAgICBwcm9jZXNzKCk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbGVuZ3RoOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRhc2tzLmxlbmd0aDtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBydW5uaW5nOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHdvcmtpbmc7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiBjYXJnbztcbiAgICB9O1xuXG4gICAgdmFyIF9jb25zb2xlX2ZuID0gZnVuY3Rpb24gKG5hbWUpIHtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChmbikge1xuICAgICAgICAgICAgdmFyIGFyZ3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsIDEpO1xuICAgICAgICAgICAgZm4uYXBwbHkobnVsbCwgYXJncy5jb25jYXQoW2Z1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgICAgICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMSk7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBjb25zb2xlICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoY29uc29sZS5lcnJvcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChjb25zb2xlW25hbWVdKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBfZWFjaChhcmdzLCBmdW5jdGlvbiAoeCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGVbbmFtZV0oeCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1dKSk7XG4gICAgICAgIH07XG4gICAgfTtcbiAgICBhc3luYy5sb2cgPSBfY29uc29sZV9mbignbG9nJyk7XG4gICAgYXN5bmMuZGlyID0gX2NvbnNvbGVfZm4oJ2RpcicpO1xuICAgIC8qYXN5bmMuaW5mbyA9IF9jb25zb2xlX2ZuKCdpbmZvJyk7XG4gICAgYXN5bmMud2FybiA9IF9jb25zb2xlX2ZuKCd3YXJuJyk7XG4gICAgYXN5bmMuZXJyb3IgPSBfY29uc29sZV9mbignZXJyb3InKTsqL1xuXG4gICAgYXN5bmMubWVtb2l6ZSA9IGZ1bmN0aW9uIChmbiwgaGFzaGVyKSB7XG4gICAgICAgIHZhciBtZW1vID0ge307XG4gICAgICAgIHZhciBxdWV1ZXMgPSB7fTtcbiAgICAgICAgaGFzaGVyID0gaGFzaGVyIHx8IGZ1bmN0aW9uICh4KSB7XG4gICAgICAgICAgICByZXR1cm4geDtcbiAgICAgICAgfTtcbiAgICAgICAgdmFyIG1lbW9pemVkID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIGFyZ3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMpO1xuICAgICAgICAgICAgdmFyIGNhbGxiYWNrID0gYXJncy5wb3AoKTtcbiAgICAgICAgICAgIHZhciBrZXkgPSBoYXNoZXIuYXBwbHkobnVsbCwgYXJncyk7XG4gICAgICAgICAgICBpZiAoa2V5IGluIG1lbW8pIHtcbiAgICAgICAgICAgICAgICBhc3luYy5uZXh0VGljayhmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrLmFwcGx5KG51bGwsIG1lbW9ba2V5XSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChrZXkgaW4gcXVldWVzKSB7XG4gICAgICAgICAgICAgICAgcXVldWVzW2tleV0ucHVzaChjYWxsYmFjayk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBxdWV1ZXNba2V5XSA9IFtjYWxsYmFja107XG4gICAgICAgICAgICAgICAgZm4uYXBwbHkobnVsbCwgYXJncy5jb25jYXQoW2Z1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgbWVtb1trZXldID0gYXJndW1lbnRzO1xuICAgICAgICAgICAgICAgICAgICB2YXIgcSA9IHF1ZXVlc1trZXldO1xuICAgICAgICAgICAgICAgICAgICBkZWxldGUgcXVldWVzW2tleV07XG4gICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwLCBsID0gcS5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICBxW2ldLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICBtZW1vaXplZC5tZW1vID0gbWVtbztcbiAgICAgICAgbWVtb2l6ZWQudW5tZW1vaXplZCA9IGZuO1xuICAgICAgICByZXR1cm4gbWVtb2l6ZWQ7XG4gICAgfTtcblxuICAgIGFzeW5jLnVubWVtb2l6ZSA9IGZ1bmN0aW9uIChmbikge1xuICAgICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIChmbi51bm1lbW9pemVkIHx8IGZuKS5hcHBseShudWxsLCBhcmd1bWVudHMpO1xuICAgICAgfTtcbiAgICB9O1xuXG4gICAgYXN5bmMudGltZXMgPSBmdW5jdGlvbiAoY291bnQsIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICB2YXIgY291bnRlciA9IFtdO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNvdW50OyBpKyspIHtcbiAgICAgICAgICAgIGNvdW50ZXIucHVzaChpKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYXN5bmMubWFwKGNvdW50ZXIsIGl0ZXJhdG9yLCBjYWxsYmFjayk7XG4gICAgfTtcblxuICAgIGFzeW5jLnRpbWVzU2VyaWVzID0gZnVuY3Rpb24gKGNvdW50LCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgdmFyIGNvdW50ZXIgPSBbXTtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7XG4gICAgICAgICAgICBjb3VudGVyLnB1c2goaSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGFzeW5jLm1hcFNlcmllcyhjb3VudGVyLCBpdGVyYXRvciwgY2FsbGJhY2spO1xuICAgIH07XG5cbiAgICBhc3luYy5zZXEgPSBmdW5jdGlvbiAoLyogZnVuY3Rpb25zLi4uICovKSB7XG4gICAgICAgIHZhciBmbnMgPSBhcmd1bWVudHM7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgdGhhdCA9IHRoaXM7XG4gICAgICAgICAgICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7XG4gICAgICAgICAgICB2YXIgY2FsbGJhY2sgPSBhcmdzLnBvcCgpO1xuICAgICAgICAgICAgYXN5bmMucmVkdWNlKGZucywgYXJncywgZnVuY3Rpb24gKG5ld2FyZ3MsIGZuLCBjYikge1xuICAgICAgICAgICAgICAgIGZuLmFwcGx5KHRoYXQsIG5ld2FyZ3MuY29uY2F0KFtmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBlcnIgPSBhcmd1bWVudHNbMF07XG4gICAgICAgICAgICAgICAgICAgIHZhciBuZXh0YXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMSk7XG4gICAgICAgICAgICAgICAgICAgIGNiKGVyciwgbmV4dGFyZ3MpO1xuICAgICAgICAgICAgICAgIH1dKSlcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBmdW5jdGlvbiAoZXJyLCByZXN1bHRzKSB7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2suYXBwbHkodGhhdCwgW2Vycl0uY29uY2F0KHJlc3VsdHMpKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9O1xuICAgIH07XG5cbiAgICBhc3luYy5jb21wb3NlID0gZnVuY3Rpb24gKC8qIGZ1bmN0aW9ucy4uLiAqLykge1xuICAgICAgcmV0dXJuIGFzeW5jLnNlcS5hcHBseShudWxsLCBBcnJheS5wcm90b3R5cGUucmV2ZXJzZS5jYWxsKGFyZ3VtZW50cykpO1xuICAgIH07XG5cbiAgICB2YXIgX2FwcGx5RWFjaCA9IGZ1bmN0aW9uIChlYWNoZm4sIGZucyAvKmFyZ3MuLi4qLykge1xuICAgICAgICB2YXIgZ28gPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgdGhhdCA9IHRoaXM7XG4gICAgICAgICAgICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7XG4gICAgICAgICAgICB2YXIgY2FsbGJhY2sgPSBhcmdzLnBvcCgpO1xuICAgICAgICAgICAgcmV0dXJuIGVhY2hmbihmbnMsIGZ1bmN0aW9uIChmbiwgY2IpIHtcbiAgICAgICAgICAgICAgICBmbi5hcHBseSh0aGF0LCBhcmdzLmNvbmNhdChbY2JdKSk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY2FsbGJhY2spO1xuICAgICAgICB9O1xuICAgICAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA+IDIpIHtcbiAgICAgICAgICAgIHZhciBhcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAyKTtcbiAgICAgICAgICAgIHJldHVybiBnby5hcHBseSh0aGlzLCBhcmdzKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBnbztcbiAgICAgICAgfVxuICAgIH07XG4gICAgYXN5bmMuYXBwbHlFYWNoID0gZG9QYXJhbGxlbChfYXBwbHlFYWNoKTtcbiAgICBhc3luYy5hcHBseUVhY2hTZXJpZXMgPSBkb1NlcmllcyhfYXBwbHlFYWNoKTtcblxuICAgIGFzeW5jLmZvcmV2ZXIgPSBmdW5jdGlvbiAoZm4sIGNhbGxiYWNrKSB7XG4gICAgICAgIGZ1bmN0aW9uIG5leHQoZXJyKSB7XG4gICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgaWYgKGNhbGxiYWNrKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aHJvdyBlcnI7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmbihuZXh0KTtcbiAgICAgICAgfVxuICAgICAgICBuZXh0KCk7XG4gICAgfTtcblxuICAgIC8vIE5vZGUuanNcbiAgICBpZiAodHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCcgJiYgbW9kdWxlLmV4cG9ydHMpIHtcbiAgICAgICAgbW9kdWxlLmV4cG9ydHMgPSBhc3luYztcbiAgICB9XG4gICAgLy8gQU1EIC8gUmVxdWlyZUpTXG4gICAgZWxzZSBpZiAodHlwZW9mIGRlZmluZSAhPT0gJ3VuZGVmaW5lZCcgJiYgZGVmaW5lLmFtZCkge1xuICAgICAgICBkZWZpbmUoW10sIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiBhc3luYztcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8vIGluY2x1ZGVkIGRpcmVjdGx5IHZpYSA8c2NyaXB0PiB0YWdcbiAgICBlbHNlIHtcbiAgICAgICAgcm9vdC5hc3luYyA9IGFzeW5jO1xuICAgIH1cblxufSgpKTtcbiIsInZhciBhc3luYyAgICAgICA9IHJlcXVpcmUoJ2FzeW5jJyksXG4gICAgdXJsUGFyc2VyICAgPSByZXF1aXJlKCd1cmwnKSxcbiAgICBSZXNvdXJjZSAgICA9IHJlcXVpcmUoJy4vUmVzb3VyY2UnKSxcbiAgICBFdmVudEVtaXR0ZXIgPSByZXF1aXJlKCdldmVudGVtaXR0ZXIzJyk7XG5cbi8qKlxuICogTWFuYWdlcyB0aGUgc3RhdGUgYW5kIGxvYWRpbmcgb2YgbXVsdGlwbGUgcmVzb3VyY2VzIHRvIGxvYWQuXG4gKlxuICogQGNsYXNzXG4gKiBAcGFyYW0gW2Jhc2VVcmw9JyddIHtzdHJpbmd9IFRoZSBiYXNlIHVybCBmb3IgYWxsIHJlc291cmNlcyBsb2FkZWQgYnkgdGhpcyBsb2FkZXIuXG4gKiBAcGFyYW0gW2NvbmN1cnJlbmN5PTEwXSB7bnVtYmVyfSBUaGUgbnVtYmVyIG9mIHJlc291cmNlcyB0byBsb2FkIGNvbmN1cnJlbnRseS5cbiAqL1xuZnVuY3Rpb24gTG9hZGVyKGJhc2VVcmwsIGNvbmN1cnJlbmN5KSB7XG4gICAgRXZlbnRFbWl0dGVyLmNhbGwodGhpcyk7XG5cbiAgICBjb25jdXJyZW5jeSA9IGNvbmN1cnJlbmN5IHx8IDEwO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGJhc2UgdXJsIGZvciBhbGwgcmVzb3VyY2VzIGxvYWRlZCBieSB0aGlzIGxvYWRlci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge3N0cmluZ31cbiAgICAgKi9cbiAgICB0aGlzLmJhc2VVcmwgPSBiYXNlVXJsIHx8ICcnO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHByb2dyZXNzIHBlcmNlbnQgb2YgdGhlIGxvYWRlciBnb2luZyB0aHJvdWdoIHRoZSBxdWV1ZS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLnByb2dyZXNzID0gMDtcblxuICAgIC8qKlxuICAgICAqIExvYWRpbmcgc3RhdGUgb2YgdGhlIGxvYWRlciwgdHJ1ZSBpZiBpdCBpcyBjdXJyZW50bHkgbG9hZGluZyByZXNvdXJjZXMuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqL1xuICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHBlcmNlbnRhZ2Ugb2YgdG90YWwgcHJvZ3Jlc3MgdGhhdCBhIHNpbmdsZSByZXNvdXJjZSByZXByZXNlbnRzLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMuX3Byb2dyZXNzQ2h1bmsgPSAwO1xuXG4gICAgLyoqXG4gICAgICogVGhlIG1pZGRsZXdhcmUgdG8gcnVuIGJlZm9yZSBsb2FkaW5nIGVhY2ggcmVzb3VyY2UuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtmdW5jdGlvbltdfVxuICAgICAqL1xuICAgIHRoaXMuX2JlZm9yZU1pZGRsZXdhcmUgPSBbXTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBtaWRkbGV3YXJlIHRvIHJ1biBhZnRlciBsb2FkaW5nIGVhY2ggcmVzb3VyY2UuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtmdW5jdGlvbltdfVxuICAgICAqL1xuICAgIHRoaXMuX2FmdGVyTWlkZGxld2FyZSA9IFtdO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGBfbG9hZFJlc291cmNlYCBmdW5jdGlvbiBib3VuZCB3aXRoIHRoaXMgb2JqZWN0IGNvbnRleHQuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBtZW1iZXIge2Z1bmN0aW9ufVxuICAgICAqL1xuICAgIHRoaXMuX2JvdW5kTG9hZFJlc291cmNlID0gdGhpcy5fbG9hZFJlc291cmNlLmJpbmQodGhpcyk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYF9vbkxvYWRgIGZ1bmN0aW9uIGJvdW5kIHdpdGggdGhpcyBvYmplY3QgY29udGV4dC5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQG1lbWJlciB7ZnVuY3Rpb259XG4gICAgICovXG4gICAgdGhpcy5fYm91bmRPbkxvYWQgPSB0aGlzLl9vbkxvYWQuYmluZCh0aGlzKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSByZXNvdXJjZSBidWZmZXIgdGhhdCBmaWxscyB1bnRpbCBgbG9hZGAgaXMgY2FsbGVkIHRvIHN0YXJ0IGxvYWRpbmcgcmVzb3VyY2VzLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAbWVtYmVyIHtSZXNvdXJjZVtdfVxuICAgICAqL1xuICAgIHRoaXMuX2J1ZmZlciA9IFtdO1xuXG4gICAgLyoqXG4gICAgICogVXNlZCB0byB0cmFjayBsb2FkIGNvbXBsZXRpb24uXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLl9udW1Ub0xvYWQgPSAwO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHJlc291cmNlcyB3YWl0aW5nIHRvIGJlIGxvYWRlZC5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQG1lbWJlciB7UmVzb3VyY2VbXX1cbiAgICAgKi9cbiAgICB0aGlzLl9xdWV1ZSA9IGFzeW5jLnF1ZXVlKHRoaXMuX2JvdW5kTG9hZFJlc291cmNlLCBjb25jdXJyZW5jeSk7XG5cbiAgICAvKipcbiAgICAgKiBBbGwgdGhlIHJlc291cmNlcyBmb3IgdGhpcyBsb2FkZXIga2V5ZWQgYnkgbmFtZS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge29iamVjdDxzdHJpbmcsIFJlc291cmNlPn1cbiAgICAgKi9cbiAgICB0aGlzLnJlc291cmNlcyA9IHt9O1xuXG4gICAgLyoqXG4gICAgICogRW1pdHRlZCBvbmNlIHBlciBsb2FkZWQgb3IgZXJyb3JlZCByZXNvdXJjZS5cbiAgICAgKlxuICAgICAqIEBldmVudCBwcm9ncmVzc1xuICAgICAqIEBtZW1iZXJvZiBMb2FkZXIjXG4gICAgICovXG5cbiAgICAvKipcbiAgICAgKiBFbWl0dGVkIG9uY2UgcGVyIGVycm9yZWQgcmVzb3VyY2UuXG4gICAgICpcbiAgICAgKiBAZXZlbnQgZXJyb3JcbiAgICAgKiBAbWVtYmVyb2YgTG9hZGVyI1xuICAgICAqL1xuXG4gICAgLyoqXG4gICAgICogRW1pdHRlZCBvbmNlIHBlciBsb2FkZWQgcmVzb3VyY2UuXG4gICAgICpcbiAgICAgKiBAZXZlbnQgbG9hZFxuICAgICAqIEBtZW1iZXJvZiBMb2FkZXIjXG4gICAgICovXG5cbiAgICAvKipcbiAgICAgKiBFbWl0dGVkIHdoZW4gdGhlIGxvYWRlciBiZWdpbnMgdG8gcHJvY2VzcyB0aGUgcXVldWUuXG4gICAgICpcbiAgICAgKiBAZXZlbnQgc3RhcnRcbiAgICAgKiBAbWVtYmVyb2YgTG9hZGVyI1xuICAgICAqL1xuXG4gICAgLyoqXG4gICAgICogRW1pdHRlZCB3aGVuIHRoZSBxdWV1ZWQgcmVzb3VyY2VzIGFsbCBsb2FkLlxuICAgICAqXG4gICAgICogQGV2ZW50IGNvbXBsZXRlXG4gICAgICogQG1lbWJlcm9mIExvYWRlciNcbiAgICAgKi9cbn1cblxuTG9hZGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoRXZlbnRFbWl0dGVyLnByb3RvdHlwZSk7XG5Mb2FkZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gTG9hZGVyO1xubW9kdWxlLmV4cG9ydHMgPSBMb2FkZXI7XG5cbi8qKlxuICogQWRkcyBhIHJlc291cmNlIChvciBtdWx0aXBsZSByZXNvdXJjZXMpIHRvIHRoZSBsb2FkZXIgcXVldWUuXG4gKlxuICogVGhpcyBmdW5jdGlvbiBjYW4gdGFrZSBhIHdpZGUgdmFyaWV0eSBvZiBkaWZmZXJlbnQgcGFyYW1ldGVycy4gVGhlIG9ubHkgdGhpbmcgdGhhdCBpcyBhbHdheXNcbiAqIHJlcXVpcmVkIHRoZSB1cmwgdG8gbG9hZC4gQWxsIHRoZSBmb2xsb3dpbmcgd2lsbCB3b3JrOlxuICpcbiAqIGBgYGpzXG4gKiBsb2FkZXJcbiAqICAgICAvLyBub3JtYWwgcGFyYW0gc3ludGF4XG4gKiAgICAgLmFkZCgna2V5JywgJ2h0dHA6Ly8uLi4nLCBmdW5jdGlvbiAoKSB7fSlcbiAqICAgICAuYWRkKCdodHRwOi8vLi4uJywgZnVuY3Rpb24gKCkge30pXG4gKiAgICAgLmFkZCgnaHR0cDovLy4uLicpXG4gKlxuICogICAgIC8vIG9iamVjdCBzeW50YXhcbiAqICAgICAuYWRkKHtcbiAqICAgICAgICAgbmFtZTogJ2tleTInLFxuICogICAgICAgICB1cmw6ICdodHRwOi8vLi4uJ1xuICogICAgIH0sIGZ1bmN0aW9uICgpIHt9KVxuICogICAgIC5hZGQoe1xuICogICAgICAgICB1cmw6ICdodHRwOi8vLi4uJ1xuICogICAgIH0sIGZ1bmN0aW9uICgpIHt9KVxuICogICAgIC5hZGQoe1xuICogICAgICAgICBuYW1lOiAna2V5MycsXG4gKiAgICAgICAgIHVybDogJ2h0dHA6Ly8uLi4nXG4gKiAgICAgICAgIG9uQ29tcGxldGU6IGZ1bmN0aW9uICgpIHt9XG4gKiAgICAgfSlcbiAqICAgICAuYWRkKHtcbiAqICAgICAgICAgdXJsOiAnaHR0cHM6Ly8uLi4nLFxuICogICAgICAgICBvbkNvbXBsZXRlOiBmdW5jdGlvbiAoKSB7fSxcbiAqICAgICAgICAgY3Jvc3NPcmlnaW46IHRydWVcbiAqICAgICB9KVxuICpcbiAqICAgICAvLyB5b3UgY2FuIGFsc28gcGFzcyBhbiBhcnJheSBvZiBvYmplY3RzIG9yIHVybHMgb3IgYm90aFxuICogICAgIC5hZGQoW1xuICogICAgICAgICB7IG5hbWU6ICdrZXk0JywgdXJsOiAnaHR0cDovLy4uLicsIG9uQ29tcGxldGU6IGZ1bmN0aW9uICgpIHt9IH0sXG4gKiAgICAgICAgIHsgdXJsOiAnaHR0cDovLy4uLicsIG9uQ29tcGxldGU6IGZ1bmN0aW9uICgpIHt9IH0sXG4gKiAgICAgICAgICdodHRwOi8vLi4uJ1xuICogICAgIF0pO1xuICogYGBgXG4gKlxuICogQGFsaWFzIGVucXVldWVcbiAqIEBwYXJhbSBbbmFtZV0ge3N0cmluZ30gVGhlIG5hbWUgb2YgdGhlIHJlc291cmNlIHRvIGxvYWQsIGlmIG5vdCBwYXNzZWQgdGhlIHVybCBpcyB1c2VkLlxuICogQHBhcmFtIHVybCB7c3RyaW5nfSBUaGUgdXJsIGZvciB0aGlzIHJlc291cmNlLCByZWxhdGl2ZSB0byB0aGUgYmFzZVVybCBvZiB0aGlzIGxvYWRlci5cbiAqIEBwYXJhbSBbb3B0aW9uc10ge29iamVjdH0gVGhlIG9wdGlvbnMgZm9yIHRoZSBsb2FkLlxuICogQHBhcmFtIFtvcHRpb25zLmNyb3NzT3JpZ2luXSB7Ym9vbGVhbn0gSXMgdGhpcyByZXF1ZXN0IGNyb3NzLW9yaWdpbj8gRGVmYXVsdCBpcyB0byBkZXRlcm1pbmUgYXV0b21hdGljYWxseS5cbiAqIEBwYXJhbSBbb3B0aW9ucy5sb2FkVHlwZT1SZXNvdXJjZS5MT0FEX1RZUEUuWEhSXSB7UmVzb3VyY2UuWEhSX0xPQURfVFlQRX0gSG93IHNob3VsZCB0aGlzIHJlc291cmNlIGJlIGxvYWRlZD9cbiAqIEBwYXJhbSBbb3B0aW9ucy54aHJUeXBlPVJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkRFRkFVTFRdIHtSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRX0gSG93IHNob3VsZCB0aGUgZGF0YSBiZWluZ1xuICogICAgICBsb2FkZWQgYmUgaW50ZXJwcmV0ZWQgd2hlbiB1c2luZyBYSFI/XG4gKiBAcGFyYW0gW2NhbGxiYWNrXSB7ZnVuY3Rpb259IEZ1bmN0aW9uIHRvIGNhbGwgd2hlbiB0aGlzIHNwZWNpZmljIHJlc291cmNlIGNvbXBsZXRlcyBsb2FkaW5nLlxuICogQHJldHVybiB7TG9hZGVyfVxuICovXG5Mb2FkZXIucHJvdG90eXBlLmFkZCA9IExvYWRlci5wcm90b3R5cGUuZW5xdWV1ZSA9IGZ1bmN0aW9uIChuYW1lLCB1cmwsIG9wdGlvbnMsIGNiKSB7XG4gICAgLy8gc3BlY2lhbCBjYXNlIG9mIGFuIGFycmF5IG9mIG9iamVjdHMgb3IgdXJsc1xuICAgIGlmIChBcnJheS5pc0FycmF5KG5hbWUpKSB7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbmFtZS5sZW5ndGg7ICsraSkge1xuICAgICAgICAgICAgdGhpcy5hZGQobmFtZVtpXSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICAvLyBpZiBhbiBvYmplY3QgaXMgcGFzc2VkIGluc3RlYWQgb2YgcGFyYW1zXG4gICAgaWYgKHR5cGVvZiBuYW1lID09PSAnb2JqZWN0Jykge1xuICAgICAgICBjYiA9IHVybCB8fCBuYW1lLmNhbGxiYWNrIHx8IG5hbWUub25Db21wbGV0ZTtcbiAgICAgICAgb3B0aW9ucyA9IG5hbWU7XG4gICAgICAgIHVybCA9IG5hbWUudXJsO1xuICAgICAgICBuYW1lID0gbmFtZS5uYW1lIHx8IG5hbWUua2V5IHx8IG5hbWUudXJsO1xuICAgIH1cblxuICAgIC8vIGNhc2Ugd2hlcmUgbm8gbmFtZSBpcyBwYXNzZWQgc2hpZnQgYWxsIGFyZ3Mgb3ZlciBieSBvbmUuXG4gICAgaWYgKHR5cGVvZiB1cmwgIT09ICdzdHJpbmcnKSB7XG4gICAgICAgIGNiID0gb3B0aW9ucztcbiAgICAgICAgb3B0aW9ucyA9IHVybDtcbiAgICAgICAgdXJsID0gbmFtZTtcbiAgICB9XG5cbiAgICAvLyBub3cgdGhhdCB3ZSBzaGlmdGVkIG1ha2Ugc3VyZSB3ZSBoYXZlIGEgcHJvcGVyIHVybC5cbiAgICBpZiAodHlwZW9mIHVybCAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdObyB1cmwgcGFzc2VkIHRvIGFkZCByZXNvdXJjZSB0byBsb2FkZXIuJyk7XG4gICAgfVxuXG4gICAgLy8gb3B0aW9ucyBhcmUgb3B0aW9uYWwgc28gcGVvcGxlIG1pZ2h0IHBhc3MgYSBmdW5jdGlvbiBhbmQgbm8gb3B0aW9uc1xuICAgIGlmICh0eXBlb2Ygb3B0aW9ucyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBjYiA9IG9wdGlvbnM7XG4gICAgICAgIG9wdGlvbnMgPSBudWxsO1xuICAgIH1cblxuICAgIC8vIGNoZWNrIGlmIHJlc291cmNlIGFscmVhZHkgZXhpc3RzLlxuICAgIGlmICh0aGlzLnJlc291cmNlc1tuYW1lXSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1Jlc291cmNlIHdpdGggbmFtZSBcIicgKyBuYW1lICsgJ1wiIGFscmVhZHkgZXhpc3RzLicpO1xuICAgIH1cblxuICAgIC8vIGFkZCBiYXNlIHVybCBpZiB0aGlzIGlzbid0IGFuIGFic29sdXRlIHVybFxuICAgIHVybCA9IHRoaXMuX2hhbmRsZUJhc2VVcmwodXJsKTtcblxuICAgIC8vIGNyZWF0ZSB0aGUgc3RvcmUgdGhlIHJlc291cmNlXG4gICAgdGhpcy5yZXNvdXJjZXNbbmFtZV0gPSBuZXcgUmVzb3VyY2UobmFtZSwgdXJsLCBvcHRpb25zKTtcblxuICAgIGlmICh0eXBlb2YgY2IgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgdGhpcy5yZXNvdXJjZXNbbmFtZV0ub25jZSgnYWZ0ZXJNaWRkbGV3YXJlJywgY2IpO1xuICAgIH1cblxuICAgIHRoaXMuX251bVRvTG9hZCsrO1xuXG4gICAgLy8gaWYgYWxyZWFkeSBsb2FkaW5nIGFkZCBpdCB0byB0aGUgd29ya2VyIHF1ZXVlXG4gICAgaWYgKHRoaXMuX3F1ZXVlLnN0YXJ0ZWQpIHtcbiAgICAgICAgdGhpcy5fcXVldWUucHVzaCh0aGlzLnJlc291cmNlc1tuYW1lXSk7XG4gICAgICAgIHRoaXMuX3Byb2dyZXNzQ2h1bmsgPSAoMTAwIC0gdGhpcy5wcm9ncmVzcykgLyAodGhpcy5fcXVldWUubGVuZ3RoKCkgKyB0aGlzLl9xdWV1ZS5ydW5uaW5nKCkpO1xuICAgIH1cbiAgICAvLyBvdGhlcndpc2UgYnVmZmVyIGl0IHRvIGJlIGFkZGVkIHRvIHRoZSBxdWV1ZSBsYXRlclxuICAgIGVsc2Uge1xuICAgICAgICB0aGlzLl9idWZmZXIucHVzaCh0aGlzLnJlc291cmNlc1tuYW1lXSk7XG4gICAgICAgIHRoaXMuX3Byb2dyZXNzQ2h1bmsgPSAxMDAgLyB0aGlzLl9idWZmZXIubGVuZ3RoO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzO1xufTtcblxuTG9hZGVyLnByb3RvdHlwZS5faGFuZGxlQmFzZVVybCA9IGZ1bmN0aW9uICh1cmwpIHtcbiAgICB2YXIgcGFyc2VkVXJsID0gdXJsUGFyc2VyLnBhcnNlKHVybCk7XG5cbiAgICAvLyBhYnNvbHV0ZSB1cmwsIGp1c3QgdXNlIGl0IGFzIGlzLlxuICAgIGlmIChwYXJzZWRVcmwucHJvdG9jb2wgfHwgcGFyc2VkVXJsLnBhdGhuYW1lLmluZGV4T2YoJy8vJykgPT09IDApIHtcbiAgICAgICAgcmV0dXJuIHVybDtcbiAgICB9XG5cbiAgICAvLyBpZiBiYXNlVXJsIGRvZXNuJ3QgZW5kIGluIHNsYXNoIGFuZCB1cmwgZG9lc24ndCBzdGFydCB3aXRoIHNsYXNoLCB0aGVuIGFkZCBhIHNsYXNoIGluYmV0d2VlblxuICAgIGlmIChcbiAgICAgICAgdGhpcy5iYXNlVXJsLmxlbmd0aCAmJlxuICAgICAgICB0aGlzLmJhc2VVcmwubGFzdEluZGV4T2YoJy8nKSAhPT0gdGhpcy5iYXNlVXJsLmxlbmd0aCAtIDEgJiZcbiAgICAgICAgdXJsLmNoYXJBdCgwKSAhPT0gJy8nXG4gICAgKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmJhc2VVcmwgKyAnLycgKyB1cmw7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICByZXR1cm4gdGhpcy5iYXNlVXJsICsgdXJsO1xuICAgIH1cbn07XG5cblxuLyoqXG4gKiBTZXRzIHVwIGEgbWlkZGxld2FyZSBmdW5jdGlvbiB0aGF0IHdpbGwgcnVuICpiZWZvcmUqIHRoZVxuICogcmVzb3VyY2UgaXMgbG9hZGVkLlxuICpcbiAqIEBhbGlhcyBwcmVcbiAqIEBwYXJhbSBtaWRkbGV3YXJlIHtmdW5jdGlvbn0gVGhlIG1pZGRsZXdhcmUgZnVuY3Rpb24gdG8gcmVnaXN0ZXIuXG4gKiBAcmV0dXJuIHtMb2FkZXJ9XG4gKi9cbkxvYWRlci5wcm90b3R5cGUuYmVmb3JlID0gTG9hZGVyLnByb3RvdHlwZS5wcmUgPSBmdW5jdGlvbiAoZm4pIHtcbiAgICB0aGlzLl9iZWZvcmVNaWRkbGV3YXJlLnB1c2goZm4pO1xuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIFNldHMgdXAgYSBtaWRkbGV3YXJlIGZ1bmN0aW9uIHRoYXQgd2lsbCBydW4gKmFmdGVyKiB0aGVcbiAqIHJlc291cmNlIGlzIGxvYWRlZC5cbiAqXG4gKiBAYWxpYXMgdXNlXG4gKiBAcGFyYW0gbWlkZGxld2FyZSB7ZnVuY3Rpb259IFRoZSBtaWRkbGV3YXJlIGZ1bmN0aW9uIHRvIHJlZ2lzdGVyLlxuICogQHJldHVybiB7TG9hZGVyfVxuICovXG5Mb2FkZXIucHJvdG90eXBlLmFmdGVyID0gTG9hZGVyLnByb3RvdHlwZS51c2UgPSBmdW5jdGlvbiAoZm4pIHtcbiAgICB0aGlzLl9hZnRlck1pZGRsZXdhcmUucHVzaChmbik7XG5cbiAgICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogUmVzZXRzIHRoZSBxdWV1ZSBvZiB0aGUgbG9hZGVyIHRvIHByZXBhcmUgZm9yIGEgbmV3IGxvYWQuXG4gKlxuICogQHJldHVybiB7TG9hZGVyfVxuICovXG5Mb2FkZXIucHJvdG90eXBlLnJlc2V0ID0gZnVuY3Rpb24gKCkge1xuICAgIC8vIHRoaXMuYmFzZVVybCA9IGJhc2VVcmwgfHwgJyc7XG5cbiAgICB0aGlzLnByb2dyZXNzID0gMDtcblxuICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xuXG4gICAgdGhpcy5fcHJvZ3Jlc3NDaHVuayA9IDA7XG5cbiAgICAvLyB0aGlzLl9iZWZvcmVNaWRkbGV3YXJlLmxlbmd0aCA9IDA7XG4gICAgLy8gdGhpcy5fYWZ0ZXJNaWRkbGV3YXJlLmxlbmd0aCA9IDA7XG5cbiAgICB0aGlzLl9idWZmZXIubGVuZ3RoID0gMDtcblxuICAgIHRoaXMuX251bVRvTG9hZCA9IDA7XG5cbiAgICB0aGlzLl9xdWV1ZS5raWxsKCk7XG4gICAgdGhpcy5fcXVldWUuc3RhcnRlZCA9IGZhbHNlO1xuXG4gICAgdGhpcy5yZXNvdXJjZXMgPSB7fTtcbn07XG5cbi8qKlxuICogU3RhcnRzIGxvYWRpbmcgdGhlIHF1ZXVlZCByZXNvdXJjZXMuXG4gKlxuICogQGZpcmVzIHN0YXJ0XG4gKiBAcGFyYW0gW2NhbGxiYWNrXSB7ZnVuY3Rpb259IE9wdGlvbmFsIGNhbGxiYWNrIHRoYXQgd2lsbCBiZSBib3VuZCB0byB0aGUgYGNvbXBsZXRlYCBldmVudC5cbiAqIEByZXR1cm4ge0xvYWRlcn1cbiAqL1xuTG9hZGVyLnByb3RvdHlwZS5sb2FkID0gZnVuY3Rpb24gKGNiKSB7XG4gICAgLy8gcmVnaXN0ZXIgY29tcGxldGUgY2FsbGJhY2sgaWYgdGhleSBwYXNzIG9uZVxuICAgIGlmICh0eXBlb2YgY2IgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgdGhpcy5vbmNlKCdjb21wbGV0ZScsIGNiKTtcbiAgICB9XG5cbiAgICAvLyBpZiB0aGUgcXVldWUgaGFzIGFscmVhZHkgc3RhcnRlZCB3ZSBhcmUgZG9uZSBoZXJlXG4gICAgaWYgKHRoaXMuX3F1ZXVlLnN0YXJ0ZWQpIHtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLy8gbm90aWZ5IG9mIHN0YXJ0XG4gICAgdGhpcy5lbWl0KCdzdGFydCcsIHRoaXMpO1xuXG4gICAgLy8gc3RhcnQgdGhlIGludGVybmFsIHF1ZXVlXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLl9idWZmZXIubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgdGhpcy5fcXVldWUucHVzaCh0aGlzLl9idWZmZXJbaV0pO1xuICAgIH1cblxuICAgIC8vIGVtcHR5IHRoZSBidWZmZXJcbiAgICB0aGlzLl9idWZmZXIubGVuZ3RoID0gMDtcblxuICAgIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBMb2FkcyBhIHNpbmdsZSByZXNvdXJjZS5cbiAqXG4gKiBAZmlyZXMgcHJvZ3Jlc3NcbiAqIEBwcml2YXRlXG4gKi9cbkxvYWRlci5wcm90b3R5cGUuX2xvYWRSZXNvdXJjZSA9IGZ1bmN0aW9uIChyZXNvdXJjZSwgZGVxdWV1ZSkge1xuICAgIHZhciBzZWxmID0gdGhpcztcblxuICAgIHJlc291cmNlLl9kZXF1ZXVlID0gZGVxdWV1ZTtcblxuICAgIHRoaXMuX3J1bk1pZGRsZXdhcmUocmVzb3VyY2UsIHRoaXMuX2JlZm9yZU1pZGRsZXdhcmUsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgLy8gcmVzb3VyY2Uub24oJ3Byb2dyZXNzJywgc2VsZi5lbWl0LmJpbmQoc2VsZiwgJ3Byb2dyZXNzJykpO1xuXG4gICAgICAgIHJlc291cmNlLmxvYWQoc2VsZi5fYm91bmRPbkxvYWQpO1xuICAgIH0pO1xufTtcblxuLyoqXG4gKiBDYWxsZWQgb25jZSBlYWNoIHJlc291cmNlIGhhcyBsb2FkZWQuXG4gKlxuICogQGZpcmVzIGNvbXBsZXRlXG4gKiBAcHJpdmF0ZVxuICovXG5Mb2FkZXIucHJvdG90eXBlLl9vbkNvbXBsZXRlID0gZnVuY3Rpb24gKCkge1xuICAgIHRoaXMuZW1pdCgnY29tcGxldGUnLCB0aGlzLCB0aGlzLnJlc291cmNlcyk7XG59O1xuXG4vKipcbiAqIENhbGxlZCBlYWNoIHRpbWUgYSByZXNvdXJjZXMgaXMgbG9hZGVkLlxuICpcbiAqIEBmaXJlcyBwcm9ncmVzc1xuICogQGZpcmVzIGVycm9yXG4gKiBAZmlyZXMgbG9hZFxuICogQHByaXZhdGVcbiAqL1xuTG9hZGVyLnByb3RvdHlwZS5fb25Mb2FkID0gZnVuY3Rpb24gKHJlc291cmNlKSB7XG4gICAgdGhpcy5wcm9ncmVzcyArPSB0aGlzLl9wcm9ncmVzc0NodW5rO1xuXG4gICAgdGhpcy5lbWl0KCdwcm9ncmVzcycsIHRoaXMsIHJlc291cmNlKTtcblxuICAgIC8vIHJ1biBtaWRkbGV3YXJlLCB0aGlzICptdXN0KiBoYXBwZW4gYmVmb3JlIGRlcXVldWUgc28gc3ViLWFzc2V0cyBnZXQgYWRkZWQgcHJvcGVybHlcbiAgICB0aGlzLl9ydW5NaWRkbGV3YXJlKHJlc291cmNlLCB0aGlzLl9hZnRlck1pZGRsZXdhcmUsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmVzb3VyY2UuZW1pdCgnYWZ0ZXJNaWRkbGV3YXJlJywgcmVzb3VyY2UpO1xuXG4gICAgICAgIHRoaXMuX251bVRvTG9hZC0tO1xuXG4gICAgICAgIC8vIGRvIGNvbXBsZXRpb24gY2hlY2tcbiAgICAgICAgaWYgKHRoaXMuX251bVRvTG9hZCA9PT0gMCkge1xuICAgICAgICAgICAgdGhpcy5wcm9ncmVzcyA9IDEwMDtcbiAgICAgICAgICAgIHRoaXMuX29uQ29tcGxldGUoKTtcbiAgICAgICAgfVxuICAgICAgICBcbiAgICAgICAgaWYgKHJlc291cmNlLmVycm9yKSB7XG4gICAgICAgICAgICB0aGlzLmVtaXQoJ2Vycm9yJywgcmVzb3VyY2UuZXJyb3IsIHRoaXMsIHJlc291cmNlKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuZW1pdCgnbG9hZCcsIHRoaXMsIHJlc291cmNlKTtcbiAgICAgICAgfVxuICAgIH0pO1xuICAgIFxuXG5cbiAgICAvLyByZW1vdmUgdGhpcyByZXNvdXJjZSBmcm9tIHRoZSBhc3luYyBxdWV1ZVxuICAgIHJlc291cmNlLl9kZXF1ZXVlKCk7XG59O1xuXG4vKipcbiAqIFJ1biBtaWRkbGV3YXJlIGZ1bmN0aW9ucyBvbiBhIHJlc291cmNlLlxuICpcbiAqIEBwcml2YXRlXG4gKi9cbkxvYWRlci5wcm90b3R5cGUuX3J1bk1pZGRsZXdhcmUgPSBmdW5jdGlvbiAocmVzb3VyY2UsIGZucywgY2IpIHtcbiAgICB2YXIgc2VsZiA9IHRoaXM7XG5cbiAgICBhc3luYy5lYWNoU2VyaWVzKGZucywgZnVuY3Rpb24gKGZuLCBuZXh0KSB7XG4gICAgICAgIGZuLmNhbGwoc2VsZiwgcmVzb3VyY2UsIG5leHQpO1xuICAgIH0sIGNiLmJpbmQodGhpcywgcmVzb3VyY2UpKTtcbn07XG5cbkxvYWRlci5MT0FEX1RZUEUgPSBSZXNvdXJjZS5MT0FEX1RZUEU7XG5Mb2FkZXIuWEhSX1JFQURZX1NUQVRFID0gUmVzb3VyY2UuWEhSX1JFQURZX1NUQVRFO1xuTG9hZGVyLlhIUl9SRVNQT05TRV9UWVBFID0gUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEU7XG4iLCJ2YXIgRXZlbnRFbWl0dGVyID0gcmVxdWlyZSgnZXZlbnRlbWl0dGVyMycpLFxuICAgIF91cmwgPSByZXF1aXJlKCd1cmwnKSxcbiAgICAvLyB0ZXN0cyBpcyBDT1JTIGlzIHN1cHBvcnRlZCBpbiBYSFIsIGlmIG5vdCB3ZSBuZWVkIHRvIHVzZSBYRFJcbiAgICB1c2VYZHIgPSAhISh3aW5kb3cuWERvbWFpblJlcXVlc3QgJiYgISgnd2l0aENyZWRlbnRpYWxzJyBpbiAobmV3IFhNTEh0dHBSZXF1ZXN0KCkpKSksXG4gICAgdGVtcEFuY2hvciA9IG51bGw7XG5cbi8qKlxuICogTWFuYWdlcyB0aGUgc3RhdGUgYW5kIGxvYWRpbmcgb2YgYSBzaW5nbGUgcmVzb3VyY2UgcmVwcmVzZW50ZWQgYnlcbiAqIGEgc2luZ2xlIFVSTC5cbiAqXG4gKiBAY2xhc3NcbiAqIEBwYXJhbSBuYW1lIHtzdHJpbmd9IFRoZSBuYW1lIG9mIHRoZSByZXNvdXJjZSB0byBsb2FkLlxuICogQHBhcmFtIHVybCB7c3RyaW5nfHN0cmluZ1tdfSBUaGUgdXJsIGZvciB0aGlzIHJlc291cmNlLCBmb3IgYXVkaW8vdmlkZW8gbG9hZHMgeW91IGNhbiBwYXNzIGFuIGFycmF5IG9mIHNvdXJjZXMuXG4gKiBAcGFyYW0gW29wdGlvbnNdIHtvYmplY3R9IFRoZSBvcHRpb25zIGZvciB0aGUgbG9hZC5cbiAqIEBwYXJhbSBbb3B0aW9ucy5jcm9zc09yaWdpbl0ge3N0cmluZ3xib29sZWFufSBJcyB0aGlzIHJlcXVlc3QgY3Jvc3Mtb3JpZ2luPyBEZWZhdWx0IGlzIHRvIGRldGVybWluZSBhdXRvbWF0aWNhbGx5LlxuICogQHBhcmFtIFtvcHRpb25zLmxvYWRUeXBlPVJlc291cmNlLkxPQURfVFlQRS5YSFJdIHtSZXNvdXJjZS5MT0FEX1RZUEV9IEhvdyBzaG91bGQgdGhpcyByZXNvdXJjZSBiZSBsb2FkZWQ/XG4gKiBAcGFyYW0gW29wdGlvbnMueGhyVHlwZT1SZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRS5ERUZBVUxUXSB7UmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEV9IEhvdyBzaG91bGQgdGhlIGRhdGEgYmVpbmdcbiAqICAgICAgbG9hZGVkIGJlIGludGVycHJldGVkIHdoZW4gdXNpbmcgWEhSP1xuICogQHBhcmFtIFtvcHRpb25zLm1ldGFkYXRhXSB7b2JqZWN0fSBFeHRyYSBpbmZvIGZvciBtaWRkbGV3YXJlLlxuICovXG5mdW5jdGlvbiBSZXNvdXJjZShuYW1lLCB1cmwsIG9wdGlvbnMpIHtcbiAgICBFdmVudEVtaXR0ZXIuY2FsbCh0aGlzKTtcblxuICAgIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuXG4gICAgaWYgKHR5cGVvZiBuYW1lICE9PSAnc3RyaW5nJyB8fCB0eXBlb2YgdXJsICE9PSAnc3RyaW5nJykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0JvdGggbmFtZSBhbmQgdXJsIGFyZSByZXF1aXJlZCBmb3IgY29uc3RydWN0aW5nIGEgcmVzb3VyY2UuJyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhlIG5hbWUgb2YgdGhpcyByZXNvdXJjZS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge3N0cmluZ31cbiAgICAgKiBAcmVhZG9ubHlcbiAgICAgKi9cbiAgICB0aGlzLm5hbWUgPSBuYW1lO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHVybCB1c2VkIHRvIGxvYWQgdGhpcyByZXNvdXJjZS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge3N0cmluZ31cbiAgICAgKiBAcmVhZG9ubHlcbiAgICAgKi9cbiAgICB0aGlzLnVybCA9IHVybDtcblxuICAgIC8qKlxuICAgICAqIFN0b3JlcyB3aGV0aGVyIG9yIG5vdCB0aGlzIHVybCBpcyBhIGRhdGEgdXJsLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKiBAcmVhZG9ubHlcbiAgICAgKi9cbiAgICB0aGlzLmlzRGF0YVVybCA9IHRoaXMudXJsLmluZGV4T2YoJ2RhdGE6JykgPT09IDA7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgZGF0YSB0aGF0IHdhcyBsb2FkZWQgYnkgdGhlIHJlc291cmNlLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7YW55fVxuICAgICAqL1xuICAgIHRoaXMuZGF0YSA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBJcyB0aGlzIHJlcXVlc3QgY3Jvc3Mtb3JpZ2luPyBJZiB1bnNldCwgZGV0ZXJtaW5lZCBhdXRvbWF0aWNhbGx5LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7c3RyaW5nfVxuICAgICAqL1xuICAgIHRoaXMuY3Jvc3NPcmlnaW4gPSBvcHRpb25zLmNyb3NzT3JpZ2luID09PSB0cnVlID8gJ2Fub255bW91cycgOiBvcHRpb25zLmNyb3NzT3JpZ2luO1xuXG4gICAgLyoqXG4gICAgICogVGhlIG1ldGhvZCBvZiBsb2FkaW5nIHRvIHVzZSBmb3IgdGhpcyByZXNvdXJjZS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1Jlc291cmNlLkxPQURfVFlQRX1cbiAgICAgKi9cbiAgICB0aGlzLmxvYWRUeXBlID0gb3B0aW9ucy5sb2FkVHlwZSB8fCB0aGlzLl9kZXRlcm1pbmVMb2FkVHlwZSgpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHR5cGUgdXNlZCB0byBsb2FkIHRoZSByZXNvdXJjZSB2aWEgWEhSLiBJZiB1bnNldCwgZGV0ZXJtaW5lZCBhdXRvbWF0aWNhbGx5LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7c3RyaW5nfVxuICAgICAqL1xuICAgIHRoaXMueGhyVHlwZSA9IG9wdGlvbnMueGhyVHlwZTtcblxuICAgIC8qKlxuICAgICAqIEV4dHJhIGluZm8gZm9yIG1pZGRsZXdhcmVcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge29iamVjdH1cbiAgICAgKi9cbiAgICB0aGlzLm1ldGFkYXRhID0gb3B0aW9ucy5tZXRhZGF0YSB8fCB7fTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBlcnJvciB0aGF0IG9jY3VycmVkIHdoaWxlIGxvYWRpbmcgKGlmIGFueSkuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtFcnJvcn1cbiAgICAgKiBAcmVhZG9ubHlcbiAgICAgKi9cbiAgICB0aGlzLmVycm9yID0gbnVsbDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBYSFIgb2JqZWN0IHRoYXQgd2FzIHVzZWQgdG8gbG9hZCB0aGlzIHJlc291cmNlLiBUaGlzIGlzIG9ubHkgc2V0XG4gICAgICogd2hlbiBgbG9hZFR5cGVgIGlzIGBSZXNvdXJjZS5MT0FEX1RZUEUuWEhSYC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1hNTEh0dHBSZXF1ZXN0fVxuICAgICAqL1xuICAgIHRoaXMueGhyID0gbnVsbDtcblxuICAgIC8qKlxuICAgICAqIERlc2NyaWJlcyBpZiB0aGlzIHJlc291cmNlIHdhcyBsb2FkZWQgYXMganNvbi4gT25seSB2YWxpZCBhZnRlciB0aGUgcmVzb3VyY2VcbiAgICAgKiBoYXMgY29tcGxldGVseSBsb2FkZWQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqL1xuICAgIHRoaXMuaXNKc29uID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBEZXNjcmliZXMgaWYgdGhpcyByZXNvdXJjZSB3YXMgbG9hZGVkIGFzIHhtbC4gT25seSB2YWxpZCBhZnRlciB0aGUgcmVzb3VyY2VcbiAgICAgKiBoYXMgY29tcGxldGVseSBsb2FkZWQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqL1xuICAgIHRoaXMuaXNYbWwgPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIERlc2NyaWJlcyBpZiB0aGlzIHJlc291cmNlIHdhcyBsb2FkZWQgYXMgYW4gaW1hZ2UgdGFnLiBPbmx5IHZhbGlkIGFmdGVyIHRoZSByZXNvdXJjZVxuICAgICAqIGhhcyBjb21wbGV0ZWx5IGxvYWRlZC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICovXG4gICAgdGhpcy5pc0ltYWdlID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBEZXNjcmliZXMgaWYgdGhpcyByZXNvdXJjZSB3YXMgbG9hZGVkIGFzIGFuIGF1ZGlvIHRhZy4gT25seSB2YWxpZCBhZnRlciB0aGUgcmVzb3VyY2VcbiAgICAgKiBoYXMgY29tcGxldGVseSBsb2FkZWQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqL1xuICAgIHRoaXMuaXNBdWRpbyA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogRGVzY3JpYmVzIGlmIHRoaXMgcmVzb3VyY2Ugd2FzIGxvYWRlZCBhcyBhIHZpZGVvIHRhZy4gT25seSB2YWxpZCBhZnRlciB0aGUgcmVzb3VyY2VcbiAgICAgKiBoYXMgY29tcGxldGVseSBsb2FkZWQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqL1xuICAgIHRoaXMuaXNWaWRlbyA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGBkZXF1ZXVlYCBtZXRob2QgdGhhdCB3aWxsIGJlIHVzZWQgYSBzdG9yYWdlIHBsYWNlIGZvciB0aGUgYXN5bmMgcXVldWUgZGVxdWV1ZSBtZXRob2RcbiAgICAgKiB1c2VkIHByaXZhdGVseSBieSB0aGUgbG9hZGVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7ZnVuY3Rpb259XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9kZXF1ZXVlID0gbnVsbDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBgY29tcGxldGVgIGZ1bmN0aW9uIGJvdW5kIHRvIHRoaXMgcmVzb3VyY2UncyBjb250ZXh0LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7ZnVuY3Rpb259XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9ib3VuZENvbXBsZXRlID0gdGhpcy5jb21wbGV0ZS5iaW5kKHRoaXMpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGBfb25FcnJvcmAgZnVuY3Rpb24gYm91bmQgdG8gdGhpcyByZXNvdXJjZSdzIGNvbnRleHQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtmdW5jdGlvbn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX2JvdW5kT25FcnJvciA9IHRoaXMuX29uRXJyb3IuYmluZCh0aGlzKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBgX29uUHJvZ3Jlc3NgIGZ1bmN0aW9uIGJvdW5kIHRvIHRoaXMgcmVzb3VyY2UncyBjb250ZXh0LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7ZnVuY3Rpb259XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9ib3VuZE9uUHJvZ3Jlc3MgPSB0aGlzLl9vblByb2dyZXNzLmJpbmQodGhpcyk7XG5cbiAgICAvLyB4aHIgY2FsbGJhY2tzXG4gICAgdGhpcy5fYm91bmRYaHJPbkVycm9yID0gdGhpcy5feGhyT25FcnJvci5iaW5kKHRoaXMpO1xuICAgIHRoaXMuX2JvdW5kWGhyT25BYm9ydCA9IHRoaXMuX3hock9uQWJvcnQuYmluZCh0aGlzKTtcbiAgICB0aGlzLl9ib3VuZFhock9uTG9hZCA9IHRoaXMuX3hock9uTG9hZC5iaW5kKHRoaXMpO1xuICAgIHRoaXMuX2JvdW5kWGRyT25UaW1lb3V0ID0gdGhpcy5feGRyT25UaW1lb3V0LmJpbmQodGhpcyk7XG5cbiAgICAvKipcbiAgICAgKiBFbWl0dGVkIHdoZW4gdGhlIHJlc291cmNlIGJlaW5ncyB0byBsb2FkLlxuICAgICAqXG4gICAgICogQGV2ZW50IHN0YXJ0XG4gICAgICogQG1lbWJlcm9mIFJlc291cmNlI1xuICAgICAqL1xuXG4gICAgLyoqXG4gICAgICogRW1pdHRlZCBlYWNoIHRpbWUgcHJvZ3Jlc3Mgb2YgdGhpcyByZXNvdXJjZSBsb2FkIHVwZGF0ZXMuXG4gICAgICogTm90IGFsbCByZXNvdXJjZXMgdHlwZXMgYW5kIGxvYWRlciBzeXN0ZW1zIGNhbiBzdXBwb3J0IHRoaXMgZXZlbnRcbiAgICAgKiBzbyBzb21ldGltZXMgaXQgbWF5IG5vdCBiZSBhdmFpbGFibGUuIElmIHRoZSByZXNvdXJjZVxuICAgICAqIGlzIGJlaW5nIGxvYWRlZCBvbiBhIG1vZGVybiBicm93c2VyLCB1c2luZyBYSFIsIGFuZCB0aGUgcmVtb3RlIHNlcnZlclxuICAgICAqIHByb3Blcmx5IHNldHMgQ29udGVudC1MZW5ndGggaGVhZGVycywgdGhlbiB0aGlzIHdpbGwgYmUgYXZhaWxhYmxlLlxuICAgICAqXG4gICAgICogQGV2ZW50IHByb2dyZXNzXG4gICAgICogQG1lbWJlcm9mIFJlc291cmNlI1xuICAgICAqL1xuXG4gICAgLyoqXG4gICAgICogRW1pdHRlZCBvbmNlIHRoaXMgcmVzb3VyY2UgaGFzIGxvYWRlZCwgaWYgdGhlcmUgd2FzIGFuIGVycm9yIGl0IHdpbGxcbiAgICAgKiBiZSBpbiB0aGUgYGVycm9yYCBwcm9wZXJ0eS5cbiAgICAgKlxuICAgICAqIEBldmVudCBjb21wbGV0ZVxuICAgICAqIEBtZW1iZXJvZiBSZXNvdXJjZSNcbiAgICAgKi9cbn1cblxuUmVzb3VyY2UucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShFdmVudEVtaXR0ZXIucHJvdG90eXBlKTtcblJlc291cmNlLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFJlc291cmNlO1xubW9kdWxlLmV4cG9ydHMgPSBSZXNvdXJjZTtcblxuLyoqXG4gKiBNYXJrcyB0aGUgcmVzb3VyY2UgYXMgY29tcGxldGUuXG4gKlxuICogQGZpcmVzIGNvbXBsZXRlXG4gKi9cblJlc291cmNlLnByb3RvdHlwZS5jb21wbGV0ZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAvLyBUT0RPOiBDbGVhbiB0aGlzIHVwIGluIGEgd3JhcHBlciBvciBzb21ldGhpbmcuLi5ncm9zcy4uLi5cbiAgICBpZiAodGhpcy5kYXRhICYmIHRoaXMuZGF0YS5yZW1vdmVFdmVudExpc3RlbmVyKSB7XG4gICAgICAgIHRoaXMuZGF0YS5yZW1vdmVFdmVudExpc3RlbmVyKCdlcnJvcicsIHRoaXMuX2JvdW5kT25FcnJvcik7XG4gICAgICAgIHRoaXMuZGF0YS5yZW1vdmVFdmVudExpc3RlbmVyKCdsb2FkJywgdGhpcy5fYm91bmRDb21wbGV0ZSk7XG4gICAgICAgIHRoaXMuZGF0YS5yZW1vdmVFdmVudExpc3RlbmVyKCdwcm9ncmVzcycsIHRoaXMuX2JvdW5kT25Qcm9ncmVzcyk7XG4gICAgICAgIHRoaXMuZGF0YS5yZW1vdmVFdmVudExpc3RlbmVyKCdjYW5wbGF5dGhyb3VnaCcsIHRoaXMuX2JvdW5kQ29tcGxldGUpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnhocikge1xuICAgICAgICBpZiAodGhpcy54aHIucmVtb3ZlRXZlbnRMaXN0ZW5lcikge1xuICAgICAgICAgICAgdGhpcy54aHIucmVtb3ZlRXZlbnRMaXN0ZW5lcignZXJyb3InLCB0aGlzLl9ib3VuZFhock9uRXJyb3IpO1xuICAgICAgICAgICAgdGhpcy54aHIucmVtb3ZlRXZlbnRMaXN0ZW5lcignYWJvcnQnLCB0aGlzLl9ib3VuZFhock9uQWJvcnQpO1xuICAgICAgICAgICAgdGhpcy54aHIucmVtb3ZlRXZlbnRMaXN0ZW5lcigncHJvZ3Jlc3MnLCB0aGlzLl9ib3VuZE9uUHJvZ3Jlc3MpO1xuICAgICAgICAgICAgdGhpcy54aHIucmVtb3ZlRXZlbnRMaXN0ZW5lcignbG9hZCcsIHRoaXMuX2JvdW5kWGhyT25Mb2FkKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMueGhyLm9uZXJyb3IgPSBudWxsO1xuICAgICAgICAgICAgdGhpcy54aHIub250aW1lb3V0ID0gbnVsbDtcbiAgICAgICAgICAgIHRoaXMueGhyLm9ucHJvZ3Jlc3MgPSBudWxsO1xuICAgICAgICAgICAgdGhpcy54aHIub25sb2FkID0gbnVsbDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMuZW1pdCgnY29tcGxldGUnLCB0aGlzKTtcbn07XG5cbi8qKlxuICogS2lja3Mgb2ZmIGxvYWRpbmcgb2YgdGhpcyByZXNvdXJjZS5cbiAqXG4gKiBAZmlyZXMgc3RhcnRcbiAqIEBwYXJhbSBbY2FsbGJhY2tdIHtmdW5jdGlvbn0gT3B0aW9uYWwgY2FsbGJhY2sgdG8gY2FsbCBvbmNlIHRoZSByZXNvdXJjZSBpcyBsb2FkZWQuXG4gKi9cblJlc291cmNlLnByb3RvdHlwZS5sb2FkID0gZnVuY3Rpb24gKGNiKSB7XG4gICAgdGhpcy5lbWl0KCdzdGFydCcsIHRoaXMpO1xuXG4gICAgLy8gaWYgYSBjYWxsYmFjayBpcyBzZXQsIGxpc3RlbiBmb3IgY29tcGxldGUgZXZlbnRcbiAgICBpZiAoY2IpIHtcbiAgICAgICAgdGhpcy5vbmNlKCdjb21wbGV0ZScsIGNiKTtcbiAgICB9XG5cbiAgICAvLyBpZiB1bnNldCwgZGV0ZXJtaW5lIHRoZSB2YWx1ZVxuICAgIGlmICh0aGlzLmNyb3NzT3JpZ2luID09PSBmYWxzZSB8fCB0eXBlb2YgdGhpcy5jcm9zc09yaWdpbiAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgdGhpcy5jcm9zc09yaWdpbiA9IHRoaXMuX2RldGVybWluZUNyb3NzT3JpZ2luKHRoaXMudXJsKTtcbiAgICB9XG5cbiAgICBzd2l0Y2godGhpcy5sb2FkVHlwZSkge1xuICAgICAgICBjYXNlIFJlc291cmNlLkxPQURfVFlQRS5JTUFHRTpcbiAgICAgICAgICAgIHRoaXMuX2xvYWRJbWFnZSgpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSBSZXNvdXJjZS5MT0FEX1RZUEUuQVVESU86XG4gICAgICAgICAgICB0aGlzLl9sb2FkRWxlbWVudCgnYXVkaW8nKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgUmVzb3VyY2UuTE9BRF9UWVBFLlZJREVPOlxuICAgICAgICAgICAgdGhpcy5fbG9hZEVsZW1lbnQoJ3ZpZGVvJyk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIFJlc291cmNlLkxPQURfVFlQRS5YSFI6XG4gICAgICAgICAgICAvKiBmYWxscyB0aHJvdWdoICovXG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICBpZiAodXNlWGRyICYmIHRoaXMuY3Jvc3NPcmlnaW4pIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9sb2FkWGRyKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9sb2FkWGhyKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBicmVhaztcbiAgICB9XG59O1xuXG4vKipcbiAqIExvYWRzIHRoaXMgcmVzb3VyY2VzIHVzaW5nIGFuIEltYWdlIG9iamVjdC5cbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5SZXNvdXJjZS5wcm90b3R5cGUuX2xvYWRJbWFnZSA9IGZ1bmN0aW9uICgpIHtcbiAgICB0aGlzLmRhdGEgPSBuZXcgSW1hZ2UoKTtcblxuICAgIGlmICh0aGlzLmNyb3NzT3JpZ2luKSB7XG4gICAgICAgIHRoaXMuZGF0YS5jcm9zc09yaWdpbiA9IHRoaXMuY3Jvc3NPcmlnaW47XG4gICAgfVxuXG4gICAgdGhpcy5kYXRhLnNyYyA9IHRoaXMudXJsO1xuXG4gICAgdGhpcy5pc0ltYWdlID0gdHJ1ZTtcblxuICAgIHRoaXMuZGF0YS5hZGRFdmVudExpc3RlbmVyKCdlcnJvcicsIHRoaXMuX2JvdW5kT25FcnJvciwgZmFsc2UpO1xuICAgIHRoaXMuZGF0YS5hZGRFdmVudExpc3RlbmVyKCdsb2FkJywgdGhpcy5fYm91bmRDb21wbGV0ZSwgZmFsc2UpO1xuICAgIHRoaXMuZGF0YS5hZGRFdmVudExpc3RlbmVyKCdwcm9ncmVzcycsIHRoaXMuX2JvdW5kT25Qcm9ncmVzcywgZmFsc2UpO1xufTtcblxuLyoqXG4gKiBMb2FkcyB0aGlzIHJlc291cmNlcyB1c2luZyBhbiBIVE1MQXVkaW9FbGVtZW50IG9yIEhUTUxWaWRlb0VsZW1lbnQuXG4gKlxuICogQHByaXZhdGVcbiAqL1xuUmVzb3VyY2UucHJvdG90eXBlLl9sb2FkRWxlbWVudCA9IGZ1bmN0aW9uICh0eXBlKSB7XG4gICAgaWYgKHR5cGUgPT09ICdhdWRpbycgJiYgdHlwZW9mIEF1ZGlvICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICB0aGlzLmRhdGEgPSBuZXcgQXVkaW8oKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHRoaXMuZGF0YSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQodHlwZSk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuZGF0YSA9PT0gbnVsbCkge1xuICAgICAgICB0aGlzLmVycm9yID0gbmV3IEVycm9yKCdVbnN1cHBvcnRlZCBlbGVtZW50ICcgKyB0eXBlKTtcbiAgICAgICAgdGhpcy5jb21wbGV0ZSgpO1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gc3VwcG9ydCBmb3IgQ29jb29uSlMgQ2FudmFzKyBydW50aW1lLCBsYWNrcyBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzb3VyY2UnKVxuICAgIGlmIChuYXZpZ2F0b3IuaXNDb2Nvb25KUykge1xuICAgICAgICB0aGlzLmRhdGEuc3JjID0gQXJyYXkuaXNBcnJheSh0aGlzLnVybCkgPyB0aGlzLnVybFswXSA6IHRoaXMudXJsO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkodGhpcy51cmwpKSB7XG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMudXJsLmxlbmd0aDsgKytpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5kYXRhLmFwcGVuZENoaWxkKHRoaXMuX2NyZWF0ZVNvdXJjZSh0eXBlLCB0aGlzLnVybFtpXSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5kYXRhLmFwcGVuZENoaWxkKHRoaXMuX2NyZWF0ZVNvdXJjZSh0eXBlLCB0aGlzLnVybCkpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgdGhpc1snaXMnICsgdHlwZVswXS50b1VwcGVyQ2FzZSgpICsgdHlwZS5zdWJzdHJpbmcoMSldID0gdHJ1ZTtcblxuICAgIHRoaXMuZGF0YS5hZGRFdmVudExpc3RlbmVyKCdlcnJvcicsIHRoaXMuX2JvdW5kT25FcnJvciwgZmFsc2UpO1xuICAgIHRoaXMuZGF0YS5hZGRFdmVudExpc3RlbmVyKCdsb2FkJywgdGhpcy5fYm91bmRDb21wbGV0ZSwgZmFsc2UpO1xuICAgIHRoaXMuZGF0YS5hZGRFdmVudExpc3RlbmVyKCdwcm9ncmVzcycsIHRoaXMuX2JvdW5kT25Qcm9ncmVzcywgZmFsc2UpO1xuICAgIHRoaXMuZGF0YS5hZGRFdmVudExpc3RlbmVyKCdjYW5wbGF5dGhyb3VnaCcsIHRoaXMuX2JvdW5kQ29tcGxldGUsIGZhbHNlKTtcblxuICAgIHRoaXMuZGF0YS5sb2FkKCk7XG59O1xuXG4vKipcbiAqIExvYWRzIHRoaXMgcmVzb3VyY2VzIHVzaW5nIGFuIFhNTEh0dHBSZXF1ZXN0LlxuICpcbiAqIEBwcml2YXRlXG4gKi9cblJlc291cmNlLnByb3RvdHlwZS5fbG9hZFhociA9IGZ1bmN0aW9uICgpIHtcbiAgICAvLyBpZiB1bnNldCwgZGV0ZXJtaW5lIHRoZSB2YWx1ZVxuICAgIGlmICh0eXBlb2YgdGhpcy54aHJUeXBlICE9PSAnc3RyaW5nJykge1xuICAgICAgICB0aGlzLnhoclR5cGUgPSB0aGlzLl9kZXRlcm1pbmVYaHJUeXBlKCk7XG4gICAgfVxuXG4gICAgdmFyIHhociA9IHRoaXMueGhyID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7XG5cbiAgICAvLyBzZXQgdGhlIHJlcXVlc3QgdHlwZSBhbmQgdXJsXG4gICAgeGhyLm9wZW4oJ0dFVCcsIHRoaXMudXJsLCB0cnVlKTtcblxuICAgIC8vIGxvYWQganNvbiBhcyB0ZXh0IGFuZCBwYXJzZSBpdCBvdXJzZWx2ZXMuIFdlIGRvIHRoaXMgYmVjYXVzZSBzb21lIGJyb3dzZXJzXG4gICAgLy8gKmNvdWdoKiBzYWZhcmkgKmNvdWdoKiBjYW4ndCBkZWFsIHdpdGggaXQuXG4gICAgaWYgKHRoaXMueGhyVHlwZSA9PT0gUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuSlNPTiB8fCB0aGlzLnhoclR5cGUgPT09IFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkRPQ1VNRU5UKSB7XG4gICAgICAgIHhoci5yZXNwb25zZVR5cGUgPSBSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRS5URVhUO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgeGhyLnJlc3BvbnNlVHlwZSA9IHRoaXMueGhyVHlwZTtcbiAgICB9XG5cbiAgICB4aHIuYWRkRXZlbnRMaXN0ZW5lcignZXJyb3InLCB0aGlzLl9ib3VuZFhock9uRXJyb3IsIGZhbHNlKTtcbiAgICB4aHIuYWRkRXZlbnRMaXN0ZW5lcignYWJvcnQnLCB0aGlzLl9ib3VuZFhock9uQWJvcnQsIGZhbHNlKTtcbiAgICB4aHIuYWRkRXZlbnRMaXN0ZW5lcigncHJvZ3Jlc3MnLCB0aGlzLl9ib3VuZE9uUHJvZ3Jlc3MsIGZhbHNlKTtcbiAgICB4aHIuYWRkRXZlbnRMaXN0ZW5lcignbG9hZCcsIHRoaXMuX2JvdW5kWGhyT25Mb2FkLCBmYWxzZSk7XG5cbiAgICB4aHIuc2VuZCgpO1xufTtcblxuLyoqXG4gKiBMb2FkcyB0aGlzIHJlc291cmNlcyB1c2luZyBhbiBYRG9tYWluUmVxdWVzdC4gVGhpcyBpcyBoZXJlIGJlY2F1c2Ugd2UgbmVlZCB0byBzdXBwb3J0IElFOSAoZ3Jvc3MpLlxuICpcbiAqIEBwcml2YXRlXG4gKi9cblJlc291cmNlLnByb3RvdHlwZS5fbG9hZFhkciA9IGZ1bmN0aW9uICgpIHtcbiAgICAvLyBpZiB1bnNldCwgZGV0ZXJtaW5lIHRoZSB2YWx1ZVxuICAgIGlmICh0eXBlb2YgdGhpcy54aHJUeXBlICE9PSAnc3RyaW5nJykge1xuICAgICAgICB0aGlzLnhoclR5cGUgPSB0aGlzLl9kZXRlcm1pbmVYaHJUeXBlKCk7XG4gICAgfVxuXG4gICAgdmFyIHhkciA9IHRoaXMueGhyID0gbmV3IFhEb21haW5SZXF1ZXN0KCk7XG5cbiAgICAvLyBYRG9tYWluUmVxdWVzdCBoYXMgYSBmZXcgcXVpcmtzLiBPY2Nhc2lvbmFsbHkgaXQgd2lsbCBhYm9ydCByZXF1ZXN0c1xuICAgIC8vIEEgd2F5IHRvIGF2b2lkIHRoaXMgaXMgdG8gbWFrZSBzdXJlIEFMTCBjYWxsYmFja3MgYXJlIHNldCBldmVuIGlmIG5vdCB1c2VkXG4gICAgLy8gTW9yZSBpbmZvIGhlcmU6IGh0dHA6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvMTU3ODY5NjYveGRvbWFpbnJlcXVlc3QtYWJvcnRzLXBvc3Qtb24taWUtOVxuICAgIHhkci50aW1lb3V0ID0gNTAwMDtcblxuICAgIHhkci5vbmVycm9yID0gdGhpcy5fYm91bmRYaHJPbkVycm9yO1xuICAgIHhkci5vbnRpbWVvdXQgPSB0aGlzLl9ib3VuZFhkck9uVGltZW91dDtcbiAgICB4ZHIub25wcm9ncmVzcyA9IHRoaXMuX2JvdW5kT25Qcm9ncmVzcztcbiAgICB4ZHIub25sb2FkID0gdGhpcy5fYm91bmRYaHJPbkxvYWQ7XG5cbiAgICB4ZHIub3BlbignR0VUJywgdGhpcy51cmwsIHRydWUpO1xuXG4gICAgLy8gIE5vdGU6IFRoZSB4ZHIuc2VuZCgpIGNhbGwgaXMgd3JhcHBlZCBpbiBhIHRpbWVvdXQgdG8gcHJldmVudCBhbiBpc3N1ZSB3aXRoIHRoZSBpbnRlcmZhY2Ugd2hlcmUgc29tZSByZXF1ZXN0cyBhcmUgbG9zdFxuICAgIC8vICBpZiBtdWx0aXBsZSBYRG9tYWluUmVxdWVzdHMgYXJlIGJlaW5nIHNlbnQgYXQgdGhlIHNhbWUgdGltZS5cbiAgICAvLyBTb21lIGluZm8gaGVyZTogaHR0cHM6Ly9naXRodWIuY29tL3Bob3RvbnN0b3JtL3BoYXNlci9pc3N1ZXMvMTI0OFxuICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgICB4ZHIuc2VuZCgpO1xuICAgIH0sIDApO1xufTtcblxuLyoqXG4gKiBDcmVhdGVzIGEgc291cmNlIHVzZWQgaW4gbG9hZGluZyB2aWEgYW4gZWxlbWVudC5cbiAqXG4gKiBAcGFyYW0gdHlwZSB7c3RyaW5nfSBUaGUgZWxlbWVudCB0eXBlICh2aWRlbyBvciBhdWRpbykuXG4gKiBAcGFyYW0gdXJsIHtzdHJpbmd9IFRoZSBzb3VyY2UgVVJMIHRvIGxvYWQgZnJvbS5cbiAqIEBwYXJhbSBbbWltZV0ge3N0cmluZ30gVGhlIG1pbWUgdHlwZSBvZiB0aGUgdmlkZW9cbiAqIEBwcml2YXRlXG4gKi9cblJlc291cmNlLnByb3RvdHlwZS5fY3JlYXRlU291cmNlID0gZnVuY3Rpb24gKHR5cGUsIHVybCwgbWltZSkge1xuICAgIGlmICghbWltZSkge1xuICAgICAgICBtaW1lID0gdHlwZSArICcvJyArIHVybC5zdWJzdHIodXJsLmxhc3RJbmRleE9mKCcuJykgKyAxKTtcbiAgICB9XG5cbiAgICB2YXIgc291cmNlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc291cmNlJyk7XG5cbiAgICBzb3VyY2Uuc3JjID0gdXJsO1xuICAgIHNvdXJjZS50eXBlID0gbWltZTtcblxuICAgIHJldHVybiBzb3VyY2U7XG59O1xuXG4vKipcbiAqIENhbGxlZCBpZiBhIGxvYWQgZXJyb3JzIG91dC5cbiAqXG4gKiBAcGFyYW0gZXZlbnQge0V2ZW50fSBUaGUgZXJyb3IgZXZlbnQgZnJvbSB0aGUgZWxlbWVudCB0aGF0IGVtaXRzIGl0LlxuICogQHByaXZhdGVcbiAqL1xuUmVzb3VyY2UucHJvdG90eXBlLl9vbkVycm9yID0gZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgdGhpcy5lcnJvciA9IG5ldyBFcnJvcignRmFpbGVkIHRvIGxvYWQgZWxlbWVudCB1c2luZyAnICsgZXZlbnQudGFyZ2V0Lm5vZGVOYW1lKTtcbiAgICB0aGlzLmNvbXBsZXRlKCk7XG59O1xuXG4vKipcbiAqIENhbGxlZCBpZiBhIGxvYWQgcHJvZ3Jlc3MgZXZlbnQgZmlyZXMgZm9yIHhoci94ZHIuXG4gKlxuICogQGZpcmVzIHByb2dyZXNzXG4gKiBAcGFyYW0gZXZlbnQge1hNTEh0dHBSZXF1ZXN0UHJvZ3Jlc3NFdmVudHxFdmVudH1cbiAqIEBwcml2YXRlXG4gKi9cblJlc291cmNlLnByb3RvdHlwZS5fb25Qcm9ncmVzcyA9ICBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICBpZiAoZXZlbnQgJiYgZXZlbnQubGVuZ3RoQ29tcHV0YWJsZSkge1xuICAgICAgICB0aGlzLmVtaXQoJ3Byb2dyZXNzJywgdGhpcywgZXZlbnQubG9hZGVkIC8gZXZlbnQudG90YWwpO1xuICAgIH1cbn07XG5cbi8qKlxuICogQ2FsbGVkIGlmIGFuIGVycm9yIGV2ZW50IGZpcmVzIGZvciB4aHIveGRyLlxuICpcbiAqIEBwYXJhbSBldmVudCB7WE1MSHR0cFJlcXVlc3RFcnJvckV2ZW50fEV2ZW50fVxuICogQHByaXZhdGVcbiAqL1xuUmVzb3VyY2UucHJvdG90eXBlLl94aHJPbkVycm9yID0gZnVuY3Rpb24gKCkge1xuICAgIHRoaXMuZXJyb3IgPSBuZXcgRXJyb3IoXG4gICAgICAgIHJlcVR5cGUodGhpcy54aHIpICsgJyBSZXF1ZXN0IGZhaWxlZC4gJyArXG4gICAgICAgICdTdGF0dXM6ICcgKyB0aGlzLnhoci5zdGF0dXMgKyAnLCB0ZXh0OiBcIicgKyB0aGlzLnhoci5zdGF0dXNUZXh0ICsgJ1wiJ1xuICAgICk7XG5cbiAgICB0aGlzLmNvbXBsZXRlKCk7XG59O1xuXG4vKipcbiAqIENhbGxlZCBpZiBhbiBhYm9ydCBldmVudCBmaXJlcyBmb3IgeGhyLlxuICpcbiAqIEBwYXJhbSBldmVudCB7WE1MSHR0cFJlcXVlc3RBYm9ydEV2ZW50fVxuICogQHByaXZhdGVcbiAqL1xuUmVzb3VyY2UucHJvdG90eXBlLl94aHJPbkFib3J0ID0gZnVuY3Rpb24gKCkge1xuICAgIHRoaXMuZXJyb3IgPSBuZXcgRXJyb3IocmVxVHlwZSh0aGlzLnhocikgKyAnIFJlcXVlc3Qgd2FzIGFib3J0ZWQgYnkgdGhlIHVzZXIuJyk7XG4gICAgdGhpcy5jb21wbGV0ZSgpO1xufTtcblxuLyoqXG4gKiBDYWxsZWQgaWYgYSB0aW1lb3V0IGV2ZW50IGZpcmVzIGZvciB4ZHIuXG4gKlxuICogQHBhcmFtIGV2ZW50IHtFdmVudH1cbiAqIEBwcml2YXRlXG4gKi9cblJlc291cmNlLnByb3RvdHlwZS5feGRyT25UaW1lb3V0ID0gZnVuY3Rpb24gKCkge1xuICAgIHRoaXMuZXJyb3IgPSBuZXcgRXJyb3IocmVxVHlwZSh0aGlzLnhocikgKyAnIFJlcXVlc3QgdGltZWQgb3V0LicpO1xuICAgIHRoaXMuY29tcGxldGUoKTtcbn07XG5cbi8qKlxuICogQ2FsbGVkIHdoZW4gZGF0YSBzdWNjZXNzZnVsbHkgbG9hZHMgZnJvbSBhbiB4aHIveGRyIHJlcXVlc3QuXG4gKlxuICogQHBhcmFtIGV2ZW50IHtYTUxIdHRwUmVxdWVzdExvYWRFdmVudHxFdmVudH1cbiAqIEBwcml2YXRlXG4gKi9cblJlc291cmNlLnByb3RvdHlwZS5feGhyT25Mb2FkID0gZnVuY3Rpb24gKCkge1xuICAgIHZhciB4aHIgPSB0aGlzLnhocixcbiAgICAgICAgc3RhdHVzID0geGhyLnN0YXR1cyAhPT0gdW5kZWZpbmVkID8geGhyLnN0YXR1cyA6IDIwMDsgLy9YRFIgaGFzIG5vIGAuc3RhdHVzYCwgYXNzdW1lIDIwMC5cblxuICAgIC8vIHN0YXR1cyBjYW4gYmUgMCB3aGVuIHVzaW5nIHRoZSBmaWxlOi8vIHByb3RvY29sLCBhbHNvIGNoZWNrIGlmIGEgcmVzcG9uc2Ugd2FzIGZvdW5kXG4gICAgaWYgKHN0YXR1cyA9PT0gMjAwIHx8IHN0YXR1cyA9PT0gMjA0IHx8IChzdGF0dXMgPT09IDAgJiYgeGhyLnJlc3BvbnNlVGV4dC5sZW5ndGggPiAwKSkge1xuICAgICAgICAvLyBpZiB0ZXh0LCBqdXN0IHJldHVybiBpdFxuICAgICAgICBpZiAodGhpcy54aHJUeXBlID09PSBSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRS5URVhUKSB7XG4gICAgICAgICAgICB0aGlzLmRhdGEgPSB4aHIucmVzcG9uc2VUZXh0O1xuICAgICAgICB9XG4gICAgICAgIC8vIGlmIGpzb24sIHBhcnNlIGludG8ganNvbiBvYmplY3RcbiAgICAgICAgZWxzZSBpZiAodGhpcy54aHJUeXBlID09PSBSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRS5KU09OKSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIHRoaXMuZGF0YSA9IEpTT04ucGFyc2UoeGhyLnJlc3BvbnNlVGV4dCk7XG4gICAgICAgICAgICAgICAgdGhpcy5pc0pzb24gPSB0cnVlO1xuICAgICAgICAgICAgfSBjYXRjaChlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5lcnJvciA9IG5ldyBFcnJvcignRXJyb3IgdHJ5aW5nIHRvIHBhcnNlIGxvYWRlZCBqc29uOicsIGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIGlmIHhtbCwgcGFyc2UgaW50byBhbiB4bWwgZG9jdW1lbnQgb3IgZGl2IGVsZW1lbnRcbiAgICAgICAgZWxzZSBpZiAodGhpcy54aHJUeXBlID09PSBSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRS5ET0NVTUVOVCkge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBpZiAod2luZG93LkRPTVBhcnNlcikge1xuICAgICAgICAgICAgICAgICAgICB2YXIgZG9tcGFyc2VyID0gbmV3IERPTVBhcnNlcigpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmRhdGEgPSBkb21wYXJzZXIucGFyc2VGcm9tU3RyaW5nKHhoci5yZXNwb25zZVRleHQsICd0ZXh0L3htbCcpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICAgICAgICAgICAgICBkaXYuaW5uZXJIVE1MID0geGhyLnJlc3BvbnNlVGV4dDtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kYXRhID0gZGl2O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzLmlzWG1sID0gdHJ1ZTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmVycm9yID0gbmV3IEVycm9yKCdFcnJvciB0cnlpbmcgdG8gcGFyc2UgbG9hZGVkIHhtbDonLCBlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvLyBvdGhlciB0eXBlcyBqdXN0IHJldHVybiB0aGUgcmVzcG9uc2VcbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmRhdGEgPSB4aHIucmVzcG9uc2UgfHwgeGhyLnJlc3BvbnNlVGV4dDtcbiAgICAgICAgfVxuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgdGhpcy5lcnJvciA9IG5ldyBFcnJvcignWycgKyB4aHIuc3RhdHVzICsgJ10nICsgeGhyLnN0YXR1c1RleHQgKyAnOicgKyB4aHIucmVzcG9uc2VVUkwpO1xuICAgIH1cblxuICAgIHRoaXMuY29tcGxldGUoKTtcbn07XG5cbmZ1bmN0aW9uIHJlcVR5cGUoeGhyKSB7XG4gICAgcmV0dXJuIHhoci50b1N0cmluZygpLnJlcGxhY2UoJ29iamVjdCAnLCAnJyk7XG59XG5cbi8qKlxuICogU2V0cyB0aGUgYGNyb3NzT3JpZ2luYCBwcm9wZXJ0eSBmb3IgdGhpcyByZXNvdXJjZSBiYXNlZCBvbiBpZiB0aGUgdXJsXG4gKiBmb3IgdGhpcyByZXNvdXJjZSBpcyBjcm9zcy1vcmlnaW4uIElmIGNyb3NzT3JpZ2luIHdhcyBtYW51YWxseSBzZXQsIHRoaXNcbiAqIGZ1bmN0aW9uIGRvZXMgbm90aGluZy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHVybCB7c3RyaW5nfSBUaGUgdXJsIHRvIHRlc3QuXG4gKiBAcGFyYW0gW2xvY2F0aW9uPXdpbmRvdy5sb2NhdGlvbl0ge29iamVjdH0gVGhlIGxvY2F0aW9uIG9iamVjdCB0byB0ZXN0IGFnYWluc3QuXG4gKiBAcmV0dXJuIHtzdHJpbmd9IFRoZSBjcm9zc09yaWdpbiB2YWx1ZSB0byB1c2UgKG9yIGVtcHR5IHN0cmluZyBmb3Igbm9uZSkuXG4gKi9cblJlc291cmNlLnByb3RvdHlwZS5fZGV0ZXJtaW5lQ3Jvc3NPcmlnaW4gPSBmdW5jdGlvbiAodXJsLCBsb2MpIHtcbiAgICAvLyBkYXRhOiBhbmQgamF2YXNjcmlwdDogdXJscyBhcmUgY29uc2lkZXJlZCBzYW1lLW9yaWdpblxuICAgIGlmICh1cmwuaW5kZXhPZignZGF0YTonKSA9PT0gMCkge1xuICAgICAgICByZXR1cm4gJyc7XG4gICAgfVxuXG4gICAgLy8gZGVmYXVsdCBpcyB3aW5kb3cubG9jYXRpb25cbiAgICBsb2MgPSBsb2MgfHwgd2luZG93LmxvY2F0aW9uO1xuXG4gICAgaWYgKCF0ZW1wQW5jaG9yKSB7XG4gICAgICAgIHRlbXBBbmNob3IgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdhJyk7XG4gICAgfVxuXG4gICAgLy8gbGV0IHRoZSBicm93c2VyIGRldGVybWluZSB0aGUgZnVsbCBocmVmIGZvciB0aGUgdXJsIG9mIHRoaXMgcmVzb3VyY2UgYW5kIHRoZW5cbiAgICAvLyBwYXJzZSB3aXRoIHRoZSBub2RlIHVybCBsaWIsIHdlIGNhbid0IHVzZSB0aGUgcHJvcGVydGllcyBvZiB0aGUgYW5jaG9yIGVsZW1lbnRcbiAgICAvLyBiZWNhdXNlIHRoZXkgZG9uJ3Qgd29yayBpbiBJRTkgOihcbiAgICB0ZW1wQW5jaG9yLmhyZWYgPSB1cmw7XG4gICAgdXJsID0gX3VybC5wYXJzZSh0ZW1wQW5jaG9yLmhyZWYpO1xuXG4gICAgdmFyIHNhbWVQb3J0ID0gKCF1cmwucG9ydCAmJiBsb2MucG9ydCA9PT0gJycpIHx8ICh1cmwucG9ydCA9PT0gbG9jLnBvcnQpO1xuXG4gICAgLy8gaWYgY3Jvc3Mgb3JpZ2luXG4gICAgaWYgKHVybC5ob3N0bmFtZSAhPT0gbG9jLmhvc3RuYW1lIHx8ICFzYW1lUG9ydCB8fCB1cmwucHJvdG9jb2wgIT09IGxvYy5wcm90b2NvbCkge1xuICAgICAgICByZXR1cm4gJ2Fub255bW91cyc7XG4gICAgfVxuXG4gICAgcmV0dXJuICcnO1xufTtcblxuLyoqXG4gKiBEZXRlcm1pbmVzIHRoZSByZXNwb25zZVR5cGUgb2YgYW4gWEhSIHJlcXVlc3QgYmFzZWQgb24gdGhlIGV4dGVuc2lvbiBvZiB0aGVcbiAqIHJlc291cmNlIGJlaW5nIGxvYWRlZC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHJldHVybiB7UmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEV9IFRoZSByZXNwb25zZVR5cGUgdG8gdXNlLlxuICovXG5SZXNvdXJjZS5wcm90b3R5cGUuX2RldGVybWluZVhoclR5cGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIFJlc291cmNlLl94aHJUeXBlTWFwW3RoaXMuX2dldEV4dGVuc2lvbigpXSB8fCBSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRS5URVhUO1xufTtcblxuUmVzb3VyY2UucHJvdG90eXBlLl9kZXRlcm1pbmVMb2FkVHlwZSA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gUmVzb3VyY2UuX2xvYWRUeXBlTWFwW3RoaXMuX2dldEV4dGVuc2lvbigpXSB8fCBSZXNvdXJjZS5MT0FEX1RZUEUuWEhSO1xufTtcblxuUmVzb3VyY2UucHJvdG90eXBlLl9nZXRFeHRlbnNpb24gPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHVybCA9IHRoaXMudXJsLFxuICAgICAgICBleHQ7XG5cbiAgICBpZiAodGhpcy5pc0RhdGFVcmwpIHtcbiAgICAgICAgdmFyIHNsYXNoSW5kZXggPSB1cmwuaW5kZXhPZignLycpO1xuICAgICAgICBleHQgPSB1cmwuc3Vic3RyaW5nKHNsYXNoSW5kZXggKyAxLCB1cmwuaW5kZXhPZignOycsIHNsYXNoSW5kZXgpKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHZhciBxdWVyeVN0YXJ0ID0gdXJsLmluZGV4T2YoJz8nKTtcbiAgICAgICAgaWYgKHF1ZXJ5U3RhcnQgIT09IC0xKSB7XG4gICAgICAgICAgICB1cmwgPSB1cmwuc3Vic3RyaW5nKDAsIHF1ZXJ5U3RhcnQpO1xuICAgICAgICB9XG5cbiAgICAgICAgZXh0ID0gdXJsLnN1YnN0cmluZyh1cmwubGFzdEluZGV4T2YoJy4nKSArIDEpO1xuICAgIH1cblxuICAgIHJldHVybiBleHQ7XG59O1xuXG4vKipcbiAqIERldGVybWluZXMgdGhlIG1pbWUgdHlwZSBvZiBhbiBYSFIgcmVxdWVzdCBiYXNlZCBvbiB0aGUgcmVzcG9uc2VUeXBlIG9mXG4gKiByZXNvdXJjZSBiZWluZyBsb2FkZWQuXG4gKlxuICogQHByaXZhdGVcbiAqIEByZXR1cm4ge3N0cmluZ30gVGhlIG1pbWUgdHlwZSB0byB1c2UuXG4gKi9cblJlc291cmNlLnByb3RvdHlwZS5fZ2V0TWltZUZyb21YaHJUeXBlID0gZnVuY3Rpb24gKHR5cGUpIHtcbiAgICBzd2l0Y2godHlwZSkge1xuICAgICAgICBjYXNlIFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkJVRkZFUjpcbiAgICAgICAgICAgIHJldHVybiAnYXBwbGljYXRpb24vb2N0ZXQtYmluYXJ5JztcblxuICAgICAgICBjYXNlIFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkJMT0I6XG4gICAgICAgICAgICByZXR1cm4gJ2FwcGxpY2F0aW9uL2Jsb2InO1xuXG4gICAgICAgIGNhc2UgUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuRE9DVU1FTlQ6XG4gICAgICAgICAgICByZXR1cm4gJ2FwcGxpY2F0aW9uL3htbCc7XG5cbiAgICAgICAgY2FzZSBSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRS5KU09OOlxuICAgICAgICAgICAgcmV0dXJuICdhcHBsaWNhdGlvbi9qc29uJztcblxuICAgICAgICBjYXNlIFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkRFRkFVTFQ6XG4gICAgICAgIGNhc2UgUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuVEVYVDpcbiAgICAgICAgICAgIC8qIGZhbGxzIHRocm91Z2ggKi9cbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIHJldHVybiAndGV4dC9wbGFpbic7XG5cbiAgICB9XG59O1xuXG4vKipcbiAqIFRoZSB0eXBlcyBvZiBsb2FkaW5nIGEgcmVzb3VyY2UgY2FuIHVzZS5cbiAqXG4gKiBAc3RhdGljXG4gKiBAY29uc3RhbnRcbiAqIEBwcm9wZXJ0eSB7b2JqZWN0fSBMT0FEX1RZUEVcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBMT0FEX1RZUEUuWEhSIC0gVXNlcyBYTUxIdHRwUmVxdWVzdCB0byBsb2FkIHRoZSByZXNvdXJjZS5cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBMT0FEX1RZUEUuSU1BR0UgLSBVc2VzIGFuIGBJbWFnZWAgb2JqZWN0IHRvIGxvYWQgdGhlIHJlc291cmNlLlxuICogQHByb3BlcnR5IHtudW1iZXJ9IExPQURfVFlQRS5BVURJTyAtIFVzZXMgYW4gYEF1ZGlvYCBvYmplY3QgdG8gbG9hZCB0aGUgcmVzb3VyY2UuXG4gKiBAcHJvcGVydHkge251bWJlcn0gTE9BRF9UWVBFLlZJREVPIC0gVXNlcyBhIGBWaWRlb2Agb2JqZWN0IHRvIGxvYWQgdGhlIHJlc291cmNlLlxuICovXG5SZXNvdXJjZS5MT0FEX1RZUEUgPSB7XG4gICAgWEhSOiAgICAxLFxuICAgIElNQUdFOiAgMixcbiAgICBBVURJTzogIDMsXG4gICAgVklERU86ICA0XG59O1xuXG4vKipcbiAqIFRoZSBYSFIgcmVhZHkgc3RhdGVzLCB1c2VkIGludGVybmFsbHkuXG4gKlxuICogQHN0YXRpY1xuICogQGNvbnN0YW50XG4gKiBAcHJvcGVydHkge29iamVjdH0gWEhSX1JFQURZX1NUQVRFXG4gKiBAcHJvcGVydHkge251bWJlcn0gWEhSX1JFQURZX1NUQVRFLlVOU0VOVCAtIG9wZW4oKWhhcyBub3QgYmVlbiBjYWxsZWQgeWV0LlxuICogQHByb3BlcnR5IHtudW1iZXJ9IFhIUl9SRUFEWV9TVEFURS5PUEVORUQgLSBzZW5kKCloYXMgbm90IGJlZW4gY2FsbGVkIHlldC5cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBYSFJfUkVBRFlfU1RBVEUuSEVBREVSU19SRUNFSVZFRCAtIHNlbmQoKSBoYXMgYmVlbiBjYWxsZWQsIGFuZCBoZWFkZXJzIGFuZCBzdGF0dXMgYXJlIGF2YWlsYWJsZS5cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBYSFJfUkVBRFlfU1RBVEUuTE9BRElORyAtIERvd25sb2FkaW5nOyByZXNwb25zZVRleHQgaG9sZHMgcGFydGlhbCBkYXRhLlxuICogQHByb3BlcnR5IHtudW1iZXJ9IFhIUl9SRUFEWV9TVEFURS5ET05FIC0gVGhlIG9wZXJhdGlvbiBpcyBjb21wbGV0ZS5cbiAqL1xuUmVzb3VyY2UuWEhSX1JFQURZX1NUQVRFID0ge1xuICAgIFVOU0VOVDogMCxcbiAgICBPUEVORUQ6IDEsXG4gICAgSEVBREVSU19SRUNFSVZFRDogMixcbiAgICBMT0FESU5HOiAzLFxuICAgIERPTkU6IDRcbn07XG5cbi8qKlxuICogVGhlIFhIUiByZWFkeSBzdGF0ZXMsIHVzZWQgaW50ZXJuYWxseS5cbiAqXG4gKiBAc3RhdGljXG4gKiBAY29uc3RhbnRcbiAqIEBwcm9wZXJ0eSB7b2JqZWN0fSBYSFJfUkVTUE9OU0VfVFlQRVxuICogQHByb3BlcnR5IHtzdHJpbmd9IFhIUl9SRVNQT05TRV9UWVBFLkRFRkFVTFQgLSBkZWZhdWx0cyB0byB0ZXh0XG4gKiBAcHJvcGVydHkge3N0cmluZ30gWEhSX1JFU1BPTlNFX1RZUEUuQlVGRkVSIC0gQXJyYXlCdWZmZXJcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBYSFJfUkVTUE9OU0VfVFlQRS5CTE9CIC0gQmxvYlxuICogQHByb3BlcnR5IHtzdHJpbmd9IFhIUl9SRVNQT05TRV9UWVBFLkRPQ1VNRU5UIC0gRG9jdW1lbnRcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBYSFJfUkVTUE9OU0VfVFlQRS5KU09OIC0gT2JqZWN0XG4gKiBAcHJvcGVydHkge3N0cmluZ30gWEhSX1JFU1BPTlNFX1RZUEUuVEVYVCAtIFN0cmluZ1xuICovXG5SZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRSA9IHtcbiAgICBERUZBVUxUOiAgICAndGV4dCcsXG4gICAgQlVGRkVSOiAgICAgJ2FycmF5YnVmZmVyJyxcbiAgICBCTE9COiAgICAgICAnYmxvYicsXG4gICAgRE9DVU1FTlQ6ICAgJ2RvY3VtZW50JyxcbiAgICBKU09OOiAgICAgICAnanNvbicsXG4gICAgVEVYVDogICAgICAgJ3RleHQnXG59O1xuXG5SZXNvdXJjZS5fbG9hZFR5cGVNYXAgPSB7XG4gICAgJ2dpZic6ICAgICAgUmVzb3VyY2UuTE9BRF9UWVBFLklNQUdFLFxuICAgICdwbmcnOiAgICAgIFJlc291cmNlLkxPQURfVFlQRS5JTUFHRSxcbiAgICAnYm1wJzogICAgICBSZXNvdXJjZS5MT0FEX1RZUEUuSU1BR0UsXG4gICAgJ2pwZyc6ICAgICAgUmVzb3VyY2UuTE9BRF9UWVBFLklNQUdFLFxuICAgICdqcGVnJzogICAgIFJlc291cmNlLkxPQURfVFlQRS5JTUFHRSxcbiAgICAndGlmJzogICAgICBSZXNvdXJjZS5MT0FEX1RZUEUuSU1BR0UsXG4gICAgJ3RpZmYnOiAgICAgUmVzb3VyY2UuTE9BRF9UWVBFLklNQUdFLFxuICAgICd3ZWJwJzogICAgIFJlc291cmNlLkxPQURfVFlQRS5JTUFHRSxcbiAgICAndGdhJzogICAgICBSZXNvdXJjZS5MT0FEX1RZUEUuSU1BR0Vcbn07XG5cblJlc291cmNlLl94aHJUeXBlTWFwID0ge1xuICAgIC8vIHhtbFxuICAgICd4aHRtbCc6ICAgIFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkRPQ1VNRU5ULFxuICAgICdodG1sJzogICAgIFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkRPQ1VNRU5ULFxuICAgICdodG0nOiAgICAgIFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkRPQ1VNRU5ULFxuICAgICd4bWwnOiAgICAgIFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkRPQ1VNRU5ULFxuICAgICd0bXgnOiAgICAgIFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkRPQ1VNRU5ULFxuICAgICd0c3gnOiAgICAgIFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkRPQ1VNRU5ULFxuICAgICdzdmcnOiAgICAgIFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkRPQ1VNRU5ULFxuXG4gICAgLy8gaW1hZ2VzXG4gICAgJ2dpZic6ICAgICAgUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuQkxPQixcbiAgICAncG5nJzogICAgICBSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRS5CTE9CLFxuICAgICdibXAnOiAgICAgIFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkJMT0IsXG4gICAgJ2pwZyc6ICAgICAgUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuQkxPQixcbiAgICAnanBlZyc6ICAgICBSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRS5CTE9CLFxuICAgICd0aWYnOiAgICAgIFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkJMT0IsXG4gICAgJ3RpZmYnOiAgICAgUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuQkxPQixcbiAgICAnd2VicCc6ICAgICBSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRS5CTE9CLFxuICAgICd0Z2EnOiAgICAgIFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkJMT0IsXG5cbiAgICAvLyBqc29uXG4gICAgJ2pzb24nOiAgICAgUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuSlNPTixcblxuICAgIC8vIHRleHRcbiAgICAndGV4dCc6ICAgICBSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRS5URVhULFxuICAgICd0eHQnOiAgICAgIFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLlRFWFRcbn07XG5cbi8qKlxuICogU2V0cyB0aGUgbG9hZCB0eXBlIHRvIGJlIHVzZWQgZm9yIGEgc3BlY2lmaWMgZXh0ZW5zaW9uLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBwYXJhbSBleHRuYW1lIHtzdHJpbmd9IFRoZSBleHRlbnNpb24gdG8gc2V0IHRoZSB0eXBlIGZvciwgZS5nLiBcInBuZ1wiIG9yIFwiZm50XCJcbiAqIEBwYXJhbSBsb2FkVHlwZSB7UmVzb3VyY2UuTE9BRF9UWVBFfSBUaGUgbG9hZCB0eXBlIHRvIHNldCBpdCB0by5cbiAqL1xuUmVzb3VyY2Uuc2V0RXh0ZW5zaW9uTG9hZFR5cGUgPSBmdW5jdGlvbiAoZXh0bmFtZSwgbG9hZFR5cGUpIHtcbiAgICBzZXRFeHRNYXAoUmVzb3VyY2UuX2xvYWRUeXBlTWFwLCBleHRuYW1lLCBsb2FkVHlwZSk7XG59O1xuXG4vKipcbiAqIFNldHMgdGhlIGxvYWQgdHlwZSB0byBiZSB1c2VkIGZvciBhIHNwZWNpZmljIGV4dGVuc2lvbi5cbiAqXG4gKiBAc3RhdGljXG4gKiBAcGFyYW0gZXh0bmFtZSB7c3RyaW5nfSBUaGUgZXh0ZW5zaW9uIHRvIHNldCB0aGUgdHlwZSBmb3IsIGUuZy4gXCJwbmdcIiBvciBcImZudFwiXG4gKiBAcGFyYW0geGhyVHlwZSB7UmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEV9IFRoZSB4aHIgdHlwZSB0byBzZXQgaXQgdG8uXG4gKi9cblJlc291cmNlLnNldEV4dGVuc2lvblhoclR5cGUgPSBmdW5jdGlvbiAoZXh0bmFtZSwgeGhyVHlwZSkge1xuICAgIHNldEV4dE1hcChSZXNvdXJjZS5feGhyVHlwZU1hcCwgZXh0bmFtZSwgeGhyVHlwZSk7XG59O1xuXG5mdW5jdGlvbiBzZXRFeHRNYXAobWFwLCBleHRuYW1lLCB2YWwpIHtcbiAgICBpZiAoZXh0bmFtZSAmJiBleHRuYW1lLmluZGV4T2YoJy4nKSA9PT0gMCkge1xuICAgICAgICBleHRuYW1lID0gZXh0bmFtZS5zdWJzdHJpbmcoMSk7XG4gICAgfVxuXG4gICAgaWYgKCFleHRuYW1lKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBtYXBbZXh0bmFtZV0gPSB2YWw7XG59XG4iLCJtb2R1bGUuZXhwb3J0cyA9IHtcblxuICAgIC8vIHByaXZhdGUgcHJvcGVydHlcbiAgICBfa2V5U3RyOiBcIkFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5Ky89XCIsXG5cbiAgICBlbmNvZGVCaW5hcnk6IGZ1bmN0aW9uIChpbnB1dCkge1xuICAgICAgICB2YXIgb3V0cHV0ID0gXCJcIjtcbiAgICAgICAgdmFyIGJ5dGVidWZmZXI7XG4gICAgICAgIHZhciBlbmNvZGVkQ2hhckluZGV4ZXMgPSBuZXcgQXJyYXkoNCk7XG4gICAgICAgIHZhciBpbnggPSAwO1xuICAgICAgICB2YXIgam54ID0gMDtcbiAgICAgICAgdmFyIHBhZGRpbmdCeXRlcyA9IDA7XG5cbiAgICAgICAgd2hpbGUgKGlueCA8IGlucHV0Lmxlbmd0aCkge1xuICAgICAgICAgICAgLy8gRmlsbCBieXRlIGJ1ZmZlciBhcnJheVxuICAgICAgICAgICAgYnl0ZWJ1ZmZlciA9IG5ldyBBcnJheSgzKTtcbiAgICAgICAgICAgIGZvciAoam54ID0gMDsgam54IDwgYnl0ZWJ1ZmZlci5sZW5ndGg7IGpueCsrKSB7XG4gICAgICAgICAgICAgICAgaWYgKGlueCA8IGlucHV0Lmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICAvLyB0aHJvdyBhd2F5IGhpZ2gtb3JkZXIgYnl0ZSwgYXMgZG9jdW1lbnRlZCBhdDpcbiAgICAgICAgICAgICAgICAgICAgLy8gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvRW4vVXNpbmdfWE1MSHR0cFJlcXVlc3QjSGFuZGxpbmdfYmluYXJ5X2RhdGFcbiAgICAgICAgICAgICAgICAgICAgYnl0ZWJ1ZmZlcltqbnhdID0gaW5wdXQuY2hhckNvZGVBdChpbngrKykgJiAweGZmO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgYnl0ZWJ1ZmZlcltqbnhdID0gMDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIEdldCBlYWNoIGVuY29kZWQgY2hhcmFjdGVyLCA2IGJpdHMgYXQgYSB0aW1lXG4gICAgICAgICAgICAvLyBpbmRleCAxOiBmaXJzdCA2IGJpdHNcbiAgICAgICAgICAgIGVuY29kZWRDaGFySW5kZXhlc1swXSA9IGJ5dGVidWZmZXJbMF0gPj4gMjtcbiAgICAgICAgICAgIC8vIGluZGV4IDI6IHNlY29uZCA2IGJpdHMgKDIgbGVhc3Qgc2lnbmlmaWNhbnQgYml0cyBmcm9tIGlucHV0IGJ5dGUgMSArIDQgbW9zdCBzaWduaWZpY2FudCBiaXRzIGZyb20gYnl0ZSAyKVxuICAgICAgICAgICAgZW5jb2RlZENoYXJJbmRleGVzWzFdID0gKChieXRlYnVmZmVyWzBdICYgMHgzKSA8PCA0KSB8IChieXRlYnVmZmVyWzFdID4+IDQpO1xuICAgICAgICAgICAgLy8gaW5kZXggMzogdGhpcmQgNiBiaXRzICg0IGxlYXN0IHNpZ25pZmljYW50IGJpdHMgZnJvbSBpbnB1dCBieXRlIDIgKyAyIG1vc3Qgc2lnbmlmaWNhbnQgYml0cyBmcm9tIGJ5dGUgMylcbiAgICAgICAgICAgIGVuY29kZWRDaGFySW5kZXhlc1syXSA9ICgoYnl0ZWJ1ZmZlclsxXSAmIDB4MGYpIDw8IDIpIHwgKGJ5dGVidWZmZXJbMl0gPj4gNik7XG4gICAgICAgICAgICAvLyBpbmRleCAzOiBmb3J0aCA2IGJpdHMgKDYgbGVhc3Qgc2lnbmlmaWNhbnQgYml0cyBmcm9tIGlucHV0IGJ5dGUgMylcbiAgICAgICAgICAgIGVuY29kZWRDaGFySW5kZXhlc1szXSA9IGJ5dGVidWZmZXJbMl0gJiAweDNmO1xuXG4gICAgICAgICAgICAvLyBEZXRlcm1pbmUgd2hldGhlciBwYWRkaW5nIGhhcHBlbmVkLCBhbmQgYWRqdXN0IGFjY29yZGluZ2x5XG4gICAgICAgICAgICBwYWRkaW5nQnl0ZXMgPSBpbnggLSAoaW5wdXQubGVuZ3RoIC0gMSk7XG4gICAgICAgICAgICBzd2l0Y2ggKHBhZGRpbmdCeXRlcykge1xuICAgICAgICAgICAgICAgIGNhc2UgMjpcbiAgICAgICAgICAgICAgICAgICAgLy8gU2V0IGxhc3QgMiBjaGFyYWN0ZXJzIHRvIHBhZGRpbmcgY2hhclxuICAgICAgICAgICAgICAgICAgICBlbmNvZGVkQ2hhckluZGV4ZXNbM10gPSA2NDtcbiAgICAgICAgICAgICAgICAgICAgZW5jb2RlZENoYXJJbmRleGVzWzJdID0gNjQ7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgY2FzZSAxOlxuICAgICAgICAgICAgICAgICAgICAvLyBTZXQgbGFzdCBjaGFyYWN0ZXIgdG8gcGFkZGluZyBjaGFyXG4gICAgICAgICAgICAgICAgICAgIGVuY29kZWRDaGFySW5kZXhlc1szXSA9IDY0O1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrOyAvLyBObyBwYWRkaW5nIC0gcHJvY2VlZFxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBOb3cgd2Ugd2lsbCBncmFiIGVhY2ggYXBwcm9wcmlhdGUgY2hhcmFjdGVyIG91dCBvZiBvdXIga2V5c3RyaW5nXG4gICAgICAgICAgICAvLyBiYXNlZCBvbiBvdXIgaW5kZXggYXJyYXkgYW5kIGFwcGVuZCBpdCB0byB0aGUgb3V0cHV0IHN0cmluZ1xuICAgICAgICAgICAgZm9yIChqbnggPSAwOyBqbnggPCBlbmNvZGVkQ2hhckluZGV4ZXMubGVuZ3RoOyBqbngrKykge1xuICAgICAgICAgICAgICAgIG91dHB1dCArPSB0aGlzLl9rZXlTdHIuY2hhckF0KGVuY29kZWRDaGFySW5kZXhlc1tqbnhdKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gb3V0cHV0O1xuICAgIH1cbn07XG4iLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vTG9hZGVyJyk7XG5cbm1vZHVsZS5leHBvcnRzLlJlc291cmNlID0gcmVxdWlyZSgnLi9SZXNvdXJjZScpO1xuXG5tb2R1bGUuZXhwb3J0cy5taWRkbGV3YXJlID0ge1xuICAgIGNhY2hpbmc6IHtcbiAgICAgICAgbWVtb3J5OiByZXF1aXJlKCcuL21pZGRsZXdhcmVzL2NhY2hpbmcvbWVtb3J5JylcbiAgICB9LFxuICAgIHBhcnNpbmc6IHtcbiAgICAgICAgYmxvYjogcmVxdWlyZSgnLi9taWRkbGV3YXJlcy9wYXJzaW5nL2Jsb2InKVxuICAgIH1cbn07XG4iLCIvLyBhIHNpbXBsZSBpbi1tZW1vcnkgY2FjaGUgZm9yIHJlc291cmNlc1xudmFyIGNhY2hlID0ge307XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBmdW5jdGlvbiAocmVzb3VyY2UsIG5leHQpIHtcbiAgICAgICAgLy8gaWYgY2FjaGVkLCB0aGVuIHNldCBkYXRhIGFuZCBjb21wbGV0ZSB0aGUgcmVzb3VyY2VcbiAgICAgICAgaWYgKGNhY2hlW3Jlc291cmNlLnVybF0pIHtcbiAgICAgICAgICAgIHJlc291cmNlLmRhdGEgPSBjYWNoZVtyZXNvdXJjZS51cmxdO1xuICAgICAgICAgICAgcmVzb3VyY2UuY29tcGxldGUoKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBpZiBub3QgY2FjaGVkLCB3YWl0IGZvciBjb21wbGV0ZSBhbmQgc3RvcmUgaXQgaW4gdGhlIGNhY2hlLlxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJlc291cmNlLm9uY2UoJ2NvbXBsZXRlJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgY2FjaGVbdGhpcy51cmxdID0gdGhpcy5kYXRhO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgXG4gICAgICAgIG5leHQoKTtcbiAgICB9O1xufTtcbiIsInZhciBSZXNvdXJjZSA9IHJlcXVpcmUoJy4uLy4uL1Jlc291cmNlJyksXG4gICAgYjY0ID0gcmVxdWlyZSgnLi4vLi4vYjY0Jyk7XG5cbndpbmRvdy5VUkwgPSB3aW5kb3cuVVJMIHx8IHdpbmRvdy53ZWJraXRVUkw7XG5cbi8vIGEgbWlkZGxld2FyZSBmb3IgdHJhbnNmb3JtaW5nIFhIUiBsb2FkZWQgQmxvYnMgaW50byBtb3JlIHVzZWZ1bCBvYmplY3RzXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBmdW5jdGlvbiAocmVzb3VyY2UsIG5leHQpIHtcbiAgICAgICAgaWYgKCFyZXNvdXJjZS5kYXRhKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV4dCgpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gaWYgdGhpcyB3YXMgYW4gWEhSIGxvYWQgb2YgYSBibG9iXG4gICAgICAgIGlmIChyZXNvdXJjZS54aHIgJiYgcmVzb3VyY2UueGhyVHlwZSA9PT0gUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuQkxPQikge1xuICAgICAgICAgICAgLy8gaWYgdGhlcmUgaXMgbm8gYmxvYiBzdXBwb3J0IHdlIHByb2JhYmx5IGdvdCBhIGJpbmFyeSBzdHJpbmcgYmFja1xuICAgICAgICAgICAgaWYgKCF3aW5kb3cuQmxvYiB8fCB0eXBlb2YgcmVzb3VyY2UuZGF0YSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgICAgICB2YXIgdHlwZSA9IHJlc291cmNlLnhoci5nZXRSZXNwb25zZUhlYWRlcignY29udGVudC10eXBlJyk7XG5cbiAgICAgICAgICAgICAgICAvLyB0aGlzIGlzIGFuIGltYWdlLCBjb252ZXJ0IHRoZSBiaW5hcnkgc3RyaW5nIGludG8gYSBkYXRhIHVybFxuICAgICAgICAgICAgICAgIGlmICh0eXBlICYmIHR5cGUuaW5kZXhPZignaW1hZ2UnKSA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICByZXNvdXJjZS5kYXRhID0gbmV3IEltYWdlKCk7XG4gICAgICAgICAgICAgICAgICAgIHJlc291cmNlLmRhdGEuc3JjID0gJ2RhdGE6JyArIHR5cGUgKyAnO2Jhc2U2NCwnICsgYjY0LmVuY29kZUJpbmFyeShyZXNvdXJjZS54aHIucmVzcG9uc2VUZXh0KTtcblxuICAgICAgICAgICAgICAgICAgICByZXNvdXJjZS5pc0ltYWdlID0gdHJ1ZTtcblxuICAgICAgICAgICAgICAgICAgICAvLyB3YWl0IHVudGlsIHRoZSBpbWFnZSBsb2FkcyBhbmQgdGhlbiBjYWxsYmFja1xuICAgICAgICAgICAgICAgICAgICByZXNvdXJjZS5kYXRhLm9ubG9hZCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc291cmNlLmRhdGEub25sb2FkID0gbnVsbDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgbmV4dCgpO1xuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIGlmIGNvbnRlbnQgdHlwZSBzYXlzIHRoaXMgaXMgYW4gaW1hZ2UsIHRoZW4gd2Ugc2hvdWxkIHRyYW5zZm9ybSB0aGUgYmxvYiBpbnRvIGFuIEltYWdlIG9iamVjdFxuICAgICAgICAgICAgZWxzZSBpZiAocmVzb3VyY2UuZGF0YS50eXBlLmluZGV4T2YoJ2ltYWdlJykgPT09IDApIHtcbiAgICAgICAgICAgICAgICB2YXIgc3JjID0gVVJMLmNyZWF0ZU9iamVjdFVSTChyZXNvdXJjZS5kYXRhKTtcblxuICAgICAgICAgICAgICAgIHJlc291cmNlLmJsb2IgPSByZXNvdXJjZS5kYXRhO1xuICAgICAgICAgICAgICAgIHJlc291cmNlLmRhdGEgPSBuZXcgSW1hZ2UoKTtcbiAgICAgICAgICAgICAgICByZXNvdXJjZS5kYXRhLnNyYyA9IHNyYztcblxuICAgICAgICAgICAgICAgIHJlc291cmNlLmlzSW1hZ2UgPSB0cnVlO1xuXG4gICAgICAgICAgICAgICAgLy8gY2xlYW51cCB0aGUgbm8gbG9uZ2VyIHVzZWQgYmxvYiBhZnRlciB0aGUgaW1hZ2UgbG9hZHNcbiAgICAgICAgICAgICAgICByZXNvdXJjZS5kYXRhLm9ubG9hZCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgVVJMLnJldm9rZU9iamVjdFVSTChzcmMpO1xuICAgICAgICAgICAgICAgICAgICByZXNvdXJjZS5kYXRhLm9ubG9hZCA9IG51bGw7XG5cbiAgICAgICAgICAgICAgICAgICAgbmV4dCgpO1xuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBuZXh0KCk7XG4gICAgICAgIH1cbiAgICB9O1xufTtcbiIsIm1vZHVsZS5leHBvcnRzPXtcbiAgXCJuYW1lXCI6IFwicGl4aS5qc1wiLFxuICBcInZlcnNpb25cIjogXCIzLjAuMTAtZGV2XCIsXG4gIFwiZGVzY3JpcHRpb25cIjogXCJQaXhpLmpzIGlzIGEgZmFzdCBsaWdodHdlaWdodCAyRCBsaWJyYXJ5IHRoYXQgd29ya3MgYWNyb3NzIGFsbCBkZXZpY2VzLlwiLFxuICBcImF1dGhvclwiOiBcIk1hdCBHcm92ZXNcIixcbiAgXCJjb250cmlidXRvcnNcIjogW1xuICAgIFwiQ2hhZCBFbmdsZXIgPGNoYWRAcGFudGhlcmRldi5jb20+XCIsXG4gICAgXCJSaWNoYXJkIERhdmV5IDxyZGF2ZXlAZ21haWwuY29tPlwiXG4gIF0sXG4gIFwibWFpblwiOiBcIi4vc3JjL2luZGV4LmpzXCIsXG4gIFwiaG9tZXBhZ2VcIjogXCJodHRwOi8vZ29vZGJveWRpZ2l0YWwuY29tL1wiLFxuICBcImJ1Z3NcIjogXCJodHRwczovL2dpdGh1Yi5jb20vcGl4aWpzL3BpeGkuanMvaXNzdWVzXCIsXG4gIFwibGljZW5zZVwiOiBcIk1JVFwiLFxuICBcInJlcG9zaXRvcnlcIjoge1xuICAgIFwidHlwZVwiOiBcImdpdFwiLFxuICAgIFwidXJsXCI6IFwiaHR0cHM6Ly9naXRodWIuY29tL3BpeGlqcy9waXhpLmpzLmdpdFwiXG4gIH0sXG4gIFwic2NyaXB0c1wiOiB7XG4gICAgXCJzdGFydFwiOiBcImd1bHAgJiYgZ3VscCB3YXRjaFwiLFxuICAgIFwidGVzdFwiOiBcImd1bHAgJiYgdGVzdGVtIGNpXCIsXG4gICAgXCJidWlsZFwiOiBcImd1bHBcIixcbiAgICBcImRvY3NcIjogXCJqc2RvYyAtYyAuL2d1bHAvdXRpbC9qc2RvYy5jb25mLmpzb24gLVIgUkVBRE1FLm1kXCJcbiAgfSxcbiAgXCJmaWxlc1wiOiBbXG4gICAgXCJiaW4vXCIsXG4gICAgXCJzcmMvXCIsXG4gICAgXCJDT05UUklCVVRJTkcubWRcIixcbiAgICBcIkxJQ0VOU0VcIixcbiAgICBcInBhY2thZ2UuanNvblwiLFxuICAgIFwiUkVBRE1FLm1kXCJcbiAgXSxcbiAgXCJkZXBlbmRlbmNpZXNcIjoge1xuICAgIFwiYXN5bmNcIjogXCJeMS41LjBcIixcbiAgICBcImJyZnNcIjogXCJeMS40LjFcIixcbiAgICBcImVhcmN1dFwiOiBcIl4yLjAuN1wiLFxuICAgIFwiZXZlbnRlbWl0dGVyM1wiOiBcIl4xLjEuMVwiLFxuICAgIFwib2JqZWN0LWFzc2lnblwiOiBcIl40LjAuMVwiLFxuICAgIFwicGl4aS1nbC1jb3JlXCI6IFwiZ2l0K2h0dHBzOi8vZ2l0aHViLmNvbS9Hb29kQm95RGlnaXRhbC9waXhpLWdsLWNvcmUuZ2l0XCIsXG4gICAgXCJyZXNvdXJjZS1sb2FkZXJcIjogXCJeMS42LjRcIlxuICB9LFxuICBcImRldkRlcGVuZGVuY2llc1wiOiB7XG4gICAgXCJicm93c2VyaWZ5XCI6IFwiXjExLjEuMFwiLFxuICAgIFwiY2hhaVwiOiBcIl4zLjIuMFwiLFxuICAgIFwiZGVsXCI6IFwiXjIuMC4yXCIsXG4gICAgXCJndWxwXCI6IFwiXjMuOS4wXCIsXG4gICAgXCJndWxwLWNhY2hlZFwiOiBcIl4xLjEuMFwiLFxuICAgIFwiZ3VscC1jb25jYXRcIjogXCJeMi42LjBcIixcbiAgICBcImd1bHAtZGVidWdcIjogXCJeMi4xLjBcIixcbiAgICBcImd1bHAtaGVhZGVyXCI6IFwiXjEuNy4xXCIsXG4gICAgXCJndWxwLWpzaGludFwiOiBcIl4xLjExLjJcIixcbiAgICBcImd1bHAtbWlycm9yXCI6IFwiXjAuNC4wXCIsXG4gICAgXCJndWxwLXBsdW1iZXJcIjogXCJeMS4wLjFcIixcbiAgICBcImd1bHAtcmVuYW1lXCI6IFwiXjEuMi4yXCIsXG4gICAgXCJndWxwLXNvdXJjZW1hcHNcIjogXCJeMS41LjJcIixcbiAgICBcImd1bHAtdWdsaWZ5XCI6IFwiXjEuNC4xXCIsXG4gICAgXCJndWxwLXV0aWxcIjogXCJeMy4wLjZcIixcbiAgICBcImphZ3VhcmpzLWpzZG9jXCI6IFwiZ2l0K2h0dHBzOi8vZ2l0aHViLmNvbS9kYXZpZHNoaW1qcy9qYWd1YXJqcy1qc2RvYy5naXRcIixcbiAgICBcImpzZG9jXCI6IFwiXjMuMy4yXCIsXG4gICAgXCJqc2hpbnQtc3VtbWFyeVwiOiBcIl4wLjQuMFwiLFxuICAgIFwibWluaW1pc3RcIjogXCJeMS4yLjBcIixcbiAgICBcIm1vY2hhXCI6IFwiXjIuMy4yXCIsXG4gICAgXCJyZXF1aXJlLWRpclwiOiBcIl4wLjMuMFwiLFxuICAgIFwicnVuLXNlcXVlbmNlXCI6IFwiXjEuMS4yXCIsXG4gICAgXCJ0ZXN0ZW1cIjogXCJeMC45LjRcIixcbiAgICBcInZpbnlsLWJ1ZmZlclwiOiBcIl4xLjAuMFwiLFxuICAgIFwidmlueWwtc291cmNlLXN0cmVhbVwiOiBcIl4xLjEuMFwiLFxuICAgIFwid2F0Y2hpZnlcIjogXCJeMy40LjBcIlxuICB9LFxuICBcImJyb3dzZXJpZnlcIjoge1xuICAgIFwidHJhbnNmb3JtXCI6IFtcbiAgICAgIFwiYnJmc1wiXG4gICAgXVxuICB9XG59XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uL2NvcmUnKTtcblxuLy8gYWRkIHNvbWUgZXh0cmEgdmFyaWFibGVzIHRvIHRoZSBjb250YWluZXIuLlxuT2JqZWN0LmFzc2lnbihcbiAgICBjb3JlLkRpc3BsYXlPYmplY3QucHJvdG90eXBlLFxuICAgIHJlcXVpcmUoJy4vYWNjZXNzaWJsZVRhcmdldCcpXG4pO1xuXG5cbi8qKlxuICogVGhlIEFjY2Vzc2liaWxpdHkgbWFuYWdlciByZWFjcmVhdGVzIHRoZSBhYmlsaXR5IHRvIHRhYiBhbmQgYW5kIGhhdmUgY29udGVudCByZWFkIGJ5IHNjcmVlbiByZWFkZXJzLiBUaGlzIGlzIHZlcnkgaW1wb3J0YW50IGFzIGl0IGNhbiBwb3NzaWJseSBoZWxwIHBlb3BsZSB3aXRoIGRpc2FiaWxpdGllcyBhY2Nlc3MgcGl4aSBjb250ZW50LlxuICogTXVjaCBsaWtlIGludGVyYWN0aW9uIGFueSBEaXNwbGF5T2JqZWN0IGNhbiBiZSBtYWRlIGFjY2Vzc2libGUuIFRoaXMgbWFuYWdlciB3aWxsIG1hcCB0aGUgZXZlbnRzIGFzIGlmIHRoZSBtb3VzZSB3YXMgYmVpbmcgdXNlZCwgbWluaW1pemluZyB0aGUgZWZmZXJvdCByZXF1aXJlZCB0byBpbXBsZW1lbnQuXG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLkNhbnZhc1JlbmRlcmVyfFBJWEkuV2ViR0xSZW5kZXJlcn0gQSByZWZlcmVuY2UgdG8gdGhlIGN1cnJlbnQgcmVuZGVyZXJcbiAqL1xuZnVuY3Rpb24gQWNjZXNzaWJpbGl0eU1hbmFnZXIocmVuZGVyZXIpXG57XG5cdC8vIGZpcnN0IHdlIGNyZWF0ZSBhIGRpdiB0aGF0IHdpbGwgc2l0IG92ZXIgdGhlIHBpeGkgZWxlbWVudC4gVGhpcyBpcyB3aGVyZSB0aGUgZGl2IG92ZXJsYXlzIHdpbGwgZ28uXG4gICAgdmFyIGRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgIFxuICAgIGRpdi5zdHlsZS53aWR0aCA9IDEwMCArICdweCc7XG4gICAgZGl2LnN0eWxlLmhlaWdodCA9IDEwMCArICdweCc7XG4gICAgZGl2LnN0eWxlLnBvc2l0aW9uID0gJ2Fic29sdXRlJztcbiAgICBkaXYuc3R5bGUudG9wID0gMDtcbiAgICBkaXYuc3R5bGUubGVmdCA9IDA7XG4gICAvL1xuICAgIGRpdi5zdHlsZS56SW5kZXggPSAyO1xuICAgXHRcbiAgIFx0LyoqXG4gICBcdCAqIFRoaXMgaXMgdGhlIGRvbSBlbGVtZW50IHRoYXQgd2lsbCBzaXQgb3ZlciB0aGUgcGl4aSBlbGVtZW50LiBUaGlzIGlzIHdoZXJlIHRoZSBkaXYgb3ZlcmxheXMgd2lsbCBnby5cbiAgIFx0ICogXG4gICBcdCAqIEB0eXBlIHtIVE1MRWxlbWVudH1cbiAgIFx0ICogQHByaXZhdGVcbiAgIFx0ICovXG4gICBcdHRoaXMuZGl2ID0gZGl2O1xuXG4gICBcdC8qKlxuICAgXHQgKiBBIHNpbXBsZSBwb29sIGZvciBzdG9yaW5nIGRpdnMuXG4gICBcdCAqIFxuICAgXHQgKiBAdHlwZSB7QXJyYXl9XG4gICBcdCAqIEBwcml2YXRlXG4gICBcdCAqL1xuIFx0dGhpcy5wb29sID0gW107XG5cbiBcdC8qKlxuIFx0ICogVGhpcyBpcyBhIHRpY2sgdXNlZCB0byBjaGVjayBpZiBhbiBvYmplY3QgaXMgbm8gbG9uZ2VyIGJlaW5nIHJlbmRlcmVkLlxuIFx0ICogXG4gXHQgKiBAdHlwZSB7TnVtYmVyfVxuIFx0ICogQHByaXZhdGVcbiBcdCAqL1xuICAgXHR0aGlzLnJlbmRlcklkID0gMDtcblxuICAgXHQvKipcbiAgIFx0ICogU2V0dGluZyB0aGlzIHRvIHRydWUgd2lsbCB2aXN1YWxseSBzaG93IHRoZSBkaXZzXG4gICBcdCAqIFxuICAgXHQgKiBAdHlwZSB7Qm9vbGVhbn1cbiAgIFx0ICovXG4gICBcdHRoaXMuZGVidWcgPSBmYWxzZTtcblxuICBcdC8qKlxuICAgICAqIFRoZSByZW5kZXJlciB0aGlzIGFjY2Vzc2liaWxpdHkgbWFuYWdlciB3b3JrcyBmb3IuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlN5c3RlbVJlbmRlcmVyfVxuICAgICAqL1xuICAgXHR0aGlzLnJlbmRlcmVyID0gcmVuZGVyZXI7XG5cbiAgIFx0LyoqXG4gICAgICogVGhlIGFycmF5IG9mIGN1cnJlbnRseSBhY3RpdmUgYWNjZXNzaWJsZSBpdGVtcy5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge0FycmF5fVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICBcdHRoaXMuY2hpbGRyZW4gPSBbXTtcbiAgIFx0XG4gICBcdC8qKlxuICAgICAqIHByZSBiaW5kIHRoZSBmdW5jdGlvbnMuLlxuICAgICAqL1xuICAgXHR0aGlzLl9vbktleURvd24gPSB0aGlzLl9vbktleURvd24uYmluZCh0aGlzKTtcbiAgIFx0dGhpcy5fb25Nb3VzZU1vdmUgPSB0aGlzLl9vbk1vdXNlTW92ZS5iaW5kKHRoaXMpO1xuICAgXHRcbiAgIFx0LyoqXG4gICAgICogc3RvcmVzIHRoZSBzdGF0ZSBvZiB0aGUgbWFuYWdlci4gSWYgdGhlcmUgYXJlIG5vIGFjY2Vzc2libGUgb2JqZWN0cyBvciB0aGUgbW91c2UgaXMgbW92aW5nIHRoZSB3aWxsIGJlIGZhbHNlLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7QXJyYXl9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgIFx0dGhpcy5pc0FjdGl2ZSA9IGZhbHNlO1xuXG5cbiAgIFx0Ly8gbGV0IGxpc3RlbiBmb3IgdGFiLi4gb25jZSBwcmVzc2VkIHdlIGNhbiBmaXJlIHVwIGFuZCBzaG93IHRoZSBhY2Nlc3NpYmlsaXR5IGxheWVyXG4gICBcdHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdrZXlkb3duJywgdGhpcy5fb25LZXlEb3duLCBmYWxzZSk7XG59XG5cblxuQWNjZXNzaWJpbGl0eU1hbmFnZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gQWNjZXNzaWJpbGl0eU1hbmFnZXI7XG5tb2R1bGUuZXhwb3J0cyA9IEFjY2Vzc2liaWxpdHlNYW5hZ2VyO1xuXG4vKipcbiAqIEFjdGl2YXRpbmcgd2lsbCBjYXVzZSB0aGUgQWNjZXNzaWJpbGl0eSBsYXllciB0byBiZSBzaG93bi4gVGhpcyBpcyBjYWxsZWQgd2hlbiBhIHVzZXIgcHJlc2VzIHRoZSB0YWIga2V5XG4gKiBAcHJpdmF0ZVxuICovXG5BY2Nlc3NpYmlsaXR5TWFuYWdlci5wcm90b3R5cGUuYWN0aXZhdGUgPSBmdW5jdGlvbigpXG57XG5cdGlmKHRoaXMuaXNBY3RpdmUpXG5cdHtcblx0XHRyZXR1cm47XG5cdH1cblxuXHR0aGlzLmlzQWN0aXZlID0gdHJ1ZTtcblxuXHR3aW5kb3cuZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignbW91c2Vtb3ZlJywgdGhpcy5fb25Nb3VzZU1vdmUsIHRydWUpO1xuXHR3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsIHRoaXMuX29uS2V5RG93biwgZmFsc2UpO1xuXG5cdHRoaXMucmVuZGVyZXIub24oJ3Bvc3RyZW5kZXInLCB0aGlzLnVwZGF0ZSwgdGhpcyk7XG5cblx0dGhpcy5yZW5kZXJlci52aWV3LnBhcmVudE5vZGUuYXBwZW5kQ2hpbGQodGhpcy5kaXYpO1x0XG59O1xuXG4vKipcbiAqIERlYWN0aXZhdGluZyB3aWxsIGNhdXNlIHRoZSBBY2Nlc3NpYmlsaXR5IGxheWVyIHRvIGJlIGhpZGRlbi4gVGhpcyBpcyBjYWxsZWQgd2hlbiBhIHVzZXIgbW92ZXMgdGhlIG1vdXNlXG4gKiBAcHJpdmF0ZVxuICovXG5BY2Nlc3NpYmlsaXR5TWFuYWdlci5wcm90b3R5cGUuZGVhY3RpdmF0ZSA9IGZ1bmN0aW9uKClcbntcblx0aWYoIXRoaXMuaXNBY3RpdmUpXG5cdHtcblx0XHRyZXR1cm47XG5cdH1cblxuXHR0aGlzLmlzQWN0aXZlID0gZmFsc2U7XG5cblx0d2luZG93LmRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21vdXNlbW92ZScsIHRoaXMuX29uTW91c2VNb3ZlKTtcblx0d2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLCB0aGlzLl9vbktleURvd24sIGZhbHNlKTtcblxuXHR0aGlzLnJlbmRlcmVyLm9mZigncG9zdHJlbmRlcicsIHRoaXMudXBkYXRlKTtcblxuXHR0aGlzLmRpdi5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHRoaXMuZGl2KTtcblxufTtcblxuLyoqXG4gKiBUaGlzIHJlY3Vyc2l2ZSBmdW5jdGlvbiB3aWxsIHJ1biB0aHJvdWdodCBoZSBzY2VuZSBncmFwaCBhbmQgYWRkIGFueSBuZXcgYWNjZXNzaWJsZSBvYmplY3RzIHRvIHRoZSBET00gbGF5ZXIuXG4gKiBAcGFyYW0gZWxlbWVudCB7UElYSS5Db250YWluZXJ8UElYSS5TcHJpdGV8UElYSS5leHRyYXMuVGlsaW5nU3ByaXRlfSB0aGUgRGlzcGxheU9iamVjdCB0byBjaGVjay5cbiAqIEBwcml2YXRlXG4gKi9cbkFjY2Vzc2liaWxpdHlNYW5hZ2VyLnByb3RvdHlwZS51cGRhdGVBY2Nlc3NpYmxlT2JqZWN0cyA9IGZ1bmN0aW9uKGRpc3BsYXlPYmplY3QpXG57XG5cdGlmKCFkaXNwbGF5T2JqZWN0LnZpc2libGUpXG5cdHtcblx0XHRyZXR1cm47XG5cdH1cblxuXHRpZihkaXNwbGF5T2JqZWN0LmFjY2Vzc2libGUgJiYgZGlzcGxheU9iamVjdC5pbnRlcmFjdGl2ZSlcblx0e1xuXHRcdGlmKCFkaXNwbGF5T2JqZWN0Ll9hY2Nlc3NpYmxlQWN0aXZlKVxuXHRcdHtcblx0XHRcdHRoaXMuYWRkQ2hpbGQoZGlzcGxheU9iamVjdCk7XG5cdFx0fVxuXHQgICBcdFxuXHQgICBcdGRpc3BsYXlPYmplY3QucmVuZGVySWQgPSB0aGlzLnJlbmRlcklkO1xuXHR9XG5cblx0dmFyIGNoaWxkcmVuID0gZGlzcGxheU9iamVjdC5jaGlsZHJlbjtcblxuXHRmb3IgKHZhciBpID0gY2hpbGRyZW4ubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcblx0XHRcblx0XHR0aGlzLnVwZGF0ZUFjY2Vzc2libGVPYmplY3RzKGNoaWxkcmVuW2ldKTtcblx0fVxufTtcblxuXG4vKipcbiAqIEJlZm9yZSBlYWNoIHJlbmRlciB0aGlzIGZ1bmN0aW9uIHdpbGwgZW5zdXJlIHRoYXQgYWxsIGRpdnMgYXJlIG1hcHBlZCBjb3JyZWN0bHkgdG8gdGhlaXIgRGlzcGxheU9iamVjdHNcbiAqIEBwcml2YXRlXG4gKi9cbkFjY2Vzc2liaWxpdHlNYW5hZ2VyLnByb3RvdHlwZS51cGRhdGUgPSBmdW5jdGlvbigpXG57XG5cblx0Ly8gdXBkYXRlIGNoaWxkcmVuLi4uXG5cdHRoaXMudXBkYXRlQWNjZXNzaWJsZU9iamVjdHModGhpcy5yZW5kZXJlci5fbGFzdE9iamVjdFJlbmRlcmVkKTtcblxuXHR2YXIgcmVjdCA9IHRoaXMucmVuZGVyZXIudmlldy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcblx0dmFyIHN4ID0gcmVjdC53aWR0aCAgLyB0aGlzLnJlbmRlcmVyLndpZHRoO1xuXHR2YXIgc3kgPSByZWN0LmhlaWdodCAvIHRoaXMucmVuZGVyZXIuaGVpZ2h0O1xuXG5cdHZhciBkaXYgPSB0aGlzLmRpdjtcblxuXHRkaXYuc3R5bGUubGVmdCA9IHJlY3QubGVmdCArICdweCc7XG5cdGRpdi5zdHlsZS50b3AgPSByZWN0LnRvcCArICdweCc7XG5cdGRpdi5zdHlsZS53aWR0aCA9IHRoaXMucmVuZGVyZXIud2lkdGggKyAncHgnO1xuXHRkaXYuc3R5bGUuaGVpZ2h0ID0gdGhpcy5yZW5kZXJlci5oZWlnaHQgKyAncHgnO1xuXG5cdGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5jaGlsZHJlbi5sZW5ndGg7IGkrKylcblx0e1xuXG5cdFx0dmFyIGNoaWxkID0gdGhpcy5jaGlsZHJlbltpXTtcblxuXHRcdGlmKGNoaWxkLnJlbmRlcklkICE9PSB0aGlzLnJlbmRlcklkKVxuXHRcdHtcblx0XHRcdGNoaWxkLl9hY2Nlc3NpYmxlQWN0aXZlID0gZmFsc2U7XG5cbiAgICAgICAgICAgIGNvcmUudXRpbHMucmVtb3ZlSXRlbXModGhpcy5jaGlsZHJlbiwgaSwgMSk7XG5cdFx0XHR0aGlzLmRpdi5yZW1vdmVDaGlsZCggY2hpbGQuX2FjY2Vzc2libGVEaXYgKTtcblx0XHRcdHRoaXMucG9vbC5wdXNoKGNoaWxkLl9hY2Nlc3NpYmxlRGl2KTtcblx0XHRcdGNoaWxkLl9hY2Nlc3NpYmxlRGl2ID0gbnVsbDtcblxuXHRcdFx0aS0tO1xuXG5cdFx0XHRpZih0aGlzLmNoaWxkcmVuLmxlbmd0aCA9PT0gMClcblx0XHRcdHtcblx0XHRcdFx0dGhpcy5kZWFjdGl2YXRlKCk7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdGVsc2Vcblx0XHR7XG5cdFx0XHQvLyBtYXAgZGl2IHRvIGRpc3BsYXkuLlxuXHRcdFx0ZGl2ID0gY2hpbGQuX2FjY2Vzc2libGVEaXY7XG5cdFx0XHR2YXIgaGl0QXJlYSA9IGNoaWxkLmhpdEFyZWE7XG5cdFx0XHR2YXIgd3QgPSBjaGlsZC53b3JsZFRyYW5zZm9ybTtcblxuXHRcdFx0aWYoY2hpbGQuaGl0QXJlYSlcblx0XHRcdHtcblx0XHRcdFx0ZGl2LnN0eWxlLmxlZnQgPSAoKHd0LnR4ICsgKGhpdEFyZWEueCAqIHd0LmEpKSAqIHN4KSArICdweCc7XG5cdFx0XHRcdGRpdi5zdHlsZS50b3AgPSAgKCh3dC50eSArIChoaXRBcmVhLnkgKiB3dC5kKSkgKiBzeSkgKyAgJ3B4JztcblxuXHRcdFx0XHRkaXYuc3R5bGUud2lkdGggPSAoaGl0QXJlYS53aWR0aCAqIHd0LmEgKiBzeCkgKyAncHgnO1xuXHRcdFx0XHRkaXYuc3R5bGUuaGVpZ2h0ID0gKGhpdEFyZWEuaGVpZ2h0ICogd3QuZCAqIHN5KSArICdweCc7XG5cdFx0XHRcblx0XHRcdH1cblx0XHRcdGVsc2Vcblx0XHRcdHtcblx0XHRcdFx0aGl0QXJlYSA9IGNoaWxkLmdldEJvdW5kcygpO1xuXG5cdFx0XHRcdHRoaXMuY2FwSGl0QXJlYShoaXRBcmVhKTtcblxuXHRcdFx0XHRkaXYuc3R5bGUubGVmdCA9IChoaXRBcmVhLnggKiBzeCkgKyAncHgnO1xuXHRcdFx0XHRkaXYuc3R5bGUudG9wID0gIChoaXRBcmVhLnkgKiBzeSkgKyAgJ3B4JztcblxuXHRcdFx0XHRkaXYuc3R5bGUud2lkdGggPSAoaGl0QXJlYS53aWR0aCAqIHN4KSArICdweCc7XG5cdFx0XHRcdGRpdi5zdHlsZS5oZWlnaHQgPSAoaGl0QXJlYS5oZWlnaHQgKiBzeSkgKyAncHgnO1xuXHRcdFx0fVx0XHRcblx0XHR9XG5cdH1cblxuXHQvLyBpbmNyZW1lbnQgdGhlIHJlbmRlciBpZC4uXG5cdHRoaXMucmVuZGVySWQrKztcbn07XG5cbkFjY2Vzc2liaWxpdHlNYW5hZ2VyLnByb3RvdHlwZS5jYXBIaXRBcmVhID0gZnVuY3Rpb24gKGhpdEFyZWEpXG57XG4gICAgaWYgKGhpdEFyZWEueCA8IDApXG4gICAge1xuICAgICAgICBoaXRBcmVhLndpZHRoICs9IGhpdEFyZWEueDtcbiAgICAgICAgaGl0QXJlYS54ID0gMDtcbiAgICB9XG5cbiAgICBpZiAoaGl0QXJlYS55IDwgMClcbiAgICB7XG4gICAgICAgIGhpdEFyZWEuaGVpZ2h0ICs9IGhpdEFyZWEueTtcbiAgICAgICAgaGl0QXJlYS55ID0gMDtcbiAgICB9XG5cbiAgICBpZiAoIGhpdEFyZWEueCArIGhpdEFyZWEud2lkdGggPiB0aGlzLnJlbmRlcmVyLndpZHRoIClcbiAgICB7XG4gICAgICAgIGhpdEFyZWEud2lkdGggPSB0aGlzLnJlbmRlcmVyLndpZHRoIC0gaGl0QXJlYS54O1xuICAgIH1cblxuICAgIGlmICggaGl0QXJlYS55ICsgaGl0QXJlYS5oZWlnaHQgPiB0aGlzLnJlbmRlcmVyLmhlaWdodCApXG4gICAge1xuICAgICAgICBoaXRBcmVhLmhlaWdodCA9IHRoaXMucmVuZGVyZXIuaGVpZ2h0IC0gaGl0QXJlYS55O1xuICAgIH1cbn07XG5cblxuLyoqXG4gKiBBZGRzIGEgRGlzcGxheU9iamVjdCB0byB0aGUgYWNjZXNzaWJpbGl0eSBtYW5hZ2VyXG4gKiBAcHJpdmF0ZVxuICovXG5BY2Nlc3NpYmlsaXR5TWFuYWdlci5wcm90b3R5cGUuYWRkQ2hpbGQgPSBmdW5jdGlvbihkaXNwbGF5T2JqZWN0KVxue1xuLy9cdHRoaXMuYWN0aXZhdGUoKTtcblx0XG5cdHZhciBkaXYgPSB0aGlzLnBvb2wucG9wKCk7XG5cblx0aWYoIWRpdilcblx0e1xuXHRcdGRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2J1dHRvbicpOyBcblxuXHQgICAgZGl2LnN0eWxlLndpZHRoID0gMTAwICsgJ3B4Jztcblx0ICAgIGRpdi5zdHlsZS5oZWlnaHQgPSAxMDAgKyAncHgnO1xuXHQgICAgZGl2LnN0eWxlLmJhY2tncm91bmRDb2xvciA9IHRoaXMuZGVidWcgPyAncmdiYSgyNTUsMCwwLDAuNSknIDogJ3RyYW5zcGFyZW50Jztcblx0ICAgIGRpdi5zdHlsZS5wb3NpdGlvbiA9ICdhYnNvbHV0ZSc7XG5cdCAgICBkaXYuc3R5bGUuekluZGV4ID0gMjtcblx0ICAgIGRpdi5zdHlsZS5ib3JkZXJTdHlsZSA9ICdub25lJztcblxuXHQgICAgXG5cdCAgICBkaXYuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCB0aGlzLl9vbkNsaWNrLmJpbmQodGhpcykpO1xuXHQgICAgZGl2LmFkZEV2ZW50TGlzdGVuZXIoJ2ZvY3VzJywgdGhpcy5fb25Gb2N1cy5iaW5kKHRoaXMpKTtcblx0ICAgIGRpdi5hZGRFdmVudExpc3RlbmVyKCdmb2N1c291dCcsIHRoaXMuX29uRm9jdXNPdXQuYmluZCh0aGlzKSk7XG5cdH1cblx0ICAgXHRcblxuXG5cblx0ZGl2LnRpdGxlID0gZGlzcGxheU9iamVjdC5hY2Nlc3NpYmxlVGl0bGUgfHwgJ2Rpc3BsYXlPYmplY3QgJyArIHRoaXMudGFiSW5kZXg7XG5cblx0Ly9cblx0XG5cdGRpc3BsYXlPYmplY3QuX2FjY2Vzc2libGVBY3RpdmUgPSB0cnVlO1xuXHRkaXNwbGF5T2JqZWN0Ll9hY2Nlc3NpYmxlRGl2ID0gZGl2O1xuXHRkaXYuZGlzcGxheU9iamVjdCA9IGRpc3BsYXlPYmplY3Q7XG5cblxuXHR0aGlzLmNoaWxkcmVuLnB1c2goZGlzcGxheU9iamVjdCk7XG5cdHRoaXMuZGl2LmFwcGVuZENoaWxkKCBkaXNwbGF5T2JqZWN0Ll9hY2Nlc3NpYmxlRGl2ICk7XG5cdGRpc3BsYXlPYmplY3QuX2FjY2Vzc2libGVEaXYudGFiSW5kZXggPSBkaXNwbGF5T2JqZWN0LnRhYkluZGV4O1xufTtcblxuXG4vKipcbiAqIE1hcHMgdGhlIGRpdiBidXR0b24gcHJlc3MgdG8gcGl4aSdzIEludGVyYWN0aW9uTWFuYWdlciAoY2xpY2spXG4gKiBAcHJpdmF0ZVxuICovXG5BY2Nlc3NpYmlsaXR5TWFuYWdlci5wcm90b3R5cGUuX29uQ2xpY2sgPSBmdW5jdGlvbihlKVxue1xuXHR2YXIgaW50ZXJhY3Rpb25NYW5hZ2VyID0gdGhpcy5yZW5kZXJlci5wbHVnaW5zLmludGVyYWN0aW9uO1xuXHRpbnRlcmFjdGlvbk1hbmFnZXIuZGlzcGF0Y2hFdmVudChlLnRhcmdldC5kaXNwbGF5T2JqZWN0LCAnY2xpY2snLCBpbnRlcmFjdGlvbk1hbmFnZXIuZXZlbnREYXRhKTtcbn07XG5cbi8qKlxuICogTWFwcyB0aGUgZGl2IGZvY3VzIGV2ZW50cyB0byBwaXhpcyBJbnRlcmFjdGlvbk1hbmFnZXIgKG1vdXNlb3ZlcilcbiAqIEBwcml2YXRlXG4gKi9cbkFjY2Vzc2liaWxpdHlNYW5hZ2VyLnByb3RvdHlwZS5fb25Gb2N1cyA9IGZ1bmN0aW9uKGUpXG57XG5cdHZhciBpbnRlcmFjdGlvbk1hbmFnZXIgPSB0aGlzLnJlbmRlcmVyLnBsdWdpbnMuaW50ZXJhY3Rpb247XG5cdGludGVyYWN0aW9uTWFuYWdlci5kaXNwYXRjaEV2ZW50KGUudGFyZ2V0LmRpc3BsYXlPYmplY3QsICdtb3VzZW92ZXInLCBpbnRlcmFjdGlvbk1hbmFnZXIuZXZlbnREYXRhKTtcbn07XG5cbi8qKlxuICogTWFwcyB0aGUgZGl2IGZvY3VzIGV2ZW50cyB0byBwaXhpcyBJbnRlcmFjdGlvbk1hbmFnZXIgKG1vdXNlb3V0KVxuICogQHByaXZhdGVcbiAqL1xuQWNjZXNzaWJpbGl0eU1hbmFnZXIucHJvdG90eXBlLl9vbkZvY3VzT3V0ID0gZnVuY3Rpb24oZSlcbntcblx0dmFyIGludGVyYWN0aW9uTWFuYWdlciA9IHRoaXMucmVuZGVyZXIucGx1Z2lucy5pbnRlcmFjdGlvbjtcblx0aW50ZXJhY3Rpb25NYW5hZ2VyLmRpc3BhdGNoRXZlbnQoZS50YXJnZXQuZGlzcGxheU9iamVjdCwgJ21vdXNlb3V0JywgaW50ZXJhY3Rpb25NYW5hZ2VyLmV2ZW50RGF0YSk7XG59O1xuXG4vKipcbiAqIElzIGNhbGxlZCB3aGVuIGEga2V5IGlzIHByZXNzZWRcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5BY2Nlc3NpYmlsaXR5TWFuYWdlci5wcm90b3R5cGUuX29uS2V5RG93biA9IGZ1bmN0aW9uKGUpXG57XG5cdGlmKGUua2V5Q29kZSAhPT0gOSlcblx0e1xuXHRcdHJldHVybjtcblx0fVxuXG5cdHRoaXMuYWN0aXZhdGUoKTtcbn07XG5cbi8qKlxuICogSXMgY2FsbGVkIHdoZW4gdGhlIG1vdXNlIG1vdmVzIGFjcm9zcyB0aGUgcmVuZGVyZXIgZWxlbWVudFxuICpcbiAqIEBwcml2YXRlXG4gKi9cbkFjY2Vzc2liaWxpdHlNYW5hZ2VyLnByb3RvdHlwZS5fb25Nb3VzZU1vdmUgPSBmdW5jdGlvbigpXG57XG5cdHRoaXMuZGVhY3RpdmF0ZSgpO1xufTtcblxuXG4vKipcbiAqIERlc3Ryb3lzIHRoZSBhY2Nlc3NpYmlsaXR5IG1hbmFnZXJcbiAqXG4gKi9cbkFjY2Vzc2liaWxpdHlNYW5hZ2VyLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKCkgXG57XG5cdHRoaXMuZGl2ID0gbnVsbDtcblxuXHRmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuY2hpbGRyZW4ubGVuZ3RoOyBpKyspXG5cdHtcblx0XHR0aGlzLmNoaWxkcmVuW2ldLmRpdiA9IG51bGw7XG5cdH1cblxuXHRcblx0d2luZG93LmRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21vdXNlbW92ZScsIHRoaXMuX29uTW91c2VNb3ZlKTtcblx0d2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLCB0aGlzLl9vbktleURvd24pO1xuXHRcdFxuXHR0aGlzLnBvb2wgPSBudWxsO1xuXHR0aGlzLmNoaWxkcmVuID0gbnVsbDtcblx0dGhpcy5yZW5kZXJlciA9IG51bGw7XG5cbn07XG5cbmNvcmUuV2ViR0xSZW5kZXJlci5yZWdpc3RlclBsdWdpbignYWNjZXNzaWJpbGl0eScsIEFjY2Vzc2liaWxpdHlNYW5hZ2VyKTtcbmNvcmUuQ2FudmFzUmVuZGVyZXIucmVnaXN0ZXJQbHVnaW4oJ2FjY2Vzc2liaWxpdHknLCBBY2Nlc3NpYmlsaXR5TWFuYWdlcik7XG5cbiIsIi8qKlxuICogRGVmYXVsdCBwcm9wZXJ0eSB2YWx1ZXMgb2YgYWNjZXNzaWJsZSBvYmplY3RzXG4gKiB1c2VkIGJ5IHtAbGluayBQSVhJLmFjY2Vzc2liaWxpdHkuQWNjZXNzaWJpbGl0eU1hbmFnZXJ9LlxuICpcbiAqIEBtaXhpblxuICogQG1lbWJlcm9mIFBJWElcbiAqIEBleGFtcGxlXG4gKiAgICAgIGZ1bmN0aW9uIE15T2JqZWN0KCkge31cbiAqXG4gKiAgICAgIE9iamVjdC5hc3NpZ24oXG4gKiAgICAgICAgICBNeU9iamVjdC5wcm90b3R5cGUsXG4gKiAgICAgICAgICBQSVhJLmFjY2Vzc2liaWxpdHkuYWNjZXNzaWJsZVRhcmdldFxuICogICAgICApO1xuICovXG52YXIgYWNjZXNzaWJsZVRhcmdldCA9IHtcbiAgICBcbiAgICAvKipcbiAgICAgKiBAdG9kbyBOZWVkcyBkb2NzLlxuICAgICAqL1xuICAgIGFjY2Vzc2libGU6ZmFsc2UsXG5cbiAgICAvKipcbiAgICAgKiBAdG9kbyBOZWVkcyBkb2NzLlxuICAgICAqL1xuICAgIGFjY2Vzc2libGVUaXRsZTpudWxsLFxuXG4gICAgLyoqXG4gICAgICogQHRvZG8gTmVlZHMgZG9jcy5cbiAgICAgKi9cbiAgICB0YWJJbmRleDowLFxuXG4gICAgLyoqXG4gICAgICogQHRvZG8gTmVlZHMgZG9jcy5cbiAgICAgKi9cbiAgICBfYWNjZXNzaWJsZUFjdGl2ZTpmYWxzZSxcblxuICAgIC8qKlxuICAgICAqIEB0b2RvIE5lZWRzIGRvY3MuXG4gICAgICovXG4gICAgX2FjY2Vzc2libGVEaXY6ZmFsc2VcblxufTtcblxubW9kdWxlLmV4cG9ydHMgPSBhY2Nlc3NpYmxlVGFyZ2V0O1xuIiwiLyoqXG4gKiBAZmlsZSAgICAgICAgTWFpbiBleHBvcnQgb2YgdGhlIFBJWEkgYWNjZXNzaWJpbGl0eSBsaWJyYXJ5XG4gKiBAYXV0aG9yICAgICAgTWF0IEdyb3ZlcyA8bWF0QGdvb2Rib3lkaWdpdGFsLmNvbT5cbiAqIEBjb3B5cmlnaHQgICAyMDEzLTIwMTUgR29vZEJveURpZ2l0YWxcbiAqIEBsaWNlbnNlICAgICB7QGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL3BpeGlqcy9waXhpLmpzL2Jsb2IvbWFzdGVyL0xJQ0VOU0V8TUlUIExpY2Vuc2V9XG4gKi9cblxuLyoqXG4gKiBAbmFtZXNwYWNlIFBJWEkuaW50ZXJhY3Rpb25cbiAqL1xubW9kdWxlLmV4cG9ydHMgPSB7XG4gICAgYWNjZXNzaWJsZVRhcmdldDogICAgIHJlcXVpcmUoJy4vYWNjZXNzaWJsZVRhcmdldCcpLFxuICAgIEFjY2Vzc2liaWxpdHlNYW5hZ2VyOiByZXF1aXJlKCcuL0FjY2Vzc2liaWxpdHlNYW5hZ2VyJylcbn07XG4iLCIvKipcbiAqIENvbnN0YW50IHZhbHVlcyB1c2VkIGluIHBpeGlcbiAqXG4gKiBAbGVuZHMgUElYSVxuICovXG52YXIgQ09OU1QgPSB7XG4gICAgLyoqXG4gICAgICogU3RyaW5nIG9mIHRoZSBjdXJyZW50IFBJWEkgdmVyc2lvblxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBjb25zdGFudFxuICAgICAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBWRVJTSU9OXG4gICAgICovXG4gICAgVkVSU0lPTjogcmVxdWlyZSgnLi4vLi4vcGFja2FnZS5qc29uJykudmVyc2lvbixcblxuICAgIC8qKlxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBQSV8yIC0gVHdvIFBpXG4gICAgICogQGNvbnN0YW50XG4gICAgICogQHN0YXRpY1xuICAgICAqL1xuICAgIFBJXzI6IE1hdGguUEkgKiAyLFxuXG4gICAgLyoqXG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IFJBRF9UT19ERUcgLSBDb25zdGFudCBjb252ZXJzaW9uIGZhY3RvciBmb3IgY29udmVydGluZyByYWRpYW5zIHRvIGRlZ3JlZXNcbiAgICAgKiBAY29uc3RhbnRcbiAgICAgKiBAc3RhdGljXG4gICAgICovXG4gICAgUkFEX1RPX0RFRzogMTgwIC8gTWF0aC5QSSxcblxuICAgIC8qKlxuICAgICAqIEBwcm9wZXJ0eSB7TnVtYmVyfSBERUdfVE9fUkFEIC0gQ29uc3RhbnQgY29udmVyc2lvbiBmYWN0b3IgZm9yIGNvbnZlcnRpbmcgZGVncmVlcyB0byByYWRpYW5zXG4gICAgICogQGNvbnN0YW50XG4gICAgICogQHN0YXRpY1xuICAgICAqL1xuICAgIERFR19UT19SQUQ6IE1hdGguUEkgLyAxODAsXG5cbiAgICAvKipcbiAgICAgKiBUYXJnZXQgZnJhbWVzIHBlciBtaWxsaXNlY29uZC5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAY29uc3RhbnRcbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gVEFSR0VUX0ZQTVM9MC4wNlxuICAgICAqL1xuICAgIFRBUkdFVF9GUE1TOiAwLjA2LFxuXG4gICAgLyoqXG4gICAgICogQ29uc3RhbnQgdG8gaWRlbnRpZnkgdGhlIFJlbmRlcmVyIFR5cGUuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQGNvbnN0YW50XG4gICAgICogQHByb3BlcnR5IHtvYmplY3R9IFJFTkRFUkVSX1RZUEVcbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gUkVOREVSRVJfVFlQRS5VTktOT1dOXG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IFJFTkRFUkVSX1RZUEUuV0VCR0xcbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gUkVOREVSRVJfVFlQRS5DQU5WQVNcbiAgICAgKi9cbiAgICBSRU5ERVJFUl9UWVBFOiB7XG4gICAgICAgIFVOS05PV046ICAgIDAsXG4gICAgICAgIFdFQkdMOiAgICAgIDEsXG4gICAgICAgIENBTlZBUzogICAgIDJcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVmFyaW91cyBibGVuZCBtb2RlcyBzdXBwb3J0ZWQgYnkgUElYSS4gSU1QT1JUQU5UIC0gVGhlIFdlYkdMIHJlbmRlcmVyIG9ubHkgc3VwcG9ydHNcbiAgICAgKiB0aGUgTk9STUFMLCBBREQsIE1VTFRJUExZIGFuZCBTQ1JFRU4gYmxlbmQgbW9kZXMuIEFueXRoaW5nIGVsc2Ugd2lsbCBzaWxlbnRseSBhY3QgbGlrZVxuICAgICAqIE5PUk1BTC5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAY29uc3RhbnRcbiAgICAgKiBAcHJvcGVydHkge29iamVjdH0gQkxFTkRfTU9ERVNcbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gQkxFTkRfTU9ERVMuTk9STUFMXG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IEJMRU5EX01PREVTLkFERFxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBCTEVORF9NT0RFUy5NVUxUSVBMWVxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBCTEVORF9NT0RFUy5TQ1JFRU5cbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gQkxFTkRfTU9ERVMuT1ZFUkxBWVxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBCTEVORF9NT0RFUy5EQVJLRU5cbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gQkxFTkRfTU9ERVMuTElHSFRFTlxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBCTEVORF9NT0RFUy5DT0xPUl9ET0RHRVxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBCTEVORF9NT0RFUy5DT0xPUl9CVVJOXG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IEJMRU5EX01PREVTLkhBUkRfTElHSFRcbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gQkxFTkRfTU9ERVMuU09GVF9MSUdIVFxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBCTEVORF9NT0RFUy5ESUZGRVJFTkNFXG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IEJMRU5EX01PREVTLkVYQ0xVU0lPTlxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBCTEVORF9NT0RFUy5IVUVcbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gQkxFTkRfTU9ERVMuU0FUVVJBVElPTlxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBCTEVORF9NT0RFUy5DT0xPUlxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBCTEVORF9NT0RFUy5MVU1JTk9TSVRZXG4gICAgICovXG4gICAgQkxFTkRfTU9ERVM6IHtcbiAgICAgICAgTk9STUFMOiAgICAgICAgIDAsXG4gICAgICAgIEFERDogICAgICAgICAgICAxLFxuICAgICAgICBNVUxUSVBMWTogICAgICAgMixcbiAgICAgICAgU0NSRUVOOiAgICAgICAgIDMsXG4gICAgICAgIE9WRVJMQVk6ICAgICAgICA0LFxuICAgICAgICBEQVJLRU46ICAgICAgICAgNSxcbiAgICAgICAgTElHSFRFTjogICAgICAgIDYsXG4gICAgICAgIENPTE9SX0RPREdFOiAgICA3LFxuICAgICAgICBDT0xPUl9CVVJOOiAgICAgOCxcbiAgICAgICAgSEFSRF9MSUdIVDogICAgIDksXG4gICAgICAgIFNPRlRfTElHSFQ6ICAgICAxMCxcbiAgICAgICAgRElGRkVSRU5DRTogICAgIDExLFxuICAgICAgICBFWENMVVNJT046ICAgICAgMTIsXG4gICAgICAgIEhVRTogICAgICAgICAgICAxMyxcbiAgICAgICAgU0FUVVJBVElPTjogICAgIDE0LFxuICAgICAgICBDT0xPUjogICAgICAgICAgMTUsXG4gICAgICAgIExVTUlOT1NJVFk6ICAgICAxNlxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBWYXJpb3VzIHdlYmdsIGRyYXcgbW9kZXMuIFRoZXNlIGNhbiBiZSB1c2VkIHRvIHNwZWNpZnkgd2hpY2ggR0wgZHJhd01vZGUgdG8gdXNlXG4gICAgICogdW5kZXIgY2VydGFpbiBzaXR1YXRpb25zIGFuZCByZW5kZXJlcnMuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQGNvbnN0YW50XG4gICAgICogQHByb3BlcnR5IHtvYmplY3R9IERSQVdfTU9ERVNcbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gRFJBV19NT0RFUy5QT0lOVFNcbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gRFJBV19NT0RFUy5MSU5FU1xuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBEUkFXX01PREVTLkxJTkVfTE9PUFxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBEUkFXX01PREVTLkxJTkVfU1RSSVBcbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gRFJBV19NT0RFUy5UUklBTkdMRVNcbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gRFJBV19NT0RFUy5UUklBTkdMRV9TVFJJUFxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBEUkFXX01PREVTLlRSSUFOR0xFX0ZBTlxuICAgICAqL1xuICAgIERSQVdfTU9ERVM6IHtcbiAgICAgICAgUE9JTlRTOiAgICAgICAgIDAsXG4gICAgICAgIExJTkVTOiAgICAgICAgICAxLFxuICAgICAgICBMSU5FX0xPT1A6ICAgICAgMixcbiAgICAgICAgTElORV9TVFJJUDogICAgIDMsXG4gICAgICAgIFRSSUFOR0xFUzogICAgICA0LFxuICAgICAgICBUUklBTkdMRV9TVFJJUDogNSxcbiAgICAgICAgVFJJQU5HTEVfRkFOOiAgIDZcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVGhlIHNjYWxlIG1vZGVzIHRoYXQgYXJlIHN1cHBvcnRlZCBieSBwaXhpLlxuICAgICAqXG4gICAgICogVGhlIERFRkFVTFQgc2NhbGUgbW9kZSBhZmZlY3RzIHRoZSBkZWZhdWx0IHNjYWxpbmcgbW9kZSBvZiBmdXR1cmUgb3BlcmF0aW9ucy5cbiAgICAgKiBJdCBjYW4gYmUgcmUtYXNzaWduZWQgdG8gZWl0aGVyIExJTkVBUiBvciBORUFSRVNULCBkZXBlbmRpbmcgdXBvbiBzdWl0YWJpbGl0eS5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAY29uc3RhbnRcbiAgICAgKiBAcHJvcGVydHkge29iamVjdH0gU0NBTEVfTU9ERVNcbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gU0NBTEVfTU9ERVMuREVGQVVMVD1MSU5FQVJcbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gU0NBTEVfTU9ERVMuTElORUFSIFNtb290aCBzY2FsaW5nXG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IFNDQUxFX01PREVTLk5FQVJFU1QgUGl4ZWxhdGluZyBzY2FsaW5nXG4gICAgICovXG4gICAgU0NBTEVfTU9ERVM6IHtcbiAgICAgICAgREVGQVVMVDogICAgMCxcbiAgICAgICAgTElORUFSOiAgICAgMCxcbiAgICAgICAgTkVBUkVTVDogICAgMVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBUaGUgcHJlZml4IHRoYXQgZGVub3RlcyBhIFVSTCBpcyBmb3IgYSByZXRpbmEgYXNzZXRcbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAY29uc3RhbnRcbiAgICAgKiBAcHJvcGVydHkge3N0cmluZ30gUkVUSU5BX1BSRUZJWFxuICAgICAqL1xuICAgIC8vZXhhbXBsZTogJ0AyeCcsXG4gICAgUkVUSU5BX1BSRUZJWDogL0AoLispeC8sXG5cbiAgICBSRVNPTFVUSU9OOjEsXG5cbiAgICBGSUxURVJfUkVTT0xVVElPTjoxLFxuXG4gICAgLyoqXG4gICAgICogVGhlIGRlZmF1bHQgcmVuZGVyIG9wdGlvbnMgaWYgbm9uZSBhcmUgc3VwcGxpZWQgdG8ge0BsaW5rIFBJWEkuV2ViR0xSZW5kZXJlcn1cbiAgICAgKiBvciB7QGxpbmsgUElYSS5DYW52YXNSZW5kZXJlcn0uXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQGNvbnN0YW50XG4gICAgICogQHByb3BlcnR5IHtvYmplY3R9IERFRkFVTFRfUkVOREVSX09QVElPTlNcbiAgICAgKiBAcHJvcGVydHkge0hUTUxDYW52YXNFbGVtZW50fSBERUZBVUxUX1JFTkRFUl9PUFRJT05TLnZpZXc9bnVsbFxuICAgICAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gREVGQVVMVF9SRU5ERVJfT1BUSU9OUy50cmFuc3BhcmVudD1mYWxzZVxuICAgICAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gREVGQVVMVF9SRU5ERVJfT1BUSU9OUy5hbnRpYWxpYXM9ZmFsc2VcbiAgICAgKiBAcHJvcGVydHkge2Jvb2xlYW59IERFRkFVTFRfUkVOREVSX09QVElPTlMuZm9yY2VGWEFBPWZhbHNlXG4gICAgICogQHByb3BlcnR5IHtib29sZWFufSBERUZBVUxUX1JFTkRFUl9PUFRJT05TLnByZXNlcnZlRHJhd2luZ0J1ZmZlcj1mYWxzZVxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBERUZBVUxUX1JFTkRFUl9PUFRJT05TLnJlc29sdXRpb249MVxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBERUZBVUxUX1JFTkRFUl9PUFRJT05TLmJhY2tncm91bmRDb2xvcj0weDAwMDAwMFxuICAgICAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gREVGQVVMVF9SRU5ERVJfT1BUSU9OUy5jbGVhckJlZm9yZVJlbmRlcj10cnVlXG4gICAgICogQHByb3BlcnR5IHtib29sZWFufSBERUZBVUxUX1JFTkRFUl9PUFRJT05TLmF1dG9SZXNpemU9ZmFsc2VcbiAgICAgKi9cbiAgICBERUZBVUxUX1JFTkRFUl9PUFRJT05TOiB7XG4gICAgICAgIHZpZXc6IG51bGwsXG4gICAgICAgIHJlc29sdXRpb246IDEsXG4gICAgICAgIGFudGlhbGlhczogZmFsc2UsXG4gICAgICAgIGZvcmNlRlhBQTogZmFsc2UsXG4gICAgICAgIGF1dG9SZXNpemU6IGZhbHNlLFxuICAgICAgICB0cmFuc3BhcmVudDogZmFsc2UsXG4gICAgICAgIGJhY2tncm91bmRDb2xvcjogMHgwMDAwMDAsXG4gICAgICAgIGNsZWFyQmVmb3JlUmVuZGVyOiB0cnVlLFxuICAgICAgICBwcmVzZXJ2ZURyYXdpbmdCdWZmZXI6IGZhbHNlLFxuICAgICAgICByb3VuZFBpeGVsczogZmFsc2VcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQ29uc3RhbnRzIHRoYXQgaWRlbnRpZnkgc2hhcGVzLCBtYWlubHkgdG8gcHJldmVudCBgaW5zdGFuY2VvZmAgY2FsbHMuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQGNvbnN0YW50XG4gICAgICogQHByb3BlcnR5IHtvYmplY3R9IFNIQVBFU1xuICAgICAqIEBwcm9wZXJ0eSB7b2JqZWN0fSBTSEFQRVMuUE9MWT0wXG4gICAgICogQHByb3BlcnR5IHtvYmplY3R9IFNIQVBFUy5SRUNUPTFcbiAgICAgKiBAcHJvcGVydHkge29iamVjdH0gU0hBUEVTLkNJUkM9MlxuICAgICAqIEBwcm9wZXJ0eSB7b2JqZWN0fSBTSEFQRVMuRUxJUD0zXG4gICAgICogQHByb3BlcnR5IHtvYmplY3R9IFNIQVBFUy5SUkVDPTRcbiAgICAgKi9cbiAgICBTSEFQRVM6IHtcbiAgICAgICAgUE9MWTogMCxcbiAgICAgICAgUkVDVDogMSxcbiAgICAgICAgQ0lSQzogMixcbiAgICAgICAgRUxJUDogMyxcbiAgICAgICAgUlJFQzogNFxuICAgIH0sXG5cbiAgICAvLyBUT0RPOiBtYXliZSBjaGFuZ2UgdG8gU1BSSVRFLkJBVENIX1NJWkU6IDIwMDBcbiAgICAvLyBUT0RPOiBtYXliZSBhZGQgUEFSVElDTEUuQkFUQ0hfU0laRTogMTUwMDBcbiAgICBTUFJJVEVfQkFUQ0hfU0laRTogMjAwMCAvL25pY2UgYmFsYW5jZSBiZXR3ZWVuIG1vYmlsZSBhbmQgZGVza3RvcCBtYWNoaW5lc1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBDT05TVDtcbiIsInZhciBtYXRoID0gcmVxdWlyZSgnLi4vbWF0aCcpLFxuICAgIHV0aWxzID0gcmVxdWlyZSgnLi4vdXRpbHMnKSxcbiAgICBEaXNwbGF5T2JqZWN0ID0gcmVxdWlyZSgnLi9EaXNwbGF5T2JqZWN0JyksXG4gICAgUmVuZGVyVGV4dHVyZSA9IHJlcXVpcmUoJy4uL3RleHR1cmVzL1JlbmRlclRleHR1cmUnKSxcbiAgICBfdGVtcE1hdHJpeCA9IG5ldyBtYXRoLk1hdHJpeCgpO1xuXG4vKipcbiAqIEEgQ29udGFpbmVyIHJlcHJlc2VudHMgYSBjb2xsZWN0aW9uIG9mIGRpc3BsYXkgb2JqZWN0cy5cbiAqIEl0IGlzIHRoZSBiYXNlIGNsYXNzIG9mIGFsbCBkaXNwbGF5IG9iamVjdHMgdGhhdCBhY3QgYXMgYSBjb250YWluZXIgZm9yIG90aGVyIG9iamVjdHMuXG4gKlxuICpgYGBqc1xuICogdmFyIGNvbnRhaW5lciA9IG5ldyBQSVhJLkNvbnRhaW5lcigpO1xuICogY29udGFpbmVyLmFkZENoaWxkKHNwcml0ZSk7XG4gKiBgYGBcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5EaXNwbGF5T2JqZWN0XG4gKiBAbWVtYmVyb2YgUElYSVxuICovXG5mdW5jdGlvbiBDb250YWluZXIoKVxue1xuICAgIERpc3BsYXlPYmplY3QuY2FsbCh0aGlzKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBhcnJheSBvZiBjaGlsZHJlbiBvZiB0aGlzIGNvbnRhaW5lci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuRGlzcGxheU9iamVjdFtdfVxuICAgICAqIEByZWFkb25seVxuICAgICAqL1xuICAgIHRoaXMuY2hpbGRyZW4gPSBbXTtcbn1cblxuLy8gY29uc3RydWN0b3JcbkNvbnRhaW5lci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKERpc3BsYXlPYmplY3QucHJvdG90eXBlKTtcbkNvbnRhaW5lci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBDb250YWluZXI7XG5tb2R1bGUuZXhwb3J0cyA9IENvbnRhaW5lcjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoQ29udGFpbmVyLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFRoZSB3aWR0aCBvZiB0aGUgQ29udGFpbmVyLCBzZXR0aW5nIHRoaXMgd2lsbCBhY3R1YWxseSBtb2RpZnkgdGhlIHNjYWxlIHRvIGFjaGlldmUgdGhlIHZhbHVlIHNldFxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLkNvbnRhaW5lciNcbiAgICAgKi9cbiAgICB3aWR0aDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnNjYWxlLnggKiB0aGlzLmdldExvY2FsQm91bmRzKCkud2lkdGg7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG5cbiAgICAgICAgICAgIHZhciB3aWR0aCA9IHRoaXMuZ2V0TG9jYWxCb3VuZHMoKS53aWR0aDtcblxuICAgICAgICAgICAgaWYgKHdpZHRoICE9PSAwKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHRoaXMuc2NhbGUueCA9IHZhbHVlIC8gd2lkdGg7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdGhpcy5zY2FsZS54ID0gMTtcbiAgICAgICAgICAgIH1cblxuXG4gICAgICAgICAgICB0aGlzLl93aWR0aCA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFRoZSBoZWlnaHQgb2YgdGhlIENvbnRhaW5lciwgc2V0dGluZyB0aGlzIHdpbGwgYWN0dWFsbHkgbW9kaWZ5IHRoZSBzY2FsZSB0byBhY2hpZXZlIHRoZSB2YWx1ZSBzZXRcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5Db250YWluZXIjXG4gICAgICovXG4gICAgaGVpZ2h0OiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuICB0aGlzLnNjYWxlLnkgKiB0aGlzLmdldExvY2FsQm91bmRzKCkuaGVpZ2h0O1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuXG4gICAgICAgICAgICB2YXIgaGVpZ2h0ID0gdGhpcy5nZXRMb2NhbEJvdW5kcygpLmhlaWdodDtcblxuICAgICAgICAgICAgaWYgKGhlaWdodCAhPT0gMClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNjYWxlLnkgPSB2YWx1ZSAvIGhlaWdodCA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdGhpcy5zY2FsZS55ID0gMTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5faGVpZ2h0ID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG59KTtcblxuLyoqXG4gKiBPdmVycmlkYWJsZSBtZXRob2QgdGhhdCBjYW4gYmUgdXNlZCBieSBDb250YWluZXIgc3ViY2xhc3NlcyB3aGVuZXZlciB0aGUgY2hpbGRyZW4gYXJyYXkgaXMgbW9kaWZpZWRcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5Db250YWluZXIucHJvdG90eXBlLm9uQ2hpbGRyZW5DaGFuZ2UgPSBmdW5jdGlvbiAoKSB7fTtcblxuLyoqXG4gKiBBZGRzIGEgY2hpbGQgdG8gdGhlIGNvbnRhaW5lci5cbiAqIFxuICogWW91IGNhbiBhbHNvIGFkZCBtdWx0cGxlIGl0ZW1zIGxpa2Ugc286IG15Q29udGFpbmVyLmFkZENoaWxkKHRoaW5rT25lLCB0aGluZ1R3bywgdGhpbmdUaHJlZSlcbiAqIEBwYXJhbSBjaGlsZCB7UElYSS5EaXNwbGF5T2JqZWN0fSBUaGUgRGlzcGxheU9iamVjdCB0byBhZGQgdG8gdGhlIGNvbnRhaW5lclxuICogQHJldHVybiB7UElYSS5EaXNwbGF5T2JqZWN0fSBUaGUgY2hpbGQgdGhhdCB3YXMgYWRkZWQuXG4gKi9cbkNvbnRhaW5lci5wcm90b3R5cGUuYWRkQ2hpbGQgPSBmdW5jdGlvbiAoY2hpbGQpXG57IFxuICAgIHZhciBhcmd1bWVudHNMZW5ndGggPSBhcmd1bWVudHMubGVuZ3RoO1xuXG4gICAgLy8gaWYgdGhlcmUgaXMgb25seSBvbmUgYXJndW1lbnQgd2UgY2FuIGJ5cGFzcyBsb29waW5nIHRocm91Z2ggdGhlIHRoZW1cbiAgICBpZihhcmd1bWVudHNMZW5ndGggPiAxKVxuICAgIHtcbiAgICAgICAgLy8gbG9vcCB0aHJvdWdoIHRoZSBhcmd1bWVudHMgcHJvcGVydHkgYW5kIGFkZCBhbGwgY2hpbGRyZW5cbiAgICAgICAgLy8gdXNlIGl0IHRoZSByaWdodCB3YXkgKC5sZW5ndGggYW5kIFtpXSkgc28gdGhhdCB0aGlzIGZ1bmN0aW9uIGNhbiBzdGlsbCBiZSBvcHRpbWlzZWQgYnkgSlMgcnVudGltZXNcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcmd1bWVudHNMZW5ndGg7IGkrKylcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5hZGRDaGlsZCggYXJndW1lbnRzW2ldICk7XG4gICAgICAgIH1cbiAgICB9ICAgICBcbiAgICBlbHNlXG4gICAge1xuICAgICAgICAvLyBpZiB0aGUgY2hpbGQgaGFzIGEgcGFyZW50IHRoZW4gbGV0cyByZW1vdmUgaXQgYXMgUGl4aSBvYmplY3RzIGNhbiBvbmx5IGV4aXN0IGluIG9uZSBwbGFjZVxuICAgICAgICBpZiAoY2hpbGQucGFyZW50KVxuICAgICAgICB7XG4gICAgICAgICAgICBjaGlsZC5wYXJlbnQucmVtb3ZlQ2hpbGQoY2hpbGQpO1xuICAgICAgICB9XG5cbiAgICAgICAgY2hpbGQucGFyZW50ID0gdGhpcztcbiAgICAgICAgXG4gICAgICAgIHRoaXMuY2hpbGRyZW4ucHVzaChjaGlsZCk7XG5cbiAgICAgICAgLy8gVE9ETyAtIGxldHMgZWl0aGVyIGRvIGFsbCBjYWxsYmFja3Mgb3IgYWxsIGV2ZW50cy4uIG5vdCBib3RoIVxuICAgICAgICB0aGlzLm9uQ2hpbGRyZW5DaGFuZ2UodGhpcy5jaGlsZHJlbi5sZW5ndGgtMSk7XG4gICAgICAgIGNoaWxkLmVtaXQoJ2FkZGVkJywgdGhpcyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGNoaWxkO1xufTtcblxuLyoqXG4gKiBBZGRzIGEgY2hpbGQgdG8gdGhlIGNvbnRhaW5lciBhdCBhIHNwZWNpZmllZCBpbmRleC4gSWYgdGhlIGluZGV4IGlzIG91dCBvZiBib3VuZHMgYW4gZXJyb3Igd2lsbCBiZSB0aHJvd25cbiAqXG4gKiBAcGFyYW0gY2hpbGQge1BJWEkuRGlzcGxheU9iamVjdH0gVGhlIGNoaWxkIHRvIGFkZFxuICogQHBhcmFtIGluZGV4IHtudW1iZXJ9IFRoZSBpbmRleCB0byBwbGFjZSB0aGUgY2hpbGQgaW5cbiAqIEByZXR1cm4ge1BJWEkuRGlzcGxheU9iamVjdH0gVGhlIGNoaWxkIHRoYXQgd2FzIGFkZGVkLlxuICovXG5Db250YWluZXIucHJvdG90eXBlLmFkZENoaWxkQXQgPSBmdW5jdGlvbiAoY2hpbGQsIGluZGV4KVxue1xuICAgIGlmIChpbmRleCA+PSAwICYmIGluZGV4IDw9IHRoaXMuY2hpbGRyZW4ubGVuZ3RoKVxuICAgIHtcbiAgICAgICAgaWYgKGNoaWxkLnBhcmVudClcbiAgICAgICAge1xuICAgICAgICAgICAgY2hpbGQucGFyZW50LnJlbW92ZUNoaWxkKGNoaWxkKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNoaWxkLnBhcmVudCA9IHRoaXM7XG5cbiAgICAgICAgdGhpcy5jaGlsZHJlbi5zcGxpY2UoaW5kZXgsIDAsIGNoaWxkKTtcblxuICAgICAgICAvLyBUT0RPIC0gbGV0cyBlaXRoZXIgZG8gYWxsIGNhbGxiYWNrcyBvciBhbGwgZXZlbnRzLi4gbm90IGJvdGghXG4gICAgICAgIHRoaXMub25DaGlsZHJlbkNoYW5nZShpbmRleCk7XG4gICAgICAgIGNoaWxkLmVtaXQoJ2FkZGVkJywgdGhpcyk7XG5cbiAgICAgICAgcmV0dXJuIGNoaWxkO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoY2hpbGQgKyAnYWRkQ2hpbGRBdDogVGhlIGluZGV4ICcrIGluZGV4ICsnIHN1cHBsaWVkIGlzIG91dCBvZiBib3VuZHMgJyArIHRoaXMuY2hpbGRyZW4ubGVuZ3RoKTtcbiAgICB9XG59O1xuXG4vKipcbiAqIFN3YXBzIHRoZSBwb3NpdGlvbiBvZiAyIERpc3BsYXkgT2JqZWN0cyB3aXRoaW4gdGhpcyBjb250YWluZXIuXG4gKlxuICogQHBhcmFtIGNoaWxkIHtQSVhJLkRpc3BsYXlPYmplY3R9XG4gKiBAcGFyYW0gY2hpbGQyIHtQSVhJLkRpc3BsYXlPYmplY3R9XG4gKi9cbkNvbnRhaW5lci5wcm90b3R5cGUuc3dhcENoaWxkcmVuID0gZnVuY3Rpb24gKGNoaWxkLCBjaGlsZDIpXG57XG4gICAgaWYgKGNoaWxkID09PSBjaGlsZDIpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFyIGluZGV4MSA9IHRoaXMuZ2V0Q2hpbGRJbmRleChjaGlsZCk7XG4gICAgdmFyIGluZGV4MiA9IHRoaXMuZ2V0Q2hpbGRJbmRleChjaGlsZDIpO1xuXG4gICAgaWYgKGluZGV4MSA8IDAgfHwgaW5kZXgyIDwgMClcbiAgICB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignc3dhcENoaWxkcmVuOiBCb3RoIHRoZSBzdXBwbGllZCBEaXNwbGF5T2JqZWN0cyBtdXN0IGJlIGNoaWxkcmVuIG9mIHRoZSBjYWxsZXIuJyk7XG4gICAgfVxuXG4gICAgdGhpcy5jaGlsZHJlbltpbmRleDFdID0gY2hpbGQyO1xuICAgIHRoaXMuY2hpbGRyZW5baW5kZXgyXSA9IGNoaWxkO1xuICAgIHRoaXMub25DaGlsZHJlbkNoYW5nZShpbmRleDEgPCBpbmRleDIgPyBpbmRleDEgOiBpbmRleDIpO1xufTtcblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBpbmRleCBwb3NpdGlvbiBvZiBhIGNoaWxkIERpc3BsYXlPYmplY3QgaW5zdGFuY2VcbiAqXG4gKiBAcGFyYW0gY2hpbGQge1BJWEkuRGlzcGxheU9iamVjdH0gVGhlIERpc3BsYXlPYmplY3QgaW5zdGFuY2UgdG8gaWRlbnRpZnlcbiAqIEByZXR1cm4ge251bWJlcn0gVGhlIGluZGV4IHBvc2l0aW9uIG9mIHRoZSBjaGlsZCBkaXNwbGF5IG9iamVjdCB0byBpZGVudGlmeVxuICovXG5Db250YWluZXIucHJvdG90eXBlLmdldENoaWxkSW5kZXggPSBmdW5jdGlvbiAoY2hpbGQpXG57XG4gICAgdmFyIGluZGV4ID0gdGhpcy5jaGlsZHJlbi5pbmRleE9mKGNoaWxkKTtcblxuICAgIGlmIChpbmRleCA9PT0gLTEpXG4gICAge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RoZSBzdXBwbGllZCBEaXNwbGF5T2JqZWN0IG11c3QgYmUgYSBjaGlsZCBvZiB0aGUgY2FsbGVyJyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGluZGV4O1xufTtcblxuLyoqXG4gKiBDaGFuZ2VzIHRoZSBwb3NpdGlvbiBvZiBhbiBleGlzdGluZyBjaGlsZCBpbiB0aGUgZGlzcGxheSBvYmplY3QgY29udGFpbmVyXG4gKlxuICogQHBhcmFtIGNoaWxkIHtQSVhJLkRpc3BsYXlPYmplY3R9IFRoZSBjaGlsZCBEaXNwbGF5T2JqZWN0IGluc3RhbmNlIGZvciB3aGljaCB5b3Ugd2FudCB0byBjaGFuZ2UgdGhlIGluZGV4IG51bWJlclxuICogQHBhcmFtIGluZGV4IHtudW1iZXJ9IFRoZSByZXN1bHRpbmcgaW5kZXggbnVtYmVyIGZvciB0aGUgY2hpbGQgZGlzcGxheSBvYmplY3RcbiAqL1xuQ29udGFpbmVyLnByb3RvdHlwZS5zZXRDaGlsZEluZGV4ID0gZnVuY3Rpb24gKGNoaWxkLCBpbmRleClcbntcbiAgICBpZiAoaW5kZXggPCAwIHx8IGluZGV4ID49IHRoaXMuY2hpbGRyZW4ubGVuZ3RoKVxuICAgIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdUaGUgc3VwcGxpZWQgaW5kZXggaXMgb3V0IG9mIGJvdW5kcycpO1xuICAgIH1cblxuICAgIHZhciBjdXJyZW50SW5kZXggPSB0aGlzLmdldENoaWxkSW5kZXgoY2hpbGQpO1xuXG4gICAgdXRpbHMucmVtb3ZlSXRlbXModGhpcy5jaGlsZHJlbiwgY3VycmVudEluZGV4LCAxKTsgLy8gcmVtb3ZlIGZyb20gb2xkIHBvc2l0aW9uXG4gICAgdGhpcy5jaGlsZHJlbi5zcGxpY2UoaW5kZXgsIDAsIGNoaWxkKTsgLy9hZGQgYXQgbmV3IHBvc2l0aW9uXG4gICAgdGhpcy5vbkNoaWxkcmVuQ2hhbmdlKGluZGV4KTtcbn07XG5cbi8qKlxuICogUmV0dXJucyB0aGUgY2hpbGQgYXQgdGhlIHNwZWNpZmllZCBpbmRleFxuICpcbiAqIEBwYXJhbSBpbmRleCB7bnVtYmVyfSBUaGUgaW5kZXggdG8gZ2V0IHRoZSBjaGlsZCBhdFxuICogQHJldHVybiB7UElYSS5EaXNwbGF5T2JqZWN0fSBUaGUgY2hpbGQgYXQgdGhlIGdpdmVuIGluZGV4LCBpZiBhbnkuXG4gKi9cbkNvbnRhaW5lci5wcm90b3R5cGUuZ2V0Q2hpbGRBdCA9IGZ1bmN0aW9uIChpbmRleClcbntcbiAgICBpZiAoaW5kZXggPCAwIHx8IGluZGV4ID49IHRoaXMuY2hpbGRyZW4ubGVuZ3RoKVxuICAgIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdnZXRDaGlsZEF0OiBTdXBwbGllZCBpbmRleCAnICsgaW5kZXggKyAnIGRvZXMgbm90IGV4aXN0IGluIHRoZSBjaGlsZCBsaXN0LCBvciB0aGUgc3VwcGxpZWQgRGlzcGxheU9iamVjdCBpcyBub3QgYSBjaGlsZCBvZiB0aGUgY2FsbGVyJyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuY2hpbGRyZW5baW5kZXhdO1xufTtcblxuLyoqXG4gKiBSZW1vdmVzIGEgY2hpbGQgZnJvbSB0aGUgY29udGFpbmVyLlxuICpcbiAqIEBwYXJhbSBjaGlsZCB7UElYSS5EaXNwbGF5T2JqZWN0fSBUaGUgRGlzcGxheU9iamVjdCB0byByZW1vdmVcbiAqIEByZXR1cm4ge1BJWEkuRGlzcGxheU9iamVjdH0gVGhlIGNoaWxkIHRoYXQgd2FzIHJlbW92ZWQuXG4gKi9cbkNvbnRhaW5lci5wcm90b3R5cGUucmVtb3ZlQ2hpbGQgPSBmdW5jdGlvbiAoY2hpbGQpXG57XG4gICAgdmFyIGFyZ3VtZW50c0xlbmd0aCA9IGFyZ3VtZW50cy5sZW5ndGg7XG5cbiAgICAvLyBpZiB0aGVyZSBpcyBvbmx5IG9uZSBhcmd1bWVudCB3ZSBjYW4gYnlwYXNzIGxvb3BpbmcgdGhyb3VnaCB0aGUgdGhlbVxuICAgIGlmKGFyZ3VtZW50c0xlbmd0aCA+IDEpXG4gICAge1xuICAgICAgICAvLyBsb29wIHRocm91Z2ggdGhlIGFyZ3VtZW50cyBwcm9wZXJ0eSBhbmQgYWRkIGFsbCBjaGlsZHJlblxuICAgICAgICAvLyB1c2UgaXQgdGhlIHJpZ2h0IHdheSAoLmxlbmd0aCBhbmQgW2ldKSBzbyB0aGF0IHRoaXMgZnVuY3Rpb24gY2FuIHN0aWxsIGJlIG9wdGltaXNlZCBieSBKUyBydW50aW1lc1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFyZ3VtZW50c0xlbmd0aDsgaSsrKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnJlbW92ZUNoaWxkKCBhcmd1bWVudHNbaV0gKTtcbiAgICAgICAgfVxuICAgIH0gICAgIFxuICAgIGVsc2VcbiAgICB7ICAgXG4gICAgICAgIHZhciBpbmRleCA9IHRoaXMuY2hpbGRyZW4uaW5kZXhPZihjaGlsZCk7XG5cbiAgICAgICAgaWYgKGluZGV4ID09PSAtMSlcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY2hpbGQucGFyZW50ID0gbnVsbDtcbiAgICAgICAgdXRpbHMucmVtb3ZlSXRlbXModGhpcy5jaGlsZHJlbiwgaW5kZXgsIDEpO1xuXG4gICAgICAgIC8vIFRPRE8gLSBsZXRzIGVpdGhlciBkbyBhbGwgY2FsbGJhY2tzIG9yIGFsbCBldmVudHMuLiBub3QgYm90aCFcbiAgICAgICAgdGhpcy5vbkNoaWxkcmVuQ2hhbmdlKGluZGV4KTtcbiAgICAgICAgY2hpbGQuZW1pdCgncmVtb3ZlZCcsIHRoaXMpO1xuICAgIH1cblxuICAgIHJldHVybiBjaGlsZDtcbn07XG5cbi8qKlxuICogUmVtb3ZlcyBhIGNoaWxkIGZyb20gdGhlIHNwZWNpZmllZCBpbmRleCBwb3NpdGlvbi5cbiAqXG4gKiBAcGFyYW0gaW5kZXgge251bWJlcn0gVGhlIGluZGV4IHRvIGdldCB0aGUgY2hpbGQgZnJvbVxuICogQHJldHVybiB7UElYSS5EaXNwbGF5T2JqZWN0fSBUaGUgY2hpbGQgdGhhdCB3YXMgcmVtb3ZlZC5cbiAqL1xuQ29udGFpbmVyLnByb3RvdHlwZS5yZW1vdmVDaGlsZEF0ID0gZnVuY3Rpb24gKGluZGV4KVxue1xuICAgIHZhciBjaGlsZCA9IHRoaXMuZ2V0Q2hpbGRBdChpbmRleCk7XG5cbiAgICBjaGlsZC5wYXJlbnQgPSBudWxsO1xuICAgIHV0aWxzLnJlbW92ZUl0ZW1zKHRoaXMuY2hpbGRyZW4sIGluZGV4LCAxKTtcblxuICAgIC8vIFRPRE8gLSBsZXRzIGVpdGhlciBkbyBhbGwgY2FsbGJhY2tzIG9yIGFsbCBldmVudHMuLiBub3QgYm90aCFcbiAgICB0aGlzLm9uQ2hpbGRyZW5DaGFuZ2UoaW5kZXgpO1xuICAgIGNoaWxkLmVtaXQoJ3JlbW92ZWQnLCB0aGlzKTtcblxuICAgIHJldHVybiBjaGlsZDtcbn07XG5cbi8qKlxuICogUmVtb3ZlcyBhbGwgY2hpbGRyZW4gZnJvbSB0aGlzIGNvbnRhaW5lciB0aGF0IGFyZSB3aXRoaW4gdGhlIGJlZ2luIGFuZCBlbmQgaW5kZXhlcy5cbiAqXG4gKiBAcGFyYW0gYmVnaW5JbmRleCB7bnVtYmVyfSBUaGUgYmVnaW5uaW5nIHBvc2l0aW9uLiBEZWZhdWx0IHZhbHVlIGlzIDAuXG4gKiBAcGFyYW0gZW5kSW5kZXgge251bWJlcn0gVGhlIGVuZGluZyBwb3NpdGlvbi4gRGVmYXVsdCB2YWx1ZSBpcyBzaXplIG9mIHRoZSBjb250YWluZXIuXG4gKi9cbkNvbnRhaW5lci5wcm90b3R5cGUucmVtb3ZlQ2hpbGRyZW4gPSBmdW5jdGlvbiAoYmVnaW5JbmRleCwgZW5kSW5kZXgpXG57XG4gICAgdmFyIGJlZ2luID0gYmVnaW5JbmRleCB8fCAwO1xuICAgIHZhciBlbmQgPSB0eXBlb2YgZW5kSW5kZXggPT09ICdudW1iZXInID8gZW5kSW5kZXggOiB0aGlzLmNoaWxkcmVuLmxlbmd0aDtcbiAgICB2YXIgcmFuZ2UgPSBlbmQgLSBiZWdpbjtcbiAgICB2YXIgcmVtb3ZlZCwgaTtcblxuICAgIGlmIChyYW5nZSA+IDAgJiYgcmFuZ2UgPD0gZW5kKVxuICAgIHtcbiAgICAgICAgcmVtb3ZlZCA9IHRoaXMuY2hpbGRyZW4uc3BsaWNlKGJlZ2luLCByYW5nZSk7XG5cbiAgICAgICAgZm9yIChpID0gMDsgaSA8IHJlbW92ZWQubGVuZ3RoOyArK2kpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJlbW92ZWRbaV0ucGFyZW50ID0gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMub25DaGlsZHJlbkNoYW5nZShiZWdpbkluZGV4KTtcblxuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgcmVtb3ZlZC5sZW5ndGg7ICsraSlcbiAgICAgICAge1xuICAgICAgICAgICAgcmVtb3ZlZFtpXS5lbWl0KCdyZW1vdmVkJywgdGhpcyk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gcmVtb3ZlZDtcbiAgICB9XG4gICAgZWxzZSBpZiAocmFuZ2UgPT09IDAgJiYgdGhpcy5jaGlsZHJlbi5sZW5ndGggPT09IDApXG4gICAge1xuICAgICAgICByZXR1cm4gW107XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdyZW1vdmVDaGlsZHJlbjogbnVtZXJpYyB2YWx1ZXMgYXJlIG91dHNpZGUgdGhlIGFjY2VwdGFibGUgcmFuZ2UuJyk7XG4gICAgfVxufTtcblxuLyoqXG4gKiBVc2VmdWwgZnVuY3Rpb24gdGhhdCByZXR1cm5zIGEgdGV4dHVyZSBvZiB0aGUgZGlzcGxheSBvYmplY3QgdGhhdCBjYW4gdGhlbiBiZSB1c2VkIHRvIGNyZWF0ZSBzcHJpdGVzXG4gKiBUaGlzIGNhbiBiZSBxdWl0ZSB1c2VmdWwgaWYgeW91ciBkaXNwbGF5T2JqZWN0IGlzIHN0YXRpYyAvIGNvbXBsaWNhdGVkIGFuZCBuZWVkcyB0byBiZSByZXVzZWQgbXVsdGlwbGUgdGltZXMuXG4gKlxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLkNhbnZhc1JlbmRlcmVyfFBJWEkuV2ViR0xSZW5kZXJlcn0gVGhlIHJlbmRlcmVyIHVzZWQgdG8gZ2VuZXJhdGUgdGhlIHRleHR1cmUuXG4gKiBAcGFyYW0gcmVzb2x1dGlvbiB7bnVtYmVyfSBUaGUgcmVzb2x1dGlvbiBvZiB0aGUgdGV4dHVyZSBiZWluZyBnZW5lcmF0ZWRcbiAqIEBwYXJhbSBzY2FsZU1vZGUge251bWJlcn0gU2VlIHtAbGluayBQSVhJLlNDQUxFX01PREVTfSBmb3IgcG9zc2libGUgdmFsdWVzXG4gKiBAcmV0dXJuIHtQSVhJLlRleHR1cmV9IGEgdGV4dHVyZSBvZiB0aGUgZGlzcGxheSBvYmplY3RcbiAqL1xuQ29udGFpbmVyLnByb3RvdHlwZS5nZW5lcmF0ZVRleHR1cmUgPSBmdW5jdGlvbiAocmVuZGVyZXIsIHJlc29sdXRpb24sIHNjYWxlTW9kZSlcbntcbiAgICB2YXIgYm91bmRzID0gdGhpcy5nZXRMb2NhbEJvdW5kcygpO1xuXG4gICAgdmFyIHJlbmRlclRleHR1cmUgPSBuZXcgUmVuZGVyVGV4dHVyZShyZW5kZXJlciwgYm91bmRzLndpZHRoIHwgMCwgYm91bmRzLmhlaWdodCB8IDAsIHNjYWxlTW9kZSwgcmVzb2x1dGlvbik7XG5cbiAgICBfdGVtcE1hdHJpeC50eCA9IC1ib3VuZHMueDtcbiAgICBfdGVtcE1hdHJpeC50eSA9IC1ib3VuZHMueTtcblxuICAgIHJlbmRlclRleHR1cmUucmVuZGVyKHRoaXMsIF90ZW1wTWF0cml4KTtcblxuICAgIHJldHVybiByZW5kZXJUZXh0dXJlO1xufTtcblxuLypcbiAqIFVwZGF0ZXMgdGhlIHRyYW5zZm9ybSBvbiBhbGwgY2hpbGRyZW4gb2YgdGhpcyBjb250YWluZXIgZm9yIHJlbmRlcmluZ1xuICpcbiAqIEBwcml2YXRlXG4gKi9cbkNvbnRhaW5lci5wcm90b3R5cGUudXBkYXRlVHJhbnNmb3JtID0gZnVuY3Rpb24gKClcbntcbiAgICBpZiAoIXRoaXMudmlzaWJsZSlcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLmRpc3BsYXlPYmplY3RVcGRhdGVUcmFuc2Zvcm0oKTtcblxuICAgIGZvciAodmFyIGkgPSAwLCBqID0gdGhpcy5jaGlsZHJlbi5sZW5ndGg7IGkgPCBqOyArK2kpXG4gICAge1xuICAgICAgICB0aGlzLmNoaWxkcmVuW2ldLnVwZGF0ZVRyYW5zZm9ybSgpO1xuICAgIH1cblxuICAgIHRoaXMuZGlydHlUcmFuc2Zvcm0gPSBmYWxzZTtcbn07XG5cbi8vIHBlcmZvcm1hbmNlIGluY3JlYXNlIHRvIGF2b2lkIHVzaW5nIGNhbGwuLiAoMTB4IGZhc3RlcilcbkNvbnRhaW5lci5wcm90b3R5cGUuY29udGFpbmVyVXBkYXRlVHJhbnNmb3JtID0gQ29udGFpbmVyLnByb3RvdHlwZS51cGRhdGVUcmFuc2Zvcm07XG5cbi8qKlxuICogUmV0cmlldmVzIHRoZSBib3VuZHMgb2YgdGhlIENvbnRhaW5lciBhcyBhIHJlY3RhbmdsZS4gVGhlIGJvdW5kcyBjYWxjdWxhdGlvbiB0YWtlcyBhbGwgdmlzaWJsZSBjaGlsZHJlbiBpbnRvIGNvbnNpZGVyYXRpb24uXG4gKlxuICogQHJldHVybiB7UElYSS5SZWN0YW5nbGV9IFRoZSByZWN0YW5ndWxhciBib3VuZGluZyBhcmVhXG4gKi9cbkNvbnRhaW5lci5wcm90b3R5cGUuZ2V0Qm91bmRzID0gZnVuY3Rpb24gKClcbntcbiAgICBpZighdGhpcy5fY3VycmVudEJvdW5kcylcbiAgICB7XG5cbiAgICAgICAgaWYgKHRoaXMuY2hpbGRyZW4ubGVuZ3RoID09PSAwKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gbWF0aC5SZWN0YW5nbGUuRU1QVFk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBUT0RPIHRoZSBib3VuZHMgaGF2ZSBhbHJlYWR5IGJlZW4gY2FsY3VsYXRlZCB0aGlzIHJlbmRlciBzZXNzaW9uIHNvIHJldHVybiB3aGF0IHdlIGhhdmVcblxuICAgICAgICB2YXIgbWluWCA9IEluZmluaXR5O1xuICAgICAgICB2YXIgbWluWSA9IEluZmluaXR5O1xuXG4gICAgICAgIHZhciBtYXhYID0gLUluZmluaXR5O1xuICAgICAgICB2YXIgbWF4WSA9IC1JbmZpbml0eTtcblxuICAgICAgICB2YXIgY2hpbGRCb3VuZHM7XG4gICAgICAgIHZhciBjaGlsZE1heFg7XG4gICAgICAgIHZhciBjaGlsZE1heFk7XG5cbiAgICAgICAgdmFyIGNoaWxkVmlzaWJsZSA9IGZhbHNlO1xuXG4gICAgICAgIGZvciAodmFyIGkgPSAwLCBqID0gdGhpcy5jaGlsZHJlbi5sZW5ndGg7IGkgPCBqOyArK2kpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHZhciBjaGlsZCA9IHRoaXMuY2hpbGRyZW5baV07XG5cbiAgICAgICAgICAgIGlmICghY2hpbGQudmlzaWJsZSlcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY2hpbGRWaXNpYmxlID0gdHJ1ZTtcblxuICAgICAgICAgICAgY2hpbGRCb3VuZHMgPSB0aGlzLmNoaWxkcmVuW2ldLmdldEJvdW5kcygpO1xuXG4gICAgICAgICAgICBtaW5YID0gbWluWCA8IGNoaWxkQm91bmRzLnggPyBtaW5YIDogY2hpbGRCb3VuZHMueDtcbiAgICAgICAgICAgIG1pblkgPSBtaW5ZIDwgY2hpbGRCb3VuZHMueSA/IG1pblkgOiBjaGlsZEJvdW5kcy55O1xuXG4gICAgICAgICAgICBjaGlsZE1heFggPSBjaGlsZEJvdW5kcy53aWR0aCArIGNoaWxkQm91bmRzLng7XG4gICAgICAgICAgICBjaGlsZE1heFkgPSBjaGlsZEJvdW5kcy5oZWlnaHQgKyBjaGlsZEJvdW5kcy55O1xuXG4gICAgICAgICAgICBtYXhYID0gbWF4WCA+IGNoaWxkTWF4WCA/IG1heFggOiBjaGlsZE1heFg7XG4gICAgICAgICAgICBtYXhZID0gbWF4WSA+IGNoaWxkTWF4WSA/IG1heFkgOiBjaGlsZE1heFk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIWNoaWxkVmlzaWJsZSlcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIG1hdGguUmVjdGFuZ2xlLkVNUFRZO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGJvdW5kcyA9IHRoaXMuX2JvdW5kcztcblxuICAgICAgICBib3VuZHMueCA9IG1pblg7XG4gICAgICAgIGJvdW5kcy55ID0gbWluWTtcbiAgICAgICAgYm91bmRzLndpZHRoID0gbWF4WCAtIG1pblg7XG4gICAgICAgIGJvdW5kcy5oZWlnaHQgPSBtYXhZIC0gbWluWTtcblxuICAgICAgICB0aGlzLl9jdXJyZW50Qm91bmRzID0gYm91bmRzO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLl9jdXJyZW50Qm91bmRzO1xufTtcblxuQ29udGFpbmVyLnByb3RvdHlwZS5jb250YWluZXJHZXRCb3VuZHMgPSBDb250YWluZXIucHJvdG90eXBlLmdldEJvdW5kcztcblxuLyoqXG4gKiBSZXRyaWV2ZXMgdGhlIG5vbi1nbG9iYWwgbG9jYWwgYm91bmRzIG9mIHRoZSBDb250YWluZXIgYXMgYSByZWN0YW5nbGUuXG4gKiBUaGUgY2FsY3VsYXRpb24gdGFrZXMgYWxsIHZpc2libGUgY2hpbGRyZW4gaW50byBjb25zaWRlcmF0aW9uLlxuICpcbiAqIEByZXR1cm4ge1BJWEkuUmVjdGFuZ2xlfSBUaGUgcmVjdGFuZ3VsYXIgYm91bmRpbmcgYXJlYVxuICovXG5Db250YWluZXIucHJvdG90eXBlLmdldExvY2FsQm91bmRzID0gZnVuY3Rpb24gKClcbntcbiAgICB2YXIgbWF0cml4Q2FjaGUgPSB0aGlzLndvcmxkVHJhbnNmb3JtO1xuXG4gICAgdGhpcy53b3JsZFRyYW5zZm9ybSA9IG1hdGguTWF0cml4LklERU5USVRZO1xuXG4gICAgZm9yICh2YXIgaSA9IDAsIGogPSB0aGlzLmNoaWxkcmVuLmxlbmd0aDsgaSA8IGo7ICsraSlcbiAgICB7XG4gICAgICAgIHRoaXMuY2hpbGRyZW5baV0udXBkYXRlVHJhbnNmb3JtKCk7XG4gICAgfVxuXG4gICAgdGhpcy53b3JsZFRyYW5zZm9ybSA9IG1hdHJpeENhY2hlO1xuXG4gICAgdGhpcy5fY3VycmVudEJvdW5kcyA9IG51bGw7XG5cbiAgICByZXR1cm4gdGhpcy5nZXRCb3VuZHMoIG1hdGguTWF0cml4LklERU5USVRZICk7XG59O1xuXG4vKipcbiAqIFJlbmRlcnMgdGhlIG9iamVjdCB1c2luZyB0aGUgV2ViR0wgcmVuZGVyZXJcbiAqXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcn0gVGhlIHJlbmRlcmVyXG4gKi9cbkNvbnRhaW5lci5wcm90b3R5cGUucmVuZGVyV2ViR0wgPSBmdW5jdGlvbiAocmVuZGVyZXIpXG57XG5cbiAgICAvLyBpZiB0aGUgb2JqZWN0IGlzIG5vdCB2aXNpYmxlIG9yIHRoZSBhbHBoYSBpcyAwIHRoZW4gbm8gbmVlZCB0byByZW5kZXIgdGhpcyBlbGVtZW50XG4gICAgaWYgKCF0aGlzLnZpc2libGUgfHwgdGhpcy53b3JsZEFscGhhIDw9IDAgfHwgIXRoaXMucmVuZGVyYWJsZSlcbiAgICB7XG4gICAgICBcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHZhciBpLCBqO1xuXG4gICAgLy8gZG8gYSBxdWljayBjaGVjayB0byBzZWUgaWYgdGhpcyBlbGVtZW50IGhhcyBhIG1hc2sgb3IgYSBmaWx0ZXIuXG4gICAgaWYgKHRoaXMuX21hc2sgfHwgdGhpcy5fZmlsdGVycylcbiAgICB7XG4gICAgICAgIHJlbmRlcmVyLmN1cnJlbnRSZW5kZXJlci5mbHVzaCgpO1xuXG4gICAgICAgIC8vIHB1c2ggZmlsdGVyIGZpcnN0IGFzIHdlIG5lZWQgdG8gZW5zdXJlIHRoZSBzdGVuY2lsIGJ1ZmZlciBpcyBjb3JyZWN0IGZvciBhbnkgbWFza2luZ1xuICAgICAgICBpZiAodGhpcy5fZmlsdGVycyAmJiB0aGlzLl9maWx0ZXJzLmxlbmd0aClcbiAgICAgICAge1xuICAgICAgICAgICAgcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5wdXNoRmlsdGVyKHRoaXMsIHRoaXMuX2ZpbHRlcnMpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuX21hc2spXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJlbmRlcmVyLm1hc2tNYW5hZ2VyLnB1c2hNYXNrKHRoaXMsIHRoaXMuX21hc2spO1xuICAgICAgICB9XG5cbiAgICAgICAgcmVuZGVyZXIuY3VycmVudFJlbmRlcmVyLnN0YXJ0KCk7XG5cbiAgICAgICAgLy8gYWRkIHRoaXMgb2JqZWN0IHRvIHRoZSBiYXRjaCwgb25seSByZW5kZXJlZCBpZiBpdCBoYXMgYSB0ZXh0dXJlLlxuICAgICAgICB0aGlzLl9yZW5kZXJXZWJHTChyZW5kZXJlcik7XG5cbiAgICAgICAgLy8gbm93IGxvb3AgdGhyb3VnaCB0aGUgY2hpbGRyZW4gYW5kIG1ha2Ugc3VyZSB0aGV5IGdldCByZW5kZXJlZFxuICAgICAgICBmb3IgKGkgPSAwLCBqID0gdGhpcy5jaGlsZHJlbi5sZW5ndGg7IGkgPCBqOyBpKyspXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuY2hpbGRyZW5baV0ucmVuZGVyV2ViR0wocmVuZGVyZXIpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmVuZGVyZXIuY3VycmVudFJlbmRlcmVyLmZsdXNoKCk7XG5cbiAgICAgICAgaWYgKHRoaXMuX21hc2spXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJlbmRlcmVyLm1hc2tNYW5hZ2VyLnBvcE1hc2sodGhpcywgdGhpcy5fbWFzayk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5fZmlsdGVycylcbiAgICAgICAge1xuICAgICAgICAgICAgcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5wb3BGaWx0ZXIoKTtcblxuICAgICAgICB9XG4gICAgICAgIHJlbmRlcmVyLmN1cnJlbnRSZW5kZXJlci5zdGFydCgpO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICB0aGlzLl9yZW5kZXJXZWJHTChyZW5kZXJlcik7XG5cbiAgICAgICAgLy8gc2ltcGxlIHJlbmRlciBjaGlsZHJlbiFcbiAgICAgICAgZm9yIChpID0gMCwgaiA9IHRoaXMuY2hpbGRyZW4ubGVuZ3RoOyBpIDwgajsgKytpKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmNoaWxkcmVuW2ldLnJlbmRlcldlYkdMKHJlbmRlcmVyKTtcbiAgICAgICAgfVxuICAgIH1cbn07XG5cbi8qKlxuICogVG8gYmUgb3ZlcnJpZGRlbiBieSB0aGUgc3ViY2xhc3NcbiAqXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcn0gVGhlIHJlbmRlcmVyXG4gKiBAcHJpdmF0ZVxuICovXG5Db250YWluZXIucHJvdG90eXBlLl9yZW5kZXJXZWJHTCA9IGZ1bmN0aW9uIChyZW5kZXJlcikgLy8ganNoaW50IHVudXNlZDpmYWxzZVxue1xuICAgIC8vIHRoaXMgaXMgd2hlcmUgY29udGVudCBpdHNlbGYgZ2V0cyByZW5kZXJlZC4uLlxufTtcblxuLyoqXG4gKiBUbyBiZSBvdmVycmlkZGVuIGJ5IHRoZSBzdWJjbGFzc1xuICpcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5DYW52YXNSZW5kZXJlcn0gVGhlIHJlbmRlcmVyXG4gKiBAcHJpdmF0ZVxuICovXG5Db250YWluZXIucHJvdG90eXBlLl9yZW5kZXJDYW52YXMgPSBmdW5jdGlvbiAocmVuZGVyZXIpIC8vIGpzaGludCB1bnVzZWQ6ZmFsc2VcbntcbiAgICAvLyB0aGlzIGlzIHdoZXJlIGNvbnRlbnQgaXRzZWxmIGdldHMgcmVuZGVyZWQuLi5cbn07XG5cblxuLyoqXG4gKiBSZW5kZXJzIHRoZSBvYmplY3QgdXNpbmcgdGhlIENhbnZhcyByZW5kZXJlclxuICpcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5DYW52YXNSZW5kZXJlcn0gVGhlIHJlbmRlcmVyXG4gKi9cbkNvbnRhaW5lci5wcm90b3R5cGUucmVuZGVyQ2FudmFzID0gZnVuY3Rpb24gKHJlbmRlcmVyKVxue1xuICAgIC8vIGlmIG5vdCB2aXNpYmxlIG9yIHRoZSBhbHBoYSBpcyAwIHRoZW4gbm8gbmVlZCB0byByZW5kZXIgdGhpc1xuICAgIGlmICghdGhpcy52aXNpYmxlIHx8IHRoaXMuYWxwaGEgPD0gMCB8fCAhdGhpcy5yZW5kZXJhYmxlKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICh0aGlzLl9tYXNrKVxuICAgIHtcbiAgICAgICAgcmVuZGVyZXIubWFza01hbmFnZXIucHVzaE1hc2sodGhpcy5fbWFzaywgcmVuZGVyZXIpO1xuICAgIH1cblxuICAgIHRoaXMuX3JlbmRlckNhbnZhcyhyZW5kZXJlcik7XG4gICAgZm9yICh2YXIgaSA9IDAsIGogPSB0aGlzLmNoaWxkcmVuLmxlbmd0aDsgaSA8IGo7ICsraSlcbiAgICB7XG4gICAgICAgIHRoaXMuY2hpbGRyZW5baV0ucmVuZGVyQ2FudmFzKHJlbmRlcmVyKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5fbWFzaylcbiAgICB7XG4gICAgICAgIHJlbmRlcmVyLm1hc2tNYW5hZ2VyLnBvcE1hc2socmVuZGVyZXIpO1xuICAgIH1cbn07XG5cbi8qKlxuICogRGVzdHJveXMgdGhlIGNvbnRhaW5lclxuICogQHBhcmFtIFtkZXN0cm95Q2hpbGRyZW49ZmFsc2VdIHtib29sZWFufSBpZiBzZXQgdG8gdHJ1ZSwgYWxsIHRoZSBjaGlsZHJlbiB3aWxsIGhhdmUgdGhlaXIgZGVzdHJveSBtZXRob2QgY2FsbGVkIGFzIHdlbGxcbiAqL1xuQ29udGFpbmVyLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKGRlc3Ryb3lDaGlsZHJlbilcbntcbiAgICBEaXNwbGF5T2JqZWN0LnByb3RvdHlwZS5kZXN0cm95LmNhbGwodGhpcyk7XG5cbiAgICBpZiAoZGVzdHJveUNoaWxkcmVuKVxuICAgIHtcbiAgICAgICAgZm9yICh2YXIgaSA9IDAsIGogPSB0aGlzLmNoaWxkcmVuLmxlbmd0aDsgaSA8IGo7ICsraSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5jaGlsZHJlbltpXS5kZXN0cm95KGRlc3Ryb3lDaGlsZHJlbik7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLnJlbW92ZUNoaWxkcmVuKCk7XG5cbiAgICB0aGlzLmNoaWxkcmVuID0gbnVsbDtcbn07XG4iLCJ2YXIgbWF0aCA9IHJlcXVpcmUoJy4uL21hdGgnKSxcbiAgICBSZW5kZXJUZXh0dXJlID0gcmVxdWlyZSgnLi4vdGV4dHVyZXMvUmVuZGVyVGV4dHVyZScpLFxuICAgIEV2ZW50RW1pdHRlciA9IHJlcXVpcmUoJ2V2ZW50ZW1pdHRlcjMnKSxcbiAgICBDT05TVCA9IHJlcXVpcmUoJy4uL2NvbnN0JyksXG4gICAgX3RlbXBNYXRyaXggPSBuZXcgbWF0aC5NYXRyaXgoKSxcbiAgICBfdGVtcERpc3BsYXlPYmplY3RQYXJlbnQgPSB7d29ybGRUcmFuc2Zvcm06bmV3IG1hdGguTWF0cml4KCksIHdvcmxkQWxwaGE6MSwgY2hpbGRyZW46W119O1xuXG5cbi8qKlxuICogVGhlIGJhc2UgY2xhc3MgZm9yIGFsbCBvYmplY3RzIHRoYXQgYXJlIHJlbmRlcmVkIG9uIHRoZSBzY3JlZW4uXG4gKiBUaGlzIGlzIGFuIGFic3RyYWN0IGNsYXNzIGFuZCBzaG91bGQgbm90IGJlIHVzZWQgb24gaXRzIG93biByYXRoZXIgaXQgc2hvdWxkIGJlIGV4dGVuZGVkLlxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgRXZlbnRFbWl0dGVyXG4gKiBAbWVtYmVyb2YgUElYSVxuICovXG5mdW5jdGlvbiBEaXNwbGF5T2JqZWN0KClcbntcbiAgICBFdmVudEVtaXR0ZXIuY2FsbCh0aGlzKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBjb29yZGluYXRlIG9mIHRoZSBvYmplY3QgcmVsYXRpdmUgdG8gdGhlIGxvY2FsIGNvb3JkaW5hdGVzIG9mIHRoZSBwYXJlbnQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlBvaW50fVxuICAgICAqL1xuICAgIHRoaXMucG9zaXRpb24gPSBuZXcgbWF0aC5Qb2ludCgpO1xuICAgIHRoaXMuX3Bvc2l0aW9uID0gbmV3IENhY2hlUG9pbnQodGhpcyk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgc2NhbGUgZmFjdG9yIG9mIHRoZSBvYmplY3QuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlBvaW50fVxuICAgICAqL1xuICAgIHRoaXMuc2NhbGUgPSBuZXcgbWF0aC5Qb2ludCgxLCAxKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBwaXZvdCBwb2ludCBvZiB0aGUgZGlzcGxheU9iamVjdCB0aGF0IGl0IHJvdGF0ZXMgYXJvdW5kXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlBvaW50fVxuICAgICAqL1xuICAgIHRoaXMucGl2b3QgPSBuZXcgbWF0aC5Qb2ludCgwLCAwKTtcblxuXG4gICAgLyoqXG4gICAgICogVGhlIHNrZXcgZmFjdG9yIGZvciB0aGUgb2JqZWN0IGluIHJhZGlhbnMuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlBvaW50fVxuICAgICAqL1xuICAgIHRoaXMuc2tldyA9IG5ldyBtYXRoLlBvaW50KDAsIDApO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHJvdGF0aW9uIG9mIHRoZSBvYmplY3QgaW4gcmFkaWFucy5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLl9yb3RhdGlvbiA9IDA7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgb3BhY2l0eSBvZiB0aGUgb2JqZWN0LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMuYWxwaGEgPSAxO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHZpc2liaWxpdHkgb2YgdGhlIG9iamVjdC4gSWYgZmFsc2UgdGhlIG9iamVjdCB3aWxsIG5vdCBiZSBkcmF3biwgYW5kXG4gICAgICogdGhlIHVwZGF0ZVRyYW5zZm9ybSBmdW5jdGlvbiB3aWxsIG5vdCBiZSBjYWxsZWQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqL1xuICAgIHRoaXMudmlzaWJsZSA9IHRydWU7XG5cbiAgICAvKipcbiAgICAgKiBDYW4gdGhpcyBvYmplY3QgYmUgcmVuZGVyZWQsIGlmIGZhbHNlIHRoZSBvYmplY3Qgd2lsbCBub3QgYmUgZHJhd24gYnV0IHRoZSB1cGRhdGVUcmFuc2Zvcm1cbiAgICAgKiBtZXRob2RzIHdpbGwgc3RpbGwgYmUgY2FsbGVkLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKi9cbiAgICB0aGlzLnJlbmRlcmFibGUgPSB0cnVlO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGRpc3BsYXkgb2JqZWN0IGNvbnRhaW5lciB0aGF0IGNvbnRhaW5zIHRoaXMgZGlzcGxheSBvYmplY3QuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLkNvbnRhaW5lcn1cbiAgICAgKiBAcmVhZE9ubHlcbiAgICAgKi9cbiAgICB0aGlzLnBhcmVudCA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgbXVsdGlwbGllZCBhbHBoYSBvZiB0aGUgZGlzcGxheU9iamVjdFxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEByZWFkT25seVxuICAgICAqL1xuICAgIHRoaXMud29ybGRBbHBoYSA9IDE7XG5cbiAgICAvKipcbiAgICAgKiBDdXJyZW50IHRyYW5zZm9ybSBvZiB0aGUgb2JqZWN0IGJhc2VkIG9uIHdvcmxkIChwYXJlbnQpIGZhY3RvcnNcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuTWF0cml4fVxuICAgICAqIEByZWFkT25seVxuICAgICAqL1xuICAgIHRoaXMud29ybGRUcmFuc2Zvcm0gPSBuZXcgbWF0aC5NYXRyaXgoKTtcbiAgICB0aGlzLmxvY2FsVHJhbnNmb3JtID0gbmV3IG1hdGguTWF0cml4KCk7XG5cblxuICAgIC8qKlxuICAgICAqIFRoZSBhcmVhIHRoZSBmaWx0ZXIgaXMgYXBwbGllZCB0by4gVGhpcyBpcyB1c2VkIGFzIG1vcmUgb2YgYW4gb3B0aW1pc2F0aW9uXG4gICAgICogcmF0aGVyIHRoYW4gZmlndXJpbmcgb3V0IHRoZSBkaW1lbnNpb25zIG9mIHRoZSBkaXNwbGF5T2JqZWN0IGVhY2ggZnJhbWUgeW91IGNhbiBzZXQgdGhpcyByZWN0YW5nbGVcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuUmVjdGFuZ2xlfVxuICAgICAqL1xuICAgIHRoaXMuZmlsdGVyQXJlYSA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBjYWNoZWQgc2luIHJvdGF0aW9uXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9zciA9IDA7XG5cbiAgICAvKipcbiAgICAgKiBjYWNoZWQgY29zIHJvdGF0aW9uXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9jciA9IDE7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgb3JpZ2luYWwsIGNhY2hlZCBib3VuZHMgb2YgdGhlIG9iamVjdFxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5SZWN0YW5nbGV9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9ib3VuZHMgPSBuZXcgbWF0aC5SZWN0YW5nbGUoMCwgMCwgMSwgMSk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgbW9zdCB1cC10by1kYXRlIGJvdW5kcyBvZiB0aGUgb2JqZWN0XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlJlY3RhbmdsZX1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX2N1cnJlbnRCb3VuZHMgPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogVGhlIG9yaWdpbmFsLCBjYWNoZWQgbWFzayBvZiB0aGUgb2JqZWN0XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlJlY3RhbmdsZX1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX21hc2sgPSBudWxsO1xuXG4gICAgdGhpcy5kaXJ0eVRyYW5zZm9ybSA9IHRydWU7XG59XG5cbi8vIGNvbnN0cnVjdG9yXG5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoRXZlbnRFbWl0dGVyLnByb3RvdHlwZSk7XG5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IERpc3BsYXlPYmplY3Q7XG5tb2R1bGUuZXhwb3J0cyA9IERpc3BsYXlPYmplY3Q7XG5cbnZhciBDYWNoZVBvaW50ID0gZnVuY3Rpb24oZG9jKXtcbiAgICBcbiAgICB0aGlzLmRvYyA9IGRvYztcblxuICAgIHRoaXMueCA9IDA7XG4gICAgdGhpcy55ID0gMDtcbn1cblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoQ2FjaGVQb2ludC5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBUaGUgcG9zaXRpb24gb2YgdGhlIGRpc3BsYXlPYmplY3Qgb24gdGhlIHggYXhpcyByZWxhdGl2ZSB0byB0aGUgbG9jYWwgY29vcmRpbmF0ZXMgb2YgdGhlIHBhcmVudC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5EaXNwbGF5T2JqZWN0I1xuICAgICAqL1xuICAgIHg6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5kb2MucG9zaXRpb24ueDtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuZG9jLnBvc2l0aW9uLnggPSB2YWx1ZTtcbiAgICAgICAgICAgIHRoaXMuZG9jLmRpcnR5VHJhbnNmb3JtID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICB5OiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZG9jLnBvc2lpdG9uLnk7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmRvYy5wb3NpdGlvbi55ID0gdmFsdWU7XG4gICAgICAgICAgICB0aGlzLmRvYy5kaXJ0eVRyYW5zZm9ybSA9IHRydWU7XG4gICAgICAgIH1cbiAgICB9XG59KTtcblxuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhEaXNwbGF5T2JqZWN0LnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFRoZSBwb3NpdGlvbiBvZiB0aGUgZGlzcGxheU9iamVjdCBvbiB0aGUgeCBheGlzIHJlbGF0aXZlIHRvIHRoZSBsb2NhbCBjb29yZGluYXRlcyBvZiB0aGUgcGFyZW50LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLkRpc3BsYXlPYmplY3QjXG4gICAgICovXG4gICAgeDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnBvc2l0aW9uLng7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnBvc2l0aW9uLnggPSB2YWx1ZTtcbiAgICAgICAgICAgIHRoaXMuZGlydHlUcmFuc2Zvcm0gPSB0cnVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFRoZSBwb3NpdGlvbiBvZiB0aGUgZGlzcGxheU9iamVjdCBvbiB0aGUgeSBheGlzIHJlbGF0aXZlIHRvIHRoZSBsb2NhbCBjb29yZGluYXRlcyBvZiB0aGUgcGFyZW50LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLkRpc3BsYXlPYmplY3QjXG4gICAgICovXG4gICAgeToge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnBvc2l0aW9uLnk7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnBvc2l0aW9uLnkgPSB2YWx1ZTtcbiAgICAgICAgICAgIHRoaXMuZGlydHlUcmFuc2Zvcm0gPSB0cnVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIHNjYWxlWDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnNjYWxlLng7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnNjYWxlLnggPSB2YWx1ZTtcbiAgICAgICAgICAgIHRoaXMuZGlydHlUcmFuc2Zvcm0gPSB0cnVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFRoZSBwb3NpdGlvbiBvZiB0aGUgZGlzcGxheU9iamVjdCBvbiB0aGUgeSBheGlzIHJlbGF0aXZlIHRvIHRoZSBsb2NhbCBjb29yZGluYXRlcyBvZiB0aGUgcGFyZW50LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLkRpc3BsYXlPYmplY3QjXG4gICAgICovXG4gICAgc2NhbGVZOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuc2NhbGUueTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuc2NhbGUueSA9IHZhbHVlO1xuICAgICAgICAgICAgdGhpcy5kaXJ0eVRyYW5zZm9ybSA9IHRydWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgcm90YXRpb246IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fcm90YXRpb247XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLl9yb3RhdGlvbiA9IHZhbHVlO1xuICAgICAgICAgICAgdGhpcy5kaXJ0eVRyYW5zZm9ybSA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLl9zciA9IE1hdGguc2luKHZhbHVlKTtcbiAgICAgICAgICAgIHRoaXMuX2NyID0gTWF0aC5jb3ModmFsdWUpO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFRoZSBwb3NpdGlvbiBvZiB0aGUgZGlzcGxheU9iamVjdCBvbiB0aGUgeSBheGlzIHJlbGF0aXZlIHRvIHRoZSBsb2NhbCBjb29yZGluYXRlcyBvZiB0aGUgcGFyZW50LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLkRpc3BsYXlPYmplY3QjXG4gICAgICovXG4gICAgc2NhbGVZOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuc2NhbGUueTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuc2NhbGUueSA9IHZhbHVlO1xuICAgICAgICAgICAgdGhpcy5kaXJ0eVRyYW5zZm9ybSA9IHRydWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogSW5kaWNhdGVzIGlmIHRoZSBzcHJpdGUgaXMgZ2xvYmFsbHkgdmlzaWJsZS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICogQG1lbWJlcm9mIFBJWEkuRGlzcGxheU9iamVjdCNcbiAgICAgKiBAcmVhZG9ubHlcbiAgICAgKi9cbiAgICB3b3JsZFZpc2libGU6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICB2YXIgaXRlbSA9IHRoaXM7XG5cbiAgICAgICAgICAgIGRvIHtcbiAgICAgICAgICAgICAgICBpZiAoIWl0ZW0udmlzaWJsZSlcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpdGVtID0gaXRlbS5wYXJlbnQ7XG4gICAgICAgICAgICB9IHdoaWxlIChpdGVtKTtcblxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogU2V0cyBhIG1hc2sgZm9yIHRoZSBkaXNwbGF5T2JqZWN0LiBBIG1hc2sgaXMgYW4gb2JqZWN0IHRoYXQgbGltaXRzIHRoZSB2aXNpYmlsaXR5IG9mIGFuIG9iamVjdCB0byB0aGUgc2hhcGUgb2YgdGhlIG1hc2sgYXBwbGllZCB0byBpdC5cbiAgICAgKiBJbiBQSVhJIGEgcmVndWxhciBtYXNrIG11c3QgYmUgYSBQSVhJLkdyYXBoaWNzIG9yIGEgUElYSS5TcHJpdGUgb2JqZWN0LiBUaGlzIGFsbG93cyBmb3IgbXVjaCBmYXN0ZXIgbWFza2luZyBpbiBjYW52YXMgYXMgaXQgdXRpbGlzZXMgc2hhcGUgY2xpcHBpbmcuXG4gICAgICogVG8gcmVtb3ZlIGEgbWFzaywgc2V0IHRoaXMgcHJvcGVydHkgdG8gbnVsbC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuR3JhcGhpY3N8UElYSS5TcHJpdGV9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuRGlzcGxheU9iamVjdCNcbiAgICAgKi9cbiAgICBtYXNrOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX21hc2s7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICBpZiAodGhpcy5fbWFzaylcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9tYXNrLnJlbmRlcmFibGUgPSB0cnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLl9tYXNrID0gdmFsdWU7XG5cbiAgICAgICAgICAgIGlmICh0aGlzLl9tYXNrKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHRoaXMuX21hc2sucmVuZGVyYWJsZSA9IGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIGZpbHRlcnMgZm9yIHRoZSBkaXNwbGF5T2JqZWN0LlxuICAgICAqICogSU1QT1JUQU5UOiBUaGlzIGlzIGEgd2ViR0wgb25seSBmZWF0dXJlIGFuZCB3aWxsIGJlIGlnbm9yZWQgYnkgdGhlIGNhbnZhcyByZW5kZXJlci5cbiAgICAgKiBUbyByZW1vdmUgZmlsdGVycyBzaW1wbHkgc2V0IHRoaXMgcHJvcGVydHkgdG8gJ251bGwnXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLkFic3RyYWN0RmlsdGVyW119XG4gICAgICogQG1lbWJlcm9mIFBJWEkuRGlzcGxheU9iamVjdCNcbiAgICAgKi9cbiAgICBmaWx0ZXJzOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2ZpbHRlcnMgJiYgdGhpcy5fZmlsdGVycy5zbGljZSgpO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5fZmlsdGVycyA9IHZhbHVlICYmIHZhbHVlLnNsaWNlKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbn0pO1xuXG4vKlxuICogVXBkYXRlcyB0aGUgb2JqZWN0IHRyYW5zZm9ybSBmb3IgcmVuZGVyaW5nXG4gKlxuICogVE9ETyAtIE9wdGltaXphdGlvbiBwYXNzIVxuICovXG5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS51cGRhdGVUcmFuc2Zvcm0gPSBmdW5jdGlvbiAoKVxue1xuICAgIHZhciBwdCA9IHRoaXMucGFyZW50LndvcmxkVHJhbnNmb3JtO1xuICAgIHZhciB3dCA9IHRoaXMud29ybGRUcmFuc2Zvcm07XG4gICAgdmFyIGx0ID0gdGhpcy5sb2NhbFRyYW5zZm9ybTtcblxuICAgIGlmKHRoaXMuZGlydHlUcmFuc2Zvcm0pXG4gICAge1xuICAgICAgICAvLyBnZXQgdGhlIG1hdHJpeCB2YWx1ZXMgb2YgdGhlIGRpc3BsYXlvYmplY3QgYmFzZWQgb24gaXRzIHRyYW5zZm9ybSBwcm9wZXJ0aWVzLi5cbiAgICAgICAgbHQuYSAgPSAgdGhpcy5fY3IgKiB0aGlzLnNjYWxlLng7XG4gICAgICAgIGx0LmIgID0gIHRoaXMuX3NyICogdGhpcy5zY2FsZS54O1xuICAgICAgICBsdC5jICA9IC10aGlzLl9zciAqIHRoaXMuc2NhbGUueTtcbiAgICAgICAgbHQuZCAgPSAgdGhpcy5fY3IgKiB0aGlzLnNjYWxlLnk7XG4gICAgICAgIGx0LnR4ID0gIHRoaXMucG9zaXRpb24ueCAtICh0aGlzLnBpdm90LnggKiBsdC5hICsgdGhpcy5waXZvdC55ICogbHQuYyk7XG4gICAgICAgIGx0LnR5ID0gIHRoaXMucG9zaXRpb24ueSAtICh0aGlzLnBpdm90LnggKiBsdC5iICsgdGhpcy5waXZvdC55ICogbHQuZCk7XG4gICAgfVxuXG4gICAgaWYodGhpcy5kaXJ0eVRyYW5zZm9ybSB8fCB0aGlzLnBhcmVudC5kaXJ0eVRyYW5zZm9ybSlcbiAgICB7ICAgICAgXG4gICAgICAgIC8vIGNvbmNhdCB0aGUgcGFyZW50IG1hdHJpeCB3aXRoIHRoZSBvYmplY3RzIHRyYW5zZm9ybS5cbiAgICAgICAgd3QuYSAgPSBsdC5hICAqIHB0LmEgKyBsdC5iICAqIHB0LmM7XG4gICAgICAgIHd0LmIgID0gbHQuYSAgKiBwdC5iICsgbHQuYiAgKiBwdC5kO1xuICAgICAgICB3dC5jICA9IGx0LmMgICogcHQuYSArIGx0LmQgICogcHQuYztcbiAgICAgICAgd3QuZCAgPSBsdC5jICAqIHB0LmIgKyBsdC5kICAqIHB0LmQ7XG4gICAgICAgIHd0LnR4ID0gbHQudHggKiBwdC5hICsgbHQudHkgKiBwdC5jICsgcHQudHg7XG4gICAgICAgIHd0LnR5ID0gbHQudHggKiBwdC5iICsgbHQudHkgKiBwdC5kICsgcHQudHk7ICAgICAgIFxuICAgIFxuICAgICAgICB0aGlzLl9jdXJyZW50Qm91bmRzID0gbnVsbDtcbiAgICB9XG5cbiAgICAvLyBtdWx0aXBseSB0aGUgYWxwaGFzLi5cbiAgICB0aGlzLndvcmxkQWxwaGEgPSB0aGlzLmFscGhhICogdGhpcy5wYXJlbnQud29ybGRBbHBoYTtcblxuICAgIC8vIHJlc2V0IHRoZSBib3VuZHMgZWFjaCB0aW1lIHRoaXMgaXMgY2FsbGVkIVxuICAgIFxufTtcblxuLy8gcGVyZm9ybWFuY2UgaW5jcmVhc2UgdG8gYXZvaWQgdXNpbmcgY2FsbC4uICgxMHggZmFzdGVyKVxuRGlzcGxheU9iamVjdC5wcm90b3R5cGUuZGlzcGxheU9iamVjdFVwZGF0ZVRyYW5zZm9ybSA9IERpc3BsYXlPYmplY3QucHJvdG90eXBlLnVwZGF0ZVRyYW5zZm9ybTtcblxuLyoqXG4gKlxuICpcbiAqIFJldHJpZXZlcyB0aGUgYm91bmRzIG9mIHRoZSBkaXNwbGF5T2JqZWN0IGFzIGEgcmVjdGFuZ2xlIG9iamVjdFxuICpcbiAqIEBwYXJhbSBtYXRyaXgge1BJWEkuTWF0cml4fVxuICogQHJldHVybiB7UElYSS5SZWN0YW5nbGV9IHRoZSByZWN0YW5ndWxhciBib3VuZGluZyBhcmVhXG4gKi9cbkRpc3BsYXlPYmplY3QucHJvdG90eXBlLmdldEJvdW5kcyA9IGZ1bmN0aW9uIChtYXRyaXgpIC8vIGpzaGludCB1bnVzZWQ6ZmFsc2VcbntcbiAgICByZXR1cm4gbWF0aC5SZWN0YW5nbGUuRU1QVFk7XG59O1xuXG4vKipcbiAqIFJldHJpZXZlcyB0aGUgbG9jYWwgYm91bmRzIG9mIHRoZSBkaXNwbGF5T2JqZWN0IGFzIGEgcmVjdGFuZ2xlIG9iamVjdFxuICpcbiAqIEByZXR1cm4ge1BJWEkuUmVjdGFuZ2xlfSB0aGUgcmVjdGFuZ3VsYXIgYm91bmRpbmcgYXJlYVxuICovXG5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS5nZXRMb2NhbEJvdW5kcyA9IGZ1bmN0aW9uICgpXG57XG4gICAgcmV0dXJuIHRoaXMuZ2V0Qm91bmRzKG1hdGguTWF0cml4LklERU5USVRZKTtcbn07XG5cbi8qKlxuICogQ2FsY3VsYXRlcyB0aGUgZ2xvYmFsIHBvc2l0aW9uIG9mIHRoZSBkaXNwbGF5IG9iamVjdFxuICpcbiAqIEBwYXJhbSBwb3NpdGlvbiB7UElYSS5Qb2ludH0gVGhlIHdvcmxkIG9yaWdpbiB0byBjYWxjdWxhdGUgZnJvbVxuICogQHJldHVybiB7UElYSS5Qb2ludH0gQSBwb2ludCBvYmplY3QgcmVwcmVzZW50aW5nIHRoZSBwb3NpdGlvbiBvZiB0aGlzIG9iamVjdFxuICovXG5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS50b0dsb2JhbCA9IGZ1bmN0aW9uIChwb3NpdGlvbilcbntcbiAgICAvLyB0aGlzIHBhcmVudCBjaGVjayBpcyBmb3IganVzdCBpbiBjYXNlIHRoZSBpdGVtIGlzIGEgcm9vdCBvYmplY3QuXG4gICAgLy8gSWYgaXQgaXMgd2UgbmVlZCB0byBnaXZlIGl0IGEgdGVtcG9yYXJ5IHBhcmVudCBzbyB0aGF0IGRpc3BsYXlPYmplY3RVcGRhdGVUcmFuc2Zvcm0gd29ya3MgY29ycmVjdGx5XG4gICAgLy8gdGhpcyBpcyBtYWlubHkgdG8gYXZvaWQgYSBwYXJlbnQgY2hlY2sgaW4gdGhlIG1haW4gbG9vcC4gRXZlcnkgbGl0dGxlIGhlbHBzIGZvciBwZXJmb3JtYW5jZSA6KVxuICAgIGlmKCF0aGlzLnBhcmVudClcbiAgICB7XG4gICAgICAgIHRoaXMucGFyZW50ID0gX3RlbXBEaXNwbGF5T2JqZWN0UGFyZW50O1xuICAgICAgICB0aGlzLmRpc3BsYXlPYmplY3RVcGRhdGVUcmFuc2Zvcm0oKTtcbiAgICAgICAgdGhpcy5wYXJlbnQgPSBudWxsO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICB0aGlzLmRpc3BsYXlPYmplY3RVcGRhdGVUcmFuc2Zvcm0oKTtcbiAgICB9XG5cbiAgICAvLyBkb24ndCBuZWVkIHRvIHVwZGF0ZSB0aGUgbG90XG4gICAgcmV0dXJuIHRoaXMud29ybGRUcmFuc2Zvcm0uYXBwbHkocG9zaXRpb24pO1xufTtcblxuLyoqXG4gKiBDYWxjdWxhdGVzIHRoZSBsb2NhbCBwb3NpdGlvbiBvZiB0aGUgZGlzcGxheSBvYmplY3QgcmVsYXRpdmUgdG8gYW5vdGhlciBwb2ludFxuICpcbiAqIEBwYXJhbSBwb3NpdGlvbiB7UElYSS5Qb2ludH0gVGhlIHdvcmxkIG9yaWdpbiB0byBjYWxjdWxhdGUgZnJvbVxuICogQHBhcmFtIFtmcm9tXSB7UElYSS5EaXNwbGF5T2JqZWN0fSBUaGUgRGlzcGxheU9iamVjdCB0byBjYWxjdWxhdGUgdGhlIGdsb2JhbCBwb3NpdGlvbiBmcm9tXG4gKiBAcGFyYW0gW3BvaW50XSB7UElYSS5Qb2ludH0gQSBQb2ludCBvYmplY3QgaW4gd2hpY2ggdG8gc3RvcmUgdGhlIHZhbHVlLCBvcHRpb25hbCAob3RoZXJ3aXNlIHdpbGwgY3JlYXRlIGEgbmV3IFBvaW50KVxuICogQHJldHVybiB7UElYSS5Qb2ludH0gQSBwb2ludCBvYmplY3QgcmVwcmVzZW50aW5nIHRoZSBwb3NpdGlvbiBvZiB0aGlzIG9iamVjdFxuICovXG5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS50b0xvY2FsID0gZnVuY3Rpb24gKHBvc2l0aW9uLCBmcm9tLCBwb2ludClcbntcbiAgICBpZiAoZnJvbSlcbiAgICB7XG4gICAgICAgIHBvc2l0aW9uID0gZnJvbS50b0dsb2JhbChwb3NpdGlvbik7XG4gICAgfVxuXG4gICAgLy8gdGhpcyBwYXJlbnQgY2hlY2sgaXMgZm9yIGp1c3QgaW4gY2FzZSB0aGUgaXRlbSBpcyBhIHJvb3Qgb2JqZWN0LlxuICAgIC8vIElmIGl0IGlzIHdlIG5lZWQgdG8gZ2l2ZSBpdCBhIHRlbXBvcmFyeSBwYXJlbnQgc28gdGhhdCBkaXNwbGF5T2JqZWN0VXBkYXRlVHJhbnNmb3JtIHdvcmtzIGNvcnJlY3RseVxuICAgIC8vIHRoaXMgaXMgbWFpbmx5IHRvIGF2b2lkIGEgcGFyZW50IGNoZWNrIGluIHRoZSBtYWluIGxvb3AuIEV2ZXJ5IGxpdHRsZSBoZWxwcyBmb3IgcGVyZm9ybWFuY2UgOilcbiAgICBpZighdGhpcy5wYXJlbnQpXG4gICAge1xuICAgICAgICB0aGlzLnBhcmVudCA9IF90ZW1wRGlzcGxheU9iamVjdFBhcmVudDtcbiAgICAgICAgdGhpcy5kaXNwbGF5T2JqZWN0VXBkYXRlVHJhbnNmb3JtKCk7XG4gICAgICAgIHRoaXMucGFyZW50ID0gbnVsbDtcbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgdGhpcy5kaXNwbGF5T2JqZWN0VXBkYXRlVHJhbnNmb3JtKCk7XG4gICAgfVxuXG4gICAgLy8gc2ltcGx5IGFwcGx5IHRoZSBtYXRyaXguLlxuICAgIHJldHVybiB0aGlzLndvcmxkVHJhbnNmb3JtLmFwcGx5SW52ZXJzZShwb3NpdGlvbiwgcG9pbnQpO1xufTtcblxuLyoqXG4gKiBSZW5kZXJzIHRoZSBvYmplY3QgdXNpbmcgdGhlIFdlYkdMIHJlbmRlcmVyXG4gKlxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLldlYkdMUmVuZGVyZXJ9IFRoZSByZW5kZXJlclxuICogQHByaXZhdGVcbiAqL1xuRGlzcGxheU9iamVjdC5wcm90b3R5cGUucmVuZGVyV2ViR0wgPSBmdW5jdGlvbiAocmVuZGVyZXIpIC8vIGpzaGludCB1bnVzZWQ6ZmFsc2VcbntcbiAgICAvLyBPVkVSV1JJVEU7XG59O1xuXG4vKipcbiAqIFJlbmRlcnMgdGhlIG9iamVjdCB1c2luZyB0aGUgQ2FudmFzIHJlbmRlcmVyXG4gKlxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLkNhbnZhc1JlbmRlcmVyfSBUaGUgcmVuZGVyZXJcbiAqIEBwcml2YXRlXG4gKi9cbkRpc3BsYXlPYmplY3QucHJvdG90eXBlLnJlbmRlckNhbnZhcyA9IGZ1bmN0aW9uIChyZW5kZXJlcikgLy8ganNoaW50IHVudXNlZDpmYWxzZVxue1xuICAgIC8vIE9WRVJXUklURTtcbn07XG4vKipcbiAqIFVzZWZ1bCBmdW5jdGlvbiB0aGF0IHJldHVybnMgYSB0ZXh0dXJlIG9mIHRoZSBkaXNwbGF5IG9iamVjdCB0aGF0IGNhbiB0aGVuIGJlIHVzZWQgdG8gY3JlYXRlIHNwcml0ZXNcbiAqIFRoaXMgY2FuIGJlIHF1aXRlIHVzZWZ1bCBpZiB5b3VyIGRpc3BsYXlPYmplY3QgaXMgc3RhdGljIC8gY29tcGxpY2F0ZWQgYW5kIG5lZWRzIHRvIGJlIHJldXNlZCBtdWx0aXBsZSB0aW1lcy5cbiAqXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuQ2FudmFzUmVuZGVyZXJ8UElYSS5XZWJHTFJlbmRlcmVyfSBUaGUgcmVuZGVyZXIgdXNlZCB0byBnZW5lcmF0ZSB0aGUgdGV4dHVyZS5cbiAqIEBwYXJhbSBzY2FsZU1vZGUge251bWJlcn0gU2VlIHtAbGluayBQSVhJLlNDQUxFX01PREVTfSBmb3IgcG9zc2libGUgdmFsdWVzXG4gKiBAcGFyYW0gcmVzb2x1dGlvbiB7bnVtYmVyfSBUaGUgcmVzb2x1dGlvbiBvZiB0aGUgdGV4dHVyZSBiZWluZyBnZW5lcmF0ZWRcbiAqIEByZXR1cm4ge1BJWEkuVGV4dHVyZX0gYSB0ZXh0dXJlIG9mIHRoZSBkaXNwbGF5IG9iamVjdFxuICovXG5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS5nZW5lcmF0ZVRleHR1cmUgPSBmdW5jdGlvbiAocmVuZGVyZXIsIHNjYWxlTW9kZSwgcmVzb2x1dGlvbilcbntcbiAgICB2YXIgYm91bmRzID0gdGhpcy5nZXRMb2NhbEJvdW5kcygpO1xuXG4gICAgdmFyIHJlbmRlclRleHR1cmUgPSBuZXcgUmVuZGVyVGV4dHVyZShyZW5kZXJlciwgYm91bmRzLndpZHRoIHwgMCwgYm91bmRzLmhlaWdodCB8IDAsIHNjYWxlTW9kZSwgcmVzb2x1dGlvbik7XG5cbiAgICBfdGVtcE1hdHJpeC50eCA9IC1ib3VuZHMueDtcbiAgICBfdGVtcE1hdHJpeC50eSA9IC1ib3VuZHMueTtcblxuICAgIHJlbmRlclRleHR1cmUucmVuZGVyKHRoaXMsIF90ZW1wTWF0cml4KTtcblxuICAgIHJldHVybiByZW5kZXJUZXh0dXJlO1xufTtcblxuLyoqXG4gKiBTZXQgdGhlIHBhcmVudCBDb250YWluZXIgb2YgdGhpcyBEaXNwbGF5T2JqZWN0XG4gKlxuICogQHBhcmFtIGNvbnRhaW5lciB7Q29udGFpbmVyfSBUaGUgQ29udGFpbmVyIHRvIGFkZCB0aGlzIERpc3BsYXlPYmplY3QgdG9cbiAqIEByZXR1cm4ge0NvbnRhaW5lcn0gVGhlIENvbnRhaW5lciB0aGF0IHRoaXMgRGlzcGxheU9iamVjdCB3YXMgYWRkZWQgdG9cbiAqL1xuRGlzcGxheU9iamVjdC5wcm90b3R5cGUuc2V0UGFyZW50ID0gZnVuY3Rpb24gKGNvbnRhaW5lcilcbntcbiAgICBpZiAoIWNvbnRhaW5lciB8fCAhY29udGFpbmVyLmFkZENoaWxkKVxuICAgIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdzZXRQYXJlbnQ6IEFyZ3VtZW50IG11c3QgYmUgYSBDb250YWluZXInKTtcbiAgICB9XG5cbiAgICBjb250YWluZXIuYWRkQ2hpbGQodGhpcyk7XG4gICAgcmV0dXJuIGNvbnRhaW5lcjtcbn07XG5cbi8qKlxuICogQ29udmVuaWVuY2UgZnVuY3Rpb24gdG8gc2V0IHRoZSBwb3N0aW9uLCBzY2FsZSwgc2tldyBhbmQgcGl2b3QgYXQgb25jZS5cbiAqXG4gKiBAcGFyYW0gW3g9MF0ge251bWJlcn0gVGhlIFggcG9zaXRpb25cbiAqIEBwYXJhbSBbeT0wXSB7bnVtYmVyfSBUaGUgWSBwb3NpdGlvblxuICogQHBhcmFtIFtzY2FsZVg9MV0ge251bWJlcn0gVGhlIFggc2NhbGUgdmFsdWVcbiAqIEBwYXJhbSBbc2NhbGVZPTFdIHtudW1iZXJ9IFRoZSBZIHNjYWxlIHZhbHVlXG4gKiBAcGFyYW0gW3JvdGF0aW9uPTBdIHtudW1iZXJ9IFRoZSByb3RhdGlvblxuICogQHBhcmFtIFtza2V3WD0wXSB7bnVtYmVyfSBUaGUgWCBza2V3IHZhbHVlXG4gKiBAcGFyYW0gW3NrZXdZPTBdIHtudW1iZXJ9IFRoZSBZIHNrZXcgdmFsdWVcbiAqIEBwYXJhbSBbcGl2b3RYPTBdIHtudW1iZXJ9IFRoZSBYIHBpdm90IHZhbHVlXG4gKiBAcGFyYW0gW3Bpdm90WT0wXSB7bnVtYmVyfSBUaGUgWSBwaXZvdCB2YWx1ZVxuICogQHJldHVybiB7UElYSS5EaXNwbGF5T2JqZWN0fVxuICovXG5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS5zZXRUcmFuc2Zvcm0gPSBmdW5jdGlvbih4LCB5LCBzY2FsZVgsIHNjYWxlWSwgcm90YXRpb24sIHNrZXdYLCBza2V3WSwgcGl2b3RYLCBwaXZvdFkpIC8vanNoaW50IGlnbm9yZTpsaW5lXG57XG4gICAgdGhpcy5wb3NpdGlvbi54ID0geCB8fCAwO1xuICAgIHRoaXMucG9zaXRpb24ueSA9IHkgfHwgMDtcbiAgICB0aGlzLnNjYWxlLnggPSAhc2NhbGVYID8gMSA6IHNjYWxlWDtcbiAgICB0aGlzLnNjYWxlLnkgPSAhc2NhbGVZID8gMSA6IHNjYWxlWTtcbiAgICB0aGlzLnJvdGF0aW9uID0gcm90YXRpb24gfHwgMDtcbiAgICB0aGlzLnNrZXcueCA9IHNrZXdYIHx8IDA7XG4gICAgdGhpcy5za2V3LnkgPSBza2V3WSB8fCAwO1xuICAgIHRoaXMucGl2b3QueCA9IHBpdm90WCB8fCAwO1xuICAgIHRoaXMucGl2b3QueSA9IHBpdm90WSB8fCAwO1xuICAgIHRoaXMuZGlydHlUcmFuc2Zvcm0gPSB0cnVlO1xuICAgIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBCYXNlIGRlc3Ryb3kgbWV0aG9kIGZvciBnZW5lcmljIGRpc3BsYXkgb2JqZWN0c1xuICpcbiAqL1xuRGlzcGxheU9iamVjdC5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uICgpXG57XG5cbiAgICB0aGlzLnBvc2l0aW9uID0gbnVsbDtcbiAgICB0aGlzLnNjYWxlID0gbnVsbDtcbiAgICB0aGlzLnBpdm90ID0gbnVsbDtcbiAgICB0aGlzLnNrZXcgPSBudWxsO1xuXG4gICAgdGhpcy5wYXJlbnQgPSBudWxsO1xuXG4gICAgdGhpcy5fYm91bmRzID0gbnVsbDtcbiAgICB0aGlzLl9jdXJyZW50Qm91bmRzID0gbnVsbDtcbiAgICB0aGlzLl9tYXNrID0gbnVsbDtcblxuICAgIHRoaXMud29ybGRUcmFuc2Zvcm0gPSBudWxsO1xuICAgIHRoaXMuZmlsdGVyQXJlYSA9IG51bGw7XG59O1xuIiwidmFyIENvbnRhaW5lciA9IHJlcXVpcmUoJy4uL2Rpc3BsYXkvQ29udGFpbmVyJyksXG4gICAgVGV4dHVyZSA9IHJlcXVpcmUoJy4uL3RleHR1cmVzL1RleHR1cmUnKSxcbiAgICBDYW52YXNCdWZmZXIgPSByZXF1aXJlKCcuLi9yZW5kZXJlcnMvY2FudmFzL3V0aWxzL0NhbnZhc0J1ZmZlcicpLFxuICAgIENhbnZhc0dyYXBoaWNzID0gcmVxdWlyZSgnLi4vcmVuZGVyZXJzL2NhbnZhcy91dGlscy9DYW52YXNHcmFwaGljcycpLFxuICAgIEdyYXBoaWNzRGF0YSA9IHJlcXVpcmUoJy4vR3JhcGhpY3NEYXRhJyksXG4gICAgbWF0aCA9IHJlcXVpcmUoJy4uL21hdGgnKSxcbiAgICBDT05TVCA9IHJlcXVpcmUoJy4uL2NvbnN0JyksXG4gICAgdGVtcFBvaW50ID0gbmV3IG1hdGguUG9pbnQoKTtcblxuLyoqXG4gKiBUaGUgR3JhcGhpY3MgY2xhc3MgY29udGFpbnMgbWV0aG9kcyB1c2VkIHRvIGRyYXcgcHJpbWl0aXZlIHNoYXBlcyBzdWNoIGFzIGxpbmVzLCBjaXJjbGVzIGFuZFxuICogcmVjdGFuZ2xlcyB0byB0aGUgZGlzcGxheSwgYW5kIHRvIGNvbG9yIGFuZCBmaWxsIHRoZW0uXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLkNvbnRhaW5lclxuICogQG1lbWJlcm9mIFBJWElcbiAqL1xuZnVuY3Rpb24gR3JhcGhpY3MoKVxue1xuICAgIENvbnRhaW5lci5jYWxsKHRoaXMpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGFscGhhIHZhbHVlIHVzZWQgd2hlbiBmaWxsaW5nIHRoZSBHcmFwaGljcyBvYmplY3QuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMVxuICAgICAqL1xuICAgIHRoaXMuZmlsbEFscGhhID0gMTtcblxuICAgIC8qKlxuICAgICAqIFRoZSB3aWR0aCAodGhpY2tuZXNzKSBvZiBhbnkgbGluZXMgZHJhd24uXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMFxuICAgICAqL1xuICAgIHRoaXMubGluZVdpZHRoID0gMDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBjb2xvciBvZiBhbnkgbGluZXMgZHJhd24uXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtzdHJpbmd9XG4gICAgICogQGRlZmF1bHQgMFxuICAgICAqL1xuICAgIHRoaXMubGluZUNvbG9yID0gMDtcblxuICAgIC8qKlxuICAgICAqIEdyYXBoaWNzIGRhdGFcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuR3JhcGhpY3NEYXRhW119XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLmdyYXBoaWNzRGF0YSA9IFtdO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHRpbnQgYXBwbGllZCB0byB0aGUgZ3JhcGhpYyBzaGFwZS4gVGhpcyBpcyBhIGhleCB2YWx1ZS4gQXBwbHkgYSB2YWx1ZSBvZiAweEZGRkZGRiB0byByZXNldCB0aGUgdGludC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAweEZGRkZGRlxuICAgICAqL1xuICAgIHRoaXMudGludCA9IDB4RkZGRkZGO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHByZXZpb3VzIHRpbnQgYXBwbGllZCB0byB0aGUgZ3JhcGhpYyBzaGFwZS4gVXNlZCB0byBjb21wYXJlIHRvIHRoZSBjdXJyZW50IHRpbnQgYW5kIGNoZWNrIGlmIHRoZXJlcyBjaGFuZ2UuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAZGVmYXVsdCAweEZGRkZGRlxuICAgICAqL1xuICAgIHRoaXMuX3ByZXZUaW50ID0gMHhGRkZGRkY7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYmxlbmQgbW9kZSB0byBiZSBhcHBsaWVkIHRvIHRoZSBncmFwaGljIHNoYXBlLiBBcHBseSBhIHZhbHVlIG9mIGBQSVhJLkJMRU5EX01PREVTLk5PUk1BTGAgdG8gcmVzZXQgdGhlIGJsZW5kIG1vZGUuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgUElYSS5CTEVORF9NT0RFUy5OT1JNQUw7XG4gICAgICogQHNlZSBQSVhJLkJMRU5EX01PREVTXG4gICAgICovXG4gICAgdGhpcy5ibGVuZE1vZGUgPSBDT05TVC5CTEVORF9NT0RFUy5OT1JNQUw7XG5cbiAgICAvKipcbiAgICAgKiBDdXJyZW50IHBhdGhcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuR3JhcGhpY3NEYXRhfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5jdXJyZW50UGF0aCA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBBcnJheSBjb250YWluaW5nIHNvbWUgV2ViR0wtcmVsYXRlZCBwcm9wZXJ0aWVzIHVzZWQgYnkgdGhlIFdlYkdMIHJlbmRlcmVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7b2JqZWN0PG51bWJlciwgb2JqZWN0Pn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIC8vIFRPRE8gLSBfd2ViZ2wgc2hvdWxkIHVzZSBhIHByb3RvdHlwZSBvYmplY3QsIG5vdCBhIHJhbmRvbSB1bmRvY3VtZW50ZWQgb2JqZWN0Li4uXG4gICAgdGhpcy5fd2ViR0wgPSB7fTtcblxuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgdGhpcyBzaGFwZSBpcyBiZWluZyB1c2VkIGFzIGEgbWFzay5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICovXG4gICAgdGhpcy5pc01hc2sgPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBib3VuZHMnIHBhZGRpbmcgdXNlZCBmb3IgYm91bmRzIGNhbGN1bGF0aW9uLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMuYm91bmRzUGFkZGluZyA9IDA7XG5cbiAgICAvKipcbiAgICAgKiBBIGNhY2hlIG9mIHRoZSBsb2NhbCBib3VuZHMgdG8gcHJldmVudCByZWNhbGN1bGF0aW9uLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5SZWN0YW5nbGV9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9sb2NhbEJvdW5kcyA9IG5ldyBtYXRoLlJlY3RhbmdsZSgwLDAsMSwxKTtcblxuICAgIC8qKlxuICAgICAqIFVzZWQgdG8gZGV0ZWN0IGlmIHRoZSBncmFwaGljcyBvYmplY3QgaGFzIGNoYW5nZWQuIElmIHRoaXMgaXMgc2V0IHRvIHRydWUgdGhlbiB0aGUgZ3JhcGhpY3NcbiAgICAgKiBvYmplY3Qgd2lsbCBiZSByZWNhbGN1bGF0ZWQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5kaXJ0eSA9IHRydWU7XG5cbiAgICAvKipcbiAgICAgKiBVc2VkIHRvIGRldGVjdCBpZiB0aGUgV2ViR0wgZ3JhcGhpY3Mgb2JqZWN0IGhhcyBjaGFuZ2VkLiBJZiB0aGlzIGlzIHNldCB0byB0cnVlIHRoZW4gdGhlXG4gICAgICogZ3JhcGhpY3Mgb2JqZWN0IHdpbGwgYmUgcmVjYWxjdWxhdGVkLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuZ2xEaXJ0eSA9IGZhbHNlO1xuXG4gICAgdGhpcy5ib3VuZHNEaXJ0eSA9IHRydWU7XG5cbiAgICAvKipcbiAgICAgKiBVc2VkIHRvIGRldGVjdCBpZiB0aGUgY2FjaGVkIHNwcml0ZSBvYmplY3QgbmVlZHMgdG8gYmUgdXBkYXRlZC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLmNhY2hlZFNwcml0ZURpcnR5ID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBXaGVuIGNhY2hlQXNCaXRtYXAgaXMgc2V0IHRvIHRydWUgdGhlIGdyYXBoaWNzIG9iamVjdCB3aWxsIGJlIHJlbmRlcmVkIGFzIGlmIGl0IHdhcyBhIHNwcml0ZS5cbiAgICAgKiBUaGlzIGlzIHVzZWZ1bCBpZiB5b3VyIGdyYXBoaWNzIGVsZW1lbnQgZG9lcyBub3QgY2hhbmdlIG9mdGVuLCBhcyBpdCB3aWxsIHNwZWVkIHVwIHRoZSByZW5kZXJpbmdcbiAgICAgKiBvZiB0aGUgb2JqZWN0IGluIGV4Y2hhbmdlIGZvciB0YWtpbmcgdXAgdGV4dHVyZSBtZW1vcnkuIEl0IGlzIGFsc28gdXNlZnVsIGlmIHlvdSBuZWVkIHRoZSBncmFwaGljc1xuICAgICAqIG9iamVjdCB0byBiZSBhbnRpLWFsaWFzZWQsIGJlY2F1c2UgaXQgd2lsbCBiZSByZW5kZXJlZCB1c2luZyBjYW52YXMuIFRoaXMgaXMgbm90IHJlY29tbWVuZGVkIGlmXG4gICAgICogeW91IGFyZSBjb25zdGFudGx5IHJlZHJhd2luZyB0aGUgZ3JhcGhpY3MgZWxlbWVudC5cbiAgICAgKlxuICAgICAqIEBuYW1lIGNhY2hlQXNCaXRtYXBcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLkdyYXBoaWNzI1xuICAgICAqIEBkZWZhdWx0IGZhbHNlXG4gICAgICovXG59XG5cbi8vIGNvbnN0cnVjdG9yXG5HcmFwaGljcy5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKENvbnRhaW5lci5wcm90b3R5cGUpO1xuR3JhcGhpY3MucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gR3JhcGhpY3M7XG5tb2R1bGUuZXhwb3J0cyA9IEdyYXBoaWNzO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBuZXcgR3JhcGhpY3Mgb2JqZWN0IHdpdGggdGhlIHNhbWUgdmFsdWVzIGFzIHRoaXMgb25lLlxuICogTm90ZSB0aGF0IHRoZSBvbmx5IHRoZSBwcm9wZXJ0aWVzIG9mIHRoZSBvYmplY3QgYXJlIGNsb25lZCwgbm90IGl0cyB0cmFuc2Zvcm0gKHBvc2l0aW9uLHNjYWxlLGV0YylcbiAqXG4gKiBAcmV0dXJuIHtQSVhJLkdyYXBoaWNzfVxuICovXG5HcmFwaGljcy5wcm90b3R5cGUuY2xvbmUgPSBmdW5jdGlvbiAoKVxue1xuICAgIHZhciBjbG9uZSA9IG5ldyBHcmFwaGljcygpO1xuXG4gICAgY2xvbmUucmVuZGVyYWJsZSAgICA9IHRoaXMucmVuZGVyYWJsZTtcbiAgICBjbG9uZS5maWxsQWxwaGEgICAgID0gdGhpcy5maWxsQWxwaGE7XG4gICAgY2xvbmUubGluZVdpZHRoICAgICA9IHRoaXMubGluZVdpZHRoO1xuICAgIGNsb25lLmxpbmVDb2xvciAgICAgPSB0aGlzLmxpbmVDb2xvcjtcbiAgICBjbG9uZS50aW50ICAgICAgICAgID0gdGhpcy50aW50O1xuICAgIGNsb25lLmJsZW5kTW9kZSAgICAgPSB0aGlzLmJsZW5kTW9kZTtcbiAgICBjbG9uZS5pc01hc2sgICAgICAgID0gdGhpcy5pc01hc2s7XG4gICAgY2xvbmUuYm91bmRzUGFkZGluZyA9IHRoaXMuYm91bmRzUGFkZGluZztcbiAgICBjbG9uZS5kaXJ0eSAgICAgICAgID0gdHJ1ZTtcbiAgICBjbG9uZS5nbERpcnR5ICAgICAgID0gdHJ1ZTtcbiAgICBjbG9uZS5jYWNoZWRTcHJpdGVEaXJ0eSA9IHRoaXMuY2FjaGVkU3ByaXRlRGlydHk7XG5cbiAgICAvLyBjb3B5IGdyYXBoaWNzIGRhdGFcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuZ3JhcGhpY3NEYXRhLmxlbmd0aDsgKytpKVxuICAgIHtcbiAgICAgICAgY2xvbmUuZ3JhcGhpY3NEYXRhLnB1c2godGhpcy5ncmFwaGljc0RhdGFbaV0uY2xvbmUoKSk7XG4gICAgfVxuXG4gICAgY2xvbmUuY3VycmVudFBhdGggPSBjbG9uZS5ncmFwaGljc0RhdGFbY2xvbmUuZ3JhcGhpY3NEYXRhLmxlbmd0aCAtIDFdO1xuXG4gICAgY2xvbmUudXBkYXRlTG9jYWxCb3VuZHMoKTtcblxuICAgIHJldHVybiBjbG9uZTtcbn07XG5cbi8qKlxuICogU3BlY2lmaWVzIHRoZSBsaW5lIHN0eWxlIHVzZWQgZm9yIHN1YnNlcXVlbnQgY2FsbHMgdG8gR3JhcGhpY3MgbWV0aG9kcyBzdWNoIGFzIHRoZSBsaW5lVG8oKSBtZXRob2Qgb3IgdGhlIGRyYXdDaXJjbGUoKSBtZXRob2QuXG4gKlxuICogQHBhcmFtIGxpbmVXaWR0aCB7bnVtYmVyfSB3aWR0aCBvZiB0aGUgbGluZSB0byBkcmF3LCB3aWxsIHVwZGF0ZSB0aGUgb2JqZWN0cyBzdG9yZWQgc3R5bGVcbiAqIEBwYXJhbSBjb2xvciB7bnVtYmVyfSBjb2xvciBvZiB0aGUgbGluZSB0byBkcmF3LCB3aWxsIHVwZGF0ZSB0aGUgb2JqZWN0cyBzdG9yZWQgc3R5bGVcbiAqIEBwYXJhbSBhbHBoYSB7bnVtYmVyfSBhbHBoYSBvZiB0aGUgbGluZSB0byBkcmF3LCB3aWxsIHVwZGF0ZSB0aGUgb2JqZWN0cyBzdG9yZWQgc3R5bGVcbiAqIEByZXR1cm4ge1BJWEkuR3JhcGhpY3N9XG4gKi9cbkdyYXBoaWNzLnByb3RvdHlwZS5saW5lU3R5bGUgPSBmdW5jdGlvbiAobGluZVdpZHRoLCBjb2xvciwgYWxwaGEpXG57XG4gICAgdGhpcy5saW5lV2lkdGggPSBsaW5lV2lkdGggfHwgMDtcbiAgICB0aGlzLmxpbmVDb2xvciA9IGNvbG9yIHx8IDA7XG4gICAgdGhpcy5saW5lQWxwaGEgPSAoYWxwaGEgPT09IHVuZGVmaW5lZCkgPyAxIDogYWxwaGE7XG5cbiAgICBpZiAodGhpcy5jdXJyZW50UGF0aClcbiAgICB7XG4gICAgICAgIGlmICh0aGlzLmN1cnJlbnRQYXRoLnNoYXBlLnBvaW50cy5sZW5ndGgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIC8vIGhhbGZ3YXkgdGhyb3VnaCBhIGxpbmU/IHN0YXJ0IGEgbmV3IG9uZSFcbiAgICAgICAgICAgIHZhciBzaGFwZSA9IG5ldyBtYXRoLlBvbHlnb24odGhpcy5jdXJyZW50UGF0aC5zaGFwZS5wb2ludHMuc2xpY2UoLTIpKTtcbiAgICAgICAgICAgIHNoYXBlLmNsb3NlZCA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5kcmF3U2hhcGUoc2hhcGUpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2VcbiAgICAgICAge1xuICAgICAgICAgICAgLy8gb3RoZXJ3aXNlIGl0cyBlbXB0eSBzbyBsZXRzIGp1c3Qgc2V0IHRoZSBsaW5lIHByb3BlcnRpZXNcbiAgICAgICAgICAgIHRoaXMuY3VycmVudFBhdGgubGluZVdpZHRoID0gdGhpcy5saW5lV2lkdGg7XG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRQYXRoLmxpbmVDb2xvciA9IHRoaXMubGluZUNvbG9yO1xuICAgICAgICAgICAgdGhpcy5jdXJyZW50UGF0aC5saW5lQWxwaGEgPSB0aGlzLmxpbmVBbHBoYTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBNb3ZlcyB0aGUgY3VycmVudCBkcmF3aW5nIHBvc2l0aW9uIHRvIHgsIHkuXG4gKlxuICogQHBhcmFtIHgge251bWJlcn0gdGhlIFggY29vcmRpbmF0ZSB0byBtb3ZlIHRvXG4gKiBAcGFyYW0geSB7bnVtYmVyfSB0aGUgWSBjb29yZGluYXRlIHRvIG1vdmUgdG9cbiAqIEByZXR1cm4ge1BJWEkuR3JhcGhpY3N9XG4gICovXG5HcmFwaGljcy5wcm90b3R5cGUubW92ZVRvID0gZnVuY3Rpb24gKHgsIHkpXG57XG4gICAgdmFyIHNoYXBlID0gbmV3IG1hdGguUG9seWdvbihbeCx5XSk7XG4gICAgc2hhcGUuY2xvc2VkID0gZmFsc2U7XG4gICAgdGhpcy5kcmF3U2hhcGUoc2hhcGUpO1xuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIERyYXdzIGEgbGluZSB1c2luZyB0aGUgY3VycmVudCBsaW5lIHN0eWxlIGZyb20gdGhlIGN1cnJlbnQgZHJhd2luZyBwb3NpdGlvbiB0byAoeCwgeSk7XG4gKiBUaGUgY3VycmVudCBkcmF3aW5nIHBvc2l0aW9uIGlzIHRoZW4gc2V0IHRvICh4LCB5KS5cbiAqXG4gKiBAcGFyYW0geCB7bnVtYmVyfSB0aGUgWCBjb29yZGluYXRlIHRvIGRyYXcgdG9cbiAqIEBwYXJhbSB5IHtudW1iZXJ9IHRoZSBZIGNvb3JkaW5hdGUgdG8gZHJhdyB0b1xuICogQHJldHVybiB7UElYSS5HcmFwaGljc31cbiAqL1xuR3JhcGhpY3MucHJvdG90eXBlLmxpbmVUbyA9IGZ1bmN0aW9uICh4LCB5KVxue1xuICAgIHRoaXMuY3VycmVudFBhdGguc2hhcGUucG9pbnRzLnB1c2goeCwgeSk7XG4gICAgdGhpcy5kaXJ0eSA9IHRydWU7XG5cbiAgICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogQ2FsY3VsYXRlIHRoZSBwb2ludHMgZm9yIGEgcXVhZHJhdGljIGJlemllciBjdXJ2ZSBhbmQgdGhlbiBkcmF3cyBpdC5cbiAqIEJhc2VkIG9uOiBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy83ODUwOTcvaG93LWRvLWktaW1wbGVtZW50LWEtYmV6aWVyLWN1cnZlLWluLWNcbiAqXG4gKiBAcGFyYW0gY3BYIHtudW1iZXJ9IENvbnRyb2wgcG9pbnQgeFxuICogQHBhcmFtIGNwWSB7bnVtYmVyfSBDb250cm9sIHBvaW50IHlcbiAqIEBwYXJhbSB0b1gge251bWJlcn0gRGVzdGluYXRpb24gcG9pbnQgeFxuICogQHBhcmFtIHRvWSB7bnVtYmVyfSBEZXN0aW5hdGlvbiBwb2ludCB5XG4gKiBAcmV0dXJuIHtQSVhJLkdyYXBoaWNzfVxuICovXG5HcmFwaGljcy5wcm90b3R5cGUucXVhZHJhdGljQ3VydmVUbyA9IGZ1bmN0aW9uIChjcFgsIGNwWSwgdG9YLCB0b1kpXG57XG4gICAgaWYgKHRoaXMuY3VycmVudFBhdGgpXG4gICAge1xuICAgICAgICBpZiAodGhpcy5jdXJyZW50UGF0aC5zaGFwZS5wb2ludHMubGVuZ3RoID09PSAwKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRQYXRoLnNoYXBlLnBvaW50cyA9IFswLCAwXTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICB0aGlzLm1vdmVUbygwLDApO1xuICAgIH1cblxuICAgIHZhciB4YSxcbiAgICAgICAgeWEsXG4gICAgICAgIG4gPSAyMCxcbiAgICAgICAgcG9pbnRzID0gdGhpcy5jdXJyZW50UGF0aC5zaGFwZS5wb2ludHM7XG5cbiAgICBpZiAocG9pbnRzLmxlbmd0aCA9PT0gMClcbiAgICB7XG4gICAgICAgIHRoaXMubW92ZVRvKDAsIDApO1xuICAgIH1cblxuICAgIHZhciBmcm9tWCA9IHBvaW50c1twb2ludHMubGVuZ3RoLTJdO1xuICAgIHZhciBmcm9tWSA9IHBvaW50c1twb2ludHMubGVuZ3RoLTFdO1xuXG4gICAgdmFyIGogPSAwO1xuICAgIGZvciAodmFyIGkgPSAxOyBpIDw9IG47ICsraSlcbiAgICB7XG4gICAgICAgIGogPSBpIC8gbjtcblxuICAgICAgICB4YSA9IGZyb21YICsgKCAoY3BYIC0gZnJvbVgpICogaiApO1xuICAgICAgICB5YSA9IGZyb21ZICsgKCAoY3BZIC0gZnJvbVkpICogaiApO1xuXG4gICAgICAgIHBvaW50cy5wdXNoKCB4YSArICggKChjcFggKyAoICh0b1ggLSBjcFgpICogaiApKSAtIHhhKSAqIGogKSxcbiAgICAgICAgICAgICAgICAgICAgIHlhICsgKCAoKGNwWSArICggKHRvWSAtIGNwWSkgKiBqICkpIC0geWEpICogaiApICk7XG4gICAgfVxuXG4gICAgdGhpcy5kaXJ0eSA9IHRoaXMuYm91bmRzRGlydHkgPSB0cnVlO1xuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIENhbGN1bGF0ZSB0aGUgcG9pbnRzIGZvciBhIGJlemllciBjdXJ2ZSBhbmQgdGhlbiBkcmF3cyBpdC5cbiAqXG4gKiBAcGFyYW0gY3BYIHtudW1iZXJ9IENvbnRyb2wgcG9pbnQgeFxuICogQHBhcmFtIGNwWSB7bnVtYmVyfSBDb250cm9sIHBvaW50IHlcbiAqIEBwYXJhbSBjcFgyIHtudW1iZXJ9IFNlY29uZCBDb250cm9sIHBvaW50IHhcbiAqIEBwYXJhbSBjcFkyIHtudW1iZXJ9IFNlY29uZCBDb250cm9sIHBvaW50IHlcbiAqIEBwYXJhbSB0b1gge251bWJlcn0gRGVzdGluYXRpb24gcG9pbnQgeFxuICogQHBhcmFtIHRvWSB7bnVtYmVyfSBEZXN0aW5hdGlvbiBwb2ludCB5XG4gKiBAcmV0dXJuIHtQSVhJLkdyYXBoaWNzfVxuICovXG5HcmFwaGljcy5wcm90b3R5cGUuYmV6aWVyQ3VydmVUbyA9IGZ1bmN0aW9uIChjcFgsIGNwWSwgY3BYMiwgY3BZMiwgdG9YLCB0b1kpXG57XG4gICAgaWYgKHRoaXMuY3VycmVudFBhdGgpXG4gICAge1xuICAgICAgICBpZiAodGhpcy5jdXJyZW50UGF0aC5zaGFwZS5wb2ludHMubGVuZ3RoID09PSAwKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRQYXRoLnNoYXBlLnBvaW50cyA9IFswLCAwXTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICB0aGlzLm1vdmVUbygwLDApO1xuICAgIH1cblxuICAgIHZhciBuID0gMjAsXG4gICAgICAgIGR0LFxuICAgICAgICBkdDIsXG4gICAgICAgIGR0MyxcbiAgICAgICAgdDIsXG4gICAgICAgIHQzLFxuICAgICAgICBwb2ludHMgPSB0aGlzLmN1cnJlbnRQYXRoLnNoYXBlLnBvaW50cztcblxuICAgIHZhciBmcm9tWCA9IHBvaW50c1twb2ludHMubGVuZ3RoLTJdO1xuICAgIHZhciBmcm9tWSA9IHBvaW50c1twb2ludHMubGVuZ3RoLTFdO1xuXG4gICAgdmFyIGogPSAwO1xuXG4gICAgZm9yICh2YXIgaSA9IDE7IGkgPD0gbjsgKytpKVxuICAgIHtcbiAgICAgICAgaiA9IGkgLyBuO1xuXG4gICAgICAgIGR0ID0gKDEgLSBqKTtcbiAgICAgICAgZHQyID0gZHQgKiBkdDtcbiAgICAgICAgZHQzID0gZHQyICogZHQ7XG5cbiAgICAgICAgdDIgPSBqICogajtcbiAgICAgICAgdDMgPSB0MiAqIGo7XG5cbiAgICAgICAgcG9pbnRzLnB1c2goIGR0MyAqIGZyb21YICsgMyAqIGR0MiAqIGogKiBjcFggKyAzICogZHQgKiB0MiAqIGNwWDIgKyB0MyAqIHRvWCxcbiAgICAgICAgICAgICAgICAgICAgIGR0MyAqIGZyb21ZICsgMyAqIGR0MiAqIGogKiBjcFkgKyAzICogZHQgKiB0MiAqIGNwWTIgKyB0MyAqIHRvWSk7XG4gICAgfVxuXG4gICAgdGhpcy5kaXJ0eSA9IHRoaXMuYm91bmRzRGlydHkgPSB0cnVlO1xuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIFRoZSBhcmNUbygpIG1ldGhvZCBjcmVhdGVzIGFuIGFyYy9jdXJ2ZSBiZXR3ZWVuIHR3byB0YW5nZW50cyBvbiB0aGUgY2FudmFzLlxuICpcbiAqIFwiYm9ycm93ZWRcIiBmcm9tIGh0dHBzOi8vY29kZS5nb29nbGUuY29tL3AvZnhjYW52YXMvIC0gdGhhbmtzIGdvb2dsZSFcbiAqXG4gKiBAcGFyYW0geDEge251bWJlcn0gVGhlIHgtY29vcmRpbmF0ZSBvZiB0aGUgYmVnaW5uaW5nIG9mIHRoZSBhcmNcbiAqIEBwYXJhbSB5MSB7bnVtYmVyfSBUaGUgeS1jb29yZGluYXRlIG9mIHRoZSBiZWdpbm5pbmcgb2YgdGhlIGFyY1xuICogQHBhcmFtIHgyIHtudW1iZXJ9IFRoZSB4LWNvb3JkaW5hdGUgb2YgdGhlIGVuZCBvZiB0aGUgYXJjXG4gKiBAcGFyYW0geTIge251bWJlcn0gVGhlIHktY29vcmRpbmF0ZSBvZiB0aGUgZW5kIG9mIHRoZSBhcmNcbiAqIEBwYXJhbSByYWRpdXMge251bWJlcn0gVGhlIHJhZGl1cyBvZiB0aGUgYXJjXG4gKiBAcmV0dXJuIHtQSVhJLkdyYXBoaWNzfVxuICovXG5HcmFwaGljcy5wcm90b3R5cGUuYXJjVG8gPSBmdW5jdGlvbiAoeDEsIHkxLCB4MiwgeTIsIHJhZGl1cylcbntcbiAgICBpZiAodGhpcy5jdXJyZW50UGF0aClcbiAgICB7XG4gICAgICAgIGlmICh0aGlzLmN1cnJlbnRQYXRoLnNoYXBlLnBvaW50cy5sZW5ndGggPT09IDApXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuY3VycmVudFBhdGguc2hhcGUucG9pbnRzLnB1c2goeDEsIHkxKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICB0aGlzLm1vdmVUbyh4MSwgeTEpO1xuICAgIH1cblxuICAgIHZhciBwb2ludHMgPSB0aGlzLmN1cnJlbnRQYXRoLnNoYXBlLnBvaW50cyxcbiAgICAgICAgZnJvbVggPSBwb2ludHNbcG9pbnRzLmxlbmd0aC0yXSxcbiAgICAgICAgZnJvbVkgPSBwb2ludHNbcG9pbnRzLmxlbmd0aC0xXSxcbiAgICAgICAgYTEgPSBmcm9tWSAtIHkxLFxuICAgICAgICBiMSA9IGZyb21YIC0geDEsXG4gICAgICAgIGEyID0geTIgICAtIHkxLFxuICAgICAgICBiMiA9IHgyICAgLSB4MSxcbiAgICAgICAgbW0gPSBNYXRoLmFicyhhMSAqIGIyIC0gYjEgKiBhMik7XG5cbiAgICBpZiAobW0gPCAxLjBlLTggfHwgcmFkaXVzID09PSAwKVxuICAgIHtcbiAgICAgICAgaWYgKHBvaW50c1twb2ludHMubGVuZ3RoLTJdICE9PSB4MSB8fCBwb2ludHNbcG9pbnRzLmxlbmd0aC0xXSAhPT0geTEpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHBvaW50cy5wdXNoKHgxLCB5MSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgdmFyIGRkID0gYTEgKiBhMSArIGIxICogYjEsXG4gICAgICAgICAgICBjYyA9IGEyICogYTIgKyBiMiAqIGIyLFxuICAgICAgICAgICAgdHQgPSBhMSAqIGEyICsgYjEgKiBiMixcbiAgICAgICAgICAgIGsxID0gcmFkaXVzICogTWF0aC5zcXJ0KGRkKSAvIG1tLFxuICAgICAgICAgICAgazIgPSByYWRpdXMgKiBNYXRoLnNxcnQoY2MpIC8gbW0sXG4gICAgICAgICAgICBqMSA9IGsxICogdHQgLyBkZCxcbiAgICAgICAgICAgIGoyID0gazIgKiB0dCAvIGNjLFxuICAgICAgICAgICAgY3ggPSBrMSAqIGIyICsgazIgKiBiMSxcbiAgICAgICAgICAgIGN5ID0gazEgKiBhMiArIGsyICogYTEsXG4gICAgICAgICAgICBweCA9IGIxICogKGsyICsgajEpLFxuICAgICAgICAgICAgcHkgPSBhMSAqIChrMiArIGoxKSxcbiAgICAgICAgICAgIHF4ID0gYjIgKiAoazEgKyBqMiksXG4gICAgICAgICAgICBxeSA9IGEyICogKGsxICsgajIpLFxuICAgICAgICAgICAgc3RhcnRBbmdsZSA9IE1hdGguYXRhbjIocHkgLSBjeSwgcHggLSBjeCksXG4gICAgICAgICAgICBlbmRBbmdsZSAgID0gTWF0aC5hdGFuMihxeSAtIGN5LCBxeCAtIGN4KTtcblxuICAgICAgICB0aGlzLmFyYyhjeCArIHgxLCBjeSArIHkxLCByYWRpdXMsIHN0YXJ0QW5nbGUsIGVuZEFuZ2xlLCBiMSAqIGEyID4gYjIgKiBhMSk7XG4gICAgfVxuXG4gICAgdGhpcy5kaXJ0eSA9IHRoaXMuYm91bmRzRGlydHkgPSB0cnVlO1xuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIFRoZSBhcmMgbWV0aG9kIGNyZWF0ZXMgYW4gYXJjL2N1cnZlICh1c2VkIHRvIGNyZWF0ZSBjaXJjbGVzLCBvciBwYXJ0cyBvZiBjaXJjbGVzKS5cbiAqXG4gKiBAcGFyYW0gY3gge251bWJlcn0gVGhlIHgtY29vcmRpbmF0ZSBvZiB0aGUgY2VudGVyIG9mIHRoZSBjaXJjbGVcbiAqIEBwYXJhbSBjeSB7bnVtYmVyfSBUaGUgeS1jb29yZGluYXRlIG9mIHRoZSBjZW50ZXIgb2YgdGhlIGNpcmNsZVxuICogQHBhcmFtIHJhZGl1cyB7bnVtYmVyfSBUaGUgcmFkaXVzIG9mIHRoZSBjaXJjbGVcbiAqIEBwYXJhbSBzdGFydEFuZ2xlIHtudW1iZXJ9IFRoZSBzdGFydGluZyBhbmdsZSwgaW4gcmFkaWFucyAoMCBpcyBhdCB0aGUgMyBvJ2Nsb2NrIHBvc2l0aW9uIG9mIHRoZSBhcmMncyBjaXJjbGUpXG4gKiBAcGFyYW0gZW5kQW5nbGUge251bWJlcn0gVGhlIGVuZGluZyBhbmdsZSwgaW4gcmFkaWFuc1xuICogQHBhcmFtIGFudGljbG9ja3dpc2Uge2Jvb2xlYW59IE9wdGlvbmFsLiBTcGVjaWZpZXMgd2hldGhlciB0aGUgZHJhd2luZyBzaG91bGQgYmUgY291bnRlcmNsb2Nrd2lzZSBvciBjbG9ja3dpc2UuIEZhbHNlIGlzIGRlZmF1bHQsIGFuZCBpbmRpY2F0ZXMgY2xvY2t3aXNlLCB3aGlsZSB0cnVlIGluZGljYXRlcyBjb3VudGVyLWNsb2Nrd2lzZS5cbiAqIEByZXR1cm4ge1BJWEkuR3JhcGhpY3N9XG4gKi9cbkdyYXBoaWNzLnByb3RvdHlwZS5hcmMgPSBmdW5jdGlvbihjeCwgY3ksIHJhZGl1cywgc3RhcnRBbmdsZSwgZW5kQW5nbGUsIGFudGljbG9ja3dpc2UpXG57XG4gICAgYW50aWNsb2Nrd2lzZSA9IGFudGljbG9ja3dpc2UgfHwgZmFsc2U7XG5cbiAgICBpZiAoc3RhcnRBbmdsZSA9PT0gZW5kQW5nbGUpXG4gICAge1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBpZiggIWFudGljbG9ja3dpc2UgJiYgZW5kQW5nbGUgPD0gc3RhcnRBbmdsZSApXG4gICAge1xuICAgICAgICBlbmRBbmdsZSArPSBNYXRoLlBJICogMjtcbiAgICB9XG4gICAgZWxzZSBpZiggYW50aWNsb2Nrd2lzZSAmJiBzdGFydEFuZ2xlIDw9IGVuZEFuZ2xlIClcbiAgICB7XG4gICAgICAgIHN0YXJ0QW5nbGUgKz0gTWF0aC5QSSAqIDI7XG4gICAgfVxuXG4gICAgdmFyIHN3ZWVwID0gYW50aWNsb2Nrd2lzZSA/IChzdGFydEFuZ2xlIC0gZW5kQW5nbGUpICogLTEgOiAoZW5kQW5nbGUgLSBzdGFydEFuZ2xlKTtcbiAgICB2YXIgc2VncyA9ICBNYXRoLmNlaWwoTWF0aC5hYnMoc3dlZXApIC8gKE1hdGguUEkgKiAyKSkgKiA0MDtcblxuICAgIGlmKHN3ZWVwID09PSAwKVxuICAgIHtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgdmFyIHN0YXJ0WCA9IGN4ICsgTWF0aC5jb3Moc3RhcnRBbmdsZSkgKiByYWRpdXM7XG4gICAgdmFyIHN0YXJ0WSA9IGN5ICsgTWF0aC5zaW4oc3RhcnRBbmdsZSkgKiByYWRpdXM7XG5cbiAgICBpZiAodGhpcy5jdXJyZW50UGF0aClcbiAgICB7XG4gICAgICAgIHRoaXMuY3VycmVudFBhdGguc2hhcGUucG9pbnRzLnB1c2goc3RhcnRYLCBzdGFydFkpO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICB0aGlzLm1vdmVUbyhzdGFydFgsIHN0YXJ0WSk7XG4gICAgfVxuXG4gICAgdmFyIHBvaW50cyA9IHRoaXMuY3VycmVudFBhdGguc2hhcGUucG9pbnRzO1xuXG4gICAgdmFyIHRoZXRhID0gc3dlZXAvKHNlZ3MqMik7XG4gICAgdmFyIHRoZXRhMiA9IHRoZXRhKjI7XG5cbiAgICB2YXIgY1RoZXRhID0gTWF0aC5jb3ModGhldGEpO1xuICAgIHZhciBzVGhldGEgPSBNYXRoLnNpbih0aGV0YSk7XG5cbiAgICB2YXIgc2VnTWludXMgPSBzZWdzIC0gMTtcblxuICAgIHZhciByZW1haW5kZXIgPSAoIHNlZ01pbnVzICUgMSApIC8gc2VnTWludXM7XG5cbiAgICBmb3IodmFyIGk9MDsgaTw9c2VnTWludXM7IGkrKylcbiAgICB7XG4gICAgICAgIHZhciByZWFsID0gIGkgKyByZW1haW5kZXIgKiBpO1xuXG5cbiAgICAgICAgdmFyIGFuZ2xlID0gKCh0aGV0YSkgKyBzdGFydEFuZ2xlICsgKHRoZXRhMiAqIHJlYWwpKTtcblxuICAgICAgICB2YXIgYyA9IE1hdGguY29zKGFuZ2xlKTtcbiAgICAgICAgdmFyIHMgPSAtTWF0aC5zaW4oYW5nbGUpO1xuXG4gICAgICAgIHBvaW50cy5wdXNoKCggKGNUaGV0YSAqICBjKSArIChzVGhldGEgKiBzKSApICogcmFkaXVzICsgY3gsXG4gICAgICAgICAgICAgICAgICAgICggKGNUaGV0YSAqIC1zKSArIChzVGhldGEgKiBjKSApICogcmFkaXVzICsgY3kpO1xuICAgIH1cblxuICAgIHRoaXMuZGlydHkgPSB0aGlzLmJvdW5kc0RpcnR5ID0gdHJ1ZTtcblxuICAgIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBTcGVjaWZpZXMgYSBzaW1wbGUgb25lLWNvbG9yIGZpbGwgdGhhdCBzdWJzZXF1ZW50IGNhbGxzIHRvIG90aGVyIEdyYXBoaWNzIG1ldGhvZHNcbiAqIChzdWNoIGFzIGxpbmVUbygpIG9yIGRyYXdDaXJjbGUoKSkgdXNlIHdoZW4gZHJhd2luZy5cbiAqXG4gKiBAcGFyYW0gY29sb3Ige251bWJlcn0gdGhlIGNvbG9yIG9mIHRoZSBmaWxsXG4gKiBAcGFyYW0gYWxwaGEge251bWJlcn0gdGhlIGFscGhhIG9mIHRoZSBmaWxsXG4gKiBAcmV0dXJuIHtQSVhJLkdyYXBoaWNzfVxuICovXG5HcmFwaGljcy5wcm90b3R5cGUuYmVnaW5GaWxsID0gZnVuY3Rpb24gKGNvbG9yLCBhbHBoYSlcbntcbiAgICB0aGlzLmZpbGxpbmcgPSB0cnVlO1xuICAgIHRoaXMuZmlsbENvbG9yID0gY29sb3IgfHwgMDtcbiAgICB0aGlzLmZpbGxBbHBoYSA9IChhbHBoYSA9PT0gdW5kZWZpbmVkKSA/IDEgOiBhbHBoYTtcblxuICAgIGlmICh0aGlzLmN1cnJlbnRQYXRoKVxuICAgIHtcbiAgICAgICAgaWYgKHRoaXMuY3VycmVudFBhdGguc2hhcGUucG9pbnRzLmxlbmd0aCA8PSAyKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRQYXRoLmZpbGwgPSB0aGlzLmZpbGxpbmc7XG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRQYXRoLmZpbGxDb2xvciA9IHRoaXMuZmlsbENvbG9yO1xuICAgICAgICAgICAgdGhpcy5jdXJyZW50UGF0aC5maWxsQWxwaGEgPSB0aGlzLmZpbGxBbHBoYTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogQXBwbGllcyBhIGZpbGwgdG8gdGhlIGxpbmVzIGFuZCBzaGFwZXMgdGhhdCB3ZXJlIGFkZGVkIHNpbmNlIHRoZSBsYXN0IGNhbGwgdG8gdGhlIGJlZ2luRmlsbCgpIG1ldGhvZC5cbiAqXG4gKiBAcmV0dXJuIHtHcmFwaGljc31cbiAqL1xuR3JhcGhpY3MucHJvdG90eXBlLmVuZEZpbGwgPSBmdW5jdGlvbiAoKVxue1xuICAgIHRoaXMuZmlsbGluZyA9IGZhbHNlO1xuICAgIHRoaXMuZmlsbENvbG9yID0gbnVsbDtcbiAgICB0aGlzLmZpbGxBbHBoYSA9IDE7XG5cbiAgICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICpcbiAqIEBwYXJhbSB4IHtudW1iZXJ9IFRoZSBYIGNvb3JkIG9mIHRoZSB0b3AtbGVmdCBvZiB0aGUgcmVjdGFuZ2xlXG4gKiBAcGFyYW0geSB7bnVtYmVyfSBUaGUgWSBjb29yZCBvZiB0aGUgdG9wLWxlZnQgb2YgdGhlIHJlY3RhbmdsZVxuICogQHBhcmFtIHdpZHRoIHtudW1iZXJ9IFRoZSB3aWR0aCBvZiB0aGUgcmVjdGFuZ2xlXG4gKiBAcGFyYW0gaGVpZ2h0IHtudW1iZXJ9IFRoZSBoZWlnaHQgb2YgdGhlIHJlY3RhbmdsZVxuICogQHJldHVybiB7UElYSS5HcmFwaGljc31cbiAqL1xuR3JhcGhpY3MucHJvdG90eXBlLmRyYXdSZWN0ID0gZnVuY3Rpb24gKCB4LCB5LCB3aWR0aCwgaGVpZ2h0IClcbntcbiAgICB0aGlzLmRyYXdTaGFwZShuZXcgbWF0aC5SZWN0YW5nbGUoeCx5LCB3aWR0aCwgaGVpZ2h0KSk7XG5cbiAgICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICpcbiAqIEBwYXJhbSB4IHtudW1iZXJ9IFRoZSBYIGNvb3JkIG9mIHRoZSB0b3AtbGVmdCBvZiB0aGUgcmVjdGFuZ2xlXG4gKiBAcGFyYW0geSB7bnVtYmVyfSBUaGUgWSBjb29yZCBvZiB0aGUgdG9wLWxlZnQgb2YgdGhlIHJlY3RhbmdsZVxuICogQHBhcmFtIHdpZHRoIHtudW1iZXJ9IFRoZSB3aWR0aCBvZiB0aGUgcmVjdGFuZ2xlXG4gKiBAcGFyYW0gaGVpZ2h0IHtudW1iZXJ9IFRoZSBoZWlnaHQgb2YgdGhlIHJlY3RhbmdsZVxuICogQHBhcmFtIHJhZGl1cyB7bnVtYmVyfSBSYWRpdXMgb2YgdGhlIHJlY3RhbmdsZSBjb3JuZXJzXG4gKiBAcmV0dXJuIHtQSVhJLkdyYXBoaWNzfVxuICovXG5HcmFwaGljcy5wcm90b3R5cGUuZHJhd1JvdW5kZWRSZWN0ID0gZnVuY3Rpb24gKCB4LCB5LCB3aWR0aCwgaGVpZ2h0LCByYWRpdXMgKVxue1xuICAgIHRoaXMuZHJhd1NoYXBlKG5ldyBtYXRoLlJvdW5kZWRSZWN0YW5nbGUoeCwgeSwgd2lkdGgsIGhlaWdodCwgcmFkaXVzKSk7XG5cbiAgICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogRHJhd3MgYSBjaXJjbGUuXG4gKlxuICogQHBhcmFtIHgge251bWJlcn0gVGhlIFggY29vcmRpbmF0ZSBvZiB0aGUgY2VudGVyIG9mIHRoZSBjaXJjbGVcbiAqIEBwYXJhbSB5IHtudW1iZXJ9IFRoZSBZIGNvb3JkaW5hdGUgb2YgdGhlIGNlbnRlciBvZiB0aGUgY2lyY2xlXG4gKiBAcGFyYW0gcmFkaXVzIHtudW1iZXJ9IFRoZSByYWRpdXMgb2YgdGhlIGNpcmNsZVxuICogQHJldHVybiB7UElYSS5HcmFwaGljc31cbiAqL1xuR3JhcGhpY3MucHJvdG90eXBlLmRyYXdDaXJjbGUgPSBmdW5jdGlvbiAoeCwgeSwgcmFkaXVzKVxue1xuICAgIHRoaXMuZHJhd1NoYXBlKG5ldyBtYXRoLkNpcmNsZSh4LHksIHJhZGl1cykpO1xuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIERyYXdzIGFuIGVsbGlwc2UuXG4gKlxuICogQHBhcmFtIHgge251bWJlcn0gVGhlIFggY29vcmRpbmF0ZSBvZiB0aGUgY2VudGVyIG9mIHRoZSBlbGxpcHNlXG4gKiBAcGFyYW0geSB7bnVtYmVyfSBUaGUgWSBjb29yZGluYXRlIG9mIHRoZSBjZW50ZXIgb2YgdGhlIGVsbGlwc2VcbiAqIEBwYXJhbSB3aWR0aCB7bnVtYmVyfSBUaGUgaGFsZiB3aWR0aCBvZiB0aGUgZWxsaXBzZVxuICogQHBhcmFtIGhlaWdodCB7bnVtYmVyfSBUaGUgaGFsZiBoZWlnaHQgb2YgdGhlIGVsbGlwc2VcbiAqIEByZXR1cm4ge1BJWEkuR3JhcGhpY3N9XG4gKi9cbkdyYXBoaWNzLnByb3RvdHlwZS5kcmF3RWxsaXBzZSA9IGZ1bmN0aW9uICh4LCB5LCB3aWR0aCwgaGVpZ2h0KVxue1xuICAgIHRoaXMuZHJhd1NoYXBlKG5ldyBtYXRoLkVsbGlwc2UoeCwgeSwgd2lkdGgsIGhlaWdodCkpO1xuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIERyYXdzIGEgcG9seWdvbiB1c2luZyB0aGUgZ2l2ZW4gcGF0aC5cbiAqXG4gKiBAcGFyYW0gcGF0aCB7bnVtYmVyW118UElYSS5Qb2ludFtdfSBUaGUgcGF0aCBkYXRhIHVzZWQgdG8gY29uc3RydWN0IHRoZSBwb2x5Z29uLlxuICogQHJldHVybiB7UElYSS5HcmFwaGljc31cbiAqL1xuR3JhcGhpY3MucHJvdG90eXBlLmRyYXdQb2x5Z29uID0gZnVuY3Rpb24gKHBhdGgpXG57XG4gICAgLy8gcHJldmVudHMgYW4gYXJndW1lbnQgYXNzaWdubWVudCBkZW9wdFxuICAgIC8vIHNlZSBzZWN0aW9uIDMuMTogaHR0cHM6Ly9naXRodWIuY29tL3BldGthYW50b25vdi9ibHVlYmlyZC93aWtpL09wdGltaXphdGlvbi1raWxsZXJzIzMtbWFuYWdpbmctYXJndW1lbnRzXG4gICAgdmFyIHBvaW50cyA9IHBhdGg7XG5cbiAgICB2YXIgY2xvc2VkID0gdHJ1ZTtcblxuICAgIGlmIChwb2ludHMgaW5zdGFuY2VvZiBtYXRoLlBvbHlnb24pXG4gICAge1xuICAgICAgICBjbG9zZWQgPSBwb2ludHMuY2xvc2VkO1xuICAgICAgICBwb2ludHMgPSBwb2ludHMucG9pbnRzO1xuICAgIH1cblxuICAgIGlmICghQXJyYXkuaXNBcnJheShwb2ludHMpKVxuICAgIHtcbiAgICAgICAgLy8gcHJldmVudHMgYW4gYXJndW1lbnQgbGVhayBkZW9wdFxuICAgICAgICAvLyBzZWUgc2VjdGlvbiAzLjI6IGh0dHBzOi8vZ2l0aHViLmNvbS9wZXRrYWFudG9ub3YvYmx1ZWJpcmQvd2lraS9PcHRpbWl6YXRpb24ta2lsbGVycyMzLW1hbmFnaW5nLWFyZ3VtZW50c1xuICAgICAgICBwb2ludHMgPSBuZXcgQXJyYXkoYXJndW1lbnRzLmxlbmd0aCk7XG5cbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwb2ludHMubGVuZ3RoOyArK2kpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHBvaW50c1tpXSA9IGFyZ3VtZW50c1tpXTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHZhciBzaGFwZSA9IG5ldyBtYXRoLlBvbHlnb24ocG9pbnRzKTtcbiAgICBzaGFwZS5jbG9zZWQgPSBjbG9zZWQ7XG5cbiAgICB0aGlzLmRyYXdTaGFwZShzaGFwZSk7XG5cbiAgICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogQ2xlYXJzIHRoZSBncmFwaGljcyB0aGF0IHdlcmUgZHJhd24gdG8gdGhpcyBHcmFwaGljcyBvYmplY3QsIGFuZCByZXNldHMgZmlsbCBhbmQgbGluZSBzdHlsZSBzZXR0aW5ncy5cbiAqXG4gKiBAcmV0dXJuIHtQSVhJLkdyYXBoaWNzfVxuICovXG5HcmFwaGljcy5wcm90b3R5cGUuY2xlYXIgPSBmdW5jdGlvbiAoKVxue1xuICAgIHRoaXMubGluZVdpZHRoID0gMDtcbiAgICB0aGlzLmZpbGxpbmcgPSBmYWxzZTtcblxuICAgIHRoaXMuZGlydHkgPSB0cnVlO1xuICAgIHRoaXMuY2xlYXJEaXJ0eSA9IHRydWU7XG4gICAgdGhpcy5ncmFwaGljc0RhdGEgPSBbXTtcblxuICAgIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBVc2VmdWwgZnVuY3Rpb24gdGhhdCByZXR1cm5zIGEgdGV4dHVyZSBvZiB0aGUgZ3JhcGhpY3Mgb2JqZWN0IHRoYXQgY2FuIHRoZW4gYmUgdXNlZCB0byBjcmVhdGUgc3ByaXRlc1xuICogVGhpcyBjYW4gYmUgcXVpdGUgdXNlZnVsIGlmIHlvdXIgZ2VvbWV0cnkgaXMgY29tcGxpY2F0ZWQgYW5kIG5lZWRzIHRvIGJlIHJldXNlZCBtdWx0aXBsZSB0aW1lcy5cbiAqXG4gKiBAcGFyYW0gcmVzb2x1dGlvbiB7bnVtYmVyfSBUaGUgcmVzb2x1dGlvbiBvZiB0aGUgdGV4dHVyZSBiZWluZyBnZW5lcmF0ZWRcbiAqIEBwYXJhbSBzY2FsZU1vZGUge251bWJlcn0gU2hvdWxkIGJlIG9uZSBvZiB0aGUgc2NhbGVNb2RlIGNvbnN0c1xuICogQHJldHVybiB7UElYSS5UZXh0dXJlfSBhIHRleHR1cmUgb2YgdGhlIGdyYXBoaWNzIG9iamVjdFxuICovXG5HcmFwaGljcy5wcm90b3R5cGUuZ2VuZXJhdGVUZXh0dXJlID0gZnVuY3Rpb24gKHJlbmRlcmVyLCByZXNvbHV0aW9uLCBzY2FsZU1vZGUpXG57XG5cbiAgICByZXNvbHV0aW9uID0gcmVzb2x1dGlvbiB8fCAxO1xuXG4gICAgdmFyIGJvdW5kcyA9IHRoaXMuZ2V0TG9jYWxCb3VuZHMoKTtcblxuICAgIHZhciBjYW52YXNCdWZmZXIgPSBuZXcgQ2FudmFzQnVmZmVyKGJvdW5kcy53aWR0aCAqIHJlc29sdXRpb24sIGJvdW5kcy5oZWlnaHQgKiByZXNvbHV0aW9uKTtcblxuICAgIHZhciB0ZXh0dXJlID0gVGV4dHVyZS5mcm9tQ2FudmFzKGNhbnZhc0J1ZmZlci5jYW52YXMsIHNjYWxlTW9kZSk7XG4gICAgdGV4dHVyZS5iYXNlVGV4dHVyZS5yZXNvbHV0aW9uID0gcmVzb2x1dGlvbjtcblxuICAgIGNhbnZhc0J1ZmZlci5jb250ZXh0LnNjYWxlKHJlc29sdXRpb24sIHJlc29sdXRpb24pO1xuXG4gICAgY2FudmFzQnVmZmVyLmNvbnRleHQudHJhbnNsYXRlKC1ib3VuZHMueCwtYm91bmRzLnkpO1xuXG4gICAgQ2FudmFzR3JhcGhpY3MucmVuZGVyR3JhcGhpY3ModGhpcywgY2FudmFzQnVmZmVyLmNvbnRleHQpO1xuXG4gICAgcmV0dXJuIHRleHR1cmU7XG59O1xuXG4vKipcbiAqIFJlbmRlcnMgdGhlIG9iamVjdCB1c2luZyB0aGUgV2ViR0wgcmVuZGVyZXJcbiAqXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcn1cbiAqIEBwcml2YXRlXG4gKi9cbkdyYXBoaWNzLnByb3RvdHlwZS5fcmVuZGVyV2ViR0wgPSBmdW5jdGlvbiAocmVuZGVyZXIpXG57XG4gICAgLy8gaWYgdGhlIHNwcml0ZSBpcyBub3QgdmlzaWJsZSBvciB0aGUgYWxwaGEgaXMgMCB0aGVuIG5vIG5lZWQgdG8gcmVuZGVyIHRoaXMgZWxlbWVudFxuXG4gICAgaWYgKHRoaXMuZ2xEaXJ0eSlcbiAgICB7XG4gICAgICAgIHRoaXMuZGlydHkgPSB0cnVlO1xuICAgICAgICB0aGlzLmdsRGlydHkgPSBmYWxzZTtcbiAgICB9XG5cbiAgICByZW5kZXJlci5zZXRPYmplY3RSZW5kZXJlcihyZW5kZXJlci5wbHVnaW5zLmdyYXBoaWNzKTtcbiAgICByZW5kZXJlci5wbHVnaW5zLmdyYXBoaWNzLnJlbmRlcih0aGlzKTtcblxufTtcblxuLyoqXG4gKiBSZW5kZXJzIHRoZSBvYmplY3QgdXNpbmcgdGhlIENhbnZhcyByZW5kZXJlclxuICpcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5DYW52YXNSZW5kZXJlcn1cbiAqIEBwcml2YXRlXG4gKi9cbkdyYXBoaWNzLnByb3RvdHlwZS5fcmVuZGVyQ2FudmFzID0gZnVuY3Rpb24gKHJlbmRlcmVyKVxue1xuICAgIGlmICh0aGlzLmlzTWFzayA9PT0gdHJ1ZSlcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBpZiB0aGUgdGludCBoYXMgY2hhbmdlZCwgc2V0IHRoZSBncmFwaGljcyBvYmplY3QgdG8gZGlydHkuXG4gICAgaWYgKHRoaXMuX3ByZXZUaW50ICE9PSB0aGlzLnRpbnQpIHtcbiAgICAgICAgdGhpcy5kaXJ0eSA9IHRydWU7XG4gICAgfVxuXG4gICAgLy8gdGhpcyBjb2RlIG1heSBzdGlsbCBiZSBuZWVkZWQgc28gbGVhdmluZyBmb3Igbm93Li5cbiAgICAvL1xuICAgIC8qXG4gICAgaWYgKHRoaXMuX2NhY2hlQXNCaXRtYXApXG4gICAge1xuICAgICAgICBpZiAodGhpcy5kaXJ0eSB8fCB0aGlzLmNhY2hlZFNwcml0ZURpcnR5KVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLl9nZW5lcmF0ZUNhY2hlZFNwcml0ZSgpO1xuXG4gICAgICAgICAgICAvLyB3ZSB3aWxsIGFsc28gbmVlZCB0byB1cGRhdGUgdGhlIHRleHR1cmVcbiAgICAgICAgICAgIHRoaXMudXBkYXRlQ2FjaGVkU3ByaXRlVGV4dHVyZSgpO1xuXG4gICAgICAgICAgICB0aGlzLmNhY2hlZFNwcml0ZURpcnR5ID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLmRpcnR5ID0gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9jYWNoZWRTcHJpdGUuYWxwaGEgPSB0aGlzLmFscGhhO1xuXG4gICAgICAgIFNwcml0ZS5wcm90b3R5cGUuX3JlbmRlckNhbnZhcy5jYWxsKHRoaXMuX2NhY2hlZFNwcml0ZSwgcmVuZGVyZXIpO1xuXG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgKi9cbiAgICB2YXIgY29udGV4dCA9IHJlbmRlcmVyLmNvbnRleHQ7XG4gICAgdmFyIHRyYW5zZm9ybSA9IHRoaXMud29ybGRUcmFuc2Zvcm07XG5cbiAgICB2YXIgY29tcG9zaXRlT3BlcmF0aW9uID0gcmVuZGVyZXIuYmxlbmRNb2Rlc1t0aGlzLmJsZW5kTW9kZV07XG4gICAgaWYgKGNvbXBvc2l0ZU9wZXJhdGlvbiAhPT0gY29udGV4dC5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb24pXG4gICAge1xuICAgICAgICBjb250ZXh0Lmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbiA9IGNvbXBvc2l0ZU9wZXJhdGlvbjtcbiAgICB9XG5cbiAgICB2YXIgcmVzb2x1dGlvbiA9IHJlbmRlcmVyLnJlc29sdXRpb247XG4gICAgY29udGV4dC5zZXRUcmFuc2Zvcm0oXG4gICAgICAgIHRyYW5zZm9ybS5hICogcmVzb2x1dGlvbixcbiAgICAgICAgdHJhbnNmb3JtLmIgKiByZXNvbHV0aW9uLFxuICAgICAgICB0cmFuc2Zvcm0uYyAqIHJlc29sdXRpb24sXG4gICAgICAgIHRyYW5zZm9ybS5kICogcmVzb2x1dGlvbixcbiAgICAgICAgdHJhbnNmb3JtLnR4ICogcmVzb2x1dGlvbixcbiAgICAgICAgdHJhbnNmb3JtLnR5ICogcmVzb2x1dGlvblxuICAgICk7XG5cbiAgICBDYW52YXNHcmFwaGljcy5yZW5kZXJHcmFwaGljcyh0aGlzLCBjb250ZXh0KTtcbn07XG5cbi8qKlxuICogUmV0cmlldmVzIHRoZSBib3VuZHMgb2YgdGhlIGdyYXBoaWMgc2hhcGUgYXMgYSByZWN0YW5nbGUgb2JqZWN0XG4gKlxuICogQHBhcmFtIFttYXRyaXhdIHtQSVhJLk1hdHJpeH0gVGhlIHdvcmxkIHRyYW5zZm9ybSBtYXRyaXggdG8gdXNlLCBkZWZhdWx0cyB0byB0aGlzXG4gKiAgb2JqZWN0J3Mgd29ybGRUcmFuc2Zvcm0uXG4gKiBAcmV0dXJuIHtQSVhJLlJlY3RhbmdsZX0gdGhlIHJlY3Rhbmd1bGFyIGJvdW5kaW5nIGFyZWFcbiAqL1xuR3JhcGhpY3MucHJvdG90eXBlLmdldEJvdW5kcyA9IGZ1bmN0aW9uIChtYXRyaXgpXG57XG4gICAgaWYoIXRoaXMuX2N1cnJlbnRCb3VuZHMpXG4gICAge1xuXG4gICAgICAgIC8vIHJldHVybiBhbiBlbXB0eSBvYmplY3QgaWYgdGhlIGl0ZW0gaXMgYSBtYXNrIVxuICAgICAgICBpZiAoIXRoaXMucmVuZGVyYWJsZSlcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIG1hdGguUmVjdGFuZ2xlLkVNUFRZO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuYm91bmRzRGlydHkpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlTG9jYWxCb3VuZHMoKTtcblxuICAgICAgICAgICAgdGhpcy5nbERpcnR5ID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMuY2FjaGVkU3ByaXRlRGlydHkgPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy5ib3VuZHNEaXJ0eSA9IGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGJvdW5kcyA9IHRoaXMuX2xvY2FsQm91bmRzO1xuXG4gICAgICAgIHZhciB3MCA9IGJvdW5kcy54O1xuICAgICAgICB2YXIgdzEgPSBib3VuZHMud2lkdGggKyBib3VuZHMueDtcblxuICAgICAgICB2YXIgaDAgPSBib3VuZHMueTtcbiAgICAgICAgdmFyIGgxID0gYm91bmRzLmhlaWdodCArIGJvdW5kcy55O1xuXG4gICAgICAgIHZhciB3b3JsZFRyYW5zZm9ybSA9IG1hdHJpeCB8fCB0aGlzLndvcmxkVHJhbnNmb3JtO1xuXG4gICAgICAgIHZhciBhID0gd29ybGRUcmFuc2Zvcm0uYTtcbiAgICAgICAgdmFyIGIgPSB3b3JsZFRyYW5zZm9ybS5iO1xuICAgICAgICB2YXIgYyA9IHdvcmxkVHJhbnNmb3JtLmM7XG4gICAgICAgIHZhciBkID0gd29ybGRUcmFuc2Zvcm0uZDtcbiAgICAgICAgdmFyIHR4ID0gd29ybGRUcmFuc2Zvcm0udHg7XG4gICAgICAgIHZhciB0eSA9IHdvcmxkVHJhbnNmb3JtLnR5O1xuXG4gICAgICAgIHZhciB4MSA9IGEgKiB3MSArIGMgKiBoMSArIHR4O1xuICAgICAgICB2YXIgeTEgPSBkICogaDEgKyBiICogdzEgKyB0eTtcblxuICAgICAgICB2YXIgeDIgPSBhICogdzAgKyBjICogaDEgKyB0eDtcbiAgICAgICAgdmFyIHkyID0gZCAqIGgxICsgYiAqIHcwICsgdHk7XG5cbiAgICAgICAgdmFyIHgzID0gYSAqIHcwICsgYyAqIGgwICsgdHg7XG4gICAgICAgIHZhciB5MyA9IGQgKiBoMCArIGIgKiB3MCArIHR5O1xuXG4gICAgICAgIHZhciB4NCA9ICBhICogdzEgKyBjICogaDAgKyB0eDtcbiAgICAgICAgdmFyIHk0ID0gIGQgKiBoMCArIGIgKiB3MSArIHR5O1xuXG4gICAgICAgIHZhciBtYXhYID0geDE7XG4gICAgICAgIHZhciBtYXhZID0geTE7XG5cbiAgICAgICAgdmFyIG1pblggPSB4MTtcbiAgICAgICAgdmFyIG1pblkgPSB5MTtcblxuICAgICAgICBtaW5YID0geDIgPCBtaW5YID8geDIgOiBtaW5YO1xuICAgICAgICBtaW5YID0geDMgPCBtaW5YID8geDMgOiBtaW5YO1xuICAgICAgICBtaW5YID0geDQgPCBtaW5YID8geDQgOiBtaW5YO1xuXG4gICAgICAgIG1pblkgPSB5MiA8IG1pblkgPyB5MiA6IG1pblk7XG4gICAgICAgIG1pblkgPSB5MyA8IG1pblkgPyB5MyA6IG1pblk7XG4gICAgICAgIG1pblkgPSB5NCA8IG1pblkgPyB5NCA6IG1pblk7XG5cbiAgICAgICAgbWF4WCA9IHgyID4gbWF4WCA/IHgyIDogbWF4WDtcbiAgICAgICAgbWF4WCA9IHgzID4gbWF4WCA/IHgzIDogbWF4WDtcbiAgICAgICAgbWF4WCA9IHg0ID4gbWF4WCA/IHg0IDogbWF4WDtcblxuICAgICAgICBtYXhZID0geTIgPiBtYXhZID8geTIgOiBtYXhZO1xuICAgICAgICBtYXhZID0geTMgPiBtYXhZID8geTMgOiBtYXhZO1xuICAgICAgICBtYXhZID0geTQgPiBtYXhZID8geTQgOiBtYXhZO1xuXG4gICAgICAgIHRoaXMuX2JvdW5kcy54ID0gbWluWDtcbiAgICAgICAgdGhpcy5fYm91bmRzLndpZHRoID0gbWF4WCAtIG1pblg7XG5cbiAgICAgICAgdGhpcy5fYm91bmRzLnkgPSBtaW5ZO1xuICAgICAgICB0aGlzLl9ib3VuZHMuaGVpZ2h0ID0gbWF4WSAtIG1pblk7XG5cbiAgICAgICAgdGhpcy5fY3VycmVudEJvdW5kcyA9IHRoaXMuX2JvdW5kcztcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5fY3VycmVudEJvdW5kcztcbn07XG5cbi8qKlxuKiBUZXN0cyBpZiBhIHBvaW50IGlzIGluc2lkZSB0aGlzIGdyYXBoaWNzIG9iamVjdFxuKlxuKiBAcGFyYW0gcG9pbnQge1BJWEkuUG9pbnR9IHRoZSBwb2ludCB0byB0ZXN0XG4qIEByZXR1cm4ge2Jvb2xlYW59IHRoZSByZXN1bHQgb2YgdGhlIHRlc3RcbiovXG5HcmFwaGljcy5wcm90b3R5cGUuY29udGFpbnNQb2ludCA9IGZ1bmN0aW9uKCBwb2ludCApXG57XG4gICAgdGhpcy53b3JsZFRyYW5zZm9ybS5hcHBseUludmVyc2UocG9pbnQsICB0ZW1wUG9pbnQpO1xuXG4gICAgdmFyIGdyYXBoaWNzRGF0YSA9IHRoaXMuZ3JhcGhpY3NEYXRhO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBncmFwaGljc0RhdGEubGVuZ3RoOyBpKyspXG4gICAge1xuICAgICAgICB2YXIgZGF0YSA9IGdyYXBoaWNzRGF0YVtpXTtcblxuICAgICAgICBpZiAoIWRhdGEuZmlsbClcbiAgICAgICAge1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBvbmx5IGRlYWwgd2l0aCBmaWxscy4uXG4gICAgICAgIGlmIChkYXRhLnNoYXBlKVxuICAgICAgICB7XG4gICAgICAgICAgICBpZiAoIGRhdGEuc2hhcGUuY29udGFpbnMoIHRlbXBQb2ludC54LCB0ZW1wUG9pbnQueSApIClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBmYWxzZTtcbn07XG5cbi8qKlxuICogVXBkYXRlIHRoZSBib3VuZHMgb2YgdGhlIG9iamVjdFxuICpcbiAqL1xuR3JhcGhpY3MucHJvdG90eXBlLnVwZGF0ZUxvY2FsQm91bmRzID0gZnVuY3Rpb24gKClcbntcbiAgICB2YXIgbWluWCA9IEluZmluaXR5O1xuICAgIHZhciBtYXhYID0gLUluZmluaXR5O1xuXG4gICAgdmFyIG1pblkgPSBJbmZpbml0eTtcbiAgICB2YXIgbWF4WSA9IC1JbmZpbml0eTtcblxuICAgIGlmICh0aGlzLmdyYXBoaWNzRGF0YS5sZW5ndGgpXG4gICAge1xuICAgICAgICB2YXIgc2hhcGUsIHBvaW50cywgeCwgeSwgdywgaDtcblxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuZ3JhcGhpY3NEYXRhLmxlbmd0aDsgaSsrKVxuICAgICAgICB7XG4gICAgICAgICAgICB2YXIgZGF0YSA9IHRoaXMuZ3JhcGhpY3NEYXRhW2ldO1xuICAgICAgICAgICAgdmFyIHR5cGUgPSBkYXRhLnR5cGU7XG4gICAgICAgICAgICB2YXIgbGluZVdpZHRoID0gZGF0YS5saW5lV2lkdGg7XG4gICAgICAgICAgICBzaGFwZSA9IGRhdGEuc2hhcGU7XG5cbiAgICAgICAgICAgIGlmICh0eXBlID09PSBDT05TVC5TSEFQRVMuUkVDVCB8fCB0eXBlID09PSBDT05TVC5TSEFQRVMuUlJFQylcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB4ID0gc2hhcGUueCAtIGxpbmVXaWR0aC8yO1xuICAgICAgICAgICAgICAgIHkgPSBzaGFwZS55IC0gbGluZVdpZHRoLzI7XG4gICAgICAgICAgICAgICAgdyA9IHNoYXBlLndpZHRoICsgbGluZVdpZHRoO1xuICAgICAgICAgICAgICAgIGggPSBzaGFwZS5oZWlnaHQgKyBsaW5lV2lkdGg7XG5cbiAgICAgICAgICAgICAgICBtaW5YID0geCA8IG1pblggPyB4IDogbWluWDtcbiAgICAgICAgICAgICAgICBtYXhYID0geCArIHcgPiBtYXhYID8geCArIHcgOiBtYXhYO1xuXG4gICAgICAgICAgICAgICAgbWluWSA9IHkgPCBtaW5ZID8geSA6IG1pblk7XG4gICAgICAgICAgICAgICAgbWF4WSA9IHkgKyBoID4gbWF4WSA/IHkgKyBoIDogbWF4WTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKHR5cGUgPT09IENPTlNULlNIQVBFUy5DSVJDKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHggPSBzaGFwZS54O1xuICAgICAgICAgICAgICAgIHkgPSBzaGFwZS55O1xuICAgICAgICAgICAgICAgIHcgPSBzaGFwZS5yYWRpdXMgKyBsaW5lV2lkdGgvMjtcbiAgICAgICAgICAgICAgICBoID0gc2hhcGUucmFkaXVzICsgbGluZVdpZHRoLzI7XG5cbiAgICAgICAgICAgICAgICBtaW5YID0geCAtIHcgPCBtaW5YID8geCAtIHcgOiBtaW5YO1xuICAgICAgICAgICAgICAgIG1heFggPSB4ICsgdyA+IG1heFggPyB4ICsgdyA6IG1heFg7XG5cbiAgICAgICAgICAgICAgICBtaW5ZID0geSAtIGggPCBtaW5ZID8geSAtIGggOiBtaW5ZO1xuICAgICAgICAgICAgICAgIG1heFkgPSB5ICsgaCA+IG1heFkgPyB5ICsgaCA6IG1heFk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmICh0eXBlID09PSBDT05TVC5TSEFQRVMuRUxJUClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB4ID0gc2hhcGUueDtcbiAgICAgICAgICAgICAgICB5ID0gc2hhcGUueTtcbiAgICAgICAgICAgICAgICB3ID0gc2hhcGUud2lkdGggKyBsaW5lV2lkdGgvMjtcbiAgICAgICAgICAgICAgICBoID0gc2hhcGUuaGVpZ2h0ICsgbGluZVdpZHRoLzI7XG5cbiAgICAgICAgICAgICAgICBtaW5YID0geCAtIHcgPCBtaW5YID8geCAtIHcgOiBtaW5YO1xuICAgICAgICAgICAgICAgIG1heFggPSB4ICsgdyA+IG1heFggPyB4ICsgdyA6IG1heFg7XG5cbiAgICAgICAgICAgICAgICBtaW5ZID0geSAtIGggPCBtaW5ZID8geSAtIGggOiBtaW5ZO1xuICAgICAgICAgICAgICAgIG1heFkgPSB5ICsgaCA+IG1heFkgPyB5ICsgaCA6IG1heFk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgLy8gUE9MWVxuICAgICAgICAgICAgICAgIHBvaW50cyA9IHNoYXBlLnBvaW50cztcblxuICAgICAgICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgcG9pbnRzLmxlbmd0aDsgaiArPSAyKVxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgeCA9IHBvaW50c1tqXTtcbiAgICAgICAgICAgICAgICAgICAgeSA9IHBvaW50c1tqKzFdO1xuXG4gICAgICAgICAgICAgICAgICAgIG1pblggPSB4LWxpbmVXaWR0aCA8IG1pblggPyB4LWxpbmVXaWR0aCA6IG1pblg7XG4gICAgICAgICAgICAgICAgICAgIG1heFggPSB4K2xpbmVXaWR0aCA+IG1heFggPyB4K2xpbmVXaWR0aCA6IG1heFg7XG5cbiAgICAgICAgICAgICAgICAgICAgbWluWSA9IHktbGluZVdpZHRoIDwgbWluWSA/IHktbGluZVdpZHRoIDogbWluWTtcbiAgICAgICAgICAgICAgICAgICAgbWF4WSA9IHkrbGluZVdpZHRoID4gbWF4WSA/IHkrbGluZVdpZHRoIDogbWF4WTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgbWluWCA9IDA7XG4gICAgICAgIG1heFggPSAwO1xuICAgICAgICBtaW5ZID0gMDtcbiAgICAgICAgbWF4WSA9IDA7XG4gICAgfVxuXG4gICAgdmFyIHBhZGRpbmcgPSB0aGlzLmJvdW5kc1BhZGRpbmc7XG5cbiAgICB0aGlzLl9sb2NhbEJvdW5kcy54ID0gbWluWCAtIHBhZGRpbmc7XG4gICAgdGhpcy5fbG9jYWxCb3VuZHMud2lkdGggPSAobWF4WCAtIG1pblgpICsgcGFkZGluZyAqIDI7XG5cbiAgICB0aGlzLl9sb2NhbEJvdW5kcy55ID0gbWluWSAtIHBhZGRpbmc7XG4gICAgdGhpcy5fbG9jYWxCb3VuZHMuaGVpZ2h0ID0gKG1heFkgLSBtaW5ZKSArIHBhZGRpbmcgKiAyO1xufTtcblxuLyoqXG4gKiBHZW5lcmF0ZXMgdGhlIGNhY2hlZCBzcHJpdGUgd2hlbiB0aGUgc3ByaXRlIGhhcyBjYWNoZUFzQml0bWFwID0gdHJ1ZVxuICpcbiAqIEBwcml2YXRlXG4gKi9cbi8qXG5HcmFwaGljcy5wcm90b3R5cGUuX2dlbmVyYXRlQ2FjaGVkU3ByaXRlID0gZnVuY3Rpb24gKClcbntcbiAgICB2YXIgYm91bmRzID0gdGhpcy5nZXRMb2NhbEJvdW5kcygpO1xuXG4gICAgaWYgKCF0aGlzLl9jYWNoZWRTcHJpdGUpXG4gICAge1xuICAgICAgICB2YXIgY2FudmFzQnVmZmVyID0gbmV3IENhbnZhc0J1ZmZlcihib3VuZHMud2lkdGgsIGJvdW5kcy5oZWlnaHQpO1xuICAgICAgICB2YXIgdGV4dHVyZSA9IFRleHR1cmUuZnJvbUNhbnZhcyhjYW52YXNCdWZmZXIuY2FudmFzKTtcblxuICAgICAgICB0aGlzLl9jYWNoZWRTcHJpdGUgPSBuZXcgU3ByaXRlKHRleHR1cmUpO1xuICAgICAgICB0aGlzLl9jYWNoZWRTcHJpdGUuYnVmZmVyID0gY2FudmFzQnVmZmVyO1xuXG4gICAgICAgIHRoaXMuX2NhY2hlZFNwcml0ZS53b3JsZFRyYW5zZm9ybSA9IHRoaXMud29ybGRUcmFuc2Zvcm07XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHRoaXMuX2NhY2hlZFNwcml0ZS5idWZmZXIucmVzaXplKGJvdW5kcy53aWR0aCwgYm91bmRzLmhlaWdodCk7XG4gICAgfVxuXG4gICAgLy8gbGV2ZXJhZ2UgdGhlIGFuY2hvciB0byBhY2NvdW50IGZvciB0aGUgb2Zmc2V0IG9mIHRoZSBlbGVtZW50XG4gICAgdGhpcy5fY2FjaGVkU3ByaXRlLmFuY2hvci54ID0gLSggYm91bmRzLnggLyBib3VuZHMud2lkdGggKTtcbiAgICB0aGlzLl9jYWNoZWRTcHJpdGUuYW5jaG9yLnkgPSAtKCBib3VuZHMueSAvIGJvdW5kcy5oZWlnaHQgKTtcblxuICAgIC8vIHRoaXMuX2NhY2hlZFNwcml0ZS5idWZmZXIuY29udGV4dC5zYXZlKCk7XG4gICAgdGhpcy5fY2FjaGVkU3ByaXRlLmJ1ZmZlci5jb250ZXh0LnRyYW5zbGF0ZSgtYm91bmRzLngsLWJvdW5kcy55KTtcblxuICAgIC8vIG1ha2Ugc3VyZSB3ZSBzZXQgdGhlIGFscGhhIG9mIHRoZSBncmFwaGljcyB0byAxIGZvciB0aGUgcmVuZGVyLi5cbiAgICB0aGlzLndvcmxkQWxwaGEgPSAxO1xuXG4gICAgLy8gbm93IHJlbmRlciB0aGUgZ3JhcGhpYy4uXG4gICAgQ2FudmFzR3JhcGhpY3MucmVuZGVyR3JhcGhpY3ModGhpcywgdGhpcy5fY2FjaGVkU3ByaXRlLmJ1ZmZlci5jb250ZXh0KTtcblxuICAgIHRoaXMuX2NhY2hlZFNwcml0ZS5hbHBoYSA9IHRoaXMuYWxwaGE7XG59O1xuKi9cbi8qKlxuICogVXBkYXRlcyB0ZXh0dXJlIHNpemUgYmFzZWQgb24gY2FudmFzIHNpemVcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG4vKlxuR3JhcGhpY3MucHJvdG90eXBlLnVwZGF0ZUNhY2hlZFNwcml0ZVRleHR1cmUgPSBmdW5jdGlvbiAoKVxue1xuICAgIHZhciBjYWNoZWRTcHJpdGUgPSB0aGlzLl9jYWNoZWRTcHJpdGU7XG4gICAgdmFyIHRleHR1cmUgPSBjYWNoZWRTcHJpdGUudGV4dHVyZTtcbiAgICB2YXIgY2FudmFzID0gY2FjaGVkU3ByaXRlLmJ1ZmZlci5jYW52YXM7XG5cbiAgICB0ZXh0dXJlLmJhc2VUZXh0dXJlLndpZHRoID0gY2FudmFzLndpZHRoO1xuICAgIHRleHR1cmUuYmFzZVRleHR1cmUuaGVpZ2h0ID0gY2FudmFzLmhlaWdodDtcbiAgICB0ZXh0dXJlLmNyb3Aud2lkdGggPSB0ZXh0dXJlLmZyYW1lLndpZHRoID0gY2FudmFzLndpZHRoO1xuICAgIHRleHR1cmUuY3JvcC5oZWlnaHQgPSB0ZXh0dXJlLmZyYW1lLmhlaWdodCA9IGNhbnZhcy5oZWlnaHQ7XG5cbiAgICBjYWNoZWRTcHJpdGUuX3dpZHRoID0gY2FudmFzLndpZHRoO1xuICAgIGNhY2hlZFNwcml0ZS5faGVpZ2h0ID0gY2FudmFzLmhlaWdodDtcblxuICAgIC8vIHVwZGF0ZSB0aGUgZGlydHkgYmFzZSB0ZXh0dXJlc1xuICAgIHRleHR1cmUuYmFzZVRleHR1cmUuZGlydHkoKTtcbn07Ki9cblxuLyoqXG4gKiBEZXN0cm95cyBhIHByZXZpb3VzIGNhY2hlZCBzcHJpdGUuXG4gKlxuICovXG4vKlxuR3JhcGhpY3MucHJvdG90eXBlLmRlc3Ryb3lDYWNoZWRTcHJpdGUgPSBmdW5jdGlvbiAoKVxue1xuICAgIHRoaXMuX2NhY2hlZFNwcml0ZS50ZXh0dXJlLmRlc3Ryb3kodHJ1ZSk7XG5cbiAgICAvLyBsZXQgdGhlIGdjIGNvbGxlY3QgdGhlIHVudXNlZCBzcHJpdGVcbiAgICAvLyBUT0RPIGNvdWxkIGJlIG9iamVjdCBwb29sZWQhXG4gICAgdGhpcy5fY2FjaGVkU3ByaXRlID0gbnVsbDtcbn07Ki9cblxuLyoqXG4gKiBEcmF3cyB0aGUgZ2l2ZW4gc2hhcGUgdG8gdGhpcyBHcmFwaGljcyBvYmplY3QuIENhbiBiZSBhbnkgb2YgQ2lyY2xlLCBSZWN0YW5nbGUsIEVsbGlwc2UsIExpbmUgb3IgUG9seWdvbi5cbiAqXG4gKiBAcGFyYW0gc2hhcGUge1BJWEkuQ2lyY2xlfFBJWEkuUmVjdGFuZ2xlfFBJWEkuRWxsaXBzZXxQSVhJLkxpbmV8UElYSS5Qb2x5Z29ufSBUaGUgc2hhcGUgb2JqZWN0IHRvIGRyYXcuXG4gKiBAcmV0dXJuIHtQSVhJLkdyYXBoaWNzRGF0YX0gVGhlIGdlbmVyYXRlZCBHcmFwaGljc0RhdGEgb2JqZWN0LlxuICovXG5HcmFwaGljcy5wcm90b3R5cGUuZHJhd1NoYXBlID0gZnVuY3Rpb24gKHNoYXBlKVxue1xuICAgIGlmICh0aGlzLmN1cnJlbnRQYXRoKVxuICAgIHtcbiAgICAgICAgLy8gY2hlY2sgY3VycmVudCBwYXRoIVxuICAgICAgICBpZiAodGhpcy5jdXJyZW50UGF0aC5zaGFwZS5wb2ludHMubGVuZ3RoIDw9IDIpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuZ3JhcGhpY3NEYXRhLnBvcCgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5jdXJyZW50UGF0aCA9IG51bGw7XG5cbiAgICB2YXIgZGF0YSA9IG5ldyBHcmFwaGljc0RhdGEodGhpcy5saW5lV2lkdGgsIHRoaXMubGluZUNvbG9yLCB0aGlzLmxpbmVBbHBoYSwgdGhpcy5maWxsQ29sb3IsIHRoaXMuZmlsbEFscGhhLCB0aGlzLmZpbGxpbmcsIHNoYXBlKTtcblxuICAgIHRoaXMuZ3JhcGhpY3NEYXRhLnB1c2goZGF0YSk7XG5cbiAgICBpZiAoZGF0YS50eXBlID09PSBDT05TVC5TSEFQRVMuUE9MWSlcbiAgICB7XG4gICAgICAgIGRhdGEuc2hhcGUuY2xvc2VkID0gZGF0YS5zaGFwZS5jbG9zZWQgfHwgdGhpcy5maWxsaW5nO1xuICAgICAgICB0aGlzLmN1cnJlbnRQYXRoID0gZGF0YTtcbiAgICB9XG5cbiAgICB0aGlzLmRpcnR5ID0gdGhpcy5ib3VuZHNEaXJ0eSA9IHRydWU7XG5cbiAgICByZXR1cm4gZGF0YTtcbn07XG5cbi8qKlxuICogRGVzdHJveXMgdGhlIEdyYXBoaWNzIG9iamVjdC5cbiAqL1xuR3JhcGhpY3MucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoKSB7XG4gICAgQ29udGFpbmVyLnByb3RvdHlwZS5kZXN0cm95LmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG5cbiAgICAvLyBkZXN0cm95IGVhY2ggb2YgdGhlIEdyYXBoaWNzRGF0YSBvYmplY3RzXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmdyYXBoaWNzRGF0YS5sZW5ndGg7ICsraSkge1xuICAgICAgICB0aGlzLmdyYXBoaWNzRGF0YVtpXS5kZXN0cm95KCk7XG4gICAgfVxuXG4gICAgLy8gZm9yIGVhY2ggd2ViZ2wgZGF0YSBlbnRyeSwgZGVzdHJveSB0aGUgV2ViR0xHcmFwaGljc0RhdGFcbiAgICBmb3IgKHZhciBpZCBpbiB0aGlzLl93ZWJnbCkge1xuICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IHRoaXMuX3dlYmdsW2lkXS5kYXRhLmxlbmd0aDsgKytqKSB7XG4gICAgICAgICAgICB0aGlzLl93ZWJnbFtpZF0uZGF0YVtqXS5kZXN0cm95KCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLmdyYXBoaWNzRGF0YSA9IG51bGw7XG5cbiAgICB0aGlzLmN1cnJlbnRQYXRoID0gbnVsbDtcbiAgICB0aGlzLl93ZWJnbCA9IG51bGw7XG4gICAgdGhpcy5fbG9jYWxCb3VuZHMgPSBudWxsO1xufTtcbiIsIi8qKlxuICogQSBHcmFwaGljc0RhdGEgb2JqZWN0LlxuICpcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqIEBwYXJhbSBsaW5lV2lkdGgge251bWJlcn0gdGhlIHdpZHRoIG9mIHRoZSBsaW5lIHRvIGRyYXdcbiAqIEBwYXJhbSBsaW5lQ29sb3Ige251bWJlcn0gdGhlIGNvbG9yIG9mIHRoZSBsaW5lIHRvIGRyYXdcbiAqIEBwYXJhbSBsaW5lQWxwaGEge251bWJlcn0gdGhlIGFscGhhIG9mIHRoZSBsaW5lIHRvIGRyYXdcbiAqIEBwYXJhbSBmaWxsQ29sb3Ige251bWJlcn0gdGhlIGNvbG9yIG9mIHRoZSBmaWxsXG4gKiBAcGFyYW0gZmlsbEFscGhhIHtudW1iZXJ9IHRoZSBhbHBoYSBvZiB0aGUgZmlsbFxuICogQHBhcmFtIGZpbGwgICAgICB7Ym9vbGVhbn0gd2hldGhlciBvciBub3QgdGhlIHNoYXBlIGlzIGZpbGxlZCB3aXRoIGEgY29sb3VyXG4gKiBAcGFyYW0gc2hhcGUgICAgIHtDaXJjbGV8UmVjdGFuZ2xlfEVsbGlwc2V8TGluZXxQb2x5Z29ufSBUaGUgc2hhcGUgb2JqZWN0IHRvIGRyYXcuXG4gKi9cbmZ1bmN0aW9uIEdyYXBoaWNzRGF0YShsaW5lV2lkdGgsIGxpbmVDb2xvciwgbGluZUFscGhhLCBmaWxsQ29sb3IsIGZpbGxBbHBoYSwgZmlsbCwgc2hhcGUpXG57XG4gICAgLypcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9IHRoZSB3aWR0aCBvZiB0aGUgbGluZSB0byBkcmF3XG4gICAgICovXG4gICAgdGhpcy5saW5lV2lkdGggPSBsaW5lV2lkdGg7XG5cbiAgICAvKlxuICAgICAqIEBtZW1iZXIge251bWJlcn0gdGhlIGNvbG9yIG9mIHRoZSBsaW5lIHRvIGRyYXdcbiAgICAgKi9cbiAgICB0aGlzLmxpbmVDb2xvciA9IGxpbmVDb2xvcjtcbiAgICAvKlxuICAgICAqIEBtZW1iZXIge251bWJlcn0gdGhlIGFscGhhIG9mIHRoZSBsaW5lIHRvIGRyYXdcbiAgICAgKi9cbiAgICB0aGlzLmxpbmVBbHBoYSA9IGxpbmVBbHBoYTtcbiAgICAvKlxuICAgICAqIEBtZW1iZXIge251bWJlcn0gY2FjaGVkIHRpbnQgb2YgdGhlIGxpbmUgdG8gZHJhd1xuICAgICAqL1xuICAgIHRoaXMuX2xpbmVUaW50ID0gbGluZUNvbG9yO1xuXG4gICAgLypcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9IHRoZSBjb2xvciBvZiB0aGUgZmlsbFxuICAgICAqL1xuICAgIHRoaXMuZmlsbENvbG9yID0gZmlsbENvbG9yO1xuXG4gICAgLypcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9IHRoZSBhbHBoYSBvZiB0aGUgZmlsbFxuICAgICAqL1xuICAgIHRoaXMuZmlsbEFscGhhID0gZmlsbEFscGhhO1xuXG4gICAgLypcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9IGNhY2hlZCB0aW50IG9mIHRoZSBmaWxsXG4gICAgICovXG4gICAgdGhpcy5fZmlsbFRpbnQgPSBmaWxsQ29sb3I7XG5cbiAgICAvKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59IHdoZXRoZXIgb3Igbm90IHRoZSBzaGFwZSBpcyBmaWxsZWQgd2l0aCBhIGNvbG91clxuICAgICAqL1xuICAgIHRoaXMuZmlsbCA9IGZpbGw7XG5cbiAgICAvKlxuICAgICAqIEBtZW1iZXIge1BJWEkuQ2lyY2xlfFBJWEkuUmVjdGFuZ2xlfFBJWEkuRWxsaXBzZXxQSVhJLkxpbmV8UElYSS5Qb2x5Z29ufSBUaGUgc2hhcGUgb2JqZWN0IHRvIGRyYXcuXG4gICAgICovXG4gICAgdGhpcy5zaGFwZSA9IHNoYXBlO1xuXG4gICAgLypcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9IFRoZSB0eXBlIG9mIHRoZSBzaGFwZSwgc2VlIHRoZSBDb25zdC5TaGFwZXMgZmlsZSBmb3IgYWxsIHRoZSBleGlzdGluZyB0eXBlcyxcbiAgICAgKi9cbiAgICB0aGlzLnR5cGUgPSBzaGFwZS50eXBlO1xufVxuXG5HcmFwaGljc0RhdGEucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gR3JhcGhpY3NEYXRhO1xubW9kdWxlLmV4cG9ydHMgPSBHcmFwaGljc0RhdGE7XG5cbi8qKlxuICogQ3JlYXRlcyBhIG5ldyBHcmFwaGljc0RhdGEgb2JqZWN0IHdpdGggdGhlIHNhbWUgdmFsdWVzIGFzIHRoaXMgb25lLlxuICpcbiAqIEByZXR1cm4ge1BJWEkuR3JhcGhpY3NEYXRhfVxuICovXG5HcmFwaGljc0RhdGEucHJvdG90eXBlLmNsb25lID0gZnVuY3Rpb24gKClcbntcbiAgICByZXR1cm4gbmV3IEdyYXBoaWNzRGF0YShcbiAgICAgICAgdGhpcy5saW5lV2lkdGgsXG4gICAgICAgIHRoaXMubGluZUNvbG9yLFxuICAgICAgICB0aGlzLmxpbmVBbHBoYSxcbiAgICAgICAgdGhpcy5maWxsQ29sb3IsXG4gICAgICAgIHRoaXMuZmlsbEFscGhhLFxuICAgICAgICB0aGlzLmZpbGwsXG4gICAgICAgIHRoaXMuc2hhcGVcbiAgICApO1xufTtcblxuLyoqXG4gKiBEZXN0cm95cyB0aGUgR3JhcGhpY3MgZGF0YS5cbiAqL1xuR3JhcGhpY3NEYXRhLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKCkge1xuICAgIHRoaXMuc2hhcGUgPSBudWxsO1xufTtcbiIsInZhciB1dGlscyA9IHJlcXVpcmUoJy4uLy4uL3V0aWxzJyksXG4gICAgbWF0aCA9IHJlcXVpcmUoJy4uLy4uL21hdGgnKSxcbiAgICBDT05TVCA9IHJlcXVpcmUoJy4uLy4uL2NvbnN0JyksXG4gICAgT2JqZWN0UmVuZGVyZXIgPSByZXF1aXJlKCcuLi8uLi9yZW5kZXJlcnMvd2ViZ2wvdXRpbHMvT2JqZWN0UmVuZGVyZXInKSxcbiAgICBXZWJHTFJlbmRlcmVyID0gcmVxdWlyZSgnLi4vLi4vcmVuZGVyZXJzL3dlYmdsL1dlYkdMUmVuZGVyZXInKSxcbiAgICBXZWJHTEdyYXBoaWNzRGF0YSA9IHJlcXVpcmUoJy4vV2ViR0xHcmFwaGljc0RhdGEnKSxcbiAgICBQcmltaXRpdmVTaGFkZXIgPSByZXF1aXJlKCcuL1ByaW1pdGl2ZVNoYWRlcicpLFxuXG4gICAgLy8gc29tZSBkcmF3aW5nIGZ1bmN0aW9ucy4uXG4gICAgYnVpbGRMaW5lID0gcmVxdWlyZSgnLi9idWlsZExpbmUnKTtcbiAgICBidWlsZFBvbHkgPSByZXF1aXJlKCcuL2J1aWxkUG9seScpO1xuICAgIGJ1aWxkQ29tcGxleFBvbHkgPSByZXF1aXJlKCcuL2J1aWxkQ29tcGxleFBvbHknKTtcbiAgICBidWlsZFJlY3RhbmdsZSA9IHJlcXVpcmUoJy4vYnVpbGRSZWN0YW5nbGUnKTtcbiAgICBidWlsZFJvdW5kZWRSZWN0YW5nbGUgPSByZXF1aXJlKCcuL2J1aWxkUm91bmRlZFJlY3RhbmdsZScpO1xuICAgIGJ1aWxkQ2lyY2xlID0gcmVxdWlyZSgnLi9idWlsZENpcmNsZScpO1xuXG4gICAgZWFyY3V0ID0gcmVxdWlyZSgnZWFyY3V0Jyk7XG5cbi8qKlxuICogUmVuZGVycyB0aGUgZ3JhcGhpY3Mgb2JqZWN0LlxuICpcbiAqIEBjbGFzc1xuICogQHByaXZhdGVcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAZXh0ZW5kcyBQSVhJLk9iamVjdFJlbmRlcmVyXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcn0gVGhlIHJlbmRlcmVyIHRoaXMgb2JqZWN0IHJlbmRlcmVyIHdvcmtzIGZvci5cbiAqL1xuZnVuY3Rpb24gR3JhcGhpY3NSZW5kZXJlcihyZW5kZXJlcilcbntcbiAgICBPYmplY3RSZW5kZXJlci5jYWxsKHRoaXMsIHJlbmRlcmVyKTtcblxuICAgIHRoaXMuZ3JhcGhpY3NEYXRhUG9vbCA9IFtdO1xuXG4gICAgdGhpcy5wcmltaXRpdmVTaGFkZXIgPSBudWxsO1xuICAgIHRoaXMuY29tcGxleFByaW1pdGl2ZVNoYWRlciA9IG51bGw7XG5cbiAgICB0aGlzLmdsID0gcmVuZGVyZXIuZ2w7XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIGlzIHRoZSBtYXhpbXVtIG51bWJlciBvZiBwb2ludHMgYSBwb2x5IGNhbiBjb250YWluIGJlZm9yZSBpdCBpcyByZW5kZXJlZCBhcyBhIGNvbXBsZXggcG9seWdvbiAodXNpbmcgdGhlIHN0ZW5jaWwgYnVmZmVyKVxuICAgICAqIEB0eXBlIHtOdW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy5tYXhpbXVtU2ltcGxlUG9seVNpemUgPSAyMDA7XG59XG5cbkdyYXBoaWNzUmVuZGVyZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShPYmplY3RSZW5kZXJlci5wcm90b3R5cGUpO1xuR3JhcGhpY3NSZW5kZXJlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBHcmFwaGljc1JlbmRlcmVyO1xubW9kdWxlLmV4cG9ydHMgPSBHcmFwaGljc1JlbmRlcmVyO1xuXG5XZWJHTFJlbmRlcmVyLnJlZ2lzdGVyUGx1Z2luKCdncmFwaGljcycsIEdyYXBoaWNzUmVuZGVyZXIpO1xuXG4vKipcbiAqIENhbGxlZCB3aGVuIHRoZXJlIGlzIGEgV2ViR0wgY29udGV4dCBjaGFuZ2VcbiAqXG4gKiBAcHJpdmF0ZVxuICpcbiAqL1xuR3JhcGhpY3NSZW5kZXJlci5wcm90b3R5cGUub25Db250ZXh0Q2hhbmdlID0gZnVuY3Rpb24oKVxue1xuICAgIHRoaXMuZ2wgPSB0aGlzLnJlbmRlcmVyLmdsO1xuICAgIHRoaXMucHJpbWl0aXZlU2hhZGVyID0gbmV3IFByaW1pdGl2ZVNoYWRlcih0aGlzLmdsKVxufTtcblxuLyoqXG4gKiBEZXN0cm95cyB0aGlzIHJlbmRlcmVyLlxuICpcbiAqL1xuR3JhcGhpY3NSZW5kZXJlci5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uICgpIHtcbiAgICBPYmplY3RSZW5kZXJlci5wcm90b3R5cGUuZGVzdHJveS5jYWxsKHRoaXMpO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmdyYXBoaWNzRGF0YVBvb2wubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgdGhpcy5ncmFwaGljc0RhdGFQb29sW2ldLmRlc3Ryb3koKTtcbiAgICB9XG5cbiAgICB0aGlzLmdyYXBoaWNzRGF0YVBvb2wgPSBudWxsO1xufTtcblxuLyoqXG4gKiBSZW5kZXJzIGEgZ3JhcGhpY3Mgb2JqZWN0LlxuICpcbiAqIEBwYXJhbSBncmFwaGljcyB7UElYSS5HcmFwaGljc30gVGhlIGdyYXBoaWNzIG9iamVjdCB0byByZW5kZXIuXG4gKi9cbkdyYXBoaWNzUmVuZGVyZXIucHJvdG90eXBlLnJlbmRlciA9IGZ1bmN0aW9uKGdyYXBoaWNzKVxue1xuICAgIHZhciByZW5kZXJlciA9IHRoaXMucmVuZGVyZXI7XG4gICAgdmFyIGdsID0gcmVuZGVyZXIuZ2w7XG5cbiAgICB2YXIgd2ViR0xEYXRhO1xuICAvLyAgY29uc29sZS5sb2coZ3JhcGhpY3MpXG4gICAgaWYgKGdyYXBoaWNzLmRpcnR5IHx8ICFncmFwaGljcy5fd2ViR0xbZ2wuaWRdKVxuICAgIHtcbiAgICAgICAgdGhpcy51cGRhdGVHcmFwaGljcyhncmFwaGljcyk7XG4gICAgfVxuXG4gICAgdmFyIHdlYkdMID0gZ3JhcGhpY3MuX3dlYkdMW2dsLmlkXTtcblxuICAgIC8vIFRoaXMgIGNvdWxkIGJlIHNwZWVkZWQgdXAgZm9yIHN1cmUhXG5cbiAgICByZW5kZXJlci5ibGVuZE1vZGVNYW5hZ2VyLnNldEJsZW5kTW9kZSggZ3JhcGhpY3MuYmxlbmRNb2RlICk7XG5cbi8vICAgIHZhciBtYXRyaXggPSAgZ3JhcGhpY3Mud29ybGRUcmFuc2Zvcm0uY2xvbmUoKTtcbi8vICAgIHZhciBtYXRyaXggPSAgcmVuZGVyZXIuY3VycmVudFJlbmRlclRhcmdldC5wcm9qZWN0aW9uTWF0cml4LmNsb25lKCk7XG4vLyAgICBtYXRyaXguYXBwZW5kKGdyYXBoaWNzLndvcmxkVHJhbnNmb3JtKTtcblxuICAgIGZvciAodmFyIGkgPSAwLCBuID0gd2ViR0wuZGF0YS5sZW5ndGg7IGkgPCBuOyBpKyspXG4gICAge1xuICAgICAgICB3ZWJHTERhdGEgPSB3ZWJHTC5kYXRhW2ldO1xuXG4gICAgICAgIGlmICh3ZWJHTC5kYXRhW2ldLm1vZGUgPT09IDEpXG4gICAgICAgIHtcbiAgICAgICAgICAgIC8vVE9ETyBmaXggdGhpcyBvbmUhXG4gICAgICAgICAgICBcbiAgICAgICAgICAgIC8qXG4gICAgICAgICAgICByZW5kZXJlci5zdGVuY2lsTWFuYWdlci5wdXNoU3RlbmNpbChncmFwaGljcywgd2ViR0xEYXRhKTtcblxuICAgICAgICAgICAgZ2wudW5pZm9ybTFmKHJlbmRlcmVyLnNoYWRlck1hbmFnZXIuY29tcGxleFByaW1pdGl2ZVNoYWRlci51bmlmb3Jtcy5hbHBoYS5fbG9jYXRpb24sIGdyYXBoaWNzLndvcmxkQWxwaGEgKiB3ZWJHTERhdGEuYWxwaGEpO1xuXG4gICAgICAgICAgICAvLyByZW5kZXIgcXVhZC4uXG4gICAgICAgICAgICBnbC5kcmF3RWxlbWVudHMoZ2wuVFJJQU5HTEVfRkFOLCA0LCBnbC5VTlNJR05FRF9TSE9SVCwgKCB3ZWJHTERhdGEuaW5kaWNlcy5sZW5ndGggLSA0ICkgKiAyICk7XG5cbiAgICAgICAgICAgIHJlbmRlcmVyLnN0ZW5jaWxNYW5hZ2VyLnBvcFN0ZW5jaWwoZ3JhcGhpY3MsIHdlYkdMRGF0YSk7XG4gICAgICAgICAgICAqL1xuICAgICAgICB9XG4gICAgICAgIGVsc2VcbiAgICAgICAge1xuXG4gICAgICAgICAgICBzaGFkZXIgPSB0aGlzLnByaW1pdGl2ZVNoYWRlcjtcblxuICAgICAgICAgICAgcmVuZGVyZXIuYmluZFNoYWRlcihzaGFkZXIpXG5cbiAgICAgICAgICAgIHNoYWRlci51bmlmb3Jtcy50cmFuc2xhdGlvbk1hdHJpeCA9IGdyYXBoaWNzLndvcmxkVHJhbnNmb3JtLnRvQXJyYXkodHJ1ZSk7XG4gICAgICAgICAgICBzaGFkZXIudW5pZm9ybXMudGludCA9IHV0aWxzLmhleDJyZ2IoZ3JhcGhpY3MudGludCk7XG4gICAgICAgICAgICBzaGFkZXIudW5pZm9ybXMuYWxwaGEgPSBncmFwaGljcy53b3JsZEFscGhhO1xuXG5cbiAgICAgICAgICAgIGdsLmJpbmRCdWZmZXIoZ2wuQVJSQVlfQlVGRkVSLCB3ZWJHTERhdGEuYnVmZmVyKTtcblxuICAgICAgICAgICAgc2hhZGVyID0gdGhpcy5wcmltaXRpdmVTaGFkZXI7XG5cbiAgICAgICAgICAgIHNoYWRlci5hdHRyaWJ1dGVzLmFWZXJ0ZXhQb3NpdGlvbi5wb2ludGVyKGdsLkZMT0FULCBmYWxzZSwgNCAqIDYsIDApO1xuICAgICAgICAgICAgc2hhZGVyLmF0dHJpYnV0ZXMuYUNvbG9yLnBvaW50ZXIoZ2wuRkxPQVQsIGZhbHNlLCA0ICogNiwgMiAqIDQpO1xuXG4gICAgICAgICAgICBnbC5lbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShzaGFkZXIuYXR0cmlidXRlcy5hVmVydGV4UG9zaXRpb24ubG9jYXRpb24pO1xuICAgICAgICAgICAgZ2wuZW5hYmxlVmVydGV4QXR0cmliQXJyYXkoc2hhZGVyLmF0dHJpYnV0ZXMuYUNvbG9yLmxvY2F0aW9uKTtcblxuICAgICAgICAgICAgLy8gc2V0IHRoZSBpbmRleCBidWZmZXIhXG4gICAgICAgICAgICBnbC5iaW5kQnVmZmVyKGdsLkVMRU1FTlRfQVJSQVlfQlVGRkVSLCB3ZWJHTERhdGEuaW5kZXhCdWZmZXIpO1xuICAgICAgICAgICAgZ2wuZHJhd0VsZW1lbnRzKGdsLlRSSUFOR0xFX1NUUklQLCAgd2ViR0xEYXRhLmluZGljZXMubGVuZ3RoLCBnbC5VTlNJR05FRF9TSE9SVCwgMCApO1xuICAgICAgICB9XG5cbiAgICAgICAgcmVuZGVyZXIuZHJhd0NvdW50Kys7XG4gICAgfVxufTtcblxuLyoqXG4gKiBVcGRhdGVzIHRoZSBncmFwaGljcyBvYmplY3RcbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIGdyYXBoaWNzIHtQSVhJLkdyYXBoaWNzfSBUaGUgZ3JhcGhpY3Mgb2JqZWN0IHRvIHVwZGF0ZVxuICovXG5HcmFwaGljc1JlbmRlcmVyLnByb3RvdHlwZS51cGRhdGVHcmFwaGljcyA9IGZ1bmN0aW9uKGdyYXBoaWNzKVxue1xuICAgIHZhciBnbCA9IHRoaXMucmVuZGVyZXIuZ2w7XG5cbiAgICAgLy8gZ2V0IHRoZSBjb250ZXh0cyBncmFwaGljcyBvYmplY3RcbiAgICB2YXIgd2ViR0wgPSBncmFwaGljcy5fd2ViR0xbZ2wuaWRdO1xuXG4gICAgLy8gaWYgdGhlIGdyYXBoaWNzIG9iamVjdCBkb2VzIG5vdCBleGlzdCBpbiB0aGUgd2ViR0wgY29udGV4dCB0aW1lIHRvIGNyZWF0ZSBpdCFcbiAgICBpZiAoIXdlYkdMKVxuICAgIHtcbiAgICAgICAgd2ViR0wgPSBncmFwaGljcy5fd2ViR0xbZ2wuaWRdID0ge2xhc3RJbmRleDowLCBkYXRhOltdLCBnbDpnbH07XG4gICAgfVxuXG4gICBcbiAgICAvLyBmbGFnIHRoZSBncmFwaGljcyBhcyBub3QgZGlydHkgYXMgd2UgYXJlIGFib3V0IHRvIHVwZGF0ZSBpdC4uLlxuICAgIGdyYXBoaWNzLmRpcnR5ID0gZmFsc2U7XG5cbiAgICB2YXIgaTtcblxuICAgIC8vIGlmIHRoZSB1c2VyIGNsZWFyZWQgdGhlIGdyYXBoaWNzIG9iamVjdCB3ZSB3aWxsIG5lZWQgdG8gY2xlYXIgZXZlcnkgb2JqZWN0XG4gICAgaWYgKGdyYXBoaWNzLmNsZWFyRGlydHkpXG4gICAge1xuICAgICAgICBncmFwaGljcy5jbGVhckRpcnR5ID0gZmFsc2U7XG5cbiAgICAgICAgLy8gbG9vcCB0aHJvdWdoIGFuZCByZXR1cm4gYWxsIHRoZSB3ZWJHTERhdGFzIHRvIHRoZSBvYmplY3QgcG9vbCBzbyB0aGFuIGNhbiBiZSByZXVzZWQgbGF0ZXIgb25cbiAgICAgICAgZm9yIChpID0gMDsgaSA8IHdlYkdMLmRhdGEubGVuZ3RoOyBpKyspXG4gICAgICAgIHtcbiAgICAgICAgICAgIHZhciBncmFwaGljc0RhdGEgPSB3ZWJHTC5kYXRhW2ldO1xuICAgICAgICAgICAgZ3JhcGhpY3NEYXRhLnJlc2V0KCk7XG4gICAgICAgICAgICB0aGlzLmdyYXBoaWNzRGF0YVBvb2wucHVzaCggZ3JhcGhpY3NEYXRhICk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBjbGVhciB0aGUgYXJyYXkgYW5kIHJlc2V0IHRoZSBpbmRleC4uXG4gICAgICAgIHdlYkdMLmRhdGEgPSBbXTtcbiAgICAgICAgd2ViR0wubGFzdEluZGV4ID0gMDtcbiAgICB9XG5cbiAgICB2YXIgd2ViR0xEYXRhO1xuXG4gICAgLy8gbG9vcCB0aHJvdWdoIHRoZSBncmFwaGljcyBkYXRhcyBhbmQgY29uc3RydWN0IGVhY2ggb25lLi5cbiAgICAvLyBpZiB0aGUgb2JqZWN0IGlzIGEgY29tcGxleCBmaWxsIHRoZW4gdGhlIG5ldyBzdGVuY2lsIGJ1ZmZlciB0ZWNobmlxdWUgd2lsbCBiZSB1c2VkXG4gICAgLy8gb3RoZXIgd2lzZSBncmFwaGljcyBvYmplY3RzIHdpbGwgYmUgcHVzaGVkIGludG8gYSBiYXRjaC4uXG4gICAgZm9yIChpID0gd2ViR0wubGFzdEluZGV4OyBpIDwgZ3JhcGhpY3MuZ3JhcGhpY3NEYXRhLmxlbmd0aDsgaSsrKVxuICAgIHtcbiAgICAgICAgdmFyIGRhdGEgPSBncmFwaGljcy5ncmFwaGljc0RhdGFbaV07XG5cbiAgICAgICAgaWYgKGRhdGEudHlwZSA9PT0gQ09OU1QuU0hBUEVTLlBPTFkpXG4gICAgICAgIHtcbiAgICAgICAgICAgIC8vIG5lZWQgdG8gYWRkIHRoZSBwb2ludHMgdGhlIHRoZSBncmFwaGljcyBvYmplY3QuLlxuICAgICAgICAgICAgZGF0YS5wb2ludHMgPSBkYXRhLnNoYXBlLnBvaW50cy5zbGljZSgpO1xuICAgICAgICAgICAgaWYgKGRhdGEuc2hhcGUuY2xvc2VkKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIC8vIGNsb3NlIHRoZSBwb2x5IGlmIHRoZSB2YWx1ZSBpcyB0cnVlIVxuICAgICAgICAgICAgICAgIGlmIChkYXRhLnBvaW50c1swXSAhPT0gZGF0YS5wb2ludHNbZGF0YS5wb2ludHMubGVuZ3RoLTJdIHx8IGRhdGEucG9pbnRzWzFdICE9PSBkYXRhLnBvaW50c1tkYXRhLnBvaW50cy5sZW5ndGgtMV0pXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBkYXRhLnBvaW50cy5wdXNoKGRhdGEucG9pbnRzWzBdLCBkYXRhLnBvaW50c1sxXSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBNQUtFIFNVUkUgV0UgSEFWRSBUSEUgQ09SUkVDVCBUWVBFLi5cbiAgICAgICAgICAgIGlmIChkYXRhLmZpbGwpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgaWYgKGRhdGEucG9pbnRzLmxlbmd0aCA+PSA2KVxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGRhdGEucG9pbnRzLmxlbmd0aCA8IHRoaXMubWF4aW11bVNpbXBsZVBvbHlTaXplICogMilcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgd2ViR0xEYXRhID0gdGhpcy5zd2l0Y2hNb2RlKHdlYkdMLCAwKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNhbkRyYXdVc2luZ1NpbXBsZSA9IGJ1aWxkUG9seShkYXRhLCB3ZWJHTERhdGEpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWNhbkRyYXdVc2luZ1NpbXBsZSlcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3ZWJHTERhdGEgPSB0aGlzLnN3aXRjaE1vZGUod2ViR0wsIDEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1aWxkQ29tcGxleFBvbHkoZGF0YSwgd2ViR0xEYXRhKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgd2ViR0xEYXRhID0gdGhpcy5zd2l0Y2hNb2RlKHdlYkdMLCAxKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJ1aWxkQ29tcGxleFBvbHkoZGF0YSwgd2ViR0xEYXRhKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGRhdGEubGluZVdpZHRoID4gMClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB3ZWJHTERhdGEgPSB0aGlzLnN3aXRjaE1vZGUod2ViR0wsIDApO1xuICAgICAgICAgICAgICAgIGJ1aWxkTGluZShkYXRhLCB3ZWJHTERhdGEpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2VcbiAgICAgICAge1xuICAgICAgICAgICAgd2ViR0xEYXRhID0gdGhpcy5zd2l0Y2hNb2RlKHdlYkdMLCAwKTtcblxuICAgICAgICAgICAgaWYgKGRhdGEudHlwZSA9PT0gQ09OU1QuU0hBUEVTLlJFQ1QpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgYnVpbGRSZWN0YW5nbGUoZGF0YSwgd2ViR0xEYXRhKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGRhdGEudHlwZSA9PT0gQ09OU1QuU0hBUEVTLkNJUkMgfHwgZGF0YS50eXBlID09PSBDT05TVC5TSEFQRVMuRUxJUClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBidWlsZENpcmNsZShkYXRhLCB3ZWJHTERhdGEpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoZGF0YS50eXBlID09PSBDT05TVC5TSEFQRVMuUlJFQylcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBidWlsZFJvdW5kZWRSZWN0YW5nbGUoZGF0YSwgd2ViR0xEYXRhKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHdlYkdMLmxhc3RJbmRleCsrO1xuICAgIH1cblxuICAgIC8vIHVwbG9hZCBhbGwgdGhlIGRpcnR5IGRhdGEuLi5cbiAgICBmb3IgKGkgPSAwOyBpIDwgd2ViR0wuZGF0YS5sZW5ndGg7IGkrKylcbiAgICB7XG4gICAgICAgIHdlYkdMRGF0YSA9IHdlYkdMLmRhdGFbaV07XG5cbiAgICAgICAgaWYgKHdlYkdMRGF0YS5kaXJ0eSlcbiAgICAgICAge1xuICAgICAgICAgICAgd2ViR0xEYXRhLnVwbG9hZCgpO1xuICAgICAgICB9XG4gICAgfVxufTtcblxuLyoqXG4gKlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0gd2ViR0wge1dlYkdMUmVuZGVyaW5nQ29udGV4dH0gdGhlIGN1cnJlbnQgV2ViR0wgZHJhd2luZyBjb250ZXh0XG4gKiBAcGFyYW0gdHlwZSB7bnVtYmVyfSBUT0RPIEBBbHZpblxuICovXG5HcmFwaGljc1JlbmRlcmVyLnByb3RvdHlwZS5zd2l0Y2hNb2RlID0gZnVuY3Rpb24gKHdlYkdMLCB0eXBlKVxue1xuICAgIHZhciB3ZWJHTERhdGE7XG5cbiAgICBpZiAoIXdlYkdMLmRhdGEubGVuZ3RoKVxuICAgIHtcbiAgICAgICAgd2ViR0xEYXRhID0gdGhpcy5ncmFwaGljc0RhdGFQb29sLnBvcCgpIHx8IG5ldyBXZWJHTEdyYXBoaWNzRGF0YSh3ZWJHTC5nbCk7XG4gICAgICAgIHdlYkdMRGF0YS5tb2RlID0gdHlwZTtcbiAgICAgICAgd2ViR0wuZGF0YS5wdXNoKHdlYkdMRGF0YSk7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHdlYkdMRGF0YSA9IHdlYkdMLmRhdGFbd2ViR0wuZGF0YS5sZW5ndGgtMV07XG5cbiAgICAgICAgaWYgKCh3ZWJHTERhdGEucG9pbnRzLmxlbmd0aCA+IDMyMDAwMCkgfHwgd2ViR0xEYXRhLm1vZGUgIT09IHR5cGUgfHwgdHlwZSA9PT0gMSlcbiAgICAgICAge1xuICAgICAgICAgICAgd2ViR0xEYXRhID0gdGhpcy5ncmFwaGljc0RhdGFQb29sLnBvcCgpIHx8IG5ldyBXZWJHTEdyYXBoaWNzRGF0YSh3ZWJHTC5nbCk7XG4gICAgICAgICAgICB3ZWJHTERhdGEubW9kZSA9IHR5cGU7XG4gICAgICAgICAgICB3ZWJHTC5kYXRhLnB1c2god2ViR0xEYXRhKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHdlYkdMRGF0YS5kaXJ0eSA9IHRydWU7XG5cbiAgICByZXR1cm4gd2ViR0xEYXRhO1xufTtcblxuIiwidmFyIFNoYWRlciA9IHJlcXVpcmUoJ3BpeGktZ2wtY29yZScpLkdMU2hhZGVyO1xuXG4vKipcbiAqIFRoaXMgc2hhZGVyIGlzIHVzZWQgdG8gZHJhdyBzaW1wbGUgcHJpbWl0aXZlIHNoYXBlcyBmb3Ige0BsaW5rIFBJWEkuR3JhcGhpY3N9LlxuICpcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqIEBleHRlbmRzIFBJWEkuU2hhZGVyXG4gKiBAcGFyYW0gc2hhZGVyTWFuYWdlciB7U2hhZGVyTWFuYWdlcn0gVGhlIHdlYmdsIHNoYWRlciBtYW5hZ2VyIHRoaXMgc2hhZGVyIHdvcmtzIGZvci5cbiAqL1xuZnVuY3Rpb24gUHJpbWl0aXZlU2hhZGVyKGdsKVxue1xuICAgIFNoYWRlci5jYWxsKHRoaXMsXG4gICAgICAgIGdsLFxuICAgICAgICAvLyB2ZXJ0ZXggc2hhZGVyXG4gICAgICAgIFtcbiAgICAgICAgICAgICdhdHRyaWJ1dGUgdmVjMiBhVmVydGV4UG9zaXRpb247JyxcbiAgICAgICAgICAgICdhdHRyaWJ1dGUgdmVjNCBhQ29sb3I7JyxcblxuICAgICAgICAgICAgJ3VuaWZvcm0gbWF0MyB0cmFuc2xhdGlvbk1hdHJpeDsnLFxuICAgICAgICAgICAgJ3VuaWZvcm0gbWF0MyBwcm9qZWN0aW9uTWF0cml4OycsXG5cbiAgICAgICAgICAgICd1bmlmb3JtIGZsb2F0IGFscGhhOycsXG4gICAgICAgICAgICAndW5pZm9ybSBmbG9hdCBmbGlwWTsnLFxuICAgICAgICAgICAgJ3VuaWZvcm0gdmVjMyB0aW50OycsXG5cbiAgICAgICAgICAgICd2YXJ5aW5nIHZlYzQgdkNvbG9yOycsXG5cbiAgICAgICAgICAgICd2b2lkIG1haW4odm9pZCl7JyxcbiAgICAgICAgICAgICcgICBnbF9Qb3NpdGlvbiA9IHZlYzQoKHByb2plY3Rpb25NYXRyaXggKiB0cmFuc2xhdGlvbk1hdHJpeCAqIHZlYzMoYVZlcnRleFBvc2l0aW9uLCAxLjApKS54eSwgMC4wLCAxLjApOycsXG4gICAgICAgICAgICAnICAgdkNvbG9yID0gYUNvbG9yICogdmVjNCh0aW50ICogYWxwaGEsIGFscGhhKTsnLFxuICAgICAgICAgICAgJ30nXG4gICAgICAgIF0uam9pbignXFxuJyksXG4gICAgICAgIC8vIGZyYWdtZW50IHNoYWRlclxuICAgICAgICBbXG4gICAgICAgICAgICAncHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7JyxcblxuICAgICAgICAgICAgJ3ZhcnlpbmcgdmVjNCB2Q29sb3I7JyxcblxuICAgICAgICAgICAgJ3ZvaWQgbWFpbih2b2lkKXsnLFxuICAgICAgICAgICAgJyAgIGdsX0ZyYWdDb2xvciA9IHZDb2xvcjsnLFxuICAgICAgICAgICAgJ30nXG4gICAgICAgIF0uam9pbignXFxuJylcbiAgICApO1xufVxuXG5QcmltaXRpdmVTaGFkZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShTaGFkZXIucHJvdG90eXBlKTtcblByaW1pdGl2ZVNoYWRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBQcmltaXRpdmVTaGFkZXI7XG5cbm1vZHVsZS5leHBvcnRzID0gUHJpbWl0aXZlU2hhZGVyO1xuIiwiLyoqXG4gKiBBbiBvYmplY3QgY29udGFpbmluZyBXZWJHTCBzcGVjaWZpYyBwcm9wZXJ0aWVzIHRvIGJlIHVzZWQgYnkgdGhlIFdlYkdMIHJlbmRlcmVyXG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIGdsIHtXZWJHTFJlbmRlcmluZ0NvbnRleHR9IHRoZSBjdXJyZW50IFdlYkdMIGRyYXdpbmcgY29udGV4dFxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gV2ViR0xHcmFwaGljc0RhdGEoZ2wpIHtcblxuICAgIC8qKlxuICAgICAqIFRoZSBjdXJyZW50IFdlYkdMIGRyYXdpbmcgY29udGV4dFxuICAgICAqXG4gICAgICogQG1lbWJlciB7V2ViR0xSZW5kZXJpbmdDb250ZXh0fVxuICAgICAqL1xuICAgIHRoaXMuZ2wgPSBnbDtcblxuICAgIC8vVE9ETyBkb2VzIHRoaXMgbmVlZCB0byBiZSBzcGxpdCBiZWZvcmUgdXBsb2Rpbmc/P1xuICAgIC8qKlxuICAgICAqIEFuIGFycmF5IG9mIGNvbG9yIGNvbXBvbmVudHMgKHIsZyxiKVxuICAgICAqIEBtZW1iZXIge251bWJlcltdfVxuICAgICAqL1xuICAgIHRoaXMuY29sb3IgPSBbMCwwLDBdOyAvLyBjb2xvciBzcGxpdCFcblxuICAgIC8qKlxuICAgICAqIEFuIGFycmF5IG9mIHBvaW50cyB0byBkcmF3XG4gICAgICogQG1lbWJlciB7UElYSS5Qb2ludFtdfVxuICAgICAqL1xuICAgIHRoaXMucG9pbnRzID0gW107XG5cbiAgICAvKipcbiAgICAgKiBUaGUgaW5kaWNlcyBvZiB0aGUgdmVydGljZXNcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJbXX1cbiAgICAgKi9cbiAgICB0aGlzLmluZGljZXMgPSBbXTtcbiAgICAvKipcbiAgICAgKiBUaGUgbWFpbiBidWZmZXJcbiAgICAgKiBAbWVtYmVyIHtXZWJHTEJ1ZmZlcn1cbiAgICAgKi9cbiAgICB0aGlzLmJ1ZmZlciA9IGdsLmNyZWF0ZUJ1ZmZlcigpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGluZGV4IGJ1ZmZlclxuICAgICAqIEBtZW1iZXIge1dlYkdMQnVmZmVyfVxuICAgICAqL1xuICAgIHRoaXMuaW5kZXhCdWZmZXIgPSBnbC5jcmVhdGVCdWZmZXIoKTtcblxuICAgIC8qKlxuICAgICAqIHRvZG8gQGFsdmluXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMubW9kZSA9IDE7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYWxwaGEgb2YgdGhlIGdyYXBoaWNzXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMuYWxwaGEgPSAxO1xuXG4gICAgLyoqXG4gICAgICogV2hldGhlciB0aGlzIGdyYXBoaWNzIGlzIGRpcnR5IG9yIG5vdFxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICovXG4gICAgdGhpcy5kaXJ0eSA9IHRydWU7XG5cbiAgICB0aGlzLmdsUG9pbnRzID0gbnVsbDtcbiAgICB0aGlzLmdsSW5kaWNlcyA9IG51bGw7XG59XG5cbldlYkdMR3JhcGhpY3NEYXRhLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFdlYkdMR3JhcGhpY3NEYXRhO1xubW9kdWxlLmV4cG9ydHMgPSBXZWJHTEdyYXBoaWNzRGF0YTtcblxuLyoqXG4gKiBSZXNldHMgdGhlIHZlcnRpY2VzIGFuZCB0aGUgaW5kaWNlc1xuICovXG5XZWJHTEdyYXBoaWNzRGF0YS5wcm90b3R5cGUucmVzZXQgPSBmdW5jdGlvbiAoKSB7XG4gICAgdGhpcy5wb2ludHMubGVuZ3RoID0gMDtcbiAgICB0aGlzLmluZGljZXMubGVuZ3RoID0gMDtcbn07XG5cbi8qKlxuICogQmluZHMgdGhlIGJ1ZmZlcnMgYW5kIHVwbG9hZHMgdGhlIGRhdGFcbiAqL1xuV2ViR0xHcmFwaGljc0RhdGEucHJvdG90eXBlLnVwbG9hZCA9IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgZ2wgPSB0aGlzLmdsO1xuXG4vLyAgICB0aGlzLmxhc3RJbmRleCA9IGdyYXBoaWNzLmdyYXBoaWNzRGF0YS5sZW5ndGg7XG4gICAgdGhpcy5nbFBvaW50cyA9IG5ldyBGbG9hdDMyQXJyYXkodGhpcy5wb2ludHMpO1xuXG4gICAgZ2wuYmluZEJ1ZmZlcihnbC5BUlJBWV9CVUZGRVIsIHRoaXMuYnVmZmVyKTtcbiAgICBnbC5idWZmZXJEYXRhKGdsLkFSUkFZX0JVRkZFUiwgdGhpcy5nbFBvaW50cywgZ2wuU1RBVElDX0RSQVcpO1xuXG4gICAgdGhpcy5nbEluZGljZXMgPSBuZXcgVWludDE2QXJyYXkodGhpcy5pbmRpY2VzKTtcblxuICAgIGdsLmJpbmRCdWZmZXIoZ2wuRUxFTUVOVF9BUlJBWV9CVUZGRVIsIHRoaXMuaW5kZXhCdWZmZXIpO1xuICAgIGdsLmJ1ZmZlckRhdGEoZ2wuRUxFTUVOVF9BUlJBWV9CVUZGRVIsIHRoaXMuZ2xJbmRpY2VzLCBnbC5TVEFUSUNfRFJBVyk7XG5cbiAgICB0aGlzLmRpcnR5ID0gZmFsc2U7XG59O1xuXG5XZWJHTEdyYXBoaWNzRGF0YS5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uICgpIHtcbiAgICB0aGlzLmNvbG9yID0gbnVsbDtcbiAgICB0aGlzLnBvaW50cyA9IG51bGw7XG4gICAgdGhpcy5pbmRpY2VzID0gbnVsbDtcblxuICAgIHRoaXMuZ2wuZGVsZXRlQnVmZmVyKHRoaXMuYnVmZmVyKTtcbiAgICB0aGlzLmdsLmRlbGV0ZUJ1ZmZlcih0aGlzLmluZGV4QnVmZmVyKTtcbiAgICBcbiAgICB0aGlzLmdsID0gbnVsbDtcblxuICAgIHRoaXMuYnVmZmVyID0gbnVsbDtcbiAgICB0aGlzLmluZGV4QnVmZmVyID0gbnVsbDtcblxuICAgIHRoaXMuZ2xQb2ludHMgPSBudWxsO1xuICAgIHRoaXMuZ2xJbmRpY2VzID0gbnVsbDtcbn07XG4iLCJ2YXIgYnVpbGRMaW5lID0gcmVxdWlyZSgnLi9idWlsZExpbmUnKSxcbiAgICB1dGlscyA9IHJlcXVpcmUoJy4uLy4uL3V0aWxzJyk7XG5cbi8qKlxuICogQnVpbGRzIGEgY2lyY2xlIHRvIGRyYXdcbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIGdyYXBoaWNzRGF0YSB7UElYSS5HcmFwaGljc30gVGhlIGdyYXBoaWNzIG9iamVjdCB0byBkcmF3XG4gKiBAcGFyYW0gd2ViR0xEYXRhIHtvYmplY3R9IGFuIG9iamVjdCBjb250YWluaW5nIGFsbCB0aGUgd2ViR0wtc3BlY2lmaWMgaW5mb3JtYXRpb24gdG8gY3JlYXRlIHRoaXMgc2hhcGVcbiAqL1xudmFyIGJ1aWxkQ2lyY2xlID0gZnVuY3Rpb24gKGdyYXBoaWNzRGF0YSwgd2ViR0xEYXRhKVxue1xuICAgIC8vIG5lZWQgdG8gY29udmVydCBwb2ludHMgdG8gYSBuaWNlIHJlZ3VsYXIgZGF0YVxuICAgIHZhciBjaXJjbGVEYXRhID0gZ3JhcGhpY3NEYXRhLnNoYXBlO1xuICAgIHZhciB4ID0gY2lyY2xlRGF0YS54O1xuICAgIHZhciB5ID0gY2lyY2xlRGF0YS55O1xuICAgIHZhciB3aWR0aDtcbiAgICB2YXIgaGVpZ2h0O1xuXG4gICAgLy8gVE9ETyAtIGJpdCBoYWNreT8/XG4gICAgaWYgKGdyYXBoaWNzRGF0YS50eXBlID09PSBDT05TVC5TSEFQRVMuQ0lSQylcbiAgICB7XG4gICAgICAgIHdpZHRoID0gY2lyY2xlRGF0YS5yYWRpdXM7XG4gICAgICAgIGhlaWdodCA9IGNpcmNsZURhdGEucmFkaXVzO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICB3aWR0aCA9IGNpcmNsZURhdGEud2lkdGg7XG4gICAgICAgIGhlaWdodCA9IGNpcmNsZURhdGEuaGVpZ2h0O1xuICAgIH1cblxuICAgIHZhciB0b3RhbFNlZ3MgPSBNYXRoLmZsb29yKDMwICogTWF0aC5zcXJ0KGNpcmNsZURhdGEucmFkaXVzKSkgfHwgTWF0aC5mbG9vcigxNSAqIE1hdGguc3FydChjaXJjbGVEYXRhLndpZHRoICsgY2lyY2xlRGF0YS5oZWlnaHQpKTtcbiAgICB2YXIgc2VnID0gKE1hdGguUEkgKiAyKSAvIHRvdGFsU2VncyA7XG5cbiAgICB2YXIgaSA9IDA7XG5cbiAgICBpZiAoZ3JhcGhpY3NEYXRhLmZpbGwpXG4gICAge1xuICAgICAgICB2YXIgY29sb3IgPSB1dGlscy5oZXgycmdiKGdyYXBoaWNzRGF0YS5maWxsQ29sb3IpO1xuICAgICAgICB2YXIgYWxwaGEgPSBncmFwaGljc0RhdGEuZmlsbEFscGhhO1xuXG4gICAgICAgIHZhciByID0gY29sb3JbMF0gKiBhbHBoYTtcbiAgICAgICAgdmFyIGcgPSBjb2xvclsxXSAqIGFscGhhO1xuICAgICAgICB2YXIgYiA9IGNvbG9yWzJdICogYWxwaGE7XG5cbiAgICAgICAgdmFyIHZlcnRzID0gd2ViR0xEYXRhLnBvaW50cztcbiAgICAgICAgdmFyIGluZGljZXMgPSB3ZWJHTERhdGEuaW5kaWNlcztcblxuICAgICAgICB2YXIgdmVjUG9zID0gdmVydHMubGVuZ3RoLzY7XG5cbiAgICAgICAgaW5kaWNlcy5wdXNoKHZlY1Bvcyk7XG5cbiAgICAgICAgZm9yIChpID0gMDsgaSA8IHRvdGFsU2VncyArIDEgOyBpKyspXG4gICAgICAgIHtcbiAgICAgICAgICAgIHZlcnRzLnB1c2goeCx5LCByLCBnLCBiLCBhbHBoYSk7XG5cbiAgICAgICAgICAgIHZlcnRzLnB1c2goeCArIE1hdGguc2luKHNlZyAqIGkpICogd2lkdGgsXG4gICAgICAgICAgICAgICAgICAgICAgIHkgKyBNYXRoLmNvcyhzZWcgKiBpKSAqIGhlaWdodCxcbiAgICAgICAgICAgICAgICAgICAgICAgciwgZywgYiwgYWxwaGEpO1xuXG4gICAgICAgICAgICBpbmRpY2VzLnB1c2godmVjUG9zKyssIHZlY1BvcysrKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGluZGljZXMucHVzaCh2ZWNQb3MtMSk7XG4gICAgfVxuXG4gICAgaWYgKGdyYXBoaWNzRGF0YS5saW5lV2lkdGgpXG4gICAge1xuICAgICAgICB2YXIgdGVtcFBvaW50cyA9IGdyYXBoaWNzRGF0YS5wb2ludHM7XG5cbiAgICAgICAgZ3JhcGhpY3NEYXRhLnBvaW50cyA9IFtdO1xuXG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCB0b3RhbFNlZ3MgKyAxOyBpKyspXG4gICAgICAgIHtcbiAgICAgICAgICAgIGdyYXBoaWNzRGF0YS5wb2ludHMucHVzaCh4ICsgTWF0aC5zaW4oc2VnICogaSkgKiB3aWR0aCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB5ICsgTWF0aC5jb3Moc2VnICogaSkgKiBoZWlnaHQpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5idWlsZExpbmUoZ3JhcGhpY3NEYXRhLCB3ZWJHTERhdGEpO1xuXG4gICAgICAgIGdyYXBoaWNzRGF0YS5wb2ludHMgPSB0ZW1wUG9pbnRzO1xuICAgIH1cbn07XG5cblxubW9kdWxlLmV4cG9ydHMgPSBidWlsZENpcmNsZTsiLCJ2YXIgYnVpbGRMaW5lID0gcmVxdWlyZSgnLi9idWlsZExpbmUnKSxcbiAgICB1dGlscyA9IHJlcXVpcmUoJy4uLy4uL3V0aWxzJyk7XG4gICAgXG5cblxuLyoqXG4gKiBCdWlsZHMgYSBjb21wbGV4IHBvbHlnb24gdG8gZHJhd1xuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0gZ3JhcGhpY3NEYXRhIHtQSVhJLkdyYXBoaWNzfSBUaGUgZ3JhcGhpY3Mgb2JqZWN0IGNvbnRhaW5pbmcgYWxsIHRoZSBuZWNlc3NhcnkgcHJvcGVydGllc1xuICogQHBhcmFtIHdlYkdMRGF0YSB7b2JqZWN0fSBhbiBvYmplY3QgY29udGFpbmluZyBhbGwgdGhlIHdlYkdMLXNwZWNpZmljIGluZm9ybWF0aW9uIHRvIGNyZWF0ZSB0aGlzIHNoYXBlXG4gKi9cbnZhciBidWlsZENvbXBsZXhQb2x5ID0gZnVuY3Rpb24gKGdyYXBoaWNzRGF0YSwgd2ViR0xEYXRhKVxue1xuICAgIC8vVE9ETyAtIG5vIG5lZWQgdG8gY29weSB0aGlzIGFzIGl0IGdldHMgdHVybmVkIGludG8gYSBGTG9hdDMyQXJyYXkgYW55d2F5cy4uXG4gICAgdmFyIHBvaW50cyA9IGdyYXBoaWNzRGF0YS5wb2ludHMuc2xpY2UoKTtcblxuICAgIGlmIChwb2ludHMubGVuZ3RoIDwgNilcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBnZXQgZmlyc3QgYW5kIGxhc3QgcG9pbnQuLiBmaWd1cmUgb3V0IHRoZSBtaWRkbGUhXG4gICAgdmFyIGluZGljZXMgPSB3ZWJHTERhdGEuaW5kaWNlcztcbiAgICB3ZWJHTERhdGEucG9pbnRzID0gcG9pbnRzO1xuICAgIHdlYkdMRGF0YS5hbHBoYSA9IGdyYXBoaWNzRGF0YS5maWxsQWxwaGE7XG4gICAgd2ViR0xEYXRhLmNvbG9yID0gdXRpbHMuaGV4MnJnYihncmFwaGljc0RhdGEuZmlsbENvbG9yKTtcblxuICAgIC8vIGNhbGNsYXRlIHRoZSBib3VuZHMuLlxuICAgIHZhciBtaW5YID0gSW5maW5pdHk7XG4gICAgdmFyIG1heFggPSAtSW5maW5pdHk7XG5cbiAgICB2YXIgbWluWSA9IEluZmluaXR5O1xuICAgIHZhciBtYXhZID0gLUluZmluaXR5O1xuXG4gICAgdmFyIHgseTtcblxuICAgIC8vIGdldCBzaXplLi5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHBvaW50cy5sZW5ndGg7IGkrPTIpXG4gICAge1xuICAgICAgICB4ID0gcG9pbnRzW2ldO1xuICAgICAgICB5ID0gcG9pbnRzW2krMV07XG5cbiAgICAgICAgbWluWCA9IHggPCBtaW5YID8geCA6IG1pblg7XG4gICAgICAgIG1heFggPSB4ID4gbWF4WCA/IHggOiBtYXhYO1xuXG4gICAgICAgIG1pblkgPSB5IDwgbWluWSA/IHkgOiBtaW5ZO1xuICAgICAgICBtYXhZID0geSA+IG1heFkgPyB5IDogbWF4WTtcbiAgICB9XG5cbiAgICAvLyBhZGQgYSBxdWFkIHRvIHRoZSBlbmQgY29zIHRoZXJlIGlzIG5vIHBvaW50IG1ha2luZyBhbm90aGVyIGJ1ZmZlciFcbiAgICBwb2ludHMucHVzaChtaW5YLCBtaW5ZLFxuICAgICAgICAgICAgICAgIG1heFgsIG1pblksXG4gICAgICAgICAgICAgICAgbWF4WCwgbWF4WSxcbiAgICAgICAgICAgICAgICBtaW5YLCBtYXhZKTtcblxuICAgIC8vIHB1c2ggYSBxdWFkIG9udG8gdGhlIGVuZC4uXG5cbiAgICAvL1RPRE8gLSB0aGlzIGFpbnQgbmVlZGVkIVxuICAgIHZhciBsZW5ndGggPSBwb2ludHMubGVuZ3RoIC8gMjtcbiAgICBmb3IgKGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspXG4gICAge1xuICAgICAgICBpbmRpY2VzLnB1c2goIGkgKTtcbiAgICB9XG5cbn07XG5cblxuXG5tb2R1bGUuZXhwb3J0cyA9IGJ1aWxkQ29tcGxleFBvbHk7IiwidmFyIG1hdGggPSByZXF1aXJlKCcuLi8uLi9tYXRoJyksXG4gICAgdXRpbHMgPSByZXF1aXJlKCcuLi8uLi91dGlscycpO1xuXG4vKipcbiAqIEJ1aWxkcyBhIGxpbmUgdG8gZHJhd1xuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0gZ3JhcGhpY3NEYXRhIHtQSVhJLkdyYXBoaWNzfSBUaGUgZ3JhcGhpY3Mgb2JqZWN0IGNvbnRhaW5pbmcgYWxsIHRoZSBuZWNlc3NhcnkgcHJvcGVydGllc1xuICogQHBhcmFtIHdlYkdMRGF0YSB7b2JqZWN0fSBhbiBvYmplY3QgY29udGFpbmluZyBhbGwgdGhlIHdlYkdMLXNwZWNpZmljIGluZm9ybWF0aW9uIHRvIGNyZWF0ZSB0aGlzIHNoYXBlXG4gKi9cbnZhciBidWlsZExpbmUgPSBmdW5jdGlvbiAoZ3JhcGhpY3NEYXRhLCB3ZWJHTERhdGEpXG57XG4gICAgLy8gVE9ETyBPUFRJTUlTRSFcbiAgICB2YXIgaSA9IDA7XG4gICAgdmFyIHBvaW50cyA9IGdyYXBoaWNzRGF0YS5wb2ludHM7XG5cbiAgICBpZiAocG9pbnRzLmxlbmd0aCA9PT0gMClcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgLy8gaWYgdGhlIGxpbmUgd2lkdGggaXMgYW4gb2RkIG51bWJlciBhZGQgMC41IHRvIGFsaWduIHRvIGEgd2hvbGUgcGl4ZWxcbiAgICAvLyBjb21tZW50aW5nIHRoaXMgb3V0IGZpeGVzICM3MTEgYW5kICMxNjIwXG4gICAgLy8gaWYgKGdyYXBoaWNzRGF0YS5saW5lV2lkdGglMilcbiAgICAvLyB7XG4gICAgLy8gICAgIGZvciAoaSA9IDA7IGkgPCBwb2ludHMubGVuZ3RoOyBpKyspXG4gICAgLy8gICAgIHtcbiAgICAvLyAgICAgICAgIHBvaW50c1tpXSArPSAwLjU7XG4gICAgLy8gICAgIH1cbiAgICAvLyB9XG5cbiAgICAvLyBnZXQgZmlyc3QgYW5kIGxhc3QgcG9pbnQuLiBmaWd1cmUgb3V0IHRoZSBtaWRkbGUhXG4gICAgdmFyIGZpcnN0UG9pbnQgPSBuZXcgbWF0aC5Qb2ludChwb2ludHNbMF0sIHBvaW50c1sxXSk7XG4gICAgdmFyIGxhc3RQb2ludCA9IG5ldyBtYXRoLlBvaW50KHBvaW50c1twb2ludHMubGVuZ3RoIC0gMl0sIHBvaW50c1twb2ludHMubGVuZ3RoIC0gMV0pO1xuXG4gICAgLy8gaWYgdGhlIGZpcnN0IHBvaW50IGlzIHRoZSBsYXN0IHBvaW50IC0gZ29ubmEgaGF2ZSBpc3N1ZXMgOilcbiAgICBpZiAoZmlyc3RQb2ludC54ID09PSBsYXN0UG9pbnQueCAmJiBmaXJzdFBvaW50LnkgPT09IGxhc3RQb2ludC55KVxuICAgIHtcbiAgICAgICAgLy8gbmVlZCB0byBjbG9uZSBhcyB3ZSBhcmUgZ29pbmcgdG8gc2xpZ2h0bHkgbW9kaWZ5IHRoZSBzaGFwZS4uXG4gICAgICAgIHBvaW50cyA9IHBvaW50cy5zbGljZSgpO1xuXG4gICAgICAgIHBvaW50cy5wb3AoKTtcbiAgICAgICAgcG9pbnRzLnBvcCgpO1xuXG4gICAgICAgIGxhc3RQb2ludCA9IG5ldyBtYXRoLlBvaW50KHBvaW50c1twb2ludHMubGVuZ3RoIC0gMl0sIHBvaW50c1twb2ludHMubGVuZ3RoIC0gMV0pO1xuXG4gICAgICAgIHZhciBtaWRQb2ludFggPSBsYXN0UG9pbnQueCArIChmaXJzdFBvaW50LnggLSBsYXN0UG9pbnQueCkgKjAuNTtcbiAgICAgICAgdmFyIG1pZFBvaW50WSA9IGxhc3RQb2ludC55ICsgKGZpcnN0UG9pbnQueSAtIGxhc3RQb2ludC55KSAqMC41O1xuXG4gICAgICAgIHBvaW50cy51bnNoaWZ0KG1pZFBvaW50WCwgbWlkUG9pbnRZKTtcbiAgICAgICAgcG9pbnRzLnB1c2gobWlkUG9pbnRYLCBtaWRQb2ludFkpO1xuICAgIH1cblxuICAgIHZhciB2ZXJ0cyA9IHdlYkdMRGF0YS5wb2ludHM7XG4gICAgdmFyIGluZGljZXMgPSB3ZWJHTERhdGEuaW5kaWNlcztcbiAgICB2YXIgbGVuZ3RoID0gcG9pbnRzLmxlbmd0aCAvIDI7XG4gICAgdmFyIGluZGV4Q291bnQgPSBwb2ludHMubGVuZ3RoO1xuICAgIHZhciBpbmRleFN0YXJ0ID0gdmVydHMubGVuZ3RoLzY7XG5cbiAgICAvLyBEUkFXIHRoZSBMaW5lXG4gICAgdmFyIHdpZHRoID0gZ3JhcGhpY3NEYXRhLmxpbmVXaWR0aCAvIDI7XG5cbiAgICAvLyBzb3J0IGNvbG9yXG4gICAgdmFyIGNvbG9yID0gdXRpbHMuaGV4MnJnYihncmFwaGljc0RhdGEubGluZUNvbG9yKTtcbiAgICB2YXIgYWxwaGEgPSBncmFwaGljc0RhdGEubGluZUFscGhhO1xuICAgIHZhciByID0gY29sb3JbMF0gKiBhbHBoYTtcbiAgICB2YXIgZyA9IGNvbG9yWzFdICogYWxwaGE7XG4gICAgdmFyIGIgPSBjb2xvclsyXSAqIGFscGhhO1xuXG4gICAgdmFyIHB4LCBweSwgcDF4LCBwMXksIHAyeCwgcDJ5LCBwM3gsIHAzeTtcbiAgICB2YXIgcGVycHgsIHBlcnB5LCBwZXJwMngsIHBlcnAyeSwgcGVycDN4LCBwZXJwM3k7XG4gICAgdmFyIGExLCBiMSwgYzEsIGEyLCBiMiwgYzI7XG4gICAgdmFyIGRlbm9tLCBwZGlzdCwgZGlzdDtcblxuICAgIHAxeCA9IHBvaW50c1swXTtcbiAgICBwMXkgPSBwb2ludHNbMV07XG5cbiAgICBwMnggPSBwb2ludHNbMl07XG4gICAgcDJ5ID0gcG9pbnRzWzNdO1xuXG4gICAgcGVycHggPSAtKHAxeSAtIHAyeSk7XG4gICAgcGVycHkgPSAgcDF4IC0gcDJ4O1xuXG4gICAgZGlzdCA9IE1hdGguc3FydChwZXJweCpwZXJweCArIHBlcnB5KnBlcnB5KTtcblxuICAgIHBlcnB4IC89IGRpc3Q7XG4gICAgcGVycHkgLz0gZGlzdDtcbiAgICBwZXJweCAqPSB3aWR0aDtcbiAgICBwZXJweSAqPSB3aWR0aDtcblxuICAgIC8vIHN0YXJ0XG4gICAgdmVydHMucHVzaChwMXggLSBwZXJweCAsIHAxeSAtIHBlcnB5LFxuICAgICAgICAgICAgICAgIHIsIGcsIGIsIGFscGhhKTtcblxuICAgIHZlcnRzLnB1c2gocDF4ICsgcGVycHggLCBwMXkgKyBwZXJweSxcbiAgICAgICAgICAgICAgICByLCBnLCBiLCBhbHBoYSk7XG5cbiAgICBmb3IgKGkgPSAxOyBpIDwgbGVuZ3RoLTE7IGkrKylcbiAgICB7XG4gICAgICAgIHAxeCA9IHBvaW50c1soaS0xKSoyXTtcbiAgICAgICAgcDF5ID0gcG9pbnRzWyhpLTEpKjIgKyAxXTtcblxuICAgICAgICBwMnggPSBwb2ludHNbKGkpKjJdO1xuICAgICAgICBwMnkgPSBwb2ludHNbKGkpKjIgKyAxXTtcblxuICAgICAgICBwM3ggPSBwb2ludHNbKGkrMSkqMl07XG4gICAgICAgIHAzeSA9IHBvaW50c1soaSsxKSoyICsgMV07XG5cbiAgICAgICAgcGVycHggPSAtKHAxeSAtIHAyeSk7XG4gICAgICAgIHBlcnB5ID0gcDF4IC0gcDJ4O1xuXG4gICAgICAgIGRpc3QgPSBNYXRoLnNxcnQocGVycHgqcGVycHggKyBwZXJweSpwZXJweSk7XG4gICAgICAgIHBlcnB4IC89IGRpc3Q7XG4gICAgICAgIHBlcnB5IC89IGRpc3Q7XG4gICAgICAgIHBlcnB4ICo9IHdpZHRoO1xuICAgICAgICBwZXJweSAqPSB3aWR0aDtcblxuICAgICAgICBwZXJwMnggPSAtKHAyeSAtIHAzeSk7XG4gICAgICAgIHBlcnAyeSA9IHAyeCAtIHAzeDtcblxuICAgICAgICBkaXN0ID0gTWF0aC5zcXJ0KHBlcnAyeCpwZXJwMnggKyBwZXJwMnkqcGVycDJ5KTtcbiAgICAgICAgcGVycDJ4IC89IGRpc3Q7XG4gICAgICAgIHBlcnAyeSAvPSBkaXN0O1xuICAgICAgICBwZXJwMnggKj0gd2lkdGg7XG4gICAgICAgIHBlcnAyeSAqPSB3aWR0aDtcblxuICAgICAgICBhMSA9ICgtcGVycHkgKyBwMXkpIC0gKC1wZXJweSArIHAyeSk7XG4gICAgICAgIGIxID0gKC1wZXJweCArIHAyeCkgLSAoLXBlcnB4ICsgcDF4KTtcbiAgICAgICAgYzEgPSAoLXBlcnB4ICsgcDF4KSAqICgtcGVycHkgKyBwMnkpIC0gKC1wZXJweCArIHAyeCkgKiAoLXBlcnB5ICsgcDF5KTtcbiAgICAgICAgYTIgPSAoLXBlcnAyeSArIHAzeSkgLSAoLXBlcnAyeSArIHAyeSk7XG4gICAgICAgIGIyID0gKC1wZXJwMnggKyBwMngpIC0gKC1wZXJwMnggKyBwM3gpO1xuICAgICAgICBjMiA9ICgtcGVycDJ4ICsgcDN4KSAqICgtcGVycDJ5ICsgcDJ5KSAtICgtcGVycDJ4ICsgcDJ4KSAqICgtcGVycDJ5ICsgcDN5KTtcblxuICAgICAgICBkZW5vbSA9IGExKmIyIC0gYTIqYjE7XG5cbiAgICAgICAgaWYgKE1hdGguYWJzKGRlbm9tKSA8IDAuMSApXG4gICAgICAgIHtcblxuICAgICAgICAgICAgZGVub20rPTEwLjE7XG4gICAgICAgICAgICB2ZXJ0cy5wdXNoKHAyeCAtIHBlcnB4ICwgcDJ5IC0gcGVycHksXG4gICAgICAgICAgICAgICAgciwgZywgYiwgYWxwaGEpO1xuXG4gICAgICAgICAgICB2ZXJ0cy5wdXNoKHAyeCArIHBlcnB4ICwgcDJ5ICsgcGVycHksXG4gICAgICAgICAgICAgICAgciwgZywgYiwgYWxwaGEpO1xuXG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHB4ID0gKGIxKmMyIC0gYjIqYzEpL2Rlbm9tO1xuICAgICAgICBweSA9IChhMipjMSAtIGExKmMyKS9kZW5vbTtcblxuXG4gICAgICAgIHBkaXN0ID0gKHB4IC1wMngpICogKHB4IC1wMngpICsgKHB5IC1wMnkpICogKHB5IC1wMnkpO1xuXG5cbiAgICAgICAgaWYgKHBkaXN0ID4gMTQwICogMTQwKVxuICAgICAgICB7XG4gICAgICAgICAgICBwZXJwM3ggPSBwZXJweCAtIHBlcnAyeDtcbiAgICAgICAgICAgIHBlcnAzeSA9IHBlcnB5IC0gcGVycDJ5O1xuXG4gICAgICAgICAgICBkaXN0ID0gTWF0aC5zcXJ0KHBlcnAzeCpwZXJwM3ggKyBwZXJwM3kqcGVycDN5KTtcbiAgICAgICAgICAgIHBlcnAzeCAvPSBkaXN0O1xuICAgICAgICAgICAgcGVycDN5IC89IGRpc3Q7XG4gICAgICAgICAgICBwZXJwM3ggKj0gd2lkdGg7XG4gICAgICAgICAgICBwZXJwM3kgKj0gd2lkdGg7XG5cbiAgICAgICAgICAgIHZlcnRzLnB1c2gocDJ4IC0gcGVycDN4LCBwMnkgLXBlcnAzeSk7XG4gICAgICAgICAgICB2ZXJ0cy5wdXNoKHIsIGcsIGIsIGFscGhhKTtcblxuICAgICAgICAgICAgdmVydHMucHVzaChwMnggKyBwZXJwM3gsIHAyeSArcGVycDN5KTtcbiAgICAgICAgICAgIHZlcnRzLnB1c2gociwgZywgYiwgYWxwaGEpO1xuXG4gICAgICAgICAgICB2ZXJ0cy5wdXNoKHAyeCAtIHBlcnAzeCwgcDJ5IC1wZXJwM3kpO1xuICAgICAgICAgICAgdmVydHMucHVzaChyLCBnLCBiLCBhbHBoYSk7XG5cbiAgICAgICAgICAgIGluZGV4Q291bnQrKztcbiAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgIHtcblxuICAgICAgICAgICAgdmVydHMucHVzaChweCAsIHB5KTtcbiAgICAgICAgICAgIHZlcnRzLnB1c2gociwgZywgYiwgYWxwaGEpO1xuXG4gICAgICAgICAgICB2ZXJ0cy5wdXNoKHAyeCAtIChweC1wMngpLCBwMnkgLSAocHkgLSBwMnkpKTtcbiAgICAgICAgICAgIHZlcnRzLnB1c2gociwgZywgYiwgYWxwaGEpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcDF4ID0gcG9pbnRzWyhsZW5ndGgtMikqMl07XG4gICAgcDF5ID0gcG9pbnRzWyhsZW5ndGgtMikqMiArIDFdO1xuXG4gICAgcDJ4ID0gcG9pbnRzWyhsZW5ndGgtMSkqMl07XG4gICAgcDJ5ID0gcG9pbnRzWyhsZW5ndGgtMSkqMiArIDFdO1xuXG4gICAgcGVycHggPSAtKHAxeSAtIHAyeSk7XG4gICAgcGVycHkgPSBwMXggLSBwMng7XG5cbiAgICBkaXN0ID0gTWF0aC5zcXJ0KHBlcnB4KnBlcnB4ICsgcGVycHkqcGVycHkpO1xuICAgIHBlcnB4IC89IGRpc3Q7XG4gICAgcGVycHkgLz0gZGlzdDtcbiAgICBwZXJweCAqPSB3aWR0aDtcbiAgICBwZXJweSAqPSB3aWR0aDtcblxuICAgIHZlcnRzLnB1c2gocDJ4IC0gcGVycHggLCBwMnkgLSBwZXJweSk7XG4gICAgdmVydHMucHVzaChyLCBnLCBiLCBhbHBoYSk7XG5cbiAgICB2ZXJ0cy5wdXNoKHAyeCArIHBlcnB4ICwgcDJ5ICsgcGVycHkpO1xuICAgIHZlcnRzLnB1c2gociwgZywgYiwgYWxwaGEpO1xuXG4gICAgaW5kaWNlcy5wdXNoKGluZGV4U3RhcnQpO1xuXG4gICAgZm9yIChpID0gMDsgaSA8IGluZGV4Q291bnQ7IGkrKylcbiAgICB7XG4gICAgICAgIGluZGljZXMucHVzaChpbmRleFN0YXJ0KyspO1xuICAgIH1cblxuICAgIGluZGljZXMucHVzaChpbmRleFN0YXJ0LTEpO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBidWlsZExpbmU7IiwidmFyIHV0aWxzID0gcmVxdWlyZSgnLi4vLi4vdXRpbHMnKTtcblxuLyoqXG4gKiBCdWlsZHMgYSBwb2x5Z29uIHRvIGRyYXdcbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIGdyYXBoaWNzRGF0YSB7UElYSS5XZWJHTEdyYXBoaWNzRGF0YX0gVGhlIGdyYXBoaWNzIG9iamVjdCBjb250YWluaW5nIGFsbCB0aGUgbmVjZXNzYXJ5IHByb3BlcnRpZXNcbiAqIEBwYXJhbSB3ZWJHTERhdGEge29iamVjdH0gYW4gb2JqZWN0IGNvbnRhaW5pbmcgYWxsIHRoZSB3ZWJHTC1zcGVjaWZpYyBpbmZvcm1hdGlvbiB0byBjcmVhdGUgdGhpcyBzaGFwZVxuICovXG52YXIgYnVpbGRQb2x5ID0gZnVuY3Rpb24gKGdyYXBoaWNzRGF0YSwgd2ViR0xEYXRhKVxue1xuICAgIHZhciBwb2ludHMgPSBncmFwaGljc0RhdGEucG9pbnRzO1xuXG4gICAgaWYgKHBvaW50cy5sZW5ndGggPCA2KVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIGdldCBmaXJzdCBhbmQgbGFzdCBwb2ludC4uIGZpZ3VyZSBvdXQgdGhlIG1pZGRsZSFcbiAgICB2YXIgdmVydHMgPSB3ZWJHTERhdGEucG9pbnRzO1xuICAgIHZhciBpbmRpY2VzID0gd2ViR0xEYXRhLmluZGljZXM7XG5cbiAgICB2YXIgbGVuZ3RoID0gcG9pbnRzLmxlbmd0aCAvIDI7XG5cbiAgICAvLyBzb3J0IGNvbG9yXG4gICAgdmFyIGNvbG9yID0gdXRpbHMuaGV4MnJnYihncmFwaGljc0RhdGEuZmlsbENvbG9yKTtcbiAgICB2YXIgYWxwaGEgPSBncmFwaGljc0RhdGEuZmlsbEFscGhhO1xuICAgIHZhciByID0gY29sb3JbMF0gKiBhbHBoYTtcbiAgICB2YXIgZyA9IGNvbG9yWzFdICogYWxwaGE7XG4gICAgdmFyIGIgPSBjb2xvclsyXSAqIGFscGhhO1xuXG4gICAgdmFyIHRyaWFuZ2xlcyA9IGVhcmN1dChwb2ludHMsIG51bGwsIDIpO1xuXG4gICAgaWYgKCF0cmlhbmdsZXMpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHZhciB2ZXJ0UG9zID0gdmVydHMubGVuZ3RoIC8gNjtcblxuICAgIHZhciBpID0gMDtcblxuICAgIGZvciAoaSA9IDA7IGkgPCB0cmlhbmdsZXMubGVuZ3RoOyBpKz0zKVxuICAgIHtcbiAgICAgICAgaW5kaWNlcy5wdXNoKHRyaWFuZ2xlc1tpXSArIHZlcnRQb3MpO1xuICAgICAgICBpbmRpY2VzLnB1c2godHJpYW5nbGVzW2ldICsgdmVydFBvcyk7XG4gICAgICAgIGluZGljZXMucHVzaCh0cmlhbmdsZXNbaSsxXSArIHZlcnRQb3MpO1xuICAgICAgICBpbmRpY2VzLnB1c2godHJpYW5nbGVzW2krMl0gK3ZlcnRQb3MpO1xuICAgICAgICBpbmRpY2VzLnB1c2godHJpYW5nbGVzW2krMl0gKyB2ZXJ0UG9zKTtcbiAgICB9XG5cbiAgICBmb3IgKGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspXG4gICAge1xuICAgICAgICB2ZXJ0cy5wdXNoKHBvaW50c1tpICogMl0sIHBvaW50c1tpICogMiArIDFdLFxuICAgICAgICAgICAgICAgICAgIHIsIGcsIGIsIGFscGhhKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdHJ1ZTtcbn07XG5cblxubW9kdWxlLmV4cG9ydHMgPSBidWlsZFBvbHk7XG4iLCJ2YXIgYnVpbGRMaW5lID0gcmVxdWlyZSgnLi9idWlsZExpbmUnKSxcbiAgICB1dGlscyA9IHJlcXVpcmUoJy4uLy4uL3V0aWxzJyk7XG5cbi8qKlxuICogQnVpbGRzIGEgcmVjdGFuZ2xlIHRvIGRyYXdcbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIGdyYXBoaWNzRGF0YSB7UElYSS5HcmFwaGljc30gVGhlIGdyYXBoaWNzIG9iamVjdCBjb250YWluaW5nIGFsbCB0aGUgbmVjZXNzYXJ5IHByb3BlcnRpZXNcbiAqIEBwYXJhbSB3ZWJHTERhdGEge29iamVjdH0gYW4gb2JqZWN0IGNvbnRhaW5pbmcgYWxsIHRoZSB3ZWJHTC1zcGVjaWZpYyBpbmZvcm1hdGlvbiB0byBjcmVhdGUgdGhpcyBzaGFwZVxuICovXG52YXIgYnVpbGRSZWN0YW5nbGUgPSBmdW5jdGlvbiAoZ3JhcGhpY3NEYXRhLCB3ZWJHTERhdGEpXG57XG4gICAgLy8gLS0tIC8vXG4gICAgLy8gbmVlZCB0byBjb252ZXJ0IHBvaW50cyB0byBhIG5pY2UgcmVndWxhciBkYXRhXG4gICAgLy9cbiAgICB2YXIgcmVjdERhdGEgPSBncmFwaGljc0RhdGEuc2hhcGU7XG4gICAgdmFyIHggPSByZWN0RGF0YS54O1xuICAgIHZhciB5ID0gcmVjdERhdGEueTtcbiAgICB2YXIgd2lkdGggPSByZWN0RGF0YS53aWR0aDtcbiAgICB2YXIgaGVpZ2h0ID0gcmVjdERhdGEuaGVpZ2h0O1xuXG4gICAgaWYgKGdyYXBoaWNzRGF0YS5maWxsKVxuICAgIHtcbiAgICAgICAgdmFyIGNvbG9yID0gdXRpbHMuaGV4MnJnYihncmFwaGljc0RhdGEuZmlsbENvbG9yKTtcbiAgICAgICAgdmFyIGFscGhhID0gZ3JhcGhpY3NEYXRhLmZpbGxBbHBoYTtcblxuICAgICAgICB2YXIgciA9IGNvbG9yWzBdICogYWxwaGE7XG4gICAgICAgIHZhciBnID0gY29sb3JbMV0gKiBhbHBoYTtcbiAgICAgICAgdmFyIGIgPSBjb2xvclsyXSAqIGFscGhhO1xuXG4gICAgICAgIHZhciB2ZXJ0cyA9IHdlYkdMRGF0YS5wb2ludHM7XG4gICAgICAgIHZhciBpbmRpY2VzID0gd2ViR0xEYXRhLmluZGljZXM7XG5cbiAgICAgICAgdmFyIHZlcnRQb3MgPSB2ZXJ0cy5sZW5ndGgvNjtcblxuICAgICAgICAvLyBzdGFydFxuICAgICAgICB2ZXJ0cy5wdXNoKHgsIHkpO1xuICAgICAgICB2ZXJ0cy5wdXNoKHIsIGcsIGIsIGFscGhhKTtcblxuICAgICAgICB2ZXJ0cy5wdXNoKHggKyB3aWR0aCwgeSk7XG4gICAgICAgIHZlcnRzLnB1c2gociwgZywgYiwgYWxwaGEpO1xuXG4gICAgICAgIHZlcnRzLnB1c2goeCAsIHkgKyBoZWlnaHQpO1xuICAgICAgICB2ZXJ0cy5wdXNoKHIsIGcsIGIsIGFscGhhKTtcblxuICAgICAgICB2ZXJ0cy5wdXNoKHggKyB3aWR0aCwgeSArIGhlaWdodCk7XG4gICAgICAgIHZlcnRzLnB1c2gociwgZywgYiwgYWxwaGEpO1xuXG4gICAgICAgIC8vIGluc2VydCAyIGRlYWQgdHJpYW5nbGVzLi5cbiAgICAgICAgaW5kaWNlcy5wdXNoKHZlcnRQb3MsIHZlcnRQb3MsIHZlcnRQb3MrMSwgdmVydFBvcysyLCB2ZXJ0UG9zKzMsIHZlcnRQb3MrMyk7XG4gICAgfVxuXG4gICAgaWYgKGdyYXBoaWNzRGF0YS5saW5lV2lkdGgpXG4gICAge1xuICAgICAgICB2YXIgdGVtcFBvaW50cyA9IGdyYXBoaWNzRGF0YS5wb2ludHM7XG5cbiAgICAgICAgZ3JhcGhpY3NEYXRhLnBvaW50cyA9IFt4LCB5LFxuICAgICAgICAgICAgICAgICAgeCArIHdpZHRoLCB5LFxuICAgICAgICAgICAgICAgICAgeCArIHdpZHRoLCB5ICsgaGVpZ2h0LFxuICAgICAgICAgICAgICAgICAgeCwgeSArIGhlaWdodCxcbiAgICAgICAgICAgICAgICAgIHgsIHldO1xuXG5cbiAgICAgICAgYnVpbGRMaW5lKGdyYXBoaWNzRGF0YSwgd2ViR0xEYXRhKTtcblxuICAgICAgICBncmFwaGljc0RhdGEucG9pbnRzID0gdGVtcFBvaW50cztcbiAgICB9XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGJ1aWxkUmVjdGFuZ2xlOyIsInZhciBidWlsZExpbmUgPSByZXF1aXJlKCcuL2J1aWxkTGluZScpLFxuICAgIHV0aWxzID0gcmVxdWlyZSgnLi4vLi4vdXRpbHMnKTtcbiAgICBcbi8qKlxuICogQnVpbGRzIGEgcm91bmRlZCByZWN0YW5nbGUgdG8gZHJhd1xuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0gZ3JhcGhpY3NEYXRhIHtQSVhJLkdyYXBoaWNzfSBUaGUgZ3JhcGhpY3Mgb2JqZWN0IGNvbnRhaW5pbmcgYWxsIHRoZSBuZWNlc3NhcnkgcHJvcGVydGllc1xuICogQHBhcmFtIHdlYkdMRGF0YSB7b2JqZWN0fSBhbiBvYmplY3QgY29udGFpbmluZyBhbGwgdGhlIHdlYkdMLXNwZWNpZmljIGluZm9ybWF0aW9uIHRvIGNyZWF0ZSB0aGlzIHNoYXBlXG4gKi9cbmJ1aWxkUm91bmRlZFJlY3RhbmdsZSA9IGZ1bmN0aW9uIChncmFwaGljc0RhdGEsIHdlYkdMRGF0YSlcbntcbiAgICB2YXIgcnJlY3REYXRhID0gZ3JhcGhpY3NEYXRhLnNoYXBlO1xuICAgIHZhciB4ID0gcnJlY3REYXRhLng7XG4gICAgdmFyIHkgPSBycmVjdERhdGEueTtcbiAgICB2YXIgd2lkdGggPSBycmVjdERhdGEud2lkdGg7XG4gICAgdmFyIGhlaWdodCA9IHJyZWN0RGF0YS5oZWlnaHQ7XG5cbiAgICB2YXIgcmFkaXVzID0gcnJlY3REYXRhLnJhZGl1cztcblxuICAgIHZhciByZWNQb2ludHMgPSBbXTtcbiAgICByZWNQb2ludHMucHVzaCh4LCB5ICsgcmFkaXVzKTtcbiAgICB0aGlzLnF1YWRyYXRpY0JlemllckN1cnZlKHgsIHkgKyBoZWlnaHQgLSByYWRpdXMsIHgsIHkgKyBoZWlnaHQsIHggKyByYWRpdXMsIHkgKyBoZWlnaHQsIHJlY1BvaW50cyk7XG4gICAgdGhpcy5xdWFkcmF0aWNCZXppZXJDdXJ2ZSh4ICsgd2lkdGggLSByYWRpdXMsIHkgKyBoZWlnaHQsIHggKyB3aWR0aCwgeSArIGhlaWdodCwgeCArIHdpZHRoLCB5ICsgaGVpZ2h0IC0gcmFkaXVzLCByZWNQb2ludHMpO1xuICAgIHRoaXMucXVhZHJhdGljQmV6aWVyQ3VydmUoeCArIHdpZHRoLCB5ICsgcmFkaXVzLCB4ICsgd2lkdGgsIHksIHggKyB3aWR0aCAtIHJhZGl1cywgeSwgcmVjUG9pbnRzKTtcbiAgICB0aGlzLnF1YWRyYXRpY0JlemllckN1cnZlKHggKyByYWRpdXMsIHksIHgsIHksIHgsIHkgKyByYWRpdXMgKyAwLjAwMDAwMDAwMDEsIHJlY1BvaW50cyk7XG5cbiAgICAvLyB0aGlzIHRpbnkgbnVtYmVyIGRlYWxzIHdpdGggdGhlIGlzc3VlIHRoYXQgb2NjdXJzIHdoZW4gcG9pbnRzIG92ZXJsYXAgYW5kIGVhcmN1dCBmYWlscyB0byB0cmlhbmd1bGF0ZSB0aGUgaXRlbS5cbiAgICAvLyBUT0RPIC0gZml4IHRoaXMgcHJvcGVybHksIHRoaXMgaXMgbm90IHZlcnkgZWxlZ2FudC4uIGJ1dCBpdCB3b3JrcyBmb3Igbm93LlxuXG4gICAgaWYgKGdyYXBoaWNzRGF0YS5maWxsKVxuICAgIHtcbiAgICAgICAgdmFyIGNvbG9yID0gdXRpbHMuaGV4MnJnYihncmFwaGljc0RhdGEuZmlsbENvbG9yKTtcbiAgICAgICAgdmFyIGFscGhhID0gZ3JhcGhpY3NEYXRhLmZpbGxBbHBoYTtcblxuICAgICAgICB2YXIgciA9IGNvbG9yWzBdICogYWxwaGE7XG4gICAgICAgIHZhciBnID0gY29sb3JbMV0gKiBhbHBoYTtcbiAgICAgICAgdmFyIGIgPSBjb2xvclsyXSAqIGFscGhhO1xuXG4gICAgICAgIHZhciB2ZXJ0cyA9IHdlYkdMRGF0YS5wb2ludHM7XG4gICAgICAgIHZhciBpbmRpY2VzID0gd2ViR0xEYXRhLmluZGljZXM7XG5cbiAgICAgICAgdmFyIHZlY1BvcyA9IHZlcnRzLmxlbmd0aC82O1xuXG4gICAgICAgIHZhciB0cmlhbmdsZXMgPSBlYXJjdXQocmVjUG9pbnRzLCBudWxsLCAyKTtcblxuICAgICAgICB2YXIgaSA9IDA7XG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCB0cmlhbmdsZXMubGVuZ3RoOyBpKz0zKVxuICAgICAgICB7XG4gICAgICAgICAgICBpbmRpY2VzLnB1c2godHJpYW5nbGVzW2ldICsgdmVjUG9zKTtcbiAgICAgICAgICAgIGluZGljZXMucHVzaCh0cmlhbmdsZXNbaV0gKyB2ZWNQb3MpO1xuICAgICAgICAgICAgaW5kaWNlcy5wdXNoKHRyaWFuZ2xlc1tpKzFdICsgdmVjUG9zKTtcbiAgICAgICAgICAgIGluZGljZXMucHVzaCh0cmlhbmdsZXNbaSsyXSArIHZlY1Bvcyk7XG4gICAgICAgICAgICBpbmRpY2VzLnB1c2godHJpYW5nbGVzW2krMl0gKyB2ZWNQb3MpO1xuICAgICAgICB9XG5cbiAgICAgICAgZm9yIChpID0gMDsgaSA8IHJlY1BvaW50cy5sZW5ndGg7IGkrKylcbiAgICAgICAge1xuICAgICAgICAgICAgdmVydHMucHVzaChyZWNQb2ludHNbaV0sIHJlY1BvaW50c1srK2ldLCByLCBnLCBiLCBhbHBoYSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoZ3JhcGhpY3NEYXRhLmxpbmVXaWR0aClcbiAgICB7XG4gICAgICAgIHZhciB0ZW1wUG9pbnRzID0gZ3JhcGhpY3NEYXRhLnBvaW50cztcblxuICAgICAgICBncmFwaGljc0RhdGEucG9pbnRzID0gcmVjUG9pbnRzO1xuXG4gICAgICAgIHRoaXMuYnVpbGRMaW5lKGdyYXBoaWNzRGF0YSwgd2ViR0xEYXRhKTtcblxuICAgICAgICBncmFwaGljc0RhdGEucG9pbnRzID0gdGVtcFBvaW50cztcbiAgICB9XG59O1xuXG4vKipcbiAqIENhbGN1bGF0ZSB0aGUgcG9pbnRzIGZvciBhIHF1YWRyYXRpYyBiZXppZXIgY3VydmUuIChoZWxwZXIgZnVuY3Rpb24uLilcbiAqIEJhc2VkIG9uOiBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy83ODUwOTcvaG93LWRvLWktaW1wbGVtZW50LWEtYmV6aWVyLWN1cnZlLWluLWNcbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIGZyb21YIHtudW1iZXJ9IE9yaWdpbiBwb2ludCB4XG4gKiBAcGFyYW0gZnJvbVkge251bWJlcn0gT3JpZ2luIHBvaW50IHhcbiAqIEBwYXJhbSBjcFgge251bWJlcn0gQ29udHJvbCBwb2ludCB4XG4gKiBAcGFyYW0gY3BZIHtudW1iZXJ9IENvbnRyb2wgcG9pbnQgeVxuICogQHBhcmFtIHRvWCB7bnVtYmVyfSBEZXN0aW5hdGlvbiBwb2ludCB4XG4gKiBAcGFyYW0gdG9ZIHtudW1iZXJ9IERlc3RpbmF0aW9uIHBvaW50IHlcbiAqIEBwYXJhbSBbb3V0XSB7bnVtYmVyW119IFRoZSBvdXRwdXQgYXJyYXkgdG8gYWRkIHBvaW50cyBpbnRvLiBJZiBub3QgcGFzc2VkLCBhIG5ldyBhcnJheSBpcyBjcmVhdGVkLlxuICogQHJldHVybiB7bnVtYmVyW119IGFuIGFycmF5IG9mIHBvaW50c1xuICovXG5xdWFkcmF0aWNCZXppZXJDdXJ2ZSA9IGZ1bmN0aW9uIChmcm9tWCwgZnJvbVksIGNwWCwgY3BZLCB0b1gsIHRvWSwgb3V0KVxue1xuICAgIHZhciB4YSxcbiAgICAgICAgeWEsXG4gICAgICAgIHhiLFxuICAgICAgICB5YixcbiAgICAgICAgeCxcbiAgICAgICAgeSxcbiAgICAgICAgbiA9IDIwLFxuICAgICAgICBwb2ludHMgPSBvdXQgfHwgW107XG5cbiAgICBmdW5jdGlvbiBnZXRQdChuMSAsIG4yLCBwZXJjKSB7XG4gICAgICAgIHZhciBkaWZmID0gbjIgLSBuMTtcblxuICAgICAgICByZXR1cm4gbjEgKyAoIGRpZmYgKiBwZXJjICk7XG4gICAgfVxuXG4gICAgdmFyIGogPSAwO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDw9IG47IGkrKyApIHtcbiAgICAgICAgaiA9IGkgLyBuO1xuXG4gICAgICAgIC8vIFRoZSBHcmVlbiBMaW5lXG4gICAgICAgIHhhID0gZ2V0UHQoIGZyb21YICwgY3BYICwgaiApO1xuICAgICAgICB5YSA9IGdldFB0KCBmcm9tWSAsIGNwWSAsIGogKTtcbiAgICAgICAgeGIgPSBnZXRQdCggY3BYICwgdG9YICwgaiApO1xuICAgICAgICB5YiA9IGdldFB0KCBjcFkgLCB0b1kgLCBqICk7XG5cbiAgICAgICAgLy8gVGhlIEJsYWNrIERvdFxuICAgICAgICB4ID0gZ2V0UHQoIHhhICwgeGIgLCBqICk7XG4gICAgICAgIHkgPSBnZXRQdCggeWEgLCB5YiAsIGogKTtcblxuICAgICAgICBwb2ludHMucHVzaCh4LCB5KTtcbiAgICB9XG5cbiAgICByZXR1cm4gcG9pbnRzO1xufTtcblxuXG5tb2R1bGUuZXhwb3J0cyA9IGJ1aWxkUm91bmRlZFJlY3RhbmdsZTsiLCIvKipcbiAqIEBmaWxlICAgICAgICBNYWluIGV4cG9ydCBvZiB0aGUgUElYSSBjb3JlIGxpYnJhcnlcbiAqIEBhdXRob3IgICAgICBNYXQgR3JvdmVzIDxtYXRAZ29vZGJveWRpZ2l0YWwuY29tPlxuICogQGNvcHlyaWdodCAgIDIwMTMtMjAxNSBHb29kQm95RGlnaXRhbFxuICogQGxpY2Vuc2UgICAgIHtAbGluayBodHRwczovL2dpdGh1Yi5jb20vcGl4aWpzL3BpeGkuanMvYmxvYi9tYXN0ZXIvTElDRU5TRXxNSVQgTGljZW5zZX1cbiAqL1xuXG4vKipcbiAqIEBuYW1lc3BhY2UgUElYSVxuICovXG4vLyBleHBvcnQgY29yZSBhbmQgY29uc3QuIFdlIGFzc2lnbiBjb3JlIHRvIGNvbnN0IHNvIHRoYXQgdGhlIG5vbi1yZWZlcmVuY2UgdHlwZXMgaW4gY29uc3QgcmVtYWluIGluLXRhY3RcbnZhciBjb3JlID0gbW9kdWxlLmV4cG9ydHMgPSBPYmplY3QuYXNzaWduKHJlcXVpcmUoJy4vY29uc3QnKSwgcmVxdWlyZSgnLi9tYXRoJyksIHtcbiAgICAvLyB1dGlsc1xuICAgIHV0aWxzOiByZXF1aXJlKCcuL3V0aWxzJyksXG4gICAgdGlja2VyOiByZXF1aXJlKCcuL3RpY2tlcicpLFxuXG4gICAgLy8gZGlzcGxheVxuICAgIERpc3BsYXlPYmplY3Q6ICAgICAgICAgIHJlcXVpcmUoJy4vZGlzcGxheS9EaXNwbGF5T2JqZWN0JyksXG4gICAgQ29udGFpbmVyOiAgICAgICAgICAgICAgcmVxdWlyZSgnLi9kaXNwbGF5L0NvbnRhaW5lcicpLFxuXG4gICAgLy8gc3ByaXRlc1xuICAgIFNwcml0ZTogICAgICAgICAgICAgICAgIHJlcXVpcmUoJy4vc3ByaXRlcy9TcHJpdGUnKSxcbiAgICBQYXJ0aWNsZUNvbnRhaW5lcjogICAgICByZXF1aXJlKCcuL3BhcnRpY2xlcy9QYXJ0aWNsZUNvbnRhaW5lcicpLFxuICAgIFNwcml0ZVJlbmRlcmVyOiAgICAgICAgIHJlcXVpcmUoJy4vc3ByaXRlcy93ZWJnbC9TcHJpdGVSZW5kZXJlcicpLFxuICAgIFBhcnRpY2xlUmVuZGVyZXI6ICAgICAgIHJlcXVpcmUoJy4vcGFydGljbGVzL3dlYmdsL1BhcnRpY2xlUmVuZGVyZXInKSxcblxuICAgIC8vIHRleHRcbiAgICBUZXh0OiAgICAgICAgICAgICAgICAgICByZXF1aXJlKCcuL3RleHQvVGV4dCcpLFxuXG4gICAgLy8gcHJpbWl0aXZlc1xuICAgIEdyYXBoaWNzOiAgICAgICAgICAgICAgIHJlcXVpcmUoJy4vZ3JhcGhpY3MvR3JhcGhpY3MnKSxcbiAgICBHcmFwaGljc0RhdGE6ICAgICAgICAgICByZXF1aXJlKCcuL2dyYXBoaWNzL0dyYXBoaWNzRGF0YScpLFxuICAgIEdyYXBoaWNzUmVuZGVyZXI6ICAgICAgIHJlcXVpcmUoJy4vZ3JhcGhpY3Mvd2ViZ2wvR3JhcGhpY3NSZW5kZXJlcicpLFxuXG4gICAgLy8gdGV4dHVyZXNcbiAgICBUZXh0dXJlOiAgICAgICAgICAgICAgICByZXF1aXJlKCcuL3RleHR1cmVzL1RleHR1cmUnKSxcbiAgICBCYXNlVGV4dHVyZTogICAgICAgICAgICByZXF1aXJlKCcuL3RleHR1cmVzL0Jhc2VUZXh0dXJlJyksXG4gICAgUmVuZGVyVGV4dHVyZTogICAgICAgICAgcmVxdWlyZSgnLi90ZXh0dXJlcy9SZW5kZXJUZXh0dXJlJyksXG4gICAgVmlkZW9CYXNlVGV4dHVyZTogICAgICAgcmVxdWlyZSgnLi90ZXh0dXJlcy9WaWRlb0Jhc2VUZXh0dXJlJyksXG4gICAgVGV4dHVyZVV2czogICAgICAgICAgICAgcmVxdWlyZSgnLi90ZXh0dXJlcy9UZXh0dXJlVXZzJyksXG5cbiAgICAvLyByZW5kZXJlcnMgLSBjYW52YXNcbiAgICBDYW52YXNSZW5kZXJlcjogICAgICAgICByZXF1aXJlKCcuL3JlbmRlcmVycy9jYW52YXMvQ2FudmFzUmVuZGVyZXInKSxcbiAgICBDYW52YXNHcmFwaGljczogICAgICAgICByZXF1aXJlKCcuL3JlbmRlcmVycy9jYW52YXMvdXRpbHMvQ2FudmFzR3JhcGhpY3MnKSxcbiAgICBDYW52YXNCdWZmZXI6ICAgICAgICAgICByZXF1aXJlKCcuL3JlbmRlcmVycy9jYW52YXMvdXRpbHMvQ2FudmFzQnVmZmVyJyksXG5cbiAgICAvLyByZW5kZXJlcnMgLSB3ZWJnbFxuICAgIFdlYkdMUmVuZGVyZXI6ICAgICAgICAgIHJlcXVpcmUoJy4vcmVuZGVyZXJzL3dlYmdsL1dlYkdMUmVuZGVyZXInKSxcbiAgICBXZWJHTE1hbmFnZXI6ICAgICAgICAgIHJlcXVpcmUoJy4vcmVuZGVyZXJzL3dlYmdsL21hbmFnZXJzL1dlYkdMTWFuYWdlcicpLFxuICAgIFNoYWRlck1hbmFnZXI6ICAgICAgICAgIHJlcXVpcmUoJy4vcmVuZGVyZXJzL3dlYmdsL21hbmFnZXJzL1NoYWRlck1hbmFnZXInKSxcbiAgICBTaGFkZXI6ICAgICAgICAgICAgICAgICByZXF1aXJlKCcuL3JlbmRlcmVycy93ZWJnbC9zaGFkZXJzL1NoYWRlcicpLFxuICAgIE9iamVjdFJlbmRlcmVyOiAgICAgICAgIHJlcXVpcmUoJy4vcmVuZGVyZXJzL3dlYmdsL3V0aWxzL09iamVjdFJlbmRlcmVyJyksXG4gICAgUmVuZGVyVGFyZ2V0OiAgICAgICAgICAgcmVxdWlyZSgnLi9yZW5kZXJlcnMvd2ViZ2wvdXRpbHMvUmVuZGVyVGFyZ2V0JyksXG5cbiAgICAvLyBmaWx0ZXJzIC0gd2ViZ2xcbiAgICBBYnN0cmFjdEZpbHRlcjogICAgICAgICByZXF1aXJlKCcuL3JlbmRlcmVycy93ZWJnbC9maWx0ZXJzL0Fic3RyYWN0RmlsdGVyJyksXG4gICAgRlhBQUZpbHRlcjogICAgICAgICAgICAgcmVxdWlyZSgnLi9yZW5kZXJlcnMvd2ViZ2wvZmlsdGVycy9GWEFBRmlsdGVyJyksXG4gICAgU3ByaXRlTWFza0ZpbHRlcjogICAgICAgcmVxdWlyZSgnLi9yZW5kZXJlcnMvd2ViZ2wvZmlsdGVycy9TcHJpdGVNYXNrRmlsdGVyJyksXG5cbiAgICBnbENvcmU6ICAgICAgICAgICAgICAgICAgIHJlcXVpcmUoJ3BpeGktZ2wtY29yZScpLFxuXG4gICAgLyoqXG4gICAgICogVGhpcyBoZWxwZXIgZnVuY3Rpb24gd2lsbCBhdXRvbWF0aWNhbGx5IGRldGVjdCB3aGljaCByZW5kZXJlciB5b3Ugc2hvdWxkIGJlIHVzaW5nLlxuICAgICAqIFdlYkdMIGlzIHRoZSBwcmVmZXJyZWQgcmVuZGVyZXIgYXMgaXQgaXMgYSBsb3QgZmFzdGVyLiBJZiB3ZWJHTCBpcyBub3Qgc3VwcG9ydGVkIGJ5XG4gICAgICogdGhlIGJyb3dzZXIgdGhlbiB0aGlzIGZ1bmN0aW9uIHdpbGwgcmV0dXJuIGEgY2FudmFzIHJlbmRlcmVyXG4gICAgICpcbiAgICAgKiBAbWVtYmVyb2YgUElYSVxuICAgICAqIEBwYXJhbSB3aWR0aD04MDAge251bWJlcn0gdGhlIHdpZHRoIG9mIHRoZSByZW5kZXJlcnMgdmlld1xuICAgICAqIEBwYXJhbSBoZWlnaHQ9NjAwIHtudW1iZXJ9IHRoZSBoZWlnaHQgb2YgdGhlIHJlbmRlcmVycyB2aWV3XG4gICAgICogQHBhcmFtIFtvcHRpb25zXSB7b2JqZWN0fSBUaGUgb3B0aW9uYWwgcmVuZGVyZXIgcGFyYW1ldGVyc1xuICAgICAqIEBwYXJhbSBbb3B0aW9ucy52aWV3XSB7SFRNTENhbnZhc0VsZW1lbnR9IHRoZSBjYW52YXMgdG8gdXNlIGFzIGEgdmlldywgb3B0aW9uYWxcbiAgICAgKiBAcGFyYW0gW29wdGlvbnMudHJhbnNwYXJlbnQ9ZmFsc2VdIHtib29sZWFufSBJZiB0aGUgcmVuZGVyIHZpZXcgaXMgdHJhbnNwYXJlbnQsIGRlZmF1bHQgZmFsc2VcbiAgICAgKiBAcGFyYW0gW29wdGlvbnMuYW50aWFsaWFzPWZhbHNlXSB7Ym9vbGVhbn0gc2V0cyBhbnRpYWxpYXMgKG9ubHkgYXBwbGljYWJsZSBpbiBjaHJvbWUgYXQgdGhlIG1vbWVudClcbiAgICAgKiBAcGFyYW0gW29wdGlvbnMucHJlc2VydmVEcmF3aW5nQnVmZmVyPWZhbHNlXSB7Ym9vbGVhbn0gZW5hYmxlcyBkcmF3aW5nIGJ1ZmZlciBwcmVzZXJ2YXRpb24sIGVuYWJsZSB0aGlzIGlmIHlvdVxuICAgICAqICAgICAgbmVlZCB0byBjYWxsIHRvRGF0YVVybCBvbiB0aGUgd2ViZ2wgY29udGV4dFxuICAgICAqIEBwYXJhbSBbb3B0aW9ucy5yZXNvbHV0aW9uPTFdIHtudW1iZXJ9IHRoZSByZXNvbHV0aW9uIG9mIHRoZSByZW5kZXJlciwgcmV0aW5hIHdvdWxkIGJlIDJcbiAgICAgKiBAcGFyYW0gW25vV2ViR0w9ZmFsc2VdIHtib29sZWFufSBwcmV2ZW50cyBzZWxlY3Rpb24gb2YgV2ViR0wgcmVuZGVyZXIsIGV2ZW4gaWYgc3VjaCBpcyBwcmVzZW50XG4gICAgICpcbiAgICAgKiBAcmV0dXJuIHtXZWJHTFJlbmRlcmVyfENhbnZhc1JlbmRlcmVyfSBSZXR1cm5zIFdlYkdMIHJlbmRlcmVyIGlmIGF2YWlsYWJsZSwgb3RoZXJ3aXNlIENhbnZhc1JlbmRlcmVyXG4gICAgICovXG4gICAgYXV0b0RldGVjdFJlbmRlcmVyOiBmdW5jdGlvbiAod2lkdGgsIGhlaWdodCwgb3B0aW9ucywgbm9XZWJHTClcbiAgICB7XG4gICAgICAgIHdpZHRoID0gd2lkdGggfHwgODAwO1xuICAgICAgICBoZWlnaHQgPSBoZWlnaHQgfHwgNjAwO1xuXG4gICAgICAgIGlmICghbm9XZWJHTCAmJiBjb3JlLnV0aWxzLmlzV2ViR0xTdXBwb3J0ZWQoKSlcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBjb3JlLldlYkdMUmVuZGVyZXIod2lkdGgsIGhlaWdodCwgb3B0aW9ucyk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbmV3IGNvcmUuQ2FudmFzUmVuZGVyZXIod2lkdGgsIGhlaWdodCwgb3B0aW9ucyk7XG4gICAgfVxufSk7XG4iLCIvLyBAdG9kbyAtIGlnbm9yZSB0aGUgdG9vIG1hbnkgcGFyYW1ldGVycyB3YXJuaW5nIGZvciBub3dcbi8vIHNob3VsZCBlaXRoZXIgZml4IGl0IG9yIGNoYW5nZSB0aGUganNoaW50IGNvbmZpZ1xuLy8ganNoaW50IC1XMDcyXG5cbnZhciBQb2ludCA9IHJlcXVpcmUoJy4vUG9pbnQnKTtcblxuLyoqXG4gKiBUaGUgcGl4aSBNYXRyaXggY2xhc3MgYXMgYW4gb2JqZWN0LCB3aGljaCBtYWtlcyBpdCBhIGxvdCBmYXN0ZXIsXG4gKiBoZXJlIGlzIGEgcmVwcmVzZW50YXRpb24gb2YgaXQgOlxuICogfCBhIHwgYiB8IHR4fFxuICogfCBjIHwgZCB8IHR5fFxuICogfCAwIHwgMCB8IDEgfFxuICpcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqL1xuZnVuY3Rpb24gTWF0cml4KClcbntcbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMVxuICAgICAqL1xuICAgIHRoaXMuYSA9IDE7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMFxuICAgICAqL1xuICAgIHRoaXMuYiA9IDA7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMFxuICAgICAqL1xuICAgIHRoaXMuYyA9IDA7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMVxuICAgICAqL1xuICAgIHRoaXMuZCA9IDE7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMFxuICAgICAqL1xuICAgIHRoaXMudHggPSAwO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDBcbiAgICAgKi9cbiAgICB0aGlzLnR5ID0gMDtcbn1cblxuTWF0cml4LnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IE1hdHJpeDtcbm1vZHVsZS5leHBvcnRzID0gTWF0cml4O1xuXG4vKipcbiAqIENyZWF0ZXMgYSBNYXRyaXggb2JqZWN0IGJhc2VkIG9uIHRoZSBnaXZlbiBhcnJheS4gVGhlIEVsZW1lbnQgdG8gTWF0cml4IG1hcHBpbmcgb3JkZXIgaXMgYXMgZm9sbG93czpcbiAqXG4gKiBhID0gYXJyYXlbMF1cbiAqIGIgPSBhcnJheVsxXVxuICogYyA9IGFycmF5WzNdXG4gKiBkID0gYXJyYXlbNF1cbiAqIHR4ID0gYXJyYXlbMl1cbiAqIHR5ID0gYXJyYXlbNV1cbiAqXG4gKiBAcGFyYW0gYXJyYXkge251bWJlcltdfSBUaGUgYXJyYXkgdGhhdCB0aGUgbWF0cml4IHdpbGwgYmUgcG9wdWxhdGVkIGZyb20uXG4gKi9cbk1hdHJpeC5wcm90b3R5cGUuZnJvbUFycmF5ID0gZnVuY3Rpb24gKGFycmF5KVxue1xuICAgIHRoaXMuYSA9IGFycmF5WzBdO1xuICAgIHRoaXMuYiA9IGFycmF5WzFdO1xuICAgIHRoaXMuYyA9IGFycmF5WzNdO1xuICAgIHRoaXMuZCA9IGFycmF5WzRdO1xuICAgIHRoaXMudHggPSBhcnJheVsyXTtcbiAgICB0aGlzLnR5ID0gYXJyYXlbNV07XG59O1xuXG5cbi8qKlxuICogc2V0cyB0aGUgbWF0cml4IHByb3BlcnRpZXNcbiAqXG4gKiBAcGFyYW0ge251bWJlcn0gYVxuICogQHBhcmFtIHtudW1iZXJ9IGJcbiAqIEBwYXJhbSB7bnVtYmVyfSBjXG4gKiBAcGFyYW0ge251bWJlcn0gZFxuICogQHBhcmFtIHtudW1iZXJ9IHR4XG4gKiBAcGFyYW0ge251bWJlcn0gdHlcbiAqXG4gKiBAcmV0dXJuIHtQSVhJLk1hdHJpeH0gVGhpcyBtYXRyaXguIEdvb2QgZm9yIGNoYWluaW5nIG1ldGhvZCBjYWxscy5cbiAqL1xuTWF0cml4LnByb3RvdHlwZS5zZXQgPSBmdW5jdGlvbiAoYSwgYiwgYywgZCwgdHgsIHR5KVxue1xuICAgIHRoaXMuYSA9IGE7XG4gICAgdGhpcy5iID0gYjtcbiAgICB0aGlzLmMgPSBjO1xuICAgIHRoaXMuZCA9IGQ7XG4gICAgdGhpcy50eCA9IHR4O1xuICAgIHRoaXMudHkgPSB0eTtcblxuICAgIHJldHVybiB0aGlzO1xufTtcblxuXG4vKipcbiAqIENyZWF0ZXMgYW4gYXJyYXkgZnJvbSB0aGUgY3VycmVudCBNYXRyaXggb2JqZWN0LlxuICpcbiAqIEBwYXJhbSB0cmFuc3Bvc2Uge2Jvb2xlYW59IFdoZXRoZXIgd2UgbmVlZCB0byB0cmFuc3Bvc2UgdGhlIG1hdHJpeCBvciBub3RcbiAqIEBwYXJhbSBbb3V0XSB7QXJyYXl9IElmIHByb3ZpZGVkIHRoZSBhcnJheSB3aWxsIGJlIGFzc2lnbmVkIHRvIG91dFxuICogQHJldHVybiB7bnVtYmVyW119IHRoZSBuZXdseSBjcmVhdGVkIGFycmF5IHdoaWNoIGNvbnRhaW5zIHRoZSBtYXRyaXhcbiAqL1xuTWF0cml4LnByb3RvdHlwZS50b0FycmF5ID0gZnVuY3Rpb24gKHRyYW5zcG9zZSwgb3V0KVxue1xuICAgIGlmICghdGhpcy5hcnJheSlcbiAgICB7XG4gICAgICAgIHRoaXMuYXJyYXkgPSBuZXcgRmxvYXQzMkFycmF5KDkpO1xuICAgIH1cblxuICAgIHZhciBhcnJheSA9IG91dCB8fCB0aGlzLmFycmF5O1xuXG4gICAgaWYgKHRyYW5zcG9zZSlcbiAgICB7XG4gICAgICAgIGFycmF5WzBdID0gdGhpcy5hO1xuICAgICAgICBhcnJheVsxXSA9IHRoaXMuYjtcbiAgICAgICAgYXJyYXlbMl0gPSAwO1xuICAgICAgICBhcnJheVszXSA9IHRoaXMuYztcbiAgICAgICAgYXJyYXlbNF0gPSB0aGlzLmQ7XG4gICAgICAgIGFycmF5WzVdID0gMDtcbiAgICAgICAgYXJyYXlbNl0gPSB0aGlzLnR4O1xuICAgICAgICBhcnJheVs3XSA9IHRoaXMudHk7XG4gICAgICAgIGFycmF5WzhdID0gMTtcbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgYXJyYXlbMF0gPSB0aGlzLmE7XG4gICAgICAgIGFycmF5WzFdID0gdGhpcy5jO1xuICAgICAgICBhcnJheVsyXSA9IHRoaXMudHg7XG4gICAgICAgIGFycmF5WzNdID0gdGhpcy5iO1xuICAgICAgICBhcnJheVs0XSA9IHRoaXMuZDtcbiAgICAgICAgYXJyYXlbNV0gPSB0aGlzLnR5O1xuICAgICAgICBhcnJheVs2XSA9IDA7XG4gICAgICAgIGFycmF5WzddID0gMDtcbiAgICAgICAgYXJyYXlbOF0gPSAxO1xuICAgIH1cblxuICAgIHJldHVybiBhcnJheTtcbn07XG5cbi8qKlxuICogR2V0IGEgbmV3IHBvc2l0aW9uIHdpdGggdGhlIGN1cnJlbnQgdHJhbnNmb3JtYXRpb24gYXBwbGllZC5cbiAqIENhbiBiZSB1c2VkIHRvIGdvIGZyb20gYSBjaGlsZCdzIGNvb3JkaW5hdGUgc3BhY2UgdG8gdGhlIHdvcmxkIGNvb3JkaW5hdGUgc3BhY2UuIChlLmcuIHJlbmRlcmluZylcbiAqXG4gKiBAcGFyYW0gcG9zIHtQSVhJLlBvaW50fSBUaGUgb3JpZ2luXG4gKiBAcGFyYW0gW25ld1Bvc10ge1BJWEkuUG9pbnR9IFRoZSBwb2ludCB0aGF0IHRoZSBuZXcgcG9zaXRpb24gaXMgYXNzaWduZWQgdG8gKGFsbG93ZWQgdG8gYmUgc2FtZSBhcyBpbnB1dClcbiAqIEByZXR1cm4ge1BJWEkuUG9pbnR9IFRoZSBuZXcgcG9pbnQsIHRyYW5zZm9ybWVkIHRocm91Z2ggdGhpcyBtYXRyaXhcbiAqL1xuTWF0cml4LnByb3RvdHlwZS5hcHBseSA9IGZ1bmN0aW9uIChwb3MsIG5ld1BvcylcbntcbiAgICBuZXdQb3MgPSBuZXdQb3MgfHwgbmV3IFBvaW50KCk7XG5cbiAgICB2YXIgeCA9IHBvcy54O1xuICAgIHZhciB5ID0gcG9zLnk7XG5cbiAgICBuZXdQb3MueCA9IHRoaXMuYSAqIHggKyB0aGlzLmMgKiB5ICsgdGhpcy50eDtcbiAgICBuZXdQb3MueSA9IHRoaXMuYiAqIHggKyB0aGlzLmQgKiB5ICsgdGhpcy50eTtcblxuICAgIHJldHVybiBuZXdQb3M7XG59O1xuXG4vKipcbiAqIEdldCBhIG5ldyBwb3NpdGlvbiB3aXRoIHRoZSBpbnZlcnNlIG9mIHRoZSBjdXJyZW50IHRyYW5zZm9ybWF0aW9uIGFwcGxpZWQuXG4gKiBDYW4gYmUgdXNlZCB0byBnbyBmcm9tIHRoZSB3b3JsZCBjb29yZGluYXRlIHNwYWNlIHRvIGEgY2hpbGQncyBjb29yZGluYXRlIHNwYWNlLiAoZS5nLiBpbnB1dClcbiAqXG4gKiBAcGFyYW0gcG9zIHtQSVhJLlBvaW50fSBUaGUgb3JpZ2luXG4gKiBAcGFyYW0gW25ld1Bvc10ge1BJWEkuUG9pbnR9IFRoZSBwb2ludCB0aGF0IHRoZSBuZXcgcG9zaXRpb24gaXMgYXNzaWduZWQgdG8gKGFsbG93ZWQgdG8gYmUgc2FtZSBhcyBpbnB1dClcbiAqIEByZXR1cm4ge1BJWEkuUG9pbnR9IFRoZSBuZXcgcG9pbnQsIGludmVyc2UtdHJhbnNmb3JtZWQgdGhyb3VnaCB0aGlzIG1hdHJpeFxuICovXG5NYXRyaXgucHJvdG90eXBlLmFwcGx5SW52ZXJzZSA9IGZ1bmN0aW9uIChwb3MsIG5ld1BvcylcbntcbiAgICBuZXdQb3MgPSBuZXdQb3MgfHwgbmV3IFBvaW50KCk7XG5cbiAgICB2YXIgaWQgPSAxIC8gKHRoaXMuYSAqIHRoaXMuZCArIHRoaXMuYyAqIC10aGlzLmIpO1xuXG4gICAgdmFyIHggPSBwb3MueDtcbiAgICB2YXIgeSA9IHBvcy55O1xuXG4gICAgbmV3UG9zLnggPSB0aGlzLmQgKiBpZCAqIHggKyAtdGhpcy5jICogaWQgKiB5ICsgKHRoaXMudHkgKiB0aGlzLmMgLSB0aGlzLnR4ICogdGhpcy5kKSAqIGlkO1xuICAgIG5ld1Bvcy55ID0gdGhpcy5hICogaWQgKiB5ICsgLXRoaXMuYiAqIGlkICogeCArICgtdGhpcy50eSAqIHRoaXMuYSArIHRoaXMudHggKiB0aGlzLmIpICogaWQ7XG5cbiAgICByZXR1cm4gbmV3UG9zO1xufTtcblxuLyoqXG4gKiBUcmFuc2xhdGVzIHRoZSBtYXRyaXggb24gdGhlIHggYW5kIHkuXG4gKlxuICogQHBhcmFtIHtudW1iZXJ9IHhcbiAqIEBwYXJhbSB7bnVtYmVyfSB5XG4gKiBAcmV0dXJuIHtQSVhJLk1hdHJpeH0gVGhpcyBtYXRyaXguIEdvb2QgZm9yIGNoYWluaW5nIG1ldGhvZCBjYWxscy5cbiAqL1xuTWF0cml4LnByb3RvdHlwZS50cmFuc2xhdGUgPSBmdW5jdGlvbiAoeCwgeSlcbntcbiAgICB0aGlzLnR4ICs9IHg7XG4gICAgdGhpcy50eSArPSB5O1xuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIEFwcGxpZXMgYSBzY2FsZSB0cmFuc2Zvcm1hdGlvbiB0byB0aGUgbWF0cml4LlxuICpcbiAqIEBwYXJhbSB7bnVtYmVyfSB4IFRoZSBhbW91bnQgdG8gc2NhbGUgaG9yaXpvbnRhbGx5XG4gKiBAcGFyYW0ge251bWJlcn0geSBUaGUgYW1vdW50IHRvIHNjYWxlIHZlcnRpY2FsbHlcbiAqIEByZXR1cm4ge1BJWEkuTWF0cml4fSBUaGlzIG1hdHJpeC4gR29vZCBmb3IgY2hhaW5pbmcgbWV0aG9kIGNhbGxzLlxuICovXG5NYXRyaXgucHJvdG90eXBlLnNjYWxlID0gZnVuY3Rpb24gKHgsIHkpXG57XG4gICAgdGhpcy5hICo9IHg7XG4gICAgdGhpcy5kICo9IHk7XG4gICAgdGhpcy5jICo9IHg7XG4gICAgdGhpcy5iICo9IHk7XG4gICAgdGhpcy50eCAqPSB4O1xuICAgIHRoaXMudHkgKj0geTtcblxuICAgIHJldHVybiB0aGlzO1xufTtcblxuXG4vKipcbiAqIEFwcGxpZXMgYSByb3RhdGlvbiB0cmFuc2Zvcm1hdGlvbiB0byB0aGUgbWF0cml4LlxuICpcbiAqIEBwYXJhbSB7bnVtYmVyfSBhbmdsZSAtIFRoZSBhbmdsZSBpbiByYWRpYW5zLlxuICogQHJldHVybiB7UElYSS5NYXRyaXh9IFRoaXMgbWF0cml4LiBHb29kIGZvciBjaGFpbmluZyBtZXRob2QgY2FsbHMuXG4gKi9cbk1hdHJpeC5wcm90b3R5cGUucm90YXRlID0gZnVuY3Rpb24gKGFuZ2xlKVxue1xuICAgIHZhciBjb3MgPSBNYXRoLmNvcyggYW5nbGUgKTtcbiAgICB2YXIgc2luID0gTWF0aC5zaW4oIGFuZ2xlICk7XG5cbiAgICB2YXIgYTEgPSB0aGlzLmE7XG4gICAgdmFyIGMxID0gdGhpcy5jO1xuICAgIHZhciB0eDEgPSB0aGlzLnR4O1xuXG4gICAgdGhpcy5hID0gYTEgKiBjb3MtdGhpcy5iICogc2luO1xuICAgIHRoaXMuYiA9IGExICogc2luK3RoaXMuYiAqIGNvcztcbiAgICB0aGlzLmMgPSBjMSAqIGNvcy10aGlzLmQgKiBzaW47XG4gICAgdGhpcy5kID0gYzEgKiBzaW4rdGhpcy5kICogY29zO1xuICAgIHRoaXMudHggPSB0eDEgKiBjb3MgLSB0aGlzLnR5ICogc2luO1xuICAgIHRoaXMudHkgPSB0eDEgKiBzaW4gKyB0aGlzLnR5ICogY29zO1xuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIEFwcGVuZHMgdGhlIGdpdmVuIE1hdHJpeCB0byB0aGlzIE1hdHJpeC5cbiAqXG4gKiBAcGFyYW0ge1BJWEkuTWF0cml4fSBtYXRyaXhcbiAqIEByZXR1cm4ge1BJWEkuTWF0cml4fSBUaGlzIG1hdHJpeC4gR29vZCBmb3IgY2hhaW5pbmcgbWV0aG9kIGNhbGxzLlxuICovXG5NYXRyaXgucHJvdG90eXBlLmFwcGVuZCA9IGZ1bmN0aW9uIChtYXRyaXgpXG57XG4gICAgdmFyIGExID0gdGhpcy5hO1xuICAgIHZhciBiMSA9IHRoaXMuYjtcbiAgICB2YXIgYzEgPSB0aGlzLmM7XG4gICAgdmFyIGQxID0gdGhpcy5kO1xuXG4gICAgdGhpcy5hICA9IG1hdHJpeC5hICogYTEgKyBtYXRyaXguYiAqIGMxO1xuICAgIHRoaXMuYiAgPSBtYXRyaXguYSAqIGIxICsgbWF0cml4LmIgKiBkMTtcbiAgICB0aGlzLmMgID0gbWF0cml4LmMgKiBhMSArIG1hdHJpeC5kICogYzE7XG4gICAgdGhpcy5kICA9IG1hdHJpeC5jICogYjEgKyBtYXRyaXguZCAqIGQxO1xuXG4gICAgdGhpcy50eCA9IG1hdHJpeC50eCAqIGExICsgbWF0cml4LnR5ICogYzEgKyB0aGlzLnR4O1xuICAgIHRoaXMudHkgPSBtYXRyaXgudHggKiBiMSArIG1hdHJpeC50eSAqIGQxICsgdGhpcy50eTtcblxuICAgIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBTZXRzIHRoZSBtYXRyaXggYmFzZWQgb24gYWxsIHRoZSBhdmFpbGFibGUgcHJvcGVydGllc1xuICpcbiAqIEBwYXJhbSB7bnVtYmVyfSB4XG4gKiBAcGFyYW0ge251bWJlcn0geVxuICogQHBhcmFtIHtudW1iZXJ9IHBpdm90WFxuICogQHBhcmFtIHtudW1iZXJ9IHBpdm90WVxuICogQHBhcmFtIHtudW1iZXJ9IHNjYWxlWFxuICogQHBhcmFtIHtudW1iZXJ9IHNjYWxlWVxuICogQHBhcmFtIHtudW1iZXJ9IHJvdGF0aW9uXG4gKiBAcGFyYW0ge251bWJlcn0gc2tld1hcbiAqIEBwYXJhbSB7bnVtYmVyfSBza2V3WVxuICpcbiAqIEByZXR1cm4ge1BJWEkuTWF0cml4fSBUaGlzIG1hdHJpeC4gR29vZCBmb3IgY2hhaW5pbmcgbWV0aG9kIGNhbGxzLlxuICovXG5NYXRyaXgucHJvdG90eXBlLnNldFRyYW5zZm9ybSA9IGZ1bmN0aW9uICh4LCB5LCBwaXZvdFgsIHBpdm90WSwgc2NhbGVYLCBzY2FsZVksIHJvdGF0aW9uLCBza2V3WCwgc2tld1kpXG57XG4gICAgdmFyIGEsIGIsIGMsIGQsIHNyLCBjciwgY3ksIHN5LCBuc3gsIGN4O1xuXG4gICAgc3IgID0gTWF0aC5zaW4ocm90YXRpb24pO1xuICAgIGNyICA9IE1hdGguY29zKHJvdGF0aW9uKTtcbiAgICBjeSAgPSBNYXRoLmNvcyhza2V3WSk7XG4gICAgc3kgID0gTWF0aC5zaW4oc2tld1kpO1xuICAgIG5zeCA9IC1NYXRoLnNpbihza2V3WCk7XG4gICAgY3ggID0gIE1hdGguY29zKHNrZXdYKTtcblxuICAgIGEgID0gIGNyICogc2NhbGVYO1xuICAgIGIgID0gIHNyICogc2NhbGVYO1xuICAgIGMgID0gLXNyICogc2NhbGVZO1xuICAgIGQgID0gIGNyICogc2NhbGVZO1xuXG4gICAgdGhpcy5hICA9IGN5ICogYSArIHN5ICogYztcbiAgICB0aGlzLmIgID0gY3kgKiBiICsgc3kgKiBkO1xuICAgIHRoaXMuYyAgPSBuc3ggKiBhICsgY3ggKiBjO1xuICAgIHRoaXMuZCAgPSBuc3ggKiBiICsgY3ggKiBkO1xuXG4gICAgdGhpcy50eCA9IHggKyAoIHBpdm90WCAqIGEgKyBwaXZvdFkgKiBjICk7XG4gICAgdGhpcy50eSA9IHkgKyAoIHBpdm90WCAqIGIgKyBwaXZvdFkgKiBkICk7XG5cbiAgICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogUHJlcGVuZHMgdGhlIGdpdmVuIE1hdHJpeCB0byB0aGlzIE1hdHJpeC5cbiAqXG4gKiBAcGFyYW0ge1BJWEkuTWF0cml4fSBtYXRyaXhcbiAqIEByZXR1cm4ge1BJWEkuTWF0cml4fSBUaGlzIG1hdHJpeC4gR29vZCBmb3IgY2hhaW5pbmcgbWV0aG9kIGNhbGxzLlxuICovXG5NYXRyaXgucHJvdG90eXBlLnByZXBlbmQgPSBmdW5jdGlvbihtYXRyaXgpXG57XG4gICAgdmFyIHR4MSA9IHRoaXMudHg7XG5cbiAgICBpZiAobWF0cml4LmEgIT09IDEgfHwgbWF0cml4LmIgIT09IDAgfHwgbWF0cml4LmMgIT09IDAgfHwgbWF0cml4LmQgIT09IDEpXG4gICAge1xuICAgICAgICB2YXIgYTEgPSB0aGlzLmE7XG4gICAgICAgIHZhciBjMSA9IHRoaXMuYztcbiAgICAgICAgdGhpcy5hICA9IGExKm1hdHJpeC5hK3RoaXMuYiptYXRyaXguYztcbiAgICAgICAgdGhpcy5iICA9IGExKm1hdHJpeC5iK3RoaXMuYiptYXRyaXguZDtcbiAgICAgICAgdGhpcy5jICA9IGMxKm1hdHJpeC5hK3RoaXMuZCptYXRyaXguYztcbiAgICAgICAgdGhpcy5kICA9IGMxKm1hdHJpeC5iK3RoaXMuZCptYXRyaXguZDtcbiAgICB9XG5cbiAgICB0aGlzLnR4ID0gdHgxKm1hdHJpeC5hK3RoaXMudHkqbWF0cml4LmMrbWF0cml4LnR4O1xuICAgIHRoaXMudHkgPSB0eDEqbWF0cml4LmIrdGhpcy50eSptYXRyaXguZCttYXRyaXgudHk7XG5cbiAgICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogSW52ZXJ0cyB0aGlzIG1hdHJpeFxuICpcbiAqIEByZXR1cm4ge1BJWEkuTWF0cml4fSBUaGlzIG1hdHJpeC4gR29vZCBmb3IgY2hhaW5pbmcgbWV0aG9kIGNhbGxzLlxuICovXG5NYXRyaXgucHJvdG90eXBlLmludmVydCA9IGZ1bmN0aW9uKClcbntcbiAgICB2YXIgYTEgPSB0aGlzLmE7XG4gICAgdmFyIGIxID0gdGhpcy5iO1xuICAgIHZhciBjMSA9IHRoaXMuYztcbiAgICB2YXIgZDEgPSB0aGlzLmQ7XG4gICAgdmFyIHR4MSA9IHRoaXMudHg7XG4gICAgdmFyIG4gPSBhMSpkMS1iMSpjMTtcblxuICAgIHRoaXMuYSA9IGQxL247XG4gICAgdGhpcy5iID0gLWIxL247XG4gICAgdGhpcy5jID0gLWMxL247XG4gICAgdGhpcy5kID0gYTEvbjtcbiAgICB0aGlzLnR4ID0gKGMxKnRoaXMudHktZDEqdHgxKS9uO1xuICAgIHRoaXMudHkgPSAtKGExKnRoaXMudHktYjEqdHgxKS9uO1xuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG5cbi8qKlxuICogUmVzZXRzIHRoaXMgTWF0aXggdG8gYW4gaWRlbnRpdHkgKGRlZmF1bHQpIG1hdHJpeC5cbiAqXG4gKiBAcmV0dXJuIHtQSVhJLk1hdHJpeH0gVGhpcyBtYXRyaXguIEdvb2QgZm9yIGNoYWluaW5nIG1ldGhvZCBjYWxscy5cbiAqL1xuTWF0cml4LnByb3RvdHlwZS5pZGVudGl0eSA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy5hID0gMTtcbiAgICB0aGlzLmIgPSAwO1xuICAgIHRoaXMuYyA9IDA7XG4gICAgdGhpcy5kID0gMTtcbiAgICB0aGlzLnR4ID0gMDtcbiAgICB0aGlzLnR5ID0gMDtcblxuICAgIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBDcmVhdGVzIGEgbmV3IE1hdHJpeCBvYmplY3Qgd2l0aCB0aGUgc2FtZSB2YWx1ZXMgYXMgdGhpcyBvbmUuXG4gKlxuICogQHJldHVybiB7UElYSS5NYXRyaXh9IEEgY29weSBvZiB0aGlzIG1hdHJpeC4gR29vZCBmb3IgY2hhaW5pbmcgbWV0aG9kIGNhbGxzLlxuICovXG5NYXRyaXgucHJvdG90eXBlLmNsb25lID0gZnVuY3Rpb24gKClcbntcbiAgICB2YXIgbWF0cml4ID0gbmV3IE1hdHJpeCgpO1xuICAgIG1hdHJpeC5hID0gdGhpcy5hO1xuICAgIG1hdHJpeC5iID0gdGhpcy5iO1xuICAgIG1hdHJpeC5jID0gdGhpcy5jO1xuICAgIG1hdHJpeC5kID0gdGhpcy5kO1xuICAgIG1hdHJpeC50eCA9IHRoaXMudHg7XG4gICAgbWF0cml4LnR5ID0gdGhpcy50eTtcblxuICAgIHJldHVybiBtYXRyaXg7XG59O1xuXG4vKipcbiAqIENoYW5nZXMgdGhlIHZhbHVlcyBvZiB0aGUgZ2l2ZW4gbWF0cml4IHRvIGJlIHRoZSBzYW1lIGFzIHRoZSBvbmVzIGluIHRoaXMgbWF0cml4XG4gKlxuICogQHJldHVybiB7UElYSS5NYXRyaXh9IFRoZSBtYXRyaXggZ2l2ZW4gaW4gcGFyYW1ldGVyIHdpdGggaXRzIHZhbHVlcyB1cGRhdGVkLlxuICovXG5NYXRyaXgucHJvdG90eXBlLmNvcHkgPSBmdW5jdGlvbiAobWF0cml4KVxue1xuICAgIG1hdHJpeC5hID0gdGhpcy5hO1xuICAgIG1hdHJpeC5iID0gdGhpcy5iO1xuICAgIG1hdHJpeC5jID0gdGhpcy5jO1xuICAgIG1hdHJpeC5kID0gdGhpcy5kO1xuICAgIG1hdHJpeC50eCA9IHRoaXMudHg7XG4gICAgbWF0cml4LnR5ID0gdGhpcy50eTtcblxuICAgIHJldHVybiBtYXRyaXg7XG59O1xuXG4vKipcbiAqIEEgZGVmYXVsdCAoaWRlbnRpdHkpIG1hdHJpeFxuICpcbiAqIEBzdGF0aWNcbiAqIEBjb25zdFxuICovXG5NYXRyaXguSURFTlRJVFkgPSBuZXcgTWF0cml4KCk7XG5cbi8qKlxuICogQSB0ZW1wIG1hdHJpeFxuICpcbiAqIEBzdGF0aWNcbiAqIEBjb25zdFxuICovXG5NYXRyaXguVEVNUF9NQVRSSVggPSBuZXcgTWF0cml4KCk7XG4iLCIvKipcbiAqIFRoZSBQb2ludCBvYmplY3QgcmVwcmVzZW50cyBhIGxvY2F0aW9uIGluIGEgdHdvLWRpbWVuc2lvbmFsIGNvb3JkaW5hdGUgc3lzdGVtLCB3aGVyZSB4IHJlcHJlc2VudHNcbiAqIHRoZSBob3Jpem9udGFsIGF4aXMgYW5kIHkgcmVwcmVzZW50cyB0aGUgdmVydGljYWwgYXhpcy5cbiAqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gW3g9MF0ge251bWJlcn0gcG9zaXRpb24gb2YgdGhlIHBvaW50IG9uIHRoZSB4IGF4aXNcbiAqIEBwYXJhbSBbeT0wXSB7bnVtYmVyfSBwb3NpdGlvbiBvZiB0aGUgcG9pbnQgb24gdGhlIHkgYXhpc1xuICovXG5mdW5jdGlvbiBQb2ludCh4LCB5KVxue1xuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAwXG4gICAgICovXG4gICAgdGhpcy54ID0geCB8fCAwO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDBcbiAgICAgKi9cbiAgICB0aGlzLnkgPSB5IHx8IDA7XG59XG5cblBvaW50LnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFBvaW50O1xubW9kdWxlLmV4cG9ydHMgPSBQb2ludDtcblxuLyoqXG4gKiBDcmVhdGVzIGEgY2xvbmUgb2YgdGhpcyBwb2ludFxuICpcbiAqIEByZXR1cm4ge1BJWEkuUG9pbnR9IGEgY29weSBvZiB0aGUgcG9pbnRcbiAqL1xuUG9pbnQucHJvdG90eXBlLmNsb25lID0gZnVuY3Rpb24gKClcbntcbiAgICByZXR1cm4gbmV3IFBvaW50KHRoaXMueCwgdGhpcy55KTtcbn07XG5cbi8qKlxuICogQ29waWVzIHggYW5kIHkgZnJvbSB0aGUgZ2l2ZW4gcG9pbnRcbiAqXG4gKiBAcGFyYW0gcCB7UElYSS5Qb2ludH1cbiAqL1xuUG9pbnQucHJvdG90eXBlLmNvcHkgPSBmdW5jdGlvbiAocCkge1xuICAgIHRoaXMuc2V0KHAueCwgcC55KTtcbn07XG5cbi8qKlxuICogUmV0dXJucyB0cnVlIGlmIHRoZSBnaXZlbiBwb2ludCBpcyBlcXVhbCB0byB0aGlzIHBvaW50XG4gKlxuICogQHBhcmFtIHAge1BJWEkuUG9pbnR9XG4gKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAqL1xuUG9pbnQucHJvdG90eXBlLmVxdWFscyA9IGZ1bmN0aW9uIChwKSB7XG4gICAgcmV0dXJuIChwLnggPT09IHRoaXMueCkgJiYgKHAueSA9PT0gdGhpcy55KTtcbn07XG5cbi8qKlxuICogU2V0cyB0aGUgcG9pbnQgdG8gYSBuZXcgeCBhbmQgeSBwb3NpdGlvbi5cbiAqIElmIHkgaXMgb21pdHRlZCwgYm90aCB4IGFuZCB5IHdpbGwgYmUgc2V0IHRvIHguXG4gKlxuICogQHBhcmFtIFt4PTBdIHtudW1iZXJ9IHBvc2l0aW9uIG9mIHRoZSBwb2ludCBvbiB0aGUgeCBheGlzXG4gKiBAcGFyYW0gW3k9MF0ge251bWJlcn0gcG9zaXRpb24gb2YgdGhlIHBvaW50IG9uIHRoZSB5IGF4aXNcbiAqL1xuUG9pbnQucHJvdG90eXBlLnNldCA9IGZ1bmN0aW9uICh4LCB5KVxue1xuICAgIHRoaXMueCA9IHggfHwgMDtcbiAgICB0aGlzLnkgPSB5IHx8ICggKHkgIT09IDApID8gdGhpcy54IDogMCApIDtcbn07XG4iLCIvKipcbiAqIE1hdGggY2xhc3NlcyBhbmQgdXRpbGl0aWVzIG1peGVkIGludG8gUElYSSBuYW1lc3BhY2UuXG4gKlxuICogQGxlbmRzIFBJWElcbiAqL1xubW9kdWxlLmV4cG9ydHMgPSB7XG4gICAgLy8gVGhlc2Ugd2lsbCBiZSBtaXhlZCB0byBiZSBtYWRlIHB1YmxpY2x5IGF2YWlsYWJsZSxcbiAgICAvLyB3aGlsZSB0aGlzIG1vZHVsZSBpcyB1c2VkIGludGVybmFsbHkgaW4gY29yZVxuICAgIC8vIHRvIGF2b2lkIGNpcmN1bGFyIGRlcGVuZGVuY2llcyBhbmQgY3V0IGRvd24gb25cbiAgICAvLyBpbnRlcm5hbCBtb2R1bGUgcmVxdWlyZXMuXG5cbiAgICBQb2ludDogICAgICByZXF1aXJlKCcuL1BvaW50JyksXG4gICAgTWF0cml4OiAgICAgcmVxdWlyZSgnLi9NYXRyaXgnKSxcblxuICAgIENpcmNsZTogICAgIHJlcXVpcmUoJy4vc2hhcGVzL0NpcmNsZScpLFxuICAgIEVsbGlwc2U6ICAgIHJlcXVpcmUoJy4vc2hhcGVzL0VsbGlwc2UnKSxcbiAgICBQb2x5Z29uOiAgICByZXF1aXJlKCcuL3NoYXBlcy9Qb2x5Z29uJyksXG4gICAgUmVjdGFuZ2xlOiAgcmVxdWlyZSgnLi9zaGFwZXMvUmVjdGFuZ2xlJyksXG4gICAgUm91bmRlZFJlY3RhbmdsZTogcmVxdWlyZSgnLi9zaGFwZXMvUm91bmRlZFJlY3RhbmdsZScpXG59O1xuIiwidmFyIFJlY3RhbmdsZSA9IHJlcXVpcmUoJy4vUmVjdGFuZ2xlJyksXG4gICAgQ09OU1QgPSByZXF1aXJlKCcuLi8uLi9jb25zdCcpO1xuXG4vKipcbiAqIFRoZSBDaXJjbGUgb2JqZWN0IGNhbiBiZSB1c2VkIHRvIHNwZWNpZnkgYSBoaXQgYXJlYSBmb3IgZGlzcGxheU9iamVjdHNcbiAqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0geCB7bnVtYmVyfSBUaGUgWCBjb29yZGluYXRlIG9mIHRoZSBjZW50ZXIgb2YgdGhpcyBjaXJjbGVcbiAqIEBwYXJhbSB5IHtudW1iZXJ9IFRoZSBZIGNvb3JkaW5hdGUgb2YgdGhlIGNlbnRlciBvZiB0aGlzIGNpcmNsZVxuICogQHBhcmFtIHJhZGl1cyB7bnVtYmVyfSBUaGUgcmFkaXVzIG9mIHRoZSBjaXJjbGVcbiAqL1xuZnVuY3Rpb24gQ2lyY2xlKHgsIHksIHJhZGl1cylcbntcbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMFxuICAgICAqL1xuICAgIHRoaXMueCA9IHggfHwgMDtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAwXG4gICAgICovXG4gICAgdGhpcy55ID0geSB8fCAwO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDBcbiAgICAgKi9cbiAgICB0aGlzLnJhZGl1cyA9IHJhZGl1cyB8fCAwO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHR5cGUgb2YgdGhlIG9iamVjdCwgbWFpbmx5IHVzZWQgdG8gYXZvaWQgYGluc3RhbmNlb2ZgIGNoZWNrc1xuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMudHlwZSA9IENPTlNULlNIQVBFUy5DSVJDO1xufVxuXG5DaXJjbGUucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gQ2lyY2xlO1xubW9kdWxlLmV4cG9ydHMgPSBDaXJjbGU7XG5cbi8qKlxuICogQ3JlYXRlcyBhIGNsb25lIG9mIHRoaXMgQ2lyY2xlIGluc3RhbmNlXG4gKlxuICogQHJldHVybiB7UElYSS5DaXJjbGV9IGEgY29weSBvZiB0aGUgQ2lyY2xlXG4gKi9cbkNpcmNsZS5wcm90b3R5cGUuY2xvbmUgPSBmdW5jdGlvbiAoKVxue1xuICAgIHJldHVybiBuZXcgQ2lyY2xlKHRoaXMueCwgdGhpcy55LCB0aGlzLnJhZGl1cyk7XG59O1xuXG4vKipcbiAqIENoZWNrcyB3aGV0aGVyIHRoZSB4IGFuZCB5IGNvb3JkaW5hdGVzIGdpdmVuIGFyZSBjb250YWluZWQgd2l0aGluIHRoaXMgY2lyY2xlXG4gKlxuICogQHBhcmFtIHgge251bWJlcn0gVGhlIFggY29vcmRpbmF0ZSBvZiB0aGUgcG9pbnQgdG8gdGVzdFxuICogQHBhcmFtIHkge251bWJlcn0gVGhlIFkgY29vcmRpbmF0ZSBvZiB0aGUgcG9pbnQgdG8gdGVzdFxuICogQHJldHVybiB7Ym9vbGVhbn0gV2hldGhlciB0aGUgeC95IGNvb3JkaW5hdGVzIGFyZSB3aXRoaW4gdGhpcyBDaXJjbGVcbiAqL1xuQ2lyY2xlLnByb3RvdHlwZS5jb250YWlucyA9IGZ1bmN0aW9uICh4LCB5KVxue1xuICAgIGlmICh0aGlzLnJhZGl1cyA8PSAwKVxuICAgIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHZhciBkeCA9ICh0aGlzLnggLSB4KSxcbiAgICAgICAgZHkgPSAodGhpcy55IC0geSksXG4gICAgICAgIHIyID0gdGhpcy5yYWRpdXMgKiB0aGlzLnJhZGl1cztcblxuICAgIGR4ICo9IGR4O1xuICAgIGR5ICo9IGR5O1xuXG4gICAgcmV0dXJuIChkeCArIGR5IDw9IHIyKTtcbn07XG5cbi8qKlxuKiBSZXR1cm5zIHRoZSBmcmFtaW5nIHJlY3RhbmdsZSBvZiB0aGUgY2lyY2xlIGFzIGEgUmVjdGFuZ2xlIG9iamVjdFxuKlxuKiBAcmV0dXJuIHtQSVhJLlJlY3RhbmdsZX0gdGhlIGZyYW1pbmcgcmVjdGFuZ2xlXG4qL1xuQ2lyY2xlLnByb3RvdHlwZS5nZXRCb3VuZHMgPSBmdW5jdGlvbiAoKVxue1xuICAgIHJldHVybiBuZXcgUmVjdGFuZ2xlKHRoaXMueCAtIHRoaXMucmFkaXVzLCB0aGlzLnkgLSB0aGlzLnJhZGl1cywgdGhpcy5yYWRpdXMgKiAyLCB0aGlzLnJhZGl1cyAqIDIpO1xufTtcbiIsInZhciBSZWN0YW5nbGUgPSByZXF1aXJlKCcuL1JlY3RhbmdsZScpLFxuICAgIENPTlNUID0gcmVxdWlyZSgnLi4vLi4vY29uc3QnKTtcblxuLyoqXG4gKiBUaGUgRWxsaXBzZSBvYmplY3QgY2FuIGJlIHVzZWQgdG8gc3BlY2lmeSBhIGhpdCBhcmVhIGZvciBkaXNwbGF5T2JqZWN0c1xuICpcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqIEBwYXJhbSB4IHtudW1iZXJ9IFRoZSBYIGNvb3JkaW5hdGUgb2YgdGhlIGNlbnRlciBvZiB0aGUgZWxsaXBzZVxuICogQHBhcmFtIHkge251bWJlcn0gVGhlIFkgY29vcmRpbmF0ZSBvZiB0aGUgY2VudGVyIG9mIHRoZSBlbGxpcHNlXG4gKiBAcGFyYW0gd2lkdGgge251bWJlcn0gVGhlIGhhbGYgd2lkdGggb2YgdGhpcyBlbGxpcHNlXG4gKiBAcGFyYW0gaGVpZ2h0IHtudW1iZXJ9IFRoZSBoYWxmIGhlaWdodCBvZiB0aGlzIGVsbGlwc2VcbiAqL1xuZnVuY3Rpb24gRWxsaXBzZSh4LCB5LCB3aWR0aCwgaGVpZ2h0KVxue1xuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAwXG4gICAgICovXG4gICAgdGhpcy54ID0geCB8fCAwO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDBcbiAgICAgKi9cbiAgICB0aGlzLnkgPSB5IHx8IDA7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMFxuICAgICAqL1xuICAgIHRoaXMud2lkdGggPSB3aWR0aCB8fCAwO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDBcbiAgICAgKi9cbiAgICB0aGlzLmhlaWdodCA9IGhlaWdodCB8fCAwO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHR5cGUgb2YgdGhlIG9iamVjdCwgbWFpbmx5IHVzZWQgdG8gYXZvaWQgYGluc3RhbmNlb2ZgIGNoZWNrc1xuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMudHlwZSA9IENPTlNULlNIQVBFUy5FTElQO1xufVxuXG5FbGxpcHNlLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IEVsbGlwc2U7XG5tb2R1bGUuZXhwb3J0cyA9IEVsbGlwc2U7XG5cbi8qKlxuICogQ3JlYXRlcyBhIGNsb25lIG9mIHRoaXMgRWxsaXBzZSBpbnN0YW5jZVxuICpcbiAqIEByZXR1cm4ge1BJWEkuRWxsaXBzZX0gYSBjb3B5IG9mIHRoZSBlbGxpcHNlXG4gKi9cbkVsbGlwc2UucHJvdG90eXBlLmNsb25lID0gZnVuY3Rpb24gKClcbntcbiAgICByZXR1cm4gbmV3IEVsbGlwc2UodGhpcy54LCB0aGlzLnksIHRoaXMud2lkdGgsIHRoaXMuaGVpZ2h0KTtcbn07XG5cbi8qKlxuICogQ2hlY2tzIHdoZXRoZXIgdGhlIHggYW5kIHkgY29vcmRpbmF0ZXMgZ2l2ZW4gYXJlIGNvbnRhaW5lZCB3aXRoaW4gdGhpcyBlbGxpcHNlXG4gKlxuICogQHBhcmFtIHgge251bWJlcn0gVGhlIFggY29vcmRpbmF0ZSBvZiB0aGUgcG9pbnQgdG8gdGVzdFxuICogQHBhcmFtIHkge251bWJlcn0gVGhlIFkgY29vcmRpbmF0ZSBvZiB0aGUgcG9pbnQgdG8gdGVzdFxuICogQHJldHVybiB7Ym9vbGVhbn0gV2hldGhlciB0aGUgeC95IGNvb3JkcyBhcmUgd2l0aGluIHRoaXMgZWxsaXBzZVxuICovXG5FbGxpcHNlLnByb3RvdHlwZS5jb250YWlucyA9IGZ1bmN0aW9uICh4LCB5KVxue1xuICAgIGlmICh0aGlzLndpZHRoIDw9IDAgfHwgdGhpcy5oZWlnaHQgPD0gMClcbiAgICB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICAvL25vcm1hbGl6ZSB0aGUgY29vcmRzIHRvIGFuIGVsbGlwc2Ugd2l0aCBjZW50ZXIgMCwwXG4gICAgdmFyIG5vcm14ID0gKCh4IC0gdGhpcy54KSAvIHRoaXMud2lkdGgpLFxuICAgICAgICBub3JteSA9ICgoeSAtIHRoaXMueSkgLyB0aGlzLmhlaWdodCk7XG5cbiAgICBub3JteCAqPSBub3JteDtcbiAgICBub3JteSAqPSBub3JteTtcblxuICAgIHJldHVybiAobm9ybXggKyBub3JteSA8PSAxKTtcbn07XG5cbi8qKlxuICogUmV0dXJucyB0aGUgZnJhbWluZyByZWN0YW5nbGUgb2YgdGhlIGVsbGlwc2UgYXMgYSBSZWN0YW5nbGUgb2JqZWN0XG4gKlxuICogQHJldHVybiB7UElYSS5SZWN0YW5nbGV9IHRoZSBmcmFtaW5nIHJlY3RhbmdsZVxuICovXG5FbGxpcHNlLnByb3RvdHlwZS5nZXRCb3VuZHMgPSBmdW5jdGlvbiAoKVxue1xuICAgIHJldHVybiBuZXcgUmVjdGFuZ2xlKHRoaXMueCAtIHRoaXMud2lkdGgsIHRoaXMueSAtIHRoaXMuaGVpZ2h0LCB0aGlzLndpZHRoLCB0aGlzLmhlaWdodCk7XG59O1xuIiwidmFyIFBvaW50ID0gcmVxdWlyZSgnLi4vUG9pbnQnKSxcbiAgICBDT05TVCA9IHJlcXVpcmUoJy4uLy4uL2NvbnN0Jyk7XG5cbi8qKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIHBvaW50cyB7UElYSS5Qb2ludFtdfG51bWJlcltdfC4uLlBJWEkuUG9pbnR8Li4ubnVtYmVyfSBUaGlzIGNhbiBiZSBhbiBhcnJheSBvZiBQb2ludHMgdGhhdCBmb3JtIHRoZSBwb2x5Z29uLFxuICogICAgICBhIGZsYXQgYXJyYXkgb2YgbnVtYmVycyB0aGF0IHdpbGwgYmUgaW50ZXJwcmV0ZWQgYXMgW3gseSwgeCx5LCAuLi5dLCBvciB0aGUgYXJndW1lbnRzIHBhc3NlZCBjYW4gYmVcbiAqICAgICAgYWxsIHRoZSBwb2ludHMgb2YgdGhlIHBvbHlnb24gZS5nLiBgbmV3IFBJWEkuUG9seWdvbihuZXcgUElYSS5Qb2ludCgpLCBuZXcgUElYSS5Qb2ludCgpLCAuLi4pYCwgb3IgdGhlXG4gKiAgICAgIGFyZ3VtZW50cyBwYXNzZWQgY2FuIGJlIGZsYXQgeCx5IHZhbHVlcyBlLmcuIGBuZXcgUG9seWdvbih4LHksIHgseSwgeCx5LCAuLi4pYCB3aGVyZSBgeGAgYW5kIGB5YCBhcmVcbiAqICAgICAgTnVtYmVycy5cbiAqL1xuZnVuY3Rpb24gUG9seWdvbihwb2ludHNfKVxue1xuICAgIC8vIHByZXZlbnRzIGFuIGFyZ3VtZW50IGFzc2lnbm1lbnQgZGVvcHRcbiAgICAvLyBzZWUgc2VjdGlvbiAzLjE6IGh0dHBzOi8vZ2l0aHViLmNvbS9wZXRrYWFudG9ub3YvYmx1ZWJpcmQvd2lraS9PcHRpbWl6YXRpb24ta2lsbGVycyMzLW1hbmFnaW5nLWFyZ3VtZW50c1xuICAgIHZhciBwb2ludHMgPSBwb2ludHNfO1xuXG4gICAgLy9pZiBwb2ludHMgaXNuJ3QgYW4gYXJyYXksIHVzZSBhcmd1bWVudHMgYXMgdGhlIGFycmF5XG4gICAgaWYgKCFBcnJheS5pc0FycmF5KHBvaW50cykpXG4gICAge1xuICAgICAgICAvLyBwcmV2ZW50cyBhbiBhcmd1bWVudCBsZWFrIGRlb3B0XG4gICAgICAgIC8vIHNlZSBzZWN0aW9uIDMuMjogaHR0cHM6Ly9naXRodWIuY29tL3BldGthYW50b25vdi9ibHVlYmlyZC93aWtpL09wdGltaXphdGlvbi1raWxsZXJzIzMtbWFuYWdpbmctYXJndW1lbnRzXG4gICAgICAgIHBvaW50cyA9IG5ldyBBcnJheShhcmd1bWVudHMubGVuZ3RoKTtcblxuICAgICAgICBmb3IgKHZhciBhID0gMDsgYSA8IHBvaW50cy5sZW5ndGg7ICsrYSkge1xuICAgICAgICAgICAgcG9pbnRzW2FdID0gYXJndW1lbnRzW2FdO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gaWYgdGhpcyBpcyBhbiBhcnJheSBvZiBwb2ludHMsIGNvbnZlcnQgaXQgdG8gYSBmbGF0IGFycmF5IG9mIG51bWJlcnNcbiAgICBpZiAocG9pbnRzWzBdIGluc3RhbmNlb2YgUG9pbnQpXG4gICAge1xuICAgICAgICB2YXIgcCA9IFtdO1xuICAgICAgICBmb3IgKHZhciBpID0gMCwgaWwgPSBwb2ludHMubGVuZ3RoOyBpIDwgaWw7IGkrKylcbiAgICAgICAge1xuICAgICAgICAgICAgcC5wdXNoKHBvaW50c1tpXS54LCBwb2ludHNbaV0ueSk7XG4gICAgICAgIH1cblxuICAgICAgICBwb2ludHMgPSBwO1xuICAgIH1cblxuICAgIHRoaXMuY2xvc2VkID0gdHJ1ZTtcblxuICAgIC8qKlxuICAgICAqIEFuIGFycmF5IG9mIHRoZSBwb2ludHMgb2YgdGhpcyBwb2x5Z29uXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJbXX1cbiAgICAgKi9cbiAgICB0aGlzLnBvaW50cyA9IHBvaW50cztcblxuICAgIC8qKlxuICAgICAqIFRoZSB0eXBlIG9mIHRoZSBvYmplY3QsIG1haW5seSB1c2VkIHRvIGF2b2lkIGBpbnN0YW5jZW9mYCBjaGVja3NcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLnR5cGUgPSBDT05TVC5TSEFQRVMuUE9MWTtcbn1cblxuUG9seWdvbi5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBQb2x5Z29uO1xubW9kdWxlLmV4cG9ydHMgPSBQb2x5Z29uO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBjbG9uZSBvZiB0aGlzIHBvbHlnb25cbiAqXG4gKiBAcmV0dXJuIHtQSVhJLlBvbHlnb259IGEgY29weSBvZiB0aGUgcG9seWdvblxuICovXG5Qb2x5Z29uLnByb3RvdHlwZS5jbG9uZSA9IGZ1bmN0aW9uICgpXG57XG4gICAgcmV0dXJuIG5ldyBQb2x5Z29uKHRoaXMucG9pbnRzLnNsaWNlKCkpO1xufTtcblxuLyoqXG4gKiBDaGVja3Mgd2hldGhlciB0aGUgeCBhbmQgeSBjb29yZGluYXRlcyBwYXNzZWQgdG8gdGhpcyBmdW5jdGlvbiBhcmUgY29udGFpbmVkIHdpdGhpbiB0aGlzIHBvbHlnb25cbiAqXG4gKiBAcGFyYW0geCB7bnVtYmVyfSBUaGUgWCBjb29yZGluYXRlIG9mIHRoZSBwb2ludCB0byB0ZXN0XG4gKiBAcGFyYW0geSB7bnVtYmVyfSBUaGUgWSBjb29yZGluYXRlIG9mIHRoZSBwb2ludCB0byB0ZXN0XG4gKiBAcmV0dXJuIHtib29sZWFufSBXaGV0aGVyIHRoZSB4L3kgY29vcmRpbmF0ZXMgYXJlIHdpdGhpbiB0aGlzIHBvbHlnb25cbiAqL1xuUG9seWdvbi5wcm90b3R5cGUuY29udGFpbnMgPSBmdW5jdGlvbiAoeCwgeSlcbntcbiAgICB2YXIgaW5zaWRlID0gZmFsc2U7XG5cbiAgICAvLyB1c2Ugc29tZSByYXljYXN0aW5nIHRvIHRlc3QgaGl0c1xuICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9zdWJzdGFjay9wb2ludC1pbi1wb2x5Z29uL2Jsb2IvbWFzdGVyL2luZGV4LmpzXG4gICAgdmFyIGxlbmd0aCA9IHRoaXMucG9pbnRzLmxlbmd0aCAvIDI7XG5cbiAgICBmb3IgKHZhciBpID0gMCwgaiA9IGxlbmd0aCAtIDE7IGkgPCBsZW5ndGg7IGogPSBpKyspXG4gICAge1xuICAgICAgICB2YXIgeGkgPSB0aGlzLnBvaW50c1tpICogMl0sIHlpID0gdGhpcy5wb2ludHNbaSAqIDIgKyAxXSxcbiAgICAgICAgICAgIHhqID0gdGhpcy5wb2ludHNbaiAqIDJdLCB5aiA9IHRoaXMucG9pbnRzW2ogKiAyICsgMV0sXG4gICAgICAgICAgICBpbnRlcnNlY3QgPSAoKHlpID4geSkgIT09ICh5aiA+IHkpKSAmJiAoeCA8ICh4aiAtIHhpKSAqICh5IC0geWkpIC8gKHlqIC0geWkpICsgeGkpO1xuXG4gICAgICAgIGlmIChpbnRlcnNlY3QpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGluc2lkZSA9ICFpbnNpZGU7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gaW5zaWRlO1xufTtcbiIsInZhciBDT05TVCA9IHJlcXVpcmUoJy4uLy4uL2NvbnN0Jyk7XG5cbi8qKlxuICogdGhlIFJlY3RhbmdsZSBvYmplY3QgaXMgYW4gYXJlYSBkZWZpbmVkIGJ5IGl0cyBwb3NpdGlvbiwgYXMgaW5kaWNhdGVkIGJ5IGl0cyB0b3AtbGVmdCBjb3JuZXIgcG9pbnQgKHgsIHkpIGFuZCBieSBpdHMgd2lkdGggYW5kIGl0cyBoZWlnaHQuXG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIHgge251bWJlcn0gVGhlIFggY29vcmRpbmF0ZSBvZiB0aGUgdXBwZXItbGVmdCBjb3JuZXIgb2YgdGhlIHJlY3RhbmdsZVxuICogQHBhcmFtIHkge251bWJlcn0gVGhlIFkgY29vcmRpbmF0ZSBvZiB0aGUgdXBwZXItbGVmdCBjb3JuZXIgb2YgdGhlIHJlY3RhbmdsZVxuICogQHBhcmFtIHdpZHRoIHtudW1iZXJ9IFRoZSBvdmVyYWxsIHdpZHRoIG9mIHRoaXMgcmVjdGFuZ2xlXG4gKiBAcGFyYW0gaGVpZ2h0IHtudW1iZXJ9IFRoZSBvdmVyYWxsIGhlaWdodCBvZiB0aGlzIHJlY3RhbmdsZVxuICovXG5mdW5jdGlvbiBSZWN0YW5nbGUoeCwgeSwgd2lkdGgsIGhlaWdodClcbntcbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMFxuICAgICAqL1xuICAgIHRoaXMueCA9IHggfHwgMDtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAwXG4gICAgICovXG4gICAgdGhpcy55ID0geSB8fCAwO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDBcbiAgICAgKi9cbiAgICB0aGlzLndpZHRoID0gd2lkdGggfHwgMDtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAwXG4gICAgICovXG4gICAgdGhpcy5oZWlnaHQgPSBoZWlnaHQgfHwgMDtcblxuICAgIC8qKlxuICAgICAqIFRoZSB0eXBlIG9mIHRoZSBvYmplY3QsIG1haW5seSB1c2VkIHRvIGF2b2lkIGBpbnN0YW5jZW9mYCBjaGVja3NcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLnR5cGUgPSBDT05TVC5TSEFQRVMuUkVDVDtcbn1cblxuUmVjdGFuZ2xlLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFJlY3RhbmdsZTtcbm1vZHVsZS5leHBvcnRzID0gUmVjdGFuZ2xlO1xuXG4vKipcbiAqIEEgY29uc3RhbnQgZW1wdHkgcmVjdGFuZ2xlLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBjb25zdGFudFxuICovXG5SZWN0YW5nbGUuRU1QVFkgPSBuZXcgUmVjdGFuZ2xlKDAsIDAsIDAsIDApO1xuXG5cbi8qKlxuICogQ3JlYXRlcyBhIGNsb25lIG9mIHRoaXMgUmVjdGFuZ2xlXG4gKlxuICogQHJldHVybiB7UElYSS5SZWN0YW5nbGV9IGEgY29weSBvZiB0aGUgcmVjdGFuZ2xlXG4gKi9cblJlY3RhbmdsZS5wcm90b3R5cGUuY2xvbmUgPSBmdW5jdGlvbiAoKVxue1xuICAgIHJldHVybiBuZXcgUmVjdGFuZ2xlKHRoaXMueCwgdGhpcy55LCB0aGlzLndpZHRoLCB0aGlzLmhlaWdodCk7XG59O1xuXG4vKipcbiAqIENoZWNrcyB3aGV0aGVyIHRoZSB4IGFuZCB5IGNvb3JkaW5hdGVzIGdpdmVuIGFyZSBjb250YWluZWQgd2l0aGluIHRoaXMgUmVjdGFuZ2xlXG4gKlxuICogQHBhcmFtIHgge251bWJlcn0gVGhlIFggY29vcmRpbmF0ZSBvZiB0aGUgcG9pbnQgdG8gdGVzdFxuICogQHBhcmFtIHkge251bWJlcn0gVGhlIFkgY29vcmRpbmF0ZSBvZiB0aGUgcG9pbnQgdG8gdGVzdFxuICogQHJldHVybiB7Ym9vbGVhbn0gV2hldGhlciB0aGUgeC95IGNvb3JkaW5hdGVzIGFyZSB3aXRoaW4gdGhpcyBSZWN0YW5nbGVcbiAqL1xuUmVjdGFuZ2xlLnByb3RvdHlwZS5jb250YWlucyA9IGZ1bmN0aW9uICh4LCB5KVxue1xuICAgIGlmICh0aGlzLndpZHRoIDw9IDAgfHwgdGhpcy5oZWlnaHQgPD0gMClcbiAgICB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBpZiAoeCA+PSB0aGlzLnggJiYgeCA8IHRoaXMueCArIHRoaXMud2lkdGgpXG4gICAge1xuICAgICAgICBpZiAoeSA+PSB0aGlzLnkgJiYgeSA8IHRoaXMueSArIHRoaXMuaGVpZ2h0KVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBmYWxzZTtcbn07XG4iLCJ2YXIgQ09OU1QgPSByZXF1aXJlKCcuLi8uLi9jb25zdCcpO1xuXG4vKipcbiAqIFRoZSBSb3VuZGVkIFJlY3RhbmdsZSBvYmplY3QgaXMgYW4gYXJlYSB0aGF0IGhhcyBuaWNlIHJvdW5kZWQgY29ybmVycywgYXMgaW5kaWNhdGVkIGJ5IGl0cyB0b3AtbGVmdCBjb3JuZXIgcG9pbnQgKHgsIHkpIGFuZCBieSBpdHMgd2lkdGggYW5kIGl0cyBoZWlnaHQgYW5kIGl0cyByYWRpdXMuXG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIHgge251bWJlcn0gVGhlIFggY29vcmRpbmF0ZSBvZiB0aGUgdXBwZXItbGVmdCBjb3JuZXIgb2YgdGhlIHJvdW5kZWQgcmVjdGFuZ2xlXG4gKiBAcGFyYW0geSB7bnVtYmVyfSBUaGUgWSBjb29yZGluYXRlIG9mIHRoZSB1cHBlci1sZWZ0IGNvcm5lciBvZiB0aGUgcm91bmRlZCByZWN0YW5nbGVcbiAqIEBwYXJhbSB3aWR0aCB7bnVtYmVyfSBUaGUgb3ZlcmFsbCB3aWR0aCBvZiB0aGlzIHJvdW5kZWQgcmVjdGFuZ2xlXG4gKiBAcGFyYW0gaGVpZ2h0IHtudW1iZXJ9IFRoZSBvdmVyYWxsIGhlaWdodCBvZiB0aGlzIHJvdW5kZWQgcmVjdGFuZ2xlXG4gKiBAcGFyYW0gcmFkaXVzIHtudW1iZXJ9IENvbnRyb2xzIHRoZSByYWRpdXMgb2YgdGhlIHJvdW5kZWQgY29ybmVyc1xuICovXG5mdW5jdGlvbiBSb3VuZGVkUmVjdGFuZ2xlKHgsIHksIHdpZHRoLCBoZWlnaHQsIHJhZGl1cylcbntcbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMFxuICAgICAqL1xuICAgIHRoaXMueCA9IHggfHwgMDtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAwXG4gICAgICovXG4gICAgdGhpcy55ID0geSB8fCAwO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDBcbiAgICAgKi9cbiAgICB0aGlzLndpZHRoID0gd2lkdGggfHwgMDtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAwXG4gICAgICovXG4gICAgdGhpcy5oZWlnaHQgPSBoZWlnaHQgfHwgMDtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAyMFxuICAgICAqL1xuICAgIHRoaXMucmFkaXVzID0gcmFkaXVzIHx8IDIwO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHR5cGUgb2YgdGhlIG9iamVjdCwgbWFpbmx5IHVzZWQgdG8gYXZvaWQgYGluc3RhbmNlb2ZgIGNoZWNrc1xuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMudHlwZSA9IENPTlNULlNIQVBFUy5SUkVDO1xufVxuXG5Sb3VuZGVkUmVjdGFuZ2xlLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFJvdW5kZWRSZWN0YW5nbGU7XG5tb2R1bGUuZXhwb3J0cyA9IFJvdW5kZWRSZWN0YW5nbGU7XG5cbi8qKlxuICogQ3JlYXRlcyBhIGNsb25lIG9mIHRoaXMgUm91bmRlZCBSZWN0YW5nbGVcbiAqXG4gKiBAcmV0dXJuIHtQSVhJLlJvdW5kZWRSZWN0YW5nbGV9IGEgY29weSBvZiB0aGUgcm91bmRlZCByZWN0YW5nbGVcbiAqL1xuUm91bmRlZFJlY3RhbmdsZS5wcm90b3R5cGUuY2xvbmUgPSBmdW5jdGlvbiAoKVxue1xuICAgIHJldHVybiBuZXcgUm91bmRlZFJlY3RhbmdsZSh0aGlzLngsIHRoaXMueSwgdGhpcy53aWR0aCwgdGhpcy5oZWlnaHQsIHRoaXMucmFkaXVzKTtcbn07XG5cbi8qKlxuICogQ2hlY2tzIHdoZXRoZXIgdGhlIHggYW5kIHkgY29vcmRpbmF0ZXMgZ2l2ZW4gYXJlIGNvbnRhaW5lZCB3aXRoaW4gdGhpcyBSb3VuZGVkIFJlY3RhbmdsZVxuICpcbiAqIEBwYXJhbSB4IHtudW1iZXJ9IFRoZSBYIGNvb3JkaW5hdGUgb2YgdGhlIHBvaW50IHRvIHRlc3RcbiAqIEBwYXJhbSB5IHtudW1iZXJ9IFRoZSBZIGNvb3JkaW5hdGUgb2YgdGhlIHBvaW50IHRvIHRlc3RcbiAqIEByZXR1cm4ge2Jvb2xlYW59IFdoZXRoZXIgdGhlIHgveSBjb29yZGluYXRlcyBhcmUgd2l0aGluIHRoaXMgUm91bmRlZCBSZWN0YW5nbGVcbiAqL1xuUm91bmRlZFJlY3RhbmdsZS5wcm90b3R5cGUuY29udGFpbnMgPSBmdW5jdGlvbiAoeCwgeSlcbntcbiAgICBpZiAodGhpcy53aWR0aCA8PSAwIHx8IHRoaXMuaGVpZ2h0IDw9IDApXG4gICAge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgaWYgKHggPj0gdGhpcy54ICYmIHggPD0gdGhpcy54ICsgdGhpcy53aWR0aClcbiAgICB7XG4gICAgICAgIGlmICh5ID49IHRoaXMueSAmJiB5IDw9IHRoaXMueSArIHRoaXMuaGVpZ2h0KVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBmYWxzZTtcbn07XG4iLCJ2YXIgQ29udGFpbmVyID0gcmVxdWlyZSgnLi4vZGlzcGxheS9Db250YWluZXInKSxcbiAgICBDT05TVCA9IHJlcXVpcmUoJy4uL2NvbnN0Jyk7XG5cbi8qKlxuICogVGhlIFBhcnRpY2xlQ29udGFpbmVyIGNsYXNzIGlzIGEgcmVhbGx5IGZhc3QgdmVyc2lvbiBvZiB0aGUgQ29udGFpbmVyIGJ1aWx0IHNvbGVseSBmb3Igc3BlZWQsXG4gKiBzbyB1c2Ugd2hlbiB5b3UgbmVlZCBhIGxvdCBvZiBzcHJpdGVzIG9yIHBhcnRpY2xlcy4gVGhlIHRyYWRlb2ZmIG9mIHRoZSBQYXJ0aWNsZUNvbnRhaW5lciBpcyB0aGF0IGFkdmFuY2VkXG4gKiBmdW5jdGlvbmFsaXR5IHdpbGwgbm90IHdvcmsuIFBhcnRpY2xlQ29udGFpbmVyIGltcGxlbWVudHMgb25seSB0aGUgYmFzaWMgb2JqZWN0IHRyYW5zZm9ybSAocG9zaXRpb24sIHNjYWxlLCByb3RhdGlvbikuXG4gKiBBbnkgb3RoZXIgZnVuY3Rpb25hbGl0eSBsaWtlIHRpbnRpbmcsIG1hc2tpbmcsIGV0YyB3aWxsIG5vdCB3b3JrIG9uIHNwcml0ZXMgaW4gdGhpcyBiYXRjaC5cbiAqXG4gKiBJdCdzIGV4dHJlbWVseSBlYXN5IHRvIHVzZSA6XG4gKlxuICogYGBganNcbiAqIHZhciBjb250YWluZXIgPSBuZXcgUGFydGljbGVDb250YWluZXIoKTtcbiAqXG4gKiBmb3IgKHZhciBpID0gMDsgaSA8IDEwMDsgKytpKVxuICoge1xuICogICAgIHZhciBzcHJpdGUgPSBuZXcgUElYSS5TcHJpdGUuZnJvbUltYWdlKFwibXlJbWFnZS5wbmdcIik7XG4gKiAgICAgY29udGFpbmVyLmFkZENoaWxkKHNwcml0ZSk7XG4gKiB9XG4gKiBgYGBcbiAqXG4gKiBBbmQgaGVyZSB5b3UgaGF2ZSBhIGh1bmRyZWQgc3ByaXRlcyB0aGF0IHdpbGwgYmUgcmVuZGVyZXIgYXQgdGhlIHNwZWVkIG9mIGxpZ2h0LlxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5Db250YWluZXJcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gW21heFNpemU9MTUwMDBdIHtudW1iZXJ9IFRoZSBtYXhpbXVtIG51bWJlciBvZiBwYXJ0aWNsZXMgdGhhdCBjYW4gYmUgcmVuZGVyZXIgYnkgdGhlIGNvbnRhaW5lci5cbiAqIEBwYXJhbSBbcHJvcGVydGllc10ge29iamVjdH0gVGhlIHByb3BlcnRpZXMgb2YgY2hpbGRyZW4gdGhhdCBzaG91bGQgYmUgdXBsb2FkZWQgdG8gdGhlIGdwdSBhbmQgYXBwbGllZC5cbiAqIEBwYXJhbSBbcHJvcGVydGllcy5zY2FsZT1mYWxzZV0ge2Jvb2xlYW59IFdoZW4gdHJ1ZSwgc2NhbGUgYmUgdXBsb2FkZWQgYW5kIGFwcGxpZWQuXG4gKiBAcGFyYW0gW3Byb3BlcnRpZXMucG9zaXRpb249dHJ1ZV0ge2Jvb2xlYW59IFdoZW4gdHJ1ZSwgcG9zaXRpb24gYmUgdXBsb2FkZWQgYW5kIGFwcGxpZWQuXG4gKiBAcGFyYW0gW3Byb3BlcnRpZXMucm90YXRpb249ZmFsc2VdIHtib29sZWFufSBXaGVuIHRydWUsIHJvdGF0aW9uIGJlIHVwbG9hZGVkIGFuZCBhcHBsaWVkLlxuICogQHBhcmFtIFtwcm9wZXJ0aWVzLnV2cz1mYWxzZV0ge2Jvb2xlYW59IFdoZW4gdHJ1ZSwgdXZzIGJlIHVwbG9hZGVkIGFuZCBhcHBsaWVkLlxuICogQHBhcmFtIFtwcm9wZXJ0aWVzLmFscGhhPWZhbHNlXSB7Ym9vbGVhbn0gV2hlbiB0cnVlLCBhbHBoYSBiZSB1cGxvYWRlZCBhbmQgYXBwbGllZC5cbiAqIEBwYXJhbSBbYmF0Y2hTaXplPTE1MDAwXSB7bnVtYmVyfSBOdW1iZXIgb2YgcGFydGljbGVzIHBlciBiYXRjaC5cbiAqL1xuZnVuY3Rpb24gUGFydGljbGVDb250YWluZXIobWF4U2l6ZSwgcHJvcGVydGllcywgYmF0Y2hTaXplKVxue1xuICAgIENvbnRhaW5lci5jYWxsKHRoaXMpO1xuXG4gICAgYmF0Y2hTaXplID0gYmF0Y2hTaXplIHx8IDE1MDAwOyAvL0NPTlNULlNQUklURV9CQVRDSF9TSVpFOyAvLyAyMDAwIGlzIGEgbmljZSBiYWxhbmNlIGJldHdlZW4gbW9iaWxlIC8gZGVza3RvcFxuICAgIG1heFNpemUgPSBtYXhTaXplIHx8IDE1MDAwO1xuXG4gICAgLy8gTWFraW5nIHN1cmUgdGhlIGJhdGNoIHNpemUgaXMgdmFsaWRcbiAgICAvLyA2NTUzNSBpcyBtYXggdmVydGV4IGluZGV4IGluIHRoZSBpbmRleCBidWZmZXIgKHNlZSBQYXJ0aWNsZVJlbmRlcmVyKVxuICAgIC8vIHNvIG1heCBudW1iZXIgb2YgcGFydGljbGVzIGlzIDY1NTM2IC8gNCA9IDE2Mzg0XG4gICAgdmFyIG1heEJhdGNoU2l6ZSA9IDE2Mzg0O1xuICAgIGlmIChiYXRjaFNpemUgPiBtYXhCYXRjaFNpemUpIHtcbiAgICAgICAgYmF0Y2hTaXplID0gbWF4QmF0Y2hTaXplO1xuICAgIH1cblxuICAgIGlmIChiYXRjaFNpemUgPiBtYXhTaXplKSB7XG4gICAgICAgIGJhdGNoU2l6ZSA9IG1heFNpemU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2V0IHByb3BlcnRpZXMgdG8gYmUgZHluYW1pYyAodHJ1ZSkgLyBzdGF0aWMgKGZhbHNlKVxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbltdfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fcHJvcGVydGllcyA9IFtmYWxzZSwgdHJ1ZSwgZmFsc2UsIGZhbHNlLCBmYWxzZV07XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9tYXhTaXplID0gbWF4U2l6ZTtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX2JhdGNoU2l6ZSA9IGJhdGNoU2l6ZTtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge1dlYkdMQnVmZmVyfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fYnVmZmVycyA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9idWZmZXJUb1VwZGF0ZSA9IDA7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqXG4gICAgICovXG4gICAgdGhpcy5pbnRlcmFjdGl2ZUNoaWxkcmVuID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYmxlbmQgbW9kZSB0byBiZSBhcHBsaWVkIHRvIHRoZSBzcHJpdGUuIEFwcGx5IGEgdmFsdWUgb2YgYFBJWEkuQkxFTkRfTU9ERVMuTk9STUFMYCB0byByZXNldCB0aGUgYmxlbmQgbW9kZS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCBQSVhJLkJMRU5EX01PREVTLk5PUk1BTFxuICAgICAqIEBzZWUgUElYSS5CTEVORF9NT0RFU1xuICAgICAqL1xuICAgIHRoaXMuYmxlbmRNb2RlID0gQ09OU1QuQkxFTkRfTU9ERVMuTk9STUFMO1xuXG4gICAgLyoqXG4gICAgICogVXNlZCBmb3IgY2FudmFzIHJlbmRlcmVyaW5nLiBJZiB0cnVlIHRoZW4gdGhlIGVsZW1lbnRzIHdpbGwgYmUgcG9zaXRpb25lZCBhdCB0aGUgbmVhcmVzdCBwaXhlbC4gVGhpcyBwcm92aWRlcyBhIG5pY2Ugc3BlZWQgYm9vc3QuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqIEBkZWZhdWx0IHRydWU7XG4gICAgICovXG4gICAgdGhpcy5yb3VuZFBpeGVscyA9IHRydWU7XG5cbiAgICB0aGlzLnNldFByb3BlcnRpZXMocHJvcGVydGllcyk7XG59XG5cblBhcnRpY2xlQ29udGFpbmVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoQ29udGFpbmVyLnByb3RvdHlwZSk7XG5QYXJ0aWNsZUNvbnRhaW5lci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBQYXJ0aWNsZUNvbnRhaW5lcjtcbm1vZHVsZS5leHBvcnRzID0gUGFydGljbGVDb250YWluZXI7XG5cbi8qKlxuICogU2V0cyB0aGUgcHJpdmF0ZSBwcm9wZXJ0aWVzIGFycmF5IHRvIGR5bmFtaWMgLyBzdGF0aWMgYmFzZWQgb24gdGhlIHBhc3NlZCBwcm9wZXJ0aWVzIG9iamVjdFxuICpcbiAqIEBwYXJhbSBwcm9wZXJ0aWVzIHtvYmplY3R9IFRoZSBwcm9wZXJ0aWVzIHRvIGJlIHVwbG9hZGVkXG4gKi9cblBhcnRpY2xlQ29udGFpbmVyLnByb3RvdHlwZS5zZXRQcm9wZXJ0aWVzID0gZnVuY3Rpb24ocHJvcGVydGllcylcbntcbiAgICBpZiAoIHByb3BlcnRpZXMgKSB7XG4gICAgICAgIHRoaXMuX3Byb3BlcnRpZXNbMF0gPSAnc2NhbGUnIGluIHByb3BlcnRpZXMgPyAhIXByb3BlcnRpZXMuc2NhbGUgOiB0aGlzLl9wcm9wZXJ0aWVzWzBdO1xuICAgICAgICB0aGlzLl9wcm9wZXJ0aWVzWzFdID0gJ3Bvc2l0aW9uJyBpbiBwcm9wZXJ0aWVzID8gISFwcm9wZXJ0aWVzLnBvc2l0aW9uIDogdGhpcy5fcHJvcGVydGllc1sxXTtcbiAgICAgICAgdGhpcy5fcHJvcGVydGllc1syXSA9ICdyb3RhdGlvbicgaW4gcHJvcGVydGllcyA/ICEhcHJvcGVydGllcy5yb3RhdGlvbiA6IHRoaXMuX3Byb3BlcnRpZXNbMl07XG4gICAgICAgIHRoaXMuX3Byb3BlcnRpZXNbM10gPSAndXZzJyBpbiBwcm9wZXJ0aWVzID8gISFwcm9wZXJ0aWVzLnV2cyA6IHRoaXMuX3Byb3BlcnRpZXNbM107XG4gICAgICAgIHRoaXMuX3Byb3BlcnRpZXNbNF0gPSAnYWxwaGEnIGluIHByb3BlcnRpZXMgPyAhIXByb3BlcnRpZXMuYWxwaGEgOiB0aGlzLl9wcm9wZXJ0aWVzWzRdO1xuICAgIH1cbn07XG5cbi8qKlxuICogVXBkYXRlcyB0aGUgb2JqZWN0IHRyYW5zZm9ybSBmb3IgcmVuZGVyaW5nXG4gKlxuICogQHByaXZhdGVcbiAqL1xuUGFydGljbGVDb250YWluZXIucHJvdG90eXBlLnVwZGF0ZVRyYW5zZm9ybSA9IGZ1bmN0aW9uICgpXG57XG5cbiAgICAvLyBUT0RPIGRvbid0IG5lZWQgdG8hXG4gICAgdGhpcy5kaXNwbGF5T2JqZWN0VXBkYXRlVHJhbnNmb3JtKCk7XG4gICAgLy8gIFBJWEkuQ29udGFpbmVyLnByb3RvdHlwZS51cGRhdGVUcmFuc2Zvcm0uY2FsbCggdGhpcyApO1xufTtcblxuLyoqXG4gKiBSZW5kZXJzIHRoZSBjb250YWluZXIgdXNpbmcgdGhlIFdlYkdMIHJlbmRlcmVyXG4gKlxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLldlYkdMUmVuZGVyZXJ9IFRoZSB3ZWJnbCByZW5kZXJlclxuICogQHByaXZhdGVcbiAqL1xuUGFydGljbGVDb250YWluZXIucHJvdG90eXBlLnJlbmRlcldlYkdMID0gZnVuY3Rpb24gKHJlbmRlcmVyKVxue1xuICAgIGlmICghdGhpcy52aXNpYmxlIHx8IHRoaXMud29ybGRBbHBoYSA8PSAwIHx8ICF0aGlzLmNoaWxkcmVuLmxlbmd0aCB8fCAhdGhpcy5yZW5kZXJhYmxlKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHJlbmRlcmVyLnNldE9iamVjdFJlbmRlcmVyKCByZW5kZXJlci5wbHVnaW5zLnBhcnRpY2xlICk7XG4gICAgcmVuZGVyZXIucGx1Z2lucy5wYXJ0aWNsZS5yZW5kZXIoIHRoaXMgKTtcbn07XG5cbi8qKlxuICogU2V0IHRoZSBmbGFnIHRoYXQgc3RhdGljIGRhdGEgc2hvdWxkIGJlIHVwZGF0ZWQgdG8gdHJ1ZVxuICpcbiAqIEBwcml2YXRlXG4gKi9cblBhcnRpY2xlQ29udGFpbmVyLnByb3RvdHlwZS5vbkNoaWxkcmVuQ2hhbmdlID0gZnVuY3Rpb24gKHNtYWxsZXN0Q2hpbGRJbmRleClcbntcbiAgICB2YXIgYnVmZmVySW5kZXggPSBNYXRoLmZsb29yKHNtYWxsZXN0Q2hpbGRJbmRleCAvIHRoaXMuX2JhdGNoU2l6ZSk7XG4gICAgaWYgKGJ1ZmZlckluZGV4IDwgdGhpcy5fYnVmZmVyVG9VcGRhdGUpIHtcbiAgICAgICAgdGhpcy5fYnVmZmVyVG9VcGRhdGUgPSBidWZmZXJJbmRleDtcbiAgICB9XG59O1xuXG4vKipcbiAqIFJlbmRlcnMgdGhlIG9iamVjdCB1c2luZyB0aGUgQ2FudmFzIHJlbmRlcmVyXG4gKlxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLkNhbnZhc1JlbmRlcmVyfSBUaGUgY2FudmFzIHJlbmRlcmVyXG4gKiBAcHJpdmF0ZVxuICovXG5QYXJ0aWNsZUNvbnRhaW5lci5wcm90b3R5cGUucmVuZGVyQ2FudmFzID0gZnVuY3Rpb24gKHJlbmRlcmVyKVxue1xuICAgIGlmICghdGhpcy52aXNpYmxlIHx8IHRoaXMud29ybGRBbHBoYSA8PSAwIHx8ICF0aGlzLmNoaWxkcmVuLmxlbmd0aCB8fCAhdGhpcy5yZW5kZXJhYmxlKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHZhciBjb250ZXh0ID0gcmVuZGVyZXIuY29udGV4dDtcbiAgICB2YXIgdHJhbnNmb3JtID0gdGhpcy53b3JsZFRyYW5zZm9ybTtcbiAgICB2YXIgaXNSb3RhdGVkID0gdHJ1ZTtcblxuICAgIHZhciBwb3NpdGlvblggPSAwO1xuICAgIHZhciBwb3NpdGlvblkgPSAwO1xuXG4gICAgdmFyIGZpbmFsV2lkdGggPSAwO1xuICAgIHZhciBmaW5hbEhlaWdodCA9IDA7XG5cbiAgICB2YXIgY29tcG9zaXRlT3BlcmF0aW9uID0gcmVuZGVyZXIuYmxlbmRNb2Rlc1t0aGlzLmJsZW5kTW9kZV07XG4gICAgaWYgKGNvbXBvc2l0ZU9wZXJhdGlvbiAhPT0gY29udGV4dC5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb24pXG4gICAge1xuICAgICAgICBjb250ZXh0Lmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbiA9IGNvbXBvc2l0ZU9wZXJhdGlvbjtcbiAgICB9XG5cbiAgICBjb250ZXh0Lmdsb2JhbEFscGhhID0gdGhpcy53b3JsZEFscGhhO1xuXG4gICAgdGhpcy5kaXNwbGF5T2JqZWN0VXBkYXRlVHJhbnNmb3JtKCk7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuY2hpbGRyZW4ubGVuZ3RoOyArK2kpXG4gICAge1xuICAgICAgICB2YXIgY2hpbGQgPSB0aGlzLmNoaWxkcmVuW2ldO1xuXG4gICAgICAgIGlmICghY2hpbGQudmlzaWJsZSlcbiAgICAgICAge1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgZnJhbWUgPSBjaGlsZC50ZXh0dXJlLmZyYW1lO1xuXG4gICAgICAgIGNvbnRleHQuZ2xvYmFsQWxwaGEgPSB0aGlzLndvcmxkQWxwaGEgKiBjaGlsZC5hbHBoYTtcblxuICAgICAgICBpZiAoY2hpbGQucm90YXRpb24gJSAoTWF0aC5QSSAqIDIpID09PSAwKVxuICAgICAgICB7XG4gICAgICAgICAgICAvLyB0aGlzIGlzIHRoZSBmYXN0ZXN0ICB3YXkgdG8gb3B0aW1pc2UhIC0gaWYgcm90YXRpb24gaXMgMCB0aGVuIHdlIGNhbiBhdm9pZCBhbnkga2luZCBvZiBzZXRUcmFuc2Zvcm0gY2FsbFxuICAgICAgICAgICAgaWYgKGlzUm90YXRlZClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb250ZXh0LnNldFRyYW5zZm9ybShcbiAgICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtLmEsXG4gICAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybS5iLFxuICAgICAgICAgICAgICAgICAgICB0cmFuc2Zvcm0uYyxcbiAgICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtLmQsXG4gICAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybS50eCxcbiAgICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtLnR5XG4gICAgICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgICAgIGlzUm90YXRlZCA9IGZhbHNlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBwb3NpdGlvblggPSAoKGNoaWxkLmFuY2hvci54KSAqICgtZnJhbWUud2lkdGggKiBjaGlsZC5zY2FsZS54KSArIGNoaWxkLnBvc2l0aW9uLnggICsgMC41KTtcbiAgICAgICAgICAgIHBvc2l0aW9uWSA9ICgoY2hpbGQuYW5jaG9yLnkpICogKC1mcmFtZS5oZWlnaHQgKiBjaGlsZC5zY2FsZS55KSArIGNoaWxkLnBvc2l0aW9uLnkgICsgMC41KTtcblxuICAgICAgICAgICAgZmluYWxXaWR0aCA9IGZyYW1lLndpZHRoICogY2hpbGQuc2NhbGUueDtcbiAgICAgICAgICAgIGZpbmFsSGVpZ2h0ID0gZnJhbWUuaGVpZ2h0ICogY2hpbGQuc2NhbGUueTtcblxuICAgICAgICB9XG4gICAgICAgIGVsc2VcbiAgICAgICAge1xuICAgICAgICAgICAgaWYgKCFpc1JvdGF0ZWQpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgaXNSb3RhdGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY2hpbGQuZGlzcGxheU9iamVjdFVwZGF0ZVRyYW5zZm9ybSgpO1xuXG4gICAgICAgICAgICB2YXIgY2hpbGRUcmFuc2Zvcm0gPSBjaGlsZC53b3JsZFRyYW5zZm9ybTtcblxuICAgICAgICAgICAgaWYgKHJlbmRlcmVyLnJvdW5kUGl4ZWxzKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGNvbnRleHQuc2V0VHJhbnNmb3JtKFxuICAgICAgICAgICAgICAgICAgICBjaGlsZFRyYW5zZm9ybS5hLFxuICAgICAgICAgICAgICAgICAgICBjaGlsZFRyYW5zZm9ybS5iLFxuICAgICAgICAgICAgICAgICAgICBjaGlsZFRyYW5zZm9ybS5jLFxuICAgICAgICAgICAgICAgICAgICBjaGlsZFRyYW5zZm9ybS5kLFxuICAgICAgICAgICAgICAgICAgICBjaGlsZFRyYW5zZm9ybS50eCB8IDAsXG4gICAgICAgICAgICAgICAgICAgIGNoaWxkVHJhbnNmb3JtLnR5IHwgMFxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29udGV4dC5zZXRUcmFuc2Zvcm0oXG4gICAgICAgICAgICAgICAgICAgIGNoaWxkVHJhbnNmb3JtLmEsXG4gICAgICAgICAgICAgICAgICAgIGNoaWxkVHJhbnNmb3JtLmIsXG4gICAgICAgICAgICAgICAgICAgIGNoaWxkVHJhbnNmb3JtLmMsXG4gICAgICAgICAgICAgICAgICAgIGNoaWxkVHJhbnNmb3JtLmQsXG4gICAgICAgICAgICAgICAgICAgIGNoaWxkVHJhbnNmb3JtLnR4LFxuICAgICAgICAgICAgICAgICAgICBjaGlsZFRyYW5zZm9ybS50eVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHBvc2l0aW9uWCA9ICgoY2hpbGQuYW5jaG9yLngpICogKC1mcmFtZS53aWR0aCkgKyAwLjUpO1xuICAgICAgICAgICAgcG9zaXRpb25ZID0gKChjaGlsZC5hbmNob3IueSkgKiAoLWZyYW1lLmhlaWdodCkgKyAwLjUpO1xuXG4gICAgICAgICAgICBmaW5hbFdpZHRoID0gZnJhbWUud2lkdGg7XG4gICAgICAgICAgICBmaW5hbEhlaWdodCA9IGZyYW1lLmhlaWdodDtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnRleHQuZHJhd0ltYWdlKFxuICAgICAgICAgICAgY2hpbGQudGV4dHVyZS5iYXNlVGV4dHVyZS5zb3VyY2UsXG4gICAgICAgICAgICBmcmFtZS54LFxuICAgICAgICAgICAgZnJhbWUueSxcbiAgICAgICAgICAgIGZyYW1lLndpZHRoLFxuICAgICAgICAgICAgZnJhbWUuaGVpZ2h0LFxuICAgICAgICAgICAgcG9zaXRpb25YLFxuICAgICAgICAgICAgcG9zaXRpb25ZLFxuICAgICAgICAgICAgZmluYWxXaWR0aCxcbiAgICAgICAgICAgIGZpbmFsSGVpZ2h0XG4gICAgICAgICk7XG4gICAgfVxufTtcblxuLyoqXG4gKiBEZXN0cm95cyB0aGUgY29udGFpbmVyXG4gKlxuICogQHBhcmFtIFtkZXN0cm95Q2hpbGRyZW49ZmFsc2VdIHtib29sZWFufSBpZiBzZXQgdG8gdHJ1ZSwgYWxsIHRoZSBjaGlsZHJlbiB3aWxsIGhhdmUgdGhlaXIgZGVzdHJveSBtZXRob2QgY2FsbGVkIGFzIHdlbGxcbiAqL1xuUGFydGljbGVDb250YWluZXIucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoKSB7XG4gICAgQ29udGFpbmVyLnByb3RvdHlwZS5kZXN0cm95LmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG5cbiAgICBpZiAodGhpcy5fYnVmZmVycykge1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuX2J1ZmZlcnMubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgICAgIHRoaXMuX2J1ZmZlcnNbaV0uZGVzdHJveSgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5fcHJvcGVydGllcyA9IG51bGw7XG4gICAgdGhpcy5fYnVmZmVycyA9IG51bGw7XG59O1xuIiwiXG4vKipcbiAqIEBhdXRob3IgTWF0IEdyb3Zlc1xuICpcbiAqIEJpZyB0aGFua3MgdG8gdGhlIHZlcnkgY2xldmVyIE1hdHQgRGVzTGF1cmllcnMgPG1hdHRkZXNsPiBodHRwczovL2dpdGh1Yi5jb20vbWF0dGRlc2wvXG4gKiBmb3IgY3JlYXRpbmcgdGhlIG9yaWdpbmFsIHBpeGkgdmVyc2lvbiFcbiAqIEFsc28gYSB0aGFua3MgdG8gaHR0cHM6Ly9naXRodWIuY29tL2JjaGV2YWxpZXIgZm9yIHR3ZWFraW5nIHRoZSB0aW50IGFuZCBhbHBoYSBzbyB0aGF0IHRoZXkgbm93IHNoYXJlIDQgYnl0ZXMgb24gdGhlIHZlcnRleCBidWZmZXJcbiAqXG4gKiBIZWF2aWx5IGluc3BpcmVkIGJ5IExpYkdEWCdzIFBhcnRpY2xlQnVmZmVyOlxuICogaHR0cHM6Ly9naXRodWIuY29tL2xpYmdkeC9saWJnZHgvYmxvYi9tYXN0ZXIvZ2R4L3NyYy9jb20vYmFkbG9naWMvZ2R4L2dyYXBoaWNzL2cyZC9QYXJ0aWNsZUJ1ZmZlci5qYXZhXG4gKi9cblxuLyoqXG4gKiBUaGUgcGFydGljbGUgYnVmZmVyIG1hbmFnZXMgdGhlIHN0YXRpYyBhbmQgZHluYW1pYyBidWZmZXJzIGZvciBhIHBhcnRpY2xlIGNvbnRhaW5lci5cbiAqXG4gKiBAY2xhc3NcbiAqIEBwcml2YXRlXG4gKiBAbWVtYmVyb2YgUElYSVxuICovXG5mdW5jdGlvbiBQYXJ0aWNsZUJ1ZmZlcihnbCwgcHJvcGVydGllcywgZHluYW1pY1Byb3BlcnR5RmxhZ3MsIHNpemUpXG57XG4gICAgLyoqXG4gICAgICogVGhlIGN1cnJlbnQgV2ViR0wgZHJhd2luZyBjb250ZXh0LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7V2ViR0xSZW5kZXJpbmdDb250ZXh0fVxuICAgICAqL1xuICAgIHRoaXMuZ2wgPSBnbDtcblxuICAgIC8qKlxuICAgICAqIFNpemUgb2YgYSBzaW5nbGUgdmVydGV4LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMudmVydFNpemUgPSAyO1xuXG4gICAgLyoqXG4gICAgICogU2l6ZSBvZiBhIHNpbmdsZSB2ZXJ0ZXggaW4gYnl0ZXMuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy52ZXJ0Qnl0ZVNpemUgPSB0aGlzLnZlcnRTaXplICogNDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBudW1iZXIgb2YgcGFydGljbGVzIHRoZSBidWZmZXIgY2FuIGhvbGRcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLnNpemUgPSBzaXplO1xuXG4gICAgLyoqXG4gICAgICogQSBsaXN0IG9mIHRoZSBwcm9wZXJ0aWVzIHRoYXQgYXJlIGR5bmFtaWMuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtvYmplY3RbXX1cbiAgICAgKi9cbiAgICB0aGlzLmR5bmFtaWNQcm9wZXJ0aWVzID0gW107XG5cbiAgICAvKipcbiAgICAgKiBBIGxpc3Qgb2YgdGhlIHByb3BlcnRpZXMgdGhhdCBhcmUgc3RhdGljLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7b2JqZWN0W119XG4gICAgICovXG4gICAgdGhpcy5zdGF0aWNQcm9wZXJ0aWVzID0gW107XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BlcnRpZXMubGVuZ3RoOyBpKyspXG4gICAge1xuICAgICAgICB2YXIgcHJvcGVydHkgPSBwcm9wZXJ0aWVzW2ldO1xuXG4gICAgICAgIGlmKGR5bmFtaWNQcm9wZXJ0eUZsYWdzW2ldKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmR5bmFtaWNQcm9wZXJ0aWVzLnB1c2gocHJvcGVydHkpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2VcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5zdGF0aWNQcm9wZXJ0aWVzLnB1c2gocHJvcGVydHkpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5zdGF0aWNTdHJpZGUgPSAwO1xuICAgIHRoaXMuc3RhdGljQnVmZmVyID0gbnVsbDtcbiAgICB0aGlzLnN0YXRpY0RhdGEgPSBudWxsO1xuXG4gICAgdGhpcy5keW5hbWljU3RyaWRlID0gMDtcbiAgICB0aGlzLmR5bmFtaWNCdWZmZXIgPSBudWxsO1xuICAgIHRoaXMuZHluYW1pY0RhdGEgPSBudWxsO1xuXG4gICAgdGhpcy5pbml0QnVmZmVycygpO1xuXG59XG5cblBhcnRpY2xlQnVmZmVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFBhcnRpY2xlQnVmZmVyO1xubW9kdWxlLmV4cG9ydHMgPSBQYXJ0aWNsZUJ1ZmZlcjtcblxuLyoqXG4gKiBTZXRzIHVwIHRoZSByZW5kZXJlciBjb250ZXh0IGFuZCBuZWNlc3NhcnkgYnVmZmVycy5cbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5QYXJ0aWNsZUJ1ZmZlci5wcm90b3R5cGUuaW5pdEJ1ZmZlcnMgPSBmdW5jdGlvbiAoKVxue1xuICAgIHZhciBnbCA9IHRoaXMuZ2w7XG4gICAgdmFyIGk7XG4gICAgdmFyIHByb3BlcnR5O1xuXG4gICAgdmFyIGR5bmFtaWNPZmZzZXQgPSAwO1xuICAgIHRoaXMuZHluYW1pY1N0cmlkZSA9IDA7XG5cbiAgICBmb3IgKGkgPSAwOyBpIDwgdGhpcy5keW5hbWljUHJvcGVydGllcy5sZW5ndGg7IGkrKylcbiAgICB7XG4gICAgICAgIHByb3BlcnR5ID0gdGhpcy5keW5hbWljUHJvcGVydGllc1tpXTtcblxuICAgICAgICBwcm9wZXJ0eS5vZmZzZXQgPSBkeW5hbWljT2Zmc2V0O1xuICAgICAgICBkeW5hbWljT2Zmc2V0ICs9IHByb3BlcnR5LnNpemU7XG4gICAgICAgIHRoaXMuZHluYW1pY1N0cmlkZSArPSBwcm9wZXJ0eS5zaXplO1xuICAgIH1cblxuICAgIHRoaXMuZHluYW1pY0RhdGEgPSBuZXcgRmxvYXQzMkFycmF5KCB0aGlzLnNpemUgKiB0aGlzLmR5bmFtaWNTdHJpZGUgKiA0KTtcbiAgICB0aGlzLmR5bmFtaWNCdWZmZXIgPSBnbC5jcmVhdGVCdWZmZXIoKTtcblxuICAgIGdsLmJpbmRCdWZmZXIoZ2wuQVJSQVlfQlVGRkVSLCB0aGlzLmR5bmFtaWNCdWZmZXIpO1xuICAgIGdsLmJ1ZmZlckRhdGEoZ2wuQVJSQVlfQlVGRkVSLCB0aGlzLmR5bmFtaWNEYXRhLCBnbC5EWU5BTUlDX0RSQVcpO1xuXG5cbiAgICAvLyBzdGF0aWMgLy9cbiAgICB2YXIgc3RhdGljT2Zmc2V0ID0gMDtcbiAgICB0aGlzLnN0YXRpY1N0cmlkZSA9IDA7XG5cbiAgICBmb3IgKGkgPSAwOyBpIDwgdGhpcy5zdGF0aWNQcm9wZXJ0aWVzLmxlbmd0aDsgaSsrKVxuICAgIHtcbiAgICAgICAgcHJvcGVydHkgPSB0aGlzLnN0YXRpY1Byb3BlcnRpZXNbaV07XG5cbiAgICAgICAgcHJvcGVydHkub2Zmc2V0ID0gc3RhdGljT2Zmc2V0O1xuICAgICAgICBzdGF0aWNPZmZzZXQgKz0gcHJvcGVydHkuc2l6ZTtcbiAgICAgICAgdGhpcy5zdGF0aWNTdHJpZGUgKz0gcHJvcGVydHkuc2l6ZTtcbiAgICB9XG5cbiAgICB0aGlzLnN0YXRpY0RhdGEgPSBuZXcgRmxvYXQzMkFycmF5KCB0aGlzLnNpemUgKiB0aGlzLnN0YXRpY1N0cmlkZSAqIDQpO1xuICAgIHRoaXMuc3RhdGljQnVmZmVyID0gZ2wuY3JlYXRlQnVmZmVyKCk7XG5cbiAgICBnbC5iaW5kQnVmZmVyKGdsLkFSUkFZX0JVRkZFUiwgdGhpcy5zdGF0aWNCdWZmZXIpO1xuICAgIGdsLmJ1ZmZlckRhdGEoZ2wuQVJSQVlfQlVGRkVSLCB0aGlzLnN0YXRpY0RhdGEsIGdsLkRZTkFNSUNfRFJBVyk7XG59O1xuXG4vKipcbiAqIFVwbG9hZHMgdGhlIGR5bmFtaWMgcHJvcGVydGllcy5cbiAqXG4gKi9cblBhcnRpY2xlQnVmZmVyLnByb3RvdHlwZS51cGxvYWREeW5hbWljID0gZnVuY3Rpb24oY2hpbGRyZW4sIHN0YXJ0SW5kZXgsIGFtb3VudClcbntcbiAgICB2YXIgZ2wgPSB0aGlzLmdsO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmR5bmFtaWNQcm9wZXJ0aWVzLmxlbmd0aDsgaSsrKVxuICAgIHtcbiAgICAgICAgdmFyIHByb3BlcnR5ID0gdGhpcy5keW5hbWljUHJvcGVydGllc1tpXTtcbiAgICAgICAgcHJvcGVydHkudXBsb2FkRnVuY3Rpb24oY2hpbGRyZW4sIHN0YXJ0SW5kZXgsIGFtb3VudCwgdGhpcy5keW5hbWljRGF0YSwgdGhpcy5keW5hbWljU3RyaWRlLCBwcm9wZXJ0eS5vZmZzZXQpO1xuICAgIH1cblxuICAgIGdsLmJpbmRCdWZmZXIoZ2wuQVJSQVlfQlVGRkVSLCB0aGlzLmR5bmFtaWNCdWZmZXIpO1xuICAgIGdsLmJ1ZmZlclN1YkRhdGEoZ2wuQVJSQVlfQlVGRkVSLCAwLCB0aGlzLmR5bmFtaWNEYXRhKTtcbn07XG5cbi8qKlxuICogVXBsb2FkcyB0aGUgc3RhdGljIHByb3BlcnRpZXMuXG4gKlxuICovXG5QYXJ0aWNsZUJ1ZmZlci5wcm90b3R5cGUudXBsb2FkU3RhdGljID0gZnVuY3Rpb24oY2hpbGRyZW4sIHN0YXJ0SW5kZXgsIGFtb3VudClcbntcbiAgICB2YXIgZ2wgPSB0aGlzLmdsO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLnN0YXRpY1Byb3BlcnRpZXMubGVuZ3RoOyBpKyspXG4gICAge1xuICAgICAgICB2YXIgcHJvcGVydHkgPSB0aGlzLnN0YXRpY1Byb3BlcnRpZXNbaV07XG4gICAgICAgIHByb3BlcnR5LnVwbG9hZEZ1bmN0aW9uKGNoaWxkcmVuLCBzdGFydEluZGV4LCBhbW91bnQsIHRoaXMuc3RhdGljRGF0YSwgdGhpcy5zdGF0aWNTdHJpZGUsIHByb3BlcnR5Lm9mZnNldCk7XG4gICAgfVxuXG4gICAgZ2wuYmluZEJ1ZmZlcihnbC5BUlJBWV9CVUZGRVIsIHRoaXMuc3RhdGljQnVmZmVyKTtcbiAgICBnbC5idWZmZXJTdWJEYXRhKGdsLkFSUkFZX0JVRkZFUiwgMCwgdGhpcy5zdGF0aWNEYXRhKTtcbn07XG5cbi8qKlxuICogQmluZHMgdGhlIGJ1ZmZlcnMgdG8gdGhlIEdQVVxuICpcbiAqL1xuUGFydGljbGVCdWZmZXIucHJvdG90eXBlLmJpbmQgPSBmdW5jdGlvbiAoKVxue1xuICAgIHZhciBnbCA9IHRoaXMuZ2w7XG4gICAgdmFyIGksIHByb3BlcnR5O1xuXG4gICAgZ2wuYmluZEJ1ZmZlcihnbC5BUlJBWV9CVUZGRVIsIHRoaXMuZHluYW1pY0J1ZmZlcik7XG5cbiAgICBmb3IgKGkgPSAwOyBpIDwgdGhpcy5keW5hbWljUHJvcGVydGllcy5sZW5ndGg7IGkrKylcbiAgICB7XG4gICAgICAgIHByb3BlcnR5ID0gdGhpcy5keW5hbWljUHJvcGVydGllc1tpXTtcbiAgICAgICAgZ2wudmVydGV4QXR0cmliUG9pbnRlcihwcm9wZXJ0eS5hdHRyaWJ1dGUsIHByb3BlcnR5LnNpemUsIGdsLkZMT0FULCBmYWxzZSwgdGhpcy5keW5hbWljU3RyaWRlICogNCwgcHJvcGVydHkub2Zmc2V0ICogNCk7XG4gICAgfVxuXG4gICAgZ2wuYmluZEJ1ZmZlcihnbC5BUlJBWV9CVUZGRVIsIHRoaXMuc3RhdGljQnVmZmVyKTtcblxuICAgIGZvciAoaSA9IDA7IGkgPCB0aGlzLnN0YXRpY1Byb3BlcnRpZXMubGVuZ3RoOyBpKyspXG4gICAge1xuICAgICAgICBwcm9wZXJ0eSA9IHRoaXMuc3RhdGljUHJvcGVydGllc1tpXTtcbiAgICAgICAgZ2wudmVydGV4QXR0cmliUG9pbnRlcihwcm9wZXJ0eS5hdHRyaWJ1dGUsIHByb3BlcnR5LnNpemUsIGdsLkZMT0FULCBmYWxzZSwgdGhpcy5zdGF0aWNTdHJpZGUgKiA0LCBwcm9wZXJ0eS5vZmZzZXQgKiA0KTtcbiAgICB9XG59O1xuXG4vKipcbiAqIERlc3Ryb3lzIHRoZSBQYXJ0aWNsZUJ1ZmZlci5cbiAqXG4gKi9cblBhcnRpY2xlQnVmZmVyLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLmR5bmFtaWNQcm9wZXJ0aWVzID0gbnVsbDtcbiAgICB0aGlzLmR5bmFtaWNEYXRhID0gbnVsbDtcbiAgICB0aGlzLmdsLmRlbGV0ZUJ1ZmZlcih0aGlzLmR5bmFtaWNCdWZmZXIpO1xuXG4gICAgdGhpcy5zdGF0aWNQcm9wZXJ0aWVzID0gbnVsbDtcbiAgICB0aGlzLnN0YXRpY0RhdGEgPSBudWxsO1xuICAgIHRoaXMuZ2wuZGVsZXRlQnVmZmVyKHRoaXMuc3RhdGljQnVmZmVyKTtcbn07XG4iLCJ2YXIgT2JqZWN0UmVuZGVyZXIgPSByZXF1aXJlKCcuLi8uLi9yZW5kZXJlcnMvd2ViZ2wvdXRpbHMvT2JqZWN0UmVuZGVyZXInKSxcbiAgICBXZWJHTFJlbmRlcmVyID0gcmVxdWlyZSgnLi4vLi4vcmVuZGVyZXJzL3dlYmdsL1dlYkdMUmVuZGVyZXInKSxcbiAgICBQYXJ0aWNsZVNoYWRlciA9IHJlcXVpcmUoJy4vUGFydGljbGVTaGFkZXInKSxcbiAgICBQYXJ0aWNsZUJ1ZmZlciA9IHJlcXVpcmUoJy4vUGFydGljbGVCdWZmZXInKSxcbiAgICBtYXRoICAgICAgICAgICAgPSByZXF1aXJlKCcuLi8uLi9tYXRoJyk7XG5cbi8qKlxuICogQGF1dGhvciBNYXQgR3JvdmVzXG4gKlxuICogQmlnIHRoYW5rcyB0byB0aGUgdmVyeSBjbGV2ZXIgTWF0dCBEZXNMYXVyaWVycyA8bWF0dGRlc2w+IGh0dHBzOi8vZ2l0aHViLmNvbS9tYXR0ZGVzbC9cbiAqIGZvciBjcmVhdGluZyB0aGUgb3JpZ2luYWwgcGl4aSB2ZXJzaW9uIVxuICogQWxzbyBhIHRoYW5rcyB0byBodHRwczovL2dpdGh1Yi5jb20vYmNoZXZhbGllciBmb3IgdHdlYWtpbmcgdGhlIHRpbnQgYW5kIGFscGhhIHNvIHRoYXQgdGhleSBub3cgc2hhcmUgNCBieXRlcyBvbiB0aGUgdmVydGV4IGJ1ZmZlclxuICpcbiAqIEhlYXZpbHkgaW5zcGlyZWQgYnkgTGliR0RYJ3MgUGFydGljbGVSZW5kZXJlcjpcbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS9saWJnZHgvbGliZ2R4L2Jsb2IvbWFzdGVyL2dkeC9zcmMvY29tL2JhZGxvZ2ljL2dkeC9ncmFwaGljcy9nMmQvUGFydGljbGVSZW5kZXJlci5qYXZhXG4gKi9cblxuLyoqXG4gKlxuICogQGNsYXNzXG4gKiBAcHJpdmF0ZVxuICogQG1lbWJlcm9mIFBJWElcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5XZWJHTFJlbmRlcmVyfSBUaGUgcmVuZGVyZXIgdGhpcyBzcHJpdGUgYmF0Y2ggd29ya3MgZm9yLlxuICovXG5mdW5jdGlvbiBQYXJ0aWNsZVJlbmRlcmVyKHJlbmRlcmVyKVxue1xuICAgIE9iamVjdFJlbmRlcmVyLmNhbGwodGhpcywgcmVuZGVyZXIpO1xuXG4gICAgLy8gNjU1MzUgaXMgbWF4IHZlcnRleCBpbmRleCBpbiB0aGUgaW5kZXggYnVmZmVyIChzZWUgUGFydGljbGVSZW5kZXJlcilcbiAgICAvLyBzbyBtYXggbnVtYmVyIG9mIHBhcnRpY2xlcyBpcyA2NTUzNiAvIDQgPSAxNjM4NFxuICAgIC8vIGFuZCBtYXggbnVtYmVyIG9mIGVsZW1lbnQgaW4gdGhlIGluZGV4IGJ1ZmZlciBpcyAxNjM4NCAqIDYgPSA5ODMwNFxuICAgIC8vIENyZWF0aW5nIGEgZnVsbCBpbmRleCBidWZmZXIsIG92ZXJoZWFkIGlzIDk4MzA0ICogMiA9IDE5NktvXG4gICAgdmFyIG51bUluZGljZXMgPSA5ODMwNDtcblxuICAgIC8qKlxuICAgICAqIEhvbGRzIHRoZSBpbmRpY2VzXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtVaW50MTZBcnJheX1cbiAgICAgKi9cbiAgICB0aGlzLmluZGljZXMgPSBuZXcgVWludDE2QXJyYXkobnVtSW5kaWNlcyk7XG5cbiAgICBmb3IgKHZhciBpPTAsIGo9MDsgaSA8IG51bUluZGljZXM7IGkgKz0gNiwgaiArPSA0KVxuICAgIHtcbiAgICAgICAgdGhpcy5pbmRpY2VzW2kgKyAwXSA9IGogKyAwO1xuICAgICAgICB0aGlzLmluZGljZXNbaSArIDFdID0gaiArIDE7XG4gICAgICAgIHRoaXMuaW5kaWNlc1tpICsgMl0gPSBqICsgMjtcbiAgICAgICAgdGhpcy5pbmRpY2VzW2kgKyAzXSA9IGogKyAwO1xuICAgICAgICB0aGlzLmluZGljZXNbaSArIDRdID0gaiArIDI7XG4gICAgICAgIHRoaXMuaW5kaWNlc1tpICsgNV0gPSBqICsgMztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGUgZGVmYXVsdCBzaGFkZXIgdGhhdCBpcyB1c2VkIGlmIGEgc3ByaXRlIGRvZXNuJ3QgaGF2ZSBhIG1vcmUgc3BlY2lmaWMgb25lLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5TaGFkZXJ9XG4gICAgICovXG4gICAgdGhpcy5zaGFkZXIgPSBudWxsO1xuXG4gICAgdGhpcy5pbmRleEJ1ZmZlciA9IG51bGw7XG5cbiAgICB0aGlzLnByb3BlcnRpZXMgPSBudWxsO1xuXG4gICAgdGhpcy50ZW1wTWF0cml4ID0gbmV3IG1hdGguTWF0cml4KCk7XG59XG5cblBhcnRpY2xlUmVuZGVyZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShPYmplY3RSZW5kZXJlci5wcm90b3R5cGUpO1xuUGFydGljbGVSZW5kZXJlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBQYXJ0aWNsZVJlbmRlcmVyO1xubW9kdWxlLmV4cG9ydHMgPSBQYXJ0aWNsZVJlbmRlcmVyO1xuXG5XZWJHTFJlbmRlcmVyLnJlZ2lzdGVyUGx1Z2luKCdwYXJ0aWNsZScsIFBhcnRpY2xlUmVuZGVyZXIpO1xuXG4vKipcbiAqIFdoZW4gdGhlcmUgaXMgYSBXZWJHTCBjb250ZXh0IGNoYW5nZVxuICpcbiAqIEBwcml2YXRlXG4gKi9cblBhcnRpY2xlUmVuZGVyZXIucHJvdG90eXBlLm9uQ29udGV4dENoYW5nZSA9IGZ1bmN0aW9uICgpXG57XG4gICAgdmFyIGdsID0gdGhpcy5yZW5kZXJlci5nbDtcblxuICAgIC8vIHNldHVwIGRlZmF1bHQgc2hhZGVyXG4gICAgdGhpcy5zaGFkZXIgPSBuZXcgUGFydGljbGVTaGFkZXIodGhpcy5yZW5kZXJlci5zaGFkZXJNYW5hZ2VyKTtcblxuICAgIHRoaXMuaW5kZXhCdWZmZXIgPSBnbC5jcmVhdGVCdWZmZXIoKTtcblxuICAgIC8vIDY1NTM1IGlzIG1heCBpbmRleCwgc28gNjU1MzUgLyA2ID0gMTA5MjIuXG5cbiAgICAvL3VwbG9hZCB0aGUgaW5kZXggZGF0YVxuICAgIGdsLmJpbmRCdWZmZXIoZ2wuRUxFTUVOVF9BUlJBWV9CVUZGRVIsIHRoaXMuaW5kZXhCdWZmZXIpO1xuICAgIGdsLmJ1ZmZlckRhdGEoZ2wuRUxFTUVOVF9BUlJBWV9CVUZGRVIsIHRoaXMuaW5kaWNlcywgZ2wuU1RBVElDX0RSQVcpO1xuXG4gICAgdGhpcy5wcm9wZXJ0aWVzID0gW1xuICAgICAgICAvLyB2ZXJ0aWNlc0RhdGFcbiAgICAgICAge1xuICAgICAgICAgICAgYXR0cmlidXRlOnRoaXMuc2hhZGVyLmF0dHJpYnV0ZXMuYVZlcnRleFBvc2l0aW9uLFxuICAgICAgICAgICAgc2l6ZToyLFxuICAgICAgICAgICAgdXBsb2FkRnVuY3Rpb246dGhpcy51cGxvYWRWZXJ0aWNlcyxcbiAgICAgICAgICAgIG9mZnNldDowXG4gICAgICAgIH0sXG4gICAgICAgIC8vIHBvc2l0aW9uRGF0YVxuICAgICAgICB7XG4gICAgICAgICAgICBhdHRyaWJ1dGU6dGhpcy5zaGFkZXIuYXR0cmlidXRlcy5hUG9zaXRpb25Db29yZCxcbiAgICAgICAgICAgIHNpemU6MixcbiAgICAgICAgICAgIHVwbG9hZEZ1bmN0aW9uOnRoaXMudXBsb2FkUG9zaXRpb24sXG4gICAgICAgICAgICBvZmZzZXQ6MFxuICAgICAgICB9LFxuICAgICAgICAvLyByb3RhdGlvbkRhdGFcbiAgICAgICAge1xuICAgICAgICAgICAgYXR0cmlidXRlOnRoaXMuc2hhZGVyLmF0dHJpYnV0ZXMuYVJvdGF0aW9uLFxuICAgICAgICAgICAgc2l6ZToxLFxuICAgICAgICAgICAgdXBsb2FkRnVuY3Rpb246dGhpcy51cGxvYWRSb3RhdGlvbixcbiAgICAgICAgICAgIG9mZnNldDowXG4gICAgICAgIH0sXG4gICAgICAgIC8vIHV2c0RhdGFcbiAgICAgICAge1xuICAgICAgICAgICAgYXR0cmlidXRlOnRoaXMuc2hhZGVyLmF0dHJpYnV0ZXMuYVRleHR1cmVDb29yZCxcbiAgICAgICAgICAgIHNpemU6MixcbiAgICAgICAgICAgIHVwbG9hZEZ1bmN0aW9uOnRoaXMudXBsb2FkVXZzLFxuICAgICAgICAgICAgb2Zmc2V0OjBcbiAgICAgICAgfSxcbiAgICAgICAgLy8gYWxwaGFEYXRhXG4gICAgICAgIHtcbiAgICAgICAgICAgIGF0dHJpYnV0ZTp0aGlzLnNoYWRlci5hdHRyaWJ1dGVzLmFDb2xvcixcbiAgICAgICAgICAgIHNpemU6MSxcbiAgICAgICAgICAgIHVwbG9hZEZ1bmN0aW9uOnRoaXMudXBsb2FkQWxwaGEsXG4gICAgICAgICAgICBvZmZzZXQ6MFxuICAgICAgICB9XG4gICAgXTtcbn07XG5cbi8qKlxuICogU3RhcnRzIGEgbmV3IHBhcnRpY2xlIGJhdGNoLlxuICpcbiAqL1xuUGFydGljbGVSZW5kZXJlci5wcm90b3R5cGUuc3RhcnQgPSBmdW5jdGlvbiAoKVxue1xuICAgIHZhciBnbCA9IHRoaXMucmVuZGVyZXIuZ2w7XG5cbiAgICAvLyBiaW5kIHRoZSBtYWluIHRleHR1cmVcbiAgICBnbC5hY3RpdmVUZXh0dXJlKGdsLlRFWFRVUkUwKTtcblxuICAgIC8vIGJpbmQgdGhlIGJ1ZmZlcnNcblxuICAgIGdsLmJpbmRCdWZmZXIoZ2wuRUxFTUVOVF9BUlJBWV9CVUZGRVIsIHRoaXMuaW5kZXhCdWZmZXIpO1xuXG4gICAgdmFyIHNoYWRlciA9IHRoaXMuc2hhZGVyO1xuXG4gICAgdGhpcy5yZW5kZXJlci5zaGFkZXJNYW5hZ2VyLnNldFNoYWRlcihzaGFkZXIpO1xufTtcblxuXG4vKipcbiAqIFJlbmRlcnMgdGhlIHBhcnRpY2xlIGNvbnRhaW5lciBvYmplY3QuXG4gKlxuICogQHBhcmFtIGNvbnRhaW5lciB7UElYSS5QYXJ0aWNsZUNvbnRhaW5lcn0gVGhlIGNvbnRhaW5lciB0byByZW5kZXIgdXNpbmcgdGhpcyBQYXJ0aWNsZVJlbmRlcmVyXG4gKi9cblBhcnRpY2xlUmVuZGVyZXIucHJvdG90eXBlLnJlbmRlciA9IGZ1bmN0aW9uIChjb250YWluZXIpXG57XG4gICAgdmFyIGNoaWxkcmVuID0gY29udGFpbmVyLmNoaWxkcmVuLFxuICAgICAgICB0b3RhbENoaWxkcmVuID0gY2hpbGRyZW4ubGVuZ3RoLFxuICAgICAgICBtYXhTaXplID0gY29udGFpbmVyLl9tYXhTaXplLFxuICAgICAgICBiYXRjaFNpemUgPSBjb250YWluZXIuX2JhdGNoU2l6ZTtcblxuICAgIGlmKHRvdGFsQ2hpbGRyZW4gPT09IDApXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIGVsc2UgaWYodG90YWxDaGlsZHJlbiA+IG1heFNpemUpXG4gICAge1xuICAgICAgICB0b3RhbENoaWxkcmVuID0gbWF4U2l6ZTtcbiAgICB9XG5cbiAgICBpZighY29udGFpbmVyLl9idWZmZXJzKVxuICAgIHtcbiAgICAgICAgY29udGFpbmVyLl9idWZmZXJzID0gdGhpcy5nZW5lcmF0ZUJ1ZmZlcnMoIGNvbnRhaW5lciApO1xuICAgIH1cblxuICAgIC8vIGlmIHRoZSB1dnMgaGF2ZSBub3QgdXBkYXRlZCB0aGVuIG5vIHBvaW50IHJlbmRlcmluZyBqdXN0IHlldCFcbiAgICB0aGlzLnJlbmRlcmVyLmJsZW5kTW9kZU1hbmFnZXIuc2V0QmxlbmRNb2RlKGNvbnRhaW5lci5ibGVuZE1vZGUpO1xuXG4gICAgdmFyIGdsID0gdGhpcy5yZW5kZXJlci5nbDtcblxuICAgIHZhciBtID0gIGNvbnRhaW5lci53b3JsZFRyYW5zZm9ybS5jb3B5KCB0aGlzLnRlbXBNYXRyaXggKTtcbiAgICBtLnByZXBlbmQoIHRoaXMucmVuZGVyZXIuY3VycmVudFJlbmRlclRhcmdldC5wcm9qZWN0aW9uTWF0cml4ICk7XG4gICAgZ2wudW5pZm9ybU1hdHJpeDNmdih0aGlzLnNoYWRlci51bmlmb3Jtcy5wcm9qZWN0aW9uTWF0cml4Ll9sb2NhdGlvbiwgZmFsc2UsIG0udG9BcnJheSh0cnVlKSk7XG4gICAgZ2wudW5pZm9ybTFmKHRoaXMuc2hhZGVyLnVuaWZvcm1zLnVBbHBoYS5fbG9jYXRpb24sIGNvbnRhaW5lci53b3JsZEFscGhhKTtcblxuXG4gICAgLy8gbWFrZSBzdXJlIHRoZSB0ZXh0dXJlIGlzIGJvdW5kLi5cbiAgICB2YXIgYmFzZVRleHR1cmUgPSBjaGlsZHJlblswXS5fdGV4dHVyZS5iYXNlVGV4dHVyZTtcblxuICAgIGlmICghYmFzZVRleHR1cmUuX2dsVGV4dHVyZXNbZ2wuaWRdKVxuICAgIHtcbiAgICAgICAgLy8gaWYgdGhlIHRleHR1cmUgaGFzIG5vdCB1cGRhdGVkIHRoZW4gbGV0cyBub3QgdXBsb2FkIGFueSBzdGF0aWMgcHJvcGVydGllc1xuICAgICAgICBpZighdGhpcy5yZW5kZXJlci51cGRhdGVUZXh0dXJlKGJhc2VUZXh0dXJlKSlcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYoIWNvbnRhaW5lci5fcHJvcGVydGllc1swXSB8fCAhY29udGFpbmVyLl9wcm9wZXJ0aWVzWzNdKVxuICAgICAgICB7XG4gICAgICAgICAgICBjb250YWluZXIuX2J1ZmZlclRvVXBkYXRlID0gMDtcbiAgICAgICAgfVxuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICBnbC5iaW5kVGV4dHVyZShnbC5URVhUVVJFXzJELCBiYXNlVGV4dHVyZS5fZ2xUZXh0dXJlc1tnbC5pZF0pO1xuICAgIH1cblxuICAgIC8vIG5vdyBsZXRzIHVwbG9hZCBhbmQgcmVuZGVyIHRoZSBidWZmZXJzLi5cbiAgICBmb3IgKHZhciBpID0gMCwgaiA9IDA7IGkgPCB0b3RhbENoaWxkcmVuOyBpICs9IGJhdGNoU2l6ZSwgaiArPSAxKVxuICAgIHtcbiAgICAgICAgdmFyIGFtb3VudCA9ICggdG90YWxDaGlsZHJlbiAtIGkpO1xuICAgICAgICBpZihhbW91bnQgPiBiYXRjaFNpemUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGFtb3VudCA9IGJhdGNoU2l6ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBidWZmZXIgPSBjb250YWluZXIuX2J1ZmZlcnNbal07XG5cbiAgICAgICAgLy8gd2UgYWx3YXlzIHVwbG9hZCB0aGUgZHluYW1pY1xuICAgICAgICBidWZmZXIudXBsb2FkRHluYW1pYyhjaGlsZHJlbiwgaSwgYW1vdW50KTtcblxuICAgICAgICAvLyB3ZSBvbmx5IHVwbG9hZCB0aGUgc3RhdGljIGNvbnRlbnQgd2hlbiB3ZSBoYXZlIHRvIVxuICAgICAgICBpZihjb250YWluZXIuX2J1ZmZlclRvVXBkYXRlID09PSBqKVxuICAgICAgICB7XG4gICAgICAgICAgICBidWZmZXIudXBsb2FkU3RhdGljKGNoaWxkcmVuLCBpLCBhbW91bnQpO1xuICAgICAgICAgICAgY29udGFpbmVyLl9idWZmZXJUb1VwZGF0ZSA9IGogKyAxO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gYmluZCB0aGUgYnVmZmVyXG4gICAgICAgIGJ1ZmZlci5iaW5kKCB0aGlzLnNoYWRlciApO1xuXG4gICAgICAgICAvLyBub3cgZHJhdyB0aG9zZSBzdWNrYXMhXG4gICAgICAgIGdsLmRyYXdFbGVtZW50cyhnbC5UUklBTkdMRVMsIGFtb3VudCAqIDYsIGdsLlVOU0lHTkVEX1NIT1JULCAwKTtcbiAgICAgICAgdGhpcy5yZW5kZXJlci5kcmF3Q291bnQrKztcbiAgICB9XG59O1xuXG4vKipcbiAqIENyZWF0ZXMgb25lIHBhcnRpY2xlIGJ1ZmZlciBmb3IgZWFjaCBjaGlsZCBpbiB0aGUgY29udGFpbmVyIHdlIHdhbnQgdG8gcmVuZGVyIGFuZCB1cGRhdGVzIGludGVybmFsIHByb3BlcnRpZXNcbiAqXG4gKiBAcGFyYW0gY29udGFpbmVyIHtQSVhJLlBhcnRpY2xlQ29udGFpbmVyfSBUaGUgY29udGFpbmVyIHRvIHJlbmRlciB1c2luZyB0aGlzIFBhcnRpY2xlUmVuZGVyZXJcbiAqL1xuUGFydGljbGVSZW5kZXJlci5wcm90b3R5cGUuZ2VuZXJhdGVCdWZmZXJzID0gZnVuY3Rpb24gKGNvbnRhaW5lcilcbntcbiAgICB2YXIgZ2wgPSB0aGlzLnJlbmRlcmVyLmdsLFxuICAgICAgICBidWZmZXJzID0gW10sXG4gICAgICAgIHNpemUgPSBjb250YWluZXIuX21heFNpemUsXG4gICAgICAgIGJhdGNoU2l6ZSA9IGNvbnRhaW5lci5fYmF0Y2hTaXplLFxuICAgICAgICBkeW5hbWljUHJvcGVydHlGbGFncyA9IGNvbnRhaW5lci5fcHJvcGVydGllcyxcbiAgICAgICAgaTtcblxuICAgIGZvciAoaSA9IDA7IGkgPCBzaXplOyBpICs9IGJhdGNoU2l6ZSlcbiAgICB7XG4gICAgICAgIGJ1ZmZlcnMucHVzaChuZXcgUGFydGljbGVCdWZmZXIoZ2wsIHRoaXMucHJvcGVydGllcywgZHluYW1pY1Byb3BlcnR5RmxhZ3MsIGJhdGNoU2l6ZSkpO1xuICAgIH1cblxuICAgIHJldHVybiBidWZmZXJzO1xufTtcblxuLyoqXG4gKiBVcGxvYWRzIHRoZSB2ZXJ0aWNpZXMuXG4gKlxuICogQHBhcmFtIGNoaWxkcmVuIHtQSVhJLkRpc3BsYXlPYmplY3RbXX0gdGhlIGFycmF5IG9mIGRpc3BsYXkgb2JqZWN0cyB0byByZW5kZXJcbiAqIEBwYXJhbSBzdGFydEluZGV4IHtudW1iZXJ9IHRoZSBpbmRleCB0byBzdGFydCBmcm9tIGluIHRoZSBjaGlsZHJlbiBhcnJheVxuICogQHBhcmFtIGFtb3VudCB7bnVtYmVyfSB0aGUgYW1vdW50IG9mIGNoaWxkcmVuIHRoYXQgd2lsbCBoYXZlIHRoZWlyIHZlcnRpY2VzIHVwbG9hZGVkXG4gKiBAcGFyYW0gYXJyYXkge251bWJlcltdfVxuICogQHBhcmFtIHN0cmlkZSB7bnVtYmVyfVxuICogQHBhcmFtIG9mZnNldCB7bnVtYmVyfVxuICovXG5QYXJ0aWNsZVJlbmRlcmVyLnByb3RvdHlwZS51cGxvYWRWZXJ0aWNlcyA9IGZ1bmN0aW9uIChjaGlsZHJlbiwgc3RhcnRJbmRleCwgYW1vdW50LCBhcnJheSwgc3RyaWRlLCBvZmZzZXQpXG57XG4gICAgdmFyIHNwcml0ZSxcbiAgICAgICAgdGV4dHVyZSxcbiAgICAgICAgdHJpbSxcbiAgICAgICAgc3gsXG4gICAgICAgIHN5LFxuICAgICAgICB3MCwgdzEsIGgwLCBoMTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYW1vdW50OyBpKyspIHtcblxuICAgICAgICBzcHJpdGUgPSBjaGlsZHJlbltzdGFydEluZGV4ICsgaV07XG4gICAgICAgIHRleHR1cmUgPSBzcHJpdGUuX3RleHR1cmU7XG4gICAgICAgIHN4ID0gc3ByaXRlLnNjYWxlLng7XG4gICAgICAgIHN5ID0gc3ByaXRlLnNjYWxlLnk7XG5cbiAgICAgICAgaWYgKHRleHR1cmUudHJpbSlcbiAgICAgICAge1xuICAgICAgICAgICAgLy8gaWYgdGhlIHNwcml0ZSBpcyB0cmltbWVkIHRoZW4gd2UgbmVlZCB0byBhZGQgdGhlIGV4dHJhIHNwYWNlIGJlZm9yZSB0cmFuc2Zvcm1pbmcgdGhlIHNwcml0ZSBjb29yZHMuLlxuICAgICAgICAgICAgdHJpbSA9IHRleHR1cmUudHJpbTtcblxuICAgICAgICAgICAgdzEgPSB0cmltLnggLSBzcHJpdGUuYW5jaG9yLnggKiB0cmltLndpZHRoO1xuICAgICAgICAgICAgdzAgPSB3MSArIHRleHR1cmUuY3JvcC53aWR0aDtcblxuICAgICAgICAgICAgaDEgPSB0cmltLnkgLSBzcHJpdGUuYW5jaG9yLnkgKiB0cmltLmhlaWdodDtcbiAgICAgICAgICAgIGgwID0gaDEgKyB0ZXh0dXJlLmNyb3AuaGVpZ2h0O1xuICAgICAgICB9XG4gICAgICAgIGVsc2VcbiAgICAgICAge1xuICAgICAgICAgICAgdzAgPSAodGV4dHVyZS5fZnJhbWUud2lkdGggKSAqICgxLXNwcml0ZS5hbmNob3IueCk7XG4gICAgICAgICAgICB3MSA9ICh0ZXh0dXJlLl9mcmFtZS53aWR0aCApICogLXNwcml0ZS5hbmNob3IueDtcblxuICAgICAgICAgICAgaDAgPSB0ZXh0dXJlLl9mcmFtZS5oZWlnaHQgKiAoMS1zcHJpdGUuYW5jaG9yLnkpO1xuICAgICAgICAgICAgaDEgPSB0ZXh0dXJlLl9mcmFtZS5oZWlnaHQgKiAtc3ByaXRlLmFuY2hvci55O1xuICAgICAgICB9XG5cbiAgICAgICAgYXJyYXlbb2Zmc2V0XSA9IHcxICogc3g7XG4gICAgICAgIGFycmF5W29mZnNldCArIDFdID0gaDEgKiBzeTtcblxuICAgICAgICBhcnJheVtvZmZzZXQgKyBzdHJpZGVdID0gdzAgKiBzeDtcbiAgICAgICAgYXJyYXlbb2Zmc2V0ICsgc3RyaWRlICsgMV0gPSBoMSAqIHN5O1xuXG4gICAgICAgIGFycmF5W29mZnNldCArIHN0cmlkZSAqIDJdID0gdzAgKiBzeDtcbiAgICAgICAgYXJyYXlbb2Zmc2V0ICsgc3RyaWRlICogMiArIDFdID0gaDAgKiBzeTtcblxuICAgICAgICBhcnJheVtvZmZzZXQgKyBzdHJpZGUgKiAzXSA9IHcxICogc3g7XG4gICAgICAgIGFycmF5W29mZnNldCArIHN0cmlkZSAqIDMgKyAxXSA9IGgwICogc3k7XG5cbiAgICAgICAgb2Zmc2V0ICs9IHN0cmlkZSAqIDQ7XG4gICAgfVxuXG59O1xuXG4vKipcbiAqXG4gKiBAcGFyYW0gY2hpbGRyZW4ge1BJWEkuRGlzcGxheU9iamVjdFtdfSB0aGUgYXJyYXkgb2YgZGlzcGxheSBvYmplY3RzIHRvIHJlbmRlclxuICogQHBhcmFtIHN0YXJ0SW5kZXgge251bWJlcn0gdGhlIGluZGV4IHRvIHN0YXJ0IGZyb20gaW4gdGhlIGNoaWxkcmVuIGFycmF5XG4gKiBAcGFyYW0gYW1vdW50IHtudW1iZXJ9IHRoZSBhbW91bnQgb2YgY2hpbGRyZW4gdGhhdCB3aWxsIGhhdmUgdGhlaXIgcG9zaXRpb25zIHVwbG9hZGVkXG4gKiBAcGFyYW0gYXJyYXkge251bWJlcltdfVxuICogQHBhcmFtIHN0cmlkZSB7bnVtYmVyfVxuICogQHBhcmFtIG9mZnNldCB7bnVtYmVyfVxuICovXG5QYXJ0aWNsZVJlbmRlcmVyLnByb3RvdHlwZS51cGxvYWRQb3NpdGlvbiA9IGZ1bmN0aW9uIChjaGlsZHJlbixzdGFydEluZGV4LCBhbW91bnQsIGFycmF5LCBzdHJpZGUsIG9mZnNldClcbntcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFtb3VudDsgaSsrKVxuICAgIHtcbiAgICAgICAgdmFyIHNwcml0ZVBvc2l0aW9uID0gY2hpbGRyZW5bc3RhcnRJbmRleCArIGldLnBvc2l0aW9uO1xuXG4gICAgICAgIGFycmF5W29mZnNldF0gPSBzcHJpdGVQb3NpdGlvbi54O1xuICAgICAgICBhcnJheVtvZmZzZXQgKyAxXSA9IHNwcml0ZVBvc2l0aW9uLnk7XG5cbiAgICAgICAgYXJyYXlbb2Zmc2V0ICsgc3RyaWRlXSA9IHNwcml0ZVBvc2l0aW9uLng7XG4gICAgICAgIGFycmF5W29mZnNldCArIHN0cmlkZSArIDFdID0gc3ByaXRlUG9zaXRpb24ueTtcblxuICAgICAgICBhcnJheVtvZmZzZXQgKyBzdHJpZGUgKiAyXSA9IHNwcml0ZVBvc2l0aW9uLng7XG4gICAgICAgIGFycmF5W29mZnNldCArIHN0cmlkZSAqIDIgKyAxXSA9IHNwcml0ZVBvc2l0aW9uLnk7XG5cbiAgICAgICAgYXJyYXlbb2Zmc2V0ICsgc3RyaWRlICogM10gPSBzcHJpdGVQb3NpdGlvbi54O1xuICAgICAgICBhcnJheVtvZmZzZXQgKyBzdHJpZGUgKiAzICsgMV0gPSBzcHJpdGVQb3NpdGlvbi55O1xuXG4gICAgICAgIG9mZnNldCArPSBzdHJpZGUgKiA0O1xuICAgIH1cblxufTtcblxuLyoqXG4gKlxuICogQHBhcmFtIGNoaWxkcmVuIHtQSVhJLkRpc3BsYXlPYmplY3RbXX0gdGhlIGFycmF5IG9mIGRpc3BsYXkgb2JqZWN0cyB0byByZW5kZXJcbiAqIEBwYXJhbSBzdGFydEluZGV4IHtudW1iZXJ9IHRoZSBpbmRleCB0byBzdGFydCBmcm9tIGluIHRoZSBjaGlsZHJlbiBhcnJheVxuICogQHBhcmFtIGFtb3VudCB7bnVtYmVyfSB0aGUgYW1vdW50IG9mIGNoaWxkcmVuIHRoYXQgd2lsbCBoYXZlIHRoZWlyIHJvdGF0aW9uIHVwbG9hZGVkXG4gKiBAcGFyYW0gYXJyYXkge251bWJlcltdfVxuICogQHBhcmFtIHN0cmlkZSB7bnVtYmVyfVxuICogQHBhcmFtIG9mZnNldCB7bnVtYmVyfVxuICovXG5QYXJ0aWNsZVJlbmRlcmVyLnByb3RvdHlwZS51cGxvYWRSb3RhdGlvbiA9IGZ1bmN0aW9uIChjaGlsZHJlbixzdGFydEluZGV4LCBhbW91bnQsIGFycmF5LCBzdHJpZGUsIG9mZnNldClcbntcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFtb3VudDsgaSsrKVxuICAgIHtcbiAgICAgICAgdmFyIHNwcml0ZVJvdGF0aW9uID0gY2hpbGRyZW5bc3RhcnRJbmRleCArIGldLnJvdGF0aW9uO1xuXG5cbiAgICAgICAgYXJyYXlbb2Zmc2V0XSA9IHNwcml0ZVJvdGF0aW9uO1xuICAgICAgICBhcnJheVtvZmZzZXQgKyBzdHJpZGVdID0gc3ByaXRlUm90YXRpb247XG4gICAgICAgIGFycmF5W29mZnNldCArIHN0cmlkZSAqIDJdID0gc3ByaXRlUm90YXRpb247XG4gICAgICAgIGFycmF5W29mZnNldCArIHN0cmlkZSAqIDNdID0gc3ByaXRlUm90YXRpb247XG5cbiAgICAgICAgb2Zmc2V0ICs9IHN0cmlkZSAqIDQ7XG4gICAgfVxufTtcblxuLyoqXG4gKlxuICogQHBhcmFtIGNoaWxkcmVuIHtQSVhJLkRpc3BsYXlPYmplY3RbXX0gdGhlIGFycmF5IG9mIGRpc3BsYXkgb2JqZWN0cyB0byByZW5kZXJcbiAqIEBwYXJhbSBzdGFydEluZGV4IHtudW1iZXJ9IHRoZSBpbmRleCB0byBzdGFydCBmcm9tIGluIHRoZSBjaGlsZHJlbiBhcnJheVxuICogQHBhcmFtIGFtb3VudCB7bnVtYmVyfSB0aGUgYW1vdW50IG9mIGNoaWxkcmVuIHRoYXQgd2lsbCBoYXZlIHRoZWlyIFV2cyB1cGxvYWRlZFxuICogQHBhcmFtIGFycmF5IHtudW1iZXJbXX1cbiAqIEBwYXJhbSBzdHJpZGUge251bWJlcn1cbiAqIEBwYXJhbSBvZmZzZXQge251bWJlcn1cbiAqL1xuUGFydGljbGVSZW5kZXJlci5wcm90b3R5cGUudXBsb2FkVXZzID0gZnVuY3Rpb24gKGNoaWxkcmVuLHN0YXJ0SW5kZXgsIGFtb3VudCwgYXJyYXksIHN0cmlkZSwgb2Zmc2V0KVxue1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYW1vdW50OyBpKyspXG4gICAge1xuICAgICAgICB2YXIgdGV4dHVyZVV2cyA9IGNoaWxkcmVuW3N0YXJ0SW5kZXggKyBpXS5fdGV4dHVyZS5fdXZzO1xuXG4gICAgICAgIGlmICh0ZXh0dXJlVXZzKVxuICAgICAgICB7XG4gICAgICAgICAgICBhcnJheVtvZmZzZXRdID0gdGV4dHVyZVV2cy54MDtcbiAgICAgICAgICAgIGFycmF5W29mZnNldCArIDFdID0gdGV4dHVyZVV2cy55MDtcblxuICAgICAgICAgICAgYXJyYXlbb2Zmc2V0ICsgc3RyaWRlXSA9IHRleHR1cmVVdnMueDE7XG4gICAgICAgICAgICBhcnJheVtvZmZzZXQgKyBzdHJpZGUgKyAxXSA9IHRleHR1cmVVdnMueTE7XG5cbiAgICAgICAgICAgIGFycmF5W29mZnNldCArIHN0cmlkZSAqIDJdID0gdGV4dHVyZVV2cy54MjtcbiAgICAgICAgICAgIGFycmF5W29mZnNldCArIHN0cmlkZSAqIDIgKyAxXSA9IHRleHR1cmVVdnMueTI7XG5cbiAgICAgICAgICAgIGFycmF5W29mZnNldCArIHN0cmlkZSAqIDNdID0gdGV4dHVyZVV2cy54MztcbiAgICAgICAgICAgIGFycmF5W29mZnNldCArIHN0cmlkZSAqIDMgKyAxXSA9IHRleHR1cmVVdnMueTM7XG5cbiAgICAgICAgICAgIG9mZnNldCArPSBzdHJpZGUgKiA0O1xuICAgICAgICB9XG4gICAgICAgIGVsc2VcbiAgICAgICAge1xuICAgICAgICAgICAgLy9UT0RPIHlvdSBrbm93IHRoaXMgY2FuIGJlIGVhc2llciFcbiAgICAgICAgICAgIGFycmF5W29mZnNldF0gPSAwO1xuICAgICAgICAgICAgYXJyYXlbb2Zmc2V0ICsgMV0gPSAwO1xuXG4gICAgICAgICAgICBhcnJheVtvZmZzZXQgKyBzdHJpZGVdID0gMDtcbiAgICAgICAgICAgIGFycmF5W29mZnNldCArIHN0cmlkZSArIDFdID0gMDtcblxuICAgICAgICAgICAgYXJyYXlbb2Zmc2V0ICsgc3RyaWRlICogMl0gPSAwO1xuICAgICAgICAgICAgYXJyYXlbb2Zmc2V0ICsgc3RyaWRlICogMiArIDFdID0gMDtcblxuICAgICAgICAgICAgYXJyYXlbb2Zmc2V0ICsgc3RyaWRlICogM10gPSAwO1xuICAgICAgICAgICAgYXJyYXlbb2Zmc2V0ICsgc3RyaWRlICogMyArIDFdID0gMDtcblxuICAgICAgICAgICAgb2Zmc2V0ICs9IHN0cmlkZSAqIDQ7XG4gICAgICAgIH1cbiAgICB9XG59O1xuXG4vKipcbiAqXG4gKiBAcGFyYW0gY2hpbGRyZW4ge1BJWEkuRGlzcGxheU9iamVjdFtdfSB0aGUgYXJyYXkgb2YgZGlzcGxheSBvYmplY3RzIHRvIHJlbmRlclxuICogQHBhcmFtIHN0YXJ0SW5kZXgge251bWJlcn0gdGhlIGluZGV4IHRvIHN0YXJ0IGZyb20gaW4gdGhlIGNoaWxkcmVuIGFycmF5XG4gKiBAcGFyYW0gYW1vdW50IHtudW1iZXJ9IHRoZSBhbW91bnQgb2YgY2hpbGRyZW4gdGhhdCB3aWxsIGhhdmUgdGhlaXIgYWxwaGEgdXBsb2FkZWRcbiAqIEBwYXJhbSBhcnJheSB7bnVtYmVyW119XG4gKiBAcGFyYW0gc3RyaWRlIHtudW1iZXJ9XG4gKiBAcGFyYW0gb2Zmc2V0IHtudW1iZXJ9XG4gKi9cblBhcnRpY2xlUmVuZGVyZXIucHJvdG90eXBlLnVwbG9hZEFscGhhID0gZnVuY3Rpb24gKGNoaWxkcmVuLHN0YXJ0SW5kZXgsIGFtb3VudCwgYXJyYXksIHN0cmlkZSwgb2Zmc2V0KVxue1xuICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFtb3VudDsgaSsrKVxuICAgICB7XG4gICAgICAgIHZhciBzcHJpdGVBbHBoYSA9IGNoaWxkcmVuW3N0YXJ0SW5kZXggKyBpXS5hbHBoYTtcblxuICAgICAgICBhcnJheVtvZmZzZXRdID0gc3ByaXRlQWxwaGE7XG4gICAgICAgIGFycmF5W29mZnNldCArIHN0cmlkZV0gPSBzcHJpdGVBbHBoYTtcbiAgICAgICAgYXJyYXlbb2Zmc2V0ICsgc3RyaWRlICogMl0gPSBzcHJpdGVBbHBoYTtcbiAgICAgICAgYXJyYXlbb2Zmc2V0ICsgc3RyaWRlICogM10gPSBzcHJpdGVBbHBoYTtcblxuICAgICAgICBvZmZzZXQgKz0gc3RyaWRlICogNDtcbiAgICB9XG59O1xuXG5cbi8qKlxuICogRGVzdHJveXMgdGhlIFBhcnRpY2xlUmVuZGVyZXIuXG4gKlxuICovXG5QYXJ0aWNsZVJlbmRlcmVyLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKClcbntcbiAgICBpZiAodGhpcy5yZW5kZXJlci5nbCkge1xuICAgICAgICB0aGlzLnJlbmRlcmVyLmdsLmRlbGV0ZUJ1ZmZlcih0aGlzLmluZGV4QnVmZmVyKTtcbiAgICB9XG5cbiAgICBPYmplY3RSZW5kZXJlci5wcm90b3R5cGUuZGVzdHJveS5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuXG4gICAgdGhpcy5zaGFkZXIuZGVzdHJveSgpO1xuXG4gICAgdGhpcy5pbmRpY2VzID0gbnVsbDtcbiAgICB0aGlzLnRlbXBNYXRyaXggPSBudWxsO1xufTtcbiIsInZhciBUZXh0dXJlU2hhZGVyID0gcmVxdWlyZSgnLi4vLi4vcmVuZGVyZXJzL3dlYmdsL3NoYWRlcnMvVGV4dHVyZVNoYWRlcicpO1xuXG4vKipcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5UZXh0dXJlU2hhZGVyXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIHNoYWRlck1hbmFnZXIge1NoYWRlck1hbmFnZXJ9IFRoZSB3ZWJnbCBzaGFkZXIgbWFuYWdlciB0aGlzIHNoYWRlciB3b3JrcyBmb3IuXG4gKi9cbmZ1bmN0aW9uIFBhcnRpY2xlU2hhZGVyKHNoYWRlck1hbmFnZXIpXG57XG4gICAgVGV4dHVyZVNoYWRlci5jYWxsKHRoaXMsXG4gICAgICAgIHNoYWRlck1hbmFnZXIsXG4gICAgICAgIC8vIHZlcnRleCBzaGFkZXJcbiAgICAgICAgW1xuICAgICAgICAgICAgJ2F0dHJpYnV0ZSB2ZWMyIGFWZXJ0ZXhQb3NpdGlvbjsnLFxuICAgICAgICAgICAgJ2F0dHJpYnV0ZSB2ZWMyIGFUZXh0dXJlQ29vcmQ7JyxcbiAgICAgICAgICAgICdhdHRyaWJ1dGUgZmxvYXQgYUNvbG9yOycsXG5cbiAgICAgICAgICAgICdhdHRyaWJ1dGUgdmVjMiBhUG9zaXRpb25Db29yZDsnLFxuICAgICAgICAgICAgJ2F0dHJpYnV0ZSB2ZWMyIGFTY2FsZTsnLFxuICAgICAgICAgICAgJ2F0dHJpYnV0ZSBmbG9hdCBhUm90YXRpb247JyxcblxuICAgICAgICAgICAgJ3VuaWZvcm0gbWF0MyBwcm9qZWN0aW9uTWF0cml4OycsXG5cbiAgICAgICAgICAgICd2YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDsnLFxuICAgICAgICAgICAgJ3ZhcnlpbmcgZmxvYXQgdkNvbG9yOycsXG5cbiAgICAgICAgICAgICd2b2lkIG1haW4odm9pZCl7JyxcbiAgICAgICAgICAgICcgICB2ZWMyIHYgPSBhVmVydGV4UG9zaXRpb247JyxcblxuICAgICAgICAgICAgJyAgIHYueCA9IChhVmVydGV4UG9zaXRpb24ueCkgKiBjb3MoYVJvdGF0aW9uKSAtIChhVmVydGV4UG9zaXRpb24ueSkgKiBzaW4oYVJvdGF0aW9uKTsnLFxuICAgICAgICAgICAgJyAgIHYueSA9IChhVmVydGV4UG9zaXRpb24ueCkgKiBzaW4oYVJvdGF0aW9uKSArIChhVmVydGV4UG9zaXRpb24ueSkgKiBjb3MoYVJvdGF0aW9uKTsnLFxuICAgICAgICAgICAgJyAgIHYgPSB2ICsgYVBvc2l0aW9uQ29vcmQ7JyxcblxuICAgICAgICAgICAgJyAgIGdsX1Bvc2l0aW9uID0gdmVjNCgocHJvamVjdGlvbk1hdHJpeCAqIHZlYzModiwgMS4wKSkueHksIDAuMCwgMS4wKTsnLFxuXG4gICAgICAgICAgICAnICAgdlRleHR1cmVDb29yZCA9IGFUZXh0dXJlQ29vcmQ7JyxcbiAgICAgICAgICAgICcgICB2Q29sb3IgPSBhQ29sb3I7JyxcbiAgICAgICAgICAgICd9J1xuICAgICAgICBdLmpvaW4oJ1xcbicpLFxuICAgICAgICAvLyBoZWxsb1xuICAgICAgICAgW1xuICAgICAgICAgICAgJ3ByZWNpc2lvbiBsb3dwIGZsb2F0OycsXG5cbiAgICAgICAgICAgICd2YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDsnLFxuICAgICAgICAgICAgJ3ZhcnlpbmcgZmxvYXQgdkNvbG9yOycsXG5cbiAgICAgICAgICAgICd1bmlmb3JtIHNhbXBsZXIyRCB1U2FtcGxlcjsnLFxuICAgICAgICAgICAgJ3VuaWZvcm0gZmxvYXQgdUFscGhhOycsXG5cbiAgICAgICAgICAgICd2b2lkIG1haW4odm9pZCl7JyxcbiAgICAgICAgICAgICcgIHZlYzQgY29sb3IgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZUZXh0dXJlQ29vcmQpICogdkNvbG9yICogdUFscGhhOycsXG4gICAgICAgICAgICAnICBpZiAoY29sb3IuYSA9PSAwLjApIGRpc2NhcmQ7JyxcbiAgICAgICAgICAgICcgIGdsX0ZyYWdDb2xvciA9IGNvbG9yOycsXG4gICAgICAgICAgICAnfSdcbiAgICAgICAgXS5qb2luKCdcXG4nKSxcbiAgICAgICAgLy8gY3VzdG9tIHVuaWZvcm1zXG4gICAgICAgIHtcbiAgICAgICAgICAgIHVBbHBoYTogIHsgdHlwZTogJzFmJywgdmFsdWU6IDEgfVxuICAgICAgICB9LFxuICAgICAgICAvLyBjdXN0b20gYXR0cmlidXRlc1xuICAgICAgICB7XG4gICAgICAgICAgICBhUG9zaXRpb25Db29yZDogMCxcbiAgICAgICAgICAgLy8gYVNjYWxlOiAgICAgICAgIDAsXG4gICAgICAgICAgICBhUm90YXRpb246ICAgICAgMFxuICAgICAgICB9XG4gICAgKTtcblxuICAgIC8vIFRFTVAgSEFDS1xuXG59XG5cblBhcnRpY2xlU2hhZGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoVGV4dHVyZVNoYWRlci5wcm90b3R5cGUpO1xuUGFydGljbGVTaGFkZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gUGFydGljbGVTaGFkZXI7XG5cbm1vZHVsZS5leHBvcnRzID0gUGFydGljbGVTaGFkZXI7XG4iLCJ2YXIgdXRpbHMgPSByZXF1aXJlKCcuLi91dGlscycpLFxuICAgIG1hdGggPSByZXF1aXJlKCcuLi9tYXRoJyksXG4gICAgQ09OU1QgPSByZXF1aXJlKCcuLi9jb25zdCcpLFxuICAgIEV2ZW50RW1pdHRlciA9IHJlcXVpcmUoJ2V2ZW50ZW1pdHRlcjMnKTtcblxuLyoqXG4gKiBUaGUgQ2FudmFzUmVuZGVyZXIgZHJhd3MgdGhlIHNjZW5lIGFuZCBhbGwgaXRzIGNvbnRlbnQgb250byBhIDJkIGNhbnZhcy4gVGhpcyByZW5kZXJlciBzaG91bGQgYmUgdXNlZCBmb3IgYnJvd3NlcnMgdGhhdCBkbyBub3Qgc3VwcG9ydCB3ZWJHTC5cbiAqIERvbid0IGZvcmdldCB0byBhZGQgdGhlIENhbnZhc1JlbmRlcmVyLnZpZXcgdG8geW91ciBET00gb3IgeW91IHdpbGwgbm90IHNlZSBhbnl0aGluZyA6KVxuICpcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqIEBwYXJhbSBzeXN0ZW0ge3N0cmluZ30gVGhlIG5hbWUgb2YgdGhlIHN5c3RlbSB0aGlzIHJlbmRlcmVyIGlzIGZvci5cbiAqIEBwYXJhbSBbd2lkdGg9ODAwXSB7bnVtYmVyfSB0aGUgd2lkdGggb2YgdGhlIGNhbnZhcyB2aWV3XG4gKiBAcGFyYW0gW2hlaWdodD02MDBdIHtudW1iZXJ9IHRoZSBoZWlnaHQgb2YgdGhlIGNhbnZhcyB2aWV3XG4gKiBAcGFyYW0gW29wdGlvbnNdIHtvYmplY3R9IFRoZSBvcHRpb25hbCByZW5kZXJlciBwYXJhbWV0ZXJzXG4gKiBAcGFyYW0gW29wdGlvbnMudmlld10ge0hUTUxDYW52YXNFbGVtZW50fSB0aGUgY2FudmFzIHRvIHVzZSBhcyBhIHZpZXcsIG9wdGlvbmFsXG4gKiBAcGFyYW0gW29wdGlvbnMudHJhbnNwYXJlbnQ9ZmFsc2VdIHtib29sZWFufSBJZiB0aGUgcmVuZGVyIHZpZXcgaXMgdHJhbnNwYXJlbnQsIGRlZmF1bHQgZmFsc2VcbiAqIEBwYXJhbSBbb3B0aW9ucy5hdXRvUmVzaXplPWZhbHNlXSB7Ym9vbGVhbn0gSWYgdGhlIHJlbmRlciB2aWV3IGlzIGF1dG9tYXRpY2FsbHkgcmVzaXplZCwgZGVmYXVsdCBmYWxzZVxuICogQHBhcmFtIFtvcHRpb25zLmFudGlhbGlhcz1mYWxzZV0ge2Jvb2xlYW59IHNldHMgYW50aWFsaWFzIChvbmx5IGFwcGxpY2FibGUgaW4gY2hyb21lIGF0IHRoZSBtb21lbnQpXG4gKiBAcGFyYW0gW29wdGlvbnMucmVzb2x1dGlvbj0xXSB7bnVtYmVyfSB0aGUgcmVzb2x1dGlvbiBvZiB0aGUgcmVuZGVyZXIgcmV0aW5hIHdvdWxkIGJlIDJcbiAqIEBwYXJhbSBbb3B0aW9ucy5jbGVhckJlZm9yZVJlbmRlcj10cnVlXSB7Ym9vbGVhbn0gVGhpcyBzZXRzIGlmIHRoZSBDYW52YXNSZW5kZXJlciB3aWxsIGNsZWFyIHRoZSBjYW52YXMgb3JcbiAqICAgICAgbm90IGJlZm9yZSB0aGUgbmV3IHJlbmRlciBwYXNzLlxuICogQHBhcmFtIFtvcHRpb25zLmJhY2tncm91bmRDb2xvcj0weDAwMDAwMF0ge251bWJlcn0gVGhlIGJhY2tncm91bmQgY29sb3Igb2YgdGhlIHJlbmRlcmVkIGFyZWEgKHNob3duIGlmIG5vdCB0cmFuc3BhcmVudCkuXG4gKiBAcGFyYW0gW29wdGlvbnMucm91bmRQaXhlbHM9ZmFsc2VdIHtib29sZWFufSBJZiB0cnVlIFBpeGkgd2lsbCBNYXRoLmZsb29yKCkgeC95IHZhbHVlcyB3aGVuIHJlbmRlcmluZywgc3RvcHBpbmcgcGl4ZWwgaW50ZXJwb2xhdGlvbi5cbiAqL1xuZnVuY3Rpb24gU3lzdGVtUmVuZGVyZXIoc3lzdGVtLCB3aWR0aCwgaGVpZ2h0LCBvcHRpb25zKVxue1xuICAgIEV2ZW50RW1pdHRlci5jYWxsKHRoaXMpO1xuXG4gICAgdXRpbHMuc2F5SGVsbG8oc3lzdGVtKTtcblxuICAgIC8vIHByZXBhcmUgb3B0aW9uc1xuICAgIGlmIChvcHRpb25zKVxuICAgIHtcbiAgICAgICAgZm9yICh2YXIgaSBpbiBDT05TVC5ERUZBVUxUX1JFTkRFUl9PUFRJT05TKVxuICAgICAgICB7XG4gICAgICAgICAgICBpZiAodHlwZW9mIG9wdGlvbnNbaV0gPT09ICd1bmRlZmluZWQnKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIG9wdGlvbnNbaV0gPSBDT05TVC5ERUZBVUxUX1JFTkRFUl9PUFRJT05TW2ldO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIG9wdGlvbnMgPSBDT05TVC5ERUZBVUxUX1JFTkRFUl9PUFRJT05TO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoZSB0eXBlIG9mIHRoZSByZW5kZXJlci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCBQSVhJLlJFTkRFUkVSX1RZUEUuVU5LTk9XTlxuICAgICAqIEBzZWUgUElYSS5SRU5ERVJFUl9UWVBFXG4gICAgICovXG4gICAgdGhpcy50eXBlID0gQ09OU1QuUkVOREVSRVJfVFlQRS5VTktOT1dOO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHdpZHRoIG9mIHRoZSBjYW52YXMgdmlld1xuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDgwMFxuICAgICAqL1xuICAgIHRoaXMud2lkdGggPSB3aWR0aCB8fCA4MDA7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgaGVpZ2h0IG9mIHRoZSBjYW52YXMgdmlld1xuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDYwMFxuICAgICAqL1xuICAgIHRoaXMuaGVpZ2h0ID0gaGVpZ2h0IHx8IDYwMDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBjYW52YXMgZWxlbWVudCB0aGF0IGV2ZXJ5dGhpbmcgaXMgZHJhd24gdG9cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge0hUTUxDYW52YXNFbGVtZW50fVxuICAgICAqL1xuICAgIHRoaXMudmlldyA9IG9wdGlvbnMudmlldyB8fCBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdjYW52YXMnKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSByZXNvbHV0aW9uIG9mIHRoZSByZW5kZXJlclxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDFcbiAgICAgKi9cbiAgICB0aGlzLnJlc29sdXRpb24gPSBvcHRpb25zLnJlc29sdXRpb247XG5cbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIHRoZSByZW5kZXIgdmlldyBpcyB0cmFuc3BhcmVudFxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKi9cbiAgICB0aGlzLnRyYW5zcGFyZW50ID0gb3B0aW9ucy50cmFuc3BhcmVudDtcblxuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgdGhlIHJlbmRlciB2aWV3IHNob3VsZCBiZSByZXNpemVkIGF1dG9tYXRpY2FsbHlcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICovXG4gICAgdGhpcy5hdXRvUmVzaXplID0gb3B0aW9ucy5hdXRvUmVzaXplIHx8IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogVHJhY2tzIHRoZSBibGVuZCBtb2RlcyB1c2VmdWwgZm9yIHRoaXMgcmVuZGVyZXIuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtvYmplY3Q8c3RyaW5nLCBtaXhlZD59XG4gICAgICovXG4gICAgdGhpcy5ibGVuZE1vZGVzID0gbnVsbDtcblxuICAgIC8qKlxuICAgICAqIFRoZSB2YWx1ZSBvZiB0aGUgcHJlc2VydmVEcmF3aW5nQnVmZmVyIGZsYWcgYWZmZWN0cyB3aGV0aGVyIG9yIG5vdCB0aGUgY29udGVudHMgb2YgdGhlIHN0ZW5jaWwgYnVmZmVyIGlzIHJldGFpbmVkIGFmdGVyIHJlbmRlcmluZy5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICovXG4gICAgdGhpcy5wcmVzZXJ2ZURyYXdpbmdCdWZmZXIgPSBvcHRpb25zLnByZXNlcnZlRHJhd2luZ0J1ZmZlcjtcblxuICAgIC8qKlxuICAgICAqIFRoaXMgc2V0cyBpZiB0aGUgQ2FudmFzUmVuZGVyZXIgd2lsbCBjbGVhciB0aGUgY2FudmFzIG9yIG5vdCBiZWZvcmUgdGhlIG5ldyByZW5kZXIgcGFzcy5cbiAgICAgKiBJZiB0aGUgc2NlbmUgaXMgTk9UIHRyYW5zcGFyZW50IFBpeGkgd2lsbCB1c2UgYSBjYW52YXMgc2l6ZWQgZmlsbFJlY3Qgb3BlcmF0aW9uIGV2ZXJ5IGZyYW1lIHRvIHNldCB0aGUgY2FudmFzIGJhY2tncm91bmQgY29sb3IuXG4gICAgICogSWYgdGhlIHNjZW5lIGlzIHRyYW5zcGFyZW50IFBpeGkgd2lsbCB1c2UgY2xlYXJSZWN0IHRvIGNsZWFyIHRoZSBjYW52YXMgZXZlcnkgZnJhbWUuXG4gICAgICogRGlzYWJsZSB0aGlzIGJ5IHNldHRpbmcgdGhpcyB0byBmYWxzZS4gRm9yIGV4YW1wbGUgaWYgeW91ciBnYW1lIGhhcyBhIGNhbnZhcyBmaWxsaW5nIGJhY2tncm91bmQgaW1hZ2UgeW91IG9mdGVuIGRvbid0IG5lZWQgdGhpcyBzZXQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqIEBkZWZhdWx0XG4gICAgICovXG4gICAgdGhpcy5jbGVhckJlZm9yZVJlbmRlciA9IG9wdGlvbnMuY2xlYXJCZWZvcmVSZW5kZXI7XG5cbiAgICAvKipcbiAgICAgKiBJZiB0cnVlIFBpeGkgd2lsbCBNYXRoLmZsb29yKCkgeC95IHZhbHVlcyB3aGVuIHJlbmRlcmluZywgc3RvcHBpbmcgcGl4ZWwgaW50ZXJwb2xhdGlvbi5cbiAgICAgKiBIYW5keSBmb3IgY3Jpc3AgcGl4ZWwgYXJ0IGFuZCBzcGVlZCBvbiBsZWdhY3kgZGV2aWNlcy5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICovXG4gICAgdGhpcy5yb3VuZFBpeGVscyA9IG9wdGlvbnMucm91bmRQaXhlbHM7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYmFja2dyb3VuZCBjb2xvciBhcyBhIG51bWJlci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX2JhY2tncm91bmRDb2xvciA9IDB4MDAwMDAwO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGJhY2tncm91bmQgY29sb3IgYXMgYW4gW1IsIEcsIEJdIGFycmF5LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyW119XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9iYWNrZ3JvdW5kQ29sb3JSZ2JhID0gWzAsIDAsIDAsIDBdO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGJhY2tncm91bmQgY29sb3IgYXMgYSBzdHJpbmcuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtzdHJpbmd9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9iYWNrZ3JvdW5kQ29sb3JTdHJpbmcgPSAnIzAwMDAwMCc7XG5cbiAgICB0aGlzLmJhY2tncm91bmRDb2xvciA9IG9wdGlvbnMuYmFja2dyb3VuZENvbG9yIHx8IHRoaXMuX2JhY2tncm91bmRDb2xvcjsgLy8gcnVuIGJnIGNvbG9yIHNldHRlclxuXG4gICAgLyoqXG4gICAgICogVGhpcyB0ZW1wb3JhcnkgZGlzcGxheSBvYmplY3QgdXNlZCBhcyB0aGUgcGFyZW50IG9mIHRoZSBjdXJyZW50bHkgYmVpbmcgcmVuZGVyZWQgaXRlbVxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5EaXNwbGF5T2JqZWN0fVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fdGVtcERpc3BsYXlPYmplY3RQYXJlbnQgPSB7d29ybGRUcmFuc2Zvcm06bmV3IG1hdGguTWF0cml4KCksIHdvcmxkQWxwaGE6MSwgY2hpbGRyZW46W119O1xuXG4gICAgLyoqXG4gICAgICogVGhlIGxhc3Qgcm9vdCBvYmplY3QgdGhhdCB0aGUgcmVuZGVyZXIgdHJpZWQgdG8gcmVuZGVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5EaXNwbGF5T2JqZWN0fVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fbGFzdE9iamVjdFJlbmRlcmVkID0gdGhpcy5fdGVtcERpc3BsYXlPYmplY3RQYXJlbnQ7XG59XG5cbi8vIGNvbnN0cnVjdG9yXG5TeXN0ZW1SZW5kZXJlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKEV2ZW50RW1pdHRlci5wcm90b3R5cGUpO1xuU3lzdGVtUmVuZGVyZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gU3lzdGVtUmVuZGVyZXI7XG5tb2R1bGUuZXhwb3J0cyA9IFN5c3RlbVJlbmRlcmVyO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhTeXN0ZW1SZW5kZXJlci5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBUaGUgYmFja2dyb3VuZCBjb2xvciB0byBmaWxsIGlmIG5vdCB0cmFuc3BhcmVudFxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLlN5c3RlbVJlbmRlcmVyI1xuICAgICAqL1xuICAgIGJhY2tncm91bmRDb2xvcjpcbiAgICB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2JhY2tncm91bmRDb2xvcjtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLl9iYWNrZ3JvdW5kQ29sb3IgPSB2YWw7XG4gICAgICAgICAgICB0aGlzLl9iYWNrZ3JvdW5kQ29sb3JTdHJpbmcgPSB1dGlscy5oZXgyc3RyaW5nKHZhbCk7XG4gICAgICAgICAgICB1dGlscy5oZXgycmdiKHZhbCwgdGhpcy5fYmFja2dyb3VuZENvbG9yUmdiYSk7XG4gICAgICAgIH1cbiAgICB9XG59KTtcblxuLyoqXG4gKiBSZXNpemVzIHRoZSBjYW52YXMgdmlldyB0byB0aGUgc3BlY2lmaWVkIHdpZHRoIGFuZCBoZWlnaHRcbiAqXG4gKiBAcGFyYW0gd2lkdGgge251bWJlcn0gdGhlIG5ldyB3aWR0aCBvZiB0aGUgY2FudmFzIHZpZXdcbiAqIEBwYXJhbSBoZWlnaHQge251bWJlcn0gdGhlIG5ldyBoZWlnaHQgb2YgdGhlIGNhbnZhcyB2aWV3XG4gKi9cblN5c3RlbVJlbmRlcmVyLnByb3RvdHlwZS5yZXNpemUgPSBmdW5jdGlvbiAod2lkdGgsIGhlaWdodCkge1xuICAgIHRoaXMud2lkdGggPSB3aWR0aCAqIHRoaXMucmVzb2x1dGlvbjtcbiAgICB0aGlzLmhlaWdodCA9IGhlaWdodCAqIHRoaXMucmVzb2x1dGlvbjtcblxuICAgIHRoaXMudmlldy53aWR0aCA9IHRoaXMud2lkdGg7XG4gICAgdGhpcy52aWV3LmhlaWdodCA9IHRoaXMuaGVpZ2h0O1xuXG4gICAgaWYgKHRoaXMuYXV0b1Jlc2l6ZSlcbiAgICB7XG4gICAgICAgIHRoaXMudmlldy5zdHlsZS53aWR0aCA9IHRoaXMud2lkdGggLyB0aGlzLnJlc29sdXRpb24gKyAncHgnO1xuICAgICAgICB0aGlzLnZpZXcuc3R5bGUuaGVpZ2h0ID0gdGhpcy5oZWlnaHQgLyB0aGlzLnJlc29sdXRpb24gKyAncHgnO1xuICAgIH1cbn07XG5cbi8qKlxuICogUmVtb3ZlcyBldmVyeXRoaW5nIGZyb20gdGhlIHJlbmRlcmVyIGFuZCBvcHRpb25hbGx5IHJlbW92ZXMgdGhlIENhbnZhcyBET00gZWxlbWVudC5cbiAqXG4gKiBAcGFyYW0gW3JlbW92ZVZpZXc9ZmFsc2VdIHtib29sZWFufSBSZW1vdmVzIHRoZSBDYW52YXMgZWxlbWVudCBmcm9tIHRoZSBET00uXG4gKi9cblN5c3RlbVJlbmRlcmVyLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKHJlbW92ZVZpZXcpIHtcbiAgICBpZiAocmVtb3ZlVmlldyAmJiB0aGlzLnZpZXcucGFyZW50Tm9kZSlcbiAgICB7XG4gICAgICAgIHRoaXMudmlldy5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHRoaXMudmlldyk7XG4gICAgfVxuXG4gICAgdGhpcy50eXBlID0gQ09OU1QuUkVOREVSRVJfVFlQRS5VTktOT1dOO1xuXG4gICAgdGhpcy53aWR0aCA9IDA7XG4gICAgdGhpcy5oZWlnaHQgPSAwO1xuXG4gICAgdGhpcy52aWV3ID0gbnVsbDtcblxuICAgIHRoaXMucmVzb2x1dGlvbiA9IDA7XG5cbiAgICB0aGlzLnRyYW5zcGFyZW50ID0gZmFsc2U7XG5cbiAgICB0aGlzLmF1dG9SZXNpemUgPSBmYWxzZTtcblxuICAgIHRoaXMuYmxlbmRNb2RlcyA9IG51bGw7XG5cbiAgICB0aGlzLnByZXNlcnZlRHJhd2luZ0J1ZmZlciA9IGZhbHNlO1xuICAgIHRoaXMuY2xlYXJCZWZvcmVSZW5kZXIgPSBmYWxzZTtcblxuICAgIHRoaXMucm91bmRQaXhlbHMgPSBmYWxzZTtcblxuICAgIHRoaXMuX2JhY2tncm91bmRDb2xvciA9IDA7XG4gICAgdGhpcy5fYmFja2dyb3VuZENvbG9yUmdiYSA9IG51bGw7XG4gICAgdGhpcy5fYmFja2dyb3VuZENvbG9yU3RyaW5nID0gbnVsbDtcbn07XG4iLCJ2YXIgU3lzdGVtUmVuZGVyZXIgPSByZXF1aXJlKCcuLi9TeXN0ZW1SZW5kZXJlcicpLFxuICAgIENhbnZhc01hc2tNYW5hZ2VyID0gcmVxdWlyZSgnLi91dGlscy9DYW52YXNNYXNrTWFuYWdlcicpLFxuICAgIHV0aWxzID0gcmVxdWlyZSgnLi4vLi4vdXRpbHMnKSxcbiAgICBtYXRoID0gcmVxdWlyZSgnLi4vLi4vbWF0aCcpLFxuICAgIENPTlNUID0gcmVxdWlyZSgnLi4vLi4vY29uc3QnKTtcblxuLyoqXG4gKiBUaGUgQ2FudmFzUmVuZGVyZXIgZHJhd3MgdGhlIHNjZW5lIGFuZCBhbGwgaXRzIGNvbnRlbnQgb250byBhIDJkIGNhbnZhcy4gVGhpcyByZW5kZXJlciBzaG91bGQgYmUgdXNlZCBmb3IgYnJvd3NlcnMgdGhhdCBkbyBub3Qgc3VwcG9ydCB3ZWJHTC5cbiAqIERvbid0IGZvcmdldCB0byBhZGQgdGhlIENhbnZhc1JlbmRlcmVyLnZpZXcgdG8geW91ciBET00gb3IgeW91IHdpbGwgbm90IHNlZSBhbnl0aGluZyA6KVxuICpcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqIEBleHRlbmRzIFBJWEkuU3lzdGVtUmVuZGVyZXJcbiAqIEBwYXJhbSBbd2lkdGg9ODAwXSB7bnVtYmVyfSB0aGUgd2lkdGggb2YgdGhlIGNhbnZhcyB2aWV3XG4gKiBAcGFyYW0gW2hlaWdodD02MDBdIHtudW1iZXJ9IHRoZSBoZWlnaHQgb2YgdGhlIGNhbnZhcyB2aWV3XG4gKiBAcGFyYW0gW29wdGlvbnNdIHtvYmplY3R9IFRoZSBvcHRpb25hbCByZW5kZXJlciBwYXJhbWV0ZXJzXG4gKiBAcGFyYW0gW29wdGlvbnMudmlld10ge0hUTUxDYW52YXNFbGVtZW50fSB0aGUgY2FudmFzIHRvIHVzZSBhcyBhIHZpZXcsIG9wdGlvbmFsXG4gKiBAcGFyYW0gW29wdGlvbnMudHJhbnNwYXJlbnQ9ZmFsc2VdIHtib29sZWFufSBJZiB0aGUgcmVuZGVyIHZpZXcgaXMgdHJhbnNwYXJlbnQsIGRlZmF1bHQgZmFsc2VcbiAqIEBwYXJhbSBbb3B0aW9ucy5hdXRvUmVzaXplPWZhbHNlXSB7Ym9vbGVhbn0gSWYgdGhlIHJlbmRlciB2aWV3IGlzIGF1dG9tYXRpY2FsbHkgcmVzaXplZCwgZGVmYXVsdCBmYWxzZVxuICogQHBhcmFtIFtvcHRpb25zLmFudGlhbGlhcz1mYWxzZV0ge2Jvb2xlYW59IHNldHMgYW50aWFsaWFzIChvbmx5IGFwcGxpY2FibGUgaW4gY2hyb21lIGF0IHRoZSBtb21lbnQpXG4gKiBAcGFyYW0gW29wdGlvbnMucmVzb2x1dGlvbj0xXSB7bnVtYmVyfSB0aGUgcmVzb2x1dGlvbiBvZiB0aGUgcmVuZGVyZXIgcmV0aW5hIHdvdWxkIGJlIDJcbiAqIEBwYXJhbSBbb3B0aW9ucy5jbGVhckJlZm9yZVJlbmRlcj10cnVlXSB7Ym9vbGVhbn0gVGhpcyBzZXRzIGlmIHRoZSBDYW52YXNSZW5kZXJlciB3aWxsIGNsZWFyIHRoZSBjYW52YXMgb3JcbiAqICAgICAgbm90IGJlZm9yZSB0aGUgbmV3IHJlbmRlciBwYXNzLlxuICogQHBhcmFtIFtvcHRpb25zLnJvdW5kUGl4ZWxzPWZhbHNlXSB7Ym9vbGVhbn0gSWYgdHJ1ZSBQaXhpIHdpbGwgTWF0aC5mbG9vcigpIHgveSB2YWx1ZXMgd2hlbiByZW5kZXJpbmcsIHN0b3BwaW5nIHBpeGVsIGludGVycG9sYXRpb24uXG4gKi9cbmZ1bmN0aW9uIENhbnZhc1JlbmRlcmVyKHdpZHRoLCBoZWlnaHQsIG9wdGlvbnMpXG57XG4gICAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG5cbiAgICBTeXN0ZW1SZW5kZXJlci5jYWxsKHRoaXMsICdDYW52YXMnLCB3aWR0aCwgaGVpZ2h0LCBvcHRpb25zKTtcblxuICAgIHRoaXMudHlwZSA9IENPTlNULlJFTkRFUkVSX1RZUEUuQ0FOVkFTO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGNhbnZhcyAyZCBjb250ZXh0IHRoYXQgZXZlcnl0aGluZyBpcyBkcmF3biB3aXRoLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEfVxuICAgICAqL1xuICAgIHRoaXMuY29udGV4dCA9IHRoaXMudmlldy5nZXRDb250ZXh0KCcyZCcsIHsgYWxwaGE6IHRoaXMudHJhbnNwYXJlbnQgfSk7XG5cbiAgICAvKipcbiAgICAgKiBCb29sZWFuIGZsYWcgY29udHJvbGxpbmcgY2FudmFzIHJlZnJlc2guXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqL1xuICAgIHRoaXMucmVmcmVzaCA9IHRydWU7XG5cbiAgICAvKipcbiAgICAgKiBJbnN0YW5jZSBvZiBhIENhbnZhc01hc2tNYW5hZ2VyLCBoYW5kbGVzIG1hc2tpbmcgd2hlbiB1c2luZyB0aGUgY2FudmFzIHJlbmRlcmVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5DYW52YXNNYXNrTWFuYWdlcn1cbiAgICAgKi9cbiAgICB0aGlzLm1hc2tNYW5hZ2VyID0gbmV3IENhbnZhc01hc2tNYW5hZ2VyKCk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgY2FudmFzIHByb3BlcnR5IHVzZWQgdG8gc2V0IHRoZSBjYW52YXMgc21vb3RoaW5nIHByb3BlcnR5LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7c3RyaW5nfVxuICAgICAqL1xuICAgIHRoaXMuc21vb3RoUHJvcGVydHkgPSAnaW1hZ2VTbW9vdGhpbmdFbmFibGVkJztcblxuICAgIGlmICghdGhpcy5jb250ZXh0LmltYWdlU21vb3RoaW5nRW5hYmxlZClcbiAgICB7XG4gICAgICAgIGlmICh0aGlzLmNvbnRleHQud2Via2l0SW1hZ2VTbW9vdGhpbmdFbmFibGVkKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnNtb290aFByb3BlcnR5ID0gJ3dlYmtpdEltYWdlU21vb3RoaW5nRW5hYmxlZCc7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodGhpcy5jb250ZXh0Lm1vekltYWdlU21vb3RoaW5nRW5hYmxlZClcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5zbW9vdGhQcm9wZXJ0eSA9ICdtb3pJbWFnZVNtb290aGluZ0VuYWJsZWQnO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHRoaXMuY29udGV4dC5vSW1hZ2VTbW9vdGhpbmdFbmFibGVkKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnNtb290aFByb3BlcnR5ID0gJ29JbWFnZVNtb290aGluZ0VuYWJsZWQnO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHRoaXMuY29udGV4dC5tc0ltYWdlU21vb3RoaW5nRW5hYmxlZClcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5zbW9vdGhQcm9wZXJ0eSA9ICdtc0ltYWdlU21vb3RoaW5nRW5hYmxlZCc7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLmluaXRQbHVnaW5zKCk7XG5cbiAgICB0aGlzLl9tYXBCbGVuZE1vZGVzKCk7XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIHRlbXBvcmFyeSBkaXNwbGF5IG9iamVjdCB1c2VkIGFzIHRoZSBwYXJlbnQgb2YgdGhlIGN1cnJlbnRseSBiZWluZyByZW5kZXJlZCBpdGVtXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLkRpc3BsYXlPYmplY3R9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl90ZW1wRGlzcGxheU9iamVjdFBhcmVudCA9IHtcbiAgICAgICAgd29ybGRUcmFuc2Zvcm06IG5ldyBtYXRoLk1hdHJpeCgpLFxuICAgICAgICB3b3JsZEFscGhhOiAxXG4gICAgfTtcblxuXG4gICAgdGhpcy5yZXNpemUod2lkdGgsIGhlaWdodCk7XG59XG5cbi8vIGNvbnN0cnVjdG9yXG5DYW52YXNSZW5kZXJlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFN5c3RlbVJlbmRlcmVyLnByb3RvdHlwZSk7XG5DYW52YXNSZW5kZXJlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBDYW52YXNSZW5kZXJlcjtcbm1vZHVsZS5leHBvcnRzID0gQ2FudmFzUmVuZGVyZXI7XG51dGlscy5wbHVnaW5UYXJnZXQubWl4aW4oQ2FudmFzUmVuZGVyZXIpO1xuXG4vKipcbiAqIFJlbmRlcnMgdGhlIG9iamVjdCB0byB0aGlzIGNhbnZhcyB2aWV3XG4gKlxuICogQHBhcmFtIG9iamVjdCB7UElYSS5EaXNwbGF5T2JqZWN0fSB0aGUgb2JqZWN0IHRvIGJlIHJlbmRlcmVkXG4gKi9cbkNhbnZhc1JlbmRlcmVyLnByb3RvdHlwZS5yZW5kZXIgPSBmdW5jdGlvbiAob2JqZWN0KVxue1xuICAgIHRoaXMuZW1pdCgncHJlcmVuZGVyJyk7XG5cbiAgICB2YXIgY2FjaGVQYXJlbnQgPSBvYmplY3QucGFyZW50O1xuXG4gICAgdGhpcy5fbGFzdE9iamVjdFJlbmRlcmVkID0gb2JqZWN0O1xuXG4gICAgb2JqZWN0LnBhcmVudCA9IHRoaXMuX3RlbXBEaXNwbGF5T2JqZWN0UGFyZW50O1xuXG4gICAgLy8gdXBkYXRlIHRoZSBzY2VuZSBncmFwaFxuICAgIG9iamVjdC51cGRhdGVUcmFuc2Zvcm0oKTtcblxuICAgIG9iamVjdC5wYXJlbnQgPSBjYWNoZVBhcmVudDtcblxuICAgIHRoaXMuY29udGV4dC5zZXRUcmFuc2Zvcm0oMSwgMCwgMCwgMSwgMCwgMCk7XG5cbiAgICB0aGlzLmNvbnRleHQuZ2xvYmFsQWxwaGEgPSAxO1xuXG4gICAgdGhpcy5jb250ZXh0Lmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbiA9IHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5OT1JNQUxdO1xuXG4gICAgaWYgKG5hdmlnYXRvci5pc0NvY29vbkpTICYmIHRoaXMudmlldy5zY3JlZW5jYW52YXMpXG4gICAge1xuICAgICAgICB0aGlzLmNvbnRleHQuZmlsbFN0eWxlID0gJ2JsYWNrJztcbiAgICAgICAgdGhpcy5jb250ZXh0LmNsZWFyKCk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuY2xlYXJCZWZvcmVSZW5kZXIpXG4gICAge1xuICAgICAgICBpZiAodGhpcy50cmFuc3BhcmVudClcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5jb250ZXh0LmNsZWFyUmVjdCgwLCAwLCB0aGlzLndpZHRoLCB0aGlzLmhlaWdodCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmNvbnRleHQuZmlsbFN0eWxlID0gdGhpcy5fYmFja2dyb3VuZENvbG9yU3RyaW5nO1xuICAgICAgICAgICAgdGhpcy5jb250ZXh0LmZpbGxSZWN0KDAsIDAsIHRoaXMud2lkdGggLCB0aGlzLmhlaWdodCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLnJlbmRlckRpc3BsYXlPYmplY3Qob2JqZWN0LCB0aGlzLmNvbnRleHQpO1xuXG4gICAgdGhpcy5lbWl0KCdwb3N0cmVuZGVyJyk7XG59O1xuXG4vKipcbiAqIFJlbW92ZXMgZXZlcnl0aGluZyBmcm9tIHRoZSByZW5kZXJlciBhbmQgb3B0aW9uYWxseSByZW1vdmVzIHRoZSBDYW52YXMgRE9NIGVsZW1lbnQuXG4gKlxuICogQHBhcmFtIFtyZW1vdmVWaWV3PWZhbHNlXSB7Ym9vbGVhbn0gUmVtb3ZlcyB0aGUgQ2FudmFzIGVsZW1lbnQgZnJvbSB0aGUgRE9NLlxuICovXG5DYW52YXNSZW5kZXJlci5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uIChyZW1vdmVWaWV3KVxue1xuICAgIHRoaXMuZGVzdHJveVBsdWdpbnMoKTtcblxuICAgIC8vIGNhbGwgdGhlIGJhc2UgZGVzdHJveVxuICAgIFN5c3RlbVJlbmRlcmVyLnByb3RvdHlwZS5kZXN0cm95LmNhbGwodGhpcywgcmVtb3ZlVmlldyk7XG5cbiAgICB0aGlzLmNvbnRleHQgPSBudWxsO1xuXG4gICAgdGhpcy5yZWZyZXNoID0gdHJ1ZTtcblxuICAgIHRoaXMubWFza01hbmFnZXIuZGVzdHJveSgpO1xuICAgIHRoaXMubWFza01hbmFnZXIgPSBudWxsO1xuXG4gICAgdGhpcy5zbW9vdGhQcm9wZXJ0eSA9IG51bGw7XG59O1xuXG4vKipcbiAqIFJlbmRlcnMgYSBkaXNwbGF5IG9iamVjdFxuICpcbiAqIEBwYXJhbSBkaXNwbGF5T2JqZWN0IHtQSVhJLkRpc3BsYXlPYmplY3R9IFRoZSBkaXNwbGF5T2JqZWN0IHRvIHJlbmRlclxuICogQHByaXZhdGVcbiAqL1xuQ2FudmFzUmVuZGVyZXIucHJvdG90eXBlLnJlbmRlckRpc3BsYXlPYmplY3QgPSBmdW5jdGlvbiAoZGlzcGxheU9iamVjdCwgY29udGV4dClcbntcbiAgICB2YXIgdGVtcENvbnRleHQgPSB0aGlzLmNvbnRleHQ7XG5cbiAgICB0aGlzLmNvbnRleHQgPSBjb250ZXh0O1xuICAgIGRpc3BsYXlPYmplY3QucmVuZGVyQ2FudmFzKHRoaXMpO1xuICAgIHRoaXMuY29udGV4dCA9IHRlbXBDb250ZXh0O1xufTtcblxuLyoqXG4gKiBAZXh0ZW5kcyBQSVhJLlN5c3RlbVJlbmRlcmVyI3Jlc2l6ZVxuICpcbiAqIEBwYXJhbSB7bnVtYmVyfSB3XG4gKiBAcGFyYW0ge251bWJlcn0gaFxuICovXG5DYW52YXNSZW5kZXJlci5wcm90b3R5cGUucmVzaXplID0gZnVuY3Rpb24gKHcsIGgpXG57XG4gICAgU3lzdGVtUmVuZGVyZXIucHJvdG90eXBlLnJlc2l6ZS5jYWxsKHRoaXMsIHcsIGgpO1xuXG4gICAgLy9yZXNldCB0aGUgc2NhbGUgbW9kZS4uIG9kZGx5IHRoaXMgc2VlbXMgdG8gYmUgcmVzZXQgd2hlbiB0aGUgY2FudmFzIGlzIHJlc2l6ZWQuXG4gICAgLy9zdXJlbHkgYSBicm93c2VyIGJ1Zz8/IExldCBwaXhpIGZpeCB0aGF0IGZvciB5b3UuLlxuICAgIGlmKHRoaXMuc21vb3RoUHJvcGVydHkpXG4gICAge1xuICAgICAgICB0aGlzLmNvbnRleHRbdGhpcy5zbW9vdGhQcm9wZXJ0eV0gPSAoQ09OU1QuU0NBTEVfTU9ERVMuREVGQVVMVCA9PT0gQ09OU1QuU0NBTEVfTU9ERVMuTElORUFSKTtcbiAgICB9XG5cbn07XG5cbi8qKlxuICogTWFwcyBQaXhpIGJsZW5kIG1vZGVzIHRvIGNhbnZhcyBibGVuZCBtb2Rlcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5DYW52YXNSZW5kZXJlci5wcm90b3R5cGUuX21hcEJsZW5kTW9kZXMgPSBmdW5jdGlvbiAoKVxue1xuICAgIGlmICghdGhpcy5ibGVuZE1vZGVzKVxuICAgIHtcbiAgICAgICAgdGhpcy5ibGVuZE1vZGVzID0ge307XG5cbiAgICAgICAgaWYgKHV0aWxzLmNhblVzZU5ld0NhbnZhc0JsZW5kTW9kZXMoKSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5ibGVuZE1vZGVzW0NPTlNULkJMRU5EX01PREVTLk5PUk1BTF0gICAgICAgID0gJ3NvdXJjZS1vdmVyJztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5BRERdICAgICAgICAgICA9ICdsaWdodGVyJzsgLy9JUyBUSElTIE9LPz8/XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuTVVMVElQTFldICAgICAgPSAnbXVsdGlwbHknO1xuICAgICAgICAgICAgdGhpcy5ibGVuZE1vZGVzW0NPTlNULkJMRU5EX01PREVTLlNDUkVFTl0gICAgICAgID0gJ3NjcmVlbic7XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuT1ZFUkxBWV0gICAgICAgPSAnb3ZlcmxheSc7XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuREFSS0VOXSAgICAgICAgPSAnZGFya2VuJztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5MSUdIVEVOXSAgICAgICA9ICdsaWdodGVuJztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5DT0xPUl9ET0RHRV0gICA9ICdjb2xvci1kb2RnZSc7XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuQ09MT1JfQlVSTl0gICAgPSAnY29sb3ItYnVybic7XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuSEFSRF9MSUdIVF0gICAgPSAnaGFyZC1saWdodCc7XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuU09GVF9MSUdIVF0gICAgPSAnc29mdC1saWdodCc7XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuRElGRkVSRU5DRV0gICAgPSAnZGlmZmVyZW5jZSc7XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuRVhDTFVTSU9OXSAgICAgPSAnZXhjbHVzaW9uJztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5IVUVdICAgICAgICAgICA9ICdodWUnO1xuICAgICAgICAgICAgdGhpcy5ibGVuZE1vZGVzW0NPTlNULkJMRU5EX01PREVTLlNBVFVSQVRJT05dICAgID0gJ3NhdHVyYXRlJztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5DT0xPUl0gICAgICAgICA9ICdjb2xvcic7XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuTFVNSU5PU0lUWV0gICAgPSAnbHVtaW5vc2l0eSc7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgICAvLyB0aGlzIG1lYW5zIHRoYXQgdGhlIGJyb3dzZXIgZG9lcyBub3Qgc3VwcG9ydCB0aGUgY29vbCBuZXcgYmxlbmQgbW9kZXMgaW4gY2FudmFzICdjb3VnaCcgaWUgJ2NvdWdoJ1xuICAgICAgICAgICAgdGhpcy5ibGVuZE1vZGVzW0NPTlNULkJMRU5EX01PREVTLk5PUk1BTF0gICAgICAgID0gJ3NvdXJjZS1vdmVyJztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5BRERdICAgICAgICAgICA9ICdsaWdodGVyJzsgLy9JUyBUSElTIE9LPz8/XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuTVVMVElQTFldICAgICAgPSAnc291cmNlLW92ZXInO1xuICAgICAgICAgICAgdGhpcy5ibGVuZE1vZGVzW0NPTlNULkJMRU5EX01PREVTLlNDUkVFTl0gICAgICAgID0gJ3NvdXJjZS1vdmVyJztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5PVkVSTEFZXSAgICAgICA9ICdzb3VyY2Utb3Zlcic7XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuREFSS0VOXSAgICAgICAgPSAnc291cmNlLW92ZXInO1xuICAgICAgICAgICAgdGhpcy5ibGVuZE1vZGVzW0NPTlNULkJMRU5EX01PREVTLkxJR0hURU5dICAgICAgID0gJ3NvdXJjZS1vdmVyJztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5DT0xPUl9ET0RHRV0gICA9ICdzb3VyY2Utb3Zlcic7XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuQ09MT1JfQlVSTl0gICAgPSAnc291cmNlLW92ZXInO1xuICAgICAgICAgICAgdGhpcy5ibGVuZE1vZGVzW0NPTlNULkJMRU5EX01PREVTLkhBUkRfTElHSFRdICAgID0gJ3NvdXJjZS1vdmVyJztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5TT0ZUX0xJR0hUXSAgICA9ICdzb3VyY2Utb3Zlcic7XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuRElGRkVSRU5DRV0gICAgPSAnc291cmNlLW92ZXInO1xuICAgICAgICAgICAgdGhpcy5ibGVuZE1vZGVzW0NPTlNULkJMRU5EX01PREVTLkVYQ0xVU0lPTl0gICAgID0gJ3NvdXJjZS1vdmVyJztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5IVUVdICAgICAgICAgICA9ICdzb3VyY2Utb3Zlcic7XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuU0FUVVJBVElPTl0gICAgPSAnc291cmNlLW92ZXInO1xuICAgICAgICAgICAgdGhpcy5ibGVuZE1vZGVzW0NPTlNULkJMRU5EX01PREVTLkNPTE9SXSAgICAgICAgID0gJ3NvdXJjZS1vdmVyJztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5MVU1JTk9TSVRZXSAgICA9ICdzb3VyY2Utb3Zlcic7XG4gICAgICAgIH1cbiAgICB9XG59O1xuIiwiLyoqXG4gKiBDcmVhdGVzIGEgQ2FudmFzIGVsZW1lbnQgb2YgdGhlIGdpdmVuIHNpemUuXG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIHdpZHRoIHtudW1iZXJ9IHRoZSB3aWR0aCBmb3IgdGhlIG5ld2x5IGNyZWF0ZWQgY2FudmFzXG4gKiBAcGFyYW0gaGVpZ2h0IHtudW1iZXJ9IHRoZSBoZWlnaHQgZm9yIHRoZSBuZXdseSBjcmVhdGVkIGNhbnZhc1xuICovXG5mdW5jdGlvbiBDYW52YXNCdWZmZXIod2lkdGgsIGhlaWdodClcbntcbiAgICAvKipcbiAgICAgKiBUaGUgQ2FudmFzIG9iamVjdCB0aGF0IGJlbG9uZ3MgdG8gdGhpcyBDYW52YXNCdWZmZXIuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtIVE1MQ2FudmFzRWxlbWVudH1cbiAgICAgKi9cbiAgICB0aGlzLmNhbnZhcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NhbnZhcycpO1xuXG4gICAgLyoqXG4gICAgICogQSBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQgb2JqZWN0IHJlcHJlc2VudGluZyBhIHR3by1kaW1lbnNpb25hbCByZW5kZXJpbmcgY29udGV4dC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRH1cbiAgICAgKi9cbiAgICB0aGlzLmNvbnRleHQgPSB0aGlzLmNhbnZhcy5nZXRDb250ZXh0KCcyZCcpO1xuXG4gICAgdGhpcy5jYW52YXMud2lkdGggPSB3aWR0aDtcbiAgICB0aGlzLmNhbnZhcy5oZWlnaHQgPSBoZWlnaHQ7XG59XG5cbkNhbnZhc0J1ZmZlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBDYW52YXNCdWZmZXI7XG5tb2R1bGUuZXhwb3J0cyA9IENhbnZhc0J1ZmZlcjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoQ2FudmFzQnVmZmVyLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFRoZSB3aWR0aCBvZiB0aGUgY2FudmFzIGJ1ZmZlciBpbiBwaXhlbHMuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuQ2FudmFzQnVmZmVyI1xuICAgICAqL1xuICAgIHdpZHRoOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY2FudmFzLndpZHRoO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWwpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuY2FudmFzLndpZHRoID0gdmFsO1xuICAgICAgICB9XG4gICAgfSxcbiAgICAvKipcbiAgICAgKiBUaGUgaGVpZ2h0IG9mIHRoZSBjYW52YXMgYnVmZmVyIGluIHBpeGVscy5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5DYW52YXNCdWZmZXIjXG4gICAgICovXG4gICAgaGVpZ2h0OiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY2FudmFzLmhlaWdodDtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmNhbnZhcy5oZWlnaHQgPSB2YWw7XG4gICAgICAgIH1cbiAgICB9XG59KTtcblxuLyoqXG4gKiBDbGVhcnMgdGhlIGNhbnZhcyB0aGF0IHdhcyBjcmVhdGVkIGJ5IHRoZSBDYW52YXNCdWZmZXIgY2xhc3MuXG4gKlxuICogQHByaXZhdGVcbiAqL1xuQ2FudmFzQnVmZmVyLnByb3RvdHlwZS5jbGVhciA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy5jb250ZXh0LnNldFRyYW5zZm9ybSgxLCAwLCAwLCAxLCAwLCAwKTtcbiAgICB0aGlzLmNvbnRleHQuY2xlYXJSZWN0KDAsMCwgdGhpcy5jYW52YXMud2lkdGgsIHRoaXMuY2FudmFzLmhlaWdodCk7XG59O1xuXG4vKipcbiAqIFJlc2l6ZXMgdGhlIGNhbnZhcyB0byB0aGUgc3BlY2lmaWVkIHdpZHRoIGFuZCBoZWlnaHQuXG4gKlxuICogQHBhcmFtIHdpZHRoIHtudW1iZXJ9IHRoZSBuZXcgd2lkdGggb2YgdGhlIGNhbnZhc1xuICogQHBhcmFtIGhlaWdodCB7bnVtYmVyfSB0aGUgbmV3IGhlaWdodCBvZiB0aGUgY2FudmFzXG4gKi9cbkNhbnZhc0J1ZmZlci5wcm90b3R5cGUucmVzaXplID0gZnVuY3Rpb24gKHdpZHRoLCBoZWlnaHQpXG57XG4gICAgdGhpcy5jYW52YXMud2lkdGggPSB3aWR0aDtcbiAgICB0aGlzLmNhbnZhcy5oZWlnaHQgPSBoZWlnaHQ7XG59O1xuXG4vKipcbiAqIERlc3Ryb3lzIHRoaXMgY2FudmFzLlxuICpcbiAqL1xuQ2FudmFzQnVmZmVyLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLmNvbnRleHQgPSBudWxsO1xuICAgIHRoaXMuY2FudmFzID0gbnVsbDtcbn07XG4iLCJ2YXIgQ09OU1QgPSByZXF1aXJlKCcuLi8uLi8uLi9jb25zdCcpO1xuXG4vKipcbiAqIEEgc2V0IG9mIGZ1bmN0aW9ucyB1c2VkIGJ5IHRoZSBjYW52YXMgcmVuZGVyZXIgdG8gZHJhdyB0aGUgcHJpbWl0aXZlIGdyYXBoaWNzIGRhdGEuXG4gKiBAc3RhdGljXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKi9cbnZhciBDYW52YXNHcmFwaGljcyA9IHt9O1xubW9kdWxlLmV4cG9ydHMgPSBDYW52YXNHcmFwaGljcztcblxuLypcbiAqIFJlbmRlcnMgYSBHcmFwaGljcyBvYmplY3QgdG8gYSBjYW52YXMuXG4gKlxuICogQHBhcmFtIGdyYXBoaWNzIHtQSVhJLkdyYXBoaWNzfSB0aGUgYWN0dWFsIGdyYXBoaWNzIG9iamVjdCB0byByZW5kZXJcbiAqIEBwYXJhbSBjb250ZXh0IHtDYW52YXNSZW5kZXJpbmdDb250ZXh0MkR9IHRoZSAyZCBkcmF3aW5nIG1ldGhvZCBvZiB0aGUgY2FudmFzXG4gKi9cbkNhbnZhc0dyYXBoaWNzLnJlbmRlckdyYXBoaWNzID0gZnVuY3Rpb24gKGdyYXBoaWNzLCBjb250ZXh0KVxue1xuICAgIHZhciB3b3JsZEFscGhhID0gZ3JhcGhpY3Mud29ybGRBbHBoYTtcblxuICAgIGlmIChncmFwaGljcy5kaXJ0eSlcbiAgICB7XG4gICAgICAgIHRoaXMudXBkYXRlR3JhcGhpY3NUaW50KGdyYXBoaWNzKTtcbiAgICAgICAgZ3JhcGhpY3MuZGlydHkgPSBmYWxzZTtcbiAgICB9XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGdyYXBoaWNzLmdyYXBoaWNzRGF0YS5sZW5ndGg7IGkrKylcbiAgICB7XG4gICAgICAgIHZhciBkYXRhID0gZ3JhcGhpY3MuZ3JhcGhpY3NEYXRhW2ldO1xuICAgICAgICB2YXIgc2hhcGUgPSBkYXRhLnNoYXBlO1xuXG4gICAgICAgIHZhciBmaWxsQ29sb3IgPSBkYXRhLl9maWxsVGludDtcbiAgICAgICAgdmFyIGxpbmVDb2xvciA9IGRhdGEuX2xpbmVUaW50O1xuXG4gICAgICAgIGNvbnRleHQubGluZVdpZHRoID0gZGF0YS5saW5lV2lkdGg7XG5cbiAgICAgICAgaWYgKGRhdGEudHlwZSA9PT0gQ09OU1QuU0hBUEVTLlBPTFkpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNvbnRleHQuYmVnaW5QYXRoKCk7XG5cbiAgICAgICAgICAgIHZhciBwb2ludHMgPSBzaGFwZS5wb2ludHM7XG5cbiAgICAgICAgICAgIGNvbnRleHQubW92ZVRvKHBvaW50c1swXSwgcG9pbnRzWzFdKTtcblxuICAgICAgICAgICAgZm9yICh2YXIgaj0xOyBqIDwgcG9pbnRzLmxlbmd0aC8yOyBqKyspXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29udGV4dC5saW5lVG8ocG9pbnRzW2ogKiAyXSwgcG9pbnRzW2ogKiAyICsgMV0pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoc2hhcGUuY2xvc2VkKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGNvbnRleHQubGluZVRvKHBvaW50c1swXSwgcG9pbnRzWzFdKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gaWYgdGhlIGZpcnN0IGFuZCBsYXN0IHBvaW50IGFyZSB0aGUgc2FtZSBjbG9zZSB0aGUgcGF0aCAtIG11Y2ggbmVhdGVyIDopXG4gICAgICAgICAgICBpZiAocG9pbnRzWzBdID09PSBwb2ludHNbcG9pbnRzLmxlbmd0aC0yXSAmJiBwb2ludHNbMV0gPT09IHBvaW50c1twb2ludHMubGVuZ3RoLTFdKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGNvbnRleHQuY2xvc2VQYXRoKCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChkYXRhLmZpbGwpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29udGV4dC5nbG9iYWxBbHBoYSA9IGRhdGEuZmlsbEFscGhhICogd29ybGRBbHBoYTtcbiAgICAgICAgICAgICAgICBjb250ZXh0LmZpbGxTdHlsZSA9ICcjJyArICgnMDAwMDAnICsgKCBmaWxsQ29sb3IgfCAwKS50b1N0cmluZygxNikpLnN1YnN0cigtNik7XG4gICAgICAgICAgICAgICAgY29udGV4dC5maWxsKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZGF0YS5saW5lV2lkdGgpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29udGV4dC5nbG9iYWxBbHBoYSA9IGRhdGEubGluZUFscGhhICogd29ybGRBbHBoYTtcbiAgICAgICAgICAgICAgICBjb250ZXh0LnN0cm9rZVN0eWxlID0gJyMnICsgKCcwMDAwMCcgKyAoIGxpbmVDb2xvciB8IDApLnRvU3RyaW5nKDE2KSkuc3Vic3RyKC02KTtcbiAgICAgICAgICAgICAgICBjb250ZXh0LnN0cm9rZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGRhdGEudHlwZSA9PT0gQ09OU1QuU0hBUEVTLlJFQ1QpXG4gICAgICAgIHtcblxuICAgICAgICAgICAgaWYgKGRhdGEuZmlsbENvbG9yIHx8IGRhdGEuZmlsbENvbG9yID09PSAwKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGNvbnRleHQuZ2xvYmFsQWxwaGEgPSBkYXRhLmZpbGxBbHBoYSAqIHdvcmxkQWxwaGE7XG4gICAgICAgICAgICAgICAgY29udGV4dC5maWxsU3R5bGUgPSAnIycgKyAoJzAwMDAwJyArICggZmlsbENvbG9yIHwgMCkudG9TdHJpbmcoMTYpKS5zdWJzdHIoLTYpO1xuICAgICAgICAgICAgICAgIGNvbnRleHQuZmlsbFJlY3Qoc2hhcGUueCwgc2hhcGUueSwgc2hhcGUud2lkdGgsIHNoYXBlLmhlaWdodCk7XG5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChkYXRhLmxpbmVXaWR0aClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb250ZXh0Lmdsb2JhbEFscGhhID0gZGF0YS5saW5lQWxwaGEgKiB3b3JsZEFscGhhO1xuICAgICAgICAgICAgICAgIGNvbnRleHQuc3Ryb2tlU3R5bGUgPSAnIycgKyAoJzAwMDAwJyArICggbGluZUNvbG9yIHwgMCkudG9TdHJpbmcoMTYpKS5zdWJzdHIoLTYpO1xuICAgICAgICAgICAgICAgIGNvbnRleHQuc3Ryb2tlUmVjdChzaGFwZS54LCBzaGFwZS55LCBzaGFwZS53aWR0aCwgc2hhcGUuaGVpZ2h0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChkYXRhLnR5cGUgPT09IENPTlNULlNIQVBFUy5DSVJDKVxuICAgICAgICB7XG4gICAgICAgICAgICAvLyBUT0RPIC0gbmVlZCB0byBiZSBVbmRlZmluZWQhXG4gICAgICAgICAgICBjb250ZXh0LmJlZ2luUGF0aCgpO1xuICAgICAgICAgICAgY29udGV4dC5hcmMoc2hhcGUueCwgc2hhcGUueSwgc2hhcGUucmFkaXVzLDAsMipNYXRoLlBJKTtcbiAgICAgICAgICAgIGNvbnRleHQuY2xvc2VQYXRoKCk7XG5cbiAgICAgICAgICAgIGlmIChkYXRhLmZpbGwpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29udGV4dC5nbG9iYWxBbHBoYSA9IGRhdGEuZmlsbEFscGhhICogd29ybGRBbHBoYTtcbiAgICAgICAgICAgICAgICBjb250ZXh0LmZpbGxTdHlsZSA9ICcjJyArICgnMDAwMDAnICsgKCBmaWxsQ29sb3IgfCAwKS50b1N0cmluZygxNikpLnN1YnN0cigtNik7XG4gICAgICAgICAgICAgICAgY29udGV4dC5maWxsKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZGF0YS5saW5lV2lkdGgpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29udGV4dC5nbG9iYWxBbHBoYSA9IGRhdGEubGluZUFscGhhICogd29ybGRBbHBoYTtcbiAgICAgICAgICAgICAgICBjb250ZXh0LnN0cm9rZVN0eWxlID0gJyMnICsgKCcwMDAwMCcgKyAoIGxpbmVDb2xvciB8IDApLnRvU3RyaW5nKDE2KSkuc3Vic3RyKC02KTtcbiAgICAgICAgICAgICAgICBjb250ZXh0LnN0cm9rZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGRhdGEudHlwZSA9PT0gQ09OU1QuU0hBUEVTLkVMSVApXG4gICAgICAgIHtcbiAgICAgICAgICAgIC8vIGVsbGlwc2UgY29kZSB0YWtlbiBmcm9tOiBodHRwOi8vc3RhY2tvdmVyZmxvdy5jb20vcXVlc3Rpb25zLzIxNzI3OTgvaG93LXRvLWRyYXctYW4tb3ZhbC1pbi1odG1sNS1jYW52YXNcblxuICAgICAgICAgICAgdmFyIHcgPSBzaGFwZS53aWR0aCAqIDI7XG4gICAgICAgICAgICB2YXIgaCA9IHNoYXBlLmhlaWdodCAqIDI7XG5cbiAgICAgICAgICAgIHZhciB4ID0gc2hhcGUueCAtIHcvMjtcbiAgICAgICAgICAgIHZhciB5ID0gc2hhcGUueSAtIGgvMjtcblxuICAgICAgICAgICAgY29udGV4dC5iZWdpblBhdGgoKTtcblxuICAgICAgICAgICAgdmFyIGthcHBhID0gMC41NTIyODQ4LFxuICAgICAgICAgICAgICAgIG94ID0gKHcgLyAyKSAqIGthcHBhLCAvLyBjb250cm9sIHBvaW50IG9mZnNldCBob3Jpem9udGFsXG4gICAgICAgICAgICAgICAgb3kgPSAoaCAvIDIpICoga2FwcGEsIC8vIGNvbnRyb2wgcG9pbnQgb2Zmc2V0IHZlcnRpY2FsXG4gICAgICAgICAgICAgICAgeGUgPSB4ICsgdywgICAgICAgICAgIC8vIHgtZW5kXG4gICAgICAgICAgICAgICAgeWUgPSB5ICsgaCwgICAgICAgICAgIC8vIHktZW5kXG4gICAgICAgICAgICAgICAgeG0gPSB4ICsgdyAvIDIsICAgICAgIC8vIHgtbWlkZGxlXG4gICAgICAgICAgICAgICAgeW0gPSB5ICsgaCAvIDI7ICAgICAgIC8vIHktbWlkZGxlXG5cbiAgICAgICAgICAgIGNvbnRleHQubW92ZVRvKHgsIHltKTtcbiAgICAgICAgICAgIGNvbnRleHQuYmV6aWVyQ3VydmVUbyh4LCB5bSAtIG95LCB4bSAtIG94LCB5LCB4bSwgeSk7XG4gICAgICAgICAgICBjb250ZXh0LmJlemllckN1cnZlVG8oeG0gKyBveCwgeSwgeGUsIHltIC0gb3ksIHhlLCB5bSk7XG4gICAgICAgICAgICBjb250ZXh0LmJlemllckN1cnZlVG8oeGUsIHltICsgb3ksIHhtICsgb3gsIHllLCB4bSwgeWUpO1xuICAgICAgICAgICAgY29udGV4dC5iZXppZXJDdXJ2ZVRvKHhtIC0gb3gsIHllLCB4LCB5bSArIG95LCB4LCB5bSk7XG5cbiAgICAgICAgICAgIGNvbnRleHQuY2xvc2VQYXRoKCk7XG5cbiAgICAgICAgICAgIGlmIChkYXRhLmZpbGwpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29udGV4dC5nbG9iYWxBbHBoYSA9IGRhdGEuZmlsbEFscGhhICogd29ybGRBbHBoYTtcbiAgICAgICAgICAgICAgICBjb250ZXh0LmZpbGxTdHlsZSA9ICcjJyArICgnMDAwMDAnICsgKCBmaWxsQ29sb3IgfCAwKS50b1N0cmluZygxNikpLnN1YnN0cigtNik7XG4gICAgICAgICAgICAgICAgY29udGV4dC5maWxsKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZGF0YS5saW5lV2lkdGgpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29udGV4dC5nbG9iYWxBbHBoYSA9IGRhdGEubGluZUFscGhhICogd29ybGRBbHBoYTtcbiAgICAgICAgICAgICAgICBjb250ZXh0LnN0cm9rZVN0eWxlID0gJyMnICsgKCcwMDAwMCcgKyAoIGxpbmVDb2xvciB8IDApLnRvU3RyaW5nKDE2KSkuc3Vic3RyKC02KTtcbiAgICAgICAgICAgICAgICBjb250ZXh0LnN0cm9rZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGRhdGEudHlwZSA9PT0gQ09OU1QuU0hBUEVTLlJSRUMpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHZhciByeCA9IHNoYXBlLng7XG4gICAgICAgICAgICB2YXIgcnkgPSBzaGFwZS55O1xuICAgICAgICAgICAgdmFyIHdpZHRoID0gc2hhcGUud2lkdGg7XG4gICAgICAgICAgICB2YXIgaGVpZ2h0ID0gc2hhcGUuaGVpZ2h0O1xuICAgICAgICAgICAgdmFyIHJhZGl1cyA9IHNoYXBlLnJhZGl1cztcblxuICAgICAgICAgICAgdmFyIG1heFJhZGl1cyA9IE1hdGgubWluKHdpZHRoLCBoZWlnaHQpIC8gMiB8IDA7XG4gICAgICAgICAgICByYWRpdXMgPSByYWRpdXMgPiBtYXhSYWRpdXMgPyBtYXhSYWRpdXMgOiByYWRpdXM7XG5cbiAgICAgICAgICAgIGNvbnRleHQuYmVnaW5QYXRoKCk7XG4gICAgICAgICAgICBjb250ZXh0Lm1vdmVUbyhyeCwgcnkgKyByYWRpdXMpO1xuICAgICAgICAgICAgY29udGV4dC5saW5lVG8ocngsIHJ5ICsgaGVpZ2h0IC0gcmFkaXVzKTtcbiAgICAgICAgICAgIGNvbnRleHQucXVhZHJhdGljQ3VydmVUbyhyeCwgcnkgKyBoZWlnaHQsIHJ4ICsgcmFkaXVzLCByeSArIGhlaWdodCk7XG4gICAgICAgICAgICBjb250ZXh0LmxpbmVUbyhyeCArIHdpZHRoIC0gcmFkaXVzLCByeSArIGhlaWdodCk7XG4gICAgICAgICAgICBjb250ZXh0LnF1YWRyYXRpY0N1cnZlVG8ocnggKyB3aWR0aCwgcnkgKyBoZWlnaHQsIHJ4ICsgd2lkdGgsIHJ5ICsgaGVpZ2h0IC0gcmFkaXVzKTtcbiAgICAgICAgICAgIGNvbnRleHQubGluZVRvKHJ4ICsgd2lkdGgsIHJ5ICsgcmFkaXVzKTtcbiAgICAgICAgICAgIGNvbnRleHQucXVhZHJhdGljQ3VydmVUbyhyeCArIHdpZHRoLCByeSwgcnggKyB3aWR0aCAtIHJhZGl1cywgcnkpO1xuICAgICAgICAgICAgY29udGV4dC5saW5lVG8ocnggKyByYWRpdXMsIHJ5KTtcbiAgICAgICAgICAgIGNvbnRleHQucXVhZHJhdGljQ3VydmVUbyhyeCwgcnksIHJ4LCByeSArIHJhZGl1cyk7XG4gICAgICAgICAgICBjb250ZXh0LmNsb3NlUGF0aCgpO1xuXG4gICAgICAgICAgICBpZiAoZGF0YS5maWxsQ29sb3IgfHwgZGF0YS5maWxsQ29sb3IgPT09IDApXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29udGV4dC5nbG9iYWxBbHBoYSA9IGRhdGEuZmlsbEFscGhhICogd29ybGRBbHBoYTtcbiAgICAgICAgICAgICAgICBjb250ZXh0LmZpbGxTdHlsZSA9ICcjJyArICgnMDAwMDAnICsgKCBmaWxsQ29sb3IgfCAwKS50b1N0cmluZygxNikpLnN1YnN0cigtNik7XG4gICAgICAgICAgICAgICAgY29udGV4dC5maWxsKCk7XG5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChkYXRhLmxpbmVXaWR0aClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb250ZXh0Lmdsb2JhbEFscGhhID0gZGF0YS5saW5lQWxwaGEgKiB3b3JsZEFscGhhO1xuICAgICAgICAgICAgICAgIGNvbnRleHQuc3Ryb2tlU3R5bGUgPSAnIycgKyAoJzAwMDAwJyArICggbGluZUNvbG9yIHwgMCkudG9TdHJpbmcoMTYpKS5zdWJzdHIoLTYpO1xuICAgICAgICAgICAgICAgIGNvbnRleHQuc3Ryb2tlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG59O1xuXG4vKlxuICogUmVuZGVycyBhIGdyYXBoaWNzIG1hc2tcbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIGdyYXBoaWNzIHtQSVhJLkdyYXBoaWNzfSB0aGUgZ3JhcGhpY3Mgd2hpY2ggd2lsbCBiZSB1c2VkIGFzIGEgbWFza1xuICogQHBhcmFtIGNvbnRleHQge0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRH0gdGhlIGNvbnRleHQgMmQgbWV0aG9kIG9mIHRoZSBjYW52YXNcbiAqL1xuQ2FudmFzR3JhcGhpY3MucmVuZGVyR3JhcGhpY3NNYXNrID0gZnVuY3Rpb24gKGdyYXBoaWNzLCBjb250ZXh0KVxue1xuICAgIHZhciBsZW4gPSBncmFwaGljcy5ncmFwaGljc0RhdGEubGVuZ3RoO1xuXG4gICAgaWYgKGxlbiA9PT0gMClcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb250ZXh0LmJlZ2luUGF0aCgpO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47IGkrKylcbiAgICB7XG4gICAgICAgIHZhciBkYXRhID0gZ3JhcGhpY3MuZ3JhcGhpY3NEYXRhW2ldO1xuICAgICAgICB2YXIgc2hhcGUgPSBkYXRhLnNoYXBlO1xuXG4gICAgICAgIGlmIChkYXRhLnR5cGUgPT09IENPTlNULlNIQVBFUy5QT0xZKVxuICAgICAgICB7XG5cbiAgICAgICAgICAgIHZhciBwb2ludHMgPSBzaGFwZS5wb2ludHM7XG5cbiAgICAgICAgICAgIGNvbnRleHQubW92ZVRvKHBvaW50c1swXSwgcG9pbnRzWzFdKTtcblxuICAgICAgICAgICAgZm9yICh2YXIgaj0xOyBqIDwgcG9pbnRzLmxlbmd0aC8yOyBqKyspXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29udGV4dC5saW5lVG8ocG9pbnRzW2ogKiAyXSwgcG9pbnRzW2ogKiAyICsgMV0pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBpZiB0aGUgZmlyc3QgYW5kIGxhc3QgcG9pbnQgYXJlIHRoZSBzYW1lIGNsb3NlIHRoZSBwYXRoIC0gbXVjaCBuZWF0ZXIgOilcbiAgICAgICAgICAgIGlmIChwb2ludHNbMF0gPT09IHBvaW50c1twb2ludHMubGVuZ3RoLTJdICYmIHBvaW50c1sxXSA9PT0gcG9pbnRzW3BvaW50cy5sZW5ndGgtMV0pXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29udGV4dC5jbG9zZVBhdGgoKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGRhdGEudHlwZSA9PT0gQ09OU1QuU0hBUEVTLlJFQ1QpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNvbnRleHQucmVjdChzaGFwZS54LCBzaGFwZS55LCBzaGFwZS53aWR0aCwgc2hhcGUuaGVpZ2h0KTtcbiAgICAgICAgICAgIGNvbnRleHQuY2xvc2VQYXRoKCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoZGF0YS50eXBlID09PSBDT05TVC5TSEFQRVMuQ0lSQylcbiAgICAgICAge1xuICAgICAgICAgICAgLy8gVE9ETyAtIG5lZWQgdG8gYmUgVW5kZWZpbmVkIVxuICAgICAgICAgICAgY29udGV4dC5hcmMoc2hhcGUueCwgc2hhcGUueSwgc2hhcGUucmFkaXVzLCAwLCAyICogTWF0aC5QSSk7XG4gICAgICAgICAgICBjb250ZXh0LmNsb3NlUGF0aCgpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGRhdGEudHlwZSA9PT0gQ09OU1QuU0hBUEVTLkVMSVApXG4gICAgICAgIHtcblxuICAgICAgICAgICAgLy8gZWxsaXBzZSBjb2RlIHRha2VuIGZyb206IGh0dHA6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvMjE3Mjc5OC9ob3ctdG8tZHJhdy1hbi1vdmFsLWluLWh0bWw1LWNhbnZhc1xuXG4gICAgICAgICAgICB2YXIgdyA9IHNoYXBlLndpZHRoICogMjtcbiAgICAgICAgICAgIHZhciBoID0gc2hhcGUuaGVpZ2h0ICogMjtcblxuICAgICAgICAgICAgdmFyIHggPSBzaGFwZS54IC0gdy8yO1xuICAgICAgICAgICAgdmFyIHkgPSBzaGFwZS55IC0gaC8yO1xuXG4gICAgICAgICAgICB2YXIga2FwcGEgPSAwLjU1MjI4NDgsXG4gICAgICAgICAgICAgICAgb3ggPSAodyAvIDIpICoga2FwcGEsIC8vIGNvbnRyb2wgcG9pbnQgb2Zmc2V0IGhvcml6b250YWxcbiAgICAgICAgICAgICAgICBveSA9IChoIC8gMikgKiBrYXBwYSwgLy8gY29udHJvbCBwb2ludCBvZmZzZXQgdmVydGljYWxcbiAgICAgICAgICAgICAgICB4ZSA9IHggKyB3LCAgICAgICAgICAgLy8geC1lbmRcbiAgICAgICAgICAgICAgICB5ZSA9IHkgKyBoLCAgICAgICAgICAgLy8geS1lbmRcbiAgICAgICAgICAgICAgICB4bSA9IHggKyB3IC8gMiwgICAgICAgLy8geC1taWRkbGVcbiAgICAgICAgICAgICAgICB5bSA9IHkgKyBoIC8gMjsgICAgICAgLy8geS1taWRkbGVcblxuICAgICAgICAgICAgY29udGV4dC5tb3ZlVG8oeCwgeW0pO1xuICAgICAgICAgICAgY29udGV4dC5iZXppZXJDdXJ2ZVRvKHgsIHltIC0gb3ksIHhtIC0gb3gsIHksIHhtLCB5KTtcbiAgICAgICAgICAgIGNvbnRleHQuYmV6aWVyQ3VydmVUbyh4bSArIG94LCB5LCB4ZSwgeW0gLSBveSwgeGUsIHltKTtcbiAgICAgICAgICAgIGNvbnRleHQuYmV6aWVyQ3VydmVUbyh4ZSwgeW0gKyBveSwgeG0gKyBveCwgeWUsIHhtLCB5ZSk7XG4gICAgICAgICAgICBjb250ZXh0LmJlemllckN1cnZlVG8oeG0gLSBveCwgeWUsIHgsIHltICsgb3ksIHgsIHltKTtcbiAgICAgICAgICAgIGNvbnRleHQuY2xvc2VQYXRoKCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoZGF0YS50eXBlID09PSBDT05TVC5TSEFQRVMuUlJFQylcbiAgICAgICAge1xuXG4gICAgICAgICAgICB2YXIgcnggPSBzaGFwZS54O1xuICAgICAgICAgICAgdmFyIHJ5ID0gc2hhcGUueTtcbiAgICAgICAgICAgIHZhciB3aWR0aCA9IHNoYXBlLndpZHRoO1xuICAgICAgICAgICAgdmFyIGhlaWdodCA9IHNoYXBlLmhlaWdodDtcbiAgICAgICAgICAgIHZhciByYWRpdXMgPSBzaGFwZS5yYWRpdXM7XG5cbiAgICAgICAgICAgIHZhciBtYXhSYWRpdXMgPSBNYXRoLm1pbih3aWR0aCwgaGVpZ2h0KSAvIDIgfCAwO1xuICAgICAgICAgICAgcmFkaXVzID0gcmFkaXVzID4gbWF4UmFkaXVzID8gbWF4UmFkaXVzIDogcmFkaXVzO1xuXG4gICAgICAgICAgICBjb250ZXh0Lm1vdmVUbyhyeCwgcnkgKyByYWRpdXMpO1xuICAgICAgICAgICAgY29udGV4dC5saW5lVG8ocngsIHJ5ICsgaGVpZ2h0IC0gcmFkaXVzKTtcbiAgICAgICAgICAgIGNvbnRleHQucXVhZHJhdGljQ3VydmVUbyhyeCwgcnkgKyBoZWlnaHQsIHJ4ICsgcmFkaXVzLCByeSArIGhlaWdodCk7XG4gICAgICAgICAgICBjb250ZXh0LmxpbmVUbyhyeCArIHdpZHRoIC0gcmFkaXVzLCByeSArIGhlaWdodCk7XG4gICAgICAgICAgICBjb250ZXh0LnF1YWRyYXRpY0N1cnZlVG8ocnggKyB3aWR0aCwgcnkgKyBoZWlnaHQsIHJ4ICsgd2lkdGgsIHJ5ICsgaGVpZ2h0IC0gcmFkaXVzKTtcbiAgICAgICAgICAgIGNvbnRleHQubGluZVRvKHJ4ICsgd2lkdGgsIHJ5ICsgcmFkaXVzKTtcbiAgICAgICAgICAgIGNvbnRleHQucXVhZHJhdGljQ3VydmVUbyhyeCArIHdpZHRoLCByeSwgcnggKyB3aWR0aCAtIHJhZGl1cywgcnkpO1xuICAgICAgICAgICAgY29udGV4dC5saW5lVG8ocnggKyByYWRpdXMsIHJ5KTtcbiAgICAgICAgICAgIGNvbnRleHQucXVhZHJhdGljQ3VydmVUbyhyeCwgcnksIHJ4LCByeSArIHJhZGl1cyk7XG4gICAgICAgICAgICBjb250ZXh0LmNsb3NlUGF0aCgpO1xuICAgICAgICB9XG4gICAgfVxufTtcblxuLypcbiAqIFVwZGF0ZXMgdGhlIHRpbnQgb2YgYSBncmFwaGljcyBvYmplY3RcbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIGdyYXBoaWNzIHtQSVhJLkdyYXBoaWNzfSB0aGUgZ3JhcGhpY3MgdGhhdCB3aWxsIGhhdmUgaXRzIHRpbnQgdXBkYXRlZFxuICpcbiAqL1xuQ2FudmFzR3JhcGhpY3MudXBkYXRlR3JhcGhpY3NUaW50ID0gZnVuY3Rpb24gKGdyYXBoaWNzKVxue1xuICAgIGlmIChncmFwaGljcy50aW50ID09PSAweEZGRkZGRiAmJiBncmFwaGljcy5fcHJldlRpbnQgPT09IGdyYXBoaWNzLnRpbnQpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIGdyYXBoaWNzLl9wcmV2VGludCA9IGdyYXBoaWNzLnRpbnQ7XG5cbiAgICB2YXIgdGludFIgPSAoZ3JhcGhpY3MudGludCA+PiAxNiAmIDB4RkYpIC8gMjU1O1xuICAgIHZhciB0aW50RyA9IChncmFwaGljcy50aW50ID4+IDggJiAweEZGKSAvIDI1NTtcbiAgICB2YXIgdGludEIgPSAoZ3JhcGhpY3MudGludCAmIDB4RkYpLyAyNTU7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGdyYXBoaWNzLmdyYXBoaWNzRGF0YS5sZW5ndGg7IGkrKylcbiAgICB7XG4gICAgICAgIHZhciBkYXRhID0gZ3JhcGhpY3MuZ3JhcGhpY3NEYXRhW2ldO1xuXG4gICAgICAgIHZhciBmaWxsQ29sb3IgPSBkYXRhLmZpbGxDb2xvciB8IDA7XG4gICAgICAgIHZhciBsaW5lQ29sb3IgPSBkYXRhLmxpbmVDb2xvciB8IDA7XG5cbiAgICAgICAgLypcbiAgICAgICAgdmFyIGNvbG9yUiA9IChmaWxsQ29sb3IgPj4gMTYgJiAweEZGKSAvIDI1NTtcbiAgICAgICAgdmFyIGNvbG9yRyA9IChmaWxsQ29sb3IgPj4gOCAmIDB4RkYpIC8gMjU1O1xuICAgICAgICB2YXIgY29sb3JCID0gKGZpbGxDb2xvciAmIDB4RkYpIC8gMjU1O1xuXG4gICAgICAgIGNvbG9yUiAqPSB0aW50UjtcbiAgICAgICAgY29sb3JHICo9IHRpbnRHO1xuICAgICAgICBjb2xvckIgKj0gdGludEI7XG5cbiAgICAgICAgZmlsbENvbG9yID0gKChjb2xvclIqMjU1IDw8IDE2KSArIChjb2xvckcqMjU1IDw8IDgpICsgY29sb3JCKjI1NSk7XG5cbiAgICAgICAgY29sb3JSID0gKGxpbmVDb2xvciA+PiAxNiAmIDB4RkYpIC8gMjU1O1xuICAgICAgICBjb2xvckcgPSAobGluZUNvbG9yID4+IDggJiAweEZGKSAvIDI1NTtcbiAgICAgICAgY29sb3JCID0gKGxpbmVDb2xvciAmIDB4RkYpIC8gMjU1O1xuXG4gICAgICAgIGNvbG9yUiAqPSB0aW50UjtcbiAgICAgICAgY29sb3JHICo9IHRpbnRHO1xuICAgICAgICBjb2xvckIgKj0gdGludEI7XG5cbiAgICAgICAgbGluZUNvbG9yID0gKChjb2xvclIqMjU1IDw8IDE2KSArIChjb2xvckcqMjU1IDw8IDgpICsgY29sb3JCKjI1NSk7XG4gICAgICAgICovXG5cbiAgICAgICAgLy8gc3VwZXIgaW5saW5lIGNvcyBpbSBhbiBvcHRpbWl6YXRpb24gTkFaSSA6KVxuICAgICAgICBkYXRhLl9maWxsVGludCA9ICgoKGZpbGxDb2xvciA+PiAxNiAmIDB4RkYpIC8gMjU1ICogdGludFIqMjU1IDw8IDE2KSArICgoZmlsbENvbG9yID4+IDggJiAweEZGKSAvIDI1NSAqIHRpbnRHKjI1NSA8PCA4KSArICAoZmlsbENvbG9yICYgMHhGRikgLyAyNTUgKiB0aW50QioyNTUpO1xuICAgICAgICBkYXRhLl9saW5lVGludCA9ICgoKGxpbmVDb2xvciA+PiAxNiAmIDB4RkYpIC8gMjU1ICogdGludFIqMjU1IDw8IDE2KSArICgobGluZUNvbG9yID4+IDggJiAweEZGKSAvIDI1NSAqIHRpbnRHKjI1NSA8PCA4KSArICAobGluZUNvbG9yICYgMHhGRikgLyAyNTUgKiB0aW50QioyNTUpO1xuXG4gICAgfVxufTtcblxuIiwidmFyIENhbnZhc0dyYXBoaWNzID0gcmVxdWlyZSgnLi9DYW52YXNHcmFwaGljcycpO1xuXG4vKipcbiAqIEEgc2V0IG9mIGZ1bmN0aW9ucyB1c2VkIHRvIGhhbmRsZSBtYXNraW5nLlxuICpcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqL1xuZnVuY3Rpb24gQ2FudmFzTWFza01hbmFnZXIoKVxue31cblxuQ2FudmFzTWFza01hbmFnZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gQ2FudmFzTWFza01hbmFnZXI7XG5tb2R1bGUuZXhwb3J0cyA9IENhbnZhc01hc2tNYW5hZ2VyO1xuXG4vKipcbiAqIFRoaXMgbWV0aG9kIGFkZHMgaXQgdG8gdGhlIGN1cnJlbnQgc3RhY2sgb2YgbWFza3MuXG4gKlxuICogQHBhcmFtIG1hc2tEYXRhIHtvYmplY3R9IHRoZSBtYXNrRGF0YSB0aGF0IHdpbGwgYmUgcHVzaGVkXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcnxQSVhJLkNhbnZhc1JlbmRlcmVyfSBUaGUgcmVuZGVyZXIgY29udGV4dCB0byB1c2UuXG4gKi9cbkNhbnZhc01hc2tNYW5hZ2VyLnByb3RvdHlwZS5wdXNoTWFzayA9IGZ1bmN0aW9uIChtYXNrRGF0YSwgcmVuZGVyZXIpXG57XG5cbiAgICByZW5kZXJlci5jb250ZXh0LnNhdmUoKTtcblxuICAgIHZhciBjYWNoZUFscGhhID0gbWFza0RhdGEuYWxwaGE7XG4gICAgdmFyIHRyYW5zZm9ybSA9IG1hc2tEYXRhLndvcmxkVHJhbnNmb3JtO1xuICAgIHZhciByZXNvbHV0aW9uID0gcmVuZGVyZXIucmVzb2x1dGlvbjtcblxuICAgIHJlbmRlcmVyLmNvbnRleHQuc2V0VHJhbnNmb3JtKFxuICAgICAgICB0cmFuc2Zvcm0uYSAqIHJlc29sdXRpb24sXG4gICAgICAgIHRyYW5zZm9ybS5iICogcmVzb2x1dGlvbixcbiAgICAgICAgdHJhbnNmb3JtLmMgKiByZXNvbHV0aW9uLFxuICAgICAgICB0cmFuc2Zvcm0uZCAqIHJlc29sdXRpb24sXG4gICAgICAgIHRyYW5zZm9ybS50eCAqIHJlc29sdXRpb24sXG4gICAgICAgIHRyYW5zZm9ybS50eSAqIHJlc29sdXRpb25cbiAgICApO1xuXG4gICAgLy9UT0RPIHN1cG9ydCBzcHJpdGUgYWxwaGEgbWFza3M/P1xuICAgIC8vbG90cyBvZiBlZmZvcnQgcmVxdWlyZWQuIElmIGRlbWFuZCBpcyBncmVhdCBlbm91Z2guLlxuICAgIGlmKCFtYXNrRGF0YS50ZXh0dXJlKVxuICAgIHtcbiAgICAgICAgQ2FudmFzR3JhcGhpY3MucmVuZGVyR3JhcGhpY3NNYXNrKG1hc2tEYXRhLCByZW5kZXJlci5jb250ZXh0KTtcbiAgICAgICAgcmVuZGVyZXIuY29udGV4dC5jbGlwKCk7XG4gICAgfVxuXG4gICAgbWFza0RhdGEud29ybGRBbHBoYSA9IGNhY2hlQWxwaGE7XG59O1xuXG4vKipcbiAqIFJlc3RvcmVzIHRoZSBjdXJyZW50IGRyYXdpbmcgY29udGV4dCB0byB0aGUgc3RhdGUgaXQgd2FzIGJlZm9yZSB0aGUgbWFzayB3YXMgYXBwbGllZC5cbiAqXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcnxQSVhJLkNhbnZhc1JlbmRlcmVyfSBUaGUgcmVuZGVyZXIgY29udGV4dCB0byB1c2UuXG4gKi9cbkNhbnZhc01hc2tNYW5hZ2VyLnByb3RvdHlwZS5wb3BNYXNrID0gZnVuY3Rpb24gKHJlbmRlcmVyKVxue1xuICAgIHJlbmRlcmVyLmNvbnRleHQucmVzdG9yZSgpO1xufTtcblxuQ2FudmFzTWFza01hbmFnZXIucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoKSB7fTtcbiIsInZhciB1dGlscyA9IHJlcXVpcmUoJy4uLy4uLy4uL3V0aWxzJyk7XG5cbi8qKlxuICogVXRpbGl0eSBtZXRob2RzIGZvciBTcHJpdGUvVGV4dHVyZSB0aW50aW5nLlxuICogQHN0YXRpY1xuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICovXG52YXIgQ2FudmFzVGludGVyID0ge307XG5tb2R1bGUuZXhwb3J0cyA9IENhbnZhc1RpbnRlcjtcblxuLyoqXG4gKiBCYXNpY2FsbHkgdGhpcyBtZXRob2QganVzdCBuZWVkcyBhIHNwcml0ZSBhbmQgYSBjb2xvciBhbmQgdGludHMgdGhlIHNwcml0ZSB3aXRoIHRoZSBnaXZlbiBjb2xvci5cbiAqXG4gKiBAcGFyYW0gc3ByaXRlIHtQSVhJLlNwcml0ZX0gdGhlIHNwcml0ZSB0byB0aW50XG4gKiBAcGFyYW0gY29sb3Ige251bWJlcn0gdGhlIGNvbG9yIHRvIHVzZSB0byB0aW50IHRoZSBzcHJpdGUgd2l0aFxuICogQHJldHVybiB7SFRNTENhbnZhc0VsZW1lbnR9IFRoZSB0aW50ZWQgY2FudmFzXG4gKi9cbkNhbnZhc1RpbnRlci5nZXRUaW50ZWRUZXh0dXJlID0gZnVuY3Rpb24gKHNwcml0ZSwgY29sb3IpXG57XG4gICAgdmFyIHRleHR1cmUgPSBzcHJpdGUudGV4dHVyZTtcblxuICAgIGNvbG9yID0gQ2FudmFzVGludGVyLnJvdW5kQ29sb3IoY29sb3IpO1xuXG4gICAgdmFyIHN0cmluZ0NvbG9yID0gJyMnICsgKCcwMDAwMCcgKyAoIGNvbG9yIHwgMCkudG9TdHJpbmcoMTYpKS5zdWJzdHIoLTYpO1xuXG4gICAgdGV4dHVyZS50aW50Q2FjaGUgPSB0ZXh0dXJlLnRpbnRDYWNoZSB8fCB7fTtcblxuICAgIGlmICh0ZXh0dXJlLnRpbnRDYWNoZVtzdHJpbmdDb2xvcl0pXG4gICAge1xuICAgICAgICByZXR1cm4gdGV4dHVyZS50aW50Q2FjaGVbc3RyaW5nQ29sb3JdO1xuICAgIH1cblxuICAgICAvLyBjbG9uZSB0ZXh0dXJlLi5cbiAgICB2YXIgY2FudmFzID0gQ2FudmFzVGludGVyLmNhbnZhcyB8fCBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdjYW52YXMnKTtcblxuICAgIC8vQ2FudmFzVGludGVyLnRpbnRXaXRoUGVyUGl4ZWwodGV4dHVyZSwgc3RyaW5nQ29sb3IsIGNhbnZhcyk7XG4gICAgQ2FudmFzVGludGVyLnRpbnRNZXRob2QodGV4dHVyZSwgY29sb3IsIGNhbnZhcyk7XG5cbiAgICBpZiAoQ2FudmFzVGludGVyLmNvbnZlcnRUaW50VG9JbWFnZSlcbiAgICB7XG4gICAgICAgIC8vIGlzIHRoaXMgYmV0dGVyP1xuICAgICAgICB2YXIgdGludEltYWdlID0gbmV3IEltYWdlKCk7XG4gICAgICAgIHRpbnRJbWFnZS5zcmMgPSBjYW52YXMudG9EYXRhVVJMKCk7XG5cbiAgICAgICAgdGV4dHVyZS50aW50Q2FjaGVbc3RyaW5nQ29sb3JdID0gdGludEltYWdlO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICB0ZXh0dXJlLnRpbnRDYWNoZVtzdHJpbmdDb2xvcl0gPSBjYW52YXM7XG4gICAgICAgIC8vIGlmIHdlIGFyZSBub3QgY29udmVydGluZyB0aGUgdGV4dHVyZSB0byBhbiBpbWFnZSB0aGVuIHdlIG5lZWQgdG8gbG9zZSB0aGUgcmVmZXJlbmNlIHRvIHRoZSBjYW52YXNcbiAgICAgICAgQ2FudmFzVGludGVyLmNhbnZhcyA9IG51bGw7XG4gICAgfVxuXG4gICAgcmV0dXJuIGNhbnZhcztcbn07XG5cbi8qKlxuICogVGludCBhIHRleHR1cmUgdXNpbmcgdGhlICdtdWx0aXBseScgb3BlcmF0aW9uLlxuICpcbiAqIEBwYXJhbSB0ZXh0dXJlIHtQSVhJLlRleHR1cmV9IHRoZSB0ZXh0dXJlIHRvIHRpbnRcbiAqIEBwYXJhbSBjb2xvciB7bnVtYmVyfSB0aGUgY29sb3IgdG8gdXNlIHRvIHRpbnQgdGhlIHNwcml0ZSB3aXRoXG4gKiBAcGFyYW0gY2FudmFzIHtIVE1MQ2FudmFzRWxlbWVudH0gdGhlIGN1cnJlbnQgY2FudmFzXG4gKi9cbkNhbnZhc1RpbnRlci50aW50V2l0aE11bHRpcGx5ID0gZnVuY3Rpb24gKHRleHR1cmUsIGNvbG9yLCBjYW52YXMpXG57XG4gICAgdmFyIGNvbnRleHQgPSBjYW52YXMuZ2V0Q29udGV4dCggJzJkJyApO1xuXG4gICAgdmFyIHJlc29sdXRpb24gPSB0ZXh0dXJlLmJhc2VUZXh0dXJlLnJlc29sdXRpb247XG5cbiAgICB2YXIgY3JvcCA9IHRleHR1cmUuY3JvcC5jbG9uZSgpO1xuICAgIGNyb3AueCAqPSByZXNvbHV0aW9uO1xuICAgIGNyb3AueSAqPSByZXNvbHV0aW9uO1xuICAgIGNyb3Aud2lkdGggKj0gcmVzb2x1dGlvbjtcbiAgICBjcm9wLmhlaWdodCAqPSByZXNvbHV0aW9uO1xuXG4gICAgY2FudmFzLndpZHRoID0gY3JvcC53aWR0aDtcbiAgICBjYW52YXMuaGVpZ2h0ID0gY3JvcC5oZWlnaHQ7XG5cbiAgICBjb250ZXh0LmZpbGxTdHlsZSA9ICcjJyArICgnMDAwMDAnICsgKCBjb2xvciB8IDApLnRvU3RyaW5nKDE2KSkuc3Vic3RyKC02KTtcblxuICAgIGNvbnRleHQuZmlsbFJlY3QoMCwgMCwgY3JvcC53aWR0aCwgY3JvcC5oZWlnaHQpO1xuXG4gICAgY29udGV4dC5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb24gPSAnbXVsdGlwbHknO1xuXG4gICAgY29udGV4dC5kcmF3SW1hZ2UoXG4gICAgICAgIHRleHR1cmUuYmFzZVRleHR1cmUuc291cmNlLFxuICAgICAgICBjcm9wLngsXG4gICAgICAgIGNyb3AueSxcbiAgICAgICAgY3JvcC53aWR0aCxcbiAgICAgICAgY3JvcC5oZWlnaHQsXG4gICAgICAgIDAsXG4gICAgICAgIDAsXG4gICAgICAgIGNyb3Aud2lkdGgsXG4gICAgICAgIGNyb3AuaGVpZ2h0XG4gICAgKTtcblxuICAgIGNvbnRleHQuZ2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uID0gJ2Rlc3RpbmF0aW9uLWF0b3AnO1xuXG4gICAgY29udGV4dC5kcmF3SW1hZ2UoXG4gICAgICAgIHRleHR1cmUuYmFzZVRleHR1cmUuc291cmNlLFxuICAgICAgICBjcm9wLngsXG4gICAgICAgIGNyb3AueSxcbiAgICAgICAgY3JvcC53aWR0aCxcbiAgICAgICAgY3JvcC5oZWlnaHQsXG4gICAgICAgIDAsXG4gICAgICAgIDAsXG4gICAgICAgIGNyb3Aud2lkdGgsXG4gICAgICAgIGNyb3AuaGVpZ2h0XG4gICAgKTtcbn07XG5cbi8qKlxuICogVGludCBhIHRleHR1cmUgdXNpbmcgdGhlICdvdmVybGF5JyBvcGVyYXRpb24uXG4gKlxuICogQHBhcmFtIHRleHR1cmUge1BJWEkuVGV4dHVyZX0gdGhlIHRleHR1cmUgdG8gdGludFxuICogQHBhcmFtIGNvbG9yIHtudW1iZXJ9IHRoZSBjb2xvciB0byB1c2UgdG8gdGludCB0aGUgc3ByaXRlIHdpdGhcbiAqIEBwYXJhbSBjYW52YXMge0hUTUxDYW52YXNFbGVtZW50fSB0aGUgY3VycmVudCBjYW52YXNcbiAqL1xuQ2FudmFzVGludGVyLnRpbnRXaXRoT3ZlcmxheSA9IGZ1bmN0aW9uICh0ZXh0dXJlLCBjb2xvciwgY2FudmFzKVxue1xuICAgIHZhciBjb250ZXh0ID0gY2FudmFzLmdldENvbnRleHQoICcyZCcgKTtcblxuICAgIHZhciByZXNvbHV0aW9uID0gdGV4dHVyZS5iYXNlVGV4dHVyZS5yZXNvbHV0aW9uO1xuXG4gICAgdmFyIGNyb3AgPSB0ZXh0dXJlLmNyb3AuY2xvbmUoKTtcbiAgICBjcm9wLnggKj0gcmVzb2x1dGlvbjtcbiAgICBjcm9wLnkgKj0gcmVzb2x1dGlvbjtcbiAgICBjcm9wLndpZHRoICo9IHJlc29sdXRpb247XG4gICAgY3JvcC5oZWlnaHQgKj0gcmVzb2x1dGlvbjtcblxuICAgIGNhbnZhcy53aWR0aCA9IGNyb3Aud2lkdGg7XG4gICAgY2FudmFzLmhlaWdodCA9IGNyb3AuaGVpZ2h0O1xuXG4gICAgY29udGV4dC5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb24gPSAnY29weSc7XG4gICAgY29udGV4dC5maWxsU3R5bGUgPSAnIycgKyAoJzAwMDAwJyArICggY29sb3IgfCAwKS50b1N0cmluZygxNikpLnN1YnN0cigtNik7XG4gICAgY29udGV4dC5maWxsUmVjdCgwLCAwLCBjcm9wLndpZHRoLCBjcm9wLmhlaWdodCk7XG5cbiAgICBjb250ZXh0Lmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbiA9ICdkZXN0aW5hdGlvbi1hdG9wJztcbiAgICBjb250ZXh0LmRyYXdJbWFnZShcbiAgICAgICAgdGV4dHVyZS5iYXNlVGV4dHVyZS5zb3VyY2UsXG4gICAgICAgIGNyb3AueCxcbiAgICAgICAgY3JvcC55LFxuICAgICAgICBjcm9wLndpZHRoLFxuICAgICAgICBjcm9wLmhlaWdodCxcbiAgICAgICAgMCxcbiAgICAgICAgMCxcbiAgICAgICAgY3JvcC53aWR0aCxcbiAgICAgICAgY3JvcC5oZWlnaHRcbiAgICApO1xuXG4gICAgLy8gY29udGV4dC5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb24gPSAnY29weSc7XG59O1xuXG4vKipcbiAqIFRpbnQgYSB0ZXh0dXJlIHBpeGVsIHBlciBwaXhlbC5cbiAqXG4gKiBAcGFyYW0gdGV4dHVyZSB7UElYSS5UZXh0dXJlfSB0aGUgdGV4dHVyZSB0byB0aW50XG4gKiBAcGFyYW0gY29sb3Ige251bWJlcn0gdGhlIGNvbG9yIHRvIHVzZSB0byB0aW50IHRoZSBzcHJpdGUgd2l0aFxuICogQHBhcmFtIGNhbnZhcyB7SFRNTENhbnZhc0VsZW1lbnR9IHRoZSBjdXJyZW50IGNhbnZhc1xuICovXG5DYW52YXNUaW50ZXIudGludFdpdGhQZXJQaXhlbCA9IGZ1bmN0aW9uICh0ZXh0dXJlLCBjb2xvciwgY2FudmFzKVxue1xuICAgIHZhciBjb250ZXh0ID0gY2FudmFzLmdldENvbnRleHQoICcyZCcgKTtcblxuICAgIHZhciByZXNvbHV0aW9uID0gdGV4dHVyZS5iYXNlVGV4dHVyZS5yZXNvbHV0aW9uO1xuXG4gICAgdmFyIGNyb3AgPSB0ZXh0dXJlLmNyb3AuY2xvbmUoKTtcbiAgICBjcm9wLnggKj0gcmVzb2x1dGlvbjtcbiAgICBjcm9wLnkgKj0gcmVzb2x1dGlvbjtcbiAgICBjcm9wLndpZHRoICo9IHJlc29sdXRpb247XG4gICAgY3JvcC5oZWlnaHQgKj0gcmVzb2x1dGlvbjtcblxuICAgIGNhbnZhcy53aWR0aCA9IGNyb3Aud2lkdGg7XG4gICAgY2FudmFzLmhlaWdodCA9IGNyb3AuaGVpZ2h0O1xuXG4gICAgY29udGV4dC5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb24gPSAnY29weSc7XG4gICAgY29udGV4dC5kcmF3SW1hZ2UoXG4gICAgICAgIHRleHR1cmUuYmFzZVRleHR1cmUuc291cmNlLFxuICAgICAgICBjcm9wLngsXG4gICAgICAgIGNyb3AueSxcbiAgICAgICAgY3JvcC53aWR0aCxcbiAgICAgICAgY3JvcC5oZWlnaHQsXG4gICAgICAgIDAsXG4gICAgICAgIDAsXG4gICAgICAgIGNyb3Aud2lkdGgsXG4gICAgICAgIGNyb3AuaGVpZ2h0XG4gICAgKTtcblxuICAgIHZhciByZ2JWYWx1ZXMgPSB1dGlscy5oZXgycmdiKGNvbG9yKTtcbiAgICB2YXIgciA9IHJnYlZhbHVlc1swXSwgZyA9IHJnYlZhbHVlc1sxXSwgYiA9IHJnYlZhbHVlc1syXTtcblxuICAgIHZhciBwaXhlbERhdGEgPSBjb250ZXh0LmdldEltYWdlRGF0YSgwLCAwLCBjcm9wLndpZHRoLCBjcm9wLmhlaWdodCk7XG5cbiAgICB2YXIgcGl4ZWxzID0gcGl4ZWxEYXRhLmRhdGE7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHBpeGVscy5sZW5ndGg7IGkgKz0gNClcbiAgICB7XG4gICAgICAgIHBpeGVsc1tpKzBdICo9IHI7XG4gICAgICAgIHBpeGVsc1tpKzFdICo9IGc7XG4gICAgICAgIHBpeGVsc1tpKzJdICo9IGI7XG4gICAgfVxuXG4gICAgY29udGV4dC5wdXRJbWFnZURhdGEocGl4ZWxEYXRhLCAwLCAwKTtcbn07XG5cbi8qKlxuICogUm91bmRzIHRoZSBzcGVjaWZpZWQgY29sb3IgYWNjb3JkaW5nIHRvIHRoZSBDYW52YXNUaW50ZXIuY2FjaGVTdGVwc1BlckNvbG9yQ2hhbm5lbC5cbiAqXG4gKiBAcGFyYW0gY29sb3Ige251bWJlcn0gdGhlIGNvbG9yIHRvIHJvdW5kLCBzaG91bGQgYmUgYSBoZXggY29sb3JcbiAqL1xuQ2FudmFzVGludGVyLnJvdW5kQ29sb3IgPSBmdW5jdGlvbiAoY29sb3IpXG57XG4gICAgdmFyIHN0ZXAgPSBDYW52YXNUaW50ZXIuY2FjaGVTdGVwc1BlckNvbG9yQ2hhbm5lbDtcblxuICAgIHZhciByZ2JWYWx1ZXMgPSB1dGlscy5oZXgycmdiKGNvbG9yKTtcblxuICAgIHJnYlZhbHVlc1swXSA9IE1hdGgubWluKDI1NSwgKHJnYlZhbHVlc1swXSAvIHN0ZXApICogc3RlcCk7XG4gICAgcmdiVmFsdWVzWzFdID0gTWF0aC5taW4oMjU1LCAocmdiVmFsdWVzWzFdIC8gc3RlcCkgKiBzdGVwKTtcbiAgICByZ2JWYWx1ZXNbMl0gPSBNYXRoLm1pbigyNTUsIChyZ2JWYWx1ZXNbMl0gLyBzdGVwKSAqIHN0ZXApO1xuXG4gICAgcmV0dXJuIHV0aWxzLnJnYjJoZXgocmdiVmFsdWVzKTtcbn07XG5cbi8qKlxuICogTnVtYmVyIG9mIHN0ZXBzIHdoaWNoIHdpbGwgYmUgdXNlZCBhcyBhIGNhcCB3aGVuIHJvdW5kaW5nIGNvbG9ycy5cbiAqXG4gKiBAbWVtYmVyXG4gKi9cbkNhbnZhc1RpbnRlci5jYWNoZVN0ZXBzUGVyQ29sb3JDaGFubmVsID0gODtcblxuLyoqXG4gKiBUaW50IGNhY2hlIGJvb2xlYW4gZmxhZy5cbiAqXG4gKiBAbWVtYmVyXG4gKi9cbkNhbnZhc1RpbnRlci5jb252ZXJ0VGludFRvSW1hZ2UgPSBmYWxzZTtcblxuLyoqXG4gKiBXaGV0aGVyIG9yIG5vdCB0aGUgQ2FudmFzIEJsZW5kTW9kZXMgYXJlIHN1cHBvcnRlZCwgY29uc2VxdWVudGx5IHRoZSBhYmlsaXR5IHRvIHRpbnQgdXNpbmcgdGhlIG11bHRpcGx5IG1ldGhvZC5cbiAqXG4gKiBAbWVtYmVyXG4gKi9cbkNhbnZhc1RpbnRlci5jYW5Vc2VNdWx0aXBseSA9IHV0aWxzLmNhblVzZU5ld0NhbnZhc0JsZW5kTW9kZXMoKTtcblxuLyoqXG4gKiBUaGUgdGludGluZyBtZXRob2QgdGhhdCB3aWxsIGJlIHVzZWQuXG4gKlxuICovXG5DYW52YXNUaW50ZXIudGludE1ldGhvZCA9IENhbnZhc1RpbnRlci5jYW5Vc2VNdWx0aXBseSA/IENhbnZhc1RpbnRlci50aW50V2l0aE11bHRpcGx5IDogIENhbnZhc1RpbnRlci50aW50V2l0aFBlclBpeGVsO1xuIiwidmFyIEdMVGV4dHVyZSA9IHJlcXVpcmUoJ3BpeGktZ2wtY29yZScpLkdMVGV4dHVyZSxcblx0dXRpbHMgPSByZXF1aXJlKCcuLi8uLi91dGlscycpO1xuXG4vKipcbiAqIEhlbHBlciBjbGFzcyB0byBjcmVhdGUgYSB3ZWJHTCBUZXh0dXJlXG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIGdsIHtXZWJHTFJlbmRlcmluZ0NvbnRleHR9XG4gKi9cblxudmFyIFRleHR1cmVNYW5hZ2VyID0gZnVuY3Rpb24oZ2wpXG57XG5cdHRoaXMuZ2wgPSBnbDtcblxuXHQvLyB0cmFjayB0ZXh0dXJlcyBpbiB0aGUgcmVuZGVyZXIgc28gd2UgY2FuIG5vIGxvbmdlciBsaXN0ZW4gdG8gdGhlbSBvbiBkZXN0cnVjdGlvbi5cblx0dGhpcy5fbWFuYWdlZFRleHR1cmVzID0gW107XG4gICAgdGhpcy5nbFRleHR1cmVzID0ge307XG5cbn1cblxuVGV4dHVyZU1hbmFnZXIucHJvdG90eXBlLmJpbmRUZXh0dXJlID0gZnVuY3Rpb24odGV4dHVyZSlcbntcblxufVxuXG5cblRleHR1cmVNYW5hZ2VyLnByb3RvdHlwZS5nZXRUZXh0dXJlID0gZnVuY3Rpb24odGV4dHVyZSlcbntcblxufVxuXG4vKipcbiAqIFVwZGF0ZXMgYW5kL29yIENyZWF0ZXMgYSBXZWJHTCB0ZXh0dXJlIGZvciB0aGUgcmVuZGVyZXIncyBjb250ZXh0LlxuICpcbiAqIEBwYXJhbSB0ZXh0dXJlIHtQSVhJLkJhc2VUZXh0dXJlfFBJWEkuVGV4dHVyZX0gdGhlIHRleHR1cmUgdG8gdXBkYXRlXG4gKi9cblRleHR1cmVNYW5hZ2VyLnByb3RvdHlwZS51cGRhdGVUZXh0dXJlID0gZnVuY3Rpb24odGV4dHVyZSlcbntcblx0dGV4dHVyZSA9IHRleHR1cmUuYmFzZVRleHR1cmUgfHwgdGV4dHVyZTtcblxuXHRpZiAoIXRleHR1cmUuaGFzTG9hZGVkKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIFxuICAgIHZhciBnbCA9IHRoaXMuZ2w7XG4gICAgdmFyIGdsVGV4dHVyZSA9IHRoaXMuZ2xUZXh0dXJlc1t0ZXh0dXJlLnVpZF0vL3RleHR1cmUuX2dsVGV4dHVyZXNbZ2wuaWRdO1xuXG4gICAgaWYgKCFnbFRleHR1cmUpXG4gICAge1xuICAgICAgICBnbFRleHR1cmUgPSBuZXcgR0xUZXh0dXJlKGdsKTtcbiAgICAgICAgZ2xUZXh0dXJlLnByZW11bHRpcGx5QWxwaGEgPSB0cnVlXG4gICAgICAgIHRleHR1cmUuX2dsVGV4dHVyZXNbZ2wuaWRdID0gZ2xUZXh0dXJlO1xuXG4gICAgICAgLy8gdGhpcy5nbFRleHR1cmVzW3RleHR1cmUudWlkXSA9IGdsVGV4dHVyZTtcblxuICAgICAgICB0ZXh0dXJlLm9uKCd1cGRhdGUnLCB0aGlzLnVwZGF0ZVRleHR1cmUsIHRoaXMpO1xuICAgICAgICB0ZXh0dXJlLm9uKCdkaXNwb3NlJywgdGhpcy5kZXN0cm95VGV4dHVyZSwgdGhpcyk7XG4gICAgICAgIFxuICAgICAgICB0aGlzLl9tYW5hZ2VkVGV4dHVyZXMucHVzaCh0ZXh0dXJlKTtcbiAgICB9XG5cbiAgICBnbFRleHR1cmUudXBsb2FkKHRleHR1cmUuc291cmNlKTtcbiAgICBcbiAgICAvL1RPRE8gY2hlY2sgaXMgcG93ZXIgb2YgdHdvLi5cbiAgICBnbFRleHR1cmUuZW5hYmxlV3JhcENsYW1wKCk7XG5cblxuICAgIC8vIFRPRE8gY2hlY2sgZm9yIHNjYWxpbmcgdHlwZVxuICAgIGdsVGV4dHVyZS5lbmFibGVMaW5lYXJTY2FsaW5nKCk7XG5cbiAgICByZXR1cm4gIHRleHR1cmUuX2dsVGV4dHVyZXNbZ2wuaWRdO1xufVxuXG4vKipcbiAqIERlbGV0ZXMgdGhlIHRleHR1cmUgZnJvbSBXZWJHTFxuICpcbiAqIEBwYXJhbSB0ZXh0dXJlIHtQSVhJLkJhc2VUZXh0dXJlfFBJWEkuVGV4dHVyZX0gdGhlIHRleHR1cmUgdG8gZGVzdHJveVxuICovXG5UZXh0dXJlTWFuYWdlci5wcm90b3R5cGUuZGVzdHJveVRleHR1cmUgPSBmdW5jdGlvbih0ZXh0dXJlLCBfc2tpcFJlbW92ZSlcbntcblx0dGV4dHVyZSA9IHRleHR1cmUuYmFzZVRleHR1cmUgfHwgdGV4dHVyZTtcblxuICAgIGlmICghdGV4dHVyZS5oYXNMb2FkZWQpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHRleHR1cmUuX2dsVGV4dHVyZXNbdGhpcy5nbC5pZF0pXG4gICAge1xuICAgICAgICB0ZXh0dXJlLl9nbFRleHR1cmVzW3RoaXMuZ2wuaWRdLmRlc3Ryb3koKTtcbiAgICAgICAgdGV4dHVyZS5vZmYoJ3VwZGF0ZScsIHRoaXMudXBkYXRlVGV4dHVyZSwgdGhpcyk7XG4gICAgICAgIHRleHR1cmUub2ZmKCdkaXNwb3NlJywgdGhpcy5kZXN0cm95VGV4dHVyZSwgdGhpcyk7XG5cblxuICAgICAgICBkZWxldGUgdGV4dHVyZS5fZ2xUZXh0dXJlc1t0aGlzLmdsLmlkXTtcblxuICAgICAgICBpZiAoIV9za2lwUmVtb3ZlKVxuICAgICAgICB7XG4gICAgICAgICAgICB2YXIgaSA9IHRoaXMuX21hbmFnZWRUZXh0dXJlcy5pbmRleE9mKHRleHR1cmUpO1xuICAgICAgICAgICAgaWYgKGkgIT09IC0xKSB7XG4gICAgICAgICAgICAgICAgdXRpbHMucmVtb3ZlSXRlbXModGhpcy5fbWFuYWdlZFRleHR1cmVzLCBpLCAxKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn1cblxuVGV4dHVyZU1hbmFnZXIucHJvdG90eXBlLnJlbW92ZUFsbCA9IGZ1bmN0aW9uKClcbntcblx0Ly8gZW1wdHkgYWxsIHRoZSBvbGQgZ2wgdGV4dHVyZXMgYXMgdGhleSBhcmUgdXNlbGVzcyBub3dcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuX21hbmFnZWRUZXh0dXJlcy5sZW5ndGg7ICsraSlcbiAgICB7XG4gICAgICAgIHZhciB0ZXh0dXJlID0gdGhpcy5fbWFuYWdlZFRleHR1cmVzW2ldO1xuICAgICAgICBpZiAodGV4dHVyZS5fZ2xUZXh0dXJlc1t0aGlzLmdsLmlkXSlcbiAgICAgICAge1xuICAgICAgICAgICAgZGVsZXRlIHRleHR1cmUuX2dsVGV4dHVyZXNbdGhpcy5nbC5pZF07XG4gICAgICAgIH1cbiAgICB9XG59XG5cblRleHR1cmVNYW5hZ2VyLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24oKVxue1xuICAgIC8vIGRlc3Ryb3kgbWFuYWdlZCB0ZXh0dXJlc1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5fbWFuYWdlZFRleHR1cmVzLmxlbmd0aDsgKytpKVxuICAgIHtcbiAgICAgICAgdmFyIHRleHR1cmUgPSB0aGlzLl9tYW5hZ2VkVGV4dHVyZXNbaV07XG4gICAgICAgIHRoaXMuZGVzdHJveVRleHR1cmUodGV4dHVyZSwgdHJ1ZSk7XG4gICAgICAgIHRleHR1cmUub2ZmKCd1cGRhdGUnLCB0aGlzLnVwZGF0ZVRleHR1cmUsIHRoaXMpO1xuICAgICAgICB0ZXh0dXJlLm9mZignZGlzcG9zZScsIHRoaXMuZGVzdHJveVRleHR1cmUsIHRoaXMpO1xuICAgIH1cblxuICAgIHRoaXMuX21hbmFnZWRUZXh0dXJlcyA9IG51bGw7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gVGV4dHVyZU1hbmFnZXI7XG5cbiIsInZhciBTeXN0ZW1SZW5kZXJlciA9IHJlcXVpcmUoJy4uL1N5c3RlbVJlbmRlcmVyJyksXG4gICAgU2hhZGVyTWFuYWdlciA9IHJlcXVpcmUoJy4vbWFuYWdlcnMvU2hhZGVyTWFuYWdlcicpLFxuICAgIE1hc2tNYW5hZ2VyID0gcmVxdWlyZSgnLi9tYW5hZ2Vycy9NYXNrTWFuYWdlcicpLFxuICAgIFN0ZW5jaWxNYW5hZ2VyID0gcmVxdWlyZSgnLi9tYW5hZ2Vycy9TdGVuY2lsTWFuYWdlcicpLFxuICAgIEZpbHRlck1hbmFnZXIgPSByZXF1aXJlKCcuL21hbmFnZXJzL0ZpbHRlck1hbmFnZXInKSxcbiAgICBCbGVuZE1vZGVNYW5hZ2VyID0gcmVxdWlyZSgnLi9tYW5hZ2Vycy9CbGVuZE1vZGVNYW5hZ2VyJyksXG4gICAgUmVuZGVyVGFyZ2V0ID0gcmVxdWlyZSgnLi91dGlscy9SZW5kZXJUYXJnZXQnKSxcbiAgICBPYmplY3RSZW5kZXJlciA9IHJlcXVpcmUoJy4vdXRpbHMvT2JqZWN0UmVuZGVyZXInKSxcbiAgICBGWEFBRmlsdGVyID0gcmVxdWlyZSgnLi9maWx0ZXJzL0ZYQUFGaWx0ZXInKSxcbiAgICBUZXh0dXJlTWFuYWdlciA9IHJlcXVpcmUoJy4vVGV4dHVyZU1hbmFnZXInKSxcbiAgICBjcmVhdGVDb250ZXh0ID0gcmVxdWlyZSgncGl4aS1nbC1jb3JlJykuY3JlYXRlQ29udGV4dCxcbiAgICBtYXBXZWJHTEJsZW5kTW9kZXNUb1BpeGkgPSByZXF1aXJlKCcuL3V0aWxzL21hcFdlYkdMQmxlbmRNb2Rlc1RvUGl4aScpLFxuICAgIG1hcFdlYkdMRHJhd01vZGVzVG9QaXhpID0gcmVxdWlyZSgnLi91dGlscy9tYXBXZWJHTERyYXdNb2Rlc1RvUGl4aScpLFxuICAgIHV0aWxzID0gcmVxdWlyZSgnLi4vLi4vdXRpbHMnKSxcbiAgICBDT05TVCA9IHJlcXVpcmUoJy4uLy4uL2NvbnN0Jyk7XG5cbi8qKlxuICogVGhlIFdlYkdMUmVuZGVyZXIgZHJhd3MgdGhlIHNjZW5lIGFuZCBhbGwgaXRzIGNvbnRlbnQgb250byBhIHdlYkdMIGVuYWJsZWQgY2FudmFzLiBUaGlzIHJlbmRlcmVyXG4gKiBzaG91bGQgYmUgdXNlZCBmb3IgYnJvd3NlcnMgdGhhdCBzdXBwb3J0IHdlYkdMLiBUaGlzIFJlbmRlciB3b3JrcyBieSBhdXRvbWF0aWNhbGx5IG1hbmFnaW5nIHdlYkdMQmF0Y2hzLlxuICogU28gbm8gbmVlZCBmb3IgU3ByaXRlIEJhdGNoZXMgb3IgU3ByaXRlIENsb3Vkcy5cbiAqIERvbid0IGZvcmdldCB0byBhZGQgdGhlIHZpZXcgdG8geW91ciBET00gb3IgeW91IHdpbGwgbm90IHNlZSBhbnl0aGluZyA6KVxuICpcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqIEBleHRlbmRzIFBJWEkuU3lzdGVtUmVuZGVyZXJcbiAqIEBwYXJhbSBbd2lkdGg9MF0ge251bWJlcn0gdGhlIHdpZHRoIG9mIHRoZSBjYW52YXMgdmlld1xuICogQHBhcmFtIFtoZWlnaHQ9MF0ge251bWJlcn0gdGhlIGhlaWdodCBvZiB0aGUgY2FudmFzIHZpZXdcbiAqIEBwYXJhbSBbb3B0aW9uc10ge29iamVjdH0gVGhlIG9wdGlvbmFsIHJlbmRlcmVyIHBhcmFtZXRlcnNcbiAqIEBwYXJhbSBbb3B0aW9ucy52aWV3XSB7SFRNTENhbnZhc0VsZW1lbnR9IHRoZSBjYW52YXMgdG8gdXNlIGFzIGEgdmlldywgb3B0aW9uYWxcbiAqIEBwYXJhbSBbb3B0aW9ucy50cmFuc3BhcmVudD1mYWxzZV0ge2Jvb2xlYW59IElmIHRoZSByZW5kZXIgdmlldyBpcyB0cmFuc3BhcmVudCwgZGVmYXVsdCBmYWxzZVxuICogQHBhcmFtIFtvcHRpb25zLmF1dG9SZXNpemU9ZmFsc2VdIHtib29sZWFufSBJZiB0aGUgcmVuZGVyIHZpZXcgaXMgYXV0b21hdGljYWxseSByZXNpemVkLCBkZWZhdWx0IGZhbHNlXG4gKiBAcGFyYW0gW29wdGlvbnMuYW50aWFsaWFzPWZhbHNlXSB7Ym9vbGVhbn0gc2V0cyBhbnRpYWxpYXMuIElmIG5vdCBhdmFpbGFibGUgbmF0aXZlbHkgdGhlbiBGWEFBIGFudGlhbGlhc2luZyBpcyB1c2VkXG4gKiBAcGFyYW0gW29wdGlvbnMuZm9yY2VGWEFBPWZhbHNlXSB7Ym9vbGVhbn0gZm9yY2VzIEZYQUEgYW50aWFsaWFzaW5nIHRvIGJlIHVzZWQgb3ZlciBuYXRpdmUuIEZYQUEgaXMgZmFzdGVyLCBidXQgbWF5IG5vdCBhbHdheXMgbG9vayBhcyBncmVhdFxuICogQHBhcmFtIFtvcHRpb25zLnJlc29sdXRpb249MV0ge251bWJlcn0gdGhlIHJlc29sdXRpb24gb2YgdGhlIHJlbmRlcmVyIHJldGluYSB3b3VsZCBiZSAyXG4gKiBAcGFyYW0gW29wdGlvbnMuY2xlYXJCZWZvcmVSZW5kZXI9dHJ1ZV0ge2Jvb2xlYW59IFRoaXMgc2V0cyBpZiB0aGUgQ2FudmFzUmVuZGVyZXIgd2lsbCBjbGVhciB0aGUgY2FudmFzIG9yXG4gKiAgICAgIG5vdCBiZWZvcmUgdGhlIG5ldyByZW5kZXIgcGFzcy4gSWYgeW91IHdpc2ggdG8gc2V0IHRoaXMgdG8gZmFsc2UsIHlvdSAqbXVzdCogc2V0IHByZXNlcnZlRHJhd2luZ0J1ZmZlciB0byBgdHJ1ZWAuXG4gKiBAcGFyYW0gW29wdGlvbnMucHJlc2VydmVEcmF3aW5nQnVmZmVyPWZhbHNlXSB7Ym9vbGVhbn0gZW5hYmxlcyBkcmF3aW5nIGJ1ZmZlciBwcmVzZXJ2YXRpb24sIGVuYWJsZSB0aGlzIGlmXG4gKiAgICAgIHlvdSBuZWVkIHRvIGNhbGwgdG9EYXRhVXJsIG9uIHRoZSB3ZWJnbCBjb250ZXh0LlxuICogQHBhcmFtIFtvcHRpb25zLnJvdW5kUGl4ZWxzPWZhbHNlXSB7Ym9vbGVhbn0gSWYgdHJ1ZSBQaXhpIHdpbGwgTWF0aC5mbG9vcigpIHgveSB2YWx1ZXMgd2hlbiByZW5kZXJpbmcsIHN0b3BwaW5nIHBpeGVsIGludGVycG9sYXRpb24uXG4gKi9cbmZ1bmN0aW9uIFdlYkdMUmVuZGVyZXIod2lkdGgsIGhlaWdodCwgb3B0aW9ucylcbntcbiAgICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcblxuICAgIFN5c3RlbVJlbmRlcmVyLmNhbGwodGhpcywgJ1dlYkdMJywgd2lkdGgsIGhlaWdodCwgb3B0aW9ucyk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgdHlwZSBvZiB0aGlzIHJlbmRlcmVyIGFzIGEgc3RhbmRhcmRpc2VkIGNvbnN0XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9Ly9cbiAgICAgKlxuICAgICAqL1xuICAgIHRoaXMudHlwZSA9IENPTlNULlJFTkRFUkVSX1RZUEUuV0VCR0w7XG5cbiAgICB0aGlzLmhhbmRsZUNvbnRleHRMb3N0ID0gdGhpcy5oYW5kbGVDb250ZXh0TG9zdC5iaW5kKHRoaXMpO1xuICAgIHRoaXMuaGFuZGxlQ29udGV4dFJlc3RvcmVkID0gdGhpcy5oYW5kbGVDb250ZXh0UmVzdG9yZWQuYmluZCh0aGlzKTtcblxuICAgIHRoaXMudmlldy5hZGRFdmVudExpc3RlbmVyKCd3ZWJnbGNvbnRleHRsb3N0JywgdGhpcy5oYW5kbGVDb250ZXh0TG9zdCwgZmFsc2UpO1xuICAgIHRoaXMudmlldy5hZGRFdmVudExpc3RlbmVyKCd3ZWJnbGNvbnRleHRyZXN0b3JlZCcsIHRoaXMuaGFuZGxlQ29udGV4dFJlc3RvcmVkLCBmYWxzZSk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgb3B0aW9ucyBwYXNzZWQgaW4gdG8gY3JlYXRlIGEgbmV3IHdlYmdsIGNvbnRleHQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtvYmplY3R9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9jb250ZXh0T3B0aW9ucyA9IHtcbiAgICAgICAgYWxwaGE6IHRoaXMudHJhbnNwYXJlbnQsXG4gICAgICAgIGFudGlhbGlhczogb3B0aW9ucy5hbnRpYWxpYXMsXG4gICAgICAgIHByZW11bHRpcGxpZWRBbHBoYTogdGhpcy50cmFuc3BhcmVudCAmJiB0aGlzLnRyYW5zcGFyZW50ICE9PSAnbm90TXVsdGlwbGllZCcsXG4gICAgICAgIHN0ZW5jaWw6IHRydWUsXG4gICAgICAgIHByZXNlcnZlRHJhd2luZ0J1ZmZlcjogb3B0aW9ucy5wcmVzZXJ2ZURyYXdpbmdCdWZmZXJcbiAgICB9O1xuXG4gICAgdGhpcy5fYmFja2dyb3VuZENvbG9yUmdiYVszXSA9IHRoaXMudHJhbnNwYXJlbnQgPyAwIDogMTtcblxuICAgIC8qKlxuICAgICAqIERlYWxzIHdpdGggbWFuYWdpbmcgdGhlIHNoYWRlciBwcm9ncmFtcyBhbmQgdGhlaXIgYXR0cmlicy5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuU2hhZGVyTWFuYWdlcn1cbiAgICAgKi9cbiAgICB0aGlzLnNoYWRlck1hbmFnZXIgPSBuZXcgU2hhZGVyTWFuYWdlcih0aGlzKTtcblxuICAgIC8qKlxuICAgICAqIE1hbmFnZXMgdGhlIG1hc2tzIHVzaW5nIHRoZSBzdGVuY2lsIGJ1ZmZlci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuTWFza01hbmFnZXJ9XG4gICAgICovXG4gICAgdGhpcy5tYXNrTWFuYWdlciA9IG5ldyBNYXNrTWFuYWdlcih0aGlzKTtcblxuICAgIC8qKlxuICAgICAqIE1hbmFnZXMgdGhlIHN0ZW5jaWwgYnVmZmVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5TdGVuY2lsTWFuYWdlcn1cbiAgICAgKi9cbiAgICB0aGlzLnN0ZW5jaWxNYW5hZ2VyID0gbmV3IFN0ZW5jaWxNYW5hZ2VyKHRoaXMpO1xuXG4gICAgLyoqXG4gICAgICogTWFuYWdlcyB0aGUgZmlsdGVycy5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuRmlsdGVyTWFuYWdlcn1cbiAgICAgKi9cbiAgICB0aGlzLmZpbHRlck1hbmFnZXIgPSBuZXcgRmlsdGVyTWFuYWdlcih0aGlzKTtcblxuICAgIC8qKlxuICAgICAqIE1hbmFnZXMgdGhlIGJsZW5kTW9kZXNcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuQmxlbmRNb2RlTWFuYWdlcn1cbiAgICAgKi9cbiAgICB0aGlzLmJsZW5kTW9kZU1hbmFnZXIgPSBuZXcgQmxlbmRNb2RlTWFuYWdlcih0aGlzKTtcblxuICAgIFxuICAgIC8qKlxuICAgICAqIFRoZSBjdXJyZW50bHkgYWN0aXZlIE9iamVjdFJlbmRlcmVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5PYmplY3RSZW5kZXJlcn1cbiAgICAgKi9cbiAgICB0aGlzLmN1cnJlbnRSZW5kZXJlciA9IG5ldyBPYmplY3RSZW5kZXJlcih0aGlzKTtcblxuICAgIHRoaXMuaW5pdFBsdWdpbnMoKTtcblxuICAgIC8vIGluaXRpYWxpemUgdGhlIGNvbnRleHQgc28gaXQgaXMgcmVhZHkgZm9yIHRoZSBtYW5hZ2Vycy5cbiAgICB0aGlzLmdsID0gY3JlYXRlQ29udGV4dCh0aGlzLnZpZXcsIHRoaXMuX2NvbnRleHRPcHRpb25zKTtcblxuICAgIHRoaXMuX2luaXRDb250ZXh0KCk7XG5cbiAgICAvLyBtYXAgc29tZSB3ZWJHTCBibGVuZCBhbmQgZHJhd21vZGVzLi5cbiAgICB0aGlzLmJsZW5kTW9kZXMgPSBtYXBXZWJHTEJsZW5kTW9kZXNUb1BpeGkoZ2wpO1xuICAgIHRoaXMuZHJhd01vZGVzID0gbWFwV2ViR0xEcmF3TW9kZXNUb1BpeGkoZ2wpXG5cbiAgICB0aGlzLl9hY3RpdmVTaGFkZXIgPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogSG9sZHMgdGhlIGN1cnJlbnQgcmVuZGVyIHRhcmdldFxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5SZW5kZXJUYXJnZXR9XG4gICAgICovXG4gICAgdGhpcy5fYWN0aXZlUmVuZGVyVGFyZ2V0ID0gbnVsbDtcbiAgICB0aGlzLl9hY3RpdmVUZXh0dXJlTG9jYXRpb24gPSBudWxsO1xuICAgIHRoaXMuX2FjdGl2ZVRleHR1cmUgPSBudWxsO1xufVxuXG4vLyBjb25zdHJ1Y3RvclxuV2ViR0xSZW5kZXJlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFN5c3RlbVJlbmRlcmVyLnByb3RvdHlwZSk7XG5XZWJHTFJlbmRlcmVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFdlYkdMUmVuZGVyZXI7XG5tb2R1bGUuZXhwb3J0cyA9IFdlYkdMUmVuZGVyZXI7XG51dGlscy5wbHVnaW5UYXJnZXQubWl4aW4oV2ViR0xSZW5kZXJlcik7XG5cbi8qKlxuICogQ3JlYXRlcyB0aGUgV2ViR0wgY29udGV4dFxuICpcbiAqIEBwcml2YXRlXG4gKi9cbldlYkdMUmVuZGVyZXIucHJvdG90eXBlLl9pbml0Q29udGV4dCA9IGZ1bmN0aW9uICgpXG57XG4gICAgdmFyIGdsID0gdGhpcy5nbDtcblxuICAgIC8vIGNyZWF0ZSBhIHRleHR1cmUgbWFuYWdlci4uLlxuICAgIHRoaXMudGV4dHVyZU1hbmFnZXIgPSBuZXcgVGV4dHVyZU1hbmFnZXIoZ2wpO1xuXG4gICAgLy8gc2V0IHVwIHRoZSBkZWZhdWx0IHBpeGkgc2V0dGluZ3MuLlxuICAgIGdsLmRpc2FibGUoZ2wuREVQVEhfVEVTVCk7XG4gICAgZ2wuZGlzYWJsZShnbC5DVUxMX0ZBQ0UpO1xuICAgIGdsLmVuYWJsZShnbC5CTEVORCk7XG5cblxuICAgIHRoaXMucm9vdFJlbmRlclRhcmdldCA9IG5ldyBSZW5kZXJUYXJnZXQoZ2wsIHRoaXMud2lkdGgsIHRoaXMuaGVpZ2h0LCBudWxsLCB0aGlzLnJlc29sdXRpb24sIHRydWUpO1xuICAgIHRoaXMucm9vdFJlbmRlclRhcmdldC5jbGVhckNvbG9yID0gdGhpcy5fYmFja2dyb3VuZENvbG9yUmdiYTtcbiAgICBcbiAgICB0aGlzLmJpbmRSZW5kZXJUYXJnZXQodGhpcy5yb290UmVuZGVyVGFyZ2V0KTtcblxuICAgIHRoaXMuZW1pdCgnY29udGV4dCcsIGdsKTtcblxuICAgIC8vIHNldHVwIHRoZSB3aWR0aC9oZWlnaHQgcHJvcGVydGllcyBhbmQgZ2wgdmlld3BvcnRcbiAgICB0aGlzLnJlc2l6ZSh0aGlzLndpZHRoLCB0aGlzLmhlaWdodCk7ICAgIFxufTtcblxuLyoqXG4gKiBSZW5kZXJzIHRoZSBvYmplY3QgdG8gaXRzIHdlYkdMIHZpZXdcbiAqXG4gKiBAcGFyYW0gb2JqZWN0IHtQSVhJLkRpc3BsYXlPYmplY3R9IHRoZSBvYmplY3QgdG8gYmUgcmVuZGVyZWRcbiAqL1xuV2ViR0xSZW5kZXJlci5wcm90b3R5cGUucmVuZGVyID0gZnVuY3Rpb24gKGRpc3BsYXlPYmplY3QpXG57XG4gICAgdGhpcy5lbWl0KCdwcmVyZW5kZXInKTtcblxuICAgIC8vIG5vIHBvaW50IHJlbmRlcmluZyBpZiBvdXIgY29udGV4dCBoYXMgYmVlbiBibG93biB1cCFcbiAgICBpZiAodGhpcy5nbC5pc0NvbnRleHRMb3N0KCkpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5fbGFzdE9iamVjdFJlbmRlcmVkID0gZGlzcGxheU9iamVjdDtcblxuICAgIHZhciBjYWNoZVBhcmVudCA9IGRpc3BsYXlPYmplY3QucGFyZW50O1xuICAgIGRpc3BsYXlPYmplY3QucGFyZW50ID0gdGhpcy5fdGVtcERpc3BsYXlPYmplY3RQYXJlbnQ7XG4gICAgLy8gdXBkYXRlIHRoZSBzY2VuZSBncmFwaFxuICAgIGRpc3BsYXlPYmplY3QudXBkYXRlVHJhbnNmb3JtKCk7XG4gICAgZGlzcGxheU9iamVjdC5wYXJlbnQgPSBjYWNoZVBhcmVudDtcblxuICAgIHRoaXMucmVuZGVyRGlzcGxheU9iamVjdChkaXNwbGF5T2JqZWN0LCB0aGlzLnJvb3RSZW5kZXJUYXJnZXQsIHRoaXMuY2xlYXJCZWZvcmVSZW5kZXIpOy8vdGhpcy5wcm9qZWN0aW9uKTtcblxuICAgIHRoaXMuZW1pdCgncG9zdHJlbmRlcicpO1xufTtcblxuLyoqXG4gKiBSZW5kZXJzIGEgRGlzcGxheSBPYmplY3QuXG4gKlxuICogQHBhcmFtIGRpc3BsYXlPYmplY3Qge1BJWEkuRGlzcGxheU9iamVjdH0gVGhlIERpc3BsYXlPYmplY3QgdG8gcmVuZGVyXG4gKiBAcGFyYW0gcmVuZGVyVGFyZ2V0IHtQSVhJLlJlbmRlclRhcmdldH0gVGhlIHJlbmRlciB0YXJnZXQgdG8gdXNlIHRvIHJlbmRlciB0aGlzIGRpc3BsYXkgb2JqZWN0XG4gKlxuICovXG5XZWJHTFJlbmRlcmVyLnByb3RvdHlwZS5yZW5kZXJEaXNwbGF5T2JqZWN0ID0gZnVuY3Rpb24gKGRpc3BsYXlPYmplY3QsIHJlbmRlclRhcmdldCwgY2xlYXIpLy9wcm9qZWN0aW9uLCBidWZmZXIpXG57XG4gICAgdGhpcy5iaW5kUmVuZGVyVGFyZ2V0KHJlbmRlclRhcmdldCk7XG5cbiAgICBpZihjbGVhcilcbiAgICB7XG4gICAgICAgIHJlbmRlclRhcmdldC5jbGVhcigpO1xuICAgIH1cblxuICAgIC8vIHN0YXJ0IHRoZSBmaWx0ZXIgbWFuYWdlclxuICAgIHRoaXMuZmlsdGVyTWFuYWdlci5zZXRGaWx0ZXJTdGFjayggcmVuZGVyVGFyZ2V0LmZpbHRlclN0YWNrICk7XG5cbiAgICAvLyByZW5kZXIgdGhlIHNjZW5lIVxuICAgIGRpc3BsYXlPYmplY3QucmVuZGVyV2ViR0wodGhpcyk7XG5cbiAgICAvLyBmaW5pc2ggdGhlIGN1cnJlbnQgcmVuZGVyZXIuLlxuICAgIHRoaXMuY3VycmVudFJlbmRlcmVyLmZsdXNoKCk7XG59O1xuXG4vKipcbiAqIENoYW5nZXMgdGhlIGN1cnJlbnQgcmVuZGVyZXIgdG8gdGhlIG9uZSBnaXZlbiBpbiBwYXJhbWV0ZXJcbiAqXG4gKiBAcGFyYW0gb2JqZWN0UmVuZGVyZXIge1BJWEkuT2JqZWN0UmVuZGVyZXJ9IFRoZSBvYmplY3QgcmVuZGVyZXIgdG8gdXNlLlxuICovXG5XZWJHTFJlbmRlcmVyLnByb3RvdHlwZS5zZXRPYmplY3RSZW5kZXJlciA9IGZ1bmN0aW9uIChvYmplY3RSZW5kZXJlcilcbntcbiAgICBpZiAodGhpcy5jdXJyZW50UmVuZGVyZXIgPT09IG9iamVjdFJlbmRlcmVyKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuY3VycmVudFJlbmRlcmVyLnN0b3AoKTtcbiAgICB0aGlzLmN1cnJlbnRSZW5kZXJlciA9IG9iamVjdFJlbmRlcmVyO1xuICAgIHRoaXMuY3VycmVudFJlbmRlcmVyLnN0YXJ0KCk7XG59O1xuXG4vKipcbiAqIFJlc2l6ZXMgdGhlIHdlYkdMIHZpZXcgdG8gdGhlIHNwZWNpZmllZCB3aWR0aCBhbmQgaGVpZ2h0LlxuICpcbiAqIEBwYXJhbSB3aWR0aCB7bnVtYmVyfSB0aGUgbmV3IHdpZHRoIG9mIHRoZSB3ZWJHTCB2aWV3XG4gKiBAcGFyYW0gaGVpZ2h0IHtudW1iZXJ9IHRoZSBuZXcgaGVpZ2h0IG9mIHRoZSB3ZWJHTCB2aWV3XG4gKi9cbldlYkdMUmVuZGVyZXIucHJvdG90eXBlLnJlc2l6ZSA9IGZ1bmN0aW9uICh3aWR0aCwgaGVpZ2h0KVxue1xuICAgIFN5c3RlbVJlbmRlcmVyLnByb3RvdHlwZS5yZXNpemUuY2FsbCh0aGlzLCB3aWR0aCwgaGVpZ2h0KTtcblxuICAgIHRoaXMuZmlsdGVyTWFuYWdlci5yZXNpemUod2lkdGgsIGhlaWdodCk7XG4gICAgdGhpcy5yb290UmVuZGVyVGFyZ2V0LnJlc2l6ZSh3aWR0aCwgaGVpZ2h0KTtcblxuICAgIGlmKHRoaXMuY3VycmVudFJlbmRlclRhcmdldCA9PT0gdGhpcy5yZW5kZXJUYXJnZXQpXG4gICAge1xuICAgICAgICB0aGlzLnJvb3RSZW5kZXJUYXJnZXQuYWN0aXZhdGUoKTtcbiAgICB9XG59O1xuXG4vKipcbiAqIENoYW5nZXMgdGhlIGN1cnJlbnQgcmVuZGVyIHRhcmdldCB0byB0aGUgb25lIGdpdmVuIGluIHBhcmFtZXRlclxuICpcbiAqIEBwYXJhbSByZW5kZXJUYXJnZXQge1BJWEkuUmVuZGVyVGFyZ2V0fSB0aGUgbmV3IHJlbmRlciB0YXJnZXRcbiAqL1xuV2ViR0xSZW5kZXJlci5wcm90b3R5cGUuYmluZFJlbmRlclRhcmdldCA9IGZ1bmN0aW9uIChyZW5kZXJUYXJnZXQpLy9wcm9qZWN0aW9uLCBidWZmZXIpXG57XG4gICAgaWYocmVuZGVyVGFyZ2V0ICE9PSB0aGlzLl9hY3RpdmVSZW5kZXJUYXJnZXQpXG4gICAge1xuICAgICAgICB0aGlzLl9hY3RpdmVSZW5kZXJUYXJnZXQgPSByZW5kZXJUYXJnZXQ7XG5cbiAgICAgICAgaWYodGhpcy5fYWN0aXZlU2hhZGVyKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLl9hY3RpdmVTaGFkZXIudW5pZm9ybXMucHJvamVjdGlvbk1hdHJpeCA9IHJlbmRlclRhcmdldC5wcm9qZWN0aW9uTWF0cml4LnRvQXJyYXkodHJ1ZSk7XG4gICAgICAgIH1cblxuICAgICAgICByZW5kZXJUYXJnZXQuYWN0aXZhdGUoKTtcblxuICAgICAgICB0aGlzLnN0ZW5jaWxNYW5hZ2VyLnNldE1hc2tTdGFjayggcmVuZGVyVGFyZ2V0LnN0ZW5jaWxNYXNrU3RhY2sgKTtcbiAgICB9XG59XG5cbldlYkdMUmVuZGVyZXIucHJvdG90eXBlLmJpbmRTaGFkZXIgPSBmdW5jdGlvbiAoc2hhZGVyKS8vcHJvamVjdGlvbiwgYnVmZmVyKVxue1xuICAgIC8vVE9ETyBjYWNoZVxuICAgIGlmKHRoaXMuX2FjdGl2ZVNoYWRlciAhPT0gc2hhZGVyKVxuICAgIHtcbiAgICAgICAgdGhpcy5fYWN0aXZlU2hhZGVyID0gc2hhZGVyO1xuICAgICAgICBzaGFkZXIuYmluZCgpO1xuXG4gICAgICAgIC8vIGF1dG9tYXRpY2FsbHkgc2V0IHRoZSBwcm9qZWN0aW9uIG1hdHJpeFxuICAgICAgICBzaGFkZXIudW5pZm9ybXMucHJvamVjdGlvbk1hdHJpeCA9IHRoaXMuX2FjdGl2ZVJlbmRlclRhcmdldC5wcm9qZWN0aW9uTWF0cml4LnRvQXJyYXkodHJ1ZSk7XG4gICAgfVxufVxuXG5cbldlYkdMUmVuZGVyZXIucHJvdG90eXBlLmJpbmRUZXh0dXJlID0gZnVuY3Rpb24gKHRleHR1cmUsIGxvY2F0aW9uKVxue1xuICAgIHZhciBnbCA9IHRoaXMuZ2w7XG5cbiAgICAvL1RPRE8gdGVzdCBwZXJmIG9mIGNhY2hlP1xuICAgIGxvY2F0aW9uID0gbG9jYXRpb24gfHwgMDtcblxuICAgIGlmKHRoaXMuX2FjdGl2ZVRleHR1cmVMb2NhdGlvbiAhPT0gbG9jYXRpb24pLy9cbiAgICB7XG4gICAgICAgIHRoaXMuX2FjdGl2ZVRleHR1cmVMb2NhdGlvbiA9IGxvY2F0aW9uXG4gICAgICAgIGdsLmFjdGl2ZVRleHR1cmUoZ2wuVEVYVFVSRTAgKyBsb2NhdGlvbiApO1xuICAgIH1cblxuICAgIC8vVE9ETyAtIGNhbiB3ZSBjYWNoZSB0aGlzIHRleHR1cmUgdG9vP1xuICAgIHRoaXMuX2FjdGl2ZVRleHR1cmUgPSB0ZXh0dXJlOyAgICAgIFxuICAgIFxuICAgIGlmICghdGV4dHVyZS5fZ2xUZXh0dXJlc1tnbC5pZF0pXG4gICAge1xuICAgICAgICAvLyB0aGlzIHdpbGwgYWxzbyBiaW5kIHRoZSB0ZXh0dXJlLi5cbiAgICAgICAgdGhpcy50ZXh0dXJlTWFuYWdlci51cGRhdGVUZXh0dXJlKHRleHR1cmUpO1xuICAgIH1cbiAgICBlbHNlXG4gICAgeyAgIFxuICAgICAgICAvLyBiaW5kIHRoZSBjdXJyZW50IHRleHR1cmVcbiAgICAgICAgdGV4dHVyZS5fZ2xUZXh0dXJlc1tnbC5pZF0uYmluZCgpO1xuICAgIH1cbn1cblxuXG4vKipcbiAqIEhhbmRsZXMgYSBsb3N0IHdlYmdsIGNvbnRleHRcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5XZWJHTFJlbmRlcmVyLnByb3RvdHlwZS5oYW5kbGVDb250ZXh0TG9zdCA9IGZ1bmN0aW9uIChldmVudClcbntcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xufTtcblxuLyoqXG4gKiBIYW5kbGVzIGEgcmVzdG9yZWQgd2ViZ2wgY29udGV4dFxuICpcbiAqIEBwcml2YXRlXG4gKi9cbldlYkdMUmVuZGVyZXIucHJvdG90eXBlLmhhbmRsZUNvbnRleHRSZXN0b3JlZCA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy5faW5pdENvbnRleHQoKTtcbiAgICB0aGlzLnRleHR1cmVNYW5hZ2VyLnJlbW92ZUFsbCgpO1xufTtcblxuLyoqXG4gKiBSZW1vdmVzIGV2ZXJ5dGhpbmcgZnJvbSB0aGUgcmVuZGVyZXIgKGV2ZW50IGxpc3RlbmVycywgc3ByaXRlYmF0Y2gsIGV0Yy4uLilcbiAqXG4gKiBAcGFyYW0gW3JlbW92ZVZpZXc9ZmFsc2VdIHtib29sZWFufSBSZW1vdmVzIHRoZSBDYW52YXMgZWxlbWVudCBmcm9tIHRoZSBET00uXG4gKi9cbldlYkdMUmVuZGVyZXIucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAocmVtb3ZlVmlldylcbntcbiAgICB0aGlzLmRlc3Ryb3lQbHVnaW5zKCk7XG5cbiAgICAvLyByZW1vdmUgbGlzdGVuZXJzXG4gICAgdGhpcy52aWV3LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3dlYmdsY29udGV4dGxvc3QnLCB0aGlzLmhhbmRsZUNvbnRleHRMb3N0KTtcbiAgICB0aGlzLnZpZXcucmVtb3ZlRXZlbnRMaXN0ZW5lcignd2ViZ2xjb250ZXh0cmVzdG9yZWQnLCB0aGlzLmhhbmRsZUNvbnRleHRSZXN0b3JlZCk7XG5cbiAgICB0aGlzLnRleHR1cmVNYW5hZ2VyLmRlc3Ryb3lBbGwoKTtcblxuICAgIC8vIGNhbGwgYmFzZSBkZXN0cm95XG4gICAgU3lzdGVtUmVuZGVyZXIucHJvdG90eXBlLmRlc3Ryb3kuY2FsbCh0aGlzLCByZW1vdmVWaWV3KTtcblxuICAgIHRoaXMudWlkID0gMDtcblxuICAgIC8vIGRlc3Ryb3kgdGhlIG1hbmFnZXJzXG4gICAgdGhpcy5zaGFkZXJNYW5hZ2VyLmRlc3Ryb3koKTtcbiAgICB0aGlzLm1hc2tNYW5hZ2VyLmRlc3Ryb3koKTtcbiAgICB0aGlzLnN0ZW5jaWxNYW5hZ2VyLmRlc3Ryb3koKTtcbiAgICB0aGlzLmZpbHRlck1hbmFnZXIuZGVzdHJveSgpO1xuICAgIHRoaXMuYmxlbmRNb2RlTWFuYWdlci5kZXN0cm95KCk7XG5cbiAgICB0aGlzLnNoYWRlck1hbmFnZXIgPSBudWxsO1xuICAgIHRoaXMubWFza01hbmFnZXIgPSBudWxsO1xuICAgIHRoaXMuZmlsdGVyTWFuYWdlciA9IG51bGw7XG4gICAgdGhpcy5ibGVuZE1vZGVNYW5hZ2VyID0gbnVsbDtcbiAgICB0aGlzLmN1cnJlbnRSZW5kZXJlciA9IG51bGw7XG5cbiAgICB0aGlzLmhhbmRsZUNvbnRleHRMb3N0ID0gbnVsbDtcbiAgICB0aGlzLmhhbmRsZUNvbnRleHRSZXN0b3JlZCA9IG51bGw7XG5cbiAgICB0aGlzLl9jb250ZXh0T3B0aW9ucyA9IG51bGw7XG5cbiAgICB0aGlzLmdsLnVzZVByb2dyYW0obnVsbCk7XG4gICAgdGhpcy5nbCA9IG51bGw7XG59O1xuXG4iLCJ2YXIgRGVmYXVsdFNoYWRlciA9IHJlcXVpcmUoJy4uL3NoYWRlcnMvVGV4dHVyZVNoYWRlcicpO1xuXG4vKipcbiAqIFRoaXMgaXMgdGhlIGJhc2UgY2xhc3MgZm9yIGNyZWF0aW5nIGEgUElYSSBmaWx0ZXIuIEN1cnJlbnRseSBvbmx5IFdlYkdMIHN1cHBvcnRzIGZpbHRlcnMuXG4gKiBJZiB5b3Ugd2FudCB0byBtYWtlIGEgY3VzdG9tIGZpbHRlciB0aGlzIHNob3VsZCBiZSB5b3VyIGJhc2UgY2xhc3MuXG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIHZlcnRleFNyYyB7c3RyaW5nfHN0cmluZ1tdfSBUaGUgdmVydGV4IHNoYWRlciBzb3VyY2UgYXMgYW4gYXJyYXkgb2Ygc3RyaW5ncy5cbiAqIEBwYXJhbSBmcmFnbWVudFNyYyB7c3RyaW5nfHN0cmluZ1tdfSBUaGUgZnJhZ21lbnQgc2hhZGVyIHNvdXJjZSBhcyBhbiBhcnJheSBvZiBzdHJpbmdzLlxuICogQHBhcmFtIHVuaWZvcm1zIHtvYmplY3R9IEFuIG9iamVjdCBjb250YWluaW5nIHRoZSB1bmlmb3JtcyBmb3IgdGhpcyBmaWx0ZXIuXG4gKi9cbmZ1bmN0aW9uIEFic3RyYWN0RmlsdGVyKHZlcnRleFNyYywgZnJhZ21lbnRTcmMsIHVuaWZvcm1zKVxue1xuXG4gICAgLyoqXG4gICAgICogQW4gYXJyYXkgb2Ygc2hhZGVyc1xuICAgICAqIEBtZW1iZXIge1BJWEkuU2hhZGVyW119XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLnNoYWRlcnMgPSBbXTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBleHRyYSBwYWRkaW5nIHRoYXQgdGhlIGZpbHRlciBtaWdodCBuZWVkXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMucGFkZGluZyA9IDA7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgdW5pZm9ybXMgYXMgYW4gb2JqZWN0XG4gICAgICogQG1lbWJlciB7b2JqZWN0fVxuICAgICAqL1xuICAgIHRoaXMudW5pZm9ybXMgPSB1bmlmb3JtcyB8fCB7fTtcblxuXG4gICAgLyoqXG4gICAgICogVGhlIGNvZGUgb2YgdGhlIHZlcnRleCBzaGFkZXJcbiAgICAgKiBAbWVtYmVyIHtzdHJpbmdbXX1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMudmVydGV4U3JjID0gdmVydGV4U3JjIHx8IERlZmF1bHRTaGFkZXIuZGVmYXVsdFZlcnRleFNyYztcblxuICAgIC8qKlxuICAgICAqIFRoZSBjb2RlIG9mIHRoZSBmcmFtZW50IHNoYWRlclxuICAgICAqIEBtZW1iZXIge3N0cmluZ1tdfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5mcmFnbWVudFNyYyA9IGZyYWdtZW50U3JjIHx8IERlZmF1bHRTaGFkZXIuZGVmYXVsdEZyYWdtZW50U3JjO1xuXG4gICAgLy9UT0RPIGEgcmVtaW5kZXIgLSB3b3VsZCBiZSBjb29sIHRvIGhhdmUgbG93ZXIgcmVzIGZpbHRlcnMgYXMgdGhpcyB3b3VsZCBnaXZlIGJldHRlciBwZXJmb3JtYW5jZS5cblxuICAgIC8vdHlwZW9mIGZyYWdtZW50U3JjID09PSAnc3RyaW5nJyA/IGZyYWdtZW50U3JjLnNwbGl0KCcnKSA6IChmcmFnbWVudFNyYyB8fCBbXSk7XG5cbn1cblxuQWJzdHJhY3RGaWx0ZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gQWJzdHJhY3RGaWx0ZXI7XG5tb2R1bGUuZXhwb3J0cyA9IEFic3RyYWN0RmlsdGVyO1xuXG4vKipcbiAqIEdyYWJzIGEgc2hhZGVyIGZyb20gdGhlIGN1cnJlbnQgcmVuZGVyZXJcbiAqXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcn0gVGhlIHJlbmRlcmVyIHRvIHJldHJpZXZlIHRoZSBzaGFkZXIgZnJvbVxuICovXG5BYnN0cmFjdEZpbHRlci5wcm90b3R5cGUuZ2V0U2hhZGVyID0gZnVuY3Rpb24gKHJlbmRlcmVyKVxue1xuICAgIHZhciBnbCA9IHJlbmRlcmVyLmdsO1xuXG4gICAgdmFyIHNoYWRlciA9IHRoaXMuc2hhZGVyc1tnbC5pZF07XG5cbiAgICBpZiAoIXNoYWRlcilcbiAgICB7XG4gICAgICAgIHNoYWRlciA9IG5ldyBEZWZhdWx0U2hhZGVyKHJlbmRlcmVyLnNoYWRlck1hbmFnZXIsXG4gICAgICAgICAgICB0aGlzLnZlcnRleFNyYyxcbiAgICAgICAgICAgIHRoaXMuZnJhZ21lbnRTcmMsXG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLFxuICAgICAgICAgICAgdGhpcy5hdHRyaWJ1dGVzXG4gICAgICAgICk7XG5cbiAgICAgICAgdGhpcy5zaGFkZXJzW2dsLmlkXSA9IHNoYWRlcjtcbiAgICB9XG5cbiAgICByZXR1cm4gc2hhZGVyO1xufTtcblxuLyoqXG4gKiBBcHBsaWVzIHRoZSBmaWx0ZXJcbiAqXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcn0gVGhlIHJlbmRlcmVyIHRvIHJldHJpZXZlIHRoZSBmaWx0ZXIgZnJvbVxuICogQHBhcmFtIGlucHV0IHtQSVhJLlJlbmRlclRhcmdldH1cbiAqIEBwYXJhbSBvdXRwdXQge1BJWEkuUmVuZGVyVGFyZ2V0fVxuICogQHBhcmFtIGNsZWFyIHtib29sZWFufSBXaGV0aGVyIG9yIG5vdCB3ZSB3YW50IHRvIGNsZWFyIHRoZSBvdXRwdXRUYXJnZXRcbiAqL1xuQWJzdHJhY3RGaWx0ZXIucHJvdG90eXBlLmFwcGx5RmlsdGVyID0gZnVuY3Rpb24gKHJlbmRlcmVyLCBpbnB1dCwgb3V0cHV0LCBjbGVhcilcbntcbiAgICB2YXIgc2hhZGVyID0gdGhpcy5nZXRTaGFkZXIocmVuZGVyZXIpO1xuXG4gICAgcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5hcHBseUZpbHRlcihzaGFkZXIsIGlucHV0LCBvdXRwdXQsIGNsZWFyKTtcbn07XG5cbi8qKlxuICogU3luY3MgYSB1bmlmb3JtIGJldHdlZW4gdGhlIGNsYXNzIG9iamVjdCBhbmQgdGhlIHNoYWRlcnMuXG4gKlxuICovXG5BYnN0cmFjdEZpbHRlci5wcm90b3R5cGUuc3luY1VuaWZvcm0gPSBmdW5jdGlvbiAodW5pZm9ybSlcbntcbiAgICBmb3IgKHZhciBpID0gMCwgaiA9IHRoaXMuc2hhZGVycy5sZW5ndGg7IGkgPCBqOyArK2kpXG4gICAge1xuICAgICAgICB0aGlzLnNoYWRlcnNbaV0uc3luY1VuaWZvcm0odW5pZm9ybSk7XG4gICAgfVxufTtcbiIsInZhciBBYnN0cmFjdEZpbHRlciA9IHJlcXVpcmUoJy4vQWJzdHJhY3RGaWx0ZXInKTtcbi8vIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL3N1YnN0YWNrL2JyZnMvaXNzdWVzLzI1XG5cblxuLyoqXG4gKlxuICogQmFzaWMgRlhBQSBpbXBsZW1lbnRhdGlvbiBiYXNlZCBvbiB0aGUgY29kZSBvbiBnZWVrczNkLmNvbSB3aXRoIHRoZVxuICogbW9kaWZpY2F0aW9uIHRoYXQgdGhlIHRleHR1cmUyRExvZCBzdHVmZiB3YXMgcmVtb3ZlZCBzaW5jZSBpdCdzXG4gKiB1bnN1cHBvcnRlZCBieSBXZWJHTC5cbiAqXG4gKiAtLVxuICogRnJvbTpcbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS9taXRzdWhpa28vd2ViZ2wtbWVpbmNyYWZ0XG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLkFic3RyYWN0RmlsdGVyXG4gKiBAbWVtYmVyb2YgUElYSVxuICpcbiAqL1xuZnVuY3Rpb24gRlhBQUZpbHRlcigpXG57XG4gICAgQWJzdHJhY3RGaWx0ZXIuY2FsbCh0aGlzLFxuICAgICAgICAvLyB2ZXJ0ZXggc2hhZGVyXG4gICAgICAgIFwiXFxucHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XFxuXFxuYXR0cmlidXRlIHZlYzIgYVZlcnRleFBvc2l0aW9uO1xcbmF0dHJpYnV0ZSB2ZWMyIGFUZXh0dXJlQ29vcmQ7XFxuYXR0cmlidXRlIHZlYzQgYUNvbG9yO1xcblxcbnVuaWZvcm0gbWF0MyBwcm9qZWN0aW9uTWF0cml4O1xcbnVuaWZvcm0gdmVjMiByZXNvbHV0aW9uO1xcblxcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xcbnZhcnlpbmcgdmVjNCB2Q29sb3I7XFxuXFxudmFyeWluZyB2ZWMyIHZSZXNvbHV0aW9uO1xcblxcbi8vdGV4Y29vcmRzIGNvbXB1dGVkIGluIHZlcnRleCBzdGVwXFxuLy90byBhdm9pZCBkZXBlbmRlbnQgdGV4dHVyZSByZWFkc1xcbnZhcnlpbmcgdmVjMiB2X3JnYk5XO1xcbnZhcnlpbmcgdmVjMiB2X3JnYk5FO1xcbnZhcnlpbmcgdmVjMiB2X3JnYlNXO1xcbnZhcnlpbmcgdmVjMiB2X3JnYlNFO1xcbnZhcnlpbmcgdmVjMiB2X3JnYk07XFxuXFxuXFxudm9pZCB0ZXhjb29yZHModmVjMiBmcmFnQ29vcmQsIHZlYzIgcmVzb2x1dGlvbixcXG4gICAgICAgICAgICBvdXQgdmVjMiB2X3JnYk5XLCBvdXQgdmVjMiB2X3JnYk5FLFxcbiAgICAgICAgICAgIG91dCB2ZWMyIHZfcmdiU1csIG91dCB2ZWMyIHZfcmdiU0UsXFxuICAgICAgICAgICAgb3V0IHZlYzIgdl9yZ2JNKSB7XFxuICAgIHZlYzIgaW52ZXJzZVZQID0gMS4wIC8gcmVzb2x1dGlvbi54eTtcXG4gICAgdl9yZ2JOVyA9IChmcmFnQ29vcmQgKyB2ZWMyKC0xLjAsIC0xLjApKSAqIGludmVyc2VWUDtcXG4gICAgdl9yZ2JORSA9IChmcmFnQ29vcmQgKyB2ZWMyKDEuMCwgLTEuMCkpICogaW52ZXJzZVZQO1xcbiAgICB2X3JnYlNXID0gKGZyYWdDb29yZCArIHZlYzIoLTEuMCwgMS4wKSkgKiBpbnZlcnNlVlA7XFxuICAgIHZfcmdiU0UgPSAoZnJhZ0Nvb3JkICsgdmVjMigxLjAsIDEuMCkpICogaW52ZXJzZVZQO1xcbiAgICB2X3JnYk0gPSB2ZWMyKGZyYWdDb29yZCAqIGludmVyc2VWUCk7XFxufVxcblxcbnZvaWQgbWFpbih2b2lkKXtcXG4gICBnbF9Qb3NpdGlvbiA9IHZlYzQoKHByb2plY3Rpb25NYXRyaXggKiB2ZWMzKGFWZXJ0ZXhQb3NpdGlvbiwgMS4wKSkueHksIDAuMCwgMS4wKTtcXG4gICB2VGV4dHVyZUNvb3JkID0gYVRleHR1cmVDb29yZDtcXG4gICB2Q29sb3IgPSB2ZWM0KGFDb2xvci5yZ2IgKiBhQ29sb3IuYSwgYUNvbG9yLmEpO1xcbiAgIHZSZXNvbHV0aW9uID0gcmVzb2x1dGlvbjtcXG5cXG4gICAvL2NvbXB1dGUgdGhlIHRleHR1cmUgY29vcmRzIGFuZCBzZW5kIHRoZW0gdG8gdmFyeWluZ3NcXG4gICB0ZXhjb29yZHMoYVRleHR1cmVDb29yZCAqIHJlc29sdXRpb24sIHJlc29sdXRpb24sIHZfcmdiTlcsIHZfcmdiTkUsIHZfcmdiU1csIHZfcmdiU0UsIHZfcmdiTSk7XFxufVxcblwiLFxuICAgICAgICAvLyBmcmFnbWVudCBzaGFkZXJcbiAgICAgICAgXCJwcmVjaXNpb24gbG93cCBmbG9hdDtcXG5cXG5cXG4vKipcXG5CYXNpYyBGWEFBIGltcGxlbWVudGF0aW9uIGJhc2VkIG9uIHRoZSBjb2RlIG9uIGdlZWtzM2QuY29tIHdpdGggdGhlXFxubW9kaWZpY2F0aW9uIHRoYXQgdGhlIHRleHR1cmUyRExvZCBzdHVmZiB3YXMgcmVtb3ZlZCBzaW5jZSBpdCdzXFxudW5zdXBwb3J0ZWQgYnkgV2ViR0wuXFxuXFxuLS1cXG5cXG5Gcm9tOlxcbmh0dHBzOi8vZ2l0aHViLmNvbS9taXRzdWhpa28vd2ViZ2wtbWVpbmNyYWZ0XFxuXFxuQ29weXJpZ2h0IChjKSAyMDExIGJ5IEFybWluIFJvbmFjaGVyLlxcblxcblNvbWUgcmlnaHRzIHJlc2VydmVkLlxcblxcblJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dFxcbm1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmVcXG5tZXQ6XFxuXFxuICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHRcXG4gICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuXFxuXFxuICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZVxcbiAgICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nXFxuICAgICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkXFxuICAgICAgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLlxcblxcbiAgICAqIFRoZSBuYW1lcyBvZiB0aGUgY29udHJpYnV0b3JzIG1heSBub3QgYmUgdXNlZCB0byBlbmRvcnNlIG9yXFxuICAgICAgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljXFxuICAgICAgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLlxcblxcblRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlNcXG5cXFwiQVMgSVNcXFwiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVFxcbkxJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUlxcbkEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUXFxuT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsXFxuU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVFxcbkxJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLFxcbkRBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWVxcblRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlRcXG4oSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0VcXG5PRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLlxcbiovXFxuXFxuI2lmbmRlZiBGWEFBX1JFRFVDRV9NSU5cXG4gICAgI2RlZmluZSBGWEFBX1JFRFVDRV9NSU4gICAoMS4wLyAxMjguMClcXG4jZW5kaWZcXG4jaWZuZGVmIEZYQUFfUkVEVUNFX01VTFxcbiAgICAjZGVmaW5lIEZYQUFfUkVEVUNFX01VTCAgICgxLjAgLyA4LjApXFxuI2VuZGlmXFxuI2lmbmRlZiBGWEFBX1NQQU5fTUFYXFxuICAgICNkZWZpbmUgRlhBQV9TUEFOX01BWCAgICAgOC4wXFxuI2VuZGlmXFxuXFxuLy9vcHRpbWl6ZWQgdmVyc2lvbiBmb3IgbW9iaWxlLCB3aGVyZSBkZXBlbmRlbnRcXG4vL3RleHR1cmUgcmVhZHMgY2FuIGJlIGEgYm90dGxlbmVja1xcbnZlYzQgZnhhYShzYW1wbGVyMkQgdGV4LCB2ZWMyIGZyYWdDb29yZCwgdmVjMiByZXNvbHV0aW9uLFxcbiAgICAgICAgICAgIHZlYzIgdl9yZ2JOVywgdmVjMiB2X3JnYk5FLFxcbiAgICAgICAgICAgIHZlYzIgdl9yZ2JTVywgdmVjMiB2X3JnYlNFLFxcbiAgICAgICAgICAgIHZlYzIgdl9yZ2JNKSB7XFxuICAgIHZlYzQgY29sb3I7XFxuICAgIG1lZGl1bXAgdmVjMiBpbnZlcnNlVlAgPSB2ZWMyKDEuMCAvIHJlc29sdXRpb24ueCwgMS4wIC8gcmVzb2x1dGlvbi55KTtcXG4gICAgdmVjMyByZ2JOVyA9IHRleHR1cmUyRCh0ZXgsIHZfcmdiTlcpLnh5ejtcXG4gICAgdmVjMyByZ2JORSA9IHRleHR1cmUyRCh0ZXgsIHZfcmdiTkUpLnh5ejtcXG4gICAgdmVjMyByZ2JTVyA9IHRleHR1cmUyRCh0ZXgsIHZfcmdiU1cpLnh5ejtcXG4gICAgdmVjMyByZ2JTRSA9IHRleHR1cmUyRCh0ZXgsIHZfcmdiU0UpLnh5ejtcXG4gICAgdmVjNCB0ZXhDb2xvciA9IHRleHR1cmUyRCh0ZXgsIHZfcmdiTSk7XFxuICAgIHZlYzMgcmdiTSAgPSB0ZXhDb2xvci54eXo7XFxuICAgIHZlYzMgbHVtYSA9IHZlYzMoMC4yOTksIDAuNTg3LCAwLjExNCk7XFxuICAgIGZsb2F0IGx1bWFOVyA9IGRvdChyZ2JOVywgbHVtYSk7XFxuICAgIGZsb2F0IGx1bWFORSA9IGRvdChyZ2JORSwgbHVtYSk7XFxuICAgIGZsb2F0IGx1bWFTVyA9IGRvdChyZ2JTVywgbHVtYSk7XFxuICAgIGZsb2F0IGx1bWFTRSA9IGRvdChyZ2JTRSwgbHVtYSk7XFxuICAgIGZsb2F0IGx1bWFNICA9IGRvdChyZ2JNLCAgbHVtYSk7XFxuICAgIGZsb2F0IGx1bWFNaW4gPSBtaW4obHVtYU0sIG1pbihtaW4obHVtYU5XLCBsdW1hTkUpLCBtaW4obHVtYVNXLCBsdW1hU0UpKSk7XFxuICAgIGZsb2F0IGx1bWFNYXggPSBtYXgobHVtYU0sIG1heChtYXgobHVtYU5XLCBsdW1hTkUpLCBtYXgobHVtYVNXLCBsdW1hU0UpKSk7XFxuXFxuICAgIG1lZGl1bXAgdmVjMiBkaXI7XFxuICAgIGRpci54ID0gLSgobHVtYU5XICsgbHVtYU5FKSAtIChsdW1hU1cgKyBsdW1hU0UpKTtcXG4gICAgZGlyLnkgPSAgKChsdW1hTlcgKyBsdW1hU1cpIC0gKGx1bWFORSArIGx1bWFTRSkpO1xcblxcbiAgICBmbG9hdCBkaXJSZWR1Y2UgPSBtYXgoKGx1bWFOVyArIGx1bWFORSArIGx1bWFTVyArIGx1bWFTRSkgKlxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKDAuMjUgKiBGWEFBX1JFRFVDRV9NVUwpLCBGWEFBX1JFRFVDRV9NSU4pO1xcblxcbiAgICBmbG9hdCByY3BEaXJNaW4gPSAxLjAgLyAobWluKGFicyhkaXIueCksIGFicyhkaXIueSkpICsgZGlyUmVkdWNlKTtcXG4gICAgZGlyID0gbWluKHZlYzIoRlhBQV9TUEFOX01BWCwgRlhBQV9TUEFOX01BWCksXFxuICAgICAgICAgICAgICBtYXgodmVjMigtRlhBQV9TUEFOX01BWCwgLUZYQUFfU1BBTl9NQVgpLFxcbiAgICAgICAgICAgICAgZGlyICogcmNwRGlyTWluKSkgKiBpbnZlcnNlVlA7XFxuXFxuICAgIHZlYzMgcmdiQSA9IDAuNSAqIChcXG4gICAgICAgIHRleHR1cmUyRCh0ZXgsIGZyYWdDb29yZCAqIGludmVyc2VWUCArIGRpciAqICgxLjAgLyAzLjAgLSAwLjUpKS54eXogK1xcbiAgICAgICAgdGV4dHVyZTJEKHRleCwgZnJhZ0Nvb3JkICogaW52ZXJzZVZQICsgZGlyICogKDIuMCAvIDMuMCAtIDAuNSkpLnh5eik7XFxuICAgIHZlYzMgcmdiQiA9IHJnYkEgKiAwLjUgKyAwLjI1ICogKFxcbiAgICAgICAgdGV4dHVyZTJEKHRleCwgZnJhZ0Nvb3JkICogaW52ZXJzZVZQICsgZGlyICogLTAuNSkueHl6ICtcXG4gICAgICAgIHRleHR1cmUyRCh0ZXgsIGZyYWdDb29yZCAqIGludmVyc2VWUCArIGRpciAqIDAuNSkueHl6KTtcXG5cXG4gICAgZmxvYXQgbHVtYUIgPSBkb3QocmdiQiwgbHVtYSk7XFxuICAgIGlmICgobHVtYUIgPCBsdW1hTWluKSB8fCAobHVtYUIgPiBsdW1hTWF4KSlcXG4gICAgICAgIGNvbG9yID0gdmVjNChyZ2JBLCB0ZXhDb2xvci5hKTtcXG4gICAgZWxzZVxcbiAgICAgICAgY29sb3IgPSB2ZWM0KHJnYkIsIHRleENvbG9yLmEpO1xcbiAgICByZXR1cm4gY29sb3I7XFxufVxcblxcblxcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xcbnZhcnlpbmcgdmVjNCB2Q29sb3I7XFxudmFyeWluZyB2ZWMyIHZSZXNvbHV0aW9uO1xcblxcbi8vdGV4Y29vcmRzIGNvbXB1dGVkIGluIHZlcnRleCBzdGVwXFxuLy90byBhdm9pZCBkZXBlbmRlbnQgdGV4dHVyZSByZWFkc1xcbnZhcnlpbmcgdmVjMiB2X3JnYk5XO1xcbnZhcnlpbmcgdmVjMiB2X3JnYk5FO1xcbnZhcnlpbmcgdmVjMiB2X3JnYlNXO1xcbnZhcnlpbmcgdmVjMiB2X3JnYlNFO1xcbnZhcnlpbmcgdmVjMiB2X3JnYk07XFxuXFxudW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXI7XFxuXFxuXFxudm9pZCBtYWluKHZvaWQpe1xcblxcbiAgICBnbF9GcmFnQ29sb3IgPSBmeGFhKHVTYW1wbGVyLCB2VGV4dHVyZUNvb3JkICogdlJlc29sdXRpb24sIHZSZXNvbHV0aW9uLCB2X3JnYk5XLCB2X3JnYk5FLCB2X3JnYlNXLCB2X3JnYlNFLCB2X3JnYk0pO1xcblxcbn1cXG5cIixcbiAgICAgICAgLy8gdW5pZm9ybXNcbiAgICAgICAge1xuICAgICAgICAgICAgcmVzb2x1dGlvbjogeyB0eXBlOiAndjInLCB2YWx1ZTogeyB4OiAxLCB5OiAxIH0gfVxuICAgICAgICB9XG4gICAgKTtcblxufVxuXG5GWEFBRmlsdGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoQWJzdHJhY3RGaWx0ZXIucHJvdG90eXBlKTtcbkZYQUFGaWx0ZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gRlhBQUZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gRlhBQUZpbHRlcjtcblxuLyoqXG4gKiBBcHBsaWVzIHRoZSBmaWx0ZXJcbiAqXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcn0gVGhlIHJlbmRlcmVyIHRvIHJldHJpZXZlIHRoZSBmaWx0ZXIgZnJvbVxuICogQHBhcmFtIGlucHV0IHtQSVhJLlJlbmRlclRhcmdldH1cbiAqIEBwYXJhbSBvdXRwdXQge1BJWEkuUmVuZGVyVGFyZ2V0fVxuICovXG5GWEFBRmlsdGVyLnByb3RvdHlwZS5hcHBseUZpbHRlciA9IGZ1bmN0aW9uIChyZW5kZXJlciwgaW5wdXQsIG91dHB1dClcbntcbiAgICB2YXIgZmlsdGVyTWFuYWdlciA9IHJlbmRlcmVyLmZpbHRlck1hbmFnZXI7XG5cbiAgICB2YXIgc2hhZGVyID0gdGhpcy5nZXRTaGFkZXIoIHJlbmRlcmVyICk7XG4gICAgIC8vIGRyYXcgdGhlIGZpbHRlci4uLlxuICAgIGZpbHRlck1hbmFnZXIuYXBwbHlGaWx0ZXIoc2hhZGVyLCBpbnB1dCwgb3V0cHV0KTtcbn07XG4iLCJ2YXIgQWJzdHJhY3RGaWx0ZXIgPSByZXF1aXJlKCcuL0Fic3RyYWN0RmlsdGVyJyksXG4gICAgbWF0aCA9ICByZXF1aXJlKCcuLi8uLi8uLi9tYXRoJyk7XG5cbi8vIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL3N1YnN0YWNrL2JyZnMvaXNzdWVzLzI1XG5cblxuLyoqXG4gKiBUaGUgU3ByaXRlTWFza0ZpbHRlciBjbGFzc1xuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5BYnN0cmFjdEZpbHRlclxuICogQG1lbWJlcm9mIFBJWElcbiAqIEBwYXJhbSBzcHJpdGUge1BJWEkuU3ByaXRlfSB0aGUgdGFyZ2V0IHNwcml0ZVxuICovXG5mdW5jdGlvbiBTcHJpdGVNYXNrRmlsdGVyKHNwcml0ZSlcbntcbiAgICB2YXIgbWFza01hdHJpeCA9IG5ldyBtYXRoLk1hdHJpeCgpO1xuXG4gICAgQWJzdHJhY3RGaWx0ZXIuY2FsbCh0aGlzLFxuICAgICAgICBcImF0dHJpYnV0ZSB2ZWMyIGFWZXJ0ZXhQb3NpdGlvbjtcXG5hdHRyaWJ1dGUgdmVjMiBhVGV4dHVyZUNvb3JkO1xcbmF0dHJpYnV0ZSB2ZWM0IGFDb2xvcjtcXG5cXG51bmlmb3JtIG1hdDMgcHJvamVjdGlvbk1hdHJpeDtcXG51bmlmb3JtIG1hdDMgb3RoZXJNYXRyaXg7XFxuXFxudmFyeWluZyB2ZWMyIHZNYXNrQ29vcmQ7XFxudmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7XFxudmFyeWluZyB2ZWM0IHZDb2xvcjtcXG5cXG52b2lkIG1haW4odm9pZClcXG57XFxuICAgIGdsX1Bvc2l0aW9uID0gdmVjNCgocHJvamVjdGlvbk1hdHJpeCAqIHZlYzMoYVZlcnRleFBvc2l0aW9uLCAxLjApKS54eSwgMC4wLCAxLjApO1xcbiAgICB2VGV4dHVyZUNvb3JkID0gYVRleHR1cmVDb29yZDtcXG4gICAgdk1hc2tDb29yZCA9ICggb3RoZXJNYXRyaXggKiB2ZWMzKCBhVGV4dHVyZUNvb3JkLCAxLjApICApLnh5O1xcbiAgICB2Q29sb3IgPSB2ZWM0KGFDb2xvci5yZ2IgKiBhQ29sb3IuYSwgYUNvbG9yLmEpO1xcbn1cXG5cIixcbiAgICAgICAgXCJwcmVjaXNpb24gbG93cCBmbG9hdDtcXG5cXG52YXJ5aW5nIHZlYzIgdk1hc2tDb29yZDtcXG52YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDtcXG52YXJ5aW5nIHZlYzQgdkNvbG9yO1xcblxcbnVuaWZvcm0gc2FtcGxlcjJEIHVTYW1wbGVyO1xcbnVuaWZvcm0gZmxvYXQgYWxwaGE7XFxudW5pZm9ybSBzYW1wbGVyMkQgbWFzaztcXG5cXG52b2lkIG1haW4odm9pZClcXG57XFxuICAgIC8vIGNoZWNrIGNsaXAhIHRoaXMgd2lsbCBzdG9wIHRoZSBtYXNrIGJsZWVkaW5nIG91dCBmcm9tIHRoZSBlZGdlc1xcbiAgICB2ZWMyIHRleHQgPSBhYnMoIHZNYXNrQ29vcmQgLSAwLjUgKTtcXG4gICAgdGV4dCA9IHN0ZXAoMC41LCB0ZXh0KTtcXG4gICAgZmxvYXQgY2xpcCA9IDEuMCAtIG1heCh0ZXh0LnksIHRleHQueCk7XFxuICAgIHZlYzQgb3JpZ2luYWwgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZUZXh0dXJlQ29vcmQpO1xcbiAgICB2ZWM0IG1hc2t5ID0gdGV4dHVyZTJEKG1hc2ssIHZNYXNrQ29vcmQpO1xcbiAgICBvcmlnaW5hbCAqPSAobWFza3kuciAqIG1hc2t5LmEgKiBhbHBoYSAqIGNsaXApO1xcbiAgICBnbF9GcmFnQ29sb3IgPSBvcmlnaW5hbDtcXG59XFxuXCIsXG4gICAgICAgIHtcbiAgICAgICAgICAgIG1hc2s6ICAgICAgICAgICB7IHR5cGU6ICdzYW1wbGVyMkQnLCB2YWx1ZTogc3ByaXRlLl90ZXh0dXJlIH0sXG4gICAgICAgICAgICBhbHBoYTogICAgICAgICAgeyB0eXBlOiAnZicsIHZhbHVlOiAxfSxcbiAgICAgICAgICAgIG90aGVyTWF0cml4OiAgICB7IHR5cGU6ICdtYXQzJywgdmFsdWU6IG1hc2tNYXRyaXgudG9BcnJheSh0cnVlKSB9XG4gICAgICAgIH1cbiAgICApO1xuXG4gICAgdGhpcy5tYXNrU3ByaXRlID0gc3ByaXRlO1xuICAgIHRoaXMubWFza01hdHJpeCA9IG1hc2tNYXRyaXg7XG59XG5cblNwcml0ZU1hc2tGaWx0ZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShBYnN0cmFjdEZpbHRlci5wcm90b3R5cGUpO1xuU3ByaXRlTWFza0ZpbHRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBTcHJpdGVNYXNrRmlsdGVyO1xubW9kdWxlLmV4cG9ydHMgPSBTcHJpdGVNYXNrRmlsdGVyO1xuXG4vKipcbiAqIEFwcGxpZXMgdGhlIGZpbHRlclxuICpcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5XZWJHTFJlbmRlcmVyfSBUaGUgcmVuZGVyZXIgdG8gcmV0cmlldmUgdGhlIGZpbHRlciBmcm9tXG4gKiBAcGFyYW0gaW5wdXQge1BJWEkuUmVuZGVyVGFyZ2V0fVxuICogQHBhcmFtIG91dHB1dCB7UElYSS5SZW5kZXJUYXJnZXR9XG4gKi9cblNwcml0ZU1hc2tGaWx0ZXIucHJvdG90eXBlLmFwcGx5RmlsdGVyID0gZnVuY3Rpb24gKHJlbmRlcmVyLCBpbnB1dCwgb3V0cHV0KVxue1xuICAgIHZhciBmaWx0ZXJNYW5hZ2VyID0gcmVuZGVyZXIuZmlsdGVyTWFuYWdlcjtcblxuICAgIHRoaXMudW5pZm9ybXMubWFzay52YWx1ZSA9IHRoaXMubWFza1Nwcml0ZS5fdGV4dHVyZTtcblxuICAgIGZpbHRlck1hbmFnZXIuY2FsY3VsYXRlTWFwcGVkTWF0cml4KGlucHV0LmZyYW1lLCB0aGlzLm1hc2tTcHJpdGUsIHRoaXMubWFza01hdHJpeCk7XG5cbiAgICB0aGlzLnVuaWZvcm1zLm90aGVyTWF0cml4LnZhbHVlID0gdGhpcy5tYXNrTWF0cml4LnRvQXJyYXkodHJ1ZSk7XG4gICAgdGhpcy51bmlmb3Jtcy5hbHBoYS52YWx1ZSA9IHRoaXMubWFza1Nwcml0ZS53b3JsZEFscGhhO1xuXG4gICAgdmFyIHNoYWRlciA9IHRoaXMuZ2V0U2hhZGVyKHJlbmRlcmVyKTtcbiAgICAgLy8gZHJhdyB0aGUgZmlsdGVyLi4uXG4gICAgZmlsdGVyTWFuYWdlci5hcHBseUZpbHRlcihzaGFkZXIsIGlucHV0LCBvdXRwdXQpO1xufTtcblxuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhTcHJpdGVNYXNrRmlsdGVyLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFRoZSB0ZXh0dXJlIHVzZWQgZm9yIHRoZSBkaXNwbGFjZW1lbnQgbWFwLiBNdXN0IGJlIHBvd2VyIG9mIDIgc2l6ZWQgdGV4dHVyZS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuVGV4dHVyZX1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5TcHJpdGVNYXNrRmlsdGVyI1xuICAgICAqL1xuICAgIG1hcDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVuaWZvcm1zLm1hc2sudmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLm1hc2sudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBUaGUgb2Zmc2V0IHVzZWQgdG8gbW92ZSB0aGUgZGlzcGxhY2VtZW50IG1hcC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuUG9pbnR9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuU3ByaXRlTWFza0ZpbHRlciNcbiAgICAgKi9cbiAgICBvZmZzZXQ6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbigpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVuaWZvcm1zLm9mZnNldC52YWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbih2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy5vZmZzZXQudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuIiwidmFyIFdlYkdMTWFuYWdlciA9IHJlcXVpcmUoJy4vV2ViR0xNYW5hZ2VyJyk7XG5cbi8qKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQGV4dGVuZHMgUElYSS5XZWJHbE1hbmFnZXJcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5XZWJHTFJlbmRlcmVyfSBUaGUgcmVuZGVyZXIgdGhpcyBtYW5hZ2VyIHdvcmtzIGZvci5cbiAqL1xuZnVuY3Rpb24gQmxlbmRNb2RlTWFuYWdlcihyZW5kZXJlcilcbntcbiAgICBXZWJHTE1hbmFnZXIuY2FsbCh0aGlzLCByZW5kZXJlcik7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy5jdXJyZW50QmxlbmRNb2RlID0gOTk5OTk7XG59XG5cbkJsZW5kTW9kZU1hbmFnZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShXZWJHTE1hbmFnZXIucHJvdG90eXBlKTtcbkJsZW5kTW9kZU1hbmFnZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gQmxlbmRNb2RlTWFuYWdlcjtcbm1vZHVsZS5leHBvcnRzID0gQmxlbmRNb2RlTWFuYWdlcjtcblxuLyoqXG4gKiBTZXRzLXVwIHRoZSBnaXZlbiBibGVuZE1vZGUgZnJvbSBXZWJHTCdzIHBvaW50IG9mIHZpZXcuXG4gKlxuICogQHBhcmFtIGJsZW5kTW9kZSB7bnVtYmVyfSB0aGUgYmxlbmRNb2RlLCBzaG91bGQgYmUgYSBQaXhpIGNvbnN0LCBzdWNoIGFzIGBQSVhJLkJMRU5EX01PREVTLkFERGAuIFNlZVxuICogIHtAbGluayBQSVhJLkJMRU5EX01PREVTfSBmb3IgcG9zc2libGUgdmFsdWVzLlxuICovXG5CbGVuZE1vZGVNYW5hZ2VyLnByb3RvdHlwZS5zZXRCbGVuZE1vZGUgPSBmdW5jdGlvbiAoYmxlbmRNb2RlKVxue1xuICAgIGlmICh0aGlzLmN1cnJlbnRCbGVuZE1vZGUgPT09IGJsZW5kTW9kZSlcbiAgICB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICB0aGlzLmN1cnJlbnRCbGVuZE1vZGUgPSBibGVuZE1vZGU7XG5cbiAgICB2YXIgbW9kZSA9IHRoaXMucmVuZGVyZXIuYmxlbmRNb2Rlc1t0aGlzLmN1cnJlbnRCbGVuZE1vZGVdO1xuICAgIHRoaXMucmVuZGVyZXIuZ2wuYmxlbmRGdW5jKG1vZGVbMF0sIG1vZGVbMV0pO1xuXG4gICAgcmV0dXJuIHRydWU7XG59O1xuIiwidmFyIFdlYkdMTWFuYWdlciA9IHJlcXVpcmUoJy4vV2ViR0xNYW5hZ2VyJyksXG4gICAgUmVuZGVyVGFyZ2V0ID0gcmVxdWlyZSgnLi4vdXRpbHMvUmVuZGVyVGFyZ2V0JyksXG4gICAgQ09OU1QgPSByZXF1aXJlKCcuLi8uLi8uLi9jb25zdCcpLFxuICAgIFF1YWQgPSByZXF1aXJlKCcuLi91dGlscy9RdWFkJyksXG4gICAgbWF0aCA9ICByZXF1aXJlKCcuLi8uLi8uLi9tYXRoJyk7XG5cbi8qKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQGV4dGVuZHMgUElYSS5XZWJHTE1hbmFnZXJcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5XZWJHTFJlbmRlcmVyfSBUaGUgcmVuZGVyZXIgdGhpcyBtYW5hZ2VyIHdvcmtzIGZvci5cbiAqL1xuZnVuY3Rpb24gRmlsdGVyTWFuYWdlcihyZW5kZXJlcilcbntcbiAgICBXZWJHTE1hbmFnZXIuY2FsbCh0aGlzLCByZW5kZXJlcik7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtvYmplY3RbXX1cbiAgICAgKi9cbiAgICB0aGlzLmZpbHRlclN0YWNrID0gW107XG5cbiAgICB0aGlzLmZpbHRlclN0YWNrLnB1c2goe1xuICAgICAgICByZW5kZXJUYXJnZXQ6cmVuZGVyZXIuY3VycmVudFJlbmRlclRhcmdldCxcbiAgICAgICAgZmlsdGVyOltdLFxuICAgICAgICBib3VuZHM6bnVsbFxuICAgIH0pO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7UElYSS5SZW5kZXJUYXJnZXRbXX1cbiAgICAgKi9cbiAgICB0aGlzLnRleHR1cmVQb29sID0gW107XG5cbiAgICAvKipcbiAgICAgKiBUaGUgc2l6ZSBvZiB0aGUgdGV4dHVyZVxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5SZWN0YW5nbGV9XG4gICAgICovXG4gICAgLy8gbGlzdGVuIGZvciBjb250ZXh0IGFuZCB1cGRhdGUgbmVjZXNzYXJ5IGJ1ZmZlcnNcbiAgICAvL1RPRE8gbWFrZSB0aGlzIGR5bmFtaWMhXG4gICAgLy9UT0RPIHRlc3QgdGhpcyBvdXQgYnkgZm9yY2VzIHBvd2VyIG9mIHR3bz9cbiAgICB0aGlzLnRleHR1cmVTaXplID0gbmV3IG1hdGguUmVjdGFuZ2xlKDAsIDAsIHJlbmRlcmVyLndpZHRoLCByZW5kZXJlci5oZWlnaHQpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGN1cnJlbnQgZnJhbWVcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuUmVjdGFuZ2xlfVxuICAgICAqL1xuICAgIHRoaXMuY3VycmVudEZyYW1lID0gbnVsbDtcbn1cblxuRmlsdGVyTWFuYWdlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFdlYkdMTWFuYWdlci5wcm90b3R5cGUpO1xuRmlsdGVyTWFuYWdlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBGaWx0ZXJNYW5hZ2VyO1xubW9kdWxlLmV4cG9ydHMgPSBGaWx0ZXJNYW5hZ2VyO1xuXG5cbi8qKlxuICogQ2FsbGVkIHdoZW4gdGhlcmUgaXMgYSBXZWJHTCBjb250ZXh0IGNoYW5nZS5cbiAqXG4gKi9cbkZpbHRlck1hbmFnZXIucHJvdG90eXBlLm9uQ29udGV4dENoYW5nZSA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy50ZXh0dXJlUG9vbC5sZW5ndGggPSAwO1xuXG4gICAgdmFyIGdsID0gdGhpcy5yZW5kZXJlci5nbDtcbiAgICB0aGlzLnF1YWQgPSBuZXcgUXVhZChnbCk7XG59O1xuXG4vKipcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5XZWJHTFJlbmRlcmVyfVxuICogQHBhcmFtIGJ1ZmZlciB7QXJyYXlCdWZmZXJ9XG4gKi9cbkZpbHRlck1hbmFnZXIucHJvdG90eXBlLnNldEZpbHRlclN0YWNrID0gZnVuY3Rpb24gKCBmaWx0ZXJTdGFjayApXG57XG4gICAgdGhpcy5maWx0ZXJTdGFjayA9IGZpbHRlclN0YWNrO1xufTtcblxuLyoqXG4gKiBBcHBsaWVzIHRoZSBmaWx0ZXIgYW5kIGFkZHMgaXQgdG8gdGhlIGN1cnJlbnQgZmlsdGVyIHN0YWNrLlxuICpcbiAqIEBwYXJhbSB0YXJnZXQge1BJWEkuRGlzcGxheU9iamVjdH1cbiAqIEBwYXJhbSBmaWx0ZXJzIHtQSVhJLkFic3RyYWN0RmlsZXJbXX0gdGhlIGZpbHRlcnMgdGhhdCB3aWxsIGJlIHB1c2hlZCB0byB0aGUgY3VycmVudCBmaWx0ZXIgc3RhY2tcbiAqL1xuRmlsdGVyTWFuYWdlci5wcm90b3R5cGUucHVzaEZpbHRlciA9IGZ1bmN0aW9uICh0YXJnZXQsIGZpbHRlcnMpXG57XG4gICAgLy8gZ2V0IHRoZSBib3VuZHMgb2YgdGhlIG9iamVjdC4uXG4gICAgLy8gVE9ETyByZXBsYWNlIGNsb25lIHdpdGggYSBjb3B5IHRvIHNhdmUgb2JqZWN0IGNyZWF0aW9uXG4gICAgdmFyIGJvdW5kcyA9IHRhcmdldC5maWx0ZXJBcmVhID8gdGFyZ2V0LmZpbHRlckFyZWEuY2xvbmUoKSA6IHRhcmdldC5nZXRCb3VuZHMoKTtcblxuICAgIC8vYm91bmRzID0gYm91bmRzLmNsb25lKCk7XG5cbiAgICAvLyByb3VuZCBvZmYgdGhlIHJlY3RhbmdsZSB0byBnZXQgYSBuaWNlIHNtb29vb29vb3RoIGZpbHRlciA6KVxuICAgIGJvdW5kcy54ID0gYm91bmRzLnggfCAwO1xuICAgIGJvdW5kcy55ID0gYm91bmRzLnkgfCAwO1xuICAgIGJvdW5kcy53aWR0aCA9IGJvdW5kcy53aWR0aCB8IDA7XG4gICAgYm91bmRzLmhlaWdodCA9IGJvdW5kcy5oZWlnaHQgfCAwO1xuXG5cbiAgICAvLyBwYWRkaW5nIVxuICAgIHZhciBwYWRkaW5nID0gZmlsdGVyc1swXS5wYWRkaW5nIHwgMDtcbiAgICBib3VuZHMueCAtPSBwYWRkaW5nO1xuICAgIGJvdW5kcy55IC09IHBhZGRpbmc7XG4gICAgYm91bmRzLndpZHRoICs9IHBhZGRpbmcgKiAyO1xuICAgIGJvdW5kcy5oZWlnaHQgKz0gcGFkZGluZyAqIDI7XG5cblxuICAgIGlmKHRoaXMucmVuZGVyZXIuY3VycmVudFJlbmRlclRhcmdldC50cmFuc2Zvcm0pXG4gICAge1xuICAgICAgICAvL1RPRE8gdGhpcyB3aWxsIGJyZWFrIGlmIHRoZSByZW5kZXJUZXh0dXJlIHRyYW5zZm9ybSBpcyBhbnl0aGluZyBvdGhlciB0aGFuIGEgdHJhbnNsYXRpb24uXG4gICAgICAgIC8vV2lsbCBuZWVkIHRvIHRha2UgdGhlIGZ1bGwgbWF0cml4IHRyYW5zZm9ybSBpbnRvIGFjb3VudC4uXG4gICAgICAgIHZhciB0cmFuc2Zvcm0gPSB0aGlzLnJlbmRlcmVyLmN1cnJlbnRSZW5kZXJUYXJnZXQudHJhbnNmb3JtO1xuXG4gICAgICAgIGJvdW5kcy54ICs9IHRyYW5zZm9ybS50eDtcbiAgICAgICAgYm91bmRzLnkgKz0gdHJhbnNmb3JtLnR5O1xuXG4gICAgICAgIHRoaXMuY2FwRmlsdGVyQXJlYSggYm91bmRzICk7XG5cbiAgICAgICAgYm91bmRzLnggLT0gdHJhbnNmb3JtLnR4O1xuICAgICAgICBib3VuZHMueSAtPSB0cmFuc2Zvcm0udHk7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgICB0aGlzLmNhcEZpbHRlckFyZWEoIGJvdW5kcyApO1xuICAgIH1cblxuICAgIGlmKGJvdW5kcy53aWR0aCA+IDAgJiYgYm91bmRzLmhlaWdodCA+IDApXG4gICAge1xuICAgICAgICB0aGlzLmN1cnJlbnRGcmFtZSA9IGJvdW5kcztcblxuICAgICAgICB2YXIgdGV4dHVyZSA9IHRoaXMuZ2V0UmVuZGVyVGFyZ2V0KCk7XG5cbiAgICAgICAgdGhpcy5yZW5kZXJlci5zZXRSZW5kZXJUYXJnZXQodGV4dHVyZSk7XG5cbiAgICAgICAgLy8gY2xlYXIgdGhlIHRleHR1cmUuLlxuICAgICAgICB0ZXh0dXJlLmNsZWFyKCk7XG5cbiAgICAgICAgLy8gVE9ETyBnZXQgcmlkIG9mIG9iamVjdCBjcmVhdGlvbiFcbiAgICAgICAgdGhpcy5maWx0ZXJTdGFjay5wdXNoKHtcbiAgICAgICAgICAgIHJlbmRlclRhcmdldDogdGV4dHVyZSxcbiAgICAgICAgICAgIGZpbHRlcjogZmlsdGVyc1xuICAgICAgICB9KTtcblxuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICAvLyBwdXNoIHNvbXRoaW5nIG9uIHRvIHRoZSBzdGFjayB0aGF0IGlzIGVtcHR5XG4gICAgICAgIHRoaXMuZmlsdGVyU3RhY2sucHVzaCh7XG4gICAgICAgICAgICByZW5kZXJUYXJnZXQ6IG51bGwsXG4gICAgICAgICAgICBmaWx0ZXI6IGZpbHRlcnNcbiAgICAgICAgfSk7XG4gICAgfVxufTtcblxuXG4vKipcbiAqIFJlbW92ZXMgdGhlIGxhc3QgZmlsdGVyIGZyb20gdGhlIGZpbHRlciBzdGFjayBhbmQgcmV0dXJucyBpdC5cbiAqXG4gKi9cbkZpbHRlck1hbmFnZXIucHJvdG90eXBlLnBvcEZpbHRlciA9IGZ1bmN0aW9uICgpXG57XG4gICAgdmFyIGZpbHRlckRhdGEgPSB0aGlzLmZpbHRlclN0YWNrLnBvcCgpO1xuICAgIHZhciBwcmV2aW91c0ZpbHRlckRhdGEgPSB0aGlzLmZpbHRlclN0YWNrW3RoaXMuZmlsdGVyU3RhY2subGVuZ3RoLTFdO1xuXG4gICAgdmFyIGlucHV0ID0gZmlsdGVyRGF0YS5yZW5kZXJUYXJnZXQ7XG5cbiAgICAvLyBpZiB0aGUgcmVuZGVyVGFyZ2V0IGlzIG51bGwgdGhlbiB3ZSBkb24ndCBhcHBseSB0aGUgZmlsdGVyIGFzIGl0cyBvZmZzY3JlZW5cbiAgICBpZighZmlsdGVyRGF0YS5yZW5kZXJUYXJnZXQpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFyIG91dHB1dCA9IHByZXZpb3VzRmlsdGVyRGF0YS5yZW5kZXJUYXJnZXQ7XG5cbiAgICAvLyB1c2UgcHJvZ3JhbVxuICAgIHZhciBnbCA9IHRoaXMucmVuZGVyZXIuZ2w7XG5cblxuICAgIHRoaXMuY3VycmVudEZyYW1lID0gaW5wdXQuZnJhbWU7XG5cbiAgICB0aGlzLnF1YWQubWFwKHRoaXMudGV4dHVyZVNpemUsIGlucHV0LmZyYW1lKTtcblxuXG4gICAgLy8gVE9ETy4uIHRoaXMgcHJvYmFibHkgb25seSBuZWVkcyB0byBiZSBkb25lIG9uY2UhXG4gICAgZ2wuYmluZEJ1ZmZlcihnbC5BUlJBWV9CVUZGRVIsIHRoaXMucXVhZC52ZXJ0ZXhCdWZmZXIpO1xuICAgIGdsLmJpbmRCdWZmZXIoZ2wuRUxFTUVOVF9BUlJBWV9CVUZGRVIsIHRoaXMucXVhZC5pbmRleEJ1ZmZlcik7XG5cbiAgICB2YXIgZmlsdGVycyA9IGZpbHRlckRhdGEuZmlsdGVyO1xuXG4gICAgLy8gYXNzdW1pbmcgYWxsIGZpbHRlcnMgZm9sbG93IHRoZSBjb3JyZWN0IGZvcm1hdD8/XG4gICAgZ2wudmVydGV4QXR0cmliUG9pbnRlcih0aGlzLnJlbmRlcmVyLnNoYWRlck1hbmFnZXIuZGVmYXVsdFNoYWRlci5hdHRyaWJ1dGVzLmFWZXJ0ZXhQb3NpdGlvbiwgMiwgZ2wuRkxPQVQsIGZhbHNlLCAwLCAwKTtcbiAgICBnbC52ZXJ0ZXhBdHRyaWJQb2ludGVyKHRoaXMucmVuZGVyZXIuc2hhZGVyTWFuYWdlci5kZWZhdWx0U2hhZGVyLmF0dHJpYnV0ZXMuYVRleHR1cmVDb29yZCwgMiwgZ2wuRkxPQVQsIGZhbHNlLCAwLCAyICogNCAqIDQpO1xuICAgIGdsLnZlcnRleEF0dHJpYlBvaW50ZXIodGhpcy5yZW5kZXJlci5zaGFkZXJNYW5hZ2VyLmRlZmF1bHRTaGFkZXIuYXR0cmlidXRlcy5hQ29sb3IsIDQsIGdsLkZMT0FULCBmYWxzZSwgMCwgNCAqIDQgKiA0KTtcblxuICAgIC8vIHJlc3RvcmUgdGhlIG5vcm1hbCBibGVuZG1vZGUhXG4gICAgdGhpcy5yZW5kZXJlci5ibGVuZE1vZGVNYW5hZ2VyLnNldEJsZW5kTW9kZShDT05TVC5CTEVORF9NT0RFUy5OT1JNQUwpO1xuXG4gICAgaWYgKGZpbHRlcnMubGVuZ3RoID09PSAxKVxuICAgIHtcbiAgICAgICAgLy8gVE9ETyAoY2VuZ2xlcikgLSBUaGVyZSBoYXMgdG8gYmUgYSBiZXR0ZXIgd2F5IHRoZW4gc2V0dGluZyB0aGlzIGVhY2ggdGltZT9cbiAgICAgICAgaWYgKGZpbHRlcnNbMF0udW5pZm9ybXMuZGltZW5zaW9ucylcbiAgICAgICAge1xuICAgICAgICAgICAgZmlsdGVyc1swXS51bmlmb3Jtcy5kaW1lbnNpb25zLnZhbHVlWzBdID0gdGhpcy5yZW5kZXJlci53aWR0aDtcbiAgICAgICAgICAgIGZpbHRlcnNbMF0udW5pZm9ybXMuZGltZW5zaW9ucy52YWx1ZVsxXSA9IHRoaXMucmVuZGVyZXIuaGVpZ2h0O1xuICAgICAgICAgICAgZmlsdGVyc1swXS51bmlmb3Jtcy5kaW1lbnNpb25zLnZhbHVlWzJdID0gdGhpcy5xdWFkLnZlcnRpY2VzWzBdO1xuICAgICAgICAgICAgZmlsdGVyc1swXS51bmlmb3Jtcy5kaW1lbnNpb25zLnZhbHVlWzNdID0gdGhpcy5xdWFkLnZlcnRpY2VzWzVdO1xuICAgICAgICB9XG5cbiAgICAgICAgZmlsdGVyc1swXS5hcHBseUZpbHRlciggdGhpcy5yZW5kZXJlciwgaW5wdXQsIG91dHB1dCApO1xuICAgICAgICB0aGlzLnJldHVyblJlbmRlclRhcmdldCggaW5wdXQgKTtcblxuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICB2YXIgZmxpcFRleHR1cmUgPSBpbnB1dDtcbiAgICAgICAgdmFyIGZsb3BUZXh0dXJlID0gdGhpcy5nZXRSZW5kZXJUYXJnZXQodHJ1ZSk7XG5cbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBmaWx0ZXJzLmxlbmd0aC0xOyBpKyspXG4gICAgICAgIHtcbiAgICAgICAgICAgIHZhciBmaWx0ZXIgPSBmaWx0ZXJzW2ldO1xuXG4gICAgICAgICAgICAvLyBUT0RPIChjZW5nbGVyKSAtIFRoZXJlIGhhcyB0byBiZSBhIGJldHRlciB3YXkgdGhlbiBzZXR0aW5nIHRoaXMgZWFjaCB0aW1lP1xuICAgICAgICAgICAgaWYgKGZpbHRlci51bmlmb3Jtcy5kaW1lbnNpb25zKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGZpbHRlci51bmlmb3Jtcy5kaW1lbnNpb25zLnZhbHVlWzBdID0gdGhpcy5yZW5kZXJlci53aWR0aDtcbiAgICAgICAgICAgICAgICBmaWx0ZXIudW5pZm9ybXMuZGltZW5zaW9ucy52YWx1ZVsxXSA9IHRoaXMucmVuZGVyZXIuaGVpZ2h0O1xuICAgICAgICAgICAgICAgIGZpbHRlci51bmlmb3Jtcy5kaW1lbnNpb25zLnZhbHVlWzJdID0gdGhpcy5xdWFkLnZlcnRpY2VzWzBdO1xuICAgICAgICAgICAgICAgIGZpbHRlci51bmlmb3Jtcy5kaW1lbnNpb25zLnZhbHVlWzNdID0gdGhpcy5xdWFkLnZlcnRpY2VzWzVdO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBmaWx0ZXIuYXBwbHlGaWx0ZXIoIHRoaXMucmVuZGVyZXIsIGZsaXBUZXh0dXJlLCBmbG9wVGV4dHVyZSApO1xuXG4gICAgICAgICAgICB2YXIgdGVtcCA9IGZsaXBUZXh0dXJlO1xuICAgICAgICAgICAgZmxpcFRleHR1cmUgPSBmbG9wVGV4dHVyZTtcbiAgICAgICAgICAgIGZsb3BUZXh0dXJlID0gdGVtcDtcbiAgICAgICAgfVxuXG4gICAgICAgIGZpbHRlcnNbZmlsdGVycy5sZW5ndGgtMV0uYXBwbHlGaWx0ZXIoIHRoaXMucmVuZGVyZXIsIGZsaXBUZXh0dXJlLCBvdXRwdXQgKTtcblxuICAgICAgICB0aGlzLnJldHVyblJlbmRlclRhcmdldCggZmxpcFRleHR1cmUgKTtcbiAgICAgICAgdGhpcy5yZXR1cm5SZW5kZXJUYXJnZXQoIGZsb3BUZXh0dXJlICk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZpbHRlckRhdGEuZmlsdGVyO1xufTtcblxuLyoqXG4gKiBHcmFicyBhbiByZW5kZXIgdGFyZ2V0IGZyb20gdGhlIGludGVybmFsIHBvb2xcbiAqXG4gKiBAcGFyYW0gY2xlYXIge2Jvb2xlYW59IFdoZXRoZXIgb3Igbm90IHdlIG5lZWQgdG8gY2xlYXIgdGhlIFJlbmRlclRhcmdldFxuICogQHJldHVybiB7UmVuZGVyVGFyZ2V0fVxuICovXG5GaWx0ZXJNYW5hZ2VyLnByb3RvdHlwZS5nZXRSZW5kZXJUYXJnZXQgPSBmdW5jdGlvbiAoIGNsZWFyIClcbntcbiAgICB2YXIgcmVuZGVyVGFyZ2V0ID0gdGhpcy50ZXh0dXJlUG9vbC5wb3AoKSB8fCBuZXcgUmVuZGVyVGFyZ2V0KHRoaXMucmVuZGVyZXIuZ2wsIHRoaXMudGV4dHVyZVNpemUud2lkdGgsIHRoaXMudGV4dHVyZVNpemUuaGVpZ2h0LCBDT05TVC5TQ0FMRV9NT0RFUy5MSU5FQVIsIHRoaXMucmVuZGVyZXIucmVzb2x1dGlvbiAqIENPTlNULkZJTFRFUl9SRVNPTFVUSU9OKTtcbiAgICByZW5kZXJUYXJnZXQuZnJhbWUgPSB0aGlzLmN1cnJlbnRGcmFtZTtcblxuICAgIGlmIChjbGVhcilcbiAgICB7XG4gICAgICAgIHJlbmRlclRhcmdldC5jbGVhcih0cnVlKTtcbiAgICB9XG5cbiAgICByZXR1cm4gcmVuZGVyVGFyZ2V0O1xufTtcblxuLypcbiAqIFJldHVybnMgYSBSZW5kZXJUYXJnZXQgdG8gdGhlIGludGVybmFsIHBvb2xcbiAqIEBwYXJhbSByZW5kZXJUYXJnZXQge1JlbmRlclRhcmdldH0gVGhlIFJlbmRlclRhcmdldCB3ZSB3YW50IHRvIHJldHVybiB0byB0aGUgcG9vbFxuICovXG5GaWx0ZXJNYW5hZ2VyLnByb3RvdHlwZS5yZXR1cm5SZW5kZXJUYXJnZXQgPSBmdW5jdGlvbiAocmVuZGVyVGFyZ2V0KVxue1xuICAgIHRoaXMudGV4dHVyZVBvb2wucHVzaCggcmVuZGVyVGFyZ2V0ICk7XG59O1xuXG4vKlxuICogQXBwbGllcyB0aGUgZmlsdGVyXG4gKiBAcGFyYW0gc2hhZGVyIHtTaGFkZXJ9IFRoZSBzaGFkZXIgdG8gdXBsb2FkXG4gKiBAcGFyYW0gaW5wdXRUYXJnZXQge1JlbmRlclRhcmdldH1cbiAqIEBwYXJhbSBvdXRwdXRUYXJnZXQge1JlbmRlclRhcmdldH1cbiAqIEBwYXJhbSBjbGVhciB7Ym9vbGVhbn0gV2hldGhlciBvciBub3Qgd2Ugd2FudCB0byBjbGVhciB0aGUgb3V0cHV0VGFyZ2V0XG4gKi9cbkZpbHRlck1hbmFnZXIucHJvdG90eXBlLmFwcGx5RmlsdGVyID0gZnVuY3Rpb24gKHNoYWRlciwgaW5wdXRUYXJnZXQsIG91dHB1dFRhcmdldCwgY2xlYXIpXG57XG4gICAgdmFyIGdsID0gdGhpcy5yZW5kZXJlci5nbDtcblxuICAgIHRoaXMucmVuZGVyZXIuc2V0UmVuZGVyVGFyZ2V0KG91dHB1dFRhcmdldCk7XG5cbiAgICBpZiAoY2xlYXIpXG4gICAge1xuICAgICAgICBvdXRwdXRUYXJnZXQuY2xlYXIoKTtcbiAgICB9XG5cbiAgICAvLyBzZXQgdGhlIHNoYWRlclxuICAgIHRoaXMucmVuZGVyZXIuc2hhZGVyTWFuYWdlci5zZXRTaGFkZXIoc2hhZGVyKTtcblxuICAgIC8vIFRPRE8gKGNlbmdsZXIpIC0gQ2FuIHRoaXMgYmUgY2FjaGVkIGFuZCBub3QgYHRvQXJyYXlgZWQgZWFjaCBmcmFtZT9cbiAgICBzaGFkZXIudW5pZm9ybXMucHJvamVjdGlvbk1hdHJpeC52YWx1ZSA9IHRoaXMucmVuZGVyZXIuY3VycmVudFJlbmRlclRhcmdldC5wcm9qZWN0aW9uTWF0cml4LnRvQXJyYXkodHJ1ZSk7XG5cbiAgICAvL1RPRE8gY2FuIHRoaXMgYmUgb3B0aW1pc2VkP1xuICAgIHNoYWRlci5zeW5jVW5pZm9ybXMoKTtcbi8qXG4gICAgZ2wudmVydGV4QXR0cmliUG9pbnRlcihzaGFkZXIuYXR0cmlidXRlcy5hVmVydGV4UG9zaXRpb24sIDIsIGdsLkZMT0FULCBmYWxzZSwgMCwgMCk7XG4gICAgZ2wudmVydGV4QXR0cmliUG9pbnRlcihzaGFkZXIuYXR0cmlidXRlcy5hVGV4dHVyZUNvb3JkLCAyLCBnbC5GTE9BVCwgZmFsc2UsIDAsIDIgKiA0ICogNCk7XG4gICAgZ2wudmVydGV4QXR0cmliUG9pbnRlcihzaGFkZXIuYXR0cmlidXRlcy5hQ29sb3IsIDQsIGdsLkZMT0FULCBmYWxzZSwgMCwgNCAqIDQgKiA0KTtcbiovXG5cbiAgICBnbC5hY3RpdmVUZXh0dXJlKGdsLlRFWFRVUkUwKTtcbiAgICBnbC5iaW5kVGV4dHVyZShnbC5URVhUVVJFXzJELCBpbnB1dFRhcmdldC50ZXh0dXJlKTtcblxuICAgIGdsLmRyYXdFbGVtZW50cyhnbC5UUklBTkdMRVMsIDYsIGdsLlVOU0lHTkVEX1NIT1JULCAwICk7XG4gICAgdGhpcy5yZW5kZXJlci5kcmF3Q291bnQrKztcbn07XG5cbi8qXG4gKiBDYWxjdWxhdGVzIHRoZSBtYXBwZWQgbWF0cml4XG4gKiBAcGFyYW0gZmlsdGVyQXJlYSB7UmVjdGFuZ2xlfSBUaGUgZmlsdGVyIGFyZWFcbiAqIEBwYXJhbSBzcHJpdGUge1Nwcml0ZX0gdGhlIHRhcmdldCBzcHJpdGVcbiAqIEBwYXJhbSBvdXRwdXRNYXRyaXgge01hdHJpeH0gQGFsdmluXG4gKi9cbi8vIFRPRE8gcGxheWluZyBhcm91bmQgaGVyZS4uIHRoaXMgaXMgdGVtcG9yYXJ5IC0gKHdpbGwgZW5kIHVwIGluIHRoZSBzaGFkZXIpXG5GaWx0ZXJNYW5hZ2VyLnByb3RvdHlwZS5jYWxjdWxhdGVNYXBwZWRNYXRyaXggPSBmdW5jdGlvbiAoZmlsdGVyQXJlYSwgc3ByaXRlLCBvdXRwdXRNYXRyaXgpXG57XG4gICAgdmFyIHdvcmxkVHJhbnNmb3JtID0gc3ByaXRlLndvcmxkVHJhbnNmb3JtLmNvcHkobWF0aC5NYXRyaXguVEVNUF9NQVRSSVgpLFxuICAgIHRleHR1cmUgPSBzcHJpdGUuX3RleHR1cmUuYmFzZVRleHR1cmU7XG5cbiAgICB2YXIgbWFwcGVkTWF0cml4ID0gb3V0cHV0TWF0cml4LmlkZW50aXR5KCk7XG5cbiAgICAvLyBzY2FsZS4uXG4gICAgdmFyIHJhdGlvID0gdGhpcy50ZXh0dXJlU2l6ZS5oZWlnaHQgLyB0aGlzLnRleHR1cmVTaXplLndpZHRoO1xuXG4gICAgbWFwcGVkTWF0cml4LnRyYW5zbGF0ZShmaWx0ZXJBcmVhLnggLyB0aGlzLnRleHR1cmVTaXplLndpZHRoLCBmaWx0ZXJBcmVhLnkgLyB0aGlzLnRleHR1cmVTaXplLmhlaWdodCApO1xuXG4gICAgbWFwcGVkTWF0cml4LnNjYWxlKDEgLCByYXRpbyk7XG5cbiAgICB2YXIgdHJhbnNsYXRlU2NhbGVYID0gKHRoaXMudGV4dHVyZVNpemUud2lkdGggLyB0ZXh0dXJlLndpZHRoKTtcbiAgICB2YXIgdHJhbnNsYXRlU2NhbGVZID0gKHRoaXMudGV4dHVyZVNpemUuaGVpZ2h0IC8gdGV4dHVyZS5oZWlnaHQpO1xuXG4gICAgd29ybGRUcmFuc2Zvcm0udHggLz0gdGV4dHVyZS53aWR0aCAqIHRyYW5zbGF0ZVNjYWxlWDtcbiAgICB3b3JsZFRyYW5zZm9ybS50eSAvPSB0ZXh0dXJlLndpZHRoICogdHJhbnNsYXRlU2NhbGVYO1xuXG4gICAgd29ybGRUcmFuc2Zvcm0uaW52ZXJ0KCk7XG5cbiAgICBtYXBwZWRNYXRyaXgucHJlcGVuZCh3b3JsZFRyYW5zZm9ybSk7XG5cbiAgICAvLyBhcHBseSBpbnZlcnNlIHNjYWxlLi5cbiAgICBtYXBwZWRNYXRyaXguc2NhbGUoMSAsIDEvcmF0aW8pO1xuXG4gICAgbWFwcGVkTWF0cml4LnNjYWxlKCB0cmFuc2xhdGVTY2FsZVggLCB0cmFuc2xhdGVTY2FsZVkgKTtcblxuICAgIG1hcHBlZE1hdHJpeC50cmFuc2xhdGUoc3ByaXRlLmFuY2hvci54LCBzcHJpdGUuYW5jaG9yLnkpO1xuXG4gICAgcmV0dXJuIG1hcHBlZE1hdHJpeDtcblxuICAgIC8vIEtlZXBpbmcgdGhlIG9yZ2luYWwgYXMgYSByZW1pbmRlciB0byBtZSBvbiBob3cgdGhpcyB3b3JrcyFcbiAgICAvL1xuICAgIC8vIHZhciBtID0gbmV3IG1hdGguTWF0cml4KCk7XG5cbiAgICAvLyAvLyBzY2FsZS4uXG4gICAgLy8gdmFyIHJhdGlvID0gdGhpcy50ZXh0dXJlU2l6ZS5oZWlnaHQgLyB0aGlzLnRleHR1cmVTaXplLndpZHRoO1xuXG4gICAgLy8gbS50cmFuc2xhdGUoZmlsdGVyQXJlYS54IC8gdGhpcy50ZXh0dXJlU2l6ZS53aWR0aCwgZmlsdGVyQXJlYS55IC8gdGhpcy50ZXh0dXJlU2l6ZS5oZWlnaHQpO1xuXG5cbiAgICAvLyBtLnNjYWxlKDEgLCByYXRpbyk7XG5cblxuICAgIC8vIHZhciB0cmFuc2Zvcm0gPSB3dC5jbG9uZSgpO1xuXG4gICAgLy8gdmFyIHRyYW5zbGF0ZVNjYWxlWCA9ICh0aGlzLnRleHR1cmVTaXplLndpZHRoIC8gNjIwKTtcbiAgICAvLyB2YXIgdHJhbnNsYXRlU2NhbGVZID0gKHRoaXMudGV4dHVyZVNpemUuaGVpZ2h0IC8gMzgwKTtcblxuICAgIC8vIHRyYW5zZm9ybS50eCAvPSA2MjAgKiB0cmFuc2xhdGVTY2FsZVg7XG4gICAgLy8gdHJhbnNmb3JtLnR5IC89IDYyMCAqIHRyYW5zbGF0ZVNjYWxlWDtcblxuICAgIC8vIHRyYW5zZm9ybS5pbnZlcnQoKTtcblxuICAgIC8vIHRyYW5zZm9ybS5hcHBlbmQobSk7XG5cbiAgICAvLyAvLyBhcHBseSBpbnZlcnNlIHNjYWxlLi5cbiAgICAvLyB0cmFuc2Zvcm0uc2NhbGUoMSAsIDEvcmF0aW8pO1xuXG4gICAgLy8gdHJhbnNmb3JtLnNjYWxlKCB0cmFuc2xhdGVTY2FsZVggLCB0cmFuc2xhdGVTY2FsZVkgKTtcblxuICAgIC8vIHJldHVybiB0cmFuc2Zvcm07XG59O1xuXG4vKlxuICogQ29uc3RyYWlucyB0aGUgZmlsdGVyIGFyZWEgdG8gdGhlIHRleHR1cmUgc2l6ZVxuICogQHBhcmFtIGZpbHRlckFyZWEge1JlY3RhbmdsZX0gVGhlIGZpbHRlciBhcmVhIHdlIHdhbnQgdG8gY2FwXG4gKi9cbkZpbHRlck1hbmFnZXIucHJvdG90eXBlLmNhcEZpbHRlckFyZWEgPSBmdW5jdGlvbiAoZmlsdGVyQXJlYSlcbntcbiAgICBpZiAoZmlsdGVyQXJlYS54IDwgMClcbiAgICB7XG4gICAgICAgIGZpbHRlckFyZWEud2lkdGggKz0gZmlsdGVyQXJlYS54O1xuICAgICAgICBmaWx0ZXJBcmVhLnggPSAwO1xuICAgIH1cblxuICAgIGlmIChmaWx0ZXJBcmVhLnkgPCAwKVxuICAgIHtcbiAgICAgICAgZmlsdGVyQXJlYS5oZWlnaHQgKz0gZmlsdGVyQXJlYS55O1xuICAgICAgICBmaWx0ZXJBcmVhLnkgPSAwO1xuICAgIH1cblxuICAgIGlmICggZmlsdGVyQXJlYS54ICsgZmlsdGVyQXJlYS53aWR0aCA+IHRoaXMudGV4dHVyZVNpemUud2lkdGggKVxuICAgIHtcbiAgICAgICAgZmlsdGVyQXJlYS53aWR0aCA9IHRoaXMudGV4dHVyZVNpemUud2lkdGggLSBmaWx0ZXJBcmVhLng7XG4gICAgfVxuXG4gICAgaWYgKCBmaWx0ZXJBcmVhLnkgKyBmaWx0ZXJBcmVhLmhlaWdodCA+IHRoaXMudGV4dHVyZVNpemUuaGVpZ2h0IClcbiAgICB7XG4gICAgICAgIGZpbHRlckFyZWEuaGVpZ2h0ID0gdGhpcy50ZXh0dXJlU2l6ZS5oZWlnaHQgLSBmaWx0ZXJBcmVhLnk7XG4gICAgfVxufTtcblxuLypcbiAqIFJlc2l6ZXMgYWxsIHRoZSByZW5kZXIgdGFyZ2V0cyBpbiB0aGUgcG9vbFxuICogQHBhcmFtIHdpZHRoIHtudW1iZXJ9IHRoZSBuZXcgd2lkdGhcbiAqIEBwYXJhbSBoZWlnaHQge251bWJlcn0gdGhlIG5ldyBoZWlnaHRcbiAqL1xuRmlsdGVyTWFuYWdlci5wcm90b3R5cGUucmVzaXplID0gZnVuY3Rpb24gKCB3aWR0aCwgaGVpZ2h0IClcbntcbiAgICB0aGlzLnRleHR1cmVTaXplLndpZHRoID0gd2lkdGg7XG4gICAgdGhpcy50ZXh0dXJlU2l6ZS5oZWlnaHQgPSBoZWlnaHQ7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMudGV4dHVyZVBvb2wubGVuZ3RoOyBpKyspXG4gICAge1xuICAgICAgICB0aGlzLnRleHR1cmVQb29sW2ldLnJlc2l6ZSggd2lkdGgsIGhlaWdodCApO1xuICAgIH1cbn07XG5cbi8qKlxuICogRGVzdHJveXMgdGhlIGZpbHRlciBhbmQgcmVtb3ZlcyBpdCBmcm9tIHRoZSBmaWx0ZXIgc3RhY2suXG4gKlxuICovXG5GaWx0ZXJNYW5hZ2VyLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLnF1YWQuZGVzdHJveSgpO1xuICAgIFxuICAgIFdlYkdMTWFuYWdlci5wcm90b3R5cGUuZGVzdHJveS5jYWxsKHRoaXMpO1xuICAgIFxuICAgIHRoaXMuZmlsdGVyU3RhY2sgPSBudWxsO1xuICAgIHRoaXMub2Zmc2V0WSA9IDA7XG5cbiAgICAvLyBkZXN0cm95IHRleHR1cmVzXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLnRleHR1cmVQb29sLmxlbmd0aDsgaSsrKVxuICAgIHtcbiAgICAgICAgdGhpcy50ZXh0dXJlUG9vbFtpXS5kZXN0cm95KCk7XG4gICAgfVxuXG4gICAgdGhpcy50ZXh0dXJlUG9vbCA9IG51bGw7XG59O1xuIiwidmFyIFdlYkdMTWFuYWdlciA9IHJlcXVpcmUoJy4vV2ViR0xNYW5hZ2VyJyksXG4gICAgQWxwaGFNYXNrRmlsdGVyID0gcmVxdWlyZSgnLi4vZmlsdGVycy9TcHJpdGVNYXNrRmlsdGVyJyk7XG5cbi8qKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLldlYkdMUmVuZGVyZXJ9IFRoZSByZW5kZXJlciB0aGlzIG1hbmFnZXIgd29ya3MgZm9yLlxuICovXG5mdW5jdGlvbiBNYXNrTWFuYWdlcihyZW5kZXJlcilcbntcbiAgICBXZWJHTE1hbmFnZXIuY2FsbCh0aGlzLCByZW5kZXJlcik7XG5cbiAgICB0aGlzLnN0ZW5jaWxTdGFjayA9IFtdO1xuICAgIHRoaXMucmV2ZXJzZSA9IHRydWU7XG4gICAgdGhpcy5jb3VudCA9IDA7XG5cbiAgICB0aGlzLmFscGhhTWFza1Bvb2wgPSBbXTtcbn1cblxuTWFza01hbmFnZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShXZWJHTE1hbmFnZXIucHJvdG90eXBlKTtcbk1hc2tNYW5hZ2VyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IE1hc2tNYW5hZ2VyO1xubW9kdWxlLmV4cG9ydHMgPSBNYXNrTWFuYWdlcjtcblxuLyoqXG4gKiBBcHBsaWVzIHRoZSBNYXNrIGFuZCBhZGRzIGl0IHRvIHRoZSBjdXJyZW50IGZpbHRlciBzdGFjay5cbiAqXG4gKiBAcGFyYW0gZ3JhcGhpY3Mge1BJWEkuR3JhcGhpY3N9XG4gKiBAcGFyYW0gd2ViR0xEYXRhIHthbnlbXX1cbiAqL1xuTWFza01hbmFnZXIucHJvdG90eXBlLnB1c2hNYXNrID0gZnVuY3Rpb24gKHRhcmdldCwgbWFza0RhdGEpXG57XG4gICAgaWYgKG1hc2tEYXRhLnRleHR1cmUpXG4gICAge1xuICAgICAgICB0aGlzLnB1c2hTcHJpdGVNYXNrKHRhcmdldCwgbWFza0RhdGEpO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICB0aGlzLnB1c2hTdGVuY2lsTWFzayh0YXJnZXQsIG1hc2tEYXRhKTtcbiAgICB9XG5cbn07XG5cbi8qKlxuICogUmVtb3ZlcyB0aGUgbGFzdCBtYXNrIGZyb20gdGhlIG1hc2sgc3RhY2sgYW5kIGRvZXNuJ3QgcmV0dXJuIGl0LlxuICpcbiAqIEBwYXJhbSB0YXJnZXQge1BJWEkuUmVuZGVyVGFyZ2V0fVxuICogQHBhcmFtIG1hc2tEYXRhIHthbnlbXX1cbiAqL1xuTWFza01hbmFnZXIucHJvdG90eXBlLnBvcE1hc2sgPSBmdW5jdGlvbiAodGFyZ2V0LCBtYXNrRGF0YSlcbntcbiAgICBpZiAobWFza0RhdGEudGV4dHVyZSlcbiAgICB7XG4gICAgICAgIHRoaXMucG9wU3ByaXRlTWFzayh0YXJnZXQsIG1hc2tEYXRhKTtcbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgdGhpcy5wb3BTdGVuY2lsTWFzayh0YXJnZXQsIG1hc2tEYXRhKTtcbiAgICB9XG59O1xuXG4vKipcbiAqIEFwcGxpZXMgdGhlIE1hc2sgYW5kIGFkZHMgaXQgdG8gdGhlIGN1cnJlbnQgZmlsdGVyIHN0YWNrLlxuICpcbiAqIEBwYXJhbSB0YXJnZXQge1BJWEkuUmVuZGVyVGFyZ2V0fVxuICogQHBhcmFtIG1hc2tEYXRhIHthbnlbXX1cbiAqL1xuTWFza01hbmFnZXIucHJvdG90eXBlLnB1c2hTcHJpdGVNYXNrID0gZnVuY3Rpb24gKHRhcmdldCwgbWFza0RhdGEpXG57XG4gICAgdmFyIGFscGhhTWFza0ZpbHRlciA9IHRoaXMuYWxwaGFNYXNrUG9vbC5wb3AoKTtcblxuICAgIGlmICghYWxwaGFNYXNrRmlsdGVyKVxuICAgIHtcbiAgICAgICAgYWxwaGFNYXNrRmlsdGVyID0gW25ldyBBbHBoYU1hc2tGaWx0ZXIobWFza0RhdGEpXTtcbiAgICB9XG5cbiAgICBhbHBoYU1hc2tGaWx0ZXJbMF0ubWFza1Nwcml0ZSA9IG1hc2tEYXRhO1xuICAgIHRoaXMucmVuZGVyZXIuZmlsdGVyTWFuYWdlci5wdXNoRmlsdGVyKHRhcmdldCwgYWxwaGFNYXNrRmlsdGVyKTtcbn07XG5cbi8qKlxuICogUmVtb3ZlcyB0aGUgbGFzdCBmaWx0ZXIgZnJvbSB0aGUgZmlsdGVyIHN0YWNrIGFuZCBkb2Vzbid0IHJldHVybiBpdC5cbiAqXG4gKi9cbk1hc2tNYW5hZ2VyLnByb3RvdHlwZS5wb3BTcHJpdGVNYXNrID0gZnVuY3Rpb24gKClcbntcbiAgICB2YXIgZmlsdGVycyA9IHRoaXMucmVuZGVyZXIuZmlsdGVyTWFuYWdlci5wb3BGaWx0ZXIoKTtcblxuICAgIHRoaXMuYWxwaGFNYXNrUG9vbC5wdXNoKGZpbHRlcnMpO1xufTtcblxuXG4vKipcbiAqIEFwcGxpZXMgdGhlIE1hc2sgYW5kIGFkZHMgaXQgdG8gdGhlIGN1cnJlbnQgZmlsdGVyIHN0YWNrLlxuICpcbiAqIEBwYXJhbSB0YXJnZXQge1BJWEkuUmVuZGVyVGFyZ2V0fVxuICogQHBhcmFtIG1hc2tEYXRhIHthbnlbXX1cbiAqL1xuTWFza01hbmFnZXIucHJvdG90eXBlLnB1c2hTdGVuY2lsTWFzayA9IGZ1bmN0aW9uICh0YXJnZXQsIG1hc2tEYXRhKVxue1xuICAgIHRoaXMucmVuZGVyZXIuc3RlbmNpbE1hbmFnZXIucHVzaE1hc2sobWFza0RhdGEpO1xufTtcblxuLyoqXG4gKiBSZW1vdmVzIHRoZSBsYXN0IGZpbHRlciBmcm9tIHRoZSBmaWx0ZXIgc3RhY2sgYW5kIGRvZXNuJ3QgcmV0dXJuIGl0LlxuICpcbiAqIEBwYXJhbSB0YXJnZXQge1BJWEkuUmVuZGVyVGFyZ2V0fVxuICogQHBhcmFtIG1hc2tEYXRhIHthbnlbXX1cbiAqL1xuTWFza01hbmFnZXIucHJvdG90eXBlLnBvcFN0ZW5jaWxNYXNrID0gZnVuY3Rpb24gKHRhcmdldCwgbWFza0RhdGEpXG57XG4gICAgdGhpcy5yZW5kZXJlci5zdGVuY2lsTWFuYWdlci5wb3BNYXNrKG1hc2tEYXRhKTtcbn07XG5cbiIsInZhciBXZWJHTE1hbmFnZXIgPSByZXF1aXJlKCcuL1dlYkdMTWFuYWdlcicpLFxuICAgIFRleHR1cmVTaGFkZXIgPSByZXF1aXJlKCcuLi9zaGFkZXJzL1RleHR1cmVTaGFkZXInKSxcbiAgICBDb21wbGV4UHJpbWl0aXZlU2hhZGVyID0gcmVxdWlyZSgnLi4vc2hhZGVycy9Db21wbGV4UHJpbWl0aXZlU2hhZGVyJyksXG4gICAgUHJpbWl0aXZlU2hhZGVyID0gcmVxdWlyZSgnLi4vc2hhZGVycy9QcmltaXRpdmVTaGFkZXInKSxcbiAgICB1dGlscyA9IHJlcXVpcmUoJy4uLy4uLy4uL3V0aWxzJyk7XG5cbi8qKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQGV4dGVuZHMgUElYSS5XZWJHTE1hbmFnZXJcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5XZWJHTFJlbmRlcmVyfSBUaGUgcmVuZGVyZXIgdGhpcyBtYW5hZ2VyIHdvcmtzIGZvci5cbiAqL1xuZnVuY3Rpb24gU2hhZGVyTWFuYWdlcihyZW5kZXJlcilcbntcbiAgICBXZWJHTE1hbmFnZXIuY2FsbCh0aGlzLCByZW5kZXJlcik7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy5tYXhBdHRpYnMgPSAxMDtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge2FueVtdfVxuICAgICAqL1xuICAgIHRoaXMuYXR0cmliU3RhdGUgPSBbXTtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge2FueVtdfVxuICAgICAqL1xuICAgIHRoaXMudGVtcEF0dHJpYlN0YXRlID0gW107XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMubWF4QXR0aWJzOyBpKyspXG4gICAge1xuICAgICAgICB0aGlzLmF0dHJpYlN0YXRlW2ldID0gZmFsc2U7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7YW55W119XG4gICAgICovXG4gICAgdGhpcy5zdGFjayA9IFtdO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fY3VycmVudElkID0gLTE7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlNoYWRlcn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuY3VycmVudFNoYWRlciA9IG51bGw7XG5cbi8vICAgIHRoaXMuaW5pdFBsdWdpbnMoKTtcbn1cblxuU2hhZGVyTWFuYWdlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFdlYkdMTWFuYWdlci5wcm90b3R5cGUpO1xuU2hhZGVyTWFuYWdlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBTaGFkZXJNYW5hZ2VyO1xudXRpbHMucGx1Z2luVGFyZ2V0Lm1peGluKFNoYWRlck1hbmFnZXIpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IFNoYWRlck1hbmFnZXI7XG5cbi8qKlxuICogQ2FsbGVkIHdoZW4gdGhlcmUgaXMgYSBXZWJHTCBjb250ZXh0IGNoYW5nZS5cbiAqXG4gKi9cblNoYWRlck1hbmFnZXIucHJvdG90eXBlLm9uQ29udGV4dENoYW5nZSA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy5pbml0UGx1Z2lucygpO1xuXG4gICAgdmFyIGdsID0gdGhpcy5yZW5kZXJlci5nbDtcblxuICAgIC8vIGdldCB0aGUgbWF4aW11bSBudW1iZXIgb2YgYXR0cmlidXRlIGNvcnJlY3RseSBhcyB0aGlzIHRlbmRzIHRvIHZhcnlcbiAgICB0aGlzLm1heEF0dGlicyA9IGdsLmdldFBhcmFtZXRlcihnbC5NQVhfVkVSVEVYX0FUVFJJQlMpO1xuXG4gICAgdGhpcy5hdHRyaWJTdGF0ZSA9IFtdO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLm1heEF0dGliczsgaSsrKVxuICAgIHtcbiAgICAgICAgdGhpcy5hdHRyaWJTdGF0ZVtpXSA9IGZhbHNlO1xuICAgIH1cblxuICAgIC8vIFRPRE8gLSBXaHkgYXJlIHRoZXNlIG5vdCBwbHVnaW5zPyBXZSBjYW4ndCBkZWNvdXBsZSBwcmltaXRpdmVzIHVubGVzcyB0aGV5IGFyZS4uLi5cbiAgICB0aGlzLmRlZmF1bHRTaGFkZXIgPSBuZXcgVGV4dHVyZVNoYWRlcih0aGlzKTtcbiAgICB0aGlzLnByaW1pdGl2ZVNoYWRlciA9IG5ldyBQcmltaXRpdmVTaGFkZXIodGhpcyk7XG4gICAgdGhpcy5jb21wbGV4UHJpbWl0aXZlU2hhZGVyID0gbmV3IENvbXBsZXhQcmltaXRpdmVTaGFkZXIodGhpcyk7XG59O1xuXG4vKipcbiAqIFRha2VzIHRoZSBhdHRyaWJ1dGVzIGdpdmVuIGluIHBhcmFtZXRlcnMgYW5kIHVwbG9hZHMgdGhlbS5cbiAqXG4gKiBAcGFyYW0gYXR0cmlicyB7YW55W119IGF0dHJpYnNcbiAqL1xuU2hhZGVyTWFuYWdlci5wcm90b3R5cGUuc2V0QXR0cmlicyA9IGZ1bmN0aW9uIChhdHRyaWJzKVxue1xuICAgIC8vIHJlc2V0IHRlbXAgc3RhdGVcbiAgICB2YXIgaTtcblxuICAgIGZvciAoaSA9IDA7IGkgPCB0aGlzLnRlbXBBdHRyaWJTdGF0ZS5sZW5ndGg7IGkrKylcbiAgICB7XG4gICAgICAgIHRoaXMudGVtcEF0dHJpYlN0YXRlW2ldID0gZmFsc2U7XG4gICAgfVxuXG4gICAgLy8gc2V0IHRoZSBuZXcgYXR0cmlic1xuICAgIGZvciAodmFyIGEgaW4gYXR0cmlicylcbiAgICB7XG4gICAgICAgIHRoaXMudGVtcEF0dHJpYlN0YXRlW2F0dHJpYnNbYV1dID0gdHJ1ZTtcbiAgICB9XG5cbiAgICB2YXIgZ2wgPSB0aGlzLnJlbmRlcmVyLmdsO1xuXG4gICAgZm9yIChpID0gMDsgaSA8IHRoaXMuYXR0cmliU3RhdGUubGVuZ3RoOyBpKyspXG4gICAge1xuICAgICAgICBpZiAodGhpcy5hdHRyaWJTdGF0ZVtpXSAhPT0gdGhpcy50ZW1wQXR0cmliU3RhdGVbaV0pXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuYXR0cmliU3RhdGVbaV0gPSB0aGlzLnRlbXBBdHRyaWJTdGF0ZVtpXTtcblxuICAgICAgICAgICAgaWYgKHRoaXMuYXR0cmliU3RhdGVbaV0pXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgZ2wuZW5hYmxlVmVydGV4QXR0cmliQXJyYXkoaSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgZ2wuZGlzYWJsZVZlcnRleEF0dHJpYkFycmF5KGkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxufTtcblxuLyoqXG4gKiBTZXRzIHRoZSBjdXJyZW50IHNoYWRlci5cbiAqXG4gKiBAcGFyYW0gc2hhZGVyIHtQSVhJLlNoYWRlcn0gdGhlIHNoYWRlciB0byB1cGxvYWRcbiAqL1xuU2hhZGVyTWFuYWdlci5wcm90b3R5cGUuc2V0U2hhZGVyID0gZnVuY3Rpb24gKHNoYWRlcilcbntcbiAgICByZXR1cm47XG4gICAgaWYgKHRoaXMuX2N1cnJlbnRJZCA9PT0gc2hhZGVyLnVpZClcbiAgICB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICB0aGlzLl9jdXJyZW50SWQgPSBzaGFkZXIudWlkO1xuXG4gICAgdGhpcy5jdXJyZW50U2hhZGVyID0gc2hhZGVyO1xuXG4gICAgdGhpcy5yZW5kZXJlci5nbC51c2VQcm9ncmFtKHNoYWRlci5wcm9ncmFtKTtcbiAgICB0aGlzLnNldEF0dHJpYnMoc2hhZGVyLmF0dHJpYnV0ZXMpO1xuXG4gICAgcmV0dXJuIHRydWU7XG59O1xuXG4vKipcbiAqIERlc3Ryb3lzIHRoaXMgb2JqZWN0LlxuICpcbiAqL1xuU2hhZGVyTWFuYWdlci5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy5wcmltaXRpdmVTaGFkZXIuZGVzdHJveSgpO1xuICAgIHRoaXMuY29tcGxleFByaW1pdGl2ZVNoYWRlci5kZXN0cm95KCk7XG4gICAgV2ViR0xNYW5hZ2VyLnByb3RvdHlwZS5kZXN0cm95LmNhbGwodGhpcyk7XG5cbiAgICB0aGlzLmRlc3Ryb3lQbHVnaW5zKCk7XG5cbiAgICB0aGlzLmF0dHJpYlN0YXRlID0gbnVsbDtcblxuICAgIHRoaXMudGVtcEF0dHJpYlN0YXRlID0gbnVsbDtcbn07XG4iLCJ2YXIgV2ViR0xNYW5hZ2VyID0gcmVxdWlyZSgnLi9XZWJHTE1hbmFnZXInKSxcbiAgICB1dGlscyA9IHJlcXVpcmUoJy4uLy4uLy4uL3V0aWxzJyk7XG5cbi8qKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLldlYkdMUmVuZGVyZXJ9IFRoZSByZW5kZXJlciB0aGlzIG1hbmFnZXIgd29ya3MgZm9yLlxuICovXG5mdW5jdGlvbiBXZWJHTE1hc2tNYW5hZ2VyKHJlbmRlcmVyKVxue1xuICAgIFdlYkdMTWFuYWdlci5jYWxsKHRoaXMsIHJlbmRlcmVyKTtcbiAgICB0aGlzLnN0ZW5jaWxNYXNrU3RhY2sgPSBudWxsO1xufVxuXG5XZWJHTE1hc2tNYW5hZ2VyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoV2ViR0xNYW5hZ2VyLnByb3RvdHlwZSk7XG5XZWJHTE1hc2tNYW5hZ2VyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFdlYkdMTWFza01hbmFnZXI7XG5tb2R1bGUuZXhwb3J0cyA9IFdlYkdMTWFza01hbmFnZXI7XG5cbi8qKlxuICogQ2hhbmdlcyB0aGUgbWFzayBzdGFjayB0aGF0IGlzIHVzZWQgYnkgdGhpcyBtYW5hZ2VyLlxuICpcbiAqIEBwYXJhbSBzdGVuY2lsTWFza1N0YWNrIHtQSVhJLlN0ZW5jaWxNYXNrU3RhY2t9IFRoZSBtYXNrIHN0YWNrXG4gKi9cbldlYkdMTWFza01hbmFnZXIucHJvdG90eXBlLnNldE1hc2tTdGFjayA9IGZ1bmN0aW9uICggc3RlbmNpbE1hc2tTdGFjayApXG57XG4gICAgdGhpcy5zdGVuY2lsTWFza1N0YWNrID0gc3RlbmNpbE1hc2tTdGFjaztcblxuICAgIHZhciBnbCA9IHRoaXMucmVuZGVyZXIuZ2w7XG5cbiAgICBpZiAoc3RlbmNpbE1hc2tTdGFjay5zdGVuY2lsU3RhY2subGVuZ3RoID09PSAwKVxuICAgIHtcbiAgICAgICAgZ2wuZGlzYWJsZShnbC5TVEVOQ0lMX1RFU1QpO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICBnbC5lbmFibGUoZ2wuU1RFTkNJTF9URVNUKTtcbiAgICB9XG59O1xuXG4vKipcbiAqIEFwcGxpZXMgdGhlIE1hc2sgYW5kIGFkZHMgaXQgdG8gdGhlIGN1cnJlbnQgZmlsdGVyIHN0YWNrLiBAYWx2aW5cbiAqXG4gKiBAcGFyYW0gZ3JhcGhpY3Mge1BJWEkuR3JhcGhpY3N9XG4gKiBAcGFyYW0gd2ViR0xEYXRhIHthbnlbXX1cbiAqL1xuV2ViR0xNYXNrTWFuYWdlci5wcm90b3R5cGUucHVzaFN0ZW5jaWwgPSBmdW5jdGlvbiAoZ3JhcGhpY3MsIHdlYkdMRGF0YSlcbntcbiAgICB0aGlzLnJlbmRlcmVyLl9hY3RpdmVSZW5kZXJUYXJnZXQuYXR0YWNoU3RlbmNpbEJ1ZmZlcigpO1xuXG4gICAgdmFyIGdsID0gdGhpcy5yZW5kZXJlci5nbCxcbiAgICAgICAgc21zID0gdGhpcy5zdGVuY2lsTWFza1N0YWNrO1xuXG4gICAgdGhpcy5iaW5kR3JhcGhpY3MoZ3JhcGhpY3MsIHdlYkdMRGF0YSk7XG5cbiAgICBpZiAoc21zLnN0ZW5jaWxTdGFjay5sZW5ndGggPT09IDApXG4gICAge1xuICAgICAgICBnbC5lbmFibGUoZ2wuU1RFTkNJTF9URVNUKTtcbiAgICAgICAgZ2wuY2xlYXIoZ2wuU1RFTkNJTF9CVUZGRVJfQklUKTtcbiAgICAgICAgc21zLnJldmVyc2UgPSB0cnVlO1xuICAgICAgICBzbXMuY291bnQgPSAwO1xuICAgIH1cblxuICAgIHNtcy5zdGVuY2lsU3RhY2sucHVzaCh3ZWJHTERhdGEpO1xuXG4gICAgdmFyIGxldmVsID0gc21zLmNvdW50O1xuXG4gICAgZ2wuY29sb3JNYXNrKGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlKTtcblxuICAgIGdsLnN0ZW5jaWxGdW5jKGdsLkFMV0FZUywwLDB4RkYpO1xuICAgIGdsLnN0ZW5jaWxPcChnbC5LRUVQLGdsLktFRVAsZ2wuSU5WRVJUKTtcblxuICAgIC8vIGRyYXcgdGhlIHRyaWFuZ2xlIHN0cmlwIVxuXG4gICAgaWYgKHdlYkdMRGF0YS5tb2RlID09PSAxKVxuICAgIHtcbiAgICAgICAgZ2wuZHJhd0VsZW1lbnRzKGdsLlRSSUFOR0xFX0ZBTiwgIHdlYkdMRGF0YS5pbmRpY2VzLmxlbmd0aCAtIDQsIGdsLlVOU0lHTkVEX1NIT1JULCAwICk7XG5cbiAgICAgICAgaWYgKHNtcy5yZXZlcnNlKVxuICAgICAgICB7XG4gICAgICAgICAgICBnbC5zdGVuY2lsRnVuYyhnbC5FUVVBTCwgMHhGRiAtIGxldmVsLCAweEZGKTtcbiAgICAgICAgICAgIGdsLnN0ZW5jaWxPcChnbC5LRUVQLGdsLktFRVAsZ2wuREVDUik7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgICBnbC5zdGVuY2lsRnVuYyhnbC5FUVVBTCxsZXZlbCwgMHhGRik7XG4gICAgICAgICAgICBnbC5zdGVuY2lsT3AoZ2wuS0VFUCxnbC5LRUVQLGdsLklOQ1IpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gZHJhdyBhIHF1YWQgdG8gaW5jcmVtZW50Li5cbiAgICAgICAgZ2wuZHJhd0VsZW1lbnRzKGdsLlRSSUFOR0xFX0ZBTiwgNCwgZ2wuVU5TSUdORURfU0hPUlQsICggd2ViR0xEYXRhLmluZGljZXMubGVuZ3RoIC0gNCApICogMiApO1xuXG4gICAgICAgIGlmIChzbXMucmV2ZXJzZSlcbiAgICAgICAge1xuICAgICAgICAgICAgZ2wuc3RlbmNpbEZ1bmMoZ2wuRVFVQUwsMHhGRi0obGV2ZWwrMSksIDB4RkYpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2VcbiAgICAgICAge1xuICAgICAgICAgICAgZ2wuc3RlbmNpbEZ1bmMoZ2wuRVFVQUwsbGV2ZWwrMSwgMHhGRik7XG4gICAgICAgIH1cblxuICAgICAgICBzbXMucmV2ZXJzZSA9ICFzbXMucmV2ZXJzZTtcbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgaWYgKCFzbXMucmV2ZXJzZSlcbiAgICAgICAge1xuICAgICAgICAgICAgZ2wuc3RlbmNpbEZ1bmMoZ2wuRVFVQUwsIDB4RkYgLSBsZXZlbCwgMHhGRik7XG4gICAgICAgICAgICBnbC5zdGVuY2lsT3AoZ2wuS0VFUCxnbC5LRUVQLGdsLkRFQ1IpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2VcbiAgICAgICAge1xuICAgICAgICAgICAgZ2wuc3RlbmNpbEZ1bmMoZ2wuRVFVQUwsbGV2ZWwsIDB4RkYpO1xuICAgICAgICAgICAgZ2wuc3RlbmNpbE9wKGdsLktFRVAsZ2wuS0VFUCxnbC5JTkNSKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGdsLmRyYXdFbGVtZW50cyhnbC5UUklBTkdMRV9TVFJJUCwgIHdlYkdMRGF0YS5pbmRpY2VzLmxlbmd0aCwgZ2wuVU5TSUdORURfU0hPUlQsIDAgKTtcblxuICAgICAgICBpZiAoIXNtcy5yZXZlcnNlKVxuICAgICAgICB7XG4gICAgICAgICAgICBnbC5zdGVuY2lsRnVuYyhnbC5FUVVBTCwweEZGLShsZXZlbCsxKSwgMHhGRik7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgICBnbC5zdGVuY2lsRnVuYyhnbC5FUVVBTCxsZXZlbCsxLCAweEZGKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGdsLmNvbG9yTWFzayh0cnVlLCB0cnVlLCB0cnVlLCB0cnVlKTtcbiAgICBnbC5zdGVuY2lsT3AoZ2wuS0VFUCxnbC5LRUVQLGdsLktFRVApO1xuXG4gICAgc21zLmNvdW50Kys7XG59O1xuXG4vKipcbiAqIFRPRE8gdGhpcyBkb2VzIG5vdCBiZWxvbmcgaGVyZSFcbiAqXG4gKiBAcGFyYW0gZ3JhcGhpY3Mge1BJWEkuR3JhcGhpY3N9XG4gKiBAcGFyYW0gd2ViR0xEYXRhIHthbnlbXX1cbiAqL1xuV2ViR0xNYXNrTWFuYWdlci5wcm90b3R5cGUuYmluZEdyYXBoaWNzID0gZnVuY3Rpb24gKGdyYXBoaWNzLCB3ZWJHTERhdGEpXG57XG4gICAgLy9pZiAodGhpcy5fY3VycmVudEdyYXBoaWNzID09PSBncmFwaGljcylyZXR1cm47XG4gICAgdmFyIGdsID0gdGhpcy5yZW5kZXJlci5nbDtcblxuICAgICAvLyBiaW5kIHRoZSBncmFwaGljcyBvYmplY3QuLlxuICAgIHZhciBzaGFkZXIgPSB0aGlzLnJlbmRlcmVyLnBsdWdpbnMuZ3JhcGhpY3MucHJpbWl0aXZlU2hhZGVyO1xuXG4gICAgaWYgKHdlYkdMRGF0YS5tb2RlID09PSAxKVxuICAgIHtcbiAgICAgICAgLypcbiAgICAgICAgc2hhZGVyID0gdGhpcy5yZW5kZXJlci5zaGFkZXJNYW5hZ2VyLmNvbXBsZXhQcmltaXRpdmVTaGFkZXI7XG5cbiAgICAgICAgdGhpcy5yZW5kZXJlci5zaGFkZXJNYW5hZ2VyLnNldFNoYWRlcihzaGFkZXIpO1xuXG4gICAgICAgIGdsLnVuaWZvcm1NYXRyaXgzZnYoc2hhZGVyLnVuaWZvcm1zLnRyYW5zbGF0aW9uTWF0cml4Ll9sb2NhdGlvbiwgZmFsc2UsIGdyYXBoaWNzLndvcmxkVHJhbnNmb3JtLnRvQXJyYXkodHJ1ZSkpO1xuXG4gICAgICAgIGdsLnVuaWZvcm1NYXRyaXgzZnYoc2hhZGVyLnVuaWZvcm1zLnByb2plY3Rpb25NYXRyaXguX2xvY2F0aW9uLCBmYWxzZSwgdGhpcy5yZW5kZXJlci5jdXJyZW50UmVuZGVyVGFyZ2V0LnByb2plY3Rpb25NYXRyaXgudG9BcnJheSh0cnVlKSk7XG5cbiAgICAgICAgZ2wudW5pZm9ybTNmdihzaGFkZXIudW5pZm9ybXMudGludC5fbG9jYXRpb24sIHV0aWxzLmhleDJyZ2IoZ3JhcGhpY3MudGludCkpO1xuXG4gICAgICAgIGdsLnVuaWZvcm0zZnYoc2hhZGVyLnVuaWZvcm1zLmNvbG9yLl9sb2NhdGlvbiwgd2ViR0xEYXRhLmNvbG9yKTtcblxuICAgICAgICBnbC51bmlmb3JtMWYoc2hhZGVyLnVuaWZvcm1zLmFscGhhLl9sb2NhdGlvbiwgZ3JhcGhpY3Mud29ybGRBbHBoYSk7XG5cbiAgICAgICAgZ2wuYmluZEJ1ZmZlcihnbC5BUlJBWV9CVUZGRVIsIHdlYkdMRGF0YS5idWZmZXIpO1xuXG4gICAgICAgIGdsLnZlcnRleEF0dHJpYlBvaW50ZXIoc2hhZGVyLmF0dHJpYnV0ZXMuYVZlcnRleFBvc2l0aW9uLCAyLCBnbC5GTE9BVCwgZmFsc2UsIDQgKiAyLCAwKTtcblxuICAgICAgICAvLyBub3cgZG8gdGhlIHJlc3QuLlxuICAgICAgICAvLyBzZXQgdGhlIGluZGV4IGJ1ZmZlciFcbiAgICAgICAgZ2wuYmluZEJ1ZmZlcihnbC5FTEVNRU5UX0FSUkFZX0JVRkZFUiwgd2ViR0xEYXRhLmluZGV4QnVmZmVyKTtcbiAgICAqL1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICAvL3RoaXMucmVuZGVyZXIuc2hhZGVyTWFuYWdlci5hY3RpdmF0ZVByaW1pdGl2ZVNoYWRlcigpO1xuLy8gICAgICAgIHNoYWRlciA9IHRoaXMucmVuZGVyZXIuc2hhZGVyTWFuYWdlci5wcmltaXRpdmVTaGFkZXI7XG4gICAgICAgXG4gICAgICAgIHRoaXMucmVuZGVyZXIuYmluZFNoYWRlcihzaGFkZXIpXG5cbiAgICAgICAgc2hhZGVyLnVuaWZvcm1zLnRyYW5zbGF0aW9uTWF0cml4ID0gZ3JhcGhpY3Mud29ybGRUcmFuc2Zvcm0udG9BcnJheSh0cnVlKTtcbiAgICAgICAgc2hhZGVyLnVuaWZvcm1zLnRpbnQgPSB1dGlscy5oZXgycmdiKGdyYXBoaWNzLnRpbnQpO1xuICAgICAgICBzaGFkZXIudW5pZm9ybXMuYWxwaGEgPSBncmFwaGljcy53b3JsZEFscGhhO1xuXG5cbiAgICAgICAgZ2wuYmluZEJ1ZmZlcihnbC5BUlJBWV9CVUZGRVIsIHdlYkdMRGF0YS5idWZmZXIpO1xuXG5cbiAgICAgICAgc2hhZGVyLmF0dHJpYnV0ZXMuYVZlcnRleFBvc2l0aW9uLnBvaW50ZXIoZ2wuRkxPQVQsIGZhbHNlLCA0ICogNiwgMCk7XG4gICAgICAgIHNoYWRlci5hdHRyaWJ1dGVzLmFDb2xvci5wb2ludGVyKGdsLkZMT0FULCBmYWxzZSwgNCAqIDYsIDIgKiA0KTtcblxuICAgICAgICBnbC5lbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShzaGFkZXIuYXR0cmlidXRlcy5hVmVydGV4UG9zaXRpb24ubG9jYXRpb24pO1xuICAgICAgICBnbC5lbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShzaGFkZXIuYXR0cmlidXRlcy5hQ29sb3IubG9jYXRpb24pO1xuXG4gICAgICAgIC8vIHNldCB0aGUgaW5kZXggYnVmZmVyIVxuICAgICAgICBnbC5iaW5kQnVmZmVyKGdsLkVMRU1FTlRfQVJSQVlfQlVGRkVSLCB3ZWJHTERhdGEuaW5kZXhCdWZmZXIpO1xuLy8gICAgICAgIGdsLmRyYXdFbGVtZW50cyhnbC5UUklBTkdMRV9TVFJJUCwgIHdlYkdMRGF0YS5pbmRpY2VzLmxlbmd0aCwgZ2wuVU5TSUdORURfU0hPUlQsIDAgKTtcblxuXG4gICAgICAvKiAgdGhpcy5yZW5kZXJlci5zaGFkZXJNYW5hZ2VyLnNldFNoYWRlcihzaGFkZXIpO1xuXG4gICAgICAgIGdsLnVuaWZvcm1NYXRyaXgzZnYoc2hhZGVyLnVuaWZvcm1zLnRyYW5zbGF0aW9uTWF0cml4Ll9sb2NhdGlvbiwgZmFsc2UsIGdyYXBoaWNzLndvcmxkVHJhbnNmb3JtLnRvQXJyYXkodHJ1ZSkpO1xuXG4gICAgICAgIGdsLnVuaWZvcm1NYXRyaXgzZnYoc2hhZGVyLnVuaWZvcm1zLnByb2plY3Rpb25NYXRyaXguX2xvY2F0aW9uLCBmYWxzZSwgdGhpcy5yZW5kZXJlci5jdXJyZW50UmVuZGVyVGFyZ2V0LnByb2plY3Rpb25NYXRyaXgudG9BcnJheSh0cnVlKSk7XG5cbiAgICAgICAgZ2wudW5pZm9ybTNmdihzaGFkZXIudW5pZm9ybXMudGludC5fbG9jYXRpb24sIHV0aWxzLmhleDJyZ2IoZ3JhcGhpY3MudGludCkpO1xuXG4gICAgICAgIGdsLnVuaWZvcm0xZihzaGFkZXIudW5pZm9ybXMuYWxwaGEuX2xvY2F0aW9uLCBncmFwaGljcy53b3JsZEFscGhhKTtcblxuICAgICAgICBnbC5iaW5kQnVmZmVyKGdsLkFSUkFZX0JVRkZFUiwgd2ViR0xEYXRhLmJ1ZmZlcik7XG5cbiAgICAgICAgZ2wudmVydGV4QXR0cmliUG9pbnRlcihzaGFkZXIuYXR0cmlidXRlcy5hVmVydGV4UG9zaXRpb24sIDIsIGdsLkZMT0FULCBmYWxzZSwgNCAqIDYsIDApO1xuICAgICAgICBnbC52ZXJ0ZXhBdHRyaWJQb2ludGVyKHNoYWRlci5hdHRyaWJ1dGVzLmFDb2xvciwgNCwgZ2wuRkxPQVQsIGZhbHNlLDQgKiA2LCAyICogNCk7XG5cbiAgICAgICAgLy8gc2V0IHRoZSBpbmRleCBidWZmZXIhXG4gICAgICAgIGdsLmJpbmRCdWZmZXIoZ2wuRUxFTUVOVF9BUlJBWV9CVUZGRVIsIHdlYkdMRGF0YS5pbmRleEJ1ZmZlcik7Ki9cbiAgICB9XG59O1xuXG4vKipcbiAqIFRPRE8gQGFsdmluXG4gKiBAcGFyYW0gZ3JhcGhpY3Mge1BJWEkuR3JhcGhpY3N9XG4gKiBAcGFyYW0gd2ViR0xEYXRhIHthbnlbXX1cbiAqL1xuV2ViR0xNYXNrTWFuYWdlci5wcm90b3R5cGUucG9wU3RlbmNpbCA9IGZ1bmN0aW9uIChncmFwaGljcywgd2ViR0xEYXRhKVxue1xuICAgIHZhciBnbCA9IHRoaXMucmVuZGVyZXIuZ2wsXG4gICAgICAgIHNtcyA9IHRoaXMuc3RlbmNpbE1hc2tTdGFjaztcblxuICAgIHNtcy5zdGVuY2lsU3RhY2sucG9wKCk7XG5cbiAgICBzbXMuY291bnQtLTtcblxuICAgIGlmIChzbXMuc3RlbmNpbFN0YWNrLmxlbmd0aCA9PT0gMClcbiAgICB7XG4gICAgICAgIC8vIHRoZSBzdGFjayBpcyBlbXB0eSFcbiAgICAgICAgZ2wuZGlzYWJsZShnbC5TVEVOQ0lMX1RFU1QpO1xuXG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG5cbiAgICAgICAgdmFyIGxldmVsID0gc21zLmNvdW50O1xuXG4gICAgICAgIHRoaXMuYmluZEdyYXBoaWNzKGdyYXBoaWNzLCB3ZWJHTERhdGEpO1xuXG4gICAgICAgIGdsLmNvbG9yTWFzayhmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSk7XG5cbiAgICAgICAgaWYgKHdlYkdMRGF0YS5tb2RlID09PSAxKVxuICAgICAgICB7XG4gICAgICAgICAgICBzbXMucmV2ZXJzZSA9ICFzbXMucmV2ZXJzZTtcblxuICAgICAgICAgICAgaWYgKHNtcy5yZXZlcnNlKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGdsLnN0ZW5jaWxGdW5jKGdsLkVRVUFMLCAweEZGIC0gKGxldmVsKzEpLCAweEZGKTtcbiAgICAgICAgICAgICAgICBnbC5zdGVuY2lsT3AoZ2wuS0VFUCxnbC5LRUVQLGdsLklOQ1IpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGdsLnN0ZW5jaWxGdW5jKGdsLkVRVUFMLGxldmVsKzEsIDB4RkYpO1xuICAgICAgICAgICAgICAgIGdsLnN0ZW5jaWxPcChnbC5LRUVQLGdsLktFRVAsZ2wuREVDUik7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIGRyYXcgYSBxdWFkIHRvIGluY3JlbWVudC4uXG4gICAgICAgICAgICBnbC5kcmF3RWxlbWVudHMoZ2wuVFJJQU5HTEVfRkFOLCA0LCBnbC5VTlNJR05FRF9TSE9SVCwgKCB3ZWJHTERhdGEuaW5kaWNlcy5sZW5ndGggLSA0ICkgKiAyICk7XG5cbiAgICAgICAgICAgIGdsLnN0ZW5jaWxGdW5jKGdsLkFMV0FZUywwLDB4RkYpO1xuICAgICAgICAgICAgZ2wuc3RlbmNpbE9wKGdsLktFRVAsZ2wuS0VFUCxnbC5JTlZFUlQpO1xuXG4gICAgICAgICAgICAvLyBkcmF3IHRoZSB0cmlhbmdsZSBzdHJpcCFcbiAgICAgICAgICAgIGdsLmRyYXdFbGVtZW50cyhnbC5UUklBTkdMRV9GQU4sICB3ZWJHTERhdGEuaW5kaWNlcy5sZW5ndGggLSA0LCBnbC5VTlNJR05FRF9TSE9SVCwgMCApO1xuXG4gICAgICAgICAgICB0aGlzLnJlbmRlcmVyLmRyYXdDb3VudCArPSAyO1xuXG4gICAgICAgICAgICBpZiAoIXNtcy5yZXZlcnNlKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGdsLnN0ZW5jaWxGdW5jKGdsLkVRVUFMLDB4RkYtKGxldmVsKSwgMHhGRik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgZ2wuc3RlbmNpbEZ1bmMoZ2wuRVFVQUwsbGV2ZWwsIDB4RkYpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgLy8gIGNvbnNvbGUubG9nKFwiPDw+PlwiKVxuICAgICAgICAgICAgaWYgKCFzbXMucmV2ZXJzZSlcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBnbC5zdGVuY2lsRnVuYyhnbC5FUVVBTCwgMHhGRiAtIChsZXZlbCsxKSwgMHhGRik7XG4gICAgICAgICAgICAgICAgZ2wuc3RlbmNpbE9wKGdsLktFRVAsZ2wuS0VFUCxnbC5JTkNSKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBnbC5zdGVuY2lsRnVuYyhnbC5FUVVBTCxsZXZlbCsxLCAweEZGKTtcbiAgICAgICAgICAgICAgICBnbC5zdGVuY2lsT3AoZ2wuS0VFUCxnbC5LRUVQLGdsLkRFQ1IpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBnbC5kcmF3RWxlbWVudHMoZ2wuVFJJQU5HTEVfU1RSSVAsICB3ZWJHTERhdGEuaW5kaWNlcy5sZW5ndGgsIGdsLlVOU0lHTkVEX1NIT1JULCAwICk7XG5cbiAgICAgICAgICAgIHRoaXMucmVuZGVyZXIuZHJhd0NvdW50Kys7XG5cbiAgICAgICAgICAgIGlmICghc21zLnJldmVyc2UpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgZ2wuc3RlbmNpbEZ1bmMoZ2wuRVFVQUwsMHhGRi0obGV2ZWwpLCAweEZGKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBnbC5zdGVuY2lsRnVuYyhnbC5FUVVBTCxsZXZlbCwgMHhGRik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBnbC5jb2xvck1hc2sodHJ1ZSwgdHJ1ZSwgdHJ1ZSwgdHJ1ZSk7XG4gICAgICAgIGdsLnN0ZW5jaWxPcChnbC5LRUVQLGdsLktFRVAsZ2wuS0VFUCk7XG5cblxuICAgIH1cbn07XG5cbi8qKlxuICogRGVzdHJveXMgdGhlIG1hc2sgc3RhY2suXG4gKlxuICovXG5XZWJHTE1hc2tNYW5hZ2VyLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKClcbntcbiAgICBXZWJHTE1hbmFnZXIucHJvdG90eXBlLmRlc3Ryb3kuY2FsbCh0aGlzKTtcblxuICAgIHRoaXMuc3RlbmNpbE1hc2tTdGFjay5zdGVuY2lsU3RhY2sgPSBudWxsO1xufTtcblxuLyoqXG4gKiBBcHBsaWVzIHRoZSBNYXNrIGFuZCBhZGRzIGl0IHRvIHRoZSBjdXJyZW50IGZpbHRlciBzdGFjay5cbiAqXG4gKiBAcGFyYW0gbWFza0RhdGEge2FueVtdfSBUaGUgbWFzayBkYXRhIHN0cnVjdHVyZSB0byB1c2VcbiAqL1xuV2ViR0xNYXNrTWFuYWdlci5wcm90b3R5cGUucHVzaE1hc2sgPSBmdW5jdGlvbiAobWFza0RhdGEpXG57XG4gICAgdGhpcy5yZW5kZXJlci5zZXRPYmplY3RSZW5kZXJlcih0aGlzLnJlbmRlcmVyLnBsdWdpbnMuZ3JhcGhpY3MpO1xuICAgIFxuICAgIC8vVE9ETyBGSVhcbiAgICBpZiAobWFza0RhdGEuZGlydHkpXG4gICAge1xuICAgICAgICB0aGlzLnJlbmRlcmVyLnBsdWdpbnMuZ3JhcGhpY3MudXBkYXRlR3JhcGhpY3MobWFza0RhdGEsIHRoaXMucmVuZGVyZXIuZ2wpO1xuICAgIH1cblxuICAgIGlmICghbWFza0RhdGEuX3dlYkdMW3RoaXMucmVuZGVyZXIuZ2wuaWRdLmRhdGEubGVuZ3RoKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMucHVzaFN0ZW5jaWwobWFza0RhdGEsIG1hc2tEYXRhLl93ZWJHTFt0aGlzLnJlbmRlcmVyLmdsLmlkXS5kYXRhWzBdKTtcbn07XG5cbi8qKlxuICogUmVtb3ZlcyB0aGUgbGFzdCBmaWx0ZXIgZnJvbSB0aGUgZmlsdGVyIHN0YWNrIGFuZCBkb2Vzbid0IHJldHVybiBpdC5cbiAqXG4gKiBAcGFyYW0gbWFza0RhdGEge2FueVtdfVxuICovXG5XZWJHTE1hc2tNYW5hZ2VyLnByb3RvdHlwZS5wb3BNYXNrID0gZnVuY3Rpb24gKG1hc2tEYXRhKVxue1xuICAgIHRoaXMucmVuZGVyZXIuc2V0T2JqZWN0UmVuZGVyZXIodGhpcy5yZW5kZXJlci5wbHVnaW5zLmdyYXBoaWNzKTtcblxuICAgIHRoaXMucG9wU3RlbmNpbChtYXNrRGF0YSwgbWFza0RhdGEuX3dlYkdMW3RoaXMucmVuZGVyZXIuZ2wuaWRdLmRhdGFbMF0pO1xufTtcblxuIiwiLyoqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcn0gVGhlIHJlbmRlcmVyIHRoaXMgbWFuYWdlciB3b3JrcyBmb3IuXG4gKi9cbmZ1bmN0aW9uIFdlYkdMTWFuYWdlcihyZW5kZXJlcilcbntcbiAgICAvKipcbiAgICAgKiBUaGUgcmVuZGVyZXIgdGhpcyBtYW5hZ2VyIHdvcmtzIGZvci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuV2ViR0xSZW5kZXJlcn1cbiAgICAgKi9cbiAgICB0aGlzLnJlbmRlcmVyID0gcmVuZGVyZXI7XG5cbiAgICB0aGlzLnJlbmRlcmVyLm9uKCdjb250ZXh0JywgdGhpcy5vbkNvbnRleHRDaGFuZ2UsIHRoaXMpO1xufVxuXG5XZWJHTE1hbmFnZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gV2ViR0xNYW5hZ2VyO1xubW9kdWxlLmV4cG9ydHMgPSBXZWJHTE1hbmFnZXI7XG5cbi8qKlxuICogR2VuZXJpYyBtZXRob2QgY2FsbGVkIHdoZW4gdGhlcmUgaXMgYSBXZWJHTCBjb250ZXh0IGNoYW5nZS5cbiAqXG4gKi9cbldlYkdMTWFuYWdlci5wcm90b3R5cGUub25Db250ZXh0Q2hhbmdlID0gZnVuY3Rpb24gKClcbntcblx0Ly8gZG8gc29tZSBjb2RlcyBpbml0IVxufTtcblxuLyoqXG4gKiBHZW5lcmljIGRlc3Ryb3kgbWV0aG9kcyB0byBiZSBvdmVycmlkZGVuIGJ5IHRoZSBzdWJjbGFzc1xuICpcbiAqL1xuV2ViR0xNYW5hZ2VyLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLnJlbmRlcmVyLm9mZignY29udGV4dCcsIHRoaXMub25Db250ZXh0Q2hhbmdlLCB0aGlzKTtcblxuICAgIHRoaXMucmVuZGVyZXIgPSBudWxsO1xufTtcbiIsInZhciBTaGFkZXIgPSByZXF1aXJlKCcuL1NoYWRlcicpO1xuXG4vKipcbiAqIFRoaXMgc2hhZGVyIGlzIHVzZWQgdG8gZHJhdyBjb21wbGV4IHByaW1pdGl2ZSBzaGFwZXMgZm9yIHtAbGluayBQSVhJLkdyYXBoaWNzfS5cbiAqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAZXh0ZW5kcyBQSVhJLlNoYWRlclxuICogQHBhcmFtIHNoYWRlck1hbmFnZXIge1BJWEkuU2hhZGVyTWFuYWdlcn0gVGhlIHdlYmdsIHNoYWRlciBtYW5hZ2VyIHRoaXMgc2hhZGVyIHdvcmtzIGZvci5cbiAqL1xuZnVuY3Rpb24gQ29tcGxleFByaW1pdGl2ZVNoYWRlcihzaGFkZXJNYW5hZ2VyKVxue1xuICAgIFNoYWRlci5jYWxsKHRoaXMsXG4gICAgICAgIHNoYWRlck1hbmFnZXIsXG4gICAgICAgIC8vIHZlcnRleCBzaGFkZXJcbiAgICAgICAgW1xuICAgICAgICAgICAgJ2F0dHJpYnV0ZSB2ZWMyIGFWZXJ0ZXhQb3NpdGlvbjsnLFxuXG4gICAgICAgICAgICAndW5pZm9ybSBtYXQzIHRyYW5zbGF0aW9uTWF0cml4OycsXG4gICAgICAgICAgICAndW5pZm9ybSBtYXQzIHByb2plY3Rpb25NYXRyaXg7JyxcblxuICAgICAgICAgICAgJ3VuaWZvcm0gdmVjMyB0aW50OycsXG4gICAgICAgICAgICAndW5pZm9ybSBmbG9hdCBhbHBoYTsnLFxuICAgICAgICAgICAgJ3VuaWZvcm0gdmVjMyBjb2xvcjsnLFxuXG4gICAgICAgICAgICAndmFyeWluZyB2ZWM0IHZDb2xvcjsnLFxuXG4gICAgICAgICAgICAndm9pZCBtYWluKHZvaWQpeycsXG4gICAgICAgICAgICAnICAgZ2xfUG9zaXRpb24gPSB2ZWM0KChwcm9qZWN0aW9uTWF0cml4ICogdHJhbnNsYXRpb25NYXRyaXggKiB2ZWMzKGFWZXJ0ZXhQb3NpdGlvbiwgMS4wKSkueHksIDAuMCwgMS4wKTsnLFxuICAgICAgICAgICAgJyAgIHZDb2xvciA9IHZlYzQoY29sb3IgKiBhbHBoYSAqIHRpbnQsIGFscGhhKTsnLC8vXCIgKiB2ZWM0KHRpbnQgKiBhbHBoYSwgYWxwaGEpOycsXG4gICAgICAgICAgICAnfSdcbiAgICAgICAgXS5qb2luKCdcXG4nKSxcbiAgICAgICAgLy8gZnJhZ21lbnQgc2hhZGVyXG4gICAgICAgIFtcbiAgICAgICAgICAgICdwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDsnLFxuXG4gICAgICAgICAgICAndmFyeWluZyB2ZWM0IHZDb2xvcjsnLFxuXG4gICAgICAgICAgICAndm9pZCBtYWluKHZvaWQpeycsXG4gICAgICAgICAgICAnICAgZ2xfRnJhZ0NvbG9yID0gdkNvbG9yOycsXG4gICAgICAgICAgICAnfSdcbiAgICAgICAgXS5qb2luKCdcXG4nKSxcbiAgICAgICAgLy8gY3VzdG9tIHVuaWZvcm1zXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRpbnQ6ICAgeyB0eXBlOiAnM2YnLCB2YWx1ZTogWzAsIDAsIDBdIH0sXG4gICAgICAgICAgICBhbHBoYTogIHsgdHlwZTogJzFmJywgdmFsdWU6IDAgfSxcbiAgICAgICAgICAgIGNvbG9yOiAgeyB0eXBlOiAnM2YnLCB2YWx1ZTogWzAsMCwwXSB9LFxuICAgICAgICAgICAgdHJhbnNsYXRpb25NYXRyaXg6IHsgdHlwZTogJ21hdDMnLCB2YWx1ZTogbmV3IEZsb2F0MzJBcnJheSg5KSB9LFxuICAgICAgICAgICAgcHJvamVjdGlvbk1hdHJpeDogeyB0eXBlOiAnbWF0MycsIHZhbHVlOiBuZXcgRmxvYXQzMkFycmF5KDkpIH1cbiAgICAgICAgfSxcbiAgICAgICAgLy8gYXR0cmlidXRlc1xuICAgICAgICB7XG4gICAgICAgICAgICBhVmVydGV4UG9zaXRpb246MFxuICAgICAgICB9XG4gICAgKTtcbn1cblxuQ29tcGxleFByaW1pdGl2ZVNoYWRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFNoYWRlci5wcm90b3R5cGUpO1xuQ29tcGxleFByaW1pdGl2ZVNoYWRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBDb21wbGV4UHJpbWl0aXZlU2hhZGVyO1xubW9kdWxlLmV4cG9ydHMgPSBDb21wbGV4UHJpbWl0aXZlU2hhZGVyO1xuIiwidmFyIFNoYWRlciA9IHJlcXVpcmUoJy4vU2hhZGVyJyk7XG5cbi8qKlxuICogVGhpcyBzaGFkZXIgaXMgdXNlZCB0byBkcmF3IHNpbXBsZSBwcmltaXRpdmUgc2hhcGVzIGZvciB7QGxpbmsgUElYSS5HcmFwaGljc30uXG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQGV4dGVuZHMgUElYSS5TaGFkZXJcbiAqIEBwYXJhbSBzaGFkZXJNYW5hZ2VyIHtTaGFkZXJNYW5hZ2VyfSBUaGUgd2ViZ2wgc2hhZGVyIG1hbmFnZXIgdGhpcyBzaGFkZXIgd29ya3MgZm9yLlxuICovXG5mdW5jdGlvbiBQcmltaXRpdmVTaGFkZXIoc2hhZGVyTWFuYWdlcilcbntcbiAgICBTaGFkZXIuY2FsbCh0aGlzLFxuICAgICAgICBzaGFkZXJNYW5hZ2VyLFxuICAgICAgICAvLyB2ZXJ0ZXggc2hhZGVyXG4gICAgICAgIFtcbiAgICAgICAgICAgICdhdHRyaWJ1dGUgdmVjMiBhVmVydGV4UG9zaXRpb247JyxcbiAgICAgICAgICAgICdhdHRyaWJ1dGUgdmVjNCBhQ29sb3I7JyxcblxuICAgICAgICAgICAgJ3VuaWZvcm0gbWF0MyB0cmFuc2xhdGlvbk1hdHJpeDsnLFxuICAgICAgICAgICAgJ3VuaWZvcm0gbWF0MyBwcm9qZWN0aW9uTWF0cml4OycsXG5cbiAgICAgICAgICAgICd1bmlmb3JtIGZsb2F0IGFscGhhOycsXG4gICAgICAgICAgICAndW5pZm9ybSBmbG9hdCBmbGlwWTsnLFxuICAgICAgICAgICAgJ3VuaWZvcm0gdmVjMyB0aW50OycsXG5cbiAgICAgICAgICAgICd2YXJ5aW5nIHZlYzQgdkNvbG9yOycsXG5cbiAgICAgICAgICAgICd2b2lkIG1haW4odm9pZCl7JyxcbiAgICAgICAgICAgICcgICBnbF9Qb3NpdGlvbiA9IHZlYzQoKHByb2plY3Rpb25NYXRyaXggKiB0cmFuc2xhdGlvbk1hdHJpeCAqIHZlYzMoYVZlcnRleFBvc2l0aW9uLCAxLjApKS54eSwgMC4wLCAxLjApOycsXG4gICAgICAgICAgICAnICAgdkNvbG9yID0gYUNvbG9yICogdmVjNCh0aW50ICogYWxwaGEsIGFscGhhKTsnLFxuICAgICAgICAgICAgJ30nXG4gICAgICAgIF0uam9pbignXFxuJyksXG4gICAgICAgIC8vIGZyYWdtZW50IHNoYWRlclxuICAgICAgICBbXG4gICAgICAgICAgICAncHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7JyxcblxuICAgICAgICAgICAgJ3ZhcnlpbmcgdmVjNCB2Q29sb3I7JyxcblxuICAgICAgICAgICAgJ3ZvaWQgbWFpbih2b2lkKXsnLFxuICAgICAgICAgICAgJyAgIGdsX0ZyYWdDb2xvciA9IHZDb2xvcjsnLFxuICAgICAgICAgICAgJ30nXG4gICAgICAgIF0uam9pbignXFxuJyksXG4gICAgICAgIC8vIGN1c3RvbSB1bmlmb3Jtc1xuICAgICAgICB7XG4gICAgICAgICAgICB0aW50OiAgIHsgdHlwZTogJzNmJywgdmFsdWU6IFswLCAwLCAwXSB9LFxuICAgICAgICAgICAgYWxwaGE6ICB7IHR5cGU6ICcxZicsIHZhbHVlOiAwIH0sXG4gICAgICAgICAgICB0cmFuc2xhdGlvbk1hdHJpeDogeyB0eXBlOiAnbWF0MycsIHZhbHVlOiBuZXcgRmxvYXQzMkFycmF5KDkpIH0sXG4gICAgICAgICAgICBwcm9qZWN0aW9uTWF0cml4OiB7IHR5cGU6ICdtYXQzJywgdmFsdWU6IG5ldyBGbG9hdDMyQXJyYXkoOSkgfVxuICAgICAgICB9LFxuICAgICAgICAvLyBjdXN0b20gYXR0cmlidXRlc1xuICAgICAgICB7XG4gICAgICAgICAgICBhVmVydGV4UG9zaXRpb246MCxcbiAgICAgICAgICAgIGFDb2xvcjowXG4gICAgICAgIH1cbiAgICApO1xufVxuXG5QcmltaXRpdmVTaGFkZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShTaGFkZXIucHJvdG90eXBlKTtcblByaW1pdGl2ZVNoYWRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBQcmltaXRpdmVTaGFkZXI7XG5tb2R1bGUuZXhwb3J0cyA9IFByaW1pdGl2ZVNoYWRlcjtcbiIsIi8qZ2xvYmFsIGNvbnNvbGUgKi9cbnZhciB1dGlscyA9IHJlcXVpcmUoJy4uLy4uLy4uL3V0aWxzJyk7XG5cbi8qKlxuICogQmFzZSBzaGFkZXIgY2xhc3MgZm9yIFBJWEkgbWFuYWdlZCBzaGFkZXJzLlxuICpcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqIEBwYXJhbSBzaGFkZXJNYW5hZ2VyIHtQSVhJLlNoYWRlck1hbmFnZXJ9IFRoZSB3ZWJnbCBzaGFkZXIgbWFuYWdlciB0aGlzIHNoYWRlciB3b3JrcyBmb3IuXG4gKiBAcGFyYW0gW3ZlcnRleFNyY10ge3N0cmluZ30gVGhlIHNvdXJjZSBvZiB0aGUgdmVydGV4IHNoYWRlci5cbiAqIEBwYXJhbSBbZnJhZ21lbnRTcmNdIHtzdHJpbmd9IFRoZSBzb3VyY2Ugb2YgdGhlIGZyYWdtZW50IHNoYWRlci5cbiAqIEBwYXJhbSBbdW5pZm9ybXNdIHtvYmplY3R9IFVuaWZvcm1zIGZvciB0aGlzIHNoYWRlci5cbiAqIEBwYXJhbSBbYXR0cmlidXRlc10ge29iamVjdH0gQXR0cmlidXRlcyBmb3IgdGhpcyBzaGFkZXIuXG4gKi9cbmZ1bmN0aW9uIFNoYWRlcihzaGFkZXJNYW5hZ2VyLCB2ZXJ0ZXhTcmMsIGZyYWdtZW50U3JjLCB1bmlmb3JtcywgYXR0cmlidXRlcylcbntcbiAgICBpZiAoIXZlcnRleFNyYyB8fCAhZnJhZ21lbnRTcmMpXG4gICAge1xuICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdQaXhpLmpzIEVycm9yLiBTaGFkZXIgcmVxdWlyZXMgdmVydGV4U3JjIGFuZCBmcmFnbWVudFNyYycpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEEgdW5pcXVlIGlkXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEByZWFkb25seVxuICAgICAqL1xuICAgIHRoaXMudWlkID0gdXRpbHMudWlkKCk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgY3VycmVudCBXZWJHTCBkcmF3aW5nIGNvbnRleHRcbiAgICAgKiBAbWVtYmVyIHtXZWJHTFJlbmRlcmluZ0NvbnRleHR9XG4gICAgICogQHJlYWRvbmx5XG4gICAgICovXG4gICAgdGhpcy5nbCA9IHNoYWRlck1hbmFnZXIucmVuZGVyZXIuZ2w7XG5cbiAgICAvL1RPRE8gbWF5YmUgd2Ugc2hvdWxkIHBhc3MgcmVuZGVyZXIgcmF0aGVyIHRoYW4gc2hhZGVyIG1hbmdlcj8/IGZvb2QgZm9yIHRob3VnaHQuLlxuICAgIHRoaXMuc2hhZGVyTWFuYWdlciA9IHNoYWRlck1hbmFnZXI7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgV2ViR0wgcHJvZ3JhbS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1dlYkdMUHJvZ3JhbX1cbiAgICAgKiBAcmVhZG9ubHlcbiAgICAgKi9cbiAgICB0aGlzLnByb2dyYW0gPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHVuaWZvcm1zIGFzIGFuIG9iamVjdFxuICAgICAqIEBtZW1iZXIge29iamVjdH1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMudW5pZm9ybXMgPSB1bmlmb3JtcyB8fCB7fTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBhdHRyaWJ1dGVzIGFzIGFuIG9iamVjdFxuICAgICAqIEBtZW1iZXIge29iamVjdH1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuYXR0cmlidXRlcyA9IGF0dHJpYnV0ZXMgfHwge307XG5cbiAgICAvKipcbiAgICAgKiBJbnRlcm5hbCB0ZXh0dXJlIGNvdW50ZXJcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLnRleHR1cmVDb3VudCA9IDE7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgdmVydGV4IHNoYWRlciBhcyBhbiBhcnJheSBvZiBzdHJpbmdzXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtzdHJpbmd9XG4gICAgICovXG4gICAgdGhpcy52ZXJ0ZXhTcmMgPSB2ZXJ0ZXhTcmM7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgZnJhZ21lbnQgc2hhZGVyIGFzIGFuIGFycmF5IG9mIHN0cmluZ3NcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge3N0cmluZ31cbiAgICAgKi9cbiAgICB0aGlzLmZyYWdtZW50U3JjID0gZnJhZ21lbnRTcmM7XG5cbiAgICB0aGlzLmluaXQoKTtcbn1cblxuU2hhZGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFNoYWRlcjtcbm1vZHVsZS5leHBvcnRzID0gU2hhZGVyO1xuXG4vKipcbiAqIENyZWF0ZXMgdGhlIHNoYWRlciBhbmQgdXNlcyBpdFxuICpcbiAqL1xuU2hhZGVyLnByb3RvdHlwZS5pbml0ID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLmNvbXBpbGUoKTtcblxuICAgIHRoaXMuZ2wudXNlUHJvZ3JhbSh0aGlzLnByb2dyYW0pO1xuXG4gICAgdGhpcy5jYWNoZVVuaWZvcm1Mb2NhdGlvbnMoT2JqZWN0LmtleXModGhpcy51bmlmb3JtcykpO1xuICAgIHRoaXMuY2FjaGVBdHRyaWJ1dGVMb2NhdGlvbnMoT2JqZWN0LmtleXModGhpcy5hdHRyaWJ1dGVzKSk7XG59O1xuXG4vKipcbiAqIENhY2hlcyB0aGUgbG9jYXRpb25zIG9mIHRoZSB1bmlmb3JtIGZvciByZXVzZS5cbiAqXG4gKiBAcGFyYW0ga2V5cyB7c3RyaW5nfSB0aGUgdW5pZm9ybXMgdG8gY2FjaGVcbiAqL1xuU2hhZGVyLnByb3RvdHlwZS5jYWNoZVVuaWZvcm1Mb2NhdGlvbnMgPSBmdW5jdGlvbiAoa2V5cylcbntcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyArK2kpXG4gICAge1xuICAgICAgICB0aGlzLnVuaWZvcm1zW2tleXNbaV1dLl9sb2NhdGlvbiA9IHRoaXMuZ2wuZ2V0VW5pZm9ybUxvY2F0aW9uKHRoaXMucHJvZ3JhbSwga2V5c1tpXSk7XG4gICAgfVxufTtcblxuLyoqXG4gKiBDYWNoZXMgdGhlIGxvY2F0aW9ucyBvZiB0aGUgYXR0cmlidXRlIGZvciByZXVzZS5cbiAqXG4gKiBAcGFyYW0ga2V5cyB7c3RyaW5nfSB0aGUgYXR0cmlidXRlcyB0byBjYWNoZVxuICovXG5TaGFkZXIucHJvdG90eXBlLmNhY2hlQXR0cmlidXRlTG9jYXRpb25zID0gZnVuY3Rpb24gKGtleXMpXG57XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgKytpKVxuICAgIHtcbiAgICAgICAgdGhpcy5hdHRyaWJ1dGVzW2tleXNbaV1dID0gdGhpcy5nbC5nZXRBdHRyaWJMb2NhdGlvbih0aGlzLnByb2dyYW0sIGtleXNbaV0pO1xuICAgIH1cblxuICAgIC8vIFRPRE86IENoZWNrIGlmIHRoaXMgaXMgbmVlZGVkIGFueW1vcmUuLi5cblxuICAgIC8vIEJlZ2luIHdvcnN0IGhhY2sgZXZhIC8vXG5cbiAgICAvLyBXSFk/Pz8gT05MWSBvbiBteSBjaHJvbWUgcGl4ZWwgdGhlIGxpbmUgYWJvdmUgcmV0dXJucyAtMSB3aGVuIHVzaW5nIGZpbHRlcnM/XG4gICAgLy8gbWF5YmUgaXRzIHNvbWV0aGluZyB0byBkbyB3aXRoIHRoZSBjdXJyZW50IHN0YXRlIG9mIHRoZSBnbCBjb250ZXh0LlxuICAgIC8vIEknbSBjb252aW5jZWQgdGhpcyBpcyBhIGJ1ZyBpbiB0aGUgY2hyb21lIGJyb3dzZXIgYXMgdGhlcmUgaXMgTk8gcmVhc29uIHdoeSB0aGlzIHNob3VsZCBiZSByZXR1cm5pbmcgLTEgZXNwZWNpYWxseSBhcyBpdCBvbmx5IG1hbmlmZXN0cyBvbiBteSBjaHJvbWUgcGl4ZWxcbiAgICAvLyBJZiB0aGVyZXMgYW55IHdlYkdMIHBlb3BsZSB0aGF0IGtub3cgd2h5IGNvdWxkIGhhcHBlbiBwbGVhc2UgaGVscCA6KVxuICAgIC8vIGlmICh0aGlzLmF0dHJpYnV0ZXMuYUNvbG9yID09PSAtMSl7XG4gICAgLy8gICAgIHRoaXMuYXR0cmlidXRlcy5hQ29sb3IgPSAyO1xuICAgIC8vIH1cblxuICAgIC8vIEVuZCB3b3JzdCBoYWNrIGV2YSAvL1xufTtcblxuLyoqXG4gKiBBdHRhY2hlcyB0aGUgc2hhZGVycyBhbmQgY3JlYXRlcyB0aGUgcHJvZ3JhbS5cbiAqXG4gKiBAcmV0dXJuIHtXZWJHTFByb2dyYW19XG4gKi9cblNoYWRlci5wcm90b3R5cGUuY29tcGlsZSA9IGZ1bmN0aW9uICgpXG57XG4gICAgdmFyIGdsID0gdGhpcy5nbDtcblxuICAgIHZhciBnbFZlcnRTaGFkZXIgPSB0aGlzLl9nbENvbXBpbGUoZ2wuVkVSVEVYX1NIQURFUiwgdGhpcy52ZXJ0ZXhTcmMpO1xuICAgIHZhciBnbEZyYWdTaGFkZXIgPSB0aGlzLl9nbENvbXBpbGUoZ2wuRlJBR01FTlRfU0hBREVSLCB0aGlzLmZyYWdtZW50U3JjKTtcblxuICAgIHZhciBwcm9ncmFtID0gZ2wuY3JlYXRlUHJvZ3JhbSgpO1xuXG4gICAgZ2wuYXR0YWNoU2hhZGVyKHByb2dyYW0sIGdsVmVydFNoYWRlcik7XG4gICAgZ2wuYXR0YWNoU2hhZGVyKHByb2dyYW0sIGdsRnJhZ1NoYWRlcik7XG4gICAgZ2wubGlua1Byb2dyYW0ocHJvZ3JhbSk7XG5cbiAgICAvLyBpZiBsaW5raW5nIGZhaWxzLCB0aGVuIGxvZyBhbmQgY2xlYW51cFxuICAgIGlmICghZ2wuZ2V0UHJvZ3JhbVBhcmFtZXRlcihwcm9ncmFtLCBnbC5MSU5LX1NUQVRVUykpXG4gICAge1xuICAgICAgICBjb25zb2xlLmVycm9yKCdQaXhpLmpzIEVycm9yOiBDb3VsZCBub3QgaW5pdGlhbGl6ZSBzaGFkZXIuJyk7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ2dsLlZBTElEQVRFX1NUQVRVUycsIGdsLmdldFByb2dyYW1QYXJhbWV0ZXIocHJvZ3JhbSwgZ2wuVkFMSURBVEVfU1RBVFVTKSk7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ2dsLmdldEVycm9yKCknLCBnbC5nZXRFcnJvcigpKTtcblxuICAgICAgICAvLyBpZiB0aGVyZSBpcyBhIHByb2dyYW0gaW5mbyBsb2csIGxvZyBpdFxuICAgICAgICBpZiAoZ2wuZ2V0UHJvZ3JhbUluZm9Mb2cocHJvZ3JhbSkgIT09ICcnKVxuICAgICAgICB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ1BpeGkuanMgV2FybmluZzogZ2wuZ2V0UHJvZ3JhbUluZm9Mb2coKScsIGdsLmdldFByb2dyYW1JbmZvTG9nKHByb2dyYW0pKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGdsLmRlbGV0ZVByb2dyYW0ocHJvZ3JhbSk7XG4gICAgICAgIHByb2dyYW0gPSBudWxsO1xuICAgIH1cblxuICAgIC8vIGNsZWFuIHVwIHNvbWUgc2hhZGVyc1xuICAgIGdsLmRlbGV0ZVNoYWRlcihnbFZlcnRTaGFkZXIpO1xuICAgIGdsLmRlbGV0ZVNoYWRlcihnbEZyYWdTaGFkZXIpO1xuXG4gICAgcmV0dXJuICh0aGlzLnByb2dyYW0gPSBwcm9ncmFtKTtcbn07XG5cbi8qKlxuKiBBZGRzIGEgbmV3IHVuaWZvcm1cbipcbiogQHBhcmFtIHVuaWZvcm0ge29iamVjdH0gdGhlIG5ldyB1bmlmb3JtIHRvIGF0dGFjaFxuKi9cblNoYWRlci5wcm90b3R5cGUuc3luY1VuaWZvcm0gPSBmdW5jdGlvbiAodW5pZm9ybSlcbntcbiAgICB2YXIgbG9jYXRpb24gPSB1bmlmb3JtLl9sb2NhdGlvbixcbiAgICAgICAgdmFsdWUgPSB1bmlmb3JtLnZhbHVlLFxuICAgICAgICBnbCA9IHRoaXMuZ2wsXG4gICAgICAgIGksIGlsO1xuXG4gICAgc3dpdGNoICh1bmlmb3JtLnR5cGUpXG4gICAge1xuICAgICAgICBjYXNlICdiJzpcbiAgICAgICAgY2FzZSAnYm9vbCc6XG4gICAgICAgIGNhc2UgJ2Jvb2xlYW4nOlxuICAgICAgICAgICAgZ2wudW5pZm9ybTFpKGxvY2F0aW9uLCB2YWx1ZSA/IDEgOiAwKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIC8vIHNpbmdsZSBpbnQgdmFsdWVcbiAgICAgICAgY2FzZSAnaSc6XG4gICAgICAgIGNhc2UgJzFpJzpcbiAgICAgICAgICAgIGdsLnVuaWZvcm0xaShsb2NhdGlvbiwgdmFsdWUpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLy8gc2luZ2xlIGZsb2F0IHZhbHVlXG4gICAgICAgIGNhc2UgJ2YnOlxuICAgICAgICBjYXNlICcxZic6XG4gICAgICAgICAgICBnbC51bmlmb3JtMWYobG9jYXRpb24sIHZhbHVlKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIC8vIEZsb2F0MzJBcnJheSgyKSBvciBKUyBBcnJyYXlcbiAgICAgICAgY2FzZSAnMmYnOlxuICAgICAgICAgICAgZ2wudW5pZm9ybTJmKGxvY2F0aW9uLCB2YWx1ZVswXSwgdmFsdWVbMV0pO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLy8gRmxvYXQzMkFycmF5KDMpIG9yIEpTIEFycnJheVxuICAgICAgICBjYXNlICczZic6XG4gICAgICAgICAgICBnbC51bmlmb3JtM2YobG9jYXRpb24sIHZhbHVlWzBdLCB2YWx1ZVsxXSwgdmFsdWVbMl0pO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLy8gRmxvYXQzMkFycmF5KDQpIG9yIEpTIEFycnJheVxuICAgICAgICBjYXNlICc0Zic6XG4gICAgICAgICAgICBnbC51bmlmb3JtNGYobG9jYXRpb24sIHZhbHVlWzBdLCB2YWx1ZVsxXSwgdmFsdWVbMl0sIHZhbHVlWzNdKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIC8vIGEgMkQgUG9pbnQgb2JqZWN0XG4gICAgICAgIGNhc2UgJ3YyJzpcbiAgICAgICAgICAgIGdsLnVuaWZvcm0yZihsb2NhdGlvbiwgdmFsdWUueCwgdmFsdWUueSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAvLyBhIDNEIFBvaW50IG9iamVjdFxuICAgICAgICBjYXNlICd2Myc6XG4gICAgICAgICAgICBnbC51bmlmb3JtM2YobG9jYXRpb24sIHZhbHVlLngsIHZhbHVlLnksIHZhbHVlLnopO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLy8gYSA0RCBQb2ludCBvYmplY3RcbiAgICAgICAgY2FzZSAndjQnOlxuICAgICAgICAgICAgZ2wudW5pZm9ybTRmKGxvY2F0aW9uLCB2YWx1ZS54LCB2YWx1ZS55LCB2YWx1ZS56LCB2YWx1ZS53KTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIC8vIEludDMyQXJyYXkgb3IgSlMgQXJyYXlcbiAgICAgICAgY2FzZSAnMWl2JzpcbiAgICAgICAgICAgIGdsLnVuaWZvcm0xaXYobG9jYXRpb24sIHZhbHVlKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIC8vIEludDMyQXJyYXkgb3IgSlMgQXJyYXlcbiAgICAgICAgY2FzZSAnMml2JzpcbiAgICAgICAgICAgIGdsLnVuaWZvcm0yaXYobG9jYXRpb24sIHZhbHVlKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIC8vIEludDMyQXJyYXkgb3IgSlMgQXJyYXlcbiAgICAgICAgY2FzZSAnM2l2JzpcbiAgICAgICAgICAgIGdsLnVuaWZvcm0zaXYobG9jYXRpb24sIHZhbHVlKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIC8vIEludDMyQXJyYXkgb3IgSlMgQXJyYXlcbiAgICAgICAgY2FzZSAnNGl2JzpcbiAgICAgICAgICAgIGdsLnVuaWZvcm00aXYobG9jYXRpb24sIHZhbHVlKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIC8vIEZsb2F0MzJBcnJheSBvciBKUyBBcnJheVxuICAgICAgICBjYXNlICcxZnYnOlxuICAgICAgICAgICAgZ2wudW5pZm9ybTFmdihsb2NhdGlvbiwgdmFsdWUpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLy8gRmxvYXQzMkFycmF5IG9yIEpTIEFycmF5XG4gICAgICAgIGNhc2UgJzJmdic6XG4gICAgICAgICAgICBnbC51bmlmb3JtMmZ2KGxvY2F0aW9uLCB2YWx1ZSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAvLyBGbG9hdDMyQXJyYXkgb3IgSlMgQXJyYXlcbiAgICAgICAgY2FzZSAnM2Z2JzpcbiAgICAgICAgICAgIGdsLnVuaWZvcm0zZnYobG9jYXRpb24sIHZhbHVlKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIC8vIEZsb2F0MzJBcnJheSBvciBKUyBBcnJheVxuICAgICAgICBjYXNlICc0ZnYnOlxuICAgICAgICAgICAgZ2wudW5pZm9ybTRmdihsb2NhdGlvbiwgdmFsdWUpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLy8gRmxvYXQzMkFycmF5IG9yIEpTIEFycmF5XG4gICAgICAgIGNhc2UgJ20yJzpcbiAgICAgICAgY2FzZSAnbWF0Mic6XG4gICAgICAgIGNhc2UgJ01hdHJpeDJmdic6XG4gICAgICAgICAgICBnbC51bmlmb3JtTWF0cml4MmZ2KGxvY2F0aW9uLCB1bmlmb3JtLnRyYW5zcG9zZSwgdmFsdWUpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLy8gRmxvYXQzMkFycmF5IG9yIEpTIEFycmF5XG4gICAgICAgIGNhc2UgJ20zJzpcbiAgICAgICAgY2FzZSAnbWF0Myc6XG4gICAgICAgIGNhc2UgJ01hdHJpeDNmdic6XG5cbiAgICAgICAgICAgIGdsLnVuaWZvcm1NYXRyaXgzZnYobG9jYXRpb24sIHVuaWZvcm0udHJhbnNwb3NlLCB2YWx1ZSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAvLyBGbG9hdDMyQXJyYXkgb3IgSlMgQXJyYXlcbiAgICAgICAgY2FzZSAnbTQnOlxuICAgICAgICBjYXNlICdtYXQ0JzpcbiAgICAgICAgY2FzZSAnTWF0cml4NGZ2JzpcbiAgICAgICAgICAgIGdsLnVuaWZvcm1NYXRyaXg0ZnYobG9jYXRpb24sIHVuaWZvcm0udHJhbnNwb3NlLCB2YWx1ZSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAvLyBhIENvbG9yIFZhbHVlXG4gICAgICAgIGNhc2UgJ2MnOlxuICAgICAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdmFsdWUgPSB1dGlscy5oZXgycmdiKHZhbHVlKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZ2wudW5pZm9ybTNmKGxvY2F0aW9uLCB2YWx1ZVswXSwgdmFsdWVbMV0sIHZhbHVlWzJdKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIC8vIGZsYXQgYXJyYXkgb2YgaW50ZWdlcnMgKEpTIG9yIHR5cGVkIGFycmF5KVxuICAgICAgICBjYXNlICdpdjEnOlxuICAgICAgICAgICAgZ2wudW5pZm9ybTFpdihsb2NhdGlvbiwgdmFsdWUpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLy8gZmxhdCBhcnJheSBvZiBpbnRlZ2VycyB3aXRoIDMgeCBOIHNpemUgKEpTIG9yIHR5cGVkIGFycmF5KVxuICAgICAgICBjYXNlICdpdic6XG4gICAgICAgICAgICBnbC51bmlmb3JtM2l2KGxvY2F0aW9uLCB2YWx1ZSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAvLyBmbGF0IGFycmF5IG9mIGZsb2F0cyAoSlMgb3IgdHlwZWQgYXJyYXkpXG4gICAgICAgIGNhc2UgJ2Z2MSc6XG4gICAgICAgICAgICBnbC51bmlmb3JtMWZ2KGxvY2F0aW9uLCB2YWx1ZSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAvLyBmbGF0IGFycmF5IG9mIGZsb2F0cyB3aXRoIDMgeCBOIHNpemUgKEpTIG9yIHR5cGVkIGFycmF5KVxuICAgICAgICBjYXNlICdmdic6XG4gICAgICAgICAgICBnbC51bmlmb3JtM2Z2KGxvY2F0aW9uLCB2YWx1ZSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAvLyBhcnJheSBvZiAyRCBQb2ludCBvYmplY3RzXG4gICAgICAgIGNhc2UgJ3Yydic6XG4gICAgICAgICAgICBpZiAoIXVuaWZvcm0uX2FycmF5KVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHVuaWZvcm0uX2FycmF5ID0gbmV3IEZsb2F0MzJBcnJheSgyICogdmFsdWUubGVuZ3RoKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZm9yIChpID0gMCwgaWwgPSB2YWx1ZS5sZW5ndGg7IGkgPCBpbDsgKytpKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHVuaWZvcm0uX2FycmF5W2kgKiAyXSAgICAgICA9IHZhbHVlW2ldLng7XG4gICAgICAgICAgICAgICAgdW5pZm9ybS5fYXJyYXlbaSAqIDIgKyAxXSAgID0gdmFsdWVbaV0ueTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZ2wudW5pZm9ybTJmdihsb2NhdGlvbiwgdW5pZm9ybS5fYXJyYXkpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLy8gYXJyYXkgb2YgM0QgUG9pbnQgb2JqZWN0c1xuICAgICAgICBjYXNlICd2M3YnOlxuICAgICAgICAgICAgaWYgKCF1bmlmb3JtLl9hcnJheSlcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB1bmlmb3JtLl9hcnJheSA9IG5ldyBGbG9hdDMyQXJyYXkoMyAqIHZhbHVlLmxlbmd0aCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGZvciAoaSA9IDAsIGlsID0gdmFsdWUubGVuZ3RoOyBpIDwgaWw7ICsraSlcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB1bmlmb3JtLl9hcnJheVtpICogM10gICAgICAgPSB2YWx1ZVtpXS54O1xuICAgICAgICAgICAgICAgIHVuaWZvcm0uX2FycmF5W2kgKiAzICsgMV0gICA9IHZhbHVlW2ldLnk7XG4gICAgICAgICAgICAgICAgdW5pZm9ybS5fYXJyYXlbaSAqIDMgKyAyXSAgID0gdmFsdWVbaV0uejtcblxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBnbC51bmlmb3JtM2Z2KGxvY2F0aW9uLCB1bmlmb3JtLl9hcnJheSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAvLyBhcnJheSBvZiA0RCBQb2ludCBvYmplY3RzXG4gICAgICAgIGNhc2UgJ3Y0dic6XG4gICAgICAgICAgICBpZiAoIXVuaWZvcm0uX2FycmF5KVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHVuaWZvcm0uX2FycmF5ID0gbmV3IEZsb2F0MzJBcnJheSg0ICogdmFsdWUubGVuZ3RoKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZm9yIChpID0gMCwgaWwgPSB2YWx1ZS5sZW5ndGg7IGkgPCBpbDsgKytpKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHVuaWZvcm0uX2FycmF5W2kgKiA0XSAgICAgICA9IHZhbHVlW2ldLng7XG4gICAgICAgICAgICAgICAgdW5pZm9ybS5fYXJyYXlbaSAqIDQgKyAxXSAgID0gdmFsdWVbaV0ueTtcbiAgICAgICAgICAgICAgICB1bmlmb3JtLl9hcnJheVtpICogNCArIDJdICAgPSB2YWx1ZVtpXS56O1xuICAgICAgICAgICAgICAgIHVuaWZvcm0uX2FycmF5W2kgKiA0ICsgM10gICA9IHZhbHVlW2ldLnc7XG5cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZ2wudW5pZm9ybTRmdihsb2NhdGlvbiwgdW5pZm9ybS5fYXJyYXkpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLy8gUElYSS5UZXh0dXJlXG4gICAgICAgIGNhc2UgJ3QnOlxuICAgICAgICBjYXNlICdzYW1wbGVyMkQnOlxuXG4gICAgICAgICAgICBpZiAoIXVuaWZvcm0udmFsdWUgfHwgIXVuaWZvcm0udmFsdWUuYmFzZVRleHR1cmUuaGFzTG9hZGVkKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBhY3RpdmF0ZSB0aGlzIHRleHR1cmVcbiAgICAgICAgICAgIGdsLmFjdGl2ZVRleHR1cmUoZ2xbJ1RFWFRVUkUnICsgdGhpcy50ZXh0dXJlQ291bnRdKTtcblxuICAgICAgICAgICAgdmFyIHRleHR1cmUgPSB1bmlmb3JtLnZhbHVlLmJhc2VUZXh0dXJlLl9nbFRleHR1cmVzW2dsLmlkXTtcblxuICAgICAgICAgICAgaWYgKCF0ZXh0dXJlKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHRoaXMuaW5pdFNhbXBsZXIyRCh1bmlmb3JtKTtcblxuICAgICAgICAgICAgICAgIC8vIHNldCB0aGUgdGV4dHVyIHRvIHRoZSBuZXdseSBjcmVhdGVkIG9uZS4uXG4gICAgICAgICAgICAgICAgdGV4dHVyZSA9IHVuaWZvcm0udmFsdWUuYmFzZVRleHR1cmUuX2dsVGV4dHVyZXNbZ2wuaWRdO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBiaW5kIHRoZSB0ZXh0dXJlXG4gICAgICAgICAgICBnbC5iaW5kVGV4dHVyZShnbC5URVhUVVJFXzJELCB0ZXh0dXJlKTtcblxuICAgICAgICAgICAgLy8gc2V0IHVuaWZvcm0gdG8gdGV4dHVyZSBpbmRleFxuICAgICAgICAgICAgZ2wudW5pZm9ybTFpKHVuaWZvcm0uX2xvY2F0aW9uLCB0aGlzLnRleHR1cmVDb3VudCk7XG5cbiAgICAgICAgICAgIC8vIGluY3JlbWVudCBuZXh0IHRleHR1cmUgaWRcbiAgICAgICAgICAgIHRoaXMudGV4dHVyZUNvdW50Kys7XG5cbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ1BpeGkuanMgU2hhZGVyIFdhcm5pbmc6IFVua25vd24gdW5pZm9ybSB0eXBlOiAnICsgdW5pZm9ybS50eXBlKTtcbiAgICB9XG59O1xuXG4vKipcbiAqIFVwZGF0ZXMgdGhlIHNoYWRlciB1bmlmb3JtIHZhbHVlcy5cbiAqXG4gKi9cblNoYWRlci5wcm90b3R5cGUuc3luY1VuaWZvcm1zID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLnRleHR1cmVDb3VudCA9IDE7XG5cbiAgICBmb3IgKHZhciBrZXkgaW4gdGhpcy51bmlmb3JtcylcbiAgICB7XG4gICAgICAgIHRoaXMuc3luY1VuaWZvcm0odGhpcy51bmlmb3Jtc1trZXldKTtcbiAgICB9XG59O1xuXG5cbi8qKlxuICogSW5pdGlhbGlzZXMgYSBTYW1wbGVyMkQgdW5pZm9ybSAod2hpY2ggbWF5IG9ubHkgYmUgYXZhaWxhYmxlIGxhdGVyIG9uIGFmdGVyIGluaXRVbmlmb3JtcyBvbmNlIHRoZSB0ZXh0dXJlIGhhcyBsb2FkZWQpXG4gKlxuICovXG5TaGFkZXIucHJvdG90eXBlLmluaXRTYW1wbGVyMkQgPSBmdW5jdGlvbiAodW5pZm9ybSlcbntcbiAgICB2YXIgZ2wgPSB0aGlzLmdsO1xuXG4gICAgdmFyIHRleHR1cmUgPSB1bmlmb3JtLnZhbHVlLmJhc2VUZXh0dXJlO1xuXG4gICAgaWYoIXRleHR1cmUuaGFzTG9hZGVkKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuXG5cbiAgICBpZiAodW5pZm9ybS50ZXh0dXJlRGF0YSlcbiAgICB7XG5cbiAgICAgICAgLy9UT0RPIG1vdmUgdGhpcy4uLlxuICAgICAgICB2YXIgZGF0YSA9IHVuaWZvcm0udGV4dHVyZURhdGE7XG5cbiAgICAgICAgdGV4dHVyZS5fZ2xUZXh0dXJlc1tnbC5pZF0gPSBnbC5jcmVhdGVUZXh0dXJlKCk7XG5cbiAgICAgICAgZ2wuYmluZFRleHR1cmUoZ2wuVEVYVFVSRV8yRCwgdGV4dHVyZS5fZ2xUZXh0dXJlc1tnbC5pZF0pO1xuXG4gICAgICAgIGdsLnBpeGVsU3RvcmVpKGdsLlVOUEFDS19QUkVNVUxUSVBMWV9BTFBIQV9XRUJHTCwgdGV4dHVyZS5wcmVtdWx0aXBsaWVkQWxwaGEpO1xuICAgICAgICAvLyBHTFRleHR1cmUgPSBtYWcgbGluZWFyLCBtaW4gbGluZWFyX21pcG1hcF9saW5lYXIsIHdyYXAgcmVwZWF0ICsgZ2wuZ2VuZXJhdGVNaXBtYXAoZ2wuVEVYVFVSRV8yRCk7XG4gICAgICAgIC8vIEdMVGV4dHVyZUxpbmVhciA9IG1hZy9taW4gbGluZWFyLCB3cmFwIGNsYW1wXG4gICAgICAgIC8vIEdMVGV4dHVyZU5lYXJlc3RSZXBlYXQgPSBtYWcvbWluIE5FQVJFU1QsIHdyYXAgcmVwZWF0XG4gICAgICAgIC8vIEdMVGV4dHVyZU5lYXJlc3QgPSBtYWcvbWluIG5lYXJlc3QsIHdyYXAgY2xhbXBcbiAgICAgICAgLy8gQXVkaW9UZXh0dXJlID0gd2hhdGV2ZXIgKyBsdW1pbmFuY2UgKyB3aWR0aCA1MTIsIGhlaWdodCAyLCBib3JkZXIgMFxuICAgICAgICAvLyBLZXlUZXh0dXJlID0gd2hhdGV2ZXIgKyBsdW1pbmFuY2UgKyB3aWR0aCAyNTYsIGhlaWdodCAyLCBib3JkZXIgMFxuXG4gICAgICAgIC8vICBtYWdGaWx0ZXIgY2FuIGJlOiBnbC5MSU5FQVIsIGdsLkxJTkVBUl9NSVBNQVBfTElORUFSIG9yIGdsLk5FQVJFU1RcbiAgICAgICAgLy8gIHdyYXBTL1QgY2FuIGJlOiBnbC5DTEFNUF9UT19FREdFIG9yIGdsLlJFUEVBVFxuXG4gICAgICAgIGdsLnRleEltYWdlMkQoZ2wuVEVYVFVSRV8yRCwgMCwgZGF0YS5sdW1pbmFuY2UgPyBnbC5MVU1JTkFOQ0UgOiBnbC5SR0JBLCBnbC5SR0JBLCBnbC5VTlNJR05FRF9CWVRFLCB0ZXh0dXJlLnNvdXJjZSk7XG5cbiAgICAgICAgZ2wudGV4UGFyYW1ldGVyaShnbC5URVhUVVJFXzJELCBnbC5URVhUVVJFX01BR19GSUxURVIsIGRhdGEubWFnRmlsdGVyID8gZGF0YS5tYWdGaWx0ZXIgOiBnbC5MSU5FQVIgKTtcbiAgICAgICAgZ2wudGV4UGFyYW1ldGVyaShnbC5URVhUVVJFXzJELCBnbC5URVhUVVJFX01JTl9GSUxURVIsIGRhdGEud3JhcFMgPyBkYXRhLndyYXBTIDogZ2wuQ0xBTVBfVE9fRURHRSApO1xuXG4gICAgICAgIGdsLnRleFBhcmFtZXRlcmkoZ2wuVEVYVFVSRV8yRCwgZ2wuVEVYVFVSRV9XUkFQX1QsIGRhdGEud3JhcFMgPyBkYXRhLndyYXBTIDogZ2wuQ0xBTVBfVE9fRURHRSk7XG4gICAgICAgIGdsLnRleFBhcmFtZXRlcmkoZ2wuVEVYVFVSRV8yRCwgZ2wuVEVYVFVSRV9XUkFQX1MsIGRhdGEud3JhcFQgPyBkYXRhLndyYXBUIDogZ2wuQ0xBTVBfVE9fRURHRSk7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHRoaXMuc2hhZGVyTWFuYWdlci5yZW5kZXJlci51cGRhdGVUZXh0dXJlKHRleHR1cmUpO1xuICAgIH1cbn07XG5cbi8qKlxuICogRGVzdHJveXMgdGhlIHNoYWRlci5cbiAqXG4gKi9cblNoYWRlci5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy5nbC5kZWxldGVQcm9ncmFtKHRoaXMucHJvZ3JhbSk7XG5cbiAgICB0aGlzLmdsID0gbnVsbDtcbiAgICB0aGlzLnVuaWZvcm1zID0gbnVsbDtcbiAgICB0aGlzLmF0dHJpYnV0ZXMgPSBudWxsO1xuXG4gICAgdGhpcy52ZXJ0ZXhTcmMgPSBudWxsO1xuICAgIHRoaXMuZnJhZ21lbnRTcmMgPSBudWxsO1xufTtcblxuU2hhZGVyLnByb3RvdHlwZS5fZ2xDb21waWxlID0gZnVuY3Rpb24gKHR5cGUsIHNyYylcbntcbiAgICB2YXIgc2hhZGVyID0gdGhpcy5nbC5jcmVhdGVTaGFkZXIodHlwZSk7XG5cbiAgICB0aGlzLmdsLnNoYWRlclNvdXJjZShzaGFkZXIsIHNyYyk7XG4gICAgdGhpcy5nbC5jb21waWxlU2hhZGVyKHNoYWRlcik7XG5cbiAgICBpZiAoIXRoaXMuZ2wuZ2V0U2hhZGVyUGFyYW1ldGVyKHNoYWRlciwgdGhpcy5nbC5DT01QSUxFX1NUQVRVUykpXG4gICAge1xuICAgICAgICBjb25zb2xlLmxvZyh0aGlzLmdsLmdldFNoYWRlckluZm9Mb2coc2hhZGVyKSk7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHJldHVybiBzaGFkZXI7XG59O1xuIiwidmFyIFNoYWRlciA9IHJlcXVpcmUoJy4vU2hhZGVyJyk7XG5cbi8qKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQGV4dGVuZHMgUElYSS5TaGFkZXJcbiAqIEBwYXJhbSBzaGFkZXJNYW5hZ2VyIHtQSVhJLlNoYWRlck1hbmFnZXJ9IFRoZSB3ZWJnbCBzaGFkZXIgbWFuYWdlciB0aGlzIHNoYWRlciB3b3JrcyBmb3IuXG4gKiBAcGFyYW0gW3ZlcnRleFNyY10ge3N0cmluZ30gVGhlIHNvdXJjZSBvZiB0aGUgdmVydGV4IHNoYWRlci5cbiAqIEBwYXJhbSBbZnJhZ21lbnRTcmNdIHtzdHJpbmd9IFRoZSBzb3VyY2Ugb2YgdGhlIGZyYWdtZW50IHNoYWRlci5cbiAqIEBwYXJhbSBbY3VzdG9tVW5pZm9ybXNdIHtvYmplY3R9IEN1c3RvbSB1bmlmb3JtcyB0byB1c2UgdG8gYXVnbWVudCB0aGUgYnVpbHQtaW4gb25lcy5cbiAqIEBwYXJhbSBbZnJhZ21lbnRTcmNdIHtzdHJpbmd9IFRoZSBzb3VyY2Ugb2YgdGhlIGZyYWdtZW50IHNoYWRlci5cbiAqL1xuZnVuY3Rpb24gVGV4dHVyZVNoYWRlcihzaGFkZXJNYW5hZ2VyLCB2ZXJ0ZXhTcmMsIGZyYWdtZW50U3JjLCBjdXN0b21Vbmlmb3JtcywgY3VzdG9tQXR0cmlidXRlcylcbntcbiAgICB2YXIgdW5pZm9ybXMgPSB7XG5cbiAgICAgICAgdVNhbXBsZXI6ICAgICAgICAgICB7IHR5cGU6ICdzYW1wbGVyMkQnLCB2YWx1ZTogMCB9LFxuICAgICAgICBwcm9qZWN0aW9uTWF0cml4OiAgIHsgdHlwZTogJ21hdDMnLCB2YWx1ZTogbmV3IEZsb2F0MzJBcnJheShbMSwgMCwgMCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsIDEsIDAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLCAwLCAxXSkgfVxuICAgIH07XG5cbiAgICBpZiAoY3VzdG9tVW5pZm9ybXMpXG4gICAge1xuICAgICAgICBmb3IgKHZhciB1IGluIGN1c3RvbVVuaWZvcm1zKVxuICAgICAgICB7XG4gICAgICAgICAgICB1bmlmb3Jtc1t1XSA9IGN1c3RvbVVuaWZvcm1zW3VdO1xuICAgICAgICB9XG4gICAgfVxuXG5cbiAgICB2YXIgYXR0cmlidXRlcyA9IHtcbiAgICAgICAgYVZlcnRleFBvc2l0aW9uOiAgICAwLFxuICAgICAgICBhVGV4dHVyZUNvb3JkOiAgICAgIDAsXG4gICAgICAgIGFDb2xvcjogICAgICAgICAgICAgMFxuICAgIH07XG5cbiAgICBpZiAoY3VzdG9tQXR0cmlidXRlcylcbiAgICB7XG4gICAgICAgIGZvciAodmFyIGEgaW4gY3VzdG9tQXR0cmlidXRlcylcbiAgICAgICAge1xuICAgICAgICAgICAgYXR0cmlidXRlc1thXSA9IGN1c3RvbUF0dHJpYnV0ZXNbYV07XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGUgdmVydGV4IHNoYWRlci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge3N0cmluZ31cbiAgICAgKi9cbiAgICB2ZXJ0ZXhTcmMgPSB2ZXJ0ZXhTcmMgfHwgVGV4dHVyZVNoYWRlci5kZWZhdWx0VmVydGV4U3JjO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGZyYWdtZW50IHNoYWRlci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge3N0cmluZ31cbiAgICAgKi9cbiAgICBmcmFnbWVudFNyYyA9IGZyYWdtZW50U3JjIHx8IFRleHR1cmVTaGFkZXIuZGVmYXVsdEZyYWdtZW50U3JjO1xuXG4gICAgU2hhZGVyLmNhbGwodGhpcywgc2hhZGVyTWFuYWdlciwgdmVydGV4U3JjLCBmcmFnbWVudFNyYywgdW5pZm9ybXMsIGF0dHJpYnV0ZXMpO1xufVxuXG4vLyBjb25zdHJ1Y3RvclxuVGV4dHVyZVNoYWRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFNoYWRlci5wcm90b3R5cGUpO1xuVGV4dHVyZVNoYWRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBUZXh0dXJlU2hhZGVyO1xubW9kdWxlLmV4cG9ydHMgPSBUZXh0dXJlU2hhZGVyO1xuXG4vKipcbiAqIFRoZSBkZWZhdWx0IHZlcnRleCBzaGFkZXIgc291cmNlXG4gKlxuICogQHN0YXRpY1xuICogQGNvbnN0YW50XG4gKi9cblRleHR1cmVTaGFkZXIuZGVmYXVsdFZlcnRleFNyYyA9IFtcbiAgICAncHJlY2lzaW9uIGxvd3AgZmxvYXQ7JyxcbiAgICAnYXR0cmlidXRlIHZlYzIgYVZlcnRleFBvc2l0aW9uOycsXG4gICAgJ2F0dHJpYnV0ZSB2ZWMyIGFUZXh0dXJlQ29vcmQ7JyxcbiAgICAnYXR0cmlidXRlIHZlYzQgYUNvbG9yOycsXG5cbiAgICAndW5pZm9ybSBtYXQzIHByb2plY3Rpb25NYXRyaXg7JyxcblxuICAgICd2YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDsnLFxuICAgICd2YXJ5aW5nIHZlYzQgdkNvbG9yOycsXG5cbiAgICAndm9pZCBtYWluKHZvaWQpeycsXG4gICAgJyAgIGdsX1Bvc2l0aW9uID0gdmVjNCgocHJvamVjdGlvbk1hdHJpeCAqIHZlYzMoYVZlcnRleFBvc2l0aW9uLCAxLjApKS54eSwgMC4wLCAxLjApOycsXG4gICAgJyAgIHZUZXh0dXJlQ29vcmQgPSBhVGV4dHVyZUNvb3JkOycsXG4gICAgJyAgIHZDb2xvciA9IHZlYzQoYUNvbG9yLnJnYiAqIGFDb2xvci5hLCBhQ29sb3IuYSk7JyxcbiAgICAnfSdcbl0uam9pbignXFxuJyk7XG5cbi8qKlxuICogVGhlIGRlZmF1bHQgZnJhZ21lbnQgc2hhZGVyIHNvdXJjZVxuICpcbiAqIEBzdGF0aWNcbiAqIEBjb25zdGFudFxuICovXG5UZXh0dXJlU2hhZGVyLmRlZmF1bHRGcmFnbWVudFNyYyA9IFtcbiAgICAncHJlY2lzaW9uIGxvd3AgZmxvYXQ7JyxcblxuICAgICd2YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDsnLFxuICAgICd2YXJ5aW5nIHZlYzQgdkNvbG9yOycsXG5cbiAgICAndW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXI7JyxcblxuICAgICd2b2lkIG1haW4odm9pZCl7JyxcbiAgICAnICAgZ2xfRnJhZ0NvbG9yID0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2VGV4dHVyZUNvb3JkKSAqIHZDb2xvciA7JyxcbiAgICAnfSdcbl0uam9pbignXFxuJyk7XG4iLCJ2YXIgU2hhZGVyID0gcmVxdWlyZSgncGl4aS1nbC1jb3JlJykuR0xTaGFkZXI7XG5cbi8qKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQGV4dGVuZHMgUElYSS5TaGFkZXJcbiAqIEBwYXJhbSBzaGFkZXJNYW5hZ2VyIHtQSVhJLlNoYWRlck1hbmFnZXJ9IFRoZSB3ZWJnbCBzaGFkZXIgbWFuYWdlciB0aGlzIHNoYWRlciB3b3JrcyBmb3IuXG4gKiBAcGFyYW0gW3ZlcnRleFNyY10ge3N0cmluZ30gVGhlIHNvdXJjZSBvZiB0aGUgdmVydGV4IHNoYWRlci5cbiAqIEBwYXJhbSBbZnJhZ21lbnRTcmNdIHtzdHJpbmd9IFRoZSBzb3VyY2Ugb2YgdGhlIGZyYWdtZW50IHNoYWRlci5cbiAqIEBwYXJhbSBbY3VzdG9tVW5pZm9ybXNdIHtvYmplY3R9IEN1c3RvbSB1bmlmb3JtcyB0byB1c2UgdG8gYXVnbWVudCB0aGUgYnVpbHQtaW4gb25lcy5cbiAqIEBwYXJhbSBbZnJhZ21lbnRTcmNdIHtzdHJpbmd9IFRoZSBzb3VyY2Ugb2YgdGhlIGZyYWdtZW50IHNoYWRlci5cbiAqL1xuZnVuY3Rpb24gVGV4dHVyZVNoYWRlcihnbClcbntcbiAgICAvKipcbiAgICAgKiBUaGUgdmVydGV4IHNoYWRlci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge3N0cmluZ31cbiAgICAgKi9cbiAgICB2ZXJ0ZXhTcmMgPSBUZXh0dXJlU2hhZGVyLmRlZmF1bHRWZXJ0ZXhTcmM7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgZnJhZ21lbnQgc2hhZGVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7c3RyaW5nfVxuICAgICAqL1xuICAgIGZyYWdtZW50U3JjID0gVGV4dHVyZVNoYWRlci5kZWZhdWx0RnJhZ21lbnRTcmM7XG5cbiAgICBTaGFkZXIuY2FsbCh0aGlzLCBnbCwgdmVydGV4U3JjLCBmcmFnbWVudFNyYyk7Ly8sIHVuaWZvcm1zLCBhdHRyaWJ1dGVzKTtcblxufVxuXG4vLyBjb25zdHJ1Y3RvclxuVGV4dHVyZVNoYWRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFNoYWRlci5wcm90b3R5cGUpO1xuVGV4dHVyZVNoYWRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBUZXh0dXJlU2hhZGVyO1xubW9kdWxlLmV4cG9ydHMgPSBUZXh0dXJlU2hhZGVyO1xuXG4vKipcbiAqIFRoZSBkZWZhdWx0IHZlcnRleCBzaGFkZXIgc291cmNlXG4gKlxuICogQHN0YXRpY1xuICogQGNvbnN0YW50XG4gKi9cblRleHR1cmVTaGFkZXIuZGVmYXVsdFZlcnRleFNyYyA9IFtcbiAgICAncHJlY2lzaW9uIGxvd3AgZmxvYXQ7JyxcbiAgICAnYXR0cmlidXRlIHZlYzIgYVZlcnRleFBvc2l0aW9uOycsXG4gICAgJ2F0dHJpYnV0ZSB2ZWMyIGFUZXh0dXJlQ29vcmQ7JyxcbiAgICAnYXR0cmlidXRlIHZlYzQgYUNvbG9yOycsXG5cbiAgICAndW5pZm9ybSBtYXQzIHByb2plY3Rpb25NYXRyaXg7JyxcblxuICAgICd2YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDsnLFxuICAgICd2YXJ5aW5nIHZlYzQgdkNvbG9yOycsXG5cbiAgICAndm9pZCBtYWluKHZvaWQpeycsXG4gICAgJyAgIGdsX1Bvc2l0aW9uID0gdmVjNCgocHJvamVjdGlvbk1hdHJpeCAqIHZlYzMoYVZlcnRleFBvc2l0aW9uLCAxLjApKS54eSwgMC4wLCAxLjApOycsXG4gICAgJyAgIHZUZXh0dXJlQ29vcmQgPSBhVGV4dHVyZUNvb3JkOycsXG4gICAgJyAgIHZDb2xvciA9IHZlYzQoYUNvbG9yLnJnYiAqIGFDb2xvci5hLCBhQ29sb3IuYSk7JyxcbiAgICAnfSdcbl0uam9pbignXFxuJyk7XG5cbi8qKlxuICogVGhlIGRlZmF1bHQgZnJhZ21lbnQgc2hhZGVyIHNvdXJjZVxuICpcbiAqIEBzdGF0aWNcbiAqIEBjb25zdGFudFxuICovXG5UZXh0dXJlU2hhZGVyLmRlZmF1bHRGcmFnbWVudFNyYyA9IFtcbiAgICAncHJlY2lzaW9uIGxvd3AgZmxvYXQ7JyxcblxuICAgICd2YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDsnLFxuICAgICd2YXJ5aW5nIHZlYzQgdkNvbG9yOycsXG5cbiAgICAndW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXI7JyxcblxuICAgICd2b2lkIG1haW4odm9pZCl7JyxcbiAgICAnICAgZ2xfRnJhZ0NvbG9yID0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2VGV4dHVyZUNvb3JkKSAqIHZDb2xvciA7JyxcbiAgICAnfSdcbl0uam9pbignXFxuJyk7XG4iLCJ2YXIgV2ViR0xNYW5hZ2VyID0gcmVxdWlyZSgnLi4vbWFuYWdlcnMvV2ViR0xNYW5hZ2VyJyk7XG5cbi8qKlxuICogQmFzZSBmb3IgYSBjb21tb24gb2JqZWN0IHJlbmRlcmVyIHRoYXQgY2FuIGJlIHVzZWQgYXMgYSBzeXN0ZW0gcmVuZGVyZXIgcGx1Z2luLlxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5XZWJHTE1hbmFnZXJcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcn0gVGhlIHJlbmRlcmVyIHRoaXMgb2JqZWN0IHJlbmRlcmVyIHdvcmtzIGZvci5cbiAqL1xuZnVuY3Rpb24gT2JqZWN0UmVuZGVyZXIocmVuZGVyZXIpXG57XG4gICAgV2ViR0xNYW5hZ2VyLmNhbGwodGhpcywgcmVuZGVyZXIpO1xufVxuXG5cbk9iamVjdFJlbmRlcmVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoV2ViR0xNYW5hZ2VyLnByb3RvdHlwZSk7XG5PYmplY3RSZW5kZXJlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBPYmplY3RSZW5kZXJlcjtcbm1vZHVsZS5leHBvcnRzID0gT2JqZWN0UmVuZGVyZXI7XG5cbi8qKlxuICogU3RhcnRzIHRoZSByZW5kZXJlciBhbmQgc2V0cyB0aGUgc2hhZGVyXG4gKlxuICovXG5PYmplY3RSZW5kZXJlci5wcm90b3R5cGUuc3RhcnQgPSBmdW5jdGlvbiAoKVxue1xuICAgIC8vIHNldCB0aGUgc2hhZGVyLi5cbn07XG5cbi8qKlxuICogU3RvcHMgdGhlIHJlbmRlcmVyXG4gKlxuICovXG5PYmplY3RSZW5kZXJlci5wcm90b3R5cGUuc3RvcCA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy5mbHVzaCgpO1xufTtcblxuLyoqXG4gKiBmbHVzaGVzXG4gKlxuICovXG5PYmplY3RSZW5kZXJlci5wcm90b3R5cGUuZmx1c2ggPSBmdW5jdGlvbiAoKVxue1xuICAgIC8vIGZsdXNoIVxufTtcblxuLyoqXG4gKiBSZW5kZXJzIGFuIG9iamVjdFxuICpcbiAqIEBwYXJhbSBvYmplY3Qge1BJWEkuRGlzcGxheU9iamVjdH0gVGhlIG9iamVjdCB0byByZW5kZXIuXG4gKi9cbk9iamVjdFJlbmRlcmVyLnByb3RvdHlwZS5yZW5kZXIgPSBmdW5jdGlvbiAob2JqZWN0KSAvLyBqc2hpbnQgdW51c2VkOmZhbHNlXG57XG4gICAgLy8gcmVuZGVyIHRoZSBvYmplY3Rcbn07XG4iLCIvKipcbiAqIEhlbHBlciBjbGFzcyB0byBjcmVhdGUgYSBxdWFkXG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIGdsIHtXZWJHTFJlbmRlcmluZ0NvbnRleHR9IFRoZSBnbCBjb250ZXh0IGZvciB0aGlzIHF1YWQgdG8gdXNlLlxuICovXG5mdW5jdGlvbiBRdWFkKGdsKVxue1xuICAgIC8qXG4gICAgICogdGhlIGN1cnJlbnQgV2ViR0wgZHJhd2luZyBjb250ZXh0XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtXZWJHTFJlbmRlcmluZ0NvbnRleHR9XG4gICAgICovXG4gICAgdGhpcy5nbCA9IGdsO1xuXG4vLyAgICB0aGlzLnRleHR1cmVzID0gbmV3IFRleHR1cmVVdnMoKTtcblxuICAgIC8qKlxuICAgICAqIEFuIGFycmF5IG9mIHZlcnRpY2VzXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtGbG9hdDMyQXJyYXl9XG4gICAgICovXG4gICAgdGhpcy52ZXJ0aWNlcyA9IG5ldyBGbG9hdDMyQXJyYXkoW1xuICAgICAgICAwLDAsXG4gICAgICAgIDIwMCwwLFxuICAgICAgICAyMDAsMjAwLFxuICAgICAgICAwLDIwMFxuICAgIF0pO1xuXG4gICAgLyoqXG4gICAgICogVGhlIFV2cyBvZiB0aGUgcXVhZFxuICAgICAqXG4gICAgICogQG1lbWJlciB7RmxvYXQzMkFycmF5fVxuICAgICAqL1xuICAgIHRoaXMudXZzID0gbmV3IEZsb2F0MzJBcnJheShbXG4gICAgICAgIDAsMCxcbiAgICAgICAgMSwwLFxuICAgICAgICAxLDEsXG4gICAgICAgIDAsMVxuICAgIF0pO1xuXG4vLyAgICB2YXIgd2hpdGUgPSAoMHhGRkZGRkYgPj4gMTYpICsgKDB4RkZGRkZGICYgMHhmZjAwKSArICgoMHhGRkZGRkYgJiAweGZmKSA8PCAxNikgKyAoMSAqIDI1NSA8PCAyNCk7XG4gICAgLy9UT0RPIGNvbnZlcnQgdGhpcyB0byBhIDMyIHVuc2lnbmVkIGludCBhcnJheVxuICAgIC8qKlxuICAgICAqIFRoZSBjb2xvciBjb21wb25lbnRzIG9mIHRoZSB0cmlhbmdsZXNcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge0Zsb2F0MzJBcnJheX1cbiAgICAgKi9cbiAgICB0aGlzLmNvbG9ycyA9IG5ldyBGbG9hdDMyQXJyYXkoW1xuICAgICAgICAxLDEsMSwxLFxuICAgICAgICAxLDEsMSwxLFxuICAgICAgICAxLDEsMSwxLFxuICAgICAgICAxLDEsMSwxXG4gICAgXSk7XG5cbiAgICAvKlxuICAgICAqIEBtZW1iZXIge1VpbnQxNkFycmF5fSBBbiBhcnJheSBjb250YWluaW5nIHRoZSBpbmRpY2VzIG9mIHRoZSB2ZXJ0aWNlc1xuICAgICAqL1xuICAgIHRoaXMuaW5kaWNlcyA9IG5ldyBVaW50MTZBcnJheShbXG4gICAgICAgIDAsIDEsIDIsIDAsIDMsIDJcbiAgICBdKTtcblxuICAgIC8qXG4gICAgICogQG1lbWJlciB7V2ViR0xCdWZmZXJ9IFRoZSB2ZXJ0ZXggYnVmZmVyXG4gICAgICovXG4gICAgdGhpcy52ZXJ0ZXhCdWZmZXIgPSBnbC5jcmVhdGVCdWZmZXIoKTtcblxuICAgIC8qXG4gICAgICogQG1lbWJlciB7V2ViR0xCdWZmZXJ9IFRoZSBpbmRleCBidWZmZXJcbiAgICAgKi9cbiAgICB0aGlzLmluZGV4QnVmZmVyID0gZ2wuY3JlYXRlQnVmZmVyKCk7XG5cbiAgICBnbC5iaW5kQnVmZmVyKGdsLkFSUkFZX0JVRkZFUiwgdGhpcy52ZXJ0ZXhCdWZmZXIpO1xuICAgIGdsLmJ1ZmZlckRhdGEoZ2wuQVJSQVlfQlVGRkVSLCAoOCArIDggKyAxNikgKiA0LCBnbC5EWU5BTUlDX0RSQVcpO1xuXG4gICAgZ2wuYmluZEJ1ZmZlcihnbC5FTEVNRU5UX0FSUkFZX0JVRkZFUiwgdGhpcy5pbmRleEJ1ZmZlcik7XG4gICAgZ2wuYnVmZmVyRGF0YShnbC5FTEVNRU5UX0FSUkFZX0JVRkZFUiwgdGhpcy5pbmRpY2VzLCBnbC5TVEFUSUNfRFJBVyk7XG5cbiAgICB0aGlzLnVwbG9hZCgpO1xufVxuXG5RdWFkLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFF1YWQ7XG5cbi8qKlxuICogTWFwcyB0d28gUmVjdGFuZ2xlIHRvIHRoZSBxdWFkXG4gKiBAcGFyYW0gcmVjdCB7UElYSS5SZWN0YW5nbGV9IHRoZSBmaXJzdCByZWN0YW5nbGVcbiAqIEBwYXJhbSByZWN0MiB7UElYSS5SZWN0YW5nbGV9IHRoZSBzZWNvbmQgcmVjdGFuZ2xlXG4gKi9cblF1YWQucHJvdG90eXBlLm1hcCA9IGZ1bmN0aW9uKHJlY3QsIHJlY3QyKVxue1xuICAgIHZhciB4ID0gMDsgLy9yZWN0Mi54IC8gcmVjdC53aWR0aDtcbiAgICB2YXIgeSA9IDA7IC8vcmVjdDIueSAvIHJlY3QuaGVpZ2h0O1xuXG4gICAgdGhpcy51dnNbMF0gPSB4O1xuICAgIHRoaXMudXZzWzFdID0geTtcblxuICAgIHRoaXMudXZzWzJdID0geCArIHJlY3QyLndpZHRoIC8gcmVjdC53aWR0aDtcbiAgICB0aGlzLnV2c1szXSA9IHk7XG5cbiAgICB0aGlzLnV2c1s0XSA9IHggKyByZWN0Mi53aWR0aCAvIHJlY3Qud2lkdGg7XG4gICAgdGhpcy51dnNbNV0gPSB5ICsgcmVjdDIuaGVpZ2h0IC8gcmVjdC5oZWlnaHQ7XG5cbiAgICB0aGlzLnV2c1s2XSA9IHg7XG4gICAgdGhpcy51dnNbN10gPSB5ICsgcmVjdDIuaGVpZ2h0IC8gcmVjdC5oZWlnaHQ7XG5cbiAgICAvLy8gLS0tLS1cbiAgICB4ID0gcmVjdDIueDtcbiAgICB5ID0gcmVjdDIueTtcblxuICAgIHRoaXMudmVydGljZXNbMF0gPSB4O1xuICAgIHRoaXMudmVydGljZXNbMV0gPSB5O1xuXG4gICAgdGhpcy52ZXJ0aWNlc1syXSA9IHggKyByZWN0Mi53aWR0aDtcbiAgICB0aGlzLnZlcnRpY2VzWzNdID0geTtcblxuICAgIHRoaXMudmVydGljZXNbNF0gPSB4ICsgcmVjdDIud2lkdGg7XG4gICAgdGhpcy52ZXJ0aWNlc1s1XSA9IHkgKyByZWN0Mi5oZWlnaHQ7XG5cbiAgICB0aGlzLnZlcnRpY2VzWzZdID0geDtcbiAgICB0aGlzLnZlcnRpY2VzWzddID0geSArIHJlY3QyLmhlaWdodDtcblxuICAgIHRoaXMudXBsb2FkKCk7XG59O1xuXG4vKipcbiAqIEJpbmRzIHRoZSBidWZmZXIgYW5kIHVwbG9hZHMgdGhlIGRhdGFcbiAqL1xuUXVhZC5wcm90b3R5cGUudXBsb2FkID0gZnVuY3Rpb24oKVxue1xuICAgIHZhciBnbCA9IHRoaXMuZ2w7XG5cbiAgICAvLyBUT0RPIGNvdWxkIHByb2JhYmx5IGJlIHB1c2hlZCBpbnRvIG9uZSB1cGxvYWQhXG4gICAgZ2wuYmluZEJ1ZmZlciggZ2wuQVJSQVlfQlVGRkVSLCB0aGlzLnZlcnRleEJ1ZmZlciApO1xuXG4gICAgZ2wuYnVmZmVyU3ViRGF0YShnbC5BUlJBWV9CVUZGRVIsIDAsIHRoaXMudmVydGljZXMpO1xuXG4gICAgZ2wuYnVmZmVyU3ViRGF0YShnbC5BUlJBWV9CVUZGRVIsIDggKiA0LCB0aGlzLnV2cyk7XG5cbiAgICBnbC5idWZmZXJTdWJEYXRhKGdsLkFSUkFZX0JVRkZFUiwgKDggKyA4KSAqIDQsIHRoaXMuY29sb3JzKTtcbn07XG5cblF1YWQucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbigpXG57XG4gICAgdmFyIGdsID0gdGhpcy5nbDtcbiAgICBcbiAgICAgZ2wuZGVsZXRlQnVmZmVyKHRoaXMudmVydGV4QnVmZmVyKTtcbiAgICAgZ2wuZGVsZXRlQnVmZmVyKHRoaXMuaW5kZXhCdWZmZXIpO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBRdWFkO1xuXG5cbiIsInZhciBtYXRoID0gcmVxdWlyZSgnLi4vLi4vLi4vbWF0aCcpLFxuICAgIHV0aWxzID0gcmVxdWlyZSgnLi4vLi4vLi4vdXRpbHMnKSxcbiAgICBDT05TVCA9IHJlcXVpcmUoJy4uLy4uLy4uL2NvbnN0JyksXG4gICAgICAgIFxuICAgIEdMVGV4dHVyZSA9IHJlcXVpcmUoJ3BpeGktZ2wtY29yZScpLkdMVGV4dHVyZSxcbiAgICBHTEZyYW1lYnVmZmVyID0gcmVxdWlyZSgncGl4aS1nbC1jb3JlJykuR0xGcmFtZWJ1ZmZlcixcbiAgICBcbiAgICBTdGVuY2lsTWFza1N0YWNrID0gcmVxdWlyZSgnLi9TdGVuY2lsTWFza1N0YWNrJyk7XG5cbi8qKlxuICogQGF1dGhvciBNYXQgR3JvdmVzIGh0dHA6Ly9tYXRncm92ZXMuY29tLyBARG9vcm1hdDIzXG4gKi9cblxuLyoqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gZ2wge1dlYkdMUmVuZGVyaW5nQ29udGV4dH0gdGhlIGN1cnJlbnQgV2ViR0wgZHJhd2luZyBjb250ZXh0XG4gKiBAcGFyYW0gd2lkdGgge251bWJlcn0gdGhlIGhvcml6b250YWwgcmFuZ2Ugb2YgdGhlIGZpbHRlclxuICogQHBhcmFtIGhlaWdodCB7bnVtYmVyfSB0aGUgdmVydGljYWwgcmFuZ2Ugb2YgdGhlIGZpbHRlclxuICogQHBhcmFtIHNjYWxlTW9kZSB7bnVtYmVyfSBTZWUge0BsaW5rIFBJWEkuU0NBTEVfTU9ERVN9IGZvciBwb3NzaWJsZSB2YWx1ZXNcbiAqIEBwYXJhbSByZXNvbHV0aW9uIHtudW1iZXJ9IHRoZSBjdXJyZW50IHJlc29sdXRpb25cbiAqIEBwYXJhbSByb290IHtib29sZWFufSBXaGV0aGVyIHRoaXMgb2JqZWN0IGlzIHRoZSByb290IGVsZW1lbnQgb3Igbm90XG4gKi9cbnZhciBSZW5kZXJUYXJnZXQgPSBmdW5jdGlvbihnbCwgd2lkdGgsIGhlaWdodCwgc2NhbGVNb2RlLCByZXNvbHV0aW9uLCByb290KVxue1xuICAgIC8vVE9ETyBSZXNvbHV0aW9uIGNvdWxkIGdvIGhlcmUgKCBlZyBsb3cgcmVzIGJsdXJzIClcblxuICAgIC8qKlxuICAgICAqIFRoZSBjdXJyZW50IFdlYkdMIGRyYXdpbmcgY29udGV4dC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1dlYkdMUmVuZGVyaW5nQ29udGV4dH1cbiAgICAgKi9cbiAgICB0aGlzLmdsID0gZ2w7XG5cbiAgICAvLyBuZXh0IHRpbWUgdG8gY3JlYXRlIGEgZnJhbWUgYnVmZmVyIGFuZCB0ZXh0dXJlXG5cbiAgICAvKipcbiAgICAgKiBBIGZyYW1lIGJ1ZmZlclxuICAgICAqXG4gICAgICogQG1lbWJlciB7V2ViR0xGcmFtZUJ1ZmZlcn1cbiAgICAgKi9cbiAgICB0aGlzLmZyYW1lQnVmZmVyID0gbnVsbDtcblxuICAgIC8qKlxuICAgICAqIFRoZSB0ZXh0dXJlXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlRleHR1cmV9XG4gICAgICovXG4gICAgdGhpcy50ZXh0dXJlID0gbnVsbDtcblxuICAgIHRoaXMuY2xlYXJDb2xvciA9IFswLCAwLCAwLCAwXTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBzaXplIG9mIHRoZSBvYmplY3QgYXMgYSByZWN0YW5nbGVcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuUmVjdGFuZ2xlfVxuICAgICAqL1xuICAgIHRoaXMuc2l6ZSA9IG5ldyBtYXRoLlJlY3RhbmdsZSgwLCAwLCAxLCAxKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBjdXJyZW50IHJlc29sdXRpb25cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLnJlc29sdXRpb24gPSByZXNvbHV0aW9uIHx8IENPTlNULlJFU09MVVRJT047XG5cbiAgICAvKipcbiAgICAgKiBUaGUgcHJvamVjdGlvbiBtYXRyaXhcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuTWF0cml4fVxuICAgICAqL1xuICAgIHRoaXMucHJvamVjdGlvbk1hdHJpeCA9IG5ldyBtYXRoLk1hdHJpeCgpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIG9iamVjdCdzIHRyYW5zZm9ybVxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5NYXRyaXh9XG4gICAgICovXG4gICAgdGhpcy50cmFuc2Zvcm0gPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGZyYW1lLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5SZWN0YW5nbGV9XG4gICAgICovXG4gICAgdGhpcy5mcmFtZSA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgc3RlbmNpbCBidWZmZXIgc3RvcmVzIG1hc2tpbmcgZGF0YSBmb3IgdGhlIHJlbmRlciB0YXJnZXRcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1dlYkdMUmVuZGVyQnVmZmVyfVxuICAgICAqL1xuICAgIHRoaXMuc3RlbmNpbEJ1ZmZlciA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgZGF0YSBzdHJ1Y3R1cmUgZm9yIHRoZSBzdGVuY2lsIG1hc2tzXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlN0ZW5jaWxNYXNrU3RhY2t9XG4gICAgICovXG4gICAgdGhpcy5zdGVuY2lsTWFza1N0YWNrID0gbmV3IFN0ZW5jaWxNYXNrU3RhY2soKTtcblxuICAgIC8qKlxuICAgICAqIFN0b3JlcyBmaWx0ZXIgZGF0YSBmb3IgdGhlIHJlbmRlciB0YXJnZXRcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge29iamVjdFtdfVxuICAgICAqL1xuICAgIHRoaXMuZmlsdGVyU3RhY2sgPSBbXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJlbmRlclRhcmdldDp0aGlzLFxuICAgICAgICAgICAgZmlsdGVyOltdLFxuICAgICAgICAgICAgYm91bmRzOnRoaXMuc2l6ZVxuICAgICAgICB9XG4gICAgXTtcblxuXG4gICAgLyoqXG4gICAgICogVGhlIHNjYWxlIG1vZGUuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgUElYSS5TQ0FMRV9NT0RFUy5ERUZBVUxUXG4gICAgICogQHNlZSBQSVhJLlNDQUxFX01PREVTXG4gICAgICovXG4gICAgdGhpcy5zY2FsZU1vZGUgPSBzY2FsZU1vZGUgfHwgQ09OU1QuU0NBTEVfTU9ERVMuREVGQVVMVDtcblxuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgdGhpcyBvYmplY3QgaXMgdGhlIHJvb3QgZWxlbWVudCBvciBub3RcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICovXG4gICAgdGhpcy5yb290ID0gcm9vdDtcblxuICAgIHRoaXMuZnJhbWVCdWZmZXIgPSBHTEZyYW1lYnVmZmVyLmNyZWF0ZVJHQkEoZ2wsIDEwMCwgMTAwKTtcbiAgICBpZih0aGlzLmZyYW1lQnVmZmVyKXRoaXMuZnJhbWVCdWZmZXIudW5iaW5kKCk7XG5cbiAgIC8vIHRoaXMuZnJhbWVCdWZmZXIgPSB7ZnJhbWVidWZmZXI6bnVsbCwgYmluZDpmdW5jdGlvbigpe30sIGNsZWFyOmZ1bmN0aW9uKCl7fSwgcmVzaXplOmZ1bmN0aW9uKCl7fX0vL25ldyBHTEZyYW1lYnVmZmVyLmNyZWF0ZVJHQkEoZ2wsIDEwMCwgMTAwKTtcblxuXG5cbiAgICBpZiAoIXRoaXMucm9vdClcbiAgICB7XG4gICAgICAgIC8qXG4gICAgICAgICAgICBBIGZyYW1lIGJ1ZmZlciBuZWVkcyBhIHRhcmdldCB0byByZW5kZXIgdG8uLlxuICAgICAgICAgICAgY3JlYXRlIGEgdGV4dHVyZSBhbmQgYmluZCBpdCBhdHRhY2ggaXQgdG8gdGhlIGZyYW1lYnVmZmVyLi5cbiAgICAgICAgICovXG4gICAgICAgIFxuICAgICAgICAvLyBjcmVhdGUgYSB0ZXh0dXJlIHRvIGJpbmQgYXR0YWNoIHRvIHRoZSBmcmFtZUJ1ZmZlci4uXG4gICAgICAgIHZhciB0ZXh0dXJlID0gbmV3IEdMVGV4dHVyZShnbCk7XG5cbiAgICAgICAgdGV4dHVyZS5lbmFibGVMaW5lYXJTY2FsaW5nKClcbiAgICAgICAgdGV4dHVyZS5lbmFibGVXcmFwQ2xhbXAoKVxuXG4gICAgICAgIHRoaXMuZnJhbWVCdWZmZXIuZW5hYmxlVGV4dHVyZSh0ZXh0dXJlKTtcblxuICAgICAgICAvLyBUT0RPIGNoYW5nZSFcbiAgICAgICAgLy8gdGhpcyBpcyB1c2VkIGJ5IHRoZSBiYXNlIHRleHR1cmVcbiAgICAgICAgdGhpcy50ZXh0dXJlID0gdGV4dHVyZS50ZXh0dXJlO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICAvLyBtYWtlIGl0IGEgbnVsbCBmcmFtZWJ1ZmZlci4uXG4gICAgICAgIHRoaXMuZnJhbWVCdWZmZXIuZnJhbWVidWZmZXIgPSBudWxsO1xuICAgIH1cblxuICAgIHRoaXMucmVzaXplKHdpZHRoLCBoZWlnaHQpO1xufTtcblxuUmVuZGVyVGFyZ2V0LnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFJlbmRlclRhcmdldDtcbm1vZHVsZS5leHBvcnRzID0gUmVuZGVyVGFyZ2V0O1xuXG4vKipcbiAqIENsZWFycyB0aGUgZmlsdGVyIHRleHR1cmUuXG4gKlxuICogQHBhcmFtIFtiaW5kPWZhbHNlXSB7Ym9vbGVhbn0gU2hvdWxkIHdlIGJpbmQgb3VyIGZyYW1lYnVmZmVyIGJlZm9yZSBjbGVhcmluZz9cbiAqL1xuUmVuZGVyVGFyZ2V0LnByb3RvdHlwZS5jbGVhciA9IGZ1bmN0aW9uKGNsZWFyQ29sb3IpXG57XG4gICAgdmFyIGNjID0gY2xlYXJDb2xvciB8fCB0aGlzLmNsZWFyQ29sb3JcbiAgICB0aGlzLmZyYW1lQnVmZmVyLmNsZWFyKGNjWzBdLGNjWzFdLGNjWzJdLGNjWzNdKS8vcixnLGIsYSk7XG59O1xuXG4vKipcbiAqIEJpbmRzIHRoZSBzdGVuY2lsIGJ1ZmZlci5cbiAqXG4gKi9cblJlbmRlclRhcmdldC5wcm90b3R5cGUuYXR0YWNoU3RlbmNpbEJ1ZmZlciA9IGZ1bmN0aW9uKClcbntcbiAgICAvL1RPRE8gY2hlY2sgaWYgc3RlbmNpbCBpcyBkb25lP1xuICAgIC8qKlxuICAgICAqIFRoZSBzdGVuY2lsIGJ1ZmZlciBpcyB1c2VkIGZvciBtYXNraW5nIGluIHBpeGlcbiAgICAgKiBsZXRzIGNyZWF0ZSBvbmUgYW5kIHRoZW4gYWRkIGF0dGFjaCBpdCB0byB0aGUgZnJhbWVidWZmZXIuLlxuICAgICAqL1xuICAgIGlmICghdGhpcy5yb290KVxuICAgIHtcbiAgICAgICAgdGhpcy5mcmFtZUJ1ZmZlci5lbmFibGVTdGVuY2lsKCk7XG4gICAgfVxufTtcblxuLyoqXG4gKiBCaW5kcyB0aGUgYnVmZmVycyBhbmQgaW5pdGlhbGlzZXMgdGhlIHZpZXdwb3J0LlxuICpcbiAqL1xuUmVuZGVyVGFyZ2V0LnByb3RvdHlwZS5hY3RpdmF0ZSA9IGZ1bmN0aW9uKClcbntcbiAgICAvL1RPT0QgcmVmYWN0b3IgdXNhZ2Ugb2YgZnJhbWUuLlxuICAgIHZhciBnbCA9IHRoaXMuZ2w7XG5cbiAgICB0aGlzLmZyYW1lQnVmZmVyLmJpbmQoKTtcblxuXG4gICAgdmFyIHByb2plY3Rpb25GcmFtZSA9IHRoaXMuZnJhbWUgfHwgdGhpcy5zaXplO1xuXG4gICAgLy8gVE9ETyBhZGQgYSBkaXJ0eSBmbGFnIHRvIHRoaXMgb2YgYSBzZXR0ZXIgZm9yIHRoZSBmcmFtZT9cbiAgICB0aGlzLmNhbGN1bGF0ZVByb2plY3Rpb24oIHByb2plY3Rpb25GcmFtZSApO1xuXG4gICAgaWYodGhpcy50cmFuc2Zvcm0pXG4gICAge1xuICAgICAgICB0aGlzLnByb2plY3Rpb25NYXRyaXguYXBwZW5kKHRoaXMudHJhbnNmb3JtKTtcbiAgICB9XG5cbiAgICBnbC52aWV3cG9ydCgwLDAsIHByb2plY3Rpb25GcmFtZS53aWR0aCAqIHRoaXMucmVzb2x1dGlvbiwgcHJvamVjdGlvbkZyYW1lLmhlaWdodCAqIHRoaXMucmVzb2x1dGlvbik7XG59O1xuXG4vKipcbiAqIFVwZGF0ZXMgdGhlIHByb2plY3Rpb24gbWF0cml4IGJhc2VkIG9uIGEgcHJvamVjdGlvbiBmcmFtZSAod2hpY2ggaXMgYSByZWN0YW5nbGUpXG4gKlxuICovXG5SZW5kZXJUYXJnZXQucHJvdG90eXBlLmNhbGN1bGF0ZVByb2plY3Rpb24gPSBmdW5jdGlvbiAocHJvamVjdGlvbkZyYW1lKVxue1xuICAgIHZhciBwbSA9IHRoaXMucHJvamVjdGlvbk1hdHJpeDtcblxuICAgIHBtLmlkZW50aXR5KCk7XG5cbiAgICBpZiAoIXRoaXMucm9vdClcbiAgICB7XG4gICAgICAgIHBtLmEgPSAxIC8gcHJvamVjdGlvbkZyYW1lLndpZHRoKjI7XG4gICAgICAgIHBtLmQgPSAxIC8gcHJvamVjdGlvbkZyYW1lLmhlaWdodCoyO1xuXG4gICAgICAgIHBtLnR4ID0gLTEgLSBwcm9qZWN0aW9uRnJhbWUueCAqIHBtLmE7XG4gICAgICAgIHBtLnR5ID0gLTEgLSBwcm9qZWN0aW9uRnJhbWUueSAqIHBtLmQ7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHBtLmEgPSAxIC8gcHJvamVjdGlvbkZyYW1lLndpZHRoKjI7XG4gICAgICAgIHBtLmQgPSAtMSAvIHByb2plY3Rpb25GcmFtZS5oZWlnaHQqMjtcblxuICAgICAgICBwbS50eCA9IC0xIC0gcHJvamVjdGlvbkZyYW1lLnggKiBwbS5hO1xuICAgICAgICBwbS50eSA9IDEgLSBwcm9qZWN0aW9uRnJhbWUueSAqIHBtLmQ7XG4gICAgfVxufTtcblxuLyoqXG4gKiBSZXNpemVzIHRoZSB0ZXh0dXJlIHRvIHRoZSBzcGVjaWZpZWQgd2lkdGggYW5kIGhlaWdodFxuICpcbiAqIEBwYXJhbSB3aWR0aCB7TnVtYmVyfSB0aGUgbmV3IHdpZHRoIG9mIHRoZSB0ZXh0dXJlXG4gKiBAcGFyYW0gaGVpZ2h0IHtOdW1iZXJ9IHRoZSBuZXcgaGVpZ2h0IG9mIHRoZSB0ZXh0dXJlXG4gKi9cblJlbmRlclRhcmdldC5wcm90b3R5cGUucmVzaXplID0gZnVuY3Rpb24gKHdpZHRoLCBoZWlnaHQpXG57XG4gICAgd2lkdGggPSB3aWR0aCB8IDA7XG4gICAgaGVpZ2h0ID0gaGVpZ2h0IHwgMDtcblxuICAgIGlmICh0aGlzLnNpemUud2lkdGggPT09IHdpZHRoICYmIHRoaXMuc2l6ZS5oZWlnaHQgPT09IGhlaWdodCkgXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5zaXplLndpZHRoID0gd2lkdGg7XG4gICAgdGhpcy5zaXplLmhlaWdodCA9IGhlaWdodDtcblxuICAgIHRoaXMuZnJhbWVCdWZmZXIucmVzaXplKHdpZHRoICogdGhpcy5yZXNvbHV0aW9uLCBoZWlnaHQgKiB0aGlzLnJlc29sdXRpb24pO1xuICAgIFxuICAgIHZhciBwcm9qZWN0aW9uRnJhbWUgPSB0aGlzLmZyYW1lIHx8IHRoaXMuc2l6ZTtcblxuICAgIHRoaXMuY2FsY3VsYXRlUHJvamVjdGlvbiggcHJvamVjdGlvbkZyYW1lICk7XG59O1xuXG4vKipcbiAqIERlc3Ryb3lzIHRoZSByZW5kZXIgdGFyZ2V0LlxuICpcbiAqL1xuUmVuZGVyVGFyZ2V0LnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKClcbntcbiAgICB2YXIgZ2wgPSB0aGlzLmdsO1xuICAgIFxuICAgIHRoaXMuZnJhbWVCdWZmZXIuZGVzdHJveSgpO1xuXG4gICAgdGhpcy5mcmFtZUJ1ZmZlciA9IG51bGw7XG4gICAgdGhpcy50ZXh0dXJlID0gbnVsbDtcbn07XG4iLCIvKipcbiAqIEdlbmVyaWMgTWFzayBTdGFjayBkYXRhIHN0cnVjdHVyZVxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICovXG5mdW5jdGlvbiBTdGVuY2lsTWFza1N0YWNrKClcbntcblx0LyoqXG4gICAgICogVGhlIGFjdHVhbCBzdGFja1xuICAgICAqXG4gICAgICogQG1lbWJlciB7YW55W119XG4gICAgICovXG4gICAgdGhpcy5zdGVuY2lsU3RhY2sgPSBbXTtcblxuICAgIC8qKlxuICAgICAqIFRPRE8gQGFsdmluXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqL1xuICAgIHRoaXMucmV2ZXJzZSA9IHRydWU7XG5cbiAgICAvKipcbiAgICAgKiBJbnRlcm5hbCBjb3VudFxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMuY291bnQgPSAwO1xufVxuXG5TdGVuY2lsTWFza1N0YWNrLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFN0ZW5jaWxNYXNrU3RhY2s7XG5tb2R1bGUuZXhwb3J0cyA9IFN0ZW5jaWxNYXNrU3RhY2s7XG4iLCJDT05TVCA9IHJlcXVpcmUoJy4uLy4uLy4uL2NvbnN0Jyk7XG5cbi8qKlxuICogTWFwcyBnbCBibGVuZCBjb21iaW5hdGlvbnMgdG8gV2ViR0xcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqL1xuZnVuY3Rpb24gbWFwV2ViR0xCbGVuZE1vZGVzVG9QaXhpKGdsLCBvYmplY3QpXG57XG4gICAgb2JqZWN0ID0gb2JqZWN0IHx8IHt9O1xuXG4gICAgLy9UT0RPIC0gcHJlbXVsdGlwbHkgYWxwaGEgd291bGQgYmUgZGlmZmVyZW50LlxuICAgIC8vYWRkIGEgYm9vbGVhbiBmb3IgdGhhdCFcbiAgICBvYmplY3RbQ09OU1QuQkxFTkRfTU9ERVMuTk9STUFMXSAgICAgICAgPSBbZ2wuT05FLCAgICAgICBnbC5PTkVfTUlOVVNfU1JDX0FMUEhBXTtcbiAgICBvYmplY3RbQ09OU1QuQkxFTkRfTU9ERVMuQUREXSAgICAgICAgICAgPSBbZ2wuU1JDX0FMUEhBLCBnbC5EU1RfQUxQSEFdO1xuICAgIG9iamVjdFtDT05TVC5CTEVORF9NT0RFUy5NVUxUSVBMWV0gICAgICA9IFtnbC5EU1RfQ09MT1IsIGdsLk9ORV9NSU5VU19TUkNfQUxQSEFdO1xuICAgIG9iamVjdFtDT05TVC5CTEVORF9NT0RFUy5TQ1JFRU5dICAgICAgICA9IFtnbC5TUkNfQUxQSEEsIGdsLk9ORV07XG4gICAgb2JqZWN0W0NPTlNULkJMRU5EX01PREVTLk9WRVJMQVldICAgICAgID0gW2dsLk9ORSwgICAgICAgZ2wuT05FX01JTlVTX1NSQ19BTFBIQV07XG4gICAgb2JqZWN0W0NPTlNULkJMRU5EX01PREVTLkRBUktFTl0gICAgICAgID0gW2dsLk9ORSwgICAgICAgZ2wuT05FX01JTlVTX1NSQ19BTFBIQV07XG4gICAgb2JqZWN0W0NPTlNULkJMRU5EX01PREVTLkxJR0hURU5dICAgICAgID0gW2dsLk9ORSwgICAgICAgZ2wuT05FX01JTlVTX1NSQ19BTFBIQV07XG4gICAgb2JqZWN0W0NPTlNULkJMRU5EX01PREVTLkNPTE9SX0RPREdFXSAgID0gW2dsLk9ORSwgICAgICAgZ2wuT05FX01JTlVTX1NSQ19BTFBIQV07XG4gICAgb2JqZWN0W0NPTlNULkJMRU5EX01PREVTLkNPTE9SX0JVUk5dICAgID0gW2dsLk9ORSwgICAgICAgZ2wuT05FX01JTlVTX1NSQ19BTFBIQV07XG4gICAgb2JqZWN0W0NPTlNULkJMRU5EX01PREVTLkhBUkRfTElHSFRdICAgID0gW2dsLk9ORSwgICAgICAgZ2wuT05FX01JTlVTX1NSQ19BTFBIQV07XG4gICAgb2JqZWN0W0NPTlNULkJMRU5EX01PREVTLlNPRlRfTElHSFRdICAgID0gW2dsLk9ORSwgICAgICAgZ2wuT05FX01JTlVTX1NSQ19BTFBIQV07XG4gICAgb2JqZWN0W0NPTlNULkJMRU5EX01PREVTLkRJRkZFUkVOQ0VdICAgID0gW2dsLk9ORSwgICAgICAgZ2wuT05FX01JTlVTX1NSQ19BTFBIQV07XG4gICAgb2JqZWN0W0NPTlNULkJMRU5EX01PREVTLkVYQ0xVU0lPTl0gICAgID0gW2dsLk9ORSwgICAgICAgZ2wuT05FX01JTlVTX1NSQ19BTFBIQV07XG4gICAgb2JqZWN0W0NPTlNULkJMRU5EX01PREVTLkhVRV0gICAgICAgICAgID0gW2dsLk9ORSwgICAgICAgZ2wuT05FX01JTlVTX1NSQ19BTFBIQV07XG4gICAgb2JqZWN0W0NPTlNULkJMRU5EX01PREVTLlNBVFVSQVRJT05dICAgID0gW2dsLk9ORSwgICAgICAgZ2wuT05FX01JTlVTX1NSQ19BTFBIQV07XG4gICAgb2JqZWN0W0NPTlNULkJMRU5EX01PREVTLkNPTE9SXSAgICAgICAgID0gW2dsLk9ORSwgICAgICAgZ2wuT05FX01JTlVTX1NSQ19BTFBIQV07XG4gICAgb2JqZWN0W0NPTlNULkJMRU5EX01PREVTLkxVTUlOT1NJVFldICAgID0gW2dsLk9ORSwgICAgICAgZ2wuT05FX01JTlVTX1NSQ19BTFBIQV07XG5cbiAgICByZXR1cm4gb2JqZWN0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IG1hcFdlYkdMQmxlbmRNb2Rlc1RvUGl4aTtcbiIsIkNPTlNUID0gcmVxdWlyZSgnLi4vLi4vLi4vY29uc3QnKTtcblxuLyoqXG4gKiBHZW5lcmljIE1hc2sgU3RhY2sgZGF0YSBzdHJ1Y3R1cmVcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqL1xuZnVuY3Rpb24gbWFwV2ViR0xEcmF3TW9kZXNUb1BpeGkoZ2wsIG9iamVjdClcbntcblx0b2JqZWN0PSBvYmplY3QgfHwge307XG5cbiAgICBvYmplY3RbQ09OU1QuRFJBV19NT0RFUy5QT0lOVFNdICAgICAgICAgPSBnbC5QT0lOVFM7XG4gICAgb2JqZWN0W0NPTlNULkRSQVdfTU9ERVMuTElORVNdICAgICAgICAgID0gZ2wuTElORVM7XG4gICAgb2JqZWN0W0NPTlNULkRSQVdfTU9ERVMuTElORV9MT09QXSAgICAgID0gZ2wuTElORV9MT09QO1xuICAgIG9iamVjdFtDT05TVC5EUkFXX01PREVTLkxJTkVfU1RSSVBdICAgICA9IGdsLkxJTkVfU1RSSVA7XG4gICAgb2JqZWN0W0NPTlNULkRSQVdfTU9ERVMuVFJJQU5HTEVTXSAgICAgID0gZ2wuVFJJQU5HTEVTO1xuICAgIG9iamVjdFtDT05TVC5EUkFXX01PREVTLlRSSUFOR0xFX1NUUklQXSA9IGdsLlRSSUFOR0xFX1NUUklQO1xuICAgIG9iamVjdFtDT05TVC5EUkFXX01PREVTLlRSSUFOR0xFX0ZBTl0gICA9IGdsLlRSSUFOR0xFX0ZBTjtcblxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IG1hcFdlYkdMRHJhd01vZGVzVG9QaXhpO1xuIiwidmFyIG1hdGggPSByZXF1aXJlKCcuLi9tYXRoJyksXG4gICAgVGV4dHVyZSA9IHJlcXVpcmUoJy4uL3RleHR1cmVzL1RleHR1cmUnKSxcbiAgICBDb250YWluZXIgPSByZXF1aXJlKCcuLi9kaXNwbGF5L0NvbnRhaW5lcicpLFxuICAgIENhbnZhc1RpbnRlciA9IHJlcXVpcmUoJy4uL3JlbmRlcmVycy9jYW52YXMvdXRpbHMvQ2FudmFzVGludGVyJyksXG4gICAgdXRpbHMgPSByZXF1aXJlKCcuLi91dGlscycpLFxuICAgIENPTlNUID0gcmVxdWlyZSgnLi4vY29uc3QnKSxcbiAgICB0ZW1wUG9pbnQgPSBuZXcgbWF0aC5Qb2ludCgpO1xuXG4vKipcbiAqIFRoZSBTcHJpdGUgb2JqZWN0IGlzIHRoZSBiYXNlIGZvciBhbGwgdGV4dHVyZWQgb2JqZWN0cyB0aGF0IGFyZSByZW5kZXJlZCB0byB0aGUgc2NyZWVuXG4gKlxuICogQSBzcHJpdGUgY2FuIGJlIGNyZWF0ZWQgZGlyZWN0bHkgZnJvbSBhbiBpbWFnZSBsaWtlIHRoaXM6XG4gKlxuICogYGBganNcbiAqIHZhciBzcHJpdGUgPSBuZXcgUElYSS5TcHJpdGUuZnJvbUltYWdlKCdhc3NldHMvaW1hZ2UucG5nJyk7XG4gKiBgYGBcbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQ29udGFpbmVyXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIHRleHR1cmUge1BJWEkuVGV4dHVyZX0gVGhlIHRleHR1cmUgZm9yIHRoaXMgc3ByaXRlXG4gKi9cbmZ1bmN0aW9uIFNwcml0ZSh0ZXh0dXJlKVxue1xuICAgIENvbnRhaW5lci5jYWxsKHRoaXMpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGFuY2hvciBzZXRzIHRoZSBvcmlnaW4gcG9pbnQgb2YgdGhlIHRleHR1cmUuXG4gICAgICogVGhlIGRlZmF1bHQgaXMgMCwwIHRoaXMgbWVhbnMgdGhlIHRleHR1cmUncyBvcmlnaW4gaXMgdGhlIHRvcCBsZWZ0XG4gICAgICogU2V0dGluZyB0aGUgYW5jaG9yIHRvIDAuNSwwLjUgbWVhbnMgdGhlIHRleHR1cmUncyBvcmlnaW4gaXMgY2VudGVyZWRcbiAgICAgKiBTZXR0aW5nIHRoZSBhbmNob3IgdG8gMSwxIHdvdWxkIG1lYW4gdGhlIHRleHR1cmUncyBvcmlnaW4gcG9pbnQgd2lsbCBiZSB0aGUgYm90dG9tIHJpZ2h0IGNvcm5lclxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5Qb2ludH1cbiAgICAgKi9cbiAgICB0aGlzLmFuY2hvciA9IG5ldyBtYXRoLlBvaW50KCk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgdGV4dHVyZSB0aGF0IHRoZSBzcHJpdGUgaXMgdXNpbmdcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuVGV4dHVyZX1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX3RleHR1cmUgPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHdpZHRoIG9mIHRoZSBzcHJpdGUgKHRoaXMgaXMgaW5pdGlhbGx5IHNldCBieSB0aGUgdGV4dHVyZSlcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX3dpZHRoID0gMDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBoZWlnaHQgb2YgdGhlIHNwcml0ZSAodGhpcyBpcyBpbml0aWFsbHkgc2V0IGJ5IHRoZSB0ZXh0dXJlKVxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5faGVpZ2h0ID0gMDtcblxuICAgIC8qKlxuICAgICAqIFRoZSB0aW50IGFwcGxpZWQgdG8gdGhlIHNwcml0ZS4gVGhpcyBpcyBhIGhleCB2YWx1ZS4gQSB2YWx1ZSBvZiAweEZGRkZGRiB3aWxsIHJlbW92ZSBhbnkgdGludCBlZmZlY3QuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMHhGRkZGRkZcbiAgICAgKi9cbiAgICB0aGlzLnRpbnQgPSAweEZGRkZGRjtcblxuICAgIC8qKlxuICAgICAqIFRoZSBibGVuZCBtb2RlIHRvIGJlIGFwcGxpZWQgdG8gdGhlIHNwcml0ZS4gQXBwbHkgYSB2YWx1ZSBvZiBgUElYSS5CTEVORF9NT0RFUy5OT1JNQUxgIHRvIHJlc2V0IHRoZSBibGVuZCBtb2RlLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IFBJWEkuQkxFTkRfTU9ERVMuTk9STUFMXG4gICAgICogQHNlZSBQSVhJLkJMRU5EX01PREVTXG4gICAgICovXG4gICAgdGhpcy5ibGVuZE1vZGUgPSBDT05TVC5CTEVORF9NT0RFUy5OT1JNQUw7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgc2hhZGVyIHRoYXQgd2lsbCBiZSB1c2VkIHRvIHJlbmRlciB0aGUgc3ByaXRlLiBTZXQgdG8gbnVsbCB0byByZW1vdmUgYSBjdXJyZW50IHNoYWRlci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuQWJzdHJhY3RGaWx0ZXJ8UElYSS5TaGFkZXJ9XG4gICAgICovXG4gICAgdGhpcy5zaGFkZXIgPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogQW4gaW50ZXJuYWwgY2FjaGVkIHZhbHVlIG9mIHRoZSB0aW50LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDB4RkZGRkZGXG4gICAgICovXG4gICAgdGhpcy5jYWNoZWRUaW50ID0gMHhGRkZGRkY7XG5cbiAgICAvLyBjYWxsIHRleHR1cmUgc2V0dGVyXG4gICAgdGhpcy50ZXh0dXJlID0gdGV4dHVyZSB8fCBUZXh0dXJlLkVNUFRZO1xuICAgIHRoaXMudGV4dHVyZURpcnR5ID0gdHJ1ZVxuICAgIHRoaXMudmVydGV4RGlydHkgPSB0cnVlO1xuICAgIHRoaXMudmVydGV4RGF0YSA9IG5ldyBGbG9hdDMyQXJyYXkoOCk7XG59XG5cbi8vIGNvbnN0cnVjdG9yXG5TcHJpdGUucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShDb250YWluZXIucHJvdG90eXBlKTtcblNwcml0ZS5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBTcHJpdGU7XG5tb2R1bGUuZXhwb3J0cyA9IFNwcml0ZTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoU3ByaXRlLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFRoZSB3aWR0aCBvZiB0aGUgc3ByaXRlLCBzZXR0aW5nIHRoaXMgd2lsbCBhY3R1YWxseSBtb2RpZnkgdGhlIHNjYWxlIHRvIGFjaGlldmUgdGhlIHZhbHVlIHNldFxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLlNwcml0ZSNcbiAgICAgKi9cbiAgICB3aWR0aDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiBNYXRoLmFicyh0aGlzLnNjYWxlLngpICogdGhpcy50ZXh0dXJlLl9mcmFtZS53aWR0aDtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHZhciBzaWduID0gdXRpbHMuc2lnbih0aGlzLnNjYWxlLngpIHx8IDE7XG4gICAgICAgICAgICB0aGlzLnNjYWxlLnggPSBzaWduICogdmFsdWUgLyB0aGlzLnRleHR1cmUuX2ZyYW1lLndpZHRoO1xuICAgICAgICAgICAgdGhpcy5fd2lkdGggPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBUaGUgaGVpZ2h0IG9mIHRoZSBzcHJpdGUsIHNldHRpbmcgdGhpcyB3aWxsIGFjdHVhbGx5IG1vZGlmeSB0aGUgc2NhbGUgdG8gYWNoaWV2ZSB0aGUgdmFsdWUgc2V0XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuU3ByaXRlI1xuICAgICAqL1xuICAgIGhlaWdodDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiAgTWF0aC5hYnModGhpcy5zY2FsZS55KSAqIHRoaXMudGV4dHVyZS5fZnJhbWUuaGVpZ2h0O1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdmFyIHNpZ24gPSB1dGlscy5zaWduKHRoaXMuc2NhbGUueSkgfHwgMTtcbiAgICAgICAgICAgIHRoaXMuc2NhbGUueSA9IHNpZ24gKiB2YWx1ZSAvIHRoaXMudGV4dHVyZS5fZnJhbWUuaGVpZ2h0O1xuICAgICAgICAgICAgdGhpcy5faGVpZ2h0ID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVGhlIHRleHR1cmUgdGhhdCB0aGUgc3ByaXRlIGlzIHVzaW5nXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlRleHR1cmV9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuU3ByaXRlI1xuICAgICAqL1xuICAgIHRleHR1cmU6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gIHRoaXMuX3RleHR1cmU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICBpZiAodGhpcy5fdGV4dHVyZSA9PT0gdmFsdWUpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLl90ZXh0dXJlID0gdmFsdWU7XG4gICAgICAgICAgICB0aGlzLmNhY2hlZFRpbnQgPSAweEZGRkZGRjtcblxuICAgICAgICAgICAgdGhpcy50ZXh0dXJlRGlydHkgPSB0cnVlO1xuXG4gICAgICAgICAgICBpZiAodmFsdWUpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgLy8gd2FpdCBmb3IgdGhlIHRleHR1cmUgdG8gbG9hZFxuICAgICAgICAgICAgICAgIGlmICh2YWx1ZS5iYXNlVGV4dHVyZS5oYXNMb2FkZWQpXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9vblRleHR1cmVVcGRhdGUoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgdmFsdWUub25jZSgndXBkYXRlJywgdGhpcy5fb25UZXh0dXJlVXBkYXRlLCB0aGlzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG59KTtcblxuLyoqXG4gKiBXaGVuIHRoZSB0ZXh0dXJlIGlzIHVwZGF0ZWQsIHRoaXMgZXZlbnQgd2lsbCBmaXJlIHRvIHVwZGF0ZSB0aGUgc2NhbGUgYW5kIGZyYW1lXG4gKlxuICogQHByaXZhdGVcbiAqL1xuU3ByaXRlLnByb3RvdHlwZS5fb25UZXh0dXJlVXBkYXRlID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLnRleHR1cmVEaXJ0eSA9IHRydWU7XG5cbiAgICAvLyBzbyBpZiBfd2lkdGggaXMgMCB0aGVuIHdpZHRoIHdhcyBub3Qgc2V0Li5cbiAgICBpZiAodGhpcy5fd2lkdGgpXG4gICAge1xuICAgICAgICB0aGlzLnNjYWxlLnggPSB1dGlscy5zaWduKHRoaXMuc2NhbGUueCkgKiB0aGlzLl93aWR0aCAvIHRoaXMudGV4dHVyZS5mcmFtZS53aWR0aDtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5faGVpZ2h0KVxuICAgIHtcbiAgICAgICAgdGhpcy5zY2FsZS55ID0gdXRpbHMuc2lnbih0aGlzLnNjYWxlLnkpICogdGhpcy5faGVpZ2h0IC8gdGhpcy50ZXh0dXJlLmZyYW1lLmhlaWdodDtcbiAgICB9XG59O1xuXG5TcHJpdGUucHJvdG90eXBlLmNhY2x1bGF0ZVZlcnRpY2VzID0gZnVuY3Rpb24gKClcbntcblxuICAgIHZhciB0ZXh0dXJlID0gdGhpcy5fdGV4dHVyZSxcbiAgICAgICAgd3QgPSB0aGlzLndvcmxkVHJhbnNmb3JtLFxuICAgICAgICBhID0gd3QuYSwgYiA9IHd0LmIsIGMgPSB3dC5jLCBkID0gd3QuZCwgdHggPSB3dC50eCwgdHkgPSB3dC50eSxcbiAgICAgICAgdmVydGV4RGF0YSA9IHRoaXMudmVydGV4RGF0YSxcbiAgICAgICAgdzAsIHcxLCBoMCwgaDEsXG4gICAgICAgIHRyaW0gPSB0ZXh0dXJlLnRyaW07XG4gICAgXG4gICAgaWYgKHRyaW0pXG4gICAge1xuICAgICAgICAvLyBpZiB0aGUgc3ByaXRlIGlzIHRyaW1tZWQgYW5kIGlzIG5vdCBhIHRpbGluZ3Nwcml0ZSB0aGVuIHdlIG5lZWQgdG8gYWRkIHRoZSBleHRyYSBzcGFjZSBiZWZvcmUgdHJhbnNmb3JtaW5nIHRoZSBzcHJpdGUgY29vcmRzLi5cbiAgICAgICAgdzEgPSB0cmltLnggLSB0aGlzLmFuY2hvci54ICogdHJpbS53aWR0aDtcbiAgICAgICAgdzAgPSB3MSArIHRleHR1cmUuY3JvcC53aWR0aDtcblxuICAgICAgICBoMSA9IHRyaW0ueSAtIHRoaXMuYW5jaG9yLnkgKiB0cmltLmhlaWdodDtcbiAgICAgICAgaDAgPSBoMSArIHRleHR1cmUuY3JvcC5oZWlnaHQ7XG5cbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgdzAgPSAodGV4dHVyZS5fZnJhbWUud2lkdGggKSAqICgxLXRoaXMuYW5jaG9yLngpO1xuICAgICAgICB3MSA9ICh0ZXh0dXJlLl9mcmFtZS53aWR0aCApICogLXRoaXMuYW5jaG9yLng7XG5cbiAgICAgICAgaDAgPSB0ZXh0dXJlLl9mcmFtZS5oZWlnaHQgKiAoMS10aGlzLmFuY2hvci55KTtcbiAgICAgICAgaDEgPSB0ZXh0dXJlLl9mcmFtZS5oZWlnaHQgKiAtdGhpcy5hbmNob3IueTtcbiAgICB9XG5cbiAgICAvLyB4eVxuICAgIHZlcnRleERhdGFbMF0gPSBhICogdzEgKyBjICogaDEgKyB0eDtcbiAgICB2ZXJ0ZXhEYXRhWzFdID0gZCAqIGgxICsgYiAqIHcxICsgdHk7XG5cbiAgICAvLyB4eVxuICAgIHZlcnRleERhdGFbMl0gPSBhICogdzAgKyBjICogaDEgKyB0eDtcbiAgICB2ZXJ0ZXhEYXRhWzNdID0gZCAqIGgxICsgYiAqIHcwICsgdHk7XG5cbiAgICAgLy8geHlcbiAgICB2ZXJ0ZXhEYXRhWzRdID0gYSAqIHcwICsgYyAqIGgwICsgdHg7XG4gICAgdmVydGV4RGF0YVs1XSA9IGQgKiBoMCArIGIgKiB3MCArIHR5O1xuXG4gICAgLy8geHlcbiAgICB2ZXJ0ZXhEYXRhWzZdID0gYSAqIHcxICsgYyAqIGgwICsgdHg7XG4gICAgdmVydGV4RGF0YVs3XSA9IGQgKiBoMCArIGIgKiB3MSArIHR5O1xuXG5cbn1cblxuLyoqXG4qXG4qIFJlbmRlcnMgdGhlIG9iamVjdCB1c2luZyB0aGUgV2ViR0wgcmVuZGVyZXJcbipcbiogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLldlYkdMUmVuZGVyZXJ9XG4qIEBwcml2YXRlXG4qL1xuU3ByaXRlLnByb3RvdHlwZS5fcmVuZGVyV2ViR0wgPSBmdW5jdGlvbiAocmVuZGVyZXIpXG57XG4gICAgaWYodGhpcy50ZXh0dXJlRGlydHkpXG4gICAge1xuICAgICAgICB0aGlzLnRleHR1cmVEaXJ0eSA9IGZhbHNlO1xuXG4gICAgICAgIHRoaXMuX29uVGV4dHVyZVVwZGF0ZSgpO1xuICAgICAgICBcbiAgICAgICAgdGhpcy52ZXJ0ZXhEaXJ0eSA9IHRydWU7XG4gICAgfVxuXG4gICAgaWYodGhpcy52ZXJ0ZXhEaXJ0eSlcbiAgICB7XG4gICAgICAgIHRoaXMudmVydGV4RGlydHkgPSBmYWxzZTtcblxuICAgICAgICAvLyBzZXQgdGhlIHZlcnRleCBkYXRhXG4gICAgICAgIHRoaXMuY2FjbHVsYXRlVmVydGljZXMoKTtcblxuICAgIH1cbiAgICBcbiAgICByZW5kZXJlci5zZXRPYmplY3RSZW5kZXJlcihyZW5kZXJlci5wbHVnaW5zLnNwcml0ZSk7XG4gICAgcmVuZGVyZXIucGx1Z2lucy5zcHJpdGUucmVuZGVyKHRoaXMpO1xufTtcblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBib3VuZHMgb2YgdGhlIFNwcml0ZSBhcyBhIHJlY3RhbmdsZS4gVGhlIGJvdW5kcyBjYWxjdWxhdGlvbiB0YWtlcyB0aGUgd29ybGRUcmFuc2Zvcm0gaW50byBhY2NvdW50LlxuICpcbiAqIEBwYXJhbSBtYXRyaXgge1BJWEkuTWF0cml4fSB0aGUgdHJhbnNmb3JtYXRpb24gbWF0cml4IG9mIHRoZSBzcHJpdGVcbiAqIEByZXR1cm4ge1BJWEkuUmVjdGFuZ2xlfSB0aGUgZnJhbWluZyByZWN0YW5nbGVcbiAqL1xuU3ByaXRlLnByb3RvdHlwZS5nZXRCb3VuZHMgPSBmdW5jdGlvbiAobWF0cml4KVxue1xuICAgIGlmKCF0aGlzLl9jdXJyZW50Qm91bmRzKVxuICAgIHtcbiAgICAgICAgaWYodGhpcy52ZXJ0ZXhEaXJ0eSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy52ZXJ0ZXhEaXJ0eSA9IGZhbHNlO1xuXG4gICAgICAgICAgICAvLyBzZXQgdGhlIHZlcnRleCBkYXRhXG4gICAgICAgICAgICB0aGlzLmNhY2x1bGF0ZVZlcnRpY2VzKCk7XG5cbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBtaW5YLFxuICAgICAgICAgICAgbWF4WCxcbiAgICAgICAgICAgIG1pblksXG4gICAgICAgICAgICBtYXhZLFxuICAgICAgICAgICAgdmVydGV4RGF0YSA9IHRoaXMudmVydGV4RGF0YTtcblxuICAgICAgICB2YXIgeDEgPSB2ZXJ0ZXhEYXRhWzBdXG4gICAgICAgIHZhciB5MSA9IHZlcnRleERhdGFbMV1cblxuICAgICAgICB2YXIgeDIgPSB2ZXJ0ZXhEYXRhWzJdXG4gICAgICAgIHZhciB5MiA9IHZlcnRleERhdGFbM11cblxuICAgICAgICB2YXIgeDMgPSB2ZXJ0ZXhEYXRhWzRdXG4gICAgICAgIHZhciB5MyA9IHZlcnRleERhdGFbNV1cblxuICAgICAgICB2YXIgeDQgPSB2ZXJ0ZXhEYXRhWzZdXG4gICAgICAgIHZhciB5NCA9IHZlcnRleERhdGFbN11cblxuICAgICAgICBtaW5YID0geDE7XG4gICAgICAgIG1pblggPSB4MiA8IG1pblggPyB4MiA6IG1pblg7XG4gICAgICAgIG1pblggPSB4MyA8IG1pblggPyB4MyA6IG1pblg7XG4gICAgICAgIG1pblggPSB4NCA8IG1pblggPyB4NCA6IG1pblg7XG5cbiAgICAgICAgbWluWSA9IHkxO1xuICAgICAgICBtaW5ZID0geTIgPCBtaW5ZID8geTIgOiBtaW5ZO1xuICAgICAgICBtaW5ZID0geTMgPCBtaW5ZID8geTMgOiBtaW5ZO1xuICAgICAgICBtaW5ZID0geTQgPCBtaW5ZID8geTQgOiBtaW5ZO1xuXG4gICAgICAgIG1heFggPSB4MTtcbiAgICAgICAgbWF4WCA9IHgyID4gbWF4WCA/IHgyIDogbWF4WDtcbiAgICAgICAgbWF4WCA9IHgzID4gbWF4WCA/IHgzIDogbWF4WDtcbiAgICAgICAgbWF4WCA9IHg0ID4gbWF4WCA/IHg0IDogbWF4WDtcblxuICAgICAgICBtYXhZID0geTE7XG4gICAgICAgIG1heFkgPSB5MiA+IG1heFkgPyB5MiA6IG1heFk7XG4gICAgICAgIG1heFkgPSB5MyA+IG1heFkgPyB5MyA6IG1heFk7XG4gICAgICAgIG1heFkgPSB5NCA+IG1heFkgPyB5NCA6IG1heFk7XG5cbiAgICAgICAgLy8gY2hlY2sgZm9yIGNoaWxkcmVuXG4gICAgICAgIGlmKHRoaXMuY2hpbGRyZW4ubGVuZ3RoKVxuICAgICAgICB7XG4gICAgICAgICAgICB2YXIgY2hpbGRCb3VuZHMgPSB0aGlzLmNvbnRhaW5lckdldEJvdW5kcygpO1xuXG4gICAgICAgICAgICB3MCA9IGNoaWxkQm91bmRzLng7XG4gICAgICAgICAgICB3MSA9IGNoaWxkQm91bmRzLnggKyBjaGlsZEJvdW5kcy53aWR0aDtcbiAgICAgICAgICAgIGgwID0gY2hpbGRCb3VuZHMueTtcbiAgICAgICAgICAgIGgxID0gY2hpbGRCb3VuZHMueSArIGNoaWxkQm91bmRzLmhlaWdodDtcblxuICAgICAgICAgICAgbWluWCA9IChtaW5YIDwgdzApID8gbWluWCA6IHcwO1xuICAgICAgICAgICAgbWluWSA9IChtaW5ZIDwgaDApID8gbWluWSA6IGgwO1xuXG4gICAgICAgICAgICBtYXhYID0gKG1heFggPiB3MSkgPyBtYXhYIDogdzE7XG4gICAgICAgICAgICBtYXhZID0gKG1heFkgPiBoMSkgPyBtYXhZIDogaDE7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgYm91bmRzID0gdGhpcy5fYm91bmRzO1xuXG4gICAgICAgIGJvdW5kcy54ID0gbWluWDtcbiAgICAgICAgYm91bmRzLndpZHRoID0gbWF4WCAtIG1pblg7XG5cbiAgICAgICAgYm91bmRzLnkgPSBtaW5ZO1xuICAgICAgICBib3VuZHMuaGVpZ2h0ID0gbWF4WSAtIG1pblk7XG5cbiAgICAgICAgLy8gc3RvcmUgYSByZWZlcmVuY2Ugc28gdGhhdCBpZiB0aGlzIGZ1bmN0aW9uIGdldHMgY2FsbGVkIGFnYWluIGluIHRoZSByZW5kZXIgY3ljbGUgd2UgZG8gbm90IGhhdmUgdG8gcmVjYWxjdWxhdGVcbiAgICAgICAgdGhpcy5fY3VycmVudEJvdW5kcyA9IGJvdW5kcztcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5fY3VycmVudEJvdW5kcztcbn07XG5cbi8qKlxuICogR2V0cyB0aGUgbG9jYWwgYm91bmRzIG9mIHRoZSBzcHJpdGUgb2JqZWN0LlxuICpcbiAqL1xuU3ByaXRlLnByb3RvdHlwZS5nZXRMb2NhbEJvdW5kcyA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy5fYm91bmRzLnggPSAtdGhpcy5fdGV4dHVyZS5fZnJhbWUud2lkdGggKiB0aGlzLmFuY2hvci54O1xuICAgIHRoaXMuX2JvdW5kcy55ID0gLXRoaXMuX3RleHR1cmUuX2ZyYW1lLmhlaWdodCAqIHRoaXMuYW5jaG9yLnk7XG4gICAgdGhpcy5fYm91bmRzLndpZHRoID0gdGhpcy5fdGV4dHVyZS5fZnJhbWUud2lkdGg7XG4gICAgdGhpcy5fYm91bmRzLmhlaWdodCA9IHRoaXMuX3RleHR1cmUuX2ZyYW1lLmhlaWdodDtcbiAgICByZXR1cm4gdGhpcy5fYm91bmRzO1xufTtcblxuLyoqXG4qIFRlc3RzIGlmIGEgcG9pbnQgaXMgaW5zaWRlIHRoaXMgc3ByaXRlXG4qXG4qIEBwYXJhbSBwb2ludCB7UElYSS5Qb2ludH0gdGhlIHBvaW50IHRvIHRlc3RcbiogQHJldHVybiB7Ym9vbGVhbn0gdGhlIHJlc3VsdCBvZiB0aGUgdGVzdFxuKi9cblNwcml0ZS5wcm90b3R5cGUuY29udGFpbnNQb2ludCA9IGZ1bmN0aW9uKCBwb2ludCApXG57XG4gICAgdGhpcy53b3JsZFRyYW5zZm9ybS5hcHBseUludmVyc2UocG9pbnQsICB0ZW1wUG9pbnQpO1xuXG4gICAgdmFyIHdpZHRoID0gdGhpcy5fdGV4dHVyZS5fZnJhbWUud2lkdGg7XG4gICAgdmFyIGhlaWdodCA9IHRoaXMuX3RleHR1cmUuX2ZyYW1lLmhlaWdodDtcbiAgICB2YXIgeDEgPSAtd2lkdGggKiB0aGlzLmFuY2hvci54O1xuICAgIHZhciB5MTtcblxuICAgIGlmICggdGVtcFBvaW50LnggPiB4MSAmJiB0ZW1wUG9pbnQueCA8IHgxICsgd2lkdGggKVxuICAgIHtcbiAgICAgICAgeTEgPSAtaGVpZ2h0ICogdGhpcy5hbmNob3IueTtcblxuICAgICAgICBpZiAoIHRlbXBQb2ludC55ID4geTEgJiYgdGVtcFBvaW50LnkgPCB5MSArIGhlaWdodCApXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xufTtcblxuLyoqXG4qIFJlbmRlcnMgdGhlIG9iamVjdCB1c2luZyB0aGUgQ2FudmFzIHJlbmRlcmVyXG4qXG4qIEBwYXJhbSByZW5kZXJlciB7UElYSS5DYW52YXNSZW5kZXJlcn0gVGhlIHJlbmRlcmVyXG4qIEBwcml2YXRlXG4qL1xuU3ByaXRlLnByb3RvdHlwZS5fcmVuZGVyQ2FudmFzID0gZnVuY3Rpb24gKHJlbmRlcmVyKVxue1xuICAgIGlmICh0aGlzLnRleHR1cmUuY3JvcC53aWR0aCA8PSAwIHx8IHRoaXMudGV4dHVyZS5jcm9wLmhlaWdodCA8PSAwKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHZhciBjb21wb3NpdGVPcGVyYXRpb24gPSByZW5kZXJlci5ibGVuZE1vZGVzW3RoaXMuYmxlbmRNb2RlXTtcbiAgICBpZiAoY29tcG9zaXRlT3BlcmF0aW9uICE9PSByZW5kZXJlci5jb250ZXh0Lmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbilcbiAgICB7XG4gICAgICAgIHJlbmRlcmVyLmNvbnRleHQuZ2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uID0gY29tcG9zaXRlT3BlcmF0aW9uO1xuICAgIH1cblxuICAgIC8vICBJZ25vcmUgbnVsbCBzb3VyY2VzXG4gICAgaWYgKHRoaXMudGV4dHVyZS52YWxpZClcbiAgICB7XG4gICAgICAgIHZhciB0ZXh0dXJlID0gdGhpcy5fdGV4dHVyZSxcbiAgICAgICAgICAgIHd0ID0gdGhpcy53b3JsZFRyYW5zZm9ybSxcbiAgICAgICAgICAgIGR4LFxuICAgICAgICAgICAgZHksXG4gICAgICAgICAgICB3aWR0aCxcbiAgICAgICAgICAgIGhlaWdodDtcblxuICAgICAgICByZW5kZXJlci5jb250ZXh0Lmdsb2JhbEFscGhhID0gdGhpcy53b3JsZEFscGhhO1xuXG4gICAgICAgIC8vIElmIHNtb290aGluZ0VuYWJsZWQgaXMgc3VwcG9ydGVkIGFuZCB3ZSBuZWVkIHRvIGNoYW5nZSB0aGUgc21vb3RoaW5nIHByb3BlcnR5IGZvciB0aGlzIHRleHR1cmVcbiAgICAgICAgdmFyIHNtb290aGluZ0VuYWJsZWQgPSB0ZXh0dXJlLmJhc2VUZXh0dXJlLnNjYWxlTW9kZSA9PT0gQ09OU1QuU0NBTEVfTU9ERVMuTElORUFSO1xuICAgICAgICBpZiAocmVuZGVyZXIuc21vb3RoUHJvcGVydHkgJiYgcmVuZGVyZXIuY29udGV4dFtyZW5kZXJlci5zbW9vdGhQcm9wZXJ0eV0gIT09IHNtb290aGluZ0VuYWJsZWQpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJlbmRlcmVyLmNvbnRleHRbcmVuZGVyZXIuc21vb3RoUHJvcGVydHldID0gc21vb3RoaW5nRW5hYmxlZDtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIElmIHRoZSB0ZXh0dXJlIGlzIHRyaW1tZWQgd2Ugb2Zmc2V0IGJ5IHRoZSB0cmltIHgveSwgb3RoZXJ3aXNlIHdlIHVzZSB0aGUgZnJhbWUgZGltZW5zaW9uc1xuXG4gICAgICAgIGlmKHRleHR1cmUucm90YXRlKVxuICAgICAgICB7XG4gICAgICAgICAgICB3aWR0aCA9IHRleHR1cmUuY3JvcC5oZWlnaHQ7XG4gICAgICAgICAgICBoZWlnaHQgPSB0ZXh0dXJlLmNyb3Aud2lkdGg7XG5cbiAgICAgICAgICAgIGR4ID0gKHRleHR1cmUudHJpbSkgPyB0ZXh0dXJlLnRyaW0ueSAtIHRoaXMuYW5jaG9yLnkgKiB0ZXh0dXJlLnRyaW0uaGVpZ2h0IDogdGhpcy5hbmNob3IueSAqIC10ZXh0dXJlLl9mcmFtZS5oZWlnaHQ7XG4gICAgICAgICAgICBkeSA9ICh0ZXh0dXJlLnRyaW0pID8gdGV4dHVyZS50cmltLnggLSB0aGlzLmFuY2hvci54ICogdGV4dHVyZS50cmltLndpZHRoIDogdGhpcy5hbmNob3IueCAqIC10ZXh0dXJlLl9mcmFtZS53aWR0aDtcbiAgICAgICBcbiAgICAgICAgICAgIGR4ICs9IHdpZHRoO1xuXG4gICAgICAgICAgICB3dC50eCA9IGR5ICogd3QuYSArIGR4ICogd3QuYyArIHd0LnR4O1xuICAgICAgICAgICAgd3QudHkgPSBkeSAqIHd0LmIgKyBkeCAqIHd0LmQgKyB3dC50eTtcblxuICAgICAgICAgICAgdmFyIHRlbXAgPSB3dC5hO1xuICAgICAgICAgICAgd3QuYSAgPSAtd3QuYztcbiAgICAgICAgICAgIHd0LmMgID0gIHRlbXA7XG5cbiAgICAgICAgICAgIHRlbXAgPSB3dC5iO1xuICAgICAgICAgICAgd3QuYiAgPSAtd3QuZDtcbiAgICAgICAgICAgIHd0LmQgID0gIHRlbXA7XG5cbiAgICAgICAgICAgIC8vIHRoZSBhbmNob3IgaGFzIGFscmVhZHkgYmVlbiBhcHBsaWVkIGFib3ZlLCBzbyBsZXRzIHNldCBpdCB0byB6ZXJvXG4gICAgICAgICAgICBkeCA9IDA7XG4gICAgICAgICAgICBkeSA9IDA7XG5cbiAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgIHtcbiAgICAgICAgICAgIHdpZHRoID0gdGV4dHVyZS5jcm9wLndpZHRoO1xuICAgICAgICAgICAgaGVpZ2h0ID0gdGV4dHVyZS5jcm9wLmhlaWdodDtcblxuICAgICAgICAgICAgZHggPSAodGV4dHVyZS50cmltKSA/IHRleHR1cmUudHJpbS54IC0gdGhpcy5hbmNob3IueCAqIHRleHR1cmUudHJpbS53aWR0aCA6IHRoaXMuYW5jaG9yLnggKiAtdGV4dHVyZS5fZnJhbWUud2lkdGg7XG4gICAgICAgICAgICBkeSA9ICh0ZXh0dXJlLnRyaW0pID8gdGV4dHVyZS50cmltLnkgLSB0aGlzLmFuY2hvci55ICogdGV4dHVyZS50cmltLmhlaWdodCA6IHRoaXMuYW5jaG9yLnkgKiAtdGV4dHVyZS5fZnJhbWUuaGVpZ2h0O1xuICAgICAgICB9XG5cblxuXG4gICAgICAgIC8vIEFsbG93IGZvciBwaXhlbCByb3VuZGluZ1xuICAgICAgICBpZiAocmVuZGVyZXIucm91bmRQaXhlbHMpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJlbmRlcmVyLmNvbnRleHQuc2V0VHJhbnNmb3JtKFxuICAgICAgICAgICAgICAgIHd0LmEsXG4gICAgICAgICAgICAgICAgd3QuYixcbiAgICAgICAgICAgICAgICB3dC5jLFxuICAgICAgICAgICAgICAgIHd0LmQsXG4gICAgICAgICAgICAgICAgKHd0LnR4ICogcmVuZGVyZXIucmVzb2x1dGlvbikgfCAwLFxuICAgICAgICAgICAgICAgICh3dC50eSAqIHJlbmRlcmVyLnJlc29sdXRpb24pIHwgMFxuICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgZHggPSBkeCB8IDA7XG4gICAgICAgICAgICBkeSA9IGR5IHwgMDtcbiAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgIHtcblxuICAgICAgICAgICAgcmVuZGVyZXIuY29udGV4dC5zZXRUcmFuc2Zvcm0oXG4gICAgICAgICAgICAgICAgd3QuYSxcbiAgICAgICAgICAgICAgICB3dC5iLFxuICAgICAgICAgICAgICAgIHd0LmMsXG4gICAgICAgICAgICAgICAgd3QuZCxcbiAgICAgICAgICAgICAgICB3dC50eCAqIHJlbmRlcmVyLnJlc29sdXRpb24sXG4gICAgICAgICAgICAgICAgd3QudHkgKiByZW5kZXJlci5yZXNvbHV0aW9uXG4gICAgICAgICAgICApO1xuXG5cbiAgICAgICAgfVxuXG4gICAgICAgIHZhciByZXNvbHV0aW9uID0gdGV4dHVyZS5iYXNlVGV4dHVyZS5yZXNvbHV0aW9uO1xuXG4gICAgICAgIGlmICh0aGlzLnRpbnQgIT09IDB4RkZGRkZGKVxuICAgICAgICB7XG4gICAgICAgICAgICBpZiAodGhpcy5jYWNoZWRUaW50ICE9PSB0aGlzLnRpbnQpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdGhpcy5jYWNoZWRUaW50ID0gdGhpcy50aW50O1xuXG4gICAgICAgICAgICAgICAgLy8gVE9ETyBjbGVhbiB1cCBjYWNoaW5nIC0gaG93IHRvIGNsZWFuIHVwIHRoZSBjYWNoZXM/XG4gICAgICAgICAgICAgICAgdGhpcy50aW50ZWRUZXh0dXJlID0gQ2FudmFzVGludGVyLmdldFRpbnRlZFRleHR1cmUodGhpcywgdGhpcy50aW50KTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmVuZGVyZXIuY29udGV4dC5kcmF3SW1hZ2UoXG4gICAgICAgICAgICAgICAgdGhpcy50aW50ZWRUZXh0dXJlLFxuICAgICAgICAgICAgICAgIDAsXG4gICAgICAgICAgICAgICAgMCxcbiAgICAgICAgICAgICAgICB3aWR0aCAqIHJlc29sdXRpb24sXG4gICAgICAgICAgICAgICAgaGVpZ2h0ICogcmVzb2x1dGlvbixcbiAgICAgICAgICAgICAgICBkeCAqIHJlbmRlcmVyLnJlc29sdXRpb24sXG4gICAgICAgICAgICAgICAgZHkgKiByZW5kZXJlci5yZXNvbHV0aW9uLFxuICAgICAgICAgICAgICAgIHdpZHRoICogcmVuZGVyZXIucmVzb2x1dGlvbixcbiAgICAgICAgICAgICAgICBoZWlnaHQgKiByZW5kZXJlci5yZXNvbHV0aW9uXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIGVsc2VcbiAgICAgICAge1xuICAgICAgICAgICAgcmVuZGVyZXIuY29udGV4dC5kcmF3SW1hZ2UoXG4gICAgICAgICAgICAgICAgdGV4dHVyZS5iYXNlVGV4dHVyZS5zb3VyY2UsXG4gICAgICAgICAgICAgICAgdGV4dHVyZS5jcm9wLnggKiByZXNvbHV0aW9uLFxuICAgICAgICAgICAgICAgIHRleHR1cmUuY3JvcC55ICogcmVzb2x1dGlvbixcbiAgICAgICAgICAgICAgICB3aWR0aCAqIHJlc29sdXRpb24sXG4gICAgICAgICAgICAgICAgaGVpZ2h0ICogcmVzb2x1dGlvbixcbiAgICAgICAgICAgICAgICBkeCAgKiByZW5kZXJlci5yZXNvbHV0aW9uLFxuICAgICAgICAgICAgICAgIGR5ICAqIHJlbmRlcmVyLnJlc29sdXRpb24sXG4gICAgICAgICAgICAgICAgd2lkdGggKiByZW5kZXJlci5yZXNvbHV0aW9uLFxuICAgICAgICAgICAgICAgIGhlaWdodCAqIHJlbmRlcmVyLnJlc29sdXRpb25cbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICB9XG59O1xuXG4vKipcbiAqIERlc3Ryb3lzIHRoaXMgc3ByaXRlIGFuZCBvcHRpb25hbGx5IGl0cyB0ZXh0dXJlXG4gKlxuICogQHBhcmFtIFtkZXN0cm95VGV4dHVyZT1mYWxzZV0ge2Jvb2xlYW59IFNob3VsZCBpdCBkZXN0cm95IHRoZSBjdXJyZW50IHRleHR1cmUgb2YgdGhlIHNwcml0ZSBhcyB3ZWxsXG4gKiBAcGFyYW0gW2Rlc3Ryb3lCYXNlVGV4dHVyZT1mYWxzZV0ge2Jvb2xlYW59IFNob3VsZCBpdCBkZXN0cm95IHRoZSBiYXNlIHRleHR1cmUgb2YgdGhlIHNwcml0ZSBhcyB3ZWxsXG4gKi9cblNwcml0ZS5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uIChkZXN0cm95VGV4dHVyZSwgZGVzdHJveUJhc2VUZXh0dXJlKVxue1xuICAgIENvbnRhaW5lci5wcm90b3R5cGUuZGVzdHJveS5jYWxsKHRoaXMpO1xuXG4gICAgdGhpcy5hbmNob3IgPSBudWxsO1xuXG4gICAgaWYgKGRlc3Ryb3lUZXh0dXJlKVxuICAgIHtcbiAgICAgICAgdGhpcy5fdGV4dHVyZS5kZXN0cm95KGRlc3Ryb3lCYXNlVGV4dHVyZSk7XG4gICAgfVxuXG4gICAgdGhpcy5fdGV4dHVyZSA9IG51bGw7XG4gICAgdGhpcy5zaGFkZXIgPSBudWxsO1xufTtcblxuLy8gc29tZSBoZWxwZXIgZnVuY3Rpb25zLi5cblxuLyoqXG4gKiBIZWxwZXIgZnVuY3Rpb24gdGhhdCBjcmVhdGVzIGEgc3ByaXRlIHRoYXQgd2lsbCBjb250YWluIGEgdGV4dHVyZSBmcm9tIHRoZSBUZXh0dXJlQ2FjaGUgYmFzZWQgb24gdGhlIGZyYW1lSWRcbiAqIFRoZSBmcmFtZSBpZHMgYXJlIGNyZWF0ZWQgd2hlbiBhIFRleHR1cmUgcGFja2VyIGZpbGUgaGFzIGJlZW4gbG9hZGVkXG4gKlxuICogQHN0YXRpY1xuICogQHBhcmFtIGZyYW1lSWQge3N0cmluZ30gVGhlIGZyYW1lIElkIG9mIHRoZSB0ZXh0dXJlIGluIHRoZSBjYWNoZVxuICogQHBhcmFtIFtjcm9zc29yaWdpbj0oYXV0byldIHtib29sZWFufSBpZiB5b3Ugd2FudCB0byBzcGVjaWZ5IHRoZSBjcm9zcy1vcmlnaW4gcGFyYW1ldGVyXG4gKiBAcGFyYW0gW3NjYWxlTW9kZT1QSVhJLlNDQUxFX01PREVTLkRFRkFVTFRdIHtudW1iZXJ9IGlmIHlvdSB3YW50IHRvIHNwZWNpZnkgdGhlIHNjYWxlIG1vZGUsIHNlZSB7QGxpbmsgUElYSS5TQ0FMRV9NT0RFU30gZm9yIHBvc3NpYmxlIHZhbHVlc1xuICogQHJldHVybiB7UElYSS5TcHJpdGV9IEEgbmV3IFNwcml0ZSB1c2luZyBhIHRleHR1cmUgZnJvbSB0aGUgdGV4dHVyZSBjYWNoZSBtYXRjaGluZyB0aGUgZnJhbWVJZFxuICovXG5TcHJpdGUuZnJvbUZyYW1lID0gZnVuY3Rpb24gKGZyYW1lSWQpXG57XG4gICAgdmFyIHRleHR1cmUgPSB1dGlscy5UZXh0dXJlQ2FjaGVbZnJhbWVJZF07XG5cbiAgICBpZiAoIXRleHR1cmUpXG4gICAge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RoZSBmcmFtZUlkIFwiJyArIGZyYW1lSWQgKyAnXCIgZG9lcyBub3QgZXhpc3QgaW4gdGhlIHRleHR1cmUgY2FjaGUnKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IFNwcml0ZSh0ZXh0dXJlKTtcbn07XG5cbi8qKlxuICogSGVscGVyIGZ1bmN0aW9uIHRoYXQgY3JlYXRlcyBhIHNwcml0ZSB0aGF0IHdpbGwgY29udGFpbiBhIHRleHR1cmUgYmFzZWQgb24gYW4gaW1hZ2UgdXJsXG4gKiBJZiB0aGUgaW1hZ2UgaXMgbm90IGluIHRoZSB0ZXh0dXJlIGNhY2hlIGl0IHdpbGwgYmUgbG9hZGVkXG4gKlxuICogQHN0YXRpY1xuICogQHBhcmFtIGltYWdlSWQge3N0cmluZ30gVGhlIGltYWdlIHVybCBvZiB0aGUgdGV4dHVyZVxuICogQHJldHVybiB7UElYSS5TcHJpdGV9IEEgbmV3IFNwcml0ZSB1c2luZyBhIHRleHR1cmUgZnJvbSB0aGUgdGV4dHVyZSBjYWNoZSBtYXRjaGluZyB0aGUgaW1hZ2UgaWRcbiAqL1xuU3ByaXRlLmZyb21JbWFnZSA9IGZ1bmN0aW9uIChpbWFnZUlkLCBjcm9zc29yaWdpbiwgc2NhbGVNb2RlKVxue1xuICAgIHJldHVybiBuZXcgU3ByaXRlKFRleHR1cmUuZnJvbUltYWdlKGltYWdlSWQsIGNyb3Nzb3JpZ2luLCBzY2FsZU1vZGUpKTtcbn07XG4iLCJ2YXIgT2JqZWN0UmVuZGVyZXIgPSByZXF1aXJlKCcuLi8uLi9yZW5kZXJlcnMvd2ViZ2wvdXRpbHMvT2JqZWN0UmVuZGVyZXInKSxcbiAgICBXZWJHTFJlbmRlcmVyID0gcmVxdWlyZSgnLi4vLi4vcmVuZGVyZXJzL3dlYmdsL1dlYkdMUmVuZGVyZXInKSxcbiAgICBUZXh0dXJlU2hhZGVyID0gcmVxdWlyZSgnLi4vLi4vcmVuZGVyZXJzL3dlYmdsL3NoYWRlcnMvX1RleHR1cmVTaGFkZXInKSxcbiAgICBjcmVhdGVJbmRpY2VzRm9yUXVhZHMgPSByZXF1aXJlKCcuLi8uLi91dGlscy9jcmVhdGVJbmRpY2VzRm9yUXVhZHMnKSxcbiAgICBnZW5lcmF0ZU11bHRpVGV4dHVyZVNoYWRlciA9IHJlcXVpcmUoJy4vZ2VuZXJhdGVNdWx0aVRleHR1cmVTaGFkZXInKSxcbiAgICBDT05TVCA9IHJlcXVpcmUoJy4uLy4uL2NvbnN0JyksXG4gICAgZ2xDb3JlID0gcmVxdWlyZSgncGl4aS1nbC1jb3JlJyk7XG5cbi8qKlxuICogQGF1dGhvciBNYXQgR3JvdmVzXG4gKlxuICogQmlnIHRoYW5rcyB0byB0aGUgdmVyeSBjbGV2ZXIgTWF0dCBEZXNMYXVyaWVycyA8bWF0dGRlc2w+IGh0dHBzOi8vZ2l0aHViLmNvbS9tYXR0ZGVzbC9cbiAqIGZvciBjcmVhdGluZyB0aGUgb3JpZ2luYWwgcGl4aSB2ZXJzaW9uIVxuICogQWxzbyBhIHRoYW5rcyB0byBodHRwczovL2dpdGh1Yi5jb20vYmNoZXZhbGllciBmb3IgdHdlYWtpbmcgdGhlIHRpbnQgYW5kIGFscGhhIHNvIHRoYXQgdGhleSBub3cgc2hhcmUgNCBieXRlcyBvbiB0aGUgdmVydGV4IGJ1ZmZlclxuICpcbiAqIEhlYXZpbHkgaW5zcGlyZWQgYnkgTGliR0RYJ3MgU3ByaXRlUmVuZGVyZXI6XG4gKiBodHRwczovL2dpdGh1Yi5jb20vbGliZ2R4L2xpYmdkeC9ibG9iL21hc3Rlci9nZHgvc3JjL2NvbS9iYWRsb2dpYy9nZHgvZ3JhcGhpY3MvZzJkL1Nwcml0ZVJlbmRlcmVyLmphdmFcbiAqL1xuXG4vKipcbiAqIFJlbmRlcmVyIGRlZGljYXRlZCB0byBkcmF3aW5nIGFuZCBiYXRjaGluZyBzcHJpdGVzLlxuICpcbiAqIEBjbGFzc1xuICogQHByaXZhdGVcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAZXh0ZW5kcyBQSVhJLk9iamVjdFJlbmRlcmVyXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcn0gVGhlIHJlbmRlcmVyIHRoaXMgc3ByaXRlIGJhdGNoIHdvcmtzIGZvci5cbiAqL1xuZnVuY3Rpb24gU3ByaXRlUmVuZGVyZXIocmVuZGVyZXIpXG57XG4gICAgT2JqZWN0UmVuZGVyZXIuY2FsbCh0aGlzLCByZW5kZXJlcik7XG5cbiAgICAvKipcbiAgICAgKiBOdW1iZXIgb2YgdmFsdWVzIHNlbnQgaW4gdGhlIHZlcnRleCBidWZmZXIuXG4gICAgICogcG9zaXRpb25YLCBwb3NpdGlvblksIGNvbG9yUiwgY29sb3JHLCBjb2xvckIgPSA1XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy52ZXJ0U2l6ZSA9IDU7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgc2l6ZSBvZiB0aGUgdmVydGV4IGluZm9ybWF0aW9uIGluIGJ5dGVzLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMudmVydEJ5dGVTaXplID0gdGhpcy52ZXJ0U2l6ZSAqIDQ7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgbnVtYmVyIG9mIGltYWdlcyBpbiB0aGUgU3ByaXRlQmF0Y2ggYmVmb3JlIGl0IGZsdXNoZXMuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy5zaXplID0gQ09OU1QuU1BSSVRFX0JBVENIX1NJWkU7IC8vIDIwMDAgaXMgYSBuaWNlIGJhbGFuY2UgYmV0d2VlbiBtb2JpbGUgLyBkZXNrdG9wXG5cbiAgICAvLyB0aGUgdG90YWwgbnVtYmVyIG9mIGJ5dGVzIGluIG91ciBiYXRjaFxuICAgIHZhciBudW1WZXJ0cyA9ICh0aGlzLnNpemUgKiA0KSAqIHRoaXMudmVydEJ5dGVTaXplO1xuXG4gICAgLy8gdGhlIHRvdGFsIG51bWJlciBvZiBpbmRpY2VzIGluIG91ciBiYXRjaCwgdGhlcmUgYXJlIDYgcG9pbnRzIHBlciBxdWFkLlxuICAgIHZhciBudW1JbmRpY2VzID0gdGhpcy5zaXplICogNjtcblxuICAgIC8qKlxuICAgICAqIEhvbGRzIHRoZSB2ZXJ0ZXggZGF0YSB0aGF0IHdpbGwgYmUgc2VudCB0byB0aGUgdmVydGV4IHNoYWRlci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge0FycmF5QnVmZmVyfVxuICAgICAqL1xuICAgIHRoaXMudmVydGljZXMgPSBuZXcgQXJyYXlCdWZmZXIobnVtVmVydHMpO1xuXG4gICAgLyoqXG4gICAgICogVmlldyBvbiB0aGUgdmVydGljZXMgYXMgYSBGbG9hdDMyQXJyYXkgZm9yIHBvc2l0aW9uc1xuICAgICAqXG4gICAgICogQG1lbWJlciB7RmxvYXQzMkFycmF5fVxuICAgICAqL1xuICAgIHRoaXMucG9zaXRpb25zID0gbmV3IEZsb2F0MzJBcnJheSh0aGlzLnZlcnRpY2VzKTtcbiAgICBcbiAgICAvKipcbiAgICAgKiBWaWV3IG9uIHRoZSB2ZXJ0aWNlcyBhcyBhIFVpbnQzMkFycmF5IGZvciB1dnNcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge0Zsb2F0MzJBcnJheX1cbiAgICAgKi9cbiAgICB0aGlzLnV2cyA9IG5ldyBVaW50MzJBcnJheSh0aGlzLnZlcnRpY2VzKTtcblxuICAgIC8qKlxuICAgICAqIFZpZXcgb24gdGhlIHZlcnRpY2VzIGFzIGEgVWludDMyQXJyYXkgZm9yIGNvbG9yc1xuICAgICAqXG4gICAgICogQG1lbWJlciB7VWludDMyQXJyYXl9XG4gICAgICovXG4gICAgdGhpcy5jb2xvcnMgPSBuZXcgVWludDMyQXJyYXkodGhpcy52ZXJ0aWNlcyk7XG5cbiAgICAvKipcbiAgICAgKiBIb2xkcyB0aGUgaW5kaWNlcyBvZiB0aGUgZ2VvbWV0cnkgKHF1YWRzKSB0byBkcmF3XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtVaW50MTZBcnJheX1cbiAgICAgKi9cbiAgICB0aGlzLmluZGljZXMgPSBjcmVhdGVJbmRpY2VzRm9yUXVhZHModGhpcy5zaXplKVxuXG4gICAgLyoqXG4gICAgICogVGhlIGRlZmF1bHQgc2hhZGVyIHRoYXQgaXMgdXNlZCBpZiBhIHNwcml0ZSBkb2Vzbid0IGhhdmUgYSBtb3JlIHNwZWNpZmljIG9uZS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuU2hhZGVyfVxuICAgICAqL1xuICAgIHRoaXMuc2hhZGVyID0gbnVsbDtcblxuICAgIHRoaXMudGV4dHVyZUNvdW50ID0gMDtcbiAgICB0aGlzLmN1cnJlbnRJbmRleCA9IDA7XG4gIFxuICAgIHRoaXMuZ3JvdXBDb3VudCA9IDA7XG4gICAgdGhpcy5ncm91cHMgPSBbXTtcbiAgICBcbiAgICAvL1RPRE8gLSAzMDAgaXMgYSBiaXQgbWFnaWMsIGZpZ3VyZSBvdXQgYSBuaWNlciBhbW91bnQhXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLnNpemU7IGkrKykgXG4gICAge1xuICAgICAgICB0aGlzLmdyb3Vwc1tpXSA9IHt0ZXh0dXJlczpbXSwgdGV4dHVyZUNvdW50OjAsIGlkczpbXSwgc2l6ZTowLCBzdGFydDowLCBibGVuZDowfTsgXG4gICAgfTtcbiAgICBcbiAgICB0aGlzLmN1cnJlbnRHcm91cCA9IHRoaXMuZ3JvdXBzW3RoaXMuZ3JvdXBDb3VudCsrXTtcblxuICAgIHRoaXMuY3VycmVudFRleHR1cmUgPSBudWxsOyAgICBcbn1cblxuXG5TcHJpdGVSZW5kZXJlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKE9iamVjdFJlbmRlcmVyLnByb3RvdHlwZSk7XG5TcHJpdGVSZW5kZXJlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBTcHJpdGVSZW5kZXJlcjtcbm1vZHVsZS5leHBvcnRzID0gU3ByaXRlUmVuZGVyZXI7XG5cbldlYkdMUmVuZGVyZXIucmVnaXN0ZXJQbHVnaW4oJ3Nwcml0ZScsIFNwcml0ZVJlbmRlcmVyKTtcblxuLyoqXG4gKiBTZXRzIHVwIHRoZSByZW5kZXJlciBjb250ZXh0IGFuZCBuZWNlc3NhcnkgYnVmZmVycy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIGdsIHtXZWJHTFJlbmRlcmluZ0NvbnRleHR9IHRoZSBjdXJyZW50IFdlYkdMIGRyYXdpbmcgY29udGV4dFxuICovXG5TcHJpdGVSZW5kZXJlci5wcm90b3R5cGUub25Db250ZXh0Q2hhbmdlID0gZnVuY3Rpb24gKClcbntcbiAgICB2YXIgZ2wgPSB0aGlzLnJlbmRlcmVyLmdsO1xuXG4gICAgdGhpcy5NQVhfVEVYVFVFUyA9IGdsLmdldFBhcmFtZXRlcihnbC5NQVhfVEVYVFVSRV9JTUFHRV9VTklUUyk7XG5cbiAgICB0aGlzLl9zaGFkZXIgPSBnZW5lcmF0ZU11bHRpVGV4dHVyZVNoYWRlcihnbCwgdGhpcy5NQVhfVEVYVFVFUykvL25ldyBUZXh0dXJlU2hhZGVyKGdsKTtcblxuICAgIC8vIHNldHVwIGRlZmF1bHQgc2hhZGVyXG4gICAgdGhpcy5zaGFkZXIgPSB0aGlzLnJlbmRlcmVyLnNoYWRlck1hbmFnZXIuZGVmYXVsdFNoYWRlcjtcblxuICAgIC8vIGNyZWF0ZSBhIGNvdXBsZSBvZiBidWZmZXJzXG4gICAgdGhpcy52ZXJ0ZXhCdWZmZXIgPSBnbENvcmUuR0xCdWZmZXIuY3JlYXRlVmVydGV4QnVmZmVyKGdsLCBudWxsLCBnbC5EWU5BTUlDX0RSQVcpO1xuICAgIHRoaXMuaW5kZXhCdWZmZXIgPSBnbENvcmUuR0xCdWZmZXIuY3JlYXRlSW5kZXhCdWZmZXIoZ2wsIHRoaXMuaW5kaWNlcywgZ2wuU1RBVElDX0RSQVcpO1xuXG4gICAgLy8gYnVpbGQgdGhlIHZhbyBvYmplY3QgdGhhdCB3aWxsIHJlbmRlci4uXG4gICAgdGhpcy52YW8gPSBuZXcgZ2xDb3JlLlZlcnRleEFycmF5T2JqZWN0KGdsKTtcblxuICAgIHRoaXMudmFvLmFkZEluZGV4KHRoaXMuaW5kZXhCdWZmZXIpO1xuICAgIHRoaXMudmFvLmFkZEF0dHJpYnV0ZSh0aGlzLnZlcnRleEJ1ZmZlciwgdGhpcy5fc2hhZGVyLmF0dHJpYnV0ZXMuYVZlcnRleFBvc2l0aW9uLCBnbC5GTE9BVCwgZmFsc2UsIHRoaXMudmVydEJ5dGVTaXplLCAwKTtcbiAgICB0aGlzLnZhby5hZGRBdHRyaWJ1dGUodGhpcy52ZXJ0ZXhCdWZmZXIsIHRoaXMuX3NoYWRlci5hdHRyaWJ1dGVzLmFUZXh0dXJlQ29vcmQsIGdsLlVOU0lHTkVEX1NIT1JULCB0cnVlLCB0aGlzLnZlcnRCeXRlU2l6ZSwgMiAqIDQpO1xuICAgIHRoaXMudmFvLmFkZEF0dHJpYnV0ZSh0aGlzLnZlcnRleEJ1ZmZlciwgdGhpcy5fc2hhZGVyLmF0dHJpYnV0ZXMuYUNvbG9yLCBnbC5VTlNJR05FRF9CWVRFLCB0cnVlLCB0aGlzLnZlcnRCeXRlU2l6ZSwgMyAqIDQpO1xuICAgIHRoaXMudmFvLmFkZEF0dHJpYnV0ZSh0aGlzLnZlcnRleEJ1ZmZlciwgdGhpcy5fc2hhZGVyLmF0dHJpYnV0ZXMuYVRleHR1cmVJZCwgZ2wuRkxPQVQsIGZhbHNlLCB0aGlzLnZlcnRCeXRlU2l6ZSwgNCAqIDQpO1xuXG4gICAgdGhpcy5jdXJyZW50QmxlbmRNb2RlID0gOTk5OTk7XG59O1xuXG4vKipcbiAqIFJlbmRlcnMgdGhlIHNwcml0ZSBvYmplY3QuXG4gKlxuICogQHBhcmFtIHNwcml0ZSB7UElYSS5TcHJpdGV9IHRoZSBzcHJpdGUgdG8gcmVuZGVyIHdoZW4gdXNpbmcgdGhpcyBzcHJpdGViYXRjaFxuICovXG5TcHJpdGVSZW5kZXJlci5wcm90b3R5cGUucmVuZGVyID0gZnVuY3Rpb24gKHNwcml0ZSlcbntcbiAgICAvL1RPRE8gc2V0IGJsZW5kIG1vZGVzLi5cbiAgICAvLyBjaGVjayB0ZXh0dXJlLi5cbiAgICBpZiAodGhpcy5jdXJyZW50SW5kZXggPj0gdGhpcy5zaXplKVxuICAgIHtcbiAgICAgICAgdGhpcy5mbHVzaCgpO1xuICAgIH1cblxuICBcbiAgICAvLyBnZXQgdGhlIHV2cyBmb3IgdGhlIHRleHR1cmVcbiAgIFxuXG4gICAgLy8gaWYgdGhlIHV2cyBoYXZlIG5vdCB1cGRhdGVkIHRoZW4gbm8gcG9pbnQgcmVuZGVyaW5nIGp1c3QgeWV0IVxuICAgIGlmICghc3ByaXRlLnRleHR1cmUuX3V2cylcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAgLy8gcHVzaCBhIHRleHR1cmUuXG4gICAgLy8gaW5jcmVtZW50IHRoZSBiYXRjaHNpemVcbiAgICB2YXIgbmV4dFRleHR1cmUgPSAgc3ByaXRlLnRleHR1cmUuYmFzZVRleHR1cmU7XG4gICAgdmFyIGN1cnJlbnRHcm91cCA9IHRoaXMuY3VycmVudEdyb3VwO1xuICAgIHZhciBpO1xuXG4gICAgaWYodGhpcy5jdXJyZW50VGV4dHVyZSAhPT0gbmV4dFRleHR1cmUpXG4gICAge1xuICAgICAgICB0aGlzLmN1cnJlbnRUZXh0dXJlID0gbmV4dFRleHR1cmU7XG4gICAgICAgIFxuICAgICAgICBpZighbmV4dFRleHR1cmUuX2VuYWJsZWQpXG4gICAgICAgIHtcbiAgICAgICAgICAgIG5leHRUZXh0dXJlLl9lbmFibGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIG5leHRUZXh0dXJlLl9pZCA9IHRoaXMudGV4dHVyZUNvdW50O1xuICAgICAgICAgICAgXG4gICAgICAgICAgICBpZih0aGlzLnRleHR1cmVDb3VudCA9PT0gdGhpcy5NQVhfVEVYVFVFUylcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBmb3IgKCBpID0gMDsgaSA8IGN1cnJlbnRHcm91cC50ZXh0dXJlQ291bnQ7IGkrKykgXG4gICAgICAgICAgICAgICAgeyAgICAgXG4gICAgICAgICAgICAgICAgICAgIGN1cnJlbnRHcm91cC50ZXh0dXJlc1tpXS5fZW5hYmxlZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICB0aGlzLnRleHR1cmVDb3VudCA9IDA7XG5cbiAgICAgICAgICAgICAgICBjdXJyZW50R3JvdXAuc2l6ZSA9IHRoaXMuY3VycmVudEluZGV4IC0gY3VycmVudEdyb3VwLnN0YXJ0O1xuICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgY3VycmVudEdyb3VwID0gdGhpcy5jdXJyZW50R3JvdXAgPSB0aGlzLmdyb3Vwc1t0aGlzLmdyb3VwQ291bnQrK107XG4gICAgICAgICAgICAgICAgY3VycmVudEdyb3VwLnRleHR1cmVDb3VudCA9IDA7XG4gICAgICAgICAgICAgICAgY3VycmVudEdyb3VwLnN0YXJ0ID0gdGhpcy5jdXJyZW50SW5kZXg7XG4gICAgICAgICAgICAgICAgXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGN1cnJlbnRHcm91cC50ZXh0dXJlc1tjdXJyZW50R3JvdXAudGV4dHVyZUNvdW50KytdID0gbmV4dFRleHR1cmU7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnRleHR1cmVDb3VudCsrO1xuICAgIH1cblxuICAgIC8vIFRPRE8gdHJpbT8/XG4gICAgdmFyIGluZGV4ID0gdGhpcy5jdXJyZW50SW5kZXggKiB0aGlzLnZlcnRCeXRlU2l6ZTtcblxuICAgIHRoaXMuY3VycmVudEluZGV4Kys7XG5cbiAgICAvLyB1cGxvYWQgdGhlIHNwcml0ZSBlbGVtZXRucy4uLlxuICAgIC8vIHRoZXkgaGF2ZSBhbGwgcmVhZHkgYmVlbiBjYWxjdWxhdGVkIHNvIHdlIGp1c3QgbmVlZCB0byBwdXNoIHRoZW0gaW50byB0aGUgYnVmZmVyLlxuICAgIHZhciBjb2xvcnMgPSB0aGlzLmNvbG9ycztcbiAgICB2YXIgcG9zaXRpb25zID0gdGhpcy5wb3NpdGlvbnM7XG4gICAgdmFyIHZlcnRleERhdGEgPSBzcHJpdGUudmVydGV4RGF0YVxuICAgIHZhciB0aW50ID0gKHNwcml0ZS50aW50ID4+IDE2KSArIChzcHJpdGUudGludCAmIDB4ZmYwMCkgKyAoKHNwcml0ZS50aW50ICYgMHhmZikgPDwgMTYpICsgKHNwcml0ZS53b3JsZEFscGhhICogMjU1IDw8IDI0KTtcbiAgICB2YXIgdXZzID0gc3ByaXRlLnRleHR1cmUuX3V2cy51dnNfdWludDMyO1xuICAgIC8veHlcbiAgICBwb3NpdGlvbnNbaW5kZXgrK10gPSB2ZXJ0ZXhEYXRhWzBdO1xuICAgIHBvc2l0aW9uc1tpbmRleCsrXSA9IHZlcnRleERhdGFbMV07XG4gICAgdGhpcy51dnNbaW5kZXgrK10gPSB1dnNbMF07XG4gICAgY29sb3JzW2luZGV4KytdID0gdGludDtcbiAgICBwb3NpdGlvbnNbaW5kZXgrK10gPSBuZXh0VGV4dHVyZS5faWQ7IFxuICAgIFxuICAgIC8vIHh5XG4gICAgcG9zaXRpb25zW2luZGV4KytdID0gdmVydGV4RGF0YVsyXTtcbiAgICBwb3NpdGlvbnNbaW5kZXgrK10gPSB2ZXJ0ZXhEYXRhWzNdO1xuICAgIHRoaXMudXZzW2luZGV4KytdID0gdXZzWzFdO1xuICAgIGNvbG9yc1tpbmRleCsrXSA9IHRpbnQ7XG4gICAgcG9zaXRpb25zW2luZGV4KytdID0gbmV4dFRleHR1cmUuX2lkO1xuXG4gICAgIC8vIHh5XG4gICAgcG9zaXRpb25zW2luZGV4KytdID0gdmVydGV4RGF0YVs0XTtcbiAgICBwb3NpdGlvbnNbaW5kZXgrK10gPSB2ZXJ0ZXhEYXRhWzVdO1xuICAgIHRoaXMudXZzW2luZGV4KytdID0gdXZzWzJdO1xuICAgIGNvbG9yc1tpbmRleCsrXSA9IHRpbnQ7XG4gICAgcG9zaXRpb25zW2luZGV4KytdID0gbmV4dFRleHR1cmUuX2lkO1xuXG4gICAgLy8geHlcbiAgICBwb3NpdGlvbnNbaW5kZXgrK10gPSB2ZXJ0ZXhEYXRhWzZdO1xuICAgIHBvc2l0aW9uc1tpbmRleCsrXSA9IHZlcnRleERhdGFbN107XG4gICAgdGhpcy51dnNbaW5kZXgrK10gPSB1dnNbM107XG4gICAgY29sb3JzW2luZGV4KytdID0gdGludDtcbiAgICBwb3NpdGlvbnNbaW5kZXgrK10gPSBuZXh0VGV4dHVyZS5faWQ7XG59O1xuXG4vKipcbiAqIFJlbmRlcnMgdGhlIGNvbnRlbnQgYW5kIGVtcHRpZXMgdGhlIGN1cnJlbnQgYmF0Y2guXG4gKlxuICovXG5TcHJpdGVSZW5kZXJlci5wcm90b3R5cGUuZmx1c2ggPSBmdW5jdGlvbiAoKVxue1xuICAgIGlmICh0aGlzLmN1cnJlbnRJbmRleCA9PT0gMClyZXR1cm47XG5cbiAgICB2YXIgZ2wgPSB0aGlzLnJlbmRlcmVyLmdsO1xuXG5cbiAgICB0aGlzLmN1cnJlbnRHcm91cC5zaXplID0gdGhpcy5jdXJyZW50SW5kZXggLSB0aGlzLmN1cnJlbnRHcm91cC5zdGFydDtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuY3VycmVudEdyb3VwLnRleHR1cmVDb3VudDsgaSsrKSBcbiAgICB7ICAgICBcbiAgICAgICAgdGhpcy5jdXJyZW50R3JvdXAudGV4dHVyZXNbaV0uX2VuYWJsZWQgPSBmYWxzZTtcbiAgICB9O1xuICAgXG4gICAgLy8gZG8gc29tZSBzbWFydCBhcnJheSBzdHVmZi4uXG4gICAgLy8gZG91YmxlIHNpemUgc28gd2UgZG9udCBhbHdheSBzdWJhcnJheSB0aGUgZWxlbWVudHMuLlxuICAgIC8vIHVwbG9hZCB0aGUgdmVydHMgdG8gdGhlIGJ1ZmZlclxuICAgIGlmICh0aGlzLmN1cnJlbnRCYXRjaFNpemUgPiAoIHRoaXMuc2l6ZSAqIDAuNSApIClcbiAgICB7XG4gICAgICAgIHRoaXMudmVydGV4QnVmZmVyLnVwbG9hZCh0aGlzLnZlcnRpY2VzLCAwLCB0cnVlKTtcbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgLy8gbyBrIC4uIHN1YiBhcnJheSBpcyBTTE9XPj9cbiAgICAgICAgdmFyIHZpZXcgPSB0aGlzLnBvc2l0aW9ucy5zdWJhcnJheSgwLCB0aGlzLmN1cnJlbnRJbmRleCAqIHRoaXMudmVydEJ5dGVTaXplKTtcbiAgICAgICAgdGhpcy52ZXJ0ZXhCdWZmZXIudXBsb2FkKHZpZXcsIDAsIHRydWUpO1xuICAgIH1cblxuICAgIC8vIGJpbmQgc2hhZGVyLi5cbiAgICB0aGlzLnJlbmRlcmVyLmJpbmRTaGFkZXIodGhpcy5fc2hhZGVyKTtcbiAgICB0aGlzLnJlbmRlcmVyLmJsZW5kTW9kZU1hbmFnZXIuc2V0QmxlbmRNb2RlKCAwICk7XG5cbiAgICAvLy8gcmVuZGVyIHRoZSBncm91cHMuLlxuICAgIGZvciAoaSA9IDA7IGkgPCB0aGlzLmdyb3VwQ291bnQ7IGkrKykge1xuICAgICAgICBcbiAgICAgICAgdmFyIGdyb3VwID0gdGhpcy5ncm91cHNbaV07XG5cbiAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBncm91cC50ZXh0dXJlQ291bnQ7IGorKykge1xuICAgICAgICAgICAgdGhpcy5yZW5kZXJlci5iaW5kVGV4dHVyZShncm91cC50ZXh0dXJlc1tqXSwgaik7XG4gICAgICAgIH07XG5cbiAgICAgICAgZ2wuZHJhd0VsZW1lbnRzKGdsLlRSSUFOR0xFUywgZ3JvdXAuc2l6ZSAqIDYsIGdsLlVOU0lHTkVEX1NIT1JULCBncm91cC5zdGFydCAqIDYgKiAyKTtcbiAgICB9O1xuXG4gICAgLy8gcmVzZXQgZWxlbWVudHMgZm9yIHRoZSBuZXh0IGZsdXNoXG4gICAgdGhpcy5jdXJyZW50VGV4dHVyZSA9IG51bGw7XG4gICAgdGhpcy5jdXJyZW50SW5kZXggPSAwO1xuICAgIHRoaXMudGV4dHVyZUNvdW50ID0gMDtcbiAgICB0aGlzLmdyb3VwQ291bnQgPSAwO1xuICAgIFxuICAgIHRoaXMuY3VycmVudEdyb3VwID0gdGhpcy5ncm91cHNbdGhpcy5ncm91cENvdW50KytdO1xuICAgIHRoaXMuY3VycmVudEdyb3VwLnRleHR1cmVDb3VudCA9IDA7XG59O1xuXG4vKipcbiAqIFN0YXJ0cyBhIG5ldyBzcHJpdGUgYmF0Y2guXG4gKlxuICovXG5TcHJpdGVSZW5kZXJlci5wcm90b3R5cGUuc3RhcnQgPSBmdW5jdGlvbiAoKVxue1xuICAgIHRoaXMudmFvLmJpbmQoKTtcbn07XG5cblNwcml0ZVJlbmRlcmVyLnByb3RvdHlwZS5zdG9wID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLmZsdXNoKCk7XG4gICAgdGhpcy52YW8udW5iaW5kKCk7XG59O1xuLyoqXG4gKiBEZXN0cm95cyB0aGUgU3ByaXRlQmF0Y2guXG4gKlxuICovXG5TcHJpdGVSZW5kZXJlci5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy52ZXJ0ZXhCdWZmZXIuZGVzdHJveSgpO1xuICAgIHRoaXMuaW5kZXhCdWZmZXIuZGVzdHJveSgpO1xuXG4gICAgT2JqZWN0UmVuZGVyZXIucHJvdG90eXBlLmRlc3Ryb3kuY2FsbCh0aGlzKTtcblxuICAgIHRoaXMuc2hhZGVyLmRlc3Ryb3koKTtcblxuICAgIHRoaXMucmVuZGVyZXIgPSBudWxsO1xuXG4gICAgdGhpcy52ZXJ0aWNlcyA9IG51bGw7XG4gICAgdGhpcy5wb3NpdGlvbnMgPSBudWxsO1xuICAgIHRoaXMuY29sb3JzID0gbnVsbDtcbiAgICB0aGlzLmluZGljZXMgPSBudWxsO1xuXG4gICAgdGhpcy52ZXJ0ZXhCdWZmZXIgPSBudWxsO1xuICAgIHRoaXMuaW5kZXhCdWZmZXIgPSBudWxsO1xuXG4gICAgdGhpcy5zcHJpdGVzID0gbnVsbDtcbiAgICB0aGlzLnNoYWRlciA9IG51bGw7XG59O1xuIiwidmFyIFNoYWRlciA9IHJlcXVpcmUoJ3BpeGktZ2wtY29yZScpLkdMU2hhZGVyO1xuXG5cbmZ1bmN0aW9uIGdlbmVyYXRlTXVsdGlUZXh0dXJlU2hhZGVyKGdsLCBtYXhUZXh0dXJlcylcbntcbiAgICB2YXIgdmVydGV4U3JjID0gXCJwcmVjaXNpb24gbG93cCBmbG9hdDtcXG5hdHRyaWJ1dGUgdmVjMiBhVmVydGV4UG9zaXRpb247XFxuYXR0cmlidXRlIHZlYzIgYVRleHR1cmVDb29yZDtcXG5hdHRyaWJ1dGUgdmVjNCBhQ29sb3I7XFxuYXR0cmlidXRlIGZsb2F0IGFUZXh0dXJlSWQ7XFxuXFxudW5pZm9ybSBtYXQzIHByb2plY3Rpb25NYXRyaXg7XFxuXFxudmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7XFxudmFyeWluZyB2ZWM0IHZDb2xvcjtcXG52YXJ5aW5nIGZsb2F0IHZUZXh0dXJlSWQ7XFxuXFxudm9pZCBtYWluKHZvaWQpe1xcbiAgIGdsX1Bvc2l0aW9uID0gdmVjNCgocHJvamVjdGlvbk1hdHJpeCAqIHZlYzMoYVZlcnRleFBvc2l0aW9uLCAxLjApKS54eSwgMC4wLCAxLjApO1xcbiAgIHZUZXh0dXJlQ29vcmQgPSBhVGV4dHVyZUNvb3JkO1xcbiAgIHZUZXh0dXJlSWQgPSBhVGV4dHVyZUlkO1xcbiAgIHZDb2xvciA9IHZlYzQoYUNvbG9yLnJnYiAqIGFDb2xvci5hLCBhQ29sb3IuYSk7XFxufVwiO1xuICAgIHZhciBmcmFnbWVudFNyYyA9ICdwcmVjaXNpb24gbG93cCBmbG9hdDtcXG5cXG4nICsgZ2VuZXJhdGVTYW1wbGVTcmMobWF4VGV4dHVyZXMpICsgXCJcXG5cXG5cIiArIGZyYWdUZW1wbGF0ZVxuXG4gICAgZnJhZ21lbnRTcmMgPSBmcmFnbWVudFNyYy5yZXBsYWNlKC9cXCVcXCUvZ2ksICcxNicpO1xuXG4gICAgdmFyIHNoYWRlciA9IG5ldyBTaGFkZXIoZ2wsIHZlcnRleFNyYywgZnJhZ21lbnRTcmMpO1xuXG5cbiAgICB2YXIgc2FtcGxlVmFsdWVzID0gW107XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBtYXhUZXh0dXJlczsgaSsrKSB7XG4gICAgICAgIHNhbXBsZVZhbHVlc1tpXSA9IGk7XG4gICAgfTtcblxuICAgIHNoYWRlci5iaW5kKCk7XG4gICAgc2hhZGVyLnVuaWZvcm1zLnVTYW1wbGVycyA9IHNhbXBsZVZhbHVlcztcblxuICAgIHJldHVybiBzaGFkZXI7XG59XG5cbmZ1bmN0aW9uIGdlbmVyYXRlU2FtcGxlU3JjKG1heFRleHR1cmVzKVxue1xuICAgIHZhciBzcmMgPSAndmVjNCBnZXRTYW1wbGVGcm9tQXJyYXkoc2FtcGxlcjJEIHRleHR1cmVzWyUlXSwgaW50IG5keCwgdmVjMiB1dikge1xcblxcbnZlYzQgY29sb3I7J1xuXG4gICAgc3JjICs9ICdcXG4nO1xuICAgIHNyYyArPSAnXFxuJztcbiAgICBcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG1heFRleHR1cmVzOyBpKyspIFxuICAgIHtcbiAgICAgICAgaWYoaSA+IDApc3JjICs9ICdcXG5lbHNlICc7XG4gICAgICAgIGlmKGkgPCBtYXhUZXh0dXJlcy0xKXNyYyArPSAnaWYobmR4ID09ICcgKyBpICsgJyknO1xuICAgICAgICBzcmMgKz0gJ1xcbnsnO1xuICAgICAgICBzcmMgKz0gJ1xcblxcdGNvbG9yID0gdGV4dHVyZTJEKHRleHR1cmVzWycraSsnXSwgdXYpOyc7XG4gICAgICAgIHNyYyArPSAnXFxufSc7XG4gICAgfTtcblxuICAgIHNyYyArPSAnXFxuJztcbiAgICBzcmMgKz0gJ1xcbic7XG4gICAgc3JjICs9ICdyZXR1cm4gY29sb3I7JztcbiAgICBzcmMgKz0gJ1xcbn0nO1xuXG4gICAgcmV0dXJuIHNyYztcbn1cblxudmFyIGZyYWdUZW1wbGF0ZSA9IFtcblxuICAgICd2YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDsnLFxuICAgICd2YXJ5aW5nIHZlYzQgdkNvbG9yOycsXG4gICAgJ3ZhcnlpbmcgZmxvYXQgdlRleHR1cmVJZDsnLFxuICAgICd1bmlmb3JtIHNhbXBsZXIyRCB1U2FtcGxlcnNbJSVdOycsXG5cbiAgICAndm9pZCBtYWluKHZvaWQpeycsXG4gICAgICAgICdnbF9GcmFnQ29sb3IgPSBnZXRTYW1wbGVGcm9tQXJyYXkodVNhbXBsZXJzLCBpbnQodlRleHR1cmVJZCksIHZUZXh0dXJlQ29vcmQpICogdkNvbG9yOycsXG4gICAgJ30nXG5dLmpvaW4oJ1xcbicpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGdlbmVyYXRlTXVsdGlUZXh0dXJlU2hhZGVyO1xuIiwidmFyIFNwcml0ZSA9IHJlcXVpcmUoJy4uL3Nwcml0ZXMvU3ByaXRlJyksXG4gICAgVGV4dHVyZSA9IHJlcXVpcmUoJy4uL3RleHR1cmVzL1RleHR1cmUnKSxcbiAgICBtYXRoID0gcmVxdWlyZSgnLi4vbWF0aCcpLFxuICAgIHV0aWxzID0gcmVxdWlyZSgnLi4vdXRpbHMnKSxcbiAgICBDT05TVCA9IHJlcXVpcmUoJy4uL2NvbnN0Jyk7XG5cbi8qKlxuICogQSBUZXh0IE9iamVjdCB3aWxsIGNyZWF0ZSBhIGxpbmUgb3IgbXVsdGlwbGUgbGluZXMgb2YgdGV4dC4gVG8gc3BsaXQgYSBsaW5lIHlvdSBjYW4gdXNlICdcXG4nIGluIHlvdXIgdGV4dCBzdHJpbmcsXG4gKiBvciBhZGQgYSB3b3JkV3JhcCBwcm9wZXJ0eSBzZXQgdG8gdHJ1ZSBhbmQgYW5kIHdvcmRXcmFwV2lkdGggcHJvcGVydHkgd2l0aCBhIHZhbHVlIGluIHRoZSBzdHlsZSBvYmplY3QuXG4gKlxuICogQSBUZXh0IGNhbiBiZSBjcmVhdGVkIGRpcmVjdGx5IGZyb20gYSBzdHJpbmcgYW5kIGEgc3R5bGUgb2JqZWN0XG4gKlxuICogYGBganNcbiAqIHZhciB0ZXh0ID0gbmV3IFBJWEkuVGV4dCgnVGhpcyBpcyBhIHBpeGkgdGV4dCcse2ZvbnQgOiAnMjRweCBBcmlhbCcsIGZpbGwgOiAweGZmMTAxMCwgYWxpZ24gOiAnY2VudGVyJ30pO1xuICogYGBgXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLlNwcml0ZVxuICogQG1lbWJlcm9mIFBJWElcbiAqIEBwYXJhbSB0ZXh0IHtzdHJpbmd9IFRoZSBjb3B5IHRoYXQgeW91IHdvdWxkIGxpa2UgdGhlIHRleHQgdG8gZGlzcGxheVxuICogQHBhcmFtIFtzdHlsZV0ge29iamVjdH0gVGhlIHN0eWxlIHBhcmFtZXRlcnNcbiAqIEBwYXJhbSBbc3R5bGUuZm9udF0ge3N0cmluZ30gZGVmYXVsdCAnYm9sZCAyMHB4IEFyaWFsJyBUaGUgc3R5bGUgYW5kIHNpemUgb2YgdGhlIGZvbnRcbiAqIEBwYXJhbSBbc3R5bGUuZmlsbD0nYmxhY2snXSB7U3RyaW5nfE51bWJlcn0gQSBjYW52YXMgZmlsbHN0eWxlIHRoYXQgd2lsbCBiZSB1c2VkIG9uIHRoZSB0ZXh0IGUuZyAncmVkJywgJyMwMEZGMDAnXG4gKiBAcGFyYW0gW3N0eWxlLmFsaWduPSdsZWZ0J10ge3N0cmluZ30gQWxpZ25tZW50IGZvciBtdWx0aWxpbmUgdGV4dCAoJ2xlZnQnLCAnY2VudGVyJyBvciAncmlnaHQnKSwgZG9lcyBub3QgYWZmZWN0IHNpbmdsZSBsaW5lIHRleHRcbiAqIEBwYXJhbSBbc3R5bGUuc3Ryb2tlXSB7U3RyaW5nfE51bWJlcn0gQSBjYW52YXMgZmlsbHN0eWxlIHRoYXQgd2lsbCBiZSB1c2VkIG9uIHRoZSB0ZXh0IHN0cm9rZSBlLmcgJ2JsdWUnLCAnI0ZDRkYwMCdcbiAqIEBwYXJhbSBbc3R5bGUuc3Ryb2tlVGhpY2tuZXNzPTBdIHtudW1iZXJ9IEEgbnVtYmVyIHRoYXQgcmVwcmVzZW50cyB0aGUgdGhpY2tuZXNzIG9mIHRoZSBzdHJva2UuIERlZmF1bHQgaXMgMCAobm8gc3Ryb2tlKVxuICogQHBhcmFtIFtzdHlsZS53b3JkV3JhcD1mYWxzZV0ge2Jvb2xlYW59IEluZGljYXRlcyBpZiB3b3JkIHdyYXAgc2hvdWxkIGJlIHVzZWRcbiAqIEBwYXJhbSBbc3R5bGUud29yZFdyYXBXaWR0aD0xMDBdIHtudW1iZXJ9IFRoZSB3aWR0aCBhdCB3aGljaCB0ZXh0IHdpbGwgd3JhcCwgaXQgbmVlZHMgd29yZFdyYXAgdG8gYmUgc2V0IHRvIHRydWVcbiAqIEBwYXJhbSBbc3R5bGUubGluZUhlaWdodF0ge251bWJlcn0gVGhlIGxpbmUgaGVpZ2h0LCBhIG51bWJlciB0aGF0IHJlcHJlc2VudHMgdGhlIHZlcnRpY2FsIHNwYWNlIHRoYXQgYSBsZXR0ZXIgdXNlc1xuICogQHBhcmFtIFtzdHlsZS5kcm9wU2hhZG93PWZhbHNlXSB7Ym9vbGVhbn0gU2V0IGEgZHJvcCBzaGFkb3cgZm9yIHRoZSB0ZXh0XG4gKiBAcGFyYW0gW3N0eWxlLmRyb3BTaGFkb3dDb2xvcj0nIzAwMDAwMCddIHtzdHJpbmd9IEEgZmlsbCBzdHlsZSB0byBiZSB1c2VkIG9uIHRoZSBkcm9wc2hhZG93IGUuZyAncmVkJywgJyMwMEZGMDAnXG4gKiBAcGFyYW0gW3N0eWxlLmRyb3BTaGFkb3dBbmdsZT1NYXRoLlBJLzRdIHtudW1iZXJ9IFNldCBhIGFuZ2xlIG9mIHRoZSBkcm9wIHNoYWRvd1xuICogQHBhcmFtIFtzdHlsZS5kcm9wU2hhZG93RGlzdGFuY2U9NV0ge251bWJlcn0gU2V0IGEgZGlzdGFuY2Ugb2YgdGhlIGRyb3Agc2hhZG93XG4gKiBAcGFyYW0gW3N0eWxlLmRyb3BTaGFkb3dCbHVyPTBdIHtudW1iZXJ9IFNldCBhIHNoYWRvdyBibHVyIHJhZGl1c1xuICogQHBhcmFtIFtzdHlsZS5wYWRkaW5nPTBdIHtudW1iZXJ9IE9jY2FzaW9uYWxseSBzb21lIGZvbnRzIGFyZSBjcm9wcGVkIG9uIHRvcCBvciBib3R0b20uIEFkZGluZyBzb21lIHBhZGRpbmcgd2lsbFxuICogICAgICBwcmV2ZW50IHRoaXMgZnJvbSBoYXBwZW5pbmcgYnkgYWRkaW5nIHBhZGRpbmcgdG8gdGhlIHRvcCBhbmQgYm90dG9tIG9mIHRleHQgaGVpZ2h0LlxuICogQHBhcmFtIFtzdHlsZS50ZXh0QmFzZWxpbmU9J2FscGhhYmV0aWMnXSB7c3RyaW5nfSBUaGUgYmFzZWxpbmUgb2YgdGhlIHRleHQgdGhhdCBpcyByZW5kZXJlZC5cbiAqIEBwYXJhbSBbc3R5bGUubGluZUpvaW49J21pdGVyJ10ge3N0cmluZ30gVGhlIGxpbmVKb2luIHByb3BlcnR5IHNldHMgdGhlIHR5cGUgb2YgY29ybmVyIGNyZWF0ZWQsIGl0IGNhbiByZXNvbHZlXG4gKiAgICAgIHNwaWtlZCB0ZXh0IGlzc3Vlcy4gRGVmYXVsdCBpcyAnbWl0ZXInIChjcmVhdGVzIGEgc2hhcnAgY29ybmVyKS5cbiAqIEBwYXJhbSBbc3R5bGUubWl0ZXJMaW1pdD0xMF0ge251bWJlcn0gVGhlIG1pdGVyIGxpbWl0IHRvIHVzZSB3aGVuIHVzaW5nIHRoZSAnbWl0ZXInIGxpbmVKb2luIG1vZGUuIFRoaXMgY2FuIHJlZHVjZVxuICogICAgICBvciBpbmNyZWFzZSB0aGUgc3Bpa2luZXNzIG9mIHJlbmRlcmVkIHRleHQuXG4gKi9cbmZ1bmN0aW9uIFRleHQodGV4dCwgc3R5bGUsIHJlc29sdXRpb24pXG57XG4gICAgLyoqXG4gICAgICogVGhlIGNhbnZhcyBlbGVtZW50IHRoYXQgZXZlcnl0aGluZyBpcyBkcmF3biB0b1xuICAgICAqXG4gICAgICogQG1lbWJlciB7SFRNTENhbnZhc0VsZW1lbnR9XG4gICAgICovXG4gICAgdGhpcy5jYW52YXMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdjYW52YXMnKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBjYW52YXMgMmQgY29udGV4dCB0aGF0IGV2ZXJ5dGhpbmcgaXMgZHJhd24gd2l0aFxuICAgICAqIEBtZW1iZXIge0hUTUxDYW52YXNFbGVtZW50fVxuICAgICAqL1xuICAgIHRoaXMuY29udGV4dCA9IHRoaXMuY2FudmFzLmdldENvbnRleHQoJzJkJyk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgcmVzb2x1dGlvbiBvZiB0aGUgY2FudmFzLlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLnJlc29sdXRpb24gPSByZXNvbHV0aW9uIHx8IENPTlNULlJFU09MVVRJT047XG5cbiAgICAvKipcbiAgICAgKiBQcml2YXRlIHRyYWNrZXIgZm9yIHRoZSBjdXJyZW50IHRleHQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtzdHJpbmd9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl90ZXh0ID0gbnVsbDtcblxuICAgIC8qKlxuICAgICAqIFByaXZhdGUgdHJhY2tlciBmb3IgdGhlIGN1cnJlbnQgc3R5bGUuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtvYmplY3R9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9zdHlsZSA9IG51bGw7XG5cbiAgICB2YXIgdGV4dHVyZSA9IFRleHR1cmUuZnJvbUNhbnZhcyh0aGlzLmNhbnZhcyk7XG4gICAgdGV4dHVyZS50cmltID0gbmV3IG1hdGguUmVjdGFuZ2xlKCk7XG4gICAgU3ByaXRlLmNhbGwodGhpcywgdGV4dHVyZSk7XG5cbiAgICB0aGlzLnRleHQgPSB0ZXh0O1xuICAgIHRoaXMuc3R5bGUgPSBzdHlsZTtcbn1cblxuLy8gY29uc3RydWN0b3JcblRleHQucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShTcHJpdGUucHJvdG90eXBlKTtcblRleHQucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gVGV4dDtcbm1vZHVsZS5leHBvcnRzID0gVGV4dDtcblxuVGV4dC5mb250UHJvcGVydGllc0NhY2hlID0ge307XG5UZXh0LmZvbnRQcm9wZXJ0aWVzQ2FudmFzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnY2FudmFzJyk7XG5UZXh0LmZvbnRQcm9wZXJ0aWVzQ29udGV4dCA9IFRleHQuZm9udFByb3BlcnRpZXNDYW52YXMuZ2V0Q29udGV4dCgnMmQnKTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoVGV4dC5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBUaGUgd2lkdGggb2YgdGhlIFRleHQsIHNldHRpbmcgdGhpcyB3aWxsIGFjdHVhbGx5IG1vZGlmeSB0aGUgc2NhbGUgdG8gYWNoaWV2ZSB0aGUgdmFsdWUgc2V0XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuVGV4dCNcbiAgICAgKi9cbiAgICB3aWR0aDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmRpcnR5KVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlVGV4dCgpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5zY2FsZS54ICogdGhpcy5fdGV4dHVyZS5fZnJhbWUud2lkdGg7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnNjYWxlLnggPSB2YWx1ZSAvIHRoaXMuX3RleHR1cmUuX2ZyYW1lLndpZHRoO1xuICAgICAgICAgICAgdGhpcy5fd2lkdGggPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBUaGUgaGVpZ2h0IG9mIHRoZSBUZXh0LCBzZXR0aW5nIHRoaXMgd2lsbCBhY3R1YWxseSBtb2RpZnkgdGhlIHNjYWxlIHRvIGFjaGlldmUgdGhlIHZhbHVlIHNldFxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLlRleHQjXG4gICAgICovXG4gICAgaGVpZ2h0OiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgaWYgKHRoaXMuZGlydHkpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdGhpcy51cGRhdGVUZXh0KCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiAgdGhpcy5zY2FsZS55ICogdGhpcy5fdGV4dHVyZS5fZnJhbWUuaGVpZ2h0O1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5zY2FsZS55ID0gdmFsdWUgLyB0aGlzLl90ZXh0dXJlLl9mcmFtZS5oZWlnaHQ7XG4gICAgICAgICAgICB0aGlzLl9oZWlnaHQgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBTZXQgdGhlIHN0eWxlIG9mIHRoZSB0ZXh0XG4gICAgICpcbiAgICAgKiBAcGFyYW0gW3N0eWxlXSB7b2JqZWN0fSBUaGUgc3R5bGUgcGFyYW1ldGVyc1xuICAgICAqIEBwYXJhbSBbc3R5bGUuZm9udD0nYm9sZCAyMHB0IEFyaWFsJ10ge3N0cmluZ30gVGhlIHN0eWxlIGFuZCBzaXplIG9mIHRoZSBmb250XG4gICAgICogQHBhcmFtIFtzdHlsZS5maWxsPSdibGFjayddIHtzdHJpbmd8bnVtYmVyfSBBIGNhbnZhcyBmaWxsc3R5bGUgdGhhdCB3aWxsIGJlIHVzZWQgb24gdGhlIHRleHQgZWcgJ3JlZCcsICcjMDBGRjAwJ1xuICAgICAqIEBwYXJhbSBbc3R5bGUuYWxpZ249J2xlZnQnXSB7c3RyaW5nfSBBbGlnbm1lbnQgZm9yIG11bHRpbGluZSB0ZXh0ICgnbGVmdCcsICdjZW50ZXInIG9yICdyaWdodCcpLCBkb2VzIG5vdCBhZmZlY3Qgc2luZ2xlIGxpbmUgdGV4dFxuICAgICAqIEBwYXJhbSBbc3R5bGUuc3Ryb2tlPSdibGFjayddIHtzdHJpbmd8bnVtYmVyfSBBIGNhbnZhcyBmaWxsc3R5bGUgdGhhdCB3aWxsIGJlIHVzZWQgb24gdGhlIHRleHQgc3Ryb2tlIGVnICdibHVlJywgJyNGQ0ZGMDAnXG4gICAgICogQHBhcmFtIFtzdHlsZS5zdHJva2VUaGlja25lc3M9MF0ge251bWJlcn0gQSBudW1iZXIgdGhhdCByZXByZXNlbnRzIHRoZSB0aGlja25lc3Mgb2YgdGhlIHN0cm9rZS4gRGVmYXVsdCBpcyAwIChubyBzdHJva2UpXG4gICAgICogQHBhcmFtIFtzdHlsZS53b3JkV3JhcD1mYWxzZV0ge2Jvb2xlYW59IEluZGljYXRlcyBpZiB3b3JkIHdyYXAgc2hvdWxkIGJlIHVzZWRcbiAgICAgKiBAcGFyYW0gW3N0eWxlLndvcmRXcmFwV2lkdGg9MTAwXSB7bnVtYmVyfSBUaGUgd2lkdGggYXQgd2hpY2ggdGV4dCB3aWxsIHdyYXBcbiAgICAgKiBAcGFyYW0gW3N0eWxlLmxpbmVIZWlnaHRdIHtudW1iZXJ9IFRoZSBsaW5lIGhlaWdodCwgYSBudW1iZXIgdGhhdCByZXByZXNlbnRzIHRoZSB2ZXJ0aWNhbCBzcGFjZSB0aGF0IGEgbGV0dGVyIHVzZXNcbiAgICAgKiBAcGFyYW0gW3N0eWxlLmRyb3BTaGFkb3c9ZmFsc2VdIHtib29sZWFufSBTZXQgYSBkcm9wIHNoYWRvdyBmb3IgdGhlIHRleHRcbiAgICAgKiBAcGFyYW0gW3N0eWxlLmRyb3BTaGFkb3dDb2xvcj0nIzAwMDAwMCddIHtzdHJpbmd8bnVtYmVyfSBBIGZpbGwgc3R5bGUgdG8gYmUgdXNlZCBvbiB0aGUgZHJvcHNoYWRvdyBlLmcgJ3JlZCcsICcjMDBGRjAwJ1xuICAgICAqIEBwYXJhbSBbc3R5bGUuZHJvcFNoYWRvd0FuZ2xlPU1hdGguUEkvNl0ge251bWJlcn0gU2V0IGEgYW5nbGUgb2YgdGhlIGRyb3Agc2hhZG93XG4gICAgICogQHBhcmFtIFtzdHlsZS5kcm9wU2hhZG93RGlzdGFuY2U9NV0ge251bWJlcn0gU2V0IGEgZGlzdGFuY2Ugb2YgdGhlIGRyb3Agc2hhZG93XG4gICAgICogQHBhcmFtIFtzdHlsZS5kcm9wU2hhZG93Qmx1cj0wXSB7bnVtYmVyfSBTZXQgYSBzaGFkb3cgYmx1ciByYWRpdXNcbiAgICAgKiBAcGFyYW0gW3N0eWxlLnBhZGRpbmc9MF0ge251bWJlcn0gT2NjYXNpb25hbGx5IHNvbWUgZm9udHMgYXJlIGNyb3BwZWQgb24gdG9wIG9yIGJvdHRvbS4gQWRkaW5nIHNvbWUgcGFkZGluZyB3aWxsXG4gICAgICogICAgICBwcmV2ZW50IHRoaXMgZnJvbSBoYXBwZW5pbmcgYnkgYWRkaW5nIHBhZGRpbmcgdG8gdGhlIHRvcCBhbmQgYm90dG9tIG9mIHRleHQgaGVpZ2h0LlxuICAgICAqIEBwYXJhbSBbc3R5bGUudGV4dEJhc2VsaW5lPSdhbHBoYWJldGljJ10ge3N0cmluZ30gVGhlIGJhc2VsaW5lIG9mIHRoZSB0ZXh0IHRoYXQgaXMgcmVuZGVyZWQuXG4gICAgICogQHBhcmFtIFtzdHlsZS5saW5lSm9pbj0nbWl0ZXInXSB7c3RyaW5nfSBUaGUgbGluZUpvaW4gcHJvcGVydHkgc2V0cyB0aGUgdHlwZSBvZiBjb3JuZXIgY3JlYXRlZCwgaXQgY2FuIHJlc29sdmVcbiAgICAgKiAgICAgIHNwaWtlZCB0ZXh0IGlzc3Vlcy4gRGVmYXVsdCBpcyAnbWl0ZXInIChjcmVhdGVzIGEgc2hhcnAgY29ybmVyKS5cbiAgICAgKiBAcGFyYW0gW3N0eWxlLm1pdGVyTGltaXQ9MTBdIHtudW1iZXJ9IFRoZSBtaXRlciBsaW1pdCB0byB1c2Ugd2hlbiB1c2luZyB0aGUgJ21pdGVyJyBsaW5lSm9pbiBtb2RlLiBUaGlzIGNhbiByZWR1Y2VcbiAgICAgKiAgICAgIG9yIGluY3JlYXNlIHRoZSBzcGlraW5lc3Mgb2YgcmVuZGVyZWQgdGV4dC5cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5UZXh0I1xuICAgICAqL1xuICAgIHN0eWxlOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3N0eWxlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uIChzdHlsZSlcbiAgICAgICAge1xuICAgICAgICAgICAgc3R5bGUgPSBzdHlsZSB8fCB7fTtcblxuICAgICAgICAgICAgaWYgKHR5cGVvZiBzdHlsZS5maWxsID09PSAnbnVtYmVyJykge1xuICAgICAgICAgICAgICAgIHN0eWxlLmZpbGwgPSB1dGlscy5oZXgyc3RyaW5nKHN0eWxlLmZpbGwpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAodHlwZW9mIHN0eWxlLnN0cm9rZSA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgICAgICAgICBzdHlsZS5zdHJva2UgPSB1dGlscy5oZXgyc3RyaW5nKHN0eWxlLnN0cm9rZSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICh0eXBlb2Ygc3R5bGUuZHJvcFNoYWRvd0NvbG9yID09PSAnbnVtYmVyJykge1xuICAgICAgICAgICAgICAgIHN0eWxlLmRyb3BTaGFkb3dDb2xvciA9IHV0aWxzLmhleDJzdHJpbmcoc3R5bGUuZHJvcFNoYWRvd0NvbG9yKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgc3R5bGUuZm9udCA9IHN0eWxlLmZvbnQgfHwgJ2JvbGQgMjBwdCBBcmlhbCc7XG4gICAgICAgICAgICBzdHlsZS5maWxsID0gc3R5bGUuZmlsbCB8fCAnYmxhY2snO1xuICAgICAgICAgICAgc3R5bGUuYWxpZ24gPSBzdHlsZS5hbGlnbiB8fCAnbGVmdCc7XG4gICAgICAgICAgICBzdHlsZS5zdHJva2UgPSBzdHlsZS5zdHJva2UgfHwgJ2JsYWNrJzsgLy9wcm92aWRlIGEgZGVmYXVsdCwgc2VlOiBodHRwczovL2dpdGh1Yi5jb20vcGl4aWpzL3BpeGkuanMvaXNzdWVzLzEzNlxuICAgICAgICAgICAgc3R5bGUuc3Ryb2tlVGhpY2tuZXNzID0gc3R5bGUuc3Ryb2tlVGhpY2tuZXNzIHx8IDA7XG4gICAgICAgICAgICBzdHlsZS53b3JkV3JhcCA9IHN0eWxlLndvcmRXcmFwIHx8IGZhbHNlO1xuICAgICAgICAgICAgc3R5bGUud29yZFdyYXBXaWR0aCA9IHN0eWxlLndvcmRXcmFwV2lkdGggfHwgMTAwO1xuXG4gICAgICAgICAgICBzdHlsZS5kcm9wU2hhZG93ID0gc3R5bGUuZHJvcFNoYWRvdyB8fCBmYWxzZTtcbiAgICAgICAgICAgIHN0eWxlLmRyb3BTaGFkb3dDb2xvciA9IHN0eWxlLmRyb3BTaGFkb3dDb2xvciB8fCAnIzAwMDAwMCc7XG4gICAgICAgICAgICBzdHlsZS5kcm9wU2hhZG93QW5nbGUgPSBzdHlsZS5kcm9wU2hhZG93QW5nbGUgIT09IHVuZGVmaW5lZCA/IHN0eWxlLmRyb3BTaGFkb3dBbmdsZSA6IE1hdGguUEkgLyA2O1xuICAgICAgICAgICAgc3R5bGUuZHJvcFNoYWRvd0Rpc3RhbmNlID0gc3R5bGUuZHJvcFNoYWRvd0Rpc3RhbmNlICE9PSB1bmRlZmluZWQgPyBzdHlsZS5kcm9wU2hhZG93RGlzdGFuY2UgOiA1O1xuICAgICAgICAgICAgc3R5bGUuZHJvcFNoYWRvd0JsdXIgPSBzdHlsZS5kcm9wU2hhZG93Qmx1ciAhPT0gdW5kZWZpbmVkID8gc3R5bGUuZHJvcFNoYWRvd0JsdXIgOiAwOyAvL3NoYWRvd0JsdXIgaXMgJzAnIGJ5IGRlZmF1bHQgYWNjb3JkaW5nIHRvIEhUTUxcblxuICAgICAgICAgICAgc3R5bGUucGFkZGluZyA9IHN0eWxlLnBhZGRpbmcgfHwgMDtcblxuICAgICAgICAgICAgc3R5bGUudGV4dEJhc2VsaW5lID0gc3R5bGUudGV4dEJhc2VsaW5lIHx8ICdhbHBoYWJldGljJztcblxuICAgICAgICAgICAgc3R5bGUubGluZUpvaW4gPSBzdHlsZS5saW5lSm9pbiB8fCAnbWl0ZXInO1xuICAgICAgICAgICAgc3R5bGUubWl0ZXJMaW1pdCA9IHN0eWxlLm1pdGVyTGltaXQgfHwgMTA7XG5cbiAgICAgICAgICAgIHRoaXMuX3N0eWxlID0gc3R5bGU7XG4gICAgICAgICAgICB0aGlzLmRpcnR5ID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBTZXQgdGhlIGNvcHkgZm9yIHRoZSB0ZXh0IG9iamVjdC4gVG8gc3BsaXQgYSBsaW5lIHlvdSBjYW4gdXNlICdcXG4nLlxuICAgICAqXG4gICAgICogQHBhcmFtIHRleHQge3N0cmluZ30gVGhlIGNvcHkgdGhhdCB5b3Ugd291bGQgbGlrZSB0aGUgdGV4dCB0byBkaXNwbGF5XG4gICAgICogQG1lbWJlcm9mIFBJWEkuVGV4dCNcbiAgICAgKi9cbiAgICB0ZXh0OiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24oKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fdGV4dDtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodGV4dCl7XG4gICAgICAgICAgICB0ZXh0ID0gdGV4dC50b1N0cmluZygpIHx8ICcgJztcbiAgICAgICAgICAgIGlmICh0aGlzLl90ZXh0ID09PSB0ZXh0KVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuX3RleHQgPSB0ZXh0O1xuICAgICAgICAgICAgdGhpcy5kaXJ0eSA9IHRydWU7XG4gICAgICAgIH1cbiAgICB9XG59KTtcblxuLyoqXG4gKiBSZW5kZXJzIHRleHQgYW5kIHVwZGF0ZXMgaXQgd2hlbiBuZWVkZWRcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5UZXh0LnByb3RvdHlwZS51cGRhdGVUZXh0ID0gZnVuY3Rpb24gKClcbntcbiAgICB2YXIgc3R5bGUgPSB0aGlzLl9zdHlsZTtcbiAgICB0aGlzLmNvbnRleHQuZm9udCA9IHN0eWxlLmZvbnQ7XG5cbiAgICAvLyB3b3JkIHdyYXBcbiAgICAvLyBwcmVzZXJ2ZSBvcmlnaW5hbCB0ZXh0XG4gICAgdmFyIG91dHB1dFRleHQgPSBzdHlsZS53b3JkV3JhcCA/IHRoaXMud29yZFdyYXAodGhpcy5fdGV4dCkgOiB0aGlzLl90ZXh0O1xuXG4gICAgLy8gc3BsaXQgdGV4dCBpbnRvIGxpbmVzXG4gICAgdmFyIGxpbmVzID0gb3V0cHV0VGV4dC5zcGxpdCgvKD86XFxyXFxufFxccnxcXG4pLyk7XG5cbiAgICAvLyBjYWxjdWxhdGUgdGV4dCB3aWR0aFxuICAgIHZhciBsaW5lV2lkdGhzID0gbmV3IEFycmF5KGxpbmVzLmxlbmd0aCk7XG4gICAgdmFyIG1heExpbmVXaWR0aCA9IDA7XG4gICAgdmFyIGZvbnRQcm9wZXJ0aWVzID0gdGhpcy5kZXRlcm1pbmVGb250UHJvcGVydGllcyhzdHlsZS5mb250KTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxpbmVzLmxlbmd0aDsgaSsrKVxuICAgIHtcbiAgICAgICAgdmFyIGxpbmVXaWR0aCA9IHRoaXMuY29udGV4dC5tZWFzdXJlVGV4dChsaW5lc1tpXSkud2lkdGg7XG4gICAgICAgIGxpbmVXaWR0aHNbaV0gPSBsaW5lV2lkdGg7XG4gICAgICAgIG1heExpbmVXaWR0aCA9IE1hdGgubWF4KG1heExpbmVXaWR0aCwgbGluZVdpZHRoKTtcbiAgICB9XG5cbiAgICB2YXIgd2lkdGggPSBtYXhMaW5lV2lkdGggKyBzdHlsZS5zdHJva2VUaGlja25lc3M7XG4gICAgaWYgKHN0eWxlLmRyb3BTaGFkb3cpXG4gICAge1xuICAgICAgICB3aWR0aCArPSBzdHlsZS5kcm9wU2hhZG93RGlzdGFuY2U7XG4gICAgfVxuXG4gICAgdGhpcy5jYW52YXMud2lkdGggPSAoIHdpZHRoICsgdGhpcy5jb250ZXh0LmxpbmVXaWR0aCApICogdGhpcy5yZXNvbHV0aW9uO1xuXG4gICAgLy8gY2FsY3VsYXRlIHRleHQgaGVpZ2h0XG4gICAgdmFyIGxpbmVIZWlnaHQgPSB0aGlzLnN0eWxlLmxpbmVIZWlnaHQgfHwgZm9udFByb3BlcnRpZXMuZm9udFNpemUgKyBzdHlsZS5zdHJva2VUaGlja25lc3M7XG5cbiAgICB2YXIgaGVpZ2h0ID0gbGluZUhlaWdodCAqIGxpbmVzLmxlbmd0aDtcbiAgICBpZiAoc3R5bGUuZHJvcFNoYWRvdylcbiAgICB7XG4gICAgICAgIGhlaWdodCArPSBzdHlsZS5kcm9wU2hhZG93RGlzdGFuY2U7XG4gICAgfVxuXG4gICAgdGhpcy5jYW52YXMuaGVpZ2h0ID0gKCBoZWlnaHQgKyB0aGlzLl9zdHlsZS5wYWRkaW5nICogMiApICogdGhpcy5yZXNvbHV0aW9uO1xuXG4gICAgdGhpcy5jb250ZXh0LnNjYWxlKCB0aGlzLnJlc29sdXRpb24sIHRoaXMucmVzb2x1dGlvbik7XG5cbiAgICBpZiAobmF2aWdhdG9yLmlzQ29jb29uSlMpXG4gICAge1xuICAgICAgICB0aGlzLmNvbnRleHQuY2xlYXJSZWN0KDAsIDAsIHRoaXMuY2FudmFzLndpZHRoLCB0aGlzLmNhbnZhcy5oZWlnaHQpO1xuXG4gICAgfVxuXG4gICAgLy90aGlzLmNvbnRleHQuZmlsbFN0eWxlPVwiI0ZGMDAwMFwiO1xuICAgIC8vdGhpcy5jb250ZXh0LmZpbGxSZWN0KDAsIDAsIHRoaXMuY2FudmFzLndpZHRoLCB0aGlzLmNhbnZhcy5oZWlnaHQpO1xuXG4gICAgdGhpcy5jb250ZXh0LmZvbnQgPSBzdHlsZS5mb250O1xuICAgIHRoaXMuY29udGV4dC5zdHJva2VTdHlsZSA9IHN0eWxlLnN0cm9rZTtcbiAgICB0aGlzLmNvbnRleHQubGluZVdpZHRoID0gc3R5bGUuc3Ryb2tlVGhpY2tuZXNzO1xuICAgIHRoaXMuY29udGV4dC50ZXh0QmFzZWxpbmUgPSBzdHlsZS50ZXh0QmFzZWxpbmU7XG4gICAgdGhpcy5jb250ZXh0LmxpbmVKb2luID0gc3R5bGUubGluZUpvaW47XG4gICAgdGhpcy5jb250ZXh0Lm1pdGVyTGltaXQgPSBzdHlsZS5taXRlckxpbWl0O1xuXG4gICAgdmFyIGxpbmVQb3NpdGlvblg7XG4gICAgdmFyIGxpbmVQb3NpdGlvblk7XG5cbiAgICBpZiAoc3R5bGUuZHJvcFNoYWRvdylcbiAgICB7XG4gICAgICAgIGlmIChzdHlsZS5kcm9wU2hhZG93Qmx1ciA+IDApIHtcbiAgICAgICAgICAgIHRoaXMuY29udGV4dC5zaGFkb3dDb2xvciA9IHN0eWxlLmRyb3BTaGFkb3dDb2xvcjtcbiAgICAgICAgICAgIHRoaXMuY29udGV4dC5zaGFkb3dCbHVyID0gc3R5bGUuZHJvcFNoYWRvd0JsdXI7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmNvbnRleHQuZmlsbFN0eWxlID0gc3R5bGUuZHJvcFNoYWRvd0NvbG9yO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIHhTaGFkb3dPZmZzZXQgPSBNYXRoLmNvcyhzdHlsZS5kcm9wU2hhZG93QW5nbGUpICogc3R5bGUuZHJvcFNoYWRvd0Rpc3RhbmNlO1xuICAgICAgICB2YXIgeVNoYWRvd09mZnNldCA9IE1hdGguc2luKHN0eWxlLmRyb3BTaGFkb3dBbmdsZSkgKiBzdHlsZS5kcm9wU2hhZG93RGlzdGFuY2U7XG5cbiAgICAgICAgZm9yIChpID0gMDsgaSA8IGxpbmVzLmxlbmd0aDsgaSsrKVxuICAgICAgICB7XG4gICAgICAgICAgICBsaW5lUG9zaXRpb25YID0gc3R5bGUuc3Ryb2tlVGhpY2tuZXNzIC8gMjtcbiAgICAgICAgICAgIGxpbmVQb3NpdGlvblkgPSAoc3R5bGUuc3Ryb2tlVGhpY2tuZXNzIC8gMiArIGkgKiBsaW5lSGVpZ2h0KSArIGZvbnRQcm9wZXJ0aWVzLmFzY2VudDtcblxuICAgICAgICAgICAgaWYgKHN0eWxlLmFsaWduID09PSAncmlnaHQnKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGxpbmVQb3NpdGlvblggKz0gbWF4TGluZVdpZHRoIC0gbGluZVdpZHRoc1tpXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKHN0eWxlLmFsaWduID09PSAnY2VudGVyJylcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBsaW5lUG9zaXRpb25YICs9IChtYXhMaW5lV2lkdGggLSBsaW5lV2lkdGhzW2ldKSAvIDI7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChzdHlsZS5maWxsKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHRoaXMuY29udGV4dC5maWxsVGV4dChsaW5lc1tpXSwgbGluZVBvc2l0aW9uWCArIHhTaGFkb3dPZmZzZXQsIGxpbmVQb3NpdGlvblkgKyB5U2hhZG93T2Zmc2V0ICsgdGhpcy5fc3R5bGUucGFkZGluZyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvL3NldCBjYW52YXMgdGV4dCBzdHlsZXNcbiAgICB0aGlzLmNvbnRleHQuZmlsbFN0eWxlID0gc3R5bGUuZmlsbDtcblxuICAgIC8vZHJhdyBsaW5lcyBsaW5lIGJ5IGxpbmVcbiAgICBmb3IgKGkgPSAwOyBpIDwgbGluZXMubGVuZ3RoOyBpKyspXG4gICAge1xuICAgICAgICBsaW5lUG9zaXRpb25YID0gc3R5bGUuc3Ryb2tlVGhpY2tuZXNzIC8gMjtcbiAgICAgICAgbGluZVBvc2l0aW9uWSA9IChzdHlsZS5zdHJva2VUaGlja25lc3MgLyAyICsgaSAqIGxpbmVIZWlnaHQpICsgZm9udFByb3BlcnRpZXMuYXNjZW50O1xuXG4gICAgICAgIGlmIChzdHlsZS5hbGlnbiA9PT0gJ3JpZ2h0JylcbiAgICAgICAge1xuICAgICAgICAgICAgbGluZVBvc2l0aW9uWCArPSBtYXhMaW5lV2lkdGggLSBsaW5lV2lkdGhzW2ldO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHN0eWxlLmFsaWduID09PSAnY2VudGVyJylcbiAgICAgICAge1xuICAgICAgICAgICAgbGluZVBvc2l0aW9uWCArPSAobWF4TGluZVdpZHRoIC0gbGluZVdpZHRoc1tpXSkgLyAyO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHN0eWxlLnN0cm9rZSAmJiBzdHlsZS5zdHJva2VUaGlja25lc3MpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuY29udGV4dC5zdHJva2VUZXh0KGxpbmVzW2ldLCBsaW5lUG9zaXRpb25YLCBsaW5lUG9zaXRpb25ZICsgdGhpcy5fc3R5bGUucGFkZGluZyk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoc3R5bGUuZmlsbClcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5jb250ZXh0LmZpbGxUZXh0KGxpbmVzW2ldLCBsaW5lUG9zaXRpb25YLCBsaW5lUG9zaXRpb25ZICsgdGhpcy5fc3R5bGUucGFkZGluZyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLnVwZGF0ZVRleHR1cmUoKTtcbn07XG5cbi8qKlxuICogVXBkYXRlcyB0ZXh0dXJlIHNpemUgYmFzZWQgb24gY2FudmFzIHNpemVcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5UZXh0LnByb3RvdHlwZS51cGRhdGVUZXh0dXJlID0gZnVuY3Rpb24gKClcbntcbiAgICB2YXIgdGV4dHVyZSA9IHRoaXMuX3RleHR1cmU7XG5cbiAgICB0ZXh0dXJlLmJhc2VUZXh0dXJlLmhhc0xvYWRlZCA9IHRydWU7XG4gICAgdGV4dHVyZS5iYXNlVGV4dHVyZS5yZXNvbHV0aW9uID0gdGhpcy5yZXNvbHV0aW9uO1xuXG4gICAgdGV4dHVyZS5iYXNlVGV4dHVyZS53aWR0aCA9IHRoaXMuY2FudmFzLndpZHRoIC8gdGhpcy5yZXNvbHV0aW9uO1xuICAgIHRleHR1cmUuYmFzZVRleHR1cmUuaGVpZ2h0ID0gdGhpcy5jYW52YXMuaGVpZ2h0IC8gdGhpcy5yZXNvbHV0aW9uO1xuICAgIHRleHR1cmUuY3JvcC53aWR0aCA9IHRleHR1cmUuX2ZyYW1lLndpZHRoID0gdGhpcy5jYW52YXMud2lkdGggLyB0aGlzLnJlc29sdXRpb247XG4gICAgdGV4dHVyZS5jcm9wLmhlaWdodCA9IHRleHR1cmUuX2ZyYW1lLmhlaWdodCA9IHRoaXMuY2FudmFzLmhlaWdodCAvIHRoaXMucmVzb2x1dGlvbjtcblxuICAgIHRleHR1cmUudHJpbS54ID0gMDtcbiAgICB0ZXh0dXJlLnRyaW0ueSA9IC10aGlzLl9zdHlsZS5wYWRkaW5nO1xuXG4gICAgdGV4dHVyZS50cmltLndpZHRoID0gdGV4dHVyZS5fZnJhbWUud2lkdGg7XG4gICAgdGV4dHVyZS50cmltLmhlaWdodCA9IHRleHR1cmUuX2ZyYW1lLmhlaWdodCAtIHRoaXMuX3N0eWxlLnBhZGRpbmcqMjtcblxuICAgIHRoaXMuX3dpZHRoID0gdGhpcy5jYW52YXMud2lkdGggLyB0aGlzLnJlc29sdXRpb247XG4gICAgdGhpcy5faGVpZ2h0ID0gdGhpcy5jYW52YXMuaGVpZ2h0IC8gdGhpcy5yZXNvbHV0aW9uO1xuXG4gICAgdGV4dHVyZS5iYXNlVGV4dHVyZS5lbWl0KCd1cGRhdGUnLCAgdGV4dHVyZS5iYXNlVGV4dHVyZSk7XG5cbiAgICB0aGlzLmRpcnR5ID0gZmFsc2U7XG59O1xuXG4vKipcbiAqIFJlbmRlcnMgdGhlIG9iamVjdCB1c2luZyB0aGUgV2ViR0wgcmVuZGVyZXJcbiAqXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcn1cbiAqL1xuVGV4dC5wcm90b3R5cGUucmVuZGVyV2ViR0wgPSBmdW5jdGlvbiAocmVuZGVyZXIpXG57XG4gICAgaWYgKHRoaXMuZGlydHkpXG4gICAge1xuICAgICAgICAvL3RoaXMucmVzb2x1dGlvbiA9IDEvL3JlbmRlcmVyLnJlc29sdXRpb247XG5cbiAgICAgICAgdGhpcy51cGRhdGVUZXh0KCk7XG4gICAgfVxuXG4gICAgU3ByaXRlLnByb3RvdHlwZS5yZW5kZXJXZWJHTC5jYWxsKHRoaXMsIHJlbmRlcmVyKTtcbn07XG5cbi8qKlxuICogUmVuZGVycyB0aGUgb2JqZWN0IHVzaW5nIHRoZSBDYW52YXMgcmVuZGVyZXJcbiAqXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuQ2FudmFzUmVuZGVyZXJ9XG4gKiBAcHJpdmF0ZVxuICovXG5UZXh0LnByb3RvdHlwZS5fcmVuZGVyQ2FudmFzID0gZnVuY3Rpb24gKHJlbmRlcmVyKVxue1xuICAgIGlmICh0aGlzLmRpcnR5KVxuICAgIHtcbiAgICAgLy8gICB0aGlzLnJlc29sdXRpb24gPSAxLy9yZW5kZXJlci5yZXNvbHV0aW9uO1xuXG4gICAgICAgIHRoaXMudXBkYXRlVGV4dCgpO1xuICAgIH1cblxuICAgIFNwcml0ZS5wcm90b3R5cGUuX3JlbmRlckNhbnZhcy5jYWxsKHRoaXMsIHJlbmRlcmVyKTtcbn07XG5cbi8qKlxuICogQ2FsY3VsYXRlcyB0aGUgYXNjZW50LCBkZXNjZW50IGFuZCBmb250U2l6ZSBvZiBhIGdpdmVuIGZvbnRTdHlsZVxuICpcbiAqIEBwYXJhbSBmb250U3R5bGUge29iamVjdH1cbiAqIEBwcml2YXRlXG4gKi9cblRleHQucHJvdG90eXBlLmRldGVybWluZUZvbnRQcm9wZXJ0aWVzID0gZnVuY3Rpb24gKGZvbnRTdHlsZSlcbntcbiAgICB2YXIgcHJvcGVydGllcyA9IFRleHQuZm9udFByb3BlcnRpZXNDYWNoZVtmb250U3R5bGVdO1xuXG4gICAgaWYgKCFwcm9wZXJ0aWVzKVxuICAgIHtcbiAgICAgICAgcHJvcGVydGllcyA9IHt9O1xuXG4gICAgICAgIHZhciBjYW52YXMgPSBUZXh0LmZvbnRQcm9wZXJ0aWVzQ2FudmFzO1xuICAgICAgICB2YXIgY29udGV4dCA9IFRleHQuZm9udFByb3BlcnRpZXNDb250ZXh0O1xuXG4gICAgICAgIGNvbnRleHQuZm9udCA9IGZvbnRTdHlsZTtcblxuICAgICAgICB2YXIgd2lkdGggPSBNYXRoLmNlaWwoY29udGV4dC5tZWFzdXJlVGV4dCgnfE3DiXEnKS53aWR0aCk7XG4gICAgICAgIHZhciBiYXNlbGluZSA9IE1hdGguY2VpbChjb250ZXh0Lm1lYXN1cmVUZXh0KCdNJykud2lkdGgpO1xuICAgICAgICB2YXIgaGVpZ2h0ID0gMiAqIGJhc2VsaW5lO1xuXG4gICAgICAgIGJhc2VsaW5lID0gYmFzZWxpbmUgKiAxLjQgfCAwO1xuXG4gICAgICAgIGNhbnZhcy53aWR0aCA9IHdpZHRoO1xuICAgICAgICBjYW52YXMuaGVpZ2h0ID0gaGVpZ2h0O1xuXG4gICAgICAgIGNvbnRleHQuZmlsbFN0eWxlID0gJyNmMDAnO1xuICAgICAgICBjb250ZXh0LmZpbGxSZWN0KDAsIDAsIHdpZHRoLCBoZWlnaHQpO1xuXG4gICAgICAgIGNvbnRleHQuZm9udCA9IGZvbnRTdHlsZTtcblxuICAgICAgICBjb250ZXh0LnRleHRCYXNlbGluZSA9ICdhbHBoYWJldGljJztcbiAgICAgICAgY29udGV4dC5maWxsU3R5bGUgPSAnIzAwMCc7XG4gICAgICAgIGNvbnRleHQuZmlsbFRleHQoJ3xNw4lxJywgMCwgYmFzZWxpbmUpO1xuXG4gICAgICAgIHZhciBpbWFnZWRhdGEgPSBjb250ZXh0LmdldEltYWdlRGF0YSgwLCAwLCB3aWR0aCwgaGVpZ2h0KS5kYXRhO1xuICAgICAgICB2YXIgcGl4ZWxzID0gaW1hZ2VkYXRhLmxlbmd0aDtcbiAgICAgICAgdmFyIGxpbmUgPSB3aWR0aCAqIDQ7XG5cbiAgICAgICAgdmFyIGksIGo7XG5cbiAgICAgICAgdmFyIGlkeCA9IDA7XG4gICAgICAgIHZhciBzdG9wID0gZmFsc2U7XG5cbiAgICAgICAgLy8gYXNjZW50LiBzY2FuIGZyb20gdG9wIHRvIGJvdHRvbSB1bnRpbCB3ZSBmaW5kIGEgbm9uIHJlZCBwaXhlbFxuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgYmFzZWxpbmU7IGkrKylcbiAgICAgICAge1xuICAgICAgICAgICAgZm9yIChqID0gMDsgaiA8IGxpbmU7IGogKz0gNClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBpZiAoaW1hZ2VkYXRhW2lkeCArIGpdICE9PSAyNTUpXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBzdG9wID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCFzdG9wKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGlkeCArPSBsaW5lO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcHJvcGVydGllcy5hc2NlbnQgPSBiYXNlbGluZSAtIGk7XG5cbiAgICAgICAgaWR4ID0gcGl4ZWxzIC0gbGluZTtcbiAgICAgICAgc3RvcCA9IGZhbHNlO1xuXG4gICAgICAgIC8vIGRlc2NlbnQuIHNjYW4gZnJvbSBib3R0b20gdG8gdG9wIHVudGlsIHdlIGZpbmQgYSBub24gcmVkIHBpeGVsXG4gICAgICAgIGZvciAoaSA9IGhlaWdodDsgaSA+IGJhc2VsaW5lOyBpLS0pXG4gICAgICAgIHtcbiAgICAgICAgICAgIGZvciAoaiA9IDA7IGogPCBsaW5lOyBqICs9IDQpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgaWYgKGltYWdlZGF0YVtpZHggKyBqXSAhPT0gMjU1KVxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgc3RvcCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghc3RvcClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBpZHggLT0gbGluZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHByb3BlcnRpZXMuZGVzY2VudCA9IGkgLSBiYXNlbGluZTtcbiAgICAgICAgcHJvcGVydGllcy5mb250U2l6ZSA9IHByb3BlcnRpZXMuYXNjZW50ICsgcHJvcGVydGllcy5kZXNjZW50O1xuXG4gICAgICAgIFRleHQuZm9udFByb3BlcnRpZXNDYWNoZVtmb250U3R5bGVdID0gcHJvcGVydGllcztcbiAgICB9XG5cbiAgICByZXR1cm4gcHJvcGVydGllcztcbn07XG5cbi8qKlxuICogQXBwbGllcyBuZXdsaW5lcyB0byBhIHN0cmluZyB0byBoYXZlIGl0IG9wdGltYWxseSBmaXQgaW50byB0aGUgaG9yaXpvbnRhbFxuICogYm91bmRzIHNldCBieSB0aGUgVGV4dCBvYmplY3QncyB3b3JkV3JhcFdpZHRoIHByb3BlcnR5LlxuICpcbiAqIEBwYXJhbSB0ZXh0IHtzdHJpbmd9XG4gKiBAcHJpdmF0ZVxuICovXG5UZXh0LnByb3RvdHlwZS53b3JkV3JhcCA9IGZ1bmN0aW9uICh0ZXh0KVxue1xuICAgIC8vIEdyZWVkeSB3cmFwcGluZyBhbGdvcml0aG0gdGhhdCB3aWxsIHdyYXAgd29yZHMgYXMgdGhlIGxpbmUgZ3Jvd3MgbG9uZ2VyXG4gICAgLy8gdGhhbiBpdHMgaG9yaXpvbnRhbCBib3VuZHMuXG4gICAgdmFyIHJlc3VsdCA9ICcnO1xuICAgIHZhciBsaW5lcyA9IHRleHQuc3BsaXQoJ1xcbicpO1xuICAgIHZhciB3b3JkV3JhcFdpZHRoID0gdGhpcy5fc3R5bGUud29yZFdyYXBXaWR0aDtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxpbmVzLmxlbmd0aDsgaSsrKVxuICAgIHtcbiAgICAgICAgdmFyIHNwYWNlTGVmdCA9IHdvcmRXcmFwV2lkdGg7XG4gICAgICAgIHZhciB3b3JkcyA9IGxpbmVzW2ldLnNwbGl0KCcgJyk7XG4gICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgd29yZHMubGVuZ3RoOyBqKyspXG4gICAgICAgIHtcbiAgICAgICAgICAgIHZhciB3b3JkV2lkdGggPSB0aGlzLmNvbnRleHQubWVhc3VyZVRleHQod29yZHNbal0pLndpZHRoO1xuICAgICAgICAgICAgdmFyIHdvcmRXaWR0aFdpdGhTcGFjZSA9IHdvcmRXaWR0aCArIHRoaXMuY29udGV4dC5tZWFzdXJlVGV4dCgnICcpLndpZHRoO1xuICAgICAgICAgICAgaWYgKGogPT09IDAgfHwgd29yZFdpZHRoV2l0aFNwYWNlID4gc3BhY2VMZWZ0KVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIC8vIFNraXAgcHJpbnRpbmcgdGhlIG5ld2xpbmUgaWYgaXQncyB0aGUgZmlyc3Qgd29yZCBvZiB0aGUgbGluZSB0aGF0IGlzXG4gICAgICAgICAgICAgICAgLy8gZ3JlYXRlciB0aGFuIHRoZSB3b3JkIHdyYXAgd2lkdGguXG4gICAgICAgICAgICAgICAgaWYgKGogPiAwKVxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0ICs9ICdcXG4nO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXN1bHQgKz0gd29yZHNbal07XG4gICAgICAgICAgICAgICAgc3BhY2VMZWZ0ID0gd29yZFdyYXBXaWR0aCAtIHdvcmRXaWR0aDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBzcGFjZUxlZnQgLT0gd29yZFdpZHRoV2l0aFNwYWNlO1xuICAgICAgICAgICAgICAgIHJlc3VsdCArPSAnICcgKyB3b3Jkc1tqXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChpIDwgbGluZXMubGVuZ3RoLTEpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJlc3VsdCArPSAnXFxuJztcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xufTtcblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBib3VuZHMgb2YgdGhlIFRleHQgYXMgYSByZWN0YW5nbGUuIFRoZSBib3VuZHMgY2FsY3VsYXRpb24gdGFrZXMgdGhlIHdvcmxkVHJhbnNmb3JtIGludG8gYWNjb3VudC5cbiAqXG4gKiBAcGFyYW0gbWF0cml4IHtQSVhJLk1hdHJpeH0gdGhlIHRyYW5zZm9ybWF0aW9uIG1hdHJpeCBvZiB0aGUgVGV4dFxuICogQHJldHVybiB7UElYSS5SZWN0YW5nbGV9IHRoZSBmcmFtaW5nIHJlY3RhbmdsZVxuICovXG5UZXh0LnByb3RvdHlwZS5nZXRCb3VuZHMgPSBmdW5jdGlvbiAobWF0cml4KVxue1xuICAgIGlmICh0aGlzLmRpcnR5KVxuICAgIHtcbiAgICAgICAgdGhpcy51cGRhdGVUZXh0KCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIFNwcml0ZS5wcm90b3R5cGUuZ2V0Qm91bmRzLmNhbGwodGhpcywgbWF0cml4KTtcbn07XG5cbi8qKlxuICogRGVzdHJveXMgdGhpcyB0ZXh0IG9iamVjdC5cbiAqXG4gKiBAcGFyYW0gW2Rlc3Ryb3lCYXNlVGV4dHVyZT10cnVlXSB7Ym9vbGVhbn0gd2hldGhlciB0byBkZXN0cm95IHRoZSBiYXNlIHRleHR1cmUgYXMgd2VsbFxuICovXG5UZXh0LnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKGRlc3Ryb3lCYXNlVGV4dHVyZSlcbntcbiAgICAvLyBtYWtlIHN1cmUgdG8gcmVzZXQgdGhlIHRoZSBjb250ZXh0IGFuZCBjYW52YXMuLiBkb250IHdhbnQgdGhpcyBoYW5naW5nIGFyb3VuZCBpbiBtZW1vcnkhXG4gICAgdGhpcy5jb250ZXh0ID0gbnVsbDtcbiAgICB0aGlzLmNhbnZhcyA9IG51bGw7XG5cbiAgICB0aGlzLl9zdHlsZSA9IG51bGw7XG5cbiAgICB0aGlzLl90ZXh0dXJlLmRlc3Ryb3koZGVzdHJveUJhc2VUZXh0dXJlID09PSB1bmRlZmluZWQgPyB0cnVlIDogZGVzdHJveUJhc2VUZXh0dXJlKTtcbn07XG4iLCJ2YXIgdXRpbHMgPSByZXF1aXJlKCcuLi91dGlscycpLFxuICAgIENPTlNUID0gcmVxdWlyZSgnLi4vY29uc3QnKSxcbiAgICBFdmVudEVtaXR0ZXIgPSByZXF1aXJlKCdldmVudGVtaXR0ZXIzJyk7XG5cbi8qKlxuICogQSB0ZXh0dXJlIHN0b3JlcyB0aGUgaW5mb3JtYXRpb24gdGhhdCByZXByZXNlbnRzIGFuIGltYWdlLiBBbGwgdGV4dHVyZXMgaGF2ZSBhIGJhc2UgdGV4dHVyZS5cbiAqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gc291cmNlIHtJbWFnZXxDYW52YXN9IHRoZSBzb3VyY2Ugb2JqZWN0IG9mIHRoZSB0ZXh0dXJlLlxuICogQHBhcmFtIFtzY2FsZU1vZGU9UElYSS5TQ0FMRV9NT0RFUy5ERUZBVUxUXSB7bnVtYmVyfSBTZWUge0BsaW5rIFBJWEkuU0NBTEVfTU9ERVN9IGZvciBwb3NzaWJsZSB2YWx1ZXNcbiAqIEBwYXJhbSByZXNvbHV0aW9uIHtudW1iZXJ9IHRoZSByZXNvbHV0aW9uIG9mIHRoZSB0ZXh0dXJlIGZvciBkZXZpY2VzIHdpdGggZGlmZmVyZW50IHBpeGVsIHJhdGlvc1xuICovXG5mdW5jdGlvbiBCYXNlVGV4dHVyZShzb3VyY2UsIHNjYWxlTW9kZSwgcmVzb2x1dGlvbilcbntcbiAgICBFdmVudEVtaXR0ZXIuY2FsbCh0aGlzKTtcblxuICAgIHRoaXMudWlkID0gdXRpbHMudWlkKCk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgUmVzb2x1dGlvbiBvZiB0aGUgdGV4dHVyZS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLnJlc29sdXRpb24gPSByZXNvbHV0aW9uIHx8IDE7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgd2lkdGggb2YgdGhlIGJhc2UgdGV4dHVyZSBzZXQgd2hlbiB0aGUgaW1hZ2UgaGFzIGxvYWRlZFxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEByZWFkT25seVxuICAgICAqL1xuICAgIHRoaXMud2lkdGggPSAxMDA7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgaGVpZ2h0IG9mIHRoZSBiYXNlIHRleHR1cmUgc2V0IHdoZW4gdGhlIGltYWdlIGhhcyBsb2FkZWRcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAcmVhZE9ubHlcbiAgICAgKi9cbiAgICB0aGlzLmhlaWdodCA9IDEwMDtcblxuICAgIC8vIFRPRE8gZG9jc1xuICAgIC8vIHVzZWQgdG8gc3RvcmUgdGhlIGFjdHVhbCBkaW1lbnNpb25zIG9mIHRoZSBzb3VyY2VcbiAgICAvKipcbiAgICAgKiBVc2VkIHRvIHN0b3JlIHRoZSBhY3R1YWwgd2lkdGggb2YgdGhlIHNvdXJjZSBvZiB0aGlzIHRleHR1cmVcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAcmVhZE9ubHlcbiAgICAgKi9cbiAgICB0aGlzLnJlYWxXaWR0aCA9IDEwMDtcbiAgICAvKipcbiAgICAgKiBVc2VkIHRvIHN0b3JlIHRoZSBhY3R1YWwgaGVpZ2h0IG9mIHRoZSBzb3VyY2Ugb2YgdGhpcyB0ZXh0dXJlXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQHJlYWRPbmx5XG4gICAgICovXG4gICAgdGhpcy5yZWFsSGVpZ2h0ID0gMTAwO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHNjYWxlIG1vZGUgdG8gYXBwbHkgd2hlbiBzY2FsaW5nIHRoaXMgdGV4dHVyZVxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IFBJWEkuU0NBTEVfTU9ERVMuTElORUFSXG4gICAgICogQHNlZSBQSVhJLlNDQUxFX01PREVTXG4gICAgICovXG4gICAgdGhpcy5zY2FsZU1vZGUgPSBzY2FsZU1vZGUgfHwgQ09OU1QuU0NBTEVfTU9ERVMuREVGQVVMVDtcblxuICAgIC8qKlxuICAgICAqIFNldCB0byB0cnVlIG9uY2UgdGhlIGJhc2UgdGV4dHVyZSBoYXMgc3VjY2Vzc2Z1bGx5IGxvYWRlZC5cbiAgICAgKlxuICAgICAqIFRoaXMgaXMgbmV2ZXIgdHJ1ZSBpZiB0aGUgdW5kZXJseWluZyBzb3VyY2UgZmFpbHMgdG8gbG9hZCBvciBoYXMgbm8gdGV4dHVyZSBkYXRhLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKiBAcmVhZE9ubHlcbiAgICAgKi9cbiAgICB0aGlzLmhhc0xvYWRlZCA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogU2V0IHRvIHRydWUgaWYgdGhlIHNvdXJjZSBpcyBjdXJyZW50bHkgbG9hZGluZy5cbiAgICAgKlxuICAgICAqIElmIGFuIEltYWdlIHNvdXJjZSBpcyBsb2FkaW5nIHRoZSAnbG9hZGVkJyBvciAnZXJyb3InIGV2ZW50IHdpbGwgYmVcbiAgICAgKiBkaXNwYXRjaGVkIHdoZW4gdGhlIG9wZXJhdGlvbiBlbmRzLiBBbiB1bmRlcnlsaW5nIHNvdXJjZSB0aGF0IGlzXG4gICAgICogaW1tZWRpYXRlbHktYXZhaWxhYmxlIGJ5cGFzc2VzIGxvYWRpbmcgZW50aXJlbHkuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqIEByZWFkb25seVxuICAgICAqL1xuICAgIHRoaXMuaXNMb2FkaW5nID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgaW1hZ2Ugc291cmNlIHRoYXQgaXMgdXNlZCB0byBjcmVhdGUgdGhlIHRleHR1cmUuXG4gICAgICpcbiAgICAgKiBUT0RPOiBNYWtlIHRoaXMgYSBzZXR0ZXIgdGhhdCBjYWxscyBsb2FkU291cmNlKCk7XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtJbWFnZXxDYW52YXN9XG4gICAgICogQHJlYWRvbmx5XG4gICAgICovXG4gICAgdGhpcy5zb3VyY2UgPSBudWxsOyAvLyBzZXQgaW4gbG9hZFNvdXJjZSwgaWYgYXQgYWxsXG5cbiAgICAvKipcbiAgICAgKiBDb250cm9scyBpZiBSR0IgY2hhbm5lbHMgc2hvdWxkIGJlIHByZS1tdWx0aXBsaWVkIGJ5IEFscGhhICAoV2ViR0wgb25seSlcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICogQGRlZmF1bHQgdHJ1ZVxuICAgICAqL1xuICAgIHRoaXMucHJlbXVsdGlwbGllZEFscGhhID0gdHJ1ZTtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge3N0cmluZ31cbiAgICAgKi9cbiAgICB0aGlzLmltYWdlVXJsID0gbnVsbDtcblxuICAgIC8qKlxuICAgICAqIFdldGhlciBvciBub3QgdGhlIHRleHR1cmUgaXMgYSBwb3dlciBvZiB0d28sIHRyeSB0byB1c2UgcG93ZXIgb2YgdHdvIHRleHR1cmVzIGFzIG11Y2ggYXMgeW91IGNhblxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLmlzUG93ZXJPZlR3byA9IGZhbHNlO1xuXG4gICAgLy8gdXNlZCBmb3Igd2ViR0xcblxuICAgIC8qKlxuICAgICAqXG4gICAgICogU2V0IHRoaXMgdG8gdHJ1ZSBpZiBhIG1pcG1hcCBvZiB0aGlzIHRleHR1cmUgbmVlZHMgdG8gYmUgZ2VuZXJhdGVkLiBUaGlzIHZhbHVlIG5lZWRzIHRvIGJlIHNldCBiZWZvcmUgdGhlIHRleHR1cmUgaXMgdXNlZFxuICAgICAqIEFsc28gdGhlIHRleHR1cmUgbXVzdCBiZSBhIHBvd2VyIG9mIHR3byBzaXplIHRvIHdvcmtcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICovXG4gICAgdGhpcy5taXBtYXAgPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIEEgbWFwIG9mIHJlbmRlcmVyIElEcyB0byB3ZWJnbCB0ZXh0dXJlc1xuICAgICAqXG4gICAgICogQG1lbWJlciB7b2JqZWN0PG51bWJlciwgV2ViR0xUZXh0dXJlPn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX2dsVGV4dHVyZXMgPSB7fTtcbiAgICB0aGlzLl9hY3RpdmUgPSBmYWxzZTtcbiAgICB0aGlzLl9pZCA9IDA7XG4gICAgXG4gICAgLy8gaWYgbm8gc291cmNlIHBhc3NlZCBkb24ndCB0cnkgdG8gbG9hZFxuICAgIGlmIChzb3VyY2UpXG4gICAge1xuICAgICAgICB0aGlzLmxvYWRTb3VyY2Uoc291cmNlKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBGaXJlZCB3aGVuIGEgbm90LWltbWVkaWF0ZWx5LWF2YWlsYWJsZSBzb3VyY2UgZmluaXNoZXMgbG9hZGluZy5cbiAgICAgKlxuICAgICAqIEBldmVudCBsb2FkZWRcbiAgICAgKiBAbWVtYmVyb2YgUElYSS5CYXNlVGV4dHVyZSNcbiAgICAgKiBAcHJvdGVjdGVkXG4gICAgICovXG5cbiAgICAvKipcbiAgICAgKiBGaXJlZCB3aGVuIGEgbm90LWltbWVkaWF0ZWx5LWF2YWlsYWJsZSBzb3VyY2UgZmFpbHMgdG8gbG9hZC5cbiAgICAgKlxuICAgICAqIEBldmVudCBlcnJvclxuICAgICAqIEBtZW1iZXJvZiBQSVhJLkJhc2VUZXh0dXJlI1xuICAgICAqIEBwcm90ZWN0ZWRcbiAgICAgKi9cbn1cblxuQmFzZVRleHR1cmUucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShFdmVudEVtaXR0ZXIucHJvdG90eXBlKTtcbkJhc2VUZXh0dXJlLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IEJhc2VUZXh0dXJlO1xubW9kdWxlLmV4cG9ydHMgPSBCYXNlVGV4dHVyZTtcblxuLyoqXG4gKiBVcGRhdGVzIHRoZSB0ZXh0dXJlIG9uIGFsbCB0aGUgd2ViZ2wgcmVuZGVyZXJzLCB0aGlzIGFsc28gYXNzdW1lcyB0aGUgc3JjIGhhcyBjaGFuZ2VkLlxuICpcbiAqIEBmaXJlcyB1cGRhdGVcbiAqL1xuQmFzZVRleHR1cmUucHJvdG90eXBlLnVwZGF0ZSA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy5yZWFsV2lkdGggPSB0aGlzLnNvdXJjZS5uYXR1cmFsV2lkdGggfHwgdGhpcy5zb3VyY2Uud2lkdGg7XG4gICAgdGhpcy5yZWFsSGVpZ2h0ID0gdGhpcy5zb3VyY2UubmF0dXJhbEhlaWdodCB8fCB0aGlzLnNvdXJjZS5oZWlnaHQ7XG5cbiAgICB0aGlzLndpZHRoID0gdGhpcy5yZWFsV2lkdGggLyB0aGlzLnJlc29sdXRpb247XG4gICAgdGhpcy5oZWlnaHQgPSB0aGlzLnJlYWxIZWlnaHQgLyB0aGlzLnJlc29sdXRpb247XG5cbiAgICB0aGlzLmlzUG93ZXJPZlR3byA9IHV0aWxzLmlzUG93ZXJPZlR3byh0aGlzLnJlYWxXaWR0aCwgdGhpcy5yZWFsSGVpZ2h0KTtcblxuICAgIHRoaXMuZW1pdCgndXBkYXRlJywgdGhpcyk7XG59O1xuXG4vKipcbiAqIExvYWQgYSBzb3VyY2UuXG4gKlxuICogSWYgdGhlIHNvdXJjZSBpcyBub3QtaW1tZWRpYXRlbHktYXZhaWxhYmxlLCBzdWNoIGFzIGFuIGltYWdlIHRoYXQgbmVlZHMgdG8gYmVcbiAqIGRvd25sb2FkZWQsIHRoZW4gdGhlICdsb2FkZWQnIG9yICdlcnJvcicgZXZlbnQgd2lsbCBiZSBkaXNwYXRjaGVkIGluIHRoZSBmdXR1cmVcbiAqIGFuZCBgaGFzTG9hZGVkYCB3aWxsIHJlbWFpbiBmYWxzZSBhZnRlciB0aGlzIGNhbGwuXG4gKlxuICogVGhlIGxvZ2ljIHN0YXRlIGFmdGVyIGNhbGxpbmcgYGxvYWRTb3VyY2VgIGRpcmVjdGx5IG9yIGluZGlyZWN0bHkgKGVnLiBgZnJvbUltYWdlYCwgYG5ldyBCYXNlVGV4dHVyZWApIGlzOlxuICpcbiAqICAgICBpZiAodGV4dHVyZS5oYXNMb2FkZWQpXG4ge1xuICogICAgICAgIC8vIHRleHR1cmUgcmVhZHkgZm9yIHVzZVxuICogICAgIH0gZWxzZSBpZiAodGV4dHVyZS5pc0xvYWRpbmcpXG4ge1xuICogICAgICAgIC8vIGxpc3RlbiB0byAnbG9hZGVkJyBhbmQvb3IgJ2Vycm9yJyBldmVudHMgb24gdGV4dHVyZVxuICogICAgIH0gZWxzZSB7XG4gKiAgICAgICAgLy8gbm90IGxvYWRpbmcsIG5vdCBnb2luZyB0byBsb2FkIFVOTEVTUyB0aGUgc291cmNlIGlzIHJlbG9hZGVkXG4gKiAgICAgICAgLy8gKGl0IG1heSBzdGlsbCBtYWtlIHNlbnNlIHRvIGxpc3RlbiB0byB0aGUgZXZlbnRzKVxuICogICAgIH1cbiAqXG4gKiBAcHJvdGVjdGVkXG4gKiBAcGFyYW0gc291cmNlIHtJbWFnZXxDYW52YXN9IHRoZSBzb3VyY2Ugb2JqZWN0IG9mIHRoZSB0ZXh0dXJlLlxuICovXG5CYXNlVGV4dHVyZS5wcm90b3R5cGUubG9hZFNvdXJjZSA9IGZ1bmN0aW9uIChzb3VyY2UpXG57XG4gICAgdmFyIHdhc0xvYWRpbmcgPSB0aGlzLmlzTG9hZGluZztcbiAgICB0aGlzLmhhc0xvYWRlZCA9IGZhbHNlO1xuICAgIHRoaXMuaXNMb2FkaW5nID0gZmFsc2U7XG5cbiAgICBpZiAod2FzTG9hZGluZyAmJiB0aGlzLnNvdXJjZSlcbiAgICB7XG4gICAgICAgIHRoaXMuc291cmNlLm9ubG9hZCA9IG51bGw7XG4gICAgICAgIHRoaXMuc291cmNlLm9uZXJyb3IgPSBudWxsO1xuICAgIH1cblxuICAgIHRoaXMuc291cmNlID0gc291cmNlO1xuXG4gICAgLy8gQXBwbHkgc291cmNlIGlmIGxvYWRlZC4gT3RoZXJ3aXNlIHNldHVwIGFwcHJvcHJpYXRlIGxvYWRpbmcgbW9uaXRvcnMuXG4gICAgaWYgKCh0aGlzLnNvdXJjZS5jb21wbGV0ZSB8fCB0aGlzLnNvdXJjZS5nZXRDb250ZXh0KSAmJiB0aGlzLnNvdXJjZS53aWR0aCAmJiB0aGlzLnNvdXJjZS5oZWlnaHQpXG4gICAge1xuICAgICAgICB0aGlzLl9zb3VyY2VMb2FkZWQoKTtcbiAgICB9XG4gICAgZWxzZSBpZiAoIXNvdXJjZS5nZXRDb250ZXh0KVxuICAgIHtcblxuICAgICAgICAvLyBJbWFnZSBmYWlsIC8gbm90IHJlYWR5XG4gICAgICAgIHRoaXMuaXNMb2FkaW5nID0gdHJ1ZTtcblxuICAgICAgICB2YXIgc2NvcGUgPSB0aGlzO1xuXG4gICAgICAgIHNvdXJjZS5vbmxvYWQgPSBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICBzb3VyY2Uub25sb2FkID0gbnVsbDtcbiAgICAgICAgICAgIHNvdXJjZS5vbmVycm9yID0gbnVsbDtcblxuICAgICAgICAgICAgaWYgKCFzY29wZS5pc0xvYWRpbmcpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBzY29wZS5pc0xvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgICAgIHNjb3BlLl9zb3VyY2VMb2FkZWQoKTtcblxuICAgICAgICAgICAgc2NvcGUuZW1pdCgnbG9hZGVkJywgc2NvcGUpO1xuICAgICAgICB9O1xuXG4gICAgICAgIHNvdXJjZS5vbmVycm9yID0gZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgc291cmNlLm9ubG9hZCA9IG51bGw7XG4gICAgICAgICAgICBzb3VyY2Uub25lcnJvciA9IG51bGw7XG5cbiAgICAgICAgICAgIGlmICghc2NvcGUuaXNMb2FkaW5nKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgc2NvcGUuaXNMb2FkaW5nID0gZmFsc2U7XG4gICAgICAgICAgICBzY29wZS5lbWl0KCdlcnJvcicsIHNjb3BlKTtcbiAgICAgICAgfTtcblxuICAgICAgICAvLyBQZXIgaHR0cDovL3d3dy53My5vcmcvVFIvaHRtbDUvZW1iZWRkZWQtY29udGVudC0wLmh0bWwjdGhlLWltZy1lbGVtZW50XG4gICAgICAgIC8vICAgXCJUaGUgdmFsdWUgb2YgYGNvbXBsZXRlYCBjYW4gdGh1cyBjaGFuZ2Ugd2hpbGUgYSBzY3JpcHQgaXMgZXhlY3V0aW5nLlwiXG4gICAgICAgIC8vIFNvIGNvbXBsZXRlIG5lZWRzIHRvIGJlIHJlLWNoZWNrZWQgYWZ0ZXIgdGhlIGNhbGxiYWNrcyBoYXZlIGJlZW4gYWRkZWQuLlxuICAgICAgICAvLyBOT1RFOiBjb21wbGV0ZSB3aWxsIGJlIHRydWUgaWYgdGhlIGltYWdlIGhhcyBubyBzcmMgc28gYmVzdCB0byBjaGVjayBpZiB0aGUgc3JjIGlzIHNldC5cbiAgICAgICAgaWYgKHNvdXJjZS5jb21wbGV0ZSAmJiBzb3VyY2Uuc3JjKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmlzTG9hZGluZyA9IGZhbHNlO1xuXG4gICAgICAgICAgICAvLyAuLmFuZCBpZiB3ZSdyZSBjb21wbGV0ZSBub3csIG5vIG5lZWQgZm9yIGNhbGxiYWNrc1xuICAgICAgICAgICAgc291cmNlLm9ubG9hZCA9IG51bGw7XG4gICAgICAgICAgICBzb3VyY2Uub25lcnJvciA9IG51bGw7XG5cbiAgICAgICAgICAgIGlmIChzb3VyY2Uud2lkdGggJiYgc291cmNlLmhlaWdodClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9zb3VyY2VMb2FkZWQoKTtcblxuICAgICAgICAgICAgICAgIC8vIElmIGFueSBwcmV2aW91cyBzdWJzY3JpYmVycyBwb3NzaWJsZVxuICAgICAgICAgICAgICAgIGlmICh3YXNMb2FkaW5nKVxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5lbWl0KCdsb2FkZWQnLCB0aGlzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgLy8gSWYgYW55IHByZXZpb3VzIHN1YnNjcmliZXJzIHBvc3NpYmxlXG4gICAgICAgICAgICAgICAgaWYgKHdhc0xvYWRpbmcpXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmVtaXQoJ2Vycm9yJywgdGhpcyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxufTtcblxuLyoqXG4gKiBVc2VkIGludGVybmFsbHkgdG8gdXBkYXRlIHRoZSB3aWR0aCwgaGVpZ2h0LCBhbmQgc29tZSBvdGhlciB0cmFja2luZyB2YXJzIG9uY2VcbiAqIGEgc291cmNlIGhhcyBzdWNjZXNzZnVsbHkgbG9hZGVkLlxuICpcbiAqIEBwcml2YXRlXG4gKi9cbkJhc2VUZXh0dXJlLnByb3RvdHlwZS5fc291cmNlTG9hZGVkID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLmhhc0xvYWRlZCA9IHRydWU7XG4gICAgdGhpcy51cGRhdGUoKTtcbn07XG5cbi8qKlxuICogRGVzdHJveXMgdGhpcyBiYXNlIHRleHR1cmVcbiAqXG4gKi9cbkJhc2VUZXh0dXJlLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKClcbntcbiAgICBpZiAodGhpcy5pbWFnZVVybClcbiAgICB7XG4gICAgICAgIGRlbGV0ZSB1dGlscy5CYXNlVGV4dHVyZUNhY2hlW3RoaXMuaW1hZ2VVcmxdO1xuICAgICAgICBkZWxldGUgdXRpbHMuVGV4dHVyZUNhY2hlW3RoaXMuaW1hZ2VVcmxdO1xuXG4gICAgICAgIHRoaXMuaW1hZ2VVcmwgPSBudWxsO1xuXG4gICAgICAgIGlmICghbmF2aWdhdG9yLmlzQ29jb29uSlMpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuc291cmNlLnNyYyA9ICcnO1xuICAgICAgICB9XG4gICAgfVxuICAgIGVsc2UgaWYgKHRoaXMuc291cmNlICYmIHRoaXMuc291cmNlLl9waXhpSWQpXG4gICAge1xuICAgICAgICBkZWxldGUgdXRpbHMuQmFzZVRleHR1cmVDYWNoZVt0aGlzLnNvdXJjZS5fcGl4aUlkXTtcbiAgICB9XG5cbiAgICB0aGlzLnNvdXJjZSA9IG51bGw7XG5cbiAgICB0aGlzLmRpc3Bvc2UoKTtcbn07XG5cbi8qKlxuICogRnJlZXMgdGhlIHRleHR1cmUgZnJvbSBXZWJHTCBtZW1vcnkgd2l0aG91dCBkZXN0cm95aW5nIHRoaXMgdGV4dHVyZSBvYmplY3QuXG4gKiBUaGlzIG1lYW5zIHlvdSBjYW4gc3RpbGwgdXNlIHRoZSB0ZXh0dXJlIGxhdGVyIHdoaWNoIHdpbGwgdXBsb2FkIGl0IHRvIEdQVVxuICogbWVtb3J5IGFnYWluLlxuICpcbiAqL1xuQmFzZVRleHR1cmUucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKVxue1xuICAgIHRoaXMuZW1pdCgnZGlzcG9zZScsIHRoaXMpO1xuXG4gICAgLy8gdGhpcyBzaG91bGQgbm8gbG9uZ2VyIGJlIG5lZWRlZCwgdGhlIHJlbmRlcmVycyBzaG91bGQgY2xlYW51cCBhbGwgdGhlIGdsIHRleHR1cmVzLlxuICAgIC8vIHRoaXMuX2dsVGV4dHVyZXMgPSB7fTtcbn07XG5cbi8qKlxuICogQ2hhbmdlcyB0aGUgc291cmNlIGltYWdlIG9mIHRoZSB0ZXh0dXJlLlxuICogVGhlIG9yaWdpbmFsIHNvdXJjZSBtdXN0IGJlIGFuIEltYWdlIGVsZW1lbnQuXG4gKlxuICogQHBhcmFtIG5ld1NyYyB7c3RyaW5nfSB0aGUgcGF0aCBvZiB0aGUgaW1hZ2VcbiAqL1xuQmFzZVRleHR1cmUucHJvdG90eXBlLnVwZGF0ZVNvdXJjZUltYWdlID0gZnVuY3Rpb24gKG5ld1NyYylcbntcbiAgICB0aGlzLnNvdXJjZS5zcmMgPSBuZXdTcmM7XG5cbiAgICB0aGlzLmxvYWRTb3VyY2UodGhpcy5zb3VyY2UpO1xufTtcblxuLyoqXG4gKiBIZWxwZXIgZnVuY3Rpb24gdGhhdCBjcmVhdGVzIGEgYmFzZSB0ZXh0dXJlIGZyb20gdGhlIGdpdmVuIGltYWdlIHVybC5cbiAqIElmIHRoZSBpbWFnZSBpcyBub3QgaW4gdGhlIGJhc2UgdGV4dHVyZSBjYWNoZSBpdCB3aWxsIGJlIGNyZWF0ZWQgYW5kIGxvYWRlZC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAcGFyYW0gaW1hZ2VVcmwge3N0cmluZ30gVGhlIGltYWdlIHVybCBvZiB0aGUgdGV4dHVyZVxuICogQHBhcmFtIFtjcm9zc29yaWdpbj0oYXV0byldIHtib29sZWFufSBTaG91bGQgdXNlIGFub255bW91cyBDT1JTPyBEZWZhdWx0cyB0byB0cnVlIGlmIHRoZSBVUkwgaXMgbm90IGEgZGF0YS1VUkkuXG4gKiBAcGFyYW0gW3NjYWxlTW9kZT1QSVhJLlNDQUxFX01PREVTLkRFRkFVTFRdIHtudW1iZXJ9IFNlZSB7QGxpbmsgUElYSS5TQ0FMRV9NT0RFU30gZm9yIHBvc3NpYmxlIHZhbHVlc1xuICogQHJldHVybiBQSVhJLkJhc2VUZXh0dXJlXG4gKi9cbkJhc2VUZXh0dXJlLmZyb21JbWFnZSA9IGZ1bmN0aW9uIChpbWFnZVVybCwgY3Jvc3NvcmlnaW4sIHNjYWxlTW9kZSlcbntcbiAgICB2YXIgYmFzZVRleHR1cmUgPSB1dGlscy5CYXNlVGV4dHVyZUNhY2hlW2ltYWdlVXJsXTtcblxuICAgIGlmIChjcm9zc29yaWdpbiA9PT0gdW5kZWZpbmVkICYmIGltYWdlVXJsLmluZGV4T2YoJ2RhdGE6JykgIT09IDApXG4gICAge1xuICAgICAgICBjcm9zc29yaWdpbiA9IHRydWU7XG4gICAgfVxuXG4gICAgaWYgKCFiYXNlVGV4dHVyZSlcbiAgICB7XG4gICAgICAgIC8vIG5ldyBJbWFnZSgpIGJyZWFrcyB0ZXggbG9hZGluZyBpbiBzb21lIHZlcnNpb25zIG9mIENocm9tZS5cbiAgICAgICAgLy8gU2VlIGh0dHBzOi8vY29kZS5nb29nbGUuY29tL3AvY2hyb21pdW0vaXNzdWVzL2RldGFpbD9pZD0yMzgwNzFcbiAgICAgICAgdmFyIGltYWdlID0gbmV3IEltYWdlKCk7Ly9kb2N1bWVudC5jcmVhdGVFbGVtZW50KCdpbWcnKTtcbiAgICAgICAgaWYgKGNyb3Nzb3JpZ2luKVxuICAgICAgICB7XG4gICAgICAgICAgICBpbWFnZS5jcm9zc09yaWdpbiA9ICcnO1xuICAgICAgICB9XG5cbiAgICAgICAgYmFzZVRleHR1cmUgPSBuZXcgQmFzZVRleHR1cmUoaW1hZ2UsIHNjYWxlTW9kZSk7XG4gICAgICAgIGJhc2VUZXh0dXJlLmltYWdlVXJsID0gaW1hZ2VVcmw7XG5cbiAgICAgICAgaW1hZ2Uuc3JjID0gaW1hZ2VVcmw7XG5cbiAgICAgICAgdXRpbHMuQmFzZVRleHR1cmVDYWNoZVtpbWFnZVVybF0gPSBiYXNlVGV4dHVyZTtcblxuICAgICAgICAvLyBpZiB0aGVyZSBpcyBhbiBAMnggYXQgdGhlIGVuZCBvZiB0aGUgdXJsIHdlIGFyZSBnb2luZyB0byBhc3N1bWUgaXRzIGEgaGlnaHJlcyBpbWFnZVxuICAgICAgICBiYXNlVGV4dHVyZS5yZXNvbHV0aW9uID0gdXRpbHMuZ2V0UmVzb2x1dGlvbk9mVXJsKGltYWdlVXJsKTtcbiAgICB9XG5cbiAgICByZXR1cm4gYmFzZVRleHR1cmU7XG59O1xuXG4vKipcbiAqIEhlbHBlciBmdW5jdGlvbiB0aGF0IGNyZWF0ZXMgYSBiYXNlIHRleHR1cmUgZnJvbSB0aGUgZ2l2ZW4gY2FudmFzIGVsZW1lbnQuXG4gKlxuICogQHN0YXRpY1xuICogQHBhcmFtIGNhbnZhcyB7Q2FudmFzfSBUaGUgY2FudmFzIGVsZW1lbnQgc291cmNlIG9mIHRoZSB0ZXh0dXJlXG4gKiBAcGFyYW0gc2NhbGVNb2RlIHtudW1iZXJ9IFNlZSB7QGxpbmsgUElYSS5TQ0FMRV9NT0RFU30gZm9yIHBvc3NpYmxlIHZhbHVlc1xuICogQHJldHVybiBQSVhJLkJhc2VUZXh0dXJlXG4gKi9cbkJhc2VUZXh0dXJlLmZyb21DYW52YXMgPSBmdW5jdGlvbiAoY2FudmFzLCBzY2FsZU1vZGUpXG57XG4gICAgaWYgKCFjYW52YXMuX3BpeGlJZClcbiAgICB7XG4gICAgICAgIGNhbnZhcy5fcGl4aUlkID0gJ2NhbnZhc18nICsgdXRpbHMudWlkKCk7XG4gICAgfVxuXG4gICAgdmFyIGJhc2VUZXh0dXJlID0gdXRpbHMuQmFzZVRleHR1cmVDYWNoZVtjYW52YXMuX3BpeGlJZF07XG5cbiAgICBpZiAoIWJhc2VUZXh0dXJlKVxuICAgIHtcbiAgICAgICAgYmFzZVRleHR1cmUgPSBuZXcgQmFzZVRleHR1cmUoY2FudmFzLCBzY2FsZU1vZGUpO1xuICAgICAgICB1dGlscy5CYXNlVGV4dHVyZUNhY2hlW2NhbnZhcy5fcGl4aUlkXSA9IGJhc2VUZXh0dXJlO1xuICAgIH1cblxuICAgIHJldHVybiBiYXNlVGV4dHVyZTtcbn07XG4iLCJ2YXIgQmFzZVRleHR1cmUgPSByZXF1aXJlKCcuL0Jhc2VUZXh0dXJlJyksXG4gICAgVGV4dHVyZSA9IHJlcXVpcmUoJy4vVGV4dHVyZScpLFxuICAgIFJlbmRlclRhcmdldCA9IHJlcXVpcmUoJy4uL3JlbmRlcmVycy93ZWJnbC91dGlscy9SZW5kZXJUYXJnZXQnKSxcbiAgICBGaWx0ZXJNYW5hZ2VyID0gcmVxdWlyZSgnLi4vcmVuZGVyZXJzL3dlYmdsL21hbmFnZXJzL0ZpbHRlck1hbmFnZXInKSxcbiAgICBDYW52YXNCdWZmZXIgPSByZXF1aXJlKCcuLi9yZW5kZXJlcnMvY2FudmFzL3V0aWxzL0NhbnZhc0J1ZmZlcicpLFxuICAgIG1hdGggPSByZXF1aXJlKCcuLi9tYXRoJyksXG4gICAgQ09OU1QgPSByZXF1aXJlKCcuLi9jb25zdCcpLFxuICAgIHRlbXBNYXRyaXggPSBuZXcgbWF0aC5NYXRyaXgoKTtcblxuLyoqXG4gKiBBIFJlbmRlclRleHR1cmUgaXMgYSBzcGVjaWFsIHRleHR1cmUgdGhhdCBhbGxvd3MgYW55IFBpeGkgZGlzcGxheSBvYmplY3QgdG8gYmUgcmVuZGVyZWQgdG8gaXQuXG4gKlxuICogX19IaW50X186IEFsbCBEaXNwbGF5T2JqZWN0cyAoaS5lLiBTcHJpdGVzKSB0aGF0IHJlbmRlciB0byBhIFJlbmRlclRleHR1cmUgc2hvdWxkIGJlIHByZWxvYWRlZFxuICogb3RoZXJ3aXNlIGJsYWNrIHJlY3RhbmdsZXMgd2lsbCBiZSBkcmF3biBpbnN0ZWFkLlxuICpcbiAqIEEgUmVuZGVyVGV4dHVyZSB0YWtlcyBhIHNuYXBzaG90IG9mIGFueSBEaXNwbGF5IE9iamVjdCBnaXZlbiB0byBpdHMgcmVuZGVyIG1ldGhvZC4gVGhlIHBvc2l0aW9uXG4gKiBhbmQgcm90YXRpb24gb2YgdGhlIGdpdmVuIERpc3BsYXkgT2JqZWN0cyBpcyBpZ25vcmVkLiBGb3IgZXhhbXBsZTpcbiAqXG4gKiBgYGBqc1xuICogdmFyIHJlbmRlcmVyID0gUElYSS5hdXRvRGV0ZWN0UmVuZGVyZXIoMTAyNCwgMTAyNCwgeyB2aWV3OiBjYW52YXMsIHJhdGlvOiAxIH0pO1xuICogdmFyIHJlbmRlclRleHR1cmUgPSBuZXcgUElYSS5SZW5kZXJUZXh0dXJlKHJlbmRlcmVyLCA4MDAsIDYwMCk7XG4gKiB2YXIgc3ByaXRlID0gUElYSS5TcHJpdGUuZnJvbUltYWdlKFwic3Bpbk9ial8wMS5wbmdcIik7XG4gKlxuICogc3ByaXRlLnBvc2l0aW9uLnggPSA4MDAvMjtcbiAqIHNwcml0ZS5wb3NpdGlvbi55ID0gNjAwLzI7XG4gKiBzcHJpdGUuYW5jaG9yLnggPSAwLjU7XG4gKiBzcHJpdGUuYW5jaG9yLnkgPSAwLjU7XG4gKlxuICogcmVuZGVyVGV4dHVyZS5yZW5kZXIoc3ByaXRlKTtcbiAqIGBgYFxuICpcbiAqIFRoZSBTcHJpdGUgaW4gdGhpcyBjYXNlIHdpbGwgYmUgcmVuZGVyZWQgdG8gYSBwb3NpdGlvbiBvZiAwLDAuIFRvIHJlbmRlciB0aGlzIHNwcml0ZSBhdCBpdHMgYWN0dWFsXG4gKiBwb3NpdGlvbiBhIENvbnRhaW5lciBzaG91bGQgYmUgdXNlZDpcbiAqXG4gKiBgYGBqc1xuICogdmFyIGRvYyA9IG5ldyBQSVhJLkNvbnRhaW5lcigpO1xuICpcbiAqIGRvYy5hZGRDaGlsZChzcHJpdGUpO1xuICpcbiAqIHJlbmRlclRleHR1cmUucmVuZGVyKGRvYyk7ICAvLyBSZW5kZXJzIHRvIGNlbnRlciBvZiByZW5kZXJUZXh0dXJlXG4gKiBgYGBcbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuVGV4dHVyZVxuICogQG1lbWJlcm9mIFBJWElcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5DYW52YXNSZW5kZXJlcnxQSVhJLldlYkdMUmVuZGVyZXJ9IFRoZSByZW5kZXJlciB1c2VkIGZvciB0aGlzIFJlbmRlclRleHR1cmVcbiAqIEBwYXJhbSBbd2lkdGg9MTAwXSB7bnVtYmVyfSBUaGUgd2lkdGggb2YgdGhlIHJlbmRlciB0ZXh0dXJlXG4gKiBAcGFyYW0gW2hlaWdodD0xMDBdIHtudW1iZXJ9IFRoZSBoZWlnaHQgb2YgdGhlIHJlbmRlciB0ZXh0dXJlXG4gKiBAcGFyYW0gW3NjYWxlTW9kZV0ge251bWJlcn0gU2VlIHtAbGluayBQSVhJLlNDQUxFX01PREVTfSBmb3IgcG9zc2libGUgdmFsdWVzXG4gKiBAcGFyYW0gW3Jlc29sdXRpb249MV0ge251bWJlcn0gVGhlIHJlc29sdXRpb24gb2YgdGhlIHRleHR1cmUgYmVpbmcgZ2VuZXJhdGVkXG4gKi9cbmZ1bmN0aW9uIFJlbmRlclRleHR1cmUocmVuZGVyZXIsIHdpZHRoLCBoZWlnaHQsIHNjYWxlTW9kZSwgcmVzb2x1dGlvbilcbntcbiAgICBpZiAoIXJlbmRlcmVyKVxuICAgIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdVbmFibGUgdG8gY3JlYXRlIFJlbmRlclRleHR1cmUsIHlvdSBtdXN0IHBhc3MgYSByZW5kZXJlciBpbnRvIHRoZSBjb25zdHJ1Y3Rvci4nKTtcbiAgICB9XG5cbiAgICB3aWR0aCA9IHdpZHRoIHx8IDEwMDtcbiAgICBoZWlnaHQgPSBoZWlnaHQgfHwgMTAwO1xuICAgIHJlc29sdXRpb24gPSByZXNvbHV0aW9uIHx8IENPTlNULlJFU09MVVRJT047XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYmFzZSB0ZXh0dXJlIG9iamVjdCB0aGF0IHRoaXMgdGV4dHVyZSB1c2VzXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtCYXNlVGV4dHVyZX1cbiAgICAgKi9cbiAgICB2YXIgYmFzZVRleHR1cmUgPSBuZXcgQmFzZVRleHR1cmUoKTtcbiAgICBiYXNlVGV4dHVyZS53aWR0aCA9IHdpZHRoO1xuICAgIGJhc2VUZXh0dXJlLmhlaWdodCA9IGhlaWdodDtcbiAgICBiYXNlVGV4dHVyZS5yZXNvbHV0aW9uID0gcmVzb2x1dGlvbjtcbiAgICBiYXNlVGV4dHVyZS5zY2FsZU1vZGUgPSBzY2FsZU1vZGUgfHwgQ09OU1QuU0NBTEVfTU9ERVMuREVGQVVMVDtcbiAgICBiYXNlVGV4dHVyZS5oYXNMb2FkZWQgPSB0cnVlO1xuXG5cbiAgICBUZXh0dXJlLmNhbGwodGhpcyxcbiAgICAgICAgYmFzZVRleHR1cmUsXG4gICAgICAgIG5ldyBtYXRoLlJlY3RhbmdsZSgwLCAwLCB3aWR0aCwgaGVpZ2h0KVxuICAgICk7XG5cblxuICAgIC8qKlxuICAgICAqIFRoZSB3aXRoIG9mIHRoZSByZW5kZXIgdGV4dHVyZVxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMud2lkdGggPSB3aWR0aDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBoZWlnaHQgb2YgdGhlIHJlbmRlciB0ZXh0dXJlXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy5oZWlnaHQgPSBoZWlnaHQ7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgUmVzb2x1dGlvbiBvZiB0aGUgdGV4dHVyZS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLnJlc29sdXRpb24gPSByZXNvbHV0aW9uO1xuXG4gICAgLyoqXG4gICAgICogRHJhdy9yZW5kZXIgdGhlIGdpdmVuIERpc3BsYXlPYmplY3Qgb250byB0aGUgdGV4dHVyZS5cbiAgICAgKlxuICAgICAqIFRoZSBkaXNwbGF5T2JqZWN0IGFuZCBkZXNjZW5kZW50cyBhcmUgdHJhbnNmb3JtZWQgZHVyaW5nIHRoaXMgb3BlcmF0aW9uLlxuICAgICAqIElmIGB1cGRhdGVUcmFuc2Zvcm1gIGlzIHRydWUgdGhlbiB0aGUgdHJhbnNmb3JtYXRpb25zIHdpbGwgYmUgcmVzdG9yZWQgYmVmb3JlIHRoZVxuICAgICAqIG1ldGhvZCByZXR1cm5zLiBPdGhlcndpc2UgaXQgaXMgdXAgdG8gdGhlIGNhbGxpbmcgY29kZSB0byBjb3JyZWN0bHkgdXNlIG9yIHJlc2V0XG4gICAgICogdGhlIHRyYW5zZm9ybWVkIGRpc3BsYXkgb2JqZWN0cy5cbiAgICAgKlxuICAgICAqIFRoZSBkaXNwbGF5IG9iamVjdCBpcyBhbHdheXMgcmVuZGVyZWQgd2l0aCBhIHdvcmxkQWxwaGEgdmFsdWUgb2YgMS5cbiAgICAgKlxuICAgICAqIEBtZXRob2RcbiAgICAgKiBAcGFyYW0gZGlzcGxheU9iamVjdCB7UElYSS5EaXNwbGF5T2JqZWN0fSBUaGUgZGlzcGxheSBvYmplY3QgdG8gcmVuZGVyIHRoaXMgdGV4dHVyZSBvblxuICAgICAqIEBwYXJhbSBbbWF0cml4XSB7UElYSS5NYXRyaXh9IE9wdGlvbmFsIG1hdHJpeCB0byBhcHBseSB0byB0aGUgZGlzcGxheSBvYmplY3QgYmVmb3JlIHJlbmRlcmluZy5cbiAgICAgKiBAcGFyYW0gW2NsZWFyPWZhbHNlXSB7Ym9vbGVhbn0gSWYgdHJ1ZSB0aGUgdGV4dHVyZSB3aWxsIGJlIGNsZWFyZWQgYmVmb3JlIHRoZSBkaXNwbGF5T2JqZWN0IGlzIGRyYXduXG4gICAgICogQHBhcmFtIFt1cGRhdGVUcmFuc2Zvcm09dHJ1ZV0ge2Jvb2xlYW59IElmIHRydWUgdGhlIGRpc3BsYXlPYmplY3QncyB3b3JsZFRyYW5zZm9ybS93b3JsZEFscGhhIGFuZCBhbGwgY2hpbGRyZW5cbiAgICAgKiAgdHJhbnNmb3JtYXRpb25zIHdpbGwgYmUgcmVzdG9yZWQuIE5vdCByZXN0b3JpbmcgdGhpcyBpbmZvcm1hdGlvbiB3aWxsIGJlIGEgbGl0dGxlIGZhc3Rlci5cbiAgICAgKi9cbiAgICB0aGlzLnJlbmRlciA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgcmVuZGVyZXIgdGhpcyBSZW5kZXJUZXh0dXJlIHVzZXMuIEEgUmVuZGVyVGV4dHVyZSBjYW4gb25seSBiZWxvbmcgdG8gb25lIHJlbmRlcmVyIGF0IHRoZSBtb21lbnQgaWYgaXRzIHdlYkdMLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5DYW52YXNSZW5kZXJlcnxQSVhJLldlYkdMUmVuZGVyZXJ9XG4gICAgICovXG4gICAgdGhpcy5yZW5kZXJlciA9IHJlbmRlcmVyO1xuXG4gICAgaWYgKHRoaXMucmVuZGVyZXIudHlwZSA9PT0gQ09OU1QuUkVOREVSRVJfVFlQRS5XRUJHTClcbiAgICB7XG4gICAgICAgIHZhciBnbCA9IHRoaXMucmVuZGVyZXIuZ2w7XG5cbiAgICAgICAgdGhpcy50ZXh0dXJlQnVmZmVyID0gbmV3IFJlbmRlclRhcmdldChnbCwgdGhpcy53aWR0aCwgdGhpcy5oZWlnaHQsIGJhc2VUZXh0dXJlLnNjYWxlTW9kZSwgdGhpcy5yZXNvbHV0aW9uKTsvLywgdGhpcy5iYXNlVGV4dHVyZS5zY2FsZU1vZGUpO1xuICAgICAgICB0aGlzLmJhc2VUZXh0dXJlLl9nbFRleHR1cmVzW2dsLmlkXSA9IHRoaXMudGV4dHVyZUJ1ZmZlci50ZXh0dXJlO1xuXG4gICAgICAgIC8vVE9ETyByZWZhY3RvciBmaWx0ZXIgbWFuYWdlci4uIGFzIHJlYWxseSBpdHMgbm8gbG9uZ2VyIGEgbWFuYWdlciBpZiB3ZSB1c2UgaXQgaGVyZS4uXG4gICAgICAgIHRoaXMuZmlsdGVyTWFuYWdlciA9IG5ldyBGaWx0ZXJNYW5hZ2VyKHRoaXMucmVuZGVyZXIpO1xuICAgICAgICB0aGlzLmZpbHRlck1hbmFnZXIub25Db250ZXh0Q2hhbmdlKCk7XG4gICAgICAgIHRoaXMuZmlsdGVyTWFuYWdlci5yZXNpemUod2lkdGgsIGhlaWdodCk7XG4gICAgICAgIHRoaXMucmVuZGVyID0gdGhpcy5yZW5kZXJXZWJHTDtcblxuICAgICAgICAvLyB0aGUgY3JlYXRpb24gb2YgYSBmaWx0ZXIgbWFuYWdlciB1bmJpbmRzIHRoZSBidWZmZXJzLi5cbiAgICAgICAgdGhpcy5yZW5kZXJlci5jdXJyZW50UmVuZGVyZXIuc3RhcnQoKTtcbiAgICAgICAgdGhpcy5yZW5kZXJlci5jdXJyZW50UmVuZGVyVGFyZ2V0LmFjdGl2YXRlKCk7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG5cbiAgICAgICAgdGhpcy5yZW5kZXIgPSB0aGlzLnJlbmRlckNhbnZhcztcbiAgICAgICAgdGhpcy50ZXh0dXJlQnVmZmVyID0gbmV3IENhbnZhc0J1ZmZlcih0aGlzLndpZHRoKiB0aGlzLnJlc29sdXRpb24sIHRoaXMuaGVpZ2h0KiB0aGlzLnJlc29sdXRpb24pO1xuICAgICAgICB0aGlzLmJhc2VUZXh0dXJlLnNvdXJjZSA9IHRoaXMudGV4dHVyZUJ1ZmZlci5jYW52YXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKi9cbiAgICB0aGlzLnZhbGlkID0gdHJ1ZTtcblxuICAgIHRoaXMuX3VwZGF0ZVV2cygpO1xufVxuXG5SZW5kZXJUZXh0dXJlLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoVGV4dHVyZS5wcm90b3R5cGUpO1xuUmVuZGVyVGV4dHVyZS5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBSZW5kZXJUZXh0dXJlO1xubW9kdWxlLmV4cG9ydHMgPSBSZW5kZXJUZXh0dXJlO1xuXG4vKipcbiAqIFJlc2l6ZXMgdGhlIFJlbmRlclRleHR1cmUuXG4gKlxuICogQHBhcmFtIHdpZHRoIHtudW1iZXJ9IFRoZSB3aWR0aCB0byByZXNpemUgdG8uXG4gKiBAcGFyYW0gaGVpZ2h0IHtudW1iZXJ9IFRoZSBoZWlnaHQgdG8gcmVzaXplIHRvLlxuICogQHBhcmFtIHVwZGF0ZUJhc2Uge2Jvb2xlYW59IFNob3VsZCB0aGUgYmFzZVRleHR1cmUud2lkdGggYW5kIGhlaWdodCB2YWx1ZXMgYmUgcmVzaXplZCBhcyB3ZWxsP1xuICovXG5SZW5kZXJUZXh0dXJlLnByb3RvdHlwZS5yZXNpemUgPSBmdW5jdGlvbiAod2lkdGgsIGhlaWdodCwgdXBkYXRlQmFzZSlcbntcbiAgICBpZiAod2lkdGggPT09IHRoaXMud2lkdGggJiYgaGVpZ2h0ID09PSB0aGlzLmhlaWdodClcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLnZhbGlkID0gKHdpZHRoID4gMCAmJiBoZWlnaHQgPiAwKTtcblxuICAgIHRoaXMud2lkdGggPSB0aGlzLl9mcmFtZS53aWR0aCA9IHRoaXMuY3JvcC53aWR0aCA9IHdpZHRoO1xuICAgIHRoaXMuaGVpZ2h0ID0gIHRoaXMuX2ZyYW1lLmhlaWdodCA9IHRoaXMuY3JvcC5oZWlnaHQgPSBoZWlnaHQ7XG5cbiAgICBpZiAodXBkYXRlQmFzZSlcbiAgICB7XG4gICAgICAgIHRoaXMuYmFzZVRleHR1cmUud2lkdGggPSB0aGlzLndpZHRoO1xuICAgICAgICB0aGlzLmJhc2VUZXh0dXJlLmhlaWdodCA9IHRoaXMuaGVpZ2h0O1xuICAgIH1cblxuICAgIGlmICghdGhpcy52YWxpZClcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLnRleHR1cmVCdWZmZXIucmVzaXplKHRoaXMud2lkdGgsIHRoaXMuaGVpZ2h0KTtcblxuICAgIGlmKHRoaXMuZmlsdGVyTWFuYWdlcilcbiAgICB7XG4gICAgICAgIHRoaXMuZmlsdGVyTWFuYWdlci5yZXNpemUodGhpcy53aWR0aCwgdGhpcy5oZWlnaHQpO1xuICAgIH1cbn07XG5cbi8qKlxuICogQ2xlYXJzIHRoZSBSZW5kZXJUZXh0dXJlLlxuICpcbiAqL1xuUmVuZGVyVGV4dHVyZS5wcm90b3R5cGUuY2xlYXIgPSBmdW5jdGlvbiAoKVxue1xuICAgIGlmICghdGhpcy52YWxpZClcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5yZW5kZXJlci50eXBlID09PSBDT05TVC5SRU5ERVJFUl9UWVBFLldFQkdMKVxuICAgIHtcbiAgICAgICAgdGhpcy5yZW5kZXJlci5nbC5iaW5kRnJhbWVidWZmZXIodGhpcy5yZW5kZXJlci5nbC5GUkFNRUJVRkZFUiwgdGhpcy50ZXh0dXJlQnVmZmVyLmZyYW1lQnVmZmVyKTtcbiAgICB9XG5cbiAgICB0aGlzLnRleHR1cmVCdWZmZXIuY2xlYXIoKTtcbn07XG5cbi8qKlxuICogSW50ZXJuYWwgbWV0aG9kIGFzc2lnbmVkIHRvIHRoZSBgcmVuZGVyYCBwcm9wZXJ0eSBpZiB1c2luZyBhIENhbnZhc1JlbmRlcmVyLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0gZGlzcGxheU9iamVjdCB7UElYSS5EaXNwbGF5T2JqZWN0fSBUaGUgZGlzcGxheSBvYmplY3QgdG8gcmVuZGVyIHRoaXMgdGV4dHVyZSBvblxuICogQHBhcmFtIFttYXRyaXhdIHtQSVhJLk1hdHJpeH0gT3B0aW9uYWwgbWF0cml4IHRvIGFwcGx5IHRvIHRoZSBkaXNwbGF5IG9iamVjdCBiZWZvcmUgcmVuZGVyaW5nLlxuICogQHBhcmFtIFtjbGVhcj1mYWxzZV0ge2Jvb2xlYW59IElmIHRydWUgdGhlIHRleHR1cmUgd2lsbCBiZSBjbGVhcmVkIGJlZm9yZSB0aGUgZGlzcGxheU9iamVjdCBpcyBkcmF3blxuICogQHBhcmFtIFt1cGRhdGVUcmFuc2Zvcm09dHJ1ZV0ge2Jvb2xlYW59IElmIHRydWUgdGhlIGRpc3BsYXlPYmplY3QncyB3b3JsZFRyYW5zZm9ybS93b3JsZEFscGhhIGFuZCBhbGwgY2hpbGRyZW5cbiAqICB0cmFuc2Zvcm1hdGlvbnMgd2lsbCBiZSByZXN0b3JlZC4gTm90IHJlc3RvcmluZyB0aGlzIGluZm9ybWF0aW9uIHdpbGwgYmUgYSBsaXR0bGUgZmFzdGVyLlxuICovXG5SZW5kZXJUZXh0dXJlLnByb3RvdHlwZS5yZW5kZXJXZWJHTCA9IGZ1bmN0aW9uIChkaXNwbGF5T2JqZWN0LCBtYXRyaXgsIGNsZWFyLCB1cGRhdGVUcmFuc2Zvcm0pXG57XG4gICAgaWYgKCF0aGlzLnZhbGlkKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuXG4gICAgdXBkYXRlVHJhbnNmb3JtID0gKHVwZGF0ZVRyYW5zZm9ybSAhPT0gdW5kZWZpbmVkKSA/IHVwZGF0ZVRyYW5zZm9ybSA6IHRydWU7Ly8hdXBkYXRlVHJhbnNmb3JtO1xuXG4gICAgdGhpcy50ZXh0dXJlQnVmZmVyLnRyYW5zZm9ybSA9IG1hdHJpeDtcblxuICAgIC8vVE9ETyBub3QgYSBmYW4gdGhhdCB0aGlzIGlzIGhlcmUuLi4gaXQgd2lsbCBtb3ZlIVxuICAgIHRoaXMudGV4dHVyZUJ1ZmZlci5hY3RpdmF0ZSgpO1xuXG4gICAgLy8gc2V0V29ybGQgQWxwaGEgdG8gZW5zdXJlIHRoYXQgdGhlIG9iamVjdCBpcyByZW5kZXJlciBhdCBmdWxsIG9wYWNpdHlcbiAgICBkaXNwbGF5T2JqZWN0LndvcmxkQWxwaGEgPSAxO1xuXG4gICAgaWYgKHVwZGF0ZVRyYW5zZm9ybSlcbiAgICB7XG5cbiAgICAgICAgLy8gcmVzZXQgdGhlIG1hdHJpeCBvZiB0aGUgZGlzcGxhdHlPYmplY3QuLlxuICAgICAgICBkaXNwbGF5T2JqZWN0LndvcmxkVHJhbnNmb3JtLmlkZW50aXR5KCk7XG5cbiAgICAgICAgZGlzcGxheU9iamVjdC5jdXJyZW50Qm91bmRzID0gbnVsbDtcblxuICAgICAgICAvLyBUaW1lIHRvIHVwZGF0ZSBhbGwgdGhlIGNoaWxkcmVuIG9mIHRoZSBkaXNwbGF5T2JqZWN0IHdpdGggdGhlIG5ldyBtYXRyaXguLlxuICAgICAgICB2YXIgY2hpbGRyZW4gPSBkaXNwbGF5T2JqZWN0LmNoaWxkcmVuO1xuICAgICAgICB2YXIgaSwgajtcblxuICAgICAgICBmb3IgKGkgPSAwLCBqID0gY2hpbGRyZW4ubGVuZ3RoOyBpIDwgajsgKytpKVxuICAgICAgICB7XG4gICAgICAgICAgICBjaGlsZHJlbltpXS51cGRhdGVUcmFuc2Zvcm0oKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vVE9ETyByZW5hbWUgdGV4dHVyZUJ1ZmZlciB0byByZW5kZXJUYXJnZXQuLlxuICAgIHZhciB0ZW1wID0gIHRoaXMucmVuZGVyZXIuZmlsdGVyTWFuYWdlcjtcblxuICAgIHRoaXMucmVuZGVyZXIuZmlsdGVyTWFuYWdlciA9IHRoaXMuZmlsdGVyTWFuYWdlcjtcbiAgICB0aGlzLnJlbmRlcmVyLnJlbmRlckRpc3BsYXlPYmplY3QoZGlzcGxheU9iamVjdCwgdGhpcy50ZXh0dXJlQnVmZmVyLCBjbGVhcik7XG5cbiAgICB0aGlzLnJlbmRlcmVyLmZpbHRlck1hbmFnZXIgPSB0ZW1wO1xufTtcblxuXG4vKipcbiAqIEludGVybmFsIG1ldGhvZCBhc3NpZ25lZCB0byB0aGUgYHJlbmRlcmAgcHJvcGVydHkgaWYgdXNpbmcgYSBDYW52YXNSZW5kZXJlci5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIGRpc3BsYXlPYmplY3Qge1BJWEkuRGlzcGxheU9iamVjdH0gVGhlIGRpc3BsYXkgb2JqZWN0IHRvIHJlbmRlciB0aGlzIHRleHR1cmUgb25cbiAqIEBwYXJhbSBbbWF0cml4XSB7UElYSS5NYXRyaXh9IE9wdGlvbmFsIG1hdHJpeCB0byBhcHBseSB0byB0aGUgZGlzcGxheSBvYmplY3QgYmVmb3JlIHJlbmRlcmluZy5cbiAqIEBwYXJhbSBbY2xlYXJdIHtib29sZWFufSBJZiB0cnVlIHRoZSB0ZXh0dXJlIHdpbGwgYmUgY2xlYXJlZCBiZWZvcmUgdGhlIGRpc3BsYXlPYmplY3QgaXMgZHJhd25cbiAqL1xuUmVuZGVyVGV4dHVyZS5wcm90b3R5cGUucmVuZGVyQ2FudmFzID0gZnVuY3Rpb24gKGRpc3BsYXlPYmplY3QsIG1hdHJpeCwgY2xlYXIsIHVwZGF0ZVRyYW5zZm9ybSlcbntcbiAgICBpZiAoIXRoaXMudmFsaWQpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdXBkYXRlVHJhbnNmb3JtID0gISF1cGRhdGVUcmFuc2Zvcm07XG5cbiAgICB2YXIgd3QgPSB0ZW1wTWF0cml4O1xuXG4gICAgd3QuaWRlbnRpdHkoKTtcblxuICAgIGlmIChtYXRyaXgpXG4gICAge1xuICAgICAgICB3dC5hcHBlbmQobWF0cml4KTtcbiAgICB9XG5cbiAgICB2YXIgY2FjaGVkV3QgPSBkaXNwbGF5T2JqZWN0LndvcmxkVHJhbnNmb3JtO1xuICAgIGRpc3BsYXlPYmplY3Qud29ybGRUcmFuc2Zvcm0gPSB3dDtcblxuICAgIC8vIHNldFdvcmxkIEFscGhhIHRvIGVuc3VyZSB0aGF0IHRoZSBvYmplY3QgaXMgcmVuZGVyZXIgYXQgZnVsbCBvcGFjaXR5XG4gICAgZGlzcGxheU9iamVjdC53b3JsZEFscGhhID0gMTtcblxuICAgIC8vIFRpbWUgdG8gdXBkYXRlIGFsbCB0aGUgY2hpbGRyZW4gb2YgdGhlIGRpc3BsYXlPYmplY3Qgd2l0aCB0aGUgbmV3IG1hdHJpeC4uXG4gICAgdmFyIGNoaWxkcmVuID0gZGlzcGxheU9iamVjdC5jaGlsZHJlbjtcbiAgICB2YXIgaSwgajtcblxuICAgIGZvciAoaSA9IDAsIGogPSBjaGlsZHJlbi5sZW5ndGg7IGkgPCBqOyArK2kpXG4gICAge1xuICAgICAgICBjaGlsZHJlbltpXS51cGRhdGVUcmFuc2Zvcm0oKTtcbiAgICB9XG5cbiAgICBpZiAoY2xlYXIpXG4gICAge1xuICAgICAgICB0aGlzLnRleHR1cmVCdWZmZXIuY2xlYXIoKTtcbiAgICB9XG5cblxuLy8gICAgdGhpcy50ZXh0dXJlQnVmZmVyLlxuICAgIHZhciBjb250ZXh0ID0gdGhpcy50ZXh0dXJlQnVmZmVyLmNvbnRleHQ7XG5cbiAgICB2YXIgcmVhbFJlc29sdXRpb24gPSB0aGlzLnJlbmRlcmVyLnJlc29sdXRpb247XG5cbiAgICB0aGlzLnJlbmRlcmVyLnJlc29sdXRpb24gPSB0aGlzLnJlc29sdXRpb247XG5cbiAgICB0aGlzLnJlbmRlcmVyLnJlbmRlckRpc3BsYXlPYmplY3QoZGlzcGxheU9iamVjdCwgY29udGV4dCk7XG5cbiAgICB0aGlzLnJlbmRlcmVyLnJlc29sdXRpb24gPSByZWFsUmVzb2x1dGlvbjtcblxuICAgIGlmKGRpc3BsYXlPYmplY3Qud29ybGRUcmFuc2Zvcm0gPT09IHd0KVxuICAgIHtcbiAgICAgICAgLy8gZml4ZXMgY2FjaGVBc0JpdG1hcCBIYXBwZW5pbmcgZHVyaW5nIHRoZSBhYm92ZS4uXG4gICAgICAgIGRpc3BsYXlPYmplY3Qud29ybGRUcmFuc2Zvcm0gPSBjYWNoZWRXdDtcbiAgICB9XG5cbn07XG5cbi8qKlxuICogRGVzdHJveXMgdGhpcyB0ZXh0dXJlXG4gKlxuICogQHBhcmFtIGRlc3Ryb3lCYXNlIHtib29sZWFufSBXaGV0aGVyIHRvIGRlc3Ryb3kgdGhlIGJhc2UgdGV4dHVyZSBhcyB3ZWxsXG4gKi9cblJlbmRlclRleHR1cmUucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoKVxue1xuICAgIFRleHR1cmUucHJvdG90eXBlLmRlc3Ryb3kuY2FsbCh0aGlzLCB0cnVlKTtcblxuICAgIHRoaXMudGV4dHVyZUJ1ZmZlci5kZXN0cm95KCk7XG5cbiAgICAvLyBkZXN0cm95IHRoZSBmaWx0ZXJtYW5hZ2VyLi5cbiAgICBpZih0aGlzLmZpbHRlck1hbmFnZXIpXG4gICAge1xuICAgICAgICB0aGlzLmZpbHRlck1hbmFnZXIuZGVzdHJveSgpO1xuICAgIH1cblxuICAgIHRoaXMucmVuZGVyZXIgPSBudWxsO1xufTtcblxuLyoqXG4gKiBXaWxsIHJldHVybiBhIEhUTUwgSW1hZ2Ugb2YgdGhlIHRleHR1cmVcbiAqXG4gKiBAcmV0dXJuIHtJbWFnZX1cbiAqL1xuUmVuZGVyVGV4dHVyZS5wcm90b3R5cGUuZ2V0SW1hZ2UgPSBmdW5jdGlvbiAoKVxue1xuICAgIHZhciBpbWFnZSA9IG5ldyBJbWFnZSgpO1xuICAgIGltYWdlLnNyYyA9IHRoaXMuZ2V0QmFzZTY0KCk7XG4gICAgcmV0dXJuIGltYWdlO1xufTtcblxuLyoqXG4gKiBXaWxsIHJldHVybiBhIGEgYmFzZTY0IGVuY29kZWQgc3RyaW5nIG9mIHRoaXMgdGV4dHVyZS4gSXQgd29ya3MgYnkgY2FsbGluZyBSZW5kZXJUZXh0dXJlLmdldENhbnZhcyBhbmQgdGhlbiBydW5uaW5nIHRvRGF0YVVSTCBvbiB0aGF0LlxuICpcbiAqIEByZXR1cm4ge3N0cmluZ30gQSBiYXNlNjQgZW5jb2RlZCBzdHJpbmcgb2YgdGhlIHRleHR1cmUuXG4gKi9cblJlbmRlclRleHR1cmUucHJvdG90eXBlLmdldEJhc2U2NCA9IGZ1bmN0aW9uICgpXG57XG4gICAgcmV0dXJuIHRoaXMuZ2V0Q2FudmFzKCkudG9EYXRhVVJMKCk7XG59O1xuXG4vKipcbiAqIENyZWF0ZXMgYSBDYW52YXMgZWxlbWVudCwgcmVuZGVycyB0aGlzIFJlbmRlclRleHR1cmUgdG8gaXQgYW5kIHRoZW4gcmV0dXJucyBpdC5cbiAqXG4gKiBAcmV0dXJuIHtIVE1MQ2FudmFzRWxlbWVudH0gQSBDYW52YXMgZWxlbWVudCB3aXRoIHRoZSB0ZXh0dXJlIHJlbmRlcmVkIG9uLlxuICovXG5SZW5kZXJUZXh0dXJlLnByb3RvdHlwZS5nZXRDYW52YXMgPSBmdW5jdGlvbiAoKVxue1xuICAgIGlmICh0aGlzLnJlbmRlcmVyLnR5cGUgPT09IENPTlNULlJFTkRFUkVSX1RZUEUuV0VCR0wpXG4gICAge1xuICAgICAgICB2YXIgZ2wgPSB0aGlzLnJlbmRlcmVyLmdsO1xuICAgICAgICB2YXIgd2lkdGggPSB0aGlzLnRleHR1cmVCdWZmZXIuc2l6ZS53aWR0aDtcbiAgICAgICAgdmFyIGhlaWdodCA9IHRoaXMudGV4dHVyZUJ1ZmZlci5zaXplLmhlaWdodDtcblxuICAgICAgICB2YXIgd2ViR0xQaXhlbHMgPSBuZXcgVWludDhBcnJheSg0ICogd2lkdGggKiBoZWlnaHQpO1xuXG4gICAgICAgIGdsLmJpbmRGcmFtZWJ1ZmZlcihnbC5GUkFNRUJVRkZFUiwgdGhpcy50ZXh0dXJlQnVmZmVyLmZyYW1lQnVmZmVyKTtcbiAgICAgICAgZ2wucmVhZFBpeGVscygwLCAwLCB3aWR0aCwgaGVpZ2h0LCBnbC5SR0JBLCBnbC5VTlNJR05FRF9CWVRFLCB3ZWJHTFBpeGVscyk7XG4gICAgICAgIGdsLmJpbmRGcmFtZWJ1ZmZlcihnbC5GUkFNRUJVRkZFUiwgbnVsbCk7XG5cbiAgICAgICAgdmFyIHRlbXBDYW52YXMgPSBuZXcgQ2FudmFzQnVmZmVyKHdpZHRoLCBoZWlnaHQpO1xuICAgICAgICB2YXIgY2FudmFzRGF0YSA9IHRlbXBDYW52YXMuY29udGV4dC5nZXRJbWFnZURhdGEoMCwgMCwgd2lkdGgsIGhlaWdodCk7XG4gICAgICAgIGNhbnZhc0RhdGEuZGF0YS5zZXQod2ViR0xQaXhlbHMpO1xuXG4gICAgICAgIHRlbXBDYW52YXMuY29udGV4dC5wdXRJbWFnZURhdGEoY2FudmFzRGF0YSwgMCwgMCk7XG5cbiAgICAgICAgcmV0dXJuIHRlbXBDYW52YXMuY2FudmFzO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICByZXR1cm4gdGhpcy50ZXh0dXJlQnVmZmVyLmNhbnZhcztcbiAgICB9XG59O1xuXG4vKipcbiAqIFdpbGwgcmV0dXJuIGEgb25lLWRpbWVuc2lvbmFsIGFycmF5IGNvbnRhaW5pbmcgdGhlIHBpeGVsIGRhdGEgb2YgdGhlIGVudGlyZSB0ZXh0dXJlIGluIFJHQkEgb3JkZXIsIHdpdGggaW50ZWdlciB2YWx1ZXMgYmV0d2VlbiAwIGFuZCAyNTUgKGluY2x1ZGVkKS5cbiAqXG4gKiBAcmV0dXJuIHtVaW50OENsYW1wZWRBcnJheX1cbiAqL1xuUmVuZGVyVGV4dHVyZS5wcm90b3R5cGUuZ2V0UGl4ZWxzID0gZnVuY3Rpb24gKClcbntcbiAgICB2YXIgd2lkdGgsIGhlaWdodDtcblxuICAgIGlmICh0aGlzLnJlbmRlcmVyLnR5cGUgPT09IENPTlNULlJFTkRFUkVSX1RZUEUuV0VCR0wpXG4gICAge1xuICAgICAgICB2YXIgZ2wgPSB0aGlzLnJlbmRlcmVyLmdsO1xuICAgICAgICB3aWR0aCA9IHRoaXMudGV4dHVyZUJ1ZmZlci5zaXplLndpZHRoO1xuICAgICAgICBoZWlnaHQgPSB0aGlzLnRleHR1cmVCdWZmZXIuc2l6ZS5oZWlnaHQ7XG5cbiAgICAgICAgdmFyIHdlYkdMUGl4ZWxzID0gbmV3IFVpbnQ4QXJyYXkoNCAqIHdpZHRoICogaGVpZ2h0KTtcblxuICAgICAgICBnbC5iaW5kRnJhbWVidWZmZXIoZ2wuRlJBTUVCVUZGRVIsIHRoaXMudGV4dHVyZUJ1ZmZlci5mcmFtZUJ1ZmZlcik7XG4gICAgICAgIGdsLnJlYWRQaXhlbHMoMCwgMCwgd2lkdGgsIGhlaWdodCwgZ2wuUkdCQSwgZ2wuVU5TSUdORURfQllURSwgd2ViR0xQaXhlbHMpO1xuICAgICAgICBnbC5iaW5kRnJhbWVidWZmZXIoZ2wuRlJBTUVCVUZGRVIsIG51bGwpO1xuXG4gICAgICAgIHJldHVybiB3ZWJHTFBpeGVscztcbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgd2lkdGggPSB0aGlzLnRleHR1cmVCdWZmZXIuY2FudmFzLndpZHRoO1xuICAgICAgICBoZWlnaHQgPSB0aGlzLnRleHR1cmVCdWZmZXIuY2FudmFzLmhlaWdodDtcblxuICAgICAgICByZXR1cm4gdGhpcy50ZXh0dXJlQnVmZmVyLmNhbnZhcy5nZXRDb250ZXh0KCcyZCcpLmdldEltYWdlRGF0YSgwLCAwLCB3aWR0aCwgaGVpZ2h0KS5kYXRhO1xuICAgIH1cbn07XG5cbi8qKlxuICogV2lsbCByZXR1cm4gYSBvbmUtZGltZW5zaW9uYWwgYXJyYXkgY29udGFpbmluZyB0aGUgcGl4ZWwgZGF0YSBvZiBhIHBpeGVsIHdpdGhpbiB0aGUgdGV4dHVyZSBpbiBSR0JBIG9yZGVyLCB3aXRoIGludGVnZXIgdmFsdWVzIGJldHdlZW4gMCBhbmQgMjU1IChpbmNsdWRlZCkuXG4gKlxuICogQHBhcmFtIHgge251bWJlcn0gVGhlIHggY29vcmRpbmF0ZSBvZiB0aGUgcGl4ZWwgdG8gcmV0cmlldmUuXG4gKiBAcGFyYW0geSB7bnVtYmVyfSBUaGUgeSBjb29yZGluYXRlIG9mIHRoZSBwaXhlbCB0byByZXRyaWV2ZS5cbiAqIEByZXR1cm4ge1VpbnQ4Q2xhbXBlZEFycmF5fVxuICovXG5SZW5kZXJUZXh0dXJlLnByb3RvdHlwZS5nZXRQaXhlbCA9IGZ1bmN0aW9uICh4LCB5KVxue1xuICAgIGlmICh0aGlzLnJlbmRlcmVyLnR5cGUgPT09IENPTlNULlJFTkRFUkVSX1RZUEUuV0VCR0wpXG4gICAge1xuICAgICAgICB2YXIgZ2wgPSB0aGlzLnJlbmRlcmVyLmdsO1xuXG4gICAgICAgIHZhciB3ZWJHTFBpeGVscyA9IG5ldyBVaW50OEFycmF5KDQpO1xuXG4gICAgICAgIGdsLmJpbmRGcmFtZWJ1ZmZlcihnbC5GUkFNRUJVRkZFUiwgdGhpcy50ZXh0dXJlQnVmZmVyLmZyYW1lQnVmZmVyKTtcbiAgICAgICAgZ2wucmVhZFBpeGVscyh4LCB5LCAxLCAxLCBnbC5SR0JBLCBnbC5VTlNJR05FRF9CWVRFLCB3ZWJHTFBpeGVscyk7XG4gICAgICAgIGdsLmJpbmRGcmFtZWJ1ZmZlcihnbC5GUkFNRUJVRkZFUiwgbnVsbCk7XG5cbiAgICAgICAgcmV0dXJuIHdlYkdMUGl4ZWxzO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICByZXR1cm4gdGhpcy50ZXh0dXJlQnVmZmVyLmNhbnZhcy5nZXRDb250ZXh0KCcyZCcpLmdldEltYWdlRGF0YSh4LCB5LCAxLCAxKS5kYXRhO1xuICAgIH1cbn07XG4iLCJ2YXIgQmFzZVRleHR1cmUgPSByZXF1aXJlKCcuL0Jhc2VUZXh0dXJlJyksXG4gICAgVmlkZW9CYXNlVGV4dHVyZSA9IHJlcXVpcmUoJy4vVmlkZW9CYXNlVGV4dHVyZScpLFxuICAgIFRleHR1cmVVdnMgPSByZXF1aXJlKCcuL1RleHR1cmVVdnMnKSxcbiAgICBFdmVudEVtaXR0ZXIgPSByZXF1aXJlKCdldmVudGVtaXR0ZXIzJyksXG4gICAgbWF0aCA9IHJlcXVpcmUoJy4uL21hdGgnKSxcbiAgICB1dGlscyA9IHJlcXVpcmUoJy4uL3V0aWxzJyk7XG5cbi8qKlxuICogQSB0ZXh0dXJlIHN0b3JlcyB0aGUgaW5mb3JtYXRpb24gdGhhdCByZXByZXNlbnRzIGFuIGltYWdlIG9yIHBhcnQgb2YgYW4gaW1hZ2UuIEl0IGNhbm5vdCBiZSBhZGRlZFxuICogdG8gdGhlIGRpc3BsYXkgbGlzdCBkaXJlY3RseS4gSW5zdGVhZCB1c2UgaXQgYXMgdGhlIHRleHR1cmUgZm9yIGEgU3ByaXRlLiBJZiBubyBmcmFtZSBpcyBwcm92aWRlZCB0aGVuIHRoZSB3aG9sZSBpbWFnZSBpcyB1c2VkLlxuICpcbiAqIFlvdSBjYW4gZGlyZWN0bHkgY3JlYXRlIGEgdGV4dHVyZSBmcm9tIGFuIGltYWdlIGFuZCB0aGVuIHJldXNlIGl0IG11bHRpcGxlIHRpbWVzIGxpa2UgdGhpcyA6XG4gKlxuICogYGBganNcbiAqIHZhciB0ZXh0dXJlID0gUElYSS5UZXh0dXJlLmZyb21JbWFnZSgnYXNzZXRzL2ltYWdlLnBuZycpO1xuICogdmFyIHNwcml0ZTEgPSBuZXcgUElYSS5TcHJpdGUodGV4dHVyZSk7XG4gKiB2YXIgc3ByaXRlMiA9IG5ldyBQSVhJLlNwcml0ZSh0ZXh0dXJlKTtcbiAqIGBgYFxuICpcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqIEBwYXJhbSBiYXNlVGV4dHVyZSB7UElYSS5CYXNlVGV4dHVyZX0gVGhlIGJhc2UgdGV4dHVyZSBzb3VyY2UgdG8gY3JlYXRlIHRoZSB0ZXh0dXJlIGZyb21cbiAqIEBwYXJhbSBbZnJhbWVdIHtQSVhJLlJlY3RhbmdsZX0gVGhlIHJlY3RhbmdsZSBmcmFtZSBvZiB0aGUgdGV4dHVyZSB0byBzaG93XG4gKiBAcGFyYW0gW2Nyb3BdIHtQSVhJLlJlY3RhbmdsZX0gVGhlIGFyZWEgb2Ygb3JpZ2luYWwgdGV4dHVyZVxuICogQHBhcmFtIFt0cmltXSB7UElYSS5SZWN0YW5nbGV9IFRyaW1tZWQgdGV4dHVyZSByZWN0YW5nbGVcbiAqIEBwYXJhbSBbcm90YXRlXSB7Ym9vbGVhbn0gaW5kaWNhdGVzIHdoZXRoZXIgdGhlIHRleHR1cmUgc2hvdWxkIGJlIHJvdGF0ZWQgYnkgOTAgZGVncmVlcyAoIHVzZWQgYnkgdGV4dHVyZSBwYWNrZXIgKVxuICovXG5mdW5jdGlvbiBUZXh0dXJlKGJhc2VUZXh0dXJlLCBmcmFtZSwgY3JvcCwgdHJpbSwgcm90YXRlKVxue1xuICAgIEV2ZW50RW1pdHRlci5jYWxsKHRoaXMpO1xuXG4gICAgLyoqXG4gICAgICogRG9lcyB0aGlzIFRleHR1cmUgaGF2ZSBhbnkgZnJhbWUgZGF0YSBhc3NpZ25lZCB0byBpdD9cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICovXG4gICAgdGhpcy5ub0ZyYW1lID0gZmFsc2U7XG5cbiAgICBpZiAoIWZyYW1lKVxuICAgIHtcbiAgICAgICAgdGhpcy5ub0ZyYW1lID0gdHJ1ZTtcbiAgICAgICAgZnJhbWUgPSBuZXcgbWF0aC5SZWN0YW5nbGUoMCwgMCwgMSwgMSk7XG4gICAgfVxuXG4gICAgaWYgKGJhc2VUZXh0dXJlIGluc3RhbmNlb2YgVGV4dHVyZSlcbiAgICB7XG4gICAgICAgIGJhc2VUZXh0dXJlID0gYmFzZVRleHR1cmUuYmFzZVRleHR1cmU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhlIGJhc2UgdGV4dHVyZSB0aGF0IHRoaXMgdGV4dHVyZSB1c2VzLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5CYXNlVGV4dHVyZX1cbiAgICAgKi9cbiAgICB0aGlzLmJhc2VUZXh0dXJlID0gYmFzZVRleHR1cmU7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgZnJhbWUgc3BlY2lmaWVzIHRoZSByZWdpb24gb2YgdGhlIGJhc2UgdGV4dHVyZSB0aGF0IHRoaXMgdGV4dHVyZSB1c2VzXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlJlY3RhbmdsZX1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX2ZyYW1lID0gZnJhbWU7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgdGV4dHVyZSB0cmltIGRhdGEuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlJlY3RhbmdsZX1cbiAgICAgKi9cbiAgICB0aGlzLnRyaW0gPSB0cmltO1xuXG4gICAgLyoqXG4gICAgICogVGhpcyB3aWxsIGxldCB0aGUgcmVuZGVyZXIga25vdyBpZiB0aGUgdGV4dHVyZSBpcyB2YWxpZC4gSWYgaXQncyBub3QgdGhlbiBpdCBjYW5ub3QgYmUgcmVuZGVyZWQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqL1xuICAgIHRoaXMudmFsaWQgPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIFRoaXMgd2lsbCBsZXQgYSByZW5kZXJlciBrbm93IHRoYXQgYSB0ZXh0dXJlIGhhcyBiZWVuIHVwZGF0ZWQgKHVzZWQgbWFpbmx5IGZvciB3ZWJHTCB1diB1cGRhdGVzKVxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKi9cbiAgICB0aGlzLnJlcXVpcmVzVXBkYXRlID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgV2ViR0wgVVYgZGF0YSBjYWNoZS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuVGV4dHVyZVV2c31cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX3V2cyA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgd2lkdGggb2YgdGhlIFRleHR1cmUgaW4gcGl4ZWxzLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMud2lkdGggPSAwO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGhlaWdodCBvZiB0aGUgVGV4dHVyZSBpbiBwaXhlbHMuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy5oZWlnaHQgPSAwO1xuXG4gICAgLyoqXG4gICAgICogVGhpcyBpcyB0aGUgYXJlYSBvZiB0aGUgQmFzZVRleHR1cmUgaW1hZ2UgdG8gYWN0dWFsbHkgY29weSB0byB0aGUgQ2FudmFzIC8gV2ViR0wgd2hlbiByZW5kZXJpbmcsXG4gICAgICogaXJyZXNwZWN0aXZlIG9mIHRoZSBhY3R1YWwgZnJhbWUgc2l6ZSBvciBwbGFjZW1lbnQgKHdoaWNoIGNhbiBiZSBpbmZsdWVuY2VkIGJ5IHRyaW1tZWQgdGV4dHVyZSBhdGxhc2VzKVxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5SZWN0YW5nbGV9XG4gICAgICovXG4gICAgdGhpcy5jcm9wID0gY3JvcCB8fCBmcmFtZTsvL25ldyBtYXRoLlJlY3RhbmdsZSgwLCAwLCAxLCAxKTtcblxuICAgIC8qKlxuICAgICAqIEluZGljYXRlcyB3aGV0aGVyIHRoZSB0ZXh0dXJlIHNob3VsZCBiZSByb3RhdGVkIGJ5IDkwIGRlZ3JlZXNcbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKi9cbiAgICB0aGlzLnJvdGF0ZSA9ICEhcm90YXRlO1xuXG4gICAgaWYgKGJhc2VUZXh0dXJlLmhhc0xvYWRlZClcbiAgICB7XG4gICAgICAgIGlmICh0aGlzLm5vRnJhbWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGZyYW1lID0gbmV3IG1hdGguUmVjdGFuZ2xlKDAsIDAsIGJhc2VUZXh0dXJlLndpZHRoLCBiYXNlVGV4dHVyZS5oZWlnaHQpO1xuXG4gICAgICAgICAgICAvLyBpZiB0aGVyZSBpcyBubyBmcmFtZSB3ZSBzaG91bGQgbW9uaXRvciBmb3IgYW55IGJhc2UgdGV4dHVyZSBjaGFuZ2VzLi5cbiAgICAgICAgICAgIGJhc2VUZXh0dXJlLm9uKCd1cGRhdGUnLCB0aGlzLm9uQmFzZVRleHR1cmVVcGRhdGVkLCB0aGlzKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmZyYW1lID0gZnJhbWU7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIGJhc2VUZXh0dXJlLm9uY2UoJ2xvYWRlZCcsIHRoaXMub25CYXNlVGV4dHVyZUxvYWRlZCwgdGhpcyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRmlyZWQgd2hlbiB0aGUgdGV4dHVyZSBpcyB1cGRhdGVkLiBUaGlzIGhhcHBlbnMgaWYgdGhlIGZyYW1lIG9yIHRoZSBiYXNlVGV4dHVyZSBpcyB1cGRhdGVkLlxuICAgICAqXG4gICAgICogQGV2ZW50IHVwZGF0ZVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLlRleHR1cmUjXG4gICAgICogQHByb3RlY3RlZFxuICAgICAqL1xufVxuXG5UZXh0dXJlLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoRXZlbnRFbWl0dGVyLnByb3RvdHlwZSk7XG5UZXh0dXJlLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFRleHR1cmU7XG5tb2R1bGUuZXhwb3J0cyA9IFRleHR1cmU7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKFRleHR1cmUucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogVGhlIGZyYW1lIHNwZWNpZmllcyB0aGUgcmVnaW9uIG9mIHRoZSBiYXNlIHRleHR1cmUgdGhhdCB0aGlzIHRleHR1cmUgdXNlcy5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuUmVjdGFuZ2xlfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLlRleHR1cmUjXG4gICAgICovXG4gICAgZnJhbWU6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fZnJhbWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKGZyYW1lKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLl9mcmFtZSA9IGZyYW1lO1xuXG4gICAgICAgICAgICB0aGlzLm5vRnJhbWUgPSBmYWxzZTtcblxuICAgICAgICAgICAgdGhpcy53aWR0aCA9IGZyYW1lLndpZHRoO1xuICAgICAgICAgICAgdGhpcy5oZWlnaHQgPSBmcmFtZS5oZWlnaHQ7XG5cbiAgICAgICAgICAgIGlmICghdGhpcy50cmltICYmICF0aGlzLnJvdGF0ZSAmJiAoZnJhbWUueCArIGZyYW1lLndpZHRoID4gdGhpcy5iYXNlVGV4dHVyZS53aWR0aCB8fCBmcmFtZS55ICsgZnJhbWUuaGVpZ2h0ID4gdGhpcy5iYXNlVGV4dHVyZS5oZWlnaHQpKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignVGV4dHVyZSBFcnJvcjogZnJhbWUgZG9lcyBub3QgZml0IGluc2lkZSB0aGUgYmFzZSBUZXh0dXJlIGRpbWVuc2lvbnMgJyArIHRoaXMpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvL3RoaXMudmFsaWQgPSBmcmFtZSAmJiBmcmFtZS53aWR0aCAmJiBmcmFtZS5oZWlnaHQgJiYgdGhpcy5iYXNlVGV4dHVyZS5zb3VyY2UgJiYgdGhpcy5iYXNlVGV4dHVyZS5oYXNMb2FkZWQ7XG4gICAgICAgICAgICB0aGlzLnZhbGlkID0gZnJhbWUgJiYgZnJhbWUud2lkdGggJiYgZnJhbWUuaGVpZ2h0ICYmIHRoaXMuYmFzZVRleHR1cmUuaGFzTG9hZGVkO1xuXG4gICAgICAgICAgICBpZiAodGhpcy50cmltKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHRoaXMud2lkdGggPSB0aGlzLnRyaW0ud2lkdGg7XG4gICAgICAgICAgICAgICAgdGhpcy5oZWlnaHQgPSB0aGlzLnRyaW0uaGVpZ2h0O1xuICAgICAgICAgICAgICAgIHRoaXMuX2ZyYW1lLndpZHRoID0gdGhpcy50cmltLndpZHRoO1xuICAgICAgICAgICAgICAgIHRoaXMuX2ZyYW1lLmhlaWdodCA9IHRoaXMudHJpbS5oZWlnaHQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdGhpcy5jcm9wID0gZnJhbWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICh0aGlzLnZhbGlkKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHRoaXMuX3VwZGF0ZVV2cygpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxufSk7XG5cbi8qKlxuICogVXBkYXRlcyB0aGlzIHRleHR1cmUgb24gdGhlIGdwdS5cbiAqXG4gKi9cblRleHR1cmUucHJvdG90eXBlLnVwZGF0ZSA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy5iYXNlVGV4dHVyZS51cGRhdGUoKTtcbn07XG5cbi8qKlxuICogQ2FsbGVkIHdoZW4gdGhlIGJhc2UgdGV4dHVyZSBpcyBsb2FkZWRcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5UZXh0dXJlLnByb3RvdHlwZS5vbkJhc2VUZXh0dXJlTG9hZGVkID0gZnVuY3Rpb24gKGJhc2VUZXh0dXJlKVxue1xuICAgIC8vIFRPRE8gdGhpcyBjb2RlIGxvb2tzIGNvbmZ1c2luZy4uIGJvbyB0byBhYnVzaW5nIGdldHRlcnMgYW5kIHNldHRlcnNzIVxuICAgIGlmICh0aGlzLm5vRnJhbWUpXG4gICAge1xuICAgICAgICB0aGlzLmZyYW1lID0gbmV3IG1hdGguUmVjdGFuZ2xlKDAsIDAsIGJhc2VUZXh0dXJlLndpZHRoLCBiYXNlVGV4dHVyZS5oZWlnaHQpO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICB0aGlzLmZyYW1lID0gdGhpcy5fZnJhbWU7XG4gICAgfVxuXG4gICAgdGhpcy5lbWl0KCd1cGRhdGUnLCB0aGlzKTtcbn07XG5cbi8qKlxuICogQ2FsbGVkIHdoZW4gdGhlIGJhc2UgdGV4dHVyZSBpcyB1cGRhdGVkXG4gKlxuICogQHByaXZhdGVcbiAqL1xuVGV4dHVyZS5wcm90b3R5cGUub25CYXNlVGV4dHVyZVVwZGF0ZWQgPSBmdW5jdGlvbiAoYmFzZVRleHR1cmUpXG57XG4gICAgdGhpcy5fZnJhbWUud2lkdGggPSBiYXNlVGV4dHVyZS53aWR0aDtcbiAgICB0aGlzLl9mcmFtZS5oZWlnaHQgPSBiYXNlVGV4dHVyZS5oZWlnaHQ7XG5cbiAgICB0aGlzLmVtaXQoJ3VwZGF0ZScsIHRoaXMpO1xufTtcblxuLyoqXG4gKiBEZXN0cm95cyB0aGlzIHRleHR1cmVcbiAqXG4gKiBAcGFyYW0gW2Rlc3Ryb3lCYXNlPWZhbHNlXSB7Ym9vbGVhbn0gV2hldGhlciB0byBkZXN0cm95IHRoZSBiYXNlIHRleHR1cmUgYXMgd2VsbFxuICovXG5UZXh0dXJlLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKGRlc3Ryb3lCYXNlKVxue1xuICAgIGlmICh0aGlzLmJhc2VUZXh0dXJlKVxuICAgIHtcbiAgICAgICAgaWYgKGRlc3Ryb3lCYXNlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmJhc2VUZXh0dXJlLmRlc3Ryb3koKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuYmFzZVRleHR1cmUub2ZmKCd1cGRhdGUnLCB0aGlzLm9uQmFzZVRleHR1cmVVcGRhdGVkLCB0aGlzKTtcbiAgICAgICAgdGhpcy5iYXNlVGV4dHVyZS5vZmYoJ2xvYWRlZCcsIHRoaXMub25CYXNlVGV4dHVyZUxvYWRlZCwgdGhpcyk7XG5cbiAgICAgICAgdGhpcy5iYXNlVGV4dHVyZSA9IG51bGw7XG4gICAgfVxuXG4gICAgdGhpcy5fZnJhbWUgPSBudWxsO1xuICAgIHRoaXMuX3V2cyA9IG51bGw7XG4gICAgdGhpcy50cmltID0gbnVsbDtcbiAgICB0aGlzLmNyb3AgPSBudWxsO1xuXG4gICAgdGhpcy52YWxpZCA9IGZhbHNlO1xuXG4gICAgdGhpcy5vZmYoJ2Rpc3Bvc2UnLCB0aGlzLmRpc3Bvc2UsIHRoaXMpO1xuICAgIHRoaXMub2ZmKCd1cGRhdGUnLCB0aGlzLnVwZGF0ZSwgdGhpcyk7XG59O1xuXG4vKipcbiAqIENyZWF0ZXMgYSBuZXcgdGV4dHVyZSBvYmplY3QgdGhhdCBhY3RzIHRoZSBzYW1lIGFzIHRoaXMgb25lLlxuICpcbiAqIEByZXR1cm4ge1BJWEkuVGV4dHVyZX1cbiAqL1xuVGV4dHVyZS5wcm90b3R5cGUuY2xvbmUgPSBmdW5jdGlvbiAoKVxue1xuICAgIHJldHVybiBuZXcgVGV4dHVyZSh0aGlzLmJhc2VUZXh0dXJlLCB0aGlzLmZyYW1lLCB0aGlzLmNyb3AsIHRoaXMudHJpbSwgdGhpcy5yb3RhdGUpO1xufTtcblxuLyoqXG4gKiBVcGRhdGVzIHRoZSBpbnRlcm5hbCBXZWJHTCBVViBjYWNoZS5cbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5UZXh0dXJlLnByb3RvdHlwZS5fdXBkYXRlVXZzID0gZnVuY3Rpb24gKClcbntcbiAgICBpZiAoIXRoaXMuX3V2cylcbiAgICB7XG4gICAgICAgIHRoaXMuX3V2cyA9IG5ldyBUZXh0dXJlVXZzKCk7XG4gICAgfVxuXG4gICAgdGhpcy5fdXZzLnNldCh0aGlzLmNyb3AsIHRoaXMuYmFzZVRleHR1cmUsIHRoaXMucm90YXRlKTtcbn07XG5cbi8qKlxuICogSGVscGVyIGZ1bmN0aW9uIHRoYXQgY3JlYXRlcyBhIFRleHR1cmUgb2JqZWN0IGZyb20gdGhlIGdpdmVuIGltYWdlIHVybC5cbiAqIElmIHRoZSBpbWFnZSBpcyBub3QgaW4gdGhlIHRleHR1cmUgY2FjaGUgaXQgd2lsbCBiZSAgY3JlYXRlZCBhbmQgbG9hZGVkLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBwYXJhbSBpbWFnZVVybCB7c3RyaW5nfSBUaGUgaW1hZ2UgdXJsIG9mIHRoZSB0ZXh0dXJlXG4gKiBAcGFyYW0gY3Jvc3NvcmlnaW4ge2Jvb2xlYW59IFdoZXRoZXIgcmVxdWVzdHMgc2hvdWxkIGJlIHRyZWF0ZWQgYXMgY3Jvc3NvcmlnaW5cbiAqIEBwYXJhbSBzY2FsZU1vZGUge251bWJlcn0gU2VlIHtAbGluayBQSVhJLlNDQUxFX01PREVTfSBmb3IgcG9zc2libGUgdmFsdWVzXG4gKiBAcmV0dXJuIHtQSVhJLlRleHR1cmV9IFRoZSBuZXdseSBjcmVhdGVkIHRleHR1cmVcbiAqL1xuVGV4dHVyZS5mcm9tSW1hZ2UgPSBmdW5jdGlvbiAoaW1hZ2VVcmwsIGNyb3Nzb3JpZ2luLCBzY2FsZU1vZGUpXG57XG4gICAgdmFyIHRleHR1cmUgPSB1dGlscy5UZXh0dXJlQ2FjaGVbaW1hZ2VVcmxdO1xuXG4gICAgaWYgKCF0ZXh0dXJlKVxuICAgIHtcbiAgICAgICAgdGV4dHVyZSA9IG5ldyBUZXh0dXJlKEJhc2VUZXh0dXJlLmZyb21JbWFnZShpbWFnZVVybCwgY3Jvc3NvcmlnaW4sIHNjYWxlTW9kZSkpO1xuICAgICAgICB1dGlscy5UZXh0dXJlQ2FjaGVbaW1hZ2VVcmxdID0gdGV4dHVyZTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGV4dHVyZTtcbn07XG5cbi8qKlxuICogSGVscGVyIGZ1bmN0aW9uIHRoYXQgY3JlYXRlcyBhIHNwcml0ZSB0aGF0IHdpbGwgY29udGFpbiBhIHRleHR1cmUgZnJvbSB0aGUgVGV4dHVyZUNhY2hlIGJhc2VkIG9uIHRoZSBmcmFtZUlkXG4gKiBUaGUgZnJhbWUgaWRzIGFyZSBjcmVhdGVkIHdoZW4gYSBUZXh0dXJlIHBhY2tlciBmaWxlIGhhcyBiZWVuIGxvYWRlZFxuICpcbiAqIEBzdGF0aWNcbiAqIEBwYXJhbSBmcmFtZUlkIHtzdHJpbmd9IFRoZSBmcmFtZSBJZCBvZiB0aGUgdGV4dHVyZSBpbiB0aGUgY2FjaGVcbiAqIEByZXR1cm4ge1BJWEkuVGV4dHVyZX0gVGhlIG5ld2x5IGNyZWF0ZWQgdGV4dHVyZVxuICovXG5UZXh0dXJlLmZyb21GcmFtZSA9IGZ1bmN0aW9uIChmcmFtZUlkKVxue1xuICAgIHZhciB0ZXh0dXJlID0gdXRpbHMuVGV4dHVyZUNhY2hlW2ZyYW1lSWRdO1xuXG4gICAgaWYgKCF0ZXh0dXJlKVxuICAgIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdUaGUgZnJhbWVJZCBcIicgKyBmcmFtZUlkICsgJ1wiIGRvZXMgbm90IGV4aXN0IGluIHRoZSB0ZXh0dXJlIGNhY2hlJyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRleHR1cmU7XG59O1xuXG4vKipcbiAqIEhlbHBlciBmdW5jdGlvbiB0aGF0IGNyZWF0ZXMgYSBuZXcgVGV4dHVyZSBiYXNlZCBvbiB0aGUgZ2l2ZW4gY2FudmFzIGVsZW1lbnQuXG4gKlxuICogQHN0YXRpY1xuICogQHBhcmFtIGNhbnZhcyB7Q2FudmFzfSBUaGUgY2FudmFzIGVsZW1lbnQgc291cmNlIG9mIHRoZSB0ZXh0dXJlXG4gKiBAcGFyYW0gc2NhbGVNb2RlIHtudW1iZXJ9IFNlZSB7QGxpbmsgUElYSS5TQ0FMRV9NT0RFU30gZm9yIHBvc3NpYmxlIHZhbHVlc1xuICogQHJldHVybiB7UElYSS5UZXh0dXJlfVxuICovXG5UZXh0dXJlLmZyb21DYW52YXMgPSBmdW5jdGlvbiAoY2FudmFzLCBzY2FsZU1vZGUpXG57XG4gICAgcmV0dXJuIG5ldyBUZXh0dXJlKEJhc2VUZXh0dXJlLmZyb21DYW52YXMoY2FudmFzLCBzY2FsZU1vZGUpKTtcbn07XG5cbi8qKlxuICogSGVscGVyIGZ1bmN0aW9uIHRoYXQgY3JlYXRlcyBhIG5ldyBUZXh0dXJlIGJhc2VkIG9uIHRoZSBnaXZlbiB2aWRlbyBlbGVtZW50LlxuICpcbiAqIEBzdGF0aWNcbiAqIEBwYXJhbSB2aWRlbyB7SFRNTFZpZGVvRWxlbWVudH1cbiAqIEBwYXJhbSBzY2FsZU1vZGUge251bWJlcn0gU2VlIHtAbGluayBQSVhJLlNDQUxFX01PREVTfSBmb3IgcG9zc2libGUgdmFsdWVzXG4gKiBAcmV0dXJuIHtQSVhJLlRleHR1cmV9IEEgVGV4dHVyZVxuICovXG5UZXh0dXJlLmZyb21WaWRlbyA9IGZ1bmN0aW9uICh2aWRlbywgc2NhbGVNb2RlKVxue1xuICAgIGlmICh0eXBlb2YgdmlkZW8gPT09ICdzdHJpbmcnKVxuICAgIHtcbiAgICAgICAgcmV0dXJuIFRleHR1cmUuZnJvbVZpZGVvVXJsKHZpZGVvLCBzY2FsZU1vZGUpO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICByZXR1cm4gbmV3IFRleHR1cmUoVmlkZW9CYXNlVGV4dHVyZS5mcm9tVmlkZW8odmlkZW8sIHNjYWxlTW9kZSkpO1xuICAgIH1cbn07XG5cbi8qKlxuICogSGVscGVyIGZ1bmN0aW9uIHRoYXQgY3JlYXRlcyBhIG5ldyBUZXh0dXJlIGJhc2VkIG9uIHRoZSB2aWRlbyB1cmwuXG4gKlxuICogQHN0YXRpY1xuICogQHBhcmFtIHZpZGVvVXJsIHtzdHJpbmd9XG4gKiBAcGFyYW0gc2NhbGVNb2RlIHtudW1iZXJ9IFNlZSB7QGxpbmsgUElYSS5TQ0FMRV9NT0RFU30gZm9yIHBvc3NpYmxlIHZhbHVlc1xuICogQHJldHVybiB7UElYSS5UZXh0dXJlfSBBIFRleHR1cmVcbiAqL1xuVGV4dHVyZS5mcm9tVmlkZW9VcmwgPSBmdW5jdGlvbiAodmlkZW9VcmwsIHNjYWxlTW9kZSlcbntcbiAgICByZXR1cm4gbmV3IFRleHR1cmUoVmlkZW9CYXNlVGV4dHVyZS5mcm9tVXJsKHZpZGVvVXJsLCBzY2FsZU1vZGUpKTtcbn07XG5cbi8qKlxuICogQWRkcyBhIHRleHR1cmUgdG8gdGhlIGdsb2JhbCB1dGlscy5UZXh0dXJlQ2FjaGUuIFRoaXMgY2FjaGUgaXMgc2hhcmVkIGFjcm9zcyB0aGUgd2hvbGUgUElYSSBvYmplY3QuXG4gKlxuICogQHN0YXRpY1xuICogQHBhcmFtIHRleHR1cmUge1BJWEkuVGV4dHVyZX0gVGhlIFRleHR1cmUgdG8gYWRkIHRvIHRoZSBjYWNoZS5cbiAqIEBwYXJhbSBpZCB7c3RyaW5nfSBUaGUgaWQgdGhhdCB0aGUgdGV4dHVyZSB3aWxsIGJlIHN0b3JlZCBhZ2FpbnN0LlxuICovXG5UZXh0dXJlLmFkZFRleHR1cmVUb0NhY2hlID0gZnVuY3Rpb24gKHRleHR1cmUsIGlkKVxue1xuICAgIHV0aWxzLlRleHR1cmVDYWNoZVtpZF0gPSB0ZXh0dXJlO1xufTtcblxuLyoqXG4gKiBSZW1vdmUgYSB0ZXh0dXJlIGZyb20gdGhlIGdsb2JhbCB1dGlscy5UZXh0dXJlQ2FjaGUuXG4gKlxuICogQHN0YXRpY1xuICogQHBhcmFtIGlkIHtzdHJpbmd9IFRoZSBpZCBvZiB0aGUgdGV4dHVyZSB0byBiZSByZW1vdmVkXG4gKiBAcmV0dXJuIHtQSVhJLlRleHR1cmV9IFRoZSB0ZXh0dXJlIHRoYXQgd2FzIHJlbW92ZWRcbiAqL1xuVGV4dHVyZS5yZW1vdmVUZXh0dXJlRnJvbUNhY2hlID0gZnVuY3Rpb24gKGlkKVxue1xuICAgIHZhciB0ZXh0dXJlID0gdXRpbHMuVGV4dHVyZUNhY2hlW2lkXTtcblxuICAgIGRlbGV0ZSB1dGlscy5UZXh0dXJlQ2FjaGVbaWRdO1xuICAgIGRlbGV0ZSB1dGlscy5CYXNlVGV4dHVyZUNhY2hlW2lkXTtcblxuICAgIHJldHVybiB0ZXh0dXJlO1xufTtcblxuLyoqXG4gKiBBbiBlbXB0eSB0ZXh0dXJlLCB1c2VkIG9mdGVuIHRvIG5vdCBoYXZlIHRvIGNyZWF0ZSBtdWx0aXBsZSBlbXB0eSB0ZXh0dXJlcy5cbiAqXG4gKiBAc3RhdGljXG4gKiBAY29uc3RhbnRcbiAqL1xuVGV4dHVyZS5FTVBUWSA9IG5ldyBUZXh0dXJlKG5ldyBCYXNlVGV4dHVyZSgpKTtcbiIsIlxuLyoqXG4gKiBBIHN0YW5kYXJkIG9iamVjdCB0byBzdG9yZSB0aGUgVXZzIG9mIGEgdGV4dHVyZVxuICpcbiAqIEBjbGFzc1xuICogQHByaXZhdGVcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKi9cbmZ1bmN0aW9uIFRleHR1cmVVdnMoKVxue1xuICAgIHRoaXMueDAgPSAwO1xuICAgIHRoaXMueTAgPSAwO1xuXG4gICAgdGhpcy54MSA9IDE7XG4gICAgdGhpcy55MSA9IDA7XG5cbiAgICB0aGlzLngyID0gMTtcbiAgICB0aGlzLnkyID0gMTtcblxuICAgIHRoaXMueDMgPSAwO1xuICAgIHRoaXMueTMgPSAxO1xuXG4gICAgdGhpcy54eTBfdWludDMyID0gMDtcbiAgICB0aGlzLnh5MV91aW50MzIgPSAwO1xuICAgIHRoaXMueHkyX3VpbnQzMiA9IDA7XG4gICAgdGhpcy54eTNfdWludDMyID0gMDtcblxuICAgIHRoaXMudXZzX3VpbnQzMiA9IG5ldyBVaW50MzJBcnJheSg0KVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IFRleHR1cmVVdnM7XG5cbi8qKlxuICogU2V0cyB0aGUgdGV4dHVyZSBVdnMgYmFzZWQgb24gdGhlIGdpdmVuIGZyYW1lIGluZm9ybWF0aW9uXG4gKiBAcGFyYW0gZnJhbWUge1BJWEkuUmVjdGFuZ2xlfVxuICogQHBhcmFtIGJhc2VGcmFtZSB7UElYSS5SZWN0YW5nbGV9XG4gKiBAcGFyYW0gcm90YXRlIHtib29sZWFufSBXaGV0aGVyIG9yIG5vdCB0aGUgZnJhbWUgaXMgcm90YXRlZFxuICogQHByaXZhdGVcbiAqL1xuVGV4dHVyZVV2cy5wcm90b3R5cGUuc2V0ID0gZnVuY3Rpb24gKGZyYW1lLCBiYXNlRnJhbWUsIHJvdGF0ZSlcbntcbiAgICB2YXIgdHcgPSBiYXNlRnJhbWUud2lkdGg7XG4gICAgdmFyIHRoID0gYmFzZUZyYW1lLmhlaWdodDtcblxuICAgIGlmKHJvdGF0ZSlcbiAgICB7XG4gICAgICAgIHRoaXMueDAgPSAoZnJhbWUueCArIGZyYW1lLmhlaWdodCkgLyB0dztcbiAgICAgICAgdGhpcy55MCA9IGZyYW1lLnkgLyB0aDtcblxuICAgICAgICB0aGlzLngxID0gKGZyYW1lLnggKyBmcmFtZS5oZWlnaHQpIC8gdHc7XG4gICAgICAgIHRoaXMueTEgPSAoZnJhbWUueSArIGZyYW1lLndpZHRoKSAvIHRoO1xuXG4gICAgICAgIHRoaXMueDIgPSBmcmFtZS54IC8gdHc7XG4gICAgICAgIHRoaXMueTIgPSAoZnJhbWUueSArIGZyYW1lLndpZHRoKSAvIHRoO1xuXG4gICAgICAgIHRoaXMueDMgPSBmcmFtZS54IC8gdHc7XG4gICAgICAgIHRoaXMueTMgPSBmcmFtZS55IC8gdGg7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG5cbiAgICAgICAgdGhpcy54MCA9IGZyYW1lLnggLyB0dztcbiAgICAgICAgdGhpcy55MCA9IGZyYW1lLnkgLyB0aDtcblxuICAgICAgICB0aGlzLngxID0gKGZyYW1lLnggKyBmcmFtZS53aWR0aCkgLyB0dztcbiAgICAgICAgdGhpcy55MSA9IGZyYW1lLnkgLyB0aDtcblxuICAgICAgICB0aGlzLngyID0gKGZyYW1lLnggKyBmcmFtZS53aWR0aCkgLyB0dztcbiAgICAgICAgdGhpcy55MiA9IChmcmFtZS55ICsgZnJhbWUuaGVpZ2h0KSAvIHRoO1xuXG4gICAgICAgIHRoaXMueDMgPSBmcmFtZS54IC8gdHc7XG4gICAgICAgIHRoaXMueTMgPSAoZnJhbWUueSArIGZyYW1lLmhlaWdodCkgLyB0aDtcbiAgICB9XG5cbiAgICB0aGlzLnV2c191aW50MzJbMF0gPSAoKCh0aGlzLnkwICogNjU1MzUpICYgMHhGRkZGKSA8PCAxNikgfCAoKHRoaXMueDAgKiA2NTUzNSkgJiAweEZGRkYpO1xuICAgIHRoaXMudXZzX3VpbnQzMlsxXSA9ICgoKHRoaXMueTEgKiA2NTUzNSkgJiAweEZGRkYpIDw8IDE2KSB8ICgodGhpcy54MSAqIDY1NTM1KSAmIDB4RkZGRik7XG4gICAgdGhpcy51dnNfdWludDMyWzJdID0gKCgodGhpcy55MiAqIDY1NTM1KSAmIDB4RkZGRikgPDwgMTYpIHwgKCh0aGlzLngyICogNjU1MzUpICYgMHhGRkZGKTtcbiAgICB0aGlzLnV2c191aW50MzJbM10gPSAoKCh0aGlzLnkzICogNjU1MzUpICYgMHhGRkZGKSA8PCAxNikgfCAoKHRoaXMueDMgKiA2NTUzNSkgJiAweEZGRkYpO1xufTtcbiIsInZhciBCYXNlVGV4dHVyZSA9IHJlcXVpcmUoJy4vQmFzZVRleHR1cmUnKSxcbiAgICB1dGlscyA9IHJlcXVpcmUoJy4uL3V0aWxzJyk7XG5cbi8qKlxuICogQSB0ZXh0dXJlIG9mIGEgW3BsYXlpbmddIFZpZGVvLlxuICpcbiAqIFZpZGVvIGJhc2UgdGV4dHVyZXMgbWltaWMgUGl4aSBCYXNlVGV4dHVyZS5mcm9tLi4uLiBtZXRob2QgaW4gdGhlaXIgY3JlYXRpb24gcHJvY2Vzcy5cbiAqXG4gKiBUaGlzIGNhbiBiZSB1c2VkIGluIHNldmVyYWwgd2F5cywgc3VjaCBhczpcbiAqXG4gKiBgYGBqc1xuICogdmFyIHRleHR1cmUgPSBQSVhJLlZpZGVvQmFzZVRleHR1cmUuZnJvbVVybCgnaHR0cDovL215ZG9tYWluLmNvbS92aWRlby5tcDQnKTtcbiAqXG4gKiB2YXIgdGV4dHVyZSA9IFBJWEkuVmlkZW9CYXNlVGV4dHVyZS5mcm9tVXJsKHsgc3JjOiAnaHR0cDovL215ZG9tYWluLmNvbS92aWRlby5tcDQnLCBtaW1lOiAndmlkZW8vbXA0JyB9KTtcbiAqXG4gKiB2YXIgdGV4dHVyZSA9IFBJWEkuVmlkZW9CYXNlVGV4dHVyZS5mcm9tVXJscyhbJy92aWRlby53ZWJtJywgJy92aWRlby5tcDQnXSk7XG4gKlxuICogdmFyIHRleHR1cmUgPSBQSVhJLlZpZGVvQmFzZVRleHR1cmUuZnJvbVVybHMoW1xuICogICAgIHsgc3JjOiAnL3ZpZGVvLndlYm0nLCBtaW1lOiAndmlkZW8vd2VibScgfSxcbiAqICAgICB7IHNyYzogJy92aWRlby5tcDQnLCBtaW1lOiAndmlkZW8vbXA0JyB9XG4gKiBdKTtcbiAqIGBgYFxuICpcbiAqIFNlZSB0aGUgW1wiZGV1c1wiIGRlbW9dKGh0dHA6Ly93d3cuZ29vZGJveWRpZ2l0YWwuY29tL3BpeGlqcy9leGFtcGxlcy9kZXVzLykuXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLkJhc2VUZXh0dXJlXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIHNvdXJjZSB7SFRNTFZpZGVvRWxlbWVudH1cbiAqIEBwYXJhbSBbc2NhbGVNb2RlXSB7bnVtYmVyfSBTZWUge0BsaW5rIFBJWEkuU0NBTEVfTU9ERVN9IGZvciBwb3NzaWJsZSB2YWx1ZXNcbiAqL1xuZnVuY3Rpb24gVmlkZW9CYXNlVGV4dHVyZShzb3VyY2UsIHNjYWxlTW9kZSlcbntcbiAgICBpZiAoIXNvdXJjZSlcbiAgICB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignTm8gdmlkZW8gc291cmNlIGVsZW1lbnQgc3BlY2lmaWVkLicpO1xuICAgIH1cblxuICAgIC8vIGhvb2sgaW4gaGVyZSB0byBjaGVjayBpZiB2aWRlbyBpcyBhbHJlYWR5IGF2YWlsYWJsZS5cbiAgICAvLyBCYXNlVGV4dHVyZSBsb29rcyBmb3IgYSBzb3VyY2UuY29tcGxldGUgYm9vbGVhbiwgcGx1cyB3aWR0aCAmIGhlaWdodC5cblxuICAgIGlmICgoc291cmNlLnJlYWR5U3RhdGUgPT09IHNvdXJjZS5IQVZFX0VOT1VHSF9EQVRBIHx8IHNvdXJjZS5yZWFkeVN0YXRlID09PSBzb3VyY2UuSEFWRV9GVVRVUkVfREFUQSkgJiYgc291cmNlLndpZHRoICYmIHNvdXJjZS5oZWlnaHQpXG4gICAge1xuICAgICAgICBzb3VyY2UuY29tcGxldGUgPSB0cnVlO1xuICAgIH1cblxuICAgIEJhc2VUZXh0dXJlLmNhbGwodGhpcywgc291cmNlLCBzY2FsZU1vZGUpO1xuXG4gICAgLyoqXG4gICAgICogU2hvdWxkIHRoZSBiYXNlIHRleHR1cmUgYXV0b21hdGljYWxseSB1cGRhdGUgaXRzZWxmLCBzZXQgdG8gdHJ1ZSBieSBkZWZhdWx0XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqIEBkZWZhdWx0IHRydWVcbiAgICAgKi9cbiAgICB0aGlzLmF1dG9VcGRhdGUgPSBmYWxzZTtcblxuICAgIHRoaXMuX29uVXBkYXRlID0gdGhpcy5fb25VcGRhdGUuYmluZCh0aGlzKTtcbiAgICB0aGlzLl9vbkNhblBsYXkgPSB0aGlzLl9vbkNhblBsYXkuYmluZCh0aGlzKTtcblxuICAgIGlmICghc291cmNlLmNvbXBsZXRlKVxuICAgIHtcbiAgICAgICAgc291cmNlLmFkZEV2ZW50TGlzdGVuZXIoJ2NhbnBsYXknLCB0aGlzLl9vbkNhblBsYXkpO1xuICAgICAgICBzb3VyY2UuYWRkRXZlbnRMaXN0ZW5lcignY2FucGxheXRocm91Z2gnLCB0aGlzLl9vbkNhblBsYXkpO1xuXG4gICAgICAgIC8vIHN0YXJ0ZWQgcGxheWluZy4uXG4gICAgICAgIHNvdXJjZS5hZGRFdmVudExpc3RlbmVyKCdwbGF5JywgdGhpcy5fb25QbGF5U3RhcnQuYmluZCh0aGlzKSk7XG4gICAgICAgIHNvdXJjZS5hZGRFdmVudExpc3RlbmVyKCdwYXVzZScsIHRoaXMuX29uUGxheVN0b3AuYmluZCh0aGlzKSk7XG4gICAgfVxuXG4gICAgdGhpcy5fX2xvYWRlZCA9IGZhbHNlO1xufVxuXG5WaWRlb0Jhc2VUZXh0dXJlLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoQmFzZVRleHR1cmUucHJvdG90eXBlKTtcblZpZGVvQmFzZVRleHR1cmUucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gVmlkZW9CYXNlVGV4dHVyZTtcbm1vZHVsZS5leHBvcnRzID0gVmlkZW9CYXNlVGV4dHVyZTtcblxuLyoqXG4gKiBUaGUgaW50ZXJuYWwgdXBkYXRlIGxvb3Agb2YgdGhlIHZpZGVvIGJhc2UgdGV4dHVyZSwgb25seSBydW5zIHdoZW4gYXV0b1VwZGF0ZSBpcyBzZXQgdG8gdHJ1ZVxuICpcbiAqIEBwcml2YXRlXG4gKi9cblZpZGVvQmFzZVRleHR1cmUucHJvdG90eXBlLl9vblVwZGF0ZSA9IGZ1bmN0aW9uICgpXG57XG4gICAgaWYgKHRoaXMuYXV0b1VwZGF0ZSlcbiAgICB7XG4gICAgICAgIHdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUodGhpcy5fb25VcGRhdGUpO1xuICAgICAgICB0aGlzLnVwZGF0ZSgpO1xuICAgIH1cbn07XG5cbi8qKlxuICogUnVucyB0aGUgdXBkYXRlIGxvb3Agd2hlbiB0aGUgdmlkZW8gaXMgcmVhZHkgdG8gcGxheVxuICpcbiAqIEBwcml2YXRlXG4gKi9cblZpZGVvQmFzZVRleHR1cmUucHJvdG90eXBlLl9vblBsYXlTdGFydCA9IGZ1bmN0aW9uICgpXG57XG4gICAgaWYgKCF0aGlzLmF1dG9VcGRhdGUpXG4gICAge1xuICAgICAgICB3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lKHRoaXMuX29uVXBkYXRlKTtcbiAgICAgICAgdGhpcy5hdXRvVXBkYXRlID0gdHJ1ZTtcbiAgICB9XG59O1xuXG4vKipcbiAqIEZpcmVkIHdoZW4gYSBwYXVzZSBldmVudCBpcyB0cmlnZ2VyZWQsIHN0b3BzIHRoZSB1cGRhdGUgbG9vcFxuICpcbiAqIEBwcml2YXRlXG4gKi9cblZpZGVvQmFzZVRleHR1cmUucHJvdG90eXBlLl9vblBsYXlTdG9wID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLmF1dG9VcGRhdGUgPSBmYWxzZTtcbn07XG5cbi8qKlxuICogRmlyZWQgd2hlbiB0aGUgdmlkZW8gaXMgbG9hZGVkIGFuZCByZWFkeSB0byBwbGF5XG4gKlxuICogQHByaXZhdGVcbiAqL1xuVmlkZW9CYXNlVGV4dHVyZS5wcm90b3R5cGUuX29uQ2FuUGxheSA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy5oYXNMb2FkZWQgPSB0cnVlO1xuXG4gICAgaWYgKHRoaXMuc291cmNlKVxuICAgIHtcbiAgICAgICAgdGhpcy5zb3VyY2UucmVtb3ZlRXZlbnRMaXN0ZW5lcignY2FucGxheScsIHRoaXMuX29uQ2FuUGxheSk7XG4gICAgICAgIHRoaXMuc291cmNlLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2NhbnBsYXl0aHJvdWdoJywgdGhpcy5fb25DYW5QbGF5KTtcblxuICAgICAgICB0aGlzLndpZHRoID0gdGhpcy5zb3VyY2UudmlkZW9XaWR0aDtcbiAgICAgICAgdGhpcy5oZWlnaHQgPSB0aGlzLnNvdXJjZS52aWRlb0hlaWdodDtcblxuICAgICAgICB0aGlzLnNvdXJjZS5wbGF5KCk7XG5cbiAgICAgICAgLy8gcHJldmVudCBtdWx0aXBsZSBsb2FkZWQgZGlzcGF0Y2hlcy4uXG4gICAgICAgIGlmICghdGhpcy5fX2xvYWRlZClcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5fX2xvYWRlZCA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLmVtaXQoJ2xvYWRlZCcsIHRoaXMpO1xuICAgICAgICB9XG4gICAgfVxufTtcblxuLyoqXG4gKiBEZXN0cm95cyB0aGlzIHRleHR1cmVcbiAqXG4gKi9cblZpZGVvQmFzZVRleHR1cmUucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoKVxue1xuICAgIGlmICh0aGlzLnNvdXJjZSAmJiB0aGlzLnNvdXJjZS5fcGl4aUlkKVxuICAgIHtcbiAgICAgICAgZGVsZXRlIHV0aWxzLkJhc2VUZXh0dXJlQ2FjaGVbIHRoaXMuc291cmNlLl9waXhpSWQgXTtcbiAgICAgICAgZGVsZXRlIHRoaXMuc291cmNlLl9waXhpSWQ7XG4gICAgfVxuXG4gICAgQmFzZVRleHR1cmUucHJvdG90eXBlLmRlc3Ryb3kuY2FsbCh0aGlzKTtcbn07XG5cbi8qKlxuICogTWltaWMgUGl4aSBCYXNlVGV4dHVyZS5mcm9tLi4uLiBtZXRob2QuXG4gKlxuICogQHN0YXRpY1xuICogQHBhcmFtIHZpZGVvIHtIVE1MVmlkZW9FbGVtZW50fVxuICogQHBhcmFtIHNjYWxlTW9kZSB7bnVtYmVyfSBTZWUge0BsaW5rIFBJWEkuU0NBTEVfTU9ERVN9IGZvciBwb3NzaWJsZSB2YWx1ZXNcbiAqIEByZXR1cm4ge1BJWEkuVmlkZW9CYXNlVGV4dHVyZX1cbiAqL1xuVmlkZW9CYXNlVGV4dHVyZS5mcm9tVmlkZW8gPSBmdW5jdGlvbiAodmlkZW8sIHNjYWxlTW9kZSlcbntcbiAgICBpZiAoIXZpZGVvLl9waXhpSWQpXG4gICAge1xuICAgICAgICB2aWRlby5fcGl4aUlkID0gJ3ZpZGVvXycgKyB1dGlscy51aWQoKTtcbiAgICB9XG5cbiAgICB2YXIgYmFzZVRleHR1cmUgPSB1dGlscy5CYXNlVGV4dHVyZUNhY2hlW3ZpZGVvLl9waXhpSWRdO1xuXG4gICAgaWYgKCFiYXNlVGV4dHVyZSlcbiAgICB7XG4gICAgICAgIGJhc2VUZXh0dXJlID0gbmV3IFZpZGVvQmFzZVRleHR1cmUodmlkZW8sIHNjYWxlTW9kZSk7XG4gICAgICAgIHV0aWxzLkJhc2VUZXh0dXJlQ2FjaGVbIHZpZGVvLl9waXhpSWQgXSA9IGJhc2VUZXh0dXJlO1xuICAgIH1cblxuICAgIHJldHVybiBiYXNlVGV4dHVyZTtcbn07XG5cbi8qKlxuICogSGVscGVyIGZ1bmN0aW9uIHRoYXQgY3JlYXRlcyBhIG5ldyBCYXNlVGV4dHVyZSBiYXNlZCBvbiB0aGUgZ2l2ZW4gdmlkZW8gZWxlbWVudC5cbiAqIFRoaXMgQmFzZVRleHR1cmUgY2FuIHRoZW4gYmUgdXNlZCB0byBjcmVhdGUgYSB0ZXh0dXJlXG4gKlxuICogQHN0YXRpY1xuICogQHBhcmFtIHZpZGVvU3JjIHtzdHJpbmd8b2JqZWN0fHN0cmluZ1tdfG9iamVjdFtdfSBUaGUgVVJMKHMpIGZvciB0aGUgdmlkZW8uXG4gKiBAcGFyYW0gW3ZpZGVvU3JjLnNyY10ge3N0cmluZ30gT25lIG9mIHRoZSBzb3VyY2UgdXJscyBmb3IgdGhlIHZpZGVvXG4gKiBAcGFyYW0gW3ZpZGVvU3JjLm1pbWVdIHtzdHJpbmd9IFRoZSBtaW1ldHlwZSBvZiB0aGUgdmlkZW8gKGUuZy4gJ3ZpZGVvL21wNCcpLiBJZiBub3Qgc3BlY2lmaWVkXG4gKiAgdGhlIHVybCdzIGV4dGVuc2lvbiB3aWxsIGJlIHVzZWQgYXMgdGhlIHNlY29uZCBwYXJ0IG9mIHRoZSBtaW1lIHR5cGUuXG4gKiBAcGFyYW0gc2NhbGVNb2RlIHtudW1iZXJ9IFNlZSB7QGxpbmsgUElYSS5TQ0FMRV9NT0RFU30gZm9yIHBvc3NpYmxlIHZhbHVlc1xuICogQHJldHVybiB7UElYSS5WaWRlb0Jhc2VUZXh0dXJlfVxuICovXG5WaWRlb0Jhc2VUZXh0dXJlLmZyb21VcmwgPSBmdW5jdGlvbiAodmlkZW9TcmMsIHNjYWxlTW9kZSlcbntcbiAgICB2YXIgdmlkZW8gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd2aWRlbycpO1xuXG4gICAgLy8gYXJyYXkgb2Ygb2JqZWN0cyBvciBzdHJpbmdzXG4gICAgaWYgKEFycmF5LmlzQXJyYXkodmlkZW9TcmMpKVxuICAgIHtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB2aWRlb1NyYy5sZW5ndGg7ICsraSlcbiAgICAgICAge1xuICAgICAgICAgICAgdmlkZW8uYXBwZW5kQ2hpbGQoY3JlYXRlU291cmNlKHZpZGVvU3JjW2ldLnNyYyB8fCB2aWRlb1NyY1tpXSwgdmlkZW9TcmNbaV0ubWltZSkpO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8vIHNpbmdsZSBvYmplY3Qgb3Igc3RyaW5nXG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgdmlkZW8uYXBwZW5kQ2hpbGQoY3JlYXRlU291cmNlKHZpZGVvU3JjLnNyYyB8fCB2aWRlb1NyYywgdmlkZW9TcmMubWltZSkpO1xuICAgIH1cblxuICAgIHZpZGVvLmxvYWQoKTtcbiAgICB2aWRlby5wbGF5KCk7XG5cbiAgICByZXR1cm4gVmlkZW9CYXNlVGV4dHVyZS5mcm9tVmlkZW8odmlkZW8sIHNjYWxlTW9kZSk7XG59O1xuXG5WaWRlb0Jhc2VUZXh0dXJlLmZyb21VcmxzID0gVmlkZW9CYXNlVGV4dHVyZS5mcm9tVXJsO1xuXG5mdW5jdGlvbiBjcmVhdGVTb3VyY2UocGF0aCwgdHlwZSlcbntcbiAgICBpZiAoIXR5cGUpXG4gICAge1xuICAgICAgICB0eXBlID0gJ3ZpZGVvLycgKyBwYXRoLnN1YnN0cihwYXRoLmxhc3RJbmRleE9mKCcuJykgKyAxKTtcbiAgICB9XG5cbiAgICB2YXIgc291cmNlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc291cmNlJyk7XG5cbiAgICBzb3VyY2Uuc3JjID0gcGF0aDtcbiAgICBzb3VyY2UudHlwZSA9IHR5cGU7XG5cbiAgICByZXR1cm4gc291cmNlO1xufVxuIiwidmFyIENPTlNUID0gcmVxdWlyZSgnLi4vY29uc3QnKSxcbiAgICBFdmVudEVtaXR0ZXIgPSByZXF1aXJlKCdldmVudGVtaXR0ZXIzJyksXG4gICAgLy8gSW50ZXJuYWwgZXZlbnQgdXNlZCBieSBjb21wb3NlZCBlbWl0dGVyXG4gICAgVElDSyA9ICd0aWNrJztcblxuLyoqXG4gKiBBIFRpY2tlciBjbGFzcyB0aGF0IHJ1bnMgYW4gdXBkYXRlIGxvb3AgdGhhdCBvdGhlciBvYmplY3RzIGxpc3RlbiB0by5cbiAqIFRoaXMgY2xhc3MgaXMgY29tcG9zZWQgYXJvdW5kIGFuIEV2ZW50RW1pdHRlciBvYmplY3QgdG8gYWRkIGxpc3RlbmVyc1xuICogbWVhbnQgZm9yIGV4ZWN1dGlvbiBvbiB0aGUgbmV4dCByZXF1ZXN0ZWQgYW5pbWF0aW9uIGZyYW1lLlxuICogQW5pbWF0aW9uIGZyYW1lcyBhcmUgcmVxdWVzdGVkIG9ubHkgd2hlbiBuZWNlc3NhcnksXG4gKiBlLmcuIFdoZW4gdGhlIHRpY2tlciBpcyBzdGFydGVkIGFuZCB0aGUgZW1pdHRlciBoYXMgbGlzdGVuZXJzLlxuICpcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWEkudGlja2VyXG4gKi9cbmZ1bmN0aW9uIFRpY2tlcigpXG57XG4gICAgdmFyIF90aGlzID0gdGhpcztcblxuICAgIC8qKlxuICAgICAqIEludGVybmFsIHRpY2sgbWV0aG9kIGJvdW5kIHRvIHRpY2tlciBpbnN0YW5jZS5cbiAgICAgKiBUaGlzIGlzIGJlY2F1c2UgaW4gZWFybHkgMjAxNSwgRnVuY3Rpb24uYmluZFxuICAgICAqIGlzIHN0aWxsIDYwJSBzbG93ZXIgaW4gaGlnaCBwZXJmb3JtYW5jZSBzY2VuYXJpb3MuXG4gICAgICogQWxzbyBzZXBhcmF0aW5nIGZyYW1lIHJlcXVlc3RzIGZyb20gdXBkYXRlIG1ldGhvZFxuICAgICAqIHNvIGxpc3RlbmVycyBtYXkgYmUgY2FsbGVkIGF0IGFueSB0aW1lIGFuZCB3aXRoXG4gICAgICogYW55IGFuaW1hdGlvbiBBUEksIGp1c3QgaW52b2tlIHRpY2tlci51cGRhdGUodGltZSkuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX3RpY2sgPSBmdW5jdGlvbiBfdGljayh0aW1lKSB7XG5cbiAgICAgICAgX3RoaXMuX3JlcXVlc3RJZCA9IG51bGw7XG5cbiAgICAgICAgaWYgKF90aGlzLnN0YXJ0ZWQpXG4gICAgICAgIHtcbiAgICAgICAgICAgIC8vIEludm9rZSBsaXN0ZW5lcnMgbm93XG4gICAgICAgICAgICBfdGhpcy51cGRhdGUodGltZSk7XG4gICAgICAgICAgICAvLyBMaXN0ZW5lciBzaWRlIGVmZmVjdHMgbWF5IGhhdmUgbW9kaWZpZWQgdGlja2VyIHN0YXRlLlxuICAgICAgICAgICAgaWYgKF90aGlzLnN0YXJ0ZWQgJiYgX3RoaXMuX3JlcXVlc3RJZCA9PT0gbnVsbCAmJiBfdGhpcy5fZW1pdHRlci5saXN0ZW5lcnMoVElDSywgdHJ1ZSkpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgX3RoaXMuX3JlcXVlc3RJZCA9IHJlcXVlc3RBbmltYXRpb25GcmFtZShfdGhpcy5fdGljayk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgLyoqXG4gICAgICogSW50ZXJuYWwgZW1pdHRlciB1c2VkIHRvIGZpcmUgJ3RpY2snIGV2ZW50XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9lbWl0dGVyID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gICAgLyoqXG4gICAgICogSW50ZXJuYWwgY3VycmVudCBmcmFtZSByZXF1ZXN0IElEXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9yZXF1ZXN0SWQgPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogSW50ZXJuYWwgdmFsdWUgbWFuYWdlZCBieSBtaW5GUFMgcHJvcGVydHkgc2V0dGVyIGFuZCBnZXR0ZXIuXG4gICAgICogVGhpcyBpcyB0aGUgbWF4aW11bSBhbGxvd2VkIG1pbGxpc2Vjb25kcyBiZXR3ZWVuIHVwZGF0ZXMuXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9tYXhFbGFwc2VkTVMgPSAxMDA7XG5cbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIG9yIG5vdCB0aGlzIHRpY2tlciBzaG91bGQgaW52b2tlIHRoZSBtZXRob2RcbiAgICAgKiB7QGxpbmsgUElYSS50aWNrZXIuVGlja2VyI3N0YXJ0fSBhdXRvbWF0aWNhbGx5XG4gICAgICogd2hlbiBhIGxpc3RlbmVyIGlzIGFkZGVkLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgICAqL1xuICAgIHRoaXMuYXV0b1N0YXJ0ID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBTY2FsYXIgdGltZSB2YWx1ZSBmcm9tIGxhc3QgZnJhbWUgdG8gdGhpcyBmcmFtZS5cbiAgICAgKiBUaGlzIHZhbHVlIGlzIGNhcHBlZCBieSBzZXR0aW5nIHtAbGluayBQSVhJLnRpY2tlci5UaWNrZXIjbWluRlBTfVxuICAgICAqIGFuZCBpcyBzY2FsZWQgd2l0aCB7QGxpbmsgUElYSS50aWNrZXIuVGlja2VyI3NwZWVkfS5cbiAgICAgKiAqKk5vdGU6KiogVGhlIGNhcCBtYXkgYmUgZXhjZWVkZWQgYnkgc2NhbGluZy5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAxXG4gICAgICovXG4gICAgdGhpcy5kZWx0YVRpbWUgPSAxO1xuXG4gICAgLyoqXG4gICAgICogVGltZSBlbGFwc2VkIGluIG1pbGxpc2Vjb25kcyBmcm9tIGxhc3QgZnJhbWUgdG8gdGhpcyBmcmFtZS5cbiAgICAgKiBPcHBvc2VkIHRvIHdoYXQgdGhlIHNjYWxhciB7QGxpbmsgUElYSS50aWNrZXIuVGlja2VyI2RlbHRhVGltZX1cbiAgICAgKiBpcyBiYXNlZCwgdGhpcyB2YWx1ZSBpcyBuZWl0aGVyIGNhcHBlZCBub3Igc2NhbGVkLlxuICAgICAqIElmIHRoZSBwbGF0Zm9ybSBzdXBwb3J0cyBET01IaWdoUmVzVGltZVN0YW1wLFxuICAgICAqIHRoaXMgdmFsdWUgd2lsbCBoYXZlIGEgcHJlY2lzaW9uIG9mIDEgwrVzLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7RE9NSGlnaFJlc1RpbWVTdGFtcHxudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMSAvIFRBUkdFVF9GUE1TXG4gICAgICovXG4gICAgdGhpcy5lbGFwc2VkTVMgPSAxIC8gQ09OU1QuVEFSR0VUX0ZQTVM7IC8vIGRlZmF1bHQgdG8gdGFyZ2V0IGZyYW1lIHRpbWVcblxuICAgIC8qKlxuICAgICAqIFRoZSBsYXN0IHRpbWUge0BsaW5rIFBJWEkudGlja2VyLlRpY2tlciN1cGRhdGV9IHdhcyBpbnZva2VkLlxuICAgICAqIFRoaXMgdmFsdWUgaXMgYWxzbyByZXNldCBpbnRlcm5hbGx5IG91dHNpZGUgb2YgaW52b2tpbmdcbiAgICAgKiB1cGRhdGUsIGJ1dCBvbmx5IHdoZW4gYSBuZXcgYW5pbWF0aW9uIGZyYW1lIGlzIHJlcXVlc3RlZC5cbiAgICAgKiBJZiB0aGUgcGxhdGZvcm0gc3VwcG9ydHMgRE9NSGlnaFJlc1RpbWVTdGFtcCxcbiAgICAgKiB0aGlzIHZhbHVlIHdpbGwgaGF2ZSBhIHByZWNpc2lvbiBvZiAxIMK1cy5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge0RPTUhpZ2hSZXNUaW1lU3RhbXB8bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDBcbiAgICAgKi9cbiAgICB0aGlzLmxhc3RUaW1lID0gMDtcblxuICAgIC8qKlxuICAgICAqIEZhY3RvciBvZiBjdXJyZW50IHtAbGluayBQSVhJLnRpY2tlci5UaWNrZXIjZGVsdGFUaW1lfS5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIC8vIFNjYWxlcyB0aWNrZXIuZGVsdGFUaW1lIHRvIHdoYXQgd291bGQgYmVcbiAgICAgKiAvLyB0aGUgZXF1aXZhbGVudCBvZiBhcHByb3hpbWF0ZWx5IDEyMCBGUFNcbiAgICAgKiB0aWNrZXIuc3BlZWQgPSAyO1xuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDFcbiAgICAgKi9cbiAgICB0aGlzLnNwZWVkID0gMTtcblxuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgb3Igbm90IHRoaXMgdGlja2VyIGhhcyBiZWVuIHN0YXJ0ZWQuXG4gICAgICogYHRydWVgIGlmIHtAbGluayBQSVhJLnRpY2tlci5UaWNrZXIjc3RhcnR9IGhhcyBiZWVuIGNhbGxlZC5cbiAgICAgKiBgZmFsc2VgIGlmIHtAbGluayBQSVhJLnRpY2tlci5UaWNrZXIjc3RvcH0gaGFzIGJlZW4gY2FsbGVkLlxuICAgICAqIFdoaWxlIGBmYWxzZWAsIHRoaXMgdmFsdWUgbWF5IGNoYW5nZSB0byBgdHJ1ZWAgaW4gdGhlXG4gICAgICogZXZlbnQgb2Yge0BsaW5rIFBJWEkudGlja2VyLlRpY2tlciNhdXRvU3RhcnR9IGJlaW5nIGB0cnVlYFxuICAgICAqIGFuZCBhIGxpc3RlbmVyIGlzIGFkZGVkLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgICAqL1xuICAgIHRoaXMuc3RhcnRlZCA9IGZhbHNlO1xufVxuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhUaWNrZXIucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogVGhlIGZyYW1lcyBwZXIgc2Vjb25kIGF0IHdoaWNoIHRoaXMgdGlja2VyIGlzIHJ1bm5pbmcuXG4gICAgICogVGhlIGRlZmF1bHQgaXMgYXBwcm94aW1hdGVseSA2MCBpbiBtb3N0IG1vZGVybiBicm93c2Vycy5cbiAgICAgKiAqKk5vdGU6KiogVGhpcyBkb2VzIG5vdCBmYWN0b3IgaW4gdGhlIHZhbHVlIG9mXG4gICAgICoge0BsaW5rIFBJWEkudGlja2VyLlRpY2tlciNzcGVlZH0sIHdoaWNoIGlzIHNwZWNpZmljXG4gICAgICogdG8gc2NhbGluZyB7QGxpbmsgUElYSS50aWNrZXIuVGlja2VyI2RlbHRhVGltZX0uXG4gICAgICpcbiAgICAgKiBAbWVtYmVyXG4gICAgICogQG1lbWJlcm9mIFBJWEkudGlja2VyLlRpY2tlciNcbiAgICAgKiBAcmVhZG9ubHlcbiAgICAgKi9cbiAgICBGUFM6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbigpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiAxMDAwIC8gdGhpcy5lbGFwc2VkTVM7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogTWFuYWdlcyB0aGUgbWF4aW11bSBhbW91bnQgb2YgbWlsbGlzZWNvbmRzIGFsbG93ZWQgdG9cbiAgICAgKiBlbGFwc2UgYmV0d2VlbiBpbnZva2luZyB7QGxpbmsgUElYSS50aWNrZXIuVGlja2VyI3VwZGF0ZX0uXG4gICAgICogVGhpcyB2YWx1ZSBpcyB1c2VkIHRvIGNhcCB7QGxpbmsgUElYSS50aWNrZXIuVGlja2VyI2RlbHRhVGltZX0sXG4gICAgICogYnV0IGRvZXMgbm90IGVmZmVjdCB0aGUgbWVhc3VyZWQgdmFsdWUgb2Yge0BsaW5rIFBJWEkudGlja2VyLlRpY2tlciNGUFN9LlxuICAgICAqIFdoZW4gc2V0dGluZyB0aGlzIHByb3BlcnR5IGl0IGlzIGNsYW1wZWQgdG8gYSB2YWx1ZSBiZXR3ZWVuXG4gICAgICogYDBgIGFuZCBgUElYSS5UQVJHRVRfRlBNUyAqIDEwMDBgLlxuICAgICAqXG4gICAgICogQG1lbWJlclxuICAgICAqIEBtZW1iZXJvZiBQSVhJLnRpY2tlci5UaWNrZXIjXG4gICAgICogQGRlZmF1bHQgMTBcbiAgICAgKi9cbiAgICBtaW5GUFM6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbigpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiAxMDAwIC8gdGhpcy5fbWF4RWxhcHNlZE1TO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uKGZwcylcbiAgICAgICAge1xuICAgICAgICAgICAgLy8gQ2xhbXA6IDAgdG8gVEFSR0VUX0ZQTVNcbiAgICAgICAgICAgIHZhciBtaW5GUE1TID0gTWF0aC5taW4oTWF0aC5tYXgoMCwgZnBzKSAvIDEwMDAsIENPTlNULlRBUkdFVF9GUE1TKTtcbiAgICAgICAgICAgIHRoaXMuX21heEVsYXBzZWRNUyA9IDEgLyBtaW5GUE1TO1xuICAgICAgICB9XG4gICAgfVxufSk7XG5cbi8qKlxuICogQ29uZGl0aW9uYWxseSByZXF1ZXN0cyBhIG5ldyBhbmltYXRpb24gZnJhbWUuXG4gKiBJZiBhIGZyYW1lIGhhcyBub3QgYWxyZWFkeSBiZWVuIHJlcXVlc3RlZCwgYW5kIGlmIHRoZSBpbnRlcm5hbFxuICogZW1pdHRlciBoYXMgbGlzdGVuZXJzLCBhIG5ldyBmcmFtZSBpcyByZXF1ZXN0ZWQuXG4gKlxuICogQHByaXZhdGVcbiAqL1xuVGlja2VyLnByb3RvdHlwZS5fcmVxdWVzdElmTmVlZGVkID0gZnVuY3Rpb24gX3JlcXVlc3RJZk5lZWRlZCgpXG57XG4gICAgaWYgKHRoaXMuX3JlcXVlc3RJZCA9PT0gbnVsbCAmJiB0aGlzLl9lbWl0dGVyLmxpc3RlbmVycyhUSUNLLCB0cnVlKSlcbiAgICB7XG4gICAgICAgIC8vIGVuc3VyZSBjYWxsYmFja3MgZ2V0IGNvcnJlY3QgZGVsdGFcbiAgICAgICAgdGhpcy5sYXN0VGltZSA9IHBlcmZvcm1hbmNlLm5vdygpO1xuICAgICAgICB0aGlzLl9yZXF1ZXN0SWQgPSByZXF1ZXN0QW5pbWF0aW9uRnJhbWUodGhpcy5fdGljayk7XG4gICAgfVxufTtcblxuLyoqXG4gKiBDb25kaXRpb25hbGx5IGNhbmNlbHMgYSBwZW5kaW5nIGFuaW1hdGlvbiBmcmFtZS5cbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5UaWNrZXIucHJvdG90eXBlLl9jYW5jZWxJZk5lZWRlZCA9IGZ1bmN0aW9uIF9jYW5jZWxJZk5lZWRlZCgpXG57XG4gICAgaWYgKHRoaXMuX3JlcXVlc3RJZCAhPT0gbnVsbClcbiAgICB7XG4gICAgICAgIGNhbmNlbEFuaW1hdGlvbkZyYW1lKHRoaXMuX3JlcXVlc3RJZCk7XG4gICAgICAgIHRoaXMuX3JlcXVlc3RJZCA9IG51bGw7XG4gICAgfVxufTtcblxuLyoqXG4gKiBDb25kaXRpb25hbGx5IHJlcXVlc3RzIGEgbmV3IGFuaW1hdGlvbiBmcmFtZS5cbiAqIElmIHRoZSB0aWNrZXIgaGFzIGJlZW4gc3RhcnRlZCBpdCBjaGVja3MgaWYgYSBmcmFtZSBoYXMgbm90IGFscmVhZHlcbiAqIGJlZW4gcmVxdWVzdGVkLCBhbmQgaWYgdGhlIGludGVybmFsIGVtaXR0ZXIgaGFzIGxpc3RlbmVycy4gSWYgdGhlc2VcbiAqIGNvbmRpdGlvbnMgYXJlIG1ldCwgYSBuZXcgZnJhbWUgaXMgcmVxdWVzdGVkLiBJZiB0aGUgdGlja2VyIGhhcyBub3RcbiAqIGJlZW4gc3RhcnRlZCwgYnV0IGF1dG9TdGFydCBpcyBgdHJ1ZWAsIHRoZW4gdGhlIHRpY2tlciBzdGFydHMgbm93LFxuICogYW5kIGNvbnRpbnVlcyB3aXRoIHRoZSBwcmV2aW91cyBjb25kaXRpb25zIHRvIHJlcXVlc3QgYSBuZXcgZnJhbWUuXG4gKlxuICogQHByaXZhdGVcbiAqL1xuVGlja2VyLnByb3RvdHlwZS5fc3RhcnRJZlBvc3NpYmxlID0gZnVuY3Rpb24gX3N0YXJ0SWZQb3NzaWJsZSgpXG57XG4gICAgaWYgKHRoaXMuc3RhcnRlZClcbiAgICB7XG4gICAgICAgIHRoaXMuX3JlcXVlc3RJZk5lZWRlZCgpO1xuICAgIH1cbiAgICBlbHNlIGlmICh0aGlzLmF1dG9TdGFydClcbiAgICB7XG4gICAgICAgIHRoaXMuc3RhcnQoKTtcbiAgICB9XG59O1xuXG4vKipcbiAqIENhbGxzIHtAbGluayBtb2R1bGU6ZXZlbnRlbWl0dGVyMy5FdmVudEVtaXR0ZXIjb259IGludGVybmFsbHkgZm9yIHRoZVxuICogaW50ZXJuYWwgJ3RpY2snIGV2ZW50LiBJdCBjaGVja3MgaWYgdGhlIGVtaXR0ZXIgaGFzIGxpc3RlbmVycyxcbiAqIGFuZCBpZiBzbyBpdCByZXF1ZXN0cyBhIG5ldyBhbmltYXRpb24gZnJhbWUgYXQgdGhpcyBwb2ludC5cbiAqXG4gKiBAcGFyYW0gZm4ge0Z1bmN0aW9ufSBUaGUgbGlzdGVuZXIgZnVuY3Rpb24gdG8gYmUgYWRkZWQgZm9yIHVwZGF0ZXNcbiAqIEBwYXJhbSBbY29udGV4dF0ge0Z1bmN0aW9ufSBUaGUgbGlzdGVuZXIgY29udGV4dFxuICogQHJldHVybnMge1BJWEkudGlja2VyLlRpY2tlcn0gdGhpc1xuICovXG5UaWNrZXIucHJvdG90eXBlLmFkZCA9IGZ1bmN0aW9uIGFkZChmbiwgY29udGV4dClcbntcbiAgICB0aGlzLl9lbWl0dGVyLm9uKFRJQ0ssIGZuLCBjb250ZXh0KTtcblxuICAgIHRoaXMuX3N0YXJ0SWZQb3NzaWJsZSgpO1xuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIENhbGxzIHtAbGluayBtb2R1bGU6ZXZlbnRlbWl0dGVyMy5FdmVudEVtaXR0ZXIjb25jZX0gaW50ZXJuYWxseSBmb3IgdGhlXG4gKiBpbnRlcm5hbCAndGljaycgZXZlbnQuIEl0IGNoZWNrcyBpZiB0aGUgZW1pdHRlciBoYXMgbGlzdGVuZXJzLFxuICogYW5kIGlmIHNvIGl0IHJlcXVlc3RzIGEgbmV3IGFuaW1hdGlvbiBmcmFtZSBhdCB0aGlzIHBvaW50LlxuICpcbiAqIEBwYXJhbSBmbiB7RnVuY3Rpb259IFRoZSBsaXN0ZW5lciBmdW5jdGlvbiB0byBiZSBhZGRlZCBmb3Igb25lIHVwZGF0ZVxuICogQHBhcmFtIFtjb250ZXh0XSB7RnVuY3Rpb259IFRoZSBsaXN0ZW5lciBjb250ZXh0XG4gKiBAcmV0dXJucyB7UElYSS50aWNrZXIuVGlja2VyfSB0aGlzXG4gKi9cblRpY2tlci5wcm90b3R5cGUuYWRkT25jZSA9IGZ1bmN0aW9uIGFkZE9uY2UoZm4sIGNvbnRleHQpXG57XG4gICAgdGhpcy5fZW1pdHRlci5vbmNlKFRJQ0ssIGZuLCBjb250ZXh0KTtcblxuICAgIHRoaXMuX3N0YXJ0SWZQb3NzaWJsZSgpO1xuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIENhbGxzIHtAbGluayBtb2R1bGU6ZXZlbnRlbWl0dGVyMy5FdmVudEVtaXR0ZXIjb2ZmfSBpbnRlcm5hbGx5IGZvciAndGljaycgZXZlbnQuXG4gKiBJdCBjaGVja3MgaWYgdGhlIGVtaXR0ZXIgaGFzIGxpc3RlbmVycyBmb3IgJ3RpY2snIGV2ZW50LlxuICogSWYgaXQgZG9lcywgdGhlbiBpdCBjYW5jZWxzIHRoZSBhbmltYXRpb24gZnJhbWUuXG4gKlxuICogQHBhcmFtIFtmbl0ge0Z1bmN0aW9ufSBUaGUgbGlzdGVuZXIgZnVuY3Rpb24gdG8gYmUgcmVtb3ZlZFxuICogQHBhcmFtIFtjb250ZXh0XSB7RnVuY3Rpb259IFRoZSBsaXN0ZW5lciBjb250ZXh0IHRvIGJlIHJlbW92ZWRcbiAqIEByZXR1cm5zIHtQSVhJLnRpY2tlci5UaWNrZXJ9IHRoaXNcbiAqL1xuVGlja2VyLnByb3RvdHlwZS5yZW1vdmUgPSBmdW5jdGlvbiByZW1vdmUoZm4sIGNvbnRleHQpXG57XG4gICAgdGhpcy5fZW1pdHRlci5vZmYoVElDSywgZm4sIGNvbnRleHQpO1xuXG4gICAgaWYgKCF0aGlzLl9lbWl0dGVyLmxpc3RlbmVycyhUSUNLLCB0cnVlKSlcbiAgICB7XG4gICAgICAgIHRoaXMuX2NhbmNlbElmTmVlZGVkKCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIFN0YXJ0cyB0aGUgdGlja2VyLiBJZiB0aGUgdGlja2VyIGhhcyBsaXN0ZW5lcnNcbiAqIGEgbmV3IGFuaW1hdGlvbiBmcmFtZSBpcyByZXF1ZXN0ZWQgYXQgdGhpcyBwb2ludC5cbiAqL1xuVGlja2VyLnByb3RvdHlwZS5zdGFydCA9IGZ1bmN0aW9uIHN0YXJ0KClcbntcbiAgICBpZiAoIXRoaXMuc3RhcnRlZClcbiAgICB7XG4gICAgICAgIHRoaXMuc3RhcnRlZCA9IHRydWU7XG4gICAgICAgIHRoaXMuX3JlcXVlc3RJZk5lZWRlZCgpO1xuICAgIH1cbn07XG5cbi8qKlxuICogU3RvcHMgdGhlIHRpY2tlci4gSWYgdGhlIHRpY2tlciBoYXMgcmVxdWVzdGVkXG4gKiBhbiBhbmltYXRpb24gZnJhbWUgaXQgaXMgY2FuY2VsZWQgYXQgdGhpcyBwb2ludC5cbiAqL1xuVGlja2VyLnByb3RvdHlwZS5zdG9wID0gZnVuY3Rpb24gc3RvcCgpXG57XG4gICAgaWYgKHRoaXMuc3RhcnRlZClcbiAgICB7XG4gICAgICAgIHRoaXMuc3RhcnRlZCA9IGZhbHNlO1xuICAgICAgICB0aGlzLl9jYW5jZWxJZk5lZWRlZCgpO1xuICAgIH1cbn07XG5cbi8qKlxuICogVHJpZ2dlcnMgYW4gdXBkYXRlLiBBbiB1cGRhdGUgZW50YWlscyBzZXR0aW5nIHRoZVxuICogY3VycmVudCB7QGxpbmsgUElYSS50aWNrZXIuVGlja2VyI2VsYXBzZWRNU30sXG4gKiB0aGUgY3VycmVudCB7QGxpbmsgUElYSS50aWNrZXIuVGlja2VyI2RlbHRhVGltZX0sXG4gKiBpbnZva2luZyBhbGwgbGlzdGVuZXJzIHdpdGggY3VycmVudCBkZWx0YVRpbWUsXG4gKiBhbmQgdGhlbiBmaW5hbGx5IHNldHRpbmcge0BsaW5rIFBJWEkudGlja2VyLlRpY2tlciNsYXN0VGltZX1cbiAqIHdpdGggdGhlIHZhbHVlIG9mIGN1cnJlbnRUaW1lIHRoYXQgd2FzIHByb3ZpZGVkLlxuICogVGhpcyBtZXRob2Qgd2lsbCBiZSBjYWxsZWQgYXV0b21hdGljYWxseSBieSBhbmltYXRpb25cbiAqIGZyYW1lIGNhbGxiYWNrcyBpZiB0aGUgdGlja2VyIGluc3RhbmNlIGhhcyBiZWVuIHN0YXJ0ZWRcbiAqIGFuZCBsaXN0ZW5lcnMgYXJlIGFkZGVkLlxuICpcbiAqIEBwYXJhbSBbY3VycmVudFRpbWU9cGVyZm9ybWFuY2Uubm93KCldIHtET01IaWdoUmVzVGltZVN0YW1wfG51bWJlcn0gdGhlIGN1cnJlbnQgdGltZSBvZiBleGVjdXRpb25cbiAqL1xuVGlja2VyLnByb3RvdHlwZS51cGRhdGUgPSBmdW5jdGlvbiB1cGRhdGUoY3VycmVudFRpbWUpXG57XG4gICAgdmFyIGVsYXBzZWRNUztcblxuICAgIC8vIEFsbG93IGNhbGxpbmcgdXBkYXRlIGRpcmVjdGx5IHdpdGggZGVmYXVsdCBjdXJyZW50VGltZS5cbiAgICBjdXJyZW50VGltZSA9IGN1cnJlbnRUaW1lIHx8IHBlcmZvcm1hbmNlLm5vdygpO1xuICAgIC8vIFNhdmUgdW5jYXBwZWQgZWxhcHNlZE1TIGZvciBtZWFzdXJlbWVudFxuICAgIGVsYXBzZWRNUyA9IHRoaXMuZWxhcHNlZE1TID0gY3VycmVudFRpbWUgLSB0aGlzLmxhc3RUaW1lO1xuXG4gICAgLy8gY2FwIHRoZSBtaWxsaXNlY29uZHMgZWxhcHNlZCB1c2VkIGZvciBkZWx0YVRpbWVcbiAgICBpZiAoZWxhcHNlZE1TID4gdGhpcy5fbWF4RWxhcHNlZE1TKVxuICAgIHtcbiAgICAgICAgZWxhcHNlZE1TID0gdGhpcy5fbWF4RWxhcHNlZE1TO1xuICAgIH1cblxuICAgIHRoaXMuZGVsdGFUaW1lID0gZWxhcHNlZE1TICogQ09OU1QuVEFSR0VUX0ZQTVMgKiB0aGlzLnNwZWVkO1xuXG4gICAgLy8gSW52b2tlIGxpc3RlbmVycyBhZGRlZCB0byBpbnRlcm5hbCBlbWl0dGVyXG4gICAgdGhpcy5fZW1pdHRlci5lbWl0KFRJQ0ssIHRoaXMuZGVsdGFUaW1lKTtcblxuICAgIHRoaXMubGFzdFRpbWUgPSBjdXJyZW50VGltZTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gVGlja2VyO1xuIiwidmFyIFRpY2tlciA9IHJlcXVpcmUoJy4vVGlja2VyJyk7XG5cbi8qKlxuICogVGhlIHNoYXJlZCB0aWNrZXIgaW5zdGFuY2UgdXNlZCBieSB7QGxpbmsgUElYSS5leHRyYXMuTW92aWVDbGlwfS5cbiAqIGFuZCBieSB7QGxpbmsgUElYSS5pbnRlcmFjdGlvbi5JbnRlcmFjdGlvbk1hbmFnZXJ9LlxuICogVGhlIHByb3BlcnR5IHtAbGluayBQSVhJLnRpY2tlci5UaWNrZXIjYXV0b1N0YXJ0fSBpcyBzZXQgdG8gYHRydWVgXG4gKiBmb3IgdGhpcyBpbnN0YW5jZS4gUGxlYXNlIGZvbGxvdyB0aGUgZXhhbXBsZXMgZm9yIHVzYWdlLCBpbmNsdWRpbmdcbiAqIGhvdyB0byBvcHQtb3V0IG9mIGF1dG8tc3RhcnRpbmcgdGhlIHNoYXJlZCB0aWNrZXIuXG4gKlxuICogQGV4YW1wbGVcbiAqIHZhciB0aWNrZXIgPSBQSVhJLnRpY2tlci5zaGFyZWQ7XG4gKiAvLyBTZXQgdGhpcyB0byBwcmV2ZW50IHN0YXJ0aW5nIHRoaXMgdGlja2VyIHdoZW4gbGlzdGVuZXJzIGFyZSBhZGRlZC5cbiAqIC8vIEJ5IGRlZmF1bHQgdGhpcyBpcyB0cnVlIG9ubHkgZm9yIHRoZSBQSVhJLnRpY2tlci5zaGFyZWQgaW5zdGFuY2UuXG4gKiB0aWNrZXIuYXV0b1N0YXJ0ID0gZmFsc2U7XG4gKiAvLyBGWUksIGNhbGwgdGhpcyB0byBlbnN1cmUgdGhlIHRpY2tlciBpcyBzdG9wcGVkLiBJdCBzaG91bGQgYmUgc3RvcHBlZFxuICogLy8gaWYgeW91IGhhdmUgbm90IGF0dGVtcHRlZCB0byByZW5kZXIgYW55dGhpbmcgeWV0LlxuICogdGlja2VyLnN0b3AoKTtcbiAqIC8vIENhbGwgdGhpcyB3aGVuIHlvdSBhcmUgcmVhZHkgZm9yIGEgcnVubmluZyBzaGFyZWQgdGlja2VyLlxuICogdGlja2VyLnN0YXJ0KCk7XG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIFlvdSBtYXkgdXNlIHRoZSBzaGFyZWQgdGlja2VyIHRvIHJlbmRlci4uLlxuICogdmFyIHJlbmRlcmVyID0gUElYSS5hdXRvRGV0ZWN0UmVuZGVyZXIoODAwLCA2MDApO1xuICogdmFyIHN0YWdlID0gbmV3IFBJWEkuQ29udGFpbmVyKCk7XG4gKiB2YXIgaW50ZXJhY3Rpb25NYW5hZ2VyID0gUElYSS5pbnRlcmFjdGlvbi5JbnRlcmFjdGlvbk1hbmFnZXIocmVuZGVyZXIpO1xuICogZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChyZW5kZXJlci52aWV3KTtcbiAqIHRpY2tlci5hZGQoZnVuY3Rpb24gKHRpbWUpIHtcbiAqICAgICByZW5kZXJlci5yZW5kZXIoc3RhZ2UpO1xuICogfSk7XG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIE9yIHlvdSBjYW4ganVzdCB1cGRhdGUgaXQgbWFudWFsbHkuXG4gKiB0aWNrZXIuYXV0b1N0YXJ0ID0gZmFsc2U7XG4gKiB0aWNrZXIuc3RvcCgpO1xuICogZnVuY3Rpb24gYW5pbWF0ZSh0aW1lKSB7XG4gKiAgICAgdGlja2VyLnVwZGF0ZSh0aW1lKTtcbiAqICAgICByZW5kZXJlci5yZW5kZXIoc3RhZ2UpO1xuICogICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZShhbmltYXRlKTtcbiAqIH1cbiAqIGFuaW1hdGUocGVyZm9ybWFuY2Uubm93KCkpO1xuICpcbiAqIEB0eXBlIHtQSVhJLnRpY2tlci5UaWNrZXJ9XG4gKiBAbWVtYmVyb2YgUElYSS50aWNrZXJcbiAqL1xudmFyIHNoYXJlZCA9IG5ldyBUaWNrZXIoKTtcbnNoYXJlZC5hdXRvU3RhcnQgPSB0cnVlO1xuXG4vKipcbiAqIEBuYW1lc3BhY2UgUElYSS50aWNrZXJcbiAqL1xubW9kdWxlLmV4cG9ydHMgPSB7XG4gICAgc2hhcmVkOiBzaGFyZWQsXG4gICAgVGlja2VyOiBUaWNrZXJcbn07XG4iLCIvKipcbiAqIEdlbmVyaWMgTWFzayBTdGFjayBkYXRhIHN0cnVjdHVyZVxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICovXG5cbnZhciBHTF9NQVAgPSB7fTtcblxuXG52YXIgY3JlYXRlSW5kaWNlc0ZvclF1YWRzID0gZnVuY3Rpb24gKHNpemUpXG57XG4gICAgLy8gdGhlIHRvdGFsIG51bWJlciBvZiBpbmRpY2VzIGluIG91ciBhcnJheSwgdGhlcmUgYXJlIDYgcG9pbnRzIHBlciBxdWFkLlxuICAgXG4gICAgdmFyIHRvdGFsSW5kaWNlcyA9IHNpemUgKiA2O1xuXG4gICAgdmFyIGluZGljZXMgPSBuZXcgVWludDE2QXJyYXkodG90YWxJbmRpY2VzKTtcblxuXHQvLyBmaWxsIHRoZSBpbmRpY2VzIHdpdGggdGhlIHF1YWRzIHRvIGRyYXdcbiAgICBmb3IgKHZhciBpPTAsIGo9MDsgaSA8IHRvdGFsSW5kaWNlczsgaSArPSA2LCBqICs9IDQpXG4gICAge1xuICAgICAgICBpbmRpY2VzW2kgKyAwXSA9IGogKyAwO1xuICAgICAgICBpbmRpY2VzW2kgKyAxXSA9IGogKyAxO1xuICAgICAgICBpbmRpY2VzW2kgKyAyXSA9IGogKyAyO1xuICAgICAgICBpbmRpY2VzW2kgKyAzXSA9IGogKyAwO1xuICAgICAgICBpbmRpY2VzW2kgKyA0XSA9IGogKyAyO1xuICAgICAgICBpbmRpY2VzW2kgKyA1XSA9IGogKyAzO1xuICAgIH1cblxuICAgIHJldHVybiBpbmRpY2VzO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBjcmVhdGVJbmRpY2VzRm9yUXVhZHM7IiwidmFyIENPTlNUID0gcmVxdWlyZSgnLi4vY29uc3QnKTtcblxuLyoqXG4gKiBAbmFtZXNwYWNlIFBJWEkudXRpbHNcbiAqL1xudmFyIHV0aWxzID0gbW9kdWxlLmV4cG9ydHMgPSB7XG4gICAgX3VpZDogMCxcbiAgICBfc2FpZEhlbGxvOiBmYWxzZSxcblxuICAgIEV2ZW50RW1pdHRlcjogICByZXF1aXJlKCdldmVudGVtaXR0ZXIzJyksXG4gICAgcGx1Z2luVGFyZ2V0OiAgIHJlcXVpcmUoJy4vcGx1Z2luVGFyZ2V0JyksXG4gICAgYXN5bmM6ICAgICAgICAgIHJlcXVpcmUoJ2FzeW5jJyksXG5cbiAgICAvKipcbiAgICAgKiBHZXRzIHRoZSBuZXh0IHVuaXF1ZSBpZGVudGlmaWVyXG4gICAgICpcbiAgICAgKiBAcmV0dXJuIHtudW1iZXJ9IFRoZSBuZXh0IHVuaXF1ZSBpZGVudGlmaWVyIHRvIHVzZS5cbiAgICAgKi9cbiAgICB1aWQ6IGZ1bmN0aW9uICgpXG4gICAge1xuICAgICAgICByZXR1cm4gKyt1dGlscy5fdWlkO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBDb252ZXJ0cyBhIGhleCBjb2xvciBudW1iZXIgdG8gYW4gW1IsIEcsIEJdIGFycmF5XG4gICAgICpcbiAgICAgKiBAcGFyYW0gaGV4IHtudW1iZXJ9XG4gICAgICogQHBhcmFtICB7bnVtYmVyW119IFtvdXQ9W11dXG4gICAgICogQHJldHVybiB7bnVtYmVyW119IEFuIGFycmF5IHJlcHJlc2VudGluZyB0aGUgW1IsIEcsIEJdIG9mIHRoZSBjb2xvci5cbiAgICAgKi9cbiAgICBoZXgycmdiOiBmdW5jdGlvbiAoaGV4LCBvdXQpXG4gICAge1xuICAgICAgICBvdXQgPSBvdXQgfHwgW107XG5cbiAgICAgICAgb3V0WzBdID0gKGhleCA+PiAxNiAmIDB4RkYpIC8gMjU1O1xuICAgICAgICBvdXRbMV0gPSAoaGV4ID4+IDggJiAweEZGKSAvIDI1NTtcbiAgICAgICAgb3V0WzJdID0gKGhleCAmIDB4RkYpIC8gMjU1O1xuXG4gICAgICAgIHJldHVybiBvdXQ7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIENvbnZlcnRzIGEgaGV4IGNvbG9yIG51bWJlciB0byBhIHN0cmluZy5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBoZXgge251bWJlcn1cbiAgICAgKiBAcmV0dXJuIHtzdHJpbmd9IFRoZSBzdHJpbmcgY29sb3IuXG4gICAgICovXG4gICAgaGV4MnN0cmluZzogZnVuY3Rpb24gKGhleClcbiAgICB7XG4gICAgICAgIGhleCA9IGhleC50b1N0cmluZygxNik7XG4gICAgICAgIGhleCA9ICcwMDAwMDAnLnN1YnN0cigwLCA2IC0gaGV4Lmxlbmd0aCkgKyBoZXg7XG5cbiAgICAgICAgcmV0dXJuICcjJyArIGhleDtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQ29udmVydHMgYSBjb2xvciBhcyBhbiBbUiwgRywgQl0gYXJyYXkgdG8gYSBoZXggbnVtYmVyXG4gICAgICpcbiAgICAgKiBAcGFyYW0gcmdiIHtudW1iZXJbXX1cbiAgICAgKiBAcmV0dXJuIHtudW1iZXJ9IFRoZSBjb2xvciBudW1iZXJcbiAgICAgKi9cbiAgICByZ2IyaGV4OiBmdW5jdGlvbiAocmdiKVxuICAgIHtcbiAgICAgICAgcmV0dXJuICgocmdiWzBdKjI1NSA8PCAxNikgKyAocmdiWzFdKjI1NSA8PCA4KSArIHJnYlsyXSoyNTUpO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBDaGVja3Mgd2hldGhlciB0aGUgQ2FudmFzIEJsZW5kTW9kZXMgYXJlIHN1cHBvcnRlZCBieSB0aGUgY3VycmVudCBicm93c2VyXG4gICAgICpcbiAgICAgKiBAcmV0dXJuIHtib29sZWFufSB3aGV0aGVyIHRoZXkgYXJlIHN1cHBvcnRlZFxuICAgICAqL1xuICAgIGNhblVzZU5ld0NhbnZhc0JsZW5kTW9kZXM6IGZ1bmN0aW9uICgpXG4gICAge1xuICAgICAgICBpZiAodHlwZW9mIGRvY3VtZW50ID09PSAndW5kZWZpbmVkJylcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIHBuZ0hlYWQgPSAnZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFBUUFBQUFCQVFNQUFBREQ4cDJPQUFBQUExQk1WRVgvJztcbiAgICAgICAgdmFyIHBuZ0VuZCA9ICdBQUFBQ2tsRVFWUUkxMk5nQUFBQUFnQUI0aUc4TXdBQUFBQkpSVTVFcmtKZ2dnPT0nO1xuXG4gICAgICAgIHZhciBtYWdlbnRhID0gbmV3IEltYWdlKCk7XG4gICAgICAgIG1hZ2VudGEuc3JjID0gcG5nSGVhZCArICdBUDgwNE9hNicgKyBwbmdFbmQ7XG5cbiAgICAgICAgdmFyIHllbGxvdyA9IG5ldyBJbWFnZSgpO1xuICAgICAgICB5ZWxsb3cuc3JjID0gcG5nSGVhZCArICcvd0NLeHZSRicgKyBwbmdFbmQ7XG5cbiAgICAgICAgdmFyIGNhbnZhcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NhbnZhcycpO1xuICAgICAgICBjYW52YXMud2lkdGggPSA2O1xuICAgICAgICBjYW52YXMuaGVpZ2h0ID0gMTtcblxuICAgICAgICB2YXIgY29udGV4dCA9IGNhbnZhcy5nZXRDb250ZXh0KCcyZCcpO1xuICAgICAgICBjb250ZXh0Lmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbiA9ICdtdWx0aXBseSc7XG4gICAgICAgIGNvbnRleHQuZHJhd0ltYWdlKG1hZ2VudGEsIDAsIDApO1xuICAgICAgICBjb250ZXh0LmRyYXdJbWFnZSh5ZWxsb3csIDIsIDApO1xuXG4gICAgICAgIHZhciBkYXRhID0gY29udGV4dC5nZXRJbWFnZURhdGEoMiwwLDEsMSkuZGF0YTtcblxuICAgICAgICByZXR1cm4gKGRhdGFbMF0gPT09IDI1NSAmJiBkYXRhWzFdID09PSAwICYmIGRhdGFbMl0gPT09IDApO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBHaXZlbiBhIG51bWJlciwgdGhpcyBmdW5jdGlvbiByZXR1cm5zIHRoZSBjbG9zZXN0IG51bWJlciB0aGF0IGlzIGEgcG93ZXIgb2YgdHdvXG4gICAgICogdGhpcyBmdW5jdGlvbiBpcyB0YWtlbiBmcm9tIFN0YXJsaW5nIEZyYW1ld29yayBhcyBpdHMgcHJldHR5IG5lYXQgOylcbiAgICAgKlxuICAgICAqIEBwYXJhbSBudW1iZXIge251bWJlcn1cbiAgICAgKiBAcmV0dXJuIHtudW1iZXJ9IHRoZSBjbG9zZXN0IG51bWJlciB0aGF0IGlzIGEgcG93ZXIgb2YgdHdvXG4gICAgICovXG4gICAgZ2V0TmV4dFBvd2VyT2ZUd286IGZ1bmN0aW9uIChudW1iZXIpXG4gICAge1xuICAgICAgICAvLyBzZWU6IGh0dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvUG93ZXJfb2ZfdHdvI0Zhc3RfYWxnb3JpdGhtX3RvX2NoZWNrX2lmX2FfcG9zaXRpdmVfbnVtYmVyX2lzX2FfcG93ZXJfb2ZfdHdvXG4gICAgICAgIGlmIChudW1iZXIgPiAwICYmIChudW1iZXIgJiAobnVtYmVyIC0gMSkpID09PSAwKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gbnVtYmVyO1xuICAgICAgICB9XG4gICAgICAgIGVsc2VcbiAgICAgICAge1xuICAgICAgICAgICAgdmFyIHJlc3VsdCA9IDE7XG5cbiAgICAgICAgICAgIHdoaWxlIChyZXN1bHQgPCBudW1iZXIpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgcmVzdWx0IDw8PSAxO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIGNoZWNrcyBpZiB0aGUgZ2l2ZW4gd2lkdGggYW5kIGhlaWdodCBtYWtlIGEgcG93ZXIgb2YgdHdvIHJlY3RhbmdsZVxuICAgICAqXG4gICAgICogQHBhcmFtIHdpZHRoIHtudW1iZXJ9XG4gICAgICogQHBhcmFtIGhlaWdodCB7bnVtYmVyfVxuICAgICAqIEByZXR1cm4ge2Jvb2xlYW59XG4gICAgICovXG4gICAgaXNQb3dlck9mVHdvOiBmdW5jdGlvbiAod2lkdGgsIGhlaWdodClcbiAgICB7XG4gICAgICAgIHJldHVybiAod2lkdGggPiAwICYmICh3aWR0aCAmICh3aWR0aCAtIDEpKSA9PT0gMCAmJiBoZWlnaHQgPiAwICYmIChoZWlnaHQgJiAoaGVpZ2h0IC0gMSkpID09PSAwKTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogZ2V0IHRoZSByZXNvbHV0aW9uIG9mIGFuIGFzc2V0IGJ5IGxvb2tpbmcgZm9yIHRoZSBwcmVmaXhcbiAgICAgKiB1c2VkIGJ5IHNwcml0ZXNoZWV0cyBhbmQgaW1hZ2UgdXJsc1xuICAgICAqXG4gICAgICogQHBhcmFtIHVybCB7c3RyaW5nfSB0aGUgaW1hZ2UgcGF0aFxuICAgICAqIEByZXR1cm4ge251bWJlcn1cbiAgICAgKi9cbiAgICBnZXRSZXNvbHV0aW9uT2ZVcmw6IGZ1bmN0aW9uICh1cmwpXG4gICAge1xuICAgICAgICB2YXIgcmVzb2x1dGlvbiA9IENPTlNULlJFVElOQV9QUkVGSVguZXhlYyh1cmwpO1xuXG4gICAgICAgIGlmIChyZXNvbHV0aW9uKVxuICAgICAgICB7XG4gICAgICAgICAgIHJldHVybiBwYXJzZUZsb2F0KHJlc29sdXRpb25bMV0pO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIDE7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIExvZ3Mgb3V0IHRoZSB2ZXJzaW9uIGFuZCByZW5kZXJlciBpbmZvcm1hdGlvbiBmb3IgdGhpcyBydW5uaW5nIGluc3RhbmNlIG9mIFBJWEkuXG4gICAgICogSWYgeW91IGRvbid0IHdhbnQgdG8gc2VlIHRoaXMgbWVzc2FnZSB5b3UgY2FuIHNldCBgUElYSS51dGlscy5fc2FpZEhlbGxvID0gdHJ1ZTtgXG4gICAgICogc28gdGhlIGxpYnJhcnkgdGhpbmtzIGl0IGFscmVhZHkgc2FpZCBpdC4gS2VlcCBpbiBtaW5kIHRoYXQgZG9pbmcgdGhhdCB3aWxsIGZvcmV2ZXJcbiAgICAgKiBtYWtlcyB5b3UgYSBqZXJrIGZhY2UuXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gdHlwZSAtIFRoZSBzdHJpbmcgcmVuZGVyZXIgdHlwZSB0byBsb2cuXG4gICAgICogQGNvbnN0YW50XG4gICAgICogQHN0YXRpY1xuICAgICAqL1xuICAgIHNheUhlbGxvOiBmdW5jdGlvbiAodHlwZSlcbiAgICB7XG4gICAgICAgIGlmICh1dGlscy5fc2FpZEhlbGxvKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAobmF2aWdhdG9yLnVzZXJBZ2VudC50b0xvd2VyQ2FzZSgpLmluZGV4T2YoJ2Nocm9tZScpID4gLTEpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHZhciBhcmdzID0gW1xuICAgICAgICAgICAgICAgICdcXG4gJWMgJWMgJWMgUGl4aS5qcyAnICsgQ09OU1QuVkVSU0lPTiArICcgLSDinLAgJyArIHR5cGUgKyAnIOKcsCAgJWMgJyArICcgJWMgJyArICcgaHR0cDovL3d3dy5waXhpanMuY29tLyAgJWMgJWMg4pmlJWPimaUlY+KZpSBcXG5cXG4nLFxuICAgICAgICAgICAgICAgICdiYWNrZ3JvdW5kOiAjZmY2NmE1OyBwYWRkaW5nOjVweCAwOycsXG4gICAgICAgICAgICAgICAgJ2JhY2tncm91bmQ6ICNmZjY2YTU7IHBhZGRpbmc6NXB4IDA7JyxcbiAgICAgICAgICAgICAgICAnY29sb3I6ICNmZjY2YTU7IGJhY2tncm91bmQ6ICMwMzAzMDc7IHBhZGRpbmc6NXB4IDA7JyxcbiAgICAgICAgICAgICAgICAnYmFja2dyb3VuZDogI2ZmNjZhNTsgcGFkZGluZzo1cHggMDsnLFxuICAgICAgICAgICAgICAgICdiYWNrZ3JvdW5kOiAjZmZjM2RjOyBwYWRkaW5nOjVweCAwOycsXG4gICAgICAgICAgICAgICAgJ2JhY2tncm91bmQ6ICNmZjY2YTU7IHBhZGRpbmc6NXB4IDA7JyxcbiAgICAgICAgICAgICAgICAnY29sb3I6ICNmZjI0MjQ7IGJhY2tncm91bmQ6ICNmZmY7IHBhZGRpbmc6NXB4IDA7JyxcbiAgICAgICAgICAgICAgICAnY29sb3I6ICNmZjI0MjQ7IGJhY2tncm91bmQ6ICNmZmY7IHBhZGRpbmc6NXB4IDA7JyxcbiAgICAgICAgICAgICAgICAnY29sb3I6ICNmZjI0MjQ7IGJhY2tncm91bmQ6ICNmZmY7IHBhZGRpbmc6NXB4IDA7J1xuICAgICAgICAgICAgXTtcblxuICAgICAgICAgICAgd2luZG93LmNvbnNvbGUubG9nLmFwcGx5KGNvbnNvbGUsIGFyZ3MpOyAvL2pzaGludCBpZ25vcmU6bGluZVxuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHdpbmRvdy5jb25zb2xlKVxuICAgICAgICB7XG4gICAgICAgICAgICB3aW5kb3cuY29uc29sZS5sb2coJ1BpeGkuanMgJyArIENPTlNULlZFUlNJT04gKyAnIC0gJyArIHR5cGUgKyAnIC0gaHR0cDovL3d3dy5waXhpanMuY29tLycpOyAvL2pzaGludCBpZ25vcmU6bGluZVxuICAgICAgICB9XG5cbiAgICAgICAgdXRpbHMuX3NhaWRIZWxsbyA9IHRydWU7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIEhlbHBlciBmb3IgY2hlY2tpbmcgZm9yIHdlYmdsIHN1cHBvcnRcbiAgICAgKlxuICAgICAqIEByZXR1cm4ge2Jvb2xlYW59XG4gICAgICovXG4gICAgaXNXZWJHTFN1cHBvcnRlZDogZnVuY3Rpb24gKClcbiAgICB7XG4gICAgICAgIHZhciBjb250ZXh0T3B0aW9ucyA9IHsgc3RlbmNpbDogdHJ1ZSB9O1xuICAgICAgICB0cnlcbiAgICAgICAge1xuICAgICAgICAgICAgaWYgKCF3aW5kb3cuV2ViR0xSZW5kZXJpbmdDb250ZXh0KVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdmFyIGNhbnZhcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NhbnZhcycpLFxuICAgICAgICAgICAgICAgIGdsID0gY2FudmFzLmdldENvbnRleHQoJ3dlYmdsJywgY29udGV4dE9wdGlvbnMpIHx8IGNhbnZhcy5nZXRDb250ZXh0KCdleHBlcmltZW50YWwtd2ViZ2wnLCBjb250ZXh0T3B0aW9ucyk7XG5cbiAgICAgICAgICAgIHJldHVybiAhIShnbCAmJiBnbC5nZXRDb250ZXh0QXR0cmlidXRlcygpLnN0ZW5jaWwpO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyBzaWduIG9mIG51bWJlclxuICAgICAqXG4gICAgICogQHBhcmFtIG4ge251bWJlcn1cbiAgICAgKiBAcmV0dXJucyB7bnVtYmVyfSAwIGlmIG4gaXMgMCwgLTEgaWYgbiBpcyBuZWdhdGl2ZSwgMSBpZiBuIGkgcG9zaXRpdmVcbiAgICAgKi9cbiAgICBzaWduOiBmdW5jdGlvbiAobilcbiAgICB7XG4gICAgICAgIHJldHVybiBuID8gKG4gPCAwID8gLTEgOiAxKSA6IDA7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIHJlbW92ZUl0ZW1zXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge2FycmF5fSBhcnIgVGhlIHRhcmdldCBhcnJheVxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBzdGFydElkeCBUaGUgaW5kZXggdG8gYmVnaW4gcmVtb3ZpbmcgZnJvbSAoaW5jbHVzaXZlKVxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSByZW1vdmVDb3VudCBIb3cgbWFueSBpdGVtcyB0byByZW1vdmVcbiAgICAgKi9cbiAgICByZW1vdmVJdGVtczogZnVuY3Rpb24gKGFyciwgc3RhcnRJZHgsIHJlbW92ZUNvdW50KVxuICAgIHtcbiAgICAgICAgdmFyIGxlbmd0aCA9IGFyci5sZW5ndGg7XG5cbiAgICAgICAgaWYgKHN0YXJ0SWR4ID49IGxlbmd0aCB8fCByZW1vdmVDb3VudCA9PT0gMClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgcmVtb3ZlQ291bnQgPSAoc3RhcnRJZHgrcmVtb3ZlQ291bnQgPiBsZW5ndGggPyBsZW5ndGgtc3RhcnRJZHggOiByZW1vdmVDb3VudCk7XG4gICAgICAgIGZvciAodmFyIGkgPSBzdGFydElkeCwgbGVuID0gbGVuZ3RoLXJlbW92ZUNvdW50OyBpIDwgbGVuOyArK2kpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGFycltpXSA9IGFycltpICsgcmVtb3ZlQ291bnRdO1xuICAgICAgICB9XG5cbiAgICAgICAgYXJyLmxlbmd0aCA9IGxlbjtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQHRvZG8gRGVzY3JpYmUgcHJvcGVydHkgdXNhZ2VcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIFRleHR1cmVDYWNoZToge30sXG5cbiAgICAvKipcbiAgICAgKiBAdG9kbyBEZXNjcmliZSBwcm9wZXJ0eSB1c2FnZVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgQmFzZVRleHR1cmVDYWNoZToge31cbn07XG4iLCIvKipcbiAqIE1peGlucyBmdW5jdGlvbmFsaXR5IHRvIG1ha2UgYW4gb2JqZWN0IGhhdmUgXCJwbHVnaW5zXCIuXG4gKlxuICogQG1peGluXG4gKiBAbWVtYmVyb2YgUElYSS51dGlsc1xuICogQHBhcmFtIG9iaiB7b2JqZWN0fSBUaGUgb2JqZWN0IHRvIG1peCBpbnRvLlxuICogQGV4YW1wbGVcbiAqICAgICAgZnVuY3Rpb24gTXlPYmplY3QoKSB7fVxuICpcbiAqICAgICAgcGx1Z2luVGFyZ2V0Lm1peGluKE15T2JqZWN0KTtcbiAqL1xuZnVuY3Rpb24gcGx1Z2luVGFyZ2V0KG9iailcbntcbiAgICBvYmouX19wbHVnaW5zID0ge307XG5cbiAgICAvKipcbiAgICAgKiBBZGRzIGEgcGx1Z2luIHRvIGFuIG9iamVjdFxuICAgICAqXG4gICAgICogQHBhcmFtIHBsdWdpbk5hbWUge3N0cmluZ30gVGhlIGV2ZW50cyB0aGF0IHNob3VsZCBiZSBsaXN0ZWQuXG4gICAgICogQHBhcmFtIGN0b3Ige0Z1bmN0aW9ufSBUaGUgY29uc3RydWN0b3IgZnVuY3Rpb24gZm9yIHRoZSBwbHVnaW4uXG4gICAgICovXG4gICAgb2JqLnJlZ2lzdGVyUGx1Z2luID0gZnVuY3Rpb24gKHBsdWdpbk5hbWUsIGN0b3IpXG4gICAge1xuICAgICAgICBvYmouX19wbHVnaW5zW3BsdWdpbk5hbWVdID0gY3RvcjtcbiAgICB9O1xuXG4gICAgLyoqXG4gICAgICogSW5zdGFudGlhdGVzIGFsbCB0aGUgcGx1Z2lucyBvZiB0aGlzIG9iamVjdFxuICAgICAqXG4gICAgICovXG4gICAgb2JqLnByb3RvdHlwZS5pbml0UGx1Z2lucyA9IGZ1bmN0aW9uICgpXG4gICAge1xuICAgICAgICB0aGlzLnBsdWdpbnMgPSB0aGlzLnBsdWdpbnMgfHwge307XG5cbiAgICAgICAgZm9yICh2YXIgbyBpbiBvYmouX19wbHVnaW5zKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnBsdWdpbnNbb10gPSBuZXcgKG9iai5fX3BsdWdpbnNbb10pKHRoaXMpO1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIC8qKlxuICAgICAqIFJlbW92ZXMgYWxsIHRoZSBwbHVnaW5zIG9mIHRoaXMgb2JqZWN0XG4gICAgICpcbiAgICAgKi9cbiAgICBvYmoucHJvdG90eXBlLmRlc3Ryb3lQbHVnaW5zID0gZnVuY3Rpb24gKClcbiAgICB7XG4gICAgICAgIGZvciAodmFyIG8gaW4gdGhpcy5wbHVnaW5zKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnBsdWdpbnNbb10uZGVzdHJveSgpO1xuICAgICAgICAgICAgdGhpcy5wbHVnaW5zW29dID0gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMucGx1Z2lucyA9IG51bGw7XG4gICAgfTtcbn1cblxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgICAvKipcbiAgICAgKiBNaXhlcyBpbiB0aGUgcHJvcGVydGllcyBvZiB0aGUgcGx1Z2luVGFyZ2V0IGludG8gYW5vdGhlciBvYmplY3RcbiAgICAgKlxuICAgICAqIEBwYXJhbSBvYmplY3Qge29iamVjdH0gVGhlIG9iaiB0byBtaXggaW50b1xuICAgICAqL1xuICAgIG1peGluOiBmdW5jdGlvbiBtaXhpbihvYmopXG4gICAge1xuICAgICAgICBwbHVnaW5UYXJnZXQob2JqKTtcbiAgICB9XG59O1xuIiwiLypnbG9iYWwgY29uc29sZSAqL1xudmFyIGNvcmUgPSByZXF1aXJlKCcuL2NvcmUnKSxcbiAgICBtZXNoID0gcmVxdWlyZSgnLi9tZXNoJyksXG4gICAgZXh0cmFzID0gcmVxdWlyZSgnLi9leHRyYXMnKSxcbiAgICBmaWx0ZXJzID0gcmVxdWlyZSgnLi9maWx0ZXJzJyk7XG5cbi8qKlxuICogQGNsYXNzXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgU3ByaXRlQmF0Y2hcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAc2VlIFBJWEkuUGFydGljbGVDb250YWluZXJcbiAqIEB0aHJvd3Mge1JlZmVyZW5jZUVycm9yfSBTcHJpdGVCYXRjaCBkb2VzIG5vdCBleGlzdCBhbnkgbW9yZSwgcGxlYXNlIHVzZSB0aGUgbmV3IFBhcnRpY2xlQ29udGFpbmVyIGluc3RlYWQuXG4gKiBAZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDMuMC4wXG4gKi9cbmNvcmUuU3ByaXRlQmF0Y2ggPSBmdW5jdGlvbigpXG57XG4gICAgdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKCdTcHJpdGVCYXRjaCBkb2VzIG5vdCBleGlzdCBhbnkgbW9yZSwgcGxlYXNlIHVzZSB0aGUgbmV3IFBhcnRpY2xlQ29udGFpbmVyIGluc3RlYWQuJyk7XG59O1xuXG4vKipcbiAqIEBjbGFzc1xuICogQHByaXZhdGVcbiAqIEBuYW1lIEFzc2V0TG9hZGVyXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHNlZSBQSVhJLmxvYWRlcnMuTG9hZGVyXG4gKiBAdGhyb3dzIHtSZWZlcmVuY2VFcnJvcn0gVGhlIGxvYWRlciBzeXN0ZW0gd2FzIG92ZXJoYXVsZWQgaW4gcGl4aSB2MywgcGxlYXNlIHNlZSB0aGUgbmV3IFBJWEkubG9hZGVycy5Mb2FkZXIgY2xhc3MuXG4gKiBAZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDMuMC4wXG4gKi9cbmNvcmUuQXNzZXRMb2FkZXIgPSBmdW5jdGlvbigpXG57XG4gICAgdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKCdUaGUgbG9hZGVyIHN5c3RlbSB3YXMgb3ZlcmhhdWxlZCBpbiBwaXhpIHYzLCBwbGVhc2Ugc2VlIHRoZSBuZXcgUElYSS5sb2FkZXJzLkxvYWRlciBjbGFzcy4nKTtcbn07XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGNvcmUsIHtcblxuICAgIC8qKlxuICAgICAqIEBjbGFzc1xuICAgICAqIEBwcml2YXRlXG4gICAgICogQG5hbWUgU3RhZ2VcbiAgICAgKiBAbWVtYmVyb2YgUElYSVxuICAgICAqIEBzZWUgUElYSS5Db250YWluZXJcbiAgICAgKiBAZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDMuMC4wXG4gICAgICovXG4gICAgU3RhZ2U6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbigpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignWW91IGRvIG5vdCBuZWVkIHRvIHVzZSBhIFBJWEkgU3RhZ2UgYW55IG1vcmUsIHlvdSBjYW4gc2ltcGx5IHJlbmRlciBhbnkgY29udGFpbmVyLicpO1xuICAgICAgICAgICAgcmV0dXJuIGNvcmUuQ29udGFpbmVyO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIEBjbGFzc1xuICAgICAqIEBwcml2YXRlXG4gICAgICogQG5hbWUgRGlzcGxheU9iamVjdENvbnRhaW5lclxuICAgICAqIEBtZW1iZXJvZiBQSVhJXG4gICAgICogQHNlZSBQSVhJLkNvbnRhaW5lclxuICAgICAqIEBkZXByZWNhdGVkIHNpbmNlIHZlcnNpb24gMy4wLjBcbiAgICAgKi9cbiAgICBEaXNwbGF5T2JqZWN0Q29udGFpbmVyOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24oKVxuICAgICAgICB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ0Rpc3BsYXlPYmplY3RDb250YWluZXIgaGFzIGJlZW4gc2hvcnRlbmVkIHRvIENvbnRhaW5lciwgcGxlYXNlIHVzZSBDb250YWluZXIgZnJvbSBub3cgb24uJyk7XG4gICAgICAgICAgICByZXR1cm4gY29yZS5Db250YWluZXI7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQGNsYXNzXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAbmFtZSBTdHJpcFxuICAgICAqIEBtZW1iZXJvZiBQSVhJXG4gICAgICogQHNlZSBQSVhJLm1lc2guTWVzaFxuICAgICAqIEBkZXByZWNhdGVkIHNpbmNlIHZlcnNpb24gMy4wLjBcbiAgICAgKi9cbiAgICBTdHJpcDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uKClcbiAgICAgICAge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKCdUaGUgU3RyaXAgY2xhc3MgaGFzIGJlZW4gcmVuYW1lZCB0byBNZXNoIGFuZCBtb3ZlZCB0byBtZXNoLk1lc2gsIHBsZWFzZSB1c2UgbWVzaC5NZXNoIGZyb20gbm93IG9uLicpO1xuICAgICAgICAgICAgcmV0dXJuIG1lc2guTWVzaDtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBAY2xhc3NcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBuYW1lIFJvcGVcbiAgICAgKiBAbWVtYmVyb2YgUElYSVxuICAgICAqIEBzZWUgUElYSS5tZXNoLlJvcGVcbiAgICAgKiBAZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDMuMC4wXG4gICAgICovXG4gICAgUm9wZToge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uKClcbiAgICAgICAge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKCdUaGUgUm9wZSBjbGFzcyBoYXMgYmVlbiBtb3ZlZCB0byBtZXNoLlJvcGUsIHBsZWFzZSB1c2UgbWVzaC5Sb3BlIGZyb20gbm93IG9uLicpO1xuICAgICAgICAgICAgcmV0dXJuIG1lc2guUm9wZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBAY2xhc3NcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBuYW1lIE1vdmllQ2xpcFxuICAgICAqIEBtZW1iZXJvZiBQSVhJXG4gICAgICogQHNlZSBQSVhJLmV4dHJhcy5Nb3ZpZUNsaXBcbiAgICAgKiBAZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDMuMC4wXG4gICAgICovXG4gICAgTW92aWVDbGlwOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24oKVxuICAgICAgICB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ1RoZSBNb3ZpZUNsaXAgY2xhc3MgaGFzIGJlZW4gbW92ZWQgdG8gZXh0cmFzLk1vdmllQ2xpcCwgcGxlYXNlIHVzZSBleHRyYXMuTW92aWVDbGlwIGZyb20gbm93IG9uLicpO1xuICAgICAgICAgICAgcmV0dXJuIGV4dHJhcy5Nb3ZpZUNsaXA7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQGNsYXNzXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAbmFtZSBUaWxpbmdTcHJpdGVcbiAgICAgKiBAbWVtYmVyb2YgUElYSVxuICAgICAqIEBzZWUgUElYSS5leHRyYXMuVGlsaW5nU3ByaXRlXG4gICAgICogQGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiAzLjAuMFxuICAgICAqL1xuICAgIFRpbGluZ1Nwcml0ZToge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uKClcbiAgICAgICAge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKCdUaGUgVGlsaW5nU3ByaXRlIGNsYXNzIGhhcyBiZWVuIG1vdmVkIHRvIGV4dHJhcy5UaWxpbmdTcHJpdGUsIHBsZWFzZSB1c2UgZXh0cmFzLlRpbGluZ1Nwcml0ZSBmcm9tIG5vdyBvbi4nKTtcbiAgICAgICAgICAgIHJldHVybiBleHRyYXMuVGlsaW5nU3ByaXRlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIEBjbGFzc1xuICAgICAqIEBwcml2YXRlXG4gICAgICogQG5hbWUgQml0bWFwVGV4dFxuICAgICAqIEBtZW1iZXJvZiBQSVhJXG4gICAgICogQHNlZSBQSVhJLmV4dHJhcy5CaXRtYXBUZXh0XG4gICAgICogQGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiAzLjAuMFxuICAgICAqL1xuICAgIEJpdG1hcFRleHQ6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbigpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignVGhlIEJpdG1hcFRleHQgY2xhc3MgaGFzIGJlZW4gbW92ZWQgdG8gZXh0cmFzLkJpdG1hcFRleHQsIHBsZWFzZSB1c2UgZXh0cmFzLkJpdG1hcFRleHQgZnJvbSBub3cgb24uJyk7XG4gICAgICAgICAgICByZXR1cm4gZXh0cmFzLkJpdG1hcFRleHQ7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQGNsYXNzXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAbmFtZSBibGVuZE1vZGVzXG4gICAgICogQG1lbWJlcm9mIFBJWElcbiAgICAgKiBAc2VlIFBJWEkuQkxFTkRfTU9ERVNcbiAgICAgKiBAZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDMuMC4wXG4gICAgICovXG4gICAgYmxlbmRNb2Rlczoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uKClcbiAgICAgICAge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKCdUaGUgYmxlbmRNb2RlcyBoYXMgYmVlbiBtb3ZlZCB0byBCTEVORF9NT0RFUywgcGxlYXNlIHVzZSBCTEVORF9NT0RFUyBmcm9tIG5vdyBvbi4nKTtcbiAgICAgICAgICAgIHJldHVybiBjb3JlLkJMRU5EX01PREVTO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIEBjbGFzc1xuICAgICAqIEBwcml2YXRlXG4gICAgICogQG5hbWUgc2NhbGVNb2Rlc1xuICAgICAqIEBtZW1iZXJvZiBQSVhJXG4gICAgICogQHNlZSBQSVhJLlNDQUxFX01PREVTXG4gICAgICogQGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiAzLjAuMFxuICAgICAqL1xuICAgIHNjYWxlTW9kZXM6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbigpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignVGhlIHNjYWxlTW9kZXMgaGFzIGJlZW4gbW92ZWQgdG8gU0NBTEVfTU9ERVMsIHBsZWFzZSB1c2UgU0NBTEVfTU9ERVMgZnJvbSBub3cgb24uJyk7XG4gICAgICAgICAgICByZXR1cm4gY29yZS5TQ0FMRV9NT0RFUztcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBAY2xhc3NcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBuYW1lIEJhc2VUZXh0dXJlQ2FjaGVcbiAgICAgKiBAbWVtYmVyb2YgUElYSVxuICAgICAqIEBzZWUgUElYSS51dGlscy5CYXNlVGV4dHVyZUNhY2hlXG4gICAgICogQGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiAzLjAuMFxuICAgICAqL1xuICAgIEJhc2VUZXh0dXJlQ2FjaGU6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ1RoZSBCYXNlVGV4dHVyZUNhY2hlIGNsYXNzIGhhcyBiZWVuIG1vdmVkIHRvIHV0aWxzLkJhc2VUZXh0dXJlQ2FjaGUsIHBsZWFzZSB1c2UgdXRpbHMuQmFzZVRleHR1cmVDYWNoZSBmcm9tIG5vdyBvbi4nKTtcbiAgICAgICAgICAgIHJldHVybiBjb3JlLnV0aWxzLkJhc2VUZXh0dXJlQ2FjaGU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQGNsYXNzXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAbmFtZSBUZXh0dXJlQ2FjaGVcbiAgICAgKiBAbWVtYmVyb2YgUElYSVxuICAgICAqIEBzZWUgUElYSS51dGlscy5UZXh0dXJlQ2FjaGVcbiAgICAgKiBAZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDMuMC4wXG4gICAgICovXG4gICAgVGV4dHVyZUNhY2hlOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKCdUaGUgVGV4dHVyZUNhY2hlIGNsYXNzIGhhcyBiZWVuIG1vdmVkIHRvIHV0aWxzLlRleHR1cmVDYWNoZSwgcGxlYXNlIHVzZSB1dGlscy5UZXh0dXJlQ2FjaGUgZnJvbSBub3cgb24uJyk7XG4gICAgICAgICAgICByZXR1cm4gY29yZS51dGlscy5UZXh0dXJlQ2FjaGU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQG5hbWVzcGFjZVxuICAgICAqIEBwcml2YXRlXG4gICAgICogQG5hbWUgbWF0aFxuICAgICAqIEBtZW1iZXJvZiBQSVhJXG4gICAgICogQHNlZSBQSVhJXG4gICAgICogQGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiAzLjAuNlxuICAgICAqL1xuICAgIG1hdGg6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ1RoZSBtYXRoIG5hbWVzcGFjZSBpcyBkZXByZWNhdGVkLCBwbGVhc2UgYWNjZXNzIG1lbWJlcnMgYWxyZWFkeSBhY2Nlc3NpYmxlIG9uIFBJWEkuJyk7XG4gICAgICAgICAgICByZXR1cm4gY29yZTtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuXG4vKipcbiAqIEBtZXRob2RcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBQSVhJLlNwcml0ZSNzZXRUZXh0dXJlXG4gKiBAc2VlIFBJWEkuU3ByaXRlI3RleHR1cmVcbiAqIEBkZXByZWNhdGVkIHNpbmNlIHZlcnNpb24gMy4wLjBcbiAqL1xuY29yZS5TcHJpdGUucHJvdG90eXBlLnNldFRleHR1cmUgPSBmdW5jdGlvbih0ZXh0dXJlKVxue1xuICAgIHRoaXMudGV4dHVyZSA9IHRleHR1cmU7XG4gICAgY29uc29sZS53YXJuKCdzZXRUZXh0dXJlIGlzIG5vdyBkZXByZWNhdGVkLCBwbGVhc2UgdXNlIHRoZSB0ZXh0dXJlIHByb3BlcnR5LCBlLmcgOiBzcHJpdGUudGV4dHVyZSA9IHRleHR1cmU7Jyk7XG59O1xuXG4vKipcbiAqIEBtZXRob2RcbiAqIEBuYW1lIFBJWEkuZXh0cmFzLkJpdG1hcFRleHQjc2V0VGV4dFxuICogQHNlZSBQSVhJLmV4dHJhcy5CaXRtYXBUZXh0I3RleHRcbiAqIEBkZXByZWNhdGVkIHNpbmNlIHZlcnNpb24gMy4wLjBcbiAqL1xuZXh0cmFzLkJpdG1hcFRleHQucHJvdG90eXBlLnNldFRleHQgPSBmdW5jdGlvbih0ZXh0KVxue1xuICAgIHRoaXMudGV4dCA9IHRleHQ7XG4gICAgY29uc29sZS53YXJuKCdzZXRUZXh0IGlzIG5vdyBkZXByZWNhdGVkLCBwbGVhc2UgdXNlIHRoZSB0ZXh0IHByb3BlcnR5LCBlLmcgOiBteUJpdG1hcFRleHQudGV4dCA9IFxcJ215IHRleHRcXCc7Jyk7XG59O1xuXG4vKipcbiAqIEBtZXRob2RcbiAqIEBuYW1lIFBJWEkuVGV4dCNzZXRUZXh0XG4gKiBAc2VlIFBJWEkuVGV4dCN0ZXh0XG4gKiBAZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDMuMC4wXG4gKi9cbmNvcmUuVGV4dC5wcm90b3R5cGUuc2V0VGV4dCA9IGZ1bmN0aW9uKHRleHQpXG57XG4gICAgdGhpcy50ZXh0ID0gdGV4dDtcbiAgICBjb25zb2xlLndhcm4oJ3NldFRleHQgaXMgbm93IGRlcHJlY2F0ZWQsIHBsZWFzZSB1c2UgdGhlIHRleHQgcHJvcGVydHksIGUuZyA6IG15VGV4dC50ZXh0ID0gXFwnbXkgdGV4dFxcJzsnKTtcbn07XG5cbi8qKlxuICogQG1ldGhvZFxuICogQG5hbWUgUElYSS5UZXh0I3NldFN0eWxlXG4gKiBAc2VlIFBJWEkuVGV4dCNzdHlsZVxuICogQGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiAzLjAuMFxuICovXG5jb3JlLlRleHQucHJvdG90eXBlLnNldFN0eWxlID0gZnVuY3Rpb24oc3R5bGUpXG57XG4gICAgdGhpcy5zdHlsZSA9IHN0eWxlO1xuICAgIGNvbnNvbGUud2Fybignc2V0U3R5bGUgaXMgbm93IGRlcHJlY2F0ZWQsIHBsZWFzZSB1c2UgdGhlIHN0eWxlIHByb3BlcnR5LCBlLmcgOiBteVRleHQuc3R5bGUgPSBzdHlsZTsnKTtcbn07XG5cbi8qKlxuICogQG1ldGhvZFxuICogQG5hbWUgUElYSS5UZXh0dXJlI3NldEZyYW1lXG4gKiBAc2VlIFBJWEkuVGV4dHVyZSNzZXRGcmFtZVxuICogQGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiAzLjAuMFxuICovXG5jb3JlLlRleHR1cmUucHJvdG90eXBlLnNldEZyYW1lID0gZnVuY3Rpb24oZnJhbWUpXG57XG4gICAgdGhpcy5mcmFtZSA9IGZyYW1lO1xuICAgIGNvbnNvbGUud2Fybignc2V0RnJhbWUgaXMgbm93IGRlcHJlY2F0ZWQsIHBsZWFzZSB1c2UgdGhlIGZyYW1lIHByb3BlcnR5LCBlLmcgOiBteVRleHR1cmUuZnJhbWUgPSBmcmFtZTsnKTtcbn07XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGZpbHRlcnMsIHtcblxuICAgIC8qKlxuICAgICAqIEBjbGFzc1xuICAgICAqIEBwcml2YXRlXG4gICAgICogQG5hbWUgUElYSS5maWx0ZXJzLkFic3RyYWN0RmlsdGVyXG4gICAgICogQHNlZSBQSVhJLkFic3RyYWN0RmlsdGVyXG4gICAgICogQGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiAzLjAuNlxuICAgICAqL1xuICAgIEFic3RyYWN0RmlsdGVyOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24oKVxuICAgICAgICB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ2ZpbHRlcnMuQWJzdHJhY3RGaWx0ZXIgaXMgYW4gdW5kb2N1bWVudGVkIGFsaWFzLCBwbGVhc2UgdXNlIEFic3RyYWN0RmlsdGVyIGZyb20gbm93IG9uLicpO1xuICAgICAgICAgICAgcmV0dXJuIGNvcmUuQWJzdHJhY3RGaWx0ZXI7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQGNsYXNzXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAbmFtZSBQSVhJLmZpbHRlcnMuRlhBQUZpbHRlclxuICAgICAqIEBzZWUgUElYSS5GWEFBRmlsdGVyXG4gICAgICogQGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiAzLjAuNlxuICAgICAqL1xuICAgIEZYQUFGaWx0ZXI6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbigpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignZmlsdGVycy5GWEFBRmlsdGVyIGlzIGFuIHVuZG9jdW1lbnRlZCBhbGlhcywgcGxlYXNlIHVzZSBGWEFBRmlsdGVyIGZyb20gbm93IG9uLicpO1xuICAgICAgICAgICAgcmV0dXJuIGNvcmUuRlhBQUZpbHRlcjtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBAY2xhc3NcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBuYW1lIFBJWEkuZmlsdGVycy5TcHJpdGVNYXNrRmlsdGVyXG4gICAgICogQHNlZSBQSVhJLlNwcml0ZU1hc2tGaWx0ZXJcbiAgICAgKiBAZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDMuMC42XG4gICAgICovXG4gICAgU3ByaXRlTWFza0ZpbHRlcjoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uKClcbiAgICAgICAge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKCdmaWx0ZXJzLlNwcml0ZU1hc2tGaWx0ZXIgaXMgYW4gdW5kb2N1bWVudGVkIGFsaWFzLCBwbGVhc2UgdXNlIFNwcml0ZU1hc2tGaWx0ZXIgZnJvbSBub3cgb24uJyk7XG4gICAgICAgICAgICByZXR1cm4gY29yZS5TcHJpdGVNYXNrRmlsdGVyO1xuICAgICAgICB9XG4gICAgfVxufSk7XG5cbi8qKlxuICogQG1ldGhvZFxuICogQG5hbWUgUElYSS51dGlscy51dWlkXG4gKiBAc2VlIFBJWEkudXRpbHMudWlkXG4gKiBAZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDMuMC42XG4gKi9cbmNvcmUudXRpbHMudXVpZCA9IGZ1bmN0aW9uICgpXG57XG4gICAgY29uc29sZS53YXJuKCd1dGlscy51dWlkKCkgaXMgZGVwcmVjYXRlZCwgcGxlYXNlIHVzZSB1dGlscy51aWQoKSBmcm9tIG5vdyBvbi4nKTtcbiAgICByZXR1cm4gY29yZS51dGlscy51aWQoKTtcbn07XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uL2NvcmUnKTtcblxuLyoqXG4gKiBBIEJpdG1hcFRleHQgb2JqZWN0IHdpbGwgY3JlYXRlIGEgbGluZSBvciBtdWx0aXBsZSBsaW5lcyBvZiB0ZXh0IHVzaW5nIGJpdG1hcCBmb250LiBUb1xuICogc3BsaXQgYSBsaW5lIHlvdSBjYW4gdXNlICdcXG4nLCAnXFxyJyBvciAnXFxyXFxuJyBpbiB5b3VyIHN0cmluZy4gWW91IGNhbiBnZW5lcmF0ZSB0aGUgZm50IGZpbGVzIHVzaW5nOlxuICpcbiAqIEEgQml0bWFwVGV4dCBjYW4gb25seSBiZSBjcmVhdGVkIHdoZW4gdGhlIGZvbnQgaXMgbG9hZGVkXG4gKlxuICogYGBganNcbiAqIC8vIGluIHRoaXMgY2FzZSB0aGUgZm9udCBpcyBpbiBhIGZpbGUgY2FsbGVkICdkZXN5cmVsLmZudCdcbiAqIHZhciBiaXRtYXBUZXh0ID0gbmV3IFBJWEkuZXh0cmFzLkJpdG1hcFRleHQoXCJ0ZXh0IHVzaW5nIGEgZmFuY3kgZm9udCFcIiwge2ZvbnQ6IFwiMzVweCBEZXN5cmVsXCIsIGFsaWduOiBcInJpZ2h0XCJ9KTtcbiAqIGBgYFxuICpcbiAqXG4gKiBodHRwOi8vd3d3LmFuZ2VsY29kZS5jb20vcHJvZHVjdHMvYm1mb250LyBmb3Igd2luZG93cyBvclxuICogaHR0cDovL3d3dy5ibWdseXBoLmNvbS8gZm9yIG1hYy5cbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQ29udGFpbmVyXG4gKiBAbWVtYmVyb2YgUElYSS5leHRyYXNcbiAqIEBwYXJhbSB0ZXh0IHtzdHJpbmd9IFRoZSBjb3B5IHRoYXQgeW91IHdvdWxkIGxpa2UgdGhlIHRleHQgdG8gZGlzcGxheVxuICogQHBhcmFtIHN0eWxlIHtvYmplY3R9IFRoZSBzdHlsZSBwYXJhbWV0ZXJzXG4gKiBAcGFyYW0gc3R5bGUuZm9udCB7c3RyaW5nfG9iamVjdH0gVGhlIGZvbnQgZGVzY3JpcHRvciBmb3IgdGhlIG9iamVjdCwgY2FuIGJlIHBhc3NlZCBhcyBhIHN0cmluZyBvZiBmb3JtXG4gKiAgICAgIFwiMjRweCBGb250TmFtZVwiIG9yIFwiRm9udE5hbWVcIiBvciBhcyBhbiBvYmplY3Qgd2l0aCBleHBsaWNpdCBuYW1lL3NpemUgcHJvcGVydGllcy5cbiAqIEBwYXJhbSBbc3R5bGUuZm9udC5uYW1lXSB7c3RyaW5nfSBUaGUgYml0bWFwIGZvbnQgaWRcbiAqIEBwYXJhbSBbc3R5bGUuZm9udC5zaXplXSB7bnVtYmVyfSBUaGUgc2l6ZSBvZiB0aGUgZm9udCBpbiBwaXhlbHMsIGUuZy4gMjRcbiAqIEBwYXJhbSBbc3R5bGUuYWxpZ249J2xlZnQnXSB7c3RyaW5nfSBBbGlnbm1lbnQgZm9yIG11bHRpbGluZSB0ZXh0ICgnbGVmdCcsICdjZW50ZXInIG9yICdyaWdodCcpLCBkb2VzIG5vdCBhZmZlY3RcbiAqICAgICAgc2luZ2xlIGxpbmUgdGV4dFxuICogQHBhcmFtIFtzdHlsZS50aW50PTB4RkZGRkZGXSB7bnVtYmVyfSBUaGUgdGludCBjb2xvclxuICovXG5mdW5jdGlvbiBCaXRtYXBUZXh0KHRleHQsIHN0eWxlKVxue1xuICAgIGNvcmUuQ29udGFpbmVyLmNhbGwodGhpcyk7XG5cbiAgICBzdHlsZSA9IHN0eWxlIHx8IHt9O1xuXG4gICAgLyoqXG4gICAgICogVGhlIHdpZHRoIG9mIHRoZSBvdmVyYWxsIHRleHQsIGRpZmZlcmVudCBmcm9tIGZvbnRTaXplLFxuICAgICAqIHdoaWNoIGlzIGRlZmluZWQgaW4gdGhlIHN0eWxlIG9iamVjdFxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEByZWFkT25seVxuICAgICAqL1xuICAgIHRoaXMudGV4dFdpZHRoID0gMDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBoZWlnaHQgb2YgdGhlIG92ZXJhbGwgdGV4dCwgZGlmZmVyZW50IGZyb20gZm9udFNpemUsXG4gICAgICogd2hpY2ggaXMgZGVmaW5lZCBpbiB0aGUgc3R5bGUgb2JqZWN0XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQHJlYWRPbmx5XG4gICAgICovXG4gICAgdGhpcy50ZXh0SGVpZ2h0ID0gMDtcblxuICAgIC8qKlxuICAgICAqIFByaXZhdGUgdHJhY2tlciBmb3IgdGhlIGxldHRlciBzcHJpdGUgcG9vbC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuU3ByaXRlW119XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9nbHlwaHMgPSBbXTtcblxuICAgIC8qKlxuICAgICAqIFByaXZhdGUgdHJhY2tlciBmb3IgdGhlIGN1cnJlbnQgc3R5bGUuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtvYmplY3R9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9mb250ID0ge1xuICAgICAgICB0aW50OiBzdHlsZS50aW50ICE9PSB1bmRlZmluZWQgPyBzdHlsZS50aW50IDogMHhGRkZGRkYsXG4gICAgICAgIGFsaWduOiBzdHlsZS5hbGlnbiB8fCAnbGVmdCcsXG4gICAgICAgIG5hbWU6IG51bGwsXG4gICAgICAgIHNpemU6IDBcbiAgICB9O1xuXG4gICAgLyoqXG4gICAgICogUHJpdmF0ZSB0cmFja2VyIGZvciB0aGUgY3VycmVudCBmb250LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7b2JqZWN0fVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5mb250ID0gc3R5bGUuZm9udDsgLy8gcnVuIGZvbnQgc2V0dGVyXG5cbiAgICAvKipcbiAgICAgKiBQcml2YXRlIHRyYWNrZXIgZm9yIHRoZSBjdXJyZW50IHRleHQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtzdHJpbmd9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl90ZXh0ID0gdGV4dDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBtYXggd2lkdGggb2YgdGhpcyBiaXRtYXAgdGV4dCBpbiBwaXhlbHMuIElmIHRoZSB0ZXh0IHByb3ZpZGVkIGlzIGxvbmdlciB0aGFuIHRoZSB2YWx1ZSBwcm92aWRlZCwgbGluZSBicmVha3Mgd2lsbCBiZSBhdXRvbWF0aWNhbGx5IGluc2VydGVkIGluIHRoZSBsYXN0IHdoaXRlc3BhY2UuXG4gICAgICogRGlzYWJsZSBieSBzZXR0aW5nIHZhbHVlIHRvIDBcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLm1heFdpZHRoID0gMDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBtYXggbGluZSBoZWlnaHQuIFRoaXMgaXMgdXNlZnVsIHdoZW4gdHJ5aW5nIHRvIHVzZSB0aGUgdG90YWwgaGVpZ2h0IG9mIHRoZSBUZXh0LCBpZTogd2hlbiB0cnlpbmcgdG8gdmVydGljYWxseSBhbGlnbi5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLm1heExpbmVIZWlnaHQgPSAwO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGRpcnR5IHN0YXRlIG9mIHRoaXMgb2JqZWN0LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKi9cbiAgICB0aGlzLmRpcnR5ID0gZmFsc2U7XG5cbiAgICB0aGlzLnVwZGF0ZVRleHQoKTtcbn1cblxuLy8gY29uc3RydWN0b3JcbkJpdG1hcFRleHQucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShjb3JlLkNvbnRhaW5lci5wcm90b3R5cGUpO1xuQml0bWFwVGV4dC5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBCaXRtYXBUZXh0O1xubW9kdWxlLmV4cG9ydHMgPSBCaXRtYXBUZXh0O1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhCaXRtYXBUZXh0LnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFRoZSB0aW50IG9mIHRoZSBCaXRtYXBUZXh0IG9iamVjdFxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmV4dHJhcy5CaXRtYXBUZXh0I1xuICAgICAqL1xuICAgIHRpbnQ6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fZm9udC50aW50O1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5fZm9udC50aW50ID0gKHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicgJiYgdmFsdWUgPj0gMCkgPyB2YWx1ZSA6IDB4RkZGRkZGO1xuXG4gICAgICAgICAgICB0aGlzLmRpcnR5ID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBUaGUgYWxpZ25tZW50IG9mIHRoZSBCaXRtYXBUZXh0IG9iamVjdFxuICAgICAqXG4gICAgICogQG1lbWJlciB7c3RyaW5nfVxuICAgICAqIEBkZWZhdWx0ICdsZWZ0J1xuICAgICAqIEBtZW1iZXJvZiBQSVhJLmV4dHJhcy5CaXRtYXBUZXh0I1xuICAgICAqL1xuICAgIGFsaWduOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2ZvbnQuYWxpZ247XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLl9mb250LmFsaWduID0gdmFsdWUgfHwgJ2xlZnQnO1xuXG4gICAgICAgICAgICB0aGlzLmRpcnR5ID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBUaGUgZm9udCBkZXNjcmlwdG9yIG9mIHRoZSBCaXRtYXBUZXh0IG9iamVjdFxuICAgICAqXG4gICAgICogQG1lbWJlciB7Rm9udH1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5leHRyYXMuQml0bWFwVGV4dCNcbiAgICAgKi9cbiAgICBmb250OiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2ZvbnQ7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICBpZiAoIXZhbHVlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgICAgIHZhbHVlID0gdmFsdWUuc3BsaXQoJyAnKTtcblxuICAgICAgICAgICAgICAgIHRoaXMuX2ZvbnQubmFtZSA9IHZhbHVlLmxlbmd0aCA9PT0gMSA/IHZhbHVlWzBdIDogdmFsdWUuc2xpY2UoMSkuam9pbignICcpO1xuICAgICAgICAgICAgICAgIHRoaXMuX2ZvbnQuc2l6ZSA9IHZhbHVlLmxlbmd0aCA+PSAyID8gcGFyc2VJbnQodmFsdWVbMF0sIDEwKSA6IEJpdG1hcFRleHQuZm9udHNbdGhpcy5fZm9udC5uYW1lXS5zaXplO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fZm9udC5uYW1lID0gdmFsdWUubmFtZTtcbiAgICAgICAgICAgICAgICB0aGlzLl9mb250LnNpemUgPSB0eXBlb2YgdmFsdWUuc2l6ZSA9PT0gJ251bWJlcicgPyB2YWx1ZS5zaXplIDogcGFyc2VJbnQodmFsdWUuc2l6ZSwgMTApO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLmRpcnR5ID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBUaGUgdGV4dCBvZiB0aGUgQml0bWFwVGV4dCBvYmplY3RcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge3N0cmluZ31cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5leHRyYXMuQml0bWFwVGV4dCNcbiAgICAgKi9cbiAgICB0ZXh0OiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3RleHQ7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB2YWx1ZSA9IHZhbHVlLnRvU3RyaW5nKCkgfHwgJyAnO1xuICAgICAgICAgICAgaWYgKHRoaXMuX3RleHQgPT09IHZhbHVlKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuX3RleHQgPSB2YWx1ZTtcbiAgICAgICAgICAgIHRoaXMuZGlydHkgPSB0cnVlO1xuICAgICAgICB9XG4gICAgfVxufSk7XG5cbi8qKlxuICogUmVuZGVycyB0ZXh0IGFuZCB1cGRhdGVzIGl0IHdoZW4gbmVlZGVkXG4gKlxuICogQHByaXZhdGVcbiAqL1xuQml0bWFwVGV4dC5wcm90b3R5cGUudXBkYXRlVGV4dCA9IGZ1bmN0aW9uICgpXG57XG4gICAgdmFyIGRhdGEgPSBCaXRtYXBUZXh0LmZvbnRzW3RoaXMuX2ZvbnQubmFtZV07XG4gICAgdmFyIHBvcyA9IG5ldyBjb3JlLlBvaW50KCk7XG4gICAgdmFyIHByZXZDaGFyQ29kZSA9IG51bGw7XG4gICAgdmFyIGNoYXJzID0gW107XG4gICAgdmFyIGxhc3RMaW5lV2lkdGggPSAwO1xuICAgIHZhciBtYXhMaW5lV2lkdGggPSAwO1xuICAgIHZhciBsaW5lV2lkdGhzID0gW107XG4gICAgdmFyIGxpbmUgPSAwO1xuICAgIHZhciBzY2FsZSA9IHRoaXMuX2ZvbnQuc2l6ZSAvIGRhdGEuc2l6ZTtcbiAgICB2YXIgbGFzdFNwYWNlID0gLTE7XG4gICAgdmFyIG1heExpbmVIZWlnaHQgPSAwO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLnRleHQubGVuZ3RoOyBpKyspXG4gICAge1xuICAgICAgICB2YXIgY2hhckNvZGUgPSB0aGlzLnRleHQuY2hhckNvZGVBdChpKTtcbiAgICAgICAgbGFzdFNwYWNlID0gLyhcXHMpLy50ZXN0KHRoaXMudGV4dC5jaGFyQXQoaSkpID8gaSA6IGxhc3RTcGFjZTtcblxuICAgICAgICBpZiAoLyg/OlxcclxcbnxcXHJ8XFxuKS8udGVzdCh0aGlzLnRleHQuY2hhckF0KGkpKSlcbiAgICAgICAge1xuICAgICAgICAgICAgbGluZVdpZHRocy5wdXNoKGxhc3RMaW5lV2lkdGgpO1xuICAgICAgICAgICAgbWF4TGluZVdpZHRoID0gTWF0aC5tYXgobWF4TGluZVdpZHRoLCBsYXN0TGluZVdpZHRoKTtcbiAgICAgICAgICAgIGxpbmUrKztcblxuICAgICAgICAgICAgcG9zLnggPSAwO1xuICAgICAgICAgICAgcG9zLnkgKz0gZGF0YS5saW5lSGVpZ2h0O1xuICAgICAgICAgICAgcHJldkNoYXJDb2RlID0gbnVsbDtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGxhc3RTcGFjZSAhPT0gLTEgJiYgdGhpcy5tYXhXaWR0aCA+IDAgJiYgcG9zLnggKiBzY2FsZSA+IHRoaXMubWF4V2lkdGgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNvcmUudXRpbHMucmVtb3ZlSXRlbXMoY2hhcnMsIGxhc3RTcGFjZSwgaSAtIGxhc3RTcGFjZSk7XG4gICAgICAgICAgICBpID0gbGFzdFNwYWNlO1xuICAgICAgICAgICAgbGFzdFNwYWNlID0gLTE7XG5cbiAgICAgICAgICAgIGxpbmVXaWR0aHMucHVzaChsYXN0TGluZVdpZHRoKTtcbiAgICAgICAgICAgIG1heExpbmVXaWR0aCA9IE1hdGgubWF4KG1heExpbmVXaWR0aCwgbGFzdExpbmVXaWR0aCk7XG4gICAgICAgICAgICBsaW5lKys7XG5cbiAgICAgICAgICAgIHBvcy54ID0gMDtcbiAgICAgICAgICAgIHBvcy55ICs9IGRhdGEubGluZUhlaWdodDtcbiAgICAgICAgICAgIHByZXZDaGFyQ29kZSA9IG51bGw7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBjaGFyRGF0YSA9IGRhdGEuY2hhcnNbY2hhckNvZGVdO1xuXG4gICAgICAgIGlmICghY2hhckRhdGEpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHByZXZDaGFyQ29kZSAmJiBjaGFyRGF0YS5rZXJuaW5nW3ByZXZDaGFyQ29kZV0pXG4gICAgICAgIHtcbiAgICAgICAgICAgIHBvcy54ICs9IGNoYXJEYXRhLmtlcm5pbmdbcHJldkNoYXJDb2RlXTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNoYXJzLnB1c2goe3RleHR1cmU6Y2hhckRhdGEudGV4dHVyZSwgbGluZTogbGluZSwgY2hhckNvZGU6IGNoYXJDb2RlLCBwb3NpdGlvbjogbmV3IGNvcmUuUG9pbnQocG9zLnggKyBjaGFyRGF0YS54T2Zmc2V0LCBwb3MueSArIGNoYXJEYXRhLnlPZmZzZXQpfSk7XG4gICAgICAgIGxhc3RMaW5lV2lkdGggPSBwb3MueCArIChjaGFyRGF0YS50ZXh0dXJlLndpZHRoICsgY2hhckRhdGEueE9mZnNldCk7XG4gICAgICAgIHBvcy54ICs9IGNoYXJEYXRhLnhBZHZhbmNlO1xuICAgICAgICBtYXhMaW5lSGVpZ2h0ID0gTWF0aC5tYXgobWF4TGluZUhlaWdodCwgKGNoYXJEYXRhLnlPZmZzZXQgKyBjaGFyRGF0YS50ZXh0dXJlLmhlaWdodCkpO1xuICAgICAgICBwcmV2Q2hhckNvZGUgPSBjaGFyQ29kZTtcbiAgICB9XG5cbiAgICBsaW5lV2lkdGhzLnB1c2gobGFzdExpbmVXaWR0aCk7XG4gICAgbWF4TGluZVdpZHRoID0gTWF0aC5tYXgobWF4TGluZVdpZHRoLCBsYXN0TGluZVdpZHRoKTtcblxuICAgIHZhciBsaW5lQWxpZ25PZmZzZXRzID0gW107XG5cbiAgICBmb3IgKGkgPSAwOyBpIDw9IGxpbmU7IGkrKylcbiAgICB7XG4gICAgICAgIHZhciBhbGlnbk9mZnNldCA9IDA7XG5cbiAgICAgICAgaWYgKHRoaXMuX2ZvbnQuYWxpZ24gPT09ICdyaWdodCcpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGFsaWduT2Zmc2V0ID0gbWF4TGluZVdpZHRoIC0gbGluZVdpZHRoc1tpXTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh0aGlzLl9mb250LmFsaWduID09PSAnY2VudGVyJylcbiAgICAgICAge1xuICAgICAgICAgICAgYWxpZ25PZmZzZXQgPSAobWF4TGluZVdpZHRoIC0gbGluZVdpZHRoc1tpXSkgLyAyO1xuICAgICAgICB9XG5cbiAgICAgICAgbGluZUFsaWduT2Zmc2V0cy5wdXNoKGFsaWduT2Zmc2V0KTtcbiAgICB9XG5cbiAgICB2YXIgbGVuQ2hhcnMgPSBjaGFycy5sZW5ndGg7XG4gICAgdmFyIHRpbnQgPSB0aGlzLnRpbnQ7XG5cbiAgICBmb3IgKGkgPSAwOyBpIDwgbGVuQ2hhcnM7IGkrKylcbiAgICB7XG4gICAgICAgIHZhciBjID0gdGhpcy5fZ2x5cGhzW2ldOyAvLyBnZXQgdGhlIG5leHQgZ2x5cGggc3ByaXRlXG5cbiAgICAgICAgaWYgKGMpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGMudGV4dHVyZSA9IGNoYXJzW2ldLnRleHR1cmU7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgICBjID0gbmV3IGNvcmUuU3ByaXRlKGNoYXJzW2ldLnRleHR1cmUpO1xuICAgICAgICAgICAgdGhpcy5fZ2x5cGhzLnB1c2goYyk7XG4gICAgICAgIH1cblxuICAgICAgICBjLnBvc2l0aW9uLnggPSAoY2hhcnNbaV0ucG9zaXRpb24ueCArIGxpbmVBbGlnbk9mZnNldHNbY2hhcnNbaV0ubGluZV0pICogc2NhbGU7XG4gICAgICAgIGMucG9zaXRpb24ueSA9IGNoYXJzW2ldLnBvc2l0aW9uLnkgKiBzY2FsZTtcbiAgICAgICAgYy5zY2FsZS54ID0gYy5zY2FsZS55ID0gc2NhbGU7XG4gICAgICAgIGMudGludCA9IHRpbnQ7XG5cbiAgICAgICAgaWYgKCFjLnBhcmVudClcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5hZGRDaGlsZChjKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIHJlbW92ZSB1bm5lY2Vzc2FyeSBjaGlsZHJlbi5cbiAgICBmb3IgKGkgPSBsZW5DaGFyczsgaSA8IHRoaXMuX2dseXBocy5sZW5ndGg7ICsraSlcbiAgICB7XG4gICAgICAgIHRoaXMucmVtb3ZlQ2hpbGQodGhpcy5fZ2x5cGhzW2ldKTtcbiAgICB9XG5cbiAgICB0aGlzLnRleHRXaWR0aCA9IG1heExpbmVXaWR0aCAqIHNjYWxlO1xuICAgIHRoaXMudGV4dEhlaWdodCA9IChwb3MueSArIGRhdGEubGluZUhlaWdodCkgKiBzY2FsZTtcbiAgICB0aGlzLm1heExpbmVIZWlnaHQgPSBtYXhMaW5lSGVpZ2h0ICogc2NhbGU7XG59O1xuXG4vKipcbiAqIFVwZGF0ZXMgdGhlIHRyYW5zZm9ybSBvZiB0aGlzIG9iamVjdFxuICpcbiAqIEBwcml2YXRlXG4gKi9cbkJpdG1hcFRleHQucHJvdG90eXBlLnVwZGF0ZVRyYW5zZm9ybSA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy52YWxpZGF0ZSgpO1xuICAgIHRoaXMuY29udGFpbmVyVXBkYXRlVHJhbnNmb3JtKCk7XG59O1xuXG4vKipcbiAqIFZhbGlkYXRlcyB0ZXh0IGJlZm9yZSBjYWxsaW5nIHBhcmVudCdzIGdldExvY2FsQm91bmRzXG4gKlxuICogQHJldHVybiB7UElYSS5SZWN0YW5nbGV9IFRoZSByZWN0YW5ndWxhciBib3VuZGluZyBhcmVhXG4gKi9cblxuQml0bWFwVGV4dC5wcm90b3R5cGUuZ2V0TG9jYWxCb3VuZHMgPSBmdW5jdGlvbigpXG57XG4gICAgdGhpcy52YWxpZGF0ZSgpO1xuICAgIHJldHVybiBjb3JlLkNvbnRhaW5lci5wcm90b3R5cGUuZ2V0TG9jYWxCb3VuZHMuY2FsbCh0aGlzKTtcbn07XG5cbi8qKlxuICogVXBkYXRlcyB0ZXh0IHdoZW4gbmVlZGVkXG4gKlxuICogQHByaXZhdGVcbiAqL1xuQml0bWFwVGV4dC5wcm90b3R5cGUudmFsaWRhdGUgPSBmdW5jdGlvbigpXG57XG4gICAgaWYgKHRoaXMuZGlydHkpXG4gICAge1xuICAgICAgICB0aGlzLnVwZGF0ZVRleHQoKTtcbiAgICAgICAgdGhpcy5kaXJ0eSA9IGZhbHNlO1xuICAgIH1cbn07XG5cbkJpdG1hcFRleHQuZm9udHMgPSB7fTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vY29yZScpO1xuXG4vKipcbiAqIEEgTW92aWVDbGlwIGlzIGEgc2ltcGxlIHdheSB0byBkaXNwbGF5IGFuIGFuaW1hdGlvbiBkZXBpY3RlZCBieSBhIGxpc3Qgb2YgdGV4dHVyZXMuXG4gKlxuICogYGBganNcbiAqIHZhciBhbGllbkltYWdlcyA9IFtcImltYWdlX3NlcXVlbmNlXzAxLnBuZ1wiLFwiaW1hZ2Vfc2VxdWVuY2VfMDIucG5nXCIsXCJpbWFnZV9zZXF1ZW5jZV8wMy5wbmdcIixcImltYWdlX3NlcXVlbmNlXzA0LnBuZ1wiXTtcbiAqIHZhciB0ZXh0dXJlQXJyYXkgPSBbXTtcbiAqXG4gKiBmb3IgKHZhciBpPTA7IGkgPCA0OyBpKyspXG4gKiB7XG4gKiAgICAgIHZhciB0ZXh0dXJlID0gUElYSS5UZXh0dXJlLmZyb21JbWFnZShhbGllbkltYWdlc1tpXSk7XG4gKiAgICAgIHRleHR1cmVBcnJheS5wdXNoKHRleHR1cmUpO1xuICogfTtcbiAqXG4gKiB2YXIgbWMgPSBuZXcgUElYSS5Nb3ZpZUNsaXAodGV4dHVyZUFycmF5KTtcbiAqIGBgYFxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5TcHJpdGVcbiAqIEBtZW1iZXJvZiBQSVhJLmV4dHJhc1xuICogQHBhcmFtIHRleHR1cmVzIHtQSVhJLlRleHR1cmVbXXxPYmplY3RbXX0gYW4gYXJyYXkgb2Yge0BsaW5rIFBJWEkuVGV4dHVyZX0gb3IgZnJhbWUgb2JqZWN0cyB0aGF0IG1ha2UgdXAgdGhlIGFuaW1hdGlvblxuICogQHBhcmFtIHRleHR1cmVzW10udGV4dHVyZSB7UElYSS5UZXh0dXJlfSB0aGUge0BsaW5rIFBJWEkuVGV4dHVyZX0gb2YgdGhlIGZyYW1lXG4gKiBAcGFyYW0gdGV4dHVyZXNbXS50aW1lIHtudW1iZXJ9IHRoZSBkdXJhdGlvbiBvZiB0aGUgZnJhbWUgaW4gbXNcbiAqL1xuZnVuY3Rpb24gTW92aWVDbGlwKHRleHR1cmVzKVxue1xuICAgIGNvcmUuU3ByaXRlLmNhbGwodGhpcywgdGV4dHVyZXNbMF0gaW5zdGFuY2VvZiBjb3JlLlRleHR1cmUgPyB0ZXh0dXJlc1swXSA6IHRleHR1cmVzWzBdLnRleHR1cmUpO1xuXG4gICAgLyoqXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl90ZXh0dXJlcyA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX2R1cmF0aW9ucyA9IG51bGw7XG5cbiAgICB0aGlzLnRleHR1cmVzID0gdGV4dHVyZXM7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgc3BlZWQgdGhhdCB0aGUgTW92aWVDbGlwIHdpbGwgcGxheSBhdC4gSGlnaGVyIGlzIGZhc3RlciwgbG93ZXIgaXMgc2xvd2VyXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMVxuICAgICAqL1xuICAgIHRoaXMuYW5pbWF0aW9uU3BlZWQgPSAxO1xuXG4gICAgLyoqXG4gICAgICogV2hldGhlciBvciBub3QgdGhlIG1vdmllIGNsaXAgcmVwZWF0cyBhZnRlciBwbGF5aW5nLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKiBAZGVmYXVsdCB0cnVlXG4gICAgICovXG4gICAgdGhpcy5sb29wID0gdHJ1ZTtcblxuICAgIC8qKlxuICAgICAqIEZ1bmN0aW9uIHRvIGNhbGwgd2hlbiBhIE1vdmllQ2xpcCBmaW5pc2hlcyBwbGF5aW5nXG4gICAgICpcbiAgICAgKiBAbWV0aG9kXG4gICAgICogQG1lbWJlcm9mIFBJWEkuZXh0cmFzLk1vdmllQ2xpcCNcbiAgICAgKi9cbiAgICB0aGlzLm9uQ29tcGxldGUgPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogRWxhcHNlZCB0aW1lIHNpbmNlIGFuaW1hdGlvbiBoYXMgYmVlbiBzdGFydGVkLCB1c2VkIGludGVybmFsbHkgdG8gZGlzcGxheSBjdXJyZW50IHRleHR1cmVcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX2N1cnJlbnRUaW1lID0gMDtcblxuICAgIC8qKlxuICAgICAqIEluZGljYXRlcyBpZiB0aGUgTW92aWVDbGlwIGlzIGN1cnJlbnRseSBwbGF5aW5nXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqIEByZWFkb25seVxuICAgICAqL1xuICAgIHRoaXMucGxheWluZyA9IGZhbHNlO1xufVxuXG4vLyBjb25zdHJ1Y3RvclxuTW92aWVDbGlwLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoY29yZS5TcHJpdGUucHJvdG90eXBlKTtcbk1vdmllQ2xpcC5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBNb3ZpZUNsaXA7XG5tb2R1bGUuZXhwb3J0cyA9IE1vdmllQ2xpcDtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoTW92aWVDbGlwLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIHRvdGFsRnJhbWVzIGlzIHRoZSB0b3RhbCBudW1iZXIgb2YgZnJhbWVzIGluIHRoZSBNb3ZpZUNsaXAuIFRoaXMgaXMgdGhlIHNhbWUgYXMgbnVtYmVyIG9mIHRleHR1cmVzXG4gICAgICogYXNzaWduZWQgdG8gdGhlIE1vdmllQ2xpcC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5leHRyYXMuTW92aWVDbGlwI1xuICAgICAqIEBkZWZhdWx0IDBcbiAgICAgKiBAcmVhZG9ubHlcbiAgICAgKi9cbiAgICB0b3RhbEZyYW1lczoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3RleHR1cmVzLmxlbmd0aDtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBUaGUgYXJyYXkgb2YgdGV4dHVyZXMgdXNlZCBmb3IgdGhpcyBNb3ZpZUNsaXBcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuVGV4dHVyZVtdfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmV4dHJhcy5Nb3ZpZUNsaXAjXG4gICAgICpcbiAgICAgKi9cbiAgICB0ZXh0dXJlczoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl90ZXh0dXJlcztcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGlmKHZhbHVlWzBdIGluc3RhbmNlb2YgY29yZS5UZXh0dXJlKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHRoaXMuX3RleHR1cmVzID0gdmFsdWU7XG4gICAgICAgICAgICAgICAgdGhpcy5fZHVyYXRpb25zID0gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB0aGlzLl90ZXh0dXJlcyA9IFtdO1xuICAgICAgICAgICAgICAgIHRoaXMuX2R1cmF0aW9ucyA9IFtdO1xuICAgICAgICAgICAgICAgIGZvcih2YXIgaSA9IDA7IGkgPCB2YWx1ZS5sZW5ndGg7IGkrKylcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3RleHR1cmVzLnB1c2godmFsdWVbaV0udGV4dHVyZSk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2R1cmF0aW9ucy5wdXNoKHZhbHVlW2ldLnRpbWUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAqIFRoZSBNb3ZpZUNsaXBzIGN1cnJlbnQgZnJhbWUgaW5kZXhcbiAgICAqXG4gICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgKiBAbWVtYmVyb2YgUElYSS5leHRyYXMuTW92aWVDbGlwI1xuICAgICogQHJlYWRvbmx5XG4gICAgKi9cbiAgICBjdXJyZW50RnJhbWU6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICB2YXIgY3VycmVudEZyYW1lID0gTWF0aC5mbG9vcih0aGlzLl9jdXJyZW50VGltZSkgJSB0aGlzLl90ZXh0dXJlcy5sZW5ndGg7XG4gICAgICAgICAgICBpZiAoY3VycmVudEZyYW1lIDwgMClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjdXJyZW50RnJhbWUgKz0gdGhpcy5fdGV4dHVyZXMubGVuZ3RoO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGN1cnJlbnRGcmFtZTtcbiAgICAgICAgfVxuICAgIH1cblxufSk7XG5cbi8qKlxuICogU3RvcHMgdGhlIE1vdmllQ2xpcFxuICpcbiAqL1xuTW92aWVDbGlwLnByb3RvdHlwZS5zdG9wID0gZnVuY3Rpb24gKClcbntcbiAgICBpZighdGhpcy5wbGF5aW5nKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMucGxheWluZyA9IGZhbHNlO1xuICAgIGNvcmUudGlja2VyLnNoYXJlZC5yZW1vdmUodGhpcy51cGRhdGUsIHRoaXMpO1xufTtcblxuLyoqXG4gKiBQbGF5cyB0aGUgTW92aWVDbGlwXG4gKlxuICovXG5Nb3ZpZUNsaXAucHJvdG90eXBlLnBsYXkgPSBmdW5jdGlvbiAoKVxue1xuICAgIGlmKHRoaXMucGxheWluZylcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLnBsYXlpbmcgPSB0cnVlO1xuICAgIGNvcmUudGlja2VyLnNoYXJlZC5hZGQodGhpcy51cGRhdGUsIHRoaXMpO1xufTtcblxuLyoqXG4gKiBTdG9wcyB0aGUgTW92aWVDbGlwIGFuZCBnb2VzIHRvIGEgc3BlY2lmaWMgZnJhbWVcbiAqXG4gKiBAcGFyYW0gZnJhbWVOdW1iZXIge251bWJlcn0gZnJhbWUgaW5kZXggdG8gc3RvcCBhdFxuICovXG5Nb3ZpZUNsaXAucHJvdG90eXBlLmdvdG9BbmRTdG9wID0gZnVuY3Rpb24gKGZyYW1lTnVtYmVyKVxue1xuICAgIHRoaXMuc3RvcCgpO1xuXG4gICAgdGhpcy5fY3VycmVudFRpbWUgPSBmcmFtZU51bWJlcjtcblxuICAgIHRoaXMuX3RleHR1cmUgPSB0aGlzLl90ZXh0dXJlc1t0aGlzLmN1cnJlbnRGcmFtZV07XG59O1xuXG4vKipcbiAqIEdvZXMgdG8gYSBzcGVjaWZpYyBmcmFtZSBhbmQgYmVnaW5zIHBsYXlpbmcgdGhlIE1vdmllQ2xpcFxuICpcbiAqIEBwYXJhbSBmcmFtZU51bWJlciB7bnVtYmVyfSBmcmFtZSBpbmRleCB0byBzdGFydCBhdFxuICovXG5Nb3ZpZUNsaXAucHJvdG90eXBlLmdvdG9BbmRQbGF5ID0gZnVuY3Rpb24gKGZyYW1lTnVtYmVyKVxue1xuICAgIHRoaXMuX2N1cnJlbnRUaW1lID0gZnJhbWVOdW1iZXI7XG5cbiAgICB0aGlzLnBsYXkoKTtcbn07XG5cbi8qXG4gKiBVcGRhdGVzIHRoZSBvYmplY3QgdHJhbnNmb3JtIGZvciByZW5kZXJpbmdcbiAqIEBwcml2YXRlXG4gKi9cbk1vdmllQ2xpcC5wcm90b3R5cGUudXBkYXRlID0gZnVuY3Rpb24gKGRlbHRhVGltZSlcbntcbiAgICB2YXIgZWxhcHNlZCA9IHRoaXMuYW5pbWF0aW9uU3BlZWQgKiBkZWx0YVRpbWU7XG5cbiAgICBpZiAodGhpcy5fZHVyYXRpb25zICE9PSBudWxsKVxuICAgIHtcbiAgICAgICAgdmFyIGxhZyA9IHRoaXMuX2N1cnJlbnRUaW1lICUgMSAqIHRoaXMuX2R1cmF0aW9uc1t0aGlzLmN1cnJlbnRGcmFtZV07XG5cbiAgICAgICAgbGFnICs9IGVsYXBzZWQgLyA2MCAqIDEwMDA7XG5cbiAgICAgICAgd2hpbGUgKGxhZyA8IDApXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuX2N1cnJlbnRUaW1lLS07XG4gICAgICAgICAgICBsYWcgKz0gdGhpcy5fZHVyYXRpb25zW3RoaXMuY3VycmVudEZyYW1lXTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBzaWduID0gTWF0aC5zaWduKHRoaXMuYW5pbWF0aW9uU3BlZWQgKiBkZWx0YVRpbWUpO1xuICAgICAgICB0aGlzLl9jdXJyZW50VGltZSA9IE1hdGguZmxvb3IodGhpcy5fY3VycmVudFRpbWUpO1xuXG4gICAgICAgIHdoaWxlIChsYWcgPj0gdGhpcy5fZHVyYXRpb25zW3RoaXMuY3VycmVudEZyYW1lXSlcbiAgICAgICAge1xuICAgICAgICAgICAgbGFnIC09IHRoaXMuX2R1cmF0aW9uc1t0aGlzLmN1cnJlbnRGcmFtZV0gKiBzaWduO1xuICAgICAgICAgICAgdGhpcy5fY3VycmVudFRpbWUgKz0gc2lnbjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX2N1cnJlbnRUaW1lICs9IGxhZyAvIHRoaXMuX2R1cmF0aW9uc1t0aGlzLmN1cnJlbnRGcmFtZV07XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHRoaXMuX2N1cnJlbnRUaW1lICs9IGVsYXBzZWQ7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX2N1cnJlbnRUaW1lIDwgMCAmJiAhdGhpcy5sb29wKVxuICAgIHtcbiAgICAgICAgdGhpcy5nb3RvQW5kU3RvcCgwKTtcblxuICAgICAgICBpZiAodGhpcy5vbkNvbXBsZXRlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLm9uQ29tcGxldGUoKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBlbHNlIGlmICh0aGlzLl9jdXJyZW50VGltZSA+PSB0aGlzLl90ZXh0dXJlcy5sZW5ndGggJiYgIXRoaXMubG9vcClcbiAgICB7XG4gICAgICAgIHRoaXMuZ290b0FuZFN0b3AodGhpcy5fdGV4dHVyZXMubGVuZ3RoIC0gMSk7XG5cbiAgICAgICAgaWYgKHRoaXMub25Db21wbGV0ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5vbkNvbXBsZXRlKCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgdGhpcy5fdGV4dHVyZSA9IHRoaXMuX3RleHR1cmVzW3RoaXMuY3VycmVudEZyYW1lXTtcbiAgICB9XG5cbn07XG5cbi8qXG4gKiBTdG9wcyB0aGUgTW92aWVDbGlwIGFuZCBkZXN0cm95cyBpdFxuICpcbiAqL1xuTW92aWVDbGlwLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKCApXG57XG4gICAgdGhpcy5zdG9wKCk7XG4gICAgY29yZS5TcHJpdGUucHJvdG90eXBlLmRlc3Ryb3kuY2FsbCh0aGlzKTtcbn07XG5cbi8qKlxuICogQSBzaG9ydCBoYW5kIHdheSBvZiBjcmVhdGluZyBhIG1vdmllY2xpcCBmcm9tIGFuIGFycmF5IG9mIGZyYW1lIGlkc1xuICpcbiAqIEBzdGF0aWNcbiAqIEBwYXJhbSBmcmFtZXMge3N0cmluZ1tdfSB0aGUgYXJyYXkgb2YgZnJhbWVzIGlkcyB0aGUgbW92aWVjbGlwIHdpbGwgdXNlIGFzIGl0cyB0ZXh0dXJlIGZyYW1lc1xuICovXG5Nb3ZpZUNsaXAuZnJvbUZyYW1lcyA9IGZ1bmN0aW9uIChmcmFtZXMpXG57XG4gICAgdmFyIHRleHR1cmVzID0gW107XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGZyYW1lcy5sZW5ndGg7ICsraSlcbiAgICB7XG4gICAgICAgIHRleHR1cmVzLnB1c2gobmV3IGNvcmUuVGV4dHVyZS5mcm9tRnJhbWUoZnJhbWVzW2ldKSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBNb3ZpZUNsaXAodGV4dHVyZXMpO1xufTtcblxuLyoqXG4gKiBBIHNob3J0IGhhbmQgd2F5IG9mIGNyZWF0aW5nIGEgbW92aWVjbGlwIGZyb20gYW4gYXJyYXkgb2YgaW1hZ2UgaWRzXG4gKlxuICogQHN0YXRpY1xuICogQHBhcmFtIGltYWdlcyB7c3RyaW5nW119IHRoZSBhcnJheSBvZiBpbWFnZSB1cmxzIHRoZSBtb3ZpZWNsaXAgd2lsbCB1c2UgYXMgaXRzIHRleHR1cmUgZnJhbWVzXG4gKi9cbk1vdmllQ2xpcC5mcm9tSW1hZ2VzID0gZnVuY3Rpb24gKGltYWdlcylcbntcbiAgICB2YXIgdGV4dHVyZXMgPSBbXTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgaW1hZ2VzLmxlbmd0aDsgKytpKVxuICAgIHtcbiAgICAgICAgdGV4dHVyZXMucHVzaChuZXcgY29yZS5UZXh0dXJlLmZyb21JbWFnZShpbWFnZXNbaV0pKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IE1vdmllQ2xpcCh0ZXh0dXJlcyk7XG59OyIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vY29yZScpLFxuICAgIC8vIGEgc3ByaXRlIHVzZSBkZm9yIHJlbmRlcmluZyB0ZXh0dXJlcy4uXG4gICAgdGVtcFBvaW50ID0gbmV3IGNvcmUuUG9pbnQoKSxcbiAgICBDYW52YXNUaW50ZXIgPSByZXF1aXJlKCcuLi9jb3JlL3JlbmRlcmVycy9jYW52YXMvdXRpbHMvQ2FudmFzVGludGVyJyk7XG5cbi8qKlxuICogQSB0aWxpbmcgc3ByaXRlIGlzIGEgZmFzdCB3YXkgb2YgcmVuZGVyaW5nIGEgdGlsaW5nIGltYWdlXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLlNwcml0ZVxuICogQG1lbWJlcm9mIFBJWEkuZXh0cmFzXG4gKiBAcGFyYW0gdGV4dHVyZSB7VGV4dHVyZX0gdGhlIHRleHR1cmUgb2YgdGhlIHRpbGluZyBzcHJpdGVcbiAqIEBwYXJhbSB3aWR0aCB7bnVtYmVyfSAgdGhlIHdpZHRoIG9mIHRoZSB0aWxpbmcgc3ByaXRlXG4gKiBAcGFyYW0gaGVpZ2h0IHtudW1iZXJ9IHRoZSBoZWlnaHQgb2YgdGhlIHRpbGluZyBzcHJpdGVcbiAqL1xuZnVuY3Rpb24gVGlsaW5nU3ByaXRlKHRleHR1cmUsIHdpZHRoLCBoZWlnaHQpXG57XG4gICAgY29yZS5TcHJpdGUuY2FsbCh0aGlzLCB0ZXh0dXJlKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBzY2FsaW5nIG9mIHRoZSBpbWFnZSB0aGF0IGlzIGJlaW5nIHRpbGVkXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlBvaW50fVxuICAgICAqL1xuICAgIHRoaXMudGlsZVNjYWxlID0gbmV3IGNvcmUuUG9pbnQoMSwxKTtcblxuXG4gICAgLyoqXG4gICAgICogVGhlIG9mZnNldCBwb3NpdGlvbiBvZiB0aGUgaW1hZ2UgdGhhdCBpcyBiZWluZyB0aWxlZFxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5Qb2ludH1cbiAgICAgKi9cbiAgICB0aGlzLnRpbGVQb3NpdGlvbiA9IG5ldyBjb3JlLlBvaW50KDAsMCk7XG5cbiAgICAvLy8vLyBwcml2YXRlXG5cbiAgICAvKipcbiAgICAgKiBUaGUgd2l0aCBvZiB0aGUgdGlsaW5nIHNwcml0ZVxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fd2lkdGggPSB3aWR0aCB8fCAxMDA7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgaGVpZ2h0IG9mIHRoZSB0aWxpbmcgc3ByaXRlXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9oZWlnaHQgPSBoZWlnaHQgfHwgMTAwO1xuXG4gICAgLyoqXG4gICAgICogQW4gaW50ZXJuYWwgV2ViR0wgVVYgY2FjaGUuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlRleHR1cmVVdnN9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl91dnMgPSBuZXcgY29yZS5UZXh0dXJlVXZzKCk7XG5cbiAgICB0aGlzLl9jYW52YXNQYXR0ZXJuID0gbnVsbDtcblxuICAgIC8vVE9ETyBtb3ZlLi5cbiAgICB0aGlzLnNoYWRlciA9IG5ldyBjb3JlLkFic3RyYWN0RmlsdGVyKFxuXG4gICAgICBbXG4gICAgICAgICdwcmVjaXNpb24gbG93cCBmbG9hdDsnLFxuICAgICAgICAnYXR0cmlidXRlIHZlYzIgYVZlcnRleFBvc2l0aW9uOycsXG4gICAgICAgICdhdHRyaWJ1dGUgdmVjMiBhVGV4dHVyZUNvb3JkOycsXG4gICAgICAgICdhdHRyaWJ1dGUgdmVjNCBhQ29sb3I7JyxcblxuICAgICAgICAndW5pZm9ybSBtYXQzIHByb2plY3Rpb25NYXRyaXg7JyxcblxuICAgICAgICAndW5pZm9ybSB2ZWM0IHVGcmFtZTsnLFxuICAgICAgICAndW5pZm9ybSB2ZWM0IHVUcmFuc2Zvcm07JyxcblxuICAgICAgICAndmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7JyxcbiAgICAgICAgJ3ZhcnlpbmcgdmVjNCB2Q29sb3I7JyxcblxuICAgICAgICAndm9pZCBtYWluKHZvaWQpeycsXG4gICAgICAgICcgICBnbF9Qb3NpdGlvbiA9IHZlYzQoKHByb2plY3Rpb25NYXRyaXggKiB2ZWMzKGFWZXJ0ZXhQb3NpdGlvbiwgMS4wKSkueHksIDAuMCwgMS4wKTsnLFxuXG4gICAgICAgICcgICB2ZWMyIGNvb3JkID0gYVRleHR1cmVDb29yZDsnLFxuICAgICAgICAnICAgY29vcmQgLT0gdVRyYW5zZm9ybS54eTsnLFxuICAgICAgICAnICAgY29vcmQgLz0gdVRyYW5zZm9ybS56dzsnLFxuICAgICAgICAnICAgdlRleHR1cmVDb29yZCA9IGNvb3JkOycsXG5cbiAgICAgICAgJyAgIHZDb2xvciA9IHZlYzQoYUNvbG9yLnJnYiAqIGFDb2xvci5hLCBhQ29sb3IuYSk7JyxcbiAgICAgICAgJ30nXG4gICAgICBdLmpvaW4oJ1xcbicpLFxuICAgICAgW1xuICAgICAgICAncHJlY2lzaW9uIGxvd3AgZmxvYXQ7JyxcblxuICAgICAgICAndmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7JyxcbiAgICAgICAgJ3ZhcnlpbmcgdmVjNCB2Q29sb3I7JyxcblxuICAgICAgICAndW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXI7JyxcbiAgICAgICAgJ3VuaWZvcm0gdmVjNCB1RnJhbWU7JyxcbiAgICAgICAgJ3VuaWZvcm0gdmVjMiB1UGl4ZWxTaXplOycsXG5cbiAgICAgICAgJ3ZvaWQgbWFpbih2b2lkKXsnLFxuXG4gICAgICAgICcgICB2ZWMyIGNvb3JkID0gbW9kKHZUZXh0dXJlQ29vcmQsIHVGcmFtZS56dyk7JyxcbiAgICAgICAgJyAgIGNvb3JkID0gY2xhbXAoY29vcmQsIHVQaXhlbFNpemUsIHVGcmFtZS56dyAtIHVQaXhlbFNpemUpOycsXG4gICAgICAgICcgICBjb29yZCArPSB1RnJhbWUueHk7JyxcblxuICAgICAgICAnICAgZ2xfRnJhZ0NvbG9yID0gIHRleHR1cmUyRCh1U2FtcGxlciwgY29vcmQpICogdkNvbG9yIDsnLFxuICAgICAgICAnfSdcbiAgICAgIF0uam9pbignXFxuJyksXG5cbiAgICAgICAgICAgIC8vIHNldCB0aGUgdW5pZm9ybXNcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB1RnJhbWU6IHsgdHlwZTogJzRmdicsIHZhbHVlOiBbMCwwLDEsMV0gfSxcbiAgICAgICAgICAgICAgICB1VHJhbnNmb3JtOiB7IHR5cGU6ICc0ZnYnLCB2YWx1ZTogWzAsMCwxLDFdIH0sXG4gICAgICAgICAgICAgICAgdVBpeGVsU2l6ZSA6IHsgdHlwZSA6ICcyZnYnLCB2YWx1ZTogWzEsIDFdfVxuICAgICAgICAgICAgfVxuICAgICAgKTtcbn1cblxuVGlsaW5nU3ByaXRlLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoY29yZS5TcHJpdGUucHJvdG90eXBlKTtcblRpbGluZ1Nwcml0ZS5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBUaWxpbmdTcHJpdGU7XG5tb2R1bGUuZXhwb3J0cyA9IFRpbGluZ1Nwcml0ZTtcblxuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhUaWxpbmdTcHJpdGUucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogVGhlIHdpZHRoIG9mIHRoZSBzcHJpdGUsIHNldHRpbmcgdGhpcyB3aWxsIGFjdHVhbGx5IG1vZGlmeSB0aGUgc2NhbGUgdG8gYWNoaWV2ZSB0aGUgdmFsdWUgc2V0XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZXh0cmFzLlRpbGluZ1Nwcml0ZSNcbiAgICAgKi9cbiAgICB3aWR0aDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl93aWR0aDtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuX3dpZHRoID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVGhlIGhlaWdodCBvZiB0aGUgVGlsaW5nU3ByaXRlLCBzZXR0aW5nIHRoaXMgd2lsbCBhY3R1YWxseSBtb2RpZnkgdGhlIHNjYWxlIHRvIGFjaGlldmUgdGhlIHZhbHVlIHNldFxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmV4dHJhcy5UaWxpbmdTcHJpdGUjXG4gICAgICovXG4gICAgaGVpZ2h0OiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2hlaWdodDtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuX2hlaWdodCA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfVxufSk7XG5cblRpbGluZ1Nwcml0ZS5wcm90b3R5cGUuX29uVGV4dHVyZVVwZGF0ZSA9IGZ1bmN0aW9uICgpXG57XG4gICAgcmV0dXJuO1xufTtcblxuXG4vKipcbiAqIFJlbmRlcnMgdGhlIG9iamVjdCB1c2luZyB0aGUgV2ViR0wgcmVuZGVyZXJcbiAqXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcn1cbiAqIEBwcml2YXRlXG4gKi9cblRpbGluZ1Nwcml0ZS5wcm90b3R5cGUuX3JlbmRlcldlYkdMID0gZnVuY3Rpb24gKHJlbmRlcmVyKVxue1xuICAgIC8vIHR3ZWFrIG91ciB0ZXh0dXJlIHRlbXBvcmFyaWx5Li5cbiAgICB2YXIgdGV4dHVyZSA9IHRoaXMuX3RleHR1cmU7XG5cbiAgICBpZighdGV4dHVyZSB8fCAhdGV4dHVyZS5fdXZzKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHZhciB0ZW1wVXZzID0gdGV4dHVyZS5fdXZzLFxuICAgICAgICB0ZW1wV2lkdGggPSB0ZXh0dXJlLl9mcmFtZS53aWR0aCxcbiAgICAgICAgdGVtcEhlaWdodCA9IHRleHR1cmUuX2ZyYW1lLmhlaWdodCxcbiAgICAgICAgdHcgPSB0ZXh0dXJlLmJhc2VUZXh0dXJlLndpZHRoLFxuICAgICAgICB0aCA9IHRleHR1cmUuYmFzZVRleHR1cmUuaGVpZ2h0O1xuXG4gICAgdGV4dHVyZS5fdXZzID0gdGhpcy5fdXZzO1xuICAgIHRleHR1cmUuX2ZyYW1lLndpZHRoID0gdGhpcy53aWR0aDtcbiAgICB0ZXh0dXJlLl9mcmFtZS5oZWlnaHQgPSB0aGlzLmhlaWdodDtcblxuICAgIHRoaXMuc2hhZGVyLnVuaWZvcm1zLnVQaXhlbFNpemUudmFsdWVbMF0gPSAxLjAvdHc7XG4gICAgdGhpcy5zaGFkZXIudW5pZm9ybXMudVBpeGVsU2l6ZS52YWx1ZVsxXSA9IDEuMC90aDtcblxuICAgIHRoaXMuc2hhZGVyLnVuaWZvcm1zLnVGcmFtZS52YWx1ZVswXSA9IHRlbXBVdnMueDA7XG4gICAgdGhpcy5zaGFkZXIudW5pZm9ybXMudUZyYW1lLnZhbHVlWzFdID0gdGVtcFV2cy55MDtcbiAgICB0aGlzLnNoYWRlci51bmlmb3Jtcy51RnJhbWUudmFsdWVbMl0gPSB0ZW1wVXZzLngxIC0gdGVtcFV2cy54MDtcbiAgICB0aGlzLnNoYWRlci51bmlmb3Jtcy51RnJhbWUudmFsdWVbM10gPSB0ZW1wVXZzLnkyIC0gdGVtcFV2cy55MDtcblxuICAgIHRoaXMuc2hhZGVyLnVuaWZvcm1zLnVUcmFuc2Zvcm0udmFsdWVbMF0gPSAodGhpcy50aWxlUG9zaXRpb24ueCAlICh0ZW1wV2lkdGggKiB0aGlzLnRpbGVTY2FsZS54KSkgLyB0aGlzLl93aWR0aDtcbiAgICB0aGlzLnNoYWRlci51bmlmb3Jtcy51VHJhbnNmb3JtLnZhbHVlWzFdID0gKHRoaXMudGlsZVBvc2l0aW9uLnkgJSAodGVtcEhlaWdodCAqIHRoaXMudGlsZVNjYWxlLnkpKSAvIHRoaXMuX2hlaWdodDtcbiAgICB0aGlzLnNoYWRlci51bmlmb3Jtcy51VHJhbnNmb3JtLnZhbHVlWzJdID0gKCB0dyAvIHRoaXMuX3dpZHRoICkgKiB0aGlzLnRpbGVTY2FsZS54O1xuICAgIHRoaXMuc2hhZGVyLnVuaWZvcm1zLnVUcmFuc2Zvcm0udmFsdWVbM10gPSAoIHRoIC8gdGhpcy5faGVpZ2h0ICkgKiB0aGlzLnRpbGVTY2FsZS55O1xuXG4gICAgcmVuZGVyZXIuc2V0T2JqZWN0UmVuZGVyZXIocmVuZGVyZXIucGx1Z2lucy5zcHJpdGUpO1xuICAgIHJlbmRlcmVyLnBsdWdpbnMuc3ByaXRlLnJlbmRlcih0aGlzKTtcblxuICAgIHRleHR1cmUuX3V2cyA9IHRlbXBVdnM7XG4gICAgdGV4dHVyZS5fZnJhbWUud2lkdGggPSB0ZW1wV2lkdGg7XG4gICAgdGV4dHVyZS5fZnJhbWUuaGVpZ2h0ID0gdGVtcEhlaWdodDtcbn07XG5cbi8qKlxuICogUmVuZGVycyB0aGUgb2JqZWN0IHVzaW5nIHRoZSBDYW52YXMgcmVuZGVyZXJcbiAqXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuQ2FudmFzUmVuZGVyZXJ9IGEgcmVmZXJlbmNlIHRvIHRoZSBjYW52YXMgcmVuZGVyZXJcbiAqIEBwcml2YXRlXG4gKi9cblRpbGluZ1Nwcml0ZS5wcm90b3R5cGUuX3JlbmRlckNhbnZhcyA9IGZ1bmN0aW9uIChyZW5kZXJlcilcbntcbiAgICB2YXIgdGV4dHVyZSA9IHRoaXMuX3RleHR1cmU7XG5cbiAgICBpZiAoIXRleHR1cmUuYmFzZVRleHR1cmUuaGFzTG9hZGVkKVxuICAgIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB2YXIgY29udGV4dCA9IHJlbmRlcmVyLmNvbnRleHQsXG4gICAgICAgIHRyYW5zZm9ybSA9IHRoaXMud29ybGRUcmFuc2Zvcm0sXG4gICAgICAgIHJlc29sdXRpb24gPSByZW5kZXJlci5yZXNvbHV0aW9uLFxuICAgICAgICBiYXNlVGV4dHVyZSA9IHRleHR1cmUuYmFzZVRleHR1cmUsXG4gICAgICAgIG1vZFggPSAodGhpcy50aWxlUG9zaXRpb24ueCAvIHRoaXMudGlsZVNjYWxlLngpICUgdGV4dHVyZS5fZnJhbWUud2lkdGgsXG4gICAgICAgIG1vZFkgPSAodGhpcy50aWxlUG9zaXRpb24ueSAvIHRoaXMudGlsZVNjYWxlLnkpICUgdGV4dHVyZS5fZnJhbWUuaGVpZ2h0O1xuXG4gICAgLy8gY3JlYXRlIGEgbmljZSBzaGlueSBwYXR0ZXJuIVxuICAgIC8vIFRPRE8gdGhpcyBuZWVkcyB0byBiZSByZWZyZXNoZWQgaWYgdGV4dHVyZSBjaGFuZ2VzLi5cbiAgICBpZighdGhpcy5fY2FudmFzUGF0dGVybilcbiAgICB7XG4gICAgICAgIC8vIGN1dCBhbiBvYmplY3QgZnJvbSBhIHNwcml0ZXNoZWV0Li5cbiAgICAgICAgdmFyIHRlbXBDYW52YXMgPSBuZXcgY29yZS5DYW52YXNCdWZmZXIodGV4dHVyZS5fZnJhbWUud2lkdGgsIHRleHR1cmUuX2ZyYW1lLmhlaWdodCk7XG5cbiAgICAgICAgLy8gVGludCB0aGUgdGlsaW5nIHNwcml0ZVxuICAgICAgICBpZiAodGhpcy50aW50ICE9PSAweEZGRkZGRilcbiAgICAgICAge1xuICAgICAgICAgICAgaWYgKHRoaXMuY2FjaGVkVGludCAhPT0gdGhpcy50aW50KVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHRoaXMuY2FjaGVkVGludCA9IHRoaXMudGludDtcblxuICAgICAgICAgICAgICAgIHRoaXMudGludGVkVGV4dHVyZSA9IENhbnZhc1RpbnRlci5nZXRUaW50ZWRUZXh0dXJlKHRoaXMsIHRoaXMudGludCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0ZW1wQ2FudmFzLmNvbnRleHQuZHJhd0ltYWdlKHRoaXMudGludGVkVGV4dHVyZSwgMCwgMCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgICB0ZW1wQ2FudmFzLmNvbnRleHQuZHJhd0ltYWdlKGJhc2VUZXh0dXJlLnNvdXJjZSwgLXRleHR1cmUuX2ZyYW1lLngsIC10ZXh0dXJlLl9mcmFtZS55KTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9jYW52YXNQYXR0ZXJuID0gdGVtcENhbnZhcy5jb250ZXh0LmNyZWF0ZVBhdHRlcm4oIHRlbXBDYW52YXMuY2FudmFzLCAncmVwZWF0JyApO1xuICAgIH1cblxuICAgIC8vIHNldCBjb250ZXh0IHN0YXRlLi5cbiAgICBjb250ZXh0Lmdsb2JhbEFscGhhID0gdGhpcy53b3JsZEFscGhhO1xuICAgIGNvbnRleHQuc2V0VHJhbnNmb3JtKHRyYW5zZm9ybS5hICogcmVzb2x1dGlvbixcbiAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtLmIgKiByZXNvbHV0aW9uLFxuICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2Zvcm0uYyAqIHJlc29sdXRpb24sXG4gICAgICAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybS5kICogcmVzb2x1dGlvbixcbiAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtLnR4ICogcmVzb2x1dGlvbixcbiAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtLnR5ICogcmVzb2x1dGlvbik7XG5cbiAgICAvLyBUT0RPIC0gdGhpcyBzaG91bGQgYmUgcm9sbGVkIGludG8gdGhlIHNldFRyYW5zZm9ybSBhYm92ZS4uXG4gICAgY29udGV4dC5zY2FsZSh0aGlzLnRpbGVTY2FsZS54LHRoaXMudGlsZVNjYWxlLnkpO1xuXG4gICAgY29udGV4dC50cmFuc2xhdGUobW9kWCArICh0aGlzLmFuY2hvci54ICogLXRoaXMuX3dpZHRoICksXG4gICAgICAgICAgICAgICAgICAgICAgbW9kWSArICh0aGlzLmFuY2hvci55ICogLXRoaXMuX2hlaWdodCkpO1xuXG4gICAgLy8gY2hlY2sgYmxlbmQgbW9kZVxuICAgIHZhciBjb21wb3NpdGVPcGVyYXRpb24gPSByZW5kZXJlci5ibGVuZE1vZGVzW3RoaXMuYmxlbmRNb2RlXTtcbiAgICBpZiAoY29tcG9zaXRlT3BlcmF0aW9uICE9PSByZW5kZXJlci5jb250ZXh0Lmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbilcbiAgICB7XG4gICAgICAgIGNvbnRleHQuZ2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uID0gY29tcG9zaXRlT3BlcmF0aW9uO1xuICAgIH1cblxuICAgIC8vIGZpbGwgdGhlIHBhdHRlcm4hXG4gICAgY29udGV4dC5maWxsU3R5bGUgPSB0aGlzLl9jYW52YXNQYXR0ZXJuO1xuICAgIGNvbnRleHQuZmlsbFJlY3QoLW1vZFgsXG4gICAgICAgICAgICAgICAgICAgICAtbW9kWSxcbiAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3dpZHRoIC8gdGhpcy50aWxlU2NhbGUueCxcbiAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2hlaWdodCAvIHRoaXMudGlsZVNjYWxlLnkpO1xuXG5cbiAgICAvL1RPRE8gLSBwcmV0dHkgc3VyZSB0aGlzIGNhbiBiZSBkZWxldGVkLi4uXG4gICAgLy9jb250ZXh0LnRyYW5zbGF0ZSgtdGhpcy50aWxlUG9zaXRpb24ueCArICh0aGlzLmFuY2hvci54ICogdGhpcy5fd2lkdGgpLCAtdGhpcy50aWxlUG9zaXRpb24ueSArICh0aGlzLmFuY2hvci55ICogdGhpcy5faGVpZ2h0KSk7XG4gICAgLy9jb250ZXh0LnNjYWxlKDEgLyB0aGlzLnRpbGVTY2FsZS54LCAxIC8gdGhpcy50aWxlU2NhbGUueSk7XG59O1xuXG5cbi8qKlxuICogUmV0dXJucyB0aGUgZnJhbWluZyByZWN0YW5nbGUgb2YgdGhlIHNwcml0ZSBhcyBhIFJlY3RhbmdsZSBvYmplY3RcbipcbiAqIEByZXR1cm4ge1BJWEkuUmVjdGFuZ2xlfSB0aGUgZnJhbWluZyByZWN0YW5nbGVcbiAqL1xuVGlsaW5nU3ByaXRlLnByb3RvdHlwZS5nZXRCb3VuZHMgPSBmdW5jdGlvbiAoKVxue1xuICAgIHZhciB3aWR0aCA9IHRoaXMuX3dpZHRoO1xuICAgIHZhciBoZWlnaHQgPSB0aGlzLl9oZWlnaHQ7XG5cbiAgICB2YXIgdzAgPSB3aWR0aCAqICgxLXRoaXMuYW5jaG9yLngpO1xuICAgIHZhciB3MSA9IHdpZHRoICogLXRoaXMuYW5jaG9yLng7XG5cbiAgICB2YXIgaDAgPSBoZWlnaHQgKiAoMS10aGlzLmFuY2hvci55KTtcbiAgICB2YXIgaDEgPSBoZWlnaHQgKiAtdGhpcy5hbmNob3IueTtcblxuICAgIHZhciB3b3JsZFRyYW5zZm9ybSA9IHRoaXMud29ybGRUcmFuc2Zvcm07XG5cbiAgICB2YXIgYSA9IHdvcmxkVHJhbnNmb3JtLmE7XG4gICAgdmFyIGIgPSB3b3JsZFRyYW5zZm9ybS5iO1xuICAgIHZhciBjID0gd29ybGRUcmFuc2Zvcm0uYztcbiAgICB2YXIgZCA9IHdvcmxkVHJhbnNmb3JtLmQ7XG4gICAgdmFyIHR4ID0gd29ybGRUcmFuc2Zvcm0udHg7XG4gICAgdmFyIHR5ID0gd29ybGRUcmFuc2Zvcm0udHk7XG5cbiAgICB2YXIgeDEgPSBhICogdzEgKyBjICogaDEgKyB0eDtcbiAgICB2YXIgeTEgPSBkICogaDEgKyBiICogdzEgKyB0eTtcblxuICAgIHZhciB4MiA9IGEgKiB3MCArIGMgKiBoMSArIHR4O1xuICAgIHZhciB5MiA9IGQgKiBoMSArIGIgKiB3MCArIHR5O1xuXG4gICAgdmFyIHgzID0gYSAqIHcwICsgYyAqIGgwICsgdHg7XG4gICAgdmFyIHkzID0gZCAqIGgwICsgYiAqIHcwICsgdHk7XG5cbiAgICB2YXIgeDQgPSAgYSAqIHcxICsgYyAqIGgwICsgdHg7XG4gICAgdmFyIHk0ID0gIGQgKiBoMCArIGIgKiB3MSArIHR5O1xuXG4gICAgdmFyIG1pblgsXG4gICAgICAgIG1heFgsXG4gICAgICAgIG1pblksXG4gICAgICAgIG1heFk7XG5cbiAgICBtaW5YID0geDE7XG4gICAgbWluWCA9IHgyIDwgbWluWCA/IHgyIDogbWluWDtcbiAgICBtaW5YID0geDMgPCBtaW5YID8geDMgOiBtaW5YO1xuICAgIG1pblggPSB4NCA8IG1pblggPyB4NCA6IG1pblg7XG5cbiAgICBtaW5ZID0geTE7XG4gICAgbWluWSA9IHkyIDwgbWluWSA/IHkyIDogbWluWTtcbiAgICBtaW5ZID0geTMgPCBtaW5ZID8geTMgOiBtaW5ZO1xuICAgIG1pblkgPSB5NCA8IG1pblkgPyB5NCA6IG1pblk7XG5cbiAgICBtYXhYID0geDE7XG4gICAgbWF4WCA9IHgyID4gbWF4WCA/IHgyIDogbWF4WDtcbiAgICBtYXhYID0geDMgPiBtYXhYID8geDMgOiBtYXhYO1xuICAgIG1heFggPSB4NCA+IG1heFggPyB4NCA6IG1heFg7XG5cbiAgICBtYXhZID0geTE7XG4gICAgbWF4WSA9IHkyID4gbWF4WSA/IHkyIDogbWF4WTtcbiAgICBtYXhZID0geTMgPiBtYXhZID8geTMgOiBtYXhZO1xuICAgIG1heFkgPSB5NCA+IG1heFkgPyB5NCA6IG1heFk7XG5cbiAgICB2YXIgYm91bmRzID0gdGhpcy5fYm91bmRzO1xuXG4gICAgYm91bmRzLnggPSBtaW5YO1xuICAgIGJvdW5kcy53aWR0aCA9IG1heFggLSBtaW5YO1xuXG4gICAgYm91bmRzLnkgPSBtaW5ZO1xuICAgIGJvdW5kcy5oZWlnaHQgPSBtYXhZIC0gbWluWTtcblxuICAgIC8vIHN0b3JlIGEgcmVmZXJlbmNlIHNvIHRoYXQgaWYgdGhpcyBmdW5jdGlvbiBnZXRzIGNhbGxlZCBhZ2FpbiBpbiB0aGUgcmVuZGVyIGN5Y2xlIHdlIGRvIG5vdCBoYXZlIHRvIHJlY2FsY3VsYXRlXG4gICAgdGhpcy5fY3VycmVudEJvdW5kcyA9IGJvdW5kcztcblxuICAgIHJldHVybiBib3VuZHM7XG59O1xuXG4vKipcbiAqIENoZWNrcyBpZiBhIHBvaW50IGlzIGluc2lkZSB0aGlzIHRpbGluZyBzcHJpdGVcbiAqIEBwYXJhbSBwb2ludCB7UElYSS5Qb2ludH0gdGhlIHBvaW50IHRvIGNoZWNrXG4gKi9cblRpbGluZ1Nwcml0ZS5wcm90b3R5cGUuY29udGFpbnNQb2ludCA9IGZ1bmN0aW9uKCBwb2ludCApXG57XG4gICAgdGhpcy53b3JsZFRyYW5zZm9ybS5hcHBseUludmVyc2UocG9pbnQsICB0ZW1wUG9pbnQpO1xuXG4gICAgdmFyIHdpZHRoID0gdGhpcy5fd2lkdGg7XG4gICAgdmFyIGhlaWdodCA9IHRoaXMuX2hlaWdodDtcbiAgICB2YXIgeDEgPSAtd2lkdGggKiB0aGlzLmFuY2hvci54O1xuICAgIHZhciB5MTtcblxuICAgIGlmICggdGVtcFBvaW50LnggPiB4MSAmJiB0ZW1wUG9pbnQueCA8IHgxICsgd2lkdGggKVxuICAgIHtcbiAgICAgICAgeTEgPSAtaGVpZ2h0ICogdGhpcy5hbmNob3IueTtcblxuICAgICAgICBpZiAoIHRlbXBQb2ludC55ID4geTEgJiYgdGVtcFBvaW50LnkgPCB5MSArIGhlaWdodCApXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xufTtcblxuLyoqXG4gKiBEZXN0cm95cyB0aGlzIHRpbGluZyBzcHJpdGVcbiAqXG4gKi9cblRpbGluZ1Nwcml0ZS5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uICgpIHtcbiAgICBjb3JlLlNwcml0ZS5wcm90b3R5cGUuZGVzdHJveS5jYWxsKHRoaXMpO1xuXG4gICAgdGhpcy50aWxlU2NhbGUgPSBudWxsO1xuICAgIHRoaXMuX3RpbGVTY2FsZU9mZnNldCA9IG51bGw7XG4gICAgdGhpcy50aWxlUG9zaXRpb24gPSBudWxsO1xuXG4gICAgdGhpcy5fdXZzID0gbnVsbDtcbn07XG5cbi8qKlxuICogSGVscGVyIGZ1bmN0aW9uIHRoYXQgY3JlYXRlcyBhIHRpbGluZyBzcHJpdGUgdGhhdCB3aWxsIHVzZSBhIHRleHR1cmUgZnJvbSB0aGUgVGV4dHVyZUNhY2hlIGJhc2VkIG9uIHRoZSBmcmFtZUlkXG4gKiBUaGUgZnJhbWUgaWRzIGFyZSBjcmVhdGVkIHdoZW4gYSBUZXh0dXJlIHBhY2tlciBmaWxlIGhhcyBiZWVuIGxvYWRlZFxuICpcbiAqIEBzdGF0aWNcbiAqIEBwYXJhbSBmcmFtZUlkIHtzdHJpbmd9IFRoZSBmcmFtZSBJZCBvZiB0aGUgdGV4dHVyZSBpbiB0aGUgY2FjaGVcbiAqIEByZXR1cm4ge1BJWEkuZXh0cmFzLlRpbGluZ1Nwcml0ZX0gQSBuZXcgVGlsaW5nU3ByaXRlIHVzaW5nIGEgdGV4dHVyZSBmcm9tIHRoZSB0ZXh0dXJlIGNhY2hlIG1hdGNoaW5nIHRoZSBmcmFtZUlkXG4gKiBAcGFyYW0gd2lkdGgge251bWJlcn0gIHRoZSB3aWR0aCBvZiB0aGUgdGlsaW5nIHNwcml0ZVxuICogQHBhcmFtIGhlaWdodCB7bnVtYmVyfSB0aGUgaGVpZ2h0IG9mIHRoZSB0aWxpbmcgc3ByaXRlXG4gKi9cblRpbGluZ1Nwcml0ZS5mcm9tRnJhbWUgPSBmdW5jdGlvbiAoZnJhbWVJZCx3aWR0aCxoZWlnaHQpXG57XG4gICAgdmFyIHRleHR1cmUgPSBjb3JlLnV0aWxzLlRleHR1cmVDYWNoZVtmcmFtZUlkXTtcblxuICAgIGlmICghdGV4dHVyZSlcbiAgICB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignVGhlIGZyYW1lSWQgXCInICsgZnJhbWVJZCArICdcIiBkb2VzIG5vdCBleGlzdCBpbiB0aGUgdGV4dHVyZSBjYWNoZSAnICsgdGhpcyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBUaWxpbmdTcHJpdGUodGV4dHVyZSx3aWR0aCxoZWlnaHQpO1xufTtcblxuLyoqXG4gKiBIZWxwZXIgZnVuY3Rpb24gdGhhdCBjcmVhdGVzIGEgc3ByaXRlIHRoYXQgd2lsbCBjb250YWluIGEgdGV4dHVyZSBiYXNlZCBvbiBhbiBpbWFnZSB1cmxcbiAqIElmIHRoZSBpbWFnZSBpcyBub3QgaW4gdGhlIHRleHR1cmUgY2FjaGUgaXQgd2lsbCBiZSBsb2FkZWRcbiAqXG4gKiBAc3RhdGljXG4gKiBAcGFyYW0gaW1hZ2VJZCB7c3RyaW5nfSBUaGUgaW1hZ2UgdXJsIG9mIHRoZSB0ZXh0dXJlXG4gKiBAcGFyYW0gd2lkdGgge251bWJlcn0gIHRoZSB3aWR0aCBvZiB0aGUgdGlsaW5nIHNwcml0ZVxuICogQHBhcmFtIGhlaWdodCB7bnVtYmVyfSB0aGUgaGVpZ2h0IG9mIHRoZSB0aWxpbmcgc3ByaXRlXG4gKiBAcGFyYW0gW2Nyb3Nzb3JpZ2luPShhdXRvKV0ge2Jvb2xlYW59IGlmIHlvdSB3YW50IHRvIHNwZWNpZnkgdGhlIGNyb3NzLW9yaWdpbiBwYXJhbWV0ZXJcbiAqIEBwYXJhbSBbc2NhbGVNb2RlPVBJWEkuU0NBTEVfTU9ERVMuREVGQVVMVF0ge251bWJlcn0gaWYgeW91IHdhbnQgdG8gc3BlY2lmeSB0aGUgc2NhbGUgbW9kZSwgc2VlIHtAbGluayBQSVhJLlNDQUxFX01PREVTfSBmb3IgcG9zc2libGUgdmFsdWVzXG4gKiBAcmV0dXJuIHtQSVhJLmV4dHJhcy5UaWxpbmdTcHJpdGV9IEEgbmV3IFRpbGluZ1Nwcml0ZSB1c2luZyBhIHRleHR1cmUgZnJvbSB0aGUgdGV4dHVyZSBjYWNoZSBtYXRjaGluZyB0aGUgaW1hZ2UgaWRcbiAqL1xuVGlsaW5nU3ByaXRlLmZyb21JbWFnZSA9IGZ1bmN0aW9uIChpbWFnZUlkLCB3aWR0aCwgaGVpZ2h0LCBjcm9zc29yaWdpbiwgc2NhbGVNb2RlKVxue1xuICAgIHJldHVybiBuZXcgVGlsaW5nU3ByaXRlKGNvcmUuVGV4dHVyZS5mcm9tSW1hZ2UoaW1hZ2VJZCwgY3Jvc3NvcmlnaW4sIHNjYWxlTW9kZSksd2lkdGgsaGVpZ2h0KTtcbn07XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uL2NvcmUnKSxcbiAgICBEaXNwbGF5T2JqZWN0ID0gY29yZS5EaXNwbGF5T2JqZWN0LFxuICAgIF90ZW1wTWF0cml4ID0gbmV3IGNvcmUuTWF0cml4KCk7XG5cbkRpc3BsYXlPYmplY3QucHJvdG90eXBlLl9jYWNoZUFzQml0bWFwID0gZmFsc2U7XG5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS5fb3JpZ2luYWxSZW5kZXJXZWJHTCA9IG51bGw7XG5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS5fb3JpZ2luYWxSZW5kZXJDYW52YXMgPSBudWxsO1xuXG5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS5fb3JpZ2luYWxVcGRhdGVUcmFuc2Zvcm0gPSBudWxsO1xuRGlzcGxheU9iamVjdC5wcm90b3R5cGUuX29yaWdpbmFsSGl0VGVzdCA9IG51bGw7XG5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS5fb3JpZ2luYWxEZXN0cm95ID0gbnVsbDtcbkRpc3BsYXlPYmplY3QucHJvdG90eXBlLl9jYWNoZWRTcHJpdGUgPSBudWxsO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhEaXNwbGF5T2JqZWN0LnByb3RvdHlwZSwge1xuXG4gICAgLyoqXG4gICAgICogU2V0IHRoaXMgdG8gdHJ1ZSBpZiB5b3Ugd2FudCB0aGlzIGRpc3BsYXkgb2JqZWN0IHRvIGJlIGNhY2hlZCBhcyBhIGJpdG1hcC5cbiAgICAgKiBUaGlzIGJhc2ljYWxseSB0YWtlcyBhIHNuYXAgc2hvdCBvZiB0aGUgZGlzcGxheSBvYmplY3QgYXMgaXQgaXMgYXQgdGhhdCBtb21lbnQuIEl0IGNhbiBwcm92aWRlIGEgcGVyZm9ybWFuY2UgYmVuZWZpdCBmb3IgY29tcGxleCBzdGF0aWMgZGlzcGxheU9iamVjdHMuXG4gICAgICogVG8gcmVtb3ZlIHNpbXBseSBzZXQgdGhpcyBwcm9wZXJ0eSB0byAnZmFsc2UnXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLkRpc3BsYXlPYmplY3QjXG4gICAgICovXG4gICAgY2FjaGVBc0JpdG1hcDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9jYWNoZUFzQml0bWFwO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgaWYgKHRoaXMuX2NhY2hlQXNCaXRtYXAgPT09IHZhbHVlKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5fY2FjaGVBc0JpdG1hcCA9IHZhbHVlO1xuXG4gICAgICAgICAgICBpZiAodmFsdWUpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdGhpcy5fb3JpZ2luYWxSZW5kZXJXZWJHTCA9IHRoaXMucmVuZGVyV2ViR0w7XG4gICAgICAgICAgICAgICAgdGhpcy5fb3JpZ2luYWxSZW5kZXJDYW52YXMgPSB0aGlzLnJlbmRlckNhbnZhcztcblxuICAgICAgICAgICAgICAgIHRoaXMuX29yaWdpbmFsVXBkYXRlVHJhbnNmb3JtID0gdGhpcy51cGRhdGVUcmFuc2Zvcm07XG4gICAgICAgICAgICAgICAgdGhpcy5fb3JpZ2luYWxHZXRCb3VuZHMgPSB0aGlzLmdldEJvdW5kcztcblxuICAgICAgICAgICAgICAgIHRoaXMuX29yaWdpbmFsRGVzdHJveSA9IHRoaXMuZGVzdHJveTtcblxuICAgICAgICAgICAgICAgIHRoaXMuX29yaWdpbmFsQ29udGFpbnNQb2ludCA9IHRoaXMuY29udGFpbnNQb2ludDtcblxuICAgICAgICAgICAgICAgIHRoaXMucmVuZGVyV2ViR0wgPSB0aGlzLl9yZW5kZXJDYWNoZWRXZWJHTDtcbiAgICAgICAgICAgICAgICB0aGlzLnJlbmRlckNhbnZhcyA9IHRoaXMuX3JlbmRlckNhY2hlZENhbnZhcztcblxuICAgICAgICAgICAgICAgIHRoaXMuZGVzdHJveSA9IHRoaXMuX2NhY2hlQXNCaXRtYXBEZXN0cm95O1xuXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuX2NhY2hlZFNwcml0ZSlcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2Rlc3Ryb3lDYWNoZWREaXNwbGF5T2JqZWN0KCk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgdGhpcy5yZW5kZXJXZWJHTCA9IHRoaXMuX29yaWdpbmFsUmVuZGVyV2ViR0w7XG4gICAgICAgICAgICAgICAgdGhpcy5yZW5kZXJDYW52YXMgPSB0aGlzLl9vcmlnaW5hbFJlbmRlckNhbnZhcztcbiAgICAgICAgICAgICAgICB0aGlzLmdldEJvdW5kcyA9IHRoaXMuX29yaWdpbmFsR2V0Qm91bmRzO1xuXG4gICAgICAgICAgICAgICAgdGhpcy5kZXN0cm95ID0gdGhpcy5fb3JpZ2luYWxEZXN0cm95O1xuXG4gICAgICAgICAgICAgICAgdGhpcy51cGRhdGVUcmFuc2Zvcm0gPSB0aGlzLl9vcmlnaW5hbFVwZGF0ZVRyYW5zZm9ybTtcbiAgICAgICAgICAgICAgICB0aGlzLmNvbnRhaW5zUG9pbnQgPSB0aGlzLl9vcmlnaW5hbENvbnRhaW5zUG9pbnQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG59KTtcbi8qKlxuKiBSZW5kZXJzIGEgY2FjaGVkIHZlcnNpb24gb2YgdGhlIHNwcml0ZSB3aXRoIFdlYkdMXG4qXG4qIEBwYXJhbSByZW5kZXJlciB7UElYSS5XZWJHTFJlbmRlcmVyfSB0aGUgV2ViR0wgcmVuZGVyZXJcbiogQHByaXZhdGVcbiovXG5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS5fcmVuZGVyQ2FjaGVkV2ViR0wgPSBmdW5jdGlvbiAocmVuZGVyZXIpXG57XG4gICAgaWYgKCF0aGlzLnZpc2libGUgfHwgdGhpcy53b3JsZEFscGhhIDw9IDAgfHwgIXRoaXMucmVuZGVyYWJsZSlcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLl9pbml0Q2FjaGVkRGlzcGxheU9iamVjdCggcmVuZGVyZXIgKTtcblxuICAgIHRoaXMuX2NhY2hlZFNwcml0ZS53b3JsZEFscGhhID0gdGhpcy53b3JsZEFscGhhO1xuXG4gICAgcmVuZGVyZXIuc2V0T2JqZWN0UmVuZGVyZXIocmVuZGVyZXIucGx1Z2lucy5zcHJpdGUpO1xuICAgIHJlbmRlcmVyLnBsdWdpbnMuc3ByaXRlLnJlbmRlciggdGhpcy5fY2FjaGVkU3ByaXRlICk7XG59O1xuXG4vKipcbiogUHJlcGFyZXMgdGhlIFdlYkdMIHJlbmRlcmVyIHRvIGNhY2hlIHRoZSBzcHJpdGVcbipcbiogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLldlYkdMUmVuZGVyZXJ9IHRoZSBXZWJHTCByZW5kZXJlclxuKiBAcHJpdmF0ZVxuKi9cbkRpc3BsYXlPYmplY3QucHJvdG90eXBlLl9pbml0Q2FjaGVkRGlzcGxheU9iamVjdCA9IGZ1bmN0aW9uIChyZW5kZXJlcilcbntcbiAgICBpZih0aGlzLl9jYWNoZWRTcHJpdGUpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gZmlyc3Qgd2UgZmx1c2ggYW55dGhpbmcgbGVmdCBpbiB0aGUgcmVuZGVyZXIgKG90aGVyd2lzZSBpdCB3b3VsZCBnZXQgcmVuZGVyZWQgdG8gdGhlIGNhY2hlZCB0ZXh0dXJlKVxuICAgIHJlbmRlcmVyLmN1cnJlbnRSZW5kZXJlci5mbHVzaCgpO1xuICAgIC8vdGhpcy5maWx0ZXJzPSBbXTtcbiAgICAvLyBuZXh0IHdlIGZpbmQgdGhlIGRpbWVuc2lvbnMgb2YgdGhlIHVudHJhbnNmb3JtZWQgb2JqZWN0XG4gICAgLy8gdGhpcyBmdW5jdGlvbiBhbHNvIGNhbGxzIHVwZGF0ZXRyYW5zZm9ybSBvbiBhbGwgaXRzIGNoaWxkcmVuIGFzIHBhcnQgb2YgdGhlIG1lYXN1cmluZy4gVGhpcyBtZWFucyB3ZSBkb24ndCBuZWVkIHRvIHVwZGF0ZSB0aGUgdHJhbnNmb3JtIGFnYWluIGluIHRoaXMgZnVuY3Rpb25cbiAgICAvLyBUT0RPIHBhc3MgYW4gb2JqZWN0IHRvIGNsb25lIHRvbz8gc2F2ZXMgaGF2aW5nIHRvIGNyZWF0ZSBhIG5ldyBvbmUgZWFjaCB0aW1lIVxuICAgIHZhciBib3VuZHMgPSB0aGlzLmdldExvY2FsQm91bmRzKCkuY2xvbmUoKTtcblxuICAgIC8vIGFkZCBzb21lIHBhZGRpbmchXG4gICAgaWYodGhpcy5fZmlsdGVycylcbiAgICB7XG4gICAgICAgIHZhciBwYWRkaW5nID0gdGhpcy5fZmlsdGVyc1swXS5wYWRkaW5nO1xuICAgICAgICBib3VuZHMueCAtPSBwYWRkaW5nO1xuICAgICAgICBib3VuZHMueSAtPSBwYWRkaW5nO1xuXG4gICAgICAgIGJvdW5kcy53aWR0aCArPSBwYWRkaW5nICogMjtcbiAgICAgICAgYm91bmRzLmhlaWdodCArPSBwYWRkaW5nICogMjtcbiAgICB9XG5cbiAgICAvLyBmb3Igbm93IHdlIGNhY2hlIHRoZSBjdXJyZW50IHJlbmRlclRhcmdldCB0aGF0IHRoZSB3ZWJHTCByZW5kZXJlciBpcyBjdXJyZW50bHkgdXNpbmcuXG4gICAgLy8gdGhpcyBjb3VsZCBiZSBtb3JlIGVsZWdlbnQuLlxuICAgIHZhciBjYWNoZWRSZW5kZXJUYXJnZXQgPSByZW5kZXJlci5jdXJyZW50UmVuZGVyVGFyZ2V0O1xuICAgIC8vIFdlIGFsc28gc3RvcmUgdGhlIGZpbHRlciBzdGFjayAtIEkgd2lsbCBkZWZpbml0ZWx5IGxvb2sgdG8gY2hhbmdlIGhvdyB0aGlzIHdvcmtzIGEgbGl0dGxlIGxhdGVyIGRvd24gdGhlIGxpbmUuXG4gICAgdmFyIHN0YWNrID0gcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5maWx0ZXJTdGFjaztcblxuICAgIC8vIHRoaXMgcmVuZGVyVGV4dHVyZSB3aWxsIGJlIHVzZWQgdG8gc3RvcmUgdGhlIGNhY2hlZCBEaXNwbGF5T2JqZWN0XG4gICAgdmFyIHJlbmRlclRleHR1cmUgPSBuZXcgY29yZS5SZW5kZXJUZXh0dXJlKHJlbmRlcmVyLCBib3VuZHMud2lkdGggfCAwLCBib3VuZHMuaGVpZ2h0IHwgMCk7XG5cbiAgICAvLyBuZWVkIHRvIHNldCAvL1xuICAgIHZhciBtID0gX3RlbXBNYXRyaXg7XG5cbiAgICBtLnR4ID0gLWJvdW5kcy54O1xuICAgIG0udHkgPSAtYm91bmRzLnk7XG5cblxuXG4gICAgLy8gc2V0IGFsbCBwcm9wZXJ0aWVzIHRvIHRoZXJlIG9yaWdpbmFsIHNvIHdlIGNhbiByZW5kZXIgdG8gYSB0ZXh0dXJlXG4gICAgdGhpcy5yZW5kZXJXZWJHTCA9IHRoaXMuX29yaWdpbmFsUmVuZGVyV2ViR0w7XG5cbiAgICByZW5kZXJUZXh0dXJlLnJlbmRlcih0aGlzLCBtLCB0cnVlLCB0cnVlKTtcblxuICAgIC8vIG5vdyByZXN0b3JlIHRoZSBzdGF0ZSBiZSBzZXR0aW5nIHRoZSBuZXcgcHJvcGVydGllc1xuICAgIHJlbmRlcmVyLnNldFJlbmRlclRhcmdldChjYWNoZWRSZW5kZXJUYXJnZXQpO1xuICAgIHJlbmRlcmVyLmZpbHRlck1hbmFnZXIuZmlsdGVyU3RhY2sgPSBzdGFjaztcblxuICAgIHRoaXMucmVuZGVyV2ViR0wgICAgID0gdGhpcy5fcmVuZGVyQ2FjaGVkV2ViR0w7XG4gICAgdGhpcy51cGRhdGVUcmFuc2Zvcm0gPSB0aGlzLmRpc3BsYXlPYmplY3RVcGRhdGVUcmFuc2Zvcm07XG4gICAgdGhpcy5nZXRCb3VuZHMgICAgICAgPSB0aGlzLl9nZXRDYWNoZWRCb3VuZHM7XG5cblxuICAgIC8vIGNyZWF0ZSBvdXIgY2FjaGVkIHNwcml0ZVxuICAgIHRoaXMuX2NhY2hlZFNwcml0ZSA9IG5ldyBjb3JlLlNwcml0ZShyZW5kZXJUZXh0dXJlKTtcbiAgICB0aGlzLl9jYWNoZWRTcHJpdGUud29ybGRUcmFuc2Zvcm0gPSB0aGlzLndvcmxkVHJhbnNmb3JtO1xuICAgIHRoaXMuX2NhY2hlZFNwcml0ZS5hbmNob3IueCA9IC0oIGJvdW5kcy54IC8gYm91bmRzLndpZHRoICk7XG4gICAgdGhpcy5fY2FjaGVkU3ByaXRlLmFuY2hvci55ID0gLSggYm91bmRzLnkgLyBib3VuZHMuaGVpZ2h0ICk7XG5cbiAgICAvLyByZXN0b3JlIHRoZSB0cmFuc2Zvcm0gb2YgdGhlIGNhY2hlZCBzcHJpdGUgdG8gYXZvaWQgdGhlIG5hc3R5IGZsaWNrZXIuLlxuICAgIHRoaXMudXBkYXRlVHJhbnNmb3JtKCk7XG5cbiAgICAvLyBtYXAgdGhlIGhpdCB0ZXN0Li5cbiAgICB0aGlzLmNvbnRhaW5zUG9pbnQgPSB0aGlzLl9jYWNoZWRTcHJpdGUuY29udGFpbnNQb2ludC5iaW5kKHRoaXMuX2NhY2hlZFNwcml0ZSk7XG59O1xuXG4vKipcbiogUmVuZGVycyBhIGNhY2hlZCB2ZXJzaW9uIG9mIHRoZSBzcHJpdGUgd2l0aCBjYW52YXNcbipcbiogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLkNhbnZhc1JlbmRlcmVyfSB0aGUgQ2FudmFzIHJlbmRlcmVyXG4qIEBwcml2YXRlXG4qL1xuRGlzcGxheU9iamVjdC5wcm90b3R5cGUuX3JlbmRlckNhY2hlZENhbnZhcyA9IGZ1bmN0aW9uIChyZW5kZXJlcilcbntcbiAgICBpZiAoIXRoaXMudmlzaWJsZSB8fCB0aGlzLndvcmxkQWxwaGEgPD0gMCB8fCAhdGhpcy5yZW5kZXJhYmxlKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuX2luaXRDYWNoZWREaXNwbGF5T2JqZWN0Q2FudmFzKCByZW5kZXJlciApO1xuXG4gICAgdGhpcy5fY2FjaGVkU3ByaXRlLndvcmxkQWxwaGEgPSB0aGlzLndvcmxkQWxwaGE7XG5cbiAgICB0aGlzLl9jYWNoZWRTcHJpdGUucmVuZGVyQ2FudmFzKHJlbmRlcmVyKTtcbn07XG5cbi8vVE9ETyB0aGlzIGNhbiBiZSB0aGUgc2FtZSBhcyB0aGUgd2ViR0wgdmVyaXNvbi4uIHdpbGwgbmVlZCB0byBkbyBhIGxpdHRsZSB0d2Vha2luZyBmaXJzdCB0aG91Z2guLlxuLyoqXG4qIFByZXBhcmVzIHRoZSBDYW52YXMgcmVuZGVyZXIgdG8gY2FjaGUgdGhlIHNwcml0ZVxuKlxuKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuQ2FudmFzUmVuZGVyZXJ9IHRoZSBDYW52YXMgcmVuZGVyZXJcbiogQHByaXZhdGVcbiovXG5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS5faW5pdENhY2hlZERpc3BsYXlPYmplY3RDYW52YXMgPSBmdW5jdGlvbiAocmVuZGVyZXIpXG57XG4gICAgaWYodGhpcy5fY2FjaGVkU3ByaXRlKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vZ2V0IGJvdW5kcyBhY3R1YWxseSB0cmFuc2Zvcm1zIHRoZSBvYmplY3QgZm9yIHVzIGFscmVhZHkhXG4gICAgdmFyIGJvdW5kcyA9IHRoaXMuZ2V0TG9jYWxCb3VuZHMoKTtcblxuICAgIHZhciBjYWNoZWRSZW5kZXJUYXJnZXQgPSByZW5kZXJlci5jb250ZXh0O1xuXG4gICAgdmFyIHJlbmRlclRleHR1cmUgPSBuZXcgY29yZS5SZW5kZXJUZXh0dXJlKHJlbmRlcmVyLCBib3VuZHMud2lkdGggfCAwLCBib3VuZHMuaGVpZ2h0IHwgMCk7XG5cbiAgICAvLyBuZWVkIHRvIHNldCAvL1xuICAgIHZhciBtID0gX3RlbXBNYXRyaXg7XG5cbiAgICBtLnR4ID0gLWJvdW5kcy54O1xuICAgIG0udHkgPSAtYm91bmRzLnk7XG5cbiAgICAvLyBzZXQgYWxsIHByb3BlcnRpZXMgdG8gdGhlcmUgb3JpZ2luYWwgc28gd2UgY2FuIHJlbmRlciB0byBhIHRleHR1cmVcbiAgICB0aGlzLnJlbmRlckNhbnZhcyA9IHRoaXMuX29yaWdpbmFsUmVuZGVyQ2FudmFzO1xuXG4gICAgcmVuZGVyVGV4dHVyZS5yZW5kZXIodGhpcywgbSwgdHJ1ZSk7XG5cbiAgICAvLyBub3cgcmVzdG9yZSB0aGUgc3RhdGUgYmUgc2V0dGluZyB0aGUgbmV3IHByb3BlcnRpZXNcbiAgICByZW5kZXJlci5jb250ZXh0ID0gY2FjaGVkUmVuZGVyVGFyZ2V0O1xuXG4gICAgdGhpcy5yZW5kZXJDYW52YXMgPSB0aGlzLl9yZW5kZXJDYWNoZWRDYW52YXM7XG4gICAgdGhpcy51cGRhdGVUcmFuc2Zvcm0gPSB0aGlzLmRpc3BsYXlPYmplY3RVcGRhdGVUcmFuc2Zvcm07XG4gICAgdGhpcy5nZXRCb3VuZHMgID0gdGhpcy5fZ2V0Q2FjaGVkQm91bmRzO1xuXG5cbiAgICAvLyBjcmVhdGUgb3VyIGNhY2hlZCBzcHJpdGVcbiAgICB0aGlzLl9jYWNoZWRTcHJpdGUgPSBuZXcgY29yZS5TcHJpdGUocmVuZGVyVGV4dHVyZSk7XG4gICAgdGhpcy5fY2FjaGVkU3ByaXRlLndvcmxkVHJhbnNmb3JtID0gdGhpcy53b3JsZFRyYW5zZm9ybTtcbiAgICB0aGlzLl9jYWNoZWRTcHJpdGUuYW5jaG9yLnggPSAtKCBib3VuZHMueCAvIGJvdW5kcy53aWR0aCApO1xuICAgIHRoaXMuX2NhY2hlZFNwcml0ZS5hbmNob3IueSA9IC0oIGJvdW5kcy55IC8gYm91bmRzLmhlaWdodCApO1xuXG4gICAgdGhpcy51cGRhdGVUcmFuc2Zvcm0oKTtcblxuICAgIHRoaXMuY29udGFpbnNQb2ludCA9IHRoaXMuX2NhY2hlZFNwcml0ZS5jb250YWluc1BvaW50LmJpbmQodGhpcy5fY2FjaGVkU3ByaXRlKTtcbn07XG5cbi8qKlxuKiBDYWxjdWxhdGVzIHRoZSBib3VuZHMgb2YgdGhlIGNhY2hlZCBzcHJpdGVcbipcbiogQHByaXZhdGVcbiovXG5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS5fZ2V0Q2FjaGVkQm91bmRzID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLl9jYWNoZWRTcHJpdGUuX2N1cnJlbnRCb3VuZHMgPSBudWxsO1xuXG4gICAgcmV0dXJuIHRoaXMuX2NhY2hlZFNwcml0ZS5nZXRCb3VuZHMoKTtcbn07XG5cbi8qKlxuKiBEZXN0cm95cyB0aGUgY2FjaGVkIHNwcml0ZS5cbipcbiogQHByaXZhdGVcbiovXG5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS5fZGVzdHJveUNhY2hlZERpc3BsYXlPYmplY3QgPSBmdW5jdGlvbiAoKVxue1xuICAgIHRoaXMuX2NhY2hlZFNwcml0ZS5fdGV4dHVyZS5kZXN0cm95KCk7XG4gICAgdGhpcy5fY2FjaGVkU3ByaXRlID0gbnVsbDtcbn07XG5cbkRpc3BsYXlPYmplY3QucHJvdG90eXBlLl9jYWNoZUFzQml0bWFwRGVzdHJveSA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy5jYWNoZUFzQml0bWFwID0gZmFsc2U7XG4gICAgdGhpcy5fb3JpZ2luYWxEZXN0cm95KCk7XG59O1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi9jb3JlJyk7XG5cbi8qKlxuICogVGhlIGluc3RhbmNlIG5hbWUgb2YgdGhlIG9iamVjdC5cbiAqXG4gKiBAbWVtYmVyb2YgUElYSS5EaXNwbGF5T2JqZWN0I1xuICogQG1lbWJlciB7c3RyaW5nfVxuICovXG5jb3JlLkRpc3BsYXlPYmplY3QucHJvdG90eXBlLm5hbWUgPSBudWxsO1xuXG4vKipcbiogUmV0dXJucyB0aGUgZGlzcGxheSBvYmplY3QgaW4gdGhlIGNvbnRhaW5lclxuKlxuKiBAbWVtYmVyb2YgUElYSS5Db250YWluZXIjXG4qIEBwYXJhbSBuYW1lIHtzdHJpbmd9IGluc3RhbmNlIG5hbWVcbiogQHJldHVybiB7UElYSS5EaXNwbGF5T2JqZWN0fVxuKi9cbmNvcmUuQ29udGFpbmVyLnByb3RvdHlwZS5nZXRDaGlsZEJ5TmFtZSA9IGZ1bmN0aW9uIChuYW1lKVxue1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5jaGlsZHJlbi5sZW5ndGg7IGkrKylcbiAgICB7XG4gICAgICAgIGlmICh0aGlzLmNoaWxkcmVuW2ldLm5hbWUgPT09IG5hbWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmNoaWxkcmVuW2ldO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xufTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vY29yZScpO1xuXG4vKipcbiogUmV0dXJucyB0aGUgZ2xvYmFsIHBvc2l0aW9uIG9mIHRoZSBkaXNwbGF5T2JqZWN0XG4qXG4qIEBtZW1iZXJvZiBQSVhJLkRpc3BsYXlPYmplY3QjXG4qIEBwYXJhbSBwb2ludCB7UG9pbnR9IHRoZSBwb2ludCB0byB3cml0ZSB0aGUgZ2xvYmFsIHZhbHVlIHRvLiBJZiBudWxsIGEgbmV3IHBvaW50IHdpbGwgYmUgcmV0dXJuZWRcbiogQHJldHVybiB7UG9pbnR9XG4qL1xuY29yZS5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS5nZXRHbG9iYWxQb3NpdGlvbiA9IGZ1bmN0aW9uIChwb2ludClcbntcbiAgICBwb2ludCA9IHBvaW50IHx8IG5ldyBjb3JlLlBvaW50KCk7XG5cbiAgICBpZih0aGlzLnBhcmVudClcbiAgICB7XG4gICAgICAgIHRoaXMuZGlzcGxheU9iamVjdFVwZGF0ZVRyYW5zZm9ybSgpO1xuXG4gICAgICAgIHBvaW50LnggPSB0aGlzLndvcmxkVHJhbnNmb3JtLnR4O1xuICAgICAgICBwb2ludC55ID0gdGhpcy53b3JsZFRyYW5zZm9ybS50eTtcbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgcG9pbnQueCA9IHRoaXMucG9zaXRpb24ueDtcbiAgICAgICAgcG9pbnQueSA9IHRoaXMucG9zaXRpb24ueTtcbiAgICB9XG5cbiAgICByZXR1cm4gcG9pbnQ7XG59O1xuIiwiLyoqXG4gKiBAZmlsZSAgICAgICAgTWFpbiBleHBvcnQgb2YgdGhlIFBJWEkgZXh0cmFzIGxpYnJhcnlcbiAqIEBhdXRob3IgICAgICBNYXQgR3JvdmVzIDxtYXRAZ29vZGJveWRpZ2l0YWwuY29tPlxuICogQGNvcHlyaWdodCAgIDIwMTMtMjAxNSBHb29kQm95RGlnaXRhbFxuICogQGxpY2Vuc2UgICAgIHtAbGluayBodHRwczovL2dpdGh1Yi5jb20vcGl4aWpzL3BpeGkuanMvYmxvYi9tYXN0ZXIvTElDRU5TRXxNSVQgTGljZW5zZX1cbiAqL1xuXG5yZXF1aXJlKCcuL2NhY2hlQXNCaXRtYXAnKTtcbnJlcXVpcmUoJy4vZ2V0Q2hpbGRCeU5hbWUnKTtcbnJlcXVpcmUoJy4vZ2V0R2xvYmFsUG9zaXRpb24nKTtcblxuLyoqXG4gKiBAbmFtZXNwYWNlIFBJWEkuZXh0cmFzXG4gKi9cbm1vZHVsZS5leHBvcnRzID0ge1xuICAgIE1vdmllQ2xpcDogICAgICByZXF1aXJlKCcuL01vdmllQ2xpcCcpLFxuICAgIFRpbGluZ1Nwcml0ZTogICByZXF1aXJlKCcuL1RpbGluZ1Nwcml0ZScpLFxuICAgIEJpdG1hcFRleHQ6ICAgICByZXF1aXJlKCcuL0JpdG1hcFRleHQnKVxufTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vLi4vY29yZScpO1xuLy8gQHNlZSBodHRwczovL2dpdGh1Yi5jb20vc3Vic3RhY2svYnJmcy9pc3N1ZXMvMjVcblxuXG4vLyBUT0RPIChjZW5nbGVyKSAtIFRoZSBZIGlzIGZsaXBwZWQgaW4gdGhpcyBzaGFkZXIgZm9yIHNvbWUgcmVhc29uLlxuXG4vKipcbiAqIEBhdXRob3IgVmljbyBAdmljb2NvdGVhXG4gKiBvcmlnaW5hbCBzaGFkZXIgOiBodHRwczovL3d3dy5zaGFkZXJ0b3kuY29tL3ZpZXcvbHNzR0RqIGJ5IEBtb3ZBWDEzaFxuICovXG5cbi8qKlxuICogQW4gQVNDSUkgZmlsdGVyLlxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5BYnN0cmFjdEZpbHRlclxuICogQG1lbWJlcm9mIFBJWEkuZmlsdGVyc1xuICovXG5mdW5jdGlvbiBBc2NpaUZpbHRlcigpXG57XG4gICAgY29yZS5BYnN0cmFjdEZpbHRlci5jYWxsKHRoaXMsXG4gICAgICAgIC8vIHZlcnRleCBzaGFkZXJcbiAgICAgICAgbnVsbCxcbiAgICAgICAgLy8gZnJhZ21lbnQgc2hhZGVyXG4gICAgICAgIFwicHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XFxuXFxudW5pZm9ybSB2ZWM0IGRpbWVuc2lvbnM7XFxudW5pZm9ybSBmbG9hdCBwaXhlbFNpemU7XFxudW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXI7XFxuXFxuZmxvYXQgY2hhcmFjdGVyKGZsb2F0IG4sIHZlYzIgcClcXG57XFxuICAgIHAgPSBmbG9vcihwKnZlYzIoNC4wLCAtNC4wKSArIDIuNSk7XFxuICAgIGlmIChjbGFtcChwLngsIDAuMCwgNC4wKSA9PSBwLnggJiYgY2xhbXAocC55LCAwLjAsIDQuMCkgPT0gcC55KVxcbiAgICB7XFxuICAgICAgICBpZiAoaW50KG1vZChuL2V4cDIocC54ICsgNS4wKnAueSksIDIuMCkpID09IDEpIHJldHVybiAxLjA7XFxuICAgIH1cXG4gICAgcmV0dXJuIDAuMDtcXG59XFxuXFxudm9pZCBtYWluKClcXG57XFxuICAgIHZlYzIgdXYgPSBnbF9GcmFnQ29vcmQueHk7XFxuXFxuICAgIHZlYzMgY29sID0gdGV4dHVyZTJEKHVTYW1wbGVyLCBmbG9vciggdXYgLyBwaXhlbFNpemUgKSAqIHBpeGVsU2l6ZSAvIGRpbWVuc2lvbnMueHkpLnJnYjtcXG5cXG4gICAgZmxvYXQgZ3JheSA9IChjb2wuciArIGNvbC5nICsgY29sLmIpIC8gMy4wO1xcblxcbiAgICBmbG9hdCBuID0gIDY1NTM2LjA7ICAgICAgICAgICAgIC8vIC5cXG4gICAgaWYgKGdyYXkgPiAwLjIpIG4gPSA2NTYwMC4wOyAgICAvLyA6XFxuICAgIGlmIChncmF5ID4gMC4zKSBuID0gMzMyNzcyLjA7ICAgLy8gKlxcbiAgICBpZiAoZ3JheSA+IDAuNCkgbiA9IDE1MjU1MDg2LjA7IC8vIG9cXG4gICAgaWYgKGdyYXkgPiAwLjUpIG4gPSAyMzM4NTE2NC4wOyAvLyAmXFxuICAgIGlmIChncmF5ID4gMC42KSBuID0gMTUyNTIwMTQuMDsgLy8gOFxcbiAgICBpZiAoZ3JheSA+IDAuNykgbiA9IDEzMTk5NDUyLjA7IC8vIEBcXG4gICAgaWYgKGdyYXkgPiAwLjgpIG4gPSAxMTUxMjgxMC4wOyAvLyAjXFxuXFxuICAgIHZlYzIgcCA9IG1vZCggdXYgLyAoIHBpeGVsU2l6ZSAqIDAuNSApLCAyLjApIC0gdmVjMigxLjApO1xcbiAgICBjb2wgPSBjb2wgKiBjaGFyYWN0ZXIobiwgcCk7XFxuXFxuICAgIGdsX0ZyYWdDb2xvciA9IHZlYzQoY29sLCAxLjApO1xcbn1cXG5cIixcbiAgICAgICAgLy8gY3VzdG9tIHVuaWZvcm1zXG4gICAgICAgIHtcbiAgICAgICAgICAgIGRpbWVuc2lvbnM6IHsgdHlwZTogJzRmdicsIHZhbHVlOiBuZXcgRmxvYXQzMkFycmF5KFswLCAwLCAwLCAwXSkgfSxcbiAgICAgICAgICAgIHBpeGVsU2l6ZTogIHsgdHlwZTogJzFmJywgdmFsdWU6IDggfVxuICAgICAgICB9XG4gICAgKTtcbn1cblxuQXNjaWlGaWx0ZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShjb3JlLkFic3RyYWN0RmlsdGVyLnByb3RvdHlwZSk7XG5Bc2NpaUZpbHRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBBc2NpaUZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gQXNjaWlGaWx0ZXI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKEFzY2lpRmlsdGVyLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFRoZSBwaXhlbCBzaXplIHVzZWQgYnkgdGhlIGZpbHRlci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLkFzY2lpRmlsdGVyI1xuICAgICAqL1xuICAgIHNpemU6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy51bmlmb3Jtcy5waXhlbFNpemUudmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLnBpeGVsU2l6ZS52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfVxufSk7XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uLy4uL2NvcmUnKSxcbiAgICBCbHVyWEZpbHRlciA9IHJlcXVpcmUoJy4uL2JsdXIvQmx1clhGaWx0ZXInKSxcbiAgICBCbHVyWUZpbHRlciA9IHJlcXVpcmUoJy4uL2JsdXIvQmx1cllGaWx0ZXInKTtcblxuLyoqXG4gKiBUaGUgQmxvb21GaWx0ZXIgYXBwbGllcyBhIEdhdXNzaWFuIGJsdXIgdG8gYW4gb2JqZWN0LlxuICogVGhlIHN0cmVuZ3RoIG9mIHRoZSBibHVyIGNhbiBiZSBzZXQgZm9yIHgtIGFuZCB5LWF4aXMgc2VwYXJhdGVseS5cbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQWJzdHJhY3RGaWx0ZXJcbiAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnNcbiAqL1xuZnVuY3Rpb24gQmxvb21GaWx0ZXIoKVxue1xuICAgIGNvcmUuQWJzdHJhY3RGaWx0ZXIuY2FsbCh0aGlzKTtcblxuICAgIHRoaXMuYmx1clhGaWx0ZXIgPSBuZXcgQmx1clhGaWx0ZXIoKTtcbiAgICB0aGlzLmJsdXJZRmlsdGVyID0gbmV3IEJsdXJZRmlsdGVyKCk7XG5cbiAgICB0aGlzLmRlZmF1bHRGaWx0ZXIgPSBuZXcgY29yZS5BYnN0cmFjdEZpbHRlcigpO1xufVxuXG5CbG9vbUZpbHRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuQWJzdHJhY3RGaWx0ZXIucHJvdG90eXBlKTtcbkJsb29tRmlsdGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IEJsb29tRmlsdGVyO1xubW9kdWxlLmV4cG9ydHMgPSBCbG9vbUZpbHRlcjtcblxuQmxvb21GaWx0ZXIucHJvdG90eXBlLmFwcGx5RmlsdGVyID0gZnVuY3Rpb24gKHJlbmRlcmVyLCBpbnB1dCwgb3V0cHV0KVxue1xuICAgIHZhciByZW5kZXJUYXJnZXQgPSByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLmdldFJlbmRlclRhcmdldCh0cnVlKTtcblxuICAgIC8vVE9ETyAtIGNvcHlUZXhTdWJJbWFnZTJEIGNvdWxkIGJlIHVzZWQgaGVyZT9cbiAgICB0aGlzLmRlZmF1bHRGaWx0ZXIuYXBwbHlGaWx0ZXIocmVuZGVyZXIsIGlucHV0LCBvdXRwdXQpO1xuXG4gICAgdGhpcy5ibHVyWEZpbHRlci5hcHBseUZpbHRlcihyZW5kZXJlciwgaW5wdXQsIHJlbmRlclRhcmdldCk7XG5cbiAgICByZW5kZXJlci5ibGVuZE1vZGVNYW5hZ2VyLnNldEJsZW5kTW9kZShjb3JlLkJMRU5EX01PREVTLlNDUkVFTik7XG5cbiAgICB0aGlzLmJsdXJZRmlsdGVyLmFwcGx5RmlsdGVyKHJlbmRlcmVyLCByZW5kZXJUYXJnZXQsIG91dHB1dCk7XG5cbiAgICByZW5kZXJlci5ibGVuZE1vZGVNYW5hZ2VyLnNldEJsZW5kTW9kZShjb3JlLkJMRU5EX01PREVTLk5PUk1BTCk7XG5cbiAgICByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLnJldHVyblJlbmRlclRhcmdldChyZW5kZXJUYXJnZXQpO1xufTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoQmxvb21GaWx0ZXIucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgc3RyZW5ndGggb2YgYm90aCB0aGUgYmx1clggYW5kIGJsdXJZIHByb3BlcnRpZXMgc2ltdWx0YW5lb3VzbHlcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyT2YgUElYSS5maWx0ZXJzLkJsb29tRmlsdGVyI1xuICAgICAqIEBkZWZhdWx0IDJcbiAgICAgKi9cbiAgICBibHVyOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuYmx1clhGaWx0ZXIuYmx1cjtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuYmx1clhGaWx0ZXIuYmx1ciA9IHRoaXMuYmx1cllGaWx0ZXIuYmx1ciA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIHN0cmVuZ3RoIG9mIHRoZSBibHVyWCBwcm9wZXJ0eVxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJPZiBQSVhJLmZpbHRlcnMuQmxvb21GaWx0ZXIjXG4gICAgICogQGRlZmF1bHQgMlxuICAgICAqL1xuICAgIGJsdXJYOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuYmx1clhGaWx0ZXIuYmx1cjtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuYmx1clhGaWx0ZXIuYmx1ciA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIHN0cmVuZ3RoIG9mIHRoZSBibHVyWSBwcm9wZXJ0eVxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJPZiBQSVhJLmZpbHRlcnMuQmxvb21GaWx0ZXIjXG4gICAgICogQGRlZmF1bHQgMlxuICAgICAqL1xuICAgIGJsdXJZOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuYmx1cllGaWx0ZXIuYmx1cjtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuYmx1cllGaWx0ZXIuYmx1ciA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfVxufSk7XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uLy4uL2NvcmUnKTtcblxuXG4vKipcbiAqIFRoZSBCbHVyRGlyRmlsdGVyIGFwcGxpZXMgYSBHYXVzc2lhbiBibHVyIHRvd2FyZCBhIGRpcmVjdGlvbiB0byBhbiBvYmplY3QuXG4gKlxuICogQGNsYXNzXG4gKiBAcGFyYW0ge251bWJlcn0gZGlyWFxuICogQHBhcmFtIHtudW1iZXJ9IGRpcllcbiAqIEBleHRlbmRzIFBJWEkuQWJzdHJhY3RGaWx0ZXJcbiAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnNcbiAqL1xuZnVuY3Rpb24gQmx1ckRpckZpbHRlcihkaXJYLCBkaXJZKVxue1xuICAgIGNvcmUuQWJzdHJhY3RGaWx0ZXIuY2FsbCh0aGlzLFxuICAgICAgICAvLyB2ZXJ0ZXggc2hhZGVyXG4gICAgICAgIFwiYXR0cmlidXRlIHZlYzIgYVZlcnRleFBvc2l0aW9uO1xcbmF0dHJpYnV0ZSB2ZWMyIGFUZXh0dXJlQ29vcmQ7XFxuYXR0cmlidXRlIHZlYzQgYUNvbG9yO1xcblxcbnVuaWZvcm0gZmxvYXQgc3RyZW5ndGg7XFxudW5pZm9ybSBmbG9hdCBkaXJYO1xcbnVuaWZvcm0gZmxvYXQgZGlyWTtcXG51bmlmb3JtIG1hdDMgcHJvamVjdGlvbk1hdHJpeDtcXG5cXG52YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDtcXG52YXJ5aW5nIHZlYzQgdkNvbG9yO1xcbnZhcnlpbmcgdmVjMiB2Qmx1clRleENvb3Jkc1szXTtcXG5cXG52b2lkIG1haW4odm9pZClcXG57XFxuICAgIGdsX1Bvc2l0aW9uID0gdmVjNCgocHJvamVjdGlvbk1hdHJpeCAqIHZlYzMoKGFWZXJ0ZXhQb3NpdGlvbiksIDEuMCkpLnh5LCAwLjAsIDEuMCk7XFxuICAgIHZUZXh0dXJlQ29vcmQgPSBhVGV4dHVyZUNvb3JkO1xcblxcbiAgICB2Qmx1clRleENvb3Jkc1swXSA9IGFUZXh0dXJlQ29vcmQgKyB2ZWMyKCAoMC4wMDQgKiBzdHJlbmd0aCkgKiBkaXJYLCAoMC4wMDQgKiBzdHJlbmd0aCkgKiBkaXJZICk7XFxuICAgIHZCbHVyVGV4Q29vcmRzWzFdID0gYVRleHR1cmVDb29yZCArIHZlYzIoICgwLjAwOCAqIHN0cmVuZ3RoKSAqIGRpclgsICgwLjAwOCAqIHN0cmVuZ3RoKSAqIGRpclkgKTtcXG4gICAgdkJsdXJUZXhDb29yZHNbMl0gPSBhVGV4dHVyZUNvb3JkICsgdmVjMiggKDAuMDEyICogc3RyZW5ndGgpICogZGlyWCwgKDAuMDEyICogc3RyZW5ndGgpICogZGlyWSApO1xcblxcbiAgICB2Q29sb3IgPSB2ZWM0KGFDb2xvci5yZ2IgKiBhQ29sb3IuYSwgYUNvbG9yLmEpO1xcbn1cXG5cIixcbiAgICAgICAgLy8gZnJhZ21lbnQgc2hhZGVyXG4gICAgICAgIFwicHJlY2lzaW9uIGxvd3AgZmxvYXQ7XFxuXFxudmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7XFxudmFyeWluZyB2ZWMyIHZCbHVyVGV4Q29vcmRzWzNdO1xcbnZhcnlpbmcgdmVjNCB2Q29sb3I7XFxuXFxudW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXI7XFxuXFxudm9pZCBtYWluKHZvaWQpXFxue1xcbiAgICBnbF9GcmFnQ29sb3IgPSB2ZWM0KDAuMCk7XFxuXFxuICAgIGdsX0ZyYWdDb2xvciArPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZUZXh0dXJlQ29vcmQgICAgICkgKiAwLjM5ODk0MjI4MDQwMTQzMjc7XFxuICAgIGdsX0ZyYWdDb2xvciArPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZCbHVyVGV4Q29vcmRzWyAwXSkgKiAwLjI0MTk3MDcyNDUxOTE0NTQ7XFxuICAgIGdsX0ZyYWdDb2xvciArPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZCbHVyVGV4Q29vcmRzWyAxXSkgKiAwLjA1Mzk5MDk2NjUxMzE4OTg1O1xcbiAgICBnbF9GcmFnQ29sb3IgKz0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2Qmx1clRleENvb3Jkc1sgMl0pICogMC4wMDQ0MzE4NDg0MTE5MzgzNDE7XFxufVxcblwiLFxuICAgICAgICAvLyBzZXQgdGhlIHVuaWZvcm1zXG4gICAgICAgIHtcbiAgICAgICAgICAgIHN0cmVuZ3RoOiB7IHR5cGU6ICcxZicsIHZhbHVlOiAxIH0sXG4gICAgICAgICAgICBkaXJYOiB7IHR5cGU6ICcxZicsIHZhbHVlOiBkaXJYIHx8IDAgfSxcbiAgICAgICAgICAgIGRpclk6IHsgdHlwZTogJzFmJywgdmFsdWU6IGRpclkgfHwgMCB9XG4gICAgICAgIH1cbiAgICApO1xuXG4gICAgdGhpcy5kZWZhdWx0RmlsdGVyID0gbmV3IGNvcmUuQWJzdHJhY3RGaWx0ZXIoKTtcblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIG51bWJlciBvZiBwYXNzZXMgZm9yIGJsdXIuIE1vcmUgcGFzc2VzIG1lYW5zIGhpZ2hlciBxdWFpbGl0eSBibHVyaW5nLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDFcbiAgICAgKi9cbiAgICB0aGlzLnBhc3NlcyA9IDE7XG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBYIGRpcmVjdGlvbiBvZiB0aGUgYmx1clxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDBcbiAgICAgKi9cbiAgICB0aGlzLmRpclggPSBkaXJYIHx8IDA7XG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBZIGRpcmVjdGlvbiBvZiB0aGUgYmx1clxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDBcbiAgICAgKi9cbiAgICB0aGlzLmRpclkgPSBkaXJZIHx8IDA7XG5cbiAgICB0aGlzLnN0cmVuZ3RoID0gNDtcbn1cblxuQmx1ckRpckZpbHRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuQWJzdHJhY3RGaWx0ZXIucHJvdG90eXBlKTtcbkJsdXJEaXJGaWx0ZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gQmx1ckRpckZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gQmx1ckRpckZpbHRlcjtcblxuQmx1ckRpckZpbHRlci5wcm90b3R5cGUuYXBwbHlGaWx0ZXIgPSBmdW5jdGlvbiAocmVuZGVyZXIsIGlucHV0LCBvdXRwdXQsIGNsZWFyKSB7XG5cbiAgICB2YXIgc2hhZGVyID0gdGhpcy5nZXRTaGFkZXIocmVuZGVyZXIpO1xuXG4gICAgdGhpcy51bmlmb3Jtcy5zdHJlbmd0aC52YWx1ZSA9IHRoaXMuc3RyZW5ndGggLyA0IC8gdGhpcy5wYXNzZXMgKiAoaW5wdXQuZnJhbWUud2lkdGggLyBpbnB1dC5zaXplLndpZHRoKTtcblxuICAgIGlmICh0aGlzLnBhc3NlcyA9PT0gMSkge1xuICAgICAgICByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLmFwcGx5RmlsdGVyKHNoYWRlciwgaW5wdXQsIG91dHB1dCwgY2xlYXIpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHZhciByZW5kZXJUYXJnZXQgPSByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLmdldFJlbmRlclRhcmdldCh0cnVlKTtcblxuICAgICAgICByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLmFwcGx5RmlsdGVyKHNoYWRlciwgaW5wdXQsIHJlbmRlclRhcmdldCwgY2xlYXIpO1xuXG4gICAgICAgIGZvcih2YXIgaSA9IDA7IGkgPCB0aGlzLnBhc3Nlcy0yOyBpKyspXG4gICAgICAgIHtcbiAgICAgICAgICAgIC8vdGhpcy51bmlmb3Jtcy5zdHJlbmd0aC52YWx1ZSA9IHRoaXMuc3RyZW5ndGggLyA0IC8gKHRoaXMucGFzc2VzKyhpKjIpKSAqIChpbnB1dC5mcmFtZS53aWR0aCAvIGlucHV0LnNpemUud2lkdGgpO1xuICAgICAgICAgICAgcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5hcHBseUZpbHRlcihzaGFkZXIsIHJlbmRlclRhcmdldCwgcmVuZGVyVGFyZ2V0LCBjbGVhcik7XG4gICAgICAgIH1cblxuICAgICAgICByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLmFwcGx5RmlsdGVyKHNoYWRlciwgcmVuZGVyVGFyZ2V0LCBvdXRwdXQsIGNsZWFyKTtcblxuICAgICAgICByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLnJldHVyblJlbmRlclRhcmdldChyZW5kZXJUYXJnZXQpO1xuICAgIH1cbn07XG5cblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoQmx1ckRpckZpbHRlci5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBzdHJlbmd0aCBvZiBib3RoIHRoZSBibHVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuQmx1ckRpckZpbHRlciNcbiAgICAgKiBAZGVmYXVsdCAyXG4gICAgICovXG4gICAgYmx1cjoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnN0cmVuZ3RoO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5wYWRkaW5nID0gdmFsdWUgKiAwLjU7XG4gICAgICAgICAgICB0aGlzLnN0cmVuZ3RoID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9LFxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIFggZGlyZWN0aW9uIG9mIHRoZSBibHVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuQmx1cllGaWx0ZXIjXG4gICAgICogQGRlZmF1bHQgMFxuICAgICAqL1xuICAgIGRpclg6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5kaXJYO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy5kaXJYLnZhbHVlID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9LFxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIFkgZGlyZWN0aW9uIG9mIHRoZSBibHVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuQmx1ckRpckZpbHRlciNcbiAgICAgKiBAZGVmYXVsdCAwXG4gICAgICovXG4gICAgZGlyWToge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmRpclk7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLmRpclkudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi8uLi9jb3JlJyksXG4gICAgQmx1clhGaWx0ZXIgPSByZXF1aXJlKCcuL0JsdXJYRmlsdGVyJyksXG4gICAgQmx1cllGaWx0ZXIgPSByZXF1aXJlKCcuL0JsdXJZRmlsdGVyJyk7XG5cbi8qKlxuICogVGhlIEJsdXJGaWx0ZXIgYXBwbGllcyBhIEdhdXNzaWFuIGJsdXIgdG8gYW4gb2JqZWN0LlxuICogVGhlIHN0cmVuZ3RoIG9mIHRoZSBibHVyIGNhbiBiZSBzZXQgZm9yIHgtIGFuZCB5LWF4aXMgc2VwYXJhdGVseS5cbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQWJzdHJhY3RGaWx0ZXJcbiAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnNcbiAqL1xuZnVuY3Rpb24gQmx1ckZpbHRlcigpXG57XG4gICAgY29yZS5BYnN0cmFjdEZpbHRlci5jYWxsKHRoaXMpO1xuXG4gICAgdGhpcy5ibHVyWEZpbHRlciA9IG5ldyBCbHVyWEZpbHRlcigpO1xuICAgIHRoaXMuYmx1cllGaWx0ZXIgPSBuZXcgQmx1cllGaWx0ZXIoKTtcbn1cblxuQmx1ckZpbHRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuQWJzdHJhY3RGaWx0ZXIucHJvdG90eXBlKTtcbkJsdXJGaWx0ZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gQmx1ckZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gQmx1ckZpbHRlcjtcblxuQmx1ckZpbHRlci5wcm90b3R5cGUuYXBwbHlGaWx0ZXIgPSBmdW5jdGlvbiAocmVuZGVyZXIsIGlucHV0LCBvdXRwdXQpXG57XG4gICAgdmFyIHJlbmRlclRhcmdldCA9IHJlbmRlcmVyLmZpbHRlck1hbmFnZXIuZ2V0UmVuZGVyVGFyZ2V0KHRydWUpO1xuXG4gICAgdGhpcy5ibHVyWEZpbHRlci5hcHBseUZpbHRlcihyZW5kZXJlciwgaW5wdXQsIHJlbmRlclRhcmdldCk7XG4gICAgdGhpcy5ibHVyWUZpbHRlci5hcHBseUZpbHRlcihyZW5kZXJlciwgcmVuZGVyVGFyZ2V0LCBvdXRwdXQpO1xuXG4gICAgcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5yZXR1cm5SZW5kZXJUYXJnZXQocmVuZGVyVGFyZ2V0KTtcbn07XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKEJsdXJGaWx0ZXIucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgc3RyZW5ndGggb2YgYm90aCB0aGUgYmx1clggYW5kIGJsdXJZIHByb3BlcnRpZXMgc2ltdWx0YW5lb3VzbHlcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyT2YgUElYSS5maWx0ZXJzLkJsdXJGaWx0ZXIjXG4gICAgICogQGRlZmF1bHQgMlxuICAgICAqL1xuICAgIGJsdXI6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5ibHVyWEZpbHRlci5ibHVyO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5wYWRkaW5nID0gTWF0aC5hYnModmFsdWUpICogMC41O1xuICAgICAgICAgICAgdGhpcy5ibHVyWEZpbHRlci5ibHVyID0gdGhpcy5ibHVyWUZpbHRlci5ibHVyID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgbnVtYmVyIG9mIHBhc3NlcyBmb3IgYmx1ci4gTW9yZSBwYXNzZXMgbWVhbnMgaGlnaGVyIHF1YWlsaXR5IGJsdXJpbmcuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5CbHVyWUZpbHRlciNcbiAgICAgKiBAZGVmYXVsdCAxXG4gICAgICovXG4gICAgcGFzc2VzOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuICB0aGlzLmJsdXJYRmlsdGVyLnBhc3NlcztcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuYmx1clhGaWx0ZXIucGFzc2VzID0gdGhpcy5ibHVyWUZpbHRlci5wYXNzZXMgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBzdHJlbmd0aCBvZiB0aGUgYmx1clggcHJvcGVydHlcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyT2YgUElYSS5maWx0ZXJzLkJsdXJGaWx0ZXIjXG4gICAgICogQGRlZmF1bHQgMlxuICAgICAqL1xuICAgIGJsdXJYOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuYmx1clhGaWx0ZXIuYmx1cjtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuYmx1clhGaWx0ZXIuYmx1ciA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIHN0cmVuZ3RoIG9mIHRoZSBibHVyWSBwcm9wZXJ0eVxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJPZiBQSVhJLmZpbHRlcnMuQmx1ckZpbHRlciNcbiAgICAgKiBAZGVmYXVsdCAyXG4gICAgICovXG4gICAgYmx1clk6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5ibHVyWUZpbHRlci5ibHVyO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5ibHVyWUZpbHRlci5ibHVyID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG59KTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vLi4vY29yZScpO1xuLy8gQHNlZSBodHRwczovL2dpdGh1Yi5jb20vc3Vic3RhY2svYnJmcy9pc3N1ZXMvMjVcblxuXG4vKipcbiAqIFRoZSBCbHVyWEZpbHRlciBhcHBsaWVzIGEgaG9yaXpvbnRhbCBHYXVzc2lhbiBibHVyIHRvIGFuIG9iamVjdC5cbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQWJzdHJhY3RGaWx0ZXJcbiAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnNcbiAqL1xuZnVuY3Rpb24gQmx1clhGaWx0ZXIoKVxue1xuICAgIGNvcmUuQWJzdHJhY3RGaWx0ZXIuY2FsbCh0aGlzLFxuICAgICAgICAvLyB2ZXJ0ZXggc2hhZGVyXG4gICAgICAgIFwiYXR0cmlidXRlIHZlYzIgYVZlcnRleFBvc2l0aW9uO1xcbmF0dHJpYnV0ZSB2ZWMyIGFUZXh0dXJlQ29vcmQ7XFxuYXR0cmlidXRlIHZlYzQgYUNvbG9yO1xcblxcbnVuaWZvcm0gZmxvYXQgc3RyZW5ndGg7XFxudW5pZm9ybSBtYXQzIHByb2plY3Rpb25NYXRyaXg7XFxuXFxudmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7XFxudmFyeWluZyB2ZWM0IHZDb2xvcjtcXG52YXJ5aW5nIHZlYzIgdkJsdXJUZXhDb29yZHNbNl07XFxuXFxudm9pZCBtYWluKHZvaWQpXFxue1xcbiAgICBnbF9Qb3NpdGlvbiA9IHZlYzQoKHByb2plY3Rpb25NYXRyaXggKiB2ZWMzKChhVmVydGV4UG9zaXRpb24pLCAxLjApKS54eSwgMC4wLCAxLjApO1xcbiAgICB2VGV4dHVyZUNvb3JkID0gYVRleHR1cmVDb29yZDtcXG5cXG4gICAgdkJsdXJUZXhDb29yZHNbIDBdID0gYVRleHR1cmVDb29yZCArIHZlYzIoLTAuMDEyICogc3RyZW5ndGgsIDAuMCk7XFxuICAgIHZCbHVyVGV4Q29vcmRzWyAxXSA9IGFUZXh0dXJlQ29vcmQgKyB2ZWMyKC0wLjAwOCAqIHN0cmVuZ3RoLCAwLjApO1xcbiAgICB2Qmx1clRleENvb3Jkc1sgMl0gPSBhVGV4dHVyZUNvb3JkICsgdmVjMigtMC4wMDQgKiBzdHJlbmd0aCwgMC4wKTtcXG4gICAgdkJsdXJUZXhDb29yZHNbIDNdID0gYVRleHR1cmVDb29yZCArIHZlYzIoIDAuMDA0ICogc3RyZW5ndGgsIDAuMCk7XFxuICAgIHZCbHVyVGV4Q29vcmRzWyA0XSA9IGFUZXh0dXJlQ29vcmQgKyB2ZWMyKCAwLjAwOCAqIHN0cmVuZ3RoLCAwLjApO1xcbiAgICB2Qmx1clRleENvb3Jkc1sgNV0gPSBhVGV4dHVyZUNvb3JkICsgdmVjMiggMC4wMTIgKiBzdHJlbmd0aCwgMC4wKTtcXG5cXG4gICAgdkNvbG9yID0gdmVjNChhQ29sb3IucmdiICogYUNvbG9yLmEsIGFDb2xvci5hKTtcXG59XFxuXCIsXG4gICAgICAgIC8vIGZyYWdtZW50IHNoYWRlclxuICAgICAgICBcInByZWNpc2lvbiBsb3dwIGZsb2F0O1xcblxcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xcbnZhcnlpbmcgdmVjMiB2Qmx1clRleENvb3Jkc1s2XTtcXG52YXJ5aW5nIHZlYzQgdkNvbG9yO1xcblxcbnVuaWZvcm0gc2FtcGxlcjJEIHVTYW1wbGVyO1xcblxcbnZvaWQgbWFpbih2b2lkKVxcbntcXG4gICAgZ2xfRnJhZ0NvbG9yID0gdmVjNCgwLjApO1xcblxcbiAgICBnbF9GcmFnQ29sb3IgKz0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2Qmx1clRleENvb3Jkc1sgMF0pKjAuMDA0NDMxODQ4NDExOTM4MzQxO1xcbiAgICBnbF9GcmFnQ29sb3IgKz0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2Qmx1clRleENvb3Jkc1sgMV0pKjAuMDUzOTkwOTY2NTEzMTg5ODU7XFxuICAgIGdsX0ZyYWdDb2xvciArPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZCbHVyVGV4Q29vcmRzWyAyXSkqMC4yNDE5NzA3MjQ1MTkxNDU0O1xcbiAgICBnbF9GcmFnQ29sb3IgKz0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2VGV4dHVyZUNvb3JkICAgICApKjAuMzk4OTQyMjgwNDAxNDMyNztcXG4gICAgZ2xfRnJhZ0NvbG9yICs9IHRleHR1cmUyRCh1U2FtcGxlciwgdkJsdXJUZXhDb29yZHNbIDNdKSowLjI0MTk3MDcyNDUxOTE0NTQ7XFxuICAgIGdsX0ZyYWdDb2xvciArPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZCbHVyVGV4Q29vcmRzWyA0XSkqMC4wNTM5OTA5NjY1MTMxODk4NTtcXG4gICAgZ2xfRnJhZ0NvbG9yICs9IHRleHR1cmUyRCh1U2FtcGxlciwgdkJsdXJUZXhDb29yZHNbIDVdKSowLjAwNDQzMTg0ODQxMTkzODM0MTtcXG59XFxuXCIsXG4gICAgICAgIC8vIHNldCB0aGUgdW5pZm9ybXNcbiAgICAgICAge1xuICAgICAgICAgICAgc3RyZW5ndGg6IHsgdHlwZTogJzFmJywgdmFsdWU6IDEgfVxuICAgICAgICB9XG4gICAgKTtcblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIG51bWJlciBvZiBwYXNzZXMgZm9yIGJsdXIuIE1vcmUgcGFzc2VzIG1lYW5zIGhpZ2hlciBxdWFpbGl0eSBibHVyaW5nLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDFcbiAgICAgKi9cbiAgICB0aGlzLnBhc3NlcyA9IDE7XG5cbiAgICB0aGlzLnN0cmVuZ3RoID0gNDtcbn1cblxuQmx1clhGaWx0ZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShjb3JlLkFic3RyYWN0RmlsdGVyLnByb3RvdHlwZSk7XG5CbHVyWEZpbHRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBCbHVyWEZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gQmx1clhGaWx0ZXI7XG5cbkJsdXJYRmlsdGVyLnByb3RvdHlwZS5hcHBseUZpbHRlciA9IGZ1bmN0aW9uIChyZW5kZXJlciwgaW5wdXQsIG91dHB1dCwgY2xlYXIpXG57XG4gICAgdmFyIHNoYWRlciA9IHRoaXMuZ2V0U2hhZGVyKHJlbmRlcmVyKTtcblxuICAgIHRoaXMudW5pZm9ybXMuc3RyZW5ndGgudmFsdWUgPSB0aGlzLnN0cmVuZ3RoIC8gNCAvIHRoaXMucGFzc2VzICogKGlucHV0LmZyYW1lLndpZHRoIC8gaW5wdXQuc2l6ZS53aWR0aCk7XG5cbiAgICBpZih0aGlzLnBhc3NlcyA9PT0gMSlcbiAgICB7XG4gICAgICAgIHJlbmRlcmVyLmZpbHRlck1hbmFnZXIuYXBwbHlGaWx0ZXIoc2hhZGVyLCBpbnB1dCwgb3V0cHV0LCBjbGVhcik7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHZhciByZW5kZXJUYXJnZXQgPSByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLmdldFJlbmRlclRhcmdldCh0cnVlKTtcbiAgICAgICAgdmFyIGZsaXAgPSBpbnB1dDtcbiAgICAgICAgdmFyIGZsb3AgPSByZW5kZXJUYXJnZXQ7XG5cbiAgICAgICAgZm9yKHZhciBpID0gMDsgaSA8IHRoaXMucGFzc2VzLTE7IGkrKylcbiAgICAgICAge1xuICAgICAgICAgICAgcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5hcHBseUZpbHRlcihzaGFkZXIsIGZsaXAsIGZsb3AsIHRydWUpO1xuXG4gICAgICAgICAgIHZhciB0ZW1wID0gZmxvcDtcbiAgICAgICAgICAgZmxvcCA9IGZsaXA7XG4gICAgICAgICAgIGZsaXAgPSB0ZW1wO1xuICAgICAgICB9XG5cbiAgICAgICAgcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5hcHBseUZpbHRlcihzaGFkZXIsIGZsaXAsIG91dHB1dCwgY2xlYXIpO1xuXG4gICAgICAgIHJlbmRlcmVyLmZpbHRlck1hbmFnZXIucmV0dXJuUmVuZGVyVGFyZ2V0KHJlbmRlclRhcmdldCk7XG4gICAgfVxufTtcblxuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhCbHVyWEZpbHRlci5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBzdHJlbmd0aCBvZiBib3RoIHRoZSBibHVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuQmx1clhGaWx0ZXIjXG4gICAgICogQGRlZmF1bHQgMlxuICAgICAqL1xuICAgIGJsdXI6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gIHRoaXMuc3RyZW5ndGg7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnBhZGRpbmcgPSAgTWF0aC5hYnModmFsdWUpICogMC41O1xuICAgICAgICAgICAgdGhpcy5zdHJlbmd0aCA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfVxufSk7XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uLy4uL2NvcmUnKTtcbi8vIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL3N1YnN0YWNrL2JyZnMvaXNzdWVzLzI1XG5cblxuLyoqXG4gKiBUaGUgQmx1cllGaWx0ZXIgYXBwbGllcyBhIGhvcml6b250YWwgR2F1c3NpYW4gYmx1ciB0byBhbiBvYmplY3QuXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLkFic3RyYWN0RmlsdGVyXG4gKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzXG4gKi9cbmZ1bmN0aW9uIEJsdXJZRmlsdGVyKClcbntcbiAgICBjb3JlLkFic3RyYWN0RmlsdGVyLmNhbGwodGhpcyxcbiAgICAgICAgLy8gdmVydGV4IHNoYWRlclxuICAgICAgICBcImF0dHJpYnV0ZSB2ZWMyIGFWZXJ0ZXhQb3NpdGlvbjtcXG5hdHRyaWJ1dGUgdmVjMiBhVGV4dHVyZUNvb3JkO1xcbmF0dHJpYnV0ZSB2ZWM0IGFDb2xvcjtcXG5cXG51bmlmb3JtIGZsb2F0IHN0cmVuZ3RoO1xcbnVuaWZvcm0gbWF0MyBwcm9qZWN0aW9uTWF0cml4O1xcblxcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xcbnZhcnlpbmcgdmVjNCB2Q29sb3I7XFxudmFyeWluZyB2ZWMyIHZCbHVyVGV4Q29vcmRzWzZdO1xcblxcbnZvaWQgbWFpbih2b2lkKVxcbntcXG4gICAgZ2xfUG9zaXRpb24gPSB2ZWM0KChwcm9qZWN0aW9uTWF0cml4ICogdmVjMygoYVZlcnRleFBvc2l0aW9uKSwgMS4wKSkueHksIDAuMCwgMS4wKTtcXG4gICAgdlRleHR1cmVDb29yZCA9IGFUZXh0dXJlQ29vcmQ7XFxuXFxuICAgIHZCbHVyVGV4Q29vcmRzWyAwXSA9IGFUZXh0dXJlQ29vcmQgKyB2ZWMyKDAuMCwgLTAuMDEyICogc3RyZW5ndGgpO1xcbiAgICB2Qmx1clRleENvb3Jkc1sgMV0gPSBhVGV4dHVyZUNvb3JkICsgdmVjMigwLjAsIC0wLjAwOCAqIHN0cmVuZ3RoKTtcXG4gICAgdkJsdXJUZXhDb29yZHNbIDJdID0gYVRleHR1cmVDb29yZCArIHZlYzIoMC4wLCAtMC4wMDQgKiBzdHJlbmd0aCk7XFxuICAgIHZCbHVyVGV4Q29vcmRzWyAzXSA9IGFUZXh0dXJlQ29vcmQgKyB2ZWMyKDAuMCwgIDAuMDA0ICogc3RyZW5ndGgpO1xcbiAgICB2Qmx1clRleENvb3Jkc1sgNF0gPSBhVGV4dHVyZUNvb3JkICsgdmVjMigwLjAsICAwLjAwOCAqIHN0cmVuZ3RoKTtcXG4gICAgdkJsdXJUZXhDb29yZHNbIDVdID0gYVRleHR1cmVDb29yZCArIHZlYzIoMC4wLCAgMC4wMTIgKiBzdHJlbmd0aCk7XFxuXFxuICAgdkNvbG9yID0gdmVjNChhQ29sb3IucmdiICogYUNvbG9yLmEsIGFDb2xvci5hKTtcXG59XFxuXCIsXG4gICAgICAgIC8vIGZyYWdtZW50IHNoYWRlclxuICAgICAgICBcInByZWNpc2lvbiBsb3dwIGZsb2F0O1xcblxcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xcbnZhcnlpbmcgdmVjMiB2Qmx1clRleENvb3Jkc1s2XTtcXG52YXJ5aW5nIHZlYzQgdkNvbG9yO1xcblxcbnVuaWZvcm0gc2FtcGxlcjJEIHVTYW1wbGVyO1xcblxcbnZvaWQgbWFpbih2b2lkKVxcbntcXG4gICAgZ2xfRnJhZ0NvbG9yID0gdmVjNCgwLjApO1xcblxcbiAgICBnbF9GcmFnQ29sb3IgKz0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2Qmx1clRleENvb3Jkc1sgMF0pKjAuMDA0NDMxODQ4NDExOTM4MzQxO1xcbiAgICBnbF9GcmFnQ29sb3IgKz0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2Qmx1clRleENvb3Jkc1sgMV0pKjAuMDUzOTkwOTY2NTEzMTg5ODU7XFxuICAgIGdsX0ZyYWdDb2xvciArPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZCbHVyVGV4Q29vcmRzWyAyXSkqMC4yNDE5NzA3MjQ1MTkxNDU0O1xcbiAgICBnbF9GcmFnQ29sb3IgKz0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2VGV4dHVyZUNvb3JkICAgICApKjAuMzk4OTQyMjgwNDAxNDMyNztcXG4gICAgZ2xfRnJhZ0NvbG9yICs9IHRleHR1cmUyRCh1U2FtcGxlciwgdkJsdXJUZXhDb29yZHNbIDNdKSowLjI0MTk3MDcyNDUxOTE0NTQ7XFxuICAgIGdsX0ZyYWdDb2xvciArPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZCbHVyVGV4Q29vcmRzWyA0XSkqMC4wNTM5OTA5NjY1MTMxODk4NTtcXG4gICAgZ2xfRnJhZ0NvbG9yICs9IHRleHR1cmUyRCh1U2FtcGxlciwgdkJsdXJUZXhDb29yZHNbIDVdKSowLjAwNDQzMTg0ODQxMTkzODM0MTtcXG59XFxuXCIsXG4gICAgICAgIC8vIHNldCB0aGUgdW5pZm9ybXNcbiAgICAgICAge1xuICAgICAgICAgICAgc3RyZW5ndGg6IHsgdHlwZTogJzFmJywgdmFsdWU6IDEgfVxuICAgICAgICB9XG4gICAgKTtcblxuICAgIHRoaXMucGFzc2VzID0gMTtcbiAgICB0aGlzLnN0cmVuZ3RoID0gNDtcbn1cblxuQmx1cllGaWx0ZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShjb3JlLkFic3RyYWN0RmlsdGVyLnByb3RvdHlwZSk7XG5CbHVyWUZpbHRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBCbHVyWUZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gQmx1cllGaWx0ZXI7XG5cbkJsdXJZRmlsdGVyLnByb3RvdHlwZS5hcHBseUZpbHRlciA9IGZ1bmN0aW9uIChyZW5kZXJlciwgaW5wdXQsIG91dHB1dCwgY2xlYXIpXG57XG4gICAgdmFyIHNoYWRlciA9IHRoaXMuZ2V0U2hhZGVyKHJlbmRlcmVyKTtcblxuICAgIHRoaXMudW5pZm9ybXMuc3RyZW5ndGgudmFsdWUgPSBNYXRoLmFicyh0aGlzLnN0cmVuZ3RoKSAvIDQgLyB0aGlzLnBhc3NlcyAqIChpbnB1dC5mcmFtZS5oZWlnaHQgLyBpbnB1dC5zaXplLmhlaWdodCk7XG5cbiAgICBpZih0aGlzLnBhc3NlcyA9PT0gMSlcbiAgICB7XG4gICAgICAgIHJlbmRlcmVyLmZpbHRlck1hbmFnZXIuYXBwbHlGaWx0ZXIoc2hhZGVyLCBpbnB1dCwgb3V0cHV0LCBjbGVhcik7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHZhciByZW5kZXJUYXJnZXQgPSByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLmdldFJlbmRlclRhcmdldCh0cnVlKTtcbiAgICAgICAgdmFyIGZsaXAgPSBpbnB1dDtcbiAgICAgICAgdmFyIGZsb3AgPSByZW5kZXJUYXJnZXQ7XG5cbiAgICAgICAgZm9yKHZhciBpID0gMDsgaSA8IHRoaXMucGFzc2VzLTE7IGkrKylcbiAgICAgICAge1xuICAgICAgICAgICAgcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5hcHBseUZpbHRlcihzaGFkZXIsIGZsaXAsIGZsb3AsIHRydWUpO1xuXG4gICAgICAgICAgIHZhciB0ZW1wID0gZmxvcDtcbiAgICAgICAgICAgZmxvcCA9IGZsaXA7XG4gICAgICAgICAgIGZsaXAgPSB0ZW1wO1xuICAgICAgICB9XG5cbiAgICAgICAgcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5hcHBseUZpbHRlcihzaGFkZXIsIGZsaXAsIG91dHB1dCwgY2xlYXIpO1xuXG4gICAgICAgIHJlbmRlcmVyLmZpbHRlck1hbmFnZXIucmV0dXJuUmVuZGVyVGFyZ2V0KHJlbmRlclRhcmdldCk7XG4gICAgfVxufTtcblxuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhCbHVyWUZpbHRlci5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBzdHJlbmd0aCBvZiBib3RoIHRoZSBibHVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuQmx1cllGaWx0ZXIjXG4gICAgICogQGRlZmF1bHQgMlxuICAgICAqL1xuICAgIGJsdXI6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gIHRoaXMuc3RyZW5ndGg7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnBhZGRpbmcgPSBNYXRoLmFicyh2YWx1ZSkgKiAwLjU7XG4gICAgICAgICAgICB0aGlzLnN0cmVuZ3RoID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG59KTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vLi4vY29yZScpO1xuLy8gQHNlZSBodHRwczovL2dpdGh1Yi5jb20vc3Vic3RhY2svYnJmcy9pc3N1ZXMvMjVcblxuXG4vKipcbiAqIEEgU21hcnQgQmx1ciBGaWx0ZXIuXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLkFic3RyYWN0RmlsdGVyXG4gKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzXG4gKi9cbmZ1bmN0aW9uIFNtYXJ0Qmx1ckZpbHRlcigpXG57XG4gICAgY29yZS5BYnN0cmFjdEZpbHRlci5jYWxsKHRoaXMsXG4gICAgICAgIC8vIHZlcnRleCBzaGFkZXJcbiAgICAgICAgbnVsbCxcbiAgICAgICAgLy8gZnJhZ21lbnQgc2hhZGVyXG4gICAgICAgIFwicHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XFxuXFxudmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7XFxuXFxudW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXI7XFxudW5pZm9ybSB2ZWMyIGRlbHRhO1xcblxcbmZsb2F0IHJhbmRvbSh2ZWMzIHNjYWxlLCBmbG9hdCBzZWVkKVxcbntcXG4gICAgcmV0dXJuIGZyYWN0KHNpbihkb3QoZ2xfRnJhZ0Nvb3JkLnh5eiArIHNlZWQsIHNjYWxlKSkgKiA0Mzc1OC41NDUzICsgc2VlZCk7XFxufVxcblxcbnZvaWQgbWFpbih2b2lkKVxcbntcXG4gICAgdmVjNCBjb2xvciA9IHZlYzQoMC4wKTtcXG4gICAgZmxvYXQgdG90YWwgPSAwLjA7XFxuXFxuICAgIGZsb2F0IG9mZnNldCA9IHJhbmRvbSh2ZWMzKDEyLjk4OTgsIDc4LjIzMywgMTUxLjcxODIpLCAwLjApO1xcblxcbiAgICBmb3IgKGZsb2F0IHQgPSAtMzAuMDsgdCA8PSAzMC4wOyB0KyspXFxuICAgIHtcXG4gICAgICAgIGZsb2F0IHBlcmNlbnQgPSAodCArIG9mZnNldCAtIDAuNSkgLyAzMC4wO1xcbiAgICAgICAgZmxvYXQgd2VpZ2h0ID0gMS4wIC0gYWJzKHBlcmNlbnQpO1xcbiAgICAgICAgdmVjNCBzYW1wbGUgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZUZXh0dXJlQ29vcmQgKyBkZWx0YSAqIHBlcmNlbnQpO1xcbiAgICAgICAgc2FtcGxlLnJnYiAqPSBzYW1wbGUuYTtcXG4gICAgICAgIGNvbG9yICs9IHNhbXBsZSAqIHdlaWdodDtcXG4gICAgICAgIHRvdGFsICs9IHdlaWdodDtcXG4gICAgfVxcblxcbiAgICBnbF9GcmFnQ29sb3IgPSBjb2xvciAvIHRvdGFsO1xcbiAgICBnbF9GcmFnQ29sb3IucmdiIC89IGdsX0ZyYWdDb2xvci5hICsgMC4wMDAwMTtcXG59XFxuXCIsXG4gICAgICAgIC8vIHVuaWZvcm1zXG4gICAgICAgIHtcbiAgICAgICAgICBkZWx0YTogeyB0eXBlOiAndjInLCB2YWx1ZTogeyB4OiAwLjEsIHk6IDAuMCB9IH1cbiAgICAgICAgfVxuICAgICk7XG59XG5cblNtYXJ0Qmx1ckZpbHRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuQWJzdHJhY3RGaWx0ZXIucHJvdG90eXBlKTtcblNtYXJ0Qmx1ckZpbHRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBTbWFydEJsdXJGaWx0ZXI7XG5tb2R1bGUuZXhwb3J0cyA9IFNtYXJ0Qmx1ckZpbHRlcjtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vLi4vY29yZScpO1xuLy8gQHNlZSBodHRwczovL2dpdGh1Yi5jb20vc3Vic3RhY2svYnJmcy9pc3N1ZXMvMjVcblxuXG4vKipcbiAqIFRoZSBDb2xvck1hdHJpeEZpbHRlciBjbGFzcyBsZXRzIHlvdSBhcHBseSBhIDV4NCBtYXRyaXggdHJhbnNmb3JtYXRpb24gb24gdGhlIFJHQkFcbiAqIGNvbG9yIGFuZCBhbHBoYSB2YWx1ZXMgb2YgZXZlcnkgcGl4ZWwgb24geW91ciBkaXNwbGF5T2JqZWN0IHRvIHByb2R1Y2UgYSByZXN1bHRcbiAqIHdpdGggYSBuZXcgc2V0IG9mIFJHQkEgY29sb3IgYW5kIGFscGhhIHZhbHVlcy4gSXQncyBwcmV0dHkgcG93ZXJmdWwhXG4gKlxuICogYGBganNcbiAqICB2YXIgY29sb3JNYXRyaXggPSBuZXcgUElYSS5Db2xvck1hdHJpeEZpbHRlcigpO1xuICogIGNvbnRhaW5lci5maWx0ZXJzID0gW2NvbG9yTWF0cml4XTtcbiAqICBjb2xvck1hdHJpeC5jb250cmFzdCgyKTtcbiAqIGBgYFxuICogQGF1dGhvciBDbMOpbWVudCBDaGVuZWJhdWx0IDxjbGVtZW50QGdvb2Rib3lkaWdpdGFsLmNvbT5cbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5BYnN0cmFjdEZpbHRlclxuICogQG1lbWJlcm9mIFBJWEkuZmlsdGVyc1xuICovXG5mdW5jdGlvbiBDb2xvck1hdHJpeEZpbHRlcigpXG57XG4gICAgY29yZS5BYnN0cmFjdEZpbHRlci5jYWxsKHRoaXMsXG4gICAgICAgIC8vIHZlcnRleCBzaGFkZXJcbiAgICAgICAgbnVsbCxcbiAgICAgICAgLy8gZnJhZ21lbnQgc2hhZGVyXG4gICAgICAgIFwicHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XFxuXFxudmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7XFxudW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXI7XFxudW5pZm9ybSBmbG9hdCBtWzI1XTtcXG5cXG52b2lkIG1haW4odm9pZClcXG57XFxuXFxuICAgIHZlYzQgYyA9IHRleHR1cmUyRCh1U2FtcGxlciwgdlRleHR1cmVDb29yZCk7XFxuXFxuICAgIGdsX0ZyYWdDb2xvci5yID0gKG1bMF0gKiBjLnIpO1xcbiAgICAgICAgZ2xfRnJhZ0NvbG9yLnIgKz0gKG1bMV0gKiBjLmcpO1xcbiAgICAgICAgZ2xfRnJhZ0NvbG9yLnIgKz0gKG1bMl0gKiBjLmIpO1xcbiAgICAgICAgZ2xfRnJhZ0NvbG9yLnIgKz0gKG1bM10gKiBjLmEpO1xcbiAgICAgICAgZ2xfRnJhZ0NvbG9yLnIgKz0gbVs0XTtcXG5cXG4gICAgZ2xfRnJhZ0NvbG9yLmcgPSAobVs1XSAqIGMucik7XFxuICAgICAgICBnbF9GcmFnQ29sb3IuZyArPSAobVs2XSAqIGMuZyk7XFxuICAgICAgICBnbF9GcmFnQ29sb3IuZyArPSAobVs3XSAqIGMuYik7XFxuICAgICAgICBnbF9GcmFnQ29sb3IuZyArPSAobVs4XSAqIGMuYSk7XFxuICAgICAgICBnbF9GcmFnQ29sb3IuZyArPSBtWzldO1xcblxcbiAgICAgZ2xfRnJhZ0NvbG9yLmIgPSAobVsxMF0gKiBjLnIpO1xcbiAgICAgICAgZ2xfRnJhZ0NvbG9yLmIgKz0gKG1bMTFdICogYy5nKTtcXG4gICAgICAgIGdsX0ZyYWdDb2xvci5iICs9IChtWzEyXSAqIGMuYik7XFxuICAgICAgICBnbF9GcmFnQ29sb3IuYiArPSAobVsxM10gKiBjLmEpO1xcbiAgICAgICAgZ2xfRnJhZ0NvbG9yLmIgKz0gbVsxNF07XFxuXFxuICAgICBnbF9GcmFnQ29sb3IuYSA9IChtWzE1XSAqIGMucik7XFxuICAgICAgICBnbF9GcmFnQ29sb3IuYSArPSAobVsxNl0gKiBjLmcpO1xcbiAgICAgICAgZ2xfRnJhZ0NvbG9yLmEgKz0gKG1bMTddICogYy5iKTtcXG4gICAgICAgIGdsX0ZyYWdDb2xvci5hICs9IChtWzE4XSAqIGMuYSk7XFxuICAgICAgICBnbF9GcmFnQ29sb3IuYSArPSBtWzE5XTtcXG5cXG59XFxuXCIsXG4gICAgICAgIC8vIGN1c3RvbSB1bmlmb3Jtc1xuICAgICAgICB7XG4gICAgICAgICAgICBtOiB7XG4gICAgICAgICAgICAgICAgdHlwZTogJzFmdicsIHZhbHVlOiBbXG4gICAgICAgICAgICAgICAgICAgIDEsIDAsIDAsIDAsIDAsXG4gICAgICAgICAgICAgICAgICAgIDAsIDEsIDAsIDAsIDAsXG4gICAgICAgICAgICAgICAgICAgIDAsIDAsIDEsIDAsIDAsXG4gICAgICAgICAgICAgICAgICAgIDAsIDAsIDAsIDEsIDBcbiAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICApO1xufVxuXG5Db2xvck1hdHJpeEZpbHRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuQWJzdHJhY3RGaWx0ZXIucHJvdG90eXBlKTtcbkNvbG9yTWF0cml4RmlsdGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IENvbG9yTWF0cml4RmlsdGVyO1xubW9kdWxlLmV4cG9ydHMgPSBDb2xvck1hdHJpeEZpbHRlcjtcblxuXG4vKipcbiAqIFRyYW5zZm9ybXMgY3VycmVudCBtYXRyaXggYW5kIHNldCB0aGUgbmV3IG9uZVxuICpcbiAqIEBwYXJhbSBtYXRyaXgge251bWJlcltdfSAobWF0IDV4NClcbiAqIEBwYXJhbSBtdWx0aXBseSB7Ym9vbGVhbn0gaWYgdHJ1ZSwgY3VycmVudCBtYXRyaXggYW5kIG1hdHJpeCBhcmUgbXVsdGlwbGllZC4gSWYgZmFsc2UsIGp1c3Qgc2V0IHRoZSBjdXJyZW50IG1hdHJpeCB3aXRoIEBwYXJhbSBtYXRyaXhcbiAqL1xuQ29sb3JNYXRyaXhGaWx0ZXIucHJvdG90eXBlLl9sb2FkTWF0cml4ID0gZnVuY3Rpb24gKG1hdHJpeCwgbXVsdGlwbHkpXG57XG4gICAgbXVsdGlwbHkgPSAhIW11bHRpcGx5O1xuXG4gICAgdmFyIG5ld01hdHJpeCA9IG1hdHJpeDtcblxuICAgIGlmIChtdWx0aXBseSkge1xuICAgICAgICB0aGlzLl9tdWx0aXBseShuZXdNYXRyaXgsIHRoaXMudW5pZm9ybXMubS52YWx1ZSwgbWF0cml4KTtcbiAgICAgICAgbmV3TWF0cml4ID0gdGhpcy5fY29sb3JNYXRyaXgobmV3TWF0cml4KTtcbiAgICB9XG5cbiAgICAvLyBzZXQgdGhlIG5ldyBtYXRyaXhcbiAgICB0aGlzLnVuaWZvcm1zLm0udmFsdWUgPSBuZXdNYXRyaXg7XG59O1xuXG4vKipcbiAqIE11bHRpcGxpZXMgdHdvIG1hdDUnc1xuICpcbiAqIEBwYXJhbSBvdXQge251bWJlcltdfSAobWF0IDV4NCkgdGhlIHJlY2VpdmluZyBtYXRyaXhcbiAqIEBwYXJhbSBhIHtudW1iZXJbXX0gKG1hdCA1eDQpIHRoZSBmaXJzdCBvcGVyYW5kXG4gKiBAcGFyYW0gYiB7bnVtYmVyW119IChtYXQgNXg0KSB0aGUgc2Vjb25kIG9wZXJhbmRcbiAqIEByZXR1cm5zIG91dCB7bnVtYmVyW119IChtYXQgNXg0KVxuICovXG5Db2xvck1hdHJpeEZpbHRlci5wcm90b3R5cGUuX211bHRpcGx5ID0gZnVuY3Rpb24gKG91dCwgYSwgYilcbntcblxuICAgIC8vIFJlZCBDaGFubmVsXG4gICAgb3V0WzBdID0gKGFbMF0gKiBiWzBdKSArIChhWzFdICogYls1XSkgKyAoYVsyXSAqIGJbMTBdKSArIChhWzNdICogYlsxNV0pO1xuICAgIG91dFsxXSA9IChhWzBdICogYlsxXSkgKyAoYVsxXSAqIGJbNl0pICsgKGFbMl0gKiBiWzExXSkgKyAoYVszXSAqIGJbMTZdKTtcbiAgICBvdXRbMl0gPSAoYVswXSAqIGJbMl0pICsgKGFbMV0gKiBiWzddKSArIChhWzJdICogYlsxMl0pICsgKGFbM10gKiBiWzE3XSk7XG4gICAgb3V0WzNdID0gKGFbMF0gKiBiWzNdKSArIChhWzFdICogYls4XSkgKyAoYVsyXSAqIGJbMTNdKSArIChhWzNdICogYlsxOF0pO1xuICAgIG91dFs0XSA9IChhWzBdICogYls0XSkgKyAoYVsxXSAqIGJbOV0pICsgKGFbMl0gKiBiWzE0XSkgKyAoYVszXSAqIGJbMTldKTtcblxuICAgIC8vIEdyZWVuIENoYW5uZWxcbiAgICBvdXRbNV0gPSAoYVs1XSAqIGJbMF0pICsgKGFbNl0gKiBiWzVdKSArIChhWzddICogYlsxMF0pICsgKGFbOF0gKiBiWzE1XSk7XG4gICAgb3V0WzZdID0gKGFbNV0gKiBiWzFdKSArIChhWzZdICogYls2XSkgKyAoYVs3XSAqIGJbMTFdKSArIChhWzhdICogYlsxNl0pO1xuICAgIG91dFs3XSA9IChhWzVdICogYlsyXSkgKyAoYVs2XSAqIGJbN10pICsgKGFbN10gKiBiWzEyXSkgKyAoYVs4XSAqIGJbMTddKTtcbiAgICBvdXRbOF0gPSAoYVs1XSAqIGJbM10pICsgKGFbNl0gKiBiWzhdKSArIChhWzddICogYlsxM10pICsgKGFbOF0gKiBiWzE4XSk7XG4gICAgb3V0WzldID0gKGFbNV0gKiBiWzRdKSArIChhWzZdICogYls5XSkgKyAoYVs3XSAqIGJbMTRdKSArIChhWzhdICogYlsxOV0pO1xuXG4gICAgLy8gQmx1ZSBDaGFubmVsXG4gICAgb3V0WzEwXSA9IChhWzEwXSAqIGJbMF0pICsgKGFbMTFdICogYls1XSkgKyAoYVsxMl0gKiBiWzEwXSkgKyAoYVsxM10gKiBiWzE1XSk7XG4gICAgb3V0WzExXSA9IChhWzEwXSAqIGJbMV0pICsgKGFbMTFdICogYls2XSkgKyAoYVsxMl0gKiBiWzExXSkgKyAoYVsxM10gKiBiWzE2XSk7XG4gICAgb3V0WzEyXSA9IChhWzEwXSAqIGJbMl0pICsgKGFbMTFdICogYls3XSkgKyAoYVsxMl0gKiBiWzEyXSkgKyAoYVsxM10gKiBiWzE3XSk7XG4gICAgb3V0WzEzXSA9IChhWzEwXSAqIGJbM10pICsgKGFbMTFdICogYls4XSkgKyAoYVsxMl0gKiBiWzEzXSkgKyAoYVsxM10gKiBiWzE4XSk7XG4gICAgb3V0WzE0XSA9IChhWzEwXSAqIGJbNF0pICsgKGFbMTFdICogYls5XSkgKyAoYVsxMl0gKiBiWzE0XSkgKyAoYVsxM10gKiBiWzE5XSk7XG5cbiAgICAvLyBBbHBoYSBDaGFubmVsXG4gICAgb3V0WzE1XSA9IChhWzE1XSAqIGJbMF0pICsgKGFbMTZdICogYls1XSkgKyAoYVsxN10gKiBiWzEwXSkgKyAoYVsxOF0gKiBiWzE1XSk7XG4gICAgb3V0WzE2XSA9IChhWzE1XSAqIGJbMV0pICsgKGFbMTZdICogYls2XSkgKyAoYVsxN10gKiBiWzExXSkgKyAoYVsxOF0gKiBiWzE2XSk7XG4gICAgb3V0WzE3XSA9IChhWzE1XSAqIGJbMl0pICsgKGFbMTZdICogYls3XSkgKyAoYVsxN10gKiBiWzEyXSkgKyAoYVsxOF0gKiBiWzE3XSk7XG4gICAgb3V0WzE4XSA9IChhWzE1XSAqIGJbM10pICsgKGFbMTZdICogYls4XSkgKyAoYVsxN10gKiBiWzEzXSkgKyAoYVsxOF0gKiBiWzE4XSk7XG4gICAgb3V0WzE5XSA9IChhWzE1XSAqIGJbNF0pICsgKGFbMTZdICogYls5XSkgKyAoYVsxN10gKiBiWzE0XSkgKyAoYVsxOF0gKiBiWzE5XSk7XG5cbiAgICByZXR1cm4gb3V0O1xufTtcblxuLyoqXG4gKiBDcmVhdGUgYSBGbG9hdDMyIEFycmF5IGFuZCBub3JtYWxpemUgdGhlIG9mZnNldCBjb21wb25lbnQgdG8gMC0xXG4gKlxuICogQHBhcmFtIG1hdHJpeCB7bnVtYmVyW119IChtYXQgNXg0KVxuICogQHJldHVybiBtIHtudW1iZXJbXX0gKG1hdCA1eDQpIHdpdGggYWxsIHZhbHVlcyBiZXR3ZWVuIDAtMVxuICovXG5Db2xvck1hdHJpeEZpbHRlci5wcm90b3R5cGUuX2NvbG9yTWF0cml4ID0gZnVuY3Rpb24gKG1hdHJpeClcbntcbiAgICAvLyBDcmVhdGUgYSBGbG9hdDMyIEFycmF5IGFuZCBub3JtYWxpemUgdGhlIG9mZnNldCBjb21wb25lbnQgdG8gMC0xXG4gICAgdmFyIG0gPSBuZXcgRmxvYXQzMkFycmF5KG1hdHJpeCk7XG4gICAgbVs0XSAvPSAyNTU7XG4gICAgbVs5XSAvPSAyNTU7XG4gICAgbVsxNF0gLz0gMjU1O1xuICAgIG1bMTldIC89IDI1NTtcblxuICAgIHJldHVybiBtO1xufTtcblxuLyoqXG4gKiBBZGp1c3RzIGJyaWdodG5lc3NcbiAqXG4gKiBAcGFyYW0gYiB7bnVtYmVyfSB2YWx1ZSBvZiB0aGUgYnJpZ3RobmVzcyAoMCBpcyBibGFjaylcbiAqIEBwYXJhbSBtdWx0aXBseSB7Ym9vbGVhbn0gcmVmZXIgdG8gLl9sb2FkTWF0cml4KCkgbWV0aG9kXG4gKi9cbkNvbG9yTWF0cml4RmlsdGVyLnByb3RvdHlwZS5icmlnaHRuZXNzID0gZnVuY3Rpb24gKGIsIG11bHRpcGx5KVxue1xuICAgIHZhciBtYXRyaXggPSBbXG4gICAgICAgIGIsIDAsIDAsIDAsIDAsXG4gICAgICAgIDAsIGIsIDAsIDAsIDAsXG4gICAgICAgIDAsIDAsIGIsIDAsIDAsXG4gICAgICAgIDAsIDAsIDAsIDEsIDBcbiAgICBdO1xuXG4gICAgdGhpcy5fbG9hZE1hdHJpeChtYXRyaXgsIG11bHRpcGx5KTtcbn07XG5cbi8qKlxuICogU2V0IHRoZSBtYXRyaWNlcyBpbiBncmV5IHNjYWxlc1xuICpcbiAqIEBwYXJhbSBzY2FsZSB7bnVtYmVyfSB2YWx1ZSBvZiB0aGUgZ3JleSAoMCBpcyBibGFjaylcbiAqIEBwYXJhbSBtdWx0aXBseSB7Ym9vbGVhbn0gcmVmZXIgdG8gLl9sb2FkTWF0cml4KCkgbWV0aG9kXG4gKi9cbkNvbG9yTWF0cml4RmlsdGVyLnByb3RvdHlwZS5ncmV5c2NhbGUgPSBmdW5jdGlvbiAoc2NhbGUsIG11bHRpcGx5KVxue1xuICAgIHZhciBtYXRyaXggPSBbXG4gICAgICAgIHNjYWxlLCBzY2FsZSwgc2NhbGUsIDAsIDAsXG4gICAgICAgIHNjYWxlLCBzY2FsZSwgc2NhbGUsIDAsIDAsXG4gICAgICAgIHNjYWxlLCBzY2FsZSwgc2NhbGUsIDAsIDAsXG4gICAgICAgIDAsIDAsIDAsIDEsIDBcbiAgICBdO1xuXG4gICAgdGhpcy5fbG9hZE1hdHJpeChtYXRyaXgsIG11bHRpcGx5KTtcbn07XG4vL0FtZXJpY2FuaXplZCBhbGlhc1xuQ29sb3JNYXRyaXhGaWx0ZXIucHJvdG90eXBlLmdyYXlzY2FsZSA9IENvbG9yTWF0cml4RmlsdGVyLnByb3RvdHlwZS5ncmV5c2NhbGU7XG5cbi8qKlxuICogU2V0IHRoZSBibGFjayBhbmQgd2hpdGUgbWF0cmljZVxuICogTXVsdGlwbHkgdGhlIGN1cnJlbnQgbWF0cml4XG4gKlxuICogQHBhcmFtIG11bHRpcGx5IHtib29sZWFufSByZWZlciB0byAuX2xvYWRNYXRyaXgoKSBtZXRob2RcbiAqL1xuQ29sb3JNYXRyaXhGaWx0ZXIucHJvdG90eXBlLmJsYWNrQW5kV2hpdGUgPSBmdW5jdGlvbiAobXVsdGlwbHkpXG57XG4gICAgdmFyIG1hdHJpeCA9IFtcbiAgICAgICAgMC4zLCAwLjYsIDAuMSwgMCwgMCxcbiAgICAgICAgMC4zLCAwLjYsIDAuMSwgMCwgMCxcbiAgICAgICAgMC4zLCAwLjYsIDAuMSwgMCwgMCxcbiAgICAgICAgMCwgMCwgMCwgMSwgMFxuICAgIF07XG5cbiAgICB0aGlzLl9sb2FkTWF0cml4KG1hdHJpeCwgbXVsdGlwbHkpO1xufTtcblxuLyoqXG4gKiBTZXQgdGhlIGh1ZSBwcm9wZXJ0eSBvZiB0aGUgY29sb3JcbiAqXG4gKiBAcGFyYW0gcm90YXRpb24ge251bWJlcn0gaW4gZGVncmVlc1xuICogQHBhcmFtIG11bHRpcGx5IHtib29sZWFufSByZWZlciB0byAuX2xvYWRNYXRyaXgoKSBtZXRob2RcbiAqL1xuQ29sb3JNYXRyaXhGaWx0ZXIucHJvdG90eXBlLmh1ZSA9IGZ1bmN0aW9uIChyb3RhdGlvbiwgbXVsdGlwbHkpXG57XG4gICAgcm90YXRpb24gPSAocm90YXRpb24gfHwgMCkgLyAxODAgKiBNYXRoLlBJO1xuICAgIHZhciBjb3MgPSBNYXRoLmNvcyhyb3RhdGlvbiksXG4gICAgICAgIHNpbiA9IE1hdGguc2luKHJvdGF0aW9uKTtcblxuICAgIC8vIGx1bWluYW5jZVJlZCwgbHVtaW5hbmNlR3JlZW4sIGx1bWluYW5jZUJsdWVcbiAgICB2YXIgbHVtUiA9IDAuMjEzLCAvLyBvciAwLjMwODZcbiAgICAgICAgbHVtRyA9IDAuNzE1LCAvLyBvciAwLjYwOTRcbiAgICAgICAgbHVtQiA9IDAuMDcyOyAvLyBvciAwLjA4MjBcblxuICAgIHZhciBtYXRyaXggPSBbXG4gICAgICAgIGx1bVIgKyBjb3MgKiAoMSAtIGx1bVIpICsgc2luICogKC1sdW1SKSwgbHVtRyArIGNvcyAqICgtbHVtRykgKyBzaW4gKiAoLWx1bUcpLCBsdW1CICsgY29zICogKC1sdW1CKSArIHNpbiAqICgxIC0gbHVtQiksIDAsIDAsXG4gICAgICAgIGx1bVIgKyBjb3MgKiAoLWx1bVIpICsgc2luICogKDAuMTQzKSwgbHVtRyArIGNvcyAqICgxIC0gbHVtRykgKyBzaW4gKiAoMC4xNDApLCBsdW1CICsgY29zICogKC1sdW1CKSArIHNpbiAqICgtMC4yODMpLCAwLCAwLFxuICAgICAgICBsdW1SICsgY29zICogKC1sdW1SKSArIHNpbiAqICgtKDEgLSBsdW1SKSksIGx1bUcgKyBjb3MgKiAoLWx1bUcpICsgc2luICogKGx1bUcpLCBsdW1CICsgY29zICogKDEgLSBsdW1CKSArIHNpbiAqIChsdW1CKSwgMCwgMCxcbiAgICAgICAgMCwgMCwgMCwgMSwgMFxuICAgIF07XG5cbiAgICB0aGlzLl9sb2FkTWF0cml4KG1hdHJpeCwgbXVsdGlwbHkpO1xufTtcblxuXG4vKipcbiAqIFNldCB0aGUgY29udHJhc3QgbWF0cml4LCBpbmNyZWFzZSB0aGUgc2VwYXJhdGlvbiBiZXR3ZWVuIGRhcmsgYW5kIGJyaWdodFxuICogSW5jcmVhc2UgY29udHJhc3QgOiBzaGFkb3dzIGRhcmtlciBhbmQgaGlnaGxpZ2h0cyBicmlnaHRlclxuICogRGVjcmVhc2UgY29udHJhc3QgOiBicmluZyB0aGUgc2hhZG93cyB1cCBhbmQgdGhlIGhpZ2hsaWdodHMgZG93blxuICpcbiAqIEBwYXJhbSBhbW91bnQge251bWJlcn0gdmFsdWUgb2YgdGhlIGNvbnRyYXN0XG4gKiBAcGFyYW0gbXVsdGlwbHkge2Jvb2xlYW59IHJlZmVyIHRvIC5fbG9hZE1hdHJpeCgpIG1ldGhvZFxuICovXG5Db2xvck1hdHJpeEZpbHRlci5wcm90b3R5cGUuY29udHJhc3QgPSBmdW5jdGlvbiAoYW1vdW50LCBtdWx0aXBseSlcbntcbiAgICB2YXIgdiA9IChhbW91bnQgfHwgMCkgKyAxO1xuICAgIHZhciBvID0gLTEyOCAqICh2IC0gMSk7XG5cbiAgICB2YXIgbWF0cml4ID0gW1xuICAgICAgICB2LCAwLCAwLCAwLCBvLFxuICAgICAgICAwLCB2LCAwLCAwLCBvLFxuICAgICAgICAwLCAwLCB2LCAwLCBvLFxuICAgICAgICAwLCAwLCAwLCAxLCAwXG4gICAgXTtcblxuICAgIHRoaXMuX2xvYWRNYXRyaXgobWF0cml4LCBtdWx0aXBseSk7XG59O1xuXG4vKipcbiAqIFNldCB0aGUgc2F0dXJhdGlvbiBtYXRyaXgsIGluY3JlYXNlIHRoZSBzZXBhcmF0aW9uIGJldHdlZW4gY29sb3JzXG4gKiBJbmNyZWFzZSBzYXR1cmF0aW9uIDogaW5jcmVhc2UgY29udHJhc3QsIGJyaWdodG5lc3MsIGFuZCBzaGFycG5lc3NcbiAqXG4gKiBAcGFyYW0gYW1vdW50IHtudW1iZXJ9XG4gKiBAcGFyYW0gbXVsdGlwbHkge2Jvb2xlYW59IHJlZmVyIHRvIC5fbG9hZE1hdHJpeCgpIG1ldGhvZFxuICovXG5Db2xvck1hdHJpeEZpbHRlci5wcm90b3R5cGUuc2F0dXJhdGUgPSBmdW5jdGlvbiAoYW1vdW50LCBtdWx0aXBseSlcbntcbiAgICB2YXIgeCA9IChhbW91bnQgfHwgMCkgKiAyIC8gMyArIDE7XG4gICAgdmFyIHkgPSAoKHggLSAxKSAqIC0wLjUpO1xuXG4gICAgdmFyIG1hdHJpeCA9IFtcbiAgICAgICAgeCwgeSwgeSwgMCwgMCxcbiAgICAgICAgeSwgeCwgeSwgMCwgMCxcbiAgICAgICAgeSwgeSwgeCwgMCwgMCxcbiAgICAgICAgMCwgMCwgMCwgMSwgMFxuICAgIF07XG5cbiAgICB0aGlzLl9sb2FkTWF0cml4KG1hdHJpeCwgbXVsdGlwbHkpO1xufTtcblxuLyoqXG4gKiBEZXNhdHVyYXRlIGltYWdlIChyZW1vdmUgY29sb3IpXG4gKlxuICogQ2FsbCB0aGUgc2F0dXJhdGUgZnVuY3Rpb25cbiAqXG4gKiBAcGFyYW0gbXVsdGlwbHkge2Jvb2xlYW59IHJlZmVyIHRvIC5fbG9hZE1hdHJpeCgpIG1ldGhvZFxuICovXG5Db2xvck1hdHJpeEZpbHRlci5wcm90b3R5cGUuZGVzYXR1cmF0ZSA9IGZ1bmN0aW9uIChtdWx0aXBseSkgLy8ganNoaW50IHVudXNlZDpmYWxzZVxue1xuICAgIHRoaXMuc2F0dXJhdGUoLTEpO1xufTtcblxuLyoqXG4gKiBOZWdhdGl2ZSBpbWFnZSAoaW52ZXJzZSBvZiBjbGFzc2ljIHJnYiBtYXRyaXgpXG4gKlxuICogQHBhcmFtIG11bHRpcGx5IHtib29sZWFufSByZWZlciB0byAuX2xvYWRNYXRyaXgoKSBtZXRob2RcbiAqL1xuQ29sb3JNYXRyaXhGaWx0ZXIucHJvdG90eXBlLm5lZ2F0aXZlID0gZnVuY3Rpb24gKG11bHRpcGx5KVxue1xuICAgIHZhciBtYXRyaXggPSBbXG4gICAgICAgIDAsIDEsIDEsIDAsIDAsXG4gICAgICAgIDEsIDAsIDEsIDAsIDAsXG4gICAgICAgIDEsIDEsIDAsIDAsIDAsXG4gICAgICAgIDAsIDAsIDAsIDEsIDBcbiAgICBdO1xuXG4gICAgdGhpcy5fbG9hZE1hdHJpeChtYXRyaXgsIG11bHRpcGx5KTtcbn07XG5cbi8qKlxuICogU2VwaWEgaW1hZ2VcbiAqXG4gKiBAcGFyYW0gbXVsdGlwbHkge2Jvb2xlYW59IHJlZmVyIHRvIC5fbG9hZE1hdHJpeCgpIG1ldGhvZFxuICovXG5Db2xvck1hdHJpeEZpbHRlci5wcm90b3R5cGUuc2VwaWEgPSBmdW5jdGlvbiAobXVsdGlwbHkpXG57XG4gICAgdmFyIG1hdHJpeCA9IFtcbiAgICAgICAgMC4zOTMsIDAuNzY4OTk5OSwgMC4xODg5OTk5OSwgMCwgMCxcbiAgICAgICAgMC4zNDksIDAuNjg1OTk5OSwgMC4xNjc5OTk5OSwgMCwgMCxcbiAgICAgICAgMC4yNzIsIDAuNTMzOTk5OSwgMC4xMzA5OTk5OSwgMCwgMCxcbiAgICAgICAgMCwgMCwgMCwgMSwgMFxuICAgIF07XG5cbiAgICB0aGlzLl9sb2FkTWF0cml4KG1hdHJpeCwgbXVsdGlwbHkpO1xufTtcblxuLyoqXG4gKiBDb2xvciBtb3Rpb24gcGljdHVyZSBwcm9jZXNzIGludmVudGVkIGluIDE5MTYgKHRoYW5rcyBEb21pbmljIFN6YWJsZXdza2kpXG4gKlxuICogQHBhcmFtIG11bHRpcGx5IHtib29sZWFufSByZWZlciB0byAuX2xvYWRNYXRyaXgoKSBtZXRob2RcbiAqL1xuQ29sb3JNYXRyaXhGaWx0ZXIucHJvdG90eXBlLnRlY2huaWNvbG9yID0gZnVuY3Rpb24gKG11bHRpcGx5KVxue1xuICAgIHZhciBtYXRyaXggPSBbXG4gICAgICAgIDEuOTEyNTI3Nzg5MTQ1NjA4MywgLTAuODU0NTM0NDk3Njk1MTY0NSwgLTAuMDkxNTU1MDg0ODI3NTU1ODUsIDAsIDExLjc5MzYwMzQzNDM3NzMzNyxcbiAgICAgICAgLTAuMzA4NzgzMzM4NTkyODA5NywgMS43NjU4OTA4NTU1NDU4NDI4LCAtMC4xMDYwMTc0MzA3NDcyMjI0NSwgMCwgLTcwLjM1MjA1MTYxNDYxMzk4LFxuICAgICAgICAtMC4yMzExMDMzNzc1NDg2MTYsIC0wLjc1MDE4OTkxOTc0NDAyMTIsIDEuODQ3NTk3ODE2MTA4MTg5LCAwLCAzMC45NTA5NDA4Njk0OTExMzgsXG4gICAgICAgIDAsIDAsIDAsIDEsIDBcbiAgICBdO1xuXG4gICAgdGhpcy5fbG9hZE1hdHJpeChtYXRyaXgsIG11bHRpcGx5KTtcbn07XG5cbi8qKlxuICogUG9sYXJvaWQgZmlsdGVyXG4gKlxuICogQHBhcmFtIG11bHRpcGx5IHtib29sZWFufSByZWZlciB0byAuX2xvYWRNYXRyaXgoKSBtZXRob2RcbiAqL1xuQ29sb3JNYXRyaXhGaWx0ZXIucHJvdG90eXBlLnBvbGFyb2lkID0gZnVuY3Rpb24gKG11bHRpcGx5KVxue1xuICAgIHZhciBtYXRyaXggPSBbXG4gICAgICAgIDEuNDM4LCAtMC4wNjIsIC0wLjA2MiwgMCwgMCxcbiAgICAgICAgLTAuMTIyLCAxLjM3OCwgLTAuMTIyLCAwLCAwLFxuICAgICAgICAtMC4wMTYsIC0wLjAxNiwgMS40ODMsIDAsIDAsXG4gICAgICAgIDAsIDAsIDAsIDEsIDBcbiAgICBdO1xuXG4gICAgdGhpcy5fbG9hZE1hdHJpeChtYXRyaXgsIG11bHRpcGx5KTtcbn07XG5cbi8qKlxuICogRmlsdGVyIHdobyB0cmFuc2Zvcm1zIDogUmVkIC0+IEJsdWUgYW5kIEJsdWUgLT4gUmVkXG4gKlxuICogQHBhcmFtIG11bHRpcGx5IHtib29sZWFufSByZWZlciB0byAuX2xvYWRNYXRyaXgoKSBtZXRob2RcbiAqL1xuQ29sb3JNYXRyaXhGaWx0ZXIucHJvdG90eXBlLnRvQkdSID0gZnVuY3Rpb24gKG11bHRpcGx5KVxue1xuICAgIHZhciBtYXRyaXggPSBbXG4gICAgICAgIDAsIDAsIDEsIDAsIDAsXG4gICAgICAgIDAsIDEsIDAsIDAsIDAsXG4gICAgICAgIDEsIDAsIDAsIDAsIDAsXG4gICAgICAgIDAsIDAsIDAsIDEsIDBcbiAgICBdO1xuXG4gICAgdGhpcy5fbG9hZE1hdHJpeChtYXRyaXgsIG11bHRpcGx5KTtcbn07XG5cbi8qKlxuICogQ29sb3IgcmV2ZXJzYWwgZmlsbSBpbnRyb2R1Y2VkIGJ5IEVhc3RtYW4gS29kYWsgaW4gMTkzNS4gKHRoYW5rcyBEb21pbmljIFN6YWJsZXdza2kpXG4gKlxuICogQHBhcmFtIG11bHRpcGx5IHtib29sZWFufSByZWZlciB0byAuX2xvYWRNYXRyaXgoKSBtZXRob2RcbiAqL1xuQ29sb3JNYXRyaXhGaWx0ZXIucHJvdG90eXBlLmtvZGFjaHJvbWUgPSBmdW5jdGlvbiAobXVsdGlwbHkpXG57XG4gICAgdmFyIG1hdHJpeCA9IFtcbiAgICAgICAgMS4xMjg1NTgyMzk2NTkzNTI1LCAtMC4zOTY3MzgyMjgzNjAxMzQ4LCAtMC4wMzk5MjU1OTE3MjkyMTc5MywgMCwgNjMuNzI5NTg3NjIxOTY1MDIsXG4gICAgICAgIC0wLjE2NDA0MzM5OTYyMjQ0NjE2LCAxLjA4MzUyNTE1NjYyOTEzMDQsIC0wLjA1NDk4ODA1MTE1NjMzMTMyLCAwLCAyNC43MzI0MDc4OTY3MDYyMDMsXG4gICAgICAgIC0wLjE2Nzg2MDEwNzA2MTU1NzYzLCAtMC41NjAzNDE2Mjc3Njk1MjQ4LCAxLjYwMTQ4NTA3NjE5NjQ5NDMsIDAsIDM1LjYyOTgyODA3NDYwOTQ2LFxuICAgICAgICAwLCAwLCAwLCAxLCAwXG4gICAgXTtcblxuICAgIHRoaXMuX2xvYWRNYXRyaXgobWF0cml4LCBtdWx0aXBseSk7XG59O1xuXG4vKipcbiAqIEJyb3duIGRlbGljaW91cyBicm93bmkgZmlsdGVyICh0aGFua3MgRG9taW5pYyBTemFibGV3c2tpKVxuICpcbiAqIEBwYXJhbSBtdWx0aXBseSB7Ym9vbGVhbn0gcmVmZXIgdG8gLl9sb2FkTWF0cml4KCkgbWV0aG9kXG4gKi9cbkNvbG9yTWF0cml4RmlsdGVyLnByb3RvdHlwZS5icm93bmkgPSBmdW5jdGlvbiAobXVsdGlwbHkpXG57XG4gICAgdmFyIG1hdHJpeCA9IFtcbiAgICAgICAgMC41OTk3MDIzNDk4MTU5NzE1LCAwLjM0NTUzMjQzMDQ4MzkxMjYzLCAtMC4yNzA4Mjk4Njc0NTM4MDQyLCAwLCA0Ny40MzE5Mjg1NTYwMDg3MyxcbiAgICAgICAgLTAuMDM3NzAzMjQ5ODM3NzgzMTU3LCAwLjg2MDk1Nzc1ODc5OTI2NDEsIDAuMTUwNTk1NTIzODg0NTk5MTMsIDAsIC0zNi45Njg0MTQ5ODMxOTEyNyxcbiAgICAgICAgMC4yNDExMzYzNTEyODE1MzMzNSwgLTAuMDc0NDEwMzc5MDg0MjI0OTIsIDAuNDQ5NzIxODIwNjQ4NzcxNTMsIDAsIC03LjU2MjA3NTI3NzU5MTI4MyxcbiAgICAgICAgMCwgMCwgMCwgMSwgMFxuICAgIF07XG5cbiAgICB0aGlzLl9sb2FkTWF0cml4KG1hdHJpeCwgbXVsdGlwbHkpO1xufTtcblxuLypcbiAqIFZpbnRhZ2UgZmlsdGVyICh0aGFua3MgRG9taW5pYyBTemFibGV3c2tpKVxuICpcbiAqIEBwYXJhbSBtdWx0aXBseSB7Ym9vbGVhbn0gcmVmZXIgdG8gLl9sb2FkTWF0cml4KCkgbWV0aG9kXG4gKi9cbkNvbG9yTWF0cml4RmlsdGVyLnByb3RvdHlwZS52aW50YWdlID0gZnVuY3Rpb24gKG11bHRpcGx5KVxue1xuICAgIHZhciBtYXRyaXggPSBbXG4gICAgICAgIDAuNjI3OTM0NTYzNTYwNTk5NCwgMC4zMjAyMTgzNDIwODE5MzY3LCAtMC4wMzk2NTQwODIxMTMxMjQ1MywgMCwgOS42NTEyODU4MzUyOTQxMjMsXG4gICAgICAgIDAuMDI1NzgzOTc3MDQ4MDg4NjgsIDAuNjQ0MTE4ODY0NDM3NDc3MSwgMC4wMzI1OTEyNzYxNjE0OTI5NCwgMCwgNy40NjI4MjkxNzY0NzA1OTEsXG4gICAgICAgIDAuMDQ2NjA1NTU1Njc4MjcxOSwgLTAuMDg1MTIzMjk4NzI0Nzg5MSwgMC41MjQxNjQ4MDE4NzAwNDY1LCAwLCA1LjE1OTE5MDU4ODIzNTI5NixcbiAgICAgICAgMCwgMCwgMCwgMSwgMFxuICAgIF07XG5cbiAgICB0aGlzLl9sb2FkTWF0cml4KG1hdHJpeCwgbXVsdGlwbHkpO1xufTtcblxuLypcbiAqIFdlIGRvbid0IGtub3cgZXhhY3RseSB3aGF0IGl0IGRvZXMsIGtpbmQgb2YgZ3JhZGllbnQgbWFwLCBidXQgZnVubnkgdG8gcGxheSB3aXRoIVxuICpcbiAqIEBwYXJhbSBkZXNhdHVyYXRpb24ge251bWJlcn1cbiAqIEBwYXJhbSB0b25lZCB7bnVtYmVyfVxuICogQHBhcmFtIGxpZ2h0Q29sb3Ige3N0cmluZ30gKGV4YW1wbGUgOiBcIjB4RkZFNTgwXCIpXG4gKiBAcGFyYW0gZGFya0NvbG9yIHtzdHJpbmd9ICAoZXhhbXBsZSA6IFwiMHhGRkU1ODBcIilcbiAqXG4gKiBAcGFyYW0gbXVsdGlwbHkge2Jvb2xlYW59IHJlZmVyIHRvIC5fbG9hZE1hdHJpeCgpIG1ldGhvZFxuICovXG5Db2xvck1hdHJpeEZpbHRlci5wcm90b3R5cGUuY29sb3JUb25lID0gZnVuY3Rpb24gKGRlc2F0dXJhdGlvbiwgdG9uZWQsIGxpZ2h0Q29sb3IsIGRhcmtDb2xvciwgbXVsdGlwbHkpXG57XG4gICAgZGVzYXR1cmF0aW9uID0gZGVzYXR1cmF0aW9uIHx8IDAuMjtcbiAgICB0b25lZCA9IHRvbmVkIHx8IDAuMTU7XG4gICAgbGlnaHRDb2xvciA9IGxpZ2h0Q29sb3IgfHwgMHhGRkU1ODA7XG4gICAgZGFya0NvbG9yID0gZGFya0NvbG9yIHx8IDB4MzM4MDAwO1xuXG4gICAgdmFyIGxSID0gKChsaWdodENvbG9yID4+IDE2KSAmIDB4RkYpIC8gMjU1O1xuICAgIHZhciBsRyA9ICgobGlnaHRDb2xvciA+PiA4KSAmIDB4RkYpIC8gMjU1O1xuICAgIHZhciBsQiA9IChsaWdodENvbG9yICYgMHhGRikgLyAyNTU7XG5cbiAgICB2YXIgZFIgPSAoKGRhcmtDb2xvciA+PiAxNikgJiAweEZGKSAvIDI1NTtcbiAgICB2YXIgZEcgPSAoKGRhcmtDb2xvciA+PiA4KSAmIDB4RkYpIC8gMjU1O1xuICAgIHZhciBkQiA9IChkYXJrQ29sb3IgJiAweEZGKSAvIDI1NTtcblxuICAgIHZhciBtYXRyaXggPSBbXG4gICAgICAgIDAuMywgMC41OSwgMC4xMSwgMCwgMCxcbiAgICAgICAgbFIsIGxHLCBsQiwgZGVzYXR1cmF0aW9uLCAwLFxuICAgICAgICBkUiwgZEcsIGRCLCB0b25lZCwgMCxcbiAgICAgICAgbFIgLSBkUiwgbEcgLSBkRywgbEIgLSBkQiwgMCwgMFxuICAgIF07XG5cbiAgICB0aGlzLl9sb2FkTWF0cml4KG1hdHJpeCwgbXVsdGlwbHkpO1xufTtcblxuLypcbiAqIE5pZ2h0IGVmZmVjdFxuICpcbiAqIEBwYXJhbSBpbnRlbnNpdHkge251bWJlcn1cbiAqIEBwYXJhbSBtdWx0aXBseSB7Ym9vbGVhbn0gcmVmZXIgdG8gLl9sb2FkTWF0cml4KCkgbWV0aG9kXG4gKi9cbkNvbG9yTWF0cml4RmlsdGVyLnByb3RvdHlwZS5uaWdodCA9IGZ1bmN0aW9uIChpbnRlbnNpdHksIG11bHRpcGx5KVxue1xuICAgIGludGVuc2l0eSA9IGludGVuc2l0eSB8fCAwLjE7XG4gICAgdmFyIG1hdHJpeCA9IFtcbiAgICAgICAgaW50ZW5zaXR5ICogKCAtMi4wKSwgLWludGVuc2l0eSwgMCwgMCwgMCxcbiAgICAgICAgLWludGVuc2l0eSwgMCwgaW50ZW5zaXR5LCAwLCAwLFxuICAgICAgICAwLCBpbnRlbnNpdHksIGludGVuc2l0eSAqIDIuMCwgMCwgMCxcbiAgICAgICAgMCwgMCwgMCwgMSwgMFxuICAgIF07XG5cbiAgICB0aGlzLl9sb2FkTWF0cml4KG1hdHJpeCwgbXVsdGlwbHkpO1xufTtcblxuXG4vKlxuICogUHJlZGF0b3IgZWZmZWN0XG4gKlxuICogRXJhc2UgdGhlIGN1cnJlbnQgbWF0cml4IGJ5IHNldHRpbmcgYSBuZXcgaW5kZXBlbnQgb25lXG4gKlxuICogQHBhcmFtIGFtb3VudCB7bnVtYmVyfSBob3cgbXVjaCB0aGUgcHJlZGF0b3IgZmVlbHMgaGlzIGZ1dHVyZSB2aWN0aW1cbiAqIEBwYXJhbSBtdWx0aXBseSB7Ym9vbGVhbn0gcmVmZXIgdG8gLl9sb2FkTWF0cml4KCkgbWV0aG9kXG4gKi9cbkNvbG9yTWF0cml4RmlsdGVyLnByb3RvdHlwZS5wcmVkYXRvciA9IGZ1bmN0aW9uIChhbW91bnQsIG11bHRpcGx5KVxue1xuICAgIHZhciBtYXRyaXggPSBbXG4gICAgICAgIDExLjIyNDEzMDYzMDQ5MzE2NCAqIGFtb3VudCwgLTQuNzk0NDg2OTk5NTExNzE5ICogYW1vdW50LCAtMi44NzQ2MTE4NTQ1NTMyMjI3ICogYW1vdW50LCAwICogYW1vdW50LCAwLjQwMzQyNDM4MjIwOTc3NzgzICogYW1vdW50LFxuICAgICAgICAtMy42MzMwNjk3NTM2NDY4NTA2ICogYW1vdW50LCA5LjE5MzE1NzE5NjA0NDkyMiAqIGFtb3VudCwgLTIuOTUxODEwODM2NzkxOTkyICogYW1vdW50LCAwICogYW1vdW50LCAtMS4zMTYxMzUwNDg4NjYyNzIgKiBhbW91bnQsXG4gICAgICAgIC0zLjIxODQxOTc5MDI2Nzk0NDMgKiBhbW91bnQsIC00LjIzNzUwMzA1MTc1NzgxMjUgKiBhbW91bnQsIDcuNDc2NDQ4MDU5MDgyMDMxICogYW1vdW50LCAwICogYW1vdW50LCAwLjgwNDQ0NTkyMjM3NDcyNTMgKiBhbW91bnQsXG4gICAgICAgIDAsIDAsIDAsIDEsIDBcbiAgICBdO1xuXG4gICAgdGhpcy5fbG9hZE1hdHJpeChtYXRyaXgsIG11bHRpcGx5KTtcbn07XG5cbi8qXG4gKiBMU0QgZWZmZWN0XG4gKlxuICogTXVsdGlwbHkgdGhlIGN1cnJlbnQgbWF0cml4XG4gKlxuICogQHBhcmFtIGFtb3VudCB7bnVtYmVyfSBIb3cgY3JhenkgaXMgeW91ciBlZmZlY3RcbiAqIEBwYXJhbSBtdWx0aXBseSB7Ym9vbGVhbn0gcmVmZXIgdG8gLl9sb2FkTWF0cml4KCkgbWV0aG9kXG4gKi9cbkNvbG9yTWF0cml4RmlsdGVyLnByb3RvdHlwZS5sc2QgPSBmdW5jdGlvbiAobXVsdGlwbHkpXG57XG4gICAgdmFyIG1hdHJpeCA9IFtcbiAgICAgICAgMiwgLTAuNCwgMC41LCAwLCAwLFxuICAgICAgICAtMC41LCAyLCAtMC40LCAwLCAwLFxuICAgICAgICAtMC40LCAtMC41LCAzLCAwLCAwLFxuICAgICAgICAwLCAwLCAwLCAxLCAwXG4gICAgXTtcblxuICAgIHRoaXMuX2xvYWRNYXRyaXgobWF0cml4LCBtdWx0aXBseSk7XG59O1xuXG4vKlxuICogRXJhc2UgdGhlIGN1cnJlbnQgbWF0cml4IGJ5IHNldHRpbmcgdGhlIGRlZmF1bHQgb25lXG4gKlxuICovXG5Db2xvck1hdHJpeEZpbHRlci5wcm90b3R5cGUucmVzZXQgPSBmdW5jdGlvbiAoKVxue1xuICAgIHZhciBtYXRyaXggPSBbXG4gICAgICAgIDEsIDAsIDAsIDAsIDAsXG4gICAgICAgIDAsIDEsIDAsIDAsIDAsXG4gICAgICAgIDAsIDAsIDEsIDAsIDAsXG4gICAgICAgIDAsIDAsIDAsIDEsIDBcbiAgICBdO1xuXG4gICAgdGhpcy5fbG9hZE1hdHJpeChtYXRyaXgsIGZhbHNlKTtcbn07XG5cblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoQ29sb3JNYXRyaXhGaWx0ZXIucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgbWF0cml4IG9mIHRoZSBjb2xvciBtYXRyaXggZmlsdGVyXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJbXX1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLkNvbG9yTWF0cml4RmlsdGVyI1xuICAgICAqIEBkZWZhdWx0IFsxLCAwLCAwLCAwLCAwLCAwLCAxLCAwLCAwLCAwLCAwLCAwLCAxLCAwLCAwLCAwLCAwLCAwLCAxLCAwXVxuICAgICAqL1xuICAgIG1hdHJpeDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVuaWZvcm1zLm0udmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLm0udmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi8uLi9jb3JlJyk7XG4vLyBAc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9zdWJzdGFjay9icmZzL2lzc3Vlcy8yNVxuXG5cbi8qKlxuICogVGhpcyBsb3dlcnMgdGhlIGNvbG9yIGRlcHRoIG9mIHlvdXIgaW1hZ2UgYnkgdGhlIGdpdmVuIGFtb3VudCwgcHJvZHVjaW5nIGFuIGltYWdlIHdpdGggYSBzbWFsbGVyIHBhbGV0dGUuXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLkFic3RyYWN0RmlsdGVyXG4gKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzXG4gKi9cbmZ1bmN0aW9uIENvbG9yU3RlcEZpbHRlcigpXG57XG4gICAgY29yZS5BYnN0cmFjdEZpbHRlci5jYWxsKHRoaXMsXG4gICAgICAgIC8vIHZlcnRleCBzaGFkZXJcbiAgICAgICAgbnVsbCxcbiAgICAgICAgLy8gZnJhZ21lbnQgc2hhZGVyXG4gICAgICAgIFwicHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XFxuXFxudmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7XFxuXFxudW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXI7XFxudW5pZm9ybSBmbG9hdCBzdGVwO1xcblxcbnZvaWQgbWFpbih2b2lkKVxcbntcXG4gICAgdmVjNCBjb2xvciA9IHRleHR1cmUyRCh1U2FtcGxlciwgdlRleHR1cmVDb29yZCk7XFxuXFxuICAgIGNvbG9yID0gZmxvb3IoY29sb3IgKiBzdGVwKSAvIHN0ZXA7XFxuXFxuICAgIGdsX0ZyYWdDb2xvciA9IGNvbG9yO1xcbn1cXG5cIixcbiAgICAgICAgLy8gY3VzdG9tIHVuaWZvcm1zXG4gICAgICAgIHtcbiAgICAgICAgICAgIHN0ZXA6IHsgdHlwZTogJzFmJywgdmFsdWU6IDUgfVxuICAgICAgICB9XG4gICAgKTtcbn1cblxuQ29sb3JTdGVwRmlsdGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoY29yZS5BYnN0cmFjdEZpbHRlci5wcm90b3R5cGUpO1xuQ29sb3JTdGVwRmlsdGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IENvbG9yU3RlcEZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gQ29sb3JTdGVwRmlsdGVyO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhDb2xvclN0ZXBGaWx0ZXIucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogVGhlIG51bWJlciBvZiBzdGVwcyB0byByZWR1Y2UgdGhlIHBhbGV0dGUgYnkuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5Db2xvclN0ZXBGaWx0ZXIjXG4gICAgICovXG4gICAgc3RlcDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVuaWZvcm1zLnN0ZXAudmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLnN0ZXAudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi8uLi9jb3JlJyk7XG4vLyBAc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9zdWJzdGFjay9icmZzL2lzc3Vlcy8yNVxuXG5cbi8qKlxuICogVGhlIENvbnZvbHV0aW9uRmlsdGVyIGNsYXNzIGFwcGxpZXMgYSBtYXRyaXggY29udm9sdXRpb24gZmlsdGVyIGVmZmVjdC5cbiAqIEEgY29udm9sdXRpb24gY29tYmluZXMgcGl4ZWxzIGluIHRoZSBpbnB1dCBpbWFnZSB3aXRoIG5laWdoYm9yaW5nIHBpeGVscyB0byBwcm9kdWNlIGEgbmV3IGltYWdlLlxuICogQSB3aWRlIHZhcmlldHkgb2YgaW1hZ2UgZWZmZWN0cyBjYW4gYmUgYWNoaWV2ZWQgdGhyb3VnaCBjb252b2x1dGlvbnMsIGluY2x1ZGluZyBibHVycmluZywgZWRnZVxuICogZGV0ZWN0aW9uLCBzaGFycGVuaW5nLCBlbWJvc3NpbmcsIGFuZCBiZXZlbGluZy4gVGhlIG1hdHJpeCBzaG91bGQgYmUgc3BlY2lmaWVkIGFzIGEgOSBwb2ludCBBcnJheS5cbiAqIFNlZSBodHRwOi8vZG9jcy5naW1wLm9yZy9lbi9wbHVnLWluLWNvbnZtYXRyaXguaHRtbCBmb3IgbW9yZSBpbmZvLlxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5BYnN0cmFjdEZpbHRlclxuICogQG1lbWJlcm9mIFBJWEkuZmlsdGVyc1xuICogQHBhcmFtIG1hdHJpeCB7bnVtYmVyW119IEFuIGFycmF5IG9mIHZhbHVlcyB1c2VkIGZvciBtYXRyaXggdHJhbnNmb3JtYXRpb24uIFNwZWNpZmllZCBhcyBhIDkgcG9pbnQgQXJyYXkuXG4gKiBAcGFyYW0gd2lkdGgge251bWJlcn0gV2lkdGggb2YgdGhlIG9iamVjdCB5b3UgYXJlIHRyYW5zZm9ybWluZ1xuICogQHBhcmFtIGhlaWdodCB7bnVtYmVyfSBIZWlnaHQgb2YgdGhlIG9iamVjdCB5b3UgYXJlIHRyYW5zZm9ybWluZ1xuICovXG5mdW5jdGlvbiBDb252b2x1dGlvbkZpbHRlcihtYXRyaXgsIHdpZHRoLCBoZWlnaHQpXG57XG4gICAgY29yZS5BYnN0cmFjdEZpbHRlci5jYWxsKHRoaXMsXG4gICAgICAgIC8vIHZlcnRleCBzaGFkZXJcbiAgICAgICAgbnVsbCxcbiAgICAgICAgLy8gZnJhZ21lbnQgc2hhZGVyXG4gICAgICAgIFwicHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XFxuXFxudmFyeWluZyBtZWRpdW1wIHZlYzIgdlRleHR1cmVDb29yZDtcXG5cXG51bmlmb3JtIHNhbXBsZXIyRCB1U2FtcGxlcjtcXG51bmlmb3JtIHZlYzIgdGV4ZWxTaXplO1xcbnVuaWZvcm0gZmxvYXQgbWF0cml4WzldO1xcblxcbnZvaWQgbWFpbih2b2lkKVxcbntcXG4gICB2ZWM0IGMxMSA9IHRleHR1cmUyRCh1U2FtcGxlciwgdlRleHR1cmVDb29yZCAtIHRleGVsU2l6ZSk7IC8vIHRvcCBsZWZ0XFxuICAgdmVjNCBjMTIgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZlYzIodlRleHR1cmVDb29yZC54LCB2VGV4dHVyZUNvb3JkLnkgLSB0ZXhlbFNpemUueSkpOyAvLyB0b3AgY2VudGVyXFxuICAgdmVjNCBjMTMgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZlYzIodlRleHR1cmVDb29yZC54ICsgdGV4ZWxTaXplLngsIHZUZXh0dXJlQ29vcmQueSAtIHRleGVsU2l6ZS55KSk7IC8vIHRvcCByaWdodFxcblxcbiAgIHZlYzQgYzIxID0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2ZWMyKHZUZXh0dXJlQ29vcmQueCAtIHRleGVsU2l6ZS54LCB2VGV4dHVyZUNvb3JkLnkpKTsgLy8gbWlkIGxlZnRcXG4gICB2ZWM0IGMyMiA9IHRleHR1cmUyRCh1U2FtcGxlciwgdlRleHR1cmVDb29yZCk7IC8vIG1pZCBjZW50ZXJcXG4gICB2ZWM0IGMyMyA9IHRleHR1cmUyRCh1U2FtcGxlciwgdmVjMih2VGV4dHVyZUNvb3JkLnggKyB0ZXhlbFNpemUueCwgdlRleHR1cmVDb29yZC55KSk7IC8vIG1pZCByaWdodFxcblxcbiAgIHZlYzQgYzMxID0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2ZWMyKHZUZXh0dXJlQ29vcmQueCAtIHRleGVsU2l6ZS54LCB2VGV4dHVyZUNvb3JkLnkgKyB0ZXhlbFNpemUueSkpOyAvLyBib3R0b20gbGVmdFxcbiAgIHZlYzQgYzMyID0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2ZWMyKHZUZXh0dXJlQ29vcmQueCwgdlRleHR1cmVDb29yZC55ICsgdGV4ZWxTaXplLnkpKTsgLy8gYm90dG9tIGNlbnRlclxcbiAgIHZlYzQgYzMzID0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2VGV4dHVyZUNvb3JkICsgdGV4ZWxTaXplKTsgLy8gYm90dG9tIHJpZ2h0XFxuXFxuICAgZ2xfRnJhZ0NvbG9yID1cXG4gICAgICAgYzExICogbWF0cml4WzBdICsgYzEyICogbWF0cml4WzFdICsgYzEzICogbWF0cml4WzJdICtcXG4gICAgICAgYzIxICogbWF0cml4WzNdICsgYzIyICogbWF0cml4WzRdICsgYzIzICogbWF0cml4WzVdICtcXG4gICAgICAgYzMxICogbWF0cml4WzZdICsgYzMyICogbWF0cml4WzddICsgYzMzICogbWF0cml4WzhdO1xcblxcbiAgIGdsX0ZyYWdDb2xvci5hID0gYzIyLmE7XFxufVxcblwiLFxuICAgICAgICAvLyBjdXN0b20gdW5pZm9ybXNcbiAgICAgICAge1xuICAgICAgICAgICAgbWF0cml4OiAgICAgeyB0eXBlOiAnMWZ2JywgdmFsdWU6IG5ldyBGbG9hdDMyQXJyYXkobWF0cml4KSB9LFxuICAgICAgICAgICAgdGV4ZWxTaXplOiAgeyB0eXBlOiAndjInLCB2YWx1ZTogeyB4OiAxIC8gd2lkdGgsIHk6IDEgLyBoZWlnaHQgfSB9XG4gICAgICAgIH1cbiAgICApO1xufVxuXG5Db252b2x1dGlvbkZpbHRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuQWJzdHJhY3RGaWx0ZXIucHJvdG90eXBlKTtcbkNvbnZvbHV0aW9uRmlsdGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IENvbnZvbHV0aW9uRmlsdGVyO1xubW9kdWxlLmV4cG9ydHMgPSBDb252b2x1dGlvbkZpbHRlcjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoQ29udm9sdXRpb25GaWx0ZXIucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogQW4gYXJyYXkgb2YgdmFsdWVzIHVzZWQgZm9yIG1hdHJpeCB0cmFuc2Zvcm1hdGlvbi4gU3BlY2lmaWVkIGFzIGEgOSBwb2ludCBBcnJheS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcltdfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuQ29udm9sdXRpb25GaWx0ZXIjXG4gICAgICovXG4gICAgbWF0cml4OiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudW5pZm9ybXMubWF0cml4LnZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy5tYXRyaXgudmFsdWUgPSBuZXcgRmxvYXQzMkFycmF5KHZhbHVlKTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBXaWR0aCBvZiB0aGUgb2JqZWN0IHlvdSBhcmUgdHJhbnNmb3JtaW5nXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5Db252b2x1dGlvbkZpbHRlciNcbiAgICAgKi9cbiAgICB3aWR0aDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiAxL3RoaXMudW5pZm9ybXMudGV4ZWxTaXplLnZhbHVlLng7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLnRleGVsU2l6ZS52YWx1ZS54ID0gMS92YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBIZWlnaHQgb2YgdGhlIG9iamVjdCB5b3UgYXJlIHRyYW5zZm9ybWluZ1xuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuQ29udm9sdXRpb25GaWx0ZXIjXG4gICAgICovXG4gICAgaGVpZ2h0OiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIDEvdGhpcy51bmlmb3Jtcy50ZXhlbFNpemUudmFsdWUueTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudW5pZm9ybXMudGV4ZWxTaXplLnZhbHVlLnkgPSAxL3ZhbHVlO1xuICAgICAgICB9XG4gICAgfVxufSk7XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uLy4uL2NvcmUnKTtcbi8vIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL3N1YnN0YWNrL2JyZnMvaXNzdWVzLzI1XG5cblxuLyoqXG4gKiBBIENyb3NzIEhhdGNoIGVmZmVjdCBmaWx0ZXIuXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLkFic3RyYWN0RmlsdGVyXG4gKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzXG4gKi9cbmZ1bmN0aW9uIENyb3NzSGF0Y2hGaWx0ZXIoKVxue1xuICAgIGNvcmUuQWJzdHJhY3RGaWx0ZXIuY2FsbCh0aGlzLFxuICAgICAgICAvLyB2ZXJ0ZXggc2hhZGVyXG4gICAgICAgIG51bGwsXG4gICAgICAgIC8vIGZyYWdtZW50IHNoYWRlclxuICAgICAgICBcInByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xcblxcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xcblxcbnVuaWZvcm0gc2FtcGxlcjJEIHVTYW1wbGVyO1xcblxcbnZvaWQgbWFpbih2b2lkKVxcbntcXG4gICAgZmxvYXQgbHVtID0gbGVuZ3RoKHRleHR1cmUyRCh1U2FtcGxlciwgdlRleHR1cmVDb29yZC54eSkucmdiKTtcXG5cXG4gICAgZ2xfRnJhZ0NvbG9yID0gdmVjNCgxLjAsIDEuMCwgMS4wLCAxLjApO1xcblxcbiAgICBpZiAobHVtIDwgMS4wMClcXG4gICAge1xcbiAgICAgICAgaWYgKG1vZChnbF9GcmFnQ29vcmQueCArIGdsX0ZyYWdDb29yZC55LCAxMC4wKSA9PSAwLjApXFxuICAgICAgICB7XFxuICAgICAgICAgICAgZ2xfRnJhZ0NvbG9yID0gdmVjNCgwLjAsIDAuMCwgMC4wLCAxLjApO1xcbiAgICAgICAgfVxcbiAgICB9XFxuXFxuICAgIGlmIChsdW0gPCAwLjc1KVxcbiAgICB7XFxuICAgICAgICBpZiAobW9kKGdsX0ZyYWdDb29yZC54IC0gZ2xfRnJhZ0Nvb3JkLnksIDEwLjApID09IDAuMClcXG4gICAgICAgIHtcXG4gICAgICAgICAgICBnbF9GcmFnQ29sb3IgPSB2ZWM0KDAuMCwgMC4wLCAwLjAsIDEuMCk7XFxuICAgICAgICB9XFxuICAgIH1cXG5cXG4gICAgaWYgKGx1bSA8IDAuNTApXFxuICAgIHtcXG4gICAgICAgIGlmIChtb2QoZ2xfRnJhZ0Nvb3JkLnggKyBnbF9GcmFnQ29vcmQueSAtIDUuMCwgMTAuMCkgPT0gMC4wKVxcbiAgICAgICAge1xcbiAgICAgICAgICAgIGdsX0ZyYWdDb2xvciA9IHZlYzQoMC4wLCAwLjAsIDAuMCwgMS4wKTtcXG4gICAgICAgIH1cXG4gICAgfVxcblxcbiAgICBpZiAobHVtIDwgMC4zKVxcbiAgICB7XFxuICAgICAgICBpZiAobW9kKGdsX0ZyYWdDb29yZC54IC0gZ2xfRnJhZ0Nvb3JkLnkgLSA1LjAsIDEwLjApID09IDAuMClcXG4gICAgICAgIHtcXG4gICAgICAgICAgICBnbF9GcmFnQ29sb3IgPSB2ZWM0KDAuMCwgMC4wLCAwLjAsIDEuMCk7XFxuICAgICAgICB9XFxuICAgIH1cXG59XFxuXCJcbiAgICApO1xufVxuXG5Dcm9zc0hhdGNoRmlsdGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoY29yZS5BYnN0cmFjdEZpbHRlci5wcm90b3R5cGUpO1xuQ3Jvc3NIYXRjaEZpbHRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBDcm9zc0hhdGNoRmlsdGVyO1xubW9kdWxlLmV4cG9ydHMgPSBDcm9zc0hhdGNoRmlsdGVyO1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi8uLi9jb3JlJyk7XG4vLyBAc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9zdWJzdGFjay9icmZzL2lzc3Vlcy8yNVxuXG5cbi8qKlxuICogVGhlIERpc3BsYWNlbWVudEZpbHRlciBjbGFzcyB1c2VzIHRoZSBwaXhlbCB2YWx1ZXMgZnJvbSB0aGUgc3BlY2lmaWVkIHRleHR1cmUgKGNhbGxlZCB0aGUgZGlzcGxhY2VtZW50IG1hcCkgdG8gcGVyZm9ybSBhIGRpc3BsYWNlbWVudCBvZiBhbiBvYmplY3QuXG4gKiBZb3UgY2FuIHVzZSB0aGlzIGZpbHRlciB0byBhcHBseSBhbGwgbWFub3Igb2YgY3Jhenkgd2FycGluZyBlZmZlY3RzXG4gKiBDdXJyZW50bHkgdGhlIHIgcHJvcGVydHkgb2YgdGhlIHRleHR1cmUgaXMgdXNlZCB0byBvZmZzZXQgdGhlIHggYW5kIHRoZSBnIHByb3BlcnR5IG9mIHRoZSB0ZXh0dXJlIGlzIHVzZWQgdG8gb2Zmc2V0IHRoZSB5LlxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5BYnN0cmFjdEZpbHRlclxuICogQG1lbWJlcm9mIFBJWEkuZmlsdGVyc1xuICogQHBhcmFtIHNwcml0ZSB7UElYSS5TcHJpdGV9IHRoZSBzcHJpdGUgdXNlZCBmb3IgdGhlIGRpc3BsYWNlbWVudCBtYXAuIChtYWtlIHN1cmUgaXRzIGFkZGVkIHRvIHRoZSBzY2VuZSEpXG4gKi9cbmZ1bmN0aW9uIERpc3BsYWNlbWVudEZpbHRlcihzcHJpdGUsIHNjYWxlKVxue1xuICAgIHZhciBtYXNrTWF0cml4ID0gbmV3IGNvcmUuTWF0cml4KCk7XG4gICAgc3ByaXRlLnJlbmRlcmFibGUgPSBmYWxzZTtcblxuICAgIGNvcmUuQWJzdHJhY3RGaWx0ZXIuY2FsbCh0aGlzLFxuICAgICAgICAvLyB2ZXJ0ZXggc2hhZGVyXG4gICAgICAgIFwiYXR0cmlidXRlIHZlYzIgYVZlcnRleFBvc2l0aW9uO1xcbmF0dHJpYnV0ZSB2ZWMyIGFUZXh0dXJlQ29vcmQ7XFxuYXR0cmlidXRlIHZlYzQgYUNvbG9yO1xcblxcbnVuaWZvcm0gbWF0MyBwcm9qZWN0aW9uTWF0cml4O1xcbnVuaWZvcm0gbWF0MyBvdGhlck1hdHJpeDtcXG5cXG52YXJ5aW5nIHZlYzIgdk1hcENvb3JkO1xcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xcbnZhcnlpbmcgdmVjNCB2Q29sb3I7XFxuXFxudm9pZCBtYWluKHZvaWQpXFxue1xcbiAgIGdsX1Bvc2l0aW9uID0gdmVjNCgocHJvamVjdGlvbk1hdHJpeCAqIHZlYzMoYVZlcnRleFBvc2l0aW9uLCAxLjApKS54eSwgMC4wLCAxLjApO1xcbiAgIHZUZXh0dXJlQ29vcmQgPSBhVGV4dHVyZUNvb3JkO1xcbiAgIHZNYXBDb29yZCA9ICggb3RoZXJNYXRyaXggKiB2ZWMzKCBhVGV4dHVyZUNvb3JkLCAxLjApICApLnh5O1xcbiAgIHZDb2xvciA9IHZlYzQoYUNvbG9yLnJnYiAqIGFDb2xvci5hLCBhQ29sb3IuYSk7XFxufVxcblwiLFxuICAgICAgICAvLyBmcmFnbWVudCBzaGFkZXJcbiAgICAgICAgXCJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcXG5cXG52YXJ5aW5nIHZlYzIgdk1hcENvb3JkO1xcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xcbnZhcnlpbmcgdmVjNCB2Q29sb3I7XFxuXFxudW5pZm9ybSB2ZWMyIHNjYWxlO1xcblxcbnVuaWZvcm0gc2FtcGxlcjJEIHVTYW1wbGVyO1xcbnVuaWZvcm0gc2FtcGxlcjJEIG1hcFNhbXBsZXI7XFxuXFxudm9pZCBtYWluKHZvaWQpXFxue1xcbiAgIHZlYzQgbWFwID0gIHRleHR1cmUyRChtYXBTYW1wbGVyLCB2TWFwQ29vcmQpO1xcblxcbiAgIG1hcCAtPSAwLjU7XFxuICAgbWFwLnh5ICo9IHNjYWxlO1xcblxcbiAgIGdsX0ZyYWdDb2xvciA9IHRleHR1cmUyRCh1U2FtcGxlciwgdmVjMih2VGV4dHVyZUNvb3JkLnggKyBtYXAueCwgdlRleHR1cmVDb29yZC55ICsgbWFwLnkpKTtcXG59XFxuXCIsXG4gICAgICAgIC8vIHVuaWZvcm1zXG4gICAgICAgIHtcbiAgICAgICAgICAgIG1hcFNhbXBsZXI6ICAgICB7IHR5cGU6ICdzYW1wbGVyMkQnLCB2YWx1ZTogc3ByaXRlLnRleHR1cmUgfSxcbiAgICAgICAgICAgIG90aGVyTWF0cml4OiAgICB7IHR5cGU6ICdtYXQzJywgdmFsdWU6IG1hc2tNYXRyaXgudG9BcnJheSh0cnVlKSB9LFxuICAgICAgICAgICAgc2NhbGU6ICAgICAgICAgIHsgdHlwZTogJ3YyJywgdmFsdWU6IHsgeDogMSwgeTogMSB9IH1cbiAgICAgICAgfVxuICAgICk7XG5cbiAgICB0aGlzLm1hc2tTcHJpdGUgPSBzcHJpdGU7XG4gICAgdGhpcy5tYXNrTWF0cml4ID0gbWFza01hdHJpeDtcblxuICAgIGlmIChzY2FsZSA9PT0gbnVsbCB8fCBzY2FsZSA9PT0gdW5kZWZpbmVkKVxuICAgIHtcbiAgICAgICAgc2NhbGUgPSAyMDtcbiAgICB9XG5cbiAgICB0aGlzLnNjYWxlID0gbmV3IGNvcmUuUG9pbnQoc2NhbGUsIHNjYWxlKTtcbn1cblxuRGlzcGxhY2VtZW50RmlsdGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoY29yZS5BYnN0cmFjdEZpbHRlci5wcm90b3R5cGUpO1xuRGlzcGxhY2VtZW50RmlsdGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IERpc3BsYWNlbWVudEZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gRGlzcGxhY2VtZW50RmlsdGVyO1xuXG5EaXNwbGFjZW1lbnRGaWx0ZXIucHJvdG90eXBlLmFwcGx5RmlsdGVyID0gZnVuY3Rpb24gKHJlbmRlcmVyLCBpbnB1dCwgb3V0cHV0KVxue1xuICAgIHZhciBmaWx0ZXJNYW5hZ2VyID0gcmVuZGVyZXIuZmlsdGVyTWFuYWdlcjtcblxuICAgIGZpbHRlck1hbmFnZXIuY2FsY3VsYXRlTWFwcGVkTWF0cml4KGlucHV0LmZyYW1lLCB0aGlzLm1hc2tTcHJpdGUsIHRoaXMubWFza01hdHJpeCk7XG5cbiAgICB0aGlzLnVuaWZvcm1zLm90aGVyTWF0cml4LnZhbHVlID0gdGhpcy5tYXNrTWF0cml4LnRvQXJyYXkodHJ1ZSk7XG4gICAgdGhpcy51bmlmb3Jtcy5zY2FsZS52YWx1ZS54ID0gdGhpcy5zY2FsZS54ICogKDEvaW5wdXQuZnJhbWUud2lkdGgpO1xuICAgIHRoaXMudW5pZm9ybXMuc2NhbGUudmFsdWUueSA9IHRoaXMuc2NhbGUueSAqICgxL2lucHV0LmZyYW1lLmhlaWdodCk7XG5cbiAgICB2YXIgc2hhZGVyID0gdGhpcy5nZXRTaGFkZXIocmVuZGVyZXIpO1xuICAgICAvLyBkcmF3IHRoZSBmaWx0ZXIuLi5cbiAgICBmaWx0ZXJNYW5hZ2VyLmFwcGx5RmlsdGVyKHNoYWRlciwgaW5wdXQsIG91dHB1dCk7XG59O1xuXG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKERpc3BsYWNlbWVudEZpbHRlci5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBUaGUgdGV4dHVyZSB1c2VkIGZvciB0aGUgZGlzcGxhY2VtZW50IG1hcC4gTXVzdCBiZSBwb3dlciBvZiAyIHNpemVkIHRleHR1cmUuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlRleHR1cmV9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5EaXNwbGFjZW1lbnRGaWx0ZXIjXG4gICAgICovXG4gICAgbWFwOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudW5pZm9ybXMubWFwU2FtcGxlci52YWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudW5pZm9ybXMubWFwU2FtcGxlci52YWx1ZSA9IHZhbHVlO1xuXG4gICAgICAgIH1cbiAgICB9XG59KTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vLi4vY29yZScpO1xuLy8gQHNlZSBodHRwczovL2dpdGh1Yi5jb20vc3Vic3RhY2svYnJmcy9pc3N1ZXMvMjVcblxuXG4vKipcbiAqIEBhdXRob3IgTWF0IEdyb3ZlcyBodHRwOi8vbWF0Z3JvdmVzLmNvbS8gQERvb3JtYXQyM1xuICogb3JpZ2luYWwgZmlsdGVyOiBodHRwczovL2dpdGh1Yi5jb20vZXZhbncvZ2xmeC5qcy9ibG9iL21hc3Rlci9zcmMvZmlsdGVycy9mdW4vZG90c2NyZWVuLmpzXG4gKi9cblxuLyoqXG4gKiBUaGlzIGZpbHRlciBhcHBsaWVzIGEgZG90c2NyZWVuIGVmZmVjdCBtYWtpbmcgZGlzcGxheSBvYmplY3RzIGFwcGVhciB0byBiZSBtYWRlIG91dCBvZlxuICogYmxhY2sgYW5kIHdoaXRlIGhhbGZ0b25lIGRvdHMgbGlrZSBhbiBvbGQgcHJpbnRlci5cbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQWJzdHJhY3RGaWx0ZXJcbiAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnNcbiAqL1xuZnVuY3Rpb24gRG90U2NyZWVuRmlsdGVyKClcbntcbiAgICBjb3JlLkFic3RyYWN0RmlsdGVyLmNhbGwodGhpcyxcbiAgICAgICAgLy8gdmVydGV4IHNoYWRlclxuICAgICAgICBudWxsLFxuICAgICAgICAvLyBmcmFnbWVudCBzaGFkZXJcbiAgICAgICAgXCJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcXG5cXG52YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDtcXG52YXJ5aW5nIHZlYzQgdkNvbG9yO1xcblxcbnVuaWZvcm0gdmVjNCBkaW1lbnNpb25zO1xcbnVuaWZvcm0gc2FtcGxlcjJEIHVTYW1wbGVyO1xcblxcbnVuaWZvcm0gZmxvYXQgYW5nbGU7XFxudW5pZm9ybSBmbG9hdCBzY2FsZTtcXG5cXG5mbG9hdCBwYXR0ZXJuKClcXG57XFxuICAgZmxvYXQgcyA9IHNpbihhbmdsZSksIGMgPSBjb3MoYW5nbGUpO1xcbiAgIHZlYzIgdGV4ID0gdlRleHR1cmVDb29yZCAqIGRpbWVuc2lvbnMueHk7XFxuICAgdmVjMiBwb2ludCA9IHZlYzIoXFxuICAgICAgIGMgKiB0ZXgueCAtIHMgKiB0ZXgueSxcXG4gICAgICAgcyAqIHRleC54ICsgYyAqIHRleC55XFxuICAgKSAqIHNjYWxlO1xcbiAgIHJldHVybiAoc2luKHBvaW50LngpICogc2luKHBvaW50LnkpKSAqIDQuMDtcXG59XFxuXFxudm9pZCBtYWluKClcXG57XFxuICAgdmVjNCBjb2xvciA9IHRleHR1cmUyRCh1U2FtcGxlciwgdlRleHR1cmVDb29yZCk7XFxuICAgZmxvYXQgYXZlcmFnZSA9IChjb2xvci5yICsgY29sb3IuZyArIGNvbG9yLmIpIC8gMy4wO1xcbiAgIGdsX0ZyYWdDb2xvciA9IHZlYzQodmVjMyhhdmVyYWdlICogMTAuMCAtIDUuMCArIHBhdHRlcm4oKSksIGNvbG9yLmEpO1xcbn1cXG5cIixcbiAgICAgICAgLy8gY3VzdG9tIHVuaWZvcm1zXG4gICAgICAgIHtcbiAgICAgICAgICAgIHNjYWxlOiAgICAgIHsgdHlwZTogJzFmJywgdmFsdWU6IDEgfSxcbiAgICAgICAgICAgIGFuZ2xlOiAgICAgIHsgdHlwZTogJzFmJywgdmFsdWU6IDUgfSxcbiAgICAgICAgICAgIGRpbWVuc2lvbnM6IHsgdHlwZTogJzRmdicsIHZhbHVlOiBbMCwgMCwgMCwgMF0gfVxuICAgICAgICB9XG4gICAgKTtcbn1cblxuRG90U2NyZWVuRmlsdGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoY29yZS5BYnN0cmFjdEZpbHRlci5wcm90b3R5cGUpO1xuRG90U2NyZWVuRmlsdGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IERvdFNjcmVlbkZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gRG90U2NyZWVuRmlsdGVyO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhEb3RTY3JlZW5GaWx0ZXIucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogVGhlIHNjYWxlIG9mIHRoZSBlZmZlY3QuXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuRG90U2NyZWVuRmlsdGVyI1xuICAgICAqL1xuICAgIHNjYWxlOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudW5pZm9ybXMuc2NhbGUudmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLnNjYWxlLnZhbHVlID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVGhlIHJhZGl1cyBvZiB0aGUgZWZmZWN0LlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLkRvdFNjcmVlbkZpbHRlciNcbiAgICAgKi9cbiAgICBhbmdsZToge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVuaWZvcm1zLmFuZ2xlLnZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy5hbmdsZS52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfVxufSk7XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uLy4uL2NvcmUnKTtcblxuLy8gQHNlZSBodHRwczovL2dpdGh1Yi5jb20vc3Vic3RhY2svYnJmcy9pc3N1ZXMvMjVcblxuXG4vKipcbiAqIFRoZSBCbHVyWVRpbnRGaWx0ZXIgYXBwbGllcyBhIHZlcnRpY2FsIEdhdXNzaWFuIGJsdXIgdG8gYW4gb2JqZWN0LlxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5BYnN0cmFjdEZpbHRlclxuICogQG1lbWJlcm9mIFBJWEkuZmlsdGVyc1xuICovXG5mdW5jdGlvbiBCbHVyWVRpbnRGaWx0ZXIoKVxue1xuICAgIGNvcmUuQWJzdHJhY3RGaWx0ZXIuY2FsbCh0aGlzLFxuICAgICAgICAvLyB2ZXJ0ZXggc2hhZGVyXG4gICAgICAgIFwiYXR0cmlidXRlIHZlYzIgYVZlcnRleFBvc2l0aW9uO1xcbmF0dHJpYnV0ZSB2ZWMyIGFUZXh0dXJlQ29vcmQ7XFxuYXR0cmlidXRlIHZlYzQgYUNvbG9yO1xcblxcbnVuaWZvcm0gZmxvYXQgc3RyZW5ndGg7XFxudW5pZm9ybSB2ZWMyIG9mZnNldDtcXG5cXG51bmlmb3JtIG1hdDMgcHJvamVjdGlvbk1hdHJpeDtcXG5cXG52YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDtcXG52YXJ5aW5nIHZlYzQgdkNvbG9yO1xcbnZhcnlpbmcgdmVjMiB2Qmx1clRleENvb3Jkc1s2XTtcXG5cXG52b2lkIG1haW4odm9pZClcXG57XFxuICAgIGdsX1Bvc2l0aW9uID0gdmVjNCgocHJvamVjdGlvbk1hdHJpeCAqIHZlYzMoKGFWZXJ0ZXhQb3NpdGlvbitvZmZzZXQpLCAxLjApKS54eSwgMC4wLCAxLjApO1xcbiAgICB2VGV4dHVyZUNvb3JkID0gYVRleHR1cmVDb29yZDtcXG5cXG4gICAgdkJsdXJUZXhDb29yZHNbIDBdID0gYVRleHR1cmVDb29yZCArIHZlYzIoMC4wLCAtMC4wMTIgKiBzdHJlbmd0aCk7XFxuICAgIHZCbHVyVGV4Q29vcmRzWyAxXSA9IGFUZXh0dXJlQ29vcmQgKyB2ZWMyKDAuMCwgLTAuMDA4ICogc3RyZW5ndGgpO1xcbiAgICB2Qmx1clRleENvb3Jkc1sgMl0gPSBhVGV4dHVyZUNvb3JkICsgdmVjMigwLjAsIC0wLjAwNCAqIHN0cmVuZ3RoKTtcXG4gICAgdkJsdXJUZXhDb29yZHNbIDNdID0gYVRleHR1cmVDb29yZCArIHZlYzIoMC4wLCAgMC4wMDQgKiBzdHJlbmd0aCk7XFxuICAgIHZCbHVyVGV4Q29vcmRzWyA0XSA9IGFUZXh0dXJlQ29vcmQgKyB2ZWMyKDAuMCwgIDAuMDA4ICogc3RyZW5ndGgpO1xcbiAgICB2Qmx1clRleENvb3Jkc1sgNV0gPSBhVGV4dHVyZUNvb3JkICsgdmVjMigwLjAsICAwLjAxMiAqIHN0cmVuZ3RoKTtcXG5cXG4gICB2Q29sb3IgPSB2ZWM0KGFDb2xvci5yZ2IgKiBhQ29sb3IuYSwgYUNvbG9yLmEpO1xcbn1cXG5cIixcbiAgICAgICAgLy8gZnJhZ21lbnQgc2hhZGVyXG4gICAgICAgIFwicHJlY2lzaW9uIGxvd3AgZmxvYXQ7XFxuXFxudmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7XFxudmFyeWluZyB2ZWMyIHZCbHVyVGV4Q29vcmRzWzZdO1xcbnZhcnlpbmcgdmVjNCB2Q29sb3I7XFxuXFxudW5pZm9ybSB2ZWMzIGNvbG9yO1xcbnVuaWZvcm0gZmxvYXQgYWxwaGE7XFxuXFxudW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXI7XFxuXFxudm9pZCBtYWluKHZvaWQpXFxue1xcbiAgICB2ZWM0IHN1bSA9IHZlYzQoMC4wKTtcXG5cXG4gICAgc3VtICs9IHRleHR1cmUyRCh1U2FtcGxlciwgdkJsdXJUZXhDb29yZHNbIDBdKSowLjAwNDQzMTg0ODQxMTkzODM0MTtcXG4gICAgc3VtICs9IHRleHR1cmUyRCh1U2FtcGxlciwgdkJsdXJUZXhDb29yZHNbIDFdKSowLjA1Mzk5MDk2NjUxMzE4OTg1O1xcbiAgICBzdW0gKz0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2Qmx1clRleENvb3Jkc1sgMl0pKjAuMjQxOTcwNzI0NTE5MTQ1NDtcXG4gICAgc3VtICs9IHRleHR1cmUyRCh1U2FtcGxlciwgdlRleHR1cmVDb29yZCAgICAgKSowLjM5ODk0MjI4MDQwMTQzMjc7XFxuICAgIHN1bSArPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZCbHVyVGV4Q29vcmRzWyAzXSkqMC4yNDE5NzA3MjQ1MTkxNDU0O1xcbiAgICBzdW0gKz0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2Qmx1clRleENvb3Jkc1sgNF0pKjAuMDUzOTkwOTY2NTEzMTg5ODU7XFxuICAgIHN1bSArPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZCbHVyVGV4Q29vcmRzWyA1XSkqMC4wMDQ0MzE4NDg0MTE5MzgzNDE7XFxuXFxuICAgIGdsX0ZyYWdDb2xvciA9IHZlYzQoIGNvbG9yLnJnYiAqIHN1bS5hICogYWxwaGEsIHN1bS5hICogYWxwaGEgKTtcXG59XFxuXCIsXG4gICAgICAgIC8vIHNldCB0aGUgdW5pZm9ybXNcbiAgICAgICAge1xuICAgICAgICAgICAgYmx1cjogeyB0eXBlOiAnMWYnLCB2YWx1ZTogMSAvIDUxMiB9LFxuICAgICAgICAgICAgY29sb3I6IHsgdHlwZTogJ2MnLCB2YWx1ZTogWzAsMCwwXX0sXG4gICAgICAgICAgICBhbHBoYTogeyB0eXBlOiAnMWYnLCB2YWx1ZTogMC43IH0sXG4gICAgICAgICAgICBvZmZzZXQ6IHsgdHlwZTogJzJmJywgdmFsdWU6WzUsIDVdfSxcbiAgICAgICAgICAgIHN0cmVuZ3RoOiB7IHR5cGU6ICcxZicsIHZhbHVlOjF9XG4gICAgICAgIH1cbiAgICApO1xuXG4gICAgdGhpcy5wYXNzZXMgPSAxO1xuICAgIHRoaXMuc3RyZW5ndGggPSA0O1xufVxuXG5CbHVyWVRpbnRGaWx0ZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShjb3JlLkFic3RyYWN0RmlsdGVyLnByb3RvdHlwZSk7XG5CbHVyWVRpbnRGaWx0ZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gQmx1cllUaW50RmlsdGVyO1xubW9kdWxlLmV4cG9ydHMgPSBCbHVyWVRpbnRGaWx0ZXI7XG5cbkJsdXJZVGludEZpbHRlci5wcm90b3R5cGUuYXBwbHlGaWx0ZXIgPSBmdW5jdGlvbiAocmVuZGVyZXIsIGlucHV0LCBvdXRwdXQsIGNsZWFyKVxue1xuICAgIHZhciBzaGFkZXIgPSB0aGlzLmdldFNoYWRlcihyZW5kZXJlcik7XG5cbiAgICB0aGlzLnVuaWZvcm1zLnN0cmVuZ3RoLnZhbHVlID0gdGhpcy5zdHJlbmd0aCAvIDQgLyB0aGlzLnBhc3NlcyAqIChpbnB1dC5mcmFtZS5oZWlnaHQgLyBpbnB1dC5zaXplLmhlaWdodCk7XG5cbiAgICBpZih0aGlzLnBhc3NlcyA9PT0gMSlcbiAgICB7XG4gICAgICAgIHJlbmRlcmVyLmZpbHRlck1hbmFnZXIuYXBwbHlGaWx0ZXIoc2hhZGVyLCBpbnB1dCwgb3V0cHV0LCBjbGVhcik7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHZhciByZW5kZXJUYXJnZXQgPSByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLmdldFJlbmRlclRhcmdldCh0cnVlKTtcbiAgICAgICAgdmFyIGZsaXAgPSBpbnB1dDtcbiAgICAgICAgdmFyIGZsb3AgPSByZW5kZXJUYXJnZXQ7XG5cbiAgICAgICAgZm9yKHZhciBpID0gMDsgaSA8IHRoaXMucGFzc2VzLTE7IGkrKylcbiAgICAgICAge1xuICAgICAgICAgICAgcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5hcHBseUZpbHRlcihzaGFkZXIsIGZsaXAsIGZsb3AsIGNsZWFyKTtcblxuICAgICAgICAgICB2YXIgdGVtcCA9IGZsb3A7XG4gICAgICAgICAgIGZsb3AgPSBmbGlwO1xuICAgICAgICAgICBmbGlwID0gdGVtcDtcbiAgICAgICAgfVxuXG4gICAgICAgIHJlbmRlcmVyLmZpbHRlck1hbmFnZXIuYXBwbHlGaWx0ZXIoc2hhZGVyLCBmbGlwLCBvdXRwdXQsIGNsZWFyKTtcblxuICAgICAgICByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLnJldHVyblJlbmRlclRhcmdldChyZW5kZXJUYXJnZXQpO1xuICAgIH1cbn07XG5cblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoQmx1cllUaW50RmlsdGVyLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIHN0cmVuZ3RoIG9mIGJvdGggdGhlIGJsdXIuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5CbHVyWVRpbnRGaWx0ZXIjXG4gICAgICogQGRlZmF1bHQgMlxuICAgICAqL1xuICAgIGJsdXI6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gIHRoaXMuc3RyZW5ndGg7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnBhZGRpbmcgPSB2YWx1ZSAqIDAuNTtcbiAgICAgICAgICAgIHRoaXMuc3RyZW5ndGggPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi8uLi9jb3JlJyksXG4gICAgQmx1clhGaWx0ZXIgPSByZXF1aXJlKCcuLi9ibHVyL0JsdXJYRmlsdGVyJyksXG4gICAgQmx1cllUaW50RmlsdGVyID0gcmVxdWlyZSgnLi9CbHVyWVRpbnRGaWx0ZXInKTtcblxuLyoqXG4gKiBUaGUgRHJvcFNoYWRvd0ZpbHRlciBhcHBsaWVzIGEgR2F1c3NpYW4gYmx1ciB0byBhbiBvYmplY3QuXG4gKiBUaGUgc3RyZW5ndGggb2YgdGhlIGJsdXIgY2FuIGJlIHNldCBmb3IgeC0gYW5kIHktYXhpcyBzZXBhcmF0ZWx5LlxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5BYnN0cmFjdEZpbHRlclxuICogQG1lbWJlcm9mIFBJWEkuZmlsdGVyc1xuICovXG5mdW5jdGlvbiBEcm9wU2hhZG93RmlsdGVyKClcbntcbiAgICBjb3JlLkFic3RyYWN0RmlsdGVyLmNhbGwodGhpcyk7XG5cbiAgICB0aGlzLmJsdXJYRmlsdGVyID0gbmV3IEJsdXJYRmlsdGVyKCk7XG4gICAgdGhpcy5ibHVyWVRpbnRGaWx0ZXIgPSBuZXcgQmx1cllUaW50RmlsdGVyKCk7XG5cbiAgICB0aGlzLmRlZmF1bHRGaWx0ZXIgPSBuZXcgY29yZS5BYnN0cmFjdEZpbHRlcigpO1xuXG4gICAgdGhpcy5wYWRkaW5nID0gMzA7XG5cbiAgICB0aGlzLl9kaXJ0eVBvc2l0aW9uID0gdHJ1ZTtcbiAgICB0aGlzLl9hbmdsZSA9IDQ1ICogTWF0aC5QSSAvIDE4MDtcbiAgICB0aGlzLl9kaXN0YW5jZSA9IDEwO1xuICAgIHRoaXMuYWxwaGEgPSAwLjc1O1xuICAgIHRoaXMuaGlkZU9iamVjdCA9IGZhbHNlO1xuICAgIHRoaXMuYmxlbmRNb2RlID0gY29yZS5CTEVORF9NT0RFUy5NVUxUSVBMWTtcbn1cblxuRHJvcFNoYWRvd0ZpbHRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuQWJzdHJhY3RGaWx0ZXIucHJvdG90eXBlKTtcbkRyb3BTaGFkb3dGaWx0ZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gRHJvcFNoYWRvd0ZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gRHJvcFNoYWRvd0ZpbHRlcjtcblxuRHJvcFNoYWRvd0ZpbHRlci5wcm90b3R5cGUuYXBwbHlGaWx0ZXIgPSBmdW5jdGlvbiAocmVuZGVyZXIsIGlucHV0LCBvdXRwdXQpXG57XG4gICAgdmFyIHJlbmRlclRhcmdldCA9IHJlbmRlcmVyLmZpbHRlck1hbmFnZXIuZ2V0UmVuZGVyVGFyZ2V0KHRydWUpO1xuXG4gICAgLy9UT0RPIC0gY29weVRleFN1YkltYWdlMkQgY291bGQgYmUgdXNlZCBoZXJlP1xuICAgIGlmKHRoaXMuX2RpcnR5UG9zaXRpb24pXG4gICAge1xuICAgICAgICB0aGlzLl9kaXJ0eVBvc2l0aW9uID0gZmFsc2U7XG5cbiAgICAgICAgdGhpcy5ibHVyWVRpbnRGaWx0ZXIudW5pZm9ybXMub2Zmc2V0LnZhbHVlWzBdID0gTWF0aC5zaW4odGhpcy5fYW5nbGUpICogdGhpcy5fZGlzdGFuY2U7XG4gICAgICAgIHRoaXMuYmx1cllUaW50RmlsdGVyLnVuaWZvcm1zLm9mZnNldC52YWx1ZVsxXSA9IE1hdGguY29zKHRoaXMuX2FuZ2xlKSAqIHRoaXMuX2Rpc3RhbmNlO1xuICAgIH1cblxuICAgIHRoaXMuYmx1clhGaWx0ZXIuYXBwbHlGaWx0ZXIocmVuZGVyZXIsIGlucHV0LCByZW5kZXJUYXJnZXQpO1xuXG4gICAgcmVuZGVyZXIuYmxlbmRNb2RlTWFuYWdlci5zZXRCbGVuZE1vZGUodGhpcy5ibGVuZE1vZGUpO1xuXG4gICAgdGhpcy5ibHVyWVRpbnRGaWx0ZXIuYXBwbHlGaWx0ZXIocmVuZGVyZXIsIHJlbmRlclRhcmdldCwgb3V0cHV0KTtcblxuICAgIHJlbmRlcmVyLmJsZW5kTW9kZU1hbmFnZXIuc2V0QmxlbmRNb2RlKGNvcmUuQkxFTkRfTU9ERVMuTk9STUFMKTtcblxuICAgIGlmKCF0aGlzLmhpZGVPYmplY3QpXG4gICAge1xuXG4gICAgICAgIHRoaXMuZGVmYXVsdEZpbHRlci5hcHBseUZpbHRlcihyZW5kZXJlciwgaW5wdXQsIG91dHB1dCk7XG4gICAgfVxuXG5cbiAgICByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLnJldHVyblJlbmRlclRhcmdldChyZW5kZXJUYXJnZXQpO1xufTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoRHJvcFNoYWRvd0ZpbHRlci5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBzdHJlbmd0aCBvZiBib3RoIHRoZSBibHVyWCBhbmQgYmx1clkgcHJvcGVydGllcyBzaW11bHRhbmVvdXNseVxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJPZiBQSVhJLmZpbHRlcnMuRHJvcFNoYWRvd0ZpbHRlciNcbiAgICAgKiBAZGVmYXVsdCAyXG4gICAgICovXG4gICAgYmx1cjoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmJsdXJYRmlsdGVyLmJsdXI7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmJsdXJYRmlsdGVyLmJsdXIgPSB0aGlzLmJsdXJZVGludEZpbHRlci5ibHVyID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgc3RyZW5ndGggb2YgdGhlIGJsdXJYIHByb3BlcnR5XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlck9mIFBJWEkuZmlsdGVycy5Ecm9wU2hhZG93RmlsdGVyI1xuICAgICAqIEBkZWZhdWx0IDJcbiAgICAgKi9cbiAgICBibHVyWDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmJsdXJYRmlsdGVyLmJsdXI7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmJsdXJYRmlsdGVyLmJsdXIgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBzdHJlbmd0aCBvZiB0aGUgYmx1clkgcHJvcGVydHlcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyT2YgUElYSS5maWx0ZXJzLkRyb3BTaGFkb3dGaWx0ZXIjXG4gICAgICogQGRlZmF1bHQgMlxuICAgICAqL1xuICAgIGJsdXJZOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuYmx1cllUaW50RmlsdGVyLmJsdXI7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmJsdXJZVGludEZpbHRlci5ibHVyID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgY29sb3Igb2YgdGhlIHNoYWRvd1xuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJPZiBQSVhJLmZpbHRlcnMuRHJvcFNoYWRvd0ZpbHRlciNcbiAgICAgKi9cbiAgICBjb2xvcjoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiAgY29yZS51dGlscy5yZ2IyaGV4KCB0aGlzLmJsdXJZVGludEZpbHRlci51bmlmb3Jtcy5jb2xvci52YWx1ZSApO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5ibHVyWVRpbnRGaWx0ZXIudW5pZm9ybXMuY29sb3IudmFsdWUgPSBjb3JlLnV0aWxzLmhleDJyZ2IodmFsdWUpO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIGFscGhhIG9mIHRoZSBzaGFkb3dcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyT2YgUElYSS5maWx0ZXJzLkRyb3BTaGFkb3dGaWx0ZXIjXG4gICAgICovXG4gICAgYWxwaGE6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gIHRoaXMuYmx1cllUaW50RmlsdGVyLnVuaWZvcm1zLmFscGhhLnZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5ibHVyWVRpbnRGaWx0ZXIudW5pZm9ybXMuYWxwaGEudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBkaXN0YW5jZSBvZiB0aGUgc2hhZG93XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlck9mIFBJWEkuZmlsdGVycy5Ecm9wU2hhZG93RmlsdGVyI1xuICAgICAqL1xuICAgIGRpc3RhbmNlOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuICB0aGlzLl9kaXN0YW5jZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuX2RpcnR5UG9zaXRpb24gPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy5fZGlzdGFuY2UgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBhbmdsZSBvZiB0aGUgc2hhZG93XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlck9mIFBJWEkuZmlsdGVycy5Ecm9wU2hhZG93RmlsdGVyI1xuICAgICAqL1xuICAgIGFuZ2xlOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuICB0aGlzLl9hbmdsZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuX2RpcnR5UG9zaXRpb24gPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy5fYW5nbGUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi8uLi9jb3JlJyk7XG4vLyBAc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9zdWJzdGFjay9icmZzL2lzc3Vlcy8yNVxuXG5cbi8qKlxuICogVGhpcyBncmV5c2NhbGVzIHRoZSBwYWxldHRlIG9mIHlvdXIgRGlzcGxheSBPYmplY3RzLlxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5BYnN0cmFjdEZpbHRlclxuICogQG1lbWJlcm9mIFBJWEkuZmlsdGVyc1xuICovXG5mdW5jdGlvbiBHcmF5RmlsdGVyKClcbntcbiAgICBjb3JlLkFic3RyYWN0RmlsdGVyLmNhbGwodGhpcyxcbiAgICAgICAgLy8gdmVydGV4IHNoYWRlclxuICAgICAgICBudWxsLFxuICAgICAgICAvLyBmcmFnbWVudCBzaGFkZXJcbiAgICAgICAgXCJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcXG5cXG52YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDtcXG52YXJ5aW5nIHZlYzQgdkNvbG9yO1xcblxcbnVuaWZvcm0gc2FtcGxlcjJEIHVTYW1wbGVyO1xcbnVuaWZvcm0gZmxvYXQgZ3JheTtcXG5cXG52b2lkIG1haW4odm9pZClcXG57XFxuICAgZ2xfRnJhZ0NvbG9yID0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2VGV4dHVyZUNvb3JkKTtcXG4gICBnbF9GcmFnQ29sb3IucmdiID0gbWl4KGdsX0ZyYWdDb2xvci5yZ2IsIHZlYzMoMC4yMTI2KmdsX0ZyYWdDb2xvci5yICsgMC43MTUyKmdsX0ZyYWdDb2xvci5nICsgMC4wNzIyKmdsX0ZyYWdDb2xvci5iKSwgZ3JheSk7XFxufVxcblwiLFxuICAgICAgICAvLyBzZXQgdGhlIHVuaWZvcm1zXG4gICAgICAgIHtcbiAgICAgICAgICAgIGdyYXk6IHsgdHlwZTogJzFmJywgdmFsdWU6IDEgfVxuICAgICAgICB9XG4gICAgKTtcbn1cblxuR3JheUZpbHRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuQWJzdHJhY3RGaWx0ZXIucHJvdG90eXBlKTtcbkdyYXlGaWx0ZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gR3JheUZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gR3JheUZpbHRlcjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoR3JheUZpbHRlci5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBUaGUgc3RyZW5ndGggb2YgdGhlIGdyYXkuIDEgd2lsbCBtYWtlIHRoZSBvYmplY3QgYmxhY2sgYW5kIHdoaXRlLCAwIHdpbGwgbWFrZSB0aGUgb2JqZWN0IGl0cyBub3JtYWwgY29sb3IuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5HcmF5RmlsdGVyI1xuICAgICAqL1xuICAgIGdyYXk6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy51bmlmb3Jtcy5ncmF5LnZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy5ncmF5LnZhbHVlID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG59KTtcbiIsIi8qKlxuICogQGZpbGUgICAgICAgIE1haW4gZXhwb3J0IG9mIHRoZSBQSVhJIGZpbHRlcnMgbGlicmFyeVxuICogQGF1dGhvciAgICAgIE1hdCBHcm92ZXMgPG1hdEBnb29kYm95ZGlnaXRhbC5jb20+XG4gKiBAY29weXJpZ2h0ICAgMjAxMy0yMDE1IEdvb2RCb3lEaWdpdGFsXG4gKiBAbGljZW5zZSAgICAge0BsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9waXhpanMvcGl4aS5qcy9ibG9iL21hc3Rlci9MSUNFTlNFfE1JVCBMaWNlbnNlfVxuICovXG5cbi8qKlxuICogQG5hbWVzcGFjZSBQSVhJLmZpbHRlcnNcbiAqL1xubW9kdWxlLmV4cG9ydHMgPSB7XG4gICAgQXNjaWlGaWx0ZXI6ICAgICAgICByZXF1aXJlKCcuL2FzY2lpL0FzY2lpRmlsdGVyJyksXG4gICAgQmxvb21GaWx0ZXI6ICAgICAgICByZXF1aXJlKCcuL2Jsb29tL0Jsb29tRmlsdGVyJyksXG4gICAgQmx1ckZpbHRlcjogICAgICAgICByZXF1aXJlKCcuL2JsdXIvQmx1ckZpbHRlcicpLFxuICAgIEJsdXJYRmlsdGVyOiAgICAgICAgcmVxdWlyZSgnLi9ibHVyL0JsdXJYRmlsdGVyJyksXG4gICAgQmx1cllGaWx0ZXI6ICAgICAgICByZXF1aXJlKCcuL2JsdXIvQmx1cllGaWx0ZXInKSxcbiAgICBCbHVyRGlyRmlsdGVyOiAgICAgIHJlcXVpcmUoJy4vYmx1ci9CbHVyRGlyRmlsdGVyJyksXG4gICAgQ29sb3JNYXRyaXhGaWx0ZXI6ICByZXF1aXJlKCcuL2NvbG9yL0NvbG9yTWF0cml4RmlsdGVyJyksXG4gICAgQ29sb3JTdGVwRmlsdGVyOiAgICByZXF1aXJlKCcuL2NvbG9yL0NvbG9yU3RlcEZpbHRlcicpLFxuICAgIENvbnZvbHV0aW9uRmlsdGVyOiAgcmVxdWlyZSgnLi9jb252b2x1dGlvbi9Db252b2x1dGlvbkZpbHRlcicpLFxuICAgIENyb3NzSGF0Y2hGaWx0ZXI6ICAgcmVxdWlyZSgnLi9jcm9zc2hhdGNoL0Nyb3NzSGF0Y2hGaWx0ZXInKSxcbiAgICBEaXNwbGFjZW1lbnRGaWx0ZXI6IHJlcXVpcmUoJy4vZGlzcGxhY2VtZW50L0Rpc3BsYWNlbWVudEZpbHRlcicpLFxuICAgIERvdFNjcmVlbkZpbHRlcjogICAgcmVxdWlyZSgnLi9kb3QvRG90U2NyZWVuRmlsdGVyJyksXG4gICAgR3JheUZpbHRlcjogICAgICAgICByZXF1aXJlKCcuL2dyYXkvR3JheUZpbHRlcicpLFxuICAgIERyb3BTaGFkb3dGaWx0ZXI6ICAgcmVxdWlyZSgnLi9kcm9wc2hhZG93L0Ryb3BTaGFkb3dGaWx0ZXInKSxcbiAgICBJbnZlcnRGaWx0ZXI6ICAgICAgIHJlcXVpcmUoJy4vaW52ZXJ0L0ludmVydEZpbHRlcicpLFxuICAgIE5vaXNlRmlsdGVyOiAgICAgICAgcmVxdWlyZSgnLi9ub2lzZS9Ob2lzZUZpbHRlcicpLFxuICAgIFBpeGVsYXRlRmlsdGVyOiAgICAgcmVxdWlyZSgnLi9waXhlbGF0ZS9QaXhlbGF0ZUZpbHRlcicpLFxuICAgIFJHQlNwbGl0RmlsdGVyOiAgICAgcmVxdWlyZSgnLi9yZ2IvUkdCU3BsaXRGaWx0ZXInKSxcbiAgICBTaG9ja3dhdmVGaWx0ZXI6ICAgIHJlcXVpcmUoJy4vc2hvY2t3YXZlL1Nob2Nrd2F2ZUZpbHRlcicpLFxuICAgIFNlcGlhRmlsdGVyOiAgICAgICAgcmVxdWlyZSgnLi9zZXBpYS9TZXBpYUZpbHRlcicpLFxuICAgIFNtYXJ0Qmx1ckZpbHRlcjogICAgcmVxdWlyZSgnLi9ibHVyL1NtYXJ0Qmx1ckZpbHRlcicpLFxuICAgIFRpbHRTaGlmdEZpbHRlcjogICAgcmVxdWlyZSgnLi90aWx0c2hpZnQvVGlsdFNoaWZ0RmlsdGVyJyksXG4gICAgVGlsdFNoaWZ0WEZpbHRlcjogICByZXF1aXJlKCcuL3RpbHRzaGlmdC9UaWx0U2hpZnRYRmlsdGVyJyksXG4gICAgVGlsdFNoaWZ0WUZpbHRlcjogICByZXF1aXJlKCcuL3RpbHRzaGlmdC9UaWx0U2hpZnRZRmlsdGVyJyksXG4gICAgVHdpc3RGaWx0ZXI6ICAgICAgICByZXF1aXJlKCcuL3R3aXN0L1R3aXN0RmlsdGVyJylcbn07XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uLy4uL2NvcmUnKTtcbi8vIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL3N1YnN0YWNrL2JyZnMvaXNzdWVzLzI1XG5cblxuLyoqXG4gKiBUaGlzIGludmVydHMgeW91ciBEaXNwbGF5IE9iamVjdHMgY29sb3JzLlxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5BYnN0cmFjdEZpbHRlclxuICogQG1lbWJlcm9mIFBJWEkuZmlsdGVyc1xuICovXG5mdW5jdGlvbiBJbnZlcnRGaWx0ZXIoKVxue1xuICAgIGNvcmUuQWJzdHJhY3RGaWx0ZXIuY2FsbCh0aGlzLFxuICAgICAgICAvLyB2ZXJ0ZXggc2hhZGVyXG4gICAgICAgIG51bGwsXG4gICAgICAgIC8vIGZyYWdtZW50IHNoYWRlclxuICAgICAgICBcInByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xcblxcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xcblxcbnVuaWZvcm0gZmxvYXQgaW52ZXJ0O1xcbnVuaWZvcm0gc2FtcGxlcjJEIHVTYW1wbGVyO1xcblxcbnZvaWQgbWFpbih2b2lkKVxcbntcXG4gICAgZ2xfRnJhZ0NvbG9yID0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2VGV4dHVyZUNvb3JkKTtcXG5cXG4gICAgZ2xfRnJhZ0NvbG9yLnJnYiA9IG1peCggKHZlYzMoMSktZ2xfRnJhZ0NvbG9yLnJnYikgKiBnbF9GcmFnQ29sb3IuYSwgZ2xfRnJhZ0NvbG9yLnJnYiwgMS4wIC0gaW52ZXJ0KTtcXG59XFxuXCIsXG4gICAgICAgIC8vIGN1c3RvbSB1bmlmb3Jtc1xuICAgICAgICB7XG4gICAgICAgICAgICBpbnZlcnQ6IHsgdHlwZTogJzFmJywgdmFsdWU6IDEgfVxuICAgICAgICB9XG4gICAgKTtcbn1cblxuSW52ZXJ0RmlsdGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoY29yZS5BYnN0cmFjdEZpbHRlci5wcm90b3R5cGUpO1xuSW52ZXJ0RmlsdGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IEludmVydEZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gSW52ZXJ0RmlsdGVyO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhJbnZlcnRGaWx0ZXIucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogVGhlIHN0cmVuZ3RoIG9mIHRoZSBpbnZlcnQuIGAxYCB3aWxsIGZ1bGx5IGludmVydCB0aGUgY29sb3JzLCBhbmRcbiAgICAgKiBgMGAgd2lsbCBtYWtlIHRoZSBvYmplY3QgaXRzIG5vcm1hbCBjb2xvci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLkludmVydEZpbHRlciNcbiAgICAgKi9cbiAgICBpbnZlcnQ6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy51bmlmb3Jtcy5pbnZlcnQudmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLmludmVydC52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfVxufSk7XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uLy4uL2NvcmUnKTtcbi8vIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL3N1YnN0YWNrL2JyZnMvaXNzdWVzLzI1XG5cblxuLyoqXG4gKiBAYXV0aG9yIFZpY28gQHZpY29jb3RlYVxuICogb3JpZ2luYWwgZmlsdGVyOiBodHRwczovL2dpdGh1Yi5jb20vZXZhbncvZ2xmeC5qcy9ibG9iL21hc3Rlci9zcmMvZmlsdGVycy9hZGp1c3Qvbm9pc2UuanNcbiAqL1xuXG4vKipcbiAqIEEgTm9pc2UgZWZmZWN0IGZpbHRlci5cbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQWJzdHJhY3RGaWx0ZXJcbiAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnNcbiAqL1xuZnVuY3Rpb24gTm9pc2VGaWx0ZXIoKVxue1xuICAgIGNvcmUuQWJzdHJhY3RGaWx0ZXIuY2FsbCh0aGlzLFxuICAgICAgICAvLyB2ZXJ0ZXggc2hhZGVyXG4gICAgICAgIG51bGwsXG4gICAgICAgIC8vIGZyYWdtZW50IHNoYWRlclxuICAgICAgICBcInByZWNpc2lvbiBoaWdocCBmbG9hdDtcXG5cXG52YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDtcXG52YXJ5aW5nIHZlYzQgdkNvbG9yO1xcblxcbnVuaWZvcm0gZmxvYXQgbm9pc2U7XFxudW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXI7XFxuXFxuZmxvYXQgcmFuZCh2ZWMyIGNvKVxcbntcXG4gICAgcmV0dXJuIGZyYWN0KHNpbihkb3QoY28ueHksIHZlYzIoMTIuOTg5OCwgNzguMjMzKSkpICogNDM3NTguNTQ1Myk7XFxufVxcblxcbnZvaWQgbWFpbigpXFxue1xcbiAgICB2ZWM0IGNvbG9yID0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2VGV4dHVyZUNvb3JkKTtcXG5cXG4gICAgZmxvYXQgZGlmZiA9IChyYW5kKHZUZXh0dXJlQ29vcmQpIC0gMC41KSAqIG5vaXNlO1xcblxcbiAgICBjb2xvci5yICs9IGRpZmY7XFxuICAgIGNvbG9yLmcgKz0gZGlmZjtcXG4gICAgY29sb3IuYiArPSBkaWZmO1xcblxcbiAgICBnbF9GcmFnQ29sb3IgPSBjb2xvcjtcXG59XFxuXCIsXG4gICAgICAgIC8vIGN1c3RvbSB1bmlmb3Jtc1xuICAgICAgICB7XG4gICAgICAgICAgICBub2lzZTogeyB0eXBlOiAnMWYnLCB2YWx1ZTogMC41IH1cbiAgICAgICAgfVxuICAgICk7XG59XG5cbk5vaXNlRmlsdGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoY29yZS5BYnN0cmFjdEZpbHRlci5wcm90b3R5cGUpO1xuTm9pc2VGaWx0ZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gTm9pc2VGaWx0ZXI7XG5tb2R1bGUuZXhwb3J0cyA9IE5vaXNlRmlsdGVyO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhOb2lzZUZpbHRlci5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBUaGUgYW1vdW50IG9mIG5vaXNlIHRvIGFwcGx5LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuTm9pc2VGaWx0ZXIjXG4gICAgICogQGRlZmF1bHQgMC41XG4gICAgICovXG4gICAgbm9pc2U6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy51bmlmb3Jtcy5ub2lzZS52YWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudW5pZm9ybXMubm9pc2UudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi8uLi9jb3JlJyk7XG4vLyBAc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9zdWJzdGFjay9icmZzL2lzc3Vlcy8yNVxuXG5cbi8qKlxuICogVGhpcyBmaWx0ZXIgYXBwbGllcyBhIHBpeGVsYXRlIGVmZmVjdCBtYWtpbmcgZGlzcGxheSBvYmplY3RzIGFwcGVhciAnYmxvY2t5Jy5cbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQWJzdHJhY3RGaWx0ZXJcbiAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnNcbiAqL1xuZnVuY3Rpb24gUGl4ZWxhdGVGaWx0ZXIoKVxue1xuICAgIGNvcmUuQWJzdHJhY3RGaWx0ZXIuY2FsbCh0aGlzLFxuICAgICAgICAvLyB2ZXJ0ZXggc2hhZGVyXG4gICAgICAgIG51bGwsXG4gICAgICAgIC8vIGZyYWdtZW50IHNoYWRlclxuICAgICAgICBcInByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xcblxcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xcblxcbnVuaWZvcm0gdmVjNCBkaW1lbnNpb25zO1xcbnVuaWZvcm0gdmVjMiBwaXhlbFNpemU7XFxudW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXI7XFxuXFxudm9pZCBtYWluKHZvaWQpXFxue1xcbiAgICB2ZWMyIGNvb3JkID0gdlRleHR1cmVDb29yZDtcXG5cXG4gICAgdmVjMiBzaXplID0gZGltZW5zaW9ucy54eSAvIHBpeGVsU2l6ZTtcXG5cXG4gICAgdmVjMiBjb2xvciA9IGZsb29yKCAoIHZUZXh0dXJlQ29vcmQgKiBzaXplICkgKSAvIHNpemUgKyBwaXhlbFNpemUvZGltZW5zaW9ucy54eSAqIDAuNTtcXG5cXG4gICAgZ2xfRnJhZ0NvbG9yID0gdGV4dHVyZTJEKHVTYW1wbGVyLCBjb2xvcik7XFxufVxcblwiLFxuICAgICAgICAvLyBjdXN0b20gdW5pZm9ybXNcbiAgICAgICAge1xuICAgICAgICAgICAgZGltZW5zaW9uczogeyB0eXBlOiAnNGZ2JywgIHZhbHVlOiBuZXcgRmxvYXQzMkFycmF5KFswLCAwLCAwLCAwXSkgfSxcbiAgICAgICAgICAgIHBpeGVsU2l6ZTogIHsgdHlwZTogJ3YyJywgICB2YWx1ZTogeyB4OiAxMCwgeTogMTAgfSB9XG4gICAgICAgIH1cbiAgICApO1xufVxuXG5QaXhlbGF0ZUZpbHRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuQWJzdHJhY3RGaWx0ZXIucHJvdG90eXBlKTtcblBpeGVsYXRlRmlsdGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFBpeGVsYXRlRmlsdGVyO1xubW9kdWxlLmV4cG9ydHMgPSBQaXhlbGF0ZUZpbHRlcjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoUGl4ZWxhdGVGaWx0ZXIucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogVGhpcyBhIHBvaW50IHRoYXQgZGVzY3JpYmVzIHRoZSBzaXplIG9mIHRoZSBibG9ja3MuXG4gICAgICogeCBpcyB0aGUgd2lkdGggb2YgdGhlIGJsb2NrIGFuZCB5IGlzIHRoZSBoZWlnaHQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlBvaW50fVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuUGl4ZWxhdGVGaWx0ZXIjXG4gICAgICovXG4gICAgc2l6ZToge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVuaWZvcm1zLnBpeGVsU2l6ZS52YWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudW5pZm9ybXMucGl4ZWxTaXplLnZhbHVlID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG59KTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vLi4vY29yZScpO1xuLy8gQHNlZSBodHRwczovL2dpdGh1Yi5jb20vc3Vic3RhY2svYnJmcy9pc3N1ZXMvMjVcblxuXG4vKipcbiAqIEFuIFJHQiBTcGxpdCBGaWx0ZXIuXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLkFic3RyYWN0RmlsdGVyXG4gKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzXG4gKi9cbmZ1bmN0aW9uIFJHQlNwbGl0RmlsdGVyKClcbntcbiAgICBjb3JlLkFic3RyYWN0RmlsdGVyLmNhbGwodGhpcyxcbiAgICAgICAgLy8gdmVydGV4IHNoYWRlclxuICAgICAgICBudWxsLFxuICAgICAgICAvLyBmcmFnbWVudCBzaGFkZXJcbiAgICAgICAgXCJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcXG5cXG52YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDtcXG5cXG51bmlmb3JtIHNhbXBsZXIyRCB1U2FtcGxlcjtcXG51bmlmb3JtIHZlYzQgZGltZW5zaW9ucztcXG51bmlmb3JtIHZlYzIgcmVkO1xcbnVuaWZvcm0gdmVjMiBncmVlbjtcXG51bmlmb3JtIHZlYzIgYmx1ZTtcXG5cXG52b2lkIG1haW4odm9pZClcXG57XFxuICAgZ2xfRnJhZ0NvbG9yLnIgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZUZXh0dXJlQ29vcmQgKyByZWQvZGltZW5zaW9ucy54eSkucjtcXG4gICBnbF9GcmFnQ29sb3IuZyA9IHRleHR1cmUyRCh1U2FtcGxlciwgdlRleHR1cmVDb29yZCArIGdyZWVuL2RpbWVuc2lvbnMueHkpLmc7XFxuICAgZ2xfRnJhZ0NvbG9yLmIgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZUZXh0dXJlQ29vcmQgKyBibHVlL2RpbWVuc2lvbnMueHkpLmI7XFxuICAgZ2xfRnJhZ0NvbG9yLmEgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZUZXh0dXJlQ29vcmQpLmE7XFxufVxcblwiLFxuICAgICAgICAvLyBjdXN0b20gdW5pZm9ybXNcbiAgICAgICAge1xuICAgICAgICAgICAgcmVkOiAgICAgICAgeyB0eXBlOiAndjInLCB2YWx1ZTogeyB4OiAyMCwgeTogMjAgfSB9LFxuICAgICAgICAgICAgZ3JlZW46ICAgICAgeyB0eXBlOiAndjInLCB2YWx1ZTogeyB4OiAtMjAsIHk6IDIwIH0gfSxcbiAgICAgICAgICAgIGJsdWU6ICAgICAgIHsgdHlwZTogJ3YyJywgdmFsdWU6IHsgeDogMjAsIHk6IC0yMCB9IH0sXG4gICAgICAgICAgICBkaW1lbnNpb25zOiB7IHR5cGU6ICc0ZnYnLCB2YWx1ZTogWzAsIDAsIDAsIDBdIH1cbiAgICAgICAgfVxuICAgICk7XG59XG5cblJHQlNwbGl0RmlsdGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoY29yZS5BYnN0cmFjdEZpbHRlci5wcm90b3R5cGUpO1xuUkdCU3BsaXRGaWx0ZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gUkdCU3BsaXRGaWx0ZXI7XG5tb2R1bGUuZXhwb3J0cyA9IFJHQlNwbGl0RmlsdGVyO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhSR0JTcGxpdEZpbHRlci5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBSZWQgY2hhbm5lbCBvZmZzZXQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlBvaW50fVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuUkdCU3BsaXRGaWx0ZXIjXG4gICAgICovXG4gICAgcmVkOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudW5pZm9ybXMucmVkLnZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy5yZWQudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBHcmVlbiBjaGFubmVsIG9mZnNldC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuUG9pbnR9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5SR0JTcGxpdEZpbHRlciNcbiAgICAgKi9cbiAgICBncmVlbjoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVuaWZvcm1zLmdyZWVuLnZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy5ncmVlbi52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIEJsdWUgb2Zmc2V0LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5Qb2ludH1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLlJHQlNwbGl0RmlsdGVyI1xuICAgICAqL1xuICAgIGJsdWU6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy51bmlmb3Jtcy5ibHVlLnZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy5ibHVlLnZhbHVlID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG59KTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vLi4vY29yZScpO1xuLy8gQHNlZSBodHRwczovL2dpdGh1Yi5jb20vc3Vic3RhY2svYnJmcy9pc3N1ZXMvMjVcblxuXG4vKipcbiAqIFRoaXMgYXBwbGllcyBhIHNlcGlhIGVmZmVjdCB0byB5b3VyIERpc3BsYXkgT2JqZWN0cy5cbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQWJzdHJhY3RGaWx0ZXJcbiAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnNcbiAqL1xuZnVuY3Rpb24gU2VwaWFGaWx0ZXIoKVxue1xuICAgIGNvcmUuQWJzdHJhY3RGaWx0ZXIuY2FsbCh0aGlzLFxuICAgICAgICAvLyB2ZXJ0ZXggc2hhZGVyXG4gICAgICAgIG51bGwsXG4gICAgICAgIC8vIGZyYWdtZW50IHNoYWRlclxuICAgICAgICBcInByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xcblxcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xcblxcbnVuaWZvcm0gc2FtcGxlcjJEIHVTYW1wbGVyO1xcbnVuaWZvcm0gZmxvYXQgc2VwaWE7XFxuXFxuY29uc3QgbWF0MyBzZXBpYU1hdHJpeCA9IG1hdDMoMC4zNTg4LCAwLjcwNDQsIDAuMTM2OCwgMC4yOTkwLCAwLjU4NzAsIDAuMTE0MCwgMC4yMzkyLCAwLjQ2OTYsIDAuMDkxMik7XFxuXFxudm9pZCBtYWluKHZvaWQpXFxue1xcbiAgIGdsX0ZyYWdDb2xvciA9IHRleHR1cmUyRCh1U2FtcGxlciwgdlRleHR1cmVDb29yZCk7XFxuICAgZ2xfRnJhZ0NvbG9yLnJnYiA9IG1peCggZ2xfRnJhZ0NvbG9yLnJnYiwgZ2xfRnJhZ0NvbG9yLnJnYiAqIHNlcGlhTWF0cml4LCBzZXBpYSk7XFxufVxcblwiLFxuICAgICAgICAvLyBjdXN0b20gdW5pZm9ybXNcbiAgICAgICAge1xuICAgICAgICAgICAgc2VwaWE6IHsgdHlwZTogJzFmJywgdmFsdWU6IDEgfVxuICAgICAgICB9XG4gICAgKTtcbn1cblxuU2VwaWFGaWx0ZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShjb3JlLkFic3RyYWN0RmlsdGVyLnByb3RvdHlwZSk7XG5TZXBpYUZpbHRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBTZXBpYUZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gU2VwaWFGaWx0ZXI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKFNlcGlhRmlsdGVyLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFRoZSBzdHJlbmd0aCBvZiB0aGUgc2VwaWEuIGAxYCB3aWxsIGFwcGx5IHRoZSBmdWxsIHNlcGlhIGVmZmVjdCwgYW5kXG4gICAgICogYDBgIHdpbGwgbWFrZSB0aGUgb2JqZWN0IGl0cyBub3JtYWwgY29sb3IuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5TZXBpYUZpbHRlciNcbiAgICAgKi9cbiAgICBzZXBpYToge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVuaWZvcm1zLnNlcGlhLnZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy5zZXBpYS52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfVxufSk7XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uLy4uL2NvcmUnKTtcbi8vIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL3N1YnN0YWNrL2JyZnMvaXNzdWVzLzI1XG5cblxuLyoqXG4gKiBUaGUgQ29sb3JNYXRyaXhGaWx0ZXIgY2xhc3MgbGV0cyB5b3UgYXBwbHkgYSA0eDQgbWF0cml4IHRyYW5zZm9ybWF0aW9uIG9uIHRoZSBSR0JBXG4gKiBjb2xvciBhbmQgYWxwaGEgdmFsdWVzIG9mIGV2ZXJ5IHBpeGVsIG9uIHlvdXIgZGlzcGxheU9iamVjdCB0byBwcm9kdWNlIGEgcmVzdWx0XG4gKiB3aXRoIGEgbmV3IHNldCBvZiBSR0JBIGNvbG9yIGFuZCBhbHBoYSB2YWx1ZXMuIEl0J3MgcHJldHR5IHBvd2VyZnVsIVxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5BYnN0cmFjdEZpbHRlclxuICogQG1lbWJlcm9mIFBJWEkuZmlsdGVyc1xuICovXG5mdW5jdGlvbiBTaG9ja3dhdmVGaWx0ZXIoKVxue1xuICAgIGNvcmUuQWJzdHJhY3RGaWx0ZXIuY2FsbCh0aGlzLFxuICAgICAgICAvLyB2ZXJ0ZXggc2hhZGVyXG4gICAgICAgIG51bGwsXG4gICAgICAgIC8vIGZyYWdtZW50IHNoYWRlclxuICAgICAgICBcInByZWNpc2lvbiBsb3dwIGZsb2F0O1xcblxcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xcblxcbnVuaWZvcm0gc2FtcGxlcjJEIHVTYW1wbGVyO1xcblxcbnVuaWZvcm0gdmVjMiBjZW50ZXI7XFxudW5pZm9ybSB2ZWMzIHBhcmFtczsgLy8gMTAuMCwgMC44LCAwLjFcXG51bmlmb3JtIGZsb2F0IHRpbWU7XFxuXFxudm9pZCBtYWluKClcXG57XFxuICAgIHZlYzIgdXYgPSB2VGV4dHVyZUNvb3JkO1xcbiAgICB2ZWMyIHRleENvb3JkID0gdXY7XFxuXFxuICAgIGZsb2F0IGRpc3QgPSBkaXN0YW5jZSh1diwgY2VudGVyKTtcXG5cXG4gICAgaWYgKCAoZGlzdCA8PSAodGltZSArIHBhcmFtcy56KSkgJiYgKGRpc3QgPj0gKHRpbWUgLSBwYXJhbXMueikpIClcXG4gICAge1xcbiAgICAgICAgZmxvYXQgZGlmZiA9IChkaXN0IC0gdGltZSk7XFxuICAgICAgICBmbG9hdCBwb3dEaWZmID0gMS4wIC0gcG93KGFicyhkaWZmKnBhcmFtcy54KSwgcGFyYW1zLnkpO1xcblxcbiAgICAgICAgZmxvYXQgZGlmZlRpbWUgPSBkaWZmICAqIHBvd0RpZmY7XFxuICAgICAgICB2ZWMyIGRpZmZVViA9IG5vcm1hbGl6ZSh1diAtIGNlbnRlcik7XFxuICAgICAgICB0ZXhDb29yZCA9IHV2ICsgKGRpZmZVViAqIGRpZmZUaW1lKTtcXG4gICAgfVxcblxcbiAgICBnbF9GcmFnQ29sb3IgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHRleENvb3JkKTtcXG59XFxuXCIsXG4gICAgICAgIC8vIGN1c3RvbSB1bmlmb3Jtc1xuICAgICAgICB7XG4gICAgICAgICAgICBjZW50ZXI6IHsgdHlwZTogJ3YyJywgdmFsdWU6IHsgeDogMC41LCB5OiAwLjUgfSB9LFxuICAgICAgICAgICAgcGFyYW1zOiB7IHR5cGU6ICd2MycsIHZhbHVlOiB7IHg6IDEwLCB5OiAwLjgsIHo6IDAuMSB9IH0sXG4gICAgICAgICAgICB0aW1lOiB7IHR5cGU6ICcxZicsIHZhbHVlOiAwIH1cbiAgICAgICAgfVxuICAgICk7XG59XG5cblNob2Nrd2F2ZUZpbHRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuQWJzdHJhY3RGaWx0ZXIucHJvdG90eXBlKTtcblNob2Nrd2F2ZUZpbHRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBTaG9ja3dhdmVGaWx0ZXI7XG5tb2R1bGUuZXhwb3J0cyA9IFNob2Nrd2F2ZUZpbHRlcjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoU2hvY2t3YXZlRmlsdGVyLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIGNlbnRlciBvZiB0aGUgc2hvY2t3YXZlIGluIG5vcm1hbGl6ZWQgc2NyZWVuIGNvb3Jkcy4gVGhhdCBpc1xuICAgICAqICgwLDApIGlzIHRoZSB0b3AtbGVmdCBhbmQgKDEsMSkgaXMgdGhlIGJvdHRvbSByaWdodC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge29iamVjdDxzdHJpbmcsIG51bWJlcj59XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5TaG9ja3dhdmVGaWx0ZXIjXG4gICAgICovXG4gICAgY2VudGVyOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudW5pZm9ybXMuY2VudGVyLnZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy5jZW50ZXIudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgcGFyYW1zIG9mIHRoZSBzaG9ja3dhdmUuIFRoZXNlIG1vZGlmeSB0aGUgbG9vayBhbmQgYmVoYXZpb3Igb2ZcbiAgICAgKiB0aGUgc2hvY2t3YXZlIGFzIGl0IHJpcHBsZXMgb3V0LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7b2JqZWN0PHN0cmluZywgbnVtYmVyPn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLlNob2Nrd2F2ZUZpbHRlciNcbiAgICAgKi9cbiAgICBwYXJhbXM6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy51bmlmb3Jtcy5wYXJhbXMudmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLnBhcmFtcy52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfSxcbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBlbGFwc2VkIHRpbWUgb2YgdGhlIHNob2Nrd2F2ZS4gVGhpcyBjb250cm9scyB0aGUgc3BlZWQgYXQgd2hpY2hcbiAgICAgKiB0aGUgc2hvY2t3YXZlIHJpcHBsZXMgb3V0LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuU2hvY2t3YXZlRmlsdGVyI1xuICAgICAqL1xuICAgIHRpbWU6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy51bmlmb3Jtcy50aW1lLnZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy50aW1lLnZhbHVlID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG59KTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vLi4vY29yZScpO1xuLy8gQHNlZSBodHRwczovL2dpdGh1Yi5jb20vc3Vic3RhY2svYnJmcy9pc3N1ZXMvMjVcblxuXG4vKipcbiAqIEBhdXRob3IgVmljbyBAdmljb2NvdGVhXG4gKiBvcmlnaW5hbCBmaWx0ZXIgaHR0cHM6Ly9naXRodWIuY29tL2V2YW53L2dsZnguanMvYmxvYi9tYXN0ZXIvc3JjL2ZpbHRlcnMvYmx1ci90aWx0c2hpZnQuanMgYnkgRXZhbiBXYWxsYWNlIDogaHR0cDovL21hZGVieWV2YW4uY29tL1xuICovXG5cbi8qKlxuICogQSBUaWx0U2hpZnRBeGlzRmlsdGVyLlxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5BYnN0cmFjdEZpbHRlclxuICogQG1lbWJlcm9mIFBJWEkuZmlsdGVyc1xuICovXG5mdW5jdGlvbiBUaWx0U2hpZnRBeGlzRmlsdGVyKClcbntcbiAgICBjb3JlLkFic3RyYWN0RmlsdGVyLmNhbGwodGhpcyxcbiAgICAgICAgLy8gdmVydGV4IHNoYWRlclxuICAgICAgICBudWxsLFxuICAgICAgICAvLyBmcmFnbWVudCBzaGFkZXJcbiAgICAgICAgXCJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcXG5cXG52YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDtcXG5cXG51bmlmb3JtIHNhbXBsZXIyRCB1U2FtcGxlcjtcXG51bmlmb3JtIGZsb2F0IGJsdXI7XFxudW5pZm9ybSBmbG9hdCBncmFkaWVudEJsdXI7XFxudW5pZm9ybSB2ZWMyIHN0YXJ0O1xcbnVuaWZvcm0gdmVjMiBlbmQ7XFxudW5pZm9ybSB2ZWMyIGRlbHRhO1xcbnVuaWZvcm0gdmVjMiB0ZXhTaXplO1xcblxcbmZsb2F0IHJhbmRvbSh2ZWMzIHNjYWxlLCBmbG9hdCBzZWVkKVxcbntcXG4gICAgcmV0dXJuIGZyYWN0KHNpbihkb3QoZ2xfRnJhZ0Nvb3JkLnh5eiArIHNlZWQsIHNjYWxlKSkgKiA0Mzc1OC41NDUzICsgc2VlZCk7XFxufVxcblxcbnZvaWQgbWFpbih2b2lkKVxcbntcXG4gICAgdmVjNCBjb2xvciA9IHZlYzQoMC4wKTtcXG4gICAgZmxvYXQgdG90YWwgPSAwLjA7XFxuXFxuICAgIGZsb2F0IG9mZnNldCA9IHJhbmRvbSh2ZWMzKDEyLjk4OTgsIDc4LjIzMywgMTUxLjcxODIpLCAwLjApO1xcbiAgICB2ZWMyIG5vcm1hbCA9IG5vcm1hbGl6ZSh2ZWMyKHN0YXJ0LnkgLSBlbmQueSwgZW5kLnggLSBzdGFydC54KSk7XFxuICAgIGZsb2F0IHJhZGl1cyA9IHNtb290aHN0ZXAoMC4wLCAxLjAsIGFicyhkb3QodlRleHR1cmVDb29yZCAqIHRleFNpemUgLSBzdGFydCwgbm9ybWFsKSkgLyBncmFkaWVudEJsdXIpICogYmx1cjtcXG5cXG4gICAgZm9yIChmbG9hdCB0ID0gLTMwLjA7IHQgPD0gMzAuMDsgdCsrKVxcbiAgICB7XFxuICAgICAgICBmbG9hdCBwZXJjZW50ID0gKHQgKyBvZmZzZXQgLSAwLjUpIC8gMzAuMDtcXG4gICAgICAgIGZsb2F0IHdlaWdodCA9IDEuMCAtIGFicyhwZXJjZW50KTtcXG4gICAgICAgIHZlYzQgc2FtcGxlID0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2VGV4dHVyZUNvb3JkICsgZGVsdGEgLyB0ZXhTaXplICogcGVyY2VudCAqIHJhZGl1cyk7XFxuICAgICAgICBzYW1wbGUucmdiICo9IHNhbXBsZS5hO1xcbiAgICAgICAgY29sb3IgKz0gc2FtcGxlICogd2VpZ2h0O1xcbiAgICAgICAgdG90YWwgKz0gd2VpZ2h0O1xcbiAgICB9XFxuXFxuICAgIGdsX0ZyYWdDb2xvciA9IGNvbG9yIC8gdG90YWw7XFxuICAgIGdsX0ZyYWdDb2xvci5yZ2IgLz0gZ2xfRnJhZ0NvbG9yLmEgKyAwLjAwMDAxO1xcbn1cXG5cIixcbiAgICAgICAgLy8gY3VzdG9tIHVuaWZvcm1zXG4gICAgICAgIHtcbiAgICAgICAgICAgIGJsdXI6ICAgICAgICAgICB7IHR5cGU6ICcxZicsIHZhbHVlOiAxMDAgfSxcbiAgICAgICAgICAgIGdyYWRpZW50Qmx1cjogICB7IHR5cGU6ICcxZicsIHZhbHVlOiA2MDAgfSxcbiAgICAgICAgICAgIHN0YXJ0OiAgICAgICAgICB7IHR5cGU6ICd2MicsIHZhbHVlOiB7IHg6IDAsICAgIHk6IHdpbmRvdy5pbm5lckhlaWdodCAvIDIgfSB9LFxuICAgICAgICAgICAgZW5kOiAgICAgICAgICAgIHsgdHlwZTogJ3YyJywgdmFsdWU6IHsgeDogNjAwLCAgeTogd2luZG93LmlubmVySGVpZ2h0IC8gMiB9IH0sXG4gICAgICAgICAgICBkZWx0YTogICAgICAgICAgeyB0eXBlOiAndjInLCB2YWx1ZTogeyB4OiAzMCwgICB5OiAzMCB9IH0sXG4gICAgICAgICAgICB0ZXhTaXplOiAgICAgICAgeyB0eXBlOiAndjInLCB2YWx1ZTogeyB4OiB3aW5kb3cuaW5uZXJXaWR0aCwgeTogd2luZG93LmlubmVySGVpZ2h0IH0gfVxuICAgICAgICB9XG4gICAgKTtcblxuICAgIHRoaXMudXBkYXRlRGVsdGEoKTtcbn1cblxuVGlsdFNoaWZ0QXhpc0ZpbHRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuQWJzdHJhY3RGaWx0ZXIucHJvdG90eXBlKTtcblRpbHRTaGlmdEF4aXNGaWx0ZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gVGlsdFNoaWZ0QXhpc0ZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gVGlsdFNoaWZ0QXhpc0ZpbHRlcjtcblxuLyoqXG4gKiBVcGRhdGVzIHRoZSBmaWx0ZXIgZGVsdGEgdmFsdWVzLlxuICogVGhpcyBpcyBvdmVycmlkZGVuIGluIHRoZSBYIGFuZCBZIGZpbHRlcnMsIGRvZXMgbm90aGluZyBmb3IgdGhpcyBjbGFzcy5cbiAqXG4gKi9cblRpbHRTaGlmdEF4aXNGaWx0ZXIucHJvdG90eXBlLnVwZGF0ZURlbHRhID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLnVuaWZvcm1zLmRlbHRhLnZhbHVlLnggPSAwO1xuICAgIHRoaXMudW5pZm9ybXMuZGVsdGEudmFsdWUueSA9IDA7XG59O1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhUaWx0U2hpZnRBeGlzRmlsdGVyLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFRoZSBzdHJlbmd0aCBvZiB0aGUgYmx1ci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLlRpbHRTaGlmdEF4aXNGaWx0ZXIjXG4gICAgICovXG4gICAgYmx1cjoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVuaWZvcm1zLmJsdXIudmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLmJsdXIudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBUaGUgc3RyZW5ndGggb2YgdGhlIGdyYWRpZW50IGJsdXIuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5UaWx0U2hpZnRBeGlzRmlsdGVyI1xuICAgICAqL1xuICAgIGdyYWRpZW50Qmx1cjoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVuaWZvcm1zLmdyYWRpZW50Qmx1ci52YWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudW5pZm9ybXMuZ3JhZGllbnRCbHVyLnZhbHVlID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVGhlIFggdmFsdWUgdG8gc3RhcnQgdGhlIGVmZmVjdCBhdC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuUG9pbnR9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5UaWx0U2hpZnRBeGlzRmlsdGVyI1xuICAgICAqL1xuICAgIHN0YXJ0OiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudW5pZm9ybXMuc3RhcnQudmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLnN0YXJ0LnZhbHVlID0gdmFsdWU7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZURlbHRhKCk7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVGhlIFggdmFsdWUgdG8gZW5kIHRoZSBlZmZlY3QgYXQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlBvaW50fVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuVGlsdFNoaWZ0QXhpc0ZpbHRlciNcbiAgICAgKi9cbiAgICBlbmQ6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy51bmlmb3Jtcy5lbmQudmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLmVuZC52YWx1ZSA9IHZhbHVlO1xuICAgICAgICAgICAgdGhpcy51cGRhdGVEZWx0YSgpO1xuICAgICAgICB9XG4gICAgfVxufSk7XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uLy4uL2NvcmUnKSxcbiAgICBUaWx0U2hpZnRYRmlsdGVyID0gcmVxdWlyZSgnLi9UaWx0U2hpZnRYRmlsdGVyJyksXG4gICAgVGlsdFNoaWZ0WUZpbHRlciA9IHJlcXVpcmUoJy4vVGlsdFNoaWZ0WUZpbHRlcicpO1xuXG4vKipcbiAqIEBhdXRob3IgVmljbyBAdmljb2NvdGVhXG4gKiBvcmlnaW5hbCBmaWx0ZXIgaHR0cHM6Ly9naXRodWIuY29tL2V2YW53L2dsZnguanMvYmxvYi9tYXN0ZXIvc3JjL2ZpbHRlcnMvYmx1ci90aWx0c2hpZnQuanMgYnkgRXZhbiBXYWxsYWNlIDogaHR0cDovL21hZGVieWV2YW4uY29tL1xuICovXG5cbi8qKlxuICogQSBUaWx0U2hpZnQgRmlsdGVyLiBNYW5hZ2VzIHRoZSBwYXNzIG9mIGJvdGggYSBUaWx0U2hpZnRYRmlsdGVyIGFuZCBUaWx0U2hpZnRZRmlsdGVyLlxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5BYnN0cmFjdEZpbHRlclxuICogQG1lbWJlcm9mIFBJWEkuZmlsdGVyc1xuICovXG5mdW5jdGlvbiBUaWx0U2hpZnRGaWx0ZXIoKVxue1xuICAgIGNvcmUuQWJzdHJhY3RGaWx0ZXIuY2FsbCh0aGlzKTtcblxuICAgIHRoaXMudGlsdFNoaWZ0WEZpbHRlciA9IG5ldyBUaWx0U2hpZnRYRmlsdGVyKCk7XG4gICAgdGhpcy50aWx0U2hpZnRZRmlsdGVyID0gbmV3IFRpbHRTaGlmdFlGaWx0ZXIoKTtcbn1cblxuVGlsdFNoaWZ0RmlsdGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoY29yZS5BYnN0cmFjdEZpbHRlci5wcm90b3R5cGUpO1xuVGlsdFNoaWZ0RmlsdGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFRpbHRTaGlmdEZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gVGlsdFNoaWZ0RmlsdGVyO1xuXG5UaWx0U2hpZnRGaWx0ZXIucHJvdG90eXBlLmFwcGx5RmlsdGVyID0gZnVuY3Rpb24gKHJlbmRlcmVyLCBpbnB1dCwgb3V0cHV0KVxue1xuICAgIHZhciByZW5kZXJUYXJnZXQgPSByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLmdldFJlbmRlclRhcmdldCh0cnVlKTtcblxuICAgIHRoaXMudGlsdFNoaWZ0WEZpbHRlci5hcHBseUZpbHRlcihyZW5kZXJlciwgaW5wdXQsIHJlbmRlclRhcmdldCk7XG5cbiAgICB0aGlzLnRpbHRTaGlmdFlGaWx0ZXIuYXBwbHlGaWx0ZXIocmVuZGVyZXIsIHJlbmRlclRhcmdldCwgb3V0cHV0KTtcblxuICAgIHJlbmRlcmVyLmZpbHRlck1hbmFnZXIucmV0dXJuUmVuZGVyVGFyZ2V0KHJlbmRlclRhcmdldCk7XG59O1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhUaWx0U2hpZnRGaWx0ZXIucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogVGhlIHN0cmVuZ3RoIG9mIHRoZSBibHVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuVGlsdFNoaWZ0RmlsdGVyI1xuICAgICAqL1xuICAgIGJsdXI6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy50aWx0U2hpZnRYRmlsdGVyLmJsdXI7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnRpbHRTaGlmdFhGaWx0ZXIuYmx1ciA9IHRoaXMudGlsdFNoaWZ0WUZpbHRlci5ibHVyID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVGhlIHN0cmVuZ3RoIG9mIHRoZSBncmFkaWVudCBibHVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuVGlsdFNoaWZ0RmlsdGVyI1xuICAgICAqL1xuICAgIGdyYWRpZW50Qmx1cjoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnRpbHRTaGlmdFhGaWx0ZXIuZ3JhZGllbnRCbHVyO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy50aWx0U2hpZnRYRmlsdGVyLmdyYWRpZW50Qmx1ciA9IHRoaXMudGlsdFNoaWZ0WUZpbHRlci5ncmFkaWVudEJsdXIgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBUaGUgWSB2YWx1ZSB0byBzdGFydCB0aGUgZWZmZWN0IGF0LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuVGlsdFNoaWZ0RmlsdGVyI1xuICAgICAqL1xuICAgIHN0YXJ0OiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudGlsdFNoaWZ0WEZpbHRlci5zdGFydDtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudGlsdFNoaWZ0WEZpbHRlci5zdGFydCA9IHRoaXMudGlsdFNoaWZ0WUZpbHRlci5zdGFydCA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFRoZSBZIHZhbHVlIHRvIGVuZCB0aGUgZWZmZWN0IGF0LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuVGlsdFNoaWZ0RmlsdGVyI1xuICAgICAqL1xuICAgIGVuZDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnRpbHRTaGlmdFhGaWx0ZXIuZW5kO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy50aWx0U2hpZnRYRmlsdGVyLmVuZCA9IHRoaXMudGlsdFNoaWZ0WUZpbHRlci5lbmQgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuIiwidmFyIFRpbHRTaGlmdEF4aXNGaWx0ZXIgPSByZXF1aXJlKCcuL1RpbHRTaGlmdEF4aXNGaWx0ZXInKTtcblxuLyoqXG4gKiBAYXV0aG9yIFZpY28gQHZpY29jb3RlYVxuICogb3JpZ2luYWwgZmlsdGVyIGh0dHBzOi8vZ2l0aHViLmNvbS9ldmFudy9nbGZ4LmpzL2Jsb2IvbWFzdGVyL3NyYy9maWx0ZXJzL2JsdXIvdGlsdHNoaWZ0LmpzIGJ5IEV2YW4gV2FsbGFjZSA6IGh0dHA6Ly9tYWRlYnlldmFuLmNvbS9cbiAqL1xuXG4vKipcbiAqIEEgVGlsdFNoaWZ0WEZpbHRlci5cbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuVGlsdFNoaWZ0QXhpc0ZpbHRlclxuICogQG1lbWJlcm9mIFBJWEkuZmlsdGVyc1xuICovXG5mdW5jdGlvbiBUaWx0U2hpZnRYRmlsdGVyKClcbntcbiAgICBUaWx0U2hpZnRBeGlzRmlsdGVyLmNhbGwodGhpcyk7XG59XG5cblRpbHRTaGlmdFhGaWx0ZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShUaWx0U2hpZnRBeGlzRmlsdGVyLnByb3RvdHlwZSk7XG5UaWx0U2hpZnRYRmlsdGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFRpbHRTaGlmdFhGaWx0ZXI7XG5tb2R1bGUuZXhwb3J0cyA9IFRpbHRTaGlmdFhGaWx0ZXI7XG5cbi8qKlxuICogVXBkYXRlcyB0aGUgZmlsdGVyIGRlbHRhIHZhbHVlcy5cbiAqXG4gKi9cblRpbHRTaGlmdFhGaWx0ZXIucHJvdG90eXBlLnVwZGF0ZURlbHRhID0gZnVuY3Rpb24gKClcbntcbiAgICB2YXIgZHggPSB0aGlzLnVuaWZvcm1zLmVuZC52YWx1ZS54IC0gdGhpcy51bmlmb3Jtcy5zdGFydC52YWx1ZS54O1xuICAgIHZhciBkeSA9IHRoaXMudW5pZm9ybXMuZW5kLnZhbHVlLnkgLSB0aGlzLnVuaWZvcm1zLnN0YXJ0LnZhbHVlLnk7XG4gICAgdmFyIGQgPSBNYXRoLnNxcnQoZHggKiBkeCArIGR5ICogZHkpO1xuXG4gICAgdGhpcy51bmlmb3Jtcy5kZWx0YS52YWx1ZS54ID0gZHggLyBkO1xuICAgIHRoaXMudW5pZm9ybXMuZGVsdGEudmFsdWUueSA9IGR5IC8gZDtcbn07XG4iLCJ2YXIgVGlsdFNoaWZ0QXhpc0ZpbHRlciA9IHJlcXVpcmUoJy4vVGlsdFNoaWZ0QXhpc0ZpbHRlcicpO1xuXG4vKipcbiAqIEBhdXRob3IgVmljbyBAdmljb2NvdGVhXG4gKiBvcmlnaW5hbCBmaWx0ZXIgaHR0cHM6Ly9naXRodWIuY29tL2V2YW53L2dsZnguanMvYmxvYi9tYXN0ZXIvc3JjL2ZpbHRlcnMvYmx1ci90aWx0c2hpZnQuanMgYnkgRXZhbiBXYWxsYWNlIDogaHR0cDovL21hZGVieWV2YW4uY29tL1xuICovXG5cbi8qKlxuICogQSBUaWx0U2hpZnRZRmlsdGVyLlxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5UaWx0U2hpZnRBeGlzRmlsdGVyXG4gKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzXG4gKi9cbmZ1bmN0aW9uIFRpbHRTaGlmdFlGaWx0ZXIoKVxue1xuICAgIFRpbHRTaGlmdEF4aXNGaWx0ZXIuY2FsbCh0aGlzKTtcbn1cblxuVGlsdFNoaWZ0WUZpbHRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFRpbHRTaGlmdEF4aXNGaWx0ZXIucHJvdG90eXBlKTtcblRpbHRTaGlmdFlGaWx0ZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gVGlsdFNoaWZ0WUZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gVGlsdFNoaWZ0WUZpbHRlcjtcblxuLyoqXG4gKiBVcGRhdGVzIHRoZSBmaWx0ZXIgZGVsdGEgdmFsdWVzLlxuICpcbiAqL1xuVGlsdFNoaWZ0WUZpbHRlci5wcm90b3R5cGUudXBkYXRlRGVsdGEgPSBmdW5jdGlvbiAoKVxue1xuICAgIHZhciBkeCA9IHRoaXMudW5pZm9ybXMuZW5kLnZhbHVlLnggLSB0aGlzLnVuaWZvcm1zLnN0YXJ0LnZhbHVlLng7XG4gICAgdmFyIGR5ID0gdGhpcy51bmlmb3Jtcy5lbmQudmFsdWUueSAtIHRoaXMudW5pZm9ybXMuc3RhcnQudmFsdWUueTtcbiAgICB2YXIgZCA9IE1hdGguc3FydChkeCAqIGR4ICsgZHkgKiBkeSk7XG5cbiAgICB0aGlzLnVuaWZvcm1zLmRlbHRhLnZhbHVlLnggPSAtZHkgLyBkO1xuICAgIHRoaXMudW5pZm9ybXMuZGVsdGEudmFsdWUueSA9IGR4IC8gZDtcbn07XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uLy4uL2NvcmUnKTtcbi8vIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL3N1YnN0YWNrL2JyZnMvaXNzdWVzLzI1XG5cblxuLyoqXG4gKiBUaGlzIGZpbHRlciBhcHBsaWVzIGEgdHdpc3QgZWZmZWN0IG1ha2luZyBkaXNwbGF5IG9iamVjdHMgYXBwZWFyIHR3aXN0ZWQgaW4gdGhlIGdpdmVuIGRpcmVjdGlvbi5cbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQWJzdHJhY3RGaWx0ZXJcbiAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnNcbiAqL1xuZnVuY3Rpb24gVHdpc3RGaWx0ZXIoKVxue1xuICAgIGNvcmUuQWJzdHJhY3RGaWx0ZXIuY2FsbCh0aGlzLFxuICAgICAgICAvLyB2ZXJ0ZXggc2hhZGVyXG4gICAgICAgIG51bGwsXG4gICAgICAgIC8vIGZyYWdtZW50IHNoYWRlclxuICAgICAgICBcInByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xcblxcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xcblxcbnVuaWZvcm0gc2FtcGxlcjJEIHVTYW1wbGVyO1xcbnVuaWZvcm0gZmxvYXQgcmFkaXVzO1xcbnVuaWZvcm0gZmxvYXQgYW5nbGU7XFxudW5pZm9ybSB2ZWMyIG9mZnNldDtcXG5cXG52b2lkIG1haW4odm9pZClcXG57XFxuICAgdmVjMiBjb29yZCA9IHZUZXh0dXJlQ29vcmQgLSBvZmZzZXQ7XFxuICAgZmxvYXQgZGlzdCA9IGxlbmd0aChjb29yZCk7XFxuXFxuICAgaWYgKGRpc3QgPCByYWRpdXMpXFxuICAge1xcbiAgICAgICBmbG9hdCByYXRpbyA9IChyYWRpdXMgLSBkaXN0KSAvIHJhZGl1cztcXG4gICAgICAgZmxvYXQgYW5nbGVNb2QgPSByYXRpbyAqIHJhdGlvICogYW5nbGU7XFxuICAgICAgIGZsb2F0IHMgPSBzaW4oYW5nbGVNb2QpO1xcbiAgICAgICBmbG9hdCBjID0gY29zKGFuZ2xlTW9kKTtcXG4gICAgICAgY29vcmQgPSB2ZWMyKGNvb3JkLnggKiBjIC0gY29vcmQueSAqIHMsIGNvb3JkLnggKiBzICsgY29vcmQueSAqIGMpO1xcbiAgIH1cXG5cXG4gICBnbF9GcmFnQ29sb3IgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIGNvb3JkK29mZnNldCk7XFxufVxcblwiLFxuICAgICAgICAvLyBjdXN0b20gdW5pZm9ybXNcbiAgICAgICAge1xuICAgICAgICAgICAgcmFkaXVzOiAgICAgeyB0eXBlOiAnMWYnLCB2YWx1ZTogMC41IH0sXG4gICAgICAgICAgICBhbmdsZTogICAgICB7IHR5cGU6ICcxZicsIHZhbHVlOiA1IH0sXG4gICAgICAgICAgICBvZmZzZXQ6ICAgICB7IHR5cGU6ICd2MicsIHZhbHVlOiB7IHg6IDAuNSwgeTogMC41IH0gfVxuICAgICAgICB9XG4gICAgKTtcbn1cblxuVHdpc3RGaWx0ZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShjb3JlLkFic3RyYWN0RmlsdGVyLnByb3RvdHlwZSk7XG5Ud2lzdEZpbHRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBUd2lzdEZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gVHdpc3RGaWx0ZXI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKFR3aXN0RmlsdGVyLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFRoaXMgcG9pbnQgZGVzY3JpYmVzIHRoZSB0aGUgb2Zmc2V0IG9mIHRoZSB0d2lzdC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuUG9pbnR9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5Ud2lzdEZpbHRlciNcbiAgICAgKi9cbiAgICBvZmZzZXQ6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy51bmlmb3Jtcy5vZmZzZXQudmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLm9mZnNldC52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFRoaXMgcmFkaXVzIG9mIHRoZSB0d2lzdC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLlR3aXN0RmlsdGVyI1xuICAgICAqL1xuICAgIHJhZGl1czoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVuaWZvcm1zLnJhZGl1cy52YWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudW5pZm9ybXMucmFkaXVzLnZhbHVlID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVGhpcyBhbmdsZSBvZiB0aGUgdHdpc3QuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5Ud2lzdEZpbHRlciNcbiAgICAgKi9cbiAgICBhbmdsZToge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVuaWZvcm1zLmFuZ2xlLnZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy5hbmdsZS52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfVxufSk7XG4iLCIvLyBydW4gdGhlIHBvbHlmaWxsc1xucmVxdWlyZSgnLi9wb2x5ZmlsbCcpO1xuXG52YXIgY29yZSA9IG1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9jb3JlJyk7XG5cbi8vIGFkZCBjb3JlIHBsdWdpbnMuXG5jb3JlLmV4dHJhcyAgICAgICAgID0gcmVxdWlyZSgnLi9leHRyYXMnKTtcbmNvcmUuZmlsdGVycyAgICAgICAgPSByZXF1aXJlKCcuL2ZpbHRlcnMnKTtcbmNvcmUuaW50ZXJhY3Rpb24gICAgPSByZXF1aXJlKCcuL2ludGVyYWN0aW9uJyk7XG5jb3JlLmxvYWRlcnMgICAgICAgID0gcmVxdWlyZSgnLi9sb2FkZXJzJyk7XG5jb3JlLm1lc2ggICAgICAgICAgID0gcmVxdWlyZSgnLi9tZXNoJyk7XG5jb3JlLmFjY2Vzc2liaWxpdHkgID0gcmVxdWlyZSgnLi9hY2Nlc3NpYmlsaXR5Jyk7XG5cbi8vIGV4cG9ydCBhIHByZW1hZGUgbG9hZGVyIGluc3RhbmNlXG4vKipcbiAqIEEgcHJlbWFkZSBpbnN0YW5jZSBvZiB0aGUgbG9hZGVyIHRoYXQgY2FuIGJlIHVzZWQgdG8gbG9hZGVyIHJlc291cmNlcy5cbiAqXG4gKiBAbmFtZSBsb2FkZXJcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcHJvcGVydHkge1BJWEkubG9hZGVycy5Mb2FkZXJ9XG4gKi9cbmNvcmUubG9hZGVyID0gbmV3IGNvcmUubG9hZGVycy5Mb2FkZXIoKTtcblxuLy8gbWl4aW4gdGhlIGRlcHJlY2F0aW9uIGZlYXR1cmVzLlxuT2JqZWN0LmFzc2lnbihjb3JlLCByZXF1aXJlKCcuL2RlcHJlY2F0aW9uJykpO1xuXG4vLyBBbHdheXMgZXhwb3J0IHBpeGkgZ2xvYmFsbHkuXG5nbG9iYWwuUElYSSA9IGNvcmU7XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uL2NvcmUnKTtcblxuLyoqXG4gKiBIb2xkcyBhbGwgaW5mb3JtYXRpb24gcmVsYXRlZCB0byBhbiBJbnRlcmFjdGlvbiBldmVudFxuICpcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWEkuaW50ZXJhY3Rpb25cbiAqL1xuZnVuY3Rpb24gSW50ZXJhY3Rpb25EYXRhKClcbntcbiAgICAvKipcbiAgICAgKiBUaGlzIHBvaW50IHN0b3JlcyB0aGUgZ2xvYmFsIGNvb3JkcyBvZiB3aGVyZSB0aGUgdG91Y2gvbW91c2UgZXZlbnQgaGFwcGVuZWRcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuUG9pbnR9XG4gICAgICovXG4gICAgdGhpcy5nbG9iYWwgPSBuZXcgY29yZS5Qb2ludCgpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHRhcmdldCBTcHJpdGUgdGhhdCB3YXMgaW50ZXJhY3RlZCB3aXRoXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlNwcml0ZX1cbiAgICAgKi9cbiAgICB0aGlzLnRhcmdldCA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBXaGVuIHBhc3NlZCB0byBhbiBldmVudCBoYW5kbGVyLCB0aGlzIHdpbGwgYmUgdGhlIG9yaWdpbmFsIERPTSBFdmVudCB0aGF0IHdhcyBjYXB0dXJlZFxuICAgICAqXG4gICAgICogQG1lbWJlciB7RXZlbnR9XG4gICAgICovXG4gICAgdGhpcy5vcmlnaW5hbEV2ZW50ID0gbnVsbDtcbn1cblxuSW50ZXJhY3Rpb25EYXRhLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IEludGVyYWN0aW9uRGF0YTtcbm1vZHVsZS5leHBvcnRzID0gSW50ZXJhY3Rpb25EYXRhO1xuXG4vKipcbiAqIFRoaXMgd2lsbCByZXR1cm4gdGhlIGxvY2FsIGNvb3JkaW5hdGVzIG9mIHRoZSBzcGVjaWZpZWQgZGlzcGxheU9iamVjdCBmb3IgdGhpcyBJbnRlcmFjdGlvbkRhdGFcbiAqXG4gKiBAcGFyYW0gZGlzcGxheU9iamVjdCB7UElYSS5EaXNwbGF5T2JqZWN0fSBUaGUgRGlzcGxheU9iamVjdCB0aGF0IHlvdSB3b3VsZCBsaWtlIHRoZSBsb2NhbCBjb29yZHMgb2ZmXG4gKiBAcGFyYW0gW3BvaW50XSB7UElYSS5Qb2ludH0gQSBQb2ludCBvYmplY3QgaW4gd2hpY2ggdG8gc3RvcmUgdGhlIHZhbHVlLCBvcHRpb25hbCAob3RoZXJ3aXNlIHdpbGwgY3JlYXRlIGEgbmV3IHBvaW50KVxuICogQHBhcmFtIFtnbG9iYWxQb3NdIHtQSVhJLlBvaW50fSBBIFBvaW50IG9iamVjdCBjb250YWluaW5nIHlvdXIgY3VzdG9tIGdsb2JhbCBjb29yZHMsIG9wdGlvbmFsIChvdGhlcndpc2Ugd2lsbCB1c2UgdGhlIGN1cnJlbnQgZ2xvYmFsIGNvb3JkcylcbiAqIEByZXR1cm4ge1BJWEkuUG9pbnR9IEEgcG9pbnQgY29udGFpbmluZyB0aGUgY29vcmRpbmF0ZXMgb2YgdGhlIEludGVyYWN0aW9uRGF0YSBwb3NpdGlvbiByZWxhdGl2ZSB0byB0aGUgRGlzcGxheU9iamVjdFxuICovXG5JbnRlcmFjdGlvbkRhdGEucHJvdG90eXBlLmdldExvY2FsUG9zaXRpb24gPSBmdW5jdGlvbiAoZGlzcGxheU9iamVjdCwgcG9pbnQsIGdsb2JhbFBvcylcbntcbiAgICByZXR1cm4gZGlzcGxheU9iamVjdC53b3JsZFRyYW5zZm9ybS5hcHBseUludmVyc2UoZ2xvYmFsUG9zIHx8IHRoaXMuZ2xvYmFsLCBwb2ludCk7XG59O1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi9jb3JlJyksXG4gICAgSW50ZXJhY3Rpb25EYXRhID0gcmVxdWlyZSgnLi9JbnRlcmFjdGlvbkRhdGEnKTtcblxuLy8gTWl4IGludGVyYWN0aXZlVGFyZ2V0IGludG8gY29yZS5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZVxuT2JqZWN0LmFzc2lnbihcbiAgICBjb3JlLkRpc3BsYXlPYmplY3QucHJvdG90eXBlLFxuICAgIHJlcXVpcmUoJy4vaW50ZXJhY3RpdmVUYXJnZXQnKVxuKTtcblxuLyoqXG4gKiBUaGUgaW50ZXJhY3Rpb24gbWFuYWdlciBkZWFscyB3aXRoIG1vdXNlIGFuZCB0b3VjaCBldmVudHMuIEFueSBEaXNwbGF5T2JqZWN0IGNhbiBiZSBpbnRlcmFjdGl2ZVxuICogaWYgaXRzIGludGVyYWN0aXZlIHBhcmFtZXRlciBpcyBzZXQgdG8gdHJ1ZVxuICogVGhpcyBtYW5hZ2VyIGFsc28gc3VwcG9ydHMgbXVsdGl0b3VjaC5cbiAqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJLmludGVyYWN0aW9uXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuQ2FudmFzUmVuZGVyZXJ8UElYSS5XZWJHTFJlbmRlcmVyfSBBIHJlZmVyZW5jZSB0byB0aGUgY3VycmVudCByZW5kZXJlclxuICogQHBhcmFtIFtvcHRpb25zXSB7b2JqZWN0fVxuICogQHBhcmFtIFtvcHRpb25zLmF1dG9QcmV2ZW50RGVmYXVsdD10cnVlXSB7Ym9vbGVhbn0gU2hvdWxkIHRoZSBtYW5hZ2VyIGF1dG9tYXRpY2FsbHkgcHJldmVudCBkZWZhdWx0IGJyb3dzZXIgYWN0aW9ucy5cbiAqIEBwYXJhbSBbb3B0aW9ucy5pbnRlcmFjdGlvbkZyZXF1ZW5jeT0xMF0ge251bWJlcn0gRnJlcXVlbmN5IGluY3JlYXNlcyB0aGUgaW50ZXJhY3Rpb24gZXZlbnRzIHdpbGwgYmUgY2hlY2tlZC5cbiAqL1xuZnVuY3Rpb24gSW50ZXJhY3Rpb25NYW5hZ2VyKHJlbmRlcmVyLCBvcHRpb25zKVxue1xuICAgIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuXG4gICAgLyoqXG4gICAgICogVGhlIHJlbmRlcmVyIHRoaXMgaW50ZXJhY3Rpb24gbWFuYWdlciB3b3JrcyBmb3IuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlN5c3RlbVJlbmRlcmVyfVxuICAgICAqL1xuICAgIHRoaXMucmVuZGVyZXIgPSByZW5kZXJlcjtcblxuICAgIC8qKlxuICAgICAqIFNob3VsZCBkZWZhdWx0IGJyb3dzZXIgYWN0aW9ucyBhdXRvbWF0aWNhbGx5IGJlIHByZXZlbnRlZC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICogQGRlZmF1bHQgdHJ1ZVxuICAgICAqL1xuICAgIHRoaXMuYXV0b1ByZXZlbnREZWZhdWx0ID0gb3B0aW9ucy5hdXRvUHJldmVudERlZmF1bHQgIT09IHVuZGVmaW5lZCA/IG9wdGlvbnMuYXV0b1ByZXZlbnREZWZhdWx0IDogdHJ1ZTtcblxuICAgIC8qKlxuICAgICAqIEFzIHRoaXMgZnJlcXVlbmN5IGluY3JlYXNlcyB0aGUgaW50ZXJhY3Rpb24gZXZlbnRzIHdpbGwgYmUgY2hlY2tlZCBtb3JlIG9mdGVuLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDEwXG4gICAgICovXG4gICAgdGhpcy5pbnRlcmFjdGlvbkZyZXF1ZW5jeSA9IG9wdGlvbnMuaW50ZXJhY3Rpb25GcmVxdWVuY3kgfHwgMTA7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgbW91c2UgZGF0YVxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5pbnRlcmFjdGlvbi5JbnRlcmFjdGlvbkRhdGF9XG4gICAgICovXG4gICAgdGhpcy5tb3VzZSA9IG5ldyBJbnRlcmFjdGlvbkRhdGEoKTtcblxuICAgIC8qKlxuICAgICAqIEFuIGV2ZW50IGRhdGEgb2JqZWN0IHRvIGhhbmRsZSBhbGwgdGhlIGV2ZW50IHRyYWNraW5nL2Rpc3BhdGNoaW5nXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtvYmplY3R9XG4gICAgICovXG4gICAgdGhpcy5ldmVudERhdGEgPSB7XG4gICAgICAgIHN0b3BwZWQ6IGZhbHNlLFxuICAgICAgICB0YXJnZXQ6IG51bGwsXG4gICAgICAgIHR5cGU6IG51bGwsXG4gICAgICAgIGRhdGE6IHRoaXMubW91c2UsXG4gICAgICAgIHN0b3BQcm9wYWdhdGlvbjpmdW5jdGlvbigpe1xuICAgICAgICAgICAgdGhpcy5zdG9wcGVkID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH07XG5cbiAgICAvKipcbiAgICAgKiBUaW55IGxpdHRsZSBpbnRlcmFjdGl2ZURhdGEgcG9vbCAhXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLmludGVyYWN0aW9uLkludGVyYWN0aW9uRGF0YVtdfVxuICAgICAqL1xuICAgIHRoaXMuaW50ZXJhY3RpdmVEYXRhUG9vbCA9IFtdO1xuXG4gICAgLyoqXG4gICAgICogVGhlIERPTSBlbGVtZW50IHRvIGJpbmQgdG8uXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtIVE1MRWxlbWVudH1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuaW50ZXJhY3Rpb25ET01FbGVtZW50ID0gbnVsbDtcblxuICAgIC8qKlxuICAgICAqIEhhdmUgZXZlbnRzIGJlZW4gYXR0YWNoZWQgdG8gdGhlIGRvbSBlbGVtZW50P1xuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuZXZlbnRzQWRkZWQgPSBmYWxzZTtcblxuICAgIC8vdGhpcyB3aWxsIG1ha2UgaXQgc28gdGhhdCB5b3UgZG9uJ3QgaGF2ZSB0byBjYWxsIGJpbmQgYWxsIHRoZSB0aW1lXG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtGdW5jdGlvbn1cbiAgICAgKi9cbiAgICB0aGlzLm9uTW91c2VVcCA9IHRoaXMub25Nb3VzZVVwLmJpbmQodGhpcyk7XG4gICAgdGhpcy5wcm9jZXNzTW91c2VVcCA9IHRoaXMucHJvY2Vzc01vdXNlVXAuYmluZCggdGhpcyApO1xuXG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtGdW5jdGlvbn1cbiAgICAgKi9cbiAgICB0aGlzLm9uTW91c2VEb3duID0gdGhpcy5vbk1vdXNlRG93bi5iaW5kKHRoaXMpO1xuICAgIHRoaXMucHJvY2Vzc01vdXNlRG93biA9IHRoaXMucHJvY2Vzc01vdXNlRG93bi5iaW5kKCB0aGlzICk7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtGdW5jdGlvbn1cbiAgICAgKi9cbiAgICB0aGlzLm9uTW91c2VNb3ZlID0gdGhpcy5vbk1vdXNlTW92ZS5iaW5kKCB0aGlzICk7XG4gICAgdGhpcy5wcm9jZXNzTW91c2VNb3ZlID0gdGhpcy5wcm9jZXNzTW91c2VNb3ZlLmJpbmQoIHRoaXMgKTtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge0Z1bmN0aW9ufVxuICAgICAqL1xuICAgIHRoaXMub25Nb3VzZU91dCA9IHRoaXMub25Nb3VzZU91dC5iaW5kKHRoaXMpO1xuICAgIHRoaXMucHJvY2Vzc01vdXNlT3Zlck91dCA9IHRoaXMucHJvY2Vzc01vdXNlT3Zlck91dC5iaW5kKCB0aGlzICk7XG5cblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge0Z1bmN0aW9ufVxuICAgICAqL1xuICAgIHRoaXMub25Ub3VjaFN0YXJ0ID0gdGhpcy5vblRvdWNoU3RhcnQuYmluZCh0aGlzKTtcbiAgICB0aGlzLnByb2Nlc3NUb3VjaFN0YXJ0ID0gdGhpcy5wcm9jZXNzVG91Y2hTdGFydC5iaW5kKHRoaXMpO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7RnVuY3Rpb259XG4gICAgICovXG4gICAgdGhpcy5vblRvdWNoRW5kID0gdGhpcy5vblRvdWNoRW5kLmJpbmQodGhpcyk7XG4gICAgdGhpcy5wcm9jZXNzVG91Y2hFbmQgPSB0aGlzLnByb2Nlc3NUb3VjaEVuZC5iaW5kKHRoaXMpO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7RnVuY3Rpb259XG4gICAgICovXG4gICAgdGhpcy5vblRvdWNoTW92ZSA9IHRoaXMub25Ub3VjaE1vdmUuYmluZCh0aGlzKTtcbiAgICB0aGlzLnByb2Nlc3NUb3VjaE1vdmUgPSB0aGlzLnByb2Nlc3NUb3VjaE1vdmUuYmluZCh0aGlzKTtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLmxhc3QgPSAwO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGNzcyBzdHlsZSBvZiB0aGUgY3Vyc29yIHRoYXQgaXMgYmVpbmcgdXNlZFxuICAgICAqIEBtZW1iZXIge3N0cmluZ31cbiAgICAgKi9cbiAgICB0aGlzLmN1cnJlbnRDdXJzb3JTdHlsZSA9ICdpbmhlcml0JztcblxuICAgIC8qKlxuICAgICAqIEludGVybmFsIGNhY2hlZCB2YXJcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlBvaW50fVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fdGVtcFBvaW50ID0gbmV3IGNvcmUuUG9pbnQoKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBjdXJyZW50IHJlc29sdXRpb25cbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy5yZXNvbHV0aW9uID0gMTtcblxuICAgIHRoaXMuc2V0VGFyZ2V0RWxlbWVudCh0aGlzLnJlbmRlcmVyLnZpZXcsIHRoaXMucmVuZGVyZXIucmVzb2x1dGlvbik7XG59XG5cbkludGVyYWN0aW9uTWFuYWdlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBJbnRlcmFjdGlvbk1hbmFnZXI7XG5tb2R1bGUuZXhwb3J0cyA9IEludGVyYWN0aW9uTWFuYWdlcjtcblxuLyoqXG4gKiBTZXRzIHRoZSBET00gZWxlbWVudCB3aGljaCB3aWxsIHJlY2VpdmUgbW91c2UvdG91Y2ggZXZlbnRzLiBUaGlzIGlzIHVzZWZ1bCBmb3Igd2hlbiB5b3UgaGF2ZVxuICogb3RoZXIgRE9NIGVsZW1lbnRzIG9uIHRvcCBvZiB0aGUgcmVuZGVyZXJzIENhbnZhcyBlbGVtZW50LiBXaXRoIHRoaXMgeW91J2xsIGJlIGJhbGUgdG8gZGVsZXRlZ2F0ZVxuICogYW5vdGhlciBET00gZWxlbWVudCB0byByZWNlaXZlIHRob3NlIGV2ZW50cy5cbiAqXG4gKiBAcGFyYW0gZWxlbWVudCB7SFRNTEVsZW1lbnR9IHRoZSBET00gZWxlbWVudCB3aGljaCB3aWxsIHJlY2VpdmUgbW91c2UgYW5kIHRvdWNoIGV2ZW50cy5cbiAqIEBwYXJhbSBbcmVzb2x1dGlvbj0xXSB7bnVtYmVyfSBUSGUgcmVzb2x1dGlvbiBvZiB0aGUgbmV3IGVsZW1lbnQgKHJlbGF0aXZlIHRvIHRoZSBjYW52YXMpLlxuICogQHByaXZhdGVcbiAqL1xuSW50ZXJhY3Rpb25NYW5hZ2VyLnByb3RvdHlwZS5zZXRUYXJnZXRFbGVtZW50ID0gZnVuY3Rpb24gKGVsZW1lbnQsIHJlc29sdXRpb24pXG57XG4gICAgdGhpcy5yZW1vdmVFdmVudHMoKTtcblxuICAgIHRoaXMuaW50ZXJhY3Rpb25ET01FbGVtZW50ID0gZWxlbWVudDtcblxuICAgIHRoaXMucmVzb2x1dGlvbiA9IHJlc29sdXRpb24gfHwgMTtcblxuICAgIHRoaXMuYWRkRXZlbnRzKCk7XG59O1xuXG4vKipcbiAqIFJlZ2lzdGVycyBhbGwgdGhlIERPTSBldmVudHNcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5JbnRlcmFjdGlvbk1hbmFnZXIucHJvdG90eXBlLmFkZEV2ZW50cyA9IGZ1bmN0aW9uICgpXG57XG4gICAgaWYgKCF0aGlzLmludGVyYWN0aW9uRE9NRWxlbWVudClcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb3JlLnRpY2tlci5zaGFyZWQuYWRkKHRoaXMudXBkYXRlLCB0aGlzKTtcblxuICAgIGlmICh3aW5kb3cubmF2aWdhdG9yLm1zUG9pbnRlckVuYWJsZWQpXG4gICAge1xuICAgICAgICB0aGlzLmludGVyYWN0aW9uRE9NRWxlbWVudC5zdHlsZVsnLW1zLWNvbnRlbnQtem9vbWluZyddID0gJ25vbmUnO1xuICAgICAgICB0aGlzLmludGVyYWN0aW9uRE9NRWxlbWVudC5zdHlsZVsnLW1zLXRvdWNoLWFjdGlvbiddID0gJ25vbmUnO1xuICAgIH1cblxuICAgIHdpbmRvdy5kb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdtb3VzZW1vdmUnLCAgICB0aGlzLm9uTW91c2VNb3ZlLCB0cnVlKTtcbiAgICB0aGlzLmludGVyYWN0aW9uRE9NRWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCdtb3VzZWRvd24nLCAgICB0aGlzLm9uTW91c2VEb3duLCB0cnVlKTtcbiAgICB0aGlzLmludGVyYWN0aW9uRE9NRWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCdtb3VzZW91dCcsICAgICB0aGlzLm9uTW91c2VPdXQsIHRydWUpO1xuXG4gICAgdGhpcy5pbnRlcmFjdGlvbkRPTUVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigndG91Y2hzdGFydCcsICAgdGhpcy5vblRvdWNoU3RhcnQsIHRydWUpO1xuICAgIHRoaXMuaW50ZXJhY3Rpb25ET01FbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ3RvdWNoZW5kJywgICAgIHRoaXMub25Ub3VjaEVuZCwgdHJ1ZSk7XG4gICAgdGhpcy5pbnRlcmFjdGlvbkRPTUVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigndG91Y2htb3ZlJywgICAgdGhpcy5vblRvdWNoTW92ZSwgdHJ1ZSk7XG5cbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignbW91c2V1cCcsICB0aGlzLm9uTW91c2VVcCwgdHJ1ZSk7XG5cbiAgICB0aGlzLmV2ZW50c0FkZGVkID0gdHJ1ZTtcbn07XG5cbi8qKlxuICogUmVtb3ZlcyBhbGwgdGhlIERPTSBldmVudHMgdGhhdCB3ZXJlIHByZXZpb3VzbHkgcmVnaXN0ZXJlZFxuICpcbiAqIEBwcml2YXRlXG4gKi9cbkludGVyYWN0aW9uTWFuYWdlci5wcm90b3R5cGUucmVtb3ZlRXZlbnRzID0gZnVuY3Rpb24gKClcbntcbiAgICBpZiAoIXRoaXMuaW50ZXJhY3Rpb25ET01FbGVtZW50KVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvcmUudGlja2VyLnNoYXJlZC5yZW1vdmUodGhpcy51cGRhdGUpO1xuXG4gICAgaWYgKHdpbmRvdy5uYXZpZ2F0b3IubXNQb2ludGVyRW5hYmxlZClcbiAgICB7XG4gICAgICAgIHRoaXMuaW50ZXJhY3Rpb25ET01FbGVtZW50LnN0eWxlWyctbXMtY29udGVudC16b29taW5nJ10gPSAnJztcbiAgICAgICAgdGhpcy5pbnRlcmFjdGlvbkRPTUVsZW1lbnQuc3R5bGVbJy1tcy10b3VjaC1hY3Rpb24nXSA9ICcnO1xuICAgIH1cblxuICAgIHdpbmRvdy5kb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdtb3VzZW1vdmUnLCB0aGlzLm9uTW91c2VNb3ZlLCB0cnVlKTtcbiAgICB0aGlzLmludGVyYWN0aW9uRE9NRWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdtb3VzZWRvd24nLCB0aGlzLm9uTW91c2VEb3duLCB0cnVlKTtcbiAgICB0aGlzLmludGVyYWN0aW9uRE9NRWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdtb3VzZW91dCcsICB0aGlzLm9uTW91c2VPdXQsIHRydWUpO1xuXG4gICAgdGhpcy5pbnRlcmFjdGlvbkRPTUVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigndG91Y2hzdGFydCcsIHRoaXMub25Ub3VjaFN0YXJ0LCB0cnVlKTtcbiAgICB0aGlzLmludGVyYWN0aW9uRE9NRWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCd0b3VjaGVuZCcsICB0aGlzLm9uVG91Y2hFbmQsIHRydWUpO1xuICAgIHRoaXMuaW50ZXJhY3Rpb25ET01FbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3RvdWNobW92ZScsIHRoaXMub25Ub3VjaE1vdmUsIHRydWUpO1xuXG4gICAgdGhpcy5pbnRlcmFjdGlvbkRPTUVsZW1lbnQgPSBudWxsO1xuXG4gICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21vdXNldXAnLCAgdGhpcy5vbk1vdXNlVXAsIHRydWUpO1xuXG4gICAgdGhpcy5ldmVudHNBZGRlZCA9IGZhbHNlO1xufTtcblxuLyoqXG4gKiBVcGRhdGVzIHRoZSBzdGF0ZSBvZiBpbnRlcmFjdGl2ZSBvYmplY3RzLlxuICogSW52b2tlZCBieSBhIHRocm90dGxlZCB0aWNrZXIgdXBkYXRlIGZyb21cbiAqIHtAbGluayBQSVhJLnRpY2tlci5zaGFyZWR9LlxuICpcbiAqIEBwYXJhbSBkZWx0YVRpbWUge251bWJlcn1cbiAqL1xuSW50ZXJhY3Rpb25NYW5hZ2VyLnByb3RvdHlwZS51cGRhdGUgPSBmdW5jdGlvbiAoZGVsdGFUaW1lKVxue1xuICAgIHRoaXMuX2RlbHRhVGltZSArPSBkZWx0YVRpbWU7XG5cbiAgICBpZiAodGhpcy5fZGVsdGFUaW1lIDwgdGhpcy5pbnRlcmFjdGlvbkZyZXF1ZW5jeSlcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLl9kZWx0YVRpbWUgPSAwO1xuXG4gICAgaWYgKCF0aGlzLmludGVyYWN0aW9uRE9NRWxlbWVudClcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBpZiB0aGUgdXNlciBtb3ZlIHRoZSBtb3VzZSB0aGlzIGNoZWNrIGhhcyBhbHJlYWR5IGJlZW4gZGZvbmUgdXNpbmcgdGhlIG1vdXNlIG1vdmUhXG4gICAgaWYodGhpcy5kaWRNb3ZlKVxuICAgIHtcbiAgICAgICAgdGhpcy5kaWRNb3ZlID0gZmFsc2U7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLmN1cnNvciA9ICdpbmhlcml0JztcblxuICAgIHRoaXMucHJvY2Vzc0ludGVyYWN0aXZlKHRoaXMubW91c2UuZ2xvYmFsLCB0aGlzLnJlbmRlcmVyLl9sYXN0T2JqZWN0UmVuZGVyZWQsIHRoaXMucHJvY2Vzc01vdXNlT3Zlck91dCwgdHJ1ZSApO1xuXG4gICAgaWYgKHRoaXMuY3VycmVudEN1cnNvclN0eWxlICE9PSB0aGlzLmN1cnNvcilcbiAgICB7XG4gICAgICAgIHRoaXMuY3VycmVudEN1cnNvclN0eWxlID0gdGhpcy5jdXJzb3I7XG4gICAgICAgIHRoaXMuaW50ZXJhY3Rpb25ET01FbGVtZW50LnN0eWxlLmN1cnNvciA9IHRoaXMuY3Vyc29yO1xuICAgIH1cblxuICAgIC8vVE9ET1xufTtcblxuLyoqXG4gKiBEaXNwYXRjaGVzIGFuIGV2ZW50IG9uIHRoZSBkaXNwbGF5IG9iamVjdCB0aGF0IHdhcyBpbnRlcmFjdGVkIHdpdGhcbiAqXG4gKiBAcGFyYW0gZGlzcGxheU9iamVjdCB7UElYSS5Db250YWluZXJ8UElYSS5TcHJpdGV8UElYSS5leHRyYXMuVGlsaW5nU3ByaXRlfSB0aGUgZGlzcGxheSBvYmplY3QgaW4gcXVlc3Rpb25cbiAqIEBwYXJhbSBldmVudFN0cmluZyB7c3RyaW5nfSB0aGUgbmFtZSBvZiB0aGUgZXZlbnQgKGUuZywgbW91c2Vkb3duKVxuICogQHBhcmFtIGV2ZW50RGF0YSB7b2JqZWN0fSB0aGUgZXZlbnQgZGF0YSBvYmplY3RcbiAqIEBwcml2YXRlXG4gKi9cbkludGVyYWN0aW9uTWFuYWdlci5wcm90b3R5cGUuZGlzcGF0Y2hFdmVudCA9IGZ1bmN0aW9uICggZGlzcGxheU9iamVjdCwgZXZlbnRTdHJpbmcsIGV2ZW50RGF0YSApXG57XG4gICAgaWYoIWV2ZW50RGF0YS5zdG9wcGVkKVxuICAgIHtcbiAgICAgICAgZXZlbnREYXRhLnRhcmdldCA9IGRpc3BsYXlPYmplY3Q7XG4gICAgICAgIGV2ZW50RGF0YS50eXBlID0gZXZlbnRTdHJpbmc7XG5cbiAgICAgICAgZGlzcGxheU9iamVjdC5lbWl0KCBldmVudFN0cmluZywgZXZlbnREYXRhICk7XG5cbiAgICAgICAgaWYoIGRpc3BsYXlPYmplY3RbZXZlbnRTdHJpbmddIClcbiAgICAgICAge1xuICAgICAgICAgICAgZGlzcGxheU9iamVjdFtldmVudFN0cmluZ10oIGV2ZW50RGF0YSApO1xuICAgICAgICB9XG4gICAgfVxufTtcblxuLyoqXG4gKiBNYXBzIHggYW5kIHkgY29vcmRzIGZyb20gYSBET00gb2JqZWN0IGFuZCBtYXBzIHRoZW0gY29ycmVjdGx5IHRvIHRoZSBwaXhpIHZpZXcuIFRoZSByZXN1bHRpbmcgdmFsdWUgaXMgc3RvcmVkIGluIHRoZSBwb2ludC5cbiAqIFRoaXMgdGFrZXMgaW50byBhY2NvdW50IHRoZSBmYWN0IHRoYXQgdGhlIERPTSBlbGVtZW50IGNvdWxkIGJlIHNjYWxlZCBhbmQgcG9zaXRpb25lZCBhbnl3aGVyZSBvbiB0aGUgc2NyZWVuLlxuICpcbiAqIEBwYXJhbSAge1BJWEkuUG9pbnR9IHBvaW50IHRoZSBwb2ludCB0aGF0IHRoZSByZXN1bHQgd2lsbCBiZSBzdG9yZWQgaW5cbiAqIEBwYXJhbSAge251bWJlcn0geCAgICAgdGhlIHggY29vcmQgb2YgdGhlIHBvc2l0aW9uIHRvIG1hcFxuICogQHBhcmFtICB7bnVtYmVyfSB5ICAgICB0aGUgeSBjb29yZCBvZiB0aGUgcG9zaXRpb24gdG8gbWFwXG4gKi9cbkludGVyYWN0aW9uTWFuYWdlci5wcm90b3R5cGUubWFwUG9zaXRpb25Ub1BvaW50ID0gZnVuY3Rpb24gKCBwb2ludCwgeCwgeSApXG57XG4gICAgdmFyIHJlY3QgPSB0aGlzLmludGVyYWN0aW9uRE9NRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICBwb2ludC54ID0gKCAoIHggLSByZWN0LmxlZnQgKSAqICh0aGlzLmludGVyYWN0aW9uRE9NRWxlbWVudC53aWR0aCAgLyByZWN0LndpZHRoICApICkgLyB0aGlzLnJlc29sdXRpb247XG4gICAgcG9pbnQueSA9ICggKCB5IC0gcmVjdC50b3AgICkgKiAodGhpcy5pbnRlcmFjdGlvbkRPTUVsZW1lbnQuaGVpZ2h0IC8gcmVjdC5oZWlnaHQgKSApIC8gdGhpcy5yZXNvbHV0aW9uO1xufTtcblxuLyoqXG4gKiBUaGlzIGZ1bmN0aW9uIGlzIHByb3ZpZGVzIGEgbmVhdCB3YXkgb2YgY3Jhd2xpbmcgdGhyb3VnaCB0aGUgc2NlbmUgZ3JhcGggYW5kIHJ1bm5pbmcgYSBzcGVjaWZpZWQgZnVuY3Rpb24gb24gYWxsIGludGVyYWN0aXZlIG9iamVjdHMgaXQgZmluZHMuXG4gKiBJdCB3aWxsIGFsc28gdGFrZSBjYXJlIG9mIGhpdCB0ZXN0aW5nIHRoZSBpbnRlcmFjdGl2ZSBvYmplY3RzIGFuZCBwYXNzZXMgdGhlIGhpdCBhY3Jvc3MgaW4gdGhlIGZ1bmN0aW9uLlxuICpcbiAqIEBwYXJhbSAge1BJWEkuUG9pbnR9IHBvaW50IHRoZSBwb2ludCB0aGF0IGlzIHRlc3RlZCBmb3IgY29sbGlzaW9uXG4gKiBAcGFyYW0gIHtQSVhJLkNvbnRhaW5lcnxQSVhJLlNwcml0ZXxQSVhJLmV4dHJhcy5UaWxpbmdTcHJpdGV9IGRpc3BsYXlPYmplY3QgdGhlIGRpc3BsYXlPYmplY3QgdGhhdCB3aWxsIGJlIGhpdCB0ZXN0IChyZWN1cmNzaXZseSBjcmF3bHMgaXRzIGNoaWxkcmVuKVxuICogQHBhcmFtICB7RnVuY3Rpb259IGZ1bmMgdGhlIGZ1bmN0aW9uIHRoYXQgd2lsbCBiZSBjYWxsZWQgb24gZWFjaCBpbnRlcmFjdGl2ZSBvYmplY3QuIFRoZSBkaXNwbGF5T2JqZWN0IGFuZCBoaXQgd2lsbCBiZSBwYXNzZWQgdG8gdGhlIGZ1bmN0aW9uXG4gKiBAcGFyYW0gIHtib29sZWFufSBoaXRUZXN0IHRoaXMgaW5kaWNhdGVzIGlmIHRoZSBvYmplY3RzIGluc2lkZSBzaG91bGQgYmUgaGl0IHRlc3QgYWdhaW5zdCB0aGUgcG9pbnRcbiAqIEByZXR1cm4ge2Jvb2xlYW59IHJldHVybnMgdHJ1ZSBpZiB0aGUgZGlzcGxheU9iamVjdCBoaXQgdGhlIHBvaW50XG4gKi9cbkludGVyYWN0aW9uTWFuYWdlci5wcm90b3R5cGUucHJvY2Vzc0ludGVyYWN0aXZlID0gZnVuY3Rpb24gKHBvaW50LCBkaXNwbGF5T2JqZWN0LCBmdW5jLCBoaXRUZXN0LCBpbnRlcmFjdGl2ZSlcbntcbiAgICBpZighZGlzcGxheU9iamVjdCB8fCAhZGlzcGxheU9iamVjdC52aXNpYmxlKVxuICAgIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIC8vIFRvb2sgYSBsaXR0bGUgd2hpbGUgdG8gcmV3b3JrIHRoaXMgZnVuY3Rpb24gY29ycmVjdGx5ISBCdXQgbm93IGl0IGlzIGRvbmUgYW5kIG5pY2UgYW5kIG9wdGltaXNlZC4gXl9eXG4gICAgLy8gXG4gICAgLy8gVGhpcyBmdW5jdGlvbiB3aWxsIG5vdyBsb29wIHRocm91Z2ggYWxsIG9iamVjdHMgYW5kIHRoZW4gb25seSBoaXQgdGVzdCB0aGUgb2JqZWN0cyBpdCBIQVMgdG8sIG5vdCBhbGwgb2YgdGhlbS4gTVVDSCBmYXN0ZXIuLlxuICAgIC8vIEFuIG9iamVjdCB3aWxsIGJlIGhpdCB0ZXN0IGlmIHRoZSBmb2xsb3dpbmcgaXMgdHJ1ZTpcbiAgICAvLyBcbiAgICAvLyAxOiBJdCBpcyBpbnRlcmFjdGl2ZS5cbiAgICAvLyAyOiBJdCBiZWxvbmdzIHRvIGEgcGFyZW50IHRoYXQgaXMgaW50ZXJhY3RpdmUgQU5EIG9uZSBvZiB0aGUgcGFyZW50cyBjaGlsZHJlbiBoYXZlIG5vdCBhbHJlYWR5IGJlZW4gaGl0LlxuICAgIC8vIFxuICAgIC8vIEFzIGFub3RoZXIgbGl0dGxlIG9wdGltaXNhdGlvbiBvbmNlIGFuIGludGVyYWN0aXZlIG9iamVjdCBoYXMgYmVlbiBoaXQgd2UgY2FuIGNhcnJ5IG9uIHRocm91Z2ggdGhlIHNjZW5lZ3JhcGgsIGJ1dCB3ZSBrbm93IHRoYXQgdGhlcmUgd2lsbCBiZSBubyBtb3JlIGhpdHMhIFNvIHdlIGNhbiBhdm9pZCBleHRyYSBoaXQgdGVzdHNcbiAgICAvLyBBIGZpbmFsIG9wdGltaXNhdGlvbiBpcyB0aGF0IGFuIG9iamVjdCBpcyBub3QgaGl0IHRlc3QgZGlyZWN0bHkgaWYgYSBjaGlsZCBoYXMgYWxyZWFkeSBiZWVuIGhpdC5cbiAgICBcbiAgICB2YXIgaGl0ID0gZmFsc2UsXG4gICAgICAgIGludGVyYWN0aXZlUGFyZW50ID0gaW50ZXJhY3RpdmUgPSBkaXNwbGF5T2JqZWN0LmludGVyYWN0aXZlIHx8IGludGVyYWN0aXZlO1xuXG4gICAgLy8gaWYgdGhlIGRpc3BsYXlvYmplY3QgaGFzIGEgaGl0QXJlYSwgdGhlbiBpdCBkb2VzIG5vdCBuZWVkIHRvIGhpdFRlc3QgY2hpbGRyZW4uXG4gICAgaWYoZGlzcGxheU9iamVjdC5oaXRBcmVhKVxuICAgIHtcbiAgICAgICAgaW50ZXJhY3RpdmVQYXJlbnQgPSBmYWxzZTtcbiAgICB9XG5cbiAgICAvLyAqKiBGUkVFIFRJUCAqKiEgSWYgYW4gb2JqZWN0IGlzIG5vdCBpbnRlcmFjdHRpdmUgb3IgaGFzIG5vIGJ1dHRvbnMgaW4gaXQgKHN1Y2ggYXMgYSBnYW1lIHNjZW5lISkgc2V0IGludGVyYWN0aXZlQ2hpbGRyZW4gdG8gZmFsc2UgZm9yIHRoYXQgZGlzcGxheU9iamVjdC5cbiAgICAvLyBUaGlzIHdpbGwgYWxsb3cgcGl4aSB0byBjb21wbGV0bHkgaWdub3JlIGFuZCBieXBhc3MgY2hlY2tpbmcgdGhlIGRpc3BsYXlPYmplY3RzIGNoaWxkcmVuLlxuICAgIGlmKGRpc3BsYXlPYmplY3QuaW50ZXJhY3RpdmVDaGlsZHJlbilcbiAgICB7ICAgICAgIFxuICAgICAgICB2YXIgY2hpbGRyZW4gPSBkaXNwbGF5T2JqZWN0LmNoaWxkcmVuO1xuICAgICAgICBcbiAgICAgICAgZm9yICh2YXIgaSA9IGNoaWxkcmVuLmxlbmd0aC0xOyBpID49IDA7IGktLSlcbiAgICAgICAge1xuICAgICAgICAgICAgLy8gdGltZSB0byBnZXQgcmVjdXJzaXZlLi4gaWYgdGhpcyBmdW5jdGlvbiB3aWxsIHJldHVybiBpZiBzb210aGluZyBpcyBoaXQuLlxuICAgICAgICAgICAgaWYoIHRoaXMucHJvY2Vzc0ludGVyYWN0aXZlKHBvaW50LCBjaGlsZHJlbltpXSwgZnVuYywgaGl0VGVzdCwgaW50ZXJhY3RpdmVQYXJlbnQpIClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBoaXQgPSB0cnVlO1xuXG4gICAgICAgICAgICAgICAgLy8gd2Ugbm8gbG9uZ2VyIG5lZWQgdG8gaGl0IHRlc3QgYW55IG1vcmUgb2JqZWN0cyBpbiB0aGlzIGNvbnRhaW5lciBhcyB3ZSB3ZSBub3cga25vdyB0aGUgcGFyZW50IGhhcyBiZWVuIGhpdFxuICAgICAgICAgICAgICAgIGludGVyYWN0aXZlUGFyZW50ID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgLy8gSWYgdGhlIGNoaWxkIGlzIGludGVyYWN0aXZlICwgdGhhdCBtZWFucyB0aGF0IHRoZSBvYmplY3QgaGl0IHdhcyBhY3R1YWxseSBpbnRlcmFjdGl2ZSBhbmQgbm90IGp1c3QgdGhlIGNoaWxkIG9mIGFuIGludGVyYWN0aXZlIG9iamVjdC4gXG4gICAgICAgICAgICAgICAgLy8gVGhpcyBtZWFucyB3ZSBubyBsb25nZXIgbmVlZCB0byBoaXQgdGVzdCBhbnl0aGluZyBlbHNlLiBXZSBzdGlsbCBuZWVkIHRvIHJ1biB0aHJvdWdoIGFsbCBvYmplY3RzLCBidXQgd2UgZG9uJ3QgbmVlZCB0byBwZXJmb3JtIGFueSBoaXQgdGVzdHMuXG4gICAgICAgICAgICAgICAgaWYoY2hpbGRyZW5baV0uaW50ZXJhY3RpdmUpXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBoaXRUZXN0ID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gbm8gcG9pbnQgcnVubmluZyB0aGlzIGlmIHRoZSBpdGVtIGlzIG5vdCBpbnRlcmFjdGl2ZSBvciBkb2VzIG5vdCBoYXZlIGFuIGludGVyYWN0aXZlIHBhcmVudC5cbiAgICBpZihpbnRlcmFjdGl2ZSlcbiAgICB7XG4gICAgICAgIC8vIGlmIHdlIGFyZSBoaXQgdGVzdGluZyAoYXMgaW4gd2UgaGF2ZSBubyBoaXQgYW55IG9iamVjdHMgeWV0KVxuICAgICAgICAvLyBXZSBhbHNvIGRvbid0IG5lZWQgdG8gd29ycnkgYWJvdXQgaGl0IHRlc3RpbmcgaWYgb25jZSBvZiB0aGUgZGlzcGxheU9iamVjdHMgY2hpbGRyZW4gaGFzIGFscmVhZHkgYmVlbiBoaXQhXG4gICAgICAgIGlmKGhpdFRlc3QgJiYgIWhpdClcbiAgICAgICAgeyAgXG4gICAgICAgICAgICBpZihkaXNwbGF5T2JqZWN0LmhpdEFyZWEpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgZGlzcGxheU9iamVjdC53b3JsZFRyYW5zZm9ybS5hcHBseUludmVyc2UocG9pbnQsICB0aGlzLl90ZW1wUG9pbnQpO1xuICAgICAgICAgICAgICAgIGhpdCA9IGRpc3BsYXlPYmplY3QuaGl0QXJlYS5jb250YWlucyggdGhpcy5fdGVtcFBvaW50LngsIHRoaXMuX3RlbXBQb2ludC55ICk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmKGRpc3BsYXlPYmplY3QuY29udGFpbnNQb2ludClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBoaXQgPSBkaXNwbGF5T2JqZWN0LmNvbnRhaW5zUG9pbnQocG9pbnQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYoZGlzcGxheU9iamVjdC5pbnRlcmFjdGl2ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgZnVuYyhkaXNwbGF5T2JqZWN0LCBoaXQpOyBcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBoaXQ7XG4gIFxufTtcblxuXG4vKipcbiAqIElzIGNhbGxlZCB3aGVuIHRoZSBtb3VzZSBidXR0b24gaXMgcHJlc3NlZCBkb3duIG9uIHRoZSByZW5kZXJlciBlbGVtZW50XG4gKlxuICogQHBhcmFtIGV2ZW50IHtFdmVudH0gVGhlIERPTSBldmVudCBvZiBhIG1vdXNlIGJ1dHRvbiBiZWluZyBwcmVzc2VkIGRvd25cbiAqIEBwcml2YXRlXG4gKi9cbkludGVyYWN0aW9uTWFuYWdlci5wcm90b3R5cGUub25Nb3VzZURvd24gPSBmdW5jdGlvbiAoZXZlbnQpXG57XG4gICAgdGhpcy5tb3VzZS5vcmlnaW5hbEV2ZW50ID0gZXZlbnQ7XG4gICAgdGhpcy5ldmVudERhdGEuZGF0YSA9IHRoaXMubW91c2U7XG4gICAgdGhpcy5ldmVudERhdGEuc3RvcHBlZCA9IGZhbHNlO1xuXG4gICAgLy8gVXBkYXRlIGludGVybmFsIG1vdXNlIHJlZmVyZW5jZVxuICAgIHRoaXMubWFwUG9zaXRpb25Ub1BvaW50KCB0aGlzLm1vdXNlLmdsb2JhbCwgZXZlbnQuY2xpZW50WCwgZXZlbnQuY2xpZW50WSk7XG5cbiAgICBpZiAodGhpcy5hdXRvUHJldmVudERlZmF1bHQpXG4gICAge1xuICAgICAgICB0aGlzLm1vdXNlLm9yaWdpbmFsRXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICB9XG5cbiAgICB0aGlzLnByb2Nlc3NJbnRlcmFjdGl2ZSh0aGlzLm1vdXNlLmdsb2JhbCwgdGhpcy5yZW5kZXJlci5fbGFzdE9iamVjdFJlbmRlcmVkLCB0aGlzLnByb2Nlc3NNb3VzZURvd24sIHRydWUgKTtcbn07XG5cbi8qKlxuICogUHJvY2Vzc2VzIHRoZSByZXN1bHQgb2YgdGhlIG1vdXNlIGRvd24gY2hlY2sgYW5kIGRpc3BhdGNoZXMgdGhlIGV2ZW50IGlmIG5lZWQgYmVcbiAqXG4gKiBAcGFyYW0gZGlzcGxheU9iamVjdCB7UElYSS5Db250YWluZXJ8UElYSS5TcHJpdGV8UElYSS5leHRyYXMuVGlsaW5nU3ByaXRlfSBUaGUgZGlzcGxheSBvYmplY3QgdGhhdCB3YXMgdGVzdGVkXG4gKiBAcGFyYW0gaGl0IHtib29sZWFufSB0aGUgcmVzdWx0IG9mIHRoZSBoaXQgdGVzdCBvbiB0aGUgZGlzcGF5IG9iamVjdFxuICogQHByaXZhdGVcbiAqL1xuSW50ZXJhY3Rpb25NYW5hZ2VyLnByb3RvdHlwZS5wcm9jZXNzTW91c2VEb3duID0gZnVuY3Rpb24gKCBkaXNwbGF5T2JqZWN0LCBoaXQgKVxue1xuICAgIHZhciBlID0gdGhpcy5tb3VzZS5vcmlnaW5hbEV2ZW50O1xuICAgIFxuICAgIHZhciBpc1JpZ2h0QnV0dG9uID0gZS5idXR0b24gPT09IDIgfHwgZS53aGljaCA9PT0gMztcblxuICAgIGlmKGhpdClcbiAgICB7XG4gICAgICAgIGRpc3BsYXlPYmplY3RbIGlzUmlnaHRCdXR0b24gPyAnX2lzUmlnaHREb3duJyA6ICdfaXNMZWZ0RG93bicgXSA9IHRydWU7XG4gICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudCggZGlzcGxheU9iamVjdCwgaXNSaWdodEJ1dHRvbiA/ICdyaWdodGRvd24nIDogJ21vdXNlZG93bicsIHRoaXMuZXZlbnREYXRhICk7XG4gICAgfVxufTtcblxuXG5cbi8qKlxuICogSXMgY2FsbGVkIHdoZW4gdGhlIG1vdXNlIGJ1dHRvbiBpcyByZWxlYXNlZCBvbiB0aGUgcmVuZGVyZXIgZWxlbWVudFxuICpcbiAqIEBwYXJhbSBldmVudCB7RXZlbnR9IFRoZSBET00gZXZlbnQgb2YgYSBtb3VzZSBidXR0b24gYmVpbmcgcmVsZWFzZWRcbiAqIEBwcml2YXRlXG4gKi9cbkludGVyYWN0aW9uTWFuYWdlci5wcm90b3R5cGUub25Nb3VzZVVwID0gZnVuY3Rpb24gKGV2ZW50KVxue1xuICAgIHRoaXMubW91c2Uub3JpZ2luYWxFdmVudCA9IGV2ZW50O1xuICAgIHRoaXMuZXZlbnREYXRhLmRhdGEgPSB0aGlzLm1vdXNlO1xuICAgIHRoaXMuZXZlbnREYXRhLnN0b3BwZWQgPSBmYWxzZTtcblxuICAgIC8vIFVwZGF0ZSBpbnRlcm5hbCBtb3VzZSByZWZlcmVuY2VcbiAgICB0aGlzLm1hcFBvc2l0aW9uVG9Qb2ludCggdGhpcy5tb3VzZS5nbG9iYWwsIGV2ZW50LmNsaWVudFgsIGV2ZW50LmNsaWVudFkpO1xuXG4gICAgdGhpcy5wcm9jZXNzSW50ZXJhY3RpdmUodGhpcy5tb3VzZS5nbG9iYWwsIHRoaXMucmVuZGVyZXIuX2xhc3RPYmplY3RSZW5kZXJlZCwgdGhpcy5wcm9jZXNzTW91c2VVcCwgdHJ1ZSApO1xufTtcblxuLyoqXG4gKiBQcm9jZXNzZXMgdGhlIHJlc3VsdCBvZiB0aGUgbW91c2UgdXAgY2hlY2sgYW5kIGRpc3BhdGNoZXMgdGhlIGV2ZW50IGlmIG5lZWQgYmVcbiAqXG4gKiBAcGFyYW0gZGlzcGxheU9iamVjdCB7UElYSS5Db250YWluZXJ8UElYSS5TcHJpdGV8UElYSS5leHRyYXMuVGlsaW5nU3ByaXRlfSBUaGUgZGlzcGxheSBvYmplY3QgdGhhdCB3YXMgdGVzdGVkXG4gKiBAcGFyYW0gaGl0IHtib29sZWFufSB0aGUgcmVzdWx0IG9mIHRoZSBoaXQgdGVzdCBvbiB0aGUgZGlzcGxheSBvYmplY3RcbiAqIEBwcml2YXRlXG4gKi9cbkludGVyYWN0aW9uTWFuYWdlci5wcm90b3R5cGUucHJvY2Vzc01vdXNlVXAgPSBmdW5jdGlvbiAoIGRpc3BsYXlPYmplY3QsIGhpdCApXG57XG4gICAgdmFyIGUgPSB0aGlzLm1vdXNlLm9yaWdpbmFsRXZlbnQ7XG5cbiAgICB2YXIgaXNSaWdodEJ1dHRvbiA9IGUuYnV0dG9uID09PSAyIHx8IGUud2hpY2ggPT09IDM7XG4gICAgdmFyIGlzRG93biA9ICBpc1JpZ2h0QnV0dG9uID8gJ19pc1JpZ2h0RG93bicgOiAnX2lzTGVmdERvd24nO1xuXG4gICAgaWYoaGl0KVxuICAgIHtcbiAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50KCBkaXNwbGF5T2JqZWN0LCBpc1JpZ2h0QnV0dG9uID8gJ3JpZ2h0dXAnIDogJ21vdXNldXAnLCB0aGlzLmV2ZW50RGF0YSApO1xuXG4gICAgICAgIGlmKCBkaXNwbGF5T2JqZWN0WyBpc0Rvd24gXSApXG4gICAgICAgIHtcbiAgICAgICAgICAgIGRpc3BsYXlPYmplY3RbIGlzRG93biBdID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLmRpc3BhdGNoRXZlbnQoIGRpc3BsYXlPYmplY3QsIGlzUmlnaHRCdXR0b24gPyAncmlnaHRjbGljaycgOiAnY2xpY2snLCB0aGlzLmV2ZW50RGF0YSApO1xuICAgICAgICB9XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIGlmKCBkaXNwbGF5T2JqZWN0WyBpc0Rvd24gXSApXG4gICAgICAgIHtcbiAgICAgICAgICAgIGRpc3BsYXlPYmplY3RbIGlzRG93biBdID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLmRpc3BhdGNoRXZlbnQoIGRpc3BsYXlPYmplY3QsIGlzUmlnaHRCdXR0b24gPyAncmlnaHR1cG91dHNpZGUnIDogJ21vdXNldXBvdXRzaWRlJywgdGhpcy5ldmVudERhdGEgKTtcbiAgICAgICAgfVxuICAgIH1cbn07XG5cblxuLyoqXG4gKiBJcyBjYWxsZWQgd2hlbiB0aGUgbW91c2UgbW92ZXMgYWNyb3NzIHRoZSByZW5kZXJlciBlbGVtZW50XG4gKlxuICogQHBhcmFtIGV2ZW50IHtFdmVudH0gVGhlIERPTSBldmVudCBvZiB0aGUgbW91c2UgbW92aW5nXG4gKiBAcHJpdmF0ZVxuICovXG5JbnRlcmFjdGlvbk1hbmFnZXIucHJvdG90eXBlLm9uTW91c2VNb3ZlID0gZnVuY3Rpb24gKGV2ZW50KVxue1xuICAgIHRoaXMubW91c2Uub3JpZ2luYWxFdmVudCA9IGV2ZW50O1xuICAgIHRoaXMuZXZlbnREYXRhLmRhdGEgPSB0aGlzLm1vdXNlO1xuICAgIHRoaXMuZXZlbnREYXRhLnN0b3BwZWQgPSBmYWxzZTtcblxuICAgIHRoaXMubWFwUG9zaXRpb25Ub1BvaW50KCB0aGlzLm1vdXNlLmdsb2JhbCwgZXZlbnQuY2xpZW50WCwgZXZlbnQuY2xpZW50WSk7XG5cbiAgICB0aGlzLmRpZE1vdmUgPSB0cnVlO1xuXG4gICAgdGhpcy5jdXJzb3IgPSAnaW5oZXJpdCc7XG5cbiAgICB0aGlzLnByb2Nlc3NJbnRlcmFjdGl2ZSh0aGlzLm1vdXNlLmdsb2JhbCwgdGhpcy5yZW5kZXJlci5fbGFzdE9iamVjdFJlbmRlcmVkLCB0aGlzLnByb2Nlc3NNb3VzZU1vdmUsIHRydWUgKTtcblxuICAgIGlmICh0aGlzLmN1cnJlbnRDdXJzb3JTdHlsZSAhPT0gdGhpcy5jdXJzb3IpXG4gICAge1xuICAgICAgICB0aGlzLmN1cnJlbnRDdXJzb3JTdHlsZSA9IHRoaXMuY3Vyc29yO1xuICAgICAgICB0aGlzLmludGVyYWN0aW9uRE9NRWxlbWVudC5zdHlsZS5jdXJzb3IgPSB0aGlzLmN1cnNvcjtcbiAgICB9XG5cbiAgICAvL1RPRE8gQlVHIGZvciBwYXJlbnRzIGluZXJhY3RpdmUgb2JqZWN0IChib3JkZXIgb3JkZXIgaXNzdWUpXG59O1xuXG4vKipcbiAqIFByb2Nlc3NlcyB0aGUgcmVzdWx0IG9mIHRoZSBtb3VzZSBtb3ZlIGNoZWNrIGFuZCBkaXNwYXRjaGVzIHRoZSBldmVudCBpZiBuZWVkIGJlXG4gKlxuICogQHBhcmFtIGRpc3BsYXlPYmplY3Qge1BJWEkuQ29udGFpbmVyfFBJWEkuU3ByaXRlfFBJWEkuZXh0cmFzLlRpbGluZ1Nwcml0ZX0gVGhlIGRpc3BsYXkgb2JqZWN0IHRoYXQgd2FzIHRlc3RlZFxuICogQHBhcmFtIGhpdCB7Ym9vbGVhbn0gdGhlIHJlc3VsdCBvZiB0aGUgaGl0IHRlc3Qgb24gdGhlIGRpc3BsYXkgb2JqZWN0XG4gKiBAcHJpdmF0ZVxuICovXG5JbnRlcmFjdGlvbk1hbmFnZXIucHJvdG90eXBlLnByb2Nlc3NNb3VzZU1vdmUgPSBmdW5jdGlvbiAoIGRpc3BsYXlPYmplY3QsIGhpdCApXG57XG4gICAgdGhpcy5kaXNwYXRjaEV2ZW50KCBkaXNwbGF5T2JqZWN0LCAnbW91c2Vtb3ZlJywgdGhpcy5ldmVudERhdGEpO1xuICAgIHRoaXMucHJvY2Vzc01vdXNlT3Zlck91dChkaXNwbGF5T2JqZWN0LCBoaXQpO1xufTtcblxuXG4vKipcbiAqIElzIGNhbGxlZCB3aGVuIHRoZSBtb3VzZSBpcyBtb3ZlZCBvdXQgb2YgdGhlIHJlbmRlcmVyIGVsZW1lbnRcbiAqXG4gKiBAcGFyYW0gZXZlbnQge0V2ZW50fSBUaGUgRE9NIGV2ZW50IG9mIGEgbW91c2UgYmVpbmcgbW92ZWQgb3V0XG4gKiBAcHJpdmF0ZVxuICovXG5JbnRlcmFjdGlvbk1hbmFnZXIucHJvdG90eXBlLm9uTW91c2VPdXQgPSBmdW5jdGlvbiAoZXZlbnQpXG57XG4gICAgdGhpcy5tb3VzZS5vcmlnaW5hbEV2ZW50ID0gZXZlbnQ7XG4gICAgdGhpcy5ldmVudERhdGEuc3RvcHBlZCA9IGZhbHNlO1xuXG4gICAgLy8gVXBkYXRlIGludGVybmFsIG1vdXNlIHJlZmVyZW5jZVxuICAgIHRoaXMubWFwUG9zaXRpb25Ub1BvaW50KCB0aGlzLm1vdXNlLmdsb2JhbCwgZXZlbnQuY2xpZW50WCwgZXZlbnQuY2xpZW50WSk7XG5cbiAgICB0aGlzLmludGVyYWN0aW9uRE9NRWxlbWVudC5zdHlsZS5jdXJzb3IgPSAnaW5oZXJpdCc7XG5cbiAgICAvLyBUT0RPIG9wdGltaXplIGJ5IG5vdCBjaGVjayBFVkVSWSBUSU1FISBtYXliZSBoYWxmIGFzIG9mdGVuPyAvL1xuICAgIHRoaXMubWFwUG9zaXRpb25Ub1BvaW50KCB0aGlzLm1vdXNlLmdsb2JhbCwgZXZlbnQuY2xpZW50WCwgZXZlbnQuY2xpZW50WSApO1xuXG4gICAgdGhpcy5wcm9jZXNzSW50ZXJhY3RpdmUoIHRoaXMubW91c2UuZ2xvYmFsLCB0aGlzLnJlbmRlcmVyLl9sYXN0T2JqZWN0UmVuZGVyZWQsIHRoaXMucHJvY2Vzc01vdXNlT3Zlck91dCwgZmFsc2UgKTtcbn07XG5cbi8qKlxuICogUHJvY2Vzc2VzIHRoZSByZXN1bHQgb2YgdGhlIG1vdXNlIG92ZXIvb3V0IGNoZWNrIGFuZCBkaXNwYXRjaGVzIHRoZSBldmVudCBpZiBuZWVkIGJlXG4gKlxuICogQHBhcmFtIGRpc3BsYXlPYmplY3Qge1BJWEkuQ29udGFpbmVyfFBJWEkuU3ByaXRlfFBJWEkuZXh0cmFzLlRpbGluZ1Nwcml0ZX0gVGhlIGRpc3BsYXkgb2JqZWN0IHRoYXQgd2FzIHRlc3RlZFxuICogQHBhcmFtIGhpdCB7Ym9vbGVhbn0gdGhlIHJlc3VsdCBvZiB0aGUgaGl0IHRlc3Qgb24gdGhlIGRpc3BsYXkgb2JqZWN0XG4gKiBAcHJpdmF0ZVxuICovXG5JbnRlcmFjdGlvbk1hbmFnZXIucHJvdG90eXBlLnByb2Nlc3NNb3VzZU92ZXJPdXQgPSBmdW5jdGlvbiAoIGRpc3BsYXlPYmplY3QsIGhpdCApXG57XG4gICAgaWYoaGl0KVxuICAgIHtcbiAgICAgICAgaWYoIWRpc3BsYXlPYmplY3QuX292ZXIpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGRpc3BsYXlPYmplY3QuX292ZXIgPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50KCBkaXNwbGF5T2JqZWN0LCAnbW91c2VvdmVyJywgdGhpcy5ldmVudERhdGEgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChkaXNwbGF5T2JqZWN0LmJ1dHRvbk1vZGUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuY3Vyc29yID0gZGlzcGxheU9iamVjdC5kZWZhdWx0Q3Vyc29yO1xuICAgICAgICB9XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIGlmKGRpc3BsYXlPYmplY3QuX292ZXIpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGRpc3BsYXlPYmplY3QuX292ZXIgPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudCggZGlzcGxheU9iamVjdCwgJ21vdXNlb3V0JywgdGhpcy5ldmVudERhdGEpO1xuICAgICAgICB9XG4gICAgfVxufTtcblxuXG4vKipcbiAqIElzIGNhbGxlZCB3aGVuIGEgdG91Y2ggaXMgc3RhcnRlZCBvbiB0aGUgcmVuZGVyZXIgZWxlbWVudFxuICpcbiAqIEBwYXJhbSBldmVudCB7RXZlbnR9IFRoZSBET00gZXZlbnQgb2YgYSB0b3VjaCBzdGFydGluZyBvbiB0aGUgcmVuZGVyZXIgdmlld1xuICogQHByaXZhdGVcbiAqL1xuSW50ZXJhY3Rpb25NYW5hZ2VyLnByb3RvdHlwZS5vblRvdWNoU3RhcnQgPSBmdW5jdGlvbiAoZXZlbnQpXG57XG4gICAgaWYgKHRoaXMuYXV0b1ByZXZlbnREZWZhdWx0KVxuICAgIHtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICB9XG5cbiAgICB2YXIgY2hhbmdlZFRvdWNoZXMgPSBldmVudC5jaGFuZ2VkVG91Y2hlcztcbiAgICB2YXIgY0xlbmd0aCA9IGNoYW5nZWRUb3VjaGVzLmxlbmd0aDtcblxuICAgIGZvciAodmFyIGk9MDsgaSA8IGNMZW5ndGg7IGkrKylcbiAgICB7XG4gICAgICAgIHZhciB0b3VjaEV2ZW50ID0gY2hhbmdlZFRvdWNoZXNbaV07XG4gICAgICAgIC8vVE9ETyBQT09MXG4gICAgICAgIHZhciB0b3VjaERhdGEgPSB0aGlzLmdldFRvdWNoRGF0YSggdG91Y2hFdmVudCApO1xuXG4gICAgICAgIHRvdWNoRGF0YS5vcmlnaW5hbEV2ZW50ID0gZXZlbnQ7XG5cbiAgICAgICAgdGhpcy5ldmVudERhdGEuZGF0YSA9IHRvdWNoRGF0YTtcbiAgICAgICAgdGhpcy5ldmVudERhdGEuc3RvcHBlZCA9IGZhbHNlO1xuXG4gICAgICAgIHRoaXMucHJvY2Vzc0ludGVyYWN0aXZlKCB0b3VjaERhdGEuZ2xvYmFsLCB0aGlzLnJlbmRlcmVyLl9sYXN0T2JqZWN0UmVuZGVyZWQsIHRoaXMucHJvY2Vzc1RvdWNoU3RhcnQsIHRydWUgKTtcblxuICAgICAgICB0aGlzLnJldHVyblRvdWNoRGF0YSggdG91Y2hEYXRhICk7XG4gICAgfVxufTtcblxuLyoqXG4gKiBQcm9jZXNzZXMgdGhlIHJlc3VsdCBvZiBhIHRvdWNoIGNoZWNrIGFuZCBkaXNwYXRjaGVzIHRoZSBldmVudCBpZiBuZWVkIGJlXG4gKlxuICogQHBhcmFtIGRpc3BsYXlPYmplY3Qge1BJWEkuQ29udGFpbmVyfFBJWEkuU3ByaXRlfFBJWEkuZXh0cmFzLlRpbGluZ1Nwcml0ZX0gVGhlIGRpc3BsYXkgb2JqZWN0IHRoYXQgd2FzIHRlc3RlZFxuICogQHBhcmFtIGhpdCB7Ym9vbGVhbn0gdGhlIHJlc3VsdCBvZiB0aGUgaGl0IHRlc3Qgb24gdGhlIGRpc3BsYXkgb2JqZWN0XG4gKiBAcHJpdmF0ZVxuICovXG5JbnRlcmFjdGlvbk1hbmFnZXIucHJvdG90eXBlLnByb2Nlc3NUb3VjaFN0YXJ0ID0gZnVuY3Rpb24gKCBkaXNwbGF5T2JqZWN0LCBoaXQgKVxue1xuICAgIGlmKGhpdClcbiAgICB7XG4gICAgICAgIGRpc3BsYXlPYmplY3QuX3RvdWNoRG93biA9IHRydWU7XG4gICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudCggZGlzcGxheU9iamVjdCwgJ3RvdWNoc3RhcnQnLCB0aGlzLmV2ZW50RGF0YSApO1xuICAgIH1cbn07XG5cblxuLyoqXG4gKiBJcyBjYWxsZWQgd2hlbiBhIHRvdWNoIGVuZHMgb24gdGhlIHJlbmRlcmVyIGVsZW1lbnRcbiAqXG4gKiBAcGFyYW0gZXZlbnQge0V2ZW50fSBUaGUgRE9NIGV2ZW50IG9mIGEgdG91Y2ggZW5kaW5nIG9uIHRoZSByZW5kZXJlciB2aWV3XG4gKi9cbkludGVyYWN0aW9uTWFuYWdlci5wcm90b3R5cGUub25Ub3VjaEVuZCA9IGZ1bmN0aW9uIChldmVudClcbntcbiAgICBpZiAodGhpcy5hdXRvUHJldmVudERlZmF1bHQpXG4gICAge1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIH1cblxuICAgIHZhciBjaGFuZ2VkVG91Y2hlcyA9IGV2ZW50LmNoYW5nZWRUb3VjaGVzO1xuICAgIHZhciBjTGVuZ3RoID0gY2hhbmdlZFRvdWNoZXMubGVuZ3RoO1xuXG4gICAgZm9yICh2YXIgaT0wOyBpIDwgY0xlbmd0aDsgaSsrKVxuICAgIHtcbiAgICAgICAgdmFyIHRvdWNoRXZlbnQgPSBjaGFuZ2VkVG91Y2hlc1tpXTtcblxuICAgICAgICB2YXIgdG91Y2hEYXRhID0gdGhpcy5nZXRUb3VjaERhdGEoIHRvdWNoRXZlbnQgKTtcblxuICAgICAgICB0b3VjaERhdGEub3JpZ2luYWxFdmVudCA9IGV2ZW50O1xuXG4gICAgICAgIC8vVE9ETyB0aGlzIHNob3VsZCBiZSBwYXNzZWQgYWxvbmcuLiBubyBzZXRcbiAgICAgICAgdGhpcy5ldmVudERhdGEuZGF0YSA9IHRvdWNoRGF0YTtcbiAgICAgICAgdGhpcy5ldmVudERhdGEuc3RvcHBlZCA9IGZhbHNlO1xuXG5cbiAgICAgICAgdGhpcy5wcm9jZXNzSW50ZXJhY3RpdmUoIHRvdWNoRGF0YS5nbG9iYWwsIHRoaXMucmVuZGVyZXIuX2xhc3RPYmplY3RSZW5kZXJlZCwgdGhpcy5wcm9jZXNzVG91Y2hFbmQsIHRydWUgKTtcblxuICAgICAgICB0aGlzLnJldHVyblRvdWNoRGF0YSggdG91Y2hEYXRhICk7XG4gICAgfVxufTtcblxuLyoqXG4gKiBQcm9jZXNzZXMgdGhlIHJlc3VsdCBvZiB0aGUgZW5kIG9mIGEgdG91Y2ggYW5kIGRpc3BhdGNoZXMgdGhlIGV2ZW50IGlmIG5lZWQgYmVcbiAqXG4gKiBAcGFyYW0gZGlzcGxheU9iamVjdCB7UElYSS5Db250YWluZXJ8UElYSS5TcHJpdGV8UElYSS5leHRyYXMuVGlsaW5nU3ByaXRlfSBUaGUgZGlzcGxheSBvYmplY3QgdGhhdCB3YXMgdGVzdGVkXG4gKiBAcGFyYW0gaGl0IHtib29sZWFufSB0aGUgcmVzdWx0IG9mIHRoZSBoaXQgdGVzdCBvbiB0aGUgZGlzcGxheSBvYmplY3RcbiAqIEBwcml2YXRlXG4gKi9cbkludGVyYWN0aW9uTWFuYWdlci5wcm90b3R5cGUucHJvY2Vzc1RvdWNoRW5kID0gZnVuY3Rpb24gKCBkaXNwbGF5T2JqZWN0LCBoaXQgKVxue1xuICAgIGlmKGhpdClcbiAgICB7XG4gICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudCggZGlzcGxheU9iamVjdCwgJ3RvdWNoZW5kJywgdGhpcy5ldmVudERhdGEgKTtcblxuICAgICAgICBpZiggZGlzcGxheU9iamVjdC5fdG91Y2hEb3duIClcbiAgICAgICAge1xuICAgICAgICAgICAgZGlzcGxheU9iamVjdC5fdG91Y2hEb3duID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLmRpc3BhdGNoRXZlbnQoIGRpc3BsYXlPYmplY3QsICd0YXAnLCB0aGlzLmV2ZW50RGF0YSApO1xuICAgICAgICB9XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIGlmKCBkaXNwbGF5T2JqZWN0Ll90b3VjaERvd24gKVxuICAgICAgICB7XG4gICAgICAgICAgICBkaXNwbGF5T2JqZWN0Ll90b3VjaERvd24gPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudCggZGlzcGxheU9iamVjdCwgJ3RvdWNoZW5kb3V0c2lkZScsIHRoaXMuZXZlbnREYXRhICk7XG4gICAgICAgIH1cbiAgICB9XG59O1xuXG4vKipcbiAqIElzIGNhbGxlZCB3aGVuIGEgdG91Y2ggaXMgbW92ZWQgYWNyb3NzIHRoZSByZW5kZXJlciBlbGVtZW50XG4gKlxuICogQHBhcmFtIGV2ZW50IHtFdmVudH0gVGhlIERPTSBldmVudCBvZiBhIHRvdWNoIG1vdmluZyBhY3Jvc3MgdGhlIHJlbmRlcmVyIHZpZXdcbiAqIEBwcml2YXRlXG4gKi9cbkludGVyYWN0aW9uTWFuYWdlci5wcm90b3R5cGUub25Ub3VjaE1vdmUgPSBmdW5jdGlvbiAoZXZlbnQpXG57XG4gICAgaWYgKHRoaXMuYXV0b1ByZXZlbnREZWZhdWx0KVxuICAgIHtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICB9XG5cbiAgICB2YXIgY2hhbmdlZFRvdWNoZXMgPSBldmVudC5jaGFuZ2VkVG91Y2hlcztcbiAgICB2YXIgY0xlbmd0aCA9IGNoYW5nZWRUb3VjaGVzLmxlbmd0aDtcblxuICAgIGZvciAodmFyIGk9MDsgaSA8IGNMZW5ndGg7IGkrKylcbiAgICB7XG4gICAgICAgIHZhciB0b3VjaEV2ZW50ID0gY2hhbmdlZFRvdWNoZXNbaV07XG5cbiAgICAgICAgdmFyIHRvdWNoRGF0YSA9IHRoaXMuZ2V0VG91Y2hEYXRhKCB0b3VjaEV2ZW50ICk7XG5cbiAgICAgICAgdG91Y2hEYXRhLm9yaWdpbmFsRXZlbnQgPSBldmVudDtcblxuICAgICAgICB0aGlzLmV2ZW50RGF0YS5kYXRhID0gdG91Y2hEYXRhO1xuICAgICAgICB0aGlzLmV2ZW50RGF0YS5zdG9wcGVkID0gZmFsc2U7XG5cbiAgICAgICAgdGhpcy5wcm9jZXNzSW50ZXJhY3RpdmUoIHRvdWNoRGF0YS5nbG9iYWwsIHRoaXMucmVuZGVyZXIuX2xhc3RPYmplY3RSZW5kZXJlZCwgdGhpcy5wcm9jZXNzVG91Y2hNb3ZlLCB0cnVlICk7XG5cbiAgICAgICAgdGhpcy5yZXR1cm5Ub3VjaERhdGEoIHRvdWNoRGF0YSApO1xuICAgIH1cbn07XG5cbi8qKlxuICogUHJvY2Vzc2VzIHRoZSByZXN1bHQgb2YgYSB0b3VjaCBtb3ZlIGNoZWNrIGFuZCBkaXNwYXRjaGVzIHRoZSBldmVudCBpZiBuZWVkIGJlXG4gKlxuICogQHBhcmFtIGRpc3BsYXlPYmplY3Qge1BJWEkuQ29udGFpbmVyfFBJWEkuU3ByaXRlfFBJWEkuZXh0cmFzLlRpbGluZ1Nwcml0ZX0gVGhlIGRpc3BsYXkgb2JqZWN0IHRoYXQgd2FzIHRlc3RlZFxuICogQHBhcmFtIGhpdCB7Ym9vbGVhbn0gdGhlIHJlc3VsdCBvZiB0aGUgaGl0IHRlc3Qgb24gdGhlIGRpc3BsYXkgb2JqZWN0XG4gKiBAcHJpdmF0ZVxuICovXG5JbnRlcmFjdGlvbk1hbmFnZXIucHJvdG90eXBlLnByb2Nlc3NUb3VjaE1vdmUgPSBmdW5jdGlvbiAoIGRpc3BsYXlPYmplY3QsIGhpdCApXG57XG4gICAgaGl0ID0gaGl0O1xuICAgIHRoaXMuZGlzcGF0Y2hFdmVudCggZGlzcGxheU9iamVjdCwgJ3RvdWNobW92ZScsIHRoaXMuZXZlbnREYXRhKTtcbn07XG5cbi8qKlxuICogR3JhYnMgYW4gaW50ZXJhY3Rpb24gZGF0YSBvYmplY3QgZnJvbSB0aGUgaW50ZXJuYWwgcG9vbFxuICpcbiAqIEBwYXJhbSB0b3VjaEV2ZW50IHtFdmVudERhdGF9IFRoZSB0b3VjaCBldmVudCB3ZSBuZWVkIHRvIHBhaXIgd2l0aCBhbiBpbnRlcmFjdGlvbkRhdGEgb2JqZWN0XG4gKlxuICogQHByaXZhdGVcbiAqL1xuSW50ZXJhY3Rpb25NYW5hZ2VyLnByb3RvdHlwZS5nZXRUb3VjaERhdGEgPSBmdW5jdGlvbiAodG91Y2hFdmVudClcbntcbiAgICB2YXIgdG91Y2hEYXRhID0gdGhpcy5pbnRlcmFjdGl2ZURhdGFQb29sLnBvcCgpO1xuXG4gICAgaWYoIXRvdWNoRGF0YSlcbiAgICB7XG4gICAgICAgIHRvdWNoRGF0YSA9IG5ldyBJbnRlcmFjdGlvbkRhdGEoKTtcbiAgICB9XG5cbiAgICB0b3VjaERhdGEuaWRlbnRpZmllciA9IHRvdWNoRXZlbnQuaWRlbnRpZmllcjtcbiAgICB0aGlzLm1hcFBvc2l0aW9uVG9Qb2ludCggdG91Y2hEYXRhLmdsb2JhbCwgdG91Y2hFdmVudC5jbGllbnRYLCB0b3VjaEV2ZW50LmNsaWVudFkgKTtcblxuICAgIGlmKG5hdmlnYXRvci5pc0NvY29vbkpTKVxuICAgIHtcbiAgICAgICAgdG91Y2hEYXRhLmdsb2JhbC54ID0gdG91Y2hEYXRhLmdsb2JhbC54IC8gdGhpcy5yZXNvbHV0aW9uO1xuICAgICAgICB0b3VjaERhdGEuZ2xvYmFsLnkgPSB0b3VjaERhdGEuZ2xvYmFsLnkgLyB0aGlzLnJlc29sdXRpb247XG4gICAgfVxuXG4gICAgdG91Y2hFdmVudC5nbG9iYWxYID0gdG91Y2hEYXRhLmdsb2JhbC54O1xuICAgIHRvdWNoRXZlbnQuZ2xvYmFsWSA9IHRvdWNoRGF0YS5nbG9iYWwueTtcblxuICAgIHJldHVybiB0b3VjaERhdGE7XG59O1xuXG4vKipcbiAqIFJldHVybnMgYW4gaW50ZXJhY3Rpb24gZGF0YSBvYmplY3QgdG8gdGhlIGludGVybmFsIHBvb2xcbiAqXG4gKiBAcGFyYW0gdG91Y2hEYXRhIHtQSVhJLmludGVyYWN0aW9uLkludGVyYWN0aW9uRGF0YX0gVGhlIHRvdWNoIGRhdGEgb2JqZWN0IHdlIHdhbnQgdG8gcmV0dXJuIHRvIHRoZSBwb29sXG4gKlxuICogQHByaXZhdGVcbiAqL1xuSW50ZXJhY3Rpb25NYW5hZ2VyLnByb3RvdHlwZS5yZXR1cm5Ub3VjaERhdGEgPSBmdW5jdGlvbiAoIHRvdWNoRGF0YSApXG57XG4gICAgdGhpcy5pbnRlcmFjdGl2ZURhdGFQb29sLnB1c2goIHRvdWNoRGF0YSApO1xufTtcblxuLyoqXG4gKiBEZXN0cm95cyB0aGUgaW50ZXJhY3Rpb24gbWFuYWdlclxuICpcbiAqL1xuSW50ZXJhY3Rpb25NYW5hZ2VyLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKCkge1xuICAgIHRoaXMucmVtb3ZlRXZlbnRzKCk7XG5cbiAgICB0aGlzLnJlbmRlcmVyID0gbnVsbDtcblxuICAgIHRoaXMubW91c2UgPSBudWxsO1xuXG4gICAgdGhpcy5ldmVudERhdGEgPSBudWxsO1xuXG4gICAgdGhpcy5pbnRlcmFjdGl2ZURhdGFQb29sID0gbnVsbDtcblxuICAgIHRoaXMuaW50ZXJhY3Rpb25ET01FbGVtZW50ID0gbnVsbDtcblxuICAgIHRoaXMub25Nb3VzZVVwID0gbnVsbDtcbiAgICB0aGlzLnByb2Nlc3NNb3VzZVVwID0gbnVsbDtcblxuXG4gICAgdGhpcy5vbk1vdXNlRG93biA9IG51bGw7XG4gICAgdGhpcy5wcm9jZXNzTW91c2VEb3duID0gbnVsbDtcblxuICAgIHRoaXMub25Nb3VzZU1vdmUgPSBudWxsO1xuICAgIHRoaXMucHJvY2Vzc01vdXNlTW92ZSA9IG51bGw7XG5cbiAgICB0aGlzLm9uTW91c2VPdXQgPSBudWxsO1xuICAgIHRoaXMucHJvY2Vzc01vdXNlT3Zlck91dCA9IG51bGw7XG5cblxuICAgIHRoaXMub25Ub3VjaFN0YXJ0ID0gbnVsbDtcbiAgICB0aGlzLnByb2Nlc3NUb3VjaFN0YXJ0ID0gbnVsbDtcblxuICAgIHRoaXMub25Ub3VjaEVuZCA9IG51bGw7XG4gICAgdGhpcy5wcm9jZXNzVG91Y2hFbmQgPSBudWxsO1xuXG4gICAgdGhpcy5vblRvdWNoTW92ZSA9IG51bGw7XG4gICAgdGhpcy5wcm9jZXNzVG91Y2hNb3ZlID0gbnVsbDtcblxuICAgIHRoaXMuX3RlbXBQb2ludCA9IG51bGw7XG59O1xuXG5jb3JlLldlYkdMUmVuZGVyZXIucmVnaXN0ZXJQbHVnaW4oJ2ludGVyYWN0aW9uJywgSW50ZXJhY3Rpb25NYW5hZ2VyKTtcbmNvcmUuQ2FudmFzUmVuZGVyZXIucmVnaXN0ZXJQbHVnaW4oJ2ludGVyYWN0aW9uJywgSW50ZXJhY3Rpb25NYW5hZ2VyKTtcbiIsIi8qKlxuICogQGZpbGUgICAgICAgIE1haW4gZXhwb3J0IG9mIHRoZSBQSVhJIGludGVyYWN0aW9ucyBsaWJyYXJ5XG4gKiBAYXV0aG9yICAgICAgTWF0IEdyb3ZlcyA8bWF0QGdvb2Rib3lkaWdpdGFsLmNvbT5cbiAqIEBjb3B5cmlnaHQgICAyMDEzLTIwMTUgR29vZEJveURpZ2l0YWxcbiAqIEBsaWNlbnNlICAgICB7QGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL3BpeGlqcy9waXhpLmpzL2Jsb2IvbWFzdGVyL0xJQ0VOU0V8TUlUIExpY2Vuc2V9XG4gKi9cblxuLyoqXG4gKiBAbmFtZXNwYWNlIFBJWEkuaW50ZXJhY3Rpb25cbiAqL1xubW9kdWxlLmV4cG9ydHMgPSB7XG4gICAgSW50ZXJhY3Rpb25EYXRhOiAgICByZXF1aXJlKCcuL0ludGVyYWN0aW9uRGF0YScpLFxuICAgIEludGVyYWN0aW9uTWFuYWdlcjogcmVxdWlyZSgnLi9JbnRlcmFjdGlvbk1hbmFnZXInKSxcbiAgICBpbnRlcmFjdGl2ZVRhcmdldDogIHJlcXVpcmUoJy4vaW50ZXJhY3RpdmVUYXJnZXQnKVxufTtcbiIsIi8qKlxuICogRGVmYXVsdCBwcm9wZXJ0eSB2YWx1ZXMgb2YgaW50ZXJhY3RpdmUgb2JqZWN0c1xuICogdXNlZCBieSB7QGxpbmsgUElYSS5pbnRlcmFjdGlvbi5JbnRlcmFjdGlvbk1hbmFnZXJ9LlxuICpcbiAqIEBtaXhpblxuICogQG1lbWJlcm9mIFBJWEkuaW50ZXJhY3Rpb25cbiAqIEBleGFtcGxlXG4gKiAgICAgIGZ1bmN0aW9uIE15T2JqZWN0KCkge31cbiAqXG4gKiAgICAgIE9iamVjdC5hc3NpZ24oXG4gKiAgICAgICAgICBNeU9iamVjdC5wcm90b3R5cGUsXG4gKiAgICAgICAgICBQSVhJLmludGVyYWN0aW9uLmludGVyYWN0aXZlVGFyZ2V0XG4gKiAgICAgICk7XG4gKi9cbnZhciBpbnRlcmFjdGl2ZVRhcmdldCA9IHtcbiAgICAvKipcbiAgICAgKiBAdG9kbyBOZWVkcyBkb2NzLlxuICAgICAqL1xuICAgIGludGVyYWN0aXZlOiBmYWxzZSxcbiAgICAvKipcbiAgICAgKiBAdG9kbyBOZWVkcyBkb2NzLlxuICAgICAqL1xuICAgIGJ1dHRvbk1vZGU6IGZhbHNlLFxuICAgIC8qKlxuICAgICAqIEB0b2RvIE5lZWRzIGRvY3MuXG4gICAgICovXG4gICAgaW50ZXJhY3RpdmVDaGlsZHJlbjogdHJ1ZSxcbiAgICAvKipcbiAgICAgKiBAdG9kbyBOZWVkcyBkb2NzLlxuICAgICAqL1xuICAgIGRlZmF1bHRDdXJzb3I6ICdwb2ludGVyJyxcblxuICAgIC8vIHNvbWUgaW50ZXJuYWwgY2hlY2tzLi5cblxuICAgIC8qKlxuICAgICAqIEB0b2RvIE5lZWRzIGRvY3MuXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICBfb3ZlcjogZmFsc2UsXG4gICAgLyoqXG4gICAgICogQHRvZG8gTmVlZHMgZG9jcy5cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIF90b3VjaERvd246IGZhbHNlXG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGludGVyYWN0aXZlVGFyZ2V0O1xuIiwidmFyIFJlc291cmNlID0gcmVxdWlyZSgncmVzb3VyY2UtbG9hZGVyJykuUmVzb3VyY2UsXG4gICAgY29yZSA9IHJlcXVpcmUoJy4uL2NvcmUnKSxcbiAgICBleHRyYXMgPSByZXF1aXJlKCcuLi9leHRyYXMnKSxcbiAgICBwYXRoID0gcmVxdWlyZSgncGF0aCcpO1xuXG5cbmZ1bmN0aW9uIHBhcnNlKHJlc291cmNlLCB0ZXh0dXJlKSB7XG4gICAgdmFyIGRhdGEgPSB7fTtcbiAgICB2YXIgaW5mbyA9IHJlc291cmNlLmRhdGEuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2luZm8nKVswXTtcbiAgICB2YXIgY29tbW9uID0gcmVzb3VyY2UuZGF0YS5nZXRFbGVtZW50c0J5VGFnTmFtZSgnY29tbW9uJylbMF07XG5cbiAgICBkYXRhLmZvbnQgPSBpbmZvLmdldEF0dHJpYnV0ZSgnZmFjZScpO1xuICAgIGRhdGEuc2l6ZSA9IHBhcnNlSW50KGluZm8uZ2V0QXR0cmlidXRlKCdzaXplJyksIDEwKTtcbiAgICBkYXRhLmxpbmVIZWlnaHQgPSBwYXJzZUludChjb21tb24uZ2V0QXR0cmlidXRlKCdsaW5lSGVpZ2h0JyksIDEwKTtcbiAgICBkYXRhLmNoYXJzID0ge307XG5cbiAgICAvL3BhcnNlIGxldHRlcnNcbiAgICB2YXIgbGV0dGVycyA9IHJlc291cmNlLmRhdGEuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2NoYXInKTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGV0dGVycy5sZW5ndGg7IGkrKylcbiAgICB7XG4gICAgICAgIHZhciBjaGFyQ29kZSA9IHBhcnNlSW50KGxldHRlcnNbaV0uZ2V0QXR0cmlidXRlKCdpZCcpLCAxMCk7XG5cbiAgICAgICAgdmFyIHRleHR1cmVSZWN0ID0gbmV3IGNvcmUuUmVjdGFuZ2xlKFxuICAgICAgICAgICAgcGFyc2VJbnQobGV0dGVyc1tpXS5nZXRBdHRyaWJ1dGUoJ3gnKSwgMTApICsgdGV4dHVyZS5mcmFtZS54LFxuICAgICAgICAgICAgcGFyc2VJbnQobGV0dGVyc1tpXS5nZXRBdHRyaWJ1dGUoJ3knKSwgMTApICsgdGV4dHVyZS5mcmFtZS55LFxuICAgICAgICAgICAgcGFyc2VJbnQobGV0dGVyc1tpXS5nZXRBdHRyaWJ1dGUoJ3dpZHRoJyksIDEwKSxcbiAgICAgICAgICAgIHBhcnNlSW50KGxldHRlcnNbaV0uZ2V0QXR0cmlidXRlKCdoZWlnaHQnKSwgMTApXG4gICAgICAgICk7XG5cbiAgICAgICAgZGF0YS5jaGFyc1tjaGFyQ29kZV0gPSB7XG4gICAgICAgICAgICB4T2Zmc2V0OiBwYXJzZUludChsZXR0ZXJzW2ldLmdldEF0dHJpYnV0ZSgneG9mZnNldCcpLCAxMCksXG4gICAgICAgICAgICB5T2Zmc2V0OiBwYXJzZUludChsZXR0ZXJzW2ldLmdldEF0dHJpYnV0ZSgneW9mZnNldCcpLCAxMCksXG4gICAgICAgICAgICB4QWR2YW5jZTogcGFyc2VJbnQobGV0dGVyc1tpXS5nZXRBdHRyaWJ1dGUoJ3hhZHZhbmNlJyksIDEwKSxcbiAgICAgICAgICAgIGtlcm5pbmc6IHt9LFxuICAgICAgICAgICAgdGV4dHVyZTogbmV3IGNvcmUuVGV4dHVyZSh0ZXh0dXJlLmJhc2VUZXh0dXJlLCB0ZXh0dXJlUmVjdClcblxuICAgICAgICB9O1xuICAgIH1cblxuICAgIC8vcGFyc2Uga2VybmluZ3NcbiAgICB2YXIga2VybmluZ3MgPSByZXNvdXJjZS5kYXRhLmdldEVsZW1lbnRzQnlUYWdOYW1lKCdrZXJuaW5nJyk7XG4gICAgZm9yIChpID0gMDsgaSA8IGtlcm5pbmdzLmxlbmd0aDsgaSsrKVxuICAgIHtcbiAgICAgICAgdmFyIGZpcnN0ID0gcGFyc2VJbnQoa2VybmluZ3NbaV0uZ2V0QXR0cmlidXRlKCdmaXJzdCcpLCAxMCk7XG4gICAgICAgIHZhciBzZWNvbmQgPSBwYXJzZUludChrZXJuaW5nc1tpXS5nZXRBdHRyaWJ1dGUoJ3NlY29uZCcpLCAxMCk7XG4gICAgICAgIHZhciBhbW91bnQgPSBwYXJzZUludChrZXJuaW5nc1tpXS5nZXRBdHRyaWJ1dGUoJ2Ftb3VudCcpLCAxMCk7XG5cbiAgICAgICAgZGF0YS5jaGFyc1tzZWNvbmRdLmtlcm5pbmdbZmlyc3RdID0gYW1vdW50O1xuICAgIH1cblxuICAgIHJlc291cmNlLmJpdG1hcEZvbnQgPSBkYXRhO1xuXG4gICAgLy8gSSdtIGxlYXZpbmcgdGhpcyBhcyBhIHRlbXBvcmFyeSBmaXggc28gd2UgY2FuIHRlc3QgdGhlIGJpdG1hcCBmb250cyBpbiB2M1xuICAgIC8vIGJ1dCBpdCdzIHZlcnkgbGlrZWx5IHRvIGNoYW5nZVxuICAgIGV4dHJhcy5CaXRtYXBUZXh0LmZvbnRzW2RhdGEuZm9udF0gPSBkYXRhO1xufVxuXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKClcbntcbiAgICByZXR1cm4gZnVuY3Rpb24gKHJlc291cmNlLCBuZXh0KVxuICAgIHtcbiAgICAgICAgLy8gc2tpcCBpZiBubyBkYXRhIG9yIG5vdCB4bWwgZGF0YVxuICAgICAgICBpZiAoIXJlc291cmNlLmRhdGEgfHwgIXJlc291cmNlLmlzWG1sKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gbmV4dCgpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gc2tpcCBpZiBub3QgYml0bWFwIGZvbnQgZGF0YSwgdXNpbmcgc29tZSBzaWxseSBkdWNrLXR5cGluZ1xuICAgICAgICBpZiAoXG4gICAgICAgICAgICByZXNvdXJjZS5kYXRhLmdldEVsZW1lbnRzQnlUYWdOYW1lKCdwYWdlJykubGVuZ3RoID09PSAwIHx8XG4gICAgICAgICAgICByZXNvdXJjZS5kYXRhLmdldEVsZW1lbnRzQnlUYWdOYW1lKCdpbmZvJykubGVuZ3RoID09PSAwIHx8XG4gICAgICAgICAgICByZXNvdXJjZS5kYXRhLmdldEVsZW1lbnRzQnlUYWdOYW1lKCdpbmZvJylbMF0uZ2V0QXR0cmlidXRlKCdmYWNlJykgPT09IG51bGxcbiAgICAgICAgICAgIClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIG5leHQoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciB4bWxVcmwgPSBwYXRoLmRpcm5hbWUocmVzb3VyY2UudXJsKTtcblxuICAgICAgICBpZiAoeG1sVXJsID09PSAnLicpIHtcbiAgICAgICAgICAgIHhtbFVybCA9ICcnO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuYmFzZVVybCAmJiB4bWxVcmwpIHtcbiAgICAgICAgICAgIC8vIGlmIGJhc2V1cmwgaGFzIGEgdHJhaWxpbmcgc2xhc2ggdGhlbiBhZGQgb25lIHRvIHhtbFVybCBzbyB0aGUgcmVwbGFjZSB3b3JrcyBiZWxvd1xuICAgICAgICAgICAgaWYgKHRoaXMuYmFzZVVybC5jaGFyQXQodGhpcy5iYXNlVXJsLmxlbmd0aCAtIDEpID09PSAnLycpIHtcbiAgICAgICAgICAgICAgICB4bWxVcmwgKz0gJy8nO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyByZW1vdmUgYmFzZVVybCBmcm9tIHhtbFVybFxuICAgICAgICAgICAgeG1sVXJsID0geG1sVXJsLnJlcGxhY2UodGhpcy5iYXNlVXJsLCAnJyk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBpZiB0aGVyZSBpcyBhbiB4bWxVcmwgbm93LCBpdCBuZWVkcyBhIHRyYWlsaW5nIHNsYXNoLiBFbnN1cmUgdGhhdCBpdCBkb2VzIGlmIHRoZSBzdHJpbmcgaXNuJ3QgZW1wdHkuXG4gICAgICAgIGlmICh4bWxVcmwgJiYgeG1sVXJsLmNoYXJBdCh4bWxVcmwubGVuZ3RoIC0gMSkgIT09ICcvJykge1xuICAgICAgICAgICAgeG1sVXJsICs9ICcvJztcbiAgICAgICAgfVxuICAgICAgICB2YXIgdGV4dHVyZVVybCA9IHhtbFVybCArIHJlc291cmNlLmRhdGEuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ3BhZ2UnKVswXS5nZXRBdHRyaWJ1dGUoJ2ZpbGUnKTtcbiAgICAgICAgaWYgKGNvcmUudXRpbHMuVGV4dHVyZUNhY2hlW3RleHR1cmVVcmxdKSB7XG4gICAgICAgICAgICAvL3JldXNlIGV4aXN0aW5nIHRleHR1cmVcbiAgICAgICAgICAgIHBhcnNlKHJlc291cmNlLCBjb3JlLnV0aWxzLlRleHR1cmVDYWNoZVt0ZXh0dXJlVXJsXSk7XG4gICAgICAgICAgICBuZXh0KCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB2YXIgbG9hZE9wdGlvbnMgPSB7XG4gICAgICAgICAgICAgICAgY3Jvc3NPcmlnaW46IHJlc291cmNlLmNyb3NzT3JpZ2luLFxuICAgICAgICAgICAgICAgIGxvYWRUeXBlOiBSZXNvdXJjZS5MT0FEX1RZUEUuSU1BR0UsXG4gICAgICAgICAgICAgICAgbWV0YWRhdGE6IHJlc291cmNlLm1ldGFkYXRhLmltYWdlTWV0YWRhdGFcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICAvLyBsb2FkIHRoZSB0ZXh0dXJlIGZvciB0aGUgZm9udFxuICAgICAgICAgICAgdGhpcy5hZGQocmVzb3VyY2UubmFtZSArICdfaW1hZ2UnLCB0ZXh0dXJlVXJsLCBsb2FkT3B0aW9ucywgZnVuY3Rpb24gKHJlcykge1xuICAgICAgICAgICAgICAgIHBhcnNlKHJlc291cmNlLCByZXMudGV4dHVyZSk7XG4gICAgICAgICAgICAgICAgbmV4dCgpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9O1xufTtcbiIsIi8qKlxuICogQGZpbGUgICAgICAgIE1haW4gZXhwb3J0IG9mIHRoZSBQSVhJIGxvYWRlcnMgbGlicmFyeVxuICogQGF1dGhvciAgICAgIE1hdCBHcm92ZXMgPG1hdEBnb29kYm95ZGlnaXRhbC5jb20+XG4gKiBAY29weXJpZ2h0ICAgMjAxMy0yMDE1IEdvb2RCb3lEaWdpdGFsXG4gKiBAbGljZW5zZSAgICAge0BsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9waXhpanMvcGl4aS5qcy9ibG9iL21hc3Rlci9MSUNFTlNFfE1JVCBMaWNlbnNlfVxuICovXG5cbi8qKlxuICogQG5hbWVzcGFjZSBQSVhJLmxvYWRlcnNcbiAqL1xubW9kdWxlLmV4cG9ydHMgPSB7XG4gICAgTG9hZGVyOiAgICAgICAgICAgICByZXF1aXJlKCcuL2xvYWRlcicpLFxuXG4gICAgLy8gcGFyc2Vyc1xuICAgIGJpdG1hcEZvbnRQYXJzZXI6ICAgcmVxdWlyZSgnLi9iaXRtYXBGb250UGFyc2VyJyksXG4gICAgc3ByaXRlc2hlZXRQYXJzZXI6ICByZXF1aXJlKCcuL3Nwcml0ZXNoZWV0UGFyc2VyJyksXG4gICAgdGV4dHVyZVBhcnNlcjogICAgICByZXF1aXJlKCcuL3RleHR1cmVQYXJzZXInKSxcbiAgICBSZXNvdXJjZTogICAgICAgICAgIHJlcXVpcmUoJ3Jlc291cmNlLWxvYWRlcicpLlJlc291cmNlXG59O1xuIiwidmFyIFJlc291cmNlTG9hZGVyID0gcmVxdWlyZSgncmVzb3VyY2UtbG9hZGVyJyksXG4gICAgdGV4dHVyZVBhcnNlciA9IHJlcXVpcmUoJy4vdGV4dHVyZVBhcnNlcicpLFxuICAgIHNwcml0ZXNoZWV0UGFyc2VyID0gcmVxdWlyZSgnLi9zcHJpdGVzaGVldFBhcnNlcicpLFxuICAgIGJpdG1hcEZvbnRQYXJzZXIgPSByZXF1aXJlKCcuL2JpdG1hcEZvbnRQYXJzZXInKTtcblxuLyoqXG4gKlxuICogVGhlIG5ldyBsb2FkZXIsIGV4dGVuZHMgUmVzb3VyY2UgTG9hZGVyIGJ5IENoYWQgRW5nbGVyIDogaHR0cHM6Ly9naXRodWIuY29tL2VuZ2xlcmNqL3Jlc291cmNlLWxvYWRlclxuICpcbiAqIGBgYGpzXG4gKiB2YXIgbG9hZGVyID0gUElYSS5sb2FkZXI7IC8vIHBpeGkgZXhwb3NlcyBhIHByZW1hZGUgaW5zdGFuY2UgZm9yIHlvdSB0byB1c2UuXG4gKiAvL29yXG4gKiB2YXIgbG9hZGVyID0gbmV3IFBJWEkubG9hZGVycy5Mb2FkZXIoKTsgLy8geW91IGNhbiBhbHNvIGNyZWF0ZSB5b3VyIG93biBpZiB5b3Ugd2FudFxuICpcbiAqIGxvYWRlci5hZGQoJ2J1bm55JyxcImRhdGEvYnVubnkucG5nXCIpO1xuICpcbiAqIGxvYWRlci5vbmNlKCdjb21wbGV0ZScsb25Bc3NldHNMb2FkZWQpO1xuICpcbiAqIGxvYWRlci5sb2FkKCk7XG4gKiBgYGBcbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuUmVzb3VyY2VMb2FkZXJcbiAqIEBtZW1iZXJvZiBQSVhJLmxvYWRlcnNcbiAqIEBwYXJhbSBbYmFzZVVybD0nJ10ge3N0cmluZ30gVGhlIGJhc2UgdXJsIGZvciBhbGwgcmVzb3VyY2VzIGxvYWRlZCBieSB0aGlzIGxvYWRlci5cbiAqIEBwYXJhbSBbY29uY3VycmVuY3k9MTBdIHtudW1iZXJ9IFRoZSBudW1iZXIgb2YgcmVzb3VyY2VzIHRvIGxvYWQgY29uY3VycmVudGx5LlxuICovXG5mdW5jdGlvbiBMb2FkZXIoYmFzZVVybCwgY29uY3VycmVuY3kpXG57XG4gICAgUmVzb3VyY2VMb2FkZXIuY2FsbCh0aGlzLCBiYXNlVXJsLCBjb25jdXJyZW5jeSk7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IExvYWRlci5fcGl4aU1pZGRsZXdhcmUubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgdGhpcy51c2UoTG9hZGVyLl9waXhpTWlkZGxld2FyZVtpXSgpKTtcbiAgICB9XG59XG5cbkxvYWRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFJlc291cmNlTG9hZGVyLnByb3RvdHlwZSk7XG5Mb2FkZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gTG9hZGVyO1xuXG5tb2R1bGUuZXhwb3J0cyA9IExvYWRlcjtcblxuTG9hZGVyLl9waXhpTWlkZGxld2FyZSA9IFtcbiAgICAvLyBwYXJzZSBhbnkgYmxvYiBpbnRvIG1vcmUgdXNhYmxlIG9iamVjdHMgKGUuZy4gSW1hZ2UpXG4gICAgUmVzb3VyY2VMb2FkZXIubWlkZGxld2FyZS5wYXJzaW5nLmJsb2IsXG4gICAgLy8gcGFyc2UgYW55IEltYWdlIG9iamVjdHMgaW50byB0ZXh0dXJlc1xuICAgIHRleHR1cmVQYXJzZXIsXG4gICAgLy8gcGFyc2UgYW55IHNwcml0ZXNoZWV0IGRhdGEgaW50byBtdWx0aXBsZSB0ZXh0dXJlc1xuICAgIHNwcml0ZXNoZWV0UGFyc2VyLFxuICAgIC8vIHBhcnNlIGFueSBzcHJpdGVzaGVldCBkYXRhIGludG8gbXVsdGlwbGUgdGV4dHVyZXNcbiAgICBiaXRtYXBGb250UGFyc2VyXG5dO1xuXG5Mb2FkZXIuYWRkUGl4aU1pZGRsZXdhcmUgPSBmdW5jdGlvbiAoZm4pIHtcbiAgICBMb2FkZXIuX3BpeGlNaWRkbGV3YXJlLnB1c2goZm4pO1xufTtcblxuLy8gQWRkIGN1c3RvbSBleHRlbnRpb25zXG52YXIgUmVzb3VyY2UgPSBSZXNvdXJjZUxvYWRlci5SZXNvdXJjZTtcblxuUmVzb3VyY2Uuc2V0RXh0ZW5zaW9uWGhyVHlwZSgnZm50JywgUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuRE9DVU1FTlQpO1xuIiwidmFyIFJlc291cmNlID0gcmVxdWlyZSgncmVzb3VyY2UtbG9hZGVyJykuUmVzb3VyY2UsXG4gICAgcGF0aCA9IHJlcXVpcmUoJ3BhdGgnKSxcbiAgICBjb3JlID0gcmVxdWlyZSgnLi4vY29yZScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICgpXG57XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChyZXNvdXJjZSwgbmV4dClcbiAgICB7XG4gICAgICAgIC8vIHNraXAgaWYgbm8gZGF0YSwgaXRzIG5vdCBqc29uLCBvciBpdCBpc24ndCBzcHJpdGVzaGVldCBkYXRhXG4gICAgICAgIGlmICghcmVzb3VyY2UuZGF0YSB8fCAhcmVzb3VyY2UuaXNKc29uIHx8ICFyZXNvdXJjZS5kYXRhLmZyYW1lcylcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIG5leHQoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBsb2FkT3B0aW9ucyA9IHtcbiAgICAgICAgICAgIGNyb3NzT3JpZ2luOiByZXNvdXJjZS5jcm9zc09yaWdpbixcbiAgICAgICAgICAgIGxvYWRUeXBlOiBSZXNvdXJjZS5MT0FEX1RZUEUuSU1BR0UsXG4gICAgICAgICAgICBtZXRhZGF0YTogcmVzb3VyY2UubWV0YWRhdGEuaW1hZ2VNZXRhZGF0YVxuICAgICAgICB9O1xuXG4gICAgICAgIHZhciByb3V0ZSA9IHBhdGguZGlybmFtZShyZXNvdXJjZS51cmwucmVwbGFjZSh0aGlzLmJhc2VVcmwsICcnKSk7XG5cbiAgICAgICAgdmFyIHJlc29sdXRpb24gPSBjb3JlLnV0aWxzLmdldFJlc29sdXRpb25PZlVybCggcmVzb3VyY2UudXJsICk7XG5cbiAgICAgICAgLy8gbG9hZCB0aGUgaW1hZ2UgZm9yIHRoaXMgc2hlZXRcbiAgICAgICAgdGhpcy5hZGQocmVzb3VyY2UubmFtZSArICdfaW1hZ2UnLCByb3V0ZSArICcvJyArIHJlc291cmNlLmRhdGEubWV0YS5pbWFnZSwgbG9hZE9wdGlvbnMsIGZ1bmN0aW9uIChyZXMpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJlc291cmNlLnRleHR1cmVzID0ge307XG5cbiAgICAgICAgICAgIHZhciBmcmFtZXMgPSByZXNvdXJjZS5kYXRhLmZyYW1lcztcblxuICAgICAgICAgICAgZm9yICh2YXIgaSBpbiBmcmFtZXMpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdmFyIHJlY3QgPSBmcmFtZXNbaV0uZnJhbWU7XG5cbiAgICAgICAgICAgICAgICBpZiAocmVjdClcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBzaXplID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHRyaW0gPSBudWxsO1xuXG4gICAgICAgICAgICAgICAgICAgIGlmIChmcmFtZXNbaV0ucm90YXRlZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZSA9IG5ldyBjb3JlLlJlY3RhbmdsZShyZWN0LngsIHJlY3QueSwgcmVjdC5oLCByZWN0LncpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZSA9IG5ldyBjb3JlLlJlY3RhbmdsZShyZWN0LngsIHJlY3QueSwgcmVjdC53LCByZWN0LmgpO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgLy8gIENoZWNrIHRvIHNlZSBpZiB0aGUgc3ByaXRlIGlzIHRyaW1tZWRcbiAgICAgICAgICAgICAgICAgICAgaWYgKGZyYW1lc1tpXS50cmltbWVkKVxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0cmltID0gbmV3IGNvcmUuUmVjdGFuZ2xlKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyYW1lc1tpXS5zcHJpdGVTb3VyY2VTaXplLnggLyByZXNvbHV0aW9uLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyYW1lc1tpXS5zcHJpdGVTb3VyY2VTaXplLnkgLyByZXNvbHV0aW9uLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyYW1lc1tpXS5zb3VyY2VTaXplLncgLyByZXNvbHV0aW9uLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyYW1lc1tpXS5zb3VyY2VTaXplLmggLyByZXNvbHV0aW9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIC8vIGZsaXAgdGhlIHdpZHRoIGFuZCBoZWlnaHQhXG4gICAgICAgICAgICAgICAgICAgIGlmIChmcmFtZXNbaV0ucm90YXRlZClcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHRlbXAgPSBzaXplLndpZHRoO1xuICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZS53aWR0aCA9IHNpemUuaGVpZ2h0O1xuICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZS5oZWlnaHQgPSB0ZW1wO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgc2l6ZS54IC89IHJlc29sdXRpb247XG4gICAgICAgICAgICAgICAgICAgIHNpemUueSAvPSByZXNvbHV0aW9uO1xuICAgICAgICAgICAgICAgICAgICBzaXplLndpZHRoIC89IHJlc29sdXRpb247XG4gICAgICAgICAgICAgICAgICAgIHNpemUuaGVpZ2h0IC89IHJlc29sdXRpb247XG5cbiAgICAgICAgICAgICAgICAgICAgcmVzb3VyY2UudGV4dHVyZXNbaV0gPSBuZXcgY29yZS5UZXh0dXJlKHJlcy50ZXh0dXJlLmJhc2VUZXh0dXJlLCBzaXplLCBzaXplLmNsb25lKCksIHRyaW0sIGZyYW1lc1tpXS5yb3RhdGVkKTtcblxuICAgICAgICAgICAgICAgICAgICAvLyBsZXRzIGFsc28gYWRkIHRoZSBmcmFtZSB0byBwaXhpJ3MgZ2xvYmFsIGNhY2hlIGZvciBmcm9tRnJhbWUgYW5kIGZyb21JbWFnZSBmdW5jdGlvbnNcbiAgICAgICAgICAgICAgICAgICAgY29yZS51dGlscy5UZXh0dXJlQ2FjaGVbaV0gPSByZXNvdXJjZS50ZXh0dXJlc1tpXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIG5leHQoKTtcbiAgICAgICAgfSk7XG4gICAgfTtcbn07XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uL2NvcmUnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoKVxue1xuICAgIHJldHVybiBmdW5jdGlvbiAocmVzb3VyY2UsIG5leHQpXG4gICAge1xuICAgICAgICAvLyBjcmVhdGUgYSBuZXcgdGV4dHVyZSBpZiB0aGUgZGF0YSBpcyBhbiBJbWFnZSBvYmplY3RcbiAgICAgICAgaWYgKHJlc291cmNlLmRhdGEgJiYgcmVzb3VyY2UuaXNJbWFnZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdmFyIGJhc2VUZXh0dXJlID0gbmV3IGNvcmUuQmFzZVRleHR1cmUocmVzb3VyY2UuZGF0YSwgbnVsbCwgY29yZS51dGlscy5nZXRSZXNvbHV0aW9uT2ZVcmwocmVzb3VyY2UudXJsKSk7XG4gICAgICAgICAgICBiYXNlVGV4dHVyZS5pbWFnZVVybCA9IHJlc291cmNlLnVybDtcbiAgICAgICAgICAgIHJlc291cmNlLnRleHR1cmUgPSBuZXcgY29yZS5UZXh0dXJlKGJhc2VUZXh0dXJlKTtcbiAgICAgICAgICAgIC8vIGxldHMgYWxzbyBhZGQgdGhlIGZyYW1lIHRvIHBpeGkncyBnbG9iYWwgY2FjaGUgZm9yIGZyb21GcmFtZSBhbmQgZnJvbUltYWdlIGZ1Y250aW9uc1xuICAgICAgICAgICAgY29yZS51dGlscy5CYXNlVGV4dHVyZUNhY2hlW3Jlc291cmNlLnVybF0gPSBiYXNlVGV4dHVyZTtcbiAgICAgICAgICAgIGNvcmUudXRpbHMuVGV4dHVyZUNhY2hlW3Jlc291cmNlLnVybF0gPSByZXNvdXJjZS50ZXh0dXJlO1xuICAgICAgICB9XG5cbiAgICAgICAgbmV4dCgpO1xuICAgIH07XG59O1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi9jb3JlJyksXG4gICAgdGVtcFBvaW50ID0gbmV3IGNvcmUuUG9pbnQoKSxcbiAgICB0ZW1wUG9seWdvbiA9IG5ldyBjb3JlLlBvbHlnb24oKTtcblxuLyoqXG4gKiBCYXNlIG1lc2ggY2xhc3NcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5Db250YWluZXJcbiAqIEBtZW1iZXJvZiBQSVhJLm1lc2hcbiAqIEBwYXJhbSB0ZXh0dXJlIHtQSVhJLlRleHR1cmV9IFRoZSB0ZXh0dXJlIHRvIHVzZVxuICogQHBhcmFtIFt2ZXJ0aWNlc10ge0Zsb2F0MzJBcnJheX0gaWYgeW91IHdhbnQgdG8gc3BlY2lmeSB0aGUgdmVydGljZXNcbiAqIEBwYXJhbSBbdXZzXSB7RmxvYXQzMkFycmF5fSBpZiB5b3Ugd2FudCB0byBzcGVjaWZ5IHRoZSB1dnNcbiAqIEBwYXJhbSBbaW5kaWNlc10ge1VpbnQxNkFycmF5fSBpZiB5b3Ugd2FudCB0byBzcGVjaWZ5IHRoZSBpbmRpY2VzXG4gKiBAcGFyYW0gW2RyYXdNb2RlXSB7bnVtYmVyfSB0aGUgZHJhd01vZGUsIGNhbiBiZSBhbnkgb2YgdGhlIE1lc2guRFJBV19NT0RFUyBjb25zdHNcbiAqL1xuZnVuY3Rpb24gTWVzaCh0ZXh0dXJlLCB2ZXJ0aWNlcywgdXZzLCBpbmRpY2VzLCBkcmF3TW9kZSlcbntcbiAgICBjb3JlLkNvbnRhaW5lci5jYWxsKHRoaXMpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHRleHR1cmUgb2YgdGhlIE1lc2hcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuVGV4dHVyZX1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX3RleHR1cmUgPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogVGhlIFV2cyBvZiB0aGUgTWVzaFxuICAgICAqXG4gICAgICogQG1lbWJlciB7RmxvYXQzMkFycmF5fVxuICAgICAqL1xuICAgIHRoaXMudXZzID0gdXZzIHx8IG5ldyBGbG9hdDMyQXJyYXkoWzAsIDAsXG4gICAgICAgIDEsIDAsXG4gICAgICAgIDEsIDEsXG4gICAgICAgIDAsIDFdKTtcblxuICAgIC8qKlxuICAgICAqIEFuIGFycmF5IG9mIHZlcnRpY2VzXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtGbG9hdDMyQXJyYXl9XG4gICAgICovXG4gICAgdGhpcy52ZXJ0aWNlcyA9IHZlcnRpY2VzIHx8IG5ldyBGbG9hdDMyQXJyYXkoWzAsIDAsXG4gICAgICAgIDEwMCwgMCxcbiAgICAgICAgMTAwLCAxMDAsXG4gICAgICAgIDAsIDEwMF0pO1xuXG4gICAgLypcbiAgICAgKiBAbWVtYmVyIHtVaW50MTZBcnJheX0gQW4gYXJyYXkgY29udGFpbmluZyB0aGUgaW5kaWNlcyBvZiB0aGUgdmVydGljZXNcbiAgICAgKi9cbiAgICAvLyAgVE9ETyBhdXRvIGdlbmVyYXRlIHRoaXMgYmFzZWQgb24gZHJhdyBtb2RlIVxuICAgIHRoaXMuaW5kaWNlcyA9IGluZGljZXMgfHwgbmV3IFVpbnQxNkFycmF5KFswLCAxLCAzLCAyXSk7XG5cbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIHRoZSBNZXNoIGlzIGRpcnR5IG9yIG5vdFxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKi9cbiAgICB0aGlzLmRpcnR5ID0gdHJ1ZTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBibGVuZCBtb2RlIHRvIGJlIGFwcGxpZWQgdG8gdGhlIHNwcml0ZS4gU2V0IHRvIGBQSVhJLkJMRU5EX01PREVTLk5PUk1BTGAgdG8gcmVtb3ZlIGFueSBibGVuZCBtb2RlLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IFBJWEkuQkxFTkRfTU9ERVMuTk9STUFMXG4gICAgICogQHNlZSBQSVhJLkJMRU5EX01PREVTXG4gICAgICovXG4gICAgdGhpcy5ibGVuZE1vZGUgPSBjb3JlLkJMRU5EX01PREVTLk5PUk1BTDtcblxuICAgIC8qKlxuICAgICAqIFRyaWFuZ2xlcyBpbiBjYW52YXMgbW9kZSBhcmUgYXV0b21hdGljYWxseSBhbnRpYWxpYXNlZCwgdXNlIHRoaXMgdmFsdWUgdG8gZm9yY2UgdHJpYW5nbGVzIHRvIG92ZXJsYXAgYSBiaXQgd2l0aCBlYWNoIG90aGVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMuY2FudmFzUGFkZGluZyA9IDA7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgd2F5IHRoZSBNZXNoIHNob3VsZCBiZSBkcmF3biwgY2FuIGJlIGFueSBvZiB0aGUge0BsaW5rIFBJWEkubWVzaC5NZXNoLkRSQVdfTU9ERVN9IGNvbnN0c1xuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBzZWUgUElYSS5tZXNoLk1lc2guRFJBV19NT0RFU1xuICAgICAqL1xuICAgIHRoaXMuZHJhd01vZGUgPSBkcmF3TW9kZSB8fCBNZXNoLkRSQVdfTU9ERVMuVFJJQU5HTEVfTUVTSDtcblxuICAgIC8vIHJ1biB0ZXh0dXJlIHNldHRlcjtcbiAgICB0aGlzLnRleHR1cmUgPSB0ZXh0dXJlO1xuXG4gICAgIC8qKlxuICAgICAqIFRoZSBkZWZhdWx0IHNoYWRlciB0aGF0IGlzIHVzZWQgaWYgYSBtZXNoIGRvZXNuJ3QgaGF2ZSBhIG1vcmUgc3BlY2lmaWMgb25lLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5TaGFkZXJ9XG4gICAgICovXG4gICAgdGhpcy5zaGFkZXIgPSBudWxsO1xufVxuXG4vLyBjb25zdHJ1Y3RvclxuTWVzaC5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuQ29udGFpbmVyLnByb3RvdHlwZSk7XG5NZXNoLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IE1lc2g7XG5tb2R1bGUuZXhwb3J0cyA9IE1lc2g7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKE1lc2gucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogVGhlIHRleHR1cmUgdGhhdCB0aGUgc3ByaXRlIGlzIHVzaW5nXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlRleHR1cmV9XG4gICAgICogQG1lbWJlcm9mIFBJWEkubWVzaC5NZXNoI1xuICAgICAqL1xuICAgIHRleHR1cmU6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gIHRoaXMuX3RleHR1cmU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICBpZiAodGhpcy5fdGV4dHVyZSA9PT0gdmFsdWUpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLl90ZXh0dXJlID0gdmFsdWU7XG5cbiAgICAgICAgICAgIGlmICh2YWx1ZSlcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAvLyB3YWl0IGZvciB0aGUgdGV4dHVyZSB0byBsb2FkXG4gICAgICAgICAgICAgICAgaWYgKHZhbHVlLmJhc2VUZXh0dXJlLmhhc0xvYWRlZClcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX29uVGV4dHVyZVVwZGF0ZSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICB2YWx1ZS5vbmNlKCd1cGRhdGUnLCB0aGlzLl9vblRleHR1cmVVcGRhdGUsIHRoaXMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn0pO1xuXG4vKipcbiAqIFJlbmRlcnMgdGhlIG9iamVjdCB1c2luZyB0aGUgV2ViR0wgcmVuZGVyZXJcbiAqXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcn0gYSByZWZlcmVuY2UgdG8gdGhlIFdlYkdMIHJlbmRlcmVyXG4gKiBAcHJpdmF0ZVxuICovXG5NZXNoLnByb3RvdHlwZS5fcmVuZGVyV2ViR0wgPSBmdW5jdGlvbiAocmVuZGVyZXIpXG57XG4gICAgcmVuZGVyZXIuc2V0T2JqZWN0UmVuZGVyZXIocmVuZGVyZXIucGx1Z2lucy5tZXNoKTtcbiAgICByZW5kZXJlci5wbHVnaW5zLm1lc2gucmVuZGVyKHRoaXMpO1xufTtcblxuLyoqXG4gKiBSZW5kZXJzIHRoZSBvYmplY3QgdXNpbmcgdGhlIENhbnZhcyByZW5kZXJlclxuICpcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5DYW52YXNSZW5kZXJlcn1cbiAqIEBwcml2YXRlXG4gKi9cbk1lc2gucHJvdG90eXBlLl9yZW5kZXJDYW52YXMgPSBmdW5jdGlvbiAocmVuZGVyZXIpXG57XG4gICAgdmFyIGNvbnRleHQgPSByZW5kZXJlci5jb250ZXh0O1xuXG4gICAgdmFyIHRyYW5zZm9ybSA9IHRoaXMud29ybGRUcmFuc2Zvcm07XG5cbiAgICBpZiAocmVuZGVyZXIucm91bmRQaXhlbHMpXG4gICAge1xuICAgICAgICBjb250ZXh0LnNldFRyYW5zZm9ybSh0cmFuc2Zvcm0uYSwgdHJhbnNmb3JtLmIsIHRyYW5zZm9ybS5jLCB0cmFuc2Zvcm0uZCwgdHJhbnNmb3JtLnR4IHwgMCwgdHJhbnNmb3JtLnR5IHwgMCk7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIGNvbnRleHQuc2V0VHJhbnNmb3JtKHRyYW5zZm9ybS5hLCB0cmFuc2Zvcm0uYiwgdHJhbnNmb3JtLmMsIHRyYW5zZm9ybS5kLCB0cmFuc2Zvcm0udHgsIHRyYW5zZm9ybS50eSk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuZHJhd01vZGUgPT09IE1lc2guRFJBV19NT0RFUy5UUklBTkdMRV9NRVNIKVxuICAgIHtcbiAgICAgICAgdGhpcy5fcmVuZGVyQ2FudmFzVHJpYW5nbGVNZXNoKGNvbnRleHQpO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICB0aGlzLl9yZW5kZXJDYW52YXNUcmlhbmdsZXMoY29udGV4dCk7XG4gICAgfVxufTtcblxuLyoqXG4gKiBEcmF3cyB0aGUgb2JqZWN0IGluIFRyaWFuZ2xlIE1lc2ggbW9kZSB1c2luZyBjYW52YXNcbiAqXG4gKiBAcGFyYW0gY29udGV4dCB7Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEfSB0aGUgY3VycmVudCBkcmF3aW5nIGNvbnRleHRcbiAqIEBwcml2YXRlXG4gKi9cbk1lc2gucHJvdG90eXBlLl9yZW5kZXJDYW52YXNUcmlhbmdsZU1lc2ggPSBmdW5jdGlvbiAoY29udGV4dClcbntcbiAgICAvLyBkcmF3IHRyaWFuZ2xlcyEhXG4gICAgdmFyIHZlcnRpY2VzID0gdGhpcy52ZXJ0aWNlcztcbiAgICB2YXIgdXZzID0gdGhpcy51dnM7XG5cbiAgICB2YXIgbGVuZ3RoID0gdmVydGljZXMubGVuZ3RoIC8gMjtcbiAgICAvLyB0aGlzLmNvdW50Kys7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aCAtIDI7IGkrKylcbiAgICB7XG4gICAgICAgIC8vIGRyYXcgc29tZSB0cmlhbmdsZXMhXG4gICAgICAgIHZhciBpbmRleCA9IGkgKiAyO1xuICAgICAgICB0aGlzLl9yZW5kZXJDYW52YXNEcmF3VHJpYW5nbGUoY29udGV4dCwgdmVydGljZXMsIHV2cywgaW5kZXgsIChpbmRleCArIDIpLCAoaW5kZXggKyA0KSk7XG4gICAgfVxufTtcblxuLyoqXG4gKiBEcmF3cyB0aGUgb2JqZWN0IGluIHRyaWFuZ2xlIG1vZGUgdXNpbmcgY2FudmFzXG4gKlxuICogQHBhcmFtIGNvbnRleHQge0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRH0gdGhlIGN1cnJlbnQgZHJhd2luZyBjb250ZXh0XG4gKiBAcHJpdmF0ZVxuICovXG5NZXNoLnByb3RvdHlwZS5fcmVuZGVyQ2FudmFzVHJpYW5nbGVzID0gZnVuY3Rpb24gKGNvbnRleHQpXG57XG4gICAgLy8gZHJhdyB0cmlhbmdsZXMhIVxuICAgIHZhciB2ZXJ0aWNlcyA9IHRoaXMudmVydGljZXM7XG4gICAgdmFyIHV2cyA9IHRoaXMudXZzO1xuICAgIHZhciBpbmRpY2VzID0gdGhpcy5pbmRpY2VzO1xuXG4gICAgdmFyIGxlbmd0aCA9IGluZGljZXMubGVuZ3RoO1xuICAgIC8vIHRoaXMuY291bnQrKztcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyBpICs9IDMpXG4gICAge1xuICAgICAgICAvLyBkcmF3IHNvbWUgdHJpYW5nbGVzIVxuICAgICAgICB2YXIgaW5kZXgwID0gaW5kaWNlc1tpXSAqIDIsIGluZGV4MSA9IGluZGljZXNbaSArIDFdICogMiwgaW5kZXgyID0gaW5kaWNlc1tpICsgMl0gKiAyO1xuICAgICAgICB0aGlzLl9yZW5kZXJDYW52YXNEcmF3VHJpYW5nbGUoY29udGV4dCwgdmVydGljZXMsIHV2cywgaW5kZXgwLCBpbmRleDEsIGluZGV4Mik7XG4gICAgfVxufTtcblxuLyoqXG4gKiBEcmF3cyBvbmUgb2YgdGhlIHRyaWFuZ2xlcyB0aGF0IGZvcm0gdGhpcyBNZXNoXG4gKlxuICogQHBhcmFtIGNvbnRleHQge0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRH0gdGhlIGN1cnJlbnQgZHJhd2luZyBjb250ZXh0XG4gKiBAcGFyYW0gdmVydGljZXMge0Zsb2F0MzJBcnJheX0gYSByZWZlcmVuY2UgdG8gdGhlIHZlcnRpY2VzIG9mIHRoZSBNZXNoXG4gKiBAcGFyYW0gdXZzIHtGbG9hdDMyQXJyYXl9IGEgcmVmZXJlbmNlIHRvIHRoZSB1dnMgb2YgdGhlIE1lc2hcbiAqIEBwYXJhbSBpbmRleDAge251bWJlcn0gdGhlIGluZGV4IG9mIHRoZSBmaXJzdCB2ZXJ0ZXhcbiAqIEBwYXJhbSBpbmRleDEge251bWJlcn0gdGhlIGluZGV4IG9mIHRoZSBzZWNvbmQgdmVydGV4XG4gKiBAcGFyYW0gaW5kZXgyIHtudW1iZXJ9IHRoZSBpbmRleCBvZiB0aGUgdGhpcmQgdmVydGV4XG4gKiBAcHJpdmF0ZVxuICovXG5NZXNoLnByb3RvdHlwZS5fcmVuZGVyQ2FudmFzRHJhd1RyaWFuZ2xlID0gZnVuY3Rpb24gKGNvbnRleHQsIHZlcnRpY2VzLCB1dnMsIGluZGV4MCwgaW5kZXgxLCBpbmRleDIpXG57XG4gICAgdmFyIHRleHR1cmVTb3VyY2UgPSB0aGlzLl90ZXh0dXJlLmJhc2VUZXh0dXJlLnNvdXJjZTtcbiAgICB2YXIgdGV4dHVyZVdpZHRoID0gdGhpcy5fdGV4dHVyZS5iYXNlVGV4dHVyZS53aWR0aDtcbiAgICB2YXIgdGV4dHVyZUhlaWdodCA9IHRoaXMuX3RleHR1cmUuYmFzZVRleHR1cmUuaGVpZ2h0O1xuXG4gICAgdmFyIHgwID0gdmVydGljZXNbaW5kZXgwXSwgeDEgPSB2ZXJ0aWNlc1tpbmRleDFdLCB4MiA9IHZlcnRpY2VzW2luZGV4Ml07XG4gICAgdmFyIHkwID0gdmVydGljZXNbaW5kZXgwICsgMV0sIHkxID0gdmVydGljZXNbaW5kZXgxICsgMV0sIHkyID0gdmVydGljZXNbaW5kZXgyICsgMV07XG5cbiAgICB2YXIgdTAgPSB1dnNbaW5kZXgwXSAqIHRleHR1cmVXaWR0aCwgdTEgPSB1dnNbaW5kZXgxXSAqIHRleHR1cmVXaWR0aCwgdTIgPSB1dnNbaW5kZXgyXSAqIHRleHR1cmVXaWR0aDtcbiAgICB2YXIgdjAgPSB1dnNbaW5kZXgwICsgMV0gKiB0ZXh0dXJlSGVpZ2h0LCB2MSA9IHV2c1tpbmRleDEgKyAxXSAqIHRleHR1cmVIZWlnaHQsIHYyID0gdXZzW2luZGV4MiArIDFdICogdGV4dHVyZUhlaWdodDtcblxuICAgIGlmICh0aGlzLmNhbnZhc1BhZGRpbmcgPiAwKVxuICAgIHtcbiAgICAgICAgdmFyIHBhZGRpbmdYID0gdGhpcy5jYW52YXNQYWRkaW5nIC8gdGhpcy53b3JsZFRyYW5zZm9ybS5hO1xuICAgICAgICB2YXIgcGFkZGluZ1kgPSB0aGlzLmNhbnZhc1BhZGRpbmcgLyB0aGlzLndvcmxkVHJhbnNmb3JtLmQ7XG4gICAgICAgIHZhciBjZW50ZXJYID0gKHgwICsgeDEgKyB4MikgLyAzO1xuICAgICAgICB2YXIgY2VudGVyWSA9ICh5MCArIHkxICsgeTIpIC8gMztcblxuICAgICAgICB2YXIgbm9ybVggPSB4MCAtIGNlbnRlclg7XG4gICAgICAgIHZhciBub3JtWSA9IHkwIC0gY2VudGVyWTtcblxuICAgICAgICB2YXIgZGlzdCA9IE1hdGguc3FydChub3JtWCAqIG5vcm1YICsgbm9ybVkgKiBub3JtWSk7XG4gICAgICAgIHgwID0gY2VudGVyWCArIChub3JtWCAvIGRpc3QpICogKGRpc3QgKyBwYWRkaW5nWCk7XG4gICAgICAgIHkwID0gY2VudGVyWSArIChub3JtWSAvIGRpc3QpICogKGRpc3QgKyBwYWRkaW5nWSk7XG5cbiAgICAgICAgLy9cblxuICAgICAgICBub3JtWCA9IHgxIC0gY2VudGVyWDtcbiAgICAgICAgbm9ybVkgPSB5MSAtIGNlbnRlclk7XG5cbiAgICAgICAgZGlzdCA9IE1hdGguc3FydChub3JtWCAqIG5vcm1YICsgbm9ybVkgKiBub3JtWSk7XG4gICAgICAgIHgxID0gY2VudGVyWCArIChub3JtWCAvIGRpc3QpICogKGRpc3QgKyBwYWRkaW5nWCk7XG4gICAgICAgIHkxID0gY2VudGVyWSArIChub3JtWSAvIGRpc3QpICogKGRpc3QgKyBwYWRkaW5nWSk7XG5cbiAgICAgICAgbm9ybVggPSB4MiAtIGNlbnRlclg7XG4gICAgICAgIG5vcm1ZID0geTIgLSBjZW50ZXJZO1xuXG4gICAgICAgIGRpc3QgPSBNYXRoLnNxcnQobm9ybVggKiBub3JtWCArIG5vcm1ZICogbm9ybVkpO1xuICAgICAgICB4MiA9IGNlbnRlclggKyAobm9ybVggLyBkaXN0KSAqIChkaXN0ICsgcGFkZGluZ1gpO1xuICAgICAgICB5MiA9IGNlbnRlclkgKyAobm9ybVkgLyBkaXN0KSAqIChkaXN0ICsgcGFkZGluZ1kpO1xuICAgIH1cblxuICAgIGNvbnRleHQuc2F2ZSgpO1xuICAgIGNvbnRleHQuYmVnaW5QYXRoKCk7XG5cblxuICAgIGNvbnRleHQubW92ZVRvKHgwLCB5MCk7XG4gICAgY29udGV4dC5saW5lVG8oeDEsIHkxKTtcbiAgICBjb250ZXh0LmxpbmVUbyh4MiwgeTIpO1xuXG4gICAgY29udGV4dC5jbG9zZVBhdGgoKTtcblxuICAgIGNvbnRleHQuY2xpcCgpO1xuXG4gICAgLy8gQ29tcHV0ZSBtYXRyaXggdHJhbnNmb3JtXG4gICAgdmFyIGRlbHRhID0gICh1MCAqIHYxKSAgICAgICsgKHYwICogdTIpICAgICAgKyAodTEgKiB2MikgICAgICAtICh2MSAqIHUyKSAgICAgIC0gKHYwICogdTEpICAgICAgLSAodTAgKiB2Mik7XG4gICAgdmFyIGRlbHRhQSA9ICh4MCAqIHYxKSAgICAgICsgKHYwICogeDIpICAgICAgKyAoeDEgKiB2MikgICAgICAtICh2MSAqIHgyKSAgICAgIC0gKHYwICogeDEpICAgICAgLSAoeDAgKiB2Mik7XG4gICAgdmFyIGRlbHRhQiA9ICh1MCAqIHgxKSAgICAgICsgKHgwICogdTIpICAgICAgKyAodTEgKiB4MikgICAgICAtICh4MSAqIHUyKSAgICAgIC0gKHgwICogdTEpICAgICAgLSAodTAgKiB4Mik7XG4gICAgdmFyIGRlbHRhQyA9ICh1MCAqIHYxICogeDIpICsgKHYwICogeDEgKiB1MikgKyAoeDAgKiB1MSAqIHYyKSAtICh4MCAqIHYxICogdTIpIC0gKHYwICogdTEgKiB4MikgLSAodTAgKiB4MSAqIHYyKTtcbiAgICB2YXIgZGVsdGFEID0gKHkwICogdjEpICAgICAgKyAodjAgKiB5MikgICAgICArICh5MSAqIHYyKSAgICAgIC0gKHYxICogeTIpICAgICAgLSAodjAgKiB5MSkgICAgICAtICh5MCAqIHYyKTtcbiAgICB2YXIgZGVsdGFFID0gKHUwICogeTEpICAgICAgKyAoeTAgKiB1MikgICAgICArICh1MSAqIHkyKSAgICAgIC0gKHkxICogdTIpICAgICAgLSAoeTAgKiB1MSkgICAgICAtICh1MCAqIHkyKTtcbiAgICB2YXIgZGVsdGFGID0gKHUwICogdjEgKiB5MikgKyAodjAgKiB5MSAqIHUyKSArICh5MCAqIHUxICogdjIpIC0gKHkwICogdjEgKiB1MikgLSAodjAgKiB1MSAqIHkyKSAtICh1MCAqIHkxICogdjIpO1xuXG4gICAgY29udGV4dC50cmFuc2Zvcm0oZGVsdGFBIC8gZGVsdGEsIGRlbHRhRCAvIGRlbHRhLFxuICAgICAgICBkZWx0YUIgLyBkZWx0YSwgZGVsdGFFIC8gZGVsdGEsXG4gICAgICAgIGRlbHRhQyAvIGRlbHRhLCBkZWx0YUYgLyBkZWx0YSk7XG5cbiAgICBjb250ZXh0LmRyYXdJbWFnZSh0ZXh0dXJlU291cmNlLCAwLCAwKTtcbiAgICBjb250ZXh0LnJlc3RvcmUoKTtcbn07XG5cblxuXG4vKipcbiAqIFJlbmRlcnMgYSBmbGF0IE1lc2hcbiAqXG4gKiBAcGFyYW0gTWVzaCB7UElYSS5tZXNoLk1lc2h9IFRoZSBNZXNoIHRvIHJlbmRlclxuICogQHByaXZhdGVcbiAqL1xuTWVzaC5wcm90b3R5cGUucmVuZGVyTWVzaEZsYXQgPSBmdW5jdGlvbiAoTWVzaClcbntcbiAgICB2YXIgY29udGV4dCA9IHRoaXMuY29udGV4dDtcbiAgICB2YXIgdmVydGljZXMgPSBNZXNoLnZlcnRpY2VzO1xuXG4gICAgdmFyIGxlbmd0aCA9IHZlcnRpY2VzLmxlbmd0aC8yO1xuICAgIC8vIHRoaXMuY291bnQrKztcblxuICAgIGNvbnRleHQuYmVnaW5QYXRoKCk7XG4gICAgZm9yICh2YXIgaT0xOyBpIDwgbGVuZ3RoLTI7IGkrKylcbiAgICB7XG4gICAgICAgIC8vIGRyYXcgc29tZSB0cmlhbmdsZXMhXG4gICAgICAgIHZhciBpbmRleCA9IGkqMjtcblxuICAgICAgICB2YXIgeDAgPSB2ZXJ0aWNlc1tpbmRleF0sICAgeDEgPSB2ZXJ0aWNlc1tpbmRleCsyXSwgeDIgPSB2ZXJ0aWNlc1tpbmRleCs0XTtcbiAgICAgICAgdmFyIHkwID0gdmVydGljZXNbaW5kZXgrMV0sIHkxID0gdmVydGljZXNbaW5kZXgrM10sIHkyID0gdmVydGljZXNbaW5kZXgrNV07XG5cbiAgICAgICAgY29udGV4dC5tb3ZlVG8oeDAsIHkwKTtcbiAgICAgICAgY29udGV4dC5saW5lVG8oeDEsIHkxKTtcbiAgICAgICAgY29udGV4dC5saW5lVG8oeDIsIHkyKTtcbiAgICB9XG5cbiAgICBjb250ZXh0LmZpbGxTdHlsZSA9ICcjRkYwMDAwJztcbiAgICBjb250ZXh0LmZpbGwoKTtcbiAgICBjb250ZXh0LmNsb3NlUGF0aCgpO1xufTtcblxuLyoqXG4gKiBXaGVuIHRoZSB0ZXh0dXJlIGlzIHVwZGF0ZWQsIHRoaXMgZXZlbnQgd2lsbCBmaXJlIHRvIHVwZGF0ZSB0aGUgc2NhbGUgYW5kIGZyYW1lXG4gKlxuICogQHBhcmFtIGV2ZW50XG4gKiBAcHJpdmF0ZVxuICovXG5NZXNoLnByb3RvdHlwZS5fb25UZXh0dXJlVXBkYXRlID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLnVwZGF0ZUZyYW1lID0gdHJ1ZTtcbn07XG5cbi8qKlxuICogUmV0dXJucyB0aGUgYm91bmRzIG9mIHRoZSBtZXNoIGFzIGEgcmVjdGFuZ2xlLiBUaGUgYm91bmRzIGNhbGN1bGF0aW9uIHRha2VzIHRoZSB3b3JsZFRyYW5zZm9ybSBpbnRvIGFjY291bnQuXG4gKlxuICogQHBhcmFtIG1hdHJpeCB7UElYSS5NYXRyaXh9IHRoZSB0cmFuc2Zvcm1hdGlvbiBtYXRyaXggb2YgdGhlIHNwcml0ZVxuICogQHJldHVybiB7UElYSS5SZWN0YW5nbGV9IHRoZSBmcmFtaW5nIHJlY3RhbmdsZVxuICovXG5NZXNoLnByb3RvdHlwZS5nZXRCb3VuZHMgPSBmdW5jdGlvbiAobWF0cml4KVxue1xuICAgIGlmICghdGhpcy5fY3VycmVudEJvdW5kcykge1xuICAgICAgICB2YXIgd29ybGRUcmFuc2Zvcm0gPSBtYXRyaXggfHwgdGhpcy53b3JsZFRyYW5zZm9ybTtcblxuICAgICAgICB2YXIgYSA9IHdvcmxkVHJhbnNmb3JtLmE7XG4gICAgICAgIHZhciBiID0gd29ybGRUcmFuc2Zvcm0uYjtcbiAgICAgICAgdmFyIGMgPSB3b3JsZFRyYW5zZm9ybS5jO1xuICAgICAgICB2YXIgZCA9IHdvcmxkVHJhbnNmb3JtLmQ7XG4gICAgICAgIHZhciB0eCA9IHdvcmxkVHJhbnNmb3JtLnR4O1xuICAgICAgICB2YXIgdHkgPSB3b3JsZFRyYW5zZm9ybS50eTtcblxuICAgICAgICB2YXIgbWF4WCA9IC1JbmZpbml0eTtcbiAgICAgICAgdmFyIG1heFkgPSAtSW5maW5pdHk7XG5cbiAgICAgICAgdmFyIG1pblggPSBJbmZpbml0eTtcbiAgICAgICAgdmFyIG1pblkgPSBJbmZpbml0eTtcblxuICAgICAgICB2YXIgdmVydGljZXMgPSB0aGlzLnZlcnRpY2VzO1xuICAgICAgICBmb3IgKHZhciBpID0gMCwgbiA9IHZlcnRpY2VzLmxlbmd0aDsgaSA8IG47IGkgKz0gMikge1xuICAgICAgICAgICAgdmFyIHJhd1ggPSB2ZXJ0aWNlc1tpXSwgcmF3WSA9IHZlcnRpY2VzW2kgKyAxXTtcbiAgICAgICAgICAgIHZhciB4ID0gKGEgKiByYXdYKSArIChjICogcmF3WSkgKyB0eDtcbiAgICAgICAgICAgIHZhciB5ID0gKGQgKiByYXdZKSArIChiICogcmF3WCkgKyB0eTtcblxuICAgICAgICAgICAgbWluWCA9IHggPCBtaW5YID8geCA6IG1pblg7XG4gICAgICAgICAgICBtaW5ZID0geSA8IG1pblkgPyB5IDogbWluWTtcblxuICAgICAgICAgICAgbWF4WCA9IHggPiBtYXhYID8geCA6IG1heFg7XG4gICAgICAgICAgICBtYXhZID0geSA+IG1heFkgPyB5IDogbWF4WTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChtaW5YID09PSAtSW5maW5pdHkgfHwgbWF4WSA9PT0gSW5maW5pdHkpIHtcbiAgICAgICAgICAgIHJldHVybiBjb3JlLlJlY3RhbmdsZS5FTVBUWTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBib3VuZHMgPSB0aGlzLl9ib3VuZHM7XG5cbiAgICAgICAgYm91bmRzLnggPSBtaW5YO1xuICAgICAgICBib3VuZHMud2lkdGggPSBtYXhYIC0gbWluWDtcblxuICAgICAgICBib3VuZHMueSA9IG1pblk7XG4gICAgICAgIGJvdW5kcy5oZWlnaHQgPSBtYXhZIC0gbWluWTtcblxuICAgICAgICAvLyBzdG9yZSBhIHJlZmVyZW5jZSBzbyB0aGF0IGlmIHRoaXMgZnVuY3Rpb24gZ2V0cyBjYWxsZWQgYWdhaW4gaW4gdGhlIHJlbmRlciBjeWNsZSB3ZSBkbyBub3QgaGF2ZSB0byByZWNhbGN1bGF0ZVxuICAgICAgICB0aGlzLl9jdXJyZW50Qm91bmRzID0gYm91bmRzO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLl9jdXJyZW50Qm91bmRzO1xufTtcblxuLyoqXG4gKiBUZXN0cyBpZiBhIHBvaW50IGlzIGluc2lkZSB0aGlzIG1lc2guIFdvcmtzIG9ubHkgZm9yIFRSSUFOR0xFX01FU0hcbiAqXG4gKiBAcGFyYW0gcG9pbnQge1BJWEkuUG9pbnR9IHRoZSBwb2ludCB0byB0ZXN0XG4gKiBAcmV0dXJuIHtib29sZWFufSB0aGUgcmVzdWx0IG9mIHRoZSB0ZXN0XG4gKi9cbk1lc2gucHJvdG90eXBlLmNvbnRhaW5zUG9pbnQgPSBmdW5jdGlvbiggcG9pbnQgKSB7XG4gICAgaWYgKCF0aGlzLmdldEJvdW5kcygpLmNvbnRhaW5zKHBvaW50LngsIHBvaW50LnkpKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgdGhpcy53b3JsZFRyYW5zZm9ybS5hcHBseUludmVyc2UocG9pbnQsICB0ZW1wUG9pbnQpO1xuXG4gICAgdmFyIHZlcnRpY2VzID0gdGhpcy52ZXJ0aWNlcztcbiAgICB2YXIgcG9pbnRzID0gdGVtcFBvbHlnb24ucG9pbnRzO1xuICAgIHZhciBpLCBsZW47XG5cbiAgICBpZiAodGhpcy5kcmF3TW9kZSA9PT0gTWVzaC5EUkFXX01PREVTLlRSSUFOR0xFUykge1xuICAgICAgICB2YXIgaW5kaWNlcyA9IHRoaXMuaW5kaWNlcztcbiAgICAgICAgbGVuID0gdGhpcy5pbmRpY2VzLmxlbmd0aDtcbiAgICAgICAgLy9UT0RPOiBpbmxpbmUgdGhpcy5cbiAgICAgICAgZm9yIChpPTA7aTxsZW47aSs9Mykge1xuICAgICAgICAgICAgdmFyIGluZDAgPSBpbmRpY2VzW2ldKjIsIGluZDEgPSBpbmRpY2VzW2krMV0qMiwgaW5kMiA9IGluZGljZXNbaSsyXSoyO1xuICAgICAgICAgICAgcG9pbnRzWzBdID0gdmVydGljZXNbaW5kMF07XG4gICAgICAgICAgICBwb2ludHNbMV0gPSB2ZXJ0aWNlc1tpbmQwKzFdO1xuICAgICAgICAgICAgcG9pbnRzWzJdID0gdmVydGljZXNbaW5kMV07XG4gICAgICAgICAgICBwb2ludHNbM10gPSB2ZXJ0aWNlc1tpbmQxKzFdO1xuICAgICAgICAgICAgcG9pbnRzWzRdID0gdmVydGljZXNbaW5kMl07XG4gICAgICAgICAgICBwb2ludHNbNV0gPSB2ZXJ0aWNlc1tpbmQyKzFdO1xuICAgICAgICAgICAgaWYgKHRlbXBQb2x5Z29uLmNvbnRhaW5zKHRlbXBQb2ludC54LCB0ZW1wUG9pbnQueSkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAgIGxlbiA9IHZlcnRpY2VzLmxlbmd0aDtcbiAgICAgICAgZm9yIChpPTA7aTxsZW47aSs9Nikge1xuICAgICAgICAgICAgcG9pbnRzWzBdID0gdmVydGljZXNbaV07XG4gICAgICAgICAgICBwb2ludHNbMV0gPSB2ZXJ0aWNlc1tpKzFdO1xuICAgICAgICAgICAgcG9pbnRzWzJdID0gdmVydGljZXNbaSsyXTtcbiAgICAgICAgICAgIHBvaW50c1szXSA9IHZlcnRpY2VzW2krM107XG4gICAgICAgICAgICBwb2ludHNbNF0gPSB2ZXJ0aWNlc1tpKzRdO1xuICAgICAgICAgICAgcG9pbnRzWzVdID0gdmVydGljZXNbaSs1XTtcbiAgICAgICAgICAgIGlmICh0ZW1wUG9seWdvbi5jb250YWlucyh0ZW1wUG9pbnQueCwgdGVtcFBvaW50LnkpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xufTtcblxuLyoqXG4gKiBEaWZmZXJlbnQgZHJhd2luZyBidWZmZXIgbW9kZXMgc3VwcG9ydGVkXG4gKlxuICogQHN0YXRpY1xuICogQGNvbnN0YW50XG4gKiBAcHJvcGVydHkge29iamVjdH0gRFJBV19NT0RFU1xuICogQHByb3BlcnR5IHtudW1iZXJ9IERSQVdfTU9ERVMuVFJJQU5HTEVfTUVTSFxuICogQHByb3BlcnR5IHtudW1iZXJ9IERSQVdfTU9ERVMuVFJJQU5HTEVTXG4gKi9cbk1lc2guRFJBV19NT0RFUyA9IHtcbiAgICBUUklBTkdMRV9NRVNIOiAwLFxuICAgIFRSSUFOR0xFUzogMVxufTtcbiIsInZhciBNZXNoID0gcmVxdWlyZSgnLi9NZXNoJyk7XG5cbi8qKlxuICogVGhlIFBsYW5lIGFsbG93cyB5b3UgdG8gZHJhdyBhIHRleHR1cmUgYWNyb3NzIHNldmVyYWwgcG9pbnRzIGFuZCB0aGVtIG1hbmlwdWxhdGUgdGhlc2UgcG9pbnRzXG4gKlxuICpgYGBqc1xuICogZm9yICh2YXIgaSA9IDA7IGkgPCAyMDsgaSsrKSB7XG4gKiAgICAgcG9pbnRzLnB1c2gobmV3IFBJWEkuUG9pbnQoaSAqIDUwLCAwKSk7XG4gKiB9O1xuICogdmFyIFBsYW5lID0gbmV3IFBJWEkuUGxhbmUoUElYSS5UZXh0dXJlLmZyb21JbWFnZShcInNuYWtlLnBuZ1wiKSwgcG9pbnRzKTtcbiAqICBgYGBcbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkubWVzaC5NZXNoXG4gKiBAbWVtYmVyb2YgUElYSS5tZXNoXG4gKiBAcGFyYW0ge1BJWEkuVGV4dHVyZX0gdGV4dHVyZSAtIFRoZSB0ZXh0dXJlIHRvIHVzZSBvbiB0aGUgUGxhbmUuXG4gKiBAcGFyYW0ge2ludH0gc2VnbWVudHNYIC0gVGhlIG51bWJlciBveCB4IHNlZ21lbnRzXG4gKiBAcGFyYW0ge2ludH0gc2VnbWVudHNZIC0gVGhlIG51bWJlciBvZiB5IHNlZ21lbnRzXG4gKlxuICovXG5mdW5jdGlvbiBQbGFuZSh0ZXh0dXJlLCBzZWdtZW50c1gsIHNlZ21lbnRzWSlcbntcbiAgICBNZXNoLmNhbGwodGhpcywgdGV4dHVyZSk7XG5cbiAgICAvKipcbiAgICAgKiBUcmFja2VyIGZvciBpZiB0aGUgUGxhbmUgaXMgcmVhZHkgdG8gYmUgZHJhd24uIE5lZWRlZCBiZWNhdXNlIE1lc2ggY3RvciBjYW5cbiAgICAgKiBjYWxsIF9vblRleHR1cmVVcGRhdGVkIHdoaWNoIGNvdWxkIGNhbGwgcmVmcmVzaCB0b28gZWFybHkuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fcmVhZHkgPSB0cnVlO1xuXG4gICAgdGhpcy5zZWdtZW50c1ggPSAgc2VnbWVudHNYIHx8IDEwO1xuICAgIHRoaXMuc2VnbWVudHNZID0gc2VnbWVudHNZIHx8IDEwO1xuXG4gICAgdGhpcy5kcmF3TW9kZSA9IE1lc2guRFJBV19NT0RFUy5UUklBTkdMRVM7XG4gICAgdGhpcy5yZWZyZXNoKCk7XG5cbn1cblxuXG4vLyBjb25zdHJ1Y3RvclxuUGxhbmUucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZSggTWVzaC5wcm90b3R5cGUgKTtcblBsYW5lLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFBsYW5lO1xubW9kdWxlLmV4cG9ydHMgPSBQbGFuZTtcblxuLyoqXG4gKiBSZWZyZXNoZXNcbiAqXG4gKi9cblBsYW5lLnByb3RvdHlwZS5yZWZyZXNoID0gZnVuY3Rpb24oKVxue1xuICAgIHZhciB0b3RhbCA9IHRoaXMuc2VnbWVudHNYICogdGhpcy5zZWdtZW50c1k7XG4gICAgdmFyIHZlcnRzID0gW107XG4gICAgdmFyIGNvbG9ycyA9IFtdO1xuICAgIHZhciB1dnMgPSBbXTtcbiAgICB2YXIgaW5kaWNlcyA9IFtdO1xuICAgIHZhciB0ZXh0dXJlID0gdGhpcy50ZXh0dXJlO1xuXG4gIC8vICB0ZXh0dXJlLndpZHRoID0gODAwIHRleHR1cmUud2lkdGggfHwgODAwO1xuIC8vICAgdGV4dHVyZS5oZWlnaHQgPSA4MDAvL3RleHR1cmUuaGVpZ2h0IHx8IDgwMDtcblxuICAgIHZhciBzZWdtZW50c1hTdWIgPSB0aGlzLnNlZ21lbnRzWCAtIDE7XG4gICAgdmFyIHNlZ21lbnRzWVN1YiA9IHRoaXMuc2VnbWVudHNZIC0gMTtcbiAgICB2YXIgaSA9IDA7XG5cbiAgICB2YXIgc2l6ZVggPSB0ZXh0dXJlLndpZHRoIC8gc2VnbWVudHNYU3ViO1xuICAgIHZhciBzaXplWSA9IHRleHR1cmUuaGVpZ2h0IC8gc2VnbWVudHNZU3ViO1xuXG4gICAgZm9yIChpID0gMDsgaSA8IHRvdGFsOyBpKyspIHtcblxuICAgICAgICB2YXIgeCA9IChpICUgdGhpcy5zZWdtZW50c1gpO1xuICAgICAgICB2YXIgeSA9ICggKGkgLyB0aGlzLnNlZ21lbnRzWCApIHwgMCApO1xuXG5cbiAgICAgICAgdmVydHMucHVzaCgoeCAqIHNpemVYKSxcbiAgICAgICAgICAgICAgICAgICAoeSAqIHNpemVZKSk7XG5cbiAgICAgICAgLy8gdGhpcyB3b3JrcyBmb3IgcmVjdGFuZ3VsYXIgdGV4dHVyZXMuIFxuICAgICAgICB1dnMucHVzaCh0ZXh0dXJlLl91dnMueDAgKyAodGV4dHVyZS5fdXZzLngxIC0gdGV4dHVyZS5fdXZzLngwKSAqICh4IC8gKHRoaXMuc2VnbWVudHNYLTEpKSwgdGV4dHVyZS5fdXZzLnkwICsgKHRleHR1cmUuX3V2cy55My10ZXh0dXJlLl91dnMueTApICogKHkvICh0aGlzLnNlZ21lbnRzWS0xKSkpO1xuICAgICAgfVxuXG4gICAgLy8gIGNvbnNcblxuICAgIHZhciB0b3RhbFN1YiA9IHNlZ21lbnRzWFN1YiAqIHNlZ21lbnRzWVN1YjtcblxuICAgIGZvciAoaSA9IDA7IGkgPCB0b3RhbFN1YjsgaSsrKSB7XG5cbiAgICAgICAgdmFyIHhwb3MgPSBpICUgc2VnbWVudHNYU3ViO1xuICAgICAgICB2YXIgeXBvcyA9IChpIC8gc2VnbWVudHNYU3ViICkgfCAwO1xuXG5cbiAgICAgICAgdmFyICB2YWx1ZSA9ICh5cG9zICogdGhpcy5zZWdtZW50c1gpICsgeHBvcztcbiAgICAgICAgdmFyICB2YWx1ZTIgPSAoeXBvcyAqIHRoaXMuc2VnbWVudHNYKSArIHhwb3MgKyAxO1xuICAgICAgICB2YXIgIHZhbHVlMyA9ICgoeXBvcysxKSAqIHRoaXMuc2VnbWVudHNYKSArIHhwb3M7XG4gICAgICAgIHZhciAgdmFsdWU0ID0gKCh5cG9zKzEpICogdGhpcy5zZWdtZW50c1gpICsgeHBvcyArIDE7XG5cbiAgICAgICAgaW5kaWNlcy5wdXNoKHZhbHVlLCB2YWx1ZTIsIHZhbHVlMyk7XG4gICAgICAgIGluZGljZXMucHVzaCh2YWx1ZTIsIHZhbHVlNCwgdmFsdWUzKTtcbiAgICB9XG5cblxuICAgIC8vY29uc29sZS5sb2coaW5kaWNlcylcbiAgICB0aGlzLnZlcnRpY2VzID0gbmV3IEZsb2F0MzJBcnJheSh2ZXJ0cyk7XG4gICAgdGhpcy51dnMgPSBuZXcgRmxvYXQzMkFycmF5KHV2cyk7XG4gICAgdGhpcy5jb2xvcnMgPSBuZXcgRmxvYXQzMkFycmF5KGNvbG9ycyk7XG4gICAgdGhpcy5pbmRpY2VzID0gbmV3IFVpbnQxNkFycmF5KGluZGljZXMpO1xufTtcblxuLyoqXG4gKiBDbGVhciB0ZXh0dXJlIFVWcyB3aGVuIG5ldyB0ZXh0dXJlIGlzIHNldFxuICpcbiAqIEBwcml2YXRlXG4gKi9cblBsYW5lLnByb3RvdHlwZS5fb25UZXh0dXJlVXBkYXRlID0gZnVuY3Rpb24gKClcbntcbiAgICBNZXNoLnByb3RvdHlwZS5fb25UZXh0dXJlVXBkYXRlLmNhbGwodGhpcyk7XG5cbiAgICAvLyB3YWl0IGZvciB0aGUgUGxhbmUgY3RvciB0byBmaW5pc2ggYmVmb3JlIGNhbGxpbmcgcmVmcmVzaFxuICAgIGlmICh0aGlzLl9yZWFkeSkge1xuICAgICAgICB0aGlzLnJlZnJlc2goKTtcbiAgICB9XG59O1xuIiwidmFyIE1lc2ggPSByZXF1aXJlKCcuL01lc2gnKTtcbnZhciBjb3JlID0gcmVxdWlyZSgnLi4vY29yZScpO1xuXG4vKipcbiAqIFRoZSByb3BlIGFsbG93cyB5b3UgdG8gZHJhdyBhIHRleHR1cmUgYWNyb3NzIHNldmVyYWwgcG9pbnRzIGFuZCB0aGVtIG1hbmlwdWxhdGUgdGhlc2UgcG9pbnRzXG4gKlxuICpgYGBqc1xuICogZm9yICh2YXIgaSA9IDA7IGkgPCAyMDsgaSsrKSB7XG4gKiAgICAgcG9pbnRzLnB1c2gobmV3IFBJWEkuUG9pbnQoaSAqIDUwLCAwKSk7XG4gKiB9O1xuICogdmFyIHJvcGUgPSBuZXcgUElYSS5Sb3BlKFBJWEkuVGV4dHVyZS5mcm9tSW1hZ2UoXCJzbmFrZS5wbmdcIiksIHBvaW50cyk7XG4gKiAgYGBgXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLm1lc2guTWVzaFxuICogQG1lbWJlcm9mIFBJWEkubWVzaFxuICogQHBhcmFtIHtQSVhJLlRleHR1cmV9IHRleHR1cmUgLSBUaGUgdGV4dHVyZSB0byB1c2Ugb24gdGhlIHJvcGUuXG4gKiBAcGFyYW0ge1BJWEkuUG9pbnRbXX0gcG9pbnRzIC0gQW4gYXJyYXkgb2Yge0BsaW5rIFBJWEkuUG9pbnR9IG9iamVjdHMgdG8gY29uc3RydWN0IHRoaXMgcm9wZS5cbiAqXG4gKi9cbmZ1bmN0aW9uIFJvcGUodGV4dHVyZSwgcG9pbnRzKVxue1xuICAgIE1lc2guY2FsbCh0aGlzLCB0ZXh0dXJlKTtcblxuICAgIC8qXG4gICAgICogQG1lbWJlciB7UElYSS5Qb2ludFtdfSBBbiBhcnJheSBvZiBwb2ludHMgdGhhdCBkZXRlcm1pbmUgdGhlIHJvcGVcbiAgICAgKi9cbiAgICB0aGlzLnBvaW50cyA9IHBvaW50cztcblxuICAgIC8qXG4gICAgICogQG1lbWJlciB7RmxvYXQzMkFycmF5fSBBbiBhcnJheSBvZiB2ZXJ0aWNlcyB1c2VkIHRvIGNvbnN0cnVjdCB0aGlzIHJvcGUuXG4gICAgICovXG4gICAgdGhpcy52ZXJ0aWNlcyA9IG5ldyBGbG9hdDMyQXJyYXkocG9pbnRzLmxlbmd0aCAqIDQpO1xuXG4gICAgLypcbiAgICAgKiBAbWVtYmVyIHtGbG9hdDMyQXJyYXl9IFRoZSBXZWJHTCBVdnMgb2YgdGhlIHJvcGUuXG4gICAgICovXG4gICAgdGhpcy51dnMgPSBuZXcgRmxvYXQzMkFycmF5KHBvaW50cy5sZW5ndGggKiA0KTtcblxuICAgIC8qXG4gICAgICogQG1lbWJlciB7RmxvYXQzMkFycmF5fSBBbiBhcnJheSBjb250YWluaW5nIHRoZSBjb2xvciBjb21wb25lbnRzXG4gICAgICovXG4gICAgdGhpcy5jb2xvcnMgPSBuZXcgRmxvYXQzMkFycmF5KHBvaW50cy5sZW5ndGggKiAyKTtcblxuICAgIC8qXG4gICAgICogQG1lbWJlciB7VWludDE2QXJyYXl9IEFuIGFycmF5IGNvbnRhaW5pbmcgdGhlIGluZGljZXMgb2YgdGhlIHZlcnRpY2VzXG4gICAgICovXG4gICAgdGhpcy5pbmRpY2VzID0gbmV3IFVpbnQxNkFycmF5KHBvaW50cy5sZW5ndGggKiAyKTtcblxuICAgIC8qKlxuICAgICAqIFRyYWNrZXIgZm9yIGlmIHRoZSByb3BlIGlzIHJlYWR5IHRvIGJlIGRyYXduLiBOZWVkZWQgYmVjYXVzZSBNZXNoIGN0b3IgY2FuXG4gICAgICogY2FsbCBfb25UZXh0dXJlVXBkYXRlZCB3aGljaCBjb3VsZCBjYWxsIHJlZnJlc2ggdG9vIGVhcmx5LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgICB0aGlzLl9yZWFkeSA9IHRydWU7XG5cbiAgICAgdGhpcy5yZWZyZXNoKCk7XG59XG5cblxuLy8gY29uc3RydWN0b3JcblJvcGUucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShNZXNoLnByb3RvdHlwZSk7XG5Sb3BlLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFJvcGU7XG5tb2R1bGUuZXhwb3J0cyA9IFJvcGU7XG5cbi8qKlxuICogUmVmcmVzaGVzXG4gKlxuICovXG5Sb3BlLnByb3RvdHlwZS5yZWZyZXNoID0gZnVuY3Rpb24gKClcbntcbiAgICB2YXIgcG9pbnRzID0gdGhpcy5wb2ludHM7XG5cbiAgICAvLyBpZiB0b28gbGl0dGxlIHBvaW50cywgb3IgdGV4dHVyZSBoYXNuJ3QgZ290IFVWcyBzZXQgeWV0IGp1c3QgbW92ZSBvbi5cbiAgICBpZiAocG9pbnRzLmxlbmd0aCA8IDEgfHwgIXRoaXMuX3RleHR1cmUuX3V2cylcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB2YXIgdXZzID0gdGhpcy51dnM7XG5cbiAgICB2YXIgaW5kaWNlcyA9IHRoaXMuaW5kaWNlcztcbiAgICB2YXIgY29sb3JzID0gdGhpcy5jb2xvcnM7XG5cbiAgICB2YXIgdGV4dHVyZVV2cyA9IHRoaXMuX3RleHR1cmUuX3V2cztcbiAgICB2YXIgb2Zmc2V0ID0gbmV3IGNvcmUuUG9pbnQodGV4dHVyZVV2cy54MCwgdGV4dHVyZVV2cy55MCk7XG4gICAgdmFyIGZhY3RvciA9IG5ldyBjb3JlLlBvaW50KHRleHR1cmVVdnMueDIgLSB0ZXh0dXJlVXZzLngwLCB0ZXh0dXJlVXZzLnkyIC0gdGV4dHVyZVV2cy55MCk7XG5cbiAgICB1dnNbMF0gPSAwICsgb2Zmc2V0Lng7XG4gICAgdXZzWzFdID0gMCArIG9mZnNldC55O1xuICAgIHV2c1syXSA9IDAgKyBvZmZzZXQueDtcbiAgICB1dnNbM10gPSAxICogZmFjdG9yLnkgKyBvZmZzZXQueTtcblxuICAgIGNvbG9yc1swXSA9IDE7XG4gICAgY29sb3JzWzFdID0gMTtcblxuICAgIGluZGljZXNbMF0gPSAwO1xuICAgIGluZGljZXNbMV0gPSAxO1xuXG4gICAgdmFyIHRvdGFsID0gcG9pbnRzLmxlbmd0aCxcbiAgICAgICAgcG9pbnQsIGluZGV4LCBhbW91bnQ7XG5cbiAgICBmb3IgKHZhciBpID0gMTsgaSA8IHRvdGFsOyBpKyspXG4gICAge1xuICAgICAgICBwb2ludCA9IHBvaW50c1tpXTtcbiAgICAgICAgaW5kZXggPSBpICogNDtcbiAgICAgICAgLy8gdGltZSB0byBkbyBzb21lIHNtYXJ0IGRyYXdpbmchXG4gICAgICAgIGFtb3VudCA9IGkgLyAodG90YWwtMSk7XG5cbiAgICAgICAgdXZzW2luZGV4XSA9IGFtb3VudCAqIGZhY3Rvci54ICsgb2Zmc2V0Lng7XG4gICAgICAgIHV2c1tpbmRleCsxXSA9IDAgKyBvZmZzZXQueTtcblxuICAgICAgICB1dnNbaW5kZXgrMl0gPSBhbW91bnQgKiBmYWN0b3IueCArIG9mZnNldC54O1xuICAgICAgICB1dnNbaW5kZXgrM10gPSAxICogZmFjdG9yLnkgKyBvZmZzZXQueTtcblxuICAgICAgICBpbmRleCA9IGkgKiAyO1xuICAgICAgICBjb2xvcnNbaW5kZXhdID0gMTtcbiAgICAgICAgY29sb3JzW2luZGV4KzFdID0gMTtcblxuICAgICAgICBpbmRleCA9IGkgKiAyO1xuICAgICAgICBpbmRpY2VzW2luZGV4XSA9IGluZGV4O1xuICAgICAgICBpbmRpY2VzW2luZGV4ICsgMV0gPSBpbmRleCArIDE7XG4gICAgfVxuXG4gICAgdGhpcy5kaXJ0eSA9IHRydWU7XG59O1xuXG4vKipcbiAqIENsZWFyIHRleHR1cmUgVVZzIHdoZW4gbmV3IHRleHR1cmUgaXMgc2V0XG4gKlxuICogQHByaXZhdGVcbiAqL1xuUm9wZS5wcm90b3R5cGUuX29uVGV4dHVyZVVwZGF0ZSA9IGZ1bmN0aW9uICgpXG57XG4gICAgTWVzaC5wcm90b3R5cGUuX29uVGV4dHVyZVVwZGF0ZS5jYWxsKHRoaXMpO1xuXG4gICAgLy8gd2FpdCBmb3IgdGhlIFJvcGUgY3RvciB0byBmaW5pc2ggYmVmb3JlIGNhbGxpbmcgcmVmcmVzaFxuICAgIGlmICh0aGlzLl9yZWFkeSkge1xuICAgICAgICB0aGlzLnJlZnJlc2goKTtcbiAgICB9XG59O1xuXG4vKipcbiAqIFVwZGF0ZXMgdGhlIG9iamVjdCB0cmFuc2Zvcm0gZm9yIHJlbmRlcmluZ1xuICpcbiAqIEBwcml2YXRlXG4gKi9cblJvcGUucHJvdG90eXBlLnVwZGF0ZVRyYW5zZm9ybSA9IGZ1bmN0aW9uICgpXG57XG4gICAgdmFyIHBvaW50cyA9IHRoaXMucG9pbnRzO1xuXG4gICAgaWYgKHBvaW50cy5sZW5ndGggPCAxKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHZhciBsYXN0UG9pbnQgPSBwb2ludHNbMF07XG4gICAgdmFyIG5leHRQb2ludDtcbiAgICB2YXIgcGVycFggPSAwO1xuICAgIHZhciBwZXJwWSA9IDA7XG5cbiAgICAvLyB0aGlzLmNvdW50IC09IDAuMjtcblxuICAgIHZhciB2ZXJ0aWNlcyA9IHRoaXMudmVydGljZXM7XG4gICAgdmFyIHRvdGFsID0gcG9pbnRzLmxlbmd0aCxcbiAgICAgICAgcG9pbnQsIGluZGV4LCByYXRpbywgcGVycExlbmd0aCwgbnVtO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0b3RhbDsgaSsrKVxuICAgIHtcbiAgICAgICAgcG9pbnQgPSBwb2ludHNbaV07XG4gICAgICAgIGluZGV4ID0gaSAqIDQ7XG5cbiAgICAgICAgaWYgKGkgPCBwb2ludHMubGVuZ3RoLTEpXG4gICAgICAgIHtcbiAgICAgICAgICAgIG5leHRQb2ludCA9IHBvaW50c1tpKzFdO1xuICAgICAgICB9XG4gICAgICAgIGVsc2VcbiAgICAgICAge1xuICAgICAgICAgICAgbmV4dFBvaW50ID0gcG9pbnQ7XG4gICAgICAgIH1cblxuICAgICAgICBwZXJwWSA9IC0obmV4dFBvaW50LnggLSBsYXN0UG9pbnQueCk7XG4gICAgICAgIHBlcnBYID0gbmV4dFBvaW50LnkgLSBsYXN0UG9pbnQueTtcblxuICAgICAgICByYXRpbyA9ICgxIC0gKGkgLyAodG90YWwtMSkpKSAqIDEwO1xuXG4gICAgICAgIGlmIChyYXRpbyA+IDEpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJhdGlvID0gMTtcbiAgICAgICAgfVxuXG4gICAgICAgIHBlcnBMZW5ndGggPSBNYXRoLnNxcnQocGVycFggKiBwZXJwWCArIHBlcnBZICogcGVycFkpO1xuICAgICAgICBudW0gPSB0aGlzLl90ZXh0dXJlLmhlaWdodCAvIDI7IC8vKDIwICsgTWF0aC5hYnMoTWF0aC5zaW4oKGkgKyB0aGlzLmNvdW50KSAqIDAuMykgKiA1MCkgKSogcmF0aW87XG4gICAgICAgIHBlcnBYIC89IHBlcnBMZW5ndGg7XG4gICAgICAgIHBlcnBZIC89IHBlcnBMZW5ndGg7XG5cbiAgICAgICAgcGVycFggKj0gbnVtO1xuICAgICAgICBwZXJwWSAqPSBudW07XG5cbiAgICAgICAgdmVydGljZXNbaW5kZXhdID0gcG9pbnQueCArIHBlcnBYO1xuICAgICAgICB2ZXJ0aWNlc1tpbmRleCsxXSA9IHBvaW50LnkgKyBwZXJwWTtcbiAgICAgICAgdmVydGljZXNbaW5kZXgrMl0gPSBwb2ludC54IC0gcGVycFg7XG4gICAgICAgIHZlcnRpY2VzW2luZGV4KzNdID0gcG9pbnQueSAtIHBlcnBZO1xuXG4gICAgICAgIGxhc3RQb2ludCA9IHBvaW50O1xuICAgIH1cblxuICAgIHRoaXMuY29udGFpbmVyVXBkYXRlVHJhbnNmb3JtKCk7XG59O1xuIiwiLyoqXG4gKiBAZmlsZSAgICAgICAgTWFpbiBleHBvcnQgb2YgdGhlIFBJWEkgZXh0cmFzIGxpYnJhcnlcbiAqIEBhdXRob3IgICAgICBNYXQgR3JvdmVzIDxtYXRAZ29vZGJveWRpZ2l0YWwuY29tPlxuICogQGNvcHlyaWdodCAgIDIwMTMtMjAxNSBHb29kQm95RGlnaXRhbFxuICogQGxpY2Vuc2UgICAgIHtAbGluayBodHRwczovL2dpdGh1Yi5jb20vcGl4aWpzL3BpeGkuanMvYmxvYi9tYXN0ZXIvTElDRU5TRXxNSVQgTGljZW5zZX1cbiAqL1xuXG4vKipcbiAqIEBuYW1lc3BhY2UgUElYSS5tZXNoXG4gKi9cbm1vZHVsZS5leHBvcnRzID0ge1xuICAgIE1lc2g6ICAgICAgICAgICByZXF1aXJlKCcuL01lc2gnKSxcbiAgICBQbGFuZTogICAgICAgICAgIHJlcXVpcmUoJy4vUGxhbmUnKSxcbiAgICBSb3BlOiAgICAgICAgICAgcmVxdWlyZSgnLi9Sb3BlJyksXG4gICAgTWVzaFJlbmRlcmVyOiAgIHJlcXVpcmUoJy4vd2ViZ2wvTWVzaFJlbmRlcmVyJyksXG4gICAgTWVzaFNoYWRlcjogICAgIHJlcXVpcmUoJy4vd2ViZ2wvTWVzaFNoYWRlcicpXG59O1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi8uLi9jb3JlJyksXG4gICAgTWVzaCA9IHJlcXVpcmUoJy4uL01lc2gnKTtcblxuLyoqXG4gKiBAYXV0aG9yIE1hdCBHcm92ZXNcbiAqXG4gKiBCaWcgdGhhbmtzIHRvIHRoZSB2ZXJ5IGNsZXZlciBNYXR0IERlc0xhdXJpZXJzIDxtYXR0ZGVzbD4gaHR0cHM6Ly9naXRodWIuY29tL21hdHRkZXNsL1xuICogZm9yIGNyZWF0aW5nIHRoZSBvcmlnaW5hbCBwaXhpIHZlcnNpb24hXG4gKiBBbHNvIGEgdGhhbmtzIHRvIGh0dHBzOi8vZ2l0aHViLmNvbS9iY2hldmFsaWVyIGZvciB0d2Vha2luZyB0aGUgdGludCBhbmQgYWxwaGEgc28gdGhhdCB0aGV5IG5vdyBzaGFyZSA0IGJ5dGVzIG9uIHRoZSB2ZXJ0ZXggYnVmZmVyXG4gKlxuICogSGVhdmlseSBpbnNwaXJlZCBieSBMaWJHRFgncyBNZXNoUmVuZGVyZXI6XG4gKiBodHRwczovL2dpdGh1Yi5jb20vbGliZ2R4L2xpYmdkeC9ibG9iL21hc3Rlci9nZHgvc3JjL2NvbS9iYWRsb2dpYy9nZHgvZ3JhcGhpY3MvZzJkL01lc2hSZW5kZXJlci5qYXZhXG4gKi9cblxuLyoqXG4gKlxuICogQGNsYXNzXG4gKiBAcHJpdmF0ZVxuICogQG1lbWJlcm9mIFBJWEkubWVzaFxuICogQGV4dGVuZHMgUElYSS5PYmplY3RSZW5kZXJlclxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLldlYkdMUmVuZGVyZXJ9IFRoZSByZW5kZXJlciB0aGlzIHNwcml0ZSBiYXRjaCB3b3JrcyBmb3IuXG4gKi9cbmZ1bmN0aW9uIE1lc2hSZW5kZXJlcihyZW5kZXJlcilcbntcbiAgICBjb3JlLk9iamVjdFJlbmRlcmVyLmNhbGwodGhpcywgcmVuZGVyZXIpO1xuXG5cbiAgICAvKipcbiAgICAgKiBIb2xkcyB0aGUgaW5kaWNlc1xuICAgICAqXG4gICAgICogQG1lbWJlciB7VWludDE2QXJyYXl9XG4gICAgICovXG4gICAgXG4gICAgdGhpcy5pbmRpY2VzID0gbmV3IFVpbnQxNkFycmF5KDE1MDAwKTtcblxuICAgIC8vVE9ETyB0aGlzIGNvdWxkIGJlIGEgc2luZ2xlIGJ1ZmZlciBzaGFyZWQgYW1vbmdzdCBhbGwgcmVuZGVyZXJzIGFzIHdlIHJldXNlIHRoaXMgc2V0IHVwIGluIG1vc3QgcmVuZGVyZXJzXG4gICAgZm9yICh2YXIgaT0wLCBqPTA7IGkgPCAxNTAwMDsgaSArPSA2LCBqICs9IDQpXG4gICAge1xuICAgICAgICB0aGlzLmluZGljZXNbaSArIDBdID0gaiArIDA7XG4gICAgICAgIHRoaXMuaW5kaWNlc1tpICsgMV0gPSBqICsgMTtcbiAgICAgICAgdGhpcy5pbmRpY2VzW2kgKyAyXSA9IGogKyAyO1xuICAgICAgICB0aGlzLmluZGljZXNbaSArIDNdID0gaiArIDA7XG4gICAgICAgIHRoaXMuaW5kaWNlc1tpICsgNF0gPSBqICsgMjtcbiAgICAgICAgdGhpcy5pbmRpY2VzW2kgKyA1XSA9IGogKyAzO1xuICAgIH1cblxuICAgIHRoaXMuY3VycmVudFNoYWRlciA9IG51bGw7XG59XG5cbk1lc2hSZW5kZXJlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuT2JqZWN0UmVuZGVyZXIucHJvdG90eXBlKTtcbk1lc2hSZW5kZXJlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBNZXNoUmVuZGVyZXI7XG5tb2R1bGUuZXhwb3J0cyA9IE1lc2hSZW5kZXJlcjtcblxuY29yZS5XZWJHTFJlbmRlcmVyLnJlZ2lzdGVyUGx1Z2luKCdtZXNoJywgTWVzaFJlbmRlcmVyKTtcblxuLyoqXG4gKiBTZXRzIHVwIHRoZSByZW5kZXJlciBjb250ZXh0IGFuZCBuZWNlc3NhcnkgYnVmZmVycy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIGdsIHtXZWJHTFJlbmRlcmluZ0NvbnRleHR9IHRoZSBjdXJyZW50IFdlYkdMIGRyYXdpbmcgY29udGV4dFxuICovXG5NZXNoUmVuZGVyZXIucHJvdG90eXBlLm9uQ29udGV4dENoYW5nZSA9IGZ1bmN0aW9uICgpXG57XG5cbn07XG5cbi8qKlxuICogUmVuZGVycyB0aGUgc3ByaXRlIG9iamVjdC5cbiAqXG4gKiBAcGFyYW0gbWVzaCB7UElYSS5tZXNoLk1lc2h9IHRoZSBtZXNoIHRvIHJlbmRlclxuICovXG5NZXNoUmVuZGVyZXIucHJvdG90eXBlLnJlbmRlciA9IGZ1bmN0aW9uIChtZXNoKVxue1xuICAgIGlmKCFtZXNoLl92ZXJ0ZXhCdWZmZXIpXG4gICAge1xuICAgICAgICB0aGlzLl9pbml0V2ViR0wobWVzaCk7XG4gICAgfVxuXG4gICAgdmFyIHJlbmRlcmVyID0gdGhpcy5yZW5kZXJlcixcbiAgICAgICAgZ2wgPSByZW5kZXJlci5nbCxcbiAgICAgICAgdGV4dHVyZSA9IG1lc2guX3RleHR1cmUuYmFzZVRleHR1cmUsXG4gICAgICAgIHNoYWRlciA9IG1lc2guc2hhZGVyOy8vIHx8IHJlbmRlcmVyLnNoYWRlck1hbmFnZXIucGx1Z2lucy5tZXNoU2hhZGVyO1xuXG4gICAgdmFyIGRyYXdNb2RlID0gbWVzaC5kcmF3TW9kZSA9PT0gTWVzaC5EUkFXX01PREVTLlRSSUFOR0xFX01FU0ggPyBnbC5UUklBTkdMRV9TVFJJUCA6IGdsLlRSSUFOR0xFUztcblxuICAgIHJlbmRlcmVyLmJsZW5kTW9kZU1hbmFnZXIuc2V0QmxlbmRNb2RlKG1lc2guYmxlbmRNb2RlKTtcblxuICAgIC8vVE9ETyBjYWNoZSBjdXN0b20gc3RhdGUuLlxuICAgIGlmICghc2hhZGVyKVxuICAgIHtcbiAgICAgICAgc2hhZGVyID0gcmVuZGVyZXIuc2hhZGVyTWFuYWdlci5wbHVnaW5zLm1lc2hTaGFkZXI7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHNoYWRlciA9IHNoYWRlci5zaGFkZXJzW2dsLmlkXSB8fCBzaGFkZXIuZ2V0U2hhZGVyKHJlbmRlcmVyKTsvLyA6IHNoYWRlcjtcbiAgICB9XG5cbiAgICB0aGlzLnJlbmRlcmVyLnNoYWRlck1hbmFnZXIuc2V0U2hhZGVyKHNoYWRlcik7XG5cbiAgICBzaGFkZXIudW5pZm9ybXMudHJhbnNsYXRpb25NYXRyaXgudmFsdWUgPSBtZXNoLndvcmxkVHJhbnNmb3JtLnRvQXJyYXkodHJ1ZSk7XG4gICAgc2hhZGVyLnVuaWZvcm1zLnByb2plY3Rpb25NYXRyaXgudmFsdWUgPSByZW5kZXJlci5jdXJyZW50UmVuZGVyVGFyZ2V0LnByb2plY3Rpb25NYXRyaXgudG9BcnJheSh0cnVlKTtcbiAgICBzaGFkZXIudW5pZm9ybXMuYWxwaGEudmFsdWUgPSBtZXNoLndvcmxkQWxwaGE7XG5cbiAgICBzaGFkZXIuc3luY1VuaWZvcm1zKCk7XG5cbiAgICBpZiAoIW1lc2guZGlydHkpXG4gICAge1xuXG4gICAgICAgIGdsLmJpbmRCdWZmZXIoZ2wuQVJSQVlfQlVGRkVSLCBtZXNoLl92ZXJ0ZXhCdWZmZXIpO1xuICAgICAgICBnbC5idWZmZXJTdWJEYXRhKGdsLkFSUkFZX0JVRkZFUiwgMCwgbWVzaC52ZXJ0aWNlcyk7XG4gICAgICAgIGdsLnZlcnRleEF0dHJpYlBvaW50ZXIoc2hhZGVyLmF0dHJpYnV0ZXMuYVZlcnRleFBvc2l0aW9uLCAyLCBnbC5GTE9BVCwgZmFsc2UsIDAsIDApO1xuXG4gICAgICAgIC8vIHVwZGF0ZSB0aGUgdXZzXG4gICAgICAgIGdsLmJpbmRCdWZmZXIoZ2wuQVJSQVlfQlVGRkVSLCBtZXNoLl91dkJ1ZmZlcik7XG4gICAgICAgIGdsLnZlcnRleEF0dHJpYlBvaW50ZXIoc2hhZGVyLmF0dHJpYnV0ZXMuYVRleHR1cmVDb29yZCwgMiwgZ2wuRkxPQVQsIGZhbHNlLCAwLCAwKTtcblxuXG4gICAgICAgIGdsLmFjdGl2ZVRleHR1cmUoZ2wuVEVYVFVSRTApO1xuXG4gICAgICAgaWYgKCF0ZXh0dXJlLl9nbFRleHR1cmVzW2dsLmlkXSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5yZW5kZXJlci51cGRhdGVUZXh0dXJlKHRleHR1cmUpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2VcbiAgICAgICAge1xuICAgICAgICAgICAgLy8gYmluZCB0aGUgY3VycmVudCB0ZXh0dXJlXG4gICAgICAgICAgICBnbC5iaW5kVGV4dHVyZShnbC5URVhUVVJFXzJELCB0ZXh0dXJlLl9nbFRleHR1cmVzW2dsLmlkXSk7XG4gICAgICAgIH1cblxuICAgICAgICBnbC5iaW5kQnVmZmVyKGdsLkVMRU1FTlRfQVJSQVlfQlVGRkVSLCBtZXNoLl9pbmRleEJ1ZmZlcik7XG4gICAgICAgIGdsLmJ1ZmZlclN1YkRhdGEoZ2wuRUxFTUVOVF9BUlJBWV9CVUZGRVIsIDAsIG1lc2guaW5kaWNlcyk7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG5cbiAgICAgICAgbWVzaC5kaXJ0eSA9IGZhbHNlO1xuICAgICAgICBnbC5iaW5kQnVmZmVyKGdsLkFSUkFZX0JVRkZFUiwgbWVzaC5fdmVydGV4QnVmZmVyKTtcbiAgICAgICAgZ2wuYnVmZmVyRGF0YShnbC5BUlJBWV9CVUZGRVIsIG1lc2gudmVydGljZXMsIGdsLlNUQVRJQ19EUkFXKTtcbiAgICAgICAgZ2wudmVydGV4QXR0cmliUG9pbnRlcihzaGFkZXIuYXR0cmlidXRlcy5hVmVydGV4UG9zaXRpb24sIDIsIGdsLkZMT0FULCBmYWxzZSwgMCwgMCk7XG5cbiAgICAgICAgLy8gdXBkYXRlIHRoZSB1dnNcbiAgICAgICAgZ2wuYmluZEJ1ZmZlcihnbC5BUlJBWV9CVUZGRVIsIG1lc2guX3V2QnVmZmVyKTtcbiAgICAgICAgZ2wuYnVmZmVyRGF0YShnbC5BUlJBWV9CVUZGRVIsIG1lc2gudXZzLCBnbC5TVEFUSUNfRFJBVyk7XG4gICAgICAgIGdsLnZlcnRleEF0dHJpYlBvaW50ZXIoc2hhZGVyLmF0dHJpYnV0ZXMuYVRleHR1cmVDb29yZCwgMiwgZ2wuRkxPQVQsIGZhbHNlLCAwLCAwKTtcblxuICAgICAgICAgZ2wuYWN0aXZlVGV4dHVyZShnbC5URVhUVVJFMCk7XG5cbiAgICAgICAgaWYgKCF0ZXh0dXJlLl9nbFRleHR1cmVzW2dsLmlkXSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5yZW5kZXJlci51cGRhdGVUZXh0dXJlKHRleHR1cmUpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2VcbiAgICAgICAge1xuICAgICAgICAgICAgLy8gYmluZCB0aGUgY3VycmVudCB0ZXh0dXJlXG4gICAgICAgICAgICBnbC5iaW5kVGV4dHVyZShnbC5URVhUVVJFXzJELCB0ZXh0dXJlLl9nbFRleHR1cmVzW2dsLmlkXSk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBkb250IG5lZWQgdG8gdXBsb2FkIVxuICAgICAgICBnbC5iaW5kQnVmZmVyKGdsLkVMRU1FTlRfQVJSQVlfQlVGRkVSLCBtZXNoLl9pbmRleEJ1ZmZlcik7XG4gICAgICAgIGdsLmJ1ZmZlckRhdGEoZ2wuRUxFTUVOVF9BUlJBWV9CVUZGRVIsIG1lc2guaW5kaWNlcywgZ2wuU1RBVElDX0RSQVcpO1xuXG4gICAgfVxuXG4gICAgZ2wuZHJhd0VsZW1lbnRzKGRyYXdNb2RlLCBtZXNoLmluZGljZXMubGVuZ3RoLCBnbC5VTlNJR05FRF9TSE9SVCwgMCk7XG5cbn07XG5cbi8qKlxuICogUHJlcGFyZXMgYWxsIHRoZSBidWZmZXJzIHRvIHJlbmRlciB0aGlzIG1lc2hcbiAqIEBwYXJhbSBtZXNoIHtQSVhJLm1lc2guTWVzaH0gdGhlIG1lc2ggdG8gcmVuZGVyXG4gKi9cbk1lc2hSZW5kZXJlci5wcm90b3R5cGUuX2luaXRXZWJHTCA9IGZ1bmN0aW9uIChtZXNoKVxue1xuICAgIC8vIGJ1aWxkIHRoZSBzdHJpcCFcbiAgICB2YXIgZ2wgPSB0aGlzLnJlbmRlcmVyLmdsO1xuXG4gICAgbWVzaC5fdmVydGV4QnVmZmVyID0gZ2wuY3JlYXRlQnVmZmVyKCk7XG4gICAgbWVzaC5faW5kZXhCdWZmZXIgPSBnbC5jcmVhdGVCdWZmZXIoKTtcbiAgICBtZXNoLl91dkJ1ZmZlciA9IGdsLmNyZWF0ZUJ1ZmZlcigpO1xuXG5cblxuICAgIGdsLmJpbmRCdWZmZXIoZ2wuQVJSQVlfQlVGRkVSLCBtZXNoLl92ZXJ0ZXhCdWZmZXIpO1xuICAgIGdsLmJ1ZmZlckRhdGEoZ2wuQVJSQVlfQlVGRkVSLCBtZXNoLnZlcnRpY2VzLCBnbC5EWU5BTUlDX0RSQVcpO1xuXG4gICAgZ2wuYmluZEJ1ZmZlcihnbC5BUlJBWV9CVUZGRVIsIG1lc2guX3V2QnVmZmVyKTtcbiAgICBnbC5idWZmZXJEYXRhKGdsLkFSUkFZX0JVRkZFUiwgIG1lc2gudXZzLCBnbC5TVEFUSUNfRFJBVyk7XG5cbiAgICBpZihtZXNoLmNvbG9ycyl7XG4gICAgICAgIG1lc2guX2NvbG9yQnVmZmVyID0gZ2wuY3JlYXRlQnVmZmVyKCk7XG4gICAgICAgIGdsLmJpbmRCdWZmZXIoZ2wuQVJSQVlfQlVGRkVSLCBtZXNoLl9jb2xvckJ1ZmZlcik7XG4gICAgICAgIGdsLmJ1ZmZlckRhdGEoZ2wuQVJSQVlfQlVGRkVSLCBtZXNoLmNvbG9ycywgZ2wuU1RBVElDX0RSQVcpO1xuICAgIH1cblxuICAgIGdsLmJpbmRCdWZmZXIoZ2wuRUxFTUVOVF9BUlJBWV9CVUZGRVIsIG1lc2guX2luZGV4QnVmZmVyKTtcbiAgICBnbC5idWZmZXJEYXRhKGdsLkVMRU1FTlRfQVJSQVlfQlVGRkVSLCBtZXNoLmluZGljZXMsIGdsLlNUQVRJQ19EUkFXKTtcbn07XG5cblxuLyoqXG4gKiBFbXB0aWVzIHRoZSBjdXJyZW50IGJhdGNoLlxuICpcbiAqL1xuTWVzaFJlbmRlcmVyLnByb3RvdHlwZS5mbHVzaCA9IGZ1bmN0aW9uICgpXG57XG5cbn07XG5cbi8qKlxuICogU3RhcnRzIGEgbmV3IG1lc2ggcmVuZGVyZXIuXG4gKlxuICovXG5NZXNoUmVuZGVyZXIucHJvdG90eXBlLnN0YXJ0ID0gZnVuY3Rpb24gKClcbntcbiAgICBcblxuICAgIHRoaXMuY3VycmVudFNoYWRlciA9IG51bGw7XG59O1xuXG4vKipcbiAqIERlc3Ryb3lzIHRoZSBNZXNoIHJlbmRlcmVyXG4gKlxuICovXG5NZXNoUmVuZGVyZXIucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoKVxue1xuICAgIGNvcmUuT2JqZWN0UmVuZGVyZXIucHJvdG90eXBlLmRlc3Ryb3kuY2FsbCh0aGlzKTtcbn07XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uLy4uL2NvcmUnKTtcblxuLyoqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuU2hhZGVyXG4gKiBAbWVtYmVyb2YgUElYSS5tZXNoXG4gKiBAcGFyYW0gc2hhZGVyTWFuYWdlciB7UElYSS5TaGFkZXJNYW5hZ2VyfSBUaGUgV2ViR0wgc2hhZGVyIG1hbmFnZXIgdGhpcyBzaGFkZXIgd29ya3MgZm9yLlxuICovXG5mdW5jdGlvbiBNZXNoU2hhZGVyKHNoYWRlck1hbmFnZXIpXG57XG4gICAgY29yZS5TaGFkZXIuY2FsbCh0aGlzLFxuICAgICAgICBzaGFkZXJNYW5hZ2VyLFxuICAgICAgICAvLyB2ZXJ0ZXggc2hhZGVyXG4gICAgICAgIFtcbiAgICAgICAgICAgICdwcmVjaXNpb24gbG93cCBmbG9hdDsnLFxuICAgICAgICAgICAgJ2F0dHJpYnV0ZSB2ZWMyIGFWZXJ0ZXhQb3NpdGlvbjsnLFxuICAgICAgICAgICAgJ2F0dHJpYnV0ZSB2ZWMyIGFUZXh0dXJlQ29vcmQ7JyxcblxuICAgICAgICAgICAgJ3VuaWZvcm0gbWF0MyB0cmFuc2xhdGlvbk1hdHJpeDsnLFxuICAgICAgICAgICAgJ3VuaWZvcm0gbWF0MyBwcm9qZWN0aW9uTWF0cml4OycsXG5cbiAgICAgICAgICAgICd2YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDsnLFxuXG4gICAgICAgICAgICAndm9pZCBtYWluKHZvaWQpeycsXG4gICAgICAgICAgICAnICAgZ2xfUG9zaXRpb24gPSB2ZWM0KChwcm9qZWN0aW9uTWF0cml4ICogdHJhbnNsYXRpb25NYXRyaXggKiB2ZWMzKGFWZXJ0ZXhQb3NpdGlvbiwgMS4wKSkueHksIDAuMCwgMS4wKTsnLFxuICAgICAgICAgICAgJyAgIHZUZXh0dXJlQ29vcmQgPSBhVGV4dHVyZUNvb3JkOycsXG4gICAgICAgICAgICAnfSdcbiAgICAgICAgXS5qb2luKCdcXG4nKSxcbiAgICAgICAgW1xuICAgICAgICAgICAgJ3ByZWNpc2lvbiBsb3dwIGZsb2F0OycsXG5cbiAgICAgICAgICAgICd2YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDsnLFxuICAgICAgICAgICAgJ3VuaWZvcm0gZmxvYXQgYWxwaGE7JyxcblxuICAgICAgICAgICAgJ3VuaWZvcm0gc2FtcGxlcjJEIHVTYW1wbGVyOycsXG5cbiAgICAgICAgICAgICd2b2lkIG1haW4odm9pZCl7JyxcbiAgICAgICAgICAgICcgICBnbF9GcmFnQ29sb3IgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZUZXh0dXJlQ29vcmQpICogYWxwaGEgOycsXG4gICAgICAgICAgICAnfSdcbiAgICAgICAgXS5qb2luKCdcXG4nKSxcbiAgICAgICAgLy8gY3VzdG9tIHVuaWZvcm1zXG4gICAgICAgIHtcbiAgICAgICAgICAgIGFscGhhOiAgeyB0eXBlOiAnMWYnLCB2YWx1ZTogMCB9LFxuICAgICAgICAgICAgdHJhbnNsYXRpb25NYXRyaXg6IHsgdHlwZTogJ21hdDMnLCB2YWx1ZTogbmV3IEZsb2F0MzJBcnJheSg5KSB9LFxuICAgICAgICAgICAgcHJvamVjdGlvbk1hdHJpeDogeyB0eXBlOiAnbWF0MycsIHZhbHVlOiBuZXcgRmxvYXQzMkFycmF5KDkpIH1cbiAgICAgICAgfSxcbiAgICAgICAgLy8gY3VzdG9tIGF0dHJpYnV0ZXNcbiAgICAgICAge1xuICAgICAgICAgICAgYVZlcnRleFBvc2l0aW9uOjAsXG4gICAgICAgICAgICBhVGV4dHVyZUNvb3JkOjBcbiAgICAgICAgfVxuICAgICk7XG59XG5cbk1lc2hTaGFkZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShjb3JlLlNoYWRlci5wcm90b3R5cGUpO1xuTWVzaFNoYWRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBNZXNoU2hhZGVyO1xubW9kdWxlLmV4cG9ydHMgPSBNZXNoU2hhZGVyO1xuXG5jb3JlLlNoYWRlck1hbmFnZXIucmVnaXN0ZXJQbHVnaW4oJ21lc2hTaGFkZXInLCBNZXNoU2hhZGVyKTtcbiIsIi8vIFJlZmVyZW5jZXM6XG4vLyBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9KYXZhU2NyaXB0L1JlZmVyZW5jZS9HbG9iYWxfT2JqZWN0cy9NYXRoL3NpZ25cblxuaWYgKCFNYXRoLnNpZ24pXG57XG4gICAgTWF0aC5zaWduID0gZnVuY3Rpb24gKHgpIHtcbiAgICAgICAgeCA9ICt4O1xuICAgICAgICBpZiAoeCA9PT0gMCB8fCBpc05hTih4KSlcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHg7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHggPiAwID8gMSA6IC0xO1xuICAgIH07XG59XG4iLCIvLyBSZWZlcmVuY2VzOlxuLy8gaHR0cHM6Ly9naXRodWIuY29tL3NpbmRyZXNvcmh1cy9vYmplY3QtYXNzaWduXG4vLyBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9KYXZhU2NyaXB0L1JlZmVyZW5jZS9HbG9iYWxfT2JqZWN0cy9PYmplY3QvYXNzaWduXG5cbmlmICghT2JqZWN0LmFzc2lnbilcbntcbiAgICBPYmplY3QuYXNzaWduID0gcmVxdWlyZSgnb2JqZWN0LWFzc2lnbicpO1xufVxuIiwicmVxdWlyZSgnLi9PYmplY3QuYXNzaWduJyk7XG5yZXF1aXJlKCcuL3JlcXVlc3RBbmltYXRpb25GcmFtZScpO1xucmVxdWlyZSgnLi9NYXRoLnNpZ24nKTtcbiIsIi8vIFJlZmVyZW5jZXM6XG4vLyBodHRwOi8vcGF1bGlyaXNoLmNvbS8yMDExL3JlcXVlc3RhbmltYXRpb25mcmFtZS1mb3Itc21hcnQtYW5pbWF0aW5nL1xuLy8gaHR0cHM6Ly9naXN0LmdpdGh1Yi5jb20vMTU3OTY3MVxuLy8gaHR0cDovL3VwZGF0ZXMuaHRtbDVyb2Nrcy5jb20vMjAxMi8wNS9yZXF1ZXN0QW5pbWF0aW9uRnJhbWUtQVBJLW5vdy13aXRoLXN1Yi1taWxsaXNlY29uZC1wcmVjaXNpb25cbi8vIGh0dHBzOi8vZ2lzdC5naXRodWIuY29tL3RpbWhhbGwvNDA3ODYxNFxuLy8gaHR0cHM6Ly9naXRodWIuY29tL0ZpbmFuY2lhbC1UaW1lcy9wb2x5ZmlsbC1zZXJ2aWNlL3RyZWUvbWFzdGVyL3BvbHlmaWxscy9yZXF1ZXN0QW5pbWF0aW9uRnJhbWVcblxuLy8gRXhwZWN0ZWQgdG8gYmUgdXNlZCB3aXRoIEJyb3dzZXJmaXlcbi8vIEJyb3dzZXJpZnkgYXV0b21hdGljYWxseSBkZXRlY3RzIHRoZSB1c2Ugb2YgYGdsb2JhbGAgYW5kIHBhc3NlcyB0aGVcbi8vIGNvcnJlY3QgcmVmZXJlbmNlIG9mIGBnbG9iYWxgLCBgc2VsZmAsIGFuZCBmaW5hbGx5IGB3aW5kb3dgXG5cbi8vIERhdGUubm93XG5pZiAoIShEYXRlLm5vdyAmJiBEYXRlLnByb3RvdHlwZS5nZXRUaW1lKSkge1xuICAgIERhdGUubm93ID0gZnVuY3Rpb24gbm93KCkge1xuICAgICAgICByZXR1cm4gbmV3IERhdGUoKS5nZXRUaW1lKCk7XG4gICAgfTtcbn1cblxuLy8gcGVyZm9ybWFuY2Uubm93XG5pZiAoIShnbG9iYWwucGVyZm9ybWFuY2UgJiYgZ2xvYmFsLnBlcmZvcm1hbmNlLm5vdykpIHtcbiAgICB2YXIgc3RhcnRUaW1lID0gRGF0ZS5ub3coKTtcbiAgICBpZiAoIWdsb2JhbC5wZXJmb3JtYW5jZSkge1xuICAgICAgICBnbG9iYWwucGVyZm9ybWFuY2UgPSB7fTtcbiAgICB9XG4gICAgZ2xvYmFsLnBlcmZvcm1hbmNlLm5vdyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIERhdGUubm93KCkgLSBzdGFydFRpbWU7XG4gICAgfTtcbn1cblxuLy8gcmVxdWVzdEFuaW1hdGlvbkZyYW1lXG52YXIgbGFzdFRpbWUgPSBEYXRlLm5vdygpO1xudmFyIHZlbmRvcnMgPSBbJ21zJywgJ21veicsICd3ZWJraXQnLCAnbyddO1xuXG5mb3IodmFyIHggPSAwOyB4IDwgdmVuZG9ycy5sZW5ndGggJiYgIWdsb2JhbC5yZXF1ZXN0QW5pbWF0aW9uRnJhbWU7ICsreCkge1xuICAgIGdsb2JhbC5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUgPSBnbG9iYWxbdmVuZG9yc1t4XSArICdSZXF1ZXN0QW5pbWF0aW9uRnJhbWUnXTtcbiAgICBnbG9iYWwuY2FuY2VsQW5pbWF0aW9uRnJhbWUgPSBnbG9iYWxbdmVuZG9yc1t4XSArICdDYW5jZWxBbmltYXRpb25GcmFtZSddIHx8XG4gICAgICAgIGdsb2JhbFt2ZW5kb3JzW3hdICsgJ0NhbmNlbFJlcXVlc3RBbmltYXRpb25GcmFtZSddO1xufVxuXG5pZiAoIWdsb2JhbC5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUpIHtcbiAgICBnbG9iYWwucmVxdWVzdEFuaW1hdGlvbkZyYW1lID0gZnVuY3Rpb24gKGNhbGxiYWNrKSB7XG4gICAgICAgIGlmICh0eXBlb2YgY2FsbGJhY2sgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoY2FsbGJhY2sgKyAnaXMgbm90IGEgZnVuY3Rpb24nKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBjdXJyZW50VGltZSA9IERhdGUubm93KCksXG4gICAgICAgICAgICBkZWxheSA9IDE2ICsgbGFzdFRpbWUgLSBjdXJyZW50VGltZTtcblxuICAgICAgICBpZiAoZGVsYXkgPCAwKSB7XG4gICAgICAgICAgICBkZWxheSA9IDA7XG4gICAgICAgIH1cblxuICAgICAgICBsYXN0VGltZSA9IGN1cnJlbnRUaW1lO1xuXG4gICAgICAgIHJldHVybiBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGxhc3RUaW1lID0gRGF0ZS5ub3coKTtcbiAgICAgICAgICAgIGNhbGxiYWNrKHBlcmZvcm1hbmNlLm5vdygpKTtcbiAgICAgICAgfSwgZGVsYXkpO1xuICAgIH07XG59XG5cbmlmICghZ2xvYmFsLmNhbmNlbEFuaW1hdGlvbkZyYW1lKSB7XG4gICAgZ2xvYmFsLmNhbmNlbEFuaW1hdGlvbkZyYW1lID0gZnVuY3Rpb24oaWQpIHtcbiAgICAgICAgY2xlYXJUaW1lb3V0KGlkKTtcbiAgICB9O1xufVxuIl19 +//# sourceMappingURL=data:application/json;charset:utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIm5vZGVfbW9kdWxlcy9icm93c2VyaWZ5L25vZGVfbW9kdWxlcy9icm93c2VyLXBhY2svX3ByZWx1ZGUuanMiLCIuLi9waXhpLWdsLWNvcmUvaW5kZXguanMiLCIuLi9waXhpLWdsLWNvcmUvbGliL0dMQnVmZmVyLmpzIiwiLi4vcGl4aS1nbC1jb3JlL2xpYi9HTEZyYW1lYnVmZmVyLmpzIiwiLi4vcGl4aS1nbC1jb3JlL2xpYi9HTFNoYWRlci5qcyIsIi4uL3BpeGktZ2wtY29yZS9saWIvR0xUZXh0dXJlLmpzIiwiLi4vcGl4aS1nbC1jb3JlL2xpYi9WZXJ0ZXhBcnJheU9iamVjdC5qcyIsIi4uL3BpeGktZ2wtY29yZS9saWIvY3JlYXRlQ29udGV4dC5qcyIsIi4uL3BpeGktZ2wtY29yZS9saWIvc2V0VmVydGV4QXR0cmliQXJyYXlzLmpzIiwiLi4vcGl4aS1nbC1jb3JlL2xpYi9zaGFkZXIvY29tcGlsZVByb2dyYW0uanMiLCIuLi9waXhpLWdsLWNvcmUvbGliL3NoYWRlci9kZWZhdWx0VmFsdWUuanMiLCIuLi9waXhpLWdsLWNvcmUvbGliL3NoYWRlci9leHRyYWN0QXR0cmlidXRlcy5qcyIsIi4uL3BpeGktZ2wtY29yZS9saWIvc2hhZGVyL2V4dHJhY3RVbmlmb3Jtcy5qcyIsIi4uL3BpeGktZ2wtY29yZS9saWIvc2hhZGVyL2dlbmVyYXRlVW5pZm9ybUFjY2Vzc09iamVjdC5qcyIsIi4uL3BpeGktZ2wtY29yZS9saWIvc2hhZGVyL21hcFNpemUuanMiLCIuLi9waXhpLWdsLWNvcmUvbGliL3NoYWRlci9tYXBUeXBlLmpzIiwibm9kZV9tb2R1bGVzL2FzeW5jL2xpYi9hc3luYy5qcyIsIm5vZGVfbW9kdWxlcy9icm93c2VyaWZ5L25vZGVfbW9kdWxlcy9wYXRoLWJyb3dzZXJpZnkvaW5kZXguanMiLCJub2RlX21vZHVsZXMvYnJvd3NlcmlmeS9ub2RlX21vZHVsZXMvcHJvY2Vzcy9icm93c2VyLmpzIiwibm9kZV9tb2R1bGVzL2Jyb3dzZXJpZnkvbm9kZV9tb2R1bGVzL3B1bnljb2RlL3B1bnljb2RlLmpzIiwibm9kZV9tb2R1bGVzL2Jyb3dzZXJpZnkvbm9kZV9tb2R1bGVzL3F1ZXJ5c3RyaW5nLWVzMy9kZWNvZGUuanMiLCJub2RlX21vZHVsZXMvYnJvd3NlcmlmeS9ub2RlX21vZHVsZXMvcXVlcnlzdHJpbmctZXMzL2VuY29kZS5qcyIsIm5vZGVfbW9kdWxlcy9icm93c2VyaWZ5L25vZGVfbW9kdWxlcy9xdWVyeXN0cmluZy1lczMvaW5kZXguanMiLCJub2RlX21vZHVsZXMvYnJvd3NlcmlmeS9ub2RlX21vZHVsZXMvdXJsL3VybC5qcyIsIm5vZGVfbW9kdWxlcy9lYXJjdXQvc3JjL2VhcmN1dC5qcyIsIm5vZGVfbW9kdWxlcy9ldmVudGVtaXR0ZXIzL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL29iamVjdC1hc3NpZ24vaW5kZXguanMiLCJub2RlX21vZHVsZXMvcmVzb3VyY2UtbG9hZGVyL25vZGVfbW9kdWxlcy9hc3luYy9saWIvYXN5bmMuanMiLCJub2RlX21vZHVsZXMvcmVzb3VyY2UtbG9hZGVyL3NyYy9Mb2FkZXIuanMiLCJub2RlX21vZHVsZXMvcmVzb3VyY2UtbG9hZGVyL3NyYy9SZXNvdXJjZS5qcyIsIm5vZGVfbW9kdWxlcy9yZXNvdXJjZS1sb2FkZXIvc3JjL2I2NC5qcyIsIm5vZGVfbW9kdWxlcy9yZXNvdXJjZS1sb2FkZXIvc3JjL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL3Jlc291cmNlLWxvYWRlci9zcmMvbWlkZGxld2FyZXMvY2FjaGluZy9tZW1vcnkuanMiLCJub2RlX21vZHVsZXMvcmVzb3VyY2UtbG9hZGVyL3NyYy9taWRkbGV3YXJlcy9wYXJzaW5nL2Jsb2IuanMiLCJwYWNrYWdlLmpzb24iLCJzcmMvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5TWFuYWdlci5qcyIsInNyYy9hY2Nlc3NpYmlsaXR5L2FjY2Vzc2libGVUYXJnZXQuanMiLCJzcmMvYWNjZXNzaWJpbGl0eS9pbmRleC5qcyIsInNyYy9jb3JlL2NvbnN0LmpzIiwic3JjL2NvcmUvZGlzcGxheS9Db250YWluZXIuanMiLCJzcmMvY29yZS9kaXNwbGF5L0Rpc3BsYXlPYmplY3QuanMiLCJzcmMvY29yZS9ncmFwaGljcy9HcmFwaGljcy5qcyIsInNyYy9jb3JlL2dyYXBoaWNzL0dyYXBoaWNzRGF0YS5qcyIsInNyYy9jb3JlL2dyYXBoaWNzL3dlYmdsL0dyYXBoaWNzUmVuZGVyZXIuanMiLCJzcmMvY29yZS9ncmFwaGljcy93ZWJnbC9XZWJHTEdyYXBoaWNzRGF0YS5qcyIsInNyYy9jb3JlL2dyYXBoaWNzL3dlYmdsL3NoYWRlcnMvUHJpbWl0aXZlU2hhZGVyLmpzIiwic3JjL2NvcmUvZ3JhcGhpY3Mvd2ViZ2wvdXRpbHMvYnVpbGRDaXJjbGUuanMiLCJzcmMvY29yZS9ncmFwaGljcy93ZWJnbC91dGlscy9idWlsZENvbXBsZXhQb2x5LmpzIiwic3JjL2NvcmUvZ3JhcGhpY3Mvd2ViZ2wvdXRpbHMvYnVpbGRMaW5lLmpzIiwic3JjL2NvcmUvZ3JhcGhpY3Mvd2ViZ2wvdXRpbHMvYnVpbGRQb2x5LmpzIiwic3JjL2NvcmUvZ3JhcGhpY3Mvd2ViZ2wvdXRpbHMvYnVpbGRSZWN0YW5nbGUuanMiLCJzcmMvY29yZS9ncmFwaGljcy93ZWJnbC91dGlscy9idWlsZFJvdW5kZWRSZWN0YW5nbGUuanMiLCJzcmMvY29yZS9pbmRleC5qcyIsInNyYy9jb3JlL21hdGgvTWF0cml4LmpzIiwic3JjL2NvcmUvbWF0aC9Qb2ludC5qcyIsInNyYy9jb3JlL21hdGgvaW5kZXguanMiLCJzcmMvY29yZS9tYXRoL3NoYXBlcy9DaXJjbGUuanMiLCJzcmMvY29yZS9tYXRoL3NoYXBlcy9FbGxpcHNlLmpzIiwic3JjL2NvcmUvbWF0aC9zaGFwZXMvUG9seWdvbi5qcyIsInNyYy9jb3JlL21hdGgvc2hhcGVzL1JlY3RhbmdsZS5qcyIsInNyYy9jb3JlL21hdGgvc2hhcGVzL1JvdW5kZWRSZWN0YW5nbGUuanMiLCJzcmMvY29yZS9wYXJ0aWNsZXMvUGFydGljbGVDb250YWluZXIuanMiLCJzcmMvY29yZS9wYXJ0aWNsZXMvd2ViZ2wvUGFydGljbGVCdWZmZXIuanMiLCJzcmMvY29yZS9wYXJ0aWNsZXMvd2ViZ2wvUGFydGljbGVSZW5kZXJlci5qcyIsInNyYy9jb3JlL3BhcnRpY2xlcy93ZWJnbC9QYXJ0aWNsZVNoYWRlci5qcyIsInNyYy9jb3JlL3JlbmRlcmVycy9TeXN0ZW1SZW5kZXJlci5qcyIsInNyYy9jb3JlL3JlbmRlcmVycy9jYW52YXMvQ2FudmFzUmVuZGVyZXIuanMiLCJzcmMvY29yZS9yZW5kZXJlcnMvY2FudmFzL3V0aWxzL0NhbnZhc0J1ZmZlci5qcyIsInNyYy9jb3JlL3JlbmRlcmVycy9jYW52YXMvdXRpbHMvQ2FudmFzR3JhcGhpY3MuanMiLCJzcmMvY29yZS9yZW5kZXJlcnMvY2FudmFzL3V0aWxzL0NhbnZhc01hc2tNYW5hZ2VyLmpzIiwic3JjL2NvcmUvcmVuZGVyZXJzL2NhbnZhcy91dGlscy9DYW52YXNUaW50ZXIuanMiLCJzcmMvY29yZS9yZW5kZXJlcnMvd2ViZ2wvVGV4dHVyZU1hbmFnZXIuanMiLCJzcmMvY29yZS9yZW5kZXJlcnMvd2ViZ2wvV2ViR0xSZW5kZXJlci5qcyIsInNyYy9jb3JlL3JlbmRlcmVycy93ZWJnbC9maWx0ZXJzL0Fic3RyYWN0RmlsdGVyLmpzIiwic3JjL2NvcmUvcmVuZGVyZXJzL3dlYmdsL2ZpbHRlcnMvRlhBQUZpbHRlci5qcyIsInNyYy9jb3JlL3JlbmRlcmVycy93ZWJnbC9maWx0ZXJzL1Nwcml0ZU1hc2tGaWx0ZXIuanMiLCJzcmMvY29yZS9yZW5kZXJlcnMvd2ViZ2wvbWFuYWdlcnMvQmxlbmRNb2RlTWFuYWdlci5qcyIsInNyYy9jb3JlL3JlbmRlcmVycy93ZWJnbC9tYW5hZ2Vycy9GaWx0ZXJNYW5hZ2VyLmpzIiwic3JjL2NvcmUvcmVuZGVyZXJzL3dlYmdsL21hbmFnZXJzL01hc2tNYW5hZ2VyLmpzIiwic3JjL2NvcmUvcmVuZGVyZXJzL3dlYmdsL21hbmFnZXJzL1NoYWRlck1hbmFnZXIuanMiLCJzcmMvY29yZS9yZW5kZXJlcnMvd2ViZ2wvbWFuYWdlcnMvU3RlbmNpbE1hbmFnZXIuanMiLCJzcmMvY29yZS9yZW5kZXJlcnMvd2ViZ2wvbWFuYWdlcnMvV2ViR0xNYW5hZ2VyLmpzIiwic3JjL2NvcmUvcmVuZGVyZXJzL3dlYmdsL3NoYWRlcnMvQ29tcGxleFByaW1pdGl2ZVNoYWRlci5qcyIsInNyYy9jb3JlL3JlbmRlcmVycy93ZWJnbC9zaGFkZXJzL1ByaW1pdGl2ZVNoYWRlci5qcyIsInNyYy9jb3JlL3JlbmRlcmVycy93ZWJnbC9zaGFkZXJzL1NoYWRlci5qcyIsInNyYy9jb3JlL3JlbmRlcmVycy93ZWJnbC9zaGFkZXJzL1RleHR1cmVTaGFkZXIuanMiLCJzcmMvY29yZS9yZW5kZXJlcnMvd2ViZ2wvc2hhZGVycy9fVGV4dHVyZVNoYWRlci5qcyIsInNyYy9jb3JlL3JlbmRlcmVycy93ZWJnbC91dGlscy9PYmplY3RSZW5kZXJlci5qcyIsInNyYy9jb3JlL3JlbmRlcmVycy93ZWJnbC91dGlscy9RdWFkLmpzIiwic3JjL2NvcmUvcmVuZGVyZXJzL3dlYmdsL3V0aWxzL1JlbmRlclRhcmdldC5qcyIsInNyYy9jb3JlL3JlbmRlcmVycy93ZWJnbC91dGlscy9TdGVuY2lsTWFza1N0YWNrLmpzIiwic3JjL2NvcmUvcmVuZGVyZXJzL3dlYmdsL3V0aWxzL21hcFdlYkdMQmxlbmRNb2Rlc1RvUGl4aS5qcyIsInNyYy9jb3JlL3JlbmRlcmVycy93ZWJnbC91dGlscy9tYXBXZWJHTERyYXdNb2Rlc1RvUGl4aS5qcyIsInNyYy9jb3JlL3Nwcml0ZXMvU3ByaXRlLmpzIiwic3JjL2NvcmUvc3ByaXRlcy93ZWJnbC9TcHJpdGVSZW5kZXJlci5qcyIsInNyYy9jb3JlL3Nwcml0ZXMvd2ViZ2wvZ2VuZXJhdGVNdWx0aVRleHR1cmVTaGFkZXIuanMiLCJzcmMvY29yZS90ZXh0L1RleHQuanMiLCJzcmMvY29yZS90ZXh0dXJlcy9CYXNlVGV4dHVyZS5qcyIsInNyYy9jb3JlL3RleHR1cmVzL1JlbmRlclRleHR1cmUuanMiLCJzcmMvY29yZS90ZXh0dXJlcy9UZXh0dXJlLmpzIiwic3JjL2NvcmUvdGV4dHVyZXMvVGV4dHVyZVV2cy5qcyIsInNyYy9jb3JlL3RleHR1cmVzL1ZpZGVvQmFzZVRleHR1cmUuanMiLCJzcmMvY29yZS90aWNrZXIvVGlja2VyLmpzIiwic3JjL2NvcmUvdGlja2VyL2luZGV4LmpzIiwic3JjL2NvcmUvdXRpbHMvY3JlYXRlSW5kaWNlc0ZvclF1YWRzLmpzIiwic3JjL2NvcmUvdXRpbHMvaW5kZXguanMiLCJzcmMvY29yZS91dGlscy9wbHVnaW5UYXJnZXQuanMiLCJzcmMvZGVwcmVjYXRpb24uanMiLCJzcmMvZXh0cmFzL0JpdG1hcFRleHQuanMiLCJzcmMvZXh0cmFzL01vdmllQ2xpcC5qcyIsInNyYy9leHRyYXMvVGlsaW5nU3ByaXRlLmpzIiwic3JjL2V4dHJhcy9jYWNoZUFzQml0bWFwLmpzIiwic3JjL2V4dHJhcy9nZXRDaGlsZEJ5TmFtZS5qcyIsInNyYy9leHRyYXMvZ2V0R2xvYmFsUG9zaXRpb24uanMiLCJzcmMvZXh0cmFzL2luZGV4LmpzIiwic3JjL2ZpbHRlcnMvYXNjaWkvQXNjaWlGaWx0ZXIuanMiLCJzcmMvZmlsdGVycy9ibG9vbS9CbG9vbUZpbHRlci5qcyIsInNyYy9maWx0ZXJzL2JsdXIvQmx1ckRpckZpbHRlci5qcyIsInNyYy9maWx0ZXJzL2JsdXIvQmx1ckZpbHRlci5qcyIsInNyYy9maWx0ZXJzL2JsdXIvQmx1clhGaWx0ZXIuanMiLCJzcmMvZmlsdGVycy9ibHVyL0JsdXJZRmlsdGVyLmpzIiwic3JjL2ZpbHRlcnMvYmx1ci9TbWFydEJsdXJGaWx0ZXIuanMiLCJzcmMvZmlsdGVycy9jb2xvci9Db2xvck1hdHJpeEZpbHRlci5qcyIsInNyYy9maWx0ZXJzL2NvbG9yL0NvbG9yU3RlcEZpbHRlci5qcyIsInNyYy9maWx0ZXJzL2NvbnZvbHV0aW9uL0NvbnZvbHV0aW9uRmlsdGVyLmpzIiwic3JjL2ZpbHRlcnMvY3Jvc3NoYXRjaC9Dcm9zc0hhdGNoRmlsdGVyLmpzIiwic3JjL2ZpbHRlcnMvZGlzcGxhY2VtZW50L0Rpc3BsYWNlbWVudEZpbHRlci5qcyIsInNyYy9maWx0ZXJzL2RvdC9Eb3RTY3JlZW5GaWx0ZXIuanMiLCJzcmMvZmlsdGVycy9kcm9wc2hhZG93L0JsdXJZVGludEZpbHRlci5qcyIsInNyYy9maWx0ZXJzL2Ryb3BzaGFkb3cvRHJvcFNoYWRvd0ZpbHRlci5qcyIsInNyYy9maWx0ZXJzL2dyYXkvR3JheUZpbHRlci5qcyIsInNyYy9maWx0ZXJzL2luZGV4LmpzIiwic3JjL2ZpbHRlcnMvaW52ZXJ0L0ludmVydEZpbHRlci5qcyIsInNyYy9maWx0ZXJzL25vaXNlL05vaXNlRmlsdGVyLmpzIiwic3JjL2ZpbHRlcnMvcGl4ZWxhdGUvUGl4ZWxhdGVGaWx0ZXIuanMiLCJzcmMvZmlsdGVycy9yZ2IvUkdCU3BsaXRGaWx0ZXIuanMiLCJzcmMvZmlsdGVycy9zZXBpYS9TZXBpYUZpbHRlci5qcyIsInNyYy9maWx0ZXJzL3Nob2Nrd2F2ZS9TaG9ja3dhdmVGaWx0ZXIuanMiLCJzcmMvZmlsdGVycy90aWx0c2hpZnQvVGlsdFNoaWZ0QXhpc0ZpbHRlci5qcyIsInNyYy9maWx0ZXJzL3RpbHRzaGlmdC9UaWx0U2hpZnRGaWx0ZXIuanMiLCJzcmMvZmlsdGVycy90aWx0c2hpZnQvVGlsdFNoaWZ0WEZpbHRlci5qcyIsInNyYy9maWx0ZXJzL3RpbHRzaGlmdC9UaWx0U2hpZnRZRmlsdGVyLmpzIiwic3JjL2ZpbHRlcnMvdHdpc3QvVHdpc3RGaWx0ZXIuanMiLCJzcmMvc3JjL2luZGV4LmpzIiwic3JjL2ludGVyYWN0aW9uL0ludGVyYWN0aW9uRGF0YS5qcyIsInNyYy9pbnRlcmFjdGlvbi9JbnRlcmFjdGlvbk1hbmFnZXIuanMiLCJzcmMvaW50ZXJhY3Rpb24vaW5kZXguanMiLCJzcmMvaW50ZXJhY3Rpb24vaW50ZXJhY3RpdmVUYXJnZXQuanMiLCJzcmMvbG9hZGVycy9iaXRtYXBGb250UGFyc2VyLmpzIiwic3JjL2xvYWRlcnMvaW5kZXguanMiLCJzcmMvbG9hZGVycy9sb2FkZXIuanMiLCJzcmMvbG9hZGVycy9zcHJpdGVzaGVldFBhcnNlci5qcyIsInNyYy9sb2FkZXJzL3RleHR1cmVQYXJzZXIuanMiLCJzcmMvbWVzaC9NZXNoLmpzIiwic3JjL21lc2gvUGxhbmUuanMiLCJzcmMvbWVzaC9Sb3BlLmpzIiwic3JjL21lc2gvaW5kZXguanMiLCJzcmMvbWVzaC93ZWJnbC9NZXNoUmVuZGVyZXIuanMiLCJzcmMvbWVzaC93ZWJnbC9NZXNoU2hhZGVyLmpzIiwic3JjL3BvbHlmaWxsL01hdGguc2lnbi5qcyIsInNyYy9wb2x5ZmlsbC9PYmplY3QuYXNzaWduLmpzIiwic3JjL3BvbHlmaWxsL2luZGV4LmpzIiwic3JjL3BvbHlmaWxsL3JlcXVlc3RBbmltYXRpb25GcmFtZS5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQ0FBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDMUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN4Q0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN2TUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2pIQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM5QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdERBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3pEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDMUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbENBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM3QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3RJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDaENBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQzlDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7QUM1dUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7OztBQ2hPQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUMzRkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7O0FDcmhCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNwRkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNyRkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNKQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbnNCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0a0JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdFFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUN2Q0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7OztBQ25tQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDeGNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNoeUJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDaEVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ1pBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNwQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMxREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ25aQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDN05BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3JvQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdm1CQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0b0NBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDM0ZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzlUQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDcEhBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNsREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNyRkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDckVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMxTkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM3REE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDckVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzlIQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM3RkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdGJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNwRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3BCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdEZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzdGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDckdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM1RkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDMUZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM3VEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzFOQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMxZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM1RUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuUUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzFRQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbEdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDaFdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzVEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzFQQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMxSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzNZQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDOUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNyREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQy9GQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMxQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbGNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNqSEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDeEtBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM3V0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdkNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzVEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzdEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzlnQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM3R0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMvRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3hEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN6SkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNqU0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMvQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ25DQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3RCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDem1CQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdldBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDN0RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDM21CQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuYkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDN2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDeGFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDL0VBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDM09BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNqV0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdERBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDL0JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuUkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3BFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzdWQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbFlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzlUQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNsY0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDOVFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNUJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNUJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbkJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdkRBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ25HQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzVHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzNGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNwRkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM1QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdGhCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDL0NBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN6RkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDeEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbEZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdEVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN6RkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQy9MQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDL0NBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDckNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2hEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDckRBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDakRBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3BGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNoREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3RGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMzSEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3BDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNwQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUNuRkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7OztBQzVCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDL0NBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDMTJCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNmQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDL0NBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN2SEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNURBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbEZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNwQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDMWRBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNUhBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbk5BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNqQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ25PQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDM0RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDUkE7QUFDQTtBQUNBO0FBQ0E7OztBQ0hBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6ImdlbmVyYXRlZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzQ29udGVudCI6WyIoZnVuY3Rpb24gZSh0LG4scil7ZnVuY3Rpb24gcyhvLHUpe2lmKCFuW29dKXtpZighdFtvXSl7dmFyIGE9dHlwZW9mIHJlcXVpcmU9PVwiZnVuY3Rpb25cIiYmcmVxdWlyZTtpZighdSYmYSlyZXR1cm4gYShvLCEwKTtpZihpKXJldHVybiBpKG8sITApO3ZhciBmPW5ldyBFcnJvcihcIkNhbm5vdCBmaW5kIG1vZHVsZSAnXCIrbytcIidcIik7dGhyb3cgZi5jb2RlPVwiTU9EVUxFX05PVF9GT1VORFwiLGZ9dmFyIGw9bltvXT17ZXhwb3J0czp7fX07dFtvXVswXS5jYWxsKGwuZXhwb3J0cyxmdW5jdGlvbihlKXt2YXIgbj10W29dWzFdW2VdO3JldHVybiBzKG4/bjplKX0sbCxsLmV4cG9ydHMsZSx0LG4scil9cmV0dXJuIG5bb10uZXhwb3J0c312YXIgaT10eXBlb2YgcmVxdWlyZT09XCJmdW5jdGlvblwiJiZyZXF1aXJlO2Zvcih2YXIgbz0wO288ci5sZW5ndGg7bysrKXMocltvXSk7cmV0dXJuIHN9KSIsIlxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcblxuICAgIGNyZWF0ZUNvbnRleHQ6IFx0XHRcdHJlcXVpcmUoJy4vbGliL2NyZWF0ZUNvbnRleHQnKSxcbiAgICBzZXRWZXJ0ZXhBdHRyaWJBcnJheXM6IFx0cmVxdWlyZSgnLi9saWIvc2V0VmVydGV4QXR0cmliQXJyYXlzJyksXG4gICAgXG4gICAgR0xCdWZmZXI6IFx0XHRcdFx0cmVxdWlyZSgnLi9saWIvR0xCdWZmZXInKSxcbiAgICBHTEZyYW1lYnVmZmVyOiBcdFx0XHRyZXF1aXJlKCcuL2xpYi9HTEZyYW1lYnVmZmVyJyksXG4gICAgR0xTaGFkZXI6IFx0XHRcdFx0cmVxdWlyZSgnLi9saWIvR0xTaGFkZXInKSxcbiAgICBHTFRleHR1cmU6IFx0XHRcdFx0cmVxdWlyZSgnLi9saWIvR0xUZXh0dXJlJyksXG4gICAgXG4gICAgVmVydGV4QXJyYXlPYmplY3Q6IFx0XHRyZXF1aXJlKCcuL2xpYi9WZXJ0ZXhBcnJheU9iamVjdCcpXG5cbn07IiwiXG4vKipcbiAqIEhlbHBlciBjbGFzcyB0byBjcmVhdGUgYSB3ZWJHTCBidWZmZXJcbiAqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gZ2wge1dlYkdMUmVuZGVyaW5nQ29udGV4dH1cbiAqL1xuXG52YXIgRU1QVFlfQVJSQVlfQlVGRkVSID0gbmV3IEFycmF5QnVmZmVyKDApO1xuXG52YXIgQnVmZmVyID0gZnVuY3Rpb24oZ2wsIHR5cGUsIGRhdGEsIGRyYXdUeXBlKVxue1xuXHR0aGlzLmdsID0gZ2w7XG5cblx0dGhpcy5idWZmZXIgPSBnbC5jcmVhdGVCdWZmZXIoKTtcblx0dGhpcy50eXBlID0gdHlwZSB8fCBnbC5BUlJBWV9CVUZGRVI7XG5cdHRoaXMuZHJhd1R5cGUgPSBkcmF3VHlwZSB8fCBnbC5TVEFUSUNfRFJBVztcblx0dGhpcy5kYXRhID0gRU1QVFlfQVJSQVlfQlVGRkVSO1xuXG5cdGlmKGRhdGEpXG5cdHtcblx0XHR0aGlzLnVwbG9hZChkYXRhKTtcblx0fVxufVxuXG5CdWZmZXIucHJvdG90eXBlLnVwbG9hZCA9IGZ1bmN0aW9uKGRhdGEsIG9mZnNldCwgZG9udEJpbmQpXG57XG5cdC8vIHRvZG8gLSBuZWVkZWQ/XG5cdC8vaWYoIWRvbnRCaW5kKVxuXHR0aGlzLmJpbmQoKTtcblxuXHR2YXIgZ2wgPSB0aGlzLmdsO1xuXHRcblx0ZGF0YSA9IGRhdGEgfHwgdGhpcy5kYXRhO1xuXHRvZmZzZXQgPSBvZmZzZXQgfHwgMDtcblxuXHRpZih0aGlzLmRhdGEuYnl0ZUxlbmd0aCA+PSBkYXRhLmJ5dGVMZW5ndGgpXG5cdHtcdFxuXHRcdGdsLmJ1ZmZlclN1YkRhdGEodGhpcy50eXBlLCBvZmZzZXQsIGRhdGEpO1xuXHR9XG5cdGVsc2Vcblx0e1xuXHRcdGdsLmJ1ZmZlckRhdGEodGhpcy50eXBlLCBkYXRhLCB0aGlzLmRyYXdUeXBlKTtcblx0fVxuXG5cdHRoaXMuZGF0YSA9IGRhdGE7XG59XG5cbkJ1ZmZlci5wcm90b3R5cGUuYmluZCA9IGZ1bmN0aW9uKClcbntcblx0dmFyIGdsID0gdGhpcy5nbDtcblx0Z2wuYmluZEJ1ZmZlcih0aGlzLnR5cGUsIHRoaXMuYnVmZmVyKTtcbn1cblxuQnVmZmVyLmNyZWF0ZVZlcnRleEJ1ZmZlciA9IGZ1bmN0aW9uKGdsLCBkYXRhLCBkcmF3VHlwZSlcbntcblx0cmV0dXJuIG5ldyBCdWZmZXIoZ2wsIGdsLkFSUkFZX0JVRkZFUiwgZGF0YSwgZHJhd1R5cGUpO1xufVxuXG5CdWZmZXIuY3JlYXRlSW5kZXhCdWZmZXIgPSBmdW5jdGlvbihnbCwgZGF0YSwgZHJhd1R5cGUpXG57XG5cdHJldHVybiBuZXcgQnVmZmVyKGdsLCBnbC5FTEVNRU5UX0FSUkFZX0JVRkZFUiwgZGF0YSwgZHJhd1R5cGUpO1xufVxuXG5CdWZmZXIuY3JlYXRlID0gZnVuY3Rpb24oZ2wsIHR5cGUsIGRhdGEsIGRyYXdUeXBlKVxue1xuXHRyZXR1cm4gbmV3IEJ1ZmZlcihnbCwgdHlwZSwgZHJhd1R5cGUpO1xufVxuXG4vL1RPRE8gRGVzdHJveS4uXG5cbm1vZHVsZS5leHBvcnRzID0gQnVmZmVyO1xuXG4iLCJcbnZhciBUZXh0dXJlID0gcmVxdWlyZSgnLi9HTFRleHR1cmUnKTtcblxuLyoqXG4gKiBIZWxwZXIgY2xhc3MgdG8gY3JlYXRlIGEgd2ViR0wgRnJhbWVidWZmZXJcbiAqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gZ2wge1dlYkdMUmVuZGVyaW5nQ29udGV4dH1cbiAqL1xuXG52YXIgRnJhbWVidWZmZXIgPSBmdW5jdGlvbihnbCwgd2lkdGgsIGhlaWdodClcbntcblx0dGhpcy5nbCA9IGdsO1xuXG5cdHRoaXMuZnJhbWVidWZmZXIgPSBnbC5jcmVhdGVGcmFtZWJ1ZmZlcigpO1xuXHRcblx0dGhpcy5zdGVuY2lsID0gbnVsbDtcblx0dGhpcy50ZXh0dXJlID0gbnVsbDtcblxuXHR0aGlzLndpZHRoID0gd2lkdGggfHwgMTAwO1xuXHR0aGlzLmhlaWdodCA9IGhlaWdodCB8fCAxMDA7XG59XG5cbkZyYW1lYnVmZmVyLnByb3RvdHlwZS5lbmFibGVUZXh0dXJlID0gZnVuY3Rpb24odGV4dHVyZSlcbntcblx0dmFyIGdsID0gdGhpcy5nbDtcblxuXHR0aGlzLnRleHR1cmUgPSB0ZXh0dXJlIHx8IG5ldyBUZXh0dXJlKGdsKTtcblxuXHR0aGlzLnRleHR1cmUuYmluZCgpO1xuXG5cdC8vZ2wudGV4SW1hZ2UyRChnbC5URVhUVVJFXzJELCAwLCBnbC5SR0JBLCAgdGhpcy53aWR0aCwgdGhpcy5oZWlnaHQsIDAsIGdsLlJHQkEsIGdsLlVOU0lHTkVEX0JZVEUsIG51bGwpO1xuXG5cdHRoaXMuYmluZCgpO1xuXG5cdGdsLmZyYW1lYnVmZmVyVGV4dHVyZTJEKGdsLkZSQU1FQlVGRkVSLCBnbC5DT0xPUl9BVFRBQ0hNRU5UMCwgZ2wuVEVYVFVSRV8yRCwgdGhpcy50ZXh0dXJlLnRleHR1cmUsIDApO1xufVxuXG5GcmFtZWJ1ZmZlci5wcm90b3R5cGUuZW5hYmxlU3RlbmNpbCA9IGZ1bmN0aW9uKClcbntcblx0aWYodGhpcy5zdGVuY2lsKXJldHVybjtcblxuXHR2YXIgZ2wgPSB0aGlzLmdsO1xuXG5cdHRoaXMuc3RlbmNpbCA9IGdsLmNyZWF0ZVJlbmRlcmJ1ZmZlcigpO1xuICAgIFxuICAgIGdsLmJpbmRSZW5kZXJidWZmZXIoZ2wuUkVOREVSQlVGRkVSLCB0aGlzLnN0ZW5jaWwpO1xuICAgIFxuICAgIC8vIFRPRE8uLiB0aGlzIGlzIGRlcHRoIEFORCBzdGVuY2lsP1xuICAgIGdsLmZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyKGdsLkZSQU1FQlVGRkVSLCBnbC5ERVBUSF9TVEVOQ0lMX0FUVEFDSE1FTlQsIGdsLlJFTkRFUkJVRkZFUiwgdGhpcy5zdGVuY2lsKTtcbiAgICBnbC5yZW5kZXJidWZmZXJTdG9yYWdlKGdsLlJFTkRFUkJVRkZFUiwgZ2wuREVQVEhfU1RFTkNJTCwgIHRoaXMud2lkdGggICwgdGhpcy5oZWlnaHQgKTtcbn1cblxuRnJhbWVidWZmZXIucHJvdG90eXBlLmNsZWFyID0gZnVuY3Rpb24oIHIsIGcsIGIsIGEgKVxue1xuXHR0aGlzLmJpbmQoKTtcblxuXHR2YXIgZ2wgPSB0aGlzLmdsO1xuICAgIFxuICAgIGdsLmNsZWFyQ29sb3IociwgZywgYiwgYSk7XG4gICAgZ2wuY2xlYXIoZ2wuQ09MT1JfQlVGRkVSX0JJVCk7XG59XG5cbkZyYW1lYnVmZmVyLnByb3RvdHlwZS5iaW5kID0gZnVuY3Rpb24oKVxue1xuXHR2YXIgZ2wgPSB0aGlzLmdsO1xuXHRnbC5iaW5kRnJhbWVidWZmZXIoZ2wuRlJBTUVCVUZGRVIsIHRoaXMuZnJhbWVidWZmZXIgKTtcdFxufVxuXG5GcmFtZWJ1ZmZlci5wcm90b3R5cGUudW5iaW5kID0gZnVuY3Rpb24oKVxue1xuXHRnbC5iaW5kRnJhbWVidWZmZXIoZ2wuRlJBTUVCVUZGRVIsIG51bGwgKTtcdFxufVxuXG5GcmFtZWJ1ZmZlci5wcm90b3R5cGUucmVzaXplID0gZnVuY3Rpb24od2lkdGgsIGhlaWdodClcbntcblx0dmFyIGdsID0gdGhpcy5nbDtcblxuXHR0aGlzLndpZHRoID0gd2lkdGg7XG5cdHRoaXMuaGVpZ2h0ID0gaGVpZ2h0O1xuXG5cdGlmICggdGhpcy50ZXh0dXJlIClcbiAgICB7XG4gICAgXHR0aGlzLnRleHR1cmUudXBsb2FkRGF0YShudWxsLCB3aWR0aCwgaGVpZ2h0KTtcblx0fVxuXG5cdGlmICggdGhpcy5zdGVuY2lsIClcbiAgICB7XG4gICAgICAgIC8vIHVwZGF0ZSB0aGUgc3RlbmNpbCBidWZmZXIgd2lkdGggYW5kIGhlaWdodFxuICAgICAgICBnbC5iaW5kUmVuZGVyYnVmZmVyKGdsLlJFTkRFUkJVRkZFUiwgdGhpcy5zdGVuY2lsKTtcbiAgICAgICAgZ2wucmVuZGVyYnVmZmVyU3RvcmFnZShnbC5SRU5ERVJCVUZGRVIsIGdsLkRFUFRIX1NURU5DSUwsIHdpZHRoLCBoZWlnaHQpO1xuICAgIH1cbn1cblxuRnJhbWVidWZmZXIucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbigpXG57XG5cdHZhciBnbCA9IHRoaXMuZ2w7XG5cdC8vVE9ET1xuXHRnbC5kZWxldGVGcmFtZWJ1ZmZlcih0aGlzLmZyYW1lYnVmZmVyKTtcbn1cblxuRnJhbWVidWZmZXIuY3JlYXRlUkdCQSA9IGZ1bmN0aW9uKGdsLCB3aWR0aCwgaGVpZ2h0LCBkYXRhKVxue1xuXHR2YXIgdGV4dHVyZSA9IFRleHR1cmUuZnJvbURhdGEoZ2wsIG51bGwsIHdpZHRoLCBoZWlnaHQpO1xuXHR0ZXh0dXJlLmVuYWJsZU5lYXJlc3RTY2FsaW5nKCk7XG4gICAgdGV4dHVyZS5lbmFibGVXcmFwQ2xhbXAoKTtcblxuICAgIC8vbm93IGNyZWF0ZSB0aGUgZnJhbWVidWZmZXIgb2JqZWN0IGFuZCBhdHRhY2ggdGhlIHRleHR1cmUgdG8gaXQuXG4gICAgdmFyIGZibyA9IG5ldyBGcmFtZWJ1ZmZlcihnbCwgd2lkdGgsIGhlaWdodCk7XG4gICAgZmJvLmVuYWJsZVRleHR1cmUodGV4dHVyZSk7XG5cbiAgICByZXR1cm4gZmJvO1xufVxuXG5GcmFtZWJ1ZmZlci5jcmVhdGVGbG9hdDMyID0gZnVuY3Rpb24oZ2wsIHdpZHRoLCBoZWlnaHQsIGRhdGEpXG57XG5cdC8vIGNyZWF0ZSBhIG5ldyB0ZXh0dXJlLi5cbiAgICB2YXIgdGV4dHVyZSA9IG5ldyBUZXh0dXJlLmZyb21EYXRhKGdsLCBkYXRhLCB3aWR0aCwgaGVpZ2h0KTtcbiAgICB0ZXh0dXJlLmVuYWJsZU5lYXJlc3RTY2FsaW5nKCk7XG4gICAgdGV4dHVyZS5lbmFibGVXcmFwQ2xhbXAoKTtcblxuICAgIC8vbm93IGNyZWF0ZSB0aGUgZnJhbWVidWZmZXIgb2JqZWN0IGFuZCBhdHRhY2ggdGhlIHRleHR1cmUgdG8gaXQuXG4gICAgdmFyIGZibyA9IG5ldyBGcmFtZWJ1ZmZlcihnbCwgd2lkdGgsIGhlaWdodCk7XG4gICAgZmJvLmVuYWJsZVRleHR1cmUodGV4dHVyZSlcblxuICAgIHJldHVybiBmYm87XG59XG5cbm1vZHVsZS5leHBvcnRzID0gRnJhbWVidWZmZXI7XG5cbiIsIlxudmFyIGNvbXBpbGVQcm9ncmFtID0gcmVxdWlyZSgnLi9zaGFkZXIvY29tcGlsZVByb2dyYW0nKSxcblx0ZXh0cmFjdEF0dHJpYnV0ZXMgPSByZXF1aXJlKCcuL3NoYWRlci9leHRyYWN0QXR0cmlidXRlcycpLFxuXHRleHRyYWN0VW5pZm9ybXMgPSByZXF1aXJlKCcuL3NoYWRlci9leHRyYWN0VW5pZm9ybXMnKSxcblx0Z2VuZXJhdGVVbmlmb3JtQWNjZXNzT2JqZWN0ID0gcmVxdWlyZSgnLi9zaGFkZXIvZ2VuZXJhdGVVbmlmb3JtQWNjZXNzT2JqZWN0Jyk7XG5cbi8qKlxuICogSGVscGVyIGNsYXNzIHRvIGNyZWF0ZSBhIHdlYkdMIFNoYWRlclxuICpcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqIEBwYXJhbSBnbCB7V2ViR0xSZW5kZXJpbmdDb250ZXh0fVxuICovXG52YXIgU2hhZGVyID0gZnVuY3Rpb24oZ2wsIHZlcnRleFNyYywgZnJhZ21lbnRTcmMpXG57XG5cdHRoaXMuZ2wgPSBnbDtcblxuXHQvLyBGaXJzdCBjb21waWxlIHRoZSBwcm9ncmFtLi5cblx0dGhpcy5wcm9ncmFtID0gY29tcGlsZVByb2dyYW0oZ2wsIHZlcnRleFNyYywgZnJhZ21lbnRTcmMpO1xuXG5cdC8vIG5leHQgZXh0cmFjdCB0aGUgYXR0cmlidXRlc1xuXHR0aGlzLmF0dHJpYnV0ZXMgPSBleHRyYWN0QXR0cmlidXRlcyhnbCwgdGhpcy5wcm9ncmFtKTsgXG5cbiAgICB2YXIgdW5pZm9ybURhdGEgPSBleHRyYWN0VW5pZm9ybXMoZ2wsIHRoaXMucHJvZ3JhbSk7XG5cbiAgICB0aGlzLnVuaWZvcm1zID0gZ2VuZXJhdGVVbmlmb3JtQWNjZXNzT2JqZWN0KCBnbCwgdW5pZm9ybURhdGEgKTtcbn1cblxuU2hhZGVyLnByb3RvdHlwZS5iaW5kID0gZnVuY3Rpb24oKVxue1xuXHR0aGlzLmdsLnVzZVByb2dyYW0odGhpcy5wcm9ncmFtKTtcbn1cblxuU2hhZGVyLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24oKVxue1xuXHR2YXIgZ2wgPSB0aGlzLmdsO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IFNoYWRlcjtcblxuIiwiXG4vKipcbiAqIEhlbHBlciBjbGFzcyB0byBjcmVhdGUgYSB3ZWJHTCBUZXh0dXJlXG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIGdsIHtXZWJHTFJlbmRlcmluZ0NvbnRleHR9IGEgV2ViR0wgY29udGV4dFxuICogQHBhcmFtIHdpZHRoIHtudW1iZXJ9IHRoZSB3aWR0aCBvZiB0aGUgdGV4dHVyZSBcbiAqIEBwYXJhbSBoZWlnaHQge251bWJlcn0gdGhlIGhlaWdodCBvZiB0aGUgdGV4dHVyZSBcbiAqIEBwYXJhbSBmb3JtYXQge251bWJlcn0gdGhlIHBpeGVsIGZvcm1hdCBvZiB0aGUgdGV4dHVyZS4gZGVmYXVsdHMgdG8gZ2wuUkdCQVxuICogQHBhcmFtIHR5cGUge251bWJlcn0gdGhlIGdsIHR5cGUgb2YgdGhlIHRleHR1cmUuIGRlZmF1bHRzIHRvIGdsLlVOU0lHTkVEX0JZVEVcbiAqL1xudmFyIFRleHR1cmUgPSBmdW5jdGlvbihnbCwgd2lkdGgsIGhlaWdodCwgZm9ybWF0LCB0eXBlKVxue1xuXHR0aGlzLmdsID0gZ2w7XG5cblx0dGhpcy50ZXh0dXJlID0gZ2wuY3JlYXRlVGV4dHVyZSgpO1xuXG5cdC8vIHNvbWUgc2V0dGluZ3MuLlxuXHR0aGlzLm1pcG1hcCA9IGZhbHNlO1xuXG5cdHRoaXMucHJlbXVsdGlwbHlBbHBoYSA9IGZhbHNlO1xuXG5cdHRoaXMud2lkdGggPSB3aWR0aCB8fCAwO1xuXHR0aGlzLmhlaWdodCA9IGhlaWdodCB8fCAwO1xuXG5cdHRoaXMuZm9ybWF0ID0gZm9ybWF0IHx8IGdsLlJHQkE7XG5cdHRoaXMudHlwZSA9IHR5cGUgfHwgZ2wuVU5TSUdORURfQllURTtcblxuXG59XG5cbi8qKlxuICogQHBhcmFtIHtQSVhJLmdsQ29yZS5UZXh0dXJlfSBbdmFybmFtZV0gW2Rlc2NyaXB0aW9uXVxuICovXG5UZXh0dXJlLnByb3RvdHlwZS51cGxvYWQgPSBmdW5jdGlvbihzb3VyY2UpXG57XG5cdHRoaXMuYmluZCgpO1xuXG5cdHZhciBnbCA9IHRoaXMuZ2w7XG5cblx0dGhpcy53aWR0aCA9IHNvdXJjZS53aWR0aDtcblx0dGhpcy5oZWlnaHQgPSBzb3VyY2UuaGVpZ2h0O1xuXG5cdGdsLnBpeGVsU3RvcmVpKGdsLlVOUEFDS19QUkVNVUxUSVBMWV9BTFBIQV9XRUJHTCwgdGhpcy5wcmVtdWx0aXBseUFscGhhKTtcbiAgICBnbC50ZXhJbWFnZTJEKGdsLlRFWFRVUkVfMkQsIDAsIHRoaXMuZm9ybWF0LCB0aGlzLmZvcm1hdCwgdGhpcy50eXBlLCBzb3VyY2UpO1xufVxuXG52YXIgRkxPQVRJTkdfUE9JTlRfQVZBSUxBQkxFID0gZmFsc2U7XG5cblRleHR1cmUucHJvdG90eXBlLnVwbG9hZERhdGEgPSBmdW5jdGlvbihkYXRhLCB3aWR0aCwgaGVpZ2h0KVxue1xuXHR0aGlzLmJpbmQoKTtcblx0XG5cdHRoaXMud2lkdGggPSB3aWR0aCB8fCB0aGlzLndpZHRoO1xuXHR0aGlzLmhlaWdodCA9IGhlaWdodCB8fCB0aGlzLmhlaWdodDtcblxuXHRpZihkYXRhIGluc3RhbmNlb2YgRmxvYXQzMkFycmF5KVxuXHR7XG5cdFx0aWYoIUZMT0FUSU5HX1BPSU5UX0FWQUlMQUJMRSlcblx0XHR7XG5cdFx0XHR2YXIgZXh0ID0gZ2wuZ2V0RXh0ZW5zaW9uKFwiT0VTX3RleHR1cmVfZmxvYXRcIik7XG5cdFx0XHRcblx0XHRcdGlmKGV4dClcblx0XHRcdHtcblx0XHRcdFx0RkxPQVRJTkdfUE9JTlRfQVZBSUxBQkxFID0gdHJ1ZTtcblx0XHRcdH1cblx0XHRcdGVsc2Vcblx0XHRcdHtcblx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKCdmbG9hdGluZyBwb2ludCB0ZXh0dXJlcyBub3QgYXZhaWxhYmxlJyk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0dGhpcy50eXBlID0gZ2wuRkxPQVQ7XG5cdH1cblx0ZWxzZVxuXHR7XG5cdFx0Ly8gVE9ETyBzdXBwb3J0IGZvciBvdGhlciB0eXBlc1xuXHRcdHRoaXMudHlwZSA9IGdsLlVOU0lHTkVEX0JZVEU7XG5cdH1cblxuXHQvLyB3aGF0IHR5cGUgb2YgZGF0YT9cblx0Z2wucGl4ZWxTdG9yZWkoZ2wuVU5QQUNLX1BSRU1VTFRJUExZX0FMUEhBX1dFQkdMLCB0aGlzLnByZW11bHRpcGx5QWxwaGEpO1xuXHRnbC50ZXhJbWFnZTJEKGdsLlRFWFRVUkVfMkQsIDAsIHRoaXMuZm9ybWF0LCAgdGhpcy53aWR0aCwgdGhpcy5oZWlnaHQsIDAsIHRoaXMuZm9ybWF0LCB0aGlzLnR5cGUsIGRhdGEgfHwgbnVsbCk7XG5cbn1cblxuVGV4dHVyZS5wcm90b3R5cGUuYmluZCA9IGZ1bmN0aW9uKGxvY2F0aW9uKVxue1xuXHR2YXIgZ2wgPSB0aGlzLmdsO1xuXG5cdGlmKGxvY2F0aW9uICE9PSB1bmRlZmluZWQpXG5cdHtcblx0XHRnbC5hY3RpdmVUZXh0dXJlKGdsLlRFWFRVUkUwICsgbG9jYXRpb24pO1xuXHR9XG5cblx0Z2wuYmluZFRleHR1cmUoZ2wuVEVYVFVSRV8yRCwgdGhpcy50ZXh0dXJlKTtcbn1cblxuVGV4dHVyZS5wcm90b3R5cGUudW5iaW5kID0gZnVuY3Rpb24oKVxue1xuXHR2YXIgZ2wgPSB0aGlzLmdsO1xuXHRnbC5iaW5kVGV4dHVyZShnbC5URVhUVVJFXzJELCBudWxsKTtcbn1cblxuVGV4dHVyZS5wcm90b3R5cGUubWluRmlsdGVyID0gZnVuY3Rpb24oIGxpbmVhciApXG57XG5cdHZhciBnbCA9IHRoaXMuZ2w7XG5cblx0dGhpcy5iaW5kKCk7XG5cblx0aWYodGhpcy5taXBtYXApXG5cdHtcblx0XHRnbC50ZXhQYXJhbWV0ZXJpKGdsLlRFWFRVUkVfMkQsIGdsLlRFWFRVUkVfTUlOX0ZJTFRFUiwgbGluZWFyID8gZ2wuTElORUFSX01JUE1BUF9MSU5FQVIgOiBnbC5ORUFSRVNUX01JUE1BUF9ORUFSRVNUKTtcblx0fVxuXHRlbHNlXG5cdHtcblx0XHRnbC50ZXhQYXJhbWV0ZXJpKGdsLlRFWFRVUkVfMkQsIGdsLlRFWFRVUkVfTUlOX0ZJTFRFUiwgbGluZWFyID8gZ2wuTElORUFSIDogZ2wuTkVBUkVTVCk7XG5cdH1cdFxufVxuXG5UZXh0dXJlLnByb3RvdHlwZS5tYWdGaWx0ZXIgPSBmdW5jdGlvbiggbGluZWFyIClcbntcblx0dmFyIGdsID0gdGhpcy5nbDtcblxuXHR0aGlzLmJpbmQoKTtcblxuXHRnbC50ZXhQYXJhbWV0ZXJpKGdsLlRFWFRVUkVfMkQsIGdsLlRFWFRVUkVfTUFHX0ZJTFRFUiwgbGluZWFyID8gZ2wuTElORUFSIDogZ2wuTkVBUkVTVCk7XG59XG5cblRleHR1cmUucHJvdG90eXBlLmVuYWJsZU1pcG1hcCA9IGZ1bmN0aW9uKClcbntcblx0dGhpcy5iaW5kKCk7XG5cblx0dGhpcy5taXBtYXAgPSB0cnVlO1xuXHRnbC5nZW5lcmF0ZU1pcG1hcChnbC5URVhUVVJFXzJEKTtcbn1cblxuVGV4dHVyZS5wcm90b3R5cGUuZW5hYmxlTGluZWFyU2NhbGluZyA9IGZ1bmN0aW9uKClcbntcblx0dGhpcy5taW5GaWx0ZXIodHJ1ZSk7XG5cdHRoaXMubWFnRmlsdGVyKHRydWUpO1xufVxuXG5UZXh0dXJlLnByb3RvdHlwZS5lbmFibGVOZWFyZXN0U2NhbGluZyA9IGZ1bmN0aW9uKClcbntcblx0dGhpcy5taW5GaWx0ZXIoZmFsc2UpO1xuXHR0aGlzLm1hZ0ZpbHRlcihmYWxzZSk7XG59XG5cblRleHR1cmUucHJvdG90eXBlLmVuYWJsZVdyYXBDbGFtcCA9IGZ1bmN0aW9uKClcbntcblx0dmFyIGdsID0gdGhpcy5nbDtcblxuXHR0aGlzLmJpbmQoKTtcblxuXHRnbC50ZXhQYXJhbWV0ZXJpKGdsLlRFWFRVUkVfMkQsIGdsLlRFWFRVUkVfV1JBUF9TLCBnbC5DTEFNUF9UT19FREdFKTtcbiAgICBnbC50ZXhQYXJhbWV0ZXJpKGdsLlRFWFRVUkVfMkQsIGdsLlRFWFRVUkVfV1JBUF9ULCBnbC5DTEFNUF9UT19FREdFKTtcbn1cblxuVGV4dHVyZS5wcm90b3R5cGUuZW5hYmxlV3JhcFJlcGVhdCA9IGZ1bmN0aW9uKClcbntcblx0dmFyIGdsID0gdGhpcy5nbDtcblxuXHR0aGlzLmJpbmQoKTtcblx0XG5cdGdsLnRleFBhcmFtZXRlcmkoZ2wuVEVYVFVSRV8yRCwgZ2wuVEVYVFVSRV9XUkFQX1MsIGdsLlJFUEVBVCk7XG4gICAgZ2wudGV4UGFyYW1ldGVyaShnbC5URVhUVVJFXzJELCBnbC5URVhUVVJFX1dSQVBfVCwgZ2wuUkVQRUFUKTtcbn1cblxuVGV4dHVyZS5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uKClcbntcblx0dmFyIGdsID0gdGhpcy5nbDtcblx0Ly9UT0RPXG5cdGdsLmRlbGV0ZVRleHR1cmUodGhpcy50ZXh0dXJlKTtcbn1cblxuLy9UZXh0dXJlLlxuVGV4dHVyZS5mcm9tU291cmNlID0gZnVuY3Rpb24oZ2wsIHNvdXJjZSwgcHJlbXVsdGlwbHlBbHBoYSlcbntcblx0dmFyIHRleHR1cmUgPSBuZXcgVGV4dHVyZShnbCk7XG5cdHRleHR1cmUucHJlbXVsdGlwbHlBbHBoYSA9IHByZW11bHRpcGx5QWxwaGEgfHwgZmFsc2U7XG5cdHRleHR1cmUudXBsb2FkKHNvdXJjZSk7XG5cblx0cmV0dXJuIHRleHR1cmU7XG59XG5cblRleHR1cmUuZnJvbURhdGEgPSBmdW5jdGlvbihnbCwgZGF0YSwgd2lkdGgsIGhlaWdodClcbntcblx0Ly9jb25zb2xlLmxvZyhkYXRhLCB3aWR0aCwgaGVpZ2h0KTtcblx0dmFyIHRleHR1cmUgPSBuZXcgVGV4dHVyZShnbCk7XG5cdHRleHR1cmUudXBsb2FkRGF0YShkYXRhLCB3aWR0aCwgaGVpZ2h0KTtcblxuXHRyZXR1cm4gdGV4dHVyZTtcbn1cblxuXG5tb2R1bGUuZXhwb3J0cyA9IFRleHR1cmU7XG5cbiIsIlxuLyoqXG4gKiBHZW5lcmljIE1hc2sgU3RhY2sgZGF0YSBzdHJ1Y3R1cmVcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqL1xuXG4vLyBzdGF0ZSBvYmplY3QvL1xuXG5cbmZ1bmN0aW9uIFZlcnRleEFycmF5T2JqZWN0KGdsKVxue1xuXHRcblx0dGhpcy5uYXRpdmVWYW9FeHRlbnNpb24gPSAoXG4gICAgICBnbC5nZXRFeHRlbnNpb24oJ09FU192ZXJ0ZXhfYXJyYXlfb2JqZWN0JykgfHxcbiAgICAgIGdsLmdldEV4dGVuc2lvbignTU9aX09FU192ZXJ0ZXhfYXJyYXlfb2JqZWN0JykgfHxcbiAgICAgIGdsLmdldEV4dGVuc2lvbignV0VCS0lUX09FU192ZXJ0ZXhfYXJyYXlfb2JqZWN0JylcbiAgICApO1xuXG4vL1x0dGhpcy5uYXRpdmVWYW9FeHRlbnNpb24gPSBudWxsO1xuXG5cdGlmKHRoaXMubmF0aXZlVmFvRXh0ZW5zaW9uKVxuXHR7XG5cdFx0dGhpcy5uYXRpdmVWYW8gPSB0aGlzLm5hdGl2ZVZhb0V4dGVuc2lvbi5jcmVhdGVWZXJ0ZXhBcnJheU9FUygpOyAgXG5cdH1cblxuXHR0aGlzLmdsID0gZ2w7XG5cblx0dGhpcy5hdHRyaWJ1dGVzID0gW107XG5cblx0dGhpcy5pbmRleEJ1ZmZlciA9IG51bGw7XG5cblx0dGhpcy5kaXJ0eSA9IGZhbHNlO1xuXG5cdFxufVxuXG5WZXJ0ZXhBcnJheU9iamVjdC5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBWZXJ0ZXhBcnJheU9iamVjdDtcbm1vZHVsZS5leHBvcnRzID0gVmVydGV4QXJyYXlPYmplY3Q7XG5cblZlcnRleEFycmF5T2JqZWN0LnByb3RvdHlwZS5iaW5kID0gZnVuY3Rpb24oKVxue1xuXHRpZih0aGlzLm5hdGl2ZVZhbylcblx0e1xuXHRcdHRoaXMubmF0aXZlVmFvRXh0ZW5zaW9uLmJpbmRWZXJ0ZXhBcnJheU9FUyh0aGlzLm5hdGl2ZVZhbyk7ICBcblxuXHRcdGlmKHRoaXMuZGlydHkpXG5cdFx0e1xuXHRcdFx0dGhpcy5kaXJ0eSA9IGZhbHNlO1xuXHRcdFx0dGhpcy5hY3RpdmF0ZSgpO1xuXHRcdH1cblx0fVxuXHRlbHNlXG5cdHtcblx0XHR0aGlzLmFjdGl2YXRlKCk7XG5cdH1cbn1cblxuVmVydGV4QXJyYXlPYmplY3QucHJvdG90eXBlLnVuYmluZCA9IGZ1bmN0aW9uKClcbntcblx0aWYodGhpcy5uYXRpdmVWYW8pXG5cdHtcblx0XHR0aGlzLm5hdGl2ZVZhb0V4dGVuc2lvbi5iaW5kVmVydGV4QXJyYXlPRVMobnVsbCk7XG5cdH1cbn1cblxuVmVydGV4QXJyYXlPYmplY3QucHJvdG90eXBlLmFjdGl2YXRlID0gZnVuY3Rpb24oKVxue1xuXHR2YXIgZ2wgPSB0aGlzLmdsO1xuXG5cdGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5hdHRyaWJ1dGVzLmxlbmd0aDsgaSsrKSBcblx0e1xuXHRcdHZhciBhdHRyaWIgPSB0aGlzLmF0dHJpYnV0ZXNbaV07XG5cdFx0YXR0cmliLmJ1ZmZlci5iaW5kKCk7XHRcblxuXHRcdGF0dHJpYi5hdHRyaWJ1dGUucG9pbnRlcihhdHRyaWIudHlwZSwgYXR0cmliLm5vcm1hbGl6ZWQsIGF0dHJpYi5zdHJpZGUsIGF0dHJpYi5zdGFydCk7IFxuXHRcdFxuXHRcdGdsLmVuYWJsZVZlcnRleEF0dHJpYkFycmF5KGF0dHJpYi5hdHRyaWJ1dGUubG9jYXRpb24pO1xuXHR9O1xuXG5cdHRoaXMuaW5kZXhCdWZmZXIuYmluZCgpO1xufVxuXG5WZXJ0ZXhBcnJheU9iamVjdC5wcm90b3R5cGUuYWRkQXR0cmlidXRlID0gZnVuY3Rpb24oYnVmZmVyLCBhdHRyaWJ1dGUsIHR5cGUsIG5vcm1hbGl6ZWQsIHN0cmlkZSwgc3RhcnQpXG57XG4gICAgdGhpcy5hdHRyaWJ1dGVzLnB1c2goe1xuICAgIFx0YnVmZmVyOiBcdGJ1ZmZlcixcbiAgICBcdGF0dHJpYnV0ZTogXHRhdHRyaWJ1dGUsXG5cbiAgICBcdGxvY2F0aW9uOiBcdGF0dHJpYnV0ZS5sb2NhdGlvbixcblx0IFx0dHlwZTogXHRcdHR5cGUgfHwgdGhpcy5nbC5GTE9BVCxcblx0IFx0bm9ybWFsaXplZDogbm9ybWFsaXplZCB8fCBmYWxzZSxcblx0IFx0c3RyaWRlOiBcdHN0cmlkZSB8fCAwLFxuXHQgXHRzdGFydDogXHRcdHN0YXJ0IHx8IDBcblx0fSlcblxuXHR0aGlzLmRpcnR5ID0gdHJ1ZTtcbn1cblxuXG5WZXJ0ZXhBcnJheU9iamVjdC5wcm90b3R5cGUuYWRkSW5kZXggPSBmdW5jdGlvbihidWZmZXIsIG9wdGlvbnMpXG57XG4gICAgdGhpcy5pbmRleEJ1ZmZlciA9IGJ1ZmZlcjtcblxuICAgIHRoaXMuZGlydHkgPSB0cnVlO1xufVxuXG5WZXJ0ZXhBcnJheU9iamVjdC5wcm90b3R5cGUuZHJhdyA9IGZ1bmN0aW9uKHR5cGUsIHNpemUsIHN0YXJ0KVxue1xuXHR2YXIgZ2wgPSB0aGlzLmdsO1xuXHRnbC5kcmF3RWxlbWVudHModHlwZSwgc2l6ZSwgZ2wuVU5TSUdORURfU0hPUlQsIHN0YXJ0KTtcbn1cblxuIiwiXG4vKipcbiAqIEhlbHBlciBjbGFzcyB0byBjcmVhdGUgYSB3ZWJHTCBDb250ZXh0XG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIGdsIHtXZWJHTFJlbmRlcmluZ0NvbnRleHR9XG4gKi9cblxudmFyIENPTlRFWFRfVUlEID0gMDtcblxudmFyIGNyZWF0ZUNvbnRleHQgPSBmdW5jdGlvbihjYW52YXMsIG9wdGlvbnMpXG57XG4gICAgZ2wgPSBjYW52YXMuZ2V0Q29udGV4dCgnd2ViZ2wnLCBvcHRpb25zKSB8fCBcbiAgICBcdCBjYW52YXMuZ2V0Q29udGV4dCgnZXhwZXJpbWVudGFsLXdlYmdsJywgb3B0aW9ucyk7XG5cbiAgICBpZiAoIWdsKVxuICAgIHtcbiAgICAgICAgLy8gZmFpbCwgbm90IGFibGUgdG8gZ2V0IGEgY29udGV4dFxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RoaXMgYnJvd3NlciBkb2VzIG5vdCBzdXBwb3J0IHdlYkdMLiBUcnkgdXNpbmcgdGhlIGNhbnZhcyByZW5kZXJlcicpO1xuICAgIH1cblxuICAgIC8vIG1pZ2h0IHdhbnQgdG8gcGhhc2UgdGhpcyBvdXQ/XG4gICAgZ2wuaWQgPSBDT05URVhUX1VJRCsrO1xuXG4gICAgcmV0dXJuIGdsO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGNyZWF0ZUNvbnRleHQ7XG5cbiIsIi8qKlxuICogR2VuZXJpYyBNYXNrIFN0YWNrIGRhdGEgc3RydWN0dXJlXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKi9cblxudmFyIEdMX01BUCA9IHt9O1xuXG5cbnZhciBzZXRWZXJ0ZXhBdHRyaWJBcnJheXMgPSBmdW5jdGlvbiAoZ2wsIGF0dHJpYnMpXG57XHRcbiAgIC8vIGNvbnNvbGUubG9nKGdsLmlkKVxuICAgIHZhciBkYXRhID0gR0xfTUFQW2dsLmlkXTtcblxuICAgIGlmKCFkYXRhKVxuICAgIHtcblx0ICAgdmFyIG1heEF0dHJpYnMgPSBnbC5nZXRQYXJhbWV0ZXIoZ2wuTUFYX1ZFUlRFWF9BVFRSSUJTKTtcblx0XHRkYXRhID0gR0xfTUFQW2dsLmlkXSA9IHt0ZW1wQXR0cmliU3RhdGU6bmV3IEFycmF5KG1heEF0dHJpYnMpXG5cdFx0XHRcdCBcdCBcdFx0ICAgLGF0dHJpYlN0YXRlOm5ldyBBcnJheShtYXhBdHRyaWJzKX07XG5cdH1cblx0XG4gICAgdmFyIGksXG4gICAgXHR0ZW1wQXR0cmliU3RhdGUgPSBkYXRhLnRlbXBBdHRyaWJTdGF0ZSxcbiAgICBcdGF0dHJpYlN0YXRlID0gZGF0YS5hdHRyaWJTdGF0ZTtcblxuICAgIGZvciAoaSA9IDA7IGkgPCB0ZW1wQXR0cmliU3RhdGUubGVuZ3RoOyBpKyspXG4gICAge1xuICAgICAgICB0ZW1wQXR0cmliU3RhdGVbaV0gPSBmYWxzZTtcbiAgICB9XG5cbiAgICAvLyBzZXQgdGhlIG5ldyBhdHRyaWJzXG4gICAgZm9yIChpIGluIGF0dHJpYnMpXG4gICAge1xuICAgICAgICB0ZW1wQXR0cmliU3RhdGVbYXR0cmlic1tpXS5sb2NhdGlvbl0gPSB0cnVlO1xuICAgIH1cblxuICAgIGZvciAoaSA9IDE7IGkgPCBhdHRyaWJTdGF0ZS5sZW5ndGg7IGkrKylcbiAgICB7XG4gICAgICAgIGlmIChhdHRyaWJTdGF0ZVtpXSAhPT0gdGVtcEF0dHJpYlN0YXRlW2ldKVxuICAgICAgICB7XG4gICAgICAgICAgICBhdHRyaWJTdGF0ZVtpXSA9IHRlbXBBdHRyaWJTdGF0ZVtpXTtcblxuICAgICAgICAgICAgaWYgKGRhdGEuYXR0cmliU3RhdGVbaV0pXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgZ2wuZW5hYmxlVmVydGV4QXR0cmliQXJyYXkoaSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgZ2wuZGlzYWJsZVZlcnRleEF0dHJpYkFycmF5KGkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxufTtcblxubW9kdWxlLmV4cG9ydHMgPSBzZXRWZXJ0ZXhBdHRyaWJBcnJheXM7IiwiXG5cblxuXG5jb21waWxlUHJvZ3JhbSA9IGZ1bmN0aW9uKGdsLCB2ZXJ0ZXhTcmMsIGZyYWdtZW50U3JjKVxue1xuICAgIHZhciBnbFZlcnRTaGFkZXIgPSBjb21waWxlU2hhZGVyKGdsLCBnbC5WRVJURVhfU0hBREVSLCB2ZXJ0ZXhTcmMpO1xuICAgIHZhciBnbEZyYWdTaGFkZXIgPSBjb21waWxlU2hhZGVyKGdsLCBnbC5GUkFHTUVOVF9TSEFERVIsIGZyYWdtZW50U3JjKTtcblxuICAgIHZhciBwcm9ncmFtID0gZ2wuY3JlYXRlUHJvZ3JhbSgpO1xuXG4gICAgZ2wuYXR0YWNoU2hhZGVyKHByb2dyYW0sIGdsVmVydFNoYWRlcik7XG4gICAgZ2wuYXR0YWNoU2hhZGVyKHByb2dyYW0sIGdsRnJhZ1NoYWRlcik7XG4gICAgZ2wubGlua1Byb2dyYW0ocHJvZ3JhbSk7XG5cbiAgICAvLyBpZiBsaW5raW5nIGZhaWxzLCB0aGVuIGxvZyBhbmQgY2xlYW51cFxuICAgIGlmICghZ2wuZ2V0UHJvZ3JhbVBhcmFtZXRlcihwcm9ncmFtLCBnbC5MSU5LX1NUQVRVUykpXG4gICAge1xuICAgICAgICBjb25zb2xlLmVycm9yKCdQaXhpLmpzIEVycm9yOiBDb3VsZCBub3QgaW5pdGlhbGl6ZSBzaGFkZXIuJyk7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ2dsLlZBTElEQVRFX1NUQVRVUycsIGdsLmdldFByb2dyYW1QYXJhbWV0ZXIocHJvZ3JhbSwgZ2wuVkFMSURBVEVfU1RBVFVTKSk7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ2dsLmdldEVycm9yKCknLCBnbC5nZXRFcnJvcigpKTtcblxuICAgICAgICAvLyBpZiB0aGVyZSBpcyBhIHByb2dyYW0gaW5mbyBsb2csIGxvZyBpdFxuICAgICAgICBpZiAoZ2wuZ2V0UHJvZ3JhbUluZm9Mb2cocHJvZ3JhbSkgIT09ICcnKVxuICAgICAgICB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ1BpeGkuanMgV2FybmluZzogZ2wuZ2V0UHJvZ3JhbUluZm9Mb2coKScsIGdsLmdldFByb2dyYW1JbmZvTG9nKHByb2dyYW0pKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGdsLmRlbGV0ZVByb2dyYW0ocHJvZ3JhbSk7XG4gICAgICAgIHByb2dyYW0gPSBudWxsO1xuICAgIH1cblxuICAgIC8vIGNsZWFuIHVwIHNvbWUgc2hhZGVyc1xuICAgIGdsLmRlbGV0ZVNoYWRlcihnbFZlcnRTaGFkZXIpO1xuICAgIGdsLmRlbGV0ZVNoYWRlcihnbEZyYWdTaGFkZXIpO1xuXG4gICAgcmV0dXJuIHByb2dyYW07XG59XG5cbnZhciBjb21waWxlU2hhZGVyID0gZnVuY3Rpb24gKGdsLCB0eXBlLCBzcmMpXG57XG4gICAgdmFyIHNoYWRlciA9IGdsLmNyZWF0ZVNoYWRlcih0eXBlKTtcblxuICAgIGdsLnNoYWRlclNvdXJjZShzaGFkZXIsIHNyYyk7XG4gICAgZ2wuY29tcGlsZVNoYWRlcihzaGFkZXIpO1xuXG4gICAgaWYgKCFnbC5nZXRTaGFkZXJQYXJhbWV0ZXIoc2hhZGVyLCBnbC5DT01QSUxFX1NUQVRVUykpXG4gICAge1xuICAgICAgICBjb25zb2xlLmxvZyhnbC5nZXRTaGFkZXJJbmZvTG9nKHNoYWRlcikpO1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICByZXR1cm4gc2hhZGVyO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBjb21waWxlUHJvZ3JhbTtcblxuIiwiXG5cbnZhciBkZWZhdWx0VmFsdWUgPSBmdW5jdGlvbih0eXBlLCBzaXplKSBcbntcbiAgICBzd2l0Y2ggKHR5cGUpXG4gICAge1xuICAgICAgICBjYXNlICdmbG9hdCc6XG4gICAgICAgICAgICByZXR1cm4gMDtcblxuICAgICAgICBjYXNlICd2ZWMyJzogXG4gICAgICAgICAgICByZXR1cm4gbmV3IEZsb2F0MzJBcnJheSgyICogc2l6ZSk7XG5cbiAgICAgICAgY2FzZSAndmVjMyc6XG4gICAgICAgICAgICByZXR1cm4gbmV3IEZsb2F0MzJBcnJheSgzICogc2l6ZSk7XG5cbiAgICAgICAgY2FzZSAndmVjNCc6ICAgICBcbiAgICAgICAgICAgIHJldHVybiBuZXcgRmxvYXQzMkFycmF5KDQgKiBzaXplKTtcbiAgICAgICAgICAgIFxuICAgICAgICBjYXNlICdpbnQnOlxuICAgICAgICBjYXNlICdzYW1wbGVyMkQnOlxuICAgICAgICAgICAgcmV0dXJuIDA7XG5cbiAgICAgICAgY2FzZSAnaXZlYzInOiAgIFxuICAgICAgICAgICAgcmV0dXJuIG5ldyBJbnQzMkFycmF5KDIgKiBzaXplKTtcblxuICAgICAgICBjYXNlICdpdmVjMyc6XG4gICAgICAgICAgICByZXR1cm4gbmV3IEludDMyQXJyYXkoMyAqIHNpemUpO1xuXG4gICAgICAgIGNhc2UgJ2l2ZWM0JzogXG4gICAgICAgICAgICByZXR1cm4gbmV3IEludDMyQXJyYXkoNCAqIHNpemUpO1xuXG4gICAgICAgIGNhc2UgJ2Jvb2wnOiAgICAgXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG5cbiAgICAgICAgY2FzZSAnYnZlYzInOlxuXG4gICAgICAgICAgICByZXR1cm4gYm9vbGVhbkFycmF5KCAyICogc2l6ZSk7XG5cbiAgICAgICAgY2FzZSAnYnZlYzMnOlxuICAgICAgICAgICAgcmV0dXJuIGJvb2xlYW5BcnJheSgzICogc2l6ZSk7XG5cbiAgICAgICAgY2FzZSAnYnZlYzQnOlxuICAgICAgICAgICAgcmV0dXJuIGJvb2xlYW5BcnJheSg0ICogc2l6ZSk7XG5cbiAgICAgICAgY2FzZSAnbWF0Mic6XG4gICAgICAgICAgICByZXR1cm4gbmV3IEZsb2F0MzJBcnJheShbMSwgMFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLDAsIDFdKTtcblxuICAgICAgICBjYXNlICdtYXQzJzogXG4gICAgICAgICAgICByZXR1cm4gbmV3IEZsb2F0MzJBcnJheShbMSwgMCwgMFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLDAsIDEsIDBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwwLCAwLCAxXSk7XG5cbiAgICAgICAgY2FzZSAnbWF0NCc6XG4gICAgICAgICAgICByZXR1cm4gbmV3IEZsb2F0MzJBcnJheShbMSwgMCwgMCwgMFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLDAsIDEsIDAsIDBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwwLCAwLCAxLCAwXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsMCwgMCwgMCwgMV0pO1xuICAgIH1cbn1cblxudmFyIGJvb2xlYW5BcnJheSA9IGZ1bmN0aW9uKHNpemUpXG57XG4gICAgdmFyIGFycmF5ID0gbmV3IEFycmF5KHNpemUpO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcnJheS5sZW5ndGg7IGkrKykgXG4gICAge1xuICAgICAgICBhcnJheVtpXSA9IGZhbHNlO1xuICAgIH07XG5cbiAgICByZXR1cm4gYXJyYXk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZGVmYXVsdFZhbHVlO1xuIiwiXG52YXIgbWFwVHlwZSA9IHJlcXVpcmUoJy4vbWFwVHlwZScpO1xudmFyIG1hcFNpemUgPSByZXF1aXJlKCcuL21hcFNpemUnKTtcblxudmFyIGV4dHJhY3RBdHRyaWJ1dGVzID0gZnVuY3Rpb24oZ2wsIHByb2dyYW0pXG57XG4gICAgdmFyIGF0dHJpYnV0ZXMgPSB7fTtcblxuICAgIHZhciB0b3RhbEF0dHJpYnV0ZXMgPSBnbC5nZXRQcm9ncmFtUGFyYW1ldGVyKHByb2dyYW0sIGdsLkFDVElWRV9BVFRSSUJVVEVTKVxuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0b3RhbEF0dHJpYnV0ZXM7IGkrKykgXG4gICAge1xuICAgICAgICB2YXIgYXR0cmliRGF0YSA9IGdsLmdldEFjdGl2ZUF0dHJpYihwcm9ncmFtLCBpKTtcbiAgICAgICAgdmFyIHR5cGUgPSBtYXBUeXBlKGdsLCBhdHRyaWJEYXRhLnR5cGUpO1xuXG4gICAgICAgIGF0dHJpYnV0ZXNbYXR0cmliRGF0YS5uYW1lXSA9IHtcbiAgICAgICAgICAgIHR5cGU6dHlwZSxcbiAgICAgICAgICAgIHNpemU6bWFwU2l6ZSh0eXBlKSxcbiAgICAgICAgICAgIGxvY2F0aW9uOmdsLmdldEF0dHJpYkxvY2F0aW9uKHByb2dyYW0sIGF0dHJpYkRhdGEubmFtZSksXG4gICAgICAgICAgICAvL1RPRE8gLSBtYWtlIGFuIGF0dHJpYnV0ZSBvYmplY3RcbiAgICAgICAgICAgIHBvaW50ZXI6ZnVuY3Rpb24odHlwZSwgbm9ybWFsaXplZCwgc3RyaWRlLCBzdGFydCl7XG5cbiAgICAgICAgICAgICAvLyAgIGNvbnNvbGUubG9nKHRoaXMubG9jYXRpb24pXG4gICAgICAgICAgICAgICAgZ2wudmVydGV4QXR0cmliUG9pbnRlcih0aGlzLmxvY2F0aW9uLHRoaXMuc2l6ZSwgdHlwZSB8fCBnbC5GTE9BVCwgbm9ybWFsaXplZCB8fCBmYWxzZSwgc3RyaWRlIHx8IDAsIHN0YXJ0IHx8IDApOyBcblxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfTtcblxuICAgIHJldHVybiBhdHRyaWJ1dGVzOyAgXG59XG5cbm1vZHVsZS5leHBvcnRzID0gZXh0cmFjdEF0dHJpYnV0ZXM7XG5cbiIsInZhciBtYXBUeXBlID0gcmVxdWlyZSgnLi9tYXBUeXBlJyk7XG52YXIgZGVmYXVsdFZhbHVlID0gcmVxdWlyZSgnLi9kZWZhdWx0VmFsdWUnKTtcblxuXG52YXIgZXh0cmFjdFVuaWZvcm1zID0gZnVuY3Rpb24oZ2wsIHByb2dyYW0pXG57XG5cdHZhciB1bmlmb3JtcyA9IHt9O1xuXHRcbiAgICB2YXIgdG90YWxVbmlmb3JtcyA9IGdsLmdldFByb2dyYW1QYXJhbWV0ZXIocHJvZ3JhbSwgZ2wuQUNUSVZFX1VOSUZPUk1TKVxuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0b3RhbFVuaWZvcm1zOyBpKyspIFxuICAgIHtcbiAgICBcdHZhciB1bmlmb3JtRGF0YSA9IGdsLmdldEFjdGl2ZVVuaWZvcm0ocHJvZ3JhbSwgaSk7XG4gICAgXHR2YXIgbmFtZSA9IHVuaWZvcm1EYXRhLm5hbWUucmVwbGFjZSgvXFxbLio/XFxdLywgXCJcIik7XG4gICAgICAgIHZhciB0eXBlID0gbWFwVHlwZShnbCwgdW5pZm9ybURhdGEudHlwZSApO1xuXG4gICAgXHR1bmlmb3Jtc1tuYW1lXSA9IHtcbiAgICBcdFx0dHlwZTp0eXBlLFxuICAgIFx0XHRzaXplOnVuaWZvcm1EYXRhLnNpemUsXG4gICAgXHRcdGxvY2F0aW9uOmdsLmdldFVuaWZvcm1Mb2NhdGlvbihwcm9ncmFtLCBuYW1lKSxcbiAgICBcdFx0dmFsdWU6ZGVmYXVsdFZhbHVlKHR5cGUsIHVuaWZvcm1EYXRhLnNpemUpXG4gICAgXHR9XG4gICAgfTtcblx0XG5cdHJldHVybiB1bmlmb3JtcztcdFxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGV4dHJhY3RVbmlmb3JtcztcblxuIiwiXG52YXIgZ2VuZXJhdGVVbmlmb3JtQWNjZXNzT2JqZWN0ID0gZnVuY3Rpb24oZ2wsIHVuaWZvcm1EYXRhKVxue1xuICAgIC8vIHRoaXMgaXMgdGhlIG9iamVjdCB3ZSB3aWxsIGJlIHNlbmRpbmcgYmFjay5cbiAgICAvLyBhbiBvYmplY3QgaGllcmFjaHkgd2lsbCBiZSBjcmVhdGVkIGZvciBzdHJ1Y3RzXG4gICAgdmFyIHVuaWZvcm1zID0ge2RhdGE6e319O1xuXG4gICAgdW5pZm9ybXMuZ2wgPSBnbDtcbiAgICBcbiAgICB2YXIgdW5pZm9ybUtleXM9IE9iamVjdC5rZXlzKHVuaWZvcm1EYXRhKTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdW5pZm9ybUtleXMubGVuZ3RoOyBpKyspIFxuICAgIHtcbiAgICAgICAgdmFyIGZ1bGxOYW1lID0gdW5pZm9ybUtleXNbaV1cblxuICAgICAgICB2YXIgbmFtZVRva2VucyA9IGZ1bGxOYW1lLnNwbGl0KCcuJyk7XG4gICAgICAgIHZhciBuYW1lID0gbmFtZVRva2Vuc1tuYW1lVG9rZW5zLmxlbmd0aCAtIDFdO1xuXG4gICAgICAgIHZhciB1bmlmb3JtR3JvdXAgPSBnZXRVbmlmb3JtR3JvdXAobmFtZVRva2VucywgdW5pZm9ybXMpO1xuXG4gICAgICAgIHZhciB1bmlmb3JtID0gIHVuaWZvcm1EYXRhW2Z1bGxOYW1lXTtcbiAgICAgICAgdW5pZm9ybUdyb3VwLmRhdGFbbmFtZV0gPSB1bmlmb3JtO1xuXG4gICAgICAgIHVuaWZvcm1Hcm91cC5nbCA9IGdsO1xuXG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh1bmlmb3JtR3JvdXAsIG5hbWUsIHtcbiAgICAgICAgICAgIGdldDogZ2VuZXJhdGVHZXR0ZXIobmFtZSksXG4gICAgICAgICAgICBzZXQ6IGdlbmVyYXRlU2V0dGVyKG5hbWUsIHVuaWZvcm0pXG4gICAgICAgIH0pXG4gICAgfTtcblxuICAgIHJldHVybiB1bmlmb3Jtcztcbn1cblxudmFyIGdlbmVyYXRlR2V0dGVyID0gZnVuY3Rpb24obmFtZSlcbntcblx0dmFyIHRlbXBsYXRlID0gZ2V0dGVyVGVtcGxhdGUucmVwbGFjZSgnJSUnLCBuYW1lKTtcblx0cmV0dXJuIG5ldyBGdW5jdGlvbih0ZW1wbGF0ZSk7XG59XG5cbnZhciBnZW5lcmF0ZVNldHRlciA9IGZ1bmN0aW9uKG5hbWUsIHVuaWZvcm0pXG57XG4gICAgdmFyIHRlbXBsYXRlID0gc2V0dGVyVGVtcGxhdGUucmVwbGFjZSgvJSUvZywgbmFtZSk7XG4gICAgdmFyIHNldFRlbXBsYXRlXG4gICAgXG4gICAgaWYodW5pZm9ybS5zaXplID09PSAxKVxuICAgIHtcbiAgICAgICAgc2V0VGVtcGxhdGUgPSBHTFNMX1RPX1NJTkdMRV9TRVRURVJTW3VuaWZvcm0udHlwZV07XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHNldFRlbXBsYXRlID0gR0xTTF9UT19BUlJBWV9TRVRURVJTW3VuaWZvcm0udHlwZV07XG4gICAgfVxuXG4gICAgaWYoc2V0VGVtcGxhdGUpXG4gICAge1xuICAgICAgICB0ZW1wbGF0ZSArPSBcIlxcbnRoaXMuZ2wuXCIgKyBzZXRUZW1wbGF0ZSArIFwiO1wiO1xuICAgIH1cblxuICBcdHJldHVybiBuZXcgRnVuY3Rpb24oJ3ZhbHVlJywgdGVtcGxhdGUpO1xufVxuXG52YXIgZ2V0VW5pZm9ybUdyb3VwID0gZnVuY3Rpb24obmFtZVRva2VucywgdW5pZm9ybSlcbntcbiAgICB2YXIgY3VyID0gdW5pZm9ybTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbmFtZVRva2Vucy5sZW5ndGggLSAxOyBpKyspIFxuICAgIHtcbiAgICAgICAgdmFyIG8gPSBjdXJbbmFtZVRva2Vuc1tpXV0gfHwge2RhdGE6e319O1xuICAgICAgICBjdXJbbmFtZVRva2Vuc1tpXV0gPSBvO1xuICAgICAgICBjdXIgPSBvO1xuICAgIH07XG5cbiAgICByZXR1cm4gY3VyXG59XG5cbnZhciBnZXR0ZXJUZW1wbGF0ZSA9IFtcbiAgICAncmV0dXJuIHRoaXMuZGF0YS4lJS52YWx1ZTsnLFxuXS5qb2luKCdcXG4nKTtcblxudmFyIHNldHRlclRlbXBsYXRlID0gW1xuICAgICd0aGlzLmRhdGEuJSUudmFsdWUgPSB2YWx1ZTsnLFxuICAgICd2YXIgbG9jYXRpb24gPSB0aGlzLmRhdGEuJSUubG9jYXRpb247J1xuXS5qb2luKCdcXG4nKTtcblxuXG52YXIgR0xTTF9UT19TSU5HTEVfU0VUVEVSUyA9IHtcblxuICAgICdmbG9hdCc6ICAgICd1bmlmb3JtMWYobG9jYXRpb24sIHZhbHVlKScsXG5cbiAgICAndmVjMic6ICAgICAndW5pZm9ybTJmKGxvY2F0aW9uLCB2YWx1ZVswXSwgdmFsdWVbMV0pJyxcbiAgICAndmVjMyc6ICAgICAndW5pZm9ybTNmKGxvY2F0aW9uLCB2YWx1ZVswXSwgdmFsdWVbMV0sIHZhbHVlWzJdKScsXG4gICAgJ3ZlYzQnOiAgICAgJ3VuaWZvcm00Zihsb2NhdGlvbiwgdmFsdWVbMF0sIHZhbHVlWzFdLCB2YWx1ZVsyXSwgdmFsdWVbM10pJyxcbiAgICBcdFxuICAgICdpbnQnOiAgICAgICd1bmlmb3JtMWkobG9jYXRpb24sIHZhbHVlKScsXG4gICAgJ2l2ZWMyJzogICAgJ3VuaWZvcm0yaShsb2NhdGlvbiwgdmFsdWVbMF0sIHZhbHVlWzFdKScsXG4gICAgJ2l2ZWMzJzogICAgJ3VuaWZvcm0zaShsb2NhdGlvbiwgdmFsdWVbMF0sIHZhbHVlWzFdLCB2YWx1ZVsyXSknLFxuICAgICdpdmVjNCc6ICAgICd1bmlmb3JtNGkobG9jYXRpb24sIHZhbHVlWzBdLCB2YWx1ZVsxXSwgdmFsdWVbMl0sIHZhbHVlWzNdKScsXG5cbiAgICAnYm9vbCc6ICAgICAndW5pZm9ybTFpKGxvY2F0aW9uLCB2YWx1ZSknLFxuICAgICdidmVjMic6ICAgICd1bmlmb3JtMmkobG9jYXRpb24sIHZhbHVlWzBdLCB2YWx1ZVsxXSknLFxuICAgICdidmVjMyc6ICAgICd1bmlmb3JtM2kobG9jYXRpb24sIHZhbHVlWzBdLCB2YWx1ZVsxXSwgdmFsdWVbMl0pJyxcbiAgICAnYnZlYzQnOiAgICAndW5pZm9ybTRpKGxvY2F0aW9uLCB2YWx1ZVswXSwgdmFsdWVbMV0sIHZhbHVlWzJdLCB2YWx1ZVszXSknLFxuXG4gICAgJ21hdDInOiAgICAgJ3VuaWZvcm1NYXRyaXgyZnYobG9jYXRpb24sIGZhbHNlLCB2YWx1ZSknLFxuICAgICdtYXQzJzogICAgICd1bmlmb3JtTWF0cml4M2Z2KGxvY2F0aW9uLCBmYWxzZSwgdmFsdWUpJyxcbiAgICAnbWF0NCc6ICAgICAndW5pZm9ybU1hdHJpeDRmdihsb2NhdGlvbiwgZmFsc2UsIHZhbHVlKScsXG5cbiAgICAnc2FtcGxlcjJEJzondW5pZm9ybTFpKGxvY2F0aW9uLCB2YWx1ZSknXG59XG5cbnZhciBHTFNMX1RPX0FSUkFZX1NFVFRFUlMgPSB7XG5cbiAgICAnZmxvYXQnOiAgICAndW5pZm9ybTFmdihsb2NhdGlvbiwgdmFsdWUpJyxcblxuICAgICd2ZWMyJzogICAgICd1bmlmb3JtMmZ2KGxvY2F0aW9uLCB2YWx1ZSknLFxuICAgICd2ZWMzJzogICAgICd1bmlmb3JtM2Z2KGxvY2F0aW9uLCB2YWx1ZSknLFxuICAgICd2ZWM0JzogICAgICd1bmlmb3JtNGZ2KGxvY2F0aW9uLCB2YWx1ZSknLFxuICAgIFx0XG4gICAgJ2ludCc6ICAgICAgJ3VuaWZvcm0xaXYobG9jYXRpb24sIHZhbHVlKScsXG4gICAgJ2l2ZWMyJzogICAgJ3VuaWZvcm0yaXYobG9jYXRpb24sIHZhbHVlKScsXG4gICAgJ2l2ZWMzJzogICAgJ3VuaWZvcm0zaXYobG9jYXRpb24sIHZhbHVlKScsXG4gICAgJ2l2ZWM0JzogICAgJ3VuaWZvcm00aXYobG9jYXRpb24sIHZhbHVlKScsXG5cbiAgICAnYm9vbCc6ICAgICAndW5pZm9ybTFpdihsb2NhdGlvbiwgdmFsdWUpJyxcbiAgICAnYnZlYzInOiAgICAndW5pZm9ybTJpdihsb2NhdGlvbiwgdmFsdWUpJyxcbiAgICAnYnZlYzMnOiAgICAndW5pZm9ybTNpdihsb2NhdGlvbiwgdmFsdWUpJyxcbiAgICAnYnZlYzQnOiAgICAndW5pZm9ybTRpdihsb2NhdGlvbiwgdmFsdWUpJyxcbiAgIFxuICAgICdzYW1wbGVyMkQnOid1bmlmb3JtMWl2KGxvY2F0aW9uLCB2YWx1ZSknXG59XG5cbm1vZHVsZS5leHBvcnRzID0gZ2VuZXJhdGVVbmlmb3JtQWNjZXNzT2JqZWN0O1xuXG4iLCJcblxudmFyIG1hcFNpemUgPSBmdW5jdGlvbih0eXBlKSBcbnsgXG4gICAgcmV0dXJuIEdMU0xfVE9fU0laRVt0eXBlXTtcbn1cblxuXG52YXIgR0xTTF9UT19TSVpFID0ge1xuICAgICdmbG9hdCc6ICAgIDEsXG4gICAgJ3ZlYzInOiAgICAgMixcbiAgICAndmVjMyc6ICAgICAzLFxuICAgICd2ZWM0JzogICAgIDQsXG5cbiAgICAnaW50JzogICAgICAxLFxuICAgICdpdmVjMic6ICAgIDIsXG4gICAgJ2l2ZWMzJzogICAgMyxcbiAgICAnaXZlYzQnOiAgICA0LFxuXG4gICAgJ2Jvb2wnOiAgICAgMSxcbiAgICAnYnZlYzInOiAgICAyLFxuICAgICdidmVjMyc6ICAgIDMsXG4gICAgJ2J2ZWM0JzogICAgNCxcblxuICAgICdtYXQyJzogICAgIDQsXG4gICAgJ21hdDMnOiAgICAgOSxcbiAgICAnbWF0NCc6ICAgICAxNixcblxuICAgICdzYW1wbGVyMkQnOiAgMVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IG1hcFNpemU7XG4iLCJcblxudmFyIG1hcFNpemUgPSBmdW5jdGlvbihnbCwgdHlwZSkgXG57XG4gICAgaWYoIUdMX1RBQkxFKSBcbiAgICB7XG4gICAgICAgIHZhciB0eXBlTmFtZXMgPSBPYmplY3Qua2V5cyhHTF9UT19HTFNMX1RZUEVTKTtcblxuICAgICAgICBHTF9UQUJMRSA9IHt9O1xuXG4gICAgICAgIGZvcih2YXIgaSA9IDA7IGkgPCB0eXBlTmFtZXMubGVuZ3RoOyArK2kpIFxuICAgICAgICB7XG4gICAgICAgICAgICB2YXIgdG4gPSB0eXBlTmFtZXNbaV07XG4gICAgICAgICAgICBHTF9UQUJMRVsgZ2xbdG5dIF0gPSBHTF9UT19HTFNMX1RZUEVTW3RuXTtcbiAgICAgICAgfVxuICAgIH1cblxuICByZXR1cm4gR0xfVEFCTEVbdHlwZV07XG59XG5cbnZhciBHTF9UQUJMRSA9IG51bGw7XG5cbnZhciBHTF9UT19HTFNMX1RZUEVTID0ge1xuICAnRkxPQVQnOiAgICAgICAnZmxvYXQnLFxuICAnRkxPQVRfVkVDMic6ICAndmVjMicsXG4gICdGTE9BVF9WRUMzJzogICd2ZWMzJyxcbiAgJ0ZMT0FUX1ZFQzQnOiAgJ3ZlYzQnLFxuXG4gICdJTlQnOiAgICAgICAgICdpbnQnLFxuICAnSU5UX1ZFQzInOiAgICAnaXZlYzInLFxuICAnSU5UX1ZFQzMnOiAgICAnaXZlYzMnLFxuICAnSU5UX1ZFQzQnOiAgICAnaXZlYzQnLFxuICBcbiAgJ0JPT0wnOiAgICAgICAgJ2Jvb2wnLFxuICAnQk9PTF9WRUMyJzogICAnYnZlYzInLFxuICAnQk9PTF9WRUMzJzogICAnYnZlYzMnLFxuICAnQk9PTF9WRUM0JzogICAnYnZlYzQnLFxuICBcbiAgJ0ZMT0FUX01BVDInOiAgJ21hdDInLFxuICAnRkxPQVRfTUFUMyc6ICAnbWF0MycsXG4gICdGTE9BVF9NQVQ0JzogICdtYXQ0JyxcbiAgXG4gICdTQU1QTEVSXzJEJzogICdzYW1wbGVyMkQnICBcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBtYXBTaXplO1xuIiwiLyohXG4gKiBhc3luY1xuICogaHR0cHM6Ly9naXRodWIuY29tL2Nhb2xhbi9hc3luY1xuICpcbiAqIENvcHlyaWdodCAyMDEwLTIwMTQgQ2FvbGFuIE1jTWFob25cbiAqIFJlbGVhc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZVxuICovXG4oZnVuY3Rpb24gKCkge1xuXG4gICAgdmFyIGFzeW5jID0ge307XG4gICAgZnVuY3Rpb24gbm9vcCgpIHt9XG4gICAgZnVuY3Rpb24gaWRlbnRpdHkodikge1xuICAgICAgICByZXR1cm4gdjtcbiAgICB9XG4gICAgZnVuY3Rpb24gdG9Cb29sKHYpIHtcbiAgICAgICAgcmV0dXJuICEhdjtcbiAgICB9XG4gICAgZnVuY3Rpb24gbm90SWQodikge1xuICAgICAgICByZXR1cm4gIXY7XG4gICAgfVxuXG4gICAgLy8gZ2xvYmFsIG9uIHRoZSBzZXJ2ZXIsIHdpbmRvdyBpbiB0aGUgYnJvd3NlclxuICAgIHZhciBwcmV2aW91c19hc3luYztcblxuICAgIC8vIEVzdGFibGlzaCB0aGUgcm9vdCBvYmplY3QsIGB3aW5kb3dgIChgc2VsZmApIGluIHRoZSBicm93c2VyLCBgZ2xvYmFsYFxuICAgIC8vIG9uIHRoZSBzZXJ2ZXIsIG9yIGB0aGlzYCBpbiBzb21lIHZpcnR1YWwgbWFjaGluZXMuIFdlIHVzZSBgc2VsZmBcbiAgICAvLyBpbnN0ZWFkIG9mIGB3aW5kb3dgIGZvciBgV2ViV29ya2VyYCBzdXBwb3J0LlxuICAgIHZhciByb290ID0gdHlwZW9mIHNlbGYgPT09ICdvYmplY3QnICYmIHNlbGYuc2VsZiA9PT0gc2VsZiAmJiBzZWxmIHx8XG4gICAgICAgICAgICB0eXBlb2YgZ2xvYmFsID09PSAnb2JqZWN0JyAmJiBnbG9iYWwuZ2xvYmFsID09PSBnbG9iYWwgJiYgZ2xvYmFsIHx8XG4gICAgICAgICAgICB0aGlzO1xuXG4gICAgaWYgKHJvb3QgIT0gbnVsbCkge1xuICAgICAgICBwcmV2aW91c19hc3luYyA9IHJvb3QuYXN5bmM7XG4gICAgfVxuXG4gICAgYXN5bmMubm9Db25mbGljdCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcm9vdC5hc3luYyA9IHByZXZpb3VzX2FzeW5jO1xuICAgICAgICByZXR1cm4gYXN5bmM7XG4gICAgfTtcblxuICAgIGZ1bmN0aW9uIG9ubHlfb25jZShmbikge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICBpZiAoZm4gPT09IG51bGwpIHRocm93IG5ldyBFcnJvcihcIkNhbGxiYWNrIHdhcyBhbHJlYWR5IGNhbGxlZC5cIik7XG4gICAgICAgICAgICBmbi5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgICAgICAgICAgZm4gPSBudWxsO1xuICAgICAgICB9O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIF9vbmNlKGZuKSB7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIGlmIChmbiA9PT0gbnVsbCkgcmV0dXJuO1xuICAgICAgICAgICAgZm4uYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICAgICAgICAgIGZuID0gbnVsbDtcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICAvLy8vIGNyb3NzLWJyb3dzZXIgY29tcGF0aWJsaXR5IGZ1bmN0aW9ucyAvLy8vXG5cbiAgICB2YXIgX3RvU3RyaW5nID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZztcblxuICAgIHZhciBfaXNBcnJheSA9IEFycmF5LmlzQXJyYXkgfHwgZnVuY3Rpb24gKG9iaikge1xuICAgICAgICByZXR1cm4gX3RvU3RyaW5nLmNhbGwob2JqKSA9PT0gJ1tvYmplY3QgQXJyYXldJztcbiAgICB9O1xuXG4gICAgLy8gUG9ydGVkIGZyb20gdW5kZXJzY29yZS5qcyBpc09iamVjdFxuICAgIHZhciBfaXNPYmplY3QgPSBmdW5jdGlvbihvYmopIHtcbiAgICAgICAgdmFyIHR5cGUgPSB0eXBlb2Ygb2JqO1xuICAgICAgICByZXR1cm4gdHlwZSA9PT0gJ2Z1bmN0aW9uJyB8fCB0eXBlID09PSAnb2JqZWN0JyAmJiAhIW9iajtcbiAgICB9O1xuXG4gICAgZnVuY3Rpb24gX2lzQXJyYXlMaWtlKGFycikge1xuICAgICAgICByZXR1cm4gX2lzQXJyYXkoYXJyKSB8fCAoXG4gICAgICAgICAgICAvLyBoYXMgYSBwb3NpdGl2ZSBpbnRlZ2VyIGxlbmd0aCBwcm9wZXJ0eVxuICAgICAgICAgICAgdHlwZW9mIGFyci5sZW5ndGggPT09IFwibnVtYmVyXCIgJiZcbiAgICAgICAgICAgIGFyci5sZW5ndGggPj0gMCAmJlxuICAgICAgICAgICAgYXJyLmxlbmd0aCAlIDEgPT09IDBcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBfYXJyYXlFYWNoKGFyciwgaXRlcmF0b3IpIHtcbiAgICAgICAgdmFyIGluZGV4ID0gLTEsXG4gICAgICAgICAgICBsZW5ndGggPSBhcnIubGVuZ3RoO1xuXG4gICAgICAgIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgICAgICAgICBpdGVyYXRvcihhcnJbaW5kZXhdLCBpbmRleCwgYXJyKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIF9tYXAoYXJyLCBpdGVyYXRvcikge1xuICAgICAgICB2YXIgaW5kZXggPSAtMSxcbiAgICAgICAgICAgIGxlbmd0aCA9IGFyci5sZW5ndGgsXG4gICAgICAgICAgICByZXN1bHQgPSBBcnJheShsZW5ndGgpO1xuXG4gICAgICAgIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgICAgICAgICByZXN1bHRbaW5kZXhdID0gaXRlcmF0b3IoYXJyW2luZGV4XSwgaW5kZXgsIGFycik7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBfcmFuZ2UoY291bnQpIHtcbiAgICAgICAgcmV0dXJuIF9tYXAoQXJyYXkoY291bnQpLCBmdW5jdGlvbiAodiwgaSkgeyByZXR1cm4gaTsgfSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gX3JlZHVjZShhcnIsIGl0ZXJhdG9yLCBtZW1vKSB7XG4gICAgICAgIF9hcnJheUVhY2goYXJyLCBmdW5jdGlvbiAoeCwgaSwgYSkge1xuICAgICAgICAgICAgbWVtbyA9IGl0ZXJhdG9yKG1lbW8sIHgsIGksIGEpO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIG1lbW87XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gX2ZvckVhY2hPZihvYmplY3QsIGl0ZXJhdG9yKSB7XG4gICAgICAgIF9hcnJheUVhY2goX2tleXMob2JqZWN0KSwgZnVuY3Rpb24gKGtleSkge1xuICAgICAgICAgICAgaXRlcmF0b3Iob2JqZWN0W2tleV0sIGtleSk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIF9pbmRleE9mKGFyciwgaXRlbSkge1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFyci5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgaWYgKGFycltpXSA9PT0gaXRlbSkgcmV0dXJuIGk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIC0xO1xuICAgIH1cblxuICAgIHZhciBfa2V5cyA9IE9iamVjdC5rZXlzIHx8IGZ1bmN0aW9uIChvYmopIHtcbiAgICAgICAgdmFyIGtleXMgPSBbXTtcbiAgICAgICAgZm9yICh2YXIgayBpbiBvYmopIHtcbiAgICAgICAgICAgIGlmIChvYmouaGFzT3duUHJvcGVydHkoaykpIHtcbiAgICAgICAgICAgICAgICBrZXlzLnB1c2goayk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGtleXM7XG4gICAgfTtcblxuICAgIGZ1bmN0aW9uIF9rZXlJdGVyYXRvcihjb2xsKSB7XG4gICAgICAgIHZhciBpID0gLTE7XG4gICAgICAgIHZhciBsZW47XG4gICAgICAgIHZhciBrZXlzO1xuICAgICAgICBpZiAoX2lzQXJyYXlMaWtlKGNvbGwpKSB7XG4gICAgICAgICAgICBsZW4gPSBjb2xsLmxlbmd0aDtcbiAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbiBuZXh0KCkge1xuICAgICAgICAgICAgICAgIGkrKztcbiAgICAgICAgICAgICAgICByZXR1cm4gaSA8IGxlbiA/IGkgOiBudWxsO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGtleXMgPSBfa2V5cyhjb2xsKTtcbiAgICAgICAgICAgIGxlbiA9IGtleXMubGVuZ3RoO1xuICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIG5leHQoKSB7XG4gICAgICAgICAgICAgICAgaSsrO1xuICAgICAgICAgICAgICAgIHJldHVybiBpIDwgbGVuID8ga2V5c1tpXSA6IG51bGw7XG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gU2ltaWxhciB0byBFUzYncyByZXN0IHBhcmFtIChodHRwOi8vYXJpeWEub2ZpbGFicy5jb20vMjAxMy8wMy9lczYtYW5kLXJlc3QtcGFyYW1ldGVyLmh0bWwpXG4gICAgLy8gVGhpcyBhY2N1bXVsYXRlcyB0aGUgYXJndW1lbnRzIHBhc3NlZCBpbnRvIGFuIGFycmF5LCBhZnRlciBhIGdpdmVuIGluZGV4LlxuICAgIC8vIEZyb20gdW5kZXJzY29yZS5qcyAoaHR0cHM6Ly9naXRodWIuY29tL2phc2hrZW5hcy91bmRlcnNjb3JlL3B1bGwvMjE0MCkuXG4gICAgZnVuY3Rpb24gX3Jlc3RQYXJhbShmdW5jLCBzdGFydEluZGV4KSB7XG4gICAgICAgIHN0YXJ0SW5kZXggPSBzdGFydEluZGV4ID09IG51bGwgPyBmdW5jLmxlbmd0aCAtIDEgOiArc3RhcnRJbmRleDtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgdmFyIGxlbmd0aCA9IE1hdGgubWF4KGFyZ3VtZW50cy5sZW5ndGggLSBzdGFydEluZGV4LCAwKTtcbiAgICAgICAgICAgIHZhciByZXN0ID0gQXJyYXkobGVuZ3RoKTtcbiAgICAgICAgICAgIGZvciAodmFyIGluZGV4ID0gMDsgaW5kZXggPCBsZW5ndGg7IGluZGV4KyspIHtcbiAgICAgICAgICAgICAgICByZXN0W2luZGV4XSA9IGFyZ3VtZW50c1tpbmRleCArIHN0YXJ0SW5kZXhdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgc3dpdGNoIChzdGFydEluZGV4KSB7XG4gICAgICAgICAgICAgICAgY2FzZSAwOiByZXR1cm4gZnVuYy5jYWxsKHRoaXMsIHJlc3QpO1xuICAgICAgICAgICAgICAgIGNhc2UgMTogcmV0dXJuIGZ1bmMuY2FsbCh0aGlzLCBhcmd1bWVudHNbMF0sIHJlc3QpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gQ3VycmVudGx5IHVudXNlZCBidXQgaGFuZGxlIGNhc2VzIG91dHNpZGUgb2YgdGhlIHN3aXRjaCBzdGF0ZW1lbnQ6XG4gICAgICAgICAgICAvLyB2YXIgYXJncyA9IEFycmF5KHN0YXJ0SW5kZXggKyAxKTtcbiAgICAgICAgICAgIC8vIGZvciAoaW5kZXggPSAwOyBpbmRleCA8IHN0YXJ0SW5kZXg7IGluZGV4KyspIHtcbiAgICAgICAgICAgIC8vICAgICBhcmdzW2luZGV4XSA9IGFyZ3VtZW50c1tpbmRleF07XG4gICAgICAgICAgICAvLyB9XG4gICAgICAgICAgICAvLyBhcmdzW3N0YXJ0SW5kZXhdID0gcmVzdDtcbiAgICAgICAgICAgIC8vIHJldHVybiBmdW5jLmFwcGx5KHRoaXMsIGFyZ3MpO1xuICAgICAgICB9O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIF93aXRob3V0SW5kZXgoaXRlcmF0b3IpIHtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICh2YWx1ZSwgaW5kZXgsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICByZXR1cm4gaXRlcmF0b3IodmFsdWUsIGNhbGxiYWNrKTtcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICAvLy8vIGV4cG9ydGVkIGFzeW5jIG1vZHVsZSBmdW5jdGlvbnMgLy8vL1xuXG4gICAgLy8vLyBuZXh0VGljayBpbXBsZW1lbnRhdGlvbiB3aXRoIGJyb3dzZXItY29tcGF0aWJsZSBmYWxsYmFjayAvLy8vXG5cbiAgICAvLyBjYXB0dXJlIHRoZSBnbG9iYWwgcmVmZXJlbmNlIHRvIGd1YXJkIGFnYWluc3QgZmFrZVRpbWVyIG1vY2tzXG4gICAgdmFyIF9zZXRJbW1lZGlhdGUgPSB0eXBlb2Ygc2V0SW1tZWRpYXRlID09PSAnZnVuY3Rpb24nICYmIHNldEltbWVkaWF0ZTtcblxuICAgIHZhciBfZGVsYXkgPSBfc2V0SW1tZWRpYXRlID8gZnVuY3Rpb24oZm4pIHtcbiAgICAgICAgLy8gbm90IGEgZGlyZWN0IGFsaWFzIGZvciBJRTEwIGNvbXBhdGliaWxpdHlcbiAgICAgICAgX3NldEltbWVkaWF0ZShmbik7XG4gICAgfSA6IGZ1bmN0aW9uKGZuKSB7XG4gICAgICAgIHNldFRpbWVvdXQoZm4sIDApO1xuICAgIH07XG5cbiAgICBpZiAodHlwZW9mIHByb2Nlc3MgPT09ICdvYmplY3QnICYmIHR5cGVvZiBwcm9jZXNzLm5leHRUaWNrID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIGFzeW5jLm5leHRUaWNrID0gcHJvY2Vzcy5uZXh0VGljaztcbiAgICB9IGVsc2Uge1xuICAgICAgICBhc3luYy5uZXh0VGljayA9IF9kZWxheTtcbiAgICB9XG4gICAgYXN5bmMuc2V0SW1tZWRpYXRlID0gX3NldEltbWVkaWF0ZSA/IF9kZWxheSA6IGFzeW5jLm5leHRUaWNrO1xuXG5cbiAgICBhc3luYy5mb3JFYWNoID1cbiAgICBhc3luYy5lYWNoID0gZnVuY3Rpb24gKGFyciwgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgIHJldHVybiBhc3luYy5lYWNoT2YoYXJyLCBfd2l0aG91dEluZGV4KGl0ZXJhdG9yKSwgY2FsbGJhY2spO1xuICAgIH07XG5cbiAgICBhc3luYy5mb3JFYWNoU2VyaWVzID1cbiAgICBhc3luYy5lYWNoU2VyaWVzID0gZnVuY3Rpb24gKGFyciwgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgIHJldHVybiBhc3luYy5lYWNoT2ZTZXJpZXMoYXJyLCBfd2l0aG91dEluZGV4KGl0ZXJhdG9yKSwgY2FsbGJhY2spO1xuICAgIH07XG5cblxuICAgIGFzeW5jLmZvckVhY2hMaW1pdCA9XG4gICAgYXN5bmMuZWFjaExpbWl0ID0gZnVuY3Rpb24gKGFyciwgbGltaXQsIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICByZXR1cm4gX2VhY2hPZkxpbWl0KGxpbWl0KShhcnIsIF93aXRob3V0SW5kZXgoaXRlcmF0b3IpLCBjYWxsYmFjayk7XG4gICAgfTtcblxuICAgIGFzeW5jLmZvckVhY2hPZiA9XG4gICAgYXN5bmMuZWFjaE9mID0gZnVuY3Rpb24gKG9iamVjdCwgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgIGNhbGxiYWNrID0gX29uY2UoY2FsbGJhY2sgfHwgbm9vcCk7XG4gICAgICAgIG9iamVjdCA9IG9iamVjdCB8fCBbXTtcblxuICAgICAgICB2YXIgaXRlciA9IF9rZXlJdGVyYXRvcihvYmplY3QpO1xuICAgICAgICB2YXIga2V5LCBjb21wbGV0ZWQgPSAwO1xuXG4gICAgICAgIHdoaWxlICgoa2V5ID0gaXRlcigpKSAhPSBudWxsKSB7XG4gICAgICAgICAgICBjb21wbGV0ZWQgKz0gMTtcbiAgICAgICAgICAgIGl0ZXJhdG9yKG9iamVjdFtrZXldLCBrZXksIG9ubHlfb25jZShkb25lKSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoY29tcGxldGVkID09PSAwKSBjYWxsYmFjayhudWxsKTtcblxuICAgICAgICBmdW5jdGlvbiBkb25lKGVycikge1xuICAgICAgICAgICAgY29tcGxldGVkLS07XG4gICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIENoZWNrIGtleSBpcyBudWxsIGluIGNhc2UgaXRlcmF0b3IgaXNuJ3QgZXhoYXVzdGVkXG4gICAgICAgICAgICAvLyBhbmQgZG9uZSByZXNvbHZlZCBzeW5jaHJvbm91c2x5LlxuICAgICAgICAgICAgZWxzZSBpZiAoa2V5ID09PSBudWxsICYmIGNvbXBsZXRlZCA8PSAwKSB7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2sobnVsbCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgYXN5bmMuZm9yRWFjaE9mU2VyaWVzID1cbiAgICBhc3luYy5lYWNoT2ZTZXJpZXMgPSBmdW5jdGlvbiAob2JqLCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgY2FsbGJhY2sgPSBfb25jZShjYWxsYmFjayB8fCBub29wKTtcbiAgICAgICAgb2JqID0gb2JqIHx8IFtdO1xuICAgICAgICB2YXIgbmV4dEtleSA9IF9rZXlJdGVyYXRvcihvYmopO1xuICAgICAgICB2YXIga2V5ID0gbmV4dEtleSgpO1xuICAgICAgICBmdW5jdGlvbiBpdGVyYXRlKCkge1xuICAgICAgICAgICAgdmFyIHN5bmMgPSB0cnVlO1xuICAgICAgICAgICAgaWYgKGtleSA9PT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBjYWxsYmFjayhudWxsKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGl0ZXJhdG9yKG9ialtrZXldLCBrZXksIG9ubHlfb25jZShmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAga2V5ID0gbmV4dEtleSgpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoa2V5ID09PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gY2FsbGJhY2sobnVsbCk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3luYykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFzeW5jLnNldEltbWVkaWF0ZShpdGVyYXRlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlcmF0ZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSkpO1xuICAgICAgICAgICAgc3luYyA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGl0ZXJhdGUoKTtcbiAgICB9O1xuXG5cblxuICAgIGFzeW5jLmZvckVhY2hPZkxpbWl0ID1cbiAgICBhc3luYy5lYWNoT2ZMaW1pdCA9IGZ1bmN0aW9uIChvYmosIGxpbWl0LCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgX2VhY2hPZkxpbWl0KGxpbWl0KShvYmosIGl0ZXJhdG9yLCBjYWxsYmFjayk7XG4gICAgfTtcblxuICAgIGZ1bmN0aW9uIF9lYWNoT2ZMaW1pdChsaW1pdCkge1xuXG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAob2JqLCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIGNhbGxiYWNrID0gX29uY2UoY2FsbGJhY2sgfHwgbm9vcCk7XG4gICAgICAgICAgICBvYmogPSBvYmogfHwgW107XG4gICAgICAgICAgICB2YXIgbmV4dEtleSA9IF9rZXlJdGVyYXRvcihvYmopO1xuICAgICAgICAgICAgaWYgKGxpbWl0IDw9IDApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gY2FsbGJhY2sobnVsbCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB2YXIgZG9uZSA9IGZhbHNlO1xuICAgICAgICAgICAgdmFyIHJ1bm5pbmcgPSAwO1xuICAgICAgICAgICAgdmFyIGVycm9yZWQgPSBmYWxzZTtcblxuICAgICAgICAgICAgKGZ1bmN0aW9uIHJlcGxlbmlzaCAoKSB7XG4gICAgICAgICAgICAgICAgaWYgKGRvbmUgJiYgcnVubmluZyA8PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBjYWxsYmFjayhudWxsKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB3aGlsZSAocnVubmluZyA8IGxpbWl0ICYmICFlcnJvcmVkKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBrZXkgPSBuZXh0S2V5KCk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChrZXkgPT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRvbmUgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJ1bm5pbmcgPD0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKG51bGwpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJ1bm5pbmcgKz0gMTtcbiAgICAgICAgICAgICAgICAgICAgaXRlcmF0b3Iob2JqW2tleV0sIGtleSwgb25seV9vbmNlKGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJ1bm5pbmcgLT0gMTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVwbGVuaXNoKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KSgpO1xuICAgICAgICB9O1xuICAgIH1cblxuXG4gICAgZnVuY3Rpb24gZG9QYXJhbGxlbChmbikge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKG9iaiwgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICByZXR1cm4gZm4oYXN5bmMuZWFjaE9mLCBvYmosIGl0ZXJhdG9yLCBjYWxsYmFjayk7XG4gICAgICAgIH07XG4gICAgfVxuICAgIGZ1bmN0aW9uIGRvUGFyYWxsZWxMaW1pdChmbikge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKG9iaiwgbGltaXQsIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICAgICAgcmV0dXJuIGZuKF9lYWNoT2ZMaW1pdChsaW1pdCksIG9iaiwgaXRlcmF0b3IsIGNhbGxiYWNrKTtcbiAgICAgICAgfTtcbiAgICB9XG4gICAgZnVuY3Rpb24gZG9TZXJpZXMoZm4pIHtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChvYmosIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICAgICAgcmV0dXJuIGZuKGFzeW5jLmVhY2hPZlNlcmllcywgb2JqLCBpdGVyYXRvciwgY2FsbGJhY2spO1xuICAgICAgICB9O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIF9hc3luY01hcChlYWNoZm4sIGFyciwgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgIGNhbGxiYWNrID0gX29uY2UoY2FsbGJhY2sgfHwgbm9vcCk7XG4gICAgICAgIGFyciA9IGFyciB8fCBbXTtcbiAgICAgICAgdmFyIHJlc3VsdHMgPSBfaXNBcnJheUxpa2UoYXJyKSA/IFtdIDoge307XG4gICAgICAgIGVhY2hmbihhcnIsIGZ1bmN0aW9uICh2YWx1ZSwgaW5kZXgsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICBpdGVyYXRvcih2YWx1ZSwgZnVuY3Rpb24gKGVyciwgdikge1xuICAgICAgICAgICAgICAgIHJlc3VsdHNbaW5kZXhdID0gdjtcbiAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgIGNhbGxiYWNrKGVyciwgcmVzdWx0cyk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGFzeW5jLm1hcCA9IGRvUGFyYWxsZWwoX2FzeW5jTWFwKTtcbiAgICBhc3luYy5tYXBTZXJpZXMgPSBkb1NlcmllcyhfYXN5bmNNYXApO1xuICAgIGFzeW5jLm1hcExpbWl0ID0gZG9QYXJhbGxlbExpbWl0KF9hc3luY01hcCk7XG5cbiAgICAvLyByZWR1Y2Ugb25seSBoYXMgYSBzZXJpZXMgdmVyc2lvbiwgYXMgZG9pbmcgcmVkdWNlIGluIHBhcmFsbGVsIHdvbid0XG4gICAgLy8gd29yayBpbiBtYW55IHNpdHVhdGlvbnMuXG4gICAgYXN5bmMuaW5qZWN0ID1cbiAgICBhc3luYy5mb2xkbCA9XG4gICAgYXN5bmMucmVkdWNlID0gZnVuY3Rpb24gKGFyciwgbWVtbywgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgIGFzeW5jLmVhY2hPZlNlcmllcyhhcnIsIGZ1bmN0aW9uICh4LCBpLCBjYWxsYmFjaykge1xuICAgICAgICAgICAgaXRlcmF0b3IobWVtbywgeCwgZnVuY3Rpb24gKGVyciwgdikge1xuICAgICAgICAgICAgICAgIG1lbW8gPSB2O1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSwgZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgY2FsbGJhY2soZXJyLCBtZW1vKTtcbiAgICAgICAgfSk7XG4gICAgfTtcblxuICAgIGFzeW5jLmZvbGRyID1cbiAgICBhc3luYy5yZWR1Y2VSaWdodCA9IGZ1bmN0aW9uIChhcnIsIG1lbW8sIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICB2YXIgcmV2ZXJzZWQgPSBfbWFwKGFyciwgaWRlbnRpdHkpLnJldmVyc2UoKTtcbiAgICAgICAgYXN5bmMucmVkdWNlKHJldmVyc2VkLCBtZW1vLCBpdGVyYXRvciwgY2FsbGJhY2spO1xuICAgIH07XG5cbiAgICBhc3luYy50cmFuc2Zvcm0gPSBmdW5jdGlvbiAoYXJyLCBtZW1vLCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDMpIHtcbiAgICAgICAgICAgIGNhbGxiYWNrID0gaXRlcmF0b3I7XG4gICAgICAgICAgICBpdGVyYXRvciA9IG1lbW87XG4gICAgICAgICAgICBtZW1vID0gX2lzQXJyYXkoYXJyKSA/IFtdIDoge307XG4gICAgICAgIH1cblxuICAgICAgICBhc3luYy5lYWNoT2YoYXJyLCBmdW5jdGlvbih2LCBrLCBjYikge1xuICAgICAgICAgICAgaXRlcmF0b3IobWVtbywgdiwgaywgY2IpO1xuICAgICAgICB9LCBmdW5jdGlvbihlcnIpIHtcbiAgICAgICAgICAgIGNhbGxiYWNrKGVyciwgbWVtbyk7XG4gICAgICAgIH0pO1xuICAgIH07XG5cbiAgICBmdW5jdGlvbiBfZmlsdGVyKGVhY2hmbiwgYXJyLCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgdmFyIHJlc3VsdHMgPSBbXTtcbiAgICAgICAgZWFjaGZuKGFyciwgZnVuY3Rpb24gKHgsIGluZGV4LCBjYWxsYmFjaykge1xuICAgICAgICAgICAgaXRlcmF0b3IoeCwgZnVuY3Rpb24gKHYpIHtcbiAgICAgICAgICAgICAgICBpZiAodikge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHRzLnB1c2goe2luZGV4OiBpbmRleCwgdmFsdWU6IHh9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2FsbGJhY2soKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBjYWxsYmFjayhfbWFwKHJlc3VsdHMuc29ydChmdW5jdGlvbiAoYSwgYikge1xuICAgICAgICAgICAgICAgIHJldHVybiBhLmluZGV4IC0gYi5pbmRleDtcbiAgICAgICAgICAgIH0pLCBmdW5jdGlvbiAoeCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB4LnZhbHVlO1xuICAgICAgICAgICAgfSkpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBhc3luYy5zZWxlY3QgPVxuICAgIGFzeW5jLmZpbHRlciA9IGRvUGFyYWxsZWwoX2ZpbHRlcik7XG5cbiAgICBhc3luYy5zZWxlY3RMaW1pdCA9XG4gICAgYXN5bmMuZmlsdGVyTGltaXQgPSBkb1BhcmFsbGVsTGltaXQoX2ZpbHRlcik7XG5cbiAgICBhc3luYy5zZWxlY3RTZXJpZXMgPVxuICAgIGFzeW5jLmZpbHRlclNlcmllcyA9IGRvU2VyaWVzKF9maWx0ZXIpO1xuXG4gICAgZnVuY3Rpb24gX3JlamVjdChlYWNoZm4sIGFyciwgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgIF9maWx0ZXIoZWFjaGZuLCBhcnIsIGZ1bmN0aW9uKHZhbHVlLCBjYikge1xuICAgICAgICAgICAgaXRlcmF0b3IodmFsdWUsIGZ1bmN0aW9uKHYpIHtcbiAgICAgICAgICAgICAgICBjYighdik7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSwgY2FsbGJhY2spO1xuICAgIH1cbiAgICBhc3luYy5yZWplY3QgPSBkb1BhcmFsbGVsKF9yZWplY3QpO1xuICAgIGFzeW5jLnJlamVjdExpbWl0ID0gZG9QYXJhbGxlbExpbWl0KF9yZWplY3QpO1xuICAgIGFzeW5jLnJlamVjdFNlcmllcyA9IGRvU2VyaWVzKF9yZWplY3QpO1xuXG4gICAgZnVuY3Rpb24gX2NyZWF0ZVRlc3RlcihlYWNoZm4sIGNoZWNrLCBnZXRSZXN1bHQpIHtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKGFyciwgbGltaXQsIGl0ZXJhdG9yLCBjYikge1xuICAgICAgICAgICAgZnVuY3Rpb24gZG9uZSgpIHtcbiAgICAgICAgICAgICAgICBpZiAoY2IpIGNiKGdldFJlc3VsdChmYWxzZSwgdm9pZCAwKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmdW5jdGlvbiBpdGVyYXRlZSh4LCBfLCBjYWxsYmFjaykge1xuICAgICAgICAgICAgICAgIGlmICghY2IpIHJldHVybiBjYWxsYmFjaygpO1xuICAgICAgICAgICAgICAgIGl0ZXJhdG9yKHgsIGZ1bmN0aW9uICh2KSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChjYiAmJiBjaGVjayh2KSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY2IoZ2V0UmVzdWx0KHRydWUsIHgpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNiID0gaXRlcmF0b3IgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPiAzKSB7XG4gICAgICAgICAgICAgICAgZWFjaGZuKGFyciwgbGltaXQsIGl0ZXJhdGVlLCBkb25lKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgY2IgPSBpdGVyYXRvcjtcbiAgICAgICAgICAgICAgICBpdGVyYXRvciA9IGxpbWl0O1xuICAgICAgICAgICAgICAgIGVhY2hmbihhcnIsIGl0ZXJhdGVlLCBkb25lKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBhc3luYy5hbnkgPVxuICAgIGFzeW5jLnNvbWUgPSBfY3JlYXRlVGVzdGVyKGFzeW5jLmVhY2hPZiwgdG9Cb29sLCBpZGVudGl0eSk7XG5cbiAgICBhc3luYy5zb21lTGltaXQgPSBfY3JlYXRlVGVzdGVyKGFzeW5jLmVhY2hPZkxpbWl0LCB0b0Jvb2wsIGlkZW50aXR5KTtcblxuICAgIGFzeW5jLmFsbCA9XG4gICAgYXN5bmMuZXZlcnkgPSBfY3JlYXRlVGVzdGVyKGFzeW5jLmVhY2hPZiwgbm90SWQsIG5vdElkKTtcblxuICAgIGFzeW5jLmV2ZXJ5TGltaXQgPSBfY3JlYXRlVGVzdGVyKGFzeW5jLmVhY2hPZkxpbWl0LCBub3RJZCwgbm90SWQpO1xuXG4gICAgZnVuY3Rpb24gX2ZpbmRHZXRSZXN1bHQodiwgeCkge1xuICAgICAgICByZXR1cm4geDtcbiAgICB9XG4gICAgYXN5bmMuZGV0ZWN0ID0gX2NyZWF0ZVRlc3Rlcihhc3luYy5lYWNoT2YsIGlkZW50aXR5LCBfZmluZEdldFJlc3VsdCk7XG4gICAgYXN5bmMuZGV0ZWN0U2VyaWVzID0gX2NyZWF0ZVRlc3Rlcihhc3luYy5lYWNoT2ZTZXJpZXMsIGlkZW50aXR5LCBfZmluZEdldFJlc3VsdCk7XG4gICAgYXN5bmMuZGV0ZWN0TGltaXQgPSBfY3JlYXRlVGVzdGVyKGFzeW5jLmVhY2hPZkxpbWl0LCBpZGVudGl0eSwgX2ZpbmRHZXRSZXN1bHQpO1xuXG4gICAgYXN5bmMuc29ydEJ5ID0gZnVuY3Rpb24gKGFyciwgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgIGFzeW5jLm1hcChhcnIsIGZ1bmN0aW9uICh4LCBjYWxsYmFjaykge1xuICAgICAgICAgICAgaXRlcmF0b3IoeCwgZnVuY3Rpb24gKGVyciwgY3JpdGVyaWEpIHtcbiAgICAgICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhudWxsLCB7dmFsdWU6IHgsIGNyaXRlcmlhOiBjcml0ZXJpYX0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LCBmdW5jdGlvbiAoZXJyLCByZXN1bHRzKSB7XG4gICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBjYWxsYmFjayhudWxsLCBfbWFwKHJlc3VsdHMuc29ydChjb21wYXJhdG9yKSwgZnVuY3Rpb24gKHgpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHgudmFsdWU7XG4gICAgICAgICAgICAgICAgfSkpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGZ1bmN0aW9uIGNvbXBhcmF0b3IobGVmdCwgcmlnaHQpIHtcbiAgICAgICAgICAgIHZhciBhID0gbGVmdC5jcml0ZXJpYSwgYiA9IHJpZ2h0LmNyaXRlcmlhO1xuICAgICAgICAgICAgcmV0dXJuIGEgPCBiID8gLTEgOiBhID4gYiA/IDEgOiAwO1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIGFzeW5jLmF1dG8gPSBmdW5jdGlvbiAodGFza3MsIGNvbmN1cnJlbmN5LCBjYWxsYmFjaykge1xuICAgICAgICBpZiAoIWNhbGxiYWNrKSB7XG4gICAgICAgICAgICAvLyBjb25jdXJyZW5jeSBpcyBvcHRpb25hbCwgc2hpZnQgdGhlIGFyZ3MuXG4gICAgICAgICAgICBjYWxsYmFjayA9IGNvbmN1cnJlbmN5O1xuICAgICAgICAgICAgY29uY3VycmVuY3kgPSBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGNhbGxiYWNrID0gX29uY2UoY2FsbGJhY2sgfHwgbm9vcCk7XG4gICAgICAgIHZhciBrZXlzID0gX2tleXModGFza3MpO1xuICAgICAgICB2YXIgcmVtYWluaW5nVGFza3MgPSBrZXlzLmxlbmd0aDtcbiAgICAgICAgaWYgKCFyZW1haW5pbmdUYXNrcykge1xuICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKG51bGwpO1xuICAgICAgICB9XG4gICAgICAgIGlmICghY29uY3VycmVuY3kpIHtcbiAgICAgICAgICAgIGNvbmN1cnJlbmN5ID0gcmVtYWluaW5nVGFza3M7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgcmVzdWx0cyA9IHt9O1xuICAgICAgICB2YXIgcnVubmluZ1Rhc2tzID0gMDtcblxuICAgICAgICB2YXIgbGlzdGVuZXJzID0gW107XG4gICAgICAgIGZ1bmN0aW9uIGFkZExpc3RlbmVyKGZuKSB7XG4gICAgICAgICAgICBsaXN0ZW5lcnMudW5zaGlmdChmbik7XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gcmVtb3ZlTGlzdGVuZXIoZm4pIHtcbiAgICAgICAgICAgIHZhciBpZHggPSBfaW5kZXhPZihsaXN0ZW5lcnMsIGZuKTtcbiAgICAgICAgICAgIGlmIChpZHggPj0gMCkgbGlzdGVuZXJzLnNwbGljZShpZHgsIDEpO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIHRhc2tDb21wbGV0ZSgpIHtcbiAgICAgICAgICAgIHJlbWFpbmluZ1Rhc2tzLS07XG4gICAgICAgICAgICBfYXJyYXlFYWNoKGxpc3RlbmVycy5zbGljZSgwKSwgZnVuY3Rpb24gKGZuKSB7XG4gICAgICAgICAgICAgICAgZm4oKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgYWRkTGlzdGVuZXIoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgaWYgKCFyZW1haW5pbmdUYXNrcykge1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrKG51bGwsIHJlc3VsdHMpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICBfYXJyYXlFYWNoKGtleXMsIGZ1bmN0aW9uIChrKSB7XG4gICAgICAgICAgICB2YXIgdGFzayA9IF9pc0FycmF5KHRhc2tzW2tdKSA/IHRhc2tzW2tdOiBbdGFza3Nba11dO1xuICAgICAgICAgICAgdmFyIHRhc2tDYWxsYmFjayA9IF9yZXN0UGFyYW0oZnVuY3Rpb24oZXJyLCBhcmdzKSB7XG4gICAgICAgICAgICAgICAgcnVubmluZ1Rhc2tzLS07XG4gICAgICAgICAgICAgICAgaWYgKGFyZ3MubGVuZ3RoIDw9IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgYXJncyA9IGFyZ3NbMF07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHNhZmVSZXN1bHRzID0ge307XG4gICAgICAgICAgICAgICAgICAgIF9mb3JFYWNoT2YocmVzdWx0cywgZnVuY3Rpb24odmFsLCBya2V5KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzYWZlUmVzdWx0c1tya2V5XSA9IHZhbDtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIHNhZmVSZXN1bHRzW2tdID0gYXJncztcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soZXJyLCBzYWZlUmVzdWx0cyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHRzW2tdID0gYXJncztcbiAgICAgICAgICAgICAgICAgICAgYXN5bmMuc2V0SW1tZWRpYXRlKHRhc2tDb21wbGV0ZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB2YXIgcmVxdWlyZXMgPSB0YXNrLnNsaWNlKDAsIHRhc2subGVuZ3RoIC0gMSk7XG4gICAgICAgICAgICAvLyBwcmV2ZW50IGRlYWQtbG9ja3NcbiAgICAgICAgICAgIHZhciBsZW4gPSByZXF1aXJlcy5sZW5ndGg7XG4gICAgICAgICAgICB2YXIgZGVwO1xuICAgICAgICAgICAgd2hpbGUgKGxlbi0tKSB7XG4gICAgICAgICAgICAgICAgaWYgKCEoZGVwID0gdGFza3NbcmVxdWlyZXNbbGVuXV0pKSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignSGFzIGluZXhpc3RhbnQgZGVwZW5kZW5jeScpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoX2lzQXJyYXkoZGVwKSAmJiBfaW5kZXhPZihkZXAsIGspID49IDApIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdIYXMgY3ljbGljIGRlcGVuZGVuY2llcycpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZ1bmN0aW9uIHJlYWR5KCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBydW5uaW5nVGFza3MgPCBjb25jdXJyZW5jeSAmJiBfcmVkdWNlKHJlcXVpcmVzLCBmdW5jdGlvbiAoYSwgeCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gKGEgJiYgcmVzdWx0cy5oYXNPd25Qcm9wZXJ0eSh4KSk7XG4gICAgICAgICAgICAgICAgfSwgdHJ1ZSkgJiYgIXJlc3VsdHMuaGFzT3duUHJvcGVydHkoayk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAocmVhZHkoKSkge1xuICAgICAgICAgICAgICAgIHJ1bm5pbmdUYXNrcysrO1xuICAgICAgICAgICAgICAgIHRhc2tbdGFzay5sZW5ndGggLSAxXSh0YXNrQ2FsbGJhY2ssIHJlc3VsdHMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgYWRkTGlzdGVuZXIobGlzdGVuZXIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZnVuY3Rpb24gbGlzdGVuZXIoKSB7XG4gICAgICAgICAgICAgICAgaWYgKHJlYWR5KCkpIHtcbiAgICAgICAgICAgICAgICAgICAgcnVubmluZ1Rhc2tzKys7XG4gICAgICAgICAgICAgICAgICAgIHJlbW92ZUxpc3RlbmVyKGxpc3RlbmVyKTtcbiAgICAgICAgICAgICAgICAgICAgdGFza1t0YXNrLmxlbmd0aCAtIDFdKHRhc2tDYWxsYmFjaywgcmVzdWx0cyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9O1xuXG5cblxuICAgIGFzeW5jLnJldHJ5ID0gZnVuY3Rpb24odGltZXMsIHRhc2ssIGNhbGxiYWNrKSB7XG4gICAgICAgIHZhciBERUZBVUxUX1RJTUVTID0gNTtcbiAgICAgICAgdmFyIERFRkFVTFRfSU5URVJWQUwgPSAwO1xuXG4gICAgICAgIHZhciBhdHRlbXB0cyA9IFtdO1xuXG4gICAgICAgIHZhciBvcHRzID0ge1xuICAgICAgICAgICAgdGltZXM6IERFRkFVTFRfVElNRVMsXG4gICAgICAgICAgICBpbnRlcnZhbDogREVGQVVMVF9JTlRFUlZBTFxuICAgICAgICB9O1xuXG4gICAgICAgIGZ1bmN0aW9uIHBhcnNlVGltZXMoYWNjLCB0KXtcbiAgICAgICAgICAgIGlmKHR5cGVvZiB0ID09PSAnbnVtYmVyJyl7XG4gICAgICAgICAgICAgICAgYWNjLnRpbWVzID0gcGFyc2VJbnQodCwgMTApIHx8IERFRkFVTFRfVElNRVM7XG4gICAgICAgICAgICB9IGVsc2UgaWYodHlwZW9mIHQgPT09ICdvYmplY3QnKXtcbiAgICAgICAgICAgICAgICBhY2MudGltZXMgPSBwYXJzZUludCh0LnRpbWVzLCAxMCkgfHwgREVGQVVMVF9USU1FUztcbiAgICAgICAgICAgICAgICBhY2MuaW50ZXJ2YWwgPSBwYXJzZUludCh0LmludGVydmFsLCAxMCkgfHwgREVGQVVMVF9JTlRFUlZBTDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdVbnN1cHBvcnRlZCBhcmd1bWVudCB0eXBlIGZvciBcXCd0aW1lc1xcJzogJyArIHR5cGVvZiB0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBsZW5ndGggPSBhcmd1bWVudHMubGVuZ3RoO1xuICAgICAgICBpZiAobGVuZ3RoIDwgMSB8fCBsZW5ndGggPiAzKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgYXJndW1lbnRzIC0gbXVzdCBiZSBlaXRoZXIgKHRhc2spLCAodGFzaywgY2FsbGJhY2spLCAodGltZXMsIHRhc2spIG9yICh0aW1lcywgdGFzaywgY2FsbGJhY2spJyk7XG4gICAgICAgIH0gZWxzZSBpZiAobGVuZ3RoIDw9IDIgJiYgdHlwZW9mIHRpbWVzID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICBjYWxsYmFjayA9IHRhc2s7XG4gICAgICAgICAgICB0YXNrID0gdGltZXM7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHR5cGVvZiB0aW1lcyAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgcGFyc2VUaW1lcyhvcHRzLCB0aW1lcyk7XG4gICAgICAgIH1cbiAgICAgICAgb3B0cy5jYWxsYmFjayA9IGNhbGxiYWNrO1xuICAgICAgICBvcHRzLnRhc2sgPSB0YXNrO1xuXG4gICAgICAgIGZ1bmN0aW9uIHdyYXBwZWRUYXNrKHdyYXBwZWRDYWxsYmFjaywgd3JhcHBlZFJlc3VsdHMpIHtcbiAgICAgICAgICAgIGZ1bmN0aW9uIHJldHJ5QXR0ZW1wdCh0YXNrLCBmaW5hbEF0dGVtcHQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24oc2VyaWVzQ2FsbGJhY2spIHtcbiAgICAgICAgICAgICAgICAgICAgdGFzayhmdW5jdGlvbihlcnIsIHJlc3VsdCl7XG4gICAgICAgICAgICAgICAgICAgICAgICBzZXJpZXNDYWxsYmFjayghZXJyIHx8IGZpbmFsQXR0ZW1wdCwge2VycjogZXJyLCByZXN1bHQ6IHJlc3VsdH0pO1xuICAgICAgICAgICAgICAgICAgICB9LCB3cmFwcGVkUmVzdWx0cyk7XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZnVuY3Rpb24gcmV0cnlJbnRlcnZhbChpbnRlcnZhbCl7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKHNlcmllc0NhbGxiYWNrKXtcbiAgICAgICAgICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpe1xuICAgICAgICAgICAgICAgICAgICAgICAgc2VyaWVzQ2FsbGJhY2sobnVsbCk7XG4gICAgICAgICAgICAgICAgICAgIH0sIGludGVydmFsKTtcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB3aGlsZSAob3B0cy50aW1lcykge1xuXG4gICAgICAgICAgICAgICAgdmFyIGZpbmFsQXR0ZW1wdCA9ICEob3B0cy50aW1lcy09MSk7XG4gICAgICAgICAgICAgICAgYXR0ZW1wdHMucHVzaChyZXRyeUF0dGVtcHQob3B0cy50YXNrLCBmaW5hbEF0dGVtcHQpKTtcbiAgICAgICAgICAgICAgICBpZighZmluYWxBdHRlbXB0ICYmIG9wdHMuaW50ZXJ2YWwgPiAwKXtcbiAgICAgICAgICAgICAgICAgICAgYXR0ZW1wdHMucHVzaChyZXRyeUludGVydmFsKG9wdHMuaW50ZXJ2YWwpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGFzeW5jLnNlcmllcyhhdHRlbXB0cywgZnVuY3Rpb24oZG9uZSwgZGF0YSl7XG4gICAgICAgICAgICAgICAgZGF0YSA9IGRhdGFbZGF0YS5sZW5ndGggLSAxXTtcbiAgICAgICAgICAgICAgICAod3JhcHBlZENhbGxiYWNrIHx8IG9wdHMuY2FsbGJhY2spKGRhdGEuZXJyLCBkYXRhLnJlc3VsdCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIElmIGEgY2FsbGJhY2sgaXMgcGFzc2VkLCBydW4gdGhpcyBhcyBhIGNvbnRyb2xsIGZsb3dcbiAgICAgICAgcmV0dXJuIG9wdHMuY2FsbGJhY2sgPyB3cmFwcGVkVGFzaygpIDogd3JhcHBlZFRhc2s7XG4gICAgfTtcblxuICAgIGFzeW5jLndhdGVyZmFsbCA9IGZ1bmN0aW9uICh0YXNrcywgY2FsbGJhY2spIHtcbiAgICAgICAgY2FsbGJhY2sgPSBfb25jZShjYWxsYmFjayB8fCBub29wKTtcbiAgICAgICAgaWYgKCFfaXNBcnJheSh0YXNrcykpIHtcbiAgICAgICAgICAgIHZhciBlcnIgPSBuZXcgRXJyb3IoJ0ZpcnN0IGFyZ3VtZW50IHRvIHdhdGVyZmFsbCBtdXN0IGJlIGFuIGFycmF5IG9mIGZ1bmN0aW9ucycpO1xuICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKGVycik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCF0YXNrcy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHJldHVybiBjYWxsYmFjaygpO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIHdyYXBJdGVyYXRvcihpdGVyYXRvcikge1xuICAgICAgICAgICAgcmV0dXJuIF9yZXN0UGFyYW0oZnVuY3Rpb24gKGVyciwgYXJncykge1xuICAgICAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2suYXBwbHkobnVsbCwgW2Vycl0uY29uY2F0KGFyZ3MpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBuZXh0ID0gaXRlcmF0b3IubmV4dCgpO1xuICAgICAgICAgICAgICAgICAgICBpZiAobmV4dCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgYXJncy5wdXNoKHdyYXBJdGVyYXRvcihuZXh0KSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhcmdzLnB1c2goY2FsbGJhY2spO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVuc3VyZUFzeW5jKGl0ZXJhdG9yKS5hcHBseShudWxsLCBhcmdzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICB3cmFwSXRlcmF0b3IoYXN5bmMuaXRlcmF0b3IodGFza3MpKSgpO1xuICAgIH07XG5cbiAgICBmdW5jdGlvbiBfcGFyYWxsZWwoZWFjaGZuLCB0YXNrcywgY2FsbGJhY2spIHtcbiAgICAgICAgY2FsbGJhY2sgPSBjYWxsYmFjayB8fCBub29wO1xuICAgICAgICB2YXIgcmVzdWx0cyA9IF9pc0FycmF5TGlrZSh0YXNrcykgPyBbXSA6IHt9O1xuXG4gICAgICAgIGVhY2hmbih0YXNrcywgZnVuY3Rpb24gKHRhc2ssIGtleSwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIHRhc2soX3Jlc3RQYXJhbShmdW5jdGlvbiAoZXJyLCBhcmdzKSB7XG4gICAgICAgICAgICAgICAgaWYgKGFyZ3MubGVuZ3RoIDw9IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgYXJncyA9IGFyZ3NbMF07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJlc3VsdHNba2V5XSA9IGFyZ3M7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgfSwgZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgY2FsbGJhY2soZXJyLCByZXN1bHRzKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgYXN5bmMucGFyYWxsZWwgPSBmdW5jdGlvbiAodGFza3MsIGNhbGxiYWNrKSB7XG4gICAgICAgIF9wYXJhbGxlbChhc3luYy5lYWNoT2YsIHRhc2tzLCBjYWxsYmFjayk7XG4gICAgfTtcblxuICAgIGFzeW5jLnBhcmFsbGVsTGltaXQgPSBmdW5jdGlvbih0YXNrcywgbGltaXQsIGNhbGxiYWNrKSB7XG4gICAgICAgIF9wYXJhbGxlbChfZWFjaE9mTGltaXQobGltaXQpLCB0YXNrcywgY2FsbGJhY2spO1xuICAgIH07XG5cbiAgICBhc3luYy5zZXJpZXMgPSBmdW5jdGlvbih0YXNrcywgY2FsbGJhY2spIHtcbiAgICAgICAgX3BhcmFsbGVsKGFzeW5jLmVhY2hPZlNlcmllcywgdGFza3MsIGNhbGxiYWNrKTtcbiAgICB9O1xuXG4gICAgYXN5bmMuaXRlcmF0b3IgPSBmdW5jdGlvbiAodGFza3MpIHtcbiAgICAgICAgZnVuY3Rpb24gbWFrZUNhbGxiYWNrKGluZGV4KSB7XG4gICAgICAgICAgICBmdW5jdGlvbiBmbigpIHtcbiAgICAgICAgICAgICAgICBpZiAodGFza3MubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgIHRhc2tzW2luZGV4XS5hcHBseShudWxsLCBhcmd1bWVudHMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gZm4ubmV4dCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZm4ubmV4dCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gKGluZGV4IDwgdGFza3MubGVuZ3RoIC0gMSkgPyBtYWtlQ2FsbGJhY2soaW5kZXggKyAxKTogbnVsbDtcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICByZXR1cm4gZm47XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG1ha2VDYWxsYmFjaygwKTtcbiAgICB9O1xuXG4gICAgYXN5bmMuYXBwbHkgPSBfcmVzdFBhcmFtKGZ1bmN0aW9uIChmbiwgYXJncykge1xuICAgICAgICByZXR1cm4gX3Jlc3RQYXJhbShmdW5jdGlvbiAoY2FsbEFyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybiBmbi5hcHBseShcbiAgICAgICAgICAgICAgICBudWxsLCBhcmdzLmNvbmNhdChjYWxsQXJncylcbiAgICAgICAgICAgICk7XG4gICAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgZnVuY3Rpb24gX2NvbmNhdChlYWNoZm4sIGFyciwgZm4sIGNhbGxiYWNrKSB7XG4gICAgICAgIHZhciByZXN1bHQgPSBbXTtcbiAgICAgICAgZWFjaGZuKGFyciwgZnVuY3Rpb24gKHgsIGluZGV4LCBjYikge1xuICAgICAgICAgICAgZm4oeCwgZnVuY3Rpb24gKGVyciwgeSkge1xuICAgICAgICAgICAgICAgIHJlc3VsdCA9IHJlc3VsdC5jb25jYXQoeSB8fCBbXSk7XG4gICAgICAgICAgICAgICAgY2IoZXJyKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICBjYWxsYmFjayhlcnIsIHJlc3VsdCk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBhc3luYy5jb25jYXQgPSBkb1BhcmFsbGVsKF9jb25jYXQpO1xuICAgIGFzeW5jLmNvbmNhdFNlcmllcyA9IGRvU2VyaWVzKF9jb25jYXQpO1xuXG4gICAgYXN5bmMud2hpbHN0ID0gZnVuY3Rpb24gKHRlc3QsIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICBjYWxsYmFjayA9IGNhbGxiYWNrIHx8IG5vb3A7XG4gICAgICAgIGlmICh0ZXN0KCkpIHtcbiAgICAgICAgICAgIHZhciBuZXh0ID0gX3Jlc3RQYXJhbShmdW5jdGlvbihlcnIsIGFyZ3MpIHtcbiAgICAgICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0ZXN0LmFwcGx5KHRoaXMsIGFyZ3MpKSB7XG4gICAgICAgICAgICAgICAgICAgIGl0ZXJhdG9yKG5leHQpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKG51bGwpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgaXRlcmF0b3IobmV4dCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjYWxsYmFjayhudWxsKTtcbiAgICAgICAgfVxuICAgIH07XG5cbiAgICBhc3luYy5kb1doaWxzdCA9IGZ1bmN0aW9uIChpdGVyYXRvciwgdGVzdCwgY2FsbGJhY2spIHtcbiAgICAgICAgdmFyIGNhbGxzID0gMDtcbiAgICAgICAgcmV0dXJuIGFzeW5jLndoaWxzdChmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIHJldHVybiArK2NhbGxzIDw9IDEgfHwgdGVzdC5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgICAgICB9LCBpdGVyYXRvciwgY2FsbGJhY2spO1xuICAgIH07XG5cbiAgICBhc3luYy51bnRpbCA9IGZ1bmN0aW9uICh0ZXN0LCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgcmV0dXJuIGFzeW5jLndoaWxzdChmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIHJldHVybiAhdGVzdC5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgICAgICB9LCBpdGVyYXRvciwgY2FsbGJhY2spO1xuICAgIH07XG5cbiAgICBhc3luYy5kb1VudGlsID0gZnVuY3Rpb24gKGl0ZXJhdG9yLCB0ZXN0LCBjYWxsYmFjaykge1xuICAgICAgICByZXR1cm4gYXN5bmMuZG9XaGlsc3QoaXRlcmF0b3IsIGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgcmV0dXJuICF0ZXN0LmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgICAgIH0sIGNhbGxiYWNrKTtcbiAgICB9O1xuXG4gICAgYXN5bmMuZHVyaW5nID0gZnVuY3Rpb24gKHRlc3QsIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICBjYWxsYmFjayA9IGNhbGxiYWNrIHx8IG5vb3A7XG5cbiAgICAgICAgdmFyIG5leHQgPSBfcmVzdFBhcmFtKGZ1bmN0aW9uKGVyciwgYXJncykge1xuICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGFyZ3MucHVzaChjaGVjayk7XG4gICAgICAgICAgICAgICAgdGVzdC5hcHBseSh0aGlzLCBhcmdzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgdmFyIGNoZWNrID0gZnVuY3Rpb24oZXJyLCB0cnV0aCkge1xuICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHRydXRoKSB7XG4gICAgICAgICAgICAgICAgaXRlcmF0b3IobmV4dCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrKG51bGwpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuXG4gICAgICAgIHRlc3QoY2hlY2spO1xuICAgIH07XG5cbiAgICBhc3luYy5kb0R1cmluZyA9IGZ1bmN0aW9uIChpdGVyYXRvciwgdGVzdCwgY2FsbGJhY2spIHtcbiAgICAgICAgdmFyIGNhbGxzID0gMDtcbiAgICAgICAgYXN5bmMuZHVyaW5nKGZ1bmN0aW9uKG5leHQpIHtcbiAgICAgICAgICAgIGlmIChjYWxscysrIDwgMSkge1xuICAgICAgICAgICAgICAgIG5leHQobnVsbCwgdHJ1ZSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRlc3QuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSwgaXRlcmF0b3IsIGNhbGxiYWNrKTtcbiAgICB9O1xuXG4gICAgZnVuY3Rpb24gX3F1ZXVlKHdvcmtlciwgY29uY3VycmVuY3ksIHBheWxvYWQpIHtcbiAgICAgICAgaWYgKGNvbmN1cnJlbmN5ID09IG51bGwpIHtcbiAgICAgICAgICAgIGNvbmN1cnJlbmN5ID0gMTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmKGNvbmN1cnJlbmN5ID09PSAwKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0NvbmN1cnJlbmN5IG11c3Qgbm90IGJlIHplcm8nKTtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBfaW5zZXJ0KHEsIGRhdGEsIHBvcywgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIGlmIChjYWxsYmFjayAhPSBudWxsICYmIHR5cGVvZiBjYWxsYmFjayAhPT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwidGFzayBjYWxsYmFjayBtdXN0IGJlIGEgZnVuY3Rpb25cIik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBxLnN0YXJ0ZWQgPSB0cnVlO1xuICAgICAgICAgICAgaWYgKCFfaXNBcnJheShkYXRhKSkge1xuICAgICAgICAgICAgICAgIGRhdGEgPSBbZGF0YV07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZihkYXRhLmxlbmd0aCA9PT0gMCAmJiBxLmlkbGUoKSkge1xuICAgICAgICAgICAgICAgIC8vIGNhbGwgZHJhaW4gaW1tZWRpYXRlbHkgaWYgdGhlcmUgYXJlIG5vIHRhc2tzXG4gICAgICAgICAgICAgICAgcmV0dXJuIGFzeW5jLnNldEltbWVkaWF0ZShmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgICAgcS5kcmFpbigpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgX2FycmF5RWFjaChkYXRhLCBmdW5jdGlvbih0YXNrKSB7XG4gICAgICAgICAgICAgICAgdmFyIGl0ZW0gPSB7XG4gICAgICAgICAgICAgICAgICAgIGRhdGE6IHRhc2ssXG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrOiBjYWxsYmFjayB8fCBub29wXG4gICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgIGlmIChwb3MpIHtcbiAgICAgICAgICAgICAgICAgICAgcS50YXNrcy51bnNoaWZ0KGl0ZW0pO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHEudGFza3MucHVzaChpdGVtKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAocS50YXNrcy5sZW5ndGggPT09IHEuY29uY3VycmVuY3kpIHtcbiAgICAgICAgICAgICAgICAgICAgcS5zYXR1cmF0ZWQoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGFzeW5jLnNldEltbWVkaWF0ZShxLnByb2Nlc3MpO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIF9uZXh0KHEsIHRhc2tzKSB7XG4gICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24oKXtcbiAgICAgICAgICAgICAgICB3b3JrZXJzIC09IDE7XG5cbiAgICAgICAgICAgICAgICB2YXIgcmVtb3ZlZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHZhciBhcmdzID0gYXJndW1lbnRzO1xuICAgICAgICAgICAgICAgIF9hcnJheUVhY2godGFza3MsIGZ1bmN0aW9uICh0YXNrKSB7XG4gICAgICAgICAgICAgICAgICAgIF9hcnJheUVhY2god29ya2Vyc0xpc3QsIGZ1bmN0aW9uICh3b3JrZXIsIGluZGV4KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAod29ya2VyID09PSB0YXNrICYmICFyZW1vdmVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd29ya2Vyc0xpc3Quc3BsaWNlKGluZGV4LCAxKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZW1vdmVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICAgICAgdGFzay5jYWxsYmFjay5hcHBseSh0YXNrLCBhcmdzKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBpZiAocS50YXNrcy5sZW5ndGggKyB3b3JrZXJzID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIHEuZHJhaW4oKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcS5wcm9jZXNzKCk7XG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIHdvcmtlcnMgPSAwO1xuICAgICAgICB2YXIgd29ya2Vyc0xpc3QgPSBbXTtcbiAgICAgICAgdmFyIHEgPSB7XG4gICAgICAgICAgICB0YXNrczogW10sXG4gICAgICAgICAgICBjb25jdXJyZW5jeTogY29uY3VycmVuY3ksXG4gICAgICAgICAgICBwYXlsb2FkOiBwYXlsb2FkLFxuICAgICAgICAgICAgc2F0dXJhdGVkOiBub29wLFxuICAgICAgICAgICAgZW1wdHk6IG5vb3AsXG4gICAgICAgICAgICBkcmFpbjogbm9vcCxcbiAgICAgICAgICAgIHN0YXJ0ZWQ6IGZhbHNlLFxuICAgICAgICAgICAgcGF1c2VkOiBmYWxzZSxcbiAgICAgICAgICAgIHB1c2g6IGZ1bmN0aW9uIChkYXRhLCBjYWxsYmFjaykge1xuICAgICAgICAgICAgICAgIF9pbnNlcnQocSwgZGF0YSwgZmFsc2UsIGNhbGxiYWNrKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBraWxsOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgcS5kcmFpbiA9IG5vb3A7XG4gICAgICAgICAgICAgICAgcS50YXNrcyA9IFtdO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHVuc2hpZnQ6IGZ1bmN0aW9uIChkYXRhLCBjYWxsYmFjaykge1xuICAgICAgICAgICAgICAgIF9pbnNlcnQocSwgZGF0YSwgdHJ1ZSwgY2FsbGJhY2spO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHByb2Nlc3M6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBpZiAoIXEucGF1c2VkICYmIHdvcmtlcnMgPCBxLmNvbmN1cnJlbmN5ICYmIHEudGFza3MubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgIHdoaWxlKHdvcmtlcnMgPCBxLmNvbmN1cnJlbmN5ICYmIHEudGFza3MubGVuZ3RoKXtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0YXNrcyA9IHEucGF5bG9hZCA/XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcS50YXNrcy5zcGxpY2UoMCwgcS5wYXlsb2FkKSA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcS50YXNrcy5zcGxpY2UoMCwgcS50YXNrcy5sZW5ndGgpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgZGF0YSA9IF9tYXAodGFza3MsIGZ1bmN0aW9uICh0YXNrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRhc2suZGF0YTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocS50YXNrcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBxLmVtcHR5KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB3b3JrZXJzICs9IDE7XG4gICAgICAgICAgICAgICAgICAgICAgICB3b3JrZXJzTGlzdC5wdXNoKHRhc2tzWzBdKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjYiA9IG9ubHlfb25jZShfbmV4dChxLCB0YXNrcykpO1xuICAgICAgICAgICAgICAgICAgICAgICAgd29ya2VyKGRhdGEsIGNiKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBsZW5ndGg6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcS50YXNrcy5sZW5ndGg7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcnVubmluZzogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB3b3JrZXJzO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHdvcmtlcnNMaXN0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHdvcmtlcnNMaXN0O1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGlkbGU6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBxLnRhc2tzLmxlbmd0aCArIHdvcmtlcnMgPT09IDA7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcGF1c2U6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBxLnBhdXNlZCA9IHRydWU7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcmVzdW1lOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgaWYgKHEucGF1c2VkID09PSBmYWxzZSkgeyByZXR1cm47IH1cbiAgICAgICAgICAgICAgICBxLnBhdXNlZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHZhciByZXN1bWVDb3VudCA9IE1hdGgubWluKHEuY29uY3VycmVuY3ksIHEudGFza3MubGVuZ3RoKTtcbiAgICAgICAgICAgICAgICAvLyBOZWVkIHRvIGNhbGwgcS5wcm9jZXNzIG9uY2UgcGVyIGNvbmN1cnJlbnRcbiAgICAgICAgICAgICAgICAvLyB3b3JrZXIgdG8gcHJlc2VydmUgZnVsbCBjb25jdXJyZW5jeSBhZnRlciBwYXVzZVxuICAgICAgICAgICAgICAgIGZvciAodmFyIHcgPSAxOyB3IDw9IHJlc3VtZUNvdW50OyB3KyspIHtcbiAgICAgICAgICAgICAgICAgICAgYXN5bmMuc2V0SW1tZWRpYXRlKHEucHJvY2Vzcyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gcTtcbiAgICB9XG5cbiAgICBhc3luYy5xdWV1ZSA9IGZ1bmN0aW9uICh3b3JrZXIsIGNvbmN1cnJlbmN5KSB7XG4gICAgICAgIHZhciBxID0gX3F1ZXVlKGZ1bmN0aW9uIChpdGVtcywgY2IpIHtcbiAgICAgICAgICAgIHdvcmtlcihpdGVtc1swXSwgY2IpO1xuICAgICAgICB9LCBjb25jdXJyZW5jeSwgMSk7XG5cbiAgICAgICAgcmV0dXJuIHE7XG4gICAgfTtcblxuICAgIGFzeW5jLnByaW9yaXR5UXVldWUgPSBmdW5jdGlvbiAod29ya2VyLCBjb25jdXJyZW5jeSkge1xuXG4gICAgICAgIGZ1bmN0aW9uIF9jb21wYXJlVGFza3MoYSwgYil7XG4gICAgICAgICAgICByZXR1cm4gYS5wcmlvcml0eSAtIGIucHJpb3JpdHk7XG4gICAgICAgIH1cblxuICAgICAgICBmdW5jdGlvbiBfYmluYXJ5U2VhcmNoKHNlcXVlbmNlLCBpdGVtLCBjb21wYXJlKSB7XG4gICAgICAgICAgICB2YXIgYmVnID0gLTEsXG4gICAgICAgICAgICAgICAgZW5kID0gc2VxdWVuY2UubGVuZ3RoIC0gMTtcbiAgICAgICAgICAgIHdoaWxlIChiZWcgPCBlbmQpIHtcbiAgICAgICAgICAgICAgICB2YXIgbWlkID0gYmVnICsgKChlbmQgLSBiZWcgKyAxKSA+Pj4gMSk7XG4gICAgICAgICAgICAgICAgaWYgKGNvbXBhcmUoaXRlbSwgc2VxdWVuY2VbbWlkXSkgPj0gMCkge1xuICAgICAgICAgICAgICAgICAgICBiZWcgPSBtaWQ7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgZW5kID0gbWlkIC0gMTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gYmVnO1xuICAgICAgICB9XG5cbiAgICAgICAgZnVuY3Rpb24gX2luc2VydChxLCBkYXRhLCBwcmlvcml0eSwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIGlmIChjYWxsYmFjayAhPSBudWxsICYmIHR5cGVvZiBjYWxsYmFjayAhPT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwidGFzayBjYWxsYmFjayBtdXN0IGJlIGEgZnVuY3Rpb25cIik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBxLnN0YXJ0ZWQgPSB0cnVlO1xuICAgICAgICAgICAgaWYgKCFfaXNBcnJheShkYXRhKSkge1xuICAgICAgICAgICAgICAgIGRhdGEgPSBbZGF0YV07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZihkYXRhLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICAgIC8vIGNhbGwgZHJhaW4gaW1tZWRpYXRlbHkgaWYgdGhlcmUgYXJlIG5vIHRhc2tzXG4gICAgICAgICAgICAgICAgcmV0dXJuIGFzeW5jLnNldEltbWVkaWF0ZShmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgICAgcS5kcmFpbigpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgX2FycmF5RWFjaChkYXRhLCBmdW5jdGlvbih0YXNrKSB7XG4gICAgICAgICAgICAgICAgdmFyIGl0ZW0gPSB7XG4gICAgICAgICAgICAgICAgICAgIGRhdGE6IHRhc2ssXG4gICAgICAgICAgICAgICAgICAgIHByaW9yaXR5OiBwcmlvcml0eSxcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2s6IHR5cGVvZiBjYWxsYmFjayA9PT0gJ2Z1bmN0aW9uJyA/IGNhbGxiYWNrIDogbm9vcFxuICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICBxLnRhc2tzLnNwbGljZShfYmluYXJ5U2VhcmNoKHEudGFza3MsIGl0ZW0sIF9jb21wYXJlVGFza3MpICsgMSwgMCwgaXRlbSk7XG5cbiAgICAgICAgICAgICAgICBpZiAocS50YXNrcy5sZW5ndGggPT09IHEuY29uY3VycmVuY3kpIHtcbiAgICAgICAgICAgICAgICAgICAgcS5zYXR1cmF0ZWQoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYXN5bmMuc2V0SW1tZWRpYXRlKHEucHJvY2Vzcyk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFN0YXJ0IHdpdGggYSBub3JtYWwgcXVldWVcbiAgICAgICAgdmFyIHEgPSBhc3luYy5xdWV1ZSh3b3JrZXIsIGNvbmN1cnJlbmN5KTtcblxuICAgICAgICAvLyBPdmVycmlkZSBwdXNoIHRvIGFjY2VwdCBzZWNvbmQgcGFyYW1ldGVyIHJlcHJlc2VudGluZyBwcmlvcml0eVxuICAgICAgICBxLnB1c2ggPSBmdW5jdGlvbiAoZGF0YSwgcHJpb3JpdHksIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICBfaW5zZXJ0KHEsIGRhdGEsIHByaW9yaXR5LCBjYWxsYmFjayk7XG4gICAgICAgIH07XG5cbiAgICAgICAgLy8gUmVtb3ZlIHVuc2hpZnQgZnVuY3Rpb25cbiAgICAgICAgZGVsZXRlIHEudW5zaGlmdDtcblxuICAgICAgICByZXR1cm4gcTtcbiAgICB9O1xuXG4gICAgYXN5bmMuY2FyZ28gPSBmdW5jdGlvbiAod29ya2VyLCBwYXlsb2FkKSB7XG4gICAgICAgIHJldHVybiBfcXVldWUod29ya2VyLCAxLCBwYXlsb2FkKTtcbiAgICB9O1xuXG4gICAgZnVuY3Rpb24gX2NvbnNvbGVfZm4obmFtZSkge1xuICAgICAgICByZXR1cm4gX3Jlc3RQYXJhbShmdW5jdGlvbiAoZm4sIGFyZ3MpIHtcbiAgICAgICAgICAgIGZuLmFwcGx5KG51bGwsIGFyZ3MuY29uY2F0KFtfcmVzdFBhcmFtKGZ1bmN0aW9uIChlcnIsIGFyZ3MpIHtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGNvbnNvbGUgPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb25zb2xlLmVycm9yKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihlcnIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKGNvbnNvbGVbbmFtZV0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIF9hcnJheUVhY2goYXJncywgZnVuY3Rpb24gKHgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlW25hbWVdKHgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KV0pKTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGFzeW5jLmxvZyA9IF9jb25zb2xlX2ZuKCdsb2cnKTtcbiAgICBhc3luYy5kaXIgPSBfY29uc29sZV9mbignZGlyJyk7XG4gICAgLyphc3luYy5pbmZvID0gX2NvbnNvbGVfZm4oJ2luZm8nKTtcbiAgICBhc3luYy53YXJuID0gX2NvbnNvbGVfZm4oJ3dhcm4nKTtcbiAgICBhc3luYy5lcnJvciA9IF9jb25zb2xlX2ZuKCdlcnJvcicpOyovXG5cbiAgICBhc3luYy5tZW1vaXplID0gZnVuY3Rpb24gKGZuLCBoYXNoZXIpIHtcbiAgICAgICAgdmFyIG1lbW8gPSB7fTtcbiAgICAgICAgdmFyIHF1ZXVlcyA9IHt9O1xuICAgICAgICBoYXNoZXIgPSBoYXNoZXIgfHwgaWRlbnRpdHk7XG4gICAgICAgIHZhciBtZW1vaXplZCA9IF9yZXN0UGFyYW0oZnVuY3Rpb24gbWVtb2l6ZWQoYXJncykge1xuICAgICAgICAgICAgdmFyIGNhbGxiYWNrID0gYXJncy5wb3AoKTtcbiAgICAgICAgICAgIHZhciBrZXkgPSBoYXNoZXIuYXBwbHkobnVsbCwgYXJncyk7XG4gICAgICAgICAgICBpZiAoa2V5IGluIG1lbW8pIHtcbiAgICAgICAgICAgICAgICBhc3luYy5zZXRJbW1lZGlhdGUoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjay5hcHBseShudWxsLCBtZW1vW2tleV0pO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoa2V5IGluIHF1ZXVlcykge1xuICAgICAgICAgICAgICAgIHF1ZXVlc1trZXldLnB1c2goY2FsbGJhY2spO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgcXVldWVzW2tleV0gPSBbY2FsbGJhY2tdO1xuICAgICAgICAgICAgICAgIGZuLmFwcGx5KG51bGwsIGFyZ3MuY29uY2F0KFtfcmVzdFBhcmFtKGZ1bmN0aW9uIChhcmdzKSB7XG4gICAgICAgICAgICAgICAgICAgIG1lbW9ba2V5XSA9IGFyZ3M7XG4gICAgICAgICAgICAgICAgICAgIHZhciBxID0gcXVldWVzW2tleV07XG4gICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBxdWV1ZXNba2V5XTtcbiAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDAsIGwgPSBxLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgcVtpXS5hcHBseShudWxsLCBhcmdzKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pXSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgbWVtb2l6ZWQubWVtbyA9IG1lbW87XG4gICAgICAgIG1lbW9pemVkLnVubWVtb2l6ZWQgPSBmbjtcbiAgICAgICAgcmV0dXJuIG1lbW9pemVkO1xuICAgIH07XG5cbiAgICBhc3luYy51bm1lbW9pemUgPSBmdW5jdGlvbiAoZm4pIHtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiAoZm4udW5tZW1vaXplZCB8fCBmbikuYXBwbHkobnVsbCwgYXJndW1lbnRzKTtcbiAgICAgICAgfTtcbiAgICB9O1xuXG4gICAgZnVuY3Rpb24gX3RpbWVzKG1hcHBlcikge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKGNvdW50LCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIG1hcHBlcihfcmFuZ2UoY291bnQpLCBpdGVyYXRvciwgY2FsbGJhY2spO1xuICAgICAgICB9O1xuICAgIH1cblxuICAgIGFzeW5jLnRpbWVzID0gX3RpbWVzKGFzeW5jLm1hcCk7XG4gICAgYXN5bmMudGltZXNTZXJpZXMgPSBfdGltZXMoYXN5bmMubWFwU2VyaWVzKTtcbiAgICBhc3luYy50aW1lc0xpbWl0ID0gZnVuY3Rpb24gKGNvdW50LCBsaW1pdCwgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgIHJldHVybiBhc3luYy5tYXBMaW1pdChfcmFuZ2UoY291bnQpLCBsaW1pdCwgaXRlcmF0b3IsIGNhbGxiYWNrKTtcbiAgICB9O1xuXG4gICAgYXN5bmMuc2VxID0gZnVuY3Rpb24gKC8qIGZ1bmN0aW9ucy4uLiAqLykge1xuICAgICAgICB2YXIgZm5zID0gYXJndW1lbnRzO1xuICAgICAgICByZXR1cm4gX3Jlc3RQYXJhbShmdW5jdGlvbiAoYXJncykge1xuICAgICAgICAgICAgdmFyIHRoYXQgPSB0aGlzO1xuXG4gICAgICAgICAgICB2YXIgY2FsbGJhY2sgPSBhcmdzW2FyZ3MubGVuZ3RoIC0gMV07XG4gICAgICAgICAgICBpZiAodHlwZW9mIGNhbGxiYWNrID09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICBhcmdzLnBvcCgpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBjYWxsYmFjayA9IG5vb3A7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGFzeW5jLnJlZHVjZShmbnMsIGFyZ3MsIGZ1bmN0aW9uIChuZXdhcmdzLCBmbiwgY2IpIHtcbiAgICAgICAgICAgICAgICBmbi5hcHBseSh0aGF0LCBuZXdhcmdzLmNvbmNhdChbX3Jlc3RQYXJhbShmdW5jdGlvbiAoZXJyLCBuZXh0YXJncykge1xuICAgICAgICAgICAgICAgICAgICBjYihlcnIsIG5leHRhcmdzKTtcbiAgICAgICAgICAgICAgICB9KV0pKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBmdW5jdGlvbiAoZXJyLCByZXN1bHRzKSB7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2suYXBwbHkodGhhdCwgW2Vycl0uY29uY2F0KHJlc3VsdHMpKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9O1xuXG4gICAgYXN5bmMuY29tcG9zZSA9IGZ1bmN0aW9uICgvKiBmdW5jdGlvbnMuLi4gKi8pIHtcbiAgICAgICAgcmV0dXJuIGFzeW5jLnNlcS5hcHBseShudWxsLCBBcnJheS5wcm90b3R5cGUucmV2ZXJzZS5jYWxsKGFyZ3VtZW50cykpO1xuICAgIH07XG5cblxuICAgIGZ1bmN0aW9uIF9hcHBseUVhY2goZWFjaGZuKSB7XG4gICAgICAgIHJldHVybiBfcmVzdFBhcmFtKGZ1bmN0aW9uKGZucywgYXJncykge1xuICAgICAgICAgICAgdmFyIGdvID0gX3Jlc3RQYXJhbShmdW5jdGlvbihhcmdzKSB7XG4gICAgICAgICAgICAgICAgdmFyIHRoYXQgPSB0aGlzO1xuICAgICAgICAgICAgICAgIHZhciBjYWxsYmFjayA9IGFyZ3MucG9wKCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGVhY2hmbihmbnMsIGZ1bmN0aW9uIChmbiwgXywgY2IpIHtcbiAgICAgICAgICAgICAgICAgICAgZm4uYXBwbHkodGhhdCwgYXJncy5jb25jYXQoW2NiXSkpO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgY2FsbGJhY2spO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBpZiAoYXJncy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZ28uYXBwbHkodGhpcywgYXJncyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZ287XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGFzeW5jLmFwcGx5RWFjaCA9IF9hcHBseUVhY2goYXN5bmMuZWFjaE9mKTtcbiAgICBhc3luYy5hcHBseUVhY2hTZXJpZXMgPSBfYXBwbHlFYWNoKGFzeW5jLmVhY2hPZlNlcmllcyk7XG5cblxuICAgIGFzeW5jLmZvcmV2ZXIgPSBmdW5jdGlvbiAoZm4sIGNhbGxiYWNrKSB7XG4gICAgICAgIHZhciBkb25lID0gb25seV9vbmNlKGNhbGxiYWNrIHx8IG5vb3ApO1xuICAgICAgICB2YXIgdGFzayA9IGVuc3VyZUFzeW5jKGZuKTtcbiAgICAgICAgZnVuY3Rpb24gbmV4dChlcnIpIHtcbiAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZG9uZShlcnIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGFzayhuZXh0KTtcbiAgICAgICAgfVxuICAgICAgICBuZXh0KCk7XG4gICAgfTtcblxuICAgIGZ1bmN0aW9uIGVuc3VyZUFzeW5jKGZuKSB7XG4gICAgICAgIHJldHVybiBfcmVzdFBhcmFtKGZ1bmN0aW9uIChhcmdzKSB7XG4gICAgICAgICAgICB2YXIgY2FsbGJhY2sgPSBhcmdzLnBvcCgpO1xuICAgICAgICAgICAgYXJncy5wdXNoKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICB2YXIgaW5uZXJBcmdzID0gYXJndW1lbnRzO1xuICAgICAgICAgICAgICAgIGlmIChzeW5jKSB7XG4gICAgICAgICAgICAgICAgICAgIGFzeW5jLnNldEltbWVkaWF0ZShmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjYWxsYmFjay5hcHBseShudWxsLCBpbm5lckFyZ3MpO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjay5hcHBseShudWxsLCBpbm5lckFyZ3MpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdmFyIHN5bmMgPSB0cnVlO1xuICAgICAgICAgICAgZm4uYXBwbHkodGhpcywgYXJncyk7XG4gICAgICAgICAgICBzeW5jID0gZmFsc2U7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGFzeW5jLmVuc3VyZUFzeW5jID0gZW5zdXJlQXN5bmM7XG5cbiAgICBhc3luYy5jb25zdGFudCA9IF9yZXN0UGFyYW0oZnVuY3Rpb24odmFsdWVzKSB7XG4gICAgICAgIHZhciBhcmdzID0gW251bGxdLmNvbmNhdCh2YWx1ZXMpO1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKGNhbGxiYWNrKSB7XG4gICAgICAgICAgICByZXR1cm4gY2FsbGJhY2suYXBwbHkodGhpcywgYXJncyk7XG4gICAgICAgIH07XG4gICAgfSk7XG5cbiAgICBhc3luYy53cmFwU3luYyA9XG4gICAgYXN5bmMuYXN5bmNpZnkgPSBmdW5jdGlvbiBhc3luY2lmeShmdW5jKSB7XG4gICAgICAgIHJldHVybiBfcmVzdFBhcmFtKGZ1bmN0aW9uIChhcmdzKSB7XG4gICAgICAgICAgICB2YXIgY2FsbGJhY2sgPSBhcmdzLnBvcCgpO1xuICAgICAgICAgICAgdmFyIHJlc3VsdDtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0ID0gZnVuYy5hcHBseSh0aGlzLCBhcmdzKTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gY2FsbGJhY2soZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBpZiByZXN1bHQgaXMgUHJvbWlzZSBvYmplY3RcbiAgICAgICAgICAgIGlmIChfaXNPYmplY3QocmVzdWx0KSAmJiB0eXBlb2YgcmVzdWx0LnRoZW4gPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICAgICAgICAgIHJlc3VsdC50aGVuKGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKG51bGwsIHZhbHVlKTtcbiAgICAgICAgICAgICAgICB9KVtcImNhdGNoXCJdKGZ1bmN0aW9uKGVycikge1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnIubWVzc2FnZSA/IGVyciA6IG5ldyBFcnJvcihlcnIpKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2sobnVsbCwgcmVzdWx0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfTtcblxuICAgIC8vIE5vZGUuanNcbiAgICBpZiAodHlwZW9mIG1vZHVsZSA9PT0gJ29iamVjdCcgJiYgbW9kdWxlLmV4cG9ydHMpIHtcbiAgICAgICAgbW9kdWxlLmV4cG9ydHMgPSBhc3luYztcbiAgICB9XG4gICAgLy8gQU1EIC8gUmVxdWlyZUpTXG4gICAgZWxzZSBpZiAodHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kKSB7XG4gICAgICAgIGRlZmluZShbXSwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIGFzeW5jO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgLy8gaW5jbHVkZWQgZGlyZWN0bHkgdmlhIDxzY3JpcHQ+IHRhZ1xuICAgIGVsc2Uge1xuICAgICAgICByb290LmFzeW5jID0gYXN5bmM7XG4gICAgfVxuXG59KCkpO1xuIiwiLy8gQ29weXJpZ2h0IEpveWVudCwgSW5jLiBhbmQgb3RoZXIgTm9kZSBjb250cmlidXRvcnMuXG4vL1xuLy8gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGFcbi8vIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGVcbi8vIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZ1xuLy8gd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLFxuLy8gZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdFxuLy8gcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlXG4vLyBmb2xsb3dpbmcgY29uZGl0aW9uczpcbi8vXG4vLyBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZFxuLy8gaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4vL1xuLy8gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTU1xuLy8gT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRlxuLy8gTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTlxuLy8gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sXG4vLyBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1Jcbi8vIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEVcbi8vIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG5cbi8vIHJlc29sdmVzIC4gYW5kIC4uIGVsZW1lbnRzIGluIGEgcGF0aCBhcnJheSB3aXRoIGRpcmVjdG9yeSBuYW1lcyB0aGVyZVxuLy8gbXVzdCBiZSBubyBzbGFzaGVzLCBlbXB0eSBlbGVtZW50cywgb3IgZGV2aWNlIG5hbWVzIChjOlxcKSBpbiB0aGUgYXJyYXlcbi8vIChzbyBhbHNvIG5vIGxlYWRpbmcgYW5kIHRyYWlsaW5nIHNsYXNoZXMgLSBpdCBkb2VzIG5vdCBkaXN0aW5ndWlzaFxuLy8gcmVsYXRpdmUgYW5kIGFic29sdXRlIHBhdGhzKVxuZnVuY3Rpb24gbm9ybWFsaXplQXJyYXkocGFydHMsIGFsbG93QWJvdmVSb290KSB7XG4gIC8vIGlmIHRoZSBwYXRoIHRyaWVzIHRvIGdvIGFib3ZlIHRoZSByb290LCBgdXBgIGVuZHMgdXAgPiAwXG4gIHZhciB1cCA9IDA7XG4gIGZvciAodmFyIGkgPSBwYXJ0cy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgIHZhciBsYXN0ID0gcGFydHNbaV07XG4gICAgaWYgKGxhc3QgPT09ICcuJykge1xuICAgICAgcGFydHMuc3BsaWNlKGksIDEpO1xuICAgIH0gZWxzZSBpZiAobGFzdCA9PT0gJy4uJykge1xuICAgICAgcGFydHMuc3BsaWNlKGksIDEpO1xuICAgICAgdXArKztcbiAgICB9IGVsc2UgaWYgKHVwKSB7XG4gICAgICBwYXJ0cy5zcGxpY2UoaSwgMSk7XG4gICAgICB1cC0tO1xuICAgIH1cbiAgfVxuXG4gIC8vIGlmIHRoZSBwYXRoIGlzIGFsbG93ZWQgdG8gZ28gYWJvdmUgdGhlIHJvb3QsIHJlc3RvcmUgbGVhZGluZyAuLnNcbiAgaWYgKGFsbG93QWJvdmVSb290KSB7XG4gICAgZm9yICg7IHVwLS07IHVwKSB7XG4gICAgICBwYXJ0cy51bnNoaWZ0KCcuLicpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBwYXJ0cztcbn1cblxuLy8gU3BsaXQgYSBmaWxlbmFtZSBpbnRvIFtyb290LCBkaXIsIGJhc2VuYW1lLCBleHRdLCB1bml4IHZlcnNpb25cbi8vICdyb290JyBpcyBqdXN0IGEgc2xhc2gsIG9yIG5vdGhpbmcuXG52YXIgc3BsaXRQYXRoUmUgPVxuICAgIC9eKFxcLz98KShbXFxzXFxTXSo/KSgoPzpcXC57MSwyfXxbXlxcL10rP3wpKFxcLlteLlxcL10qfCkpKD86W1xcL10qKSQvO1xudmFyIHNwbGl0UGF0aCA9IGZ1bmN0aW9uKGZpbGVuYW1lKSB7XG4gIHJldHVybiBzcGxpdFBhdGhSZS5leGVjKGZpbGVuYW1lKS5zbGljZSgxKTtcbn07XG5cbi8vIHBhdGgucmVzb2x2ZShbZnJvbSAuLi5dLCB0bylcbi8vIHBvc2l4IHZlcnNpb25cbmV4cG9ydHMucmVzb2x2ZSA9IGZ1bmN0aW9uKCkge1xuICB2YXIgcmVzb2x2ZWRQYXRoID0gJycsXG4gICAgICByZXNvbHZlZEFic29sdXRlID0gZmFsc2U7XG5cbiAgZm9yICh2YXIgaSA9IGFyZ3VtZW50cy5sZW5ndGggLSAxOyBpID49IC0xICYmICFyZXNvbHZlZEFic29sdXRlOyBpLS0pIHtcbiAgICB2YXIgcGF0aCA9IChpID49IDApID8gYXJndW1lbnRzW2ldIDogcHJvY2Vzcy5jd2QoKTtcblxuICAgIC8vIFNraXAgZW1wdHkgYW5kIGludmFsaWQgZW50cmllc1xuICAgIGlmICh0eXBlb2YgcGF0aCAhPT0gJ3N0cmluZycpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0FyZ3VtZW50cyB0byBwYXRoLnJlc29sdmUgbXVzdCBiZSBzdHJpbmdzJyk7XG4gICAgfSBlbHNlIGlmICghcGF0aCkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgcmVzb2x2ZWRQYXRoID0gcGF0aCArICcvJyArIHJlc29sdmVkUGF0aDtcbiAgICByZXNvbHZlZEFic29sdXRlID0gcGF0aC5jaGFyQXQoMCkgPT09ICcvJztcbiAgfVxuXG4gIC8vIEF0IHRoaXMgcG9pbnQgdGhlIHBhdGggc2hvdWxkIGJlIHJlc29sdmVkIHRvIGEgZnVsbCBhYnNvbHV0ZSBwYXRoLCBidXRcbiAgLy8gaGFuZGxlIHJlbGF0aXZlIHBhdGhzIHRvIGJlIHNhZmUgKG1pZ2h0IGhhcHBlbiB3aGVuIHByb2Nlc3MuY3dkKCkgZmFpbHMpXG5cbiAgLy8gTm9ybWFsaXplIHRoZSBwYXRoXG4gIHJlc29sdmVkUGF0aCA9IG5vcm1hbGl6ZUFycmF5KGZpbHRlcihyZXNvbHZlZFBhdGguc3BsaXQoJy8nKSwgZnVuY3Rpb24ocCkge1xuICAgIHJldHVybiAhIXA7XG4gIH0pLCAhcmVzb2x2ZWRBYnNvbHV0ZSkuam9pbignLycpO1xuXG4gIHJldHVybiAoKHJlc29sdmVkQWJzb2x1dGUgPyAnLycgOiAnJykgKyByZXNvbHZlZFBhdGgpIHx8ICcuJztcbn07XG5cbi8vIHBhdGgubm9ybWFsaXplKHBhdGgpXG4vLyBwb3NpeCB2ZXJzaW9uXG5leHBvcnRzLm5vcm1hbGl6ZSA9IGZ1bmN0aW9uKHBhdGgpIHtcbiAgdmFyIGlzQWJzb2x1dGUgPSBleHBvcnRzLmlzQWJzb2x1dGUocGF0aCksXG4gICAgICB0cmFpbGluZ1NsYXNoID0gc3Vic3RyKHBhdGgsIC0xKSA9PT0gJy8nO1xuXG4gIC8vIE5vcm1hbGl6ZSB0aGUgcGF0aFxuICBwYXRoID0gbm9ybWFsaXplQXJyYXkoZmlsdGVyKHBhdGguc3BsaXQoJy8nKSwgZnVuY3Rpb24ocCkge1xuICAgIHJldHVybiAhIXA7XG4gIH0pLCAhaXNBYnNvbHV0ZSkuam9pbignLycpO1xuXG4gIGlmICghcGF0aCAmJiAhaXNBYnNvbHV0ZSkge1xuICAgIHBhdGggPSAnLic7XG4gIH1cbiAgaWYgKHBhdGggJiYgdHJhaWxpbmdTbGFzaCkge1xuICAgIHBhdGggKz0gJy8nO1xuICB9XG5cbiAgcmV0dXJuIChpc0Fic29sdXRlID8gJy8nIDogJycpICsgcGF0aDtcbn07XG5cbi8vIHBvc2l4IHZlcnNpb25cbmV4cG9ydHMuaXNBYnNvbHV0ZSA9IGZ1bmN0aW9uKHBhdGgpIHtcbiAgcmV0dXJuIHBhdGguY2hhckF0KDApID09PSAnLyc7XG59O1xuXG4vLyBwb3NpeCB2ZXJzaW9uXG5leHBvcnRzLmpvaW4gPSBmdW5jdGlvbigpIHtcbiAgdmFyIHBhdGhzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAwKTtcbiAgcmV0dXJuIGV4cG9ydHMubm9ybWFsaXplKGZpbHRlcihwYXRocywgZnVuY3Rpb24ocCwgaW5kZXgpIHtcbiAgICBpZiAodHlwZW9mIHAgIT09ICdzdHJpbmcnKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdBcmd1bWVudHMgdG8gcGF0aC5qb2luIG11c3QgYmUgc3RyaW5ncycpO1xuICAgIH1cbiAgICByZXR1cm4gcDtcbiAgfSkuam9pbignLycpKTtcbn07XG5cblxuLy8gcGF0aC5yZWxhdGl2ZShmcm9tLCB0bylcbi8vIHBvc2l4IHZlcnNpb25cbmV4cG9ydHMucmVsYXRpdmUgPSBmdW5jdGlvbihmcm9tLCB0bykge1xuICBmcm9tID0gZXhwb3J0cy5yZXNvbHZlKGZyb20pLnN1YnN0cigxKTtcbiAgdG8gPSBleHBvcnRzLnJlc29sdmUodG8pLnN1YnN0cigxKTtcblxuICBmdW5jdGlvbiB0cmltKGFycikge1xuICAgIHZhciBzdGFydCA9IDA7XG4gICAgZm9yICg7IHN0YXJ0IDwgYXJyLmxlbmd0aDsgc3RhcnQrKykge1xuICAgICAgaWYgKGFycltzdGFydF0gIT09ICcnKSBicmVhaztcbiAgICB9XG5cbiAgICB2YXIgZW5kID0gYXJyLmxlbmd0aCAtIDE7XG4gICAgZm9yICg7IGVuZCA+PSAwOyBlbmQtLSkge1xuICAgICAgaWYgKGFycltlbmRdICE9PSAnJykgYnJlYWs7XG4gICAgfVxuXG4gICAgaWYgKHN0YXJ0ID4gZW5kKSByZXR1cm4gW107XG4gICAgcmV0dXJuIGFyci5zbGljZShzdGFydCwgZW5kIC0gc3RhcnQgKyAxKTtcbiAgfVxuXG4gIHZhciBmcm9tUGFydHMgPSB0cmltKGZyb20uc3BsaXQoJy8nKSk7XG4gIHZhciB0b1BhcnRzID0gdHJpbSh0by5zcGxpdCgnLycpKTtcblxuICB2YXIgbGVuZ3RoID0gTWF0aC5taW4oZnJvbVBhcnRzLmxlbmd0aCwgdG9QYXJ0cy5sZW5ndGgpO1xuICB2YXIgc2FtZVBhcnRzTGVuZ3RoID0gbGVuZ3RoO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgaWYgKGZyb21QYXJ0c1tpXSAhPT0gdG9QYXJ0c1tpXSkge1xuICAgICAgc2FtZVBhcnRzTGVuZ3RoID0gaTtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuXG4gIHZhciBvdXRwdXRQYXJ0cyA9IFtdO1xuICBmb3IgKHZhciBpID0gc2FtZVBhcnRzTGVuZ3RoOyBpIDwgZnJvbVBhcnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgb3V0cHV0UGFydHMucHVzaCgnLi4nKTtcbiAgfVxuXG4gIG91dHB1dFBhcnRzID0gb3V0cHV0UGFydHMuY29uY2F0KHRvUGFydHMuc2xpY2Uoc2FtZVBhcnRzTGVuZ3RoKSk7XG5cbiAgcmV0dXJuIG91dHB1dFBhcnRzLmpvaW4oJy8nKTtcbn07XG5cbmV4cG9ydHMuc2VwID0gJy8nO1xuZXhwb3J0cy5kZWxpbWl0ZXIgPSAnOic7XG5cbmV4cG9ydHMuZGlybmFtZSA9IGZ1bmN0aW9uKHBhdGgpIHtcbiAgdmFyIHJlc3VsdCA9IHNwbGl0UGF0aChwYXRoKSxcbiAgICAgIHJvb3QgPSByZXN1bHRbMF0sXG4gICAgICBkaXIgPSByZXN1bHRbMV07XG5cbiAgaWYgKCFyb290ICYmICFkaXIpIHtcbiAgICAvLyBObyBkaXJuYW1lIHdoYXRzb2V2ZXJcbiAgICByZXR1cm4gJy4nO1xuICB9XG5cbiAgaWYgKGRpcikge1xuICAgIC8vIEl0IGhhcyBhIGRpcm5hbWUsIHN0cmlwIHRyYWlsaW5nIHNsYXNoXG4gICAgZGlyID0gZGlyLnN1YnN0cigwLCBkaXIubGVuZ3RoIC0gMSk7XG4gIH1cblxuICByZXR1cm4gcm9vdCArIGRpcjtcbn07XG5cblxuZXhwb3J0cy5iYXNlbmFtZSA9IGZ1bmN0aW9uKHBhdGgsIGV4dCkge1xuICB2YXIgZiA9IHNwbGl0UGF0aChwYXRoKVsyXTtcbiAgLy8gVE9ETzogbWFrZSB0aGlzIGNvbXBhcmlzb24gY2FzZS1pbnNlbnNpdGl2ZSBvbiB3aW5kb3dzP1xuICBpZiAoZXh0ICYmIGYuc3Vic3RyKC0xICogZXh0Lmxlbmd0aCkgPT09IGV4dCkge1xuICAgIGYgPSBmLnN1YnN0cigwLCBmLmxlbmd0aCAtIGV4dC5sZW5ndGgpO1xuICB9XG4gIHJldHVybiBmO1xufTtcblxuXG5leHBvcnRzLmV4dG5hbWUgPSBmdW5jdGlvbihwYXRoKSB7XG4gIHJldHVybiBzcGxpdFBhdGgocGF0aClbM107XG59O1xuXG5mdW5jdGlvbiBmaWx0ZXIgKHhzLCBmKSB7XG4gICAgaWYgKHhzLmZpbHRlcikgcmV0dXJuIHhzLmZpbHRlcihmKTtcbiAgICB2YXIgcmVzID0gW107XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB4cy5sZW5ndGg7IGkrKykge1xuICAgICAgICBpZiAoZih4c1tpXSwgaSwgeHMpKSByZXMucHVzaCh4c1tpXSk7XG4gICAgfVxuICAgIHJldHVybiByZXM7XG59XG5cbi8vIFN0cmluZy5wcm90b3R5cGUuc3Vic3RyIC0gbmVnYXRpdmUgaW5kZXggZG9uJ3Qgd29yayBpbiBJRThcbnZhciBzdWJzdHIgPSAnYWInLnN1YnN0cigtMSkgPT09ICdiJ1xuICAgID8gZnVuY3Rpb24gKHN0ciwgc3RhcnQsIGxlbikgeyByZXR1cm4gc3RyLnN1YnN0cihzdGFydCwgbGVuKSB9XG4gICAgOiBmdW5jdGlvbiAoc3RyLCBzdGFydCwgbGVuKSB7XG4gICAgICAgIGlmIChzdGFydCA8IDApIHN0YXJ0ID0gc3RyLmxlbmd0aCArIHN0YXJ0O1xuICAgICAgICByZXR1cm4gc3RyLnN1YnN0cihzdGFydCwgbGVuKTtcbiAgICB9XG47XG4iLCIvLyBzaGltIGZvciB1c2luZyBwcm9jZXNzIGluIGJyb3dzZXJcblxudmFyIHByb2Nlc3MgPSBtb2R1bGUuZXhwb3J0cyA9IHt9O1xudmFyIHF1ZXVlID0gW107XG52YXIgZHJhaW5pbmcgPSBmYWxzZTtcbnZhciBjdXJyZW50UXVldWU7XG52YXIgcXVldWVJbmRleCA9IC0xO1xuXG5mdW5jdGlvbiBjbGVhblVwTmV4dFRpY2soKSB7XG4gICAgZHJhaW5pbmcgPSBmYWxzZTtcbiAgICBpZiAoY3VycmVudFF1ZXVlLmxlbmd0aCkge1xuICAgICAgICBxdWV1ZSA9IGN1cnJlbnRRdWV1ZS5jb25jYXQocXVldWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHF1ZXVlSW5kZXggPSAtMTtcbiAgICB9XG4gICAgaWYgKHF1ZXVlLmxlbmd0aCkge1xuICAgICAgICBkcmFpblF1ZXVlKCk7XG4gICAgfVxufVxuXG5mdW5jdGlvbiBkcmFpblF1ZXVlKCkge1xuICAgIGlmIChkcmFpbmluZykge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIHZhciB0aW1lb3V0ID0gc2V0VGltZW91dChjbGVhblVwTmV4dFRpY2spO1xuICAgIGRyYWluaW5nID0gdHJ1ZTtcblxuICAgIHZhciBsZW4gPSBxdWV1ZS5sZW5ndGg7XG4gICAgd2hpbGUobGVuKSB7XG4gICAgICAgIGN1cnJlbnRRdWV1ZSA9IHF1ZXVlO1xuICAgICAgICBxdWV1ZSA9IFtdO1xuICAgICAgICB3aGlsZSAoKytxdWV1ZUluZGV4IDwgbGVuKSB7XG4gICAgICAgICAgICBpZiAoY3VycmVudFF1ZXVlKSB7XG4gICAgICAgICAgICAgICAgY3VycmVudFF1ZXVlW3F1ZXVlSW5kZXhdLnJ1bigpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHF1ZXVlSW5kZXggPSAtMTtcbiAgICAgICAgbGVuID0gcXVldWUubGVuZ3RoO1xuICAgIH1cbiAgICBjdXJyZW50UXVldWUgPSBudWxsO1xuICAgIGRyYWluaW5nID0gZmFsc2U7XG4gICAgY2xlYXJUaW1lb3V0KHRpbWVvdXQpO1xufVxuXG5wcm9jZXNzLm5leHRUaWNrID0gZnVuY3Rpb24gKGZ1bikge1xuICAgIHZhciBhcmdzID0gbmV3IEFycmF5KGFyZ3VtZW50cy5sZW5ndGggLSAxKTtcbiAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGFyZ3NbaSAtIDFdID0gYXJndW1lbnRzW2ldO1xuICAgICAgICB9XG4gICAgfVxuICAgIHF1ZXVlLnB1c2gobmV3IEl0ZW0oZnVuLCBhcmdzKSk7XG4gICAgaWYgKHF1ZXVlLmxlbmd0aCA9PT0gMSAmJiAhZHJhaW5pbmcpIHtcbiAgICAgICAgc2V0VGltZW91dChkcmFpblF1ZXVlLCAwKTtcbiAgICB9XG59O1xuXG4vLyB2OCBsaWtlcyBwcmVkaWN0aWJsZSBvYmplY3RzXG5mdW5jdGlvbiBJdGVtKGZ1biwgYXJyYXkpIHtcbiAgICB0aGlzLmZ1biA9IGZ1bjtcbiAgICB0aGlzLmFycmF5ID0gYXJyYXk7XG59XG5JdGVtLnByb3RvdHlwZS5ydW4gPSBmdW5jdGlvbiAoKSB7XG4gICAgdGhpcy5mdW4uYXBwbHkobnVsbCwgdGhpcy5hcnJheSk7XG59O1xucHJvY2Vzcy50aXRsZSA9ICdicm93c2VyJztcbnByb2Nlc3MuYnJvd3NlciA9IHRydWU7XG5wcm9jZXNzLmVudiA9IHt9O1xucHJvY2Vzcy5hcmd2ID0gW107XG5wcm9jZXNzLnZlcnNpb24gPSAnJzsgLy8gZW1wdHkgc3RyaW5nIHRvIGF2b2lkIHJlZ2V4cCBpc3N1ZXNcbnByb2Nlc3MudmVyc2lvbnMgPSB7fTtcblxuZnVuY3Rpb24gbm9vcCgpIHt9XG5cbnByb2Nlc3Mub24gPSBub29wO1xucHJvY2Vzcy5hZGRMaXN0ZW5lciA9IG5vb3A7XG5wcm9jZXNzLm9uY2UgPSBub29wO1xucHJvY2Vzcy5vZmYgPSBub29wO1xucHJvY2Vzcy5yZW1vdmVMaXN0ZW5lciA9IG5vb3A7XG5wcm9jZXNzLnJlbW92ZUFsbExpc3RlbmVycyA9IG5vb3A7XG5wcm9jZXNzLmVtaXQgPSBub29wO1xuXG5wcm9jZXNzLmJpbmRpbmcgPSBmdW5jdGlvbiAobmFtZSkge1xuICAgIHRocm93IG5ldyBFcnJvcigncHJvY2Vzcy5iaW5kaW5nIGlzIG5vdCBzdXBwb3J0ZWQnKTtcbn07XG5cbnByb2Nlc3MuY3dkID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gJy8nIH07XG5wcm9jZXNzLmNoZGlyID0gZnVuY3Rpb24gKGRpcikge1xuICAgIHRocm93IG5ldyBFcnJvcigncHJvY2Vzcy5jaGRpciBpcyBub3Qgc3VwcG9ydGVkJyk7XG59O1xucHJvY2Vzcy51bWFzayA9IGZ1bmN0aW9uKCkgeyByZXR1cm4gMDsgfTtcbiIsIi8qISBodHRwczovL210aHMuYmUvcHVueWNvZGUgdjEuNC4wIGJ5IEBtYXRoaWFzICovXG47KGZ1bmN0aW9uKHJvb3QpIHtcblxuXHQvKiogRGV0ZWN0IGZyZWUgdmFyaWFibGVzICovXG5cdHZhciBmcmVlRXhwb3J0cyA9IHR5cGVvZiBleHBvcnRzID09ICdvYmplY3QnICYmIGV4cG9ydHMgJiZcblx0XHQhZXhwb3J0cy5ub2RlVHlwZSAmJiBleHBvcnRzO1xuXHR2YXIgZnJlZU1vZHVsZSA9IHR5cGVvZiBtb2R1bGUgPT0gJ29iamVjdCcgJiYgbW9kdWxlICYmXG5cdFx0IW1vZHVsZS5ub2RlVHlwZSAmJiBtb2R1bGU7XG5cdHZhciBmcmVlR2xvYmFsID0gdHlwZW9mIGdsb2JhbCA9PSAnb2JqZWN0JyAmJiBnbG9iYWw7XG5cdGlmIChcblx0XHRmcmVlR2xvYmFsLmdsb2JhbCA9PT0gZnJlZUdsb2JhbCB8fFxuXHRcdGZyZWVHbG9iYWwud2luZG93ID09PSBmcmVlR2xvYmFsIHx8XG5cdFx0ZnJlZUdsb2JhbC5zZWxmID09PSBmcmVlR2xvYmFsXG5cdCkge1xuXHRcdHJvb3QgPSBmcmVlR2xvYmFsO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoZSBgcHVueWNvZGVgIG9iamVjdC5cblx0ICogQG5hbWUgcHVueWNvZGVcblx0ICogQHR5cGUgT2JqZWN0XG5cdCAqL1xuXHR2YXIgcHVueWNvZGUsXG5cblx0LyoqIEhpZ2hlc3QgcG9zaXRpdmUgc2lnbmVkIDMyLWJpdCBmbG9hdCB2YWx1ZSAqL1xuXHRtYXhJbnQgPSAyMTQ3NDgzNjQ3LCAvLyBha2EuIDB4N0ZGRkZGRkYgb3IgMl4zMS0xXG5cblx0LyoqIEJvb3RzdHJpbmcgcGFyYW1ldGVycyAqL1xuXHRiYXNlID0gMzYsXG5cdHRNaW4gPSAxLFxuXHR0TWF4ID0gMjYsXG5cdHNrZXcgPSAzOCxcblx0ZGFtcCA9IDcwMCxcblx0aW5pdGlhbEJpYXMgPSA3Mixcblx0aW5pdGlhbE4gPSAxMjgsIC8vIDB4ODBcblx0ZGVsaW1pdGVyID0gJy0nLCAvLyAnXFx4MkQnXG5cblx0LyoqIFJlZ3VsYXIgZXhwcmVzc2lvbnMgKi9cblx0cmVnZXhQdW55Y29kZSA9IC9eeG4tLS8sXG5cdHJlZ2V4Tm9uQVNDSUkgPSAvW15cXHgyMC1cXHg3RV0vLCAvLyB1bnByaW50YWJsZSBBU0NJSSBjaGFycyArIG5vbi1BU0NJSSBjaGFyc1xuXHRyZWdleFNlcGFyYXRvcnMgPSAvW1xceDJFXFx1MzAwMlxcdUZGMEVcXHVGRjYxXS9nLCAvLyBSRkMgMzQ5MCBzZXBhcmF0b3JzXG5cblx0LyoqIEVycm9yIG1lc3NhZ2VzICovXG5cdGVycm9ycyA9IHtcblx0XHQnb3ZlcmZsb3cnOiAnT3ZlcmZsb3c6IGlucHV0IG5lZWRzIHdpZGVyIGludGVnZXJzIHRvIHByb2Nlc3MnLFxuXHRcdCdub3QtYmFzaWMnOiAnSWxsZWdhbCBpbnB1dCA+PSAweDgwIChub3QgYSBiYXNpYyBjb2RlIHBvaW50KScsXG5cdFx0J2ludmFsaWQtaW5wdXQnOiAnSW52YWxpZCBpbnB1dCdcblx0fSxcblxuXHQvKiogQ29udmVuaWVuY2Ugc2hvcnRjdXRzICovXG5cdGJhc2VNaW51c1RNaW4gPSBiYXNlIC0gdE1pbixcblx0Zmxvb3IgPSBNYXRoLmZsb29yLFxuXHRzdHJpbmdGcm9tQ2hhckNvZGUgPSBTdHJpbmcuZnJvbUNoYXJDb2RlLFxuXG5cdC8qKiBUZW1wb3JhcnkgdmFyaWFibGUgKi9cblx0a2V5O1xuXG5cdC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuXG5cdC8qKlxuXHQgKiBBIGdlbmVyaWMgZXJyb3IgdXRpbGl0eSBmdW5jdGlvbi5cblx0ICogQHByaXZhdGVcblx0ICogQHBhcmFtIHtTdHJpbmd9IHR5cGUgVGhlIGVycm9yIHR5cGUuXG5cdCAqIEByZXR1cm5zIHtFcnJvcn0gVGhyb3dzIGEgYFJhbmdlRXJyb3JgIHdpdGggdGhlIGFwcGxpY2FibGUgZXJyb3IgbWVzc2FnZS5cblx0ICovXG5cdGZ1bmN0aW9uIGVycm9yKHR5cGUpIHtcblx0XHR0aHJvdyBuZXcgUmFuZ2VFcnJvcihlcnJvcnNbdHlwZV0pO1xuXHR9XG5cblx0LyoqXG5cdCAqIEEgZ2VuZXJpYyBgQXJyYXkjbWFwYCB1dGlsaXR5IGZ1bmN0aW9uLlxuXHQgKiBAcHJpdmF0ZVxuXHQgKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gaXRlcmF0ZSBvdmVyLlxuXHQgKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFjayBUaGUgZnVuY3Rpb24gdGhhdCBnZXRzIGNhbGxlZCBmb3IgZXZlcnkgYXJyYXlcblx0ICogaXRlbS5cblx0ICogQHJldHVybnMge0FycmF5fSBBIG5ldyBhcnJheSBvZiB2YWx1ZXMgcmV0dXJuZWQgYnkgdGhlIGNhbGxiYWNrIGZ1bmN0aW9uLlxuXHQgKi9cblx0ZnVuY3Rpb24gbWFwKGFycmF5LCBmbikge1xuXHRcdHZhciBsZW5ndGggPSBhcnJheS5sZW5ndGg7XG5cdFx0dmFyIHJlc3VsdCA9IFtdO1xuXHRcdHdoaWxlIChsZW5ndGgtLSkge1xuXHRcdFx0cmVzdWx0W2xlbmd0aF0gPSBmbihhcnJheVtsZW5ndGhdKTtcblx0XHR9XG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fVxuXG5cdC8qKlxuXHQgKiBBIHNpbXBsZSBgQXJyYXkjbWFwYC1saWtlIHdyYXBwZXIgdG8gd29yayB3aXRoIGRvbWFpbiBuYW1lIHN0cmluZ3Mgb3IgZW1haWxcblx0ICogYWRkcmVzc2VzLlxuXHQgKiBAcHJpdmF0ZVxuXHQgKiBAcGFyYW0ge1N0cmluZ30gZG9tYWluIFRoZSBkb21haW4gbmFtZSBvciBlbWFpbCBhZGRyZXNzLlxuXHQgKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFjayBUaGUgZnVuY3Rpb24gdGhhdCBnZXRzIGNhbGxlZCBmb3IgZXZlcnlcblx0ICogY2hhcmFjdGVyLlxuXHQgKiBAcmV0dXJucyB7QXJyYXl9IEEgbmV3IHN0cmluZyBvZiBjaGFyYWN0ZXJzIHJldHVybmVkIGJ5IHRoZSBjYWxsYmFja1xuXHQgKiBmdW5jdGlvbi5cblx0ICovXG5cdGZ1bmN0aW9uIG1hcERvbWFpbihzdHJpbmcsIGZuKSB7XG5cdFx0dmFyIHBhcnRzID0gc3RyaW5nLnNwbGl0KCdAJyk7XG5cdFx0dmFyIHJlc3VsdCA9ICcnO1xuXHRcdGlmIChwYXJ0cy5sZW5ndGggPiAxKSB7XG5cdFx0XHQvLyBJbiBlbWFpbCBhZGRyZXNzZXMsIG9ubHkgdGhlIGRvbWFpbiBuYW1lIHNob3VsZCBiZSBwdW55Y29kZWQuIExlYXZlXG5cdFx0XHQvLyB0aGUgbG9jYWwgcGFydCAoaS5lLiBldmVyeXRoaW5nIHVwIHRvIGBAYCkgaW50YWN0LlxuXHRcdFx0cmVzdWx0ID0gcGFydHNbMF0gKyAnQCc7XG5cdFx0XHRzdHJpbmcgPSBwYXJ0c1sxXTtcblx0XHR9XG5cdFx0Ly8gQXZvaWQgYHNwbGl0KHJlZ2V4KWAgZm9yIElFOCBjb21wYXRpYmlsaXR5LiBTZWUgIzE3LlxuXHRcdHN0cmluZyA9IHN0cmluZy5yZXBsYWNlKHJlZ2V4U2VwYXJhdG9ycywgJ1xceDJFJyk7XG5cdFx0dmFyIGxhYmVscyA9IHN0cmluZy5zcGxpdCgnLicpO1xuXHRcdHZhciBlbmNvZGVkID0gbWFwKGxhYmVscywgZm4pLmpvaW4oJy4nKTtcblx0XHRyZXR1cm4gcmVzdWx0ICsgZW5jb2RlZDtcblx0fVxuXG5cdC8qKlxuXHQgKiBDcmVhdGVzIGFuIGFycmF5IGNvbnRhaW5pbmcgdGhlIG51bWVyaWMgY29kZSBwb2ludHMgb2YgZWFjaCBVbmljb2RlXG5cdCAqIGNoYXJhY3RlciBpbiB0aGUgc3RyaW5nLiBXaGlsZSBKYXZhU2NyaXB0IHVzZXMgVUNTLTIgaW50ZXJuYWxseSxcblx0ICogdGhpcyBmdW5jdGlvbiB3aWxsIGNvbnZlcnQgYSBwYWlyIG9mIHN1cnJvZ2F0ZSBoYWx2ZXMgKGVhY2ggb2Ygd2hpY2hcblx0ICogVUNTLTIgZXhwb3NlcyBhcyBzZXBhcmF0ZSBjaGFyYWN0ZXJzKSBpbnRvIGEgc2luZ2xlIGNvZGUgcG9pbnQsXG5cdCAqIG1hdGNoaW5nIFVURi0xNi5cblx0ICogQHNlZSBgcHVueWNvZGUudWNzMi5lbmNvZGVgXG5cdCAqIEBzZWUgPGh0dHBzOi8vbWF0aGlhc2J5bmVucy5iZS9ub3Rlcy9qYXZhc2NyaXB0LWVuY29kaW5nPlxuXHQgKiBAbWVtYmVyT2YgcHVueWNvZGUudWNzMlxuXHQgKiBAbmFtZSBkZWNvZGVcblx0ICogQHBhcmFtIHtTdHJpbmd9IHN0cmluZyBUaGUgVW5pY29kZSBpbnB1dCBzdHJpbmcgKFVDUy0yKS5cblx0ICogQHJldHVybnMge0FycmF5fSBUaGUgbmV3IGFycmF5IG9mIGNvZGUgcG9pbnRzLlxuXHQgKi9cblx0ZnVuY3Rpb24gdWNzMmRlY29kZShzdHJpbmcpIHtcblx0XHR2YXIgb3V0cHV0ID0gW10sXG5cdFx0ICAgIGNvdW50ZXIgPSAwLFxuXHRcdCAgICBsZW5ndGggPSBzdHJpbmcubGVuZ3RoLFxuXHRcdCAgICB2YWx1ZSxcblx0XHQgICAgZXh0cmE7XG5cdFx0d2hpbGUgKGNvdW50ZXIgPCBsZW5ndGgpIHtcblx0XHRcdHZhbHVlID0gc3RyaW5nLmNoYXJDb2RlQXQoY291bnRlcisrKTtcblx0XHRcdGlmICh2YWx1ZSA+PSAweEQ4MDAgJiYgdmFsdWUgPD0gMHhEQkZGICYmIGNvdW50ZXIgPCBsZW5ndGgpIHtcblx0XHRcdFx0Ly8gaGlnaCBzdXJyb2dhdGUsIGFuZCB0aGVyZSBpcyBhIG5leHQgY2hhcmFjdGVyXG5cdFx0XHRcdGV4dHJhID0gc3RyaW5nLmNoYXJDb2RlQXQoY291bnRlcisrKTtcblx0XHRcdFx0aWYgKChleHRyYSAmIDB4RkMwMCkgPT0gMHhEQzAwKSB7IC8vIGxvdyBzdXJyb2dhdGVcblx0XHRcdFx0XHRvdXRwdXQucHVzaCgoKHZhbHVlICYgMHgzRkYpIDw8IDEwKSArIChleHRyYSAmIDB4M0ZGKSArIDB4MTAwMDApO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdC8vIHVubWF0Y2hlZCBzdXJyb2dhdGU7IG9ubHkgYXBwZW5kIHRoaXMgY29kZSB1bml0LCBpbiBjYXNlIHRoZSBuZXh0XG5cdFx0XHRcdFx0Ly8gY29kZSB1bml0IGlzIHRoZSBoaWdoIHN1cnJvZ2F0ZSBvZiBhIHN1cnJvZ2F0ZSBwYWlyXG5cdFx0XHRcdFx0b3V0cHV0LnB1c2godmFsdWUpO1xuXHRcdFx0XHRcdGNvdW50ZXItLTtcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0b3V0cHV0LnB1c2godmFsdWUpO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gb3V0cHV0O1xuXHR9XG5cblx0LyoqXG5cdCAqIENyZWF0ZXMgYSBzdHJpbmcgYmFzZWQgb24gYW4gYXJyYXkgb2YgbnVtZXJpYyBjb2RlIHBvaW50cy5cblx0ICogQHNlZSBgcHVueWNvZGUudWNzMi5kZWNvZGVgXG5cdCAqIEBtZW1iZXJPZiBwdW55Y29kZS51Y3MyXG5cdCAqIEBuYW1lIGVuY29kZVxuXHQgKiBAcGFyYW0ge0FycmF5fSBjb2RlUG9pbnRzIFRoZSBhcnJheSBvZiBudW1lcmljIGNvZGUgcG9pbnRzLlxuXHQgKiBAcmV0dXJucyB7U3RyaW5nfSBUaGUgbmV3IFVuaWNvZGUgc3RyaW5nIChVQ1MtMikuXG5cdCAqL1xuXHRmdW5jdGlvbiB1Y3MyZW5jb2RlKGFycmF5KSB7XG5cdFx0cmV0dXJuIG1hcChhcnJheSwgZnVuY3Rpb24odmFsdWUpIHtcblx0XHRcdHZhciBvdXRwdXQgPSAnJztcblx0XHRcdGlmICh2YWx1ZSA+IDB4RkZGRikge1xuXHRcdFx0XHR2YWx1ZSAtPSAweDEwMDAwO1xuXHRcdFx0XHRvdXRwdXQgKz0gc3RyaW5nRnJvbUNoYXJDb2RlKHZhbHVlID4+PiAxMCAmIDB4M0ZGIHwgMHhEODAwKTtcblx0XHRcdFx0dmFsdWUgPSAweERDMDAgfCB2YWx1ZSAmIDB4M0ZGO1xuXHRcdFx0fVxuXHRcdFx0b3V0cHV0ICs9IHN0cmluZ0Zyb21DaGFyQ29kZSh2YWx1ZSk7XG5cdFx0XHRyZXR1cm4gb3V0cHV0O1xuXHRcdH0pLmpvaW4oJycpO1xuXHR9XG5cblx0LyoqXG5cdCAqIENvbnZlcnRzIGEgYmFzaWMgY29kZSBwb2ludCBpbnRvIGEgZGlnaXQvaW50ZWdlci5cblx0ICogQHNlZSBgZGlnaXRUb0Jhc2ljKClgXG5cdCAqIEBwcml2YXRlXG5cdCAqIEBwYXJhbSB7TnVtYmVyfSBjb2RlUG9pbnQgVGhlIGJhc2ljIG51bWVyaWMgY29kZSBwb2ludCB2YWx1ZS5cblx0ICogQHJldHVybnMge051bWJlcn0gVGhlIG51bWVyaWMgdmFsdWUgb2YgYSBiYXNpYyBjb2RlIHBvaW50IChmb3IgdXNlIGluXG5cdCAqIHJlcHJlc2VudGluZyBpbnRlZ2VycykgaW4gdGhlIHJhbmdlIGAwYCB0byBgYmFzZSAtIDFgLCBvciBgYmFzZWAgaWZcblx0ICogdGhlIGNvZGUgcG9pbnQgZG9lcyBub3QgcmVwcmVzZW50IGEgdmFsdWUuXG5cdCAqL1xuXHRmdW5jdGlvbiBiYXNpY1RvRGlnaXQoY29kZVBvaW50KSB7XG5cdFx0aWYgKGNvZGVQb2ludCAtIDQ4IDwgMTApIHtcblx0XHRcdHJldHVybiBjb2RlUG9pbnQgLSAyMjtcblx0XHR9XG5cdFx0aWYgKGNvZGVQb2ludCAtIDY1IDwgMjYpIHtcblx0XHRcdHJldHVybiBjb2RlUG9pbnQgLSA2NTtcblx0XHR9XG5cdFx0aWYgKGNvZGVQb2ludCAtIDk3IDwgMjYpIHtcblx0XHRcdHJldHVybiBjb2RlUG9pbnQgLSA5Nztcblx0XHR9XG5cdFx0cmV0dXJuIGJhc2U7XG5cdH1cblxuXHQvKipcblx0ICogQ29udmVydHMgYSBkaWdpdC9pbnRlZ2VyIGludG8gYSBiYXNpYyBjb2RlIHBvaW50LlxuXHQgKiBAc2VlIGBiYXNpY1RvRGlnaXQoKWBcblx0ICogQHByaXZhdGVcblx0ICogQHBhcmFtIHtOdW1iZXJ9IGRpZ2l0IFRoZSBudW1lcmljIHZhbHVlIG9mIGEgYmFzaWMgY29kZSBwb2ludC5cblx0ICogQHJldHVybnMge051bWJlcn0gVGhlIGJhc2ljIGNvZGUgcG9pbnQgd2hvc2UgdmFsdWUgKHdoZW4gdXNlZCBmb3Jcblx0ICogcmVwcmVzZW50aW5nIGludGVnZXJzKSBpcyBgZGlnaXRgLCB3aGljaCBuZWVkcyB0byBiZSBpbiB0aGUgcmFuZ2Vcblx0ICogYDBgIHRvIGBiYXNlIC0gMWAuIElmIGBmbGFnYCBpcyBub24temVybywgdGhlIHVwcGVyY2FzZSBmb3JtIGlzXG5cdCAqIHVzZWQ7IGVsc2UsIHRoZSBsb3dlcmNhc2UgZm9ybSBpcyB1c2VkLiBUaGUgYmVoYXZpb3IgaXMgdW5kZWZpbmVkXG5cdCAqIGlmIGBmbGFnYCBpcyBub24temVybyBhbmQgYGRpZ2l0YCBoYXMgbm8gdXBwZXJjYXNlIGZvcm0uXG5cdCAqL1xuXHRmdW5jdGlvbiBkaWdpdFRvQmFzaWMoZGlnaXQsIGZsYWcpIHtcblx0XHQvLyAgMC4uMjUgbWFwIHRvIEFTQ0lJIGEuLnogb3IgQS4uWlxuXHRcdC8vIDI2Li4zNSBtYXAgdG8gQVNDSUkgMC4uOVxuXHRcdHJldHVybiBkaWdpdCArIDIyICsgNzUgKiAoZGlnaXQgPCAyNikgLSAoKGZsYWcgIT0gMCkgPDwgNSk7XG5cdH1cblxuXHQvKipcblx0ICogQmlhcyBhZGFwdGF0aW9uIGZ1bmN0aW9uIGFzIHBlciBzZWN0aW9uIDMuNCBvZiBSRkMgMzQ5Mi5cblx0ICogaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzM0OTIjc2VjdGlvbi0zLjRcblx0ICogQHByaXZhdGVcblx0ICovXG5cdGZ1bmN0aW9uIGFkYXB0KGRlbHRhLCBudW1Qb2ludHMsIGZpcnN0VGltZSkge1xuXHRcdHZhciBrID0gMDtcblx0XHRkZWx0YSA9IGZpcnN0VGltZSA/IGZsb29yKGRlbHRhIC8gZGFtcCkgOiBkZWx0YSA+PiAxO1xuXHRcdGRlbHRhICs9IGZsb29yKGRlbHRhIC8gbnVtUG9pbnRzKTtcblx0XHRmb3IgKC8qIG5vIGluaXRpYWxpemF0aW9uICovOyBkZWx0YSA+IGJhc2VNaW51c1RNaW4gKiB0TWF4ID4+IDE7IGsgKz0gYmFzZSkge1xuXHRcdFx0ZGVsdGEgPSBmbG9vcihkZWx0YSAvIGJhc2VNaW51c1RNaW4pO1xuXHRcdH1cblx0XHRyZXR1cm4gZmxvb3IoayArIChiYXNlTWludXNUTWluICsgMSkgKiBkZWx0YSAvIChkZWx0YSArIHNrZXcpKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBDb252ZXJ0cyBhIFB1bnljb2RlIHN0cmluZyBvZiBBU0NJSS1vbmx5IHN5bWJvbHMgdG8gYSBzdHJpbmcgb2YgVW5pY29kZVxuXHQgKiBzeW1ib2xzLlxuXHQgKiBAbWVtYmVyT2YgcHVueWNvZGVcblx0ICogQHBhcmFtIHtTdHJpbmd9IGlucHV0IFRoZSBQdW55Y29kZSBzdHJpbmcgb2YgQVNDSUktb25seSBzeW1ib2xzLlxuXHQgKiBAcmV0dXJucyB7U3RyaW5nfSBUaGUgcmVzdWx0aW5nIHN0cmluZyBvZiBVbmljb2RlIHN5bWJvbHMuXG5cdCAqL1xuXHRmdW5jdGlvbiBkZWNvZGUoaW5wdXQpIHtcblx0XHQvLyBEb24ndCB1c2UgVUNTLTJcblx0XHR2YXIgb3V0cHV0ID0gW10sXG5cdFx0ICAgIGlucHV0TGVuZ3RoID0gaW5wdXQubGVuZ3RoLFxuXHRcdCAgICBvdXQsXG5cdFx0ICAgIGkgPSAwLFxuXHRcdCAgICBuID0gaW5pdGlhbE4sXG5cdFx0ICAgIGJpYXMgPSBpbml0aWFsQmlhcyxcblx0XHQgICAgYmFzaWMsXG5cdFx0ICAgIGosXG5cdFx0ICAgIGluZGV4LFxuXHRcdCAgICBvbGRpLFxuXHRcdCAgICB3LFxuXHRcdCAgICBrLFxuXHRcdCAgICBkaWdpdCxcblx0XHQgICAgdCxcblx0XHQgICAgLyoqIENhY2hlZCBjYWxjdWxhdGlvbiByZXN1bHRzICovXG5cdFx0ICAgIGJhc2VNaW51c1Q7XG5cblx0XHQvLyBIYW5kbGUgdGhlIGJhc2ljIGNvZGUgcG9pbnRzOiBsZXQgYGJhc2ljYCBiZSB0aGUgbnVtYmVyIG9mIGlucHV0IGNvZGVcblx0XHQvLyBwb2ludHMgYmVmb3JlIHRoZSBsYXN0IGRlbGltaXRlciwgb3IgYDBgIGlmIHRoZXJlIGlzIG5vbmUsIHRoZW4gY29weVxuXHRcdC8vIHRoZSBmaXJzdCBiYXNpYyBjb2RlIHBvaW50cyB0byB0aGUgb3V0cHV0LlxuXG5cdFx0YmFzaWMgPSBpbnB1dC5sYXN0SW5kZXhPZihkZWxpbWl0ZXIpO1xuXHRcdGlmIChiYXNpYyA8IDApIHtcblx0XHRcdGJhc2ljID0gMDtcblx0XHR9XG5cblx0XHRmb3IgKGogPSAwOyBqIDwgYmFzaWM7ICsraikge1xuXHRcdFx0Ly8gaWYgaXQncyBub3QgYSBiYXNpYyBjb2RlIHBvaW50XG5cdFx0XHRpZiAoaW5wdXQuY2hhckNvZGVBdChqKSA+PSAweDgwKSB7XG5cdFx0XHRcdGVycm9yKCdub3QtYmFzaWMnKTtcblx0XHRcdH1cblx0XHRcdG91dHB1dC5wdXNoKGlucHV0LmNoYXJDb2RlQXQoaikpO1xuXHRcdH1cblxuXHRcdC8vIE1haW4gZGVjb2RpbmcgbG9vcDogc3RhcnQganVzdCBhZnRlciB0aGUgbGFzdCBkZWxpbWl0ZXIgaWYgYW55IGJhc2ljIGNvZGVcblx0XHQvLyBwb2ludHMgd2VyZSBjb3BpZWQ7IHN0YXJ0IGF0IHRoZSBiZWdpbm5pbmcgb3RoZXJ3aXNlLlxuXG5cdFx0Zm9yIChpbmRleCA9IGJhc2ljID4gMCA/IGJhc2ljICsgMSA6IDA7IGluZGV4IDwgaW5wdXRMZW5ndGg7IC8qIG5vIGZpbmFsIGV4cHJlc3Npb24gKi8pIHtcblxuXHRcdFx0Ly8gYGluZGV4YCBpcyB0aGUgaW5kZXggb2YgdGhlIG5leHQgY2hhcmFjdGVyIHRvIGJlIGNvbnN1bWVkLlxuXHRcdFx0Ly8gRGVjb2RlIGEgZ2VuZXJhbGl6ZWQgdmFyaWFibGUtbGVuZ3RoIGludGVnZXIgaW50byBgZGVsdGFgLFxuXHRcdFx0Ly8gd2hpY2ggZ2V0cyBhZGRlZCB0byBgaWAuIFRoZSBvdmVyZmxvdyBjaGVja2luZyBpcyBlYXNpZXJcblx0XHRcdC8vIGlmIHdlIGluY3JlYXNlIGBpYCBhcyB3ZSBnbywgdGhlbiBzdWJ0cmFjdCBvZmYgaXRzIHN0YXJ0aW5nXG5cdFx0XHQvLyB2YWx1ZSBhdCB0aGUgZW5kIHRvIG9idGFpbiBgZGVsdGFgLlxuXHRcdFx0Zm9yIChvbGRpID0gaSwgdyA9IDEsIGsgPSBiYXNlOyAvKiBubyBjb25kaXRpb24gKi87IGsgKz0gYmFzZSkge1xuXG5cdFx0XHRcdGlmIChpbmRleCA+PSBpbnB1dExlbmd0aCkge1xuXHRcdFx0XHRcdGVycm9yKCdpbnZhbGlkLWlucHV0Jyk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRkaWdpdCA9IGJhc2ljVG9EaWdpdChpbnB1dC5jaGFyQ29kZUF0KGluZGV4KyspKTtcblxuXHRcdFx0XHRpZiAoZGlnaXQgPj0gYmFzZSB8fCBkaWdpdCA+IGZsb29yKChtYXhJbnQgLSBpKSAvIHcpKSB7XG5cdFx0XHRcdFx0ZXJyb3IoJ292ZXJmbG93Jyk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpICs9IGRpZ2l0ICogdztcblx0XHRcdFx0dCA9IGsgPD0gYmlhcyA/IHRNaW4gOiAoayA+PSBiaWFzICsgdE1heCA/IHRNYXggOiBrIC0gYmlhcyk7XG5cblx0XHRcdFx0aWYgKGRpZ2l0IDwgdCkge1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0YmFzZU1pbnVzVCA9IGJhc2UgLSB0O1xuXHRcdFx0XHRpZiAodyA+IGZsb29yKG1heEludCAvIGJhc2VNaW51c1QpKSB7XG5cdFx0XHRcdFx0ZXJyb3IoJ292ZXJmbG93Jyk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHR3ICo9IGJhc2VNaW51c1Q7XG5cblx0XHRcdH1cblxuXHRcdFx0b3V0ID0gb3V0cHV0Lmxlbmd0aCArIDE7XG5cdFx0XHRiaWFzID0gYWRhcHQoaSAtIG9sZGksIG91dCwgb2xkaSA9PSAwKTtcblxuXHRcdFx0Ly8gYGlgIHdhcyBzdXBwb3NlZCB0byB3cmFwIGFyb3VuZCBmcm9tIGBvdXRgIHRvIGAwYCxcblx0XHRcdC8vIGluY3JlbWVudGluZyBgbmAgZWFjaCB0aW1lLCBzbyB3ZSdsbCBmaXggdGhhdCBub3c6XG5cdFx0XHRpZiAoZmxvb3IoaSAvIG91dCkgPiBtYXhJbnQgLSBuKSB7XG5cdFx0XHRcdGVycm9yKCdvdmVyZmxvdycpO1xuXHRcdFx0fVxuXG5cdFx0XHRuICs9IGZsb29yKGkgLyBvdXQpO1xuXHRcdFx0aSAlPSBvdXQ7XG5cblx0XHRcdC8vIEluc2VydCBgbmAgYXQgcG9zaXRpb24gYGlgIG9mIHRoZSBvdXRwdXRcblx0XHRcdG91dHB1dC5zcGxpY2UoaSsrLCAwLCBuKTtcblxuXHRcdH1cblxuXHRcdHJldHVybiB1Y3MyZW5jb2RlKG91dHB1dCk7XG5cdH1cblxuXHQvKipcblx0ICogQ29udmVydHMgYSBzdHJpbmcgb2YgVW5pY29kZSBzeW1ib2xzIChlLmcuIGEgZG9tYWluIG5hbWUgbGFiZWwpIHRvIGFcblx0ICogUHVueWNvZGUgc3RyaW5nIG9mIEFTQ0lJLW9ubHkgc3ltYm9scy5cblx0ICogQG1lbWJlck9mIHB1bnljb2RlXG5cdCAqIEBwYXJhbSB7U3RyaW5nfSBpbnB1dCBUaGUgc3RyaW5nIG9mIFVuaWNvZGUgc3ltYm9scy5cblx0ICogQHJldHVybnMge1N0cmluZ30gVGhlIHJlc3VsdGluZyBQdW55Y29kZSBzdHJpbmcgb2YgQVNDSUktb25seSBzeW1ib2xzLlxuXHQgKi9cblx0ZnVuY3Rpb24gZW5jb2RlKGlucHV0KSB7XG5cdFx0dmFyIG4sXG5cdFx0ICAgIGRlbHRhLFxuXHRcdCAgICBoYW5kbGVkQ1BDb3VudCxcblx0XHQgICAgYmFzaWNMZW5ndGgsXG5cdFx0ICAgIGJpYXMsXG5cdFx0ICAgIGosXG5cdFx0ICAgIG0sXG5cdFx0ICAgIHEsXG5cdFx0ICAgIGssXG5cdFx0ICAgIHQsXG5cdFx0ICAgIGN1cnJlbnRWYWx1ZSxcblx0XHQgICAgb3V0cHV0ID0gW10sXG5cdFx0ICAgIC8qKiBgaW5wdXRMZW5ndGhgIHdpbGwgaG9sZCB0aGUgbnVtYmVyIG9mIGNvZGUgcG9pbnRzIGluIGBpbnB1dGAuICovXG5cdFx0ICAgIGlucHV0TGVuZ3RoLFxuXHRcdCAgICAvKiogQ2FjaGVkIGNhbGN1bGF0aW9uIHJlc3VsdHMgKi9cblx0XHQgICAgaGFuZGxlZENQQ291bnRQbHVzT25lLFxuXHRcdCAgICBiYXNlTWludXNULFxuXHRcdCAgICBxTWludXNUO1xuXG5cdFx0Ly8gQ29udmVydCB0aGUgaW5wdXQgaW4gVUNTLTIgdG8gVW5pY29kZVxuXHRcdGlucHV0ID0gdWNzMmRlY29kZShpbnB1dCk7XG5cblx0XHQvLyBDYWNoZSB0aGUgbGVuZ3RoXG5cdFx0aW5wdXRMZW5ndGggPSBpbnB1dC5sZW5ndGg7XG5cblx0XHQvLyBJbml0aWFsaXplIHRoZSBzdGF0ZVxuXHRcdG4gPSBpbml0aWFsTjtcblx0XHRkZWx0YSA9IDA7XG5cdFx0YmlhcyA9IGluaXRpYWxCaWFzO1xuXG5cdFx0Ly8gSGFuZGxlIHRoZSBiYXNpYyBjb2RlIHBvaW50c1xuXHRcdGZvciAoaiA9IDA7IGogPCBpbnB1dExlbmd0aDsgKytqKSB7XG5cdFx0XHRjdXJyZW50VmFsdWUgPSBpbnB1dFtqXTtcblx0XHRcdGlmIChjdXJyZW50VmFsdWUgPCAweDgwKSB7XG5cdFx0XHRcdG91dHB1dC5wdXNoKHN0cmluZ0Zyb21DaGFyQ29kZShjdXJyZW50VmFsdWUpKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRoYW5kbGVkQ1BDb3VudCA9IGJhc2ljTGVuZ3RoID0gb3V0cHV0Lmxlbmd0aDtcblxuXHRcdC8vIGBoYW5kbGVkQ1BDb3VudGAgaXMgdGhlIG51bWJlciBvZiBjb2RlIHBvaW50cyB0aGF0IGhhdmUgYmVlbiBoYW5kbGVkO1xuXHRcdC8vIGBiYXNpY0xlbmd0aGAgaXMgdGhlIG51bWJlciBvZiBiYXNpYyBjb2RlIHBvaW50cy5cblxuXHRcdC8vIEZpbmlzaCB0aGUgYmFzaWMgc3RyaW5nIC0gaWYgaXQgaXMgbm90IGVtcHR5IC0gd2l0aCBhIGRlbGltaXRlclxuXHRcdGlmIChiYXNpY0xlbmd0aCkge1xuXHRcdFx0b3V0cHV0LnB1c2goZGVsaW1pdGVyKTtcblx0XHR9XG5cblx0XHQvLyBNYWluIGVuY29kaW5nIGxvb3A6XG5cdFx0d2hpbGUgKGhhbmRsZWRDUENvdW50IDwgaW5wdXRMZW5ndGgpIHtcblxuXHRcdFx0Ly8gQWxsIG5vbi1iYXNpYyBjb2RlIHBvaW50cyA8IG4gaGF2ZSBiZWVuIGhhbmRsZWQgYWxyZWFkeS4gRmluZCB0aGUgbmV4dFxuXHRcdFx0Ly8gbGFyZ2VyIG9uZTpcblx0XHRcdGZvciAobSA9IG1heEludCwgaiA9IDA7IGogPCBpbnB1dExlbmd0aDsgKytqKSB7XG5cdFx0XHRcdGN1cnJlbnRWYWx1ZSA9IGlucHV0W2pdO1xuXHRcdFx0XHRpZiAoY3VycmVudFZhbHVlID49IG4gJiYgY3VycmVudFZhbHVlIDwgbSkge1xuXHRcdFx0XHRcdG0gPSBjdXJyZW50VmFsdWU7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0Ly8gSW5jcmVhc2UgYGRlbHRhYCBlbm91Z2ggdG8gYWR2YW5jZSB0aGUgZGVjb2RlcidzIDxuLGk+IHN0YXRlIHRvIDxtLDA+LFxuXHRcdFx0Ly8gYnV0IGd1YXJkIGFnYWluc3Qgb3ZlcmZsb3dcblx0XHRcdGhhbmRsZWRDUENvdW50UGx1c09uZSA9IGhhbmRsZWRDUENvdW50ICsgMTtcblx0XHRcdGlmIChtIC0gbiA+IGZsb29yKChtYXhJbnQgLSBkZWx0YSkgLyBoYW5kbGVkQ1BDb3VudFBsdXNPbmUpKSB7XG5cdFx0XHRcdGVycm9yKCdvdmVyZmxvdycpO1xuXHRcdFx0fVxuXG5cdFx0XHRkZWx0YSArPSAobSAtIG4pICogaGFuZGxlZENQQ291bnRQbHVzT25lO1xuXHRcdFx0biA9IG07XG5cblx0XHRcdGZvciAoaiA9IDA7IGogPCBpbnB1dExlbmd0aDsgKytqKSB7XG5cdFx0XHRcdGN1cnJlbnRWYWx1ZSA9IGlucHV0W2pdO1xuXG5cdFx0XHRcdGlmIChjdXJyZW50VmFsdWUgPCBuICYmICsrZGVsdGEgPiBtYXhJbnQpIHtcblx0XHRcdFx0XHRlcnJvcignb3ZlcmZsb3cnKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGlmIChjdXJyZW50VmFsdWUgPT0gbikge1xuXHRcdFx0XHRcdC8vIFJlcHJlc2VudCBkZWx0YSBhcyBhIGdlbmVyYWxpemVkIHZhcmlhYmxlLWxlbmd0aCBpbnRlZ2VyXG5cdFx0XHRcdFx0Zm9yIChxID0gZGVsdGEsIGsgPSBiYXNlOyAvKiBubyBjb25kaXRpb24gKi87IGsgKz0gYmFzZSkge1xuXHRcdFx0XHRcdFx0dCA9IGsgPD0gYmlhcyA/IHRNaW4gOiAoayA+PSBiaWFzICsgdE1heCA/IHRNYXggOiBrIC0gYmlhcyk7XG5cdFx0XHRcdFx0XHRpZiAocSA8IHQpIHtcblx0XHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRxTWludXNUID0gcSAtIHQ7XG5cdFx0XHRcdFx0XHRiYXNlTWludXNUID0gYmFzZSAtIHQ7XG5cdFx0XHRcdFx0XHRvdXRwdXQucHVzaChcblx0XHRcdFx0XHRcdFx0c3RyaW5nRnJvbUNoYXJDb2RlKGRpZ2l0VG9CYXNpYyh0ICsgcU1pbnVzVCAlIGJhc2VNaW51c1QsIDApKVxuXHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdHEgPSBmbG9vcihxTWludXNUIC8gYmFzZU1pbnVzVCk7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0b3V0cHV0LnB1c2goc3RyaW5nRnJvbUNoYXJDb2RlKGRpZ2l0VG9CYXNpYyhxLCAwKSkpO1xuXHRcdFx0XHRcdGJpYXMgPSBhZGFwdChkZWx0YSwgaGFuZGxlZENQQ291bnRQbHVzT25lLCBoYW5kbGVkQ1BDb3VudCA9PSBiYXNpY0xlbmd0aCk7XG5cdFx0XHRcdFx0ZGVsdGEgPSAwO1xuXHRcdFx0XHRcdCsraGFuZGxlZENQQ291bnQ7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0KytkZWx0YTtcblx0XHRcdCsrbjtcblxuXHRcdH1cblx0XHRyZXR1cm4gb3V0cHV0LmpvaW4oJycpO1xuXHR9XG5cblx0LyoqXG5cdCAqIENvbnZlcnRzIGEgUHVueWNvZGUgc3RyaW5nIHJlcHJlc2VudGluZyBhIGRvbWFpbiBuYW1lIG9yIGFuIGVtYWlsIGFkZHJlc3Ncblx0ICogdG8gVW5pY29kZS4gT25seSB0aGUgUHVueWNvZGVkIHBhcnRzIG9mIHRoZSBpbnB1dCB3aWxsIGJlIGNvbnZlcnRlZCwgaS5lLlxuXHQgKiBpdCBkb2Vzbid0IG1hdHRlciBpZiB5b3UgY2FsbCBpdCBvbiBhIHN0cmluZyB0aGF0IGhhcyBhbHJlYWR5IGJlZW5cblx0ICogY29udmVydGVkIHRvIFVuaWNvZGUuXG5cdCAqIEBtZW1iZXJPZiBwdW55Y29kZVxuXHQgKiBAcGFyYW0ge1N0cmluZ30gaW5wdXQgVGhlIFB1bnljb2RlZCBkb21haW4gbmFtZSBvciBlbWFpbCBhZGRyZXNzIHRvXG5cdCAqIGNvbnZlcnQgdG8gVW5pY29kZS5cblx0ICogQHJldHVybnMge1N0cmluZ30gVGhlIFVuaWNvZGUgcmVwcmVzZW50YXRpb24gb2YgdGhlIGdpdmVuIFB1bnljb2RlXG5cdCAqIHN0cmluZy5cblx0ICovXG5cdGZ1bmN0aW9uIHRvVW5pY29kZShpbnB1dCkge1xuXHRcdHJldHVybiBtYXBEb21haW4oaW5wdXQsIGZ1bmN0aW9uKHN0cmluZykge1xuXHRcdFx0cmV0dXJuIHJlZ2V4UHVueWNvZGUudGVzdChzdHJpbmcpXG5cdFx0XHRcdD8gZGVjb2RlKHN0cmluZy5zbGljZSg0KS50b0xvd2VyQ2FzZSgpKVxuXHRcdFx0XHQ6IHN0cmluZztcblx0XHR9KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBDb252ZXJ0cyBhIFVuaWNvZGUgc3RyaW5nIHJlcHJlc2VudGluZyBhIGRvbWFpbiBuYW1lIG9yIGFuIGVtYWlsIGFkZHJlc3MgdG9cblx0ICogUHVueWNvZGUuIE9ubHkgdGhlIG5vbi1BU0NJSSBwYXJ0cyBvZiB0aGUgZG9tYWluIG5hbWUgd2lsbCBiZSBjb252ZXJ0ZWQsXG5cdCAqIGkuZS4gaXQgZG9lc24ndCBtYXR0ZXIgaWYgeW91IGNhbGwgaXQgd2l0aCBhIGRvbWFpbiB0aGF0J3MgYWxyZWFkeSBpblxuXHQgKiBBU0NJSS5cblx0ICogQG1lbWJlck9mIHB1bnljb2RlXG5cdCAqIEBwYXJhbSB7U3RyaW5nfSBpbnB1dCBUaGUgZG9tYWluIG5hbWUgb3IgZW1haWwgYWRkcmVzcyB0byBjb252ZXJ0LCBhcyBhXG5cdCAqIFVuaWNvZGUgc3RyaW5nLlxuXHQgKiBAcmV0dXJucyB7U3RyaW5nfSBUaGUgUHVueWNvZGUgcmVwcmVzZW50YXRpb24gb2YgdGhlIGdpdmVuIGRvbWFpbiBuYW1lIG9yXG5cdCAqIGVtYWlsIGFkZHJlc3MuXG5cdCAqL1xuXHRmdW5jdGlvbiB0b0FTQ0lJKGlucHV0KSB7XG5cdFx0cmV0dXJuIG1hcERvbWFpbihpbnB1dCwgZnVuY3Rpb24oc3RyaW5nKSB7XG5cdFx0XHRyZXR1cm4gcmVnZXhOb25BU0NJSS50ZXN0KHN0cmluZylcblx0XHRcdFx0PyAneG4tLScgKyBlbmNvZGUoc3RyaW5nKVxuXHRcdFx0XHQ6IHN0cmluZztcblx0XHR9KTtcblx0fVxuXG5cdC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuXG5cdC8qKiBEZWZpbmUgdGhlIHB1YmxpYyBBUEkgKi9cblx0cHVueWNvZGUgPSB7XG5cdFx0LyoqXG5cdFx0ICogQSBzdHJpbmcgcmVwcmVzZW50aW5nIHRoZSBjdXJyZW50IFB1bnljb2RlLmpzIHZlcnNpb24gbnVtYmVyLlxuXHRcdCAqIEBtZW1iZXJPZiBwdW55Y29kZVxuXHRcdCAqIEB0eXBlIFN0cmluZ1xuXHRcdCAqL1xuXHRcdCd2ZXJzaW9uJzogJzEuMy4yJyxcblx0XHQvKipcblx0XHQgKiBBbiBvYmplY3Qgb2YgbWV0aG9kcyB0byBjb252ZXJ0IGZyb20gSmF2YVNjcmlwdCdzIGludGVybmFsIGNoYXJhY3RlclxuXHRcdCAqIHJlcHJlc2VudGF0aW9uIChVQ1MtMikgdG8gVW5pY29kZSBjb2RlIHBvaW50cywgYW5kIGJhY2suXG5cdFx0ICogQHNlZSA8aHR0cHM6Ly9tYXRoaWFzYnluZW5zLmJlL25vdGVzL2phdmFzY3JpcHQtZW5jb2Rpbmc+XG5cdFx0ICogQG1lbWJlck9mIHB1bnljb2RlXG5cdFx0ICogQHR5cGUgT2JqZWN0XG5cdFx0ICovXG5cdFx0J3VjczInOiB7XG5cdFx0XHQnZGVjb2RlJzogdWNzMmRlY29kZSxcblx0XHRcdCdlbmNvZGUnOiB1Y3MyZW5jb2RlXG5cdFx0fSxcblx0XHQnZGVjb2RlJzogZGVjb2RlLFxuXHRcdCdlbmNvZGUnOiBlbmNvZGUsXG5cdFx0J3RvQVNDSUknOiB0b0FTQ0lJLFxuXHRcdCd0b1VuaWNvZGUnOiB0b1VuaWNvZGVcblx0fTtcblxuXHQvKiogRXhwb3NlIGBwdW55Y29kZWAgKi9cblx0Ly8gU29tZSBBTUQgYnVpbGQgb3B0aW1pemVycywgbGlrZSByLmpzLCBjaGVjayBmb3Igc3BlY2lmaWMgY29uZGl0aW9uIHBhdHRlcm5zXG5cdC8vIGxpa2UgdGhlIGZvbGxvd2luZzpcblx0aWYgKFxuXHRcdHR5cGVvZiBkZWZpbmUgPT0gJ2Z1bmN0aW9uJyAmJlxuXHRcdHR5cGVvZiBkZWZpbmUuYW1kID09ICdvYmplY3QnICYmXG5cdFx0ZGVmaW5lLmFtZFxuXHQpIHtcblx0XHRkZWZpbmUoJ3B1bnljb2RlJywgZnVuY3Rpb24oKSB7XG5cdFx0XHRyZXR1cm4gcHVueWNvZGU7XG5cdFx0fSk7XG5cdH0gZWxzZSBpZiAoZnJlZUV4cG9ydHMgJiYgZnJlZU1vZHVsZSkge1xuXHRcdGlmIChtb2R1bGUuZXhwb3J0cyA9PSBmcmVlRXhwb3J0cykge1xuXHRcdFx0Ly8gaW4gTm9kZS5qcywgaW8uanMsIG9yIFJpbmdvSlMgdjAuOC4wK1xuXHRcdFx0ZnJlZU1vZHVsZS5leHBvcnRzID0gcHVueWNvZGU7XG5cdFx0fSBlbHNlIHtcblx0XHRcdC8vIGluIE5hcndoYWwgb3IgUmluZ29KUyB2MC43LjAtXG5cdFx0XHRmb3IgKGtleSBpbiBwdW55Y29kZSkge1xuXHRcdFx0XHRwdW55Y29kZS5oYXNPd25Qcm9wZXJ0eShrZXkpICYmIChmcmVlRXhwb3J0c1trZXldID0gcHVueWNvZGVba2V5XSk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9IGVsc2Uge1xuXHRcdC8vIGluIFJoaW5vIG9yIGEgd2ViIGJyb3dzZXJcblx0XHRyb290LnB1bnljb2RlID0gcHVueWNvZGU7XG5cdH1cblxufSh0aGlzKSk7XG4iLCIvLyBDb3B5cmlnaHQgSm95ZW50LCBJbmMuIGFuZCBvdGhlciBOb2RlIGNvbnRyaWJ1dG9ycy5cbi8vXG4vLyBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYVxuLy8gY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZVxuLy8gXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nXG4vLyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsXG4vLyBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0XG4vLyBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGVcbi8vIGZvbGxvd2luZyBjb25kaXRpb25zOlxuLy9cbi8vIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkXG4vLyBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbi8vXG4vLyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTXG4vLyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GXG4vLyBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOXG4vLyBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSxcbi8vIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUlxuLy8gT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRVxuLy8gVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cblxuJ3VzZSBzdHJpY3QnO1xuXG4vLyBJZiBvYmouaGFzT3duUHJvcGVydHkgaGFzIGJlZW4gb3ZlcnJpZGRlbiwgdGhlbiBjYWxsaW5nXG4vLyBvYmouaGFzT3duUHJvcGVydHkocHJvcCkgd2lsbCBicmVhay5cbi8vIFNlZTogaHR0cHM6Ly9naXRodWIuY29tL2pveWVudC9ub2RlL2lzc3Vlcy8xNzA3XG5mdW5jdGlvbiBoYXNPd25Qcm9wZXJ0eShvYmosIHByb3ApIHtcbiAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmosIHByb3ApO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKHFzLCBzZXAsIGVxLCBvcHRpb25zKSB7XG4gIHNlcCA9IHNlcCB8fCAnJic7XG4gIGVxID0gZXEgfHwgJz0nO1xuICB2YXIgb2JqID0ge307XG5cbiAgaWYgKHR5cGVvZiBxcyAhPT0gJ3N0cmluZycgfHwgcXMubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIG9iajtcbiAgfVxuXG4gIHZhciByZWdleHAgPSAvXFwrL2c7XG4gIHFzID0gcXMuc3BsaXQoc2VwKTtcblxuICB2YXIgbWF4S2V5cyA9IDEwMDA7XG4gIGlmIChvcHRpb25zICYmIHR5cGVvZiBvcHRpb25zLm1heEtleXMgPT09ICdudW1iZXInKSB7XG4gICAgbWF4S2V5cyA9IG9wdGlvbnMubWF4S2V5cztcbiAgfVxuXG4gIHZhciBsZW4gPSBxcy5sZW5ndGg7XG4gIC8vIG1heEtleXMgPD0gMCBtZWFucyB0aGF0IHdlIHNob3VsZCBub3QgbGltaXQga2V5cyBjb3VudFxuICBpZiAobWF4S2V5cyA+IDAgJiYgbGVuID4gbWF4S2V5cykge1xuICAgIGxlbiA9IG1heEtleXM7XG4gIH1cblxuICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgKytpKSB7XG4gICAgdmFyIHggPSBxc1tpXS5yZXBsYWNlKHJlZ2V4cCwgJyUyMCcpLFxuICAgICAgICBpZHggPSB4LmluZGV4T2YoZXEpLFxuICAgICAgICBrc3RyLCB2c3RyLCBrLCB2O1xuXG4gICAgaWYgKGlkeCA+PSAwKSB7XG4gICAgICBrc3RyID0geC5zdWJzdHIoMCwgaWR4KTtcbiAgICAgIHZzdHIgPSB4LnN1YnN0cihpZHggKyAxKTtcbiAgICB9IGVsc2Uge1xuICAgICAga3N0ciA9IHg7XG4gICAgICB2c3RyID0gJyc7XG4gICAgfVxuXG4gICAgayA9IGRlY29kZVVSSUNvbXBvbmVudChrc3RyKTtcbiAgICB2ID0gZGVjb2RlVVJJQ29tcG9uZW50KHZzdHIpO1xuXG4gICAgaWYgKCFoYXNPd25Qcm9wZXJ0eShvYmosIGspKSB7XG4gICAgICBvYmpba10gPSB2O1xuICAgIH0gZWxzZSBpZiAoaXNBcnJheShvYmpba10pKSB7XG4gICAgICBvYmpba10ucHVzaCh2KTtcbiAgICB9IGVsc2Uge1xuICAgICAgb2JqW2tdID0gW29ialtrXSwgdl07XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG9iajtcbn07XG5cbnZhciBpc0FycmF5ID0gQXJyYXkuaXNBcnJheSB8fCBmdW5jdGlvbiAoeHMpIHtcbiAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh4cykgPT09ICdbb2JqZWN0IEFycmF5XSc7XG59O1xuIiwiLy8gQ29weXJpZ2h0IEpveWVudCwgSW5jLiBhbmQgb3RoZXIgTm9kZSBjb250cmlidXRvcnMuXG4vL1xuLy8gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGFcbi8vIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGVcbi8vIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZ1xuLy8gd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLFxuLy8gZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdFxuLy8gcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlXG4vLyBmb2xsb3dpbmcgY29uZGl0aW9uczpcbi8vXG4vLyBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZFxuLy8gaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4vL1xuLy8gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTU1xuLy8gT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRlxuLy8gTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTlxuLy8gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sXG4vLyBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1Jcbi8vIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEVcbi8vIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG5cbid1c2Ugc3RyaWN0JztcblxudmFyIHN0cmluZ2lmeVByaW1pdGl2ZSA9IGZ1bmN0aW9uKHYpIHtcbiAgc3dpdGNoICh0eXBlb2Ygdikge1xuICAgIGNhc2UgJ3N0cmluZyc6XG4gICAgICByZXR1cm4gdjtcblxuICAgIGNhc2UgJ2Jvb2xlYW4nOlxuICAgICAgcmV0dXJuIHYgPyAndHJ1ZScgOiAnZmFsc2UnO1xuXG4gICAgY2FzZSAnbnVtYmVyJzpcbiAgICAgIHJldHVybiBpc0Zpbml0ZSh2KSA/IHYgOiAnJztcblxuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gJyc7XG4gIH1cbn07XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24ob2JqLCBzZXAsIGVxLCBuYW1lKSB7XG4gIHNlcCA9IHNlcCB8fCAnJic7XG4gIGVxID0gZXEgfHwgJz0nO1xuICBpZiAob2JqID09PSBudWxsKSB7XG4gICAgb2JqID0gdW5kZWZpbmVkO1xuICB9XG5cbiAgaWYgKHR5cGVvZiBvYmogPT09ICdvYmplY3QnKSB7XG4gICAgcmV0dXJuIG1hcChvYmplY3RLZXlzKG9iaiksIGZ1bmN0aW9uKGspIHtcbiAgICAgIHZhciBrcyA9IGVuY29kZVVSSUNvbXBvbmVudChzdHJpbmdpZnlQcmltaXRpdmUoaykpICsgZXE7XG4gICAgICBpZiAoaXNBcnJheShvYmpba10pKSB7XG4gICAgICAgIHJldHVybiBtYXAob2JqW2tdLCBmdW5jdGlvbih2KSB7XG4gICAgICAgICAgcmV0dXJuIGtzICsgZW5jb2RlVVJJQ29tcG9uZW50KHN0cmluZ2lmeVByaW1pdGl2ZSh2KSk7XG4gICAgICAgIH0pLmpvaW4oc2VwKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBrcyArIGVuY29kZVVSSUNvbXBvbmVudChzdHJpbmdpZnlQcmltaXRpdmUob2JqW2tdKSk7XG4gICAgICB9XG4gICAgfSkuam9pbihzZXApO1xuXG4gIH1cblxuICBpZiAoIW5hbWUpIHJldHVybiAnJztcbiAgcmV0dXJuIGVuY29kZVVSSUNvbXBvbmVudChzdHJpbmdpZnlQcmltaXRpdmUobmFtZSkpICsgZXEgK1xuICAgICAgICAgZW5jb2RlVVJJQ29tcG9uZW50KHN0cmluZ2lmeVByaW1pdGl2ZShvYmopKTtcbn07XG5cbnZhciBpc0FycmF5ID0gQXJyYXkuaXNBcnJheSB8fCBmdW5jdGlvbiAoeHMpIHtcbiAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh4cykgPT09ICdbb2JqZWN0IEFycmF5XSc7XG59O1xuXG5mdW5jdGlvbiBtYXAgKHhzLCBmKSB7XG4gIGlmICh4cy5tYXApIHJldHVybiB4cy5tYXAoZik7XG4gIHZhciByZXMgPSBbXTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCB4cy5sZW5ndGg7IGkrKykge1xuICAgIHJlcy5wdXNoKGYoeHNbaV0sIGkpKTtcbiAgfVxuICByZXR1cm4gcmVzO1xufVxuXG52YXIgb2JqZWN0S2V5cyA9IE9iamVjdC5rZXlzIHx8IGZ1bmN0aW9uIChvYmopIHtcbiAgdmFyIHJlcyA9IFtdO1xuICBmb3IgKHZhciBrZXkgaW4gb2JqKSB7XG4gICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmosIGtleSkpIHJlcy5wdXNoKGtleSk7XG4gIH1cbiAgcmV0dXJuIHJlcztcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbmV4cG9ydHMuZGVjb2RlID0gZXhwb3J0cy5wYXJzZSA9IHJlcXVpcmUoJy4vZGVjb2RlJyk7XG5leHBvcnRzLmVuY29kZSA9IGV4cG9ydHMuc3RyaW5naWZ5ID0gcmVxdWlyZSgnLi9lbmNvZGUnKTtcbiIsIi8vIENvcHlyaWdodCBKb3llbnQsIEluYy4gYW5kIG90aGVyIE5vZGUgY29udHJpYnV0b3JzLlxuLy9cbi8vIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhXG4vLyBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlXG4vLyBcIlNvZnR3YXJlXCIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmdcbi8vIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCxcbi8vIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXRcbi8vIHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZVxuLy8gZm9sbG93aW5nIGNvbmRpdGlvbnM6XG4vL1xuLy8gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWRcbi8vIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuLy9cbi8vIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1Ncbi8vIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0Zcbi8vIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU5cbi8vIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLFxuLy8gREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SXG4vLyBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFXG4vLyBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLlxuXG52YXIgcHVueWNvZGUgPSByZXF1aXJlKCdwdW55Y29kZScpO1xuXG5leHBvcnRzLnBhcnNlID0gdXJsUGFyc2U7XG5leHBvcnRzLnJlc29sdmUgPSB1cmxSZXNvbHZlO1xuZXhwb3J0cy5yZXNvbHZlT2JqZWN0ID0gdXJsUmVzb2x2ZU9iamVjdDtcbmV4cG9ydHMuZm9ybWF0ID0gdXJsRm9ybWF0O1xuXG5leHBvcnRzLlVybCA9IFVybDtcblxuZnVuY3Rpb24gVXJsKCkge1xuICB0aGlzLnByb3RvY29sID0gbnVsbDtcbiAgdGhpcy5zbGFzaGVzID0gbnVsbDtcbiAgdGhpcy5hdXRoID0gbnVsbDtcbiAgdGhpcy5ob3N0ID0gbnVsbDtcbiAgdGhpcy5wb3J0ID0gbnVsbDtcbiAgdGhpcy5ob3N0bmFtZSA9IG51bGw7XG4gIHRoaXMuaGFzaCA9IG51bGw7XG4gIHRoaXMuc2VhcmNoID0gbnVsbDtcbiAgdGhpcy5xdWVyeSA9IG51bGw7XG4gIHRoaXMucGF0aG5hbWUgPSBudWxsO1xuICB0aGlzLnBhdGggPSBudWxsO1xuICB0aGlzLmhyZWYgPSBudWxsO1xufVxuXG4vLyBSZWZlcmVuY2U6IFJGQyAzOTg2LCBSRkMgMTgwOCwgUkZDIDIzOTZcblxuLy8gZGVmaW5lIHRoZXNlIGhlcmUgc28gYXQgbGVhc3QgdGhleSBvbmx5IGhhdmUgdG8gYmVcbi8vIGNvbXBpbGVkIG9uY2Ugb24gdGhlIGZpcnN0IG1vZHVsZSBsb2FkLlxudmFyIHByb3RvY29sUGF0dGVybiA9IC9eKFthLXowLTkuKy1dKzopL2ksXG4gICAgcG9ydFBhdHRlcm4gPSAvOlswLTldKiQvLFxuXG4gICAgLy8gUkZDIDIzOTY6IGNoYXJhY3RlcnMgcmVzZXJ2ZWQgZm9yIGRlbGltaXRpbmcgVVJMcy5cbiAgICAvLyBXZSBhY3R1YWxseSBqdXN0IGF1dG8tZXNjYXBlIHRoZXNlLlxuICAgIGRlbGltcyA9IFsnPCcsICc+JywgJ1wiJywgJ2AnLCAnICcsICdcXHInLCAnXFxuJywgJ1xcdCddLFxuXG4gICAgLy8gUkZDIDIzOTY6IGNoYXJhY3RlcnMgbm90IGFsbG93ZWQgZm9yIHZhcmlvdXMgcmVhc29ucy5cbiAgICB1bndpc2UgPSBbJ3snLCAnfScsICd8JywgJ1xcXFwnLCAnXicsICdgJ10uY29uY2F0KGRlbGltcyksXG5cbiAgICAvLyBBbGxvd2VkIGJ5IFJGQ3MsIGJ1dCBjYXVzZSBvZiBYU1MgYXR0YWNrcy4gIEFsd2F5cyBlc2NhcGUgdGhlc2UuXG4gICAgYXV0b0VzY2FwZSA9IFsnXFwnJ10uY29uY2F0KHVud2lzZSksXG4gICAgLy8gQ2hhcmFjdGVycyB0aGF0IGFyZSBuZXZlciBldmVyIGFsbG93ZWQgaW4gYSBob3N0bmFtZS5cbiAgICAvLyBOb3RlIHRoYXQgYW55IGludmFsaWQgY2hhcnMgYXJlIGFsc28gaGFuZGxlZCwgYnV0IHRoZXNlXG4gICAgLy8gYXJlIHRoZSBvbmVzIHRoYXQgYXJlICpleHBlY3RlZCogdG8gYmUgc2Vlbiwgc28gd2UgZmFzdC1wYXRoXG4gICAgLy8gdGhlbS5cbiAgICBub25Ib3N0Q2hhcnMgPSBbJyUnLCAnLycsICc/JywgJzsnLCAnIyddLmNvbmNhdChhdXRvRXNjYXBlKSxcbiAgICBob3N0RW5kaW5nQ2hhcnMgPSBbJy8nLCAnPycsICcjJ10sXG4gICAgaG9zdG5hbWVNYXhMZW4gPSAyNTUsXG4gICAgaG9zdG5hbWVQYXJ0UGF0dGVybiA9IC9eW2EtejAtOUEtWl8tXXswLDYzfSQvLFxuICAgIGhvc3RuYW1lUGFydFN0YXJ0ID0gL14oW2EtejAtOUEtWl8tXXswLDYzfSkoLiopJC8sXG4gICAgLy8gcHJvdG9jb2xzIHRoYXQgY2FuIGFsbG93IFwidW5zYWZlXCIgYW5kIFwidW53aXNlXCIgY2hhcnMuXG4gICAgdW5zYWZlUHJvdG9jb2wgPSB7XG4gICAgICAnamF2YXNjcmlwdCc6IHRydWUsXG4gICAgICAnamF2YXNjcmlwdDonOiB0cnVlXG4gICAgfSxcbiAgICAvLyBwcm90b2NvbHMgdGhhdCBuZXZlciBoYXZlIGEgaG9zdG5hbWUuXG4gICAgaG9zdGxlc3NQcm90b2NvbCA9IHtcbiAgICAgICdqYXZhc2NyaXB0JzogdHJ1ZSxcbiAgICAgICdqYXZhc2NyaXB0Oic6IHRydWVcbiAgICB9LFxuICAgIC8vIHByb3RvY29scyB0aGF0IGFsd2F5cyBjb250YWluIGEgLy8gYml0LlxuICAgIHNsYXNoZWRQcm90b2NvbCA9IHtcbiAgICAgICdodHRwJzogdHJ1ZSxcbiAgICAgICdodHRwcyc6IHRydWUsXG4gICAgICAnZnRwJzogdHJ1ZSxcbiAgICAgICdnb3BoZXInOiB0cnVlLFxuICAgICAgJ2ZpbGUnOiB0cnVlLFxuICAgICAgJ2h0dHA6JzogdHJ1ZSxcbiAgICAgICdodHRwczonOiB0cnVlLFxuICAgICAgJ2Z0cDonOiB0cnVlLFxuICAgICAgJ2dvcGhlcjonOiB0cnVlLFxuICAgICAgJ2ZpbGU6JzogdHJ1ZVxuICAgIH0sXG4gICAgcXVlcnlzdHJpbmcgPSByZXF1aXJlKCdxdWVyeXN0cmluZycpO1xuXG5mdW5jdGlvbiB1cmxQYXJzZSh1cmwsIHBhcnNlUXVlcnlTdHJpbmcsIHNsYXNoZXNEZW5vdGVIb3N0KSB7XG4gIGlmICh1cmwgJiYgaXNPYmplY3QodXJsKSAmJiB1cmwgaW5zdGFuY2VvZiBVcmwpIHJldHVybiB1cmw7XG5cbiAgdmFyIHUgPSBuZXcgVXJsO1xuICB1LnBhcnNlKHVybCwgcGFyc2VRdWVyeVN0cmluZywgc2xhc2hlc0Rlbm90ZUhvc3QpO1xuICByZXR1cm4gdTtcbn1cblxuVXJsLnByb3RvdHlwZS5wYXJzZSA9IGZ1bmN0aW9uKHVybCwgcGFyc2VRdWVyeVN0cmluZywgc2xhc2hlc0Rlbm90ZUhvc3QpIHtcbiAgaWYgKCFpc1N0cmluZyh1cmwpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlBhcmFtZXRlciAndXJsJyBtdXN0IGJlIGEgc3RyaW5nLCBub3QgXCIgKyB0eXBlb2YgdXJsKTtcbiAgfVxuXG4gIHZhciByZXN0ID0gdXJsO1xuXG4gIC8vIHRyaW0gYmVmb3JlIHByb2NlZWRpbmcuXG4gIC8vIFRoaXMgaXMgdG8gc3VwcG9ydCBwYXJzZSBzdHVmZiBsaWtlIFwiICBodHRwOi8vZm9vLmNvbSAgXFxuXCJcbiAgcmVzdCA9IHJlc3QudHJpbSgpO1xuXG4gIHZhciBwcm90byA9IHByb3RvY29sUGF0dGVybi5leGVjKHJlc3QpO1xuICBpZiAocHJvdG8pIHtcbiAgICBwcm90byA9IHByb3RvWzBdO1xuICAgIHZhciBsb3dlclByb3RvID0gcHJvdG8udG9Mb3dlckNhc2UoKTtcbiAgICB0aGlzLnByb3RvY29sID0gbG93ZXJQcm90bztcbiAgICByZXN0ID0gcmVzdC5zdWJzdHIocHJvdG8ubGVuZ3RoKTtcbiAgfVxuXG4gIC8vIGZpZ3VyZSBvdXQgaWYgaXQncyBnb3QgYSBob3N0XG4gIC8vIHVzZXJAc2VydmVyIGlzICphbHdheXMqIGludGVycHJldGVkIGFzIGEgaG9zdG5hbWUsIGFuZCB1cmxcbiAgLy8gcmVzb2x1dGlvbiB3aWxsIHRyZWF0IC8vZm9vL2JhciBhcyBob3N0PWZvbyxwYXRoPWJhciBiZWNhdXNlIHRoYXQnc1xuICAvLyBob3cgdGhlIGJyb3dzZXIgcmVzb2x2ZXMgcmVsYXRpdmUgVVJMcy5cbiAgaWYgKHNsYXNoZXNEZW5vdGVIb3N0IHx8IHByb3RvIHx8IHJlc3QubWF0Y2goL15cXC9cXC9bXkBcXC9dK0BbXkBcXC9dKy8pKSB7XG4gICAgdmFyIHNsYXNoZXMgPSByZXN0LnN1YnN0cigwLCAyKSA9PT0gJy8vJztcbiAgICBpZiAoc2xhc2hlcyAmJiAhKHByb3RvICYmIGhvc3RsZXNzUHJvdG9jb2xbcHJvdG9dKSkge1xuICAgICAgcmVzdCA9IHJlc3Quc3Vic3RyKDIpO1xuICAgICAgdGhpcy5zbGFzaGVzID0gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICBpZiAoIWhvc3RsZXNzUHJvdG9jb2xbcHJvdG9dICYmXG4gICAgICAoc2xhc2hlcyB8fCAocHJvdG8gJiYgIXNsYXNoZWRQcm90b2NvbFtwcm90b10pKSkge1xuXG4gICAgLy8gdGhlcmUncyBhIGhvc3RuYW1lLlxuICAgIC8vIHRoZSBmaXJzdCBpbnN0YW5jZSBvZiAvLCA/LCA7LCBvciAjIGVuZHMgdGhlIGhvc3QuXG4gICAgLy9cbiAgICAvLyBJZiB0aGVyZSBpcyBhbiBAIGluIHRoZSBob3N0bmFtZSwgdGhlbiBub24taG9zdCBjaGFycyAqYXJlKiBhbGxvd2VkXG4gICAgLy8gdG8gdGhlIGxlZnQgb2YgdGhlIGxhc3QgQCBzaWduLCB1bmxlc3Mgc29tZSBob3N0LWVuZGluZyBjaGFyYWN0ZXJcbiAgICAvLyBjb21lcyAqYmVmb3JlKiB0aGUgQC1zaWduLlxuICAgIC8vIFVSTHMgYXJlIG9ibm94aW91cy5cbiAgICAvL1xuICAgIC8vIGV4OlxuICAgIC8vIGh0dHA6Ly9hQGJAYy8gPT4gdXNlcjphQGIgaG9zdDpjXG4gICAgLy8gaHR0cDovL2FAYj9AYyA9PiB1c2VyOmEgaG9zdDpjIHBhdGg6Lz9AY1xuXG4gICAgLy8gdjAuMTIgVE9ETyhpc2FhY3MpOiBUaGlzIGlzIG5vdCBxdWl0ZSBob3cgQ2hyb21lIGRvZXMgdGhpbmdzLlxuICAgIC8vIFJldmlldyBvdXIgdGVzdCBjYXNlIGFnYWluc3QgYnJvd3NlcnMgbW9yZSBjb21wcmVoZW5zaXZlbHkuXG5cbiAgICAvLyBmaW5kIHRoZSBmaXJzdCBpbnN0YW5jZSBvZiBhbnkgaG9zdEVuZGluZ0NoYXJzXG4gICAgdmFyIGhvc3RFbmQgPSAtMTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGhvc3RFbmRpbmdDaGFycy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGhlYyA9IHJlc3QuaW5kZXhPZihob3N0RW5kaW5nQ2hhcnNbaV0pO1xuICAgICAgaWYgKGhlYyAhPT0gLTEgJiYgKGhvc3RFbmQgPT09IC0xIHx8IGhlYyA8IGhvc3RFbmQpKVxuICAgICAgICBob3N0RW5kID0gaGVjO1xuICAgIH1cblxuICAgIC8vIGF0IHRoaXMgcG9pbnQsIGVpdGhlciB3ZSBoYXZlIGFuIGV4cGxpY2l0IHBvaW50IHdoZXJlIHRoZVxuICAgIC8vIGF1dGggcG9ydGlvbiBjYW5ub3QgZ28gcGFzdCwgb3IgdGhlIGxhc3QgQCBjaGFyIGlzIHRoZSBkZWNpZGVyLlxuICAgIHZhciBhdXRoLCBhdFNpZ247XG4gICAgaWYgKGhvc3RFbmQgPT09IC0xKSB7XG4gICAgICAvLyBhdFNpZ24gY2FuIGJlIGFueXdoZXJlLlxuICAgICAgYXRTaWduID0gcmVzdC5sYXN0SW5kZXhPZignQCcpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBhdFNpZ24gbXVzdCBiZSBpbiBhdXRoIHBvcnRpb24uXG4gICAgICAvLyBodHRwOi8vYUBiL2NAZCA9PiBob3N0OmIgYXV0aDphIHBhdGg6L2NAZFxuICAgICAgYXRTaWduID0gcmVzdC5sYXN0SW5kZXhPZignQCcsIGhvc3RFbmQpO1xuICAgIH1cblxuICAgIC8vIE5vdyB3ZSBoYXZlIGEgcG9ydGlvbiB3aGljaCBpcyBkZWZpbml0ZWx5IHRoZSBhdXRoLlxuICAgIC8vIFB1bGwgdGhhdCBvZmYuXG4gICAgaWYgKGF0U2lnbiAhPT0gLTEpIHtcbiAgICAgIGF1dGggPSByZXN0LnNsaWNlKDAsIGF0U2lnbik7XG4gICAgICByZXN0ID0gcmVzdC5zbGljZShhdFNpZ24gKyAxKTtcbiAgICAgIHRoaXMuYXV0aCA9IGRlY29kZVVSSUNvbXBvbmVudChhdXRoKTtcbiAgICB9XG5cbiAgICAvLyB0aGUgaG9zdCBpcyB0aGUgcmVtYWluaW5nIHRvIHRoZSBsZWZ0IG9mIHRoZSBmaXJzdCBub24taG9zdCBjaGFyXG4gICAgaG9zdEVuZCA9IC0xO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbm9uSG9zdENoYXJzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgaGVjID0gcmVzdC5pbmRleE9mKG5vbkhvc3RDaGFyc1tpXSk7XG4gICAgICBpZiAoaGVjICE9PSAtMSAmJiAoaG9zdEVuZCA9PT0gLTEgfHwgaGVjIDwgaG9zdEVuZCkpXG4gICAgICAgIGhvc3RFbmQgPSBoZWM7XG4gICAgfVxuICAgIC8vIGlmIHdlIHN0aWxsIGhhdmUgbm90IGhpdCBpdCwgdGhlbiB0aGUgZW50aXJlIHRoaW5nIGlzIGEgaG9zdC5cbiAgICBpZiAoaG9zdEVuZCA9PT0gLTEpXG4gICAgICBob3N0RW5kID0gcmVzdC5sZW5ndGg7XG5cbiAgICB0aGlzLmhvc3QgPSByZXN0LnNsaWNlKDAsIGhvc3RFbmQpO1xuICAgIHJlc3QgPSByZXN0LnNsaWNlKGhvc3RFbmQpO1xuXG4gICAgLy8gcHVsbCBvdXQgcG9ydC5cbiAgICB0aGlzLnBhcnNlSG9zdCgpO1xuXG4gICAgLy8gd2UndmUgaW5kaWNhdGVkIHRoYXQgdGhlcmUgaXMgYSBob3N0bmFtZSxcbiAgICAvLyBzbyBldmVuIGlmIGl0J3MgZW1wdHksIGl0IGhhcyB0byBiZSBwcmVzZW50LlxuICAgIHRoaXMuaG9zdG5hbWUgPSB0aGlzLmhvc3RuYW1lIHx8ICcnO1xuXG4gICAgLy8gaWYgaG9zdG5hbWUgYmVnaW5zIHdpdGggWyBhbmQgZW5kcyB3aXRoIF1cbiAgICAvLyBhc3N1bWUgdGhhdCBpdCdzIGFuIElQdjYgYWRkcmVzcy5cbiAgICB2YXIgaXB2Nkhvc3RuYW1lID0gdGhpcy5ob3N0bmFtZVswXSA9PT0gJ1snICYmXG4gICAgICAgIHRoaXMuaG9zdG5hbWVbdGhpcy5ob3N0bmFtZS5sZW5ndGggLSAxXSA9PT0gJ10nO1xuXG4gICAgLy8gdmFsaWRhdGUgYSBsaXR0bGUuXG4gICAgaWYgKCFpcHY2SG9zdG5hbWUpIHtcbiAgICAgIHZhciBob3N0cGFydHMgPSB0aGlzLmhvc3RuYW1lLnNwbGl0KC9cXC4vKTtcbiAgICAgIGZvciAodmFyIGkgPSAwLCBsID0gaG9zdHBhcnRzLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgICAgICB2YXIgcGFydCA9IGhvc3RwYXJ0c1tpXTtcbiAgICAgICAgaWYgKCFwYXJ0KSBjb250aW51ZTtcbiAgICAgICAgaWYgKCFwYXJ0Lm1hdGNoKGhvc3RuYW1lUGFydFBhdHRlcm4pKSB7XG4gICAgICAgICAgdmFyIG5ld3BhcnQgPSAnJztcbiAgICAgICAgICBmb3IgKHZhciBqID0gMCwgayA9IHBhcnQubGVuZ3RoOyBqIDwgazsgaisrKSB7XG4gICAgICAgICAgICBpZiAocGFydC5jaGFyQ29kZUF0KGopID4gMTI3KSB7XG4gICAgICAgICAgICAgIC8vIHdlIHJlcGxhY2Ugbm9uLUFTQ0lJIGNoYXIgd2l0aCBhIHRlbXBvcmFyeSBwbGFjZWhvbGRlclxuICAgICAgICAgICAgICAvLyB3ZSBuZWVkIHRoaXMgdG8gbWFrZSBzdXJlIHNpemUgb2YgaG9zdG5hbWUgaXMgbm90XG4gICAgICAgICAgICAgIC8vIGJyb2tlbiBieSByZXBsYWNpbmcgbm9uLUFTQ0lJIGJ5IG5vdGhpbmdcbiAgICAgICAgICAgICAgbmV3cGFydCArPSAneCc7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBuZXdwYXJ0ICs9IHBhcnRbal07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIC8vIHdlIHRlc3QgYWdhaW4gd2l0aCBBU0NJSSBjaGFyIG9ubHlcbiAgICAgICAgICBpZiAoIW5ld3BhcnQubWF0Y2goaG9zdG5hbWVQYXJ0UGF0dGVybikpIHtcbiAgICAgICAgICAgIHZhciB2YWxpZFBhcnRzID0gaG9zdHBhcnRzLnNsaWNlKDAsIGkpO1xuICAgICAgICAgICAgdmFyIG5vdEhvc3QgPSBob3N0cGFydHMuc2xpY2UoaSArIDEpO1xuICAgICAgICAgICAgdmFyIGJpdCA9IHBhcnQubWF0Y2goaG9zdG5hbWVQYXJ0U3RhcnQpO1xuICAgICAgICAgICAgaWYgKGJpdCkge1xuICAgICAgICAgICAgICB2YWxpZFBhcnRzLnB1c2goYml0WzFdKTtcbiAgICAgICAgICAgICAgbm90SG9zdC51bnNoaWZ0KGJpdFsyXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAobm90SG9zdC5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgcmVzdCA9ICcvJyArIG5vdEhvc3Quam9pbignLicpICsgcmVzdDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuaG9zdG5hbWUgPSB2YWxpZFBhcnRzLmpvaW4oJy4nKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0aGlzLmhvc3RuYW1lLmxlbmd0aCA+IGhvc3RuYW1lTWF4TGVuKSB7XG4gICAgICB0aGlzLmhvc3RuYW1lID0gJyc7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIGhvc3RuYW1lcyBhcmUgYWx3YXlzIGxvd2VyIGNhc2UuXG4gICAgICB0aGlzLmhvc3RuYW1lID0gdGhpcy5ob3N0bmFtZS50b0xvd2VyQ2FzZSgpO1xuICAgIH1cblxuICAgIGlmICghaXB2Nkhvc3RuYW1lKSB7XG4gICAgICAvLyBJRE5BIFN1cHBvcnQ6IFJldHVybnMgYSBwdW55IGNvZGVkIHJlcHJlc2VudGF0aW9uIG9mIFwiZG9tYWluXCIuXG4gICAgICAvLyBJdCBvbmx5IGNvbnZlcnRzIHRoZSBwYXJ0IG9mIHRoZSBkb21haW4gbmFtZSB0aGF0XG4gICAgICAvLyBoYXMgbm9uIEFTQ0lJIGNoYXJhY3RlcnMuIEkuZS4gaXQgZG9zZW50IG1hdHRlciBpZlxuICAgICAgLy8geW91IGNhbGwgaXQgd2l0aCBhIGRvbWFpbiB0aGF0IGFscmVhZHkgaXMgaW4gQVNDSUkuXG4gICAgICB2YXIgZG9tYWluQXJyYXkgPSB0aGlzLmhvc3RuYW1lLnNwbGl0KCcuJyk7XG4gICAgICB2YXIgbmV3T3V0ID0gW107XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGRvbWFpbkFycmF5Lmxlbmd0aDsgKytpKSB7XG4gICAgICAgIHZhciBzID0gZG9tYWluQXJyYXlbaV07XG4gICAgICAgIG5ld091dC5wdXNoKHMubWF0Y2goL1teQS1aYS16MC05Xy1dLykgP1xuICAgICAgICAgICAgJ3huLS0nICsgcHVueWNvZGUuZW5jb2RlKHMpIDogcyk7XG4gICAgICB9XG4gICAgICB0aGlzLmhvc3RuYW1lID0gbmV3T3V0LmpvaW4oJy4nKTtcbiAgICB9XG5cbiAgICB2YXIgcCA9IHRoaXMucG9ydCA/ICc6JyArIHRoaXMucG9ydCA6ICcnO1xuICAgIHZhciBoID0gdGhpcy5ob3N0bmFtZSB8fCAnJztcbiAgICB0aGlzLmhvc3QgPSBoICsgcDtcbiAgICB0aGlzLmhyZWYgKz0gdGhpcy5ob3N0O1xuXG4gICAgLy8gc3RyaXAgWyBhbmQgXSBmcm9tIHRoZSBob3N0bmFtZVxuICAgIC8vIHRoZSBob3N0IGZpZWxkIHN0aWxsIHJldGFpbnMgdGhlbSwgdGhvdWdoXG4gICAgaWYgKGlwdjZIb3N0bmFtZSkge1xuICAgICAgdGhpcy5ob3N0bmFtZSA9IHRoaXMuaG9zdG5hbWUuc3Vic3RyKDEsIHRoaXMuaG9zdG5hbWUubGVuZ3RoIC0gMik7XG4gICAgICBpZiAocmVzdFswXSAhPT0gJy8nKSB7XG4gICAgICAgIHJlc3QgPSAnLycgKyByZXN0O1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIG5vdyByZXN0IGlzIHNldCB0byB0aGUgcG9zdC1ob3N0IHN0dWZmLlxuICAvLyBjaG9wIG9mZiBhbnkgZGVsaW0gY2hhcnMuXG4gIGlmICghdW5zYWZlUHJvdG9jb2xbbG93ZXJQcm90b10pIHtcblxuICAgIC8vIEZpcnN0LCBtYWtlIDEwMCUgc3VyZSB0aGF0IGFueSBcImF1dG9Fc2NhcGVcIiBjaGFycyBnZXRcbiAgICAvLyBlc2NhcGVkLCBldmVuIGlmIGVuY29kZVVSSUNvbXBvbmVudCBkb2Vzbid0IHRoaW5rIHRoZXlcbiAgICAvLyBuZWVkIHRvIGJlLlxuICAgIGZvciAodmFyIGkgPSAwLCBsID0gYXV0b0VzY2FwZS5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICAgIHZhciBhZSA9IGF1dG9Fc2NhcGVbaV07XG4gICAgICB2YXIgZXNjID0gZW5jb2RlVVJJQ29tcG9uZW50KGFlKTtcbiAgICAgIGlmIChlc2MgPT09IGFlKSB7XG4gICAgICAgIGVzYyA9IGVzY2FwZShhZSk7XG4gICAgICB9XG4gICAgICByZXN0ID0gcmVzdC5zcGxpdChhZSkuam9pbihlc2MpO1xuICAgIH1cbiAgfVxuXG5cbiAgLy8gY2hvcCBvZmYgZnJvbSB0aGUgdGFpbCBmaXJzdC5cbiAgdmFyIGhhc2ggPSByZXN0LmluZGV4T2YoJyMnKTtcbiAgaWYgKGhhc2ggIT09IC0xKSB7XG4gICAgLy8gZ290IGEgZnJhZ21lbnQgc3RyaW5nLlxuICAgIHRoaXMuaGFzaCA9IHJlc3Quc3Vic3RyKGhhc2gpO1xuICAgIHJlc3QgPSByZXN0LnNsaWNlKDAsIGhhc2gpO1xuICB9XG4gIHZhciBxbSA9IHJlc3QuaW5kZXhPZignPycpO1xuICBpZiAocW0gIT09IC0xKSB7XG4gICAgdGhpcy5zZWFyY2ggPSByZXN0LnN1YnN0cihxbSk7XG4gICAgdGhpcy5xdWVyeSA9IHJlc3Quc3Vic3RyKHFtICsgMSk7XG4gICAgaWYgKHBhcnNlUXVlcnlTdHJpbmcpIHtcbiAgICAgIHRoaXMucXVlcnkgPSBxdWVyeXN0cmluZy5wYXJzZSh0aGlzLnF1ZXJ5KTtcbiAgICB9XG4gICAgcmVzdCA9IHJlc3Quc2xpY2UoMCwgcW0pO1xuICB9IGVsc2UgaWYgKHBhcnNlUXVlcnlTdHJpbmcpIHtcbiAgICAvLyBubyBxdWVyeSBzdHJpbmcsIGJ1dCBwYXJzZVF1ZXJ5U3RyaW5nIHN0aWxsIHJlcXVlc3RlZFxuICAgIHRoaXMuc2VhcmNoID0gJyc7XG4gICAgdGhpcy5xdWVyeSA9IHt9O1xuICB9XG4gIGlmIChyZXN0KSB0aGlzLnBhdGhuYW1lID0gcmVzdDtcbiAgaWYgKHNsYXNoZWRQcm90b2NvbFtsb3dlclByb3RvXSAmJlxuICAgICAgdGhpcy5ob3N0bmFtZSAmJiAhdGhpcy5wYXRobmFtZSkge1xuICAgIHRoaXMucGF0aG5hbWUgPSAnLyc7XG4gIH1cblxuICAvL3RvIHN1cHBvcnQgaHR0cC5yZXF1ZXN0XG4gIGlmICh0aGlzLnBhdGhuYW1lIHx8IHRoaXMuc2VhcmNoKSB7XG4gICAgdmFyIHAgPSB0aGlzLnBhdGhuYW1lIHx8ICcnO1xuICAgIHZhciBzID0gdGhpcy5zZWFyY2ggfHwgJyc7XG4gICAgdGhpcy5wYXRoID0gcCArIHM7XG4gIH1cblxuICAvLyBmaW5hbGx5LCByZWNvbnN0cnVjdCB0aGUgaHJlZiBiYXNlZCBvbiB3aGF0IGhhcyBiZWVuIHZhbGlkYXRlZC5cbiAgdGhpcy5ocmVmID0gdGhpcy5mb3JtYXQoKTtcbiAgcmV0dXJuIHRoaXM7XG59O1xuXG4vLyBmb3JtYXQgYSBwYXJzZWQgb2JqZWN0IGludG8gYSB1cmwgc3RyaW5nXG5mdW5jdGlvbiB1cmxGb3JtYXQob2JqKSB7XG4gIC8vIGVuc3VyZSBpdCdzIGFuIG9iamVjdCwgYW5kIG5vdCBhIHN0cmluZyB1cmwuXG4gIC8vIElmIGl0J3MgYW4gb2JqLCB0aGlzIGlzIGEgbm8tb3AuXG4gIC8vIHRoaXMgd2F5LCB5b3UgY2FuIGNhbGwgdXJsX2Zvcm1hdCgpIG9uIHN0cmluZ3NcbiAgLy8gdG8gY2xlYW4gdXAgcG90ZW50aWFsbHkgd29ua3kgdXJscy5cbiAgaWYgKGlzU3RyaW5nKG9iaikpIG9iaiA9IHVybFBhcnNlKG9iaik7XG4gIGlmICghKG9iaiBpbnN0YW5jZW9mIFVybCkpIHJldHVybiBVcmwucHJvdG90eXBlLmZvcm1hdC5jYWxsKG9iaik7XG4gIHJldHVybiBvYmouZm9ybWF0KCk7XG59XG5cblVybC5wcm90b3R5cGUuZm9ybWF0ID0gZnVuY3Rpb24oKSB7XG4gIHZhciBhdXRoID0gdGhpcy5hdXRoIHx8ICcnO1xuICBpZiAoYXV0aCkge1xuICAgIGF1dGggPSBlbmNvZGVVUklDb21wb25lbnQoYXV0aCk7XG4gICAgYXV0aCA9IGF1dGgucmVwbGFjZSgvJTNBL2ksICc6Jyk7XG4gICAgYXV0aCArPSAnQCc7XG4gIH1cblxuICB2YXIgcHJvdG9jb2wgPSB0aGlzLnByb3RvY29sIHx8ICcnLFxuICAgICAgcGF0aG5hbWUgPSB0aGlzLnBhdGhuYW1lIHx8ICcnLFxuICAgICAgaGFzaCA9IHRoaXMuaGFzaCB8fCAnJyxcbiAgICAgIGhvc3QgPSBmYWxzZSxcbiAgICAgIHF1ZXJ5ID0gJyc7XG5cbiAgaWYgKHRoaXMuaG9zdCkge1xuICAgIGhvc3QgPSBhdXRoICsgdGhpcy5ob3N0O1xuICB9IGVsc2UgaWYgKHRoaXMuaG9zdG5hbWUpIHtcbiAgICBob3N0ID0gYXV0aCArICh0aGlzLmhvc3RuYW1lLmluZGV4T2YoJzonKSA9PT0gLTEgP1xuICAgICAgICB0aGlzLmhvc3RuYW1lIDpcbiAgICAgICAgJ1snICsgdGhpcy5ob3N0bmFtZSArICddJyk7XG4gICAgaWYgKHRoaXMucG9ydCkge1xuICAgICAgaG9zdCArPSAnOicgKyB0aGlzLnBvcnQ7XG4gICAgfVxuICB9XG5cbiAgaWYgKHRoaXMucXVlcnkgJiZcbiAgICAgIGlzT2JqZWN0KHRoaXMucXVlcnkpICYmXG4gICAgICBPYmplY3Qua2V5cyh0aGlzLnF1ZXJ5KS5sZW5ndGgpIHtcbiAgICBxdWVyeSA9IHF1ZXJ5c3RyaW5nLnN0cmluZ2lmeSh0aGlzLnF1ZXJ5KTtcbiAgfVxuXG4gIHZhciBzZWFyY2ggPSB0aGlzLnNlYXJjaCB8fCAocXVlcnkgJiYgKCc/JyArIHF1ZXJ5KSkgfHwgJyc7XG5cbiAgaWYgKHByb3RvY29sICYmIHByb3RvY29sLnN1YnN0cigtMSkgIT09ICc6JykgcHJvdG9jb2wgKz0gJzonO1xuXG4gIC8vIG9ubHkgdGhlIHNsYXNoZWRQcm90b2NvbHMgZ2V0IHRoZSAvLy4gIE5vdCBtYWlsdG86LCB4bXBwOiwgZXRjLlxuICAvLyB1bmxlc3MgdGhleSBoYWQgdGhlbSB0byBiZWdpbiB3aXRoLlxuICBpZiAodGhpcy5zbGFzaGVzIHx8XG4gICAgICAoIXByb3RvY29sIHx8IHNsYXNoZWRQcm90b2NvbFtwcm90b2NvbF0pICYmIGhvc3QgIT09IGZhbHNlKSB7XG4gICAgaG9zdCA9ICcvLycgKyAoaG9zdCB8fCAnJyk7XG4gICAgaWYgKHBhdGhuYW1lICYmIHBhdGhuYW1lLmNoYXJBdCgwKSAhPT0gJy8nKSBwYXRobmFtZSA9ICcvJyArIHBhdGhuYW1lO1xuICB9IGVsc2UgaWYgKCFob3N0KSB7XG4gICAgaG9zdCA9ICcnO1xuICB9XG5cbiAgaWYgKGhhc2ggJiYgaGFzaC5jaGFyQXQoMCkgIT09ICcjJykgaGFzaCA9ICcjJyArIGhhc2g7XG4gIGlmIChzZWFyY2ggJiYgc2VhcmNoLmNoYXJBdCgwKSAhPT0gJz8nKSBzZWFyY2ggPSAnPycgKyBzZWFyY2g7XG5cbiAgcGF0aG5hbWUgPSBwYXRobmFtZS5yZXBsYWNlKC9bPyNdL2csIGZ1bmN0aW9uKG1hdGNoKSB7XG4gICAgcmV0dXJuIGVuY29kZVVSSUNvbXBvbmVudChtYXRjaCk7XG4gIH0pO1xuICBzZWFyY2ggPSBzZWFyY2gucmVwbGFjZSgnIycsICclMjMnKTtcblxuICByZXR1cm4gcHJvdG9jb2wgKyBob3N0ICsgcGF0aG5hbWUgKyBzZWFyY2ggKyBoYXNoO1xufTtcblxuZnVuY3Rpb24gdXJsUmVzb2x2ZShzb3VyY2UsIHJlbGF0aXZlKSB7XG4gIHJldHVybiB1cmxQYXJzZShzb3VyY2UsIGZhbHNlLCB0cnVlKS5yZXNvbHZlKHJlbGF0aXZlKTtcbn1cblxuVXJsLnByb3RvdHlwZS5yZXNvbHZlID0gZnVuY3Rpb24ocmVsYXRpdmUpIHtcbiAgcmV0dXJuIHRoaXMucmVzb2x2ZU9iamVjdCh1cmxQYXJzZShyZWxhdGl2ZSwgZmFsc2UsIHRydWUpKS5mb3JtYXQoKTtcbn07XG5cbmZ1bmN0aW9uIHVybFJlc29sdmVPYmplY3Qoc291cmNlLCByZWxhdGl2ZSkge1xuICBpZiAoIXNvdXJjZSkgcmV0dXJuIHJlbGF0aXZlO1xuICByZXR1cm4gdXJsUGFyc2Uoc291cmNlLCBmYWxzZSwgdHJ1ZSkucmVzb2x2ZU9iamVjdChyZWxhdGl2ZSk7XG59XG5cblVybC5wcm90b3R5cGUucmVzb2x2ZU9iamVjdCA9IGZ1bmN0aW9uKHJlbGF0aXZlKSB7XG4gIGlmIChpc1N0cmluZyhyZWxhdGl2ZSkpIHtcbiAgICB2YXIgcmVsID0gbmV3IFVybCgpO1xuICAgIHJlbC5wYXJzZShyZWxhdGl2ZSwgZmFsc2UsIHRydWUpO1xuICAgIHJlbGF0aXZlID0gcmVsO1xuICB9XG5cbiAgdmFyIHJlc3VsdCA9IG5ldyBVcmwoKTtcbiAgT2JqZWN0LmtleXModGhpcykuZm9yRWFjaChmdW5jdGlvbihrKSB7XG4gICAgcmVzdWx0W2tdID0gdGhpc1trXTtcbiAgfSwgdGhpcyk7XG5cbiAgLy8gaGFzaCBpcyBhbHdheXMgb3ZlcnJpZGRlbiwgbm8gbWF0dGVyIHdoYXQuXG4gIC8vIGV2ZW4gaHJlZj1cIlwiIHdpbGwgcmVtb3ZlIGl0LlxuICByZXN1bHQuaGFzaCA9IHJlbGF0aXZlLmhhc2g7XG5cbiAgLy8gaWYgdGhlIHJlbGF0aXZlIHVybCBpcyBlbXB0eSwgdGhlbiB0aGVyZSdzIG5vdGhpbmcgbGVmdCB0byBkbyBoZXJlLlxuICBpZiAocmVsYXRpdmUuaHJlZiA9PT0gJycpIHtcbiAgICByZXN1bHQuaHJlZiA9IHJlc3VsdC5mb3JtYXQoKTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgLy8gaHJlZnMgbGlrZSAvL2Zvby9iYXIgYWx3YXlzIGN1dCB0byB0aGUgcHJvdG9jb2wuXG4gIGlmIChyZWxhdGl2ZS5zbGFzaGVzICYmICFyZWxhdGl2ZS5wcm90b2NvbCkge1xuICAgIC8vIHRha2UgZXZlcnl0aGluZyBleGNlcHQgdGhlIHByb3RvY29sIGZyb20gcmVsYXRpdmVcbiAgICBPYmplY3Qua2V5cyhyZWxhdGl2ZSkuZm9yRWFjaChmdW5jdGlvbihrKSB7XG4gICAgICBpZiAoayAhPT0gJ3Byb3RvY29sJylcbiAgICAgICAgcmVzdWx0W2tdID0gcmVsYXRpdmVba107XG4gICAgfSk7XG5cbiAgICAvL3VybFBhcnNlIGFwcGVuZHMgdHJhaWxpbmcgLyB0byB1cmxzIGxpa2UgaHR0cDovL3d3dy5leGFtcGxlLmNvbVxuICAgIGlmIChzbGFzaGVkUHJvdG9jb2xbcmVzdWx0LnByb3RvY29sXSAmJlxuICAgICAgICByZXN1bHQuaG9zdG5hbWUgJiYgIXJlc3VsdC5wYXRobmFtZSkge1xuICAgICAgcmVzdWx0LnBhdGggPSByZXN1bHQucGF0aG5hbWUgPSAnLyc7XG4gICAgfVxuXG4gICAgcmVzdWx0LmhyZWYgPSByZXN1bHQuZm9ybWF0KCk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIGlmIChyZWxhdGl2ZS5wcm90b2NvbCAmJiByZWxhdGl2ZS5wcm90b2NvbCAhPT0gcmVzdWx0LnByb3RvY29sKSB7XG4gICAgLy8gaWYgaXQncyBhIGtub3duIHVybCBwcm90b2NvbCwgdGhlbiBjaGFuZ2luZ1xuICAgIC8vIHRoZSBwcm90b2NvbCBkb2VzIHdlaXJkIHRoaW5nc1xuICAgIC8vIGZpcnN0LCBpZiBpdCdzIG5vdCBmaWxlOiwgdGhlbiB3ZSBNVVNUIGhhdmUgYSBob3N0LFxuICAgIC8vIGFuZCBpZiB0aGVyZSB3YXMgYSBwYXRoXG4gICAgLy8gdG8gYmVnaW4gd2l0aCwgdGhlbiB3ZSBNVVNUIGhhdmUgYSBwYXRoLlxuICAgIC8vIGlmIGl0IGlzIGZpbGU6LCB0aGVuIHRoZSBob3N0IGlzIGRyb3BwZWQsXG4gICAgLy8gYmVjYXVzZSB0aGF0J3Mga25vd24gdG8gYmUgaG9zdGxlc3MuXG4gICAgLy8gYW55dGhpbmcgZWxzZSBpcyBhc3N1bWVkIHRvIGJlIGFic29sdXRlLlxuICAgIGlmICghc2xhc2hlZFByb3RvY29sW3JlbGF0aXZlLnByb3RvY29sXSkge1xuICAgICAgT2JqZWN0LmtleXMocmVsYXRpdmUpLmZvckVhY2goZnVuY3Rpb24oaykge1xuICAgICAgICByZXN1bHRba10gPSByZWxhdGl2ZVtrXTtcbiAgICAgIH0pO1xuICAgICAgcmVzdWx0LmhyZWYgPSByZXN1bHQuZm9ybWF0KCk7XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIHJlc3VsdC5wcm90b2NvbCA9IHJlbGF0aXZlLnByb3RvY29sO1xuICAgIGlmICghcmVsYXRpdmUuaG9zdCAmJiAhaG9zdGxlc3NQcm90b2NvbFtyZWxhdGl2ZS5wcm90b2NvbF0pIHtcbiAgICAgIHZhciByZWxQYXRoID0gKHJlbGF0aXZlLnBhdGhuYW1lIHx8ICcnKS5zcGxpdCgnLycpO1xuICAgICAgd2hpbGUgKHJlbFBhdGgubGVuZ3RoICYmICEocmVsYXRpdmUuaG9zdCA9IHJlbFBhdGguc2hpZnQoKSkpO1xuICAgICAgaWYgKCFyZWxhdGl2ZS5ob3N0KSByZWxhdGl2ZS5ob3N0ID0gJyc7XG4gICAgICBpZiAoIXJlbGF0aXZlLmhvc3RuYW1lKSByZWxhdGl2ZS5ob3N0bmFtZSA9ICcnO1xuICAgICAgaWYgKHJlbFBhdGhbMF0gIT09ICcnKSByZWxQYXRoLnVuc2hpZnQoJycpO1xuICAgICAgaWYgKHJlbFBhdGgubGVuZ3RoIDwgMikgcmVsUGF0aC51bnNoaWZ0KCcnKTtcbiAgICAgIHJlc3VsdC5wYXRobmFtZSA9IHJlbFBhdGguam9pbignLycpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXN1bHQucGF0aG5hbWUgPSByZWxhdGl2ZS5wYXRobmFtZTtcbiAgICB9XG4gICAgcmVzdWx0LnNlYXJjaCA9IHJlbGF0aXZlLnNlYXJjaDtcbiAgICByZXN1bHQucXVlcnkgPSByZWxhdGl2ZS5xdWVyeTtcbiAgICByZXN1bHQuaG9zdCA9IHJlbGF0aXZlLmhvc3QgfHwgJyc7XG4gICAgcmVzdWx0LmF1dGggPSByZWxhdGl2ZS5hdXRoO1xuICAgIHJlc3VsdC5ob3N0bmFtZSA9IHJlbGF0aXZlLmhvc3RuYW1lIHx8IHJlbGF0aXZlLmhvc3Q7XG4gICAgcmVzdWx0LnBvcnQgPSByZWxhdGl2ZS5wb3J0O1xuICAgIC8vIHRvIHN1cHBvcnQgaHR0cC5yZXF1ZXN0XG4gICAgaWYgKHJlc3VsdC5wYXRobmFtZSB8fCByZXN1bHQuc2VhcmNoKSB7XG4gICAgICB2YXIgcCA9IHJlc3VsdC5wYXRobmFtZSB8fCAnJztcbiAgICAgIHZhciBzID0gcmVzdWx0LnNlYXJjaCB8fCAnJztcbiAgICAgIHJlc3VsdC5wYXRoID0gcCArIHM7XG4gICAgfVxuICAgIHJlc3VsdC5zbGFzaGVzID0gcmVzdWx0LnNsYXNoZXMgfHwgcmVsYXRpdmUuc2xhc2hlcztcbiAgICByZXN1bHQuaHJlZiA9IHJlc3VsdC5mb3JtYXQoKTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgdmFyIGlzU291cmNlQWJzID0gKHJlc3VsdC5wYXRobmFtZSAmJiByZXN1bHQucGF0aG5hbWUuY2hhckF0KDApID09PSAnLycpLFxuICAgICAgaXNSZWxBYnMgPSAoXG4gICAgICAgICAgcmVsYXRpdmUuaG9zdCB8fFxuICAgICAgICAgIHJlbGF0aXZlLnBhdGhuYW1lICYmIHJlbGF0aXZlLnBhdGhuYW1lLmNoYXJBdCgwKSA9PT0gJy8nXG4gICAgICApLFxuICAgICAgbXVzdEVuZEFicyA9IChpc1JlbEFicyB8fCBpc1NvdXJjZUFicyB8fFxuICAgICAgICAgICAgICAgICAgICAocmVzdWx0Lmhvc3QgJiYgcmVsYXRpdmUucGF0aG5hbWUpKSxcbiAgICAgIHJlbW92ZUFsbERvdHMgPSBtdXN0RW5kQWJzLFxuICAgICAgc3JjUGF0aCA9IHJlc3VsdC5wYXRobmFtZSAmJiByZXN1bHQucGF0aG5hbWUuc3BsaXQoJy8nKSB8fCBbXSxcbiAgICAgIHJlbFBhdGggPSByZWxhdGl2ZS5wYXRobmFtZSAmJiByZWxhdGl2ZS5wYXRobmFtZS5zcGxpdCgnLycpIHx8IFtdLFxuICAgICAgcHN5Y2hvdGljID0gcmVzdWx0LnByb3RvY29sICYmICFzbGFzaGVkUHJvdG9jb2xbcmVzdWx0LnByb3RvY29sXTtcblxuICAvLyBpZiB0aGUgdXJsIGlzIGEgbm9uLXNsYXNoZWQgdXJsLCB0aGVuIHJlbGF0aXZlXG4gIC8vIGxpbmtzIGxpa2UgLi4vLi4gc2hvdWxkIGJlIGFibGVcbiAgLy8gdG8gY3Jhd2wgdXAgdG8gdGhlIGhvc3RuYW1lLCBhcyB3ZWxsLiAgVGhpcyBpcyBzdHJhbmdlLlxuICAvLyByZXN1bHQucHJvdG9jb2wgaGFzIGFscmVhZHkgYmVlbiBzZXQgYnkgbm93LlxuICAvLyBMYXRlciBvbiwgcHV0IHRoZSBmaXJzdCBwYXRoIHBhcnQgaW50byB0aGUgaG9zdCBmaWVsZC5cbiAgaWYgKHBzeWNob3RpYykge1xuICAgIHJlc3VsdC5ob3N0bmFtZSA9ICcnO1xuICAgIHJlc3VsdC5wb3J0ID0gbnVsbDtcbiAgICBpZiAocmVzdWx0Lmhvc3QpIHtcbiAgICAgIGlmIChzcmNQYXRoWzBdID09PSAnJykgc3JjUGF0aFswXSA9IHJlc3VsdC5ob3N0O1xuICAgICAgZWxzZSBzcmNQYXRoLnVuc2hpZnQocmVzdWx0Lmhvc3QpO1xuICAgIH1cbiAgICByZXN1bHQuaG9zdCA9ICcnO1xuICAgIGlmIChyZWxhdGl2ZS5wcm90b2NvbCkge1xuICAgICAgcmVsYXRpdmUuaG9zdG5hbWUgPSBudWxsO1xuICAgICAgcmVsYXRpdmUucG9ydCA9IG51bGw7XG4gICAgICBpZiAocmVsYXRpdmUuaG9zdCkge1xuICAgICAgICBpZiAocmVsUGF0aFswXSA9PT0gJycpIHJlbFBhdGhbMF0gPSByZWxhdGl2ZS5ob3N0O1xuICAgICAgICBlbHNlIHJlbFBhdGgudW5zaGlmdChyZWxhdGl2ZS5ob3N0KTtcbiAgICAgIH1cbiAgICAgIHJlbGF0aXZlLmhvc3QgPSBudWxsO1xuICAgIH1cbiAgICBtdXN0RW5kQWJzID0gbXVzdEVuZEFicyAmJiAocmVsUGF0aFswXSA9PT0gJycgfHwgc3JjUGF0aFswXSA9PT0gJycpO1xuICB9XG5cbiAgaWYgKGlzUmVsQWJzKSB7XG4gICAgLy8gaXQncyBhYnNvbHV0ZS5cbiAgICByZXN1bHQuaG9zdCA9IChyZWxhdGl2ZS5ob3N0IHx8IHJlbGF0aXZlLmhvc3QgPT09ICcnKSA/XG4gICAgICAgICAgICAgICAgICByZWxhdGl2ZS5ob3N0IDogcmVzdWx0Lmhvc3Q7XG4gICAgcmVzdWx0Lmhvc3RuYW1lID0gKHJlbGF0aXZlLmhvc3RuYW1lIHx8IHJlbGF0aXZlLmhvc3RuYW1lID09PSAnJykgP1xuICAgICAgICAgICAgICAgICAgICAgIHJlbGF0aXZlLmhvc3RuYW1lIDogcmVzdWx0Lmhvc3RuYW1lO1xuICAgIHJlc3VsdC5zZWFyY2ggPSByZWxhdGl2ZS5zZWFyY2g7XG4gICAgcmVzdWx0LnF1ZXJ5ID0gcmVsYXRpdmUucXVlcnk7XG4gICAgc3JjUGF0aCA9IHJlbFBhdGg7XG4gICAgLy8gZmFsbCB0aHJvdWdoIHRvIHRoZSBkb3QtaGFuZGxpbmcgYmVsb3cuXG4gIH0gZWxzZSBpZiAocmVsUGF0aC5sZW5ndGgpIHtcbiAgICAvLyBpdCdzIHJlbGF0aXZlXG4gICAgLy8gdGhyb3cgYXdheSB0aGUgZXhpc3RpbmcgZmlsZSwgYW5kIHRha2UgdGhlIG5ldyBwYXRoIGluc3RlYWQuXG4gICAgaWYgKCFzcmNQYXRoKSBzcmNQYXRoID0gW107XG4gICAgc3JjUGF0aC5wb3AoKTtcbiAgICBzcmNQYXRoID0gc3JjUGF0aC5jb25jYXQocmVsUGF0aCk7XG4gICAgcmVzdWx0LnNlYXJjaCA9IHJlbGF0aXZlLnNlYXJjaDtcbiAgICByZXN1bHQucXVlcnkgPSByZWxhdGl2ZS5xdWVyeTtcbiAgfSBlbHNlIGlmICghaXNOdWxsT3JVbmRlZmluZWQocmVsYXRpdmUuc2VhcmNoKSkge1xuICAgIC8vIGp1c3QgcHVsbCBvdXQgdGhlIHNlYXJjaC5cbiAgICAvLyBsaWtlIGhyZWY9Jz9mb28nLlxuICAgIC8vIFB1dCB0aGlzIGFmdGVyIHRoZSBvdGhlciB0d28gY2FzZXMgYmVjYXVzZSBpdCBzaW1wbGlmaWVzIHRoZSBib29sZWFuc1xuICAgIGlmIChwc3ljaG90aWMpIHtcbiAgICAgIHJlc3VsdC5ob3N0bmFtZSA9IHJlc3VsdC5ob3N0ID0gc3JjUGF0aC5zaGlmdCgpO1xuICAgICAgLy9vY2NhdGlvbmFseSB0aGUgYXV0aCBjYW4gZ2V0IHN0dWNrIG9ubHkgaW4gaG9zdFxuICAgICAgLy90aGlzIGVzcGVjaWFseSBoYXBwZW5zIGluIGNhc2VzIGxpa2VcbiAgICAgIC8vdXJsLnJlc29sdmVPYmplY3QoJ21haWx0bzpsb2NhbDFAZG9tYWluMScsICdsb2NhbDJAZG9tYWluMicpXG4gICAgICB2YXIgYXV0aEluSG9zdCA9IHJlc3VsdC5ob3N0ICYmIHJlc3VsdC5ob3N0LmluZGV4T2YoJ0AnKSA+IDAgP1xuICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQuaG9zdC5zcGxpdCgnQCcpIDogZmFsc2U7XG4gICAgICBpZiAoYXV0aEluSG9zdCkge1xuICAgICAgICByZXN1bHQuYXV0aCA9IGF1dGhJbkhvc3Quc2hpZnQoKTtcbiAgICAgICAgcmVzdWx0Lmhvc3QgPSByZXN1bHQuaG9zdG5hbWUgPSBhdXRoSW5Ib3N0LnNoaWZ0KCk7XG4gICAgICB9XG4gICAgfVxuICAgIHJlc3VsdC5zZWFyY2ggPSByZWxhdGl2ZS5zZWFyY2g7XG4gICAgcmVzdWx0LnF1ZXJ5ID0gcmVsYXRpdmUucXVlcnk7XG4gICAgLy90byBzdXBwb3J0IGh0dHAucmVxdWVzdFxuICAgIGlmICghaXNOdWxsKHJlc3VsdC5wYXRobmFtZSkgfHwgIWlzTnVsbChyZXN1bHQuc2VhcmNoKSkge1xuICAgICAgcmVzdWx0LnBhdGggPSAocmVzdWx0LnBhdGhuYW1lID8gcmVzdWx0LnBhdGhuYW1lIDogJycpICtcbiAgICAgICAgICAgICAgICAgICAgKHJlc3VsdC5zZWFyY2ggPyByZXN1bHQuc2VhcmNoIDogJycpO1xuICAgIH1cbiAgICByZXN1bHQuaHJlZiA9IHJlc3VsdC5mb3JtYXQoKTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgaWYgKCFzcmNQYXRoLmxlbmd0aCkge1xuICAgIC8vIG5vIHBhdGggYXQgYWxsLiAgZWFzeS5cbiAgICAvLyB3ZSd2ZSBhbHJlYWR5IGhhbmRsZWQgdGhlIG90aGVyIHN0dWZmIGFib3ZlLlxuICAgIHJlc3VsdC5wYXRobmFtZSA9IG51bGw7XG4gICAgLy90byBzdXBwb3J0IGh0dHAucmVxdWVzdFxuICAgIGlmIChyZXN1bHQuc2VhcmNoKSB7XG4gICAgICByZXN1bHQucGF0aCA9ICcvJyArIHJlc3VsdC5zZWFyY2g7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJlc3VsdC5wYXRoID0gbnVsbDtcbiAgICB9XG4gICAgcmVzdWx0LmhyZWYgPSByZXN1bHQuZm9ybWF0KCk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIC8vIGlmIGEgdXJsIEVORHMgaW4gLiBvciAuLiwgdGhlbiBpdCBtdXN0IGdldCBhIHRyYWlsaW5nIHNsYXNoLlxuICAvLyBob3dldmVyLCBpZiBpdCBlbmRzIGluIGFueXRoaW5nIGVsc2Ugbm9uLXNsYXNoeSxcbiAgLy8gdGhlbiBpdCBtdXN0IE5PVCBnZXQgYSB0cmFpbGluZyBzbGFzaC5cbiAgdmFyIGxhc3QgPSBzcmNQYXRoLnNsaWNlKC0xKVswXTtcbiAgdmFyIGhhc1RyYWlsaW5nU2xhc2ggPSAoXG4gICAgICAocmVzdWx0Lmhvc3QgfHwgcmVsYXRpdmUuaG9zdCkgJiYgKGxhc3QgPT09ICcuJyB8fCBsYXN0ID09PSAnLi4nKSB8fFxuICAgICAgbGFzdCA9PT0gJycpO1xuXG4gIC8vIHN0cmlwIHNpbmdsZSBkb3RzLCByZXNvbHZlIGRvdWJsZSBkb3RzIHRvIHBhcmVudCBkaXJcbiAgLy8gaWYgdGhlIHBhdGggdHJpZXMgdG8gZ28gYWJvdmUgdGhlIHJvb3QsIGB1cGAgZW5kcyB1cCA+IDBcbiAgdmFyIHVwID0gMDtcbiAgZm9yICh2YXIgaSA9IHNyY1BhdGgubGVuZ3RoOyBpID49IDA7IGktLSkge1xuICAgIGxhc3QgPSBzcmNQYXRoW2ldO1xuICAgIGlmIChsYXN0ID09ICcuJykge1xuICAgICAgc3JjUGF0aC5zcGxpY2UoaSwgMSk7XG4gICAgfSBlbHNlIGlmIChsYXN0ID09PSAnLi4nKSB7XG4gICAgICBzcmNQYXRoLnNwbGljZShpLCAxKTtcbiAgICAgIHVwKys7XG4gICAgfSBlbHNlIGlmICh1cCkge1xuICAgICAgc3JjUGF0aC5zcGxpY2UoaSwgMSk7XG4gICAgICB1cC0tO1xuICAgIH1cbiAgfVxuXG4gIC8vIGlmIHRoZSBwYXRoIGlzIGFsbG93ZWQgdG8gZ28gYWJvdmUgdGhlIHJvb3QsIHJlc3RvcmUgbGVhZGluZyAuLnNcbiAgaWYgKCFtdXN0RW5kQWJzICYmICFyZW1vdmVBbGxEb3RzKSB7XG4gICAgZm9yICg7IHVwLS07IHVwKSB7XG4gICAgICBzcmNQYXRoLnVuc2hpZnQoJy4uJyk7XG4gICAgfVxuICB9XG5cbiAgaWYgKG11c3RFbmRBYnMgJiYgc3JjUGF0aFswXSAhPT0gJycgJiZcbiAgICAgICghc3JjUGF0aFswXSB8fCBzcmNQYXRoWzBdLmNoYXJBdCgwKSAhPT0gJy8nKSkge1xuICAgIHNyY1BhdGgudW5zaGlmdCgnJyk7XG4gIH1cblxuICBpZiAoaGFzVHJhaWxpbmdTbGFzaCAmJiAoc3JjUGF0aC5qb2luKCcvJykuc3Vic3RyKC0xKSAhPT0gJy8nKSkge1xuICAgIHNyY1BhdGgucHVzaCgnJyk7XG4gIH1cblxuICB2YXIgaXNBYnNvbHV0ZSA9IHNyY1BhdGhbMF0gPT09ICcnIHx8XG4gICAgICAoc3JjUGF0aFswXSAmJiBzcmNQYXRoWzBdLmNoYXJBdCgwKSA9PT0gJy8nKTtcblxuICAvLyBwdXQgdGhlIGhvc3QgYmFja1xuICBpZiAocHN5Y2hvdGljKSB7XG4gICAgcmVzdWx0Lmhvc3RuYW1lID0gcmVzdWx0Lmhvc3QgPSBpc0Fic29sdXRlID8gJycgOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjUGF0aC5sZW5ndGggPyBzcmNQYXRoLnNoaWZ0KCkgOiAnJztcbiAgICAvL29jY2F0aW9uYWx5IHRoZSBhdXRoIGNhbiBnZXQgc3R1Y2sgb25seSBpbiBob3N0XG4gICAgLy90aGlzIGVzcGVjaWFseSBoYXBwZW5zIGluIGNhc2VzIGxpa2VcbiAgICAvL3VybC5yZXNvbHZlT2JqZWN0KCdtYWlsdG86bG9jYWwxQGRvbWFpbjEnLCAnbG9jYWwyQGRvbWFpbjInKVxuICAgIHZhciBhdXRoSW5Ib3N0ID0gcmVzdWx0Lmhvc3QgJiYgcmVzdWx0Lmhvc3QuaW5kZXhPZignQCcpID4gMCA/XG4gICAgICAgICAgICAgICAgICAgICByZXN1bHQuaG9zdC5zcGxpdCgnQCcpIDogZmFsc2U7XG4gICAgaWYgKGF1dGhJbkhvc3QpIHtcbiAgICAgIHJlc3VsdC5hdXRoID0gYXV0aEluSG9zdC5zaGlmdCgpO1xuICAgICAgcmVzdWx0Lmhvc3QgPSByZXN1bHQuaG9zdG5hbWUgPSBhdXRoSW5Ib3N0LnNoaWZ0KCk7XG4gICAgfVxuICB9XG5cbiAgbXVzdEVuZEFicyA9IG11c3RFbmRBYnMgfHwgKHJlc3VsdC5ob3N0ICYmIHNyY1BhdGgubGVuZ3RoKTtcblxuICBpZiAobXVzdEVuZEFicyAmJiAhaXNBYnNvbHV0ZSkge1xuICAgIHNyY1BhdGgudW5zaGlmdCgnJyk7XG4gIH1cblxuICBpZiAoIXNyY1BhdGgubGVuZ3RoKSB7XG4gICAgcmVzdWx0LnBhdGhuYW1lID0gbnVsbDtcbiAgICByZXN1bHQucGF0aCA9IG51bGw7XG4gIH0gZWxzZSB7XG4gICAgcmVzdWx0LnBhdGhuYW1lID0gc3JjUGF0aC5qb2luKCcvJyk7XG4gIH1cblxuICAvL3RvIHN1cHBvcnQgcmVxdWVzdC5odHRwXG4gIGlmICghaXNOdWxsKHJlc3VsdC5wYXRobmFtZSkgfHwgIWlzTnVsbChyZXN1bHQuc2VhcmNoKSkge1xuICAgIHJlc3VsdC5wYXRoID0gKHJlc3VsdC5wYXRobmFtZSA/IHJlc3VsdC5wYXRobmFtZSA6ICcnKSArXG4gICAgICAgICAgICAgICAgICAocmVzdWx0LnNlYXJjaCA/IHJlc3VsdC5zZWFyY2ggOiAnJyk7XG4gIH1cbiAgcmVzdWx0LmF1dGggPSByZWxhdGl2ZS5hdXRoIHx8IHJlc3VsdC5hdXRoO1xuICByZXN1bHQuc2xhc2hlcyA9IHJlc3VsdC5zbGFzaGVzIHx8IHJlbGF0aXZlLnNsYXNoZXM7XG4gIHJlc3VsdC5ocmVmID0gcmVzdWx0LmZvcm1hdCgpO1xuICByZXR1cm4gcmVzdWx0O1xufTtcblxuVXJsLnByb3RvdHlwZS5wYXJzZUhvc3QgPSBmdW5jdGlvbigpIHtcbiAgdmFyIGhvc3QgPSB0aGlzLmhvc3Q7XG4gIHZhciBwb3J0ID0gcG9ydFBhdHRlcm4uZXhlYyhob3N0KTtcbiAgaWYgKHBvcnQpIHtcbiAgICBwb3J0ID0gcG9ydFswXTtcbiAgICBpZiAocG9ydCAhPT0gJzonKSB7XG4gICAgICB0aGlzLnBvcnQgPSBwb3J0LnN1YnN0cigxKTtcbiAgICB9XG4gICAgaG9zdCA9IGhvc3Quc3Vic3RyKDAsIGhvc3QubGVuZ3RoIC0gcG9ydC5sZW5ndGgpO1xuICB9XG4gIGlmIChob3N0KSB0aGlzLmhvc3RuYW1lID0gaG9zdDtcbn07XG5cbmZ1bmN0aW9uIGlzU3RyaW5nKGFyZykge1xuICByZXR1cm4gdHlwZW9mIGFyZyA9PT0gXCJzdHJpbmdcIjtcbn1cblxuZnVuY3Rpb24gaXNPYmplY3QoYXJnKSB7XG4gIHJldHVybiB0eXBlb2YgYXJnID09PSAnb2JqZWN0JyAmJiBhcmcgIT09IG51bGw7XG59XG5cbmZ1bmN0aW9uIGlzTnVsbChhcmcpIHtcbiAgcmV0dXJuIGFyZyA9PT0gbnVsbDtcbn1cbmZ1bmN0aW9uIGlzTnVsbE9yVW5kZWZpbmVkKGFyZykge1xuICByZXR1cm4gIGFyZyA9PSBudWxsO1xufVxuIiwiJ3VzZSBzdHJpY3QnO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGVhcmN1dDtcblxuZnVuY3Rpb24gZWFyY3V0KGRhdGEsIGhvbGVJbmRpY2VzLCBkaW0pIHtcblxuICAgIGRpbSA9IGRpbSB8fCAyO1xuXG4gICAgdmFyIGhhc0hvbGVzID0gaG9sZUluZGljZXMgJiYgaG9sZUluZGljZXMubGVuZ3RoLFxuICAgICAgICBvdXRlckxlbiA9IGhhc0hvbGVzID8gaG9sZUluZGljZXNbMF0gKiBkaW0gOiBkYXRhLmxlbmd0aCxcbiAgICAgICAgb3V0ZXJOb2RlID0gbGlua2VkTGlzdChkYXRhLCAwLCBvdXRlckxlbiwgZGltLCB0cnVlKSxcbiAgICAgICAgdHJpYW5nbGVzID0gW107XG5cbiAgICBpZiAoIW91dGVyTm9kZSkgcmV0dXJuIHRyaWFuZ2xlcztcblxuICAgIHZhciBtaW5YLCBtaW5ZLCBtYXhYLCBtYXhZLCB4LCB5LCBzaXplO1xuXG4gICAgaWYgKGhhc0hvbGVzKSBvdXRlck5vZGUgPSBlbGltaW5hdGVIb2xlcyhkYXRhLCBob2xlSW5kaWNlcywgb3V0ZXJOb2RlLCBkaW0pO1xuXG4gICAgLy8gaWYgdGhlIHNoYXBlIGlzIG5vdCB0b28gc2ltcGxlLCB3ZSdsbCB1c2Ugei1vcmRlciBjdXJ2ZSBoYXNoIGxhdGVyOyBjYWxjdWxhdGUgcG9seWdvbiBiYm94XG4gICAgaWYgKGRhdGEubGVuZ3RoID4gODAgKiBkaW0pIHtcbiAgICAgICAgbWluWCA9IG1heFggPSBkYXRhWzBdO1xuICAgICAgICBtaW5ZID0gbWF4WSA9IGRhdGFbMV07XG5cbiAgICAgICAgZm9yICh2YXIgaSA9IGRpbTsgaSA8IG91dGVyTGVuOyBpICs9IGRpbSkge1xuICAgICAgICAgICAgeCA9IGRhdGFbaV07XG4gICAgICAgICAgICB5ID0gZGF0YVtpICsgMV07XG4gICAgICAgICAgICBpZiAoeCA8IG1pblgpIG1pblggPSB4O1xuICAgICAgICAgICAgaWYgKHkgPCBtaW5ZKSBtaW5ZID0geTtcbiAgICAgICAgICAgIGlmICh4ID4gbWF4WCkgbWF4WCA9IHg7XG4gICAgICAgICAgICBpZiAoeSA+IG1heFkpIG1heFkgPSB5O1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gbWluWCwgbWluWSBhbmQgc2l6ZSBhcmUgbGF0ZXIgdXNlZCB0byB0cmFuc2Zvcm0gY29vcmRzIGludG8gaW50ZWdlcnMgZm9yIHotb3JkZXIgY2FsY3VsYXRpb25cbiAgICAgICAgc2l6ZSA9IE1hdGgubWF4KG1heFggLSBtaW5YLCBtYXhZIC0gbWluWSk7XG4gICAgfVxuXG4gICAgZWFyY3V0TGlua2VkKG91dGVyTm9kZSwgdHJpYW5nbGVzLCBkaW0sIG1pblgsIG1pblksIHNpemUpO1xuXG4gICAgcmV0dXJuIHRyaWFuZ2xlcztcbn1cblxuLy8gY3JlYXRlIGEgY2lyY3VsYXIgZG91Ymx5IGxpbmtlZCBsaXN0IGZyb20gcG9seWdvbiBwb2ludHMgaW4gdGhlIHNwZWNpZmllZCB3aW5kaW5nIG9yZGVyXG5mdW5jdGlvbiBsaW5rZWRMaXN0KGRhdGEsIHN0YXJ0LCBlbmQsIGRpbSwgY2xvY2t3aXNlKSB7XG4gICAgdmFyIHN1bSA9IDAsXG4gICAgICAgIGksIGosIGxhc3Q7XG5cbiAgICAvLyBjYWxjdWxhdGUgb3JpZ2luYWwgd2luZGluZyBvcmRlciBvZiBhIHBvbHlnb24gcmluZ1xuICAgIGZvciAoaSA9IHN0YXJ0LCBqID0gZW5kIC0gZGltOyBpIDwgZW5kOyBpICs9IGRpbSkge1xuICAgICAgICBzdW0gKz0gKGRhdGFbal0gLSBkYXRhW2ldKSAqIChkYXRhW2kgKyAxXSArIGRhdGFbaiArIDFdKTtcbiAgICAgICAgaiA9IGk7XG4gICAgfVxuXG4gICAgLy8gbGluayBwb2ludHMgaW50byBjaXJjdWxhciBkb3VibHktbGlua2VkIGxpc3QgaW4gdGhlIHNwZWNpZmllZCB3aW5kaW5nIG9yZGVyXG4gICAgaWYgKGNsb2Nrd2lzZSA9PT0gKHN1bSA+IDApKSB7XG4gICAgICAgIGZvciAoaSA9IHN0YXJ0OyBpIDwgZW5kOyBpICs9IGRpbSkgbGFzdCA9IGluc2VydE5vZGUoaSwgZGF0YVtpXSwgZGF0YVtpICsgMV0sIGxhc3QpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIGZvciAoaSA9IGVuZCAtIGRpbTsgaSA+PSBzdGFydDsgaSAtPSBkaW0pIGxhc3QgPSBpbnNlcnROb2RlKGksIGRhdGFbaV0sIGRhdGFbaSArIDFdLCBsYXN0KTtcbiAgICB9XG5cbiAgICByZXR1cm4gbGFzdDtcbn1cblxuLy8gZWxpbWluYXRlIGNvbGluZWFyIG9yIGR1cGxpY2F0ZSBwb2ludHNcbmZ1bmN0aW9uIGZpbHRlclBvaW50cyhzdGFydCwgZW5kKSB7XG4gICAgaWYgKCFzdGFydCkgcmV0dXJuIHN0YXJ0O1xuICAgIGlmICghZW5kKSBlbmQgPSBzdGFydDtcblxuICAgIHZhciBwID0gc3RhcnQsXG4gICAgICAgIGFnYWluO1xuICAgIGRvIHtcbiAgICAgICAgYWdhaW4gPSBmYWxzZTtcblxuICAgICAgICBpZiAoIXAuc3RlaW5lciAmJiAoZXF1YWxzKHAsIHAubmV4dCkgfHwgYXJlYShwLnByZXYsIHAsIHAubmV4dCkgPT09IDApKSB7XG4gICAgICAgICAgICByZW1vdmVOb2RlKHApO1xuICAgICAgICAgICAgcCA9IGVuZCA9IHAucHJldjtcbiAgICAgICAgICAgIGlmIChwID09PSBwLm5leHQpIHJldHVybiBudWxsO1xuICAgICAgICAgICAgYWdhaW4gPSB0cnVlO1xuXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBwID0gcC5uZXh0O1xuICAgICAgICB9XG4gICAgfSB3aGlsZSAoYWdhaW4gfHwgcCAhPT0gZW5kKTtcblxuICAgIHJldHVybiBlbmQ7XG59XG5cbi8vIG1haW4gZWFyIHNsaWNpbmcgbG9vcCB3aGljaCB0cmlhbmd1bGF0ZXMgYSBwb2x5Z29uIChnaXZlbiBhcyBhIGxpbmtlZCBsaXN0KVxuZnVuY3Rpb24gZWFyY3V0TGlua2VkKGVhciwgdHJpYW5nbGVzLCBkaW0sIG1pblgsIG1pblksIHNpemUsIHBhc3MpIHtcbiAgICBpZiAoIWVhcikgcmV0dXJuO1xuXG4gICAgLy8gaW50ZXJsaW5rIHBvbHlnb24gbm9kZXMgaW4gei1vcmRlclxuICAgIGlmICghcGFzcyAmJiBzaXplKSBpbmRleEN1cnZlKGVhciwgbWluWCwgbWluWSwgc2l6ZSk7XG5cbiAgICB2YXIgc3RvcCA9IGVhcixcbiAgICAgICAgcHJldiwgbmV4dDtcblxuICAgIC8vIGl0ZXJhdGUgdGhyb3VnaCBlYXJzLCBzbGljaW5nIHRoZW0gb25lIGJ5IG9uZVxuICAgIHdoaWxlIChlYXIucHJldiAhPT0gZWFyLm5leHQpIHtcbiAgICAgICAgcHJldiA9IGVhci5wcmV2O1xuICAgICAgICBuZXh0ID0gZWFyLm5leHQ7XG5cbiAgICAgICAgaWYgKHNpemUgPyBpc0Vhckhhc2hlZChlYXIsIG1pblgsIG1pblksIHNpemUpIDogaXNFYXIoZWFyKSkge1xuICAgICAgICAgICAgLy8gY3V0IG9mZiB0aGUgdHJpYW5nbGVcbiAgICAgICAgICAgIHRyaWFuZ2xlcy5wdXNoKHByZXYuaSAvIGRpbSk7XG4gICAgICAgICAgICB0cmlhbmdsZXMucHVzaChlYXIuaSAvIGRpbSk7XG4gICAgICAgICAgICB0cmlhbmdsZXMucHVzaChuZXh0LmkgLyBkaW0pO1xuXG4gICAgICAgICAgICByZW1vdmVOb2RlKGVhcik7XG5cbiAgICAgICAgICAgIC8vIHNraXBwaW5nIHRoZSBuZXh0IHZlcnRpY2UgbGVhZHMgdG8gbGVzcyBzbGl2ZXIgdHJpYW5nbGVzXG4gICAgICAgICAgICBlYXIgPSBuZXh0Lm5leHQ7XG4gICAgICAgICAgICBzdG9wID0gbmV4dC5uZXh0O1xuXG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGVhciA9IG5leHQ7XG5cbiAgICAgICAgLy8gaWYgd2UgbG9vcGVkIHRocm91Z2ggdGhlIHdob2xlIHJlbWFpbmluZyBwb2x5Z29uIGFuZCBjYW4ndCBmaW5kIGFueSBtb3JlIGVhcnNcbiAgICAgICAgaWYgKGVhciA9PT0gc3RvcCkge1xuICAgICAgICAgICAgLy8gdHJ5IGZpbHRlcmluZyBwb2ludHMgYW5kIHNsaWNpbmcgYWdhaW5cbiAgICAgICAgICAgIGlmICghcGFzcykge1xuICAgICAgICAgICAgICAgIGVhcmN1dExpbmtlZChmaWx0ZXJQb2ludHMoZWFyKSwgdHJpYW5nbGVzLCBkaW0sIG1pblgsIG1pblksIHNpemUsIDEpO1xuXG4gICAgICAgICAgICAvLyBpZiB0aGlzIGRpZG4ndCB3b3JrLCB0cnkgY3VyaW5nIGFsbCBzbWFsbCBzZWxmLWludGVyc2VjdGlvbnMgbG9jYWxseVxuICAgICAgICAgICAgfSBlbHNlIGlmIChwYXNzID09PSAxKSB7XG4gICAgICAgICAgICAgICAgZWFyID0gY3VyZUxvY2FsSW50ZXJzZWN0aW9ucyhlYXIsIHRyaWFuZ2xlcywgZGltKTtcbiAgICAgICAgICAgICAgICBlYXJjdXRMaW5rZWQoZWFyLCB0cmlhbmdsZXMsIGRpbSwgbWluWCwgbWluWSwgc2l6ZSwgMik7XG5cbiAgICAgICAgICAgIC8vIGFzIGEgbGFzdCByZXNvcnQsIHRyeSBzcGxpdHRpbmcgdGhlIHJlbWFpbmluZyBwb2x5Z29uIGludG8gdHdvXG4gICAgICAgICAgICB9IGVsc2UgaWYgKHBhc3MgPT09IDIpIHtcbiAgICAgICAgICAgICAgICBzcGxpdEVhcmN1dChlYXIsIHRyaWFuZ2xlcywgZGltLCBtaW5YLCBtaW5ZLCBzaXplKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbi8vIGNoZWNrIHdoZXRoZXIgYSBwb2x5Z29uIG5vZGUgZm9ybXMgYSB2YWxpZCBlYXIgd2l0aCBhZGphY2VudCBub2Rlc1xuZnVuY3Rpb24gaXNFYXIoZWFyKSB7XG4gICAgdmFyIGEgPSBlYXIucHJldixcbiAgICAgICAgYiA9IGVhcixcbiAgICAgICAgYyA9IGVhci5uZXh0O1xuXG4gICAgaWYgKGFyZWEoYSwgYiwgYykgPj0gMCkgcmV0dXJuIGZhbHNlOyAvLyByZWZsZXgsIGNhbid0IGJlIGFuIGVhclxuXG4gICAgLy8gbm93IG1ha2Ugc3VyZSB3ZSBkb24ndCBoYXZlIG90aGVyIHBvaW50cyBpbnNpZGUgdGhlIHBvdGVudGlhbCBlYXJcbiAgICB2YXIgcCA9IGVhci5uZXh0Lm5leHQ7XG5cbiAgICB3aGlsZSAocCAhPT0gZWFyLnByZXYpIHtcbiAgICAgICAgaWYgKHBvaW50SW5UcmlhbmdsZShhLngsIGEueSwgYi54LCBiLnksIGMueCwgYy55LCBwLngsIHAueSkgJiZcbiAgICAgICAgICAgIGFyZWEocC5wcmV2LCBwLCBwLm5leHQpID49IDApIHJldHVybiBmYWxzZTtcbiAgICAgICAgcCA9IHAubmV4dDtcbiAgICB9XG5cbiAgICByZXR1cm4gdHJ1ZTtcbn1cblxuZnVuY3Rpb24gaXNFYXJIYXNoZWQoZWFyLCBtaW5YLCBtaW5ZLCBzaXplKSB7XG4gICAgdmFyIGEgPSBlYXIucHJldixcbiAgICAgICAgYiA9IGVhcixcbiAgICAgICAgYyA9IGVhci5uZXh0O1xuXG4gICAgaWYgKGFyZWEoYSwgYiwgYykgPj0gMCkgcmV0dXJuIGZhbHNlOyAvLyByZWZsZXgsIGNhbid0IGJlIGFuIGVhclxuXG4gICAgLy8gdHJpYW5nbGUgYmJveDsgbWluICYgbWF4IGFyZSBjYWxjdWxhdGVkIGxpa2UgdGhpcyBmb3Igc3BlZWRcbiAgICB2YXIgbWluVFggPSBhLnggPCBiLnggPyAoYS54IDwgYy54ID8gYS54IDogYy54KSA6IChiLnggPCBjLnggPyBiLnggOiBjLngpLFxuICAgICAgICBtaW5UWSA9IGEueSA8IGIueSA/IChhLnkgPCBjLnkgPyBhLnkgOiBjLnkpIDogKGIueSA8IGMueSA/IGIueSA6IGMueSksXG4gICAgICAgIG1heFRYID0gYS54ID4gYi54ID8gKGEueCA+IGMueCA/IGEueCA6IGMueCkgOiAoYi54ID4gYy54ID8gYi54IDogYy54KSxcbiAgICAgICAgbWF4VFkgPSBhLnkgPiBiLnkgPyAoYS55ID4gYy55ID8gYS55IDogYy55KSA6IChiLnkgPiBjLnkgPyBiLnkgOiBjLnkpO1xuXG4gICAgLy8gei1vcmRlciByYW5nZSBmb3IgdGhlIGN1cnJlbnQgdHJpYW5nbGUgYmJveDtcbiAgICB2YXIgbWluWiA9IHpPcmRlcihtaW5UWCwgbWluVFksIG1pblgsIG1pblksIHNpemUpLFxuICAgICAgICBtYXhaID0gek9yZGVyKG1heFRYLCBtYXhUWSwgbWluWCwgbWluWSwgc2l6ZSk7XG5cbiAgICAvLyBmaXJzdCBsb29rIGZvciBwb2ludHMgaW5zaWRlIHRoZSB0cmlhbmdsZSBpbiBpbmNyZWFzaW5nIHotb3JkZXJcbiAgICB2YXIgcCA9IGVhci5uZXh0WjtcblxuICAgIHdoaWxlIChwICYmIHAueiA8PSBtYXhaKSB7XG4gICAgICAgIGlmIChwICE9PSBlYXIucHJldiAmJiBwICE9PSBlYXIubmV4dCAmJlxuICAgICAgICAgICAgcG9pbnRJblRyaWFuZ2xlKGEueCwgYS55LCBiLngsIGIueSwgYy54LCBjLnksIHAueCwgcC55KSAmJlxuICAgICAgICAgICAgYXJlYShwLnByZXYsIHAsIHAubmV4dCkgPj0gMCkgcmV0dXJuIGZhbHNlO1xuICAgICAgICBwID0gcC5uZXh0WjtcbiAgICB9XG5cbiAgICAvLyB0aGVuIGxvb2sgZm9yIHBvaW50cyBpbiBkZWNyZWFzaW5nIHotb3JkZXJcbiAgICBwID0gZWFyLnByZXZaO1xuXG4gICAgd2hpbGUgKHAgJiYgcC56ID49IG1pblopIHtcbiAgICAgICAgaWYgKHAgIT09IGVhci5wcmV2ICYmIHAgIT09IGVhci5uZXh0ICYmXG4gICAgICAgICAgICBwb2ludEluVHJpYW5nbGUoYS54LCBhLnksIGIueCwgYi55LCBjLngsIGMueSwgcC54LCBwLnkpICYmXG4gICAgICAgICAgICBhcmVhKHAucHJldiwgcCwgcC5uZXh0KSA+PSAwKSByZXR1cm4gZmFsc2U7XG4gICAgICAgIHAgPSBwLnByZXZaO1xuICAgIH1cblxuICAgIHJldHVybiB0cnVlO1xufVxuXG4vLyBnbyB0aHJvdWdoIGFsbCBwb2x5Z29uIG5vZGVzIGFuZCBjdXJlIHNtYWxsIGxvY2FsIHNlbGYtaW50ZXJzZWN0aW9uc1xuZnVuY3Rpb24gY3VyZUxvY2FsSW50ZXJzZWN0aW9ucyhzdGFydCwgdHJpYW5nbGVzLCBkaW0pIHtcbiAgICB2YXIgcCA9IHN0YXJ0O1xuICAgIGRvIHtcbiAgICAgICAgdmFyIGEgPSBwLnByZXYsXG4gICAgICAgICAgICBiID0gcC5uZXh0Lm5leHQ7XG5cbiAgICAgICAgLy8gYSBzZWxmLWludGVyc2VjdGlvbiB3aGVyZSBlZGdlICh2W2ktMV0sdltpXSkgaW50ZXJzZWN0cyAodltpKzFdLHZbaSsyXSlcbiAgICAgICAgaWYgKGludGVyc2VjdHMoYSwgcCwgcC5uZXh0LCBiKSAmJiBsb2NhbGx5SW5zaWRlKGEsIGIpICYmIGxvY2FsbHlJbnNpZGUoYiwgYSkpIHtcblxuICAgICAgICAgICAgdHJpYW5nbGVzLnB1c2goYS5pIC8gZGltKTtcbiAgICAgICAgICAgIHRyaWFuZ2xlcy5wdXNoKHAuaSAvIGRpbSk7XG4gICAgICAgICAgICB0cmlhbmdsZXMucHVzaChiLmkgLyBkaW0pO1xuXG4gICAgICAgICAgICAvLyByZW1vdmUgdHdvIG5vZGVzIGludm9sdmVkXG4gICAgICAgICAgICByZW1vdmVOb2RlKHApO1xuICAgICAgICAgICAgcmVtb3ZlTm9kZShwLm5leHQpO1xuXG4gICAgICAgICAgICBwID0gc3RhcnQgPSBiO1xuICAgICAgICB9XG4gICAgICAgIHAgPSBwLm5leHQ7XG4gICAgfSB3aGlsZSAocCAhPT0gc3RhcnQpO1xuXG4gICAgcmV0dXJuIHA7XG59XG5cbi8vIHRyeSBzcGxpdHRpbmcgcG9seWdvbiBpbnRvIHR3byBhbmQgdHJpYW5ndWxhdGUgdGhlbSBpbmRlcGVuZGVudGx5XG5mdW5jdGlvbiBzcGxpdEVhcmN1dChzdGFydCwgdHJpYW5nbGVzLCBkaW0sIG1pblgsIG1pblksIHNpemUpIHtcbiAgICAvLyBsb29rIGZvciBhIHZhbGlkIGRpYWdvbmFsIHRoYXQgZGl2aWRlcyB0aGUgcG9seWdvbiBpbnRvIHR3b1xuICAgIHZhciBhID0gc3RhcnQ7XG4gICAgZG8ge1xuICAgICAgICB2YXIgYiA9IGEubmV4dC5uZXh0O1xuICAgICAgICB3aGlsZSAoYiAhPT0gYS5wcmV2KSB7XG4gICAgICAgICAgICBpZiAoYS5pICE9PSBiLmkgJiYgaXNWYWxpZERpYWdvbmFsKGEsIGIpKSB7XG4gICAgICAgICAgICAgICAgLy8gc3BsaXQgdGhlIHBvbHlnb24gaW4gdHdvIGJ5IHRoZSBkaWFnb25hbFxuICAgICAgICAgICAgICAgIHZhciBjID0gc3BsaXRQb2x5Z29uKGEsIGIpO1xuXG4gICAgICAgICAgICAgICAgLy8gZmlsdGVyIGNvbGluZWFyIHBvaW50cyBhcm91bmQgdGhlIGN1dHNcbiAgICAgICAgICAgICAgICBhID0gZmlsdGVyUG9pbnRzKGEsIGEubmV4dCk7XG4gICAgICAgICAgICAgICAgYyA9IGZpbHRlclBvaW50cyhjLCBjLm5leHQpO1xuXG4gICAgICAgICAgICAgICAgLy8gcnVuIGVhcmN1dCBvbiBlYWNoIGhhbGZcbiAgICAgICAgICAgICAgICBlYXJjdXRMaW5rZWQoYSwgdHJpYW5nbGVzLCBkaW0sIG1pblgsIG1pblksIHNpemUpO1xuICAgICAgICAgICAgICAgIGVhcmN1dExpbmtlZChjLCB0cmlhbmdsZXMsIGRpbSwgbWluWCwgbWluWSwgc2l6ZSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYiA9IGIubmV4dDtcbiAgICAgICAgfVxuICAgICAgICBhID0gYS5uZXh0O1xuICAgIH0gd2hpbGUgKGEgIT09IHN0YXJ0KTtcbn1cblxuLy8gbGluayBldmVyeSBob2xlIGludG8gdGhlIG91dGVyIGxvb3AsIHByb2R1Y2luZyBhIHNpbmdsZS1yaW5nIHBvbHlnb24gd2l0aG91dCBob2xlc1xuZnVuY3Rpb24gZWxpbWluYXRlSG9sZXMoZGF0YSwgaG9sZUluZGljZXMsIG91dGVyTm9kZSwgZGltKSB7XG4gICAgdmFyIHF1ZXVlID0gW10sXG4gICAgICAgIGksIGxlbiwgc3RhcnQsIGVuZCwgbGlzdDtcblxuICAgIGZvciAoaSA9IDAsIGxlbiA9IGhvbGVJbmRpY2VzLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICAgIHN0YXJ0ID0gaG9sZUluZGljZXNbaV0gKiBkaW07XG4gICAgICAgIGVuZCA9IGkgPCBsZW4gLSAxID8gaG9sZUluZGljZXNbaSArIDFdICogZGltIDogZGF0YS5sZW5ndGg7XG4gICAgICAgIGxpc3QgPSBsaW5rZWRMaXN0KGRhdGEsIHN0YXJ0LCBlbmQsIGRpbSwgZmFsc2UpO1xuICAgICAgICBpZiAobGlzdCA9PT0gbGlzdC5uZXh0KSBsaXN0LnN0ZWluZXIgPSB0cnVlO1xuICAgICAgICBxdWV1ZS5wdXNoKGdldExlZnRtb3N0KGxpc3QpKTtcbiAgICB9XG5cbiAgICBxdWV1ZS5zb3J0KGNvbXBhcmVYKTtcblxuICAgIC8vIHByb2Nlc3MgaG9sZXMgZnJvbSBsZWZ0IHRvIHJpZ2h0XG4gICAgZm9yIChpID0gMDsgaSA8IHF1ZXVlLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGVsaW1pbmF0ZUhvbGUocXVldWVbaV0sIG91dGVyTm9kZSk7XG4gICAgICAgIG91dGVyTm9kZSA9IGZpbHRlclBvaW50cyhvdXRlck5vZGUsIG91dGVyTm9kZS5uZXh0KTtcbiAgICB9XG5cbiAgICByZXR1cm4gb3V0ZXJOb2RlO1xufVxuXG5mdW5jdGlvbiBjb21wYXJlWChhLCBiKSB7XG4gICAgcmV0dXJuIGEueCAtIGIueDtcbn1cblxuLy8gZmluZCBhIGJyaWRnZSBiZXR3ZWVuIHZlcnRpY2VzIHRoYXQgY29ubmVjdHMgaG9sZSB3aXRoIGFuIG91dGVyIHJpbmcgYW5kIGFuZCBsaW5rIGl0XG5mdW5jdGlvbiBlbGltaW5hdGVIb2xlKGhvbGUsIG91dGVyTm9kZSkge1xuICAgIG91dGVyTm9kZSA9IGZpbmRIb2xlQnJpZGdlKGhvbGUsIG91dGVyTm9kZSk7XG4gICAgaWYgKG91dGVyTm9kZSkge1xuICAgICAgICB2YXIgYiA9IHNwbGl0UG9seWdvbihvdXRlck5vZGUsIGhvbGUpO1xuICAgICAgICBmaWx0ZXJQb2ludHMoYiwgYi5uZXh0KTtcbiAgICB9XG59XG5cbi8vIERhdmlkIEViZXJseSdzIGFsZ29yaXRobSBmb3IgZmluZGluZyBhIGJyaWRnZSBiZXR3ZWVuIGhvbGUgYW5kIG91dGVyIHBvbHlnb25cbmZ1bmN0aW9uIGZpbmRIb2xlQnJpZGdlKGhvbGUsIG91dGVyTm9kZSkge1xuICAgIHZhciBwID0gb3V0ZXJOb2RlLFxuICAgICAgICBoeCA9IGhvbGUueCxcbiAgICAgICAgaHkgPSBob2xlLnksXG4gICAgICAgIHF4ID0gLUluZmluaXR5LFxuICAgICAgICBtO1xuXG4gICAgLy8gZmluZCBhIHNlZ21lbnQgaW50ZXJzZWN0ZWQgYnkgYSByYXkgZnJvbSB0aGUgaG9sZSdzIGxlZnRtb3N0IHBvaW50IHRvIHRoZSBsZWZ0O1xuICAgIC8vIHNlZ21lbnQncyBlbmRwb2ludCB3aXRoIGxlc3NlciB4IHdpbGwgYmUgcG90ZW50aWFsIGNvbm5lY3Rpb24gcG9pbnRcbiAgICBkbyB7XG4gICAgICAgIGlmIChoeSA8PSBwLnkgJiYgaHkgPj0gcC5uZXh0LnkpIHtcbiAgICAgICAgICAgIHZhciB4ID0gcC54ICsgKGh5IC0gcC55KSAqIChwLm5leHQueCAtIHAueCkgLyAocC5uZXh0LnkgLSBwLnkpO1xuICAgICAgICAgICAgaWYgKHggPD0gaHggJiYgeCA+IHF4KSB7XG4gICAgICAgICAgICAgICAgcXggPSB4O1xuICAgICAgICAgICAgICAgIG0gPSBwLnggPCBwLm5leHQueCA/IHAgOiBwLm5leHQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcCA9IHAubmV4dDtcbiAgICB9IHdoaWxlIChwICE9PSBvdXRlck5vZGUpO1xuXG4gICAgaWYgKCFtKSByZXR1cm4gbnVsbDtcblxuICAgIC8vIGxvb2sgZm9yIHBvaW50cyBpbnNpZGUgdGhlIHRyaWFuZ2xlIG9mIGhvbGUgcG9pbnQsIHNlZ21lbnQgaW50ZXJzZWN0aW9uIGFuZCBlbmRwb2ludDtcbiAgICAvLyBpZiB0aGVyZSBhcmUgbm8gcG9pbnRzIGZvdW5kLCB3ZSBoYXZlIGEgdmFsaWQgY29ubmVjdGlvbjtcbiAgICAvLyBvdGhlcndpc2UgY2hvb3NlIHRoZSBwb2ludCBvZiB0aGUgbWluaW11bSBhbmdsZSB3aXRoIHRoZSByYXkgYXMgY29ubmVjdGlvbiBwb2ludFxuXG4gICAgdmFyIHN0b3AgPSBtLFxuICAgICAgICB0YW5NaW4gPSBJbmZpbml0eSxcbiAgICAgICAgdGFuO1xuXG4gICAgcCA9IG0ubmV4dDtcblxuICAgIHdoaWxlIChwICE9PSBzdG9wKSB7XG4gICAgICAgIGlmIChoeCA+PSBwLnggJiYgcC54ID49IG0ueCAmJlxuICAgICAgICAgICAgICAgIHBvaW50SW5UcmlhbmdsZShoeSA8IG0ueSA/IGh4IDogcXgsIGh5LCBtLngsIG0ueSwgaHkgPCBtLnkgPyBxeCA6IGh4LCBoeSwgcC54LCBwLnkpKSB7XG5cbiAgICAgICAgICAgIHRhbiA9IE1hdGguYWJzKGh5IC0gcC55KSAvIChoeCAtIHAueCk7IC8vIHRhbmdlbnRpYWxcblxuICAgICAgICAgICAgaWYgKCh0YW4gPCB0YW5NaW4gfHwgKHRhbiA9PT0gdGFuTWluICYmIHAueCA+IG0ueCkpICYmIGxvY2FsbHlJbnNpZGUocCwgaG9sZSkpIHtcbiAgICAgICAgICAgICAgICBtID0gcDtcbiAgICAgICAgICAgICAgICB0YW5NaW4gPSB0YW47XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBwID0gcC5uZXh0O1xuICAgIH1cblxuICAgIHJldHVybiBtO1xufVxuXG4vLyBpbnRlcmxpbmsgcG9seWdvbiBub2RlcyBpbiB6LW9yZGVyXG5mdW5jdGlvbiBpbmRleEN1cnZlKHN0YXJ0LCBtaW5YLCBtaW5ZLCBzaXplKSB7XG4gICAgdmFyIHAgPSBzdGFydDtcbiAgICBkbyB7XG4gICAgICAgIGlmIChwLnogPT09IG51bGwpIHAueiA9IHpPcmRlcihwLngsIHAueSwgbWluWCwgbWluWSwgc2l6ZSk7XG4gICAgICAgIHAucHJldlogPSBwLnByZXY7XG4gICAgICAgIHAubmV4dFogPSBwLm5leHQ7XG4gICAgICAgIHAgPSBwLm5leHQ7XG4gICAgfSB3aGlsZSAocCAhPT0gc3RhcnQpO1xuXG4gICAgcC5wcmV2Wi5uZXh0WiA9IG51bGw7XG4gICAgcC5wcmV2WiA9IG51bGw7XG5cbiAgICBzb3J0TGlua2VkKHApO1xufVxuXG4vLyBTaW1vbiBUYXRoYW0ncyBsaW5rZWQgbGlzdCBtZXJnZSBzb3J0IGFsZ29yaXRobVxuLy8gaHR0cDovL3d3dy5jaGlhcmsuZ3JlZW5lbmQub3JnLnVrL35zZ3RhdGhhbS9hbGdvcml0aG1zL2xpc3Rzb3J0Lmh0bWxcbmZ1bmN0aW9uIHNvcnRMaW5rZWQobGlzdCkge1xuICAgIHZhciBpLCBwLCBxLCBlLCB0YWlsLCBudW1NZXJnZXMsIHBTaXplLCBxU2l6ZSxcbiAgICAgICAgaW5TaXplID0gMTtcblxuICAgIGRvIHtcbiAgICAgICAgcCA9IGxpc3Q7XG4gICAgICAgIGxpc3QgPSBudWxsO1xuICAgICAgICB0YWlsID0gbnVsbDtcbiAgICAgICAgbnVtTWVyZ2VzID0gMDtcblxuICAgICAgICB3aGlsZSAocCkge1xuICAgICAgICAgICAgbnVtTWVyZ2VzKys7XG4gICAgICAgICAgICBxID0gcDtcbiAgICAgICAgICAgIHBTaXplID0gMDtcbiAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBpblNpemU7IGkrKykge1xuICAgICAgICAgICAgICAgIHBTaXplKys7XG4gICAgICAgICAgICAgICAgcSA9IHEubmV4dFo7XG4gICAgICAgICAgICAgICAgaWYgKCFxKSBicmVhaztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcVNpemUgPSBpblNpemU7XG5cbiAgICAgICAgICAgIHdoaWxlIChwU2l6ZSA+IDAgfHwgKHFTaXplID4gMCAmJiBxKSkge1xuXG4gICAgICAgICAgICAgICAgaWYgKHBTaXplID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIGUgPSBxO1xuICAgICAgICAgICAgICAgICAgICBxID0gcS5uZXh0WjtcbiAgICAgICAgICAgICAgICAgICAgcVNpemUtLTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHFTaXplID09PSAwIHx8ICFxKSB7XG4gICAgICAgICAgICAgICAgICAgIGUgPSBwO1xuICAgICAgICAgICAgICAgICAgICBwID0gcC5uZXh0WjtcbiAgICAgICAgICAgICAgICAgICAgcFNpemUtLTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHAueiA8PSBxLnopIHtcbiAgICAgICAgICAgICAgICAgICAgZSA9IHA7XG4gICAgICAgICAgICAgICAgICAgIHAgPSBwLm5leHRaO1xuICAgICAgICAgICAgICAgICAgICBwU2l6ZS0tO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGUgPSBxO1xuICAgICAgICAgICAgICAgICAgICBxID0gcS5uZXh0WjtcbiAgICAgICAgICAgICAgICAgICAgcVNpemUtLTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAodGFpbCkgdGFpbC5uZXh0WiA9IGU7XG4gICAgICAgICAgICAgICAgZWxzZSBsaXN0ID0gZTtcblxuICAgICAgICAgICAgICAgIGUucHJldlogPSB0YWlsO1xuICAgICAgICAgICAgICAgIHRhaWwgPSBlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBwID0gcTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRhaWwubmV4dFogPSBudWxsO1xuICAgICAgICBpblNpemUgKj0gMjtcblxuICAgIH0gd2hpbGUgKG51bU1lcmdlcyA+IDEpO1xuXG4gICAgcmV0dXJuIGxpc3Q7XG59XG5cbi8vIHotb3JkZXIgb2YgYSBwb2ludCBnaXZlbiBjb29yZHMgYW5kIHNpemUgb2YgdGhlIGRhdGEgYm91bmRpbmcgYm94XG5mdW5jdGlvbiB6T3JkZXIoeCwgeSwgbWluWCwgbWluWSwgc2l6ZSkge1xuICAgIC8vIGNvb3JkcyBhcmUgdHJhbnNmb3JtZWQgaW50byBub24tbmVnYXRpdmUgMTUtYml0IGludGVnZXIgcmFuZ2VcbiAgICB4ID0gMzI3NjcgKiAoeCAtIG1pblgpIC8gc2l6ZTtcbiAgICB5ID0gMzI3NjcgKiAoeSAtIG1pblkpIC8gc2l6ZTtcblxuICAgIHggPSAoeCB8ICh4IDw8IDgpKSAmIDB4MDBGRjAwRkY7XG4gICAgeCA9ICh4IHwgKHggPDwgNCkpICYgMHgwRjBGMEYwRjtcbiAgICB4ID0gKHggfCAoeCA8PCAyKSkgJiAweDMzMzMzMzMzO1xuICAgIHggPSAoeCB8ICh4IDw8IDEpKSAmIDB4NTU1NTU1NTU7XG5cbiAgICB5ID0gKHkgfCAoeSA8PCA4KSkgJiAweDAwRkYwMEZGO1xuICAgIHkgPSAoeSB8ICh5IDw8IDQpKSAmIDB4MEYwRjBGMEY7XG4gICAgeSA9ICh5IHwgKHkgPDwgMikpICYgMHgzMzMzMzMzMztcbiAgICB5ID0gKHkgfCAoeSA8PCAxKSkgJiAweDU1NTU1NTU1O1xuXG4gICAgcmV0dXJuIHggfCAoeSA8PCAxKTtcbn1cblxuLy8gZmluZCB0aGUgbGVmdG1vc3Qgbm9kZSBvZiBhIHBvbHlnb24gcmluZ1xuZnVuY3Rpb24gZ2V0TGVmdG1vc3Qoc3RhcnQpIHtcbiAgICB2YXIgcCA9IHN0YXJ0LFxuICAgICAgICBsZWZ0bW9zdCA9IHN0YXJ0O1xuICAgIGRvIHtcbiAgICAgICAgaWYgKHAueCA8IGxlZnRtb3N0LngpIGxlZnRtb3N0ID0gcDtcbiAgICAgICAgcCA9IHAubmV4dDtcbiAgICB9IHdoaWxlIChwICE9PSBzdGFydCk7XG5cbiAgICByZXR1cm4gbGVmdG1vc3Q7XG59XG5cbi8vIGNoZWNrIGlmIGEgcG9pbnQgbGllcyB3aXRoaW4gYSBjb252ZXggdHJpYW5nbGVcbmZ1bmN0aW9uIHBvaW50SW5UcmlhbmdsZShheCwgYXksIGJ4LCBieSwgY3gsIGN5LCBweCwgcHkpIHtcbiAgICByZXR1cm4gKGN4IC0gcHgpICogKGF5IC0gcHkpIC0gKGF4IC0gcHgpICogKGN5IC0gcHkpID49IDAgJiZcbiAgICAgICAgICAgKGF4IC0gcHgpICogKGJ5IC0gcHkpIC0gKGJ4IC0gcHgpICogKGF5IC0gcHkpID49IDAgJiZcbiAgICAgICAgICAgKGJ4IC0gcHgpICogKGN5IC0gcHkpIC0gKGN4IC0gcHgpICogKGJ5IC0gcHkpID49IDA7XG59XG5cbi8vIGNoZWNrIGlmIGEgZGlhZ29uYWwgYmV0d2VlbiB0d28gcG9seWdvbiBub2RlcyBpcyB2YWxpZCAobGllcyBpbiBwb2x5Z29uIGludGVyaW9yKVxuZnVuY3Rpb24gaXNWYWxpZERpYWdvbmFsKGEsIGIpIHtcbiAgICByZXR1cm4gZXF1YWxzKGEsIGIpIHx8IGEubmV4dC5pICE9PSBiLmkgJiYgYS5wcmV2LmkgIT09IGIuaSAmJiAhaW50ZXJzZWN0c1BvbHlnb24oYSwgYikgJiZcbiAgICAgICAgICAgbG9jYWxseUluc2lkZShhLCBiKSAmJiBsb2NhbGx5SW5zaWRlKGIsIGEpICYmIG1pZGRsZUluc2lkZShhLCBiKTtcbn1cblxuLy8gc2lnbmVkIGFyZWEgb2YgYSB0cmlhbmdsZVxuZnVuY3Rpb24gYXJlYShwLCBxLCByKSB7XG4gICAgcmV0dXJuIChxLnkgLSBwLnkpICogKHIueCAtIHEueCkgLSAocS54IC0gcC54KSAqIChyLnkgLSBxLnkpO1xufVxuXG4vLyBjaGVjayBpZiB0d28gcG9pbnRzIGFyZSBlcXVhbFxuZnVuY3Rpb24gZXF1YWxzKHAxLCBwMikge1xuICAgIHJldHVybiBwMS54ID09PSBwMi54ICYmIHAxLnkgPT09IHAyLnk7XG59XG5cbi8vIGNoZWNrIGlmIHR3byBzZWdtZW50cyBpbnRlcnNlY3RcbmZ1bmN0aW9uIGludGVyc2VjdHMocDEsIHExLCBwMiwgcTIpIHtcbiAgICByZXR1cm4gYXJlYShwMSwgcTEsIHAyKSA+IDAgIT09IGFyZWEocDEsIHExLCBxMikgPiAwICYmXG4gICAgICAgICAgIGFyZWEocDIsIHEyLCBwMSkgPiAwICE9PSBhcmVhKHAyLCBxMiwgcTEpID4gMDtcbn1cblxuLy8gY2hlY2sgaWYgYSBwb2x5Z29uIGRpYWdvbmFsIGludGVyc2VjdHMgYW55IHBvbHlnb24gc2VnbWVudHNcbmZ1bmN0aW9uIGludGVyc2VjdHNQb2x5Z29uKGEsIGIpIHtcbiAgICB2YXIgcCA9IGE7XG4gICAgZG8ge1xuICAgICAgICBpZiAocC5pICE9PSBhLmkgJiYgcC5uZXh0LmkgIT09IGEuaSAmJiBwLmkgIT09IGIuaSAmJiBwLm5leHQuaSAhPT0gYi5pICYmXG4gICAgICAgICAgICAgICAgaW50ZXJzZWN0cyhwLCBwLm5leHQsIGEsIGIpKSByZXR1cm4gdHJ1ZTtcbiAgICAgICAgcCA9IHAubmV4dDtcbiAgICB9IHdoaWxlIChwICE9PSBhKTtcblxuICAgIHJldHVybiBmYWxzZTtcbn1cblxuLy8gY2hlY2sgaWYgYSBwb2x5Z29uIGRpYWdvbmFsIGlzIGxvY2FsbHkgaW5zaWRlIHRoZSBwb2x5Z29uXG5mdW5jdGlvbiBsb2NhbGx5SW5zaWRlKGEsIGIpIHtcbiAgICByZXR1cm4gYXJlYShhLnByZXYsIGEsIGEubmV4dCkgPCAwID9cbiAgICAgICAgYXJlYShhLCBiLCBhLm5leHQpID49IDAgJiYgYXJlYShhLCBhLnByZXYsIGIpID49IDAgOlxuICAgICAgICBhcmVhKGEsIGIsIGEucHJldikgPCAwIHx8IGFyZWEoYSwgYS5uZXh0LCBiKSA8IDA7XG59XG5cbi8vIGNoZWNrIGlmIHRoZSBtaWRkbGUgcG9pbnQgb2YgYSBwb2x5Z29uIGRpYWdvbmFsIGlzIGluc2lkZSB0aGUgcG9seWdvblxuZnVuY3Rpb24gbWlkZGxlSW5zaWRlKGEsIGIpIHtcbiAgICB2YXIgcCA9IGEsXG4gICAgICAgIGluc2lkZSA9IGZhbHNlLFxuICAgICAgICBweCA9IChhLnggKyBiLngpIC8gMixcbiAgICAgICAgcHkgPSAoYS55ICsgYi55KSAvIDI7XG4gICAgZG8ge1xuICAgICAgICBpZiAoKChwLnkgPiBweSkgIT09IChwLm5leHQueSA+IHB5KSkgJiYgKHB4IDwgKHAubmV4dC54IC0gcC54KSAqIChweSAtIHAueSkgLyAocC5uZXh0LnkgLSBwLnkpICsgcC54KSlcbiAgICAgICAgICAgIGluc2lkZSA9ICFpbnNpZGU7XG4gICAgICAgIHAgPSBwLm5leHQ7XG4gICAgfSB3aGlsZSAocCAhPT0gYSk7XG5cbiAgICByZXR1cm4gaW5zaWRlO1xufVxuXG4vLyBsaW5rIHR3byBwb2x5Z29uIHZlcnRpY2VzIHdpdGggYSBicmlkZ2U7IGlmIHRoZSB2ZXJ0aWNlcyBiZWxvbmcgdG8gdGhlIHNhbWUgcmluZywgaXQgc3BsaXRzIHBvbHlnb24gaW50byB0d287XG4vLyBpZiBvbmUgYmVsb25ncyB0byB0aGUgb3V0ZXIgcmluZyBhbmQgYW5vdGhlciB0byBhIGhvbGUsIGl0IG1lcmdlcyBpdCBpbnRvIGEgc2luZ2xlIHJpbmdcbmZ1bmN0aW9uIHNwbGl0UG9seWdvbihhLCBiKSB7XG4gICAgdmFyIGEyID0gbmV3IE5vZGUoYS5pLCBhLngsIGEueSksXG4gICAgICAgIGIyID0gbmV3IE5vZGUoYi5pLCBiLngsIGIueSksXG4gICAgICAgIGFuID0gYS5uZXh0LFxuICAgICAgICBicCA9IGIucHJldjtcblxuICAgIGEubmV4dCA9IGI7XG4gICAgYi5wcmV2ID0gYTtcblxuICAgIGEyLm5leHQgPSBhbjtcbiAgICBhbi5wcmV2ID0gYTI7XG5cbiAgICBiMi5uZXh0ID0gYTI7XG4gICAgYTIucHJldiA9IGIyO1xuXG4gICAgYnAubmV4dCA9IGIyO1xuICAgIGIyLnByZXYgPSBicDtcblxuICAgIHJldHVybiBiMjtcbn1cblxuLy8gY3JlYXRlIGEgbm9kZSBhbmQgb3B0aW9uYWxseSBsaW5rIGl0IHdpdGggcHJldmlvdXMgb25lIChpbiBhIGNpcmN1bGFyIGRvdWJseSBsaW5rZWQgbGlzdClcbmZ1bmN0aW9uIGluc2VydE5vZGUoaSwgeCwgeSwgbGFzdCkge1xuICAgIHZhciBwID0gbmV3IE5vZGUoaSwgeCwgeSk7XG5cbiAgICBpZiAoIWxhc3QpIHtcbiAgICAgICAgcC5wcmV2ID0gcDtcbiAgICAgICAgcC5uZXh0ID0gcDtcblxuICAgIH0gZWxzZSB7XG4gICAgICAgIHAubmV4dCA9IGxhc3QubmV4dDtcbiAgICAgICAgcC5wcmV2ID0gbGFzdDtcbiAgICAgICAgbGFzdC5uZXh0LnByZXYgPSBwO1xuICAgICAgICBsYXN0Lm5leHQgPSBwO1xuICAgIH1cbiAgICByZXR1cm4gcDtcbn1cblxuZnVuY3Rpb24gcmVtb3ZlTm9kZShwKSB7XG4gICAgcC5uZXh0LnByZXYgPSBwLnByZXY7XG4gICAgcC5wcmV2Lm5leHQgPSBwLm5leHQ7XG5cbiAgICBpZiAocC5wcmV2WikgcC5wcmV2Wi5uZXh0WiA9IHAubmV4dFo7XG4gICAgaWYgKHAubmV4dFopIHAubmV4dFoucHJldlogPSBwLnByZXZaO1xufVxuXG5mdW5jdGlvbiBOb2RlKGksIHgsIHkpIHtcbiAgICAvLyB2ZXJ0aWNlIGluZGV4IGluIGNvb3JkaW5hdGVzIGFycmF5XG4gICAgdGhpcy5pID0gaTtcblxuICAgIC8vIHZlcnRleCBjb29yZGluYXRlc1xuICAgIHRoaXMueCA9IHg7XG4gICAgdGhpcy55ID0geTtcblxuICAgIC8vIHByZXZpb3VzIGFuZCBuZXh0IHZlcnRpY2Ugbm9kZXMgaW4gYSBwb2x5Z29uIHJpbmdcbiAgICB0aGlzLnByZXYgPSBudWxsO1xuICAgIHRoaXMubmV4dCA9IG51bGw7XG5cbiAgICAvLyB6LW9yZGVyIGN1cnZlIHZhbHVlXG4gICAgdGhpcy56ID0gbnVsbDtcblxuICAgIC8vIHByZXZpb3VzIGFuZCBuZXh0IG5vZGVzIGluIHotb3JkZXJcbiAgICB0aGlzLnByZXZaID0gbnVsbDtcbiAgICB0aGlzLm5leHRaID0gbnVsbDtcblxuICAgIC8vIGluZGljYXRlcyB3aGV0aGVyIHRoaXMgaXMgYSBzdGVpbmVyIHBvaW50XG4gICAgdGhpcy5zdGVpbmVyID0gZmFsc2U7XG59XG4iLCIndXNlIHN0cmljdCc7XG5cbi8vXG4vLyBXZSBzdG9yZSBvdXIgRUUgb2JqZWN0cyBpbiBhIHBsYWluIG9iamVjdCB3aG9zZSBwcm9wZXJ0aWVzIGFyZSBldmVudCBuYW1lcy5cbi8vIElmIGBPYmplY3QuY3JlYXRlKG51bGwpYCBpcyBub3Qgc3VwcG9ydGVkIHdlIHByZWZpeCB0aGUgZXZlbnQgbmFtZXMgd2l0aCBhXG4vLyBgfmAgdG8gbWFrZSBzdXJlIHRoYXQgdGhlIGJ1aWx0LWluIG9iamVjdCBwcm9wZXJ0aWVzIGFyZSBub3Qgb3ZlcnJpZGRlbiBvclxuLy8gdXNlZCBhcyBhbiBhdHRhY2sgdmVjdG9yLlxuLy8gV2UgYWxzbyBhc3N1bWUgdGhhdCBgT2JqZWN0LmNyZWF0ZShudWxsKWAgaXMgYXZhaWxhYmxlIHdoZW4gdGhlIGV2ZW50IG5hbWVcbi8vIGlzIGFuIEVTNiBTeW1ib2wuXG4vL1xudmFyIHByZWZpeCA9IHR5cGVvZiBPYmplY3QuY3JlYXRlICE9PSAnZnVuY3Rpb24nID8gJ34nIDogZmFsc2U7XG5cbi8qKlxuICogUmVwcmVzZW50YXRpb24gb2YgYSBzaW5nbGUgRXZlbnRFbWl0dGVyIGZ1bmN0aW9uLlxuICpcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZuIEV2ZW50IGhhbmRsZXIgdG8gYmUgY2FsbGVkLlxuICogQHBhcmFtIHtNaXhlZH0gY29udGV4dCBDb250ZXh0IGZvciBmdW5jdGlvbiBleGVjdXRpb24uXG4gKiBAcGFyYW0ge0Jvb2xlYW59IG9uY2UgT25seSBlbWl0IG9uY2VcbiAqIEBhcGkgcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBFRShmbiwgY29udGV4dCwgb25jZSkge1xuICB0aGlzLmZuID0gZm47XG4gIHRoaXMuY29udGV4dCA9IGNvbnRleHQ7XG4gIHRoaXMub25jZSA9IG9uY2UgfHwgZmFsc2U7XG59XG5cbi8qKlxuICogTWluaW1hbCBFdmVudEVtaXR0ZXIgaW50ZXJmYWNlIHRoYXQgaXMgbW9sZGVkIGFnYWluc3QgdGhlIE5vZGUuanNcbiAqIEV2ZW50RW1pdHRlciBpbnRlcmZhY2UuXG4gKlxuICogQGNvbnN0cnVjdG9yXG4gKiBAYXBpIHB1YmxpY1xuICovXG5mdW5jdGlvbiBFdmVudEVtaXR0ZXIoKSB7IC8qIE5vdGhpbmcgdG8gc2V0ICovIH1cblxuLyoqXG4gKiBIb2xkcyB0aGUgYXNzaWduZWQgRXZlbnRFbWl0dGVycyBieSBuYW1lLlxuICpcbiAqIEB0eXBlIHtPYmplY3R9XG4gKiBAcHJpdmF0ZVxuICovXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLl9ldmVudHMgPSB1bmRlZmluZWQ7XG5cbi8qKlxuICogUmV0dXJuIGEgbGlzdCBvZiBhc3NpZ25lZCBldmVudCBsaXN0ZW5lcnMuXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IGV2ZW50IFRoZSBldmVudHMgdGhhdCBzaG91bGQgYmUgbGlzdGVkLlxuICogQHBhcmFtIHtCb29sZWFufSBleGlzdHMgV2Ugb25seSBuZWVkIHRvIGtub3cgaWYgdGhlcmUgYXJlIGxpc3RlbmVycy5cbiAqIEByZXR1cm5zIHtBcnJheXxCb29sZWFufVxuICogQGFwaSBwdWJsaWNcbiAqL1xuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5saXN0ZW5lcnMgPSBmdW5jdGlvbiBsaXN0ZW5lcnMoZXZlbnQsIGV4aXN0cykge1xuICB2YXIgZXZ0ID0gcHJlZml4ID8gcHJlZml4ICsgZXZlbnQgOiBldmVudFxuICAgICwgYXZhaWxhYmxlID0gdGhpcy5fZXZlbnRzICYmIHRoaXMuX2V2ZW50c1tldnRdO1xuXG4gIGlmIChleGlzdHMpIHJldHVybiAhIWF2YWlsYWJsZTtcbiAgaWYgKCFhdmFpbGFibGUpIHJldHVybiBbXTtcbiAgaWYgKGF2YWlsYWJsZS5mbikgcmV0dXJuIFthdmFpbGFibGUuZm5dO1xuXG4gIGZvciAodmFyIGkgPSAwLCBsID0gYXZhaWxhYmxlLmxlbmd0aCwgZWUgPSBuZXcgQXJyYXkobCk7IGkgPCBsOyBpKyspIHtcbiAgICBlZVtpXSA9IGF2YWlsYWJsZVtpXS5mbjtcbiAgfVxuXG4gIHJldHVybiBlZTtcbn07XG5cbi8qKlxuICogRW1pdCBhbiBldmVudCB0byBhbGwgcmVnaXN0ZXJlZCBldmVudCBsaXN0ZW5lcnMuXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IGV2ZW50IFRoZSBuYW1lIG9mIHRoZSBldmVudC5cbiAqIEByZXR1cm5zIHtCb29sZWFufSBJbmRpY2F0aW9uIGlmIHdlJ3ZlIGVtaXR0ZWQgYW4gZXZlbnQuXG4gKiBAYXBpIHB1YmxpY1xuICovXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLmVtaXQgPSBmdW5jdGlvbiBlbWl0KGV2ZW50LCBhMSwgYTIsIGEzLCBhNCwgYTUpIHtcbiAgdmFyIGV2dCA9IHByZWZpeCA/IHByZWZpeCArIGV2ZW50IDogZXZlbnQ7XG5cbiAgaWYgKCF0aGlzLl9ldmVudHMgfHwgIXRoaXMuX2V2ZW50c1tldnRdKSByZXR1cm4gZmFsc2U7XG5cbiAgdmFyIGxpc3RlbmVycyA9IHRoaXMuX2V2ZW50c1tldnRdXG4gICAgLCBsZW4gPSBhcmd1bWVudHMubGVuZ3RoXG4gICAgLCBhcmdzXG4gICAgLCBpO1xuXG4gIGlmICgnZnVuY3Rpb24nID09PSB0eXBlb2YgbGlzdGVuZXJzLmZuKSB7XG4gICAgaWYgKGxpc3RlbmVycy5vbmNlKSB0aGlzLnJlbW92ZUxpc3RlbmVyKGV2ZW50LCBsaXN0ZW5lcnMuZm4sIHVuZGVmaW5lZCwgdHJ1ZSk7XG5cbiAgICBzd2l0Y2ggKGxlbikge1xuICAgICAgY2FzZSAxOiByZXR1cm4gbGlzdGVuZXJzLmZuLmNhbGwobGlzdGVuZXJzLmNvbnRleHQpLCB0cnVlO1xuICAgICAgY2FzZSAyOiByZXR1cm4gbGlzdGVuZXJzLmZuLmNhbGwobGlzdGVuZXJzLmNvbnRleHQsIGExKSwgdHJ1ZTtcbiAgICAgIGNhc2UgMzogcmV0dXJuIGxpc3RlbmVycy5mbi5jYWxsKGxpc3RlbmVycy5jb250ZXh0LCBhMSwgYTIpLCB0cnVlO1xuICAgICAgY2FzZSA0OiByZXR1cm4gbGlzdGVuZXJzLmZuLmNhbGwobGlzdGVuZXJzLmNvbnRleHQsIGExLCBhMiwgYTMpLCB0cnVlO1xuICAgICAgY2FzZSA1OiByZXR1cm4gbGlzdGVuZXJzLmZuLmNhbGwobGlzdGVuZXJzLmNvbnRleHQsIGExLCBhMiwgYTMsIGE0KSwgdHJ1ZTtcbiAgICAgIGNhc2UgNjogcmV0dXJuIGxpc3RlbmVycy5mbi5jYWxsKGxpc3RlbmVycy5jb250ZXh0LCBhMSwgYTIsIGEzLCBhNCwgYTUpLCB0cnVlO1xuICAgIH1cblxuICAgIGZvciAoaSA9IDEsIGFyZ3MgPSBuZXcgQXJyYXkobGVuIC0xKTsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICBhcmdzW2kgLSAxXSA9IGFyZ3VtZW50c1tpXTtcbiAgICB9XG5cbiAgICBsaXN0ZW5lcnMuZm4uYXBwbHkobGlzdGVuZXJzLmNvbnRleHQsIGFyZ3MpO1xuICB9IGVsc2Uge1xuICAgIHZhciBsZW5ndGggPSBsaXN0ZW5lcnMubGVuZ3RoXG4gICAgICAsIGo7XG5cbiAgICBmb3IgKGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmIChsaXN0ZW5lcnNbaV0ub25jZSkgdGhpcy5yZW1vdmVMaXN0ZW5lcihldmVudCwgbGlzdGVuZXJzW2ldLmZuLCB1bmRlZmluZWQsIHRydWUpO1xuXG4gICAgICBzd2l0Y2ggKGxlbikge1xuICAgICAgICBjYXNlIDE6IGxpc3RlbmVyc1tpXS5mbi5jYWxsKGxpc3RlbmVyc1tpXS5jb250ZXh0KTsgYnJlYWs7XG4gICAgICAgIGNhc2UgMjogbGlzdGVuZXJzW2ldLmZuLmNhbGwobGlzdGVuZXJzW2ldLmNvbnRleHQsIGExKTsgYnJlYWs7XG4gICAgICAgIGNhc2UgMzogbGlzdGVuZXJzW2ldLmZuLmNhbGwobGlzdGVuZXJzW2ldLmNvbnRleHQsIGExLCBhMik7IGJyZWFrO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIGlmICghYXJncykgZm9yIChqID0gMSwgYXJncyA9IG5ldyBBcnJheShsZW4gLTEpOyBqIDwgbGVuOyBqKyspIHtcbiAgICAgICAgICAgIGFyZ3NbaiAtIDFdID0gYXJndW1lbnRzW2pdO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGxpc3RlbmVyc1tpXS5mbi5hcHBseShsaXN0ZW5lcnNbaV0uY29udGV4dCwgYXJncyk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHRydWU7XG59O1xuXG4vKipcbiAqIFJlZ2lzdGVyIGEgbmV3IEV2ZW50TGlzdGVuZXIgZm9yIHRoZSBnaXZlbiBldmVudC5cbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gZXZlbnQgTmFtZSBvZiB0aGUgZXZlbnQuXG4gKiBAcGFyYW0ge0Z1bmN0b259IGZuIENhbGxiYWNrIGZ1bmN0aW9uLlxuICogQHBhcmFtIHtNaXhlZH0gY29udGV4dCBUaGUgY29udGV4dCBvZiB0aGUgZnVuY3Rpb24uXG4gKiBAYXBpIHB1YmxpY1xuICovXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLm9uID0gZnVuY3Rpb24gb24oZXZlbnQsIGZuLCBjb250ZXh0KSB7XG4gIHZhciBsaXN0ZW5lciA9IG5ldyBFRShmbiwgY29udGV4dCB8fCB0aGlzKVxuICAgICwgZXZ0ID0gcHJlZml4ID8gcHJlZml4ICsgZXZlbnQgOiBldmVudDtcblxuICBpZiAoIXRoaXMuX2V2ZW50cykgdGhpcy5fZXZlbnRzID0gcHJlZml4ID8ge30gOiBPYmplY3QuY3JlYXRlKG51bGwpO1xuICBpZiAoIXRoaXMuX2V2ZW50c1tldnRdKSB0aGlzLl9ldmVudHNbZXZ0XSA9IGxpc3RlbmVyO1xuICBlbHNlIHtcbiAgICBpZiAoIXRoaXMuX2V2ZW50c1tldnRdLmZuKSB0aGlzLl9ldmVudHNbZXZ0XS5wdXNoKGxpc3RlbmVyKTtcbiAgICBlbHNlIHRoaXMuX2V2ZW50c1tldnRdID0gW1xuICAgICAgdGhpcy5fZXZlbnRzW2V2dF0sIGxpc3RlbmVyXG4gICAgXTtcbiAgfVxuXG4gIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBBZGQgYW4gRXZlbnRMaXN0ZW5lciB0aGF0J3Mgb25seSBjYWxsZWQgb25jZS5cbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gZXZlbnQgTmFtZSBvZiB0aGUgZXZlbnQuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmbiBDYWxsYmFjayBmdW5jdGlvbi5cbiAqIEBwYXJhbSB7TWl4ZWR9IGNvbnRleHQgVGhlIGNvbnRleHQgb2YgdGhlIGZ1bmN0aW9uLlxuICogQGFwaSBwdWJsaWNcbiAqL1xuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5vbmNlID0gZnVuY3Rpb24gb25jZShldmVudCwgZm4sIGNvbnRleHQpIHtcbiAgdmFyIGxpc3RlbmVyID0gbmV3IEVFKGZuLCBjb250ZXh0IHx8IHRoaXMsIHRydWUpXG4gICAgLCBldnQgPSBwcmVmaXggPyBwcmVmaXggKyBldmVudCA6IGV2ZW50O1xuXG4gIGlmICghdGhpcy5fZXZlbnRzKSB0aGlzLl9ldmVudHMgPSBwcmVmaXggPyB7fSA6IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gIGlmICghdGhpcy5fZXZlbnRzW2V2dF0pIHRoaXMuX2V2ZW50c1tldnRdID0gbGlzdGVuZXI7XG4gIGVsc2Uge1xuICAgIGlmICghdGhpcy5fZXZlbnRzW2V2dF0uZm4pIHRoaXMuX2V2ZW50c1tldnRdLnB1c2gobGlzdGVuZXIpO1xuICAgIGVsc2UgdGhpcy5fZXZlbnRzW2V2dF0gPSBbXG4gICAgICB0aGlzLl9ldmVudHNbZXZ0XSwgbGlzdGVuZXJcbiAgICBdO1xuICB9XG5cbiAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIFJlbW92ZSBldmVudCBsaXN0ZW5lcnMuXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IGV2ZW50IFRoZSBldmVudCB3ZSB3YW50IHRvIHJlbW92ZS5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZuIFRoZSBsaXN0ZW5lciB0aGF0IHdlIG5lZWQgdG8gZmluZC5cbiAqIEBwYXJhbSB7TWl4ZWR9IGNvbnRleHQgT25seSByZW1vdmUgbGlzdGVuZXJzIG1hdGNoaW5nIHRoaXMgY29udGV4dC5cbiAqIEBwYXJhbSB7Qm9vbGVhbn0gb25jZSBPbmx5IHJlbW92ZSBvbmNlIGxpc3RlbmVycy5cbiAqIEBhcGkgcHVibGljXG4gKi9cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUucmVtb3ZlTGlzdGVuZXIgPSBmdW5jdGlvbiByZW1vdmVMaXN0ZW5lcihldmVudCwgZm4sIGNvbnRleHQsIG9uY2UpIHtcbiAgdmFyIGV2dCA9IHByZWZpeCA/IHByZWZpeCArIGV2ZW50IDogZXZlbnQ7XG5cbiAgaWYgKCF0aGlzLl9ldmVudHMgfHwgIXRoaXMuX2V2ZW50c1tldnRdKSByZXR1cm4gdGhpcztcblxuICB2YXIgbGlzdGVuZXJzID0gdGhpcy5fZXZlbnRzW2V2dF1cbiAgICAsIGV2ZW50cyA9IFtdO1xuXG4gIGlmIChmbikge1xuICAgIGlmIChsaXN0ZW5lcnMuZm4pIHtcbiAgICAgIGlmIChcbiAgICAgICAgICAgbGlzdGVuZXJzLmZuICE9PSBmblxuICAgICAgICB8fCAob25jZSAmJiAhbGlzdGVuZXJzLm9uY2UpXG4gICAgICAgIHx8IChjb250ZXh0ICYmIGxpc3RlbmVycy5jb250ZXh0ICE9PSBjb250ZXh0KVxuICAgICAgKSB7XG4gICAgICAgIGV2ZW50cy5wdXNoKGxpc3RlbmVycyk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGZvciAodmFyIGkgPSAwLCBsZW5ndGggPSBsaXN0ZW5lcnMubGVuZ3RoOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgIGxpc3RlbmVyc1tpXS5mbiAhPT0gZm5cbiAgICAgICAgICB8fCAob25jZSAmJiAhbGlzdGVuZXJzW2ldLm9uY2UpXG4gICAgICAgICAgfHwgKGNvbnRleHQgJiYgbGlzdGVuZXJzW2ldLmNvbnRleHQgIT09IGNvbnRleHQpXG4gICAgICAgICkge1xuICAgICAgICAgIGV2ZW50cy5wdXNoKGxpc3RlbmVyc1tpXSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvL1xuICAvLyBSZXNldCB0aGUgYXJyYXksIG9yIHJlbW92ZSBpdCBjb21wbGV0ZWx5IGlmIHdlIGhhdmUgbm8gbW9yZSBsaXN0ZW5lcnMuXG4gIC8vXG4gIGlmIChldmVudHMubGVuZ3RoKSB7XG4gICAgdGhpcy5fZXZlbnRzW2V2dF0gPSBldmVudHMubGVuZ3RoID09PSAxID8gZXZlbnRzWzBdIDogZXZlbnRzO1xuICB9IGVsc2Uge1xuICAgIGRlbGV0ZSB0aGlzLl9ldmVudHNbZXZ0XTtcbiAgfVxuXG4gIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBSZW1vdmUgYWxsIGxpc3RlbmVycyBvciBvbmx5IHRoZSBsaXN0ZW5lcnMgZm9yIHRoZSBzcGVjaWZpZWQgZXZlbnQuXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IGV2ZW50IFRoZSBldmVudCB3YW50IHRvIHJlbW92ZSBhbGwgbGlzdGVuZXJzIGZvci5cbiAqIEBhcGkgcHVibGljXG4gKi9cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUucmVtb3ZlQWxsTGlzdGVuZXJzID0gZnVuY3Rpb24gcmVtb3ZlQWxsTGlzdGVuZXJzKGV2ZW50KSB7XG4gIGlmICghdGhpcy5fZXZlbnRzKSByZXR1cm4gdGhpcztcblxuICBpZiAoZXZlbnQpIGRlbGV0ZSB0aGlzLl9ldmVudHNbcHJlZml4ID8gcHJlZml4ICsgZXZlbnQgOiBldmVudF07XG4gIGVsc2UgdGhpcy5fZXZlbnRzID0gcHJlZml4ID8ge30gOiBPYmplY3QuY3JlYXRlKG51bGwpO1xuXG4gIHJldHVybiB0aGlzO1xufTtcblxuLy9cbi8vIEFsaWFzIG1ldGhvZHMgbmFtZXMgYmVjYXVzZSBwZW9wbGUgcm9sbCBsaWtlIHRoYXQuXG4vL1xuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5vZmYgPSBFdmVudEVtaXR0ZXIucHJvdG90eXBlLnJlbW92ZUxpc3RlbmVyO1xuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5hZGRMaXN0ZW5lciA9IEV2ZW50RW1pdHRlci5wcm90b3R5cGUub247XG5cbi8vXG4vLyBUaGlzIGZ1bmN0aW9uIGRvZXNuJ3QgYXBwbHkgYW55bW9yZS5cbi8vXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLnNldE1heExpc3RlbmVycyA9IGZ1bmN0aW9uIHNldE1heExpc3RlbmVycygpIHtcbiAgcmV0dXJuIHRoaXM7XG59O1xuXG4vL1xuLy8gRXhwb3NlIHRoZSBwcmVmaXguXG4vL1xuRXZlbnRFbWl0dGVyLnByZWZpeGVkID0gcHJlZml4O1xuXG4vL1xuLy8gRXhwb3NlIHRoZSBtb2R1bGUuXG4vL1xuaWYgKCd1bmRlZmluZWQnICE9PSB0eXBlb2YgbW9kdWxlKSB7XG4gIG1vZHVsZS5leHBvcnRzID0gRXZlbnRFbWl0dGVyO1xufVxuIiwiLyogZXNsaW50LWRpc2FibGUgbm8tdW51c2VkLXZhcnMgKi9cbid1c2Ugc3RyaWN0JztcbnZhciBoYXNPd25Qcm9wZXJ0eSA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7XG52YXIgcHJvcElzRW51bWVyYWJsZSA9IE9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGU7XG5cbmZ1bmN0aW9uIHRvT2JqZWN0KHZhbCkge1xuXHRpZiAodmFsID09PSBudWxsIHx8IHZhbCA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0dGhyb3cgbmV3IFR5cGVFcnJvcignT2JqZWN0LmFzc2lnbiBjYW5ub3QgYmUgY2FsbGVkIHdpdGggbnVsbCBvciB1bmRlZmluZWQnKTtcblx0fVxuXG5cdHJldHVybiBPYmplY3QodmFsKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQsIHNvdXJjZSkge1xuXHR2YXIgZnJvbTtcblx0dmFyIHRvID0gdG9PYmplY3QodGFyZ2V0KTtcblx0dmFyIHN5bWJvbHM7XG5cblx0Zm9yICh2YXIgcyA9IDE7IHMgPCBhcmd1bWVudHMubGVuZ3RoOyBzKyspIHtcblx0XHRmcm9tID0gT2JqZWN0KGFyZ3VtZW50c1tzXSk7XG5cblx0XHRmb3IgKHZhciBrZXkgaW4gZnJvbSkge1xuXHRcdFx0aWYgKGhhc093blByb3BlcnR5LmNhbGwoZnJvbSwga2V5KSkge1xuXHRcdFx0XHR0b1trZXldID0gZnJvbVtrZXldO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7XG5cdFx0XHRzeW1ib2xzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhmcm9tKTtcblx0XHRcdGZvciAodmFyIGkgPSAwOyBpIDwgc3ltYm9scy5sZW5ndGg7IGkrKykge1xuXHRcdFx0XHRpZiAocHJvcElzRW51bWVyYWJsZS5jYWxsKGZyb20sIHN5bWJvbHNbaV0pKSB7XG5cdFx0XHRcdFx0dG9bc3ltYm9sc1tpXV0gPSBmcm9tW3N5bWJvbHNbaV1dO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIHRvO1xufTtcbiIsIi8qIVxuICogYXN5bmNcbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS9jYW9sYW4vYXN5bmNcbiAqXG4gKiBDb3B5cmlnaHQgMjAxMC0yMDE0IENhb2xhbiBNY01haG9uXG4gKiBSZWxlYXNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2VcbiAqL1xuLypqc2hpbnQgb25ldmFyOiBmYWxzZSwgaW5kZW50OjQgKi9cbi8qZ2xvYmFsIHNldEltbWVkaWF0ZTogZmFsc2UsIHNldFRpbWVvdXQ6IGZhbHNlLCBjb25zb2xlOiBmYWxzZSAqL1xuKGZ1bmN0aW9uICgpIHtcblxuICAgIHZhciBhc3luYyA9IHt9O1xuXG4gICAgLy8gZ2xvYmFsIG9uIHRoZSBzZXJ2ZXIsIHdpbmRvdyBpbiB0aGUgYnJvd3NlclxuICAgIHZhciByb290LCBwcmV2aW91c19hc3luYztcblxuICAgIHJvb3QgPSB0aGlzO1xuICAgIGlmIChyb290ICE9IG51bGwpIHtcbiAgICAgIHByZXZpb3VzX2FzeW5jID0gcm9vdC5hc3luYztcbiAgICB9XG5cbiAgICBhc3luYy5ub0NvbmZsaWN0ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByb290LmFzeW5jID0gcHJldmlvdXNfYXN5bmM7XG4gICAgICAgIHJldHVybiBhc3luYztcbiAgICB9O1xuXG4gICAgZnVuY3Rpb24gb25seV9vbmNlKGZuKSB7XG4gICAgICAgIHZhciBjYWxsZWQgPSBmYWxzZTtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgaWYgKGNhbGxlZCkgdGhyb3cgbmV3IEVycm9yKFwiQ2FsbGJhY2sgd2FzIGFscmVhZHkgY2FsbGVkLlwiKTtcbiAgICAgICAgICAgIGNhbGxlZCA9IHRydWU7XG4gICAgICAgICAgICBmbi5hcHBseShyb290LCBhcmd1bWVudHMpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8vLyBjcm9zcy1icm93c2VyIGNvbXBhdGlibGl0eSBmdW5jdGlvbnMgLy8vL1xuXG4gICAgdmFyIF90b1N0cmluZyA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7XG5cbiAgICB2YXIgX2lzQXJyYXkgPSBBcnJheS5pc0FycmF5IHx8IGZ1bmN0aW9uIChvYmopIHtcbiAgICAgICAgcmV0dXJuIF90b1N0cmluZy5jYWxsKG9iaikgPT09ICdbb2JqZWN0IEFycmF5XSc7XG4gICAgfTtcblxuICAgIHZhciBfZWFjaCA9IGZ1bmN0aW9uIChhcnIsIGl0ZXJhdG9yKSB7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXJyLmxlbmd0aDsgaSArPSAxKSB7XG4gICAgICAgICAgICBpdGVyYXRvcihhcnJbaV0sIGksIGFycik7XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgdmFyIF9tYXAgPSBmdW5jdGlvbiAoYXJyLCBpdGVyYXRvcikge1xuICAgICAgICBpZiAoYXJyLm1hcCkge1xuICAgICAgICAgICAgcmV0dXJuIGFyci5tYXAoaXRlcmF0b3IpO1xuICAgICAgICB9XG4gICAgICAgIHZhciByZXN1bHRzID0gW107XG4gICAgICAgIF9lYWNoKGFyciwgZnVuY3Rpb24gKHgsIGksIGEpIHtcbiAgICAgICAgICAgIHJlc3VsdHMucHVzaChpdGVyYXRvcih4LCBpLCBhKSk7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gcmVzdWx0cztcbiAgICB9O1xuXG4gICAgdmFyIF9yZWR1Y2UgPSBmdW5jdGlvbiAoYXJyLCBpdGVyYXRvciwgbWVtbykge1xuICAgICAgICBpZiAoYXJyLnJlZHVjZSkge1xuICAgICAgICAgICAgcmV0dXJuIGFyci5yZWR1Y2UoaXRlcmF0b3IsIG1lbW8pO1xuICAgICAgICB9XG4gICAgICAgIF9lYWNoKGFyciwgZnVuY3Rpb24gKHgsIGksIGEpIHtcbiAgICAgICAgICAgIG1lbW8gPSBpdGVyYXRvcihtZW1vLCB4LCBpLCBhKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBtZW1vO1xuICAgIH07XG5cbiAgICB2YXIgX2tleXMgPSBmdW5jdGlvbiAob2JqKSB7XG4gICAgICAgIGlmIChPYmplY3Qua2V5cykge1xuICAgICAgICAgICAgcmV0dXJuIE9iamVjdC5rZXlzKG9iaik7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIGtleXMgPSBbXTtcbiAgICAgICAgZm9yICh2YXIgayBpbiBvYmopIHtcbiAgICAgICAgICAgIGlmIChvYmouaGFzT3duUHJvcGVydHkoaykpIHtcbiAgICAgICAgICAgICAgICBrZXlzLnB1c2goayk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGtleXM7XG4gICAgfTtcblxuICAgIC8vLy8gZXhwb3J0ZWQgYXN5bmMgbW9kdWxlIGZ1bmN0aW9ucyAvLy8vXG5cbiAgICAvLy8vIG5leHRUaWNrIGltcGxlbWVudGF0aW9uIHdpdGggYnJvd3Nlci1jb21wYXRpYmxlIGZhbGxiYWNrIC8vLy9cbiAgICBpZiAodHlwZW9mIHByb2Nlc3MgPT09ICd1bmRlZmluZWQnIHx8ICEocHJvY2Vzcy5uZXh0VGljaykpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBzZXRJbW1lZGlhdGUgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIGFzeW5jLm5leHRUaWNrID0gZnVuY3Rpb24gKGZuKSB7XG4gICAgICAgICAgICAgICAgLy8gbm90IGEgZGlyZWN0IGFsaWFzIGZvciBJRTEwIGNvbXBhdGliaWxpdHlcbiAgICAgICAgICAgICAgICBzZXRJbW1lZGlhdGUoZm4pO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGFzeW5jLnNldEltbWVkaWF0ZSA9IGFzeW5jLm5leHRUaWNrO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgYXN5bmMubmV4dFRpY2sgPSBmdW5jdGlvbiAoZm4pIHtcbiAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KGZuLCAwKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBhc3luYy5zZXRJbW1lZGlhdGUgPSBhc3luYy5uZXh0VGljaztcbiAgICAgICAgfVxuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgYXN5bmMubmV4dFRpY2sgPSBwcm9jZXNzLm5leHRUaWNrO1xuICAgICAgICBpZiAodHlwZW9mIHNldEltbWVkaWF0ZSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgIGFzeW5jLnNldEltbWVkaWF0ZSA9IGZ1bmN0aW9uIChmbikge1xuICAgICAgICAgICAgICAvLyBub3QgYSBkaXJlY3QgYWxpYXMgZm9yIElFMTAgY29tcGF0aWJpbGl0eVxuICAgICAgICAgICAgICBzZXRJbW1lZGlhdGUoZm4pO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGFzeW5jLnNldEltbWVkaWF0ZSA9IGFzeW5jLm5leHRUaWNrO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgYXN5bmMuZWFjaCA9IGZ1bmN0aW9uIChhcnIsIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICBjYWxsYmFjayA9IGNhbGxiYWNrIHx8IGZ1bmN0aW9uICgpIHt9O1xuICAgICAgICBpZiAoIWFyci5sZW5ndGgpIHtcbiAgICAgICAgICAgIHJldHVybiBjYWxsYmFjaygpO1xuICAgICAgICB9XG4gICAgICAgIHZhciBjb21wbGV0ZWQgPSAwO1xuICAgICAgICBfZWFjaChhcnIsIGZ1bmN0aW9uICh4KSB7XG4gICAgICAgICAgICBpdGVyYXRvcih4LCBvbmx5X29uY2UoZG9uZSkgKTtcbiAgICAgICAgfSk7XG4gICAgICAgIGZ1bmN0aW9uIGRvbmUoZXJyKSB7XG4gICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgICBjYWxsYmFjayA9IGZ1bmN0aW9uICgpIHt9O1xuICAgICAgICAgIH1cbiAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgY29tcGxldGVkICs9IDE7XG4gICAgICAgICAgICAgIGlmIChjb21wbGV0ZWQgPj0gYXJyLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgY2FsbGJhY2soKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH07XG4gICAgYXN5bmMuZm9yRWFjaCA9IGFzeW5jLmVhY2g7XG5cbiAgICBhc3luYy5lYWNoU2VyaWVzID0gZnVuY3Rpb24gKGFyciwgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgIGNhbGxiYWNrID0gY2FsbGJhY2sgfHwgZnVuY3Rpb24gKCkge307XG4gICAgICAgIGlmICghYXJyLmxlbmd0aCkge1xuICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKCk7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIGNvbXBsZXRlZCA9IDA7XG4gICAgICAgIHZhciBpdGVyYXRlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgaXRlcmF0b3IoYXJyW2NvbXBsZXRlZF0sIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrID0gZnVuY3Rpb24gKCkge307XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBjb21wbGV0ZWQgKz0gMTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNvbXBsZXRlZCA+PSBhcnIubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgaXRlcmF0ZSgpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH07XG4gICAgICAgIGl0ZXJhdGUoKTtcbiAgICB9O1xuICAgIGFzeW5jLmZvckVhY2hTZXJpZXMgPSBhc3luYy5lYWNoU2VyaWVzO1xuXG4gICAgYXN5bmMuZWFjaExpbWl0ID0gZnVuY3Rpb24gKGFyciwgbGltaXQsIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICB2YXIgZm4gPSBfZWFjaExpbWl0KGxpbWl0KTtcbiAgICAgICAgZm4uYXBwbHkobnVsbCwgW2FyciwgaXRlcmF0b3IsIGNhbGxiYWNrXSk7XG4gICAgfTtcbiAgICBhc3luYy5mb3JFYWNoTGltaXQgPSBhc3luYy5lYWNoTGltaXQ7XG5cbiAgICB2YXIgX2VhY2hMaW1pdCA9IGZ1bmN0aW9uIChsaW1pdCkge1xuXG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAoYXJyLCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIGNhbGxiYWNrID0gY2FsbGJhY2sgfHwgZnVuY3Rpb24gKCkge307XG4gICAgICAgICAgICBpZiAoIWFyci5sZW5ndGggfHwgbGltaXQgPD0gMCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBjYWxsYmFjaygpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdmFyIGNvbXBsZXRlZCA9IDA7XG4gICAgICAgICAgICB2YXIgc3RhcnRlZCA9IDA7XG4gICAgICAgICAgICB2YXIgcnVubmluZyA9IDA7XG5cbiAgICAgICAgICAgIChmdW5jdGlvbiByZXBsZW5pc2ggKCkge1xuICAgICAgICAgICAgICAgIGlmIChjb21wbGV0ZWQgPj0gYXJyLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gY2FsbGJhY2soKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB3aGlsZSAocnVubmluZyA8IGxpbWl0ICYmIHN0YXJ0ZWQgPCBhcnIubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgIHN0YXJ0ZWQgKz0gMTtcbiAgICAgICAgICAgICAgICAgICAgcnVubmluZyArPSAxO1xuICAgICAgICAgICAgICAgICAgICBpdGVyYXRvcihhcnJbc3RhcnRlZCAtIDFdLCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayA9IGZ1bmN0aW9uICgpIHt9O1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcGxldGVkICs9IDE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcnVubmluZyAtPSAxO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb21wbGV0ZWQgPj0gYXJyLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVwbGVuaXNoKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KSgpO1xuICAgICAgICB9O1xuICAgIH07XG5cblxuICAgIHZhciBkb1BhcmFsbGVsID0gZnVuY3Rpb24gKGZuKSB7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7XG4gICAgICAgICAgICByZXR1cm4gZm4uYXBwbHkobnVsbCwgW2FzeW5jLmVhY2hdLmNvbmNhdChhcmdzKSk7XG4gICAgICAgIH07XG4gICAgfTtcbiAgICB2YXIgZG9QYXJhbGxlbExpbWl0ID0gZnVuY3Rpb24obGltaXQsIGZuKSB7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7XG4gICAgICAgICAgICByZXR1cm4gZm4uYXBwbHkobnVsbCwgW19lYWNoTGltaXQobGltaXQpXS5jb25jYXQoYXJncykpO1xuICAgICAgICB9O1xuICAgIH07XG4gICAgdmFyIGRvU2VyaWVzID0gZnVuY3Rpb24gKGZuKSB7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7XG4gICAgICAgICAgICByZXR1cm4gZm4uYXBwbHkobnVsbCwgW2FzeW5jLmVhY2hTZXJpZXNdLmNvbmNhdChhcmdzKSk7XG4gICAgICAgIH07XG4gICAgfTtcblxuXG4gICAgdmFyIF9hc3luY01hcCA9IGZ1bmN0aW9uIChlYWNoZm4sIGFyciwgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgIGFyciA9IF9tYXAoYXJyLCBmdW5jdGlvbiAoeCwgaSkge1xuICAgICAgICAgICAgcmV0dXJuIHtpbmRleDogaSwgdmFsdWU6IHh9O1xuICAgICAgICB9KTtcbiAgICAgICAgaWYgKCFjYWxsYmFjaykge1xuICAgICAgICAgICAgZWFjaGZuKGFyciwgZnVuY3Rpb24gKHgsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICAgICAgaXRlcmF0b3IoeC52YWx1ZSwgZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB2YXIgcmVzdWx0cyA9IFtdO1xuICAgICAgICAgICAgZWFjaGZuKGFyciwgZnVuY3Rpb24gKHgsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICAgICAgaXRlcmF0b3IoeC52YWx1ZSwgZnVuY3Rpb24gKGVyciwgdikge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHRzW3guaW5kZXhdID0gdjtcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0sIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnIsIHJlc3VsdHMpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIGFzeW5jLm1hcCA9IGRvUGFyYWxsZWwoX2FzeW5jTWFwKTtcbiAgICBhc3luYy5tYXBTZXJpZXMgPSBkb1NlcmllcyhfYXN5bmNNYXApO1xuICAgIGFzeW5jLm1hcExpbWl0ID0gZnVuY3Rpb24gKGFyciwgbGltaXQsIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICByZXR1cm4gX21hcExpbWl0KGxpbWl0KShhcnIsIGl0ZXJhdG9yLCBjYWxsYmFjayk7XG4gICAgfTtcblxuICAgIHZhciBfbWFwTGltaXQgPSBmdW5jdGlvbihsaW1pdCkge1xuICAgICAgICByZXR1cm4gZG9QYXJhbGxlbExpbWl0KGxpbWl0LCBfYXN5bmNNYXApO1xuICAgIH07XG5cbiAgICAvLyByZWR1Y2Ugb25seSBoYXMgYSBzZXJpZXMgdmVyc2lvbiwgYXMgZG9pbmcgcmVkdWNlIGluIHBhcmFsbGVsIHdvbid0XG4gICAgLy8gd29yayBpbiBtYW55IHNpdHVhdGlvbnMuXG4gICAgYXN5bmMucmVkdWNlID0gZnVuY3Rpb24gKGFyciwgbWVtbywgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgIGFzeW5jLmVhY2hTZXJpZXMoYXJyLCBmdW5jdGlvbiAoeCwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIGl0ZXJhdG9yKG1lbW8sIHgsIGZ1bmN0aW9uIChlcnIsIHYpIHtcbiAgICAgICAgICAgICAgICBtZW1vID0gdjtcbiAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgIGNhbGxiYWNrKGVyciwgbWVtbyk7XG4gICAgICAgIH0pO1xuICAgIH07XG4gICAgLy8gaW5qZWN0IGFsaWFzXG4gICAgYXN5bmMuaW5qZWN0ID0gYXN5bmMucmVkdWNlO1xuICAgIC8vIGZvbGRsIGFsaWFzXG4gICAgYXN5bmMuZm9sZGwgPSBhc3luYy5yZWR1Y2U7XG5cbiAgICBhc3luYy5yZWR1Y2VSaWdodCA9IGZ1bmN0aW9uIChhcnIsIG1lbW8sIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICB2YXIgcmV2ZXJzZWQgPSBfbWFwKGFyciwgZnVuY3Rpb24gKHgpIHtcbiAgICAgICAgICAgIHJldHVybiB4O1xuICAgICAgICB9KS5yZXZlcnNlKCk7XG4gICAgICAgIGFzeW5jLnJlZHVjZShyZXZlcnNlZCwgbWVtbywgaXRlcmF0b3IsIGNhbGxiYWNrKTtcbiAgICB9O1xuICAgIC8vIGZvbGRyIGFsaWFzXG4gICAgYXN5bmMuZm9sZHIgPSBhc3luYy5yZWR1Y2VSaWdodDtcblxuICAgIHZhciBfZmlsdGVyID0gZnVuY3Rpb24gKGVhY2hmbiwgYXJyLCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgdmFyIHJlc3VsdHMgPSBbXTtcbiAgICAgICAgYXJyID0gX21hcChhcnIsIGZ1bmN0aW9uICh4LCBpKSB7XG4gICAgICAgICAgICByZXR1cm4ge2luZGV4OiBpLCB2YWx1ZTogeH07XG4gICAgICAgIH0pO1xuICAgICAgICBlYWNoZm4oYXJyLCBmdW5jdGlvbiAoeCwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIGl0ZXJhdG9yKHgudmFsdWUsIGZ1bmN0aW9uICh2KSB7XG4gICAgICAgICAgICAgICAgaWYgKHYpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0cy5wdXNoKHgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgIGNhbGxiYWNrKF9tYXAocmVzdWx0cy5zb3J0KGZ1bmN0aW9uIChhLCBiKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGEuaW5kZXggLSBiLmluZGV4O1xuICAgICAgICAgICAgfSksIGZ1bmN0aW9uICh4KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHgudmFsdWU7XG4gICAgICAgICAgICB9KSk7XG4gICAgICAgIH0pO1xuICAgIH07XG4gICAgYXN5bmMuZmlsdGVyID0gZG9QYXJhbGxlbChfZmlsdGVyKTtcbiAgICBhc3luYy5maWx0ZXJTZXJpZXMgPSBkb1NlcmllcyhfZmlsdGVyKTtcbiAgICAvLyBzZWxlY3QgYWxpYXNcbiAgICBhc3luYy5zZWxlY3QgPSBhc3luYy5maWx0ZXI7XG4gICAgYXN5bmMuc2VsZWN0U2VyaWVzID0gYXN5bmMuZmlsdGVyU2VyaWVzO1xuXG4gICAgdmFyIF9yZWplY3QgPSBmdW5jdGlvbiAoZWFjaGZuLCBhcnIsIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICB2YXIgcmVzdWx0cyA9IFtdO1xuICAgICAgICBhcnIgPSBfbWFwKGFyciwgZnVuY3Rpb24gKHgsIGkpIHtcbiAgICAgICAgICAgIHJldHVybiB7aW5kZXg6IGksIHZhbHVlOiB4fTtcbiAgICAgICAgfSk7XG4gICAgICAgIGVhY2hmbihhcnIsIGZ1bmN0aW9uICh4LCBjYWxsYmFjaykge1xuICAgICAgICAgICAgaXRlcmF0b3IoeC52YWx1ZSwgZnVuY3Rpb24gKHYpIHtcbiAgICAgICAgICAgICAgICBpZiAoIXYpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0cy5wdXNoKHgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgIGNhbGxiYWNrKF9tYXAocmVzdWx0cy5zb3J0KGZ1bmN0aW9uIChhLCBiKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGEuaW5kZXggLSBiLmluZGV4O1xuICAgICAgICAgICAgfSksIGZ1bmN0aW9uICh4KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHgudmFsdWU7XG4gICAgICAgICAgICB9KSk7XG4gICAgICAgIH0pO1xuICAgIH07XG4gICAgYXN5bmMucmVqZWN0ID0gZG9QYXJhbGxlbChfcmVqZWN0KTtcbiAgICBhc3luYy5yZWplY3RTZXJpZXMgPSBkb1NlcmllcyhfcmVqZWN0KTtcblxuICAgIHZhciBfZGV0ZWN0ID0gZnVuY3Rpb24gKGVhY2hmbiwgYXJyLCBpdGVyYXRvciwgbWFpbl9jYWxsYmFjaykge1xuICAgICAgICBlYWNoZm4oYXJyLCBmdW5jdGlvbiAoeCwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIGl0ZXJhdG9yKHgsIGZ1bmN0aW9uIChyZXN1bHQpIHtcbiAgICAgICAgICAgICAgICBpZiAocmVzdWx0KSB7XG4gICAgICAgICAgICAgICAgICAgIG1haW5fY2FsbGJhY2soeCk7XG4gICAgICAgICAgICAgICAgICAgIG1haW5fY2FsbGJhY2sgPSBmdW5jdGlvbiAoKSB7fTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgIG1haW5fY2FsbGJhY2soKTtcbiAgICAgICAgfSk7XG4gICAgfTtcbiAgICBhc3luYy5kZXRlY3QgPSBkb1BhcmFsbGVsKF9kZXRlY3QpO1xuICAgIGFzeW5jLmRldGVjdFNlcmllcyA9IGRvU2VyaWVzKF9kZXRlY3QpO1xuXG4gICAgYXN5bmMuc29tZSA9IGZ1bmN0aW9uIChhcnIsIGl0ZXJhdG9yLCBtYWluX2NhbGxiYWNrKSB7XG4gICAgICAgIGFzeW5jLmVhY2goYXJyLCBmdW5jdGlvbiAoeCwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIGl0ZXJhdG9yKHgsIGZ1bmN0aW9uICh2KSB7XG4gICAgICAgICAgICAgICAgaWYgKHYpIHtcbiAgICAgICAgICAgICAgICAgICAgbWFpbl9jYWxsYmFjayh0cnVlKTtcbiAgICAgICAgICAgICAgICAgICAgbWFpbl9jYWxsYmFjayA9IGZ1bmN0aW9uICgpIHt9O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgIG1haW5fY2FsbGJhY2soZmFsc2UpO1xuICAgICAgICB9KTtcbiAgICB9O1xuICAgIC8vIGFueSBhbGlhc1xuICAgIGFzeW5jLmFueSA9IGFzeW5jLnNvbWU7XG5cbiAgICBhc3luYy5ldmVyeSA9IGZ1bmN0aW9uIChhcnIsIGl0ZXJhdG9yLCBtYWluX2NhbGxiYWNrKSB7XG4gICAgICAgIGFzeW5jLmVhY2goYXJyLCBmdW5jdGlvbiAoeCwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIGl0ZXJhdG9yKHgsIGZ1bmN0aW9uICh2KSB7XG4gICAgICAgICAgICAgICAgaWYgKCF2KSB7XG4gICAgICAgICAgICAgICAgICAgIG1haW5fY2FsbGJhY2soZmFsc2UpO1xuICAgICAgICAgICAgICAgICAgICBtYWluX2NhbGxiYWNrID0gZnVuY3Rpb24gKCkge307XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhbGxiYWNrKCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSwgZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgbWFpbl9jYWxsYmFjayh0cnVlKTtcbiAgICAgICAgfSk7XG4gICAgfTtcbiAgICAvLyBhbGwgYWxpYXNcbiAgICBhc3luYy5hbGwgPSBhc3luYy5ldmVyeTtcblxuICAgIGFzeW5jLnNvcnRCeSA9IGZ1bmN0aW9uIChhcnIsIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICBhc3luYy5tYXAoYXJyLCBmdW5jdGlvbiAoeCwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIGl0ZXJhdG9yKHgsIGZ1bmN0aW9uIChlcnIsIGNyaXRlcmlhKSB7XG4gICAgICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2sobnVsbCwge3ZhbHVlOiB4LCBjcml0ZXJpYTogY3JpdGVyaWF9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSwgZnVuY3Rpb24gKGVyciwgcmVzdWx0cykge1xuICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAgIHJldHVybiBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgdmFyIGZuID0gZnVuY3Rpb24gKGxlZnQsIHJpZ2h0KSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBhID0gbGVmdC5jcml0ZXJpYSwgYiA9IHJpZ2h0LmNyaXRlcmlhO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYSA8IGIgPyAtMSA6IGEgPiBiID8gMSA6IDA7XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICBjYWxsYmFjayhudWxsLCBfbWFwKHJlc3VsdHMuc29ydChmbiksIGZ1bmN0aW9uICh4KSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB4LnZhbHVlO1xuICAgICAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfTtcblxuICAgIGFzeW5jLmF1dG8gPSBmdW5jdGlvbiAodGFza3MsIGNhbGxiYWNrKSB7XG4gICAgICAgIGNhbGxiYWNrID0gY2FsbGJhY2sgfHwgZnVuY3Rpb24gKCkge307XG4gICAgICAgIHZhciBrZXlzID0gX2tleXModGFza3MpO1xuICAgICAgICB2YXIgcmVtYWluaW5nVGFza3MgPSBrZXlzLmxlbmd0aFxuICAgICAgICBpZiAoIXJlbWFpbmluZ1Rhc2tzKSB7XG4gICAgICAgICAgICByZXR1cm4gY2FsbGJhY2soKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciByZXN1bHRzID0ge307XG5cbiAgICAgICAgdmFyIGxpc3RlbmVycyA9IFtdO1xuICAgICAgICB2YXIgYWRkTGlzdGVuZXIgPSBmdW5jdGlvbiAoZm4pIHtcbiAgICAgICAgICAgIGxpc3RlbmVycy51bnNoaWZ0KGZuKTtcbiAgICAgICAgfTtcbiAgICAgICAgdmFyIHJlbW92ZUxpc3RlbmVyID0gZnVuY3Rpb24gKGZuKSB7XG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxpc3RlbmVycy5sZW5ndGg7IGkgKz0gMSkge1xuICAgICAgICAgICAgICAgIGlmIChsaXN0ZW5lcnNbaV0gPT09IGZuKSB7XG4gICAgICAgICAgICAgICAgICAgIGxpc3RlbmVycy5zcGxpY2UoaSwgMSk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIHZhciB0YXNrQ29tcGxldGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZW1haW5pbmdUYXNrcy0tXG4gICAgICAgICAgICBfZWFjaChsaXN0ZW5lcnMuc2xpY2UoMCksIGZ1bmN0aW9uIChmbikge1xuICAgICAgICAgICAgICAgIGZuKCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfTtcblxuICAgICAgICBhZGRMaXN0ZW5lcihmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBpZiAoIXJlbWFpbmluZ1Rhc2tzKSB7XG4gICAgICAgICAgICAgICAgdmFyIHRoZUNhbGxiYWNrID0gY2FsbGJhY2s7XG4gICAgICAgICAgICAgICAgLy8gcHJldmVudCBmaW5hbCBjYWxsYmFjayBmcm9tIGNhbGxpbmcgaXRzZWxmIGlmIGl0IGVycm9yc1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrID0gZnVuY3Rpb24gKCkge307XG5cbiAgICAgICAgICAgICAgICB0aGVDYWxsYmFjayhudWxsLCByZXN1bHRzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgX2VhY2goa2V5cywgZnVuY3Rpb24gKGspIHtcbiAgICAgICAgICAgIHZhciB0YXNrID0gX2lzQXJyYXkodGFza3Nba10pID8gdGFza3Nba106IFt0YXNrc1trXV07XG4gICAgICAgICAgICB2YXIgdGFza0NhbGxiYWNrID0gZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgICAgIHZhciBhcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKTtcbiAgICAgICAgICAgICAgICBpZiAoYXJncy5sZW5ndGggPD0gMSkge1xuICAgICAgICAgICAgICAgICAgICBhcmdzID0gYXJnc1swXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAgICAgICB2YXIgc2FmZVJlc3VsdHMgPSB7fTtcbiAgICAgICAgICAgICAgICAgICAgX2VhY2goX2tleXMocmVzdWx0cyksIGZ1bmN0aW9uKHJrZXkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNhZmVSZXN1bHRzW3JrZXldID0gcmVzdWx0c1tya2V5XTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIHNhZmVSZXN1bHRzW2tdID0gYXJncztcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soZXJyLCBzYWZlUmVzdWx0cyk7XG4gICAgICAgICAgICAgICAgICAgIC8vIHN0b3Agc3Vic2VxdWVudCBlcnJvcnMgaGl0dGluZyBjYWxsYmFjayBtdWx0aXBsZSB0aW1lc1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayA9IGZ1bmN0aW9uICgpIHt9O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0c1trXSA9IGFyZ3M7XG4gICAgICAgICAgICAgICAgICAgIGFzeW5jLnNldEltbWVkaWF0ZSh0YXNrQ29tcGxldGUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICB2YXIgcmVxdWlyZXMgPSB0YXNrLnNsaWNlKDAsIE1hdGguYWJzKHRhc2subGVuZ3RoIC0gMSkpIHx8IFtdO1xuICAgICAgICAgICAgdmFyIHJlYWR5ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBfcmVkdWNlKHJlcXVpcmVzLCBmdW5jdGlvbiAoYSwgeCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gKGEgJiYgcmVzdWx0cy5oYXNPd25Qcm9wZXJ0eSh4KSk7XG4gICAgICAgICAgICAgICAgfSwgdHJ1ZSkgJiYgIXJlc3VsdHMuaGFzT3duUHJvcGVydHkoayk7XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgaWYgKHJlYWR5KCkpIHtcbiAgICAgICAgICAgICAgICB0YXNrW3Rhc2subGVuZ3RoIC0gMV0odGFza0NhbGxiYWNrLCByZXN1bHRzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHZhciBsaXN0ZW5lciA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlYWR5KCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlbW92ZUxpc3RlbmVyKGxpc3RlbmVyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRhc2tbdGFzay5sZW5ndGggLSAxXSh0YXNrQ2FsbGJhY2ssIHJlc3VsdHMpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICBhZGRMaXN0ZW5lcihsaXN0ZW5lcik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH07XG5cbiAgICBhc3luYy5yZXRyeSA9IGZ1bmN0aW9uKHRpbWVzLCB0YXNrLCBjYWxsYmFjaykge1xuICAgICAgICB2YXIgREVGQVVMVF9USU1FUyA9IDU7XG4gICAgICAgIHZhciBhdHRlbXB0cyA9IFtdO1xuICAgICAgICAvLyBVc2UgZGVmYXVsdHMgaWYgdGltZXMgbm90IHBhc3NlZFxuICAgICAgICBpZiAodHlwZW9mIHRpbWVzID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICBjYWxsYmFjayA9IHRhc2s7XG4gICAgICAgICAgICB0YXNrID0gdGltZXM7XG4gICAgICAgICAgICB0aW1lcyA9IERFRkFVTFRfVElNRVM7XG4gICAgICAgIH1cbiAgICAgICAgLy8gTWFrZSBzdXJlIHRpbWVzIGlzIGEgbnVtYmVyXG4gICAgICAgIHRpbWVzID0gcGFyc2VJbnQodGltZXMsIDEwKSB8fCBERUZBVUxUX1RJTUVTO1xuICAgICAgICB2YXIgd3JhcHBlZFRhc2sgPSBmdW5jdGlvbih3cmFwcGVkQ2FsbGJhY2ssIHdyYXBwZWRSZXN1bHRzKSB7XG4gICAgICAgICAgICB2YXIgcmV0cnlBdHRlbXB0ID0gZnVuY3Rpb24odGFzaywgZmluYWxBdHRlbXB0KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKHNlcmllc0NhbGxiYWNrKSB7XG4gICAgICAgICAgICAgICAgICAgIHRhc2soZnVuY3Rpb24oZXJyLCByZXN1bHQpe1xuICAgICAgICAgICAgICAgICAgICAgICAgc2VyaWVzQ2FsbGJhY2soIWVyciB8fCBmaW5hbEF0dGVtcHQsIHtlcnI6IGVyciwgcmVzdWx0OiByZXN1bHR9KTtcbiAgICAgICAgICAgICAgICAgICAgfSwgd3JhcHBlZFJlc3VsdHMpO1xuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgd2hpbGUgKHRpbWVzKSB7XG4gICAgICAgICAgICAgICAgYXR0ZW1wdHMucHVzaChyZXRyeUF0dGVtcHQodGFzaywgISh0aW1lcy09MSkpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGFzeW5jLnNlcmllcyhhdHRlbXB0cywgZnVuY3Rpb24oZG9uZSwgZGF0YSl7XG4gICAgICAgICAgICAgICAgZGF0YSA9IGRhdGFbZGF0YS5sZW5ndGggLSAxXTtcbiAgICAgICAgICAgICAgICAod3JhcHBlZENhbGxiYWNrIHx8IGNhbGxiYWNrKShkYXRhLmVyciwgZGF0YS5yZXN1bHQpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gSWYgYSBjYWxsYmFjayBpcyBwYXNzZWQsIHJ1biB0aGlzIGFzIGEgY29udHJvbGwgZmxvd1xuICAgICAgICByZXR1cm4gY2FsbGJhY2sgPyB3cmFwcGVkVGFzaygpIDogd3JhcHBlZFRhc2tcbiAgICB9O1xuXG4gICAgYXN5bmMud2F0ZXJmYWxsID0gZnVuY3Rpb24gKHRhc2tzLCBjYWxsYmFjaykge1xuICAgICAgICBjYWxsYmFjayA9IGNhbGxiYWNrIHx8IGZ1bmN0aW9uICgpIHt9O1xuICAgICAgICBpZiAoIV9pc0FycmF5KHRhc2tzKSkge1xuICAgICAgICAgIHZhciBlcnIgPSBuZXcgRXJyb3IoJ0ZpcnN0IGFyZ3VtZW50IHRvIHdhdGVyZmFsbCBtdXN0IGJlIGFuIGFycmF5IG9mIGZ1bmN0aW9ucycpO1xuICAgICAgICAgIHJldHVybiBjYWxsYmFjayhlcnIpO1xuICAgICAgICB9XG4gICAgICAgIGlmICghdGFza3MubGVuZ3RoKSB7XG4gICAgICAgICAgICByZXR1cm4gY2FsbGJhY2soKTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgd3JhcEl0ZXJhdG9yID0gZnVuY3Rpb24gKGl0ZXJhdG9yKSB7XG4gICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2suYXBwbHkobnVsbCwgYXJndW1lbnRzKTtcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2sgPSBmdW5jdGlvbiAoKSB7fTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBhcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKTtcbiAgICAgICAgICAgICAgICAgICAgdmFyIG5leHQgPSBpdGVyYXRvci5uZXh0KCk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChuZXh0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhcmdzLnB1c2god3JhcEl0ZXJhdG9yKG5leHQpKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3MucHVzaChjYWxsYmFjayk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgYXN5bmMuc2V0SW1tZWRpYXRlKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGl0ZXJhdG9yLmFwcGx5KG51bGwsIGFyZ3MpO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9O1xuICAgICAgICB9O1xuICAgICAgICB3cmFwSXRlcmF0b3IoYXN5bmMuaXRlcmF0b3IodGFza3MpKSgpO1xuICAgIH07XG5cbiAgICB2YXIgX3BhcmFsbGVsID0gZnVuY3Rpb24oZWFjaGZuLCB0YXNrcywgY2FsbGJhY2spIHtcbiAgICAgICAgY2FsbGJhY2sgPSBjYWxsYmFjayB8fCBmdW5jdGlvbiAoKSB7fTtcbiAgICAgICAgaWYgKF9pc0FycmF5KHRhc2tzKSkge1xuICAgICAgICAgICAgZWFjaGZuLm1hcCh0YXNrcywgZnVuY3Rpb24gKGZuLCBjYWxsYmFjaykge1xuICAgICAgICAgICAgICAgIGlmIChmbikge1xuICAgICAgICAgICAgICAgICAgICBmbihmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoYXJncy5sZW5ndGggPD0gMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3MgPSBhcmdzWzBdO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2suY2FsbChudWxsLCBlcnIsIGFyZ3MpO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LCBjYWxsYmFjayk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB2YXIgcmVzdWx0cyA9IHt9O1xuICAgICAgICAgICAgZWFjaGZuLmVhY2goX2tleXModGFza3MpLCBmdW5jdGlvbiAoaywgY2FsbGJhY2spIHtcbiAgICAgICAgICAgICAgICB0YXNrc1trXShmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBhcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGFyZ3MubGVuZ3RoIDw9IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3MgPSBhcmdzWzBdO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdHNba10gPSBhcmdzO1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSwgZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrKGVyciwgcmVzdWx0cyk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH07XG5cbiAgICBhc3luYy5wYXJhbGxlbCA9IGZ1bmN0aW9uICh0YXNrcywgY2FsbGJhY2spIHtcbiAgICAgICAgX3BhcmFsbGVsKHsgbWFwOiBhc3luYy5tYXAsIGVhY2g6IGFzeW5jLmVhY2ggfSwgdGFza3MsIGNhbGxiYWNrKTtcbiAgICB9O1xuXG4gICAgYXN5bmMucGFyYWxsZWxMaW1pdCA9IGZ1bmN0aW9uKHRhc2tzLCBsaW1pdCwgY2FsbGJhY2spIHtcbiAgICAgICAgX3BhcmFsbGVsKHsgbWFwOiBfbWFwTGltaXQobGltaXQpLCBlYWNoOiBfZWFjaExpbWl0KGxpbWl0KSB9LCB0YXNrcywgY2FsbGJhY2spO1xuICAgIH07XG5cbiAgICBhc3luYy5zZXJpZXMgPSBmdW5jdGlvbiAodGFza3MsIGNhbGxiYWNrKSB7XG4gICAgICAgIGNhbGxiYWNrID0gY2FsbGJhY2sgfHwgZnVuY3Rpb24gKCkge307XG4gICAgICAgIGlmIChfaXNBcnJheSh0YXNrcykpIHtcbiAgICAgICAgICAgIGFzeW5jLm1hcFNlcmllcyh0YXNrcywgZnVuY3Rpb24gKGZuLCBjYWxsYmFjaykge1xuICAgICAgICAgICAgICAgIGlmIChmbikge1xuICAgICAgICAgICAgICAgICAgICBmbihmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoYXJncy5sZW5ndGggPD0gMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3MgPSBhcmdzWzBdO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2suY2FsbChudWxsLCBlcnIsIGFyZ3MpO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LCBjYWxsYmFjayk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB2YXIgcmVzdWx0cyA9IHt9O1xuICAgICAgICAgICAgYXN5bmMuZWFjaFNlcmllcyhfa2V5cyh0YXNrcyksIGZ1bmN0aW9uIChrLCBjYWxsYmFjaykge1xuICAgICAgICAgICAgICAgIHRhc2tzW2tdKGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGFyZ3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsIDEpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoYXJncy5sZW5ndGggPD0gMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgYXJncyA9IGFyZ3NbMF07XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0c1trXSA9IGFyZ3M7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9LCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2soZXJyLCByZXN1bHRzKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIGFzeW5jLml0ZXJhdG9yID0gZnVuY3Rpb24gKHRhc2tzKSB7XG4gICAgICAgIHZhciBtYWtlQ2FsbGJhY2sgPSBmdW5jdGlvbiAoaW5kZXgpIHtcbiAgICAgICAgICAgIHZhciBmbiA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBpZiAodGFza3MubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgIHRhc2tzW2luZGV4XS5hcHBseShudWxsLCBhcmd1bWVudHMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gZm4ubmV4dCgpO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGZuLm5leHQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIChpbmRleCA8IHRhc2tzLmxlbmd0aCAtIDEpID8gbWFrZUNhbGxiYWNrKGluZGV4ICsgMSk6IG51bGw7XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgcmV0dXJuIGZuO1xuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gbWFrZUNhbGxiYWNrKDApO1xuICAgIH07XG5cbiAgICBhc3luYy5hcHBseSA9IGZ1bmN0aW9uIChmbikge1xuICAgICAgICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMSk7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gZm4uYXBwbHkoXG4gICAgICAgICAgICAgICAgbnVsbCwgYXJncy5jb25jYXQoQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKSlcbiAgICAgICAgICAgICk7XG4gICAgICAgIH07XG4gICAgfTtcblxuICAgIHZhciBfY29uY2F0ID0gZnVuY3Rpb24gKGVhY2hmbiwgYXJyLCBmbiwgY2FsbGJhY2spIHtcbiAgICAgICAgdmFyIHIgPSBbXTtcbiAgICAgICAgZWFjaGZuKGFyciwgZnVuY3Rpb24gKHgsIGNiKSB7XG4gICAgICAgICAgICBmbih4LCBmdW5jdGlvbiAoZXJyLCB5KSB7XG4gICAgICAgICAgICAgICAgciA9IHIuY29uY2F0KHkgfHwgW10pO1xuICAgICAgICAgICAgICAgIGNiKGVycik7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSwgZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgY2FsbGJhY2soZXJyLCByKTtcbiAgICAgICAgfSk7XG4gICAgfTtcbiAgICBhc3luYy5jb25jYXQgPSBkb1BhcmFsbGVsKF9jb25jYXQpO1xuICAgIGFzeW5jLmNvbmNhdFNlcmllcyA9IGRvU2VyaWVzKF9jb25jYXQpO1xuXG4gICAgYXN5bmMud2hpbHN0ID0gZnVuY3Rpb24gKHRlc3QsIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICBpZiAodGVzdCgpKSB7XG4gICAgICAgICAgICBpdGVyYXRvcihmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYXN5bmMud2hpbHN0KHRlc3QsIGl0ZXJhdG9yLCBjYWxsYmFjayk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGNhbGxiYWNrKCk7XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgYXN5bmMuZG9XaGlsc3QgPSBmdW5jdGlvbiAoaXRlcmF0b3IsIHRlc3QsIGNhbGxiYWNrKSB7XG4gICAgICAgIGl0ZXJhdG9yKGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHZhciBhcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKTtcbiAgICAgICAgICAgIGlmICh0ZXN0LmFwcGx5KG51bGwsIGFyZ3MpKSB7XG4gICAgICAgICAgICAgICAgYXN5bmMuZG9XaGlsc3QoaXRlcmF0b3IsIHRlc3QsIGNhbGxiYWNrKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH07XG5cbiAgICBhc3luYy51bnRpbCA9IGZ1bmN0aW9uICh0ZXN0LCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgaWYgKCF0ZXN0KCkpIHtcbiAgICAgICAgICAgIGl0ZXJhdG9yKGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBhc3luYy51bnRpbCh0ZXN0LCBpdGVyYXRvciwgY2FsbGJhY2spO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIGFzeW5jLmRvVW50aWwgPSBmdW5jdGlvbiAoaXRlcmF0b3IsIHRlc3QsIGNhbGxiYWNrKSB7XG4gICAgICAgIGl0ZXJhdG9yKGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHZhciBhcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKTtcbiAgICAgICAgICAgIGlmICghdGVzdC5hcHBseShudWxsLCBhcmdzKSkge1xuICAgICAgICAgICAgICAgIGFzeW5jLmRvVW50aWwoaXRlcmF0b3IsIHRlc3QsIGNhbGxiYWNrKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH07XG5cbiAgICBhc3luYy5xdWV1ZSA9IGZ1bmN0aW9uICh3b3JrZXIsIGNvbmN1cnJlbmN5KSB7XG4gICAgICAgIGlmIChjb25jdXJyZW5jeSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBjb25jdXJyZW5jeSA9IDE7XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gX2luc2VydChxLCBkYXRhLCBwb3MsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgaWYgKCFxLnN0YXJ0ZWQpe1xuICAgICAgICAgICAgcS5zdGFydGVkID0gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKCFfaXNBcnJheShkYXRhKSkge1xuICAgICAgICAgICAgICBkYXRhID0gW2RhdGFdO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZihkYXRhLmxlbmd0aCA9PSAwKSB7XG4gICAgICAgICAgICAgLy8gY2FsbCBkcmFpbiBpbW1lZGlhdGVseSBpZiB0aGVyZSBhcmUgbm8gdGFza3NcbiAgICAgICAgICAgICByZXR1cm4gYXN5bmMuc2V0SW1tZWRpYXRlKGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgICBpZiAocS5kcmFpbikge1xuICAgICAgICAgICAgICAgICAgICAgcS5kcmFpbigpO1xuICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIF9lYWNoKGRhdGEsIGZ1bmN0aW9uKHRhc2spIHtcbiAgICAgICAgICAgICAgdmFyIGl0ZW0gPSB7XG4gICAgICAgICAgICAgICAgICBkYXRhOiB0YXNrLFxuICAgICAgICAgICAgICAgICAgY2FsbGJhY2s6IHR5cGVvZiBjYWxsYmFjayA9PT0gJ2Z1bmN0aW9uJyA/IGNhbGxiYWNrIDogbnVsbFxuICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgIGlmIChwb3MpIHtcbiAgICAgICAgICAgICAgICBxLnRhc2tzLnVuc2hpZnQoaXRlbSk7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcS50YXNrcy5wdXNoKGl0ZW0pO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgaWYgKHEuc2F0dXJhdGVkICYmIHEudGFza3MubGVuZ3RoID09PSBxLmNvbmN1cnJlbmN5KSB7XG4gICAgICAgICAgICAgICAgICBxLnNhdHVyYXRlZCgpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGFzeW5jLnNldEltbWVkaWF0ZShxLnByb2Nlc3MpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIHdvcmtlcnMgPSAwO1xuICAgICAgICB2YXIgcSA9IHtcbiAgICAgICAgICAgIHRhc2tzOiBbXSxcbiAgICAgICAgICAgIGNvbmN1cnJlbmN5OiBjb25jdXJyZW5jeSxcbiAgICAgICAgICAgIHNhdHVyYXRlZDogbnVsbCxcbiAgICAgICAgICAgIGVtcHR5OiBudWxsLFxuICAgICAgICAgICAgZHJhaW46IG51bGwsXG4gICAgICAgICAgICBzdGFydGVkOiBmYWxzZSxcbiAgICAgICAgICAgIHBhdXNlZDogZmFsc2UsXG4gICAgICAgICAgICBwdXNoOiBmdW5jdGlvbiAoZGF0YSwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgICAgX2luc2VydChxLCBkYXRhLCBmYWxzZSwgY2FsbGJhY2spO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGtpbGw6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgcS5kcmFpbiA9IG51bGw7XG4gICAgICAgICAgICAgIHEudGFza3MgPSBbXTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB1bnNoaWZ0OiBmdW5jdGlvbiAoZGF0YSwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgICAgX2luc2VydChxLCBkYXRhLCB0cnVlLCBjYWxsYmFjayk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcHJvY2VzczogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGlmICghcS5wYXVzZWQgJiYgd29ya2VycyA8IHEuY29uY3VycmVuY3kgJiYgcS50YXNrcy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHRhc2sgPSBxLnRhc2tzLnNoaWZ0KCk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChxLmVtcHR5ICYmIHEudGFza3MubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBxLmVtcHR5KCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgd29ya2VycyArPSAxO1xuICAgICAgICAgICAgICAgICAgICB2YXIgbmV4dCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHdvcmtlcnMgLT0gMTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0YXNrLmNhbGxiYWNrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFzay5jYWxsYmFjay5hcHBseSh0YXNrLCBhcmd1bWVudHMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHEuZHJhaW4gJiYgcS50YXNrcy5sZW5ndGggKyB3b3JrZXJzID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcS5kcmFpbigpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgcS5wcm9jZXNzKCk7XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIHZhciBjYiA9IG9ubHlfb25jZShuZXh0KTtcbiAgICAgICAgICAgICAgICAgICAgd29ya2VyKHRhc2suZGF0YSwgY2IpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBsZW5ndGg6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcS50YXNrcy5sZW5ndGg7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcnVubmluZzogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB3b3JrZXJzO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGlkbGU6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBxLnRhc2tzLmxlbmd0aCArIHdvcmtlcnMgPT09IDA7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcGF1c2U6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBpZiAocS5wYXVzZWQgPT09IHRydWUpIHsgcmV0dXJuOyB9XG4gICAgICAgICAgICAgICAgcS5wYXVzZWQgPSB0cnVlO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHJlc3VtZTogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGlmIChxLnBhdXNlZCA9PT0gZmFsc2UpIHsgcmV0dXJuOyB9XG4gICAgICAgICAgICAgICAgcS5wYXVzZWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAvLyBOZWVkIHRvIGNhbGwgcS5wcm9jZXNzIG9uY2UgcGVyIGNvbmN1cnJlbnRcbiAgICAgICAgICAgICAgICAvLyB3b3JrZXIgdG8gcHJlc2VydmUgZnVsbCBjb25jdXJyZW5jeSBhZnRlciBwYXVzZVxuICAgICAgICAgICAgICAgIGZvciAodmFyIHcgPSAxOyB3IDw9IHEuY29uY3VycmVuY3k7IHcrKykge1xuICAgICAgICAgICAgICAgICAgICBhc3luYy5zZXRJbW1lZGlhdGUocS5wcm9jZXNzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiBxO1xuICAgIH07XG5cbiAgICBhc3luYy5wcmlvcml0eVF1ZXVlID0gZnVuY3Rpb24gKHdvcmtlciwgY29uY3VycmVuY3kpIHtcblxuICAgICAgICBmdW5jdGlvbiBfY29tcGFyZVRhc2tzKGEsIGIpe1xuICAgICAgICAgIHJldHVybiBhLnByaW9yaXR5IC0gYi5wcmlvcml0eTtcbiAgICAgICAgfTtcblxuICAgICAgICBmdW5jdGlvbiBfYmluYXJ5U2VhcmNoKHNlcXVlbmNlLCBpdGVtLCBjb21wYXJlKSB7XG4gICAgICAgICAgdmFyIGJlZyA9IC0xLFxuICAgICAgICAgICAgICBlbmQgPSBzZXF1ZW5jZS5sZW5ndGggLSAxO1xuICAgICAgICAgIHdoaWxlIChiZWcgPCBlbmQpIHtcbiAgICAgICAgICAgIHZhciBtaWQgPSBiZWcgKyAoKGVuZCAtIGJlZyArIDEpID4+PiAxKTtcbiAgICAgICAgICAgIGlmIChjb21wYXJlKGl0ZW0sIHNlcXVlbmNlW21pZF0pID49IDApIHtcbiAgICAgICAgICAgICAgYmVnID0gbWlkO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgZW5kID0gbWlkIC0gMTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIGJlZztcbiAgICAgICAgfVxuXG4gICAgICAgIGZ1bmN0aW9uIF9pbnNlcnQocSwgZGF0YSwgcHJpb3JpdHksIGNhbGxiYWNrKSB7XG4gICAgICAgICAgaWYgKCFxLnN0YXJ0ZWQpe1xuICAgICAgICAgICAgcS5zdGFydGVkID0gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKCFfaXNBcnJheShkYXRhKSkge1xuICAgICAgICAgICAgICBkYXRhID0gW2RhdGFdO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZihkYXRhLmxlbmd0aCA9PSAwKSB7XG4gICAgICAgICAgICAgLy8gY2FsbCBkcmFpbiBpbW1lZGlhdGVseSBpZiB0aGVyZSBhcmUgbm8gdGFza3NcbiAgICAgICAgICAgICByZXR1cm4gYXN5bmMuc2V0SW1tZWRpYXRlKGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgICBpZiAocS5kcmFpbikge1xuICAgICAgICAgICAgICAgICAgICAgcS5kcmFpbigpO1xuICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIF9lYWNoKGRhdGEsIGZ1bmN0aW9uKHRhc2spIHtcbiAgICAgICAgICAgICAgdmFyIGl0ZW0gPSB7XG4gICAgICAgICAgICAgICAgICBkYXRhOiB0YXNrLFxuICAgICAgICAgICAgICAgICAgcHJpb3JpdHk6IHByaW9yaXR5LFxuICAgICAgICAgICAgICAgICAgY2FsbGJhY2s6IHR5cGVvZiBjYWxsYmFjayA9PT0gJ2Z1bmN0aW9uJyA/IGNhbGxiYWNrIDogbnVsbFxuICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgIHEudGFza3Muc3BsaWNlKF9iaW5hcnlTZWFyY2gocS50YXNrcywgaXRlbSwgX2NvbXBhcmVUYXNrcykgKyAxLCAwLCBpdGVtKTtcblxuICAgICAgICAgICAgICBpZiAocS5zYXR1cmF0ZWQgJiYgcS50YXNrcy5sZW5ndGggPT09IHEuY29uY3VycmVuY3kpIHtcbiAgICAgICAgICAgICAgICAgIHEuc2F0dXJhdGVkKCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgYXN5bmMuc2V0SW1tZWRpYXRlKHEucHJvY2Vzcyk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBTdGFydCB3aXRoIGEgbm9ybWFsIHF1ZXVlXG4gICAgICAgIHZhciBxID0gYXN5bmMucXVldWUod29ya2VyLCBjb25jdXJyZW5jeSk7XG5cbiAgICAgICAgLy8gT3ZlcnJpZGUgcHVzaCB0byBhY2NlcHQgc2Vjb25kIHBhcmFtZXRlciByZXByZXNlbnRpbmcgcHJpb3JpdHlcbiAgICAgICAgcS5wdXNoID0gZnVuY3Rpb24gKGRhdGEsIHByaW9yaXR5LCBjYWxsYmFjaykge1xuICAgICAgICAgIF9pbnNlcnQocSwgZGF0YSwgcHJpb3JpdHksIGNhbGxiYWNrKTtcbiAgICAgICAgfTtcblxuICAgICAgICAvLyBSZW1vdmUgdW5zaGlmdCBmdW5jdGlvblxuICAgICAgICBkZWxldGUgcS51bnNoaWZ0O1xuXG4gICAgICAgIHJldHVybiBxO1xuICAgIH07XG5cbiAgICBhc3luYy5jYXJnbyA9IGZ1bmN0aW9uICh3b3JrZXIsIHBheWxvYWQpIHtcbiAgICAgICAgdmFyIHdvcmtpbmcgICAgID0gZmFsc2UsXG4gICAgICAgICAgICB0YXNrcyAgICAgICA9IFtdO1xuXG4gICAgICAgIHZhciBjYXJnbyA9IHtcbiAgICAgICAgICAgIHRhc2tzOiB0YXNrcyxcbiAgICAgICAgICAgIHBheWxvYWQ6IHBheWxvYWQsXG4gICAgICAgICAgICBzYXR1cmF0ZWQ6IG51bGwsXG4gICAgICAgICAgICBlbXB0eTogbnVsbCxcbiAgICAgICAgICAgIGRyYWluOiBudWxsLFxuICAgICAgICAgICAgZHJhaW5lZDogdHJ1ZSxcbiAgICAgICAgICAgIHB1c2g6IGZ1bmN0aW9uIChkYXRhLCBjYWxsYmFjaykge1xuICAgICAgICAgICAgICAgIGlmICghX2lzQXJyYXkoZGF0YSkpIHtcbiAgICAgICAgICAgICAgICAgICAgZGF0YSA9IFtkYXRhXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgX2VhY2goZGF0YSwgZnVuY3Rpb24odGFzaykge1xuICAgICAgICAgICAgICAgICAgICB0YXNrcy5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGE6IHRhc2ssXG4gICAgICAgICAgICAgICAgICAgICAgICBjYWxsYmFjazogdHlwZW9mIGNhbGxiYWNrID09PSAnZnVuY3Rpb24nID8gY2FsbGJhY2sgOiBudWxsXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICBjYXJnby5kcmFpbmVkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIGlmIChjYXJnby5zYXR1cmF0ZWQgJiYgdGFza3MubGVuZ3RoID09PSBwYXlsb2FkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjYXJnby5zYXR1cmF0ZWQoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGFzeW5jLnNldEltbWVkaWF0ZShjYXJnby5wcm9jZXNzKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBwcm9jZXNzOiBmdW5jdGlvbiBwcm9jZXNzKCkge1xuICAgICAgICAgICAgICAgIGlmICh3b3JraW5nKSByZXR1cm47XG4gICAgICAgICAgICAgICAgaWYgKHRhc2tzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICBpZihjYXJnby5kcmFpbiAmJiAhY2FyZ28uZHJhaW5lZCkgY2FyZ28uZHJhaW4oKTtcbiAgICAgICAgICAgICAgICAgICAgY2FyZ28uZHJhaW5lZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB2YXIgdHMgPSB0eXBlb2YgcGF5bG9hZCA9PT0gJ251bWJlcidcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IHRhc2tzLnNwbGljZSgwLCBwYXlsb2FkKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogdGFza3Muc3BsaWNlKDAsIHRhc2tzLmxlbmd0aCk7XG5cbiAgICAgICAgICAgICAgICB2YXIgZHMgPSBfbWFwKHRzLCBmdW5jdGlvbiAodGFzaykge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGFzay5kYXRhO1xuICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgaWYoY2FyZ28uZW1wdHkpIGNhcmdvLmVtcHR5KCk7XG4gICAgICAgICAgICAgICAgd29ya2luZyA9IHRydWU7XG4gICAgICAgICAgICAgICAgd29ya2VyKGRzLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIHdvcmtpbmcgPSBmYWxzZTtcblxuICAgICAgICAgICAgICAgICAgICB2YXIgYXJncyA9IGFyZ3VtZW50cztcbiAgICAgICAgICAgICAgICAgICAgX2VhY2godHMsIGZ1bmN0aW9uIChkYXRhKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZGF0YS5jYWxsYmFjaykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEuY2FsbGJhY2suYXBwbHkobnVsbCwgYXJncyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgICAgIHByb2Nlc3MoKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBsZW5ndGg6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGFza3MubGVuZ3RoO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHJ1bm5pbmc6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gd29ya2luZztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIGNhcmdvO1xuICAgIH07XG5cbiAgICB2YXIgX2NvbnNvbGVfZm4gPSBmdW5jdGlvbiAobmFtZSkge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKGZuKSB7XG4gICAgICAgICAgICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMSk7XG4gICAgICAgICAgICBmbi5hcHBseShudWxsLCBhcmdzLmNvbmNhdChbZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgICAgIHZhciBhcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKTtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGNvbnNvbGUgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb25zb2xlLmVycm9yKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihlcnIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKGNvbnNvbGVbbmFtZV0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIF9lYWNoKGFyZ3MsIGZ1bmN0aW9uICh4KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZVtuYW1lXSh4KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfV0pKTtcbiAgICAgICAgfTtcbiAgICB9O1xuICAgIGFzeW5jLmxvZyA9IF9jb25zb2xlX2ZuKCdsb2cnKTtcbiAgICBhc3luYy5kaXIgPSBfY29uc29sZV9mbignZGlyJyk7XG4gICAgLyphc3luYy5pbmZvID0gX2NvbnNvbGVfZm4oJ2luZm8nKTtcbiAgICBhc3luYy53YXJuID0gX2NvbnNvbGVfZm4oJ3dhcm4nKTtcbiAgICBhc3luYy5lcnJvciA9IF9jb25zb2xlX2ZuKCdlcnJvcicpOyovXG5cbiAgICBhc3luYy5tZW1vaXplID0gZnVuY3Rpb24gKGZuLCBoYXNoZXIpIHtcbiAgICAgICAgdmFyIG1lbW8gPSB7fTtcbiAgICAgICAgdmFyIHF1ZXVlcyA9IHt9O1xuICAgICAgICBoYXNoZXIgPSBoYXNoZXIgfHwgZnVuY3Rpb24gKHgpIHtcbiAgICAgICAgICAgIHJldHVybiB4O1xuICAgICAgICB9O1xuICAgICAgICB2YXIgbWVtb2l6ZWQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7XG4gICAgICAgICAgICB2YXIgY2FsbGJhY2sgPSBhcmdzLnBvcCgpO1xuICAgICAgICAgICAgdmFyIGtleSA9IGhhc2hlci5hcHBseShudWxsLCBhcmdzKTtcbiAgICAgICAgICAgIGlmIChrZXkgaW4gbWVtbykge1xuICAgICAgICAgICAgICAgIGFzeW5jLm5leHRUaWNrKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2suYXBwbHkobnVsbCwgbWVtb1trZXldKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGtleSBpbiBxdWV1ZXMpIHtcbiAgICAgICAgICAgICAgICBxdWV1ZXNba2V5XS5wdXNoKGNhbGxiYWNrKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHF1ZXVlc1trZXldID0gW2NhbGxiYWNrXTtcbiAgICAgICAgICAgICAgICBmbi5hcHBseShudWxsLCBhcmdzLmNvbmNhdChbZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICBtZW1vW2tleV0gPSBhcmd1bWVudHM7XG4gICAgICAgICAgICAgICAgICAgIHZhciBxID0gcXVldWVzW2tleV07XG4gICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBxdWV1ZXNba2V5XTtcbiAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDAsIGwgPSBxLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICAgIHFbaV0uYXBwbHkobnVsbCwgYXJndW1lbnRzKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1dKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIG1lbW9pemVkLm1lbW8gPSBtZW1vO1xuICAgICAgICBtZW1vaXplZC51bm1lbW9pemVkID0gZm47XG4gICAgICAgIHJldHVybiBtZW1vaXplZDtcbiAgICB9O1xuXG4gICAgYXN5bmMudW5tZW1vaXplID0gZnVuY3Rpb24gKGZuKSB7XG4gICAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gKGZuLnVubWVtb2l6ZWQgfHwgZm4pLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7XG4gICAgICB9O1xuICAgIH07XG5cbiAgICBhc3luYy50aW1lcyA9IGZ1bmN0aW9uIChjb3VudCwgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgIHZhciBjb3VudGVyID0gW107XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY291bnQ7IGkrKykge1xuICAgICAgICAgICAgY291bnRlci5wdXNoKGkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBhc3luYy5tYXAoY291bnRlciwgaXRlcmF0b3IsIGNhbGxiYWNrKTtcbiAgICB9O1xuXG4gICAgYXN5bmMudGltZXNTZXJpZXMgPSBmdW5jdGlvbiAoY291bnQsIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICB2YXIgY291bnRlciA9IFtdO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNvdW50OyBpKyspIHtcbiAgICAgICAgICAgIGNvdW50ZXIucHVzaChpKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYXN5bmMubWFwU2VyaWVzKGNvdW50ZXIsIGl0ZXJhdG9yLCBjYWxsYmFjayk7XG4gICAgfTtcblxuICAgIGFzeW5jLnNlcSA9IGZ1bmN0aW9uICgvKiBmdW5jdGlvbnMuLi4gKi8pIHtcbiAgICAgICAgdmFyIGZucyA9IGFyZ3VtZW50cztcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHZhciB0aGF0ID0gdGhpcztcbiAgICAgICAgICAgIHZhciBhcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKTtcbiAgICAgICAgICAgIHZhciBjYWxsYmFjayA9IGFyZ3MucG9wKCk7XG4gICAgICAgICAgICBhc3luYy5yZWR1Y2UoZm5zLCBhcmdzLCBmdW5jdGlvbiAobmV3YXJncywgZm4sIGNiKSB7XG4gICAgICAgICAgICAgICAgZm4uYXBwbHkodGhhdCwgbmV3YXJncy5jb25jYXQoW2Z1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGVyciA9IGFyZ3VtZW50c1swXTtcbiAgICAgICAgICAgICAgICAgICAgdmFyIG5leHRhcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKTtcbiAgICAgICAgICAgICAgICAgICAgY2IoZXJyLCBuZXh0YXJncyk7XG4gICAgICAgICAgICAgICAgfV0pKVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGZ1bmN0aW9uIChlcnIsIHJlc3VsdHMpIHtcbiAgICAgICAgICAgICAgICBjYWxsYmFjay5hcHBseSh0aGF0LCBbZXJyXS5jb25jYXQocmVzdWx0cykpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH07XG4gICAgfTtcblxuICAgIGFzeW5jLmNvbXBvc2UgPSBmdW5jdGlvbiAoLyogZnVuY3Rpb25zLi4uICovKSB7XG4gICAgICByZXR1cm4gYXN5bmMuc2VxLmFwcGx5KG51bGwsIEFycmF5LnByb3RvdHlwZS5yZXZlcnNlLmNhbGwoYXJndW1lbnRzKSk7XG4gICAgfTtcblxuICAgIHZhciBfYXBwbHlFYWNoID0gZnVuY3Rpb24gKGVhY2hmbiwgZm5zIC8qYXJncy4uLiovKSB7XG4gICAgICAgIHZhciBnbyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHZhciB0aGF0ID0gdGhpcztcbiAgICAgICAgICAgIHZhciBhcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKTtcbiAgICAgICAgICAgIHZhciBjYWxsYmFjayA9IGFyZ3MucG9wKCk7XG4gICAgICAgICAgICByZXR1cm4gZWFjaGZuKGZucywgZnVuY3Rpb24gKGZuLCBjYikge1xuICAgICAgICAgICAgICAgIGZuLmFwcGx5KHRoYXQsIGFyZ3MuY29uY2F0KFtjYl0pKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjYWxsYmFjayk7XG4gICAgICAgIH07XG4gICAgICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID4gMikge1xuICAgICAgICAgICAgdmFyIGFyZ3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsIDIpO1xuICAgICAgICAgICAgcmV0dXJuIGdvLmFwcGx5KHRoaXMsIGFyZ3MpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIGdvO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBhc3luYy5hcHBseUVhY2ggPSBkb1BhcmFsbGVsKF9hcHBseUVhY2gpO1xuICAgIGFzeW5jLmFwcGx5RWFjaFNlcmllcyA9IGRvU2VyaWVzKF9hcHBseUVhY2gpO1xuXG4gICAgYXN5bmMuZm9yZXZlciA9IGZ1bmN0aW9uIChmbiwgY2FsbGJhY2spIHtcbiAgICAgICAgZnVuY3Rpb24gbmV4dChlcnIpIHtcbiAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICBpZiAoY2FsbGJhY2spIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRocm93IGVycjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZuKG5leHQpO1xuICAgICAgICB9XG4gICAgICAgIG5leHQoKTtcbiAgICB9O1xuXG4gICAgLy8gTm9kZS5qc1xuICAgIGlmICh0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJyAmJiBtb2R1bGUuZXhwb3J0cykge1xuICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IGFzeW5jO1xuICAgIH1cbiAgICAvLyBBTUQgLyBSZXF1aXJlSlNcbiAgICBlbHNlIGlmICh0eXBlb2YgZGVmaW5lICE9PSAndW5kZWZpbmVkJyAmJiBkZWZpbmUuYW1kKSB7XG4gICAgICAgIGRlZmluZShbXSwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIGFzeW5jO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgLy8gaW5jbHVkZWQgZGlyZWN0bHkgdmlhIDxzY3JpcHQ+IHRhZ1xuICAgIGVsc2Uge1xuICAgICAgICByb290LmFzeW5jID0gYXN5bmM7XG4gICAgfVxuXG59KCkpO1xuIiwidmFyIGFzeW5jICAgICAgID0gcmVxdWlyZSgnYXN5bmMnKSxcbiAgICB1cmxQYXJzZXIgICA9IHJlcXVpcmUoJ3VybCcpLFxuICAgIFJlc291cmNlICAgID0gcmVxdWlyZSgnLi9SZXNvdXJjZScpLFxuICAgIEV2ZW50RW1pdHRlciA9IHJlcXVpcmUoJ2V2ZW50ZW1pdHRlcjMnKTtcblxuLyoqXG4gKiBNYW5hZ2VzIHRoZSBzdGF0ZSBhbmQgbG9hZGluZyBvZiBtdWx0aXBsZSByZXNvdXJjZXMgdG8gbG9hZC5cbiAqXG4gKiBAY2xhc3NcbiAqIEBwYXJhbSBbYmFzZVVybD0nJ10ge3N0cmluZ30gVGhlIGJhc2UgdXJsIGZvciBhbGwgcmVzb3VyY2VzIGxvYWRlZCBieSB0aGlzIGxvYWRlci5cbiAqIEBwYXJhbSBbY29uY3VycmVuY3k9MTBdIHtudW1iZXJ9IFRoZSBudW1iZXIgb2YgcmVzb3VyY2VzIHRvIGxvYWQgY29uY3VycmVudGx5LlxuICovXG5mdW5jdGlvbiBMb2FkZXIoYmFzZVVybCwgY29uY3VycmVuY3kpIHtcbiAgICBFdmVudEVtaXR0ZXIuY2FsbCh0aGlzKTtcblxuICAgIGNvbmN1cnJlbmN5ID0gY29uY3VycmVuY3kgfHwgMTA7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYmFzZSB1cmwgZm9yIGFsbCByZXNvdXJjZXMgbG9hZGVkIGJ5IHRoaXMgbG9hZGVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7c3RyaW5nfVxuICAgICAqL1xuICAgIHRoaXMuYmFzZVVybCA9IGJhc2VVcmwgfHwgJyc7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgcHJvZ3Jlc3MgcGVyY2VudCBvZiB0aGUgbG9hZGVyIGdvaW5nIHRocm91Z2ggdGhlIHF1ZXVlLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMucHJvZ3Jlc3MgPSAwO1xuXG4gICAgLyoqXG4gICAgICogTG9hZGluZyBzdGF0ZSBvZiB0aGUgbG9hZGVyLCB0cnVlIGlmIGl0IGlzIGN1cnJlbnRseSBsb2FkaW5nIHJlc291cmNlcy5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICovXG4gICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgcGVyY2VudGFnZSBvZiB0b3RhbCBwcm9ncmVzcyB0aGF0IGEgc2luZ2xlIHJlc291cmNlIHJlcHJlc2VudHMuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy5fcHJvZ3Jlc3NDaHVuayA9IDA7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgbWlkZGxld2FyZSB0byBydW4gYmVmb3JlIGxvYWRpbmcgZWFjaCByZXNvdXJjZS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Z1bmN0aW9uW119XG4gICAgICovXG4gICAgdGhpcy5fYmVmb3JlTWlkZGxld2FyZSA9IFtdO1xuXG4gICAgLyoqXG4gICAgICogVGhlIG1pZGRsZXdhcmUgdG8gcnVuIGFmdGVyIGxvYWRpbmcgZWFjaCByZXNvdXJjZS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Z1bmN0aW9uW119XG4gICAgICovXG4gICAgdGhpcy5fYWZ0ZXJNaWRkbGV3YXJlID0gW107XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYF9sb2FkUmVzb3VyY2VgIGZ1bmN0aW9uIGJvdW5kIHdpdGggdGhpcyBvYmplY3QgY29udGV4dC5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQG1lbWJlciB7ZnVuY3Rpb259XG4gICAgICovXG4gICAgdGhpcy5fYm91bmRMb2FkUmVzb3VyY2UgPSB0aGlzLl9sb2FkUmVzb3VyY2UuYmluZCh0aGlzKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBgX29uTG9hZGAgZnVuY3Rpb24gYm91bmQgd2l0aCB0aGlzIG9iamVjdCBjb250ZXh0LlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAbWVtYmVyIHtmdW5jdGlvbn1cbiAgICAgKi9cbiAgICB0aGlzLl9ib3VuZE9uTG9hZCA9IHRoaXMuX29uTG9hZC5iaW5kKHRoaXMpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHJlc291cmNlIGJ1ZmZlciB0aGF0IGZpbGxzIHVudGlsIGBsb2FkYCBpcyBjYWxsZWQgdG8gc3RhcnQgbG9hZGluZyByZXNvdXJjZXMuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBtZW1iZXIge1Jlc291cmNlW119XG4gICAgICovXG4gICAgdGhpcy5fYnVmZmVyID0gW107XG5cbiAgICAvKipcbiAgICAgKiBVc2VkIHRvIHRyYWNrIGxvYWQgY29tcGxldGlvbi5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMuX251bVRvTG9hZCA9IDA7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgcmVzb3VyY2VzIHdhaXRpbmcgdG8gYmUgbG9hZGVkLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAbWVtYmVyIHtSZXNvdXJjZVtdfVxuICAgICAqL1xuICAgIHRoaXMuX3F1ZXVlID0gYXN5bmMucXVldWUodGhpcy5fYm91bmRMb2FkUmVzb3VyY2UsIGNvbmN1cnJlbmN5KTtcblxuICAgIC8qKlxuICAgICAqIEFsbCB0aGUgcmVzb3VyY2VzIGZvciB0aGlzIGxvYWRlciBrZXllZCBieSBuYW1lLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7b2JqZWN0PHN0cmluZywgUmVzb3VyY2U+fVxuICAgICAqL1xuICAgIHRoaXMucmVzb3VyY2VzID0ge307XG5cbiAgICAvKipcbiAgICAgKiBFbWl0dGVkIG9uY2UgcGVyIGxvYWRlZCBvciBlcnJvcmVkIHJlc291cmNlLlxuICAgICAqXG4gICAgICogQGV2ZW50IHByb2dyZXNzXG4gICAgICogQG1lbWJlcm9mIExvYWRlciNcbiAgICAgKi9cblxuICAgIC8qKlxuICAgICAqIEVtaXR0ZWQgb25jZSBwZXIgZXJyb3JlZCByZXNvdXJjZS5cbiAgICAgKlxuICAgICAqIEBldmVudCBlcnJvclxuICAgICAqIEBtZW1iZXJvZiBMb2FkZXIjXG4gICAgICovXG5cbiAgICAvKipcbiAgICAgKiBFbWl0dGVkIG9uY2UgcGVyIGxvYWRlZCByZXNvdXJjZS5cbiAgICAgKlxuICAgICAqIEBldmVudCBsb2FkXG4gICAgICogQG1lbWJlcm9mIExvYWRlciNcbiAgICAgKi9cblxuICAgIC8qKlxuICAgICAqIEVtaXR0ZWQgd2hlbiB0aGUgbG9hZGVyIGJlZ2lucyB0byBwcm9jZXNzIHRoZSBxdWV1ZS5cbiAgICAgKlxuICAgICAqIEBldmVudCBzdGFydFxuICAgICAqIEBtZW1iZXJvZiBMb2FkZXIjXG4gICAgICovXG5cbiAgICAvKipcbiAgICAgKiBFbWl0dGVkIHdoZW4gdGhlIHF1ZXVlZCByZXNvdXJjZXMgYWxsIGxvYWQuXG4gICAgICpcbiAgICAgKiBAZXZlbnQgY29tcGxldGVcbiAgICAgKiBAbWVtYmVyb2YgTG9hZGVyI1xuICAgICAqL1xufVxuXG5Mb2FkZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShFdmVudEVtaXR0ZXIucHJvdG90eXBlKTtcbkxvYWRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBMb2FkZXI7XG5tb2R1bGUuZXhwb3J0cyA9IExvYWRlcjtcblxuLyoqXG4gKiBBZGRzIGEgcmVzb3VyY2UgKG9yIG11bHRpcGxlIHJlc291cmNlcykgdG8gdGhlIGxvYWRlciBxdWV1ZS5cbiAqXG4gKiBUaGlzIGZ1bmN0aW9uIGNhbiB0YWtlIGEgd2lkZSB2YXJpZXR5IG9mIGRpZmZlcmVudCBwYXJhbWV0ZXJzLiBUaGUgb25seSB0aGluZyB0aGF0IGlzIGFsd2F5c1xuICogcmVxdWlyZWQgdGhlIHVybCB0byBsb2FkLiBBbGwgdGhlIGZvbGxvd2luZyB3aWxsIHdvcms6XG4gKlxuICogYGBganNcbiAqIGxvYWRlclxuICogICAgIC8vIG5vcm1hbCBwYXJhbSBzeW50YXhcbiAqICAgICAuYWRkKCdrZXknLCAnaHR0cDovLy4uLicsIGZ1bmN0aW9uICgpIHt9KVxuICogICAgIC5hZGQoJ2h0dHA6Ly8uLi4nLCBmdW5jdGlvbiAoKSB7fSlcbiAqICAgICAuYWRkKCdodHRwOi8vLi4uJylcbiAqXG4gKiAgICAgLy8gb2JqZWN0IHN5bnRheFxuICogICAgIC5hZGQoe1xuICogICAgICAgICBuYW1lOiAna2V5MicsXG4gKiAgICAgICAgIHVybDogJ2h0dHA6Ly8uLi4nXG4gKiAgICAgfSwgZnVuY3Rpb24gKCkge30pXG4gKiAgICAgLmFkZCh7XG4gKiAgICAgICAgIHVybDogJ2h0dHA6Ly8uLi4nXG4gKiAgICAgfSwgZnVuY3Rpb24gKCkge30pXG4gKiAgICAgLmFkZCh7XG4gKiAgICAgICAgIG5hbWU6ICdrZXkzJyxcbiAqICAgICAgICAgdXJsOiAnaHR0cDovLy4uLidcbiAqICAgICAgICAgb25Db21wbGV0ZTogZnVuY3Rpb24gKCkge31cbiAqICAgICB9KVxuICogICAgIC5hZGQoe1xuICogICAgICAgICB1cmw6ICdodHRwczovLy4uLicsXG4gKiAgICAgICAgIG9uQ29tcGxldGU6IGZ1bmN0aW9uICgpIHt9LFxuICogICAgICAgICBjcm9zc09yaWdpbjogdHJ1ZVxuICogICAgIH0pXG4gKlxuICogICAgIC8vIHlvdSBjYW4gYWxzbyBwYXNzIGFuIGFycmF5IG9mIG9iamVjdHMgb3IgdXJscyBvciBib3RoXG4gKiAgICAgLmFkZChbXG4gKiAgICAgICAgIHsgbmFtZTogJ2tleTQnLCB1cmw6ICdodHRwOi8vLi4uJywgb25Db21wbGV0ZTogZnVuY3Rpb24gKCkge30gfSxcbiAqICAgICAgICAgeyB1cmw6ICdodHRwOi8vLi4uJywgb25Db21wbGV0ZTogZnVuY3Rpb24gKCkge30gfSxcbiAqICAgICAgICAgJ2h0dHA6Ly8uLi4nXG4gKiAgICAgXSk7XG4gKiBgYGBcbiAqXG4gKiBAYWxpYXMgZW5xdWV1ZVxuICogQHBhcmFtIFtuYW1lXSB7c3RyaW5nfSBUaGUgbmFtZSBvZiB0aGUgcmVzb3VyY2UgdG8gbG9hZCwgaWYgbm90IHBhc3NlZCB0aGUgdXJsIGlzIHVzZWQuXG4gKiBAcGFyYW0gdXJsIHtzdHJpbmd9IFRoZSB1cmwgZm9yIHRoaXMgcmVzb3VyY2UsIHJlbGF0aXZlIHRvIHRoZSBiYXNlVXJsIG9mIHRoaXMgbG9hZGVyLlxuICogQHBhcmFtIFtvcHRpb25zXSB7b2JqZWN0fSBUaGUgb3B0aW9ucyBmb3IgdGhlIGxvYWQuXG4gKiBAcGFyYW0gW29wdGlvbnMuY3Jvc3NPcmlnaW5dIHtib29sZWFufSBJcyB0aGlzIHJlcXVlc3QgY3Jvc3Mtb3JpZ2luPyBEZWZhdWx0IGlzIHRvIGRldGVybWluZSBhdXRvbWF0aWNhbGx5LlxuICogQHBhcmFtIFtvcHRpb25zLmxvYWRUeXBlPVJlc291cmNlLkxPQURfVFlQRS5YSFJdIHtSZXNvdXJjZS5YSFJfTE9BRF9UWVBFfSBIb3cgc2hvdWxkIHRoaXMgcmVzb3VyY2UgYmUgbG9hZGVkP1xuICogQHBhcmFtIFtvcHRpb25zLnhoclR5cGU9UmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuREVGQVVMVF0ge1Jlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFfSBIb3cgc2hvdWxkIHRoZSBkYXRhIGJlaW5nXG4gKiAgICAgIGxvYWRlZCBiZSBpbnRlcnByZXRlZCB3aGVuIHVzaW5nIFhIUj9cbiAqIEBwYXJhbSBbY2FsbGJhY2tdIHtmdW5jdGlvbn0gRnVuY3Rpb24gdG8gY2FsbCB3aGVuIHRoaXMgc3BlY2lmaWMgcmVzb3VyY2UgY29tcGxldGVzIGxvYWRpbmcuXG4gKiBAcmV0dXJuIHtMb2FkZXJ9XG4gKi9cbkxvYWRlci5wcm90b3R5cGUuYWRkID0gTG9hZGVyLnByb3RvdHlwZS5lbnF1ZXVlID0gZnVuY3Rpb24gKG5hbWUsIHVybCwgb3B0aW9ucywgY2IpIHtcbiAgICAvLyBzcGVjaWFsIGNhc2Ugb2YgYW4gYXJyYXkgb2Ygb2JqZWN0cyBvciB1cmxzXG4gICAgaWYgKEFycmF5LmlzQXJyYXkobmFtZSkpIHtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBuYW1lLmxlbmd0aDsgKytpKSB7XG4gICAgICAgICAgICB0aGlzLmFkZChuYW1lW2ldKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIC8vIGlmIGFuIG9iamVjdCBpcyBwYXNzZWQgaW5zdGVhZCBvZiBwYXJhbXNcbiAgICBpZiAodHlwZW9mIG5hbWUgPT09ICdvYmplY3QnKSB7XG4gICAgICAgIGNiID0gdXJsIHx8IG5hbWUuY2FsbGJhY2sgfHwgbmFtZS5vbkNvbXBsZXRlO1xuICAgICAgICBvcHRpb25zID0gbmFtZTtcbiAgICAgICAgdXJsID0gbmFtZS51cmw7XG4gICAgICAgIG5hbWUgPSBuYW1lLm5hbWUgfHwgbmFtZS5rZXkgfHwgbmFtZS51cmw7XG4gICAgfVxuXG4gICAgLy8gY2FzZSB3aGVyZSBubyBuYW1lIGlzIHBhc3NlZCBzaGlmdCBhbGwgYXJncyBvdmVyIGJ5IG9uZS5cbiAgICBpZiAodHlwZW9mIHVybCAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgY2IgPSBvcHRpb25zO1xuICAgICAgICBvcHRpb25zID0gdXJsO1xuICAgICAgICB1cmwgPSBuYW1lO1xuICAgIH1cblxuICAgIC8vIG5vdyB0aGF0IHdlIHNoaWZ0ZWQgbWFrZSBzdXJlIHdlIGhhdmUgYSBwcm9wZXIgdXJsLlxuICAgIGlmICh0eXBlb2YgdXJsICE9PSAnc3RyaW5nJykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ05vIHVybCBwYXNzZWQgdG8gYWRkIHJlc291cmNlIHRvIGxvYWRlci4nKTtcbiAgICB9XG5cbiAgICAvLyBvcHRpb25zIGFyZSBvcHRpb25hbCBzbyBwZW9wbGUgbWlnaHQgcGFzcyBhIGZ1bmN0aW9uIGFuZCBubyBvcHRpb25zXG4gICAgaWYgKHR5cGVvZiBvcHRpb25zID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIGNiID0gb3B0aW9ucztcbiAgICAgICAgb3B0aW9ucyA9IG51bGw7XG4gICAgfVxuXG4gICAgLy8gY2hlY2sgaWYgcmVzb3VyY2UgYWxyZWFkeSBleGlzdHMuXG4gICAgaWYgKHRoaXMucmVzb3VyY2VzW25hbWVdKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignUmVzb3VyY2Ugd2l0aCBuYW1lIFwiJyArIG5hbWUgKyAnXCIgYWxyZWFkeSBleGlzdHMuJyk7XG4gICAgfVxuXG4gICAgLy8gYWRkIGJhc2UgdXJsIGlmIHRoaXMgaXNuJ3QgYW4gYWJzb2x1dGUgdXJsXG4gICAgdXJsID0gdGhpcy5faGFuZGxlQmFzZVVybCh1cmwpO1xuXG4gICAgLy8gY3JlYXRlIHRoZSBzdG9yZSB0aGUgcmVzb3VyY2VcbiAgICB0aGlzLnJlc291cmNlc1tuYW1lXSA9IG5ldyBSZXNvdXJjZShuYW1lLCB1cmwsIG9wdGlvbnMpO1xuXG4gICAgaWYgKHR5cGVvZiBjYiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB0aGlzLnJlc291cmNlc1tuYW1lXS5vbmNlKCdhZnRlck1pZGRsZXdhcmUnLCBjYik7XG4gICAgfVxuXG4gICAgdGhpcy5fbnVtVG9Mb2FkKys7XG5cbiAgICAvLyBpZiBhbHJlYWR5IGxvYWRpbmcgYWRkIGl0IHRvIHRoZSB3b3JrZXIgcXVldWVcbiAgICBpZiAodGhpcy5fcXVldWUuc3RhcnRlZCkge1xuICAgICAgICB0aGlzLl9xdWV1ZS5wdXNoKHRoaXMucmVzb3VyY2VzW25hbWVdKTtcbiAgICAgICAgdGhpcy5fcHJvZ3Jlc3NDaHVuayA9ICgxMDAgLSB0aGlzLnByb2dyZXNzKSAvICh0aGlzLl9xdWV1ZS5sZW5ndGgoKSArIHRoaXMuX3F1ZXVlLnJ1bm5pbmcoKSk7XG4gICAgfVxuICAgIC8vIG90aGVyd2lzZSBidWZmZXIgaXQgdG8gYmUgYWRkZWQgdG8gdGhlIHF1ZXVlIGxhdGVyXG4gICAgZWxzZSB7XG4gICAgICAgIHRoaXMuX2J1ZmZlci5wdXNoKHRoaXMucmVzb3VyY2VzW25hbWVdKTtcbiAgICAgICAgdGhpcy5fcHJvZ3Jlc3NDaHVuayA9IDEwMCAvIHRoaXMuX2J1ZmZlci5sZW5ndGg7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG5Mb2FkZXIucHJvdG90eXBlLl9oYW5kbGVCYXNlVXJsID0gZnVuY3Rpb24gKHVybCkge1xuICAgIHZhciBwYXJzZWRVcmwgPSB1cmxQYXJzZXIucGFyc2UodXJsKTtcblxuICAgIC8vIGFic29sdXRlIHVybCwganVzdCB1c2UgaXQgYXMgaXMuXG4gICAgaWYgKHBhcnNlZFVybC5wcm90b2NvbCB8fCBwYXJzZWRVcmwucGF0aG5hbWUuaW5kZXhPZignLy8nKSA9PT0gMCkge1xuICAgICAgICByZXR1cm4gdXJsO1xuICAgIH1cblxuICAgIC8vIGlmIGJhc2VVcmwgZG9lc24ndCBlbmQgaW4gc2xhc2ggYW5kIHVybCBkb2Vzbid0IHN0YXJ0IHdpdGggc2xhc2gsIHRoZW4gYWRkIGEgc2xhc2ggaW5iZXR3ZWVuXG4gICAgaWYgKFxuICAgICAgICB0aGlzLmJhc2VVcmwubGVuZ3RoICYmXG4gICAgICAgIHRoaXMuYmFzZVVybC5sYXN0SW5kZXhPZignLycpICE9PSB0aGlzLmJhc2VVcmwubGVuZ3RoIC0gMSAmJlxuICAgICAgICB1cmwuY2hhckF0KDApICE9PSAnLydcbiAgICApIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYmFzZVVybCArICcvJyArIHVybDtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHJldHVybiB0aGlzLmJhc2VVcmwgKyB1cmw7XG4gICAgfVxufTtcblxuXG4vKipcbiAqIFNldHMgdXAgYSBtaWRkbGV3YXJlIGZ1bmN0aW9uIHRoYXQgd2lsbCBydW4gKmJlZm9yZSogdGhlXG4gKiByZXNvdXJjZSBpcyBsb2FkZWQuXG4gKlxuICogQGFsaWFzIHByZVxuICogQHBhcmFtIG1pZGRsZXdhcmUge2Z1bmN0aW9ufSBUaGUgbWlkZGxld2FyZSBmdW5jdGlvbiB0byByZWdpc3Rlci5cbiAqIEByZXR1cm4ge0xvYWRlcn1cbiAqL1xuTG9hZGVyLnByb3RvdHlwZS5iZWZvcmUgPSBMb2FkZXIucHJvdG90eXBlLnByZSA9IGZ1bmN0aW9uIChmbikge1xuICAgIHRoaXMuX2JlZm9yZU1pZGRsZXdhcmUucHVzaChmbik7XG5cbiAgICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogU2V0cyB1cCBhIG1pZGRsZXdhcmUgZnVuY3Rpb24gdGhhdCB3aWxsIHJ1biAqYWZ0ZXIqIHRoZVxuICogcmVzb3VyY2UgaXMgbG9hZGVkLlxuICpcbiAqIEBhbGlhcyB1c2VcbiAqIEBwYXJhbSBtaWRkbGV3YXJlIHtmdW5jdGlvbn0gVGhlIG1pZGRsZXdhcmUgZnVuY3Rpb24gdG8gcmVnaXN0ZXIuXG4gKiBAcmV0dXJuIHtMb2FkZXJ9XG4gKi9cbkxvYWRlci5wcm90b3R5cGUuYWZ0ZXIgPSBMb2FkZXIucHJvdG90eXBlLnVzZSA9IGZ1bmN0aW9uIChmbikge1xuICAgIHRoaXMuX2FmdGVyTWlkZGxld2FyZS5wdXNoKGZuKTtcblxuICAgIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBSZXNldHMgdGhlIHF1ZXVlIG9mIHRoZSBsb2FkZXIgdG8gcHJlcGFyZSBmb3IgYSBuZXcgbG9hZC5cbiAqXG4gKiBAcmV0dXJuIHtMb2FkZXJ9XG4gKi9cbkxvYWRlci5wcm90b3R5cGUucmVzZXQgPSBmdW5jdGlvbiAoKSB7XG4gICAgLy8gdGhpcy5iYXNlVXJsID0gYmFzZVVybCB8fCAnJztcblxuICAgIHRoaXMucHJvZ3Jlc3MgPSAwO1xuXG4gICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XG5cbiAgICB0aGlzLl9wcm9ncmVzc0NodW5rID0gMDtcblxuICAgIC8vIHRoaXMuX2JlZm9yZU1pZGRsZXdhcmUubGVuZ3RoID0gMDtcbiAgICAvLyB0aGlzLl9hZnRlck1pZGRsZXdhcmUubGVuZ3RoID0gMDtcblxuICAgIHRoaXMuX2J1ZmZlci5sZW5ndGggPSAwO1xuXG4gICAgdGhpcy5fbnVtVG9Mb2FkID0gMDtcblxuICAgIHRoaXMuX3F1ZXVlLmtpbGwoKTtcbiAgICB0aGlzLl9xdWV1ZS5zdGFydGVkID0gZmFsc2U7XG5cbiAgICB0aGlzLnJlc291cmNlcyA9IHt9O1xufTtcblxuLyoqXG4gKiBTdGFydHMgbG9hZGluZyB0aGUgcXVldWVkIHJlc291cmNlcy5cbiAqXG4gKiBAZmlyZXMgc3RhcnRcbiAqIEBwYXJhbSBbY2FsbGJhY2tdIHtmdW5jdGlvbn0gT3B0aW9uYWwgY2FsbGJhY2sgdGhhdCB3aWxsIGJlIGJvdW5kIHRvIHRoZSBgY29tcGxldGVgIGV2ZW50LlxuICogQHJldHVybiB7TG9hZGVyfVxuICovXG5Mb2FkZXIucHJvdG90eXBlLmxvYWQgPSBmdW5jdGlvbiAoY2IpIHtcbiAgICAvLyByZWdpc3RlciBjb21wbGV0ZSBjYWxsYmFjayBpZiB0aGV5IHBhc3Mgb25lXG4gICAgaWYgKHR5cGVvZiBjYiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB0aGlzLm9uY2UoJ2NvbXBsZXRlJywgY2IpO1xuICAgIH1cblxuICAgIC8vIGlmIHRoZSBxdWV1ZSBoYXMgYWxyZWFkeSBzdGFydGVkIHdlIGFyZSBkb25lIGhlcmVcbiAgICBpZiAodGhpcy5fcXVldWUuc3RhcnRlZCkge1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICAvLyBub3RpZnkgb2Ygc3RhcnRcbiAgICB0aGlzLmVtaXQoJ3N0YXJ0JywgdGhpcyk7XG5cbiAgICAvLyBzdGFydCB0aGUgaW50ZXJuYWwgcXVldWVcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuX2J1ZmZlci5sZW5ndGg7ICsraSkge1xuICAgICAgICB0aGlzLl9xdWV1ZS5wdXNoKHRoaXMuX2J1ZmZlcltpXSk7XG4gICAgfVxuXG4gICAgLy8gZW1wdHkgdGhlIGJ1ZmZlclxuICAgIHRoaXMuX2J1ZmZlci5sZW5ndGggPSAwO1xuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIExvYWRzIGEgc2luZ2xlIHJlc291cmNlLlxuICpcbiAqIEBmaXJlcyBwcm9ncmVzc1xuICogQHByaXZhdGVcbiAqL1xuTG9hZGVyLnByb3RvdHlwZS5fbG9hZFJlc291cmNlID0gZnVuY3Rpb24gKHJlc291cmNlLCBkZXF1ZXVlKSB7XG4gICAgdmFyIHNlbGYgPSB0aGlzO1xuXG4gICAgcmVzb3VyY2UuX2RlcXVldWUgPSBkZXF1ZXVlO1xuXG4gICAgdGhpcy5fcnVuTWlkZGxld2FyZShyZXNvdXJjZSwgdGhpcy5fYmVmb3JlTWlkZGxld2FyZSwgZnVuY3Rpb24gKCkge1xuICAgICAgICAvLyByZXNvdXJjZS5vbigncHJvZ3Jlc3MnLCBzZWxmLmVtaXQuYmluZChzZWxmLCAncHJvZ3Jlc3MnKSk7XG5cbiAgICAgICAgcmVzb3VyY2UubG9hZChzZWxmLl9ib3VuZE9uTG9hZCk7XG4gICAgfSk7XG59O1xuXG4vKipcbiAqIENhbGxlZCBvbmNlIGVhY2ggcmVzb3VyY2UgaGFzIGxvYWRlZC5cbiAqXG4gKiBAZmlyZXMgY29tcGxldGVcbiAqIEBwcml2YXRlXG4gKi9cbkxvYWRlci5wcm90b3R5cGUuX29uQ29tcGxldGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgdGhpcy5lbWl0KCdjb21wbGV0ZScsIHRoaXMsIHRoaXMucmVzb3VyY2VzKTtcbn07XG5cbi8qKlxuICogQ2FsbGVkIGVhY2ggdGltZSBhIHJlc291cmNlcyBpcyBsb2FkZWQuXG4gKlxuICogQGZpcmVzIHByb2dyZXNzXG4gKiBAZmlyZXMgZXJyb3JcbiAqIEBmaXJlcyBsb2FkXG4gKiBAcHJpdmF0ZVxuICovXG5Mb2FkZXIucHJvdG90eXBlLl9vbkxvYWQgPSBmdW5jdGlvbiAocmVzb3VyY2UpIHtcbiAgICB0aGlzLnByb2dyZXNzICs9IHRoaXMuX3Byb2dyZXNzQ2h1bms7XG5cbiAgICB0aGlzLmVtaXQoJ3Byb2dyZXNzJywgdGhpcywgcmVzb3VyY2UpO1xuXG4gICAgLy8gcnVuIG1pZGRsZXdhcmUsIHRoaXMgKm11c3QqIGhhcHBlbiBiZWZvcmUgZGVxdWV1ZSBzbyBzdWItYXNzZXRzIGdldCBhZGRlZCBwcm9wZXJseVxuICAgIHRoaXMuX3J1bk1pZGRsZXdhcmUocmVzb3VyY2UsIHRoaXMuX2FmdGVyTWlkZGxld2FyZSwgZnVuY3Rpb24gKCkge1xuICAgICAgICByZXNvdXJjZS5lbWl0KCdhZnRlck1pZGRsZXdhcmUnLCByZXNvdXJjZSk7XG5cbiAgICAgICAgdGhpcy5fbnVtVG9Mb2FkLS07XG5cbiAgICAgICAgLy8gZG8gY29tcGxldGlvbiBjaGVja1xuICAgICAgICBpZiAodGhpcy5fbnVtVG9Mb2FkID09PSAwKSB7XG4gICAgICAgICAgICB0aGlzLnByb2dyZXNzID0gMTAwO1xuICAgICAgICAgICAgdGhpcy5fb25Db21wbGV0ZSgpO1xuICAgICAgICB9XG4gICAgICAgIFxuICAgICAgICBpZiAocmVzb3VyY2UuZXJyb3IpIHtcbiAgICAgICAgICAgIHRoaXMuZW1pdCgnZXJyb3InLCByZXNvdXJjZS5lcnJvciwgdGhpcywgcmVzb3VyY2UpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5lbWl0KCdsb2FkJywgdGhpcywgcmVzb3VyY2UpO1xuICAgICAgICB9XG4gICAgfSk7XG4gICAgXG5cblxuICAgIC8vIHJlbW92ZSB0aGlzIHJlc291cmNlIGZyb20gdGhlIGFzeW5jIHF1ZXVlXG4gICAgcmVzb3VyY2UuX2RlcXVldWUoKTtcbn07XG5cbi8qKlxuICogUnVuIG1pZGRsZXdhcmUgZnVuY3Rpb25zIG9uIGEgcmVzb3VyY2UuXG4gKlxuICogQHByaXZhdGVcbiAqL1xuTG9hZGVyLnByb3RvdHlwZS5fcnVuTWlkZGxld2FyZSA9IGZ1bmN0aW9uIChyZXNvdXJjZSwgZm5zLCBjYikge1xuICAgIHZhciBzZWxmID0gdGhpcztcblxuICAgIGFzeW5jLmVhY2hTZXJpZXMoZm5zLCBmdW5jdGlvbiAoZm4sIG5leHQpIHtcbiAgICAgICAgZm4uY2FsbChzZWxmLCByZXNvdXJjZSwgbmV4dCk7XG4gICAgfSwgY2IuYmluZCh0aGlzLCByZXNvdXJjZSkpO1xufTtcblxuTG9hZGVyLkxPQURfVFlQRSA9IFJlc291cmNlLkxPQURfVFlQRTtcbkxvYWRlci5YSFJfUkVBRFlfU1RBVEUgPSBSZXNvdXJjZS5YSFJfUkVBRFlfU1RBVEU7XG5Mb2FkZXIuWEhSX1JFU1BPTlNFX1RZUEUgPSBSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRTtcbiIsInZhciBFdmVudEVtaXR0ZXIgPSByZXF1aXJlKCdldmVudGVtaXR0ZXIzJyksXG4gICAgX3VybCA9IHJlcXVpcmUoJ3VybCcpLFxuICAgIC8vIHRlc3RzIGlzIENPUlMgaXMgc3VwcG9ydGVkIGluIFhIUiwgaWYgbm90IHdlIG5lZWQgdG8gdXNlIFhEUlxuICAgIHVzZVhkciA9ICEhKHdpbmRvdy5YRG9tYWluUmVxdWVzdCAmJiAhKCd3aXRoQ3JlZGVudGlhbHMnIGluIChuZXcgWE1MSHR0cFJlcXVlc3QoKSkpKSxcbiAgICB0ZW1wQW5jaG9yID0gbnVsbDtcblxuLyoqXG4gKiBNYW5hZ2VzIHRoZSBzdGF0ZSBhbmQgbG9hZGluZyBvZiBhIHNpbmdsZSByZXNvdXJjZSByZXByZXNlbnRlZCBieVxuICogYSBzaW5nbGUgVVJMLlxuICpcbiAqIEBjbGFzc1xuICogQHBhcmFtIG5hbWUge3N0cmluZ30gVGhlIG5hbWUgb2YgdGhlIHJlc291cmNlIHRvIGxvYWQuXG4gKiBAcGFyYW0gdXJsIHtzdHJpbmd8c3RyaW5nW119IFRoZSB1cmwgZm9yIHRoaXMgcmVzb3VyY2UsIGZvciBhdWRpby92aWRlbyBsb2FkcyB5b3UgY2FuIHBhc3MgYW4gYXJyYXkgb2Ygc291cmNlcy5cbiAqIEBwYXJhbSBbb3B0aW9uc10ge29iamVjdH0gVGhlIG9wdGlvbnMgZm9yIHRoZSBsb2FkLlxuICogQHBhcmFtIFtvcHRpb25zLmNyb3NzT3JpZ2luXSB7c3RyaW5nfGJvb2xlYW59IElzIHRoaXMgcmVxdWVzdCBjcm9zcy1vcmlnaW4/IERlZmF1bHQgaXMgdG8gZGV0ZXJtaW5lIGF1dG9tYXRpY2FsbHkuXG4gKiBAcGFyYW0gW29wdGlvbnMubG9hZFR5cGU9UmVzb3VyY2UuTE9BRF9UWVBFLlhIUl0ge1Jlc291cmNlLkxPQURfVFlQRX0gSG93IHNob3VsZCB0aGlzIHJlc291cmNlIGJlIGxvYWRlZD9cbiAqIEBwYXJhbSBbb3B0aW9ucy54aHJUeXBlPVJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkRFRkFVTFRdIHtSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRX0gSG93IHNob3VsZCB0aGUgZGF0YSBiZWluZ1xuICogICAgICBsb2FkZWQgYmUgaW50ZXJwcmV0ZWQgd2hlbiB1c2luZyBYSFI/XG4gKiBAcGFyYW0gW29wdGlvbnMubWV0YWRhdGFdIHtvYmplY3R9IEV4dHJhIGluZm8gZm9yIG1pZGRsZXdhcmUuXG4gKi9cbmZ1bmN0aW9uIFJlc291cmNlKG5hbWUsIHVybCwgb3B0aW9ucykge1xuICAgIEV2ZW50RW1pdHRlci5jYWxsKHRoaXMpO1xuXG4gICAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG5cbiAgICBpZiAodHlwZW9mIG5hbWUgIT09ICdzdHJpbmcnIHx8IHR5cGVvZiB1cmwgIT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignQm90aCBuYW1lIGFuZCB1cmwgYXJlIHJlcXVpcmVkIGZvciBjb25zdHJ1Y3RpbmcgYSByZXNvdXJjZS4nKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGUgbmFtZSBvZiB0aGlzIHJlc291cmNlLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7c3RyaW5nfVxuICAgICAqIEByZWFkb25seVxuICAgICAqL1xuICAgIHRoaXMubmFtZSA9IG5hbWU7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgdXJsIHVzZWQgdG8gbG9hZCB0aGlzIHJlc291cmNlLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7c3RyaW5nfVxuICAgICAqIEByZWFkb25seVxuICAgICAqL1xuICAgIHRoaXMudXJsID0gdXJsO1xuXG4gICAgLyoqXG4gICAgICogU3RvcmVzIHdoZXRoZXIgb3Igbm90IHRoaXMgdXJsIGlzIGEgZGF0YSB1cmwuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqIEByZWFkb25seVxuICAgICAqL1xuICAgIHRoaXMuaXNEYXRhVXJsID0gdGhpcy51cmwuaW5kZXhPZignZGF0YTonKSA9PT0gMDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBkYXRhIHRoYXQgd2FzIGxvYWRlZCBieSB0aGUgcmVzb3VyY2UuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHthbnl9XG4gICAgICovXG4gICAgdGhpcy5kYXRhID0gbnVsbDtcblxuICAgIC8qKlxuICAgICAqIElzIHRoaXMgcmVxdWVzdCBjcm9zcy1vcmlnaW4/IElmIHVuc2V0LCBkZXRlcm1pbmVkIGF1dG9tYXRpY2FsbHkuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtzdHJpbmd9XG4gICAgICovXG4gICAgdGhpcy5jcm9zc09yaWdpbiA9IG9wdGlvbnMuY3Jvc3NPcmlnaW4gPT09IHRydWUgPyAnYW5vbnltb3VzJyA6IG9wdGlvbnMuY3Jvc3NPcmlnaW47XG5cbiAgICAvKipcbiAgICAgKiBUaGUgbWV0aG9kIG9mIGxvYWRpbmcgdG8gdXNlIGZvciB0aGlzIHJlc291cmNlLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UmVzb3VyY2UuTE9BRF9UWVBFfVxuICAgICAqL1xuICAgIHRoaXMubG9hZFR5cGUgPSBvcHRpb25zLmxvYWRUeXBlIHx8IHRoaXMuX2RldGVybWluZUxvYWRUeXBlKCk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgdHlwZSB1c2VkIHRvIGxvYWQgdGhlIHJlc291cmNlIHZpYSBYSFIuIElmIHVuc2V0LCBkZXRlcm1pbmVkIGF1dG9tYXRpY2FsbHkuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtzdHJpbmd9XG4gICAgICovXG4gICAgdGhpcy54aHJUeXBlID0gb3B0aW9ucy54aHJUeXBlO1xuXG4gICAgLyoqXG4gICAgICogRXh0cmEgaW5mbyBmb3IgbWlkZGxld2FyZVxuICAgICAqXG4gICAgICogQG1lbWJlciB7b2JqZWN0fVxuICAgICAqL1xuICAgIHRoaXMubWV0YWRhdGEgPSBvcHRpb25zLm1ldGFkYXRhIHx8IHt9O1xuXG4gICAgLyoqXG4gICAgICogVGhlIGVycm9yIHRoYXQgb2NjdXJyZWQgd2hpbGUgbG9hZGluZyAoaWYgYW55KS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge0Vycm9yfVxuICAgICAqIEByZWFkb25seVxuICAgICAqL1xuICAgIHRoaXMuZXJyb3IgPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogVGhlIFhIUiBvYmplY3QgdGhhdCB3YXMgdXNlZCB0byBsb2FkIHRoaXMgcmVzb3VyY2UuIFRoaXMgaXMgb25seSBzZXRcbiAgICAgKiB3aGVuIGBsb2FkVHlwZWAgaXMgYFJlc291cmNlLkxPQURfVFlQRS5YSFJgLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7WE1MSHR0cFJlcXVlc3R9XG4gICAgICovXG4gICAgdGhpcy54aHIgPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogRGVzY3JpYmVzIGlmIHRoaXMgcmVzb3VyY2Ugd2FzIGxvYWRlZCBhcyBqc29uLiBPbmx5IHZhbGlkIGFmdGVyIHRoZSByZXNvdXJjZVxuICAgICAqIGhhcyBjb21wbGV0ZWx5IGxvYWRlZC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICovXG4gICAgdGhpcy5pc0pzb24gPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIERlc2NyaWJlcyBpZiB0aGlzIHJlc291cmNlIHdhcyBsb2FkZWQgYXMgeG1sLiBPbmx5IHZhbGlkIGFmdGVyIHRoZSByZXNvdXJjZVxuICAgICAqIGhhcyBjb21wbGV0ZWx5IGxvYWRlZC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICovXG4gICAgdGhpcy5pc1htbCA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogRGVzY3JpYmVzIGlmIHRoaXMgcmVzb3VyY2Ugd2FzIGxvYWRlZCBhcyBhbiBpbWFnZSB0YWcuIE9ubHkgdmFsaWQgYWZ0ZXIgdGhlIHJlc291cmNlXG4gICAgICogaGFzIGNvbXBsZXRlbHkgbG9hZGVkLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKi9cbiAgICB0aGlzLmlzSW1hZ2UgPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIERlc2NyaWJlcyBpZiB0aGlzIHJlc291cmNlIHdhcyBsb2FkZWQgYXMgYW4gYXVkaW8gdGFnLiBPbmx5IHZhbGlkIGFmdGVyIHRoZSByZXNvdXJjZVxuICAgICAqIGhhcyBjb21wbGV0ZWx5IGxvYWRlZC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICovXG4gICAgdGhpcy5pc0F1ZGlvID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBEZXNjcmliZXMgaWYgdGhpcyByZXNvdXJjZSB3YXMgbG9hZGVkIGFzIGEgdmlkZW8gdGFnLiBPbmx5IHZhbGlkIGFmdGVyIHRoZSByZXNvdXJjZVxuICAgICAqIGhhcyBjb21wbGV0ZWx5IGxvYWRlZC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICovXG4gICAgdGhpcy5pc1ZpZGVvID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYGRlcXVldWVgIG1ldGhvZCB0aGF0IHdpbGwgYmUgdXNlZCBhIHN0b3JhZ2UgcGxhY2UgZm9yIHRoZSBhc3luYyBxdWV1ZSBkZXF1ZXVlIG1ldGhvZFxuICAgICAqIHVzZWQgcHJpdmF0ZWx5IGJ5IHRoZSBsb2FkZXIuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtmdW5jdGlvbn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX2RlcXVldWUgPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGBjb21wbGV0ZWAgZnVuY3Rpb24gYm91bmQgdG8gdGhpcyByZXNvdXJjZSdzIGNvbnRleHQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtmdW5jdGlvbn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX2JvdW5kQ29tcGxldGUgPSB0aGlzLmNvbXBsZXRlLmJpbmQodGhpcyk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYF9vbkVycm9yYCBmdW5jdGlvbiBib3VuZCB0byB0aGlzIHJlc291cmNlJ3MgY29udGV4dC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Z1bmN0aW9ufVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fYm91bmRPbkVycm9yID0gdGhpcy5fb25FcnJvci5iaW5kKHRoaXMpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGBfb25Qcm9ncmVzc2AgZnVuY3Rpb24gYm91bmQgdG8gdGhpcyByZXNvdXJjZSdzIGNvbnRleHQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtmdW5jdGlvbn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX2JvdW5kT25Qcm9ncmVzcyA9IHRoaXMuX29uUHJvZ3Jlc3MuYmluZCh0aGlzKTtcblxuICAgIC8vIHhociBjYWxsYmFja3NcbiAgICB0aGlzLl9ib3VuZFhock9uRXJyb3IgPSB0aGlzLl94aHJPbkVycm9yLmJpbmQodGhpcyk7XG4gICAgdGhpcy5fYm91bmRYaHJPbkFib3J0ID0gdGhpcy5feGhyT25BYm9ydC5iaW5kKHRoaXMpO1xuICAgIHRoaXMuX2JvdW5kWGhyT25Mb2FkID0gdGhpcy5feGhyT25Mb2FkLmJpbmQodGhpcyk7XG4gICAgdGhpcy5fYm91bmRYZHJPblRpbWVvdXQgPSB0aGlzLl94ZHJPblRpbWVvdXQuYmluZCh0aGlzKTtcblxuICAgIC8qKlxuICAgICAqIEVtaXR0ZWQgd2hlbiB0aGUgcmVzb3VyY2UgYmVpbmdzIHRvIGxvYWQuXG4gICAgICpcbiAgICAgKiBAZXZlbnQgc3RhcnRcbiAgICAgKiBAbWVtYmVyb2YgUmVzb3VyY2UjXG4gICAgICovXG5cbiAgICAvKipcbiAgICAgKiBFbWl0dGVkIGVhY2ggdGltZSBwcm9ncmVzcyBvZiB0aGlzIHJlc291cmNlIGxvYWQgdXBkYXRlcy5cbiAgICAgKiBOb3QgYWxsIHJlc291cmNlcyB0eXBlcyBhbmQgbG9hZGVyIHN5c3RlbXMgY2FuIHN1cHBvcnQgdGhpcyBldmVudFxuICAgICAqIHNvIHNvbWV0aW1lcyBpdCBtYXkgbm90IGJlIGF2YWlsYWJsZS4gSWYgdGhlIHJlc291cmNlXG4gICAgICogaXMgYmVpbmcgbG9hZGVkIG9uIGEgbW9kZXJuIGJyb3dzZXIsIHVzaW5nIFhIUiwgYW5kIHRoZSByZW1vdGUgc2VydmVyXG4gICAgICogcHJvcGVybHkgc2V0cyBDb250ZW50LUxlbmd0aCBoZWFkZXJzLCB0aGVuIHRoaXMgd2lsbCBiZSBhdmFpbGFibGUuXG4gICAgICpcbiAgICAgKiBAZXZlbnQgcHJvZ3Jlc3NcbiAgICAgKiBAbWVtYmVyb2YgUmVzb3VyY2UjXG4gICAgICovXG5cbiAgICAvKipcbiAgICAgKiBFbWl0dGVkIG9uY2UgdGhpcyByZXNvdXJjZSBoYXMgbG9hZGVkLCBpZiB0aGVyZSB3YXMgYW4gZXJyb3IgaXQgd2lsbFxuICAgICAqIGJlIGluIHRoZSBgZXJyb3JgIHByb3BlcnR5LlxuICAgICAqXG4gICAgICogQGV2ZW50IGNvbXBsZXRlXG4gICAgICogQG1lbWJlcm9mIFJlc291cmNlI1xuICAgICAqL1xufVxuXG5SZXNvdXJjZS5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKEV2ZW50RW1pdHRlci5wcm90b3R5cGUpO1xuUmVzb3VyY2UucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gUmVzb3VyY2U7XG5tb2R1bGUuZXhwb3J0cyA9IFJlc291cmNlO1xuXG4vKipcbiAqIE1hcmtzIHRoZSByZXNvdXJjZSBhcyBjb21wbGV0ZS5cbiAqXG4gKiBAZmlyZXMgY29tcGxldGVcbiAqL1xuUmVzb3VyY2UucHJvdG90eXBlLmNvbXBsZXRlID0gZnVuY3Rpb24gKCkge1xuICAgIC8vIFRPRE86IENsZWFuIHRoaXMgdXAgaW4gYSB3cmFwcGVyIG9yIHNvbWV0aGluZy4uLmdyb3NzLi4uLlxuICAgIGlmICh0aGlzLmRhdGEgJiYgdGhpcy5kYXRhLnJlbW92ZUV2ZW50TGlzdGVuZXIpIHtcbiAgICAgICAgdGhpcy5kYXRhLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2Vycm9yJywgdGhpcy5fYm91bmRPbkVycm9yKTtcbiAgICAgICAgdGhpcy5kYXRhLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2xvYWQnLCB0aGlzLl9ib3VuZENvbXBsZXRlKTtcbiAgICAgICAgdGhpcy5kYXRhLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3Byb2dyZXNzJywgdGhpcy5fYm91bmRPblByb2dyZXNzKTtcbiAgICAgICAgdGhpcy5kYXRhLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2NhbnBsYXl0aHJvdWdoJywgdGhpcy5fYm91bmRDb21wbGV0ZSk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMueGhyKSB7XG4gICAgICAgIGlmICh0aGlzLnhoci5yZW1vdmVFdmVudExpc3RlbmVyKSB7XG4gICAgICAgICAgICB0aGlzLnhoci5yZW1vdmVFdmVudExpc3RlbmVyKCdlcnJvcicsIHRoaXMuX2JvdW5kWGhyT25FcnJvcik7XG4gICAgICAgICAgICB0aGlzLnhoci5yZW1vdmVFdmVudExpc3RlbmVyKCdhYm9ydCcsIHRoaXMuX2JvdW5kWGhyT25BYm9ydCk7XG4gICAgICAgICAgICB0aGlzLnhoci5yZW1vdmVFdmVudExpc3RlbmVyKCdwcm9ncmVzcycsIHRoaXMuX2JvdW5kT25Qcm9ncmVzcyk7XG4gICAgICAgICAgICB0aGlzLnhoci5yZW1vdmVFdmVudExpc3RlbmVyKCdsb2FkJywgdGhpcy5fYm91bmRYaHJPbkxvYWQpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy54aHIub25lcnJvciA9IG51bGw7XG4gICAgICAgICAgICB0aGlzLnhoci5vbnRpbWVvdXQgPSBudWxsO1xuICAgICAgICAgICAgdGhpcy54aHIub25wcm9ncmVzcyA9IG51bGw7XG4gICAgICAgICAgICB0aGlzLnhoci5vbmxvYWQgPSBudWxsO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5lbWl0KCdjb21wbGV0ZScsIHRoaXMpO1xufTtcblxuLyoqXG4gKiBLaWNrcyBvZmYgbG9hZGluZyBvZiB0aGlzIHJlc291cmNlLlxuICpcbiAqIEBmaXJlcyBzdGFydFxuICogQHBhcmFtIFtjYWxsYmFja10ge2Z1bmN0aW9ufSBPcHRpb25hbCBjYWxsYmFjayB0byBjYWxsIG9uY2UgdGhlIHJlc291cmNlIGlzIGxvYWRlZC5cbiAqL1xuUmVzb3VyY2UucHJvdG90eXBlLmxvYWQgPSBmdW5jdGlvbiAoY2IpIHtcbiAgICB0aGlzLmVtaXQoJ3N0YXJ0JywgdGhpcyk7XG5cbiAgICAvLyBpZiBhIGNhbGxiYWNrIGlzIHNldCwgbGlzdGVuIGZvciBjb21wbGV0ZSBldmVudFxuICAgIGlmIChjYikge1xuICAgICAgICB0aGlzLm9uY2UoJ2NvbXBsZXRlJywgY2IpO1xuICAgIH1cblxuICAgIC8vIGlmIHVuc2V0LCBkZXRlcm1pbmUgdGhlIHZhbHVlXG4gICAgaWYgKHRoaXMuY3Jvc3NPcmlnaW4gPT09IGZhbHNlIHx8IHR5cGVvZiB0aGlzLmNyb3NzT3JpZ2luICE9PSAnc3RyaW5nJykge1xuICAgICAgICB0aGlzLmNyb3NzT3JpZ2luID0gdGhpcy5fZGV0ZXJtaW5lQ3Jvc3NPcmlnaW4odGhpcy51cmwpO1xuICAgIH1cblxuICAgIHN3aXRjaCh0aGlzLmxvYWRUeXBlKSB7XG4gICAgICAgIGNhc2UgUmVzb3VyY2UuTE9BRF9UWVBFLklNQUdFOlxuICAgICAgICAgICAgdGhpcy5fbG9hZEltYWdlKCk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIFJlc291cmNlLkxPQURfVFlQRS5BVURJTzpcbiAgICAgICAgICAgIHRoaXMuX2xvYWRFbGVtZW50KCdhdWRpbycpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSBSZXNvdXJjZS5MT0FEX1RZUEUuVklERU86XG4gICAgICAgICAgICB0aGlzLl9sb2FkRWxlbWVudCgndmlkZW8nKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgUmVzb3VyY2UuTE9BRF9UWVBFLlhIUjpcbiAgICAgICAgICAgIC8qIGZhbGxzIHRocm91Z2ggKi9cbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIGlmICh1c2VYZHIgJiYgdGhpcy5jcm9zc09yaWdpbikge1xuICAgICAgICAgICAgICAgIHRoaXMuX2xvYWRYZHIoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuX2xvYWRYaHIoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGJyZWFrO1xuICAgIH1cbn07XG5cbi8qKlxuICogTG9hZHMgdGhpcyByZXNvdXJjZXMgdXNpbmcgYW4gSW1hZ2Ugb2JqZWN0LlxuICpcbiAqIEBwcml2YXRlXG4gKi9cblJlc291cmNlLnByb3RvdHlwZS5fbG9hZEltYWdlID0gZnVuY3Rpb24gKCkge1xuICAgIHRoaXMuZGF0YSA9IG5ldyBJbWFnZSgpO1xuXG4gICAgaWYgKHRoaXMuY3Jvc3NPcmlnaW4pIHtcbiAgICAgICAgdGhpcy5kYXRhLmNyb3NzT3JpZ2luID0gdGhpcy5jcm9zc09yaWdpbjtcbiAgICB9XG5cbiAgICB0aGlzLmRhdGEuc3JjID0gdGhpcy51cmw7XG5cbiAgICB0aGlzLmlzSW1hZ2UgPSB0cnVlO1xuXG4gICAgdGhpcy5kYXRhLmFkZEV2ZW50TGlzdGVuZXIoJ2Vycm9yJywgdGhpcy5fYm91bmRPbkVycm9yLCBmYWxzZSk7XG4gICAgdGhpcy5kYXRhLmFkZEV2ZW50TGlzdGVuZXIoJ2xvYWQnLCB0aGlzLl9ib3VuZENvbXBsZXRlLCBmYWxzZSk7XG4gICAgdGhpcy5kYXRhLmFkZEV2ZW50TGlzdGVuZXIoJ3Byb2dyZXNzJywgdGhpcy5fYm91bmRPblByb2dyZXNzLCBmYWxzZSk7XG59O1xuXG4vKipcbiAqIExvYWRzIHRoaXMgcmVzb3VyY2VzIHVzaW5nIGFuIEhUTUxBdWRpb0VsZW1lbnQgb3IgSFRNTFZpZGVvRWxlbWVudC5cbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5SZXNvdXJjZS5wcm90b3R5cGUuX2xvYWRFbGVtZW50ID0gZnVuY3Rpb24gKHR5cGUpIHtcbiAgICBpZiAodHlwZSA9PT0gJ2F1ZGlvJyAmJiB0eXBlb2YgQXVkaW8gIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIHRoaXMuZGF0YSA9IG5ldyBBdWRpbygpO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgdGhpcy5kYXRhID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCh0eXBlKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5kYXRhID09PSBudWxsKSB7XG4gICAgICAgIHRoaXMuZXJyb3IgPSBuZXcgRXJyb3IoJ1Vuc3VwcG9ydGVkIGVsZW1lbnQgJyArIHR5cGUpO1xuICAgICAgICB0aGlzLmNvbXBsZXRlKCk7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBzdXBwb3J0IGZvciBDb2Nvb25KUyBDYW52YXMrIHJ1bnRpbWUsIGxhY2tzIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NvdXJjZScpXG4gICAgaWYgKG5hdmlnYXRvci5pc0NvY29vbkpTKSB7XG4gICAgICAgIHRoaXMuZGF0YS5zcmMgPSBBcnJheS5pc0FycmF5KHRoaXMudXJsKSA/IHRoaXMudXJsWzBdIDogdGhpcy51cmw7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSh0aGlzLnVybCkpIHtcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy51cmwubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmRhdGEuYXBwZW5kQ2hpbGQodGhpcy5fY3JlYXRlU291cmNlKHR5cGUsIHRoaXMudXJsW2ldKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmRhdGEuYXBwZW5kQ2hpbGQodGhpcy5fY3JlYXRlU291cmNlKHR5cGUsIHRoaXMudXJsKSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzWydpcycgKyB0eXBlWzBdLnRvVXBwZXJDYXNlKCkgKyB0eXBlLnN1YnN0cmluZygxKV0gPSB0cnVlO1xuXG4gICAgdGhpcy5kYXRhLmFkZEV2ZW50TGlzdGVuZXIoJ2Vycm9yJywgdGhpcy5fYm91bmRPbkVycm9yLCBmYWxzZSk7XG4gICAgdGhpcy5kYXRhLmFkZEV2ZW50TGlzdGVuZXIoJ2xvYWQnLCB0aGlzLl9ib3VuZENvbXBsZXRlLCBmYWxzZSk7XG4gICAgdGhpcy5kYXRhLmFkZEV2ZW50TGlzdGVuZXIoJ3Byb2dyZXNzJywgdGhpcy5fYm91bmRPblByb2dyZXNzLCBmYWxzZSk7XG4gICAgdGhpcy5kYXRhLmFkZEV2ZW50TGlzdGVuZXIoJ2NhbnBsYXl0aHJvdWdoJywgdGhpcy5fYm91bmRDb21wbGV0ZSwgZmFsc2UpO1xuXG4gICAgdGhpcy5kYXRhLmxvYWQoKTtcbn07XG5cbi8qKlxuICogTG9hZHMgdGhpcyByZXNvdXJjZXMgdXNpbmcgYW4gWE1MSHR0cFJlcXVlc3QuXG4gKlxuICogQHByaXZhdGVcbiAqL1xuUmVzb3VyY2UucHJvdG90eXBlLl9sb2FkWGhyID0gZnVuY3Rpb24gKCkge1xuICAgIC8vIGlmIHVuc2V0LCBkZXRlcm1pbmUgdGhlIHZhbHVlXG4gICAgaWYgKHR5cGVvZiB0aGlzLnhoclR5cGUgIT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHRoaXMueGhyVHlwZSA9IHRoaXMuX2RldGVybWluZVhoclR5cGUoKTtcbiAgICB9XG5cbiAgICB2YXIgeGhyID0gdGhpcy54aHIgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTtcblxuICAgIC8vIHNldCB0aGUgcmVxdWVzdCB0eXBlIGFuZCB1cmxcbiAgICB4aHIub3BlbignR0VUJywgdGhpcy51cmwsIHRydWUpO1xuXG4gICAgLy8gbG9hZCBqc29uIGFzIHRleHQgYW5kIHBhcnNlIGl0IG91cnNlbHZlcy4gV2UgZG8gdGhpcyBiZWNhdXNlIHNvbWUgYnJvd3NlcnNcbiAgICAvLyAqY291Z2gqIHNhZmFyaSAqY291Z2gqIGNhbid0IGRlYWwgd2l0aCBpdC5cbiAgICBpZiAodGhpcy54aHJUeXBlID09PSBSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRS5KU09OIHx8IHRoaXMueGhyVHlwZSA9PT0gUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuRE9DVU1FTlQpIHtcbiAgICAgICAgeGhyLnJlc3BvbnNlVHlwZSA9IFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLlRFWFQ7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICB4aHIucmVzcG9uc2VUeXBlID0gdGhpcy54aHJUeXBlO1xuICAgIH1cblxuICAgIHhoci5hZGRFdmVudExpc3RlbmVyKCdlcnJvcicsIHRoaXMuX2JvdW5kWGhyT25FcnJvciwgZmFsc2UpO1xuICAgIHhoci5hZGRFdmVudExpc3RlbmVyKCdhYm9ydCcsIHRoaXMuX2JvdW5kWGhyT25BYm9ydCwgZmFsc2UpO1xuICAgIHhoci5hZGRFdmVudExpc3RlbmVyKCdwcm9ncmVzcycsIHRoaXMuX2JvdW5kT25Qcm9ncmVzcywgZmFsc2UpO1xuICAgIHhoci5hZGRFdmVudExpc3RlbmVyKCdsb2FkJywgdGhpcy5fYm91bmRYaHJPbkxvYWQsIGZhbHNlKTtcblxuICAgIHhoci5zZW5kKCk7XG59O1xuXG4vKipcbiAqIExvYWRzIHRoaXMgcmVzb3VyY2VzIHVzaW5nIGFuIFhEb21haW5SZXF1ZXN0LiBUaGlzIGlzIGhlcmUgYmVjYXVzZSB3ZSBuZWVkIHRvIHN1cHBvcnQgSUU5IChncm9zcykuXG4gKlxuICogQHByaXZhdGVcbiAqL1xuUmVzb3VyY2UucHJvdG90eXBlLl9sb2FkWGRyID0gZnVuY3Rpb24gKCkge1xuICAgIC8vIGlmIHVuc2V0LCBkZXRlcm1pbmUgdGhlIHZhbHVlXG4gICAgaWYgKHR5cGVvZiB0aGlzLnhoclR5cGUgIT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHRoaXMueGhyVHlwZSA9IHRoaXMuX2RldGVybWluZVhoclR5cGUoKTtcbiAgICB9XG5cbiAgICB2YXIgeGRyID0gdGhpcy54aHIgPSBuZXcgWERvbWFpblJlcXVlc3QoKTtcblxuICAgIC8vIFhEb21haW5SZXF1ZXN0IGhhcyBhIGZldyBxdWlya3MuIE9jY2FzaW9uYWxseSBpdCB3aWxsIGFib3J0IHJlcXVlc3RzXG4gICAgLy8gQSB3YXkgdG8gYXZvaWQgdGhpcyBpcyB0byBtYWtlIHN1cmUgQUxMIGNhbGxiYWNrcyBhcmUgc2V0IGV2ZW4gaWYgbm90IHVzZWRcbiAgICAvLyBNb3JlIGluZm8gaGVyZTogaHR0cDovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy8xNTc4Njk2Ni94ZG9tYWlucmVxdWVzdC1hYm9ydHMtcG9zdC1vbi1pZS05XG4gICAgeGRyLnRpbWVvdXQgPSA1MDAwO1xuXG4gICAgeGRyLm9uZXJyb3IgPSB0aGlzLl9ib3VuZFhock9uRXJyb3I7XG4gICAgeGRyLm9udGltZW91dCA9IHRoaXMuX2JvdW5kWGRyT25UaW1lb3V0O1xuICAgIHhkci5vbnByb2dyZXNzID0gdGhpcy5fYm91bmRPblByb2dyZXNzO1xuICAgIHhkci5vbmxvYWQgPSB0aGlzLl9ib3VuZFhock9uTG9hZDtcblxuICAgIHhkci5vcGVuKCdHRVQnLCB0aGlzLnVybCwgdHJ1ZSk7XG5cbiAgICAvLyAgTm90ZTogVGhlIHhkci5zZW5kKCkgY2FsbCBpcyB3cmFwcGVkIGluIGEgdGltZW91dCB0byBwcmV2ZW50IGFuIGlzc3VlIHdpdGggdGhlIGludGVyZmFjZSB3aGVyZSBzb21lIHJlcXVlc3RzIGFyZSBsb3N0XG4gICAgLy8gIGlmIG11bHRpcGxlIFhEb21haW5SZXF1ZXN0cyBhcmUgYmVpbmcgc2VudCBhdCB0aGUgc2FtZSB0aW1lLlxuICAgIC8vIFNvbWUgaW5mbyBoZXJlOiBodHRwczovL2dpdGh1Yi5jb20vcGhvdG9uc3Rvcm0vcGhhc2VyL2lzc3Vlcy8xMjQ4XG4gICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICAgIHhkci5zZW5kKCk7XG4gICAgfSwgMCk7XG59O1xuXG4vKipcbiAqIENyZWF0ZXMgYSBzb3VyY2UgdXNlZCBpbiBsb2FkaW5nIHZpYSBhbiBlbGVtZW50LlxuICpcbiAqIEBwYXJhbSB0eXBlIHtzdHJpbmd9IFRoZSBlbGVtZW50IHR5cGUgKHZpZGVvIG9yIGF1ZGlvKS5cbiAqIEBwYXJhbSB1cmwge3N0cmluZ30gVGhlIHNvdXJjZSBVUkwgdG8gbG9hZCBmcm9tLlxuICogQHBhcmFtIFttaW1lXSB7c3RyaW5nfSBUaGUgbWltZSB0eXBlIG9mIHRoZSB2aWRlb1xuICogQHByaXZhdGVcbiAqL1xuUmVzb3VyY2UucHJvdG90eXBlLl9jcmVhdGVTb3VyY2UgPSBmdW5jdGlvbiAodHlwZSwgdXJsLCBtaW1lKSB7XG4gICAgaWYgKCFtaW1lKSB7XG4gICAgICAgIG1pbWUgPSB0eXBlICsgJy8nICsgdXJsLnN1YnN0cih1cmwubGFzdEluZGV4T2YoJy4nKSArIDEpO1xuICAgIH1cblxuICAgIHZhciBzb3VyY2UgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzb3VyY2UnKTtcblxuICAgIHNvdXJjZS5zcmMgPSB1cmw7XG4gICAgc291cmNlLnR5cGUgPSBtaW1lO1xuXG4gICAgcmV0dXJuIHNvdXJjZTtcbn07XG5cbi8qKlxuICogQ2FsbGVkIGlmIGEgbG9hZCBlcnJvcnMgb3V0LlxuICpcbiAqIEBwYXJhbSBldmVudCB7RXZlbnR9IFRoZSBlcnJvciBldmVudCBmcm9tIHRoZSBlbGVtZW50IHRoYXQgZW1pdHMgaXQuXG4gKiBAcHJpdmF0ZVxuICovXG5SZXNvdXJjZS5wcm90b3R5cGUuX29uRXJyb3IgPSBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICB0aGlzLmVycm9yID0gbmV3IEVycm9yKCdGYWlsZWQgdG8gbG9hZCBlbGVtZW50IHVzaW5nICcgKyBldmVudC50YXJnZXQubm9kZU5hbWUpO1xuICAgIHRoaXMuY29tcGxldGUoKTtcbn07XG5cbi8qKlxuICogQ2FsbGVkIGlmIGEgbG9hZCBwcm9ncmVzcyBldmVudCBmaXJlcyBmb3IgeGhyL3hkci5cbiAqXG4gKiBAZmlyZXMgcHJvZ3Jlc3NcbiAqIEBwYXJhbSBldmVudCB7WE1MSHR0cFJlcXVlc3RQcm9ncmVzc0V2ZW50fEV2ZW50fVxuICogQHByaXZhdGVcbiAqL1xuUmVzb3VyY2UucHJvdG90eXBlLl9vblByb2dyZXNzID0gIGZ1bmN0aW9uIChldmVudCkge1xuICAgIGlmIChldmVudCAmJiBldmVudC5sZW5ndGhDb21wdXRhYmxlKSB7XG4gICAgICAgIHRoaXMuZW1pdCgncHJvZ3Jlc3MnLCB0aGlzLCBldmVudC5sb2FkZWQgLyBldmVudC50b3RhbCk7XG4gICAgfVxufTtcblxuLyoqXG4gKiBDYWxsZWQgaWYgYW4gZXJyb3IgZXZlbnQgZmlyZXMgZm9yIHhoci94ZHIuXG4gKlxuICogQHBhcmFtIGV2ZW50IHtYTUxIdHRwUmVxdWVzdEVycm9yRXZlbnR8RXZlbnR9XG4gKiBAcHJpdmF0ZVxuICovXG5SZXNvdXJjZS5wcm90b3R5cGUuX3hock9uRXJyb3IgPSBmdW5jdGlvbiAoKSB7XG4gICAgdGhpcy5lcnJvciA9IG5ldyBFcnJvcihcbiAgICAgICAgcmVxVHlwZSh0aGlzLnhocikgKyAnIFJlcXVlc3QgZmFpbGVkLiAnICtcbiAgICAgICAgJ1N0YXR1czogJyArIHRoaXMueGhyLnN0YXR1cyArICcsIHRleHQ6IFwiJyArIHRoaXMueGhyLnN0YXR1c1RleHQgKyAnXCInXG4gICAgKTtcblxuICAgIHRoaXMuY29tcGxldGUoKTtcbn07XG5cbi8qKlxuICogQ2FsbGVkIGlmIGFuIGFib3J0IGV2ZW50IGZpcmVzIGZvciB4aHIuXG4gKlxuICogQHBhcmFtIGV2ZW50IHtYTUxIdHRwUmVxdWVzdEFib3J0RXZlbnR9XG4gKiBAcHJpdmF0ZVxuICovXG5SZXNvdXJjZS5wcm90b3R5cGUuX3hock9uQWJvcnQgPSBmdW5jdGlvbiAoKSB7XG4gICAgdGhpcy5lcnJvciA9IG5ldyBFcnJvcihyZXFUeXBlKHRoaXMueGhyKSArICcgUmVxdWVzdCB3YXMgYWJvcnRlZCBieSB0aGUgdXNlci4nKTtcbiAgICB0aGlzLmNvbXBsZXRlKCk7XG59O1xuXG4vKipcbiAqIENhbGxlZCBpZiBhIHRpbWVvdXQgZXZlbnQgZmlyZXMgZm9yIHhkci5cbiAqXG4gKiBAcGFyYW0gZXZlbnQge0V2ZW50fVxuICogQHByaXZhdGVcbiAqL1xuUmVzb3VyY2UucHJvdG90eXBlLl94ZHJPblRpbWVvdXQgPSBmdW5jdGlvbiAoKSB7XG4gICAgdGhpcy5lcnJvciA9IG5ldyBFcnJvcihyZXFUeXBlKHRoaXMueGhyKSArICcgUmVxdWVzdCB0aW1lZCBvdXQuJyk7XG4gICAgdGhpcy5jb21wbGV0ZSgpO1xufTtcblxuLyoqXG4gKiBDYWxsZWQgd2hlbiBkYXRhIHN1Y2Nlc3NmdWxseSBsb2FkcyBmcm9tIGFuIHhoci94ZHIgcmVxdWVzdC5cbiAqXG4gKiBAcGFyYW0gZXZlbnQge1hNTEh0dHBSZXF1ZXN0TG9hZEV2ZW50fEV2ZW50fVxuICogQHByaXZhdGVcbiAqL1xuUmVzb3VyY2UucHJvdG90eXBlLl94aHJPbkxvYWQgPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHhociA9IHRoaXMueGhyLFxuICAgICAgICBzdGF0dXMgPSB4aHIuc3RhdHVzICE9PSB1bmRlZmluZWQgPyB4aHIuc3RhdHVzIDogMjAwOyAvL1hEUiBoYXMgbm8gYC5zdGF0dXNgLCBhc3N1bWUgMjAwLlxuXG4gICAgLy8gc3RhdHVzIGNhbiBiZSAwIHdoZW4gdXNpbmcgdGhlIGZpbGU6Ly8gcHJvdG9jb2wsIGFsc28gY2hlY2sgaWYgYSByZXNwb25zZSB3YXMgZm91bmRcbiAgICBpZiAoc3RhdHVzID09PSAyMDAgfHwgc3RhdHVzID09PSAyMDQgfHwgKHN0YXR1cyA9PT0gMCAmJiB4aHIucmVzcG9uc2VUZXh0Lmxlbmd0aCA+IDApKSB7XG4gICAgICAgIC8vIGlmIHRleHQsIGp1c3QgcmV0dXJuIGl0XG4gICAgICAgIGlmICh0aGlzLnhoclR5cGUgPT09IFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLlRFWFQpIHtcbiAgICAgICAgICAgIHRoaXMuZGF0YSA9IHhoci5yZXNwb25zZVRleHQ7XG4gICAgICAgIH1cbiAgICAgICAgLy8gaWYganNvbiwgcGFyc2UgaW50byBqc29uIG9iamVjdFxuICAgICAgICBlbHNlIGlmICh0aGlzLnhoclR5cGUgPT09IFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkpTT04pIHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgdGhpcy5kYXRhID0gSlNPTi5wYXJzZSh4aHIucmVzcG9uc2VUZXh0KTtcbiAgICAgICAgICAgICAgICB0aGlzLmlzSnNvbiA9IHRydWU7XG4gICAgICAgICAgICB9IGNhdGNoKGUpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmVycm9yID0gbmV3IEVycm9yKCdFcnJvciB0cnlpbmcgdG8gcGFyc2UgbG9hZGVkIGpzb246JywgZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8gaWYgeG1sLCBwYXJzZSBpbnRvIGFuIHhtbCBkb2N1bWVudCBvciBkaXYgZWxlbWVudFxuICAgICAgICBlbHNlIGlmICh0aGlzLnhoclR5cGUgPT09IFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkRPQ1VNRU5UKSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGlmICh3aW5kb3cuRE9NUGFyc2VyKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBkb21wYXJzZXIgPSBuZXcgRE9NUGFyc2VyKCk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGF0YSA9IGRvbXBhcnNlci5wYXJzZUZyb21TdHJpbmcoeGhyLnJlc3BvbnNlVGV4dCwgJ3RleHQveG1sJyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB2YXIgZGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgICAgICAgICAgICAgIGRpdi5pbm5lckhUTUwgPSB4aHIucmVzcG9uc2VUZXh0O1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmRhdGEgPSBkaXY7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXMuaXNYbWwgPSB0cnVlO1xuICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgIHRoaXMuZXJyb3IgPSBuZXcgRXJyb3IoJ0Vycm9yIHRyeWluZyB0byBwYXJzZSBsb2FkZWQgeG1sOicsIGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIG90aGVyIHR5cGVzIGp1c3QgcmV0dXJuIHRoZSByZXNwb25zZVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuZGF0YSA9IHhoci5yZXNwb25zZSB8fCB4aHIucmVzcG9uc2VUZXh0O1xuICAgICAgICB9XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICB0aGlzLmVycm9yID0gbmV3IEVycm9yKCdbJyArIHhoci5zdGF0dXMgKyAnXScgKyB4aHIuc3RhdHVzVGV4dCArICc6JyArIHhoci5yZXNwb25zZVVSTCk7XG4gICAgfVxuXG4gICAgdGhpcy5jb21wbGV0ZSgpO1xufTtcblxuZnVuY3Rpb24gcmVxVHlwZSh4aHIpIHtcbiAgICByZXR1cm4geGhyLnRvU3RyaW5nKCkucmVwbGFjZSgnb2JqZWN0ICcsICcnKTtcbn1cblxuLyoqXG4gKiBTZXRzIHRoZSBgY3Jvc3NPcmlnaW5gIHByb3BlcnR5IGZvciB0aGlzIHJlc291cmNlIGJhc2VkIG9uIGlmIHRoZSB1cmxcbiAqIGZvciB0aGlzIHJlc291cmNlIGlzIGNyb3NzLW9yaWdpbi4gSWYgY3Jvc3NPcmlnaW4gd2FzIG1hbnVhbGx5IHNldCwgdGhpc1xuICogZnVuY3Rpb24gZG9lcyBub3RoaW5nLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0gdXJsIHtzdHJpbmd9IFRoZSB1cmwgdG8gdGVzdC5cbiAqIEBwYXJhbSBbbG9jYXRpb249d2luZG93LmxvY2F0aW9uXSB7b2JqZWN0fSBUaGUgbG9jYXRpb24gb2JqZWN0IHRvIHRlc3QgYWdhaW5zdC5cbiAqIEByZXR1cm4ge3N0cmluZ30gVGhlIGNyb3NzT3JpZ2luIHZhbHVlIHRvIHVzZSAob3IgZW1wdHkgc3RyaW5nIGZvciBub25lKS5cbiAqL1xuUmVzb3VyY2UucHJvdG90eXBlLl9kZXRlcm1pbmVDcm9zc09yaWdpbiA9IGZ1bmN0aW9uICh1cmwsIGxvYykge1xuICAgIC8vIGRhdGE6IGFuZCBqYXZhc2NyaXB0OiB1cmxzIGFyZSBjb25zaWRlcmVkIHNhbWUtb3JpZ2luXG4gICAgaWYgKHVybC5pbmRleE9mKCdkYXRhOicpID09PSAwKSB7XG4gICAgICAgIHJldHVybiAnJztcbiAgICB9XG5cbiAgICAvLyBkZWZhdWx0IGlzIHdpbmRvdy5sb2NhdGlvblxuICAgIGxvYyA9IGxvYyB8fCB3aW5kb3cubG9jYXRpb247XG5cbiAgICBpZiAoIXRlbXBBbmNob3IpIHtcbiAgICAgICAgdGVtcEFuY2hvciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2EnKTtcbiAgICB9XG5cbiAgICAvLyBsZXQgdGhlIGJyb3dzZXIgZGV0ZXJtaW5lIHRoZSBmdWxsIGhyZWYgZm9yIHRoZSB1cmwgb2YgdGhpcyByZXNvdXJjZSBhbmQgdGhlblxuICAgIC8vIHBhcnNlIHdpdGggdGhlIG5vZGUgdXJsIGxpYiwgd2UgY2FuJ3QgdXNlIHRoZSBwcm9wZXJ0aWVzIG9mIHRoZSBhbmNob3IgZWxlbWVudFxuICAgIC8vIGJlY2F1c2UgdGhleSBkb24ndCB3b3JrIGluIElFOSA6KFxuICAgIHRlbXBBbmNob3IuaHJlZiA9IHVybDtcbiAgICB1cmwgPSBfdXJsLnBhcnNlKHRlbXBBbmNob3IuaHJlZik7XG5cbiAgICB2YXIgc2FtZVBvcnQgPSAoIXVybC5wb3J0ICYmIGxvYy5wb3J0ID09PSAnJykgfHwgKHVybC5wb3J0ID09PSBsb2MucG9ydCk7XG5cbiAgICAvLyBpZiBjcm9zcyBvcmlnaW5cbiAgICBpZiAodXJsLmhvc3RuYW1lICE9PSBsb2MuaG9zdG5hbWUgfHwgIXNhbWVQb3J0IHx8IHVybC5wcm90b2NvbCAhPT0gbG9jLnByb3RvY29sKSB7XG4gICAgICAgIHJldHVybiAnYW5vbnltb3VzJztcbiAgICB9XG5cbiAgICByZXR1cm4gJyc7XG59O1xuXG4vKipcbiAqIERldGVybWluZXMgdGhlIHJlc3BvbnNlVHlwZSBvZiBhbiBYSFIgcmVxdWVzdCBiYXNlZCBvbiB0aGUgZXh0ZW5zaW9uIG9mIHRoZVxuICogcmVzb3VyY2UgYmVpbmcgbG9hZGVkLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcmV0dXJuIHtSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRX0gVGhlIHJlc3BvbnNlVHlwZSB0byB1c2UuXG4gKi9cblJlc291cmNlLnByb3RvdHlwZS5fZGV0ZXJtaW5lWGhyVHlwZSA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gUmVzb3VyY2UuX3hoclR5cGVNYXBbdGhpcy5fZ2V0RXh0ZW5zaW9uKCldIHx8IFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLlRFWFQ7XG59O1xuXG5SZXNvdXJjZS5wcm90b3R5cGUuX2RldGVybWluZUxvYWRUeXBlID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBSZXNvdXJjZS5fbG9hZFR5cGVNYXBbdGhpcy5fZ2V0RXh0ZW5zaW9uKCldIHx8IFJlc291cmNlLkxPQURfVFlQRS5YSFI7XG59O1xuXG5SZXNvdXJjZS5wcm90b3R5cGUuX2dldEV4dGVuc2lvbiA9IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgdXJsID0gdGhpcy51cmwsXG4gICAgICAgIGV4dDtcblxuICAgIGlmICh0aGlzLmlzRGF0YVVybCkge1xuICAgICAgICB2YXIgc2xhc2hJbmRleCA9IHVybC5pbmRleE9mKCcvJyk7XG4gICAgICAgIGV4dCA9IHVybC5zdWJzdHJpbmcoc2xhc2hJbmRleCArIDEsIHVybC5pbmRleE9mKCc7Jywgc2xhc2hJbmRleCkpO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgdmFyIHF1ZXJ5U3RhcnQgPSB1cmwuaW5kZXhPZignPycpO1xuICAgICAgICBpZiAocXVlcnlTdGFydCAhPT0gLTEpIHtcbiAgICAgICAgICAgIHVybCA9IHVybC5zdWJzdHJpbmcoMCwgcXVlcnlTdGFydCk7XG4gICAgICAgIH1cblxuICAgICAgICBleHQgPSB1cmwuc3Vic3RyaW5nKHVybC5sYXN0SW5kZXhPZignLicpICsgMSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGV4dDtcbn07XG5cbi8qKlxuICogRGV0ZXJtaW5lcyB0aGUgbWltZSB0eXBlIG9mIGFuIFhIUiByZXF1ZXN0IGJhc2VkIG9uIHRoZSByZXNwb25zZVR5cGUgb2ZcbiAqIHJlc291cmNlIGJlaW5nIGxvYWRlZC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHJldHVybiB7c3RyaW5nfSBUaGUgbWltZSB0eXBlIHRvIHVzZS5cbiAqL1xuUmVzb3VyY2UucHJvdG90eXBlLl9nZXRNaW1lRnJvbVhoclR5cGUgPSBmdW5jdGlvbiAodHlwZSkge1xuICAgIHN3aXRjaCh0eXBlKSB7XG4gICAgICAgIGNhc2UgUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuQlVGRkVSOlxuICAgICAgICAgICAgcmV0dXJuICdhcHBsaWNhdGlvbi9vY3RldC1iaW5hcnknO1xuXG4gICAgICAgIGNhc2UgUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuQkxPQjpcbiAgICAgICAgICAgIHJldHVybiAnYXBwbGljYXRpb24vYmxvYic7XG5cbiAgICAgICAgY2FzZSBSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRS5ET0NVTUVOVDpcbiAgICAgICAgICAgIHJldHVybiAnYXBwbGljYXRpb24veG1sJztcblxuICAgICAgICBjYXNlIFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkpTT046XG4gICAgICAgICAgICByZXR1cm4gJ2FwcGxpY2F0aW9uL2pzb24nO1xuXG4gICAgICAgIGNhc2UgUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuREVGQVVMVDpcbiAgICAgICAgY2FzZSBSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRS5URVhUOlxuICAgICAgICAgICAgLyogZmFsbHMgdGhyb3VnaCAqL1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgcmV0dXJuICd0ZXh0L3BsYWluJztcblxuICAgIH1cbn07XG5cbi8qKlxuICogVGhlIHR5cGVzIG9mIGxvYWRpbmcgYSByZXNvdXJjZSBjYW4gdXNlLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBjb25zdGFudFxuICogQHByb3BlcnR5IHtvYmplY3R9IExPQURfVFlQRVxuICogQHByb3BlcnR5IHtudW1iZXJ9IExPQURfVFlQRS5YSFIgLSBVc2VzIFhNTEh0dHBSZXF1ZXN0IHRvIGxvYWQgdGhlIHJlc291cmNlLlxuICogQHByb3BlcnR5IHtudW1iZXJ9IExPQURfVFlQRS5JTUFHRSAtIFVzZXMgYW4gYEltYWdlYCBvYmplY3QgdG8gbG9hZCB0aGUgcmVzb3VyY2UuXG4gKiBAcHJvcGVydHkge251bWJlcn0gTE9BRF9UWVBFLkFVRElPIC0gVXNlcyBhbiBgQXVkaW9gIG9iamVjdCB0byBsb2FkIHRoZSByZXNvdXJjZS5cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBMT0FEX1RZUEUuVklERU8gLSBVc2VzIGEgYFZpZGVvYCBvYmplY3QgdG8gbG9hZCB0aGUgcmVzb3VyY2UuXG4gKi9cblJlc291cmNlLkxPQURfVFlQRSA9IHtcbiAgICBYSFI6ICAgIDEsXG4gICAgSU1BR0U6ICAyLFxuICAgIEFVRElPOiAgMyxcbiAgICBWSURFTzogIDRcbn07XG5cbi8qKlxuICogVGhlIFhIUiByZWFkeSBzdGF0ZXMsIHVzZWQgaW50ZXJuYWxseS5cbiAqXG4gKiBAc3RhdGljXG4gKiBAY29uc3RhbnRcbiAqIEBwcm9wZXJ0eSB7b2JqZWN0fSBYSFJfUkVBRFlfU1RBVEVcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBYSFJfUkVBRFlfU1RBVEUuVU5TRU5UIC0gb3BlbigpaGFzIG5vdCBiZWVuIGNhbGxlZCB5ZXQuXG4gKiBAcHJvcGVydHkge251bWJlcn0gWEhSX1JFQURZX1NUQVRFLk9QRU5FRCAtIHNlbmQoKWhhcyBub3QgYmVlbiBjYWxsZWQgeWV0LlxuICogQHByb3BlcnR5IHtudW1iZXJ9IFhIUl9SRUFEWV9TVEFURS5IRUFERVJTX1JFQ0VJVkVEIC0gc2VuZCgpIGhhcyBiZWVuIGNhbGxlZCwgYW5kIGhlYWRlcnMgYW5kIHN0YXR1cyBhcmUgYXZhaWxhYmxlLlxuICogQHByb3BlcnR5IHtudW1iZXJ9IFhIUl9SRUFEWV9TVEFURS5MT0FESU5HIC0gRG93bmxvYWRpbmc7IHJlc3BvbnNlVGV4dCBob2xkcyBwYXJ0aWFsIGRhdGEuXG4gKiBAcHJvcGVydHkge251bWJlcn0gWEhSX1JFQURZX1NUQVRFLkRPTkUgLSBUaGUgb3BlcmF0aW9uIGlzIGNvbXBsZXRlLlxuICovXG5SZXNvdXJjZS5YSFJfUkVBRFlfU1RBVEUgPSB7XG4gICAgVU5TRU5UOiAwLFxuICAgIE9QRU5FRDogMSxcbiAgICBIRUFERVJTX1JFQ0VJVkVEOiAyLFxuICAgIExPQURJTkc6IDMsXG4gICAgRE9ORTogNFxufTtcblxuLyoqXG4gKiBUaGUgWEhSIHJlYWR5IHN0YXRlcywgdXNlZCBpbnRlcm5hbGx5LlxuICpcbiAqIEBzdGF0aWNcbiAqIEBjb25zdGFudFxuICogQHByb3BlcnR5IHtvYmplY3R9IFhIUl9SRVNQT05TRV9UWVBFXG4gKiBAcHJvcGVydHkge3N0cmluZ30gWEhSX1JFU1BPTlNFX1RZUEUuREVGQVVMVCAtIGRlZmF1bHRzIHRvIHRleHRcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBYSFJfUkVTUE9OU0VfVFlQRS5CVUZGRVIgLSBBcnJheUJ1ZmZlclxuICogQHByb3BlcnR5IHtzdHJpbmd9IFhIUl9SRVNQT05TRV9UWVBFLkJMT0IgLSBCbG9iXG4gKiBAcHJvcGVydHkge3N0cmluZ30gWEhSX1JFU1BPTlNFX1RZUEUuRE9DVU1FTlQgLSBEb2N1bWVudFxuICogQHByb3BlcnR5IHtzdHJpbmd9IFhIUl9SRVNQT05TRV9UWVBFLkpTT04gLSBPYmplY3RcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBYSFJfUkVTUE9OU0VfVFlQRS5URVhUIC0gU3RyaW5nXG4gKi9cblJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFID0ge1xuICAgIERFRkFVTFQ6ICAgICd0ZXh0JyxcbiAgICBCVUZGRVI6ICAgICAnYXJyYXlidWZmZXInLFxuICAgIEJMT0I6ICAgICAgICdibG9iJyxcbiAgICBET0NVTUVOVDogICAnZG9jdW1lbnQnLFxuICAgIEpTT046ICAgICAgICdqc29uJyxcbiAgICBURVhUOiAgICAgICAndGV4dCdcbn07XG5cblJlc291cmNlLl9sb2FkVHlwZU1hcCA9IHtcbiAgICAnZ2lmJzogICAgICBSZXNvdXJjZS5MT0FEX1RZUEUuSU1BR0UsXG4gICAgJ3BuZyc6ICAgICAgUmVzb3VyY2UuTE9BRF9UWVBFLklNQUdFLFxuICAgICdibXAnOiAgICAgIFJlc291cmNlLkxPQURfVFlQRS5JTUFHRSxcbiAgICAnanBnJzogICAgICBSZXNvdXJjZS5MT0FEX1RZUEUuSU1BR0UsXG4gICAgJ2pwZWcnOiAgICAgUmVzb3VyY2UuTE9BRF9UWVBFLklNQUdFLFxuICAgICd0aWYnOiAgICAgIFJlc291cmNlLkxPQURfVFlQRS5JTUFHRSxcbiAgICAndGlmZic6ICAgICBSZXNvdXJjZS5MT0FEX1RZUEUuSU1BR0UsXG4gICAgJ3dlYnAnOiAgICAgUmVzb3VyY2UuTE9BRF9UWVBFLklNQUdFLFxuICAgICd0Z2EnOiAgICAgIFJlc291cmNlLkxPQURfVFlQRS5JTUFHRVxufTtcblxuUmVzb3VyY2UuX3hoclR5cGVNYXAgPSB7XG4gICAgLy8geG1sXG4gICAgJ3hodG1sJzogICAgUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuRE9DVU1FTlQsXG4gICAgJ2h0bWwnOiAgICAgUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuRE9DVU1FTlQsXG4gICAgJ2h0bSc6ICAgICAgUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuRE9DVU1FTlQsXG4gICAgJ3htbCc6ICAgICAgUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuRE9DVU1FTlQsXG4gICAgJ3RteCc6ICAgICAgUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuRE9DVU1FTlQsXG4gICAgJ3RzeCc6ICAgICAgUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuRE9DVU1FTlQsXG4gICAgJ3N2Zyc6ICAgICAgUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuRE9DVU1FTlQsXG5cbiAgICAvLyBpbWFnZXNcbiAgICAnZ2lmJzogICAgICBSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRS5CTE9CLFxuICAgICdwbmcnOiAgICAgIFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkJMT0IsXG4gICAgJ2JtcCc6ICAgICAgUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuQkxPQixcbiAgICAnanBnJzogICAgICBSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRS5CTE9CLFxuICAgICdqcGVnJzogICAgIFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkJMT0IsXG4gICAgJ3RpZic6ICAgICAgUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuQkxPQixcbiAgICAndGlmZic6ICAgICBSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRS5CTE9CLFxuICAgICd3ZWJwJzogICAgIFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkJMT0IsXG4gICAgJ3RnYSc6ICAgICAgUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuQkxPQixcblxuICAgIC8vIGpzb25cbiAgICAnanNvbic6ICAgICBSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRS5KU09OLFxuXG4gICAgLy8gdGV4dFxuICAgICd0ZXh0JzogICAgIFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLlRFWFQsXG4gICAgJ3R4dCc6ICAgICAgUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuVEVYVFxufTtcblxuLyoqXG4gKiBTZXRzIHRoZSBsb2FkIHR5cGUgdG8gYmUgdXNlZCBmb3IgYSBzcGVjaWZpYyBleHRlbnNpb24uXG4gKlxuICogQHN0YXRpY1xuICogQHBhcmFtIGV4dG5hbWUge3N0cmluZ30gVGhlIGV4dGVuc2lvbiB0byBzZXQgdGhlIHR5cGUgZm9yLCBlLmcuIFwicG5nXCIgb3IgXCJmbnRcIlxuICogQHBhcmFtIGxvYWRUeXBlIHtSZXNvdXJjZS5MT0FEX1RZUEV9IFRoZSBsb2FkIHR5cGUgdG8gc2V0IGl0IHRvLlxuICovXG5SZXNvdXJjZS5zZXRFeHRlbnNpb25Mb2FkVHlwZSA9IGZ1bmN0aW9uIChleHRuYW1lLCBsb2FkVHlwZSkge1xuICAgIHNldEV4dE1hcChSZXNvdXJjZS5fbG9hZFR5cGVNYXAsIGV4dG5hbWUsIGxvYWRUeXBlKTtcbn07XG5cbi8qKlxuICogU2V0cyB0aGUgbG9hZCB0eXBlIHRvIGJlIHVzZWQgZm9yIGEgc3BlY2lmaWMgZXh0ZW5zaW9uLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBwYXJhbSBleHRuYW1lIHtzdHJpbmd9IFRoZSBleHRlbnNpb24gdG8gc2V0IHRoZSB0eXBlIGZvciwgZS5nLiBcInBuZ1wiIG9yIFwiZm50XCJcbiAqIEBwYXJhbSB4aHJUeXBlIHtSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRX0gVGhlIHhociB0eXBlIHRvIHNldCBpdCB0by5cbiAqL1xuUmVzb3VyY2Uuc2V0RXh0ZW5zaW9uWGhyVHlwZSA9IGZ1bmN0aW9uIChleHRuYW1lLCB4aHJUeXBlKSB7XG4gICAgc2V0RXh0TWFwKFJlc291cmNlLl94aHJUeXBlTWFwLCBleHRuYW1lLCB4aHJUeXBlKTtcbn07XG5cbmZ1bmN0aW9uIHNldEV4dE1hcChtYXAsIGV4dG5hbWUsIHZhbCkge1xuICAgIGlmIChleHRuYW1lICYmIGV4dG5hbWUuaW5kZXhPZignLicpID09PSAwKSB7XG4gICAgICAgIGV4dG5hbWUgPSBleHRuYW1lLnN1YnN0cmluZygxKTtcbiAgICB9XG5cbiAgICBpZiAoIWV4dG5hbWUpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIG1hcFtleHRuYW1lXSA9IHZhbDtcbn1cbiIsIm1vZHVsZS5leHBvcnRzID0ge1xuXG4gICAgLy8gcHJpdmF0ZSBwcm9wZXJ0eVxuICAgIF9rZXlTdHI6IFwiQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkrLz1cIixcblxuICAgIGVuY29kZUJpbmFyeTogZnVuY3Rpb24gKGlucHV0KSB7XG4gICAgICAgIHZhciBvdXRwdXQgPSBcIlwiO1xuICAgICAgICB2YXIgYnl0ZWJ1ZmZlcjtcbiAgICAgICAgdmFyIGVuY29kZWRDaGFySW5kZXhlcyA9IG5ldyBBcnJheSg0KTtcbiAgICAgICAgdmFyIGlueCA9IDA7XG4gICAgICAgIHZhciBqbnggPSAwO1xuICAgICAgICB2YXIgcGFkZGluZ0J5dGVzID0gMDtcblxuICAgICAgICB3aGlsZSAoaW54IDwgaW5wdXQubGVuZ3RoKSB7XG4gICAgICAgICAgICAvLyBGaWxsIGJ5dGUgYnVmZmVyIGFycmF5XG4gICAgICAgICAgICBieXRlYnVmZmVyID0gbmV3IEFycmF5KDMpO1xuICAgICAgICAgICAgZm9yIChqbnggPSAwOyBqbnggPCBieXRlYnVmZmVyLmxlbmd0aDsgam54KyspIHtcbiAgICAgICAgICAgICAgICBpZiAoaW54IDwgaW5wdXQubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIHRocm93IGF3YXkgaGlnaC1vcmRlciBieXRlLCBhcyBkb2N1bWVudGVkIGF0OlxuICAgICAgICAgICAgICAgICAgICAvLyBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9Fbi9Vc2luZ19YTUxIdHRwUmVxdWVzdCNIYW5kbGluZ19iaW5hcnlfZGF0YVxuICAgICAgICAgICAgICAgICAgICBieXRlYnVmZmVyW2pueF0gPSBpbnB1dC5jaGFyQ29kZUF0KGlueCsrKSAmIDB4ZmY7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBieXRlYnVmZmVyW2pueF0gPSAwO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gR2V0IGVhY2ggZW5jb2RlZCBjaGFyYWN0ZXIsIDYgYml0cyBhdCBhIHRpbWVcbiAgICAgICAgICAgIC8vIGluZGV4IDE6IGZpcnN0IDYgYml0c1xuICAgICAgICAgICAgZW5jb2RlZENoYXJJbmRleGVzWzBdID0gYnl0ZWJ1ZmZlclswXSA+PiAyO1xuICAgICAgICAgICAgLy8gaW5kZXggMjogc2Vjb25kIDYgYml0cyAoMiBsZWFzdCBzaWduaWZpY2FudCBiaXRzIGZyb20gaW5wdXQgYnl0ZSAxICsgNCBtb3N0IHNpZ25pZmljYW50IGJpdHMgZnJvbSBieXRlIDIpXG4gICAgICAgICAgICBlbmNvZGVkQ2hhckluZGV4ZXNbMV0gPSAoKGJ5dGVidWZmZXJbMF0gJiAweDMpIDw8IDQpIHwgKGJ5dGVidWZmZXJbMV0gPj4gNCk7XG4gICAgICAgICAgICAvLyBpbmRleCAzOiB0aGlyZCA2IGJpdHMgKDQgbGVhc3Qgc2lnbmlmaWNhbnQgYml0cyBmcm9tIGlucHV0IGJ5dGUgMiArIDIgbW9zdCBzaWduaWZpY2FudCBiaXRzIGZyb20gYnl0ZSAzKVxuICAgICAgICAgICAgZW5jb2RlZENoYXJJbmRleGVzWzJdID0gKChieXRlYnVmZmVyWzFdICYgMHgwZikgPDwgMikgfCAoYnl0ZWJ1ZmZlclsyXSA+PiA2KTtcbiAgICAgICAgICAgIC8vIGluZGV4IDM6IGZvcnRoIDYgYml0cyAoNiBsZWFzdCBzaWduaWZpY2FudCBiaXRzIGZyb20gaW5wdXQgYnl0ZSAzKVxuICAgICAgICAgICAgZW5jb2RlZENoYXJJbmRleGVzWzNdID0gYnl0ZWJ1ZmZlclsyXSAmIDB4M2Y7XG5cbiAgICAgICAgICAgIC8vIERldGVybWluZSB3aGV0aGVyIHBhZGRpbmcgaGFwcGVuZWQsIGFuZCBhZGp1c3QgYWNjb3JkaW5nbHlcbiAgICAgICAgICAgIHBhZGRpbmdCeXRlcyA9IGlueCAtIChpbnB1dC5sZW5ndGggLSAxKTtcbiAgICAgICAgICAgIHN3aXRjaCAocGFkZGluZ0J5dGVzKSB7XG4gICAgICAgICAgICAgICAgY2FzZSAyOlxuICAgICAgICAgICAgICAgICAgICAvLyBTZXQgbGFzdCAyIGNoYXJhY3RlcnMgdG8gcGFkZGluZyBjaGFyXG4gICAgICAgICAgICAgICAgICAgIGVuY29kZWRDaGFySW5kZXhlc1szXSA9IDY0O1xuICAgICAgICAgICAgICAgICAgICBlbmNvZGVkQ2hhckluZGV4ZXNbMl0gPSA2NDtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICAgICAgICAgIC8vIFNldCBsYXN0IGNoYXJhY3RlciB0byBwYWRkaW5nIGNoYXJcbiAgICAgICAgICAgICAgICAgICAgZW5jb2RlZENoYXJJbmRleGVzWzNdID0gNjQ7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7IC8vIE5vIHBhZGRpbmcgLSBwcm9jZWVkXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIE5vdyB3ZSB3aWxsIGdyYWIgZWFjaCBhcHByb3ByaWF0ZSBjaGFyYWN0ZXIgb3V0IG9mIG91ciBrZXlzdHJpbmdcbiAgICAgICAgICAgIC8vIGJhc2VkIG9uIG91ciBpbmRleCBhcnJheSBhbmQgYXBwZW5kIGl0IHRvIHRoZSBvdXRwdXQgc3RyaW5nXG4gICAgICAgICAgICBmb3IgKGpueCA9IDA7IGpueCA8IGVuY29kZWRDaGFySW5kZXhlcy5sZW5ndGg7IGpueCsrKSB7XG4gICAgICAgICAgICAgICAgb3V0cHV0ICs9IHRoaXMuX2tleVN0ci5jaGFyQXQoZW5jb2RlZENoYXJJbmRleGVzW2pueF0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBvdXRwdXQ7XG4gICAgfVxufTtcbiIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9Mb2FkZXInKTtcblxubW9kdWxlLmV4cG9ydHMuUmVzb3VyY2UgPSByZXF1aXJlKCcuL1Jlc291cmNlJyk7XG5cbm1vZHVsZS5leHBvcnRzLm1pZGRsZXdhcmUgPSB7XG4gICAgY2FjaGluZzoge1xuICAgICAgICBtZW1vcnk6IHJlcXVpcmUoJy4vbWlkZGxld2FyZXMvY2FjaGluZy9tZW1vcnknKVxuICAgIH0sXG4gICAgcGFyc2luZzoge1xuICAgICAgICBibG9iOiByZXF1aXJlKCcuL21pZGRsZXdhcmVzL3BhcnNpbmcvYmxvYicpXG4gICAgfVxufTtcbiIsIi8vIGEgc2ltcGxlIGluLW1lbW9yeSBjYWNoZSBmb3IgcmVzb3VyY2VzXG52YXIgY2FjaGUgPSB7fTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChyZXNvdXJjZSwgbmV4dCkge1xuICAgICAgICAvLyBpZiBjYWNoZWQsIHRoZW4gc2V0IGRhdGEgYW5kIGNvbXBsZXRlIHRoZSByZXNvdXJjZVxuICAgICAgICBpZiAoY2FjaGVbcmVzb3VyY2UudXJsXSkge1xuICAgICAgICAgICAgcmVzb3VyY2UuZGF0YSA9IGNhY2hlW3Jlc291cmNlLnVybF07XG4gICAgICAgICAgICByZXNvdXJjZS5jb21wbGV0ZSgpO1xuICAgICAgICB9XG4gICAgICAgIC8vIGlmIG5vdCBjYWNoZWQsIHdhaXQgZm9yIGNvbXBsZXRlIGFuZCBzdG9yZSBpdCBpbiB0aGUgY2FjaGUuXG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcmVzb3VyY2Uub25jZSgnY29tcGxldGUnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICBjYWNoZVt0aGlzLnVybF0gPSB0aGlzLmRhdGE7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBcbiAgICAgICAgbmV4dCgpO1xuICAgIH07XG59O1xuIiwidmFyIFJlc291cmNlID0gcmVxdWlyZSgnLi4vLi4vUmVzb3VyY2UnKSxcbiAgICBiNjQgPSByZXF1aXJlKCcuLi8uLi9iNjQnKTtcblxud2luZG93LlVSTCA9IHdpbmRvdy5VUkwgfHwgd2luZG93LndlYmtpdFVSTDtcblxuLy8gYSBtaWRkbGV3YXJlIGZvciB0cmFuc2Zvcm1pbmcgWEhSIGxvYWRlZCBCbG9icyBpbnRvIG1vcmUgdXNlZnVsIG9iamVjdHNcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChyZXNvdXJjZSwgbmV4dCkge1xuICAgICAgICBpZiAoIXJlc291cmNlLmRhdGEpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXh0KCk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBpZiB0aGlzIHdhcyBhbiBYSFIgbG9hZCBvZiBhIGJsb2JcbiAgICAgICAgaWYgKHJlc291cmNlLnhociAmJiByZXNvdXJjZS54aHJUeXBlID09PSBSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRS5CTE9CKSB7XG4gICAgICAgICAgICAvLyBpZiB0aGVyZSBpcyBubyBibG9iIHN1cHBvcnQgd2UgcHJvYmFibHkgZ290IGEgYmluYXJ5IHN0cmluZyBiYWNrXG4gICAgICAgICAgICBpZiAoIXdpbmRvdy5CbG9iIHx8IHR5cGVvZiByZXNvdXJjZS5kYXRhID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgICAgIHZhciB0eXBlID0gcmVzb3VyY2UueGhyLmdldFJlc3BvbnNlSGVhZGVyKCdjb250ZW50LXR5cGUnKTtcblxuICAgICAgICAgICAgICAgIC8vIHRoaXMgaXMgYW4gaW1hZ2UsIGNvbnZlcnQgdGhlIGJpbmFyeSBzdHJpbmcgaW50byBhIGRhdGEgdXJsXG4gICAgICAgICAgICAgICAgaWYgKHR5cGUgJiYgdHlwZS5pbmRleE9mKCdpbWFnZScpID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc291cmNlLmRhdGEgPSBuZXcgSW1hZ2UoKTtcbiAgICAgICAgICAgICAgICAgICAgcmVzb3VyY2UuZGF0YS5zcmMgPSAnZGF0YTonICsgdHlwZSArICc7YmFzZTY0LCcgKyBiNjQuZW5jb2RlQmluYXJ5KHJlc291cmNlLnhoci5yZXNwb25zZVRleHQpO1xuXG4gICAgICAgICAgICAgICAgICAgIHJlc291cmNlLmlzSW1hZ2UgPSB0cnVlO1xuXG4gICAgICAgICAgICAgICAgICAgIC8vIHdhaXQgdW50aWwgdGhlIGltYWdlIGxvYWRzIGFuZCB0aGVuIGNhbGxiYWNrXG4gICAgICAgICAgICAgICAgICAgIHJlc291cmNlLmRhdGEub25sb2FkID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVzb3VyY2UuZGF0YS5vbmxvYWQgPSBudWxsO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBuZXh0KCk7XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gaWYgY29udGVudCB0eXBlIHNheXMgdGhpcyBpcyBhbiBpbWFnZSwgdGhlbiB3ZSBzaG91bGQgdHJhbnNmb3JtIHRoZSBibG9iIGludG8gYW4gSW1hZ2Ugb2JqZWN0XG4gICAgICAgICAgICBlbHNlIGlmIChyZXNvdXJjZS5kYXRhLnR5cGUuaW5kZXhPZignaW1hZ2UnKSA9PT0gMCkge1xuICAgICAgICAgICAgICAgIHZhciBzcmMgPSBVUkwuY3JlYXRlT2JqZWN0VVJMKHJlc291cmNlLmRhdGEpO1xuXG4gICAgICAgICAgICAgICAgcmVzb3VyY2UuYmxvYiA9IHJlc291cmNlLmRhdGE7XG4gICAgICAgICAgICAgICAgcmVzb3VyY2UuZGF0YSA9IG5ldyBJbWFnZSgpO1xuICAgICAgICAgICAgICAgIHJlc291cmNlLmRhdGEuc3JjID0gc3JjO1xuXG4gICAgICAgICAgICAgICAgcmVzb3VyY2UuaXNJbWFnZSA9IHRydWU7XG5cbiAgICAgICAgICAgICAgICAvLyBjbGVhbnVwIHRoZSBubyBsb25nZXIgdXNlZCBibG9iIGFmdGVyIHRoZSBpbWFnZSBsb2Fkc1xuICAgICAgICAgICAgICAgIHJlc291cmNlLmRhdGEub25sb2FkID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICBVUkwucmV2b2tlT2JqZWN0VVJMKHNyYyk7XG4gICAgICAgICAgICAgICAgICAgIHJlc291cmNlLmRhdGEub25sb2FkID0gbnVsbDtcblxuICAgICAgICAgICAgICAgICAgICBuZXh0KCk7XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIG5leHQoKTtcbiAgICAgICAgfVxuICAgIH07XG59O1xuIiwibW9kdWxlLmV4cG9ydHM9e1xuICBcIm5hbWVcIjogXCJwaXhpLmpzXCIsXG4gIFwidmVyc2lvblwiOiBcIjMuMC4xMC1kZXZcIixcbiAgXCJkZXNjcmlwdGlvblwiOiBcIlBpeGkuanMgaXMgYSBmYXN0IGxpZ2h0d2VpZ2h0IDJEIGxpYnJhcnkgdGhhdCB3b3JrcyBhY3Jvc3MgYWxsIGRldmljZXMuXCIsXG4gIFwiYXV0aG9yXCI6IFwiTWF0IEdyb3Zlc1wiLFxuICBcImNvbnRyaWJ1dG9yc1wiOiBbXG4gICAgXCJDaGFkIEVuZ2xlciA8Y2hhZEBwYW50aGVyZGV2LmNvbT5cIixcbiAgICBcIlJpY2hhcmQgRGF2ZXkgPHJkYXZleUBnbWFpbC5jb20+XCJcbiAgXSxcbiAgXCJtYWluXCI6IFwiLi9zcmMvaW5kZXguanNcIixcbiAgXCJob21lcGFnZVwiOiBcImh0dHA6Ly9nb29kYm95ZGlnaXRhbC5jb20vXCIsXG4gIFwiYnVnc1wiOiBcImh0dHBzOi8vZ2l0aHViLmNvbS9waXhpanMvcGl4aS5qcy9pc3N1ZXNcIixcbiAgXCJsaWNlbnNlXCI6IFwiTUlUXCIsXG4gIFwicmVwb3NpdG9yeVwiOiB7XG4gICAgXCJ0eXBlXCI6IFwiZ2l0XCIsXG4gICAgXCJ1cmxcIjogXCJodHRwczovL2dpdGh1Yi5jb20vcGl4aWpzL3BpeGkuanMuZ2l0XCJcbiAgfSxcbiAgXCJzY3JpcHRzXCI6IHtcbiAgICBcInN0YXJ0XCI6IFwiZ3VscCAmJiBndWxwIHdhdGNoXCIsXG4gICAgXCJ0ZXN0XCI6IFwiZ3VscCAmJiB0ZXN0ZW0gY2lcIixcbiAgICBcImJ1aWxkXCI6IFwiZ3VscFwiLFxuICAgIFwiZG9jc1wiOiBcImpzZG9jIC1jIC4vZ3VscC91dGlsL2pzZG9jLmNvbmYuanNvbiAtUiBSRUFETUUubWRcIlxuICB9LFxuICBcImZpbGVzXCI6IFtcbiAgICBcImJpbi9cIixcbiAgICBcInNyYy9cIixcbiAgICBcIkNPTlRSSUJVVElORy5tZFwiLFxuICAgIFwiTElDRU5TRVwiLFxuICAgIFwicGFja2FnZS5qc29uXCIsXG4gICAgXCJSRUFETUUubWRcIlxuICBdLFxuICBcImRlcGVuZGVuY2llc1wiOiB7XG4gICAgXCJhc3luY1wiOiBcIl4xLjUuMFwiLFxuICAgIFwiYnJmc1wiOiBcIl4xLjQuMVwiLFxuICAgIFwiZWFyY3V0XCI6IFwiXjIuMC43XCIsXG4gICAgXCJldmVudGVtaXR0ZXIzXCI6IFwiXjEuMS4xXCIsXG4gICAgXCJvYmplY3QtYXNzaWduXCI6IFwiXjQuMC4xXCIsXG4gICAgXCJwaXhpLWdsLWNvcmVcIjogXCJnaXQraHR0cHM6Ly9naXRodWIuY29tL0dvb2RCb3lEaWdpdGFsL3BpeGktZ2wtY29yZS5naXRcIixcbiAgICBcInJlc291cmNlLWxvYWRlclwiOiBcIl4xLjYuNFwiXG4gIH0sXG4gIFwiZGV2RGVwZW5kZW5jaWVzXCI6IHtcbiAgICBcImJyb3dzZXJpZnlcIjogXCJeMTEuMS4wXCIsXG4gICAgXCJjaGFpXCI6IFwiXjMuMi4wXCIsXG4gICAgXCJkZWxcIjogXCJeMi4wLjJcIixcbiAgICBcImd1bHBcIjogXCJeMy45LjBcIixcbiAgICBcImd1bHAtY2FjaGVkXCI6IFwiXjEuMS4wXCIsXG4gICAgXCJndWxwLWNvbmNhdFwiOiBcIl4yLjYuMFwiLFxuICAgIFwiZ3VscC1kZWJ1Z1wiOiBcIl4yLjEuMFwiLFxuICAgIFwiZ3VscC1oZWFkZXJcIjogXCJeMS43LjFcIixcbiAgICBcImd1bHAtanNoaW50XCI6IFwiXjEuMTEuMlwiLFxuICAgIFwiZ3VscC1taXJyb3JcIjogXCJeMC40LjBcIixcbiAgICBcImd1bHAtcGx1bWJlclwiOiBcIl4xLjAuMVwiLFxuICAgIFwiZ3VscC1yZW5hbWVcIjogXCJeMS4yLjJcIixcbiAgICBcImd1bHAtc291cmNlbWFwc1wiOiBcIl4xLjUuMlwiLFxuICAgIFwiZ3VscC11Z2xpZnlcIjogXCJeMS40LjFcIixcbiAgICBcImd1bHAtdXRpbFwiOiBcIl4zLjAuNlwiLFxuICAgIFwiamFndWFyanMtanNkb2NcIjogXCJnaXQraHR0cHM6Ly9naXRodWIuY29tL2Rhdmlkc2hpbWpzL2phZ3VhcmpzLWpzZG9jLmdpdFwiLFxuICAgIFwianNkb2NcIjogXCJeMy4zLjJcIixcbiAgICBcImpzaGludC1zdW1tYXJ5XCI6IFwiXjAuNC4wXCIsXG4gICAgXCJtaW5pbWlzdFwiOiBcIl4xLjIuMFwiLFxuICAgIFwibW9jaGFcIjogXCJeMi4zLjJcIixcbiAgICBcInJlcXVpcmUtZGlyXCI6IFwiXjAuMy4wXCIsXG4gICAgXCJydW4tc2VxdWVuY2VcIjogXCJeMS4xLjJcIixcbiAgICBcInRlc3RlbVwiOiBcIl4wLjkuNFwiLFxuICAgIFwidmlueWwtYnVmZmVyXCI6IFwiXjEuMC4wXCIsXG4gICAgXCJ2aW55bC1zb3VyY2Utc3RyZWFtXCI6IFwiXjEuMS4wXCIsXG4gICAgXCJ3YXRjaGlmeVwiOiBcIl4zLjQuMFwiXG4gIH0sXG4gIFwiYnJvd3NlcmlmeVwiOiB7XG4gICAgXCJ0cmFuc2Zvcm1cIjogW1xuICAgICAgXCJicmZzXCJcbiAgICBdXG4gIH1cbn1cbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vY29yZScpO1xuXG4vLyBhZGQgc29tZSBleHRyYSB2YXJpYWJsZXMgdG8gdGhlIGNvbnRhaW5lci4uXG5PYmplY3QuYXNzaWduKFxuICAgIGNvcmUuRGlzcGxheU9iamVjdC5wcm90b3R5cGUsXG4gICAgcmVxdWlyZSgnLi9hY2Nlc3NpYmxlVGFyZ2V0Jylcbik7XG5cblxuLyoqXG4gKiBUaGUgQWNjZXNzaWJpbGl0eSBtYW5hZ2VyIHJlYWNyZWF0ZXMgdGhlIGFiaWxpdHkgdG8gdGFiIGFuZCBhbmQgaGF2ZSBjb250ZW50IHJlYWQgYnkgc2NyZWVuIHJlYWRlcnMuIFRoaXMgaXMgdmVyeSBpbXBvcnRhbnQgYXMgaXQgY2FuIHBvc3NpYmx5IGhlbHAgcGVvcGxlIHdpdGggZGlzYWJpbGl0aWVzIGFjY2VzcyBwaXhpIGNvbnRlbnQuXG4gKiBNdWNoIGxpa2UgaW50ZXJhY3Rpb24gYW55IERpc3BsYXlPYmplY3QgY2FuIGJlIG1hZGUgYWNjZXNzaWJsZS4gVGhpcyBtYW5hZ2VyIHdpbGwgbWFwIHRoZSBldmVudHMgYXMgaWYgdGhlIG1vdXNlIHdhcyBiZWluZyB1c2VkLCBtaW5pbWl6aW5nIHRoZSBlZmZlcm90IHJlcXVpcmVkIHRvIGltcGxlbWVudC5cbiAqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuQ2FudmFzUmVuZGVyZXJ8UElYSS5XZWJHTFJlbmRlcmVyfSBBIHJlZmVyZW5jZSB0byB0aGUgY3VycmVudCByZW5kZXJlclxuICovXG5mdW5jdGlvbiBBY2Nlc3NpYmlsaXR5TWFuYWdlcihyZW5kZXJlcilcbntcblx0Ly8gZmlyc3Qgd2UgY3JlYXRlIGEgZGl2IHRoYXQgd2lsbCBzaXQgb3ZlciB0aGUgcGl4aSBlbGVtZW50LiBUaGlzIGlzIHdoZXJlIHRoZSBkaXYgb3ZlcmxheXMgd2lsbCBnby5cbiAgICB2YXIgZGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgXG4gICAgZGl2LnN0eWxlLndpZHRoID0gMTAwICsgJ3B4JztcbiAgICBkaXYuc3R5bGUuaGVpZ2h0ID0gMTAwICsgJ3B4JztcbiAgICBkaXYuc3R5bGUucG9zaXRpb24gPSAnYWJzb2x1dGUnO1xuICAgIGRpdi5zdHlsZS50b3AgPSAwO1xuICAgIGRpdi5zdHlsZS5sZWZ0ID0gMDtcbiAgIC8vXG4gICAgZGl2LnN0eWxlLnpJbmRleCA9IDI7XG4gICBcdFxuICAgXHQvKipcbiAgIFx0ICogVGhpcyBpcyB0aGUgZG9tIGVsZW1lbnQgdGhhdCB3aWxsIHNpdCBvdmVyIHRoZSBwaXhpIGVsZW1lbnQuIFRoaXMgaXMgd2hlcmUgdGhlIGRpdiBvdmVybGF5cyB3aWxsIGdvLlxuICAgXHQgKiBcbiAgIFx0ICogQHR5cGUge0hUTUxFbGVtZW50fVxuICAgXHQgKiBAcHJpdmF0ZVxuICAgXHQgKi9cbiAgIFx0dGhpcy5kaXYgPSBkaXY7XG5cbiAgIFx0LyoqXG4gICBcdCAqIEEgc2ltcGxlIHBvb2wgZm9yIHN0b3JpbmcgZGl2cy5cbiAgIFx0ICogXG4gICBcdCAqIEB0eXBlIHtBcnJheX1cbiAgIFx0ICogQHByaXZhdGVcbiAgIFx0ICovXG4gXHR0aGlzLnBvb2wgPSBbXTtcblxuIFx0LyoqXG4gXHQgKiBUaGlzIGlzIGEgdGljayB1c2VkIHRvIGNoZWNrIGlmIGFuIG9iamVjdCBpcyBubyBsb25nZXIgYmVpbmcgcmVuZGVyZWQuXG4gXHQgKiBcbiBcdCAqIEB0eXBlIHtOdW1iZXJ9XG4gXHQgKiBAcHJpdmF0ZVxuIFx0ICovXG4gICBcdHRoaXMucmVuZGVySWQgPSAwO1xuXG4gICBcdC8qKlxuICAgXHQgKiBTZXR0aW5nIHRoaXMgdG8gdHJ1ZSB3aWxsIHZpc3VhbGx5IHNob3cgdGhlIGRpdnNcbiAgIFx0ICogXG4gICBcdCAqIEB0eXBlIHtCb29sZWFufVxuICAgXHQgKi9cbiAgIFx0dGhpcy5kZWJ1ZyA9IGZhbHNlO1xuXG4gIFx0LyoqXG4gICAgICogVGhlIHJlbmRlcmVyIHRoaXMgYWNjZXNzaWJpbGl0eSBtYW5hZ2VyIHdvcmtzIGZvci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuU3lzdGVtUmVuZGVyZXJ9XG4gICAgICovXG4gICBcdHRoaXMucmVuZGVyZXIgPSByZW5kZXJlcjtcblxuICAgXHQvKipcbiAgICAgKiBUaGUgYXJyYXkgb2YgY3VycmVudGx5IGFjdGl2ZSBhY2Nlc3NpYmxlIGl0ZW1zLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7QXJyYXl9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgIFx0dGhpcy5jaGlsZHJlbiA9IFtdO1xuICAgXHRcbiAgIFx0LyoqXG4gICAgICogcHJlIGJpbmQgdGhlIGZ1bmN0aW9ucy4uXG4gICAgICovXG4gICBcdHRoaXMuX29uS2V5RG93biA9IHRoaXMuX29uS2V5RG93bi5iaW5kKHRoaXMpO1xuICAgXHR0aGlzLl9vbk1vdXNlTW92ZSA9IHRoaXMuX29uTW91c2VNb3ZlLmJpbmQodGhpcyk7XG4gICBcdFxuICAgXHQvKipcbiAgICAgKiBzdG9yZXMgdGhlIHN0YXRlIG9mIHRoZSBtYW5hZ2VyLiBJZiB0aGVyZSBhcmUgbm8gYWNjZXNzaWJsZSBvYmplY3RzIG9yIHRoZSBtb3VzZSBpcyBtb3ZpbmcgdGhlIHdpbGwgYmUgZmFsc2UuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtBcnJheX1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgXHR0aGlzLmlzQWN0aXZlID0gZmFsc2U7XG5cblxuICAgXHQvLyBsZXQgbGlzdGVuIGZvciB0YWIuLiBvbmNlIHByZXNzZWQgd2UgY2FuIGZpcmUgdXAgYW5kIHNob3cgdGhlIGFjY2Vzc2liaWxpdHkgbGF5ZXJcbiAgIFx0d2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLCB0aGlzLl9vbktleURvd24sIGZhbHNlKTtcbn1cblxuXG5BY2Nlc3NpYmlsaXR5TWFuYWdlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBBY2Nlc3NpYmlsaXR5TWFuYWdlcjtcbm1vZHVsZS5leHBvcnRzID0gQWNjZXNzaWJpbGl0eU1hbmFnZXI7XG5cbi8qKlxuICogQWN0aXZhdGluZyB3aWxsIGNhdXNlIHRoZSBBY2Nlc3NpYmlsaXR5IGxheWVyIHRvIGJlIHNob3duLiBUaGlzIGlzIGNhbGxlZCB3aGVuIGEgdXNlciBwcmVzZXMgdGhlIHRhYiBrZXlcbiAqIEBwcml2YXRlXG4gKi9cbkFjY2Vzc2liaWxpdHlNYW5hZ2VyLnByb3RvdHlwZS5hY3RpdmF0ZSA9IGZ1bmN0aW9uKClcbntcblx0aWYodGhpcy5pc0FjdGl2ZSlcblx0e1xuXHRcdHJldHVybjtcblx0fVxuXG5cdHRoaXMuaXNBY3RpdmUgPSB0cnVlO1xuXG5cdHdpbmRvdy5kb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdtb3VzZW1vdmUnLCB0aGlzLl9vbk1vdXNlTW92ZSwgdHJ1ZSk7XG5cdHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdrZXlkb3duJywgdGhpcy5fb25LZXlEb3duLCBmYWxzZSk7XG5cblx0dGhpcy5yZW5kZXJlci5vbigncG9zdHJlbmRlcicsIHRoaXMudXBkYXRlLCB0aGlzKTtcblxuXHR0aGlzLnJlbmRlcmVyLnZpZXcucGFyZW50Tm9kZS5hcHBlbmRDaGlsZCh0aGlzLmRpdik7XHRcbn07XG5cbi8qKlxuICogRGVhY3RpdmF0aW5nIHdpbGwgY2F1c2UgdGhlIEFjY2Vzc2liaWxpdHkgbGF5ZXIgdG8gYmUgaGlkZGVuLiBUaGlzIGlzIGNhbGxlZCB3aGVuIGEgdXNlciBtb3ZlcyB0aGUgbW91c2VcbiAqIEBwcml2YXRlXG4gKi9cbkFjY2Vzc2liaWxpdHlNYW5hZ2VyLnByb3RvdHlwZS5kZWFjdGl2YXRlID0gZnVuY3Rpb24oKVxue1xuXHRpZighdGhpcy5pc0FjdGl2ZSlcblx0e1xuXHRcdHJldHVybjtcblx0fVxuXG5cdHRoaXMuaXNBY3RpdmUgPSBmYWxzZTtcblxuXHR3aW5kb3cuZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignbW91c2Vtb3ZlJywgdGhpcy5fb25Nb3VzZU1vdmUpO1xuXHR3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsIHRoaXMuX29uS2V5RG93biwgZmFsc2UpO1xuXG5cdHRoaXMucmVuZGVyZXIub2ZmKCdwb3N0cmVuZGVyJywgdGhpcy51cGRhdGUpO1xuXG5cdHRoaXMuZGl2LnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodGhpcy5kaXYpO1xuXG59O1xuXG4vKipcbiAqIFRoaXMgcmVjdXJzaXZlIGZ1bmN0aW9uIHdpbGwgcnVuIHRocm91Z2h0IGhlIHNjZW5lIGdyYXBoIGFuZCBhZGQgYW55IG5ldyBhY2Nlc3NpYmxlIG9iamVjdHMgdG8gdGhlIERPTSBsYXllci5cbiAqIEBwYXJhbSBlbGVtZW50IHtQSVhJLkNvbnRhaW5lcnxQSVhJLlNwcml0ZXxQSVhJLmV4dHJhcy5UaWxpbmdTcHJpdGV9IHRoZSBEaXNwbGF5T2JqZWN0IHRvIGNoZWNrLlxuICogQHByaXZhdGVcbiAqL1xuQWNjZXNzaWJpbGl0eU1hbmFnZXIucHJvdG90eXBlLnVwZGF0ZUFjY2Vzc2libGVPYmplY3RzID0gZnVuY3Rpb24oZGlzcGxheU9iamVjdClcbntcblx0aWYoIWRpc3BsYXlPYmplY3QudmlzaWJsZSlcblx0e1xuXHRcdHJldHVybjtcblx0fVxuXG5cdGlmKGRpc3BsYXlPYmplY3QuYWNjZXNzaWJsZSAmJiBkaXNwbGF5T2JqZWN0LmludGVyYWN0aXZlKVxuXHR7XG5cdFx0aWYoIWRpc3BsYXlPYmplY3QuX2FjY2Vzc2libGVBY3RpdmUpXG5cdFx0e1xuXHRcdFx0dGhpcy5hZGRDaGlsZChkaXNwbGF5T2JqZWN0KTtcblx0XHR9XG5cdCAgIFx0XG5cdCAgIFx0ZGlzcGxheU9iamVjdC5yZW5kZXJJZCA9IHRoaXMucmVuZGVySWQ7XG5cdH1cblxuXHR2YXIgY2hpbGRyZW4gPSBkaXNwbGF5T2JqZWN0LmNoaWxkcmVuO1xuXG5cdGZvciAodmFyIGkgPSBjaGlsZHJlbi5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuXHRcdFxuXHRcdHRoaXMudXBkYXRlQWNjZXNzaWJsZU9iamVjdHMoY2hpbGRyZW5baV0pO1xuXHR9XG59O1xuXG5cbi8qKlxuICogQmVmb3JlIGVhY2ggcmVuZGVyIHRoaXMgZnVuY3Rpb24gd2lsbCBlbnN1cmUgdGhhdCBhbGwgZGl2cyBhcmUgbWFwcGVkIGNvcnJlY3RseSB0byB0aGVpciBEaXNwbGF5T2JqZWN0c1xuICogQHByaXZhdGVcbiAqL1xuQWNjZXNzaWJpbGl0eU1hbmFnZXIucHJvdG90eXBlLnVwZGF0ZSA9IGZ1bmN0aW9uKClcbntcblxuXHQvLyB1cGRhdGUgY2hpbGRyZW4uLi5cblx0dGhpcy51cGRhdGVBY2Nlc3NpYmxlT2JqZWN0cyh0aGlzLnJlbmRlcmVyLl9sYXN0T2JqZWN0UmVuZGVyZWQpO1xuXG5cdHZhciByZWN0ID0gdGhpcy5yZW5kZXJlci52aWV3LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuXHR2YXIgc3ggPSByZWN0LndpZHRoICAvIHRoaXMucmVuZGVyZXIud2lkdGg7XG5cdHZhciBzeSA9IHJlY3QuaGVpZ2h0IC8gdGhpcy5yZW5kZXJlci5oZWlnaHQ7XG5cblx0dmFyIGRpdiA9IHRoaXMuZGl2O1xuXG5cdGRpdi5zdHlsZS5sZWZ0ID0gcmVjdC5sZWZ0ICsgJ3B4Jztcblx0ZGl2LnN0eWxlLnRvcCA9IHJlY3QudG9wICsgJ3B4Jztcblx0ZGl2LnN0eWxlLndpZHRoID0gdGhpcy5yZW5kZXJlci53aWR0aCArICdweCc7XG5cdGRpdi5zdHlsZS5oZWlnaHQgPSB0aGlzLnJlbmRlcmVyLmhlaWdodCArICdweCc7XG5cblx0Zm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmNoaWxkcmVuLmxlbmd0aDsgaSsrKVxuXHR7XG5cblx0XHR2YXIgY2hpbGQgPSB0aGlzLmNoaWxkcmVuW2ldO1xuXG5cdFx0aWYoY2hpbGQucmVuZGVySWQgIT09IHRoaXMucmVuZGVySWQpXG5cdFx0e1xuXHRcdFx0Y2hpbGQuX2FjY2Vzc2libGVBY3RpdmUgPSBmYWxzZTtcblxuICAgICAgICAgICAgY29yZS51dGlscy5yZW1vdmVJdGVtcyh0aGlzLmNoaWxkcmVuLCBpLCAxKTtcblx0XHRcdHRoaXMuZGl2LnJlbW92ZUNoaWxkKCBjaGlsZC5fYWNjZXNzaWJsZURpdiApO1xuXHRcdFx0dGhpcy5wb29sLnB1c2goY2hpbGQuX2FjY2Vzc2libGVEaXYpO1xuXHRcdFx0Y2hpbGQuX2FjY2Vzc2libGVEaXYgPSBudWxsO1xuXG5cdFx0XHRpLS07XG5cblx0XHRcdGlmKHRoaXMuY2hpbGRyZW4ubGVuZ3RoID09PSAwKVxuXHRcdFx0e1xuXHRcdFx0XHR0aGlzLmRlYWN0aXZhdGUoKTtcblx0XHRcdH1cblx0XHR9XG5cdFx0ZWxzZVxuXHRcdHtcblx0XHRcdC8vIG1hcCBkaXYgdG8gZGlzcGxheS4uXG5cdFx0XHRkaXYgPSBjaGlsZC5fYWNjZXNzaWJsZURpdjtcblx0XHRcdHZhciBoaXRBcmVhID0gY2hpbGQuaGl0QXJlYTtcblx0XHRcdHZhciB3dCA9IGNoaWxkLndvcmxkVHJhbnNmb3JtO1xuXG5cdFx0XHRpZihjaGlsZC5oaXRBcmVhKVxuXHRcdFx0e1xuXHRcdFx0XHRkaXYuc3R5bGUubGVmdCA9ICgod3QudHggKyAoaGl0QXJlYS54ICogd3QuYSkpICogc3gpICsgJ3B4Jztcblx0XHRcdFx0ZGl2LnN0eWxlLnRvcCA9ICAoKHd0LnR5ICsgKGhpdEFyZWEueSAqIHd0LmQpKSAqIHN5KSArICAncHgnO1xuXG5cdFx0XHRcdGRpdi5zdHlsZS53aWR0aCA9IChoaXRBcmVhLndpZHRoICogd3QuYSAqIHN4KSArICdweCc7XG5cdFx0XHRcdGRpdi5zdHlsZS5oZWlnaHQgPSAoaGl0QXJlYS5oZWlnaHQgKiB3dC5kICogc3kpICsgJ3B4Jztcblx0XHRcdFxuXHRcdFx0fVxuXHRcdFx0ZWxzZVxuXHRcdFx0e1xuXHRcdFx0XHRoaXRBcmVhID0gY2hpbGQuZ2V0Qm91bmRzKCk7XG5cblx0XHRcdFx0dGhpcy5jYXBIaXRBcmVhKGhpdEFyZWEpO1xuXG5cdFx0XHRcdGRpdi5zdHlsZS5sZWZ0ID0gKGhpdEFyZWEueCAqIHN4KSArICdweCc7XG5cdFx0XHRcdGRpdi5zdHlsZS50b3AgPSAgKGhpdEFyZWEueSAqIHN5KSArICAncHgnO1xuXG5cdFx0XHRcdGRpdi5zdHlsZS53aWR0aCA9IChoaXRBcmVhLndpZHRoICogc3gpICsgJ3B4Jztcblx0XHRcdFx0ZGl2LnN0eWxlLmhlaWdodCA9IChoaXRBcmVhLmhlaWdodCAqIHN5KSArICdweCc7XG5cdFx0XHR9XHRcdFxuXHRcdH1cblx0fVxuXG5cdC8vIGluY3JlbWVudCB0aGUgcmVuZGVyIGlkLi5cblx0dGhpcy5yZW5kZXJJZCsrO1xufTtcblxuQWNjZXNzaWJpbGl0eU1hbmFnZXIucHJvdG90eXBlLmNhcEhpdEFyZWEgPSBmdW5jdGlvbiAoaGl0QXJlYSlcbntcbiAgICBpZiAoaGl0QXJlYS54IDwgMClcbiAgICB7XG4gICAgICAgIGhpdEFyZWEud2lkdGggKz0gaGl0QXJlYS54O1xuICAgICAgICBoaXRBcmVhLnggPSAwO1xuICAgIH1cblxuICAgIGlmIChoaXRBcmVhLnkgPCAwKVxuICAgIHtcbiAgICAgICAgaGl0QXJlYS5oZWlnaHQgKz0gaGl0QXJlYS55O1xuICAgICAgICBoaXRBcmVhLnkgPSAwO1xuICAgIH1cblxuICAgIGlmICggaGl0QXJlYS54ICsgaGl0QXJlYS53aWR0aCA+IHRoaXMucmVuZGVyZXIud2lkdGggKVxuICAgIHtcbiAgICAgICAgaGl0QXJlYS53aWR0aCA9IHRoaXMucmVuZGVyZXIud2lkdGggLSBoaXRBcmVhLng7XG4gICAgfVxuXG4gICAgaWYgKCBoaXRBcmVhLnkgKyBoaXRBcmVhLmhlaWdodCA+IHRoaXMucmVuZGVyZXIuaGVpZ2h0IClcbiAgICB7XG4gICAgICAgIGhpdEFyZWEuaGVpZ2h0ID0gdGhpcy5yZW5kZXJlci5oZWlnaHQgLSBoaXRBcmVhLnk7XG4gICAgfVxufTtcblxuXG4vKipcbiAqIEFkZHMgYSBEaXNwbGF5T2JqZWN0IHRvIHRoZSBhY2Nlc3NpYmlsaXR5IG1hbmFnZXJcbiAqIEBwcml2YXRlXG4gKi9cbkFjY2Vzc2liaWxpdHlNYW5hZ2VyLnByb3RvdHlwZS5hZGRDaGlsZCA9IGZ1bmN0aW9uKGRpc3BsYXlPYmplY3QpXG57XG4vL1x0dGhpcy5hY3RpdmF0ZSgpO1xuXHRcblx0dmFyIGRpdiA9IHRoaXMucG9vbC5wb3AoKTtcblxuXHRpZighZGl2KVxuXHR7XG5cdFx0ZGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYnV0dG9uJyk7IFxuXG5cdCAgICBkaXYuc3R5bGUud2lkdGggPSAxMDAgKyAncHgnO1xuXHQgICAgZGl2LnN0eWxlLmhlaWdodCA9IDEwMCArICdweCc7XG5cdCAgICBkaXYuc3R5bGUuYmFja2dyb3VuZENvbG9yID0gdGhpcy5kZWJ1ZyA/ICdyZ2JhKDI1NSwwLDAsMC41KScgOiAndHJhbnNwYXJlbnQnO1xuXHQgICAgZGl2LnN0eWxlLnBvc2l0aW9uID0gJ2Fic29sdXRlJztcblx0ICAgIGRpdi5zdHlsZS56SW5kZXggPSAyO1xuXHQgICAgZGl2LnN0eWxlLmJvcmRlclN0eWxlID0gJ25vbmUnO1xuXG5cdCAgICBcblx0ICAgIGRpdi5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIHRoaXMuX29uQ2xpY2suYmluZCh0aGlzKSk7XG5cdCAgICBkaXYuYWRkRXZlbnRMaXN0ZW5lcignZm9jdXMnLCB0aGlzLl9vbkZvY3VzLmJpbmQodGhpcykpO1xuXHQgICAgZGl2LmFkZEV2ZW50TGlzdGVuZXIoJ2ZvY3Vzb3V0JywgdGhpcy5fb25Gb2N1c091dC5iaW5kKHRoaXMpKTtcblx0fVxuXHQgICBcdFxuXG5cblxuXHRkaXYudGl0bGUgPSBkaXNwbGF5T2JqZWN0LmFjY2Vzc2libGVUaXRsZSB8fCAnZGlzcGxheU9iamVjdCAnICsgdGhpcy50YWJJbmRleDtcblxuXHQvL1xuXHRcblx0ZGlzcGxheU9iamVjdC5fYWNjZXNzaWJsZUFjdGl2ZSA9IHRydWU7XG5cdGRpc3BsYXlPYmplY3QuX2FjY2Vzc2libGVEaXYgPSBkaXY7XG5cdGRpdi5kaXNwbGF5T2JqZWN0ID0gZGlzcGxheU9iamVjdDtcblxuXG5cdHRoaXMuY2hpbGRyZW4ucHVzaChkaXNwbGF5T2JqZWN0KTtcblx0dGhpcy5kaXYuYXBwZW5kQ2hpbGQoIGRpc3BsYXlPYmplY3QuX2FjY2Vzc2libGVEaXYgKTtcblx0ZGlzcGxheU9iamVjdC5fYWNjZXNzaWJsZURpdi50YWJJbmRleCA9IGRpc3BsYXlPYmplY3QudGFiSW5kZXg7XG59O1xuXG5cbi8qKlxuICogTWFwcyB0aGUgZGl2IGJ1dHRvbiBwcmVzcyB0byBwaXhpJ3MgSW50ZXJhY3Rpb25NYW5hZ2VyIChjbGljaylcbiAqIEBwcml2YXRlXG4gKi9cbkFjY2Vzc2liaWxpdHlNYW5hZ2VyLnByb3RvdHlwZS5fb25DbGljayA9IGZ1bmN0aW9uKGUpXG57XG5cdHZhciBpbnRlcmFjdGlvbk1hbmFnZXIgPSB0aGlzLnJlbmRlcmVyLnBsdWdpbnMuaW50ZXJhY3Rpb247XG5cdGludGVyYWN0aW9uTWFuYWdlci5kaXNwYXRjaEV2ZW50KGUudGFyZ2V0LmRpc3BsYXlPYmplY3QsICdjbGljaycsIGludGVyYWN0aW9uTWFuYWdlci5ldmVudERhdGEpO1xufTtcblxuLyoqXG4gKiBNYXBzIHRoZSBkaXYgZm9jdXMgZXZlbnRzIHRvIHBpeGlzIEludGVyYWN0aW9uTWFuYWdlciAobW91c2VvdmVyKVxuICogQHByaXZhdGVcbiAqL1xuQWNjZXNzaWJpbGl0eU1hbmFnZXIucHJvdG90eXBlLl9vbkZvY3VzID0gZnVuY3Rpb24oZSlcbntcblx0dmFyIGludGVyYWN0aW9uTWFuYWdlciA9IHRoaXMucmVuZGVyZXIucGx1Z2lucy5pbnRlcmFjdGlvbjtcblx0aW50ZXJhY3Rpb25NYW5hZ2VyLmRpc3BhdGNoRXZlbnQoZS50YXJnZXQuZGlzcGxheU9iamVjdCwgJ21vdXNlb3ZlcicsIGludGVyYWN0aW9uTWFuYWdlci5ldmVudERhdGEpO1xufTtcblxuLyoqXG4gKiBNYXBzIHRoZSBkaXYgZm9jdXMgZXZlbnRzIHRvIHBpeGlzIEludGVyYWN0aW9uTWFuYWdlciAobW91c2VvdXQpXG4gKiBAcHJpdmF0ZVxuICovXG5BY2Nlc3NpYmlsaXR5TWFuYWdlci5wcm90b3R5cGUuX29uRm9jdXNPdXQgPSBmdW5jdGlvbihlKVxue1xuXHR2YXIgaW50ZXJhY3Rpb25NYW5hZ2VyID0gdGhpcy5yZW5kZXJlci5wbHVnaW5zLmludGVyYWN0aW9uO1xuXHRpbnRlcmFjdGlvbk1hbmFnZXIuZGlzcGF0Y2hFdmVudChlLnRhcmdldC5kaXNwbGF5T2JqZWN0LCAnbW91c2VvdXQnLCBpbnRlcmFjdGlvbk1hbmFnZXIuZXZlbnREYXRhKTtcbn07XG5cbi8qKlxuICogSXMgY2FsbGVkIHdoZW4gYSBrZXkgaXMgcHJlc3NlZFxuICpcbiAqIEBwcml2YXRlXG4gKi9cbkFjY2Vzc2liaWxpdHlNYW5hZ2VyLnByb3RvdHlwZS5fb25LZXlEb3duID0gZnVuY3Rpb24oZSlcbntcblx0aWYoZS5rZXlDb2RlICE9PSA5KVxuXHR7XG5cdFx0cmV0dXJuO1xuXHR9XG5cblx0dGhpcy5hY3RpdmF0ZSgpO1xufTtcblxuLyoqXG4gKiBJcyBjYWxsZWQgd2hlbiB0aGUgbW91c2UgbW92ZXMgYWNyb3NzIHRoZSByZW5kZXJlciBlbGVtZW50XG4gKlxuICogQHByaXZhdGVcbiAqL1xuQWNjZXNzaWJpbGl0eU1hbmFnZXIucHJvdG90eXBlLl9vbk1vdXNlTW92ZSA9IGZ1bmN0aW9uKClcbntcblx0dGhpcy5kZWFjdGl2YXRlKCk7XG59O1xuXG5cbi8qKlxuICogRGVzdHJveXMgdGhlIGFjY2Vzc2liaWxpdHkgbWFuYWdlclxuICpcbiAqL1xuQWNjZXNzaWJpbGl0eU1hbmFnZXIucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoKSBcbntcblx0dGhpcy5kaXYgPSBudWxsO1xuXG5cdGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5jaGlsZHJlbi5sZW5ndGg7IGkrKylcblx0e1xuXHRcdHRoaXMuY2hpbGRyZW5baV0uZGl2ID0gbnVsbDtcblx0fVxuXG5cdFxuXHR3aW5kb3cuZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignbW91c2Vtb3ZlJywgdGhpcy5fb25Nb3VzZU1vdmUpO1xuXHR3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsIHRoaXMuX29uS2V5RG93bik7XG5cdFx0XG5cdHRoaXMucG9vbCA9IG51bGw7XG5cdHRoaXMuY2hpbGRyZW4gPSBudWxsO1xuXHR0aGlzLnJlbmRlcmVyID0gbnVsbDtcblxufTtcblxuY29yZS5XZWJHTFJlbmRlcmVyLnJlZ2lzdGVyUGx1Z2luKCdhY2Nlc3NpYmlsaXR5JywgQWNjZXNzaWJpbGl0eU1hbmFnZXIpO1xuY29yZS5DYW52YXNSZW5kZXJlci5yZWdpc3RlclBsdWdpbignYWNjZXNzaWJpbGl0eScsIEFjY2Vzc2liaWxpdHlNYW5hZ2VyKTtcblxuIiwiLyoqXG4gKiBEZWZhdWx0IHByb3BlcnR5IHZhbHVlcyBvZiBhY2Nlc3NpYmxlIG9iamVjdHNcbiAqIHVzZWQgYnkge0BsaW5rIFBJWEkuYWNjZXNzaWJpbGl0eS5BY2Nlc3NpYmlsaXR5TWFuYWdlcn0uXG4gKlxuICogQG1peGluXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQGV4YW1wbGVcbiAqICAgICAgZnVuY3Rpb24gTXlPYmplY3QoKSB7fVxuICpcbiAqICAgICAgT2JqZWN0LmFzc2lnbihcbiAqICAgICAgICAgIE15T2JqZWN0LnByb3RvdHlwZSxcbiAqICAgICAgICAgIFBJWEkuYWNjZXNzaWJpbGl0eS5hY2Nlc3NpYmxlVGFyZ2V0XG4gKiAgICAgICk7XG4gKi9cbnZhciBhY2Nlc3NpYmxlVGFyZ2V0ID0ge1xuICAgIFxuICAgIC8qKlxuICAgICAqIEB0b2RvIE5lZWRzIGRvY3MuXG4gICAgICovXG4gICAgYWNjZXNzaWJsZTpmYWxzZSxcblxuICAgIC8qKlxuICAgICAqIEB0b2RvIE5lZWRzIGRvY3MuXG4gICAgICovXG4gICAgYWNjZXNzaWJsZVRpdGxlOm51bGwsXG5cbiAgICAvKipcbiAgICAgKiBAdG9kbyBOZWVkcyBkb2NzLlxuICAgICAqL1xuICAgIHRhYkluZGV4OjAsXG5cbiAgICAvKipcbiAgICAgKiBAdG9kbyBOZWVkcyBkb2NzLlxuICAgICAqL1xuICAgIF9hY2Nlc3NpYmxlQWN0aXZlOmZhbHNlLFxuXG4gICAgLyoqXG4gICAgICogQHRvZG8gTmVlZHMgZG9jcy5cbiAgICAgKi9cbiAgICBfYWNjZXNzaWJsZURpdjpmYWxzZVxuXG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGFjY2Vzc2libGVUYXJnZXQ7XG4iLCIvKipcbiAqIEBmaWxlICAgICAgICBNYWluIGV4cG9ydCBvZiB0aGUgUElYSSBhY2Nlc3NpYmlsaXR5IGxpYnJhcnlcbiAqIEBhdXRob3IgICAgICBNYXQgR3JvdmVzIDxtYXRAZ29vZGJveWRpZ2l0YWwuY29tPlxuICogQGNvcHlyaWdodCAgIDIwMTMtMjAxNSBHb29kQm95RGlnaXRhbFxuICogQGxpY2Vuc2UgICAgIHtAbGluayBodHRwczovL2dpdGh1Yi5jb20vcGl4aWpzL3BpeGkuanMvYmxvYi9tYXN0ZXIvTElDRU5TRXxNSVQgTGljZW5zZX1cbiAqL1xuXG4vKipcbiAqIEBuYW1lc3BhY2UgUElYSS5pbnRlcmFjdGlvblxuICovXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgICBhY2Nlc3NpYmxlVGFyZ2V0OiAgICAgcmVxdWlyZSgnLi9hY2Nlc3NpYmxlVGFyZ2V0JyksXG4gICAgQWNjZXNzaWJpbGl0eU1hbmFnZXI6IHJlcXVpcmUoJy4vQWNjZXNzaWJpbGl0eU1hbmFnZXInKVxufTtcbiIsIi8qKlxuICogQ29uc3RhbnQgdmFsdWVzIHVzZWQgaW4gcGl4aVxuICpcbiAqIEBsZW5kcyBQSVhJXG4gKi9cbnZhciBDT05TVCA9IHtcbiAgICAvKipcbiAgICAgKiBTdHJpbmcgb2YgdGhlIGN1cnJlbnQgUElYSSB2ZXJzaW9uXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQGNvbnN0YW50XG4gICAgICogQHByb3BlcnR5IHtzdHJpbmd9IFZFUlNJT05cbiAgICAgKi9cbiAgICBWRVJTSU9OOiByZXF1aXJlKCcuLi8uLi9wYWNrYWdlLmpzb24nKS52ZXJzaW9uLFxuXG4gICAgLyoqXG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IFBJXzIgLSBUd28gUGlcbiAgICAgKiBAY29uc3RhbnRcbiAgICAgKiBAc3RhdGljXG4gICAgICovXG4gICAgUElfMjogTWF0aC5QSSAqIDIsXG5cbiAgICAvKipcbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gUkFEX1RPX0RFRyAtIENvbnN0YW50IGNvbnZlcnNpb24gZmFjdG9yIGZvciBjb252ZXJ0aW5nIHJhZGlhbnMgdG8gZGVncmVlc1xuICAgICAqIEBjb25zdGFudFxuICAgICAqIEBzdGF0aWNcbiAgICAgKi9cbiAgICBSQURfVE9fREVHOiAxODAgLyBNYXRoLlBJLFxuXG4gICAgLyoqXG4gICAgICogQHByb3BlcnR5IHtOdW1iZXJ9IERFR19UT19SQUQgLSBDb25zdGFudCBjb252ZXJzaW9uIGZhY3RvciBmb3IgY29udmVydGluZyBkZWdyZWVzIHRvIHJhZGlhbnNcbiAgICAgKiBAY29uc3RhbnRcbiAgICAgKiBAc3RhdGljXG4gICAgICovXG4gICAgREVHX1RPX1JBRDogTWF0aC5QSSAvIDE4MCxcblxuICAgIC8qKlxuICAgICAqIFRhcmdldCBmcmFtZXMgcGVyIG1pbGxpc2Vjb25kLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBjb25zdGFudFxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBUQVJHRVRfRlBNUz0wLjA2XG4gICAgICovXG4gICAgVEFSR0VUX0ZQTVM6IDAuMDYsXG5cbiAgICAvKipcbiAgICAgKiBDb25zdGFudCB0byBpZGVudGlmeSB0aGUgUmVuZGVyZXIgVHlwZS5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAY29uc3RhbnRcbiAgICAgKiBAcHJvcGVydHkge29iamVjdH0gUkVOREVSRVJfVFlQRVxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBSRU5ERVJFUl9UWVBFLlVOS05PV05cbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gUkVOREVSRVJfVFlQRS5XRUJHTFxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBSRU5ERVJFUl9UWVBFLkNBTlZBU1xuICAgICAqL1xuICAgIFJFTkRFUkVSX1RZUEU6IHtcbiAgICAgICAgVU5LTk9XTjogICAgMCxcbiAgICAgICAgV0VCR0w6ICAgICAgMSxcbiAgICAgICAgQ0FOVkFTOiAgICAgMlxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBWYXJpb3VzIGJsZW5kIG1vZGVzIHN1cHBvcnRlZCBieSBQSVhJLiBJTVBPUlRBTlQgLSBUaGUgV2ViR0wgcmVuZGVyZXIgb25seSBzdXBwb3J0c1xuICAgICAqIHRoZSBOT1JNQUwsIEFERCwgTVVMVElQTFkgYW5kIFNDUkVFTiBibGVuZCBtb2Rlcy4gQW55dGhpbmcgZWxzZSB3aWxsIHNpbGVudGx5IGFjdCBsaWtlXG4gICAgICogTk9STUFMLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBjb25zdGFudFxuICAgICAqIEBwcm9wZXJ0eSB7b2JqZWN0fSBCTEVORF9NT0RFU1xuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBCTEVORF9NT0RFUy5OT1JNQUxcbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gQkxFTkRfTU9ERVMuQUREXG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IEJMRU5EX01PREVTLk1VTFRJUExZXG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IEJMRU5EX01PREVTLlNDUkVFTlxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBCTEVORF9NT0RFUy5PVkVSTEFZXG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IEJMRU5EX01PREVTLkRBUktFTlxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBCTEVORF9NT0RFUy5MSUdIVEVOXG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IEJMRU5EX01PREVTLkNPTE9SX0RPREdFXG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IEJMRU5EX01PREVTLkNPTE9SX0JVUk5cbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gQkxFTkRfTU9ERVMuSEFSRF9MSUdIVFxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBCTEVORF9NT0RFUy5TT0ZUX0xJR0hUXG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IEJMRU5EX01PREVTLkRJRkZFUkVOQ0VcbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gQkxFTkRfTU9ERVMuRVhDTFVTSU9OXG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IEJMRU5EX01PREVTLkhVRVxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBCTEVORF9NT0RFUy5TQVRVUkFUSU9OXG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IEJMRU5EX01PREVTLkNPTE9SXG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IEJMRU5EX01PREVTLkxVTUlOT1NJVFlcbiAgICAgKi9cbiAgICBCTEVORF9NT0RFUzoge1xuICAgICAgICBOT1JNQUw6ICAgICAgICAgMCxcbiAgICAgICAgQUREOiAgICAgICAgICAgIDEsXG4gICAgICAgIE1VTFRJUExZOiAgICAgICAyLFxuICAgICAgICBTQ1JFRU46ICAgICAgICAgMyxcbiAgICAgICAgT1ZFUkxBWTogICAgICAgIDQsXG4gICAgICAgIERBUktFTjogICAgICAgICA1LFxuICAgICAgICBMSUdIVEVOOiAgICAgICAgNixcbiAgICAgICAgQ09MT1JfRE9ER0U6ICAgIDcsXG4gICAgICAgIENPTE9SX0JVUk46ICAgICA4LFxuICAgICAgICBIQVJEX0xJR0hUOiAgICAgOSxcbiAgICAgICAgU09GVF9MSUdIVDogICAgIDEwLFxuICAgICAgICBESUZGRVJFTkNFOiAgICAgMTEsXG4gICAgICAgIEVYQ0xVU0lPTjogICAgICAxMixcbiAgICAgICAgSFVFOiAgICAgICAgICAgIDEzLFxuICAgICAgICBTQVRVUkFUSU9OOiAgICAgMTQsXG4gICAgICAgIENPTE9SOiAgICAgICAgICAxNSxcbiAgICAgICAgTFVNSU5PU0lUWTogICAgIDE2XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFZhcmlvdXMgd2ViZ2wgZHJhdyBtb2Rlcy4gVGhlc2UgY2FuIGJlIHVzZWQgdG8gc3BlY2lmeSB3aGljaCBHTCBkcmF3TW9kZSB0byB1c2VcbiAgICAgKiB1bmRlciBjZXJ0YWluIHNpdHVhdGlvbnMgYW5kIHJlbmRlcmVycy5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAY29uc3RhbnRcbiAgICAgKiBAcHJvcGVydHkge29iamVjdH0gRFJBV19NT0RFU1xuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBEUkFXX01PREVTLlBPSU5UU1xuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBEUkFXX01PREVTLkxJTkVTXG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IERSQVdfTU9ERVMuTElORV9MT09QXG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IERSQVdfTU9ERVMuTElORV9TVFJJUFxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBEUkFXX01PREVTLlRSSUFOR0xFU1xuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBEUkFXX01PREVTLlRSSUFOR0xFX1NUUklQXG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IERSQVdfTU9ERVMuVFJJQU5HTEVfRkFOXG4gICAgICovXG4gICAgRFJBV19NT0RFUzoge1xuICAgICAgICBQT0lOVFM6ICAgICAgICAgMCxcbiAgICAgICAgTElORVM6ICAgICAgICAgIDEsXG4gICAgICAgIExJTkVfTE9PUDogICAgICAyLFxuICAgICAgICBMSU5FX1NUUklQOiAgICAgMyxcbiAgICAgICAgVFJJQU5HTEVTOiAgICAgIDQsXG4gICAgICAgIFRSSUFOR0xFX1NUUklQOiA1LFxuICAgICAgICBUUklBTkdMRV9GQU46ICAgNlxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBUaGUgc2NhbGUgbW9kZXMgdGhhdCBhcmUgc3VwcG9ydGVkIGJ5IHBpeGkuXG4gICAgICpcbiAgICAgKiBUaGUgREVGQVVMVCBzY2FsZSBtb2RlIGFmZmVjdHMgdGhlIGRlZmF1bHQgc2NhbGluZyBtb2RlIG9mIGZ1dHVyZSBvcGVyYXRpb25zLlxuICAgICAqIEl0IGNhbiBiZSByZS1hc3NpZ25lZCB0byBlaXRoZXIgTElORUFSIG9yIE5FQVJFU1QsIGRlcGVuZGluZyB1cG9uIHN1aXRhYmlsaXR5LlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBjb25zdGFudFxuICAgICAqIEBwcm9wZXJ0eSB7b2JqZWN0fSBTQ0FMRV9NT0RFU1xuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBTQ0FMRV9NT0RFUy5ERUZBVUxUPUxJTkVBUlxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBTQ0FMRV9NT0RFUy5MSU5FQVIgU21vb3RoIHNjYWxpbmdcbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gU0NBTEVfTU9ERVMuTkVBUkVTVCBQaXhlbGF0aW5nIHNjYWxpbmdcbiAgICAgKi9cbiAgICBTQ0FMRV9NT0RFUzoge1xuICAgICAgICBERUZBVUxUOiAgICAwLFxuICAgICAgICBMSU5FQVI6ICAgICAwLFxuICAgICAgICBORUFSRVNUOiAgICAxXG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFRoZSBwcmVmaXggdGhhdCBkZW5vdGVzIGEgVVJMIGlzIGZvciBhIHJldGluYSBhc3NldFxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBjb25zdGFudFxuICAgICAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBSRVRJTkFfUFJFRklYXG4gICAgICovXG4gICAgLy9leGFtcGxlOiAnQDJ4JyxcbiAgICBSRVRJTkFfUFJFRklYOiAvQCguKyl4LyxcblxuICAgIFJFU09MVVRJT046MSxcblxuICAgIEZJTFRFUl9SRVNPTFVUSU9OOjEsXG5cbiAgICAvKipcbiAgICAgKiBUaGUgZGVmYXVsdCByZW5kZXIgb3B0aW9ucyBpZiBub25lIGFyZSBzdXBwbGllZCB0byB7QGxpbmsgUElYSS5XZWJHTFJlbmRlcmVyfVxuICAgICAqIG9yIHtAbGluayBQSVhJLkNhbnZhc1JlbmRlcmVyfS5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAY29uc3RhbnRcbiAgICAgKiBAcHJvcGVydHkge29iamVjdH0gREVGQVVMVF9SRU5ERVJfT1BUSU9OU1xuICAgICAqIEBwcm9wZXJ0eSB7SFRNTENhbnZhc0VsZW1lbnR9IERFRkFVTFRfUkVOREVSX09QVElPTlMudmlldz1udWxsXG4gICAgICogQHByb3BlcnR5IHtib29sZWFufSBERUZBVUxUX1JFTkRFUl9PUFRJT05TLnRyYW5zcGFyZW50PWZhbHNlXG4gICAgICogQHByb3BlcnR5IHtib29sZWFufSBERUZBVUxUX1JFTkRFUl9PUFRJT05TLmFudGlhbGlhcz1mYWxzZVxuICAgICAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gREVGQVVMVF9SRU5ERVJfT1BUSU9OUy5mb3JjZUZYQUE9ZmFsc2VcbiAgICAgKiBAcHJvcGVydHkge2Jvb2xlYW59IERFRkFVTFRfUkVOREVSX09QVElPTlMucHJlc2VydmVEcmF3aW5nQnVmZmVyPWZhbHNlXG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IERFRkFVTFRfUkVOREVSX09QVElPTlMucmVzb2x1dGlvbj0xXG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IERFRkFVTFRfUkVOREVSX09QVElPTlMuYmFja2dyb3VuZENvbG9yPTB4MDAwMDAwXG4gICAgICogQHByb3BlcnR5IHtib29sZWFufSBERUZBVUxUX1JFTkRFUl9PUFRJT05TLmNsZWFyQmVmb3JlUmVuZGVyPXRydWVcbiAgICAgKiBAcHJvcGVydHkge2Jvb2xlYW59IERFRkFVTFRfUkVOREVSX09QVElPTlMuYXV0b1Jlc2l6ZT1mYWxzZVxuICAgICAqL1xuICAgIERFRkFVTFRfUkVOREVSX09QVElPTlM6IHtcbiAgICAgICAgdmlldzogbnVsbCxcbiAgICAgICAgcmVzb2x1dGlvbjogMSxcbiAgICAgICAgYW50aWFsaWFzOiBmYWxzZSxcbiAgICAgICAgZm9yY2VGWEFBOiBmYWxzZSxcbiAgICAgICAgYXV0b1Jlc2l6ZTogZmFsc2UsXG4gICAgICAgIHRyYW5zcGFyZW50OiBmYWxzZSxcbiAgICAgICAgYmFja2dyb3VuZENvbG9yOiAweDAwMDAwMCxcbiAgICAgICAgY2xlYXJCZWZvcmVSZW5kZXI6IHRydWUsXG4gICAgICAgIHByZXNlcnZlRHJhd2luZ0J1ZmZlcjogZmFsc2UsXG4gICAgICAgIHJvdW5kUGl4ZWxzOiBmYWxzZVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBDb25zdGFudHMgdGhhdCBpZGVudGlmeSBzaGFwZXMsIG1haW5seSB0byBwcmV2ZW50IGBpbnN0YW5jZW9mYCBjYWxscy5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAY29uc3RhbnRcbiAgICAgKiBAcHJvcGVydHkge29iamVjdH0gU0hBUEVTXG4gICAgICogQHByb3BlcnR5IHtvYmplY3R9IFNIQVBFUy5QT0xZPTBcbiAgICAgKiBAcHJvcGVydHkge29iamVjdH0gU0hBUEVTLlJFQ1Q9MVxuICAgICAqIEBwcm9wZXJ0eSB7b2JqZWN0fSBTSEFQRVMuQ0lSQz0yXG4gICAgICogQHByb3BlcnR5IHtvYmplY3R9IFNIQVBFUy5FTElQPTNcbiAgICAgKiBAcHJvcGVydHkge29iamVjdH0gU0hBUEVTLlJSRUM9NFxuICAgICAqL1xuICAgIFNIQVBFUzoge1xuICAgICAgICBQT0xZOiAwLFxuICAgICAgICBSRUNUOiAxLFxuICAgICAgICBDSVJDOiAyLFxuICAgICAgICBFTElQOiAzLFxuICAgICAgICBSUkVDOiA0XG4gICAgfSxcblxuICAgIC8vIFRPRE86IG1heWJlIGNoYW5nZSB0byBTUFJJVEUuQkFUQ0hfU0laRTogMjAwMFxuICAgIC8vIFRPRE86IG1heWJlIGFkZCBQQVJUSUNMRS5CQVRDSF9TSVpFOiAxNTAwMFxuICAgIFNQUklURV9CQVRDSF9TSVpFOiAyMDAwIC8vbmljZSBiYWxhbmNlIGJldHdlZW4gbW9iaWxlIGFuZCBkZXNrdG9wIG1hY2hpbmVzXG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IENPTlNUO1xuIiwidmFyIG1hdGggPSByZXF1aXJlKCcuLi9tYXRoJyksXG4gICAgdXRpbHMgPSByZXF1aXJlKCcuLi91dGlscycpLFxuICAgIERpc3BsYXlPYmplY3QgPSByZXF1aXJlKCcuL0Rpc3BsYXlPYmplY3QnKSxcbiAgICBSZW5kZXJUZXh0dXJlID0gcmVxdWlyZSgnLi4vdGV4dHVyZXMvUmVuZGVyVGV4dHVyZScpLFxuICAgIF90ZW1wTWF0cml4ID0gbmV3IG1hdGguTWF0cml4KCk7XG5cbi8qKlxuICogQSBDb250YWluZXIgcmVwcmVzZW50cyBhIGNvbGxlY3Rpb24gb2YgZGlzcGxheSBvYmplY3RzLlxuICogSXQgaXMgdGhlIGJhc2UgY2xhc3Mgb2YgYWxsIGRpc3BsYXkgb2JqZWN0cyB0aGF0IGFjdCBhcyBhIGNvbnRhaW5lciBmb3Igb3RoZXIgb2JqZWN0cy5cbiAqXG4gKmBgYGpzXG4gKiB2YXIgY29udGFpbmVyID0gbmV3IFBJWEkuQ29udGFpbmVyKCk7XG4gKiBjb250YWluZXIuYWRkQ2hpbGQoc3ByaXRlKTtcbiAqIGBgYFxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLkRpc3BsYXlPYmplY3RcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKi9cbmZ1bmN0aW9uIENvbnRhaW5lcigpXG57XG4gICAgRGlzcGxheU9iamVjdC5jYWxsKHRoaXMpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGFycmF5IG9mIGNoaWxkcmVuIG9mIHRoaXMgY29udGFpbmVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5EaXNwbGF5T2JqZWN0W119XG4gICAgICogQHJlYWRvbmx5XG4gICAgICovXG4gICAgdGhpcy5jaGlsZHJlbiA9IFtdO1xufVxuXG4vLyBjb25zdHJ1Y3RvclxuQ29udGFpbmVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoRGlzcGxheU9iamVjdC5wcm90b3R5cGUpO1xuQ29udGFpbmVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IENvbnRhaW5lcjtcbm1vZHVsZS5leHBvcnRzID0gQ29udGFpbmVyO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhDb250YWluZXIucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogVGhlIHdpZHRoIG9mIHRoZSBDb250YWluZXIsIHNldHRpbmcgdGhpcyB3aWxsIGFjdHVhbGx5IG1vZGlmeSB0aGUgc2NhbGUgdG8gYWNoaWV2ZSB0aGUgdmFsdWUgc2V0XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuQ29udGFpbmVyI1xuICAgICAqL1xuICAgIHdpZHRoOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuc2NhbGUueCAqIHRoaXMuZ2V0TG9jYWxCb3VuZHMoKS53aWR0aDtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcblxuICAgICAgICAgICAgdmFyIHdpZHRoID0gdGhpcy5nZXRMb2NhbEJvdW5kcygpLndpZHRoO1xuXG4gICAgICAgICAgICBpZiAod2lkdGggIT09IDApXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdGhpcy5zY2FsZS54ID0gdmFsdWUgLyB3aWR0aDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNjYWxlLnggPSAxO1xuICAgICAgICAgICAgfVxuXG5cbiAgICAgICAgICAgIHRoaXMuX3dpZHRoID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVGhlIGhlaWdodCBvZiB0aGUgQ29udGFpbmVyLCBzZXR0aW5nIHRoaXMgd2lsbCBhY3R1YWxseSBtb2RpZnkgdGhlIHNjYWxlIHRvIGFjaGlldmUgdGhlIHZhbHVlIHNldFxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLkNvbnRhaW5lciNcbiAgICAgKi9cbiAgICBoZWlnaHQ6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gIHRoaXMuc2NhbGUueSAqIHRoaXMuZ2V0TG9jYWxCb3VuZHMoKS5oZWlnaHQ7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG5cbiAgICAgICAgICAgIHZhciBoZWlnaHQgPSB0aGlzLmdldExvY2FsQm91bmRzKCkuaGVpZ2h0O1xuXG4gICAgICAgICAgICBpZiAoaGVpZ2h0ICE9PSAwKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHRoaXMuc2NhbGUueSA9IHZhbHVlIC8gaGVpZ2h0IDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNjYWxlLnkgPSAxO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLl9oZWlnaHQgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuXG4vKipcbiAqIE92ZXJyaWRhYmxlIG1ldGhvZCB0aGF0IGNhbiBiZSB1c2VkIGJ5IENvbnRhaW5lciBzdWJjbGFzc2VzIHdoZW5ldmVyIHRoZSBjaGlsZHJlbiBhcnJheSBpcyBtb2RpZmllZFxuICpcbiAqIEBwcml2YXRlXG4gKi9cbkNvbnRhaW5lci5wcm90b3R5cGUub25DaGlsZHJlbkNoYW5nZSA9IGZ1bmN0aW9uICgpIHt9O1xuXG4vKipcbiAqIEFkZHMgYSBjaGlsZCB0byB0aGUgY29udGFpbmVyLlxuICogXG4gKiBZb3UgY2FuIGFsc28gYWRkIG11bHRwbGUgaXRlbXMgbGlrZSBzbzogbXlDb250YWluZXIuYWRkQ2hpbGQodGhpbmtPbmUsIHRoaW5nVHdvLCB0aGluZ1RocmVlKVxuICogQHBhcmFtIGNoaWxkIHtQSVhJLkRpc3BsYXlPYmplY3R9IFRoZSBEaXNwbGF5T2JqZWN0IHRvIGFkZCB0byB0aGUgY29udGFpbmVyXG4gKiBAcmV0dXJuIHtQSVhJLkRpc3BsYXlPYmplY3R9IFRoZSBjaGlsZCB0aGF0IHdhcyBhZGRlZC5cbiAqL1xuQ29udGFpbmVyLnByb3RvdHlwZS5hZGRDaGlsZCA9IGZ1bmN0aW9uIChjaGlsZClcbnsgXG4gICAgdmFyIGFyZ3VtZW50c0xlbmd0aCA9IGFyZ3VtZW50cy5sZW5ndGg7XG5cbiAgICAvLyBpZiB0aGVyZSBpcyBvbmx5IG9uZSBhcmd1bWVudCB3ZSBjYW4gYnlwYXNzIGxvb3BpbmcgdGhyb3VnaCB0aGUgdGhlbVxuICAgIGlmKGFyZ3VtZW50c0xlbmd0aCA+IDEpXG4gICAge1xuICAgICAgICAvLyBsb29wIHRocm91Z2ggdGhlIGFyZ3VtZW50cyBwcm9wZXJ0eSBhbmQgYWRkIGFsbCBjaGlsZHJlblxuICAgICAgICAvLyB1c2UgaXQgdGhlIHJpZ2h0IHdheSAoLmxlbmd0aCBhbmQgW2ldKSBzbyB0aGF0IHRoaXMgZnVuY3Rpb24gY2FuIHN0aWxsIGJlIG9wdGltaXNlZCBieSBKUyBydW50aW1lc1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFyZ3VtZW50c0xlbmd0aDsgaSsrKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmFkZENoaWxkKCBhcmd1bWVudHNbaV0gKTtcbiAgICAgICAgfVxuICAgIH0gICAgIFxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIC8vIGlmIHRoZSBjaGlsZCBoYXMgYSBwYXJlbnQgdGhlbiBsZXRzIHJlbW92ZSBpdCBhcyBQaXhpIG9iamVjdHMgY2FuIG9ubHkgZXhpc3QgaW4gb25lIHBsYWNlXG4gICAgICAgIGlmIChjaGlsZC5wYXJlbnQpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNoaWxkLnBhcmVudC5yZW1vdmVDaGlsZChjaGlsZCk7XG4gICAgICAgIH1cblxuICAgICAgICBjaGlsZC5wYXJlbnQgPSB0aGlzO1xuICAgICAgICBcbiAgICAgICAgdGhpcy5jaGlsZHJlbi5wdXNoKGNoaWxkKTtcblxuICAgICAgICAvLyBUT0RPIC0gbGV0cyBlaXRoZXIgZG8gYWxsIGNhbGxiYWNrcyBvciBhbGwgZXZlbnRzLi4gbm90IGJvdGghXG4gICAgICAgIHRoaXMub25DaGlsZHJlbkNoYW5nZSh0aGlzLmNoaWxkcmVuLmxlbmd0aC0xKTtcbiAgICAgICAgY2hpbGQuZW1pdCgnYWRkZWQnLCB0aGlzKTtcbiAgICB9XG5cbiAgICByZXR1cm4gY2hpbGQ7XG59O1xuXG4vKipcbiAqIEFkZHMgYSBjaGlsZCB0byB0aGUgY29udGFpbmVyIGF0IGEgc3BlY2lmaWVkIGluZGV4LiBJZiB0aGUgaW5kZXggaXMgb3V0IG9mIGJvdW5kcyBhbiBlcnJvciB3aWxsIGJlIHRocm93blxuICpcbiAqIEBwYXJhbSBjaGlsZCB7UElYSS5EaXNwbGF5T2JqZWN0fSBUaGUgY2hpbGQgdG8gYWRkXG4gKiBAcGFyYW0gaW5kZXgge251bWJlcn0gVGhlIGluZGV4IHRvIHBsYWNlIHRoZSBjaGlsZCBpblxuICogQHJldHVybiB7UElYSS5EaXNwbGF5T2JqZWN0fSBUaGUgY2hpbGQgdGhhdCB3YXMgYWRkZWQuXG4gKi9cbkNvbnRhaW5lci5wcm90b3R5cGUuYWRkQ2hpbGRBdCA9IGZ1bmN0aW9uIChjaGlsZCwgaW5kZXgpXG57XG4gICAgaWYgKGluZGV4ID49IDAgJiYgaW5kZXggPD0gdGhpcy5jaGlsZHJlbi5sZW5ndGgpXG4gICAge1xuICAgICAgICBpZiAoY2hpbGQucGFyZW50KVxuICAgICAgICB7XG4gICAgICAgICAgICBjaGlsZC5wYXJlbnQucmVtb3ZlQ2hpbGQoY2hpbGQpO1xuICAgICAgICB9XG5cbiAgICAgICAgY2hpbGQucGFyZW50ID0gdGhpcztcblxuICAgICAgICB0aGlzLmNoaWxkcmVuLnNwbGljZShpbmRleCwgMCwgY2hpbGQpO1xuXG4gICAgICAgIC8vIFRPRE8gLSBsZXRzIGVpdGhlciBkbyBhbGwgY2FsbGJhY2tzIG9yIGFsbCBldmVudHMuLiBub3QgYm90aCFcbiAgICAgICAgdGhpcy5vbkNoaWxkcmVuQ2hhbmdlKGluZGV4KTtcbiAgICAgICAgY2hpbGQuZW1pdCgnYWRkZWQnLCB0aGlzKTtcblxuICAgICAgICByZXR1cm4gY2hpbGQ7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihjaGlsZCArICdhZGRDaGlsZEF0OiBUaGUgaW5kZXggJysgaW5kZXggKycgc3VwcGxpZWQgaXMgb3V0IG9mIGJvdW5kcyAnICsgdGhpcy5jaGlsZHJlbi5sZW5ndGgpO1xuICAgIH1cbn07XG5cbi8qKlxuICogU3dhcHMgdGhlIHBvc2l0aW9uIG9mIDIgRGlzcGxheSBPYmplY3RzIHdpdGhpbiB0aGlzIGNvbnRhaW5lci5cbiAqXG4gKiBAcGFyYW0gY2hpbGQge1BJWEkuRGlzcGxheU9iamVjdH1cbiAqIEBwYXJhbSBjaGlsZDIge1BJWEkuRGlzcGxheU9iamVjdH1cbiAqL1xuQ29udGFpbmVyLnByb3RvdHlwZS5zd2FwQ2hpbGRyZW4gPSBmdW5jdGlvbiAoY2hpbGQsIGNoaWxkMilcbntcbiAgICBpZiAoY2hpbGQgPT09IGNoaWxkMilcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB2YXIgaW5kZXgxID0gdGhpcy5nZXRDaGlsZEluZGV4KGNoaWxkKTtcbiAgICB2YXIgaW5kZXgyID0gdGhpcy5nZXRDaGlsZEluZGV4KGNoaWxkMik7XG5cbiAgICBpZiAoaW5kZXgxIDwgMCB8fCBpbmRleDIgPCAwKVxuICAgIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdzd2FwQ2hpbGRyZW46IEJvdGggdGhlIHN1cHBsaWVkIERpc3BsYXlPYmplY3RzIG11c3QgYmUgY2hpbGRyZW4gb2YgdGhlIGNhbGxlci4nKTtcbiAgICB9XG5cbiAgICB0aGlzLmNoaWxkcmVuW2luZGV4MV0gPSBjaGlsZDI7XG4gICAgdGhpcy5jaGlsZHJlbltpbmRleDJdID0gY2hpbGQ7XG4gICAgdGhpcy5vbkNoaWxkcmVuQ2hhbmdlKGluZGV4MSA8IGluZGV4MiA/IGluZGV4MSA6IGluZGV4Mik7XG59O1xuXG4vKipcbiAqIFJldHVybnMgdGhlIGluZGV4IHBvc2l0aW9uIG9mIGEgY2hpbGQgRGlzcGxheU9iamVjdCBpbnN0YW5jZVxuICpcbiAqIEBwYXJhbSBjaGlsZCB7UElYSS5EaXNwbGF5T2JqZWN0fSBUaGUgRGlzcGxheU9iamVjdCBpbnN0YW5jZSB0byBpZGVudGlmeVxuICogQHJldHVybiB7bnVtYmVyfSBUaGUgaW5kZXggcG9zaXRpb24gb2YgdGhlIGNoaWxkIGRpc3BsYXkgb2JqZWN0IHRvIGlkZW50aWZ5XG4gKi9cbkNvbnRhaW5lci5wcm90b3R5cGUuZ2V0Q2hpbGRJbmRleCA9IGZ1bmN0aW9uIChjaGlsZClcbntcbiAgICB2YXIgaW5kZXggPSB0aGlzLmNoaWxkcmVuLmluZGV4T2YoY2hpbGQpO1xuXG4gICAgaWYgKGluZGV4ID09PSAtMSlcbiAgICB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignVGhlIHN1cHBsaWVkIERpc3BsYXlPYmplY3QgbXVzdCBiZSBhIGNoaWxkIG9mIHRoZSBjYWxsZXInKTtcbiAgICB9XG5cbiAgICByZXR1cm4gaW5kZXg7XG59O1xuXG4vKipcbiAqIENoYW5nZXMgdGhlIHBvc2l0aW9uIG9mIGFuIGV4aXN0aW5nIGNoaWxkIGluIHRoZSBkaXNwbGF5IG9iamVjdCBjb250YWluZXJcbiAqXG4gKiBAcGFyYW0gY2hpbGQge1BJWEkuRGlzcGxheU9iamVjdH0gVGhlIGNoaWxkIERpc3BsYXlPYmplY3QgaW5zdGFuY2UgZm9yIHdoaWNoIHlvdSB3YW50IHRvIGNoYW5nZSB0aGUgaW5kZXggbnVtYmVyXG4gKiBAcGFyYW0gaW5kZXgge251bWJlcn0gVGhlIHJlc3VsdGluZyBpbmRleCBudW1iZXIgZm9yIHRoZSBjaGlsZCBkaXNwbGF5IG9iamVjdFxuICovXG5Db250YWluZXIucHJvdG90eXBlLnNldENoaWxkSW5kZXggPSBmdW5jdGlvbiAoY2hpbGQsIGluZGV4KVxue1xuICAgIGlmIChpbmRleCA8IDAgfHwgaW5kZXggPj0gdGhpcy5jaGlsZHJlbi5sZW5ndGgpXG4gICAge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RoZSBzdXBwbGllZCBpbmRleCBpcyBvdXQgb2YgYm91bmRzJyk7XG4gICAgfVxuXG4gICAgdmFyIGN1cnJlbnRJbmRleCA9IHRoaXMuZ2V0Q2hpbGRJbmRleChjaGlsZCk7XG5cbiAgICB1dGlscy5yZW1vdmVJdGVtcyh0aGlzLmNoaWxkcmVuLCBjdXJyZW50SW5kZXgsIDEpOyAvLyByZW1vdmUgZnJvbSBvbGQgcG9zaXRpb25cbiAgICB0aGlzLmNoaWxkcmVuLnNwbGljZShpbmRleCwgMCwgY2hpbGQpOyAvL2FkZCBhdCBuZXcgcG9zaXRpb25cbiAgICB0aGlzLm9uQ2hpbGRyZW5DaGFuZ2UoaW5kZXgpO1xufTtcblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBjaGlsZCBhdCB0aGUgc3BlY2lmaWVkIGluZGV4XG4gKlxuICogQHBhcmFtIGluZGV4IHtudW1iZXJ9IFRoZSBpbmRleCB0byBnZXQgdGhlIGNoaWxkIGF0XG4gKiBAcmV0dXJuIHtQSVhJLkRpc3BsYXlPYmplY3R9IFRoZSBjaGlsZCBhdCB0aGUgZ2l2ZW4gaW5kZXgsIGlmIGFueS5cbiAqL1xuQ29udGFpbmVyLnByb3RvdHlwZS5nZXRDaGlsZEF0ID0gZnVuY3Rpb24gKGluZGV4KVxue1xuICAgIGlmIChpbmRleCA8IDAgfHwgaW5kZXggPj0gdGhpcy5jaGlsZHJlbi5sZW5ndGgpXG4gICAge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2dldENoaWxkQXQ6IFN1cHBsaWVkIGluZGV4ICcgKyBpbmRleCArICcgZG9lcyBub3QgZXhpc3QgaW4gdGhlIGNoaWxkIGxpc3QsIG9yIHRoZSBzdXBwbGllZCBEaXNwbGF5T2JqZWN0IGlzIG5vdCBhIGNoaWxkIG9mIHRoZSBjYWxsZXInKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5jaGlsZHJlbltpbmRleF07XG59O1xuXG4vKipcbiAqIFJlbW92ZXMgYSBjaGlsZCBmcm9tIHRoZSBjb250YWluZXIuXG4gKlxuICogQHBhcmFtIGNoaWxkIHtQSVhJLkRpc3BsYXlPYmplY3R9IFRoZSBEaXNwbGF5T2JqZWN0IHRvIHJlbW92ZVxuICogQHJldHVybiB7UElYSS5EaXNwbGF5T2JqZWN0fSBUaGUgY2hpbGQgdGhhdCB3YXMgcmVtb3ZlZC5cbiAqL1xuQ29udGFpbmVyLnByb3RvdHlwZS5yZW1vdmVDaGlsZCA9IGZ1bmN0aW9uIChjaGlsZClcbntcbiAgICB2YXIgYXJndW1lbnRzTGVuZ3RoID0gYXJndW1lbnRzLmxlbmd0aDtcblxuICAgIC8vIGlmIHRoZXJlIGlzIG9ubHkgb25lIGFyZ3VtZW50IHdlIGNhbiBieXBhc3MgbG9vcGluZyB0aHJvdWdoIHRoZSB0aGVtXG4gICAgaWYoYXJndW1lbnRzTGVuZ3RoID4gMSlcbiAgICB7XG4gICAgICAgIC8vIGxvb3AgdGhyb3VnaCB0aGUgYXJndW1lbnRzIHByb3BlcnR5IGFuZCBhZGQgYWxsIGNoaWxkcmVuXG4gICAgICAgIC8vIHVzZSBpdCB0aGUgcmlnaHQgd2F5ICgubGVuZ3RoIGFuZCBbaV0pIHNvIHRoYXQgdGhpcyBmdW5jdGlvbiBjYW4gc3RpbGwgYmUgb3B0aW1pc2VkIGJ5IEpTIHJ1bnRpbWVzXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXJndW1lbnRzTGVuZ3RoOyBpKyspXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMucmVtb3ZlQ2hpbGQoIGFyZ3VtZW50c1tpXSApO1xuICAgICAgICB9XG4gICAgfSAgICAgXG4gICAgZWxzZVxuICAgIHsgICBcbiAgICAgICAgdmFyIGluZGV4ID0gdGhpcy5jaGlsZHJlbi5pbmRleE9mKGNoaWxkKTtcblxuICAgICAgICBpZiAoaW5kZXggPT09IC0xKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjaGlsZC5wYXJlbnQgPSBudWxsO1xuICAgICAgICB1dGlscy5yZW1vdmVJdGVtcyh0aGlzLmNoaWxkcmVuLCBpbmRleCwgMSk7XG5cbiAgICAgICAgLy8gVE9ETyAtIGxldHMgZWl0aGVyIGRvIGFsbCBjYWxsYmFja3Mgb3IgYWxsIGV2ZW50cy4uIG5vdCBib3RoIVxuICAgICAgICB0aGlzLm9uQ2hpbGRyZW5DaGFuZ2UoaW5kZXgpO1xuICAgICAgICBjaGlsZC5lbWl0KCdyZW1vdmVkJywgdGhpcyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGNoaWxkO1xufTtcblxuLyoqXG4gKiBSZW1vdmVzIGEgY2hpbGQgZnJvbSB0aGUgc3BlY2lmaWVkIGluZGV4IHBvc2l0aW9uLlxuICpcbiAqIEBwYXJhbSBpbmRleCB7bnVtYmVyfSBUaGUgaW5kZXggdG8gZ2V0IHRoZSBjaGlsZCBmcm9tXG4gKiBAcmV0dXJuIHtQSVhJLkRpc3BsYXlPYmplY3R9IFRoZSBjaGlsZCB0aGF0IHdhcyByZW1vdmVkLlxuICovXG5Db250YWluZXIucHJvdG90eXBlLnJlbW92ZUNoaWxkQXQgPSBmdW5jdGlvbiAoaW5kZXgpXG57XG4gICAgdmFyIGNoaWxkID0gdGhpcy5nZXRDaGlsZEF0KGluZGV4KTtcblxuICAgIGNoaWxkLnBhcmVudCA9IG51bGw7XG4gICAgdXRpbHMucmVtb3ZlSXRlbXModGhpcy5jaGlsZHJlbiwgaW5kZXgsIDEpO1xuXG4gICAgLy8gVE9ETyAtIGxldHMgZWl0aGVyIGRvIGFsbCBjYWxsYmFja3Mgb3IgYWxsIGV2ZW50cy4uIG5vdCBib3RoIVxuICAgIHRoaXMub25DaGlsZHJlbkNoYW5nZShpbmRleCk7XG4gICAgY2hpbGQuZW1pdCgncmVtb3ZlZCcsIHRoaXMpO1xuXG4gICAgcmV0dXJuIGNoaWxkO1xufTtcblxuLyoqXG4gKiBSZW1vdmVzIGFsbCBjaGlsZHJlbiBmcm9tIHRoaXMgY29udGFpbmVyIHRoYXQgYXJlIHdpdGhpbiB0aGUgYmVnaW4gYW5kIGVuZCBpbmRleGVzLlxuICpcbiAqIEBwYXJhbSBiZWdpbkluZGV4IHtudW1iZXJ9IFRoZSBiZWdpbm5pbmcgcG9zaXRpb24uIERlZmF1bHQgdmFsdWUgaXMgMC5cbiAqIEBwYXJhbSBlbmRJbmRleCB7bnVtYmVyfSBUaGUgZW5kaW5nIHBvc2l0aW9uLiBEZWZhdWx0IHZhbHVlIGlzIHNpemUgb2YgdGhlIGNvbnRhaW5lci5cbiAqL1xuQ29udGFpbmVyLnByb3RvdHlwZS5yZW1vdmVDaGlsZHJlbiA9IGZ1bmN0aW9uIChiZWdpbkluZGV4LCBlbmRJbmRleClcbntcbiAgICB2YXIgYmVnaW4gPSBiZWdpbkluZGV4IHx8IDA7XG4gICAgdmFyIGVuZCA9IHR5cGVvZiBlbmRJbmRleCA9PT0gJ251bWJlcicgPyBlbmRJbmRleCA6IHRoaXMuY2hpbGRyZW4ubGVuZ3RoO1xuICAgIHZhciByYW5nZSA9IGVuZCAtIGJlZ2luO1xuICAgIHZhciByZW1vdmVkLCBpO1xuXG4gICAgaWYgKHJhbmdlID4gMCAmJiByYW5nZSA8PSBlbmQpXG4gICAge1xuICAgICAgICByZW1vdmVkID0gdGhpcy5jaGlsZHJlbi5zcGxpY2UoYmVnaW4sIHJhbmdlKTtcblxuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgcmVtb3ZlZC5sZW5ndGg7ICsraSlcbiAgICAgICAge1xuICAgICAgICAgICAgcmVtb3ZlZFtpXS5wYXJlbnQgPSBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5vbkNoaWxkcmVuQ2hhbmdlKGJlZ2luSW5kZXgpO1xuXG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCByZW1vdmVkLmxlbmd0aDsgKytpKVxuICAgICAgICB7XG4gICAgICAgICAgICByZW1vdmVkW2ldLmVtaXQoJ3JlbW92ZWQnLCB0aGlzKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiByZW1vdmVkO1xuICAgIH1cbiAgICBlbHNlIGlmIChyYW5nZSA9PT0gMCAmJiB0aGlzLmNoaWxkcmVuLmxlbmd0aCA9PT0gMClcbiAgICB7XG4gICAgICAgIHJldHVybiBbXTtcbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ3JlbW92ZUNoaWxkcmVuOiBudW1lcmljIHZhbHVlcyBhcmUgb3V0c2lkZSB0aGUgYWNjZXB0YWJsZSByYW5nZS4nKTtcbiAgICB9XG59O1xuXG4vKipcbiAqIFVzZWZ1bCBmdW5jdGlvbiB0aGF0IHJldHVybnMgYSB0ZXh0dXJlIG9mIHRoZSBkaXNwbGF5IG9iamVjdCB0aGF0IGNhbiB0aGVuIGJlIHVzZWQgdG8gY3JlYXRlIHNwcml0ZXNcbiAqIFRoaXMgY2FuIGJlIHF1aXRlIHVzZWZ1bCBpZiB5b3VyIGRpc3BsYXlPYmplY3QgaXMgc3RhdGljIC8gY29tcGxpY2F0ZWQgYW5kIG5lZWRzIHRvIGJlIHJldXNlZCBtdWx0aXBsZSB0aW1lcy5cbiAqXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuQ2FudmFzUmVuZGVyZXJ8UElYSS5XZWJHTFJlbmRlcmVyfSBUaGUgcmVuZGVyZXIgdXNlZCB0byBnZW5lcmF0ZSB0aGUgdGV4dHVyZS5cbiAqIEBwYXJhbSByZXNvbHV0aW9uIHtudW1iZXJ9IFRoZSByZXNvbHV0aW9uIG9mIHRoZSB0ZXh0dXJlIGJlaW5nIGdlbmVyYXRlZFxuICogQHBhcmFtIHNjYWxlTW9kZSB7bnVtYmVyfSBTZWUge0BsaW5rIFBJWEkuU0NBTEVfTU9ERVN9IGZvciBwb3NzaWJsZSB2YWx1ZXNcbiAqIEByZXR1cm4ge1BJWEkuVGV4dHVyZX0gYSB0ZXh0dXJlIG9mIHRoZSBkaXNwbGF5IG9iamVjdFxuICovXG5Db250YWluZXIucHJvdG90eXBlLmdlbmVyYXRlVGV4dHVyZSA9IGZ1bmN0aW9uIChyZW5kZXJlciwgcmVzb2x1dGlvbiwgc2NhbGVNb2RlKVxue1xuICAgIHZhciBib3VuZHMgPSB0aGlzLmdldExvY2FsQm91bmRzKCk7XG5cbiAgICB2YXIgcmVuZGVyVGV4dHVyZSA9IG5ldyBSZW5kZXJUZXh0dXJlKHJlbmRlcmVyLCBib3VuZHMud2lkdGggfCAwLCBib3VuZHMuaGVpZ2h0IHwgMCwgc2NhbGVNb2RlLCByZXNvbHV0aW9uKTtcblxuICAgIF90ZW1wTWF0cml4LnR4ID0gLWJvdW5kcy54O1xuICAgIF90ZW1wTWF0cml4LnR5ID0gLWJvdW5kcy55O1xuXG4gICAgcmVuZGVyVGV4dHVyZS5yZW5kZXIodGhpcywgX3RlbXBNYXRyaXgpO1xuXG4gICAgcmV0dXJuIHJlbmRlclRleHR1cmU7XG59O1xuXG4vKlxuICogVXBkYXRlcyB0aGUgdHJhbnNmb3JtIG9uIGFsbCBjaGlsZHJlbiBvZiB0aGlzIGNvbnRhaW5lciBmb3IgcmVuZGVyaW5nXG4gKlxuICogQHByaXZhdGVcbiAqL1xuQ29udGFpbmVyLnByb3RvdHlwZS51cGRhdGVUcmFuc2Zvcm0gPSBmdW5jdGlvbiAoKVxue1xuICAgIGlmICghdGhpcy52aXNpYmxlKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuZGlzcGxheU9iamVjdFVwZGF0ZVRyYW5zZm9ybSgpO1xuXG4gICAgZm9yICh2YXIgaSA9IDAsIGogPSB0aGlzLmNoaWxkcmVuLmxlbmd0aDsgaSA8IGo7ICsraSlcbiAgICB7XG4gICAgICAgIHRoaXMuY2hpbGRyZW5baV0udXBkYXRlVHJhbnNmb3JtKCk7XG4gICAgfVxuXG4gICAgdGhpcy5kaXJ0eVRyYW5zZm9ybSA9IGZhbHNlO1xufTtcblxuLy8gcGVyZm9ybWFuY2UgaW5jcmVhc2UgdG8gYXZvaWQgdXNpbmcgY2FsbC4uICgxMHggZmFzdGVyKVxuQ29udGFpbmVyLnByb3RvdHlwZS5jb250YWluZXJVcGRhdGVUcmFuc2Zvcm0gPSBDb250YWluZXIucHJvdG90eXBlLnVwZGF0ZVRyYW5zZm9ybTtcblxuLyoqXG4gKiBSZXRyaWV2ZXMgdGhlIGJvdW5kcyBvZiB0aGUgQ29udGFpbmVyIGFzIGEgcmVjdGFuZ2xlLiBUaGUgYm91bmRzIGNhbGN1bGF0aW9uIHRha2VzIGFsbCB2aXNpYmxlIGNoaWxkcmVuIGludG8gY29uc2lkZXJhdGlvbi5cbiAqXG4gKiBAcmV0dXJuIHtQSVhJLlJlY3RhbmdsZX0gVGhlIHJlY3Rhbmd1bGFyIGJvdW5kaW5nIGFyZWFcbiAqL1xuQ29udGFpbmVyLnByb3RvdHlwZS5nZXRCb3VuZHMgPSBmdW5jdGlvbiAoKVxue1xuICAgIGlmKCF0aGlzLl9jdXJyZW50Qm91bmRzKVxuICAgIHtcblxuICAgICAgICBpZiAodGhpcy5jaGlsZHJlbi5sZW5ndGggPT09IDApXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiBtYXRoLlJlY3RhbmdsZS5FTVBUWTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFRPRE8gdGhlIGJvdW5kcyBoYXZlIGFscmVhZHkgYmVlbiBjYWxjdWxhdGVkIHRoaXMgcmVuZGVyIHNlc3Npb24gc28gcmV0dXJuIHdoYXQgd2UgaGF2ZVxuXG4gICAgICAgIHZhciBtaW5YID0gSW5maW5pdHk7XG4gICAgICAgIHZhciBtaW5ZID0gSW5maW5pdHk7XG5cbiAgICAgICAgdmFyIG1heFggPSAtSW5maW5pdHk7XG4gICAgICAgIHZhciBtYXhZID0gLUluZmluaXR5O1xuXG4gICAgICAgIHZhciBjaGlsZEJvdW5kcztcbiAgICAgICAgdmFyIGNoaWxkTWF4WDtcbiAgICAgICAgdmFyIGNoaWxkTWF4WTtcblxuICAgICAgICB2YXIgY2hpbGRWaXNpYmxlID0gZmFsc2U7XG5cbiAgICAgICAgZm9yICh2YXIgaSA9IDAsIGogPSB0aGlzLmNoaWxkcmVuLmxlbmd0aDsgaSA8IGo7ICsraSlcbiAgICAgICAge1xuICAgICAgICAgICAgdmFyIGNoaWxkID0gdGhpcy5jaGlsZHJlbltpXTtcblxuICAgICAgICAgICAgaWYgKCFjaGlsZC52aXNpYmxlKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjaGlsZFZpc2libGUgPSB0cnVlO1xuXG4gICAgICAgICAgICBjaGlsZEJvdW5kcyA9IHRoaXMuY2hpbGRyZW5baV0uZ2V0Qm91bmRzKCk7XG5cbiAgICAgICAgICAgIG1pblggPSBtaW5YIDwgY2hpbGRCb3VuZHMueCA/IG1pblggOiBjaGlsZEJvdW5kcy54O1xuICAgICAgICAgICAgbWluWSA9IG1pblkgPCBjaGlsZEJvdW5kcy55ID8gbWluWSA6IGNoaWxkQm91bmRzLnk7XG5cbiAgICAgICAgICAgIGNoaWxkTWF4WCA9IGNoaWxkQm91bmRzLndpZHRoICsgY2hpbGRCb3VuZHMueDtcbiAgICAgICAgICAgIGNoaWxkTWF4WSA9IGNoaWxkQm91bmRzLmhlaWdodCArIGNoaWxkQm91bmRzLnk7XG5cbiAgICAgICAgICAgIG1heFggPSBtYXhYID4gY2hpbGRNYXhYID8gbWF4WCA6IGNoaWxkTWF4WDtcbiAgICAgICAgICAgIG1heFkgPSBtYXhZID4gY2hpbGRNYXhZID8gbWF4WSA6IGNoaWxkTWF4WTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghY2hpbGRWaXNpYmxlKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gbWF0aC5SZWN0YW5nbGUuRU1QVFk7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgYm91bmRzID0gdGhpcy5fYm91bmRzO1xuXG4gICAgICAgIGJvdW5kcy54ID0gbWluWDtcbiAgICAgICAgYm91bmRzLnkgPSBtaW5ZO1xuICAgICAgICBib3VuZHMud2lkdGggPSBtYXhYIC0gbWluWDtcbiAgICAgICAgYm91bmRzLmhlaWdodCA9IG1heFkgLSBtaW5ZO1xuXG4gICAgICAgIHRoaXMuX2N1cnJlbnRCb3VuZHMgPSBib3VuZHM7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuX2N1cnJlbnRCb3VuZHM7XG59O1xuXG5Db250YWluZXIucHJvdG90eXBlLmNvbnRhaW5lckdldEJvdW5kcyA9IENvbnRhaW5lci5wcm90b3R5cGUuZ2V0Qm91bmRzO1xuXG4vKipcbiAqIFJldHJpZXZlcyB0aGUgbm9uLWdsb2JhbCBsb2NhbCBib3VuZHMgb2YgdGhlIENvbnRhaW5lciBhcyBhIHJlY3RhbmdsZS5cbiAqIFRoZSBjYWxjdWxhdGlvbiB0YWtlcyBhbGwgdmlzaWJsZSBjaGlsZHJlbiBpbnRvIGNvbnNpZGVyYXRpb24uXG4gKlxuICogQHJldHVybiB7UElYSS5SZWN0YW5nbGV9IFRoZSByZWN0YW5ndWxhciBib3VuZGluZyBhcmVhXG4gKi9cbkNvbnRhaW5lci5wcm90b3R5cGUuZ2V0TG9jYWxCb3VuZHMgPSBmdW5jdGlvbiAoKVxue1xuICAgIHZhciBtYXRyaXhDYWNoZSA9IHRoaXMud29ybGRUcmFuc2Zvcm07XG5cbiAgICB0aGlzLndvcmxkVHJhbnNmb3JtID0gbWF0aC5NYXRyaXguSURFTlRJVFk7XG5cbiAgICBmb3IgKHZhciBpID0gMCwgaiA9IHRoaXMuY2hpbGRyZW4ubGVuZ3RoOyBpIDwgajsgKytpKVxuICAgIHtcbiAgICAgICAgdGhpcy5jaGlsZHJlbltpXS51cGRhdGVUcmFuc2Zvcm0oKTtcbiAgICB9XG5cbiAgICB0aGlzLndvcmxkVHJhbnNmb3JtID0gbWF0cml4Q2FjaGU7XG5cbiAgICB0aGlzLl9jdXJyZW50Qm91bmRzID0gbnVsbDtcblxuICAgIHJldHVybiB0aGlzLmdldEJvdW5kcyggbWF0aC5NYXRyaXguSURFTlRJVFkgKTtcbn07XG5cbi8qKlxuICogUmVuZGVycyB0aGUgb2JqZWN0IHVzaW5nIHRoZSBXZWJHTCByZW5kZXJlclxuICpcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5XZWJHTFJlbmRlcmVyfSBUaGUgcmVuZGVyZXJcbiAqL1xuQ29udGFpbmVyLnByb3RvdHlwZS5yZW5kZXJXZWJHTCA9IGZ1bmN0aW9uIChyZW5kZXJlcilcbntcblxuICAgIC8vIGlmIHRoZSBvYmplY3QgaXMgbm90IHZpc2libGUgb3IgdGhlIGFscGhhIGlzIDAgdGhlbiBubyBuZWVkIHRvIHJlbmRlciB0aGlzIGVsZW1lbnRcbiAgICBpZiAoIXRoaXMudmlzaWJsZSB8fCB0aGlzLndvcmxkQWxwaGEgPD0gMCB8fCAhdGhpcy5yZW5kZXJhYmxlKVxuICAgIHtcbiAgICAgIFxuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFyIGksIGo7XG5cbiAgICAvLyBkbyBhIHF1aWNrIGNoZWNrIHRvIHNlZSBpZiB0aGlzIGVsZW1lbnQgaGFzIGEgbWFzayBvciBhIGZpbHRlci5cbiAgICBpZiAodGhpcy5fbWFzayB8fCB0aGlzLl9maWx0ZXJzKVxuICAgIHtcbiAgICAgICAgcmVuZGVyZXIuY3VycmVudFJlbmRlcmVyLmZsdXNoKCk7XG5cbiAgICAgICAgLy8gcHVzaCBmaWx0ZXIgZmlyc3QgYXMgd2UgbmVlZCB0byBlbnN1cmUgdGhlIHN0ZW5jaWwgYnVmZmVyIGlzIGNvcnJlY3QgZm9yIGFueSBtYXNraW5nXG4gICAgICAgIGlmICh0aGlzLl9maWx0ZXJzICYmIHRoaXMuX2ZpbHRlcnMubGVuZ3RoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLnB1c2hGaWx0ZXIodGhpcywgdGhpcy5fZmlsdGVycyk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5fbWFzaylcbiAgICAgICAge1xuICAgICAgICAgICAgcmVuZGVyZXIubWFza01hbmFnZXIucHVzaE1hc2sodGhpcywgdGhpcy5fbWFzayk7XG4gICAgICAgIH1cblxuICAgICAgICByZW5kZXJlci5jdXJyZW50UmVuZGVyZXIuc3RhcnQoKTtcblxuICAgICAgICAvLyBhZGQgdGhpcyBvYmplY3QgdG8gdGhlIGJhdGNoLCBvbmx5IHJlbmRlcmVkIGlmIGl0IGhhcyBhIHRleHR1cmUuXG4gICAgICAgIHRoaXMuX3JlbmRlcldlYkdMKHJlbmRlcmVyKTtcblxuICAgICAgICAvLyBub3cgbG9vcCB0aHJvdWdoIHRoZSBjaGlsZHJlbiBhbmQgbWFrZSBzdXJlIHRoZXkgZ2V0IHJlbmRlcmVkXG4gICAgICAgIGZvciAoaSA9IDAsIGogPSB0aGlzLmNoaWxkcmVuLmxlbmd0aDsgaSA8IGo7IGkrKylcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5jaGlsZHJlbltpXS5yZW5kZXJXZWJHTChyZW5kZXJlcik7XG4gICAgICAgIH1cblxuICAgICAgICByZW5kZXJlci5jdXJyZW50UmVuZGVyZXIuZmx1c2goKTtcblxuICAgICAgICBpZiAodGhpcy5fbWFzaylcbiAgICAgICAge1xuICAgICAgICAgICAgcmVuZGVyZXIubWFza01hbmFnZXIucG9wTWFzayh0aGlzLCB0aGlzLl9tYXNrKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLl9maWx0ZXJzKVxuICAgICAgICB7XG4gICAgICAgICAgICByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLnBvcEZpbHRlcigpO1xuXG4gICAgICAgIH1cbiAgICAgICAgcmVuZGVyZXIuY3VycmVudFJlbmRlcmVyLnN0YXJ0KCk7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHRoaXMuX3JlbmRlcldlYkdMKHJlbmRlcmVyKTtcblxuICAgICAgICAvLyBzaW1wbGUgcmVuZGVyIGNoaWxkcmVuIVxuICAgICAgICBmb3IgKGkgPSAwLCBqID0gdGhpcy5jaGlsZHJlbi5sZW5ndGg7IGkgPCBqOyArK2kpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuY2hpbGRyZW5baV0ucmVuZGVyV2ViR0wocmVuZGVyZXIpO1xuICAgICAgICB9XG4gICAgfVxufTtcblxuLyoqXG4gKiBUbyBiZSBvdmVycmlkZGVuIGJ5IHRoZSBzdWJjbGFzc1xuICpcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5XZWJHTFJlbmRlcmVyfSBUaGUgcmVuZGVyZXJcbiAqIEBwcml2YXRlXG4gKi9cbkNvbnRhaW5lci5wcm90b3R5cGUuX3JlbmRlcldlYkdMID0gZnVuY3Rpb24gKHJlbmRlcmVyKSAvLyBqc2hpbnQgdW51c2VkOmZhbHNlXG57XG4gICAgLy8gdGhpcyBpcyB3aGVyZSBjb250ZW50IGl0c2VsZiBnZXRzIHJlbmRlcmVkLi4uXG59O1xuXG4vKipcbiAqIFRvIGJlIG92ZXJyaWRkZW4gYnkgdGhlIHN1YmNsYXNzXG4gKlxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLkNhbnZhc1JlbmRlcmVyfSBUaGUgcmVuZGVyZXJcbiAqIEBwcml2YXRlXG4gKi9cbkNvbnRhaW5lci5wcm90b3R5cGUuX3JlbmRlckNhbnZhcyA9IGZ1bmN0aW9uIChyZW5kZXJlcikgLy8ganNoaW50IHVudXNlZDpmYWxzZVxue1xuICAgIC8vIHRoaXMgaXMgd2hlcmUgY29udGVudCBpdHNlbGYgZ2V0cyByZW5kZXJlZC4uLlxufTtcblxuXG4vKipcbiAqIFJlbmRlcnMgdGhlIG9iamVjdCB1c2luZyB0aGUgQ2FudmFzIHJlbmRlcmVyXG4gKlxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLkNhbnZhc1JlbmRlcmVyfSBUaGUgcmVuZGVyZXJcbiAqL1xuQ29udGFpbmVyLnByb3RvdHlwZS5yZW5kZXJDYW52YXMgPSBmdW5jdGlvbiAocmVuZGVyZXIpXG57XG4gICAgLy8gaWYgbm90IHZpc2libGUgb3IgdGhlIGFscGhhIGlzIDAgdGhlbiBubyBuZWVkIHRvIHJlbmRlciB0aGlzXG4gICAgaWYgKCF0aGlzLnZpc2libGUgfHwgdGhpcy5hbHBoYSA8PSAwIHx8ICF0aGlzLnJlbmRlcmFibGUpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX21hc2spXG4gICAge1xuICAgICAgICByZW5kZXJlci5tYXNrTWFuYWdlci5wdXNoTWFzayh0aGlzLl9tYXNrLCByZW5kZXJlcik7XG4gICAgfVxuXG4gICAgdGhpcy5fcmVuZGVyQ2FudmFzKHJlbmRlcmVyKTtcbiAgICBmb3IgKHZhciBpID0gMCwgaiA9IHRoaXMuY2hpbGRyZW4ubGVuZ3RoOyBpIDwgajsgKytpKVxuICAgIHtcbiAgICAgICAgdGhpcy5jaGlsZHJlbltpXS5yZW5kZXJDYW52YXMocmVuZGVyZXIpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLl9tYXNrKVxuICAgIHtcbiAgICAgICAgcmVuZGVyZXIubWFza01hbmFnZXIucG9wTWFzayhyZW5kZXJlcik7XG4gICAgfVxufTtcblxuLyoqXG4gKiBEZXN0cm95cyB0aGUgY29udGFpbmVyXG4gKiBAcGFyYW0gW2Rlc3Ryb3lDaGlsZHJlbj1mYWxzZV0ge2Jvb2xlYW59IGlmIHNldCB0byB0cnVlLCBhbGwgdGhlIGNoaWxkcmVuIHdpbGwgaGF2ZSB0aGVpciBkZXN0cm95IG1ldGhvZCBjYWxsZWQgYXMgd2VsbFxuICovXG5Db250YWluZXIucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoZGVzdHJveUNoaWxkcmVuKVxue1xuICAgIERpc3BsYXlPYmplY3QucHJvdG90eXBlLmRlc3Ryb3kuY2FsbCh0aGlzKTtcblxuICAgIGlmIChkZXN0cm95Q2hpbGRyZW4pXG4gICAge1xuICAgICAgICBmb3IgKHZhciBpID0gMCwgaiA9IHRoaXMuY2hpbGRyZW4ubGVuZ3RoOyBpIDwgajsgKytpKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmNoaWxkcmVuW2ldLmRlc3Ryb3koZGVzdHJveUNoaWxkcmVuKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMucmVtb3ZlQ2hpbGRyZW4oKTtcblxuICAgIHRoaXMuY2hpbGRyZW4gPSBudWxsO1xufTtcbiIsInZhciBtYXRoID0gcmVxdWlyZSgnLi4vbWF0aCcpLFxuICAgIFJlbmRlclRleHR1cmUgPSByZXF1aXJlKCcuLi90ZXh0dXJlcy9SZW5kZXJUZXh0dXJlJyksXG4gICAgRXZlbnRFbWl0dGVyID0gcmVxdWlyZSgnZXZlbnRlbWl0dGVyMycpLFxuICAgIENPTlNUID0gcmVxdWlyZSgnLi4vY29uc3QnKSxcbiAgICBfdGVtcE1hdHJpeCA9IG5ldyBtYXRoLk1hdHJpeCgpLFxuICAgIF90ZW1wRGlzcGxheU9iamVjdFBhcmVudCA9IHt3b3JsZFRyYW5zZm9ybTpuZXcgbWF0aC5NYXRyaXgoKSwgd29ybGRBbHBoYToxLCBjaGlsZHJlbjpbXX07XG5cblxuLyoqXG4gKiBUaGUgYmFzZSBjbGFzcyBmb3IgYWxsIG9iamVjdHMgdGhhdCBhcmUgcmVuZGVyZWQgb24gdGhlIHNjcmVlbi5cbiAqIFRoaXMgaXMgYW4gYWJzdHJhY3QgY2xhc3MgYW5kIHNob3VsZCBub3QgYmUgdXNlZCBvbiBpdHMgb3duIHJhdGhlciBpdCBzaG91bGQgYmUgZXh0ZW5kZWQuXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBFdmVudEVtaXR0ZXJcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKi9cbmZ1bmN0aW9uIERpc3BsYXlPYmplY3QoKVxue1xuICAgIEV2ZW50RW1pdHRlci5jYWxsKHRoaXMpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGNvb3JkaW5hdGUgb2YgdGhlIG9iamVjdCByZWxhdGl2ZSB0byB0aGUgbG9jYWwgY29vcmRpbmF0ZXMgb2YgdGhlIHBhcmVudC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuUG9pbnR9XG4gICAgICovXG4gICAgdGhpcy5wb3NpdGlvbiA9IG5ldyBtYXRoLlBvaW50KCk7XG4gICAgdGhpcy5fcG9zaXRpb24gPSBuZXcgQ2FjaGVQb2ludCh0aGlzKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBzY2FsZSBmYWN0b3Igb2YgdGhlIG9iamVjdC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuUG9pbnR9XG4gICAgICovXG4gICAgdGhpcy5zY2FsZSA9IG5ldyBtYXRoLlBvaW50KDEsIDEpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHBpdm90IHBvaW50IG9mIHRoZSBkaXNwbGF5T2JqZWN0IHRoYXQgaXQgcm90YXRlcyBhcm91bmRcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuUG9pbnR9XG4gICAgICovXG4gICAgdGhpcy5waXZvdCA9IG5ldyBtYXRoLlBvaW50KDAsIDApO1xuXG5cbiAgICAvKipcbiAgICAgKiBUaGUgc2tldyBmYWN0b3IgZm9yIHRoZSBvYmplY3QgaW4gcmFkaWFucy5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuUG9pbnR9XG4gICAgICovXG4gICAgdGhpcy5za2V3ID0gbmV3IG1hdGguUG9pbnQoMCwgMCk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgcm90YXRpb24gb2YgdGhlIG9iamVjdCBpbiByYWRpYW5zLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMuX3JvdGF0aW9uID0gMDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBvcGFjaXR5IG9mIHRoZSBvYmplY3QuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy5hbHBoYSA9IDE7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgdmlzaWJpbGl0eSBvZiB0aGUgb2JqZWN0LiBJZiBmYWxzZSB0aGUgb2JqZWN0IHdpbGwgbm90IGJlIGRyYXduLCBhbmRcbiAgICAgKiB0aGUgdXBkYXRlVHJhbnNmb3JtIGZ1bmN0aW9uIHdpbGwgbm90IGJlIGNhbGxlZC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICovXG4gICAgdGhpcy52aXNpYmxlID0gdHJ1ZTtcblxuICAgIC8qKlxuICAgICAqIENhbiB0aGlzIG9iamVjdCBiZSByZW5kZXJlZCwgaWYgZmFsc2UgdGhlIG9iamVjdCB3aWxsIG5vdCBiZSBkcmF3biBidXQgdGhlIHVwZGF0ZVRyYW5zZm9ybVxuICAgICAqIG1ldGhvZHMgd2lsbCBzdGlsbCBiZSBjYWxsZWQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqL1xuICAgIHRoaXMucmVuZGVyYWJsZSA9IHRydWU7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgZGlzcGxheSBvYmplY3QgY29udGFpbmVyIHRoYXQgY29udGFpbnMgdGhpcyBkaXNwbGF5IG9iamVjdC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuQ29udGFpbmVyfVxuICAgICAqIEByZWFkT25seVxuICAgICAqL1xuICAgIHRoaXMucGFyZW50ID0gbnVsbDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBtdWx0aXBsaWVkIGFscGhhIG9mIHRoZSBkaXNwbGF5T2JqZWN0XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQHJlYWRPbmx5XG4gICAgICovXG4gICAgdGhpcy53b3JsZEFscGhhID0gMTtcblxuICAgIC8qKlxuICAgICAqIEN1cnJlbnQgdHJhbnNmb3JtIG9mIHRoZSBvYmplY3QgYmFzZWQgb24gd29ybGQgKHBhcmVudCkgZmFjdG9yc1xuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5NYXRyaXh9XG4gICAgICogQHJlYWRPbmx5XG4gICAgICovXG4gICAgdGhpcy53b3JsZFRyYW5zZm9ybSA9IG5ldyBtYXRoLk1hdHJpeCgpO1xuICAgIHRoaXMubG9jYWxUcmFuc2Zvcm0gPSBuZXcgbWF0aC5NYXRyaXgoKTtcblxuXG4gICAgLyoqXG4gICAgICogVGhlIGFyZWEgdGhlIGZpbHRlciBpcyBhcHBsaWVkIHRvLiBUaGlzIGlzIHVzZWQgYXMgbW9yZSBvZiBhbiBvcHRpbWlzYXRpb25cbiAgICAgKiByYXRoZXIgdGhhbiBmaWd1cmluZyBvdXQgdGhlIGRpbWVuc2lvbnMgb2YgdGhlIGRpc3BsYXlPYmplY3QgZWFjaCBmcmFtZSB5b3UgY2FuIHNldCB0aGlzIHJlY3RhbmdsZVxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5SZWN0YW5nbGV9XG4gICAgICovXG4gICAgdGhpcy5maWx0ZXJBcmVhID0gbnVsbDtcblxuICAgIC8qKlxuICAgICAqIGNhY2hlZCBzaW4gcm90YXRpb25cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX3NyID0gMDtcblxuICAgIC8qKlxuICAgICAqIGNhY2hlZCBjb3Mgcm90YXRpb25cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX2NyID0gMTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBvcmlnaW5hbCwgY2FjaGVkIGJvdW5kcyBvZiB0aGUgb2JqZWN0XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlJlY3RhbmdsZX1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX2JvdW5kcyA9IG5ldyBtYXRoLlJlY3RhbmdsZSgwLCAwLCAxLCAxKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBtb3N0IHVwLXRvLWRhdGUgYm91bmRzIG9mIHRoZSBvYmplY3RcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuUmVjdGFuZ2xlfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fY3VycmVudEJvdW5kcyA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgb3JpZ2luYWwsIGNhY2hlZCBtYXNrIG9mIHRoZSBvYmplY3RcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuUmVjdGFuZ2xlfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fbWFzayA9IG51bGw7XG5cbiAgICB0aGlzLmRpcnR5VHJhbnNmb3JtID0gdHJ1ZTtcbn1cblxuLy8gY29uc3RydWN0b3JcbkRpc3BsYXlPYmplY3QucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShFdmVudEVtaXR0ZXIucHJvdG90eXBlKTtcbkRpc3BsYXlPYmplY3QucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gRGlzcGxheU9iamVjdDtcbm1vZHVsZS5leHBvcnRzID0gRGlzcGxheU9iamVjdDtcblxudmFyIENhY2hlUG9pbnQgPSBmdW5jdGlvbihkb2Mpe1xuICAgIFxuICAgIHRoaXMuZG9jID0gZG9jO1xuXG4gICAgdGhpcy54ID0gMDtcbiAgICB0aGlzLnkgPSAwO1xufVxuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhDYWNoZVBvaW50LnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFRoZSBwb3NpdGlvbiBvZiB0aGUgZGlzcGxheU9iamVjdCBvbiB0aGUgeCBheGlzIHJlbGF0aXZlIHRvIHRoZSBsb2NhbCBjb29yZGluYXRlcyBvZiB0aGUgcGFyZW50LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLkRpc3BsYXlPYmplY3QjXG4gICAgICovXG4gICAgeDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmRvYy5wb3NpdGlvbi54O1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5kb2MucG9zaXRpb24ueCA9IHZhbHVlO1xuICAgICAgICAgICAgdGhpcy5kb2MuZGlydHlUcmFuc2Zvcm0gPSB0cnVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIHk6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5kb2MucG9zaWl0b24ueTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuZG9jLnBvc2l0aW9uLnkgPSB2YWx1ZTtcbiAgICAgICAgICAgIHRoaXMuZG9jLmRpcnR5VHJhbnNmb3JtID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuXG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKERpc3BsYXlPYmplY3QucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogVGhlIHBvc2l0aW9uIG9mIHRoZSBkaXNwbGF5T2JqZWN0IG9uIHRoZSB4IGF4aXMgcmVsYXRpdmUgdG8gdGhlIGxvY2FsIGNvb3JkaW5hdGVzIG9mIHRoZSBwYXJlbnQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuRGlzcGxheU9iamVjdCNcbiAgICAgKi9cbiAgICB4OiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMucG9zaXRpb24ueDtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMucG9zaXRpb24ueCA9IHZhbHVlO1xuICAgICAgICAgICAgdGhpcy5kaXJ0eVRyYW5zZm9ybSA9IHRydWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVGhlIHBvc2l0aW9uIG9mIHRoZSBkaXNwbGF5T2JqZWN0IG9uIHRoZSB5IGF4aXMgcmVsYXRpdmUgdG8gdGhlIGxvY2FsIGNvb3JkaW5hdGVzIG9mIHRoZSBwYXJlbnQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuRGlzcGxheU9iamVjdCNcbiAgICAgKi9cbiAgICB5OiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMucG9zaXRpb24ueTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMucG9zaXRpb24ueSA9IHZhbHVlO1xuICAgICAgICAgICAgdGhpcy5kaXJ0eVRyYW5zZm9ybSA9IHRydWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgc2NhbGVYOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuc2NhbGUueDtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuc2NhbGUueCA9IHZhbHVlO1xuICAgICAgICAgICAgdGhpcy5kaXJ0eVRyYW5zZm9ybSA9IHRydWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVGhlIHBvc2l0aW9uIG9mIHRoZSBkaXNwbGF5T2JqZWN0IG9uIHRoZSB5IGF4aXMgcmVsYXRpdmUgdG8gdGhlIGxvY2FsIGNvb3JkaW5hdGVzIG9mIHRoZSBwYXJlbnQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuRGlzcGxheU9iamVjdCNcbiAgICAgKi9cbiAgICBzY2FsZVk6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5zY2FsZS55O1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5zY2FsZS55ID0gdmFsdWU7XG4gICAgICAgICAgICB0aGlzLmRpcnR5VHJhbnNmb3JtID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICByb3RhdGlvbjoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9yb3RhdGlvbjtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuX3JvdGF0aW9uID0gdmFsdWU7XG4gICAgICAgICAgICB0aGlzLmRpcnR5VHJhbnNmb3JtID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMuX3NyID0gTWF0aC5zaW4odmFsdWUpO1xuICAgICAgICAgICAgdGhpcy5fY3IgPSBNYXRoLmNvcyh2YWx1ZSk7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVGhlIHBvc2l0aW9uIG9mIHRoZSBkaXNwbGF5T2JqZWN0IG9uIHRoZSB5IGF4aXMgcmVsYXRpdmUgdG8gdGhlIGxvY2FsIGNvb3JkaW5hdGVzIG9mIHRoZSBwYXJlbnQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuRGlzcGxheU9iamVjdCNcbiAgICAgKi9cbiAgICBzY2FsZVk6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5zY2FsZS55O1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5zY2FsZS55ID0gdmFsdWU7XG4gICAgICAgICAgICB0aGlzLmRpcnR5VHJhbnNmb3JtID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBJbmRpY2F0ZXMgaWYgdGhlIHNwcml0ZSBpcyBnbG9iYWxseSB2aXNpYmxlLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5EaXNwbGF5T2JqZWN0I1xuICAgICAqIEByZWFkb25seVxuICAgICAqL1xuICAgIHdvcmxkVmlzaWJsZToge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHZhciBpdGVtID0gdGhpcztcblxuICAgICAgICAgICAgZG8ge1xuICAgICAgICAgICAgICAgIGlmICghaXRlbS52aXNpYmxlKVxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGl0ZW0gPSBpdGVtLnBhcmVudDtcbiAgICAgICAgICAgIH0gd2hpbGUgKGl0ZW0pO1xuXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBTZXRzIGEgbWFzayBmb3IgdGhlIGRpc3BsYXlPYmplY3QuIEEgbWFzayBpcyBhbiBvYmplY3QgdGhhdCBsaW1pdHMgdGhlIHZpc2liaWxpdHkgb2YgYW4gb2JqZWN0IHRvIHRoZSBzaGFwZSBvZiB0aGUgbWFzayBhcHBsaWVkIHRvIGl0LlxuICAgICAqIEluIFBJWEkgYSByZWd1bGFyIG1hc2sgbXVzdCBiZSBhIFBJWEkuR3JhcGhpY3Mgb3IgYSBQSVhJLlNwcml0ZSBvYmplY3QuIFRoaXMgYWxsb3dzIGZvciBtdWNoIGZhc3RlciBtYXNraW5nIGluIGNhbnZhcyBhcyBpdCB1dGlsaXNlcyBzaGFwZSBjbGlwcGluZy5cbiAgICAgKiBUbyByZW1vdmUgYSBtYXNrLCBzZXQgdGhpcyBwcm9wZXJ0eSB0byBudWxsLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5HcmFwaGljc3xQSVhJLlNwcml0ZX1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5EaXNwbGF5T2JqZWN0I1xuICAgICAqL1xuICAgIG1hc2s6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fbWFzaztcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGlmICh0aGlzLl9tYXNrKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHRoaXMuX21hc2sucmVuZGVyYWJsZSA9IHRydWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuX21hc2sgPSB2YWx1ZTtcblxuICAgICAgICAgICAgaWYgKHRoaXMuX21hc2spXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdGhpcy5fbWFzay5yZW5kZXJhYmxlID0gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgZmlsdGVycyBmb3IgdGhlIGRpc3BsYXlPYmplY3QuXG4gICAgICogKiBJTVBPUlRBTlQ6IFRoaXMgaXMgYSB3ZWJHTCBvbmx5IGZlYXR1cmUgYW5kIHdpbGwgYmUgaWdub3JlZCBieSB0aGUgY2FudmFzIHJlbmRlcmVyLlxuICAgICAqIFRvIHJlbW92ZSBmaWx0ZXJzIHNpbXBseSBzZXQgdGhpcyBwcm9wZXJ0eSB0byAnbnVsbCdcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuQWJzdHJhY3RGaWx0ZXJbXX1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5EaXNwbGF5T2JqZWN0I1xuICAgICAqL1xuICAgIGZpbHRlcnM6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fZmlsdGVycyAmJiB0aGlzLl9maWx0ZXJzLnNsaWNlKCk7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLl9maWx0ZXJzID0gdmFsdWUgJiYgdmFsdWUuc2xpY2UoKTtcbiAgICAgICAgfVxuICAgIH1cblxufSk7XG5cbi8qXG4gKiBVcGRhdGVzIHRoZSBvYmplY3QgdHJhbnNmb3JtIGZvciByZW5kZXJpbmdcbiAqXG4gKiBUT0RPIC0gT3B0aW1pemF0aW9uIHBhc3MhXG4gKi9cbkRpc3BsYXlPYmplY3QucHJvdG90eXBlLnVwZGF0ZVRyYW5zZm9ybSA9IGZ1bmN0aW9uICgpXG57XG4gICAgdmFyIHB0ID0gdGhpcy5wYXJlbnQud29ybGRUcmFuc2Zvcm07XG4gICAgdmFyIHd0ID0gdGhpcy53b3JsZFRyYW5zZm9ybTtcbiAgICB2YXIgbHQgPSB0aGlzLmxvY2FsVHJhbnNmb3JtO1xuXG4gICAgaWYodGhpcy5kaXJ0eVRyYW5zZm9ybSlcbiAgICB7XG4gICAgICAgIC8vIGdldCB0aGUgbWF0cml4IHZhbHVlcyBvZiB0aGUgZGlzcGxheW9iamVjdCBiYXNlZCBvbiBpdHMgdHJhbnNmb3JtIHByb3BlcnRpZXMuLlxuICAgICAgICBsdC5hICA9ICB0aGlzLl9jciAqIHRoaXMuc2NhbGUueDtcbiAgICAgICAgbHQuYiAgPSAgdGhpcy5fc3IgKiB0aGlzLnNjYWxlLng7XG4gICAgICAgIGx0LmMgID0gLXRoaXMuX3NyICogdGhpcy5zY2FsZS55O1xuICAgICAgICBsdC5kICA9ICB0aGlzLl9jciAqIHRoaXMuc2NhbGUueTtcbiAgICAgICAgbHQudHggPSAgdGhpcy5wb3NpdGlvbi54IC0gKHRoaXMucGl2b3QueCAqIGx0LmEgKyB0aGlzLnBpdm90LnkgKiBsdC5jKTtcbiAgICAgICAgbHQudHkgPSAgdGhpcy5wb3NpdGlvbi55IC0gKHRoaXMucGl2b3QueCAqIGx0LmIgKyB0aGlzLnBpdm90LnkgKiBsdC5kKTtcbiAgICB9XG5cbiAgICBpZih0aGlzLmRpcnR5VHJhbnNmb3JtIHx8IHRoaXMucGFyZW50LmRpcnR5VHJhbnNmb3JtKVxuICAgIHsgICAgICBcbiAgICAgICAgLy8gY29uY2F0IHRoZSBwYXJlbnQgbWF0cml4IHdpdGggdGhlIG9iamVjdHMgdHJhbnNmb3JtLlxuICAgICAgICB3dC5hICA9IGx0LmEgICogcHQuYSArIGx0LmIgICogcHQuYztcbiAgICAgICAgd3QuYiAgPSBsdC5hICAqIHB0LmIgKyBsdC5iICAqIHB0LmQ7XG4gICAgICAgIHd0LmMgID0gbHQuYyAgKiBwdC5hICsgbHQuZCAgKiBwdC5jO1xuICAgICAgICB3dC5kICA9IGx0LmMgICogcHQuYiArIGx0LmQgICogcHQuZDtcbiAgICAgICAgd3QudHggPSBsdC50eCAqIHB0LmEgKyBsdC50eSAqIHB0LmMgKyBwdC50eDtcbiAgICAgICAgd3QudHkgPSBsdC50eCAqIHB0LmIgKyBsdC50eSAqIHB0LmQgKyBwdC50eTsgICAgICAgXG4gICAgXG4gICAgICAgIHRoaXMuX2N1cnJlbnRCb3VuZHMgPSBudWxsO1xuICAgIH1cblxuICAgIC8vIG11bHRpcGx5IHRoZSBhbHBoYXMuLlxuICAgIHRoaXMud29ybGRBbHBoYSA9IHRoaXMuYWxwaGEgKiB0aGlzLnBhcmVudC53b3JsZEFscGhhO1xuXG4gICAgLy8gcmVzZXQgdGhlIGJvdW5kcyBlYWNoIHRpbWUgdGhpcyBpcyBjYWxsZWQhXG4gICAgXG59O1xuXG4vLyBwZXJmb3JtYW5jZSBpbmNyZWFzZSB0byBhdm9pZCB1c2luZyBjYWxsLi4gKDEweCBmYXN0ZXIpXG5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS5kaXNwbGF5T2JqZWN0VXBkYXRlVHJhbnNmb3JtID0gRGlzcGxheU9iamVjdC5wcm90b3R5cGUudXBkYXRlVHJhbnNmb3JtO1xuXG4vKipcbiAqXG4gKlxuICogUmV0cmlldmVzIHRoZSBib3VuZHMgb2YgdGhlIGRpc3BsYXlPYmplY3QgYXMgYSByZWN0YW5nbGUgb2JqZWN0XG4gKlxuICogQHBhcmFtIG1hdHJpeCB7UElYSS5NYXRyaXh9XG4gKiBAcmV0dXJuIHtQSVhJLlJlY3RhbmdsZX0gdGhlIHJlY3Rhbmd1bGFyIGJvdW5kaW5nIGFyZWFcbiAqL1xuRGlzcGxheU9iamVjdC5wcm90b3R5cGUuZ2V0Qm91bmRzID0gZnVuY3Rpb24gKG1hdHJpeCkgLy8ganNoaW50IHVudXNlZDpmYWxzZVxue1xuICAgIHJldHVybiBtYXRoLlJlY3RhbmdsZS5FTVBUWTtcbn07XG5cbi8qKlxuICogUmV0cmlldmVzIHRoZSBsb2NhbCBib3VuZHMgb2YgdGhlIGRpc3BsYXlPYmplY3QgYXMgYSByZWN0YW5nbGUgb2JqZWN0XG4gKlxuICogQHJldHVybiB7UElYSS5SZWN0YW5nbGV9IHRoZSByZWN0YW5ndWxhciBib3VuZGluZyBhcmVhXG4gKi9cbkRpc3BsYXlPYmplY3QucHJvdG90eXBlLmdldExvY2FsQm91bmRzID0gZnVuY3Rpb24gKClcbntcbiAgICByZXR1cm4gdGhpcy5nZXRCb3VuZHMobWF0aC5NYXRyaXguSURFTlRJVFkpO1xufTtcblxuLyoqXG4gKiBDYWxjdWxhdGVzIHRoZSBnbG9iYWwgcG9zaXRpb24gb2YgdGhlIGRpc3BsYXkgb2JqZWN0XG4gKlxuICogQHBhcmFtIHBvc2l0aW9uIHtQSVhJLlBvaW50fSBUaGUgd29ybGQgb3JpZ2luIHRvIGNhbGN1bGF0ZSBmcm9tXG4gKiBAcmV0dXJuIHtQSVhJLlBvaW50fSBBIHBvaW50IG9iamVjdCByZXByZXNlbnRpbmcgdGhlIHBvc2l0aW9uIG9mIHRoaXMgb2JqZWN0XG4gKi9cbkRpc3BsYXlPYmplY3QucHJvdG90eXBlLnRvR2xvYmFsID0gZnVuY3Rpb24gKHBvc2l0aW9uKVxue1xuICAgIC8vIHRoaXMgcGFyZW50IGNoZWNrIGlzIGZvciBqdXN0IGluIGNhc2UgdGhlIGl0ZW0gaXMgYSByb290IG9iamVjdC5cbiAgICAvLyBJZiBpdCBpcyB3ZSBuZWVkIHRvIGdpdmUgaXQgYSB0ZW1wb3JhcnkgcGFyZW50IHNvIHRoYXQgZGlzcGxheU9iamVjdFVwZGF0ZVRyYW5zZm9ybSB3b3JrcyBjb3JyZWN0bHlcbiAgICAvLyB0aGlzIGlzIG1haW5seSB0byBhdm9pZCBhIHBhcmVudCBjaGVjayBpbiB0aGUgbWFpbiBsb29wLiBFdmVyeSBsaXR0bGUgaGVscHMgZm9yIHBlcmZvcm1hbmNlIDopXG4gICAgaWYoIXRoaXMucGFyZW50KVxuICAgIHtcbiAgICAgICAgdGhpcy5wYXJlbnQgPSBfdGVtcERpc3BsYXlPYmplY3RQYXJlbnQ7XG4gICAgICAgIHRoaXMuZGlzcGxheU9iamVjdFVwZGF0ZVRyYW5zZm9ybSgpO1xuICAgICAgICB0aGlzLnBhcmVudCA9IG51bGw7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHRoaXMuZGlzcGxheU9iamVjdFVwZGF0ZVRyYW5zZm9ybSgpO1xuICAgIH1cblxuICAgIC8vIGRvbid0IG5lZWQgdG8gdXBkYXRlIHRoZSBsb3RcbiAgICByZXR1cm4gdGhpcy53b3JsZFRyYW5zZm9ybS5hcHBseShwb3NpdGlvbik7XG59O1xuXG4vKipcbiAqIENhbGN1bGF0ZXMgdGhlIGxvY2FsIHBvc2l0aW9uIG9mIHRoZSBkaXNwbGF5IG9iamVjdCByZWxhdGl2ZSB0byBhbm90aGVyIHBvaW50XG4gKlxuICogQHBhcmFtIHBvc2l0aW9uIHtQSVhJLlBvaW50fSBUaGUgd29ybGQgb3JpZ2luIHRvIGNhbGN1bGF0ZSBmcm9tXG4gKiBAcGFyYW0gW2Zyb21dIHtQSVhJLkRpc3BsYXlPYmplY3R9IFRoZSBEaXNwbGF5T2JqZWN0IHRvIGNhbGN1bGF0ZSB0aGUgZ2xvYmFsIHBvc2l0aW9uIGZyb21cbiAqIEBwYXJhbSBbcG9pbnRdIHtQSVhJLlBvaW50fSBBIFBvaW50IG9iamVjdCBpbiB3aGljaCB0byBzdG9yZSB0aGUgdmFsdWUsIG9wdGlvbmFsIChvdGhlcndpc2Ugd2lsbCBjcmVhdGUgYSBuZXcgUG9pbnQpXG4gKiBAcmV0dXJuIHtQSVhJLlBvaW50fSBBIHBvaW50IG9iamVjdCByZXByZXNlbnRpbmcgdGhlIHBvc2l0aW9uIG9mIHRoaXMgb2JqZWN0XG4gKi9cbkRpc3BsYXlPYmplY3QucHJvdG90eXBlLnRvTG9jYWwgPSBmdW5jdGlvbiAocG9zaXRpb24sIGZyb20sIHBvaW50KVxue1xuICAgIGlmIChmcm9tKVxuICAgIHtcbiAgICAgICAgcG9zaXRpb24gPSBmcm9tLnRvR2xvYmFsKHBvc2l0aW9uKTtcbiAgICB9XG5cbiAgICAvLyB0aGlzIHBhcmVudCBjaGVjayBpcyBmb3IganVzdCBpbiBjYXNlIHRoZSBpdGVtIGlzIGEgcm9vdCBvYmplY3QuXG4gICAgLy8gSWYgaXQgaXMgd2UgbmVlZCB0byBnaXZlIGl0IGEgdGVtcG9yYXJ5IHBhcmVudCBzbyB0aGF0IGRpc3BsYXlPYmplY3RVcGRhdGVUcmFuc2Zvcm0gd29ya3MgY29ycmVjdGx5XG4gICAgLy8gdGhpcyBpcyBtYWlubHkgdG8gYXZvaWQgYSBwYXJlbnQgY2hlY2sgaW4gdGhlIG1haW4gbG9vcC4gRXZlcnkgbGl0dGxlIGhlbHBzIGZvciBwZXJmb3JtYW5jZSA6KVxuICAgIGlmKCF0aGlzLnBhcmVudClcbiAgICB7XG4gICAgICAgIHRoaXMucGFyZW50ID0gX3RlbXBEaXNwbGF5T2JqZWN0UGFyZW50O1xuICAgICAgICB0aGlzLmRpc3BsYXlPYmplY3RVcGRhdGVUcmFuc2Zvcm0oKTtcbiAgICAgICAgdGhpcy5wYXJlbnQgPSBudWxsO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICB0aGlzLmRpc3BsYXlPYmplY3RVcGRhdGVUcmFuc2Zvcm0oKTtcbiAgICB9XG5cbiAgICAvLyBzaW1wbHkgYXBwbHkgdGhlIG1hdHJpeC4uXG4gICAgcmV0dXJuIHRoaXMud29ybGRUcmFuc2Zvcm0uYXBwbHlJbnZlcnNlKHBvc2l0aW9uLCBwb2ludCk7XG59O1xuXG4vKipcbiAqIFJlbmRlcnMgdGhlIG9iamVjdCB1c2luZyB0aGUgV2ViR0wgcmVuZGVyZXJcbiAqXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcn0gVGhlIHJlbmRlcmVyXG4gKiBAcHJpdmF0ZVxuICovXG5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS5yZW5kZXJXZWJHTCA9IGZ1bmN0aW9uIChyZW5kZXJlcikgLy8ganNoaW50IHVudXNlZDpmYWxzZVxue1xuICAgIC8vIE9WRVJXUklURTtcbn07XG5cbi8qKlxuICogUmVuZGVycyB0aGUgb2JqZWN0IHVzaW5nIHRoZSBDYW52YXMgcmVuZGVyZXJcbiAqXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuQ2FudmFzUmVuZGVyZXJ9IFRoZSByZW5kZXJlclxuICogQHByaXZhdGVcbiAqL1xuRGlzcGxheU9iamVjdC5wcm90b3R5cGUucmVuZGVyQ2FudmFzID0gZnVuY3Rpb24gKHJlbmRlcmVyKSAvLyBqc2hpbnQgdW51c2VkOmZhbHNlXG57XG4gICAgLy8gT1ZFUldSSVRFO1xufTtcbi8qKlxuICogVXNlZnVsIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyBhIHRleHR1cmUgb2YgdGhlIGRpc3BsYXkgb2JqZWN0IHRoYXQgY2FuIHRoZW4gYmUgdXNlZCB0byBjcmVhdGUgc3ByaXRlc1xuICogVGhpcyBjYW4gYmUgcXVpdGUgdXNlZnVsIGlmIHlvdXIgZGlzcGxheU9iamVjdCBpcyBzdGF0aWMgLyBjb21wbGljYXRlZCBhbmQgbmVlZHMgdG8gYmUgcmV1c2VkIG11bHRpcGxlIHRpbWVzLlxuICpcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5DYW52YXNSZW5kZXJlcnxQSVhJLldlYkdMUmVuZGVyZXJ9IFRoZSByZW5kZXJlciB1c2VkIHRvIGdlbmVyYXRlIHRoZSB0ZXh0dXJlLlxuICogQHBhcmFtIHNjYWxlTW9kZSB7bnVtYmVyfSBTZWUge0BsaW5rIFBJWEkuU0NBTEVfTU9ERVN9IGZvciBwb3NzaWJsZSB2YWx1ZXNcbiAqIEBwYXJhbSByZXNvbHV0aW9uIHtudW1iZXJ9IFRoZSByZXNvbHV0aW9uIG9mIHRoZSB0ZXh0dXJlIGJlaW5nIGdlbmVyYXRlZFxuICogQHJldHVybiB7UElYSS5UZXh0dXJlfSBhIHRleHR1cmUgb2YgdGhlIGRpc3BsYXkgb2JqZWN0XG4gKi9cbkRpc3BsYXlPYmplY3QucHJvdG90eXBlLmdlbmVyYXRlVGV4dHVyZSA9IGZ1bmN0aW9uIChyZW5kZXJlciwgc2NhbGVNb2RlLCByZXNvbHV0aW9uKVxue1xuICAgIHZhciBib3VuZHMgPSB0aGlzLmdldExvY2FsQm91bmRzKCk7XG5cbiAgICB2YXIgcmVuZGVyVGV4dHVyZSA9IG5ldyBSZW5kZXJUZXh0dXJlKHJlbmRlcmVyLCBib3VuZHMud2lkdGggfCAwLCBib3VuZHMuaGVpZ2h0IHwgMCwgc2NhbGVNb2RlLCByZXNvbHV0aW9uKTtcblxuICAgIF90ZW1wTWF0cml4LnR4ID0gLWJvdW5kcy54O1xuICAgIF90ZW1wTWF0cml4LnR5ID0gLWJvdW5kcy55O1xuXG4gICAgcmVuZGVyVGV4dHVyZS5yZW5kZXIodGhpcywgX3RlbXBNYXRyaXgpO1xuXG4gICAgcmV0dXJuIHJlbmRlclRleHR1cmU7XG59O1xuXG4vKipcbiAqIFNldCB0aGUgcGFyZW50IENvbnRhaW5lciBvZiB0aGlzIERpc3BsYXlPYmplY3RcbiAqXG4gKiBAcGFyYW0gY29udGFpbmVyIHtDb250YWluZXJ9IFRoZSBDb250YWluZXIgdG8gYWRkIHRoaXMgRGlzcGxheU9iamVjdCB0b1xuICogQHJldHVybiB7Q29udGFpbmVyfSBUaGUgQ29udGFpbmVyIHRoYXQgdGhpcyBEaXNwbGF5T2JqZWN0IHdhcyBhZGRlZCB0b1xuICovXG5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS5zZXRQYXJlbnQgPSBmdW5jdGlvbiAoY29udGFpbmVyKVxue1xuICAgIGlmICghY29udGFpbmVyIHx8ICFjb250YWluZXIuYWRkQ2hpbGQpXG4gICAge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3NldFBhcmVudDogQXJndW1lbnQgbXVzdCBiZSBhIENvbnRhaW5lcicpO1xuICAgIH1cblxuICAgIGNvbnRhaW5lci5hZGRDaGlsZCh0aGlzKTtcbiAgICByZXR1cm4gY29udGFpbmVyO1xufTtcblxuLyoqXG4gKiBDb252ZW5pZW5jZSBmdW5jdGlvbiB0byBzZXQgdGhlIHBvc3Rpb24sIHNjYWxlLCBza2V3IGFuZCBwaXZvdCBhdCBvbmNlLlxuICpcbiAqIEBwYXJhbSBbeD0wXSB7bnVtYmVyfSBUaGUgWCBwb3NpdGlvblxuICogQHBhcmFtIFt5PTBdIHtudW1iZXJ9IFRoZSBZIHBvc2l0aW9uXG4gKiBAcGFyYW0gW3NjYWxlWD0xXSB7bnVtYmVyfSBUaGUgWCBzY2FsZSB2YWx1ZVxuICogQHBhcmFtIFtzY2FsZVk9MV0ge251bWJlcn0gVGhlIFkgc2NhbGUgdmFsdWVcbiAqIEBwYXJhbSBbcm90YXRpb249MF0ge251bWJlcn0gVGhlIHJvdGF0aW9uXG4gKiBAcGFyYW0gW3NrZXdYPTBdIHtudW1iZXJ9IFRoZSBYIHNrZXcgdmFsdWVcbiAqIEBwYXJhbSBbc2tld1k9MF0ge251bWJlcn0gVGhlIFkgc2tldyB2YWx1ZVxuICogQHBhcmFtIFtwaXZvdFg9MF0ge251bWJlcn0gVGhlIFggcGl2b3QgdmFsdWVcbiAqIEBwYXJhbSBbcGl2b3RZPTBdIHtudW1iZXJ9IFRoZSBZIHBpdm90IHZhbHVlXG4gKiBAcmV0dXJuIHtQSVhJLkRpc3BsYXlPYmplY3R9XG4gKi9cbkRpc3BsYXlPYmplY3QucHJvdG90eXBlLnNldFRyYW5zZm9ybSA9IGZ1bmN0aW9uKHgsIHksIHNjYWxlWCwgc2NhbGVZLCByb3RhdGlvbiwgc2tld1gsIHNrZXdZLCBwaXZvdFgsIHBpdm90WSkgLy9qc2hpbnQgaWdub3JlOmxpbmVcbntcbiAgICB0aGlzLnBvc2l0aW9uLnggPSB4IHx8IDA7XG4gICAgdGhpcy5wb3NpdGlvbi55ID0geSB8fCAwO1xuICAgIHRoaXMuc2NhbGUueCA9ICFzY2FsZVggPyAxIDogc2NhbGVYO1xuICAgIHRoaXMuc2NhbGUueSA9ICFzY2FsZVkgPyAxIDogc2NhbGVZO1xuICAgIHRoaXMucm90YXRpb24gPSByb3RhdGlvbiB8fCAwO1xuICAgIHRoaXMuc2tldy54ID0gc2tld1ggfHwgMDtcbiAgICB0aGlzLnNrZXcueSA9IHNrZXdZIHx8IDA7XG4gICAgdGhpcy5waXZvdC54ID0gcGl2b3RYIHx8IDA7XG4gICAgdGhpcy5waXZvdC55ID0gcGl2b3RZIHx8IDA7XG4gICAgdGhpcy5kaXJ0eVRyYW5zZm9ybSA9IHRydWU7XG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIEJhc2UgZGVzdHJveSBtZXRob2QgZm9yIGdlbmVyaWMgZGlzcGxheSBvYmplY3RzXG4gKlxuICovXG5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKClcbntcblxuICAgIHRoaXMucG9zaXRpb24gPSBudWxsO1xuICAgIHRoaXMuc2NhbGUgPSBudWxsO1xuICAgIHRoaXMucGl2b3QgPSBudWxsO1xuICAgIHRoaXMuc2tldyA9IG51bGw7XG5cbiAgICB0aGlzLnBhcmVudCA9IG51bGw7XG5cbiAgICB0aGlzLl9ib3VuZHMgPSBudWxsO1xuICAgIHRoaXMuX2N1cnJlbnRCb3VuZHMgPSBudWxsO1xuICAgIHRoaXMuX21hc2sgPSBudWxsO1xuXG4gICAgdGhpcy53b3JsZFRyYW5zZm9ybSA9IG51bGw7XG4gICAgdGhpcy5maWx0ZXJBcmVhID0gbnVsbDtcbn07XG4iLCJ2YXIgQ29udGFpbmVyID0gcmVxdWlyZSgnLi4vZGlzcGxheS9Db250YWluZXInKSxcbiAgICBUZXh0dXJlID0gcmVxdWlyZSgnLi4vdGV4dHVyZXMvVGV4dHVyZScpLFxuICAgIENhbnZhc0J1ZmZlciA9IHJlcXVpcmUoJy4uL3JlbmRlcmVycy9jYW52YXMvdXRpbHMvQ2FudmFzQnVmZmVyJyksXG4gICAgQ2FudmFzR3JhcGhpY3MgPSByZXF1aXJlKCcuLi9yZW5kZXJlcnMvY2FudmFzL3V0aWxzL0NhbnZhc0dyYXBoaWNzJyksXG4gICAgR3JhcGhpY3NEYXRhID0gcmVxdWlyZSgnLi9HcmFwaGljc0RhdGEnKSxcbiAgICBtYXRoID0gcmVxdWlyZSgnLi4vbWF0aCcpLFxuICAgIENPTlNUID0gcmVxdWlyZSgnLi4vY29uc3QnKSxcbiAgICB0ZW1wUG9pbnQgPSBuZXcgbWF0aC5Qb2ludCgpO1xuXG4vKipcbiAqIFRoZSBHcmFwaGljcyBjbGFzcyBjb250YWlucyBtZXRob2RzIHVzZWQgdG8gZHJhdyBwcmltaXRpdmUgc2hhcGVzIHN1Y2ggYXMgbGluZXMsIGNpcmNsZXMgYW5kXG4gKiByZWN0YW5nbGVzIHRvIHRoZSBkaXNwbGF5LCBhbmQgdG8gY29sb3IgYW5kIGZpbGwgdGhlbS5cbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQ29udGFpbmVyXG4gKiBAbWVtYmVyb2YgUElYSVxuICovXG5mdW5jdGlvbiBHcmFwaGljcygpXG57XG4gICAgQ29udGFpbmVyLmNhbGwodGhpcyk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYWxwaGEgdmFsdWUgdXNlZCB3aGVuIGZpbGxpbmcgdGhlIEdyYXBoaWNzIG9iamVjdC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAxXG4gICAgICovXG4gICAgdGhpcy5maWxsQWxwaGEgPSAxO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHdpZHRoICh0aGlja25lc3MpIG9mIGFueSBsaW5lcyBkcmF3bi5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAwXG4gICAgICovXG4gICAgdGhpcy5saW5lV2lkdGggPSAwO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGNvbG9yIG9mIGFueSBsaW5lcyBkcmF3bi5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge3N0cmluZ31cbiAgICAgKiBAZGVmYXVsdCAwXG4gICAgICovXG4gICAgdGhpcy5saW5lQ29sb3IgPSAwO1xuXG4gICAgLyoqXG4gICAgICogR3JhcGhpY3MgZGF0YVxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5HcmFwaGljc0RhdGFbXX1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuZ3JhcGhpY3NEYXRhID0gW107XG5cbiAgICAvKipcbiAgICAgKiBUaGUgdGludCBhcHBsaWVkIHRvIHRoZSBncmFwaGljIHNoYXBlLiBUaGlzIGlzIGEgaGV4IHZhbHVlLiBBcHBseSBhIHZhbHVlIG9mIDB4RkZGRkZGIHRvIHJlc2V0IHRoZSB0aW50LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDB4RkZGRkZGXG4gICAgICovXG4gICAgdGhpcy50aW50ID0gMHhGRkZGRkY7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgcHJldmlvdXMgdGludCBhcHBsaWVkIHRvIHRoZSBncmFwaGljIHNoYXBlLiBVc2VkIHRvIGNvbXBhcmUgdG8gdGhlIGN1cnJlbnQgdGludCBhbmQgY2hlY2sgaWYgdGhlcmVzIGNoYW5nZS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBkZWZhdWx0IDB4RkZGRkZGXG4gICAgICovXG4gICAgdGhpcy5fcHJldlRpbnQgPSAweEZGRkZGRjtcblxuICAgIC8qKlxuICAgICAqIFRoZSBibGVuZCBtb2RlIHRvIGJlIGFwcGxpZWQgdG8gdGhlIGdyYXBoaWMgc2hhcGUuIEFwcGx5IGEgdmFsdWUgb2YgYFBJWEkuQkxFTkRfTU9ERVMuTk9STUFMYCB0byByZXNldCB0aGUgYmxlbmQgbW9kZS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCBQSVhJLkJMRU5EX01PREVTLk5PUk1BTDtcbiAgICAgKiBAc2VlIFBJWEkuQkxFTkRfTU9ERVNcbiAgICAgKi9cbiAgICB0aGlzLmJsZW5kTW9kZSA9IENPTlNULkJMRU5EX01PREVTLk5PUk1BTDtcblxuICAgIC8qKlxuICAgICAqIEN1cnJlbnQgcGF0aFxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5HcmFwaGljc0RhdGF9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLmN1cnJlbnRQYXRoID0gbnVsbDtcblxuICAgIC8qKlxuICAgICAqIEFycmF5IGNvbnRhaW5pbmcgc29tZSBXZWJHTC1yZWxhdGVkIHByb3BlcnRpZXMgdXNlZCBieSB0aGUgV2ViR0wgcmVuZGVyZXIuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtvYmplY3Q8bnVtYmVyLCBvYmplY3Q+fVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgLy8gVE9ETyAtIF93ZWJnbCBzaG91bGQgdXNlIGEgcHJvdG90eXBlIG9iamVjdCwgbm90IGEgcmFuZG9tIHVuZG9jdW1lbnRlZCBvYmplY3QuLi5cbiAgICB0aGlzLl93ZWJHTCA9IHt9O1xuXG4gICAgLyoqXG4gICAgICogV2hldGhlciB0aGlzIHNoYXBlIGlzIGJlaW5nIHVzZWQgYXMgYSBtYXNrLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKi9cbiAgICB0aGlzLmlzTWFzayA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGJvdW5kcycgcGFkZGluZyB1c2VkIGZvciBib3VuZHMgY2FsY3VsYXRpb24uXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy5ib3VuZHNQYWRkaW5nID0gMDtcblxuICAgIC8qKlxuICAgICAqIEEgY2FjaGUgb2YgdGhlIGxvY2FsIGJvdW5kcyB0byBwcmV2ZW50IHJlY2FsY3VsYXRpb24uXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlJlY3RhbmdsZX1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX2xvY2FsQm91bmRzID0gbmV3IG1hdGguUmVjdGFuZ2xlKDAsMCwxLDEpO1xuXG4gICAgLyoqXG4gICAgICogVXNlZCB0byBkZXRlY3QgaWYgdGhlIGdyYXBoaWNzIG9iamVjdCBoYXMgY2hhbmdlZC4gSWYgdGhpcyBpcyBzZXQgdG8gdHJ1ZSB0aGVuIHRoZSBncmFwaGljc1xuICAgICAqIG9iamVjdCB3aWxsIGJlIHJlY2FsY3VsYXRlZC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLmRpcnR5ID0gdHJ1ZTtcblxuICAgIC8qKlxuICAgICAqIFVzZWQgdG8gZGV0ZWN0IGlmIHRoZSBXZWJHTCBncmFwaGljcyBvYmplY3QgaGFzIGNoYW5nZWQuIElmIHRoaXMgaXMgc2V0IHRvIHRydWUgdGhlbiB0aGVcbiAgICAgKiBncmFwaGljcyBvYmplY3Qgd2lsbCBiZSByZWNhbGN1bGF0ZWQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5nbERpcnR5ID0gZmFsc2U7XG5cbiAgICB0aGlzLmJvdW5kc0RpcnR5ID0gdHJ1ZTtcblxuICAgIC8qKlxuICAgICAqIFVzZWQgdG8gZGV0ZWN0IGlmIHRoZSBjYWNoZWQgc3ByaXRlIG9iamVjdCBuZWVkcyB0byBiZSB1cGRhdGVkLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuY2FjaGVkU3ByaXRlRGlydHkgPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIFdoZW4gY2FjaGVBc0JpdG1hcCBpcyBzZXQgdG8gdHJ1ZSB0aGUgZ3JhcGhpY3Mgb2JqZWN0IHdpbGwgYmUgcmVuZGVyZWQgYXMgaWYgaXQgd2FzIGEgc3ByaXRlLlxuICAgICAqIFRoaXMgaXMgdXNlZnVsIGlmIHlvdXIgZ3JhcGhpY3MgZWxlbWVudCBkb2VzIG5vdCBjaGFuZ2Ugb2Z0ZW4sIGFzIGl0IHdpbGwgc3BlZWQgdXAgdGhlIHJlbmRlcmluZ1xuICAgICAqIG9mIHRoZSBvYmplY3QgaW4gZXhjaGFuZ2UgZm9yIHRha2luZyB1cCB0ZXh0dXJlIG1lbW9yeS4gSXQgaXMgYWxzbyB1c2VmdWwgaWYgeW91IG5lZWQgdGhlIGdyYXBoaWNzXG4gICAgICogb2JqZWN0IHRvIGJlIGFudGktYWxpYXNlZCwgYmVjYXVzZSBpdCB3aWxsIGJlIHJlbmRlcmVkIHVzaW5nIGNhbnZhcy4gVGhpcyBpcyBub3QgcmVjb21tZW5kZWQgaWZcbiAgICAgKiB5b3UgYXJlIGNvbnN0YW50bHkgcmVkcmF3aW5nIHRoZSBncmFwaGljcyBlbGVtZW50LlxuICAgICAqXG4gICAgICogQG5hbWUgY2FjaGVBc0JpdG1hcFxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICogQG1lbWJlcm9mIFBJWEkuR3JhcGhpY3MjXG4gICAgICogQGRlZmF1bHQgZmFsc2VcbiAgICAgKi9cbn1cblxuLy8gY29uc3RydWN0b3JcbkdyYXBoaWNzLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoQ29udGFpbmVyLnByb3RvdHlwZSk7XG5HcmFwaGljcy5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBHcmFwaGljcztcbm1vZHVsZS5leHBvcnRzID0gR3JhcGhpY3M7XG5cbi8qKlxuICogQ3JlYXRlcyBhIG5ldyBHcmFwaGljcyBvYmplY3Qgd2l0aCB0aGUgc2FtZSB2YWx1ZXMgYXMgdGhpcyBvbmUuXG4gKiBOb3RlIHRoYXQgdGhlIG9ubHkgdGhlIHByb3BlcnRpZXMgb2YgdGhlIG9iamVjdCBhcmUgY2xvbmVkLCBub3QgaXRzIHRyYW5zZm9ybSAocG9zaXRpb24sc2NhbGUsZXRjKVxuICpcbiAqIEByZXR1cm4ge1BJWEkuR3JhcGhpY3N9XG4gKi9cbkdyYXBoaWNzLnByb3RvdHlwZS5jbG9uZSA9IGZ1bmN0aW9uICgpXG57XG4gICAgdmFyIGNsb25lID0gbmV3IEdyYXBoaWNzKCk7XG5cbiAgICBjbG9uZS5yZW5kZXJhYmxlICAgID0gdGhpcy5yZW5kZXJhYmxlO1xuICAgIGNsb25lLmZpbGxBbHBoYSAgICAgPSB0aGlzLmZpbGxBbHBoYTtcbiAgICBjbG9uZS5saW5lV2lkdGggICAgID0gdGhpcy5saW5lV2lkdGg7XG4gICAgY2xvbmUubGluZUNvbG9yICAgICA9IHRoaXMubGluZUNvbG9yO1xuICAgIGNsb25lLnRpbnQgICAgICAgICAgPSB0aGlzLnRpbnQ7XG4gICAgY2xvbmUuYmxlbmRNb2RlICAgICA9IHRoaXMuYmxlbmRNb2RlO1xuICAgIGNsb25lLmlzTWFzayAgICAgICAgPSB0aGlzLmlzTWFzaztcbiAgICBjbG9uZS5ib3VuZHNQYWRkaW5nID0gdGhpcy5ib3VuZHNQYWRkaW5nO1xuICAgIGNsb25lLmRpcnR5ICAgICAgICAgPSB0cnVlO1xuICAgIGNsb25lLmdsRGlydHkgICAgICAgPSB0cnVlO1xuICAgIGNsb25lLmNhY2hlZFNwcml0ZURpcnR5ID0gdGhpcy5jYWNoZWRTcHJpdGVEaXJ0eTtcblxuICAgIC8vIGNvcHkgZ3JhcGhpY3MgZGF0YVxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5ncmFwaGljc0RhdGEubGVuZ3RoOyArK2kpXG4gICAge1xuICAgICAgICBjbG9uZS5ncmFwaGljc0RhdGEucHVzaCh0aGlzLmdyYXBoaWNzRGF0YVtpXS5jbG9uZSgpKTtcbiAgICB9XG5cbiAgICBjbG9uZS5jdXJyZW50UGF0aCA9IGNsb25lLmdyYXBoaWNzRGF0YVtjbG9uZS5ncmFwaGljc0RhdGEubGVuZ3RoIC0gMV07XG5cbiAgICBjbG9uZS51cGRhdGVMb2NhbEJvdW5kcygpO1xuXG4gICAgcmV0dXJuIGNsb25lO1xufTtcblxuLyoqXG4gKiBTcGVjaWZpZXMgdGhlIGxpbmUgc3R5bGUgdXNlZCBmb3Igc3Vic2VxdWVudCBjYWxscyB0byBHcmFwaGljcyBtZXRob2RzIHN1Y2ggYXMgdGhlIGxpbmVUbygpIG1ldGhvZCBvciB0aGUgZHJhd0NpcmNsZSgpIG1ldGhvZC5cbiAqXG4gKiBAcGFyYW0gbGluZVdpZHRoIHtudW1iZXJ9IHdpZHRoIG9mIHRoZSBsaW5lIHRvIGRyYXcsIHdpbGwgdXBkYXRlIHRoZSBvYmplY3RzIHN0b3JlZCBzdHlsZVxuICogQHBhcmFtIGNvbG9yIHtudW1iZXJ9IGNvbG9yIG9mIHRoZSBsaW5lIHRvIGRyYXcsIHdpbGwgdXBkYXRlIHRoZSBvYmplY3RzIHN0b3JlZCBzdHlsZVxuICogQHBhcmFtIGFscGhhIHtudW1iZXJ9IGFscGhhIG9mIHRoZSBsaW5lIHRvIGRyYXcsIHdpbGwgdXBkYXRlIHRoZSBvYmplY3RzIHN0b3JlZCBzdHlsZVxuICogQHJldHVybiB7UElYSS5HcmFwaGljc31cbiAqL1xuR3JhcGhpY3MucHJvdG90eXBlLmxpbmVTdHlsZSA9IGZ1bmN0aW9uIChsaW5lV2lkdGgsIGNvbG9yLCBhbHBoYSlcbntcbiAgICB0aGlzLmxpbmVXaWR0aCA9IGxpbmVXaWR0aCB8fCAwO1xuICAgIHRoaXMubGluZUNvbG9yID0gY29sb3IgfHwgMDtcbiAgICB0aGlzLmxpbmVBbHBoYSA9IChhbHBoYSA9PT0gdW5kZWZpbmVkKSA/IDEgOiBhbHBoYTtcblxuICAgIGlmICh0aGlzLmN1cnJlbnRQYXRoKVxuICAgIHtcbiAgICAgICAgaWYgKHRoaXMuY3VycmVudFBhdGguc2hhcGUucG9pbnRzLmxlbmd0aClcbiAgICAgICAge1xuICAgICAgICAgICAgLy8gaGFsZndheSB0aHJvdWdoIGEgbGluZT8gc3RhcnQgYSBuZXcgb25lIVxuICAgICAgICAgICAgdmFyIHNoYXBlID0gbmV3IG1hdGguUG9seWdvbih0aGlzLmN1cnJlbnRQYXRoLnNoYXBlLnBvaW50cy5zbGljZSgtMikpO1xuICAgICAgICAgICAgc2hhcGUuY2xvc2VkID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLmRyYXdTaGFwZShzaGFwZSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgICAvLyBvdGhlcndpc2UgaXRzIGVtcHR5IHNvIGxldHMganVzdCBzZXQgdGhlIGxpbmUgcHJvcGVydGllc1xuICAgICAgICAgICAgdGhpcy5jdXJyZW50UGF0aC5saW5lV2lkdGggPSB0aGlzLmxpbmVXaWR0aDtcbiAgICAgICAgICAgIHRoaXMuY3VycmVudFBhdGgubGluZUNvbG9yID0gdGhpcy5saW5lQ29sb3I7XG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRQYXRoLmxpbmVBbHBoYSA9IHRoaXMubGluZUFscGhhO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIE1vdmVzIHRoZSBjdXJyZW50IGRyYXdpbmcgcG9zaXRpb24gdG8geCwgeS5cbiAqXG4gKiBAcGFyYW0geCB7bnVtYmVyfSB0aGUgWCBjb29yZGluYXRlIHRvIG1vdmUgdG9cbiAqIEBwYXJhbSB5IHtudW1iZXJ9IHRoZSBZIGNvb3JkaW5hdGUgdG8gbW92ZSB0b1xuICogQHJldHVybiB7UElYSS5HcmFwaGljc31cbiAgKi9cbkdyYXBoaWNzLnByb3RvdHlwZS5tb3ZlVG8gPSBmdW5jdGlvbiAoeCwgeSlcbntcbiAgICB2YXIgc2hhcGUgPSBuZXcgbWF0aC5Qb2x5Z29uKFt4LHldKTtcbiAgICBzaGFwZS5jbG9zZWQgPSBmYWxzZTtcbiAgICB0aGlzLmRyYXdTaGFwZShzaGFwZSk7XG5cbiAgICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogRHJhd3MgYSBsaW5lIHVzaW5nIHRoZSBjdXJyZW50IGxpbmUgc3R5bGUgZnJvbSB0aGUgY3VycmVudCBkcmF3aW5nIHBvc2l0aW9uIHRvICh4LCB5KTtcbiAqIFRoZSBjdXJyZW50IGRyYXdpbmcgcG9zaXRpb24gaXMgdGhlbiBzZXQgdG8gKHgsIHkpLlxuICpcbiAqIEBwYXJhbSB4IHtudW1iZXJ9IHRoZSBYIGNvb3JkaW5hdGUgdG8gZHJhdyB0b1xuICogQHBhcmFtIHkge251bWJlcn0gdGhlIFkgY29vcmRpbmF0ZSB0byBkcmF3IHRvXG4gKiBAcmV0dXJuIHtQSVhJLkdyYXBoaWNzfVxuICovXG5HcmFwaGljcy5wcm90b3R5cGUubGluZVRvID0gZnVuY3Rpb24gKHgsIHkpXG57XG4gICAgdGhpcy5jdXJyZW50UGF0aC5zaGFwZS5wb2ludHMucHVzaCh4LCB5KTtcbiAgICB0aGlzLmRpcnR5ID0gdHJ1ZTtcblxuICAgIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBDYWxjdWxhdGUgdGhlIHBvaW50cyBmb3IgYSBxdWFkcmF0aWMgYmV6aWVyIGN1cnZlIGFuZCB0aGVuIGRyYXdzIGl0LlxuICogQmFzZWQgb246IGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vcXVlc3Rpb25zLzc4NTA5Ny9ob3ctZG8taS1pbXBsZW1lbnQtYS1iZXppZXItY3VydmUtaW4tY1xuICpcbiAqIEBwYXJhbSBjcFgge251bWJlcn0gQ29udHJvbCBwb2ludCB4XG4gKiBAcGFyYW0gY3BZIHtudW1iZXJ9IENvbnRyb2wgcG9pbnQgeVxuICogQHBhcmFtIHRvWCB7bnVtYmVyfSBEZXN0aW5hdGlvbiBwb2ludCB4XG4gKiBAcGFyYW0gdG9ZIHtudW1iZXJ9IERlc3RpbmF0aW9uIHBvaW50IHlcbiAqIEByZXR1cm4ge1BJWEkuR3JhcGhpY3N9XG4gKi9cbkdyYXBoaWNzLnByb3RvdHlwZS5xdWFkcmF0aWNDdXJ2ZVRvID0gZnVuY3Rpb24gKGNwWCwgY3BZLCB0b1gsIHRvWSlcbntcbiAgICBpZiAodGhpcy5jdXJyZW50UGF0aClcbiAgICB7XG4gICAgICAgIGlmICh0aGlzLmN1cnJlbnRQYXRoLnNoYXBlLnBvaW50cy5sZW5ndGggPT09IDApXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuY3VycmVudFBhdGguc2hhcGUucG9pbnRzID0gWzAsIDBdO1xuICAgICAgICB9XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHRoaXMubW92ZVRvKDAsMCk7XG4gICAgfVxuXG4gICAgdmFyIHhhLFxuICAgICAgICB5YSxcbiAgICAgICAgbiA9IDIwLFxuICAgICAgICBwb2ludHMgPSB0aGlzLmN1cnJlbnRQYXRoLnNoYXBlLnBvaW50cztcblxuICAgIGlmIChwb2ludHMubGVuZ3RoID09PSAwKVxuICAgIHtcbiAgICAgICAgdGhpcy5tb3ZlVG8oMCwgMCk7XG4gICAgfVxuXG4gICAgdmFyIGZyb21YID0gcG9pbnRzW3BvaW50cy5sZW5ndGgtMl07XG4gICAgdmFyIGZyb21ZID0gcG9pbnRzW3BvaW50cy5sZW5ndGgtMV07XG5cbiAgICB2YXIgaiA9IDA7XG4gICAgZm9yICh2YXIgaSA9IDE7IGkgPD0gbjsgKytpKVxuICAgIHtcbiAgICAgICAgaiA9IGkgLyBuO1xuXG4gICAgICAgIHhhID0gZnJvbVggKyAoIChjcFggLSBmcm9tWCkgKiBqICk7XG4gICAgICAgIHlhID0gZnJvbVkgKyAoIChjcFkgLSBmcm9tWSkgKiBqICk7XG5cbiAgICAgICAgcG9pbnRzLnB1c2goIHhhICsgKCAoKGNwWCArICggKHRvWCAtIGNwWCkgKiBqICkpIC0geGEpICogaiApLFxuICAgICAgICAgICAgICAgICAgICAgeWEgKyAoICgoY3BZICsgKCAodG9ZIC0gY3BZKSAqIGogKSkgLSB5YSkgKiBqICkgKTtcbiAgICB9XG5cbiAgICB0aGlzLmRpcnR5ID0gdGhpcy5ib3VuZHNEaXJ0eSA9IHRydWU7XG5cbiAgICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogQ2FsY3VsYXRlIHRoZSBwb2ludHMgZm9yIGEgYmV6aWVyIGN1cnZlIGFuZCB0aGVuIGRyYXdzIGl0LlxuICpcbiAqIEBwYXJhbSBjcFgge251bWJlcn0gQ29udHJvbCBwb2ludCB4XG4gKiBAcGFyYW0gY3BZIHtudW1iZXJ9IENvbnRyb2wgcG9pbnQgeVxuICogQHBhcmFtIGNwWDIge251bWJlcn0gU2Vjb25kIENvbnRyb2wgcG9pbnQgeFxuICogQHBhcmFtIGNwWTIge251bWJlcn0gU2Vjb25kIENvbnRyb2wgcG9pbnQgeVxuICogQHBhcmFtIHRvWCB7bnVtYmVyfSBEZXN0aW5hdGlvbiBwb2ludCB4XG4gKiBAcGFyYW0gdG9ZIHtudW1iZXJ9IERlc3RpbmF0aW9uIHBvaW50IHlcbiAqIEByZXR1cm4ge1BJWEkuR3JhcGhpY3N9XG4gKi9cbkdyYXBoaWNzLnByb3RvdHlwZS5iZXppZXJDdXJ2ZVRvID0gZnVuY3Rpb24gKGNwWCwgY3BZLCBjcFgyLCBjcFkyLCB0b1gsIHRvWSlcbntcbiAgICBpZiAodGhpcy5jdXJyZW50UGF0aClcbiAgICB7XG4gICAgICAgIGlmICh0aGlzLmN1cnJlbnRQYXRoLnNoYXBlLnBvaW50cy5sZW5ndGggPT09IDApXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuY3VycmVudFBhdGguc2hhcGUucG9pbnRzID0gWzAsIDBdO1xuICAgICAgICB9XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHRoaXMubW92ZVRvKDAsMCk7XG4gICAgfVxuXG4gICAgdmFyIG4gPSAyMCxcbiAgICAgICAgZHQsXG4gICAgICAgIGR0MixcbiAgICAgICAgZHQzLFxuICAgICAgICB0MixcbiAgICAgICAgdDMsXG4gICAgICAgIHBvaW50cyA9IHRoaXMuY3VycmVudFBhdGguc2hhcGUucG9pbnRzO1xuXG4gICAgdmFyIGZyb21YID0gcG9pbnRzW3BvaW50cy5sZW5ndGgtMl07XG4gICAgdmFyIGZyb21ZID0gcG9pbnRzW3BvaW50cy5sZW5ndGgtMV07XG5cbiAgICB2YXIgaiA9IDA7XG5cbiAgICBmb3IgKHZhciBpID0gMTsgaSA8PSBuOyArK2kpXG4gICAge1xuICAgICAgICBqID0gaSAvIG47XG5cbiAgICAgICAgZHQgPSAoMSAtIGopO1xuICAgICAgICBkdDIgPSBkdCAqIGR0O1xuICAgICAgICBkdDMgPSBkdDIgKiBkdDtcblxuICAgICAgICB0MiA9IGogKiBqO1xuICAgICAgICB0MyA9IHQyICogajtcblxuICAgICAgICBwb2ludHMucHVzaCggZHQzICogZnJvbVggKyAzICogZHQyICogaiAqIGNwWCArIDMgKiBkdCAqIHQyICogY3BYMiArIHQzICogdG9YLFxuICAgICAgICAgICAgICAgICAgICAgZHQzICogZnJvbVkgKyAzICogZHQyICogaiAqIGNwWSArIDMgKiBkdCAqIHQyICogY3BZMiArIHQzICogdG9ZKTtcbiAgICB9XG5cbiAgICB0aGlzLmRpcnR5ID0gdGhpcy5ib3VuZHNEaXJ0eSA9IHRydWU7XG5cbiAgICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogVGhlIGFyY1RvKCkgbWV0aG9kIGNyZWF0ZXMgYW4gYXJjL2N1cnZlIGJldHdlZW4gdHdvIHRhbmdlbnRzIG9uIHRoZSBjYW52YXMuXG4gKlxuICogXCJib3Jyb3dlZFwiIGZyb20gaHR0cHM6Ly9jb2RlLmdvb2dsZS5jb20vcC9meGNhbnZhcy8gLSB0aGFua3MgZ29vZ2xlIVxuICpcbiAqIEBwYXJhbSB4MSB7bnVtYmVyfSBUaGUgeC1jb29yZGluYXRlIG9mIHRoZSBiZWdpbm5pbmcgb2YgdGhlIGFyY1xuICogQHBhcmFtIHkxIHtudW1iZXJ9IFRoZSB5LWNvb3JkaW5hdGUgb2YgdGhlIGJlZ2lubmluZyBvZiB0aGUgYXJjXG4gKiBAcGFyYW0geDIge251bWJlcn0gVGhlIHgtY29vcmRpbmF0ZSBvZiB0aGUgZW5kIG9mIHRoZSBhcmNcbiAqIEBwYXJhbSB5MiB7bnVtYmVyfSBUaGUgeS1jb29yZGluYXRlIG9mIHRoZSBlbmQgb2YgdGhlIGFyY1xuICogQHBhcmFtIHJhZGl1cyB7bnVtYmVyfSBUaGUgcmFkaXVzIG9mIHRoZSBhcmNcbiAqIEByZXR1cm4ge1BJWEkuR3JhcGhpY3N9XG4gKi9cbkdyYXBoaWNzLnByb3RvdHlwZS5hcmNUbyA9IGZ1bmN0aW9uICh4MSwgeTEsIHgyLCB5MiwgcmFkaXVzKVxue1xuICAgIGlmICh0aGlzLmN1cnJlbnRQYXRoKVxuICAgIHtcbiAgICAgICAgaWYgKHRoaXMuY3VycmVudFBhdGguc2hhcGUucG9pbnRzLmxlbmd0aCA9PT0gMClcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5jdXJyZW50UGF0aC5zaGFwZS5wb2ludHMucHVzaCh4MSwgeTEpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHRoaXMubW92ZVRvKHgxLCB5MSk7XG4gICAgfVxuXG4gICAgdmFyIHBvaW50cyA9IHRoaXMuY3VycmVudFBhdGguc2hhcGUucG9pbnRzLFxuICAgICAgICBmcm9tWCA9IHBvaW50c1twb2ludHMubGVuZ3RoLTJdLFxuICAgICAgICBmcm9tWSA9IHBvaW50c1twb2ludHMubGVuZ3RoLTFdLFxuICAgICAgICBhMSA9IGZyb21ZIC0geTEsXG4gICAgICAgIGIxID0gZnJvbVggLSB4MSxcbiAgICAgICAgYTIgPSB5MiAgIC0geTEsXG4gICAgICAgIGIyID0geDIgICAtIHgxLFxuICAgICAgICBtbSA9IE1hdGguYWJzKGExICogYjIgLSBiMSAqIGEyKTtcblxuICAgIGlmIChtbSA8IDEuMGUtOCB8fCByYWRpdXMgPT09IDApXG4gICAge1xuICAgICAgICBpZiAocG9pbnRzW3BvaW50cy5sZW5ndGgtMl0gIT09IHgxIHx8IHBvaW50c1twb2ludHMubGVuZ3RoLTFdICE9PSB5MSlcbiAgICAgICAge1xuICAgICAgICAgICAgcG9pbnRzLnB1c2goeDEsIHkxKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICB2YXIgZGQgPSBhMSAqIGExICsgYjEgKiBiMSxcbiAgICAgICAgICAgIGNjID0gYTIgKiBhMiArIGIyICogYjIsXG4gICAgICAgICAgICB0dCA9IGExICogYTIgKyBiMSAqIGIyLFxuICAgICAgICAgICAgazEgPSByYWRpdXMgKiBNYXRoLnNxcnQoZGQpIC8gbW0sXG4gICAgICAgICAgICBrMiA9IHJhZGl1cyAqIE1hdGguc3FydChjYykgLyBtbSxcbiAgICAgICAgICAgIGoxID0gazEgKiB0dCAvIGRkLFxuICAgICAgICAgICAgajIgPSBrMiAqIHR0IC8gY2MsXG4gICAgICAgICAgICBjeCA9IGsxICogYjIgKyBrMiAqIGIxLFxuICAgICAgICAgICAgY3kgPSBrMSAqIGEyICsgazIgKiBhMSxcbiAgICAgICAgICAgIHB4ID0gYjEgKiAoazIgKyBqMSksXG4gICAgICAgICAgICBweSA9IGExICogKGsyICsgajEpLFxuICAgICAgICAgICAgcXggPSBiMiAqIChrMSArIGoyKSxcbiAgICAgICAgICAgIHF5ID0gYTIgKiAoazEgKyBqMiksXG4gICAgICAgICAgICBzdGFydEFuZ2xlID0gTWF0aC5hdGFuMihweSAtIGN5LCBweCAtIGN4KSxcbiAgICAgICAgICAgIGVuZEFuZ2xlICAgPSBNYXRoLmF0YW4yKHF5IC0gY3ksIHF4IC0gY3gpO1xuXG4gICAgICAgIHRoaXMuYXJjKGN4ICsgeDEsIGN5ICsgeTEsIHJhZGl1cywgc3RhcnRBbmdsZSwgZW5kQW5nbGUsIGIxICogYTIgPiBiMiAqIGExKTtcbiAgICB9XG5cbiAgICB0aGlzLmRpcnR5ID0gdGhpcy5ib3VuZHNEaXJ0eSA9IHRydWU7XG5cbiAgICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogVGhlIGFyYyBtZXRob2QgY3JlYXRlcyBhbiBhcmMvY3VydmUgKHVzZWQgdG8gY3JlYXRlIGNpcmNsZXMsIG9yIHBhcnRzIG9mIGNpcmNsZXMpLlxuICpcbiAqIEBwYXJhbSBjeCB7bnVtYmVyfSBUaGUgeC1jb29yZGluYXRlIG9mIHRoZSBjZW50ZXIgb2YgdGhlIGNpcmNsZVxuICogQHBhcmFtIGN5IHtudW1iZXJ9IFRoZSB5LWNvb3JkaW5hdGUgb2YgdGhlIGNlbnRlciBvZiB0aGUgY2lyY2xlXG4gKiBAcGFyYW0gcmFkaXVzIHtudW1iZXJ9IFRoZSByYWRpdXMgb2YgdGhlIGNpcmNsZVxuICogQHBhcmFtIHN0YXJ0QW5nbGUge251bWJlcn0gVGhlIHN0YXJ0aW5nIGFuZ2xlLCBpbiByYWRpYW5zICgwIGlzIGF0IHRoZSAzIG8nY2xvY2sgcG9zaXRpb24gb2YgdGhlIGFyYydzIGNpcmNsZSlcbiAqIEBwYXJhbSBlbmRBbmdsZSB7bnVtYmVyfSBUaGUgZW5kaW5nIGFuZ2xlLCBpbiByYWRpYW5zXG4gKiBAcGFyYW0gYW50aWNsb2Nrd2lzZSB7Ym9vbGVhbn0gT3B0aW9uYWwuIFNwZWNpZmllcyB3aGV0aGVyIHRoZSBkcmF3aW5nIHNob3VsZCBiZSBjb3VudGVyY2xvY2t3aXNlIG9yIGNsb2Nrd2lzZS4gRmFsc2UgaXMgZGVmYXVsdCwgYW5kIGluZGljYXRlcyBjbG9ja3dpc2UsIHdoaWxlIHRydWUgaW5kaWNhdGVzIGNvdW50ZXItY2xvY2t3aXNlLlxuICogQHJldHVybiB7UElYSS5HcmFwaGljc31cbiAqL1xuR3JhcGhpY3MucHJvdG90eXBlLmFyYyA9IGZ1bmN0aW9uKGN4LCBjeSwgcmFkaXVzLCBzdGFydEFuZ2xlLCBlbmRBbmdsZSwgYW50aWNsb2Nrd2lzZSlcbntcbiAgICBhbnRpY2xvY2t3aXNlID0gYW50aWNsb2Nrd2lzZSB8fCBmYWxzZTtcblxuICAgIGlmIChzdGFydEFuZ2xlID09PSBlbmRBbmdsZSlcbiAgICB7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIGlmKCAhYW50aWNsb2Nrd2lzZSAmJiBlbmRBbmdsZSA8PSBzdGFydEFuZ2xlIClcbiAgICB7XG4gICAgICAgIGVuZEFuZ2xlICs9IE1hdGguUEkgKiAyO1xuICAgIH1cbiAgICBlbHNlIGlmKCBhbnRpY2xvY2t3aXNlICYmIHN0YXJ0QW5nbGUgPD0gZW5kQW5nbGUgKVxuICAgIHtcbiAgICAgICAgc3RhcnRBbmdsZSArPSBNYXRoLlBJICogMjtcbiAgICB9XG5cbiAgICB2YXIgc3dlZXAgPSBhbnRpY2xvY2t3aXNlID8gKHN0YXJ0QW5nbGUgLSBlbmRBbmdsZSkgKiAtMSA6IChlbmRBbmdsZSAtIHN0YXJ0QW5nbGUpO1xuICAgIHZhciBzZWdzID0gIE1hdGguY2VpbChNYXRoLmFicyhzd2VlcCkgLyAoTWF0aC5QSSAqIDIpKSAqIDQwO1xuXG4gICAgaWYoc3dlZXAgPT09IDApXG4gICAge1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICB2YXIgc3RhcnRYID0gY3ggKyBNYXRoLmNvcyhzdGFydEFuZ2xlKSAqIHJhZGl1cztcbiAgICB2YXIgc3RhcnRZID0gY3kgKyBNYXRoLnNpbihzdGFydEFuZ2xlKSAqIHJhZGl1cztcblxuICAgIGlmICh0aGlzLmN1cnJlbnRQYXRoKVxuICAgIHtcbiAgICAgICAgdGhpcy5jdXJyZW50UGF0aC5zaGFwZS5wb2ludHMucHVzaChzdGFydFgsIHN0YXJ0WSk7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHRoaXMubW92ZVRvKHN0YXJ0WCwgc3RhcnRZKTtcbiAgICB9XG5cbiAgICB2YXIgcG9pbnRzID0gdGhpcy5jdXJyZW50UGF0aC5zaGFwZS5wb2ludHM7XG5cbiAgICB2YXIgdGhldGEgPSBzd2VlcC8oc2VncyoyKTtcbiAgICB2YXIgdGhldGEyID0gdGhldGEqMjtcblxuICAgIHZhciBjVGhldGEgPSBNYXRoLmNvcyh0aGV0YSk7XG4gICAgdmFyIHNUaGV0YSA9IE1hdGguc2luKHRoZXRhKTtcblxuICAgIHZhciBzZWdNaW51cyA9IHNlZ3MgLSAxO1xuXG4gICAgdmFyIHJlbWFpbmRlciA9ICggc2VnTWludXMgJSAxICkgLyBzZWdNaW51cztcblxuICAgIGZvcih2YXIgaT0wOyBpPD1zZWdNaW51czsgaSsrKVxuICAgIHtcbiAgICAgICAgdmFyIHJlYWwgPSAgaSArIHJlbWFpbmRlciAqIGk7XG5cblxuICAgICAgICB2YXIgYW5nbGUgPSAoKHRoZXRhKSArIHN0YXJ0QW5nbGUgKyAodGhldGEyICogcmVhbCkpO1xuXG4gICAgICAgIHZhciBjID0gTWF0aC5jb3MoYW5nbGUpO1xuICAgICAgICB2YXIgcyA9IC1NYXRoLnNpbihhbmdsZSk7XG5cbiAgICAgICAgcG9pbnRzLnB1c2goKCAoY1RoZXRhICogIGMpICsgKHNUaGV0YSAqIHMpICkgKiByYWRpdXMgKyBjeCxcbiAgICAgICAgICAgICAgICAgICAgKCAoY1RoZXRhICogLXMpICsgKHNUaGV0YSAqIGMpICkgKiByYWRpdXMgKyBjeSk7XG4gICAgfVxuXG4gICAgdGhpcy5kaXJ0eSA9IHRoaXMuYm91bmRzRGlydHkgPSB0cnVlO1xuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIFNwZWNpZmllcyBhIHNpbXBsZSBvbmUtY29sb3IgZmlsbCB0aGF0IHN1YnNlcXVlbnQgY2FsbHMgdG8gb3RoZXIgR3JhcGhpY3MgbWV0aG9kc1xuICogKHN1Y2ggYXMgbGluZVRvKCkgb3IgZHJhd0NpcmNsZSgpKSB1c2Ugd2hlbiBkcmF3aW5nLlxuICpcbiAqIEBwYXJhbSBjb2xvciB7bnVtYmVyfSB0aGUgY29sb3Igb2YgdGhlIGZpbGxcbiAqIEBwYXJhbSBhbHBoYSB7bnVtYmVyfSB0aGUgYWxwaGEgb2YgdGhlIGZpbGxcbiAqIEByZXR1cm4ge1BJWEkuR3JhcGhpY3N9XG4gKi9cbkdyYXBoaWNzLnByb3RvdHlwZS5iZWdpbkZpbGwgPSBmdW5jdGlvbiAoY29sb3IsIGFscGhhKVxue1xuICAgIHRoaXMuZmlsbGluZyA9IHRydWU7XG4gICAgdGhpcy5maWxsQ29sb3IgPSBjb2xvciB8fCAwO1xuICAgIHRoaXMuZmlsbEFscGhhID0gKGFscGhhID09PSB1bmRlZmluZWQpID8gMSA6IGFscGhhO1xuXG4gICAgaWYgKHRoaXMuY3VycmVudFBhdGgpXG4gICAge1xuICAgICAgICBpZiAodGhpcy5jdXJyZW50UGF0aC5zaGFwZS5wb2ludHMubGVuZ3RoIDw9IDIpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuY3VycmVudFBhdGguZmlsbCA9IHRoaXMuZmlsbGluZztcbiAgICAgICAgICAgIHRoaXMuY3VycmVudFBhdGguZmlsbENvbG9yID0gdGhpcy5maWxsQ29sb3I7XG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRQYXRoLmZpbGxBbHBoYSA9IHRoaXMuZmlsbEFscGhhO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBBcHBsaWVzIGEgZmlsbCB0byB0aGUgbGluZXMgYW5kIHNoYXBlcyB0aGF0IHdlcmUgYWRkZWQgc2luY2UgdGhlIGxhc3QgY2FsbCB0byB0aGUgYmVnaW5GaWxsKCkgbWV0aG9kLlxuICpcbiAqIEByZXR1cm4ge0dyYXBoaWNzfVxuICovXG5HcmFwaGljcy5wcm90b3R5cGUuZW5kRmlsbCA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy5maWxsaW5nID0gZmFsc2U7XG4gICAgdGhpcy5maWxsQ29sb3IgPSBudWxsO1xuICAgIHRoaXMuZmlsbEFscGhhID0gMTtcblxuICAgIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKlxuICogQHBhcmFtIHgge251bWJlcn0gVGhlIFggY29vcmQgb2YgdGhlIHRvcC1sZWZ0IG9mIHRoZSByZWN0YW5nbGVcbiAqIEBwYXJhbSB5IHtudW1iZXJ9IFRoZSBZIGNvb3JkIG9mIHRoZSB0b3AtbGVmdCBvZiB0aGUgcmVjdGFuZ2xlXG4gKiBAcGFyYW0gd2lkdGgge251bWJlcn0gVGhlIHdpZHRoIG9mIHRoZSByZWN0YW5nbGVcbiAqIEBwYXJhbSBoZWlnaHQge251bWJlcn0gVGhlIGhlaWdodCBvZiB0aGUgcmVjdGFuZ2xlXG4gKiBAcmV0dXJuIHtQSVhJLkdyYXBoaWNzfVxuICovXG5HcmFwaGljcy5wcm90b3R5cGUuZHJhd1JlY3QgPSBmdW5jdGlvbiAoIHgsIHksIHdpZHRoLCBoZWlnaHQgKVxue1xuICAgIHRoaXMuZHJhd1NoYXBlKG5ldyBtYXRoLlJlY3RhbmdsZSh4LHksIHdpZHRoLCBoZWlnaHQpKTtcblxuICAgIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKlxuICogQHBhcmFtIHgge251bWJlcn0gVGhlIFggY29vcmQgb2YgdGhlIHRvcC1sZWZ0IG9mIHRoZSByZWN0YW5nbGVcbiAqIEBwYXJhbSB5IHtudW1iZXJ9IFRoZSBZIGNvb3JkIG9mIHRoZSB0b3AtbGVmdCBvZiB0aGUgcmVjdGFuZ2xlXG4gKiBAcGFyYW0gd2lkdGgge251bWJlcn0gVGhlIHdpZHRoIG9mIHRoZSByZWN0YW5nbGVcbiAqIEBwYXJhbSBoZWlnaHQge251bWJlcn0gVGhlIGhlaWdodCBvZiB0aGUgcmVjdGFuZ2xlXG4gKiBAcGFyYW0gcmFkaXVzIHtudW1iZXJ9IFJhZGl1cyBvZiB0aGUgcmVjdGFuZ2xlIGNvcm5lcnNcbiAqIEByZXR1cm4ge1BJWEkuR3JhcGhpY3N9XG4gKi9cbkdyYXBoaWNzLnByb3RvdHlwZS5kcmF3Um91bmRlZFJlY3QgPSBmdW5jdGlvbiAoIHgsIHksIHdpZHRoLCBoZWlnaHQsIHJhZGl1cyApXG57XG4gICAgdGhpcy5kcmF3U2hhcGUobmV3IG1hdGguUm91bmRlZFJlY3RhbmdsZSh4LCB5LCB3aWR0aCwgaGVpZ2h0LCByYWRpdXMpKTtcblxuICAgIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBEcmF3cyBhIGNpcmNsZS5cbiAqXG4gKiBAcGFyYW0geCB7bnVtYmVyfSBUaGUgWCBjb29yZGluYXRlIG9mIHRoZSBjZW50ZXIgb2YgdGhlIGNpcmNsZVxuICogQHBhcmFtIHkge251bWJlcn0gVGhlIFkgY29vcmRpbmF0ZSBvZiB0aGUgY2VudGVyIG9mIHRoZSBjaXJjbGVcbiAqIEBwYXJhbSByYWRpdXMge251bWJlcn0gVGhlIHJhZGl1cyBvZiB0aGUgY2lyY2xlXG4gKiBAcmV0dXJuIHtQSVhJLkdyYXBoaWNzfVxuICovXG5HcmFwaGljcy5wcm90b3R5cGUuZHJhd0NpcmNsZSA9IGZ1bmN0aW9uICh4LCB5LCByYWRpdXMpXG57XG4gICAgdGhpcy5kcmF3U2hhcGUobmV3IG1hdGguQ2lyY2xlKHgseSwgcmFkaXVzKSk7XG5cbiAgICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogRHJhd3MgYW4gZWxsaXBzZS5cbiAqXG4gKiBAcGFyYW0geCB7bnVtYmVyfSBUaGUgWCBjb29yZGluYXRlIG9mIHRoZSBjZW50ZXIgb2YgdGhlIGVsbGlwc2VcbiAqIEBwYXJhbSB5IHtudW1iZXJ9IFRoZSBZIGNvb3JkaW5hdGUgb2YgdGhlIGNlbnRlciBvZiB0aGUgZWxsaXBzZVxuICogQHBhcmFtIHdpZHRoIHtudW1iZXJ9IFRoZSBoYWxmIHdpZHRoIG9mIHRoZSBlbGxpcHNlXG4gKiBAcGFyYW0gaGVpZ2h0IHtudW1iZXJ9IFRoZSBoYWxmIGhlaWdodCBvZiB0aGUgZWxsaXBzZVxuICogQHJldHVybiB7UElYSS5HcmFwaGljc31cbiAqL1xuR3JhcGhpY3MucHJvdG90eXBlLmRyYXdFbGxpcHNlID0gZnVuY3Rpb24gKHgsIHksIHdpZHRoLCBoZWlnaHQpXG57XG4gICAgdGhpcy5kcmF3U2hhcGUobmV3IG1hdGguRWxsaXBzZSh4LCB5LCB3aWR0aCwgaGVpZ2h0KSk7XG5cbiAgICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogRHJhd3MgYSBwb2x5Z29uIHVzaW5nIHRoZSBnaXZlbiBwYXRoLlxuICpcbiAqIEBwYXJhbSBwYXRoIHtudW1iZXJbXXxQSVhJLlBvaW50W119IFRoZSBwYXRoIGRhdGEgdXNlZCB0byBjb25zdHJ1Y3QgdGhlIHBvbHlnb24uXG4gKiBAcmV0dXJuIHtQSVhJLkdyYXBoaWNzfVxuICovXG5HcmFwaGljcy5wcm90b3R5cGUuZHJhd1BvbHlnb24gPSBmdW5jdGlvbiAocGF0aClcbntcbiAgICAvLyBwcmV2ZW50cyBhbiBhcmd1bWVudCBhc3NpZ25tZW50IGRlb3B0XG4gICAgLy8gc2VlIHNlY3Rpb24gMy4xOiBodHRwczovL2dpdGh1Yi5jb20vcGV0a2FhbnRvbm92L2JsdWViaXJkL3dpa2kvT3B0aW1pemF0aW9uLWtpbGxlcnMjMy1tYW5hZ2luZy1hcmd1bWVudHNcbiAgICB2YXIgcG9pbnRzID0gcGF0aDtcblxuICAgIHZhciBjbG9zZWQgPSB0cnVlO1xuXG4gICAgaWYgKHBvaW50cyBpbnN0YW5jZW9mIG1hdGguUG9seWdvbilcbiAgICB7XG4gICAgICAgIGNsb3NlZCA9IHBvaW50cy5jbG9zZWQ7XG4gICAgICAgIHBvaW50cyA9IHBvaW50cy5wb2ludHM7XG4gICAgfVxuXG4gICAgaWYgKCFBcnJheS5pc0FycmF5KHBvaW50cykpXG4gICAge1xuICAgICAgICAvLyBwcmV2ZW50cyBhbiBhcmd1bWVudCBsZWFrIGRlb3B0XG4gICAgICAgIC8vIHNlZSBzZWN0aW9uIDMuMjogaHR0cHM6Ly9naXRodWIuY29tL3BldGthYW50b25vdi9ibHVlYmlyZC93aWtpL09wdGltaXphdGlvbi1raWxsZXJzIzMtbWFuYWdpbmctYXJndW1lbnRzXG4gICAgICAgIHBvaW50cyA9IG5ldyBBcnJheShhcmd1bWVudHMubGVuZ3RoKTtcblxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHBvaW50cy5sZW5ndGg7ICsraSlcbiAgICAgICAge1xuICAgICAgICAgICAgcG9pbnRzW2ldID0gYXJndW1lbnRzW2ldO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgdmFyIHNoYXBlID0gbmV3IG1hdGguUG9seWdvbihwb2ludHMpO1xuICAgIHNoYXBlLmNsb3NlZCA9IGNsb3NlZDtcblxuICAgIHRoaXMuZHJhd1NoYXBlKHNoYXBlKTtcblxuICAgIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBDbGVhcnMgdGhlIGdyYXBoaWNzIHRoYXQgd2VyZSBkcmF3biB0byB0aGlzIEdyYXBoaWNzIG9iamVjdCwgYW5kIHJlc2V0cyBmaWxsIGFuZCBsaW5lIHN0eWxlIHNldHRpbmdzLlxuICpcbiAqIEByZXR1cm4ge1BJWEkuR3JhcGhpY3N9XG4gKi9cbkdyYXBoaWNzLnByb3RvdHlwZS5jbGVhciA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy5saW5lV2lkdGggPSAwO1xuICAgIHRoaXMuZmlsbGluZyA9IGZhbHNlO1xuXG4gICAgdGhpcy5kaXJ0eSA9IHRydWU7XG4gICAgdGhpcy5jbGVhckRpcnR5ID0gdHJ1ZTtcbiAgICB0aGlzLmdyYXBoaWNzRGF0YSA9IFtdO1xuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIFVzZWZ1bCBmdW5jdGlvbiB0aGF0IHJldHVybnMgYSB0ZXh0dXJlIG9mIHRoZSBncmFwaGljcyBvYmplY3QgdGhhdCBjYW4gdGhlbiBiZSB1c2VkIHRvIGNyZWF0ZSBzcHJpdGVzXG4gKiBUaGlzIGNhbiBiZSBxdWl0ZSB1c2VmdWwgaWYgeW91ciBnZW9tZXRyeSBpcyBjb21wbGljYXRlZCBhbmQgbmVlZHMgdG8gYmUgcmV1c2VkIG11bHRpcGxlIHRpbWVzLlxuICpcbiAqIEBwYXJhbSByZXNvbHV0aW9uIHtudW1iZXJ9IFRoZSByZXNvbHV0aW9uIG9mIHRoZSB0ZXh0dXJlIGJlaW5nIGdlbmVyYXRlZFxuICogQHBhcmFtIHNjYWxlTW9kZSB7bnVtYmVyfSBTaG91bGQgYmUgb25lIG9mIHRoZSBzY2FsZU1vZGUgY29uc3RzXG4gKiBAcmV0dXJuIHtQSVhJLlRleHR1cmV9IGEgdGV4dHVyZSBvZiB0aGUgZ3JhcGhpY3Mgb2JqZWN0XG4gKi9cbkdyYXBoaWNzLnByb3RvdHlwZS5nZW5lcmF0ZVRleHR1cmUgPSBmdW5jdGlvbiAocmVuZGVyZXIsIHJlc29sdXRpb24sIHNjYWxlTW9kZSlcbntcblxuICAgIHJlc29sdXRpb24gPSByZXNvbHV0aW9uIHx8IDE7XG5cbiAgICB2YXIgYm91bmRzID0gdGhpcy5nZXRMb2NhbEJvdW5kcygpO1xuXG4gICAgdmFyIGNhbnZhc0J1ZmZlciA9IG5ldyBDYW52YXNCdWZmZXIoYm91bmRzLndpZHRoICogcmVzb2x1dGlvbiwgYm91bmRzLmhlaWdodCAqIHJlc29sdXRpb24pO1xuXG4gICAgdmFyIHRleHR1cmUgPSBUZXh0dXJlLmZyb21DYW52YXMoY2FudmFzQnVmZmVyLmNhbnZhcywgc2NhbGVNb2RlKTtcbiAgICB0ZXh0dXJlLmJhc2VUZXh0dXJlLnJlc29sdXRpb24gPSByZXNvbHV0aW9uO1xuXG4gICAgY2FudmFzQnVmZmVyLmNvbnRleHQuc2NhbGUocmVzb2x1dGlvbiwgcmVzb2x1dGlvbik7XG5cbiAgICBjYW52YXNCdWZmZXIuY29udGV4dC50cmFuc2xhdGUoLWJvdW5kcy54LC1ib3VuZHMueSk7XG5cbiAgICBDYW52YXNHcmFwaGljcy5yZW5kZXJHcmFwaGljcyh0aGlzLCBjYW52YXNCdWZmZXIuY29udGV4dCk7XG5cbiAgICByZXR1cm4gdGV4dHVyZTtcbn07XG5cbi8qKlxuICogUmVuZGVycyB0aGUgb2JqZWN0IHVzaW5nIHRoZSBXZWJHTCByZW5kZXJlclxuICpcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5XZWJHTFJlbmRlcmVyfVxuICogQHByaXZhdGVcbiAqL1xuR3JhcGhpY3MucHJvdG90eXBlLl9yZW5kZXJXZWJHTCA9IGZ1bmN0aW9uIChyZW5kZXJlcilcbntcbiAgICAvLyBpZiB0aGUgc3ByaXRlIGlzIG5vdCB2aXNpYmxlIG9yIHRoZSBhbHBoYSBpcyAwIHRoZW4gbm8gbmVlZCB0byByZW5kZXIgdGhpcyBlbGVtZW50XG5cbiAgICBpZiAodGhpcy5nbERpcnR5KVxuICAgIHtcbiAgICAgICAgdGhpcy5kaXJ0eSA9IHRydWU7XG4gICAgICAgIHRoaXMuZ2xEaXJ0eSA9IGZhbHNlO1xuICAgIH1cblxuICAgIHJlbmRlcmVyLnNldE9iamVjdFJlbmRlcmVyKHJlbmRlcmVyLnBsdWdpbnMuZ3JhcGhpY3MpO1xuICAgIHJlbmRlcmVyLnBsdWdpbnMuZ3JhcGhpY3MucmVuZGVyKHRoaXMpO1xuXG59O1xuXG4vKipcbiAqIFJlbmRlcnMgdGhlIG9iamVjdCB1c2luZyB0aGUgQ2FudmFzIHJlbmRlcmVyXG4gKlxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLkNhbnZhc1JlbmRlcmVyfVxuICogQHByaXZhdGVcbiAqL1xuR3JhcGhpY3MucHJvdG90eXBlLl9yZW5kZXJDYW52YXMgPSBmdW5jdGlvbiAocmVuZGVyZXIpXG57XG4gICAgaWYgKHRoaXMuaXNNYXNrID09PSB0cnVlKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIGlmIHRoZSB0aW50IGhhcyBjaGFuZ2VkLCBzZXQgdGhlIGdyYXBoaWNzIG9iamVjdCB0byBkaXJ0eS5cbiAgICBpZiAodGhpcy5fcHJldlRpbnQgIT09IHRoaXMudGludCkge1xuICAgICAgICB0aGlzLmRpcnR5ID0gdHJ1ZTtcbiAgICB9XG5cbiAgICAvLyB0aGlzIGNvZGUgbWF5IHN0aWxsIGJlIG5lZWRlZCBzbyBsZWF2aW5nIGZvciBub3cuLlxuICAgIC8vXG4gICAgLypcbiAgICBpZiAodGhpcy5fY2FjaGVBc0JpdG1hcClcbiAgICB7XG4gICAgICAgIGlmICh0aGlzLmRpcnR5IHx8IHRoaXMuY2FjaGVkU3ByaXRlRGlydHkpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuX2dlbmVyYXRlQ2FjaGVkU3ByaXRlKCk7XG5cbiAgICAgICAgICAgIC8vIHdlIHdpbGwgYWxzbyBuZWVkIHRvIHVwZGF0ZSB0aGUgdGV4dHVyZVxuICAgICAgICAgICAgdGhpcy51cGRhdGVDYWNoZWRTcHJpdGVUZXh0dXJlKCk7XG5cbiAgICAgICAgICAgIHRoaXMuY2FjaGVkU3ByaXRlRGlydHkgPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMuZGlydHkgPSBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX2NhY2hlZFNwcml0ZS5hbHBoYSA9IHRoaXMuYWxwaGE7XG5cbiAgICAgICAgU3ByaXRlLnByb3RvdHlwZS5fcmVuZGVyQ2FudmFzLmNhbGwodGhpcy5fY2FjaGVkU3ByaXRlLCByZW5kZXJlcik7XG5cbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICAqL1xuICAgIHZhciBjb250ZXh0ID0gcmVuZGVyZXIuY29udGV4dDtcbiAgICB2YXIgdHJhbnNmb3JtID0gdGhpcy53b3JsZFRyYW5zZm9ybTtcblxuICAgIHZhciBjb21wb3NpdGVPcGVyYXRpb24gPSByZW5kZXJlci5ibGVuZE1vZGVzW3RoaXMuYmxlbmRNb2RlXTtcbiAgICBpZiAoY29tcG9zaXRlT3BlcmF0aW9uICE9PSBjb250ZXh0Lmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbilcbiAgICB7XG4gICAgICAgIGNvbnRleHQuZ2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uID0gY29tcG9zaXRlT3BlcmF0aW9uO1xuICAgIH1cblxuICAgIHZhciByZXNvbHV0aW9uID0gcmVuZGVyZXIucmVzb2x1dGlvbjtcbiAgICBjb250ZXh0LnNldFRyYW5zZm9ybShcbiAgICAgICAgdHJhbnNmb3JtLmEgKiByZXNvbHV0aW9uLFxuICAgICAgICB0cmFuc2Zvcm0uYiAqIHJlc29sdXRpb24sXG4gICAgICAgIHRyYW5zZm9ybS5jICogcmVzb2x1dGlvbixcbiAgICAgICAgdHJhbnNmb3JtLmQgKiByZXNvbHV0aW9uLFxuICAgICAgICB0cmFuc2Zvcm0udHggKiByZXNvbHV0aW9uLFxuICAgICAgICB0cmFuc2Zvcm0udHkgKiByZXNvbHV0aW9uXG4gICAgKTtcblxuICAgIENhbnZhc0dyYXBoaWNzLnJlbmRlckdyYXBoaWNzKHRoaXMsIGNvbnRleHQpO1xufTtcblxuLyoqXG4gKiBSZXRyaWV2ZXMgdGhlIGJvdW5kcyBvZiB0aGUgZ3JhcGhpYyBzaGFwZSBhcyBhIHJlY3RhbmdsZSBvYmplY3RcbiAqXG4gKiBAcGFyYW0gW21hdHJpeF0ge1BJWEkuTWF0cml4fSBUaGUgd29ybGQgdHJhbnNmb3JtIG1hdHJpeCB0byB1c2UsIGRlZmF1bHRzIHRvIHRoaXNcbiAqICBvYmplY3QncyB3b3JsZFRyYW5zZm9ybS5cbiAqIEByZXR1cm4ge1BJWEkuUmVjdGFuZ2xlfSB0aGUgcmVjdGFuZ3VsYXIgYm91bmRpbmcgYXJlYVxuICovXG5HcmFwaGljcy5wcm90b3R5cGUuZ2V0Qm91bmRzID0gZnVuY3Rpb24gKG1hdHJpeClcbntcbiAgICBpZighdGhpcy5fY3VycmVudEJvdW5kcylcbiAgICB7XG5cbiAgICAgICAgLy8gcmV0dXJuIGFuIGVtcHR5IG9iamVjdCBpZiB0aGUgaXRlbSBpcyBhIG1hc2shXG4gICAgICAgIGlmICghdGhpcy5yZW5kZXJhYmxlKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gbWF0aC5SZWN0YW5nbGUuRU1QVFk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5ib3VuZHNEaXJ0eSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51cGRhdGVMb2NhbEJvdW5kcygpO1xuXG4gICAgICAgICAgICB0aGlzLmdsRGlydHkgPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy5jYWNoZWRTcHJpdGVEaXJ0eSA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLmJvdW5kc0RpcnR5ID0gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgYm91bmRzID0gdGhpcy5fbG9jYWxCb3VuZHM7XG5cbiAgICAgICAgdmFyIHcwID0gYm91bmRzLng7XG4gICAgICAgIHZhciB3MSA9IGJvdW5kcy53aWR0aCArIGJvdW5kcy54O1xuXG4gICAgICAgIHZhciBoMCA9IGJvdW5kcy55O1xuICAgICAgICB2YXIgaDEgPSBib3VuZHMuaGVpZ2h0ICsgYm91bmRzLnk7XG5cbiAgICAgICAgdmFyIHdvcmxkVHJhbnNmb3JtID0gbWF0cml4IHx8IHRoaXMud29ybGRUcmFuc2Zvcm07XG5cbiAgICAgICAgdmFyIGEgPSB3b3JsZFRyYW5zZm9ybS5hO1xuICAgICAgICB2YXIgYiA9IHdvcmxkVHJhbnNmb3JtLmI7XG4gICAgICAgIHZhciBjID0gd29ybGRUcmFuc2Zvcm0uYztcbiAgICAgICAgdmFyIGQgPSB3b3JsZFRyYW5zZm9ybS5kO1xuICAgICAgICB2YXIgdHggPSB3b3JsZFRyYW5zZm9ybS50eDtcbiAgICAgICAgdmFyIHR5ID0gd29ybGRUcmFuc2Zvcm0udHk7XG5cbiAgICAgICAgdmFyIHgxID0gYSAqIHcxICsgYyAqIGgxICsgdHg7XG4gICAgICAgIHZhciB5MSA9IGQgKiBoMSArIGIgKiB3MSArIHR5O1xuXG4gICAgICAgIHZhciB4MiA9IGEgKiB3MCArIGMgKiBoMSArIHR4O1xuICAgICAgICB2YXIgeTIgPSBkICogaDEgKyBiICogdzAgKyB0eTtcblxuICAgICAgICB2YXIgeDMgPSBhICogdzAgKyBjICogaDAgKyB0eDtcbiAgICAgICAgdmFyIHkzID0gZCAqIGgwICsgYiAqIHcwICsgdHk7XG5cbiAgICAgICAgdmFyIHg0ID0gIGEgKiB3MSArIGMgKiBoMCArIHR4O1xuICAgICAgICB2YXIgeTQgPSAgZCAqIGgwICsgYiAqIHcxICsgdHk7XG5cbiAgICAgICAgdmFyIG1heFggPSB4MTtcbiAgICAgICAgdmFyIG1heFkgPSB5MTtcblxuICAgICAgICB2YXIgbWluWCA9IHgxO1xuICAgICAgICB2YXIgbWluWSA9IHkxO1xuXG4gICAgICAgIG1pblggPSB4MiA8IG1pblggPyB4MiA6IG1pblg7XG4gICAgICAgIG1pblggPSB4MyA8IG1pblggPyB4MyA6IG1pblg7XG4gICAgICAgIG1pblggPSB4NCA8IG1pblggPyB4NCA6IG1pblg7XG5cbiAgICAgICAgbWluWSA9IHkyIDwgbWluWSA/IHkyIDogbWluWTtcbiAgICAgICAgbWluWSA9IHkzIDwgbWluWSA/IHkzIDogbWluWTtcbiAgICAgICAgbWluWSA9IHk0IDwgbWluWSA/IHk0IDogbWluWTtcblxuICAgICAgICBtYXhYID0geDIgPiBtYXhYID8geDIgOiBtYXhYO1xuICAgICAgICBtYXhYID0geDMgPiBtYXhYID8geDMgOiBtYXhYO1xuICAgICAgICBtYXhYID0geDQgPiBtYXhYID8geDQgOiBtYXhYO1xuXG4gICAgICAgIG1heFkgPSB5MiA+IG1heFkgPyB5MiA6IG1heFk7XG4gICAgICAgIG1heFkgPSB5MyA+IG1heFkgPyB5MyA6IG1heFk7XG4gICAgICAgIG1heFkgPSB5NCA+IG1heFkgPyB5NCA6IG1heFk7XG5cbiAgICAgICAgdGhpcy5fYm91bmRzLnggPSBtaW5YO1xuICAgICAgICB0aGlzLl9ib3VuZHMud2lkdGggPSBtYXhYIC0gbWluWDtcblxuICAgICAgICB0aGlzLl9ib3VuZHMueSA9IG1pblk7XG4gICAgICAgIHRoaXMuX2JvdW5kcy5oZWlnaHQgPSBtYXhZIC0gbWluWTtcblxuICAgICAgICB0aGlzLl9jdXJyZW50Qm91bmRzID0gdGhpcy5fYm91bmRzO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLl9jdXJyZW50Qm91bmRzO1xufTtcblxuLyoqXG4qIFRlc3RzIGlmIGEgcG9pbnQgaXMgaW5zaWRlIHRoaXMgZ3JhcGhpY3Mgb2JqZWN0XG4qXG4qIEBwYXJhbSBwb2ludCB7UElYSS5Qb2ludH0gdGhlIHBvaW50IHRvIHRlc3RcbiogQHJldHVybiB7Ym9vbGVhbn0gdGhlIHJlc3VsdCBvZiB0aGUgdGVzdFxuKi9cbkdyYXBoaWNzLnByb3RvdHlwZS5jb250YWluc1BvaW50ID0gZnVuY3Rpb24oIHBvaW50IClcbntcbiAgICB0aGlzLndvcmxkVHJhbnNmb3JtLmFwcGx5SW52ZXJzZShwb2ludCwgIHRlbXBQb2ludCk7XG5cbiAgICB2YXIgZ3JhcGhpY3NEYXRhID0gdGhpcy5ncmFwaGljc0RhdGE7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGdyYXBoaWNzRGF0YS5sZW5ndGg7IGkrKylcbiAgICB7XG4gICAgICAgIHZhciBkYXRhID0gZ3JhcGhpY3NEYXRhW2ldO1xuXG4gICAgICAgIGlmICghZGF0YS5maWxsKVxuICAgICAgICB7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIG9ubHkgZGVhbCB3aXRoIGZpbGxzLi5cbiAgICAgICAgaWYgKGRhdGEuc2hhcGUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGlmICggZGF0YS5zaGFwZS5jb250YWlucyggdGVtcFBvaW50LngsIHRlbXBQb2ludC55ICkgKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xufTtcblxuLyoqXG4gKiBVcGRhdGUgdGhlIGJvdW5kcyBvZiB0aGUgb2JqZWN0XG4gKlxuICovXG5HcmFwaGljcy5wcm90b3R5cGUudXBkYXRlTG9jYWxCb3VuZHMgPSBmdW5jdGlvbiAoKVxue1xuICAgIHZhciBtaW5YID0gSW5maW5pdHk7XG4gICAgdmFyIG1heFggPSAtSW5maW5pdHk7XG5cbiAgICB2YXIgbWluWSA9IEluZmluaXR5O1xuICAgIHZhciBtYXhZID0gLUluZmluaXR5O1xuXG4gICAgaWYgKHRoaXMuZ3JhcGhpY3NEYXRhLmxlbmd0aClcbiAgICB7XG4gICAgICAgIHZhciBzaGFwZSwgcG9pbnRzLCB4LCB5LCB3LCBoO1xuXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5ncmFwaGljc0RhdGEubGVuZ3RoOyBpKyspXG4gICAgICAgIHtcbiAgICAgICAgICAgIHZhciBkYXRhID0gdGhpcy5ncmFwaGljc0RhdGFbaV07XG4gICAgICAgICAgICB2YXIgdHlwZSA9IGRhdGEudHlwZTtcbiAgICAgICAgICAgIHZhciBsaW5lV2lkdGggPSBkYXRhLmxpbmVXaWR0aDtcbiAgICAgICAgICAgIHNoYXBlID0gZGF0YS5zaGFwZTtcblxuICAgICAgICAgICAgaWYgKHR5cGUgPT09IENPTlNULlNIQVBFUy5SRUNUIHx8IHR5cGUgPT09IENPTlNULlNIQVBFUy5SUkVDKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHggPSBzaGFwZS54IC0gbGluZVdpZHRoLzI7XG4gICAgICAgICAgICAgICAgeSA9IHNoYXBlLnkgLSBsaW5lV2lkdGgvMjtcbiAgICAgICAgICAgICAgICB3ID0gc2hhcGUud2lkdGggKyBsaW5lV2lkdGg7XG4gICAgICAgICAgICAgICAgaCA9IHNoYXBlLmhlaWdodCArIGxpbmVXaWR0aDtcblxuICAgICAgICAgICAgICAgIG1pblggPSB4IDwgbWluWCA/IHggOiBtaW5YO1xuICAgICAgICAgICAgICAgIG1heFggPSB4ICsgdyA+IG1heFggPyB4ICsgdyA6IG1heFg7XG5cbiAgICAgICAgICAgICAgICBtaW5ZID0geSA8IG1pblkgPyB5IDogbWluWTtcbiAgICAgICAgICAgICAgICBtYXhZID0geSArIGggPiBtYXhZID8geSArIGggOiBtYXhZO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAodHlwZSA9PT0gQ09OU1QuU0hBUEVTLkNJUkMpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgeCA9IHNoYXBlLng7XG4gICAgICAgICAgICAgICAgeSA9IHNoYXBlLnk7XG4gICAgICAgICAgICAgICAgdyA9IHNoYXBlLnJhZGl1cyArIGxpbmVXaWR0aC8yO1xuICAgICAgICAgICAgICAgIGggPSBzaGFwZS5yYWRpdXMgKyBsaW5lV2lkdGgvMjtcblxuICAgICAgICAgICAgICAgIG1pblggPSB4IC0gdyA8IG1pblggPyB4IC0gdyA6IG1pblg7XG4gICAgICAgICAgICAgICAgbWF4WCA9IHggKyB3ID4gbWF4WCA/IHggKyB3IDogbWF4WDtcblxuICAgICAgICAgICAgICAgIG1pblkgPSB5IC0gaCA8IG1pblkgPyB5IC0gaCA6IG1pblk7XG4gICAgICAgICAgICAgICAgbWF4WSA9IHkgKyBoID4gbWF4WSA/IHkgKyBoIDogbWF4WTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKHR5cGUgPT09IENPTlNULlNIQVBFUy5FTElQKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHggPSBzaGFwZS54O1xuICAgICAgICAgICAgICAgIHkgPSBzaGFwZS55O1xuICAgICAgICAgICAgICAgIHcgPSBzaGFwZS53aWR0aCArIGxpbmVXaWR0aC8yO1xuICAgICAgICAgICAgICAgIGggPSBzaGFwZS5oZWlnaHQgKyBsaW5lV2lkdGgvMjtcblxuICAgICAgICAgICAgICAgIG1pblggPSB4IC0gdyA8IG1pblggPyB4IC0gdyA6IG1pblg7XG4gICAgICAgICAgICAgICAgbWF4WCA9IHggKyB3ID4gbWF4WCA/IHggKyB3IDogbWF4WDtcblxuICAgICAgICAgICAgICAgIG1pblkgPSB5IC0gaCA8IG1pblkgPyB5IC0gaCA6IG1pblk7XG4gICAgICAgICAgICAgICAgbWF4WSA9IHkgKyBoID4gbWF4WSA/IHkgKyBoIDogbWF4WTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAvLyBQT0xZXG4gICAgICAgICAgICAgICAgcG9pbnRzID0gc2hhcGUucG9pbnRzO1xuXG4gICAgICAgICAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBwb2ludHMubGVuZ3RoOyBqICs9IDIpXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICB4ID0gcG9pbnRzW2pdO1xuICAgICAgICAgICAgICAgICAgICB5ID0gcG9pbnRzW2orMV07XG5cbiAgICAgICAgICAgICAgICAgICAgbWluWCA9IHgtbGluZVdpZHRoIDwgbWluWCA/IHgtbGluZVdpZHRoIDogbWluWDtcbiAgICAgICAgICAgICAgICAgICAgbWF4WCA9IHgrbGluZVdpZHRoID4gbWF4WCA/IHgrbGluZVdpZHRoIDogbWF4WDtcblxuICAgICAgICAgICAgICAgICAgICBtaW5ZID0geS1saW5lV2lkdGggPCBtaW5ZID8geS1saW5lV2lkdGggOiBtaW5ZO1xuICAgICAgICAgICAgICAgICAgICBtYXhZID0geStsaW5lV2lkdGggPiBtYXhZID8geStsaW5lV2lkdGggOiBtYXhZO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICBtaW5YID0gMDtcbiAgICAgICAgbWF4WCA9IDA7XG4gICAgICAgIG1pblkgPSAwO1xuICAgICAgICBtYXhZID0gMDtcbiAgICB9XG5cbiAgICB2YXIgcGFkZGluZyA9IHRoaXMuYm91bmRzUGFkZGluZztcblxuICAgIHRoaXMuX2xvY2FsQm91bmRzLnggPSBtaW5YIC0gcGFkZGluZztcbiAgICB0aGlzLl9sb2NhbEJvdW5kcy53aWR0aCA9IChtYXhYIC0gbWluWCkgKyBwYWRkaW5nICogMjtcblxuICAgIHRoaXMuX2xvY2FsQm91bmRzLnkgPSBtaW5ZIC0gcGFkZGluZztcbiAgICB0aGlzLl9sb2NhbEJvdW5kcy5oZWlnaHQgPSAobWF4WSAtIG1pblkpICsgcGFkZGluZyAqIDI7XG59O1xuXG4vKipcbiAqIEdlbmVyYXRlcyB0aGUgY2FjaGVkIHNwcml0ZSB3aGVuIHRoZSBzcHJpdGUgaGFzIGNhY2hlQXNCaXRtYXAgPSB0cnVlXG4gKlxuICogQHByaXZhdGVcbiAqL1xuLypcbkdyYXBoaWNzLnByb3RvdHlwZS5fZ2VuZXJhdGVDYWNoZWRTcHJpdGUgPSBmdW5jdGlvbiAoKVxue1xuICAgIHZhciBib3VuZHMgPSB0aGlzLmdldExvY2FsQm91bmRzKCk7XG5cbiAgICBpZiAoIXRoaXMuX2NhY2hlZFNwcml0ZSlcbiAgICB7XG4gICAgICAgIHZhciBjYW52YXNCdWZmZXIgPSBuZXcgQ2FudmFzQnVmZmVyKGJvdW5kcy53aWR0aCwgYm91bmRzLmhlaWdodCk7XG4gICAgICAgIHZhciB0ZXh0dXJlID0gVGV4dHVyZS5mcm9tQ2FudmFzKGNhbnZhc0J1ZmZlci5jYW52YXMpO1xuXG4gICAgICAgIHRoaXMuX2NhY2hlZFNwcml0ZSA9IG5ldyBTcHJpdGUodGV4dHVyZSk7XG4gICAgICAgIHRoaXMuX2NhY2hlZFNwcml0ZS5idWZmZXIgPSBjYW52YXNCdWZmZXI7XG5cbiAgICAgICAgdGhpcy5fY2FjaGVkU3ByaXRlLndvcmxkVHJhbnNmb3JtID0gdGhpcy53b3JsZFRyYW5zZm9ybTtcbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgdGhpcy5fY2FjaGVkU3ByaXRlLmJ1ZmZlci5yZXNpemUoYm91bmRzLndpZHRoLCBib3VuZHMuaGVpZ2h0KTtcbiAgICB9XG5cbiAgICAvLyBsZXZlcmFnZSB0aGUgYW5jaG9yIHRvIGFjY291bnQgZm9yIHRoZSBvZmZzZXQgb2YgdGhlIGVsZW1lbnRcbiAgICB0aGlzLl9jYWNoZWRTcHJpdGUuYW5jaG9yLnggPSAtKCBib3VuZHMueCAvIGJvdW5kcy53aWR0aCApO1xuICAgIHRoaXMuX2NhY2hlZFNwcml0ZS5hbmNob3IueSA9IC0oIGJvdW5kcy55IC8gYm91bmRzLmhlaWdodCApO1xuXG4gICAgLy8gdGhpcy5fY2FjaGVkU3ByaXRlLmJ1ZmZlci5jb250ZXh0LnNhdmUoKTtcbiAgICB0aGlzLl9jYWNoZWRTcHJpdGUuYnVmZmVyLmNvbnRleHQudHJhbnNsYXRlKC1ib3VuZHMueCwtYm91bmRzLnkpO1xuXG4gICAgLy8gbWFrZSBzdXJlIHdlIHNldCB0aGUgYWxwaGEgb2YgdGhlIGdyYXBoaWNzIHRvIDEgZm9yIHRoZSByZW5kZXIuLlxuICAgIHRoaXMud29ybGRBbHBoYSA9IDE7XG5cbiAgICAvLyBub3cgcmVuZGVyIHRoZSBncmFwaGljLi5cbiAgICBDYW52YXNHcmFwaGljcy5yZW5kZXJHcmFwaGljcyh0aGlzLCB0aGlzLl9jYWNoZWRTcHJpdGUuYnVmZmVyLmNvbnRleHQpO1xuXG4gICAgdGhpcy5fY2FjaGVkU3ByaXRlLmFscGhhID0gdGhpcy5hbHBoYTtcbn07XG4qL1xuLyoqXG4gKiBVcGRhdGVzIHRleHR1cmUgc2l6ZSBiYXNlZCBvbiBjYW52YXMgc2l6ZVxuICpcbiAqIEBwcml2YXRlXG4gKi9cbi8qXG5HcmFwaGljcy5wcm90b3R5cGUudXBkYXRlQ2FjaGVkU3ByaXRlVGV4dHVyZSA9IGZ1bmN0aW9uICgpXG57XG4gICAgdmFyIGNhY2hlZFNwcml0ZSA9IHRoaXMuX2NhY2hlZFNwcml0ZTtcbiAgICB2YXIgdGV4dHVyZSA9IGNhY2hlZFNwcml0ZS50ZXh0dXJlO1xuICAgIHZhciBjYW52YXMgPSBjYWNoZWRTcHJpdGUuYnVmZmVyLmNhbnZhcztcblxuICAgIHRleHR1cmUuYmFzZVRleHR1cmUud2lkdGggPSBjYW52YXMud2lkdGg7XG4gICAgdGV4dHVyZS5iYXNlVGV4dHVyZS5oZWlnaHQgPSBjYW52YXMuaGVpZ2h0O1xuICAgIHRleHR1cmUuY3JvcC53aWR0aCA9IHRleHR1cmUuZnJhbWUud2lkdGggPSBjYW52YXMud2lkdGg7XG4gICAgdGV4dHVyZS5jcm9wLmhlaWdodCA9IHRleHR1cmUuZnJhbWUuaGVpZ2h0ID0gY2FudmFzLmhlaWdodDtcblxuICAgIGNhY2hlZFNwcml0ZS5fd2lkdGggPSBjYW52YXMud2lkdGg7XG4gICAgY2FjaGVkU3ByaXRlLl9oZWlnaHQgPSBjYW52YXMuaGVpZ2h0O1xuXG4gICAgLy8gdXBkYXRlIHRoZSBkaXJ0eSBiYXNlIHRleHR1cmVzXG4gICAgdGV4dHVyZS5iYXNlVGV4dHVyZS5kaXJ0eSgpO1xufTsqL1xuXG4vKipcbiAqIERlc3Ryb3lzIGEgcHJldmlvdXMgY2FjaGVkIHNwcml0ZS5cbiAqXG4gKi9cbi8qXG5HcmFwaGljcy5wcm90b3R5cGUuZGVzdHJveUNhY2hlZFNwcml0ZSA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy5fY2FjaGVkU3ByaXRlLnRleHR1cmUuZGVzdHJveSh0cnVlKTtcblxuICAgIC8vIGxldCB0aGUgZ2MgY29sbGVjdCB0aGUgdW51c2VkIHNwcml0ZVxuICAgIC8vIFRPRE8gY291bGQgYmUgb2JqZWN0IHBvb2xlZCFcbiAgICB0aGlzLl9jYWNoZWRTcHJpdGUgPSBudWxsO1xufTsqL1xuXG4vKipcbiAqIERyYXdzIHRoZSBnaXZlbiBzaGFwZSB0byB0aGlzIEdyYXBoaWNzIG9iamVjdC4gQ2FuIGJlIGFueSBvZiBDaXJjbGUsIFJlY3RhbmdsZSwgRWxsaXBzZSwgTGluZSBvciBQb2x5Z29uLlxuICpcbiAqIEBwYXJhbSBzaGFwZSB7UElYSS5DaXJjbGV8UElYSS5SZWN0YW5nbGV8UElYSS5FbGxpcHNlfFBJWEkuTGluZXxQSVhJLlBvbHlnb259IFRoZSBzaGFwZSBvYmplY3QgdG8gZHJhdy5cbiAqIEByZXR1cm4ge1BJWEkuR3JhcGhpY3NEYXRhfSBUaGUgZ2VuZXJhdGVkIEdyYXBoaWNzRGF0YSBvYmplY3QuXG4gKi9cbkdyYXBoaWNzLnByb3RvdHlwZS5kcmF3U2hhcGUgPSBmdW5jdGlvbiAoc2hhcGUpXG57XG4gICAgaWYgKHRoaXMuY3VycmVudFBhdGgpXG4gICAge1xuICAgICAgICAvLyBjaGVjayBjdXJyZW50IHBhdGghXG4gICAgICAgIGlmICh0aGlzLmN1cnJlbnRQYXRoLnNoYXBlLnBvaW50cy5sZW5ndGggPD0gMilcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5ncmFwaGljc0RhdGEucG9wKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLmN1cnJlbnRQYXRoID0gbnVsbDtcblxuICAgIHZhciBkYXRhID0gbmV3IEdyYXBoaWNzRGF0YSh0aGlzLmxpbmVXaWR0aCwgdGhpcy5saW5lQ29sb3IsIHRoaXMubGluZUFscGhhLCB0aGlzLmZpbGxDb2xvciwgdGhpcy5maWxsQWxwaGEsIHRoaXMuZmlsbGluZywgc2hhcGUpO1xuXG4gICAgdGhpcy5ncmFwaGljc0RhdGEucHVzaChkYXRhKTtcblxuICAgIGlmIChkYXRhLnR5cGUgPT09IENPTlNULlNIQVBFUy5QT0xZKVxuICAgIHtcbiAgICAgICAgZGF0YS5zaGFwZS5jbG9zZWQgPSBkYXRhLnNoYXBlLmNsb3NlZCB8fCB0aGlzLmZpbGxpbmc7XG4gICAgICAgIHRoaXMuY3VycmVudFBhdGggPSBkYXRhO1xuICAgIH1cblxuICAgIHRoaXMuZGlydHkgPSB0aGlzLmJvdW5kc0RpcnR5ID0gdHJ1ZTtcblxuICAgIHJldHVybiBkYXRhO1xufTtcblxuLyoqXG4gKiBEZXN0cm95cyB0aGUgR3JhcGhpY3Mgb2JqZWN0LlxuICovXG5HcmFwaGljcy5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uICgpIHtcbiAgICBDb250YWluZXIucHJvdG90eXBlLmRlc3Ryb3kuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcblxuICAgIC8vIGRlc3Ryb3kgZWFjaCBvZiB0aGUgR3JhcGhpY3NEYXRhIG9iamVjdHNcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuZ3JhcGhpY3NEYXRhLmxlbmd0aDsgKytpKSB7XG4gICAgICAgIHRoaXMuZ3JhcGhpY3NEYXRhW2ldLmRlc3Ryb3koKTtcbiAgICB9XG5cbiAgICAvLyBmb3IgZWFjaCB3ZWJnbCBkYXRhIGVudHJ5LCBkZXN0cm95IHRoZSBXZWJHTEdyYXBoaWNzRGF0YVxuICAgIGZvciAodmFyIGlkIGluIHRoaXMuX3dlYmdsKSB7XG4gICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgdGhpcy5fd2ViZ2xbaWRdLmRhdGEubGVuZ3RoOyArK2opIHtcbiAgICAgICAgICAgIHRoaXMuX3dlYmdsW2lkXS5kYXRhW2pdLmRlc3Ryb3koKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMuZ3JhcGhpY3NEYXRhID0gbnVsbDtcblxuICAgIHRoaXMuY3VycmVudFBhdGggPSBudWxsO1xuICAgIHRoaXMuX3dlYmdsID0gbnVsbDtcbiAgICB0aGlzLl9sb2NhbEJvdW5kcyA9IG51bGw7XG59O1xuIiwiLyoqXG4gKiBBIEdyYXBoaWNzRGF0YSBvYmplY3QuXG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIGxpbmVXaWR0aCB7bnVtYmVyfSB0aGUgd2lkdGggb2YgdGhlIGxpbmUgdG8gZHJhd1xuICogQHBhcmFtIGxpbmVDb2xvciB7bnVtYmVyfSB0aGUgY29sb3Igb2YgdGhlIGxpbmUgdG8gZHJhd1xuICogQHBhcmFtIGxpbmVBbHBoYSB7bnVtYmVyfSB0aGUgYWxwaGEgb2YgdGhlIGxpbmUgdG8gZHJhd1xuICogQHBhcmFtIGZpbGxDb2xvciB7bnVtYmVyfSB0aGUgY29sb3Igb2YgdGhlIGZpbGxcbiAqIEBwYXJhbSBmaWxsQWxwaGEge251bWJlcn0gdGhlIGFscGhhIG9mIHRoZSBmaWxsXG4gKiBAcGFyYW0gZmlsbCAgICAgIHtib29sZWFufSB3aGV0aGVyIG9yIG5vdCB0aGUgc2hhcGUgaXMgZmlsbGVkIHdpdGggYSBjb2xvdXJcbiAqIEBwYXJhbSBzaGFwZSAgICAge0NpcmNsZXxSZWN0YW5nbGV8RWxsaXBzZXxMaW5lfFBvbHlnb259IFRoZSBzaGFwZSBvYmplY3QgdG8gZHJhdy5cbiAqL1xuZnVuY3Rpb24gR3JhcGhpY3NEYXRhKGxpbmVXaWR0aCwgbGluZUNvbG9yLCBsaW5lQWxwaGEsIGZpbGxDb2xvciwgZmlsbEFscGhhLCBmaWxsLCBzaGFwZSlcbntcbiAgICAvKlxuICAgICAqIEBtZW1iZXIge251bWJlcn0gdGhlIHdpZHRoIG9mIHRoZSBsaW5lIHRvIGRyYXdcbiAgICAgKi9cbiAgICB0aGlzLmxpbmVXaWR0aCA9IGxpbmVXaWR0aDtcblxuICAgIC8qXG4gICAgICogQG1lbWJlciB7bnVtYmVyfSB0aGUgY29sb3Igb2YgdGhlIGxpbmUgdG8gZHJhd1xuICAgICAqL1xuICAgIHRoaXMubGluZUNvbG9yID0gbGluZUNvbG9yO1xuICAgIC8qXG4gICAgICogQG1lbWJlciB7bnVtYmVyfSB0aGUgYWxwaGEgb2YgdGhlIGxpbmUgdG8gZHJhd1xuICAgICAqL1xuICAgIHRoaXMubGluZUFscGhhID0gbGluZUFscGhhO1xuICAgIC8qXG4gICAgICogQG1lbWJlciB7bnVtYmVyfSBjYWNoZWQgdGludCBvZiB0aGUgbGluZSB0byBkcmF3XG4gICAgICovXG4gICAgdGhpcy5fbGluZVRpbnQgPSBsaW5lQ29sb3I7XG5cbiAgICAvKlxuICAgICAqIEBtZW1iZXIge251bWJlcn0gdGhlIGNvbG9yIG9mIHRoZSBmaWxsXG4gICAgICovXG4gICAgdGhpcy5maWxsQ29sb3IgPSBmaWxsQ29sb3I7XG5cbiAgICAvKlxuICAgICAqIEBtZW1iZXIge251bWJlcn0gdGhlIGFscGhhIG9mIHRoZSBmaWxsXG4gICAgICovXG4gICAgdGhpcy5maWxsQWxwaGEgPSBmaWxsQWxwaGE7XG5cbiAgICAvKlxuICAgICAqIEBtZW1iZXIge251bWJlcn0gY2FjaGVkIHRpbnQgb2YgdGhlIGZpbGxcbiAgICAgKi9cbiAgICB0aGlzLl9maWxsVGludCA9IGZpbGxDb2xvcjtcblxuICAgIC8qXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn0gd2hldGhlciBvciBub3QgdGhlIHNoYXBlIGlzIGZpbGxlZCB3aXRoIGEgY29sb3VyXG4gICAgICovXG4gICAgdGhpcy5maWxsID0gZmlsbDtcblxuICAgIC8qXG4gICAgICogQG1lbWJlciB7UElYSS5DaXJjbGV8UElYSS5SZWN0YW5nbGV8UElYSS5FbGxpcHNlfFBJWEkuTGluZXxQSVhJLlBvbHlnb259IFRoZSBzaGFwZSBvYmplY3QgdG8gZHJhdy5cbiAgICAgKi9cbiAgICB0aGlzLnNoYXBlID0gc2hhcGU7XG5cbiAgICAvKlxuICAgICAqIEBtZW1iZXIge251bWJlcn0gVGhlIHR5cGUgb2YgdGhlIHNoYXBlLCBzZWUgdGhlIENvbnN0LlNoYXBlcyBmaWxlIGZvciBhbGwgdGhlIGV4aXN0aW5nIHR5cGVzLFxuICAgICAqL1xuICAgIHRoaXMudHlwZSA9IHNoYXBlLnR5cGU7XG59XG5cbkdyYXBoaWNzRGF0YS5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBHcmFwaGljc0RhdGE7XG5tb2R1bGUuZXhwb3J0cyA9IEdyYXBoaWNzRGF0YTtcblxuLyoqXG4gKiBDcmVhdGVzIGEgbmV3IEdyYXBoaWNzRGF0YSBvYmplY3Qgd2l0aCB0aGUgc2FtZSB2YWx1ZXMgYXMgdGhpcyBvbmUuXG4gKlxuICogQHJldHVybiB7UElYSS5HcmFwaGljc0RhdGF9XG4gKi9cbkdyYXBoaWNzRGF0YS5wcm90b3R5cGUuY2xvbmUgPSBmdW5jdGlvbiAoKVxue1xuICAgIHJldHVybiBuZXcgR3JhcGhpY3NEYXRhKFxuICAgICAgICB0aGlzLmxpbmVXaWR0aCxcbiAgICAgICAgdGhpcy5saW5lQ29sb3IsXG4gICAgICAgIHRoaXMubGluZUFscGhhLFxuICAgICAgICB0aGlzLmZpbGxDb2xvcixcbiAgICAgICAgdGhpcy5maWxsQWxwaGEsXG4gICAgICAgIHRoaXMuZmlsbCxcbiAgICAgICAgdGhpcy5zaGFwZVxuICAgICk7XG59O1xuXG4vKipcbiAqIERlc3Ryb3lzIHRoZSBHcmFwaGljcyBkYXRhLlxuICovXG5HcmFwaGljc0RhdGEucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoKSB7XG4gICAgdGhpcy5zaGFwZSA9IG51bGw7XG59O1xuIiwidmFyIHV0aWxzID0gcmVxdWlyZSgnLi4vLi4vdXRpbHMnKSxcbiAgICBtYXRoID0gcmVxdWlyZSgnLi4vLi4vbWF0aCcpLFxuICAgIENPTlNUID0gcmVxdWlyZSgnLi4vLi4vY29uc3QnKSxcbiAgICBPYmplY3RSZW5kZXJlciA9IHJlcXVpcmUoJy4uLy4uL3JlbmRlcmVycy93ZWJnbC91dGlscy9PYmplY3RSZW5kZXJlcicpLFxuICAgIFdlYkdMUmVuZGVyZXIgPSByZXF1aXJlKCcuLi8uLi9yZW5kZXJlcnMvd2ViZ2wvV2ViR0xSZW5kZXJlcicpLFxuICAgIFdlYkdMR3JhcGhpY3NEYXRhID0gcmVxdWlyZSgnLi9XZWJHTEdyYXBoaWNzRGF0YScpLFxuICAgIFByaW1pdGl2ZVNoYWRlciA9IHJlcXVpcmUoJy4vc2hhZGVycy9QcmltaXRpdmVTaGFkZXInKSxcblxuICAgIC8vIHNvbWUgZHJhd2luZyBmdW5jdGlvbnMuLlxuICAgIGJ1aWxkTGluZSA9IHJlcXVpcmUoJy4vdXRpbHMvYnVpbGRMaW5lJyk7XG4gICAgYnVpbGRQb2x5ID0gcmVxdWlyZSgnLi91dGlscy9idWlsZFBvbHknKTtcbiAgICBidWlsZENvbXBsZXhQb2x5ID0gcmVxdWlyZSgnLi91dGlscy9idWlsZENvbXBsZXhQb2x5Jyk7XG4gICAgYnVpbGRSZWN0YW5nbGUgPSByZXF1aXJlKCcuL3V0aWxzL2J1aWxkUmVjdGFuZ2xlJyk7XG4gICAgYnVpbGRSb3VuZGVkUmVjdGFuZ2xlID0gcmVxdWlyZSgnLi91dGlscy9idWlsZFJvdW5kZWRSZWN0YW5nbGUnKTtcbiAgICBidWlsZENpcmNsZSA9IHJlcXVpcmUoJy4vdXRpbHMvYnVpbGRDaXJjbGUnKTtcblxuICAgIGVhcmN1dCA9IHJlcXVpcmUoJ2VhcmN1dCcpO1xuXG4vKipcbiAqIFJlbmRlcnMgdGhlIGdyYXBoaWNzIG9iamVjdC5cbiAqXG4gKiBAY2xhc3NcbiAqIEBwcml2YXRlXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQGV4dGVuZHMgUElYSS5PYmplY3RSZW5kZXJlclxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLldlYkdMUmVuZGVyZXJ9IFRoZSByZW5kZXJlciB0aGlzIG9iamVjdCByZW5kZXJlciB3b3JrcyBmb3IuXG4gKi9cbmZ1bmN0aW9uIEdyYXBoaWNzUmVuZGVyZXIocmVuZGVyZXIpXG57XG4gICAgT2JqZWN0UmVuZGVyZXIuY2FsbCh0aGlzLCByZW5kZXJlcik7XG5cbiAgICB0aGlzLmdyYXBoaWNzRGF0YVBvb2wgPSBbXTtcblxuICAgIHRoaXMucHJpbWl0aXZlU2hhZGVyID0gbnVsbDtcbiAgICB0aGlzLmNvbXBsZXhQcmltaXRpdmVTaGFkZXIgPSBudWxsO1xuXG4gICAgdGhpcy5nbCA9IHJlbmRlcmVyLmdsO1xuXG4gICAgLyoqXG4gICAgICogVGhpcyBpcyB0aGUgbWF4aW11bSBudW1iZXIgb2YgcG9pbnRzIGEgcG9seSBjYW4gY29udGFpbiBiZWZvcmUgaXQgaXMgcmVuZGVyZWQgYXMgYSBjb21wbGV4IHBvbHlnb24gKHVzaW5nIHRoZSBzdGVuY2lsIGJ1ZmZlcilcbiAgICAgKiBAdHlwZSB7TnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMubWF4aW11bVNpbXBsZVBvbHlTaXplID0gMjAwO1xufVxuXG5HcmFwaGljc1JlbmRlcmVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoT2JqZWN0UmVuZGVyZXIucHJvdG90eXBlKTtcbkdyYXBoaWNzUmVuZGVyZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gR3JhcGhpY3NSZW5kZXJlcjtcbm1vZHVsZS5leHBvcnRzID0gR3JhcGhpY3NSZW5kZXJlcjtcblxuV2ViR0xSZW5kZXJlci5yZWdpc3RlclBsdWdpbignZ3JhcGhpY3MnLCBHcmFwaGljc1JlbmRlcmVyKTtcblxuLyoqXG4gKiBDYWxsZWQgd2hlbiB0aGVyZSBpcyBhIFdlYkdMIGNvbnRleHQgY2hhbmdlXG4gKlxuICogQHByaXZhdGVcbiAqXG4gKi9cbkdyYXBoaWNzUmVuZGVyZXIucHJvdG90eXBlLm9uQ29udGV4dENoYW5nZSA9IGZ1bmN0aW9uKClcbntcbiAgICB0aGlzLmdsID0gdGhpcy5yZW5kZXJlci5nbDtcbiAgICB0aGlzLnByaW1pdGl2ZVNoYWRlciA9IG5ldyBQcmltaXRpdmVTaGFkZXIodGhpcy5nbClcbn07XG5cbi8qKlxuICogRGVzdHJveXMgdGhpcyByZW5kZXJlci5cbiAqXG4gKi9cbkdyYXBoaWNzUmVuZGVyZXIucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoKSB7XG4gICAgT2JqZWN0UmVuZGVyZXIucHJvdG90eXBlLmRlc3Ryb3kuY2FsbCh0aGlzKTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5ncmFwaGljc0RhdGFQb29sLmxlbmd0aDsgKytpKSB7XG4gICAgICAgIHRoaXMuZ3JhcGhpY3NEYXRhUG9vbFtpXS5kZXN0cm95KCk7XG4gICAgfVxuXG4gICAgdGhpcy5ncmFwaGljc0RhdGFQb29sID0gbnVsbDtcbn07XG5cbi8qKlxuICogUmVuZGVycyBhIGdyYXBoaWNzIG9iamVjdC5cbiAqXG4gKiBAcGFyYW0gZ3JhcGhpY3Mge1BJWEkuR3JhcGhpY3N9IFRoZSBncmFwaGljcyBvYmplY3QgdG8gcmVuZGVyLlxuICovXG5HcmFwaGljc1JlbmRlcmVyLnByb3RvdHlwZS5yZW5kZXIgPSBmdW5jdGlvbihncmFwaGljcylcbntcbiAgICB2YXIgcmVuZGVyZXIgPSB0aGlzLnJlbmRlcmVyO1xuICAgIHZhciBnbCA9IHJlbmRlcmVyLmdsO1xuXG4gICAgdmFyIHdlYkdMRGF0YTtcbiAgLy8gIGNvbnNvbGUubG9nKGdyYXBoaWNzKVxuICAgIGlmIChncmFwaGljcy5kaXJ0eSB8fCAhZ3JhcGhpY3MuX3dlYkdMW2dsLmlkXSlcbiAgICB7XG4gICAgICAgIHRoaXMudXBkYXRlR3JhcGhpY3MoZ3JhcGhpY3MpO1xuICAgIH1cblxuICAgIHZhciB3ZWJHTCA9IGdyYXBoaWNzLl93ZWJHTFtnbC5pZF07XG5cbiAgICAvLyBUaGlzICBjb3VsZCBiZSBzcGVlZGVkIHVwIGZvciBzdXJlIVxuXG4gICAgcmVuZGVyZXIuYmxlbmRNb2RlTWFuYWdlci5zZXRCbGVuZE1vZGUoIGdyYXBoaWNzLmJsZW5kTW9kZSApO1xuXG4vLyAgICB2YXIgbWF0cml4ID0gIGdyYXBoaWNzLndvcmxkVHJhbnNmb3JtLmNsb25lKCk7XG4vLyAgICB2YXIgbWF0cml4ID0gIHJlbmRlcmVyLmN1cnJlbnRSZW5kZXJUYXJnZXQucHJvamVjdGlvbk1hdHJpeC5jbG9uZSgpO1xuLy8gICAgbWF0cml4LmFwcGVuZChncmFwaGljcy53b3JsZFRyYW5zZm9ybSk7XG5cbiAgICBmb3IgKHZhciBpID0gMCwgbiA9IHdlYkdMLmRhdGEubGVuZ3RoOyBpIDwgbjsgaSsrKVxuICAgIHtcbiAgICAgICAgd2ViR0xEYXRhID0gd2ViR0wuZGF0YVtpXTtcblxuICAgICAgICBpZiAod2ViR0wuZGF0YVtpXS5tb2RlID09PSAxKVxuICAgICAgICB7XG4gICAgICAgICAgICAvL1RPRE8gZml4IHRoaXMgb25lIVxuICAgICAgICAgICAgXG4gICAgICAgICAgICAvKlxuICAgICAgICAgICAgcmVuZGVyZXIuc3RlbmNpbE1hbmFnZXIucHVzaFN0ZW5jaWwoZ3JhcGhpY3MsIHdlYkdMRGF0YSk7XG5cbiAgICAgICAgICAgIGdsLnVuaWZvcm0xZihyZW5kZXJlci5zaGFkZXJNYW5hZ2VyLmNvbXBsZXhQcmltaXRpdmVTaGFkZXIudW5pZm9ybXMuYWxwaGEuX2xvY2F0aW9uLCBncmFwaGljcy53b3JsZEFscGhhICogd2ViR0xEYXRhLmFscGhhKTtcblxuICAgICAgICAgICAgLy8gcmVuZGVyIHF1YWQuLlxuICAgICAgICAgICAgZ2wuZHJhd0VsZW1lbnRzKGdsLlRSSUFOR0xFX0ZBTiwgNCwgZ2wuVU5TSUdORURfU0hPUlQsICggd2ViR0xEYXRhLmluZGljZXMubGVuZ3RoIC0gNCApICogMiApO1xuXG4gICAgICAgICAgICByZW5kZXJlci5zdGVuY2lsTWFuYWdlci5wb3BTdGVuY2lsKGdyYXBoaWNzLCB3ZWJHTERhdGEpO1xuICAgICAgICAgICAgKi9cbiAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgIHtcblxuICAgICAgICAgICAgc2hhZGVyID0gdGhpcy5wcmltaXRpdmVTaGFkZXI7XG5cbiAgICAgICAgICAgIHJlbmRlcmVyLmJpbmRTaGFkZXIoc2hhZGVyKVxuXG4gICAgICAgICAgICBzaGFkZXIudW5pZm9ybXMudHJhbnNsYXRpb25NYXRyaXggPSBncmFwaGljcy53b3JsZFRyYW5zZm9ybS50b0FycmF5KHRydWUpO1xuICAgICAgICAgICAgc2hhZGVyLnVuaWZvcm1zLnRpbnQgPSB1dGlscy5oZXgycmdiKGdyYXBoaWNzLnRpbnQpO1xuICAgICAgICAgICAgc2hhZGVyLnVuaWZvcm1zLmFscGhhID0gZ3JhcGhpY3Mud29ybGRBbHBoYTtcblxuXG4gICAgICAgICAgICBnbC5iaW5kQnVmZmVyKGdsLkFSUkFZX0JVRkZFUiwgd2ViR0xEYXRhLmJ1ZmZlcik7XG5cbiAgICAgICAgICAgIHNoYWRlciA9IHRoaXMucHJpbWl0aXZlU2hhZGVyO1xuXG4gICAgICAgICAgICBzaGFkZXIuYXR0cmlidXRlcy5hVmVydGV4UG9zaXRpb24ucG9pbnRlcihnbC5GTE9BVCwgZmFsc2UsIDQgKiA2LCAwKTtcbiAgICAgICAgICAgIHNoYWRlci5hdHRyaWJ1dGVzLmFDb2xvci5wb2ludGVyKGdsLkZMT0FULCBmYWxzZSwgNCAqIDYsIDIgKiA0KTtcblxuICAgICAgICAgICAgZ2wuZW5hYmxlVmVydGV4QXR0cmliQXJyYXkoc2hhZGVyLmF0dHJpYnV0ZXMuYVZlcnRleFBvc2l0aW9uLmxvY2F0aW9uKTtcbiAgICAgICAgICAgIGdsLmVuYWJsZVZlcnRleEF0dHJpYkFycmF5KHNoYWRlci5hdHRyaWJ1dGVzLmFDb2xvci5sb2NhdGlvbik7XG5cbiAgICAgICAgICAgIC8vIHNldCB0aGUgaW5kZXggYnVmZmVyIVxuICAgICAgICAgICAgZ2wuYmluZEJ1ZmZlcihnbC5FTEVNRU5UX0FSUkFZX0JVRkZFUiwgd2ViR0xEYXRhLmluZGV4QnVmZmVyKTtcbiAgICAgICAgICAgIGdsLmRyYXdFbGVtZW50cyhnbC5UUklBTkdMRV9TVFJJUCwgIHdlYkdMRGF0YS5pbmRpY2VzLmxlbmd0aCwgZ2wuVU5TSUdORURfU0hPUlQsIDAgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJlbmRlcmVyLmRyYXdDb3VudCsrO1xuICAgIH1cbn07XG5cbi8qKlxuICogVXBkYXRlcyB0aGUgZ3JhcGhpY3Mgb2JqZWN0XG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSBncmFwaGljcyB7UElYSS5HcmFwaGljc30gVGhlIGdyYXBoaWNzIG9iamVjdCB0byB1cGRhdGVcbiAqL1xuR3JhcGhpY3NSZW5kZXJlci5wcm90b3R5cGUudXBkYXRlR3JhcGhpY3MgPSBmdW5jdGlvbihncmFwaGljcylcbntcbiAgICB2YXIgZ2wgPSB0aGlzLnJlbmRlcmVyLmdsO1xuXG4gICAgIC8vIGdldCB0aGUgY29udGV4dHMgZ3JhcGhpY3Mgb2JqZWN0XG4gICAgdmFyIHdlYkdMID0gZ3JhcGhpY3MuX3dlYkdMW2dsLmlkXTtcblxuICAgIC8vIGlmIHRoZSBncmFwaGljcyBvYmplY3QgZG9lcyBub3QgZXhpc3QgaW4gdGhlIHdlYkdMIGNvbnRleHQgdGltZSB0byBjcmVhdGUgaXQhXG4gICAgaWYgKCF3ZWJHTClcbiAgICB7XG4gICAgICAgIHdlYkdMID0gZ3JhcGhpY3MuX3dlYkdMW2dsLmlkXSA9IHtsYXN0SW5kZXg6MCwgZGF0YTpbXSwgZ2w6Z2x9O1xuICAgIH1cblxuICAgXG4gICAgLy8gZmxhZyB0aGUgZ3JhcGhpY3MgYXMgbm90IGRpcnR5IGFzIHdlIGFyZSBhYm91dCB0byB1cGRhdGUgaXQuLi5cbiAgICBncmFwaGljcy5kaXJ0eSA9IGZhbHNlO1xuXG4gICAgdmFyIGk7XG5cbiAgICAvLyBpZiB0aGUgdXNlciBjbGVhcmVkIHRoZSBncmFwaGljcyBvYmplY3Qgd2Ugd2lsbCBuZWVkIHRvIGNsZWFyIGV2ZXJ5IG9iamVjdFxuICAgIGlmIChncmFwaGljcy5jbGVhckRpcnR5KVxuICAgIHtcbiAgICAgICAgZ3JhcGhpY3MuY2xlYXJEaXJ0eSA9IGZhbHNlO1xuXG4gICAgICAgIC8vIGxvb3AgdGhyb3VnaCBhbmQgcmV0dXJuIGFsbCB0aGUgd2ViR0xEYXRhcyB0byB0aGUgb2JqZWN0IHBvb2wgc28gdGhhbiBjYW4gYmUgcmV1c2VkIGxhdGVyIG9uXG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCB3ZWJHTC5kYXRhLmxlbmd0aDsgaSsrKVxuICAgICAgICB7XG4gICAgICAgICAgICB2YXIgZ3JhcGhpY3NEYXRhID0gd2ViR0wuZGF0YVtpXTtcbiAgICAgICAgICAgIGdyYXBoaWNzRGF0YS5yZXNldCgpO1xuICAgICAgICAgICAgdGhpcy5ncmFwaGljc0RhdGFQb29sLnB1c2goIGdyYXBoaWNzRGF0YSApO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gY2xlYXIgdGhlIGFycmF5IGFuZCByZXNldCB0aGUgaW5kZXguLlxuICAgICAgICB3ZWJHTC5kYXRhID0gW107XG4gICAgICAgIHdlYkdMLmxhc3RJbmRleCA9IDA7XG4gICAgfVxuXG4gICAgdmFyIHdlYkdMRGF0YTtcblxuICAgIC8vIGxvb3AgdGhyb3VnaCB0aGUgZ3JhcGhpY3MgZGF0YXMgYW5kIGNvbnN0cnVjdCBlYWNoIG9uZS4uXG4gICAgLy8gaWYgdGhlIG9iamVjdCBpcyBhIGNvbXBsZXggZmlsbCB0aGVuIHRoZSBuZXcgc3RlbmNpbCBidWZmZXIgdGVjaG5pcXVlIHdpbGwgYmUgdXNlZFxuICAgIC8vIG90aGVyIHdpc2UgZ3JhcGhpY3Mgb2JqZWN0cyB3aWxsIGJlIHB1c2hlZCBpbnRvIGEgYmF0Y2guLlxuICAgIGZvciAoaSA9IHdlYkdMLmxhc3RJbmRleDsgaSA8IGdyYXBoaWNzLmdyYXBoaWNzRGF0YS5sZW5ndGg7IGkrKylcbiAgICB7XG4gICAgICAgIHZhciBkYXRhID0gZ3JhcGhpY3MuZ3JhcGhpY3NEYXRhW2ldO1xuXG4gICAgICAgIGlmIChkYXRhLnR5cGUgPT09IENPTlNULlNIQVBFUy5QT0xZKVxuICAgICAgICB7XG4gICAgICAgICAgICAvLyBuZWVkIHRvIGFkZCB0aGUgcG9pbnRzIHRoZSB0aGUgZ3JhcGhpY3Mgb2JqZWN0Li5cbiAgICAgICAgICAgIGRhdGEucG9pbnRzID0gZGF0YS5zaGFwZS5wb2ludHMuc2xpY2UoKTtcbiAgICAgICAgICAgIGlmIChkYXRhLnNoYXBlLmNsb3NlZClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAvLyBjbG9zZSB0aGUgcG9seSBpZiB0aGUgdmFsdWUgaXMgdHJ1ZSFcbiAgICAgICAgICAgICAgICBpZiAoZGF0YS5wb2ludHNbMF0gIT09IGRhdGEucG9pbnRzW2RhdGEucG9pbnRzLmxlbmd0aC0yXSB8fCBkYXRhLnBvaW50c1sxXSAhPT0gZGF0YS5wb2ludHNbZGF0YS5wb2ludHMubGVuZ3RoLTFdKVxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgZGF0YS5wb2ludHMucHVzaChkYXRhLnBvaW50c1swXSwgZGF0YS5wb2ludHNbMV0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gTUFLRSBTVVJFIFdFIEhBVkUgVEhFIENPUlJFQ1QgVFlQRS4uXG4gICAgICAgICAgICBpZiAoZGF0YS5maWxsKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGlmIChkYXRhLnBvaW50cy5sZW5ndGggPj0gNilcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChkYXRhLnBvaW50cy5sZW5ndGggPCB0aGlzLm1heGltdW1TaW1wbGVQb2x5U2l6ZSAqIDIpXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHdlYkdMRGF0YSA9IHRoaXMuc3dpdGNoTW9kZSh3ZWJHTCwgMCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjYW5EcmF3VXNpbmdTaW1wbGUgPSBidWlsZFBvbHkoZGF0YSwgd2ViR0xEYXRhKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFjYW5EcmF3VXNpbmdTaW1wbGUpXG4gICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd2ViR0xEYXRhID0gdGhpcy5zd2l0Y2hNb2RlKHdlYkdMLCAxKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWlsZENvbXBsZXhQb2x5KGRhdGEsIHdlYkdMRGF0YSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHdlYkdMRGF0YSA9IHRoaXMuc3dpdGNoTW9kZSh3ZWJHTCwgMSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBidWlsZENvbXBsZXhQb2x5KGRhdGEsIHdlYkdMRGF0YSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChkYXRhLmxpbmVXaWR0aCA+IDApXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgd2ViR0xEYXRhID0gdGhpcy5zd2l0Y2hNb2RlKHdlYkdMLCAwKTtcbiAgICAgICAgICAgICAgICBidWlsZExpbmUoZGF0YSwgd2ViR0xEYXRhKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgIHtcbiAgICAgICAgICAgIHdlYkdMRGF0YSA9IHRoaXMuc3dpdGNoTW9kZSh3ZWJHTCwgMCk7XG5cbiAgICAgICAgICAgIGlmIChkYXRhLnR5cGUgPT09IENPTlNULlNIQVBFUy5SRUNUKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGJ1aWxkUmVjdGFuZ2xlKGRhdGEsIHdlYkdMRGF0YSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChkYXRhLnR5cGUgPT09IENPTlNULlNIQVBFUy5DSVJDIHx8IGRhdGEudHlwZSA9PT0gQ09OU1QuU0hBUEVTLkVMSVApXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgYnVpbGRDaXJjbGUoZGF0YSwgd2ViR0xEYXRhKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGRhdGEudHlwZSA9PT0gQ09OU1QuU0hBUEVTLlJSRUMpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgYnVpbGRSb3VuZGVkUmVjdGFuZ2xlKGRhdGEsIHdlYkdMRGF0YSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICB3ZWJHTC5sYXN0SW5kZXgrKztcbiAgICB9XG5cbiAgICAvLyB1cGxvYWQgYWxsIHRoZSBkaXJ0eSBkYXRhLi4uXG4gICAgZm9yIChpID0gMDsgaSA8IHdlYkdMLmRhdGEubGVuZ3RoOyBpKyspXG4gICAge1xuICAgICAgICB3ZWJHTERhdGEgPSB3ZWJHTC5kYXRhW2ldO1xuXG4gICAgICAgIGlmICh3ZWJHTERhdGEuZGlydHkpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHdlYkdMRGF0YS51cGxvYWQoKTtcbiAgICAgICAgfVxuICAgIH1cbn07XG5cbi8qKlxuICpcbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHdlYkdMIHtXZWJHTFJlbmRlcmluZ0NvbnRleHR9IHRoZSBjdXJyZW50IFdlYkdMIGRyYXdpbmcgY29udGV4dFxuICogQHBhcmFtIHR5cGUge251bWJlcn0gVE9ETyBAQWx2aW5cbiAqL1xuR3JhcGhpY3NSZW5kZXJlci5wcm90b3R5cGUuc3dpdGNoTW9kZSA9IGZ1bmN0aW9uICh3ZWJHTCwgdHlwZSlcbntcbiAgICB2YXIgd2ViR0xEYXRhO1xuXG4gICAgaWYgKCF3ZWJHTC5kYXRhLmxlbmd0aClcbiAgICB7XG4gICAgICAgIHdlYkdMRGF0YSA9IHRoaXMuZ3JhcGhpY3NEYXRhUG9vbC5wb3AoKSB8fCBuZXcgV2ViR0xHcmFwaGljc0RhdGEod2ViR0wuZ2wpO1xuICAgICAgICB3ZWJHTERhdGEubW9kZSA9IHR5cGU7XG4gICAgICAgIHdlYkdMLmRhdGEucHVzaCh3ZWJHTERhdGEpO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICB3ZWJHTERhdGEgPSB3ZWJHTC5kYXRhW3dlYkdMLmRhdGEubGVuZ3RoLTFdO1xuXG4gICAgICAgIGlmICgod2ViR0xEYXRhLnBvaW50cy5sZW5ndGggPiAzMjAwMDApIHx8IHdlYkdMRGF0YS5tb2RlICE9PSB0eXBlIHx8IHR5cGUgPT09IDEpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHdlYkdMRGF0YSA9IHRoaXMuZ3JhcGhpY3NEYXRhUG9vbC5wb3AoKSB8fCBuZXcgV2ViR0xHcmFwaGljc0RhdGEod2ViR0wuZ2wpO1xuICAgICAgICAgICAgd2ViR0xEYXRhLm1vZGUgPSB0eXBlO1xuICAgICAgICAgICAgd2ViR0wuZGF0YS5wdXNoKHdlYkdMRGF0YSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB3ZWJHTERhdGEuZGlydHkgPSB0cnVlO1xuXG4gICAgcmV0dXJuIHdlYkdMRGF0YTtcbn07XG5cbiIsIi8qKlxuICogQW4gb2JqZWN0IGNvbnRhaW5pbmcgV2ViR0wgc3BlY2lmaWMgcHJvcGVydGllcyB0byBiZSB1c2VkIGJ5IHRoZSBXZWJHTCByZW5kZXJlclxuICpcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqIEBwYXJhbSBnbCB7V2ViR0xSZW5kZXJpbmdDb250ZXh0fSB0aGUgY3VycmVudCBXZWJHTCBkcmF3aW5nIGNvbnRleHRcbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIFdlYkdMR3JhcGhpY3NEYXRhKGdsKSB7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgY3VycmVudCBXZWJHTCBkcmF3aW5nIGNvbnRleHRcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1dlYkdMUmVuZGVyaW5nQ29udGV4dH1cbiAgICAgKi9cbiAgICB0aGlzLmdsID0gZ2w7XG5cbiAgICAvL1RPRE8gZG9lcyB0aGlzIG5lZWQgdG8gYmUgc3BsaXQgYmVmb3JlIHVwbG9kaW5nPz9cbiAgICAvKipcbiAgICAgKiBBbiBhcnJheSBvZiBjb2xvciBjb21wb25lbnRzIChyLGcsYilcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJbXX1cbiAgICAgKi9cbiAgICB0aGlzLmNvbG9yID0gWzAsMCwwXTsgLy8gY29sb3Igc3BsaXQhXG5cbiAgICAvKipcbiAgICAgKiBBbiBhcnJheSBvZiBwb2ludHMgdG8gZHJhd1xuICAgICAqIEBtZW1iZXIge1BJWEkuUG9pbnRbXX1cbiAgICAgKi9cbiAgICB0aGlzLnBvaW50cyA9IFtdO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGluZGljZXMgb2YgdGhlIHZlcnRpY2VzXG4gICAgICogQG1lbWJlciB7bnVtYmVyW119XG4gICAgICovXG4gICAgdGhpcy5pbmRpY2VzID0gW107XG4gICAgLyoqXG4gICAgICogVGhlIG1haW4gYnVmZmVyXG4gICAgICogQG1lbWJlciB7V2ViR0xCdWZmZXJ9XG4gICAgICovXG4gICAgdGhpcy5idWZmZXIgPSBnbC5jcmVhdGVCdWZmZXIoKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBpbmRleCBidWZmZXJcbiAgICAgKiBAbWVtYmVyIHtXZWJHTEJ1ZmZlcn1cbiAgICAgKi9cbiAgICB0aGlzLmluZGV4QnVmZmVyID0gZ2wuY3JlYXRlQnVmZmVyKCk7XG5cbiAgICAvKipcbiAgICAgKiB0b2RvIEBhbHZpblxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLm1vZGUgPSAxO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGFscGhhIG9mIHRoZSBncmFwaGljc1xuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLmFscGhhID0gMTtcblxuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgdGhpcyBncmFwaGljcyBpcyBkaXJ0eSBvciBub3RcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqL1xuICAgIHRoaXMuZGlydHkgPSB0cnVlO1xuXG4gICAgdGhpcy5nbFBvaW50cyA9IG51bGw7XG4gICAgdGhpcy5nbEluZGljZXMgPSBudWxsO1xufVxuXG5XZWJHTEdyYXBoaWNzRGF0YS5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBXZWJHTEdyYXBoaWNzRGF0YTtcbm1vZHVsZS5leHBvcnRzID0gV2ViR0xHcmFwaGljc0RhdGE7XG5cbi8qKlxuICogUmVzZXRzIHRoZSB2ZXJ0aWNlcyBhbmQgdGhlIGluZGljZXNcbiAqL1xuV2ViR0xHcmFwaGljc0RhdGEucHJvdG90eXBlLnJlc2V0ID0gZnVuY3Rpb24gKCkge1xuICAgIHRoaXMucG9pbnRzLmxlbmd0aCA9IDA7XG4gICAgdGhpcy5pbmRpY2VzLmxlbmd0aCA9IDA7XG59O1xuXG4vKipcbiAqIEJpbmRzIHRoZSBidWZmZXJzIGFuZCB1cGxvYWRzIHRoZSBkYXRhXG4gKi9cbldlYkdMR3JhcGhpY3NEYXRhLnByb3RvdHlwZS51cGxvYWQgPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGdsID0gdGhpcy5nbDtcblxuLy8gICAgdGhpcy5sYXN0SW5kZXggPSBncmFwaGljcy5ncmFwaGljc0RhdGEubGVuZ3RoO1xuICAgIHRoaXMuZ2xQb2ludHMgPSBuZXcgRmxvYXQzMkFycmF5KHRoaXMucG9pbnRzKTtcblxuICAgIGdsLmJpbmRCdWZmZXIoZ2wuQVJSQVlfQlVGRkVSLCB0aGlzLmJ1ZmZlcik7XG4gICAgZ2wuYnVmZmVyRGF0YShnbC5BUlJBWV9CVUZGRVIsIHRoaXMuZ2xQb2ludHMsIGdsLlNUQVRJQ19EUkFXKTtcblxuICAgIHRoaXMuZ2xJbmRpY2VzID0gbmV3IFVpbnQxNkFycmF5KHRoaXMuaW5kaWNlcyk7XG5cbiAgICBnbC5iaW5kQnVmZmVyKGdsLkVMRU1FTlRfQVJSQVlfQlVGRkVSLCB0aGlzLmluZGV4QnVmZmVyKTtcbiAgICBnbC5idWZmZXJEYXRhKGdsLkVMRU1FTlRfQVJSQVlfQlVGRkVSLCB0aGlzLmdsSW5kaWNlcywgZ2wuU1RBVElDX0RSQVcpO1xuXG4gICAgdGhpcy5kaXJ0eSA9IGZhbHNlO1xufTtcblxuV2ViR0xHcmFwaGljc0RhdGEucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoKSB7XG4gICAgdGhpcy5jb2xvciA9IG51bGw7XG4gICAgdGhpcy5wb2ludHMgPSBudWxsO1xuICAgIHRoaXMuaW5kaWNlcyA9IG51bGw7XG5cbiAgICB0aGlzLmdsLmRlbGV0ZUJ1ZmZlcih0aGlzLmJ1ZmZlcik7XG4gICAgdGhpcy5nbC5kZWxldGVCdWZmZXIodGhpcy5pbmRleEJ1ZmZlcik7XG4gICAgXG4gICAgdGhpcy5nbCA9IG51bGw7XG5cbiAgICB0aGlzLmJ1ZmZlciA9IG51bGw7XG4gICAgdGhpcy5pbmRleEJ1ZmZlciA9IG51bGw7XG5cbiAgICB0aGlzLmdsUG9pbnRzID0gbnVsbDtcbiAgICB0aGlzLmdsSW5kaWNlcyA9IG51bGw7XG59O1xuIiwidmFyIFNoYWRlciA9IHJlcXVpcmUoJ3BpeGktZ2wtY29yZScpLkdMU2hhZGVyO1xuXG4vKipcbiAqIFRoaXMgc2hhZGVyIGlzIHVzZWQgdG8gZHJhdyBzaW1wbGUgcHJpbWl0aXZlIHNoYXBlcyBmb3Ige0BsaW5rIFBJWEkuR3JhcGhpY3N9LlxuICpcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqIEBleHRlbmRzIFBJWEkuU2hhZGVyXG4gKiBAcGFyYW0gc2hhZGVyTWFuYWdlciB7U2hhZGVyTWFuYWdlcn0gVGhlIHdlYmdsIHNoYWRlciBtYW5hZ2VyIHRoaXMgc2hhZGVyIHdvcmtzIGZvci5cbiAqL1xuZnVuY3Rpb24gUHJpbWl0aXZlU2hhZGVyKGdsKVxue1xuICAgIFNoYWRlci5jYWxsKHRoaXMsXG4gICAgICAgIGdsLFxuICAgICAgICAvLyB2ZXJ0ZXggc2hhZGVyXG4gICAgICAgIFtcbiAgICAgICAgICAgICdhdHRyaWJ1dGUgdmVjMiBhVmVydGV4UG9zaXRpb247JyxcbiAgICAgICAgICAgICdhdHRyaWJ1dGUgdmVjNCBhQ29sb3I7JyxcblxuICAgICAgICAgICAgJ3VuaWZvcm0gbWF0MyB0cmFuc2xhdGlvbk1hdHJpeDsnLFxuICAgICAgICAgICAgJ3VuaWZvcm0gbWF0MyBwcm9qZWN0aW9uTWF0cml4OycsXG5cbiAgICAgICAgICAgICd1bmlmb3JtIGZsb2F0IGFscGhhOycsXG4gICAgICAgICAgICAndW5pZm9ybSBmbG9hdCBmbGlwWTsnLFxuICAgICAgICAgICAgJ3VuaWZvcm0gdmVjMyB0aW50OycsXG5cbiAgICAgICAgICAgICd2YXJ5aW5nIHZlYzQgdkNvbG9yOycsXG5cbiAgICAgICAgICAgICd2b2lkIG1haW4odm9pZCl7JyxcbiAgICAgICAgICAgICcgICBnbF9Qb3NpdGlvbiA9IHZlYzQoKHByb2plY3Rpb25NYXRyaXggKiB0cmFuc2xhdGlvbk1hdHJpeCAqIHZlYzMoYVZlcnRleFBvc2l0aW9uLCAxLjApKS54eSwgMC4wLCAxLjApOycsXG4gICAgICAgICAgICAnICAgdkNvbG9yID0gYUNvbG9yICogdmVjNCh0aW50ICogYWxwaGEsIGFscGhhKTsnLFxuICAgICAgICAgICAgJ30nXG4gICAgICAgIF0uam9pbignXFxuJyksXG4gICAgICAgIC8vIGZyYWdtZW50IHNoYWRlclxuICAgICAgICBbXG4gICAgICAgICAgICAncHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7JyxcblxuICAgICAgICAgICAgJ3ZhcnlpbmcgdmVjNCB2Q29sb3I7JyxcblxuICAgICAgICAgICAgJ3ZvaWQgbWFpbih2b2lkKXsnLFxuICAgICAgICAgICAgJyAgIGdsX0ZyYWdDb2xvciA9IHZDb2xvcjsnLFxuICAgICAgICAgICAgJ30nXG4gICAgICAgIF0uam9pbignXFxuJylcbiAgICApO1xufVxuXG5QcmltaXRpdmVTaGFkZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShTaGFkZXIucHJvdG90eXBlKTtcblByaW1pdGl2ZVNoYWRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBQcmltaXRpdmVTaGFkZXI7XG5cbm1vZHVsZS5leHBvcnRzID0gUHJpbWl0aXZlU2hhZGVyO1xuIiwidmFyIGJ1aWxkTGluZSA9IHJlcXVpcmUoJy4vYnVpbGRMaW5lJyksXG4gICAgdXRpbHMgPSByZXF1aXJlKCcuLi8uLi8uLi91dGlscycpO1xuXG4vKipcbiAqIEJ1aWxkcyBhIGNpcmNsZSB0byBkcmF3XG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSBncmFwaGljc0RhdGEge1BJWEkuR3JhcGhpY3N9IFRoZSBncmFwaGljcyBvYmplY3QgdG8gZHJhd1xuICogQHBhcmFtIHdlYkdMRGF0YSB7b2JqZWN0fSBhbiBvYmplY3QgY29udGFpbmluZyBhbGwgdGhlIHdlYkdMLXNwZWNpZmljIGluZm9ybWF0aW9uIHRvIGNyZWF0ZSB0aGlzIHNoYXBlXG4gKi9cbnZhciBidWlsZENpcmNsZSA9IGZ1bmN0aW9uIChncmFwaGljc0RhdGEsIHdlYkdMRGF0YSlcbntcbiAgICAvLyBuZWVkIHRvIGNvbnZlcnQgcG9pbnRzIHRvIGEgbmljZSByZWd1bGFyIGRhdGFcbiAgICB2YXIgY2lyY2xlRGF0YSA9IGdyYXBoaWNzRGF0YS5zaGFwZTtcbiAgICB2YXIgeCA9IGNpcmNsZURhdGEueDtcbiAgICB2YXIgeSA9IGNpcmNsZURhdGEueTtcbiAgICB2YXIgd2lkdGg7XG4gICAgdmFyIGhlaWdodDtcblxuICAgIC8vIFRPRE8gLSBiaXQgaGFja3k/P1xuICAgIGlmIChncmFwaGljc0RhdGEudHlwZSA9PT0gQ09OU1QuU0hBUEVTLkNJUkMpXG4gICAge1xuICAgICAgICB3aWR0aCA9IGNpcmNsZURhdGEucmFkaXVzO1xuICAgICAgICBoZWlnaHQgPSBjaXJjbGVEYXRhLnJhZGl1cztcbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgd2lkdGggPSBjaXJjbGVEYXRhLndpZHRoO1xuICAgICAgICBoZWlnaHQgPSBjaXJjbGVEYXRhLmhlaWdodDtcbiAgICB9XG5cbiAgICB2YXIgdG90YWxTZWdzID0gTWF0aC5mbG9vcigzMCAqIE1hdGguc3FydChjaXJjbGVEYXRhLnJhZGl1cykpIHx8IE1hdGguZmxvb3IoMTUgKiBNYXRoLnNxcnQoY2lyY2xlRGF0YS53aWR0aCArIGNpcmNsZURhdGEuaGVpZ2h0KSk7XG4gICAgdmFyIHNlZyA9IChNYXRoLlBJICogMikgLyB0b3RhbFNlZ3MgO1xuXG4gICAgdmFyIGkgPSAwO1xuXG4gICAgaWYgKGdyYXBoaWNzRGF0YS5maWxsKVxuICAgIHtcbiAgICAgICAgdmFyIGNvbG9yID0gdXRpbHMuaGV4MnJnYihncmFwaGljc0RhdGEuZmlsbENvbG9yKTtcbiAgICAgICAgdmFyIGFscGhhID0gZ3JhcGhpY3NEYXRhLmZpbGxBbHBoYTtcblxuICAgICAgICB2YXIgciA9IGNvbG9yWzBdICogYWxwaGE7XG4gICAgICAgIHZhciBnID0gY29sb3JbMV0gKiBhbHBoYTtcbiAgICAgICAgdmFyIGIgPSBjb2xvclsyXSAqIGFscGhhO1xuXG4gICAgICAgIHZhciB2ZXJ0cyA9IHdlYkdMRGF0YS5wb2ludHM7XG4gICAgICAgIHZhciBpbmRpY2VzID0gd2ViR0xEYXRhLmluZGljZXM7XG5cbiAgICAgICAgdmFyIHZlY1BvcyA9IHZlcnRzLmxlbmd0aC82O1xuXG4gICAgICAgIGluZGljZXMucHVzaCh2ZWNQb3MpO1xuXG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCB0b3RhbFNlZ3MgKyAxIDsgaSsrKVxuICAgICAgICB7XG4gICAgICAgICAgICB2ZXJ0cy5wdXNoKHgseSwgciwgZywgYiwgYWxwaGEpO1xuXG4gICAgICAgICAgICB2ZXJ0cy5wdXNoKHggKyBNYXRoLnNpbihzZWcgKiBpKSAqIHdpZHRoLFxuICAgICAgICAgICAgICAgICAgICAgICB5ICsgTWF0aC5jb3Moc2VnICogaSkgKiBoZWlnaHQsXG4gICAgICAgICAgICAgICAgICAgICAgIHIsIGcsIGIsIGFscGhhKTtcblxuICAgICAgICAgICAgaW5kaWNlcy5wdXNoKHZlY1BvcysrLCB2ZWNQb3MrKyk7XG4gICAgICAgIH1cblxuICAgICAgICBpbmRpY2VzLnB1c2godmVjUG9zLTEpO1xuICAgIH1cblxuICAgIGlmIChncmFwaGljc0RhdGEubGluZVdpZHRoKVxuICAgIHtcbiAgICAgICAgdmFyIHRlbXBQb2ludHMgPSBncmFwaGljc0RhdGEucG9pbnRzO1xuXG4gICAgICAgIGdyYXBoaWNzRGF0YS5wb2ludHMgPSBbXTtcblxuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgdG90YWxTZWdzICsgMTsgaSsrKVxuICAgICAgICB7XG4gICAgICAgICAgICBncmFwaGljc0RhdGEucG9pbnRzLnB1c2goeCArIE1hdGguc2luKHNlZyAqIGkpICogd2lkdGgsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeSArIE1hdGguY29zKHNlZyAqIGkpICogaGVpZ2h0KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGJ1aWxkTGluZShncmFwaGljc0RhdGEsIHdlYkdMRGF0YSk7XG5cbiAgICAgICAgZ3JhcGhpY3NEYXRhLnBvaW50cyA9IHRlbXBQb2ludHM7XG4gICAgfVxufTtcblxuXG5tb2R1bGUuZXhwb3J0cyA9IGJ1aWxkQ2lyY2xlOyIsInZhciBidWlsZExpbmUgPSByZXF1aXJlKCcuL2J1aWxkTGluZScpLFxuICAgIHV0aWxzID0gcmVxdWlyZSgnLi4vLi4vLi4vdXRpbHMnKTtcbiAgICBcblxuXG4vKipcbiAqIEJ1aWxkcyBhIGNvbXBsZXggcG9seWdvbiB0byBkcmF3XG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSBncmFwaGljc0RhdGEge1BJWEkuR3JhcGhpY3N9IFRoZSBncmFwaGljcyBvYmplY3QgY29udGFpbmluZyBhbGwgdGhlIG5lY2Vzc2FyeSBwcm9wZXJ0aWVzXG4gKiBAcGFyYW0gd2ViR0xEYXRhIHtvYmplY3R9IGFuIG9iamVjdCBjb250YWluaW5nIGFsbCB0aGUgd2ViR0wtc3BlY2lmaWMgaW5mb3JtYXRpb24gdG8gY3JlYXRlIHRoaXMgc2hhcGVcbiAqL1xudmFyIGJ1aWxkQ29tcGxleFBvbHkgPSBmdW5jdGlvbiAoZ3JhcGhpY3NEYXRhLCB3ZWJHTERhdGEpXG57XG4gICAgLy9UT0RPIC0gbm8gbmVlZCB0byBjb3B5IHRoaXMgYXMgaXQgZ2V0cyB0dXJuZWQgaW50byBhIEZMb2F0MzJBcnJheSBhbnl3YXlzLi5cbiAgICB2YXIgcG9pbnRzID0gZ3JhcGhpY3NEYXRhLnBvaW50cy5zbGljZSgpO1xuXG4gICAgaWYgKHBvaW50cy5sZW5ndGggPCA2KVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIGdldCBmaXJzdCBhbmQgbGFzdCBwb2ludC4uIGZpZ3VyZSBvdXQgdGhlIG1pZGRsZSFcbiAgICB2YXIgaW5kaWNlcyA9IHdlYkdMRGF0YS5pbmRpY2VzO1xuICAgIHdlYkdMRGF0YS5wb2ludHMgPSBwb2ludHM7XG4gICAgd2ViR0xEYXRhLmFscGhhID0gZ3JhcGhpY3NEYXRhLmZpbGxBbHBoYTtcbiAgICB3ZWJHTERhdGEuY29sb3IgPSB1dGlscy5oZXgycmdiKGdyYXBoaWNzRGF0YS5maWxsQ29sb3IpO1xuXG4gICAgLy8gY2FsY2xhdGUgdGhlIGJvdW5kcy4uXG4gICAgdmFyIG1pblggPSBJbmZpbml0eTtcbiAgICB2YXIgbWF4WCA9IC1JbmZpbml0eTtcblxuICAgIHZhciBtaW5ZID0gSW5maW5pdHk7XG4gICAgdmFyIG1heFkgPSAtSW5maW5pdHk7XG5cbiAgICB2YXIgeCx5O1xuXG4gICAgLy8gZ2V0IHNpemUuLlxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcG9pbnRzLmxlbmd0aDsgaSs9MilcbiAgICB7XG4gICAgICAgIHggPSBwb2ludHNbaV07XG4gICAgICAgIHkgPSBwb2ludHNbaSsxXTtcblxuICAgICAgICBtaW5YID0geCA8IG1pblggPyB4IDogbWluWDtcbiAgICAgICAgbWF4WCA9IHggPiBtYXhYID8geCA6IG1heFg7XG5cbiAgICAgICAgbWluWSA9IHkgPCBtaW5ZID8geSA6IG1pblk7XG4gICAgICAgIG1heFkgPSB5ID4gbWF4WSA/IHkgOiBtYXhZO1xuICAgIH1cblxuICAgIC8vIGFkZCBhIHF1YWQgdG8gdGhlIGVuZCBjb3MgdGhlcmUgaXMgbm8gcG9pbnQgbWFraW5nIGFub3RoZXIgYnVmZmVyIVxuICAgIHBvaW50cy5wdXNoKG1pblgsIG1pblksXG4gICAgICAgICAgICAgICAgbWF4WCwgbWluWSxcbiAgICAgICAgICAgICAgICBtYXhYLCBtYXhZLFxuICAgICAgICAgICAgICAgIG1pblgsIG1heFkpO1xuXG4gICAgLy8gcHVzaCBhIHF1YWQgb250byB0aGUgZW5kLi5cblxuICAgIC8vVE9ETyAtIHRoaXMgYWludCBuZWVkZWQhXG4gICAgdmFyIGxlbmd0aCA9IHBvaW50cy5sZW5ndGggLyAyO1xuICAgIGZvciAoaSA9IDA7IGkgPCBsZW5ndGg7IGkrKylcbiAgICB7XG4gICAgICAgIGluZGljZXMucHVzaCggaSApO1xuICAgIH1cblxufTtcblxuXG5cbm1vZHVsZS5leHBvcnRzID0gYnVpbGRDb21wbGV4UG9seTsiLCJ2YXIgbWF0aCA9IHJlcXVpcmUoJy4uLy4uLy4uL21hdGgnKSxcbiAgICB1dGlscyA9IHJlcXVpcmUoJy4uLy4uLy4uL3V0aWxzJyk7XG5cbi8qKlxuICogQnVpbGRzIGEgbGluZSB0byBkcmF3XG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSBncmFwaGljc0RhdGEge1BJWEkuR3JhcGhpY3N9IFRoZSBncmFwaGljcyBvYmplY3QgY29udGFpbmluZyBhbGwgdGhlIG5lY2Vzc2FyeSBwcm9wZXJ0aWVzXG4gKiBAcGFyYW0gd2ViR0xEYXRhIHtvYmplY3R9IGFuIG9iamVjdCBjb250YWluaW5nIGFsbCB0aGUgd2ViR0wtc3BlY2lmaWMgaW5mb3JtYXRpb24gdG8gY3JlYXRlIHRoaXMgc2hhcGVcbiAqL1xudmFyIGJ1aWxkTGluZSA9IGZ1bmN0aW9uIChncmFwaGljc0RhdGEsIHdlYkdMRGF0YSlcbntcbiAgICAvLyBUT0RPIE9QVElNSVNFIVxuICAgIHZhciBpID0gMDtcbiAgICB2YXIgcG9pbnRzID0gZ3JhcGhpY3NEYXRhLnBvaW50cztcblxuICAgIGlmIChwb2ludHMubGVuZ3RoID09PSAwKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICAvLyBpZiB0aGUgbGluZSB3aWR0aCBpcyBhbiBvZGQgbnVtYmVyIGFkZCAwLjUgdG8gYWxpZ24gdG8gYSB3aG9sZSBwaXhlbFxuICAgIC8vIGNvbW1lbnRpbmcgdGhpcyBvdXQgZml4ZXMgIzcxMSBhbmQgIzE2MjBcbiAgICAvLyBpZiAoZ3JhcGhpY3NEYXRhLmxpbmVXaWR0aCUyKVxuICAgIC8vIHtcbiAgICAvLyAgICAgZm9yIChpID0gMDsgaSA8IHBvaW50cy5sZW5ndGg7IGkrKylcbiAgICAvLyAgICAge1xuICAgIC8vICAgICAgICAgcG9pbnRzW2ldICs9IDAuNTtcbiAgICAvLyAgICAgfVxuICAgIC8vIH1cblxuICAgIC8vIGdldCBmaXJzdCBhbmQgbGFzdCBwb2ludC4uIGZpZ3VyZSBvdXQgdGhlIG1pZGRsZSFcbiAgICB2YXIgZmlyc3RQb2ludCA9IG5ldyBtYXRoLlBvaW50KHBvaW50c1swXSwgcG9pbnRzWzFdKTtcbiAgICB2YXIgbGFzdFBvaW50ID0gbmV3IG1hdGguUG9pbnQocG9pbnRzW3BvaW50cy5sZW5ndGggLSAyXSwgcG9pbnRzW3BvaW50cy5sZW5ndGggLSAxXSk7XG5cbiAgICAvLyBpZiB0aGUgZmlyc3QgcG9pbnQgaXMgdGhlIGxhc3QgcG9pbnQgLSBnb25uYSBoYXZlIGlzc3VlcyA6KVxuICAgIGlmIChmaXJzdFBvaW50LnggPT09IGxhc3RQb2ludC54ICYmIGZpcnN0UG9pbnQueSA9PT0gbGFzdFBvaW50LnkpXG4gICAge1xuICAgICAgICAvLyBuZWVkIHRvIGNsb25lIGFzIHdlIGFyZSBnb2luZyB0byBzbGlnaHRseSBtb2RpZnkgdGhlIHNoYXBlLi5cbiAgICAgICAgcG9pbnRzID0gcG9pbnRzLnNsaWNlKCk7XG5cbiAgICAgICAgcG9pbnRzLnBvcCgpO1xuICAgICAgICBwb2ludHMucG9wKCk7XG5cbiAgICAgICAgbGFzdFBvaW50ID0gbmV3IG1hdGguUG9pbnQocG9pbnRzW3BvaW50cy5sZW5ndGggLSAyXSwgcG9pbnRzW3BvaW50cy5sZW5ndGggLSAxXSk7XG5cbiAgICAgICAgdmFyIG1pZFBvaW50WCA9IGxhc3RQb2ludC54ICsgKGZpcnN0UG9pbnQueCAtIGxhc3RQb2ludC54KSAqMC41O1xuICAgICAgICB2YXIgbWlkUG9pbnRZID0gbGFzdFBvaW50LnkgKyAoZmlyc3RQb2ludC55IC0gbGFzdFBvaW50LnkpICowLjU7XG5cbiAgICAgICAgcG9pbnRzLnVuc2hpZnQobWlkUG9pbnRYLCBtaWRQb2ludFkpO1xuICAgICAgICBwb2ludHMucHVzaChtaWRQb2ludFgsIG1pZFBvaW50WSk7XG4gICAgfVxuXG4gICAgdmFyIHZlcnRzID0gd2ViR0xEYXRhLnBvaW50cztcbiAgICB2YXIgaW5kaWNlcyA9IHdlYkdMRGF0YS5pbmRpY2VzO1xuICAgIHZhciBsZW5ndGggPSBwb2ludHMubGVuZ3RoIC8gMjtcbiAgICB2YXIgaW5kZXhDb3VudCA9IHBvaW50cy5sZW5ndGg7XG4gICAgdmFyIGluZGV4U3RhcnQgPSB2ZXJ0cy5sZW5ndGgvNjtcblxuICAgIC8vIERSQVcgdGhlIExpbmVcbiAgICB2YXIgd2lkdGggPSBncmFwaGljc0RhdGEubGluZVdpZHRoIC8gMjtcblxuICAgIC8vIHNvcnQgY29sb3JcbiAgICB2YXIgY29sb3IgPSB1dGlscy5oZXgycmdiKGdyYXBoaWNzRGF0YS5saW5lQ29sb3IpO1xuICAgIHZhciBhbHBoYSA9IGdyYXBoaWNzRGF0YS5saW5lQWxwaGE7XG4gICAgdmFyIHIgPSBjb2xvclswXSAqIGFscGhhO1xuICAgIHZhciBnID0gY29sb3JbMV0gKiBhbHBoYTtcbiAgICB2YXIgYiA9IGNvbG9yWzJdICogYWxwaGE7XG5cbiAgICB2YXIgcHgsIHB5LCBwMXgsIHAxeSwgcDJ4LCBwMnksIHAzeCwgcDN5O1xuICAgIHZhciBwZXJweCwgcGVycHksIHBlcnAyeCwgcGVycDJ5LCBwZXJwM3gsIHBlcnAzeTtcbiAgICB2YXIgYTEsIGIxLCBjMSwgYTIsIGIyLCBjMjtcbiAgICB2YXIgZGVub20sIHBkaXN0LCBkaXN0O1xuXG4gICAgcDF4ID0gcG9pbnRzWzBdO1xuICAgIHAxeSA9IHBvaW50c1sxXTtcblxuICAgIHAyeCA9IHBvaW50c1syXTtcbiAgICBwMnkgPSBwb2ludHNbM107XG5cbiAgICBwZXJweCA9IC0ocDF5IC0gcDJ5KTtcbiAgICBwZXJweSA9ICBwMXggLSBwMng7XG5cbiAgICBkaXN0ID0gTWF0aC5zcXJ0KHBlcnB4KnBlcnB4ICsgcGVycHkqcGVycHkpO1xuXG4gICAgcGVycHggLz0gZGlzdDtcbiAgICBwZXJweSAvPSBkaXN0O1xuICAgIHBlcnB4ICo9IHdpZHRoO1xuICAgIHBlcnB5ICo9IHdpZHRoO1xuXG4gICAgLy8gc3RhcnRcbiAgICB2ZXJ0cy5wdXNoKHAxeCAtIHBlcnB4ICwgcDF5IC0gcGVycHksXG4gICAgICAgICAgICAgICAgciwgZywgYiwgYWxwaGEpO1xuXG4gICAgdmVydHMucHVzaChwMXggKyBwZXJweCAsIHAxeSArIHBlcnB5LFxuICAgICAgICAgICAgICAgIHIsIGcsIGIsIGFscGhhKTtcblxuICAgIGZvciAoaSA9IDE7IGkgPCBsZW5ndGgtMTsgaSsrKVxuICAgIHtcbiAgICAgICAgcDF4ID0gcG9pbnRzWyhpLTEpKjJdO1xuICAgICAgICBwMXkgPSBwb2ludHNbKGktMSkqMiArIDFdO1xuXG4gICAgICAgIHAyeCA9IHBvaW50c1soaSkqMl07XG4gICAgICAgIHAyeSA9IHBvaW50c1soaSkqMiArIDFdO1xuXG4gICAgICAgIHAzeCA9IHBvaW50c1soaSsxKSoyXTtcbiAgICAgICAgcDN5ID0gcG9pbnRzWyhpKzEpKjIgKyAxXTtcblxuICAgICAgICBwZXJweCA9IC0ocDF5IC0gcDJ5KTtcbiAgICAgICAgcGVycHkgPSBwMXggLSBwMng7XG5cbiAgICAgICAgZGlzdCA9IE1hdGguc3FydChwZXJweCpwZXJweCArIHBlcnB5KnBlcnB5KTtcbiAgICAgICAgcGVycHggLz0gZGlzdDtcbiAgICAgICAgcGVycHkgLz0gZGlzdDtcbiAgICAgICAgcGVycHggKj0gd2lkdGg7XG4gICAgICAgIHBlcnB5ICo9IHdpZHRoO1xuXG4gICAgICAgIHBlcnAyeCA9IC0ocDJ5IC0gcDN5KTtcbiAgICAgICAgcGVycDJ5ID0gcDJ4IC0gcDN4O1xuXG4gICAgICAgIGRpc3QgPSBNYXRoLnNxcnQocGVycDJ4KnBlcnAyeCArIHBlcnAyeSpwZXJwMnkpO1xuICAgICAgICBwZXJwMnggLz0gZGlzdDtcbiAgICAgICAgcGVycDJ5IC89IGRpc3Q7XG4gICAgICAgIHBlcnAyeCAqPSB3aWR0aDtcbiAgICAgICAgcGVycDJ5ICo9IHdpZHRoO1xuXG4gICAgICAgIGExID0gKC1wZXJweSArIHAxeSkgLSAoLXBlcnB5ICsgcDJ5KTtcbiAgICAgICAgYjEgPSAoLXBlcnB4ICsgcDJ4KSAtICgtcGVycHggKyBwMXgpO1xuICAgICAgICBjMSA9ICgtcGVycHggKyBwMXgpICogKC1wZXJweSArIHAyeSkgLSAoLXBlcnB4ICsgcDJ4KSAqICgtcGVycHkgKyBwMXkpO1xuICAgICAgICBhMiA9ICgtcGVycDJ5ICsgcDN5KSAtICgtcGVycDJ5ICsgcDJ5KTtcbiAgICAgICAgYjIgPSAoLXBlcnAyeCArIHAyeCkgLSAoLXBlcnAyeCArIHAzeCk7XG4gICAgICAgIGMyID0gKC1wZXJwMnggKyBwM3gpICogKC1wZXJwMnkgKyBwMnkpIC0gKC1wZXJwMnggKyBwMngpICogKC1wZXJwMnkgKyBwM3kpO1xuXG4gICAgICAgIGRlbm9tID0gYTEqYjIgLSBhMipiMTtcblxuICAgICAgICBpZiAoTWF0aC5hYnMoZGVub20pIDwgMC4xIClcbiAgICAgICAge1xuXG4gICAgICAgICAgICBkZW5vbSs9MTAuMTtcbiAgICAgICAgICAgIHZlcnRzLnB1c2gocDJ4IC0gcGVycHggLCBwMnkgLSBwZXJweSxcbiAgICAgICAgICAgICAgICByLCBnLCBiLCBhbHBoYSk7XG5cbiAgICAgICAgICAgIHZlcnRzLnB1c2gocDJ4ICsgcGVycHggLCBwMnkgKyBwZXJweSxcbiAgICAgICAgICAgICAgICByLCBnLCBiLCBhbHBoYSk7XG5cbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgcHggPSAoYjEqYzIgLSBiMipjMSkvZGVub207XG4gICAgICAgIHB5ID0gKGEyKmMxIC0gYTEqYzIpL2Rlbm9tO1xuXG5cbiAgICAgICAgcGRpc3QgPSAocHggLXAyeCkgKiAocHggLXAyeCkgKyAocHkgLXAyeSkgKiAocHkgLXAyeSk7XG5cblxuICAgICAgICBpZiAocGRpc3QgPiAxNDAgKiAxNDApXG4gICAgICAgIHtcbiAgICAgICAgICAgIHBlcnAzeCA9IHBlcnB4IC0gcGVycDJ4O1xuICAgICAgICAgICAgcGVycDN5ID0gcGVycHkgLSBwZXJwMnk7XG5cbiAgICAgICAgICAgIGRpc3QgPSBNYXRoLnNxcnQocGVycDN4KnBlcnAzeCArIHBlcnAzeSpwZXJwM3kpO1xuICAgICAgICAgICAgcGVycDN4IC89IGRpc3Q7XG4gICAgICAgICAgICBwZXJwM3kgLz0gZGlzdDtcbiAgICAgICAgICAgIHBlcnAzeCAqPSB3aWR0aDtcbiAgICAgICAgICAgIHBlcnAzeSAqPSB3aWR0aDtcblxuICAgICAgICAgICAgdmVydHMucHVzaChwMnggLSBwZXJwM3gsIHAyeSAtcGVycDN5KTtcbiAgICAgICAgICAgIHZlcnRzLnB1c2gociwgZywgYiwgYWxwaGEpO1xuXG4gICAgICAgICAgICB2ZXJ0cy5wdXNoKHAyeCArIHBlcnAzeCwgcDJ5ICtwZXJwM3kpO1xuICAgICAgICAgICAgdmVydHMucHVzaChyLCBnLCBiLCBhbHBoYSk7XG5cbiAgICAgICAgICAgIHZlcnRzLnB1c2gocDJ4IC0gcGVycDN4LCBwMnkgLXBlcnAzeSk7XG4gICAgICAgICAgICB2ZXJ0cy5wdXNoKHIsIGcsIGIsIGFscGhhKTtcblxuICAgICAgICAgICAgaW5kZXhDb3VudCsrO1xuICAgICAgICB9XG4gICAgICAgIGVsc2VcbiAgICAgICAge1xuXG4gICAgICAgICAgICB2ZXJ0cy5wdXNoKHB4ICwgcHkpO1xuICAgICAgICAgICAgdmVydHMucHVzaChyLCBnLCBiLCBhbHBoYSk7XG5cbiAgICAgICAgICAgIHZlcnRzLnB1c2gocDJ4IC0gKHB4LXAyeCksIHAyeSAtIChweSAtIHAyeSkpO1xuICAgICAgICAgICAgdmVydHMucHVzaChyLCBnLCBiLCBhbHBoYSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwMXggPSBwb2ludHNbKGxlbmd0aC0yKSoyXTtcbiAgICBwMXkgPSBwb2ludHNbKGxlbmd0aC0yKSoyICsgMV07XG5cbiAgICBwMnggPSBwb2ludHNbKGxlbmd0aC0xKSoyXTtcbiAgICBwMnkgPSBwb2ludHNbKGxlbmd0aC0xKSoyICsgMV07XG5cbiAgICBwZXJweCA9IC0ocDF5IC0gcDJ5KTtcbiAgICBwZXJweSA9IHAxeCAtIHAyeDtcblxuICAgIGRpc3QgPSBNYXRoLnNxcnQocGVycHgqcGVycHggKyBwZXJweSpwZXJweSk7XG4gICAgcGVycHggLz0gZGlzdDtcbiAgICBwZXJweSAvPSBkaXN0O1xuICAgIHBlcnB4ICo9IHdpZHRoO1xuICAgIHBlcnB5ICo9IHdpZHRoO1xuXG4gICAgdmVydHMucHVzaChwMnggLSBwZXJweCAsIHAyeSAtIHBlcnB5KTtcbiAgICB2ZXJ0cy5wdXNoKHIsIGcsIGIsIGFscGhhKTtcblxuICAgIHZlcnRzLnB1c2gocDJ4ICsgcGVycHggLCBwMnkgKyBwZXJweSk7XG4gICAgdmVydHMucHVzaChyLCBnLCBiLCBhbHBoYSk7XG5cbiAgICBpbmRpY2VzLnB1c2goaW5kZXhTdGFydCk7XG5cbiAgICBmb3IgKGkgPSAwOyBpIDwgaW5kZXhDb3VudDsgaSsrKVxuICAgIHtcbiAgICAgICAgaW5kaWNlcy5wdXNoKGluZGV4U3RhcnQrKyk7XG4gICAgfVxuXG4gICAgaW5kaWNlcy5wdXNoKGluZGV4U3RhcnQtMSk7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGJ1aWxkTGluZTsiLCJ2YXIgdXRpbHMgPSByZXF1aXJlKCcuLi8uLi8uLi91dGlscycpO1xuXG4vKipcbiAqIEJ1aWxkcyBhIHBvbHlnb24gdG8gZHJhd1xuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0gZ3JhcGhpY3NEYXRhIHtQSVhJLldlYkdMR3JhcGhpY3NEYXRhfSBUaGUgZ3JhcGhpY3Mgb2JqZWN0IGNvbnRhaW5pbmcgYWxsIHRoZSBuZWNlc3NhcnkgcHJvcGVydGllc1xuICogQHBhcmFtIHdlYkdMRGF0YSB7b2JqZWN0fSBhbiBvYmplY3QgY29udGFpbmluZyBhbGwgdGhlIHdlYkdMLXNwZWNpZmljIGluZm9ybWF0aW9uIHRvIGNyZWF0ZSB0aGlzIHNoYXBlXG4gKi9cbnZhciBidWlsZFBvbHkgPSBmdW5jdGlvbiAoZ3JhcGhpY3NEYXRhLCB3ZWJHTERhdGEpXG57XG4gICAgdmFyIHBvaW50cyA9IGdyYXBoaWNzRGF0YS5wb2ludHM7XG5cbiAgICBpZiAocG9pbnRzLmxlbmd0aCA8IDYpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gZ2V0IGZpcnN0IGFuZCBsYXN0IHBvaW50Li4gZmlndXJlIG91dCB0aGUgbWlkZGxlIVxuICAgIHZhciB2ZXJ0cyA9IHdlYkdMRGF0YS5wb2ludHM7XG4gICAgdmFyIGluZGljZXMgPSB3ZWJHTERhdGEuaW5kaWNlcztcblxuICAgIHZhciBsZW5ndGggPSBwb2ludHMubGVuZ3RoIC8gMjtcblxuICAgIC8vIHNvcnQgY29sb3JcbiAgICB2YXIgY29sb3IgPSB1dGlscy5oZXgycmdiKGdyYXBoaWNzRGF0YS5maWxsQ29sb3IpO1xuICAgIHZhciBhbHBoYSA9IGdyYXBoaWNzRGF0YS5maWxsQWxwaGE7XG4gICAgdmFyIHIgPSBjb2xvclswXSAqIGFscGhhO1xuICAgIHZhciBnID0gY29sb3JbMV0gKiBhbHBoYTtcbiAgICB2YXIgYiA9IGNvbG9yWzJdICogYWxwaGE7XG5cbiAgICB2YXIgdHJpYW5nbGVzID0gZWFyY3V0KHBvaW50cywgbnVsbCwgMik7XG5cbiAgICBpZiAoIXRyaWFuZ2xlcykge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgdmFyIHZlcnRQb3MgPSB2ZXJ0cy5sZW5ndGggLyA2O1xuXG4gICAgdmFyIGkgPSAwO1xuXG4gICAgZm9yIChpID0gMDsgaSA8IHRyaWFuZ2xlcy5sZW5ndGg7IGkrPTMpXG4gICAge1xuICAgICAgICBpbmRpY2VzLnB1c2godHJpYW5nbGVzW2ldICsgdmVydFBvcyk7XG4gICAgICAgIGluZGljZXMucHVzaCh0cmlhbmdsZXNbaV0gKyB2ZXJ0UG9zKTtcbiAgICAgICAgaW5kaWNlcy5wdXNoKHRyaWFuZ2xlc1tpKzFdICsgdmVydFBvcyk7XG4gICAgICAgIGluZGljZXMucHVzaCh0cmlhbmdsZXNbaSsyXSArdmVydFBvcyk7XG4gICAgICAgIGluZGljZXMucHVzaCh0cmlhbmdsZXNbaSsyXSArIHZlcnRQb3MpO1xuICAgIH1cblxuICAgIGZvciAoaSA9IDA7IGkgPCBsZW5ndGg7IGkrKylcbiAgICB7XG4gICAgICAgIHZlcnRzLnB1c2gocG9pbnRzW2kgKiAyXSwgcG9pbnRzW2kgKiAyICsgMV0sXG4gICAgICAgICAgICAgICAgICAgciwgZywgYiwgYWxwaGEpO1xuICAgIH1cblxuICAgIHJldHVybiB0cnVlO1xufTtcblxuXG5tb2R1bGUuZXhwb3J0cyA9IGJ1aWxkUG9seTtcbiIsInZhciBidWlsZExpbmUgPSByZXF1aXJlKCcuL2J1aWxkTGluZScpLFxuICAgIHV0aWxzID0gcmVxdWlyZSgnLi4vLi4vLi4vdXRpbHMnKTtcblxuLyoqXG4gKiBCdWlsZHMgYSByZWN0YW5nbGUgdG8gZHJhd1xuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0gZ3JhcGhpY3NEYXRhIHtQSVhJLkdyYXBoaWNzfSBUaGUgZ3JhcGhpY3Mgb2JqZWN0IGNvbnRhaW5pbmcgYWxsIHRoZSBuZWNlc3NhcnkgcHJvcGVydGllc1xuICogQHBhcmFtIHdlYkdMRGF0YSB7b2JqZWN0fSBhbiBvYmplY3QgY29udGFpbmluZyBhbGwgdGhlIHdlYkdMLXNwZWNpZmljIGluZm9ybWF0aW9uIHRvIGNyZWF0ZSB0aGlzIHNoYXBlXG4gKi9cbnZhciBidWlsZFJlY3RhbmdsZSA9IGZ1bmN0aW9uIChncmFwaGljc0RhdGEsIHdlYkdMRGF0YSlcbntcbiAgICAvLyAtLS0gLy9cbiAgICAvLyBuZWVkIHRvIGNvbnZlcnQgcG9pbnRzIHRvIGEgbmljZSByZWd1bGFyIGRhdGFcbiAgICAvL1xuICAgIHZhciByZWN0RGF0YSA9IGdyYXBoaWNzRGF0YS5zaGFwZTtcbiAgICB2YXIgeCA9IHJlY3REYXRhLng7XG4gICAgdmFyIHkgPSByZWN0RGF0YS55O1xuICAgIHZhciB3aWR0aCA9IHJlY3REYXRhLndpZHRoO1xuICAgIHZhciBoZWlnaHQgPSByZWN0RGF0YS5oZWlnaHQ7XG5cbiAgICBpZiAoZ3JhcGhpY3NEYXRhLmZpbGwpXG4gICAge1xuICAgICAgICB2YXIgY29sb3IgPSB1dGlscy5oZXgycmdiKGdyYXBoaWNzRGF0YS5maWxsQ29sb3IpO1xuICAgICAgICB2YXIgYWxwaGEgPSBncmFwaGljc0RhdGEuZmlsbEFscGhhO1xuXG4gICAgICAgIHZhciByID0gY29sb3JbMF0gKiBhbHBoYTtcbiAgICAgICAgdmFyIGcgPSBjb2xvclsxXSAqIGFscGhhO1xuICAgICAgICB2YXIgYiA9IGNvbG9yWzJdICogYWxwaGE7XG5cbiAgICAgICAgdmFyIHZlcnRzID0gd2ViR0xEYXRhLnBvaW50cztcbiAgICAgICAgdmFyIGluZGljZXMgPSB3ZWJHTERhdGEuaW5kaWNlcztcblxuICAgICAgICB2YXIgdmVydFBvcyA9IHZlcnRzLmxlbmd0aC82O1xuXG4gICAgICAgIC8vIHN0YXJ0XG4gICAgICAgIHZlcnRzLnB1c2goeCwgeSk7XG4gICAgICAgIHZlcnRzLnB1c2gociwgZywgYiwgYWxwaGEpO1xuXG4gICAgICAgIHZlcnRzLnB1c2goeCArIHdpZHRoLCB5KTtcbiAgICAgICAgdmVydHMucHVzaChyLCBnLCBiLCBhbHBoYSk7XG5cbiAgICAgICAgdmVydHMucHVzaCh4ICwgeSArIGhlaWdodCk7XG4gICAgICAgIHZlcnRzLnB1c2gociwgZywgYiwgYWxwaGEpO1xuXG4gICAgICAgIHZlcnRzLnB1c2goeCArIHdpZHRoLCB5ICsgaGVpZ2h0KTtcbiAgICAgICAgdmVydHMucHVzaChyLCBnLCBiLCBhbHBoYSk7XG5cbiAgICAgICAgLy8gaW5zZXJ0IDIgZGVhZCB0cmlhbmdsZXMuLlxuICAgICAgICBpbmRpY2VzLnB1c2godmVydFBvcywgdmVydFBvcywgdmVydFBvcysxLCB2ZXJ0UG9zKzIsIHZlcnRQb3MrMywgdmVydFBvcyszKTtcbiAgICB9XG5cbiAgICBpZiAoZ3JhcGhpY3NEYXRhLmxpbmVXaWR0aClcbiAgICB7XG4gICAgICAgIHZhciB0ZW1wUG9pbnRzID0gZ3JhcGhpY3NEYXRhLnBvaW50cztcblxuICAgICAgICBncmFwaGljc0RhdGEucG9pbnRzID0gW3gsIHksXG4gICAgICAgICAgICAgICAgICB4ICsgd2lkdGgsIHksXG4gICAgICAgICAgICAgICAgICB4ICsgd2lkdGgsIHkgKyBoZWlnaHQsXG4gICAgICAgICAgICAgICAgICB4LCB5ICsgaGVpZ2h0LFxuICAgICAgICAgICAgICAgICAgeCwgeV07XG5cblxuICAgICAgICBidWlsZExpbmUoZ3JhcGhpY3NEYXRhLCB3ZWJHTERhdGEpO1xuXG4gICAgICAgIGdyYXBoaWNzRGF0YS5wb2ludHMgPSB0ZW1wUG9pbnRzO1xuICAgIH1cbn07XG5cbm1vZHVsZS5leHBvcnRzID0gYnVpbGRSZWN0YW5nbGU7IiwidmFyIGJ1aWxkTGluZSA9IHJlcXVpcmUoJy4vYnVpbGRMaW5lJyksXG4gICAgdXRpbHMgPSByZXF1aXJlKCcuLi8uLi8uLi91dGlscycpO1xuICAgIFxuLyoqXG4gKiBCdWlsZHMgYSByb3VuZGVkIHJlY3RhbmdsZSB0byBkcmF3XG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSBncmFwaGljc0RhdGEge1BJWEkuR3JhcGhpY3N9IFRoZSBncmFwaGljcyBvYmplY3QgY29udGFpbmluZyBhbGwgdGhlIG5lY2Vzc2FyeSBwcm9wZXJ0aWVzXG4gKiBAcGFyYW0gd2ViR0xEYXRhIHtvYmplY3R9IGFuIG9iamVjdCBjb250YWluaW5nIGFsbCB0aGUgd2ViR0wtc3BlY2lmaWMgaW5mb3JtYXRpb24gdG8gY3JlYXRlIHRoaXMgc2hhcGVcbiAqL1xuYnVpbGRSb3VuZGVkUmVjdGFuZ2xlID0gZnVuY3Rpb24gKGdyYXBoaWNzRGF0YSwgd2ViR0xEYXRhKVxue1xuICAgIHZhciBycmVjdERhdGEgPSBncmFwaGljc0RhdGEuc2hhcGU7XG4gICAgdmFyIHggPSBycmVjdERhdGEueDtcbiAgICB2YXIgeSA9IHJyZWN0RGF0YS55O1xuICAgIHZhciB3aWR0aCA9IHJyZWN0RGF0YS53aWR0aDtcbiAgICB2YXIgaGVpZ2h0ID0gcnJlY3REYXRhLmhlaWdodDtcblxuICAgIHZhciByYWRpdXMgPSBycmVjdERhdGEucmFkaXVzO1xuXG4gICAgdmFyIHJlY1BvaW50cyA9IFtdO1xuICAgIHJlY1BvaW50cy5wdXNoKHgsIHkgKyByYWRpdXMpO1xuICAgIHRoaXMucXVhZHJhdGljQmV6aWVyQ3VydmUoeCwgeSArIGhlaWdodCAtIHJhZGl1cywgeCwgeSArIGhlaWdodCwgeCArIHJhZGl1cywgeSArIGhlaWdodCwgcmVjUG9pbnRzKTtcbiAgICB0aGlzLnF1YWRyYXRpY0JlemllckN1cnZlKHggKyB3aWR0aCAtIHJhZGl1cywgeSArIGhlaWdodCwgeCArIHdpZHRoLCB5ICsgaGVpZ2h0LCB4ICsgd2lkdGgsIHkgKyBoZWlnaHQgLSByYWRpdXMsIHJlY1BvaW50cyk7XG4gICAgdGhpcy5xdWFkcmF0aWNCZXppZXJDdXJ2ZSh4ICsgd2lkdGgsIHkgKyByYWRpdXMsIHggKyB3aWR0aCwgeSwgeCArIHdpZHRoIC0gcmFkaXVzLCB5LCByZWNQb2ludHMpO1xuICAgIHRoaXMucXVhZHJhdGljQmV6aWVyQ3VydmUoeCArIHJhZGl1cywgeSwgeCwgeSwgeCwgeSArIHJhZGl1cyArIDAuMDAwMDAwMDAwMSwgcmVjUG9pbnRzKTtcblxuICAgIC8vIHRoaXMgdGlueSBudW1iZXIgZGVhbHMgd2l0aCB0aGUgaXNzdWUgdGhhdCBvY2N1cnMgd2hlbiBwb2ludHMgb3ZlcmxhcCBhbmQgZWFyY3V0IGZhaWxzIHRvIHRyaWFuZ3VsYXRlIHRoZSBpdGVtLlxuICAgIC8vIFRPRE8gLSBmaXggdGhpcyBwcm9wZXJseSwgdGhpcyBpcyBub3QgdmVyeSBlbGVnYW50Li4gYnV0IGl0IHdvcmtzIGZvciBub3cuXG5cbiAgICBpZiAoZ3JhcGhpY3NEYXRhLmZpbGwpXG4gICAge1xuICAgICAgICB2YXIgY29sb3IgPSB1dGlscy5oZXgycmdiKGdyYXBoaWNzRGF0YS5maWxsQ29sb3IpO1xuICAgICAgICB2YXIgYWxwaGEgPSBncmFwaGljc0RhdGEuZmlsbEFscGhhO1xuXG4gICAgICAgIHZhciByID0gY29sb3JbMF0gKiBhbHBoYTtcbiAgICAgICAgdmFyIGcgPSBjb2xvclsxXSAqIGFscGhhO1xuICAgICAgICB2YXIgYiA9IGNvbG9yWzJdICogYWxwaGE7XG5cbiAgICAgICAgdmFyIHZlcnRzID0gd2ViR0xEYXRhLnBvaW50cztcbiAgICAgICAgdmFyIGluZGljZXMgPSB3ZWJHTERhdGEuaW5kaWNlcztcblxuICAgICAgICB2YXIgdmVjUG9zID0gdmVydHMubGVuZ3RoLzY7XG5cbiAgICAgICAgdmFyIHRyaWFuZ2xlcyA9IGVhcmN1dChyZWNQb2ludHMsIG51bGwsIDIpO1xuXG4gICAgICAgIHZhciBpID0gMDtcbiAgICAgICAgZm9yIChpID0gMDsgaSA8IHRyaWFuZ2xlcy5sZW5ndGg7IGkrPTMpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGluZGljZXMucHVzaCh0cmlhbmdsZXNbaV0gKyB2ZWNQb3MpO1xuICAgICAgICAgICAgaW5kaWNlcy5wdXNoKHRyaWFuZ2xlc1tpXSArIHZlY1Bvcyk7XG4gICAgICAgICAgICBpbmRpY2VzLnB1c2godHJpYW5nbGVzW2krMV0gKyB2ZWNQb3MpO1xuICAgICAgICAgICAgaW5kaWNlcy5wdXNoKHRyaWFuZ2xlc1tpKzJdICsgdmVjUG9zKTtcbiAgICAgICAgICAgIGluZGljZXMucHVzaCh0cmlhbmdsZXNbaSsyXSArIHZlY1Bvcyk7XG4gICAgICAgIH1cblxuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgcmVjUG9pbnRzLmxlbmd0aDsgaSsrKVxuICAgICAgICB7XG4gICAgICAgICAgICB2ZXJ0cy5wdXNoKHJlY1BvaW50c1tpXSwgcmVjUG9pbnRzWysraV0sIHIsIGcsIGIsIGFscGhhKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGlmIChncmFwaGljc0RhdGEubGluZVdpZHRoKVxuICAgIHtcbiAgICAgICAgdmFyIHRlbXBQb2ludHMgPSBncmFwaGljc0RhdGEucG9pbnRzO1xuXG4gICAgICAgIGdyYXBoaWNzRGF0YS5wb2ludHMgPSByZWNQb2ludHM7XG5cbiAgICAgICAgdGhpcy5idWlsZExpbmUoZ3JhcGhpY3NEYXRhLCB3ZWJHTERhdGEpO1xuXG4gICAgICAgIGdyYXBoaWNzRGF0YS5wb2ludHMgPSB0ZW1wUG9pbnRzO1xuICAgIH1cbn07XG5cbi8qKlxuICogQ2FsY3VsYXRlIHRoZSBwb2ludHMgZm9yIGEgcXVhZHJhdGljIGJlemllciBjdXJ2ZS4gKGhlbHBlciBmdW5jdGlvbi4uKVxuICogQmFzZWQgb246IGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vcXVlc3Rpb25zLzc4NTA5Ny9ob3ctZG8taS1pbXBsZW1lbnQtYS1iZXppZXItY3VydmUtaW4tY1xuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0gZnJvbVgge251bWJlcn0gT3JpZ2luIHBvaW50IHhcbiAqIEBwYXJhbSBmcm9tWSB7bnVtYmVyfSBPcmlnaW4gcG9pbnQgeFxuICogQHBhcmFtIGNwWCB7bnVtYmVyfSBDb250cm9sIHBvaW50IHhcbiAqIEBwYXJhbSBjcFkge251bWJlcn0gQ29udHJvbCBwb2ludCB5XG4gKiBAcGFyYW0gdG9YIHtudW1iZXJ9IERlc3RpbmF0aW9uIHBvaW50IHhcbiAqIEBwYXJhbSB0b1kge251bWJlcn0gRGVzdGluYXRpb24gcG9pbnQgeVxuICogQHBhcmFtIFtvdXRdIHtudW1iZXJbXX0gVGhlIG91dHB1dCBhcnJheSB0byBhZGQgcG9pbnRzIGludG8uIElmIG5vdCBwYXNzZWQsIGEgbmV3IGFycmF5IGlzIGNyZWF0ZWQuXG4gKiBAcmV0dXJuIHtudW1iZXJbXX0gYW4gYXJyYXkgb2YgcG9pbnRzXG4gKi9cbnF1YWRyYXRpY0JlemllckN1cnZlID0gZnVuY3Rpb24gKGZyb21YLCBmcm9tWSwgY3BYLCBjcFksIHRvWCwgdG9ZLCBvdXQpXG57XG4gICAgdmFyIHhhLFxuICAgICAgICB5YSxcbiAgICAgICAgeGIsXG4gICAgICAgIHliLFxuICAgICAgICB4LFxuICAgICAgICB5LFxuICAgICAgICBuID0gMjAsXG4gICAgICAgIHBvaW50cyA9IG91dCB8fCBbXTtcblxuICAgIGZ1bmN0aW9uIGdldFB0KG4xICwgbjIsIHBlcmMpIHtcbiAgICAgICAgdmFyIGRpZmYgPSBuMiAtIG4xO1xuXG4gICAgICAgIHJldHVybiBuMSArICggZGlmZiAqIHBlcmMgKTtcbiAgICB9XG5cbiAgICB2YXIgaiA9IDA7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPD0gbjsgaSsrICkge1xuICAgICAgICBqID0gaSAvIG47XG5cbiAgICAgICAgLy8gVGhlIEdyZWVuIExpbmVcbiAgICAgICAgeGEgPSBnZXRQdCggZnJvbVggLCBjcFggLCBqICk7XG4gICAgICAgIHlhID0gZ2V0UHQoIGZyb21ZICwgY3BZICwgaiApO1xuICAgICAgICB4YiA9IGdldFB0KCBjcFggLCB0b1ggLCBqICk7XG4gICAgICAgIHliID0gZ2V0UHQoIGNwWSAsIHRvWSAsIGogKTtcblxuICAgICAgICAvLyBUaGUgQmxhY2sgRG90XG4gICAgICAgIHggPSBnZXRQdCggeGEgLCB4YiAsIGogKTtcbiAgICAgICAgeSA9IGdldFB0KCB5YSAsIHliICwgaiApO1xuXG4gICAgICAgIHBvaW50cy5wdXNoKHgsIHkpO1xuICAgIH1cblxuICAgIHJldHVybiBwb2ludHM7XG59O1xuXG5cbm1vZHVsZS5leHBvcnRzID0gYnVpbGRSb3VuZGVkUmVjdGFuZ2xlOyIsIi8qKlxuICogQGZpbGUgICAgICAgIE1haW4gZXhwb3J0IG9mIHRoZSBQSVhJIGNvcmUgbGlicmFyeVxuICogQGF1dGhvciAgICAgIE1hdCBHcm92ZXMgPG1hdEBnb29kYm95ZGlnaXRhbC5jb20+XG4gKiBAY29weXJpZ2h0ICAgMjAxMy0yMDE1IEdvb2RCb3lEaWdpdGFsXG4gKiBAbGljZW5zZSAgICAge0BsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9waXhpanMvcGl4aS5qcy9ibG9iL21hc3Rlci9MSUNFTlNFfE1JVCBMaWNlbnNlfVxuICovXG5cbi8qKlxuICogQG5hbWVzcGFjZSBQSVhJXG4gKi9cbi8vIGV4cG9ydCBjb3JlIGFuZCBjb25zdC4gV2UgYXNzaWduIGNvcmUgdG8gY29uc3Qgc28gdGhhdCB0aGUgbm9uLXJlZmVyZW5jZSB0eXBlcyBpbiBjb25zdCByZW1haW4gaW4tdGFjdFxudmFyIGNvcmUgPSBtb2R1bGUuZXhwb3J0cyA9IE9iamVjdC5hc3NpZ24ocmVxdWlyZSgnLi9jb25zdCcpLCByZXF1aXJlKCcuL21hdGgnKSwge1xuICAgIC8vIHV0aWxzXG4gICAgdXRpbHM6IHJlcXVpcmUoJy4vdXRpbHMnKSxcbiAgICB0aWNrZXI6IHJlcXVpcmUoJy4vdGlja2VyJyksXG5cbiAgICAvLyBkaXNwbGF5XG4gICAgRGlzcGxheU9iamVjdDogICAgICAgICAgcmVxdWlyZSgnLi9kaXNwbGF5L0Rpc3BsYXlPYmplY3QnKSxcbiAgICBDb250YWluZXI6ICAgICAgICAgICAgICByZXF1aXJlKCcuL2Rpc3BsYXkvQ29udGFpbmVyJyksXG5cbiAgICAvLyBzcHJpdGVzXG4gICAgU3ByaXRlOiAgICAgICAgICAgICAgICAgcmVxdWlyZSgnLi9zcHJpdGVzL1Nwcml0ZScpLFxuICAgIFBhcnRpY2xlQ29udGFpbmVyOiAgICAgIHJlcXVpcmUoJy4vcGFydGljbGVzL1BhcnRpY2xlQ29udGFpbmVyJyksXG4gICAgU3ByaXRlUmVuZGVyZXI6ICAgICAgICAgcmVxdWlyZSgnLi9zcHJpdGVzL3dlYmdsL1Nwcml0ZVJlbmRlcmVyJyksXG4gICAgUGFydGljbGVSZW5kZXJlcjogICAgICAgcmVxdWlyZSgnLi9wYXJ0aWNsZXMvd2ViZ2wvUGFydGljbGVSZW5kZXJlcicpLFxuXG4gICAgLy8gdGV4dFxuICAgIFRleHQ6ICAgICAgICAgICAgICAgICAgIHJlcXVpcmUoJy4vdGV4dC9UZXh0JyksXG5cbiAgICAvLyBwcmltaXRpdmVzXG4gICAgR3JhcGhpY3M6ICAgICAgICAgICAgICAgcmVxdWlyZSgnLi9ncmFwaGljcy9HcmFwaGljcycpLFxuICAgIEdyYXBoaWNzRGF0YTogICAgICAgICAgIHJlcXVpcmUoJy4vZ3JhcGhpY3MvR3JhcGhpY3NEYXRhJyksXG4gICAgR3JhcGhpY3NSZW5kZXJlcjogICAgICAgcmVxdWlyZSgnLi9ncmFwaGljcy93ZWJnbC9HcmFwaGljc1JlbmRlcmVyJyksXG5cbiAgICAvLyB0ZXh0dXJlc1xuICAgIFRleHR1cmU6ICAgICAgICAgICAgICAgIHJlcXVpcmUoJy4vdGV4dHVyZXMvVGV4dHVyZScpLFxuICAgIEJhc2VUZXh0dXJlOiAgICAgICAgICAgIHJlcXVpcmUoJy4vdGV4dHVyZXMvQmFzZVRleHR1cmUnKSxcbiAgICBSZW5kZXJUZXh0dXJlOiAgICAgICAgICByZXF1aXJlKCcuL3RleHR1cmVzL1JlbmRlclRleHR1cmUnKSxcbiAgICBWaWRlb0Jhc2VUZXh0dXJlOiAgICAgICByZXF1aXJlKCcuL3RleHR1cmVzL1ZpZGVvQmFzZVRleHR1cmUnKSxcbiAgICBUZXh0dXJlVXZzOiAgICAgICAgICAgICByZXF1aXJlKCcuL3RleHR1cmVzL1RleHR1cmVVdnMnKSxcblxuICAgIC8vIHJlbmRlcmVycyAtIGNhbnZhc1xuICAgIENhbnZhc1JlbmRlcmVyOiAgICAgICAgIHJlcXVpcmUoJy4vcmVuZGVyZXJzL2NhbnZhcy9DYW52YXNSZW5kZXJlcicpLFxuICAgIENhbnZhc0dyYXBoaWNzOiAgICAgICAgIHJlcXVpcmUoJy4vcmVuZGVyZXJzL2NhbnZhcy91dGlscy9DYW52YXNHcmFwaGljcycpLFxuICAgIENhbnZhc0J1ZmZlcjogICAgICAgICAgIHJlcXVpcmUoJy4vcmVuZGVyZXJzL2NhbnZhcy91dGlscy9DYW52YXNCdWZmZXInKSxcblxuICAgIC8vIHJlbmRlcmVycyAtIHdlYmdsXG4gICAgV2ViR0xSZW5kZXJlcjogICAgICAgICAgcmVxdWlyZSgnLi9yZW5kZXJlcnMvd2ViZ2wvV2ViR0xSZW5kZXJlcicpLFxuICAgIFdlYkdMTWFuYWdlcjogICAgICAgICAgcmVxdWlyZSgnLi9yZW5kZXJlcnMvd2ViZ2wvbWFuYWdlcnMvV2ViR0xNYW5hZ2VyJyksXG4gICAgU2hhZGVyTWFuYWdlcjogICAgICAgICAgcmVxdWlyZSgnLi9yZW5kZXJlcnMvd2ViZ2wvbWFuYWdlcnMvU2hhZGVyTWFuYWdlcicpLFxuICAgIFNoYWRlcjogICAgICAgICAgICAgICAgIHJlcXVpcmUoJy4vcmVuZGVyZXJzL3dlYmdsL3NoYWRlcnMvU2hhZGVyJyksXG4gICAgT2JqZWN0UmVuZGVyZXI6ICAgICAgICAgcmVxdWlyZSgnLi9yZW5kZXJlcnMvd2ViZ2wvdXRpbHMvT2JqZWN0UmVuZGVyZXInKSxcbiAgICBSZW5kZXJUYXJnZXQ6ICAgICAgICAgICByZXF1aXJlKCcuL3JlbmRlcmVycy93ZWJnbC91dGlscy9SZW5kZXJUYXJnZXQnKSxcblxuICAgIC8vIGZpbHRlcnMgLSB3ZWJnbFxuICAgIEFic3RyYWN0RmlsdGVyOiAgICAgICAgIHJlcXVpcmUoJy4vcmVuZGVyZXJzL3dlYmdsL2ZpbHRlcnMvQWJzdHJhY3RGaWx0ZXInKSxcbiAgICBGWEFBRmlsdGVyOiAgICAgICAgICAgICByZXF1aXJlKCcuL3JlbmRlcmVycy93ZWJnbC9maWx0ZXJzL0ZYQUFGaWx0ZXInKSxcbiAgICBTcHJpdGVNYXNrRmlsdGVyOiAgICAgICByZXF1aXJlKCcuL3JlbmRlcmVycy93ZWJnbC9maWx0ZXJzL1Nwcml0ZU1hc2tGaWx0ZXInKSxcblxuICAgIGdsQ29yZTogICAgICAgICAgICAgICAgICAgcmVxdWlyZSgncGl4aS1nbC1jb3JlJyksXG5cbiAgICAvKipcbiAgICAgKiBUaGlzIGhlbHBlciBmdW5jdGlvbiB3aWxsIGF1dG9tYXRpY2FsbHkgZGV0ZWN0IHdoaWNoIHJlbmRlcmVyIHlvdSBzaG91bGQgYmUgdXNpbmcuXG4gICAgICogV2ViR0wgaXMgdGhlIHByZWZlcnJlZCByZW5kZXJlciBhcyBpdCBpcyBhIGxvdCBmYXN0ZXIuIElmIHdlYkdMIGlzIG5vdCBzdXBwb3J0ZWQgYnlcbiAgICAgKiB0aGUgYnJvd3NlciB0aGVuIHRoaXMgZnVuY3Rpb24gd2lsbCByZXR1cm4gYSBjYW52YXMgcmVuZGVyZXJcbiAgICAgKlxuICAgICAqIEBtZW1iZXJvZiBQSVhJXG4gICAgICogQHBhcmFtIHdpZHRoPTgwMCB7bnVtYmVyfSB0aGUgd2lkdGggb2YgdGhlIHJlbmRlcmVycyB2aWV3XG4gICAgICogQHBhcmFtIGhlaWdodD02MDAge251bWJlcn0gdGhlIGhlaWdodCBvZiB0aGUgcmVuZGVyZXJzIHZpZXdcbiAgICAgKiBAcGFyYW0gW29wdGlvbnNdIHtvYmplY3R9IFRoZSBvcHRpb25hbCByZW5kZXJlciBwYXJhbWV0ZXJzXG4gICAgICogQHBhcmFtIFtvcHRpb25zLnZpZXddIHtIVE1MQ2FudmFzRWxlbWVudH0gdGhlIGNhbnZhcyB0byB1c2UgYXMgYSB2aWV3LCBvcHRpb25hbFxuICAgICAqIEBwYXJhbSBbb3B0aW9ucy50cmFuc3BhcmVudD1mYWxzZV0ge2Jvb2xlYW59IElmIHRoZSByZW5kZXIgdmlldyBpcyB0cmFuc3BhcmVudCwgZGVmYXVsdCBmYWxzZVxuICAgICAqIEBwYXJhbSBbb3B0aW9ucy5hbnRpYWxpYXM9ZmFsc2VdIHtib29sZWFufSBzZXRzIGFudGlhbGlhcyAob25seSBhcHBsaWNhYmxlIGluIGNocm9tZSBhdCB0aGUgbW9tZW50KVxuICAgICAqIEBwYXJhbSBbb3B0aW9ucy5wcmVzZXJ2ZURyYXdpbmdCdWZmZXI9ZmFsc2VdIHtib29sZWFufSBlbmFibGVzIGRyYXdpbmcgYnVmZmVyIHByZXNlcnZhdGlvbiwgZW5hYmxlIHRoaXMgaWYgeW91XG4gICAgICogICAgICBuZWVkIHRvIGNhbGwgdG9EYXRhVXJsIG9uIHRoZSB3ZWJnbCBjb250ZXh0XG4gICAgICogQHBhcmFtIFtvcHRpb25zLnJlc29sdXRpb249MV0ge251bWJlcn0gdGhlIHJlc29sdXRpb24gb2YgdGhlIHJlbmRlcmVyLCByZXRpbmEgd291bGQgYmUgMlxuICAgICAqIEBwYXJhbSBbbm9XZWJHTD1mYWxzZV0ge2Jvb2xlYW59IHByZXZlbnRzIHNlbGVjdGlvbiBvZiBXZWJHTCByZW5kZXJlciwgZXZlbiBpZiBzdWNoIGlzIHByZXNlbnRcbiAgICAgKlxuICAgICAqIEByZXR1cm4ge1dlYkdMUmVuZGVyZXJ8Q2FudmFzUmVuZGVyZXJ9IFJldHVybnMgV2ViR0wgcmVuZGVyZXIgaWYgYXZhaWxhYmxlLCBvdGhlcndpc2UgQ2FudmFzUmVuZGVyZXJcbiAgICAgKi9cbiAgICBhdXRvRGV0ZWN0UmVuZGVyZXI6IGZ1bmN0aW9uICh3aWR0aCwgaGVpZ2h0LCBvcHRpb25zLCBub1dlYkdMKVxuICAgIHtcbiAgICAgICAgd2lkdGggPSB3aWR0aCB8fCA4MDA7XG4gICAgICAgIGhlaWdodCA9IGhlaWdodCB8fCA2MDA7XG5cbiAgICAgICAgaWYgKCFub1dlYkdMICYmIGNvcmUudXRpbHMuaXNXZWJHTFN1cHBvcnRlZCgpKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IGNvcmUuV2ViR0xSZW5kZXJlcih3aWR0aCwgaGVpZ2h0LCBvcHRpb25zKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBuZXcgY29yZS5DYW52YXNSZW5kZXJlcih3aWR0aCwgaGVpZ2h0LCBvcHRpb25zKTtcbiAgICB9XG59KTtcbiIsIi8vIEB0b2RvIC0gaWdub3JlIHRoZSB0b28gbWFueSBwYXJhbWV0ZXJzIHdhcm5pbmcgZm9yIG5vd1xuLy8gc2hvdWxkIGVpdGhlciBmaXggaXQgb3IgY2hhbmdlIHRoZSBqc2hpbnQgY29uZmlnXG4vLyBqc2hpbnQgLVcwNzJcblxudmFyIFBvaW50ID0gcmVxdWlyZSgnLi9Qb2ludCcpO1xuXG4vKipcbiAqIFRoZSBwaXhpIE1hdHJpeCBjbGFzcyBhcyBhbiBvYmplY3QsIHdoaWNoIG1ha2VzIGl0IGEgbG90IGZhc3RlcixcbiAqIGhlcmUgaXMgYSByZXByZXNlbnRhdGlvbiBvZiBpdCA6XG4gKiB8IGEgfCBiIHwgdHh8XG4gKiB8IGMgfCBkIHwgdHl8XG4gKiB8IDAgfCAwIHwgMSB8XG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICovXG5mdW5jdGlvbiBNYXRyaXgoKVxue1xuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAxXG4gICAgICovXG4gICAgdGhpcy5hID0gMTtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAwXG4gICAgICovXG4gICAgdGhpcy5iID0gMDtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAwXG4gICAgICovXG4gICAgdGhpcy5jID0gMDtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAxXG4gICAgICovXG4gICAgdGhpcy5kID0gMTtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAwXG4gICAgICovXG4gICAgdGhpcy50eCA9IDA7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMFxuICAgICAqL1xuICAgIHRoaXMudHkgPSAwO1xufVxuXG5NYXRyaXgucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gTWF0cml4O1xubW9kdWxlLmV4cG9ydHMgPSBNYXRyaXg7XG5cbi8qKlxuICogQ3JlYXRlcyBhIE1hdHJpeCBvYmplY3QgYmFzZWQgb24gdGhlIGdpdmVuIGFycmF5LiBUaGUgRWxlbWVudCB0byBNYXRyaXggbWFwcGluZyBvcmRlciBpcyBhcyBmb2xsb3dzOlxuICpcbiAqIGEgPSBhcnJheVswXVxuICogYiA9IGFycmF5WzFdXG4gKiBjID0gYXJyYXlbM11cbiAqIGQgPSBhcnJheVs0XVxuICogdHggPSBhcnJheVsyXVxuICogdHkgPSBhcnJheVs1XVxuICpcbiAqIEBwYXJhbSBhcnJheSB7bnVtYmVyW119IFRoZSBhcnJheSB0aGF0IHRoZSBtYXRyaXggd2lsbCBiZSBwb3B1bGF0ZWQgZnJvbS5cbiAqL1xuTWF0cml4LnByb3RvdHlwZS5mcm9tQXJyYXkgPSBmdW5jdGlvbiAoYXJyYXkpXG57XG4gICAgdGhpcy5hID0gYXJyYXlbMF07XG4gICAgdGhpcy5iID0gYXJyYXlbMV07XG4gICAgdGhpcy5jID0gYXJyYXlbM107XG4gICAgdGhpcy5kID0gYXJyYXlbNF07XG4gICAgdGhpcy50eCA9IGFycmF5WzJdO1xuICAgIHRoaXMudHkgPSBhcnJheVs1XTtcbn07XG5cblxuLyoqXG4gKiBzZXRzIHRoZSBtYXRyaXggcHJvcGVydGllc1xuICpcbiAqIEBwYXJhbSB7bnVtYmVyfSBhXG4gKiBAcGFyYW0ge251bWJlcn0gYlxuICogQHBhcmFtIHtudW1iZXJ9IGNcbiAqIEBwYXJhbSB7bnVtYmVyfSBkXG4gKiBAcGFyYW0ge251bWJlcn0gdHhcbiAqIEBwYXJhbSB7bnVtYmVyfSB0eVxuICpcbiAqIEByZXR1cm4ge1BJWEkuTWF0cml4fSBUaGlzIG1hdHJpeC4gR29vZCBmb3IgY2hhaW5pbmcgbWV0aG9kIGNhbGxzLlxuICovXG5NYXRyaXgucHJvdG90eXBlLnNldCA9IGZ1bmN0aW9uIChhLCBiLCBjLCBkLCB0eCwgdHkpXG57XG4gICAgdGhpcy5hID0gYTtcbiAgICB0aGlzLmIgPSBiO1xuICAgIHRoaXMuYyA9IGM7XG4gICAgdGhpcy5kID0gZDtcbiAgICB0aGlzLnR4ID0gdHg7XG4gICAgdGhpcy50eSA9IHR5O1xuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG5cbi8qKlxuICogQ3JlYXRlcyBhbiBhcnJheSBmcm9tIHRoZSBjdXJyZW50IE1hdHJpeCBvYmplY3QuXG4gKlxuICogQHBhcmFtIHRyYW5zcG9zZSB7Ym9vbGVhbn0gV2hldGhlciB3ZSBuZWVkIHRvIHRyYW5zcG9zZSB0aGUgbWF0cml4IG9yIG5vdFxuICogQHBhcmFtIFtvdXRdIHtBcnJheX0gSWYgcHJvdmlkZWQgdGhlIGFycmF5IHdpbGwgYmUgYXNzaWduZWQgdG8gb3V0XG4gKiBAcmV0dXJuIHtudW1iZXJbXX0gdGhlIG5ld2x5IGNyZWF0ZWQgYXJyYXkgd2hpY2ggY29udGFpbnMgdGhlIG1hdHJpeFxuICovXG5NYXRyaXgucHJvdG90eXBlLnRvQXJyYXkgPSBmdW5jdGlvbiAodHJhbnNwb3NlLCBvdXQpXG57XG4gICAgaWYgKCF0aGlzLmFycmF5KVxuICAgIHtcbiAgICAgICAgdGhpcy5hcnJheSA9IG5ldyBGbG9hdDMyQXJyYXkoOSk7XG4gICAgfVxuXG4gICAgdmFyIGFycmF5ID0gb3V0IHx8IHRoaXMuYXJyYXk7XG5cbiAgICBpZiAodHJhbnNwb3NlKVxuICAgIHtcbiAgICAgICAgYXJyYXlbMF0gPSB0aGlzLmE7XG4gICAgICAgIGFycmF5WzFdID0gdGhpcy5iO1xuICAgICAgICBhcnJheVsyXSA9IDA7XG4gICAgICAgIGFycmF5WzNdID0gdGhpcy5jO1xuICAgICAgICBhcnJheVs0XSA9IHRoaXMuZDtcbiAgICAgICAgYXJyYXlbNV0gPSAwO1xuICAgICAgICBhcnJheVs2XSA9IHRoaXMudHg7XG4gICAgICAgIGFycmF5WzddID0gdGhpcy50eTtcbiAgICAgICAgYXJyYXlbOF0gPSAxO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICBhcnJheVswXSA9IHRoaXMuYTtcbiAgICAgICAgYXJyYXlbMV0gPSB0aGlzLmM7XG4gICAgICAgIGFycmF5WzJdID0gdGhpcy50eDtcbiAgICAgICAgYXJyYXlbM10gPSB0aGlzLmI7XG4gICAgICAgIGFycmF5WzRdID0gdGhpcy5kO1xuICAgICAgICBhcnJheVs1XSA9IHRoaXMudHk7XG4gICAgICAgIGFycmF5WzZdID0gMDtcbiAgICAgICAgYXJyYXlbN10gPSAwO1xuICAgICAgICBhcnJheVs4XSA9IDE7XG4gICAgfVxuXG4gICAgcmV0dXJuIGFycmF5O1xufTtcblxuLyoqXG4gKiBHZXQgYSBuZXcgcG9zaXRpb24gd2l0aCB0aGUgY3VycmVudCB0cmFuc2Zvcm1hdGlvbiBhcHBsaWVkLlxuICogQ2FuIGJlIHVzZWQgdG8gZ28gZnJvbSBhIGNoaWxkJ3MgY29vcmRpbmF0ZSBzcGFjZSB0byB0aGUgd29ybGQgY29vcmRpbmF0ZSBzcGFjZS4gKGUuZy4gcmVuZGVyaW5nKVxuICpcbiAqIEBwYXJhbSBwb3Mge1BJWEkuUG9pbnR9IFRoZSBvcmlnaW5cbiAqIEBwYXJhbSBbbmV3UG9zXSB7UElYSS5Qb2ludH0gVGhlIHBvaW50IHRoYXQgdGhlIG5ldyBwb3NpdGlvbiBpcyBhc3NpZ25lZCB0byAoYWxsb3dlZCB0byBiZSBzYW1lIGFzIGlucHV0KVxuICogQHJldHVybiB7UElYSS5Qb2ludH0gVGhlIG5ldyBwb2ludCwgdHJhbnNmb3JtZWQgdGhyb3VnaCB0aGlzIG1hdHJpeFxuICovXG5NYXRyaXgucHJvdG90eXBlLmFwcGx5ID0gZnVuY3Rpb24gKHBvcywgbmV3UG9zKVxue1xuICAgIG5ld1BvcyA9IG5ld1BvcyB8fCBuZXcgUG9pbnQoKTtcblxuICAgIHZhciB4ID0gcG9zLng7XG4gICAgdmFyIHkgPSBwb3MueTtcblxuICAgIG5ld1Bvcy54ID0gdGhpcy5hICogeCArIHRoaXMuYyAqIHkgKyB0aGlzLnR4O1xuICAgIG5ld1Bvcy55ID0gdGhpcy5iICogeCArIHRoaXMuZCAqIHkgKyB0aGlzLnR5O1xuXG4gICAgcmV0dXJuIG5ld1Bvcztcbn07XG5cbi8qKlxuICogR2V0IGEgbmV3IHBvc2l0aW9uIHdpdGggdGhlIGludmVyc2Ugb2YgdGhlIGN1cnJlbnQgdHJhbnNmb3JtYXRpb24gYXBwbGllZC5cbiAqIENhbiBiZSB1c2VkIHRvIGdvIGZyb20gdGhlIHdvcmxkIGNvb3JkaW5hdGUgc3BhY2UgdG8gYSBjaGlsZCdzIGNvb3JkaW5hdGUgc3BhY2UuIChlLmcuIGlucHV0KVxuICpcbiAqIEBwYXJhbSBwb3Mge1BJWEkuUG9pbnR9IFRoZSBvcmlnaW5cbiAqIEBwYXJhbSBbbmV3UG9zXSB7UElYSS5Qb2ludH0gVGhlIHBvaW50IHRoYXQgdGhlIG5ldyBwb3NpdGlvbiBpcyBhc3NpZ25lZCB0byAoYWxsb3dlZCB0byBiZSBzYW1lIGFzIGlucHV0KVxuICogQHJldHVybiB7UElYSS5Qb2ludH0gVGhlIG5ldyBwb2ludCwgaW52ZXJzZS10cmFuc2Zvcm1lZCB0aHJvdWdoIHRoaXMgbWF0cml4XG4gKi9cbk1hdHJpeC5wcm90b3R5cGUuYXBwbHlJbnZlcnNlID0gZnVuY3Rpb24gKHBvcywgbmV3UG9zKVxue1xuICAgIG5ld1BvcyA9IG5ld1BvcyB8fCBuZXcgUG9pbnQoKTtcblxuICAgIHZhciBpZCA9IDEgLyAodGhpcy5hICogdGhpcy5kICsgdGhpcy5jICogLXRoaXMuYik7XG5cbiAgICB2YXIgeCA9IHBvcy54O1xuICAgIHZhciB5ID0gcG9zLnk7XG5cbiAgICBuZXdQb3MueCA9IHRoaXMuZCAqIGlkICogeCArIC10aGlzLmMgKiBpZCAqIHkgKyAodGhpcy50eSAqIHRoaXMuYyAtIHRoaXMudHggKiB0aGlzLmQpICogaWQ7XG4gICAgbmV3UG9zLnkgPSB0aGlzLmEgKiBpZCAqIHkgKyAtdGhpcy5iICogaWQgKiB4ICsgKC10aGlzLnR5ICogdGhpcy5hICsgdGhpcy50eCAqIHRoaXMuYikgKiBpZDtcblxuICAgIHJldHVybiBuZXdQb3M7XG59O1xuXG4vKipcbiAqIFRyYW5zbGF0ZXMgdGhlIG1hdHJpeCBvbiB0aGUgeCBhbmQgeS5cbiAqXG4gKiBAcGFyYW0ge251bWJlcn0geFxuICogQHBhcmFtIHtudW1iZXJ9IHlcbiAqIEByZXR1cm4ge1BJWEkuTWF0cml4fSBUaGlzIG1hdHJpeC4gR29vZCBmb3IgY2hhaW5pbmcgbWV0aG9kIGNhbGxzLlxuICovXG5NYXRyaXgucHJvdG90eXBlLnRyYW5zbGF0ZSA9IGZ1bmN0aW9uICh4LCB5KVxue1xuICAgIHRoaXMudHggKz0geDtcbiAgICB0aGlzLnR5ICs9IHk7XG5cbiAgICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogQXBwbGllcyBhIHNjYWxlIHRyYW5zZm9ybWF0aW9uIHRvIHRoZSBtYXRyaXguXG4gKlxuICogQHBhcmFtIHtudW1iZXJ9IHggVGhlIGFtb3VudCB0byBzY2FsZSBob3Jpem9udGFsbHlcbiAqIEBwYXJhbSB7bnVtYmVyfSB5IFRoZSBhbW91bnQgdG8gc2NhbGUgdmVydGljYWxseVxuICogQHJldHVybiB7UElYSS5NYXRyaXh9IFRoaXMgbWF0cml4LiBHb29kIGZvciBjaGFpbmluZyBtZXRob2QgY2FsbHMuXG4gKi9cbk1hdHJpeC5wcm90b3R5cGUuc2NhbGUgPSBmdW5jdGlvbiAoeCwgeSlcbntcbiAgICB0aGlzLmEgKj0geDtcbiAgICB0aGlzLmQgKj0geTtcbiAgICB0aGlzLmMgKj0geDtcbiAgICB0aGlzLmIgKj0geTtcbiAgICB0aGlzLnR4ICo9IHg7XG4gICAgdGhpcy50eSAqPSB5O1xuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG5cbi8qKlxuICogQXBwbGllcyBhIHJvdGF0aW9uIHRyYW5zZm9ybWF0aW9uIHRvIHRoZSBtYXRyaXguXG4gKlxuICogQHBhcmFtIHtudW1iZXJ9IGFuZ2xlIC0gVGhlIGFuZ2xlIGluIHJhZGlhbnMuXG4gKiBAcmV0dXJuIHtQSVhJLk1hdHJpeH0gVGhpcyBtYXRyaXguIEdvb2QgZm9yIGNoYWluaW5nIG1ldGhvZCBjYWxscy5cbiAqL1xuTWF0cml4LnByb3RvdHlwZS5yb3RhdGUgPSBmdW5jdGlvbiAoYW5nbGUpXG57XG4gICAgdmFyIGNvcyA9IE1hdGguY29zKCBhbmdsZSApO1xuICAgIHZhciBzaW4gPSBNYXRoLnNpbiggYW5nbGUgKTtcblxuICAgIHZhciBhMSA9IHRoaXMuYTtcbiAgICB2YXIgYzEgPSB0aGlzLmM7XG4gICAgdmFyIHR4MSA9IHRoaXMudHg7XG5cbiAgICB0aGlzLmEgPSBhMSAqIGNvcy10aGlzLmIgKiBzaW47XG4gICAgdGhpcy5iID0gYTEgKiBzaW4rdGhpcy5iICogY29zO1xuICAgIHRoaXMuYyA9IGMxICogY29zLXRoaXMuZCAqIHNpbjtcbiAgICB0aGlzLmQgPSBjMSAqIHNpbit0aGlzLmQgKiBjb3M7XG4gICAgdGhpcy50eCA9IHR4MSAqIGNvcyAtIHRoaXMudHkgKiBzaW47XG4gICAgdGhpcy50eSA9IHR4MSAqIHNpbiArIHRoaXMudHkgKiBjb3M7XG5cbiAgICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogQXBwZW5kcyB0aGUgZ2l2ZW4gTWF0cml4IHRvIHRoaXMgTWF0cml4LlxuICpcbiAqIEBwYXJhbSB7UElYSS5NYXRyaXh9IG1hdHJpeFxuICogQHJldHVybiB7UElYSS5NYXRyaXh9IFRoaXMgbWF0cml4LiBHb29kIGZvciBjaGFpbmluZyBtZXRob2QgY2FsbHMuXG4gKi9cbk1hdHJpeC5wcm90b3R5cGUuYXBwZW5kID0gZnVuY3Rpb24gKG1hdHJpeClcbntcbiAgICB2YXIgYTEgPSB0aGlzLmE7XG4gICAgdmFyIGIxID0gdGhpcy5iO1xuICAgIHZhciBjMSA9IHRoaXMuYztcbiAgICB2YXIgZDEgPSB0aGlzLmQ7XG5cbiAgICB0aGlzLmEgID0gbWF0cml4LmEgKiBhMSArIG1hdHJpeC5iICogYzE7XG4gICAgdGhpcy5iICA9IG1hdHJpeC5hICogYjEgKyBtYXRyaXguYiAqIGQxO1xuICAgIHRoaXMuYyAgPSBtYXRyaXguYyAqIGExICsgbWF0cml4LmQgKiBjMTtcbiAgICB0aGlzLmQgID0gbWF0cml4LmMgKiBiMSArIG1hdHJpeC5kICogZDE7XG5cbiAgICB0aGlzLnR4ID0gbWF0cml4LnR4ICogYTEgKyBtYXRyaXgudHkgKiBjMSArIHRoaXMudHg7XG4gICAgdGhpcy50eSA9IG1hdHJpeC50eCAqIGIxICsgbWF0cml4LnR5ICogZDEgKyB0aGlzLnR5O1xuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIFNldHMgdGhlIG1hdHJpeCBiYXNlZCBvbiBhbGwgdGhlIGF2YWlsYWJsZSBwcm9wZXJ0aWVzXG4gKlxuICogQHBhcmFtIHtudW1iZXJ9IHhcbiAqIEBwYXJhbSB7bnVtYmVyfSB5XG4gKiBAcGFyYW0ge251bWJlcn0gcGl2b3RYXG4gKiBAcGFyYW0ge251bWJlcn0gcGl2b3RZXG4gKiBAcGFyYW0ge251bWJlcn0gc2NhbGVYXG4gKiBAcGFyYW0ge251bWJlcn0gc2NhbGVZXG4gKiBAcGFyYW0ge251bWJlcn0gcm90YXRpb25cbiAqIEBwYXJhbSB7bnVtYmVyfSBza2V3WFxuICogQHBhcmFtIHtudW1iZXJ9IHNrZXdZXG4gKlxuICogQHJldHVybiB7UElYSS5NYXRyaXh9IFRoaXMgbWF0cml4LiBHb29kIGZvciBjaGFpbmluZyBtZXRob2QgY2FsbHMuXG4gKi9cbk1hdHJpeC5wcm90b3R5cGUuc2V0VHJhbnNmb3JtID0gZnVuY3Rpb24gKHgsIHksIHBpdm90WCwgcGl2b3RZLCBzY2FsZVgsIHNjYWxlWSwgcm90YXRpb24sIHNrZXdYLCBza2V3WSlcbntcbiAgICB2YXIgYSwgYiwgYywgZCwgc3IsIGNyLCBjeSwgc3ksIG5zeCwgY3g7XG5cbiAgICBzciAgPSBNYXRoLnNpbihyb3RhdGlvbik7XG4gICAgY3IgID0gTWF0aC5jb3Mocm90YXRpb24pO1xuICAgIGN5ICA9IE1hdGguY29zKHNrZXdZKTtcbiAgICBzeSAgPSBNYXRoLnNpbihza2V3WSk7XG4gICAgbnN4ID0gLU1hdGguc2luKHNrZXdYKTtcbiAgICBjeCAgPSAgTWF0aC5jb3Moc2tld1gpO1xuXG4gICAgYSAgPSAgY3IgKiBzY2FsZVg7XG4gICAgYiAgPSAgc3IgKiBzY2FsZVg7XG4gICAgYyAgPSAtc3IgKiBzY2FsZVk7XG4gICAgZCAgPSAgY3IgKiBzY2FsZVk7XG5cbiAgICB0aGlzLmEgID0gY3kgKiBhICsgc3kgKiBjO1xuICAgIHRoaXMuYiAgPSBjeSAqIGIgKyBzeSAqIGQ7XG4gICAgdGhpcy5jICA9IG5zeCAqIGEgKyBjeCAqIGM7XG4gICAgdGhpcy5kICA9IG5zeCAqIGIgKyBjeCAqIGQ7XG5cbiAgICB0aGlzLnR4ID0geCArICggcGl2b3RYICogYSArIHBpdm90WSAqIGMgKTtcbiAgICB0aGlzLnR5ID0geSArICggcGl2b3RYICogYiArIHBpdm90WSAqIGQgKTtcblxuICAgIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBQcmVwZW5kcyB0aGUgZ2l2ZW4gTWF0cml4IHRvIHRoaXMgTWF0cml4LlxuICpcbiAqIEBwYXJhbSB7UElYSS5NYXRyaXh9IG1hdHJpeFxuICogQHJldHVybiB7UElYSS5NYXRyaXh9IFRoaXMgbWF0cml4LiBHb29kIGZvciBjaGFpbmluZyBtZXRob2QgY2FsbHMuXG4gKi9cbk1hdHJpeC5wcm90b3R5cGUucHJlcGVuZCA9IGZ1bmN0aW9uKG1hdHJpeClcbntcbiAgICB2YXIgdHgxID0gdGhpcy50eDtcblxuICAgIGlmIChtYXRyaXguYSAhPT0gMSB8fCBtYXRyaXguYiAhPT0gMCB8fCBtYXRyaXguYyAhPT0gMCB8fCBtYXRyaXguZCAhPT0gMSlcbiAgICB7XG4gICAgICAgIHZhciBhMSA9IHRoaXMuYTtcbiAgICAgICAgdmFyIGMxID0gdGhpcy5jO1xuICAgICAgICB0aGlzLmEgID0gYTEqbWF0cml4LmErdGhpcy5iKm1hdHJpeC5jO1xuICAgICAgICB0aGlzLmIgID0gYTEqbWF0cml4LmIrdGhpcy5iKm1hdHJpeC5kO1xuICAgICAgICB0aGlzLmMgID0gYzEqbWF0cml4LmErdGhpcy5kKm1hdHJpeC5jO1xuICAgICAgICB0aGlzLmQgID0gYzEqbWF0cml4LmIrdGhpcy5kKm1hdHJpeC5kO1xuICAgIH1cblxuICAgIHRoaXMudHggPSB0eDEqbWF0cml4LmErdGhpcy50eSptYXRyaXguYyttYXRyaXgudHg7XG4gICAgdGhpcy50eSA9IHR4MSptYXRyaXguYit0aGlzLnR5Km1hdHJpeC5kK21hdHJpeC50eTtcblxuICAgIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBJbnZlcnRzIHRoaXMgbWF0cml4XG4gKlxuICogQHJldHVybiB7UElYSS5NYXRyaXh9IFRoaXMgbWF0cml4LiBHb29kIGZvciBjaGFpbmluZyBtZXRob2QgY2FsbHMuXG4gKi9cbk1hdHJpeC5wcm90b3R5cGUuaW52ZXJ0ID0gZnVuY3Rpb24oKVxue1xuICAgIHZhciBhMSA9IHRoaXMuYTtcbiAgICB2YXIgYjEgPSB0aGlzLmI7XG4gICAgdmFyIGMxID0gdGhpcy5jO1xuICAgIHZhciBkMSA9IHRoaXMuZDtcbiAgICB2YXIgdHgxID0gdGhpcy50eDtcbiAgICB2YXIgbiA9IGExKmQxLWIxKmMxO1xuXG4gICAgdGhpcy5hID0gZDEvbjtcbiAgICB0aGlzLmIgPSAtYjEvbjtcbiAgICB0aGlzLmMgPSAtYzEvbjtcbiAgICB0aGlzLmQgPSBhMS9uO1xuICAgIHRoaXMudHggPSAoYzEqdGhpcy50eS1kMSp0eDEpL247XG4gICAgdGhpcy50eSA9IC0oYTEqdGhpcy50eS1iMSp0eDEpL247XG5cbiAgICByZXR1cm4gdGhpcztcbn07XG5cblxuLyoqXG4gKiBSZXNldHMgdGhpcyBNYXRpeCB0byBhbiBpZGVudGl0eSAoZGVmYXVsdCkgbWF0cml4LlxuICpcbiAqIEByZXR1cm4ge1BJWEkuTWF0cml4fSBUaGlzIG1hdHJpeC4gR29vZCBmb3IgY2hhaW5pbmcgbWV0aG9kIGNhbGxzLlxuICovXG5NYXRyaXgucHJvdG90eXBlLmlkZW50aXR5ID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLmEgPSAxO1xuICAgIHRoaXMuYiA9IDA7XG4gICAgdGhpcy5jID0gMDtcbiAgICB0aGlzLmQgPSAxO1xuICAgIHRoaXMudHggPSAwO1xuICAgIHRoaXMudHkgPSAwO1xuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIENyZWF0ZXMgYSBuZXcgTWF0cml4IG9iamVjdCB3aXRoIHRoZSBzYW1lIHZhbHVlcyBhcyB0aGlzIG9uZS5cbiAqXG4gKiBAcmV0dXJuIHtQSVhJLk1hdHJpeH0gQSBjb3B5IG9mIHRoaXMgbWF0cml4LiBHb29kIGZvciBjaGFpbmluZyBtZXRob2QgY2FsbHMuXG4gKi9cbk1hdHJpeC5wcm90b3R5cGUuY2xvbmUgPSBmdW5jdGlvbiAoKVxue1xuICAgIHZhciBtYXRyaXggPSBuZXcgTWF0cml4KCk7XG4gICAgbWF0cml4LmEgPSB0aGlzLmE7XG4gICAgbWF0cml4LmIgPSB0aGlzLmI7XG4gICAgbWF0cml4LmMgPSB0aGlzLmM7XG4gICAgbWF0cml4LmQgPSB0aGlzLmQ7XG4gICAgbWF0cml4LnR4ID0gdGhpcy50eDtcbiAgICBtYXRyaXgudHkgPSB0aGlzLnR5O1xuXG4gICAgcmV0dXJuIG1hdHJpeDtcbn07XG5cbi8qKlxuICogQ2hhbmdlcyB0aGUgdmFsdWVzIG9mIHRoZSBnaXZlbiBtYXRyaXggdG8gYmUgdGhlIHNhbWUgYXMgdGhlIG9uZXMgaW4gdGhpcyBtYXRyaXhcbiAqXG4gKiBAcmV0dXJuIHtQSVhJLk1hdHJpeH0gVGhlIG1hdHJpeCBnaXZlbiBpbiBwYXJhbWV0ZXIgd2l0aCBpdHMgdmFsdWVzIHVwZGF0ZWQuXG4gKi9cbk1hdHJpeC5wcm90b3R5cGUuY29weSA9IGZ1bmN0aW9uIChtYXRyaXgpXG57XG4gICAgbWF0cml4LmEgPSB0aGlzLmE7XG4gICAgbWF0cml4LmIgPSB0aGlzLmI7XG4gICAgbWF0cml4LmMgPSB0aGlzLmM7XG4gICAgbWF0cml4LmQgPSB0aGlzLmQ7XG4gICAgbWF0cml4LnR4ID0gdGhpcy50eDtcbiAgICBtYXRyaXgudHkgPSB0aGlzLnR5O1xuXG4gICAgcmV0dXJuIG1hdHJpeDtcbn07XG5cbi8qKlxuICogQSBkZWZhdWx0IChpZGVudGl0eSkgbWF0cml4XG4gKlxuICogQHN0YXRpY1xuICogQGNvbnN0XG4gKi9cbk1hdHJpeC5JREVOVElUWSA9IG5ldyBNYXRyaXgoKTtcblxuLyoqXG4gKiBBIHRlbXAgbWF0cml4XG4gKlxuICogQHN0YXRpY1xuICogQGNvbnN0XG4gKi9cbk1hdHJpeC5URU1QX01BVFJJWCA9IG5ldyBNYXRyaXgoKTtcbiIsIi8qKlxuICogVGhlIFBvaW50IG9iamVjdCByZXByZXNlbnRzIGEgbG9jYXRpb24gaW4gYSB0d28tZGltZW5zaW9uYWwgY29vcmRpbmF0ZSBzeXN0ZW0sIHdoZXJlIHggcmVwcmVzZW50c1xuICogdGhlIGhvcml6b250YWwgYXhpcyBhbmQgeSByZXByZXNlbnRzIHRoZSB2ZXJ0aWNhbCBheGlzLlxuICpcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqIEBwYXJhbSBbeD0wXSB7bnVtYmVyfSBwb3NpdGlvbiBvZiB0aGUgcG9pbnQgb24gdGhlIHggYXhpc1xuICogQHBhcmFtIFt5PTBdIHtudW1iZXJ9IHBvc2l0aW9uIG9mIHRoZSBwb2ludCBvbiB0aGUgeSBheGlzXG4gKi9cbmZ1bmN0aW9uIFBvaW50KHgsIHkpXG57XG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDBcbiAgICAgKi9cbiAgICB0aGlzLnggPSB4IHx8IDA7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMFxuICAgICAqL1xuICAgIHRoaXMueSA9IHkgfHwgMDtcbn1cblxuUG9pbnQucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gUG9pbnQ7XG5tb2R1bGUuZXhwb3J0cyA9IFBvaW50O1xuXG4vKipcbiAqIENyZWF0ZXMgYSBjbG9uZSBvZiB0aGlzIHBvaW50XG4gKlxuICogQHJldHVybiB7UElYSS5Qb2ludH0gYSBjb3B5IG9mIHRoZSBwb2ludFxuICovXG5Qb2ludC5wcm90b3R5cGUuY2xvbmUgPSBmdW5jdGlvbiAoKVxue1xuICAgIHJldHVybiBuZXcgUG9pbnQodGhpcy54LCB0aGlzLnkpO1xufTtcblxuLyoqXG4gKiBDb3BpZXMgeCBhbmQgeSBmcm9tIHRoZSBnaXZlbiBwb2ludFxuICpcbiAqIEBwYXJhbSBwIHtQSVhJLlBvaW50fVxuICovXG5Qb2ludC5wcm90b3R5cGUuY29weSA9IGZ1bmN0aW9uIChwKSB7XG4gICAgdGhpcy5zZXQocC54LCBwLnkpO1xufTtcblxuLyoqXG4gKiBSZXR1cm5zIHRydWUgaWYgdGhlIGdpdmVuIHBvaW50IGlzIGVxdWFsIHRvIHRoaXMgcG9pbnRcbiAqXG4gKiBAcGFyYW0gcCB7UElYSS5Qb2ludH1cbiAqIEByZXR1cm5zIHtib29sZWFufVxuICovXG5Qb2ludC5wcm90b3R5cGUuZXF1YWxzID0gZnVuY3Rpb24gKHApIHtcbiAgICByZXR1cm4gKHAueCA9PT0gdGhpcy54KSAmJiAocC55ID09PSB0aGlzLnkpO1xufTtcblxuLyoqXG4gKiBTZXRzIHRoZSBwb2ludCB0byBhIG5ldyB4IGFuZCB5IHBvc2l0aW9uLlxuICogSWYgeSBpcyBvbWl0dGVkLCBib3RoIHggYW5kIHkgd2lsbCBiZSBzZXQgdG8geC5cbiAqXG4gKiBAcGFyYW0gW3g9MF0ge251bWJlcn0gcG9zaXRpb24gb2YgdGhlIHBvaW50IG9uIHRoZSB4IGF4aXNcbiAqIEBwYXJhbSBbeT0wXSB7bnVtYmVyfSBwb3NpdGlvbiBvZiB0aGUgcG9pbnQgb24gdGhlIHkgYXhpc1xuICovXG5Qb2ludC5wcm90b3R5cGUuc2V0ID0gZnVuY3Rpb24gKHgsIHkpXG57XG4gICAgdGhpcy54ID0geCB8fCAwO1xuICAgIHRoaXMueSA9IHkgfHwgKCAoeSAhPT0gMCkgPyB0aGlzLnggOiAwICkgO1xufTtcbiIsIi8qKlxuICogTWF0aCBjbGFzc2VzIGFuZCB1dGlsaXRpZXMgbWl4ZWQgaW50byBQSVhJIG5hbWVzcGFjZS5cbiAqXG4gKiBAbGVuZHMgUElYSVxuICovXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgICAvLyBUaGVzZSB3aWxsIGJlIG1peGVkIHRvIGJlIG1hZGUgcHVibGljbHkgYXZhaWxhYmxlLFxuICAgIC8vIHdoaWxlIHRoaXMgbW9kdWxlIGlzIHVzZWQgaW50ZXJuYWxseSBpbiBjb3JlXG4gICAgLy8gdG8gYXZvaWQgY2lyY3VsYXIgZGVwZW5kZW5jaWVzIGFuZCBjdXQgZG93biBvblxuICAgIC8vIGludGVybmFsIG1vZHVsZSByZXF1aXJlcy5cblxuICAgIFBvaW50OiAgICAgIHJlcXVpcmUoJy4vUG9pbnQnKSxcbiAgICBNYXRyaXg6ICAgICByZXF1aXJlKCcuL01hdHJpeCcpLFxuXG4gICAgQ2lyY2xlOiAgICAgcmVxdWlyZSgnLi9zaGFwZXMvQ2lyY2xlJyksXG4gICAgRWxsaXBzZTogICAgcmVxdWlyZSgnLi9zaGFwZXMvRWxsaXBzZScpLFxuICAgIFBvbHlnb246ICAgIHJlcXVpcmUoJy4vc2hhcGVzL1BvbHlnb24nKSxcbiAgICBSZWN0YW5nbGU6ICByZXF1aXJlKCcuL3NoYXBlcy9SZWN0YW5nbGUnKSxcbiAgICBSb3VuZGVkUmVjdGFuZ2xlOiByZXF1aXJlKCcuL3NoYXBlcy9Sb3VuZGVkUmVjdGFuZ2xlJylcbn07XG4iLCJ2YXIgUmVjdGFuZ2xlID0gcmVxdWlyZSgnLi9SZWN0YW5nbGUnKSxcbiAgICBDT05TVCA9IHJlcXVpcmUoJy4uLy4uL2NvbnN0Jyk7XG5cbi8qKlxuICogVGhlIENpcmNsZSBvYmplY3QgY2FuIGJlIHVzZWQgdG8gc3BlY2lmeSBhIGhpdCBhcmVhIGZvciBkaXNwbGF5T2JqZWN0c1xuICpcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqIEBwYXJhbSB4IHtudW1iZXJ9IFRoZSBYIGNvb3JkaW5hdGUgb2YgdGhlIGNlbnRlciBvZiB0aGlzIGNpcmNsZVxuICogQHBhcmFtIHkge251bWJlcn0gVGhlIFkgY29vcmRpbmF0ZSBvZiB0aGUgY2VudGVyIG9mIHRoaXMgY2lyY2xlXG4gKiBAcGFyYW0gcmFkaXVzIHtudW1iZXJ9IFRoZSByYWRpdXMgb2YgdGhlIGNpcmNsZVxuICovXG5mdW5jdGlvbiBDaXJjbGUoeCwgeSwgcmFkaXVzKVxue1xuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAwXG4gICAgICovXG4gICAgdGhpcy54ID0geCB8fCAwO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDBcbiAgICAgKi9cbiAgICB0aGlzLnkgPSB5IHx8IDA7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMFxuICAgICAqL1xuICAgIHRoaXMucmFkaXVzID0gcmFkaXVzIHx8IDA7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgdHlwZSBvZiB0aGUgb2JqZWN0LCBtYWlubHkgdXNlZCB0byBhdm9pZCBgaW5zdGFuY2VvZmAgY2hlY2tzXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy50eXBlID0gQ09OU1QuU0hBUEVTLkNJUkM7XG59XG5cbkNpcmNsZS5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBDaXJjbGU7XG5tb2R1bGUuZXhwb3J0cyA9IENpcmNsZTtcblxuLyoqXG4gKiBDcmVhdGVzIGEgY2xvbmUgb2YgdGhpcyBDaXJjbGUgaW5zdGFuY2VcbiAqXG4gKiBAcmV0dXJuIHtQSVhJLkNpcmNsZX0gYSBjb3B5IG9mIHRoZSBDaXJjbGVcbiAqL1xuQ2lyY2xlLnByb3RvdHlwZS5jbG9uZSA9IGZ1bmN0aW9uICgpXG57XG4gICAgcmV0dXJuIG5ldyBDaXJjbGUodGhpcy54LCB0aGlzLnksIHRoaXMucmFkaXVzKTtcbn07XG5cbi8qKlxuICogQ2hlY2tzIHdoZXRoZXIgdGhlIHggYW5kIHkgY29vcmRpbmF0ZXMgZ2l2ZW4gYXJlIGNvbnRhaW5lZCB3aXRoaW4gdGhpcyBjaXJjbGVcbiAqXG4gKiBAcGFyYW0geCB7bnVtYmVyfSBUaGUgWCBjb29yZGluYXRlIG9mIHRoZSBwb2ludCB0byB0ZXN0XG4gKiBAcGFyYW0geSB7bnVtYmVyfSBUaGUgWSBjb29yZGluYXRlIG9mIHRoZSBwb2ludCB0byB0ZXN0XG4gKiBAcmV0dXJuIHtib29sZWFufSBXaGV0aGVyIHRoZSB4L3kgY29vcmRpbmF0ZXMgYXJlIHdpdGhpbiB0aGlzIENpcmNsZVxuICovXG5DaXJjbGUucHJvdG90eXBlLmNvbnRhaW5zID0gZnVuY3Rpb24gKHgsIHkpXG57XG4gICAgaWYgKHRoaXMucmFkaXVzIDw9IDApXG4gICAge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgdmFyIGR4ID0gKHRoaXMueCAtIHgpLFxuICAgICAgICBkeSA9ICh0aGlzLnkgLSB5KSxcbiAgICAgICAgcjIgPSB0aGlzLnJhZGl1cyAqIHRoaXMucmFkaXVzO1xuXG4gICAgZHggKj0gZHg7XG4gICAgZHkgKj0gZHk7XG5cbiAgICByZXR1cm4gKGR4ICsgZHkgPD0gcjIpO1xufTtcblxuLyoqXG4qIFJldHVybnMgdGhlIGZyYW1pbmcgcmVjdGFuZ2xlIG9mIHRoZSBjaXJjbGUgYXMgYSBSZWN0YW5nbGUgb2JqZWN0XG4qXG4qIEByZXR1cm4ge1BJWEkuUmVjdGFuZ2xlfSB0aGUgZnJhbWluZyByZWN0YW5nbGVcbiovXG5DaXJjbGUucHJvdG90eXBlLmdldEJvdW5kcyA9IGZ1bmN0aW9uICgpXG57XG4gICAgcmV0dXJuIG5ldyBSZWN0YW5nbGUodGhpcy54IC0gdGhpcy5yYWRpdXMsIHRoaXMueSAtIHRoaXMucmFkaXVzLCB0aGlzLnJhZGl1cyAqIDIsIHRoaXMucmFkaXVzICogMik7XG59O1xuIiwidmFyIFJlY3RhbmdsZSA9IHJlcXVpcmUoJy4vUmVjdGFuZ2xlJyksXG4gICAgQ09OU1QgPSByZXF1aXJlKCcuLi8uLi9jb25zdCcpO1xuXG4vKipcbiAqIFRoZSBFbGxpcHNlIG9iamVjdCBjYW4gYmUgdXNlZCB0byBzcGVjaWZ5IGEgaGl0IGFyZWEgZm9yIGRpc3BsYXlPYmplY3RzXG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIHgge251bWJlcn0gVGhlIFggY29vcmRpbmF0ZSBvZiB0aGUgY2VudGVyIG9mIHRoZSBlbGxpcHNlXG4gKiBAcGFyYW0geSB7bnVtYmVyfSBUaGUgWSBjb29yZGluYXRlIG9mIHRoZSBjZW50ZXIgb2YgdGhlIGVsbGlwc2VcbiAqIEBwYXJhbSB3aWR0aCB7bnVtYmVyfSBUaGUgaGFsZiB3aWR0aCBvZiB0aGlzIGVsbGlwc2VcbiAqIEBwYXJhbSBoZWlnaHQge251bWJlcn0gVGhlIGhhbGYgaGVpZ2h0IG9mIHRoaXMgZWxsaXBzZVxuICovXG5mdW5jdGlvbiBFbGxpcHNlKHgsIHksIHdpZHRoLCBoZWlnaHQpXG57XG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDBcbiAgICAgKi9cbiAgICB0aGlzLnggPSB4IHx8IDA7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMFxuICAgICAqL1xuICAgIHRoaXMueSA9IHkgfHwgMDtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAwXG4gICAgICovXG4gICAgdGhpcy53aWR0aCA9IHdpZHRoIHx8IDA7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMFxuICAgICAqL1xuICAgIHRoaXMuaGVpZ2h0ID0gaGVpZ2h0IHx8IDA7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgdHlwZSBvZiB0aGUgb2JqZWN0LCBtYWlubHkgdXNlZCB0byBhdm9pZCBgaW5zdGFuY2VvZmAgY2hlY2tzXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy50eXBlID0gQ09OU1QuU0hBUEVTLkVMSVA7XG59XG5cbkVsbGlwc2UucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gRWxsaXBzZTtcbm1vZHVsZS5leHBvcnRzID0gRWxsaXBzZTtcblxuLyoqXG4gKiBDcmVhdGVzIGEgY2xvbmUgb2YgdGhpcyBFbGxpcHNlIGluc3RhbmNlXG4gKlxuICogQHJldHVybiB7UElYSS5FbGxpcHNlfSBhIGNvcHkgb2YgdGhlIGVsbGlwc2VcbiAqL1xuRWxsaXBzZS5wcm90b3R5cGUuY2xvbmUgPSBmdW5jdGlvbiAoKVxue1xuICAgIHJldHVybiBuZXcgRWxsaXBzZSh0aGlzLngsIHRoaXMueSwgdGhpcy53aWR0aCwgdGhpcy5oZWlnaHQpO1xufTtcblxuLyoqXG4gKiBDaGVja3Mgd2hldGhlciB0aGUgeCBhbmQgeSBjb29yZGluYXRlcyBnaXZlbiBhcmUgY29udGFpbmVkIHdpdGhpbiB0aGlzIGVsbGlwc2VcbiAqXG4gKiBAcGFyYW0geCB7bnVtYmVyfSBUaGUgWCBjb29yZGluYXRlIG9mIHRoZSBwb2ludCB0byB0ZXN0XG4gKiBAcGFyYW0geSB7bnVtYmVyfSBUaGUgWSBjb29yZGluYXRlIG9mIHRoZSBwb2ludCB0byB0ZXN0XG4gKiBAcmV0dXJuIHtib29sZWFufSBXaGV0aGVyIHRoZSB4L3kgY29vcmRzIGFyZSB3aXRoaW4gdGhpcyBlbGxpcHNlXG4gKi9cbkVsbGlwc2UucHJvdG90eXBlLmNvbnRhaW5zID0gZnVuY3Rpb24gKHgsIHkpXG57XG4gICAgaWYgKHRoaXMud2lkdGggPD0gMCB8fCB0aGlzLmhlaWdodCA8PSAwKVxuICAgIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIC8vbm9ybWFsaXplIHRoZSBjb29yZHMgdG8gYW4gZWxsaXBzZSB3aXRoIGNlbnRlciAwLDBcbiAgICB2YXIgbm9ybXggPSAoKHggLSB0aGlzLngpIC8gdGhpcy53aWR0aCksXG4gICAgICAgIG5vcm15ID0gKCh5IC0gdGhpcy55KSAvIHRoaXMuaGVpZ2h0KTtcblxuICAgIG5vcm14ICo9IG5vcm14O1xuICAgIG5vcm15ICo9IG5vcm15O1xuXG4gICAgcmV0dXJuIChub3JteCArIG5vcm15IDw9IDEpO1xufTtcblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBmcmFtaW5nIHJlY3RhbmdsZSBvZiB0aGUgZWxsaXBzZSBhcyBhIFJlY3RhbmdsZSBvYmplY3RcbiAqXG4gKiBAcmV0dXJuIHtQSVhJLlJlY3RhbmdsZX0gdGhlIGZyYW1pbmcgcmVjdGFuZ2xlXG4gKi9cbkVsbGlwc2UucHJvdG90eXBlLmdldEJvdW5kcyA9IGZ1bmN0aW9uICgpXG57XG4gICAgcmV0dXJuIG5ldyBSZWN0YW5nbGUodGhpcy54IC0gdGhpcy53aWR0aCwgdGhpcy55IC0gdGhpcy5oZWlnaHQsIHRoaXMud2lkdGgsIHRoaXMuaGVpZ2h0KTtcbn07XG4iLCJ2YXIgUG9pbnQgPSByZXF1aXJlKCcuLi9Qb2ludCcpLFxuICAgIENPTlNUID0gcmVxdWlyZSgnLi4vLi4vY29uc3QnKTtcblxuLyoqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gcG9pbnRzIHtQSVhJLlBvaW50W118bnVtYmVyW118Li4uUElYSS5Qb2ludHwuLi5udW1iZXJ9IFRoaXMgY2FuIGJlIGFuIGFycmF5IG9mIFBvaW50cyB0aGF0IGZvcm0gdGhlIHBvbHlnb24sXG4gKiAgICAgIGEgZmxhdCBhcnJheSBvZiBudW1iZXJzIHRoYXQgd2lsbCBiZSBpbnRlcnByZXRlZCBhcyBbeCx5LCB4LHksIC4uLl0sIG9yIHRoZSBhcmd1bWVudHMgcGFzc2VkIGNhbiBiZVxuICogICAgICBhbGwgdGhlIHBvaW50cyBvZiB0aGUgcG9seWdvbiBlLmcuIGBuZXcgUElYSS5Qb2x5Z29uKG5ldyBQSVhJLlBvaW50KCksIG5ldyBQSVhJLlBvaW50KCksIC4uLilgLCBvciB0aGVcbiAqICAgICAgYXJndW1lbnRzIHBhc3NlZCBjYW4gYmUgZmxhdCB4LHkgdmFsdWVzIGUuZy4gYG5ldyBQb2x5Z29uKHgseSwgeCx5LCB4LHksIC4uLilgIHdoZXJlIGB4YCBhbmQgYHlgIGFyZVxuICogICAgICBOdW1iZXJzLlxuICovXG5mdW5jdGlvbiBQb2x5Z29uKHBvaW50c18pXG57XG4gICAgLy8gcHJldmVudHMgYW4gYXJndW1lbnQgYXNzaWdubWVudCBkZW9wdFxuICAgIC8vIHNlZSBzZWN0aW9uIDMuMTogaHR0cHM6Ly9naXRodWIuY29tL3BldGthYW50b25vdi9ibHVlYmlyZC93aWtpL09wdGltaXphdGlvbi1raWxsZXJzIzMtbWFuYWdpbmctYXJndW1lbnRzXG4gICAgdmFyIHBvaW50cyA9IHBvaW50c187XG5cbiAgICAvL2lmIHBvaW50cyBpc24ndCBhbiBhcnJheSwgdXNlIGFyZ3VtZW50cyBhcyB0aGUgYXJyYXlcbiAgICBpZiAoIUFycmF5LmlzQXJyYXkocG9pbnRzKSlcbiAgICB7XG4gICAgICAgIC8vIHByZXZlbnRzIGFuIGFyZ3VtZW50IGxlYWsgZGVvcHRcbiAgICAgICAgLy8gc2VlIHNlY3Rpb24gMy4yOiBodHRwczovL2dpdGh1Yi5jb20vcGV0a2FhbnRvbm92L2JsdWViaXJkL3dpa2kvT3B0aW1pemF0aW9uLWtpbGxlcnMjMy1tYW5hZ2luZy1hcmd1bWVudHNcbiAgICAgICAgcG9pbnRzID0gbmV3IEFycmF5KGFyZ3VtZW50cy5sZW5ndGgpO1xuXG4gICAgICAgIGZvciAodmFyIGEgPSAwOyBhIDwgcG9pbnRzLmxlbmd0aDsgKythKSB7XG4gICAgICAgICAgICBwb2ludHNbYV0gPSBhcmd1bWVudHNbYV07XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBpZiB0aGlzIGlzIGFuIGFycmF5IG9mIHBvaW50cywgY29udmVydCBpdCB0byBhIGZsYXQgYXJyYXkgb2YgbnVtYmVyc1xuICAgIGlmIChwb2ludHNbMF0gaW5zdGFuY2VvZiBQb2ludClcbiAgICB7XG4gICAgICAgIHZhciBwID0gW107XG4gICAgICAgIGZvciAodmFyIGkgPSAwLCBpbCA9IHBvaW50cy5sZW5ndGg7IGkgPCBpbDsgaSsrKVxuICAgICAgICB7XG4gICAgICAgICAgICBwLnB1c2gocG9pbnRzW2ldLngsIHBvaW50c1tpXS55KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHBvaW50cyA9IHA7XG4gICAgfVxuXG4gICAgdGhpcy5jbG9zZWQgPSB0cnVlO1xuXG4gICAgLyoqXG4gICAgICogQW4gYXJyYXkgb2YgdGhlIHBvaW50cyBvZiB0aGlzIHBvbHlnb25cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcltdfVxuICAgICAqL1xuICAgIHRoaXMucG9pbnRzID0gcG9pbnRzO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHR5cGUgb2YgdGhlIG9iamVjdCwgbWFpbmx5IHVzZWQgdG8gYXZvaWQgYGluc3RhbmNlb2ZgIGNoZWNrc1xuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMudHlwZSA9IENPTlNULlNIQVBFUy5QT0xZO1xufVxuXG5Qb2x5Z29uLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFBvbHlnb247XG5tb2R1bGUuZXhwb3J0cyA9IFBvbHlnb247XG5cbi8qKlxuICogQ3JlYXRlcyBhIGNsb25lIG9mIHRoaXMgcG9seWdvblxuICpcbiAqIEByZXR1cm4ge1BJWEkuUG9seWdvbn0gYSBjb3B5IG9mIHRoZSBwb2x5Z29uXG4gKi9cblBvbHlnb24ucHJvdG90eXBlLmNsb25lID0gZnVuY3Rpb24gKClcbntcbiAgICByZXR1cm4gbmV3IFBvbHlnb24odGhpcy5wb2ludHMuc2xpY2UoKSk7XG59O1xuXG4vKipcbiAqIENoZWNrcyB3aGV0aGVyIHRoZSB4IGFuZCB5IGNvb3JkaW5hdGVzIHBhc3NlZCB0byB0aGlzIGZ1bmN0aW9uIGFyZSBjb250YWluZWQgd2l0aGluIHRoaXMgcG9seWdvblxuICpcbiAqIEBwYXJhbSB4IHtudW1iZXJ9IFRoZSBYIGNvb3JkaW5hdGUgb2YgdGhlIHBvaW50IHRvIHRlc3RcbiAqIEBwYXJhbSB5IHtudW1iZXJ9IFRoZSBZIGNvb3JkaW5hdGUgb2YgdGhlIHBvaW50IHRvIHRlc3RcbiAqIEByZXR1cm4ge2Jvb2xlYW59IFdoZXRoZXIgdGhlIHgveSBjb29yZGluYXRlcyBhcmUgd2l0aGluIHRoaXMgcG9seWdvblxuICovXG5Qb2x5Z29uLnByb3RvdHlwZS5jb250YWlucyA9IGZ1bmN0aW9uICh4LCB5KVxue1xuICAgIHZhciBpbnNpZGUgPSBmYWxzZTtcblxuICAgIC8vIHVzZSBzb21lIHJheWNhc3RpbmcgdG8gdGVzdCBoaXRzXG4gICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL3N1YnN0YWNrL3BvaW50LWluLXBvbHlnb24vYmxvYi9tYXN0ZXIvaW5kZXguanNcbiAgICB2YXIgbGVuZ3RoID0gdGhpcy5wb2ludHMubGVuZ3RoIC8gMjtcblxuICAgIGZvciAodmFyIGkgPSAwLCBqID0gbGVuZ3RoIC0gMTsgaSA8IGxlbmd0aDsgaiA9IGkrKylcbiAgICB7XG4gICAgICAgIHZhciB4aSA9IHRoaXMucG9pbnRzW2kgKiAyXSwgeWkgPSB0aGlzLnBvaW50c1tpICogMiArIDFdLFxuICAgICAgICAgICAgeGogPSB0aGlzLnBvaW50c1tqICogMl0sIHlqID0gdGhpcy5wb2ludHNbaiAqIDIgKyAxXSxcbiAgICAgICAgICAgIGludGVyc2VjdCA9ICgoeWkgPiB5KSAhPT0gKHlqID4geSkpICYmICh4IDwgKHhqIC0geGkpICogKHkgLSB5aSkgLyAoeWogLSB5aSkgKyB4aSk7XG5cbiAgICAgICAgaWYgKGludGVyc2VjdClcbiAgICAgICAge1xuICAgICAgICAgICAgaW5zaWRlID0gIWluc2lkZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBpbnNpZGU7XG59O1xuIiwidmFyIENPTlNUID0gcmVxdWlyZSgnLi4vLi4vY29uc3QnKTtcblxuLyoqXG4gKiB0aGUgUmVjdGFuZ2xlIG9iamVjdCBpcyBhbiBhcmVhIGRlZmluZWQgYnkgaXRzIHBvc2l0aW9uLCBhcyBpbmRpY2F0ZWQgYnkgaXRzIHRvcC1sZWZ0IGNvcm5lciBwb2ludCAoeCwgeSkgYW5kIGJ5IGl0cyB3aWR0aCBhbmQgaXRzIGhlaWdodC5cbiAqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0geCB7bnVtYmVyfSBUaGUgWCBjb29yZGluYXRlIG9mIHRoZSB1cHBlci1sZWZ0IGNvcm5lciBvZiB0aGUgcmVjdGFuZ2xlXG4gKiBAcGFyYW0geSB7bnVtYmVyfSBUaGUgWSBjb29yZGluYXRlIG9mIHRoZSB1cHBlci1sZWZ0IGNvcm5lciBvZiB0aGUgcmVjdGFuZ2xlXG4gKiBAcGFyYW0gd2lkdGgge251bWJlcn0gVGhlIG92ZXJhbGwgd2lkdGggb2YgdGhpcyByZWN0YW5nbGVcbiAqIEBwYXJhbSBoZWlnaHQge251bWJlcn0gVGhlIG92ZXJhbGwgaGVpZ2h0IG9mIHRoaXMgcmVjdGFuZ2xlXG4gKi9cbmZ1bmN0aW9uIFJlY3RhbmdsZSh4LCB5LCB3aWR0aCwgaGVpZ2h0KVxue1xuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAwXG4gICAgICovXG4gICAgdGhpcy54ID0geCB8fCAwO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDBcbiAgICAgKi9cbiAgICB0aGlzLnkgPSB5IHx8IDA7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMFxuICAgICAqL1xuICAgIHRoaXMud2lkdGggPSB3aWR0aCB8fCAwO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDBcbiAgICAgKi9cbiAgICB0aGlzLmhlaWdodCA9IGhlaWdodCB8fCAwO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHR5cGUgb2YgdGhlIG9iamVjdCwgbWFpbmx5IHVzZWQgdG8gYXZvaWQgYGluc3RhbmNlb2ZgIGNoZWNrc1xuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMudHlwZSA9IENPTlNULlNIQVBFUy5SRUNUO1xufVxuXG5SZWN0YW5nbGUucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gUmVjdGFuZ2xlO1xubW9kdWxlLmV4cG9ydHMgPSBSZWN0YW5nbGU7XG5cbi8qKlxuICogQSBjb25zdGFudCBlbXB0eSByZWN0YW5nbGUuXG4gKlxuICogQHN0YXRpY1xuICogQGNvbnN0YW50XG4gKi9cblJlY3RhbmdsZS5FTVBUWSA9IG5ldyBSZWN0YW5nbGUoMCwgMCwgMCwgMCk7XG5cblxuLyoqXG4gKiBDcmVhdGVzIGEgY2xvbmUgb2YgdGhpcyBSZWN0YW5nbGVcbiAqXG4gKiBAcmV0dXJuIHtQSVhJLlJlY3RhbmdsZX0gYSBjb3B5IG9mIHRoZSByZWN0YW5nbGVcbiAqL1xuUmVjdGFuZ2xlLnByb3RvdHlwZS5jbG9uZSA9IGZ1bmN0aW9uICgpXG57XG4gICAgcmV0dXJuIG5ldyBSZWN0YW5nbGUodGhpcy54LCB0aGlzLnksIHRoaXMud2lkdGgsIHRoaXMuaGVpZ2h0KTtcbn07XG5cbi8qKlxuICogQ2hlY2tzIHdoZXRoZXIgdGhlIHggYW5kIHkgY29vcmRpbmF0ZXMgZ2l2ZW4gYXJlIGNvbnRhaW5lZCB3aXRoaW4gdGhpcyBSZWN0YW5nbGVcbiAqXG4gKiBAcGFyYW0geCB7bnVtYmVyfSBUaGUgWCBjb29yZGluYXRlIG9mIHRoZSBwb2ludCB0byB0ZXN0XG4gKiBAcGFyYW0geSB7bnVtYmVyfSBUaGUgWSBjb29yZGluYXRlIG9mIHRoZSBwb2ludCB0byB0ZXN0XG4gKiBAcmV0dXJuIHtib29sZWFufSBXaGV0aGVyIHRoZSB4L3kgY29vcmRpbmF0ZXMgYXJlIHdpdGhpbiB0aGlzIFJlY3RhbmdsZVxuICovXG5SZWN0YW5nbGUucHJvdG90eXBlLmNvbnRhaW5zID0gZnVuY3Rpb24gKHgsIHkpXG57XG4gICAgaWYgKHRoaXMud2lkdGggPD0gMCB8fCB0aGlzLmhlaWdodCA8PSAwKVxuICAgIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGlmICh4ID49IHRoaXMueCAmJiB4IDwgdGhpcy54ICsgdGhpcy53aWR0aClcbiAgICB7XG4gICAgICAgIGlmICh5ID49IHRoaXMueSAmJiB5IDwgdGhpcy55ICsgdGhpcy5oZWlnaHQpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xufTtcbiIsInZhciBDT05TVCA9IHJlcXVpcmUoJy4uLy4uL2NvbnN0Jyk7XG5cbi8qKlxuICogVGhlIFJvdW5kZWQgUmVjdGFuZ2xlIG9iamVjdCBpcyBhbiBhcmVhIHRoYXQgaGFzIG5pY2Ugcm91bmRlZCBjb3JuZXJzLCBhcyBpbmRpY2F0ZWQgYnkgaXRzIHRvcC1sZWZ0IGNvcm5lciBwb2ludCAoeCwgeSkgYW5kIGJ5IGl0cyB3aWR0aCBhbmQgaXRzIGhlaWdodCBhbmQgaXRzIHJhZGl1cy5cbiAqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0geCB7bnVtYmVyfSBUaGUgWCBjb29yZGluYXRlIG9mIHRoZSB1cHBlci1sZWZ0IGNvcm5lciBvZiB0aGUgcm91bmRlZCByZWN0YW5nbGVcbiAqIEBwYXJhbSB5IHtudW1iZXJ9IFRoZSBZIGNvb3JkaW5hdGUgb2YgdGhlIHVwcGVyLWxlZnQgY29ybmVyIG9mIHRoZSByb3VuZGVkIHJlY3RhbmdsZVxuICogQHBhcmFtIHdpZHRoIHtudW1iZXJ9IFRoZSBvdmVyYWxsIHdpZHRoIG9mIHRoaXMgcm91bmRlZCByZWN0YW5nbGVcbiAqIEBwYXJhbSBoZWlnaHQge251bWJlcn0gVGhlIG92ZXJhbGwgaGVpZ2h0IG9mIHRoaXMgcm91bmRlZCByZWN0YW5nbGVcbiAqIEBwYXJhbSByYWRpdXMge251bWJlcn0gQ29udHJvbHMgdGhlIHJhZGl1cyBvZiB0aGUgcm91bmRlZCBjb3JuZXJzXG4gKi9cbmZ1bmN0aW9uIFJvdW5kZWRSZWN0YW5nbGUoeCwgeSwgd2lkdGgsIGhlaWdodCwgcmFkaXVzKVxue1xuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAwXG4gICAgICovXG4gICAgdGhpcy54ID0geCB8fCAwO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDBcbiAgICAgKi9cbiAgICB0aGlzLnkgPSB5IHx8IDA7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMFxuICAgICAqL1xuICAgIHRoaXMud2lkdGggPSB3aWR0aCB8fCAwO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDBcbiAgICAgKi9cbiAgICB0aGlzLmhlaWdodCA9IGhlaWdodCB8fCAwO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDIwXG4gICAgICovXG4gICAgdGhpcy5yYWRpdXMgPSByYWRpdXMgfHwgMjA7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgdHlwZSBvZiB0aGUgb2JqZWN0LCBtYWlubHkgdXNlZCB0byBhdm9pZCBgaW5zdGFuY2VvZmAgY2hlY2tzXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy50eXBlID0gQ09OU1QuU0hBUEVTLlJSRUM7XG59XG5cblJvdW5kZWRSZWN0YW5nbGUucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gUm91bmRlZFJlY3RhbmdsZTtcbm1vZHVsZS5leHBvcnRzID0gUm91bmRlZFJlY3RhbmdsZTtcblxuLyoqXG4gKiBDcmVhdGVzIGEgY2xvbmUgb2YgdGhpcyBSb3VuZGVkIFJlY3RhbmdsZVxuICpcbiAqIEByZXR1cm4ge1BJWEkuUm91bmRlZFJlY3RhbmdsZX0gYSBjb3B5IG9mIHRoZSByb3VuZGVkIHJlY3RhbmdsZVxuICovXG5Sb3VuZGVkUmVjdGFuZ2xlLnByb3RvdHlwZS5jbG9uZSA9IGZ1bmN0aW9uICgpXG57XG4gICAgcmV0dXJuIG5ldyBSb3VuZGVkUmVjdGFuZ2xlKHRoaXMueCwgdGhpcy55LCB0aGlzLndpZHRoLCB0aGlzLmhlaWdodCwgdGhpcy5yYWRpdXMpO1xufTtcblxuLyoqXG4gKiBDaGVja3Mgd2hldGhlciB0aGUgeCBhbmQgeSBjb29yZGluYXRlcyBnaXZlbiBhcmUgY29udGFpbmVkIHdpdGhpbiB0aGlzIFJvdW5kZWQgUmVjdGFuZ2xlXG4gKlxuICogQHBhcmFtIHgge251bWJlcn0gVGhlIFggY29vcmRpbmF0ZSBvZiB0aGUgcG9pbnQgdG8gdGVzdFxuICogQHBhcmFtIHkge251bWJlcn0gVGhlIFkgY29vcmRpbmF0ZSBvZiB0aGUgcG9pbnQgdG8gdGVzdFxuICogQHJldHVybiB7Ym9vbGVhbn0gV2hldGhlciB0aGUgeC95IGNvb3JkaW5hdGVzIGFyZSB3aXRoaW4gdGhpcyBSb3VuZGVkIFJlY3RhbmdsZVxuICovXG5Sb3VuZGVkUmVjdGFuZ2xlLnByb3RvdHlwZS5jb250YWlucyA9IGZ1bmN0aW9uICh4LCB5KVxue1xuICAgIGlmICh0aGlzLndpZHRoIDw9IDAgfHwgdGhpcy5oZWlnaHQgPD0gMClcbiAgICB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBpZiAoeCA+PSB0aGlzLnggJiYgeCA8PSB0aGlzLnggKyB0aGlzLndpZHRoKVxuICAgIHtcbiAgICAgICAgaWYgKHkgPj0gdGhpcy55ICYmIHkgPD0gdGhpcy55ICsgdGhpcy5oZWlnaHQpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xufTtcbiIsInZhciBDb250YWluZXIgPSByZXF1aXJlKCcuLi9kaXNwbGF5L0NvbnRhaW5lcicpLFxuICAgIENPTlNUID0gcmVxdWlyZSgnLi4vY29uc3QnKTtcblxuLyoqXG4gKiBUaGUgUGFydGljbGVDb250YWluZXIgY2xhc3MgaXMgYSByZWFsbHkgZmFzdCB2ZXJzaW9uIG9mIHRoZSBDb250YWluZXIgYnVpbHQgc29sZWx5IGZvciBzcGVlZCxcbiAqIHNvIHVzZSB3aGVuIHlvdSBuZWVkIGEgbG90IG9mIHNwcml0ZXMgb3IgcGFydGljbGVzLiBUaGUgdHJhZGVvZmYgb2YgdGhlIFBhcnRpY2xlQ29udGFpbmVyIGlzIHRoYXQgYWR2YW5jZWRcbiAqIGZ1bmN0aW9uYWxpdHkgd2lsbCBub3Qgd29yay4gUGFydGljbGVDb250YWluZXIgaW1wbGVtZW50cyBvbmx5IHRoZSBiYXNpYyBvYmplY3QgdHJhbnNmb3JtIChwb3NpdGlvbiwgc2NhbGUsIHJvdGF0aW9uKS5cbiAqIEFueSBvdGhlciBmdW5jdGlvbmFsaXR5IGxpa2UgdGludGluZywgbWFza2luZywgZXRjIHdpbGwgbm90IHdvcmsgb24gc3ByaXRlcyBpbiB0aGlzIGJhdGNoLlxuICpcbiAqIEl0J3MgZXh0cmVtZWx5IGVhc3kgdG8gdXNlIDpcbiAqXG4gKiBgYGBqc1xuICogdmFyIGNvbnRhaW5lciA9IG5ldyBQYXJ0aWNsZUNvbnRhaW5lcigpO1xuICpcbiAqIGZvciAodmFyIGkgPSAwOyBpIDwgMTAwOyArK2kpXG4gKiB7XG4gKiAgICAgdmFyIHNwcml0ZSA9IG5ldyBQSVhJLlNwcml0ZS5mcm9tSW1hZ2UoXCJteUltYWdlLnBuZ1wiKTtcbiAqICAgICBjb250YWluZXIuYWRkQ2hpbGQoc3ByaXRlKTtcbiAqIH1cbiAqIGBgYFxuICpcbiAqIEFuZCBoZXJlIHlvdSBoYXZlIGEgaHVuZHJlZCBzcHJpdGVzIHRoYXQgd2lsbCBiZSByZW5kZXJlciBhdCB0aGUgc3BlZWQgb2YgbGlnaHQuXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLkNvbnRhaW5lclxuICogQG1lbWJlcm9mIFBJWElcbiAqIEBwYXJhbSBbbWF4U2l6ZT0xNTAwMF0ge251bWJlcn0gVGhlIG1heGltdW0gbnVtYmVyIG9mIHBhcnRpY2xlcyB0aGF0IGNhbiBiZSByZW5kZXJlciBieSB0aGUgY29udGFpbmVyLlxuICogQHBhcmFtIFtwcm9wZXJ0aWVzXSB7b2JqZWN0fSBUaGUgcHJvcGVydGllcyBvZiBjaGlsZHJlbiB0aGF0IHNob3VsZCBiZSB1cGxvYWRlZCB0byB0aGUgZ3B1IGFuZCBhcHBsaWVkLlxuICogQHBhcmFtIFtwcm9wZXJ0aWVzLnNjYWxlPWZhbHNlXSB7Ym9vbGVhbn0gV2hlbiB0cnVlLCBzY2FsZSBiZSB1cGxvYWRlZCBhbmQgYXBwbGllZC5cbiAqIEBwYXJhbSBbcHJvcGVydGllcy5wb3NpdGlvbj10cnVlXSB7Ym9vbGVhbn0gV2hlbiB0cnVlLCBwb3NpdGlvbiBiZSB1cGxvYWRlZCBhbmQgYXBwbGllZC5cbiAqIEBwYXJhbSBbcHJvcGVydGllcy5yb3RhdGlvbj1mYWxzZV0ge2Jvb2xlYW59IFdoZW4gdHJ1ZSwgcm90YXRpb24gYmUgdXBsb2FkZWQgYW5kIGFwcGxpZWQuXG4gKiBAcGFyYW0gW3Byb3BlcnRpZXMudXZzPWZhbHNlXSB7Ym9vbGVhbn0gV2hlbiB0cnVlLCB1dnMgYmUgdXBsb2FkZWQgYW5kIGFwcGxpZWQuXG4gKiBAcGFyYW0gW3Byb3BlcnRpZXMuYWxwaGE9ZmFsc2VdIHtib29sZWFufSBXaGVuIHRydWUsIGFscGhhIGJlIHVwbG9hZGVkIGFuZCBhcHBsaWVkLlxuICogQHBhcmFtIFtiYXRjaFNpemU9MTUwMDBdIHtudW1iZXJ9IE51bWJlciBvZiBwYXJ0aWNsZXMgcGVyIGJhdGNoLlxuICovXG5mdW5jdGlvbiBQYXJ0aWNsZUNvbnRhaW5lcihtYXhTaXplLCBwcm9wZXJ0aWVzLCBiYXRjaFNpemUpXG57XG4gICAgQ29udGFpbmVyLmNhbGwodGhpcyk7XG5cbiAgICBiYXRjaFNpemUgPSBiYXRjaFNpemUgfHwgMTUwMDA7IC8vQ09OU1QuU1BSSVRFX0JBVENIX1NJWkU7IC8vIDIwMDAgaXMgYSBuaWNlIGJhbGFuY2UgYmV0d2VlbiBtb2JpbGUgLyBkZXNrdG9wXG4gICAgbWF4U2l6ZSA9IG1heFNpemUgfHwgMTUwMDA7XG5cbiAgICAvLyBNYWtpbmcgc3VyZSB0aGUgYmF0Y2ggc2l6ZSBpcyB2YWxpZFxuICAgIC8vIDY1NTM1IGlzIG1heCB2ZXJ0ZXggaW5kZXggaW4gdGhlIGluZGV4IGJ1ZmZlciAoc2VlIFBhcnRpY2xlUmVuZGVyZXIpXG4gICAgLy8gc28gbWF4IG51bWJlciBvZiBwYXJ0aWNsZXMgaXMgNjU1MzYgLyA0ID0gMTYzODRcbiAgICB2YXIgbWF4QmF0Y2hTaXplID0gMTYzODQ7XG4gICAgaWYgKGJhdGNoU2l6ZSA+IG1heEJhdGNoU2l6ZSkge1xuICAgICAgICBiYXRjaFNpemUgPSBtYXhCYXRjaFNpemU7XG4gICAgfVxuXG4gICAgaWYgKGJhdGNoU2l6ZSA+IG1heFNpemUpIHtcbiAgICAgICAgYmF0Y2hTaXplID0gbWF4U2l6ZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTZXQgcHJvcGVydGllcyB0byBiZSBkeW5hbWljICh0cnVlKSAvIHN0YXRpYyAoZmFsc2UpXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFuW119XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9wcm9wZXJ0aWVzID0gW2ZhbHNlLCB0cnVlLCBmYWxzZSwgZmFsc2UsIGZhbHNlXTtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX21heFNpemUgPSBtYXhTaXplO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fYmF0Y2hTaXplID0gYmF0Y2hTaXplO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7V2ViR0xCdWZmZXJ9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9idWZmZXJzID0gbnVsbDtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX2J1ZmZlclRvVXBkYXRlID0gMDtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICpcbiAgICAgKi9cbiAgICB0aGlzLmludGVyYWN0aXZlQ2hpbGRyZW4gPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBibGVuZCBtb2RlIHRvIGJlIGFwcGxpZWQgdG8gdGhlIHNwcml0ZS4gQXBwbHkgYSB2YWx1ZSBvZiBgUElYSS5CTEVORF9NT0RFUy5OT1JNQUxgIHRvIHJlc2V0IHRoZSBibGVuZCBtb2RlLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IFBJWEkuQkxFTkRfTU9ERVMuTk9STUFMXG4gICAgICogQHNlZSBQSVhJLkJMRU5EX01PREVTXG4gICAgICovXG4gICAgdGhpcy5ibGVuZE1vZGUgPSBDT05TVC5CTEVORF9NT0RFUy5OT1JNQUw7XG5cbiAgICAvKipcbiAgICAgKiBVc2VkIGZvciBjYW52YXMgcmVuZGVyZXJpbmcuIElmIHRydWUgdGhlbiB0aGUgZWxlbWVudHMgd2lsbCBiZSBwb3NpdGlvbmVkIGF0IHRoZSBuZWFyZXN0IHBpeGVsLiBUaGlzIHByb3ZpZGVzIGEgbmljZSBzcGVlZCBib29zdC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICogQGRlZmF1bHQgdHJ1ZTtcbiAgICAgKi9cbiAgICB0aGlzLnJvdW5kUGl4ZWxzID0gdHJ1ZTtcblxuICAgIHRoaXMuc2V0UHJvcGVydGllcyhwcm9wZXJ0aWVzKTtcbn1cblxuUGFydGljbGVDb250YWluZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShDb250YWluZXIucHJvdG90eXBlKTtcblBhcnRpY2xlQ29udGFpbmVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFBhcnRpY2xlQ29udGFpbmVyO1xubW9kdWxlLmV4cG9ydHMgPSBQYXJ0aWNsZUNvbnRhaW5lcjtcblxuLyoqXG4gKiBTZXRzIHRoZSBwcml2YXRlIHByb3BlcnRpZXMgYXJyYXkgdG8gZHluYW1pYyAvIHN0YXRpYyBiYXNlZCBvbiB0aGUgcGFzc2VkIHByb3BlcnRpZXMgb2JqZWN0XG4gKlxuICogQHBhcmFtIHByb3BlcnRpZXMge29iamVjdH0gVGhlIHByb3BlcnRpZXMgdG8gYmUgdXBsb2FkZWRcbiAqL1xuUGFydGljbGVDb250YWluZXIucHJvdG90eXBlLnNldFByb3BlcnRpZXMgPSBmdW5jdGlvbihwcm9wZXJ0aWVzKVxue1xuICAgIGlmICggcHJvcGVydGllcyApIHtcbiAgICAgICAgdGhpcy5fcHJvcGVydGllc1swXSA9ICdzY2FsZScgaW4gcHJvcGVydGllcyA/ICEhcHJvcGVydGllcy5zY2FsZSA6IHRoaXMuX3Byb3BlcnRpZXNbMF07XG4gICAgICAgIHRoaXMuX3Byb3BlcnRpZXNbMV0gPSAncG9zaXRpb24nIGluIHByb3BlcnRpZXMgPyAhIXByb3BlcnRpZXMucG9zaXRpb24gOiB0aGlzLl9wcm9wZXJ0aWVzWzFdO1xuICAgICAgICB0aGlzLl9wcm9wZXJ0aWVzWzJdID0gJ3JvdGF0aW9uJyBpbiBwcm9wZXJ0aWVzID8gISFwcm9wZXJ0aWVzLnJvdGF0aW9uIDogdGhpcy5fcHJvcGVydGllc1syXTtcbiAgICAgICAgdGhpcy5fcHJvcGVydGllc1szXSA9ICd1dnMnIGluIHByb3BlcnRpZXMgPyAhIXByb3BlcnRpZXMudXZzIDogdGhpcy5fcHJvcGVydGllc1szXTtcbiAgICAgICAgdGhpcy5fcHJvcGVydGllc1s0XSA9ICdhbHBoYScgaW4gcHJvcGVydGllcyA/ICEhcHJvcGVydGllcy5hbHBoYSA6IHRoaXMuX3Byb3BlcnRpZXNbNF07XG4gICAgfVxufTtcblxuLyoqXG4gKiBVcGRhdGVzIHRoZSBvYmplY3QgdHJhbnNmb3JtIGZvciByZW5kZXJpbmdcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5QYXJ0aWNsZUNvbnRhaW5lci5wcm90b3R5cGUudXBkYXRlVHJhbnNmb3JtID0gZnVuY3Rpb24gKClcbntcblxuICAgIC8vIFRPRE8gZG9uJ3QgbmVlZCB0byFcbiAgICB0aGlzLmRpc3BsYXlPYmplY3RVcGRhdGVUcmFuc2Zvcm0oKTtcbiAgICAvLyAgUElYSS5Db250YWluZXIucHJvdG90eXBlLnVwZGF0ZVRyYW5zZm9ybS5jYWxsKCB0aGlzICk7XG59O1xuXG4vKipcbiAqIFJlbmRlcnMgdGhlIGNvbnRhaW5lciB1c2luZyB0aGUgV2ViR0wgcmVuZGVyZXJcbiAqXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcn0gVGhlIHdlYmdsIHJlbmRlcmVyXG4gKiBAcHJpdmF0ZVxuICovXG5QYXJ0aWNsZUNvbnRhaW5lci5wcm90b3R5cGUucmVuZGVyV2ViR0wgPSBmdW5jdGlvbiAocmVuZGVyZXIpXG57XG4gICAgaWYgKCF0aGlzLnZpc2libGUgfHwgdGhpcy53b3JsZEFscGhhIDw9IDAgfHwgIXRoaXMuY2hpbGRyZW4ubGVuZ3RoIHx8ICF0aGlzLnJlbmRlcmFibGUpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgcmVuZGVyZXIuc2V0T2JqZWN0UmVuZGVyZXIoIHJlbmRlcmVyLnBsdWdpbnMucGFydGljbGUgKTtcbiAgICByZW5kZXJlci5wbHVnaW5zLnBhcnRpY2xlLnJlbmRlciggdGhpcyApO1xufTtcblxuLyoqXG4gKiBTZXQgdGhlIGZsYWcgdGhhdCBzdGF0aWMgZGF0YSBzaG91bGQgYmUgdXBkYXRlZCB0byB0cnVlXG4gKlxuICogQHByaXZhdGVcbiAqL1xuUGFydGljbGVDb250YWluZXIucHJvdG90eXBlLm9uQ2hpbGRyZW5DaGFuZ2UgPSBmdW5jdGlvbiAoc21hbGxlc3RDaGlsZEluZGV4KVxue1xuICAgIHZhciBidWZmZXJJbmRleCA9IE1hdGguZmxvb3Ioc21hbGxlc3RDaGlsZEluZGV4IC8gdGhpcy5fYmF0Y2hTaXplKTtcbiAgICBpZiAoYnVmZmVySW5kZXggPCB0aGlzLl9idWZmZXJUb1VwZGF0ZSkge1xuICAgICAgICB0aGlzLl9idWZmZXJUb1VwZGF0ZSA9IGJ1ZmZlckluZGV4O1xuICAgIH1cbn07XG5cbi8qKlxuICogUmVuZGVycyB0aGUgb2JqZWN0IHVzaW5nIHRoZSBDYW52YXMgcmVuZGVyZXJcbiAqXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuQ2FudmFzUmVuZGVyZXJ9IFRoZSBjYW52YXMgcmVuZGVyZXJcbiAqIEBwcml2YXRlXG4gKi9cblBhcnRpY2xlQ29udGFpbmVyLnByb3RvdHlwZS5yZW5kZXJDYW52YXMgPSBmdW5jdGlvbiAocmVuZGVyZXIpXG57XG4gICAgaWYgKCF0aGlzLnZpc2libGUgfHwgdGhpcy53b3JsZEFscGhhIDw9IDAgfHwgIXRoaXMuY2hpbGRyZW4ubGVuZ3RoIHx8ICF0aGlzLnJlbmRlcmFibGUpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFyIGNvbnRleHQgPSByZW5kZXJlci5jb250ZXh0O1xuICAgIHZhciB0cmFuc2Zvcm0gPSB0aGlzLndvcmxkVHJhbnNmb3JtO1xuICAgIHZhciBpc1JvdGF0ZWQgPSB0cnVlO1xuXG4gICAgdmFyIHBvc2l0aW9uWCA9IDA7XG4gICAgdmFyIHBvc2l0aW9uWSA9IDA7XG5cbiAgICB2YXIgZmluYWxXaWR0aCA9IDA7XG4gICAgdmFyIGZpbmFsSGVpZ2h0ID0gMDtcblxuICAgIHZhciBjb21wb3NpdGVPcGVyYXRpb24gPSByZW5kZXJlci5ibGVuZE1vZGVzW3RoaXMuYmxlbmRNb2RlXTtcbiAgICBpZiAoY29tcG9zaXRlT3BlcmF0aW9uICE9PSBjb250ZXh0Lmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbilcbiAgICB7XG4gICAgICAgIGNvbnRleHQuZ2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uID0gY29tcG9zaXRlT3BlcmF0aW9uO1xuICAgIH1cblxuICAgIGNvbnRleHQuZ2xvYmFsQWxwaGEgPSB0aGlzLndvcmxkQWxwaGE7XG5cbiAgICB0aGlzLmRpc3BsYXlPYmplY3RVcGRhdGVUcmFuc2Zvcm0oKTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5jaGlsZHJlbi5sZW5ndGg7ICsraSlcbiAgICB7XG4gICAgICAgIHZhciBjaGlsZCA9IHRoaXMuY2hpbGRyZW5baV07XG5cbiAgICAgICAgaWYgKCFjaGlsZC52aXNpYmxlKVxuICAgICAgICB7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBmcmFtZSA9IGNoaWxkLnRleHR1cmUuZnJhbWU7XG5cbiAgICAgICAgY29udGV4dC5nbG9iYWxBbHBoYSA9IHRoaXMud29ybGRBbHBoYSAqIGNoaWxkLmFscGhhO1xuXG4gICAgICAgIGlmIChjaGlsZC5yb3RhdGlvbiAlIChNYXRoLlBJICogMikgPT09IDApXG4gICAgICAgIHtcbiAgICAgICAgICAgIC8vIHRoaXMgaXMgdGhlIGZhc3Rlc3QgIHdheSB0byBvcHRpbWlzZSEgLSBpZiByb3RhdGlvbiBpcyAwIHRoZW4gd2UgY2FuIGF2b2lkIGFueSBraW5kIG9mIHNldFRyYW5zZm9ybSBjYWxsXG4gICAgICAgICAgICBpZiAoaXNSb3RhdGVkKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGNvbnRleHQuc2V0VHJhbnNmb3JtKFxuICAgICAgICAgICAgICAgICAgICB0cmFuc2Zvcm0uYSxcbiAgICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtLmIsXG4gICAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybS5jLFxuICAgICAgICAgICAgICAgICAgICB0cmFuc2Zvcm0uZCxcbiAgICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtLnR4LFxuICAgICAgICAgICAgICAgICAgICB0cmFuc2Zvcm0udHlcbiAgICAgICAgICAgICAgICApO1xuXG4gICAgICAgICAgICAgICAgaXNSb3RhdGVkID0gZmFsc2U7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHBvc2l0aW9uWCA9ICgoY2hpbGQuYW5jaG9yLngpICogKC1mcmFtZS53aWR0aCAqIGNoaWxkLnNjYWxlLngpICsgY2hpbGQucG9zaXRpb24ueCAgKyAwLjUpO1xuICAgICAgICAgICAgcG9zaXRpb25ZID0gKChjaGlsZC5hbmNob3IueSkgKiAoLWZyYW1lLmhlaWdodCAqIGNoaWxkLnNjYWxlLnkpICsgY2hpbGQucG9zaXRpb24ueSAgKyAwLjUpO1xuXG4gICAgICAgICAgICBmaW5hbFdpZHRoID0gZnJhbWUud2lkdGggKiBjaGlsZC5zY2FsZS54O1xuICAgICAgICAgICAgZmluYWxIZWlnaHQgPSBmcmFtZS5oZWlnaHQgKiBjaGlsZC5zY2FsZS55O1xuXG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgICBpZiAoIWlzUm90YXRlZClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBpc1JvdGF0ZWQgPSB0cnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjaGlsZC5kaXNwbGF5T2JqZWN0VXBkYXRlVHJhbnNmb3JtKCk7XG5cbiAgICAgICAgICAgIHZhciBjaGlsZFRyYW5zZm9ybSA9IGNoaWxkLndvcmxkVHJhbnNmb3JtO1xuXG4gICAgICAgICAgICBpZiAocmVuZGVyZXIucm91bmRQaXhlbHMpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29udGV4dC5zZXRUcmFuc2Zvcm0oXG4gICAgICAgICAgICAgICAgICAgIGNoaWxkVHJhbnNmb3JtLmEsXG4gICAgICAgICAgICAgICAgICAgIGNoaWxkVHJhbnNmb3JtLmIsXG4gICAgICAgICAgICAgICAgICAgIGNoaWxkVHJhbnNmb3JtLmMsXG4gICAgICAgICAgICAgICAgICAgIGNoaWxkVHJhbnNmb3JtLmQsXG4gICAgICAgICAgICAgICAgICAgIGNoaWxkVHJhbnNmb3JtLnR4IHwgMCxcbiAgICAgICAgICAgICAgICAgICAgY2hpbGRUcmFuc2Zvcm0udHkgfCAwXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb250ZXh0LnNldFRyYW5zZm9ybShcbiAgICAgICAgICAgICAgICAgICAgY2hpbGRUcmFuc2Zvcm0uYSxcbiAgICAgICAgICAgICAgICAgICAgY2hpbGRUcmFuc2Zvcm0uYixcbiAgICAgICAgICAgICAgICAgICAgY2hpbGRUcmFuc2Zvcm0uYyxcbiAgICAgICAgICAgICAgICAgICAgY2hpbGRUcmFuc2Zvcm0uZCxcbiAgICAgICAgICAgICAgICAgICAgY2hpbGRUcmFuc2Zvcm0udHgsXG4gICAgICAgICAgICAgICAgICAgIGNoaWxkVHJhbnNmb3JtLnR5XG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcG9zaXRpb25YID0gKChjaGlsZC5hbmNob3IueCkgKiAoLWZyYW1lLndpZHRoKSArIDAuNSk7XG4gICAgICAgICAgICBwb3NpdGlvblkgPSAoKGNoaWxkLmFuY2hvci55KSAqICgtZnJhbWUuaGVpZ2h0KSArIDAuNSk7XG5cbiAgICAgICAgICAgIGZpbmFsV2lkdGggPSBmcmFtZS53aWR0aDtcbiAgICAgICAgICAgIGZpbmFsSGVpZ2h0ID0gZnJhbWUuaGVpZ2h0O1xuICAgICAgICB9XG5cbiAgICAgICAgY29udGV4dC5kcmF3SW1hZ2UoXG4gICAgICAgICAgICBjaGlsZC50ZXh0dXJlLmJhc2VUZXh0dXJlLnNvdXJjZSxcbiAgICAgICAgICAgIGZyYW1lLngsXG4gICAgICAgICAgICBmcmFtZS55LFxuICAgICAgICAgICAgZnJhbWUud2lkdGgsXG4gICAgICAgICAgICBmcmFtZS5oZWlnaHQsXG4gICAgICAgICAgICBwb3NpdGlvblgsXG4gICAgICAgICAgICBwb3NpdGlvblksXG4gICAgICAgICAgICBmaW5hbFdpZHRoLFxuICAgICAgICAgICAgZmluYWxIZWlnaHRcbiAgICAgICAgKTtcbiAgICB9XG59O1xuXG4vKipcbiAqIERlc3Ryb3lzIHRoZSBjb250YWluZXJcbiAqXG4gKiBAcGFyYW0gW2Rlc3Ryb3lDaGlsZHJlbj1mYWxzZV0ge2Jvb2xlYW59IGlmIHNldCB0byB0cnVlLCBhbGwgdGhlIGNoaWxkcmVuIHdpbGwgaGF2ZSB0aGVpciBkZXN0cm95IG1ldGhvZCBjYWxsZWQgYXMgd2VsbFxuICovXG5QYXJ0aWNsZUNvbnRhaW5lci5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uICgpIHtcbiAgICBDb250YWluZXIucHJvdG90eXBlLmRlc3Ryb3kuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcblxuICAgIGlmICh0aGlzLl9idWZmZXJzKSB7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5fYnVmZmVycy5sZW5ndGg7ICsraSkge1xuICAgICAgICAgICAgdGhpcy5fYnVmZmVyc1tpXS5kZXN0cm95KCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLl9wcm9wZXJ0aWVzID0gbnVsbDtcbiAgICB0aGlzLl9idWZmZXJzID0gbnVsbDtcbn07XG4iLCJcbi8qKlxuICogQGF1dGhvciBNYXQgR3JvdmVzXG4gKlxuICogQmlnIHRoYW5rcyB0byB0aGUgdmVyeSBjbGV2ZXIgTWF0dCBEZXNMYXVyaWVycyA8bWF0dGRlc2w+IGh0dHBzOi8vZ2l0aHViLmNvbS9tYXR0ZGVzbC9cbiAqIGZvciBjcmVhdGluZyB0aGUgb3JpZ2luYWwgcGl4aSB2ZXJzaW9uIVxuICogQWxzbyBhIHRoYW5rcyB0byBodHRwczovL2dpdGh1Yi5jb20vYmNoZXZhbGllciBmb3IgdHdlYWtpbmcgdGhlIHRpbnQgYW5kIGFscGhhIHNvIHRoYXQgdGhleSBub3cgc2hhcmUgNCBieXRlcyBvbiB0aGUgdmVydGV4IGJ1ZmZlclxuICpcbiAqIEhlYXZpbHkgaW5zcGlyZWQgYnkgTGliR0RYJ3MgUGFydGljbGVCdWZmZXI6XG4gKiBodHRwczovL2dpdGh1Yi5jb20vbGliZ2R4L2xpYmdkeC9ibG9iL21hc3Rlci9nZHgvc3JjL2NvbS9iYWRsb2dpYy9nZHgvZ3JhcGhpY3MvZzJkL1BhcnRpY2xlQnVmZmVyLmphdmFcbiAqL1xuXG4vKipcbiAqIFRoZSBwYXJ0aWNsZSBidWZmZXIgbWFuYWdlcyB0aGUgc3RhdGljIGFuZCBkeW5hbWljIGJ1ZmZlcnMgZm9yIGEgcGFydGljbGUgY29udGFpbmVyLlxuICpcbiAqIEBjbGFzc1xuICogQHByaXZhdGVcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKi9cbmZ1bmN0aW9uIFBhcnRpY2xlQnVmZmVyKGdsLCBwcm9wZXJ0aWVzLCBkeW5hbWljUHJvcGVydHlGbGFncywgc2l6ZSlcbntcbiAgICAvKipcbiAgICAgKiBUaGUgY3VycmVudCBXZWJHTCBkcmF3aW5nIGNvbnRleHQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtXZWJHTFJlbmRlcmluZ0NvbnRleHR9XG4gICAgICovXG4gICAgdGhpcy5nbCA9IGdsO1xuXG4gICAgLyoqXG4gICAgICogU2l6ZSBvZiBhIHNpbmdsZSB2ZXJ0ZXguXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy52ZXJ0U2l6ZSA9IDI7XG5cbiAgICAvKipcbiAgICAgKiBTaXplIG9mIGEgc2luZ2xlIHZlcnRleCBpbiBieXRlcy5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLnZlcnRCeXRlU2l6ZSA9IHRoaXMudmVydFNpemUgKiA0O1xuXG4gICAgLyoqXG4gICAgICogVGhlIG51bWJlciBvZiBwYXJ0aWNsZXMgdGhlIGJ1ZmZlciBjYW4gaG9sZFxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMuc2l6ZSA9IHNpemU7XG5cbiAgICAvKipcbiAgICAgKiBBIGxpc3Qgb2YgdGhlIHByb3BlcnRpZXMgdGhhdCBhcmUgZHluYW1pYy5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge29iamVjdFtdfVxuICAgICAqL1xuICAgIHRoaXMuZHluYW1pY1Byb3BlcnRpZXMgPSBbXTtcblxuICAgIC8qKlxuICAgICAqIEEgbGlzdCBvZiB0aGUgcHJvcGVydGllcyB0aGF0IGFyZSBzdGF0aWMuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtvYmplY3RbXX1cbiAgICAgKi9cbiAgICB0aGlzLnN0YXRpY1Byb3BlcnRpZXMgPSBbXTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcGVydGllcy5sZW5ndGg7IGkrKylcbiAgICB7XG4gICAgICAgIHZhciBwcm9wZXJ0eSA9IHByb3BlcnRpZXNbaV07XG5cbiAgICAgICAgaWYoZHluYW1pY1Byb3BlcnR5RmxhZ3NbaV0pXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuZHluYW1pY1Byb3BlcnRpZXMucHVzaChwcm9wZXJ0eSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnN0YXRpY1Byb3BlcnRpZXMucHVzaChwcm9wZXJ0eSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLnN0YXRpY1N0cmlkZSA9IDA7XG4gICAgdGhpcy5zdGF0aWNCdWZmZXIgPSBudWxsO1xuICAgIHRoaXMuc3RhdGljRGF0YSA9IG51bGw7XG5cbiAgICB0aGlzLmR5bmFtaWNTdHJpZGUgPSAwO1xuICAgIHRoaXMuZHluYW1pY0J1ZmZlciA9IG51bGw7XG4gICAgdGhpcy5keW5hbWljRGF0YSA9IG51bGw7XG5cbiAgICB0aGlzLmluaXRCdWZmZXJzKCk7XG5cbn1cblxuUGFydGljbGVCdWZmZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gUGFydGljbGVCdWZmZXI7XG5tb2R1bGUuZXhwb3J0cyA9IFBhcnRpY2xlQnVmZmVyO1xuXG4vKipcbiAqIFNldHMgdXAgdGhlIHJlbmRlcmVyIGNvbnRleHQgYW5kIG5lY2Vzc2FyeSBidWZmZXJzLlxuICpcbiAqIEBwcml2YXRlXG4gKi9cblBhcnRpY2xlQnVmZmVyLnByb3RvdHlwZS5pbml0QnVmZmVycyA9IGZ1bmN0aW9uICgpXG57XG4gICAgdmFyIGdsID0gdGhpcy5nbDtcbiAgICB2YXIgaTtcbiAgICB2YXIgcHJvcGVydHk7XG5cbiAgICB2YXIgZHluYW1pY09mZnNldCA9IDA7XG4gICAgdGhpcy5keW5hbWljU3RyaWRlID0gMDtcblxuICAgIGZvciAoaSA9IDA7IGkgPCB0aGlzLmR5bmFtaWNQcm9wZXJ0aWVzLmxlbmd0aDsgaSsrKVxuICAgIHtcbiAgICAgICAgcHJvcGVydHkgPSB0aGlzLmR5bmFtaWNQcm9wZXJ0aWVzW2ldO1xuXG4gICAgICAgIHByb3BlcnR5Lm9mZnNldCA9IGR5bmFtaWNPZmZzZXQ7XG4gICAgICAgIGR5bmFtaWNPZmZzZXQgKz0gcHJvcGVydHkuc2l6ZTtcbiAgICAgICAgdGhpcy5keW5hbWljU3RyaWRlICs9IHByb3BlcnR5LnNpemU7XG4gICAgfVxuXG4gICAgdGhpcy5keW5hbWljRGF0YSA9IG5ldyBGbG9hdDMyQXJyYXkoIHRoaXMuc2l6ZSAqIHRoaXMuZHluYW1pY1N0cmlkZSAqIDQpO1xuICAgIHRoaXMuZHluYW1pY0J1ZmZlciA9IGdsLmNyZWF0ZUJ1ZmZlcigpO1xuXG4gICAgZ2wuYmluZEJ1ZmZlcihnbC5BUlJBWV9CVUZGRVIsIHRoaXMuZHluYW1pY0J1ZmZlcik7XG4gICAgZ2wuYnVmZmVyRGF0YShnbC5BUlJBWV9CVUZGRVIsIHRoaXMuZHluYW1pY0RhdGEsIGdsLkRZTkFNSUNfRFJBVyk7XG5cblxuICAgIC8vIHN0YXRpYyAvL1xuICAgIHZhciBzdGF0aWNPZmZzZXQgPSAwO1xuICAgIHRoaXMuc3RhdGljU3RyaWRlID0gMDtcblxuICAgIGZvciAoaSA9IDA7IGkgPCB0aGlzLnN0YXRpY1Byb3BlcnRpZXMubGVuZ3RoOyBpKyspXG4gICAge1xuICAgICAgICBwcm9wZXJ0eSA9IHRoaXMuc3RhdGljUHJvcGVydGllc1tpXTtcblxuICAgICAgICBwcm9wZXJ0eS5vZmZzZXQgPSBzdGF0aWNPZmZzZXQ7XG4gICAgICAgIHN0YXRpY09mZnNldCArPSBwcm9wZXJ0eS5zaXplO1xuICAgICAgICB0aGlzLnN0YXRpY1N0cmlkZSArPSBwcm9wZXJ0eS5zaXplO1xuICAgIH1cblxuICAgIHRoaXMuc3RhdGljRGF0YSA9IG5ldyBGbG9hdDMyQXJyYXkoIHRoaXMuc2l6ZSAqIHRoaXMuc3RhdGljU3RyaWRlICogNCk7XG4gICAgdGhpcy5zdGF0aWNCdWZmZXIgPSBnbC5jcmVhdGVCdWZmZXIoKTtcblxuICAgIGdsLmJpbmRCdWZmZXIoZ2wuQVJSQVlfQlVGRkVSLCB0aGlzLnN0YXRpY0J1ZmZlcik7XG4gICAgZ2wuYnVmZmVyRGF0YShnbC5BUlJBWV9CVUZGRVIsIHRoaXMuc3RhdGljRGF0YSwgZ2wuRFlOQU1JQ19EUkFXKTtcbn07XG5cbi8qKlxuICogVXBsb2FkcyB0aGUgZHluYW1pYyBwcm9wZXJ0aWVzLlxuICpcbiAqL1xuUGFydGljbGVCdWZmZXIucHJvdG90eXBlLnVwbG9hZER5bmFtaWMgPSBmdW5jdGlvbihjaGlsZHJlbiwgc3RhcnRJbmRleCwgYW1vdW50KVxue1xuICAgIHZhciBnbCA9IHRoaXMuZ2w7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuZHluYW1pY1Byb3BlcnRpZXMubGVuZ3RoOyBpKyspXG4gICAge1xuICAgICAgICB2YXIgcHJvcGVydHkgPSB0aGlzLmR5bmFtaWNQcm9wZXJ0aWVzW2ldO1xuICAgICAgICBwcm9wZXJ0eS51cGxvYWRGdW5jdGlvbihjaGlsZHJlbiwgc3RhcnRJbmRleCwgYW1vdW50LCB0aGlzLmR5bmFtaWNEYXRhLCB0aGlzLmR5bmFtaWNTdHJpZGUsIHByb3BlcnR5Lm9mZnNldCk7XG4gICAgfVxuXG4gICAgZ2wuYmluZEJ1ZmZlcihnbC5BUlJBWV9CVUZGRVIsIHRoaXMuZHluYW1pY0J1ZmZlcik7XG4gICAgZ2wuYnVmZmVyU3ViRGF0YShnbC5BUlJBWV9CVUZGRVIsIDAsIHRoaXMuZHluYW1pY0RhdGEpO1xufTtcblxuLyoqXG4gKiBVcGxvYWRzIHRoZSBzdGF0aWMgcHJvcGVydGllcy5cbiAqXG4gKi9cblBhcnRpY2xlQnVmZmVyLnByb3RvdHlwZS51cGxvYWRTdGF0aWMgPSBmdW5jdGlvbihjaGlsZHJlbiwgc3RhcnRJbmRleCwgYW1vdW50KVxue1xuICAgIHZhciBnbCA9IHRoaXMuZ2w7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuc3RhdGljUHJvcGVydGllcy5sZW5ndGg7IGkrKylcbiAgICB7XG4gICAgICAgIHZhciBwcm9wZXJ0eSA9IHRoaXMuc3RhdGljUHJvcGVydGllc1tpXTtcbiAgICAgICAgcHJvcGVydHkudXBsb2FkRnVuY3Rpb24oY2hpbGRyZW4sIHN0YXJ0SW5kZXgsIGFtb3VudCwgdGhpcy5zdGF0aWNEYXRhLCB0aGlzLnN0YXRpY1N0cmlkZSwgcHJvcGVydHkub2Zmc2V0KTtcbiAgICB9XG5cbiAgICBnbC5iaW5kQnVmZmVyKGdsLkFSUkFZX0JVRkZFUiwgdGhpcy5zdGF0aWNCdWZmZXIpO1xuICAgIGdsLmJ1ZmZlclN1YkRhdGEoZ2wuQVJSQVlfQlVGRkVSLCAwLCB0aGlzLnN0YXRpY0RhdGEpO1xufTtcblxuLyoqXG4gKiBCaW5kcyB0aGUgYnVmZmVycyB0byB0aGUgR1BVXG4gKlxuICovXG5QYXJ0aWNsZUJ1ZmZlci5wcm90b3R5cGUuYmluZCA9IGZ1bmN0aW9uICgpXG57XG4gICAgdmFyIGdsID0gdGhpcy5nbDtcbiAgICB2YXIgaSwgcHJvcGVydHk7XG5cbiAgICBnbC5iaW5kQnVmZmVyKGdsLkFSUkFZX0JVRkZFUiwgdGhpcy5keW5hbWljQnVmZmVyKTtcblxuICAgIGZvciAoaSA9IDA7IGkgPCB0aGlzLmR5bmFtaWNQcm9wZXJ0aWVzLmxlbmd0aDsgaSsrKVxuICAgIHtcbiAgICAgICAgcHJvcGVydHkgPSB0aGlzLmR5bmFtaWNQcm9wZXJ0aWVzW2ldO1xuICAgICAgICBnbC52ZXJ0ZXhBdHRyaWJQb2ludGVyKHByb3BlcnR5LmF0dHJpYnV0ZSwgcHJvcGVydHkuc2l6ZSwgZ2wuRkxPQVQsIGZhbHNlLCB0aGlzLmR5bmFtaWNTdHJpZGUgKiA0LCBwcm9wZXJ0eS5vZmZzZXQgKiA0KTtcbiAgICB9XG5cbiAgICBnbC5iaW5kQnVmZmVyKGdsLkFSUkFZX0JVRkZFUiwgdGhpcy5zdGF0aWNCdWZmZXIpO1xuXG4gICAgZm9yIChpID0gMDsgaSA8IHRoaXMuc3RhdGljUHJvcGVydGllcy5sZW5ndGg7IGkrKylcbiAgICB7XG4gICAgICAgIHByb3BlcnR5ID0gdGhpcy5zdGF0aWNQcm9wZXJ0aWVzW2ldO1xuICAgICAgICBnbC52ZXJ0ZXhBdHRyaWJQb2ludGVyKHByb3BlcnR5LmF0dHJpYnV0ZSwgcHJvcGVydHkuc2l6ZSwgZ2wuRkxPQVQsIGZhbHNlLCB0aGlzLnN0YXRpY1N0cmlkZSAqIDQsIHByb3BlcnR5Lm9mZnNldCAqIDQpO1xuICAgIH1cbn07XG5cbi8qKlxuICogRGVzdHJveXMgdGhlIFBhcnRpY2xlQnVmZmVyLlxuICpcbiAqL1xuUGFydGljbGVCdWZmZXIucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoKVxue1xuICAgIHRoaXMuZHluYW1pY1Byb3BlcnRpZXMgPSBudWxsO1xuICAgIHRoaXMuZHluYW1pY0RhdGEgPSBudWxsO1xuICAgIHRoaXMuZ2wuZGVsZXRlQnVmZmVyKHRoaXMuZHluYW1pY0J1ZmZlcik7XG5cbiAgICB0aGlzLnN0YXRpY1Byb3BlcnRpZXMgPSBudWxsO1xuICAgIHRoaXMuc3RhdGljRGF0YSA9IG51bGw7XG4gICAgdGhpcy5nbC5kZWxldGVCdWZmZXIodGhpcy5zdGF0aWNCdWZmZXIpO1xufTtcbiIsInZhciBPYmplY3RSZW5kZXJlciA9IHJlcXVpcmUoJy4uLy4uL3JlbmRlcmVycy93ZWJnbC91dGlscy9PYmplY3RSZW5kZXJlcicpLFxuICAgIFdlYkdMUmVuZGVyZXIgPSByZXF1aXJlKCcuLi8uLi9yZW5kZXJlcnMvd2ViZ2wvV2ViR0xSZW5kZXJlcicpLFxuICAgIFBhcnRpY2xlU2hhZGVyID0gcmVxdWlyZSgnLi9QYXJ0aWNsZVNoYWRlcicpLFxuICAgIFBhcnRpY2xlQnVmZmVyID0gcmVxdWlyZSgnLi9QYXJ0aWNsZUJ1ZmZlcicpLFxuICAgIG1hdGggICAgICAgICAgICA9IHJlcXVpcmUoJy4uLy4uL21hdGgnKTtcblxuLyoqXG4gKiBAYXV0aG9yIE1hdCBHcm92ZXNcbiAqXG4gKiBCaWcgdGhhbmtzIHRvIHRoZSB2ZXJ5IGNsZXZlciBNYXR0IERlc0xhdXJpZXJzIDxtYXR0ZGVzbD4gaHR0cHM6Ly9naXRodWIuY29tL21hdHRkZXNsL1xuICogZm9yIGNyZWF0aW5nIHRoZSBvcmlnaW5hbCBwaXhpIHZlcnNpb24hXG4gKiBBbHNvIGEgdGhhbmtzIHRvIGh0dHBzOi8vZ2l0aHViLmNvbS9iY2hldmFsaWVyIGZvciB0d2Vha2luZyB0aGUgdGludCBhbmQgYWxwaGEgc28gdGhhdCB0aGV5IG5vdyBzaGFyZSA0IGJ5dGVzIG9uIHRoZSB2ZXJ0ZXggYnVmZmVyXG4gKlxuICogSGVhdmlseSBpbnNwaXJlZCBieSBMaWJHRFgncyBQYXJ0aWNsZVJlbmRlcmVyOlxuICogaHR0cHM6Ly9naXRodWIuY29tL2xpYmdkeC9saWJnZHgvYmxvYi9tYXN0ZXIvZ2R4L3NyYy9jb20vYmFkbG9naWMvZ2R4L2dyYXBoaWNzL2cyZC9QYXJ0aWNsZVJlbmRlcmVyLmphdmFcbiAqL1xuXG4vKipcbiAqXG4gKiBAY2xhc3NcbiAqIEBwcml2YXRlXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLldlYkdMUmVuZGVyZXJ9IFRoZSByZW5kZXJlciB0aGlzIHNwcml0ZSBiYXRjaCB3b3JrcyBmb3IuXG4gKi9cbmZ1bmN0aW9uIFBhcnRpY2xlUmVuZGVyZXIocmVuZGVyZXIpXG57XG4gICAgT2JqZWN0UmVuZGVyZXIuY2FsbCh0aGlzLCByZW5kZXJlcik7XG5cbiAgICAvLyA2NTUzNSBpcyBtYXggdmVydGV4IGluZGV4IGluIHRoZSBpbmRleCBidWZmZXIgKHNlZSBQYXJ0aWNsZVJlbmRlcmVyKVxuICAgIC8vIHNvIG1heCBudW1iZXIgb2YgcGFydGljbGVzIGlzIDY1NTM2IC8gNCA9IDE2Mzg0XG4gICAgLy8gYW5kIG1heCBudW1iZXIgb2YgZWxlbWVudCBpbiB0aGUgaW5kZXggYnVmZmVyIGlzIDE2Mzg0ICogNiA9IDk4MzA0XG4gICAgLy8gQ3JlYXRpbmcgYSBmdWxsIGluZGV4IGJ1ZmZlciwgb3ZlcmhlYWQgaXMgOTgzMDQgKiAyID0gMTk2S29cbiAgICB2YXIgbnVtSW5kaWNlcyA9IDk4MzA0O1xuXG4gICAgLyoqXG4gICAgICogSG9sZHMgdGhlIGluZGljZXNcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1VpbnQxNkFycmF5fVxuICAgICAqL1xuICAgIHRoaXMuaW5kaWNlcyA9IG5ldyBVaW50MTZBcnJheShudW1JbmRpY2VzKTtcblxuICAgIGZvciAodmFyIGk9MCwgaj0wOyBpIDwgbnVtSW5kaWNlczsgaSArPSA2LCBqICs9IDQpXG4gICAge1xuICAgICAgICB0aGlzLmluZGljZXNbaSArIDBdID0gaiArIDA7XG4gICAgICAgIHRoaXMuaW5kaWNlc1tpICsgMV0gPSBqICsgMTtcbiAgICAgICAgdGhpcy5pbmRpY2VzW2kgKyAyXSA9IGogKyAyO1xuICAgICAgICB0aGlzLmluZGljZXNbaSArIDNdID0gaiArIDA7XG4gICAgICAgIHRoaXMuaW5kaWNlc1tpICsgNF0gPSBqICsgMjtcbiAgICAgICAgdGhpcy5pbmRpY2VzW2kgKyA1XSA9IGogKyAzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoZSBkZWZhdWx0IHNoYWRlciB0aGF0IGlzIHVzZWQgaWYgYSBzcHJpdGUgZG9lc24ndCBoYXZlIGEgbW9yZSBzcGVjaWZpYyBvbmUuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlNoYWRlcn1cbiAgICAgKi9cbiAgICB0aGlzLnNoYWRlciA9IG51bGw7XG5cbiAgICB0aGlzLmluZGV4QnVmZmVyID0gbnVsbDtcblxuICAgIHRoaXMucHJvcGVydGllcyA9IG51bGw7XG5cbiAgICB0aGlzLnRlbXBNYXRyaXggPSBuZXcgbWF0aC5NYXRyaXgoKTtcbn1cblxuUGFydGljbGVSZW5kZXJlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKE9iamVjdFJlbmRlcmVyLnByb3RvdHlwZSk7XG5QYXJ0aWNsZVJlbmRlcmVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFBhcnRpY2xlUmVuZGVyZXI7XG5tb2R1bGUuZXhwb3J0cyA9IFBhcnRpY2xlUmVuZGVyZXI7XG5cbldlYkdMUmVuZGVyZXIucmVnaXN0ZXJQbHVnaW4oJ3BhcnRpY2xlJywgUGFydGljbGVSZW5kZXJlcik7XG5cbi8qKlxuICogV2hlbiB0aGVyZSBpcyBhIFdlYkdMIGNvbnRleHQgY2hhbmdlXG4gKlxuICogQHByaXZhdGVcbiAqL1xuUGFydGljbGVSZW5kZXJlci5wcm90b3R5cGUub25Db250ZXh0Q2hhbmdlID0gZnVuY3Rpb24gKClcbntcbiAgICB2YXIgZ2wgPSB0aGlzLnJlbmRlcmVyLmdsO1xuXG4gICAgLy8gc2V0dXAgZGVmYXVsdCBzaGFkZXJcbiAgICB0aGlzLnNoYWRlciA9IG5ldyBQYXJ0aWNsZVNoYWRlcih0aGlzLnJlbmRlcmVyLnNoYWRlck1hbmFnZXIpO1xuXG4gICAgdGhpcy5pbmRleEJ1ZmZlciA9IGdsLmNyZWF0ZUJ1ZmZlcigpO1xuXG4gICAgLy8gNjU1MzUgaXMgbWF4IGluZGV4LCBzbyA2NTUzNSAvIDYgPSAxMDkyMi5cblxuICAgIC8vdXBsb2FkIHRoZSBpbmRleCBkYXRhXG4gICAgZ2wuYmluZEJ1ZmZlcihnbC5FTEVNRU5UX0FSUkFZX0JVRkZFUiwgdGhpcy5pbmRleEJ1ZmZlcik7XG4gICAgZ2wuYnVmZmVyRGF0YShnbC5FTEVNRU5UX0FSUkFZX0JVRkZFUiwgdGhpcy5pbmRpY2VzLCBnbC5TVEFUSUNfRFJBVyk7XG5cbiAgICB0aGlzLnByb3BlcnRpZXMgPSBbXG4gICAgICAgIC8vIHZlcnRpY2VzRGF0YVxuICAgICAgICB7XG4gICAgICAgICAgICBhdHRyaWJ1dGU6dGhpcy5zaGFkZXIuYXR0cmlidXRlcy5hVmVydGV4UG9zaXRpb24sXG4gICAgICAgICAgICBzaXplOjIsXG4gICAgICAgICAgICB1cGxvYWRGdW5jdGlvbjp0aGlzLnVwbG9hZFZlcnRpY2VzLFxuICAgICAgICAgICAgb2Zmc2V0OjBcbiAgICAgICAgfSxcbiAgICAgICAgLy8gcG9zaXRpb25EYXRhXG4gICAgICAgIHtcbiAgICAgICAgICAgIGF0dHJpYnV0ZTp0aGlzLnNoYWRlci5hdHRyaWJ1dGVzLmFQb3NpdGlvbkNvb3JkLFxuICAgICAgICAgICAgc2l6ZToyLFxuICAgICAgICAgICAgdXBsb2FkRnVuY3Rpb246dGhpcy51cGxvYWRQb3NpdGlvbixcbiAgICAgICAgICAgIG9mZnNldDowXG4gICAgICAgIH0sXG4gICAgICAgIC8vIHJvdGF0aW9uRGF0YVxuICAgICAgICB7XG4gICAgICAgICAgICBhdHRyaWJ1dGU6dGhpcy5zaGFkZXIuYXR0cmlidXRlcy5hUm90YXRpb24sXG4gICAgICAgICAgICBzaXplOjEsXG4gICAgICAgICAgICB1cGxvYWRGdW5jdGlvbjp0aGlzLnVwbG9hZFJvdGF0aW9uLFxuICAgICAgICAgICAgb2Zmc2V0OjBcbiAgICAgICAgfSxcbiAgICAgICAgLy8gdXZzRGF0YVxuICAgICAgICB7XG4gICAgICAgICAgICBhdHRyaWJ1dGU6dGhpcy5zaGFkZXIuYXR0cmlidXRlcy5hVGV4dHVyZUNvb3JkLFxuICAgICAgICAgICAgc2l6ZToyLFxuICAgICAgICAgICAgdXBsb2FkRnVuY3Rpb246dGhpcy51cGxvYWRVdnMsXG4gICAgICAgICAgICBvZmZzZXQ6MFxuICAgICAgICB9LFxuICAgICAgICAvLyBhbHBoYURhdGFcbiAgICAgICAge1xuICAgICAgICAgICAgYXR0cmlidXRlOnRoaXMuc2hhZGVyLmF0dHJpYnV0ZXMuYUNvbG9yLFxuICAgICAgICAgICAgc2l6ZToxLFxuICAgICAgICAgICAgdXBsb2FkRnVuY3Rpb246dGhpcy51cGxvYWRBbHBoYSxcbiAgICAgICAgICAgIG9mZnNldDowXG4gICAgICAgIH1cbiAgICBdO1xufTtcblxuLyoqXG4gKiBTdGFydHMgYSBuZXcgcGFydGljbGUgYmF0Y2guXG4gKlxuICovXG5QYXJ0aWNsZVJlbmRlcmVyLnByb3RvdHlwZS5zdGFydCA9IGZ1bmN0aW9uICgpXG57XG4gICAgdmFyIGdsID0gdGhpcy5yZW5kZXJlci5nbDtcblxuICAgIC8vIGJpbmQgdGhlIG1haW4gdGV4dHVyZVxuICAgIGdsLmFjdGl2ZVRleHR1cmUoZ2wuVEVYVFVSRTApO1xuXG4gICAgLy8gYmluZCB0aGUgYnVmZmVyc1xuXG4gICAgZ2wuYmluZEJ1ZmZlcihnbC5FTEVNRU5UX0FSUkFZX0JVRkZFUiwgdGhpcy5pbmRleEJ1ZmZlcik7XG5cbiAgICB2YXIgc2hhZGVyID0gdGhpcy5zaGFkZXI7XG5cbiAgICB0aGlzLnJlbmRlcmVyLnNoYWRlck1hbmFnZXIuc2V0U2hhZGVyKHNoYWRlcik7XG59O1xuXG5cbi8qKlxuICogUmVuZGVycyB0aGUgcGFydGljbGUgY29udGFpbmVyIG9iamVjdC5cbiAqXG4gKiBAcGFyYW0gY29udGFpbmVyIHtQSVhJLlBhcnRpY2xlQ29udGFpbmVyfSBUaGUgY29udGFpbmVyIHRvIHJlbmRlciB1c2luZyB0aGlzIFBhcnRpY2xlUmVuZGVyZXJcbiAqL1xuUGFydGljbGVSZW5kZXJlci5wcm90b3R5cGUucmVuZGVyID0gZnVuY3Rpb24gKGNvbnRhaW5lcilcbntcbiAgICB2YXIgY2hpbGRyZW4gPSBjb250YWluZXIuY2hpbGRyZW4sXG4gICAgICAgIHRvdGFsQ2hpbGRyZW4gPSBjaGlsZHJlbi5sZW5ndGgsXG4gICAgICAgIG1heFNpemUgPSBjb250YWluZXIuX21heFNpemUsXG4gICAgICAgIGJhdGNoU2l6ZSA9IGNvbnRhaW5lci5fYmF0Y2hTaXplO1xuXG4gICAgaWYodG90YWxDaGlsZHJlbiA9PT0gMClcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgZWxzZSBpZih0b3RhbENoaWxkcmVuID4gbWF4U2l6ZSlcbiAgICB7XG4gICAgICAgIHRvdGFsQ2hpbGRyZW4gPSBtYXhTaXplO1xuICAgIH1cblxuICAgIGlmKCFjb250YWluZXIuX2J1ZmZlcnMpXG4gICAge1xuICAgICAgICBjb250YWluZXIuX2J1ZmZlcnMgPSB0aGlzLmdlbmVyYXRlQnVmZmVycyggY29udGFpbmVyICk7XG4gICAgfVxuXG4gICAgLy8gaWYgdGhlIHV2cyBoYXZlIG5vdCB1cGRhdGVkIHRoZW4gbm8gcG9pbnQgcmVuZGVyaW5nIGp1c3QgeWV0IVxuICAgIHRoaXMucmVuZGVyZXIuYmxlbmRNb2RlTWFuYWdlci5zZXRCbGVuZE1vZGUoY29udGFpbmVyLmJsZW5kTW9kZSk7XG5cbiAgICB2YXIgZ2wgPSB0aGlzLnJlbmRlcmVyLmdsO1xuXG4gICAgdmFyIG0gPSAgY29udGFpbmVyLndvcmxkVHJhbnNmb3JtLmNvcHkoIHRoaXMudGVtcE1hdHJpeCApO1xuICAgIG0ucHJlcGVuZCggdGhpcy5yZW5kZXJlci5jdXJyZW50UmVuZGVyVGFyZ2V0LnByb2plY3Rpb25NYXRyaXggKTtcbiAgICBnbC51bmlmb3JtTWF0cml4M2Z2KHRoaXMuc2hhZGVyLnVuaWZvcm1zLnByb2plY3Rpb25NYXRyaXguX2xvY2F0aW9uLCBmYWxzZSwgbS50b0FycmF5KHRydWUpKTtcbiAgICBnbC51bmlmb3JtMWYodGhpcy5zaGFkZXIudW5pZm9ybXMudUFscGhhLl9sb2NhdGlvbiwgY29udGFpbmVyLndvcmxkQWxwaGEpO1xuXG5cbiAgICAvLyBtYWtlIHN1cmUgdGhlIHRleHR1cmUgaXMgYm91bmQuLlxuICAgIHZhciBiYXNlVGV4dHVyZSA9IGNoaWxkcmVuWzBdLl90ZXh0dXJlLmJhc2VUZXh0dXJlO1xuXG4gICAgaWYgKCFiYXNlVGV4dHVyZS5fZ2xUZXh0dXJlc1tnbC5pZF0pXG4gICAge1xuICAgICAgICAvLyBpZiB0aGUgdGV4dHVyZSBoYXMgbm90IHVwZGF0ZWQgdGhlbiBsZXRzIG5vdCB1cGxvYWQgYW55IHN0YXRpYyBwcm9wZXJ0aWVzXG4gICAgICAgIGlmKCF0aGlzLnJlbmRlcmVyLnVwZGF0ZVRleHR1cmUoYmFzZVRleHR1cmUpKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZighY29udGFpbmVyLl9wcm9wZXJ0aWVzWzBdIHx8ICFjb250YWluZXIuX3Byb3BlcnRpZXNbM10pXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNvbnRhaW5lci5fYnVmZmVyVG9VcGRhdGUgPSAwO1xuICAgICAgICB9XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIGdsLmJpbmRUZXh0dXJlKGdsLlRFWFRVUkVfMkQsIGJhc2VUZXh0dXJlLl9nbFRleHR1cmVzW2dsLmlkXSk7XG4gICAgfVxuXG4gICAgLy8gbm93IGxldHMgdXBsb2FkIGFuZCByZW5kZXIgdGhlIGJ1ZmZlcnMuLlxuICAgIGZvciAodmFyIGkgPSAwLCBqID0gMDsgaSA8IHRvdGFsQ2hpbGRyZW47IGkgKz0gYmF0Y2hTaXplLCBqICs9IDEpXG4gICAge1xuICAgICAgICB2YXIgYW1vdW50ID0gKCB0b3RhbENoaWxkcmVuIC0gaSk7XG4gICAgICAgIGlmKGFtb3VudCA+IGJhdGNoU2l6ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgYW1vdW50ID0gYmF0Y2hTaXplO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGJ1ZmZlciA9IGNvbnRhaW5lci5fYnVmZmVyc1tqXTtcblxuICAgICAgICAvLyB3ZSBhbHdheXMgdXBsb2FkIHRoZSBkeW5hbWljXG4gICAgICAgIGJ1ZmZlci51cGxvYWREeW5hbWljKGNoaWxkcmVuLCBpLCBhbW91bnQpO1xuXG4gICAgICAgIC8vIHdlIG9ubHkgdXBsb2FkIHRoZSBzdGF0aWMgY29udGVudCB3aGVuIHdlIGhhdmUgdG8hXG4gICAgICAgIGlmKGNvbnRhaW5lci5fYnVmZmVyVG9VcGRhdGUgPT09IGopXG4gICAgICAgIHtcbiAgICAgICAgICAgIGJ1ZmZlci51cGxvYWRTdGF0aWMoY2hpbGRyZW4sIGksIGFtb3VudCk7XG4gICAgICAgICAgICBjb250YWluZXIuX2J1ZmZlclRvVXBkYXRlID0gaiArIDE7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBiaW5kIHRoZSBidWZmZXJcbiAgICAgICAgYnVmZmVyLmJpbmQoIHRoaXMuc2hhZGVyICk7XG5cbiAgICAgICAgIC8vIG5vdyBkcmF3IHRob3NlIHN1Y2thcyFcbiAgICAgICAgZ2wuZHJhd0VsZW1lbnRzKGdsLlRSSUFOR0xFUywgYW1vdW50ICogNiwgZ2wuVU5TSUdORURfU0hPUlQsIDApO1xuICAgICAgICB0aGlzLnJlbmRlcmVyLmRyYXdDb3VudCsrO1xuICAgIH1cbn07XG5cbi8qKlxuICogQ3JlYXRlcyBvbmUgcGFydGljbGUgYnVmZmVyIGZvciBlYWNoIGNoaWxkIGluIHRoZSBjb250YWluZXIgd2Ugd2FudCB0byByZW5kZXIgYW5kIHVwZGF0ZXMgaW50ZXJuYWwgcHJvcGVydGllc1xuICpcbiAqIEBwYXJhbSBjb250YWluZXIge1BJWEkuUGFydGljbGVDb250YWluZXJ9IFRoZSBjb250YWluZXIgdG8gcmVuZGVyIHVzaW5nIHRoaXMgUGFydGljbGVSZW5kZXJlclxuICovXG5QYXJ0aWNsZVJlbmRlcmVyLnByb3RvdHlwZS5nZW5lcmF0ZUJ1ZmZlcnMgPSBmdW5jdGlvbiAoY29udGFpbmVyKVxue1xuICAgIHZhciBnbCA9IHRoaXMucmVuZGVyZXIuZ2wsXG4gICAgICAgIGJ1ZmZlcnMgPSBbXSxcbiAgICAgICAgc2l6ZSA9IGNvbnRhaW5lci5fbWF4U2l6ZSxcbiAgICAgICAgYmF0Y2hTaXplID0gY29udGFpbmVyLl9iYXRjaFNpemUsXG4gICAgICAgIGR5bmFtaWNQcm9wZXJ0eUZsYWdzID0gY29udGFpbmVyLl9wcm9wZXJ0aWVzLFxuICAgICAgICBpO1xuXG4gICAgZm9yIChpID0gMDsgaSA8IHNpemU7IGkgKz0gYmF0Y2hTaXplKVxuICAgIHtcbiAgICAgICAgYnVmZmVycy5wdXNoKG5ldyBQYXJ0aWNsZUJ1ZmZlcihnbCwgdGhpcy5wcm9wZXJ0aWVzLCBkeW5hbWljUHJvcGVydHlGbGFncywgYmF0Y2hTaXplKSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGJ1ZmZlcnM7XG59O1xuXG4vKipcbiAqIFVwbG9hZHMgdGhlIHZlcnRpY2llcy5cbiAqXG4gKiBAcGFyYW0gY2hpbGRyZW4ge1BJWEkuRGlzcGxheU9iamVjdFtdfSB0aGUgYXJyYXkgb2YgZGlzcGxheSBvYmplY3RzIHRvIHJlbmRlclxuICogQHBhcmFtIHN0YXJ0SW5kZXgge251bWJlcn0gdGhlIGluZGV4IHRvIHN0YXJ0IGZyb20gaW4gdGhlIGNoaWxkcmVuIGFycmF5XG4gKiBAcGFyYW0gYW1vdW50IHtudW1iZXJ9IHRoZSBhbW91bnQgb2YgY2hpbGRyZW4gdGhhdCB3aWxsIGhhdmUgdGhlaXIgdmVydGljZXMgdXBsb2FkZWRcbiAqIEBwYXJhbSBhcnJheSB7bnVtYmVyW119XG4gKiBAcGFyYW0gc3RyaWRlIHtudW1iZXJ9XG4gKiBAcGFyYW0gb2Zmc2V0IHtudW1iZXJ9XG4gKi9cblBhcnRpY2xlUmVuZGVyZXIucHJvdG90eXBlLnVwbG9hZFZlcnRpY2VzID0gZnVuY3Rpb24gKGNoaWxkcmVuLCBzdGFydEluZGV4LCBhbW91bnQsIGFycmF5LCBzdHJpZGUsIG9mZnNldClcbntcbiAgICB2YXIgc3ByaXRlLFxuICAgICAgICB0ZXh0dXJlLFxuICAgICAgICB0cmltLFxuICAgICAgICBzeCxcbiAgICAgICAgc3ksXG4gICAgICAgIHcwLCB3MSwgaDAsIGgxO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhbW91bnQ7IGkrKykge1xuXG4gICAgICAgIHNwcml0ZSA9IGNoaWxkcmVuW3N0YXJ0SW5kZXggKyBpXTtcbiAgICAgICAgdGV4dHVyZSA9IHNwcml0ZS5fdGV4dHVyZTtcbiAgICAgICAgc3ggPSBzcHJpdGUuc2NhbGUueDtcbiAgICAgICAgc3kgPSBzcHJpdGUuc2NhbGUueTtcblxuICAgICAgICBpZiAodGV4dHVyZS50cmltKVxuICAgICAgICB7XG4gICAgICAgICAgICAvLyBpZiB0aGUgc3ByaXRlIGlzIHRyaW1tZWQgdGhlbiB3ZSBuZWVkIHRvIGFkZCB0aGUgZXh0cmEgc3BhY2UgYmVmb3JlIHRyYW5zZm9ybWluZyB0aGUgc3ByaXRlIGNvb3Jkcy4uXG4gICAgICAgICAgICB0cmltID0gdGV4dHVyZS50cmltO1xuXG4gICAgICAgICAgICB3MSA9IHRyaW0ueCAtIHNwcml0ZS5hbmNob3IueCAqIHRyaW0ud2lkdGg7XG4gICAgICAgICAgICB3MCA9IHcxICsgdGV4dHVyZS5jcm9wLndpZHRoO1xuXG4gICAgICAgICAgICBoMSA9IHRyaW0ueSAtIHNwcml0ZS5hbmNob3IueSAqIHRyaW0uaGVpZ2h0O1xuICAgICAgICAgICAgaDAgPSBoMSArIHRleHR1cmUuY3JvcC5oZWlnaHQ7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgICB3MCA9ICh0ZXh0dXJlLl9mcmFtZS53aWR0aCApICogKDEtc3ByaXRlLmFuY2hvci54KTtcbiAgICAgICAgICAgIHcxID0gKHRleHR1cmUuX2ZyYW1lLndpZHRoICkgKiAtc3ByaXRlLmFuY2hvci54O1xuXG4gICAgICAgICAgICBoMCA9IHRleHR1cmUuX2ZyYW1lLmhlaWdodCAqICgxLXNwcml0ZS5hbmNob3IueSk7XG4gICAgICAgICAgICBoMSA9IHRleHR1cmUuX2ZyYW1lLmhlaWdodCAqIC1zcHJpdGUuYW5jaG9yLnk7XG4gICAgICAgIH1cblxuICAgICAgICBhcnJheVtvZmZzZXRdID0gdzEgKiBzeDtcbiAgICAgICAgYXJyYXlbb2Zmc2V0ICsgMV0gPSBoMSAqIHN5O1xuXG4gICAgICAgIGFycmF5W29mZnNldCArIHN0cmlkZV0gPSB3MCAqIHN4O1xuICAgICAgICBhcnJheVtvZmZzZXQgKyBzdHJpZGUgKyAxXSA9IGgxICogc3k7XG5cbiAgICAgICAgYXJyYXlbb2Zmc2V0ICsgc3RyaWRlICogMl0gPSB3MCAqIHN4O1xuICAgICAgICBhcnJheVtvZmZzZXQgKyBzdHJpZGUgKiAyICsgMV0gPSBoMCAqIHN5O1xuXG4gICAgICAgIGFycmF5W29mZnNldCArIHN0cmlkZSAqIDNdID0gdzEgKiBzeDtcbiAgICAgICAgYXJyYXlbb2Zmc2V0ICsgc3RyaWRlICogMyArIDFdID0gaDAgKiBzeTtcblxuICAgICAgICBvZmZzZXQgKz0gc3RyaWRlICogNDtcbiAgICB9XG5cbn07XG5cbi8qKlxuICpcbiAqIEBwYXJhbSBjaGlsZHJlbiB7UElYSS5EaXNwbGF5T2JqZWN0W119IHRoZSBhcnJheSBvZiBkaXNwbGF5IG9iamVjdHMgdG8gcmVuZGVyXG4gKiBAcGFyYW0gc3RhcnRJbmRleCB7bnVtYmVyfSB0aGUgaW5kZXggdG8gc3RhcnQgZnJvbSBpbiB0aGUgY2hpbGRyZW4gYXJyYXlcbiAqIEBwYXJhbSBhbW91bnQge251bWJlcn0gdGhlIGFtb3VudCBvZiBjaGlsZHJlbiB0aGF0IHdpbGwgaGF2ZSB0aGVpciBwb3NpdGlvbnMgdXBsb2FkZWRcbiAqIEBwYXJhbSBhcnJheSB7bnVtYmVyW119XG4gKiBAcGFyYW0gc3RyaWRlIHtudW1iZXJ9XG4gKiBAcGFyYW0gb2Zmc2V0IHtudW1iZXJ9XG4gKi9cblBhcnRpY2xlUmVuZGVyZXIucHJvdG90eXBlLnVwbG9hZFBvc2l0aW9uID0gZnVuY3Rpb24gKGNoaWxkcmVuLHN0YXJ0SW5kZXgsIGFtb3VudCwgYXJyYXksIHN0cmlkZSwgb2Zmc2V0KVxue1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYW1vdW50OyBpKyspXG4gICAge1xuICAgICAgICB2YXIgc3ByaXRlUG9zaXRpb24gPSBjaGlsZHJlbltzdGFydEluZGV4ICsgaV0ucG9zaXRpb247XG5cbiAgICAgICAgYXJyYXlbb2Zmc2V0XSA9IHNwcml0ZVBvc2l0aW9uLng7XG4gICAgICAgIGFycmF5W29mZnNldCArIDFdID0gc3ByaXRlUG9zaXRpb24ueTtcblxuICAgICAgICBhcnJheVtvZmZzZXQgKyBzdHJpZGVdID0gc3ByaXRlUG9zaXRpb24ueDtcbiAgICAgICAgYXJyYXlbb2Zmc2V0ICsgc3RyaWRlICsgMV0gPSBzcHJpdGVQb3NpdGlvbi55O1xuXG4gICAgICAgIGFycmF5W29mZnNldCArIHN0cmlkZSAqIDJdID0gc3ByaXRlUG9zaXRpb24ueDtcbiAgICAgICAgYXJyYXlbb2Zmc2V0ICsgc3RyaWRlICogMiArIDFdID0gc3ByaXRlUG9zaXRpb24ueTtcblxuICAgICAgICBhcnJheVtvZmZzZXQgKyBzdHJpZGUgKiAzXSA9IHNwcml0ZVBvc2l0aW9uLng7XG4gICAgICAgIGFycmF5W29mZnNldCArIHN0cmlkZSAqIDMgKyAxXSA9IHNwcml0ZVBvc2l0aW9uLnk7XG5cbiAgICAgICAgb2Zmc2V0ICs9IHN0cmlkZSAqIDQ7XG4gICAgfVxuXG59O1xuXG4vKipcbiAqXG4gKiBAcGFyYW0gY2hpbGRyZW4ge1BJWEkuRGlzcGxheU9iamVjdFtdfSB0aGUgYXJyYXkgb2YgZGlzcGxheSBvYmplY3RzIHRvIHJlbmRlclxuICogQHBhcmFtIHN0YXJ0SW5kZXgge251bWJlcn0gdGhlIGluZGV4IHRvIHN0YXJ0IGZyb20gaW4gdGhlIGNoaWxkcmVuIGFycmF5XG4gKiBAcGFyYW0gYW1vdW50IHtudW1iZXJ9IHRoZSBhbW91bnQgb2YgY2hpbGRyZW4gdGhhdCB3aWxsIGhhdmUgdGhlaXIgcm90YXRpb24gdXBsb2FkZWRcbiAqIEBwYXJhbSBhcnJheSB7bnVtYmVyW119XG4gKiBAcGFyYW0gc3RyaWRlIHtudW1iZXJ9XG4gKiBAcGFyYW0gb2Zmc2V0IHtudW1iZXJ9XG4gKi9cblBhcnRpY2xlUmVuZGVyZXIucHJvdG90eXBlLnVwbG9hZFJvdGF0aW9uID0gZnVuY3Rpb24gKGNoaWxkcmVuLHN0YXJ0SW5kZXgsIGFtb3VudCwgYXJyYXksIHN0cmlkZSwgb2Zmc2V0KVxue1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYW1vdW50OyBpKyspXG4gICAge1xuICAgICAgICB2YXIgc3ByaXRlUm90YXRpb24gPSBjaGlsZHJlbltzdGFydEluZGV4ICsgaV0ucm90YXRpb247XG5cblxuICAgICAgICBhcnJheVtvZmZzZXRdID0gc3ByaXRlUm90YXRpb247XG4gICAgICAgIGFycmF5W29mZnNldCArIHN0cmlkZV0gPSBzcHJpdGVSb3RhdGlvbjtcbiAgICAgICAgYXJyYXlbb2Zmc2V0ICsgc3RyaWRlICogMl0gPSBzcHJpdGVSb3RhdGlvbjtcbiAgICAgICAgYXJyYXlbb2Zmc2V0ICsgc3RyaWRlICogM10gPSBzcHJpdGVSb3RhdGlvbjtcblxuICAgICAgICBvZmZzZXQgKz0gc3RyaWRlICogNDtcbiAgICB9XG59O1xuXG4vKipcbiAqXG4gKiBAcGFyYW0gY2hpbGRyZW4ge1BJWEkuRGlzcGxheU9iamVjdFtdfSB0aGUgYXJyYXkgb2YgZGlzcGxheSBvYmplY3RzIHRvIHJlbmRlclxuICogQHBhcmFtIHN0YXJ0SW5kZXgge251bWJlcn0gdGhlIGluZGV4IHRvIHN0YXJ0IGZyb20gaW4gdGhlIGNoaWxkcmVuIGFycmF5XG4gKiBAcGFyYW0gYW1vdW50IHtudW1iZXJ9IHRoZSBhbW91bnQgb2YgY2hpbGRyZW4gdGhhdCB3aWxsIGhhdmUgdGhlaXIgVXZzIHVwbG9hZGVkXG4gKiBAcGFyYW0gYXJyYXkge251bWJlcltdfVxuICogQHBhcmFtIHN0cmlkZSB7bnVtYmVyfVxuICogQHBhcmFtIG9mZnNldCB7bnVtYmVyfVxuICovXG5QYXJ0aWNsZVJlbmRlcmVyLnByb3RvdHlwZS51cGxvYWRVdnMgPSBmdW5jdGlvbiAoY2hpbGRyZW4sc3RhcnRJbmRleCwgYW1vdW50LCBhcnJheSwgc3RyaWRlLCBvZmZzZXQpXG57XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhbW91bnQ7IGkrKylcbiAgICB7XG4gICAgICAgIHZhciB0ZXh0dXJlVXZzID0gY2hpbGRyZW5bc3RhcnRJbmRleCArIGldLl90ZXh0dXJlLl91dnM7XG5cbiAgICAgICAgaWYgKHRleHR1cmVVdnMpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGFycmF5W29mZnNldF0gPSB0ZXh0dXJlVXZzLngwO1xuICAgICAgICAgICAgYXJyYXlbb2Zmc2V0ICsgMV0gPSB0ZXh0dXJlVXZzLnkwO1xuXG4gICAgICAgICAgICBhcnJheVtvZmZzZXQgKyBzdHJpZGVdID0gdGV4dHVyZVV2cy54MTtcbiAgICAgICAgICAgIGFycmF5W29mZnNldCArIHN0cmlkZSArIDFdID0gdGV4dHVyZVV2cy55MTtcblxuICAgICAgICAgICAgYXJyYXlbb2Zmc2V0ICsgc3RyaWRlICogMl0gPSB0ZXh0dXJlVXZzLngyO1xuICAgICAgICAgICAgYXJyYXlbb2Zmc2V0ICsgc3RyaWRlICogMiArIDFdID0gdGV4dHVyZVV2cy55MjtcblxuICAgICAgICAgICAgYXJyYXlbb2Zmc2V0ICsgc3RyaWRlICogM10gPSB0ZXh0dXJlVXZzLngzO1xuICAgICAgICAgICAgYXJyYXlbb2Zmc2V0ICsgc3RyaWRlICogMyArIDFdID0gdGV4dHVyZVV2cy55MztcblxuICAgICAgICAgICAgb2Zmc2V0ICs9IHN0cmlkZSAqIDQ7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgICAvL1RPRE8geW91IGtub3cgdGhpcyBjYW4gYmUgZWFzaWVyIVxuICAgICAgICAgICAgYXJyYXlbb2Zmc2V0XSA9IDA7XG4gICAgICAgICAgICBhcnJheVtvZmZzZXQgKyAxXSA9IDA7XG5cbiAgICAgICAgICAgIGFycmF5W29mZnNldCArIHN0cmlkZV0gPSAwO1xuICAgICAgICAgICAgYXJyYXlbb2Zmc2V0ICsgc3RyaWRlICsgMV0gPSAwO1xuXG4gICAgICAgICAgICBhcnJheVtvZmZzZXQgKyBzdHJpZGUgKiAyXSA9IDA7XG4gICAgICAgICAgICBhcnJheVtvZmZzZXQgKyBzdHJpZGUgKiAyICsgMV0gPSAwO1xuXG4gICAgICAgICAgICBhcnJheVtvZmZzZXQgKyBzdHJpZGUgKiAzXSA9IDA7XG4gICAgICAgICAgICBhcnJheVtvZmZzZXQgKyBzdHJpZGUgKiAzICsgMV0gPSAwO1xuXG4gICAgICAgICAgICBvZmZzZXQgKz0gc3RyaWRlICogNDtcbiAgICAgICAgfVxuICAgIH1cbn07XG5cbi8qKlxuICpcbiAqIEBwYXJhbSBjaGlsZHJlbiB7UElYSS5EaXNwbGF5T2JqZWN0W119IHRoZSBhcnJheSBvZiBkaXNwbGF5IG9iamVjdHMgdG8gcmVuZGVyXG4gKiBAcGFyYW0gc3RhcnRJbmRleCB7bnVtYmVyfSB0aGUgaW5kZXggdG8gc3RhcnQgZnJvbSBpbiB0aGUgY2hpbGRyZW4gYXJyYXlcbiAqIEBwYXJhbSBhbW91bnQge251bWJlcn0gdGhlIGFtb3VudCBvZiBjaGlsZHJlbiB0aGF0IHdpbGwgaGF2ZSB0aGVpciBhbHBoYSB1cGxvYWRlZFxuICogQHBhcmFtIGFycmF5IHtudW1iZXJbXX1cbiAqIEBwYXJhbSBzdHJpZGUge251bWJlcn1cbiAqIEBwYXJhbSBvZmZzZXQge251bWJlcn1cbiAqL1xuUGFydGljbGVSZW5kZXJlci5wcm90b3R5cGUudXBsb2FkQWxwaGEgPSBmdW5jdGlvbiAoY2hpbGRyZW4sc3RhcnRJbmRleCwgYW1vdW50LCBhcnJheSwgc3RyaWRlLCBvZmZzZXQpXG57XG4gICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYW1vdW50OyBpKyspXG4gICAgIHtcbiAgICAgICAgdmFyIHNwcml0ZUFscGhhID0gY2hpbGRyZW5bc3RhcnRJbmRleCArIGldLmFscGhhO1xuXG4gICAgICAgIGFycmF5W29mZnNldF0gPSBzcHJpdGVBbHBoYTtcbiAgICAgICAgYXJyYXlbb2Zmc2V0ICsgc3RyaWRlXSA9IHNwcml0ZUFscGhhO1xuICAgICAgICBhcnJheVtvZmZzZXQgKyBzdHJpZGUgKiAyXSA9IHNwcml0ZUFscGhhO1xuICAgICAgICBhcnJheVtvZmZzZXQgKyBzdHJpZGUgKiAzXSA9IHNwcml0ZUFscGhhO1xuXG4gICAgICAgIG9mZnNldCArPSBzdHJpZGUgKiA0O1xuICAgIH1cbn07XG5cblxuLyoqXG4gKiBEZXN0cm95cyB0aGUgUGFydGljbGVSZW5kZXJlci5cbiAqXG4gKi9cblBhcnRpY2xlUmVuZGVyZXIucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoKVxue1xuICAgIGlmICh0aGlzLnJlbmRlcmVyLmdsKSB7XG4gICAgICAgIHRoaXMucmVuZGVyZXIuZ2wuZGVsZXRlQnVmZmVyKHRoaXMuaW5kZXhCdWZmZXIpO1xuICAgIH1cblxuICAgIE9iamVjdFJlbmRlcmVyLnByb3RvdHlwZS5kZXN0cm95LmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG5cbiAgICB0aGlzLnNoYWRlci5kZXN0cm95KCk7XG5cbiAgICB0aGlzLmluZGljZXMgPSBudWxsO1xuICAgIHRoaXMudGVtcE1hdHJpeCA9IG51bGw7XG59O1xuIiwidmFyIFRleHR1cmVTaGFkZXIgPSByZXF1aXJlKCcuLi8uLi9yZW5kZXJlcnMvd2ViZ2wvc2hhZGVycy9UZXh0dXJlU2hhZGVyJyk7XG5cbi8qKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLlRleHR1cmVTaGFkZXJcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gc2hhZGVyTWFuYWdlciB7U2hhZGVyTWFuYWdlcn0gVGhlIHdlYmdsIHNoYWRlciBtYW5hZ2VyIHRoaXMgc2hhZGVyIHdvcmtzIGZvci5cbiAqL1xuZnVuY3Rpb24gUGFydGljbGVTaGFkZXIoc2hhZGVyTWFuYWdlcilcbntcbiAgICBUZXh0dXJlU2hhZGVyLmNhbGwodGhpcyxcbiAgICAgICAgc2hhZGVyTWFuYWdlcixcbiAgICAgICAgLy8gdmVydGV4IHNoYWRlclxuICAgICAgICBbXG4gICAgICAgICAgICAnYXR0cmlidXRlIHZlYzIgYVZlcnRleFBvc2l0aW9uOycsXG4gICAgICAgICAgICAnYXR0cmlidXRlIHZlYzIgYVRleHR1cmVDb29yZDsnLFxuICAgICAgICAgICAgJ2F0dHJpYnV0ZSBmbG9hdCBhQ29sb3I7JyxcblxuICAgICAgICAgICAgJ2F0dHJpYnV0ZSB2ZWMyIGFQb3NpdGlvbkNvb3JkOycsXG4gICAgICAgICAgICAnYXR0cmlidXRlIHZlYzIgYVNjYWxlOycsXG4gICAgICAgICAgICAnYXR0cmlidXRlIGZsb2F0IGFSb3RhdGlvbjsnLFxuXG4gICAgICAgICAgICAndW5pZm9ybSBtYXQzIHByb2plY3Rpb25NYXRyaXg7JyxcblxuICAgICAgICAgICAgJ3ZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkOycsXG4gICAgICAgICAgICAndmFyeWluZyBmbG9hdCB2Q29sb3I7JyxcblxuICAgICAgICAgICAgJ3ZvaWQgbWFpbih2b2lkKXsnLFxuICAgICAgICAgICAgJyAgIHZlYzIgdiA9IGFWZXJ0ZXhQb3NpdGlvbjsnLFxuXG4gICAgICAgICAgICAnICAgdi54ID0gKGFWZXJ0ZXhQb3NpdGlvbi54KSAqIGNvcyhhUm90YXRpb24pIC0gKGFWZXJ0ZXhQb3NpdGlvbi55KSAqIHNpbihhUm90YXRpb24pOycsXG4gICAgICAgICAgICAnICAgdi55ID0gKGFWZXJ0ZXhQb3NpdGlvbi54KSAqIHNpbihhUm90YXRpb24pICsgKGFWZXJ0ZXhQb3NpdGlvbi55KSAqIGNvcyhhUm90YXRpb24pOycsXG4gICAgICAgICAgICAnICAgdiA9IHYgKyBhUG9zaXRpb25Db29yZDsnLFxuXG4gICAgICAgICAgICAnICAgZ2xfUG9zaXRpb24gPSB2ZWM0KChwcm9qZWN0aW9uTWF0cml4ICogdmVjMyh2LCAxLjApKS54eSwgMC4wLCAxLjApOycsXG5cbiAgICAgICAgICAgICcgICB2VGV4dHVyZUNvb3JkID0gYVRleHR1cmVDb29yZDsnLFxuICAgICAgICAgICAgJyAgIHZDb2xvciA9IGFDb2xvcjsnLFxuICAgICAgICAgICAgJ30nXG4gICAgICAgIF0uam9pbignXFxuJyksXG4gICAgICAgIC8vIGhlbGxvXG4gICAgICAgICBbXG4gICAgICAgICAgICAncHJlY2lzaW9uIGxvd3AgZmxvYXQ7JyxcblxuICAgICAgICAgICAgJ3ZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkOycsXG4gICAgICAgICAgICAndmFyeWluZyBmbG9hdCB2Q29sb3I7JyxcblxuICAgICAgICAgICAgJ3VuaWZvcm0gc2FtcGxlcjJEIHVTYW1wbGVyOycsXG4gICAgICAgICAgICAndW5pZm9ybSBmbG9hdCB1QWxwaGE7JyxcblxuICAgICAgICAgICAgJ3ZvaWQgbWFpbih2b2lkKXsnLFxuICAgICAgICAgICAgJyAgdmVjNCBjb2xvciA9IHRleHR1cmUyRCh1U2FtcGxlciwgdlRleHR1cmVDb29yZCkgKiB2Q29sb3IgKiB1QWxwaGE7JyxcbiAgICAgICAgICAgICcgIGlmIChjb2xvci5hID09IDAuMCkgZGlzY2FyZDsnLFxuICAgICAgICAgICAgJyAgZ2xfRnJhZ0NvbG9yID0gY29sb3I7JyxcbiAgICAgICAgICAgICd9J1xuICAgICAgICBdLmpvaW4oJ1xcbicpLFxuICAgICAgICAvLyBjdXN0b20gdW5pZm9ybXNcbiAgICAgICAge1xuICAgICAgICAgICAgdUFscGhhOiAgeyB0eXBlOiAnMWYnLCB2YWx1ZTogMSB9XG4gICAgICAgIH0sXG4gICAgICAgIC8vIGN1c3RvbSBhdHRyaWJ1dGVzXG4gICAgICAgIHtcbiAgICAgICAgICAgIGFQb3NpdGlvbkNvb3JkOiAwLFxuICAgICAgICAgICAvLyBhU2NhbGU6ICAgICAgICAgMCxcbiAgICAgICAgICAgIGFSb3RhdGlvbjogICAgICAwXG4gICAgICAgIH1cbiAgICApO1xuXG4gICAgLy8gVEVNUCBIQUNLXG5cbn1cblxuUGFydGljbGVTaGFkZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShUZXh0dXJlU2hhZGVyLnByb3RvdHlwZSk7XG5QYXJ0aWNsZVNoYWRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBQYXJ0aWNsZVNoYWRlcjtcblxubW9kdWxlLmV4cG9ydHMgPSBQYXJ0aWNsZVNoYWRlcjtcbiIsInZhciB1dGlscyA9IHJlcXVpcmUoJy4uL3V0aWxzJyksXG4gICAgbWF0aCA9IHJlcXVpcmUoJy4uL21hdGgnKSxcbiAgICBDT05TVCA9IHJlcXVpcmUoJy4uL2NvbnN0JyksXG4gICAgRXZlbnRFbWl0dGVyID0gcmVxdWlyZSgnZXZlbnRlbWl0dGVyMycpO1xuXG4vKipcbiAqIFRoZSBDYW52YXNSZW5kZXJlciBkcmF3cyB0aGUgc2NlbmUgYW5kIGFsbCBpdHMgY29udGVudCBvbnRvIGEgMmQgY2FudmFzLiBUaGlzIHJlbmRlcmVyIHNob3VsZCBiZSB1c2VkIGZvciBicm93c2VycyB0aGF0IGRvIG5vdCBzdXBwb3J0IHdlYkdMLlxuICogRG9uJ3QgZm9yZ2V0IHRvIGFkZCB0aGUgQ2FudmFzUmVuZGVyZXIudmlldyB0byB5b3VyIERPTSBvciB5b3Ugd2lsbCBub3Qgc2VlIGFueXRoaW5nIDopXG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIHN5c3RlbSB7c3RyaW5nfSBUaGUgbmFtZSBvZiB0aGUgc3lzdGVtIHRoaXMgcmVuZGVyZXIgaXMgZm9yLlxuICogQHBhcmFtIFt3aWR0aD04MDBdIHtudW1iZXJ9IHRoZSB3aWR0aCBvZiB0aGUgY2FudmFzIHZpZXdcbiAqIEBwYXJhbSBbaGVpZ2h0PTYwMF0ge251bWJlcn0gdGhlIGhlaWdodCBvZiB0aGUgY2FudmFzIHZpZXdcbiAqIEBwYXJhbSBbb3B0aW9uc10ge29iamVjdH0gVGhlIG9wdGlvbmFsIHJlbmRlcmVyIHBhcmFtZXRlcnNcbiAqIEBwYXJhbSBbb3B0aW9ucy52aWV3XSB7SFRNTENhbnZhc0VsZW1lbnR9IHRoZSBjYW52YXMgdG8gdXNlIGFzIGEgdmlldywgb3B0aW9uYWxcbiAqIEBwYXJhbSBbb3B0aW9ucy50cmFuc3BhcmVudD1mYWxzZV0ge2Jvb2xlYW59IElmIHRoZSByZW5kZXIgdmlldyBpcyB0cmFuc3BhcmVudCwgZGVmYXVsdCBmYWxzZVxuICogQHBhcmFtIFtvcHRpb25zLmF1dG9SZXNpemU9ZmFsc2VdIHtib29sZWFufSBJZiB0aGUgcmVuZGVyIHZpZXcgaXMgYXV0b21hdGljYWxseSByZXNpemVkLCBkZWZhdWx0IGZhbHNlXG4gKiBAcGFyYW0gW29wdGlvbnMuYW50aWFsaWFzPWZhbHNlXSB7Ym9vbGVhbn0gc2V0cyBhbnRpYWxpYXMgKG9ubHkgYXBwbGljYWJsZSBpbiBjaHJvbWUgYXQgdGhlIG1vbWVudClcbiAqIEBwYXJhbSBbb3B0aW9ucy5yZXNvbHV0aW9uPTFdIHtudW1iZXJ9IHRoZSByZXNvbHV0aW9uIG9mIHRoZSByZW5kZXJlciByZXRpbmEgd291bGQgYmUgMlxuICogQHBhcmFtIFtvcHRpb25zLmNsZWFyQmVmb3JlUmVuZGVyPXRydWVdIHtib29sZWFufSBUaGlzIHNldHMgaWYgdGhlIENhbnZhc1JlbmRlcmVyIHdpbGwgY2xlYXIgdGhlIGNhbnZhcyBvclxuICogICAgICBub3QgYmVmb3JlIHRoZSBuZXcgcmVuZGVyIHBhc3MuXG4gKiBAcGFyYW0gW29wdGlvbnMuYmFja2dyb3VuZENvbG9yPTB4MDAwMDAwXSB7bnVtYmVyfSBUaGUgYmFja2dyb3VuZCBjb2xvciBvZiB0aGUgcmVuZGVyZWQgYXJlYSAoc2hvd24gaWYgbm90IHRyYW5zcGFyZW50KS5cbiAqIEBwYXJhbSBbb3B0aW9ucy5yb3VuZFBpeGVscz1mYWxzZV0ge2Jvb2xlYW59IElmIHRydWUgUGl4aSB3aWxsIE1hdGguZmxvb3IoKSB4L3kgdmFsdWVzIHdoZW4gcmVuZGVyaW5nLCBzdG9wcGluZyBwaXhlbCBpbnRlcnBvbGF0aW9uLlxuICovXG5mdW5jdGlvbiBTeXN0ZW1SZW5kZXJlcihzeXN0ZW0sIHdpZHRoLCBoZWlnaHQsIG9wdGlvbnMpXG57XG4gICAgRXZlbnRFbWl0dGVyLmNhbGwodGhpcyk7XG5cbiAgICB1dGlscy5zYXlIZWxsbyhzeXN0ZW0pO1xuXG4gICAgLy8gcHJlcGFyZSBvcHRpb25zXG4gICAgaWYgKG9wdGlvbnMpXG4gICAge1xuICAgICAgICBmb3IgKHZhciBpIGluIENPTlNULkRFRkFVTFRfUkVOREVSX09QVElPTlMpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGlmICh0eXBlb2Ygb3B0aW9uc1tpXSA9PT0gJ3VuZGVmaW5lZCcpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgb3B0aW9uc1tpXSA9IENPTlNULkRFRkFVTFRfUkVOREVSX09QVElPTlNbaV07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgb3B0aW9ucyA9IENPTlNULkRFRkFVTFRfUkVOREVSX09QVElPTlM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhlIHR5cGUgb2YgdGhlIHJlbmRlcmVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IFBJWEkuUkVOREVSRVJfVFlQRS5VTktOT1dOXG4gICAgICogQHNlZSBQSVhJLlJFTkRFUkVSX1RZUEVcbiAgICAgKi9cbiAgICB0aGlzLnR5cGUgPSBDT05TVC5SRU5ERVJFUl9UWVBFLlVOS05PV047XG5cbiAgICAvKipcbiAgICAgKiBUaGUgd2lkdGggb2YgdGhlIGNhbnZhcyB2aWV3XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgODAwXG4gICAgICovXG4gICAgdGhpcy53aWR0aCA9IHdpZHRoIHx8IDgwMDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBoZWlnaHQgb2YgdGhlIGNhbnZhcyB2aWV3XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgNjAwXG4gICAgICovXG4gICAgdGhpcy5oZWlnaHQgPSBoZWlnaHQgfHwgNjAwO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGNhbnZhcyBlbGVtZW50IHRoYXQgZXZlcnl0aGluZyBpcyBkcmF3biB0b1xuICAgICAqXG4gICAgICogQG1lbWJlciB7SFRNTENhbnZhc0VsZW1lbnR9XG4gICAgICovXG4gICAgdGhpcy52aWV3ID0gb3B0aW9ucy52aWV3IHx8IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NhbnZhcycpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHJlc29sdXRpb24gb2YgdGhlIHJlbmRlcmVyXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMVxuICAgICAqL1xuICAgIHRoaXMucmVzb2x1dGlvbiA9IG9wdGlvbnMucmVzb2x1dGlvbjtcblxuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgdGhlIHJlbmRlciB2aWV3IGlzIHRyYW5zcGFyZW50XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqL1xuICAgIHRoaXMudHJhbnNwYXJlbnQgPSBvcHRpb25zLnRyYW5zcGFyZW50O1xuXG4gICAgLyoqXG4gICAgICogV2hldGhlciB0aGUgcmVuZGVyIHZpZXcgc2hvdWxkIGJlIHJlc2l6ZWQgYXV0b21hdGljYWxseVxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKi9cbiAgICB0aGlzLmF1dG9SZXNpemUgPSBvcHRpb25zLmF1dG9SZXNpemUgfHwgZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBUcmFja3MgdGhlIGJsZW5kIG1vZGVzIHVzZWZ1bCBmb3IgdGhpcyByZW5kZXJlci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge29iamVjdDxzdHJpbmcsIG1peGVkPn1cbiAgICAgKi9cbiAgICB0aGlzLmJsZW5kTW9kZXMgPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHZhbHVlIG9mIHRoZSBwcmVzZXJ2ZURyYXdpbmdCdWZmZXIgZmxhZyBhZmZlY3RzIHdoZXRoZXIgb3Igbm90IHRoZSBjb250ZW50cyBvZiB0aGUgc3RlbmNpbCBidWZmZXIgaXMgcmV0YWluZWQgYWZ0ZXIgcmVuZGVyaW5nLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKi9cbiAgICB0aGlzLnByZXNlcnZlRHJhd2luZ0J1ZmZlciA9IG9wdGlvbnMucHJlc2VydmVEcmF3aW5nQnVmZmVyO1xuXG4gICAgLyoqXG4gICAgICogVGhpcyBzZXRzIGlmIHRoZSBDYW52YXNSZW5kZXJlciB3aWxsIGNsZWFyIHRoZSBjYW52YXMgb3Igbm90IGJlZm9yZSB0aGUgbmV3IHJlbmRlciBwYXNzLlxuICAgICAqIElmIHRoZSBzY2VuZSBpcyBOT1QgdHJhbnNwYXJlbnQgUGl4aSB3aWxsIHVzZSBhIGNhbnZhcyBzaXplZCBmaWxsUmVjdCBvcGVyYXRpb24gZXZlcnkgZnJhbWUgdG8gc2V0IHRoZSBjYW52YXMgYmFja2dyb3VuZCBjb2xvci5cbiAgICAgKiBJZiB0aGUgc2NlbmUgaXMgdHJhbnNwYXJlbnQgUGl4aSB3aWxsIHVzZSBjbGVhclJlY3QgdG8gY2xlYXIgdGhlIGNhbnZhcyBldmVyeSBmcmFtZS5cbiAgICAgKiBEaXNhYmxlIHRoaXMgYnkgc2V0dGluZyB0aGlzIHRvIGZhbHNlLiBGb3IgZXhhbXBsZSBpZiB5b3VyIGdhbWUgaGFzIGEgY2FudmFzIGZpbGxpbmcgYmFja2dyb3VuZCBpbWFnZSB5b3Ugb2Z0ZW4gZG9uJ3QgbmVlZCB0aGlzIHNldC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICogQGRlZmF1bHRcbiAgICAgKi9cbiAgICB0aGlzLmNsZWFyQmVmb3JlUmVuZGVyID0gb3B0aW9ucy5jbGVhckJlZm9yZVJlbmRlcjtcblxuICAgIC8qKlxuICAgICAqIElmIHRydWUgUGl4aSB3aWxsIE1hdGguZmxvb3IoKSB4L3kgdmFsdWVzIHdoZW4gcmVuZGVyaW5nLCBzdG9wcGluZyBwaXhlbCBpbnRlcnBvbGF0aW9uLlxuICAgICAqIEhhbmR5IGZvciBjcmlzcCBwaXhlbCBhcnQgYW5kIHNwZWVkIG9uIGxlZ2FjeSBkZXZpY2VzLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKi9cbiAgICB0aGlzLnJvdW5kUGl4ZWxzID0gb3B0aW9ucy5yb3VuZFBpeGVscztcblxuICAgIC8qKlxuICAgICAqIFRoZSBiYWNrZ3JvdW5kIGNvbG9yIGFzIGEgbnVtYmVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fYmFja2dyb3VuZENvbG9yID0gMHgwMDAwMDA7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYmFja2dyb3VuZCBjb2xvciBhcyBhbiBbUiwgRywgQl0gYXJyYXkuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJbXX1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX2JhY2tncm91bmRDb2xvclJnYmEgPSBbMCwgMCwgMCwgMF07XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYmFja2dyb3VuZCBjb2xvciBhcyBhIHN0cmluZy5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge3N0cmluZ31cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX2JhY2tncm91bmRDb2xvclN0cmluZyA9ICcjMDAwMDAwJztcblxuICAgIHRoaXMuYmFja2dyb3VuZENvbG9yID0gb3B0aW9ucy5iYWNrZ3JvdW5kQ29sb3IgfHwgdGhpcy5fYmFja2dyb3VuZENvbG9yOyAvLyBydW4gYmcgY29sb3Igc2V0dGVyXG5cbiAgICAvKipcbiAgICAgKiBUaGlzIHRlbXBvcmFyeSBkaXNwbGF5IG9iamVjdCB1c2VkIGFzIHRoZSBwYXJlbnQgb2YgdGhlIGN1cnJlbnRseSBiZWluZyByZW5kZXJlZCBpdGVtXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLkRpc3BsYXlPYmplY3R9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl90ZW1wRGlzcGxheU9iamVjdFBhcmVudCA9IHt3b3JsZFRyYW5zZm9ybTpuZXcgbWF0aC5NYXRyaXgoKSwgd29ybGRBbHBoYToxLCBjaGlsZHJlbjpbXX07XG5cbiAgICAvKipcbiAgICAgKiBUaGUgbGFzdCByb290IG9iamVjdCB0aGF0IHRoZSByZW5kZXJlciB0cmllZCB0byByZW5kZXIuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLkRpc3BsYXlPYmplY3R9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9sYXN0T2JqZWN0UmVuZGVyZWQgPSB0aGlzLl90ZW1wRGlzcGxheU9iamVjdFBhcmVudDtcbn1cblxuLy8gY29uc3RydWN0b3JcblN5c3RlbVJlbmRlcmVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoRXZlbnRFbWl0dGVyLnByb3RvdHlwZSk7XG5TeXN0ZW1SZW5kZXJlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBTeXN0ZW1SZW5kZXJlcjtcbm1vZHVsZS5leHBvcnRzID0gU3lzdGVtUmVuZGVyZXI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKFN5c3RlbVJlbmRlcmVyLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFRoZSBiYWNrZ3JvdW5kIGNvbG9yIHRvIGZpbGwgaWYgbm90IHRyYW5zcGFyZW50XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuU3lzdGVtUmVuZGVyZXIjXG4gICAgICovXG4gICAgYmFja2dyb3VuZENvbG9yOlxuICAgIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fYmFja2dyb3VuZENvbG9yO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWwpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuX2JhY2tncm91bmRDb2xvciA9IHZhbDtcbiAgICAgICAgICAgIHRoaXMuX2JhY2tncm91bmRDb2xvclN0cmluZyA9IHV0aWxzLmhleDJzdHJpbmcodmFsKTtcbiAgICAgICAgICAgIHV0aWxzLmhleDJyZ2IodmFsLCB0aGlzLl9iYWNrZ3JvdW5kQ29sb3JSZ2JhKTtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuXG4vKipcbiAqIFJlc2l6ZXMgdGhlIGNhbnZhcyB2aWV3IHRvIHRoZSBzcGVjaWZpZWQgd2lkdGggYW5kIGhlaWdodFxuICpcbiAqIEBwYXJhbSB3aWR0aCB7bnVtYmVyfSB0aGUgbmV3IHdpZHRoIG9mIHRoZSBjYW52YXMgdmlld1xuICogQHBhcmFtIGhlaWdodCB7bnVtYmVyfSB0aGUgbmV3IGhlaWdodCBvZiB0aGUgY2FudmFzIHZpZXdcbiAqL1xuU3lzdGVtUmVuZGVyZXIucHJvdG90eXBlLnJlc2l6ZSA9IGZ1bmN0aW9uICh3aWR0aCwgaGVpZ2h0KSB7XG4gICAgdGhpcy53aWR0aCA9IHdpZHRoICogdGhpcy5yZXNvbHV0aW9uO1xuICAgIHRoaXMuaGVpZ2h0ID0gaGVpZ2h0ICogdGhpcy5yZXNvbHV0aW9uO1xuXG4gICAgdGhpcy52aWV3LndpZHRoID0gdGhpcy53aWR0aDtcbiAgICB0aGlzLnZpZXcuaGVpZ2h0ID0gdGhpcy5oZWlnaHQ7XG5cbiAgICBpZiAodGhpcy5hdXRvUmVzaXplKVxuICAgIHtcbiAgICAgICAgdGhpcy52aWV3LnN0eWxlLndpZHRoID0gdGhpcy53aWR0aCAvIHRoaXMucmVzb2x1dGlvbiArICdweCc7XG4gICAgICAgIHRoaXMudmlldy5zdHlsZS5oZWlnaHQgPSB0aGlzLmhlaWdodCAvIHRoaXMucmVzb2x1dGlvbiArICdweCc7XG4gICAgfVxufTtcblxuLyoqXG4gKiBSZW1vdmVzIGV2ZXJ5dGhpbmcgZnJvbSB0aGUgcmVuZGVyZXIgYW5kIG9wdGlvbmFsbHkgcmVtb3ZlcyB0aGUgQ2FudmFzIERPTSBlbGVtZW50LlxuICpcbiAqIEBwYXJhbSBbcmVtb3ZlVmlldz1mYWxzZV0ge2Jvb2xlYW59IFJlbW92ZXMgdGhlIENhbnZhcyBlbGVtZW50IGZyb20gdGhlIERPTS5cbiAqL1xuU3lzdGVtUmVuZGVyZXIucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAocmVtb3ZlVmlldykge1xuICAgIGlmIChyZW1vdmVWaWV3ICYmIHRoaXMudmlldy5wYXJlbnROb2RlKVxuICAgIHtcbiAgICAgICAgdGhpcy52aWV3LnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodGhpcy52aWV3KTtcbiAgICB9XG5cbiAgICB0aGlzLnR5cGUgPSBDT05TVC5SRU5ERVJFUl9UWVBFLlVOS05PV047XG5cbiAgICB0aGlzLndpZHRoID0gMDtcbiAgICB0aGlzLmhlaWdodCA9IDA7XG5cbiAgICB0aGlzLnZpZXcgPSBudWxsO1xuXG4gICAgdGhpcy5yZXNvbHV0aW9uID0gMDtcblxuICAgIHRoaXMudHJhbnNwYXJlbnQgPSBmYWxzZTtcblxuICAgIHRoaXMuYXV0b1Jlc2l6ZSA9IGZhbHNlO1xuXG4gICAgdGhpcy5ibGVuZE1vZGVzID0gbnVsbDtcblxuICAgIHRoaXMucHJlc2VydmVEcmF3aW5nQnVmZmVyID0gZmFsc2U7XG4gICAgdGhpcy5jbGVhckJlZm9yZVJlbmRlciA9IGZhbHNlO1xuXG4gICAgdGhpcy5yb3VuZFBpeGVscyA9IGZhbHNlO1xuXG4gICAgdGhpcy5fYmFja2dyb3VuZENvbG9yID0gMDtcbiAgICB0aGlzLl9iYWNrZ3JvdW5kQ29sb3JSZ2JhID0gbnVsbDtcbiAgICB0aGlzLl9iYWNrZ3JvdW5kQ29sb3JTdHJpbmcgPSBudWxsO1xufTtcbiIsInZhciBTeXN0ZW1SZW5kZXJlciA9IHJlcXVpcmUoJy4uL1N5c3RlbVJlbmRlcmVyJyksXG4gICAgQ2FudmFzTWFza01hbmFnZXIgPSByZXF1aXJlKCcuL3V0aWxzL0NhbnZhc01hc2tNYW5hZ2VyJyksXG4gICAgdXRpbHMgPSByZXF1aXJlKCcuLi8uLi91dGlscycpLFxuICAgIG1hdGggPSByZXF1aXJlKCcuLi8uLi9tYXRoJyksXG4gICAgQ09OU1QgPSByZXF1aXJlKCcuLi8uLi9jb25zdCcpO1xuXG4vKipcbiAqIFRoZSBDYW52YXNSZW5kZXJlciBkcmF3cyB0aGUgc2NlbmUgYW5kIGFsbCBpdHMgY29udGVudCBvbnRvIGEgMmQgY2FudmFzLiBUaGlzIHJlbmRlcmVyIHNob3VsZCBiZSB1c2VkIGZvciBicm93c2VycyB0aGF0IGRvIG5vdCBzdXBwb3J0IHdlYkdMLlxuICogRG9uJ3QgZm9yZ2V0IHRvIGFkZCB0aGUgQ2FudmFzUmVuZGVyZXIudmlldyB0byB5b3VyIERPTSBvciB5b3Ugd2lsbCBub3Qgc2VlIGFueXRoaW5nIDopXG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQGV4dGVuZHMgUElYSS5TeXN0ZW1SZW5kZXJlclxuICogQHBhcmFtIFt3aWR0aD04MDBdIHtudW1iZXJ9IHRoZSB3aWR0aCBvZiB0aGUgY2FudmFzIHZpZXdcbiAqIEBwYXJhbSBbaGVpZ2h0PTYwMF0ge251bWJlcn0gdGhlIGhlaWdodCBvZiB0aGUgY2FudmFzIHZpZXdcbiAqIEBwYXJhbSBbb3B0aW9uc10ge29iamVjdH0gVGhlIG9wdGlvbmFsIHJlbmRlcmVyIHBhcmFtZXRlcnNcbiAqIEBwYXJhbSBbb3B0aW9ucy52aWV3XSB7SFRNTENhbnZhc0VsZW1lbnR9IHRoZSBjYW52YXMgdG8gdXNlIGFzIGEgdmlldywgb3B0aW9uYWxcbiAqIEBwYXJhbSBbb3B0aW9ucy50cmFuc3BhcmVudD1mYWxzZV0ge2Jvb2xlYW59IElmIHRoZSByZW5kZXIgdmlldyBpcyB0cmFuc3BhcmVudCwgZGVmYXVsdCBmYWxzZVxuICogQHBhcmFtIFtvcHRpb25zLmF1dG9SZXNpemU9ZmFsc2VdIHtib29sZWFufSBJZiB0aGUgcmVuZGVyIHZpZXcgaXMgYXV0b21hdGljYWxseSByZXNpemVkLCBkZWZhdWx0IGZhbHNlXG4gKiBAcGFyYW0gW29wdGlvbnMuYW50aWFsaWFzPWZhbHNlXSB7Ym9vbGVhbn0gc2V0cyBhbnRpYWxpYXMgKG9ubHkgYXBwbGljYWJsZSBpbiBjaHJvbWUgYXQgdGhlIG1vbWVudClcbiAqIEBwYXJhbSBbb3B0aW9ucy5yZXNvbHV0aW9uPTFdIHtudW1iZXJ9IHRoZSByZXNvbHV0aW9uIG9mIHRoZSByZW5kZXJlciByZXRpbmEgd291bGQgYmUgMlxuICogQHBhcmFtIFtvcHRpb25zLmNsZWFyQmVmb3JlUmVuZGVyPXRydWVdIHtib29sZWFufSBUaGlzIHNldHMgaWYgdGhlIENhbnZhc1JlbmRlcmVyIHdpbGwgY2xlYXIgdGhlIGNhbnZhcyBvclxuICogICAgICBub3QgYmVmb3JlIHRoZSBuZXcgcmVuZGVyIHBhc3MuXG4gKiBAcGFyYW0gW29wdGlvbnMucm91bmRQaXhlbHM9ZmFsc2VdIHtib29sZWFufSBJZiB0cnVlIFBpeGkgd2lsbCBNYXRoLmZsb29yKCkgeC95IHZhbHVlcyB3aGVuIHJlbmRlcmluZywgc3RvcHBpbmcgcGl4ZWwgaW50ZXJwb2xhdGlvbi5cbiAqL1xuZnVuY3Rpb24gQ2FudmFzUmVuZGVyZXIod2lkdGgsIGhlaWdodCwgb3B0aW9ucylcbntcbiAgICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcblxuICAgIFN5c3RlbVJlbmRlcmVyLmNhbGwodGhpcywgJ0NhbnZhcycsIHdpZHRoLCBoZWlnaHQsIG9wdGlvbnMpO1xuXG4gICAgdGhpcy50eXBlID0gQ09OU1QuUkVOREVSRVJfVFlQRS5DQU5WQVM7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgY2FudmFzIDJkIGNvbnRleHQgdGhhdCBldmVyeXRoaW5nIGlzIGRyYXduIHdpdGguXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtDYW52YXNSZW5kZXJpbmdDb250ZXh0MkR9XG4gICAgICovXG4gICAgdGhpcy5jb250ZXh0ID0gdGhpcy52aWV3LmdldENvbnRleHQoJzJkJywgeyBhbHBoYTogdGhpcy50cmFuc3BhcmVudCB9KTtcblxuICAgIC8qKlxuICAgICAqIEJvb2xlYW4gZmxhZyBjb250cm9sbGluZyBjYW52YXMgcmVmcmVzaC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICovXG4gICAgdGhpcy5yZWZyZXNoID0gdHJ1ZTtcblxuICAgIC8qKlxuICAgICAqIEluc3RhbmNlIG9mIGEgQ2FudmFzTWFza01hbmFnZXIsIGhhbmRsZXMgbWFza2luZyB3aGVuIHVzaW5nIHRoZSBjYW52YXMgcmVuZGVyZXIuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLkNhbnZhc01hc2tNYW5hZ2VyfVxuICAgICAqL1xuICAgIHRoaXMubWFza01hbmFnZXIgPSBuZXcgQ2FudmFzTWFza01hbmFnZXIoKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBjYW52YXMgcHJvcGVydHkgdXNlZCB0byBzZXQgdGhlIGNhbnZhcyBzbW9vdGhpbmcgcHJvcGVydHkuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtzdHJpbmd9XG4gICAgICovXG4gICAgdGhpcy5zbW9vdGhQcm9wZXJ0eSA9ICdpbWFnZVNtb290aGluZ0VuYWJsZWQnO1xuXG4gICAgaWYgKCF0aGlzLmNvbnRleHQuaW1hZ2VTbW9vdGhpbmdFbmFibGVkKVxuICAgIHtcbiAgICAgICAgaWYgKHRoaXMuY29udGV4dC53ZWJraXRJbWFnZVNtb290aGluZ0VuYWJsZWQpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuc21vb3RoUHJvcGVydHkgPSAnd2Via2l0SW1hZ2VTbW9vdGhpbmdFbmFibGVkJztcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh0aGlzLmNvbnRleHQubW96SW1hZ2VTbW9vdGhpbmdFbmFibGVkKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnNtb290aFByb3BlcnR5ID0gJ21vekltYWdlU21vb3RoaW5nRW5hYmxlZCc7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodGhpcy5jb250ZXh0Lm9JbWFnZVNtb290aGluZ0VuYWJsZWQpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuc21vb3RoUHJvcGVydHkgPSAnb0ltYWdlU21vb3RoaW5nRW5hYmxlZCc7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodGhpcy5jb250ZXh0Lm1zSW1hZ2VTbW9vdGhpbmdFbmFibGVkKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnNtb290aFByb3BlcnR5ID0gJ21zSW1hZ2VTbW9vdGhpbmdFbmFibGVkJztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMuaW5pdFBsdWdpbnMoKTtcblxuICAgIHRoaXMuX21hcEJsZW5kTW9kZXMoKTtcblxuICAgIC8qKlxuICAgICAqIFRoaXMgdGVtcG9yYXJ5IGRpc3BsYXkgb2JqZWN0IHVzZWQgYXMgdGhlIHBhcmVudCBvZiB0aGUgY3VycmVudGx5IGJlaW5nIHJlbmRlcmVkIGl0ZW1cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuRGlzcGxheU9iamVjdH1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX3RlbXBEaXNwbGF5T2JqZWN0UGFyZW50ID0ge1xuICAgICAgICB3b3JsZFRyYW5zZm9ybTogbmV3IG1hdGguTWF0cml4KCksXG4gICAgICAgIHdvcmxkQWxwaGE6IDFcbiAgICB9O1xuXG5cbiAgICB0aGlzLnJlc2l6ZSh3aWR0aCwgaGVpZ2h0KTtcbn1cblxuLy8gY29uc3RydWN0b3JcbkNhbnZhc1JlbmRlcmVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoU3lzdGVtUmVuZGVyZXIucHJvdG90eXBlKTtcbkNhbnZhc1JlbmRlcmVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IENhbnZhc1JlbmRlcmVyO1xubW9kdWxlLmV4cG9ydHMgPSBDYW52YXNSZW5kZXJlcjtcbnV0aWxzLnBsdWdpblRhcmdldC5taXhpbihDYW52YXNSZW5kZXJlcik7XG5cbi8qKlxuICogUmVuZGVycyB0aGUgb2JqZWN0IHRvIHRoaXMgY2FudmFzIHZpZXdcbiAqXG4gKiBAcGFyYW0gb2JqZWN0IHtQSVhJLkRpc3BsYXlPYmplY3R9IHRoZSBvYmplY3QgdG8gYmUgcmVuZGVyZWRcbiAqL1xuQ2FudmFzUmVuZGVyZXIucHJvdG90eXBlLnJlbmRlciA9IGZ1bmN0aW9uIChvYmplY3QpXG57XG4gICAgdGhpcy5lbWl0KCdwcmVyZW5kZXInKTtcblxuICAgIHZhciBjYWNoZVBhcmVudCA9IG9iamVjdC5wYXJlbnQ7XG5cbiAgICB0aGlzLl9sYXN0T2JqZWN0UmVuZGVyZWQgPSBvYmplY3Q7XG5cbiAgICBvYmplY3QucGFyZW50ID0gdGhpcy5fdGVtcERpc3BsYXlPYmplY3RQYXJlbnQ7XG5cbiAgICAvLyB1cGRhdGUgdGhlIHNjZW5lIGdyYXBoXG4gICAgb2JqZWN0LnVwZGF0ZVRyYW5zZm9ybSgpO1xuXG4gICAgb2JqZWN0LnBhcmVudCA9IGNhY2hlUGFyZW50O1xuXG4gICAgdGhpcy5jb250ZXh0LnNldFRyYW5zZm9ybSgxLCAwLCAwLCAxLCAwLCAwKTtcblxuICAgIHRoaXMuY29udGV4dC5nbG9iYWxBbHBoYSA9IDE7XG5cbiAgICB0aGlzLmNvbnRleHQuZ2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uID0gdGhpcy5ibGVuZE1vZGVzW0NPTlNULkJMRU5EX01PREVTLk5PUk1BTF07XG5cbiAgICBpZiAobmF2aWdhdG9yLmlzQ29jb29uSlMgJiYgdGhpcy52aWV3LnNjcmVlbmNhbnZhcylcbiAgICB7XG4gICAgICAgIHRoaXMuY29udGV4dC5maWxsU3R5bGUgPSAnYmxhY2snO1xuICAgICAgICB0aGlzLmNvbnRleHQuY2xlYXIoKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5jbGVhckJlZm9yZVJlbmRlcilcbiAgICB7XG4gICAgICAgIGlmICh0aGlzLnRyYW5zcGFyZW50KVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmNvbnRleHQuY2xlYXJSZWN0KDAsIDAsIHRoaXMud2lkdGgsIHRoaXMuaGVpZ2h0KTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuY29udGV4dC5maWxsU3R5bGUgPSB0aGlzLl9iYWNrZ3JvdW5kQ29sb3JTdHJpbmc7XG4gICAgICAgICAgICB0aGlzLmNvbnRleHQuZmlsbFJlY3QoMCwgMCwgdGhpcy53aWR0aCAsIHRoaXMuaGVpZ2h0KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMucmVuZGVyRGlzcGxheU9iamVjdChvYmplY3QsIHRoaXMuY29udGV4dCk7XG5cbiAgICB0aGlzLmVtaXQoJ3Bvc3RyZW5kZXInKTtcbn07XG5cbi8qKlxuICogUmVtb3ZlcyBldmVyeXRoaW5nIGZyb20gdGhlIHJlbmRlcmVyIGFuZCBvcHRpb25hbGx5IHJlbW92ZXMgdGhlIENhbnZhcyBET00gZWxlbWVudC5cbiAqXG4gKiBAcGFyYW0gW3JlbW92ZVZpZXc9ZmFsc2VdIHtib29sZWFufSBSZW1vdmVzIHRoZSBDYW52YXMgZWxlbWVudCBmcm9tIHRoZSBET00uXG4gKi9cbkNhbnZhc1JlbmRlcmVyLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKHJlbW92ZVZpZXcpXG57XG4gICAgdGhpcy5kZXN0cm95UGx1Z2lucygpO1xuXG4gICAgLy8gY2FsbCB0aGUgYmFzZSBkZXN0cm95XG4gICAgU3lzdGVtUmVuZGVyZXIucHJvdG90eXBlLmRlc3Ryb3kuY2FsbCh0aGlzLCByZW1vdmVWaWV3KTtcblxuICAgIHRoaXMuY29udGV4dCA9IG51bGw7XG5cbiAgICB0aGlzLnJlZnJlc2ggPSB0cnVlO1xuXG4gICAgdGhpcy5tYXNrTWFuYWdlci5kZXN0cm95KCk7XG4gICAgdGhpcy5tYXNrTWFuYWdlciA9IG51bGw7XG5cbiAgICB0aGlzLnNtb290aFByb3BlcnR5ID0gbnVsbDtcbn07XG5cbi8qKlxuICogUmVuZGVycyBhIGRpc3BsYXkgb2JqZWN0XG4gKlxuICogQHBhcmFtIGRpc3BsYXlPYmplY3Qge1BJWEkuRGlzcGxheU9iamVjdH0gVGhlIGRpc3BsYXlPYmplY3QgdG8gcmVuZGVyXG4gKiBAcHJpdmF0ZVxuICovXG5DYW52YXNSZW5kZXJlci5wcm90b3R5cGUucmVuZGVyRGlzcGxheU9iamVjdCA9IGZ1bmN0aW9uIChkaXNwbGF5T2JqZWN0LCBjb250ZXh0KVxue1xuICAgIHZhciB0ZW1wQ29udGV4dCA9IHRoaXMuY29udGV4dDtcblxuICAgIHRoaXMuY29udGV4dCA9IGNvbnRleHQ7XG4gICAgZGlzcGxheU9iamVjdC5yZW5kZXJDYW52YXModGhpcyk7XG4gICAgdGhpcy5jb250ZXh0ID0gdGVtcENvbnRleHQ7XG59O1xuXG4vKipcbiAqIEBleHRlbmRzIFBJWEkuU3lzdGVtUmVuZGVyZXIjcmVzaXplXG4gKlxuICogQHBhcmFtIHtudW1iZXJ9IHdcbiAqIEBwYXJhbSB7bnVtYmVyfSBoXG4gKi9cbkNhbnZhc1JlbmRlcmVyLnByb3RvdHlwZS5yZXNpemUgPSBmdW5jdGlvbiAodywgaClcbntcbiAgICBTeXN0ZW1SZW5kZXJlci5wcm90b3R5cGUucmVzaXplLmNhbGwodGhpcywgdywgaCk7XG5cbiAgICAvL3Jlc2V0IHRoZSBzY2FsZSBtb2RlLi4gb2RkbHkgdGhpcyBzZWVtcyB0byBiZSByZXNldCB3aGVuIHRoZSBjYW52YXMgaXMgcmVzaXplZC5cbiAgICAvL3N1cmVseSBhIGJyb3dzZXIgYnVnPz8gTGV0IHBpeGkgZml4IHRoYXQgZm9yIHlvdS4uXG4gICAgaWYodGhpcy5zbW9vdGhQcm9wZXJ0eSlcbiAgICB7XG4gICAgICAgIHRoaXMuY29udGV4dFt0aGlzLnNtb290aFByb3BlcnR5XSA9IChDT05TVC5TQ0FMRV9NT0RFUy5ERUZBVUxUID09PSBDT05TVC5TQ0FMRV9NT0RFUy5MSU5FQVIpO1xuICAgIH1cblxufTtcblxuLyoqXG4gKiBNYXBzIFBpeGkgYmxlbmQgbW9kZXMgdG8gY2FudmFzIGJsZW5kIG1vZGVzLlxuICpcbiAqIEBwcml2YXRlXG4gKi9cbkNhbnZhc1JlbmRlcmVyLnByb3RvdHlwZS5fbWFwQmxlbmRNb2RlcyA9IGZ1bmN0aW9uICgpXG57XG4gICAgaWYgKCF0aGlzLmJsZW5kTW9kZXMpXG4gICAge1xuICAgICAgICB0aGlzLmJsZW5kTW9kZXMgPSB7fTtcblxuICAgICAgICBpZiAodXRpbHMuY2FuVXNlTmV3Q2FudmFzQmxlbmRNb2RlcygpKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuTk9STUFMXSAgICAgICAgPSAnc291cmNlLW92ZXInO1xuICAgICAgICAgICAgdGhpcy5ibGVuZE1vZGVzW0NPTlNULkJMRU5EX01PREVTLkFERF0gICAgICAgICAgID0gJ2xpZ2h0ZXInOyAvL0lTIFRISVMgT0s/Pz9cbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5NVUxUSVBMWV0gICAgICA9ICdtdWx0aXBseSc7XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuU0NSRUVOXSAgICAgICAgPSAnc2NyZWVuJztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5PVkVSTEFZXSAgICAgICA9ICdvdmVybGF5JztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5EQVJLRU5dICAgICAgICA9ICdkYXJrZW4nO1xuICAgICAgICAgICAgdGhpcy5ibGVuZE1vZGVzW0NPTlNULkJMRU5EX01PREVTLkxJR0hURU5dICAgICAgID0gJ2xpZ2h0ZW4nO1xuICAgICAgICAgICAgdGhpcy5ibGVuZE1vZGVzW0NPTlNULkJMRU5EX01PREVTLkNPTE9SX0RPREdFXSAgID0gJ2NvbG9yLWRvZGdlJztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5DT0xPUl9CVVJOXSAgICA9ICdjb2xvci1idXJuJztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5IQVJEX0xJR0hUXSAgICA9ICdoYXJkLWxpZ2h0JztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5TT0ZUX0xJR0hUXSAgICA9ICdzb2Z0LWxpZ2h0JztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5ESUZGRVJFTkNFXSAgICA9ICdkaWZmZXJlbmNlJztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5FWENMVVNJT05dICAgICA9ICdleGNsdXNpb24nO1xuICAgICAgICAgICAgdGhpcy5ibGVuZE1vZGVzW0NPTlNULkJMRU5EX01PREVTLkhVRV0gICAgICAgICAgID0gJ2h1ZSc7XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuU0FUVVJBVElPTl0gICAgPSAnc2F0dXJhdGUnO1xuICAgICAgICAgICAgdGhpcy5ibGVuZE1vZGVzW0NPTlNULkJMRU5EX01PREVTLkNPTE9SXSAgICAgICAgID0gJ2NvbG9yJztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5MVU1JTk9TSVRZXSAgICA9ICdsdW1pbm9zaXR5JztcbiAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgIHtcbiAgICAgICAgICAgIC8vIHRoaXMgbWVhbnMgdGhhdCB0aGUgYnJvd3NlciBkb2VzIG5vdCBzdXBwb3J0IHRoZSBjb29sIG5ldyBibGVuZCBtb2RlcyBpbiBjYW52YXMgJ2NvdWdoJyBpZSAnY291Z2gnXG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuTk9STUFMXSAgICAgICAgPSAnc291cmNlLW92ZXInO1xuICAgICAgICAgICAgdGhpcy5ibGVuZE1vZGVzW0NPTlNULkJMRU5EX01PREVTLkFERF0gICAgICAgICAgID0gJ2xpZ2h0ZXInOyAvL0lTIFRISVMgT0s/Pz9cbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5NVUxUSVBMWV0gICAgICA9ICdzb3VyY2Utb3Zlcic7XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuU0NSRUVOXSAgICAgICAgPSAnc291cmNlLW92ZXInO1xuICAgICAgICAgICAgdGhpcy5ibGVuZE1vZGVzW0NPTlNULkJMRU5EX01PREVTLk9WRVJMQVldICAgICAgID0gJ3NvdXJjZS1vdmVyJztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5EQVJLRU5dICAgICAgICA9ICdzb3VyY2Utb3Zlcic7XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuTElHSFRFTl0gICAgICAgPSAnc291cmNlLW92ZXInO1xuICAgICAgICAgICAgdGhpcy5ibGVuZE1vZGVzW0NPTlNULkJMRU5EX01PREVTLkNPTE9SX0RPREdFXSAgID0gJ3NvdXJjZS1vdmVyJztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5DT0xPUl9CVVJOXSAgICA9ICdzb3VyY2Utb3Zlcic7XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuSEFSRF9MSUdIVF0gICAgPSAnc291cmNlLW92ZXInO1xuICAgICAgICAgICAgdGhpcy5ibGVuZE1vZGVzW0NPTlNULkJMRU5EX01PREVTLlNPRlRfTElHSFRdICAgID0gJ3NvdXJjZS1vdmVyJztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5ESUZGRVJFTkNFXSAgICA9ICdzb3VyY2Utb3Zlcic7XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuRVhDTFVTSU9OXSAgICAgPSAnc291cmNlLW92ZXInO1xuICAgICAgICAgICAgdGhpcy5ibGVuZE1vZGVzW0NPTlNULkJMRU5EX01PREVTLkhVRV0gICAgICAgICAgID0gJ3NvdXJjZS1vdmVyJztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5TQVRVUkFUSU9OXSAgICA9ICdzb3VyY2Utb3Zlcic7XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuQ09MT1JdICAgICAgICAgPSAnc291cmNlLW92ZXInO1xuICAgICAgICAgICAgdGhpcy5ibGVuZE1vZGVzW0NPTlNULkJMRU5EX01PREVTLkxVTUlOT1NJVFldICAgID0gJ3NvdXJjZS1vdmVyJztcbiAgICAgICAgfVxuICAgIH1cbn07XG4iLCIvKipcbiAqIENyZWF0ZXMgYSBDYW52YXMgZWxlbWVudCBvZiB0aGUgZ2l2ZW4gc2l6ZS5cbiAqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gd2lkdGgge251bWJlcn0gdGhlIHdpZHRoIGZvciB0aGUgbmV3bHkgY3JlYXRlZCBjYW52YXNcbiAqIEBwYXJhbSBoZWlnaHQge251bWJlcn0gdGhlIGhlaWdodCBmb3IgdGhlIG5ld2x5IGNyZWF0ZWQgY2FudmFzXG4gKi9cbmZ1bmN0aW9uIENhbnZhc0J1ZmZlcih3aWR0aCwgaGVpZ2h0KVxue1xuICAgIC8qKlxuICAgICAqIFRoZSBDYW52YXMgb2JqZWN0IHRoYXQgYmVsb25ncyB0byB0aGlzIENhbnZhc0J1ZmZlci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge0hUTUxDYW52YXNFbGVtZW50fVxuICAgICAqL1xuICAgIHRoaXMuY2FudmFzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnY2FudmFzJyk7XG5cbiAgICAvKipcbiAgICAgKiBBIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRCBvYmplY3QgcmVwcmVzZW50aW5nIGEgdHdvLWRpbWVuc2lvbmFsIHJlbmRlcmluZyBjb250ZXh0LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEfVxuICAgICAqL1xuICAgIHRoaXMuY29udGV4dCA9IHRoaXMuY2FudmFzLmdldENvbnRleHQoJzJkJyk7XG5cbiAgICB0aGlzLmNhbnZhcy53aWR0aCA9IHdpZHRoO1xuICAgIHRoaXMuY2FudmFzLmhlaWdodCA9IGhlaWdodDtcbn1cblxuQ2FudmFzQnVmZmVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IENhbnZhc0J1ZmZlcjtcbm1vZHVsZS5leHBvcnRzID0gQ2FudmFzQnVmZmVyO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhDYW52YXNCdWZmZXIucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogVGhlIHdpZHRoIG9mIHRoZSBjYW52YXMgYnVmZmVyIGluIHBpeGVscy5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5DYW52YXNCdWZmZXIjXG4gICAgICovXG4gICAgd2lkdGg6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jYW52YXMud2lkdGg7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbClcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5jYW52YXMud2lkdGggPSB2YWw7XG4gICAgICAgIH1cbiAgICB9LFxuICAgIC8qKlxuICAgICAqIFRoZSBoZWlnaHQgb2YgdGhlIGNhbnZhcyBidWZmZXIgaW4gcGl4ZWxzLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLkNhbnZhc0J1ZmZlciNcbiAgICAgKi9cbiAgICBoZWlnaHQ6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jYW52YXMuaGVpZ2h0O1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWwpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuY2FudmFzLmhlaWdodCA9IHZhbDtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuXG4vKipcbiAqIENsZWFycyB0aGUgY2FudmFzIHRoYXQgd2FzIGNyZWF0ZWQgYnkgdGhlIENhbnZhc0J1ZmZlciBjbGFzcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5DYW52YXNCdWZmZXIucHJvdG90eXBlLmNsZWFyID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLmNvbnRleHQuc2V0VHJhbnNmb3JtKDEsIDAsIDAsIDEsIDAsIDApO1xuICAgIHRoaXMuY29udGV4dC5jbGVhclJlY3QoMCwwLCB0aGlzLmNhbnZhcy53aWR0aCwgdGhpcy5jYW52YXMuaGVpZ2h0KTtcbn07XG5cbi8qKlxuICogUmVzaXplcyB0aGUgY2FudmFzIHRvIHRoZSBzcGVjaWZpZWQgd2lkdGggYW5kIGhlaWdodC5cbiAqXG4gKiBAcGFyYW0gd2lkdGgge251bWJlcn0gdGhlIG5ldyB3aWR0aCBvZiB0aGUgY2FudmFzXG4gKiBAcGFyYW0gaGVpZ2h0IHtudW1iZXJ9IHRoZSBuZXcgaGVpZ2h0IG9mIHRoZSBjYW52YXNcbiAqL1xuQ2FudmFzQnVmZmVyLnByb3RvdHlwZS5yZXNpemUgPSBmdW5jdGlvbiAod2lkdGgsIGhlaWdodClcbntcbiAgICB0aGlzLmNhbnZhcy53aWR0aCA9IHdpZHRoO1xuICAgIHRoaXMuY2FudmFzLmhlaWdodCA9IGhlaWdodDtcbn07XG5cbi8qKlxuICogRGVzdHJveXMgdGhpcyBjYW52YXMuXG4gKlxuICovXG5DYW52YXNCdWZmZXIucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoKVxue1xuICAgIHRoaXMuY29udGV4dCA9IG51bGw7XG4gICAgdGhpcy5jYW52YXMgPSBudWxsO1xufTtcbiIsInZhciBDT05TVCA9IHJlcXVpcmUoJy4uLy4uLy4uL2NvbnN0Jyk7XG5cbi8qKlxuICogQSBzZXQgb2YgZnVuY3Rpb25zIHVzZWQgYnkgdGhlIGNhbnZhcyByZW5kZXJlciB0byBkcmF3IHRoZSBwcmltaXRpdmUgZ3JhcGhpY3MgZGF0YS5cbiAqIEBzdGF0aWNcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqL1xudmFyIENhbnZhc0dyYXBoaWNzID0ge307XG5tb2R1bGUuZXhwb3J0cyA9IENhbnZhc0dyYXBoaWNzO1xuXG4vKlxuICogUmVuZGVycyBhIEdyYXBoaWNzIG9iamVjdCB0byBhIGNhbnZhcy5cbiAqXG4gKiBAcGFyYW0gZ3JhcGhpY3Mge1BJWEkuR3JhcGhpY3N9IHRoZSBhY3R1YWwgZ3JhcGhpY3Mgb2JqZWN0IHRvIHJlbmRlclxuICogQHBhcmFtIGNvbnRleHQge0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRH0gdGhlIDJkIGRyYXdpbmcgbWV0aG9kIG9mIHRoZSBjYW52YXNcbiAqL1xuQ2FudmFzR3JhcGhpY3MucmVuZGVyR3JhcGhpY3MgPSBmdW5jdGlvbiAoZ3JhcGhpY3MsIGNvbnRleHQpXG57XG4gICAgdmFyIHdvcmxkQWxwaGEgPSBncmFwaGljcy53b3JsZEFscGhhO1xuXG4gICAgaWYgKGdyYXBoaWNzLmRpcnR5KVxuICAgIHtcbiAgICAgICAgdGhpcy51cGRhdGVHcmFwaGljc1RpbnQoZ3JhcGhpY3MpO1xuICAgICAgICBncmFwaGljcy5kaXJ0eSA9IGZhbHNlO1xuICAgIH1cblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZ3JhcGhpY3MuZ3JhcGhpY3NEYXRhLmxlbmd0aDsgaSsrKVxuICAgIHtcbiAgICAgICAgdmFyIGRhdGEgPSBncmFwaGljcy5ncmFwaGljc0RhdGFbaV07XG4gICAgICAgIHZhciBzaGFwZSA9IGRhdGEuc2hhcGU7XG5cbiAgICAgICAgdmFyIGZpbGxDb2xvciA9IGRhdGEuX2ZpbGxUaW50O1xuICAgICAgICB2YXIgbGluZUNvbG9yID0gZGF0YS5fbGluZVRpbnQ7XG5cbiAgICAgICAgY29udGV4dC5saW5lV2lkdGggPSBkYXRhLmxpbmVXaWR0aDtcblxuICAgICAgICBpZiAoZGF0YS50eXBlID09PSBDT05TVC5TSEFQRVMuUE9MWSlcbiAgICAgICAge1xuICAgICAgICAgICAgY29udGV4dC5iZWdpblBhdGgoKTtcblxuICAgICAgICAgICAgdmFyIHBvaW50cyA9IHNoYXBlLnBvaW50cztcblxuICAgICAgICAgICAgY29udGV4dC5tb3ZlVG8ocG9pbnRzWzBdLCBwb2ludHNbMV0pO1xuXG4gICAgICAgICAgICBmb3IgKHZhciBqPTE7IGogPCBwb2ludHMubGVuZ3RoLzI7IGorKylcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb250ZXh0LmxpbmVUbyhwb2ludHNbaiAqIDJdLCBwb2ludHNbaiAqIDIgKyAxXSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChzaGFwZS5jbG9zZWQpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29udGV4dC5saW5lVG8ocG9pbnRzWzBdLCBwb2ludHNbMV0pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBpZiB0aGUgZmlyc3QgYW5kIGxhc3QgcG9pbnQgYXJlIHRoZSBzYW1lIGNsb3NlIHRoZSBwYXRoIC0gbXVjaCBuZWF0ZXIgOilcbiAgICAgICAgICAgIGlmIChwb2ludHNbMF0gPT09IHBvaW50c1twb2ludHMubGVuZ3RoLTJdICYmIHBvaW50c1sxXSA9PT0gcG9pbnRzW3BvaW50cy5sZW5ndGgtMV0pXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29udGV4dC5jbG9zZVBhdGgoKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGRhdGEuZmlsbClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb250ZXh0Lmdsb2JhbEFscGhhID0gZGF0YS5maWxsQWxwaGEgKiB3b3JsZEFscGhhO1xuICAgICAgICAgICAgICAgIGNvbnRleHQuZmlsbFN0eWxlID0gJyMnICsgKCcwMDAwMCcgKyAoIGZpbGxDb2xvciB8IDApLnRvU3RyaW5nKDE2KSkuc3Vic3RyKC02KTtcbiAgICAgICAgICAgICAgICBjb250ZXh0LmZpbGwoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChkYXRhLmxpbmVXaWR0aClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb250ZXh0Lmdsb2JhbEFscGhhID0gZGF0YS5saW5lQWxwaGEgKiB3b3JsZEFscGhhO1xuICAgICAgICAgICAgICAgIGNvbnRleHQuc3Ryb2tlU3R5bGUgPSAnIycgKyAoJzAwMDAwJyArICggbGluZUNvbG9yIHwgMCkudG9TdHJpbmcoMTYpKS5zdWJzdHIoLTYpO1xuICAgICAgICAgICAgICAgIGNvbnRleHQuc3Ryb2tlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoZGF0YS50eXBlID09PSBDT05TVC5TSEFQRVMuUkVDVClcbiAgICAgICAge1xuXG4gICAgICAgICAgICBpZiAoZGF0YS5maWxsQ29sb3IgfHwgZGF0YS5maWxsQ29sb3IgPT09IDApXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29udGV4dC5nbG9iYWxBbHBoYSA9IGRhdGEuZmlsbEFscGhhICogd29ybGRBbHBoYTtcbiAgICAgICAgICAgICAgICBjb250ZXh0LmZpbGxTdHlsZSA9ICcjJyArICgnMDAwMDAnICsgKCBmaWxsQ29sb3IgfCAwKS50b1N0cmluZygxNikpLnN1YnN0cigtNik7XG4gICAgICAgICAgICAgICAgY29udGV4dC5maWxsUmVjdChzaGFwZS54LCBzaGFwZS55LCBzaGFwZS53aWR0aCwgc2hhcGUuaGVpZ2h0KTtcblxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGRhdGEubGluZVdpZHRoKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGNvbnRleHQuZ2xvYmFsQWxwaGEgPSBkYXRhLmxpbmVBbHBoYSAqIHdvcmxkQWxwaGE7XG4gICAgICAgICAgICAgICAgY29udGV4dC5zdHJva2VTdHlsZSA9ICcjJyArICgnMDAwMDAnICsgKCBsaW5lQ29sb3IgfCAwKS50b1N0cmluZygxNikpLnN1YnN0cigtNik7XG4gICAgICAgICAgICAgICAgY29udGV4dC5zdHJva2VSZWN0KHNoYXBlLngsIHNoYXBlLnksIHNoYXBlLndpZHRoLCBzaGFwZS5oZWlnaHQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGRhdGEudHlwZSA9PT0gQ09OU1QuU0hBUEVTLkNJUkMpXG4gICAgICAgIHtcbiAgICAgICAgICAgIC8vIFRPRE8gLSBuZWVkIHRvIGJlIFVuZGVmaW5lZCFcbiAgICAgICAgICAgIGNvbnRleHQuYmVnaW5QYXRoKCk7XG4gICAgICAgICAgICBjb250ZXh0LmFyYyhzaGFwZS54LCBzaGFwZS55LCBzaGFwZS5yYWRpdXMsMCwyKk1hdGguUEkpO1xuICAgICAgICAgICAgY29udGV4dC5jbG9zZVBhdGgoKTtcblxuICAgICAgICAgICAgaWYgKGRhdGEuZmlsbClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb250ZXh0Lmdsb2JhbEFscGhhID0gZGF0YS5maWxsQWxwaGEgKiB3b3JsZEFscGhhO1xuICAgICAgICAgICAgICAgIGNvbnRleHQuZmlsbFN0eWxlID0gJyMnICsgKCcwMDAwMCcgKyAoIGZpbGxDb2xvciB8IDApLnRvU3RyaW5nKDE2KSkuc3Vic3RyKC02KTtcbiAgICAgICAgICAgICAgICBjb250ZXh0LmZpbGwoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChkYXRhLmxpbmVXaWR0aClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb250ZXh0Lmdsb2JhbEFscGhhID0gZGF0YS5saW5lQWxwaGEgKiB3b3JsZEFscGhhO1xuICAgICAgICAgICAgICAgIGNvbnRleHQuc3Ryb2tlU3R5bGUgPSAnIycgKyAoJzAwMDAwJyArICggbGluZUNvbG9yIHwgMCkudG9TdHJpbmcoMTYpKS5zdWJzdHIoLTYpO1xuICAgICAgICAgICAgICAgIGNvbnRleHQuc3Ryb2tlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoZGF0YS50eXBlID09PSBDT05TVC5TSEFQRVMuRUxJUClcbiAgICAgICAge1xuICAgICAgICAgICAgLy8gZWxsaXBzZSBjb2RlIHRha2VuIGZyb206IGh0dHA6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvMjE3Mjc5OC9ob3ctdG8tZHJhdy1hbi1vdmFsLWluLWh0bWw1LWNhbnZhc1xuXG4gICAgICAgICAgICB2YXIgdyA9IHNoYXBlLndpZHRoICogMjtcbiAgICAgICAgICAgIHZhciBoID0gc2hhcGUuaGVpZ2h0ICogMjtcblxuICAgICAgICAgICAgdmFyIHggPSBzaGFwZS54IC0gdy8yO1xuICAgICAgICAgICAgdmFyIHkgPSBzaGFwZS55IC0gaC8yO1xuXG4gICAgICAgICAgICBjb250ZXh0LmJlZ2luUGF0aCgpO1xuXG4gICAgICAgICAgICB2YXIga2FwcGEgPSAwLjU1MjI4NDgsXG4gICAgICAgICAgICAgICAgb3ggPSAodyAvIDIpICoga2FwcGEsIC8vIGNvbnRyb2wgcG9pbnQgb2Zmc2V0IGhvcml6b250YWxcbiAgICAgICAgICAgICAgICBveSA9IChoIC8gMikgKiBrYXBwYSwgLy8gY29udHJvbCBwb2ludCBvZmZzZXQgdmVydGljYWxcbiAgICAgICAgICAgICAgICB4ZSA9IHggKyB3LCAgICAgICAgICAgLy8geC1lbmRcbiAgICAgICAgICAgICAgICB5ZSA9IHkgKyBoLCAgICAgICAgICAgLy8geS1lbmRcbiAgICAgICAgICAgICAgICB4bSA9IHggKyB3IC8gMiwgICAgICAgLy8geC1taWRkbGVcbiAgICAgICAgICAgICAgICB5bSA9IHkgKyBoIC8gMjsgICAgICAgLy8geS1taWRkbGVcblxuICAgICAgICAgICAgY29udGV4dC5tb3ZlVG8oeCwgeW0pO1xuICAgICAgICAgICAgY29udGV4dC5iZXppZXJDdXJ2ZVRvKHgsIHltIC0gb3ksIHhtIC0gb3gsIHksIHhtLCB5KTtcbiAgICAgICAgICAgIGNvbnRleHQuYmV6aWVyQ3VydmVUbyh4bSArIG94LCB5LCB4ZSwgeW0gLSBveSwgeGUsIHltKTtcbiAgICAgICAgICAgIGNvbnRleHQuYmV6aWVyQ3VydmVUbyh4ZSwgeW0gKyBveSwgeG0gKyBveCwgeWUsIHhtLCB5ZSk7XG4gICAgICAgICAgICBjb250ZXh0LmJlemllckN1cnZlVG8oeG0gLSBveCwgeWUsIHgsIHltICsgb3ksIHgsIHltKTtcblxuICAgICAgICAgICAgY29udGV4dC5jbG9zZVBhdGgoKTtcblxuICAgICAgICAgICAgaWYgKGRhdGEuZmlsbClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb250ZXh0Lmdsb2JhbEFscGhhID0gZGF0YS5maWxsQWxwaGEgKiB3b3JsZEFscGhhO1xuICAgICAgICAgICAgICAgIGNvbnRleHQuZmlsbFN0eWxlID0gJyMnICsgKCcwMDAwMCcgKyAoIGZpbGxDb2xvciB8IDApLnRvU3RyaW5nKDE2KSkuc3Vic3RyKC02KTtcbiAgICAgICAgICAgICAgICBjb250ZXh0LmZpbGwoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChkYXRhLmxpbmVXaWR0aClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb250ZXh0Lmdsb2JhbEFscGhhID0gZGF0YS5saW5lQWxwaGEgKiB3b3JsZEFscGhhO1xuICAgICAgICAgICAgICAgIGNvbnRleHQuc3Ryb2tlU3R5bGUgPSAnIycgKyAoJzAwMDAwJyArICggbGluZUNvbG9yIHwgMCkudG9TdHJpbmcoMTYpKS5zdWJzdHIoLTYpO1xuICAgICAgICAgICAgICAgIGNvbnRleHQuc3Ryb2tlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoZGF0YS50eXBlID09PSBDT05TVC5TSEFQRVMuUlJFQylcbiAgICAgICAge1xuICAgICAgICAgICAgdmFyIHJ4ID0gc2hhcGUueDtcbiAgICAgICAgICAgIHZhciByeSA9IHNoYXBlLnk7XG4gICAgICAgICAgICB2YXIgd2lkdGggPSBzaGFwZS53aWR0aDtcbiAgICAgICAgICAgIHZhciBoZWlnaHQgPSBzaGFwZS5oZWlnaHQ7XG4gICAgICAgICAgICB2YXIgcmFkaXVzID0gc2hhcGUucmFkaXVzO1xuXG4gICAgICAgICAgICB2YXIgbWF4UmFkaXVzID0gTWF0aC5taW4od2lkdGgsIGhlaWdodCkgLyAyIHwgMDtcbiAgICAgICAgICAgIHJhZGl1cyA9IHJhZGl1cyA+IG1heFJhZGl1cyA/IG1heFJhZGl1cyA6IHJhZGl1cztcblxuICAgICAgICAgICAgY29udGV4dC5iZWdpblBhdGgoKTtcbiAgICAgICAgICAgIGNvbnRleHQubW92ZVRvKHJ4LCByeSArIHJhZGl1cyk7XG4gICAgICAgICAgICBjb250ZXh0LmxpbmVUbyhyeCwgcnkgKyBoZWlnaHQgLSByYWRpdXMpO1xuICAgICAgICAgICAgY29udGV4dC5xdWFkcmF0aWNDdXJ2ZVRvKHJ4LCByeSArIGhlaWdodCwgcnggKyByYWRpdXMsIHJ5ICsgaGVpZ2h0KTtcbiAgICAgICAgICAgIGNvbnRleHQubGluZVRvKHJ4ICsgd2lkdGggLSByYWRpdXMsIHJ5ICsgaGVpZ2h0KTtcbiAgICAgICAgICAgIGNvbnRleHQucXVhZHJhdGljQ3VydmVUbyhyeCArIHdpZHRoLCByeSArIGhlaWdodCwgcnggKyB3aWR0aCwgcnkgKyBoZWlnaHQgLSByYWRpdXMpO1xuICAgICAgICAgICAgY29udGV4dC5saW5lVG8ocnggKyB3aWR0aCwgcnkgKyByYWRpdXMpO1xuICAgICAgICAgICAgY29udGV4dC5xdWFkcmF0aWNDdXJ2ZVRvKHJ4ICsgd2lkdGgsIHJ5LCByeCArIHdpZHRoIC0gcmFkaXVzLCByeSk7XG4gICAgICAgICAgICBjb250ZXh0LmxpbmVUbyhyeCArIHJhZGl1cywgcnkpO1xuICAgICAgICAgICAgY29udGV4dC5xdWFkcmF0aWNDdXJ2ZVRvKHJ4LCByeSwgcngsIHJ5ICsgcmFkaXVzKTtcbiAgICAgICAgICAgIGNvbnRleHQuY2xvc2VQYXRoKCk7XG5cbiAgICAgICAgICAgIGlmIChkYXRhLmZpbGxDb2xvciB8fCBkYXRhLmZpbGxDb2xvciA9PT0gMClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb250ZXh0Lmdsb2JhbEFscGhhID0gZGF0YS5maWxsQWxwaGEgKiB3b3JsZEFscGhhO1xuICAgICAgICAgICAgICAgIGNvbnRleHQuZmlsbFN0eWxlID0gJyMnICsgKCcwMDAwMCcgKyAoIGZpbGxDb2xvciB8IDApLnRvU3RyaW5nKDE2KSkuc3Vic3RyKC02KTtcbiAgICAgICAgICAgICAgICBjb250ZXh0LmZpbGwoKTtcblxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGRhdGEubGluZVdpZHRoKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGNvbnRleHQuZ2xvYmFsQWxwaGEgPSBkYXRhLmxpbmVBbHBoYSAqIHdvcmxkQWxwaGE7XG4gICAgICAgICAgICAgICAgY29udGV4dC5zdHJva2VTdHlsZSA9ICcjJyArICgnMDAwMDAnICsgKCBsaW5lQ29sb3IgfCAwKS50b1N0cmluZygxNikpLnN1YnN0cigtNik7XG4gICAgICAgICAgICAgICAgY29udGV4dC5zdHJva2UoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn07XG5cbi8qXG4gKiBSZW5kZXJzIGEgZ3JhcGhpY3MgbWFza1xuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0gZ3JhcGhpY3Mge1BJWEkuR3JhcGhpY3N9IHRoZSBncmFwaGljcyB3aGljaCB3aWxsIGJlIHVzZWQgYXMgYSBtYXNrXG4gKiBAcGFyYW0gY29udGV4dCB7Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEfSB0aGUgY29udGV4dCAyZCBtZXRob2Qgb2YgdGhlIGNhbnZhc1xuICovXG5DYW52YXNHcmFwaGljcy5yZW5kZXJHcmFwaGljc01hc2sgPSBmdW5jdGlvbiAoZ3JhcGhpY3MsIGNvbnRleHQpXG57XG4gICAgdmFyIGxlbiA9IGdyYXBoaWNzLmdyYXBoaWNzRGF0YS5sZW5ndGg7XG5cbiAgICBpZiAobGVuID09PSAwKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnRleHQuYmVnaW5QYXRoKCk7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgaSsrKVxuICAgIHtcbiAgICAgICAgdmFyIGRhdGEgPSBncmFwaGljcy5ncmFwaGljc0RhdGFbaV07XG4gICAgICAgIHZhciBzaGFwZSA9IGRhdGEuc2hhcGU7XG5cbiAgICAgICAgaWYgKGRhdGEudHlwZSA9PT0gQ09OU1QuU0hBUEVTLlBPTFkpXG4gICAgICAgIHtcblxuICAgICAgICAgICAgdmFyIHBvaW50cyA9IHNoYXBlLnBvaW50cztcblxuICAgICAgICAgICAgY29udGV4dC5tb3ZlVG8ocG9pbnRzWzBdLCBwb2ludHNbMV0pO1xuXG4gICAgICAgICAgICBmb3IgKHZhciBqPTE7IGogPCBwb2ludHMubGVuZ3RoLzI7IGorKylcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb250ZXh0LmxpbmVUbyhwb2ludHNbaiAqIDJdLCBwb2ludHNbaiAqIDIgKyAxXSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIGlmIHRoZSBmaXJzdCBhbmQgbGFzdCBwb2ludCBhcmUgdGhlIHNhbWUgY2xvc2UgdGhlIHBhdGggLSBtdWNoIG5lYXRlciA6KVxuICAgICAgICAgICAgaWYgKHBvaW50c1swXSA9PT0gcG9pbnRzW3BvaW50cy5sZW5ndGgtMl0gJiYgcG9pbnRzWzFdID09PSBwb2ludHNbcG9pbnRzLmxlbmd0aC0xXSlcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb250ZXh0LmNsb3NlUGF0aCgpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoZGF0YS50eXBlID09PSBDT05TVC5TSEFQRVMuUkVDVClcbiAgICAgICAge1xuICAgICAgICAgICAgY29udGV4dC5yZWN0KHNoYXBlLngsIHNoYXBlLnksIHNoYXBlLndpZHRoLCBzaGFwZS5oZWlnaHQpO1xuICAgICAgICAgICAgY29udGV4dC5jbG9zZVBhdGgoKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChkYXRhLnR5cGUgPT09IENPTlNULlNIQVBFUy5DSVJDKVxuICAgICAgICB7XG4gICAgICAgICAgICAvLyBUT0RPIC0gbmVlZCB0byBiZSBVbmRlZmluZWQhXG4gICAgICAgICAgICBjb250ZXh0LmFyYyhzaGFwZS54LCBzaGFwZS55LCBzaGFwZS5yYWRpdXMsIDAsIDIgKiBNYXRoLlBJKTtcbiAgICAgICAgICAgIGNvbnRleHQuY2xvc2VQYXRoKCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoZGF0YS50eXBlID09PSBDT05TVC5TSEFQRVMuRUxJUClcbiAgICAgICAge1xuXG4gICAgICAgICAgICAvLyBlbGxpcHNlIGNvZGUgdGFrZW4gZnJvbTogaHR0cDovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy8yMTcyNzk4L2hvdy10by1kcmF3LWFuLW92YWwtaW4taHRtbDUtY2FudmFzXG5cbiAgICAgICAgICAgIHZhciB3ID0gc2hhcGUud2lkdGggKiAyO1xuICAgICAgICAgICAgdmFyIGggPSBzaGFwZS5oZWlnaHQgKiAyO1xuXG4gICAgICAgICAgICB2YXIgeCA9IHNoYXBlLnggLSB3LzI7XG4gICAgICAgICAgICB2YXIgeSA9IHNoYXBlLnkgLSBoLzI7XG5cbiAgICAgICAgICAgIHZhciBrYXBwYSA9IDAuNTUyMjg0OCxcbiAgICAgICAgICAgICAgICBveCA9ICh3IC8gMikgKiBrYXBwYSwgLy8gY29udHJvbCBwb2ludCBvZmZzZXQgaG9yaXpvbnRhbFxuICAgICAgICAgICAgICAgIG95ID0gKGggLyAyKSAqIGthcHBhLCAvLyBjb250cm9sIHBvaW50IG9mZnNldCB2ZXJ0aWNhbFxuICAgICAgICAgICAgICAgIHhlID0geCArIHcsICAgICAgICAgICAvLyB4LWVuZFxuICAgICAgICAgICAgICAgIHllID0geSArIGgsICAgICAgICAgICAvLyB5LWVuZFxuICAgICAgICAgICAgICAgIHhtID0geCArIHcgLyAyLCAgICAgICAvLyB4LW1pZGRsZVxuICAgICAgICAgICAgICAgIHltID0geSArIGggLyAyOyAgICAgICAvLyB5LW1pZGRsZVxuXG4gICAgICAgICAgICBjb250ZXh0Lm1vdmVUbyh4LCB5bSk7XG4gICAgICAgICAgICBjb250ZXh0LmJlemllckN1cnZlVG8oeCwgeW0gLSBveSwgeG0gLSBveCwgeSwgeG0sIHkpO1xuICAgICAgICAgICAgY29udGV4dC5iZXppZXJDdXJ2ZVRvKHhtICsgb3gsIHksIHhlLCB5bSAtIG95LCB4ZSwgeW0pO1xuICAgICAgICAgICAgY29udGV4dC5iZXppZXJDdXJ2ZVRvKHhlLCB5bSArIG95LCB4bSArIG94LCB5ZSwgeG0sIHllKTtcbiAgICAgICAgICAgIGNvbnRleHQuYmV6aWVyQ3VydmVUbyh4bSAtIG94LCB5ZSwgeCwgeW0gKyBveSwgeCwgeW0pO1xuICAgICAgICAgICAgY29udGV4dC5jbG9zZVBhdGgoKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChkYXRhLnR5cGUgPT09IENPTlNULlNIQVBFUy5SUkVDKVxuICAgICAgICB7XG5cbiAgICAgICAgICAgIHZhciByeCA9IHNoYXBlLng7XG4gICAgICAgICAgICB2YXIgcnkgPSBzaGFwZS55O1xuICAgICAgICAgICAgdmFyIHdpZHRoID0gc2hhcGUud2lkdGg7XG4gICAgICAgICAgICB2YXIgaGVpZ2h0ID0gc2hhcGUuaGVpZ2h0O1xuICAgICAgICAgICAgdmFyIHJhZGl1cyA9IHNoYXBlLnJhZGl1cztcblxuICAgICAgICAgICAgdmFyIG1heFJhZGl1cyA9IE1hdGgubWluKHdpZHRoLCBoZWlnaHQpIC8gMiB8IDA7XG4gICAgICAgICAgICByYWRpdXMgPSByYWRpdXMgPiBtYXhSYWRpdXMgPyBtYXhSYWRpdXMgOiByYWRpdXM7XG5cbiAgICAgICAgICAgIGNvbnRleHQubW92ZVRvKHJ4LCByeSArIHJhZGl1cyk7XG4gICAgICAgICAgICBjb250ZXh0LmxpbmVUbyhyeCwgcnkgKyBoZWlnaHQgLSByYWRpdXMpO1xuICAgICAgICAgICAgY29udGV4dC5xdWFkcmF0aWNDdXJ2ZVRvKHJ4LCByeSArIGhlaWdodCwgcnggKyByYWRpdXMsIHJ5ICsgaGVpZ2h0KTtcbiAgICAgICAgICAgIGNvbnRleHQubGluZVRvKHJ4ICsgd2lkdGggLSByYWRpdXMsIHJ5ICsgaGVpZ2h0KTtcbiAgICAgICAgICAgIGNvbnRleHQucXVhZHJhdGljQ3VydmVUbyhyeCArIHdpZHRoLCByeSArIGhlaWdodCwgcnggKyB3aWR0aCwgcnkgKyBoZWlnaHQgLSByYWRpdXMpO1xuICAgICAgICAgICAgY29udGV4dC5saW5lVG8ocnggKyB3aWR0aCwgcnkgKyByYWRpdXMpO1xuICAgICAgICAgICAgY29udGV4dC5xdWFkcmF0aWNDdXJ2ZVRvKHJ4ICsgd2lkdGgsIHJ5LCByeCArIHdpZHRoIC0gcmFkaXVzLCByeSk7XG4gICAgICAgICAgICBjb250ZXh0LmxpbmVUbyhyeCArIHJhZGl1cywgcnkpO1xuICAgICAgICAgICAgY29udGV4dC5xdWFkcmF0aWNDdXJ2ZVRvKHJ4LCByeSwgcngsIHJ5ICsgcmFkaXVzKTtcbiAgICAgICAgICAgIGNvbnRleHQuY2xvc2VQYXRoKCk7XG4gICAgICAgIH1cbiAgICB9XG59O1xuXG4vKlxuICogVXBkYXRlcyB0aGUgdGludCBvZiBhIGdyYXBoaWNzIG9iamVjdFxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0gZ3JhcGhpY3Mge1BJWEkuR3JhcGhpY3N9IHRoZSBncmFwaGljcyB0aGF0IHdpbGwgaGF2ZSBpdHMgdGludCB1cGRhdGVkXG4gKlxuICovXG5DYW52YXNHcmFwaGljcy51cGRhdGVHcmFwaGljc1RpbnQgPSBmdW5jdGlvbiAoZ3JhcGhpY3MpXG57XG4gICAgaWYgKGdyYXBoaWNzLnRpbnQgPT09IDB4RkZGRkZGICYmIGdyYXBoaWNzLl9wcmV2VGludCA9PT0gZ3JhcGhpY3MudGludClcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgZ3JhcGhpY3MuX3ByZXZUaW50ID0gZ3JhcGhpY3MudGludDtcblxuICAgIHZhciB0aW50UiA9IChncmFwaGljcy50aW50ID4+IDE2ICYgMHhGRikgLyAyNTU7XG4gICAgdmFyIHRpbnRHID0gKGdyYXBoaWNzLnRpbnQgPj4gOCAmIDB4RkYpIC8gMjU1O1xuICAgIHZhciB0aW50QiA9IChncmFwaGljcy50aW50ICYgMHhGRikvIDI1NTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZ3JhcGhpY3MuZ3JhcGhpY3NEYXRhLmxlbmd0aDsgaSsrKVxuICAgIHtcbiAgICAgICAgdmFyIGRhdGEgPSBncmFwaGljcy5ncmFwaGljc0RhdGFbaV07XG5cbiAgICAgICAgdmFyIGZpbGxDb2xvciA9IGRhdGEuZmlsbENvbG9yIHwgMDtcbiAgICAgICAgdmFyIGxpbmVDb2xvciA9IGRhdGEubGluZUNvbG9yIHwgMDtcblxuICAgICAgICAvKlxuICAgICAgICB2YXIgY29sb3JSID0gKGZpbGxDb2xvciA+PiAxNiAmIDB4RkYpIC8gMjU1O1xuICAgICAgICB2YXIgY29sb3JHID0gKGZpbGxDb2xvciA+PiA4ICYgMHhGRikgLyAyNTU7XG4gICAgICAgIHZhciBjb2xvckIgPSAoZmlsbENvbG9yICYgMHhGRikgLyAyNTU7XG5cbiAgICAgICAgY29sb3JSICo9IHRpbnRSO1xuICAgICAgICBjb2xvckcgKj0gdGludEc7XG4gICAgICAgIGNvbG9yQiAqPSB0aW50QjtcblxuICAgICAgICBmaWxsQ29sb3IgPSAoKGNvbG9yUioyNTUgPDwgMTYpICsgKGNvbG9yRyoyNTUgPDwgOCkgKyBjb2xvckIqMjU1KTtcblxuICAgICAgICBjb2xvclIgPSAobGluZUNvbG9yID4+IDE2ICYgMHhGRikgLyAyNTU7XG4gICAgICAgIGNvbG9yRyA9IChsaW5lQ29sb3IgPj4gOCAmIDB4RkYpIC8gMjU1O1xuICAgICAgICBjb2xvckIgPSAobGluZUNvbG9yICYgMHhGRikgLyAyNTU7XG5cbiAgICAgICAgY29sb3JSICo9IHRpbnRSO1xuICAgICAgICBjb2xvckcgKj0gdGludEc7XG4gICAgICAgIGNvbG9yQiAqPSB0aW50QjtcblxuICAgICAgICBsaW5lQ29sb3IgPSAoKGNvbG9yUioyNTUgPDwgMTYpICsgKGNvbG9yRyoyNTUgPDwgOCkgKyBjb2xvckIqMjU1KTtcbiAgICAgICAgKi9cblxuICAgICAgICAvLyBzdXBlciBpbmxpbmUgY29zIGltIGFuIG9wdGltaXphdGlvbiBOQVpJIDopXG4gICAgICAgIGRhdGEuX2ZpbGxUaW50ID0gKCgoZmlsbENvbG9yID4+IDE2ICYgMHhGRikgLyAyNTUgKiB0aW50UioyNTUgPDwgMTYpICsgKChmaWxsQ29sb3IgPj4gOCAmIDB4RkYpIC8gMjU1ICogdGludEcqMjU1IDw8IDgpICsgIChmaWxsQ29sb3IgJiAweEZGKSAvIDI1NSAqIHRpbnRCKjI1NSk7XG4gICAgICAgIGRhdGEuX2xpbmVUaW50ID0gKCgobGluZUNvbG9yID4+IDE2ICYgMHhGRikgLyAyNTUgKiB0aW50UioyNTUgPDwgMTYpICsgKChsaW5lQ29sb3IgPj4gOCAmIDB4RkYpIC8gMjU1ICogdGludEcqMjU1IDw8IDgpICsgIChsaW5lQ29sb3IgJiAweEZGKSAvIDI1NSAqIHRpbnRCKjI1NSk7XG5cbiAgICB9XG59O1xuXG4iLCJ2YXIgQ2FudmFzR3JhcGhpY3MgPSByZXF1aXJlKCcuL0NhbnZhc0dyYXBoaWNzJyk7XG5cbi8qKlxuICogQSBzZXQgb2YgZnVuY3Rpb25zIHVzZWQgdG8gaGFuZGxlIG1hc2tpbmcuXG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICovXG5mdW5jdGlvbiBDYW52YXNNYXNrTWFuYWdlcigpXG57fVxuXG5DYW52YXNNYXNrTWFuYWdlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBDYW52YXNNYXNrTWFuYWdlcjtcbm1vZHVsZS5leHBvcnRzID0gQ2FudmFzTWFza01hbmFnZXI7XG5cbi8qKlxuICogVGhpcyBtZXRob2QgYWRkcyBpdCB0byB0aGUgY3VycmVudCBzdGFjayBvZiBtYXNrcy5cbiAqXG4gKiBAcGFyYW0gbWFza0RhdGEge29iamVjdH0gdGhlIG1hc2tEYXRhIHRoYXQgd2lsbCBiZSBwdXNoZWRcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5XZWJHTFJlbmRlcmVyfFBJWEkuQ2FudmFzUmVuZGVyZXJ9IFRoZSByZW5kZXJlciBjb250ZXh0IHRvIHVzZS5cbiAqL1xuQ2FudmFzTWFza01hbmFnZXIucHJvdG90eXBlLnB1c2hNYXNrID0gZnVuY3Rpb24gKG1hc2tEYXRhLCByZW5kZXJlcilcbntcblxuICAgIHJlbmRlcmVyLmNvbnRleHQuc2F2ZSgpO1xuXG4gICAgdmFyIGNhY2hlQWxwaGEgPSBtYXNrRGF0YS5hbHBoYTtcbiAgICB2YXIgdHJhbnNmb3JtID0gbWFza0RhdGEud29ybGRUcmFuc2Zvcm07XG4gICAgdmFyIHJlc29sdXRpb24gPSByZW5kZXJlci5yZXNvbHV0aW9uO1xuXG4gICAgcmVuZGVyZXIuY29udGV4dC5zZXRUcmFuc2Zvcm0oXG4gICAgICAgIHRyYW5zZm9ybS5hICogcmVzb2x1dGlvbixcbiAgICAgICAgdHJhbnNmb3JtLmIgKiByZXNvbHV0aW9uLFxuICAgICAgICB0cmFuc2Zvcm0uYyAqIHJlc29sdXRpb24sXG4gICAgICAgIHRyYW5zZm9ybS5kICogcmVzb2x1dGlvbixcbiAgICAgICAgdHJhbnNmb3JtLnR4ICogcmVzb2x1dGlvbixcbiAgICAgICAgdHJhbnNmb3JtLnR5ICogcmVzb2x1dGlvblxuICAgICk7XG5cbiAgICAvL1RPRE8gc3Vwb3J0IHNwcml0ZSBhbHBoYSBtYXNrcz8/XG4gICAgLy9sb3RzIG9mIGVmZm9ydCByZXF1aXJlZC4gSWYgZGVtYW5kIGlzIGdyZWF0IGVub3VnaC4uXG4gICAgaWYoIW1hc2tEYXRhLnRleHR1cmUpXG4gICAge1xuICAgICAgICBDYW52YXNHcmFwaGljcy5yZW5kZXJHcmFwaGljc01hc2sobWFza0RhdGEsIHJlbmRlcmVyLmNvbnRleHQpO1xuICAgICAgICByZW5kZXJlci5jb250ZXh0LmNsaXAoKTtcbiAgICB9XG5cbiAgICBtYXNrRGF0YS53b3JsZEFscGhhID0gY2FjaGVBbHBoYTtcbn07XG5cbi8qKlxuICogUmVzdG9yZXMgdGhlIGN1cnJlbnQgZHJhd2luZyBjb250ZXh0IHRvIHRoZSBzdGF0ZSBpdCB3YXMgYmVmb3JlIHRoZSBtYXNrIHdhcyBhcHBsaWVkLlxuICpcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5XZWJHTFJlbmRlcmVyfFBJWEkuQ2FudmFzUmVuZGVyZXJ9IFRoZSByZW5kZXJlciBjb250ZXh0IHRvIHVzZS5cbiAqL1xuQ2FudmFzTWFza01hbmFnZXIucHJvdG90eXBlLnBvcE1hc2sgPSBmdW5jdGlvbiAocmVuZGVyZXIpXG57XG4gICAgcmVuZGVyZXIuY29udGV4dC5yZXN0b3JlKCk7XG59O1xuXG5DYW52YXNNYXNrTWFuYWdlci5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uICgpIHt9O1xuIiwidmFyIHV0aWxzID0gcmVxdWlyZSgnLi4vLi4vLi4vdXRpbHMnKTtcblxuLyoqXG4gKiBVdGlsaXR5IG1ldGhvZHMgZm9yIFNwcml0ZS9UZXh0dXJlIHRpbnRpbmcuXG4gKiBAc3RhdGljXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKi9cbnZhciBDYW52YXNUaW50ZXIgPSB7fTtcbm1vZHVsZS5leHBvcnRzID0gQ2FudmFzVGludGVyO1xuXG4vKipcbiAqIEJhc2ljYWxseSB0aGlzIG1ldGhvZCBqdXN0IG5lZWRzIGEgc3ByaXRlIGFuZCBhIGNvbG9yIGFuZCB0aW50cyB0aGUgc3ByaXRlIHdpdGggdGhlIGdpdmVuIGNvbG9yLlxuICpcbiAqIEBwYXJhbSBzcHJpdGUge1BJWEkuU3ByaXRlfSB0aGUgc3ByaXRlIHRvIHRpbnRcbiAqIEBwYXJhbSBjb2xvciB7bnVtYmVyfSB0aGUgY29sb3IgdG8gdXNlIHRvIHRpbnQgdGhlIHNwcml0ZSB3aXRoXG4gKiBAcmV0dXJuIHtIVE1MQ2FudmFzRWxlbWVudH0gVGhlIHRpbnRlZCBjYW52YXNcbiAqL1xuQ2FudmFzVGludGVyLmdldFRpbnRlZFRleHR1cmUgPSBmdW5jdGlvbiAoc3ByaXRlLCBjb2xvcilcbntcbiAgICB2YXIgdGV4dHVyZSA9IHNwcml0ZS50ZXh0dXJlO1xuXG4gICAgY29sb3IgPSBDYW52YXNUaW50ZXIucm91bmRDb2xvcihjb2xvcik7XG5cbiAgICB2YXIgc3RyaW5nQ29sb3IgPSAnIycgKyAoJzAwMDAwJyArICggY29sb3IgfCAwKS50b1N0cmluZygxNikpLnN1YnN0cigtNik7XG5cbiAgICB0ZXh0dXJlLnRpbnRDYWNoZSA9IHRleHR1cmUudGludENhY2hlIHx8IHt9O1xuXG4gICAgaWYgKHRleHR1cmUudGludENhY2hlW3N0cmluZ0NvbG9yXSlcbiAgICB7XG4gICAgICAgIHJldHVybiB0ZXh0dXJlLnRpbnRDYWNoZVtzdHJpbmdDb2xvcl07XG4gICAgfVxuXG4gICAgIC8vIGNsb25lIHRleHR1cmUuLlxuICAgIHZhciBjYW52YXMgPSBDYW52YXNUaW50ZXIuY2FudmFzIHx8IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NhbnZhcycpO1xuXG4gICAgLy9DYW52YXNUaW50ZXIudGludFdpdGhQZXJQaXhlbCh0ZXh0dXJlLCBzdHJpbmdDb2xvciwgY2FudmFzKTtcbiAgICBDYW52YXNUaW50ZXIudGludE1ldGhvZCh0ZXh0dXJlLCBjb2xvciwgY2FudmFzKTtcblxuICAgIGlmIChDYW52YXNUaW50ZXIuY29udmVydFRpbnRUb0ltYWdlKVxuICAgIHtcbiAgICAgICAgLy8gaXMgdGhpcyBiZXR0ZXI/XG4gICAgICAgIHZhciB0aW50SW1hZ2UgPSBuZXcgSW1hZ2UoKTtcbiAgICAgICAgdGludEltYWdlLnNyYyA9IGNhbnZhcy50b0RhdGFVUkwoKTtcblxuICAgICAgICB0ZXh0dXJlLnRpbnRDYWNoZVtzdHJpbmdDb2xvcl0gPSB0aW50SW1hZ2U7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHRleHR1cmUudGludENhY2hlW3N0cmluZ0NvbG9yXSA9IGNhbnZhcztcbiAgICAgICAgLy8gaWYgd2UgYXJlIG5vdCBjb252ZXJ0aW5nIHRoZSB0ZXh0dXJlIHRvIGFuIGltYWdlIHRoZW4gd2UgbmVlZCB0byBsb3NlIHRoZSByZWZlcmVuY2UgdG8gdGhlIGNhbnZhc1xuICAgICAgICBDYW52YXNUaW50ZXIuY2FudmFzID0gbnVsbDtcbiAgICB9XG5cbiAgICByZXR1cm4gY2FudmFzO1xufTtcblxuLyoqXG4gKiBUaW50IGEgdGV4dHVyZSB1c2luZyB0aGUgJ211bHRpcGx5JyBvcGVyYXRpb24uXG4gKlxuICogQHBhcmFtIHRleHR1cmUge1BJWEkuVGV4dHVyZX0gdGhlIHRleHR1cmUgdG8gdGludFxuICogQHBhcmFtIGNvbG9yIHtudW1iZXJ9IHRoZSBjb2xvciB0byB1c2UgdG8gdGludCB0aGUgc3ByaXRlIHdpdGhcbiAqIEBwYXJhbSBjYW52YXMge0hUTUxDYW52YXNFbGVtZW50fSB0aGUgY3VycmVudCBjYW52YXNcbiAqL1xuQ2FudmFzVGludGVyLnRpbnRXaXRoTXVsdGlwbHkgPSBmdW5jdGlvbiAodGV4dHVyZSwgY29sb3IsIGNhbnZhcylcbntcbiAgICB2YXIgY29udGV4dCA9IGNhbnZhcy5nZXRDb250ZXh0KCAnMmQnICk7XG5cbiAgICB2YXIgcmVzb2x1dGlvbiA9IHRleHR1cmUuYmFzZVRleHR1cmUucmVzb2x1dGlvbjtcblxuICAgIHZhciBjcm9wID0gdGV4dHVyZS5jcm9wLmNsb25lKCk7XG4gICAgY3JvcC54ICo9IHJlc29sdXRpb247XG4gICAgY3JvcC55ICo9IHJlc29sdXRpb247XG4gICAgY3JvcC53aWR0aCAqPSByZXNvbHV0aW9uO1xuICAgIGNyb3AuaGVpZ2h0ICo9IHJlc29sdXRpb247XG5cbiAgICBjYW52YXMud2lkdGggPSBjcm9wLndpZHRoO1xuICAgIGNhbnZhcy5oZWlnaHQgPSBjcm9wLmhlaWdodDtcblxuICAgIGNvbnRleHQuZmlsbFN0eWxlID0gJyMnICsgKCcwMDAwMCcgKyAoIGNvbG9yIHwgMCkudG9TdHJpbmcoMTYpKS5zdWJzdHIoLTYpO1xuXG4gICAgY29udGV4dC5maWxsUmVjdCgwLCAwLCBjcm9wLndpZHRoLCBjcm9wLmhlaWdodCk7XG5cbiAgICBjb250ZXh0Lmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbiA9ICdtdWx0aXBseSc7XG5cbiAgICBjb250ZXh0LmRyYXdJbWFnZShcbiAgICAgICAgdGV4dHVyZS5iYXNlVGV4dHVyZS5zb3VyY2UsXG4gICAgICAgIGNyb3AueCxcbiAgICAgICAgY3JvcC55LFxuICAgICAgICBjcm9wLndpZHRoLFxuICAgICAgICBjcm9wLmhlaWdodCxcbiAgICAgICAgMCxcbiAgICAgICAgMCxcbiAgICAgICAgY3JvcC53aWR0aCxcbiAgICAgICAgY3JvcC5oZWlnaHRcbiAgICApO1xuXG4gICAgY29udGV4dC5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb24gPSAnZGVzdGluYXRpb24tYXRvcCc7XG5cbiAgICBjb250ZXh0LmRyYXdJbWFnZShcbiAgICAgICAgdGV4dHVyZS5iYXNlVGV4dHVyZS5zb3VyY2UsXG4gICAgICAgIGNyb3AueCxcbiAgICAgICAgY3JvcC55LFxuICAgICAgICBjcm9wLndpZHRoLFxuICAgICAgICBjcm9wLmhlaWdodCxcbiAgICAgICAgMCxcbiAgICAgICAgMCxcbiAgICAgICAgY3JvcC53aWR0aCxcbiAgICAgICAgY3JvcC5oZWlnaHRcbiAgICApO1xufTtcblxuLyoqXG4gKiBUaW50IGEgdGV4dHVyZSB1c2luZyB0aGUgJ292ZXJsYXknIG9wZXJhdGlvbi5cbiAqXG4gKiBAcGFyYW0gdGV4dHVyZSB7UElYSS5UZXh0dXJlfSB0aGUgdGV4dHVyZSB0byB0aW50XG4gKiBAcGFyYW0gY29sb3Ige251bWJlcn0gdGhlIGNvbG9yIHRvIHVzZSB0byB0aW50IHRoZSBzcHJpdGUgd2l0aFxuICogQHBhcmFtIGNhbnZhcyB7SFRNTENhbnZhc0VsZW1lbnR9IHRoZSBjdXJyZW50IGNhbnZhc1xuICovXG5DYW52YXNUaW50ZXIudGludFdpdGhPdmVybGF5ID0gZnVuY3Rpb24gKHRleHR1cmUsIGNvbG9yLCBjYW52YXMpXG57XG4gICAgdmFyIGNvbnRleHQgPSBjYW52YXMuZ2V0Q29udGV4dCggJzJkJyApO1xuXG4gICAgdmFyIHJlc29sdXRpb24gPSB0ZXh0dXJlLmJhc2VUZXh0dXJlLnJlc29sdXRpb247XG5cbiAgICB2YXIgY3JvcCA9IHRleHR1cmUuY3JvcC5jbG9uZSgpO1xuICAgIGNyb3AueCAqPSByZXNvbHV0aW9uO1xuICAgIGNyb3AueSAqPSByZXNvbHV0aW9uO1xuICAgIGNyb3Aud2lkdGggKj0gcmVzb2x1dGlvbjtcbiAgICBjcm9wLmhlaWdodCAqPSByZXNvbHV0aW9uO1xuXG4gICAgY2FudmFzLndpZHRoID0gY3JvcC53aWR0aDtcbiAgICBjYW52YXMuaGVpZ2h0ID0gY3JvcC5oZWlnaHQ7XG5cbiAgICBjb250ZXh0Lmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbiA9ICdjb3B5JztcbiAgICBjb250ZXh0LmZpbGxTdHlsZSA9ICcjJyArICgnMDAwMDAnICsgKCBjb2xvciB8IDApLnRvU3RyaW5nKDE2KSkuc3Vic3RyKC02KTtcbiAgICBjb250ZXh0LmZpbGxSZWN0KDAsIDAsIGNyb3Aud2lkdGgsIGNyb3AuaGVpZ2h0KTtcblxuICAgIGNvbnRleHQuZ2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uID0gJ2Rlc3RpbmF0aW9uLWF0b3AnO1xuICAgIGNvbnRleHQuZHJhd0ltYWdlKFxuICAgICAgICB0ZXh0dXJlLmJhc2VUZXh0dXJlLnNvdXJjZSxcbiAgICAgICAgY3JvcC54LFxuICAgICAgICBjcm9wLnksXG4gICAgICAgIGNyb3Aud2lkdGgsXG4gICAgICAgIGNyb3AuaGVpZ2h0LFxuICAgICAgICAwLFxuICAgICAgICAwLFxuICAgICAgICBjcm9wLndpZHRoLFxuICAgICAgICBjcm9wLmhlaWdodFxuICAgICk7XG5cbiAgICAvLyBjb250ZXh0Lmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbiA9ICdjb3B5Jztcbn07XG5cbi8qKlxuICogVGludCBhIHRleHR1cmUgcGl4ZWwgcGVyIHBpeGVsLlxuICpcbiAqIEBwYXJhbSB0ZXh0dXJlIHtQSVhJLlRleHR1cmV9IHRoZSB0ZXh0dXJlIHRvIHRpbnRcbiAqIEBwYXJhbSBjb2xvciB7bnVtYmVyfSB0aGUgY29sb3IgdG8gdXNlIHRvIHRpbnQgdGhlIHNwcml0ZSB3aXRoXG4gKiBAcGFyYW0gY2FudmFzIHtIVE1MQ2FudmFzRWxlbWVudH0gdGhlIGN1cnJlbnQgY2FudmFzXG4gKi9cbkNhbnZhc1RpbnRlci50aW50V2l0aFBlclBpeGVsID0gZnVuY3Rpb24gKHRleHR1cmUsIGNvbG9yLCBjYW52YXMpXG57XG4gICAgdmFyIGNvbnRleHQgPSBjYW52YXMuZ2V0Q29udGV4dCggJzJkJyApO1xuXG4gICAgdmFyIHJlc29sdXRpb24gPSB0ZXh0dXJlLmJhc2VUZXh0dXJlLnJlc29sdXRpb247XG5cbiAgICB2YXIgY3JvcCA9IHRleHR1cmUuY3JvcC5jbG9uZSgpO1xuICAgIGNyb3AueCAqPSByZXNvbHV0aW9uO1xuICAgIGNyb3AueSAqPSByZXNvbHV0aW9uO1xuICAgIGNyb3Aud2lkdGggKj0gcmVzb2x1dGlvbjtcbiAgICBjcm9wLmhlaWdodCAqPSByZXNvbHV0aW9uO1xuXG4gICAgY2FudmFzLndpZHRoID0gY3JvcC53aWR0aDtcbiAgICBjYW52YXMuaGVpZ2h0ID0gY3JvcC5oZWlnaHQ7XG5cbiAgICBjb250ZXh0Lmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbiA9ICdjb3B5JztcbiAgICBjb250ZXh0LmRyYXdJbWFnZShcbiAgICAgICAgdGV4dHVyZS5iYXNlVGV4dHVyZS5zb3VyY2UsXG4gICAgICAgIGNyb3AueCxcbiAgICAgICAgY3JvcC55LFxuICAgICAgICBjcm9wLndpZHRoLFxuICAgICAgICBjcm9wLmhlaWdodCxcbiAgICAgICAgMCxcbiAgICAgICAgMCxcbiAgICAgICAgY3JvcC53aWR0aCxcbiAgICAgICAgY3JvcC5oZWlnaHRcbiAgICApO1xuXG4gICAgdmFyIHJnYlZhbHVlcyA9IHV0aWxzLmhleDJyZ2IoY29sb3IpO1xuICAgIHZhciByID0gcmdiVmFsdWVzWzBdLCBnID0gcmdiVmFsdWVzWzFdLCBiID0gcmdiVmFsdWVzWzJdO1xuXG4gICAgdmFyIHBpeGVsRGF0YSA9IGNvbnRleHQuZ2V0SW1hZ2VEYXRhKDAsIDAsIGNyb3Aud2lkdGgsIGNyb3AuaGVpZ2h0KTtcblxuICAgIHZhciBwaXhlbHMgPSBwaXhlbERhdGEuZGF0YTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcGl4ZWxzLmxlbmd0aDsgaSArPSA0KVxuICAgIHtcbiAgICAgICAgcGl4ZWxzW2krMF0gKj0gcjtcbiAgICAgICAgcGl4ZWxzW2krMV0gKj0gZztcbiAgICAgICAgcGl4ZWxzW2krMl0gKj0gYjtcbiAgICB9XG5cbiAgICBjb250ZXh0LnB1dEltYWdlRGF0YShwaXhlbERhdGEsIDAsIDApO1xufTtcblxuLyoqXG4gKiBSb3VuZHMgdGhlIHNwZWNpZmllZCBjb2xvciBhY2NvcmRpbmcgdG8gdGhlIENhbnZhc1RpbnRlci5jYWNoZVN0ZXBzUGVyQ29sb3JDaGFubmVsLlxuICpcbiAqIEBwYXJhbSBjb2xvciB7bnVtYmVyfSB0aGUgY29sb3IgdG8gcm91bmQsIHNob3VsZCBiZSBhIGhleCBjb2xvclxuICovXG5DYW52YXNUaW50ZXIucm91bmRDb2xvciA9IGZ1bmN0aW9uIChjb2xvcilcbntcbiAgICB2YXIgc3RlcCA9IENhbnZhc1RpbnRlci5jYWNoZVN0ZXBzUGVyQ29sb3JDaGFubmVsO1xuXG4gICAgdmFyIHJnYlZhbHVlcyA9IHV0aWxzLmhleDJyZ2IoY29sb3IpO1xuXG4gICAgcmdiVmFsdWVzWzBdID0gTWF0aC5taW4oMjU1LCAocmdiVmFsdWVzWzBdIC8gc3RlcCkgKiBzdGVwKTtcbiAgICByZ2JWYWx1ZXNbMV0gPSBNYXRoLm1pbigyNTUsIChyZ2JWYWx1ZXNbMV0gLyBzdGVwKSAqIHN0ZXApO1xuICAgIHJnYlZhbHVlc1syXSA9IE1hdGgubWluKDI1NSwgKHJnYlZhbHVlc1syXSAvIHN0ZXApICogc3RlcCk7XG5cbiAgICByZXR1cm4gdXRpbHMucmdiMmhleChyZ2JWYWx1ZXMpO1xufTtcblxuLyoqXG4gKiBOdW1iZXIgb2Ygc3RlcHMgd2hpY2ggd2lsbCBiZSB1c2VkIGFzIGEgY2FwIHdoZW4gcm91bmRpbmcgY29sb3JzLlxuICpcbiAqIEBtZW1iZXJcbiAqL1xuQ2FudmFzVGludGVyLmNhY2hlU3RlcHNQZXJDb2xvckNoYW5uZWwgPSA4O1xuXG4vKipcbiAqIFRpbnQgY2FjaGUgYm9vbGVhbiBmbGFnLlxuICpcbiAqIEBtZW1iZXJcbiAqL1xuQ2FudmFzVGludGVyLmNvbnZlcnRUaW50VG9JbWFnZSA9IGZhbHNlO1xuXG4vKipcbiAqIFdoZXRoZXIgb3Igbm90IHRoZSBDYW52YXMgQmxlbmRNb2RlcyBhcmUgc3VwcG9ydGVkLCBjb25zZXF1ZW50bHkgdGhlIGFiaWxpdHkgdG8gdGludCB1c2luZyB0aGUgbXVsdGlwbHkgbWV0aG9kLlxuICpcbiAqIEBtZW1iZXJcbiAqL1xuQ2FudmFzVGludGVyLmNhblVzZU11bHRpcGx5ID0gdXRpbHMuY2FuVXNlTmV3Q2FudmFzQmxlbmRNb2RlcygpO1xuXG4vKipcbiAqIFRoZSB0aW50aW5nIG1ldGhvZCB0aGF0IHdpbGwgYmUgdXNlZC5cbiAqXG4gKi9cbkNhbnZhc1RpbnRlci50aW50TWV0aG9kID0gQ2FudmFzVGludGVyLmNhblVzZU11bHRpcGx5ID8gQ2FudmFzVGludGVyLnRpbnRXaXRoTXVsdGlwbHkgOiAgQ2FudmFzVGludGVyLnRpbnRXaXRoUGVyUGl4ZWw7XG4iLCJ2YXIgR0xUZXh0dXJlID0gcmVxdWlyZSgncGl4aS1nbC1jb3JlJykuR0xUZXh0dXJlLFxuXHR1dGlscyA9IHJlcXVpcmUoJy4uLy4uL3V0aWxzJyk7XG5cbi8qKlxuICogSGVscGVyIGNsYXNzIHRvIGNyZWF0ZSBhIHdlYkdMIFRleHR1cmVcbiAqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gZ2wge1dlYkdMUmVuZGVyaW5nQ29udGV4dH1cbiAqL1xuXG52YXIgVGV4dHVyZU1hbmFnZXIgPSBmdW5jdGlvbihnbClcbntcblx0dGhpcy5nbCA9IGdsO1xuXG5cdC8vIHRyYWNrIHRleHR1cmVzIGluIHRoZSByZW5kZXJlciBzbyB3ZSBjYW4gbm8gbG9uZ2VyIGxpc3RlbiB0byB0aGVtIG9uIGRlc3RydWN0aW9uLlxuXHR0aGlzLl9tYW5hZ2VkVGV4dHVyZXMgPSBbXTtcbiAgICB0aGlzLmdsVGV4dHVyZXMgPSB7fTtcblxufVxuXG5UZXh0dXJlTWFuYWdlci5wcm90b3R5cGUuYmluZFRleHR1cmUgPSBmdW5jdGlvbih0ZXh0dXJlKVxue1xuXG59XG5cblxuVGV4dHVyZU1hbmFnZXIucHJvdG90eXBlLmdldFRleHR1cmUgPSBmdW5jdGlvbih0ZXh0dXJlKVxue1xuXG59XG5cbi8qKlxuICogVXBkYXRlcyBhbmQvb3IgQ3JlYXRlcyBhIFdlYkdMIHRleHR1cmUgZm9yIHRoZSByZW5kZXJlcidzIGNvbnRleHQuXG4gKlxuICogQHBhcmFtIHRleHR1cmUge1BJWEkuQmFzZVRleHR1cmV8UElYSS5UZXh0dXJlfSB0aGUgdGV4dHVyZSB0byB1cGRhdGVcbiAqL1xuVGV4dHVyZU1hbmFnZXIucHJvdG90eXBlLnVwZGF0ZVRleHR1cmUgPSBmdW5jdGlvbih0ZXh0dXJlKVxue1xuXHR0ZXh0dXJlID0gdGV4dHVyZS5iYXNlVGV4dHVyZSB8fCB0ZXh0dXJlO1xuXG5cdGlmICghdGV4dHVyZS5oYXNMb2FkZWQpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgXG4gICAgdmFyIGdsID0gdGhpcy5nbDtcbiAgICB2YXIgZ2xUZXh0dXJlID0gdGhpcy5nbFRleHR1cmVzW3RleHR1cmUudWlkXS8vdGV4dHVyZS5fZ2xUZXh0dXJlc1tnbC5pZF07XG5cbiAgICBpZiAoIWdsVGV4dHVyZSlcbiAgICB7XG4gICAgICAgIGdsVGV4dHVyZSA9IG5ldyBHTFRleHR1cmUoZ2wpO1xuICAgICAgICBnbFRleHR1cmUucHJlbXVsdGlwbHlBbHBoYSA9IHRydWVcbiAgICAgICAgdGV4dHVyZS5fZ2xUZXh0dXJlc1tnbC5pZF0gPSBnbFRleHR1cmU7XG5cbiAgICAgICAvLyB0aGlzLmdsVGV4dHVyZXNbdGV4dHVyZS51aWRdID0gZ2xUZXh0dXJlO1xuXG4gICAgICAgIHRleHR1cmUub24oJ3VwZGF0ZScsIHRoaXMudXBkYXRlVGV4dHVyZSwgdGhpcyk7XG4gICAgICAgIHRleHR1cmUub24oJ2Rpc3Bvc2UnLCB0aGlzLmRlc3Ryb3lUZXh0dXJlLCB0aGlzKTtcbiAgICAgICAgXG4gICAgICAgIHRoaXMuX21hbmFnZWRUZXh0dXJlcy5wdXNoKHRleHR1cmUpO1xuICAgIH1cblxuICAgIGdsVGV4dHVyZS51cGxvYWQodGV4dHVyZS5zb3VyY2UpO1xuICAgIFxuICAgIC8vVE9ETyBjaGVjayBpcyBwb3dlciBvZiB0d28uLlxuICAgIGdsVGV4dHVyZS5lbmFibGVXcmFwQ2xhbXAoKTtcblxuXG4gICAgLy8gVE9ETyBjaGVjayBmb3Igc2NhbGluZyB0eXBlXG4gICAgZ2xUZXh0dXJlLmVuYWJsZUxpbmVhclNjYWxpbmcoKTtcblxuICAgIHJldHVybiAgdGV4dHVyZS5fZ2xUZXh0dXJlc1tnbC5pZF07XG59XG5cbi8qKlxuICogRGVsZXRlcyB0aGUgdGV4dHVyZSBmcm9tIFdlYkdMXG4gKlxuICogQHBhcmFtIHRleHR1cmUge1BJWEkuQmFzZVRleHR1cmV8UElYSS5UZXh0dXJlfSB0aGUgdGV4dHVyZSB0byBkZXN0cm95XG4gKi9cblRleHR1cmVNYW5hZ2VyLnByb3RvdHlwZS5kZXN0cm95VGV4dHVyZSA9IGZ1bmN0aW9uKHRleHR1cmUsIF9za2lwUmVtb3ZlKVxue1xuXHR0ZXh0dXJlID0gdGV4dHVyZS5iYXNlVGV4dHVyZSB8fCB0ZXh0dXJlO1xuXG4gICAgaWYgKCF0ZXh0dXJlLmhhc0xvYWRlZClcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAodGV4dHVyZS5fZ2xUZXh0dXJlc1t0aGlzLmdsLmlkXSlcbiAgICB7XG4gICAgICAgIHRleHR1cmUuX2dsVGV4dHVyZXNbdGhpcy5nbC5pZF0uZGVzdHJveSgpO1xuICAgICAgICB0ZXh0dXJlLm9mZigndXBkYXRlJywgdGhpcy51cGRhdGVUZXh0dXJlLCB0aGlzKTtcbiAgICAgICAgdGV4dHVyZS5vZmYoJ2Rpc3Bvc2UnLCB0aGlzLmRlc3Ryb3lUZXh0dXJlLCB0aGlzKTtcblxuXG4gICAgICAgIGRlbGV0ZSB0ZXh0dXJlLl9nbFRleHR1cmVzW3RoaXMuZ2wuaWRdO1xuXG4gICAgICAgIGlmICghX3NraXBSZW1vdmUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHZhciBpID0gdGhpcy5fbWFuYWdlZFRleHR1cmVzLmluZGV4T2YodGV4dHVyZSk7XG4gICAgICAgICAgICBpZiAoaSAhPT0gLTEpIHtcbiAgICAgICAgICAgICAgICB1dGlscy5yZW1vdmVJdGVtcyh0aGlzLl9tYW5hZ2VkVGV4dHVyZXMsIGksIDEpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxufVxuXG5UZXh0dXJlTWFuYWdlci5wcm90b3R5cGUucmVtb3ZlQWxsID0gZnVuY3Rpb24oKVxue1xuXHQvLyBlbXB0eSBhbGwgdGhlIG9sZCBnbCB0ZXh0dXJlcyBhcyB0aGV5IGFyZSB1c2VsZXNzIG5vd1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5fbWFuYWdlZFRleHR1cmVzLmxlbmd0aDsgKytpKVxuICAgIHtcbiAgICAgICAgdmFyIHRleHR1cmUgPSB0aGlzLl9tYW5hZ2VkVGV4dHVyZXNbaV07XG4gICAgICAgIGlmICh0ZXh0dXJlLl9nbFRleHR1cmVzW3RoaXMuZ2wuaWRdKVxuICAgICAgICB7XG4gICAgICAgICAgICBkZWxldGUgdGV4dHVyZS5fZ2xUZXh0dXJlc1t0aGlzLmdsLmlkXTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuVGV4dHVyZU1hbmFnZXIucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbigpXG57XG4gICAgLy8gZGVzdHJveSBtYW5hZ2VkIHRleHR1cmVzXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLl9tYW5hZ2VkVGV4dHVyZXMubGVuZ3RoOyArK2kpXG4gICAge1xuICAgICAgICB2YXIgdGV4dHVyZSA9IHRoaXMuX21hbmFnZWRUZXh0dXJlc1tpXTtcbiAgICAgICAgdGhpcy5kZXN0cm95VGV4dHVyZSh0ZXh0dXJlLCB0cnVlKTtcbiAgICAgICAgdGV4dHVyZS5vZmYoJ3VwZGF0ZScsIHRoaXMudXBkYXRlVGV4dHVyZSwgdGhpcyk7XG4gICAgICAgIHRleHR1cmUub2ZmKCdkaXNwb3NlJywgdGhpcy5kZXN0cm95VGV4dHVyZSwgdGhpcyk7XG4gICAgfVxuXG4gICAgdGhpcy5fbWFuYWdlZFRleHR1cmVzID0gbnVsbDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBUZXh0dXJlTWFuYWdlcjtcblxuIiwidmFyIFN5c3RlbVJlbmRlcmVyID0gcmVxdWlyZSgnLi4vU3lzdGVtUmVuZGVyZXInKSxcbiAgICBTaGFkZXJNYW5hZ2VyID0gcmVxdWlyZSgnLi9tYW5hZ2Vycy9TaGFkZXJNYW5hZ2VyJyksXG4gICAgTWFza01hbmFnZXIgPSByZXF1aXJlKCcuL21hbmFnZXJzL01hc2tNYW5hZ2VyJyksXG4gICAgU3RlbmNpbE1hbmFnZXIgPSByZXF1aXJlKCcuL21hbmFnZXJzL1N0ZW5jaWxNYW5hZ2VyJyksXG4gICAgRmlsdGVyTWFuYWdlciA9IHJlcXVpcmUoJy4vbWFuYWdlcnMvRmlsdGVyTWFuYWdlcicpLFxuICAgIEJsZW5kTW9kZU1hbmFnZXIgPSByZXF1aXJlKCcuL21hbmFnZXJzL0JsZW5kTW9kZU1hbmFnZXInKSxcbiAgICBSZW5kZXJUYXJnZXQgPSByZXF1aXJlKCcuL3V0aWxzL1JlbmRlclRhcmdldCcpLFxuICAgIE9iamVjdFJlbmRlcmVyID0gcmVxdWlyZSgnLi91dGlscy9PYmplY3RSZW5kZXJlcicpLFxuICAgIEZYQUFGaWx0ZXIgPSByZXF1aXJlKCcuL2ZpbHRlcnMvRlhBQUZpbHRlcicpLFxuICAgIFRleHR1cmVNYW5hZ2VyID0gcmVxdWlyZSgnLi9UZXh0dXJlTWFuYWdlcicpLFxuICAgIGNyZWF0ZUNvbnRleHQgPSByZXF1aXJlKCdwaXhpLWdsLWNvcmUnKS5jcmVhdGVDb250ZXh0LFxuICAgIG1hcFdlYkdMQmxlbmRNb2Rlc1RvUGl4aSA9IHJlcXVpcmUoJy4vdXRpbHMvbWFwV2ViR0xCbGVuZE1vZGVzVG9QaXhpJyksXG4gICAgbWFwV2ViR0xEcmF3TW9kZXNUb1BpeGkgPSByZXF1aXJlKCcuL3V0aWxzL21hcFdlYkdMRHJhd01vZGVzVG9QaXhpJyksXG4gICAgdXRpbHMgPSByZXF1aXJlKCcuLi8uLi91dGlscycpLFxuICAgIENPTlNUID0gcmVxdWlyZSgnLi4vLi4vY29uc3QnKTtcblxuLyoqXG4gKiBUaGUgV2ViR0xSZW5kZXJlciBkcmF3cyB0aGUgc2NlbmUgYW5kIGFsbCBpdHMgY29udGVudCBvbnRvIGEgd2ViR0wgZW5hYmxlZCBjYW52YXMuIFRoaXMgcmVuZGVyZXJcbiAqIHNob3VsZCBiZSB1c2VkIGZvciBicm93c2VycyB0aGF0IHN1cHBvcnQgd2ViR0wuIFRoaXMgUmVuZGVyIHdvcmtzIGJ5IGF1dG9tYXRpY2FsbHkgbWFuYWdpbmcgd2ViR0xCYXRjaHMuXG4gKiBTbyBubyBuZWVkIGZvciBTcHJpdGUgQmF0Y2hlcyBvciBTcHJpdGUgQ2xvdWRzLlxuICogRG9uJ3QgZm9yZ2V0IHRvIGFkZCB0aGUgdmlldyB0byB5b3VyIERPTSBvciB5b3Ugd2lsbCBub3Qgc2VlIGFueXRoaW5nIDopXG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQGV4dGVuZHMgUElYSS5TeXN0ZW1SZW5kZXJlclxuICogQHBhcmFtIFt3aWR0aD0wXSB7bnVtYmVyfSB0aGUgd2lkdGggb2YgdGhlIGNhbnZhcyB2aWV3XG4gKiBAcGFyYW0gW2hlaWdodD0wXSB7bnVtYmVyfSB0aGUgaGVpZ2h0IG9mIHRoZSBjYW52YXMgdmlld1xuICogQHBhcmFtIFtvcHRpb25zXSB7b2JqZWN0fSBUaGUgb3B0aW9uYWwgcmVuZGVyZXIgcGFyYW1ldGVyc1xuICogQHBhcmFtIFtvcHRpb25zLnZpZXddIHtIVE1MQ2FudmFzRWxlbWVudH0gdGhlIGNhbnZhcyB0byB1c2UgYXMgYSB2aWV3LCBvcHRpb25hbFxuICogQHBhcmFtIFtvcHRpb25zLnRyYW5zcGFyZW50PWZhbHNlXSB7Ym9vbGVhbn0gSWYgdGhlIHJlbmRlciB2aWV3IGlzIHRyYW5zcGFyZW50LCBkZWZhdWx0IGZhbHNlXG4gKiBAcGFyYW0gW29wdGlvbnMuYXV0b1Jlc2l6ZT1mYWxzZV0ge2Jvb2xlYW59IElmIHRoZSByZW5kZXIgdmlldyBpcyBhdXRvbWF0aWNhbGx5IHJlc2l6ZWQsIGRlZmF1bHQgZmFsc2VcbiAqIEBwYXJhbSBbb3B0aW9ucy5hbnRpYWxpYXM9ZmFsc2VdIHtib29sZWFufSBzZXRzIGFudGlhbGlhcy4gSWYgbm90IGF2YWlsYWJsZSBuYXRpdmVseSB0aGVuIEZYQUEgYW50aWFsaWFzaW5nIGlzIHVzZWRcbiAqIEBwYXJhbSBbb3B0aW9ucy5mb3JjZUZYQUE9ZmFsc2VdIHtib29sZWFufSBmb3JjZXMgRlhBQSBhbnRpYWxpYXNpbmcgdG8gYmUgdXNlZCBvdmVyIG5hdGl2ZS4gRlhBQSBpcyBmYXN0ZXIsIGJ1dCBtYXkgbm90IGFsd2F5cyBsb29rIGFzIGdyZWF0XG4gKiBAcGFyYW0gW29wdGlvbnMucmVzb2x1dGlvbj0xXSB7bnVtYmVyfSB0aGUgcmVzb2x1dGlvbiBvZiB0aGUgcmVuZGVyZXIgcmV0aW5hIHdvdWxkIGJlIDJcbiAqIEBwYXJhbSBbb3B0aW9ucy5jbGVhckJlZm9yZVJlbmRlcj10cnVlXSB7Ym9vbGVhbn0gVGhpcyBzZXRzIGlmIHRoZSBDYW52YXNSZW5kZXJlciB3aWxsIGNsZWFyIHRoZSBjYW52YXMgb3JcbiAqICAgICAgbm90IGJlZm9yZSB0aGUgbmV3IHJlbmRlciBwYXNzLiBJZiB5b3Ugd2lzaCB0byBzZXQgdGhpcyB0byBmYWxzZSwgeW91ICptdXN0KiBzZXQgcHJlc2VydmVEcmF3aW5nQnVmZmVyIHRvIGB0cnVlYC5cbiAqIEBwYXJhbSBbb3B0aW9ucy5wcmVzZXJ2ZURyYXdpbmdCdWZmZXI9ZmFsc2VdIHtib29sZWFufSBlbmFibGVzIGRyYXdpbmcgYnVmZmVyIHByZXNlcnZhdGlvbiwgZW5hYmxlIHRoaXMgaWZcbiAqICAgICAgeW91IG5lZWQgdG8gY2FsbCB0b0RhdGFVcmwgb24gdGhlIHdlYmdsIGNvbnRleHQuXG4gKiBAcGFyYW0gW29wdGlvbnMucm91bmRQaXhlbHM9ZmFsc2VdIHtib29sZWFufSBJZiB0cnVlIFBpeGkgd2lsbCBNYXRoLmZsb29yKCkgeC95IHZhbHVlcyB3aGVuIHJlbmRlcmluZywgc3RvcHBpbmcgcGl4ZWwgaW50ZXJwb2xhdGlvbi5cbiAqL1xuZnVuY3Rpb24gV2ViR0xSZW5kZXJlcih3aWR0aCwgaGVpZ2h0LCBvcHRpb25zKVxue1xuICAgIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuXG4gICAgU3lzdGVtUmVuZGVyZXIuY2FsbCh0aGlzLCAnV2ViR0wnLCB3aWR0aCwgaGVpZ2h0LCBvcHRpb25zKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSB0eXBlIG9mIHRoaXMgcmVuZGVyZXIgYXMgYSBzdGFuZGFyZGlzZWQgY29uc3RcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn0vL1xuICAgICAqXG4gICAgICovXG4gICAgdGhpcy50eXBlID0gQ09OU1QuUkVOREVSRVJfVFlQRS5XRUJHTDtcblxuICAgIHRoaXMuaGFuZGxlQ29udGV4dExvc3QgPSB0aGlzLmhhbmRsZUNvbnRleHRMb3N0LmJpbmQodGhpcyk7XG4gICAgdGhpcy5oYW5kbGVDb250ZXh0UmVzdG9yZWQgPSB0aGlzLmhhbmRsZUNvbnRleHRSZXN0b3JlZC5iaW5kKHRoaXMpO1xuXG4gICAgdGhpcy52aWV3LmFkZEV2ZW50TGlzdGVuZXIoJ3dlYmdsY29udGV4dGxvc3QnLCB0aGlzLmhhbmRsZUNvbnRleHRMb3N0LCBmYWxzZSk7XG4gICAgdGhpcy52aWV3LmFkZEV2ZW50TGlzdGVuZXIoJ3dlYmdsY29udGV4dHJlc3RvcmVkJywgdGhpcy5oYW5kbGVDb250ZXh0UmVzdG9yZWQsIGZhbHNlKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBvcHRpb25zIHBhc3NlZCBpbiB0byBjcmVhdGUgYSBuZXcgd2ViZ2wgY29udGV4dC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge29iamVjdH1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX2NvbnRleHRPcHRpb25zID0ge1xuICAgICAgICBhbHBoYTogdGhpcy50cmFuc3BhcmVudCxcbiAgICAgICAgYW50aWFsaWFzOiBvcHRpb25zLmFudGlhbGlhcyxcbiAgICAgICAgcHJlbXVsdGlwbGllZEFscGhhOiB0aGlzLnRyYW5zcGFyZW50ICYmIHRoaXMudHJhbnNwYXJlbnQgIT09ICdub3RNdWx0aXBsaWVkJyxcbiAgICAgICAgc3RlbmNpbDogdHJ1ZSxcbiAgICAgICAgcHJlc2VydmVEcmF3aW5nQnVmZmVyOiBvcHRpb25zLnByZXNlcnZlRHJhd2luZ0J1ZmZlclxuICAgIH07XG5cbiAgICB0aGlzLl9iYWNrZ3JvdW5kQ29sb3JSZ2JhWzNdID0gdGhpcy50cmFuc3BhcmVudCA/IDAgOiAxO1xuXG4gICAgLyoqXG4gICAgICogRGVhbHMgd2l0aCBtYW5hZ2luZyB0aGUgc2hhZGVyIHByb2dyYW1zIGFuZCB0aGVpciBhdHRyaWJzLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5TaGFkZXJNYW5hZ2VyfVxuICAgICAqL1xuICAgIHRoaXMuc2hhZGVyTWFuYWdlciA9IG5ldyBTaGFkZXJNYW5hZ2VyKHRoaXMpO1xuXG4gICAgLyoqXG4gICAgICogTWFuYWdlcyB0aGUgbWFza3MgdXNpbmcgdGhlIHN0ZW5jaWwgYnVmZmVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5NYXNrTWFuYWdlcn1cbiAgICAgKi9cbiAgICB0aGlzLm1hc2tNYW5hZ2VyID0gbmV3IE1hc2tNYW5hZ2VyKHRoaXMpO1xuXG4gICAgLyoqXG4gICAgICogTWFuYWdlcyB0aGUgc3RlbmNpbCBidWZmZXIuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlN0ZW5jaWxNYW5hZ2VyfVxuICAgICAqL1xuICAgIHRoaXMuc3RlbmNpbE1hbmFnZXIgPSBuZXcgU3RlbmNpbE1hbmFnZXIodGhpcyk7XG5cbiAgICAvKipcbiAgICAgKiBNYW5hZ2VzIHRoZSBmaWx0ZXJzLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5GaWx0ZXJNYW5hZ2VyfVxuICAgICAqL1xuICAgIHRoaXMuZmlsdGVyTWFuYWdlciA9IG5ldyBGaWx0ZXJNYW5hZ2VyKHRoaXMpO1xuXG4gICAgLyoqXG4gICAgICogTWFuYWdlcyB0aGUgYmxlbmRNb2Rlc1xuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5CbGVuZE1vZGVNYW5hZ2VyfVxuICAgICAqL1xuICAgIHRoaXMuYmxlbmRNb2RlTWFuYWdlciA9IG5ldyBCbGVuZE1vZGVNYW5hZ2VyKHRoaXMpO1xuXG4gICAgXG4gICAgLyoqXG4gICAgICogVGhlIGN1cnJlbnRseSBhY3RpdmUgT2JqZWN0UmVuZGVyZXIuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLk9iamVjdFJlbmRlcmVyfVxuICAgICAqL1xuICAgIHRoaXMuY3VycmVudFJlbmRlcmVyID0gbmV3IE9iamVjdFJlbmRlcmVyKHRoaXMpO1xuXG4gICAgdGhpcy5pbml0UGx1Z2lucygpO1xuXG4gICAgLy8gaW5pdGlhbGl6ZSB0aGUgY29udGV4dCBzbyBpdCBpcyByZWFkeSBmb3IgdGhlIG1hbmFnZXJzLlxuICAgIHRoaXMuZ2wgPSBjcmVhdGVDb250ZXh0KHRoaXMudmlldywgdGhpcy5fY29udGV4dE9wdGlvbnMpO1xuXG4gICAgdGhpcy5faW5pdENvbnRleHQoKTtcblxuICAgIC8vIG1hcCBzb21lIHdlYkdMIGJsZW5kIGFuZCBkcmF3bW9kZXMuLlxuICAgIHRoaXMuYmxlbmRNb2RlcyA9IG1hcFdlYkdMQmxlbmRNb2Rlc1RvUGl4aShnbCk7XG4gICAgdGhpcy5kcmF3TW9kZXMgPSBtYXBXZWJHTERyYXdNb2Rlc1RvUGl4aShnbClcblxuICAgIHRoaXMuX2FjdGl2ZVNoYWRlciA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBIb2xkcyB0aGUgY3VycmVudCByZW5kZXIgdGFyZ2V0XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlJlbmRlclRhcmdldH1cbiAgICAgKi9cbiAgICB0aGlzLl9hY3RpdmVSZW5kZXJUYXJnZXQgPSBudWxsO1xuICAgIHRoaXMuX2FjdGl2ZVRleHR1cmVMb2NhdGlvbiA9IG51bGw7XG4gICAgdGhpcy5fYWN0aXZlVGV4dHVyZSA9IG51bGw7XG59XG5cbi8vIGNvbnN0cnVjdG9yXG5XZWJHTFJlbmRlcmVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoU3lzdGVtUmVuZGVyZXIucHJvdG90eXBlKTtcbldlYkdMUmVuZGVyZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gV2ViR0xSZW5kZXJlcjtcbm1vZHVsZS5leHBvcnRzID0gV2ViR0xSZW5kZXJlcjtcbnV0aWxzLnBsdWdpblRhcmdldC5taXhpbihXZWJHTFJlbmRlcmVyKTtcblxuLyoqXG4gKiBDcmVhdGVzIHRoZSBXZWJHTCBjb250ZXh0XG4gKlxuICogQHByaXZhdGVcbiAqL1xuV2ViR0xSZW5kZXJlci5wcm90b3R5cGUuX2luaXRDb250ZXh0ID0gZnVuY3Rpb24gKClcbntcbiAgICB2YXIgZ2wgPSB0aGlzLmdsO1xuXG4gICAgLy8gY3JlYXRlIGEgdGV4dHVyZSBtYW5hZ2VyLi4uXG4gICAgdGhpcy50ZXh0dXJlTWFuYWdlciA9IG5ldyBUZXh0dXJlTWFuYWdlcihnbCk7XG5cbiAgICAvLyBzZXQgdXAgdGhlIGRlZmF1bHQgcGl4aSBzZXR0aW5ncy4uXG4gICAgZ2wuZGlzYWJsZShnbC5ERVBUSF9URVNUKTtcbiAgICBnbC5kaXNhYmxlKGdsLkNVTExfRkFDRSk7XG4gICAgZ2wuZW5hYmxlKGdsLkJMRU5EKTtcblxuXG4gICAgdGhpcy5yb290UmVuZGVyVGFyZ2V0ID0gbmV3IFJlbmRlclRhcmdldChnbCwgdGhpcy53aWR0aCwgdGhpcy5oZWlnaHQsIG51bGwsIHRoaXMucmVzb2x1dGlvbiwgdHJ1ZSk7XG4gICAgdGhpcy5yb290UmVuZGVyVGFyZ2V0LmNsZWFyQ29sb3IgPSB0aGlzLl9iYWNrZ3JvdW5kQ29sb3JSZ2JhO1xuICAgIFxuICAgIHRoaXMuYmluZFJlbmRlclRhcmdldCh0aGlzLnJvb3RSZW5kZXJUYXJnZXQpO1xuXG4gICAgdGhpcy5lbWl0KCdjb250ZXh0JywgZ2wpO1xuXG4gICAgLy8gc2V0dXAgdGhlIHdpZHRoL2hlaWdodCBwcm9wZXJ0aWVzIGFuZCBnbCB2aWV3cG9ydFxuICAgIHRoaXMucmVzaXplKHRoaXMud2lkdGgsIHRoaXMuaGVpZ2h0KTsgICAgXG59O1xuXG4vKipcbiAqIFJlbmRlcnMgdGhlIG9iamVjdCB0byBpdHMgd2ViR0wgdmlld1xuICpcbiAqIEBwYXJhbSBvYmplY3Qge1BJWEkuRGlzcGxheU9iamVjdH0gdGhlIG9iamVjdCB0byBiZSByZW5kZXJlZFxuICovXG5XZWJHTFJlbmRlcmVyLnByb3RvdHlwZS5yZW5kZXIgPSBmdW5jdGlvbiAoZGlzcGxheU9iamVjdClcbntcbiAgICB0aGlzLmVtaXQoJ3ByZXJlbmRlcicpO1xuXG4gICAgLy8gbm8gcG9pbnQgcmVuZGVyaW5nIGlmIG91ciBjb250ZXh0IGhhcyBiZWVuIGJsb3duIHVwIVxuICAgIGlmICh0aGlzLmdsLmlzQ29udGV4dExvc3QoKSlcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLl9sYXN0T2JqZWN0UmVuZGVyZWQgPSBkaXNwbGF5T2JqZWN0O1xuXG4gICAgdmFyIGNhY2hlUGFyZW50ID0gZGlzcGxheU9iamVjdC5wYXJlbnQ7XG4gICAgZGlzcGxheU9iamVjdC5wYXJlbnQgPSB0aGlzLl90ZW1wRGlzcGxheU9iamVjdFBhcmVudDtcbiAgICAvLyB1cGRhdGUgdGhlIHNjZW5lIGdyYXBoXG4gICAgZGlzcGxheU9iamVjdC51cGRhdGVUcmFuc2Zvcm0oKTtcbiAgICBkaXNwbGF5T2JqZWN0LnBhcmVudCA9IGNhY2hlUGFyZW50O1xuXG4gICAgdGhpcy5yZW5kZXJEaXNwbGF5T2JqZWN0KGRpc3BsYXlPYmplY3QsIHRoaXMucm9vdFJlbmRlclRhcmdldCwgdGhpcy5jbGVhckJlZm9yZVJlbmRlcik7Ly90aGlzLnByb2plY3Rpb24pO1xuXG4gICAgdGhpcy5lbWl0KCdwb3N0cmVuZGVyJyk7XG59O1xuXG4vKipcbiAqIFJlbmRlcnMgYSBEaXNwbGF5IE9iamVjdC5cbiAqXG4gKiBAcGFyYW0gZGlzcGxheU9iamVjdCB7UElYSS5EaXNwbGF5T2JqZWN0fSBUaGUgRGlzcGxheU9iamVjdCB0byByZW5kZXJcbiAqIEBwYXJhbSByZW5kZXJUYXJnZXQge1BJWEkuUmVuZGVyVGFyZ2V0fSBUaGUgcmVuZGVyIHRhcmdldCB0byB1c2UgdG8gcmVuZGVyIHRoaXMgZGlzcGxheSBvYmplY3RcbiAqXG4gKi9cbldlYkdMUmVuZGVyZXIucHJvdG90eXBlLnJlbmRlckRpc3BsYXlPYmplY3QgPSBmdW5jdGlvbiAoZGlzcGxheU9iamVjdCwgcmVuZGVyVGFyZ2V0LCBjbGVhcikvL3Byb2plY3Rpb24sIGJ1ZmZlcilcbntcbiAgICB0aGlzLmJpbmRSZW5kZXJUYXJnZXQocmVuZGVyVGFyZ2V0KTtcblxuICAgIGlmKGNsZWFyKVxuICAgIHtcbiAgICAgICAgcmVuZGVyVGFyZ2V0LmNsZWFyKCk7XG4gICAgfVxuXG4gICAgLy8gc3RhcnQgdGhlIGZpbHRlciBtYW5hZ2VyXG4gICAgdGhpcy5maWx0ZXJNYW5hZ2VyLnNldEZpbHRlclN0YWNrKCByZW5kZXJUYXJnZXQuZmlsdGVyU3RhY2sgKTtcblxuICAgIC8vIHJlbmRlciB0aGUgc2NlbmUhXG4gICAgZGlzcGxheU9iamVjdC5yZW5kZXJXZWJHTCh0aGlzKTtcblxuICAgIC8vIGZpbmlzaCB0aGUgY3VycmVudCByZW5kZXJlci4uXG4gICAgdGhpcy5jdXJyZW50UmVuZGVyZXIuZmx1c2goKTtcbn07XG5cbi8qKlxuICogQ2hhbmdlcyB0aGUgY3VycmVudCByZW5kZXJlciB0byB0aGUgb25lIGdpdmVuIGluIHBhcmFtZXRlclxuICpcbiAqIEBwYXJhbSBvYmplY3RSZW5kZXJlciB7UElYSS5PYmplY3RSZW5kZXJlcn0gVGhlIG9iamVjdCByZW5kZXJlciB0byB1c2UuXG4gKi9cbldlYkdMUmVuZGVyZXIucHJvdG90eXBlLnNldE9iamVjdFJlbmRlcmVyID0gZnVuY3Rpb24gKG9iamVjdFJlbmRlcmVyKVxue1xuICAgIGlmICh0aGlzLmN1cnJlbnRSZW5kZXJlciA9PT0gb2JqZWN0UmVuZGVyZXIpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5jdXJyZW50UmVuZGVyZXIuc3RvcCgpO1xuICAgIHRoaXMuY3VycmVudFJlbmRlcmVyID0gb2JqZWN0UmVuZGVyZXI7XG4gICAgdGhpcy5jdXJyZW50UmVuZGVyZXIuc3RhcnQoKTtcbn07XG5cbi8qKlxuICogUmVzaXplcyB0aGUgd2ViR0wgdmlldyB0byB0aGUgc3BlY2lmaWVkIHdpZHRoIGFuZCBoZWlnaHQuXG4gKlxuICogQHBhcmFtIHdpZHRoIHtudW1iZXJ9IHRoZSBuZXcgd2lkdGggb2YgdGhlIHdlYkdMIHZpZXdcbiAqIEBwYXJhbSBoZWlnaHQge251bWJlcn0gdGhlIG5ldyBoZWlnaHQgb2YgdGhlIHdlYkdMIHZpZXdcbiAqL1xuV2ViR0xSZW5kZXJlci5wcm90b3R5cGUucmVzaXplID0gZnVuY3Rpb24gKHdpZHRoLCBoZWlnaHQpXG57XG4gICAgU3lzdGVtUmVuZGVyZXIucHJvdG90eXBlLnJlc2l6ZS5jYWxsKHRoaXMsIHdpZHRoLCBoZWlnaHQpO1xuXG4gICAgdGhpcy5maWx0ZXJNYW5hZ2VyLnJlc2l6ZSh3aWR0aCwgaGVpZ2h0KTtcbiAgICB0aGlzLnJvb3RSZW5kZXJUYXJnZXQucmVzaXplKHdpZHRoLCBoZWlnaHQpO1xuXG4gICAgaWYodGhpcy5jdXJyZW50UmVuZGVyVGFyZ2V0ID09PSB0aGlzLnJlbmRlclRhcmdldClcbiAgICB7XG4gICAgICAgIHRoaXMucm9vdFJlbmRlclRhcmdldC5hY3RpdmF0ZSgpO1xuICAgIH1cbn07XG5cbi8qKlxuICogQ2hhbmdlcyB0aGUgY3VycmVudCByZW5kZXIgdGFyZ2V0IHRvIHRoZSBvbmUgZ2l2ZW4gaW4gcGFyYW1ldGVyXG4gKlxuICogQHBhcmFtIHJlbmRlclRhcmdldCB7UElYSS5SZW5kZXJUYXJnZXR9IHRoZSBuZXcgcmVuZGVyIHRhcmdldFxuICovXG5XZWJHTFJlbmRlcmVyLnByb3RvdHlwZS5iaW5kUmVuZGVyVGFyZ2V0ID0gZnVuY3Rpb24gKHJlbmRlclRhcmdldCkvL3Byb2plY3Rpb24sIGJ1ZmZlcilcbntcbiAgICBpZihyZW5kZXJUYXJnZXQgIT09IHRoaXMuX2FjdGl2ZVJlbmRlclRhcmdldClcbiAgICB7XG4gICAgICAgIHRoaXMuX2FjdGl2ZVJlbmRlclRhcmdldCA9IHJlbmRlclRhcmdldDtcblxuICAgICAgICBpZih0aGlzLl9hY3RpdmVTaGFkZXIpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuX2FjdGl2ZVNoYWRlci51bmlmb3Jtcy5wcm9qZWN0aW9uTWF0cml4ID0gcmVuZGVyVGFyZ2V0LnByb2plY3Rpb25NYXRyaXgudG9BcnJheSh0cnVlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJlbmRlclRhcmdldC5hY3RpdmF0ZSgpO1xuXG4gICAgICAgIHRoaXMuc3RlbmNpbE1hbmFnZXIuc2V0TWFza1N0YWNrKCByZW5kZXJUYXJnZXQuc3RlbmNpbE1hc2tTdGFjayApO1xuICAgIH1cbn1cblxuV2ViR0xSZW5kZXJlci5wcm90b3R5cGUuYmluZFNoYWRlciA9IGZ1bmN0aW9uIChzaGFkZXIpLy9wcm9qZWN0aW9uLCBidWZmZXIpXG57XG4gICAgLy9UT0RPIGNhY2hlXG4gICAgaWYodGhpcy5fYWN0aXZlU2hhZGVyICE9PSBzaGFkZXIpXG4gICAge1xuICAgICAgICB0aGlzLl9hY3RpdmVTaGFkZXIgPSBzaGFkZXI7XG4gICAgICAgIHNoYWRlci5iaW5kKCk7XG5cbiAgICAgICAgLy8gYXV0b21hdGljYWxseSBzZXQgdGhlIHByb2plY3Rpb24gbWF0cml4XG4gICAgICAgIHNoYWRlci51bmlmb3Jtcy5wcm9qZWN0aW9uTWF0cml4ID0gdGhpcy5fYWN0aXZlUmVuZGVyVGFyZ2V0LnByb2plY3Rpb25NYXRyaXgudG9BcnJheSh0cnVlKTtcbiAgICB9XG59XG5cblxuV2ViR0xSZW5kZXJlci5wcm90b3R5cGUuYmluZFRleHR1cmUgPSBmdW5jdGlvbiAodGV4dHVyZSwgbG9jYXRpb24pXG57XG4gICAgdmFyIGdsID0gdGhpcy5nbDtcblxuICAgIC8vVE9ETyB0ZXN0IHBlcmYgb2YgY2FjaGU/XG4gICAgbG9jYXRpb24gPSBsb2NhdGlvbiB8fCAwO1xuXG4gICAgaWYodGhpcy5fYWN0aXZlVGV4dHVyZUxvY2F0aW9uICE9PSBsb2NhdGlvbikvL1xuICAgIHtcbiAgICAgICAgdGhpcy5fYWN0aXZlVGV4dHVyZUxvY2F0aW9uID0gbG9jYXRpb25cbiAgICAgICAgZ2wuYWN0aXZlVGV4dHVyZShnbC5URVhUVVJFMCArIGxvY2F0aW9uICk7XG4gICAgfVxuXG4gICAgLy9UT0RPIC0gY2FuIHdlIGNhY2hlIHRoaXMgdGV4dHVyZSB0b28/XG4gICAgdGhpcy5fYWN0aXZlVGV4dHVyZSA9IHRleHR1cmU7ICAgICAgXG4gICAgXG4gICAgaWYgKCF0ZXh0dXJlLl9nbFRleHR1cmVzW2dsLmlkXSlcbiAgICB7XG4gICAgICAgIC8vIHRoaXMgd2lsbCBhbHNvIGJpbmQgdGhlIHRleHR1cmUuLlxuICAgICAgICB0aGlzLnRleHR1cmVNYW5hZ2VyLnVwZGF0ZVRleHR1cmUodGV4dHVyZSk7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7ICAgXG4gICAgICAgIC8vIGJpbmQgdGhlIGN1cnJlbnQgdGV4dHVyZVxuICAgICAgICB0ZXh0dXJlLl9nbFRleHR1cmVzW2dsLmlkXS5iaW5kKCk7XG4gICAgfVxufVxuXG5cbi8qKlxuICogSGFuZGxlcyBhIGxvc3Qgd2ViZ2wgY29udGV4dFxuICpcbiAqIEBwcml2YXRlXG4gKi9cbldlYkdMUmVuZGVyZXIucHJvdG90eXBlLmhhbmRsZUNvbnRleHRMb3N0ID0gZnVuY3Rpb24gKGV2ZW50KVxue1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG59O1xuXG4vKipcbiAqIEhhbmRsZXMgYSByZXN0b3JlZCB3ZWJnbCBjb250ZXh0XG4gKlxuICogQHByaXZhdGVcbiAqL1xuV2ViR0xSZW5kZXJlci5wcm90b3R5cGUuaGFuZGxlQ29udGV4dFJlc3RvcmVkID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLl9pbml0Q29udGV4dCgpO1xuICAgIHRoaXMudGV4dHVyZU1hbmFnZXIucmVtb3ZlQWxsKCk7XG59O1xuXG4vKipcbiAqIFJlbW92ZXMgZXZlcnl0aGluZyBmcm9tIHRoZSByZW5kZXJlciAoZXZlbnQgbGlzdGVuZXJzLCBzcHJpdGViYXRjaCwgZXRjLi4uKVxuICpcbiAqIEBwYXJhbSBbcmVtb3ZlVmlldz1mYWxzZV0ge2Jvb2xlYW59IFJlbW92ZXMgdGhlIENhbnZhcyBlbGVtZW50IGZyb20gdGhlIERPTS5cbiAqL1xuV2ViR0xSZW5kZXJlci5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uIChyZW1vdmVWaWV3KVxue1xuICAgIHRoaXMuZGVzdHJveVBsdWdpbnMoKTtcblxuICAgIC8vIHJlbW92ZSBsaXN0ZW5lcnNcbiAgICB0aGlzLnZpZXcucmVtb3ZlRXZlbnRMaXN0ZW5lcignd2ViZ2xjb250ZXh0bG9zdCcsIHRoaXMuaGFuZGxlQ29udGV4dExvc3QpO1xuICAgIHRoaXMudmlldy5yZW1vdmVFdmVudExpc3RlbmVyKCd3ZWJnbGNvbnRleHRyZXN0b3JlZCcsIHRoaXMuaGFuZGxlQ29udGV4dFJlc3RvcmVkKTtcblxuICAgIHRoaXMudGV4dHVyZU1hbmFnZXIuZGVzdHJveUFsbCgpO1xuXG4gICAgLy8gY2FsbCBiYXNlIGRlc3Ryb3lcbiAgICBTeXN0ZW1SZW5kZXJlci5wcm90b3R5cGUuZGVzdHJveS5jYWxsKHRoaXMsIHJlbW92ZVZpZXcpO1xuXG4gICAgdGhpcy51aWQgPSAwO1xuXG4gICAgLy8gZGVzdHJveSB0aGUgbWFuYWdlcnNcbiAgICB0aGlzLnNoYWRlck1hbmFnZXIuZGVzdHJveSgpO1xuICAgIHRoaXMubWFza01hbmFnZXIuZGVzdHJveSgpO1xuICAgIHRoaXMuc3RlbmNpbE1hbmFnZXIuZGVzdHJveSgpO1xuICAgIHRoaXMuZmlsdGVyTWFuYWdlci5kZXN0cm95KCk7XG4gICAgdGhpcy5ibGVuZE1vZGVNYW5hZ2VyLmRlc3Ryb3koKTtcblxuICAgIHRoaXMuc2hhZGVyTWFuYWdlciA9IG51bGw7XG4gICAgdGhpcy5tYXNrTWFuYWdlciA9IG51bGw7XG4gICAgdGhpcy5maWx0ZXJNYW5hZ2VyID0gbnVsbDtcbiAgICB0aGlzLmJsZW5kTW9kZU1hbmFnZXIgPSBudWxsO1xuICAgIHRoaXMuY3VycmVudFJlbmRlcmVyID0gbnVsbDtcblxuICAgIHRoaXMuaGFuZGxlQ29udGV4dExvc3QgPSBudWxsO1xuICAgIHRoaXMuaGFuZGxlQ29udGV4dFJlc3RvcmVkID0gbnVsbDtcblxuICAgIHRoaXMuX2NvbnRleHRPcHRpb25zID0gbnVsbDtcblxuICAgIHRoaXMuZ2wudXNlUHJvZ3JhbShudWxsKTtcbiAgICB0aGlzLmdsID0gbnVsbDtcbn07XG5cbiIsInZhciBEZWZhdWx0U2hhZGVyID0gcmVxdWlyZSgnLi4vc2hhZGVycy9UZXh0dXJlU2hhZGVyJyk7XG5cbi8qKlxuICogVGhpcyBpcyB0aGUgYmFzZSBjbGFzcyBmb3IgY3JlYXRpbmcgYSBQSVhJIGZpbHRlci4gQ3VycmVudGx5IG9ubHkgV2ViR0wgc3VwcG9ydHMgZmlsdGVycy5cbiAqIElmIHlvdSB3YW50IHRvIG1ha2UgYSBjdXN0b20gZmlsdGVyIHRoaXMgc2hvdWxkIGJlIHlvdXIgYmFzZSBjbGFzcy5cbiAqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gdmVydGV4U3JjIHtzdHJpbmd8c3RyaW5nW119IFRoZSB2ZXJ0ZXggc2hhZGVyIHNvdXJjZSBhcyBhbiBhcnJheSBvZiBzdHJpbmdzLlxuICogQHBhcmFtIGZyYWdtZW50U3JjIHtzdHJpbmd8c3RyaW5nW119IFRoZSBmcmFnbWVudCBzaGFkZXIgc291cmNlIGFzIGFuIGFycmF5IG9mIHN0cmluZ3MuXG4gKiBAcGFyYW0gdW5pZm9ybXMge29iamVjdH0gQW4gb2JqZWN0IGNvbnRhaW5pbmcgdGhlIHVuaWZvcm1zIGZvciB0aGlzIGZpbHRlci5cbiAqL1xuZnVuY3Rpb24gQWJzdHJhY3RGaWx0ZXIodmVydGV4U3JjLCBmcmFnbWVudFNyYywgdW5pZm9ybXMpXG57XG5cbiAgICAvKipcbiAgICAgKiBBbiBhcnJheSBvZiBzaGFkZXJzXG4gICAgICogQG1lbWJlciB7UElYSS5TaGFkZXJbXX1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuc2hhZGVycyA9IFtdO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGV4dHJhIHBhZGRpbmcgdGhhdCB0aGUgZmlsdGVyIG1pZ2h0IG5lZWRcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy5wYWRkaW5nID0gMDtcblxuICAgIC8qKlxuICAgICAqIFRoZSB1bmlmb3JtcyBhcyBhbiBvYmplY3RcbiAgICAgKiBAbWVtYmVyIHtvYmplY3R9XG4gICAgICovXG4gICAgdGhpcy51bmlmb3JtcyA9IHVuaWZvcm1zIHx8IHt9O1xuXG5cbiAgICAvKipcbiAgICAgKiBUaGUgY29kZSBvZiB0aGUgdmVydGV4IHNoYWRlclxuICAgICAqIEBtZW1iZXIge3N0cmluZ1tdfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy52ZXJ0ZXhTcmMgPSB2ZXJ0ZXhTcmMgfHwgRGVmYXVsdFNoYWRlci5kZWZhdWx0VmVydGV4U3JjO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGNvZGUgb2YgdGhlIGZyYW1lbnQgc2hhZGVyXG4gICAgICogQG1lbWJlciB7c3RyaW5nW119XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLmZyYWdtZW50U3JjID0gZnJhZ21lbnRTcmMgfHwgRGVmYXVsdFNoYWRlci5kZWZhdWx0RnJhZ21lbnRTcmM7XG5cbiAgICAvL1RPRE8gYSByZW1pbmRlciAtIHdvdWxkIGJlIGNvb2wgdG8gaGF2ZSBsb3dlciByZXMgZmlsdGVycyBhcyB0aGlzIHdvdWxkIGdpdmUgYmV0dGVyIHBlcmZvcm1hbmNlLlxuXG4gICAgLy90eXBlb2YgZnJhZ21lbnRTcmMgPT09ICdzdHJpbmcnID8gZnJhZ21lbnRTcmMuc3BsaXQoJycpIDogKGZyYWdtZW50U3JjIHx8IFtdKTtcblxufVxuXG5BYnN0cmFjdEZpbHRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBBYnN0cmFjdEZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gQWJzdHJhY3RGaWx0ZXI7XG5cbi8qKlxuICogR3JhYnMgYSBzaGFkZXIgZnJvbSB0aGUgY3VycmVudCByZW5kZXJlclxuICpcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5XZWJHTFJlbmRlcmVyfSBUaGUgcmVuZGVyZXIgdG8gcmV0cmlldmUgdGhlIHNoYWRlciBmcm9tXG4gKi9cbkFic3RyYWN0RmlsdGVyLnByb3RvdHlwZS5nZXRTaGFkZXIgPSBmdW5jdGlvbiAocmVuZGVyZXIpXG57XG4gICAgdmFyIGdsID0gcmVuZGVyZXIuZ2w7XG5cbiAgICB2YXIgc2hhZGVyID0gdGhpcy5zaGFkZXJzW2dsLmlkXTtcblxuICAgIGlmICghc2hhZGVyKVxuICAgIHtcbiAgICAgICAgc2hhZGVyID0gbmV3IERlZmF1bHRTaGFkZXIocmVuZGVyZXIuc2hhZGVyTWFuYWdlcixcbiAgICAgICAgICAgIHRoaXMudmVydGV4U3JjLFxuICAgICAgICAgICAgdGhpcy5mcmFnbWVudFNyYyxcbiAgICAgICAgICAgIHRoaXMudW5pZm9ybXMsXG4gICAgICAgICAgICB0aGlzLmF0dHJpYnV0ZXNcbiAgICAgICAgKTtcblxuICAgICAgICB0aGlzLnNoYWRlcnNbZ2wuaWRdID0gc2hhZGVyO1xuICAgIH1cblxuICAgIHJldHVybiBzaGFkZXI7XG59O1xuXG4vKipcbiAqIEFwcGxpZXMgdGhlIGZpbHRlclxuICpcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5XZWJHTFJlbmRlcmVyfSBUaGUgcmVuZGVyZXIgdG8gcmV0cmlldmUgdGhlIGZpbHRlciBmcm9tXG4gKiBAcGFyYW0gaW5wdXQge1BJWEkuUmVuZGVyVGFyZ2V0fVxuICogQHBhcmFtIG91dHB1dCB7UElYSS5SZW5kZXJUYXJnZXR9XG4gKiBAcGFyYW0gY2xlYXIge2Jvb2xlYW59IFdoZXRoZXIgb3Igbm90IHdlIHdhbnQgdG8gY2xlYXIgdGhlIG91dHB1dFRhcmdldFxuICovXG5BYnN0cmFjdEZpbHRlci5wcm90b3R5cGUuYXBwbHlGaWx0ZXIgPSBmdW5jdGlvbiAocmVuZGVyZXIsIGlucHV0LCBvdXRwdXQsIGNsZWFyKVxue1xuICAgIHZhciBzaGFkZXIgPSB0aGlzLmdldFNoYWRlcihyZW5kZXJlcik7XG5cbiAgICByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLmFwcGx5RmlsdGVyKHNoYWRlciwgaW5wdXQsIG91dHB1dCwgY2xlYXIpO1xufTtcblxuLyoqXG4gKiBTeW5jcyBhIHVuaWZvcm0gYmV0d2VlbiB0aGUgY2xhc3Mgb2JqZWN0IGFuZCB0aGUgc2hhZGVycy5cbiAqXG4gKi9cbkFic3RyYWN0RmlsdGVyLnByb3RvdHlwZS5zeW5jVW5pZm9ybSA9IGZ1bmN0aW9uICh1bmlmb3JtKVxue1xuICAgIGZvciAodmFyIGkgPSAwLCBqID0gdGhpcy5zaGFkZXJzLmxlbmd0aDsgaSA8IGo7ICsraSlcbiAgICB7XG4gICAgICAgIHRoaXMuc2hhZGVyc1tpXS5zeW5jVW5pZm9ybSh1bmlmb3JtKTtcbiAgICB9XG59O1xuIiwidmFyIEFic3RyYWN0RmlsdGVyID0gcmVxdWlyZSgnLi9BYnN0cmFjdEZpbHRlcicpO1xuLy8gQHNlZSBodHRwczovL2dpdGh1Yi5jb20vc3Vic3RhY2svYnJmcy9pc3N1ZXMvMjVcblxuXG4vKipcbiAqXG4gKiBCYXNpYyBGWEFBIGltcGxlbWVudGF0aW9uIGJhc2VkIG9uIHRoZSBjb2RlIG9uIGdlZWtzM2QuY29tIHdpdGggdGhlXG4gKiBtb2RpZmljYXRpb24gdGhhdCB0aGUgdGV4dHVyZTJETG9kIHN0dWZmIHdhcyByZW1vdmVkIHNpbmNlIGl0J3NcbiAqIHVuc3VwcG9ydGVkIGJ5IFdlYkdMLlxuICpcbiAqIC0tXG4gKiBGcm9tOlxuICogaHR0cHM6Ly9naXRodWIuY29tL21pdHN1aGlrby93ZWJnbC1tZWluY3JhZnRcbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQWJzdHJhY3RGaWx0ZXJcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKlxuICovXG5mdW5jdGlvbiBGWEFBRmlsdGVyKClcbntcbiAgICBBYnN0cmFjdEZpbHRlci5jYWxsKHRoaXMsXG4gICAgICAgIC8vIHZlcnRleCBzaGFkZXJcbiAgICAgICAgXCJcXG5wcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcXG5cXG5hdHRyaWJ1dGUgdmVjMiBhVmVydGV4UG9zaXRpb247XFxuYXR0cmlidXRlIHZlYzIgYVRleHR1cmVDb29yZDtcXG5hdHRyaWJ1dGUgdmVjNCBhQ29sb3I7XFxuXFxudW5pZm9ybSBtYXQzIHByb2plY3Rpb25NYXRyaXg7XFxudW5pZm9ybSB2ZWMyIHJlc29sdXRpb247XFxuXFxudmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7XFxudmFyeWluZyB2ZWM0IHZDb2xvcjtcXG5cXG52YXJ5aW5nIHZlYzIgdlJlc29sdXRpb247XFxuXFxuLy90ZXhjb29yZHMgY29tcHV0ZWQgaW4gdmVydGV4IHN0ZXBcXG4vL3RvIGF2b2lkIGRlcGVuZGVudCB0ZXh0dXJlIHJlYWRzXFxudmFyeWluZyB2ZWMyIHZfcmdiTlc7XFxudmFyeWluZyB2ZWMyIHZfcmdiTkU7XFxudmFyeWluZyB2ZWMyIHZfcmdiU1c7XFxudmFyeWluZyB2ZWMyIHZfcmdiU0U7XFxudmFyeWluZyB2ZWMyIHZfcmdiTTtcXG5cXG5cXG52b2lkIHRleGNvb3Jkcyh2ZWMyIGZyYWdDb29yZCwgdmVjMiByZXNvbHV0aW9uLFxcbiAgICAgICAgICAgIG91dCB2ZWMyIHZfcmdiTlcsIG91dCB2ZWMyIHZfcmdiTkUsXFxuICAgICAgICAgICAgb3V0IHZlYzIgdl9yZ2JTVywgb3V0IHZlYzIgdl9yZ2JTRSxcXG4gICAgICAgICAgICBvdXQgdmVjMiB2X3JnYk0pIHtcXG4gICAgdmVjMiBpbnZlcnNlVlAgPSAxLjAgLyByZXNvbHV0aW9uLnh5O1xcbiAgICB2X3JnYk5XID0gKGZyYWdDb29yZCArIHZlYzIoLTEuMCwgLTEuMCkpICogaW52ZXJzZVZQO1xcbiAgICB2X3JnYk5FID0gKGZyYWdDb29yZCArIHZlYzIoMS4wLCAtMS4wKSkgKiBpbnZlcnNlVlA7XFxuICAgIHZfcmdiU1cgPSAoZnJhZ0Nvb3JkICsgdmVjMigtMS4wLCAxLjApKSAqIGludmVyc2VWUDtcXG4gICAgdl9yZ2JTRSA9IChmcmFnQ29vcmQgKyB2ZWMyKDEuMCwgMS4wKSkgKiBpbnZlcnNlVlA7XFxuICAgIHZfcmdiTSA9IHZlYzIoZnJhZ0Nvb3JkICogaW52ZXJzZVZQKTtcXG59XFxuXFxudm9pZCBtYWluKHZvaWQpe1xcbiAgIGdsX1Bvc2l0aW9uID0gdmVjNCgocHJvamVjdGlvbk1hdHJpeCAqIHZlYzMoYVZlcnRleFBvc2l0aW9uLCAxLjApKS54eSwgMC4wLCAxLjApO1xcbiAgIHZUZXh0dXJlQ29vcmQgPSBhVGV4dHVyZUNvb3JkO1xcbiAgIHZDb2xvciA9IHZlYzQoYUNvbG9yLnJnYiAqIGFDb2xvci5hLCBhQ29sb3IuYSk7XFxuICAgdlJlc29sdXRpb24gPSByZXNvbHV0aW9uO1xcblxcbiAgIC8vY29tcHV0ZSB0aGUgdGV4dHVyZSBjb29yZHMgYW5kIHNlbmQgdGhlbSB0byB2YXJ5aW5nc1xcbiAgIHRleGNvb3JkcyhhVGV4dHVyZUNvb3JkICogcmVzb2x1dGlvbiwgcmVzb2x1dGlvbiwgdl9yZ2JOVywgdl9yZ2JORSwgdl9yZ2JTVywgdl9yZ2JTRSwgdl9yZ2JNKTtcXG59XFxuXCIsXG4gICAgICAgIC8vIGZyYWdtZW50IHNoYWRlclxuICAgICAgICBcInByZWNpc2lvbiBsb3dwIGZsb2F0O1xcblxcblxcbi8qKlxcbkJhc2ljIEZYQUEgaW1wbGVtZW50YXRpb24gYmFzZWQgb24gdGhlIGNvZGUgb24gZ2Vla3MzZC5jb20gd2l0aCB0aGVcXG5tb2RpZmljYXRpb24gdGhhdCB0aGUgdGV4dHVyZTJETG9kIHN0dWZmIHdhcyByZW1vdmVkIHNpbmNlIGl0J3NcXG51bnN1cHBvcnRlZCBieSBXZWJHTC5cXG5cXG4tLVxcblxcbkZyb206XFxuaHR0cHM6Ly9naXRodWIuY29tL21pdHN1aGlrby93ZWJnbC1tZWluY3JhZnRcXG5cXG5Db3B5cmlnaHQgKGMpIDIwMTEgYnkgQXJtaW4gUm9uYWNoZXIuXFxuXFxuU29tZSByaWdodHMgcmVzZXJ2ZWQuXFxuXFxuUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0XFxubW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZVxcbm1ldDpcXG5cXG4gICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodFxcbiAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci5cXG5cXG4gICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlXFxuICAgICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmdcXG4gICAgICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWRcXG4gICAgICB3aXRoIHRoZSBkaXN0cmlidXRpb24uXFxuXFxuICAgICogVGhlIG5hbWVzIG9mIHRoZSBjb250cmlidXRvcnMgbWF5IG5vdCBiZSB1c2VkIHRvIGVuZG9yc2Ugb3JcXG4gICAgICBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWNcXG4gICAgICBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uXFxuXFxuVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SU1xcblxcXCJBUyBJU1xcXCIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UXFxuTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SXFxuQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFRcXG5PV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCxcXG5TUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UXFxuTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsXFxuREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZXFxuVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVFxcbihJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRVxcbk9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuXFxuKi9cXG5cXG4jaWZuZGVmIEZYQUFfUkVEVUNFX01JTlxcbiAgICAjZGVmaW5lIEZYQUFfUkVEVUNFX01JTiAgICgxLjAvIDEyOC4wKVxcbiNlbmRpZlxcbiNpZm5kZWYgRlhBQV9SRURVQ0VfTVVMXFxuICAgICNkZWZpbmUgRlhBQV9SRURVQ0VfTVVMICAgKDEuMCAvIDguMClcXG4jZW5kaWZcXG4jaWZuZGVmIEZYQUFfU1BBTl9NQVhcXG4gICAgI2RlZmluZSBGWEFBX1NQQU5fTUFYICAgICA4LjBcXG4jZW5kaWZcXG5cXG4vL29wdGltaXplZCB2ZXJzaW9uIGZvciBtb2JpbGUsIHdoZXJlIGRlcGVuZGVudFxcbi8vdGV4dHVyZSByZWFkcyBjYW4gYmUgYSBib3R0bGVuZWNrXFxudmVjNCBmeGFhKHNhbXBsZXIyRCB0ZXgsIHZlYzIgZnJhZ0Nvb3JkLCB2ZWMyIHJlc29sdXRpb24sXFxuICAgICAgICAgICAgdmVjMiB2X3JnYk5XLCB2ZWMyIHZfcmdiTkUsXFxuICAgICAgICAgICAgdmVjMiB2X3JnYlNXLCB2ZWMyIHZfcmdiU0UsXFxuICAgICAgICAgICAgdmVjMiB2X3JnYk0pIHtcXG4gICAgdmVjNCBjb2xvcjtcXG4gICAgbWVkaXVtcCB2ZWMyIGludmVyc2VWUCA9IHZlYzIoMS4wIC8gcmVzb2x1dGlvbi54LCAxLjAgLyByZXNvbHV0aW9uLnkpO1xcbiAgICB2ZWMzIHJnYk5XID0gdGV4dHVyZTJEKHRleCwgdl9yZ2JOVykueHl6O1xcbiAgICB2ZWMzIHJnYk5FID0gdGV4dHVyZTJEKHRleCwgdl9yZ2JORSkueHl6O1xcbiAgICB2ZWMzIHJnYlNXID0gdGV4dHVyZTJEKHRleCwgdl9yZ2JTVykueHl6O1xcbiAgICB2ZWMzIHJnYlNFID0gdGV4dHVyZTJEKHRleCwgdl9yZ2JTRSkueHl6O1xcbiAgICB2ZWM0IHRleENvbG9yID0gdGV4dHVyZTJEKHRleCwgdl9yZ2JNKTtcXG4gICAgdmVjMyByZ2JNICA9IHRleENvbG9yLnh5ejtcXG4gICAgdmVjMyBsdW1hID0gdmVjMygwLjI5OSwgMC41ODcsIDAuMTE0KTtcXG4gICAgZmxvYXQgbHVtYU5XID0gZG90KHJnYk5XLCBsdW1hKTtcXG4gICAgZmxvYXQgbHVtYU5FID0gZG90KHJnYk5FLCBsdW1hKTtcXG4gICAgZmxvYXQgbHVtYVNXID0gZG90KHJnYlNXLCBsdW1hKTtcXG4gICAgZmxvYXQgbHVtYVNFID0gZG90KHJnYlNFLCBsdW1hKTtcXG4gICAgZmxvYXQgbHVtYU0gID0gZG90KHJnYk0sICBsdW1hKTtcXG4gICAgZmxvYXQgbHVtYU1pbiA9IG1pbihsdW1hTSwgbWluKG1pbihsdW1hTlcsIGx1bWFORSksIG1pbihsdW1hU1csIGx1bWFTRSkpKTtcXG4gICAgZmxvYXQgbHVtYU1heCA9IG1heChsdW1hTSwgbWF4KG1heChsdW1hTlcsIGx1bWFORSksIG1heChsdW1hU1csIGx1bWFTRSkpKTtcXG5cXG4gICAgbWVkaXVtcCB2ZWMyIGRpcjtcXG4gICAgZGlyLnggPSAtKChsdW1hTlcgKyBsdW1hTkUpIC0gKGx1bWFTVyArIGx1bWFTRSkpO1xcbiAgICBkaXIueSA9ICAoKGx1bWFOVyArIGx1bWFTVykgLSAobHVtYU5FICsgbHVtYVNFKSk7XFxuXFxuICAgIGZsb2F0IGRpclJlZHVjZSA9IG1heCgobHVtYU5XICsgbHVtYU5FICsgbHVtYVNXICsgbHVtYVNFKSAqXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAoMC4yNSAqIEZYQUFfUkVEVUNFX01VTCksIEZYQUFfUkVEVUNFX01JTik7XFxuXFxuICAgIGZsb2F0IHJjcERpck1pbiA9IDEuMCAvIChtaW4oYWJzKGRpci54KSwgYWJzKGRpci55KSkgKyBkaXJSZWR1Y2UpO1xcbiAgICBkaXIgPSBtaW4odmVjMihGWEFBX1NQQU5fTUFYLCBGWEFBX1NQQU5fTUFYKSxcXG4gICAgICAgICAgICAgIG1heCh2ZWMyKC1GWEFBX1NQQU5fTUFYLCAtRlhBQV9TUEFOX01BWCksXFxuICAgICAgICAgICAgICBkaXIgKiByY3BEaXJNaW4pKSAqIGludmVyc2VWUDtcXG5cXG4gICAgdmVjMyByZ2JBID0gMC41ICogKFxcbiAgICAgICAgdGV4dHVyZTJEKHRleCwgZnJhZ0Nvb3JkICogaW52ZXJzZVZQICsgZGlyICogKDEuMCAvIDMuMCAtIDAuNSkpLnh5eiArXFxuICAgICAgICB0ZXh0dXJlMkQodGV4LCBmcmFnQ29vcmQgKiBpbnZlcnNlVlAgKyBkaXIgKiAoMi4wIC8gMy4wIC0gMC41KSkueHl6KTtcXG4gICAgdmVjMyByZ2JCID0gcmdiQSAqIDAuNSArIDAuMjUgKiAoXFxuICAgICAgICB0ZXh0dXJlMkQodGV4LCBmcmFnQ29vcmQgKiBpbnZlcnNlVlAgKyBkaXIgKiAtMC41KS54eXogK1xcbiAgICAgICAgdGV4dHVyZTJEKHRleCwgZnJhZ0Nvb3JkICogaW52ZXJzZVZQICsgZGlyICogMC41KS54eXopO1xcblxcbiAgICBmbG9hdCBsdW1hQiA9IGRvdChyZ2JCLCBsdW1hKTtcXG4gICAgaWYgKChsdW1hQiA8IGx1bWFNaW4pIHx8IChsdW1hQiA+IGx1bWFNYXgpKVxcbiAgICAgICAgY29sb3IgPSB2ZWM0KHJnYkEsIHRleENvbG9yLmEpO1xcbiAgICBlbHNlXFxuICAgICAgICBjb2xvciA9IHZlYzQocmdiQiwgdGV4Q29sb3IuYSk7XFxuICAgIHJldHVybiBjb2xvcjtcXG59XFxuXFxuXFxudmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7XFxudmFyeWluZyB2ZWM0IHZDb2xvcjtcXG52YXJ5aW5nIHZlYzIgdlJlc29sdXRpb247XFxuXFxuLy90ZXhjb29yZHMgY29tcHV0ZWQgaW4gdmVydGV4IHN0ZXBcXG4vL3RvIGF2b2lkIGRlcGVuZGVudCB0ZXh0dXJlIHJlYWRzXFxudmFyeWluZyB2ZWMyIHZfcmdiTlc7XFxudmFyeWluZyB2ZWMyIHZfcmdiTkU7XFxudmFyeWluZyB2ZWMyIHZfcmdiU1c7XFxudmFyeWluZyB2ZWMyIHZfcmdiU0U7XFxudmFyeWluZyB2ZWMyIHZfcmdiTTtcXG5cXG51bmlmb3JtIHNhbXBsZXIyRCB1U2FtcGxlcjtcXG5cXG5cXG52b2lkIG1haW4odm9pZCl7XFxuXFxuICAgIGdsX0ZyYWdDb2xvciA9IGZ4YWEodVNhbXBsZXIsIHZUZXh0dXJlQ29vcmQgKiB2UmVzb2x1dGlvbiwgdlJlc29sdXRpb24sIHZfcmdiTlcsIHZfcmdiTkUsIHZfcmdiU1csIHZfcmdiU0UsIHZfcmdiTSk7XFxuXFxufVxcblwiLFxuICAgICAgICAvLyB1bmlmb3Jtc1xuICAgICAgICB7XG4gICAgICAgICAgICByZXNvbHV0aW9uOiB7IHR5cGU6ICd2MicsIHZhbHVlOiB7IHg6IDEsIHk6IDEgfSB9XG4gICAgICAgIH1cbiAgICApO1xuXG59XG5cbkZYQUFGaWx0ZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShBYnN0cmFjdEZpbHRlci5wcm90b3R5cGUpO1xuRlhBQUZpbHRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBGWEFBRmlsdGVyO1xubW9kdWxlLmV4cG9ydHMgPSBGWEFBRmlsdGVyO1xuXG4vKipcbiAqIEFwcGxpZXMgdGhlIGZpbHRlclxuICpcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5XZWJHTFJlbmRlcmVyfSBUaGUgcmVuZGVyZXIgdG8gcmV0cmlldmUgdGhlIGZpbHRlciBmcm9tXG4gKiBAcGFyYW0gaW5wdXQge1BJWEkuUmVuZGVyVGFyZ2V0fVxuICogQHBhcmFtIG91dHB1dCB7UElYSS5SZW5kZXJUYXJnZXR9XG4gKi9cbkZYQUFGaWx0ZXIucHJvdG90eXBlLmFwcGx5RmlsdGVyID0gZnVuY3Rpb24gKHJlbmRlcmVyLCBpbnB1dCwgb3V0cHV0KVxue1xuICAgIHZhciBmaWx0ZXJNYW5hZ2VyID0gcmVuZGVyZXIuZmlsdGVyTWFuYWdlcjtcblxuICAgIHZhciBzaGFkZXIgPSB0aGlzLmdldFNoYWRlciggcmVuZGVyZXIgKTtcbiAgICAgLy8gZHJhdyB0aGUgZmlsdGVyLi4uXG4gICAgZmlsdGVyTWFuYWdlci5hcHBseUZpbHRlcihzaGFkZXIsIGlucHV0LCBvdXRwdXQpO1xufTtcbiIsInZhciBBYnN0cmFjdEZpbHRlciA9IHJlcXVpcmUoJy4vQWJzdHJhY3RGaWx0ZXInKSxcbiAgICBtYXRoID0gIHJlcXVpcmUoJy4uLy4uLy4uL21hdGgnKTtcblxuLy8gQHNlZSBodHRwczovL2dpdGh1Yi5jb20vc3Vic3RhY2svYnJmcy9pc3N1ZXMvMjVcblxuXG4vKipcbiAqIFRoZSBTcHJpdGVNYXNrRmlsdGVyIGNsYXNzXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLkFic3RyYWN0RmlsdGVyXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIHNwcml0ZSB7UElYSS5TcHJpdGV9IHRoZSB0YXJnZXQgc3ByaXRlXG4gKi9cbmZ1bmN0aW9uIFNwcml0ZU1hc2tGaWx0ZXIoc3ByaXRlKVxue1xuICAgIHZhciBtYXNrTWF0cml4ID0gbmV3IG1hdGguTWF0cml4KCk7XG5cbiAgICBBYnN0cmFjdEZpbHRlci5jYWxsKHRoaXMsXG4gICAgICAgIFwiYXR0cmlidXRlIHZlYzIgYVZlcnRleFBvc2l0aW9uO1xcbmF0dHJpYnV0ZSB2ZWMyIGFUZXh0dXJlQ29vcmQ7XFxuYXR0cmlidXRlIHZlYzQgYUNvbG9yO1xcblxcbnVuaWZvcm0gbWF0MyBwcm9qZWN0aW9uTWF0cml4O1xcbnVuaWZvcm0gbWF0MyBvdGhlck1hdHJpeDtcXG5cXG52YXJ5aW5nIHZlYzIgdk1hc2tDb29yZDtcXG52YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDtcXG52YXJ5aW5nIHZlYzQgdkNvbG9yO1xcblxcbnZvaWQgbWFpbih2b2lkKVxcbntcXG4gICAgZ2xfUG9zaXRpb24gPSB2ZWM0KChwcm9qZWN0aW9uTWF0cml4ICogdmVjMyhhVmVydGV4UG9zaXRpb24sIDEuMCkpLnh5LCAwLjAsIDEuMCk7XFxuICAgIHZUZXh0dXJlQ29vcmQgPSBhVGV4dHVyZUNvb3JkO1xcbiAgICB2TWFza0Nvb3JkID0gKCBvdGhlck1hdHJpeCAqIHZlYzMoIGFUZXh0dXJlQ29vcmQsIDEuMCkgICkueHk7XFxuICAgIHZDb2xvciA9IHZlYzQoYUNvbG9yLnJnYiAqIGFDb2xvci5hLCBhQ29sb3IuYSk7XFxufVxcblwiLFxuICAgICAgICBcInByZWNpc2lvbiBsb3dwIGZsb2F0O1xcblxcbnZhcnlpbmcgdmVjMiB2TWFza0Nvb3JkO1xcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xcbnZhcnlpbmcgdmVjNCB2Q29sb3I7XFxuXFxudW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXI7XFxudW5pZm9ybSBmbG9hdCBhbHBoYTtcXG51bmlmb3JtIHNhbXBsZXIyRCBtYXNrO1xcblxcbnZvaWQgbWFpbih2b2lkKVxcbntcXG4gICAgLy8gY2hlY2sgY2xpcCEgdGhpcyB3aWxsIHN0b3AgdGhlIG1hc2sgYmxlZWRpbmcgb3V0IGZyb20gdGhlIGVkZ2VzXFxuICAgIHZlYzIgdGV4dCA9IGFicyggdk1hc2tDb29yZCAtIDAuNSApO1xcbiAgICB0ZXh0ID0gc3RlcCgwLjUsIHRleHQpO1xcbiAgICBmbG9hdCBjbGlwID0gMS4wIC0gbWF4KHRleHQueSwgdGV4dC54KTtcXG4gICAgdmVjNCBvcmlnaW5hbCA9IHRleHR1cmUyRCh1U2FtcGxlciwgdlRleHR1cmVDb29yZCk7XFxuICAgIHZlYzQgbWFza3kgPSB0ZXh0dXJlMkQobWFzaywgdk1hc2tDb29yZCk7XFxuICAgIG9yaWdpbmFsICo9IChtYXNreS5yICogbWFza3kuYSAqIGFscGhhICogY2xpcCk7XFxuICAgIGdsX0ZyYWdDb2xvciA9IG9yaWdpbmFsO1xcbn1cXG5cIixcbiAgICAgICAge1xuICAgICAgICAgICAgbWFzazogICAgICAgICAgIHsgdHlwZTogJ3NhbXBsZXIyRCcsIHZhbHVlOiBzcHJpdGUuX3RleHR1cmUgfSxcbiAgICAgICAgICAgIGFscGhhOiAgICAgICAgICB7IHR5cGU6ICdmJywgdmFsdWU6IDF9LFxuICAgICAgICAgICAgb3RoZXJNYXRyaXg6ICAgIHsgdHlwZTogJ21hdDMnLCB2YWx1ZTogbWFza01hdHJpeC50b0FycmF5KHRydWUpIH1cbiAgICAgICAgfVxuICAgICk7XG5cbiAgICB0aGlzLm1hc2tTcHJpdGUgPSBzcHJpdGU7XG4gICAgdGhpcy5tYXNrTWF0cml4ID0gbWFza01hdHJpeDtcbn1cblxuU3ByaXRlTWFza0ZpbHRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKEFic3RyYWN0RmlsdGVyLnByb3RvdHlwZSk7XG5TcHJpdGVNYXNrRmlsdGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFNwcml0ZU1hc2tGaWx0ZXI7XG5tb2R1bGUuZXhwb3J0cyA9IFNwcml0ZU1hc2tGaWx0ZXI7XG5cbi8qKlxuICogQXBwbGllcyB0aGUgZmlsdGVyXG4gKlxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLldlYkdMUmVuZGVyZXJ9IFRoZSByZW5kZXJlciB0byByZXRyaWV2ZSB0aGUgZmlsdGVyIGZyb21cbiAqIEBwYXJhbSBpbnB1dCB7UElYSS5SZW5kZXJUYXJnZXR9XG4gKiBAcGFyYW0gb3V0cHV0IHtQSVhJLlJlbmRlclRhcmdldH1cbiAqL1xuU3ByaXRlTWFza0ZpbHRlci5wcm90b3R5cGUuYXBwbHlGaWx0ZXIgPSBmdW5jdGlvbiAocmVuZGVyZXIsIGlucHV0LCBvdXRwdXQpXG57XG4gICAgdmFyIGZpbHRlck1hbmFnZXIgPSByZW5kZXJlci5maWx0ZXJNYW5hZ2VyO1xuXG4gICAgdGhpcy51bmlmb3Jtcy5tYXNrLnZhbHVlID0gdGhpcy5tYXNrU3ByaXRlLl90ZXh0dXJlO1xuXG4gICAgZmlsdGVyTWFuYWdlci5jYWxjdWxhdGVNYXBwZWRNYXRyaXgoaW5wdXQuZnJhbWUsIHRoaXMubWFza1Nwcml0ZSwgdGhpcy5tYXNrTWF0cml4KTtcblxuICAgIHRoaXMudW5pZm9ybXMub3RoZXJNYXRyaXgudmFsdWUgPSB0aGlzLm1hc2tNYXRyaXgudG9BcnJheSh0cnVlKTtcbiAgICB0aGlzLnVuaWZvcm1zLmFscGhhLnZhbHVlID0gdGhpcy5tYXNrU3ByaXRlLndvcmxkQWxwaGE7XG5cbiAgICB2YXIgc2hhZGVyID0gdGhpcy5nZXRTaGFkZXIocmVuZGVyZXIpO1xuICAgICAvLyBkcmF3IHRoZSBmaWx0ZXIuLi5cbiAgICBmaWx0ZXJNYW5hZ2VyLmFwcGx5RmlsdGVyKHNoYWRlciwgaW5wdXQsIG91dHB1dCk7XG59O1xuXG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKFNwcml0ZU1hc2tGaWx0ZXIucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogVGhlIHRleHR1cmUgdXNlZCBmb3IgdGhlIGRpc3BsYWNlbWVudCBtYXAuIE11c3QgYmUgcG93ZXIgb2YgMiBzaXplZCB0ZXh0dXJlLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5UZXh0dXJlfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLlNwcml0ZU1hc2tGaWx0ZXIjXG4gICAgICovXG4gICAgbWFwOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudW5pZm9ybXMubWFzay52YWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudW5pZm9ybXMubWFzay52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFRoZSBvZmZzZXQgdXNlZCB0byBtb3ZlIHRoZSBkaXNwbGFjZW1lbnQgbWFwLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5Qb2ludH1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5TcHJpdGVNYXNrRmlsdGVyI1xuICAgICAqL1xuICAgIG9mZnNldDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudW5pZm9ybXMub2Zmc2V0LnZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLm9mZnNldC52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfVxufSk7XG4iLCJ2YXIgV2ViR0xNYW5hZ2VyID0gcmVxdWlyZSgnLi9XZWJHTE1hbmFnZXInKTtcblxuLyoqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAZXh0ZW5kcyBQSVhJLldlYkdsTWFuYWdlclxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLldlYkdMUmVuZGVyZXJ9IFRoZSByZW5kZXJlciB0aGlzIG1hbmFnZXIgd29ya3MgZm9yLlxuICovXG5mdW5jdGlvbiBCbGVuZE1vZGVNYW5hZ2VyKHJlbmRlcmVyKVxue1xuICAgIFdlYkdMTWFuYWdlci5jYWxsKHRoaXMsIHJlbmRlcmVyKTtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLmN1cnJlbnRCbGVuZE1vZGUgPSA5OTk5OTtcbn1cblxuQmxlbmRNb2RlTWFuYWdlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFdlYkdMTWFuYWdlci5wcm90b3R5cGUpO1xuQmxlbmRNb2RlTWFuYWdlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBCbGVuZE1vZGVNYW5hZ2VyO1xubW9kdWxlLmV4cG9ydHMgPSBCbGVuZE1vZGVNYW5hZ2VyO1xuXG4vKipcbiAqIFNldHMtdXAgdGhlIGdpdmVuIGJsZW5kTW9kZSBmcm9tIFdlYkdMJ3MgcG9pbnQgb2Ygdmlldy5cbiAqXG4gKiBAcGFyYW0gYmxlbmRNb2RlIHtudW1iZXJ9IHRoZSBibGVuZE1vZGUsIHNob3VsZCBiZSBhIFBpeGkgY29uc3QsIHN1Y2ggYXMgYFBJWEkuQkxFTkRfTU9ERVMuQUREYC4gU2VlXG4gKiAge0BsaW5rIFBJWEkuQkxFTkRfTU9ERVN9IGZvciBwb3NzaWJsZSB2YWx1ZXMuXG4gKi9cbkJsZW5kTW9kZU1hbmFnZXIucHJvdG90eXBlLnNldEJsZW5kTW9kZSA9IGZ1bmN0aW9uIChibGVuZE1vZGUpXG57XG4gICAgaWYgKHRoaXMuY3VycmVudEJsZW5kTW9kZSA9PT0gYmxlbmRNb2RlKVxuICAgIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHRoaXMuY3VycmVudEJsZW5kTW9kZSA9IGJsZW5kTW9kZTtcblxuICAgIHZhciBtb2RlID0gdGhpcy5yZW5kZXJlci5ibGVuZE1vZGVzW3RoaXMuY3VycmVudEJsZW5kTW9kZV07XG4gICAgdGhpcy5yZW5kZXJlci5nbC5ibGVuZEZ1bmMobW9kZVswXSwgbW9kZVsxXSk7XG5cbiAgICByZXR1cm4gdHJ1ZTtcbn07XG4iLCJ2YXIgV2ViR0xNYW5hZ2VyID0gcmVxdWlyZSgnLi9XZWJHTE1hbmFnZXInKSxcbiAgICBSZW5kZXJUYXJnZXQgPSByZXF1aXJlKCcuLi91dGlscy9SZW5kZXJUYXJnZXQnKSxcbiAgICBDT05TVCA9IHJlcXVpcmUoJy4uLy4uLy4uL2NvbnN0JyksXG4gICAgUXVhZCA9IHJlcXVpcmUoJy4uL3V0aWxzL1F1YWQnKSxcbiAgICBtYXRoID0gIHJlcXVpcmUoJy4uLy4uLy4uL21hdGgnKTtcblxuLyoqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAZXh0ZW5kcyBQSVhJLldlYkdMTWFuYWdlclxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLldlYkdMUmVuZGVyZXJ9IFRoZSByZW5kZXJlciB0aGlzIG1hbmFnZXIgd29ya3MgZm9yLlxuICovXG5mdW5jdGlvbiBGaWx0ZXJNYW5hZ2VyKHJlbmRlcmVyKVxue1xuICAgIFdlYkdMTWFuYWdlci5jYWxsKHRoaXMsIHJlbmRlcmVyKTtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge29iamVjdFtdfVxuICAgICAqL1xuICAgIHRoaXMuZmlsdGVyU3RhY2sgPSBbXTtcblxuICAgIHRoaXMuZmlsdGVyU3RhY2sucHVzaCh7XG4gICAgICAgIHJlbmRlclRhcmdldDpyZW5kZXJlci5jdXJyZW50UmVuZGVyVGFyZ2V0LFxuICAgICAgICBmaWx0ZXI6W10sXG4gICAgICAgIGJvdW5kczpudWxsXG4gICAgfSk7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlJlbmRlclRhcmdldFtdfVxuICAgICAqL1xuICAgIHRoaXMudGV4dHVyZVBvb2wgPSBbXTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBzaXplIG9mIHRoZSB0ZXh0dXJlXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlJlY3RhbmdsZX1cbiAgICAgKi9cbiAgICAvLyBsaXN0ZW4gZm9yIGNvbnRleHQgYW5kIHVwZGF0ZSBuZWNlc3NhcnkgYnVmZmVyc1xuICAgIC8vVE9ETyBtYWtlIHRoaXMgZHluYW1pYyFcbiAgICAvL1RPRE8gdGVzdCB0aGlzIG91dCBieSBmb3JjZXMgcG93ZXIgb2YgdHdvP1xuICAgIHRoaXMudGV4dHVyZVNpemUgPSBuZXcgbWF0aC5SZWN0YW5nbGUoMCwgMCwgcmVuZGVyZXIud2lkdGgsIHJlbmRlcmVyLmhlaWdodCk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgY3VycmVudCBmcmFtZVxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5SZWN0YW5nbGV9XG4gICAgICovXG4gICAgdGhpcy5jdXJyZW50RnJhbWUgPSBudWxsO1xufVxuXG5GaWx0ZXJNYW5hZ2VyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoV2ViR0xNYW5hZ2VyLnByb3RvdHlwZSk7XG5GaWx0ZXJNYW5hZ2VyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IEZpbHRlck1hbmFnZXI7XG5tb2R1bGUuZXhwb3J0cyA9IEZpbHRlck1hbmFnZXI7XG5cblxuLyoqXG4gKiBDYWxsZWQgd2hlbiB0aGVyZSBpcyBhIFdlYkdMIGNvbnRleHQgY2hhbmdlLlxuICpcbiAqL1xuRmlsdGVyTWFuYWdlci5wcm90b3R5cGUub25Db250ZXh0Q2hhbmdlID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLnRleHR1cmVQb29sLmxlbmd0aCA9IDA7XG5cbiAgICB2YXIgZ2wgPSB0aGlzLnJlbmRlcmVyLmdsO1xuICAgIHRoaXMucXVhZCA9IG5ldyBRdWFkKGdsKTtcbn07XG5cbi8qKlxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLldlYkdMUmVuZGVyZXJ9XG4gKiBAcGFyYW0gYnVmZmVyIHtBcnJheUJ1ZmZlcn1cbiAqL1xuRmlsdGVyTWFuYWdlci5wcm90b3R5cGUuc2V0RmlsdGVyU3RhY2sgPSBmdW5jdGlvbiAoIGZpbHRlclN0YWNrIClcbntcbiAgICB0aGlzLmZpbHRlclN0YWNrID0gZmlsdGVyU3RhY2s7XG59O1xuXG4vKipcbiAqIEFwcGxpZXMgdGhlIGZpbHRlciBhbmQgYWRkcyBpdCB0byB0aGUgY3VycmVudCBmaWx0ZXIgc3RhY2suXG4gKlxuICogQHBhcmFtIHRhcmdldCB7UElYSS5EaXNwbGF5T2JqZWN0fVxuICogQHBhcmFtIGZpbHRlcnMge1BJWEkuQWJzdHJhY3RGaWxlcltdfSB0aGUgZmlsdGVycyB0aGF0IHdpbGwgYmUgcHVzaGVkIHRvIHRoZSBjdXJyZW50IGZpbHRlciBzdGFja1xuICovXG5GaWx0ZXJNYW5hZ2VyLnByb3RvdHlwZS5wdXNoRmlsdGVyID0gZnVuY3Rpb24gKHRhcmdldCwgZmlsdGVycylcbntcbiAgICAvLyBnZXQgdGhlIGJvdW5kcyBvZiB0aGUgb2JqZWN0Li5cbiAgICAvLyBUT0RPIHJlcGxhY2UgY2xvbmUgd2l0aCBhIGNvcHkgdG8gc2F2ZSBvYmplY3QgY3JlYXRpb25cbiAgICB2YXIgYm91bmRzID0gdGFyZ2V0LmZpbHRlckFyZWEgPyB0YXJnZXQuZmlsdGVyQXJlYS5jbG9uZSgpIDogdGFyZ2V0LmdldEJvdW5kcygpO1xuXG4gICAgLy9ib3VuZHMgPSBib3VuZHMuY2xvbmUoKTtcblxuICAgIC8vIHJvdW5kIG9mZiB0aGUgcmVjdGFuZ2xlIHRvIGdldCBhIG5pY2Ugc21vb29vb29vdGggZmlsdGVyIDopXG4gICAgYm91bmRzLnggPSBib3VuZHMueCB8IDA7XG4gICAgYm91bmRzLnkgPSBib3VuZHMueSB8IDA7XG4gICAgYm91bmRzLndpZHRoID0gYm91bmRzLndpZHRoIHwgMDtcbiAgICBib3VuZHMuaGVpZ2h0ID0gYm91bmRzLmhlaWdodCB8IDA7XG5cblxuICAgIC8vIHBhZGRpbmchXG4gICAgdmFyIHBhZGRpbmcgPSBmaWx0ZXJzWzBdLnBhZGRpbmcgfCAwO1xuICAgIGJvdW5kcy54IC09IHBhZGRpbmc7XG4gICAgYm91bmRzLnkgLT0gcGFkZGluZztcbiAgICBib3VuZHMud2lkdGggKz0gcGFkZGluZyAqIDI7XG4gICAgYm91bmRzLmhlaWdodCArPSBwYWRkaW5nICogMjtcblxuXG4gICAgaWYodGhpcy5yZW5kZXJlci5jdXJyZW50UmVuZGVyVGFyZ2V0LnRyYW5zZm9ybSlcbiAgICB7XG4gICAgICAgIC8vVE9ETyB0aGlzIHdpbGwgYnJlYWsgaWYgdGhlIHJlbmRlclRleHR1cmUgdHJhbnNmb3JtIGlzIGFueXRoaW5nIG90aGVyIHRoYW4gYSB0cmFuc2xhdGlvbi5cbiAgICAgICAgLy9XaWxsIG5lZWQgdG8gdGFrZSB0aGUgZnVsbCBtYXRyaXggdHJhbnNmb3JtIGludG8gYWNvdW50Li5cbiAgICAgICAgdmFyIHRyYW5zZm9ybSA9IHRoaXMucmVuZGVyZXIuY3VycmVudFJlbmRlclRhcmdldC50cmFuc2Zvcm07XG5cbiAgICAgICAgYm91bmRzLnggKz0gdHJhbnNmb3JtLnR4O1xuICAgICAgICBib3VuZHMueSArPSB0cmFuc2Zvcm0udHk7XG5cbiAgICAgICAgdGhpcy5jYXBGaWx0ZXJBcmVhKCBib3VuZHMgKTtcblxuICAgICAgICBib3VuZHMueCAtPSB0cmFuc2Zvcm0udHg7XG4gICAgICAgIGJvdW5kcy55IC09IHRyYW5zZm9ybS50eTtcbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgIHRoaXMuY2FwRmlsdGVyQXJlYSggYm91bmRzICk7XG4gICAgfVxuXG4gICAgaWYoYm91bmRzLndpZHRoID4gMCAmJiBib3VuZHMuaGVpZ2h0ID4gMClcbiAgICB7XG4gICAgICAgIHRoaXMuY3VycmVudEZyYW1lID0gYm91bmRzO1xuXG4gICAgICAgIHZhciB0ZXh0dXJlID0gdGhpcy5nZXRSZW5kZXJUYXJnZXQoKTtcblxuICAgICAgICB0aGlzLnJlbmRlcmVyLnNldFJlbmRlclRhcmdldCh0ZXh0dXJlKTtcblxuICAgICAgICAvLyBjbGVhciB0aGUgdGV4dHVyZS4uXG4gICAgICAgIHRleHR1cmUuY2xlYXIoKTtcblxuICAgICAgICAvLyBUT0RPIGdldCByaWQgb2Ygb2JqZWN0IGNyZWF0aW9uIVxuICAgICAgICB0aGlzLmZpbHRlclN0YWNrLnB1c2goe1xuICAgICAgICAgICAgcmVuZGVyVGFyZ2V0OiB0ZXh0dXJlLFxuICAgICAgICAgICAgZmlsdGVyOiBmaWx0ZXJzXG4gICAgICAgIH0pO1xuXG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIC8vIHB1c2ggc29tdGhpbmcgb24gdG8gdGhlIHN0YWNrIHRoYXQgaXMgZW1wdHlcbiAgICAgICAgdGhpcy5maWx0ZXJTdGFjay5wdXNoKHtcbiAgICAgICAgICAgIHJlbmRlclRhcmdldDogbnVsbCxcbiAgICAgICAgICAgIGZpbHRlcjogZmlsdGVyc1xuICAgICAgICB9KTtcbiAgICB9XG59O1xuXG5cbi8qKlxuICogUmVtb3ZlcyB0aGUgbGFzdCBmaWx0ZXIgZnJvbSB0aGUgZmlsdGVyIHN0YWNrIGFuZCByZXR1cm5zIGl0LlxuICpcbiAqL1xuRmlsdGVyTWFuYWdlci5wcm90b3R5cGUucG9wRmlsdGVyID0gZnVuY3Rpb24gKClcbntcbiAgICB2YXIgZmlsdGVyRGF0YSA9IHRoaXMuZmlsdGVyU3RhY2sucG9wKCk7XG4gICAgdmFyIHByZXZpb3VzRmlsdGVyRGF0YSA9IHRoaXMuZmlsdGVyU3RhY2tbdGhpcy5maWx0ZXJTdGFjay5sZW5ndGgtMV07XG5cbiAgICB2YXIgaW5wdXQgPSBmaWx0ZXJEYXRhLnJlbmRlclRhcmdldDtcblxuICAgIC8vIGlmIHRoZSByZW5kZXJUYXJnZXQgaXMgbnVsbCB0aGVuIHdlIGRvbid0IGFwcGx5IHRoZSBmaWx0ZXIgYXMgaXRzIG9mZnNjcmVlblxuICAgIGlmKCFmaWx0ZXJEYXRhLnJlbmRlclRhcmdldClcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB2YXIgb3V0cHV0ID0gcHJldmlvdXNGaWx0ZXJEYXRhLnJlbmRlclRhcmdldDtcblxuICAgIC8vIHVzZSBwcm9ncmFtXG4gICAgdmFyIGdsID0gdGhpcy5yZW5kZXJlci5nbDtcblxuXG4gICAgdGhpcy5jdXJyZW50RnJhbWUgPSBpbnB1dC5mcmFtZTtcblxuICAgIHRoaXMucXVhZC5tYXAodGhpcy50ZXh0dXJlU2l6ZSwgaW5wdXQuZnJhbWUpO1xuXG5cbiAgICAvLyBUT0RPLi4gdGhpcyBwcm9iYWJseSBvbmx5IG5lZWRzIHRvIGJlIGRvbmUgb25jZSFcbiAgICBnbC5iaW5kQnVmZmVyKGdsLkFSUkFZX0JVRkZFUiwgdGhpcy5xdWFkLnZlcnRleEJ1ZmZlcik7XG4gICAgZ2wuYmluZEJ1ZmZlcihnbC5FTEVNRU5UX0FSUkFZX0JVRkZFUiwgdGhpcy5xdWFkLmluZGV4QnVmZmVyKTtcblxuICAgIHZhciBmaWx0ZXJzID0gZmlsdGVyRGF0YS5maWx0ZXI7XG5cbiAgICAvLyBhc3N1bWluZyBhbGwgZmlsdGVycyBmb2xsb3cgdGhlIGNvcnJlY3QgZm9ybWF0Pz9cbiAgICBnbC52ZXJ0ZXhBdHRyaWJQb2ludGVyKHRoaXMucmVuZGVyZXIuc2hhZGVyTWFuYWdlci5kZWZhdWx0U2hhZGVyLmF0dHJpYnV0ZXMuYVZlcnRleFBvc2l0aW9uLCAyLCBnbC5GTE9BVCwgZmFsc2UsIDAsIDApO1xuICAgIGdsLnZlcnRleEF0dHJpYlBvaW50ZXIodGhpcy5yZW5kZXJlci5zaGFkZXJNYW5hZ2VyLmRlZmF1bHRTaGFkZXIuYXR0cmlidXRlcy5hVGV4dHVyZUNvb3JkLCAyLCBnbC5GTE9BVCwgZmFsc2UsIDAsIDIgKiA0ICogNCk7XG4gICAgZ2wudmVydGV4QXR0cmliUG9pbnRlcih0aGlzLnJlbmRlcmVyLnNoYWRlck1hbmFnZXIuZGVmYXVsdFNoYWRlci5hdHRyaWJ1dGVzLmFDb2xvciwgNCwgZ2wuRkxPQVQsIGZhbHNlLCAwLCA0ICogNCAqIDQpO1xuXG4gICAgLy8gcmVzdG9yZSB0aGUgbm9ybWFsIGJsZW5kbW9kZSFcbiAgICB0aGlzLnJlbmRlcmVyLmJsZW5kTW9kZU1hbmFnZXIuc2V0QmxlbmRNb2RlKENPTlNULkJMRU5EX01PREVTLk5PUk1BTCk7XG5cbiAgICBpZiAoZmlsdGVycy5sZW5ndGggPT09IDEpXG4gICAge1xuICAgICAgICAvLyBUT0RPIChjZW5nbGVyKSAtIFRoZXJlIGhhcyB0byBiZSBhIGJldHRlciB3YXkgdGhlbiBzZXR0aW5nIHRoaXMgZWFjaCB0aW1lP1xuICAgICAgICBpZiAoZmlsdGVyc1swXS51bmlmb3Jtcy5kaW1lbnNpb25zKVxuICAgICAgICB7XG4gICAgICAgICAgICBmaWx0ZXJzWzBdLnVuaWZvcm1zLmRpbWVuc2lvbnMudmFsdWVbMF0gPSB0aGlzLnJlbmRlcmVyLndpZHRoO1xuICAgICAgICAgICAgZmlsdGVyc1swXS51bmlmb3Jtcy5kaW1lbnNpb25zLnZhbHVlWzFdID0gdGhpcy5yZW5kZXJlci5oZWlnaHQ7XG4gICAgICAgICAgICBmaWx0ZXJzWzBdLnVuaWZvcm1zLmRpbWVuc2lvbnMudmFsdWVbMl0gPSB0aGlzLnF1YWQudmVydGljZXNbMF07XG4gICAgICAgICAgICBmaWx0ZXJzWzBdLnVuaWZvcm1zLmRpbWVuc2lvbnMudmFsdWVbM10gPSB0aGlzLnF1YWQudmVydGljZXNbNV07XG4gICAgICAgIH1cblxuICAgICAgICBmaWx0ZXJzWzBdLmFwcGx5RmlsdGVyKCB0aGlzLnJlbmRlcmVyLCBpbnB1dCwgb3V0cHV0ICk7XG4gICAgICAgIHRoaXMucmV0dXJuUmVuZGVyVGFyZ2V0KCBpbnB1dCApO1xuXG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHZhciBmbGlwVGV4dHVyZSA9IGlucHV0O1xuICAgICAgICB2YXIgZmxvcFRleHR1cmUgPSB0aGlzLmdldFJlbmRlclRhcmdldCh0cnVlKTtcblxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGZpbHRlcnMubGVuZ3RoLTE7IGkrKylcbiAgICAgICAge1xuICAgICAgICAgICAgdmFyIGZpbHRlciA9IGZpbHRlcnNbaV07XG5cbiAgICAgICAgICAgIC8vIFRPRE8gKGNlbmdsZXIpIC0gVGhlcmUgaGFzIHRvIGJlIGEgYmV0dGVyIHdheSB0aGVuIHNldHRpbmcgdGhpcyBlYWNoIHRpbWU/XG4gICAgICAgICAgICBpZiAoZmlsdGVyLnVuaWZvcm1zLmRpbWVuc2lvbnMpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgZmlsdGVyLnVuaWZvcm1zLmRpbWVuc2lvbnMudmFsdWVbMF0gPSB0aGlzLnJlbmRlcmVyLndpZHRoO1xuICAgICAgICAgICAgICAgIGZpbHRlci51bmlmb3Jtcy5kaW1lbnNpb25zLnZhbHVlWzFdID0gdGhpcy5yZW5kZXJlci5oZWlnaHQ7XG4gICAgICAgICAgICAgICAgZmlsdGVyLnVuaWZvcm1zLmRpbWVuc2lvbnMudmFsdWVbMl0gPSB0aGlzLnF1YWQudmVydGljZXNbMF07XG4gICAgICAgICAgICAgICAgZmlsdGVyLnVuaWZvcm1zLmRpbWVuc2lvbnMudmFsdWVbM10gPSB0aGlzLnF1YWQudmVydGljZXNbNV07XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGZpbHRlci5hcHBseUZpbHRlciggdGhpcy5yZW5kZXJlciwgZmxpcFRleHR1cmUsIGZsb3BUZXh0dXJlICk7XG5cbiAgICAgICAgICAgIHZhciB0ZW1wID0gZmxpcFRleHR1cmU7XG4gICAgICAgICAgICBmbGlwVGV4dHVyZSA9IGZsb3BUZXh0dXJlO1xuICAgICAgICAgICAgZmxvcFRleHR1cmUgPSB0ZW1wO1xuICAgICAgICB9XG5cbiAgICAgICAgZmlsdGVyc1tmaWx0ZXJzLmxlbmd0aC0xXS5hcHBseUZpbHRlciggdGhpcy5yZW5kZXJlciwgZmxpcFRleHR1cmUsIG91dHB1dCApO1xuXG4gICAgICAgIHRoaXMucmV0dXJuUmVuZGVyVGFyZ2V0KCBmbGlwVGV4dHVyZSApO1xuICAgICAgICB0aGlzLnJldHVyblJlbmRlclRhcmdldCggZmxvcFRleHR1cmUgKTtcbiAgICB9XG5cbiAgICByZXR1cm4gZmlsdGVyRGF0YS5maWx0ZXI7XG59O1xuXG4vKipcbiAqIEdyYWJzIGFuIHJlbmRlciB0YXJnZXQgZnJvbSB0aGUgaW50ZXJuYWwgcG9vbFxuICpcbiAqIEBwYXJhbSBjbGVhciB7Ym9vbGVhbn0gV2hldGhlciBvciBub3Qgd2UgbmVlZCB0byBjbGVhciB0aGUgUmVuZGVyVGFyZ2V0XG4gKiBAcmV0dXJuIHtSZW5kZXJUYXJnZXR9XG4gKi9cbkZpbHRlck1hbmFnZXIucHJvdG90eXBlLmdldFJlbmRlclRhcmdldCA9IGZ1bmN0aW9uICggY2xlYXIgKVxue1xuICAgIHZhciByZW5kZXJUYXJnZXQgPSB0aGlzLnRleHR1cmVQb29sLnBvcCgpIHx8IG5ldyBSZW5kZXJUYXJnZXQodGhpcy5yZW5kZXJlci5nbCwgdGhpcy50ZXh0dXJlU2l6ZS53aWR0aCwgdGhpcy50ZXh0dXJlU2l6ZS5oZWlnaHQsIENPTlNULlNDQUxFX01PREVTLkxJTkVBUiwgdGhpcy5yZW5kZXJlci5yZXNvbHV0aW9uICogQ09OU1QuRklMVEVSX1JFU09MVVRJT04pO1xuICAgIHJlbmRlclRhcmdldC5mcmFtZSA9IHRoaXMuY3VycmVudEZyYW1lO1xuXG4gICAgaWYgKGNsZWFyKVxuICAgIHtcbiAgICAgICAgcmVuZGVyVGFyZ2V0LmNsZWFyKHRydWUpO1xuICAgIH1cblxuICAgIHJldHVybiByZW5kZXJUYXJnZXQ7XG59O1xuXG4vKlxuICogUmV0dXJucyBhIFJlbmRlclRhcmdldCB0byB0aGUgaW50ZXJuYWwgcG9vbFxuICogQHBhcmFtIHJlbmRlclRhcmdldCB7UmVuZGVyVGFyZ2V0fSBUaGUgUmVuZGVyVGFyZ2V0IHdlIHdhbnQgdG8gcmV0dXJuIHRvIHRoZSBwb29sXG4gKi9cbkZpbHRlck1hbmFnZXIucHJvdG90eXBlLnJldHVyblJlbmRlclRhcmdldCA9IGZ1bmN0aW9uIChyZW5kZXJUYXJnZXQpXG57XG4gICAgdGhpcy50ZXh0dXJlUG9vbC5wdXNoKCByZW5kZXJUYXJnZXQgKTtcbn07XG5cbi8qXG4gKiBBcHBsaWVzIHRoZSBmaWx0ZXJcbiAqIEBwYXJhbSBzaGFkZXIge1NoYWRlcn0gVGhlIHNoYWRlciB0byB1cGxvYWRcbiAqIEBwYXJhbSBpbnB1dFRhcmdldCB7UmVuZGVyVGFyZ2V0fVxuICogQHBhcmFtIG91dHB1dFRhcmdldCB7UmVuZGVyVGFyZ2V0fVxuICogQHBhcmFtIGNsZWFyIHtib29sZWFufSBXaGV0aGVyIG9yIG5vdCB3ZSB3YW50IHRvIGNsZWFyIHRoZSBvdXRwdXRUYXJnZXRcbiAqL1xuRmlsdGVyTWFuYWdlci5wcm90b3R5cGUuYXBwbHlGaWx0ZXIgPSBmdW5jdGlvbiAoc2hhZGVyLCBpbnB1dFRhcmdldCwgb3V0cHV0VGFyZ2V0LCBjbGVhcilcbntcbiAgICB2YXIgZ2wgPSB0aGlzLnJlbmRlcmVyLmdsO1xuXG4gICAgdGhpcy5yZW5kZXJlci5zZXRSZW5kZXJUYXJnZXQob3V0cHV0VGFyZ2V0KTtcblxuICAgIGlmIChjbGVhcilcbiAgICB7XG4gICAgICAgIG91dHB1dFRhcmdldC5jbGVhcigpO1xuICAgIH1cblxuICAgIC8vIHNldCB0aGUgc2hhZGVyXG4gICAgdGhpcy5yZW5kZXJlci5zaGFkZXJNYW5hZ2VyLnNldFNoYWRlcihzaGFkZXIpO1xuXG4gICAgLy8gVE9ETyAoY2VuZ2xlcikgLSBDYW4gdGhpcyBiZSBjYWNoZWQgYW5kIG5vdCBgdG9BcnJheWBlZCBlYWNoIGZyYW1lP1xuICAgIHNoYWRlci51bmlmb3Jtcy5wcm9qZWN0aW9uTWF0cml4LnZhbHVlID0gdGhpcy5yZW5kZXJlci5jdXJyZW50UmVuZGVyVGFyZ2V0LnByb2plY3Rpb25NYXRyaXgudG9BcnJheSh0cnVlKTtcblxuICAgIC8vVE9ETyBjYW4gdGhpcyBiZSBvcHRpbWlzZWQ/XG4gICAgc2hhZGVyLnN5bmNVbmlmb3JtcygpO1xuLypcbiAgICBnbC52ZXJ0ZXhBdHRyaWJQb2ludGVyKHNoYWRlci5hdHRyaWJ1dGVzLmFWZXJ0ZXhQb3NpdGlvbiwgMiwgZ2wuRkxPQVQsIGZhbHNlLCAwLCAwKTtcbiAgICBnbC52ZXJ0ZXhBdHRyaWJQb2ludGVyKHNoYWRlci5hdHRyaWJ1dGVzLmFUZXh0dXJlQ29vcmQsIDIsIGdsLkZMT0FULCBmYWxzZSwgMCwgMiAqIDQgKiA0KTtcbiAgICBnbC52ZXJ0ZXhBdHRyaWJQb2ludGVyKHNoYWRlci5hdHRyaWJ1dGVzLmFDb2xvciwgNCwgZ2wuRkxPQVQsIGZhbHNlLCAwLCA0ICogNCAqIDQpO1xuKi9cblxuICAgIGdsLmFjdGl2ZVRleHR1cmUoZ2wuVEVYVFVSRTApO1xuICAgIGdsLmJpbmRUZXh0dXJlKGdsLlRFWFRVUkVfMkQsIGlucHV0VGFyZ2V0LnRleHR1cmUpO1xuXG4gICAgZ2wuZHJhd0VsZW1lbnRzKGdsLlRSSUFOR0xFUywgNiwgZ2wuVU5TSUdORURfU0hPUlQsIDAgKTtcbiAgICB0aGlzLnJlbmRlcmVyLmRyYXdDb3VudCsrO1xufTtcblxuLypcbiAqIENhbGN1bGF0ZXMgdGhlIG1hcHBlZCBtYXRyaXhcbiAqIEBwYXJhbSBmaWx0ZXJBcmVhIHtSZWN0YW5nbGV9IFRoZSBmaWx0ZXIgYXJlYVxuICogQHBhcmFtIHNwcml0ZSB7U3ByaXRlfSB0aGUgdGFyZ2V0IHNwcml0ZVxuICogQHBhcmFtIG91dHB1dE1hdHJpeCB7TWF0cml4fSBAYWx2aW5cbiAqL1xuLy8gVE9ETyBwbGF5aW5nIGFyb3VuZCBoZXJlLi4gdGhpcyBpcyB0ZW1wb3JhcnkgLSAod2lsbCBlbmQgdXAgaW4gdGhlIHNoYWRlcilcbkZpbHRlck1hbmFnZXIucHJvdG90eXBlLmNhbGN1bGF0ZU1hcHBlZE1hdHJpeCA9IGZ1bmN0aW9uIChmaWx0ZXJBcmVhLCBzcHJpdGUsIG91dHB1dE1hdHJpeClcbntcbiAgICB2YXIgd29ybGRUcmFuc2Zvcm0gPSBzcHJpdGUud29ybGRUcmFuc2Zvcm0uY29weShtYXRoLk1hdHJpeC5URU1QX01BVFJJWCksXG4gICAgdGV4dHVyZSA9IHNwcml0ZS5fdGV4dHVyZS5iYXNlVGV4dHVyZTtcblxuICAgIHZhciBtYXBwZWRNYXRyaXggPSBvdXRwdXRNYXRyaXguaWRlbnRpdHkoKTtcblxuICAgIC8vIHNjYWxlLi5cbiAgICB2YXIgcmF0aW8gPSB0aGlzLnRleHR1cmVTaXplLmhlaWdodCAvIHRoaXMudGV4dHVyZVNpemUud2lkdGg7XG5cbiAgICBtYXBwZWRNYXRyaXgudHJhbnNsYXRlKGZpbHRlckFyZWEueCAvIHRoaXMudGV4dHVyZVNpemUud2lkdGgsIGZpbHRlckFyZWEueSAvIHRoaXMudGV4dHVyZVNpemUuaGVpZ2h0ICk7XG5cbiAgICBtYXBwZWRNYXRyaXguc2NhbGUoMSAsIHJhdGlvKTtcblxuICAgIHZhciB0cmFuc2xhdGVTY2FsZVggPSAodGhpcy50ZXh0dXJlU2l6ZS53aWR0aCAvIHRleHR1cmUud2lkdGgpO1xuICAgIHZhciB0cmFuc2xhdGVTY2FsZVkgPSAodGhpcy50ZXh0dXJlU2l6ZS5oZWlnaHQgLyB0ZXh0dXJlLmhlaWdodCk7XG5cbiAgICB3b3JsZFRyYW5zZm9ybS50eCAvPSB0ZXh0dXJlLndpZHRoICogdHJhbnNsYXRlU2NhbGVYO1xuICAgIHdvcmxkVHJhbnNmb3JtLnR5IC89IHRleHR1cmUud2lkdGggKiB0cmFuc2xhdGVTY2FsZVg7XG5cbiAgICB3b3JsZFRyYW5zZm9ybS5pbnZlcnQoKTtcblxuICAgIG1hcHBlZE1hdHJpeC5wcmVwZW5kKHdvcmxkVHJhbnNmb3JtKTtcblxuICAgIC8vIGFwcGx5IGludmVyc2Ugc2NhbGUuLlxuICAgIG1hcHBlZE1hdHJpeC5zY2FsZSgxICwgMS9yYXRpbyk7XG5cbiAgICBtYXBwZWRNYXRyaXguc2NhbGUoIHRyYW5zbGF0ZVNjYWxlWCAsIHRyYW5zbGF0ZVNjYWxlWSApO1xuXG4gICAgbWFwcGVkTWF0cml4LnRyYW5zbGF0ZShzcHJpdGUuYW5jaG9yLngsIHNwcml0ZS5hbmNob3IueSk7XG5cbiAgICByZXR1cm4gbWFwcGVkTWF0cml4O1xuXG4gICAgLy8gS2VlcGluZyB0aGUgb3JnaW5hbCBhcyBhIHJlbWluZGVyIHRvIG1lIG9uIGhvdyB0aGlzIHdvcmtzIVxuICAgIC8vXG4gICAgLy8gdmFyIG0gPSBuZXcgbWF0aC5NYXRyaXgoKTtcblxuICAgIC8vIC8vIHNjYWxlLi5cbiAgICAvLyB2YXIgcmF0aW8gPSB0aGlzLnRleHR1cmVTaXplLmhlaWdodCAvIHRoaXMudGV4dHVyZVNpemUud2lkdGg7XG5cbiAgICAvLyBtLnRyYW5zbGF0ZShmaWx0ZXJBcmVhLnggLyB0aGlzLnRleHR1cmVTaXplLndpZHRoLCBmaWx0ZXJBcmVhLnkgLyB0aGlzLnRleHR1cmVTaXplLmhlaWdodCk7XG5cblxuICAgIC8vIG0uc2NhbGUoMSAsIHJhdGlvKTtcblxuXG4gICAgLy8gdmFyIHRyYW5zZm9ybSA9IHd0LmNsb25lKCk7XG5cbiAgICAvLyB2YXIgdHJhbnNsYXRlU2NhbGVYID0gKHRoaXMudGV4dHVyZVNpemUud2lkdGggLyA2MjApO1xuICAgIC8vIHZhciB0cmFuc2xhdGVTY2FsZVkgPSAodGhpcy50ZXh0dXJlU2l6ZS5oZWlnaHQgLyAzODApO1xuXG4gICAgLy8gdHJhbnNmb3JtLnR4IC89IDYyMCAqIHRyYW5zbGF0ZVNjYWxlWDtcbiAgICAvLyB0cmFuc2Zvcm0udHkgLz0gNjIwICogdHJhbnNsYXRlU2NhbGVYO1xuXG4gICAgLy8gdHJhbnNmb3JtLmludmVydCgpO1xuXG4gICAgLy8gdHJhbnNmb3JtLmFwcGVuZChtKTtcblxuICAgIC8vIC8vIGFwcGx5IGludmVyc2Ugc2NhbGUuLlxuICAgIC8vIHRyYW5zZm9ybS5zY2FsZSgxICwgMS9yYXRpbyk7XG5cbiAgICAvLyB0cmFuc2Zvcm0uc2NhbGUoIHRyYW5zbGF0ZVNjYWxlWCAsIHRyYW5zbGF0ZVNjYWxlWSApO1xuXG4gICAgLy8gcmV0dXJuIHRyYW5zZm9ybTtcbn07XG5cbi8qXG4gKiBDb25zdHJhaW5zIHRoZSBmaWx0ZXIgYXJlYSB0byB0aGUgdGV4dHVyZSBzaXplXG4gKiBAcGFyYW0gZmlsdGVyQXJlYSB7UmVjdGFuZ2xlfSBUaGUgZmlsdGVyIGFyZWEgd2Ugd2FudCB0byBjYXBcbiAqL1xuRmlsdGVyTWFuYWdlci5wcm90b3R5cGUuY2FwRmlsdGVyQXJlYSA9IGZ1bmN0aW9uIChmaWx0ZXJBcmVhKVxue1xuICAgIGlmIChmaWx0ZXJBcmVhLnggPCAwKVxuICAgIHtcbiAgICAgICAgZmlsdGVyQXJlYS53aWR0aCArPSBmaWx0ZXJBcmVhLng7XG4gICAgICAgIGZpbHRlckFyZWEueCA9IDA7XG4gICAgfVxuXG4gICAgaWYgKGZpbHRlckFyZWEueSA8IDApXG4gICAge1xuICAgICAgICBmaWx0ZXJBcmVhLmhlaWdodCArPSBmaWx0ZXJBcmVhLnk7XG4gICAgICAgIGZpbHRlckFyZWEueSA9IDA7XG4gICAgfVxuXG4gICAgaWYgKCBmaWx0ZXJBcmVhLnggKyBmaWx0ZXJBcmVhLndpZHRoID4gdGhpcy50ZXh0dXJlU2l6ZS53aWR0aCApXG4gICAge1xuICAgICAgICBmaWx0ZXJBcmVhLndpZHRoID0gdGhpcy50ZXh0dXJlU2l6ZS53aWR0aCAtIGZpbHRlckFyZWEueDtcbiAgICB9XG5cbiAgICBpZiAoIGZpbHRlckFyZWEueSArIGZpbHRlckFyZWEuaGVpZ2h0ID4gdGhpcy50ZXh0dXJlU2l6ZS5oZWlnaHQgKVxuICAgIHtcbiAgICAgICAgZmlsdGVyQXJlYS5oZWlnaHQgPSB0aGlzLnRleHR1cmVTaXplLmhlaWdodCAtIGZpbHRlckFyZWEueTtcbiAgICB9XG59O1xuXG4vKlxuICogUmVzaXplcyBhbGwgdGhlIHJlbmRlciB0YXJnZXRzIGluIHRoZSBwb29sXG4gKiBAcGFyYW0gd2lkdGgge251bWJlcn0gdGhlIG5ldyB3aWR0aFxuICogQHBhcmFtIGhlaWdodCB7bnVtYmVyfSB0aGUgbmV3IGhlaWdodFxuICovXG5GaWx0ZXJNYW5hZ2VyLnByb3RvdHlwZS5yZXNpemUgPSBmdW5jdGlvbiAoIHdpZHRoLCBoZWlnaHQgKVxue1xuICAgIHRoaXMudGV4dHVyZVNpemUud2lkdGggPSB3aWR0aDtcbiAgICB0aGlzLnRleHR1cmVTaXplLmhlaWdodCA9IGhlaWdodDtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy50ZXh0dXJlUG9vbC5sZW5ndGg7IGkrKylcbiAgICB7XG4gICAgICAgIHRoaXMudGV4dHVyZVBvb2xbaV0ucmVzaXplKCB3aWR0aCwgaGVpZ2h0ICk7XG4gICAgfVxufTtcblxuLyoqXG4gKiBEZXN0cm95cyB0aGUgZmlsdGVyIGFuZCByZW1vdmVzIGl0IGZyb20gdGhlIGZpbHRlciBzdGFjay5cbiAqXG4gKi9cbkZpbHRlck1hbmFnZXIucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoKVxue1xuICAgIHRoaXMucXVhZC5kZXN0cm95KCk7XG4gICAgXG4gICAgV2ViR0xNYW5hZ2VyLnByb3RvdHlwZS5kZXN0cm95LmNhbGwodGhpcyk7XG4gICAgXG4gICAgdGhpcy5maWx0ZXJTdGFjayA9IG51bGw7XG4gICAgdGhpcy5vZmZzZXRZID0gMDtcblxuICAgIC8vIGRlc3Ryb3kgdGV4dHVyZXNcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMudGV4dHVyZVBvb2wubGVuZ3RoOyBpKyspXG4gICAge1xuICAgICAgICB0aGlzLnRleHR1cmVQb29sW2ldLmRlc3Ryb3koKTtcbiAgICB9XG5cbiAgICB0aGlzLnRleHR1cmVQb29sID0gbnVsbDtcbn07XG4iLCJ2YXIgV2ViR0xNYW5hZ2VyID0gcmVxdWlyZSgnLi9XZWJHTE1hbmFnZXInKSxcbiAgICBBbHBoYU1hc2tGaWx0ZXIgPSByZXF1aXJlKCcuLi9maWx0ZXJzL1Nwcml0ZU1hc2tGaWx0ZXInKTtcblxuLyoqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcn0gVGhlIHJlbmRlcmVyIHRoaXMgbWFuYWdlciB3b3JrcyBmb3IuXG4gKi9cbmZ1bmN0aW9uIE1hc2tNYW5hZ2VyKHJlbmRlcmVyKVxue1xuICAgIFdlYkdMTWFuYWdlci5jYWxsKHRoaXMsIHJlbmRlcmVyKTtcblxuICAgIHRoaXMuc3RlbmNpbFN0YWNrID0gW107XG4gICAgdGhpcy5yZXZlcnNlID0gdHJ1ZTtcbiAgICB0aGlzLmNvdW50ID0gMDtcblxuICAgIHRoaXMuYWxwaGFNYXNrUG9vbCA9IFtdO1xufVxuXG5NYXNrTWFuYWdlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFdlYkdMTWFuYWdlci5wcm90b3R5cGUpO1xuTWFza01hbmFnZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gTWFza01hbmFnZXI7XG5tb2R1bGUuZXhwb3J0cyA9IE1hc2tNYW5hZ2VyO1xuXG4vKipcbiAqIEFwcGxpZXMgdGhlIE1hc2sgYW5kIGFkZHMgaXQgdG8gdGhlIGN1cnJlbnQgZmlsdGVyIHN0YWNrLlxuICpcbiAqIEBwYXJhbSBncmFwaGljcyB7UElYSS5HcmFwaGljc31cbiAqIEBwYXJhbSB3ZWJHTERhdGEge2FueVtdfVxuICovXG5NYXNrTWFuYWdlci5wcm90b3R5cGUucHVzaE1hc2sgPSBmdW5jdGlvbiAodGFyZ2V0LCBtYXNrRGF0YSlcbntcbiAgICBpZiAobWFza0RhdGEudGV4dHVyZSlcbiAgICB7XG4gICAgICAgIHRoaXMucHVzaFNwcml0ZU1hc2sodGFyZ2V0LCBtYXNrRGF0YSk7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHRoaXMucHVzaFN0ZW5jaWxNYXNrKHRhcmdldCwgbWFza0RhdGEpO1xuICAgIH1cblxufTtcblxuLyoqXG4gKiBSZW1vdmVzIHRoZSBsYXN0IG1hc2sgZnJvbSB0aGUgbWFzayBzdGFjayBhbmQgZG9lc24ndCByZXR1cm4gaXQuXG4gKlxuICogQHBhcmFtIHRhcmdldCB7UElYSS5SZW5kZXJUYXJnZXR9XG4gKiBAcGFyYW0gbWFza0RhdGEge2FueVtdfVxuICovXG5NYXNrTWFuYWdlci5wcm90b3R5cGUucG9wTWFzayA9IGZ1bmN0aW9uICh0YXJnZXQsIG1hc2tEYXRhKVxue1xuICAgIGlmIChtYXNrRGF0YS50ZXh0dXJlKVxuICAgIHtcbiAgICAgICAgdGhpcy5wb3BTcHJpdGVNYXNrKHRhcmdldCwgbWFza0RhdGEpO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICB0aGlzLnBvcFN0ZW5jaWxNYXNrKHRhcmdldCwgbWFza0RhdGEpO1xuICAgIH1cbn07XG5cbi8qKlxuICogQXBwbGllcyB0aGUgTWFzayBhbmQgYWRkcyBpdCB0byB0aGUgY3VycmVudCBmaWx0ZXIgc3RhY2suXG4gKlxuICogQHBhcmFtIHRhcmdldCB7UElYSS5SZW5kZXJUYXJnZXR9XG4gKiBAcGFyYW0gbWFza0RhdGEge2FueVtdfVxuICovXG5NYXNrTWFuYWdlci5wcm90b3R5cGUucHVzaFNwcml0ZU1hc2sgPSBmdW5jdGlvbiAodGFyZ2V0LCBtYXNrRGF0YSlcbntcbiAgICB2YXIgYWxwaGFNYXNrRmlsdGVyID0gdGhpcy5hbHBoYU1hc2tQb29sLnBvcCgpO1xuXG4gICAgaWYgKCFhbHBoYU1hc2tGaWx0ZXIpXG4gICAge1xuICAgICAgICBhbHBoYU1hc2tGaWx0ZXIgPSBbbmV3IEFscGhhTWFza0ZpbHRlcihtYXNrRGF0YSldO1xuICAgIH1cblxuICAgIGFscGhhTWFza0ZpbHRlclswXS5tYXNrU3ByaXRlID0gbWFza0RhdGE7XG4gICAgdGhpcy5yZW5kZXJlci5maWx0ZXJNYW5hZ2VyLnB1c2hGaWx0ZXIodGFyZ2V0LCBhbHBoYU1hc2tGaWx0ZXIpO1xufTtcblxuLyoqXG4gKiBSZW1vdmVzIHRoZSBsYXN0IGZpbHRlciBmcm9tIHRoZSBmaWx0ZXIgc3RhY2sgYW5kIGRvZXNuJ3QgcmV0dXJuIGl0LlxuICpcbiAqL1xuTWFza01hbmFnZXIucHJvdG90eXBlLnBvcFNwcml0ZU1hc2sgPSBmdW5jdGlvbiAoKVxue1xuICAgIHZhciBmaWx0ZXJzID0gdGhpcy5yZW5kZXJlci5maWx0ZXJNYW5hZ2VyLnBvcEZpbHRlcigpO1xuXG4gICAgdGhpcy5hbHBoYU1hc2tQb29sLnB1c2goZmlsdGVycyk7XG59O1xuXG5cbi8qKlxuICogQXBwbGllcyB0aGUgTWFzayBhbmQgYWRkcyBpdCB0byB0aGUgY3VycmVudCBmaWx0ZXIgc3RhY2suXG4gKlxuICogQHBhcmFtIHRhcmdldCB7UElYSS5SZW5kZXJUYXJnZXR9XG4gKiBAcGFyYW0gbWFza0RhdGEge2FueVtdfVxuICovXG5NYXNrTWFuYWdlci5wcm90b3R5cGUucHVzaFN0ZW5jaWxNYXNrID0gZnVuY3Rpb24gKHRhcmdldCwgbWFza0RhdGEpXG57XG4gICAgdGhpcy5yZW5kZXJlci5zdGVuY2lsTWFuYWdlci5wdXNoTWFzayhtYXNrRGF0YSk7XG59O1xuXG4vKipcbiAqIFJlbW92ZXMgdGhlIGxhc3QgZmlsdGVyIGZyb20gdGhlIGZpbHRlciBzdGFjayBhbmQgZG9lc24ndCByZXR1cm4gaXQuXG4gKlxuICogQHBhcmFtIHRhcmdldCB7UElYSS5SZW5kZXJUYXJnZXR9XG4gKiBAcGFyYW0gbWFza0RhdGEge2FueVtdfVxuICovXG5NYXNrTWFuYWdlci5wcm90b3R5cGUucG9wU3RlbmNpbE1hc2sgPSBmdW5jdGlvbiAodGFyZ2V0LCBtYXNrRGF0YSlcbntcbiAgICB0aGlzLnJlbmRlcmVyLnN0ZW5jaWxNYW5hZ2VyLnBvcE1hc2sobWFza0RhdGEpO1xufTtcblxuIiwidmFyIFdlYkdMTWFuYWdlciA9IHJlcXVpcmUoJy4vV2ViR0xNYW5hZ2VyJyksXG4gICAgVGV4dHVyZVNoYWRlciA9IHJlcXVpcmUoJy4uL3NoYWRlcnMvVGV4dHVyZVNoYWRlcicpLFxuICAgIENvbXBsZXhQcmltaXRpdmVTaGFkZXIgPSByZXF1aXJlKCcuLi9zaGFkZXJzL0NvbXBsZXhQcmltaXRpdmVTaGFkZXInKSxcbiAgICBQcmltaXRpdmVTaGFkZXIgPSByZXF1aXJlKCcuLi9zaGFkZXJzL1ByaW1pdGl2ZVNoYWRlcicpLFxuICAgIHV0aWxzID0gcmVxdWlyZSgnLi4vLi4vLi4vdXRpbHMnKTtcblxuLyoqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAZXh0ZW5kcyBQSVhJLldlYkdMTWFuYWdlclxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLldlYkdMUmVuZGVyZXJ9IFRoZSByZW5kZXJlciB0aGlzIG1hbmFnZXIgd29ya3MgZm9yLlxuICovXG5mdW5jdGlvbiBTaGFkZXJNYW5hZ2VyKHJlbmRlcmVyKVxue1xuICAgIFdlYkdMTWFuYWdlci5jYWxsKHRoaXMsIHJlbmRlcmVyKTtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLm1heEF0dGlicyA9IDEwO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7YW55W119XG4gICAgICovXG4gICAgdGhpcy5hdHRyaWJTdGF0ZSA9IFtdO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7YW55W119XG4gICAgICovXG4gICAgdGhpcy50ZW1wQXR0cmliU3RhdGUgPSBbXTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5tYXhBdHRpYnM7IGkrKylcbiAgICB7XG4gICAgICAgIHRoaXMuYXR0cmliU3RhdGVbaV0gPSBmYWxzZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHthbnlbXX1cbiAgICAgKi9cbiAgICB0aGlzLnN0YWNrID0gW107XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9jdXJyZW50SWQgPSAtMTtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge1BJWEkuU2hhZGVyfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5jdXJyZW50U2hhZGVyID0gbnVsbDtcblxuLy8gICAgdGhpcy5pbml0UGx1Z2lucygpO1xufVxuXG5TaGFkZXJNYW5hZ2VyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoV2ViR0xNYW5hZ2VyLnByb3RvdHlwZSk7XG5TaGFkZXJNYW5hZ2VyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFNoYWRlck1hbmFnZXI7XG51dGlscy5wbHVnaW5UYXJnZXQubWl4aW4oU2hhZGVyTWFuYWdlcik7XG5cbm1vZHVsZS5leHBvcnRzID0gU2hhZGVyTWFuYWdlcjtcblxuLyoqXG4gKiBDYWxsZWQgd2hlbiB0aGVyZSBpcyBhIFdlYkdMIGNvbnRleHQgY2hhbmdlLlxuICpcbiAqL1xuU2hhZGVyTWFuYWdlci5wcm90b3R5cGUub25Db250ZXh0Q2hhbmdlID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLmluaXRQbHVnaW5zKCk7XG5cbiAgICB2YXIgZ2wgPSB0aGlzLnJlbmRlcmVyLmdsO1xuXG4gICAgLy8gZ2V0IHRoZSBtYXhpbXVtIG51bWJlciBvZiBhdHRyaWJ1dGUgY29ycmVjdGx5IGFzIHRoaXMgdGVuZHMgdG8gdmFyeVxuICAgIHRoaXMubWF4QXR0aWJzID0gZ2wuZ2V0UGFyYW1ldGVyKGdsLk1BWF9WRVJURVhfQVRUUklCUyk7XG5cbiAgICB0aGlzLmF0dHJpYlN0YXRlID0gW107XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMubWF4QXR0aWJzOyBpKyspXG4gICAge1xuICAgICAgICB0aGlzLmF0dHJpYlN0YXRlW2ldID0gZmFsc2U7XG4gICAgfVxuXG4gICAgLy8gVE9ETyAtIFdoeSBhcmUgdGhlc2Ugbm90IHBsdWdpbnM/IFdlIGNhbid0IGRlY291cGxlIHByaW1pdGl2ZXMgdW5sZXNzIHRoZXkgYXJlLi4uLlxuICAgIHRoaXMuZGVmYXVsdFNoYWRlciA9IG5ldyBUZXh0dXJlU2hhZGVyKHRoaXMpO1xuICAgIHRoaXMucHJpbWl0aXZlU2hhZGVyID0gbmV3IFByaW1pdGl2ZVNoYWRlcih0aGlzKTtcbiAgICB0aGlzLmNvbXBsZXhQcmltaXRpdmVTaGFkZXIgPSBuZXcgQ29tcGxleFByaW1pdGl2ZVNoYWRlcih0aGlzKTtcbn07XG5cbi8qKlxuICogVGFrZXMgdGhlIGF0dHJpYnV0ZXMgZ2l2ZW4gaW4gcGFyYW1ldGVycyBhbmQgdXBsb2FkcyB0aGVtLlxuICpcbiAqIEBwYXJhbSBhdHRyaWJzIHthbnlbXX0gYXR0cmlic1xuICovXG5TaGFkZXJNYW5hZ2VyLnByb3RvdHlwZS5zZXRBdHRyaWJzID0gZnVuY3Rpb24gKGF0dHJpYnMpXG57XG4gICAgLy8gcmVzZXQgdGVtcCBzdGF0ZVxuICAgIHZhciBpO1xuXG4gICAgZm9yIChpID0gMDsgaSA8IHRoaXMudGVtcEF0dHJpYlN0YXRlLmxlbmd0aDsgaSsrKVxuICAgIHtcbiAgICAgICAgdGhpcy50ZW1wQXR0cmliU3RhdGVbaV0gPSBmYWxzZTtcbiAgICB9XG5cbiAgICAvLyBzZXQgdGhlIG5ldyBhdHRyaWJzXG4gICAgZm9yICh2YXIgYSBpbiBhdHRyaWJzKVxuICAgIHtcbiAgICAgICAgdGhpcy50ZW1wQXR0cmliU3RhdGVbYXR0cmlic1thXV0gPSB0cnVlO1xuICAgIH1cblxuICAgIHZhciBnbCA9IHRoaXMucmVuZGVyZXIuZ2w7XG5cbiAgICBmb3IgKGkgPSAwOyBpIDwgdGhpcy5hdHRyaWJTdGF0ZS5sZW5ndGg7IGkrKylcbiAgICB7XG4gICAgICAgIGlmICh0aGlzLmF0dHJpYlN0YXRlW2ldICE9PSB0aGlzLnRlbXBBdHRyaWJTdGF0ZVtpXSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5hdHRyaWJTdGF0ZVtpXSA9IHRoaXMudGVtcEF0dHJpYlN0YXRlW2ldO1xuXG4gICAgICAgICAgICBpZiAodGhpcy5hdHRyaWJTdGF0ZVtpXSlcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBnbC5lbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBnbC5kaXNhYmxlVmVydGV4QXR0cmliQXJyYXkoaSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG59O1xuXG4vKipcbiAqIFNldHMgdGhlIGN1cnJlbnQgc2hhZGVyLlxuICpcbiAqIEBwYXJhbSBzaGFkZXIge1BJWEkuU2hhZGVyfSB0aGUgc2hhZGVyIHRvIHVwbG9hZFxuICovXG5TaGFkZXJNYW5hZ2VyLnByb3RvdHlwZS5zZXRTaGFkZXIgPSBmdW5jdGlvbiAoc2hhZGVyKVxue1xuICAgIHJldHVybjtcbiAgICBpZiAodGhpcy5fY3VycmVudElkID09PSBzaGFkZXIudWlkKVxuICAgIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHRoaXMuX2N1cnJlbnRJZCA9IHNoYWRlci51aWQ7XG5cbiAgICB0aGlzLmN1cnJlbnRTaGFkZXIgPSBzaGFkZXI7XG5cbiAgICB0aGlzLnJlbmRlcmVyLmdsLnVzZVByb2dyYW0oc2hhZGVyLnByb2dyYW0pO1xuICAgIHRoaXMuc2V0QXR0cmlicyhzaGFkZXIuYXR0cmlidXRlcyk7XG5cbiAgICByZXR1cm4gdHJ1ZTtcbn07XG5cbi8qKlxuICogRGVzdHJveXMgdGhpcyBvYmplY3QuXG4gKlxuICovXG5TaGFkZXJNYW5hZ2VyLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLnByaW1pdGl2ZVNoYWRlci5kZXN0cm95KCk7XG4gICAgdGhpcy5jb21wbGV4UHJpbWl0aXZlU2hhZGVyLmRlc3Ryb3koKTtcbiAgICBXZWJHTE1hbmFnZXIucHJvdG90eXBlLmRlc3Ryb3kuY2FsbCh0aGlzKTtcblxuICAgIHRoaXMuZGVzdHJveVBsdWdpbnMoKTtcblxuICAgIHRoaXMuYXR0cmliU3RhdGUgPSBudWxsO1xuXG4gICAgdGhpcy50ZW1wQXR0cmliU3RhdGUgPSBudWxsO1xufTtcbiIsInZhciBXZWJHTE1hbmFnZXIgPSByZXF1aXJlKCcuL1dlYkdMTWFuYWdlcicpLFxuICAgIHV0aWxzID0gcmVxdWlyZSgnLi4vLi4vLi4vdXRpbHMnKTtcblxuLyoqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcn0gVGhlIHJlbmRlcmVyIHRoaXMgbWFuYWdlciB3b3JrcyBmb3IuXG4gKi9cbmZ1bmN0aW9uIFdlYkdMTWFza01hbmFnZXIocmVuZGVyZXIpXG57XG4gICAgV2ViR0xNYW5hZ2VyLmNhbGwodGhpcywgcmVuZGVyZXIpO1xuICAgIHRoaXMuc3RlbmNpbE1hc2tTdGFjayA9IG51bGw7XG59XG5cbldlYkdMTWFza01hbmFnZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShXZWJHTE1hbmFnZXIucHJvdG90eXBlKTtcbldlYkdMTWFza01hbmFnZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gV2ViR0xNYXNrTWFuYWdlcjtcbm1vZHVsZS5leHBvcnRzID0gV2ViR0xNYXNrTWFuYWdlcjtcblxuLyoqXG4gKiBDaGFuZ2VzIHRoZSBtYXNrIHN0YWNrIHRoYXQgaXMgdXNlZCBieSB0aGlzIG1hbmFnZXIuXG4gKlxuICogQHBhcmFtIHN0ZW5jaWxNYXNrU3RhY2sge1BJWEkuU3RlbmNpbE1hc2tTdGFja30gVGhlIG1hc2sgc3RhY2tcbiAqL1xuV2ViR0xNYXNrTWFuYWdlci5wcm90b3R5cGUuc2V0TWFza1N0YWNrID0gZnVuY3Rpb24gKCBzdGVuY2lsTWFza1N0YWNrIClcbntcbiAgICB0aGlzLnN0ZW5jaWxNYXNrU3RhY2sgPSBzdGVuY2lsTWFza1N0YWNrO1xuXG4gICAgdmFyIGdsID0gdGhpcy5yZW5kZXJlci5nbDtcblxuICAgIGlmIChzdGVuY2lsTWFza1N0YWNrLnN0ZW5jaWxTdGFjay5sZW5ndGggPT09IDApXG4gICAge1xuICAgICAgICBnbC5kaXNhYmxlKGdsLlNURU5DSUxfVEVTVCk7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIGdsLmVuYWJsZShnbC5TVEVOQ0lMX1RFU1QpO1xuICAgIH1cbn07XG5cbi8qKlxuICogQXBwbGllcyB0aGUgTWFzayBhbmQgYWRkcyBpdCB0byB0aGUgY3VycmVudCBmaWx0ZXIgc3RhY2suIEBhbHZpblxuICpcbiAqIEBwYXJhbSBncmFwaGljcyB7UElYSS5HcmFwaGljc31cbiAqIEBwYXJhbSB3ZWJHTERhdGEge2FueVtdfVxuICovXG5XZWJHTE1hc2tNYW5hZ2VyLnByb3RvdHlwZS5wdXNoU3RlbmNpbCA9IGZ1bmN0aW9uIChncmFwaGljcywgd2ViR0xEYXRhKVxue1xuICAgIHRoaXMucmVuZGVyZXIuX2FjdGl2ZVJlbmRlclRhcmdldC5hdHRhY2hTdGVuY2lsQnVmZmVyKCk7XG5cbiAgICB2YXIgZ2wgPSB0aGlzLnJlbmRlcmVyLmdsLFxuICAgICAgICBzbXMgPSB0aGlzLnN0ZW5jaWxNYXNrU3RhY2s7XG5cbiAgICB0aGlzLmJpbmRHcmFwaGljcyhncmFwaGljcywgd2ViR0xEYXRhKTtcblxuICAgIGlmIChzbXMuc3RlbmNpbFN0YWNrLmxlbmd0aCA9PT0gMClcbiAgICB7XG4gICAgICAgIGdsLmVuYWJsZShnbC5TVEVOQ0lMX1RFU1QpO1xuICAgICAgICBnbC5jbGVhcihnbC5TVEVOQ0lMX0JVRkZFUl9CSVQpO1xuICAgICAgICBzbXMucmV2ZXJzZSA9IHRydWU7XG4gICAgICAgIHNtcy5jb3VudCA9IDA7XG4gICAgfVxuXG4gICAgc21zLnN0ZW5jaWxTdGFjay5wdXNoKHdlYkdMRGF0YSk7XG5cbiAgICB2YXIgbGV2ZWwgPSBzbXMuY291bnQ7XG5cbiAgICBnbC5jb2xvck1hc2soZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UpO1xuXG4gICAgZ2wuc3RlbmNpbEZ1bmMoZ2wuQUxXQVlTLDAsMHhGRik7XG4gICAgZ2wuc3RlbmNpbE9wKGdsLktFRVAsZ2wuS0VFUCxnbC5JTlZFUlQpO1xuXG4gICAgLy8gZHJhdyB0aGUgdHJpYW5nbGUgc3RyaXAhXG5cbiAgICBpZiAod2ViR0xEYXRhLm1vZGUgPT09IDEpXG4gICAge1xuICAgICAgICBnbC5kcmF3RWxlbWVudHMoZ2wuVFJJQU5HTEVfRkFOLCAgd2ViR0xEYXRhLmluZGljZXMubGVuZ3RoIC0gNCwgZ2wuVU5TSUdORURfU0hPUlQsIDAgKTtcblxuICAgICAgICBpZiAoc21zLnJldmVyc2UpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGdsLnN0ZW5jaWxGdW5jKGdsLkVRVUFMLCAweEZGIC0gbGV2ZWwsIDB4RkYpO1xuICAgICAgICAgICAgZ2wuc3RlbmNpbE9wKGdsLktFRVAsZ2wuS0VFUCxnbC5ERUNSKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgIHtcbiAgICAgICAgICAgIGdsLnN0ZW5jaWxGdW5jKGdsLkVRVUFMLGxldmVsLCAweEZGKTtcbiAgICAgICAgICAgIGdsLnN0ZW5jaWxPcChnbC5LRUVQLGdsLktFRVAsZ2wuSU5DUik7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBkcmF3IGEgcXVhZCB0byBpbmNyZW1lbnQuLlxuICAgICAgICBnbC5kcmF3RWxlbWVudHMoZ2wuVFJJQU5HTEVfRkFOLCA0LCBnbC5VTlNJR05FRF9TSE9SVCwgKCB3ZWJHTERhdGEuaW5kaWNlcy5sZW5ndGggLSA0ICkgKiAyICk7XG5cbiAgICAgICAgaWYgKHNtcy5yZXZlcnNlKVxuICAgICAgICB7XG4gICAgICAgICAgICBnbC5zdGVuY2lsRnVuYyhnbC5FUVVBTCwweEZGLShsZXZlbCsxKSwgMHhGRik7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgICBnbC5zdGVuY2lsRnVuYyhnbC5FUVVBTCxsZXZlbCsxLCAweEZGKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHNtcy5yZXZlcnNlID0gIXNtcy5yZXZlcnNlO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICBpZiAoIXNtcy5yZXZlcnNlKVxuICAgICAgICB7XG4gICAgICAgICAgICBnbC5zdGVuY2lsRnVuYyhnbC5FUVVBTCwgMHhGRiAtIGxldmVsLCAweEZGKTtcbiAgICAgICAgICAgIGdsLnN0ZW5jaWxPcChnbC5LRUVQLGdsLktFRVAsZ2wuREVDUik7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgICBnbC5zdGVuY2lsRnVuYyhnbC5FUVVBTCxsZXZlbCwgMHhGRik7XG4gICAgICAgICAgICBnbC5zdGVuY2lsT3AoZ2wuS0VFUCxnbC5LRUVQLGdsLklOQ1IpO1xuICAgICAgICB9XG5cbiAgICAgICAgZ2wuZHJhd0VsZW1lbnRzKGdsLlRSSUFOR0xFX1NUUklQLCAgd2ViR0xEYXRhLmluZGljZXMubGVuZ3RoLCBnbC5VTlNJR05FRF9TSE9SVCwgMCApO1xuXG4gICAgICAgIGlmICghc21zLnJldmVyc2UpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGdsLnN0ZW5jaWxGdW5jKGdsLkVRVUFMLDB4RkYtKGxldmVsKzEpLCAweEZGKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgIHtcbiAgICAgICAgICAgIGdsLnN0ZW5jaWxGdW5jKGdsLkVRVUFMLGxldmVsKzEsIDB4RkYpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZ2wuY29sb3JNYXNrKHRydWUsIHRydWUsIHRydWUsIHRydWUpO1xuICAgIGdsLnN0ZW5jaWxPcChnbC5LRUVQLGdsLktFRVAsZ2wuS0VFUCk7XG5cbiAgICBzbXMuY291bnQrKztcbn07XG5cbi8qKlxuICogVE9ETyB0aGlzIGRvZXMgbm90IGJlbG9uZyBoZXJlIVxuICpcbiAqIEBwYXJhbSBncmFwaGljcyB7UElYSS5HcmFwaGljc31cbiAqIEBwYXJhbSB3ZWJHTERhdGEge2FueVtdfVxuICovXG5XZWJHTE1hc2tNYW5hZ2VyLnByb3RvdHlwZS5iaW5kR3JhcGhpY3MgPSBmdW5jdGlvbiAoZ3JhcGhpY3MsIHdlYkdMRGF0YSlcbntcbiAgICAvL2lmICh0aGlzLl9jdXJyZW50R3JhcGhpY3MgPT09IGdyYXBoaWNzKXJldHVybjtcbiAgICB2YXIgZ2wgPSB0aGlzLnJlbmRlcmVyLmdsO1xuXG4gICAgIC8vIGJpbmQgdGhlIGdyYXBoaWNzIG9iamVjdC4uXG4gICAgdmFyIHNoYWRlciA9IHRoaXMucmVuZGVyZXIucGx1Z2lucy5ncmFwaGljcy5wcmltaXRpdmVTaGFkZXI7XG5cbiAgICBpZiAod2ViR0xEYXRhLm1vZGUgPT09IDEpXG4gICAge1xuICAgICAgICAvKlxuICAgICAgICBzaGFkZXIgPSB0aGlzLnJlbmRlcmVyLnNoYWRlck1hbmFnZXIuY29tcGxleFByaW1pdGl2ZVNoYWRlcjtcblxuICAgICAgICB0aGlzLnJlbmRlcmVyLnNoYWRlck1hbmFnZXIuc2V0U2hhZGVyKHNoYWRlcik7XG5cbiAgICAgICAgZ2wudW5pZm9ybU1hdHJpeDNmdihzaGFkZXIudW5pZm9ybXMudHJhbnNsYXRpb25NYXRyaXguX2xvY2F0aW9uLCBmYWxzZSwgZ3JhcGhpY3Mud29ybGRUcmFuc2Zvcm0udG9BcnJheSh0cnVlKSk7XG5cbiAgICAgICAgZ2wudW5pZm9ybU1hdHJpeDNmdihzaGFkZXIudW5pZm9ybXMucHJvamVjdGlvbk1hdHJpeC5fbG9jYXRpb24sIGZhbHNlLCB0aGlzLnJlbmRlcmVyLmN1cnJlbnRSZW5kZXJUYXJnZXQucHJvamVjdGlvbk1hdHJpeC50b0FycmF5KHRydWUpKTtcblxuICAgICAgICBnbC51bmlmb3JtM2Z2KHNoYWRlci51bmlmb3Jtcy50aW50Ll9sb2NhdGlvbiwgdXRpbHMuaGV4MnJnYihncmFwaGljcy50aW50KSk7XG5cbiAgICAgICAgZ2wudW5pZm9ybTNmdihzaGFkZXIudW5pZm9ybXMuY29sb3IuX2xvY2F0aW9uLCB3ZWJHTERhdGEuY29sb3IpO1xuXG4gICAgICAgIGdsLnVuaWZvcm0xZihzaGFkZXIudW5pZm9ybXMuYWxwaGEuX2xvY2F0aW9uLCBncmFwaGljcy53b3JsZEFscGhhKTtcblxuICAgICAgICBnbC5iaW5kQnVmZmVyKGdsLkFSUkFZX0JVRkZFUiwgd2ViR0xEYXRhLmJ1ZmZlcik7XG5cbiAgICAgICAgZ2wudmVydGV4QXR0cmliUG9pbnRlcihzaGFkZXIuYXR0cmlidXRlcy5hVmVydGV4UG9zaXRpb24sIDIsIGdsLkZMT0FULCBmYWxzZSwgNCAqIDIsIDApO1xuXG4gICAgICAgIC8vIG5vdyBkbyB0aGUgcmVzdC4uXG4gICAgICAgIC8vIHNldCB0aGUgaW5kZXggYnVmZmVyIVxuICAgICAgICBnbC5iaW5kQnVmZmVyKGdsLkVMRU1FTlRfQVJSQVlfQlVGRkVSLCB3ZWJHTERhdGEuaW5kZXhCdWZmZXIpO1xuICAgICovXG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIC8vdGhpcy5yZW5kZXJlci5zaGFkZXJNYW5hZ2VyLmFjdGl2YXRlUHJpbWl0aXZlU2hhZGVyKCk7XG4vLyAgICAgICAgc2hhZGVyID0gdGhpcy5yZW5kZXJlci5zaGFkZXJNYW5hZ2VyLnByaW1pdGl2ZVNoYWRlcjtcbiAgICAgICBcbiAgICAgICAgdGhpcy5yZW5kZXJlci5iaW5kU2hhZGVyKHNoYWRlcilcblxuICAgICAgICBzaGFkZXIudW5pZm9ybXMudHJhbnNsYXRpb25NYXRyaXggPSBncmFwaGljcy53b3JsZFRyYW5zZm9ybS50b0FycmF5KHRydWUpO1xuICAgICAgICBzaGFkZXIudW5pZm9ybXMudGludCA9IHV0aWxzLmhleDJyZ2IoZ3JhcGhpY3MudGludCk7XG4gICAgICAgIHNoYWRlci51bmlmb3Jtcy5hbHBoYSA9IGdyYXBoaWNzLndvcmxkQWxwaGE7XG5cblxuICAgICAgICBnbC5iaW5kQnVmZmVyKGdsLkFSUkFZX0JVRkZFUiwgd2ViR0xEYXRhLmJ1ZmZlcik7XG5cblxuICAgICAgICBzaGFkZXIuYXR0cmlidXRlcy5hVmVydGV4UG9zaXRpb24ucG9pbnRlcihnbC5GTE9BVCwgZmFsc2UsIDQgKiA2LCAwKTtcbiAgICAgICAgc2hhZGVyLmF0dHJpYnV0ZXMuYUNvbG9yLnBvaW50ZXIoZ2wuRkxPQVQsIGZhbHNlLCA0ICogNiwgMiAqIDQpO1xuXG4gICAgICAgIGdsLmVuYWJsZVZlcnRleEF0dHJpYkFycmF5KHNoYWRlci5hdHRyaWJ1dGVzLmFWZXJ0ZXhQb3NpdGlvbi5sb2NhdGlvbik7XG4gICAgICAgIGdsLmVuYWJsZVZlcnRleEF0dHJpYkFycmF5KHNoYWRlci5hdHRyaWJ1dGVzLmFDb2xvci5sb2NhdGlvbik7XG5cbiAgICAgICAgLy8gc2V0IHRoZSBpbmRleCBidWZmZXIhXG4gICAgICAgIGdsLmJpbmRCdWZmZXIoZ2wuRUxFTUVOVF9BUlJBWV9CVUZGRVIsIHdlYkdMRGF0YS5pbmRleEJ1ZmZlcik7XG4vLyAgICAgICAgZ2wuZHJhd0VsZW1lbnRzKGdsLlRSSUFOR0xFX1NUUklQLCAgd2ViR0xEYXRhLmluZGljZXMubGVuZ3RoLCBnbC5VTlNJR05FRF9TSE9SVCwgMCApO1xuXG5cbiAgICAgIC8qICB0aGlzLnJlbmRlcmVyLnNoYWRlck1hbmFnZXIuc2V0U2hhZGVyKHNoYWRlcik7XG5cbiAgICAgICAgZ2wudW5pZm9ybU1hdHJpeDNmdihzaGFkZXIudW5pZm9ybXMudHJhbnNsYXRpb25NYXRyaXguX2xvY2F0aW9uLCBmYWxzZSwgZ3JhcGhpY3Mud29ybGRUcmFuc2Zvcm0udG9BcnJheSh0cnVlKSk7XG5cbiAgICAgICAgZ2wudW5pZm9ybU1hdHJpeDNmdihzaGFkZXIudW5pZm9ybXMucHJvamVjdGlvbk1hdHJpeC5fbG9jYXRpb24sIGZhbHNlLCB0aGlzLnJlbmRlcmVyLmN1cnJlbnRSZW5kZXJUYXJnZXQucHJvamVjdGlvbk1hdHJpeC50b0FycmF5KHRydWUpKTtcblxuICAgICAgICBnbC51bmlmb3JtM2Z2KHNoYWRlci51bmlmb3Jtcy50aW50Ll9sb2NhdGlvbiwgdXRpbHMuaGV4MnJnYihncmFwaGljcy50aW50KSk7XG5cbiAgICAgICAgZ2wudW5pZm9ybTFmKHNoYWRlci51bmlmb3Jtcy5hbHBoYS5fbG9jYXRpb24sIGdyYXBoaWNzLndvcmxkQWxwaGEpO1xuXG4gICAgICAgIGdsLmJpbmRCdWZmZXIoZ2wuQVJSQVlfQlVGRkVSLCB3ZWJHTERhdGEuYnVmZmVyKTtcblxuICAgICAgICBnbC52ZXJ0ZXhBdHRyaWJQb2ludGVyKHNoYWRlci5hdHRyaWJ1dGVzLmFWZXJ0ZXhQb3NpdGlvbiwgMiwgZ2wuRkxPQVQsIGZhbHNlLCA0ICogNiwgMCk7XG4gICAgICAgIGdsLnZlcnRleEF0dHJpYlBvaW50ZXIoc2hhZGVyLmF0dHJpYnV0ZXMuYUNvbG9yLCA0LCBnbC5GTE9BVCwgZmFsc2UsNCAqIDYsIDIgKiA0KTtcblxuICAgICAgICAvLyBzZXQgdGhlIGluZGV4IGJ1ZmZlciFcbiAgICAgICAgZ2wuYmluZEJ1ZmZlcihnbC5FTEVNRU5UX0FSUkFZX0JVRkZFUiwgd2ViR0xEYXRhLmluZGV4QnVmZmVyKTsqL1xuICAgIH1cbn07XG5cbi8qKlxuICogVE9ETyBAYWx2aW5cbiAqIEBwYXJhbSBncmFwaGljcyB7UElYSS5HcmFwaGljc31cbiAqIEBwYXJhbSB3ZWJHTERhdGEge2FueVtdfVxuICovXG5XZWJHTE1hc2tNYW5hZ2VyLnByb3RvdHlwZS5wb3BTdGVuY2lsID0gZnVuY3Rpb24gKGdyYXBoaWNzLCB3ZWJHTERhdGEpXG57XG4gICAgdmFyIGdsID0gdGhpcy5yZW5kZXJlci5nbCxcbiAgICAgICAgc21zID0gdGhpcy5zdGVuY2lsTWFza1N0YWNrO1xuXG4gICAgc21zLnN0ZW5jaWxTdGFjay5wb3AoKTtcblxuICAgIHNtcy5jb3VudC0tO1xuXG4gICAgaWYgKHNtcy5zdGVuY2lsU3RhY2subGVuZ3RoID09PSAwKVxuICAgIHtcbiAgICAgICAgLy8gdGhlIHN0YWNrIGlzIGVtcHR5IVxuICAgICAgICBnbC5kaXNhYmxlKGdsLlNURU5DSUxfVEVTVCk7XG5cbiAgICB9XG4gICAgZWxzZVxuICAgIHtcblxuICAgICAgICB2YXIgbGV2ZWwgPSBzbXMuY291bnQ7XG5cbiAgICAgICAgdGhpcy5iaW5kR3JhcGhpY3MoZ3JhcGhpY3MsIHdlYkdMRGF0YSk7XG5cbiAgICAgICAgZ2wuY29sb3JNYXNrKGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlKTtcblxuICAgICAgICBpZiAod2ViR0xEYXRhLm1vZGUgPT09IDEpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHNtcy5yZXZlcnNlID0gIXNtcy5yZXZlcnNlO1xuXG4gICAgICAgICAgICBpZiAoc21zLnJldmVyc2UpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgZ2wuc3RlbmNpbEZ1bmMoZ2wuRVFVQUwsIDB4RkYgLSAobGV2ZWwrMSksIDB4RkYpO1xuICAgICAgICAgICAgICAgIGdsLnN0ZW5jaWxPcChnbC5LRUVQLGdsLktFRVAsZ2wuSU5DUik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgZ2wuc3RlbmNpbEZ1bmMoZ2wuRVFVQUwsbGV2ZWwrMSwgMHhGRik7XG4gICAgICAgICAgICAgICAgZ2wuc3RlbmNpbE9wKGdsLktFRVAsZ2wuS0VFUCxnbC5ERUNSKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gZHJhdyBhIHF1YWQgdG8gaW5jcmVtZW50Li5cbiAgICAgICAgICAgIGdsLmRyYXdFbGVtZW50cyhnbC5UUklBTkdMRV9GQU4sIDQsIGdsLlVOU0lHTkVEX1NIT1JULCAoIHdlYkdMRGF0YS5pbmRpY2VzLmxlbmd0aCAtIDQgKSAqIDIgKTtcblxuICAgICAgICAgICAgZ2wuc3RlbmNpbEZ1bmMoZ2wuQUxXQVlTLDAsMHhGRik7XG4gICAgICAgICAgICBnbC5zdGVuY2lsT3AoZ2wuS0VFUCxnbC5LRUVQLGdsLklOVkVSVCk7XG5cbiAgICAgICAgICAgIC8vIGRyYXcgdGhlIHRyaWFuZ2xlIHN0cmlwIVxuICAgICAgICAgICAgZ2wuZHJhd0VsZW1lbnRzKGdsLlRSSUFOR0xFX0ZBTiwgIHdlYkdMRGF0YS5pbmRpY2VzLmxlbmd0aCAtIDQsIGdsLlVOU0lHTkVEX1NIT1JULCAwICk7XG5cbiAgICAgICAgICAgIHRoaXMucmVuZGVyZXIuZHJhd0NvdW50ICs9IDI7XG5cbiAgICAgICAgICAgIGlmICghc21zLnJldmVyc2UpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgZ2wuc3RlbmNpbEZ1bmMoZ2wuRVFVQUwsMHhGRi0obGV2ZWwpLCAweEZGKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBnbC5zdGVuY2lsRnVuYyhnbC5FUVVBTCxsZXZlbCwgMHhGRik7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgIHtcbiAgICAgICAgICAvLyAgY29uc29sZS5sb2coXCI8PD4+XCIpXG4gICAgICAgICAgICBpZiAoIXNtcy5yZXZlcnNlKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGdsLnN0ZW5jaWxGdW5jKGdsLkVRVUFMLCAweEZGIC0gKGxldmVsKzEpLCAweEZGKTtcbiAgICAgICAgICAgICAgICBnbC5zdGVuY2lsT3AoZ2wuS0VFUCxnbC5LRUVQLGdsLklOQ1IpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGdsLnN0ZW5jaWxGdW5jKGdsLkVRVUFMLGxldmVsKzEsIDB4RkYpO1xuICAgICAgICAgICAgICAgIGdsLnN0ZW5jaWxPcChnbC5LRUVQLGdsLktFRVAsZ2wuREVDUik7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGdsLmRyYXdFbGVtZW50cyhnbC5UUklBTkdMRV9TVFJJUCwgIHdlYkdMRGF0YS5pbmRpY2VzLmxlbmd0aCwgZ2wuVU5TSUdORURfU0hPUlQsIDAgKTtcblxuICAgICAgICAgICAgdGhpcy5yZW5kZXJlci5kcmF3Q291bnQrKztcblxuICAgICAgICAgICAgaWYgKCFzbXMucmV2ZXJzZSlcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBnbC5zdGVuY2lsRnVuYyhnbC5FUVVBTCwweEZGLShsZXZlbCksIDB4RkYpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGdsLnN0ZW5jaWxGdW5jKGdsLkVRVUFMLGxldmVsLCAweEZGKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGdsLmNvbG9yTWFzayh0cnVlLCB0cnVlLCB0cnVlLCB0cnVlKTtcbiAgICAgICAgZ2wuc3RlbmNpbE9wKGdsLktFRVAsZ2wuS0VFUCxnbC5LRUVQKTtcblxuXG4gICAgfVxufTtcblxuLyoqXG4gKiBEZXN0cm95cyB0aGUgbWFzayBzdGFjay5cbiAqXG4gKi9cbldlYkdMTWFza01hbmFnZXIucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoKVxue1xuICAgIFdlYkdMTWFuYWdlci5wcm90b3R5cGUuZGVzdHJveS5jYWxsKHRoaXMpO1xuXG4gICAgdGhpcy5zdGVuY2lsTWFza1N0YWNrLnN0ZW5jaWxTdGFjayA9IG51bGw7XG59O1xuXG4vKipcbiAqIEFwcGxpZXMgdGhlIE1hc2sgYW5kIGFkZHMgaXQgdG8gdGhlIGN1cnJlbnQgZmlsdGVyIHN0YWNrLlxuICpcbiAqIEBwYXJhbSBtYXNrRGF0YSB7YW55W119IFRoZSBtYXNrIGRhdGEgc3RydWN0dXJlIHRvIHVzZVxuICovXG5XZWJHTE1hc2tNYW5hZ2VyLnByb3RvdHlwZS5wdXNoTWFzayA9IGZ1bmN0aW9uIChtYXNrRGF0YSlcbntcbiAgICB0aGlzLnJlbmRlcmVyLnNldE9iamVjdFJlbmRlcmVyKHRoaXMucmVuZGVyZXIucGx1Z2lucy5ncmFwaGljcyk7XG4gICAgXG4gICAgLy9UT0RPIEZJWFxuICAgIGlmIChtYXNrRGF0YS5kaXJ0eSlcbiAgICB7XG4gICAgICAgIHRoaXMucmVuZGVyZXIucGx1Z2lucy5ncmFwaGljcy51cGRhdGVHcmFwaGljcyhtYXNrRGF0YSwgdGhpcy5yZW5kZXJlci5nbCk7XG4gICAgfVxuXG4gICAgaWYgKCFtYXNrRGF0YS5fd2ViR0xbdGhpcy5yZW5kZXJlci5nbC5pZF0uZGF0YS5sZW5ndGgpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5wdXNoU3RlbmNpbChtYXNrRGF0YSwgbWFza0RhdGEuX3dlYkdMW3RoaXMucmVuZGVyZXIuZ2wuaWRdLmRhdGFbMF0pO1xufTtcblxuLyoqXG4gKiBSZW1vdmVzIHRoZSBsYXN0IGZpbHRlciBmcm9tIHRoZSBmaWx0ZXIgc3RhY2sgYW5kIGRvZXNuJ3QgcmV0dXJuIGl0LlxuICpcbiAqIEBwYXJhbSBtYXNrRGF0YSB7YW55W119XG4gKi9cbldlYkdMTWFza01hbmFnZXIucHJvdG90eXBlLnBvcE1hc2sgPSBmdW5jdGlvbiAobWFza0RhdGEpXG57XG4gICAgdGhpcy5yZW5kZXJlci5zZXRPYmplY3RSZW5kZXJlcih0aGlzLnJlbmRlcmVyLnBsdWdpbnMuZ3JhcGhpY3MpO1xuXG4gICAgdGhpcy5wb3BTdGVuY2lsKG1hc2tEYXRhLCBtYXNrRGF0YS5fd2ViR0xbdGhpcy5yZW5kZXJlci5nbC5pZF0uZGF0YVswXSk7XG59O1xuXG4iLCIvKipcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5XZWJHTFJlbmRlcmVyfSBUaGUgcmVuZGVyZXIgdGhpcyBtYW5hZ2VyIHdvcmtzIGZvci5cbiAqL1xuZnVuY3Rpb24gV2ViR0xNYW5hZ2VyKHJlbmRlcmVyKVxue1xuICAgIC8qKlxuICAgICAqIFRoZSByZW5kZXJlciB0aGlzIG1hbmFnZXIgd29ya3MgZm9yLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5XZWJHTFJlbmRlcmVyfVxuICAgICAqL1xuICAgIHRoaXMucmVuZGVyZXIgPSByZW5kZXJlcjtcblxuICAgIHRoaXMucmVuZGVyZXIub24oJ2NvbnRleHQnLCB0aGlzLm9uQ29udGV4dENoYW5nZSwgdGhpcyk7XG59XG5cbldlYkdMTWFuYWdlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBXZWJHTE1hbmFnZXI7XG5tb2R1bGUuZXhwb3J0cyA9IFdlYkdMTWFuYWdlcjtcblxuLyoqXG4gKiBHZW5lcmljIG1ldGhvZCBjYWxsZWQgd2hlbiB0aGVyZSBpcyBhIFdlYkdMIGNvbnRleHQgY2hhbmdlLlxuICpcbiAqL1xuV2ViR0xNYW5hZ2VyLnByb3RvdHlwZS5vbkNvbnRleHRDaGFuZ2UgPSBmdW5jdGlvbiAoKVxue1xuXHQvLyBkbyBzb21lIGNvZGVzIGluaXQhXG59O1xuXG4vKipcbiAqIEdlbmVyaWMgZGVzdHJveSBtZXRob2RzIHRvIGJlIG92ZXJyaWRkZW4gYnkgdGhlIHN1YmNsYXNzXG4gKlxuICovXG5XZWJHTE1hbmFnZXIucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoKVxue1xuICAgIHRoaXMucmVuZGVyZXIub2ZmKCdjb250ZXh0JywgdGhpcy5vbkNvbnRleHRDaGFuZ2UsIHRoaXMpO1xuXG4gICAgdGhpcy5yZW5kZXJlciA9IG51bGw7XG59O1xuIiwidmFyIFNoYWRlciA9IHJlcXVpcmUoJy4vU2hhZGVyJyk7XG5cbi8qKlxuICogVGhpcyBzaGFkZXIgaXMgdXNlZCB0byBkcmF3IGNvbXBsZXggcHJpbWl0aXZlIHNoYXBlcyBmb3Ige0BsaW5rIFBJWEkuR3JhcGhpY3N9LlxuICpcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqIEBleHRlbmRzIFBJWEkuU2hhZGVyXG4gKiBAcGFyYW0gc2hhZGVyTWFuYWdlciB7UElYSS5TaGFkZXJNYW5hZ2VyfSBUaGUgd2ViZ2wgc2hhZGVyIG1hbmFnZXIgdGhpcyBzaGFkZXIgd29ya3MgZm9yLlxuICovXG5mdW5jdGlvbiBDb21wbGV4UHJpbWl0aXZlU2hhZGVyKHNoYWRlck1hbmFnZXIpXG57XG4gICAgU2hhZGVyLmNhbGwodGhpcyxcbiAgICAgICAgc2hhZGVyTWFuYWdlcixcbiAgICAgICAgLy8gdmVydGV4IHNoYWRlclxuICAgICAgICBbXG4gICAgICAgICAgICAnYXR0cmlidXRlIHZlYzIgYVZlcnRleFBvc2l0aW9uOycsXG5cbiAgICAgICAgICAgICd1bmlmb3JtIG1hdDMgdHJhbnNsYXRpb25NYXRyaXg7JyxcbiAgICAgICAgICAgICd1bmlmb3JtIG1hdDMgcHJvamVjdGlvbk1hdHJpeDsnLFxuXG4gICAgICAgICAgICAndW5pZm9ybSB2ZWMzIHRpbnQ7JyxcbiAgICAgICAgICAgICd1bmlmb3JtIGZsb2F0IGFscGhhOycsXG4gICAgICAgICAgICAndW5pZm9ybSB2ZWMzIGNvbG9yOycsXG5cbiAgICAgICAgICAgICd2YXJ5aW5nIHZlYzQgdkNvbG9yOycsXG5cbiAgICAgICAgICAgICd2b2lkIG1haW4odm9pZCl7JyxcbiAgICAgICAgICAgICcgICBnbF9Qb3NpdGlvbiA9IHZlYzQoKHByb2plY3Rpb25NYXRyaXggKiB0cmFuc2xhdGlvbk1hdHJpeCAqIHZlYzMoYVZlcnRleFBvc2l0aW9uLCAxLjApKS54eSwgMC4wLCAxLjApOycsXG4gICAgICAgICAgICAnICAgdkNvbG9yID0gdmVjNChjb2xvciAqIGFscGhhICogdGludCwgYWxwaGEpOycsLy9cIiAqIHZlYzQodGludCAqIGFscGhhLCBhbHBoYSk7JyxcbiAgICAgICAgICAgICd9J1xuICAgICAgICBdLmpvaW4oJ1xcbicpLFxuICAgICAgICAvLyBmcmFnbWVudCBzaGFkZXJcbiAgICAgICAgW1xuICAgICAgICAgICAgJ3ByZWNpc2lvbiBtZWRpdW1wIGZsb2F0OycsXG5cbiAgICAgICAgICAgICd2YXJ5aW5nIHZlYzQgdkNvbG9yOycsXG5cbiAgICAgICAgICAgICd2b2lkIG1haW4odm9pZCl7JyxcbiAgICAgICAgICAgICcgICBnbF9GcmFnQ29sb3IgPSB2Q29sb3I7JyxcbiAgICAgICAgICAgICd9J1xuICAgICAgICBdLmpvaW4oJ1xcbicpLFxuICAgICAgICAvLyBjdXN0b20gdW5pZm9ybXNcbiAgICAgICAge1xuICAgICAgICAgICAgdGludDogICB7IHR5cGU6ICczZicsIHZhbHVlOiBbMCwgMCwgMF0gfSxcbiAgICAgICAgICAgIGFscGhhOiAgeyB0eXBlOiAnMWYnLCB2YWx1ZTogMCB9LFxuICAgICAgICAgICAgY29sb3I6ICB7IHR5cGU6ICczZicsIHZhbHVlOiBbMCwwLDBdIH0sXG4gICAgICAgICAgICB0cmFuc2xhdGlvbk1hdHJpeDogeyB0eXBlOiAnbWF0MycsIHZhbHVlOiBuZXcgRmxvYXQzMkFycmF5KDkpIH0sXG4gICAgICAgICAgICBwcm9qZWN0aW9uTWF0cml4OiB7IHR5cGU6ICdtYXQzJywgdmFsdWU6IG5ldyBGbG9hdDMyQXJyYXkoOSkgfVxuICAgICAgICB9LFxuICAgICAgICAvLyBhdHRyaWJ1dGVzXG4gICAgICAgIHtcbiAgICAgICAgICAgIGFWZXJ0ZXhQb3NpdGlvbjowXG4gICAgICAgIH1cbiAgICApO1xufVxuXG5Db21wbGV4UHJpbWl0aXZlU2hhZGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoU2hhZGVyLnByb3RvdHlwZSk7XG5Db21wbGV4UHJpbWl0aXZlU2hhZGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IENvbXBsZXhQcmltaXRpdmVTaGFkZXI7XG5tb2R1bGUuZXhwb3J0cyA9IENvbXBsZXhQcmltaXRpdmVTaGFkZXI7XG4iLCJ2YXIgU2hhZGVyID0gcmVxdWlyZSgnLi9TaGFkZXInKTtcblxuLyoqXG4gKiBUaGlzIHNoYWRlciBpcyB1c2VkIHRvIGRyYXcgc2ltcGxlIHByaW1pdGl2ZSBzaGFwZXMgZm9yIHtAbGluayBQSVhJLkdyYXBoaWNzfS5cbiAqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAZXh0ZW5kcyBQSVhJLlNoYWRlclxuICogQHBhcmFtIHNoYWRlck1hbmFnZXIge1NoYWRlck1hbmFnZXJ9IFRoZSB3ZWJnbCBzaGFkZXIgbWFuYWdlciB0aGlzIHNoYWRlciB3b3JrcyBmb3IuXG4gKi9cbmZ1bmN0aW9uIFByaW1pdGl2ZVNoYWRlcihzaGFkZXJNYW5hZ2VyKVxue1xuICAgIFNoYWRlci5jYWxsKHRoaXMsXG4gICAgICAgIHNoYWRlck1hbmFnZXIsXG4gICAgICAgIC8vIHZlcnRleCBzaGFkZXJcbiAgICAgICAgW1xuICAgICAgICAgICAgJ2F0dHJpYnV0ZSB2ZWMyIGFWZXJ0ZXhQb3NpdGlvbjsnLFxuICAgICAgICAgICAgJ2F0dHJpYnV0ZSB2ZWM0IGFDb2xvcjsnLFxuXG4gICAgICAgICAgICAndW5pZm9ybSBtYXQzIHRyYW5zbGF0aW9uTWF0cml4OycsXG4gICAgICAgICAgICAndW5pZm9ybSBtYXQzIHByb2plY3Rpb25NYXRyaXg7JyxcblxuICAgICAgICAgICAgJ3VuaWZvcm0gZmxvYXQgYWxwaGE7JyxcbiAgICAgICAgICAgICd1bmlmb3JtIGZsb2F0IGZsaXBZOycsXG4gICAgICAgICAgICAndW5pZm9ybSB2ZWMzIHRpbnQ7JyxcblxuICAgICAgICAgICAgJ3ZhcnlpbmcgdmVjNCB2Q29sb3I7JyxcblxuICAgICAgICAgICAgJ3ZvaWQgbWFpbih2b2lkKXsnLFxuICAgICAgICAgICAgJyAgIGdsX1Bvc2l0aW9uID0gdmVjNCgocHJvamVjdGlvbk1hdHJpeCAqIHRyYW5zbGF0aW9uTWF0cml4ICogdmVjMyhhVmVydGV4UG9zaXRpb24sIDEuMCkpLnh5LCAwLjAsIDEuMCk7JyxcbiAgICAgICAgICAgICcgICB2Q29sb3IgPSBhQ29sb3IgKiB2ZWM0KHRpbnQgKiBhbHBoYSwgYWxwaGEpOycsXG4gICAgICAgICAgICAnfSdcbiAgICAgICAgXS5qb2luKCdcXG4nKSxcbiAgICAgICAgLy8gZnJhZ21lbnQgc2hhZGVyXG4gICAgICAgIFtcbiAgICAgICAgICAgICdwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDsnLFxuXG4gICAgICAgICAgICAndmFyeWluZyB2ZWM0IHZDb2xvcjsnLFxuXG4gICAgICAgICAgICAndm9pZCBtYWluKHZvaWQpeycsXG4gICAgICAgICAgICAnICAgZ2xfRnJhZ0NvbG9yID0gdkNvbG9yOycsXG4gICAgICAgICAgICAnfSdcbiAgICAgICAgXS5qb2luKCdcXG4nKSxcbiAgICAgICAgLy8gY3VzdG9tIHVuaWZvcm1zXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRpbnQ6ICAgeyB0eXBlOiAnM2YnLCB2YWx1ZTogWzAsIDAsIDBdIH0sXG4gICAgICAgICAgICBhbHBoYTogIHsgdHlwZTogJzFmJywgdmFsdWU6IDAgfSxcbiAgICAgICAgICAgIHRyYW5zbGF0aW9uTWF0cml4OiB7IHR5cGU6ICdtYXQzJywgdmFsdWU6IG5ldyBGbG9hdDMyQXJyYXkoOSkgfSxcbiAgICAgICAgICAgIHByb2plY3Rpb25NYXRyaXg6IHsgdHlwZTogJ21hdDMnLCB2YWx1ZTogbmV3IEZsb2F0MzJBcnJheSg5KSB9XG4gICAgICAgIH0sXG4gICAgICAgIC8vIGN1c3RvbSBhdHRyaWJ1dGVzXG4gICAgICAgIHtcbiAgICAgICAgICAgIGFWZXJ0ZXhQb3NpdGlvbjowLFxuICAgICAgICAgICAgYUNvbG9yOjBcbiAgICAgICAgfVxuICAgICk7XG59XG5cblByaW1pdGl2ZVNoYWRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFNoYWRlci5wcm90b3R5cGUpO1xuUHJpbWl0aXZlU2hhZGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFByaW1pdGl2ZVNoYWRlcjtcbm1vZHVsZS5leHBvcnRzID0gUHJpbWl0aXZlU2hhZGVyO1xuIiwiLypnbG9iYWwgY29uc29sZSAqL1xudmFyIHV0aWxzID0gcmVxdWlyZSgnLi4vLi4vLi4vdXRpbHMnKTtcblxuLyoqXG4gKiBCYXNlIHNoYWRlciBjbGFzcyBmb3IgUElYSSBtYW5hZ2VkIHNoYWRlcnMuXG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIHNoYWRlck1hbmFnZXIge1BJWEkuU2hhZGVyTWFuYWdlcn0gVGhlIHdlYmdsIHNoYWRlciBtYW5hZ2VyIHRoaXMgc2hhZGVyIHdvcmtzIGZvci5cbiAqIEBwYXJhbSBbdmVydGV4U3JjXSB7c3RyaW5nfSBUaGUgc291cmNlIG9mIHRoZSB2ZXJ0ZXggc2hhZGVyLlxuICogQHBhcmFtIFtmcmFnbWVudFNyY10ge3N0cmluZ30gVGhlIHNvdXJjZSBvZiB0aGUgZnJhZ21lbnQgc2hhZGVyLlxuICogQHBhcmFtIFt1bmlmb3Jtc10ge29iamVjdH0gVW5pZm9ybXMgZm9yIHRoaXMgc2hhZGVyLlxuICogQHBhcmFtIFthdHRyaWJ1dGVzXSB7b2JqZWN0fSBBdHRyaWJ1dGVzIGZvciB0aGlzIHNoYWRlci5cbiAqL1xuZnVuY3Rpb24gU2hhZGVyKHNoYWRlck1hbmFnZXIsIHZlcnRleFNyYywgZnJhZ21lbnRTcmMsIHVuaWZvcm1zLCBhdHRyaWJ1dGVzKVxue1xuICAgIGlmICghdmVydGV4U3JjIHx8ICFmcmFnbWVudFNyYylcbiAgICB7XG4gICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1BpeGkuanMgRXJyb3IuIFNoYWRlciByZXF1aXJlcyB2ZXJ0ZXhTcmMgYW5kIGZyYWdtZW50U3JjJyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQSB1bmlxdWUgaWRcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQHJlYWRvbmx5XG4gICAgICovXG4gICAgdGhpcy51aWQgPSB1dGlscy51aWQoKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBjdXJyZW50IFdlYkdMIGRyYXdpbmcgY29udGV4dFxuICAgICAqIEBtZW1iZXIge1dlYkdMUmVuZGVyaW5nQ29udGV4dH1cbiAgICAgKiBAcmVhZG9ubHlcbiAgICAgKi9cbiAgICB0aGlzLmdsID0gc2hhZGVyTWFuYWdlci5yZW5kZXJlci5nbDtcblxuICAgIC8vVE9ETyBtYXliZSB3ZSBzaG91bGQgcGFzcyByZW5kZXJlciByYXRoZXIgdGhhbiBzaGFkZXIgbWFuZ2VyPz8gZm9vZCBmb3IgdGhvdWdodC4uXG4gICAgdGhpcy5zaGFkZXJNYW5hZ2VyID0gc2hhZGVyTWFuYWdlcjtcblxuICAgIC8qKlxuICAgICAqIFRoZSBXZWJHTCBwcm9ncmFtLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7V2ViR0xQcm9ncmFtfVxuICAgICAqIEByZWFkb25seVxuICAgICAqL1xuICAgIHRoaXMucHJvZ3JhbSA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgdW5pZm9ybXMgYXMgYW4gb2JqZWN0XG4gICAgICogQG1lbWJlciB7b2JqZWN0fVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy51bmlmb3JtcyA9IHVuaWZvcm1zIHx8IHt9O1xuXG4gICAgLyoqXG4gICAgICogVGhlIGF0dHJpYnV0ZXMgYXMgYW4gb2JqZWN0XG4gICAgICogQG1lbWJlciB7b2JqZWN0fVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5hdHRyaWJ1dGVzID0gYXR0cmlidXRlcyB8fCB7fTtcblxuICAgIC8qKlxuICAgICAqIEludGVybmFsIHRleHR1cmUgY291bnRlclxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMudGV4dHVyZUNvdW50ID0gMTtcblxuICAgIC8qKlxuICAgICAqIFRoZSB2ZXJ0ZXggc2hhZGVyIGFzIGFuIGFycmF5IG9mIHN0cmluZ3NcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge3N0cmluZ31cbiAgICAgKi9cbiAgICB0aGlzLnZlcnRleFNyYyA9IHZlcnRleFNyYztcblxuICAgIC8qKlxuICAgICAqIFRoZSBmcmFnbWVudCBzaGFkZXIgYXMgYW4gYXJyYXkgb2Ygc3RyaW5nc1xuICAgICAqXG4gICAgICogQG1lbWJlciB7c3RyaW5nfVxuICAgICAqL1xuICAgIHRoaXMuZnJhZ21lbnRTcmMgPSBmcmFnbWVudFNyYztcblxuICAgIHRoaXMuaW5pdCgpO1xufVxuXG5TaGFkZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gU2hhZGVyO1xubW9kdWxlLmV4cG9ydHMgPSBTaGFkZXI7XG5cbi8qKlxuICogQ3JlYXRlcyB0aGUgc2hhZGVyIGFuZCB1c2VzIGl0XG4gKlxuICovXG5TaGFkZXIucHJvdG90eXBlLmluaXQgPSBmdW5jdGlvbiAoKVxue1xuICAgIHRoaXMuY29tcGlsZSgpO1xuXG4gICAgdGhpcy5nbC51c2VQcm9ncmFtKHRoaXMucHJvZ3JhbSk7XG5cbiAgICB0aGlzLmNhY2hlVW5pZm9ybUxvY2F0aW9ucyhPYmplY3Qua2V5cyh0aGlzLnVuaWZvcm1zKSk7XG4gICAgdGhpcy5jYWNoZUF0dHJpYnV0ZUxvY2F0aW9ucyhPYmplY3Qua2V5cyh0aGlzLmF0dHJpYnV0ZXMpKTtcbn07XG5cbi8qKlxuICogQ2FjaGVzIHRoZSBsb2NhdGlvbnMgb2YgdGhlIHVuaWZvcm0gZm9yIHJldXNlLlxuICpcbiAqIEBwYXJhbSBrZXlzIHtzdHJpbmd9IHRoZSB1bmlmb3JtcyB0byBjYWNoZVxuICovXG5TaGFkZXIucHJvdG90eXBlLmNhY2hlVW5pZm9ybUxvY2F0aW9ucyA9IGZ1bmN0aW9uIChrZXlzKVxue1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7ICsraSlcbiAgICB7XG4gICAgICAgIHRoaXMudW5pZm9ybXNba2V5c1tpXV0uX2xvY2F0aW9uID0gdGhpcy5nbC5nZXRVbmlmb3JtTG9jYXRpb24odGhpcy5wcm9ncmFtLCBrZXlzW2ldKTtcbiAgICB9XG59O1xuXG4vKipcbiAqIENhY2hlcyB0aGUgbG9jYXRpb25zIG9mIHRoZSBhdHRyaWJ1dGUgZm9yIHJldXNlLlxuICpcbiAqIEBwYXJhbSBrZXlzIHtzdHJpbmd9IHRoZSBhdHRyaWJ1dGVzIHRvIGNhY2hlXG4gKi9cblNoYWRlci5wcm90b3R5cGUuY2FjaGVBdHRyaWJ1dGVMb2NhdGlvbnMgPSBmdW5jdGlvbiAoa2V5cylcbntcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyArK2kpXG4gICAge1xuICAgICAgICB0aGlzLmF0dHJpYnV0ZXNba2V5c1tpXV0gPSB0aGlzLmdsLmdldEF0dHJpYkxvY2F0aW9uKHRoaXMucHJvZ3JhbSwga2V5c1tpXSk7XG4gICAgfVxuXG4gICAgLy8gVE9ETzogQ2hlY2sgaWYgdGhpcyBpcyBuZWVkZWQgYW55bW9yZS4uLlxuXG4gICAgLy8gQmVnaW4gd29yc3QgaGFjayBldmEgLy9cblxuICAgIC8vIFdIWT8/PyBPTkxZIG9uIG15IGNocm9tZSBwaXhlbCB0aGUgbGluZSBhYm92ZSByZXR1cm5zIC0xIHdoZW4gdXNpbmcgZmlsdGVycz9cbiAgICAvLyBtYXliZSBpdHMgc29tZXRoaW5nIHRvIGRvIHdpdGggdGhlIGN1cnJlbnQgc3RhdGUgb2YgdGhlIGdsIGNvbnRleHQuXG4gICAgLy8gSSdtIGNvbnZpbmNlZCB0aGlzIGlzIGEgYnVnIGluIHRoZSBjaHJvbWUgYnJvd3NlciBhcyB0aGVyZSBpcyBOTyByZWFzb24gd2h5IHRoaXMgc2hvdWxkIGJlIHJldHVybmluZyAtMSBlc3BlY2lhbGx5IGFzIGl0IG9ubHkgbWFuaWZlc3RzIG9uIG15IGNocm9tZSBwaXhlbFxuICAgIC8vIElmIHRoZXJlcyBhbnkgd2ViR0wgcGVvcGxlIHRoYXQga25vdyB3aHkgY291bGQgaGFwcGVuIHBsZWFzZSBoZWxwIDopXG4gICAgLy8gaWYgKHRoaXMuYXR0cmlidXRlcy5hQ29sb3IgPT09IC0xKXtcbiAgICAvLyAgICAgdGhpcy5hdHRyaWJ1dGVzLmFDb2xvciA9IDI7XG4gICAgLy8gfVxuXG4gICAgLy8gRW5kIHdvcnN0IGhhY2sgZXZhIC8vXG59O1xuXG4vKipcbiAqIEF0dGFjaGVzIHRoZSBzaGFkZXJzIGFuZCBjcmVhdGVzIHRoZSBwcm9ncmFtLlxuICpcbiAqIEByZXR1cm4ge1dlYkdMUHJvZ3JhbX1cbiAqL1xuU2hhZGVyLnByb3RvdHlwZS5jb21waWxlID0gZnVuY3Rpb24gKClcbntcbiAgICB2YXIgZ2wgPSB0aGlzLmdsO1xuXG4gICAgdmFyIGdsVmVydFNoYWRlciA9IHRoaXMuX2dsQ29tcGlsZShnbC5WRVJURVhfU0hBREVSLCB0aGlzLnZlcnRleFNyYyk7XG4gICAgdmFyIGdsRnJhZ1NoYWRlciA9IHRoaXMuX2dsQ29tcGlsZShnbC5GUkFHTUVOVF9TSEFERVIsIHRoaXMuZnJhZ21lbnRTcmMpO1xuXG4gICAgdmFyIHByb2dyYW0gPSBnbC5jcmVhdGVQcm9ncmFtKCk7XG5cbiAgICBnbC5hdHRhY2hTaGFkZXIocHJvZ3JhbSwgZ2xWZXJ0U2hhZGVyKTtcbiAgICBnbC5hdHRhY2hTaGFkZXIocHJvZ3JhbSwgZ2xGcmFnU2hhZGVyKTtcbiAgICBnbC5saW5rUHJvZ3JhbShwcm9ncmFtKTtcblxuICAgIC8vIGlmIGxpbmtpbmcgZmFpbHMsIHRoZW4gbG9nIGFuZCBjbGVhbnVwXG4gICAgaWYgKCFnbC5nZXRQcm9ncmFtUGFyYW1ldGVyKHByb2dyYW0sIGdsLkxJTktfU1RBVFVTKSlcbiAgICB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ1BpeGkuanMgRXJyb3I6IENvdWxkIG5vdCBpbml0aWFsaXplIHNoYWRlci4nKTtcbiAgICAgICAgY29uc29sZS5lcnJvcignZ2wuVkFMSURBVEVfU1RBVFVTJywgZ2wuZ2V0UHJvZ3JhbVBhcmFtZXRlcihwcm9ncmFtLCBnbC5WQUxJREFURV9TVEFUVVMpKTtcbiAgICAgICAgY29uc29sZS5lcnJvcignZ2wuZ2V0RXJyb3IoKScsIGdsLmdldEVycm9yKCkpO1xuXG4gICAgICAgIC8vIGlmIHRoZXJlIGlzIGEgcHJvZ3JhbSBpbmZvIGxvZywgbG9nIGl0XG4gICAgICAgIGlmIChnbC5nZXRQcm9ncmFtSW5mb0xvZyhwcm9ncmFtKSAhPT0gJycpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignUGl4aS5qcyBXYXJuaW5nOiBnbC5nZXRQcm9ncmFtSW5mb0xvZygpJywgZ2wuZ2V0UHJvZ3JhbUluZm9Mb2cocHJvZ3JhbSkpO1xuICAgICAgICB9XG5cbiAgICAgICAgZ2wuZGVsZXRlUHJvZ3JhbShwcm9ncmFtKTtcbiAgICAgICAgcHJvZ3JhbSA9IG51bGw7XG4gICAgfVxuXG4gICAgLy8gY2xlYW4gdXAgc29tZSBzaGFkZXJzXG4gICAgZ2wuZGVsZXRlU2hhZGVyKGdsVmVydFNoYWRlcik7XG4gICAgZ2wuZGVsZXRlU2hhZGVyKGdsRnJhZ1NoYWRlcik7XG5cbiAgICByZXR1cm4gKHRoaXMucHJvZ3JhbSA9IHByb2dyYW0pO1xufTtcblxuLyoqXG4qIEFkZHMgYSBuZXcgdW5pZm9ybVxuKlxuKiBAcGFyYW0gdW5pZm9ybSB7b2JqZWN0fSB0aGUgbmV3IHVuaWZvcm0gdG8gYXR0YWNoXG4qL1xuU2hhZGVyLnByb3RvdHlwZS5zeW5jVW5pZm9ybSA9IGZ1bmN0aW9uICh1bmlmb3JtKVxue1xuICAgIHZhciBsb2NhdGlvbiA9IHVuaWZvcm0uX2xvY2F0aW9uLFxuICAgICAgICB2YWx1ZSA9IHVuaWZvcm0udmFsdWUsXG4gICAgICAgIGdsID0gdGhpcy5nbCxcbiAgICAgICAgaSwgaWw7XG5cbiAgICBzd2l0Y2ggKHVuaWZvcm0udHlwZSlcbiAgICB7XG4gICAgICAgIGNhc2UgJ2InOlxuICAgICAgICBjYXNlICdib29sJzpcbiAgICAgICAgY2FzZSAnYm9vbGVhbic6XG4gICAgICAgICAgICBnbC51bmlmb3JtMWkobG9jYXRpb24sIHZhbHVlID8gMSA6IDApO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLy8gc2luZ2xlIGludCB2YWx1ZVxuICAgICAgICBjYXNlICdpJzpcbiAgICAgICAgY2FzZSAnMWknOlxuICAgICAgICAgICAgZ2wudW5pZm9ybTFpKGxvY2F0aW9uLCB2YWx1ZSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAvLyBzaW5nbGUgZmxvYXQgdmFsdWVcbiAgICAgICAgY2FzZSAnZic6XG4gICAgICAgIGNhc2UgJzFmJzpcbiAgICAgICAgICAgIGdsLnVuaWZvcm0xZihsb2NhdGlvbiwgdmFsdWUpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLy8gRmxvYXQzMkFycmF5KDIpIG9yIEpTIEFycnJheVxuICAgICAgICBjYXNlICcyZic6XG4gICAgICAgICAgICBnbC51bmlmb3JtMmYobG9jYXRpb24sIHZhbHVlWzBdLCB2YWx1ZVsxXSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAvLyBGbG9hdDMyQXJyYXkoMykgb3IgSlMgQXJycmF5XG4gICAgICAgIGNhc2UgJzNmJzpcbiAgICAgICAgICAgIGdsLnVuaWZvcm0zZihsb2NhdGlvbiwgdmFsdWVbMF0sIHZhbHVlWzFdLCB2YWx1ZVsyXSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAvLyBGbG9hdDMyQXJyYXkoNCkgb3IgSlMgQXJycmF5XG4gICAgICAgIGNhc2UgJzRmJzpcbiAgICAgICAgICAgIGdsLnVuaWZvcm00Zihsb2NhdGlvbiwgdmFsdWVbMF0sIHZhbHVlWzFdLCB2YWx1ZVsyXSwgdmFsdWVbM10pO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLy8gYSAyRCBQb2ludCBvYmplY3RcbiAgICAgICAgY2FzZSAndjInOlxuICAgICAgICAgICAgZ2wudW5pZm9ybTJmKGxvY2F0aW9uLCB2YWx1ZS54LCB2YWx1ZS55KTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIC8vIGEgM0QgUG9pbnQgb2JqZWN0XG4gICAgICAgIGNhc2UgJ3YzJzpcbiAgICAgICAgICAgIGdsLnVuaWZvcm0zZihsb2NhdGlvbiwgdmFsdWUueCwgdmFsdWUueSwgdmFsdWUueik7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAvLyBhIDREIFBvaW50IG9iamVjdFxuICAgICAgICBjYXNlICd2NCc6XG4gICAgICAgICAgICBnbC51bmlmb3JtNGYobG9jYXRpb24sIHZhbHVlLngsIHZhbHVlLnksIHZhbHVlLnosIHZhbHVlLncpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLy8gSW50MzJBcnJheSBvciBKUyBBcnJheVxuICAgICAgICBjYXNlICcxaXYnOlxuICAgICAgICAgICAgZ2wudW5pZm9ybTFpdihsb2NhdGlvbiwgdmFsdWUpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLy8gSW50MzJBcnJheSBvciBKUyBBcnJheVxuICAgICAgICBjYXNlICcyaXYnOlxuICAgICAgICAgICAgZ2wudW5pZm9ybTJpdihsb2NhdGlvbiwgdmFsdWUpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLy8gSW50MzJBcnJheSBvciBKUyBBcnJheVxuICAgICAgICBjYXNlICczaXYnOlxuICAgICAgICAgICAgZ2wudW5pZm9ybTNpdihsb2NhdGlvbiwgdmFsdWUpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLy8gSW50MzJBcnJheSBvciBKUyBBcnJheVxuICAgICAgICBjYXNlICc0aXYnOlxuICAgICAgICAgICAgZ2wudW5pZm9ybTRpdihsb2NhdGlvbiwgdmFsdWUpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLy8gRmxvYXQzMkFycmF5IG9yIEpTIEFycmF5XG4gICAgICAgIGNhc2UgJzFmdic6XG4gICAgICAgICAgICBnbC51bmlmb3JtMWZ2KGxvY2F0aW9uLCB2YWx1ZSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAvLyBGbG9hdDMyQXJyYXkgb3IgSlMgQXJyYXlcbiAgICAgICAgY2FzZSAnMmZ2JzpcbiAgICAgICAgICAgIGdsLnVuaWZvcm0yZnYobG9jYXRpb24sIHZhbHVlKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIC8vIEZsb2F0MzJBcnJheSBvciBKUyBBcnJheVxuICAgICAgICBjYXNlICczZnYnOlxuICAgICAgICAgICAgZ2wudW5pZm9ybTNmdihsb2NhdGlvbiwgdmFsdWUpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLy8gRmxvYXQzMkFycmF5IG9yIEpTIEFycmF5XG4gICAgICAgIGNhc2UgJzRmdic6XG4gICAgICAgICAgICBnbC51bmlmb3JtNGZ2KGxvY2F0aW9uLCB2YWx1ZSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAvLyBGbG9hdDMyQXJyYXkgb3IgSlMgQXJyYXlcbiAgICAgICAgY2FzZSAnbTInOlxuICAgICAgICBjYXNlICdtYXQyJzpcbiAgICAgICAgY2FzZSAnTWF0cml4MmZ2JzpcbiAgICAgICAgICAgIGdsLnVuaWZvcm1NYXRyaXgyZnYobG9jYXRpb24sIHVuaWZvcm0udHJhbnNwb3NlLCB2YWx1ZSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAvLyBGbG9hdDMyQXJyYXkgb3IgSlMgQXJyYXlcbiAgICAgICAgY2FzZSAnbTMnOlxuICAgICAgICBjYXNlICdtYXQzJzpcbiAgICAgICAgY2FzZSAnTWF0cml4M2Z2JzpcblxuICAgICAgICAgICAgZ2wudW5pZm9ybU1hdHJpeDNmdihsb2NhdGlvbiwgdW5pZm9ybS50cmFuc3Bvc2UsIHZhbHVlKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIC8vIEZsb2F0MzJBcnJheSBvciBKUyBBcnJheVxuICAgICAgICBjYXNlICdtNCc6XG4gICAgICAgIGNhc2UgJ21hdDQnOlxuICAgICAgICBjYXNlICdNYXRyaXg0ZnYnOlxuICAgICAgICAgICAgZ2wudW5pZm9ybU1hdHJpeDRmdihsb2NhdGlvbiwgdW5pZm9ybS50cmFuc3Bvc2UsIHZhbHVlKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIC8vIGEgQ29sb3IgVmFsdWVcbiAgICAgICAgY2FzZSAnYyc6XG4gICAgICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJylcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB2YWx1ZSA9IHV0aWxzLmhleDJyZ2IodmFsdWUpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBnbC51bmlmb3JtM2YobG9jYXRpb24sIHZhbHVlWzBdLCB2YWx1ZVsxXSwgdmFsdWVbMl0pO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLy8gZmxhdCBhcnJheSBvZiBpbnRlZ2VycyAoSlMgb3IgdHlwZWQgYXJyYXkpXG4gICAgICAgIGNhc2UgJ2l2MSc6XG4gICAgICAgICAgICBnbC51bmlmb3JtMWl2KGxvY2F0aW9uLCB2YWx1ZSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAvLyBmbGF0IGFycmF5IG9mIGludGVnZXJzIHdpdGggMyB4IE4gc2l6ZSAoSlMgb3IgdHlwZWQgYXJyYXkpXG4gICAgICAgIGNhc2UgJ2l2JzpcbiAgICAgICAgICAgIGdsLnVuaWZvcm0zaXYobG9jYXRpb24sIHZhbHVlKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIC8vIGZsYXQgYXJyYXkgb2YgZmxvYXRzIChKUyBvciB0eXBlZCBhcnJheSlcbiAgICAgICAgY2FzZSAnZnYxJzpcbiAgICAgICAgICAgIGdsLnVuaWZvcm0xZnYobG9jYXRpb24sIHZhbHVlKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIC8vIGZsYXQgYXJyYXkgb2YgZmxvYXRzIHdpdGggMyB4IE4gc2l6ZSAoSlMgb3IgdHlwZWQgYXJyYXkpXG4gICAgICAgIGNhc2UgJ2Z2JzpcbiAgICAgICAgICAgIGdsLnVuaWZvcm0zZnYobG9jYXRpb24sIHZhbHVlKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIC8vIGFycmF5IG9mIDJEIFBvaW50IG9iamVjdHNcbiAgICAgICAgY2FzZSAndjJ2JzpcbiAgICAgICAgICAgIGlmICghdW5pZm9ybS5fYXJyYXkpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdW5pZm9ybS5fYXJyYXkgPSBuZXcgRmxvYXQzMkFycmF5KDIgKiB2YWx1ZS5sZW5ndGgpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBmb3IgKGkgPSAwLCBpbCA9IHZhbHVlLmxlbmd0aDsgaSA8IGlsOyArK2kpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdW5pZm9ybS5fYXJyYXlbaSAqIDJdICAgICAgID0gdmFsdWVbaV0ueDtcbiAgICAgICAgICAgICAgICB1bmlmb3JtLl9hcnJheVtpICogMiArIDFdICAgPSB2YWx1ZVtpXS55O1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBnbC51bmlmb3JtMmZ2KGxvY2F0aW9uLCB1bmlmb3JtLl9hcnJheSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAvLyBhcnJheSBvZiAzRCBQb2ludCBvYmplY3RzXG4gICAgICAgIGNhc2UgJ3Yzdic6XG4gICAgICAgICAgICBpZiAoIXVuaWZvcm0uX2FycmF5KVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHVuaWZvcm0uX2FycmF5ID0gbmV3IEZsb2F0MzJBcnJheSgzICogdmFsdWUubGVuZ3RoKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZm9yIChpID0gMCwgaWwgPSB2YWx1ZS5sZW5ndGg7IGkgPCBpbDsgKytpKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHVuaWZvcm0uX2FycmF5W2kgKiAzXSAgICAgICA9IHZhbHVlW2ldLng7XG4gICAgICAgICAgICAgICAgdW5pZm9ybS5fYXJyYXlbaSAqIDMgKyAxXSAgID0gdmFsdWVbaV0ueTtcbiAgICAgICAgICAgICAgICB1bmlmb3JtLl9hcnJheVtpICogMyArIDJdICAgPSB2YWx1ZVtpXS56O1xuXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGdsLnVuaWZvcm0zZnYobG9jYXRpb24sIHVuaWZvcm0uX2FycmF5KTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIC8vIGFycmF5IG9mIDREIFBvaW50IG9iamVjdHNcbiAgICAgICAgY2FzZSAndjR2JzpcbiAgICAgICAgICAgIGlmICghdW5pZm9ybS5fYXJyYXkpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdW5pZm9ybS5fYXJyYXkgPSBuZXcgRmxvYXQzMkFycmF5KDQgKiB2YWx1ZS5sZW5ndGgpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBmb3IgKGkgPSAwLCBpbCA9IHZhbHVlLmxlbmd0aDsgaSA8IGlsOyArK2kpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdW5pZm9ybS5fYXJyYXlbaSAqIDRdICAgICAgID0gdmFsdWVbaV0ueDtcbiAgICAgICAgICAgICAgICB1bmlmb3JtLl9hcnJheVtpICogNCArIDFdICAgPSB2YWx1ZVtpXS55O1xuICAgICAgICAgICAgICAgIHVuaWZvcm0uX2FycmF5W2kgKiA0ICsgMl0gICA9IHZhbHVlW2ldLno7XG4gICAgICAgICAgICAgICAgdW5pZm9ybS5fYXJyYXlbaSAqIDQgKyAzXSAgID0gdmFsdWVbaV0udztcblxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBnbC51bmlmb3JtNGZ2KGxvY2F0aW9uLCB1bmlmb3JtLl9hcnJheSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAvLyBQSVhJLlRleHR1cmVcbiAgICAgICAgY2FzZSAndCc6XG4gICAgICAgIGNhc2UgJ3NhbXBsZXIyRCc6XG5cbiAgICAgICAgICAgIGlmICghdW5pZm9ybS52YWx1ZSB8fCAhdW5pZm9ybS52YWx1ZS5iYXNlVGV4dHVyZS5oYXNMb2FkZWQpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIGFjdGl2YXRlIHRoaXMgdGV4dHVyZVxuICAgICAgICAgICAgZ2wuYWN0aXZlVGV4dHVyZShnbFsnVEVYVFVSRScgKyB0aGlzLnRleHR1cmVDb3VudF0pO1xuXG4gICAgICAgICAgICB2YXIgdGV4dHVyZSA9IHVuaWZvcm0udmFsdWUuYmFzZVRleHR1cmUuX2dsVGV4dHVyZXNbZ2wuaWRdO1xuXG4gICAgICAgICAgICBpZiAoIXRleHR1cmUpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdGhpcy5pbml0U2FtcGxlcjJEKHVuaWZvcm0pO1xuXG4gICAgICAgICAgICAgICAgLy8gc2V0IHRoZSB0ZXh0dXIgdG8gdGhlIG5ld2x5IGNyZWF0ZWQgb25lLi5cbiAgICAgICAgICAgICAgICB0ZXh0dXJlID0gdW5pZm9ybS52YWx1ZS5iYXNlVGV4dHVyZS5fZ2xUZXh0dXJlc1tnbC5pZF07XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIGJpbmQgdGhlIHRleHR1cmVcbiAgICAgICAgICAgIGdsLmJpbmRUZXh0dXJlKGdsLlRFWFRVUkVfMkQsIHRleHR1cmUpO1xuXG4gICAgICAgICAgICAvLyBzZXQgdW5pZm9ybSB0byB0ZXh0dXJlIGluZGV4XG4gICAgICAgICAgICBnbC51bmlmb3JtMWkodW5pZm9ybS5fbG9jYXRpb24sIHRoaXMudGV4dHVyZUNvdW50KTtcblxuICAgICAgICAgICAgLy8gaW5jcmVtZW50IG5leHQgdGV4dHVyZSBpZFxuICAgICAgICAgICAgdGhpcy50ZXh0dXJlQ291bnQrKztcblxuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignUGl4aS5qcyBTaGFkZXIgV2FybmluZzogVW5rbm93biB1bmlmb3JtIHR5cGU6ICcgKyB1bmlmb3JtLnR5cGUpO1xuICAgIH1cbn07XG5cbi8qKlxuICogVXBkYXRlcyB0aGUgc2hhZGVyIHVuaWZvcm0gdmFsdWVzLlxuICpcbiAqL1xuU2hhZGVyLnByb3RvdHlwZS5zeW5jVW5pZm9ybXMgPSBmdW5jdGlvbiAoKVxue1xuICAgIHRoaXMudGV4dHVyZUNvdW50ID0gMTtcblxuICAgIGZvciAodmFyIGtleSBpbiB0aGlzLnVuaWZvcm1zKVxuICAgIHtcbiAgICAgICAgdGhpcy5zeW5jVW5pZm9ybSh0aGlzLnVuaWZvcm1zW2tleV0pO1xuICAgIH1cbn07XG5cblxuLyoqXG4gKiBJbml0aWFsaXNlcyBhIFNhbXBsZXIyRCB1bmlmb3JtICh3aGljaCBtYXkgb25seSBiZSBhdmFpbGFibGUgbGF0ZXIgb24gYWZ0ZXIgaW5pdFVuaWZvcm1zIG9uY2UgdGhlIHRleHR1cmUgaGFzIGxvYWRlZClcbiAqXG4gKi9cblNoYWRlci5wcm90b3R5cGUuaW5pdFNhbXBsZXIyRCA9IGZ1bmN0aW9uICh1bmlmb3JtKVxue1xuICAgIHZhciBnbCA9IHRoaXMuZ2w7XG5cbiAgICB2YXIgdGV4dHVyZSA9IHVuaWZvcm0udmFsdWUuYmFzZVRleHR1cmU7XG5cbiAgICBpZighdGV4dHVyZS5oYXNMb2FkZWQpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG5cblxuICAgIGlmICh1bmlmb3JtLnRleHR1cmVEYXRhKVxuICAgIHtcblxuICAgICAgICAvL1RPRE8gbW92ZSB0aGlzLi4uXG4gICAgICAgIHZhciBkYXRhID0gdW5pZm9ybS50ZXh0dXJlRGF0YTtcblxuICAgICAgICB0ZXh0dXJlLl9nbFRleHR1cmVzW2dsLmlkXSA9IGdsLmNyZWF0ZVRleHR1cmUoKTtcblxuICAgICAgICBnbC5iaW5kVGV4dHVyZShnbC5URVhUVVJFXzJELCB0ZXh0dXJlLl9nbFRleHR1cmVzW2dsLmlkXSk7XG5cbiAgICAgICAgZ2wucGl4ZWxTdG9yZWkoZ2wuVU5QQUNLX1BSRU1VTFRJUExZX0FMUEhBX1dFQkdMLCB0ZXh0dXJlLnByZW11bHRpcGxpZWRBbHBoYSk7XG4gICAgICAgIC8vIEdMVGV4dHVyZSA9IG1hZyBsaW5lYXIsIG1pbiBsaW5lYXJfbWlwbWFwX2xpbmVhciwgd3JhcCByZXBlYXQgKyBnbC5nZW5lcmF0ZU1pcG1hcChnbC5URVhUVVJFXzJEKTtcbiAgICAgICAgLy8gR0xUZXh0dXJlTGluZWFyID0gbWFnL21pbiBsaW5lYXIsIHdyYXAgY2xhbXBcbiAgICAgICAgLy8gR0xUZXh0dXJlTmVhcmVzdFJlcGVhdCA9IG1hZy9taW4gTkVBUkVTVCwgd3JhcCByZXBlYXRcbiAgICAgICAgLy8gR0xUZXh0dXJlTmVhcmVzdCA9IG1hZy9taW4gbmVhcmVzdCwgd3JhcCBjbGFtcFxuICAgICAgICAvLyBBdWRpb1RleHR1cmUgPSB3aGF0ZXZlciArIGx1bWluYW5jZSArIHdpZHRoIDUxMiwgaGVpZ2h0IDIsIGJvcmRlciAwXG4gICAgICAgIC8vIEtleVRleHR1cmUgPSB3aGF0ZXZlciArIGx1bWluYW5jZSArIHdpZHRoIDI1NiwgaGVpZ2h0IDIsIGJvcmRlciAwXG5cbiAgICAgICAgLy8gIG1hZ0ZpbHRlciBjYW4gYmU6IGdsLkxJTkVBUiwgZ2wuTElORUFSX01JUE1BUF9MSU5FQVIgb3IgZ2wuTkVBUkVTVFxuICAgICAgICAvLyAgd3JhcFMvVCBjYW4gYmU6IGdsLkNMQU1QX1RPX0VER0Ugb3IgZ2wuUkVQRUFUXG5cbiAgICAgICAgZ2wudGV4SW1hZ2UyRChnbC5URVhUVVJFXzJELCAwLCBkYXRhLmx1bWluYW5jZSA/IGdsLkxVTUlOQU5DRSA6IGdsLlJHQkEsIGdsLlJHQkEsIGdsLlVOU0lHTkVEX0JZVEUsIHRleHR1cmUuc291cmNlKTtcblxuICAgICAgICBnbC50ZXhQYXJhbWV0ZXJpKGdsLlRFWFRVUkVfMkQsIGdsLlRFWFRVUkVfTUFHX0ZJTFRFUiwgZGF0YS5tYWdGaWx0ZXIgPyBkYXRhLm1hZ0ZpbHRlciA6IGdsLkxJTkVBUiApO1xuICAgICAgICBnbC50ZXhQYXJhbWV0ZXJpKGdsLlRFWFRVUkVfMkQsIGdsLlRFWFRVUkVfTUlOX0ZJTFRFUiwgZGF0YS53cmFwUyA/IGRhdGEud3JhcFMgOiBnbC5DTEFNUF9UT19FREdFICk7XG5cbiAgICAgICAgZ2wudGV4UGFyYW1ldGVyaShnbC5URVhUVVJFXzJELCBnbC5URVhUVVJFX1dSQVBfVCwgZGF0YS53cmFwUyA/IGRhdGEud3JhcFMgOiBnbC5DTEFNUF9UT19FREdFKTtcbiAgICAgICAgZ2wudGV4UGFyYW1ldGVyaShnbC5URVhUVVJFXzJELCBnbC5URVhUVVJFX1dSQVBfUywgZGF0YS53cmFwVCA/IGRhdGEud3JhcFQgOiBnbC5DTEFNUF9UT19FREdFKTtcbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgdGhpcy5zaGFkZXJNYW5hZ2VyLnJlbmRlcmVyLnVwZGF0ZVRleHR1cmUodGV4dHVyZSk7XG4gICAgfVxufTtcblxuLyoqXG4gKiBEZXN0cm95cyB0aGUgc2hhZGVyLlxuICpcbiAqL1xuU2hhZGVyLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLmdsLmRlbGV0ZVByb2dyYW0odGhpcy5wcm9ncmFtKTtcblxuICAgIHRoaXMuZ2wgPSBudWxsO1xuICAgIHRoaXMudW5pZm9ybXMgPSBudWxsO1xuICAgIHRoaXMuYXR0cmlidXRlcyA9IG51bGw7XG5cbiAgICB0aGlzLnZlcnRleFNyYyA9IG51bGw7XG4gICAgdGhpcy5mcmFnbWVudFNyYyA9IG51bGw7XG59O1xuXG5TaGFkZXIucHJvdG90eXBlLl9nbENvbXBpbGUgPSBmdW5jdGlvbiAodHlwZSwgc3JjKVxue1xuICAgIHZhciBzaGFkZXIgPSB0aGlzLmdsLmNyZWF0ZVNoYWRlcih0eXBlKTtcblxuICAgIHRoaXMuZ2wuc2hhZGVyU291cmNlKHNoYWRlciwgc3JjKTtcbiAgICB0aGlzLmdsLmNvbXBpbGVTaGFkZXIoc2hhZGVyKTtcblxuICAgIGlmICghdGhpcy5nbC5nZXRTaGFkZXJQYXJhbWV0ZXIoc2hhZGVyLCB0aGlzLmdsLkNPTVBJTEVfU1RBVFVTKSlcbiAgICB7XG4gICAgICAgIGNvbnNvbGUubG9nKHRoaXMuZ2wuZ2V0U2hhZGVySW5mb0xvZyhzaGFkZXIpKTtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgcmV0dXJuIHNoYWRlcjtcbn07XG4iLCJ2YXIgU2hhZGVyID0gcmVxdWlyZSgnLi9TaGFkZXInKTtcblxuLyoqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAZXh0ZW5kcyBQSVhJLlNoYWRlclxuICogQHBhcmFtIHNoYWRlck1hbmFnZXIge1BJWEkuU2hhZGVyTWFuYWdlcn0gVGhlIHdlYmdsIHNoYWRlciBtYW5hZ2VyIHRoaXMgc2hhZGVyIHdvcmtzIGZvci5cbiAqIEBwYXJhbSBbdmVydGV4U3JjXSB7c3RyaW5nfSBUaGUgc291cmNlIG9mIHRoZSB2ZXJ0ZXggc2hhZGVyLlxuICogQHBhcmFtIFtmcmFnbWVudFNyY10ge3N0cmluZ30gVGhlIHNvdXJjZSBvZiB0aGUgZnJhZ21lbnQgc2hhZGVyLlxuICogQHBhcmFtIFtjdXN0b21Vbmlmb3Jtc10ge29iamVjdH0gQ3VzdG9tIHVuaWZvcm1zIHRvIHVzZSB0byBhdWdtZW50IHRoZSBidWlsdC1pbiBvbmVzLlxuICogQHBhcmFtIFtmcmFnbWVudFNyY10ge3N0cmluZ30gVGhlIHNvdXJjZSBvZiB0aGUgZnJhZ21lbnQgc2hhZGVyLlxuICovXG5mdW5jdGlvbiBUZXh0dXJlU2hhZGVyKHNoYWRlck1hbmFnZXIsIHZlcnRleFNyYywgZnJhZ21lbnRTcmMsIGN1c3RvbVVuaWZvcm1zLCBjdXN0b21BdHRyaWJ1dGVzKVxue1xuICAgIHZhciB1bmlmb3JtcyA9IHtcblxuICAgICAgICB1U2FtcGxlcjogICAgICAgICAgIHsgdHlwZTogJ3NhbXBsZXIyRCcsIHZhbHVlOiAwIH0sXG4gICAgICAgIHByb2plY3Rpb25NYXRyaXg6ICAgeyB0eXBlOiAnbWF0MycsIHZhbHVlOiBuZXcgRmxvYXQzMkFycmF5KFsxLCAwLCAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgMSwgMCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsIDAsIDFdKSB9XG4gICAgfTtcblxuICAgIGlmIChjdXN0b21Vbmlmb3JtcylcbiAgICB7XG4gICAgICAgIGZvciAodmFyIHUgaW4gY3VzdG9tVW5pZm9ybXMpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHVuaWZvcm1zW3VdID0gY3VzdG9tVW5pZm9ybXNbdV07XG4gICAgICAgIH1cbiAgICB9XG5cblxuICAgIHZhciBhdHRyaWJ1dGVzID0ge1xuICAgICAgICBhVmVydGV4UG9zaXRpb246ICAgIDAsXG4gICAgICAgIGFUZXh0dXJlQ29vcmQ6ICAgICAgMCxcbiAgICAgICAgYUNvbG9yOiAgICAgICAgICAgICAwXG4gICAgfTtcblxuICAgIGlmIChjdXN0b21BdHRyaWJ1dGVzKVxuICAgIHtcbiAgICAgICAgZm9yICh2YXIgYSBpbiBjdXN0b21BdHRyaWJ1dGVzKVxuICAgICAgICB7XG4gICAgICAgICAgICBhdHRyaWJ1dGVzW2FdID0gY3VzdG9tQXR0cmlidXRlc1thXTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoZSB2ZXJ0ZXggc2hhZGVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7c3RyaW5nfVxuICAgICAqL1xuICAgIHZlcnRleFNyYyA9IHZlcnRleFNyYyB8fCBUZXh0dXJlU2hhZGVyLmRlZmF1bHRWZXJ0ZXhTcmM7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgZnJhZ21lbnQgc2hhZGVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7c3RyaW5nfVxuICAgICAqL1xuICAgIGZyYWdtZW50U3JjID0gZnJhZ21lbnRTcmMgfHwgVGV4dHVyZVNoYWRlci5kZWZhdWx0RnJhZ21lbnRTcmM7XG5cbiAgICBTaGFkZXIuY2FsbCh0aGlzLCBzaGFkZXJNYW5hZ2VyLCB2ZXJ0ZXhTcmMsIGZyYWdtZW50U3JjLCB1bmlmb3JtcywgYXR0cmlidXRlcyk7XG59XG5cbi8vIGNvbnN0cnVjdG9yXG5UZXh0dXJlU2hhZGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoU2hhZGVyLnByb3RvdHlwZSk7XG5UZXh0dXJlU2hhZGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFRleHR1cmVTaGFkZXI7XG5tb2R1bGUuZXhwb3J0cyA9IFRleHR1cmVTaGFkZXI7XG5cbi8qKlxuICogVGhlIGRlZmF1bHQgdmVydGV4IHNoYWRlciBzb3VyY2VcbiAqXG4gKiBAc3RhdGljXG4gKiBAY29uc3RhbnRcbiAqL1xuVGV4dHVyZVNoYWRlci5kZWZhdWx0VmVydGV4U3JjID0gW1xuICAgICdwcmVjaXNpb24gbG93cCBmbG9hdDsnLFxuICAgICdhdHRyaWJ1dGUgdmVjMiBhVmVydGV4UG9zaXRpb247JyxcbiAgICAnYXR0cmlidXRlIHZlYzIgYVRleHR1cmVDb29yZDsnLFxuICAgICdhdHRyaWJ1dGUgdmVjNCBhQ29sb3I7JyxcblxuICAgICd1bmlmb3JtIG1hdDMgcHJvamVjdGlvbk1hdHJpeDsnLFxuXG4gICAgJ3ZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkOycsXG4gICAgJ3ZhcnlpbmcgdmVjNCB2Q29sb3I7JyxcblxuICAgICd2b2lkIG1haW4odm9pZCl7JyxcbiAgICAnICAgZ2xfUG9zaXRpb24gPSB2ZWM0KChwcm9qZWN0aW9uTWF0cml4ICogdmVjMyhhVmVydGV4UG9zaXRpb24sIDEuMCkpLnh5LCAwLjAsIDEuMCk7JyxcbiAgICAnICAgdlRleHR1cmVDb29yZCA9IGFUZXh0dXJlQ29vcmQ7JyxcbiAgICAnICAgdkNvbG9yID0gdmVjNChhQ29sb3IucmdiICogYUNvbG9yLmEsIGFDb2xvci5hKTsnLFxuICAgICd9J1xuXS5qb2luKCdcXG4nKTtcblxuLyoqXG4gKiBUaGUgZGVmYXVsdCBmcmFnbWVudCBzaGFkZXIgc291cmNlXG4gKlxuICogQHN0YXRpY1xuICogQGNvbnN0YW50XG4gKi9cblRleHR1cmVTaGFkZXIuZGVmYXVsdEZyYWdtZW50U3JjID0gW1xuICAgICdwcmVjaXNpb24gbG93cCBmbG9hdDsnLFxuXG4gICAgJ3ZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkOycsXG4gICAgJ3ZhcnlpbmcgdmVjNCB2Q29sb3I7JyxcblxuICAgICd1bmlmb3JtIHNhbXBsZXIyRCB1U2FtcGxlcjsnLFxuXG4gICAgJ3ZvaWQgbWFpbih2b2lkKXsnLFxuICAgICcgICBnbF9GcmFnQ29sb3IgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZUZXh0dXJlQ29vcmQpICogdkNvbG9yIDsnLFxuICAgICd9J1xuXS5qb2luKCdcXG4nKTtcbiIsInZhciBTaGFkZXIgPSByZXF1aXJlKCdwaXhpLWdsLWNvcmUnKS5HTFNoYWRlcjtcblxuLyoqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAZXh0ZW5kcyBQSVhJLlNoYWRlclxuICogQHBhcmFtIHNoYWRlck1hbmFnZXIge1BJWEkuU2hhZGVyTWFuYWdlcn0gVGhlIHdlYmdsIHNoYWRlciBtYW5hZ2VyIHRoaXMgc2hhZGVyIHdvcmtzIGZvci5cbiAqIEBwYXJhbSBbdmVydGV4U3JjXSB7c3RyaW5nfSBUaGUgc291cmNlIG9mIHRoZSB2ZXJ0ZXggc2hhZGVyLlxuICogQHBhcmFtIFtmcmFnbWVudFNyY10ge3N0cmluZ30gVGhlIHNvdXJjZSBvZiB0aGUgZnJhZ21lbnQgc2hhZGVyLlxuICogQHBhcmFtIFtjdXN0b21Vbmlmb3Jtc10ge29iamVjdH0gQ3VzdG9tIHVuaWZvcm1zIHRvIHVzZSB0byBhdWdtZW50IHRoZSBidWlsdC1pbiBvbmVzLlxuICogQHBhcmFtIFtmcmFnbWVudFNyY10ge3N0cmluZ30gVGhlIHNvdXJjZSBvZiB0aGUgZnJhZ21lbnQgc2hhZGVyLlxuICovXG5mdW5jdGlvbiBUZXh0dXJlU2hhZGVyKGdsKVxue1xuICAgIC8qKlxuICAgICAqIFRoZSB2ZXJ0ZXggc2hhZGVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7c3RyaW5nfVxuICAgICAqL1xuICAgIHZlcnRleFNyYyA9IFRleHR1cmVTaGFkZXIuZGVmYXVsdFZlcnRleFNyYztcblxuICAgIC8qKlxuICAgICAqIFRoZSBmcmFnbWVudCBzaGFkZXIuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtzdHJpbmd9XG4gICAgICovXG4gICAgZnJhZ21lbnRTcmMgPSBUZXh0dXJlU2hhZGVyLmRlZmF1bHRGcmFnbWVudFNyYztcblxuICAgIFNoYWRlci5jYWxsKHRoaXMsIGdsLCB2ZXJ0ZXhTcmMsIGZyYWdtZW50U3JjKTsvLywgdW5pZm9ybXMsIGF0dHJpYnV0ZXMpO1xuXG59XG5cbi8vIGNvbnN0cnVjdG9yXG5UZXh0dXJlU2hhZGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoU2hhZGVyLnByb3RvdHlwZSk7XG5UZXh0dXJlU2hhZGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFRleHR1cmVTaGFkZXI7XG5tb2R1bGUuZXhwb3J0cyA9IFRleHR1cmVTaGFkZXI7XG5cbi8qKlxuICogVGhlIGRlZmF1bHQgdmVydGV4IHNoYWRlciBzb3VyY2VcbiAqXG4gKiBAc3RhdGljXG4gKiBAY29uc3RhbnRcbiAqL1xuVGV4dHVyZVNoYWRlci5kZWZhdWx0VmVydGV4U3JjID0gW1xuICAgICdwcmVjaXNpb24gbG93cCBmbG9hdDsnLFxuICAgICdhdHRyaWJ1dGUgdmVjMiBhVmVydGV4UG9zaXRpb247JyxcbiAgICAnYXR0cmlidXRlIHZlYzIgYVRleHR1cmVDb29yZDsnLFxuICAgICdhdHRyaWJ1dGUgdmVjNCBhQ29sb3I7JyxcblxuICAgICd1bmlmb3JtIG1hdDMgcHJvamVjdGlvbk1hdHJpeDsnLFxuXG4gICAgJ3ZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkOycsXG4gICAgJ3ZhcnlpbmcgdmVjNCB2Q29sb3I7JyxcblxuICAgICd2b2lkIG1haW4odm9pZCl7JyxcbiAgICAnICAgZ2xfUG9zaXRpb24gPSB2ZWM0KChwcm9qZWN0aW9uTWF0cml4ICogdmVjMyhhVmVydGV4UG9zaXRpb24sIDEuMCkpLnh5LCAwLjAsIDEuMCk7JyxcbiAgICAnICAgdlRleHR1cmVDb29yZCA9IGFUZXh0dXJlQ29vcmQ7JyxcbiAgICAnICAgdkNvbG9yID0gdmVjNChhQ29sb3IucmdiICogYUNvbG9yLmEsIGFDb2xvci5hKTsnLFxuICAgICd9J1xuXS5qb2luKCdcXG4nKTtcblxuLyoqXG4gKiBUaGUgZGVmYXVsdCBmcmFnbWVudCBzaGFkZXIgc291cmNlXG4gKlxuICogQHN0YXRpY1xuICogQGNvbnN0YW50XG4gKi9cblRleHR1cmVTaGFkZXIuZGVmYXVsdEZyYWdtZW50U3JjID0gW1xuICAgICdwcmVjaXNpb24gbG93cCBmbG9hdDsnLFxuXG4gICAgJ3ZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkOycsXG4gICAgJ3ZhcnlpbmcgdmVjNCB2Q29sb3I7JyxcblxuICAgICd1bmlmb3JtIHNhbXBsZXIyRCB1U2FtcGxlcjsnLFxuXG4gICAgJ3ZvaWQgbWFpbih2b2lkKXsnLFxuICAgICcgICBnbF9GcmFnQ29sb3IgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZUZXh0dXJlQ29vcmQpICogdkNvbG9yIDsnLFxuICAgICd9J1xuXS5qb2luKCdcXG4nKTtcbiIsInZhciBXZWJHTE1hbmFnZXIgPSByZXF1aXJlKCcuLi9tYW5hZ2Vycy9XZWJHTE1hbmFnZXInKTtcblxuLyoqXG4gKiBCYXNlIGZvciBhIGNvbW1vbiBvYmplY3QgcmVuZGVyZXIgdGhhdCBjYW4gYmUgdXNlZCBhcyBhIHN5c3RlbSByZW5kZXJlciBwbHVnaW4uXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLldlYkdMTWFuYWdlclxuICogQG1lbWJlcm9mIFBJWElcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5XZWJHTFJlbmRlcmVyfSBUaGUgcmVuZGVyZXIgdGhpcyBvYmplY3QgcmVuZGVyZXIgd29ya3MgZm9yLlxuICovXG5mdW5jdGlvbiBPYmplY3RSZW5kZXJlcihyZW5kZXJlcilcbntcbiAgICBXZWJHTE1hbmFnZXIuY2FsbCh0aGlzLCByZW5kZXJlcik7XG59XG5cblxuT2JqZWN0UmVuZGVyZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShXZWJHTE1hbmFnZXIucHJvdG90eXBlKTtcbk9iamVjdFJlbmRlcmVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IE9iamVjdFJlbmRlcmVyO1xubW9kdWxlLmV4cG9ydHMgPSBPYmplY3RSZW5kZXJlcjtcblxuLyoqXG4gKiBTdGFydHMgdGhlIHJlbmRlcmVyIGFuZCBzZXRzIHRoZSBzaGFkZXJcbiAqXG4gKi9cbk9iamVjdFJlbmRlcmVyLnByb3RvdHlwZS5zdGFydCA9IGZ1bmN0aW9uICgpXG57XG4gICAgLy8gc2V0IHRoZSBzaGFkZXIuLlxufTtcblxuLyoqXG4gKiBTdG9wcyB0aGUgcmVuZGVyZXJcbiAqXG4gKi9cbk9iamVjdFJlbmRlcmVyLnByb3RvdHlwZS5zdG9wID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLmZsdXNoKCk7XG59O1xuXG4vKipcbiAqIGZsdXNoZXNcbiAqXG4gKi9cbk9iamVjdFJlbmRlcmVyLnByb3RvdHlwZS5mbHVzaCA9IGZ1bmN0aW9uICgpXG57XG4gICAgLy8gZmx1c2ghXG59O1xuXG4vKipcbiAqIFJlbmRlcnMgYW4gb2JqZWN0XG4gKlxuICogQHBhcmFtIG9iamVjdCB7UElYSS5EaXNwbGF5T2JqZWN0fSBUaGUgb2JqZWN0IHRvIHJlbmRlci5cbiAqL1xuT2JqZWN0UmVuZGVyZXIucHJvdG90eXBlLnJlbmRlciA9IGZ1bmN0aW9uIChvYmplY3QpIC8vIGpzaGludCB1bnVzZWQ6ZmFsc2VcbntcbiAgICAvLyByZW5kZXIgdGhlIG9iamVjdFxufTtcbiIsIi8qKlxuICogSGVscGVyIGNsYXNzIHRvIGNyZWF0ZSBhIHF1YWRcbiAqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gZ2wge1dlYkdMUmVuZGVyaW5nQ29udGV4dH0gVGhlIGdsIGNvbnRleHQgZm9yIHRoaXMgcXVhZCB0byB1c2UuXG4gKi9cbmZ1bmN0aW9uIFF1YWQoZ2wpXG57XG4gICAgLypcbiAgICAgKiB0aGUgY3VycmVudCBXZWJHTCBkcmF3aW5nIGNvbnRleHRcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1dlYkdMUmVuZGVyaW5nQ29udGV4dH1cbiAgICAgKi9cbiAgICB0aGlzLmdsID0gZ2w7XG5cbi8vICAgIHRoaXMudGV4dHVyZXMgPSBuZXcgVGV4dHVyZVV2cygpO1xuXG4gICAgLyoqXG4gICAgICogQW4gYXJyYXkgb2YgdmVydGljZXNcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge0Zsb2F0MzJBcnJheX1cbiAgICAgKi9cbiAgICB0aGlzLnZlcnRpY2VzID0gbmV3IEZsb2F0MzJBcnJheShbXG4gICAgICAgIDAsMCxcbiAgICAgICAgMjAwLDAsXG4gICAgICAgIDIwMCwyMDAsXG4gICAgICAgIDAsMjAwXG4gICAgXSk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgVXZzIG9mIHRoZSBxdWFkXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtGbG9hdDMyQXJyYXl9XG4gICAgICovXG4gICAgdGhpcy51dnMgPSBuZXcgRmxvYXQzMkFycmF5KFtcbiAgICAgICAgMCwwLFxuICAgICAgICAxLDAsXG4gICAgICAgIDEsMSxcbiAgICAgICAgMCwxXG4gICAgXSk7XG5cbi8vICAgIHZhciB3aGl0ZSA9ICgweEZGRkZGRiA+PiAxNikgKyAoMHhGRkZGRkYgJiAweGZmMDApICsgKCgweEZGRkZGRiAmIDB4ZmYpIDw8IDE2KSArICgxICogMjU1IDw8IDI0KTtcbiAgICAvL1RPRE8gY29udmVydCB0aGlzIHRvIGEgMzIgdW5zaWduZWQgaW50IGFycmF5XG4gICAgLyoqXG4gICAgICogVGhlIGNvbG9yIGNvbXBvbmVudHMgb2YgdGhlIHRyaWFuZ2xlc1xuICAgICAqXG4gICAgICogQG1lbWJlciB7RmxvYXQzMkFycmF5fVxuICAgICAqL1xuICAgIHRoaXMuY29sb3JzID0gbmV3IEZsb2F0MzJBcnJheShbXG4gICAgICAgIDEsMSwxLDEsXG4gICAgICAgIDEsMSwxLDEsXG4gICAgICAgIDEsMSwxLDEsXG4gICAgICAgIDEsMSwxLDFcbiAgICBdKTtcblxuICAgIC8qXG4gICAgICogQG1lbWJlciB7VWludDE2QXJyYXl9IEFuIGFycmF5IGNvbnRhaW5pbmcgdGhlIGluZGljZXMgb2YgdGhlIHZlcnRpY2VzXG4gICAgICovXG4gICAgdGhpcy5pbmRpY2VzID0gbmV3IFVpbnQxNkFycmF5KFtcbiAgICAgICAgMCwgMSwgMiwgMCwgMywgMlxuICAgIF0pO1xuXG4gICAgLypcbiAgICAgKiBAbWVtYmVyIHtXZWJHTEJ1ZmZlcn0gVGhlIHZlcnRleCBidWZmZXJcbiAgICAgKi9cbiAgICB0aGlzLnZlcnRleEJ1ZmZlciA9IGdsLmNyZWF0ZUJ1ZmZlcigpO1xuXG4gICAgLypcbiAgICAgKiBAbWVtYmVyIHtXZWJHTEJ1ZmZlcn0gVGhlIGluZGV4IGJ1ZmZlclxuICAgICAqL1xuICAgIHRoaXMuaW5kZXhCdWZmZXIgPSBnbC5jcmVhdGVCdWZmZXIoKTtcblxuICAgIGdsLmJpbmRCdWZmZXIoZ2wuQVJSQVlfQlVGRkVSLCB0aGlzLnZlcnRleEJ1ZmZlcik7XG4gICAgZ2wuYnVmZmVyRGF0YShnbC5BUlJBWV9CVUZGRVIsICg4ICsgOCArIDE2KSAqIDQsIGdsLkRZTkFNSUNfRFJBVyk7XG5cbiAgICBnbC5iaW5kQnVmZmVyKGdsLkVMRU1FTlRfQVJSQVlfQlVGRkVSLCB0aGlzLmluZGV4QnVmZmVyKTtcbiAgICBnbC5idWZmZXJEYXRhKGdsLkVMRU1FTlRfQVJSQVlfQlVGRkVSLCB0aGlzLmluZGljZXMsIGdsLlNUQVRJQ19EUkFXKTtcblxuICAgIHRoaXMudXBsb2FkKCk7XG59XG5cblF1YWQucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gUXVhZDtcblxuLyoqXG4gKiBNYXBzIHR3byBSZWN0YW5nbGUgdG8gdGhlIHF1YWRcbiAqIEBwYXJhbSByZWN0IHtQSVhJLlJlY3RhbmdsZX0gdGhlIGZpcnN0IHJlY3RhbmdsZVxuICogQHBhcmFtIHJlY3QyIHtQSVhJLlJlY3RhbmdsZX0gdGhlIHNlY29uZCByZWN0YW5nbGVcbiAqL1xuUXVhZC5wcm90b3R5cGUubWFwID0gZnVuY3Rpb24ocmVjdCwgcmVjdDIpXG57XG4gICAgdmFyIHggPSAwOyAvL3JlY3QyLnggLyByZWN0LndpZHRoO1xuICAgIHZhciB5ID0gMDsgLy9yZWN0Mi55IC8gcmVjdC5oZWlnaHQ7XG5cbiAgICB0aGlzLnV2c1swXSA9IHg7XG4gICAgdGhpcy51dnNbMV0gPSB5O1xuXG4gICAgdGhpcy51dnNbMl0gPSB4ICsgcmVjdDIud2lkdGggLyByZWN0LndpZHRoO1xuICAgIHRoaXMudXZzWzNdID0geTtcblxuICAgIHRoaXMudXZzWzRdID0geCArIHJlY3QyLndpZHRoIC8gcmVjdC53aWR0aDtcbiAgICB0aGlzLnV2c1s1XSA9IHkgKyByZWN0Mi5oZWlnaHQgLyByZWN0LmhlaWdodDtcblxuICAgIHRoaXMudXZzWzZdID0geDtcbiAgICB0aGlzLnV2c1s3XSA9IHkgKyByZWN0Mi5oZWlnaHQgLyByZWN0LmhlaWdodDtcblxuICAgIC8vLyAtLS0tLVxuICAgIHggPSByZWN0Mi54O1xuICAgIHkgPSByZWN0Mi55O1xuXG4gICAgdGhpcy52ZXJ0aWNlc1swXSA9IHg7XG4gICAgdGhpcy52ZXJ0aWNlc1sxXSA9IHk7XG5cbiAgICB0aGlzLnZlcnRpY2VzWzJdID0geCArIHJlY3QyLndpZHRoO1xuICAgIHRoaXMudmVydGljZXNbM10gPSB5O1xuXG4gICAgdGhpcy52ZXJ0aWNlc1s0XSA9IHggKyByZWN0Mi53aWR0aDtcbiAgICB0aGlzLnZlcnRpY2VzWzVdID0geSArIHJlY3QyLmhlaWdodDtcblxuICAgIHRoaXMudmVydGljZXNbNl0gPSB4O1xuICAgIHRoaXMudmVydGljZXNbN10gPSB5ICsgcmVjdDIuaGVpZ2h0O1xuXG4gICAgdGhpcy51cGxvYWQoKTtcbn07XG5cbi8qKlxuICogQmluZHMgdGhlIGJ1ZmZlciBhbmQgdXBsb2FkcyB0aGUgZGF0YVxuICovXG5RdWFkLnByb3RvdHlwZS51cGxvYWQgPSBmdW5jdGlvbigpXG57XG4gICAgdmFyIGdsID0gdGhpcy5nbDtcblxuICAgIC8vIFRPRE8gY291bGQgcHJvYmFibHkgYmUgcHVzaGVkIGludG8gb25lIHVwbG9hZCFcbiAgICBnbC5iaW5kQnVmZmVyKCBnbC5BUlJBWV9CVUZGRVIsIHRoaXMudmVydGV4QnVmZmVyICk7XG5cbiAgICBnbC5idWZmZXJTdWJEYXRhKGdsLkFSUkFZX0JVRkZFUiwgMCwgdGhpcy52ZXJ0aWNlcyk7XG5cbiAgICBnbC5idWZmZXJTdWJEYXRhKGdsLkFSUkFZX0JVRkZFUiwgOCAqIDQsIHRoaXMudXZzKTtcblxuICAgIGdsLmJ1ZmZlclN1YkRhdGEoZ2wuQVJSQVlfQlVGRkVSLCAoOCArIDgpICogNCwgdGhpcy5jb2xvcnMpO1xufTtcblxuUXVhZC5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uKClcbntcbiAgICB2YXIgZ2wgPSB0aGlzLmdsO1xuICAgIFxuICAgICBnbC5kZWxldGVCdWZmZXIodGhpcy52ZXJ0ZXhCdWZmZXIpO1xuICAgICBnbC5kZWxldGVCdWZmZXIodGhpcy5pbmRleEJ1ZmZlcik7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IFF1YWQ7XG5cblxuIiwidmFyIG1hdGggPSByZXF1aXJlKCcuLi8uLi8uLi9tYXRoJyksXG4gICAgdXRpbHMgPSByZXF1aXJlKCcuLi8uLi8uLi91dGlscycpLFxuICAgIENPTlNUID0gcmVxdWlyZSgnLi4vLi4vLi4vY29uc3QnKSxcbiAgICAgICAgXG4gICAgR0xUZXh0dXJlID0gcmVxdWlyZSgncGl4aS1nbC1jb3JlJykuR0xUZXh0dXJlLFxuICAgIEdMRnJhbWVidWZmZXIgPSByZXF1aXJlKCdwaXhpLWdsLWNvcmUnKS5HTEZyYW1lYnVmZmVyLFxuICAgIFxuICAgIFN0ZW5jaWxNYXNrU3RhY2sgPSByZXF1aXJlKCcuL1N0ZW5jaWxNYXNrU3RhY2snKTtcblxuLyoqXG4gKiBAYXV0aG9yIE1hdCBHcm92ZXMgaHR0cDovL21hdGdyb3Zlcy5jb20vIEBEb29ybWF0MjNcbiAqL1xuXG4vKipcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqIEBwYXJhbSBnbCB7V2ViR0xSZW5kZXJpbmdDb250ZXh0fSB0aGUgY3VycmVudCBXZWJHTCBkcmF3aW5nIGNvbnRleHRcbiAqIEBwYXJhbSB3aWR0aCB7bnVtYmVyfSB0aGUgaG9yaXpvbnRhbCByYW5nZSBvZiB0aGUgZmlsdGVyXG4gKiBAcGFyYW0gaGVpZ2h0IHtudW1iZXJ9IHRoZSB2ZXJ0aWNhbCByYW5nZSBvZiB0aGUgZmlsdGVyXG4gKiBAcGFyYW0gc2NhbGVNb2RlIHtudW1iZXJ9IFNlZSB7QGxpbmsgUElYSS5TQ0FMRV9NT0RFU30gZm9yIHBvc3NpYmxlIHZhbHVlc1xuICogQHBhcmFtIHJlc29sdXRpb24ge251bWJlcn0gdGhlIGN1cnJlbnQgcmVzb2x1dGlvblxuICogQHBhcmFtIHJvb3Qge2Jvb2xlYW59IFdoZXRoZXIgdGhpcyBvYmplY3QgaXMgdGhlIHJvb3QgZWxlbWVudCBvciBub3RcbiAqL1xudmFyIFJlbmRlclRhcmdldCA9IGZ1bmN0aW9uKGdsLCB3aWR0aCwgaGVpZ2h0LCBzY2FsZU1vZGUsIHJlc29sdXRpb24sIHJvb3QpXG57XG4gICAgLy9UT0RPIFJlc29sdXRpb24gY291bGQgZ28gaGVyZSAoIGVnIGxvdyByZXMgYmx1cnMgKVxuXG4gICAgLyoqXG4gICAgICogVGhlIGN1cnJlbnQgV2ViR0wgZHJhd2luZyBjb250ZXh0LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7V2ViR0xSZW5kZXJpbmdDb250ZXh0fVxuICAgICAqL1xuICAgIHRoaXMuZ2wgPSBnbDtcblxuICAgIC8vIG5leHQgdGltZSB0byBjcmVhdGUgYSBmcmFtZSBidWZmZXIgYW5kIHRleHR1cmVcblxuICAgIC8qKlxuICAgICAqIEEgZnJhbWUgYnVmZmVyXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtXZWJHTEZyYW1lQnVmZmVyfVxuICAgICAqL1xuICAgIHRoaXMuZnJhbWVCdWZmZXIgPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHRleHR1cmVcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuVGV4dHVyZX1cbiAgICAgKi9cbiAgICB0aGlzLnRleHR1cmUgPSBudWxsO1xuXG4gICAgdGhpcy5jbGVhckNvbG9yID0gWzAsIDAsIDAsIDBdO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHNpemUgb2YgdGhlIG9iamVjdCBhcyBhIHJlY3RhbmdsZVxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5SZWN0YW5nbGV9XG4gICAgICovXG4gICAgdGhpcy5zaXplID0gbmV3IG1hdGguUmVjdGFuZ2xlKDAsIDAsIDEsIDEpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGN1cnJlbnQgcmVzb2x1dGlvblxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMucmVzb2x1dGlvbiA9IHJlc29sdXRpb24gfHwgQ09OU1QuUkVTT0xVVElPTjtcblxuICAgIC8qKlxuICAgICAqIFRoZSBwcm9qZWN0aW9uIG1hdHJpeFxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5NYXRyaXh9XG4gICAgICovXG4gICAgdGhpcy5wcm9qZWN0aW9uTWF0cml4ID0gbmV3IG1hdGguTWF0cml4KCk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgb2JqZWN0J3MgdHJhbnNmb3JtXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLk1hdHJpeH1cbiAgICAgKi9cbiAgICB0aGlzLnRyYW5zZm9ybSA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgZnJhbWUuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlJlY3RhbmdsZX1cbiAgICAgKi9cbiAgICB0aGlzLmZyYW1lID0gbnVsbDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBzdGVuY2lsIGJ1ZmZlciBzdG9yZXMgbWFza2luZyBkYXRhIGZvciB0aGUgcmVuZGVyIHRhcmdldFxuICAgICAqXG4gICAgICogQG1lbWJlciB7V2ViR0xSZW5kZXJCdWZmZXJ9XG4gICAgICovXG4gICAgdGhpcy5zdGVuY2lsQnVmZmVyID0gbnVsbDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBkYXRhIHN0cnVjdHVyZSBmb3IgdGhlIHN0ZW5jaWwgbWFza3NcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuU3RlbmNpbE1hc2tTdGFja31cbiAgICAgKi9cbiAgICB0aGlzLnN0ZW5jaWxNYXNrU3RhY2sgPSBuZXcgU3RlbmNpbE1hc2tTdGFjaygpO1xuXG4gICAgLyoqXG4gICAgICogU3RvcmVzIGZpbHRlciBkYXRhIGZvciB0aGUgcmVuZGVyIHRhcmdldFxuICAgICAqXG4gICAgICogQG1lbWJlciB7b2JqZWN0W119XG4gICAgICovXG4gICAgdGhpcy5maWx0ZXJTdGFjayA9IFtcbiAgICAgICAge1xuICAgICAgICAgICAgcmVuZGVyVGFyZ2V0OnRoaXMsXG4gICAgICAgICAgICBmaWx0ZXI6W10sXG4gICAgICAgICAgICBib3VuZHM6dGhpcy5zaXplXG4gICAgICAgIH1cbiAgICBdO1xuXG5cbiAgICAvKipcbiAgICAgKiBUaGUgc2NhbGUgbW9kZS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCBQSVhJLlNDQUxFX01PREVTLkRFRkFVTFRcbiAgICAgKiBAc2VlIFBJWEkuU0NBTEVfTU9ERVNcbiAgICAgKi9cbiAgICB0aGlzLnNjYWxlTW9kZSA9IHNjYWxlTW9kZSB8fCBDT05TVC5TQ0FMRV9NT0RFUy5ERUZBVUxUO1xuXG4gICAgLyoqXG4gICAgICogV2hldGhlciB0aGlzIG9iamVjdCBpcyB0aGUgcm9vdCBlbGVtZW50IG9yIG5vdFxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKi9cbiAgICB0aGlzLnJvb3QgPSByb290O1xuXG4gICAgdGhpcy5mcmFtZUJ1ZmZlciA9IEdMRnJhbWVidWZmZXIuY3JlYXRlUkdCQShnbCwgMTAwLCAxMDApO1xuICAgIGlmKHRoaXMuZnJhbWVCdWZmZXIpdGhpcy5mcmFtZUJ1ZmZlci51bmJpbmQoKTtcblxuICAgLy8gdGhpcy5mcmFtZUJ1ZmZlciA9IHtmcmFtZWJ1ZmZlcjpudWxsLCBiaW5kOmZ1bmN0aW9uKCl7fSwgY2xlYXI6ZnVuY3Rpb24oKXt9LCByZXNpemU6ZnVuY3Rpb24oKXt9fS8vbmV3IEdMRnJhbWVidWZmZXIuY3JlYXRlUkdCQShnbCwgMTAwLCAxMDApO1xuXG5cblxuICAgIGlmICghdGhpcy5yb290KVxuICAgIHtcbiAgICAgICAgLypcbiAgICAgICAgICAgIEEgZnJhbWUgYnVmZmVyIG5lZWRzIGEgdGFyZ2V0IHRvIHJlbmRlciB0by4uXG4gICAgICAgICAgICBjcmVhdGUgYSB0ZXh0dXJlIGFuZCBiaW5kIGl0IGF0dGFjaCBpdCB0byB0aGUgZnJhbWVidWZmZXIuLlxuICAgICAgICAgKi9cbiAgICAgICAgXG4gICAgICAgIC8vIGNyZWF0ZSBhIHRleHR1cmUgdG8gYmluZCBhdHRhY2ggdG8gdGhlIGZyYW1lQnVmZmVyLi5cbiAgICAgICAgdmFyIHRleHR1cmUgPSBuZXcgR0xUZXh0dXJlKGdsKTtcblxuICAgICAgICB0ZXh0dXJlLmVuYWJsZUxpbmVhclNjYWxpbmcoKVxuICAgICAgICB0ZXh0dXJlLmVuYWJsZVdyYXBDbGFtcCgpXG5cbiAgICAgICAgdGhpcy5mcmFtZUJ1ZmZlci5lbmFibGVUZXh0dXJlKHRleHR1cmUpO1xuXG4gICAgICAgIC8vIFRPRE8gY2hhbmdlIVxuICAgICAgICAvLyB0aGlzIGlzIHVzZWQgYnkgdGhlIGJhc2UgdGV4dHVyZVxuICAgICAgICB0aGlzLnRleHR1cmUgPSB0ZXh0dXJlLnRleHR1cmU7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIC8vIG1ha2UgaXQgYSBudWxsIGZyYW1lYnVmZmVyLi5cbiAgICAgICAgdGhpcy5mcmFtZUJ1ZmZlci5mcmFtZWJ1ZmZlciA9IG51bGw7XG4gICAgfVxuXG4gICAgdGhpcy5yZXNpemUod2lkdGgsIGhlaWdodCk7XG59O1xuXG5SZW5kZXJUYXJnZXQucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gUmVuZGVyVGFyZ2V0O1xubW9kdWxlLmV4cG9ydHMgPSBSZW5kZXJUYXJnZXQ7XG5cbi8qKlxuICogQ2xlYXJzIHRoZSBmaWx0ZXIgdGV4dHVyZS5cbiAqXG4gKiBAcGFyYW0gW2JpbmQ9ZmFsc2VdIHtib29sZWFufSBTaG91bGQgd2UgYmluZCBvdXIgZnJhbWVidWZmZXIgYmVmb3JlIGNsZWFyaW5nP1xuICovXG5SZW5kZXJUYXJnZXQucHJvdG90eXBlLmNsZWFyID0gZnVuY3Rpb24oY2xlYXJDb2xvcilcbntcbiAgICB2YXIgY2MgPSBjbGVhckNvbG9yIHx8IHRoaXMuY2xlYXJDb2xvclxuICAgIHRoaXMuZnJhbWVCdWZmZXIuY2xlYXIoY2NbMF0sY2NbMV0sY2NbMl0sY2NbM10pLy9yLGcsYixhKTtcbn07XG5cbi8qKlxuICogQmluZHMgdGhlIHN0ZW5jaWwgYnVmZmVyLlxuICpcbiAqL1xuUmVuZGVyVGFyZ2V0LnByb3RvdHlwZS5hdHRhY2hTdGVuY2lsQnVmZmVyID0gZnVuY3Rpb24oKVxue1xuICAgIC8vVE9ETyBjaGVjayBpZiBzdGVuY2lsIGlzIGRvbmU/XG4gICAgLyoqXG4gICAgICogVGhlIHN0ZW5jaWwgYnVmZmVyIGlzIHVzZWQgZm9yIG1hc2tpbmcgaW4gcGl4aVxuICAgICAqIGxldHMgY3JlYXRlIG9uZSBhbmQgdGhlbiBhZGQgYXR0YWNoIGl0IHRvIHRoZSBmcmFtZWJ1ZmZlci4uXG4gICAgICovXG4gICAgaWYgKCF0aGlzLnJvb3QpXG4gICAge1xuICAgICAgICB0aGlzLmZyYW1lQnVmZmVyLmVuYWJsZVN0ZW5jaWwoKTtcbiAgICB9XG59O1xuXG4vKipcbiAqIEJpbmRzIHRoZSBidWZmZXJzIGFuZCBpbml0aWFsaXNlcyB0aGUgdmlld3BvcnQuXG4gKlxuICovXG5SZW5kZXJUYXJnZXQucHJvdG90eXBlLmFjdGl2YXRlID0gZnVuY3Rpb24oKVxue1xuICAgIC8vVE9PRCByZWZhY3RvciB1c2FnZSBvZiBmcmFtZS4uXG4gICAgdmFyIGdsID0gdGhpcy5nbDtcblxuICAgIHRoaXMuZnJhbWVCdWZmZXIuYmluZCgpO1xuXG5cbiAgICB2YXIgcHJvamVjdGlvbkZyYW1lID0gdGhpcy5mcmFtZSB8fCB0aGlzLnNpemU7XG5cbiAgICAvLyBUT0RPIGFkZCBhIGRpcnR5IGZsYWcgdG8gdGhpcyBvZiBhIHNldHRlciBmb3IgdGhlIGZyYW1lP1xuICAgIHRoaXMuY2FsY3VsYXRlUHJvamVjdGlvbiggcHJvamVjdGlvbkZyYW1lICk7XG5cbiAgICBpZih0aGlzLnRyYW5zZm9ybSlcbiAgICB7XG4gICAgICAgIHRoaXMucHJvamVjdGlvbk1hdHJpeC5hcHBlbmQodGhpcy50cmFuc2Zvcm0pO1xuICAgIH1cblxuICAgIGdsLnZpZXdwb3J0KDAsMCwgcHJvamVjdGlvbkZyYW1lLndpZHRoICogdGhpcy5yZXNvbHV0aW9uLCBwcm9qZWN0aW9uRnJhbWUuaGVpZ2h0ICogdGhpcy5yZXNvbHV0aW9uKTtcbn07XG5cbi8qKlxuICogVXBkYXRlcyB0aGUgcHJvamVjdGlvbiBtYXRyaXggYmFzZWQgb24gYSBwcm9qZWN0aW9uIGZyYW1lICh3aGljaCBpcyBhIHJlY3RhbmdsZSlcbiAqXG4gKi9cblJlbmRlclRhcmdldC5wcm90b3R5cGUuY2FsY3VsYXRlUHJvamVjdGlvbiA9IGZ1bmN0aW9uIChwcm9qZWN0aW9uRnJhbWUpXG57XG4gICAgdmFyIHBtID0gdGhpcy5wcm9qZWN0aW9uTWF0cml4O1xuXG4gICAgcG0uaWRlbnRpdHkoKTtcblxuICAgIGlmICghdGhpcy5yb290KVxuICAgIHtcbiAgICAgICAgcG0uYSA9IDEgLyBwcm9qZWN0aW9uRnJhbWUud2lkdGgqMjtcbiAgICAgICAgcG0uZCA9IDEgLyBwcm9qZWN0aW9uRnJhbWUuaGVpZ2h0KjI7XG5cbiAgICAgICAgcG0udHggPSAtMSAtIHByb2plY3Rpb25GcmFtZS54ICogcG0uYTtcbiAgICAgICAgcG0udHkgPSAtMSAtIHByb2plY3Rpb25GcmFtZS55ICogcG0uZDtcbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgcG0uYSA9IDEgLyBwcm9qZWN0aW9uRnJhbWUud2lkdGgqMjtcbiAgICAgICAgcG0uZCA9IC0xIC8gcHJvamVjdGlvbkZyYW1lLmhlaWdodCoyO1xuXG4gICAgICAgIHBtLnR4ID0gLTEgLSBwcm9qZWN0aW9uRnJhbWUueCAqIHBtLmE7XG4gICAgICAgIHBtLnR5ID0gMSAtIHByb2plY3Rpb25GcmFtZS55ICogcG0uZDtcbiAgICB9XG59O1xuXG4vKipcbiAqIFJlc2l6ZXMgdGhlIHRleHR1cmUgdG8gdGhlIHNwZWNpZmllZCB3aWR0aCBhbmQgaGVpZ2h0XG4gKlxuICogQHBhcmFtIHdpZHRoIHtOdW1iZXJ9IHRoZSBuZXcgd2lkdGggb2YgdGhlIHRleHR1cmVcbiAqIEBwYXJhbSBoZWlnaHQge051bWJlcn0gdGhlIG5ldyBoZWlnaHQgb2YgdGhlIHRleHR1cmVcbiAqL1xuUmVuZGVyVGFyZ2V0LnByb3RvdHlwZS5yZXNpemUgPSBmdW5jdGlvbiAod2lkdGgsIGhlaWdodClcbntcbiAgICB3aWR0aCA9IHdpZHRoIHwgMDtcbiAgICBoZWlnaHQgPSBoZWlnaHQgfCAwO1xuXG4gICAgaWYgKHRoaXMuc2l6ZS53aWR0aCA9PT0gd2lkdGggJiYgdGhpcy5zaXplLmhlaWdodCA9PT0gaGVpZ2h0KSBcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLnNpemUud2lkdGggPSB3aWR0aDtcbiAgICB0aGlzLnNpemUuaGVpZ2h0ID0gaGVpZ2h0O1xuXG4gICAgdGhpcy5mcmFtZUJ1ZmZlci5yZXNpemUod2lkdGggKiB0aGlzLnJlc29sdXRpb24sIGhlaWdodCAqIHRoaXMucmVzb2x1dGlvbik7XG4gICAgXG4gICAgdmFyIHByb2plY3Rpb25GcmFtZSA9IHRoaXMuZnJhbWUgfHwgdGhpcy5zaXplO1xuXG4gICAgdGhpcy5jYWxjdWxhdGVQcm9qZWN0aW9uKCBwcm9qZWN0aW9uRnJhbWUgKTtcbn07XG5cbi8qKlxuICogRGVzdHJveXMgdGhlIHJlbmRlciB0YXJnZXQuXG4gKlxuICovXG5SZW5kZXJUYXJnZXQucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoKVxue1xuICAgIHZhciBnbCA9IHRoaXMuZ2w7XG4gICAgXG4gICAgdGhpcy5mcmFtZUJ1ZmZlci5kZXN0cm95KCk7XG5cbiAgICB0aGlzLmZyYW1lQnVmZmVyID0gbnVsbDtcbiAgICB0aGlzLnRleHR1cmUgPSBudWxsO1xufTtcbiIsIi8qKlxuICogR2VuZXJpYyBNYXNrIFN0YWNrIGRhdGEgc3RydWN0dXJlXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKi9cbmZ1bmN0aW9uIFN0ZW5jaWxNYXNrU3RhY2soKVxue1xuXHQvKipcbiAgICAgKiBUaGUgYWN0dWFsIHN0YWNrXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHthbnlbXX1cbiAgICAgKi9cbiAgICB0aGlzLnN0ZW5jaWxTdGFjayA9IFtdO1xuXG4gICAgLyoqXG4gICAgICogVE9ETyBAYWx2aW5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICovXG4gICAgdGhpcy5yZXZlcnNlID0gdHJ1ZTtcblxuICAgIC8qKlxuICAgICAqIEludGVybmFsIGNvdW50XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy5jb3VudCA9IDA7XG59XG5cblN0ZW5jaWxNYXNrU3RhY2sucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gU3RlbmNpbE1hc2tTdGFjaztcbm1vZHVsZS5leHBvcnRzID0gU3RlbmNpbE1hc2tTdGFjaztcbiIsIkNPTlNUID0gcmVxdWlyZSgnLi4vLi4vLi4vY29uc3QnKTtcblxuLyoqXG4gKiBNYXBzIGdsIGJsZW5kIGNvbWJpbmF0aW9ucyB0byBXZWJHTFxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICovXG5mdW5jdGlvbiBtYXBXZWJHTEJsZW5kTW9kZXNUb1BpeGkoZ2wsIG9iamVjdClcbntcbiAgICBvYmplY3QgPSBvYmplY3QgfHwge307XG5cbiAgICAvL1RPRE8gLSBwcmVtdWx0aXBseSBhbHBoYSB3b3VsZCBiZSBkaWZmZXJlbnQuXG4gICAgLy9hZGQgYSBib29sZWFuIGZvciB0aGF0IVxuICAgIG9iamVjdFtDT05TVC5CTEVORF9NT0RFUy5OT1JNQUxdICAgICAgICA9IFtnbC5PTkUsICAgICAgIGdsLk9ORV9NSU5VU19TUkNfQUxQSEFdO1xuICAgIG9iamVjdFtDT05TVC5CTEVORF9NT0RFUy5BRERdICAgICAgICAgICA9IFtnbC5TUkNfQUxQSEEsIGdsLkRTVF9BTFBIQV07XG4gICAgb2JqZWN0W0NPTlNULkJMRU5EX01PREVTLk1VTFRJUExZXSAgICAgID0gW2dsLkRTVF9DT0xPUiwgZ2wuT05FX01JTlVTX1NSQ19BTFBIQV07XG4gICAgb2JqZWN0W0NPTlNULkJMRU5EX01PREVTLlNDUkVFTl0gICAgICAgID0gW2dsLlNSQ19BTFBIQSwgZ2wuT05FXTtcbiAgICBvYmplY3RbQ09OU1QuQkxFTkRfTU9ERVMuT1ZFUkxBWV0gICAgICAgPSBbZ2wuT05FLCAgICAgICBnbC5PTkVfTUlOVVNfU1JDX0FMUEhBXTtcbiAgICBvYmplY3RbQ09OU1QuQkxFTkRfTU9ERVMuREFSS0VOXSAgICAgICAgPSBbZ2wuT05FLCAgICAgICBnbC5PTkVfTUlOVVNfU1JDX0FMUEhBXTtcbiAgICBvYmplY3RbQ09OU1QuQkxFTkRfTU9ERVMuTElHSFRFTl0gICAgICAgPSBbZ2wuT05FLCAgICAgICBnbC5PTkVfTUlOVVNfU1JDX0FMUEhBXTtcbiAgICBvYmplY3RbQ09OU1QuQkxFTkRfTU9ERVMuQ09MT1JfRE9ER0VdICAgPSBbZ2wuT05FLCAgICAgICBnbC5PTkVfTUlOVVNfU1JDX0FMUEhBXTtcbiAgICBvYmplY3RbQ09OU1QuQkxFTkRfTU9ERVMuQ09MT1JfQlVSTl0gICAgPSBbZ2wuT05FLCAgICAgICBnbC5PTkVfTUlOVVNfU1JDX0FMUEhBXTtcbiAgICBvYmplY3RbQ09OU1QuQkxFTkRfTU9ERVMuSEFSRF9MSUdIVF0gICAgPSBbZ2wuT05FLCAgICAgICBnbC5PTkVfTUlOVVNfU1JDX0FMUEhBXTtcbiAgICBvYmplY3RbQ09OU1QuQkxFTkRfTU9ERVMuU09GVF9MSUdIVF0gICAgPSBbZ2wuT05FLCAgICAgICBnbC5PTkVfTUlOVVNfU1JDX0FMUEhBXTtcbiAgICBvYmplY3RbQ09OU1QuQkxFTkRfTU9ERVMuRElGRkVSRU5DRV0gICAgPSBbZ2wuT05FLCAgICAgICBnbC5PTkVfTUlOVVNfU1JDX0FMUEhBXTtcbiAgICBvYmplY3RbQ09OU1QuQkxFTkRfTU9ERVMuRVhDTFVTSU9OXSAgICAgPSBbZ2wuT05FLCAgICAgICBnbC5PTkVfTUlOVVNfU1JDX0FMUEhBXTtcbiAgICBvYmplY3RbQ09OU1QuQkxFTkRfTU9ERVMuSFVFXSAgICAgICAgICAgPSBbZ2wuT05FLCAgICAgICBnbC5PTkVfTUlOVVNfU1JDX0FMUEhBXTtcbiAgICBvYmplY3RbQ09OU1QuQkxFTkRfTU9ERVMuU0FUVVJBVElPTl0gICAgPSBbZ2wuT05FLCAgICAgICBnbC5PTkVfTUlOVVNfU1JDX0FMUEhBXTtcbiAgICBvYmplY3RbQ09OU1QuQkxFTkRfTU9ERVMuQ09MT1JdICAgICAgICAgPSBbZ2wuT05FLCAgICAgICBnbC5PTkVfTUlOVVNfU1JDX0FMUEhBXTtcbiAgICBvYmplY3RbQ09OU1QuQkxFTkRfTU9ERVMuTFVNSU5PU0lUWV0gICAgPSBbZ2wuT05FLCAgICAgICBnbC5PTkVfTUlOVVNfU1JDX0FMUEhBXTtcblxuICAgIHJldHVybiBvYmplY3Q7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gbWFwV2ViR0xCbGVuZE1vZGVzVG9QaXhpO1xuIiwiQ09OU1QgPSByZXF1aXJlKCcuLi8uLi8uLi9jb25zdCcpO1xuXG4vKipcbiAqIEdlbmVyaWMgTWFzayBTdGFjayBkYXRhIHN0cnVjdHVyZVxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICovXG5mdW5jdGlvbiBtYXBXZWJHTERyYXdNb2Rlc1RvUGl4aShnbCwgb2JqZWN0KVxue1xuXHRvYmplY3Q9IG9iamVjdCB8fCB7fTtcblxuICAgIG9iamVjdFtDT05TVC5EUkFXX01PREVTLlBPSU5UU10gICAgICAgICA9IGdsLlBPSU5UUztcbiAgICBvYmplY3RbQ09OU1QuRFJBV19NT0RFUy5MSU5FU10gICAgICAgICAgPSBnbC5MSU5FUztcbiAgICBvYmplY3RbQ09OU1QuRFJBV19NT0RFUy5MSU5FX0xPT1BdICAgICAgPSBnbC5MSU5FX0xPT1A7XG4gICAgb2JqZWN0W0NPTlNULkRSQVdfTU9ERVMuTElORV9TVFJJUF0gICAgID0gZ2wuTElORV9TVFJJUDtcbiAgICBvYmplY3RbQ09OU1QuRFJBV19NT0RFUy5UUklBTkdMRVNdICAgICAgPSBnbC5UUklBTkdMRVM7XG4gICAgb2JqZWN0W0NPTlNULkRSQVdfTU9ERVMuVFJJQU5HTEVfU1RSSVBdID0gZ2wuVFJJQU5HTEVfU1RSSVA7XG4gICAgb2JqZWN0W0NPTlNULkRSQVdfTU9ERVMuVFJJQU5HTEVfRkFOXSAgID0gZ2wuVFJJQU5HTEVfRkFOO1xuXG59XG5cbm1vZHVsZS5leHBvcnRzID0gbWFwV2ViR0xEcmF3TW9kZXNUb1BpeGk7XG4iLCJ2YXIgbWF0aCA9IHJlcXVpcmUoJy4uL21hdGgnKSxcbiAgICBUZXh0dXJlID0gcmVxdWlyZSgnLi4vdGV4dHVyZXMvVGV4dHVyZScpLFxuICAgIENvbnRhaW5lciA9IHJlcXVpcmUoJy4uL2Rpc3BsYXkvQ29udGFpbmVyJyksXG4gICAgQ2FudmFzVGludGVyID0gcmVxdWlyZSgnLi4vcmVuZGVyZXJzL2NhbnZhcy91dGlscy9DYW52YXNUaW50ZXInKSxcbiAgICB1dGlscyA9IHJlcXVpcmUoJy4uL3V0aWxzJyksXG4gICAgQ09OU1QgPSByZXF1aXJlKCcuLi9jb25zdCcpLFxuICAgIHRlbXBQb2ludCA9IG5ldyBtYXRoLlBvaW50KCk7XG5cbi8qKlxuICogVGhlIFNwcml0ZSBvYmplY3QgaXMgdGhlIGJhc2UgZm9yIGFsbCB0ZXh0dXJlZCBvYmplY3RzIHRoYXQgYXJlIHJlbmRlcmVkIHRvIHRoZSBzY3JlZW5cbiAqXG4gKiBBIHNwcml0ZSBjYW4gYmUgY3JlYXRlZCBkaXJlY3RseSBmcm9tIGFuIGltYWdlIGxpa2UgdGhpczpcbiAqXG4gKiBgYGBqc1xuICogdmFyIHNwcml0ZSA9IG5ldyBQSVhJLlNwcml0ZS5mcm9tSW1hZ2UoJ2Fzc2V0cy9pbWFnZS5wbmcnKTtcbiAqIGBgYFxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5Db250YWluZXJcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gdGV4dHVyZSB7UElYSS5UZXh0dXJlfSBUaGUgdGV4dHVyZSBmb3IgdGhpcyBzcHJpdGVcbiAqL1xuZnVuY3Rpb24gU3ByaXRlKHRleHR1cmUpXG57XG4gICAgQ29udGFpbmVyLmNhbGwodGhpcyk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYW5jaG9yIHNldHMgdGhlIG9yaWdpbiBwb2ludCBvZiB0aGUgdGV4dHVyZS5cbiAgICAgKiBUaGUgZGVmYXVsdCBpcyAwLDAgdGhpcyBtZWFucyB0aGUgdGV4dHVyZSdzIG9yaWdpbiBpcyB0aGUgdG9wIGxlZnRcbiAgICAgKiBTZXR0aW5nIHRoZSBhbmNob3IgdG8gMC41LDAuNSBtZWFucyB0aGUgdGV4dHVyZSdzIG9yaWdpbiBpcyBjZW50ZXJlZFxuICAgICAqIFNldHRpbmcgdGhlIGFuY2hvciB0byAxLDEgd291bGQgbWVhbiB0aGUgdGV4dHVyZSdzIG9yaWdpbiBwb2ludCB3aWxsIGJlIHRoZSBib3R0b20gcmlnaHQgY29ybmVyXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlBvaW50fVxuICAgICAqL1xuICAgIHRoaXMuYW5jaG9yID0gbmV3IG1hdGguUG9pbnQoKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSB0ZXh0dXJlIHRoYXQgdGhlIHNwcml0ZSBpcyB1c2luZ1xuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5UZXh0dXJlfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fdGV4dHVyZSA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgd2lkdGggb2YgdGhlIHNwcml0ZSAodGhpcyBpcyBpbml0aWFsbHkgc2V0IGJ5IHRoZSB0ZXh0dXJlKVxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fd2lkdGggPSAwO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGhlaWdodCBvZiB0aGUgc3ByaXRlICh0aGlzIGlzIGluaXRpYWxseSBzZXQgYnkgdGhlIHRleHR1cmUpXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9oZWlnaHQgPSAwO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHRpbnQgYXBwbGllZCB0byB0aGUgc3ByaXRlLiBUaGlzIGlzIGEgaGV4IHZhbHVlLiBBIHZhbHVlIG9mIDB4RkZGRkZGIHdpbGwgcmVtb3ZlIGFueSB0aW50IGVmZmVjdC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAweEZGRkZGRlxuICAgICAqL1xuICAgIHRoaXMudGludCA9IDB4RkZGRkZGO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGJsZW5kIG1vZGUgdG8gYmUgYXBwbGllZCB0byB0aGUgc3ByaXRlLiBBcHBseSBhIHZhbHVlIG9mIGBQSVhJLkJMRU5EX01PREVTLk5PUk1BTGAgdG8gcmVzZXQgdGhlIGJsZW5kIG1vZGUuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgUElYSS5CTEVORF9NT0RFUy5OT1JNQUxcbiAgICAgKiBAc2VlIFBJWEkuQkxFTkRfTU9ERVNcbiAgICAgKi9cbiAgICB0aGlzLmJsZW5kTW9kZSA9IENPTlNULkJMRU5EX01PREVTLk5PUk1BTDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBzaGFkZXIgdGhhdCB3aWxsIGJlIHVzZWQgdG8gcmVuZGVyIHRoZSBzcHJpdGUuIFNldCB0byBudWxsIHRvIHJlbW92ZSBhIGN1cnJlbnQgc2hhZGVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5BYnN0cmFjdEZpbHRlcnxQSVhJLlNoYWRlcn1cbiAgICAgKi9cbiAgICB0aGlzLnNoYWRlciA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBBbiBpbnRlcm5hbCBjYWNoZWQgdmFsdWUgb2YgdGhlIHRpbnQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMHhGRkZGRkZcbiAgICAgKi9cbiAgICB0aGlzLmNhY2hlZFRpbnQgPSAweEZGRkZGRjtcblxuICAgIC8vIGNhbGwgdGV4dHVyZSBzZXR0ZXJcbiAgICB0aGlzLnRleHR1cmUgPSB0ZXh0dXJlIHx8IFRleHR1cmUuRU1QVFk7XG4gICAgdGhpcy50ZXh0dXJlRGlydHkgPSB0cnVlXG4gICAgdGhpcy52ZXJ0ZXhEaXJ0eSA9IHRydWU7XG4gICAgdGhpcy52ZXJ0ZXhEYXRhID0gbmV3IEZsb2F0MzJBcnJheSg4KTtcbn1cblxuLy8gY29uc3RydWN0b3JcblNwcml0ZS5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKENvbnRhaW5lci5wcm90b3R5cGUpO1xuU3ByaXRlLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFNwcml0ZTtcbm1vZHVsZS5leHBvcnRzID0gU3ByaXRlO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhTcHJpdGUucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogVGhlIHdpZHRoIG9mIHRoZSBzcHJpdGUsIHNldHRpbmcgdGhpcyB3aWxsIGFjdHVhbGx5IG1vZGlmeSB0aGUgc2NhbGUgdG8gYWNoaWV2ZSB0aGUgdmFsdWUgc2V0XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuU3ByaXRlI1xuICAgICAqL1xuICAgIHdpZHRoOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIE1hdGguYWJzKHRoaXMuc2NhbGUueCkgKiB0aGlzLnRleHR1cmUuX2ZyYW1lLndpZHRoO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdmFyIHNpZ24gPSB1dGlscy5zaWduKHRoaXMuc2NhbGUueCkgfHwgMTtcbiAgICAgICAgICAgIHRoaXMuc2NhbGUueCA9IHNpZ24gKiB2YWx1ZSAvIHRoaXMudGV4dHVyZS5fZnJhbWUud2lkdGg7XG4gICAgICAgICAgICB0aGlzLl93aWR0aCA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFRoZSBoZWlnaHQgb2YgdGhlIHNwcml0ZSwgc2V0dGluZyB0aGlzIHdpbGwgYWN0dWFsbHkgbW9kaWZ5IHRoZSBzY2FsZSB0byBhY2hpZXZlIHRoZSB2YWx1ZSBzZXRcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5TcHJpdGUjXG4gICAgICovXG4gICAgaGVpZ2h0OiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuICBNYXRoLmFicyh0aGlzLnNjYWxlLnkpICogdGhpcy50ZXh0dXJlLl9mcmFtZS5oZWlnaHQ7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB2YXIgc2lnbiA9IHV0aWxzLnNpZ24odGhpcy5zY2FsZS55KSB8fCAxO1xuICAgICAgICAgICAgdGhpcy5zY2FsZS55ID0gc2lnbiAqIHZhbHVlIC8gdGhpcy50ZXh0dXJlLl9mcmFtZS5oZWlnaHQ7XG4gICAgICAgICAgICB0aGlzLl9oZWlnaHQgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBUaGUgdGV4dHVyZSB0aGF0IHRoZSBzcHJpdGUgaXMgdXNpbmdcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuVGV4dHVyZX1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5TcHJpdGUjXG4gICAgICovXG4gICAgdGV4dHVyZToge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiAgdGhpcy5fdGV4dHVyZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGlmICh0aGlzLl90ZXh0dXJlID09PSB2YWx1ZSlcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuX3RleHR1cmUgPSB2YWx1ZTtcbiAgICAgICAgICAgIHRoaXMuY2FjaGVkVGludCA9IDB4RkZGRkZGO1xuXG4gICAgICAgICAgICB0aGlzLnRleHR1cmVEaXJ0eSA9IHRydWU7XG5cbiAgICAgICAgICAgIGlmICh2YWx1ZSlcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAvLyB3YWl0IGZvciB0aGUgdGV4dHVyZSB0byBsb2FkXG4gICAgICAgICAgICAgICAgaWYgKHZhbHVlLmJhc2VUZXh0dXJlLmhhc0xvYWRlZClcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX29uVGV4dHVyZVVwZGF0ZSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICB2YWx1ZS5vbmNlKCd1cGRhdGUnLCB0aGlzLl9vblRleHR1cmVVcGRhdGUsIHRoaXMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn0pO1xuXG4vKipcbiAqIFdoZW4gdGhlIHRleHR1cmUgaXMgdXBkYXRlZCwgdGhpcyBldmVudCB3aWxsIGZpcmUgdG8gdXBkYXRlIHRoZSBzY2FsZSBhbmQgZnJhbWVcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5TcHJpdGUucHJvdG90eXBlLl9vblRleHR1cmVVcGRhdGUgPSBmdW5jdGlvbiAoKVxue1xuICAgIHRoaXMudGV4dHVyZURpcnR5ID0gdHJ1ZTtcblxuICAgIC8vIHNvIGlmIF93aWR0aCBpcyAwIHRoZW4gd2lkdGggd2FzIG5vdCBzZXQuLlxuICAgIGlmICh0aGlzLl93aWR0aClcbiAgICB7XG4gICAgICAgIHRoaXMuc2NhbGUueCA9IHV0aWxzLnNpZ24odGhpcy5zY2FsZS54KSAqIHRoaXMuX3dpZHRoIC8gdGhpcy50ZXh0dXJlLmZyYW1lLndpZHRoO1xuICAgIH1cblxuICAgIGlmICh0aGlzLl9oZWlnaHQpXG4gICAge1xuICAgICAgICB0aGlzLnNjYWxlLnkgPSB1dGlscy5zaWduKHRoaXMuc2NhbGUueSkgKiB0aGlzLl9oZWlnaHQgLyB0aGlzLnRleHR1cmUuZnJhbWUuaGVpZ2h0O1xuICAgIH1cbn07XG5cblNwcml0ZS5wcm90b3R5cGUuY2FjbHVsYXRlVmVydGljZXMgPSBmdW5jdGlvbiAoKVxue1xuXG4gICAgdmFyIHRleHR1cmUgPSB0aGlzLl90ZXh0dXJlLFxuICAgICAgICB3dCA9IHRoaXMud29ybGRUcmFuc2Zvcm0sXG4gICAgICAgIGEgPSB3dC5hLCBiID0gd3QuYiwgYyA9IHd0LmMsIGQgPSB3dC5kLCB0eCA9IHd0LnR4LCB0eSA9IHd0LnR5LFxuICAgICAgICB2ZXJ0ZXhEYXRhID0gdGhpcy52ZXJ0ZXhEYXRhLFxuICAgICAgICB3MCwgdzEsIGgwLCBoMSxcbiAgICAgICAgdHJpbSA9IHRleHR1cmUudHJpbTtcbiAgICBcbiAgICBpZiAodHJpbSlcbiAgICB7XG4gICAgICAgIC8vIGlmIHRoZSBzcHJpdGUgaXMgdHJpbW1lZCBhbmQgaXMgbm90IGEgdGlsaW5nc3ByaXRlIHRoZW4gd2UgbmVlZCB0byBhZGQgdGhlIGV4dHJhIHNwYWNlIGJlZm9yZSB0cmFuc2Zvcm1pbmcgdGhlIHNwcml0ZSBjb29yZHMuLlxuICAgICAgICB3MSA9IHRyaW0ueCAtIHRoaXMuYW5jaG9yLnggKiB0cmltLndpZHRoO1xuICAgICAgICB3MCA9IHcxICsgdGV4dHVyZS5jcm9wLndpZHRoO1xuXG4gICAgICAgIGgxID0gdHJpbS55IC0gdGhpcy5hbmNob3IueSAqIHRyaW0uaGVpZ2h0O1xuICAgICAgICBoMCA9IGgxICsgdGV4dHVyZS5jcm9wLmhlaWdodDtcblxuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICB3MCA9ICh0ZXh0dXJlLl9mcmFtZS53aWR0aCApICogKDEtdGhpcy5hbmNob3IueCk7XG4gICAgICAgIHcxID0gKHRleHR1cmUuX2ZyYW1lLndpZHRoICkgKiAtdGhpcy5hbmNob3IueDtcblxuICAgICAgICBoMCA9IHRleHR1cmUuX2ZyYW1lLmhlaWdodCAqICgxLXRoaXMuYW5jaG9yLnkpO1xuICAgICAgICBoMSA9IHRleHR1cmUuX2ZyYW1lLmhlaWdodCAqIC10aGlzLmFuY2hvci55O1xuICAgIH1cblxuICAgIC8vIHh5XG4gICAgdmVydGV4RGF0YVswXSA9IGEgKiB3MSArIGMgKiBoMSArIHR4O1xuICAgIHZlcnRleERhdGFbMV0gPSBkICogaDEgKyBiICogdzEgKyB0eTtcblxuICAgIC8vIHh5XG4gICAgdmVydGV4RGF0YVsyXSA9IGEgKiB3MCArIGMgKiBoMSArIHR4O1xuICAgIHZlcnRleERhdGFbM10gPSBkICogaDEgKyBiICogdzAgKyB0eTtcblxuICAgICAvLyB4eVxuICAgIHZlcnRleERhdGFbNF0gPSBhICogdzAgKyBjICogaDAgKyB0eDtcbiAgICB2ZXJ0ZXhEYXRhWzVdID0gZCAqIGgwICsgYiAqIHcwICsgdHk7XG5cbiAgICAvLyB4eVxuICAgIHZlcnRleERhdGFbNl0gPSBhICogdzEgKyBjICogaDAgKyB0eDtcbiAgICB2ZXJ0ZXhEYXRhWzddID0gZCAqIGgwICsgYiAqIHcxICsgdHk7XG5cblxufVxuXG4vKipcbipcbiogUmVuZGVycyB0aGUgb2JqZWN0IHVzaW5nIHRoZSBXZWJHTCByZW5kZXJlclxuKlxuKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcn1cbiogQHByaXZhdGVcbiovXG5TcHJpdGUucHJvdG90eXBlLl9yZW5kZXJXZWJHTCA9IGZ1bmN0aW9uIChyZW5kZXJlcilcbntcbiAgICBpZih0aGlzLnRleHR1cmVEaXJ0eSlcbiAgICB7XG4gICAgICAgIHRoaXMudGV4dHVyZURpcnR5ID0gZmFsc2U7XG5cbiAgICAgICAgdGhpcy5fb25UZXh0dXJlVXBkYXRlKCk7XG4gICAgICAgIFxuICAgICAgICB0aGlzLnZlcnRleERpcnR5ID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBpZih0aGlzLnZlcnRleERpcnR5KVxuICAgIHtcbiAgICAgICAgdGhpcy52ZXJ0ZXhEaXJ0eSA9IGZhbHNlO1xuXG4gICAgICAgIC8vIHNldCB0aGUgdmVydGV4IGRhdGFcbiAgICAgICAgdGhpcy5jYWNsdWxhdGVWZXJ0aWNlcygpO1xuXG4gICAgfVxuICAgIFxuICAgIHJlbmRlcmVyLnNldE9iamVjdFJlbmRlcmVyKHJlbmRlcmVyLnBsdWdpbnMuc3ByaXRlKTtcbiAgICByZW5kZXJlci5wbHVnaW5zLnNwcml0ZS5yZW5kZXIodGhpcyk7XG59O1xuXG4vKipcbiAqIFJldHVybnMgdGhlIGJvdW5kcyBvZiB0aGUgU3ByaXRlIGFzIGEgcmVjdGFuZ2xlLiBUaGUgYm91bmRzIGNhbGN1bGF0aW9uIHRha2VzIHRoZSB3b3JsZFRyYW5zZm9ybSBpbnRvIGFjY291bnQuXG4gKlxuICogQHBhcmFtIG1hdHJpeCB7UElYSS5NYXRyaXh9IHRoZSB0cmFuc2Zvcm1hdGlvbiBtYXRyaXggb2YgdGhlIHNwcml0ZVxuICogQHJldHVybiB7UElYSS5SZWN0YW5nbGV9IHRoZSBmcmFtaW5nIHJlY3RhbmdsZVxuICovXG5TcHJpdGUucHJvdG90eXBlLmdldEJvdW5kcyA9IGZ1bmN0aW9uIChtYXRyaXgpXG57XG4gICAgaWYoIXRoaXMuX2N1cnJlbnRCb3VuZHMpXG4gICAge1xuICAgICAgICBpZih0aGlzLnZlcnRleERpcnR5KVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnZlcnRleERpcnR5ID0gZmFsc2U7XG5cbiAgICAgICAgICAgIC8vIHNldCB0aGUgdmVydGV4IGRhdGFcbiAgICAgICAgICAgIHRoaXMuY2FjbHVsYXRlVmVydGljZXMoKTtcblxuICAgICAgICB9XG5cbiAgICAgICAgdmFyIG1pblgsXG4gICAgICAgICAgICBtYXhYLFxuICAgICAgICAgICAgbWluWSxcbiAgICAgICAgICAgIG1heFksXG4gICAgICAgICAgICB2ZXJ0ZXhEYXRhID0gdGhpcy52ZXJ0ZXhEYXRhO1xuXG4gICAgICAgIHZhciB4MSA9IHZlcnRleERhdGFbMF1cbiAgICAgICAgdmFyIHkxID0gdmVydGV4RGF0YVsxXVxuXG4gICAgICAgIHZhciB4MiA9IHZlcnRleERhdGFbMl1cbiAgICAgICAgdmFyIHkyID0gdmVydGV4RGF0YVszXVxuXG4gICAgICAgIHZhciB4MyA9IHZlcnRleERhdGFbNF1cbiAgICAgICAgdmFyIHkzID0gdmVydGV4RGF0YVs1XVxuXG4gICAgICAgIHZhciB4NCA9IHZlcnRleERhdGFbNl1cbiAgICAgICAgdmFyIHk0ID0gdmVydGV4RGF0YVs3XVxuXG4gICAgICAgIG1pblggPSB4MTtcbiAgICAgICAgbWluWCA9IHgyIDwgbWluWCA/IHgyIDogbWluWDtcbiAgICAgICAgbWluWCA9IHgzIDwgbWluWCA/IHgzIDogbWluWDtcbiAgICAgICAgbWluWCA9IHg0IDwgbWluWCA/IHg0IDogbWluWDtcblxuICAgICAgICBtaW5ZID0geTE7XG4gICAgICAgIG1pblkgPSB5MiA8IG1pblkgPyB5MiA6IG1pblk7XG4gICAgICAgIG1pblkgPSB5MyA8IG1pblkgPyB5MyA6IG1pblk7XG4gICAgICAgIG1pblkgPSB5NCA8IG1pblkgPyB5NCA6IG1pblk7XG5cbiAgICAgICAgbWF4WCA9IHgxO1xuICAgICAgICBtYXhYID0geDIgPiBtYXhYID8geDIgOiBtYXhYO1xuICAgICAgICBtYXhYID0geDMgPiBtYXhYID8geDMgOiBtYXhYO1xuICAgICAgICBtYXhYID0geDQgPiBtYXhYID8geDQgOiBtYXhYO1xuXG4gICAgICAgIG1heFkgPSB5MTtcbiAgICAgICAgbWF4WSA9IHkyID4gbWF4WSA/IHkyIDogbWF4WTtcbiAgICAgICAgbWF4WSA9IHkzID4gbWF4WSA/IHkzIDogbWF4WTtcbiAgICAgICAgbWF4WSA9IHk0ID4gbWF4WSA/IHk0IDogbWF4WTtcblxuICAgICAgICAvLyBjaGVjayBmb3IgY2hpbGRyZW5cbiAgICAgICAgaWYodGhpcy5jaGlsZHJlbi5sZW5ndGgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHZhciBjaGlsZEJvdW5kcyA9IHRoaXMuY29udGFpbmVyR2V0Qm91bmRzKCk7XG5cbiAgICAgICAgICAgIHcwID0gY2hpbGRCb3VuZHMueDtcbiAgICAgICAgICAgIHcxID0gY2hpbGRCb3VuZHMueCArIGNoaWxkQm91bmRzLndpZHRoO1xuICAgICAgICAgICAgaDAgPSBjaGlsZEJvdW5kcy55O1xuICAgICAgICAgICAgaDEgPSBjaGlsZEJvdW5kcy55ICsgY2hpbGRCb3VuZHMuaGVpZ2h0O1xuXG4gICAgICAgICAgICBtaW5YID0gKG1pblggPCB3MCkgPyBtaW5YIDogdzA7XG4gICAgICAgICAgICBtaW5ZID0gKG1pblkgPCBoMCkgPyBtaW5ZIDogaDA7XG5cbiAgICAgICAgICAgIG1heFggPSAobWF4WCA+IHcxKSA/IG1heFggOiB3MTtcbiAgICAgICAgICAgIG1heFkgPSAobWF4WSA+IGgxKSA/IG1heFkgOiBoMTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBib3VuZHMgPSB0aGlzLl9ib3VuZHM7XG5cbiAgICAgICAgYm91bmRzLnggPSBtaW5YO1xuICAgICAgICBib3VuZHMud2lkdGggPSBtYXhYIC0gbWluWDtcblxuICAgICAgICBib3VuZHMueSA9IG1pblk7XG4gICAgICAgIGJvdW5kcy5oZWlnaHQgPSBtYXhZIC0gbWluWTtcblxuICAgICAgICAvLyBzdG9yZSBhIHJlZmVyZW5jZSBzbyB0aGF0IGlmIHRoaXMgZnVuY3Rpb24gZ2V0cyBjYWxsZWQgYWdhaW4gaW4gdGhlIHJlbmRlciBjeWNsZSB3ZSBkbyBub3QgaGF2ZSB0byByZWNhbGN1bGF0ZVxuICAgICAgICB0aGlzLl9jdXJyZW50Qm91bmRzID0gYm91bmRzO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLl9jdXJyZW50Qm91bmRzO1xufTtcblxuLyoqXG4gKiBHZXRzIHRoZSBsb2NhbCBib3VuZHMgb2YgdGhlIHNwcml0ZSBvYmplY3QuXG4gKlxuICovXG5TcHJpdGUucHJvdG90eXBlLmdldExvY2FsQm91bmRzID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLl9ib3VuZHMueCA9IC10aGlzLl90ZXh0dXJlLl9mcmFtZS53aWR0aCAqIHRoaXMuYW5jaG9yLng7XG4gICAgdGhpcy5fYm91bmRzLnkgPSAtdGhpcy5fdGV4dHVyZS5fZnJhbWUuaGVpZ2h0ICogdGhpcy5hbmNob3IueTtcbiAgICB0aGlzLl9ib3VuZHMud2lkdGggPSB0aGlzLl90ZXh0dXJlLl9mcmFtZS53aWR0aDtcbiAgICB0aGlzLl9ib3VuZHMuaGVpZ2h0ID0gdGhpcy5fdGV4dHVyZS5fZnJhbWUuaGVpZ2h0O1xuICAgIHJldHVybiB0aGlzLl9ib3VuZHM7XG59O1xuXG4vKipcbiogVGVzdHMgaWYgYSBwb2ludCBpcyBpbnNpZGUgdGhpcyBzcHJpdGVcbipcbiogQHBhcmFtIHBvaW50IHtQSVhJLlBvaW50fSB0aGUgcG9pbnQgdG8gdGVzdFxuKiBAcmV0dXJuIHtib29sZWFufSB0aGUgcmVzdWx0IG9mIHRoZSB0ZXN0XG4qL1xuU3ByaXRlLnByb3RvdHlwZS5jb250YWluc1BvaW50ID0gZnVuY3Rpb24oIHBvaW50IClcbntcbiAgICB0aGlzLndvcmxkVHJhbnNmb3JtLmFwcGx5SW52ZXJzZShwb2ludCwgIHRlbXBQb2ludCk7XG5cbiAgICB2YXIgd2lkdGggPSB0aGlzLl90ZXh0dXJlLl9mcmFtZS53aWR0aDtcbiAgICB2YXIgaGVpZ2h0ID0gdGhpcy5fdGV4dHVyZS5fZnJhbWUuaGVpZ2h0O1xuICAgIHZhciB4MSA9IC13aWR0aCAqIHRoaXMuYW5jaG9yLng7XG4gICAgdmFyIHkxO1xuXG4gICAgaWYgKCB0ZW1wUG9pbnQueCA+IHgxICYmIHRlbXBQb2ludC54IDwgeDEgKyB3aWR0aCApXG4gICAge1xuICAgICAgICB5MSA9IC1oZWlnaHQgKiB0aGlzLmFuY2hvci55O1xuXG4gICAgICAgIGlmICggdGVtcFBvaW50LnkgPiB5MSAmJiB0ZW1wUG9pbnQueSA8IHkxICsgaGVpZ2h0IClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2U7XG59O1xuXG4vKipcbiogUmVuZGVycyB0aGUgb2JqZWN0IHVzaW5nIHRoZSBDYW52YXMgcmVuZGVyZXJcbipcbiogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLkNhbnZhc1JlbmRlcmVyfSBUaGUgcmVuZGVyZXJcbiogQHByaXZhdGVcbiovXG5TcHJpdGUucHJvdG90eXBlLl9yZW5kZXJDYW52YXMgPSBmdW5jdGlvbiAocmVuZGVyZXIpXG57XG4gICAgaWYgKHRoaXMudGV4dHVyZS5jcm9wLndpZHRoIDw9IDAgfHwgdGhpcy50ZXh0dXJlLmNyb3AuaGVpZ2h0IDw9IDApXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFyIGNvbXBvc2l0ZU9wZXJhdGlvbiA9IHJlbmRlcmVyLmJsZW5kTW9kZXNbdGhpcy5ibGVuZE1vZGVdO1xuICAgIGlmIChjb21wb3NpdGVPcGVyYXRpb24gIT09IHJlbmRlcmVyLmNvbnRleHQuZ2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uKVxuICAgIHtcbiAgICAgICAgcmVuZGVyZXIuY29udGV4dC5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb24gPSBjb21wb3NpdGVPcGVyYXRpb247XG4gICAgfVxuXG4gICAgLy8gIElnbm9yZSBudWxsIHNvdXJjZXNcbiAgICBpZiAodGhpcy50ZXh0dXJlLnZhbGlkKVxuICAgIHtcbiAgICAgICAgdmFyIHRleHR1cmUgPSB0aGlzLl90ZXh0dXJlLFxuICAgICAgICAgICAgd3QgPSB0aGlzLndvcmxkVHJhbnNmb3JtLFxuICAgICAgICAgICAgZHgsXG4gICAgICAgICAgICBkeSxcbiAgICAgICAgICAgIHdpZHRoLFxuICAgICAgICAgICAgaGVpZ2h0O1xuXG4gICAgICAgIHJlbmRlcmVyLmNvbnRleHQuZ2xvYmFsQWxwaGEgPSB0aGlzLndvcmxkQWxwaGE7XG5cbiAgICAgICAgLy8gSWYgc21vb3RoaW5nRW5hYmxlZCBpcyBzdXBwb3J0ZWQgYW5kIHdlIG5lZWQgdG8gY2hhbmdlIHRoZSBzbW9vdGhpbmcgcHJvcGVydHkgZm9yIHRoaXMgdGV4dHVyZVxuICAgICAgICB2YXIgc21vb3RoaW5nRW5hYmxlZCA9IHRleHR1cmUuYmFzZVRleHR1cmUuc2NhbGVNb2RlID09PSBDT05TVC5TQ0FMRV9NT0RFUy5MSU5FQVI7XG4gICAgICAgIGlmIChyZW5kZXJlci5zbW9vdGhQcm9wZXJ0eSAmJiByZW5kZXJlci5jb250ZXh0W3JlbmRlcmVyLnNtb290aFByb3BlcnR5XSAhPT0gc21vb3RoaW5nRW5hYmxlZClcbiAgICAgICAge1xuICAgICAgICAgICAgcmVuZGVyZXIuY29udGV4dFtyZW5kZXJlci5zbW9vdGhQcm9wZXJ0eV0gPSBzbW9vdGhpbmdFbmFibGVkO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gSWYgdGhlIHRleHR1cmUgaXMgdHJpbW1lZCB3ZSBvZmZzZXQgYnkgdGhlIHRyaW0geC95LCBvdGhlcndpc2Ugd2UgdXNlIHRoZSBmcmFtZSBkaW1lbnNpb25zXG5cbiAgICAgICAgaWYodGV4dHVyZS5yb3RhdGUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHdpZHRoID0gdGV4dHVyZS5jcm9wLmhlaWdodDtcbiAgICAgICAgICAgIGhlaWdodCA9IHRleHR1cmUuY3JvcC53aWR0aDtcblxuICAgICAgICAgICAgZHggPSAodGV4dHVyZS50cmltKSA/IHRleHR1cmUudHJpbS55IC0gdGhpcy5hbmNob3IueSAqIHRleHR1cmUudHJpbS5oZWlnaHQgOiB0aGlzLmFuY2hvci55ICogLXRleHR1cmUuX2ZyYW1lLmhlaWdodDtcbiAgICAgICAgICAgIGR5ID0gKHRleHR1cmUudHJpbSkgPyB0ZXh0dXJlLnRyaW0ueCAtIHRoaXMuYW5jaG9yLnggKiB0ZXh0dXJlLnRyaW0ud2lkdGggOiB0aGlzLmFuY2hvci54ICogLXRleHR1cmUuX2ZyYW1lLndpZHRoO1xuICAgICAgIFxuICAgICAgICAgICAgZHggKz0gd2lkdGg7XG5cbiAgICAgICAgICAgIHd0LnR4ID0gZHkgKiB3dC5hICsgZHggKiB3dC5jICsgd3QudHg7XG4gICAgICAgICAgICB3dC50eSA9IGR5ICogd3QuYiArIGR4ICogd3QuZCArIHd0LnR5O1xuXG4gICAgICAgICAgICB2YXIgdGVtcCA9IHd0LmE7XG4gICAgICAgICAgICB3dC5hICA9IC13dC5jO1xuICAgICAgICAgICAgd3QuYyAgPSAgdGVtcDtcblxuICAgICAgICAgICAgdGVtcCA9IHd0LmI7XG4gICAgICAgICAgICB3dC5iICA9IC13dC5kO1xuICAgICAgICAgICAgd3QuZCAgPSAgdGVtcDtcblxuICAgICAgICAgICAgLy8gdGhlIGFuY2hvciBoYXMgYWxyZWFkeSBiZWVuIGFwcGxpZWQgYWJvdmUsIHNvIGxldHMgc2V0IGl0IHRvIHplcm9cbiAgICAgICAgICAgIGR4ID0gMDtcbiAgICAgICAgICAgIGR5ID0gMDtcblxuICAgICAgICB9XG4gICAgICAgIGVsc2VcbiAgICAgICAge1xuICAgICAgICAgICAgd2lkdGggPSB0ZXh0dXJlLmNyb3Aud2lkdGg7XG4gICAgICAgICAgICBoZWlnaHQgPSB0ZXh0dXJlLmNyb3AuaGVpZ2h0O1xuXG4gICAgICAgICAgICBkeCA9ICh0ZXh0dXJlLnRyaW0pID8gdGV4dHVyZS50cmltLnggLSB0aGlzLmFuY2hvci54ICogdGV4dHVyZS50cmltLndpZHRoIDogdGhpcy5hbmNob3IueCAqIC10ZXh0dXJlLl9mcmFtZS53aWR0aDtcbiAgICAgICAgICAgIGR5ID0gKHRleHR1cmUudHJpbSkgPyB0ZXh0dXJlLnRyaW0ueSAtIHRoaXMuYW5jaG9yLnkgKiB0ZXh0dXJlLnRyaW0uaGVpZ2h0IDogdGhpcy5hbmNob3IueSAqIC10ZXh0dXJlLl9mcmFtZS5oZWlnaHQ7XG4gICAgICAgIH1cblxuXG5cbiAgICAgICAgLy8gQWxsb3cgZm9yIHBpeGVsIHJvdW5kaW5nXG4gICAgICAgIGlmIChyZW5kZXJlci5yb3VuZFBpeGVscylcbiAgICAgICAge1xuICAgICAgICAgICAgcmVuZGVyZXIuY29udGV4dC5zZXRUcmFuc2Zvcm0oXG4gICAgICAgICAgICAgICAgd3QuYSxcbiAgICAgICAgICAgICAgICB3dC5iLFxuICAgICAgICAgICAgICAgIHd0LmMsXG4gICAgICAgICAgICAgICAgd3QuZCxcbiAgICAgICAgICAgICAgICAod3QudHggKiByZW5kZXJlci5yZXNvbHV0aW9uKSB8IDAsXG4gICAgICAgICAgICAgICAgKHd0LnR5ICogcmVuZGVyZXIucmVzb2x1dGlvbikgfCAwXG4gICAgICAgICAgICApO1xuXG4gICAgICAgICAgICBkeCA9IGR4IHwgMDtcbiAgICAgICAgICAgIGR5ID0gZHkgfCAwO1xuICAgICAgICB9XG4gICAgICAgIGVsc2VcbiAgICAgICAge1xuXG4gICAgICAgICAgICByZW5kZXJlci5jb250ZXh0LnNldFRyYW5zZm9ybShcbiAgICAgICAgICAgICAgICB3dC5hLFxuICAgICAgICAgICAgICAgIHd0LmIsXG4gICAgICAgICAgICAgICAgd3QuYyxcbiAgICAgICAgICAgICAgICB3dC5kLFxuICAgICAgICAgICAgICAgIHd0LnR4ICogcmVuZGVyZXIucmVzb2x1dGlvbixcbiAgICAgICAgICAgICAgICB3dC50eSAqIHJlbmRlcmVyLnJlc29sdXRpb25cbiAgICAgICAgICAgICk7XG5cblxuICAgICAgICB9XG5cbiAgICAgICAgdmFyIHJlc29sdXRpb24gPSB0ZXh0dXJlLmJhc2VUZXh0dXJlLnJlc29sdXRpb247XG5cbiAgICAgICAgaWYgKHRoaXMudGludCAhPT0gMHhGRkZGRkYpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmNhY2hlZFRpbnQgIT09IHRoaXMudGludClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB0aGlzLmNhY2hlZFRpbnQgPSB0aGlzLnRpbnQ7XG5cbiAgICAgICAgICAgICAgICAvLyBUT0RPIGNsZWFuIHVwIGNhY2hpbmcgLSBob3cgdG8gY2xlYW4gdXAgdGhlIGNhY2hlcz9cbiAgICAgICAgICAgICAgICB0aGlzLnRpbnRlZFRleHR1cmUgPSBDYW52YXNUaW50ZXIuZ2V0VGludGVkVGV4dHVyZSh0aGlzLCB0aGlzLnRpbnQpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZW5kZXJlci5jb250ZXh0LmRyYXdJbWFnZShcbiAgICAgICAgICAgICAgICB0aGlzLnRpbnRlZFRleHR1cmUsXG4gICAgICAgICAgICAgICAgMCxcbiAgICAgICAgICAgICAgICAwLFxuICAgICAgICAgICAgICAgIHdpZHRoICogcmVzb2x1dGlvbixcbiAgICAgICAgICAgICAgICBoZWlnaHQgKiByZXNvbHV0aW9uLFxuICAgICAgICAgICAgICAgIGR4ICogcmVuZGVyZXIucmVzb2x1dGlvbixcbiAgICAgICAgICAgICAgICBkeSAqIHJlbmRlcmVyLnJlc29sdXRpb24sXG4gICAgICAgICAgICAgICAgd2lkdGggKiByZW5kZXJlci5yZXNvbHV0aW9uLFxuICAgICAgICAgICAgICAgIGhlaWdodCAqIHJlbmRlcmVyLnJlc29sdXRpb25cbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgICByZW5kZXJlci5jb250ZXh0LmRyYXdJbWFnZShcbiAgICAgICAgICAgICAgICB0ZXh0dXJlLmJhc2VUZXh0dXJlLnNvdXJjZSxcbiAgICAgICAgICAgICAgICB0ZXh0dXJlLmNyb3AueCAqIHJlc29sdXRpb24sXG4gICAgICAgICAgICAgICAgdGV4dHVyZS5jcm9wLnkgKiByZXNvbHV0aW9uLFxuICAgICAgICAgICAgICAgIHdpZHRoICogcmVzb2x1dGlvbixcbiAgICAgICAgICAgICAgICBoZWlnaHQgKiByZXNvbHV0aW9uLFxuICAgICAgICAgICAgICAgIGR4ICAqIHJlbmRlcmVyLnJlc29sdXRpb24sXG4gICAgICAgICAgICAgICAgZHkgICogcmVuZGVyZXIucmVzb2x1dGlvbixcbiAgICAgICAgICAgICAgICB3aWR0aCAqIHJlbmRlcmVyLnJlc29sdXRpb24sXG4gICAgICAgICAgICAgICAgaGVpZ2h0ICogcmVuZGVyZXIucmVzb2x1dGlvblxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgIH1cbn07XG5cbi8qKlxuICogRGVzdHJveXMgdGhpcyBzcHJpdGUgYW5kIG9wdGlvbmFsbHkgaXRzIHRleHR1cmVcbiAqXG4gKiBAcGFyYW0gW2Rlc3Ryb3lUZXh0dXJlPWZhbHNlXSB7Ym9vbGVhbn0gU2hvdWxkIGl0IGRlc3Ryb3kgdGhlIGN1cnJlbnQgdGV4dHVyZSBvZiB0aGUgc3ByaXRlIGFzIHdlbGxcbiAqIEBwYXJhbSBbZGVzdHJveUJhc2VUZXh0dXJlPWZhbHNlXSB7Ym9vbGVhbn0gU2hvdWxkIGl0IGRlc3Ryb3kgdGhlIGJhc2UgdGV4dHVyZSBvZiB0aGUgc3ByaXRlIGFzIHdlbGxcbiAqL1xuU3ByaXRlLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKGRlc3Ryb3lUZXh0dXJlLCBkZXN0cm95QmFzZVRleHR1cmUpXG57XG4gICAgQ29udGFpbmVyLnByb3RvdHlwZS5kZXN0cm95LmNhbGwodGhpcyk7XG5cbiAgICB0aGlzLmFuY2hvciA9IG51bGw7XG5cbiAgICBpZiAoZGVzdHJveVRleHR1cmUpXG4gICAge1xuICAgICAgICB0aGlzLl90ZXh0dXJlLmRlc3Ryb3koZGVzdHJveUJhc2VUZXh0dXJlKTtcbiAgICB9XG5cbiAgICB0aGlzLl90ZXh0dXJlID0gbnVsbDtcbiAgICB0aGlzLnNoYWRlciA9IG51bGw7XG59O1xuXG4vLyBzb21lIGhlbHBlciBmdW5jdGlvbnMuLlxuXG4vKipcbiAqIEhlbHBlciBmdW5jdGlvbiB0aGF0IGNyZWF0ZXMgYSBzcHJpdGUgdGhhdCB3aWxsIGNvbnRhaW4gYSB0ZXh0dXJlIGZyb20gdGhlIFRleHR1cmVDYWNoZSBiYXNlZCBvbiB0aGUgZnJhbWVJZFxuICogVGhlIGZyYW1lIGlkcyBhcmUgY3JlYXRlZCB3aGVuIGEgVGV4dHVyZSBwYWNrZXIgZmlsZSBoYXMgYmVlbiBsb2FkZWRcbiAqXG4gKiBAc3RhdGljXG4gKiBAcGFyYW0gZnJhbWVJZCB7c3RyaW5nfSBUaGUgZnJhbWUgSWQgb2YgdGhlIHRleHR1cmUgaW4gdGhlIGNhY2hlXG4gKiBAcGFyYW0gW2Nyb3Nzb3JpZ2luPShhdXRvKV0ge2Jvb2xlYW59IGlmIHlvdSB3YW50IHRvIHNwZWNpZnkgdGhlIGNyb3NzLW9yaWdpbiBwYXJhbWV0ZXJcbiAqIEBwYXJhbSBbc2NhbGVNb2RlPVBJWEkuU0NBTEVfTU9ERVMuREVGQVVMVF0ge251bWJlcn0gaWYgeW91IHdhbnQgdG8gc3BlY2lmeSB0aGUgc2NhbGUgbW9kZSwgc2VlIHtAbGluayBQSVhJLlNDQUxFX01PREVTfSBmb3IgcG9zc2libGUgdmFsdWVzXG4gKiBAcmV0dXJuIHtQSVhJLlNwcml0ZX0gQSBuZXcgU3ByaXRlIHVzaW5nIGEgdGV4dHVyZSBmcm9tIHRoZSB0ZXh0dXJlIGNhY2hlIG1hdGNoaW5nIHRoZSBmcmFtZUlkXG4gKi9cblNwcml0ZS5mcm9tRnJhbWUgPSBmdW5jdGlvbiAoZnJhbWVJZClcbntcbiAgICB2YXIgdGV4dHVyZSA9IHV0aWxzLlRleHR1cmVDYWNoZVtmcmFtZUlkXTtcblxuICAgIGlmICghdGV4dHVyZSlcbiAgICB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignVGhlIGZyYW1lSWQgXCInICsgZnJhbWVJZCArICdcIiBkb2VzIG5vdCBleGlzdCBpbiB0aGUgdGV4dHVyZSBjYWNoZScpO1xuICAgIH1cblxuICAgIHJldHVybiBuZXcgU3ByaXRlKHRleHR1cmUpO1xufTtcblxuLyoqXG4gKiBIZWxwZXIgZnVuY3Rpb24gdGhhdCBjcmVhdGVzIGEgc3ByaXRlIHRoYXQgd2lsbCBjb250YWluIGEgdGV4dHVyZSBiYXNlZCBvbiBhbiBpbWFnZSB1cmxcbiAqIElmIHRoZSBpbWFnZSBpcyBub3QgaW4gdGhlIHRleHR1cmUgY2FjaGUgaXQgd2lsbCBiZSBsb2FkZWRcbiAqXG4gKiBAc3RhdGljXG4gKiBAcGFyYW0gaW1hZ2VJZCB7c3RyaW5nfSBUaGUgaW1hZ2UgdXJsIG9mIHRoZSB0ZXh0dXJlXG4gKiBAcmV0dXJuIHtQSVhJLlNwcml0ZX0gQSBuZXcgU3ByaXRlIHVzaW5nIGEgdGV4dHVyZSBmcm9tIHRoZSB0ZXh0dXJlIGNhY2hlIG1hdGNoaW5nIHRoZSBpbWFnZSBpZFxuICovXG5TcHJpdGUuZnJvbUltYWdlID0gZnVuY3Rpb24gKGltYWdlSWQsIGNyb3Nzb3JpZ2luLCBzY2FsZU1vZGUpXG57XG4gICAgcmV0dXJuIG5ldyBTcHJpdGUoVGV4dHVyZS5mcm9tSW1hZ2UoaW1hZ2VJZCwgY3Jvc3NvcmlnaW4sIHNjYWxlTW9kZSkpO1xufTtcbiIsInZhciBPYmplY3RSZW5kZXJlciA9IHJlcXVpcmUoJy4uLy4uL3JlbmRlcmVycy93ZWJnbC91dGlscy9PYmplY3RSZW5kZXJlcicpLFxuICAgIFdlYkdMUmVuZGVyZXIgPSByZXF1aXJlKCcuLi8uLi9yZW5kZXJlcnMvd2ViZ2wvV2ViR0xSZW5kZXJlcicpLFxuICAgIFRleHR1cmVTaGFkZXIgPSByZXF1aXJlKCcuLi8uLi9yZW5kZXJlcnMvd2ViZ2wvc2hhZGVycy9fVGV4dHVyZVNoYWRlcicpLFxuICAgIGNyZWF0ZUluZGljZXNGb3JRdWFkcyA9IHJlcXVpcmUoJy4uLy4uL3V0aWxzL2NyZWF0ZUluZGljZXNGb3JRdWFkcycpLFxuICAgIGdlbmVyYXRlTXVsdGlUZXh0dXJlU2hhZGVyID0gcmVxdWlyZSgnLi9nZW5lcmF0ZU11bHRpVGV4dHVyZVNoYWRlcicpLFxuICAgIENPTlNUID0gcmVxdWlyZSgnLi4vLi4vY29uc3QnKSxcbiAgICBnbENvcmUgPSByZXF1aXJlKCdwaXhpLWdsLWNvcmUnKTtcblxuLyoqXG4gKiBAYXV0aG9yIE1hdCBHcm92ZXNcbiAqXG4gKiBCaWcgdGhhbmtzIHRvIHRoZSB2ZXJ5IGNsZXZlciBNYXR0IERlc0xhdXJpZXJzIDxtYXR0ZGVzbD4gaHR0cHM6Ly9naXRodWIuY29tL21hdHRkZXNsL1xuICogZm9yIGNyZWF0aW5nIHRoZSBvcmlnaW5hbCBwaXhpIHZlcnNpb24hXG4gKiBBbHNvIGEgdGhhbmtzIHRvIGh0dHBzOi8vZ2l0aHViLmNvbS9iY2hldmFsaWVyIGZvciB0d2Vha2luZyB0aGUgdGludCBhbmQgYWxwaGEgc28gdGhhdCB0aGV5IG5vdyBzaGFyZSA0IGJ5dGVzIG9uIHRoZSB2ZXJ0ZXggYnVmZmVyXG4gKlxuICogSGVhdmlseSBpbnNwaXJlZCBieSBMaWJHRFgncyBTcHJpdGVSZW5kZXJlcjpcbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS9saWJnZHgvbGliZ2R4L2Jsb2IvbWFzdGVyL2dkeC9zcmMvY29tL2JhZGxvZ2ljL2dkeC9ncmFwaGljcy9nMmQvU3ByaXRlUmVuZGVyZXIuamF2YVxuICovXG5cbi8qKlxuICogUmVuZGVyZXIgZGVkaWNhdGVkIHRvIGRyYXdpbmcgYW5kIGJhdGNoaW5nIHNwcml0ZXMuXG4gKlxuICogQGNsYXNzXG4gKiBAcHJpdmF0ZVxuICogQG1lbWJlcm9mIFBJWElcbiAqIEBleHRlbmRzIFBJWEkuT2JqZWN0UmVuZGVyZXJcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5XZWJHTFJlbmRlcmVyfSBUaGUgcmVuZGVyZXIgdGhpcyBzcHJpdGUgYmF0Y2ggd29ya3MgZm9yLlxuICovXG5mdW5jdGlvbiBTcHJpdGVSZW5kZXJlcihyZW5kZXJlcilcbntcbiAgICBPYmplY3RSZW5kZXJlci5jYWxsKHRoaXMsIHJlbmRlcmVyKTtcblxuICAgIC8qKlxuICAgICAqIE51bWJlciBvZiB2YWx1ZXMgc2VudCBpbiB0aGUgdmVydGV4IGJ1ZmZlci5cbiAgICAgKiBwb3NpdGlvblgsIHBvc2l0aW9uWSwgY29sb3JSLCBjb2xvckcsIGNvbG9yQiA9IDVcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLnZlcnRTaXplID0gNTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBzaXplIG9mIHRoZSB2ZXJ0ZXggaW5mb3JtYXRpb24gaW4gYnl0ZXMuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy52ZXJ0Qnl0ZVNpemUgPSB0aGlzLnZlcnRTaXplICogNDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBudW1iZXIgb2YgaW1hZ2VzIGluIHRoZSBTcHJpdGVCYXRjaCBiZWZvcmUgaXQgZmx1c2hlcy5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLnNpemUgPSBDT05TVC5TUFJJVEVfQkFUQ0hfU0laRTsgLy8gMjAwMCBpcyBhIG5pY2UgYmFsYW5jZSBiZXR3ZWVuIG1vYmlsZSAvIGRlc2t0b3BcblxuICAgIC8vIHRoZSB0b3RhbCBudW1iZXIgb2YgYnl0ZXMgaW4gb3VyIGJhdGNoXG4gICAgdmFyIG51bVZlcnRzID0gKHRoaXMuc2l6ZSAqIDQpICogdGhpcy52ZXJ0Qnl0ZVNpemU7XG5cbiAgICAvLyB0aGUgdG90YWwgbnVtYmVyIG9mIGluZGljZXMgaW4gb3VyIGJhdGNoLCB0aGVyZSBhcmUgNiBwb2ludHMgcGVyIHF1YWQuXG4gICAgdmFyIG51bUluZGljZXMgPSB0aGlzLnNpemUgKiA2O1xuXG4gICAgLyoqXG4gICAgICogSG9sZHMgdGhlIHZlcnRleCBkYXRhIHRoYXQgd2lsbCBiZSBzZW50IHRvIHRoZSB2ZXJ0ZXggc2hhZGVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7QXJyYXlCdWZmZXJ9XG4gICAgICovXG4gICAgdGhpcy52ZXJ0aWNlcyA9IG5ldyBBcnJheUJ1ZmZlcihudW1WZXJ0cyk7XG5cbiAgICAvKipcbiAgICAgKiBWaWV3IG9uIHRoZSB2ZXJ0aWNlcyBhcyBhIEZsb2F0MzJBcnJheSBmb3IgcG9zaXRpb25zXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtGbG9hdDMyQXJyYXl9XG4gICAgICovXG4gICAgdGhpcy5wb3NpdGlvbnMgPSBuZXcgRmxvYXQzMkFycmF5KHRoaXMudmVydGljZXMpO1xuICAgIFxuICAgIC8qKlxuICAgICAqIFZpZXcgb24gdGhlIHZlcnRpY2VzIGFzIGEgVWludDMyQXJyYXkgZm9yIHV2c1xuICAgICAqXG4gICAgICogQG1lbWJlciB7RmxvYXQzMkFycmF5fVxuICAgICAqL1xuICAgIHRoaXMudXZzID0gbmV3IFVpbnQzMkFycmF5KHRoaXMudmVydGljZXMpO1xuXG4gICAgLyoqXG4gICAgICogVmlldyBvbiB0aGUgdmVydGljZXMgYXMgYSBVaW50MzJBcnJheSBmb3IgY29sb3JzXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtVaW50MzJBcnJheX1cbiAgICAgKi9cbiAgICB0aGlzLmNvbG9ycyA9IG5ldyBVaW50MzJBcnJheSh0aGlzLnZlcnRpY2VzKTtcblxuICAgIC8qKlxuICAgICAqIEhvbGRzIHRoZSBpbmRpY2VzIG9mIHRoZSBnZW9tZXRyeSAocXVhZHMpIHRvIGRyYXdcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1VpbnQxNkFycmF5fVxuICAgICAqL1xuICAgIHRoaXMuaW5kaWNlcyA9IGNyZWF0ZUluZGljZXNGb3JRdWFkcyh0aGlzLnNpemUpXG5cbiAgICAvKipcbiAgICAgKiBUaGUgZGVmYXVsdCBzaGFkZXIgdGhhdCBpcyB1c2VkIGlmIGEgc3ByaXRlIGRvZXNuJ3QgaGF2ZSBhIG1vcmUgc3BlY2lmaWMgb25lLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5TaGFkZXJ9XG4gICAgICovXG4gICAgdGhpcy5zaGFkZXIgPSBudWxsO1xuXG4gICAgdGhpcy50ZXh0dXJlQ291bnQgPSAwO1xuICAgIHRoaXMuY3VycmVudEluZGV4ID0gMDtcbiAgXG4gICAgdGhpcy5ncm91cENvdW50ID0gMDtcbiAgICB0aGlzLmdyb3VwcyA9IFtdO1xuICAgIFxuICAgIC8vVE9ETyAtIDMwMCBpcyBhIGJpdCBtYWdpYywgZmlndXJlIG91dCBhIG5pY2VyIGFtb3VudCFcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuc2l6ZTsgaSsrKSBcbiAgICB7XG4gICAgICAgIHRoaXMuZ3JvdXBzW2ldID0ge3RleHR1cmVzOltdLCB0ZXh0dXJlQ291bnQ6MCwgaWRzOltdLCBzaXplOjAsIHN0YXJ0OjAsIGJsZW5kOjB9OyBcbiAgICB9O1xuICAgIFxuICAgIHRoaXMuY3VycmVudEdyb3VwID0gdGhpcy5ncm91cHNbdGhpcy5ncm91cENvdW50KytdO1xuXG4gICAgdGhpcy5jdXJyZW50VGV4dHVyZSA9IG51bGw7ICAgIFxufVxuXG5cblNwcml0ZVJlbmRlcmVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoT2JqZWN0UmVuZGVyZXIucHJvdG90eXBlKTtcblNwcml0ZVJlbmRlcmVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFNwcml0ZVJlbmRlcmVyO1xubW9kdWxlLmV4cG9ydHMgPSBTcHJpdGVSZW5kZXJlcjtcblxuV2ViR0xSZW5kZXJlci5yZWdpc3RlclBsdWdpbignc3ByaXRlJywgU3ByaXRlUmVuZGVyZXIpO1xuXG4vKipcbiAqIFNldHMgdXAgdGhlIHJlbmRlcmVyIGNvbnRleHQgYW5kIG5lY2Vzc2FyeSBidWZmZXJzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0gZ2wge1dlYkdMUmVuZGVyaW5nQ29udGV4dH0gdGhlIGN1cnJlbnQgV2ViR0wgZHJhd2luZyBjb250ZXh0XG4gKi9cblNwcml0ZVJlbmRlcmVyLnByb3RvdHlwZS5vbkNvbnRleHRDaGFuZ2UgPSBmdW5jdGlvbiAoKVxue1xuICAgIHZhciBnbCA9IHRoaXMucmVuZGVyZXIuZ2w7XG5cbiAgICB0aGlzLk1BWF9URVhUVUVTID0gZ2wuZ2V0UGFyYW1ldGVyKGdsLk1BWF9URVhUVVJFX0lNQUdFX1VOSVRTKTtcblxuICAgIHRoaXMuX3NoYWRlciA9IGdlbmVyYXRlTXVsdGlUZXh0dXJlU2hhZGVyKGdsLCB0aGlzLk1BWF9URVhUVUVTKS8vbmV3IFRleHR1cmVTaGFkZXIoZ2wpO1xuXG4gICAgLy8gc2V0dXAgZGVmYXVsdCBzaGFkZXJcbiAgICB0aGlzLnNoYWRlciA9IHRoaXMucmVuZGVyZXIuc2hhZGVyTWFuYWdlci5kZWZhdWx0U2hhZGVyO1xuXG4gICAgLy8gY3JlYXRlIGEgY291cGxlIG9mIGJ1ZmZlcnNcbiAgICB0aGlzLnZlcnRleEJ1ZmZlciA9IGdsQ29yZS5HTEJ1ZmZlci5jcmVhdGVWZXJ0ZXhCdWZmZXIoZ2wsIG51bGwsIGdsLkRZTkFNSUNfRFJBVyk7XG4gICAgdGhpcy5pbmRleEJ1ZmZlciA9IGdsQ29yZS5HTEJ1ZmZlci5jcmVhdGVJbmRleEJ1ZmZlcihnbCwgdGhpcy5pbmRpY2VzLCBnbC5TVEFUSUNfRFJBVyk7XG5cbiAgICAvLyBidWlsZCB0aGUgdmFvIG9iamVjdCB0aGF0IHdpbGwgcmVuZGVyLi5cbiAgICB0aGlzLnZhbyA9IG5ldyBnbENvcmUuVmVydGV4QXJyYXlPYmplY3QoZ2wpO1xuXG4gICAgdGhpcy52YW8uYWRkSW5kZXgodGhpcy5pbmRleEJ1ZmZlcik7XG4gICAgdGhpcy52YW8uYWRkQXR0cmlidXRlKHRoaXMudmVydGV4QnVmZmVyLCB0aGlzLl9zaGFkZXIuYXR0cmlidXRlcy5hVmVydGV4UG9zaXRpb24sIGdsLkZMT0FULCBmYWxzZSwgdGhpcy52ZXJ0Qnl0ZVNpemUsIDApO1xuICAgIHRoaXMudmFvLmFkZEF0dHJpYnV0ZSh0aGlzLnZlcnRleEJ1ZmZlciwgdGhpcy5fc2hhZGVyLmF0dHJpYnV0ZXMuYVRleHR1cmVDb29yZCwgZ2wuVU5TSUdORURfU0hPUlQsIHRydWUsIHRoaXMudmVydEJ5dGVTaXplLCAyICogNCk7XG4gICAgdGhpcy52YW8uYWRkQXR0cmlidXRlKHRoaXMudmVydGV4QnVmZmVyLCB0aGlzLl9zaGFkZXIuYXR0cmlidXRlcy5hQ29sb3IsIGdsLlVOU0lHTkVEX0JZVEUsIHRydWUsIHRoaXMudmVydEJ5dGVTaXplLCAzICogNCk7XG4gICAgdGhpcy52YW8uYWRkQXR0cmlidXRlKHRoaXMudmVydGV4QnVmZmVyLCB0aGlzLl9zaGFkZXIuYXR0cmlidXRlcy5hVGV4dHVyZUlkLCBnbC5GTE9BVCwgZmFsc2UsIHRoaXMudmVydEJ5dGVTaXplLCA0ICogNCk7XG5cbiAgICB0aGlzLmN1cnJlbnRCbGVuZE1vZGUgPSA5OTk5OTtcbn07XG5cbi8qKlxuICogUmVuZGVycyB0aGUgc3ByaXRlIG9iamVjdC5cbiAqXG4gKiBAcGFyYW0gc3ByaXRlIHtQSVhJLlNwcml0ZX0gdGhlIHNwcml0ZSB0byByZW5kZXIgd2hlbiB1c2luZyB0aGlzIHNwcml0ZWJhdGNoXG4gKi9cblNwcml0ZVJlbmRlcmVyLnByb3RvdHlwZS5yZW5kZXIgPSBmdW5jdGlvbiAoc3ByaXRlKVxue1xuICAgIC8vVE9ETyBzZXQgYmxlbmQgbW9kZXMuLlxuICAgIC8vIGNoZWNrIHRleHR1cmUuLlxuICAgIGlmICh0aGlzLmN1cnJlbnRJbmRleCA+PSB0aGlzLnNpemUpXG4gICAge1xuICAgICAgICB0aGlzLmZsdXNoKCk7XG4gICAgfVxuXG4gIFxuICAgIC8vIGdldCB0aGUgdXZzIGZvciB0aGUgdGV4dHVyZVxuICAgXG5cbiAgICAvLyBpZiB0aGUgdXZzIGhhdmUgbm90IHVwZGF0ZWQgdGhlbiBubyBwb2ludCByZW5kZXJpbmcganVzdCB5ZXQhXG4gICAgaWYgKCFzcHJpdGUudGV4dHVyZS5fdXZzKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgICAvLyBwdXNoIGEgdGV4dHVyZS5cbiAgICAvLyBpbmNyZW1lbnQgdGhlIGJhdGNoc2l6ZVxuICAgIHZhciBuZXh0VGV4dHVyZSA9ICBzcHJpdGUudGV4dHVyZS5iYXNlVGV4dHVyZTtcbiAgICB2YXIgY3VycmVudEdyb3VwID0gdGhpcy5jdXJyZW50R3JvdXA7XG4gICAgdmFyIGk7XG5cbiAgICBpZih0aGlzLmN1cnJlbnRUZXh0dXJlICE9PSBuZXh0VGV4dHVyZSlcbiAgICB7XG4gICAgICAgIHRoaXMuY3VycmVudFRleHR1cmUgPSBuZXh0VGV4dHVyZTtcbiAgICAgICAgXG4gICAgICAgIGlmKCFuZXh0VGV4dHVyZS5fZW5hYmxlZClcbiAgICAgICAge1xuICAgICAgICAgICAgbmV4dFRleHR1cmUuX2VuYWJsZWQgPSB0cnVlO1xuICAgICAgICAgICAgbmV4dFRleHR1cmUuX2lkID0gdGhpcy50ZXh0dXJlQ291bnQ7XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIGlmKHRoaXMudGV4dHVyZUNvdW50ID09PSB0aGlzLk1BWF9URVhUVUVTKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGZvciAoIGkgPSAwOyBpIDwgY3VycmVudEdyb3VwLnRleHR1cmVDb3VudDsgaSsrKSBcbiAgICAgICAgICAgICAgICB7ICAgICBcbiAgICAgICAgICAgICAgICAgICAgY3VycmVudEdyb3VwLnRleHR1cmVzW2ldLl9lbmFibGVkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgIHRoaXMudGV4dHVyZUNvdW50ID0gMDtcblxuICAgICAgICAgICAgICAgIGN1cnJlbnRHcm91cC5zaXplID0gdGhpcy5jdXJyZW50SW5kZXggLSBjdXJyZW50R3JvdXAuc3RhcnQ7XG4gICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICBjdXJyZW50R3JvdXAgPSB0aGlzLmN1cnJlbnRHcm91cCA9IHRoaXMuZ3JvdXBzW3RoaXMuZ3JvdXBDb3VudCsrXTtcbiAgICAgICAgICAgICAgICBjdXJyZW50R3JvdXAudGV4dHVyZUNvdW50ID0gMDtcbiAgICAgICAgICAgICAgICBjdXJyZW50R3JvdXAuc3RhcnQgPSB0aGlzLmN1cnJlbnRJbmRleDtcbiAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY3VycmVudEdyb3VwLnRleHR1cmVzW2N1cnJlbnRHcm91cC50ZXh0dXJlQ291bnQrK10gPSBuZXh0VGV4dHVyZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMudGV4dHVyZUNvdW50Kys7XG4gICAgfVxuXG4gICAgLy8gVE9ETyB0cmltPz9cbiAgICB2YXIgaW5kZXggPSB0aGlzLmN1cnJlbnRJbmRleCAqIHRoaXMudmVydEJ5dGVTaXplO1xuXG4gICAgdGhpcy5jdXJyZW50SW5kZXgrKztcblxuICAgIC8vIHVwbG9hZCB0aGUgc3ByaXRlIGVsZW1ldG5zLi4uXG4gICAgLy8gdGhleSBoYXZlIGFsbCByZWFkeSBiZWVuIGNhbGN1bGF0ZWQgc28gd2UganVzdCBuZWVkIHRvIHB1c2ggdGhlbSBpbnRvIHRoZSBidWZmZXIuXG4gICAgdmFyIGNvbG9ycyA9IHRoaXMuY29sb3JzO1xuICAgIHZhciBwb3NpdGlvbnMgPSB0aGlzLnBvc2l0aW9ucztcbiAgICB2YXIgdmVydGV4RGF0YSA9IHNwcml0ZS52ZXJ0ZXhEYXRhXG4gICAgdmFyIHRpbnQgPSAoc3ByaXRlLnRpbnQgPj4gMTYpICsgKHNwcml0ZS50aW50ICYgMHhmZjAwKSArICgoc3ByaXRlLnRpbnQgJiAweGZmKSA8PCAxNikgKyAoc3ByaXRlLndvcmxkQWxwaGEgKiAyNTUgPDwgMjQpO1xuICAgIHZhciB1dnMgPSBzcHJpdGUudGV4dHVyZS5fdXZzLnV2c191aW50MzI7XG4gICAgLy94eVxuICAgIHBvc2l0aW9uc1tpbmRleCsrXSA9IHZlcnRleERhdGFbMF07XG4gICAgcG9zaXRpb25zW2luZGV4KytdID0gdmVydGV4RGF0YVsxXTtcbiAgICB0aGlzLnV2c1tpbmRleCsrXSA9IHV2c1swXTtcbiAgICBjb2xvcnNbaW5kZXgrK10gPSB0aW50O1xuICAgIHBvc2l0aW9uc1tpbmRleCsrXSA9IG5leHRUZXh0dXJlLl9pZDsgXG4gICAgXG4gICAgLy8geHlcbiAgICBwb3NpdGlvbnNbaW5kZXgrK10gPSB2ZXJ0ZXhEYXRhWzJdO1xuICAgIHBvc2l0aW9uc1tpbmRleCsrXSA9IHZlcnRleERhdGFbM107XG4gICAgdGhpcy51dnNbaW5kZXgrK10gPSB1dnNbMV07XG4gICAgY29sb3JzW2luZGV4KytdID0gdGludDtcbiAgICBwb3NpdGlvbnNbaW5kZXgrK10gPSBuZXh0VGV4dHVyZS5faWQ7XG5cbiAgICAgLy8geHlcbiAgICBwb3NpdGlvbnNbaW5kZXgrK10gPSB2ZXJ0ZXhEYXRhWzRdO1xuICAgIHBvc2l0aW9uc1tpbmRleCsrXSA9IHZlcnRleERhdGFbNV07XG4gICAgdGhpcy51dnNbaW5kZXgrK10gPSB1dnNbMl07XG4gICAgY29sb3JzW2luZGV4KytdID0gdGludDtcbiAgICBwb3NpdGlvbnNbaW5kZXgrK10gPSBuZXh0VGV4dHVyZS5faWQ7XG5cbiAgICAvLyB4eVxuICAgIHBvc2l0aW9uc1tpbmRleCsrXSA9IHZlcnRleERhdGFbNl07XG4gICAgcG9zaXRpb25zW2luZGV4KytdID0gdmVydGV4RGF0YVs3XTtcbiAgICB0aGlzLnV2c1tpbmRleCsrXSA9IHV2c1szXTtcbiAgICBjb2xvcnNbaW5kZXgrK10gPSB0aW50O1xuICAgIHBvc2l0aW9uc1tpbmRleCsrXSA9IG5leHRUZXh0dXJlLl9pZDtcbn07XG5cbi8qKlxuICogUmVuZGVycyB0aGUgY29udGVudCBhbmQgZW1wdGllcyB0aGUgY3VycmVudCBiYXRjaC5cbiAqXG4gKi9cblNwcml0ZVJlbmRlcmVyLnByb3RvdHlwZS5mbHVzaCA9IGZ1bmN0aW9uICgpXG57XG4gICAgaWYgKHRoaXMuY3VycmVudEluZGV4ID09PSAwKXJldHVybjtcblxuICAgIHZhciBnbCA9IHRoaXMucmVuZGVyZXIuZ2w7XG5cblxuICAgIHRoaXMuY3VycmVudEdyb3VwLnNpemUgPSB0aGlzLmN1cnJlbnRJbmRleCAtIHRoaXMuY3VycmVudEdyb3VwLnN0YXJ0O1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5jdXJyZW50R3JvdXAudGV4dHVyZUNvdW50OyBpKyspIFxuICAgIHsgICAgIFxuICAgICAgICB0aGlzLmN1cnJlbnRHcm91cC50ZXh0dXJlc1tpXS5fZW5hYmxlZCA9IGZhbHNlO1xuICAgIH07XG4gICBcbiAgICAvLyBkbyBzb21lIHNtYXJ0IGFycmF5IHN0dWZmLi5cbiAgICAvLyBkb3VibGUgc2l6ZSBzbyB3ZSBkb250IGFsd2F5IHN1YmFycmF5IHRoZSBlbGVtZW50cy4uXG4gICAgLy8gdXBsb2FkIHRoZSB2ZXJ0cyB0byB0aGUgYnVmZmVyXG4gICAgaWYgKHRoaXMuY3VycmVudEJhdGNoU2l6ZSA+ICggdGhpcy5zaXplICogMC41ICkgKVxuICAgIHtcbiAgICAgICAgdGhpcy52ZXJ0ZXhCdWZmZXIudXBsb2FkKHRoaXMudmVydGljZXMsIDAsIHRydWUpO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICAvLyBvIGsgLi4gc3ViIGFycmF5IGlzIFNMT1c+P1xuICAgICAgICB2YXIgdmlldyA9IHRoaXMucG9zaXRpb25zLnN1YmFycmF5KDAsIHRoaXMuY3VycmVudEluZGV4ICogdGhpcy52ZXJ0Qnl0ZVNpemUpO1xuICAgICAgICB0aGlzLnZlcnRleEJ1ZmZlci51cGxvYWQodmlldywgMCwgdHJ1ZSk7XG4gICAgfVxuXG4gICAgLy8gYmluZCBzaGFkZXIuLlxuICAgIHRoaXMucmVuZGVyZXIuYmluZFNoYWRlcih0aGlzLl9zaGFkZXIpO1xuICAgIHRoaXMucmVuZGVyZXIuYmxlbmRNb2RlTWFuYWdlci5zZXRCbGVuZE1vZGUoIDAgKTtcblxuICAgIC8vLyByZW5kZXIgdGhlIGdyb3Vwcy4uXG4gICAgZm9yIChpID0gMDsgaSA8IHRoaXMuZ3JvdXBDb3VudDsgaSsrKSB7XG4gICAgICAgIFxuICAgICAgICB2YXIgZ3JvdXAgPSB0aGlzLmdyb3Vwc1tpXTtcblxuICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IGdyb3VwLnRleHR1cmVDb3VudDsgaisrKSB7XG4gICAgICAgICAgICB0aGlzLnJlbmRlcmVyLmJpbmRUZXh0dXJlKGdyb3VwLnRleHR1cmVzW2pdLCBqKTtcbiAgICAgICAgfTtcblxuICAgICAgICBnbC5kcmF3RWxlbWVudHMoZ2wuVFJJQU5HTEVTLCBncm91cC5zaXplICogNiwgZ2wuVU5TSUdORURfU0hPUlQsIGdyb3VwLnN0YXJ0ICogNiAqIDIpO1xuICAgIH07XG5cbiAgICAvLyByZXNldCBlbGVtZW50cyBmb3IgdGhlIG5leHQgZmx1c2hcbiAgICB0aGlzLmN1cnJlbnRUZXh0dXJlID0gbnVsbDtcbiAgICB0aGlzLmN1cnJlbnRJbmRleCA9IDA7XG4gICAgdGhpcy50ZXh0dXJlQ291bnQgPSAwO1xuICAgIHRoaXMuZ3JvdXBDb3VudCA9IDA7XG4gICAgXG4gICAgdGhpcy5jdXJyZW50R3JvdXAgPSB0aGlzLmdyb3Vwc1t0aGlzLmdyb3VwQ291bnQrK107XG4gICAgdGhpcy5jdXJyZW50R3JvdXAudGV4dHVyZUNvdW50ID0gMDtcbn07XG5cbi8qKlxuICogU3RhcnRzIGEgbmV3IHNwcml0ZSBiYXRjaC5cbiAqXG4gKi9cblNwcml0ZVJlbmRlcmVyLnByb3RvdHlwZS5zdGFydCA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy52YW8uYmluZCgpO1xufTtcblxuU3ByaXRlUmVuZGVyZXIucHJvdG90eXBlLnN0b3AgPSBmdW5jdGlvbiAoKVxue1xuICAgIHRoaXMuZmx1c2goKTtcbiAgICB0aGlzLnZhby51bmJpbmQoKTtcbn07XG4vKipcbiAqIERlc3Ryb3lzIHRoZSBTcHJpdGVCYXRjaC5cbiAqXG4gKi9cblNwcml0ZVJlbmRlcmVyLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLnZlcnRleEJ1ZmZlci5kZXN0cm95KCk7XG4gICAgdGhpcy5pbmRleEJ1ZmZlci5kZXN0cm95KCk7XG5cbiAgICBPYmplY3RSZW5kZXJlci5wcm90b3R5cGUuZGVzdHJveS5jYWxsKHRoaXMpO1xuXG4gICAgdGhpcy5zaGFkZXIuZGVzdHJveSgpO1xuXG4gICAgdGhpcy5yZW5kZXJlciA9IG51bGw7XG5cbiAgICB0aGlzLnZlcnRpY2VzID0gbnVsbDtcbiAgICB0aGlzLnBvc2l0aW9ucyA9IG51bGw7XG4gICAgdGhpcy5jb2xvcnMgPSBudWxsO1xuICAgIHRoaXMuaW5kaWNlcyA9IG51bGw7XG5cbiAgICB0aGlzLnZlcnRleEJ1ZmZlciA9IG51bGw7XG4gICAgdGhpcy5pbmRleEJ1ZmZlciA9IG51bGw7XG5cbiAgICB0aGlzLnNwcml0ZXMgPSBudWxsO1xuICAgIHRoaXMuc2hhZGVyID0gbnVsbDtcbn07XG4iLCJ2YXIgU2hhZGVyID0gcmVxdWlyZSgncGl4aS1nbC1jb3JlJykuR0xTaGFkZXI7XG5cblxuZnVuY3Rpb24gZ2VuZXJhdGVNdWx0aVRleHR1cmVTaGFkZXIoZ2wsIG1heFRleHR1cmVzKVxue1xuICAgIHZhciB2ZXJ0ZXhTcmMgPSBcInByZWNpc2lvbiBsb3dwIGZsb2F0O1xcbmF0dHJpYnV0ZSB2ZWMyIGFWZXJ0ZXhQb3NpdGlvbjtcXG5hdHRyaWJ1dGUgdmVjMiBhVGV4dHVyZUNvb3JkO1xcbmF0dHJpYnV0ZSB2ZWM0IGFDb2xvcjtcXG5hdHRyaWJ1dGUgZmxvYXQgYVRleHR1cmVJZDtcXG5cXG51bmlmb3JtIG1hdDMgcHJvamVjdGlvbk1hdHJpeDtcXG5cXG52YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDtcXG52YXJ5aW5nIHZlYzQgdkNvbG9yO1xcbnZhcnlpbmcgZmxvYXQgdlRleHR1cmVJZDtcXG5cXG52b2lkIG1haW4odm9pZCl7XFxuICAgZ2xfUG9zaXRpb24gPSB2ZWM0KChwcm9qZWN0aW9uTWF0cml4ICogdmVjMyhhVmVydGV4UG9zaXRpb24sIDEuMCkpLnh5LCAwLjAsIDEuMCk7XFxuICAgdlRleHR1cmVDb29yZCA9IGFUZXh0dXJlQ29vcmQ7XFxuICAgdlRleHR1cmVJZCA9IGFUZXh0dXJlSWQ7XFxuICAgdkNvbG9yID0gdmVjNChhQ29sb3IucmdiICogYUNvbG9yLmEsIGFDb2xvci5hKTtcXG59XCI7XG4gICAgdmFyIGZyYWdtZW50U3JjID0gJ3ByZWNpc2lvbiBsb3dwIGZsb2F0O1xcblxcbicgKyBnZW5lcmF0ZVNhbXBsZVNyYyhtYXhUZXh0dXJlcykgKyBcIlxcblxcblwiICsgZnJhZ1RlbXBsYXRlXG5cbiAgICBmcmFnbWVudFNyYyA9IGZyYWdtZW50U3JjLnJlcGxhY2UoL1xcJVxcJS9naSwgJzE2Jyk7XG5cbiAgICB2YXIgc2hhZGVyID0gbmV3IFNoYWRlcihnbCwgdmVydGV4U3JjLCBmcmFnbWVudFNyYyk7XG5cblxuICAgIHZhciBzYW1wbGVWYWx1ZXMgPSBbXTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG1heFRleHR1cmVzOyBpKyspIHtcbiAgICAgICAgc2FtcGxlVmFsdWVzW2ldID0gaTtcbiAgICB9O1xuXG4gICAgc2hhZGVyLmJpbmQoKTtcbiAgICBzaGFkZXIudW5pZm9ybXMudVNhbXBsZXJzID0gc2FtcGxlVmFsdWVzO1xuXG4gICAgcmV0dXJuIHNoYWRlcjtcbn1cblxuZnVuY3Rpb24gZ2VuZXJhdGVTYW1wbGVTcmMobWF4VGV4dHVyZXMpXG57XG4gICAgdmFyIHNyYyA9ICd2ZWM0IGdldFNhbXBsZUZyb21BcnJheShzYW1wbGVyMkQgdGV4dHVyZXNbJSVdLCBpbnQgbmR4LCB2ZWMyIHV2KSB7XFxuXFxudmVjNCBjb2xvcjsnXG5cbiAgICBzcmMgKz0gJ1xcbic7XG4gICAgc3JjICs9ICdcXG4nO1xuICAgIFxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbWF4VGV4dHVyZXM7IGkrKykgXG4gICAge1xuICAgICAgICBpZihpID4gMClzcmMgKz0gJ1xcbmVsc2UgJztcbiAgICAgICAgaWYoaSA8IG1heFRleHR1cmVzLTEpc3JjICs9ICdpZihuZHggPT0gJyArIGkgKyAnKSc7XG4gICAgICAgIHNyYyArPSAnXFxueyc7XG4gICAgICAgIHNyYyArPSAnXFxuXFx0Y29sb3IgPSB0ZXh0dXJlMkQodGV4dHVyZXNbJytpKyddLCB1dik7JztcbiAgICAgICAgc3JjICs9ICdcXG59JztcbiAgICB9O1xuXG4gICAgc3JjICs9ICdcXG4nO1xuICAgIHNyYyArPSAnXFxuJztcbiAgICBzcmMgKz0gJ3JldHVybiBjb2xvcjsnO1xuICAgIHNyYyArPSAnXFxufSc7XG5cbiAgICByZXR1cm4gc3JjO1xufVxuXG52YXIgZnJhZ1RlbXBsYXRlID0gW1xuXG4gICAgJ3ZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkOycsXG4gICAgJ3ZhcnlpbmcgdmVjNCB2Q29sb3I7JyxcbiAgICAndmFyeWluZyBmbG9hdCB2VGV4dHVyZUlkOycsXG4gICAgJ3VuaWZvcm0gc2FtcGxlcjJEIHVTYW1wbGVyc1slJV07JyxcblxuICAgICd2b2lkIG1haW4odm9pZCl7JyxcbiAgICAgICAgJ2dsX0ZyYWdDb2xvciA9IGdldFNhbXBsZUZyb21BcnJheSh1U2FtcGxlcnMsIGludCh2VGV4dHVyZUlkKSwgdlRleHR1cmVDb29yZCkgKiB2Q29sb3I7JyxcbiAgICAnfSdcbl0uam9pbignXFxuJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZ2VuZXJhdGVNdWx0aVRleHR1cmVTaGFkZXI7XG4iLCJ2YXIgU3ByaXRlID0gcmVxdWlyZSgnLi4vc3ByaXRlcy9TcHJpdGUnKSxcbiAgICBUZXh0dXJlID0gcmVxdWlyZSgnLi4vdGV4dHVyZXMvVGV4dHVyZScpLFxuICAgIG1hdGggPSByZXF1aXJlKCcuLi9tYXRoJyksXG4gICAgdXRpbHMgPSByZXF1aXJlKCcuLi91dGlscycpLFxuICAgIENPTlNUID0gcmVxdWlyZSgnLi4vY29uc3QnKTtcblxuLyoqXG4gKiBBIFRleHQgT2JqZWN0IHdpbGwgY3JlYXRlIGEgbGluZSBvciBtdWx0aXBsZSBsaW5lcyBvZiB0ZXh0LiBUbyBzcGxpdCBhIGxpbmUgeW91IGNhbiB1c2UgJ1xcbicgaW4geW91ciB0ZXh0IHN0cmluZyxcbiAqIG9yIGFkZCBhIHdvcmRXcmFwIHByb3BlcnR5IHNldCB0byB0cnVlIGFuZCBhbmQgd29yZFdyYXBXaWR0aCBwcm9wZXJ0eSB3aXRoIGEgdmFsdWUgaW4gdGhlIHN0eWxlIG9iamVjdC5cbiAqXG4gKiBBIFRleHQgY2FuIGJlIGNyZWF0ZWQgZGlyZWN0bHkgZnJvbSBhIHN0cmluZyBhbmQgYSBzdHlsZSBvYmplY3RcbiAqXG4gKiBgYGBqc1xuICogdmFyIHRleHQgPSBuZXcgUElYSS5UZXh0KCdUaGlzIGlzIGEgcGl4aSB0ZXh0Jyx7Zm9udCA6ICcyNHB4IEFyaWFsJywgZmlsbCA6IDB4ZmYxMDEwLCBhbGlnbiA6ICdjZW50ZXInfSk7XG4gKiBgYGBcbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuU3ByaXRlXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIHRleHQge3N0cmluZ30gVGhlIGNvcHkgdGhhdCB5b3Ugd291bGQgbGlrZSB0aGUgdGV4dCB0byBkaXNwbGF5XG4gKiBAcGFyYW0gW3N0eWxlXSB7b2JqZWN0fSBUaGUgc3R5bGUgcGFyYW1ldGVyc1xuICogQHBhcmFtIFtzdHlsZS5mb250XSB7c3RyaW5nfSBkZWZhdWx0ICdib2xkIDIwcHggQXJpYWwnIFRoZSBzdHlsZSBhbmQgc2l6ZSBvZiB0aGUgZm9udFxuICogQHBhcmFtIFtzdHlsZS5maWxsPSdibGFjayddIHtTdHJpbmd8TnVtYmVyfSBBIGNhbnZhcyBmaWxsc3R5bGUgdGhhdCB3aWxsIGJlIHVzZWQgb24gdGhlIHRleHQgZS5nICdyZWQnLCAnIzAwRkYwMCdcbiAqIEBwYXJhbSBbc3R5bGUuYWxpZ249J2xlZnQnXSB7c3RyaW5nfSBBbGlnbm1lbnQgZm9yIG11bHRpbGluZSB0ZXh0ICgnbGVmdCcsICdjZW50ZXInIG9yICdyaWdodCcpLCBkb2VzIG5vdCBhZmZlY3Qgc2luZ2xlIGxpbmUgdGV4dFxuICogQHBhcmFtIFtzdHlsZS5zdHJva2VdIHtTdHJpbmd8TnVtYmVyfSBBIGNhbnZhcyBmaWxsc3R5bGUgdGhhdCB3aWxsIGJlIHVzZWQgb24gdGhlIHRleHQgc3Ryb2tlIGUuZyAnYmx1ZScsICcjRkNGRjAwJ1xuICogQHBhcmFtIFtzdHlsZS5zdHJva2VUaGlja25lc3M9MF0ge251bWJlcn0gQSBudW1iZXIgdGhhdCByZXByZXNlbnRzIHRoZSB0aGlja25lc3Mgb2YgdGhlIHN0cm9rZS4gRGVmYXVsdCBpcyAwIChubyBzdHJva2UpXG4gKiBAcGFyYW0gW3N0eWxlLndvcmRXcmFwPWZhbHNlXSB7Ym9vbGVhbn0gSW5kaWNhdGVzIGlmIHdvcmQgd3JhcCBzaG91bGQgYmUgdXNlZFxuICogQHBhcmFtIFtzdHlsZS53b3JkV3JhcFdpZHRoPTEwMF0ge251bWJlcn0gVGhlIHdpZHRoIGF0IHdoaWNoIHRleHQgd2lsbCB3cmFwLCBpdCBuZWVkcyB3b3JkV3JhcCB0byBiZSBzZXQgdG8gdHJ1ZVxuICogQHBhcmFtIFtzdHlsZS5saW5lSGVpZ2h0XSB7bnVtYmVyfSBUaGUgbGluZSBoZWlnaHQsIGEgbnVtYmVyIHRoYXQgcmVwcmVzZW50cyB0aGUgdmVydGljYWwgc3BhY2UgdGhhdCBhIGxldHRlciB1c2VzXG4gKiBAcGFyYW0gW3N0eWxlLmRyb3BTaGFkb3c9ZmFsc2VdIHtib29sZWFufSBTZXQgYSBkcm9wIHNoYWRvdyBmb3IgdGhlIHRleHRcbiAqIEBwYXJhbSBbc3R5bGUuZHJvcFNoYWRvd0NvbG9yPScjMDAwMDAwJ10ge3N0cmluZ30gQSBmaWxsIHN0eWxlIHRvIGJlIHVzZWQgb24gdGhlIGRyb3BzaGFkb3cgZS5nICdyZWQnLCAnIzAwRkYwMCdcbiAqIEBwYXJhbSBbc3R5bGUuZHJvcFNoYWRvd0FuZ2xlPU1hdGguUEkvNF0ge251bWJlcn0gU2V0IGEgYW5nbGUgb2YgdGhlIGRyb3Agc2hhZG93XG4gKiBAcGFyYW0gW3N0eWxlLmRyb3BTaGFkb3dEaXN0YW5jZT01XSB7bnVtYmVyfSBTZXQgYSBkaXN0YW5jZSBvZiB0aGUgZHJvcCBzaGFkb3dcbiAqIEBwYXJhbSBbc3R5bGUuZHJvcFNoYWRvd0JsdXI9MF0ge251bWJlcn0gU2V0IGEgc2hhZG93IGJsdXIgcmFkaXVzXG4gKiBAcGFyYW0gW3N0eWxlLnBhZGRpbmc9MF0ge251bWJlcn0gT2NjYXNpb25hbGx5IHNvbWUgZm9udHMgYXJlIGNyb3BwZWQgb24gdG9wIG9yIGJvdHRvbS4gQWRkaW5nIHNvbWUgcGFkZGluZyB3aWxsXG4gKiAgICAgIHByZXZlbnQgdGhpcyBmcm9tIGhhcHBlbmluZyBieSBhZGRpbmcgcGFkZGluZyB0byB0aGUgdG9wIGFuZCBib3R0b20gb2YgdGV4dCBoZWlnaHQuXG4gKiBAcGFyYW0gW3N0eWxlLnRleHRCYXNlbGluZT0nYWxwaGFiZXRpYyddIHtzdHJpbmd9IFRoZSBiYXNlbGluZSBvZiB0aGUgdGV4dCB0aGF0IGlzIHJlbmRlcmVkLlxuICogQHBhcmFtIFtzdHlsZS5saW5lSm9pbj0nbWl0ZXInXSB7c3RyaW5nfSBUaGUgbGluZUpvaW4gcHJvcGVydHkgc2V0cyB0aGUgdHlwZSBvZiBjb3JuZXIgY3JlYXRlZCwgaXQgY2FuIHJlc29sdmVcbiAqICAgICAgc3Bpa2VkIHRleHQgaXNzdWVzLiBEZWZhdWx0IGlzICdtaXRlcicgKGNyZWF0ZXMgYSBzaGFycCBjb3JuZXIpLlxuICogQHBhcmFtIFtzdHlsZS5taXRlckxpbWl0PTEwXSB7bnVtYmVyfSBUaGUgbWl0ZXIgbGltaXQgdG8gdXNlIHdoZW4gdXNpbmcgdGhlICdtaXRlcicgbGluZUpvaW4gbW9kZS4gVGhpcyBjYW4gcmVkdWNlXG4gKiAgICAgIG9yIGluY3JlYXNlIHRoZSBzcGlraW5lc3Mgb2YgcmVuZGVyZWQgdGV4dC5cbiAqL1xuZnVuY3Rpb24gVGV4dCh0ZXh0LCBzdHlsZSwgcmVzb2x1dGlvbilcbntcbiAgICAvKipcbiAgICAgKiBUaGUgY2FudmFzIGVsZW1lbnQgdGhhdCBldmVyeXRoaW5nIGlzIGRyYXduIHRvXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtIVE1MQ2FudmFzRWxlbWVudH1cbiAgICAgKi9cbiAgICB0aGlzLmNhbnZhcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NhbnZhcycpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGNhbnZhcyAyZCBjb250ZXh0IHRoYXQgZXZlcnl0aGluZyBpcyBkcmF3biB3aXRoXG4gICAgICogQG1lbWJlciB7SFRNTENhbnZhc0VsZW1lbnR9XG4gICAgICovXG4gICAgdGhpcy5jb250ZXh0ID0gdGhpcy5jYW52YXMuZ2V0Q29udGV4dCgnMmQnKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSByZXNvbHV0aW9uIG9mIHRoZSBjYW52YXMuXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMucmVzb2x1dGlvbiA9IHJlc29sdXRpb24gfHwgQ09OU1QuUkVTT0xVVElPTjtcblxuICAgIC8qKlxuICAgICAqIFByaXZhdGUgdHJhY2tlciBmb3IgdGhlIGN1cnJlbnQgdGV4dC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge3N0cmluZ31cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX3RleHQgPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogUHJpdmF0ZSB0cmFja2VyIGZvciB0aGUgY3VycmVudCBzdHlsZS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge29iamVjdH1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX3N0eWxlID0gbnVsbDtcblxuICAgIHZhciB0ZXh0dXJlID0gVGV4dHVyZS5mcm9tQ2FudmFzKHRoaXMuY2FudmFzKTtcbiAgICB0ZXh0dXJlLnRyaW0gPSBuZXcgbWF0aC5SZWN0YW5nbGUoKTtcbiAgICBTcHJpdGUuY2FsbCh0aGlzLCB0ZXh0dXJlKTtcblxuICAgIHRoaXMudGV4dCA9IHRleHQ7XG4gICAgdGhpcy5zdHlsZSA9IHN0eWxlO1xufVxuXG4vLyBjb25zdHJ1Y3RvclxuVGV4dC5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFNwcml0ZS5wcm90b3R5cGUpO1xuVGV4dC5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBUZXh0O1xubW9kdWxlLmV4cG9ydHMgPSBUZXh0O1xuXG5UZXh0LmZvbnRQcm9wZXJ0aWVzQ2FjaGUgPSB7fTtcblRleHQuZm9udFByb3BlcnRpZXNDYW52YXMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdjYW52YXMnKTtcblRleHQuZm9udFByb3BlcnRpZXNDb250ZXh0ID0gVGV4dC5mb250UHJvcGVydGllc0NhbnZhcy5nZXRDb250ZXh0KCcyZCcpO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhUZXh0LnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFRoZSB3aWR0aCBvZiB0aGUgVGV4dCwgc2V0dGluZyB0aGlzIHdpbGwgYWN0dWFsbHkgbW9kaWZ5IHRoZSBzY2FsZSB0byBhY2hpZXZlIHRoZSB2YWx1ZSBzZXRcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5UZXh0I1xuICAgICAqL1xuICAgIHdpZHRoOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgaWYgKHRoaXMuZGlydHkpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdGhpcy51cGRhdGVUZXh0KCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiB0aGlzLnNjYWxlLnggKiB0aGlzLl90ZXh0dXJlLl9mcmFtZS53aWR0aDtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuc2NhbGUueCA9IHZhbHVlIC8gdGhpcy5fdGV4dHVyZS5fZnJhbWUud2lkdGg7XG4gICAgICAgICAgICB0aGlzLl93aWR0aCA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFRoZSBoZWlnaHQgb2YgdGhlIFRleHQsIHNldHRpbmcgdGhpcyB3aWxsIGFjdHVhbGx5IG1vZGlmeSB0aGUgc2NhbGUgdG8gYWNoaWV2ZSB0aGUgdmFsdWUgc2V0XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuVGV4dCNcbiAgICAgKi9cbiAgICBoZWlnaHQ6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICBpZiAodGhpcy5kaXJ0eSlcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZVRleHQoKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuICB0aGlzLnNjYWxlLnkgKiB0aGlzLl90ZXh0dXJlLl9mcmFtZS5oZWlnaHQ7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnNjYWxlLnkgPSB2YWx1ZSAvIHRoaXMuX3RleHR1cmUuX2ZyYW1lLmhlaWdodDtcbiAgICAgICAgICAgIHRoaXMuX2hlaWdodCA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFNldCB0aGUgc3R5bGUgb2YgdGhlIHRleHRcbiAgICAgKlxuICAgICAqIEBwYXJhbSBbc3R5bGVdIHtvYmplY3R9IFRoZSBzdHlsZSBwYXJhbWV0ZXJzXG4gICAgICogQHBhcmFtIFtzdHlsZS5mb250PSdib2xkIDIwcHQgQXJpYWwnXSB7c3RyaW5nfSBUaGUgc3R5bGUgYW5kIHNpemUgb2YgdGhlIGZvbnRcbiAgICAgKiBAcGFyYW0gW3N0eWxlLmZpbGw9J2JsYWNrJ10ge3N0cmluZ3xudW1iZXJ9IEEgY2FudmFzIGZpbGxzdHlsZSB0aGF0IHdpbGwgYmUgdXNlZCBvbiB0aGUgdGV4dCBlZyAncmVkJywgJyMwMEZGMDAnXG4gICAgICogQHBhcmFtIFtzdHlsZS5hbGlnbj0nbGVmdCddIHtzdHJpbmd9IEFsaWdubWVudCBmb3IgbXVsdGlsaW5lIHRleHQgKCdsZWZ0JywgJ2NlbnRlcicgb3IgJ3JpZ2h0JyksIGRvZXMgbm90IGFmZmVjdCBzaW5nbGUgbGluZSB0ZXh0XG4gICAgICogQHBhcmFtIFtzdHlsZS5zdHJva2U9J2JsYWNrJ10ge3N0cmluZ3xudW1iZXJ9IEEgY2FudmFzIGZpbGxzdHlsZSB0aGF0IHdpbGwgYmUgdXNlZCBvbiB0aGUgdGV4dCBzdHJva2UgZWcgJ2JsdWUnLCAnI0ZDRkYwMCdcbiAgICAgKiBAcGFyYW0gW3N0eWxlLnN0cm9rZVRoaWNrbmVzcz0wXSB7bnVtYmVyfSBBIG51bWJlciB0aGF0IHJlcHJlc2VudHMgdGhlIHRoaWNrbmVzcyBvZiB0aGUgc3Ryb2tlLiBEZWZhdWx0IGlzIDAgKG5vIHN0cm9rZSlcbiAgICAgKiBAcGFyYW0gW3N0eWxlLndvcmRXcmFwPWZhbHNlXSB7Ym9vbGVhbn0gSW5kaWNhdGVzIGlmIHdvcmQgd3JhcCBzaG91bGQgYmUgdXNlZFxuICAgICAqIEBwYXJhbSBbc3R5bGUud29yZFdyYXBXaWR0aD0xMDBdIHtudW1iZXJ9IFRoZSB3aWR0aCBhdCB3aGljaCB0ZXh0IHdpbGwgd3JhcFxuICAgICAqIEBwYXJhbSBbc3R5bGUubGluZUhlaWdodF0ge251bWJlcn0gVGhlIGxpbmUgaGVpZ2h0LCBhIG51bWJlciB0aGF0IHJlcHJlc2VudHMgdGhlIHZlcnRpY2FsIHNwYWNlIHRoYXQgYSBsZXR0ZXIgdXNlc1xuICAgICAqIEBwYXJhbSBbc3R5bGUuZHJvcFNoYWRvdz1mYWxzZV0ge2Jvb2xlYW59IFNldCBhIGRyb3Agc2hhZG93IGZvciB0aGUgdGV4dFxuICAgICAqIEBwYXJhbSBbc3R5bGUuZHJvcFNoYWRvd0NvbG9yPScjMDAwMDAwJ10ge3N0cmluZ3xudW1iZXJ9IEEgZmlsbCBzdHlsZSB0byBiZSB1c2VkIG9uIHRoZSBkcm9wc2hhZG93IGUuZyAncmVkJywgJyMwMEZGMDAnXG4gICAgICogQHBhcmFtIFtzdHlsZS5kcm9wU2hhZG93QW5nbGU9TWF0aC5QSS82XSB7bnVtYmVyfSBTZXQgYSBhbmdsZSBvZiB0aGUgZHJvcCBzaGFkb3dcbiAgICAgKiBAcGFyYW0gW3N0eWxlLmRyb3BTaGFkb3dEaXN0YW5jZT01XSB7bnVtYmVyfSBTZXQgYSBkaXN0YW5jZSBvZiB0aGUgZHJvcCBzaGFkb3dcbiAgICAgKiBAcGFyYW0gW3N0eWxlLmRyb3BTaGFkb3dCbHVyPTBdIHtudW1iZXJ9IFNldCBhIHNoYWRvdyBibHVyIHJhZGl1c1xuICAgICAqIEBwYXJhbSBbc3R5bGUucGFkZGluZz0wXSB7bnVtYmVyfSBPY2Nhc2lvbmFsbHkgc29tZSBmb250cyBhcmUgY3JvcHBlZCBvbiB0b3Agb3IgYm90dG9tLiBBZGRpbmcgc29tZSBwYWRkaW5nIHdpbGxcbiAgICAgKiAgICAgIHByZXZlbnQgdGhpcyBmcm9tIGhhcHBlbmluZyBieSBhZGRpbmcgcGFkZGluZyB0byB0aGUgdG9wIGFuZCBib3R0b20gb2YgdGV4dCBoZWlnaHQuXG4gICAgICogQHBhcmFtIFtzdHlsZS50ZXh0QmFzZWxpbmU9J2FscGhhYmV0aWMnXSB7c3RyaW5nfSBUaGUgYmFzZWxpbmUgb2YgdGhlIHRleHQgdGhhdCBpcyByZW5kZXJlZC5cbiAgICAgKiBAcGFyYW0gW3N0eWxlLmxpbmVKb2luPSdtaXRlciddIHtzdHJpbmd9IFRoZSBsaW5lSm9pbiBwcm9wZXJ0eSBzZXRzIHRoZSB0eXBlIG9mIGNvcm5lciBjcmVhdGVkLCBpdCBjYW4gcmVzb2x2ZVxuICAgICAqICAgICAgc3Bpa2VkIHRleHQgaXNzdWVzLiBEZWZhdWx0IGlzICdtaXRlcicgKGNyZWF0ZXMgYSBzaGFycCBjb3JuZXIpLlxuICAgICAqIEBwYXJhbSBbc3R5bGUubWl0ZXJMaW1pdD0xMF0ge251bWJlcn0gVGhlIG1pdGVyIGxpbWl0IHRvIHVzZSB3aGVuIHVzaW5nIHRoZSAnbWl0ZXInIGxpbmVKb2luIG1vZGUuIFRoaXMgY2FuIHJlZHVjZVxuICAgICAqICAgICAgb3IgaW5jcmVhc2UgdGhlIHNwaWtpbmVzcyBvZiByZW5kZXJlZCB0ZXh0LlxuICAgICAqIEBtZW1iZXJvZiBQSVhJLlRleHQjXG4gICAgICovXG4gICAgc3R5bGU6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fc3R5bGU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHN0eWxlKVxuICAgICAgICB7XG4gICAgICAgICAgICBzdHlsZSA9IHN0eWxlIHx8IHt9O1xuXG4gICAgICAgICAgICBpZiAodHlwZW9mIHN0eWxlLmZpbGwgPT09ICdudW1iZXInKSB7XG4gICAgICAgICAgICAgICAgc3R5bGUuZmlsbCA9IHV0aWxzLmhleDJzdHJpbmcoc3R5bGUuZmlsbCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICh0eXBlb2Ygc3R5bGUuc3Ryb2tlID09PSAnbnVtYmVyJykge1xuICAgICAgICAgICAgICAgIHN0eWxlLnN0cm9rZSA9IHV0aWxzLmhleDJzdHJpbmcoc3R5bGUuc3Ryb2tlKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHR5cGVvZiBzdHlsZS5kcm9wU2hhZG93Q29sb3IgPT09ICdudW1iZXInKSB7XG4gICAgICAgICAgICAgICAgc3R5bGUuZHJvcFNoYWRvd0NvbG9yID0gdXRpbHMuaGV4MnN0cmluZyhzdHlsZS5kcm9wU2hhZG93Q29sb3IpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBzdHlsZS5mb250ID0gc3R5bGUuZm9udCB8fCAnYm9sZCAyMHB0IEFyaWFsJztcbiAgICAgICAgICAgIHN0eWxlLmZpbGwgPSBzdHlsZS5maWxsIHx8ICdibGFjayc7XG4gICAgICAgICAgICBzdHlsZS5hbGlnbiA9IHN0eWxlLmFsaWduIHx8ICdsZWZ0JztcbiAgICAgICAgICAgIHN0eWxlLnN0cm9rZSA9IHN0eWxlLnN0cm9rZSB8fCAnYmxhY2snOyAvL3Byb3ZpZGUgYSBkZWZhdWx0LCBzZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9waXhpanMvcGl4aS5qcy9pc3N1ZXMvMTM2XG4gICAgICAgICAgICBzdHlsZS5zdHJva2VUaGlja25lc3MgPSBzdHlsZS5zdHJva2VUaGlja25lc3MgfHwgMDtcbiAgICAgICAgICAgIHN0eWxlLndvcmRXcmFwID0gc3R5bGUud29yZFdyYXAgfHwgZmFsc2U7XG4gICAgICAgICAgICBzdHlsZS53b3JkV3JhcFdpZHRoID0gc3R5bGUud29yZFdyYXBXaWR0aCB8fCAxMDA7XG5cbiAgICAgICAgICAgIHN0eWxlLmRyb3BTaGFkb3cgPSBzdHlsZS5kcm9wU2hhZG93IHx8IGZhbHNlO1xuICAgICAgICAgICAgc3R5bGUuZHJvcFNoYWRvd0NvbG9yID0gc3R5bGUuZHJvcFNoYWRvd0NvbG9yIHx8ICcjMDAwMDAwJztcbiAgICAgICAgICAgIHN0eWxlLmRyb3BTaGFkb3dBbmdsZSA9IHN0eWxlLmRyb3BTaGFkb3dBbmdsZSAhPT0gdW5kZWZpbmVkID8gc3R5bGUuZHJvcFNoYWRvd0FuZ2xlIDogTWF0aC5QSSAvIDY7XG4gICAgICAgICAgICBzdHlsZS5kcm9wU2hhZG93RGlzdGFuY2UgPSBzdHlsZS5kcm9wU2hhZG93RGlzdGFuY2UgIT09IHVuZGVmaW5lZCA/IHN0eWxlLmRyb3BTaGFkb3dEaXN0YW5jZSA6IDU7XG4gICAgICAgICAgICBzdHlsZS5kcm9wU2hhZG93Qmx1ciA9IHN0eWxlLmRyb3BTaGFkb3dCbHVyICE9PSB1bmRlZmluZWQgPyBzdHlsZS5kcm9wU2hhZG93Qmx1ciA6IDA7IC8vc2hhZG93Qmx1ciBpcyAnMCcgYnkgZGVmYXVsdCBhY2NvcmRpbmcgdG8gSFRNTFxuXG4gICAgICAgICAgICBzdHlsZS5wYWRkaW5nID0gc3R5bGUucGFkZGluZyB8fCAwO1xuXG4gICAgICAgICAgICBzdHlsZS50ZXh0QmFzZWxpbmUgPSBzdHlsZS50ZXh0QmFzZWxpbmUgfHwgJ2FscGhhYmV0aWMnO1xuXG4gICAgICAgICAgICBzdHlsZS5saW5lSm9pbiA9IHN0eWxlLmxpbmVKb2luIHx8ICdtaXRlcic7XG4gICAgICAgICAgICBzdHlsZS5taXRlckxpbWl0ID0gc3R5bGUubWl0ZXJMaW1pdCB8fCAxMDtcblxuICAgICAgICAgICAgdGhpcy5fc3R5bGUgPSBzdHlsZTtcbiAgICAgICAgICAgIHRoaXMuZGlydHkgPSB0cnVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFNldCB0aGUgY29weSBmb3IgdGhlIHRleHQgb2JqZWN0LiBUbyBzcGxpdCBhIGxpbmUgeW91IGNhbiB1c2UgJ1xcbicuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gdGV4dCB7c3RyaW5nfSBUaGUgY29weSB0aGF0IHlvdSB3b3VsZCBsaWtlIHRoZSB0ZXh0IHRvIGRpc3BsYXlcbiAgICAgKiBAbWVtYmVyb2YgUElYSS5UZXh0I1xuICAgICAqL1xuICAgIHRleHQ6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbigpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl90ZXh0O1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh0ZXh0KXtcbiAgICAgICAgICAgIHRleHQgPSB0ZXh0LnRvU3RyaW5nKCkgfHwgJyAnO1xuICAgICAgICAgICAgaWYgKHRoaXMuX3RleHQgPT09IHRleHQpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5fdGV4dCA9IHRleHQ7XG4gICAgICAgICAgICB0aGlzLmRpcnR5ID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuXG4vKipcbiAqIFJlbmRlcnMgdGV4dCBhbmQgdXBkYXRlcyBpdCB3aGVuIG5lZWRlZFxuICpcbiAqIEBwcml2YXRlXG4gKi9cblRleHQucHJvdG90eXBlLnVwZGF0ZVRleHQgPSBmdW5jdGlvbiAoKVxue1xuICAgIHZhciBzdHlsZSA9IHRoaXMuX3N0eWxlO1xuICAgIHRoaXMuY29udGV4dC5mb250ID0gc3R5bGUuZm9udDtcblxuICAgIC8vIHdvcmQgd3JhcFxuICAgIC8vIHByZXNlcnZlIG9yaWdpbmFsIHRleHRcbiAgICB2YXIgb3V0cHV0VGV4dCA9IHN0eWxlLndvcmRXcmFwID8gdGhpcy53b3JkV3JhcCh0aGlzLl90ZXh0KSA6IHRoaXMuX3RleHQ7XG5cbiAgICAvLyBzcGxpdCB0ZXh0IGludG8gbGluZXNcbiAgICB2YXIgbGluZXMgPSBvdXRwdXRUZXh0LnNwbGl0KC8oPzpcXHJcXG58XFxyfFxcbikvKTtcblxuICAgIC8vIGNhbGN1bGF0ZSB0ZXh0IHdpZHRoXG4gICAgdmFyIGxpbmVXaWR0aHMgPSBuZXcgQXJyYXkobGluZXMubGVuZ3RoKTtcbiAgICB2YXIgbWF4TGluZVdpZHRoID0gMDtcbiAgICB2YXIgZm9udFByb3BlcnRpZXMgPSB0aGlzLmRldGVybWluZUZvbnRQcm9wZXJ0aWVzKHN0eWxlLmZvbnQpO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGluZXMubGVuZ3RoOyBpKyspXG4gICAge1xuICAgICAgICB2YXIgbGluZVdpZHRoID0gdGhpcy5jb250ZXh0Lm1lYXN1cmVUZXh0KGxpbmVzW2ldKS53aWR0aDtcbiAgICAgICAgbGluZVdpZHRoc1tpXSA9IGxpbmVXaWR0aDtcbiAgICAgICAgbWF4TGluZVdpZHRoID0gTWF0aC5tYXgobWF4TGluZVdpZHRoLCBsaW5lV2lkdGgpO1xuICAgIH1cblxuICAgIHZhciB3aWR0aCA9IG1heExpbmVXaWR0aCArIHN0eWxlLnN0cm9rZVRoaWNrbmVzcztcbiAgICBpZiAoc3R5bGUuZHJvcFNoYWRvdylcbiAgICB7XG4gICAgICAgIHdpZHRoICs9IHN0eWxlLmRyb3BTaGFkb3dEaXN0YW5jZTtcbiAgICB9XG5cbiAgICB0aGlzLmNhbnZhcy53aWR0aCA9ICggd2lkdGggKyB0aGlzLmNvbnRleHQubGluZVdpZHRoICkgKiB0aGlzLnJlc29sdXRpb247XG5cbiAgICAvLyBjYWxjdWxhdGUgdGV4dCBoZWlnaHRcbiAgICB2YXIgbGluZUhlaWdodCA9IHRoaXMuc3R5bGUubGluZUhlaWdodCB8fCBmb250UHJvcGVydGllcy5mb250U2l6ZSArIHN0eWxlLnN0cm9rZVRoaWNrbmVzcztcblxuICAgIHZhciBoZWlnaHQgPSBsaW5lSGVpZ2h0ICogbGluZXMubGVuZ3RoO1xuICAgIGlmIChzdHlsZS5kcm9wU2hhZG93KVxuICAgIHtcbiAgICAgICAgaGVpZ2h0ICs9IHN0eWxlLmRyb3BTaGFkb3dEaXN0YW5jZTtcbiAgICB9XG5cbiAgICB0aGlzLmNhbnZhcy5oZWlnaHQgPSAoIGhlaWdodCArIHRoaXMuX3N0eWxlLnBhZGRpbmcgKiAyICkgKiB0aGlzLnJlc29sdXRpb247XG5cbiAgICB0aGlzLmNvbnRleHQuc2NhbGUoIHRoaXMucmVzb2x1dGlvbiwgdGhpcy5yZXNvbHV0aW9uKTtcblxuICAgIGlmIChuYXZpZ2F0b3IuaXNDb2Nvb25KUylcbiAgICB7XG4gICAgICAgIHRoaXMuY29udGV4dC5jbGVhclJlY3QoMCwgMCwgdGhpcy5jYW52YXMud2lkdGgsIHRoaXMuY2FudmFzLmhlaWdodCk7XG5cbiAgICB9XG5cbiAgICAvL3RoaXMuY29udGV4dC5maWxsU3R5bGU9XCIjRkYwMDAwXCI7XG4gICAgLy90aGlzLmNvbnRleHQuZmlsbFJlY3QoMCwgMCwgdGhpcy5jYW52YXMud2lkdGgsIHRoaXMuY2FudmFzLmhlaWdodCk7XG5cbiAgICB0aGlzLmNvbnRleHQuZm9udCA9IHN0eWxlLmZvbnQ7XG4gICAgdGhpcy5jb250ZXh0LnN0cm9rZVN0eWxlID0gc3R5bGUuc3Ryb2tlO1xuICAgIHRoaXMuY29udGV4dC5saW5lV2lkdGggPSBzdHlsZS5zdHJva2VUaGlja25lc3M7XG4gICAgdGhpcy5jb250ZXh0LnRleHRCYXNlbGluZSA9IHN0eWxlLnRleHRCYXNlbGluZTtcbiAgICB0aGlzLmNvbnRleHQubGluZUpvaW4gPSBzdHlsZS5saW5lSm9pbjtcbiAgICB0aGlzLmNvbnRleHQubWl0ZXJMaW1pdCA9IHN0eWxlLm1pdGVyTGltaXQ7XG5cbiAgICB2YXIgbGluZVBvc2l0aW9uWDtcbiAgICB2YXIgbGluZVBvc2l0aW9uWTtcblxuICAgIGlmIChzdHlsZS5kcm9wU2hhZG93KVxuICAgIHtcbiAgICAgICAgaWYgKHN0eWxlLmRyb3BTaGFkb3dCbHVyID4gMCkge1xuICAgICAgICAgICAgdGhpcy5jb250ZXh0LnNoYWRvd0NvbG9yID0gc3R5bGUuZHJvcFNoYWRvd0NvbG9yO1xuICAgICAgICAgICAgdGhpcy5jb250ZXh0LnNoYWRvd0JsdXIgPSBzdHlsZS5kcm9wU2hhZG93Qmx1cjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuY29udGV4dC5maWxsU3R5bGUgPSBzdHlsZS5kcm9wU2hhZG93Q29sb3I7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgeFNoYWRvd09mZnNldCA9IE1hdGguY29zKHN0eWxlLmRyb3BTaGFkb3dBbmdsZSkgKiBzdHlsZS5kcm9wU2hhZG93RGlzdGFuY2U7XG4gICAgICAgIHZhciB5U2hhZG93T2Zmc2V0ID0gTWF0aC5zaW4oc3R5bGUuZHJvcFNoYWRvd0FuZ2xlKSAqIHN0eWxlLmRyb3BTaGFkb3dEaXN0YW5jZTtcblxuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbGluZXMubGVuZ3RoOyBpKyspXG4gICAgICAgIHtcbiAgICAgICAgICAgIGxpbmVQb3NpdGlvblggPSBzdHlsZS5zdHJva2VUaGlja25lc3MgLyAyO1xuICAgICAgICAgICAgbGluZVBvc2l0aW9uWSA9IChzdHlsZS5zdHJva2VUaGlja25lc3MgLyAyICsgaSAqIGxpbmVIZWlnaHQpICsgZm9udFByb3BlcnRpZXMuYXNjZW50O1xuXG4gICAgICAgICAgICBpZiAoc3R5bGUuYWxpZ24gPT09ICdyaWdodCcpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgbGluZVBvc2l0aW9uWCArPSBtYXhMaW5lV2lkdGggLSBsaW5lV2lkdGhzW2ldO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoc3R5bGUuYWxpZ24gPT09ICdjZW50ZXInKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGxpbmVQb3NpdGlvblggKz0gKG1heExpbmVXaWR0aCAtIGxpbmVXaWR0aHNbaV0pIC8gMjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHN0eWxlLmZpbGwpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdGhpcy5jb250ZXh0LmZpbGxUZXh0KGxpbmVzW2ldLCBsaW5lUG9zaXRpb25YICsgeFNoYWRvd09mZnNldCwgbGluZVBvc2l0aW9uWSArIHlTaGFkb3dPZmZzZXQgKyB0aGlzLl9zdHlsZS5wYWRkaW5nKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vc2V0IGNhbnZhcyB0ZXh0IHN0eWxlc1xuICAgIHRoaXMuY29udGV4dC5maWxsU3R5bGUgPSBzdHlsZS5maWxsO1xuXG4gICAgLy9kcmF3IGxpbmVzIGxpbmUgYnkgbGluZVxuICAgIGZvciAoaSA9IDA7IGkgPCBsaW5lcy5sZW5ndGg7IGkrKylcbiAgICB7XG4gICAgICAgIGxpbmVQb3NpdGlvblggPSBzdHlsZS5zdHJva2VUaGlja25lc3MgLyAyO1xuICAgICAgICBsaW5lUG9zaXRpb25ZID0gKHN0eWxlLnN0cm9rZVRoaWNrbmVzcyAvIDIgKyBpICogbGluZUhlaWdodCkgKyBmb250UHJvcGVydGllcy5hc2NlbnQ7XG5cbiAgICAgICAgaWYgKHN0eWxlLmFsaWduID09PSAncmlnaHQnKVxuICAgICAgICB7XG4gICAgICAgICAgICBsaW5lUG9zaXRpb25YICs9IG1heExpbmVXaWR0aCAtIGxpbmVXaWR0aHNbaV07XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoc3R5bGUuYWxpZ24gPT09ICdjZW50ZXInKVxuICAgICAgICB7XG4gICAgICAgICAgICBsaW5lUG9zaXRpb25YICs9IChtYXhMaW5lV2lkdGggLSBsaW5lV2lkdGhzW2ldKSAvIDI7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoc3R5bGUuc3Ryb2tlICYmIHN0eWxlLnN0cm9rZVRoaWNrbmVzcylcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5jb250ZXh0LnN0cm9rZVRleHQobGluZXNbaV0sIGxpbmVQb3NpdGlvblgsIGxpbmVQb3NpdGlvblkgKyB0aGlzLl9zdHlsZS5wYWRkaW5nKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChzdHlsZS5maWxsKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmNvbnRleHQuZmlsbFRleHQobGluZXNbaV0sIGxpbmVQb3NpdGlvblgsIGxpbmVQb3NpdGlvblkgKyB0aGlzLl9zdHlsZS5wYWRkaW5nKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMudXBkYXRlVGV4dHVyZSgpO1xufTtcblxuLyoqXG4gKiBVcGRhdGVzIHRleHR1cmUgc2l6ZSBiYXNlZCBvbiBjYW52YXMgc2l6ZVxuICpcbiAqIEBwcml2YXRlXG4gKi9cblRleHQucHJvdG90eXBlLnVwZGF0ZVRleHR1cmUgPSBmdW5jdGlvbiAoKVxue1xuICAgIHZhciB0ZXh0dXJlID0gdGhpcy5fdGV4dHVyZTtcblxuICAgIHRleHR1cmUuYmFzZVRleHR1cmUuaGFzTG9hZGVkID0gdHJ1ZTtcbiAgICB0ZXh0dXJlLmJhc2VUZXh0dXJlLnJlc29sdXRpb24gPSB0aGlzLnJlc29sdXRpb247XG5cbiAgICB0ZXh0dXJlLmJhc2VUZXh0dXJlLndpZHRoID0gdGhpcy5jYW52YXMud2lkdGggLyB0aGlzLnJlc29sdXRpb247XG4gICAgdGV4dHVyZS5iYXNlVGV4dHVyZS5oZWlnaHQgPSB0aGlzLmNhbnZhcy5oZWlnaHQgLyB0aGlzLnJlc29sdXRpb247XG4gICAgdGV4dHVyZS5jcm9wLndpZHRoID0gdGV4dHVyZS5fZnJhbWUud2lkdGggPSB0aGlzLmNhbnZhcy53aWR0aCAvIHRoaXMucmVzb2x1dGlvbjtcbiAgICB0ZXh0dXJlLmNyb3AuaGVpZ2h0ID0gdGV4dHVyZS5fZnJhbWUuaGVpZ2h0ID0gdGhpcy5jYW52YXMuaGVpZ2h0IC8gdGhpcy5yZXNvbHV0aW9uO1xuXG4gICAgdGV4dHVyZS50cmltLnggPSAwO1xuICAgIHRleHR1cmUudHJpbS55ID0gLXRoaXMuX3N0eWxlLnBhZGRpbmc7XG5cbiAgICB0ZXh0dXJlLnRyaW0ud2lkdGggPSB0ZXh0dXJlLl9mcmFtZS53aWR0aDtcbiAgICB0ZXh0dXJlLnRyaW0uaGVpZ2h0ID0gdGV4dHVyZS5fZnJhbWUuaGVpZ2h0IC0gdGhpcy5fc3R5bGUucGFkZGluZyoyO1xuXG4gICAgdGhpcy5fd2lkdGggPSB0aGlzLmNhbnZhcy53aWR0aCAvIHRoaXMucmVzb2x1dGlvbjtcbiAgICB0aGlzLl9oZWlnaHQgPSB0aGlzLmNhbnZhcy5oZWlnaHQgLyB0aGlzLnJlc29sdXRpb247XG5cbiAgICB0ZXh0dXJlLmJhc2VUZXh0dXJlLmVtaXQoJ3VwZGF0ZScsICB0ZXh0dXJlLmJhc2VUZXh0dXJlKTtcblxuICAgIHRoaXMuZGlydHkgPSBmYWxzZTtcbn07XG5cbi8qKlxuICogUmVuZGVycyB0aGUgb2JqZWN0IHVzaW5nIHRoZSBXZWJHTCByZW5kZXJlclxuICpcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5XZWJHTFJlbmRlcmVyfVxuICovXG5UZXh0LnByb3RvdHlwZS5yZW5kZXJXZWJHTCA9IGZ1bmN0aW9uIChyZW5kZXJlcilcbntcbiAgICBpZiAodGhpcy5kaXJ0eSlcbiAgICB7XG4gICAgICAgIC8vdGhpcy5yZXNvbHV0aW9uID0gMS8vcmVuZGVyZXIucmVzb2x1dGlvbjtcblxuICAgICAgICB0aGlzLnVwZGF0ZVRleHQoKTtcbiAgICB9XG5cbiAgICBTcHJpdGUucHJvdG90eXBlLnJlbmRlcldlYkdMLmNhbGwodGhpcywgcmVuZGVyZXIpO1xufTtcblxuLyoqXG4gKiBSZW5kZXJzIHRoZSBvYmplY3QgdXNpbmcgdGhlIENhbnZhcyByZW5kZXJlclxuICpcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5DYW52YXNSZW5kZXJlcn1cbiAqIEBwcml2YXRlXG4gKi9cblRleHQucHJvdG90eXBlLl9yZW5kZXJDYW52YXMgPSBmdW5jdGlvbiAocmVuZGVyZXIpXG57XG4gICAgaWYgKHRoaXMuZGlydHkpXG4gICAge1xuICAgICAvLyAgIHRoaXMucmVzb2x1dGlvbiA9IDEvL3JlbmRlcmVyLnJlc29sdXRpb247XG5cbiAgICAgICAgdGhpcy51cGRhdGVUZXh0KCk7XG4gICAgfVxuXG4gICAgU3ByaXRlLnByb3RvdHlwZS5fcmVuZGVyQ2FudmFzLmNhbGwodGhpcywgcmVuZGVyZXIpO1xufTtcblxuLyoqXG4gKiBDYWxjdWxhdGVzIHRoZSBhc2NlbnQsIGRlc2NlbnQgYW5kIGZvbnRTaXplIG9mIGEgZ2l2ZW4gZm9udFN0eWxlXG4gKlxuICogQHBhcmFtIGZvbnRTdHlsZSB7b2JqZWN0fVxuICogQHByaXZhdGVcbiAqL1xuVGV4dC5wcm90b3R5cGUuZGV0ZXJtaW5lRm9udFByb3BlcnRpZXMgPSBmdW5jdGlvbiAoZm9udFN0eWxlKVxue1xuICAgIHZhciBwcm9wZXJ0aWVzID0gVGV4dC5mb250UHJvcGVydGllc0NhY2hlW2ZvbnRTdHlsZV07XG5cbiAgICBpZiAoIXByb3BlcnRpZXMpXG4gICAge1xuICAgICAgICBwcm9wZXJ0aWVzID0ge307XG5cbiAgICAgICAgdmFyIGNhbnZhcyA9IFRleHQuZm9udFByb3BlcnRpZXNDYW52YXM7XG4gICAgICAgIHZhciBjb250ZXh0ID0gVGV4dC5mb250UHJvcGVydGllc0NvbnRleHQ7XG5cbiAgICAgICAgY29udGV4dC5mb250ID0gZm9udFN0eWxlO1xuXG4gICAgICAgIHZhciB3aWR0aCA9IE1hdGguY2VpbChjb250ZXh0Lm1lYXN1cmVUZXh0KCd8TcOJcScpLndpZHRoKTtcbiAgICAgICAgdmFyIGJhc2VsaW5lID0gTWF0aC5jZWlsKGNvbnRleHQubWVhc3VyZVRleHQoJ00nKS53aWR0aCk7XG4gICAgICAgIHZhciBoZWlnaHQgPSAyICogYmFzZWxpbmU7XG5cbiAgICAgICAgYmFzZWxpbmUgPSBiYXNlbGluZSAqIDEuNCB8IDA7XG5cbiAgICAgICAgY2FudmFzLndpZHRoID0gd2lkdGg7XG4gICAgICAgIGNhbnZhcy5oZWlnaHQgPSBoZWlnaHQ7XG5cbiAgICAgICAgY29udGV4dC5maWxsU3R5bGUgPSAnI2YwMCc7XG4gICAgICAgIGNvbnRleHQuZmlsbFJlY3QoMCwgMCwgd2lkdGgsIGhlaWdodCk7XG5cbiAgICAgICAgY29udGV4dC5mb250ID0gZm9udFN0eWxlO1xuXG4gICAgICAgIGNvbnRleHQudGV4dEJhc2VsaW5lID0gJ2FscGhhYmV0aWMnO1xuICAgICAgICBjb250ZXh0LmZpbGxTdHlsZSA9ICcjMDAwJztcbiAgICAgICAgY29udGV4dC5maWxsVGV4dCgnfE3DiXEnLCAwLCBiYXNlbGluZSk7XG5cbiAgICAgICAgdmFyIGltYWdlZGF0YSA9IGNvbnRleHQuZ2V0SW1hZ2VEYXRhKDAsIDAsIHdpZHRoLCBoZWlnaHQpLmRhdGE7XG4gICAgICAgIHZhciBwaXhlbHMgPSBpbWFnZWRhdGEubGVuZ3RoO1xuICAgICAgICB2YXIgbGluZSA9IHdpZHRoICogNDtcblxuICAgICAgICB2YXIgaSwgajtcblxuICAgICAgICB2YXIgaWR4ID0gMDtcbiAgICAgICAgdmFyIHN0b3AgPSBmYWxzZTtcblxuICAgICAgICAvLyBhc2NlbnQuIHNjYW4gZnJvbSB0b3AgdG8gYm90dG9tIHVudGlsIHdlIGZpbmQgYSBub24gcmVkIHBpeGVsXG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCBiYXNlbGluZTsgaSsrKVxuICAgICAgICB7XG4gICAgICAgICAgICBmb3IgKGogPSAwOyBqIDwgbGluZTsgaiArPSA0KVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGlmIChpbWFnZWRhdGFbaWR4ICsgal0gIT09IDI1NSlcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIHN0b3AgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIXN0b3ApXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgaWR4ICs9IGxpbmU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBwcm9wZXJ0aWVzLmFzY2VudCA9IGJhc2VsaW5lIC0gaTtcblxuICAgICAgICBpZHggPSBwaXhlbHMgLSBsaW5lO1xuICAgICAgICBzdG9wID0gZmFsc2U7XG5cbiAgICAgICAgLy8gZGVzY2VudC4gc2NhbiBmcm9tIGJvdHRvbSB0byB0b3AgdW50aWwgd2UgZmluZCBhIG5vbiByZWQgcGl4ZWxcbiAgICAgICAgZm9yIChpID0gaGVpZ2h0OyBpID4gYmFzZWxpbmU7IGktLSlcbiAgICAgICAge1xuICAgICAgICAgICAgZm9yIChqID0gMDsgaiA8IGxpbmU7IGogKz0gNClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBpZiAoaW1hZ2VkYXRhW2lkeCArIGpdICE9PSAyNTUpXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBzdG9wID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCFzdG9wKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGlkeCAtPSBsaW5lO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcHJvcGVydGllcy5kZXNjZW50ID0gaSAtIGJhc2VsaW5lO1xuICAgICAgICBwcm9wZXJ0aWVzLmZvbnRTaXplID0gcHJvcGVydGllcy5hc2NlbnQgKyBwcm9wZXJ0aWVzLmRlc2NlbnQ7XG5cbiAgICAgICAgVGV4dC5mb250UHJvcGVydGllc0NhY2hlW2ZvbnRTdHlsZV0gPSBwcm9wZXJ0aWVzO1xuICAgIH1cblxuICAgIHJldHVybiBwcm9wZXJ0aWVzO1xufTtcblxuLyoqXG4gKiBBcHBsaWVzIG5ld2xpbmVzIHRvIGEgc3RyaW5nIHRvIGhhdmUgaXQgb3B0aW1hbGx5IGZpdCBpbnRvIHRoZSBob3Jpem9udGFsXG4gKiBib3VuZHMgc2V0IGJ5IHRoZSBUZXh0IG9iamVjdCdzIHdvcmRXcmFwV2lkdGggcHJvcGVydHkuXG4gKlxuICogQHBhcmFtIHRleHQge3N0cmluZ31cbiAqIEBwcml2YXRlXG4gKi9cblRleHQucHJvdG90eXBlLndvcmRXcmFwID0gZnVuY3Rpb24gKHRleHQpXG57XG4gICAgLy8gR3JlZWR5IHdyYXBwaW5nIGFsZ29yaXRobSB0aGF0IHdpbGwgd3JhcCB3b3JkcyBhcyB0aGUgbGluZSBncm93cyBsb25nZXJcbiAgICAvLyB0aGFuIGl0cyBob3Jpem9udGFsIGJvdW5kcy5cbiAgICB2YXIgcmVzdWx0ID0gJyc7XG4gICAgdmFyIGxpbmVzID0gdGV4dC5zcGxpdCgnXFxuJyk7XG4gICAgdmFyIHdvcmRXcmFwV2lkdGggPSB0aGlzLl9zdHlsZS53b3JkV3JhcFdpZHRoO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGluZXMubGVuZ3RoOyBpKyspXG4gICAge1xuICAgICAgICB2YXIgc3BhY2VMZWZ0ID0gd29yZFdyYXBXaWR0aDtcbiAgICAgICAgdmFyIHdvcmRzID0gbGluZXNbaV0uc3BsaXQoJyAnKTtcbiAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCB3b3Jkcy5sZW5ndGg7IGorKylcbiAgICAgICAge1xuICAgICAgICAgICAgdmFyIHdvcmRXaWR0aCA9IHRoaXMuY29udGV4dC5tZWFzdXJlVGV4dCh3b3Jkc1tqXSkud2lkdGg7XG4gICAgICAgICAgICB2YXIgd29yZFdpZHRoV2l0aFNwYWNlID0gd29yZFdpZHRoICsgdGhpcy5jb250ZXh0Lm1lYXN1cmVUZXh0KCcgJykud2lkdGg7XG4gICAgICAgICAgICBpZiAoaiA9PT0gMCB8fCB3b3JkV2lkdGhXaXRoU3BhY2UgPiBzcGFjZUxlZnQpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgLy8gU2tpcCBwcmludGluZyB0aGUgbmV3bGluZSBpZiBpdCdzIHRoZSBmaXJzdCB3b3JkIG9mIHRoZSBsaW5lIHRoYXQgaXNcbiAgICAgICAgICAgICAgICAvLyBncmVhdGVyIHRoYW4gdGhlIHdvcmQgd3JhcCB3aWR0aC5cbiAgICAgICAgICAgICAgICBpZiAoaiA+IDApXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQgKz0gJ1xcbic7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJlc3VsdCArPSB3b3Jkc1tqXTtcbiAgICAgICAgICAgICAgICBzcGFjZUxlZnQgPSB3b3JkV3JhcFdpZHRoIC0gd29yZFdpZHRoO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHNwYWNlTGVmdCAtPSB3b3JkV2lkdGhXaXRoU3BhY2U7XG4gICAgICAgICAgICAgICAgcmVzdWx0ICs9ICcgJyArIHdvcmRzW2pdO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGkgPCBsaW5lcy5sZW5ndGgtMSlcbiAgICAgICAge1xuICAgICAgICAgICAgcmVzdWx0ICs9ICdcXG4nO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG59O1xuXG4vKipcbiAqIFJldHVybnMgdGhlIGJvdW5kcyBvZiB0aGUgVGV4dCBhcyBhIHJlY3RhbmdsZS4gVGhlIGJvdW5kcyBjYWxjdWxhdGlvbiB0YWtlcyB0aGUgd29ybGRUcmFuc2Zvcm0gaW50byBhY2NvdW50LlxuICpcbiAqIEBwYXJhbSBtYXRyaXgge1BJWEkuTWF0cml4fSB0aGUgdHJhbnNmb3JtYXRpb24gbWF0cml4IG9mIHRoZSBUZXh0XG4gKiBAcmV0dXJuIHtQSVhJLlJlY3RhbmdsZX0gdGhlIGZyYW1pbmcgcmVjdGFuZ2xlXG4gKi9cblRleHQucHJvdG90eXBlLmdldEJvdW5kcyA9IGZ1bmN0aW9uIChtYXRyaXgpXG57XG4gICAgaWYgKHRoaXMuZGlydHkpXG4gICAge1xuICAgICAgICB0aGlzLnVwZGF0ZVRleHQoKTtcbiAgICB9XG5cbiAgICByZXR1cm4gU3ByaXRlLnByb3RvdHlwZS5nZXRCb3VuZHMuY2FsbCh0aGlzLCBtYXRyaXgpO1xufTtcblxuLyoqXG4gKiBEZXN0cm95cyB0aGlzIHRleHQgb2JqZWN0LlxuICpcbiAqIEBwYXJhbSBbZGVzdHJveUJhc2VUZXh0dXJlPXRydWVdIHtib29sZWFufSB3aGV0aGVyIHRvIGRlc3Ryb3kgdGhlIGJhc2UgdGV4dHVyZSBhcyB3ZWxsXG4gKi9cblRleHQucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoZGVzdHJveUJhc2VUZXh0dXJlKVxue1xuICAgIC8vIG1ha2Ugc3VyZSB0byByZXNldCB0aGUgdGhlIGNvbnRleHQgYW5kIGNhbnZhcy4uIGRvbnQgd2FudCB0aGlzIGhhbmdpbmcgYXJvdW5kIGluIG1lbW9yeSFcbiAgICB0aGlzLmNvbnRleHQgPSBudWxsO1xuICAgIHRoaXMuY2FudmFzID0gbnVsbDtcblxuICAgIHRoaXMuX3N0eWxlID0gbnVsbDtcblxuICAgIHRoaXMuX3RleHR1cmUuZGVzdHJveShkZXN0cm95QmFzZVRleHR1cmUgPT09IHVuZGVmaW5lZCA/IHRydWUgOiBkZXN0cm95QmFzZVRleHR1cmUpO1xufTtcbiIsInZhciB1dGlscyA9IHJlcXVpcmUoJy4uL3V0aWxzJyksXG4gICAgQ09OU1QgPSByZXF1aXJlKCcuLi9jb25zdCcpLFxuICAgIEV2ZW50RW1pdHRlciA9IHJlcXVpcmUoJ2V2ZW50ZW1pdHRlcjMnKTtcblxuLyoqXG4gKiBBIHRleHR1cmUgc3RvcmVzIHRoZSBpbmZvcm1hdGlvbiB0aGF0IHJlcHJlc2VudHMgYW4gaW1hZ2UuIEFsbCB0ZXh0dXJlcyBoYXZlIGEgYmFzZSB0ZXh0dXJlLlxuICpcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqIEBwYXJhbSBzb3VyY2Uge0ltYWdlfENhbnZhc30gdGhlIHNvdXJjZSBvYmplY3Qgb2YgdGhlIHRleHR1cmUuXG4gKiBAcGFyYW0gW3NjYWxlTW9kZT1QSVhJLlNDQUxFX01PREVTLkRFRkFVTFRdIHtudW1iZXJ9IFNlZSB7QGxpbmsgUElYSS5TQ0FMRV9NT0RFU30gZm9yIHBvc3NpYmxlIHZhbHVlc1xuICogQHBhcmFtIHJlc29sdXRpb24ge251bWJlcn0gdGhlIHJlc29sdXRpb24gb2YgdGhlIHRleHR1cmUgZm9yIGRldmljZXMgd2l0aCBkaWZmZXJlbnQgcGl4ZWwgcmF0aW9zXG4gKi9cbmZ1bmN0aW9uIEJhc2VUZXh0dXJlKHNvdXJjZSwgc2NhbGVNb2RlLCByZXNvbHV0aW9uKVxue1xuICAgIEV2ZW50RW1pdHRlci5jYWxsKHRoaXMpO1xuXG4gICAgdGhpcy51aWQgPSB1dGlscy51aWQoKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBSZXNvbHV0aW9uIG9mIHRoZSB0ZXh0dXJlLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMucmVzb2x1dGlvbiA9IHJlc29sdXRpb24gfHwgMTtcblxuICAgIC8qKlxuICAgICAqIFRoZSB3aWR0aCBvZiB0aGUgYmFzZSB0ZXh0dXJlIHNldCB3aGVuIHRoZSBpbWFnZSBoYXMgbG9hZGVkXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQHJlYWRPbmx5XG4gICAgICovXG4gICAgdGhpcy53aWR0aCA9IDEwMDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBoZWlnaHQgb2YgdGhlIGJhc2UgdGV4dHVyZSBzZXQgd2hlbiB0aGUgaW1hZ2UgaGFzIGxvYWRlZFxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEByZWFkT25seVxuICAgICAqL1xuICAgIHRoaXMuaGVpZ2h0ID0gMTAwO1xuXG4gICAgLy8gVE9ETyBkb2NzXG4gICAgLy8gdXNlZCB0byBzdG9yZSB0aGUgYWN0dWFsIGRpbWVuc2lvbnMgb2YgdGhlIHNvdXJjZVxuICAgIC8qKlxuICAgICAqIFVzZWQgdG8gc3RvcmUgdGhlIGFjdHVhbCB3aWR0aCBvZiB0aGUgc291cmNlIG9mIHRoaXMgdGV4dHVyZVxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEByZWFkT25seVxuICAgICAqL1xuICAgIHRoaXMucmVhbFdpZHRoID0gMTAwO1xuICAgIC8qKlxuICAgICAqIFVzZWQgdG8gc3RvcmUgdGhlIGFjdHVhbCBoZWlnaHQgb2YgdGhlIHNvdXJjZSBvZiB0aGlzIHRleHR1cmVcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAcmVhZE9ubHlcbiAgICAgKi9cbiAgICB0aGlzLnJlYWxIZWlnaHQgPSAxMDA7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgc2NhbGUgbW9kZSB0byBhcHBseSB3aGVuIHNjYWxpbmcgdGhpcyB0ZXh0dXJlXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgUElYSS5TQ0FMRV9NT0RFUy5MSU5FQVJcbiAgICAgKiBAc2VlIFBJWEkuU0NBTEVfTU9ERVNcbiAgICAgKi9cbiAgICB0aGlzLnNjYWxlTW9kZSA9IHNjYWxlTW9kZSB8fCBDT05TVC5TQ0FMRV9NT0RFUy5ERUZBVUxUO1xuXG4gICAgLyoqXG4gICAgICogU2V0IHRvIHRydWUgb25jZSB0aGUgYmFzZSB0ZXh0dXJlIGhhcyBzdWNjZXNzZnVsbHkgbG9hZGVkLlxuICAgICAqXG4gICAgICogVGhpcyBpcyBuZXZlciB0cnVlIGlmIHRoZSB1bmRlcmx5aW5nIHNvdXJjZSBmYWlscyB0byBsb2FkIG9yIGhhcyBubyB0ZXh0dXJlIGRhdGEuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqIEByZWFkT25seVxuICAgICAqL1xuICAgIHRoaXMuaGFzTG9hZGVkID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBTZXQgdG8gdHJ1ZSBpZiB0aGUgc291cmNlIGlzIGN1cnJlbnRseSBsb2FkaW5nLlxuICAgICAqXG4gICAgICogSWYgYW4gSW1hZ2Ugc291cmNlIGlzIGxvYWRpbmcgdGhlICdsb2FkZWQnIG9yICdlcnJvcicgZXZlbnQgd2lsbCBiZVxuICAgICAqIGRpc3BhdGNoZWQgd2hlbiB0aGUgb3BlcmF0aW9uIGVuZHMuIEFuIHVuZGVyeWxpbmcgc291cmNlIHRoYXQgaXNcbiAgICAgKiBpbW1lZGlhdGVseS1hdmFpbGFibGUgYnlwYXNzZXMgbG9hZGluZyBlbnRpcmVseS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICogQHJlYWRvbmx5XG4gICAgICovXG4gICAgdGhpcy5pc0xvYWRpbmcgPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBpbWFnZSBzb3VyY2UgdGhhdCBpcyB1c2VkIHRvIGNyZWF0ZSB0aGUgdGV4dHVyZS5cbiAgICAgKlxuICAgICAqIFRPRE86IE1ha2UgdGhpcyBhIHNldHRlciB0aGF0IGNhbGxzIGxvYWRTb3VyY2UoKTtcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge0ltYWdlfENhbnZhc31cbiAgICAgKiBAcmVhZG9ubHlcbiAgICAgKi9cbiAgICB0aGlzLnNvdXJjZSA9IG51bGw7IC8vIHNldCBpbiBsb2FkU291cmNlLCBpZiBhdCBhbGxcblxuICAgIC8qKlxuICAgICAqIENvbnRyb2xzIGlmIFJHQiBjaGFubmVscyBzaG91bGQgYmUgcHJlLW11bHRpcGxpZWQgYnkgQWxwaGEgIChXZWJHTCBvbmx5KVxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKiBAZGVmYXVsdCB0cnVlXG4gICAgICovXG4gICAgdGhpcy5wcmVtdWx0aXBsaWVkQWxwaGEgPSB0cnVlO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7c3RyaW5nfVxuICAgICAqL1xuICAgIHRoaXMuaW1hZ2VVcmwgPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogV2V0aGVyIG9yIG5vdCB0aGUgdGV4dHVyZSBpcyBhIHBvd2VyIG9mIHR3bywgdHJ5IHRvIHVzZSBwb3dlciBvZiB0d28gdGV4dHVyZXMgYXMgbXVjaCBhcyB5b3UgY2FuXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuaXNQb3dlck9mVHdvID0gZmFsc2U7XG5cbiAgICAvLyB1c2VkIGZvciB3ZWJHTFxuXG4gICAgLyoqXG4gICAgICpcbiAgICAgKiBTZXQgdGhpcyB0byB0cnVlIGlmIGEgbWlwbWFwIG9mIHRoaXMgdGV4dHVyZSBuZWVkcyB0byBiZSBnZW5lcmF0ZWQuIFRoaXMgdmFsdWUgbmVlZHMgdG8gYmUgc2V0IGJlZm9yZSB0aGUgdGV4dHVyZSBpcyB1c2VkXG4gICAgICogQWxzbyB0aGUgdGV4dHVyZSBtdXN0IGJlIGEgcG93ZXIgb2YgdHdvIHNpemUgdG8gd29ya1xuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKi9cbiAgICB0aGlzLm1pcG1hcCA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogQSBtYXAgb2YgcmVuZGVyZXIgSURzIHRvIHdlYmdsIHRleHR1cmVzXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtvYmplY3Q8bnVtYmVyLCBXZWJHTFRleHR1cmU+fVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fZ2xUZXh0dXJlcyA9IHt9O1xuICAgIHRoaXMuX2FjdGl2ZSA9IGZhbHNlO1xuICAgIHRoaXMuX2lkID0gMDtcbiAgICBcbiAgICAvLyBpZiBubyBzb3VyY2UgcGFzc2VkIGRvbid0IHRyeSB0byBsb2FkXG4gICAgaWYgKHNvdXJjZSlcbiAgICB7XG4gICAgICAgIHRoaXMubG9hZFNvdXJjZShzb3VyY2UpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEZpcmVkIHdoZW4gYSBub3QtaW1tZWRpYXRlbHktYXZhaWxhYmxlIHNvdXJjZSBmaW5pc2hlcyBsb2FkaW5nLlxuICAgICAqXG4gICAgICogQGV2ZW50IGxvYWRlZFxuICAgICAqIEBtZW1iZXJvZiBQSVhJLkJhc2VUZXh0dXJlI1xuICAgICAqIEBwcm90ZWN0ZWRcbiAgICAgKi9cblxuICAgIC8qKlxuICAgICAqIEZpcmVkIHdoZW4gYSBub3QtaW1tZWRpYXRlbHktYXZhaWxhYmxlIHNvdXJjZSBmYWlscyB0byBsb2FkLlxuICAgICAqXG4gICAgICogQGV2ZW50IGVycm9yXG4gICAgICogQG1lbWJlcm9mIFBJWEkuQmFzZVRleHR1cmUjXG4gICAgICogQHByb3RlY3RlZFxuICAgICAqL1xufVxuXG5CYXNlVGV4dHVyZS5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKEV2ZW50RW1pdHRlci5wcm90b3R5cGUpO1xuQmFzZVRleHR1cmUucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gQmFzZVRleHR1cmU7XG5tb2R1bGUuZXhwb3J0cyA9IEJhc2VUZXh0dXJlO1xuXG4vKipcbiAqIFVwZGF0ZXMgdGhlIHRleHR1cmUgb24gYWxsIHRoZSB3ZWJnbCByZW5kZXJlcnMsIHRoaXMgYWxzbyBhc3N1bWVzIHRoZSBzcmMgaGFzIGNoYW5nZWQuXG4gKlxuICogQGZpcmVzIHVwZGF0ZVxuICovXG5CYXNlVGV4dHVyZS5wcm90b3R5cGUudXBkYXRlID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLnJlYWxXaWR0aCA9IHRoaXMuc291cmNlLm5hdHVyYWxXaWR0aCB8fCB0aGlzLnNvdXJjZS53aWR0aDtcbiAgICB0aGlzLnJlYWxIZWlnaHQgPSB0aGlzLnNvdXJjZS5uYXR1cmFsSGVpZ2h0IHx8IHRoaXMuc291cmNlLmhlaWdodDtcblxuICAgIHRoaXMud2lkdGggPSB0aGlzLnJlYWxXaWR0aCAvIHRoaXMucmVzb2x1dGlvbjtcbiAgICB0aGlzLmhlaWdodCA9IHRoaXMucmVhbEhlaWdodCAvIHRoaXMucmVzb2x1dGlvbjtcblxuICAgIHRoaXMuaXNQb3dlck9mVHdvID0gdXRpbHMuaXNQb3dlck9mVHdvKHRoaXMucmVhbFdpZHRoLCB0aGlzLnJlYWxIZWlnaHQpO1xuXG4gICAgdGhpcy5lbWl0KCd1cGRhdGUnLCB0aGlzKTtcbn07XG5cbi8qKlxuICogTG9hZCBhIHNvdXJjZS5cbiAqXG4gKiBJZiB0aGUgc291cmNlIGlzIG5vdC1pbW1lZGlhdGVseS1hdmFpbGFibGUsIHN1Y2ggYXMgYW4gaW1hZ2UgdGhhdCBuZWVkcyB0byBiZVxuICogZG93bmxvYWRlZCwgdGhlbiB0aGUgJ2xvYWRlZCcgb3IgJ2Vycm9yJyBldmVudCB3aWxsIGJlIGRpc3BhdGNoZWQgaW4gdGhlIGZ1dHVyZVxuICogYW5kIGBoYXNMb2FkZWRgIHdpbGwgcmVtYWluIGZhbHNlIGFmdGVyIHRoaXMgY2FsbC5cbiAqXG4gKiBUaGUgbG9naWMgc3RhdGUgYWZ0ZXIgY2FsbGluZyBgbG9hZFNvdXJjZWAgZGlyZWN0bHkgb3IgaW5kaXJlY3RseSAoZWcuIGBmcm9tSW1hZ2VgLCBgbmV3IEJhc2VUZXh0dXJlYCkgaXM6XG4gKlxuICogICAgIGlmICh0ZXh0dXJlLmhhc0xvYWRlZClcbiB7XG4gKiAgICAgICAgLy8gdGV4dHVyZSByZWFkeSBmb3IgdXNlXG4gKiAgICAgfSBlbHNlIGlmICh0ZXh0dXJlLmlzTG9hZGluZylcbiB7XG4gKiAgICAgICAgLy8gbGlzdGVuIHRvICdsb2FkZWQnIGFuZC9vciAnZXJyb3InIGV2ZW50cyBvbiB0ZXh0dXJlXG4gKiAgICAgfSBlbHNlIHtcbiAqICAgICAgICAvLyBub3QgbG9hZGluZywgbm90IGdvaW5nIHRvIGxvYWQgVU5MRVNTIHRoZSBzb3VyY2UgaXMgcmVsb2FkZWRcbiAqICAgICAgICAvLyAoaXQgbWF5IHN0aWxsIG1ha2Ugc2Vuc2UgdG8gbGlzdGVuIHRvIHRoZSBldmVudHMpXG4gKiAgICAgfVxuICpcbiAqIEBwcm90ZWN0ZWRcbiAqIEBwYXJhbSBzb3VyY2Uge0ltYWdlfENhbnZhc30gdGhlIHNvdXJjZSBvYmplY3Qgb2YgdGhlIHRleHR1cmUuXG4gKi9cbkJhc2VUZXh0dXJlLnByb3RvdHlwZS5sb2FkU291cmNlID0gZnVuY3Rpb24gKHNvdXJjZSlcbntcbiAgICB2YXIgd2FzTG9hZGluZyA9IHRoaXMuaXNMb2FkaW5nO1xuICAgIHRoaXMuaGFzTG9hZGVkID0gZmFsc2U7XG4gICAgdGhpcy5pc0xvYWRpbmcgPSBmYWxzZTtcblxuICAgIGlmICh3YXNMb2FkaW5nICYmIHRoaXMuc291cmNlKVxuICAgIHtcbiAgICAgICAgdGhpcy5zb3VyY2Uub25sb2FkID0gbnVsbDtcbiAgICAgICAgdGhpcy5zb3VyY2Uub25lcnJvciA9IG51bGw7XG4gICAgfVxuXG4gICAgdGhpcy5zb3VyY2UgPSBzb3VyY2U7XG5cbiAgICAvLyBBcHBseSBzb3VyY2UgaWYgbG9hZGVkLiBPdGhlcndpc2Ugc2V0dXAgYXBwcm9wcmlhdGUgbG9hZGluZyBtb25pdG9ycy5cbiAgICBpZiAoKHRoaXMuc291cmNlLmNvbXBsZXRlIHx8IHRoaXMuc291cmNlLmdldENvbnRleHQpICYmIHRoaXMuc291cmNlLndpZHRoICYmIHRoaXMuc291cmNlLmhlaWdodClcbiAgICB7XG4gICAgICAgIHRoaXMuX3NvdXJjZUxvYWRlZCgpO1xuICAgIH1cbiAgICBlbHNlIGlmICghc291cmNlLmdldENvbnRleHQpXG4gICAge1xuXG4gICAgICAgIC8vIEltYWdlIGZhaWwgLyBub3QgcmVhZHlcbiAgICAgICAgdGhpcy5pc0xvYWRpbmcgPSB0cnVlO1xuXG4gICAgICAgIHZhciBzY29wZSA9IHRoaXM7XG5cbiAgICAgICAgc291cmNlLm9ubG9hZCA9IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHNvdXJjZS5vbmxvYWQgPSBudWxsO1xuICAgICAgICAgICAgc291cmNlLm9uZXJyb3IgPSBudWxsO1xuXG4gICAgICAgICAgICBpZiAoIXNjb3BlLmlzTG9hZGluZylcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHNjb3BlLmlzTG9hZGluZyA9IGZhbHNlO1xuICAgICAgICAgICAgc2NvcGUuX3NvdXJjZUxvYWRlZCgpO1xuXG4gICAgICAgICAgICBzY29wZS5lbWl0KCdsb2FkZWQnLCBzY29wZSk7XG4gICAgICAgIH07XG5cbiAgICAgICAgc291cmNlLm9uZXJyb3IgPSBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICBzb3VyY2Uub25sb2FkID0gbnVsbDtcbiAgICAgICAgICAgIHNvdXJjZS5vbmVycm9yID0gbnVsbDtcblxuICAgICAgICAgICAgaWYgKCFzY29wZS5pc0xvYWRpbmcpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBzY29wZS5pc0xvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgICAgIHNjb3BlLmVtaXQoJ2Vycm9yJywgc2NvcGUpO1xuICAgICAgICB9O1xuXG4gICAgICAgIC8vIFBlciBodHRwOi8vd3d3LnczLm9yZy9UUi9odG1sNS9lbWJlZGRlZC1jb250ZW50LTAuaHRtbCN0aGUtaW1nLWVsZW1lbnRcbiAgICAgICAgLy8gICBcIlRoZSB2YWx1ZSBvZiBgY29tcGxldGVgIGNhbiB0aHVzIGNoYW5nZSB3aGlsZSBhIHNjcmlwdCBpcyBleGVjdXRpbmcuXCJcbiAgICAgICAgLy8gU28gY29tcGxldGUgbmVlZHMgdG8gYmUgcmUtY2hlY2tlZCBhZnRlciB0aGUgY2FsbGJhY2tzIGhhdmUgYmVlbiBhZGRlZC4uXG4gICAgICAgIC8vIE5PVEU6IGNvbXBsZXRlIHdpbGwgYmUgdHJ1ZSBpZiB0aGUgaW1hZ2UgaGFzIG5vIHNyYyBzbyBiZXN0IHRvIGNoZWNrIGlmIHRoZSBzcmMgaXMgc2V0LlxuICAgICAgICBpZiAoc291cmNlLmNvbXBsZXRlICYmIHNvdXJjZS5zcmMpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuaXNMb2FkaW5nID0gZmFsc2U7XG5cbiAgICAgICAgICAgIC8vIC4uYW5kIGlmIHdlJ3JlIGNvbXBsZXRlIG5vdywgbm8gbmVlZCBmb3IgY2FsbGJhY2tzXG4gICAgICAgICAgICBzb3VyY2Uub25sb2FkID0gbnVsbDtcbiAgICAgICAgICAgIHNvdXJjZS5vbmVycm9yID0gbnVsbDtcblxuICAgICAgICAgICAgaWYgKHNvdXJjZS53aWR0aCAmJiBzb3VyY2UuaGVpZ2h0KVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHRoaXMuX3NvdXJjZUxvYWRlZCgpO1xuXG4gICAgICAgICAgICAgICAgLy8gSWYgYW55IHByZXZpb3VzIHN1YnNjcmliZXJzIHBvc3NpYmxlXG4gICAgICAgICAgICAgICAgaWYgKHdhc0xvYWRpbmcpXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmVtaXQoJ2xvYWRlZCcsIHRoaXMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAvLyBJZiBhbnkgcHJldmlvdXMgc3Vic2NyaWJlcnMgcG9zc2libGVcbiAgICAgICAgICAgICAgICBpZiAod2FzTG9hZGluZylcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZW1pdCgnZXJyb3InLCB0aGlzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG59O1xuXG4vKipcbiAqIFVzZWQgaW50ZXJuYWxseSB0byB1cGRhdGUgdGhlIHdpZHRoLCBoZWlnaHQsIGFuZCBzb21lIG90aGVyIHRyYWNraW5nIHZhcnMgb25jZVxuICogYSBzb3VyY2UgaGFzIHN1Y2Nlc3NmdWxseSBsb2FkZWQuXG4gKlxuICogQHByaXZhdGVcbiAqL1xuQmFzZVRleHR1cmUucHJvdG90eXBlLl9zb3VyY2VMb2FkZWQgPSBmdW5jdGlvbiAoKVxue1xuICAgIHRoaXMuaGFzTG9hZGVkID0gdHJ1ZTtcbiAgICB0aGlzLnVwZGF0ZSgpO1xufTtcblxuLyoqXG4gKiBEZXN0cm95cyB0aGlzIGJhc2UgdGV4dHVyZVxuICpcbiAqL1xuQmFzZVRleHR1cmUucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoKVxue1xuICAgIGlmICh0aGlzLmltYWdlVXJsKVxuICAgIHtcbiAgICAgICAgZGVsZXRlIHV0aWxzLkJhc2VUZXh0dXJlQ2FjaGVbdGhpcy5pbWFnZVVybF07XG4gICAgICAgIGRlbGV0ZSB1dGlscy5UZXh0dXJlQ2FjaGVbdGhpcy5pbWFnZVVybF07XG5cbiAgICAgICAgdGhpcy5pbWFnZVVybCA9IG51bGw7XG5cbiAgICAgICAgaWYgKCFuYXZpZ2F0b3IuaXNDb2Nvb25KUylcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5zb3VyY2Uuc3JjID0gJyc7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZWxzZSBpZiAodGhpcy5zb3VyY2UgJiYgdGhpcy5zb3VyY2UuX3BpeGlJZClcbiAgICB7XG4gICAgICAgIGRlbGV0ZSB1dGlscy5CYXNlVGV4dHVyZUNhY2hlW3RoaXMuc291cmNlLl9waXhpSWRdO1xuICAgIH1cblxuICAgIHRoaXMuc291cmNlID0gbnVsbDtcblxuICAgIHRoaXMuZGlzcG9zZSgpO1xufTtcblxuLyoqXG4gKiBGcmVlcyB0aGUgdGV4dHVyZSBmcm9tIFdlYkdMIG1lbW9yeSB3aXRob3V0IGRlc3Ryb3lpbmcgdGhpcyB0ZXh0dXJlIG9iamVjdC5cbiAqIFRoaXMgbWVhbnMgeW91IGNhbiBzdGlsbCB1c2UgdGhlIHRleHR1cmUgbGF0ZXIgd2hpY2ggd2lsbCB1cGxvYWQgaXQgdG8gR1BVXG4gKiBtZW1vcnkgYWdhaW4uXG4gKlxuICovXG5CYXNlVGV4dHVyZS5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy5lbWl0KCdkaXNwb3NlJywgdGhpcyk7XG5cbiAgICAvLyB0aGlzIHNob3VsZCBubyBsb25nZXIgYmUgbmVlZGVkLCB0aGUgcmVuZGVyZXJzIHNob3VsZCBjbGVhbnVwIGFsbCB0aGUgZ2wgdGV4dHVyZXMuXG4gICAgLy8gdGhpcy5fZ2xUZXh0dXJlcyA9IHt9O1xufTtcblxuLyoqXG4gKiBDaGFuZ2VzIHRoZSBzb3VyY2UgaW1hZ2Ugb2YgdGhlIHRleHR1cmUuXG4gKiBUaGUgb3JpZ2luYWwgc291cmNlIG11c3QgYmUgYW4gSW1hZ2UgZWxlbWVudC5cbiAqXG4gKiBAcGFyYW0gbmV3U3JjIHtzdHJpbmd9IHRoZSBwYXRoIG9mIHRoZSBpbWFnZVxuICovXG5CYXNlVGV4dHVyZS5wcm90b3R5cGUudXBkYXRlU291cmNlSW1hZ2UgPSBmdW5jdGlvbiAobmV3U3JjKVxue1xuICAgIHRoaXMuc291cmNlLnNyYyA9IG5ld1NyYztcblxuICAgIHRoaXMubG9hZFNvdXJjZSh0aGlzLnNvdXJjZSk7XG59O1xuXG4vKipcbiAqIEhlbHBlciBmdW5jdGlvbiB0aGF0IGNyZWF0ZXMgYSBiYXNlIHRleHR1cmUgZnJvbSB0aGUgZ2l2ZW4gaW1hZ2UgdXJsLlxuICogSWYgdGhlIGltYWdlIGlzIG5vdCBpbiB0aGUgYmFzZSB0ZXh0dXJlIGNhY2hlIGl0IHdpbGwgYmUgY3JlYXRlZCBhbmQgbG9hZGVkLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBwYXJhbSBpbWFnZVVybCB7c3RyaW5nfSBUaGUgaW1hZ2UgdXJsIG9mIHRoZSB0ZXh0dXJlXG4gKiBAcGFyYW0gW2Nyb3Nzb3JpZ2luPShhdXRvKV0ge2Jvb2xlYW59IFNob3VsZCB1c2UgYW5vbnltb3VzIENPUlM/IERlZmF1bHRzIHRvIHRydWUgaWYgdGhlIFVSTCBpcyBub3QgYSBkYXRhLVVSSS5cbiAqIEBwYXJhbSBbc2NhbGVNb2RlPVBJWEkuU0NBTEVfTU9ERVMuREVGQVVMVF0ge251bWJlcn0gU2VlIHtAbGluayBQSVhJLlNDQUxFX01PREVTfSBmb3IgcG9zc2libGUgdmFsdWVzXG4gKiBAcmV0dXJuIFBJWEkuQmFzZVRleHR1cmVcbiAqL1xuQmFzZVRleHR1cmUuZnJvbUltYWdlID0gZnVuY3Rpb24gKGltYWdlVXJsLCBjcm9zc29yaWdpbiwgc2NhbGVNb2RlKVxue1xuICAgIHZhciBiYXNlVGV4dHVyZSA9IHV0aWxzLkJhc2VUZXh0dXJlQ2FjaGVbaW1hZ2VVcmxdO1xuXG4gICAgaWYgKGNyb3Nzb3JpZ2luID09PSB1bmRlZmluZWQgJiYgaW1hZ2VVcmwuaW5kZXhPZignZGF0YTonKSAhPT0gMClcbiAgICB7XG4gICAgICAgIGNyb3Nzb3JpZ2luID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBpZiAoIWJhc2VUZXh0dXJlKVxuICAgIHtcbiAgICAgICAgLy8gbmV3IEltYWdlKCkgYnJlYWtzIHRleCBsb2FkaW5nIGluIHNvbWUgdmVyc2lvbnMgb2YgQ2hyb21lLlxuICAgICAgICAvLyBTZWUgaHR0cHM6Ly9jb2RlLmdvb2dsZS5jb20vcC9jaHJvbWl1bS9pc3N1ZXMvZGV0YWlsP2lkPTIzODA3MVxuICAgICAgICB2YXIgaW1hZ2UgPSBuZXcgSW1hZ2UoKTsvL2RvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2ltZycpO1xuICAgICAgICBpZiAoY3Jvc3NvcmlnaW4pXG4gICAgICAgIHtcbiAgICAgICAgICAgIGltYWdlLmNyb3NzT3JpZ2luID0gJyc7XG4gICAgICAgIH1cblxuICAgICAgICBiYXNlVGV4dHVyZSA9IG5ldyBCYXNlVGV4dHVyZShpbWFnZSwgc2NhbGVNb2RlKTtcbiAgICAgICAgYmFzZVRleHR1cmUuaW1hZ2VVcmwgPSBpbWFnZVVybDtcblxuICAgICAgICBpbWFnZS5zcmMgPSBpbWFnZVVybDtcblxuICAgICAgICB1dGlscy5CYXNlVGV4dHVyZUNhY2hlW2ltYWdlVXJsXSA9IGJhc2VUZXh0dXJlO1xuXG4gICAgICAgIC8vIGlmIHRoZXJlIGlzIGFuIEAyeCBhdCB0aGUgZW5kIG9mIHRoZSB1cmwgd2UgYXJlIGdvaW5nIHRvIGFzc3VtZSBpdHMgYSBoaWdocmVzIGltYWdlXG4gICAgICAgIGJhc2VUZXh0dXJlLnJlc29sdXRpb24gPSB1dGlscy5nZXRSZXNvbHV0aW9uT2ZVcmwoaW1hZ2VVcmwpO1xuICAgIH1cblxuICAgIHJldHVybiBiYXNlVGV4dHVyZTtcbn07XG5cbi8qKlxuICogSGVscGVyIGZ1bmN0aW9uIHRoYXQgY3JlYXRlcyBhIGJhc2UgdGV4dHVyZSBmcm9tIHRoZSBnaXZlbiBjYW52YXMgZWxlbWVudC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAcGFyYW0gY2FudmFzIHtDYW52YXN9IFRoZSBjYW52YXMgZWxlbWVudCBzb3VyY2Ugb2YgdGhlIHRleHR1cmVcbiAqIEBwYXJhbSBzY2FsZU1vZGUge251bWJlcn0gU2VlIHtAbGluayBQSVhJLlNDQUxFX01PREVTfSBmb3IgcG9zc2libGUgdmFsdWVzXG4gKiBAcmV0dXJuIFBJWEkuQmFzZVRleHR1cmVcbiAqL1xuQmFzZVRleHR1cmUuZnJvbUNhbnZhcyA9IGZ1bmN0aW9uIChjYW52YXMsIHNjYWxlTW9kZSlcbntcbiAgICBpZiAoIWNhbnZhcy5fcGl4aUlkKVxuICAgIHtcbiAgICAgICAgY2FudmFzLl9waXhpSWQgPSAnY2FudmFzXycgKyB1dGlscy51aWQoKTtcbiAgICB9XG5cbiAgICB2YXIgYmFzZVRleHR1cmUgPSB1dGlscy5CYXNlVGV4dHVyZUNhY2hlW2NhbnZhcy5fcGl4aUlkXTtcblxuICAgIGlmICghYmFzZVRleHR1cmUpXG4gICAge1xuICAgICAgICBiYXNlVGV4dHVyZSA9IG5ldyBCYXNlVGV4dHVyZShjYW52YXMsIHNjYWxlTW9kZSk7XG4gICAgICAgIHV0aWxzLkJhc2VUZXh0dXJlQ2FjaGVbY2FudmFzLl9waXhpSWRdID0gYmFzZVRleHR1cmU7XG4gICAgfVxuXG4gICAgcmV0dXJuIGJhc2VUZXh0dXJlO1xufTtcbiIsInZhciBCYXNlVGV4dHVyZSA9IHJlcXVpcmUoJy4vQmFzZVRleHR1cmUnKSxcbiAgICBUZXh0dXJlID0gcmVxdWlyZSgnLi9UZXh0dXJlJyksXG4gICAgUmVuZGVyVGFyZ2V0ID0gcmVxdWlyZSgnLi4vcmVuZGVyZXJzL3dlYmdsL3V0aWxzL1JlbmRlclRhcmdldCcpLFxuICAgIEZpbHRlck1hbmFnZXIgPSByZXF1aXJlKCcuLi9yZW5kZXJlcnMvd2ViZ2wvbWFuYWdlcnMvRmlsdGVyTWFuYWdlcicpLFxuICAgIENhbnZhc0J1ZmZlciA9IHJlcXVpcmUoJy4uL3JlbmRlcmVycy9jYW52YXMvdXRpbHMvQ2FudmFzQnVmZmVyJyksXG4gICAgbWF0aCA9IHJlcXVpcmUoJy4uL21hdGgnKSxcbiAgICBDT05TVCA9IHJlcXVpcmUoJy4uL2NvbnN0JyksXG4gICAgdGVtcE1hdHJpeCA9IG5ldyBtYXRoLk1hdHJpeCgpO1xuXG4vKipcbiAqIEEgUmVuZGVyVGV4dHVyZSBpcyBhIHNwZWNpYWwgdGV4dHVyZSB0aGF0IGFsbG93cyBhbnkgUGl4aSBkaXNwbGF5IG9iamVjdCB0byBiZSByZW5kZXJlZCB0byBpdC5cbiAqXG4gKiBfX0hpbnRfXzogQWxsIERpc3BsYXlPYmplY3RzIChpLmUuIFNwcml0ZXMpIHRoYXQgcmVuZGVyIHRvIGEgUmVuZGVyVGV4dHVyZSBzaG91bGQgYmUgcHJlbG9hZGVkXG4gKiBvdGhlcndpc2UgYmxhY2sgcmVjdGFuZ2xlcyB3aWxsIGJlIGRyYXduIGluc3RlYWQuXG4gKlxuICogQSBSZW5kZXJUZXh0dXJlIHRha2VzIGEgc25hcHNob3Qgb2YgYW55IERpc3BsYXkgT2JqZWN0IGdpdmVuIHRvIGl0cyByZW5kZXIgbWV0aG9kLiBUaGUgcG9zaXRpb25cbiAqIGFuZCByb3RhdGlvbiBvZiB0aGUgZ2l2ZW4gRGlzcGxheSBPYmplY3RzIGlzIGlnbm9yZWQuIEZvciBleGFtcGxlOlxuICpcbiAqIGBgYGpzXG4gKiB2YXIgcmVuZGVyZXIgPSBQSVhJLmF1dG9EZXRlY3RSZW5kZXJlcigxMDI0LCAxMDI0LCB7IHZpZXc6IGNhbnZhcywgcmF0aW86IDEgfSk7XG4gKiB2YXIgcmVuZGVyVGV4dHVyZSA9IG5ldyBQSVhJLlJlbmRlclRleHR1cmUocmVuZGVyZXIsIDgwMCwgNjAwKTtcbiAqIHZhciBzcHJpdGUgPSBQSVhJLlNwcml0ZS5mcm9tSW1hZ2UoXCJzcGluT2JqXzAxLnBuZ1wiKTtcbiAqXG4gKiBzcHJpdGUucG9zaXRpb24ueCA9IDgwMC8yO1xuICogc3ByaXRlLnBvc2l0aW9uLnkgPSA2MDAvMjtcbiAqIHNwcml0ZS5hbmNob3IueCA9IDAuNTtcbiAqIHNwcml0ZS5hbmNob3IueSA9IDAuNTtcbiAqXG4gKiByZW5kZXJUZXh0dXJlLnJlbmRlcihzcHJpdGUpO1xuICogYGBgXG4gKlxuICogVGhlIFNwcml0ZSBpbiB0aGlzIGNhc2Ugd2lsbCBiZSByZW5kZXJlZCB0byBhIHBvc2l0aW9uIG9mIDAsMC4gVG8gcmVuZGVyIHRoaXMgc3ByaXRlIGF0IGl0cyBhY3R1YWxcbiAqIHBvc2l0aW9uIGEgQ29udGFpbmVyIHNob3VsZCBiZSB1c2VkOlxuICpcbiAqIGBgYGpzXG4gKiB2YXIgZG9jID0gbmV3IFBJWEkuQ29udGFpbmVyKCk7XG4gKlxuICogZG9jLmFkZENoaWxkKHNwcml0ZSk7XG4gKlxuICogcmVuZGVyVGV4dHVyZS5yZW5kZXIoZG9jKTsgIC8vIFJlbmRlcnMgdG8gY2VudGVyIG9mIHJlbmRlclRleHR1cmVcbiAqIGBgYFxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5UZXh0dXJlXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLkNhbnZhc1JlbmRlcmVyfFBJWEkuV2ViR0xSZW5kZXJlcn0gVGhlIHJlbmRlcmVyIHVzZWQgZm9yIHRoaXMgUmVuZGVyVGV4dHVyZVxuICogQHBhcmFtIFt3aWR0aD0xMDBdIHtudW1iZXJ9IFRoZSB3aWR0aCBvZiB0aGUgcmVuZGVyIHRleHR1cmVcbiAqIEBwYXJhbSBbaGVpZ2h0PTEwMF0ge251bWJlcn0gVGhlIGhlaWdodCBvZiB0aGUgcmVuZGVyIHRleHR1cmVcbiAqIEBwYXJhbSBbc2NhbGVNb2RlXSB7bnVtYmVyfSBTZWUge0BsaW5rIFBJWEkuU0NBTEVfTU9ERVN9IGZvciBwb3NzaWJsZSB2YWx1ZXNcbiAqIEBwYXJhbSBbcmVzb2x1dGlvbj0xXSB7bnVtYmVyfSBUaGUgcmVzb2x1dGlvbiBvZiB0aGUgdGV4dHVyZSBiZWluZyBnZW5lcmF0ZWRcbiAqL1xuZnVuY3Rpb24gUmVuZGVyVGV4dHVyZShyZW5kZXJlciwgd2lkdGgsIGhlaWdodCwgc2NhbGVNb2RlLCByZXNvbHV0aW9uKVxue1xuICAgIGlmICghcmVuZGVyZXIpXG4gICAge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1VuYWJsZSB0byBjcmVhdGUgUmVuZGVyVGV4dHVyZSwgeW91IG11c3QgcGFzcyBhIHJlbmRlcmVyIGludG8gdGhlIGNvbnN0cnVjdG9yLicpO1xuICAgIH1cblxuICAgIHdpZHRoID0gd2lkdGggfHwgMTAwO1xuICAgIGhlaWdodCA9IGhlaWdodCB8fCAxMDA7XG4gICAgcmVzb2x1dGlvbiA9IHJlc29sdXRpb24gfHwgQ09OU1QuUkVTT0xVVElPTjtcblxuICAgIC8qKlxuICAgICAqIFRoZSBiYXNlIHRleHR1cmUgb2JqZWN0IHRoYXQgdGhpcyB0ZXh0dXJlIHVzZXNcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge0Jhc2VUZXh0dXJlfVxuICAgICAqL1xuICAgIHZhciBiYXNlVGV4dHVyZSA9IG5ldyBCYXNlVGV4dHVyZSgpO1xuICAgIGJhc2VUZXh0dXJlLndpZHRoID0gd2lkdGg7XG4gICAgYmFzZVRleHR1cmUuaGVpZ2h0ID0gaGVpZ2h0O1xuICAgIGJhc2VUZXh0dXJlLnJlc29sdXRpb24gPSByZXNvbHV0aW9uO1xuICAgIGJhc2VUZXh0dXJlLnNjYWxlTW9kZSA9IHNjYWxlTW9kZSB8fCBDT05TVC5TQ0FMRV9NT0RFUy5ERUZBVUxUO1xuICAgIGJhc2VUZXh0dXJlLmhhc0xvYWRlZCA9IHRydWU7XG5cblxuICAgIFRleHR1cmUuY2FsbCh0aGlzLFxuICAgICAgICBiYXNlVGV4dHVyZSxcbiAgICAgICAgbmV3IG1hdGguUmVjdGFuZ2xlKDAsIDAsIHdpZHRoLCBoZWlnaHQpXG4gICAgKTtcblxuXG4gICAgLyoqXG4gICAgICogVGhlIHdpdGggb2YgdGhlIHJlbmRlciB0ZXh0dXJlXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy53aWR0aCA9IHdpZHRoO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGhlaWdodCBvZiB0aGUgcmVuZGVyIHRleHR1cmVcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLmhlaWdodCA9IGhlaWdodDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBSZXNvbHV0aW9uIG9mIHRoZSB0ZXh0dXJlLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMucmVzb2x1dGlvbiA9IHJlc29sdXRpb247XG5cbiAgICAvKipcbiAgICAgKiBEcmF3L3JlbmRlciB0aGUgZ2l2ZW4gRGlzcGxheU9iamVjdCBvbnRvIHRoZSB0ZXh0dXJlLlxuICAgICAqXG4gICAgICogVGhlIGRpc3BsYXlPYmplY3QgYW5kIGRlc2NlbmRlbnRzIGFyZSB0cmFuc2Zvcm1lZCBkdXJpbmcgdGhpcyBvcGVyYXRpb24uXG4gICAgICogSWYgYHVwZGF0ZVRyYW5zZm9ybWAgaXMgdHJ1ZSB0aGVuIHRoZSB0cmFuc2Zvcm1hdGlvbnMgd2lsbCBiZSByZXN0b3JlZCBiZWZvcmUgdGhlXG4gICAgICogbWV0aG9kIHJldHVybnMuIE90aGVyd2lzZSBpdCBpcyB1cCB0byB0aGUgY2FsbGluZyBjb2RlIHRvIGNvcnJlY3RseSB1c2Ugb3IgcmVzZXRcbiAgICAgKiB0aGUgdHJhbnNmb3JtZWQgZGlzcGxheSBvYmplY3RzLlxuICAgICAqXG4gICAgICogVGhlIGRpc3BsYXkgb2JqZWN0IGlzIGFsd2F5cyByZW5kZXJlZCB3aXRoIGEgd29ybGRBbHBoYSB2YWx1ZSBvZiAxLlxuICAgICAqXG4gICAgICogQG1ldGhvZFxuICAgICAqIEBwYXJhbSBkaXNwbGF5T2JqZWN0IHtQSVhJLkRpc3BsYXlPYmplY3R9IFRoZSBkaXNwbGF5IG9iamVjdCB0byByZW5kZXIgdGhpcyB0ZXh0dXJlIG9uXG4gICAgICogQHBhcmFtIFttYXRyaXhdIHtQSVhJLk1hdHJpeH0gT3B0aW9uYWwgbWF0cml4IHRvIGFwcGx5IHRvIHRoZSBkaXNwbGF5IG9iamVjdCBiZWZvcmUgcmVuZGVyaW5nLlxuICAgICAqIEBwYXJhbSBbY2xlYXI9ZmFsc2VdIHtib29sZWFufSBJZiB0cnVlIHRoZSB0ZXh0dXJlIHdpbGwgYmUgY2xlYXJlZCBiZWZvcmUgdGhlIGRpc3BsYXlPYmplY3QgaXMgZHJhd25cbiAgICAgKiBAcGFyYW0gW3VwZGF0ZVRyYW5zZm9ybT10cnVlXSB7Ym9vbGVhbn0gSWYgdHJ1ZSB0aGUgZGlzcGxheU9iamVjdCdzIHdvcmxkVHJhbnNmb3JtL3dvcmxkQWxwaGEgYW5kIGFsbCBjaGlsZHJlblxuICAgICAqICB0cmFuc2Zvcm1hdGlvbnMgd2lsbCBiZSByZXN0b3JlZC4gTm90IHJlc3RvcmluZyB0aGlzIGluZm9ybWF0aW9uIHdpbGwgYmUgYSBsaXR0bGUgZmFzdGVyLlxuICAgICAqL1xuICAgIHRoaXMucmVuZGVyID0gbnVsbDtcblxuICAgIC8qKlxuICAgICAqIFRoZSByZW5kZXJlciB0aGlzIFJlbmRlclRleHR1cmUgdXNlcy4gQSBSZW5kZXJUZXh0dXJlIGNhbiBvbmx5IGJlbG9uZyB0byBvbmUgcmVuZGVyZXIgYXQgdGhlIG1vbWVudCBpZiBpdHMgd2ViR0wuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLkNhbnZhc1JlbmRlcmVyfFBJWEkuV2ViR0xSZW5kZXJlcn1cbiAgICAgKi9cbiAgICB0aGlzLnJlbmRlcmVyID0gcmVuZGVyZXI7XG5cbiAgICBpZiAodGhpcy5yZW5kZXJlci50eXBlID09PSBDT05TVC5SRU5ERVJFUl9UWVBFLldFQkdMKVxuICAgIHtcbiAgICAgICAgdmFyIGdsID0gdGhpcy5yZW5kZXJlci5nbDtcblxuICAgICAgICB0aGlzLnRleHR1cmVCdWZmZXIgPSBuZXcgUmVuZGVyVGFyZ2V0KGdsLCB0aGlzLndpZHRoLCB0aGlzLmhlaWdodCwgYmFzZVRleHR1cmUuc2NhbGVNb2RlLCB0aGlzLnJlc29sdXRpb24pOy8vLCB0aGlzLmJhc2VUZXh0dXJlLnNjYWxlTW9kZSk7XG4gICAgICAgIHRoaXMuYmFzZVRleHR1cmUuX2dsVGV4dHVyZXNbZ2wuaWRdID0gdGhpcy50ZXh0dXJlQnVmZmVyLnRleHR1cmU7XG5cbiAgICAgICAgLy9UT0RPIHJlZmFjdG9yIGZpbHRlciBtYW5hZ2VyLi4gYXMgcmVhbGx5IGl0cyBubyBsb25nZXIgYSBtYW5hZ2VyIGlmIHdlIHVzZSBpdCBoZXJlLi5cbiAgICAgICAgdGhpcy5maWx0ZXJNYW5hZ2VyID0gbmV3IEZpbHRlck1hbmFnZXIodGhpcy5yZW5kZXJlcik7XG4gICAgICAgIHRoaXMuZmlsdGVyTWFuYWdlci5vbkNvbnRleHRDaGFuZ2UoKTtcbiAgICAgICAgdGhpcy5maWx0ZXJNYW5hZ2VyLnJlc2l6ZSh3aWR0aCwgaGVpZ2h0KTtcbiAgICAgICAgdGhpcy5yZW5kZXIgPSB0aGlzLnJlbmRlcldlYkdMO1xuXG4gICAgICAgIC8vIHRoZSBjcmVhdGlvbiBvZiBhIGZpbHRlciBtYW5hZ2VyIHVuYmluZHMgdGhlIGJ1ZmZlcnMuLlxuICAgICAgICB0aGlzLnJlbmRlcmVyLmN1cnJlbnRSZW5kZXJlci5zdGFydCgpO1xuICAgICAgICB0aGlzLnJlbmRlcmVyLmN1cnJlbnRSZW5kZXJUYXJnZXQuYWN0aXZhdGUoKTtcbiAgICB9XG4gICAgZWxzZVxuICAgIHtcblxuICAgICAgICB0aGlzLnJlbmRlciA9IHRoaXMucmVuZGVyQ2FudmFzO1xuICAgICAgICB0aGlzLnRleHR1cmVCdWZmZXIgPSBuZXcgQ2FudmFzQnVmZmVyKHRoaXMud2lkdGgqIHRoaXMucmVzb2x1dGlvbiwgdGhpcy5oZWlnaHQqIHRoaXMucmVzb2x1dGlvbik7XG4gICAgICAgIHRoaXMuYmFzZVRleHR1cmUuc291cmNlID0gdGhpcy50ZXh0dXJlQnVmZmVyLmNhbnZhcztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqL1xuICAgIHRoaXMudmFsaWQgPSB0cnVlO1xuXG4gICAgdGhpcy5fdXBkYXRlVXZzKCk7XG59XG5cblJlbmRlclRleHR1cmUucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShUZXh0dXJlLnByb3RvdHlwZSk7XG5SZW5kZXJUZXh0dXJlLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFJlbmRlclRleHR1cmU7XG5tb2R1bGUuZXhwb3J0cyA9IFJlbmRlclRleHR1cmU7XG5cbi8qKlxuICogUmVzaXplcyB0aGUgUmVuZGVyVGV4dHVyZS5cbiAqXG4gKiBAcGFyYW0gd2lkdGgge251bWJlcn0gVGhlIHdpZHRoIHRvIHJlc2l6ZSB0by5cbiAqIEBwYXJhbSBoZWlnaHQge251bWJlcn0gVGhlIGhlaWdodCB0byByZXNpemUgdG8uXG4gKiBAcGFyYW0gdXBkYXRlQmFzZSB7Ym9vbGVhbn0gU2hvdWxkIHRoZSBiYXNlVGV4dHVyZS53aWR0aCBhbmQgaGVpZ2h0IHZhbHVlcyBiZSByZXNpemVkIGFzIHdlbGw/XG4gKi9cblJlbmRlclRleHR1cmUucHJvdG90eXBlLnJlc2l6ZSA9IGZ1bmN0aW9uICh3aWR0aCwgaGVpZ2h0LCB1cGRhdGVCYXNlKVxue1xuICAgIGlmICh3aWR0aCA9PT0gdGhpcy53aWR0aCAmJiBoZWlnaHQgPT09IHRoaXMuaGVpZ2h0KVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMudmFsaWQgPSAod2lkdGggPiAwICYmIGhlaWdodCA+IDApO1xuXG4gICAgdGhpcy53aWR0aCA9IHRoaXMuX2ZyYW1lLndpZHRoID0gdGhpcy5jcm9wLndpZHRoID0gd2lkdGg7XG4gICAgdGhpcy5oZWlnaHQgPSAgdGhpcy5fZnJhbWUuaGVpZ2h0ID0gdGhpcy5jcm9wLmhlaWdodCA9IGhlaWdodDtcblxuICAgIGlmICh1cGRhdGVCYXNlKVxuICAgIHtcbiAgICAgICAgdGhpcy5iYXNlVGV4dHVyZS53aWR0aCA9IHRoaXMud2lkdGg7XG4gICAgICAgIHRoaXMuYmFzZVRleHR1cmUuaGVpZ2h0ID0gdGhpcy5oZWlnaHQ7XG4gICAgfVxuXG4gICAgaWYgKCF0aGlzLnZhbGlkKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMudGV4dHVyZUJ1ZmZlci5yZXNpemUodGhpcy53aWR0aCwgdGhpcy5oZWlnaHQpO1xuXG4gICAgaWYodGhpcy5maWx0ZXJNYW5hZ2VyKVxuICAgIHtcbiAgICAgICAgdGhpcy5maWx0ZXJNYW5hZ2VyLnJlc2l6ZSh0aGlzLndpZHRoLCB0aGlzLmhlaWdodCk7XG4gICAgfVxufTtcblxuLyoqXG4gKiBDbGVhcnMgdGhlIFJlbmRlclRleHR1cmUuXG4gKlxuICovXG5SZW5kZXJUZXh0dXJlLnByb3RvdHlwZS5jbGVhciA9IGZ1bmN0aW9uICgpXG57XG4gICAgaWYgKCF0aGlzLnZhbGlkKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnJlbmRlcmVyLnR5cGUgPT09IENPTlNULlJFTkRFUkVSX1RZUEUuV0VCR0wpXG4gICAge1xuICAgICAgICB0aGlzLnJlbmRlcmVyLmdsLmJpbmRGcmFtZWJ1ZmZlcih0aGlzLnJlbmRlcmVyLmdsLkZSQU1FQlVGRkVSLCB0aGlzLnRleHR1cmVCdWZmZXIuZnJhbWVCdWZmZXIpO1xuICAgIH1cblxuICAgIHRoaXMudGV4dHVyZUJ1ZmZlci5jbGVhcigpO1xufTtcblxuLyoqXG4gKiBJbnRlcm5hbCBtZXRob2QgYXNzaWduZWQgdG8gdGhlIGByZW5kZXJgIHByb3BlcnR5IGlmIHVzaW5nIGEgQ2FudmFzUmVuZGVyZXIuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSBkaXNwbGF5T2JqZWN0IHtQSVhJLkRpc3BsYXlPYmplY3R9IFRoZSBkaXNwbGF5IG9iamVjdCB0byByZW5kZXIgdGhpcyB0ZXh0dXJlIG9uXG4gKiBAcGFyYW0gW21hdHJpeF0ge1BJWEkuTWF0cml4fSBPcHRpb25hbCBtYXRyaXggdG8gYXBwbHkgdG8gdGhlIGRpc3BsYXkgb2JqZWN0IGJlZm9yZSByZW5kZXJpbmcuXG4gKiBAcGFyYW0gW2NsZWFyPWZhbHNlXSB7Ym9vbGVhbn0gSWYgdHJ1ZSB0aGUgdGV4dHVyZSB3aWxsIGJlIGNsZWFyZWQgYmVmb3JlIHRoZSBkaXNwbGF5T2JqZWN0IGlzIGRyYXduXG4gKiBAcGFyYW0gW3VwZGF0ZVRyYW5zZm9ybT10cnVlXSB7Ym9vbGVhbn0gSWYgdHJ1ZSB0aGUgZGlzcGxheU9iamVjdCdzIHdvcmxkVHJhbnNmb3JtL3dvcmxkQWxwaGEgYW5kIGFsbCBjaGlsZHJlblxuICogIHRyYW5zZm9ybWF0aW9ucyB3aWxsIGJlIHJlc3RvcmVkLiBOb3QgcmVzdG9yaW5nIHRoaXMgaW5mb3JtYXRpb24gd2lsbCBiZSBhIGxpdHRsZSBmYXN0ZXIuXG4gKi9cblJlbmRlclRleHR1cmUucHJvdG90eXBlLnJlbmRlcldlYkdMID0gZnVuY3Rpb24gKGRpc3BsYXlPYmplY3QsIG1hdHJpeCwgY2xlYXIsIHVwZGF0ZVRyYW5zZm9ybSlcbntcbiAgICBpZiAoIXRoaXMudmFsaWQpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG5cbiAgICB1cGRhdGVUcmFuc2Zvcm0gPSAodXBkYXRlVHJhbnNmb3JtICE9PSB1bmRlZmluZWQpID8gdXBkYXRlVHJhbnNmb3JtIDogdHJ1ZTsvLyF1cGRhdGVUcmFuc2Zvcm07XG5cbiAgICB0aGlzLnRleHR1cmVCdWZmZXIudHJhbnNmb3JtID0gbWF0cml4O1xuXG4gICAgLy9UT0RPIG5vdCBhIGZhbiB0aGF0IHRoaXMgaXMgaGVyZS4uLiBpdCB3aWxsIG1vdmUhXG4gICAgdGhpcy50ZXh0dXJlQnVmZmVyLmFjdGl2YXRlKCk7XG5cbiAgICAvLyBzZXRXb3JsZCBBbHBoYSB0byBlbnN1cmUgdGhhdCB0aGUgb2JqZWN0IGlzIHJlbmRlcmVyIGF0IGZ1bGwgb3BhY2l0eVxuICAgIGRpc3BsYXlPYmplY3Qud29ybGRBbHBoYSA9IDE7XG5cbiAgICBpZiAodXBkYXRlVHJhbnNmb3JtKVxuICAgIHtcblxuICAgICAgICAvLyByZXNldCB0aGUgbWF0cml4IG9mIHRoZSBkaXNwbGF0eU9iamVjdC4uXG4gICAgICAgIGRpc3BsYXlPYmplY3Qud29ybGRUcmFuc2Zvcm0uaWRlbnRpdHkoKTtcblxuICAgICAgICBkaXNwbGF5T2JqZWN0LmN1cnJlbnRCb3VuZHMgPSBudWxsO1xuXG4gICAgICAgIC8vIFRpbWUgdG8gdXBkYXRlIGFsbCB0aGUgY2hpbGRyZW4gb2YgdGhlIGRpc3BsYXlPYmplY3Qgd2l0aCB0aGUgbmV3IG1hdHJpeC4uXG4gICAgICAgIHZhciBjaGlsZHJlbiA9IGRpc3BsYXlPYmplY3QuY2hpbGRyZW47XG4gICAgICAgIHZhciBpLCBqO1xuXG4gICAgICAgIGZvciAoaSA9IDAsIGogPSBjaGlsZHJlbi5sZW5ndGg7IGkgPCBqOyArK2kpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNoaWxkcmVuW2ldLnVwZGF0ZVRyYW5zZm9ybSgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy9UT0RPIHJlbmFtZSB0ZXh0dXJlQnVmZmVyIHRvIHJlbmRlclRhcmdldC4uXG4gICAgdmFyIHRlbXAgPSAgdGhpcy5yZW5kZXJlci5maWx0ZXJNYW5hZ2VyO1xuXG4gICAgdGhpcy5yZW5kZXJlci5maWx0ZXJNYW5hZ2VyID0gdGhpcy5maWx0ZXJNYW5hZ2VyO1xuICAgIHRoaXMucmVuZGVyZXIucmVuZGVyRGlzcGxheU9iamVjdChkaXNwbGF5T2JqZWN0LCB0aGlzLnRleHR1cmVCdWZmZXIsIGNsZWFyKTtcblxuICAgIHRoaXMucmVuZGVyZXIuZmlsdGVyTWFuYWdlciA9IHRlbXA7XG59O1xuXG5cbi8qKlxuICogSW50ZXJuYWwgbWV0aG9kIGFzc2lnbmVkIHRvIHRoZSBgcmVuZGVyYCBwcm9wZXJ0eSBpZiB1c2luZyBhIENhbnZhc1JlbmRlcmVyLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0gZGlzcGxheU9iamVjdCB7UElYSS5EaXNwbGF5T2JqZWN0fSBUaGUgZGlzcGxheSBvYmplY3QgdG8gcmVuZGVyIHRoaXMgdGV4dHVyZSBvblxuICogQHBhcmFtIFttYXRyaXhdIHtQSVhJLk1hdHJpeH0gT3B0aW9uYWwgbWF0cml4IHRvIGFwcGx5IHRvIHRoZSBkaXNwbGF5IG9iamVjdCBiZWZvcmUgcmVuZGVyaW5nLlxuICogQHBhcmFtIFtjbGVhcl0ge2Jvb2xlYW59IElmIHRydWUgdGhlIHRleHR1cmUgd2lsbCBiZSBjbGVhcmVkIGJlZm9yZSB0aGUgZGlzcGxheU9iamVjdCBpcyBkcmF3blxuICovXG5SZW5kZXJUZXh0dXJlLnByb3RvdHlwZS5yZW5kZXJDYW52YXMgPSBmdW5jdGlvbiAoZGlzcGxheU9iamVjdCwgbWF0cml4LCBjbGVhciwgdXBkYXRlVHJhbnNmb3JtKVxue1xuICAgIGlmICghdGhpcy52YWxpZClcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB1cGRhdGVUcmFuc2Zvcm0gPSAhIXVwZGF0ZVRyYW5zZm9ybTtcblxuICAgIHZhciB3dCA9IHRlbXBNYXRyaXg7XG5cbiAgICB3dC5pZGVudGl0eSgpO1xuXG4gICAgaWYgKG1hdHJpeClcbiAgICB7XG4gICAgICAgIHd0LmFwcGVuZChtYXRyaXgpO1xuICAgIH1cblxuICAgIHZhciBjYWNoZWRXdCA9IGRpc3BsYXlPYmplY3Qud29ybGRUcmFuc2Zvcm07XG4gICAgZGlzcGxheU9iamVjdC53b3JsZFRyYW5zZm9ybSA9IHd0O1xuXG4gICAgLy8gc2V0V29ybGQgQWxwaGEgdG8gZW5zdXJlIHRoYXQgdGhlIG9iamVjdCBpcyByZW5kZXJlciBhdCBmdWxsIG9wYWNpdHlcbiAgICBkaXNwbGF5T2JqZWN0LndvcmxkQWxwaGEgPSAxO1xuXG4gICAgLy8gVGltZSB0byB1cGRhdGUgYWxsIHRoZSBjaGlsZHJlbiBvZiB0aGUgZGlzcGxheU9iamVjdCB3aXRoIHRoZSBuZXcgbWF0cml4Li5cbiAgICB2YXIgY2hpbGRyZW4gPSBkaXNwbGF5T2JqZWN0LmNoaWxkcmVuO1xuICAgIHZhciBpLCBqO1xuXG4gICAgZm9yIChpID0gMCwgaiA9IGNoaWxkcmVuLmxlbmd0aDsgaSA8IGo7ICsraSlcbiAgICB7XG4gICAgICAgIGNoaWxkcmVuW2ldLnVwZGF0ZVRyYW5zZm9ybSgpO1xuICAgIH1cblxuICAgIGlmIChjbGVhcilcbiAgICB7XG4gICAgICAgIHRoaXMudGV4dHVyZUJ1ZmZlci5jbGVhcigpO1xuICAgIH1cblxuXG4vLyAgICB0aGlzLnRleHR1cmVCdWZmZXIuXG4gICAgdmFyIGNvbnRleHQgPSB0aGlzLnRleHR1cmVCdWZmZXIuY29udGV4dDtcblxuICAgIHZhciByZWFsUmVzb2x1dGlvbiA9IHRoaXMucmVuZGVyZXIucmVzb2x1dGlvbjtcblxuICAgIHRoaXMucmVuZGVyZXIucmVzb2x1dGlvbiA9IHRoaXMucmVzb2x1dGlvbjtcblxuICAgIHRoaXMucmVuZGVyZXIucmVuZGVyRGlzcGxheU9iamVjdChkaXNwbGF5T2JqZWN0LCBjb250ZXh0KTtcblxuICAgIHRoaXMucmVuZGVyZXIucmVzb2x1dGlvbiA9IHJlYWxSZXNvbHV0aW9uO1xuXG4gICAgaWYoZGlzcGxheU9iamVjdC53b3JsZFRyYW5zZm9ybSA9PT0gd3QpXG4gICAge1xuICAgICAgICAvLyBmaXhlcyBjYWNoZUFzQml0bWFwIEhhcHBlbmluZyBkdXJpbmcgdGhlIGFib3ZlLi5cbiAgICAgICAgZGlzcGxheU9iamVjdC53b3JsZFRyYW5zZm9ybSA9IGNhY2hlZFd0O1xuICAgIH1cblxufTtcblxuLyoqXG4gKiBEZXN0cm95cyB0aGlzIHRleHR1cmVcbiAqXG4gKiBAcGFyYW0gZGVzdHJveUJhc2Uge2Jvb2xlYW59IFdoZXRoZXIgdG8gZGVzdHJveSB0aGUgYmFzZSB0ZXh0dXJlIGFzIHdlbGxcbiAqL1xuUmVuZGVyVGV4dHVyZS5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uICgpXG57XG4gICAgVGV4dHVyZS5wcm90b3R5cGUuZGVzdHJveS5jYWxsKHRoaXMsIHRydWUpO1xuXG4gICAgdGhpcy50ZXh0dXJlQnVmZmVyLmRlc3Ryb3koKTtcblxuICAgIC8vIGRlc3Ryb3kgdGhlIGZpbHRlcm1hbmFnZXIuLlxuICAgIGlmKHRoaXMuZmlsdGVyTWFuYWdlcilcbiAgICB7XG4gICAgICAgIHRoaXMuZmlsdGVyTWFuYWdlci5kZXN0cm95KCk7XG4gICAgfVxuXG4gICAgdGhpcy5yZW5kZXJlciA9IG51bGw7XG59O1xuXG4vKipcbiAqIFdpbGwgcmV0dXJuIGEgSFRNTCBJbWFnZSBvZiB0aGUgdGV4dHVyZVxuICpcbiAqIEByZXR1cm4ge0ltYWdlfVxuICovXG5SZW5kZXJUZXh0dXJlLnByb3RvdHlwZS5nZXRJbWFnZSA9IGZ1bmN0aW9uICgpXG57XG4gICAgdmFyIGltYWdlID0gbmV3IEltYWdlKCk7XG4gICAgaW1hZ2Uuc3JjID0gdGhpcy5nZXRCYXNlNjQoKTtcbiAgICByZXR1cm4gaW1hZ2U7XG59O1xuXG4vKipcbiAqIFdpbGwgcmV0dXJuIGEgYSBiYXNlNjQgZW5jb2RlZCBzdHJpbmcgb2YgdGhpcyB0ZXh0dXJlLiBJdCB3b3JrcyBieSBjYWxsaW5nIFJlbmRlclRleHR1cmUuZ2V0Q2FudmFzIGFuZCB0aGVuIHJ1bm5pbmcgdG9EYXRhVVJMIG9uIHRoYXQuXG4gKlxuICogQHJldHVybiB7c3RyaW5nfSBBIGJhc2U2NCBlbmNvZGVkIHN0cmluZyBvZiB0aGUgdGV4dHVyZS5cbiAqL1xuUmVuZGVyVGV4dHVyZS5wcm90b3R5cGUuZ2V0QmFzZTY0ID0gZnVuY3Rpb24gKClcbntcbiAgICByZXR1cm4gdGhpcy5nZXRDYW52YXMoKS50b0RhdGFVUkwoKTtcbn07XG5cbi8qKlxuICogQ3JlYXRlcyBhIENhbnZhcyBlbGVtZW50LCByZW5kZXJzIHRoaXMgUmVuZGVyVGV4dHVyZSB0byBpdCBhbmQgdGhlbiByZXR1cm5zIGl0LlxuICpcbiAqIEByZXR1cm4ge0hUTUxDYW52YXNFbGVtZW50fSBBIENhbnZhcyBlbGVtZW50IHdpdGggdGhlIHRleHR1cmUgcmVuZGVyZWQgb24uXG4gKi9cblJlbmRlclRleHR1cmUucHJvdG90eXBlLmdldENhbnZhcyA9IGZ1bmN0aW9uICgpXG57XG4gICAgaWYgKHRoaXMucmVuZGVyZXIudHlwZSA9PT0gQ09OU1QuUkVOREVSRVJfVFlQRS5XRUJHTClcbiAgICB7XG4gICAgICAgIHZhciBnbCA9IHRoaXMucmVuZGVyZXIuZ2w7XG4gICAgICAgIHZhciB3aWR0aCA9IHRoaXMudGV4dHVyZUJ1ZmZlci5zaXplLndpZHRoO1xuICAgICAgICB2YXIgaGVpZ2h0ID0gdGhpcy50ZXh0dXJlQnVmZmVyLnNpemUuaGVpZ2h0O1xuXG4gICAgICAgIHZhciB3ZWJHTFBpeGVscyA9IG5ldyBVaW50OEFycmF5KDQgKiB3aWR0aCAqIGhlaWdodCk7XG5cbiAgICAgICAgZ2wuYmluZEZyYW1lYnVmZmVyKGdsLkZSQU1FQlVGRkVSLCB0aGlzLnRleHR1cmVCdWZmZXIuZnJhbWVCdWZmZXIpO1xuICAgICAgICBnbC5yZWFkUGl4ZWxzKDAsIDAsIHdpZHRoLCBoZWlnaHQsIGdsLlJHQkEsIGdsLlVOU0lHTkVEX0JZVEUsIHdlYkdMUGl4ZWxzKTtcbiAgICAgICAgZ2wuYmluZEZyYW1lYnVmZmVyKGdsLkZSQU1FQlVGRkVSLCBudWxsKTtcblxuICAgICAgICB2YXIgdGVtcENhbnZhcyA9IG5ldyBDYW52YXNCdWZmZXIod2lkdGgsIGhlaWdodCk7XG4gICAgICAgIHZhciBjYW52YXNEYXRhID0gdGVtcENhbnZhcy5jb250ZXh0LmdldEltYWdlRGF0YSgwLCAwLCB3aWR0aCwgaGVpZ2h0KTtcbiAgICAgICAgY2FudmFzRGF0YS5kYXRhLnNldCh3ZWJHTFBpeGVscyk7XG5cbiAgICAgICAgdGVtcENhbnZhcy5jb250ZXh0LnB1dEltYWdlRGF0YShjYW52YXNEYXRhLCAwLCAwKTtcblxuICAgICAgICByZXR1cm4gdGVtcENhbnZhcy5jYW52YXM7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHJldHVybiB0aGlzLnRleHR1cmVCdWZmZXIuY2FudmFzO1xuICAgIH1cbn07XG5cbi8qKlxuICogV2lsbCByZXR1cm4gYSBvbmUtZGltZW5zaW9uYWwgYXJyYXkgY29udGFpbmluZyB0aGUgcGl4ZWwgZGF0YSBvZiB0aGUgZW50aXJlIHRleHR1cmUgaW4gUkdCQSBvcmRlciwgd2l0aCBpbnRlZ2VyIHZhbHVlcyBiZXR3ZWVuIDAgYW5kIDI1NSAoaW5jbHVkZWQpLlxuICpcbiAqIEByZXR1cm4ge1VpbnQ4Q2xhbXBlZEFycmF5fVxuICovXG5SZW5kZXJUZXh0dXJlLnByb3RvdHlwZS5nZXRQaXhlbHMgPSBmdW5jdGlvbiAoKVxue1xuICAgIHZhciB3aWR0aCwgaGVpZ2h0O1xuXG4gICAgaWYgKHRoaXMucmVuZGVyZXIudHlwZSA9PT0gQ09OU1QuUkVOREVSRVJfVFlQRS5XRUJHTClcbiAgICB7XG4gICAgICAgIHZhciBnbCA9IHRoaXMucmVuZGVyZXIuZ2w7XG4gICAgICAgIHdpZHRoID0gdGhpcy50ZXh0dXJlQnVmZmVyLnNpemUud2lkdGg7XG4gICAgICAgIGhlaWdodCA9IHRoaXMudGV4dHVyZUJ1ZmZlci5zaXplLmhlaWdodDtcblxuICAgICAgICB2YXIgd2ViR0xQaXhlbHMgPSBuZXcgVWludDhBcnJheSg0ICogd2lkdGggKiBoZWlnaHQpO1xuXG4gICAgICAgIGdsLmJpbmRGcmFtZWJ1ZmZlcihnbC5GUkFNRUJVRkZFUiwgdGhpcy50ZXh0dXJlQnVmZmVyLmZyYW1lQnVmZmVyKTtcbiAgICAgICAgZ2wucmVhZFBpeGVscygwLCAwLCB3aWR0aCwgaGVpZ2h0LCBnbC5SR0JBLCBnbC5VTlNJR05FRF9CWVRFLCB3ZWJHTFBpeGVscyk7XG4gICAgICAgIGdsLmJpbmRGcmFtZWJ1ZmZlcihnbC5GUkFNRUJVRkZFUiwgbnVsbCk7XG5cbiAgICAgICAgcmV0dXJuIHdlYkdMUGl4ZWxzO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICB3aWR0aCA9IHRoaXMudGV4dHVyZUJ1ZmZlci5jYW52YXMud2lkdGg7XG4gICAgICAgIGhlaWdodCA9IHRoaXMudGV4dHVyZUJ1ZmZlci5jYW52YXMuaGVpZ2h0O1xuXG4gICAgICAgIHJldHVybiB0aGlzLnRleHR1cmVCdWZmZXIuY2FudmFzLmdldENvbnRleHQoJzJkJykuZ2V0SW1hZ2VEYXRhKDAsIDAsIHdpZHRoLCBoZWlnaHQpLmRhdGE7XG4gICAgfVxufTtcblxuLyoqXG4gKiBXaWxsIHJldHVybiBhIG9uZS1kaW1lbnNpb25hbCBhcnJheSBjb250YWluaW5nIHRoZSBwaXhlbCBkYXRhIG9mIGEgcGl4ZWwgd2l0aGluIHRoZSB0ZXh0dXJlIGluIFJHQkEgb3JkZXIsIHdpdGggaW50ZWdlciB2YWx1ZXMgYmV0d2VlbiAwIGFuZCAyNTUgKGluY2x1ZGVkKS5cbiAqXG4gKiBAcGFyYW0geCB7bnVtYmVyfSBUaGUgeCBjb29yZGluYXRlIG9mIHRoZSBwaXhlbCB0byByZXRyaWV2ZS5cbiAqIEBwYXJhbSB5IHtudW1iZXJ9IFRoZSB5IGNvb3JkaW5hdGUgb2YgdGhlIHBpeGVsIHRvIHJldHJpZXZlLlxuICogQHJldHVybiB7VWludDhDbGFtcGVkQXJyYXl9XG4gKi9cblJlbmRlclRleHR1cmUucHJvdG90eXBlLmdldFBpeGVsID0gZnVuY3Rpb24gKHgsIHkpXG57XG4gICAgaWYgKHRoaXMucmVuZGVyZXIudHlwZSA9PT0gQ09OU1QuUkVOREVSRVJfVFlQRS5XRUJHTClcbiAgICB7XG4gICAgICAgIHZhciBnbCA9IHRoaXMucmVuZGVyZXIuZ2w7XG5cbiAgICAgICAgdmFyIHdlYkdMUGl4ZWxzID0gbmV3IFVpbnQ4QXJyYXkoNCk7XG5cbiAgICAgICAgZ2wuYmluZEZyYW1lYnVmZmVyKGdsLkZSQU1FQlVGRkVSLCB0aGlzLnRleHR1cmVCdWZmZXIuZnJhbWVCdWZmZXIpO1xuICAgICAgICBnbC5yZWFkUGl4ZWxzKHgsIHksIDEsIDEsIGdsLlJHQkEsIGdsLlVOU0lHTkVEX0JZVEUsIHdlYkdMUGl4ZWxzKTtcbiAgICAgICAgZ2wuYmluZEZyYW1lYnVmZmVyKGdsLkZSQU1FQlVGRkVSLCBudWxsKTtcblxuICAgICAgICByZXR1cm4gd2ViR0xQaXhlbHM7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHJldHVybiB0aGlzLnRleHR1cmVCdWZmZXIuY2FudmFzLmdldENvbnRleHQoJzJkJykuZ2V0SW1hZ2VEYXRhKHgsIHksIDEsIDEpLmRhdGE7XG4gICAgfVxufTtcbiIsInZhciBCYXNlVGV4dHVyZSA9IHJlcXVpcmUoJy4vQmFzZVRleHR1cmUnKSxcbiAgICBWaWRlb0Jhc2VUZXh0dXJlID0gcmVxdWlyZSgnLi9WaWRlb0Jhc2VUZXh0dXJlJyksXG4gICAgVGV4dHVyZVV2cyA9IHJlcXVpcmUoJy4vVGV4dHVyZVV2cycpLFxuICAgIEV2ZW50RW1pdHRlciA9IHJlcXVpcmUoJ2V2ZW50ZW1pdHRlcjMnKSxcbiAgICBtYXRoID0gcmVxdWlyZSgnLi4vbWF0aCcpLFxuICAgIHV0aWxzID0gcmVxdWlyZSgnLi4vdXRpbHMnKTtcblxuLyoqXG4gKiBBIHRleHR1cmUgc3RvcmVzIHRoZSBpbmZvcm1hdGlvbiB0aGF0IHJlcHJlc2VudHMgYW4gaW1hZ2Ugb3IgcGFydCBvZiBhbiBpbWFnZS4gSXQgY2Fubm90IGJlIGFkZGVkXG4gKiB0byB0aGUgZGlzcGxheSBsaXN0IGRpcmVjdGx5LiBJbnN0ZWFkIHVzZSBpdCBhcyB0aGUgdGV4dHVyZSBmb3IgYSBTcHJpdGUuIElmIG5vIGZyYW1lIGlzIHByb3ZpZGVkIHRoZW4gdGhlIHdob2xlIGltYWdlIGlzIHVzZWQuXG4gKlxuICogWW91IGNhbiBkaXJlY3RseSBjcmVhdGUgYSB0ZXh0dXJlIGZyb20gYW4gaW1hZ2UgYW5kIHRoZW4gcmV1c2UgaXQgbXVsdGlwbGUgdGltZXMgbGlrZSB0aGlzIDpcbiAqXG4gKiBgYGBqc1xuICogdmFyIHRleHR1cmUgPSBQSVhJLlRleHR1cmUuZnJvbUltYWdlKCdhc3NldHMvaW1hZ2UucG5nJyk7XG4gKiB2YXIgc3ByaXRlMSA9IG5ldyBQSVhJLlNwcml0ZSh0ZXh0dXJlKTtcbiAqIHZhciBzcHJpdGUyID0gbmV3IFBJWEkuU3ByaXRlKHRleHR1cmUpO1xuICogYGBgXG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIGJhc2VUZXh0dXJlIHtQSVhJLkJhc2VUZXh0dXJlfSBUaGUgYmFzZSB0ZXh0dXJlIHNvdXJjZSB0byBjcmVhdGUgdGhlIHRleHR1cmUgZnJvbVxuICogQHBhcmFtIFtmcmFtZV0ge1BJWEkuUmVjdGFuZ2xlfSBUaGUgcmVjdGFuZ2xlIGZyYW1lIG9mIHRoZSB0ZXh0dXJlIHRvIHNob3dcbiAqIEBwYXJhbSBbY3JvcF0ge1BJWEkuUmVjdGFuZ2xlfSBUaGUgYXJlYSBvZiBvcmlnaW5hbCB0ZXh0dXJlXG4gKiBAcGFyYW0gW3RyaW1dIHtQSVhJLlJlY3RhbmdsZX0gVHJpbW1lZCB0ZXh0dXJlIHJlY3RhbmdsZVxuICogQHBhcmFtIFtyb3RhdGVdIHtib29sZWFufSBpbmRpY2F0ZXMgd2hldGhlciB0aGUgdGV4dHVyZSBzaG91bGQgYmUgcm90YXRlZCBieSA5MCBkZWdyZWVzICggdXNlZCBieSB0ZXh0dXJlIHBhY2tlciApXG4gKi9cbmZ1bmN0aW9uIFRleHR1cmUoYmFzZVRleHR1cmUsIGZyYW1lLCBjcm9wLCB0cmltLCByb3RhdGUpXG57XG4gICAgRXZlbnRFbWl0dGVyLmNhbGwodGhpcyk7XG5cbiAgICAvKipcbiAgICAgKiBEb2VzIHRoaXMgVGV4dHVyZSBoYXZlIGFueSBmcmFtZSBkYXRhIGFzc2lnbmVkIHRvIGl0P1xuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKi9cbiAgICB0aGlzLm5vRnJhbWUgPSBmYWxzZTtcblxuICAgIGlmICghZnJhbWUpXG4gICAge1xuICAgICAgICB0aGlzLm5vRnJhbWUgPSB0cnVlO1xuICAgICAgICBmcmFtZSA9IG5ldyBtYXRoLlJlY3RhbmdsZSgwLCAwLCAxLCAxKTtcbiAgICB9XG5cbiAgICBpZiAoYmFzZVRleHR1cmUgaW5zdGFuY2VvZiBUZXh0dXJlKVxuICAgIHtcbiAgICAgICAgYmFzZVRleHR1cmUgPSBiYXNlVGV4dHVyZS5iYXNlVGV4dHVyZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYmFzZSB0ZXh0dXJlIHRoYXQgdGhpcyB0ZXh0dXJlIHVzZXMuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLkJhc2VUZXh0dXJlfVxuICAgICAqL1xuICAgIHRoaXMuYmFzZVRleHR1cmUgPSBiYXNlVGV4dHVyZTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBmcmFtZSBzcGVjaWZpZXMgdGhlIHJlZ2lvbiBvZiB0aGUgYmFzZSB0ZXh0dXJlIHRoYXQgdGhpcyB0ZXh0dXJlIHVzZXNcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuUmVjdGFuZ2xlfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fZnJhbWUgPSBmcmFtZTtcblxuICAgIC8qKlxuICAgICAqIFRoZSB0ZXh0dXJlIHRyaW0gZGF0YS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuUmVjdGFuZ2xlfVxuICAgICAqL1xuICAgIHRoaXMudHJpbSA9IHRyaW07XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIHdpbGwgbGV0IHRoZSByZW5kZXJlciBrbm93IGlmIHRoZSB0ZXh0dXJlIGlzIHZhbGlkLiBJZiBpdCdzIG5vdCB0aGVuIGl0IGNhbm5vdCBiZSByZW5kZXJlZC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICovXG4gICAgdGhpcy52YWxpZCA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogVGhpcyB3aWxsIGxldCBhIHJlbmRlcmVyIGtub3cgdGhhdCBhIHRleHR1cmUgaGFzIGJlZW4gdXBkYXRlZCAodXNlZCBtYWlubHkgZm9yIHdlYkdMIHV2IHVwZGF0ZXMpXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqL1xuICAgIHRoaXMucmVxdWlyZXNVcGRhdGUgPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBXZWJHTCBVViBkYXRhIGNhY2hlLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5UZXh0dXJlVXZzfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fdXZzID0gbnVsbDtcblxuICAgIC8qKlxuICAgICAqIFRoZSB3aWR0aCBvZiB0aGUgVGV4dHVyZSBpbiBwaXhlbHMuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy53aWR0aCA9IDA7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgaGVpZ2h0IG9mIHRoZSBUZXh0dXJlIGluIHBpeGVscy5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLmhlaWdodCA9IDA7XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIGlzIHRoZSBhcmVhIG9mIHRoZSBCYXNlVGV4dHVyZSBpbWFnZSB0byBhY3R1YWxseSBjb3B5IHRvIHRoZSBDYW52YXMgLyBXZWJHTCB3aGVuIHJlbmRlcmluZyxcbiAgICAgKiBpcnJlc3BlY3RpdmUgb2YgdGhlIGFjdHVhbCBmcmFtZSBzaXplIG9yIHBsYWNlbWVudCAod2hpY2ggY2FuIGJlIGluZmx1ZW5jZWQgYnkgdHJpbW1lZCB0ZXh0dXJlIGF0bGFzZXMpXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlJlY3RhbmdsZX1cbiAgICAgKi9cbiAgICB0aGlzLmNyb3AgPSBjcm9wIHx8IGZyYW1lOy8vbmV3IG1hdGguUmVjdGFuZ2xlKDAsIDAsIDEsIDEpO1xuXG4gICAgLyoqXG4gICAgICogSW5kaWNhdGVzIHdoZXRoZXIgdGhlIHRleHR1cmUgc2hvdWxkIGJlIHJvdGF0ZWQgYnkgOTAgZGVncmVlc1xuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqL1xuICAgIHRoaXMucm90YXRlID0gISFyb3RhdGU7XG5cbiAgICBpZiAoYmFzZVRleHR1cmUuaGFzTG9hZGVkKVxuICAgIHtcbiAgICAgICAgaWYgKHRoaXMubm9GcmFtZSlcbiAgICAgICAge1xuICAgICAgICAgICAgZnJhbWUgPSBuZXcgbWF0aC5SZWN0YW5nbGUoMCwgMCwgYmFzZVRleHR1cmUud2lkdGgsIGJhc2VUZXh0dXJlLmhlaWdodCk7XG5cbiAgICAgICAgICAgIC8vIGlmIHRoZXJlIGlzIG5vIGZyYW1lIHdlIHNob3VsZCBtb25pdG9yIGZvciBhbnkgYmFzZSB0ZXh0dXJlIGNoYW5nZXMuLlxuICAgICAgICAgICAgYmFzZVRleHR1cmUub24oJ3VwZGF0ZScsIHRoaXMub25CYXNlVGV4dHVyZVVwZGF0ZWQsIHRoaXMpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZnJhbWUgPSBmcmFtZTtcbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgYmFzZVRleHR1cmUub25jZSgnbG9hZGVkJywgdGhpcy5vbkJhc2VUZXh0dXJlTG9hZGVkLCB0aGlzKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBGaXJlZCB3aGVuIHRoZSB0ZXh0dXJlIGlzIHVwZGF0ZWQuIFRoaXMgaGFwcGVucyBpZiB0aGUgZnJhbWUgb3IgdGhlIGJhc2VUZXh0dXJlIGlzIHVwZGF0ZWQuXG4gICAgICpcbiAgICAgKiBAZXZlbnQgdXBkYXRlXG4gICAgICogQG1lbWJlcm9mIFBJWEkuVGV4dHVyZSNcbiAgICAgKiBAcHJvdGVjdGVkXG4gICAgICovXG59XG5cblRleHR1cmUucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShFdmVudEVtaXR0ZXIucHJvdG90eXBlKTtcblRleHR1cmUucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gVGV4dHVyZTtcbm1vZHVsZS5leHBvcnRzID0gVGV4dHVyZTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoVGV4dHVyZS5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBUaGUgZnJhbWUgc3BlY2lmaWVzIHRoZSByZWdpb24gb2YgdGhlIGJhc2UgdGV4dHVyZSB0aGF0IHRoaXMgdGV4dHVyZSB1c2VzLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5SZWN0YW5nbGV9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuVGV4dHVyZSNcbiAgICAgKi9cbiAgICBmcmFtZToge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9mcmFtZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAoZnJhbWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuX2ZyYW1lID0gZnJhbWU7XG5cbiAgICAgICAgICAgIHRoaXMubm9GcmFtZSA9IGZhbHNlO1xuXG4gICAgICAgICAgICB0aGlzLndpZHRoID0gZnJhbWUud2lkdGg7XG4gICAgICAgICAgICB0aGlzLmhlaWdodCA9IGZyYW1lLmhlaWdodDtcblxuICAgICAgICAgICAgaWYgKCF0aGlzLnRyaW0gJiYgIXRoaXMucm90YXRlICYmIChmcmFtZS54ICsgZnJhbWUud2lkdGggPiB0aGlzLmJhc2VUZXh0dXJlLndpZHRoIHx8IGZyYW1lLnkgKyBmcmFtZS5oZWlnaHQgPiB0aGlzLmJhc2VUZXh0dXJlLmhlaWdodCkpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdUZXh0dXJlIEVycm9yOiBmcmFtZSBkb2VzIG5vdCBmaXQgaW5zaWRlIHRoZSBiYXNlIFRleHR1cmUgZGltZW5zaW9ucyAnICsgdGhpcyk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vdGhpcy52YWxpZCA9IGZyYW1lICYmIGZyYW1lLndpZHRoICYmIGZyYW1lLmhlaWdodCAmJiB0aGlzLmJhc2VUZXh0dXJlLnNvdXJjZSAmJiB0aGlzLmJhc2VUZXh0dXJlLmhhc0xvYWRlZDtcbiAgICAgICAgICAgIHRoaXMudmFsaWQgPSBmcmFtZSAmJiBmcmFtZS53aWR0aCAmJiBmcmFtZS5oZWlnaHQgJiYgdGhpcy5iYXNlVGV4dHVyZS5oYXNMb2FkZWQ7XG5cbiAgICAgICAgICAgIGlmICh0aGlzLnRyaW0pXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdGhpcy53aWR0aCA9IHRoaXMudHJpbS53aWR0aDtcbiAgICAgICAgICAgICAgICB0aGlzLmhlaWdodCA9IHRoaXMudHJpbS5oZWlnaHQ7XG4gICAgICAgICAgICAgICAgdGhpcy5fZnJhbWUud2lkdGggPSB0aGlzLnRyaW0ud2lkdGg7XG4gICAgICAgICAgICAgICAgdGhpcy5fZnJhbWUuaGVpZ2h0ID0gdGhpcy50cmltLmhlaWdodDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB0aGlzLmNyb3AgPSBmcmFtZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHRoaXMudmFsaWQpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdGhpcy5fdXBkYXRlVXZzKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG59KTtcblxuLyoqXG4gKiBVcGRhdGVzIHRoaXMgdGV4dHVyZSBvbiB0aGUgZ3B1LlxuICpcbiAqL1xuVGV4dHVyZS5wcm90b3R5cGUudXBkYXRlID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLmJhc2VUZXh0dXJlLnVwZGF0ZSgpO1xufTtcblxuLyoqXG4gKiBDYWxsZWQgd2hlbiB0aGUgYmFzZSB0ZXh0dXJlIGlzIGxvYWRlZFxuICpcbiAqIEBwcml2YXRlXG4gKi9cblRleHR1cmUucHJvdG90eXBlLm9uQmFzZVRleHR1cmVMb2FkZWQgPSBmdW5jdGlvbiAoYmFzZVRleHR1cmUpXG57XG4gICAgLy8gVE9ETyB0aGlzIGNvZGUgbG9va3MgY29uZnVzaW5nLi4gYm9vIHRvIGFidXNpbmcgZ2V0dGVycyBhbmQgc2V0dGVyc3MhXG4gICAgaWYgKHRoaXMubm9GcmFtZSlcbiAgICB7XG4gICAgICAgIHRoaXMuZnJhbWUgPSBuZXcgbWF0aC5SZWN0YW5nbGUoMCwgMCwgYmFzZVRleHR1cmUud2lkdGgsIGJhc2VUZXh0dXJlLmhlaWdodCk7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHRoaXMuZnJhbWUgPSB0aGlzLl9mcmFtZTtcbiAgICB9XG5cbiAgICB0aGlzLmVtaXQoJ3VwZGF0ZScsIHRoaXMpO1xufTtcblxuLyoqXG4gKiBDYWxsZWQgd2hlbiB0aGUgYmFzZSB0ZXh0dXJlIGlzIHVwZGF0ZWRcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5UZXh0dXJlLnByb3RvdHlwZS5vbkJhc2VUZXh0dXJlVXBkYXRlZCA9IGZ1bmN0aW9uIChiYXNlVGV4dHVyZSlcbntcbiAgICB0aGlzLl9mcmFtZS53aWR0aCA9IGJhc2VUZXh0dXJlLndpZHRoO1xuICAgIHRoaXMuX2ZyYW1lLmhlaWdodCA9IGJhc2VUZXh0dXJlLmhlaWdodDtcblxuICAgIHRoaXMuZW1pdCgndXBkYXRlJywgdGhpcyk7XG59O1xuXG4vKipcbiAqIERlc3Ryb3lzIHRoaXMgdGV4dHVyZVxuICpcbiAqIEBwYXJhbSBbZGVzdHJveUJhc2U9ZmFsc2VdIHtib29sZWFufSBXaGV0aGVyIHRvIGRlc3Ryb3kgdGhlIGJhc2UgdGV4dHVyZSBhcyB3ZWxsXG4gKi9cblRleHR1cmUucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoZGVzdHJveUJhc2UpXG57XG4gICAgaWYgKHRoaXMuYmFzZVRleHR1cmUpXG4gICAge1xuICAgICAgICBpZiAoZGVzdHJveUJhc2UpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuYmFzZVRleHR1cmUuZGVzdHJveSgpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5iYXNlVGV4dHVyZS5vZmYoJ3VwZGF0ZScsIHRoaXMub25CYXNlVGV4dHVyZVVwZGF0ZWQsIHRoaXMpO1xuICAgICAgICB0aGlzLmJhc2VUZXh0dXJlLm9mZignbG9hZGVkJywgdGhpcy5vbkJhc2VUZXh0dXJlTG9hZGVkLCB0aGlzKTtcblxuICAgICAgICB0aGlzLmJhc2VUZXh0dXJlID0gbnVsbDtcbiAgICB9XG5cbiAgICB0aGlzLl9mcmFtZSA9IG51bGw7XG4gICAgdGhpcy5fdXZzID0gbnVsbDtcbiAgICB0aGlzLnRyaW0gPSBudWxsO1xuICAgIHRoaXMuY3JvcCA9IG51bGw7XG5cbiAgICB0aGlzLnZhbGlkID0gZmFsc2U7XG5cbiAgICB0aGlzLm9mZignZGlzcG9zZScsIHRoaXMuZGlzcG9zZSwgdGhpcyk7XG4gICAgdGhpcy5vZmYoJ3VwZGF0ZScsIHRoaXMudXBkYXRlLCB0aGlzKTtcbn07XG5cbi8qKlxuICogQ3JlYXRlcyBhIG5ldyB0ZXh0dXJlIG9iamVjdCB0aGF0IGFjdHMgdGhlIHNhbWUgYXMgdGhpcyBvbmUuXG4gKlxuICogQHJldHVybiB7UElYSS5UZXh0dXJlfVxuICovXG5UZXh0dXJlLnByb3RvdHlwZS5jbG9uZSA9IGZ1bmN0aW9uICgpXG57XG4gICAgcmV0dXJuIG5ldyBUZXh0dXJlKHRoaXMuYmFzZVRleHR1cmUsIHRoaXMuZnJhbWUsIHRoaXMuY3JvcCwgdGhpcy50cmltLCB0aGlzLnJvdGF0ZSk7XG59O1xuXG4vKipcbiAqIFVwZGF0ZXMgdGhlIGludGVybmFsIFdlYkdMIFVWIGNhY2hlLlxuICpcbiAqIEBwcml2YXRlXG4gKi9cblRleHR1cmUucHJvdG90eXBlLl91cGRhdGVVdnMgPSBmdW5jdGlvbiAoKVxue1xuICAgIGlmICghdGhpcy5fdXZzKVxuICAgIHtcbiAgICAgICAgdGhpcy5fdXZzID0gbmV3IFRleHR1cmVVdnMoKTtcbiAgICB9XG5cbiAgICB0aGlzLl91dnMuc2V0KHRoaXMuY3JvcCwgdGhpcy5iYXNlVGV4dHVyZSwgdGhpcy5yb3RhdGUpO1xufTtcblxuLyoqXG4gKiBIZWxwZXIgZnVuY3Rpb24gdGhhdCBjcmVhdGVzIGEgVGV4dHVyZSBvYmplY3QgZnJvbSB0aGUgZ2l2ZW4gaW1hZ2UgdXJsLlxuICogSWYgdGhlIGltYWdlIGlzIG5vdCBpbiB0aGUgdGV4dHVyZSBjYWNoZSBpdCB3aWxsIGJlICBjcmVhdGVkIGFuZCBsb2FkZWQuXG4gKlxuICogQHN0YXRpY1xuICogQHBhcmFtIGltYWdlVXJsIHtzdHJpbmd9IFRoZSBpbWFnZSB1cmwgb2YgdGhlIHRleHR1cmVcbiAqIEBwYXJhbSBjcm9zc29yaWdpbiB7Ym9vbGVhbn0gV2hldGhlciByZXF1ZXN0cyBzaG91bGQgYmUgdHJlYXRlZCBhcyBjcm9zc29yaWdpblxuICogQHBhcmFtIHNjYWxlTW9kZSB7bnVtYmVyfSBTZWUge0BsaW5rIFBJWEkuU0NBTEVfTU9ERVN9IGZvciBwb3NzaWJsZSB2YWx1ZXNcbiAqIEByZXR1cm4ge1BJWEkuVGV4dHVyZX0gVGhlIG5ld2x5IGNyZWF0ZWQgdGV4dHVyZVxuICovXG5UZXh0dXJlLmZyb21JbWFnZSA9IGZ1bmN0aW9uIChpbWFnZVVybCwgY3Jvc3NvcmlnaW4sIHNjYWxlTW9kZSlcbntcbiAgICB2YXIgdGV4dHVyZSA9IHV0aWxzLlRleHR1cmVDYWNoZVtpbWFnZVVybF07XG5cbiAgICBpZiAoIXRleHR1cmUpXG4gICAge1xuICAgICAgICB0ZXh0dXJlID0gbmV3IFRleHR1cmUoQmFzZVRleHR1cmUuZnJvbUltYWdlKGltYWdlVXJsLCBjcm9zc29yaWdpbiwgc2NhbGVNb2RlKSk7XG4gICAgICAgIHV0aWxzLlRleHR1cmVDYWNoZVtpbWFnZVVybF0gPSB0ZXh0dXJlO1xuICAgIH1cblxuICAgIHJldHVybiB0ZXh0dXJlO1xufTtcblxuLyoqXG4gKiBIZWxwZXIgZnVuY3Rpb24gdGhhdCBjcmVhdGVzIGEgc3ByaXRlIHRoYXQgd2lsbCBjb250YWluIGEgdGV4dHVyZSBmcm9tIHRoZSBUZXh0dXJlQ2FjaGUgYmFzZWQgb24gdGhlIGZyYW1lSWRcbiAqIFRoZSBmcmFtZSBpZHMgYXJlIGNyZWF0ZWQgd2hlbiBhIFRleHR1cmUgcGFja2VyIGZpbGUgaGFzIGJlZW4gbG9hZGVkXG4gKlxuICogQHN0YXRpY1xuICogQHBhcmFtIGZyYW1lSWQge3N0cmluZ30gVGhlIGZyYW1lIElkIG9mIHRoZSB0ZXh0dXJlIGluIHRoZSBjYWNoZVxuICogQHJldHVybiB7UElYSS5UZXh0dXJlfSBUaGUgbmV3bHkgY3JlYXRlZCB0ZXh0dXJlXG4gKi9cblRleHR1cmUuZnJvbUZyYW1lID0gZnVuY3Rpb24gKGZyYW1lSWQpXG57XG4gICAgdmFyIHRleHR1cmUgPSB1dGlscy5UZXh0dXJlQ2FjaGVbZnJhbWVJZF07XG5cbiAgICBpZiAoIXRleHR1cmUpXG4gICAge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RoZSBmcmFtZUlkIFwiJyArIGZyYW1lSWQgKyAnXCIgZG9lcyBub3QgZXhpc3QgaW4gdGhlIHRleHR1cmUgY2FjaGUnKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGV4dHVyZTtcbn07XG5cbi8qKlxuICogSGVscGVyIGZ1bmN0aW9uIHRoYXQgY3JlYXRlcyBhIG5ldyBUZXh0dXJlIGJhc2VkIG9uIHRoZSBnaXZlbiBjYW52YXMgZWxlbWVudC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAcGFyYW0gY2FudmFzIHtDYW52YXN9IFRoZSBjYW52YXMgZWxlbWVudCBzb3VyY2Ugb2YgdGhlIHRleHR1cmVcbiAqIEBwYXJhbSBzY2FsZU1vZGUge251bWJlcn0gU2VlIHtAbGluayBQSVhJLlNDQUxFX01PREVTfSBmb3IgcG9zc2libGUgdmFsdWVzXG4gKiBAcmV0dXJuIHtQSVhJLlRleHR1cmV9XG4gKi9cblRleHR1cmUuZnJvbUNhbnZhcyA9IGZ1bmN0aW9uIChjYW52YXMsIHNjYWxlTW9kZSlcbntcbiAgICByZXR1cm4gbmV3IFRleHR1cmUoQmFzZVRleHR1cmUuZnJvbUNhbnZhcyhjYW52YXMsIHNjYWxlTW9kZSkpO1xufTtcblxuLyoqXG4gKiBIZWxwZXIgZnVuY3Rpb24gdGhhdCBjcmVhdGVzIGEgbmV3IFRleHR1cmUgYmFzZWQgb24gdGhlIGdpdmVuIHZpZGVvIGVsZW1lbnQuXG4gKlxuICogQHN0YXRpY1xuICogQHBhcmFtIHZpZGVvIHtIVE1MVmlkZW9FbGVtZW50fVxuICogQHBhcmFtIHNjYWxlTW9kZSB7bnVtYmVyfSBTZWUge0BsaW5rIFBJWEkuU0NBTEVfTU9ERVN9IGZvciBwb3NzaWJsZSB2YWx1ZXNcbiAqIEByZXR1cm4ge1BJWEkuVGV4dHVyZX0gQSBUZXh0dXJlXG4gKi9cblRleHR1cmUuZnJvbVZpZGVvID0gZnVuY3Rpb24gKHZpZGVvLCBzY2FsZU1vZGUpXG57XG4gICAgaWYgKHR5cGVvZiB2aWRlbyA9PT0gJ3N0cmluZycpXG4gICAge1xuICAgICAgICByZXR1cm4gVGV4dHVyZS5mcm9tVmlkZW9VcmwodmlkZW8sIHNjYWxlTW9kZSk7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHJldHVybiBuZXcgVGV4dHVyZShWaWRlb0Jhc2VUZXh0dXJlLmZyb21WaWRlbyh2aWRlbywgc2NhbGVNb2RlKSk7XG4gICAgfVxufTtcblxuLyoqXG4gKiBIZWxwZXIgZnVuY3Rpb24gdGhhdCBjcmVhdGVzIGEgbmV3IFRleHR1cmUgYmFzZWQgb24gdGhlIHZpZGVvIHVybC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAcGFyYW0gdmlkZW9Vcmwge3N0cmluZ31cbiAqIEBwYXJhbSBzY2FsZU1vZGUge251bWJlcn0gU2VlIHtAbGluayBQSVhJLlNDQUxFX01PREVTfSBmb3IgcG9zc2libGUgdmFsdWVzXG4gKiBAcmV0dXJuIHtQSVhJLlRleHR1cmV9IEEgVGV4dHVyZVxuICovXG5UZXh0dXJlLmZyb21WaWRlb1VybCA9IGZ1bmN0aW9uICh2aWRlb1VybCwgc2NhbGVNb2RlKVxue1xuICAgIHJldHVybiBuZXcgVGV4dHVyZShWaWRlb0Jhc2VUZXh0dXJlLmZyb21VcmwodmlkZW9VcmwsIHNjYWxlTW9kZSkpO1xufTtcblxuLyoqXG4gKiBBZGRzIGEgdGV4dHVyZSB0byB0aGUgZ2xvYmFsIHV0aWxzLlRleHR1cmVDYWNoZS4gVGhpcyBjYWNoZSBpcyBzaGFyZWQgYWNyb3NzIHRoZSB3aG9sZSBQSVhJIG9iamVjdC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAcGFyYW0gdGV4dHVyZSB7UElYSS5UZXh0dXJlfSBUaGUgVGV4dHVyZSB0byBhZGQgdG8gdGhlIGNhY2hlLlxuICogQHBhcmFtIGlkIHtzdHJpbmd9IFRoZSBpZCB0aGF0IHRoZSB0ZXh0dXJlIHdpbGwgYmUgc3RvcmVkIGFnYWluc3QuXG4gKi9cblRleHR1cmUuYWRkVGV4dHVyZVRvQ2FjaGUgPSBmdW5jdGlvbiAodGV4dHVyZSwgaWQpXG57XG4gICAgdXRpbHMuVGV4dHVyZUNhY2hlW2lkXSA9IHRleHR1cmU7XG59O1xuXG4vKipcbiAqIFJlbW92ZSBhIHRleHR1cmUgZnJvbSB0aGUgZ2xvYmFsIHV0aWxzLlRleHR1cmVDYWNoZS5cbiAqXG4gKiBAc3RhdGljXG4gKiBAcGFyYW0gaWQge3N0cmluZ30gVGhlIGlkIG9mIHRoZSB0ZXh0dXJlIHRvIGJlIHJlbW92ZWRcbiAqIEByZXR1cm4ge1BJWEkuVGV4dHVyZX0gVGhlIHRleHR1cmUgdGhhdCB3YXMgcmVtb3ZlZFxuICovXG5UZXh0dXJlLnJlbW92ZVRleHR1cmVGcm9tQ2FjaGUgPSBmdW5jdGlvbiAoaWQpXG57XG4gICAgdmFyIHRleHR1cmUgPSB1dGlscy5UZXh0dXJlQ2FjaGVbaWRdO1xuXG4gICAgZGVsZXRlIHV0aWxzLlRleHR1cmVDYWNoZVtpZF07XG4gICAgZGVsZXRlIHV0aWxzLkJhc2VUZXh0dXJlQ2FjaGVbaWRdO1xuXG4gICAgcmV0dXJuIHRleHR1cmU7XG59O1xuXG4vKipcbiAqIEFuIGVtcHR5IHRleHR1cmUsIHVzZWQgb2Z0ZW4gdG8gbm90IGhhdmUgdG8gY3JlYXRlIG11bHRpcGxlIGVtcHR5IHRleHR1cmVzLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBjb25zdGFudFxuICovXG5UZXh0dXJlLkVNUFRZID0gbmV3IFRleHR1cmUobmV3IEJhc2VUZXh0dXJlKCkpO1xuIiwiXG4vKipcbiAqIEEgc3RhbmRhcmQgb2JqZWN0IHRvIHN0b3JlIHRoZSBVdnMgb2YgYSB0ZXh0dXJlXG4gKlxuICogQGNsYXNzXG4gKiBAcHJpdmF0ZVxuICogQG1lbWJlcm9mIFBJWElcbiAqL1xuZnVuY3Rpb24gVGV4dHVyZVV2cygpXG57XG4gICAgdGhpcy54MCA9IDA7XG4gICAgdGhpcy55MCA9IDA7XG5cbiAgICB0aGlzLngxID0gMTtcbiAgICB0aGlzLnkxID0gMDtcblxuICAgIHRoaXMueDIgPSAxO1xuICAgIHRoaXMueTIgPSAxO1xuXG4gICAgdGhpcy54MyA9IDA7XG4gICAgdGhpcy55MyA9IDE7XG5cbiAgICB0aGlzLnh5MF91aW50MzIgPSAwO1xuICAgIHRoaXMueHkxX3VpbnQzMiA9IDA7XG4gICAgdGhpcy54eTJfdWludDMyID0gMDtcbiAgICB0aGlzLnh5M191aW50MzIgPSAwO1xuXG4gICAgdGhpcy51dnNfdWludDMyID0gbmV3IFVpbnQzMkFycmF5KDQpXG59XG5cbm1vZHVsZS5leHBvcnRzID0gVGV4dHVyZVV2cztcblxuLyoqXG4gKiBTZXRzIHRoZSB0ZXh0dXJlIFV2cyBiYXNlZCBvbiB0aGUgZ2l2ZW4gZnJhbWUgaW5mb3JtYXRpb25cbiAqIEBwYXJhbSBmcmFtZSB7UElYSS5SZWN0YW5nbGV9XG4gKiBAcGFyYW0gYmFzZUZyYW1lIHtQSVhJLlJlY3RhbmdsZX1cbiAqIEBwYXJhbSByb3RhdGUge2Jvb2xlYW59IFdoZXRoZXIgb3Igbm90IHRoZSBmcmFtZSBpcyByb3RhdGVkXG4gKiBAcHJpdmF0ZVxuICovXG5UZXh0dXJlVXZzLnByb3RvdHlwZS5zZXQgPSBmdW5jdGlvbiAoZnJhbWUsIGJhc2VGcmFtZSwgcm90YXRlKVxue1xuICAgIHZhciB0dyA9IGJhc2VGcmFtZS53aWR0aDtcbiAgICB2YXIgdGggPSBiYXNlRnJhbWUuaGVpZ2h0O1xuXG4gICAgaWYocm90YXRlKVxuICAgIHtcbiAgICAgICAgdGhpcy54MCA9IChmcmFtZS54ICsgZnJhbWUuaGVpZ2h0KSAvIHR3O1xuICAgICAgICB0aGlzLnkwID0gZnJhbWUueSAvIHRoO1xuXG4gICAgICAgIHRoaXMueDEgPSAoZnJhbWUueCArIGZyYW1lLmhlaWdodCkgLyB0dztcbiAgICAgICAgdGhpcy55MSA9IChmcmFtZS55ICsgZnJhbWUud2lkdGgpIC8gdGg7XG5cbiAgICAgICAgdGhpcy54MiA9IGZyYW1lLnggLyB0dztcbiAgICAgICAgdGhpcy55MiA9IChmcmFtZS55ICsgZnJhbWUud2lkdGgpIC8gdGg7XG5cbiAgICAgICAgdGhpcy54MyA9IGZyYW1lLnggLyB0dztcbiAgICAgICAgdGhpcy55MyA9IGZyYW1lLnkgLyB0aDtcbiAgICB9XG4gICAgZWxzZVxuICAgIHtcblxuICAgICAgICB0aGlzLngwID0gZnJhbWUueCAvIHR3O1xuICAgICAgICB0aGlzLnkwID0gZnJhbWUueSAvIHRoO1xuXG4gICAgICAgIHRoaXMueDEgPSAoZnJhbWUueCArIGZyYW1lLndpZHRoKSAvIHR3O1xuICAgICAgICB0aGlzLnkxID0gZnJhbWUueSAvIHRoO1xuXG4gICAgICAgIHRoaXMueDIgPSAoZnJhbWUueCArIGZyYW1lLndpZHRoKSAvIHR3O1xuICAgICAgICB0aGlzLnkyID0gKGZyYW1lLnkgKyBmcmFtZS5oZWlnaHQpIC8gdGg7XG5cbiAgICAgICAgdGhpcy54MyA9IGZyYW1lLnggLyB0dztcbiAgICAgICAgdGhpcy55MyA9IChmcmFtZS55ICsgZnJhbWUuaGVpZ2h0KSAvIHRoO1xuICAgIH1cblxuICAgIHRoaXMudXZzX3VpbnQzMlswXSA9ICgoKHRoaXMueTAgKiA2NTUzNSkgJiAweEZGRkYpIDw8IDE2KSB8ICgodGhpcy54MCAqIDY1NTM1KSAmIDB4RkZGRik7XG4gICAgdGhpcy51dnNfdWludDMyWzFdID0gKCgodGhpcy55MSAqIDY1NTM1KSAmIDB4RkZGRikgPDwgMTYpIHwgKCh0aGlzLngxICogNjU1MzUpICYgMHhGRkZGKTtcbiAgICB0aGlzLnV2c191aW50MzJbMl0gPSAoKCh0aGlzLnkyICogNjU1MzUpICYgMHhGRkZGKSA8PCAxNikgfCAoKHRoaXMueDIgKiA2NTUzNSkgJiAweEZGRkYpO1xuICAgIHRoaXMudXZzX3VpbnQzMlszXSA9ICgoKHRoaXMueTMgKiA2NTUzNSkgJiAweEZGRkYpIDw8IDE2KSB8ICgodGhpcy54MyAqIDY1NTM1KSAmIDB4RkZGRik7XG59O1xuIiwidmFyIEJhc2VUZXh0dXJlID0gcmVxdWlyZSgnLi9CYXNlVGV4dHVyZScpLFxuICAgIHV0aWxzID0gcmVxdWlyZSgnLi4vdXRpbHMnKTtcblxuLyoqXG4gKiBBIHRleHR1cmUgb2YgYSBbcGxheWluZ10gVmlkZW8uXG4gKlxuICogVmlkZW8gYmFzZSB0ZXh0dXJlcyBtaW1pYyBQaXhpIEJhc2VUZXh0dXJlLmZyb20uLi4uIG1ldGhvZCBpbiB0aGVpciBjcmVhdGlvbiBwcm9jZXNzLlxuICpcbiAqIFRoaXMgY2FuIGJlIHVzZWQgaW4gc2V2ZXJhbCB3YXlzLCBzdWNoIGFzOlxuICpcbiAqIGBgYGpzXG4gKiB2YXIgdGV4dHVyZSA9IFBJWEkuVmlkZW9CYXNlVGV4dHVyZS5mcm9tVXJsKCdodHRwOi8vbXlkb21haW4uY29tL3ZpZGVvLm1wNCcpO1xuICpcbiAqIHZhciB0ZXh0dXJlID0gUElYSS5WaWRlb0Jhc2VUZXh0dXJlLmZyb21VcmwoeyBzcmM6ICdodHRwOi8vbXlkb21haW4uY29tL3ZpZGVvLm1wNCcsIG1pbWU6ICd2aWRlby9tcDQnIH0pO1xuICpcbiAqIHZhciB0ZXh0dXJlID0gUElYSS5WaWRlb0Jhc2VUZXh0dXJlLmZyb21VcmxzKFsnL3ZpZGVvLndlYm0nLCAnL3ZpZGVvLm1wNCddKTtcbiAqXG4gKiB2YXIgdGV4dHVyZSA9IFBJWEkuVmlkZW9CYXNlVGV4dHVyZS5mcm9tVXJscyhbXG4gKiAgICAgeyBzcmM6ICcvdmlkZW8ud2VibScsIG1pbWU6ICd2aWRlby93ZWJtJyB9LFxuICogICAgIHsgc3JjOiAnL3ZpZGVvLm1wNCcsIG1pbWU6ICd2aWRlby9tcDQnIH1cbiAqIF0pO1xuICogYGBgXG4gKlxuICogU2VlIHRoZSBbXCJkZXVzXCIgZGVtb10oaHR0cDovL3d3dy5nb29kYm95ZGlnaXRhbC5jb20vcGl4aWpzL2V4YW1wbGVzL2RldXMvKS5cbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQmFzZVRleHR1cmVcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gc291cmNlIHtIVE1MVmlkZW9FbGVtZW50fVxuICogQHBhcmFtIFtzY2FsZU1vZGVdIHtudW1iZXJ9IFNlZSB7QGxpbmsgUElYSS5TQ0FMRV9NT0RFU30gZm9yIHBvc3NpYmxlIHZhbHVlc1xuICovXG5mdW5jdGlvbiBWaWRlb0Jhc2VUZXh0dXJlKHNvdXJjZSwgc2NhbGVNb2RlKVxue1xuICAgIGlmICghc291cmNlKVxuICAgIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdObyB2aWRlbyBzb3VyY2UgZWxlbWVudCBzcGVjaWZpZWQuJyk7XG4gICAgfVxuXG4gICAgLy8gaG9vayBpbiBoZXJlIHRvIGNoZWNrIGlmIHZpZGVvIGlzIGFscmVhZHkgYXZhaWxhYmxlLlxuICAgIC8vIEJhc2VUZXh0dXJlIGxvb2tzIGZvciBhIHNvdXJjZS5jb21wbGV0ZSBib29sZWFuLCBwbHVzIHdpZHRoICYgaGVpZ2h0LlxuXG4gICAgaWYgKChzb3VyY2UucmVhZHlTdGF0ZSA9PT0gc291cmNlLkhBVkVfRU5PVUdIX0RBVEEgfHwgc291cmNlLnJlYWR5U3RhdGUgPT09IHNvdXJjZS5IQVZFX0ZVVFVSRV9EQVRBKSAmJiBzb3VyY2Uud2lkdGggJiYgc291cmNlLmhlaWdodClcbiAgICB7XG4gICAgICAgIHNvdXJjZS5jb21wbGV0ZSA9IHRydWU7XG4gICAgfVxuXG4gICAgQmFzZVRleHR1cmUuY2FsbCh0aGlzLCBzb3VyY2UsIHNjYWxlTW9kZSk7XG5cbiAgICAvKipcbiAgICAgKiBTaG91bGQgdGhlIGJhc2UgdGV4dHVyZSBhdXRvbWF0aWNhbGx5IHVwZGF0ZSBpdHNlbGYsIHNldCB0byB0cnVlIGJ5IGRlZmF1bHRcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICogQGRlZmF1bHQgdHJ1ZVxuICAgICAqL1xuICAgIHRoaXMuYXV0b1VwZGF0ZSA9IGZhbHNlO1xuXG4gICAgdGhpcy5fb25VcGRhdGUgPSB0aGlzLl9vblVwZGF0ZS5iaW5kKHRoaXMpO1xuICAgIHRoaXMuX29uQ2FuUGxheSA9IHRoaXMuX29uQ2FuUGxheS5iaW5kKHRoaXMpO1xuXG4gICAgaWYgKCFzb3VyY2UuY29tcGxldGUpXG4gICAge1xuICAgICAgICBzb3VyY2UuYWRkRXZlbnRMaXN0ZW5lcignY2FucGxheScsIHRoaXMuX29uQ2FuUGxheSk7XG4gICAgICAgIHNvdXJjZS5hZGRFdmVudExpc3RlbmVyKCdjYW5wbGF5dGhyb3VnaCcsIHRoaXMuX29uQ2FuUGxheSk7XG5cbiAgICAgICAgLy8gc3RhcnRlZCBwbGF5aW5nLi5cbiAgICAgICAgc291cmNlLmFkZEV2ZW50TGlzdGVuZXIoJ3BsYXknLCB0aGlzLl9vblBsYXlTdGFydC5iaW5kKHRoaXMpKTtcbiAgICAgICAgc291cmNlLmFkZEV2ZW50TGlzdGVuZXIoJ3BhdXNlJywgdGhpcy5fb25QbGF5U3RvcC5iaW5kKHRoaXMpKTtcbiAgICB9XG5cbiAgICB0aGlzLl9fbG9hZGVkID0gZmFsc2U7XG59XG5cblZpZGVvQmFzZVRleHR1cmUucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShCYXNlVGV4dHVyZS5wcm90b3R5cGUpO1xuVmlkZW9CYXNlVGV4dHVyZS5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBWaWRlb0Jhc2VUZXh0dXJlO1xubW9kdWxlLmV4cG9ydHMgPSBWaWRlb0Jhc2VUZXh0dXJlO1xuXG4vKipcbiAqIFRoZSBpbnRlcm5hbCB1cGRhdGUgbG9vcCBvZiB0aGUgdmlkZW8gYmFzZSB0ZXh0dXJlLCBvbmx5IHJ1bnMgd2hlbiBhdXRvVXBkYXRlIGlzIHNldCB0byB0cnVlXG4gKlxuICogQHByaXZhdGVcbiAqL1xuVmlkZW9CYXNlVGV4dHVyZS5wcm90b3R5cGUuX29uVXBkYXRlID0gZnVuY3Rpb24gKClcbntcbiAgICBpZiAodGhpcy5hdXRvVXBkYXRlKVxuICAgIHtcbiAgICAgICAgd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZSh0aGlzLl9vblVwZGF0ZSk7XG4gICAgICAgIHRoaXMudXBkYXRlKCk7XG4gICAgfVxufTtcblxuLyoqXG4gKiBSdW5zIHRoZSB1cGRhdGUgbG9vcCB3aGVuIHRoZSB2aWRlbyBpcyByZWFkeSB0byBwbGF5XG4gKlxuICogQHByaXZhdGVcbiAqL1xuVmlkZW9CYXNlVGV4dHVyZS5wcm90b3R5cGUuX29uUGxheVN0YXJ0ID0gZnVuY3Rpb24gKClcbntcbiAgICBpZiAoIXRoaXMuYXV0b1VwZGF0ZSlcbiAgICB7XG4gICAgICAgIHdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUodGhpcy5fb25VcGRhdGUpO1xuICAgICAgICB0aGlzLmF1dG9VcGRhdGUgPSB0cnVlO1xuICAgIH1cbn07XG5cbi8qKlxuICogRmlyZWQgd2hlbiBhIHBhdXNlIGV2ZW50IGlzIHRyaWdnZXJlZCwgc3RvcHMgdGhlIHVwZGF0ZSBsb29wXG4gKlxuICogQHByaXZhdGVcbiAqL1xuVmlkZW9CYXNlVGV4dHVyZS5wcm90b3R5cGUuX29uUGxheVN0b3AgPSBmdW5jdGlvbiAoKVxue1xuICAgIHRoaXMuYXV0b1VwZGF0ZSA9IGZhbHNlO1xufTtcblxuLyoqXG4gKiBGaXJlZCB3aGVuIHRoZSB2aWRlbyBpcyBsb2FkZWQgYW5kIHJlYWR5IHRvIHBsYXlcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5WaWRlb0Jhc2VUZXh0dXJlLnByb3RvdHlwZS5fb25DYW5QbGF5ID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLmhhc0xvYWRlZCA9IHRydWU7XG5cbiAgICBpZiAodGhpcy5zb3VyY2UpXG4gICAge1xuICAgICAgICB0aGlzLnNvdXJjZS5yZW1vdmVFdmVudExpc3RlbmVyKCdjYW5wbGF5JywgdGhpcy5fb25DYW5QbGF5KTtcbiAgICAgICAgdGhpcy5zb3VyY2UucmVtb3ZlRXZlbnRMaXN0ZW5lcignY2FucGxheXRocm91Z2gnLCB0aGlzLl9vbkNhblBsYXkpO1xuXG4gICAgICAgIHRoaXMud2lkdGggPSB0aGlzLnNvdXJjZS52aWRlb1dpZHRoO1xuICAgICAgICB0aGlzLmhlaWdodCA9IHRoaXMuc291cmNlLnZpZGVvSGVpZ2h0O1xuXG4gICAgICAgIHRoaXMuc291cmNlLnBsYXkoKTtcblxuICAgICAgICAvLyBwcmV2ZW50IG11bHRpcGxlIGxvYWRlZCBkaXNwYXRjaGVzLi5cbiAgICAgICAgaWYgKCF0aGlzLl9fbG9hZGVkKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLl9fbG9hZGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMuZW1pdCgnbG9hZGVkJywgdGhpcyk7XG4gICAgICAgIH1cbiAgICB9XG59O1xuXG4vKipcbiAqIERlc3Ryb3lzIHRoaXMgdGV4dHVyZVxuICpcbiAqL1xuVmlkZW9CYXNlVGV4dHVyZS5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uICgpXG57XG4gICAgaWYgKHRoaXMuc291cmNlICYmIHRoaXMuc291cmNlLl9waXhpSWQpXG4gICAge1xuICAgICAgICBkZWxldGUgdXRpbHMuQmFzZVRleHR1cmVDYWNoZVsgdGhpcy5zb3VyY2UuX3BpeGlJZCBdO1xuICAgICAgICBkZWxldGUgdGhpcy5zb3VyY2UuX3BpeGlJZDtcbiAgICB9XG5cbiAgICBCYXNlVGV4dHVyZS5wcm90b3R5cGUuZGVzdHJveS5jYWxsKHRoaXMpO1xufTtcblxuLyoqXG4gKiBNaW1pYyBQaXhpIEJhc2VUZXh0dXJlLmZyb20uLi4uIG1ldGhvZC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAcGFyYW0gdmlkZW8ge0hUTUxWaWRlb0VsZW1lbnR9XG4gKiBAcGFyYW0gc2NhbGVNb2RlIHtudW1iZXJ9IFNlZSB7QGxpbmsgUElYSS5TQ0FMRV9NT0RFU30gZm9yIHBvc3NpYmxlIHZhbHVlc1xuICogQHJldHVybiB7UElYSS5WaWRlb0Jhc2VUZXh0dXJlfVxuICovXG5WaWRlb0Jhc2VUZXh0dXJlLmZyb21WaWRlbyA9IGZ1bmN0aW9uICh2aWRlbywgc2NhbGVNb2RlKVxue1xuICAgIGlmICghdmlkZW8uX3BpeGlJZClcbiAgICB7XG4gICAgICAgIHZpZGVvLl9waXhpSWQgPSAndmlkZW9fJyArIHV0aWxzLnVpZCgpO1xuICAgIH1cblxuICAgIHZhciBiYXNlVGV4dHVyZSA9IHV0aWxzLkJhc2VUZXh0dXJlQ2FjaGVbdmlkZW8uX3BpeGlJZF07XG5cbiAgICBpZiAoIWJhc2VUZXh0dXJlKVxuICAgIHtcbiAgICAgICAgYmFzZVRleHR1cmUgPSBuZXcgVmlkZW9CYXNlVGV4dHVyZSh2aWRlbywgc2NhbGVNb2RlKTtcbiAgICAgICAgdXRpbHMuQmFzZVRleHR1cmVDYWNoZVsgdmlkZW8uX3BpeGlJZCBdID0gYmFzZVRleHR1cmU7XG4gICAgfVxuXG4gICAgcmV0dXJuIGJhc2VUZXh0dXJlO1xufTtcblxuLyoqXG4gKiBIZWxwZXIgZnVuY3Rpb24gdGhhdCBjcmVhdGVzIGEgbmV3IEJhc2VUZXh0dXJlIGJhc2VkIG9uIHRoZSBnaXZlbiB2aWRlbyBlbGVtZW50LlxuICogVGhpcyBCYXNlVGV4dHVyZSBjYW4gdGhlbiBiZSB1c2VkIHRvIGNyZWF0ZSBhIHRleHR1cmVcbiAqXG4gKiBAc3RhdGljXG4gKiBAcGFyYW0gdmlkZW9TcmMge3N0cmluZ3xvYmplY3R8c3RyaW5nW118b2JqZWN0W119IFRoZSBVUkwocykgZm9yIHRoZSB2aWRlby5cbiAqIEBwYXJhbSBbdmlkZW9TcmMuc3JjXSB7c3RyaW5nfSBPbmUgb2YgdGhlIHNvdXJjZSB1cmxzIGZvciB0aGUgdmlkZW9cbiAqIEBwYXJhbSBbdmlkZW9TcmMubWltZV0ge3N0cmluZ30gVGhlIG1pbWV0eXBlIG9mIHRoZSB2aWRlbyAoZS5nLiAndmlkZW8vbXA0JykuIElmIG5vdCBzcGVjaWZpZWRcbiAqICB0aGUgdXJsJ3MgZXh0ZW5zaW9uIHdpbGwgYmUgdXNlZCBhcyB0aGUgc2Vjb25kIHBhcnQgb2YgdGhlIG1pbWUgdHlwZS5cbiAqIEBwYXJhbSBzY2FsZU1vZGUge251bWJlcn0gU2VlIHtAbGluayBQSVhJLlNDQUxFX01PREVTfSBmb3IgcG9zc2libGUgdmFsdWVzXG4gKiBAcmV0dXJuIHtQSVhJLlZpZGVvQmFzZVRleHR1cmV9XG4gKi9cblZpZGVvQmFzZVRleHR1cmUuZnJvbVVybCA9IGZ1bmN0aW9uICh2aWRlb1NyYywgc2NhbGVNb2RlKVxue1xuICAgIHZhciB2aWRlbyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3ZpZGVvJyk7XG5cbiAgICAvLyBhcnJheSBvZiBvYmplY3RzIG9yIHN0cmluZ3NcbiAgICBpZiAoQXJyYXkuaXNBcnJheSh2aWRlb1NyYykpXG4gICAge1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHZpZGVvU3JjLmxlbmd0aDsgKytpKVxuICAgICAgICB7XG4gICAgICAgICAgICB2aWRlby5hcHBlbmRDaGlsZChjcmVhdGVTb3VyY2UodmlkZW9TcmNbaV0uc3JjIHx8IHZpZGVvU3JjW2ldLCB2aWRlb1NyY1tpXS5taW1lKSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLy8gc2luZ2xlIG9iamVjdCBvciBzdHJpbmdcbiAgICBlbHNlXG4gICAge1xuICAgICAgICB2aWRlby5hcHBlbmRDaGlsZChjcmVhdGVTb3VyY2UodmlkZW9TcmMuc3JjIHx8IHZpZGVvU3JjLCB2aWRlb1NyYy5taW1lKSk7XG4gICAgfVxuXG4gICAgdmlkZW8ubG9hZCgpO1xuICAgIHZpZGVvLnBsYXkoKTtcblxuICAgIHJldHVybiBWaWRlb0Jhc2VUZXh0dXJlLmZyb21WaWRlbyh2aWRlbywgc2NhbGVNb2RlKTtcbn07XG5cblZpZGVvQmFzZVRleHR1cmUuZnJvbVVybHMgPSBWaWRlb0Jhc2VUZXh0dXJlLmZyb21Vcmw7XG5cbmZ1bmN0aW9uIGNyZWF0ZVNvdXJjZShwYXRoLCB0eXBlKVxue1xuICAgIGlmICghdHlwZSlcbiAgICB7XG4gICAgICAgIHR5cGUgPSAndmlkZW8vJyArIHBhdGguc3Vic3RyKHBhdGgubGFzdEluZGV4T2YoJy4nKSArIDEpO1xuICAgIH1cblxuICAgIHZhciBzb3VyY2UgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzb3VyY2UnKTtcblxuICAgIHNvdXJjZS5zcmMgPSBwYXRoO1xuICAgIHNvdXJjZS50eXBlID0gdHlwZTtcblxuICAgIHJldHVybiBzb3VyY2U7XG59XG4iLCJ2YXIgQ09OU1QgPSByZXF1aXJlKCcuLi9jb25zdCcpLFxuICAgIEV2ZW50RW1pdHRlciA9IHJlcXVpcmUoJ2V2ZW50ZW1pdHRlcjMnKSxcbiAgICAvLyBJbnRlcm5hbCBldmVudCB1c2VkIGJ5IGNvbXBvc2VkIGVtaXR0ZXJcbiAgICBUSUNLID0gJ3RpY2snO1xuXG4vKipcbiAqIEEgVGlja2VyIGNsYXNzIHRoYXQgcnVucyBhbiB1cGRhdGUgbG9vcCB0aGF0IG90aGVyIG9iamVjdHMgbGlzdGVuIHRvLlxuICogVGhpcyBjbGFzcyBpcyBjb21wb3NlZCBhcm91bmQgYW4gRXZlbnRFbWl0dGVyIG9iamVjdCB0byBhZGQgbGlzdGVuZXJzXG4gKiBtZWFudCBmb3IgZXhlY3V0aW9uIG9uIHRoZSBuZXh0IHJlcXVlc3RlZCBhbmltYXRpb24gZnJhbWUuXG4gKiBBbmltYXRpb24gZnJhbWVzIGFyZSByZXF1ZXN0ZWQgb25seSB3aGVuIG5lY2Vzc2FyeSxcbiAqIGUuZy4gV2hlbiB0aGUgdGlja2VyIGlzIHN0YXJ0ZWQgYW5kIHRoZSBlbWl0dGVyIGhhcyBsaXN0ZW5lcnMuXG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSS50aWNrZXJcbiAqL1xuZnVuY3Rpb24gVGlja2VyKClcbntcbiAgICB2YXIgX3RoaXMgPSB0aGlzO1xuXG4gICAgLyoqXG4gICAgICogSW50ZXJuYWwgdGljayBtZXRob2QgYm91bmQgdG8gdGlja2VyIGluc3RhbmNlLlxuICAgICAqIFRoaXMgaXMgYmVjYXVzZSBpbiBlYXJseSAyMDE1LCBGdW5jdGlvbi5iaW5kXG4gICAgICogaXMgc3RpbGwgNjAlIHNsb3dlciBpbiBoaWdoIHBlcmZvcm1hbmNlIHNjZW5hcmlvcy5cbiAgICAgKiBBbHNvIHNlcGFyYXRpbmcgZnJhbWUgcmVxdWVzdHMgZnJvbSB1cGRhdGUgbWV0aG9kXG4gICAgICogc28gbGlzdGVuZXJzIG1heSBiZSBjYWxsZWQgYXQgYW55IHRpbWUgYW5kIHdpdGhcbiAgICAgKiBhbnkgYW5pbWF0aW9uIEFQSSwganVzdCBpbnZva2UgdGlja2VyLnVwZGF0ZSh0aW1lKS5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fdGljayA9IGZ1bmN0aW9uIF90aWNrKHRpbWUpIHtcblxuICAgICAgICBfdGhpcy5fcmVxdWVzdElkID0gbnVsbDtcblxuICAgICAgICBpZiAoX3RoaXMuc3RhcnRlZClcbiAgICAgICAge1xuICAgICAgICAgICAgLy8gSW52b2tlIGxpc3RlbmVycyBub3dcbiAgICAgICAgICAgIF90aGlzLnVwZGF0ZSh0aW1lKTtcbiAgICAgICAgICAgIC8vIExpc3RlbmVyIHNpZGUgZWZmZWN0cyBtYXkgaGF2ZSBtb2RpZmllZCB0aWNrZXIgc3RhdGUuXG4gICAgICAgICAgICBpZiAoX3RoaXMuc3RhcnRlZCAmJiBfdGhpcy5fcmVxdWVzdElkID09PSBudWxsICYmIF90aGlzLl9lbWl0dGVyLmxpc3RlbmVycyhUSUNLLCB0cnVlKSlcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBfdGhpcy5fcmVxdWVzdElkID0gcmVxdWVzdEFuaW1hdGlvbkZyYW1lKF90aGlzLl90aWNrKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH07XG5cbiAgICAvKipcbiAgICAgKiBJbnRlcm5hbCBlbWl0dGVyIHVzZWQgdG8gZmlyZSAndGljaycgZXZlbnRcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX2VtaXR0ZXIgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgICAvKipcbiAgICAgKiBJbnRlcm5hbCBjdXJyZW50IGZyYW1lIHJlcXVlc3QgSURcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX3JlcXVlc3RJZCA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBJbnRlcm5hbCB2YWx1ZSBtYW5hZ2VkIGJ5IG1pbkZQUyBwcm9wZXJ0eSBzZXR0ZXIgYW5kIGdldHRlci5cbiAgICAgKiBUaGlzIGlzIHRoZSBtYXhpbXVtIGFsbG93ZWQgbWlsbGlzZWNvbmRzIGJldHdlZW4gdXBkYXRlcy5cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX21heEVsYXBzZWRNUyA9IDEwMDtcblxuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgb3Igbm90IHRoaXMgdGlja2VyIHNob3VsZCBpbnZva2UgdGhlIG1ldGhvZFxuICAgICAqIHtAbGluayBQSVhJLnRpY2tlci5UaWNrZXIjc3RhcnR9IGF1dG9tYXRpY2FsbHlcbiAgICAgKiB3aGVuIGEgbGlzdGVuZXIgaXMgYWRkZWQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqIEBkZWZhdWx0IGZhbHNlXG4gICAgICovXG4gICAgdGhpcy5hdXRvU3RhcnQgPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIFNjYWxhciB0aW1lIHZhbHVlIGZyb20gbGFzdCBmcmFtZSB0byB0aGlzIGZyYW1lLlxuICAgICAqIFRoaXMgdmFsdWUgaXMgY2FwcGVkIGJ5IHNldHRpbmcge0BsaW5rIFBJWEkudGlja2VyLlRpY2tlciNtaW5GUFN9XG4gICAgICogYW5kIGlzIHNjYWxlZCB3aXRoIHtAbGluayBQSVhJLnRpY2tlci5UaWNrZXIjc3BlZWR9LlxuICAgICAqICoqTm90ZToqKiBUaGUgY2FwIG1heSBiZSBleGNlZWRlZCBieSBzY2FsaW5nLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDFcbiAgICAgKi9cbiAgICB0aGlzLmRlbHRhVGltZSA9IDE7XG5cbiAgICAvKipcbiAgICAgKiBUaW1lIGVsYXBzZWQgaW4gbWlsbGlzZWNvbmRzIGZyb20gbGFzdCBmcmFtZSB0byB0aGlzIGZyYW1lLlxuICAgICAqIE9wcG9zZWQgdG8gd2hhdCB0aGUgc2NhbGFyIHtAbGluayBQSVhJLnRpY2tlci5UaWNrZXIjZGVsdGFUaW1lfVxuICAgICAqIGlzIGJhc2VkLCB0aGlzIHZhbHVlIGlzIG5laXRoZXIgY2FwcGVkIG5vciBzY2FsZWQuXG4gICAgICogSWYgdGhlIHBsYXRmb3JtIHN1cHBvcnRzIERPTUhpZ2hSZXNUaW1lU3RhbXAsXG4gICAgICogdGhpcyB2YWx1ZSB3aWxsIGhhdmUgYSBwcmVjaXNpb24gb2YgMSDCtXMuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtET01IaWdoUmVzVGltZVN0YW1wfG51bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAxIC8gVEFSR0VUX0ZQTVNcbiAgICAgKi9cbiAgICB0aGlzLmVsYXBzZWRNUyA9IDEgLyBDT05TVC5UQVJHRVRfRlBNUzsgLy8gZGVmYXVsdCB0byB0YXJnZXQgZnJhbWUgdGltZVxuXG4gICAgLyoqXG4gICAgICogVGhlIGxhc3QgdGltZSB7QGxpbmsgUElYSS50aWNrZXIuVGlja2VyI3VwZGF0ZX0gd2FzIGludm9rZWQuXG4gICAgICogVGhpcyB2YWx1ZSBpcyBhbHNvIHJlc2V0IGludGVybmFsbHkgb3V0c2lkZSBvZiBpbnZva2luZ1xuICAgICAqIHVwZGF0ZSwgYnV0IG9ubHkgd2hlbiBhIG5ldyBhbmltYXRpb24gZnJhbWUgaXMgcmVxdWVzdGVkLlxuICAgICAqIElmIHRoZSBwbGF0Zm9ybSBzdXBwb3J0cyBET01IaWdoUmVzVGltZVN0YW1wLFxuICAgICAqIHRoaXMgdmFsdWUgd2lsbCBoYXZlIGEgcHJlY2lzaW9uIG9mIDEgwrVzLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7RE9NSGlnaFJlc1RpbWVTdGFtcHxudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMFxuICAgICAqL1xuICAgIHRoaXMubGFzdFRpbWUgPSAwO1xuXG4gICAgLyoqXG4gICAgICogRmFjdG9yIG9mIGN1cnJlbnQge0BsaW5rIFBJWEkudGlja2VyLlRpY2tlciNkZWx0YVRpbWV9LlxuICAgICAqIEBleGFtcGxlXG4gICAgICogLy8gU2NhbGVzIHRpY2tlci5kZWx0YVRpbWUgdG8gd2hhdCB3b3VsZCBiZVxuICAgICAqIC8vIHRoZSBlcXVpdmFsZW50IG9mIGFwcHJveGltYXRlbHkgMTIwIEZQU1xuICAgICAqIHRpY2tlci5zcGVlZCA9IDI7XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMVxuICAgICAqL1xuICAgIHRoaXMuc3BlZWQgPSAxO1xuXG4gICAgLyoqXG4gICAgICogV2hldGhlciBvciBub3QgdGhpcyB0aWNrZXIgaGFzIGJlZW4gc3RhcnRlZC5cbiAgICAgKiBgdHJ1ZWAgaWYge0BsaW5rIFBJWEkudGlja2VyLlRpY2tlciNzdGFydH0gaGFzIGJlZW4gY2FsbGVkLlxuICAgICAqIGBmYWxzZWAgaWYge0BsaW5rIFBJWEkudGlja2VyLlRpY2tlciNzdG9wfSBoYXMgYmVlbiBjYWxsZWQuXG4gICAgICogV2hpbGUgYGZhbHNlYCwgdGhpcyB2YWx1ZSBtYXkgY2hhbmdlIHRvIGB0cnVlYCBpbiB0aGVcbiAgICAgKiBldmVudCBvZiB7QGxpbmsgUElYSS50aWNrZXIuVGlja2VyI2F1dG9TdGFydH0gYmVpbmcgYHRydWVgXG4gICAgICogYW5kIGEgbGlzdGVuZXIgaXMgYWRkZWQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqIEBkZWZhdWx0IGZhbHNlXG4gICAgICovXG4gICAgdGhpcy5zdGFydGVkID0gZmFsc2U7XG59XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKFRpY2tlci5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBUaGUgZnJhbWVzIHBlciBzZWNvbmQgYXQgd2hpY2ggdGhpcyB0aWNrZXIgaXMgcnVubmluZy5cbiAgICAgKiBUaGUgZGVmYXVsdCBpcyBhcHByb3hpbWF0ZWx5IDYwIGluIG1vc3QgbW9kZXJuIGJyb3dzZXJzLlxuICAgICAqICoqTm90ZToqKiBUaGlzIGRvZXMgbm90IGZhY3RvciBpbiB0aGUgdmFsdWUgb2ZcbiAgICAgKiB7QGxpbmsgUElYSS50aWNrZXIuVGlja2VyI3NwZWVkfSwgd2hpY2ggaXMgc3BlY2lmaWNcbiAgICAgKiB0byBzY2FsaW5nIHtAbGluayBQSVhJLnRpY2tlci5UaWNrZXIjZGVsdGFUaW1lfS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXJcbiAgICAgKiBAbWVtYmVyb2YgUElYSS50aWNrZXIuVGlja2VyI1xuICAgICAqIEByZWFkb25seVxuICAgICAqL1xuICAgIEZQUzoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIDEwMDAgLyB0aGlzLmVsYXBzZWRNUztcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBNYW5hZ2VzIHRoZSBtYXhpbXVtIGFtb3VudCBvZiBtaWxsaXNlY29uZHMgYWxsb3dlZCB0b1xuICAgICAqIGVsYXBzZSBiZXR3ZWVuIGludm9raW5nIHtAbGluayBQSVhJLnRpY2tlci5UaWNrZXIjdXBkYXRlfS5cbiAgICAgKiBUaGlzIHZhbHVlIGlzIHVzZWQgdG8gY2FwIHtAbGluayBQSVhJLnRpY2tlci5UaWNrZXIjZGVsdGFUaW1lfSxcbiAgICAgKiBidXQgZG9lcyBub3QgZWZmZWN0IHRoZSBtZWFzdXJlZCB2YWx1ZSBvZiB7QGxpbmsgUElYSS50aWNrZXIuVGlja2VyI0ZQU30uXG4gICAgICogV2hlbiBzZXR0aW5nIHRoaXMgcHJvcGVydHkgaXQgaXMgY2xhbXBlZCB0byBhIHZhbHVlIGJldHdlZW5cbiAgICAgKiBgMGAgYW5kIGBQSVhJLlRBUkdFVF9GUE1TICogMTAwMGAuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyXG4gICAgICogQG1lbWJlcm9mIFBJWEkudGlja2VyLlRpY2tlciNcbiAgICAgKiBAZGVmYXVsdCAxMFxuICAgICAqL1xuICAgIG1pbkZQUzoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIDEwMDAgLyB0aGlzLl9tYXhFbGFwc2VkTVM7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24oZnBzKVxuICAgICAgICB7XG4gICAgICAgICAgICAvLyBDbGFtcDogMCB0byBUQVJHRVRfRlBNU1xuICAgICAgICAgICAgdmFyIG1pbkZQTVMgPSBNYXRoLm1pbihNYXRoLm1heCgwLCBmcHMpIC8gMTAwMCwgQ09OU1QuVEFSR0VUX0ZQTVMpO1xuICAgICAgICAgICAgdGhpcy5fbWF4RWxhcHNlZE1TID0gMSAvIG1pbkZQTVM7XG4gICAgICAgIH1cbiAgICB9XG59KTtcblxuLyoqXG4gKiBDb25kaXRpb25hbGx5IHJlcXVlc3RzIGEgbmV3IGFuaW1hdGlvbiBmcmFtZS5cbiAqIElmIGEgZnJhbWUgaGFzIG5vdCBhbHJlYWR5IGJlZW4gcmVxdWVzdGVkLCBhbmQgaWYgdGhlIGludGVybmFsXG4gKiBlbWl0dGVyIGhhcyBsaXN0ZW5lcnMsIGEgbmV3IGZyYW1lIGlzIHJlcXVlc3RlZC5cbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5UaWNrZXIucHJvdG90eXBlLl9yZXF1ZXN0SWZOZWVkZWQgPSBmdW5jdGlvbiBfcmVxdWVzdElmTmVlZGVkKClcbntcbiAgICBpZiAodGhpcy5fcmVxdWVzdElkID09PSBudWxsICYmIHRoaXMuX2VtaXR0ZXIubGlzdGVuZXJzKFRJQ0ssIHRydWUpKVxuICAgIHtcbiAgICAgICAgLy8gZW5zdXJlIGNhbGxiYWNrcyBnZXQgY29ycmVjdCBkZWx0YVxuICAgICAgICB0aGlzLmxhc3RUaW1lID0gcGVyZm9ybWFuY2Uubm93KCk7XG4gICAgICAgIHRoaXMuX3JlcXVlc3RJZCA9IHJlcXVlc3RBbmltYXRpb25GcmFtZSh0aGlzLl90aWNrKTtcbiAgICB9XG59O1xuXG4vKipcbiAqIENvbmRpdGlvbmFsbHkgY2FuY2VscyBhIHBlbmRpbmcgYW5pbWF0aW9uIGZyYW1lLlxuICpcbiAqIEBwcml2YXRlXG4gKi9cblRpY2tlci5wcm90b3R5cGUuX2NhbmNlbElmTmVlZGVkID0gZnVuY3Rpb24gX2NhbmNlbElmTmVlZGVkKClcbntcbiAgICBpZiAodGhpcy5fcmVxdWVzdElkICE9PSBudWxsKVxuICAgIHtcbiAgICAgICAgY2FuY2VsQW5pbWF0aW9uRnJhbWUodGhpcy5fcmVxdWVzdElkKTtcbiAgICAgICAgdGhpcy5fcmVxdWVzdElkID0gbnVsbDtcbiAgICB9XG59O1xuXG4vKipcbiAqIENvbmRpdGlvbmFsbHkgcmVxdWVzdHMgYSBuZXcgYW5pbWF0aW9uIGZyYW1lLlxuICogSWYgdGhlIHRpY2tlciBoYXMgYmVlbiBzdGFydGVkIGl0IGNoZWNrcyBpZiBhIGZyYW1lIGhhcyBub3QgYWxyZWFkeVxuICogYmVlbiByZXF1ZXN0ZWQsIGFuZCBpZiB0aGUgaW50ZXJuYWwgZW1pdHRlciBoYXMgbGlzdGVuZXJzLiBJZiB0aGVzZVxuICogY29uZGl0aW9ucyBhcmUgbWV0LCBhIG5ldyBmcmFtZSBpcyByZXF1ZXN0ZWQuIElmIHRoZSB0aWNrZXIgaGFzIG5vdFxuICogYmVlbiBzdGFydGVkLCBidXQgYXV0b1N0YXJ0IGlzIGB0cnVlYCwgdGhlbiB0aGUgdGlja2VyIHN0YXJ0cyBub3csXG4gKiBhbmQgY29udGludWVzIHdpdGggdGhlIHByZXZpb3VzIGNvbmRpdGlvbnMgdG8gcmVxdWVzdCBhIG5ldyBmcmFtZS5cbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5UaWNrZXIucHJvdG90eXBlLl9zdGFydElmUG9zc2libGUgPSBmdW5jdGlvbiBfc3RhcnRJZlBvc3NpYmxlKClcbntcbiAgICBpZiAodGhpcy5zdGFydGVkKVxuICAgIHtcbiAgICAgICAgdGhpcy5fcmVxdWVzdElmTmVlZGVkKCk7XG4gICAgfVxuICAgIGVsc2UgaWYgKHRoaXMuYXV0b1N0YXJ0KVxuICAgIHtcbiAgICAgICAgdGhpcy5zdGFydCgpO1xuICAgIH1cbn07XG5cbi8qKlxuICogQ2FsbHMge0BsaW5rIG1vZHVsZTpldmVudGVtaXR0ZXIzLkV2ZW50RW1pdHRlciNvbn0gaW50ZXJuYWxseSBmb3IgdGhlXG4gKiBpbnRlcm5hbCAndGljaycgZXZlbnQuIEl0IGNoZWNrcyBpZiB0aGUgZW1pdHRlciBoYXMgbGlzdGVuZXJzLFxuICogYW5kIGlmIHNvIGl0IHJlcXVlc3RzIGEgbmV3IGFuaW1hdGlvbiBmcmFtZSBhdCB0aGlzIHBvaW50LlxuICpcbiAqIEBwYXJhbSBmbiB7RnVuY3Rpb259IFRoZSBsaXN0ZW5lciBmdW5jdGlvbiB0byBiZSBhZGRlZCBmb3IgdXBkYXRlc1xuICogQHBhcmFtIFtjb250ZXh0XSB7RnVuY3Rpb259IFRoZSBsaXN0ZW5lciBjb250ZXh0XG4gKiBAcmV0dXJucyB7UElYSS50aWNrZXIuVGlja2VyfSB0aGlzXG4gKi9cblRpY2tlci5wcm90b3R5cGUuYWRkID0gZnVuY3Rpb24gYWRkKGZuLCBjb250ZXh0KVxue1xuICAgIHRoaXMuX2VtaXR0ZXIub24oVElDSywgZm4sIGNvbnRleHQpO1xuXG4gICAgdGhpcy5fc3RhcnRJZlBvc3NpYmxlKCk7XG5cbiAgICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogQ2FsbHMge0BsaW5rIG1vZHVsZTpldmVudGVtaXR0ZXIzLkV2ZW50RW1pdHRlciNvbmNlfSBpbnRlcm5hbGx5IGZvciB0aGVcbiAqIGludGVybmFsICd0aWNrJyBldmVudC4gSXQgY2hlY2tzIGlmIHRoZSBlbWl0dGVyIGhhcyBsaXN0ZW5lcnMsXG4gKiBhbmQgaWYgc28gaXQgcmVxdWVzdHMgYSBuZXcgYW5pbWF0aW9uIGZyYW1lIGF0IHRoaXMgcG9pbnQuXG4gKlxuICogQHBhcmFtIGZuIHtGdW5jdGlvbn0gVGhlIGxpc3RlbmVyIGZ1bmN0aW9uIHRvIGJlIGFkZGVkIGZvciBvbmUgdXBkYXRlXG4gKiBAcGFyYW0gW2NvbnRleHRdIHtGdW5jdGlvbn0gVGhlIGxpc3RlbmVyIGNvbnRleHRcbiAqIEByZXR1cm5zIHtQSVhJLnRpY2tlci5UaWNrZXJ9IHRoaXNcbiAqL1xuVGlja2VyLnByb3RvdHlwZS5hZGRPbmNlID0gZnVuY3Rpb24gYWRkT25jZShmbiwgY29udGV4dClcbntcbiAgICB0aGlzLl9lbWl0dGVyLm9uY2UoVElDSywgZm4sIGNvbnRleHQpO1xuXG4gICAgdGhpcy5fc3RhcnRJZlBvc3NpYmxlKCk7XG5cbiAgICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogQ2FsbHMge0BsaW5rIG1vZHVsZTpldmVudGVtaXR0ZXIzLkV2ZW50RW1pdHRlciNvZmZ9IGludGVybmFsbHkgZm9yICd0aWNrJyBldmVudC5cbiAqIEl0IGNoZWNrcyBpZiB0aGUgZW1pdHRlciBoYXMgbGlzdGVuZXJzIGZvciAndGljaycgZXZlbnQuXG4gKiBJZiBpdCBkb2VzLCB0aGVuIGl0IGNhbmNlbHMgdGhlIGFuaW1hdGlvbiBmcmFtZS5cbiAqXG4gKiBAcGFyYW0gW2ZuXSB7RnVuY3Rpb259IFRoZSBsaXN0ZW5lciBmdW5jdGlvbiB0byBiZSByZW1vdmVkXG4gKiBAcGFyYW0gW2NvbnRleHRdIHtGdW5jdGlvbn0gVGhlIGxpc3RlbmVyIGNvbnRleHQgdG8gYmUgcmVtb3ZlZFxuICogQHJldHVybnMge1BJWEkudGlja2VyLlRpY2tlcn0gdGhpc1xuICovXG5UaWNrZXIucHJvdG90eXBlLnJlbW92ZSA9IGZ1bmN0aW9uIHJlbW92ZShmbiwgY29udGV4dClcbntcbiAgICB0aGlzLl9lbWl0dGVyLm9mZihUSUNLLCBmbiwgY29udGV4dCk7XG5cbiAgICBpZiAoIXRoaXMuX2VtaXR0ZXIubGlzdGVuZXJzKFRJQ0ssIHRydWUpKVxuICAgIHtcbiAgICAgICAgdGhpcy5fY2FuY2VsSWZOZWVkZWQoKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogU3RhcnRzIHRoZSB0aWNrZXIuIElmIHRoZSB0aWNrZXIgaGFzIGxpc3RlbmVyc1xuICogYSBuZXcgYW5pbWF0aW9uIGZyYW1lIGlzIHJlcXVlc3RlZCBhdCB0aGlzIHBvaW50LlxuICovXG5UaWNrZXIucHJvdG90eXBlLnN0YXJ0ID0gZnVuY3Rpb24gc3RhcnQoKVxue1xuICAgIGlmICghdGhpcy5zdGFydGVkKVxuICAgIHtcbiAgICAgICAgdGhpcy5zdGFydGVkID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5fcmVxdWVzdElmTmVlZGVkKCk7XG4gICAgfVxufTtcblxuLyoqXG4gKiBTdG9wcyB0aGUgdGlja2VyLiBJZiB0aGUgdGlja2VyIGhhcyByZXF1ZXN0ZWRcbiAqIGFuIGFuaW1hdGlvbiBmcmFtZSBpdCBpcyBjYW5jZWxlZCBhdCB0aGlzIHBvaW50LlxuICovXG5UaWNrZXIucHJvdG90eXBlLnN0b3AgPSBmdW5jdGlvbiBzdG9wKClcbntcbiAgICBpZiAodGhpcy5zdGFydGVkKVxuICAgIHtcbiAgICAgICAgdGhpcy5zdGFydGVkID0gZmFsc2U7XG4gICAgICAgIHRoaXMuX2NhbmNlbElmTmVlZGVkKCk7XG4gICAgfVxufTtcblxuLyoqXG4gKiBUcmlnZ2VycyBhbiB1cGRhdGUuIEFuIHVwZGF0ZSBlbnRhaWxzIHNldHRpbmcgdGhlXG4gKiBjdXJyZW50IHtAbGluayBQSVhJLnRpY2tlci5UaWNrZXIjZWxhcHNlZE1TfSxcbiAqIHRoZSBjdXJyZW50IHtAbGluayBQSVhJLnRpY2tlci5UaWNrZXIjZGVsdGFUaW1lfSxcbiAqIGludm9raW5nIGFsbCBsaXN0ZW5lcnMgd2l0aCBjdXJyZW50IGRlbHRhVGltZSxcbiAqIGFuZCB0aGVuIGZpbmFsbHkgc2V0dGluZyB7QGxpbmsgUElYSS50aWNrZXIuVGlja2VyI2xhc3RUaW1lfVxuICogd2l0aCB0aGUgdmFsdWUgb2YgY3VycmVudFRpbWUgdGhhdCB3YXMgcHJvdmlkZWQuXG4gKiBUaGlzIG1ldGhvZCB3aWxsIGJlIGNhbGxlZCBhdXRvbWF0aWNhbGx5IGJ5IGFuaW1hdGlvblxuICogZnJhbWUgY2FsbGJhY2tzIGlmIHRoZSB0aWNrZXIgaW5zdGFuY2UgaGFzIGJlZW4gc3RhcnRlZFxuICogYW5kIGxpc3RlbmVycyBhcmUgYWRkZWQuXG4gKlxuICogQHBhcmFtIFtjdXJyZW50VGltZT1wZXJmb3JtYW5jZS5ub3coKV0ge0RPTUhpZ2hSZXNUaW1lU3RhbXB8bnVtYmVyfSB0aGUgY3VycmVudCB0aW1lIG9mIGV4ZWN1dGlvblxuICovXG5UaWNrZXIucHJvdG90eXBlLnVwZGF0ZSA9IGZ1bmN0aW9uIHVwZGF0ZShjdXJyZW50VGltZSlcbntcbiAgICB2YXIgZWxhcHNlZE1TO1xuXG4gICAgLy8gQWxsb3cgY2FsbGluZyB1cGRhdGUgZGlyZWN0bHkgd2l0aCBkZWZhdWx0IGN1cnJlbnRUaW1lLlxuICAgIGN1cnJlbnRUaW1lID0gY3VycmVudFRpbWUgfHwgcGVyZm9ybWFuY2Uubm93KCk7XG4gICAgLy8gU2F2ZSB1bmNhcHBlZCBlbGFwc2VkTVMgZm9yIG1lYXN1cmVtZW50XG4gICAgZWxhcHNlZE1TID0gdGhpcy5lbGFwc2VkTVMgPSBjdXJyZW50VGltZSAtIHRoaXMubGFzdFRpbWU7XG5cbiAgICAvLyBjYXAgdGhlIG1pbGxpc2Vjb25kcyBlbGFwc2VkIHVzZWQgZm9yIGRlbHRhVGltZVxuICAgIGlmIChlbGFwc2VkTVMgPiB0aGlzLl9tYXhFbGFwc2VkTVMpXG4gICAge1xuICAgICAgICBlbGFwc2VkTVMgPSB0aGlzLl9tYXhFbGFwc2VkTVM7XG4gICAgfVxuXG4gICAgdGhpcy5kZWx0YVRpbWUgPSBlbGFwc2VkTVMgKiBDT05TVC5UQVJHRVRfRlBNUyAqIHRoaXMuc3BlZWQ7XG5cbiAgICAvLyBJbnZva2UgbGlzdGVuZXJzIGFkZGVkIHRvIGludGVybmFsIGVtaXR0ZXJcbiAgICB0aGlzLl9lbWl0dGVyLmVtaXQoVElDSywgdGhpcy5kZWx0YVRpbWUpO1xuXG4gICAgdGhpcy5sYXN0VGltZSA9IGN1cnJlbnRUaW1lO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBUaWNrZXI7XG4iLCJ2YXIgVGlja2VyID0gcmVxdWlyZSgnLi9UaWNrZXInKTtcblxuLyoqXG4gKiBUaGUgc2hhcmVkIHRpY2tlciBpbnN0YW5jZSB1c2VkIGJ5IHtAbGluayBQSVhJLmV4dHJhcy5Nb3ZpZUNsaXB9LlxuICogYW5kIGJ5IHtAbGluayBQSVhJLmludGVyYWN0aW9uLkludGVyYWN0aW9uTWFuYWdlcn0uXG4gKiBUaGUgcHJvcGVydHkge0BsaW5rIFBJWEkudGlja2VyLlRpY2tlciNhdXRvU3RhcnR9IGlzIHNldCB0byBgdHJ1ZWBcbiAqIGZvciB0aGlzIGluc3RhbmNlLiBQbGVhc2UgZm9sbG93IHRoZSBleGFtcGxlcyBmb3IgdXNhZ2UsIGluY2x1ZGluZ1xuICogaG93IHRvIG9wdC1vdXQgb2YgYXV0by1zdGFydGluZyB0aGUgc2hhcmVkIHRpY2tlci5cbiAqXG4gKiBAZXhhbXBsZVxuICogdmFyIHRpY2tlciA9IFBJWEkudGlja2VyLnNoYXJlZDtcbiAqIC8vIFNldCB0aGlzIHRvIHByZXZlbnQgc3RhcnRpbmcgdGhpcyB0aWNrZXIgd2hlbiBsaXN0ZW5lcnMgYXJlIGFkZGVkLlxuICogLy8gQnkgZGVmYXVsdCB0aGlzIGlzIHRydWUgb25seSBmb3IgdGhlIFBJWEkudGlja2VyLnNoYXJlZCBpbnN0YW5jZS5cbiAqIHRpY2tlci5hdXRvU3RhcnQgPSBmYWxzZTtcbiAqIC8vIEZZSSwgY2FsbCB0aGlzIHRvIGVuc3VyZSB0aGUgdGlja2VyIGlzIHN0b3BwZWQuIEl0IHNob3VsZCBiZSBzdG9wcGVkXG4gKiAvLyBpZiB5b3UgaGF2ZSBub3QgYXR0ZW1wdGVkIHRvIHJlbmRlciBhbnl0aGluZyB5ZXQuXG4gKiB0aWNrZXIuc3RvcCgpO1xuICogLy8gQ2FsbCB0aGlzIHdoZW4geW91IGFyZSByZWFkeSBmb3IgYSBydW5uaW5nIHNoYXJlZCB0aWNrZXIuXG4gKiB0aWNrZXIuc3RhcnQoKTtcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gWW91IG1heSB1c2UgdGhlIHNoYXJlZCB0aWNrZXIgdG8gcmVuZGVyLi4uXG4gKiB2YXIgcmVuZGVyZXIgPSBQSVhJLmF1dG9EZXRlY3RSZW5kZXJlcig4MDAsIDYwMCk7XG4gKiB2YXIgc3RhZ2UgPSBuZXcgUElYSS5Db250YWluZXIoKTtcbiAqIHZhciBpbnRlcmFjdGlvbk1hbmFnZXIgPSBQSVhJLmludGVyYWN0aW9uLkludGVyYWN0aW9uTWFuYWdlcihyZW5kZXJlcik7XG4gKiBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKHJlbmRlcmVyLnZpZXcpO1xuICogdGlja2VyLmFkZChmdW5jdGlvbiAodGltZSkge1xuICogICAgIHJlbmRlcmVyLnJlbmRlcihzdGFnZSk7XG4gKiB9KTtcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gT3IgeW91IGNhbiBqdXN0IHVwZGF0ZSBpdCBtYW51YWxseS5cbiAqIHRpY2tlci5hdXRvU3RhcnQgPSBmYWxzZTtcbiAqIHRpY2tlci5zdG9wKCk7XG4gKiBmdW5jdGlvbiBhbmltYXRlKHRpbWUpIHtcbiAqICAgICB0aWNrZXIudXBkYXRlKHRpbWUpO1xuICogICAgIHJlbmRlcmVyLnJlbmRlcihzdGFnZSk7XG4gKiAgICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKGFuaW1hdGUpO1xuICogfVxuICogYW5pbWF0ZShwZXJmb3JtYW5jZS5ub3coKSk7XG4gKlxuICogQHR5cGUge1BJWEkudGlja2VyLlRpY2tlcn1cbiAqIEBtZW1iZXJvZiBQSVhJLnRpY2tlclxuICovXG52YXIgc2hhcmVkID0gbmV3IFRpY2tlcigpO1xuc2hhcmVkLmF1dG9TdGFydCA9IHRydWU7XG5cbi8qKlxuICogQG5hbWVzcGFjZSBQSVhJLnRpY2tlclxuICovXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgICBzaGFyZWQ6IHNoYXJlZCxcbiAgICBUaWNrZXI6IFRpY2tlclxufTtcbiIsIi8qKlxuICogR2VuZXJpYyBNYXNrIFN0YWNrIGRhdGEgc3RydWN0dXJlXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKi9cblxudmFyIEdMX01BUCA9IHt9O1xuXG5cbnZhciBjcmVhdGVJbmRpY2VzRm9yUXVhZHMgPSBmdW5jdGlvbiAoc2l6ZSlcbntcbiAgICAvLyB0aGUgdG90YWwgbnVtYmVyIG9mIGluZGljZXMgaW4gb3VyIGFycmF5LCB0aGVyZSBhcmUgNiBwb2ludHMgcGVyIHF1YWQuXG4gICBcbiAgICB2YXIgdG90YWxJbmRpY2VzID0gc2l6ZSAqIDY7XG5cbiAgICB2YXIgaW5kaWNlcyA9IG5ldyBVaW50MTZBcnJheSh0b3RhbEluZGljZXMpO1xuXG5cdC8vIGZpbGwgdGhlIGluZGljZXMgd2l0aCB0aGUgcXVhZHMgdG8gZHJhd1xuICAgIGZvciAodmFyIGk9MCwgaj0wOyBpIDwgdG90YWxJbmRpY2VzOyBpICs9IDYsIGogKz0gNClcbiAgICB7XG4gICAgICAgIGluZGljZXNbaSArIDBdID0gaiArIDA7XG4gICAgICAgIGluZGljZXNbaSArIDFdID0gaiArIDE7XG4gICAgICAgIGluZGljZXNbaSArIDJdID0gaiArIDI7XG4gICAgICAgIGluZGljZXNbaSArIDNdID0gaiArIDA7XG4gICAgICAgIGluZGljZXNbaSArIDRdID0gaiArIDI7XG4gICAgICAgIGluZGljZXNbaSArIDVdID0gaiArIDM7XG4gICAgfVxuXG4gICAgcmV0dXJuIGluZGljZXM7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGNyZWF0ZUluZGljZXNGb3JRdWFkczsiLCJ2YXIgQ09OU1QgPSByZXF1aXJlKCcuLi9jb25zdCcpO1xuXG4vKipcbiAqIEBuYW1lc3BhY2UgUElYSS51dGlsc1xuICovXG52YXIgdXRpbHMgPSBtb2R1bGUuZXhwb3J0cyA9IHtcbiAgICBfdWlkOiAwLFxuICAgIF9zYWlkSGVsbG86IGZhbHNlLFxuXG4gICAgRXZlbnRFbWl0dGVyOiAgIHJlcXVpcmUoJ2V2ZW50ZW1pdHRlcjMnKSxcbiAgICBwbHVnaW5UYXJnZXQ6ICAgcmVxdWlyZSgnLi9wbHVnaW5UYXJnZXQnKSxcbiAgICBhc3luYzogICAgICAgICAgcmVxdWlyZSgnYXN5bmMnKSxcblxuICAgIC8qKlxuICAgICAqIEdldHMgdGhlIG5leHQgdW5pcXVlIGlkZW50aWZpZXJcbiAgICAgKlxuICAgICAqIEByZXR1cm4ge251bWJlcn0gVGhlIG5leHQgdW5pcXVlIGlkZW50aWZpZXIgdG8gdXNlLlxuICAgICAqL1xuICAgIHVpZDogZnVuY3Rpb24gKClcbiAgICB7XG4gICAgICAgIHJldHVybiArK3V0aWxzLl91aWQ7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIENvbnZlcnRzIGEgaGV4IGNvbG9yIG51bWJlciB0byBhbiBbUiwgRywgQl0gYXJyYXlcbiAgICAgKlxuICAgICAqIEBwYXJhbSBoZXgge251bWJlcn1cbiAgICAgKiBAcGFyYW0gIHtudW1iZXJbXX0gW291dD1bXV1cbiAgICAgKiBAcmV0dXJuIHtudW1iZXJbXX0gQW4gYXJyYXkgcmVwcmVzZW50aW5nIHRoZSBbUiwgRywgQl0gb2YgdGhlIGNvbG9yLlxuICAgICAqL1xuICAgIGhleDJyZ2I6IGZ1bmN0aW9uIChoZXgsIG91dClcbiAgICB7XG4gICAgICAgIG91dCA9IG91dCB8fCBbXTtcblxuICAgICAgICBvdXRbMF0gPSAoaGV4ID4+IDE2ICYgMHhGRikgLyAyNTU7XG4gICAgICAgIG91dFsxXSA9IChoZXggPj4gOCAmIDB4RkYpIC8gMjU1O1xuICAgICAgICBvdXRbMl0gPSAoaGV4ICYgMHhGRikgLyAyNTU7XG5cbiAgICAgICAgcmV0dXJuIG91dDtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQ29udmVydHMgYSBoZXggY29sb3IgbnVtYmVyIHRvIGEgc3RyaW5nLlxuICAgICAqXG4gICAgICogQHBhcmFtIGhleCB7bnVtYmVyfVxuICAgICAqIEByZXR1cm4ge3N0cmluZ30gVGhlIHN0cmluZyBjb2xvci5cbiAgICAgKi9cbiAgICBoZXgyc3RyaW5nOiBmdW5jdGlvbiAoaGV4KVxuICAgIHtcbiAgICAgICAgaGV4ID0gaGV4LnRvU3RyaW5nKDE2KTtcbiAgICAgICAgaGV4ID0gJzAwMDAwMCcuc3Vic3RyKDAsIDYgLSBoZXgubGVuZ3RoKSArIGhleDtcblxuICAgICAgICByZXR1cm4gJyMnICsgaGV4O1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBDb252ZXJ0cyBhIGNvbG9yIGFzIGFuIFtSLCBHLCBCXSBhcnJheSB0byBhIGhleCBudW1iZXJcbiAgICAgKlxuICAgICAqIEBwYXJhbSByZ2Ige251bWJlcltdfVxuICAgICAqIEByZXR1cm4ge251bWJlcn0gVGhlIGNvbG9yIG51bWJlclxuICAgICAqL1xuICAgIHJnYjJoZXg6IGZ1bmN0aW9uIChyZ2IpXG4gICAge1xuICAgICAgICByZXR1cm4gKChyZ2JbMF0qMjU1IDw8IDE2KSArIChyZ2JbMV0qMjU1IDw8IDgpICsgcmdiWzJdKjI1NSk7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIENoZWNrcyB3aGV0aGVyIHRoZSBDYW52YXMgQmxlbmRNb2RlcyBhcmUgc3VwcG9ydGVkIGJ5IHRoZSBjdXJyZW50IGJyb3dzZXJcbiAgICAgKlxuICAgICAqIEByZXR1cm4ge2Jvb2xlYW59IHdoZXRoZXIgdGhleSBhcmUgc3VwcG9ydGVkXG4gICAgICovXG4gICAgY2FuVXNlTmV3Q2FudmFzQmxlbmRNb2RlczogZnVuY3Rpb24gKClcbiAgICB7XG4gICAgICAgIGlmICh0eXBlb2YgZG9jdW1lbnQgPT09ICd1bmRlZmluZWQnKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgcG5nSGVhZCA9ICdkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQUFRQUFBQUJBUU1BQUFERDhwMk9BQUFBQTFCTVZFWC8nO1xuICAgICAgICB2YXIgcG5nRW5kID0gJ0FBQUFDa2xFUVZRSTEyTmdBQUFBQWdBQjRpRzhNd0FBQUFCSlJVNUVya0pnZ2c9PSc7XG5cbiAgICAgICAgdmFyIG1hZ2VudGEgPSBuZXcgSW1hZ2UoKTtcbiAgICAgICAgbWFnZW50YS5zcmMgPSBwbmdIZWFkICsgJ0FQODA0T2E2JyArIHBuZ0VuZDtcblxuICAgICAgICB2YXIgeWVsbG93ID0gbmV3IEltYWdlKCk7XG4gICAgICAgIHllbGxvdy5zcmMgPSBwbmdIZWFkICsgJy93Q0t4dlJGJyArIHBuZ0VuZDtcblxuICAgICAgICB2YXIgY2FudmFzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnY2FudmFzJyk7XG4gICAgICAgIGNhbnZhcy53aWR0aCA9IDY7XG4gICAgICAgIGNhbnZhcy5oZWlnaHQgPSAxO1xuXG4gICAgICAgIHZhciBjb250ZXh0ID0gY2FudmFzLmdldENvbnRleHQoJzJkJyk7XG4gICAgICAgIGNvbnRleHQuZ2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uID0gJ211bHRpcGx5JztcbiAgICAgICAgY29udGV4dC5kcmF3SW1hZ2UobWFnZW50YSwgMCwgMCk7XG4gICAgICAgIGNvbnRleHQuZHJhd0ltYWdlKHllbGxvdywgMiwgMCk7XG5cbiAgICAgICAgdmFyIGRhdGEgPSBjb250ZXh0LmdldEltYWdlRGF0YSgyLDAsMSwxKS5kYXRhO1xuXG4gICAgICAgIHJldHVybiAoZGF0YVswXSA9PT0gMjU1ICYmIGRhdGFbMV0gPT09IDAgJiYgZGF0YVsyXSA9PT0gMCk7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIEdpdmVuIGEgbnVtYmVyLCB0aGlzIGZ1bmN0aW9uIHJldHVybnMgdGhlIGNsb3Nlc3QgbnVtYmVyIHRoYXQgaXMgYSBwb3dlciBvZiB0d29cbiAgICAgKiB0aGlzIGZ1bmN0aW9uIGlzIHRha2VuIGZyb20gU3RhcmxpbmcgRnJhbWV3b3JrIGFzIGl0cyBwcmV0dHkgbmVhdCA7KVxuICAgICAqXG4gICAgICogQHBhcmFtIG51bWJlciB7bnVtYmVyfVxuICAgICAqIEByZXR1cm4ge251bWJlcn0gdGhlIGNsb3Nlc3QgbnVtYmVyIHRoYXQgaXMgYSBwb3dlciBvZiB0d29cbiAgICAgKi9cbiAgICBnZXROZXh0UG93ZXJPZlR3bzogZnVuY3Rpb24gKG51bWJlcilcbiAgICB7XG4gICAgICAgIC8vIHNlZTogaHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9Qb3dlcl9vZl90d28jRmFzdF9hbGdvcml0aG1fdG9fY2hlY2tfaWZfYV9wb3NpdGl2ZV9udW1iZXJfaXNfYV9wb3dlcl9vZl90d29cbiAgICAgICAgaWYgKG51bWJlciA+IDAgJiYgKG51bWJlciAmIChudW1iZXIgLSAxKSkgPT09IDApXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiBudW1iZXI7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgICB2YXIgcmVzdWx0ID0gMTtcblxuICAgICAgICAgICAgd2hpbGUgKHJlc3VsdCA8IG51bWJlcilcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICByZXN1bHQgPDw9IDE7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogY2hlY2tzIGlmIHRoZSBnaXZlbiB3aWR0aCBhbmQgaGVpZ2h0IG1ha2UgYSBwb3dlciBvZiB0d28gcmVjdGFuZ2xlXG4gICAgICpcbiAgICAgKiBAcGFyYW0gd2lkdGgge251bWJlcn1cbiAgICAgKiBAcGFyYW0gaGVpZ2h0IHtudW1iZXJ9XG4gICAgICogQHJldHVybiB7Ym9vbGVhbn1cbiAgICAgKi9cbiAgICBpc1Bvd2VyT2ZUd286IGZ1bmN0aW9uICh3aWR0aCwgaGVpZ2h0KVxuICAgIHtcbiAgICAgICAgcmV0dXJuICh3aWR0aCA+IDAgJiYgKHdpZHRoICYgKHdpZHRoIC0gMSkpID09PSAwICYmIGhlaWdodCA+IDAgJiYgKGhlaWdodCAmIChoZWlnaHQgLSAxKSkgPT09IDApO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBnZXQgdGhlIHJlc29sdXRpb24gb2YgYW4gYXNzZXQgYnkgbG9va2luZyBmb3IgdGhlIHByZWZpeFxuICAgICAqIHVzZWQgYnkgc3ByaXRlc2hlZXRzIGFuZCBpbWFnZSB1cmxzXG4gICAgICpcbiAgICAgKiBAcGFyYW0gdXJsIHtzdHJpbmd9IHRoZSBpbWFnZSBwYXRoXG4gICAgICogQHJldHVybiB7bnVtYmVyfVxuICAgICAqL1xuICAgIGdldFJlc29sdXRpb25PZlVybDogZnVuY3Rpb24gKHVybClcbiAgICB7XG4gICAgICAgIHZhciByZXNvbHV0aW9uID0gQ09OU1QuUkVUSU5BX1BSRUZJWC5leGVjKHVybCk7XG5cbiAgICAgICAgaWYgKHJlc29sdXRpb24pXG4gICAgICAgIHtcbiAgICAgICAgICAgcmV0dXJuIHBhcnNlRmxvYXQocmVzb2x1dGlvblsxXSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gMTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogTG9ncyBvdXQgdGhlIHZlcnNpb24gYW5kIHJlbmRlcmVyIGluZm9ybWF0aW9uIGZvciB0aGlzIHJ1bm5pbmcgaW5zdGFuY2Ugb2YgUElYSS5cbiAgICAgKiBJZiB5b3UgZG9uJ3Qgd2FudCB0byBzZWUgdGhpcyBtZXNzYWdlIHlvdSBjYW4gc2V0IGBQSVhJLnV0aWxzLl9zYWlkSGVsbG8gPSB0cnVlO2BcbiAgICAgKiBzbyB0aGUgbGlicmFyeSB0aGlua3MgaXQgYWxyZWFkeSBzYWlkIGl0LiBLZWVwIGluIG1pbmQgdGhhdCBkb2luZyB0aGF0IHdpbGwgZm9yZXZlclxuICAgICAqIG1ha2VzIHlvdSBhIGplcmsgZmFjZS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSB0eXBlIC0gVGhlIHN0cmluZyByZW5kZXJlciB0eXBlIHRvIGxvZy5cbiAgICAgKiBAY29uc3RhbnRcbiAgICAgKiBAc3RhdGljXG4gICAgICovXG4gICAgc2F5SGVsbG86IGZ1bmN0aW9uICh0eXBlKVxuICAgIHtcbiAgICAgICAgaWYgKHV0aWxzLl9zYWlkSGVsbG8pXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChuYXZpZ2F0b3IudXNlckFnZW50LnRvTG93ZXJDYXNlKCkuaW5kZXhPZignY2hyb21lJykgPiAtMSlcbiAgICAgICAge1xuICAgICAgICAgICAgdmFyIGFyZ3MgPSBbXG4gICAgICAgICAgICAgICAgJ1xcbiAlYyAlYyAlYyBQaXhpLmpzICcgKyBDT05TVC5WRVJTSU9OICsgJyAtIOKcsCAnICsgdHlwZSArICcg4pywICAlYyAnICsgJyAlYyAnICsgJyBodHRwOi8vd3d3LnBpeGlqcy5jb20vICAlYyAlYyDimaUlY+KZpSVj4pmlIFxcblxcbicsXG4gICAgICAgICAgICAgICAgJ2JhY2tncm91bmQ6ICNmZjY2YTU7IHBhZGRpbmc6NXB4IDA7JyxcbiAgICAgICAgICAgICAgICAnYmFja2dyb3VuZDogI2ZmNjZhNTsgcGFkZGluZzo1cHggMDsnLFxuICAgICAgICAgICAgICAgICdjb2xvcjogI2ZmNjZhNTsgYmFja2dyb3VuZDogIzAzMDMwNzsgcGFkZGluZzo1cHggMDsnLFxuICAgICAgICAgICAgICAgICdiYWNrZ3JvdW5kOiAjZmY2NmE1OyBwYWRkaW5nOjVweCAwOycsXG4gICAgICAgICAgICAgICAgJ2JhY2tncm91bmQ6ICNmZmMzZGM7IHBhZGRpbmc6NXB4IDA7JyxcbiAgICAgICAgICAgICAgICAnYmFja2dyb3VuZDogI2ZmNjZhNTsgcGFkZGluZzo1cHggMDsnLFxuICAgICAgICAgICAgICAgICdjb2xvcjogI2ZmMjQyNDsgYmFja2dyb3VuZDogI2ZmZjsgcGFkZGluZzo1cHggMDsnLFxuICAgICAgICAgICAgICAgICdjb2xvcjogI2ZmMjQyNDsgYmFja2dyb3VuZDogI2ZmZjsgcGFkZGluZzo1cHggMDsnLFxuICAgICAgICAgICAgICAgICdjb2xvcjogI2ZmMjQyNDsgYmFja2dyb3VuZDogI2ZmZjsgcGFkZGluZzo1cHggMDsnXG4gICAgICAgICAgICBdO1xuXG4gICAgICAgICAgICB3aW5kb3cuY29uc29sZS5sb2cuYXBwbHkoY29uc29sZSwgYXJncyk7IC8vanNoaW50IGlnbm9yZTpsaW5lXG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAod2luZG93LmNvbnNvbGUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHdpbmRvdy5jb25zb2xlLmxvZygnUGl4aS5qcyAnICsgQ09OU1QuVkVSU0lPTiArICcgLSAnICsgdHlwZSArICcgLSBodHRwOi8vd3d3LnBpeGlqcy5jb20vJyk7IC8vanNoaW50IGlnbm9yZTpsaW5lXG4gICAgICAgIH1cblxuICAgICAgICB1dGlscy5fc2FpZEhlbGxvID0gdHJ1ZTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogSGVscGVyIGZvciBjaGVja2luZyBmb3Igd2ViZ2wgc3VwcG9ydFxuICAgICAqXG4gICAgICogQHJldHVybiB7Ym9vbGVhbn1cbiAgICAgKi9cbiAgICBpc1dlYkdMU3VwcG9ydGVkOiBmdW5jdGlvbiAoKVxuICAgIHtcbiAgICAgICAgdmFyIGNvbnRleHRPcHRpb25zID0geyBzdGVuY2lsOiB0cnVlIH07XG4gICAgICAgIHRyeVxuICAgICAgICB7XG4gICAgICAgICAgICBpZiAoIXdpbmRvdy5XZWJHTFJlbmRlcmluZ0NvbnRleHQpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB2YXIgY2FudmFzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnY2FudmFzJyksXG4gICAgICAgICAgICAgICAgZ2wgPSBjYW52YXMuZ2V0Q29udGV4dCgnd2ViZ2wnLCBjb250ZXh0T3B0aW9ucykgfHwgY2FudmFzLmdldENvbnRleHQoJ2V4cGVyaW1lbnRhbC13ZWJnbCcsIGNvbnRleHRPcHRpb25zKTtcblxuICAgICAgICAgICAgcmV0dXJuICEhKGdsICYmIGdsLmdldENvbnRleHRBdHRyaWJ1dGVzKCkuc3RlbmNpbCk7XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHNpZ24gb2YgbnVtYmVyXG4gICAgICpcbiAgICAgKiBAcGFyYW0gbiB7bnVtYmVyfVxuICAgICAqIEByZXR1cm5zIHtudW1iZXJ9IDAgaWYgbiBpcyAwLCAtMSBpZiBuIGlzIG5lZ2F0aXZlLCAxIGlmIG4gaSBwb3NpdGl2ZVxuICAgICAqL1xuICAgIHNpZ246IGZ1bmN0aW9uIChuKVxuICAgIHtcbiAgICAgICAgcmV0dXJuIG4gPyAobiA8IDAgPyAtMSA6IDEpIDogMDtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogcmVtb3ZlSXRlbXNcbiAgICAgKlxuICAgICAqIEBwYXJhbSB7YXJyYXl9IGFyciBUaGUgdGFyZ2V0IGFycmF5XG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHN0YXJ0SWR4IFRoZSBpbmRleCB0byBiZWdpbiByZW1vdmluZyBmcm9tIChpbmNsdXNpdmUpXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHJlbW92ZUNvdW50IEhvdyBtYW55IGl0ZW1zIHRvIHJlbW92ZVxuICAgICAqL1xuICAgIHJlbW92ZUl0ZW1zOiBmdW5jdGlvbiAoYXJyLCBzdGFydElkeCwgcmVtb3ZlQ291bnQpXG4gICAge1xuICAgICAgICB2YXIgbGVuZ3RoID0gYXJyLmxlbmd0aDtcblxuICAgICAgICBpZiAoc3RhcnRJZHggPj0gbGVuZ3RoIHx8IHJlbW92ZUNvdW50ID09PSAwKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICByZW1vdmVDb3VudCA9IChzdGFydElkeCtyZW1vdmVDb3VudCA+IGxlbmd0aCA/IGxlbmd0aC1zdGFydElkeCA6IHJlbW92ZUNvdW50KTtcbiAgICAgICAgZm9yICh2YXIgaSA9IHN0YXJ0SWR4LCBsZW4gPSBsZW5ndGgtcmVtb3ZlQ291bnQ7IGkgPCBsZW47ICsraSlcbiAgICAgICAge1xuICAgICAgICAgICAgYXJyW2ldID0gYXJyW2kgKyByZW1vdmVDb3VudF07XG4gICAgICAgIH1cblxuICAgICAgICBhcnIubGVuZ3RoID0gbGVuO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBAdG9kbyBEZXNjcmliZSBwcm9wZXJ0eSB1c2FnZVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgVGV4dHVyZUNhY2hlOiB7fSxcblxuICAgIC8qKlxuICAgICAqIEB0b2RvIERlc2NyaWJlIHByb3BlcnR5IHVzYWdlXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICBCYXNlVGV4dHVyZUNhY2hlOiB7fVxufTtcbiIsIi8qKlxuICogTWl4aW5zIGZ1bmN0aW9uYWxpdHkgdG8gbWFrZSBhbiBvYmplY3QgaGF2ZSBcInBsdWdpbnNcIi5cbiAqXG4gKiBAbWl4aW5cbiAqIEBtZW1iZXJvZiBQSVhJLnV0aWxzXG4gKiBAcGFyYW0gb2JqIHtvYmplY3R9IFRoZSBvYmplY3QgdG8gbWl4IGludG8uXG4gKiBAZXhhbXBsZVxuICogICAgICBmdW5jdGlvbiBNeU9iamVjdCgpIHt9XG4gKlxuICogICAgICBwbHVnaW5UYXJnZXQubWl4aW4oTXlPYmplY3QpO1xuICovXG5mdW5jdGlvbiBwbHVnaW5UYXJnZXQob2JqKVxue1xuICAgIG9iai5fX3BsdWdpbnMgPSB7fTtcblxuICAgIC8qKlxuICAgICAqIEFkZHMgYSBwbHVnaW4gdG8gYW4gb2JqZWN0XG4gICAgICpcbiAgICAgKiBAcGFyYW0gcGx1Z2luTmFtZSB7c3RyaW5nfSBUaGUgZXZlbnRzIHRoYXQgc2hvdWxkIGJlIGxpc3RlZC5cbiAgICAgKiBAcGFyYW0gY3RvciB7RnVuY3Rpb259IFRoZSBjb25zdHJ1Y3RvciBmdW5jdGlvbiBmb3IgdGhlIHBsdWdpbi5cbiAgICAgKi9cbiAgICBvYmoucmVnaXN0ZXJQbHVnaW4gPSBmdW5jdGlvbiAocGx1Z2luTmFtZSwgY3RvcilcbiAgICB7XG4gICAgICAgIG9iai5fX3BsdWdpbnNbcGx1Z2luTmFtZV0gPSBjdG9yO1xuICAgIH07XG5cbiAgICAvKipcbiAgICAgKiBJbnN0YW50aWF0ZXMgYWxsIHRoZSBwbHVnaW5zIG9mIHRoaXMgb2JqZWN0XG4gICAgICpcbiAgICAgKi9cbiAgICBvYmoucHJvdG90eXBlLmluaXRQbHVnaW5zID0gZnVuY3Rpb24gKClcbiAgICB7XG4gICAgICAgIHRoaXMucGx1Z2lucyA9IHRoaXMucGx1Z2lucyB8fCB7fTtcblxuICAgICAgICBmb3IgKHZhciBvIGluIG9iai5fX3BsdWdpbnMpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMucGx1Z2luc1tvXSA9IG5ldyAob2JqLl9fcGx1Z2luc1tvXSkodGhpcyk7XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgLyoqXG4gICAgICogUmVtb3ZlcyBhbGwgdGhlIHBsdWdpbnMgb2YgdGhpcyBvYmplY3RcbiAgICAgKlxuICAgICAqL1xuICAgIG9iai5wcm90b3R5cGUuZGVzdHJveVBsdWdpbnMgPSBmdW5jdGlvbiAoKVxuICAgIHtcbiAgICAgICAgZm9yICh2YXIgbyBpbiB0aGlzLnBsdWdpbnMpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMucGx1Z2luc1tvXS5kZXN0cm95KCk7XG4gICAgICAgICAgICB0aGlzLnBsdWdpbnNbb10gPSBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5wbHVnaW5zID0gbnVsbDtcbiAgICB9O1xufVxuXG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICAgIC8qKlxuICAgICAqIE1peGVzIGluIHRoZSBwcm9wZXJ0aWVzIG9mIHRoZSBwbHVnaW5UYXJnZXQgaW50byBhbm90aGVyIG9iamVjdFxuICAgICAqXG4gICAgICogQHBhcmFtIG9iamVjdCB7b2JqZWN0fSBUaGUgb2JqIHRvIG1peCBpbnRvXG4gICAgICovXG4gICAgbWl4aW46IGZ1bmN0aW9uIG1peGluKG9iailcbiAgICB7XG4gICAgICAgIHBsdWdpblRhcmdldChvYmopO1xuICAgIH1cbn07XG4iLCIvKmdsb2JhbCBjb25zb2xlICovXG52YXIgY29yZSA9IHJlcXVpcmUoJy4vY29yZScpLFxuICAgIG1lc2ggPSByZXF1aXJlKCcuL21lc2gnKSxcbiAgICBleHRyYXMgPSByZXF1aXJlKCcuL2V4dHJhcycpLFxuICAgIGZpbHRlcnMgPSByZXF1aXJlKCcuL2ZpbHRlcnMnKTtcblxuLyoqXG4gKiBAY2xhc3NcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBTcHJpdGVCYXRjaFxuICogQG1lbWJlcm9mIFBJWElcbiAqIEBzZWUgUElYSS5QYXJ0aWNsZUNvbnRhaW5lclxuICogQHRocm93cyB7UmVmZXJlbmNlRXJyb3J9IFNwcml0ZUJhdGNoIGRvZXMgbm90IGV4aXN0IGFueSBtb3JlLCBwbGVhc2UgdXNlIHRoZSBuZXcgUGFydGljbGVDb250YWluZXIgaW5zdGVhZC5cbiAqIEBkZXByZWNhdGVkIHNpbmNlIHZlcnNpb24gMy4wLjBcbiAqL1xuY29yZS5TcHJpdGVCYXRjaCA9IGZ1bmN0aW9uKClcbntcbiAgICB0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoJ1Nwcml0ZUJhdGNoIGRvZXMgbm90IGV4aXN0IGFueSBtb3JlLCBwbGVhc2UgdXNlIHRoZSBuZXcgUGFydGljbGVDb250YWluZXIgaW5zdGVhZC4nKTtcbn07XG5cbi8qKlxuICogQGNsYXNzXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgQXNzZXRMb2FkZXJcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAc2VlIFBJWEkubG9hZGVycy5Mb2FkZXJcbiAqIEB0aHJvd3Mge1JlZmVyZW5jZUVycm9yfSBUaGUgbG9hZGVyIHN5c3RlbSB3YXMgb3ZlcmhhdWxlZCBpbiBwaXhpIHYzLCBwbGVhc2Ugc2VlIHRoZSBuZXcgUElYSS5sb2FkZXJzLkxvYWRlciBjbGFzcy5cbiAqIEBkZXByZWNhdGVkIHNpbmNlIHZlcnNpb24gMy4wLjBcbiAqL1xuY29yZS5Bc3NldExvYWRlciA9IGZ1bmN0aW9uKClcbntcbiAgICB0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoJ1RoZSBsb2FkZXIgc3lzdGVtIHdhcyBvdmVyaGF1bGVkIGluIHBpeGkgdjMsIHBsZWFzZSBzZWUgdGhlIG5ldyBQSVhJLmxvYWRlcnMuTG9hZGVyIGNsYXNzLicpO1xufTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoY29yZSwge1xuXG4gICAgLyoqXG4gICAgICogQGNsYXNzXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAbmFtZSBTdGFnZVxuICAgICAqIEBtZW1iZXJvZiBQSVhJXG4gICAgICogQHNlZSBQSVhJLkNvbnRhaW5lclxuICAgICAqIEBkZXByZWNhdGVkIHNpbmNlIHZlcnNpb24gMy4wLjBcbiAgICAgKi9cbiAgICBTdGFnZToge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uKClcbiAgICAgICAge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKCdZb3UgZG8gbm90IG5lZWQgdG8gdXNlIGEgUElYSSBTdGFnZSBhbnkgbW9yZSwgeW91IGNhbiBzaW1wbHkgcmVuZGVyIGFueSBjb250YWluZXIuJyk7XG4gICAgICAgICAgICByZXR1cm4gY29yZS5Db250YWluZXI7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQGNsYXNzXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAbmFtZSBEaXNwbGF5T2JqZWN0Q29udGFpbmVyXG4gICAgICogQG1lbWJlcm9mIFBJWElcbiAgICAgKiBAc2VlIFBJWEkuQ29udGFpbmVyXG4gICAgICogQGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiAzLjAuMFxuICAgICAqL1xuICAgIERpc3BsYXlPYmplY3RDb250YWluZXI6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbigpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignRGlzcGxheU9iamVjdENvbnRhaW5lciBoYXMgYmVlbiBzaG9ydGVuZWQgdG8gQ29udGFpbmVyLCBwbGVhc2UgdXNlIENvbnRhaW5lciBmcm9tIG5vdyBvbi4nKTtcbiAgICAgICAgICAgIHJldHVybiBjb3JlLkNvbnRhaW5lcjtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBAY2xhc3NcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBuYW1lIFN0cmlwXG4gICAgICogQG1lbWJlcm9mIFBJWElcbiAgICAgKiBAc2VlIFBJWEkubWVzaC5NZXNoXG4gICAgICogQGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiAzLjAuMFxuICAgICAqL1xuICAgIFN0cmlwOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24oKVxuICAgICAgICB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ1RoZSBTdHJpcCBjbGFzcyBoYXMgYmVlbiByZW5hbWVkIHRvIE1lc2ggYW5kIG1vdmVkIHRvIG1lc2guTWVzaCwgcGxlYXNlIHVzZSBtZXNoLk1lc2ggZnJvbSBub3cgb24uJyk7XG4gICAgICAgICAgICByZXR1cm4gbWVzaC5NZXNoO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIEBjbGFzc1xuICAgICAqIEBwcml2YXRlXG4gICAgICogQG5hbWUgUm9wZVxuICAgICAqIEBtZW1iZXJvZiBQSVhJXG4gICAgICogQHNlZSBQSVhJLm1lc2guUm9wZVxuICAgICAqIEBkZXByZWNhdGVkIHNpbmNlIHZlcnNpb24gMy4wLjBcbiAgICAgKi9cbiAgICBSb3BlOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24oKVxuICAgICAgICB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ1RoZSBSb3BlIGNsYXNzIGhhcyBiZWVuIG1vdmVkIHRvIG1lc2guUm9wZSwgcGxlYXNlIHVzZSBtZXNoLlJvcGUgZnJvbSBub3cgb24uJyk7XG4gICAgICAgICAgICByZXR1cm4gbWVzaC5Sb3BlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIEBjbGFzc1xuICAgICAqIEBwcml2YXRlXG4gICAgICogQG5hbWUgTW92aWVDbGlwXG4gICAgICogQG1lbWJlcm9mIFBJWElcbiAgICAgKiBAc2VlIFBJWEkuZXh0cmFzLk1vdmllQ2xpcFxuICAgICAqIEBkZXByZWNhdGVkIHNpbmNlIHZlcnNpb24gMy4wLjBcbiAgICAgKi9cbiAgICBNb3ZpZUNsaXA6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbigpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignVGhlIE1vdmllQ2xpcCBjbGFzcyBoYXMgYmVlbiBtb3ZlZCB0byBleHRyYXMuTW92aWVDbGlwLCBwbGVhc2UgdXNlIGV4dHJhcy5Nb3ZpZUNsaXAgZnJvbSBub3cgb24uJyk7XG4gICAgICAgICAgICByZXR1cm4gZXh0cmFzLk1vdmllQ2xpcDtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBAY2xhc3NcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBuYW1lIFRpbGluZ1Nwcml0ZVxuICAgICAqIEBtZW1iZXJvZiBQSVhJXG4gICAgICogQHNlZSBQSVhJLmV4dHJhcy5UaWxpbmdTcHJpdGVcbiAgICAgKiBAZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDMuMC4wXG4gICAgICovXG4gICAgVGlsaW5nU3ByaXRlOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24oKVxuICAgICAgICB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ1RoZSBUaWxpbmdTcHJpdGUgY2xhc3MgaGFzIGJlZW4gbW92ZWQgdG8gZXh0cmFzLlRpbGluZ1Nwcml0ZSwgcGxlYXNlIHVzZSBleHRyYXMuVGlsaW5nU3ByaXRlIGZyb20gbm93IG9uLicpO1xuICAgICAgICAgICAgcmV0dXJuIGV4dHJhcy5UaWxpbmdTcHJpdGU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQGNsYXNzXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAbmFtZSBCaXRtYXBUZXh0XG4gICAgICogQG1lbWJlcm9mIFBJWElcbiAgICAgKiBAc2VlIFBJWEkuZXh0cmFzLkJpdG1hcFRleHRcbiAgICAgKiBAZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDMuMC4wXG4gICAgICovXG4gICAgQml0bWFwVGV4dDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uKClcbiAgICAgICAge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKCdUaGUgQml0bWFwVGV4dCBjbGFzcyBoYXMgYmVlbiBtb3ZlZCB0byBleHRyYXMuQml0bWFwVGV4dCwgcGxlYXNlIHVzZSBleHRyYXMuQml0bWFwVGV4dCBmcm9tIG5vdyBvbi4nKTtcbiAgICAgICAgICAgIHJldHVybiBleHRyYXMuQml0bWFwVGV4dDtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBAY2xhc3NcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBuYW1lIGJsZW5kTW9kZXNcbiAgICAgKiBAbWVtYmVyb2YgUElYSVxuICAgICAqIEBzZWUgUElYSS5CTEVORF9NT0RFU1xuICAgICAqIEBkZXByZWNhdGVkIHNpbmNlIHZlcnNpb24gMy4wLjBcbiAgICAgKi9cbiAgICBibGVuZE1vZGVzOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24oKVxuICAgICAgICB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ1RoZSBibGVuZE1vZGVzIGhhcyBiZWVuIG1vdmVkIHRvIEJMRU5EX01PREVTLCBwbGVhc2UgdXNlIEJMRU5EX01PREVTIGZyb20gbm93IG9uLicpO1xuICAgICAgICAgICAgcmV0dXJuIGNvcmUuQkxFTkRfTU9ERVM7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQGNsYXNzXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAbmFtZSBzY2FsZU1vZGVzXG4gICAgICogQG1lbWJlcm9mIFBJWElcbiAgICAgKiBAc2VlIFBJWEkuU0NBTEVfTU9ERVNcbiAgICAgKiBAZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDMuMC4wXG4gICAgICovXG4gICAgc2NhbGVNb2Rlczoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uKClcbiAgICAgICAge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKCdUaGUgc2NhbGVNb2RlcyBoYXMgYmVlbiBtb3ZlZCB0byBTQ0FMRV9NT0RFUywgcGxlYXNlIHVzZSBTQ0FMRV9NT0RFUyBmcm9tIG5vdyBvbi4nKTtcbiAgICAgICAgICAgIHJldHVybiBjb3JlLlNDQUxFX01PREVTO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIEBjbGFzc1xuICAgICAqIEBwcml2YXRlXG4gICAgICogQG5hbWUgQmFzZVRleHR1cmVDYWNoZVxuICAgICAqIEBtZW1iZXJvZiBQSVhJXG4gICAgICogQHNlZSBQSVhJLnV0aWxzLkJhc2VUZXh0dXJlQ2FjaGVcbiAgICAgKiBAZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDMuMC4wXG4gICAgICovXG4gICAgQmFzZVRleHR1cmVDYWNoZToge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignVGhlIEJhc2VUZXh0dXJlQ2FjaGUgY2xhc3MgaGFzIGJlZW4gbW92ZWQgdG8gdXRpbHMuQmFzZVRleHR1cmVDYWNoZSwgcGxlYXNlIHVzZSB1dGlscy5CYXNlVGV4dHVyZUNhY2hlIGZyb20gbm93IG9uLicpO1xuICAgICAgICAgICAgcmV0dXJuIGNvcmUudXRpbHMuQmFzZVRleHR1cmVDYWNoZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBAY2xhc3NcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBuYW1lIFRleHR1cmVDYWNoZVxuICAgICAqIEBtZW1iZXJvZiBQSVhJXG4gICAgICogQHNlZSBQSVhJLnV0aWxzLlRleHR1cmVDYWNoZVxuICAgICAqIEBkZXByZWNhdGVkIHNpbmNlIHZlcnNpb24gMy4wLjBcbiAgICAgKi9cbiAgICBUZXh0dXJlQ2FjaGU6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ1RoZSBUZXh0dXJlQ2FjaGUgY2xhc3MgaGFzIGJlZW4gbW92ZWQgdG8gdXRpbHMuVGV4dHVyZUNhY2hlLCBwbGVhc2UgdXNlIHV0aWxzLlRleHR1cmVDYWNoZSBmcm9tIG5vdyBvbi4nKTtcbiAgICAgICAgICAgIHJldHVybiBjb3JlLnV0aWxzLlRleHR1cmVDYWNoZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBAbmFtZXNwYWNlXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAbmFtZSBtYXRoXG4gICAgICogQG1lbWJlcm9mIFBJWElcbiAgICAgKiBAc2VlIFBJWElcbiAgICAgKiBAZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDMuMC42XG4gICAgICovXG4gICAgbWF0aDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignVGhlIG1hdGggbmFtZXNwYWNlIGlzIGRlcHJlY2F0ZWQsIHBsZWFzZSBhY2Nlc3MgbWVtYmVycyBhbHJlYWR5IGFjY2Vzc2libGUgb24gUElYSS4nKTtcbiAgICAgICAgICAgIHJldHVybiBjb3JlO1xuICAgICAgICB9XG4gICAgfVxufSk7XG5cbi8qKlxuICogQG1ldGhvZFxuICogQHByaXZhdGVcbiAqIEBuYW1lIFBJWEkuU3ByaXRlI3NldFRleHR1cmVcbiAqIEBzZWUgUElYSS5TcHJpdGUjdGV4dHVyZVxuICogQGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiAzLjAuMFxuICovXG5jb3JlLlNwcml0ZS5wcm90b3R5cGUuc2V0VGV4dHVyZSA9IGZ1bmN0aW9uKHRleHR1cmUpXG57XG4gICAgdGhpcy50ZXh0dXJlID0gdGV4dHVyZTtcbiAgICBjb25zb2xlLndhcm4oJ3NldFRleHR1cmUgaXMgbm93IGRlcHJlY2F0ZWQsIHBsZWFzZSB1c2UgdGhlIHRleHR1cmUgcHJvcGVydHksIGUuZyA6IHNwcml0ZS50ZXh0dXJlID0gdGV4dHVyZTsnKTtcbn07XG5cbi8qKlxuICogQG1ldGhvZFxuICogQG5hbWUgUElYSS5leHRyYXMuQml0bWFwVGV4dCNzZXRUZXh0XG4gKiBAc2VlIFBJWEkuZXh0cmFzLkJpdG1hcFRleHQjdGV4dFxuICogQGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiAzLjAuMFxuICovXG5leHRyYXMuQml0bWFwVGV4dC5wcm90b3R5cGUuc2V0VGV4dCA9IGZ1bmN0aW9uKHRleHQpXG57XG4gICAgdGhpcy50ZXh0ID0gdGV4dDtcbiAgICBjb25zb2xlLndhcm4oJ3NldFRleHQgaXMgbm93IGRlcHJlY2F0ZWQsIHBsZWFzZSB1c2UgdGhlIHRleHQgcHJvcGVydHksIGUuZyA6IG15Qml0bWFwVGV4dC50ZXh0ID0gXFwnbXkgdGV4dFxcJzsnKTtcbn07XG5cbi8qKlxuICogQG1ldGhvZFxuICogQG5hbWUgUElYSS5UZXh0I3NldFRleHRcbiAqIEBzZWUgUElYSS5UZXh0I3RleHRcbiAqIEBkZXByZWNhdGVkIHNpbmNlIHZlcnNpb24gMy4wLjBcbiAqL1xuY29yZS5UZXh0LnByb3RvdHlwZS5zZXRUZXh0ID0gZnVuY3Rpb24odGV4dClcbntcbiAgICB0aGlzLnRleHQgPSB0ZXh0O1xuICAgIGNvbnNvbGUud2Fybignc2V0VGV4dCBpcyBub3cgZGVwcmVjYXRlZCwgcGxlYXNlIHVzZSB0aGUgdGV4dCBwcm9wZXJ0eSwgZS5nIDogbXlUZXh0LnRleHQgPSBcXCdteSB0ZXh0XFwnOycpO1xufTtcblxuLyoqXG4gKiBAbWV0aG9kXG4gKiBAbmFtZSBQSVhJLlRleHQjc2V0U3R5bGVcbiAqIEBzZWUgUElYSS5UZXh0I3N0eWxlXG4gKiBAZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDMuMC4wXG4gKi9cbmNvcmUuVGV4dC5wcm90b3R5cGUuc2V0U3R5bGUgPSBmdW5jdGlvbihzdHlsZSlcbntcbiAgICB0aGlzLnN0eWxlID0gc3R5bGU7XG4gICAgY29uc29sZS53YXJuKCdzZXRTdHlsZSBpcyBub3cgZGVwcmVjYXRlZCwgcGxlYXNlIHVzZSB0aGUgc3R5bGUgcHJvcGVydHksIGUuZyA6IG15VGV4dC5zdHlsZSA9IHN0eWxlOycpO1xufTtcblxuLyoqXG4gKiBAbWV0aG9kXG4gKiBAbmFtZSBQSVhJLlRleHR1cmUjc2V0RnJhbWVcbiAqIEBzZWUgUElYSS5UZXh0dXJlI3NldEZyYW1lXG4gKiBAZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDMuMC4wXG4gKi9cbmNvcmUuVGV4dHVyZS5wcm90b3R5cGUuc2V0RnJhbWUgPSBmdW5jdGlvbihmcmFtZSlcbntcbiAgICB0aGlzLmZyYW1lID0gZnJhbWU7XG4gICAgY29uc29sZS53YXJuKCdzZXRGcmFtZSBpcyBub3cgZGVwcmVjYXRlZCwgcGxlYXNlIHVzZSB0aGUgZnJhbWUgcHJvcGVydHksIGUuZyA6IG15VGV4dHVyZS5mcmFtZSA9IGZyYW1lOycpO1xufTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoZmlsdGVycywge1xuXG4gICAgLyoqXG4gICAgICogQGNsYXNzXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAbmFtZSBQSVhJLmZpbHRlcnMuQWJzdHJhY3RGaWx0ZXJcbiAgICAgKiBAc2VlIFBJWEkuQWJzdHJhY3RGaWx0ZXJcbiAgICAgKiBAZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDMuMC42XG4gICAgICovXG4gICAgQWJzdHJhY3RGaWx0ZXI6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbigpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignZmlsdGVycy5BYnN0cmFjdEZpbHRlciBpcyBhbiB1bmRvY3VtZW50ZWQgYWxpYXMsIHBsZWFzZSB1c2UgQWJzdHJhY3RGaWx0ZXIgZnJvbSBub3cgb24uJyk7XG4gICAgICAgICAgICByZXR1cm4gY29yZS5BYnN0cmFjdEZpbHRlcjtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBAY2xhc3NcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBuYW1lIFBJWEkuZmlsdGVycy5GWEFBRmlsdGVyXG4gICAgICogQHNlZSBQSVhJLkZYQUFGaWx0ZXJcbiAgICAgKiBAZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDMuMC42XG4gICAgICovXG4gICAgRlhBQUZpbHRlcjoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uKClcbiAgICAgICAge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKCdmaWx0ZXJzLkZYQUFGaWx0ZXIgaXMgYW4gdW5kb2N1bWVudGVkIGFsaWFzLCBwbGVhc2UgdXNlIEZYQUFGaWx0ZXIgZnJvbSBub3cgb24uJyk7XG4gICAgICAgICAgICByZXR1cm4gY29yZS5GWEFBRmlsdGVyO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIEBjbGFzc1xuICAgICAqIEBwcml2YXRlXG4gICAgICogQG5hbWUgUElYSS5maWx0ZXJzLlNwcml0ZU1hc2tGaWx0ZXJcbiAgICAgKiBAc2VlIFBJWEkuU3ByaXRlTWFza0ZpbHRlclxuICAgICAqIEBkZXByZWNhdGVkIHNpbmNlIHZlcnNpb24gMy4wLjZcbiAgICAgKi9cbiAgICBTcHJpdGVNYXNrRmlsdGVyOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24oKVxuICAgICAgICB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ2ZpbHRlcnMuU3ByaXRlTWFza0ZpbHRlciBpcyBhbiB1bmRvY3VtZW50ZWQgYWxpYXMsIHBsZWFzZSB1c2UgU3ByaXRlTWFza0ZpbHRlciBmcm9tIG5vdyBvbi4nKTtcbiAgICAgICAgICAgIHJldHVybiBjb3JlLlNwcml0ZU1hc2tGaWx0ZXI7XG4gICAgICAgIH1cbiAgICB9XG59KTtcblxuLyoqXG4gKiBAbWV0aG9kXG4gKiBAbmFtZSBQSVhJLnV0aWxzLnV1aWRcbiAqIEBzZWUgUElYSS51dGlscy51aWRcbiAqIEBkZXByZWNhdGVkIHNpbmNlIHZlcnNpb24gMy4wLjZcbiAqL1xuY29yZS51dGlscy51dWlkID0gZnVuY3Rpb24gKClcbntcbiAgICBjb25zb2xlLndhcm4oJ3V0aWxzLnV1aWQoKSBpcyBkZXByZWNhdGVkLCBwbGVhc2UgdXNlIHV0aWxzLnVpZCgpIGZyb20gbm93IG9uLicpO1xuICAgIHJldHVybiBjb3JlLnV0aWxzLnVpZCgpO1xufTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vY29yZScpO1xuXG4vKipcbiAqIEEgQml0bWFwVGV4dCBvYmplY3Qgd2lsbCBjcmVhdGUgYSBsaW5lIG9yIG11bHRpcGxlIGxpbmVzIG9mIHRleHQgdXNpbmcgYml0bWFwIGZvbnQuIFRvXG4gKiBzcGxpdCBhIGxpbmUgeW91IGNhbiB1c2UgJ1xcbicsICdcXHInIG9yICdcXHJcXG4nIGluIHlvdXIgc3RyaW5nLiBZb3UgY2FuIGdlbmVyYXRlIHRoZSBmbnQgZmlsZXMgdXNpbmc6XG4gKlxuICogQSBCaXRtYXBUZXh0IGNhbiBvbmx5IGJlIGNyZWF0ZWQgd2hlbiB0aGUgZm9udCBpcyBsb2FkZWRcbiAqXG4gKiBgYGBqc1xuICogLy8gaW4gdGhpcyBjYXNlIHRoZSBmb250IGlzIGluIGEgZmlsZSBjYWxsZWQgJ2Rlc3lyZWwuZm50J1xuICogdmFyIGJpdG1hcFRleHQgPSBuZXcgUElYSS5leHRyYXMuQml0bWFwVGV4dChcInRleHQgdXNpbmcgYSBmYW5jeSBmb250IVwiLCB7Zm9udDogXCIzNXB4IERlc3lyZWxcIiwgYWxpZ246IFwicmlnaHRcIn0pO1xuICogYGBgXG4gKlxuICpcbiAqIGh0dHA6Ly93d3cuYW5nZWxjb2RlLmNvbS9wcm9kdWN0cy9ibWZvbnQvIGZvciB3aW5kb3dzIG9yXG4gKiBodHRwOi8vd3d3LmJtZ2x5cGguY29tLyBmb3IgbWFjLlxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5Db250YWluZXJcbiAqIEBtZW1iZXJvZiBQSVhJLmV4dHJhc1xuICogQHBhcmFtIHRleHQge3N0cmluZ30gVGhlIGNvcHkgdGhhdCB5b3Ugd291bGQgbGlrZSB0aGUgdGV4dCB0byBkaXNwbGF5XG4gKiBAcGFyYW0gc3R5bGUge29iamVjdH0gVGhlIHN0eWxlIHBhcmFtZXRlcnNcbiAqIEBwYXJhbSBzdHlsZS5mb250IHtzdHJpbmd8b2JqZWN0fSBUaGUgZm9udCBkZXNjcmlwdG9yIGZvciB0aGUgb2JqZWN0LCBjYW4gYmUgcGFzc2VkIGFzIGEgc3RyaW5nIG9mIGZvcm1cbiAqICAgICAgXCIyNHB4IEZvbnROYW1lXCIgb3IgXCJGb250TmFtZVwiIG9yIGFzIGFuIG9iamVjdCB3aXRoIGV4cGxpY2l0IG5hbWUvc2l6ZSBwcm9wZXJ0aWVzLlxuICogQHBhcmFtIFtzdHlsZS5mb250Lm5hbWVdIHtzdHJpbmd9IFRoZSBiaXRtYXAgZm9udCBpZFxuICogQHBhcmFtIFtzdHlsZS5mb250LnNpemVdIHtudW1iZXJ9IFRoZSBzaXplIG9mIHRoZSBmb250IGluIHBpeGVscywgZS5nLiAyNFxuICogQHBhcmFtIFtzdHlsZS5hbGlnbj0nbGVmdCddIHtzdHJpbmd9IEFsaWdubWVudCBmb3IgbXVsdGlsaW5lIHRleHQgKCdsZWZ0JywgJ2NlbnRlcicgb3IgJ3JpZ2h0JyksIGRvZXMgbm90IGFmZmVjdFxuICogICAgICBzaW5nbGUgbGluZSB0ZXh0XG4gKiBAcGFyYW0gW3N0eWxlLnRpbnQ9MHhGRkZGRkZdIHtudW1iZXJ9IFRoZSB0aW50IGNvbG9yXG4gKi9cbmZ1bmN0aW9uIEJpdG1hcFRleHQodGV4dCwgc3R5bGUpXG57XG4gICAgY29yZS5Db250YWluZXIuY2FsbCh0aGlzKTtcblxuICAgIHN0eWxlID0gc3R5bGUgfHwge307XG5cbiAgICAvKipcbiAgICAgKiBUaGUgd2lkdGggb2YgdGhlIG92ZXJhbGwgdGV4dCwgZGlmZmVyZW50IGZyb20gZm9udFNpemUsXG4gICAgICogd2hpY2ggaXMgZGVmaW5lZCBpbiB0aGUgc3R5bGUgb2JqZWN0XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQHJlYWRPbmx5XG4gICAgICovXG4gICAgdGhpcy50ZXh0V2lkdGggPSAwO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGhlaWdodCBvZiB0aGUgb3ZlcmFsbCB0ZXh0LCBkaWZmZXJlbnQgZnJvbSBmb250U2l6ZSxcbiAgICAgKiB3aGljaCBpcyBkZWZpbmVkIGluIHRoZSBzdHlsZSBvYmplY3RcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAcmVhZE9ubHlcbiAgICAgKi9cbiAgICB0aGlzLnRleHRIZWlnaHQgPSAwO1xuXG4gICAgLyoqXG4gICAgICogUHJpdmF0ZSB0cmFja2VyIGZvciB0aGUgbGV0dGVyIHNwcml0ZSBwb29sLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5TcHJpdGVbXX1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX2dseXBocyA9IFtdO1xuXG4gICAgLyoqXG4gICAgICogUHJpdmF0ZSB0cmFja2VyIGZvciB0aGUgY3VycmVudCBzdHlsZS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge29iamVjdH1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX2ZvbnQgPSB7XG4gICAgICAgIHRpbnQ6IHN0eWxlLnRpbnQgIT09IHVuZGVmaW5lZCA/IHN0eWxlLnRpbnQgOiAweEZGRkZGRixcbiAgICAgICAgYWxpZ246IHN0eWxlLmFsaWduIHx8ICdsZWZ0JyxcbiAgICAgICAgbmFtZTogbnVsbCxcbiAgICAgICAgc2l6ZTogMFxuICAgIH07XG5cbiAgICAvKipcbiAgICAgKiBQcml2YXRlIHRyYWNrZXIgZm9yIHRoZSBjdXJyZW50IGZvbnQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtvYmplY3R9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLmZvbnQgPSBzdHlsZS5mb250OyAvLyBydW4gZm9udCBzZXR0ZXJcblxuICAgIC8qKlxuICAgICAqIFByaXZhdGUgdHJhY2tlciBmb3IgdGhlIGN1cnJlbnQgdGV4dC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge3N0cmluZ31cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX3RleHQgPSB0ZXh0O1xuXG4gICAgLyoqXG4gICAgICogVGhlIG1heCB3aWR0aCBvZiB0aGlzIGJpdG1hcCB0ZXh0IGluIHBpeGVscy4gSWYgdGhlIHRleHQgcHJvdmlkZWQgaXMgbG9uZ2VyIHRoYW4gdGhlIHZhbHVlIHByb3ZpZGVkLCBsaW5lIGJyZWFrcyB3aWxsIGJlIGF1dG9tYXRpY2FsbHkgaW5zZXJ0ZWQgaW4gdGhlIGxhc3Qgd2hpdGVzcGFjZS5cbiAgICAgKiBEaXNhYmxlIGJ5IHNldHRpbmcgdmFsdWUgdG8gMFxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMubWF4V2lkdGggPSAwO1xuXG4gICAgLyoqXG4gICAgICogVGhlIG1heCBsaW5lIGhlaWdodC4gVGhpcyBpcyB1c2VmdWwgd2hlbiB0cnlpbmcgdG8gdXNlIHRoZSB0b3RhbCBoZWlnaHQgb2YgdGhlIFRleHQsIGllOiB3aGVuIHRyeWluZyB0byB2ZXJ0aWNhbGx5IGFsaWduLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMubWF4TGluZUhlaWdodCA9IDA7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgZGlydHkgc3RhdGUgb2YgdGhpcyBvYmplY3QuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqL1xuICAgIHRoaXMuZGlydHkgPSBmYWxzZTtcblxuICAgIHRoaXMudXBkYXRlVGV4dCgpO1xufVxuXG4vLyBjb25zdHJ1Y3RvclxuQml0bWFwVGV4dC5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuQ29udGFpbmVyLnByb3RvdHlwZSk7XG5CaXRtYXBUZXh0LnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IEJpdG1hcFRleHQ7XG5tb2R1bGUuZXhwb3J0cyA9IEJpdG1hcFRleHQ7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKEJpdG1hcFRleHQucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogVGhlIHRpbnQgb2YgdGhlIEJpdG1hcFRleHQgb2JqZWN0XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZXh0cmFzLkJpdG1hcFRleHQjXG4gICAgICovXG4gICAgdGludDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9mb250LnRpbnQ7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLl9mb250LnRpbnQgPSAodHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJyAmJiB2YWx1ZSA+PSAwKSA/IHZhbHVlIDogMHhGRkZGRkY7XG5cbiAgICAgICAgICAgIHRoaXMuZGlydHkgPSB0cnVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFRoZSBhbGlnbm1lbnQgb2YgdGhlIEJpdG1hcFRleHQgb2JqZWN0XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtzdHJpbmd9XG4gICAgICogQGRlZmF1bHQgJ2xlZnQnXG4gICAgICogQG1lbWJlcm9mIFBJWEkuZXh0cmFzLkJpdG1hcFRleHQjXG4gICAgICovXG4gICAgYWxpZ246IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fZm9udC5hbGlnbjtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuX2ZvbnQuYWxpZ24gPSB2YWx1ZSB8fCAnbGVmdCc7XG5cbiAgICAgICAgICAgIHRoaXMuZGlydHkgPSB0cnVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFRoZSBmb250IGRlc2NyaXB0b3Igb2YgdGhlIEJpdG1hcFRleHQgb2JqZWN0XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtGb250fVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmV4dHJhcy5CaXRtYXBUZXh0I1xuICAgICAqL1xuICAgIGZvbnQ6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fZm9udDtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGlmICghdmFsdWUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICAgICAgdmFsdWUgPSB2YWx1ZS5zcGxpdCgnICcpO1xuXG4gICAgICAgICAgICAgICAgdGhpcy5fZm9udC5uYW1lID0gdmFsdWUubGVuZ3RoID09PSAxID8gdmFsdWVbMF0gOiB2YWx1ZS5zbGljZSgxKS5qb2luKCcgJyk7XG4gICAgICAgICAgICAgICAgdGhpcy5fZm9udC5zaXplID0gdmFsdWUubGVuZ3RoID49IDIgPyBwYXJzZUludCh2YWx1ZVswXSwgMTApIDogQml0bWFwVGV4dC5mb250c1t0aGlzLl9mb250Lm5hbWVdLnNpemU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9mb250Lm5hbWUgPSB2YWx1ZS5uYW1lO1xuICAgICAgICAgICAgICAgIHRoaXMuX2ZvbnQuc2l6ZSA9IHR5cGVvZiB2YWx1ZS5zaXplID09PSAnbnVtYmVyJyA/IHZhbHVlLnNpemUgOiBwYXJzZUludCh2YWx1ZS5zaXplLCAxMCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuZGlydHkgPSB0cnVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFRoZSB0ZXh0IG9mIHRoZSBCaXRtYXBUZXh0IG9iamVjdFxuICAgICAqXG4gICAgICogQG1lbWJlciB7c3RyaW5nfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmV4dHJhcy5CaXRtYXBUZXh0I1xuICAgICAqL1xuICAgIHRleHQ6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fdGV4dDtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHZhbHVlID0gdmFsdWUudG9TdHJpbmcoKSB8fCAnICc7XG4gICAgICAgICAgICBpZiAodGhpcy5fdGV4dCA9PT0gdmFsdWUpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5fdGV4dCA9IHZhbHVlO1xuICAgICAgICAgICAgdGhpcy5kaXJ0eSA9IHRydWU7XG4gICAgICAgIH1cbiAgICB9XG59KTtcblxuLyoqXG4gKiBSZW5kZXJzIHRleHQgYW5kIHVwZGF0ZXMgaXQgd2hlbiBuZWVkZWRcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5CaXRtYXBUZXh0LnByb3RvdHlwZS51cGRhdGVUZXh0ID0gZnVuY3Rpb24gKClcbntcbiAgICB2YXIgZGF0YSA9IEJpdG1hcFRleHQuZm9udHNbdGhpcy5fZm9udC5uYW1lXTtcbiAgICB2YXIgcG9zID0gbmV3IGNvcmUuUG9pbnQoKTtcbiAgICB2YXIgcHJldkNoYXJDb2RlID0gbnVsbDtcbiAgICB2YXIgY2hhcnMgPSBbXTtcbiAgICB2YXIgbGFzdExpbmVXaWR0aCA9IDA7XG4gICAgdmFyIG1heExpbmVXaWR0aCA9IDA7XG4gICAgdmFyIGxpbmVXaWR0aHMgPSBbXTtcbiAgICB2YXIgbGluZSA9IDA7XG4gICAgdmFyIHNjYWxlID0gdGhpcy5fZm9udC5zaXplIC8gZGF0YS5zaXplO1xuICAgIHZhciBsYXN0U3BhY2UgPSAtMTtcbiAgICB2YXIgbWF4TGluZUhlaWdodCA9IDA7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMudGV4dC5sZW5ndGg7IGkrKylcbiAgICB7XG4gICAgICAgIHZhciBjaGFyQ29kZSA9IHRoaXMudGV4dC5jaGFyQ29kZUF0KGkpO1xuICAgICAgICBsYXN0U3BhY2UgPSAvKFxccykvLnRlc3QodGhpcy50ZXh0LmNoYXJBdChpKSkgPyBpIDogbGFzdFNwYWNlO1xuXG4gICAgICAgIGlmICgvKD86XFxyXFxufFxccnxcXG4pLy50ZXN0KHRoaXMudGV4dC5jaGFyQXQoaSkpKVxuICAgICAgICB7XG4gICAgICAgICAgICBsaW5lV2lkdGhzLnB1c2gobGFzdExpbmVXaWR0aCk7XG4gICAgICAgICAgICBtYXhMaW5lV2lkdGggPSBNYXRoLm1heChtYXhMaW5lV2lkdGgsIGxhc3RMaW5lV2lkdGgpO1xuICAgICAgICAgICAgbGluZSsrO1xuXG4gICAgICAgICAgICBwb3MueCA9IDA7XG4gICAgICAgICAgICBwb3MueSArPSBkYXRhLmxpbmVIZWlnaHQ7XG4gICAgICAgICAgICBwcmV2Q2hhckNvZGUgPSBudWxsO1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAobGFzdFNwYWNlICE9PSAtMSAmJiB0aGlzLm1heFdpZHRoID4gMCAmJiBwb3MueCAqIHNjYWxlID4gdGhpcy5tYXhXaWR0aClcbiAgICAgICAge1xuICAgICAgICAgICAgY29yZS51dGlscy5yZW1vdmVJdGVtcyhjaGFycywgbGFzdFNwYWNlLCBpIC0gbGFzdFNwYWNlKTtcbiAgICAgICAgICAgIGkgPSBsYXN0U3BhY2U7XG4gICAgICAgICAgICBsYXN0U3BhY2UgPSAtMTtcblxuICAgICAgICAgICAgbGluZVdpZHRocy5wdXNoKGxhc3RMaW5lV2lkdGgpO1xuICAgICAgICAgICAgbWF4TGluZVdpZHRoID0gTWF0aC5tYXgobWF4TGluZVdpZHRoLCBsYXN0TGluZVdpZHRoKTtcbiAgICAgICAgICAgIGxpbmUrKztcblxuICAgICAgICAgICAgcG9zLnggPSAwO1xuICAgICAgICAgICAgcG9zLnkgKz0gZGF0YS5saW5lSGVpZ2h0O1xuICAgICAgICAgICAgcHJldkNoYXJDb2RlID0gbnVsbDtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGNoYXJEYXRhID0gZGF0YS5jaGFyc1tjaGFyQ29kZV07XG5cbiAgICAgICAgaWYgKCFjaGFyRGF0YSlcbiAgICAgICAge1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAocHJldkNoYXJDb2RlICYmIGNoYXJEYXRhLmtlcm5pbmdbcHJldkNoYXJDb2RlXSlcbiAgICAgICAge1xuICAgICAgICAgICAgcG9zLnggKz0gY2hhckRhdGEua2VybmluZ1twcmV2Q2hhckNvZGVdO1xuICAgICAgICB9XG5cbiAgICAgICAgY2hhcnMucHVzaCh7dGV4dHVyZTpjaGFyRGF0YS50ZXh0dXJlLCBsaW5lOiBsaW5lLCBjaGFyQ29kZTogY2hhckNvZGUsIHBvc2l0aW9uOiBuZXcgY29yZS5Qb2ludChwb3MueCArIGNoYXJEYXRhLnhPZmZzZXQsIHBvcy55ICsgY2hhckRhdGEueU9mZnNldCl9KTtcbiAgICAgICAgbGFzdExpbmVXaWR0aCA9IHBvcy54ICsgKGNoYXJEYXRhLnRleHR1cmUud2lkdGggKyBjaGFyRGF0YS54T2Zmc2V0KTtcbiAgICAgICAgcG9zLnggKz0gY2hhckRhdGEueEFkdmFuY2U7XG4gICAgICAgIG1heExpbmVIZWlnaHQgPSBNYXRoLm1heChtYXhMaW5lSGVpZ2h0LCAoY2hhckRhdGEueU9mZnNldCArIGNoYXJEYXRhLnRleHR1cmUuaGVpZ2h0KSk7XG4gICAgICAgIHByZXZDaGFyQ29kZSA9IGNoYXJDb2RlO1xuICAgIH1cblxuICAgIGxpbmVXaWR0aHMucHVzaChsYXN0TGluZVdpZHRoKTtcbiAgICBtYXhMaW5lV2lkdGggPSBNYXRoLm1heChtYXhMaW5lV2lkdGgsIGxhc3RMaW5lV2lkdGgpO1xuXG4gICAgdmFyIGxpbmVBbGlnbk9mZnNldHMgPSBbXTtcblxuICAgIGZvciAoaSA9IDA7IGkgPD0gbGluZTsgaSsrKVxuICAgIHtcbiAgICAgICAgdmFyIGFsaWduT2Zmc2V0ID0gMDtcblxuICAgICAgICBpZiAodGhpcy5fZm9udC5hbGlnbiA9PT0gJ3JpZ2h0JylcbiAgICAgICAge1xuICAgICAgICAgICAgYWxpZ25PZmZzZXQgPSBtYXhMaW5lV2lkdGggLSBsaW5lV2lkdGhzW2ldO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHRoaXMuX2ZvbnQuYWxpZ24gPT09ICdjZW50ZXInKVxuICAgICAgICB7XG4gICAgICAgICAgICBhbGlnbk9mZnNldCA9IChtYXhMaW5lV2lkdGggLSBsaW5lV2lkdGhzW2ldKSAvIDI7XG4gICAgICAgIH1cblxuICAgICAgICBsaW5lQWxpZ25PZmZzZXRzLnB1c2goYWxpZ25PZmZzZXQpO1xuICAgIH1cblxuICAgIHZhciBsZW5DaGFycyA9IGNoYXJzLmxlbmd0aDtcbiAgICB2YXIgdGludCA9IHRoaXMudGludDtcblxuICAgIGZvciAoaSA9IDA7IGkgPCBsZW5DaGFyczsgaSsrKVxuICAgIHtcbiAgICAgICAgdmFyIGMgPSB0aGlzLl9nbHlwaHNbaV07IC8vIGdldCB0aGUgbmV4dCBnbHlwaCBzcHJpdGVcblxuICAgICAgICBpZiAoYylcbiAgICAgICAge1xuICAgICAgICAgICAgYy50ZXh0dXJlID0gY2hhcnNbaV0udGV4dHVyZTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgIHtcbiAgICAgICAgICAgIGMgPSBuZXcgY29yZS5TcHJpdGUoY2hhcnNbaV0udGV4dHVyZSk7XG4gICAgICAgICAgICB0aGlzLl9nbHlwaHMucHVzaChjKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGMucG9zaXRpb24ueCA9IChjaGFyc1tpXS5wb3NpdGlvbi54ICsgbGluZUFsaWduT2Zmc2V0c1tjaGFyc1tpXS5saW5lXSkgKiBzY2FsZTtcbiAgICAgICAgYy5wb3NpdGlvbi55ID0gY2hhcnNbaV0ucG9zaXRpb24ueSAqIHNjYWxlO1xuICAgICAgICBjLnNjYWxlLnggPSBjLnNjYWxlLnkgPSBzY2FsZTtcbiAgICAgICAgYy50aW50ID0gdGludDtcblxuICAgICAgICBpZiAoIWMucGFyZW50KVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmFkZENoaWxkKGMpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gcmVtb3ZlIHVubmVjZXNzYXJ5IGNoaWxkcmVuLlxuICAgIGZvciAoaSA9IGxlbkNoYXJzOyBpIDwgdGhpcy5fZ2x5cGhzLmxlbmd0aDsgKytpKVxuICAgIHtcbiAgICAgICAgdGhpcy5yZW1vdmVDaGlsZCh0aGlzLl9nbHlwaHNbaV0pO1xuICAgIH1cblxuICAgIHRoaXMudGV4dFdpZHRoID0gbWF4TGluZVdpZHRoICogc2NhbGU7XG4gICAgdGhpcy50ZXh0SGVpZ2h0ID0gKHBvcy55ICsgZGF0YS5saW5lSGVpZ2h0KSAqIHNjYWxlO1xuICAgIHRoaXMubWF4TGluZUhlaWdodCA9IG1heExpbmVIZWlnaHQgKiBzY2FsZTtcbn07XG5cbi8qKlxuICogVXBkYXRlcyB0aGUgdHJhbnNmb3JtIG9mIHRoaXMgb2JqZWN0XG4gKlxuICogQHByaXZhdGVcbiAqL1xuQml0bWFwVGV4dC5wcm90b3R5cGUudXBkYXRlVHJhbnNmb3JtID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLnZhbGlkYXRlKCk7XG4gICAgdGhpcy5jb250YWluZXJVcGRhdGVUcmFuc2Zvcm0oKTtcbn07XG5cbi8qKlxuICogVmFsaWRhdGVzIHRleHQgYmVmb3JlIGNhbGxpbmcgcGFyZW50J3MgZ2V0TG9jYWxCb3VuZHNcbiAqXG4gKiBAcmV0dXJuIHtQSVhJLlJlY3RhbmdsZX0gVGhlIHJlY3Rhbmd1bGFyIGJvdW5kaW5nIGFyZWFcbiAqL1xuXG5CaXRtYXBUZXh0LnByb3RvdHlwZS5nZXRMb2NhbEJvdW5kcyA9IGZ1bmN0aW9uKClcbntcbiAgICB0aGlzLnZhbGlkYXRlKCk7XG4gICAgcmV0dXJuIGNvcmUuQ29udGFpbmVyLnByb3RvdHlwZS5nZXRMb2NhbEJvdW5kcy5jYWxsKHRoaXMpO1xufTtcblxuLyoqXG4gKiBVcGRhdGVzIHRleHQgd2hlbiBuZWVkZWRcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5CaXRtYXBUZXh0LnByb3RvdHlwZS52YWxpZGF0ZSA9IGZ1bmN0aW9uKClcbntcbiAgICBpZiAodGhpcy5kaXJ0eSlcbiAgICB7XG4gICAgICAgIHRoaXMudXBkYXRlVGV4dCgpO1xuICAgICAgICB0aGlzLmRpcnR5ID0gZmFsc2U7XG4gICAgfVxufTtcblxuQml0bWFwVGV4dC5mb250cyA9IHt9O1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi9jb3JlJyk7XG5cbi8qKlxuICogQSBNb3ZpZUNsaXAgaXMgYSBzaW1wbGUgd2F5IHRvIGRpc3BsYXkgYW4gYW5pbWF0aW9uIGRlcGljdGVkIGJ5IGEgbGlzdCBvZiB0ZXh0dXJlcy5cbiAqXG4gKiBgYGBqc1xuICogdmFyIGFsaWVuSW1hZ2VzID0gW1wiaW1hZ2Vfc2VxdWVuY2VfMDEucG5nXCIsXCJpbWFnZV9zZXF1ZW5jZV8wMi5wbmdcIixcImltYWdlX3NlcXVlbmNlXzAzLnBuZ1wiLFwiaW1hZ2Vfc2VxdWVuY2VfMDQucG5nXCJdO1xuICogdmFyIHRleHR1cmVBcnJheSA9IFtdO1xuICpcbiAqIGZvciAodmFyIGk9MDsgaSA8IDQ7IGkrKylcbiAqIHtcbiAqICAgICAgdmFyIHRleHR1cmUgPSBQSVhJLlRleHR1cmUuZnJvbUltYWdlKGFsaWVuSW1hZ2VzW2ldKTtcbiAqICAgICAgdGV4dHVyZUFycmF5LnB1c2godGV4dHVyZSk7XG4gKiB9O1xuICpcbiAqIHZhciBtYyA9IG5ldyBQSVhJLk1vdmllQ2xpcCh0ZXh0dXJlQXJyYXkpO1xuICogYGBgXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLlNwcml0ZVxuICogQG1lbWJlcm9mIFBJWEkuZXh0cmFzXG4gKiBAcGFyYW0gdGV4dHVyZXMge1BJWEkuVGV4dHVyZVtdfE9iamVjdFtdfSBhbiBhcnJheSBvZiB7QGxpbmsgUElYSS5UZXh0dXJlfSBvciBmcmFtZSBvYmplY3RzIHRoYXQgbWFrZSB1cCB0aGUgYW5pbWF0aW9uXG4gKiBAcGFyYW0gdGV4dHVyZXNbXS50ZXh0dXJlIHtQSVhJLlRleHR1cmV9IHRoZSB7QGxpbmsgUElYSS5UZXh0dXJlfSBvZiB0aGUgZnJhbWVcbiAqIEBwYXJhbSB0ZXh0dXJlc1tdLnRpbWUge251bWJlcn0gdGhlIGR1cmF0aW9uIG9mIHRoZSBmcmFtZSBpbiBtc1xuICovXG5mdW5jdGlvbiBNb3ZpZUNsaXAodGV4dHVyZXMpXG57XG4gICAgY29yZS5TcHJpdGUuY2FsbCh0aGlzLCB0ZXh0dXJlc1swXSBpbnN0YW5jZW9mIGNvcmUuVGV4dHVyZSA/IHRleHR1cmVzWzBdIDogdGV4dHVyZXNbMF0udGV4dHVyZSk7XG5cbiAgICAvKipcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX3RleHR1cmVzID0gbnVsbDtcblxuICAgIC8qKlxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fZHVyYXRpb25zID0gbnVsbDtcblxuICAgIHRoaXMudGV4dHVyZXMgPSB0ZXh0dXJlcztcblxuICAgIC8qKlxuICAgICAqIFRoZSBzcGVlZCB0aGF0IHRoZSBNb3ZpZUNsaXAgd2lsbCBwbGF5IGF0LiBIaWdoZXIgaXMgZmFzdGVyLCBsb3dlciBpcyBzbG93ZXJcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAxXG4gICAgICovXG4gICAgdGhpcy5hbmltYXRpb25TcGVlZCA9IDE7XG5cbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIG9yIG5vdCB0aGUgbW92aWUgY2xpcCByZXBlYXRzIGFmdGVyIHBsYXlpbmcuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqIEBkZWZhdWx0IHRydWVcbiAgICAgKi9cbiAgICB0aGlzLmxvb3AgPSB0cnVlO1xuXG4gICAgLyoqXG4gICAgICogRnVuY3Rpb24gdG8gY2FsbCB3aGVuIGEgTW92aWVDbGlwIGZpbmlzaGVzIHBsYXlpbmdcbiAgICAgKlxuICAgICAqIEBtZXRob2RcbiAgICAgKiBAbWVtYmVyb2YgUElYSS5leHRyYXMuTW92aWVDbGlwI1xuICAgICAqL1xuICAgIHRoaXMub25Db21wbGV0ZSA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBFbGFwc2VkIHRpbWUgc2luY2UgYW5pbWF0aW9uIGhhcyBiZWVuIHN0YXJ0ZWQsIHVzZWQgaW50ZXJuYWxseSB0byBkaXNwbGF5IGN1cnJlbnQgdGV4dHVyZVxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fY3VycmVudFRpbWUgPSAwO1xuXG4gICAgLyoqXG4gICAgICogSW5kaWNhdGVzIGlmIHRoZSBNb3ZpZUNsaXAgaXMgY3VycmVudGx5IHBsYXlpbmdcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICogQHJlYWRvbmx5XG4gICAgICovXG4gICAgdGhpcy5wbGF5aW5nID0gZmFsc2U7XG59XG5cbi8vIGNvbnN0cnVjdG9yXG5Nb3ZpZUNsaXAucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShjb3JlLlNwcml0ZS5wcm90b3R5cGUpO1xuTW92aWVDbGlwLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IE1vdmllQ2xpcDtcbm1vZHVsZS5leHBvcnRzID0gTW92aWVDbGlwO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhNb3ZpZUNsaXAucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogdG90YWxGcmFtZXMgaXMgdGhlIHRvdGFsIG51bWJlciBvZiBmcmFtZXMgaW4gdGhlIE1vdmllQ2xpcC4gVGhpcyBpcyB0aGUgc2FtZSBhcyBudW1iZXIgb2YgdGV4dHVyZXNcbiAgICAgKiBhc3NpZ25lZCB0byB0aGUgTW92aWVDbGlwLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmV4dHJhcy5Nb3ZpZUNsaXAjXG4gICAgICogQGRlZmF1bHQgMFxuICAgICAqIEByZWFkb25seVxuICAgICAqL1xuICAgIHRvdGFsRnJhbWVzOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24oKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fdGV4dHVyZXMubGVuZ3RoO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFRoZSBhcnJheSBvZiB0ZXh0dXJlcyB1c2VkIGZvciB0aGlzIE1vdmllQ2xpcFxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5UZXh0dXJlW119XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZXh0cmFzLk1vdmllQ2xpcCNcbiAgICAgKlxuICAgICAqL1xuICAgIHRleHR1cmVzOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3RleHR1cmVzO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgaWYodmFsdWVbMF0gaW5zdGFuY2VvZiBjb3JlLlRleHR1cmUpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdGhpcy5fdGV4dHVyZXMgPSB2YWx1ZTtcbiAgICAgICAgICAgICAgICB0aGlzLl9kdXJhdGlvbnMgPSBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHRoaXMuX3RleHR1cmVzID0gW107XG4gICAgICAgICAgICAgICAgdGhpcy5fZHVyYXRpb25zID0gW107XG4gICAgICAgICAgICAgICAgZm9yKHZhciBpID0gMDsgaSA8IHZhbHVlLmxlbmd0aDsgaSsrKVxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fdGV4dHVyZXMucHVzaCh2YWx1ZVtpXS50ZXh0dXJlKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fZHVyYXRpb25zLnB1c2godmFsdWVbaV0udGltZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICogVGhlIE1vdmllQ2xpcHMgY3VycmVudCBmcmFtZSBpbmRleFxuICAgICpcbiAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAqIEBtZW1iZXJvZiBQSVhJLmV4dHJhcy5Nb3ZpZUNsaXAjXG4gICAgKiBAcmVhZG9ubHlcbiAgICAqL1xuICAgIGN1cnJlbnRGcmFtZToge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHZhciBjdXJyZW50RnJhbWUgPSBNYXRoLmZsb29yKHRoaXMuX2N1cnJlbnRUaW1lKSAlIHRoaXMuX3RleHR1cmVzLmxlbmd0aDtcbiAgICAgICAgICAgIGlmIChjdXJyZW50RnJhbWUgPCAwKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGN1cnJlbnRGcmFtZSArPSB0aGlzLl90ZXh0dXJlcy5sZW5ndGg7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gY3VycmVudEZyYW1lO1xuICAgICAgICB9XG4gICAgfVxuXG59KTtcblxuLyoqXG4gKiBTdG9wcyB0aGUgTW92aWVDbGlwXG4gKlxuICovXG5Nb3ZpZUNsaXAucHJvdG90eXBlLnN0b3AgPSBmdW5jdGlvbiAoKVxue1xuICAgIGlmKCF0aGlzLnBsYXlpbmcpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5wbGF5aW5nID0gZmFsc2U7XG4gICAgY29yZS50aWNrZXIuc2hhcmVkLnJlbW92ZSh0aGlzLnVwZGF0ZSwgdGhpcyk7XG59O1xuXG4vKipcbiAqIFBsYXlzIHRoZSBNb3ZpZUNsaXBcbiAqXG4gKi9cbk1vdmllQ2xpcC5wcm90b3R5cGUucGxheSA9IGZ1bmN0aW9uICgpXG57XG4gICAgaWYodGhpcy5wbGF5aW5nKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMucGxheWluZyA9IHRydWU7XG4gICAgY29yZS50aWNrZXIuc2hhcmVkLmFkZCh0aGlzLnVwZGF0ZSwgdGhpcyk7XG59O1xuXG4vKipcbiAqIFN0b3BzIHRoZSBNb3ZpZUNsaXAgYW5kIGdvZXMgdG8gYSBzcGVjaWZpYyBmcmFtZVxuICpcbiAqIEBwYXJhbSBmcmFtZU51bWJlciB7bnVtYmVyfSBmcmFtZSBpbmRleCB0byBzdG9wIGF0XG4gKi9cbk1vdmllQ2xpcC5wcm90b3R5cGUuZ290b0FuZFN0b3AgPSBmdW5jdGlvbiAoZnJhbWVOdW1iZXIpXG57XG4gICAgdGhpcy5zdG9wKCk7XG5cbiAgICB0aGlzLl9jdXJyZW50VGltZSA9IGZyYW1lTnVtYmVyO1xuXG4gICAgdGhpcy5fdGV4dHVyZSA9IHRoaXMuX3RleHR1cmVzW3RoaXMuY3VycmVudEZyYW1lXTtcbn07XG5cbi8qKlxuICogR29lcyB0byBhIHNwZWNpZmljIGZyYW1lIGFuZCBiZWdpbnMgcGxheWluZyB0aGUgTW92aWVDbGlwXG4gKlxuICogQHBhcmFtIGZyYW1lTnVtYmVyIHtudW1iZXJ9IGZyYW1lIGluZGV4IHRvIHN0YXJ0IGF0XG4gKi9cbk1vdmllQ2xpcC5wcm90b3R5cGUuZ290b0FuZFBsYXkgPSBmdW5jdGlvbiAoZnJhbWVOdW1iZXIpXG57XG4gICAgdGhpcy5fY3VycmVudFRpbWUgPSBmcmFtZU51bWJlcjtcblxuICAgIHRoaXMucGxheSgpO1xufTtcblxuLypcbiAqIFVwZGF0ZXMgdGhlIG9iamVjdCB0cmFuc2Zvcm0gZm9yIHJlbmRlcmluZ1xuICogQHByaXZhdGVcbiAqL1xuTW92aWVDbGlwLnByb3RvdHlwZS51cGRhdGUgPSBmdW5jdGlvbiAoZGVsdGFUaW1lKVxue1xuICAgIHZhciBlbGFwc2VkID0gdGhpcy5hbmltYXRpb25TcGVlZCAqIGRlbHRhVGltZTtcblxuICAgIGlmICh0aGlzLl9kdXJhdGlvbnMgIT09IG51bGwpXG4gICAge1xuICAgICAgICB2YXIgbGFnID0gdGhpcy5fY3VycmVudFRpbWUgJSAxICogdGhpcy5fZHVyYXRpb25zW3RoaXMuY3VycmVudEZyYW1lXTtcblxuICAgICAgICBsYWcgKz0gZWxhcHNlZCAvIDYwICogMTAwMDtcblxuICAgICAgICB3aGlsZSAobGFnIDwgMClcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5fY3VycmVudFRpbWUtLTtcbiAgICAgICAgICAgIGxhZyArPSB0aGlzLl9kdXJhdGlvbnNbdGhpcy5jdXJyZW50RnJhbWVdO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIHNpZ24gPSBNYXRoLnNpZ24odGhpcy5hbmltYXRpb25TcGVlZCAqIGRlbHRhVGltZSk7XG4gICAgICAgIHRoaXMuX2N1cnJlbnRUaW1lID0gTWF0aC5mbG9vcih0aGlzLl9jdXJyZW50VGltZSk7XG5cbiAgICAgICAgd2hpbGUgKGxhZyA+PSB0aGlzLl9kdXJhdGlvbnNbdGhpcy5jdXJyZW50RnJhbWVdKVxuICAgICAgICB7XG4gICAgICAgICAgICBsYWcgLT0gdGhpcy5fZHVyYXRpb25zW3RoaXMuY3VycmVudEZyYW1lXSAqIHNpZ247XG4gICAgICAgICAgICB0aGlzLl9jdXJyZW50VGltZSArPSBzaWduO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fY3VycmVudFRpbWUgKz0gbGFnIC8gdGhpcy5fZHVyYXRpb25zW3RoaXMuY3VycmVudEZyYW1lXTtcbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgdGhpcy5fY3VycmVudFRpbWUgKz0gZWxhcHNlZDtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5fY3VycmVudFRpbWUgPCAwICYmICF0aGlzLmxvb3ApXG4gICAge1xuICAgICAgICB0aGlzLmdvdG9BbmRTdG9wKDApO1xuXG4gICAgICAgIGlmICh0aGlzLm9uQ29tcGxldGUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMub25Db21wbGV0ZSgpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGVsc2UgaWYgKHRoaXMuX2N1cnJlbnRUaW1lID49IHRoaXMuX3RleHR1cmVzLmxlbmd0aCAmJiAhdGhpcy5sb29wKVxuICAgIHtcbiAgICAgICAgdGhpcy5nb3RvQW5kU3RvcCh0aGlzLl90ZXh0dXJlcy5sZW5ndGggLSAxKTtcblxuICAgICAgICBpZiAodGhpcy5vbkNvbXBsZXRlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLm9uQ29tcGxldGUoKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICB0aGlzLl90ZXh0dXJlID0gdGhpcy5fdGV4dHVyZXNbdGhpcy5jdXJyZW50RnJhbWVdO1xuICAgIH1cblxufTtcblxuLypcbiAqIFN0b3BzIHRoZSBNb3ZpZUNsaXAgYW5kIGRlc3Ryb3lzIGl0XG4gKlxuICovXG5Nb3ZpZUNsaXAucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoIClcbntcbiAgICB0aGlzLnN0b3AoKTtcbiAgICBjb3JlLlNwcml0ZS5wcm90b3R5cGUuZGVzdHJveS5jYWxsKHRoaXMpO1xufTtcblxuLyoqXG4gKiBBIHNob3J0IGhhbmQgd2F5IG9mIGNyZWF0aW5nIGEgbW92aWVjbGlwIGZyb20gYW4gYXJyYXkgb2YgZnJhbWUgaWRzXG4gKlxuICogQHN0YXRpY1xuICogQHBhcmFtIGZyYW1lcyB7c3RyaW5nW119IHRoZSBhcnJheSBvZiBmcmFtZXMgaWRzIHRoZSBtb3ZpZWNsaXAgd2lsbCB1c2UgYXMgaXRzIHRleHR1cmUgZnJhbWVzXG4gKi9cbk1vdmllQ2xpcC5mcm9tRnJhbWVzID0gZnVuY3Rpb24gKGZyYW1lcylcbntcbiAgICB2YXIgdGV4dHVyZXMgPSBbXTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZnJhbWVzLmxlbmd0aDsgKytpKVxuICAgIHtcbiAgICAgICAgdGV4dHVyZXMucHVzaChuZXcgY29yZS5UZXh0dXJlLmZyb21GcmFtZShmcmFtZXNbaV0pKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IE1vdmllQ2xpcCh0ZXh0dXJlcyk7XG59O1xuXG4vKipcbiAqIEEgc2hvcnQgaGFuZCB3YXkgb2YgY3JlYXRpbmcgYSBtb3ZpZWNsaXAgZnJvbSBhbiBhcnJheSBvZiBpbWFnZSBpZHNcbiAqXG4gKiBAc3RhdGljXG4gKiBAcGFyYW0gaW1hZ2VzIHtzdHJpbmdbXX0gdGhlIGFycmF5IG9mIGltYWdlIHVybHMgdGhlIG1vdmllY2xpcCB3aWxsIHVzZSBhcyBpdHMgdGV4dHVyZSBmcmFtZXNcbiAqL1xuTW92aWVDbGlwLmZyb21JbWFnZXMgPSBmdW5jdGlvbiAoaW1hZ2VzKVxue1xuICAgIHZhciB0ZXh0dXJlcyA9IFtdO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBpbWFnZXMubGVuZ3RoOyArK2kpXG4gICAge1xuICAgICAgICB0ZXh0dXJlcy5wdXNoKG5ldyBjb3JlLlRleHR1cmUuZnJvbUltYWdlKGltYWdlc1tpXSkpO1xuICAgIH1cblxuICAgIHJldHVybiBuZXcgTW92aWVDbGlwKHRleHR1cmVzKTtcbn07IiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi9jb3JlJyksXG4gICAgLy8gYSBzcHJpdGUgdXNlIGRmb3IgcmVuZGVyaW5nIHRleHR1cmVzLi5cbiAgICB0ZW1wUG9pbnQgPSBuZXcgY29yZS5Qb2ludCgpLFxuICAgIENhbnZhc1RpbnRlciA9IHJlcXVpcmUoJy4uL2NvcmUvcmVuZGVyZXJzL2NhbnZhcy91dGlscy9DYW52YXNUaW50ZXInKTtcblxuLyoqXG4gKiBBIHRpbGluZyBzcHJpdGUgaXMgYSBmYXN0IHdheSBvZiByZW5kZXJpbmcgYSB0aWxpbmcgaW1hZ2VcbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuU3ByaXRlXG4gKiBAbWVtYmVyb2YgUElYSS5leHRyYXNcbiAqIEBwYXJhbSB0ZXh0dXJlIHtUZXh0dXJlfSB0aGUgdGV4dHVyZSBvZiB0aGUgdGlsaW5nIHNwcml0ZVxuICogQHBhcmFtIHdpZHRoIHtudW1iZXJ9ICB0aGUgd2lkdGggb2YgdGhlIHRpbGluZyBzcHJpdGVcbiAqIEBwYXJhbSBoZWlnaHQge251bWJlcn0gdGhlIGhlaWdodCBvZiB0aGUgdGlsaW5nIHNwcml0ZVxuICovXG5mdW5jdGlvbiBUaWxpbmdTcHJpdGUodGV4dHVyZSwgd2lkdGgsIGhlaWdodClcbntcbiAgICBjb3JlLlNwcml0ZS5jYWxsKHRoaXMsIHRleHR1cmUpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHNjYWxpbmcgb2YgdGhlIGltYWdlIHRoYXQgaXMgYmVpbmcgdGlsZWRcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuUG9pbnR9XG4gICAgICovXG4gICAgdGhpcy50aWxlU2NhbGUgPSBuZXcgY29yZS5Qb2ludCgxLDEpO1xuXG5cbiAgICAvKipcbiAgICAgKiBUaGUgb2Zmc2V0IHBvc2l0aW9uIG9mIHRoZSBpbWFnZSB0aGF0IGlzIGJlaW5nIHRpbGVkXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlBvaW50fVxuICAgICAqL1xuICAgIHRoaXMudGlsZVBvc2l0aW9uID0gbmV3IGNvcmUuUG9pbnQoMCwwKTtcblxuICAgIC8vLy8vIHByaXZhdGVcblxuICAgIC8qKlxuICAgICAqIFRoZSB3aXRoIG9mIHRoZSB0aWxpbmcgc3ByaXRlXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl93aWR0aCA9IHdpZHRoIHx8IDEwMDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBoZWlnaHQgb2YgdGhlIHRpbGluZyBzcHJpdGVcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX2hlaWdodCA9IGhlaWdodCB8fCAxMDA7XG5cbiAgICAvKipcbiAgICAgKiBBbiBpbnRlcm5hbCBXZWJHTCBVViBjYWNoZS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuVGV4dHVyZVV2c31cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX3V2cyA9IG5ldyBjb3JlLlRleHR1cmVVdnMoKTtcblxuICAgIHRoaXMuX2NhbnZhc1BhdHRlcm4gPSBudWxsO1xuXG4gICAgLy9UT0RPIG1vdmUuLlxuICAgIHRoaXMuc2hhZGVyID0gbmV3IGNvcmUuQWJzdHJhY3RGaWx0ZXIoXG5cbiAgICAgIFtcbiAgICAgICAgJ3ByZWNpc2lvbiBsb3dwIGZsb2F0OycsXG4gICAgICAgICdhdHRyaWJ1dGUgdmVjMiBhVmVydGV4UG9zaXRpb247JyxcbiAgICAgICAgJ2F0dHJpYnV0ZSB2ZWMyIGFUZXh0dXJlQ29vcmQ7JyxcbiAgICAgICAgJ2F0dHJpYnV0ZSB2ZWM0IGFDb2xvcjsnLFxuXG4gICAgICAgICd1bmlmb3JtIG1hdDMgcHJvamVjdGlvbk1hdHJpeDsnLFxuXG4gICAgICAgICd1bmlmb3JtIHZlYzQgdUZyYW1lOycsXG4gICAgICAgICd1bmlmb3JtIHZlYzQgdVRyYW5zZm9ybTsnLFxuXG4gICAgICAgICd2YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDsnLFxuICAgICAgICAndmFyeWluZyB2ZWM0IHZDb2xvcjsnLFxuXG4gICAgICAgICd2b2lkIG1haW4odm9pZCl7JyxcbiAgICAgICAgJyAgIGdsX1Bvc2l0aW9uID0gdmVjNCgocHJvamVjdGlvbk1hdHJpeCAqIHZlYzMoYVZlcnRleFBvc2l0aW9uLCAxLjApKS54eSwgMC4wLCAxLjApOycsXG5cbiAgICAgICAgJyAgIHZlYzIgY29vcmQgPSBhVGV4dHVyZUNvb3JkOycsXG4gICAgICAgICcgICBjb29yZCAtPSB1VHJhbnNmb3JtLnh5OycsXG4gICAgICAgICcgICBjb29yZCAvPSB1VHJhbnNmb3JtLnp3OycsXG4gICAgICAgICcgICB2VGV4dHVyZUNvb3JkID0gY29vcmQ7JyxcblxuICAgICAgICAnICAgdkNvbG9yID0gdmVjNChhQ29sb3IucmdiICogYUNvbG9yLmEsIGFDb2xvci5hKTsnLFxuICAgICAgICAnfSdcbiAgICAgIF0uam9pbignXFxuJyksXG4gICAgICBbXG4gICAgICAgICdwcmVjaXNpb24gbG93cCBmbG9hdDsnLFxuXG4gICAgICAgICd2YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDsnLFxuICAgICAgICAndmFyeWluZyB2ZWM0IHZDb2xvcjsnLFxuXG4gICAgICAgICd1bmlmb3JtIHNhbXBsZXIyRCB1U2FtcGxlcjsnLFxuICAgICAgICAndW5pZm9ybSB2ZWM0IHVGcmFtZTsnLFxuICAgICAgICAndW5pZm9ybSB2ZWMyIHVQaXhlbFNpemU7JyxcblxuICAgICAgICAndm9pZCBtYWluKHZvaWQpeycsXG5cbiAgICAgICAgJyAgIHZlYzIgY29vcmQgPSBtb2QodlRleHR1cmVDb29yZCwgdUZyYW1lLnp3KTsnLFxuICAgICAgICAnICAgY29vcmQgPSBjbGFtcChjb29yZCwgdVBpeGVsU2l6ZSwgdUZyYW1lLnp3IC0gdVBpeGVsU2l6ZSk7JyxcbiAgICAgICAgJyAgIGNvb3JkICs9IHVGcmFtZS54eTsnLFxuXG4gICAgICAgICcgICBnbF9GcmFnQ29sb3IgPSAgdGV4dHVyZTJEKHVTYW1wbGVyLCBjb29yZCkgKiB2Q29sb3IgOycsXG4gICAgICAgICd9J1xuICAgICAgXS5qb2luKCdcXG4nKSxcblxuICAgICAgICAgICAgLy8gc2V0IHRoZSB1bmlmb3Jtc1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHVGcmFtZTogeyB0eXBlOiAnNGZ2JywgdmFsdWU6IFswLDAsMSwxXSB9LFxuICAgICAgICAgICAgICAgIHVUcmFuc2Zvcm06IHsgdHlwZTogJzRmdicsIHZhbHVlOiBbMCwwLDEsMV0gfSxcbiAgICAgICAgICAgICAgICB1UGl4ZWxTaXplIDogeyB0eXBlIDogJzJmdicsIHZhbHVlOiBbMSwgMV19XG4gICAgICAgICAgICB9XG4gICAgICApO1xufVxuXG5UaWxpbmdTcHJpdGUucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShjb3JlLlNwcml0ZS5wcm90b3R5cGUpO1xuVGlsaW5nU3ByaXRlLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFRpbGluZ1Nwcml0ZTtcbm1vZHVsZS5leHBvcnRzID0gVGlsaW5nU3ByaXRlO1xuXG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKFRpbGluZ1Nwcml0ZS5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBUaGUgd2lkdGggb2YgdGhlIHNwcml0ZSwgc2V0dGluZyB0aGlzIHdpbGwgYWN0dWFsbHkgbW9kaWZ5IHRoZSBzY2FsZSB0byBhY2hpZXZlIHRoZSB2YWx1ZSBzZXRcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5leHRyYXMuVGlsaW5nU3ByaXRlI1xuICAgICAqL1xuICAgIHdpZHRoOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3dpZHRoO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5fd2lkdGggPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBUaGUgaGVpZ2h0IG9mIHRoZSBUaWxpbmdTcHJpdGUsIHNldHRpbmcgdGhpcyB3aWxsIGFjdHVhbGx5IG1vZGlmeSB0aGUgc2NhbGUgdG8gYWNoaWV2ZSB0aGUgdmFsdWUgc2V0XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZXh0cmFzLlRpbGluZ1Nwcml0ZSNcbiAgICAgKi9cbiAgICBoZWlnaHQ6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5faGVpZ2h0O1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5faGVpZ2h0ID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG59KTtcblxuVGlsaW5nU3ByaXRlLnByb3RvdHlwZS5fb25UZXh0dXJlVXBkYXRlID0gZnVuY3Rpb24gKClcbntcbiAgICByZXR1cm47XG59O1xuXG5cbi8qKlxuICogUmVuZGVycyB0aGUgb2JqZWN0IHVzaW5nIHRoZSBXZWJHTCByZW5kZXJlclxuICpcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5XZWJHTFJlbmRlcmVyfVxuICogQHByaXZhdGVcbiAqL1xuVGlsaW5nU3ByaXRlLnByb3RvdHlwZS5fcmVuZGVyV2ViR0wgPSBmdW5jdGlvbiAocmVuZGVyZXIpXG57XG4gICAgLy8gdHdlYWsgb3VyIHRleHR1cmUgdGVtcG9yYXJpbHkuLlxuICAgIHZhciB0ZXh0dXJlID0gdGhpcy5fdGV4dHVyZTtcblxuICAgIGlmKCF0ZXh0dXJlIHx8ICF0ZXh0dXJlLl91dnMpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFyIHRlbXBVdnMgPSB0ZXh0dXJlLl91dnMsXG4gICAgICAgIHRlbXBXaWR0aCA9IHRleHR1cmUuX2ZyYW1lLndpZHRoLFxuICAgICAgICB0ZW1wSGVpZ2h0ID0gdGV4dHVyZS5fZnJhbWUuaGVpZ2h0LFxuICAgICAgICB0dyA9IHRleHR1cmUuYmFzZVRleHR1cmUud2lkdGgsXG4gICAgICAgIHRoID0gdGV4dHVyZS5iYXNlVGV4dHVyZS5oZWlnaHQ7XG5cbiAgICB0ZXh0dXJlLl91dnMgPSB0aGlzLl91dnM7XG4gICAgdGV4dHVyZS5fZnJhbWUud2lkdGggPSB0aGlzLndpZHRoO1xuICAgIHRleHR1cmUuX2ZyYW1lLmhlaWdodCA9IHRoaXMuaGVpZ2h0O1xuXG4gICAgdGhpcy5zaGFkZXIudW5pZm9ybXMudVBpeGVsU2l6ZS52YWx1ZVswXSA9IDEuMC90dztcbiAgICB0aGlzLnNoYWRlci51bmlmb3Jtcy51UGl4ZWxTaXplLnZhbHVlWzFdID0gMS4wL3RoO1xuXG4gICAgdGhpcy5zaGFkZXIudW5pZm9ybXMudUZyYW1lLnZhbHVlWzBdID0gdGVtcFV2cy54MDtcbiAgICB0aGlzLnNoYWRlci51bmlmb3Jtcy51RnJhbWUudmFsdWVbMV0gPSB0ZW1wVXZzLnkwO1xuICAgIHRoaXMuc2hhZGVyLnVuaWZvcm1zLnVGcmFtZS52YWx1ZVsyXSA9IHRlbXBVdnMueDEgLSB0ZW1wVXZzLngwO1xuICAgIHRoaXMuc2hhZGVyLnVuaWZvcm1zLnVGcmFtZS52YWx1ZVszXSA9IHRlbXBVdnMueTIgLSB0ZW1wVXZzLnkwO1xuXG4gICAgdGhpcy5zaGFkZXIudW5pZm9ybXMudVRyYW5zZm9ybS52YWx1ZVswXSA9ICh0aGlzLnRpbGVQb3NpdGlvbi54ICUgKHRlbXBXaWR0aCAqIHRoaXMudGlsZVNjYWxlLngpKSAvIHRoaXMuX3dpZHRoO1xuICAgIHRoaXMuc2hhZGVyLnVuaWZvcm1zLnVUcmFuc2Zvcm0udmFsdWVbMV0gPSAodGhpcy50aWxlUG9zaXRpb24ueSAlICh0ZW1wSGVpZ2h0ICogdGhpcy50aWxlU2NhbGUueSkpIC8gdGhpcy5faGVpZ2h0O1xuICAgIHRoaXMuc2hhZGVyLnVuaWZvcm1zLnVUcmFuc2Zvcm0udmFsdWVbMl0gPSAoIHR3IC8gdGhpcy5fd2lkdGggKSAqIHRoaXMudGlsZVNjYWxlLng7XG4gICAgdGhpcy5zaGFkZXIudW5pZm9ybXMudVRyYW5zZm9ybS52YWx1ZVszXSA9ICggdGggLyB0aGlzLl9oZWlnaHQgKSAqIHRoaXMudGlsZVNjYWxlLnk7XG5cbiAgICByZW5kZXJlci5zZXRPYmplY3RSZW5kZXJlcihyZW5kZXJlci5wbHVnaW5zLnNwcml0ZSk7XG4gICAgcmVuZGVyZXIucGx1Z2lucy5zcHJpdGUucmVuZGVyKHRoaXMpO1xuXG4gICAgdGV4dHVyZS5fdXZzID0gdGVtcFV2cztcbiAgICB0ZXh0dXJlLl9mcmFtZS53aWR0aCA9IHRlbXBXaWR0aDtcbiAgICB0ZXh0dXJlLl9mcmFtZS5oZWlnaHQgPSB0ZW1wSGVpZ2h0O1xufTtcblxuLyoqXG4gKiBSZW5kZXJzIHRoZSBvYmplY3QgdXNpbmcgdGhlIENhbnZhcyByZW5kZXJlclxuICpcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5DYW52YXNSZW5kZXJlcn0gYSByZWZlcmVuY2UgdG8gdGhlIGNhbnZhcyByZW5kZXJlclxuICogQHByaXZhdGVcbiAqL1xuVGlsaW5nU3ByaXRlLnByb3RvdHlwZS5fcmVuZGVyQ2FudmFzID0gZnVuY3Rpb24gKHJlbmRlcmVyKVxue1xuICAgIHZhciB0ZXh0dXJlID0gdGhpcy5fdGV4dHVyZTtcblxuICAgIGlmICghdGV4dHVyZS5iYXNlVGV4dHVyZS5oYXNMb2FkZWQpXG4gICAge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHZhciBjb250ZXh0ID0gcmVuZGVyZXIuY29udGV4dCxcbiAgICAgICAgdHJhbnNmb3JtID0gdGhpcy53b3JsZFRyYW5zZm9ybSxcbiAgICAgICAgcmVzb2x1dGlvbiA9IHJlbmRlcmVyLnJlc29sdXRpb24sXG4gICAgICAgIGJhc2VUZXh0dXJlID0gdGV4dHVyZS5iYXNlVGV4dHVyZSxcbiAgICAgICAgbW9kWCA9ICh0aGlzLnRpbGVQb3NpdGlvbi54IC8gdGhpcy50aWxlU2NhbGUueCkgJSB0ZXh0dXJlLl9mcmFtZS53aWR0aCxcbiAgICAgICAgbW9kWSA9ICh0aGlzLnRpbGVQb3NpdGlvbi55IC8gdGhpcy50aWxlU2NhbGUueSkgJSB0ZXh0dXJlLl9mcmFtZS5oZWlnaHQ7XG5cbiAgICAvLyBjcmVhdGUgYSBuaWNlIHNoaW55IHBhdHRlcm4hXG4gICAgLy8gVE9ETyB0aGlzIG5lZWRzIHRvIGJlIHJlZnJlc2hlZCBpZiB0ZXh0dXJlIGNoYW5nZXMuLlxuICAgIGlmKCF0aGlzLl9jYW52YXNQYXR0ZXJuKVxuICAgIHtcbiAgICAgICAgLy8gY3V0IGFuIG9iamVjdCBmcm9tIGEgc3ByaXRlc2hlZXQuLlxuICAgICAgICB2YXIgdGVtcENhbnZhcyA9IG5ldyBjb3JlLkNhbnZhc0J1ZmZlcih0ZXh0dXJlLl9mcmFtZS53aWR0aCwgdGV4dHVyZS5fZnJhbWUuaGVpZ2h0KTtcblxuICAgICAgICAvLyBUaW50IHRoZSB0aWxpbmcgc3ByaXRlXG4gICAgICAgIGlmICh0aGlzLnRpbnQgIT09IDB4RkZGRkZGKVxuICAgICAgICB7XG4gICAgICAgICAgICBpZiAodGhpcy5jYWNoZWRUaW50ICE9PSB0aGlzLnRpbnQpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdGhpcy5jYWNoZWRUaW50ID0gdGhpcy50aW50O1xuXG4gICAgICAgICAgICAgICAgdGhpcy50aW50ZWRUZXh0dXJlID0gQ2FudmFzVGludGVyLmdldFRpbnRlZFRleHR1cmUodGhpcywgdGhpcy50aW50KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRlbXBDYW52YXMuY29udGV4dC5kcmF3SW1hZ2UodGhpcy50aW50ZWRUZXh0dXJlLCAwLCAwKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRlbXBDYW52YXMuY29udGV4dC5kcmF3SW1hZ2UoYmFzZVRleHR1cmUuc291cmNlLCAtdGV4dHVyZS5fZnJhbWUueCwgLXRleHR1cmUuX2ZyYW1lLnkpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX2NhbnZhc1BhdHRlcm4gPSB0ZW1wQ2FudmFzLmNvbnRleHQuY3JlYXRlUGF0dGVybiggdGVtcENhbnZhcy5jYW52YXMsICdyZXBlYXQnICk7XG4gICAgfVxuXG4gICAgLy8gc2V0IGNvbnRleHQgc3RhdGUuLlxuICAgIGNvbnRleHQuZ2xvYmFsQWxwaGEgPSB0aGlzLndvcmxkQWxwaGE7XG4gICAgY29udGV4dC5zZXRUcmFuc2Zvcm0odHJhbnNmb3JtLmEgKiByZXNvbHV0aW9uLFxuICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2Zvcm0uYiAqIHJlc29sdXRpb24sXG4gICAgICAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybS5jICogcmVzb2x1dGlvbixcbiAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtLmQgKiByZXNvbHV0aW9uLFxuICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2Zvcm0udHggKiByZXNvbHV0aW9uLFxuICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2Zvcm0udHkgKiByZXNvbHV0aW9uKTtcblxuICAgIC8vIFRPRE8gLSB0aGlzIHNob3VsZCBiZSByb2xsZWQgaW50byB0aGUgc2V0VHJhbnNmb3JtIGFib3ZlLi5cbiAgICBjb250ZXh0LnNjYWxlKHRoaXMudGlsZVNjYWxlLngsdGhpcy50aWxlU2NhbGUueSk7XG5cbiAgICBjb250ZXh0LnRyYW5zbGF0ZShtb2RYICsgKHRoaXMuYW5jaG9yLnggKiAtdGhpcy5fd2lkdGggKSxcbiAgICAgICAgICAgICAgICAgICAgICBtb2RZICsgKHRoaXMuYW5jaG9yLnkgKiAtdGhpcy5faGVpZ2h0KSk7XG5cbiAgICAvLyBjaGVjayBibGVuZCBtb2RlXG4gICAgdmFyIGNvbXBvc2l0ZU9wZXJhdGlvbiA9IHJlbmRlcmVyLmJsZW5kTW9kZXNbdGhpcy5ibGVuZE1vZGVdO1xuICAgIGlmIChjb21wb3NpdGVPcGVyYXRpb24gIT09IHJlbmRlcmVyLmNvbnRleHQuZ2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uKVxuICAgIHtcbiAgICAgICAgY29udGV4dC5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb24gPSBjb21wb3NpdGVPcGVyYXRpb247XG4gICAgfVxuXG4gICAgLy8gZmlsbCB0aGUgcGF0dGVybiFcbiAgICBjb250ZXh0LmZpbGxTdHlsZSA9IHRoaXMuX2NhbnZhc1BhdHRlcm47XG4gICAgY29udGV4dC5maWxsUmVjdCgtbW9kWCxcbiAgICAgICAgICAgICAgICAgICAgIC1tb2RZLFxuICAgICAgICAgICAgICAgICAgICAgdGhpcy5fd2lkdGggLyB0aGlzLnRpbGVTY2FsZS54LFxuICAgICAgICAgICAgICAgICAgICAgdGhpcy5faGVpZ2h0IC8gdGhpcy50aWxlU2NhbGUueSk7XG5cblxuICAgIC8vVE9ETyAtIHByZXR0eSBzdXJlIHRoaXMgY2FuIGJlIGRlbGV0ZWQuLi5cbiAgICAvL2NvbnRleHQudHJhbnNsYXRlKC10aGlzLnRpbGVQb3NpdGlvbi54ICsgKHRoaXMuYW5jaG9yLnggKiB0aGlzLl93aWR0aCksIC10aGlzLnRpbGVQb3NpdGlvbi55ICsgKHRoaXMuYW5jaG9yLnkgKiB0aGlzLl9oZWlnaHQpKTtcbiAgICAvL2NvbnRleHQuc2NhbGUoMSAvIHRoaXMudGlsZVNjYWxlLngsIDEgLyB0aGlzLnRpbGVTY2FsZS55KTtcbn07XG5cblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBmcmFtaW5nIHJlY3RhbmdsZSBvZiB0aGUgc3ByaXRlIGFzIGEgUmVjdGFuZ2xlIG9iamVjdFxuKlxuICogQHJldHVybiB7UElYSS5SZWN0YW5nbGV9IHRoZSBmcmFtaW5nIHJlY3RhbmdsZVxuICovXG5UaWxpbmdTcHJpdGUucHJvdG90eXBlLmdldEJvdW5kcyA9IGZ1bmN0aW9uICgpXG57XG4gICAgdmFyIHdpZHRoID0gdGhpcy5fd2lkdGg7XG4gICAgdmFyIGhlaWdodCA9IHRoaXMuX2hlaWdodDtcblxuICAgIHZhciB3MCA9IHdpZHRoICogKDEtdGhpcy5hbmNob3IueCk7XG4gICAgdmFyIHcxID0gd2lkdGggKiAtdGhpcy5hbmNob3IueDtcblxuICAgIHZhciBoMCA9IGhlaWdodCAqICgxLXRoaXMuYW5jaG9yLnkpO1xuICAgIHZhciBoMSA9IGhlaWdodCAqIC10aGlzLmFuY2hvci55O1xuXG4gICAgdmFyIHdvcmxkVHJhbnNmb3JtID0gdGhpcy53b3JsZFRyYW5zZm9ybTtcblxuICAgIHZhciBhID0gd29ybGRUcmFuc2Zvcm0uYTtcbiAgICB2YXIgYiA9IHdvcmxkVHJhbnNmb3JtLmI7XG4gICAgdmFyIGMgPSB3b3JsZFRyYW5zZm9ybS5jO1xuICAgIHZhciBkID0gd29ybGRUcmFuc2Zvcm0uZDtcbiAgICB2YXIgdHggPSB3b3JsZFRyYW5zZm9ybS50eDtcbiAgICB2YXIgdHkgPSB3b3JsZFRyYW5zZm9ybS50eTtcblxuICAgIHZhciB4MSA9IGEgKiB3MSArIGMgKiBoMSArIHR4O1xuICAgIHZhciB5MSA9IGQgKiBoMSArIGIgKiB3MSArIHR5O1xuXG4gICAgdmFyIHgyID0gYSAqIHcwICsgYyAqIGgxICsgdHg7XG4gICAgdmFyIHkyID0gZCAqIGgxICsgYiAqIHcwICsgdHk7XG5cbiAgICB2YXIgeDMgPSBhICogdzAgKyBjICogaDAgKyB0eDtcbiAgICB2YXIgeTMgPSBkICogaDAgKyBiICogdzAgKyB0eTtcblxuICAgIHZhciB4NCA9ICBhICogdzEgKyBjICogaDAgKyB0eDtcbiAgICB2YXIgeTQgPSAgZCAqIGgwICsgYiAqIHcxICsgdHk7XG5cbiAgICB2YXIgbWluWCxcbiAgICAgICAgbWF4WCxcbiAgICAgICAgbWluWSxcbiAgICAgICAgbWF4WTtcblxuICAgIG1pblggPSB4MTtcbiAgICBtaW5YID0geDIgPCBtaW5YID8geDIgOiBtaW5YO1xuICAgIG1pblggPSB4MyA8IG1pblggPyB4MyA6IG1pblg7XG4gICAgbWluWCA9IHg0IDwgbWluWCA/IHg0IDogbWluWDtcblxuICAgIG1pblkgPSB5MTtcbiAgICBtaW5ZID0geTIgPCBtaW5ZID8geTIgOiBtaW5ZO1xuICAgIG1pblkgPSB5MyA8IG1pblkgPyB5MyA6IG1pblk7XG4gICAgbWluWSA9IHk0IDwgbWluWSA/IHk0IDogbWluWTtcblxuICAgIG1heFggPSB4MTtcbiAgICBtYXhYID0geDIgPiBtYXhYID8geDIgOiBtYXhYO1xuICAgIG1heFggPSB4MyA+IG1heFggPyB4MyA6IG1heFg7XG4gICAgbWF4WCA9IHg0ID4gbWF4WCA/IHg0IDogbWF4WDtcblxuICAgIG1heFkgPSB5MTtcbiAgICBtYXhZID0geTIgPiBtYXhZID8geTIgOiBtYXhZO1xuICAgIG1heFkgPSB5MyA+IG1heFkgPyB5MyA6IG1heFk7XG4gICAgbWF4WSA9IHk0ID4gbWF4WSA/IHk0IDogbWF4WTtcblxuICAgIHZhciBib3VuZHMgPSB0aGlzLl9ib3VuZHM7XG5cbiAgICBib3VuZHMueCA9IG1pblg7XG4gICAgYm91bmRzLndpZHRoID0gbWF4WCAtIG1pblg7XG5cbiAgICBib3VuZHMueSA9IG1pblk7XG4gICAgYm91bmRzLmhlaWdodCA9IG1heFkgLSBtaW5ZO1xuXG4gICAgLy8gc3RvcmUgYSByZWZlcmVuY2Ugc28gdGhhdCBpZiB0aGlzIGZ1bmN0aW9uIGdldHMgY2FsbGVkIGFnYWluIGluIHRoZSByZW5kZXIgY3ljbGUgd2UgZG8gbm90IGhhdmUgdG8gcmVjYWxjdWxhdGVcbiAgICB0aGlzLl9jdXJyZW50Qm91bmRzID0gYm91bmRzO1xuXG4gICAgcmV0dXJuIGJvdW5kcztcbn07XG5cbi8qKlxuICogQ2hlY2tzIGlmIGEgcG9pbnQgaXMgaW5zaWRlIHRoaXMgdGlsaW5nIHNwcml0ZVxuICogQHBhcmFtIHBvaW50IHtQSVhJLlBvaW50fSB0aGUgcG9pbnQgdG8gY2hlY2tcbiAqL1xuVGlsaW5nU3ByaXRlLnByb3RvdHlwZS5jb250YWluc1BvaW50ID0gZnVuY3Rpb24oIHBvaW50IClcbntcbiAgICB0aGlzLndvcmxkVHJhbnNmb3JtLmFwcGx5SW52ZXJzZShwb2ludCwgIHRlbXBQb2ludCk7XG5cbiAgICB2YXIgd2lkdGggPSB0aGlzLl93aWR0aDtcbiAgICB2YXIgaGVpZ2h0ID0gdGhpcy5faGVpZ2h0O1xuICAgIHZhciB4MSA9IC13aWR0aCAqIHRoaXMuYW5jaG9yLng7XG4gICAgdmFyIHkxO1xuXG4gICAgaWYgKCB0ZW1wUG9pbnQueCA+IHgxICYmIHRlbXBQb2ludC54IDwgeDEgKyB3aWR0aCApXG4gICAge1xuICAgICAgICB5MSA9IC1oZWlnaHQgKiB0aGlzLmFuY2hvci55O1xuXG4gICAgICAgIGlmICggdGVtcFBvaW50LnkgPiB5MSAmJiB0ZW1wUG9pbnQueSA8IHkxICsgaGVpZ2h0IClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2U7XG59O1xuXG4vKipcbiAqIERlc3Ryb3lzIHRoaXMgdGlsaW5nIHNwcml0ZVxuICpcbiAqL1xuVGlsaW5nU3ByaXRlLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKCkge1xuICAgIGNvcmUuU3ByaXRlLnByb3RvdHlwZS5kZXN0cm95LmNhbGwodGhpcyk7XG5cbiAgICB0aGlzLnRpbGVTY2FsZSA9IG51bGw7XG4gICAgdGhpcy5fdGlsZVNjYWxlT2Zmc2V0ID0gbnVsbDtcbiAgICB0aGlzLnRpbGVQb3NpdGlvbiA9IG51bGw7XG5cbiAgICB0aGlzLl91dnMgPSBudWxsO1xufTtcblxuLyoqXG4gKiBIZWxwZXIgZnVuY3Rpb24gdGhhdCBjcmVhdGVzIGEgdGlsaW5nIHNwcml0ZSB0aGF0IHdpbGwgdXNlIGEgdGV4dHVyZSBmcm9tIHRoZSBUZXh0dXJlQ2FjaGUgYmFzZWQgb24gdGhlIGZyYW1lSWRcbiAqIFRoZSBmcmFtZSBpZHMgYXJlIGNyZWF0ZWQgd2hlbiBhIFRleHR1cmUgcGFja2VyIGZpbGUgaGFzIGJlZW4gbG9hZGVkXG4gKlxuICogQHN0YXRpY1xuICogQHBhcmFtIGZyYW1lSWQge3N0cmluZ30gVGhlIGZyYW1lIElkIG9mIHRoZSB0ZXh0dXJlIGluIHRoZSBjYWNoZVxuICogQHJldHVybiB7UElYSS5leHRyYXMuVGlsaW5nU3ByaXRlfSBBIG5ldyBUaWxpbmdTcHJpdGUgdXNpbmcgYSB0ZXh0dXJlIGZyb20gdGhlIHRleHR1cmUgY2FjaGUgbWF0Y2hpbmcgdGhlIGZyYW1lSWRcbiAqIEBwYXJhbSB3aWR0aCB7bnVtYmVyfSAgdGhlIHdpZHRoIG9mIHRoZSB0aWxpbmcgc3ByaXRlXG4gKiBAcGFyYW0gaGVpZ2h0IHtudW1iZXJ9IHRoZSBoZWlnaHQgb2YgdGhlIHRpbGluZyBzcHJpdGVcbiAqL1xuVGlsaW5nU3ByaXRlLmZyb21GcmFtZSA9IGZ1bmN0aW9uIChmcmFtZUlkLHdpZHRoLGhlaWdodClcbntcbiAgICB2YXIgdGV4dHVyZSA9IGNvcmUudXRpbHMuVGV4dHVyZUNhY2hlW2ZyYW1lSWRdO1xuXG4gICAgaWYgKCF0ZXh0dXJlKVxuICAgIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdUaGUgZnJhbWVJZCBcIicgKyBmcmFtZUlkICsgJ1wiIGRvZXMgbm90IGV4aXN0IGluIHRoZSB0ZXh0dXJlIGNhY2hlICcgKyB0aGlzKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IFRpbGluZ1Nwcml0ZSh0ZXh0dXJlLHdpZHRoLGhlaWdodCk7XG59O1xuXG4vKipcbiAqIEhlbHBlciBmdW5jdGlvbiB0aGF0IGNyZWF0ZXMgYSBzcHJpdGUgdGhhdCB3aWxsIGNvbnRhaW4gYSB0ZXh0dXJlIGJhc2VkIG9uIGFuIGltYWdlIHVybFxuICogSWYgdGhlIGltYWdlIGlzIG5vdCBpbiB0aGUgdGV4dHVyZSBjYWNoZSBpdCB3aWxsIGJlIGxvYWRlZFxuICpcbiAqIEBzdGF0aWNcbiAqIEBwYXJhbSBpbWFnZUlkIHtzdHJpbmd9IFRoZSBpbWFnZSB1cmwgb2YgdGhlIHRleHR1cmVcbiAqIEBwYXJhbSB3aWR0aCB7bnVtYmVyfSAgdGhlIHdpZHRoIG9mIHRoZSB0aWxpbmcgc3ByaXRlXG4gKiBAcGFyYW0gaGVpZ2h0IHtudW1iZXJ9IHRoZSBoZWlnaHQgb2YgdGhlIHRpbGluZyBzcHJpdGVcbiAqIEBwYXJhbSBbY3Jvc3NvcmlnaW49KGF1dG8pXSB7Ym9vbGVhbn0gaWYgeW91IHdhbnQgdG8gc3BlY2lmeSB0aGUgY3Jvc3Mtb3JpZ2luIHBhcmFtZXRlclxuICogQHBhcmFtIFtzY2FsZU1vZGU9UElYSS5TQ0FMRV9NT0RFUy5ERUZBVUxUXSB7bnVtYmVyfSBpZiB5b3Ugd2FudCB0byBzcGVjaWZ5IHRoZSBzY2FsZSBtb2RlLCBzZWUge0BsaW5rIFBJWEkuU0NBTEVfTU9ERVN9IGZvciBwb3NzaWJsZSB2YWx1ZXNcbiAqIEByZXR1cm4ge1BJWEkuZXh0cmFzLlRpbGluZ1Nwcml0ZX0gQSBuZXcgVGlsaW5nU3ByaXRlIHVzaW5nIGEgdGV4dHVyZSBmcm9tIHRoZSB0ZXh0dXJlIGNhY2hlIG1hdGNoaW5nIHRoZSBpbWFnZSBpZFxuICovXG5UaWxpbmdTcHJpdGUuZnJvbUltYWdlID0gZnVuY3Rpb24gKGltYWdlSWQsIHdpZHRoLCBoZWlnaHQsIGNyb3Nzb3JpZ2luLCBzY2FsZU1vZGUpXG57XG4gICAgcmV0dXJuIG5ldyBUaWxpbmdTcHJpdGUoY29yZS5UZXh0dXJlLmZyb21JbWFnZShpbWFnZUlkLCBjcm9zc29yaWdpbiwgc2NhbGVNb2RlKSx3aWR0aCxoZWlnaHQpO1xufTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vY29yZScpLFxuICAgIERpc3BsYXlPYmplY3QgPSBjb3JlLkRpc3BsYXlPYmplY3QsXG4gICAgX3RlbXBNYXRyaXggPSBuZXcgY29yZS5NYXRyaXgoKTtcblxuRGlzcGxheU9iamVjdC5wcm90b3R5cGUuX2NhY2hlQXNCaXRtYXAgPSBmYWxzZTtcbkRpc3BsYXlPYmplY3QucHJvdG90eXBlLl9vcmlnaW5hbFJlbmRlcldlYkdMID0gbnVsbDtcbkRpc3BsYXlPYmplY3QucHJvdG90eXBlLl9vcmlnaW5hbFJlbmRlckNhbnZhcyA9IG51bGw7XG5cbkRpc3BsYXlPYmplY3QucHJvdG90eXBlLl9vcmlnaW5hbFVwZGF0ZVRyYW5zZm9ybSA9IG51bGw7XG5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS5fb3JpZ2luYWxIaXRUZXN0ID0gbnVsbDtcbkRpc3BsYXlPYmplY3QucHJvdG90eXBlLl9vcmlnaW5hbERlc3Ryb3kgPSBudWxsO1xuRGlzcGxheU9iamVjdC5wcm90b3R5cGUuX2NhY2hlZFNwcml0ZSA9IG51bGw7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKERpc3BsYXlPYmplY3QucHJvdG90eXBlLCB7XG5cbiAgICAvKipcbiAgICAgKiBTZXQgdGhpcyB0byB0cnVlIGlmIHlvdSB3YW50IHRoaXMgZGlzcGxheSBvYmplY3QgdG8gYmUgY2FjaGVkIGFzIGEgYml0bWFwLlxuICAgICAqIFRoaXMgYmFzaWNhbGx5IHRha2VzIGEgc25hcCBzaG90IG9mIHRoZSBkaXNwbGF5IG9iamVjdCBhcyBpdCBpcyBhdCB0aGF0IG1vbWVudC4gSXQgY2FuIHByb3ZpZGUgYSBwZXJmb3JtYW5jZSBiZW5lZml0IGZvciBjb21wbGV4IHN0YXRpYyBkaXNwbGF5T2JqZWN0cy5cbiAgICAgKiBUbyByZW1vdmUgc2ltcGx5IHNldCB0aGlzIHByb3BlcnR5IHRvICdmYWxzZSdcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICogQG1lbWJlcm9mIFBJWEkuRGlzcGxheU9iamVjdCNcbiAgICAgKi9cbiAgICBjYWNoZUFzQml0bWFwOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2NhY2hlQXNCaXRtYXA7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICBpZiAodGhpcy5fY2FjaGVBc0JpdG1hcCA9PT0gdmFsdWUpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLl9jYWNoZUFzQml0bWFwID0gdmFsdWU7XG5cbiAgICAgICAgICAgIGlmICh2YWx1ZSlcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9vcmlnaW5hbFJlbmRlcldlYkdMID0gdGhpcy5yZW5kZXJXZWJHTDtcbiAgICAgICAgICAgICAgICB0aGlzLl9vcmlnaW5hbFJlbmRlckNhbnZhcyA9IHRoaXMucmVuZGVyQ2FudmFzO1xuXG4gICAgICAgICAgICAgICAgdGhpcy5fb3JpZ2luYWxVcGRhdGVUcmFuc2Zvcm0gPSB0aGlzLnVwZGF0ZVRyYW5zZm9ybTtcbiAgICAgICAgICAgICAgICB0aGlzLl9vcmlnaW5hbEdldEJvdW5kcyA9IHRoaXMuZ2V0Qm91bmRzO1xuXG4gICAgICAgICAgICAgICAgdGhpcy5fb3JpZ2luYWxEZXN0cm95ID0gdGhpcy5kZXN0cm95O1xuXG4gICAgICAgICAgICAgICAgdGhpcy5fb3JpZ2luYWxDb250YWluc1BvaW50ID0gdGhpcy5jb250YWluc1BvaW50O1xuXG4gICAgICAgICAgICAgICAgdGhpcy5yZW5kZXJXZWJHTCA9IHRoaXMuX3JlbmRlckNhY2hlZFdlYkdMO1xuICAgICAgICAgICAgICAgIHRoaXMucmVuZGVyQ2FudmFzID0gdGhpcy5fcmVuZGVyQ2FjaGVkQ2FudmFzO1xuXG4gICAgICAgICAgICAgICAgdGhpcy5kZXN0cm95ID0gdGhpcy5fY2FjaGVBc0JpdG1hcERlc3Ryb3k7XG5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5fY2FjaGVkU3ByaXRlKVxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fZGVzdHJveUNhY2hlZERpc3BsYXlPYmplY3QoKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB0aGlzLnJlbmRlcldlYkdMID0gdGhpcy5fb3JpZ2luYWxSZW5kZXJXZWJHTDtcbiAgICAgICAgICAgICAgICB0aGlzLnJlbmRlckNhbnZhcyA9IHRoaXMuX29yaWdpbmFsUmVuZGVyQ2FudmFzO1xuICAgICAgICAgICAgICAgIHRoaXMuZ2V0Qm91bmRzID0gdGhpcy5fb3JpZ2luYWxHZXRCb3VuZHM7XG5cbiAgICAgICAgICAgICAgICB0aGlzLmRlc3Ryb3kgPSB0aGlzLl9vcmlnaW5hbERlc3Ryb3k7XG5cbiAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZVRyYW5zZm9ybSA9IHRoaXMuX29yaWdpbmFsVXBkYXRlVHJhbnNmb3JtO1xuICAgICAgICAgICAgICAgIHRoaXMuY29udGFpbnNQb2ludCA9IHRoaXMuX29yaWdpbmFsQ29udGFpbnNQb2ludDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn0pO1xuLyoqXG4qIFJlbmRlcnMgYSBjYWNoZWQgdmVyc2lvbiBvZiB0aGUgc3ByaXRlIHdpdGggV2ViR0xcbipcbiogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLldlYkdMUmVuZGVyZXJ9IHRoZSBXZWJHTCByZW5kZXJlclxuKiBAcHJpdmF0ZVxuKi9cbkRpc3BsYXlPYmplY3QucHJvdG90eXBlLl9yZW5kZXJDYWNoZWRXZWJHTCA9IGZ1bmN0aW9uIChyZW5kZXJlcilcbntcbiAgICBpZiAoIXRoaXMudmlzaWJsZSB8fCB0aGlzLndvcmxkQWxwaGEgPD0gMCB8fCAhdGhpcy5yZW5kZXJhYmxlKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuX2luaXRDYWNoZWREaXNwbGF5T2JqZWN0KCByZW5kZXJlciApO1xuXG4gICAgdGhpcy5fY2FjaGVkU3ByaXRlLndvcmxkQWxwaGEgPSB0aGlzLndvcmxkQWxwaGE7XG5cbiAgICByZW5kZXJlci5zZXRPYmplY3RSZW5kZXJlcihyZW5kZXJlci5wbHVnaW5zLnNwcml0ZSk7XG4gICAgcmVuZGVyZXIucGx1Z2lucy5zcHJpdGUucmVuZGVyKCB0aGlzLl9jYWNoZWRTcHJpdGUgKTtcbn07XG5cbi8qKlxuKiBQcmVwYXJlcyB0aGUgV2ViR0wgcmVuZGVyZXIgdG8gY2FjaGUgdGhlIHNwcml0ZVxuKlxuKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcn0gdGhlIFdlYkdMIHJlbmRlcmVyXG4qIEBwcml2YXRlXG4qL1xuRGlzcGxheU9iamVjdC5wcm90b3R5cGUuX2luaXRDYWNoZWREaXNwbGF5T2JqZWN0ID0gZnVuY3Rpb24gKHJlbmRlcmVyKVxue1xuICAgIGlmKHRoaXMuX2NhY2hlZFNwcml0ZSlcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBmaXJzdCB3ZSBmbHVzaCBhbnl0aGluZyBsZWZ0IGluIHRoZSByZW5kZXJlciAob3RoZXJ3aXNlIGl0IHdvdWxkIGdldCByZW5kZXJlZCB0byB0aGUgY2FjaGVkIHRleHR1cmUpXG4gICAgcmVuZGVyZXIuY3VycmVudFJlbmRlcmVyLmZsdXNoKCk7XG4gICAgLy90aGlzLmZpbHRlcnM9IFtdO1xuICAgIC8vIG5leHQgd2UgZmluZCB0aGUgZGltZW5zaW9ucyBvZiB0aGUgdW50cmFuc2Zvcm1lZCBvYmplY3RcbiAgICAvLyB0aGlzIGZ1bmN0aW9uIGFsc28gY2FsbHMgdXBkYXRldHJhbnNmb3JtIG9uIGFsbCBpdHMgY2hpbGRyZW4gYXMgcGFydCBvZiB0aGUgbWVhc3VyaW5nLiBUaGlzIG1lYW5zIHdlIGRvbid0IG5lZWQgdG8gdXBkYXRlIHRoZSB0cmFuc2Zvcm0gYWdhaW4gaW4gdGhpcyBmdW5jdGlvblxuICAgIC8vIFRPRE8gcGFzcyBhbiBvYmplY3QgdG8gY2xvbmUgdG9vPyBzYXZlcyBoYXZpbmcgdG8gY3JlYXRlIGEgbmV3IG9uZSBlYWNoIHRpbWUhXG4gICAgdmFyIGJvdW5kcyA9IHRoaXMuZ2V0TG9jYWxCb3VuZHMoKS5jbG9uZSgpO1xuXG4gICAgLy8gYWRkIHNvbWUgcGFkZGluZyFcbiAgICBpZih0aGlzLl9maWx0ZXJzKVxuICAgIHtcbiAgICAgICAgdmFyIHBhZGRpbmcgPSB0aGlzLl9maWx0ZXJzWzBdLnBhZGRpbmc7XG4gICAgICAgIGJvdW5kcy54IC09IHBhZGRpbmc7XG4gICAgICAgIGJvdW5kcy55IC09IHBhZGRpbmc7XG5cbiAgICAgICAgYm91bmRzLndpZHRoICs9IHBhZGRpbmcgKiAyO1xuICAgICAgICBib3VuZHMuaGVpZ2h0ICs9IHBhZGRpbmcgKiAyO1xuICAgIH1cblxuICAgIC8vIGZvciBub3cgd2UgY2FjaGUgdGhlIGN1cnJlbnQgcmVuZGVyVGFyZ2V0IHRoYXQgdGhlIHdlYkdMIHJlbmRlcmVyIGlzIGN1cnJlbnRseSB1c2luZy5cbiAgICAvLyB0aGlzIGNvdWxkIGJlIG1vcmUgZWxlZ2VudC4uXG4gICAgdmFyIGNhY2hlZFJlbmRlclRhcmdldCA9IHJlbmRlcmVyLmN1cnJlbnRSZW5kZXJUYXJnZXQ7XG4gICAgLy8gV2UgYWxzbyBzdG9yZSB0aGUgZmlsdGVyIHN0YWNrIC0gSSB3aWxsIGRlZmluaXRlbHkgbG9vayB0byBjaGFuZ2UgaG93IHRoaXMgd29ya3MgYSBsaXR0bGUgbGF0ZXIgZG93biB0aGUgbGluZS5cbiAgICB2YXIgc3RhY2sgPSByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLmZpbHRlclN0YWNrO1xuXG4gICAgLy8gdGhpcyByZW5kZXJUZXh0dXJlIHdpbGwgYmUgdXNlZCB0byBzdG9yZSB0aGUgY2FjaGVkIERpc3BsYXlPYmplY3RcbiAgICB2YXIgcmVuZGVyVGV4dHVyZSA9IG5ldyBjb3JlLlJlbmRlclRleHR1cmUocmVuZGVyZXIsIGJvdW5kcy53aWR0aCB8IDAsIGJvdW5kcy5oZWlnaHQgfCAwKTtcblxuICAgIC8vIG5lZWQgdG8gc2V0IC8vXG4gICAgdmFyIG0gPSBfdGVtcE1hdHJpeDtcblxuICAgIG0udHggPSAtYm91bmRzLng7XG4gICAgbS50eSA9IC1ib3VuZHMueTtcblxuXG5cbiAgICAvLyBzZXQgYWxsIHByb3BlcnRpZXMgdG8gdGhlcmUgb3JpZ2luYWwgc28gd2UgY2FuIHJlbmRlciB0byBhIHRleHR1cmVcbiAgICB0aGlzLnJlbmRlcldlYkdMID0gdGhpcy5fb3JpZ2luYWxSZW5kZXJXZWJHTDtcblxuICAgIHJlbmRlclRleHR1cmUucmVuZGVyKHRoaXMsIG0sIHRydWUsIHRydWUpO1xuXG4gICAgLy8gbm93IHJlc3RvcmUgdGhlIHN0YXRlIGJlIHNldHRpbmcgdGhlIG5ldyBwcm9wZXJ0aWVzXG4gICAgcmVuZGVyZXIuc2V0UmVuZGVyVGFyZ2V0KGNhY2hlZFJlbmRlclRhcmdldCk7XG4gICAgcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5maWx0ZXJTdGFjayA9IHN0YWNrO1xuXG4gICAgdGhpcy5yZW5kZXJXZWJHTCAgICAgPSB0aGlzLl9yZW5kZXJDYWNoZWRXZWJHTDtcbiAgICB0aGlzLnVwZGF0ZVRyYW5zZm9ybSA9IHRoaXMuZGlzcGxheU9iamVjdFVwZGF0ZVRyYW5zZm9ybTtcbiAgICB0aGlzLmdldEJvdW5kcyAgICAgICA9IHRoaXMuX2dldENhY2hlZEJvdW5kcztcblxuXG4gICAgLy8gY3JlYXRlIG91ciBjYWNoZWQgc3ByaXRlXG4gICAgdGhpcy5fY2FjaGVkU3ByaXRlID0gbmV3IGNvcmUuU3ByaXRlKHJlbmRlclRleHR1cmUpO1xuICAgIHRoaXMuX2NhY2hlZFNwcml0ZS53b3JsZFRyYW5zZm9ybSA9IHRoaXMud29ybGRUcmFuc2Zvcm07XG4gICAgdGhpcy5fY2FjaGVkU3ByaXRlLmFuY2hvci54ID0gLSggYm91bmRzLnggLyBib3VuZHMud2lkdGggKTtcbiAgICB0aGlzLl9jYWNoZWRTcHJpdGUuYW5jaG9yLnkgPSAtKCBib3VuZHMueSAvIGJvdW5kcy5oZWlnaHQgKTtcblxuICAgIC8vIHJlc3RvcmUgdGhlIHRyYW5zZm9ybSBvZiB0aGUgY2FjaGVkIHNwcml0ZSB0byBhdm9pZCB0aGUgbmFzdHkgZmxpY2tlci4uXG4gICAgdGhpcy51cGRhdGVUcmFuc2Zvcm0oKTtcblxuICAgIC8vIG1hcCB0aGUgaGl0IHRlc3QuLlxuICAgIHRoaXMuY29udGFpbnNQb2ludCA9IHRoaXMuX2NhY2hlZFNwcml0ZS5jb250YWluc1BvaW50LmJpbmQodGhpcy5fY2FjaGVkU3ByaXRlKTtcbn07XG5cbi8qKlxuKiBSZW5kZXJzIGEgY2FjaGVkIHZlcnNpb24gb2YgdGhlIHNwcml0ZSB3aXRoIGNhbnZhc1xuKlxuKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuQ2FudmFzUmVuZGVyZXJ9IHRoZSBDYW52YXMgcmVuZGVyZXJcbiogQHByaXZhdGVcbiovXG5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS5fcmVuZGVyQ2FjaGVkQ2FudmFzID0gZnVuY3Rpb24gKHJlbmRlcmVyKVxue1xuICAgIGlmICghdGhpcy52aXNpYmxlIHx8IHRoaXMud29ybGRBbHBoYSA8PSAwIHx8ICF0aGlzLnJlbmRlcmFibGUpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5faW5pdENhY2hlZERpc3BsYXlPYmplY3RDYW52YXMoIHJlbmRlcmVyICk7XG5cbiAgICB0aGlzLl9jYWNoZWRTcHJpdGUud29ybGRBbHBoYSA9IHRoaXMud29ybGRBbHBoYTtcblxuICAgIHRoaXMuX2NhY2hlZFNwcml0ZS5yZW5kZXJDYW52YXMocmVuZGVyZXIpO1xufTtcblxuLy9UT0RPIHRoaXMgY2FuIGJlIHRoZSBzYW1lIGFzIHRoZSB3ZWJHTCB2ZXJpc29uLi4gd2lsbCBuZWVkIHRvIGRvIGEgbGl0dGxlIHR3ZWFraW5nIGZpcnN0IHRob3VnaC4uXG4vKipcbiogUHJlcGFyZXMgdGhlIENhbnZhcyByZW5kZXJlciB0byBjYWNoZSB0aGUgc3ByaXRlXG4qXG4qIEBwYXJhbSByZW5kZXJlciB7UElYSS5DYW52YXNSZW5kZXJlcn0gdGhlIENhbnZhcyByZW5kZXJlclxuKiBAcHJpdmF0ZVxuKi9cbkRpc3BsYXlPYmplY3QucHJvdG90eXBlLl9pbml0Q2FjaGVkRGlzcGxheU9iamVjdENhbnZhcyA9IGZ1bmN0aW9uIChyZW5kZXJlcilcbntcbiAgICBpZih0aGlzLl9jYWNoZWRTcHJpdGUpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy9nZXQgYm91bmRzIGFjdHVhbGx5IHRyYW5zZm9ybXMgdGhlIG9iamVjdCBmb3IgdXMgYWxyZWFkeSFcbiAgICB2YXIgYm91bmRzID0gdGhpcy5nZXRMb2NhbEJvdW5kcygpO1xuXG4gICAgdmFyIGNhY2hlZFJlbmRlclRhcmdldCA9IHJlbmRlcmVyLmNvbnRleHQ7XG5cbiAgICB2YXIgcmVuZGVyVGV4dHVyZSA9IG5ldyBjb3JlLlJlbmRlclRleHR1cmUocmVuZGVyZXIsIGJvdW5kcy53aWR0aCB8IDAsIGJvdW5kcy5oZWlnaHQgfCAwKTtcblxuICAgIC8vIG5lZWQgdG8gc2V0IC8vXG4gICAgdmFyIG0gPSBfdGVtcE1hdHJpeDtcblxuICAgIG0udHggPSAtYm91bmRzLng7XG4gICAgbS50eSA9IC1ib3VuZHMueTtcblxuICAgIC8vIHNldCBhbGwgcHJvcGVydGllcyB0byB0aGVyZSBvcmlnaW5hbCBzbyB3ZSBjYW4gcmVuZGVyIHRvIGEgdGV4dHVyZVxuICAgIHRoaXMucmVuZGVyQ2FudmFzID0gdGhpcy5fb3JpZ2luYWxSZW5kZXJDYW52YXM7XG5cbiAgICByZW5kZXJUZXh0dXJlLnJlbmRlcih0aGlzLCBtLCB0cnVlKTtcblxuICAgIC8vIG5vdyByZXN0b3JlIHRoZSBzdGF0ZSBiZSBzZXR0aW5nIHRoZSBuZXcgcHJvcGVydGllc1xuICAgIHJlbmRlcmVyLmNvbnRleHQgPSBjYWNoZWRSZW5kZXJUYXJnZXQ7XG5cbiAgICB0aGlzLnJlbmRlckNhbnZhcyA9IHRoaXMuX3JlbmRlckNhY2hlZENhbnZhcztcbiAgICB0aGlzLnVwZGF0ZVRyYW5zZm9ybSA9IHRoaXMuZGlzcGxheU9iamVjdFVwZGF0ZVRyYW5zZm9ybTtcbiAgICB0aGlzLmdldEJvdW5kcyAgPSB0aGlzLl9nZXRDYWNoZWRCb3VuZHM7XG5cblxuICAgIC8vIGNyZWF0ZSBvdXIgY2FjaGVkIHNwcml0ZVxuICAgIHRoaXMuX2NhY2hlZFNwcml0ZSA9IG5ldyBjb3JlLlNwcml0ZShyZW5kZXJUZXh0dXJlKTtcbiAgICB0aGlzLl9jYWNoZWRTcHJpdGUud29ybGRUcmFuc2Zvcm0gPSB0aGlzLndvcmxkVHJhbnNmb3JtO1xuICAgIHRoaXMuX2NhY2hlZFNwcml0ZS5hbmNob3IueCA9IC0oIGJvdW5kcy54IC8gYm91bmRzLndpZHRoICk7XG4gICAgdGhpcy5fY2FjaGVkU3ByaXRlLmFuY2hvci55ID0gLSggYm91bmRzLnkgLyBib3VuZHMuaGVpZ2h0ICk7XG5cbiAgICB0aGlzLnVwZGF0ZVRyYW5zZm9ybSgpO1xuXG4gICAgdGhpcy5jb250YWluc1BvaW50ID0gdGhpcy5fY2FjaGVkU3ByaXRlLmNvbnRhaW5zUG9pbnQuYmluZCh0aGlzLl9jYWNoZWRTcHJpdGUpO1xufTtcblxuLyoqXG4qIENhbGN1bGF0ZXMgdGhlIGJvdW5kcyBvZiB0aGUgY2FjaGVkIHNwcml0ZVxuKlxuKiBAcHJpdmF0ZVxuKi9cbkRpc3BsYXlPYmplY3QucHJvdG90eXBlLl9nZXRDYWNoZWRCb3VuZHMgPSBmdW5jdGlvbiAoKVxue1xuICAgIHRoaXMuX2NhY2hlZFNwcml0ZS5fY3VycmVudEJvdW5kcyA9IG51bGw7XG5cbiAgICByZXR1cm4gdGhpcy5fY2FjaGVkU3ByaXRlLmdldEJvdW5kcygpO1xufTtcblxuLyoqXG4qIERlc3Ryb3lzIHRoZSBjYWNoZWQgc3ByaXRlLlxuKlxuKiBAcHJpdmF0ZVxuKi9cbkRpc3BsYXlPYmplY3QucHJvdG90eXBlLl9kZXN0cm95Q2FjaGVkRGlzcGxheU9iamVjdCA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy5fY2FjaGVkU3ByaXRlLl90ZXh0dXJlLmRlc3Ryb3koKTtcbiAgICB0aGlzLl9jYWNoZWRTcHJpdGUgPSBudWxsO1xufTtcblxuRGlzcGxheU9iamVjdC5wcm90b3R5cGUuX2NhY2hlQXNCaXRtYXBEZXN0cm95ID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLmNhY2hlQXNCaXRtYXAgPSBmYWxzZTtcbiAgICB0aGlzLl9vcmlnaW5hbERlc3Ryb3koKTtcbn07XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uL2NvcmUnKTtcblxuLyoqXG4gKiBUaGUgaW5zdGFuY2UgbmFtZSBvZiB0aGUgb2JqZWN0LlxuICpcbiAqIEBtZW1iZXJvZiBQSVhJLkRpc3BsYXlPYmplY3QjXG4gKiBAbWVtYmVyIHtzdHJpbmd9XG4gKi9cbmNvcmUuRGlzcGxheU9iamVjdC5wcm90b3R5cGUubmFtZSA9IG51bGw7XG5cbi8qKlxuKiBSZXR1cm5zIHRoZSBkaXNwbGF5IG9iamVjdCBpbiB0aGUgY29udGFpbmVyXG4qXG4qIEBtZW1iZXJvZiBQSVhJLkNvbnRhaW5lciNcbiogQHBhcmFtIG5hbWUge3N0cmluZ30gaW5zdGFuY2UgbmFtZVxuKiBAcmV0dXJuIHtQSVhJLkRpc3BsYXlPYmplY3R9XG4qL1xuY29yZS5Db250YWluZXIucHJvdG90eXBlLmdldENoaWxkQnlOYW1lID0gZnVuY3Rpb24gKG5hbWUpXG57XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmNoaWxkcmVuLmxlbmd0aDsgaSsrKVxuICAgIHtcbiAgICAgICAgaWYgKHRoaXMuY2hpbGRyZW5baV0ubmFtZSA9PT0gbmFtZSlcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY2hpbGRyZW5baV07XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG59O1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi9jb3JlJyk7XG5cbi8qKlxuKiBSZXR1cm5zIHRoZSBnbG9iYWwgcG9zaXRpb24gb2YgdGhlIGRpc3BsYXlPYmplY3RcbipcbiogQG1lbWJlcm9mIFBJWEkuRGlzcGxheU9iamVjdCNcbiogQHBhcmFtIHBvaW50IHtQb2ludH0gdGhlIHBvaW50IHRvIHdyaXRlIHRoZSBnbG9iYWwgdmFsdWUgdG8uIElmIG51bGwgYSBuZXcgcG9pbnQgd2lsbCBiZSByZXR1cm5lZFxuKiBAcmV0dXJuIHtQb2ludH1cbiovXG5jb3JlLkRpc3BsYXlPYmplY3QucHJvdG90eXBlLmdldEdsb2JhbFBvc2l0aW9uID0gZnVuY3Rpb24gKHBvaW50KVxue1xuICAgIHBvaW50ID0gcG9pbnQgfHwgbmV3IGNvcmUuUG9pbnQoKTtcblxuICAgIGlmKHRoaXMucGFyZW50KVxuICAgIHtcbiAgICAgICAgdGhpcy5kaXNwbGF5T2JqZWN0VXBkYXRlVHJhbnNmb3JtKCk7XG5cbiAgICAgICAgcG9pbnQueCA9IHRoaXMud29ybGRUcmFuc2Zvcm0udHg7XG4gICAgICAgIHBvaW50LnkgPSB0aGlzLndvcmxkVHJhbnNmb3JtLnR5O1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICBwb2ludC54ID0gdGhpcy5wb3NpdGlvbi54O1xuICAgICAgICBwb2ludC55ID0gdGhpcy5wb3NpdGlvbi55O1xuICAgIH1cblxuICAgIHJldHVybiBwb2ludDtcbn07XG4iLCIvKipcbiAqIEBmaWxlICAgICAgICBNYWluIGV4cG9ydCBvZiB0aGUgUElYSSBleHRyYXMgbGlicmFyeVxuICogQGF1dGhvciAgICAgIE1hdCBHcm92ZXMgPG1hdEBnb29kYm95ZGlnaXRhbC5jb20+XG4gKiBAY29weXJpZ2h0ICAgMjAxMy0yMDE1IEdvb2RCb3lEaWdpdGFsXG4gKiBAbGljZW5zZSAgICAge0BsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9waXhpanMvcGl4aS5qcy9ibG9iL21hc3Rlci9MSUNFTlNFfE1JVCBMaWNlbnNlfVxuICovXG5cbnJlcXVpcmUoJy4vY2FjaGVBc0JpdG1hcCcpO1xucmVxdWlyZSgnLi9nZXRDaGlsZEJ5TmFtZScpO1xucmVxdWlyZSgnLi9nZXRHbG9iYWxQb3NpdGlvbicpO1xuXG4vKipcbiAqIEBuYW1lc3BhY2UgUElYSS5leHRyYXNcbiAqL1xubW9kdWxlLmV4cG9ydHMgPSB7XG4gICAgTW92aWVDbGlwOiAgICAgIHJlcXVpcmUoJy4vTW92aWVDbGlwJyksXG4gICAgVGlsaW5nU3ByaXRlOiAgIHJlcXVpcmUoJy4vVGlsaW5nU3ByaXRlJyksXG4gICAgQml0bWFwVGV4dDogICAgIHJlcXVpcmUoJy4vQml0bWFwVGV4dCcpXG59O1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi8uLi9jb3JlJyk7XG4vLyBAc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9zdWJzdGFjay9icmZzL2lzc3Vlcy8yNVxuXG5cbi8vIFRPRE8gKGNlbmdsZXIpIC0gVGhlIFkgaXMgZmxpcHBlZCBpbiB0aGlzIHNoYWRlciBmb3Igc29tZSByZWFzb24uXG5cbi8qKlxuICogQGF1dGhvciBWaWNvIEB2aWNvY290ZWFcbiAqIG9yaWdpbmFsIHNoYWRlciA6IGh0dHBzOi8vd3d3LnNoYWRlcnRveS5jb20vdmlldy9sc3NHRGogYnkgQG1vdkFYMTNoXG4gKi9cblxuLyoqXG4gKiBBbiBBU0NJSSBmaWx0ZXIuXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLkFic3RyYWN0RmlsdGVyXG4gKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzXG4gKi9cbmZ1bmN0aW9uIEFzY2lpRmlsdGVyKClcbntcbiAgICBjb3JlLkFic3RyYWN0RmlsdGVyLmNhbGwodGhpcyxcbiAgICAgICAgLy8gdmVydGV4IHNoYWRlclxuICAgICAgICBudWxsLFxuICAgICAgICAvLyBmcmFnbWVudCBzaGFkZXJcbiAgICAgICAgXCJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcXG5cXG51bmlmb3JtIHZlYzQgZGltZW5zaW9ucztcXG51bmlmb3JtIGZsb2F0IHBpeGVsU2l6ZTtcXG51bmlmb3JtIHNhbXBsZXIyRCB1U2FtcGxlcjtcXG5cXG5mbG9hdCBjaGFyYWN0ZXIoZmxvYXQgbiwgdmVjMiBwKVxcbntcXG4gICAgcCA9IGZsb29yKHAqdmVjMig0LjAsIC00LjApICsgMi41KTtcXG4gICAgaWYgKGNsYW1wKHAueCwgMC4wLCA0LjApID09IHAueCAmJiBjbGFtcChwLnksIDAuMCwgNC4wKSA9PSBwLnkpXFxuICAgIHtcXG4gICAgICAgIGlmIChpbnQobW9kKG4vZXhwMihwLnggKyA1LjAqcC55KSwgMi4wKSkgPT0gMSkgcmV0dXJuIDEuMDtcXG4gICAgfVxcbiAgICByZXR1cm4gMC4wO1xcbn1cXG5cXG52b2lkIG1haW4oKVxcbntcXG4gICAgdmVjMiB1diA9IGdsX0ZyYWdDb29yZC54eTtcXG5cXG4gICAgdmVjMyBjb2wgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIGZsb29yKCB1diAvIHBpeGVsU2l6ZSApICogcGl4ZWxTaXplIC8gZGltZW5zaW9ucy54eSkucmdiO1xcblxcbiAgICBmbG9hdCBncmF5ID0gKGNvbC5yICsgY29sLmcgKyBjb2wuYikgLyAzLjA7XFxuXFxuICAgIGZsb2F0IG4gPSAgNjU1MzYuMDsgICAgICAgICAgICAgLy8gLlxcbiAgICBpZiAoZ3JheSA+IDAuMikgbiA9IDY1NjAwLjA7ICAgIC8vIDpcXG4gICAgaWYgKGdyYXkgPiAwLjMpIG4gPSAzMzI3NzIuMDsgICAvLyAqXFxuICAgIGlmIChncmF5ID4gMC40KSBuID0gMTUyNTUwODYuMDsgLy8gb1xcbiAgICBpZiAoZ3JheSA+IDAuNSkgbiA9IDIzMzg1MTY0LjA7IC8vICZcXG4gICAgaWYgKGdyYXkgPiAwLjYpIG4gPSAxNTI1MjAxNC4wOyAvLyA4XFxuICAgIGlmIChncmF5ID4gMC43KSBuID0gMTMxOTk0NTIuMDsgLy8gQFxcbiAgICBpZiAoZ3JheSA+IDAuOCkgbiA9IDExNTEyODEwLjA7IC8vICNcXG5cXG4gICAgdmVjMiBwID0gbW9kKCB1diAvICggcGl4ZWxTaXplICogMC41ICksIDIuMCkgLSB2ZWMyKDEuMCk7XFxuICAgIGNvbCA9IGNvbCAqIGNoYXJhY3RlcihuLCBwKTtcXG5cXG4gICAgZ2xfRnJhZ0NvbG9yID0gdmVjNChjb2wsIDEuMCk7XFxufVxcblwiLFxuICAgICAgICAvLyBjdXN0b20gdW5pZm9ybXNcbiAgICAgICAge1xuICAgICAgICAgICAgZGltZW5zaW9uczogeyB0eXBlOiAnNGZ2JywgdmFsdWU6IG5ldyBGbG9hdDMyQXJyYXkoWzAsIDAsIDAsIDBdKSB9LFxuICAgICAgICAgICAgcGl4ZWxTaXplOiAgeyB0eXBlOiAnMWYnLCB2YWx1ZTogOCB9XG4gICAgICAgIH1cbiAgICApO1xufVxuXG5Bc2NpaUZpbHRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuQWJzdHJhY3RGaWx0ZXIucHJvdG90eXBlKTtcbkFzY2lpRmlsdGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IEFzY2lpRmlsdGVyO1xubW9kdWxlLmV4cG9ydHMgPSBBc2NpaUZpbHRlcjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoQXNjaWlGaWx0ZXIucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogVGhlIHBpeGVsIHNpemUgdXNlZCBieSB0aGUgZmlsdGVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuQXNjaWlGaWx0ZXIjXG4gICAgICovXG4gICAgc2l6ZToge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVuaWZvcm1zLnBpeGVsU2l6ZS52YWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudW5pZm9ybXMucGl4ZWxTaXplLnZhbHVlID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG59KTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vLi4vY29yZScpLFxuICAgIEJsdXJYRmlsdGVyID0gcmVxdWlyZSgnLi4vYmx1ci9CbHVyWEZpbHRlcicpLFxuICAgIEJsdXJZRmlsdGVyID0gcmVxdWlyZSgnLi4vYmx1ci9CbHVyWUZpbHRlcicpO1xuXG4vKipcbiAqIFRoZSBCbG9vbUZpbHRlciBhcHBsaWVzIGEgR2F1c3NpYW4gYmx1ciB0byBhbiBvYmplY3QuXG4gKiBUaGUgc3RyZW5ndGggb2YgdGhlIGJsdXIgY2FuIGJlIHNldCBmb3IgeC0gYW5kIHktYXhpcyBzZXBhcmF0ZWx5LlxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5BYnN0cmFjdEZpbHRlclxuICogQG1lbWJlcm9mIFBJWEkuZmlsdGVyc1xuICovXG5mdW5jdGlvbiBCbG9vbUZpbHRlcigpXG57XG4gICAgY29yZS5BYnN0cmFjdEZpbHRlci5jYWxsKHRoaXMpO1xuXG4gICAgdGhpcy5ibHVyWEZpbHRlciA9IG5ldyBCbHVyWEZpbHRlcigpO1xuICAgIHRoaXMuYmx1cllGaWx0ZXIgPSBuZXcgQmx1cllGaWx0ZXIoKTtcblxuICAgIHRoaXMuZGVmYXVsdEZpbHRlciA9IG5ldyBjb3JlLkFic3RyYWN0RmlsdGVyKCk7XG59XG5cbkJsb29tRmlsdGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoY29yZS5BYnN0cmFjdEZpbHRlci5wcm90b3R5cGUpO1xuQmxvb21GaWx0ZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gQmxvb21GaWx0ZXI7XG5tb2R1bGUuZXhwb3J0cyA9IEJsb29tRmlsdGVyO1xuXG5CbG9vbUZpbHRlci5wcm90b3R5cGUuYXBwbHlGaWx0ZXIgPSBmdW5jdGlvbiAocmVuZGVyZXIsIGlucHV0LCBvdXRwdXQpXG57XG4gICAgdmFyIHJlbmRlclRhcmdldCA9IHJlbmRlcmVyLmZpbHRlck1hbmFnZXIuZ2V0UmVuZGVyVGFyZ2V0KHRydWUpO1xuXG4gICAgLy9UT0RPIC0gY29weVRleFN1YkltYWdlMkQgY291bGQgYmUgdXNlZCBoZXJlP1xuICAgIHRoaXMuZGVmYXVsdEZpbHRlci5hcHBseUZpbHRlcihyZW5kZXJlciwgaW5wdXQsIG91dHB1dCk7XG5cbiAgICB0aGlzLmJsdXJYRmlsdGVyLmFwcGx5RmlsdGVyKHJlbmRlcmVyLCBpbnB1dCwgcmVuZGVyVGFyZ2V0KTtcblxuICAgIHJlbmRlcmVyLmJsZW5kTW9kZU1hbmFnZXIuc2V0QmxlbmRNb2RlKGNvcmUuQkxFTkRfTU9ERVMuU0NSRUVOKTtcblxuICAgIHRoaXMuYmx1cllGaWx0ZXIuYXBwbHlGaWx0ZXIocmVuZGVyZXIsIHJlbmRlclRhcmdldCwgb3V0cHV0KTtcblxuICAgIHJlbmRlcmVyLmJsZW5kTW9kZU1hbmFnZXIuc2V0QmxlbmRNb2RlKGNvcmUuQkxFTkRfTU9ERVMuTk9STUFMKTtcblxuICAgIHJlbmRlcmVyLmZpbHRlck1hbmFnZXIucmV0dXJuUmVuZGVyVGFyZ2V0KHJlbmRlclRhcmdldCk7XG59O1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhCbG9vbUZpbHRlci5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBzdHJlbmd0aCBvZiBib3RoIHRoZSBibHVyWCBhbmQgYmx1clkgcHJvcGVydGllcyBzaW11bHRhbmVvdXNseVxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJPZiBQSVhJLmZpbHRlcnMuQmxvb21GaWx0ZXIjXG4gICAgICogQGRlZmF1bHQgMlxuICAgICAqL1xuICAgIGJsdXI6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5ibHVyWEZpbHRlci5ibHVyO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5ibHVyWEZpbHRlci5ibHVyID0gdGhpcy5ibHVyWUZpbHRlci5ibHVyID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgc3RyZW5ndGggb2YgdGhlIGJsdXJYIHByb3BlcnR5XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlck9mIFBJWEkuZmlsdGVycy5CbG9vbUZpbHRlciNcbiAgICAgKiBAZGVmYXVsdCAyXG4gICAgICovXG4gICAgYmx1clg6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5ibHVyWEZpbHRlci5ibHVyO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5ibHVyWEZpbHRlci5ibHVyID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgc3RyZW5ndGggb2YgdGhlIGJsdXJZIHByb3BlcnR5XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlck9mIFBJWEkuZmlsdGVycy5CbG9vbUZpbHRlciNcbiAgICAgKiBAZGVmYXVsdCAyXG4gICAgICovXG4gICAgYmx1clk6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5ibHVyWUZpbHRlci5ibHVyO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5ibHVyWUZpbHRlci5ibHVyID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG59KTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vLi4vY29yZScpO1xuXG5cbi8qKlxuICogVGhlIEJsdXJEaXJGaWx0ZXIgYXBwbGllcyBhIEdhdXNzaWFuIGJsdXIgdG93YXJkIGEgZGlyZWN0aW9uIHRvIGFuIG9iamVjdC5cbiAqXG4gKiBAY2xhc3NcbiAqIEBwYXJhbSB7bnVtYmVyfSBkaXJYXG4gKiBAcGFyYW0ge251bWJlcn0gZGlyWVxuICogQGV4dGVuZHMgUElYSS5BYnN0cmFjdEZpbHRlclxuICogQG1lbWJlcm9mIFBJWEkuZmlsdGVyc1xuICovXG5mdW5jdGlvbiBCbHVyRGlyRmlsdGVyKGRpclgsIGRpclkpXG57XG4gICAgY29yZS5BYnN0cmFjdEZpbHRlci5jYWxsKHRoaXMsXG4gICAgICAgIC8vIHZlcnRleCBzaGFkZXJcbiAgICAgICAgXCJhdHRyaWJ1dGUgdmVjMiBhVmVydGV4UG9zaXRpb247XFxuYXR0cmlidXRlIHZlYzIgYVRleHR1cmVDb29yZDtcXG5hdHRyaWJ1dGUgdmVjNCBhQ29sb3I7XFxuXFxudW5pZm9ybSBmbG9hdCBzdHJlbmd0aDtcXG51bmlmb3JtIGZsb2F0IGRpclg7XFxudW5pZm9ybSBmbG9hdCBkaXJZO1xcbnVuaWZvcm0gbWF0MyBwcm9qZWN0aW9uTWF0cml4O1xcblxcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xcbnZhcnlpbmcgdmVjNCB2Q29sb3I7XFxudmFyeWluZyB2ZWMyIHZCbHVyVGV4Q29vcmRzWzNdO1xcblxcbnZvaWQgbWFpbih2b2lkKVxcbntcXG4gICAgZ2xfUG9zaXRpb24gPSB2ZWM0KChwcm9qZWN0aW9uTWF0cml4ICogdmVjMygoYVZlcnRleFBvc2l0aW9uKSwgMS4wKSkueHksIDAuMCwgMS4wKTtcXG4gICAgdlRleHR1cmVDb29yZCA9IGFUZXh0dXJlQ29vcmQ7XFxuXFxuICAgIHZCbHVyVGV4Q29vcmRzWzBdID0gYVRleHR1cmVDb29yZCArIHZlYzIoICgwLjAwNCAqIHN0cmVuZ3RoKSAqIGRpclgsICgwLjAwNCAqIHN0cmVuZ3RoKSAqIGRpclkgKTtcXG4gICAgdkJsdXJUZXhDb29yZHNbMV0gPSBhVGV4dHVyZUNvb3JkICsgdmVjMiggKDAuMDA4ICogc3RyZW5ndGgpICogZGlyWCwgKDAuMDA4ICogc3RyZW5ndGgpICogZGlyWSApO1xcbiAgICB2Qmx1clRleENvb3Jkc1syXSA9IGFUZXh0dXJlQ29vcmQgKyB2ZWMyKCAoMC4wMTIgKiBzdHJlbmd0aCkgKiBkaXJYLCAoMC4wMTIgKiBzdHJlbmd0aCkgKiBkaXJZICk7XFxuXFxuICAgIHZDb2xvciA9IHZlYzQoYUNvbG9yLnJnYiAqIGFDb2xvci5hLCBhQ29sb3IuYSk7XFxufVxcblwiLFxuICAgICAgICAvLyBmcmFnbWVudCBzaGFkZXJcbiAgICAgICAgXCJwcmVjaXNpb24gbG93cCBmbG9hdDtcXG5cXG52YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDtcXG52YXJ5aW5nIHZlYzIgdkJsdXJUZXhDb29yZHNbM107XFxudmFyeWluZyB2ZWM0IHZDb2xvcjtcXG5cXG51bmlmb3JtIHNhbXBsZXIyRCB1U2FtcGxlcjtcXG5cXG52b2lkIG1haW4odm9pZClcXG57XFxuICAgIGdsX0ZyYWdDb2xvciA9IHZlYzQoMC4wKTtcXG5cXG4gICAgZ2xfRnJhZ0NvbG9yICs9IHRleHR1cmUyRCh1U2FtcGxlciwgdlRleHR1cmVDb29yZCAgICAgKSAqIDAuMzk4OTQyMjgwNDAxNDMyNztcXG4gICAgZ2xfRnJhZ0NvbG9yICs9IHRleHR1cmUyRCh1U2FtcGxlciwgdkJsdXJUZXhDb29yZHNbIDBdKSAqIDAuMjQxOTcwNzI0NTE5MTQ1NDtcXG4gICAgZ2xfRnJhZ0NvbG9yICs9IHRleHR1cmUyRCh1U2FtcGxlciwgdkJsdXJUZXhDb29yZHNbIDFdKSAqIDAuMDUzOTkwOTY2NTEzMTg5ODU7XFxuICAgIGdsX0ZyYWdDb2xvciArPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZCbHVyVGV4Q29vcmRzWyAyXSkgKiAwLjAwNDQzMTg0ODQxMTkzODM0MTtcXG59XFxuXCIsXG4gICAgICAgIC8vIHNldCB0aGUgdW5pZm9ybXNcbiAgICAgICAge1xuICAgICAgICAgICAgc3RyZW5ndGg6IHsgdHlwZTogJzFmJywgdmFsdWU6IDEgfSxcbiAgICAgICAgICAgIGRpclg6IHsgdHlwZTogJzFmJywgdmFsdWU6IGRpclggfHwgMCB9LFxuICAgICAgICAgICAgZGlyWTogeyB0eXBlOiAnMWYnLCB2YWx1ZTogZGlyWSB8fCAwIH1cbiAgICAgICAgfVxuICAgICk7XG5cbiAgICB0aGlzLmRlZmF1bHRGaWx0ZXIgPSBuZXcgY29yZS5BYnN0cmFjdEZpbHRlcigpO1xuXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgbnVtYmVyIG9mIHBhc3NlcyBmb3IgYmx1ci4gTW9yZSBwYXNzZXMgbWVhbnMgaGlnaGVyIHF1YWlsaXR5IGJsdXJpbmcuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMVxuICAgICAqL1xuICAgIHRoaXMucGFzc2VzID0gMTtcblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIFggZGlyZWN0aW9uIG9mIHRoZSBibHVyXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMFxuICAgICAqL1xuICAgIHRoaXMuZGlyWCA9IGRpclggfHwgMDtcblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIFkgZGlyZWN0aW9uIG9mIHRoZSBibHVyXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMFxuICAgICAqL1xuICAgIHRoaXMuZGlyWSA9IGRpclkgfHwgMDtcblxuICAgIHRoaXMuc3RyZW5ndGggPSA0O1xufVxuXG5CbHVyRGlyRmlsdGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoY29yZS5BYnN0cmFjdEZpbHRlci5wcm90b3R5cGUpO1xuQmx1ckRpckZpbHRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBCbHVyRGlyRmlsdGVyO1xubW9kdWxlLmV4cG9ydHMgPSBCbHVyRGlyRmlsdGVyO1xuXG5CbHVyRGlyRmlsdGVyLnByb3RvdHlwZS5hcHBseUZpbHRlciA9IGZ1bmN0aW9uIChyZW5kZXJlciwgaW5wdXQsIG91dHB1dCwgY2xlYXIpIHtcblxuICAgIHZhciBzaGFkZXIgPSB0aGlzLmdldFNoYWRlcihyZW5kZXJlcik7XG5cbiAgICB0aGlzLnVuaWZvcm1zLnN0cmVuZ3RoLnZhbHVlID0gdGhpcy5zdHJlbmd0aCAvIDQgLyB0aGlzLnBhc3NlcyAqIChpbnB1dC5mcmFtZS53aWR0aCAvIGlucHV0LnNpemUud2lkdGgpO1xuXG4gICAgaWYgKHRoaXMucGFzc2VzID09PSAxKSB7XG4gICAgICAgIHJlbmRlcmVyLmZpbHRlck1hbmFnZXIuYXBwbHlGaWx0ZXIoc2hhZGVyLCBpbnB1dCwgb3V0cHV0LCBjbGVhcik7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgdmFyIHJlbmRlclRhcmdldCA9IHJlbmRlcmVyLmZpbHRlck1hbmFnZXIuZ2V0UmVuZGVyVGFyZ2V0KHRydWUpO1xuXG4gICAgICAgIHJlbmRlcmVyLmZpbHRlck1hbmFnZXIuYXBwbHlGaWx0ZXIoc2hhZGVyLCBpbnB1dCwgcmVuZGVyVGFyZ2V0LCBjbGVhcik7XG5cbiAgICAgICAgZm9yKHZhciBpID0gMDsgaSA8IHRoaXMucGFzc2VzLTI7IGkrKylcbiAgICAgICAge1xuICAgICAgICAgICAgLy90aGlzLnVuaWZvcm1zLnN0cmVuZ3RoLnZhbHVlID0gdGhpcy5zdHJlbmd0aCAvIDQgLyAodGhpcy5wYXNzZXMrKGkqMikpICogKGlucHV0LmZyYW1lLndpZHRoIC8gaW5wdXQuc2l6ZS53aWR0aCk7XG4gICAgICAgICAgICByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLmFwcGx5RmlsdGVyKHNoYWRlciwgcmVuZGVyVGFyZ2V0LCByZW5kZXJUYXJnZXQsIGNsZWFyKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJlbmRlcmVyLmZpbHRlck1hbmFnZXIuYXBwbHlGaWx0ZXIoc2hhZGVyLCByZW5kZXJUYXJnZXQsIG91dHB1dCwgY2xlYXIpO1xuXG4gICAgICAgIHJlbmRlcmVyLmZpbHRlck1hbmFnZXIucmV0dXJuUmVuZGVyVGFyZ2V0KHJlbmRlclRhcmdldCk7XG4gICAgfVxufTtcblxuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhCbHVyRGlyRmlsdGVyLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIHN0cmVuZ3RoIG9mIGJvdGggdGhlIGJsdXIuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5CbHVyRGlyRmlsdGVyI1xuICAgICAqIEBkZWZhdWx0IDJcbiAgICAgKi9cbiAgICBibHVyOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuc3RyZW5ndGg7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnBhZGRpbmcgPSB2YWx1ZSAqIDAuNTtcbiAgICAgICAgICAgIHRoaXMuc3RyZW5ndGggPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgWCBkaXJlY3Rpb24gb2YgdGhlIGJsdXIuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5CbHVyWUZpbHRlciNcbiAgICAgKiBAZGVmYXVsdCAwXG4gICAgICovXG4gICAgZGlyWDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmRpclg7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLmRpclgudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgWSBkaXJlY3Rpb24gb2YgdGhlIGJsdXIuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5CbHVyRGlyRmlsdGVyI1xuICAgICAqIEBkZWZhdWx0IDBcbiAgICAgKi9cbiAgICBkaXJZOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZGlyWTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudW5pZm9ybXMuZGlyWS52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfVxufSk7XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uLy4uL2NvcmUnKSxcbiAgICBCbHVyWEZpbHRlciA9IHJlcXVpcmUoJy4vQmx1clhGaWx0ZXInKSxcbiAgICBCbHVyWUZpbHRlciA9IHJlcXVpcmUoJy4vQmx1cllGaWx0ZXInKTtcblxuLyoqXG4gKiBUaGUgQmx1ckZpbHRlciBhcHBsaWVzIGEgR2F1c3NpYW4gYmx1ciB0byBhbiBvYmplY3QuXG4gKiBUaGUgc3RyZW5ndGggb2YgdGhlIGJsdXIgY2FuIGJlIHNldCBmb3IgeC0gYW5kIHktYXhpcyBzZXBhcmF0ZWx5LlxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5BYnN0cmFjdEZpbHRlclxuICogQG1lbWJlcm9mIFBJWEkuZmlsdGVyc1xuICovXG5mdW5jdGlvbiBCbHVyRmlsdGVyKClcbntcbiAgICBjb3JlLkFic3RyYWN0RmlsdGVyLmNhbGwodGhpcyk7XG5cbiAgICB0aGlzLmJsdXJYRmlsdGVyID0gbmV3IEJsdXJYRmlsdGVyKCk7XG4gICAgdGhpcy5ibHVyWUZpbHRlciA9IG5ldyBCbHVyWUZpbHRlcigpO1xufVxuXG5CbHVyRmlsdGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoY29yZS5BYnN0cmFjdEZpbHRlci5wcm90b3R5cGUpO1xuQmx1ckZpbHRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBCbHVyRmlsdGVyO1xubW9kdWxlLmV4cG9ydHMgPSBCbHVyRmlsdGVyO1xuXG5CbHVyRmlsdGVyLnByb3RvdHlwZS5hcHBseUZpbHRlciA9IGZ1bmN0aW9uIChyZW5kZXJlciwgaW5wdXQsIG91dHB1dClcbntcbiAgICB2YXIgcmVuZGVyVGFyZ2V0ID0gcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5nZXRSZW5kZXJUYXJnZXQodHJ1ZSk7XG5cbiAgICB0aGlzLmJsdXJYRmlsdGVyLmFwcGx5RmlsdGVyKHJlbmRlcmVyLCBpbnB1dCwgcmVuZGVyVGFyZ2V0KTtcbiAgICB0aGlzLmJsdXJZRmlsdGVyLmFwcGx5RmlsdGVyKHJlbmRlcmVyLCByZW5kZXJUYXJnZXQsIG91dHB1dCk7XG5cbiAgICByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLnJldHVyblJlbmRlclRhcmdldChyZW5kZXJUYXJnZXQpO1xufTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoQmx1ckZpbHRlci5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBzdHJlbmd0aCBvZiBib3RoIHRoZSBibHVyWCBhbmQgYmx1clkgcHJvcGVydGllcyBzaW11bHRhbmVvdXNseVxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJPZiBQSVhJLmZpbHRlcnMuQmx1ckZpbHRlciNcbiAgICAgKiBAZGVmYXVsdCAyXG4gICAgICovXG4gICAgYmx1cjoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmJsdXJYRmlsdGVyLmJsdXI7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnBhZGRpbmcgPSBNYXRoLmFicyh2YWx1ZSkgKiAwLjU7XG4gICAgICAgICAgICB0aGlzLmJsdXJYRmlsdGVyLmJsdXIgPSB0aGlzLmJsdXJZRmlsdGVyLmJsdXIgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBudW1iZXIgb2YgcGFzc2VzIGZvciBibHVyLiBNb3JlIHBhc3NlcyBtZWFucyBoaWdoZXIgcXVhaWxpdHkgYmx1cmluZy5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLkJsdXJZRmlsdGVyI1xuICAgICAqIEBkZWZhdWx0IDFcbiAgICAgKi9cbiAgICBwYXNzZXM6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gIHRoaXMuYmx1clhGaWx0ZXIucGFzc2VzO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5ibHVyWEZpbHRlci5wYXNzZXMgPSB0aGlzLmJsdXJZRmlsdGVyLnBhc3NlcyA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIHN0cmVuZ3RoIG9mIHRoZSBibHVyWCBwcm9wZXJ0eVxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJPZiBQSVhJLmZpbHRlcnMuQmx1ckZpbHRlciNcbiAgICAgKiBAZGVmYXVsdCAyXG4gICAgICovXG4gICAgYmx1clg6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5ibHVyWEZpbHRlci5ibHVyO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5ibHVyWEZpbHRlci5ibHVyID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgc3RyZW5ndGggb2YgdGhlIGJsdXJZIHByb3BlcnR5XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlck9mIFBJWEkuZmlsdGVycy5CbHVyRmlsdGVyI1xuICAgICAqIEBkZWZhdWx0IDJcbiAgICAgKi9cbiAgICBibHVyWToge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmJsdXJZRmlsdGVyLmJsdXI7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmJsdXJZRmlsdGVyLmJsdXIgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi8uLi9jb3JlJyk7XG4vLyBAc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9zdWJzdGFjay9icmZzL2lzc3Vlcy8yNVxuXG5cbi8qKlxuICogVGhlIEJsdXJYRmlsdGVyIGFwcGxpZXMgYSBob3Jpem9udGFsIEdhdXNzaWFuIGJsdXIgdG8gYW4gb2JqZWN0LlxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5BYnN0cmFjdEZpbHRlclxuICogQG1lbWJlcm9mIFBJWEkuZmlsdGVyc1xuICovXG5mdW5jdGlvbiBCbHVyWEZpbHRlcigpXG57XG4gICAgY29yZS5BYnN0cmFjdEZpbHRlci5jYWxsKHRoaXMsXG4gICAgICAgIC8vIHZlcnRleCBzaGFkZXJcbiAgICAgICAgXCJhdHRyaWJ1dGUgdmVjMiBhVmVydGV4UG9zaXRpb247XFxuYXR0cmlidXRlIHZlYzIgYVRleHR1cmVDb29yZDtcXG5hdHRyaWJ1dGUgdmVjNCBhQ29sb3I7XFxuXFxudW5pZm9ybSBmbG9hdCBzdHJlbmd0aDtcXG51bmlmb3JtIG1hdDMgcHJvamVjdGlvbk1hdHJpeDtcXG5cXG52YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDtcXG52YXJ5aW5nIHZlYzQgdkNvbG9yO1xcbnZhcnlpbmcgdmVjMiB2Qmx1clRleENvb3Jkc1s2XTtcXG5cXG52b2lkIG1haW4odm9pZClcXG57XFxuICAgIGdsX1Bvc2l0aW9uID0gdmVjNCgocHJvamVjdGlvbk1hdHJpeCAqIHZlYzMoKGFWZXJ0ZXhQb3NpdGlvbiksIDEuMCkpLnh5LCAwLjAsIDEuMCk7XFxuICAgIHZUZXh0dXJlQ29vcmQgPSBhVGV4dHVyZUNvb3JkO1xcblxcbiAgICB2Qmx1clRleENvb3Jkc1sgMF0gPSBhVGV4dHVyZUNvb3JkICsgdmVjMigtMC4wMTIgKiBzdHJlbmd0aCwgMC4wKTtcXG4gICAgdkJsdXJUZXhDb29yZHNbIDFdID0gYVRleHR1cmVDb29yZCArIHZlYzIoLTAuMDA4ICogc3RyZW5ndGgsIDAuMCk7XFxuICAgIHZCbHVyVGV4Q29vcmRzWyAyXSA9IGFUZXh0dXJlQ29vcmQgKyB2ZWMyKC0wLjAwNCAqIHN0cmVuZ3RoLCAwLjApO1xcbiAgICB2Qmx1clRleENvb3Jkc1sgM10gPSBhVGV4dHVyZUNvb3JkICsgdmVjMiggMC4wMDQgKiBzdHJlbmd0aCwgMC4wKTtcXG4gICAgdkJsdXJUZXhDb29yZHNbIDRdID0gYVRleHR1cmVDb29yZCArIHZlYzIoIDAuMDA4ICogc3RyZW5ndGgsIDAuMCk7XFxuICAgIHZCbHVyVGV4Q29vcmRzWyA1XSA9IGFUZXh0dXJlQ29vcmQgKyB2ZWMyKCAwLjAxMiAqIHN0cmVuZ3RoLCAwLjApO1xcblxcbiAgICB2Q29sb3IgPSB2ZWM0KGFDb2xvci5yZ2IgKiBhQ29sb3IuYSwgYUNvbG9yLmEpO1xcbn1cXG5cIixcbiAgICAgICAgLy8gZnJhZ21lbnQgc2hhZGVyXG4gICAgICAgIFwicHJlY2lzaW9uIGxvd3AgZmxvYXQ7XFxuXFxudmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7XFxudmFyeWluZyB2ZWMyIHZCbHVyVGV4Q29vcmRzWzZdO1xcbnZhcnlpbmcgdmVjNCB2Q29sb3I7XFxuXFxudW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXI7XFxuXFxudm9pZCBtYWluKHZvaWQpXFxue1xcbiAgICBnbF9GcmFnQ29sb3IgPSB2ZWM0KDAuMCk7XFxuXFxuICAgIGdsX0ZyYWdDb2xvciArPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZCbHVyVGV4Q29vcmRzWyAwXSkqMC4wMDQ0MzE4NDg0MTE5MzgzNDE7XFxuICAgIGdsX0ZyYWdDb2xvciArPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZCbHVyVGV4Q29vcmRzWyAxXSkqMC4wNTM5OTA5NjY1MTMxODk4NTtcXG4gICAgZ2xfRnJhZ0NvbG9yICs9IHRleHR1cmUyRCh1U2FtcGxlciwgdkJsdXJUZXhDb29yZHNbIDJdKSowLjI0MTk3MDcyNDUxOTE0NTQ7XFxuICAgIGdsX0ZyYWdDb2xvciArPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZUZXh0dXJlQ29vcmQgICAgICkqMC4zOTg5NDIyODA0MDE0MzI3O1xcbiAgICBnbF9GcmFnQ29sb3IgKz0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2Qmx1clRleENvb3Jkc1sgM10pKjAuMjQxOTcwNzI0NTE5MTQ1NDtcXG4gICAgZ2xfRnJhZ0NvbG9yICs9IHRleHR1cmUyRCh1U2FtcGxlciwgdkJsdXJUZXhDb29yZHNbIDRdKSowLjA1Mzk5MDk2NjUxMzE4OTg1O1xcbiAgICBnbF9GcmFnQ29sb3IgKz0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2Qmx1clRleENvb3Jkc1sgNV0pKjAuMDA0NDMxODQ4NDExOTM4MzQxO1xcbn1cXG5cIixcbiAgICAgICAgLy8gc2V0IHRoZSB1bmlmb3Jtc1xuICAgICAgICB7XG4gICAgICAgICAgICBzdHJlbmd0aDogeyB0eXBlOiAnMWYnLCB2YWx1ZTogMSB9XG4gICAgICAgIH1cbiAgICApO1xuXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgbnVtYmVyIG9mIHBhc3NlcyBmb3IgYmx1ci4gTW9yZSBwYXNzZXMgbWVhbnMgaGlnaGVyIHF1YWlsaXR5IGJsdXJpbmcuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMVxuICAgICAqL1xuICAgIHRoaXMucGFzc2VzID0gMTtcblxuICAgIHRoaXMuc3RyZW5ndGggPSA0O1xufVxuXG5CbHVyWEZpbHRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuQWJzdHJhY3RGaWx0ZXIucHJvdG90eXBlKTtcbkJsdXJYRmlsdGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IEJsdXJYRmlsdGVyO1xubW9kdWxlLmV4cG9ydHMgPSBCbHVyWEZpbHRlcjtcblxuQmx1clhGaWx0ZXIucHJvdG90eXBlLmFwcGx5RmlsdGVyID0gZnVuY3Rpb24gKHJlbmRlcmVyLCBpbnB1dCwgb3V0cHV0LCBjbGVhcilcbntcbiAgICB2YXIgc2hhZGVyID0gdGhpcy5nZXRTaGFkZXIocmVuZGVyZXIpO1xuXG4gICAgdGhpcy51bmlmb3Jtcy5zdHJlbmd0aC52YWx1ZSA9IHRoaXMuc3RyZW5ndGggLyA0IC8gdGhpcy5wYXNzZXMgKiAoaW5wdXQuZnJhbWUud2lkdGggLyBpbnB1dC5zaXplLndpZHRoKTtcblxuICAgIGlmKHRoaXMucGFzc2VzID09PSAxKVxuICAgIHtcbiAgICAgICAgcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5hcHBseUZpbHRlcihzaGFkZXIsIGlucHV0LCBvdXRwdXQsIGNsZWFyKTtcbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgdmFyIHJlbmRlclRhcmdldCA9IHJlbmRlcmVyLmZpbHRlck1hbmFnZXIuZ2V0UmVuZGVyVGFyZ2V0KHRydWUpO1xuICAgICAgICB2YXIgZmxpcCA9IGlucHV0O1xuICAgICAgICB2YXIgZmxvcCA9IHJlbmRlclRhcmdldDtcblxuICAgICAgICBmb3IodmFyIGkgPSAwOyBpIDwgdGhpcy5wYXNzZXMtMTsgaSsrKVxuICAgICAgICB7XG4gICAgICAgICAgICByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLmFwcGx5RmlsdGVyKHNoYWRlciwgZmxpcCwgZmxvcCwgdHJ1ZSk7XG5cbiAgICAgICAgICAgdmFyIHRlbXAgPSBmbG9wO1xuICAgICAgICAgICBmbG9wID0gZmxpcDtcbiAgICAgICAgICAgZmxpcCA9IHRlbXA7XG4gICAgICAgIH1cblxuICAgICAgICByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLmFwcGx5RmlsdGVyKHNoYWRlciwgZmxpcCwgb3V0cHV0LCBjbGVhcik7XG5cbiAgICAgICAgcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5yZXR1cm5SZW5kZXJUYXJnZXQocmVuZGVyVGFyZ2V0KTtcbiAgICB9XG59O1xuXG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKEJsdXJYRmlsdGVyLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIHN0cmVuZ3RoIG9mIGJvdGggdGhlIGJsdXIuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5CbHVyWEZpbHRlciNcbiAgICAgKiBAZGVmYXVsdCAyXG4gICAgICovXG4gICAgYmx1cjoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiAgdGhpcy5zdHJlbmd0aDtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMucGFkZGluZyA9ICBNYXRoLmFicyh2YWx1ZSkgKiAwLjU7XG4gICAgICAgICAgICB0aGlzLnN0cmVuZ3RoID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG59KTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vLi4vY29yZScpO1xuLy8gQHNlZSBodHRwczovL2dpdGh1Yi5jb20vc3Vic3RhY2svYnJmcy9pc3N1ZXMvMjVcblxuXG4vKipcbiAqIFRoZSBCbHVyWUZpbHRlciBhcHBsaWVzIGEgaG9yaXpvbnRhbCBHYXVzc2lhbiBibHVyIHRvIGFuIG9iamVjdC5cbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQWJzdHJhY3RGaWx0ZXJcbiAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnNcbiAqL1xuZnVuY3Rpb24gQmx1cllGaWx0ZXIoKVxue1xuICAgIGNvcmUuQWJzdHJhY3RGaWx0ZXIuY2FsbCh0aGlzLFxuICAgICAgICAvLyB2ZXJ0ZXggc2hhZGVyXG4gICAgICAgIFwiYXR0cmlidXRlIHZlYzIgYVZlcnRleFBvc2l0aW9uO1xcbmF0dHJpYnV0ZSB2ZWMyIGFUZXh0dXJlQ29vcmQ7XFxuYXR0cmlidXRlIHZlYzQgYUNvbG9yO1xcblxcbnVuaWZvcm0gZmxvYXQgc3RyZW5ndGg7XFxudW5pZm9ybSBtYXQzIHByb2plY3Rpb25NYXRyaXg7XFxuXFxudmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7XFxudmFyeWluZyB2ZWM0IHZDb2xvcjtcXG52YXJ5aW5nIHZlYzIgdkJsdXJUZXhDb29yZHNbNl07XFxuXFxudm9pZCBtYWluKHZvaWQpXFxue1xcbiAgICBnbF9Qb3NpdGlvbiA9IHZlYzQoKHByb2plY3Rpb25NYXRyaXggKiB2ZWMzKChhVmVydGV4UG9zaXRpb24pLCAxLjApKS54eSwgMC4wLCAxLjApO1xcbiAgICB2VGV4dHVyZUNvb3JkID0gYVRleHR1cmVDb29yZDtcXG5cXG4gICAgdkJsdXJUZXhDb29yZHNbIDBdID0gYVRleHR1cmVDb29yZCArIHZlYzIoMC4wLCAtMC4wMTIgKiBzdHJlbmd0aCk7XFxuICAgIHZCbHVyVGV4Q29vcmRzWyAxXSA9IGFUZXh0dXJlQ29vcmQgKyB2ZWMyKDAuMCwgLTAuMDA4ICogc3RyZW5ndGgpO1xcbiAgICB2Qmx1clRleENvb3Jkc1sgMl0gPSBhVGV4dHVyZUNvb3JkICsgdmVjMigwLjAsIC0wLjAwNCAqIHN0cmVuZ3RoKTtcXG4gICAgdkJsdXJUZXhDb29yZHNbIDNdID0gYVRleHR1cmVDb29yZCArIHZlYzIoMC4wLCAgMC4wMDQgKiBzdHJlbmd0aCk7XFxuICAgIHZCbHVyVGV4Q29vcmRzWyA0XSA9IGFUZXh0dXJlQ29vcmQgKyB2ZWMyKDAuMCwgIDAuMDA4ICogc3RyZW5ndGgpO1xcbiAgICB2Qmx1clRleENvb3Jkc1sgNV0gPSBhVGV4dHVyZUNvb3JkICsgdmVjMigwLjAsICAwLjAxMiAqIHN0cmVuZ3RoKTtcXG5cXG4gICB2Q29sb3IgPSB2ZWM0KGFDb2xvci5yZ2IgKiBhQ29sb3IuYSwgYUNvbG9yLmEpO1xcbn1cXG5cIixcbiAgICAgICAgLy8gZnJhZ21lbnQgc2hhZGVyXG4gICAgICAgIFwicHJlY2lzaW9uIGxvd3AgZmxvYXQ7XFxuXFxudmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7XFxudmFyeWluZyB2ZWMyIHZCbHVyVGV4Q29vcmRzWzZdO1xcbnZhcnlpbmcgdmVjNCB2Q29sb3I7XFxuXFxudW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXI7XFxuXFxudm9pZCBtYWluKHZvaWQpXFxue1xcbiAgICBnbF9GcmFnQ29sb3IgPSB2ZWM0KDAuMCk7XFxuXFxuICAgIGdsX0ZyYWdDb2xvciArPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZCbHVyVGV4Q29vcmRzWyAwXSkqMC4wMDQ0MzE4NDg0MTE5MzgzNDE7XFxuICAgIGdsX0ZyYWdDb2xvciArPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZCbHVyVGV4Q29vcmRzWyAxXSkqMC4wNTM5OTA5NjY1MTMxODk4NTtcXG4gICAgZ2xfRnJhZ0NvbG9yICs9IHRleHR1cmUyRCh1U2FtcGxlciwgdkJsdXJUZXhDb29yZHNbIDJdKSowLjI0MTk3MDcyNDUxOTE0NTQ7XFxuICAgIGdsX0ZyYWdDb2xvciArPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZUZXh0dXJlQ29vcmQgICAgICkqMC4zOTg5NDIyODA0MDE0MzI3O1xcbiAgICBnbF9GcmFnQ29sb3IgKz0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2Qmx1clRleENvb3Jkc1sgM10pKjAuMjQxOTcwNzI0NTE5MTQ1NDtcXG4gICAgZ2xfRnJhZ0NvbG9yICs9IHRleHR1cmUyRCh1U2FtcGxlciwgdkJsdXJUZXhDb29yZHNbIDRdKSowLjA1Mzk5MDk2NjUxMzE4OTg1O1xcbiAgICBnbF9GcmFnQ29sb3IgKz0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2Qmx1clRleENvb3Jkc1sgNV0pKjAuMDA0NDMxODQ4NDExOTM4MzQxO1xcbn1cXG5cIixcbiAgICAgICAgLy8gc2V0IHRoZSB1bmlmb3Jtc1xuICAgICAgICB7XG4gICAgICAgICAgICBzdHJlbmd0aDogeyB0eXBlOiAnMWYnLCB2YWx1ZTogMSB9XG4gICAgICAgIH1cbiAgICApO1xuXG4gICAgdGhpcy5wYXNzZXMgPSAxO1xuICAgIHRoaXMuc3RyZW5ndGggPSA0O1xufVxuXG5CbHVyWUZpbHRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuQWJzdHJhY3RGaWx0ZXIucHJvdG90eXBlKTtcbkJsdXJZRmlsdGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IEJsdXJZRmlsdGVyO1xubW9kdWxlLmV4cG9ydHMgPSBCbHVyWUZpbHRlcjtcblxuQmx1cllGaWx0ZXIucHJvdG90eXBlLmFwcGx5RmlsdGVyID0gZnVuY3Rpb24gKHJlbmRlcmVyLCBpbnB1dCwgb3V0cHV0LCBjbGVhcilcbntcbiAgICB2YXIgc2hhZGVyID0gdGhpcy5nZXRTaGFkZXIocmVuZGVyZXIpO1xuXG4gICAgdGhpcy51bmlmb3Jtcy5zdHJlbmd0aC52YWx1ZSA9IE1hdGguYWJzKHRoaXMuc3RyZW5ndGgpIC8gNCAvIHRoaXMucGFzc2VzICogKGlucHV0LmZyYW1lLmhlaWdodCAvIGlucHV0LnNpemUuaGVpZ2h0KTtcblxuICAgIGlmKHRoaXMucGFzc2VzID09PSAxKVxuICAgIHtcbiAgICAgICAgcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5hcHBseUZpbHRlcihzaGFkZXIsIGlucHV0LCBvdXRwdXQsIGNsZWFyKTtcbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgdmFyIHJlbmRlclRhcmdldCA9IHJlbmRlcmVyLmZpbHRlck1hbmFnZXIuZ2V0UmVuZGVyVGFyZ2V0KHRydWUpO1xuICAgICAgICB2YXIgZmxpcCA9IGlucHV0O1xuICAgICAgICB2YXIgZmxvcCA9IHJlbmRlclRhcmdldDtcblxuICAgICAgICBmb3IodmFyIGkgPSAwOyBpIDwgdGhpcy5wYXNzZXMtMTsgaSsrKVxuICAgICAgICB7XG4gICAgICAgICAgICByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLmFwcGx5RmlsdGVyKHNoYWRlciwgZmxpcCwgZmxvcCwgdHJ1ZSk7XG5cbiAgICAgICAgICAgdmFyIHRlbXAgPSBmbG9wO1xuICAgICAgICAgICBmbG9wID0gZmxpcDtcbiAgICAgICAgICAgZmxpcCA9IHRlbXA7XG4gICAgICAgIH1cblxuICAgICAgICByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLmFwcGx5RmlsdGVyKHNoYWRlciwgZmxpcCwgb3V0cHV0LCBjbGVhcik7XG5cbiAgICAgICAgcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5yZXR1cm5SZW5kZXJUYXJnZXQocmVuZGVyVGFyZ2V0KTtcbiAgICB9XG59O1xuXG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKEJsdXJZRmlsdGVyLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIHN0cmVuZ3RoIG9mIGJvdGggdGhlIGJsdXIuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5CbHVyWUZpbHRlciNcbiAgICAgKiBAZGVmYXVsdCAyXG4gICAgICovXG4gICAgYmx1cjoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiAgdGhpcy5zdHJlbmd0aDtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMucGFkZGluZyA9IE1hdGguYWJzKHZhbHVlKSAqIDAuNTtcbiAgICAgICAgICAgIHRoaXMuc3RyZW5ndGggPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi8uLi9jb3JlJyk7XG4vLyBAc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9zdWJzdGFjay9icmZzL2lzc3Vlcy8yNVxuXG5cbi8qKlxuICogQSBTbWFydCBCbHVyIEZpbHRlci5cbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQWJzdHJhY3RGaWx0ZXJcbiAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnNcbiAqL1xuZnVuY3Rpb24gU21hcnRCbHVyRmlsdGVyKClcbntcbiAgICBjb3JlLkFic3RyYWN0RmlsdGVyLmNhbGwodGhpcyxcbiAgICAgICAgLy8gdmVydGV4IHNoYWRlclxuICAgICAgICBudWxsLFxuICAgICAgICAvLyBmcmFnbWVudCBzaGFkZXJcbiAgICAgICAgXCJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcXG5cXG52YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDtcXG5cXG51bmlmb3JtIHNhbXBsZXIyRCB1U2FtcGxlcjtcXG51bmlmb3JtIHZlYzIgZGVsdGE7XFxuXFxuZmxvYXQgcmFuZG9tKHZlYzMgc2NhbGUsIGZsb2F0IHNlZWQpXFxue1xcbiAgICByZXR1cm4gZnJhY3Qoc2luKGRvdChnbF9GcmFnQ29vcmQueHl6ICsgc2VlZCwgc2NhbGUpKSAqIDQzNzU4LjU0NTMgKyBzZWVkKTtcXG59XFxuXFxudm9pZCBtYWluKHZvaWQpXFxue1xcbiAgICB2ZWM0IGNvbG9yID0gdmVjNCgwLjApO1xcbiAgICBmbG9hdCB0b3RhbCA9IDAuMDtcXG5cXG4gICAgZmxvYXQgb2Zmc2V0ID0gcmFuZG9tKHZlYzMoMTIuOTg5OCwgNzguMjMzLCAxNTEuNzE4MiksIDAuMCk7XFxuXFxuICAgIGZvciAoZmxvYXQgdCA9IC0zMC4wOyB0IDw9IDMwLjA7IHQrKylcXG4gICAge1xcbiAgICAgICAgZmxvYXQgcGVyY2VudCA9ICh0ICsgb2Zmc2V0IC0gMC41KSAvIDMwLjA7XFxuICAgICAgICBmbG9hdCB3ZWlnaHQgPSAxLjAgLSBhYnMocGVyY2VudCk7XFxuICAgICAgICB2ZWM0IHNhbXBsZSA9IHRleHR1cmUyRCh1U2FtcGxlciwgdlRleHR1cmVDb29yZCArIGRlbHRhICogcGVyY2VudCk7XFxuICAgICAgICBzYW1wbGUucmdiICo9IHNhbXBsZS5hO1xcbiAgICAgICAgY29sb3IgKz0gc2FtcGxlICogd2VpZ2h0O1xcbiAgICAgICAgdG90YWwgKz0gd2VpZ2h0O1xcbiAgICB9XFxuXFxuICAgIGdsX0ZyYWdDb2xvciA9IGNvbG9yIC8gdG90YWw7XFxuICAgIGdsX0ZyYWdDb2xvci5yZ2IgLz0gZ2xfRnJhZ0NvbG9yLmEgKyAwLjAwMDAxO1xcbn1cXG5cIixcbiAgICAgICAgLy8gdW5pZm9ybXNcbiAgICAgICAge1xuICAgICAgICAgIGRlbHRhOiB7IHR5cGU6ICd2MicsIHZhbHVlOiB7IHg6IDAuMSwgeTogMC4wIH0gfVxuICAgICAgICB9XG4gICAgKTtcbn1cblxuU21hcnRCbHVyRmlsdGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoY29yZS5BYnN0cmFjdEZpbHRlci5wcm90b3R5cGUpO1xuU21hcnRCbHVyRmlsdGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFNtYXJ0Qmx1ckZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gU21hcnRCbHVyRmlsdGVyO1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi8uLi9jb3JlJyk7XG4vLyBAc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9zdWJzdGFjay9icmZzL2lzc3Vlcy8yNVxuXG5cbi8qKlxuICogVGhlIENvbG9yTWF0cml4RmlsdGVyIGNsYXNzIGxldHMgeW91IGFwcGx5IGEgNXg0IG1hdHJpeCB0cmFuc2Zvcm1hdGlvbiBvbiB0aGUgUkdCQVxuICogY29sb3IgYW5kIGFscGhhIHZhbHVlcyBvZiBldmVyeSBwaXhlbCBvbiB5b3VyIGRpc3BsYXlPYmplY3QgdG8gcHJvZHVjZSBhIHJlc3VsdFxuICogd2l0aCBhIG5ldyBzZXQgb2YgUkdCQSBjb2xvciBhbmQgYWxwaGEgdmFsdWVzLiBJdCdzIHByZXR0eSBwb3dlcmZ1bCFcbiAqXG4gKiBgYGBqc1xuICogIHZhciBjb2xvck1hdHJpeCA9IG5ldyBQSVhJLkNvbG9yTWF0cml4RmlsdGVyKCk7XG4gKiAgY29udGFpbmVyLmZpbHRlcnMgPSBbY29sb3JNYXRyaXhdO1xuICogIGNvbG9yTWF0cml4LmNvbnRyYXN0KDIpO1xuICogYGBgXG4gKiBAYXV0aG9yIENsw6ltZW50IENoZW5lYmF1bHQgPGNsZW1lbnRAZ29vZGJveWRpZ2l0YWwuY29tPlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLkFic3RyYWN0RmlsdGVyXG4gKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzXG4gKi9cbmZ1bmN0aW9uIENvbG9yTWF0cml4RmlsdGVyKClcbntcbiAgICBjb3JlLkFic3RyYWN0RmlsdGVyLmNhbGwodGhpcyxcbiAgICAgICAgLy8gdmVydGV4IHNoYWRlclxuICAgICAgICBudWxsLFxuICAgICAgICAvLyBmcmFnbWVudCBzaGFkZXJcbiAgICAgICAgXCJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcXG5cXG52YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDtcXG51bmlmb3JtIHNhbXBsZXIyRCB1U2FtcGxlcjtcXG51bmlmb3JtIGZsb2F0IG1bMjVdO1xcblxcbnZvaWQgbWFpbih2b2lkKVxcbntcXG5cXG4gICAgdmVjNCBjID0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2VGV4dHVyZUNvb3JkKTtcXG5cXG4gICAgZ2xfRnJhZ0NvbG9yLnIgPSAobVswXSAqIGMucik7XFxuICAgICAgICBnbF9GcmFnQ29sb3IuciArPSAobVsxXSAqIGMuZyk7XFxuICAgICAgICBnbF9GcmFnQ29sb3IuciArPSAobVsyXSAqIGMuYik7XFxuICAgICAgICBnbF9GcmFnQ29sb3IuciArPSAobVszXSAqIGMuYSk7XFxuICAgICAgICBnbF9GcmFnQ29sb3IuciArPSBtWzRdO1xcblxcbiAgICBnbF9GcmFnQ29sb3IuZyA9IChtWzVdICogYy5yKTtcXG4gICAgICAgIGdsX0ZyYWdDb2xvci5nICs9IChtWzZdICogYy5nKTtcXG4gICAgICAgIGdsX0ZyYWdDb2xvci5nICs9IChtWzddICogYy5iKTtcXG4gICAgICAgIGdsX0ZyYWdDb2xvci5nICs9IChtWzhdICogYy5hKTtcXG4gICAgICAgIGdsX0ZyYWdDb2xvci5nICs9IG1bOV07XFxuXFxuICAgICBnbF9GcmFnQ29sb3IuYiA9IChtWzEwXSAqIGMucik7XFxuICAgICAgICBnbF9GcmFnQ29sb3IuYiArPSAobVsxMV0gKiBjLmcpO1xcbiAgICAgICAgZ2xfRnJhZ0NvbG9yLmIgKz0gKG1bMTJdICogYy5iKTtcXG4gICAgICAgIGdsX0ZyYWdDb2xvci5iICs9IChtWzEzXSAqIGMuYSk7XFxuICAgICAgICBnbF9GcmFnQ29sb3IuYiArPSBtWzE0XTtcXG5cXG4gICAgIGdsX0ZyYWdDb2xvci5hID0gKG1bMTVdICogYy5yKTtcXG4gICAgICAgIGdsX0ZyYWdDb2xvci5hICs9IChtWzE2XSAqIGMuZyk7XFxuICAgICAgICBnbF9GcmFnQ29sb3IuYSArPSAobVsxN10gKiBjLmIpO1xcbiAgICAgICAgZ2xfRnJhZ0NvbG9yLmEgKz0gKG1bMThdICogYy5hKTtcXG4gICAgICAgIGdsX0ZyYWdDb2xvci5hICs9IG1bMTldO1xcblxcbn1cXG5cIixcbiAgICAgICAgLy8gY3VzdG9tIHVuaWZvcm1zXG4gICAgICAgIHtcbiAgICAgICAgICAgIG06IHtcbiAgICAgICAgICAgICAgICB0eXBlOiAnMWZ2JywgdmFsdWU6IFtcbiAgICAgICAgICAgICAgICAgICAgMSwgMCwgMCwgMCwgMCxcbiAgICAgICAgICAgICAgICAgICAgMCwgMSwgMCwgMCwgMCxcbiAgICAgICAgICAgICAgICAgICAgMCwgMCwgMSwgMCwgMCxcbiAgICAgICAgICAgICAgICAgICAgMCwgMCwgMCwgMSwgMFxuICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICk7XG59XG5cbkNvbG9yTWF0cml4RmlsdGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoY29yZS5BYnN0cmFjdEZpbHRlci5wcm90b3R5cGUpO1xuQ29sb3JNYXRyaXhGaWx0ZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gQ29sb3JNYXRyaXhGaWx0ZXI7XG5tb2R1bGUuZXhwb3J0cyA9IENvbG9yTWF0cml4RmlsdGVyO1xuXG5cbi8qKlxuICogVHJhbnNmb3JtcyBjdXJyZW50IG1hdHJpeCBhbmQgc2V0IHRoZSBuZXcgb25lXG4gKlxuICogQHBhcmFtIG1hdHJpeCB7bnVtYmVyW119IChtYXQgNXg0KVxuICogQHBhcmFtIG11bHRpcGx5IHtib29sZWFufSBpZiB0cnVlLCBjdXJyZW50IG1hdHJpeCBhbmQgbWF0cml4IGFyZSBtdWx0aXBsaWVkLiBJZiBmYWxzZSwganVzdCBzZXQgdGhlIGN1cnJlbnQgbWF0cml4IHdpdGggQHBhcmFtIG1hdHJpeFxuICovXG5Db2xvck1hdHJpeEZpbHRlci5wcm90b3R5cGUuX2xvYWRNYXRyaXggPSBmdW5jdGlvbiAobWF0cml4LCBtdWx0aXBseSlcbntcbiAgICBtdWx0aXBseSA9ICEhbXVsdGlwbHk7XG5cbiAgICB2YXIgbmV3TWF0cml4ID0gbWF0cml4O1xuXG4gICAgaWYgKG11bHRpcGx5KSB7XG4gICAgICAgIHRoaXMuX211bHRpcGx5KG5ld01hdHJpeCwgdGhpcy51bmlmb3Jtcy5tLnZhbHVlLCBtYXRyaXgpO1xuICAgICAgICBuZXdNYXRyaXggPSB0aGlzLl9jb2xvck1hdHJpeChuZXdNYXRyaXgpO1xuICAgIH1cblxuICAgIC8vIHNldCB0aGUgbmV3IG1hdHJpeFxuICAgIHRoaXMudW5pZm9ybXMubS52YWx1ZSA9IG5ld01hdHJpeDtcbn07XG5cbi8qKlxuICogTXVsdGlwbGllcyB0d28gbWF0NSdzXG4gKlxuICogQHBhcmFtIG91dCB7bnVtYmVyW119IChtYXQgNXg0KSB0aGUgcmVjZWl2aW5nIG1hdHJpeFxuICogQHBhcmFtIGEge251bWJlcltdfSAobWF0IDV4NCkgdGhlIGZpcnN0IG9wZXJhbmRcbiAqIEBwYXJhbSBiIHtudW1iZXJbXX0gKG1hdCA1eDQpIHRoZSBzZWNvbmQgb3BlcmFuZFxuICogQHJldHVybnMgb3V0IHtudW1iZXJbXX0gKG1hdCA1eDQpXG4gKi9cbkNvbG9yTWF0cml4RmlsdGVyLnByb3RvdHlwZS5fbXVsdGlwbHkgPSBmdW5jdGlvbiAob3V0LCBhLCBiKVxue1xuXG4gICAgLy8gUmVkIENoYW5uZWxcbiAgICBvdXRbMF0gPSAoYVswXSAqIGJbMF0pICsgKGFbMV0gKiBiWzVdKSArIChhWzJdICogYlsxMF0pICsgKGFbM10gKiBiWzE1XSk7XG4gICAgb3V0WzFdID0gKGFbMF0gKiBiWzFdKSArIChhWzFdICogYls2XSkgKyAoYVsyXSAqIGJbMTFdKSArIChhWzNdICogYlsxNl0pO1xuICAgIG91dFsyXSA9IChhWzBdICogYlsyXSkgKyAoYVsxXSAqIGJbN10pICsgKGFbMl0gKiBiWzEyXSkgKyAoYVszXSAqIGJbMTddKTtcbiAgICBvdXRbM10gPSAoYVswXSAqIGJbM10pICsgKGFbMV0gKiBiWzhdKSArIChhWzJdICogYlsxM10pICsgKGFbM10gKiBiWzE4XSk7XG4gICAgb3V0WzRdID0gKGFbMF0gKiBiWzRdKSArIChhWzFdICogYls5XSkgKyAoYVsyXSAqIGJbMTRdKSArIChhWzNdICogYlsxOV0pO1xuXG4gICAgLy8gR3JlZW4gQ2hhbm5lbFxuICAgIG91dFs1XSA9IChhWzVdICogYlswXSkgKyAoYVs2XSAqIGJbNV0pICsgKGFbN10gKiBiWzEwXSkgKyAoYVs4XSAqIGJbMTVdKTtcbiAgICBvdXRbNl0gPSAoYVs1XSAqIGJbMV0pICsgKGFbNl0gKiBiWzZdKSArIChhWzddICogYlsxMV0pICsgKGFbOF0gKiBiWzE2XSk7XG4gICAgb3V0WzddID0gKGFbNV0gKiBiWzJdKSArIChhWzZdICogYls3XSkgKyAoYVs3XSAqIGJbMTJdKSArIChhWzhdICogYlsxN10pO1xuICAgIG91dFs4XSA9IChhWzVdICogYlszXSkgKyAoYVs2XSAqIGJbOF0pICsgKGFbN10gKiBiWzEzXSkgKyAoYVs4XSAqIGJbMThdKTtcbiAgICBvdXRbOV0gPSAoYVs1XSAqIGJbNF0pICsgKGFbNl0gKiBiWzldKSArIChhWzddICogYlsxNF0pICsgKGFbOF0gKiBiWzE5XSk7XG5cbiAgICAvLyBCbHVlIENoYW5uZWxcbiAgICBvdXRbMTBdID0gKGFbMTBdICogYlswXSkgKyAoYVsxMV0gKiBiWzVdKSArIChhWzEyXSAqIGJbMTBdKSArIChhWzEzXSAqIGJbMTVdKTtcbiAgICBvdXRbMTFdID0gKGFbMTBdICogYlsxXSkgKyAoYVsxMV0gKiBiWzZdKSArIChhWzEyXSAqIGJbMTFdKSArIChhWzEzXSAqIGJbMTZdKTtcbiAgICBvdXRbMTJdID0gKGFbMTBdICogYlsyXSkgKyAoYVsxMV0gKiBiWzddKSArIChhWzEyXSAqIGJbMTJdKSArIChhWzEzXSAqIGJbMTddKTtcbiAgICBvdXRbMTNdID0gKGFbMTBdICogYlszXSkgKyAoYVsxMV0gKiBiWzhdKSArIChhWzEyXSAqIGJbMTNdKSArIChhWzEzXSAqIGJbMThdKTtcbiAgICBvdXRbMTRdID0gKGFbMTBdICogYls0XSkgKyAoYVsxMV0gKiBiWzldKSArIChhWzEyXSAqIGJbMTRdKSArIChhWzEzXSAqIGJbMTldKTtcblxuICAgIC8vIEFscGhhIENoYW5uZWxcbiAgICBvdXRbMTVdID0gKGFbMTVdICogYlswXSkgKyAoYVsxNl0gKiBiWzVdKSArIChhWzE3XSAqIGJbMTBdKSArIChhWzE4XSAqIGJbMTVdKTtcbiAgICBvdXRbMTZdID0gKGFbMTVdICogYlsxXSkgKyAoYVsxNl0gKiBiWzZdKSArIChhWzE3XSAqIGJbMTFdKSArIChhWzE4XSAqIGJbMTZdKTtcbiAgICBvdXRbMTddID0gKGFbMTVdICogYlsyXSkgKyAoYVsxNl0gKiBiWzddKSArIChhWzE3XSAqIGJbMTJdKSArIChhWzE4XSAqIGJbMTddKTtcbiAgICBvdXRbMThdID0gKGFbMTVdICogYlszXSkgKyAoYVsxNl0gKiBiWzhdKSArIChhWzE3XSAqIGJbMTNdKSArIChhWzE4XSAqIGJbMThdKTtcbiAgICBvdXRbMTldID0gKGFbMTVdICogYls0XSkgKyAoYVsxNl0gKiBiWzldKSArIChhWzE3XSAqIGJbMTRdKSArIChhWzE4XSAqIGJbMTldKTtcblxuICAgIHJldHVybiBvdXQ7XG59O1xuXG4vKipcbiAqIENyZWF0ZSBhIEZsb2F0MzIgQXJyYXkgYW5kIG5vcm1hbGl6ZSB0aGUgb2Zmc2V0IGNvbXBvbmVudCB0byAwLTFcbiAqXG4gKiBAcGFyYW0gbWF0cml4IHtudW1iZXJbXX0gKG1hdCA1eDQpXG4gKiBAcmV0dXJuIG0ge251bWJlcltdfSAobWF0IDV4NCkgd2l0aCBhbGwgdmFsdWVzIGJldHdlZW4gMC0xXG4gKi9cbkNvbG9yTWF0cml4RmlsdGVyLnByb3RvdHlwZS5fY29sb3JNYXRyaXggPSBmdW5jdGlvbiAobWF0cml4KVxue1xuICAgIC8vIENyZWF0ZSBhIEZsb2F0MzIgQXJyYXkgYW5kIG5vcm1hbGl6ZSB0aGUgb2Zmc2V0IGNvbXBvbmVudCB0byAwLTFcbiAgICB2YXIgbSA9IG5ldyBGbG9hdDMyQXJyYXkobWF0cml4KTtcbiAgICBtWzRdIC89IDI1NTtcbiAgICBtWzldIC89IDI1NTtcbiAgICBtWzE0XSAvPSAyNTU7XG4gICAgbVsxOV0gLz0gMjU1O1xuXG4gICAgcmV0dXJuIG07XG59O1xuXG4vKipcbiAqIEFkanVzdHMgYnJpZ2h0bmVzc1xuICpcbiAqIEBwYXJhbSBiIHtudW1iZXJ9IHZhbHVlIG9mIHRoZSBicmlndGhuZXNzICgwIGlzIGJsYWNrKVxuICogQHBhcmFtIG11bHRpcGx5IHtib29sZWFufSByZWZlciB0byAuX2xvYWRNYXRyaXgoKSBtZXRob2RcbiAqL1xuQ29sb3JNYXRyaXhGaWx0ZXIucHJvdG90eXBlLmJyaWdodG5lc3MgPSBmdW5jdGlvbiAoYiwgbXVsdGlwbHkpXG57XG4gICAgdmFyIG1hdHJpeCA9IFtcbiAgICAgICAgYiwgMCwgMCwgMCwgMCxcbiAgICAgICAgMCwgYiwgMCwgMCwgMCxcbiAgICAgICAgMCwgMCwgYiwgMCwgMCxcbiAgICAgICAgMCwgMCwgMCwgMSwgMFxuICAgIF07XG5cbiAgICB0aGlzLl9sb2FkTWF0cml4KG1hdHJpeCwgbXVsdGlwbHkpO1xufTtcblxuLyoqXG4gKiBTZXQgdGhlIG1hdHJpY2VzIGluIGdyZXkgc2NhbGVzXG4gKlxuICogQHBhcmFtIHNjYWxlIHtudW1iZXJ9IHZhbHVlIG9mIHRoZSBncmV5ICgwIGlzIGJsYWNrKVxuICogQHBhcmFtIG11bHRpcGx5IHtib29sZWFufSByZWZlciB0byAuX2xvYWRNYXRyaXgoKSBtZXRob2RcbiAqL1xuQ29sb3JNYXRyaXhGaWx0ZXIucHJvdG90eXBlLmdyZXlzY2FsZSA9IGZ1bmN0aW9uIChzY2FsZSwgbXVsdGlwbHkpXG57XG4gICAgdmFyIG1hdHJpeCA9IFtcbiAgICAgICAgc2NhbGUsIHNjYWxlLCBzY2FsZSwgMCwgMCxcbiAgICAgICAgc2NhbGUsIHNjYWxlLCBzY2FsZSwgMCwgMCxcbiAgICAgICAgc2NhbGUsIHNjYWxlLCBzY2FsZSwgMCwgMCxcbiAgICAgICAgMCwgMCwgMCwgMSwgMFxuICAgIF07XG5cbiAgICB0aGlzLl9sb2FkTWF0cml4KG1hdHJpeCwgbXVsdGlwbHkpO1xufTtcbi8vQW1lcmljYW5pemVkIGFsaWFzXG5Db2xvck1hdHJpeEZpbHRlci5wcm90b3R5cGUuZ3JheXNjYWxlID0gQ29sb3JNYXRyaXhGaWx0ZXIucHJvdG90eXBlLmdyZXlzY2FsZTtcblxuLyoqXG4gKiBTZXQgdGhlIGJsYWNrIGFuZCB3aGl0ZSBtYXRyaWNlXG4gKiBNdWx0aXBseSB0aGUgY3VycmVudCBtYXRyaXhcbiAqXG4gKiBAcGFyYW0gbXVsdGlwbHkge2Jvb2xlYW59IHJlZmVyIHRvIC5fbG9hZE1hdHJpeCgpIG1ldGhvZFxuICovXG5Db2xvck1hdHJpeEZpbHRlci5wcm90b3R5cGUuYmxhY2tBbmRXaGl0ZSA9IGZ1bmN0aW9uIChtdWx0aXBseSlcbntcbiAgICB2YXIgbWF0cml4ID0gW1xuICAgICAgICAwLjMsIDAuNiwgMC4xLCAwLCAwLFxuICAgICAgICAwLjMsIDAuNiwgMC4xLCAwLCAwLFxuICAgICAgICAwLjMsIDAuNiwgMC4xLCAwLCAwLFxuICAgICAgICAwLCAwLCAwLCAxLCAwXG4gICAgXTtcblxuICAgIHRoaXMuX2xvYWRNYXRyaXgobWF0cml4LCBtdWx0aXBseSk7XG59O1xuXG4vKipcbiAqIFNldCB0aGUgaHVlIHByb3BlcnR5IG9mIHRoZSBjb2xvclxuICpcbiAqIEBwYXJhbSByb3RhdGlvbiB7bnVtYmVyfSBpbiBkZWdyZWVzXG4gKiBAcGFyYW0gbXVsdGlwbHkge2Jvb2xlYW59IHJlZmVyIHRvIC5fbG9hZE1hdHJpeCgpIG1ldGhvZFxuICovXG5Db2xvck1hdHJpeEZpbHRlci5wcm90b3R5cGUuaHVlID0gZnVuY3Rpb24gKHJvdGF0aW9uLCBtdWx0aXBseSlcbntcbiAgICByb3RhdGlvbiA9IChyb3RhdGlvbiB8fCAwKSAvIDE4MCAqIE1hdGguUEk7XG4gICAgdmFyIGNvcyA9IE1hdGguY29zKHJvdGF0aW9uKSxcbiAgICAgICAgc2luID0gTWF0aC5zaW4ocm90YXRpb24pO1xuXG4gICAgLy8gbHVtaW5hbmNlUmVkLCBsdW1pbmFuY2VHcmVlbiwgbHVtaW5hbmNlQmx1ZVxuICAgIHZhciBsdW1SID0gMC4yMTMsIC8vIG9yIDAuMzA4NlxuICAgICAgICBsdW1HID0gMC43MTUsIC8vIG9yIDAuNjA5NFxuICAgICAgICBsdW1CID0gMC4wNzI7IC8vIG9yIDAuMDgyMFxuXG4gICAgdmFyIG1hdHJpeCA9IFtcbiAgICAgICAgbHVtUiArIGNvcyAqICgxIC0gbHVtUikgKyBzaW4gKiAoLWx1bVIpLCBsdW1HICsgY29zICogKC1sdW1HKSArIHNpbiAqICgtbHVtRyksIGx1bUIgKyBjb3MgKiAoLWx1bUIpICsgc2luICogKDEgLSBsdW1CKSwgMCwgMCxcbiAgICAgICAgbHVtUiArIGNvcyAqICgtbHVtUikgKyBzaW4gKiAoMC4xNDMpLCBsdW1HICsgY29zICogKDEgLSBsdW1HKSArIHNpbiAqICgwLjE0MCksIGx1bUIgKyBjb3MgKiAoLWx1bUIpICsgc2luICogKC0wLjI4MyksIDAsIDAsXG4gICAgICAgIGx1bVIgKyBjb3MgKiAoLWx1bVIpICsgc2luICogKC0oMSAtIGx1bVIpKSwgbHVtRyArIGNvcyAqICgtbHVtRykgKyBzaW4gKiAobHVtRyksIGx1bUIgKyBjb3MgKiAoMSAtIGx1bUIpICsgc2luICogKGx1bUIpLCAwLCAwLFxuICAgICAgICAwLCAwLCAwLCAxLCAwXG4gICAgXTtcblxuICAgIHRoaXMuX2xvYWRNYXRyaXgobWF0cml4LCBtdWx0aXBseSk7XG59O1xuXG5cbi8qKlxuICogU2V0IHRoZSBjb250cmFzdCBtYXRyaXgsIGluY3JlYXNlIHRoZSBzZXBhcmF0aW9uIGJldHdlZW4gZGFyayBhbmQgYnJpZ2h0XG4gKiBJbmNyZWFzZSBjb250cmFzdCA6IHNoYWRvd3MgZGFya2VyIGFuZCBoaWdobGlnaHRzIGJyaWdodGVyXG4gKiBEZWNyZWFzZSBjb250cmFzdCA6IGJyaW5nIHRoZSBzaGFkb3dzIHVwIGFuZCB0aGUgaGlnaGxpZ2h0cyBkb3duXG4gKlxuICogQHBhcmFtIGFtb3VudCB7bnVtYmVyfSB2YWx1ZSBvZiB0aGUgY29udHJhc3RcbiAqIEBwYXJhbSBtdWx0aXBseSB7Ym9vbGVhbn0gcmVmZXIgdG8gLl9sb2FkTWF0cml4KCkgbWV0aG9kXG4gKi9cbkNvbG9yTWF0cml4RmlsdGVyLnByb3RvdHlwZS5jb250cmFzdCA9IGZ1bmN0aW9uIChhbW91bnQsIG11bHRpcGx5KVxue1xuICAgIHZhciB2ID0gKGFtb3VudCB8fCAwKSArIDE7XG4gICAgdmFyIG8gPSAtMTI4ICogKHYgLSAxKTtcblxuICAgIHZhciBtYXRyaXggPSBbXG4gICAgICAgIHYsIDAsIDAsIDAsIG8sXG4gICAgICAgIDAsIHYsIDAsIDAsIG8sXG4gICAgICAgIDAsIDAsIHYsIDAsIG8sXG4gICAgICAgIDAsIDAsIDAsIDEsIDBcbiAgICBdO1xuXG4gICAgdGhpcy5fbG9hZE1hdHJpeChtYXRyaXgsIG11bHRpcGx5KTtcbn07XG5cbi8qKlxuICogU2V0IHRoZSBzYXR1cmF0aW9uIG1hdHJpeCwgaW5jcmVhc2UgdGhlIHNlcGFyYXRpb24gYmV0d2VlbiBjb2xvcnNcbiAqIEluY3JlYXNlIHNhdHVyYXRpb24gOiBpbmNyZWFzZSBjb250cmFzdCwgYnJpZ2h0bmVzcywgYW5kIHNoYXJwbmVzc1xuICpcbiAqIEBwYXJhbSBhbW91bnQge251bWJlcn1cbiAqIEBwYXJhbSBtdWx0aXBseSB7Ym9vbGVhbn0gcmVmZXIgdG8gLl9sb2FkTWF0cml4KCkgbWV0aG9kXG4gKi9cbkNvbG9yTWF0cml4RmlsdGVyLnByb3RvdHlwZS5zYXR1cmF0ZSA9IGZ1bmN0aW9uIChhbW91bnQsIG11bHRpcGx5KVxue1xuICAgIHZhciB4ID0gKGFtb3VudCB8fCAwKSAqIDIgLyAzICsgMTtcbiAgICB2YXIgeSA9ICgoeCAtIDEpICogLTAuNSk7XG5cbiAgICB2YXIgbWF0cml4ID0gW1xuICAgICAgICB4LCB5LCB5LCAwLCAwLFxuICAgICAgICB5LCB4LCB5LCAwLCAwLFxuICAgICAgICB5LCB5LCB4LCAwLCAwLFxuICAgICAgICAwLCAwLCAwLCAxLCAwXG4gICAgXTtcblxuICAgIHRoaXMuX2xvYWRNYXRyaXgobWF0cml4LCBtdWx0aXBseSk7XG59O1xuXG4vKipcbiAqIERlc2F0dXJhdGUgaW1hZ2UgKHJlbW92ZSBjb2xvcilcbiAqXG4gKiBDYWxsIHRoZSBzYXR1cmF0ZSBmdW5jdGlvblxuICpcbiAqIEBwYXJhbSBtdWx0aXBseSB7Ym9vbGVhbn0gcmVmZXIgdG8gLl9sb2FkTWF0cml4KCkgbWV0aG9kXG4gKi9cbkNvbG9yTWF0cml4RmlsdGVyLnByb3RvdHlwZS5kZXNhdHVyYXRlID0gZnVuY3Rpb24gKG11bHRpcGx5KSAvLyBqc2hpbnQgdW51c2VkOmZhbHNlXG57XG4gICAgdGhpcy5zYXR1cmF0ZSgtMSk7XG59O1xuXG4vKipcbiAqIE5lZ2F0aXZlIGltYWdlIChpbnZlcnNlIG9mIGNsYXNzaWMgcmdiIG1hdHJpeClcbiAqXG4gKiBAcGFyYW0gbXVsdGlwbHkge2Jvb2xlYW59IHJlZmVyIHRvIC5fbG9hZE1hdHJpeCgpIG1ldGhvZFxuICovXG5Db2xvck1hdHJpeEZpbHRlci5wcm90b3R5cGUubmVnYXRpdmUgPSBmdW5jdGlvbiAobXVsdGlwbHkpXG57XG4gICAgdmFyIG1hdHJpeCA9IFtcbiAgICAgICAgMCwgMSwgMSwgMCwgMCxcbiAgICAgICAgMSwgMCwgMSwgMCwgMCxcbiAgICAgICAgMSwgMSwgMCwgMCwgMCxcbiAgICAgICAgMCwgMCwgMCwgMSwgMFxuICAgIF07XG5cbiAgICB0aGlzLl9sb2FkTWF0cml4KG1hdHJpeCwgbXVsdGlwbHkpO1xufTtcblxuLyoqXG4gKiBTZXBpYSBpbWFnZVxuICpcbiAqIEBwYXJhbSBtdWx0aXBseSB7Ym9vbGVhbn0gcmVmZXIgdG8gLl9sb2FkTWF0cml4KCkgbWV0aG9kXG4gKi9cbkNvbG9yTWF0cml4RmlsdGVyLnByb3RvdHlwZS5zZXBpYSA9IGZ1bmN0aW9uIChtdWx0aXBseSlcbntcbiAgICB2YXIgbWF0cml4ID0gW1xuICAgICAgICAwLjM5MywgMC43Njg5OTk5LCAwLjE4ODk5OTk5LCAwLCAwLFxuICAgICAgICAwLjM0OSwgMC42ODU5OTk5LCAwLjE2Nzk5OTk5LCAwLCAwLFxuICAgICAgICAwLjI3MiwgMC41MzM5OTk5LCAwLjEzMDk5OTk5LCAwLCAwLFxuICAgICAgICAwLCAwLCAwLCAxLCAwXG4gICAgXTtcblxuICAgIHRoaXMuX2xvYWRNYXRyaXgobWF0cml4LCBtdWx0aXBseSk7XG59O1xuXG4vKipcbiAqIENvbG9yIG1vdGlvbiBwaWN0dXJlIHByb2Nlc3MgaW52ZW50ZWQgaW4gMTkxNiAodGhhbmtzIERvbWluaWMgU3phYmxld3NraSlcbiAqXG4gKiBAcGFyYW0gbXVsdGlwbHkge2Jvb2xlYW59IHJlZmVyIHRvIC5fbG9hZE1hdHJpeCgpIG1ldGhvZFxuICovXG5Db2xvck1hdHJpeEZpbHRlci5wcm90b3R5cGUudGVjaG5pY29sb3IgPSBmdW5jdGlvbiAobXVsdGlwbHkpXG57XG4gICAgdmFyIG1hdHJpeCA9IFtcbiAgICAgICAgMS45MTI1Mjc3ODkxNDU2MDgzLCAtMC44NTQ1MzQ0OTc2OTUxNjQ1LCAtMC4wOTE1NTUwODQ4Mjc1NTU4NSwgMCwgMTEuNzkzNjAzNDM0Mzc3MzM3LFxuICAgICAgICAtMC4zMDg3ODMzMzg1OTI4MDk3LCAxLjc2NTg5MDg1NTU0NTg0MjgsIC0wLjEwNjAxNzQzMDc0NzIyMjQ1LCAwLCAtNzAuMzUyMDUxNjE0NjEzOTgsXG4gICAgICAgIC0wLjIzMTEwMzM3NzU0ODYxNiwgLTAuNzUwMTg5OTE5NzQ0MDIxMiwgMS44NDc1OTc4MTYxMDgxODksIDAsIDMwLjk1MDk0MDg2OTQ5MTEzOCxcbiAgICAgICAgMCwgMCwgMCwgMSwgMFxuICAgIF07XG5cbiAgICB0aGlzLl9sb2FkTWF0cml4KG1hdHJpeCwgbXVsdGlwbHkpO1xufTtcblxuLyoqXG4gKiBQb2xhcm9pZCBmaWx0ZXJcbiAqXG4gKiBAcGFyYW0gbXVsdGlwbHkge2Jvb2xlYW59IHJlZmVyIHRvIC5fbG9hZE1hdHJpeCgpIG1ldGhvZFxuICovXG5Db2xvck1hdHJpeEZpbHRlci5wcm90b3R5cGUucG9sYXJvaWQgPSBmdW5jdGlvbiAobXVsdGlwbHkpXG57XG4gICAgdmFyIG1hdHJpeCA9IFtcbiAgICAgICAgMS40MzgsIC0wLjA2MiwgLTAuMDYyLCAwLCAwLFxuICAgICAgICAtMC4xMjIsIDEuMzc4LCAtMC4xMjIsIDAsIDAsXG4gICAgICAgIC0wLjAxNiwgLTAuMDE2LCAxLjQ4MywgMCwgMCxcbiAgICAgICAgMCwgMCwgMCwgMSwgMFxuICAgIF07XG5cbiAgICB0aGlzLl9sb2FkTWF0cml4KG1hdHJpeCwgbXVsdGlwbHkpO1xufTtcblxuLyoqXG4gKiBGaWx0ZXIgd2hvIHRyYW5zZm9ybXMgOiBSZWQgLT4gQmx1ZSBhbmQgQmx1ZSAtPiBSZWRcbiAqXG4gKiBAcGFyYW0gbXVsdGlwbHkge2Jvb2xlYW59IHJlZmVyIHRvIC5fbG9hZE1hdHJpeCgpIG1ldGhvZFxuICovXG5Db2xvck1hdHJpeEZpbHRlci5wcm90b3R5cGUudG9CR1IgPSBmdW5jdGlvbiAobXVsdGlwbHkpXG57XG4gICAgdmFyIG1hdHJpeCA9IFtcbiAgICAgICAgMCwgMCwgMSwgMCwgMCxcbiAgICAgICAgMCwgMSwgMCwgMCwgMCxcbiAgICAgICAgMSwgMCwgMCwgMCwgMCxcbiAgICAgICAgMCwgMCwgMCwgMSwgMFxuICAgIF07XG5cbiAgICB0aGlzLl9sb2FkTWF0cml4KG1hdHJpeCwgbXVsdGlwbHkpO1xufTtcblxuLyoqXG4gKiBDb2xvciByZXZlcnNhbCBmaWxtIGludHJvZHVjZWQgYnkgRWFzdG1hbiBLb2RhayBpbiAxOTM1LiAodGhhbmtzIERvbWluaWMgU3phYmxld3NraSlcbiAqXG4gKiBAcGFyYW0gbXVsdGlwbHkge2Jvb2xlYW59IHJlZmVyIHRvIC5fbG9hZE1hdHJpeCgpIG1ldGhvZFxuICovXG5Db2xvck1hdHJpeEZpbHRlci5wcm90b3R5cGUua29kYWNocm9tZSA9IGZ1bmN0aW9uIChtdWx0aXBseSlcbntcbiAgICB2YXIgbWF0cml4ID0gW1xuICAgICAgICAxLjEyODU1ODIzOTY1OTM1MjUsIC0wLjM5NjczODIyODM2MDEzNDgsIC0wLjAzOTkyNTU5MTcyOTIxNzkzLCAwLCA2My43Mjk1ODc2MjE5NjUwMixcbiAgICAgICAgLTAuMTY0MDQzMzk5NjIyNDQ2MTYsIDEuMDgzNTI1MTU2NjI5MTMwNCwgLTAuMDU0OTg4MDUxMTU2MzMxMzIsIDAsIDI0LjczMjQwNzg5NjcwNjIwMyxcbiAgICAgICAgLTAuMTY3ODYwMTA3MDYxNTU3NjMsIC0wLjU2MDM0MTYyNzc2OTUyNDgsIDEuNjAxNDg1MDc2MTk2NDk0MywgMCwgMzUuNjI5ODI4MDc0NjA5NDYsXG4gICAgICAgIDAsIDAsIDAsIDEsIDBcbiAgICBdO1xuXG4gICAgdGhpcy5fbG9hZE1hdHJpeChtYXRyaXgsIG11bHRpcGx5KTtcbn07XG5cbi8qKlxuICogQnJvd24gZGVsaWNpb3VzIGJyb3duaSBmaWx0ZXIgKHRoYW5rcyBEb21pbmljIFN6YWJsZXdza2kpXG4gKlxuICogQHBhcmFtIG11bHRpcGx5IHtib29sZWFufSByZWZlciB0byAuX2xvYWRNYXRyaXgoKSBtZXRob2RcbiAqL1xuQ29sb3JNYXRyaXhGaWx0ZXIucHJvdG90eXBlLmJyb3duaSA9IGZ1bmN0aW9uIChtdWx0aXBseSlcbntcbiAgICB2YXIgbWF0cml4ID0gW1xuICAgICAgICAwLjU5OTcwMjM0OTgxNTk3MTUsIDAuMzQ1NTMyNDMwNDgzOTEyNjMsIC0wLjI3MDgyOTg2NzQ1MzgwNDIsIDAsIDQ3LjQzMTkyODU1NjAwODczLFxuICAgICAgICAtMC4wMzc3MDMyNDk4Mzc3ODMxNTcsIDAuODYwOTU3NzU4Nzk5MjY0MSwgMC4xNTA1OTU1MjM4ODQ1OTkxMywgMCwgLTM2Ljk2ODQxNDk4MzE5MTI3LFxuICAgICAgICAwLjI0MTEzNjM1MTI4MTUzMzM1LCAtMC4wNzQ0MTAzNzkwODQyMjQ5MiwgMC40NDk3MjE4MjA2NDg3NzE1MywgMCwgLTcuNTYyMDc1Mjc3NTkxMjgzLFxuICAgICAgICAwLCAwLCAwLCAxLCAwXG4gICAgXTtcblxuICAgIHRoaXMuX2xvYWRNYXRyaXgobWF0cml4LCBtdWx0aXBseSk7XG59O1xuXG4vKlxuICogVmludGFnZSBmaWx0ZXIgKHRoYW5rcyBEb21pbmljIFN6YWJsZXdza2kpXG4gKlxuICogQHBhcmFtIG11bHRpcGx5IHtib29sZWFufSByZWZlciB0byAuX2xvYWRNYXRyaXgoKSBtZXRob2RcbiAqL1xuQ29sb3JNYXRyaXhGaWx0ZXIucHJvdG90eXBlLnZpbnRhZ2UgPSBmdW5jdGlvbiAobXVsdGlwbHkpXG57XG4gICAgdmFyIG1hdHJpeCA9IFtcbiAgICAgICAgMC42Mjc5MzQ1NjM1NjA1OTk0LCAwLjMyMDIxODM0MjA4MTkzNjcsIC0wLjAzOTY1NDA4MjExMzEyNDUzLCAwLCA5LjY1MTI4NTgzNTI5NDEyMyxcbiAgICAgICAgMC4wMjU3ODM5NzcwNDgwODg2OCwgMC42NDQxMTg4NjQ0Mzc0NzcxLCAwLjAzMjU5MTI3NjE2MTQ5Mjk0LCAwLCA3LjQ2MjgyOTE3NjQ3MDU5MSxcbiAgICAgICAgMC4wNDY2MDU1NTU2NzgyNzE5LCAtMC4wODUxMjMyOTg3MjQ3ODkxLCAwLjUyNDE2NDgwMTg3MDA0NjUsIDAsIDUuMTU5MTkwNTg4MjM1Mjk2LFxuICAgICAgICAwLCAwLCAwLCAxLCAwXG4gICAgXTtcblxuICAgIHRoaXMuX2xvYWRNYXRyaXgobWF0cml4LCBtdWx0aXBseSk7XG59O1xuXG4vKlxuICogV2UgZG9uJ3Qga25vdyBleGFjdGx5IHdoYXQgaXQgZG9lcywga2luZCBvZiBncmFkaWVudCBtYXAsIGJ1dCBmdW5ueSB0byBwbGF5IHdpdGghXG4gKlxuICogQHBhcmFtIGRlc2F0dXJhdGlvbiB7bnVtYmVyfVxuICogQHBhcmFtIHRvbmVkIHtudW1iZXJ9XG4gKiBAcGFyYW0gbGlnaHRDb2xvciB7c3RyaW5nfSAoZXhhbXBsZSA6IFwiMHhGRkU1ODBcIilcbiAqIEBwYXJhbSBkYXJrQ29sb3Ige3N0cmluZ30gIChleGFtcGxlIDogXCIweEZGRTU4MFwiKVxuICpcbiAqIEBwYXJhbSBtdWx0aXBseSB7Ym9vbGVhbn0gcmVmZXIgdG8gLl9sb2FkTWF0cml4KCkgbWV0aG9kXG4gKi9cbkNvbG9yTWF0cml4RmlsdGVyLnByb3RvdHlwZS5jb2xvclRvbmUgPSBmdW5jdGlvbiAoZGVzYXR1cmF0aW9uLCB0b25lZCwgbGlnaHRDb2xvciwgZGFya0NvbG9yLCBtdWx0aXBseSlcbntcbiAgICBkZXNhdHVyYXRpb24gPSBkZXNhdHVyYXRpb24gfHwgMC4yO1xuICAgIHRvbmVkID0gdG9uZWQgfHwgMC4xNTtcbiAgICBsaWdodENvbG9yID0gbGlnaHRDb2xvciB8fCAweEZGRTU4MDtcbiAgICBkYXJrQ29sb3IgPSBkYXJrQ29sb3IgfHwgMHgzMzgwMDA7XG5cbiAgICB2YXIgbFIgPSAoKGxpZ2h0Q29sb3IgPj4gMTYpICYgMHhGRikgLyAyNTU7XG4gICAgdmFyIGxHID0gKChsaWdodENvbG9yID4+IDgpICYgMHhGRikgLyAyNTU7XG4gICAgdmFyIGxCID0gKGxpZ2h0Q29sb3IgJiAweEZGKSAvIDI1NTtcblxuICAgIHZhciBkUiA9ICgoZGFya0NvbG9yID4+IDE2KSAmIDB4RkYpIC8gMjU1O1xuICAgIHZhciBkRyA9ICgoZGFya0NvbG9yID4+IDgpICYgMHhGRikgLyAyNTU7XG4gICAgdmFyIGRCID0gKGRhcmtDb2xvciAmIDB4RkYpIC8gMjU1O1xuXG4gICAgdmFyIG1hdHJpeCA9IFtcbiAgICAgICAgMC4zLCAwLjU5LCAwLjExLCAwLCAwLFxuICAgICAgICBsUiwgbEcsIGxCLCBkZXNhdHVyYXRpb24sIDAsXG4gICAgICAgIGRSLCBkRywgZEIsIHRvbmVkLCAwLFxuICAgICAgICBsUiAtIGRSLCBsRyAtIGRHLCBsQiAtIGRCLCAwLCAwXG4gICAgXTtcblxuICAgIHRoaXMuX2xvYWRNYXRyaXgobWF0cml4LCBtdWx0aXBseSk7XG59O1xuXG4vKlxuICogTmlnaHQgZWZmZWN0XG4gKlxuICogQHBhcmFtIGludGVuc2l0eSB7bnVtYmVyfVxuICogQHBhcmFtIG11bHRpcGx5IHtib29sZWFufSByZWZlciB0byAuX2xvYWRNYXRyaXgoKSBtZXRob2RcbiAqL1xuQ29sb3JNYXRyaXhGaWx0ZXIucHJvdG90eXBlLm5pZ2h0ID0gZnVuY3Rpb24gKGludGVuc2l0eSwgbXVsdGlwbHkpXG57XG4gICAgaW50ZW5zaXR5ID0gaW50ZW5zaXR5IHx8IDAuMTtcbiAgICB2YXIgbWF0cml4ID0gW1xuICAgICAgICBpbnRlbnNpdHkgKiAoIC0yLjApLCAtaW50ZW5zaXR5LCAwLCAwLCAwLFxuICAgICAgICAtaW50ZW5zaXR5LCAwLCBpbnRlbnNpdHksIDAsIDAsXG4gICAgICAgIDAsIGludGVuc2l0eSwgaW50ZW5zaXR5ICogMi4wLCAwLCAwLFxuICAgICAgICAwLCAwLCAwLCAxLCAwXG4gICAgXTtcblxuICAgIHRoaXMuX2xvYWRNYXRyaXgobWF0cml4LCBtdWx0aXBseSk7XG59O1xuXG5cbi8qXG4gKiBQcmVkYXRvciBlZmZlY3RcbiAqXG4gKiBFcmFzZSB0aGUgY3VycmVudCBtYXRyaXggYnkgc2V0dGluZyBhIG5ldyBpbmRlcGVudCBvbmVcbiAqXG4gKiBAcGFyYW0gYW1vdW50IHtudW1iZXJ9IGhvdyBtdWNoIHRoZSBwcmVkYXRvciBmZWVscyBoaXMgZnV0dXJlIHZpY3RpbVxuICogQHBhcmFtIG11bHRpcGx5IHtib29sZWFufSByZWZlciB0byAuX2xvYWRNYXRyaXgoKSBtZXRob2RcbiAqL1xuQ29sb3JNYXRyaXhGaWx0ZXIucHJvdG90eXBlLnByZWRhdG9yID0gZnVuY3Rpb24gKGFtb3VudCwgbXVsdGlwbHkpXG57XG4gICAgdmFyIG1hdHJpeCA9IFtcbiAgICAgICAgMTEuMjI0MTMwNjMwNDkzMTY0ICogYW1vdW50LCAtNC43OTQ0ODY5OTk1MTE3MTkgKiBhbW91bnQsIC0yLjg3NDYxMTg1NDU1MzIyMjcgKiBhbW91bnQsIDAgKiBhbW91bnQsIDAuNDAzNDI0MzgyMjA5Nzc3ODMgKiBhbW91bnQsXG4gICAgICAgIC0zLjYzMzA2OTc1MzY0Njg1MDYgKiBhbW91bnQsIDkuMTkzMTU3MTk2MDQ0OTIyICogYW1vdW50LCAtMi45NTE4MTA4MzY3OTE5OTIgKiBhbW91bnQsIDAgKiBhbW91bnQsIC0xLjMxNjEzNTA0ODg2NjI3MiAqIGFtb3VudCxcbiAgICAgICAgLTMuMjE4NDE5NzkwMjY3OTQ0MyAqIGFtb3VudCwgLTQuMjM3NTAzMDUxNzU3ODEyNSAqIGFtb3VudCwgNy40NzY0NDgwNTkwODIwMzEgKiBhbW91bnQsIDAgKiBhbW91bnQsIDAuODA0NDQ1OTIyMzc0NzI1MyAqIGFtb3VudCxcbiAgICAgICAgMCwgMCwgMCwgMSwgMFxuICAgIF07XG5cbiAgICB0aGlzLl9sb2FkTWF0cml4KG1hdHJpeCwgbXVsdGlwbHkpO1xufTtcblxuLypcbiAqIExTRCBlZmZlY3RcbiAqXG4gKiBNdWx0aXBseSB0aGUgY3VycmVudCBtYXRyaXhcbiAqXG4gKiBAcGFyYW0gYW1vdW50IHtudW1iZXJ9IEhvdyBjcmF6eSBpcyB5b3VyIGVmZmVjdFxuICogQHBhcmFtIG11bHRpcGx5IHtib29sZWFufSByZWZlciB0byAuX2xvYWRNYXRyaXgoKSBtZXRob2RcbiAqL1xuQ29sb3JNYXRyaXhGaWx0ZXIucHJvdG90eXBlLmxzZCA9IGZ1bmN0aW9uIChtdWx0aXBseSlcbntcbiAgICB2YXIgbWF0cml4ID0gW1xuICAgICAgICAyLCAtMC40LCAwLjUsIDAsIDAsXG4gICAgICAgIC0wLjUsIDIsIC0wLjQsIDAsIDAsXG4gICAgICAgIC0wLjQsIC0wLjUsIDMsIDAsIDAsXG4gICAgICAgIDAsIDAsIDAsIDEsIDBcbiAgICBdO1xuXG4gICAgdGhpcy5fbG9hZE1hdHJpeChtYXRyaXgsIG11bHRpcGx5KTtcbn07XG5cbi8qXG4gKiBFcmFzZSB0aGUgY3VycmVudCBtYXRyaXggYnkgc2V0dGluZyB0aGUgZGVmYXVsdCBvbmVcbiAqXG4gKi9cbkNvbG9yTWF0cml4RmlsdGVyLnByb3RvdHlwZS5yZXNldCA9IGZ1bmN0aW9uICgpXG57XG4gICAgdmFyIG1hdHJpeCA9IFtcbiAgICAgICAgMSwgMCwgMCwgMCwgMCxcbiAgICAgICAgMCwgMSwgMCwgMCwgMCxcbiAgICAgICAgMCwgMCwgMSwgMCwgMCxcbiAgICAgICAgMCwgMCwgMCwgMSwgMFxuICAgIF07XG5cbiAgICB0aGlzLl9sb2FkTWF0cml4KG1hdHJpeCwgZmFsc2UpO1xufTtcblxuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhDb2xvck1hdHJpeEZpbHRlci5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBtYXRyaXggb2YgdGhlIGNvbG9yIG1hdHJpeCBmaWx0ZXJcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcltdfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuQ29sb3JNYXRyaXhGaWx0ZXIjXG4gICAgICogQGRlZmF1bHQgWzEsIDAsIDAsIDAsIDAsIDAsIDEsIDAsIDAsIDAsIDAsIDAsIDEsIDAsIDAsIDAsIDAsIDAsIDEsIDBdXG4gICAgICovXG4gICAgbWF0cml4OiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudW5pZm9ybXMubS52YWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudW5pZm9ybXMubS52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfVxufSk7XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uLy4uL2NvcmUnKTtcbi8vIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL3N1YnN0YWNrL2JyZnMvaXNzdWVzLzI1XG5cblxuLyoqXG4gKiBUaGlzIGxvd2VycyB0aGUgY29sb3IgZGVwdGggb2YgeW91ciBpbWFnZSBieSB0aGUgZ2l2ZW4gYW1vdW50LCBwcm9kdWNpbmcgYW4gaW1hZ2Ugd2l0aCBhIHNtYWxsZXIgcGFsZXR0ZS5cbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQWJzdHJhY3RGaWx0ZXJcbiAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnNcbiAqL1xuZnVuY3Rpb24gQ29sb3JTdGVwRmlsdGVyKClcbntcbiAgICBjb3JlLkFic3RyYWN0RmlsdGVyLmNhbGwodGhpcyxcbiAgICAgICAgLy8gdmVydGV4IHNoYWRlclxuICAgICAgICBudWxsLFxuICAgICAgICAvLyBmcmFnbWVudCBzaGFkZXJcbiAgICAgICAgXCJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcXG5cXG52YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDtcXG5cXG51bmlmb3JtIHNhbXBsZXIyRCB1U2FtcGxlcjtcXG51bmlmb3JtIGZsb2F0IHN0ZXA7XFxuXFxudm9pZCBtYWluKHZvaWQpXFxue1xcbiAgICB2ZWM0IGNvbG9yID0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2VGV4dHVyZUNvb3JkKTtcXG5cXG4gICAgY29sb3IgPSBmbG9vcihjb2xvciAqIHN0ZXApIC8gc3RlcDtcXG5cXG4gICAgZ2xfRnJhZ0NvbG9yID0gY29sb3I7XFxufVxcblwiLFxuICAgICAgICAvLyBjdXN0b20gdW5pZm9ybXNcbiAgICAgICAge1xuICAgICAgICAgICAgc3RlcDogeyB0eXBlOiAnMWYnLCB2YWx1ZTogNSB9XG4gICAgICAgIH1cbiAgICApO1xufVxuXG5Db2xvclN0ZXBGaWx0ZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShjb3JlLkFic3RyYWN0RmlsdGVyLnByb3RvdHlwZSk7XG5Db2xvclN0ZXBGaWx0ZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gQ29sb3JTdGVwRmlsdGVyO1xubW9kdWxlLmV4cG9ydHMgPSBDb2xvclN0ZXBGaWx0ZXI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKENvbG9yU3RlcEZpbHRlci5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBUaGUgbnVtYmVyIG9mIHN0ZXBzIHRvIHJlZHVjZSB0aGUgcGFsZXR0ZSBieS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLkNvbG9yU3RlcEZpbHRlciNcbiAgICAgKi9cbiAgICBzdGVwOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudW5pZm9ybXMuc3RlcC52YWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudW5pZm9ybXMuc3RlcC52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfVxufSk7XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uLy4uL2NvcmUnKTtcbi8vIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL3N1YnN0YWNrL2JyZnMvaXNzdWVzLzI1XG5cblxuLyoqXG4gKiBUaGUgQ29udm9sdXRpb25GaWx0ZXIgY2xhc3MgYXBwbGllcyBhIG1hdHJpeCBjb252b2x1dGlvbiBmaWx0ZXIgZWZmZWN0LlxuICogQSBjb252b2x1dGlvbiBjb21iaW5lcyBwaXhlbHMgaW4gdGhlIGlucHV0IGltYWdlIHdpdGggbmVpZ2hib3JpbmcgcGl4ZWxzIHRvIHByb2R1Y2UgYSBuZXcgaW1hZ2UuXG4gKiBBIHdpZGUgdmFyaWV0eSBvZiBpbWFnZSBlZmZlY3RzIGNhbiBiZSBhY2hpZXZlZCB0aHJvdWdoIGNvbnZvbHV0aW9ucywgaW5jbHVkaW5nIGJsdXJyaW5nLCBlZGdlXG4gKiBkZXRlY3Rpb24sIHNoYXJwZW5pbmcsIGVtYm9zc2luZywgYW5kIGJldmVsaW5nLiBUaGUgbWF0cml4IHNob3VsZCBiZSBzcGVjaWZpZWQgYXMgYSA5IHBvaW50IEFycmF5LlxuICogU2VlIGh0dHA6Ly9kb2NzLmdpbXAub3JnL2VuL3BsdWctaW4tY29udm1hdHJpeC5odG1sIGZvciBtb3JlIGluZm8uXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLkFic3RyYWN0RmlsdGVyXG4gKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzXG4gKiBAcGFyYW0gbWF0cml4IHtudW1iZXJbXX0gQW4gYXJyYXkgb2YgdmFsdWVzIHVzZWQgZm9yIG1hdHJpeCB0cmFuc2Zvcm1hdGlvbi4gU3BlY2lmaWVkIGFzIGEgOSBwb2ludCBBcnJheS5cbiAqIEBwYXJhbSB3aWR0aCB7bnVtYmVyfSBXaWR0aCBvZiB0aGUgb2JqZWN0IHlvdSBhcmUgdHJhbnNmb3JtaW5nXG4gKiBAcGFyYW0gaGVpZ2h0IHtudW1iZXJ9IEhlaWdodCBvZiB0aGUgb2JqZWN0IHlvdSBhcmUgdHJhbnNmb3JtaW5nXG4gKi9cbmZ1bmN0aW9uIENvbnZvbHV0aW9uRmlsdGVyKG1hdHJpeCwgd2lkdGgsIGhlaWdodClcbntcbiAgICBjb3JlLkFic3RyYWN0RmlsdGVyLmNhbGwodGhpcyxcbiAgICAgICAgLy8gdmVydGV4IHNoYWRlclxuICAgICAgICBudWxsLFxuICAgICAgICAvLyBmcmFnbWVudCBzaGFkZXJcbiAgICAgICAgXCJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcXG5cXG52YXJ5aW5nIG1lZGl1bXAgdmVjMiB2VGV4dHVyZUNvb3JkO1xcblxcbnVuaWZvcm0gc2FtcGxlcjJEIHVTYW1wbGVyO1xcbnVuaWZvcm0gdmVjMiB0ZXhlbFNpemU7XFxudW5pZm9ybSBmbG9hdCBtYXRyaXhbOV07XFxuXFxudm9pZCBtYWluKHZvaWQpXFxue1xcbiAgIHZlYzQgYzExID0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2VGV4dHVyZUNvb3JkIC0gdGV4ZWxTaXplKTsgLy8gdG9wIGxlZnRcXG4gICB2ZWM0IGMxMiA9IHRleHR1cmUyRCh1U2FtcGxlciwgdmVjMih2VGV4dHVyZUNvb3JkLngsIHZUZXh0dXJlQ29vcmQueSAtIHRleGVsU2l6ZS55KSk7IC8vIHRvcCBjZW50ZXJcXG4gICB2ZWM0IGMxMyA9IHRleHR1cmUyRCh1U2FtcGxlciwgdmVjMih2VGV4dHVyZUNvb3JkLnggKyB0ZXhlbFNpemUueCwgdlRleHR1cmVDb29yZC55IC0gdGV4ZWxTaXplLnkpKTsgLy8gdG9wIHJpZ2h0XFxuXFxuICAgdmVjNCBjMjEgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZlYzIodlRleHR1cmVDb29yZC54IC0gdGV4ZWxTaXplLngsIHZUZXh0dXJlQ29vcmQueSkpOyAvLyBtaWQgbGVmdFxcbiAgIHZlYzQgYzIyID0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2VGV4dHVyZUNvb3JkKTsgLy8gbWlkIGNlbnRlclxcbiAgIHZlYzQgYzIzID0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2ZWMyKHZUZXh0dXJlQ29vcmQueCArIHRleGVsU2l6ZS54LCB2VGV4dHVyZUNvb3JkLnkpKTsgLy8gbWlkIHJpZ2h0XFxuXFxuICAgdmVjNCBjMzEgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZlYzIodlRleHR1cmVDb29yZC54IC0gdGV4ZWxTaXplLngsIHZUZXh0dXJlQ29vcmQueSArIHRleGVsU2l6ZS55KSk7IC8vIGJvdHRvbSBsZWZ0XFxuICAgdmVjNCBjMzIgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZlYzIodlRleHR1cmVDb29yZC54LCB2VGV4dHVyZUNvb3JkLnkgKyB0ZXhlbFNpemUueSkpOyAvLyBib3R0b20gY2VudGVyXFxuICAgdmVjNCBjMzMgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZUZXh0dXJlQ29vcmQgKyB0ZXhlbFNpemUpOyAvLyBib3R0b20gcmlnaHRcXG5cXG4gICBnbF9GcmFnQ29sb3IgPVxcbiAgICAgICBjMTEgKiBtYXRyaXhbMF0gKyBjMTIgKiBtYXRyaXhbMV0gKyBjMTMgKiBtYXRyaXhbMl0gK1xcbiAgICAgICBjMjEgKiBtYXRyaXhbM10gKyBjMjIgKiBtYXRyaXhbNF0gKyBjMjMgKiBtYXRyaXhbNV0gK1xcbiAgICAgICBjMzEgKiBtYXRyaXhbNl0gKyBjMzIgKiBtYXRyaXhbN10gKyBjMzMgKiBtYXRyaXhbOF07XFxuXFxuICAgZ2xfRnJhZ0NvbG9yLmEgPSBjMjIuYTtcXG59XFxuXCIsXG4gICAgICAgIC8vIGN1c3RvbSB1bmlmb3Jtc1xuICAgICAgICB7XG4gICAgICAgICAgICBtYXRyaXg6ICAgICB7IHR5cGU6ICcxZnYnLCB2YWx1ZTogbmV3IEZsb2F0MzJBcnJheShtYXRyaXgpIH0sXG4gICAgICAgICAgICB0ZXhlbFNpemU6ICB7IHR5cGU6ICd2MicsIHZhbHVlOiB7IHg6IDEgLyB3aWR0aCwgeTogMSAvIGhlaWdodCB9IH1cbiAgICAgICAgfVxuICAgICk7XG59XG5cbkNvbnZvbHV0aW9uRmlsdGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoY29yZS5BYnN0cmFjdEZpbHRlci5wcm90b3R5cGUpO1xuQ29udm9sdXRpb25GaWx0ZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gQ29udm9sdXRpb25GaWx0ZXI7XG5tb2R1bGUuZXhwb3J0cyA9IENvbnZvbHV0aW9uRmlsdGVyO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhDb252b2x1dGlvbkZpbHRlci5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBBbiBhcnJheSBvZiB2YWx1ZXMgdXNlZCBmb3IgbWF0cml4IHRyYW5zZm9ybWF0aW9uLiBTcGVjaWZpZWQgYXMgYSA5IHBvaW50IEFycmF5LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyW119XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5Db252b2x1dGlvbkZpbHRlciNcbiAgICAgKi9cbiAgICBtYXRyaXg6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy51bmlmb3Jtcy5tYXRyaXgudmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLm1hdHJpeC52YWx1ZSA9IG5ldyBGbG9hdDMyQXJyYXkodmFsdWUpO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFdpZHRoIG9mIHRoZSBvYmplY3QgeW91IGFyZSB0cmFuc2Zvcm1pbmdcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLkNvbnZvbHV0aW9uRmlsdGVyI1xuICAgICAqL1xuICAgIHdpZHRoOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIDEvdGhpcy51bmlmb3Jtcy50ZXhlbFNpemUudmFsdWUueDtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudW5pZm9ybXMudGV4ZWxTaXplLnZhbHVlLnggPSAxL3ZhbHVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIEhlaWdodCBvZiB0aGUgb2JqZWN0IHlvdSBhcmUgdHJhbnNmb3JtaW5nXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5Db252b2x1dGlvbkZpbHRlciNcbiAgICAgKi9cbiAgICBoZWlnaHQ6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gMS90aGlzLnVuaWZvcm1zLnRleGVsU2l6ZS52YWx1ZS55O1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy50ZXhlbFNpemUudmFsdWUueSA9IDEvdmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG59KTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vLi4vY29yZScpO1xuLy8gQHNlZSBodHRwczovL2dpdGh1Yi5jb20vc3Vic3RhY2svYnJmcy9pc3N1ZXMvMjVcblxuXG4vKipcbiAqIEEgQ3Jvc3MgSGF0Y2ggZWZmZWN0IGZpbHRlci5cbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQWJzdHJhY3RGaWx0ZXJcbiAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnNcbiAqL1xuZnVuY3Rpb24gQ3Jvc3NIYXRjaEZpbHRlcigpXG57XG4gICAgY29yZS5BYnN0cmFjdEZpbHRlci5jYWxsKHRoaXMsXG4gICAgICAgIC8vIHZlcnRleCBzaGFkZXJcbiAgICAgICAgbnVsbCxcbiAgICAgICAgLy8gZnJhZ21lbnQgc2hhZGVyXG4gICAgICAgIFwicHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XFxuXFxudmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7XFxuXFxudW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXI7XFxuXFxudm9pZCBtYWluKHZvaWQpXFxue1xcbiAgICBmbG9hdCBsdW0gPSBsZW5ndGgodGV4dHVyZTJEKHVTYW1wbGVyLCB2VGV4dHVyZUNvb3JkLnh5KS5yZ2IpO1xcblxcbiAgICBnbF9GcmFnQ29sb3IgPSB2ZWM0KDEuMCwgMS4wLCAxLjAsIDEuMCk7XFxuXFxuICAgIGlmIChsdW0gPCAxLjAwKVxcbiAgICB7XFxuICAgICAgICBpZiAobW9kKGdsX0ZyYWdDb29yZC54ICsgZ2xfRnJhZ0Nvb3JkLnksIDEwLjApID09IDAuMClcXG4gICAgICAgIHtcXG4gICAgICAgICAgICBnbF9GcmFnQ29sb3IgPSB2ZWM0KDAuMCwgMC4wLCAwLjAsIDEuMCk7XFxuICAgICAgICB9XFxuICAgIH1cXG5cXG4gICAgaWYgKGx1bSA8IDAuNzUpXFxuICAgIHtcXG4gICAgICAgIGlmIChtb2QoZ2xfRnJhZ0Nvb3JkLnggLSBnbF9GcmFnQ29vcmQueSwgMTAuMCkgPT0gMC4wKVxcbiAgICAgICAge1xcbiAgICAgICAgICAgIGdsX0ZyYWdDb2xvciA9IHZlYzQoMC4wLCAwLjAsIDAuMCwgMS4wKTtcXG4gICAgICAgIH1cXG4gICAgfVxcblxcbiAgICBpZiAobHVtIDwgMC41MClcXG4gICAge1xcbiAgICAgICAgaWYgKG1vZChnbF9GcmFnQ29vcmQueCArIGdsX0ZyYWdDb29yZC55IC0gNS4wLCAxMC4wKSA9PSAwLjApXFxuICAgICAgICB7XFxuICAgICAgICAgICAgZ2xfRnJhZ0NvbG9yID0gdmVjNCgwLjAsIDAuMCwgMC4wLCAxLjApO1xcbiAgICAgICAgfVxcbiAgICB9XFxuXFxuICAgIGlmIChsdW0gPCAwLjMpXFxuICAgIHtcXG4gICAgICAgIGlmIChtb2QoZ2xfRnJhZ0Nvb3JkLnggLSBnbF9GcmFnQ29vcmQueSAtIDUuMCwgMTAuMCkgPT0gMC4wKVxcbiAgICAgICAge1xcbiAgICAgICAgICAgIGdsX0ZyYWdDb2xvciA9IHZlYzQoMC4wLCAwLjAsIDAuMCwgMS4wKTtcXG4gICAgICAgIH1cXG4gICAgfVxcbn1cXG5cIlxuICAgICk7XG59XG5cbkNyb3NzSGF0Y2hGaWx0ZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShjb3JlLkFic3RyYWN0RmlsdGVyLnByb3RvdHlwZSk7XG5Dcm9zc0hhdGNoRmlsdGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IENyb3NzSGF0Y2hGaWx0ZXI7XG5tb2R1bGUuZXhwb3J0cyA9IENyb3NzSGF0Y2hGaWx0ZXI7XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uLy4uL2NvcmUnKTtcbi8vIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL3N1YnN0YWNrL2JyZnMvaXNzdWVzLzI1XG5cblxuLyoqXG4gKiBUaGUgRGlzcGxhY2VtZW50RmlsdGVyIGNsYXNzIHVzZXMgdGhlIHBpeGVsIHZhbHVlcyBmcm9tIHRoZSBzcGVjaWZpZWQgdGV4dHVyZSAoY2FsbGVkIHRoZSBkaXNwbGFjZW1lbnQgbWFwKSB0byBwZXJmb3JtIGEgZGlzcGxhY2VtZW50IG9mIGFuIG9iamVjdC5cbiAqIFlvdSBjYW4gdXNlIHRoaXMgZmlsdGVyIHRvIGFwcGx5IGFsbCBtYW5vciBvZiBjcmF6eSB3YXJwaW5nIGVmZmVjdHNcbiAqIEN1cnJlbnRseSB0aGUgciBwcm9wZXJ0eSBvZiB0aGUgdGV4dHVyZSBpcyB1c2VkIHRvIG9mZnNldCB0aGUgeCBhbmQgdGhlIGcgcHJvcGVydHkgb2YgdGhlIHRleHR1cmUgaXMgdXNlZCB0byBvZmZzZXQgdGhlIHkuXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLkFic3RyYWN0RmlsdGVyXG4gKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzXG4gKiBAcGFyYW0gc3ByaXRlIHtQSVhJLlNwcml0ZX0gdGhlIHNwcml0ZSB1c2VkIGZvciB0aGUgZGlzcGxhY2VtZW50IG1hcC4gKG1ha2Ugc3VyZSBpdHMgYWRkZWQgdG8gdGhlIHNjZW5lISlcbiAqL1xuZnVuY3Rpb24gRGlzcGxhY2VtZW50RmlsdGVyKHNwcml0ZSwgc2NhbGUpXG57XG4gICAgdmFyIG1hc2tNYXRyaXggPSBuZXcgY29yZS5NYXRyaXgoKTtcbiAgICBzcHJpdGUucmVuZGVyYWJsZSA9IGZhbHNlO1xuXG4gICAgY29yZS5BYnN0cmFjdEZpbHRlci5jYWxsKHRoaXMsXG4gICAgICAgIC8vIHZlcnRleCBzaGFkZXJcbiAgICAgICAgXCJhdHRyaWJ1dGUgdmVjMiBhVmVydGV4UG9zaXRpb247XFxuYXR0cmlidXRlIHZlYzIgYVRleHR1cmVDb29yZDtcXG5hdHRyaWJ1dGUgdmVjNCBhQ29sb3I7XFxuXFxudW5pZm9ybSBtYXQzIHByb2plY3Rpb25NYXRyaXg7XFxudW5pZm9ybSBtYXQzIG90aGVyTWF0cml4O1xcblxcbnZhcnlpbmcgdmVjMiB2TWFwQ29vcmQ7XFxudmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7XFxudmFyeWluZyB2ZWM0IHZDb2xvcjtcXG5cXG52b2lkIG1haW4odm9pZClcXG57XFxuICAgZ2xfUG9zaXRpb24gPSB2ZWM0KChwcm9qZWN0aW9uTWF0cml4ICogdmVjMyhhVmVydGV4UG9zaXRpb24sIDEuMCkpLnh5LCAwLjAsIDEuMCk7XFxuICAgdlRleHR1cmVDb29yZCA9IGFUZXh0dXJlQ29vcmQ7XFxuICAgdk1hcENvb3JkID0gKCBvdGhlck1hdHJpeCAqIHZlYzMoIGFUZXh0dXJlQ29vcmQsIDEuMCkgICkueHk7XFxuICAgdkNvbG9yID0gdmVjNChhQ29sb3IucmdiICogYUNvbG9yLmEsIGFDb2xvci5hKTtcXG59XFxuXCIsXG4gICAgICAgIC8vIGZyYWdtZW50IHNoYWRlclxuICAgICAgICBcInByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xcblxcbnZhcnlpbmcgdmVjMiB2TWFwQ29vcmQ7XFxudmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7XFxudmFyeWluZyB2ZWM0IHZDb2xvcjtcXG5cXG51bmlmb3JtIHZlYzIgc2NhbGU7XFxuXFxudW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXI7XFxudW5pZm9ybSBzYW1wbGVyMkQgbWFwU2FtcGxlcjtcXG5cXG52b2lkIG1haW4odm9pZClcXG57XFxuICAgdmVjNCBtYXAgPSAgdGV4dHVyZTJEKG1hcFNhbXBsZXIsIHZNYXBDb29yZCk7XFxuXFxuICAgbWFwIC09IDAuNTtcXG4gICBtYXAueHkgKj0gc2NhbGU7XFxuXFxuICAgZ2xfRnJhZ0NvbG9yID0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2ZWMyKHZUZXh0dXJlQ29vcmQueCArIG1hcC54LCB2VGV4dHVyZUNvb3JkLnkgKyBtYXAueSkpO1xcbn1cXG5cIixcbiAgICAgICAgLy8gdW5pZm9ybXNcbiAgICAgICAge1xuICAgICAgICAgICAgbWFwU2FtcGxlcjogICAgIHsgdHlwZTogJ3NhbXBsZXIyRCcsIHZhbHVlOiBzcHJpdGUudGV4dHVyZSB9LFxuICAgICAgICAgICAgb3RoZXJNYXRyaXg6ICAgIHsgdHlwZTogJ21hdDMnLCB2YWx1ZTogbWFza01hdHJpeC50b0FycmF5KHRydWUpIH0sXG4gICAgICAgICAgICBzY2FsZTogICAgICAgICAgeyB0eXBlOiAndjInLCB2YWx1ZTogeyB4OiAxLCB5OiAxIH0gfVxuICAgICAgICB9XG4gICAgKTtcblxuICAgIHRoaXMubWFza1Nwcml0ZSA9IHNwcml0ZTtcbiAgICB0aGlzLm1hc2tNYXRyaXggPSBtYXNrTWF0cml4O1xuXG4gICAgaWYgKHNjYWxlID09PSBudWxsIHx8IHNjYWxlID09PSB1bmRlZmluZWQpXG4gICAge1xuICAgICAgICBzY2FsZSA9IDIwO1xuICAgIH1cblxuICAgIHRoaXMuc2NhbGUgPSBuZXcgY29yZS5Qb2ludChzY2FsZSwgc2NhbGUpO1xufVxuXG5EaXNwbGFjZW1lbnRGaWx0ZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShjb3JlLkFic3RyYWN0RmlsdGVyLnByb3RvdHlwZSk7XG5EaXNwbGFjZW1lbnRGaWx0ZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gRGlzcGxhY2VtZW50RmlsdGVyO1xubW9kdWxlLmV4cG9ydHMgPSBEaXNwbGFjZW1lbnRGaWx0ZXI7XG5cbkRpc3BsYWNlbWVudEZpbHRlci5wcm90b3R5cGUuYXBwbHlGaWx0ZXIgPSBmdW5jdGlvbiAocmVuZGVyZXIsIGlucHV0LCBvdXRwdXQpXG57XG4gICAgdmFyIGZpbHRlck1hbmFnZXIgPSByZW5kZXJlci5maWx0ZXJNYW5hZ2VyO1xuXG4gICAgZmlsdGVyTWFuYWdlci5jYWxjdWxhdGVNYXBwZWRNYXRyaXgoaW5wdXQuZnJhbWUsIHRoaXMubWFza1Nwcml0ZSwgdGhpcy5tYXNrTWF0cml4KTtcblxuICAgIHRoaXMudW5pZm9ybXMub3RoZXJNYXRyaXgudmFsdWUgPSB0aGlzLm1hc2tNYXRyaXgudG9BcnJheSh0cnVlKTtcbiAgICB0aGlzLnVuaWZvcm1zLnNjYWxlLnZhbHVlLnggPSB0aGlzLnNjYWxlLnggKiAoMS9pbnB1dC5mcmFtZS53aWR0aCk7XG4gICAgdGhpcy51bmlmb3Jtcy5zY2FsZS52YWx1ZS55ID0gdGhpcy5zY2FsZS55ICogKDEvaW5wdXQuZnJhbWUuaGVpZ2h0KTtcblxuICAgIHZhciBzaGFkZXIgPSB0aGlzLmdldFNoYWRlcihyZW5kZXJlcik7XG4gICAgIC8vIGRyYXcgdGhlIGZpbHRlci4uLlxuICAgIGZpbHRlck1hbmFnZXIuYXBwbHlGaWx0ZXIoc2hhZGVyLCBpbnB1dCwgb3V0cHV0KTtcbn07XG5cblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoRGlzcGxhY2VtZW50RmlsdGVyLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFRoZSB0ZXh0dXJlIHVzZWQgZm9yIHRoZSBkaXNwbGFjZW1lbnQgbWFwLiBNdXN0IGJlIHBvd2VyIG9mIDIgc2l6ZWQgdGV4dHVyZS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuVGV4dHVyZX1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLkRpc3BsYWNlbWVudEZpbHRlciNcbiAgICAgKi9cbiAgICBtYXA6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy51bmlmb3Jtcy5tYXBTYW1wbGVyLnZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy5tYXBTYW1wbGVyLnZhbHVlID0gdmFsdWU7XG5cbiAgICAgICAgfVxuICAgIH1cbn0pO1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi8uLi9jb3JlJyk7XG4vLyBAc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9zdWJzdGFjay9icmZzL2lzc3Vlcy8yNVxuXG5cbi8qKlxuICogQGF1dGhvciBNYXQgR3JvdmVzIGh0dHA6Ly9tYXRncm92ZXMuY29tLyBARG9vcm1hdDIzXG4gKiBvcmlnaW5hbCBmaWx0ZXI6IGh0dHBzOi8vZ2l0aHViLmNvbS9ldmFudy9nbGZ4LmpzL2Jsb2IvbWFzdGVyL3NyYy9maWx0ZXJzL2Z1bi9kb3RzY3JlZW4uanNcbiAqL1xuXG4vKipcbiAqIFRoaXMgZmlsdGVyIGFwcGxpZXMgYSBkb3RzY3JlZW4gZWZmZWN0IG1ha2luZyBkaXNwbGF5IG9iamVjdHMgYXBwZWFyIHRvIGJlIG1hZGUgb3V0IG9mXG4gKiBibGFjayBhbmQgd2hpdGUgaGFsZnRvbmUgZG90cyBsaWtlIGFuIG9sZCBwcmludGVyLlxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5BYnN0cmFjdEZpbHRlclxuICogQG1lbWJlcm9mIFBJWEkuZmlsdGVyc1xuICovXG5mdW5jdGlvbiBEb3RTY3JlZW5GaWx0ZXIoKVxue1xuICAgIGNvcmUuQWJzdHJhY3RGaWx0ZXIuY2FsbCh0aGlzLFxuICAgICAgICAvLyB2ZXJ0ZXggc2hhZGVyXG4gICAgICAgIG51bGwsXG4gICAgICAgIC8vIGZyYWdtZW50IHNoYWRlclxuICAgICAgICBcInByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xcblxcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xcbnZhcnlpbmcgdmVjNCB2Q29sb3I7XFxuXFxudW5pZm9ybSB2ZWM0IGRpbWVuc2lvbnM7XFxudW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXI7XFxuXFxudW5pZm9ybSBmbG9hdCBhbmdsZTtcXG51bmlmb3JtIGZsb2F0IHNjYWxlO1xcblxcbmZsb2F0IHBhdHRlcm4oKVxcbntcXG4gICBmbG9hdCBzID0gc2luKGFuZ2xlKSwgYyA9IGNvcyhhbmdsZSk7XFxuICAgdmVjMiB0ZXggPSB2VGV4dHVyZUNvb3JkICogZGltZW5zaW9ucy54eTtcXG4gICB2ZWMyIHBvaW50ID0gdmVjMihcXG4gICAgICAgYyAqIHRleC54IC0gcyAqIHRleC55LFxcbiAgICAgICBzICogdGV4LnggKyBjICogdGV4LnlcXG4gICApICogc2NhbGU7XFxuICAgcmV0dXJuIChzaW4ocG9pbnQueCkgKiBzaW4ocG9pbnQueSkpICogNC4wO1xcbn1cXG5cXG52b2lkIG1haW4oKVxcbntcXG4gICB2ZWM0IGNvbG9yID0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2VGV4dHVyZUNvb3JkKTtcXG4gICBmbG9hdCBhdmVyYWdlID0gKGNvbG9yLnIgKyBjb2xvci5nICsgY29sb3IuYikgLyAzLjA7XFxuICAgZ2xfRnJhZ0NvbG9yID0gdmVjNCh2ZWMzKGF2ZXJhZ2UgKiAxMC4wIC0gNS4wICsgcGF0dGVybigpKSwgY29sb3IuYSk7XFxufVxcblwiLFxuICAgICAgICAvLyBjdXN0b20gdW5pZm9ybXNcbiAgICAgICAge1xuICAgICAgICAgICAgc2NhbGU6ICAgICAgeyB0eXBlOiAnMWYnLCB2YWx1ZTogMSB9LFxuICAgICAgICAgICAgYW5nbGU6ICAgICAgeyB0eXBlOiAnMWYnLCB2YWx1ZTogNSB9LFxuICAgICAgICAgICAgZGltZW5zaW9uczogeyB0eXBlOiAnNGZ2JywgdmFsdWU6IFswLCAwLCAwLCAwXSB9XG4gICAgICAgIH1cbiAgICApO1xufVxuXG5Eb3RTY3JlZW5GaWx0ZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShjb3JlLkFic3RyYWN0RmlsdGVyLnByb3RvdHlwZSk7XG5Eb3RTY3JlZW5GaWx0ZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gRG90U2NyZWVuRmlsdGVyO1xubW9kdWxlLmV4cG9ydHMgPSBEb3RTY3JlZW5GaWx0ZXI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKERvdFNjcmVlbkZpbHRlci5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBUaGUgc2NhbGUgb2YgdGhlIGVmZmVjdC5cbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5Eb3RTY3JlZW5GaWx0ZXIjXG4gICAgICovXG4gICAgc2NhbGU6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy51bmlmb3Jtcy5zY2FsZS52YWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudW5pZm9ybXMuc2NhbGUudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBUaGUgcmFkaXVzIG9mIHRoZSBlZmZlY3QuXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuRG90U2NyZWVuRmlsdGVyI1xuICAgICAqL1xuICAgIGFuZ2xlOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudW5pZm9ybXMuYW5nbGUudmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLmFuZ2xlLnZhbHVlID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG59KTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vLi4vY29yZScpO1xuXG4vLyBAc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9zdWJzdGFjay9icmZzL2lzc3Vlcy8yNVxuXG5cbi8qKlxuICogVGhlIEJsdXJZVGludEZpbHRlciBhcHBsaWVzIGEgdmVydGljYWwgR2F1c3NpYW4gYmx1ciB0byBhbiBvYmplY3QuXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLkFic3RyYWN0RmlsdGVyXG4gKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzXG4gKi9cbmZ1bmN0aW9uIEJsdXJZVGludEZpbHRlcigpXG57XG4gICAgY29yZS5BYnN0cmFjdEZpbHRlci5jYWxsKHRoaXMsXG4gICAgICAgIC8vIHZlcnRleCBzaGFkZXJcbiAgICAgICAgXCJhdHRyaWJ1dGUgdmVjMiBhVmVydGV4UG9zaXRpb247XFxuYXR0cmlidXRlIHZlYzIgYVRleHR1cmVDb29yZDtcXG5hdHRyaWJ1dGUgdmVjNCBhQ29sb3I7XFxuXFxudW5pZm9ybSBmbG9hdCBzdHJlbmd0aDtcXG51bmlmb3JtIHZlYzIgb2Zmc2V0O1xcblxcbnVuaWZvcm0gbWF0MyBwcm9qZWN0aW9uTWF0cml4O1xcblxcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xcbnZhcnlpbmcgdmVjNCB2Q29sb3I7XFxudmFyeWluZyB2ZWMyIHZCbHVyVGV4Q29vcmRzWzZdO1xcblxcbnZvaWQgbWFpbih2b2lkKVxcbntcXG4gICAgZ2xfUG9zaXRpb24gPSB2ZWM0KChwcm9qZWN0aW9uTWF0cml4ICogdmVjMygoYVZlcnRleFBvc2l0aW9uK29mZnNldCksIDEuMCkpLnh5LCAwLjAsIDEuMCk7XFxuICAgIHZUZXh0dXJlQ29vcmQgPSBhVGV4dHVyZUNvb3JkO1xcblxcbiAgICB2Qmx1clRleENvb3Jkc1sgMF0gPSBhVGV4dHVyZUNvb3JkICsgdmVjMigwLjAsIC0wLjAxMiAqIHN0cmVuZ3RoKTtcXG4gICAgdkJsdXJUZXhDb29yZHNbIDFdID0gYVRleHR1cmVDb29yZCArIHZlYzIoMC4wLCAtMC4wMDggKiBzdHJlbmd0aCk7XFxuICAgIHZCbHVyVGV4Q29vcmRzWyAyXSA9IGFUZXh0dXJlQ29vcmQgKyB2ZWMyKDAuMCwgLTAuMDA0ICogc3RyZW5ndGgpO1xcbiAgICB2Qmx1clRleENvb3Jkc1sgM10gPSBhVGV4dHVyZUNvb3JkICsgdmVjMigwLjAsICAwLjAwNCAqIHN0cmVuZ3RoKTtcXG4gICAgdkJsdXJUZXhDb29yZHNbIDRdID0gYVRleHR1cmVDb29yZCArIHZlYzIoMC4wLCAgMC4wMDggKiBzdHJlbmd0aCk7XFxuICAgIHZCbHVyVGV4Q29vcmRzWyA1XSA9IGFUZXh0dXJlQ29vcmQgKyB2ZWMyKDAuMCwgIDAuMDEyICogc3RyZW5ndGgpO1xcblxcbiAgIHZDb2xvciA9IHZlYzQoYUNvbG9yLnJnYiAqIGFDb2xvci5hLCBhQ29sb3IuYSk7XFxufVxcblwiLFxuICAgICAgICAvLyBmcmFnbWVudCBzaGFkZXJcbiAgICAgICAgXCJwcmVjaXNpb24gbG93cCBmbG9hdDtcXG5cXG52YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDtcXG52YXJ5aW5nIHZlYzIgdkJsdXJUZXhDb29yZHNbNl07XFxudmFyeWluZyB2ZWM0IHZDb2xvcjtcXG5cXG51bmlmb3JtIHZlYzMgY29sb3I7XFxudW5pZm9ybSBmbG9hdCBhbHBoYTtcXG5cXG51bmlmb3JtIHNhbXBsZXIyRCB1U2FtcGxlcjtcXG5cXG52b2lkIG1haW4odm9pZClcXG57XFxuICAgIHZlYzQgc3VtID0gdmVjNCgwLjApO1xcblxcbiAgICBzdW0gKz0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2Qmx1clRleENvb3Jkc1sgMF0pKjAuMDA0NDMxODQ4NDExOTM4MzQxO1xcbiAgICBzdW0gKz0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2Qmx1clRleENvb3Jkc1sgMV0pKjAuMDUzOTkwOTY2NTEzMTg5ODU7XFxuICAgIHN1bSArPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZCbHVyVGV4Q29vcmRzWyAyXSkqMC4yNDE5NzA3MjQ1MTkxNDU0O1xcbiAgICBzdW0gKz0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2VGV4dHVyZUNvb3JkICAgICApKjAuMzk4OTQyMjgwNDAxNDMyNztcXG4gICAgc3VtICs9IHRleHR1cmUyRCh1U2FtcGxlciwgdkJsdXJUZXhDb29yZHNbIDNdKSowLjI0MTk3MDcyNDUxOTE0NTQ7XFxuICAgIHN1bSArPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZCbHVyVGV4Q29vcmRzWyA0XSkqMC4wNTM5OTA5NjY1MTMxODk4NTtcXG4gICAgc3VtICs9IHRleHR1cmUyRCh1U2FtcGxlciwgdkJsdXJUZXhDb29yZHNbIDVdKSowLjAwNDQzMTg0ODQxMTkzODM0MTtcXG5cXG4gICAgZ2xfRnJhZ0NvbG9yID0gdmVjNCggY29sb3IucmdiICogc3VtLmEgKiBhbHBoYSwgc3VtLmEgKiBhbHBoYSApO1xcbn1cXG5cIixcbiAgICAgICAgLy8gc2V0IHRoZSB1bmlmb3Jtc1xuICAgICAgICB7XG4gICAgICAgICAgICBibHVyOiB7IHR5cGU6ICcxZicsIHZhbHVlOiAxIC8gNTEyIH0sXG4gICAgICAgICAgICBjb2xvcjogeyB0eXBlOiAnYycsIHZhbHVlOiBbMCwwLDBdfSxcbiAgICAgICAgICAgIGFscGhhOiB7IHR5cGU6ICcxZicsIHZhbHVlOiAwLjcgfSxcbiAgICAgICAgICAgIG9mZnNldDogeyB0eXBlOiAnMmYnLCB2YWx1ZTpbNSwgNV19LFxuICAgICAgICAgICAgc3RyZW5ndGg6IHsgdHlwZTogJzFmJywgdmFsdWU6MX1cbiAgICAgICAgfVxuICAgICk7XG5cbiAgICB0aGlzLnBhc3NlcyA9IDE7XG4gICAgdGhpcy5zdHJlbmd0aCA9IDQ7XG59XG5cbkJsdXJZVGludEZpbHRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuQWJzdHJhY3RGaWx0ZXIucHJvdG90eXBlKTtcbkJsdXJZVGludEZpbHRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBCbHVyWVRpbnRGaWx0ZXI7XG5tb2R1bGUuZXhwb3J0cyA9IEJsdXJZVGludEZpbHRlcjtcblxuQmx1cllUaW50RmlsdGVyLnByb3RvdHlwZS5hcHBseUZpbHRlciA9IGZ1bmN0aW9uIChyZW5kZXJlciwgaW5wdXQsIG91dHB1dCwgY2xlYXIpXG57XG4gICAgdmFyIHNoYWRlciA9IHRoaXMuZ2V0U2hhZGVyKHJlbmRlcmVyKTtcblxuICAgIHRoaXMudW5pZm9ybXMuc3RyZW5ndGgudmFsdWUgPSB0aGlzLnN0cmVuZ3RoIC8gNCAvIHRoaXMucGFzc2VzICogKGlucHV0LmZyYW1lLmhlaWdodCAvIGlucHV0LnNpemUuaGVpZ2h0KTtcblxuICAgIGlmKHRoaXMucGFzc2VzID09PSAxKVxuICAgIHtcbiAgICAgICAgcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5hcHBseUZpbHRlcihzaGFkZXIsIGlucHV0LCBvdXRwdXQsIGNsZWFyKTtcbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgdmFyIHJlbmRlclRhcmdldCA9IHJlbmRlcmVyLmZpbHRlck1hbmFnZXIuZ2V0UmVuZGVyVGFyZ2V0KHRydWUpO1xuICAgICAgICB2YXIgZmxpcCA9IGlucHV0O1xuICAgICAgICB2YXIgZmxvcCA9IHJlbmRlclRhcmdldDtcblxuICAgICAgICBmb3IodmFyIGkgPSAwOyBpIDwgdGhpcy5wYXNzZXMtMTsgaSsrKVxuICAgICAgICB7XG4gICAgICAgICAgICByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLmFwcGx5RmlsdGVyKHNoYWRlciwgZmxpcCwgZmxvcCwgY2xlYXIpO1xuXG4gICAgICAgICAgIHZhciB0ZW1wID0gZmxvcDtcbiAgICAgICAgICAgZmxvcCA9IGZsaXA7XG4gICAgICAgICAgIGZsaXAgPSB0ZW1wO1xuICAgICAgICB9XG5cbiAgICAgICAgcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5hcHBseUZpbHRlcihzaGFkZXIsIGZsaXAsIG91dHB1dCwgY2xlYXIpO1xuXG4gICAgICAgIHJlbmRlcmVyLmZpbHRlck1hbmFnZXIucmV0dXJuUmVuZGVyVGFyZ2V0KHJlbmRlclRhcmdldCk7XG4gICAgfVxufTtcblxuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhCbHVyWVRpbnRGaWx0ZXIucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgc3RyZW5ndGggb2YgYm90aCB0aGUgYmx1ci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLkJsdXJZVGludEZpbHRlciNcbiAgICAgKiBAZGVmYXVsdCAyXG4gICAgICovXG4gICAgYmx1cjoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiAgdGhpcy5zdHJlbmd0aDtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMucGFkZGluZyA9IHZhbHVlICogMC41O1xuICAgICAgICAgICAgdGhpcy5zdHJlbmd0aCA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfVxufSk7XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uLy4uL2NvcmUnKSxcbiAgICBCbHVyWEZpbHRlciA9IHJlcXVpcmUoJy4uL2JsdXIvQmx1clhGaWx0ZXInKSxcbiAgICBCbHVyWVRpbnRGaWx0ZXIgPSByZXF1aXJlKCcuL0JsdXJZVGludEZpbHRlcicpO1xuXG4vKipcbiAqIFRoZSBEcm9wU2hhZG93RmlsdGVyIGFwcGxpZXMgYSBHYXVzc2lhbiBibHVyIHRvIGFuIG9iamVjdC5cbiAqIFRoZSBzdHJlbmd0aCBvZiB0aGUgYmx1ciBjYW4gYmUgc2V0IGZvciB4LSBhbmQgeS1heGlzIHNlcGFyYXRlbHkuXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLkFic3RyYWN0RmlsdGVyXG4gKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzXG4gKi9cbmZ1bmN0aW9uIERyb3BTaGFkb3dGaWx0ZXIoKVxue1xuICAgIGNvcmUuQWJzdHJhY3RGaWx0ZXIuY2FsbCh0aGlzKTtcblxuICAgIHRoaXMuYmx1clhGaWx0ZXIgPSBuZXcgQmx1clhGaWx0ZXIoKTtcbiAgICB0aGlzLmJsdXJZVGludEZpbHRlciA9IG5ldyBCbHVyWVRpbnRGaWx0ZXIoKTtcblxuICAgIHRoaXMuZGVmYXVsdEZpbHRlciA9IG5ldyBjb3JlLkFic3RyYWN0RmlsdGVyKCk7XG5cbiAgICB0aGlzLnBhZGRpbmcgPSAzMDtcblxuICAgIHRoaXMuX2RpcnR5UG9zaXRpb24gPSB0cnVlO1xuICAgIHRoaXMuX2FuZ2xlID0gNDUgKiBNYXRoLlBJIC8gMTgwO1xuICAgIHRoaXMuX2Rpc3RhbmNlID0gMTA7XG4gICAgdGhpcy5hbHBoYSA9IDAuNzU7XG4gICAgdGhpcy5oaWRlT2JqZWN0ID0gZmFsc2U7XG4gICAgdGhpcy5ibGVuZE1vZGUgPSBjb3JlLkJMRU5EX01PREVTLk1VTFRJUExZO1xufVxuXG5Ecm9wU2hhZG93RmlsdGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoY29yZS5BYnN0cmFjdEZpbHRlci5wcm90b3R5cGUpO1xuRHJvcFNoYWRvd0ZpbHRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBEcm9wU2hhZG93RmlsdGVyO1xubW9kdWxlLmV4cG9ydHMgPSBEcm9wU2hhZG93RmlsdGVyO1xuXG5Ecm9wU2hhZG93RmlsdGVyLnByb3RvdHlwZS5hcHBseUZpbHRlciA9IGZ1bmN0aW9uIChyZW5kZXJlciwgaW5wdXQsIG91dHB1dClcbntcbiAgICB2YXIgcmVuZGVyVGFyZ2V0ID0gcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5nZXRSZW5kZXJUYXJnZXQodHJ1ZSk7XG5cbiAgICAvL1RPRE8gLSBjb3B5VGV4U3ViSW1hZ2UyRCBjb3VsZCBiZSB1c2VkIGhlcmU/XG4gICAgaWYodGhpcy5fZGlydHlQb3NpdGlvbilcbiAgICB7XG4gICAgICAgIHRoaXMuX2RpcnR5UG9zaXRpb24gPSBmYWxzZTtcblxuICAgICAgICB0aGlzLmJsdXJZVGludEZpbHRlci51bmlmb3Jtcy5vZmZzZXQudmFsdWVbMF0gPSBNYXRoLnNpbih0aGlzLl9hbmdsZSkgKiB0aGlzLl9kaXN0YW5jZTtcbiAgICAgICAgdGhpcy5ibHVyWVRpbnRGaWx0ZXIudW5pZm9ybXMub2Zmc2V0LnZhbHVlWzFdID0gTWF0aC5jb3ModGhpcy5fYW5nbGUpICogdGhpcy5fZGlzdGFuY2U7XG4gICAgfVxuXG4gICAgdGhpcy5ibHVyWEZpbHRlci5hcHBseUZpbHRlcihyZW5kZXJlciwgaW5wdXQsIHJlbmRlclRhcmdldCk7XG5cbiAgICByZW5kZXJlci5ibGVuZE1vZGVNYW5hZ2VyLnNldEJsZW5kTW9kZSh0aGlzLmJsZW5kTW9kZSk7XG5cbiAgICB0aGlzLmJsdXJZVGludEZpbHRlci5hcHBseUZpbHRlcihyZW5kZXJlciwgcmVuZGVyVGFyZ2V0LCBvdXRwdXQpO1xuXG4gICAgcmVuZGVyZXIuYmxlbmRNb2RlTWFuYWdlci5zZXRCbGVuZE1vZGUoY29yZS5CTEVORF9NT0RFUy5OT1JNQUwpO1xuXG4gICAgaWYoIXRoaXMuaGlkZU9iamVjdClcbiAgICB7XG5cbiAgICAgICAgdGhpcy5kZWZhdWx0RmlsdGVyLmFwcGx5RmlsdGVyKHJlbmRlcmVyLCBpbnB1dCwgb3V0cHV0KTtcbiAgICB9XG5cblxuICAgIHJlbmRlcmVyLmZpbHRlck1hbmFnZXIucmV0dXJuUmVuZGVyVGFyZ2V0KHJlbmRlclRhcmdldCk7XG59O1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhEcm9wU2hhZG93RmlsdGVyLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIHN0cmVuZ3RoIG9mIGJvdGggdGhlIGJsdXJYIGFuZCBibHVyWSBwcm9wZXJ0aWVzIHNpbXVsdGFuZW91c2x5XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlck9mIFBJWEkuZmlsdGVycy5Ecm9wU2hhZG93RmlsdGVyI1xuICAgICAqIEBkZWZhdWx0IDJcbiAgICAgKi9cbiAgICBibHVyOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuYmx1clhGaWx0ZXIuYmx1cjtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuYmx1clhGaWx0ZXIuYmx1ciA9IHRoaXMuYmx1cllUaW50RmlsdGVyLmJsdXIgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBzdHJlbmd0aCBvZiB0aGUgYmx1clggcHJvcGVydHlcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyT2YgUElYSS5maWx0ZXJzLkRyb3BTaGFkb3dGaWx0ZXIjXG4gICAgICogQGRlZmF1bHQgMlxuICAgICAqL1xuICAgIGJsdXJYOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuYmx1clhGaWx0ZXIuYmx1cjtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuYmx1clhGaWx0ZXIuYmx1ciA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIHN0cmVuZ3RoIG9mIHRoZSBibHVyWSBwcm9wZXJ0eVxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJPZiBQSVhJLmZpbHRlcnMuRHJvcFNoYWRvd0ZpbHRlciNcbiAgICAgKiBAZGVmYXVsdCAyXG4gICAgICovXG4gICAgYmx1clk6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5ibHVyWVRpbnRGaWx0ZXIuYmx1cjtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuYmx1cllUaW50RmlsdGVyLmJsdXIgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBjb2xvciBvZiB0aGUgc2hhZG93XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlck9mIFBJWEkuZmlsdGVycy5Ecm9wU2hhZG93RmlsdGVyI1xuICAgICAqL1xuICAgIGNvbG9yOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuICBjb3JlLnV0aWxzLnJnYjJoZXgoIHRoaXMuYmx1cllUaW50RmlsdGVyLnVuaWZvcm1zLmNvbG9yLnZhbHVlICk7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmJsdXJZVGludEZpbHRlci51bmlmb3Jtcy5jb2xvci52YWx1ZSA9IGNvcmUudXRpbHMuaGV4MnJnYih2YWx1ZSk7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgYWxwaGEgb2YgdGhlIHNoYWRvd1xuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJPZiBQSVhJLmZpbHRlcnMuRHJvcFNoYWRvd0ZpbHRlciNcbiAgICAgKi9cbiAgICBhbHBoYToge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiAgdGhpcy5ibHVyWVRpbnRGaWx0ZXIudW5pZm9ybXMuYWxwaGEudmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmJsdXJZVGludEZpbHRlci51bmlmb3Jtcy5hbHBoYS52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIGRpc3RhbmNlIG9mIHRoZSBzaGFkb3dcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyT2YgUElYSS5maWx0ZXJzLkRyb3BTaGFkb3dGaWx0ZXIjXG4gICAgICovXG4gICAgZGlzdGFuY2U6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gIHRoaXMuX2Rpc3RhbmNlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5fZGlydHlQb3NpdGlvbiA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLl9kaXN0YW5jZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIGFuZ2xlIG9mIHRoZSBzaGFkb3dcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyT2YgUElYSS5maWx0ZXJzLkRyb3BTaGFkb3dGaWx0ZXIjXG4gICAgICovXG4gICAgYW5nbGU6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gIHRoaXMuX2FuZ2xlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5fZGlydHlQb3NpdGlvbiA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLl9hbmdsZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfVxufSk7XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uLy4uL2NvcmUnKTtcbi8vIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL3N1YnN0YWNrL2JyZnMvaXNzdWVzLzI1XG5cblxuLyoqXG4gKiBUaGlzIGdyZXlzY2FsZXMgdGhlIHBhbGV0dGUgb2YgeW91ciBEaXNwbGF5IE9iamVjdHMuXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLkFic3RyYWN0RmlsdGVyXG4gKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzXG4gKi9cbmZ1bmN0aW9uIEdyYXlGaWx0ZXIoKVxue1xuICAgIGNvcmUuQWJzdHJhY3RGaWx0ZXIuY2FsbCh0aGlzLFxuICAgICAgICAvLyB2ZXJ0ZXggc2hhZGVyXG4gICAgICAgIG51bGwsXG4gICAgICAgIC8vIGZyYWdtZW50IHNoYWRlclxuICAgICAgICBcInByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xcblxcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xcbnZhcnlpbmcgdmVjNCB2Q29sb3I7XFxuXFxudW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXI7XFxudW5pZm9ybSBmbG9hdCBncmF5O1xcblxcbnZvaWQgbWFpbih2b2lkKVxcbntcXG4gICBnbF9GcmFnQ29sb3IgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZUZXh0dXJlQ29vcmQpO1xcbiAgIGdsX0ZyYWdDb2xvci5yZ2IgPSBtaXgoZ2xfRnJhZ0NvbG9yLnJnYiwgdmVjMygwLjIxMjYqZ2xfRnJhZ0NvbG9yLnIgKyAwLjcxNTIqZ2xfRnJhZ0NvbG9yLmcgKyAwLjA3MjIqZ2xfRnJhZ0NvbG9yLmIpLCBncmF5KTtcXG59XFxuXCIsXG4gICAgICAgIC8vIHNldCB0aGUgdW5pZm9ybXNcbiAgICAgICAge1xuICAgICAgICAgICAgZ3JheTogeyB0eXBlOiAnMWYnLCB2YWx1ZTogMSB9XG4gICAgICAgIH1cbiAgICApO1xufVxuXG5HcmF5RmlsdGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoY29yZS5BYnN0cmFjdEZpbHRlci5wcm90b3R5cGUpO1xuR3JheUZpbHRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBHcmF5RmlsdGVyO1xubW9kdWxlLmV4cG9ydHMgPSBHcmF5RmlsdGVyO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhHcmF5RmlsdGVyLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFRoZSBzdHJlbmd0aCBvZiB0aGUgZ3JheS4gMSB3aWxsIG1ha2UgdGhlIG9iamVjdCBibGFjayBhbmQgd2hpdGUsIDAgd2lsbCBtYWtlIHRoZSBvYmplY3QgaXRzIG5vcm1hbCBjb2xvci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLkdyYXlGaWx0ZXIjXG4gICAgICovXG4gICAgZ3JheToge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVuaWZvcm1zLmdyYXkudmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLmdyYXkudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuIiwiLyoqXG4gKiBAZmlsZSAgICAgICAgTWFpbiBleHBvcnQgb2YgdGhlIFBJWEkgZmlsdGVycyBsaWJyYXJ5XG4gKiBAYXV0aG9yICAgICAgTWF0IEdyb3ZlcyA8bWF0QGdvb2Rib3lkaWdpdGFsLmNvbT5cbiAqIEBjb3B5cmlnaHQgICAyMDEzLTIwMTUgR29vZEJveURpZ2l0YWxcbiAqIEBsaWNlbnNlICAgICB7QGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL3BpeGlqcy9waXhpLmpzL2Jsb2IvbWFzdGVyL0xJQ0VOU0V8TUlUIExpY2Vuc2V9XG4gKi9cblxuLyoqXG4gKiBAbmFtZXNwYWNlIFBJWEkuZmlsdGVyc1xuICovXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgICBBc2NpaUZpbHRlcjogICAgICAgIHJlcXVpcmUoJy4vYXNjaWkvQXNjaWlGaWx0ZXInKSxcbiAgICBCbG9vbUZpbHRlcjogICAgICAgIHJlcXVpcmUoJy4vYmxvb20vQmxvb21GaWx0ZXInKSxcbiAgICBCbHVyRmlsdGVyOiAgICAgICAgIHJlcXVpcmUoJy4vYmx1ci9CbHVyRmlsdGVyJyksXG4gICAgQmx1clhGaWx0ZXI6ICAgICAgICByZXF1aXJlKCcuL2JsdXIvQmx1clhGaWx0ZXInKSxcbiAgICBCbHVyWUZpbHRlcjogICAgICAgIHJlcXVpcmUoJy4vYmx1ci9CbHVyWUZpbHRlcicpLFxuICAgIEJsdXJEaXJGaWx0ZXI6ICAgICAgcmVxdWlyZSgnLi9ibHVyL0JsdXJEaXJGaWx0ZXInKSxcbiAgICBDb2xvck1hdHJpeEZpbHRlcjogIHJlcXVpcmUoJy4vY29sb3IvQ29sb3JNYXRyaXhGaWx0ZXInKSxcbiAgICBDb2xvclN0ZXBGaWx0ZXI6ICAgIHJlcXVpcmUoJy4vY29sb3IvQ29sb3JTdGVwRmlsdGVyJyksXG4gICAgQ29udm9sdXRpb25GaWx0ZXI6ICByZXF1aXJlKCcuL2NvbnZvbHV0aW9uL0NvbnZvbHV0aW9uRmlsdGVyJyksXG4gICAgQ3Jvc3NIYXRjaEZpbHRlcjogICByZXF1aXJlKCcuL2Nyb3NzaGF0Y2gvQ3Jvc3NIYXRjaEZpbHRlcicpLFxuICAgIERpc3BsYWNlbWVudEZpbHRlcjogcmVxdWlyZSgnLi9kaXNwbGFjZW1lbnQvRGlzcGxhY2VtZW50RmlsdGVyJyksXG4gICAgRG90U2NyZWVuRmlsdGVyOiAgICByZXF1aXJlKCcuL2RvdC9Eb3RTY3JlZW5GaWx0ZXInKSxcbiAgICBHcmF5RmlsdGVyOiAgICAgICAgIHJlcXVpcmUoJy4vZ3JheS9HcmF5RmlsdGVyJyksXG4gICAgRHJvcFNoYWRvd0ZpbHRlcjogICByZXF1aXJlKCcuL2Ryb3BzaGFkb3cvRHJvcFNoYWRvd0ZpbHRlcicpLFxuICAgIEludmVydEZpbHRlcjogICAgICAgcmVxdWlyZSgnLi9pbnZlcnQvSW52ZXJ0RmlsdGVyJyksXG4gICAgTm9pc2VGaWx0ZXI6ICAgICAgICByZXF1aXJlKCcuL25vaXNlL05vaXNlRmlsdGVyJyksXG4gICAgUGl4ZWxhdGVGaWx0ZXI6ICAgICByZXF1aXJlKCcuL3BpeGVsYXRlL1BpeGVsYXRlRmlsdGVyJyksXG4gICAgUkdCU3BsaXRGaWx0ZXI6ICAgICByZXF1aXJlKCcuL3JnYi9SR0JTcGxpdEZpbHRlcicpLFxuICAgIFNob2Nrd2F2ZUZpbHRlcjogICAgcmVxdWlyZSgnLi9zaG9ja3dhdmUvU2hvY2t3YXZlRmlsdGVyJyksXG4gICAgU2VwaWFGaWx0ZXI6ICAgICAgICByZXF1aXJlKCcuL3NlcGlhL1NlcGlhRmlsdGVyJyksXG4gICAgU21hcnRCbHVyRmlsdGVyOiAgICByZXF1aXJlKCcuL2JsdXIvU21hcnRCbHVyRmlsdGVyJyksXG4gICAgVGlsdFNoaWZ0RmlsdGVyOiAgICByZXF1aXJlKCcuL3RpbHRzaGlmdC9UaWx0U2hpZnRGaWx0ZXInKSxcbiAgICBUaWx0U2hpZnRYRmlsdGVyOiAgIHJlcXVpcmUoJy4vdGlsdHNoaWZ0L1RpbHRTaGlmdFhGaWx0ZXInKSxcbiAgICBUaWx0U2hpZnRZRmlsdGVyOiAgIHJlcXVpcmUoJy4vdGlsdHNoaWZ0L1RpbHRTaGlmdFlGaWx0ZXInKSxcbiAgICBUd2lzdEZpbHRlcjogICAgICAgIHJlcXVpcmUoJy4vdHdpc3QvVHdpc3RGaWx0ZXInKVxufTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vLi4vY29yZScpO1xuLy8gQHNlZSBodHRwczovL2dpdGh1Yi5jb20vc3Vic3RhY2svYnJmcy9pc3N1ZXMvMjVcblxuXG4vKipcbiAqIFRoaXMgaW52ZXJ0cyB5b3VyIERpc3BsYXkgT2JqZWN0cyBjb2xvcnMuXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLkFic3RyYWN0RmlsdGVyXG4gKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzXG4gKi9cbmZ1bmN0aW9uIEludmVydEZpbHRlcigpXG57XG4gICAgY29yZS5BYnN0cmFjdEZpbHRlci5jYWxsKHRoaXMsXG4gICAgICAgIC8vIHZlcnRleCBzaGFkZXJcbiAgICAgICAgbnVsbCxcbiAgICAgICAgLy8gZnJhZ21lbnQgc2hhZGVyXG4gICAgICAgIFwicHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XFxuXFxudmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7XFxuXFxudW5pZm9ybSBmbG9hdCBpbnZlcnQ7XFxudW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXI7XFxuXFxudm9pZCBtYWluKHZvaWQpXFxue1xcbiAgICBnbF9GcmFnQ29sb3IgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZUZXh0dXJlQ29vcmQpO1xcblxcbiAgICBnbF9GcmFnQ29sb3IucmdiID0gbWl4KCAodmVjMygxKS1nbF9GcmFnQ29sb3IucmdiKSAqIGdsX0ZyYWdDb2xvci5hLCBnbF9GcmFnQ29sb3IucmdiLCAxLjAgLSBpbnZlcnQpO1xcbn1cXG5cIixcbiAgICAgICAgLy8gY3VzdG9tIHVuaWZvcm1zXG4gICAgICAgIHtcbiAgICAgICAgICAgIGludmVydDogeyB0eXBlOiAnMWYnLCB2YWx1ZTogMSB9XG4gICAgICAgIH1cbiAgICApO1xufVxuXG5JbnZlcnRGaWx0ZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShjb3JlLkFic3RyYWN0RmlsdGVyLnByb3RvdHlwZSk7XG5JbnZlcnRGaWx0ZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gSW52ZXJ0RmlsdGVyO1xubW9kdWxlLmV4cG9ydHMgPSBJbnZlcnRGaWx0ZXI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKEludmVydEZpbHRlci5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBUaGUgc3RyZW5ndGggb2YgdGhlIGludmVydC4gYDFgIHdpbGwgZnVsbHkgaW52ZXJ0IHRoZSBjb2xvcnMsIGFuZFxuICAgICAqIGAwYCB3aWxsIG1ha2UgdGhlIG9iamVjdCBpdHMgbm9ybWFsIGNvbG9yLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuSW52ZXJ0RmlsdGVyI1xuICAgICAqL1xuICAgIGludmVydDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVuaWZvcm1zLmludmVydC52YWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudW5pZm9ybXMuaW52ZXJ0LnZhbHVlID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG59KTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vLi4vY29yZScpO1xuLy8gQHNlZSBodHRwczovL2dpdGh1Yi5jb20vc3Vic3RhY2svYnJmcy9pc3N1ZXMvMjVcblxuXG4vKipcbiAqIEBhdXRob3IgVmljbyBAdmljb2NvdGVhXG4gKiBvcmlnaW5hbCBmaWx0ZXI6IGh0dHBzOi8vZ2l0aHViLmNvbS9ldmFudy9nbGZ4LmpzL2Jsb2IvbWFzdGVyL3NyYy9maWx0ZXJzL2FkanVzdC9ub2lzZS5qc1xuICovXG5cbi8qKlxuICogQSBOb2lzZSBlZmZlY3QgZmlsdGVyLlxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5BYnN0cmFjdEZpbHRlclxuICogQG1lbWJlcm9mIFBJWEkuZmlsdGVyc1xuICovXG5mdW5jdGlvbiBOb2lzZUZpbHRlcigpXG57XG4gICAgY29yZS5BYnN0cmFjdEZpbHRlci5jYWxsKHRoaXMsXG4gICAgICAgIC8vIHZlcnRleCBzaGFkZXJcbiAgICAgICAgbnVsbCxcbiAgICAgICAgLy8gZnJhZ21lbnQgc2hhZGVyXG4gICAgICAgIFwicHJlY2lzaW9uIGhpZ2hwIGZsb2F0O1xcblxcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xcbnZhcnlpbmcgdmVjNCB2Q29sb3I7XFxuXFxudW5pZm9ybSBmbG9hdCBub2lzZTtcXG51bmlmb3JtIHNhbXBsZXIyRCB1U2FtcGxlcjtcXG5cXG5mbG9hdCByYW5kKHZlYzIgY28pXFxue1xcbiAgICByZXR1cm4gZnJhY3Qoc2luKGRvdChjby54eSwgdmVjMigxMi45ODk4LCA3OC4yMzMpKSkgKiA0Mzc1OC41NDUzKTtcXG59XFxuXFxudm9pZCBtYWluKClcXG57XFxuICAgIHZlYzQgY29sb3IgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZUZXh0dXJlQ29vcmQpO1xcblxcbiAgICBmbG9hdCBkaWZmID0gKHJhbmQodlRleHR1cmVDb29yZCkgLSAwLjUpICogbm9pc2U7XFxuXFxuICAgIGNvbG9yLnIgKz0gZGlmZjtcXG4gICAgY29sb3IuZyArPSBkaWZmO1xcbiAgICBjb2xvci5iICs9IGRpZmY7XFxuXFxuICAgIGdsX0ZyYWdDb2xvciA9IGNvbG9yO1xcbn1cXG5cIixcbiAgICAgICAgLy8gY3VzdG9tIHVuaWZvcm1zXG4gICAgICAgIHtcbiAgICAgICAgICAgIG5vaXNlOiB7IHR5cGU6ICcxZicsIHZhbHVlOiAwLjUgfVxuICAgICAgICB9XG4gICAgKTtcbn1cblxuTm9pc2VGaWx0ZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShjb3JlLkFic3RyYWN0RmlsdGVyLnByb3RvdHlwZSk7XG5Ob2lzZUZpbHRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBOb2lzZUZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gTm9pc2VGaWx0ZXI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKE5vaXNlRmlsdGVyLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFRoZSBhbW91bnQgb2Ygbm9pc2UgdG8gYXBwbHkuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5Ob2lzZUZpbHRlciNcbiAgICAgKiBAZGVmYXVsdCAwLjVcbiAgICAgKi9cbiAgICBub2lzZToge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVuaWZvcm1zLm5vaXNlLnZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy5ub2lzZS52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfVxufSk7XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uLy4uL2NvcmUnKTtcbi8vIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL3N1YnN0YWNrL2JyZnMvaXNzdWVzLzI1XG5cblxuLyoqXG4gKiBUaGlzIGZpbHRlciBhcHBsaWVzIGEgcGl4ZWxhdGUgZWZmZWN0IG1ha2luZyBkaXNwbGF5IG9iamVjdHMgYXBwZWFyICdibG9ja3knLlxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5BYnN0cmFjdEZpbHRlclxuICogQG1lbWJlcm9mIFBJWEkuZmlsdGVyc1xuICovXG5mdW5jdGlvbiBQaXhlbGF0ZUZpbHRlcigpXG57XG4gICAgY29yZS5BYnN0cmFjdEZpbHRlci5jYWxsKHRoaXMsXG4gICAgICAgIC8vIHZlcnRleCBzaGFkZXJcbiAgICAgICAgbnVsbCxcbiAgICAgICAgLy8gZnJhZ21lbnQgc2hhZGVyXG4gICAgICAgIFwicHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XFxuXFxudmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7XFxuXFxudW5pZm9ybSB2ZWM0IGRpbWVuc2lvbnM7XFxudW5pZm9ybSB2ZWMyIHBpeGVsU2l6ZTtcXG51bmlmb3JtIHNhbXBsZXIyRCB1U2FtcGxlcjtcXG5cXG52b2lkIG1haW4odm9pZClcXG57XFxuICAgIHZlYzIgY29vcmQgPSB2VGV4dHVyZUNvb3JkO1xcblxcbiAgICB2ZWMyIHNpemUgPSBkaW1lbnNpb25zLnh5IC8gcGl4ZWxTaXplO1xcblxcbiAgICB2ZWMyIGNvbG9yID0gZmxvb3IoICggdlRleHR1cmVDb29yZCAqIHNpemUgKSApIC8gc2l6ZSArIHBpeGVsU2l6ZS9kaW1lbnNpb25zLnh5ICogMC41O1xcblxcbiAgICBnbF9GcmFnQ29sb3IgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIGNvbG9yKTtcXG59XFxuXCIsXG4gICAgICAgIC8vIGN1c3RvbSB1bmlmb3Jtc1xuICAgICAgICB7XG4gICAgICAgICAgICBkaW1lbnNpb25zOiB7IHR5cGU6ICc0ZnYnLCAgdmFsdWU6IG5ldyBGbG9hdDMyQXJyYXkoWzAsIDAsIDAsIDBdKSB9LFxuICAgICAgICAgICAgcGl4ZWxTaXplOiAgeyB0eXBlOiAndjInLCAgIHZhbHVlOiB7IHg6IDEwLCB5OiAxMCB9IH1cbiAgICAgICAgfVxuICAgICk7XG59XG5cblBpeGVsYXRlRmlsdGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoY29yZS5BYnN0cmFjdEZpbHRlci5wcm90b3R5cGUpO1xuUGl4ZWxhdGVGaWx0ZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gUGl4ZWxhdGVGaWx0ZXI7XG5tb2R1bGUuZXhwb3J0cyA9IFBpeGVsYXRlRmlsdGVyO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhQaXhlbGF0ZUZpbHRlci5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBUaGlzIGEgcG9pbnQgdGhhdCBkZXNjcmliZXMgdGhlIHNpemUgb2YgdGhlIGJsb2Nrcy5cbiAgICAgKiB4IGlzIHRoZSB3aWR0aCBvZiB0aGUgYmxvY2sgYW5kIHkgaXMgdGhlIGhlaWdodC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuUG9pbnR9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5QaXhlbGF0ZUZpbHRlciNcbiAgICAgKi9cbiAgICBzaXplOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudW5pZm9ybXMucGl4ZWxTaXplLnZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy5waXhlbFNpemUudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi8uLi9jb3JlJyk7XG4vLyBAc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9zdWJzdGFjay9icmZzL2lzc3Vlcy8yNVxuXG5cbi8qKlxuICogQW4gUkdCIFNwbGl0IEZpbHRlci5cbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQWJzdHJhY3RGaWx0ZXJcbiAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnNcbiAqL1xuZnVuY3Rpb24gUkdCU3BsaXRGaWx0ZXIoKVxue1xuICAgIGNvcmUuQWJzdHJhY3RGaWx0ZXIuY2FsbCh0aGlzLFxuICAgICAgICAvLyB2ZXJ0ZXggc2hhZGVyXG4gICAgICAgIG51bGwsXG4gICAgICAgIC8vIGZyYWdtZW50IHNoYWRlclxuICAgICAgICBcInByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xcblxcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xcblxcbnVuaWZvcm0gc2FtcGxlcjJEIHVTYW1wbGVyO1xcbnVuaWZvcm0gdmVjNCBkaW1lbnNpb25zO1xcbnVuaWZvcm0gdmVjMiByZWQ7XFxudW5pZm9ybSB2ZWMyIGdyZWVuO1xcbnVuaWZvcm0gdmVjMiBibHVlO1xcblxcbnZvaWQgbWFpbih2b2lkKVxcbntcXG4gICBnbF9GcmFnQ29sb3IuciA9IHRleHR1cmUyRCh1U2FtcGxlciwgdlRleHR1cmVDb29yZCArIHJlZC9kaW1lbnNpb25zLnh5KS5yO1xcbiAgIGdsX0ZyYWdDb2xvci5nID0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2VGV4dHVyZUNvb3JkICsgZ3JlZW4vZGltZW5zaW9ucy54eSkuZztcXG4gICBnbF9GcmFnQ29sb3IuYiA9IHRleHR1cmUyRCh1U2FtcGxlciwgdlRleHR1cmVDb29yZCArIGJsdWUvZGltZW5zaW9ucy54eSkuYjtcXG4gICBnbF9GcmFnQ29sb3IuYSA9IHRleHR1cmUyRCh1U2FtcGxlciwgdlRleHR1cmVDb29yZCkuYTtcXG59XFxuXCIsXG4gICAgICAgIC8vIGN1c3RvbSB1bmlmb3Jtc1xuICAgICAgICB7XG4gICAgICAgICAgICByZWQ6ICAgICAgICB7IHR5cGU6ICd2MicsIHZhbHVlOiB7IHg6IDIwLCB5OiAyMCB9IH0sXG4gICAgICAgICAgICBncmVlbjogICAgICB7IHR5cGU6ICd2MicsIHZhbHVlOiB7IHg6IC0yMCwgeTogMjAgfSB9LFxuICAgICAgICAgICAgYmx1ZTogICAgICAgeyB0eXBlOiAndjInLCB2YWx1ZTogeyB4OiAyMCwgeTogLTIwIH0gfSxcbiAgICAgICAgICAgIGRpbWVuc2lvbnM6IHsgdHlwZTogJzRmdicsIHZhbHVlOiBbMCwgMCwgMCwgMF0gfVxuICAgICAgICB9XG4gICAgKTtcbn1cblxuUkdCU3BsaXRGaWx0ZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShjb3JlLkFic3RyYWN0RmlsdGVyLnByb3RvdHlwZSk7XG5SR0JTcGxpdEZpbHRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBSR0JTcGxpdEZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gUkdCU3BsaXRGaWx0ZXI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKFJHQlNwbGl0RmlsdGVyLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFJlZCBjaGFubmVsIG9mZnNldC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuUG9pbnR9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5SR0JTcGxpdEZpbHRlciNcbiAgICAgKi9cbiAgICByZWQ6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy51bmlmb3Jtcy5yZWQudmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLnJlZC52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIEdyZWVuIGNoYW5uZWwgb2Zmc2V0LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5Qb2ludH1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLlJHQlNwbGl0RmlsdGVyI1xuICAgICAqL1xuICAgIGdyZWVuOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudW5pZm9ybXMuZ3JlZW4udmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLmdyZWVuLnZhbHVlID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQmx1ZSBvZmZzZXQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlBvaW50fVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuUkdCU3BsaXRGaWx0ZXIjXG4gICAgICovXG4gICAgYmx1ZToge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVuaWZvcm1zLmJsdWUudmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLmJsdWUudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi8uLi9jb3JlJyk7XG4vLyBAc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9zdWJzdGFjay9icmZzL2lzc3Vlcy8yNVxuXG5cbi8qKlxuICogVGhpcyBhcHBsaWVzIGEgc2VwaWEgZWZmZWN0IHRvIHlvdXIgRGlzcGxheSBPYmplY3RzLlxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5BYnN0cmFjdEZpbHRlclxuICogQG1lbWJlcm9mIFBJWEkuZmlsdGVyc1xuICovXG5mdW5jdGlvbiBTZXBpYUZpbHRlcigpXG57XG4gICAgY29yZS5BYnN0cmFjdEZpbHRlci5jYWxsKHRoaXMsXG4gICAgICAgIC8vIHZlcnRleCBzaGFkZXJcbiAgICAgICAgbnVsbCxcbiAgICAgICAgLy8gZnJhZ21lbnQgc2hhZGVyXG4gICAgICAgIFwicHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XFxuXFxudmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7XFxuXFxudW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXI7XFxudW5pZm9ybSBmbG9hdCBzZXBpYTtcXG5cXG5jb25zdCBtYXQzIHNlcGlhTWF0cml4ID0gbWF0MygwLjM1ODgsIDAuNzA0NCwgMC4xMzY4LCAwLjI5OTAsIDAuNTg3MCwgMC4xMTQwLCAwLjIzOTIsIDAuNDY5NiwgMC4wOTEyKTtcXG5cXG52b2lkIG1haW4odm9pZClcXG57XFxuICAgZ2xfRnJhZ0NvbG9yID0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2VGV4dHVyZUNvb3JkKTtcXG4gICBnbF9GcmFnQ29sb3IucmdiID0gbWl4KCBnbF9GcmFnQ29sb3IucmdiLCBnbF9GcmFnQ29sb3IucmdiICogc2VwaWFNYXRyaXgsIHNlcGlhKTtcXG59XFxuXCIsXG4gICAgICAgIC8vIGN1c3RvbSB1bmlmb3Jtc1xuICAgICAgICB7XG4gICAgICAgICAgICBzZXBpYTogeyB0eXBlOiAnMWYnLCB2YWx1ZTogMSB9XG4gICAgICAgIH1cbiAgICApO1xufVxuXG5TZXBpYUZpbHRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuQWJzdHJhY3RGaWx0ZXIucHJvdG90eXBlKTtcblNlcGlhRmlsdGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFNlcGlhRmlsdGVyO1xubW9kdWxlLmV4cG9ydHMgPSBTZXBpYUZpbHRlcjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoU2VwaWFGaWx0ZXIucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogVGhlIHN0cmVuZ3RoIG9mIHRoZSBzZXBpYS4gYDFgIHdpbGwgYXBwbHkgdGhlIGZ1bGwgc2VwaWEgZWZmZWN0LCBhbmRcbiAgICAgKiBgMGAgd2lsbCBtYWtlIHRoZSBvYmplY3QgaXRzIG5vcm1hbCBjb2xvci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLlNlcGlhRmlsdGVyI1xuICAgICAqL1xuICAgIHNlcGlhOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudW5pZm9ybXMuc2VwaWEudmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLnNlcGlhLnZhbHVlID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG59KTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vLi4vY29yZScpO1xuLy8gQHNlZSBodHRwczovL2dpdGh1Yi5jb20vc3Vic3RhY2svYnJmcy9pc3N1ZXMvMjVcblxuXG4vKipcbiAqIFRoZSBDb2xvck1hdHJpeEZpbHRlciBjbGFzcyBsZXRzIHlvdSBhcHBseSBhIDR4NCBtYXRyaXggdHJhbnNmb3JtYXRpb24gb24gdGhlIFJHQkFcbiAqIGNvbG9yIGFuZCBhbHBoYSB2YWx1ZXMgb2YgZXZlcnkgcGl4ZWwgb24geW91ciBkaXNwbGF5T2JqZWN0IHRvIHByb2R1Y2UgYSByZXN1bHRcbiAqIHdpdGggYSBuZXcgc2V0IG9mIFJHQkEgY29sb3IgYW5kIGFscGhhIHZhbHVlcy4gSXQncyBwcmV0dHkgcG93ZXJmdWwhXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLkFic3RyYWN0RmlsdGVyXG4gKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzXG4gKi9cbmZ1bmN0aW9uIFNob2Nrd2F2ZUZpbHRlcigpXG57XG4gICAgY29yZS5BYnN0cmFjdEZpbHRlci5jYWxsKHRoaXMsXG4gICAgICAgIC8vIHZlcnRleCBzaGFkZXJcbiAgICAgICAgbnVsbCxcbiAgICAgICAgLy8gZnJhZ21lbnQgc2hhZGVyXG4gICAgICAgIFwicHJlY2lzaW9uIGxvd3AgZmxvYXQ7XFxuXFxudmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7XFxuXFxudW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXI7XFxuXFxudW5pZm9ybSB2ZWMyIGNlbnRlcjtcXG51bmlmb3JtIHZlYzMgcGFyYW1zOyAvLyAxMC4wLCAwLjgsIDAuMVxcbnVuaWZvcm0gZmxvYXQgdGltZTtcXG5cXG52b2lkIG1haW4oKVxcbntcXG4gICAgdmVjMiB1diA9IHZUZXh0dXJlQ29vcmQ7XFxuICAgIHZlYzIgdGV4Q29vcmQgPSB1djtcXG5cXG4gICAgZmxvYXQgZGlzdCA9IGRpc3RhbmNlKHV2LCBjZW50ZXIpO1xcblxcbiAgICBpZiAoIChkaXN0IDw9ICh0aW1lICsgcGFyYW1zLnopKSAmJiAoZGlzdCA+PSAodGltZSAtIHBhcmFtcy56KSkgKVxcbiAgICB7XFxuICAgICAgICBmbG9hdCBkaWZmID0gKGRpc3QgLSB0aW1lKTtcXG4gICAgICAgIGZsb2F0IHBvd0RpZmYgPSAxLjAgLSBwb3coYWJzKGRpZmYqcGFyYW1zLngpLCBwYXJhbXMueSk7XFxuXFxuICAgICAgICBmbG9hdCBkaWZmVGltZSA9IGRpZmYgICogcG93RGlmZjtcXG4gICAgICAgIHZlYzIgZGlmZlVWID0gbm9ybWFsaXplKHV2IC0gY2VudGVyKTtcXG4gICAgICAgIHRleENvb3JkID0gdXYgKyAoZGlmZlVWICogZGlmZlRpbWUpO1xcbiAgICB9XFxuXFxuICAgIGdsX0ZyYWdDb2xvciA9IHRleHR1cmUyRCh1U2FtcGxlciwgdGV4Q29vcmQpO1xcbn1cXG5cIixcbiAgICAgICAgLy8gY3VzdG9tIHVuaWZvcm1zXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNlbnRlcjogeyB0eXBlOiAndjInLCB2YWx1ZTogeyB4OiAwLjUsIHk6IDAuNSB9IH0sXG4gICAgICAgICAgICBwYXJhbXM6IHsgdHlwZTogJ3YzJywgdmFsdWU6IHsgeDogMTAsIHk6IDAuOCwgejogMC4xIH0gfSxcbiAgICAgICAgICAgIHRpbWU6IHsgdHlwZTogJzFmJywgdmFsdWU6IDAgfVxuICAgICAgICB9XG4gICAgKTtcbn1cblxuU2hvY2t3YXZlRmlsdGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoY29yZS5BYnN0cmFjdEZpbHRlci5wcm90b3R5cGUpO1xuU2hvY2t3YXZlRmlsdGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFNob2Nrd2F2ZUZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gU2hvY2t3YXZlRmlsdGVyO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhTaG9ja3dhdmVGaWx0ZXIucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgY2VudGVyIG9mIHRoZSBzaG9ja3dhdmUgaW4gbm9ybWFsaXplZCBzY3JlZW4gY29vcmRzLiBUaGF0IGlzXG4gICAgICogKDAsMCkgaXMgdGhlIHRvcC1sZWZ0IGFuZCAoMSwxKSBpcyB0aGUgYm90dG9tIHJpZ2h0LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7b2JqZWN0PHN0cmluZywgbnVtYmVyPn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLlNob2Nrd2F2ZUZpbHRlciNcbiAgICAgKi9cbiAgICBjZW50ZXI6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy51bmlmb3Jtcy5jZW50ZXIudmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLmNlbnRlci52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfSxcbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBwYXJhbXMgb2YgdGhlIHNob2Nrd2F2ZS4gVGhlc2UgbW9kaWZ5IHRoZSBsb29rIGFuZCBiZWhhdmlvciBvZlxuICAgICAqIHRoZSBzaG9ja3dhdmUgYXMgaXQgcmlwcGxlcyBvdXQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtvYmplY3Q8c3RyaW5nLCBudW1iZXI+fVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuU2hvY2t3YXZlRmlsdGVyI1xuICAgICAqL1xuICAgIHBhcmFtczoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVuaWZvcm1zLnBhcmFtcy52YWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudW5pZm9ybXMucGFyYW1zLnZhbHVlID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9LFxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIGVsYXBzZWQgdGltZSBvZiB0aGUgc2hvY2t3YXZlLiBUaGlzIGNvbnRyb2xzIHRoZSBzcGVlZCBhdCB3aGljaFxuICAgICAqIHRoZSBzaG9ja3dhdmUgcmlwcGxlcyBvdXQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5TaG9ja3dhdmVGaWx0ZXIjXG4gICAgICovXG4gICAgdGltZToge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVuaWZvcm1zLnRpbWUudmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLnRpbWUudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi8uLi9jb3JlJyk7XG4vLyBAc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9zdWJzdGFjay9icmZzL2lzc3Vlcy8yNVxuXG5cbi8qKlxuICogQGF1dGhvciBWaWNvIEB2aWNvY290ZWFcbiAqIG9yaWdpbmFsIGZpbHRlciBodHRwczovL2dpdGh1Yi5jb20vZXZhbncvZ2xmeC5qcy9ibG9iL21hc3Rlci9zcmMvZmlsdGVycy9ibHVyL3RpbHRzaGlmdC5qcyBieSBFdmFuIFdhbGxhY2UgOiBodHRwOi8vbWFkZWJ5ZXZhbi5jb20vXG4gKi9cblxuLyoqXG4gKiBBIFRpbHRTaGlmdEF4aXNGaWx0ZXIuXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLkFic3RyYWN0RmlsdGVyXG4gKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzXG4gKi9cbmZ1bmN0aW9uIFRpbHRTaGlmdEF4aXNGaWx0ZXIoKVxue1xuICAgIGNvcmUuQWJzdHJhY3RGaWx0ZXIuY2FsbCh0aGlzLFxuICAgICAgICAvLyB2ZXJ0ZXggc2hhZGVyXG4gICAgICAgIG51bGwsXG4gICAgICAgIC8vIGZyYWdtZW50IHNoYWRlclxuICAgICAgICBcInByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xcblxcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xcblxcbnVuaWZvcm0gc2FtcGxlcjJEIHVTYW1wbGVyO1xcbnVuaWZvcm0gZmxvYXQgYmx1cjtcXG51bmlmb3JtIGZsb2F0IGdyYWRpZW50Qmx1cjtcXG51bmlmb3JtIHZlYzIgc3RhcnQ7XFxudW5pZm9ybSB2ZWMyIGVuZDtcXG51bmlmb3JtIHZlYzIgZGVsdGE7XFxudW5pZm9ybSB2ZWMyIHRleFNpemU7XFxuXFxuZmxvYXQgcmFuZG9tKHZlYzMgc2NhbGUsIGZsb2F0IHNlZWQpXFxue1xcbiAgICByZXR1cm4gZnJhY3Qoc2luKGRvdChnbF9GcmFnQ29vcmQueHl6ICsgc2VlZCwgc2NhbGUpKSAqIDQzNzU4LjU0NTMgKyBzZWVkKTtcXG59XFxuXFxudm9pZCBtYWluKHZvaWQpXFxue1xcbiAgICB2ZWM0IGNvbG9yID0gdmVjNCgwLjApO1xcbiAgICBmbG9hdCB0b3RhbCA9IDAuMDtcXG5cXG4gICAgZmxvYXQgb2Zmc2V0ID0gcmFuZG9tKHZlYzMoMTIuOTg5OCwgNzguMjMzLCAxNTEuNzE4MiksIDAuMCk7XFxuICAgIHZlYzIgbm9ybWFsID0gbm9ybWFsaXplKHZlYzIoc3RhcnQueSAtIGVuZC55LCBlbmQueCAtIHN0YXJ0LngpKTtcXG4gICAgZmxvYXQgcmFkaXVzID0gc21vb3Roc3RlcCgwLjAsIDEuMCwgYWJzKGRvdCh2VGV4dHVyZUNvb3JkICogdGV4U2l6ZSAtIHN0YXJ0LCBub3JtYWwpKSAvIGdyYWRpZW50Qmx1cikgKiBibHVyO1xcblxcbiAgICBmb3IgKGZsb2F0IHQgPSAtMzAuMDsgdCA8PSAzMC4wOyB0KyspXFxuICAgIHtcXG4gICAgICAgIGZsb2F0IHBlcmNlbnQgPSAodCArIG9mZnNldCAtIDAuNSkgLyAzMC4wO1xcbiAgICAgICAgZmxvYXQgd2VpZ2h0ID0gMS4wIC0gYWJzKHBlcmNlbnQpO1xcbiAgICAgICAgdmVjNCBzYW1wbGUgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZUZXh0dXJlQ29vcmQgKyBkZWx0YSAvIHRleFNpemUgKiBwZXJjZW50ICogcmFkaXVzKTtcXG4gICAgICAgIHNhbXBsZS5yZ2IgKj0gc2FtcGxlLmE7XFxuICAgICAgICBjb2xvciArPSBzYW1wbGUgKiB3ZWlnaHQ7XFxuICAgICAgICB0b3RhbCArPSB3ZWlnaHQ7XFxuICAgIH1cXG5cXG4gICAgZ2xfRnJhZ0NvbG9yID0gY29sb3IgLyB0b3RhbDtcXG4gICAgZ2xfRnJhZ0NvbG9yLnJnYiAvPSBnbF9GcmFnQ29sb3IuYSArIDAuMDAwMDE7XFxufVxcblwiLFxuICAgICAgICAvLyBjdXN0b20gdW5pZm9ybXNcbiAgICAgICAge1xuICAgICAgICAgICAgYmx1cjogICAgICAgICAgIHsgdHlwZTogJzFmJywgdmFsdWU6IDEwMCB9LFxuICAgICAgICAgICAgZ3JhZGllbnRCbHVyOiAgIHsgdHlwZTogJzFmJywgdmFsdWU6IDYwMCB9LFxuICAgICAgICAgICAgc3RhcnQ6ICAgICAgICAgIHsgdHlwZTogJ3YyJywgdmFsdWU6IHsgeDogMCwgICAgeTogd2luZG93LmlubmVySGVpZ2h0IC8gMiB9IH0sXG4gICAgICAgICAgICBlbmQ6ICAgICAgICAgICAgeyB0eXBlOiAndjInLCB2YWx1ZTogeyB4OiA2MDAsICB5OiB3aW5kb3cuaW5uZXJIZWlnaHQgLyAyIH0gfSxcbiAgICAgICAgICAgIGRlbHRhOiAgICAgICAgICB7IHR5cGU6ICd2MicsIHZhbHVlOiB7IHg6IDMwLCAgIHk6IDMwIH0gfSxcbiAgICAgICAgICAgIHRleFNpemU6ICAgICAgICB7IHR5cGU6ICd2MicsIHZhbHVlOiB7IHg6IHdpbmRvdy5pbm5lcldpZHRoLCB5OiB3aW5kb3cuaW5uZXJIZWlnaHQgfSB9XG4gICAgICAgIH1cbiAgICApO1xuXG4gICAgdGhpcy51cGRhdGVEZWx0YSgpO1xufVxuXG5UaWx0U2hpZnRBeGlzRmlsdGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoY29yZS5BYnN0cmFjdEZpbHRlci5wcm90b3R5cGUpO1xuVGlsdFNoaWZ0QXhpc0ZpbHRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBUaWx0U2hpZnRBeGlzRmlsdGVyO1xubW9kdWxlLmV4cG9ydHMgPSBUaWx0U2hpZnRBeGlzRmlsdGVyO1xuXG4vKipcbiAqIFVwZGF0ZXMgdGhlIGZpbHRlciBkZWx0YSB2YWx1ZXMuXG4gKiBUaGlzIGlzIG92ZXJyaWRkZW4gaW4gdGhlIFggYW5kIFkgZmlsdGVycywgZG9lcyBub3RoaW5nIGZvciB0aGlzIGNsYXNzLlxuICpcbiAqL1xuVGlsdFNoaWZ0QXhpc0ZpbHRlci5wcm90b3R5cGUudXBkYXRlRGVsdGEgPSBmdW5jdGlvbiAoKVxue1xuICAgIHRoaXMudW5pZm9ybXMuZGVsdGEudmFsdWUueCA9IDA7XG4gICAgdGhpcy51bmlmb3Jtcy5kZWx0YS52YWx1ZS55ID0gMDtcbn07XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKFRpbHRTaGlmdEF4aXNGaWx0ZXIucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogVGhlIHN0cmVuZ3RoIG9mIHRoZSBibHVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuVGlsdFNoaWZ0QXhpc0ZpbHRlciNcbiAgICAgKi9cbiAgICBibHVyOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudW5pZm9ybXMuYmx1ci52YWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudW5pZm9ybXMuYmx1ci52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFRoZSBzdHJlbmd0aCBvZiB0aGUgZ3JhZGllbnQgYmx1ci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLlRpbHRTaGlmdEF4aXNGaWx0ZXIjXG4gICAgICovXG4gICAgZ3JhZGllbnRCbHVyOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudW5pZm9ybXMuZ3JhZGllbnRCbHVyLnZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy5ncmFkaWVudEJsdXIudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBUaGUgWCB2YWx1ZSB0byBzdGFydCB0aGUgZWZmZWN0IGF0LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5Qb2ludH1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLlRpbHRTaGlmdEF4aXNGaWx0ZXIjXG4gICAgICovXG4gICAgc3RhcnQ6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy51bmlmb3Jtcy5zdGFydC52YWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudW5pZm9ybXMuc3RhcnQudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlRGVsdGEoKTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBUaGUgWCB2YWx1ZSB0byBlbmQgdGhlIGVmZmVjdCBhdC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuUG9pbnR9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5UaWx0U2hpZnRBeGlzRmlsdGVyI1xuICAgICAqL1xuICAgIGVuZDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVuaWZvcm1zLmVuZC52YWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudW5pZm9ybXMuZW5kLnZhbHVlID0gdmFsdWU7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZURlbHRhKCk7XG4gICAgICAgIH1cbiAgICB9XG59KTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vLi4vY29yZScpLFxuICAgIFRpbHRTaGlmdFhGaWx0ZXIgPSByZXF1aXJlKCcuL1RpbHRTaGlmdFhGaWx0ZXInKSxcbiAgICBUaWx0U2hpZnRZRmlsdGVyID0gcmVxdWlyZSgnLi9UaWx0U2hpZnRZRmlsdGVyJyk7XG5cbi8qKlxuICogQGF1dGhvciBWaWNvIEB2aWNvY290ZWFcbiAqIG9yaWdpbmFsIGZpbHRlciBodHRwczovL2dpdGh1Yi5jb20vZXZhbncvZ2xmeC5qcy9ibG9iL21hc3Rlci9zcmMvZmlsdGVycy9ibHVyL3RpbHRzaGlmdC5qcyBieSBFdmFuIFdhbGxhY2UgOiBodHRwOi8vbWFkZWJ5ZXZhbi5jb20vXG4gKi9cblxuLyoqXG4gKiBBIFRpbHRTaGlmdCBGaWx0ZXIuIE1hbmFnZXMgdGhlIHBhc3Mgb2YgYm90aCBhIFRpbHRTaGlmdFhGaWx0ZXIgYW5kIFRpbHRTaGlmdFlGaWx0ZXIuXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLkFic3RyYWN0RmlsdGVyXG4gKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzXG4gKi9cbmZ1bmN0aW9uIFRpbHRTaGlmdEZpbHRlcigpXG57XG4gICAgY29yZS5BYnN0cmFjdEZpbHRlci5jYWxsKHRoaXMpO1xuXG4gICAgdGhpcy50aWx0U2hpZnRYRmlsdGVyID0gbmV3IFRpbHRTaGlmdFhGaWx0ZXIoKTtcbiAgICB0aGlzLnRpbHRTaGlmdFlGaWx0ZXIgPSBuZXcgVGlsdFNoaWZ0WUZpbHRlcigpO1xufVxuXG5UaWx0U2hpZnRGaWx0ZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShjb3JlLkFic3RyYWN0RmlsdGVyLnByb3RvdHlwZSk7XG5UaWx0U2hpZnRGaWx0ZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gVGlsdFNoaWZ0RmlsdGVyO1xubW9kdWxlLmV4cG9ydHMgPSBUaWx0U2hpZnRGaWx0ZXI7XG5cblRpbHRTaGlmdEZpbHRlci5wcm90b3R5cGUuYXBwbHlGaWx0ZXIgPSBmdW5jdGlvbiAocmVuZGVyZXIsIGlucHV0LCBvdXRwdXQpXG57XG4gICAgdmFyIHJlbmRlclRhcmdldCA9IHJlbmRlcmVyLmZpbHRlck1hbmFnZXIuZ2V0UmVuZGVyVGFyZ2V0KHRydWUpO1xuXG4gICAgdGhpcy50aWx0U2hpZnRYRmlsdGVyLmFwcGx5RmlsdGVyKHJlbmRlcmVyLCBpbnB1dCwgcmVuZGVyVGFyZ2V0KTtcblxuICAgIHRoaXMudGlsdFNoaWZ0WUZpbHRlci5hcHBseUZpbHRlcihyZW5kZXJlciwgcmVuZGVyVGFyZ2V0LCBvdXRwdXQpO1xuXG4gICAgcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5yZXR1cm5SZW5kZXJUYXJnZXQocmVuZGVyVGFyZ2V0KTtcbn07XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKFRpbHRTaGlmdEZpbHRlci5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBUaGUgc3RyZW5ndGggb2YgdGhlIGJsdXIuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5UaWx0U2hpZnRGaWx0ZXIjXG4gICAgICovXG4gICAgYmx1cjoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnRpbHRTaGlmdFhGaWx0ZXIuYmx1cjtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudGlsdFNoaWZ0WEZpbHRlci5ibHVyID0gdGhpcy50aWx0U2hpZnRZRmlsdGVyLmJsdXIgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBUaGUgc3RyZW5ndGggb2YgdGhlIGdyYWRpZW50IGJsdXIuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5UaWx0U2hpZnRGaWx0ZXIjXG4gICAgICovXG4gICAgZ3JhZGllbnRCbHVyOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudGlsdFNoaWZ0WEZpbHRlci5ncmFkaWVudEJsdXI7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnRpbHRTaGlmdFhGaWx0ZXIuZ3JhZGllbnRCbHVyID0gdGhpcy50aWx0U2hpZnRZRmlsdGVyLmdyYWRpZW50Qmx1ciA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFRoZSBZIHZhbHVlIHRvIHN0YXJ0IHRoZSBlZmZlY3QgYXQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5UaWx0U2hpZnRGaWx0ZXIjXG4gICAgICovXG4gICAgc3RhcnQ6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy50aWx0U2hpZnRYRmlsdGVyLnN0YXJ0O1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy50aWx0U2hpZnRYRmlsdGVyLnN0YXJ0ID0gdGhpcy50aWx0U2hpZnRZRmlsdGVyLnN0YXJ0ID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVGhlIFkgdmFsdWUgdG8gZW5kIHRoZSBlZmZlY3QgYXQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5UaWx0U2hpZnRGaWx0ZXIjXG4gICAgICovXG4gICAgZW5kOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudGlsdFNoaWZ0WEZpbHRlci5lbmQ7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnRpbHRTaGlmdFhGaWx0ZXIuZW5kID0gdGhpcy50aWx0U2hpZnRZRmlsdGVyLmVuZCA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfVxufSk7XG4iLCJ2YXIgVGlsdFNoaWZ0QXhpc0ZpbHRlciA9IHJlcXVpcmUoJy4vVGlsdFNoaWZ0QXhpc0ZpbHRlcicpO1xuXG4vKipcbiAqIEBhdXRob3IgVmljbyBAdmljb2NvdGVhXG4gKiBvcmlnaW5hbCBmaWx0ZXIgaHR0cHM6Ly9naXRodWIuY29tL2V2YW53L2dsZnguanMvYmxvYi9tYXN0ZXIvc3JjL2ZpbHRlcnMvYmx1ci90aWx0c2hpZnQuanMgYnkgRXZhbiBXYWxsYWNlIDogaHR0cDovL21hZGVieWV2YW4uY29tL1xuICovXG5cbi8qKlxuICogQSBUaWx0U2hpZnRYRmlsdGVyLlxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5UaWx0U2hpZnRBeGlzRmlsdGVyXG4gKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzXG4gKi9cbmZ1bmN0aW9uIFRpbHRTaGlmdFhGaWx0ZXIoKVxue1xuICAgIFRpbHRTaGlmdEF4aXNGaWx0ZXIuY2FsbCh0aGlzKTtcbn1cblxuVGlsdFNoaWZ0WEZpbHRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFRpbHRTaGlmdEF4aXNGaWx0ZXIucHJvdG90eXBlKTtcblRpbHRTaGlmdFhGaWx0ZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gVGlsdFNoaWZ0WEZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gVGlsdFNoaWZ0WEZpbHRlcjtcblxuLyoqXG4gKiBVcGRhdGVzIHRoZSBmaWx0ZXIgZGVsdGEgdmFsdWVzLlxuICpcbiAqL1xuVGlsdFNoaWZ0WEZpbHRlci5wcm90b3R5cGUudXBkYXRlRGVsdGEgPSBmdW5jdGlvbiAoKVxue1xuICAgIHZhciBkeCA9IHRoaXMudW5pZm9ybXMuZW5kLnZhbHVlLnggLSB0aGlzLnVuaWZvcm1zLnN0YXJ0LnZhbHVlLng7XG4gICAgdmFyIGR5ID0gdGhpcy51bmlmb3Jtcy5lbmQudmFsdWUueSAtIHRoaXMudW5pZm9ybXMuc3RhcnQudmFsdWUueTtcbiAgICB2YXIgZCA9IE1hdGguc3FydChkeCAqIGR4ICsgZHkgKiBkeSk7XG5cbiAgICB0aGlzLnVuaWZvcm1zLmRlbHRhLnZhbHVlLnggPSBkeCAvIGQ7XG4gICAgdGhpcy51bmlmb3Jtcy5kZWx0YS52YWx1ZS55ID0gZHkgLyBkO1xufTtcbiIsInZhciBUaWx0U2hpZnRBeGlzRmlsdGVyID0gcmVxdWlyZSgnLi9UaWx0U2hpZnRBeGlzRmlsdGVyJyk7XG5cbi8qKlxuICogQGF1dGhvciBWaWNvIEB2aWNvY290ZWFcbiAqIG9yaWdpbmFsIGZpbHRlciBodHRwczovL2dpdGh1Yi5jb20vZXZhbncvZ2xmeC5qcy9ibG9iL21hc3Rlci9zcmMvZmlsdGVycy9ibHVyL3RpbHRzaGlmdC5qcyBieSBFdmFuIFdhbGxhY2UgOiBodHRwOi8vbWFkZWJ5ZXZhbi5jb20vXG4gKi9cblxuLyoqXG4gKiBBIFRpbHRTaGlmdFlGaWx0ZXIuXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLlRpbHRTaGlmdEF4aXNGaWx0ZXJcbiAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnNcbiAqL1xuZnVuY3Rpb24gVGlsdFNoaWZ0WUZpbHRlcigpXG57XG4gICAgVGlsdFNoaWZ0QXhpc0ZpbHRlci5jYWxsKHRoaXMpO1xufVxuXG5UaWx0U2hpZnRZRmlsdGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoVGlsdFNoaWZ0QXhpc0ZpbHRlci5wcm90b3R5cGUpO1xuVGlsdFNoaWZ0WUZpbHRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBUaWx0U2hpZnRZRmlsdGVyO1xubW9kdWxlLmV4cG9ydHMgPSBUaWx0U2hpZnRZRmlsdGVyO1xuXG4vKipcbiAqIFVwZGF0ZXMgdGhlIGZpbHRlciBkZWx0YSB2YWx1ZXMuXG4gKlxuICovXG5UaWx0U2hpZnRZRmlsdGVyLnByb3RvdHlwZS51cGRhdGVEZWx0YSA9IGZ1bmN0aW9uICgpXG57XG4gICAgdmFyIGR4ID0gdGhpcy51bmlmb3Jtcy5lbmQudmFsdWUueCAtIHRoaXMudW5pZm9ybXMuc3RhcnQudmFsdWUueDtcbiAgICB2YXIgZHkgPSB0aGlzLnVuaWZvcm1zLmVuZC52YWx1ZS55IC0gdGhpcy51bmlmb3Jtcy5zdGFydC52YWx1ZS55O1xuICAgIHZhciBkID0gTWF0aC5zcXJ0KGR4ICogZHggKyBkeSAqIGR5KTtcblxuICAgIHRoaXMudW5pZm9ybXMuZGVsdGEudmFsdWUueCA9IC1keSAvIGQ7XG4gICAgdGhpcy51bmlmb3Jtcy5kZWx0YS52YWx1ZS55ID0gZHggLyBkO1xufTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vLi4vY29yZScpO1xuLy8gQHNlZSBodHRwczovL2dpdGh1Yi5jb20vc3Vic3RhY2svYnJmcy9pc3N1ZXMvMjVcblxuXG4vKipcbiAqIFRoaXMgZmlsdGVyIGFwcGxpZXMgYSB0d2lzdCBlZmZlY3QgbWFraW5nIGRpc3BsYXkgb2JqZWN0cyBhcHBlYXIgdHdpc3RlZCBpbiB0aGUgZ2l2ZW4gZGlyZWN0aW9uLlxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5BYnN0cmFjdEZpbHRlclxuICogQG1lbWJlcm9mIFBJWEkuZmlsdGVyc1xuICovXG5mdW5jdGlvbiBUd2lzdEZpbHRlcigpXG57XG4gICAgY29yZS5BYnN0cmFjdEZpbHRlci5jYWxsKHRoaXMsXG4gICAgICAgIC8vIHZlcnRleCBzaGFkZXJcbiAgICAgICAgbnVsbCxcbiAgICAgICAgLy8gZnJhZ21lbnQgc2hhZGVyXG4gICAgICAgIFwicHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XFxuXFxudmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7XFxuXFxudW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXI7XFxudW5pZm9ybSBmbG9hdCByYWRpdXM7XFxudW5pZm9ybSBmbG9hdCBhbmdsZTtcXG51bmlmb3JtIHZlYzIgb2Zmc2V0O1xcblxcbnZvaWQgbWFpbih2b2lkKVxcbntcXG4gICB2ZWMyIGNvb3JkID0gdlRleHR1cmVDb29yZCAtIG9mZnNldDtcXG4gICBmbG9hdCBkaXN0ID0gbGVuZ3RoKGNvb3JkKTtcXG5cXG4gICBpZiAoZGlzdCA8IHJhZGl1cylcXG4gICB7XFxuICAgICAgIGZsb2F0IHJhdGlvID0gKHJhZGl1cyAtIGRpc3QpIC8gcmFkaXVzO1xcbiAgICAgICBmbG9hdCBhbmdsZU1vZCA9IHJhdGlvICogcmF0aW8gKiBhbmdsZTtcXG4gICAgICAgZmxvYXQgcyA9IHNpbihhbmdsZU1vZCk7XFxuICAgICAgIGZsb2F0IGMgPSBjb3MoYW5nbGVNb2QpO1xcbiAgICAgICBjb29yZCA9IHZlYzIoY29vcmQueCAqIGMgLSBjb29yZC55ICogcywgY29vcmQueCAqIHMgKyBjb29yZC55ICogYyk7XFxuICAgfVxcblxcbiAgIGdsX0ZyYWdDb2xvciA9IHRleHR1cmUyRCh1U2FtcGxlciwgY29vcmQrb2Zmc2V0KTtcXG59XFxuXCIsXG4gICAgICAgIC8vIGN1c3RvbSB1bmlmb3Jtc1xuICAgICAgICB7XG4gICAgICAgICAgICByYWRpdXM6ICAgICB7IHR5cGU6ICcxZicsIHZhbHVlOiAwLjUgfSxcbiAgICAgICAgICAgIGFuZ2xlOiAgICAgIHsgdHlwZTogJzFmJywgdmFsdWU6IDUgfSxcbiAgICAgICAgICAgIG9mZnNldDogICAgIHsgdHlwZTogJ3YyJywgdmFsdWU6IHsgeDogMC41LCB5OiAwLjUgfSB9XG4gICAgICAgIH1cbiAgICApO1xufVxuXG5Ud2lzdEZpbHRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuQWJzdHJhY3RGaWx0ZXIucHJvdG90eXBlKTtcblR3aXN0RmlsdGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFR3aXN0RmlsdGVyO1xubW9kdWxlLmV4cG9ydHMgPSBUd2lzdEZpbHRlcjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoVHdpc3RGaWx0ZXIucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogVGhpcyBwb2ludCBkZXNjcmliZXMgdGhlIHRoZSBvZmZzZXQgb2YgdGhlIHR3aXN0LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5Qb2ludH1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLlR3aXN0RmlsdGVyI1xuICAgICAqL1xuICAgIG9mZnNldDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVuaWZvcm1zLm9mZnNldC52YWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudW5pZm9ybXMub2Zmc2V0LnZhbHVlID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVGhpcyByYWRpdXMgb2YgdGhlIHR3aXN0LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuVHdpc3RGaWx0ZXIjXG4gICAgICovXG4gICAgcmFkaXVzOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudW5pZm9ybXMucmFkaXVzLnZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy5yYWRpdXMudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBUaGlzIGFuZ2xlIG9mIHRoZSB0d2lzdC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLlR3aXN0RmlsdGVyI1xuICAgICAqL1xuICAgIGFuZ2xlOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudW5pZm9ybXMuYW5nbGUudmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLmFuZ2xlLnZhbHVlID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG59KTtcbiIsIi8vIHJ1biB0aGUgcG9seWZpbGxzXG5yZXF1aXJlKCcuL3BvbHlmaWxsJyk7XG5cbnZhciBjb3JlID0gbW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL2NvcmUnKTtcblxuLy8gYWRkIGNvcmUgcGx1Z2lucy5cbmNvcmUuZXh0cmFzICAgICAgICAgPSByZXF1aXJlKCcuL2V4dHJhcycpO1xuY29yZS5maWx0ZXJzICAgICAgICA9IHJlcXVpcmUoJy4vZmlsdGVycycpO1xuY29yZS5pbnRlcmFjdGlvbiAgICA9IHJlcXVpcmUoJy4vaW50ZXJhY3Rpb24nKTtcbmNvcmUubG9hZGVycyAgICAgICAgPSByZXF1aXJlKCcuL2xvYWRlcnMnKTtcbmNvcmUubWVzaCAgICAgICAgICAgPSByZXF1aXJlKCcuL21lc2gnKTtcbmNvcmUuYWNjZXNzaWJpbGl0eSAgPSByZXF1aXJlKCcuL2FjY2Vzc2liaWxpdHknKTtcblxuLy8gZXhwb3J0IGEgcHJlbWFkZSBsb2FkZXIgaW5zdGFuY2Vcbi8qKlxuICogQSBwcmVtYWRlIGluc3RhbmNlIG9mIHRoZSBsb2FkZXIgdGhhdCBjYW4gYmUgdXNlZCB0byBsb2FkZXIgcmVzb3VyY2VzLlxuICpcbiAqIEBuYW1lIGxvYWRlclxuICogQG1lbWJlcm9mIFBJWElcbiAqIEBwcm9wZXJ0eSB7UElYSS5sb2FkZXJzLkxvYWRlcn1cbiAqL1xuY29yZS5sb2FkZXIgPSBuZXcgY29yZS5sb2FkZXJzLkxvYWRlcigpO1xuXG4vLyBtaXhpbiB0aGUgZGVwcmVjYXRpb24gZmVhdHVyZXMuXG5PYmplY3QuYXNzaWduKGNvcmUsIHJlcXVpcmUoJy4vZGVwcmVjYXRpb24nKSk7XG5cbi8vIEFsd2F5cyBleHBvcnQgcGl4aSBnbG9iYWxseS5cbmdsb2JhbC5QSVhJID0gY29yZTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vY29yZScpO1xuXG4vKipcbiAqIEhvbGRzIGFsbCBpbmZvcm1hdGlvbiByZWxhdGVkIHRvIGFuIEludGVyYWN0aW9uIGV2ZW50XG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSS5pbnRlcmFjdGlvblxuICovXG5mdW5jdGlvbiBJbnRlcmFjdGlvbkRhdGEoKVxue1xuICAgIC8qKlxuICAgICAqIFRoaXMgcG9pbnQgc3RvcmVzIHRoZSBnbG9iYWwgY29vcmRzIG9mIHdoZXJlIHRoZSB0b3VjaC9tb3VzZSBldmVudCBoYXBwZW5lZFxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5Qb2ludH1cbiAgICAgKi9cbiAgICB0aGlzLmdsb2JhbCA9IG5ldyBjb3JlLlBvaW50KCk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgdGFyZ2V0IFNwcml0ZSB0aGF0IHdhcyBpbnRlcmFjdGVkIHdpdGhcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuU3ByaXRlfVxuICAgICAqL1xuICAgIHRoaXMudGFyZ2V0ID0gbnVsbDtcblxuICAgIC8qKlxuICAgICAqIFdoZW4gcGFzc2VkIHRvIGFuIGV2ZW50IGhhbmRsZXIsIHRoaXMgd2lsbCBiZSB0aGUgb3JpZ2luYWwgRE9NIEV2ZW50IHRoYXQgd2FzIGNhcHR1cmVkXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtFdmVudH1cbiAgICAgKi9cbiAgICB0aGlzLm9yaWdpbmFsRXZlbnQgPSBudWxsO1xufVxuXG5JbnRlcmFjdGlvbkRhdGEucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gSW50ZXJhY3Rpb25EYXRhO1xubW9kdWxlLmV4cG9ydHMgPSBJbnRlcmFjdGlvbkRhdGE7XG5cbi8qKlxuICogVGhpcyB3aWxsIHJldHVybiB0aGUgbG9jYWwgY29vcmRpbmF0ZXMgb2YgdGhlIHNwZWNpZmllZCBkaXNwbGF5T2JqZWN0IGZvciB0aGlzIEludGVyYWN0aW9uRGF0YVxuICpcbiAqIEBwYXJhbSBkaXNwbGF5T2JqZWN0IHtQSVhJLkRpc3BsYXlPYmplY3R9IFRoZSBEaXNwbGF5T2JqZWN0IHRoYXQgeW91IHdvdWxkIGxpa2UgdGhlIGxvY2FsIGNvb3JkcyBvZmZcbiAqIEBwYXJhbSBbcG9pbnRdIHtQSVhJLlBvaW50fSBBIFBvaW50IG9iamVjdCBpbiB3aGljaCB0byBzdG9yZSB0aGUgdmFsdWUsIG9wdGlvbmFsIChvdGhlcndpc2Ugd2lsbCBjcmVhdGUgYSBuZXcgcG9pbnQpXG4gKiBAcGFyYW0gW2dsb2JhbFBvc10ge1BJWEkuUG9pbnR9IEEgUG9pbnQgb2JqZWN0IGNvbnRhaW5pbmcgeW91ciBjdXN0b20gZ2xvYmFsIGNvb3Jkcywgb3B0aW9uYWwgKG90aGVyd2lzZSB3aWxsIHVzZSB0aGUgY3VycmVudCBnbG9iYWwgY29vcmRzKVxuICogQHJldHVybiB7UElYSS5Qb2ludH0gQSBwb2ludCBjb250YWluaW5nIHRoZSBjb29yZGluYXRlcyBvZiB0aGUgSW50ZXJhY3Rpb25EYXRhIHBvc2l0aW9uIHJlbGF0aXZlIHRvIHRoZSBEaXNwbGF5T2JqZWN0XG4gKi9cbkludGVyYWN0aW9uRGF0YS5wcm90b3R5cGUuZ2V0TG9jYWxQb3NpdGlvbiA9IGZ1bmN0aW9uIChkaXNwbGF5T2JqZWN0LCBwb2ludCwgZ2xvYmFsUG9zKVxue1xuICAgIHJldHVybiBkaXNwbGF5T2JqZWN0LndvcmxkVHJhbnNmb3JtLmFwcGx5SW52ZXJzZShnbG9iYWxQb3MgfHwgdGhpcy5nbG9iYWwsIHBvaW50KTtcbn07XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uL2NvcmUnKSxcbiAgICBJbnRlcmFjdGlvbkRhdGEgPSByZXF1aXJlKCcuL0ludGVyYWN0aW9uRGF0YScpO1xuXG4vLyBNaXggaW50ZXJhY3RpdmVUYXJnZXQgaW50byBjb3JlLkRpc3BsYXlPYmplY3QucHJvdG90eXBlXG5PYmplY3QuYXNzaWduKFxuICAgIGNvcmUuRGlzcGxheU9iamVjdC5wcm90b3R5cGUsXG4gICAgcmVxdWlyZSgnLi9pbnRlcmFjdGl2ZVRhcmdldCcpXG4pO1xuXG4vKipcbiAqIFRoZSBpbnRlcmFjdGlvbiBtYW5hZ2VyIGRlYWxzIHdpdGggbW91c2UgYW5kIHRvdWNoIGV2ZW50cy4gQW55IERpc3BsYXlPYmplY3QgY2FuIGJlIGludGVyYWN0aXZlXG4gKiBpZiBpdHMgaW50ZXJhY3RpdmUgcGFyYW1ldGVyIGlzIHNldCB0byB0cnVlXG4gKiBUaGlzIG1hbmFnZXIgYWxzbyBzdXBwb3J0cyBtdWx0aXRvdWNoLlxuICpcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWEkuaW50ZXJhY3Rpb25cbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5DYW52YXNSZW5kZXJlcnxQSVhJLldlYkdMUmVuZGVyZXJ9IEEgcmVmZXJlbmNlIHRvIHRoZSBjdXJyZW50IHJlbmRlcmVyXG4gKiBAcGFyYW0gW29wdGlvbnNdIHtvYmplY3R9XG4gKiBAcGFyYW0gW29wdGlvbnMuYXV0b1ByZXZlbnREZWZhdWx0PXRydWVdIHtib29sZWFufSBTaG91bGQgdGhlIG1hbmFnZXIgYXV0b21hdGljYWxseSBwcmV2ZW50IGRlZmF1bHQgYnJvd3NlciBhY3Rpb25zLlxuICogQHBhcmFtIFtvcHRpb25zLmludGVyYWN0aW9uRnJlcXVlbmN5PTEwXSB7bnVtYmVyfSBGcmVxdWVuY3kgaW5jcmVhc2VzIHRoZSBpbnRlcmFjdGlvbiBldmVudHMgd2lsbCBiZSBjaGVja2VkLlxuICovXG5mdW5jdGlvbiBJbnRlcmFjdGlvbk1hbmFnZXIocmVuZGVyZXIsIG9wdGlvbnMpXG57XG4gICAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG5cbiAgICAvKipcbiAgICAgKiBUaGUgcmVuZGVyZXIgdGhpcyBpbnRlcmFjdGlvbiBtYW5hZ2VyIHdvcmtzIGZvci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuU3lzdGVtUmVuZGVyZXJ9XG4gICAgICovXG4gICAgdGhpcy5yZW5kZXJlciA9IHJlbmRlcmVyO1xuXG4gICAgLyoqXG4gICAgICogU2hvdWxkIGRlZmF1bHQgYnJvd3NlciBhY3Rpb25zIGF1dG9tYXRpY2FsbHkgYmUgcHJldmVudGVkLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKiBAZGVmYXVsdCB0cnVlXG4gICAgICovXG4gICAgdGhpcy5hdXRvUHJldmVudERlZmF1bHQgPSBvcHRpb25zLmF1dG9QcmV2ZW50RGVmYXVsdCAhPT0gdW5kZWZpbmVkID8gb3B0aW9ucy5hdXRvUHJldmVudERlZmF1bHQgOiB0cnVlO1xuXG4gICAgLyoqXG4gICAgICogQXMgdGhpcyBmcmVxdWVuY3kgaW5jcmVhc2VzIHRoZSBpbnRlcmFjdGlvbiBldmVudHMgd2lsbCBiZSBjaGVja2VkIG1vcmUgb2Z0ZW4uXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMTBcbiAgICAgKi9cbiAgICB0aGlzLmludGVyYWN0aW9uRnJlcXVlbmN5ID0gb3B0aW9ucy5pbnRlcmFjdGlvbkZyZXF1ZW5jeSB8fCAxMDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBtb3VzZSBkYXRhXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLmludGVyYWN0aW9uLkludGVyYWN0aW9uRGF0YX1cbiAgICAgKi9cbiAgICB0aGlzLm1vdXNlID0gbmV3IEludGVyYWN0aW9uRGF0YSgpO1xuXG4gICAgLyoqXG4gICAgICogQW4gZXZlbnQgZGF0YSBvYmplY3QgdG8gaGFuZGxlIGFsbCB0aGUgZXZlbnQgdHJhY2tpbmcvZGlzcGF0Y2hpbmdcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge29iamVjdH1cbiAgICAgKi9cbiAgICB0aGlzLmV2ZW50RGF0YSA9IHtcbiAgICAgICAgc3RvcHBlZDogZmFsc2UsXG4gICAgICAgIHRhcmdldDogbnVsbCxcbiAgICAgICAgdHlwZTogbnVsbCxcbiAgICAgICAgZGF0YTogdGhpcy5tb3VzZSxcbiAgICAgICAgc3RvcFByb3BhZ2F0aW9uOmZ1bmN0aW9uKCl7XG4gICAgICAgICAgICB0aGlzLnN0b3BwZWQgPSB0cnVlO1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIC8qKlxuICAgICAqIFRpbnkgbGl0dGxlIGludGVyYWN0aXZlRGF0YSBwb29sICFcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuaW50ZXJhY3Rpb24uSW50ZXJhY3Rpb25EYXRhW119XG4gICAgICovXG4gICAgdGhpcy5pbnRlcmFjdGl2ZURhdGFQb29sID0gW107XG5cbiAgICAvKipcbiAgICAgKiBUaGUgRE9NIGVsZW1lbnQgdG8gYmluZCB0by5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge0hUTUxFbGVtZW50fVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5pbnRlcmFjdGlvbkRPTUVsZW1lbnQgPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogSGF2ZSBldmVudHMgYmVlbiBhdHRhY2hlZCB0byB0aGUgZG9tIGVsZW1lbnQ/XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5ldmVudHNBZGRlZCA9IGZhbHNlO1xuXG4gICAgLy90aGlzIHdpbGwgbWFrZSBpdCBzbyB0aGF0IHlvdSBkb24ndCBoYXZlIHRvIGNhbGwgYmluZCBhbGwgdGhlIHRpbWVcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge0Z1bmN0aW9ufVxuICAgICAqL1xuICAgIHRoaXMub25Nb3VzZVVwID0gdGhpcy5vbk1vdXNlVXAuYmluZCh0aGlzKTtcbiAgICB0aGlzLnByb2Nlc3NNb3VzZVVwID0gdGhpcy5wcm9jZXNzTW91c2VVcC5iaW5kKCB0aGlzICk7XG5cblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge0Z1bmN0aW9ufVxuICAgICAqL1xuICAgIHRoaXMub25Nb3VzZURvd24gPSB0aGlzLm9uTW91c2VEb3duLmJpbmQodGhpcyk7XG4gICAgdGhpcy5wcm9jZXNzTW91c2VEb3duID0gdGhpcy5wcm9jZXNzTW91c2VEb3duLmJpbmQoIHRoaXMgKTtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge0Z1bmN0aW9ufVxuICAgICAqL1xuICAgIHRoaXMub25Nb3VzZU1vdmUgPSB0aGlzLm9uTW91c2VNb3ZlLmJpbmQoIHRoaXMgKTtcbiAgICB0aGlzLnByb2Nlc3NNb3VzZU1vdmUgPSB0aGlzLnByb2Nlc3NNb3VzZU1vdmUuYmluZCggdGhpcyApO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7RnVuY3Rpb259XG4gICAgICovXG4gICAgdGhpcy5vbk1vdXNlT3V0ID0gdGhpcy5vbk1vdXNlT3V0LmJpbmQodGhpcyk7XG4gICAgdGhpcy5wcm9jZXNzTW91c2VPdmVyT3V0ID0gdGhpcy5wcm9jZXNzTW91c2VPdmVyT3V0LmJpbmQoIHRoaXMgKTtcblxuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7RnVuY3Rpb259XG4gICAgICovXG4gICAgdGhpcy5vblRvdWNoU3RhcnQgPSB0aGlzLm9uVG91Y2hTdGFydC5iaW5kKHRoaXMpO1xuICAgIHRoaXMucHJvY2Vzc1RvdWNoU3RhcnQgPSB0aGlzLnByb2Nlc3NUb3VjaFN0YXJ0LmJpbmQodGhpcyk7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtGdW5jdGlvbn1cbiAgICAgKi9cbiAgICB0aGlzLm9uVG91Y2hFbmQgPSB0aGlzLm9uVG91Y2hFbmQuYmluZCh0aGlzKTtcbiAgICB0aGlzLnByb2Nlc3NUb3VjaEVuZCA9IHRoaXMucHJvY2Vzc1RvdWNoRW5kLmJpbmQodGhpcyk7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtGdW5jdGlvbn1cbiAgICAgKi9cbiAgICB0aGlzLm9uVG91Y2hNb3ZlID0gdGhpcy5vblRvdWNoTW92ZS5iaW5kKHRoaXMpO1xuICAgIHRoaXMucHJvY2Vzc1RvdWNoTW92ZSA9IHRoaXMucHJvY2Vzc1RvdWNoTW92ZS5iaW5kKHRoaXMpO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMubGFzdCA9IDA7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgY3NzIHN0eWxlIG9mIHRoZSBjdXJzb3IgdGhhdCBpcyBiZWluZyB1c2VkXG4gICAgICogQG1lbWJlciB7c3RyaW5nfVxuICAgICAqL1xuICAgIHRoaXMuY3VycmVudEN1cnNvclN0eWxlID0gJ2luaGVyaXQnO1xuXG4gICAgLyoqXG4gICAgICogSW50ZXJuYWwgY2FjaGVkIHZhclxuICAgICAqIEBtZW1iZXIge1BJWEkuUG9pbnR9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl90ZW1wUG9pbnQgPSBuZXcgY29yZS5Qb2ludCgpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGN1cnJlbnQgcmVzb2x1dGlvblxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLnJlc29sdXRpb24gPSAxO1xuXG4gICAgdGhpcy5zZXRUYXJnZXRFbGVtZW50KHRoaXMucmVuZGVyZXIudmlldywgdGhpcy5yZW5kZXJlci5yZXNvbHV0aW9uKTtcbn1cblxuSW50ZXJhY3Rpb25NYW5hZ2VyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IEludGVyYWN0aW9uTWFuYWdlcjtcbm1vZHVsZS5leHBvcnRzID0gSW50ZXJhY3Rpb25NYW5hZ2VyO1xuXG4vKipcbiAqIFNldHMgdGhlIERPTSBlbGVtZW50IHdoaWNoIHdpbGwgcmVjZWl2ZSBtb3VzZS90b3VjaCBldmVudHMuIFRoaXMgaXMgdXNlZnVsIGZvciB3aGVuIHlvdSBoYXZlXG4gKiBvdGhlciBET00gZWxlbWVudHMgb24gdG9wIG9mIHRoZSByZW5kZXJlcnMgQ2FudmFzIGVsZW1lbnQuIFdpdGggdGhpcyB5b3UnbGwgYmUgYmFsZSB0byBkZWxldGVnYXRlXG4gKiBhbm90aGVyIERPTSBlbGVtZW50IHRvIHJlY2VpdmUgdGhvc2UgZXZlbnRzLlxuICpcbiAqIEBwYXJhbSBlbGVtZW50IHtIVE1MRWxlbWVudH0gdGhlIERPTSBlbGVtZW50IHdoaWNoIHdpbGwgcmVjZWl2ZSBtb3VzZSBhbmQgdG91Y2ggZXZlbnRzLlxuICogQHBhcmFtIFtyZXNvbHV0aW9uPTFdIHtudW1iZXJ9IFRIZSByZXNvbHV0aW9uIG9mIHRoZSBuZXcgZWxlbWVudCAocmVsYXRpdmUgdG8gdGhlIGNhbnZhcykuXG4gKiBAcHJpdmF0ZVxuICovXG5JbnRlcmFjdGlvbk1hbmFnZXIucHJvdG90eXBlLnNldFRhcmdldEVsZW1lbnQgPSBmdW5jdGlvbiAoZWxlbWVudCwgcmVzb2x1dGlvbilcbntcbiAgICB0aGlzLnJlbW92ZUV2ZW50cygpO1xuXG4gICAgdGhpcy5pbnRlcmFjdGlvbkRPTUVsZW1lbnQgPSBlbGVtZW50O1xuXG4gICAgdGhpcy5yZXNvbHV0aW9uID0gcmVzb2x1dGlvbiB8fCAxO1xuXG4gICAgdGhpcy5hZGRFdmVudHMoKTtcbn07XG5cbi8qKlxuICogUmVnaXN0ZXJzIGFsbCB0aGUgRE9NIGV2ZW50c1xuICpcbiAqIEBwcml2YXRlXG4gKi9cbkludGVyYWN0aW9uTWFuYWdlci5wcm90b3R5cGUuYWRkRXZlbnRzID0gZnVuY3Rpb24gKClcbntcbiAgICBpZiAoIXRoaXMuaW50ZXJhY3Rpb25ET01FbGVtZW50KVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvcmUudGlja2VyLnNoYXJlZC5hZGQodGhpcy51cGRhdGUsIHRoaXMpO1xuXG4gICAgaWYgKHdpbmRvdy5uYXZpZ2F0b3IubXNQb2ludGVyRW5hYmxlZClcbiAgICB7XG4gICAgICAgIHRoaXMuaW50ZXJhY3Rpb25ET01FbGVtZW50LnN0eWxlWyctbXMtY29udGVudC16b29taW5nJ10gPSAnbm9uZSc7XG4gICAgICAgIHRoaXMuaW50ZXJhY3Rpb25ET01FbGVtZW50LnN0eWxlWyctbXMtdG91Y2gtYWN0aW9uJ10gPSAnbm9uZSc7XG4gICAgfVxuXG4gICAgd2luZG93LmRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlbW92ZScsICAgIHRoaXMub25Nb3VzZU1vdmUsIHRydWUpO1xuICAgIHRoaXMuaW50ZXJhY3Rpb25ET01FbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlZG93bicsICAgIHRoaXMub25Nb3VzZURvd24sIHRydWUpO1xuICAgIHRoaXMuaW50ZXJhY3Rpb25ET01FbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlb3V0JywgICAgIHRoaXMub25Nb3VzZU91dCwgdHJ1ZSk7XG5cbiAgICB0aGlzLmludGVyYWN0aW9uRE9NRWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCd0b3VjaHN0YXJ0JywgICB0aGlzLm9uVG91Y2hTdGFydCwgdHJ1ZSk7XG4gICAgdGhpcy5pbnRlcmFjdGlvbkRPTUVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigndG91Y2hlbmQnLCAgICAgdGhpcy5vblRvdWNoRW5kLCB0cnVlKTtcbiAgICB0aGlzLmludGVyYWN0aW9uRE9NRWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCd0b3VjaG1vdmUnLCAgICB0aGlzLm9uVG91Y2hNb3ZlLCB0cnVlKTtcblxuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdtb3VzZXVwJywgIHRoaXMub25Nb3VzZVVwLCB0cnVlKTtcblxuICAgIHRoaXMuZXZlbnRzQWRkZWQgPSB0cnVlO1xufTtcblxuLyoqXG4gKiBSZW1vdmVzIGFsbCB0aGUgRE9NIGV2ZW50cyB0aGF0IHdlcmUgcHJldmlvdXNseSByZWdpc3RlcmVkXG4gKlxuICogQHByaXZhdGVcbiAqL1xuSW50ZXJhY3Rpb25NYW5hZ2VyLnByb3RvdHlwZS5yZW1vdmVFdmVudHMgPSBmdW5jdGlvbiAoKVxue1xuICAgIGlmICghdGhpcy5pbnRlcmFjdGlvbkRPTUVsZW1lbnQpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29yZS50aWNrZXIuc2hhcmVkLnJlbW92ZSh0aGlzLnVwZGF0ZSk7XG5cbiAgICBpZiAod2luZG93Lm5hdmlnYXRvci5tc1BvaW50ZXJFbmFibGVkKVxuICAgIHtcbiAgICAgICAgdGhpcy5pbnRlcmFjdGlvbkRPTUVsZW1lbnQuc3R5bGVbJy1tcy1jb250ZW50LXpvb21pbmcnXSA9ICcnO1xuICAgICAgICB0aGlzLmludGVyYWN0aW9uRE9NRWxlbWVudC5zdHlsZVsnLW1zLXRvdWNoLWFjdGlvbiddID0gJyc7XG4gICAgfVxuXG4gICAgd2luZG93LmRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21vdXNlbW92ZScsIHRoaXMub25Nb3VzZU1vdmUsIHRydWUpO1xuICAgIHRoaXMuaW50ZXJhY3Rpb25ET01FbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21vdXNlZG93bicsIHRoaXMub25Nb3VzZURvd24sIHRydWUpO1xuICAgIHRoaXMuaW50ZXJhY3Rpb25ET01FbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21vdXNlb3V0JywgIHRoaXMub25Nb3VzZU91dCwgdHJ1ZSk7XG5cbiAgICB0aGlzLmludGVyYWN0aW9uRE9NRWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCd0b3VjaHN0YXJ0JywgdGhpcy5vblRvdWNoU3RhcnQsIHRydWUpO1xuICAgIHRoaXMuaW50ZXJhY3Rpb25ET01FbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3RvdWNoZW5kJywgIHRoaXMub25Ub3VjaEVuZCwgdHJ1ZSk7XG4gICAgdGhpcy5pbnRlcmFjdGlvbkRPTUVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigndG91Y2htb3ZlJywgdGhpcy5vblRvdWNoTW92ZSwgdHJ1ZSk7XG5cbiAgICB0aGlzLmludGVyYWN0aW9uRE9NRWxlbWVudCA9IG51bGw7XG5cbiAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcignbW91c2V1cCcsICB0aGlzLm9uTW91c2VVcCwgdHJ1ZSk7XG5cbiAgICB0aGlzLmV2ZW50c0FkZGVkID0gZmFsc2U7XG59O1xuXG4vKipcbiAqIFVwZGF0ZXMgdGhlIHN0YXRlIG9mIGludGVyYWN0aXZlIG9iamVjdHMuXG4gKiBJbnZva2VkIGJ5IGEgdGhyb3R0bGVkIHRpY2tlciB1cGRhdGUgZnJvbVxuICoge0BsaW5rIFBJWEkudGlja2VyLnNoYXJlZH0uXG4gKlxuICogQHBhcmFtIGRlbHRhVGltZSB7bnVtYmVyfVxuICovXG5JbnRlcmFjdGlvbk1hbmFnZXIucHJvdG90eXBlLnVwZGF0ZSA9IGZ1bmN0aW9uIChkZWx0YVRpbWUpXG57XG4gICAgdGhpcy5fZGVsdGFUaW1lICs9IGRlbHRhVGltZTtcblxuICAgIGlmICh0aGlzLl9kZWx0YVRpbWUgPCB0aGlzLmludGVyYWN0aW9uRnJlcXVlbmN5KVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuX2RlbHRhVGltZSA9IDA7XG5cbiAgICBpZiAoIXRoaXMuaW50ZXJhY3Rpb25ET01FbGVtZW50KVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIGlmIHRoZSB1c2VyIG1vdmUgdGhlIG1vdXNlIHRoaXMgY2hlY2sgaGFzIGFscmVhZHkgYmVlbiBkZm9uZSB1c2luZyB0aGUgbW91c2UgbW92ZSFcbiAgICBpZih0aGlzLmRpZE1vdmUpXG4gICAge1xuICAgICAgICB0aGlzLmRpZE1vdmUgPSBmYWxzZTtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuY3Vyc29yID0gJ2luaGVyaXQnO1xuXG4gICAgdGhpcy5wcm9jZXNzSW50ZXJhY3RpdmUodGhpcy5tb3VzZS5nbG9iYWwsIHRoaXMucmVuZGVyZXIuX2xhc3RPYmplY3RSZW5kZXJlZCwgdGhpcy5wcm9jZXNzTW91c2VPdmVyT3V0LCB0cnVlICk7XG5cbiAgICBpZiAodGhpcy5jdXJyZW50Q3Vyc29yU3R5bGUgIT09IHRoaXMuY3Vyc29yKVxuICAgIHtcbiAgICAgICAgdGhpcy5jdXJyZW50Q3Vyc29yU3R5bGUgPSB0aGlzLmN1cnNvcjtcbiAgICAgICAgdGhpcy5pbnRlcmFjdGlvbkRPTUVsZW1lbnQuc3R5bGUuY3Vyc29yID0gdGhpcy5jdXJzb3I7XG4gICAgfVxuXG4gICAgLy9UT0RPXG59O1xuXG4vKipcbiAqIERpc3BhdGNoZXMgYW4gZXZlbnQgb24gdGhlIGRpc3BsYXkgb2JqZWN0IHRoYXQgd2FzIGludGVyYWN0ZWQgd2l0aFxuICpcbiAqIEBwYXJhbSBkaXNwbGF5T2JqZWN0IHtQSVhJLkNvbnRhaW5lcnxQSVhJLlNwcml0ZXxQSVhJLmV4dHJhcy5UaWxpbmdTcHJpdGV9IHRoZSBkaXNwbGF5IG9iamVjdCBpbiBxdWVzdGlvblxuICogQHBhcmFtIGV2ZW50U3RyaW5nIHtzdHJpbmd9IHRoZSBuYW1lIG9mIHRoZSBldmVudCAoZS5nLCBtb3VzZWRvd24pXG4gKiBAcGFyYW0gZXZlbnREYXRhIHtvYmplY3R9IHRoZSBldmVudCBkYXRhIG9iamVjdFxuICogQHByaXZhdGVcbiAqL1xuSW50ZXJhY3Rpb25NYW5hZ2VyLnByb3RvdHlwZS5kaXNwYXRjaEV2ZW50ID0gZnVuY3Rpb24gKCBkaXNwbGF5T2JqZWN0LCBldmVudFN0cmluZywgZXZlbnREYXRhIClcbntcbiAgICBpZighZXZlbnREYXRhLnN0b3BwZWQpXG4gICAge1xuICAgICAgICBldmVudERhdGEudGFyZ2V0ID0gZGlzcGxheU9iamVjdDtcbiAgICAgICAgZXZlbnREYXRhLnR5cGUgPSBldmVudFN0cmluZztcblxuICAgICAgICBkaXNwbGF5T2JqZWN0LmVtaXQoIGV2ZW50U3RyaW5nLCBldmVudERhdGEgKTtcblxuICAgICAgICBpZiggZGlzcGxheU9iamVjdFtldmVudFN0cmluZ10gKVxuICAgICAgICB7XG4gICAgICAgICAgICBkaXNwbGF5T2JqZWN0W2V2ZW50U3RyaW5nXSggZXZlbnREYXRhICk7XG4gICAgICAgIH1cbiAgICB9XG59O1xuXG4vKipcbiAqIE1hcHMgeCBhbmQgeSBjb29yZHMgZnJvbSBhIERPTSBvYmplY3QgYW5kIG1hcHMgdGhlbSBjb3JyZWN0bHkgdG8gdGhlIHBpeGkgdmlldy4gVGhlIHJlc3VsdGluZyB2YWx1ZSBpcyBzdG9yZWQgaW4gdGhlIHBvaW50LlxuICogVGhpcyB0YWtlcyBpbnRvIGFjY291bnQgdGhlIGZhY3QgdGhhdCB0aGUgRE9NIGVsZW1lbnQgY291bGQgYmUgc2NhbGVkIGFuZCBwb3NpdGlvbmVkIGFueXdoZXJlIG9uIHRoZSBzY3JlZW4uXG4gKlxuICogQHBhcmFtICB7UElYSS5Qb2ludH0gcG9pbnQgdGhlIHBvaW50IHRoYXQgdGhlIHJlc3VsdCB3aWxsIGJlIHN0b3JlZCBpblxuICogQHBhcmFtICB7bnVtYmVyfSB4ICAgICB0aGUgeCBjb29yZCBvZiB0aGUgcG9zaXRpb24gdG8gbWFwXG4gKiBAcGFyYW0gIHtudW1iZXJ9IHkgICAgIHRoZSB5IGNvb3JkIG9mIHRoZSBwb3NpdGlvbiB0byBtYXBcbiAqL1xuSW50ZXJhY3Rpb25NYW5hZ2VyLnByb3RvdHlwZS5tYXBQb3NpdGlvblRvUG9pbnQgPSBmdW5jdGlvbiAoIHBvaW50LCB4LCB5IClcbntcbiAgICB2YXIgcmVjdCA9IHRoaXMuaW50ZXJhY3Rpb25ET01FbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgIHBvaW50LnggPSAoICggeCAtIHJlY3QubGVmdCApICogKHRoaXMuaW50ZXJhY3Rpb25ET01FbGVtZW50LndpZHRoICAvIHJlY3Qud2lkdGggICkgKSAvIHRoaXMucmVzb2x1dGlvbjtcbiAgICBwb2ludC55ID0gKCAoIHkgLSByZWN0LnRvcCAgKSAqICh0aGlzLmludGVyYWN0aW9uRE9NRWxlbWVudC5oZWlnaHQgLyByZWN0LmhlaWdodCApICkgLyB0aGlzLnJlc29sdXRpb247XG59O1xuXG4vKipcbiAqIFRoaXMgZnVuY3Rpb24gaXMgcHJvdmlkZXMgYSBuZWF0IHdheSBvZiBjcmF3bGluZyB0aHJvdWdoIHRoZSBzY2VuZSBncmFwaCBhbmQgcnVubmluZyBhIHNwZWNpZmllZCBmdW5jdGlvbiBvbiBhbGwgaW50ZXJhY3RpdmUgb2JqZWN0cyBpdCBmaW5kcy5cbiAqIEl0IHdpbGwgYWxzbyB0YWtlIGNhcmUgb2YgaGl0IHRlc3RpbmcgdGhlIGludGVyYWN0aXZlIG9iamVjdHMgYW5kIHBhc3NlcyB0aGUgaGl0IGFjcm9zcyBpbiB0aGUgZnVuY3Rpb24uXG4gKlxuICogQHBhcmFtICB7UElYSS5Qb2ludH0gcG9pbnQgdGhlIHBvaW50IHRoYXQgaXMgdGVzdGVkIGZvciBjb2xsaXNpb25cbiAqIEBwYXJhbSAge1BJWEkuQ29udGFpbmVyfFBJWEkuU3ByaXRlfFBJWEkuZXh0cmFzLlRpbGluZ1Nwcml0ZX0gZGlzcGxheU9iamVjdCB0aGUgZGlzcGxheU9iamVjdCB0aGF0IHdpbGwgYmUgaGl0IHRlc3QgKHJlY3VyY3Npdmx5IGNyYXdscyBpdHMgY2hpbGRyZW4pXG4gKiBAcGFyYW0gIHtGdW5jdGlvbn0gZnVuYyB0aGUgZnVuY3Rpb24gdGhhdCB3aWxsIGJlIGNhbGxlZCBvbiBlYWNoIGludGVyYWN0aXZlIG9iamVjdC4gVGhlIGRpc3BsYXlPYmplY3QgYW5kIGhpdCB3aWxsIGJlIHBhc3NlZCB0byB0aGUgZnVuY3Rpb25cbiAqIEBwYXJhbSAge2Jvb2xlYW59IGhpdFRlc3QgdGhpcyBpbmRpY2F0ZXMgaWYgdGhlIG9iamVjdHMgaW5zaWRlIHNob3VsZCBiZSBoaXQgdGVzdCBhZ2FpbnN0IHRoZSBwb2ludFxuICogQHJldHVybiB7Ym9vbGVhbn0gcmV0dXJucyB0cnVlIGlmIHRoZSBkaXNwbGF5T2JqZWN0IGhpdCB0aGUgcG9pbnRcbiAqL1xuSW50ZXJhY3Rpb25NYW5hZ2VyLnByb3RvdHlwZS5wcm9jZXNzSW50ZXJhY3RpdmUgPSBmdW5jdGlvbiAocG9pbnQsIGRpc3BsYXlPYmplY3QsIGZ1bmMsIGhpdFRlc3QsIGludGVyYWN0aXZlKVxue1xuICAgIGlmKCFkaXNwbGF5T2JqZWN0IHx8ICFkaXNwbGF5T2JqZWN0LnZpc2libGUpXG4gICAge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgLy8gVG9vayBhIGxpdHRsZSB3aGlsZSB0byByZXdvcmsgdGhpcyBmdW5jdGlvbiBjb3JyZWN0bHkhIEJ1dCBub3cgaXQgaXMgZG9uZSBhbmQgbmljZSBhbmQgb3B0aW1pc2VkLiBeX15cbiAgICAvLyBcbiAgICAvLyBUaGlzIGZ1bmN0aW9uIHdpbGwgbm93IGxvb3AgdGhyb3VnaCBhbGwgb2JqZWN0cyBhbmQgdGhlbiBvbmx5IGhpdCB0ZXN0IHRoZSBvYmplY3RzIGl0IEhBUyB0bywgbm90IGFsbCBvZiB0aGVtLiBNVUNIIGZhc3Rlci4uXG4gICAgLy8gQW4gb2JqZWN0IHdpbGwgYmUgaGl0IHRlc3QgaWYgdGhlIGZvbGxvd2luZyBpcyB0cnVlOlxuICAgIC8vIFxuICAgIC8vIDE6IEl0IGlzIGludGVyYWN0aXZlLlxuICAgIC8vIDI6IEl0IGJlbG9uZ3MgdG8gYSBwYXJlbnQgdGhhdCBpcyBpbnRlcmFjdGl2ZSBBTkQgb25lIG9mIHRoZSBwYXJlbnRzIGNoaWxkcmVuIGhhdmUgbm90IGFscmVhZHkgYmVlbiBoaXQuXG4gICAgLy8gXG4gICAgLy8gQXMgYW5vdGhlciBsaXR0bGUgb3B0aW1pc2F0aW9uIG9uY2UgYW4gaW50ZXJhY3RpdmUgb2JqZWN0IGhhcyBiZWVuIGhpdCB3ZSBjYW4gY2Fycnkgb24gdGhyb3VnaCB0aGUgc2NlbmVncmFwaCwgYnV0IHdlIGtub3cgdGhhdCB0aGVyZSB3aWxsIGJlIG5vIG1vcmUgaGl0cyEgU28gd2UgY2FuIGF2b2lkIGV4dHJhIGhpdCB0ZXN0c1xuICAgIC8vIEEgZmluYWwgb3B0aW1pc2F0aW9uIGlzIHRoYXQgYW4gb2JqZWN0IGlzIG5vdCBoaXQgdGVzdCBkaXJlY3RseSBpZiBhIGNoaWxkIGhhcyBhbHJlYWR5IGJlZW4gaGl0LlxuICAgIFxuICAgIHZhciBoaXQgPSBmYWxzZSxcbiAgICAgICAgaW50ZXJhY3RpdmVQYXJlbnQgPSBpbnRlcmFjdGl2ZSA9IGRpc3BsYXlPYmplY3QuaW50ZXJhY3RpdmUgfHwgaW50ZXJhY3RpdmU7XG5cbiAgICAvLyBpZiB0aGUgZGlzcGxheW9iamVjdCBoYXMgYSBoaXRBcmVhLCB0aGVuIGl0IGRvZXMgbm90IG5lZWQgdG8gaGl0VGVzdCBjaGlsZHJlbi5cbiAgICBpZihkaXNwbGF5T2JqZWN0LmhpdEFyZWEpXG4gICAge1xuICAgICAgICBpbnRlcmFjdGl2ZVBhcmVudCA9IGZhbHNlO1xuICAgIH1cblxuICAgIC8vICoqIEZSRUUgVElQICoqISBJZiBhbiBvYmplY3QgaXMgbm90IGludGVyYWN0dGl2ZSBvciBoYXMgbm8gYnV0dG9ucyBpbiBpdCAoc3VjaCBhcyBhIGdhbWUgc2NlbmUhKSBzZXQgaW50ZXJhY3RpdmVDaGlsZHJlbiB0byBmYWxzZSBmb3IgdGhhdCBkaXNwbGF5T2JqZWN0LlxuICAgIC8vIFRoaXMgd2lsbCBhbGxvdyBwaXhpIHRvIGNvbXBsZXRseSBpZ25vcmUgYW5kIGJ5cGFzcyBjaGVja2luZyB0aGUgZGlzcGxheU9iamVjdHMgY2hpbGRyZW4uXG4gICAgaWYoZGlzcGxheU9iamVjdC5pbnRlcmFjdGl2ZUNoaWxkcmVuKVxuICAgIHsgICAgICAgXG4gICAgICAgIHZhciBjaGlsZHJlbiA9IGRpc3BsYXlPYmplY3QuY2hpbGRyZW47XG4gICAgICAgIFxuICAgICAgICBmb3IgKHZhciBpID0gY2hpbGRyZW4ubGVuZ3RoLTE7IGkgPj0gMDsgaS0tKVxuICAgICAgICB7XG4gICAgICAgICAgICAvLyB0aW1lIHRvIGdldCByZWN1cnNpdmUuLiBpZiB0aGlzIGZ1bmN0aW9uIHdpbGwgcmV0dXJuIGlmIHNvbXRoaW5nIGlzIGhpdC4uXG4gICAgICAgICAgICBpZiggdGhpcy5wcm9jZXNzSW50ZXJhY3RpdmUocG9pbnQsIGNoaWxkcmVuW2ldLCBmdW5jLCBoaXRUZXN0LCBpbnRlcmFjdGl2ZVBhcmVudCkgKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGhpdCA9IHRydWU7XG5cbiAgICAgICAgICAgICAgICAvLyB3ZSBubyBsb25nZXIgbmVlZCB0byBoaXQgdGVzdCBhbnkgbW9yZSBvYmplY3RzIGluIHRoaXMgY29udGFpbmVyIGFzIHdlIHdlIG5vdyBrbm93IHRoZSBwYXJlbnQgaGFzIGJlZW4gaGl0XG4gICAgICAgICAgICAgICAgaW50ZXJhY3RpdmVQYXJlbnQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAvLyBJZiB0aGUgY2hpbGQgaXMgaW50ZXJhY3RpdmUgLCB0aGF0IG1lYW5zIHRoYXQgdGhlIG9iamVjdCBoaXQgd2FzIGFjdHVhbGx5IGludGVyYWN0aXZlIGFuZCBub3QganVzdCB0aGUgY2hpbGQgb2YgYW4gaW50ZXJhY3RpdmUgb2JqZWN0LiBcbiAgICAgICAgICAgICAgICAvLyBUaGlzIG1lYW5zIHdlIG5vIGxvbmdlciBuZWVkIHRvIGhpdCB0ZXN0IGFueXRoaW5nIGVsc2UuIFdlIHN0aWxsIG5lZWQgdG8gcnVuIHRocm91Z2ggYWxsIG9iamVjdHMsIGJ1dCB3ZSBkb24ndCBuZWVkIHRvIHBlcmZvcm0gYW55IGhpdCB0ZXN0cy5cbiAgICAgICAgICAgICAgICBpZihjaGlsZHJlbltpXS5pbnRlcmFjdGl2ZSlcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIGhpdFRlc3QgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBubyBwb2ludCBydW5uaW5nIHRoaXMgaWYgdGhlIGl0ZW0gaXMgbm90IGludGVyYWN0aXZlIG9yIGRvZXMgbm90IGhhdmUgYW4gaW50ZXJhY3RpdmUgcGFyZW50LlxuICAgIGlmKGludGVyYWN0aXZlKVxuICAgIHtcbiAgICAgICAgLy8gaWYgd2UgYXJlIGhpdCB0ZXN0aW5nIChhcyBpbiB3ZSBoYXZlIG5vIGhpdCBhbnkgb2JqZWN0cyB5ZXQpXG4gICAgICAgIC8vIFdlIGFsc28gZG9uJ3QgbmVlZCB0byB3b3JyeSBhYm91dCBoaXQgdGVzdGluZyBpZiBvbmNlIG9mIHRoZSBkaXNwbGF5T2JqZWN0cyBjaGlsZHJlbiBoYXMgYWxyZWFkeSBiZWVuIGhpdCFcbiAgICAgICAgaWYoaGl0VGVzdCAmJiAhaGl0KVxuICAgICAgICB7ICBcbiAgICAgICAgICAgIGlmKGRpc3BsYXlPYmplY3QuaGl0QXJlYSlcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBkaXNwbGF5T2JqZWN0LndvcmxkVHJhbnNmb3JtLmFwcGx5SW52ZXJzZShwb2ludCwgIHRoaXMuX3RlbXBQb2ludCk7XG4gICAgICAgICAgICAgICAgaGl0ID0gZGlzcGxheU9iamVjdC5oaXRBcmVhLmNvbnRhaW5zKCB0aGlzLl90ZW1wUG9pbnQueCwgdGhpcy5fdGVtcFBvaW50LnkgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYoZGlzcGxheU9iamVjdC5jb250YWluc1BvaW50KVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGhpdCA9IGRpc3BsYXlPYmplY3QuY29udGFpbnNQb2ludChwb2ludCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZihkaXNwbGF5T2JqZWN0LmludGVyYWN0aXZlKVxuICAgICAgICB7XG4gICAgICAgICAgICBmdW5jKGRpc3BsYXlPYmplY3QsIGhpdCk7IFxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGhpdDtcbiAgXG59O1xuXG5cbi8qKlxuICogSXMgY2FsbGVkIHdoZW4gdGhlIG1vdXNlIGJ1dHRvbiBpcyBwcmVzc2VkIGRvd24gb24gdGhlIHJlbmRlcmVyIGVsZW1lbnRcbiAqXG4gKiBAcGFyYW0gZXZlbnQge0V2ZW50fSBUaGUgRE9NIGV2ZW50IG9mIGEgbW91c2UgYnV0dG9uIGJlaW5nIHByZXNzZWQgZG93blxuICogQHByaXZhdGVcbiAqL1xuSW50ZXJhY3Rpb25NYW5hZ2VyLnByb3RvdHlwZS5vbk1vdXNlRG93biA9IGZ1bmN0aW9uIChldmVudClcbntcbiAgICB0aGlzLm1vdXNlLm9yaWdpbmFsRXZlbnQgPSBldmVudDtcbiAgICB0aGlzLmV2ZW50RGF0YS5kYXRhID0gdGhpcy5tb3VzZTtcbiAgICB0aGlzLmV2ZW50RGF0YS5zdG9wcGVkID0gZmFsc2U7XG5cbiAgICAvLyBVcGRhdGUgaW50ZXJuYWwgbW91c2UgcmVmZXJlbmNlXG4gICAgdGhpcy5tYXBQb3NpdGlvblRvUG9pbnQoIHRoaXMubW91c2UuZ2xvYmFsLCBldmVudC5jbGllbnRYLCBldmVudC5jbGllbnRZKTtcblxuICAgIGlmICh0aGlzLmF1dG9QcmV2ZW50RGVmYXVsdClcbiAgICB7XG4gICAgICAgIHRoaXMubW91c2Uub3JpZ2luYWxFdmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIH1cblxuICAgIHRoaXMucHJvY2Vzc0ludGVyYWN0aXZlKHRoaXMubW91c2UuZ2xvYmFsLCB0aGlzLnJlbmRlcmVyLl9sYXN0T2JqZWN0UmVuZGVyZWQsIHRoaXMucHJvY2Vzc01vdXNlRG93biwgdHJ1ZSApO1xufTtcblxuLyoqXG4gKiBQcm9jZXNzZXMgdGhlIHJlc3VsdCBvZiB0aGUgbW91c2UgZG93biBjaGVjayBhbmQgZGlzcGF0Y2hlcyB0aGUgZXZlbnQgaWYgbmVlZCBiZVxuICpcbiAqIEBwYXJhbSBkaXNwbGF5T2JqZWN0IHtQSVhJLkNvbnRhaW5lcnxQSVhJLlNwcml0ZXxQSVhJLmV4dHJhcy5UaWxpbmdTcHJpdGV9IFRoZSBkaXNwbGF5IG9iamVjdCB0aGF0IHdhcyB0ZXN0ZWRcbiAqIEBwYXJhbSBoaXQge2Jvb2xlYW59IHRoZSByZXN1bHQgb2YgdGhlIGhpdCB0ZXN0IG9uIHRoZSBkaXNwYXkgb2JqZWN0XG4gKiBAcHJpdmF0ZVxuICovXG5JbnRlcmFjdGlvbk1hbmFnZXIucHJvdG90eXBlLnByb2Nlc3NNb3VzZURvd24gPSBmdW5jdGlvbiAoIGRpc3BsYXlPYmplY3QsIGhpdCApXG57XG4gICAgdmFyIGUgPSB0aGlzLm1vdXNlLm9yaWdpbmFsRXZlbnQ7XG4gICAgXG4gICAgdmFyIGlzUmlnaHRCdXR0b24gPSBlLmJ1dHRvbiA9PT0gMiB8fCBlLndoaWNoID09PSAzO1xuXG4gICAgaWYoaGl0KVxuICAgIHtcbiAgICAgICAgZGlzcGxheU9iamVjdFsgaXNSaWdodEJ1dHRvbiA/ICdfaXNSaWdodERvd24nIDogJ19pc0xlZnREb3duJyBdID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50KCBkaXNwbGF5T2JqZWN0LCBpc1JpZ2h0QnV0dG9uID8gJ3JpZ2h0ZG93bicgOiAnbW91c2Vkb3duJywgdGhpcy5ldmVudERhdGEgKTtcbiAgICB9XG59O1xuXG5cblxuLyoqXG4gKiBJcyBjYWxsZWQgd2hlbiB0aGUgbW91c2UgYnV0dG9uIGlzIHJlbGVhc2VkIG9uIHRoZSByZW5kZXJlciBlbGVtZW50XG4gKlxuICogQHBhcmFtIGV2ZW50IHtFdmVudH0gVGhlIERPTSBldmVudCBvZiBhIG1vdXNlIGJ1dHRvbiBiZWluZyByZWxlYXNlZFxuICogQHByaXZhdGVcbiAqL1xuSW50ZXJhY3Rpb25NYW5hZ2VyLnByb3RvdHlwZS5vbk1vdXNlVXAgPSBmdW5jdGlvbiAoZXZlbnQpXG57XG4gICAgdGhpcy5tb3VzZS5vcmlnaW5hbEV2ZW50ID0gZXZlbnQ7XG4gICAgdGhpcy5ldmVudERhdGEuZGF0YSA9IHRoaXMubW91c2U7XG4gICAgdGhpcy5ldmVudERhdGEuc3RvcHBlZCA9IGZhbHNlO1xuXG4gICAgLy8gVXBkYXRlIGludGVybmFsIG1vdXNlIHJlZmVyZW5jZVxuICAgIHRoaXMubWFwUG9zaXRpb25Ub1BvaW50KCB0aGlzLm1vdXNlLmdsb2JhbCwgZXZlbnQuY2xpZW50WCwgZXZlbnQuY2xpZW50WSk7XG5cbiAgICB0aGlzLnByb2Nlc3NJbnRlcmFjdGl2ZSh0aGlzLm1vdXNlLmdsb2JhbCwgdGhpcy5yZW5kZXJlci5fbGFzdE9iamVjdFJlbmRlcmVkLCB0aGlzLnByb2Nlc3NNb3VzZVVwLCB0cnVlICk7XG59O1xuXG4vKipcbiAqIFByb2Nlc3NlcyB0aGUgcmVzdWx0IG9mIHRoZSBtb3VzZSB1cCBjaGVjayBhbmQgZGlzcGF0Y2hlcyB0aGUgZXZlbnQgaWYgbmVlZCBiZVxuICpcbiAqIEBwYXJhbSBkaXNwbGF5T2JqZWN0IHtQSVhJLkNvbnRhaW5lcnxQSVhJLlNwcml0ZXxQSVhJLmV4dHJhcy5UaWxpbmdTcHJpdGV9IFRoZSBkaXNwbGF5IG9iamVjdCB0aGF0IHdhcyB0ZXN0ZWRcbiAqIEBwYXJhbSBoaXQge2Jvb2xlYW59IHRoZSByZXN1bHQgb2YgdGhlIGhpdCB0ZXN0IG9uIHRoZSBkaXNwbGF5IG9iamVjdFxuICogQHByaXZhdGVcbiAqL1xuSW50ZXJhY3Rpb25NYW5hZ2VyLnByb3RvdHlwZS5wcm9jZXNzTW91c2VVcCA9IGZ1bmN0aW9uICggZGlzcGxheU9iamVjdCwgaGl0IClcbntcbiAgICB2YXIgZSA9IHRoaXMubW91c2Uub3JpZ2luYWxFdmVudDtcblxuICAgIHZhciBpc1JpZ2h0QnV0dG9uID0gZS5idXR0b24gPT09IDIgfHwgZS53aGljaCA9PT0gMztcbiAgICB2YXIgaXNEb3duID0gIGlzUmlnaHRCdXR0b24gPyAnX2lzUmlnaHREb3duJyA6ICdfaXNMZWZ0RG93bic7XG5cbiAgICBpZihoaXQpXG4gICAge1xuICAgICAgICB0aGlzLmRpc3BhdGNoRXZlbnQoIGRpc3BsYXlPYmplY3QsIGlzUmlnaHRCdXR0b24gPyAncmlnaHR1cCcgOiAnbW91c2V1cCcsIHRoaXMuZXZlbnREYXRhICk7XG5cbiAgICAgICAgaWYoIGRpc3BsYXlPYmplY3RbIGlzRG93biBdIClcbiAgICAgICAge1xuICAgICAgICAgICAgZGlzcGxheU9iamVjdFsgaXNEb3duIF0gPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudCggZGlzcGxheU9iamVjdCwgaXNSaWdodEJ1dHRvbiA/ICdyaWdodGNsaWNrJyA6ICdjbGljaycsIHRoaXMuZXZlbnREYXRhICk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgaWYoIGRpc3BsYXlPYmplY3RbIGlzRG93biBdIClcbiAgICAgICAge1xuICAgICAgICAgICAgZGlzcGxheU9iamVjdFsgaXNEb3duIF0gPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudCggZGlzcGxheU9iamVjdCwgaXNSaWdodEJ1dHRvbiA/ICdyaWdodHVwb3V0c2lkZScgOiAnbW91c2V1cG91dHNpZGUnLCB0aGlzLmV2ZW50RGF0YSApO1xuICAgICAgICB9XG4gICAgfVxufTtcblxuXG4vKipcbiAqIElzIGNhbGxlZCB3aGVuIHRoZSBtb3VzZSBtb3ZlcyBhY3Jvc3MgdGhlIHJlbmRlcmVyIGVsZW1lbnRcbiAqXG4gKiBAcGFyYW0gZXZlbnQge0V2ZW50fSBUaGUgRE9NIGV2ZW50IG9mIHRoZSBtb3VzZSBtb3ZpbmdcbiAqIEBwcml2YXRlXG4gKi9cbkludGVyYWN0aW9uTWFuYWdlci5wcm90b3R5cGUub25Nb3VzZU1vdmUgPSBmdW5jdGlvbiAoZXZlbnQpXG57XG4gICAgdGhpcy5tb3VzZS5vcmlnaW5hbEV2ZW50ID0gZXZlbnQ7XG4gICAgdGhpcy5ldmVudERhdGEuZGF0YSA9IHRoaXMubW91c2U7XG4gICAgdGhpcy5ldmVudERhdGEuc3RvcHBlZCA9IGZhbHNlO1xuXG4gICAgdGhpcy5tYXBQb3NpdGlvblRvUG9pbnQoIHRoaXMubW91c2UuZ2xvYmFsLCBldmVudC5jbGllbnRYLCBldmVudC5jbGllbnRZKTtcblxuICAgIHRoaXMuZGlkTW92ZSA9IHRydWU7XG5cbiAgICB0aGlzLmN1cnNvciA9ICdpbmhlcml0JztcblxuICAgIHRoaXMucHJvY2Vzc0ludGVyYWN0aXZlKHRoaXMubW91c2UuZ2xvYmFsLCB0aGlzLnJlbmRlcmVyLl9sYXN0T2JqZWN0UmVuZGVyZWQsIHRoaXMucHJvY2Vzc01vdXNlTW92ZSwgdHJ1ZSApO1xuXG4gICAgaWYgKHRoaXMuY3VycmVudEN1cnNvclN0eWxlICE9PSB0aGlzLmN1cnNvcilcbiAgICB7XG4gICAgICAgIHRoaXMuY3VycmVudEN1cnNvclN0eWxlID0gdGhpcy5jdXJzb3I7XG4gICAgICAgIHRoaXMuaW50ZXJhY3Rpb25ET01FbGVtZW50LnN0eWxlLmN1cnNvciA9IHRoaXMuY3Vyc29yO1xuICAgIH1cblxuICAgIC8vVE9ETyBCVUcgZm9yIHBhcmVudHMgaW5lcmFjdGl2ZSBvYmplY3QgKGJvcmRlciBvcmRlciBpc3N1ZSlcbn07XG5cbi8qKlxuICogUHJvY2Vzc2VzIHRoZSByZXN1bHQgb2YgdGhlIG1vdXNlIG1vdmUgY2hlY2sgYW5kIGRpc3BhdGNoZXMgdGhlIGV2ZW50IGlmIG5lZWQgYmVcbiAqXG4gKiBAcGFyYW0gZGlzcGxheU9iamVjdCB7UElYSS5Db250YWluZXJ8UElYSS5TcHJpdGV8UElYSS5leHRyYXMuVGlsaW5nU3ByaXRlfSBUaGUgZGlzcGxheSBvYmplY3QgdGhhdCB3YXMgdGVzdGVkXG4gKiBAcGFyYW0gaGl0IHtib29sZWFufSB0aGUgcmVzdWx0IG9mIHRoZSBoaXQgdGVzdCBvbiB0aGUgZGlzcGxheSBvYmplY3RcbiAqIEBwcml2YXRlXG4gKi9cbkludGVyYWN0aW9uTWFuYWdlci5wcm90b3R5cGUucHJvY2Vzc01vdXNlTW92ZSA9IGZ1bmN0aW9uICggZGlzcGxheU9iamVjdCwgaGl0IClcbntcbiAgICB0aGlzLmRpc3BhdGNoRXZlbnQoIGRpc3BsYXlPYmplY3QsICdtb3VzZW1vdmUnLCB0aGlzLmV2ZW50RGF0YSk7XG4gICAgdGhpcy5wcm9jZXNzTW91c2VPdmVyT3V0KGRpc3BsYXlPYmplY3QsIGhpdCk7XG59O1xuXG5cbi8qKlxuICogSXMgY2FsbGVkIHdoZW4gdGhlIG1vdXNlIGlzIG1vdmVkIG91dCBvZiB0aGUgcmVuZGVyZXIgZWxlbWVudFxuICpcbiAqIEBwYXJhbSBldmVudCB7RXZlbnR9IFRoZSBET00gZXZlbnQgb2YgYSBtb3VzZSBiZWluZyBtb3ZlZCBvdXRcbiAqIEBwcml2YXRlXG4gKi9cbkludGVyYWN0aW9uTWFuYWdlci5wcm90b3R5cGUub25Nb3VzZU91dCA9IGZ1bmN0aW9uIChldmVudClcbntcbiAgICB0aGlzLm1vdXNlLm9yaWdpbmFsRXZlbnQgPSBldmVudDtcbiAgICB0aGlzLmV2ZW50RGF0YS5zdG9wcGVkID0gZmFsc2U7XG5cbiAgICAvLyBVcGRhdGUgaW50ZXJuYWwgbW91c2UgcmVmZXJlbmNlXG4gICAgdGhpcy5tYXBQb3NpdGlvblRvUG9pbnQoIHRoaXMubW91c2UuZ2xvYmFsLCBldmVudC5jbGllbnRYLCBldmVudC5jbGllbnRZKTtcblxuICAgIHRoaXMuaW50ZXJhY3Rpb25ET01FbGVtZW50LnN0eWxlLmN1cnNvciA9ICdpbmhlcml0JztcblxuICAgIC8vIFRPRE8gb3B0aW1pemUgYnkgbm90IGNoZWNrIEVWRVJZIFRJTUUhIG1heWJlIGhhbGYgYXMgb2Z0ZW4/IC8vXG4gICAgdGhpcy5tYXBQb3NpdGlvblRvUG9pbnQoIHRoaXMubW91c2UuZ2xvYmFsLCBldmVudC5jbGllbnRYLCBldmVudC5jbGllbnRZICk7XG5cbiAgICB0aGlzLnByb2Nlc3NJbnRlcmFjdGl2ZSggdGhpcy5tb3VzZS5nbG9iYWwsIHRoaXMucmVuZGVyZXIuX2xhc3RPYmplY3RSZW5kZXJlZCwgdGhpcy5wcm9jZXNzTW91c2VPdmVyT3V0LCBmYWxzZSApO1xufTtcblxuLyoqXG4gKiBQcm9jZXNzZXMgdGhlIHJlc3VsdCBvZiB0aGUgbW91c2Ugb3Zlci9vdXQgY2hlY2sgYW5kIGRpc3BhdGNoZXMgdGhlIGV2ZW50IGlmIG5lZWQgYmVcbiAqXG4gKiBAcGFyYW0gZGlzcGxheU9iamVjdCB7UElYSS5Db250YWluZXJ8UElYSS5TcHJpdGV8UElYSS5leHRyYXMuVGlsaW5nU3ByaXRlfSBUaGUgZGlzcGxheSBvYmplY3QgdGhhdCB3YXMgdGVzdGVkXG4gKiBAcGFyYW0gaGl0IHtib29sZWFufSB0aGUgcmVzdWx0IG9mIHRoZSBoaXQgdGVzdCBvbiB0aGUgZGlzcGxheSBvYmplY3RcbiAqIEBwcml2YXRlXG4gKi9cbkludGVyYWN0aW9uTWFuYWdlci5wcm90b3R5cGUucHJvY2Vzc01vdXNlT3Zlck91dCA9IGZ1bmN0aW9uICggZGlzcGxheU9iamVjdCwgaGl0IClcbntcbiAgICBpZihoaXQpXG4gICAge1xuICAgICAgICBpZighZGlzcGxheU9iamVjdC5fb3ZlcilcbiAgICAgICAge1xuICAgICAgICAgICAgZGlzcGxheU9iamVjdC5fb3ZlciA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLmRpc3BhdGNoRXZlbnQoIGRpc3BsYXlPYmplY3QsICdtb3VzZW92ZXInLCB0aGlzLmV2ZW50RGF0YSApO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGRpc3BsYXlPYmplY3QuYnV0dG9uTW9kZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5jdXJzb3IgPSBkaXNwbGF5T2JqZWN0LmRlZmF1bHRDdXJzb3I7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgaWYoZGlzcGxheU9iamVjdC5fb3ZlcilcbiAgICAgICAge1xuICAgICAgICAgICAgZGlzcGxheU9iamVjdC5fb3ZlciA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50KCBkaXNwbGF5T2JqZWN0LCAnbW91c2VvdXQnLCB0aGlzLmV2ZW50RGF0YSk7XG4gICAgICAgIH1cbiAgICB9XG59O1xuXG5cbi8qKlxuICogSXMgY2FsbGVkIHdoZW4gYSB0b3VjaCBpcyBzdGFydGVkIG9uIHRoZSByZW5kZXJlciBlbGVtZW50XG4gKlxuICogQHBhcmFtIGV2ZW50IHtFdmVudH0gVGhlIERPTSBldmVudCBvZiBhIHRvdWNoIHN0YXJ0aW5nIG9uIHRoZSByZW5kZXJlciB2aWV3XG4gKiBAcHJpdmF0ZVxuICovXG5JbnRlcmFjdGlvbk1hbmFnZXIucHJvdG90eXBlLm9uVG91Y2hTdGFydCA9IGZ1bmN0aW9uIChldmVudClcbntcbiAgICBpZiAodGhpcy5hdXRvUHJldmVudERlZmF1bHQpXG4gICAge1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIH1cblxuICAgIHZhciBjaGFuZ2VkVG91Y2hlcyA9IGV2ZW50LmNoYW5nZWRUb3VjaGVzO1xuICAgIHZhciBjTGVuZ3RoID0gY2hhbmdlZFRvdWNoZXMubGVuZ3RoO1xuXG4gICAgZm9yICh2YXIgaT0wOyBpIDwgY0xlbmd0aDsgaSsrKVxuICAgIHtcbiAgICAgICAgdmFyIHRvdWNoRXZlbnQgPSBjaGFuZ2VkVG91Y2hlc1tpXTtcbiAgICAgICAgLy9UT0RPIFBPT0xcbiAgICAgICAgdmFyIHRvdWNoRGF0YSA9IHRoaXMuZ2V0VG91Y2hEYXRhKCB0b3VjaEV2ZW50ICk7XG5cbiAgICAgICAgdG91Y2hEYXRhLm9yaWdpbmFsRXZlbnQgPSBldmVudDtcblxuICAgICAgICB0aGlzLmV2ZW50RGF0YS5kYXRhID0gdG91Y2hEYXRhO1xuICAgICAgICB0aGlzLmV2ZW50RGF0YS5zdG9wcGVkID0gZmFsc2U7XG5cbiAgICAgICAgdGhpcy5wcm9jZXNzSW50ZXJhY3RpdmUoIHRvdWNoRGF0YS5nbG9iYWwsIHRoaXMucmVuZGVyZXIuX2xhc3RPYmplY3RSZW5kZXJlZCwgdGhpcy5wcm9jZXNzVG91Y2hTdGFydCwgdHJ1ZSApO1xuXG4gICAgICAgIHRoaXMucmV0dXJuVG91Y2hEYXRhKCB0b3VjaERhdGEgKTtcbiAgICB9XG59O1xuXG4vKipcbiAqIFByb2Nlc3NlcyB0aGUgcmVzdWx0IG9mIGEgdG91Y2ggY2hlY2sgYW5kIGRpc3BhdGNoZXMgdGhlIGV2ZW50IGlmIG5lZWQgYmVcbiAqXG4gKiBAcGFyYW0gZGlzcGxheU9iamVjdCB7UElYSS5Db250YWluZXJ8UElYSS5TcHJpdGV8UElYSS5leHRyYXMuVGlsaW5nU3ByaXRlfSBUaGUgZGlzcGxheSBvYmplY3QgdGhhdCB3YXMgdGVzdGVkXG4gKiBAcGFyYW0gaGl0IHtib29sZWFufSB0aGUgcmVzdWx0IG9mIHRoZSBoaXQgdGVzdCBvbiB0aGUgZGlzcGxheSBvYmplY3RcbiAqIEBwcml2YXRlXG4gKi9cbkludGVyYWN0aW9uTWFuYWdlci5wcm90b3R5cGUucHJvY2Vzc1RvdWNoU3RhcnQgPSBmdW5jdGlvbiAoIGRpc3BsYXlPYmplY3QsIGhpdCApXG57XG4gICAgaWYoaGl0KVxuICAgIHtcbiAgICAgICAgZGlzcGxheU9iamVjdC5fdG91Y2hEb3duID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50KCBkaXNwbGF5T2JqZWN0LCAndG91Y2hzdGFydCcsIHRoaXMuZXZlbnREYXRhICk7XG4gICAgfVxufTtcblxuXG4vKipcbiAqIElzIGNhbGxlZCB3aGVuIGEgdG91Y2ggZW5kcyBvbiB0aGUgcmVuZGVyZXIgZWxlbWVudFxuICpcbiAqIEBwYXJhbSBldmVudCB7RXZlbnR9IFRoZSBET00gZXZlbnQgb2YgYSB0b3VjaCBlbmRpbmcgb24gdGhlIHJlbmRlcmVyIHZpZXdcbiAqL1xuSW50ZXJhY3Rpb25NYW5hZ2VyLnByb3RvdHlwZS5vblRvdWNoRW5kID0gZnVuY3Rpb24gKGV2ZW50KVxue1xuICAgIGlmICh0aGlzLmF1dG9QcmV2ZW50RGVmYXVsdClcbiAgICB7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgfVxuXG4gICAgdmFyIGNoYW5nZWRUb3VjaGVzID0gZXZlbnQuY2hhbmdlZFRvdWNoZXM7XG4gICAgdmFyIGNMZW5ndGggPSBjaGFuZ2VkVG91Y2hlcy5sZW5ndGg7XG5cbiAgICBmb3IgKHZhciBpPTA7IGkgPCBjTGVuZ3RoOyBpKyspXG4gICAge1xuICAgICAgICB2YXIgdG91Y2hFdmVudCA9IGNoYW5nZWRUb3VjaGVzW2ldO1xuXG4gICAgICAgIHZhciB0b3VjaERhdGEgPSB0aGlzLmdldFRvdWNoRGF0YSggdG91Y2hFdmVudCApO1xuXG4gICAgICAgIHRvdWNoRGF0YS5vcmlnaW5hbEV2ZW50ID0gZXZlbnQ7XG5cbiAgICAgICAgLy9UT0RPIHRoaXMgc2hvdWxkIGJlIHBhc3NlZCBhbG9uZy4uIG5vIHNldFxuICAgICAgICB0aGlzLmV2ZW50RGF0YS5kYXRhID0gdG91Y2hEYXRhO1xuICAgICAgICB0aGlzLmV2ZW50RGF0YS5zdG9wcGVkID0gZmFsc2U7XG5cblxuICAgICAgICB0aGlzLnByb2Nlc3NJbnRlcmFjdGl2ZSggdG91Y2hEYXRhLmdsb2JhbCwgdGhpcy5yZW5kZXJlci5fbGFzdE9iamVjdFJlbmRlcmVkLCB0aGlzLnByb2Nlc3NUb3VjaEVuZCwgdHJ1ZSApO1xuXG4gICAgICAgIHRoaXMucmV0dXJuVG91Y2hEYXRhKCB0b3VjaERhdGEgKTtcbiAgICB9XG59O1xuXG4vKipcbiAqIFByb2Nlc3NlcyB0aGUgcmVzdWx0IG9mIHRoZSBlbmQgb2YgYSB0b3VjaCBhbmQgZGlzcGF0Y2hlcyB0aGUgZXZlbnQgaWYgbmVlZCBiZVxuICpcbiAqIEBwYXJhbSBkaXNwbGF5T2JqZWN0IHtQSVhJLkNvbnRhaW5lcnxQSVhJLlNwcml0ZXxQSVhJLmV4dHJhcy5UaWxpbmdTcHJpdGV9IFRoZSBkaXNwbGF5IG9iamVjdCB0aGF0IHdhcyB0ZXN0ZWRcbiAqIEBwYXJhbSBoaXQge2Jvb2xlYW59IHRoZSByZXN1bHQgb2YgdGhlIGhpdCB0ZXN0IG9uIHRoZSBkaXNwbGF5IG9iamVjdFxuICogQHByaXZhdGVcbiAqL1xuSW50ZXJhY3Rpb25NYW5hZ2VyLnByb3RvdHlwZS5wcm9jZXNzVG91Y2hFbmQgPSBmdW5jdGlvbiAoIGRpc3BsYXlPYmplY3QsIGhpdCApXG57XG4gICAgaWYoaGl0KVxuICAgIHtcbiAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50KCBkaXNwbGF5T2JqZWN0LCAndG91Y2hlbmQnLCB0aGlzLmV2ZW50RGF0YSApO1xuXG4gICAgICAgIGlmKCBkaXNwbGF5T2JqZWN0Ll90b3VjaERvd24gKVxuICAgICAgICB7XG4gICAgICAgICAgICBkaXNwbGF5T2JqZWN0Ll90b3VjaERvd24gPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudCggZGlzcGxheU9iamVjdCwgJ3RhcCcsIHRoaXMuZXZlbnREYXRhICk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgaWYoIGRpc3BsYXlPYmplY3QuX3RvdWNoRG93biApXG4gICAgICAgIHtcbiAgICAgICAgICAgIGRpc3BsYXlPYmplY3QuX3RvdWNoRG93biA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50KCBkaXNwbGF5T2JqZWN0LCAndG91Y2hlbmRvdXRzaWRlJywgdGhpcy5ldmVudERhdGEgKTtcbiAgICAgICAgfVxuICAgIH1cbn07XG5cbi8qKlxuICogSXMgY2FsbGVkIHdoZW4gYSB0b3VjaCBpcyBtb3ZlZCBhY3Jvc3MgdGhlIHJlbmRlcmVyIGVsZW1lbnRcbiAqXG4gKiBAcGFyYW0gZXZlbnQge0V2ZW50fSBUaGUgRE9NIGV2ZW50IG9mIGEgdG91Y2ggbW92aW5nIGFjcm9zcyB0aGUgcmVuZGVyZXIgdmlld1xuICogQHByaXZhdGVcbiAqL1xuSW50ZXJhY3Rpb25NYW5hZ2VyLnByb3RvdHlwZS5vblRvdWNoTW92ZSA9IGZ1bmN0aW9uIChldmVudClcbntcbiAgICBpZiAodGhpcy5hdXRvUHJldmVudERlZmF1bHQpXG4gICAge1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIH1cblxuICAgIHZhciBjaGFuZ2VkVG91Y2hlcyA9IGV2ZW50LmNoYW5nZWRUb3VjaGVzO1xuICAgIHZhciBjTGVuZ3RoID0gY2hhbmdlZFRvdWNoZXMubGVuZ3RoO1xuXG4gICAgZm9yICh2YXIgaT0wOyBpIDwgY0xlbmd0aDsgaSsrKVxuICAgIHtcbiAgICAgICAgdmFyIHRvdWNoRXZlbnQgPSBjaGFuZ2VkVG91Y2hlc1tpXTtcblxuICAgICAgICB2YXIgdG91Y2hEYXRhID0gdGhpcy5nZXRUb3VjaERhdGEoIHRvdWNoRXZlbnQgKTtcblxuICAgICAgICB0b3VjaERhdGEub3JpZ2luYWxFdmVudCA9IGV2ZW50O1xuXG4gICAgICAgIHRoaXMuZXZlbnREYXRhLmRhdGEgPSB0b3VjaERhdGE7XG4gICAgICAgIHRoaXMuZXZlbnREYXRhLnN0b3BwZWQgPSBmYWxzZTtcblxuICAgICAgICB0aGlzLnByb2Nlc3NJbnRlcmFjdGl2ZSggdG91Y2hEYXRhLmdsb2JhbCwgdGhpcy5yZW5kZXJlci5fbGFzdE9iamVjdFJlbmRlcmVkLCB0aGlzLnByb2Nlc3NUb3VjaE1vdmUsIHRydWUgKTtcblxuICAgICAgICB0aGlzLnJldHVyblRvdWNoRGF0YSggdG91Y2hEYXRhICk7XG4gICAgfVxufTtcblxuLyoqXG4gKiBQcm9jZXNzZXMgdGhlIHJlc3VsdCBvZiBhIHRvdWNoIG1vdmUgY2hlY2sgYW5kIGRpc3BhdGNoZXMgdGhlIGV2ZW50IGlmIG5lZWQgYmVcbiAqXG4gKiBAcGFyYW0gZGlzcGxheU9iamVjdCB7UElYSS5Db250YWluZXJ8UElYSS5TcHJpdGV8UElYSS5leHRyYXMuVGlsaW5nU3ByaXRlfSBUaGUgZGlzcGxheSBvYmplY3QgdGhhdCB3YXMgdGVzdGVkXG4gKiBAcGFyYW0gaGl0IHtib29sZWFufSB0aGUgcmVzdWx0IG9mIHRoZSBoaXQgdGVzdCBvbiB0aGUgZGlzcGxheSBvYmplY3RcbiAqIEBwcml2YXRlXG4gKi9cbkludGVyYWN0aW9uTWFuYWdlci5wcm90b3R5cGUucHJvY2Vzc1RvdWNoTW92ZSA9IGZ1bmN0aW9uICggZGlzcGxheU9iamVjdCwgaGl0IClcbntcbiAgICBoaXQgPSBoaXQ7XG4gICAgdGhpcy5kaXNwYXRjaEV2ZW50KCBkaXNwbGF5T2JqZWN0LCAndG91Y2htb3ZlJywgdGhpcy5ldmVudERhdGEpO1xufTtcblxuLyoqXG4gKiBHcmFicyBhbiBpbnRlcmFjdGlvbiBkYXRhIG9iamVjdCBmcm9tIHRoZSBpbnRlcm5hbCBwb29sXG4gKlxuICogQHBhcmFtIHRvdWNoRXZlbnQge0V2ZW50RGF0YX0gVGhlIHRvdWNoIGV2ZW50IHdlIG5lZWQgdG8gcGFpciB3aXRoIGFuIGludGVyYWN0aW9uRGF0YSBvYmplY3RcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5JbnRlcmFjdGlvbk1hbmFnZXIucHJvdG90eXBlLmdldFRvdWNoRGF0YSA9IGZ1bmN0aW9uICh0b3VjaEV2ZW50KVxue1xuICAgIHZhciB0b3VjaERhdGEgPSB0aGlzLmludGVyYWN0aXZlRGF0YVBvb2wucG9wKCk7XG5cbiAgICBpZighdG91Y2hEYXRhKVxuICAgIHtcbiAgICAgICAgdG91Y2hEYXRhID0gbmV3IEludGVyYWN0aW9uRGF0YSgpO1xuICAgIH1cblxuICAgIHRvdWNoRGF0YS5pZGVudGlmaWVyID0gdG91Y2hFdmVudC5pZGVudGlmaWVyO1xuICAgIHRoaXMubWFwUG9zaXRpb25Ub1BvaW50KCB0b3VjaERhdGEuZ2xvYmFsLCB0b3VjaEV2ZW50LmNsaWVudFgsIHRvdWNoRXZlbnQuY2xpZW50WSApO1xuXG4gICAgaWYobmF2aWdhdG9yLmlzQ29jb29uSlMpXG4gICAge1xuICAgICAgICB0b3VjaERhdGEuZ2xvYmFsLnggPSB0b3VjaERhdGEuZ2xvYmFsLnggLyB0aGlzLnJlc29sdXRpb247XG4gICAgICAgIHRvdWNoRGF0YS5nbG9iYWwueSA9IHRvdWNoRGF0YS5nbG9iYWwueSAvIHRoaXMucmVzb2x1dGlvbjtcbiAgICB9XG5cbiAgICB0b3VjaEV2ZW50Lmdsb2JhbFggPSB0b3VjaERhdGEuZ2xvYmFsLng7XG4gICAgdG91Y2hFdmVudC5nbG9iYWxZID0gdG91Y2hEYXRhLmdsb2JhbC55O1xuXG4gICAgcmV0dXJuIHRvdWNoRGF0YTtcbn07XG5cbi8qKlxuICogUmV0dXJucyBhbiBpbnRlcmFjdGlvbiBkYXRhIG9iamVjdCB0byB0aGUgaW50ZXJuYWwgcG9vbFxuICpcbiAqIEBwYXJhbSB0b3VjaERhdGEge1BJWEkuaW50ZXJhY3Rpb24uSW50ZXJhY3Rpb25EYXRhfSBUaGUgdG91Y2ggZGF0YSBvYmplY3Qgd2Ugd2FudCB0byByZXR1cm4gdG8gdGhlIHBvb2xcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5JbnRlcmFjdGlvbk1hbmFnZXIucHJvdG90eXBlLnJldHVyblRvdWNoRGF0YSA9IGZ1bmN0aW9uICggdG91Y2hEYXRhIClcbntcbiAgICB0aGlzLmludGVyYWN0aXZlRGF0YVBvb2wucHVzaCggdG91Y2hEYXRhICk7XG59O1xuXG4vKipcbiAqIERlc3Ryb3lzIHRoZSBpbnRlcmFjdGlvbiBtYW5hZ2VyXG4gKlxuICovXG5JbnRlcmFjdGlvbk1hbmFnZXIucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoKSB7XG4gICAgdGhpcy5yZW1vdmVFdmVudHMoKTtcblxuICAgIHRoaXMucmVuZGVyZXIgPSBudWxsO1xuXG4gICAgdGhpcy5tb3VzZSA9IG51bGw7XG5cbiAgICB0aGlzLmV2ZW50RGF0YSA9IG51bGw7XG5cbiAgICB0aGlzLmludGVyYWN0aXZlRGF0YVBvb2wgPSBudWxsO1xuXG4gICAgdGhpcy5pbnRlcmFjdGlvbkRPTUVsZW1lbnQgPSBudWxsO1xuXG4gICAgdGhpcy5vbk1vdXNlVXAgPSBudWxsO1xuICAgIHRoaXMucHJvY2Vzc01vdXNlVXAgPSBudWxsO1xuXG5cbiAgICB0aGlzLm9uTW91c2VEb3duID0gbnVsbDtcbiAgICB0aGlzLnByb2Nlc3NNb3VzZURvd24gPSBudWxsO1xuXG4gICAgdGhpcy5vbk1vdXNlTW92ZSA9IG51bGw7XG4gICAgdGhpcy5wcm9jZXNzTW91c2VNb3ZlID0gbnVsbDtcblxuICAgIHRoaXMub25Nb3VzZU91dCA9IG51bGw7XG4gICAgdGhpcy5wcm9jZXNzTW91c2VPdmVyT3V0ID0gbnVsbDtcblxuXG4gICAgdGhpcy5vblRvdWNoU3RhcnQgPSBudWxsO1xuICAgIHRoaXMucHJvY2Vzc1RvdWNoU3RhcnQgPSBudWxsO1xuXG4gICAgdGhpcy5vblRvdWNoRW5kID0gbnVsbDtcbiAgICB0aGlzLnByb2Nlc3NUb3VjaEVuZCA9IG51bGw7XG5cbiAgICB0aGlzLm9uVG91Y2hNb3ZlID0gbnVsbDtcbiAgICB0aGlzLnByb2Nlc3NUb3VjaE1vdmUgPSBudWxsO1xuXG4gICAgdGhpcy5fdGVtcFBvaW50ID0gbnVsbDtcbn07XG5cbmNvcmUuV2ViR0xSZW5kZXJlci5yZWdpc3RlclBsdWdpbignaW50ZXJhY3Rpb24nLCBJbnRlcmFjdGlvbk1hbmFnZXIpO1xuY29yZS5DYW52YXNSZW5kZXJlci5yZWdpc3RlclBsdWdpbignaW50ZXJhY3Rpb24nLCBJbnRlcmFjdGlvbk1hbmFnZXIpO1xuIiwiLyoqXG4gKiBAZmlsZSAgICAgICAgTWFpbiBleHBvcnQgb2YgdGhlIFBJWEkgaW50ZXJhY3Rpb25zIGxpYnJhcnlcbiAqIEBhdXRob3IgICAgICBNYXQgR3JvdmVzIDxtYXRAZ29vZGJveWRpZ2l0YWwuY29tPlxuICogQGNvcHlyaWdodCAgIDIwMTMtMjAxNSBHb29kQm95RGlnaXRhbFxuICogQGxpY2Vuc2UgICAgIHtAbGluayBodHRwczovL2dpdGh1Yi5jb20vcGl4aWpzL3BpeGkuanMvYmxvYi9tYXN0ZXIvTElDRU5TRXxNSVQgTGljZW5zZX1cbiAqL1xuXG4vKipcbiAqIEBuYW1lc3BhY2UgUElYSS5pbnRlcmFjdGlvblxuICovXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgICBJbnRlcmFjdGlvbkRhdGE6ICAgIHJlcXVpcmUoJy4vSW50ZXJhY3Rpb25EYXRhJyksXG4gICAgSW50ZXJhY3Rpb25NYW5hZ2VyOiByZXF1aXJlKCcuL0ludGVyYWN0aW9uTWFuYWdlcicpLFxuICAgIGludGVyYWN0aXZlVGFyZ2V0OiAgcmVxdWlyZSgnLi9pbnRlcmFjdGl2ZVRhcmdldCcpXG59O1xuIiwiLyoqXG4gKiBEZWZhdWx0IHByb3BlcnR5IHZhbHVlcyBvZiBpbnRlcmFjdGl2ZSBvYmplY3RzXG4gKiB1c2VkIGJ5IHtAbGluayBQSVhJLmludGVyYWN0aW9uLkludGVyYWN0aW9uTWFuYWdlcn0uXG4gKlxuICogQG1peGluXG4gKiBAbWVtYmVyb2YgUElYSS5pbnRlcmFjdGlvblxuICogQGV4YW1wbGVcbiAqICAgICAgZnVuY3Rpb24gTXlPYmplY3QoKSB7fVxuICpcbiAqICAgICAgT2JqZWN0LmFzc2lnbihcbiAqICAgICAgICAgIE15T2JqZWN0LnByb3RvdHlwZSxcbiAqICAgICAgICAgIFBJWEkuaW50ZXJhY3Rpb24uaW50ZXJhY3RpdmVUYXJnZXRcbiAqICAgICAgKTtcbiAqL1xudmFyIGludGVyYWN0aXZlVGFyZ2V0ID0ge1xuICAgIC8qKlxuICAgICAqIEB0b2RvIE5lZWRzIGRvY3MuXG4gICAgICovXG4gICAgaW50ZXJhY3RpdmU6IGZhbHNlLFxuICAgIC8qKlxuICAgICAqIEB0b2RvIE5lZWRzIGRvY3MuXG4gICAgICovXG4gICAgYnV0dG9uTW9kZTogZmFsc2UsXG4gICAgLyoqXG4gICAgICogQHRvZG8gTmVlZHMgZG9jcy5cbiAgICAgKi9cbiAgICBpbnRlcmFjdGl2ZUNoaWxkcmVuOiB0cnVlLFxuICAgIC8qKlxuICAgICAqIEB0b2RvIE5lZWRzIGRvY3MuXG4gICAgICovXG4gICAgZGVmYXVsdEN1cnNvcjogJ3BvaW50ZXInLFxuXG4gICAgLy8gc29tZSBpbnRlcm5hbCBjaGVja3MuLlxuXG4gICAgLyoqXG4gICAgICogQHRvZG8gTmVlZHMgZG9jcy5cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIF9vdmVyOiBmYWxzZSxcbiAgICAvKipcbiAgICAgKiBAdG9kbyBOZWVkcyBkb2NzLlxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgX3RvdWNoRG93bjogZmFsc2Vcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gaW50ZXJhY3RpdmVUYXJnZXQ7XG4iLCJ2YXIgUmVzb3VyY2UgPSByZXF1aXJlKCdyZXNvdXJjZS1sb2FkZXInKS5SZXNvdXJjZSxcbiAgICBjb3JlID0gcmVxdWlyZSgnLi4vY29yZScpLFxuICAgIGV4dHJhcyA9IHJlcXVpcmUoJy4uL2V4dHJhcycpLFxuICAgIHBhdGggPSByZXF1aXJlKCdwYXRoJyk7XG5cblxuZnVuY3Rpb24gcGFyc2UocmVzb3VyY2UsIHRleHR1cmUpIHtcbiAgICB2YXIgZGF0YSA9IHt9O1xuICAgIHZhciBpbmZvID0gcmVzb3VyY2UuZGF0YS5nZXRFbGVtZW50c0J5VGFnTmFtZSgnaW5mbycpWzBdO1xuICAgIHZhciBjb21tb24gPSByZXNvdXJjZS5kYXRhLmdldEVsZW1lbnRzQnlUYWdOYW1lKCdjb21tb24nKVswXTtcblxuICAgIGRhdGEuZm9udCA9IGluZm8uZ2V0QXR0cmlidXRlKCdmYWNlJyk7XG4gICAgZGF0YS5zaXplID0gcGFyc2VJbnQoaW5mby5nZXRBdHRyaWJ1dGUoJ3NpemUnKSwgMTApO1xuICAgIGRhdGEubGluZUhlaWdodCA9IHBhcnNlSW50KGNvbW1vbi5nZXRBdHRyaWJ1dGUoJ2xpbmVIZWlnaHQnKSwgMTApO1xuICAgIGRhdGEuY2hhcnMgPSB7fTtcblxuICAgIC8vcGFyc2UgbGV0dGVyc1xuICAgIHZhciBsZXR0ZXJzID0gcmVzb3VyY2UuZGF0YS5nZXRFbGVtZW50c0J5VGFnTmFtZSgnY2hhcicpO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZXR0ZXJzLmxlbmd0aDsgaSsrKVxuICAgIHtcbiAgICAgICAgdmFyIGNoYXJDb2RlID0gcGFyc2VJbnQobGV0dGVyc1tpXS5nZXRBdHRyaWJ1dGUoJ2lkJyksIDEwKTtcblxuICAgICAgICB2YXIgdGV4dHVyZVJlY3QgPSBuZXcgY29yZS5SZWN0YW5nbGUoXG4gICAgICAgICAgICBwYXJzZUludChsZXR0ZXJzW2ldLmdldEF0dHJpYnV0ZSgneCcpLCAxMCkgKyB0ZXh0dXJlLmZyYW1lLngsXG4gICAgICAgICAgICBwYXJzZUludChsZXR0ZXJzW2ldLmdldEF0dHJpYnV0ZSgneScpLCAxMCkgKyB0ZXh0dXJlLmZyYW1lLnksXG4gICAgICAgICAgICBwYXJzZUludChsZXR0ZXJzW2ldLmdldEF0dHJpYnV0ZSgnd2lkdGgnKSwgMTApLFxuICAgICAgICAgICAgcGFyc2VJbnQobGV0dGVyc1tpXS5nZXRBdHRyaWJ1dGUoJ2hlaWdodCcpLCAxMClcbiAgICAgICAgKTtcblxuICAgICAgICBkYXRhLmNoYXJzW2NoYXJDb2RlXSA9IHtcbiAgICAgICAgICAgIHhPZmZzZXQ6IHBhcnNlSW50KGxldHRlcnNbaV0uZ2V0QXR0cmlidXRlKCd4b2Zmc2V0JyksIDEwKSxcbiAgICAgICAgICAgIHlPZmZzZXQ6IHBhcnNlSW50KGxldHRlcnNbaV0uZ2V0QXR0cmlidXRlKCd5b2Zmc2V0JyksIDEwKSxcbiAgICAgICAgICAgIHhBZHZhbmNlOiBwYXJzZUludChsZXR0ZXJzW2ldLmdldEF0dHJpYnV0ZSgneGFkdmFuY2UnKSwgMTApLFxuICAgICAgICAgICAga2VybmluZzoge30sXG4gICAgICAgICAgICB0ZXh0dXJlOiBuZXcgY29yZS5UZXh0dXJlKHRleHR1cmUuYmFzZVRleHR1cmUsIHRleHR1cmVSZWN0KVxuXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgLy9wYXJzZSBrZXJuaW5nc1xuICAgIHZhciBrZXJuaW5ncyA9IHJlc291cmNlLmRhdGEuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2tlcm5pbmcnKTtcbiAgICBmb3IgKGkgPSAwOyBpIDwga2VybmluZ3MubGVuZ3RoOyBpKyspXG4gICAge1xuICAgICAgICB2YXIgZmlyc3QgPSBwYXJzZUludChrZXJuaW5nc1tpXS5nZXRBdHRyaWJ1dGUoJ2ZpcnN0JyksIDEwKTtcbiAgICAgICAgdmFyIHNlY29uZCA9IHBhcnNlSW50KGtlcm5pbmdzW2ldLmdldEF0dHJpYnV0ZSgnc2Vjb25kJyksIDEwKTtcbiAgICAgICAgdmFyIGFtb3VudCA9IHBhcnNlSW50KGtlcm5pbmdzW2ldLmdldEF0dHJpYnV0ZSgnYW1vdW50JyksIDEwKTtcblxuICAgICAgICBkYXRhLmNoYXJzW3NlY29uZF0ua2VybmluZ1tmaXJzdF0gPSBhbW91bnQ7XG4gICAgfVxuXG4gICAgcmVzb3VyY2UuYml0bWFwRm9udCA9IGRhdGE7XG5cbiAgICAvLyBJJ20gbGVhdmluZyB0aGlzIGFzIGEgdGVtcG9yYXJ5IGZpeCBzbyB3ZSBjYW4gdGVzdCB0aGUgYml0bWFwIGZvbnRzIGluIHYzXG4gICAgLy8gYnV0IGl0J3MgdmVyeSBsaWtlbHkgdG8gY2hhbmdlXG4gICAgZXh0cmFzLkJpdG1hcFRleHQuZm9udHNbZGF0YS5mb250XSA9IGRhdGE7XG59XG5cblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoKVxue1xuICAgIHJldHVybiBmdW5jdGlvbiAocmVzb3VyY2UsIG5leHQpXG4gICAge1xuICAgICAgICAvLyBza2lwIGlmIG5vIGRhdGEgb3Igbm90IHhtbCBkYXRhXG4gICAgICAgIGlmICghcmVzb3VyY2UuZGF0YSB8fCAhcmVzb3VyY2UuaXNYbWwpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiBuZXh0KCk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBza2lwIGlmIG5vdCBiaXRtYXAgZm9udCBkYXRhLCB1c2luZyBzb21lIHNpbGx5IGR1Y2stdHlwaW5nXG4gICAgICAgIGlmIChcbiAgICAgICAgICAgIHJlc291cmNlLmRhdGEuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ3BhZ2UnKS5sZW5ndGggPT09IDAgfHxcbiAgICAgICAgICAgIHJlc291cmNlLmRhdGEuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2luZm8nKS5sZW5ndGggPT09IDAgfHxcbiAgICAgICAgICAgIHJlc291cmNlLmRhdGEuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2luZm8nKVswXS5nZXRBdHRyaWJ1dGUoJ2ZhY2UnKSA9PT0gbnVsbFxuICAgICAgICAgICAgKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gbmV4dCgpO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIHhtbFVybCA9IHBhdGguZGlybmFtZShyZXNvdXJjZS51cmwpO1xuXG4gICAgICAgIGlmICh4bWxVcmwgPT09ICcuJykge1xuICAgICAgICAgICAgeG1sVXJsID0gJyc7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5iYXNlVXJsICYmIHhtbFVybCkge1xuICAgICAgICAgICAgLy8gaWYgYmFzZXVybCBoYXMgYSB0cmFpbGluZyBzbGFzaCB0aGVuIGFkZCBvbmUgdG8geG1sVXJsIHNvIHRoZSByZXBsYWNlIHdvcmtzIGJlbG93XG4gICAgICAgICAgICBpZiAodGhpcy5iYXNlVXJsLmNoYXJBdCh0aGlzLmJhc2VVcmwubGVuZ3RoIC0gMSkgPT09ICcvJykge1xuICAgICAgICAgICAgICAgIHhtbFVybCArPSAnLyc7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIHJlbW92ZSBiYXNlVXJsIGZyb20geG1sVXJsXG4gICAgICAgICAgICB4bWxVcmwgPSB4bWxVcmwucmVwbGFjZSh0aGlzLmJhc2VVcmwsICcnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGlmIHRoZXJlIGlzIGFuIHhtbFVybCBub3csIGl0IG5lZWRzIGEgdHJhaWxpbmcgc2xhc2guIEVuc3VyZSB0aGF0IGl0IGRvZXMgaWYgdGhlIHN0cmluZyBpc24ndCBlbXB0eS5cbiAgICAgICAgaWYgKHhtbFVybCAmJiB4bWxVcmwuY2hhckF0KHhtbFVybC5sZW5ndGggLSAxKSAhPT0gJy8nKSB7XG4gICAgICAgICAgICB4bWxVcmwgKz0gJy8nO1xuICAgICAgICB9XG4gICAgICAgIHZhciB0ZXh0dXJlVXJsID0geG1sVXJsICsgcmVzb3VyY2UuZGF0YS5nZXRFbGVtZW50c0J5VGFnTmFtZSgncGFnZScpWzBdLmdldEF0dHJpYnV0ZSgnZmlsZScpO1xuICAgICAgICBpZiAoY29yZS51dGlscy5UZXh0dXJlQ2FjaGVbdGV4dHVyZVVybF0pIHtcbiAgICAgICAgICAgIC8vcmV1c2UgZXhpc3RpbmcgdGV4dHVyZVxuICAgICAgICAgICAgcGFyc2UocmVzb3VyY2UsIGNvcmUudXRpbHMuVGV4dHVyZUNhY2hlW3RleHR1cmVVcmxdKTtcbiAgICAgICAgICAgIG5leHQoKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHZhciBsb2FkT3B0aW9ucyA9IHtcbiAgICAgICAgICAgICAgICBjcm9zc09yaWdpbjogcmVzb3VyY2UuY3Jvc3NPcmlnaW4sXG4gICAgICAgICAgICAgICAgbG9hZFR5cGU6IFJlc291cmNlLkxPQURfVFlQRS5JTUFHRSxcbiAgICAgICAgICAgICAgICBtZXRhZGF0YTogcmVzb3VyY2UubWV0YWRhdGEuaW1hZ2VNZXRhZGF0YVxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIC8vIGxvYWQgdGhlIHRleHR1cmUgZm9yIHRoZSBmb250XG4gICAgICAgICAgICB0aGlzLmFkZChyZXNvdXJjZS5uYW1lICsgJ19pbWFnZScsIHRleHR1cmVVcmwsIGxvYWRPcHRpb25zLCBmdW5jdGlvbiAocmVzKSB7XG4gICAgICAgICAgICAgICAgcGFyc2UocmVzb3VyY2UsIHJlcy50ZXh0dXJlKTtcbiAgICAgICAgICAgICAgICBuZXh0KCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH07XG59O1xuIiwiLyoqXG4gKiBAZmlsZSAgICAgICAgTWFpbiBleHBvcnQgb2YgdGhlIFBJWEkgbG9hZGVycyBsaWJyYXJ5XG4gKiBAYXV0aG9yICAgICAgTWF0IEdyb3ZlcyA8bWF0QGdvb2Rib3lkaWdpdGFsLmNvbT5cbiAqIEBjb3B5cmlnaHQgICAyMDEzLTIwMTUgR29vZEJveURpZ2l0YWxcbiAqIEBsaWNlbnNlICAgICB7QGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL3BpeGlqcy9waXhpLmpzL2Jsb2IvbWFzdGVyL0xJQ0VOU0V8TUlUIExpY2Vuc2V9XG4gKi9cblxuLyoqXG4gKiBAbmFtZXNwYWNlIFBJWEkubG9hZGVyc1xuICovXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgICBMb2FkZXI6ICAgICAgICAgICAgIHJlcXVpcmUoJy4vbG9hZGVyJyksXG5cbiAgICAvLyBwYXJzZXJzXG4gICAgYml0bWFwRm9udFBhcnNlcjogICByZXF1aXJlKCcuL2JpdG1hcEZvbnRQYXJzZXInKSxcbiAgICBzcHJpdGVzaGVldFBhcnNlcjogIHJlcXVpcmUoJy4vc3ByaXRlc2hlZXRQYXJzZXInKSxcbiAgICB0ZXh0dXJlUGFyc2VyOiAgICAgIHJlcXVpcmUoJy4vdGV4dHVyZVBhcnNlcicpLFxuICAgIFJlc291cmNlOiAgICAgICAgICAgcmVxdWlyZSgncmVzb3VyY2UtbG9hZGVyJykuUmVzb3VyY2Vcbn07XG4iLCJ2YXIgUmVzb3VyY2VMb2FkZXIgPSByZXF1aXJlKCdyZXNvdXJjZS1sb2FkZXInKSxcbiAgICB0ZXh0dXJlUGFyc2VyID0gcmVxdWlyZSgnLi90ZXh0dXJlUGFyc2VyJyksXG4gICAgc3ByaXRlc2hlZXRQYXJzZXIgPSByZXF1aXJlKCcuL3Nwcml0ZXNoZWV0UGFyc2VyJyksXG4gICAgYml0bWFwRm9udFBhcnNlciA9IHJlcXVpcmUoJy4vYml0bWFwRm9udFBhcnNlcicpO1xuXG4vKipcbiAqXG4gKiBUaGUgbmV3IGxvYWRlciwgZXh0ZW5kcyBSZXNvdXJjZSBMb2FkZXIgYnkgQ2hhZCBFbmdsZXIgOiBodHRwczovL2dpdGh1Yi5jb20vZW5nbGVyY2ovcmVzb3VyY2UtbG9hZGVyXG4gKlxuICogYGBganNcbiAqIHZhciBsb2FkZXIgPSBQSVhJLmxvYWRlcjsgLy8gcGl4aSBleHBvc2VzIGEgcHJlbWFkZSBpbnN0YW5jZSBmb3IgeW91IHRvIHVzZS5cbiAqIC8vb3JcbiAqIHZhciBsb2FkZXIgPSBuZXcgUElYSS5sb2FkZXJzLkxvYWRlcigpOyAvLyB5b3UgY2FuIGFsc28gY3JlYXRlIHlvdXIgb3duIGlmIHlvdSB3YW50XG4gKlxuICogbG9hZGVyLmFkZCgnYnVubnknLFwiZGF0YS9idW5ueS5wbmdcIik7XG4gKlxuICogbG9hZGVyLm9uY2UoJ2NvbXBsZXRlJyxvbkFzc2V0c0xvYWRlZCk7XG4gKlxuICogbG9hZGVyLmxvYWQoKTtcbiAqIGBgYFxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5SZXNvdXJjZUxvYWRlclxuICogQG1lbWJlcm9mIFBJWEkubG9hZGVyc1xuICogQHBhcmFtIFtiYXNlVXJsPScnXSB7c3RyaW5nfSBUaGUgYmFzZSB1cmwgZm9yIGFsbCByZXNvdXJjZXMgbG9hZGVkIGJ5IHRoaXMgbG9hZGVyLlxuICogQHBhcmFtIFtjb25jdXJyZW5jeT0xMF0ge251bWJlcn0gVGhlIG51bWJlciBvZiByZXNvdXJjZXMgdG8gbG9hZCBjb25jdXJyZW50bHkuXG4gKi9cbmZ1bmN0aW9uIExvYWRlcihiYXNlVXJsLCBjb25jdXJyZW5jeSlcbntcbiAgICBSZXNvdXJjZUxvYWRlci5jYWxsKHRoaXMsIGJhc2VVcmwsIGNvbmN1cnJlbmN5KTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgTG9hZGVyLl9waXhpTWlkZGxld2FyZS5sZW5ndGg7ICsraSkge1xuICAgICAgICB0aGlzLnVzZShMb2FkZXIuX3BpeGlNaWRkbGV3YXJlW2ldKCkpO1xuICAgIH1cbn1cblxuTG9hZGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoUmVzb3VyY2VMb2FkZXIucHJvdG90eXBlKTtcbkxvYWRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBMb2FkZXI7XG5cbm1vZHVsZS5leHBvcnRzID0gTG9hZGVyO1xuXG5Mb2FkZXIuX3BpeGlNaWRkbGV3YXJlID0gW1xuICAgIC8vIHBhcnNlIGFueSBibG9iIGludG8gbW9yZSB1c2FibGUgb2JqZWN0cyAoZS5nLiBJbWFnZSlcbiAgICBSZXNvdXJjZUxvYWRlci5taWRkbGV3YXJlLnBhcnNpbmcuYmxvYixcbiAgICAvLyBwYXJzZSBhbnkgSW1hZ2Ugb2JqZWN0cyBpbnRvIHRleHR1cmVzXG4gICAgdGV4dHVyZVBhcnNlcixcbiAgICAvLyBwYXJzZSBhbnkgc3ByaXRlc2hlZXQgZGF0YSBpbnRvIG11bHRpcGxlIHRleHR1cmVzXG4gICAgc3ByaXRlc2hlZXRQYXJzZXIsXG4gICAgLy8gcGFyc2UgYW55IHNwcml0ZXNoZWV0IGRhdGEgaW50byBtdWx0aXBsZSB0ZXh0dXJlc1xuICAgIGJpdG1hcEZvbnRQYXJzZXJcbl07XG5cbkxvYWRlci5hZGRQaXhpTWlkZGxld2FyZSA9IGZ1bmN0aW9uIChmbikge1xuICAgIExvYWRlci5fcGl4aU1pZGRsZXdhcmUucHVzaChmbik7XG59O1xuXG4vLyBBZGQgY3VzdG9tIGV4dGVudGlvbnNcbnZhciBSZXNvdXJjZSA9IFJlc291cmNlTG9hZGVyLlJlc291cmNlO1xuXG5SZXNvdXJjZS5zZXRFeHRlbnNpb25YaHJUeXBlKCdmbnQnLCBSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRS5ET0NVTUVOVCk7XG4iLCJ2YXIgUmVzb3VyY2UgPSByZXF1aXJlKCdyZXNvdXJjZS1sb2FkZXInKS5SZXNvdXJjZSxcbiAgICBwYXRoID0gcmVxdWlyZSgncGF0aCcpLFxuICAgIGNvcmUgPSByZXF1aXJlKCcuLi9jb3JlJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKClcbntcbiAgICByZXR1cm4gZnVuY3Rpb24gKHJlc291cmNlLCBuZXh0KVxuICAgIHtcbiAgICAgICAgLy8gc2tpcCBpZiBubyBkYXRhLCBpdHMgbm90IGpzb24sIG9yIGl0IGlzbid0IHNwcml0ZXNoZWV0IGRhdGFcbiAgICAgICAgaWYgKCFyZXNvdXJjZS5kYXRhIHx8ICFyZXNvdXJjZS5pc0pzb24gfHwgIXJlc291cmNlLmRhdGEuZnJhbWVzKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gbmV4dCgpO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGxvYWRPcHRpb25zID0ge1xuICAgICAgICAgICAgY3Jvc3NPcmlnaW46IHJlc291cmNlLmNyb3NzT3JpZ2luLFxuICAgICAgICAgICAgbG9hZFR5cGU6IFJlc291cmNlLkxPQURfVFlQRS5JTUFHRSxcbiAgICAgICAgICAgIG1ldGFkYXRhOiByZXNvdXJjZS5tZXRhZGF0YS5pbWFnZU1ldGFkYXRhXG4gICAgICAgIH07XG5cbiAgICAgICAgdmFyIHJvdXRlID0gcGF0aC5kaXJuYW1lKHJlc291cmNlLnVybC5yZXBsYWNlKHRoaXMuYmFzZVVybCwgJycpKTtcblxuICAgICAgICB2YXIgcmVzb2x1dGlvbiA9IGNvcmUudXRpbHMuZ2V0UmVzb2x1dGlvbk9mVXJsKCByZXNvdXJjZS51cmwgKTtcblxuICAgICAgICAvLyBsb2FkIHRoZSBpbWFnZSBmb3IgdGhpcyBzaGVldFxuICAgICAgICB0aGlzLmFkZChyZXNvdXJjZS5uYW1lICsgJ19pbWFnZScsIHJvdXRlICsgJy8nICsgcmVzb3VyY2UuZGF0YS5tZXRhLmltYWdlLCBsb2FkT3B0aW9ucywgZnVuY3Rpb24gKHJlcylcbiAgICAgICAge1xuICAgICAgICAgICAgcmVzb3VyY2UudGV4dHVyZXMgPSB7fTtcblxuICAgICAgICAgICAgdmFyIGZyYW1lcyA9IHJlc291cmNlLmRhdGEuZnJhbWVzO1xuXG4gICAgICAgICAgICBmb3IgKHZhciBpIGluIGZyYW1lcylcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB2YXIgcmVjdCA9IGZyYW1lc1tpXS5mcmFtZTtcblxuICAgICAgICAgICAgICAgIGlmIChyZWN0KVxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHNpemUgPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICB2YXIgdHJpbSA9IG51bGw7XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKGZyYW1lc1tpXS5yb3RhdGVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzaXplID0gbmV3IGNvcmUuUmVjdGFuZ2xlKHJlY3QueCwgcmVjdC55LCByZWN0LmgsIHJlY3Qudyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzaXplID0gbmV3IGNvcmUuUmVjdGFuZ2xlKHJlY3QueCwgcmVjdC55LCByZWN0LncsIHJlY3QuaCk7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAvLyAgQ2hlY2sgdG8gc2VlIGlmIHRoZSBzcHJpdGUgaXMgdHJpbW1lZFxuICAgICAgICAgICAgICAgICAgICBpZiAoZnJhbWVzW2ldLnRyaW1tZWQpXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRyaW0gPSBuZXcgY29yZS5SZWN0YW5nbGUoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJhbWVzW2ldLnNwcml0ZVNvdXJjZVNpemUueCAvIHJlc29sdXRpb24sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJhbWVzW2ldLnNwcml0ZVNvdXJjZVNpemUueSAvIHJlc29sdXRpb24sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJhbWVzW2ldLnNvdXJjZVNpemUudyAvIHJlc29sdXRpb24sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJhbWVzW2ldLnNvdXJjZVNpemUuaCAvIHJlc29sdXRpb25cbiAgICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgLy8gZmxpcCB0aGUgd2lkdGggYW5kIGhlaWdodCFcbiAgICAgICAgICAgICAgICAgICAgaWYgKGZyYW1lc1tpXS5yb3RhdGVkKVxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgdGVtcCA9IHNpemUud2lkdGg7XG4gICAgICAgICAgICAgICAgICAgICAgICBzaXplLndpZHRoID0gc2l6ZS5oZWlnaHQ7XG4gICAgICAgICAgICAgICAgICAgICAgICBzaXplLmhlaWdodCA9IHRlbXA7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBzaXplLnggLz0gcmVzb2x1dGlvbjtcbiAgICAgICAgICAgICAgICAgICAgc2l6ZS55IC89IHJlc29sdXRpb247XG4gICAgICAgICAgICAgICAgICAgIHNpemUud2lkdGggLz0gcmVzb2x1dGlvbjtcbiAgICAgICAgICAgICAgICAgICAgc2l6ZS5oZWlnaHQgLz0gcmVzb2x1dGlvbjtcblxuICAgICAgICAgICAgICAgICAgICByZXNvdXJjZS50ZXh0dXJlc1tpXSA9IG5ldyBjb3JlLlRleHR1cmUocmVzLnRleHR1cmUuYmFzZVRleHR1cmUsIHNpemUsIHNpemUuY2xvbmUoKSwgdHJpbSwgZnJhbWVzW2ldLnJvdGF0ZWQpO1xuXG4gICAgICAgICAgICAgICAgICAgIC8vIGxldHMgYWxzbyBhZGQgdGhlIGZyYW1lIHRvIHBpeGkncyBnbG9iYWwgY2FjaGUgZm9yIGZyb21GcmFtZSBhbmQgZnJvbUltYWdlIGZ1bmN0aW9uc1xuICAgICAgICAgICAgICAgICAgICBjb3JlLnV0aWxzLlRleHR1cmVDYWNoZVtpXSA9IHJlc291cmNlLnRleHR1cmVzW2ldO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgbmV4dCgpO1xuICAgICAgICB9KTtcbiAgICB9O1xufTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vY29yZScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICgpXG57XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChyZXNvdXJjZSwgbmV4dClcbiAgICB7XG4gICAgICAgIC8vIGNyZWF0ZSBhIG5ldyB0ZXh0dXJlIGlmIHRoZSBkYXRhIGlzIGFuIEltYWdlIG9iamVjdFxuICAgICAgICBpZiAocmVzb3VyY2UuZGF0YSAmJiByZXNvdXJjZS5pc0ltYWdlKVxuICAgICAgICB7XG4gICAgICAgICAgICB2YXIgYmFzZVRleHR1cmUgPSBuZXcgY29yZS5CYXNlVGV4dHVyZShyZXNvdXJjZS5kYXRhLCBudWxsLCBjb3JlLnV0aWxzLmdldFJlc29sdXRpb25PZlVybChyZXNvdXJjZS51cmwpKTtcbiAgICAgICAgICAgIGJhc2VUZXh0dXJlLmltYWdlVXJsID0gcmVzb3VyY2UudXJsO1xuICAgICAgICAgICAgcmVzb3VyY2UudGV4dHVyZSA9IG5ldyBjb3JlLlRleHR1cmUoYmFzZVRleHR1cmUpO1xuICAgICAgICAgICAgLy8gbGV0cyBhbHNvIGFkZCB0aGUgZnJhbWUgdG8gcGl4aSdzIGdsb2JhbCBjYWNoZSBmb3IgZnJvbUZyYW1lIGFuZCBmcm9tSW1hZ2UgZnVjbnRpb25zXG4gICAgICAgICAgICBjb3JlLnV0aWxzLkJhc2VUZXh0dXJlQ2FjaGVbcmVzb3VyY2UudXJsXSA9IGJhc2VUZXh0dXJlO1xuICAgICAgICAgICAgY29yZS51dGlscy5UZXh0dXJlQ2FjaGVbcmVzb3VyY2UudXJsXSA9IHJlc291cmNlLnRleHR1cmU7XG4gICAgICAgIH1cblxuICAgICAgICBuZXh0KCk7XG4gICAgfTtcbn07XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uL2NvcmUnKSxcbiAgICB0ZW1wUG9pbnQgPSBuZXcgY29yZS5Qb2ludCgpLFxuICAgIHRlbXBQb2x5Z29uID0gbmV3IGNvcmUuUG9seWdvbigpO1xuXG4vKipcbiAqIEJhc2UgbWVzaCBjbGFzc1xuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLkNvbnRhaW5lclxuICogQG1lbWJlcm9mIFBJWEkubWVzaFxuICogQHBhcmFtIHRleHR1cmUge1BJWEkuVGV4dHVyZX0gVGhlIHRleHR1cmUgdG8gdXNlXG4gKiBAcGFyYW0gW3ZlcnRpY2VzXSB7RmxvYXQzMkFycmF5fSBpZiB5b3Ugd2FudCB0byBzcGVjaWZ5IHRoZSB2ZXJ0aWNlc1xuICogQHBhcmFtIFt1dnNdIHtGbG9hdDMyQXJyYXl9IGlmIHlvdSB3YW50IHRvIHNwZWNpZnkgdGhlIHV2c1xuICogQHBhcmFtIFtpbmRpY2VzXSB7VWludDE2QXJyYXl9IGlmIHlvdSB3YW50IHRvIHNwZWNpZnkgdGhlIGluZGljZXNcbiAqIEBwYXJhbSBbZHJhd01vZGVdIHtudW1iZXJ9IHRoZSBkcmF3TW9kZSwgY2FuIGJlIGFueSBvZiB0aGUgTWVzaC5EUkFXX01PREVTIGNvbnN0c1xuICovXG5mdW5jdGlvbiBNZXNoKHRleHR1cmUsIHZlcnRpY2VzLCB1dnMsIGluZGljZXMsIGRyYXdNb2RlKVxue1xuICAgIGNvcmUuQ29udGFpbmVyLmNhbGwodGhpcyk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgdGV4dHVyZSBvZiB0aGUgTWVzaFxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5UZXh0dXJlfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fdGV4dHVyZSA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgVXZzIG9mIHRoZSBNZXNoXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtGbG9hdDMyQXJyYXl9XG4gICAgICovXG4gICAgdGhpcy51dnMgPSB1dnMgfHwgbmV3IEZsb2F0MzJBcnJheShbMCwgMCxcbiAgICAgICAgMSwgMCxcbiAgICAgICAgMSwgMSxcbiAgICAgICAgMCwgMV0pO1xuXG4gICAgLyoqXG4gICAgICogQW4gYXJyYXkgb2YgdmVydGljZXNcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge0Zsb2F0MzJBcnJheX1cbiAgICAgKi9cbiAgICB0aGlzLnZlcnRpY2VzID0gdmVydGljZXMgfHwgbmV3IEZsb2F0MzJBcnJheShbMCwgMCxcbiAgICAgICAgMTAwLCAwLFxuICAgICAgICAxMDAsIDEwMCxcbiAgICAgICAgMCwgMTAwXSk7XG5cbiAgICAvKlxuICAgICAqIEBtZW1iZXIge1VpbnQxNkFycmF5fSBBbiBhcnJheSBjb250YWluaW5nIHRoZSBpbmRpY2VzIG9mIHRoZSB2ZXJ0aWNlc1xuICAgICAqL1xuICAgIC8vICBUT0RPIGF1dG8gZ2VuZXJhdGUgdGhpcyBiYXNlZCBvbiBkcmF3IG1vZGUhXG4gICAgdGhpcy5pbmRpY2VzID0gaW5kaWNlcyB8fCBuZXcgVWludDE2QXJyYXkoWzAsIDEsIDMsIDJdKTtcblxuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgdGhlIE1lc2ggaXMgZGlydHkgb3Igbm90XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqL1xuICAgIHRoaXMuZGlydHkgPSB0cnVlO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGJsZW5kIG1vZGUgdG8gYmUgYXBwbGllZCB0byB0aGUgc3ByaXRlLiBTZXQgdG8gYFBJWEkuQkxFTkRfTU9ERVMuTk9STUFMYCB0byByZW1vdmUgYW55IGJsZW5kIG1vZGUuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgUElYSS5CTEVORF9NT0RFUy5OT1JNQUxcbiAgICAgKiBAc2VlIFBJWEkuQkxFTkRfTU9ERVNcbiAgICAgKi9cbiAgICB0aGlzLmJsZW5kTW9kZSA9IGNvcmUuQkxFTkRfTU9ERVMuTk9STUFMO1xuXG4gICAgLyoqXG4gICAgICogVHJpYW5nbGVzIGluIGNhbnZhcyBtb2RlIGFyZSBhdXRvbWF0aWNhbGx5IGFudGlhbGlhc2VkLCB1c2UgdGhpcyB2YWx1ZSB0byBmb3JjZSB0cmlhbmdsZXMgdG8gb3ZlcmxhcCBhIGJpdCB3aXRoIGVhY2ggb3RoZXIuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy5jYW52YXNQYWRkaW5nID0gMDtcblxuICAgIC8qKlxuICAgICAqIFRoZSB3YXkgdGhlIE1lc2ggc2hvdWxkIGJlIGRyYXduLCBjYW4gYmUgYW55IG9mIHRoZSB7QGxpbmsgUElYSS5tZXNoLk1lc2guRFJBV19NT0RFU30gY29uc3RzXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQHNlZSBQSVhJLm1lc2guTWVzaC5EUkFXX01PREVTXG4gICAgICovXG4gICAgdGhpcy5kcmF3TW9kZSA9IGRyYXdNb2RlIHx8IE1lc2guRFJBV19NT0RFUy5UUklBTkdMRV9NRVNIO1xuXG4gICAgLy8gcnVuIHRleHR1cmUgc2V0dGVyO1xuICAgIHRoaXMudGV4dHVyZSA9IHRleHR1cmU7XG5cbiAgICAgLyoqXG4gICAgICogVGhlIGRlZmF1bHQgc2hhZGVyIHRoYXQgaXMgdXNlZCBpZiBhIG1lc2ggZG9lc24ndCBoYXZlIGEgbW9yZSBzcGVjaWZpYyBvbmUuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlNoYWRlcn1cbiAgICAgKi9cbiAgICB0aGlzLnNoYWRlciA9IG51bGw7XG59XG5cbi8vIGNvbnN0cnVjdG9yXG5NZXNoLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoY29yZS5Db250YWluZXIucHJvdG90eXBlKTtcbk1lc2gucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gTWVzaDtcbm1vZHVsZS5leHBvcnRzID0gTWVzaDtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoTWVzaC5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBUaGUgdGV4dHVyZSB0aGF0IHRoZSBzcHJpdGUgaXMgdXNpbmdcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuVGV4dHVyZX1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5tZXNoLk1lc2gjXG4gICAgICovXG4gICAgdGV4dHVyZToge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiAgdGhpcy5fdGV4dHVyZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGlmICh0aGlzLl90ZXh0dXJlID09PSB2YWx1ZSlcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuX3RleHR1cmUgPSB2YWx1ZTtcblxuICAgICAgICAgICAgaWYgKHZhbHVlKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIC8vIHdhaXQgZm9yIHRoZSB0ZXh0dXJlIHRvIGxvYWRcbiAgICAgICAgICAgICAgICBpZiAodmFsdWUuYmFzZVRleHR1cmUuaGFzTG9hZGVkKVxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fb25UZXh0dXJlVXBkYXRlKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlLm9uY2UoJ3VwZGF0ZScsIHRoaXMuX29uVGV4dHVyZVVwZGF0ZSwgdGhpcyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxufSk7XG5cbi8qKlxuICogUmVuZGVycyB0aGUgb2JqZWN0IHVzaW5nIHRoZSBXZWJHTCByZW5kZXJlclxuICpcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5XZWJHTFJlbmRlcmVyfSBhIHJlZmVyZW5jZSB0byB0aGUgV2ViR0wgcmVuZGVyZXJcbiAqIEBwcml2YXRlXG4gKi9cbk1lc2gucHJvdG90eXBlLl9yZW5kZXJXZWJHTCA9IGZ1bmN0aW9uIChyZW5kZXJlcilcbntcbiAgICByZW5kZXJlci5zZXRPYmplY3RSZW5kZXJlcihyZW5kZXJlci5wbHVnaW5zLm1lc2gpO1xuICAgIHJlbmRlcmVyLnBsdWdpbnMubWVzaC5yZW5kZXIodGhpcyk7XG59O1xuXG4vKipcbiAqIFJlbmRlcnMgdGhlIG9iamVjdCB1c2luZyB0aGUgQ2FudmFzIHJlbmRlcmVyXG4gKlxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLkNhbnZhc1JlbmRlcmVyfVxuICogQHByaXZhdGVcbiAqL1xuTWVzaC5wcm90b3R5cGUuX3JlbmRlckNhbnZhcyA9IGZ1bmN0aW9uIChyZW5kZXJlcilcbntcbiAgICB2YXIgY29udGV4dCA9IHJlbmRlcmVyLmNvbnRleHQ7XG5cbiAgICB2YXIgdHJhbnNmb3JtID0gdGhpcy53b3JsZFRyYW5zZm9ybTtcblxuICAgIGlmIChyZW5kZXJlci5yb3VuZFBpeGVscylcbiAgICB7XG4gICAgICAgIGNvbnRleHQuc2V0VHJhbnNmb3JtKHRyYW5zZm9ybS5hLCB0cmFuc2Zvcm0uYiwgdHJhbnNmb3JtLmMsIHRyYW5zZm9ybS5kLCB0cmFuc2Zvcm0udHggfCAwLCB0cmFuc2Zvcm0udHkgfCAwKTtcbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgY29udGV4dC5zZXRUcmFuc2Zvcm0odHJhbnNmb3JtLmEsIHRyYW5zZm9ybS5iLCB0cmFuc2Zvcm0uYywgdHJhbnNmb3JtLmQsIHRyYW5zZm9ybS50eCwgdHJhbnNmb3JtLnR5KTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5kcmF3TW9kZSA9PT0gTWVzaC5EUkFXX01PREVTLlRSSUFOR0xFX01FU0gpXG4gICAge1xuICAgICAgICB0aGlzLl9yZW5kZXJDYW52YXNUcmlhbmdsZU1lc2goY29udGV4dCk7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHRoaXMuX3JlbmRlckNhbnZhc1RyaWFuZ2xlcyhjb250ZXh0KTtcbiAgICB9XG59O1xuXG4vKipcbiAqIERyYXdzIHRoZSBvYmplY3QgaW4gVHJpYW5nbGUgTWVzaCBtb2RlIHVzaW5nIGNhbnZhc1xuICpcbiAqIEBwYXJhbSBjb250ZXh0IHtDYW52YXNSZW5kZXJpbmdDb250ZXh0MkR9IHRoZSBjdXJyZW50IGRyYXdpbmcgY29udGV4dFxuICogQHByaXZhdGVcbiAqL1xuTWVzaC5wcm90b3R5cGUuX3JlbmRlckNhbnZhc1RyaWFuZ2xlTWVzaCA9IGZ1bmN0aW9uIChjb250ZXh0KVxue1xuICAgIC8vIGRyYXcgdHJpYW5nbGVzISFcbiAgICB2YXIgdmVydGljZXMgPSB0aGlzLnZlcnRpY2VzO1xuICAgIHZhciB1dnMgPSB0aGlzLnV2cztcblxuICAgIHZhciBsZW5ndGggPSB2ZXJ0aWNlcy5sZW5ndGggLyAyO1xuICAgIC8vIHRoaXMuY291bnQrKztcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoIC0gMjsgaSsrKVxuICAgIHtcbiAgICAgICAgLy8gZHJhdyBzb21lIHRyaWFuZ2xlcyFcbiAgICAgICAgdmFyIGluZGV4ID0gaSAqIDI7XG4gICAgICAgIHRoaXMuX3JlbmRlckNhbnZhc0RyYXdUcmlhbmdsZShjb250ZXh0LCB2ZXJ0aWNlcywgdXZzLCBpbmRleCwgKGluZGV4ICsgMiksIChpbmRleCArIDQpKTtcbiAgICB9XG59O1xuXG4vKipcbiAqIERyYXdzIHRoZSBvYmplY3QgaW4gdHJpYW5nbGUgbW9kZSB1c2luZyBjYW52YXNcbiAqXG4gKiBAcGFyYW0gY29udGV4dCB7Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEfSB0aGUgY3VycmVudCBkcmF3aW5nIGNvbnRleHRcbiAqIEBwcml2YXRlXG4gKi9cbk1lc2gucHJvdG90eXBlLl9yZW5kZXJDYW52YXNUcmlhbmdsZXMgPSBmdW5jdGlvbiAoY29udGV4dClcbntcbiAgICAvLyBkcmF3IHRyaWFuZ2xlcyEhXG4gICAgdmFyIHZlcnRpY2VzID0gdGhpcy52ZXJ0aWNlcztcbiAgICB2YXIgdXZzID0gdGhpcy51dnM7XG4gICAgdmFyIGluZGljZXMgPSB0aGlzLmluZGljZXM7XG5cbiAgICB2YXIgbGVuZ3RoID0gaW5kaWNlcy5sZW5ndGg7XG4gICAgLy8gdGhpcy5jb3VudCsrO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7IGkgKz0gMylcbiAgICB7XG4gICAgICAgIC8vIGRyYXcgc29tZSB0cmlhbmdsZXMhXG4gICAgICAgIHZhciBpbmRleDAgPSBpbmRpY2VzW2ldICogMiwgaW5kZXgxID0gaW5kaWNlc1tpICsgMV0gKiAyLCBpbmRleDIgPSBpbmRpY2VzW2kgKyAyXSAqIDI7XG4gICAgICAgIHRoaXMuX3JlbmRlckNhbnZhc0RyYXdUcmlhbmdsZShjb250ZXh0LCB2ZXJ0aWNlcywgdXZzLCBpbmRleDAsIGluZGV4MSwgaW5kZXgyKTtcbiAgICB9XG59O1xuXG4vKipcbiAqIERyYXdzIG9uZSBvZiB0aGUgdHJpYW5nbGVzIHRoYXQgZm9ybSB0aGlzIE1lc2hcbiAqXG4gKiBAcGFyYW0gY29udGV4dCB7Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEfSB0aGUgY3VycmVudCBkcmF3aW5nIGNvbnRleHRcbiAqIEBwYXJhbSB2ZXJ0aWNlcyB7RmxvYXQzMkFycmF5fSBhIHJlZmVyZW5jZSB0byB0aGUgdmVydGljZXMgb2YgdGhlIE1lc2hcbiAqIEBwYXJhbSB1dnMge0Zsb2F0MzJBcnJheX0gYSByZWZlcmVuY2UgdG8gdGhlIHV2cyBvZiB0aGUgTWVzaFxuICogQHBhcmFtIGluZGV4MCB7bnVtYmVyfSB0aGUgaW5kZXggb2YgdGhlIGZpcnN0IHZlcnRleFxuICogQHBhcmFtIGluZGV4MSB7bnVtYmVyfSB0aGUgaW5kZXggb2YgdGhlIHNlY29uZCB2ZXJ0ZXhcbiAqIEBwYXJhbSBpbmRleDIge251bWJlcn0gdGhlIGluZGV4IG9mIHRoZSB0aGlyZCB2ZXJ0ZXhcbiAqIEBwcml2YXRlXG4gKi9cbk1lc2gucHJvdG90eXBlLl9yZW5kZXJDYW52YXNEcmF3VHJpYW5nbGUgPSBmdW5jdGlvbiAoY29udGV4dCwgdmVydGljZXMsIHV2cywgaW5kZXgwLCBpbmRleDEsIGluZGV4MilcbntcbiAgICB2YXIgdGV4dHVyZVNvdXJjZSA9IHRoaXMuX3RleHR1cmUuYmFzZVRleHR1cmUuc291cmNlO1xuICAgIHZhciB0ZXh0dXJlV2lkdGggPSB0aGlzLl90ZXh0dXJlLmJhc2VUZXh0dXJlLndpZHRoO1xuICAgIHZhciB0ZXh0dXJlSGVpZ2h0ID0gdGhpcy5fdGV4dHVyZS5iYXNlVGV4dHVyZS5oZWlnaHQ7XG5cbiAgICB2YXIgeDAgPSB2ZXJ0aWNlc1tpbmRleDBdLCB4MSA9IHZlcnRpY2VzW2luZGV4MV0sIHgyID0gdmVydGljZXNbaW5kZXgyXTtcbiAgICB2YXIgeTAgPSB2ZXJ0aWNlc1tpbmRleDAgKyAxXSwgeTEgPSB2ZXJ0aWNlc1tpbmRleDEgKyAxXSwgeTIgPSB2ZXJ0aWNlc1tpbmRleDIgKyAxXTtcblxuICAgIHZhciB1MCA9IHV2c1tpbmRleDBdICogdGV4dHVyZVdpZHRoLCB1MSA9IHV2c1tpbmRleDFdICogdGV4dHVyZVdpZHRoLCB1MiA9IHV2c1tpbmRleDJdICogdGV4dHVyZVdpZHRoO1xuICAgIHZhciB2MCA9IHV2c1tpbmRleDAgKyAxXSAqIHRleHR1cmVIZWlnaHQsIHYxID0gdXZzW2luZGV4MSArIDFdICogdGV4dHVyZUhlaWdodCwgdjIgPSB1dnNbaW5kZXgyICsgMV0gKiB0ZXh0dXJlSGVpZ2h0O1xuXG4gICAgaWYgKHRoaXMuY2FudmFzUGFkZGluZyA+IDApXG4gICAge1xuICAgICAgICB2YXIgcGFkZGluZ1ggPSB0aGlzLmNhbnZhc1BhZGRpbmcgLyB0aGlzLndvcmxkVHJhbnNmb3JtLmE7XG4gICAgICAgIHZhciBwYWRkaW5nWSA9IHRoaXMuY2FudmFzUGFkZGluZyAvIHRoaXMud29ybGRUcmFuc2Zvcm0uZDtcbiAgICAgICAgdmFyIGNlbnRlclggPSAoeDAgKyB4MSArIHgyKSAvIDM7XG4gICAgICAgIHZhciBjZW50ZXJZID0gKHkwICsgeTEgKyB5MikgLyAzO1xuXG4gICAgICAgIHZhciBub3JtWCA9IHgwIC0gY2VudGVyWDtcbiAgICAgICAgdmFyIG5vcm1ZID0geTAgLSBjZW50ZXJZO1xuXG4gICAgICAgIHZhciBkaXN0ID0gTWF0aC5zcXJ0KG5vcm1YICogbm9ybVggKyBub3JtWSAqIG5vcm1ZKTtcbiAgICAgICAgeDAgPSBjZW50ZXJYICsgKG5vcm1YIC8gZGlzdCkgKiAoZGlzdCArIHBhZGRpbmdYKTtcbiAgICAgICAgeTAgPSBjZW50ZXJZICsgKG5vcm1ZIC8gZGlzdCkgKiAoZGlzdCArIHBhZGRpbmdZKTtcblxuICAgICAgICAvL1xuXG4gICAgICAgIG5vcm1YID0geDEgLSBjZW50ZXJYO1xuICAgICAgICBub3JtWSA9IHkxIC0gY2VudGVyWTtcblxuICAgICAgICBkaXN0ID0gTWF0aC5zcXJ0KG5vcm1YICogbm9ybVggKyBub3JtWSAqIG5vcm1ZKTtcbiAgICAgICAgeDEgPSBjZW50ZXJYICsgKG5vcm1YIC8gZGlzdCkgKiAoZGlzdCArIHBhZGRpbmdYKTtcbiAgICAgICAgeTEgPSBjZW50ZXJZICsgKG5vcm1ZIC8gZGlzdCkgKiAoZGlzdCArIHBhZGRpbmdZKTtcblxuICAgICAgICBub3JtWCA9IHgyIC0gY2VudGVyWDtcbiAgICAgICAgbm9ybVkgPSB5MiAtIGNlbnRlclk7XG5cbiAgICAgICAgZGlzdCA9IE1hdGguc3FydChub3JtWCAqIG5vcm1YICsgbm9ybVkgKiBub3JtWSk7XG4gICAgICAgIHgyID0gY2VudGVyWCArIChub3JtWCAvIGRpc3QpICogKGRpc3QgKyBwYWRkaW5nWCk7XG4gICAgICAgIHkyID0gY2VudGVyWSArIChub3JtWSAvIGRpc3QpICogKGRpc3QgKyBwYWRkaW5nWSk7XG4gICAgfVxuXG4gICAgY29udGV4dC5zYXZlKCk7XG4gICAgY29udGV4dC5iZWdpblBhdGgoKTtcblxuXG4gICAgY29udGV4dC5tb3ZlVG8oeDAsIHkwKTtcbiAgICBjb250ZXh0LmxpbmVUbyh4MSwgeTEpO1xuICAgIGNvbnRleHQubGluZVRvKHgyLCB5Mik7XG5cbiAgICBjb250ZXh0LmNsb3NlUGF0aCgpO1xuXG4gICAgY29udGV4dC5jbGlwKCk7XG5cbiAgICAvLyBDb21wdXRlIG1hdHJpeCB0cmFuc2Zvcm1cbiAgICB2YXIgZGVsdGEgPSAgKHUwICogdjEpICAgICAgKyAodjAgKiB1MikgICAgICArICh1MSAqIHYyKSAgICAgIC0gKHYxICogdTIpICAgICAgLSAodjAgKiB1MSkgICAgICAtICh1MCAqIHYyKTtcbiAgICB2YXIgZGVsdGFBID0gKHgwICogdjEpICAgICAgKyAodjAgKiB4MikgICAgICArICh4MSAqIHYyKSAgICAgIC0gKHYxICogeDIpICAgICAgLSAodjAgKiB4MSkgICAgICAtICh4MCAqIHYyKTtcbiAgICB2YXIgZGVsdGFCID0gKHUwICogeDEpICAgICAgKyAoeDAgKiB1MikgICAgICArICh1MSAqIHgyKSAgICAgIC0gKHgxICogdTIpICAgICAgLSAoeDAgKiB1MSkgICAgICAtICh1MCAqIHgyKTtcbiAgICB2YXIgZGVsdGFDID0gKHUwICogdjEgKiB4MikgKyAodjAgKiB4MSAqIHUyKSArICh4MCAqIHUxICogdjIpIC0gKHgwICogdjEgKiB1MikgLSAodjAgKiB1MSAqIHgyKSAtICh1MCAqIHgxICogdjIpO1xuICAgIHZhciBkZWx0YUQgPSAoeTAgKiB2MSkgICAgICArICh2MCAqIHkyKSAgICAgICsgKHkxICogdjIpICAgICAgLSAodjEgKiB5MikgICAgICAtICh2MCAqIHkxKSAgICAgIC0gKHkwICogdjIpO1xuICAgIHZhciBkZWx0YUUgPSAodTAgKiB5MSkgICAgICArICh5MCAqIHUyKSAgICAgICsgKHUxICogeTIpICAgICAgLSAoeTEgKiB1MikgICAgICAtICh5MCAqIHUxKSAgICAgIC0gKHUwICogeTIpO1xuICAgIHZhciBkZWx0YUYgPSAodTAgKiB2MSAqIHkyKSArICh2MCAqIHkxICogdTIpICsgKHkwICogdTEgKiB2MikgLSAoeTAgKiB2MSAqIHUyKSAtICh2MCAqIHUxICogeTIpIC0gKHUwICogeTEgKiB2Mik7XG5cbiAgICBjb250ZXh0LnRyYW5zZm9ybShkZWx0YUEgLyBkZWx0YSwgZGVsdGFEIC8gZGVsdGEsXG4gICAgICAgIGRlbHRhQiAvIGRlbHRhLCBkZWx0YUUgLyBkZWx0YSxcbiAgICAgICAgZGVsdGFDIC8gZGVsdGEsIGRlbHRhRiAvIGRlbHRhKTtcblxuICAgIGNvbnRleHQuZHJhd0ltYWdlKHRleHR1cmVTb3VyY2UsIDAsIDApO1xuICAgIGNvbnRleHQucmVzdG9yZSgpO1xufTtcblxuXG5cbi8qKlxuICogUmVuZGVycyBhIGZsYXQgTWVzaFxuICpcbiAqIEBwYXJhbSBNZXNoIHtQSVhJLm1lc2guTWVzaH0gVGhlIE1lc2ggdG8gcmVuZGVyXG4gKiBAcHJpdmF0ZVxuICovXG5NZXNoLnByb3RvdHlwZS5yZW5kZXJNZXNoRmxhdCA9IGZ1bmN0aW9uIChNZXNoKVxue1xuICAgIHZhciBjb250ZXh0ID0gdGhpcy5jb250ZXh0O1xuICAgIHZhciB2ZXJ0aWNlcyA9IE1lc2gudmVydGljZXM7XG5cbiAgICB2YXIgbGVuZ3RoID0gdmVydGljZXMubGVuZ3RoLzI7XG4gICAgLy8gdGhpcy5jb3VudCsrO1xuXG4gICAgY29udGV4dC5iZWdpblBhdGgoKTtcbiAgICBmb3IgKHZhciBpPTE7IGkgPCBsZW5ndGgtMjsgaSsrKVxuICAgIHtcbiAgICAgICAgLy8gZHJhdyBzb21lIHRyaWFuZ2xlcyFcbiAgICAgICAgdmFyIGluZGV4ID0gaSoyO1xuXG4gICAgICAgIHZhciB4MCA9IHZlcnRpY2VzW2luZGV4XSwgICB4MSA9IHZlcnRpY2VzW2luZGV4KzJdLCB4MiA9IHZlcnRpY2VzW2luZGV4KzRdO1xuICAgICAgICB2YXIgeTAgPSB2ZXJ0aWNlc1tpbmRleCsxXSwgeTEgPSB2ZXJ0aWNlc1tpbmRleCszXSwgeTIgPSB2ZXJ0aWNlc1tpbmRleCs1XTtcblxuICAgICAgICBjb250ZXh0Lm1vdmVUbyh4MCwgeTApO1xuICAgICAgICBjb250ZXh0LmxpbmVUbyh4MSwgeTEpO1xuICAgICAgICBjb250ZXh0LmxpbmVUbyh4MiwgeTIpO1xuICAgIH1cblxuICAgIGNvbnRleHQuZmlsbFN0eWxlID0gJyNGRjAwMDAnO1xuICAgIGNvbnRleHQuZmlsbCgpO1xuICAgIGNvbnRleHQuY2xvc2VQYXRoKCk7XG59O1xuXG4vKipcbiAqIFdoZW4gdGhlIHRleHR1cmUgaXMgdXBkYXRlZCwgdGhpcyBldmVudCB3aWxsIGZpcmUgdG8gdXBkYXRlIHRoZSBzY2FsZSBhbmQgZnJhbWVcbiAqXG4gKiBAcGFyYW0gZXZlbnRcbiAqIEBwcml2YXRlXG4gKi9cbk1lc2gucHJvdG90eXBlLl9vblRleHR1cmVVcGRhdGUgPSBmdW5jdGlvbiAoKVxue1xuICAgIHRoaXMudXBkYXRlRnJhbWUgPSB0cnVlO1xufTtcblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBib3VuZHMgb2YgdGhlIG1lc2ggYXMgYSByZWN0YW5nbGUuIFRoZSBib3VuZHMgY2FsY3VsYXRpb24gdGFrZXMgdGhlIHdvcmxkVHJhbnNmb3JtIGludG8gYWNjb3VudC5cbiAqXG4gKiBAcGFyYW0gbWF0cml4IHtQSVhJLk1hdHJpeH0gdGhlIHRyYW5zZm9ybWF0aW9uIG1hdHJpeCBvZiB0aGUgc3ByaXRlXG4gKiBAcmV0dXJuIHtQSVhJLlJlY3RhbmdsZX0gdGhlIGZyYW1pbmcgcmVjdGFuZ2xlXG4gKi9cbk1lc2gucHJvdG90eXBlLmdldEJvdW5kcyA9IGZ1bmN0aW9uIChtYXRyaXgpXG57XG4gICAgaWYgKCF0aGlzLl9jdXJyZW50Qm91bmRzKSB7XG4gICAgICAgIHZhciB3b3JsZFRyYW5zZm9ybSA9IG1hdHJpeCB8fCB0aGlzLndvcmxkVHJhbnNmb3JtO1xuXG4gICAgICAgIHZhciBhID0gd29ybGRUcmFuc2Zvcm0uYTtcbiAgICAgICAgdmFyIGIgPSB3b3JsZFRyYW5zZm9ybS5iO1xuICAgICAgICB2YXIgYyA9IHdvcmxkVHJhbnNmb3JtLmM7XG4gICAgICAgIHZhciBkID0gd29ybGRUcmFuc2Zvcm0uZDtcbiAgICAgICAgdmFyIHR4ID0gd29ybGRUcmFuc2Zvcm0udHg7XG4gICAgICAgIHZhciB0eSA9IHdvcmxkVHJhbnNmb3JtLnR5O1xuXG4gICAgICAgIHZhciBtYXhYID0gLUluZmluaXR5O1xuICAgICAgICB2YXIgbWF4WSA9IC1JbmZpbml0eTtcblxuICAgICAgICB2YXIgbWluWCA9IEluZmluaXR5O1xuICAgICAgICB2YXIgbWluWSA9IEluZmluaXR5O1xuXG4gICAgICAgIHZhciB2ZXJ0aWNlcyA9IHRoaXMudmVydGljZXM7XG4gICAgICAgIGZvciAodmFyIGkgPSAwLCBuID0gdmVydGljZXMubGVuZ3RoOyBpIDwgbjsgaSArPSAyKSB7XG4gICAgICAgICAgICB2YXIgcmF3WCA9IHZlcnRpY2VzW2ldLCByYXdZID0gdmVydGljZXNbaSArIDFdO1xuICAgICAgICAgICAgdmFyIHggPSAoYSAqIHJhd1gpICsgKGMgKiByYXdZKSArIHR4O1xuICAgICAgICAgICAgdmFyIHkgPSAoZCAqIHJhd1kpICsgKGIgKiByYXdYKSArIHR5O1xuXG4gICAgICAgICAgICBtaW5YID0geCA8IG1pblggPyB4IDogbWluWDtcbiAgICAgICAgICAgIG1pblkgPSB5IDwgbWluWSA/IHkgOiBtaW5ZO1xuXG4gICAgICAgICAgICBtYXhYID0geCA+IG1heFggPyB4IDogbWF4WDtcbiAgICAgICAgICAgIG1heFkgPSB5ID4gbWF4WSA/IHkgOiBtYXhZO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG1pblggPT09IC1JbmZpbml0eSB8fCBtYXhZID09PSBJbmZpbml0eSkge1xuICAgICAgICAgICAgcmV0dXJuIGNvcmUuUmVjdGFuZ2xlLkVNUFRZO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGJvdW5kcyA9IHRoaXMuX2JvdW5kcztcblxuICAgICAgICBib3VuZHMueCA9IG1pblg7XG4gICAgICAgIGJvdW5kcy53aWR0aCA9IG1heFggLSBtaW5YO1xuXG4gICAgICAgIGJvdW5kcy55ID0gbWluWTtcbiAgICAgICAgYm91bmRzLmhlaWdodCA9IG1heFkgLSBtaW5ZO1xuXG4gICAgICAgIC8vIHN0b3JlIGEgcmVmZXJlbmNlIHNvIHRoYXQgaWYgdGhpcyBmdW5jdGlvbiBnZXRzIGNhbGxlZCBhZ2FpbiBpbiB0aGUgcmVuZGVyIGN5Y2xlIHdlIGRvIG5vdCBoYXZlIHRvIHJlY2FsY3VsYXRlXG4gICAgICAgIHRoaXMuX2N1cnJlbnRCb3VuZHMgPSBib3VuZHM7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuX2N1cnJlbnRCb3VuZHM7XG59O1xuXG4vKipcbiAqIFRlc3RzIGlmIGEgcG9pbnQgaXMgaW5zaWRlIHRoaXMgbWVzaC4gV29ya3Mgb25seSBmb3IgVFJJQU5HTEVfTUVTSFxuICpcbiAqIEBwYXJhbSBwb2ludCB7UElYSS5Qb2ludH0gdGhlIHBvaW50IHRvIHRlc3RcbiAqIEByZXR1cm4ge2Jvb2xlYW59IHRoZSByZXN1bHQgb2YgdGhlIHRlc3RcbiAqL1xuTWVzaC5wcm90b3R5cGUuY29udGFpbnNQb2ludCA9IGZ1bmN0aW9uKCBwb2ludCApIHtcbiAgICBpZiAoIXRoaXMuZ2V0Qm91bmRzKCkuY29udGFpbnMocG9pbnQueCwgcG9pbnQueSkpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICB0aGlzLndvcmxkVHJhbnNmb3JtLmFwcGx5SW52ZXJzZShwb2ludCwgIHRlbXBQb2ludCk7XG5cbiAgICB2YXIgdmVydGljZXMgPSB0aGlzLnZlcnRpY2VzO1xuICAgIHZhciBwb2ludHMgPSB0ZW1wUG9seWdvbi5wb2ludHM7XG4gICAgdmFyIGksIGxlbjtcblxuICAgIGlmICh0aGlzLmRyYXdNb2RlID09PSBNZXNoLkRSQVdfTU9ERVMuVFJJQU5HTEVTKSB7XG4gICAgICAgIHZhciBpbmRpY2VzID0gdGhpcy5pbmRpY2VzO1xuICAgICAgICBsZW4gPSB0aGlzLmluZGljZXMubGVuZ3RoO1xuICAgICAgICAvL1RPRE86IGlubGluZSB0aGlzLlxuICAgICAgICBmb3IgKGk9MDtpPGxlbjtpKz0zKSB7XG4gICAgICAgICAgICB2YXIgaW5kMCA9IGluZGljZXNbaV0qMiwgaW5kMSA9IGluZGljZXNbaSsxXSoyLCBpbmQyID0gaW5kaWNlc1tpKzJdKjI7XG4gICAgICAgICAgICBwb2ludHNbMF0gPSB2ZXJ0aWNlc1tpbmQwXTtcbiAgICAgICAgICAgIHBvaW50c1sxXSA9IHZlcnRpY2VzW2luZDArMV07XG4gICAgICAgICAgICBwb2ludHNbMl0gPSB2ZXJ0aWNlc1tpbmQxXTtcbiAgICAgICAgICAgIHBvaW50c1szXSA9IHZlcnRpY2VzW2luZDErMV07XG4gICAgICAgICAgICBwb2ludHNbNF0gPSB2ZXJ0aWNlc1tpbmQyXTtcbiAgICAgICAgICAgIHBvaW50c1s1XSA9IHZlcnRpY2VzW2luZDIrMV07XG4gICAgICAgICAgICBpZiAodGVtcFBvbHlnb24uY29udGFpbnModGVtcFBvaW50LngsIHRlbXBQb2ludC55KSkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgICAgbGVuID0gdmVydGljZXMubGVuZ3RoO1xuICAgICAgICBmb3IgKGk9MDtpPGxlbjtpKz02KSB7XG4gICAgICAgICAgICBwb2ludHNbMF0gPSB2ZXJ0aWNlc1tpXTtcbiAgICAgICAgICAgIHBvaW50c1sxXSA9IHZlcnRpY2VzW2krMV07XG4gICAgICAgICAgICBwb2ludHNbMl0gPSB2ZXJ0aWNlc1tpKzJdO1xuICAgICAgICAgICAgcG9pbnRzWzNdID0gdmVydGljZXNbaSszXTtcbiAgICAgICAgICAgIHBvaW50c1s0XSA9IHZlcnRpY2VzW2krNF07XG4gICAgICAgICAgICBwb2ludHNbNV0gPSB2ZXJ0aWNlc1tpKzVdO1xuICAgICAgICAgICAgaWYgKHRlbXBQb2x5Z29uLmNvbnRhaW5zKHRlbXBQb2ludC54LCB0ZW1wUG9pbnQueSkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG59O1xuXG4vKipcbiAqIERpZmZlcmVudCBkcmF3aW5nIGJ1ZmZlciBtb2RlcyBzdXBwb3J0ZWRcbiAqXG4gKiBAc3RhdGljXG4gKiBAY29uc3RhbnRcbiAqIEBwcm9wZXJ0eSB7b2JqZWN0fSBEUkFXX01PREVTXG4gKiBAcHJvcGVydHkge251bWJlcn0gRFJBV19NT0RFUy5UUklBTkdMRV9NRVNIXG4gKiBAcHJvcGVydHkge251bWJlcn0gRFJBV19NT0RFUy5UUklBTkdMRVNcbiAqL1xuTWVzaC5EUkFXX01PREVTID0ge1xuICAgIFRSSUFOR0xFX01FU0g6IDAsXG4gICAgVFJJQU5HTEVTOiAxXG59O1xuIiwidmFyIE1lc2ggPSByZXF1aXJlKCcuL01lc2gnKTtcblxuLyoqXG4gKiBUaGUgUGxhbmUgYWxsb3dzIHlvdSB0byBkcmF3IGEgdGV4dHVyZSBhY3Jvc3Mgc2V2ZXJhbCBwb2ludHMgYW5kIHRoZW0gbWFuaXB1bGF0ZSB0aGVzZSBwb2ludHNcbiAqXG4gKmBgYGpzXG4gKiBmb3IgKHZhciBpID0gMDsgaSA8IDIwOyBpKyspIHtcbiAqICAgICBwb2ludHMucHVzaChuZXcgUElYSS5Qb2ludChpICogNTAsIDApKTtcbiAqIH07XG4gKiB2YXIgUGxhbmUgPSBuZXcgUElYSS5QbGFuZShQSVhJLlRleHR1cmUuZnJvbUltYWdlKFwic25ha2UucG5nXCIpLCBwb2ludHMpO1xuICogIGBgYFxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5tZXNoLk1lc2hcbiAqIEBtZW1iZXJvZiBQSVhJLm1lc2hcbiAqIEBwYXJhbSB7UElYSS5UZXh0dXJlfSB0ZXh0dXJlIC0gVGhlIHRleHR1cmUgdG8gdXNlIG9uIHRoZSBQbGFuZS5cbiAqIEBwYXJhbSB7aW50fSBzZWdtZW50c1ggLSBUaGUgbnVtYmVyIG94IHggc2VnbWVudHNcbiAqIEBwYXJhbSB7aW50fSBzZWdtZW50c1kgLSBUaGUgbnVtYmVyIG9mIHkgc2VnbWVudHNcbiAqXG4gKi9cbmZ1bmN0aW9uIFBsYW5lKHRleHR1cmUsIHNlZ21lbnRzWCwgc2VnbWVudHNZKVxue1xuICAgIE1lc2guY2FsbCh0aGlzLCB0ZXh0dXJlKTtcblxuICAgIC8qKlxuICAgICAqIFRyYWNrZXIgZm9yIGlmIHRoZSBQbGFuZSBpcyByZWFkeSB0byBiZSBkcmF3bi4gTmVlZGVkIGJlY2F1c2UgTWVzaCBjdG9yIGNhblxuICAgICAqIGNhbGwgX29uVGV4dHVyZVVwZGF0ZWQgd2hpY2ggY291bGQgY2FsbCByZWZyZXNoIHRvbyBlYXJseS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9yZWFkeSA9IHRydWU7XG5cbiAgICB0aGlzLnNlZ21lbnRzWCA9ICBzZWdtZW50c1ggfHwgMTA7XG4gICAgdGhpcy5zZWdtZW50c1kgPSBzZWdtZW50c1kgfHwgMTA7XG5cbiAgICB0aGlzLmRyYXdNb2RlID0gTWVzaC5EUkFXX01PREVTLlRSSUFOR0xFUztcbiAgICB0aGlzLnJlZnJlc2goKTtcblxufVxuXG5cbi8vIGNvbnN0cnVjdG9yXG5QbGFuZS5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKCBNZXNoLnByb3RvdHlwZSApO1xuUGxhbmUucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gUGxhbmU7XG5tb2R1bGUuZXhwb3J0cyA9IFBsYW5lO1xuXG4vKipcbiAqIFJlZnJlc2hlc1xuICpcbiAqL1xuUGxhbmUucHJvdG90eXBlLnJlZnJlc2ggPSBmdW5jdGlvbigpXG57XG4gICAgdmFyIHRvdGFsID0gdGhpcy5zZWdtZW50c1ggKiB0aGlzLnNlZ21lbnRzWTtcbiAgICB2YXIgdmVydHMgPSBbXTtcbiAgICB2YXIgY29sb3JzID0gW107XG4gICAgdmFyIHV2cyA9IFtdO1xuICAgIHZhciBpbmRpY2VzID0gW107XG4gICAgdmFyIHRleHR1cmUgPSB0aGlzLnRleHR1cmU7XG5cbiAgLy8gIHRleHR1cmUud2lkdGggPSA4MDAgdGV4dHVyZS53aWR0aCB8fCA4MDA7XG4gLy8gICB0ZXh0dXJlLmhlaWdodCA9IDgwMC8vdGV4dHVyZS5oZWlnaHQgfHwgODAwO1xuXG4gICAgdmFyIHNlZ21lbnRzWFN1YiA9IHRoaXMuc2VnbWVudHNYIC0gMTtcbiAgICB2YXIgc2VnbWVudHNZU3ViID0gdGhpcy5zZWdtZW50c1kgLSAxO1xuICAgIHZhciBpID0gMDtcblxuICAgIHZhciBzaXplWCA9IHRleHR1cmUud2lkdGggLyBzZWdtZW50c1hTdWI7XG4gICAgdmFyIHNpemVZID0gdGV4dHVyZS5oZWlnaHQgLyBzZWdtZW50c1lTdWI7XG5cbiAgICBmb3IgKGkgPSAwOyBpIDwgdG90YWw7IGkrKykge1xuXG4gICAgICAgIHZhciB4ID0gKGkgJSB0aGlzLnNlZ21lbnRzWCk7XG4gICAgICAgIHZhciB5ID0gKCAoaSAvIHRoaXMuc2VnbWVudHNYICkgfCAwICk7XG5cblxuICAgICAgICB2ZXJ0cy5wdXNoKCh4ICogc2l6ZVgpLFxuICAgICAgICAgICAgICAgICAgICh5ICogc2l6ZVkpKTtcblxuICAgICAgICAvLyB0aGlzIHdvcmtzIGZvciByZWN0YW5ndWxhciB0ZXh0dXJlcy4gXG4gICAgICAgIHV2cy5wdXNoKHRleHR1cmUuX3V2cy54MCArICh0ZXh0dXJlLl91dnMueDEgLSB0ZXh0dXJlLl91dnMueDApICogKHggLyAodGhpcy5zZWdtZW50c1gtMSkpLCB0ZXh0dXJlLl91dnMueTAgKyAodGV4dHVyZS5fdXZzLnkzLXRleHR1cmUuX3V2cy55MCkgKiAoeS8gKHRoaXMuc2VnbWVudHNZLTEpKSk7XG4gICAgICB9XG5cbiAgICAvLyAgY29uc1xuXG4gICAgdmFyIHRvdGFsU3ViID0gc2VnbWVudHNYU3ViICogc2VnbWVudHNZU3ViO1xuXG4gICAgZm9yIChpID0gMDsgaSA8IHRvdGFsU3ViOyBpKyspIHtcblxuICAgICAgICB2YXIgeHBvcyA9IGkgJSBzZWdtZW50c1hTdWI7XG4gICAgICAgIHZhciB5cG9zID0gKGkgLyBzZWdtZW50c1hTdWIgKSB8IDA7XG5cblxuICAgICAgICB2YXIgIHZhbHVlID0gKHlwb3MgKiB0aGlzLnNlZ21lbnRzWCkgKyB4cG9zO1xuICAgICAgICB2YXIgIHZhbHVlMiA9ICh5cG9zICogdGhpcy5zZWdtZW50c1gpICsgeHBvcyArIDE7XG4gICAgICAgIHZhciAgdmFsdWUzID0gKCh5cG9zKzEpICogdGhpcy5zZWdtZW50c1gpICsgeHBvcztcbiAgICAgICAgdmFyICB2YWx1ZTQgPSAoKHlwb3MrMSkgKiB0aGlzLnNlZ21lbnRzWCkgKyB4cG9zICsgMTtcblxuICAgICAgICBpbmRpY2VzLnB1c2godmFsdWUsIHZhbHVlMiwgdmFsdWUzKTtcbiAgICAgICAgaW5kaWNlcy5wdXNoKHZhbHVlMiwgdmFsdWU0LCB2YWx1ZTMpO1xuICAgIH1cblxuXG4gICAgLy9jb25zb2xlLmxvZyhpbmRpY2VzKVxuICAgIHRoaXMudmVydGljZXMgPSBuZXcgRmxvYXQzMkFycmF5KHZlcnRzKTtcbiAgICB0aGlzLnV2cyA9IG5ldyBGbG9hdDMyQXJyYXkodXZzKTtcbiAgICB0aGlzLmNvbG9ycyA9IG5ldyBGbG9hdDMyQXJyYXkoY29sb3JzKTtcbiAgICB0aGlzLmluZGljZXMgPSBuZXcgVWludDE2QXJyYXkoaW5kaWNlcyk7XG59O1xuXG4vKipcbiAqIENsZWFyIHRleHR1cmUgVVZzIHdoZW4gbmV3IHRleHR1cmUgaXMgc2V0XG4gKlxuICogQHByaXZhdGVcbiAqL1xuUGxhbmUucHJvdG90eXBlLl9vblRleHR1cmVVcGRhdGUgPSBmdW5jdGlvbiAoKVxue1xuICAgIE1lc2gucHJvdG90eXBlLl9vblRleHR1cmVVcGRhdGUuY2FsbCh0aGlzKTtcblxuICAgIC8vIHdhaXQgZm9yIHRoZSBQbGFuZSBjdG9yIHRvIGZpbmlzaCBiZWZvcmUgY2FsbGluZyByZWZyZXNoXG4gICAgaWYgKHRoaXMuX3JlYWR5KSB7XG4gICAgICAgIHRoaXMucmVmcmVzaCgpO1xuICAgIH1cbn07XG4iLCJ2YXIgTWVzaCA9IHJlcXVpcmUoJy4vTWVzaCcpO1xudmFyIGNvcmUgPSByZXF1aXJlKCcuLi9jb3JlJyk7XG5cbi8qKlxuICogVGhlIHJvcGUgYWxsb3dzIHlvdSB0byBkcmF3IGEgdGV4dHVyZSBhY3Jvc3Mgc2V2ZXJhbCBwb2ludHMgYW5kIHRoZW0gbWFuaXB1bGF0ZSB0aGVzZSBwb2ludHNcbiAqXG4gKmBgYGpzXG4gKiBmb3IgKHZhciBpID0gMDsgaSA8IDIwOyBpKyspIHtcbiAqICAgICBwb2ludHMucHVzaChuZXcgUElYSS5Qb2ludChpICogNTAsIDApKTtcbiAqIH07XG4gKiB2YXIgcm9wZSA9IG5ldyBQSVhJLlJvcGUoUElYSS5UZXh0dXJlLmZyb21JbWFnZShcInNuYWtlLnBuZ1wiKSwgcG9pbnRzKTtcbiAqICBgYGBcbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkubWVzaC5NZXNoXG4gKiBAbWVtYmVyb2YgUElYSS5tZXNoXG4gKiBAcGFyYW0ge1BJWEkuVGV4dHVyZX0gdGV4dHVyZSAtIFRoZSB0ZXh0dXJlIHRvIHVzZSBvbiB0aGUgcm9wZS5cbiAqIEBwYXJhbSB7UElYSS5Qb2ludFtdfSBwb2ludHMgLSBBbiBhcnJheSBvZiB7QGxpbmsgUElYSS5Qb2ludH0gb2JqZWN0cyB0byBjb25zdHJ1Y3QgdGhpcyByb3BlLlxuICpcbiAqL1xuZnVuY3Rpb24gUm9wZSh0ZXh0dXJlLCBwb2ludHMpXG57XG4gICAgTWVzaC5jYWxsKHRoaXMsIHRleHR1cmUpO1xuXG4gICAgLypcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlBvaW50W119IEFuIGFycmF5IG9mIHBvaW50cyB0aGF0IGRldGVybWluZSB0aGUgcm9wZVxuICAgICAqL1xuICAgIHRoaXMucG9pbnRzID0gcG9pbnRzO1xuXG4gICAgLypcbiAgICAgKiBAbWVtYmVyIHtGbG9hdDMyQXJyYXl9IEFuIGFycmF5IG9mIHZlcnRpY2VzIHVzZWQgdG8gY29uc3RydWN0IHRoaXMgcm9wZS5cbiAgICAgKi9cbiAgICB0aGlzLnZlcnRpY2VzID0gbmV3IEZsb2F0MzJBcnJheShwb2ludHMubGVuZ3RoICogNCk7XG5cbiAgICAvKlxuICAgICAqIEBtZW1iZXIge0Zsb2F0MzJBcnJheX0gVGhlIFdlYkdMIFV2cyBvZiB0aGUgcm9wZS5cbiAgICAgKi9cbiAgICB0aGlzLnV2cyA9IG5ldyBGbG9hdDMyQXJyYXkocG9pbnRzLmxlbmd0aCAqIDQpO1xuXG4gICAgLypcbiAgICAgKiBAbWVtYmVyIHtGbG9hdDMyQXJyYXl9IEFuIGFycmF5IGNvbnRhaW5pbmcgdGhlIGNvbG9yIGNvbXBvbmVudHNcbiAgICAgKi9cbiAgICB0aGlzLmNvbG9ycyA9IG5ldyBGbG9hdDMyQXJyYXkocG9pbnRzLmxlbmd0aCAqIDIpO1xuXG4gICAgLypcbiAgICAgKiBAbWVtYmVyIHtVaW50MTZBcnJheX0gQW4gYXJyYXkgY29udGFpbmluZyB0aGUgaW5kaWNlcyBvZiB0aGUgdmVydGljZXNcbiAgICAgKi9cbiAgICB0aGlzLmluZGljZXMgPSBuZXcgVWludDE2QXJyYXkocG9pbnRzLmxlbmd0aCAqIDIpO1xuXG4gICAgLyoqXG4gICAgICogVHJhY2tlciBmb3IgaWYgdGhlIHJvcGUgaXMgcmVhZHkgdG8gYmUgZHJhd24uIE5lZWRlZCBiZWNhdXNlIE1lc2ggY3RvciBjYW5cbiAgICAgKiBjYWxsIF9vblRleHR1cmVVcGRhdGVkIHdoaWNoIGNvdWxkIGNhbGwgcmVmcmVzaCB0b28gZWFybHkuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgIHRoaXMuX3JlYWR5ID0gdHJ1ZTtcblxuICAgICB0aGlzLnJlZnJlc2goKTtcbn1cblxuXG4vLyBjb25zdHJ1Y3RvclxuUm9wZS5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKE1lc2gucHJvdG90eXBlKTtcblJvcGUucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gUm9wZTtcbm1vZHVsZS5leHBvcnRzID0gUm9wZTtcblxuLyoqXG4gKiBSZWZyZXNoZXNcbiAqXG4gKi9cblJvcGUucHJvdG90eXBlLnJlZnJlc2ggPSBmdW5jdGlvbiAoKVxue1xuICAgIHZhciBwb2ludHMgPSB0aGlzLnBvaW50cztcblxuICAgIC8vIGlmIHRvbyBsaXR0bGUgcG9pbnRzLCBvciB0ZXh0dXJlIGhhc24ndCBnb3QgVVZzIHNldCB5ZXQganVzdCBtb3ZlIG9uLlxuICAgIGlmIChwb2ludHMubGVuZ3RoIDwgMSB8fCAhdGhpcy5fdGV4dHVyZS5fdXZzKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHZhciB1dnMgPSB0aGlzLnV2cztcblxuICAgIHZhciBpbmRpY2VzID0gdGhpcy5pbmRpY2VzO1xuICAgIHZhciBjb2xvcnMgPSB0aGlzLmNvbG9ycztcblxuICAgIHZhciB0ZXh0dXJlVXZzID0gdGhpcy5fdGV4dHVyZS5fdXZzO1xuICAgIHZhciBvZmZzZXQgPSBuZXcgY29yZS5Qb2ludCh0ZXh0dXJlVXZzLngwLCB0ZXh0dXJlVXZzLnkwKTtcbiAgICB2YXIgZmFjdG9yID0gbmV3IGNvcmUuUG9pbnQodGV4dHVyZVV2cy54MiAtIHRleHR1cmVVdnMueDAsIHRleHR1cmVVdnMueTIgLSB0ZXh0dXJlVXZzLnkwKTtcblxuICAgIHV2c1swXSA9IDAgKyBvZmZzZXQueDtcbiAgICB1dnNbMV0gPSAwICsgb2Zmc2V0Lnk7XG4gICAgdXZzWzJdID0gMCArIG9mZnNldC54O1xuICAgIHV2c1szXSA9IDEgKiBmYWN0b3IueSArIG9mZnNldC55O1xuXG4gICAgY29sb3JzWzBdID0gMTtcbiAgICBjb2xvcnNbMV0gPSAxO1xuXG4gICAgaW5kaWNlc1swXSA9IDA7XG4gICAgaW5kaWNlc1sxXSA9IDE7XG5cbiAgICB2YXIgdG90YWwgPSBwb2ludHMubGVuZ3RoLFxuICAgICAgICBwb2ludCwgaW5kZXgsIGFtb3VudDtcblxuICAgIGZvciAodmFyIGkgPSAxOyBpIDwgdG90YWw7IGkrKylcbiAgICB7XG4gICAgICAgIHBvaW50ID0gcG9pbnRzW2ldO1xuICAgICAgICBpbmRleCA9IGkgKiA0O1xuICAgICAgICAvLyB0aW1lIHRvIGRvIHNvbWUgc21hcnQgZHJhd2luZyFcbiAgICAgICAgYW1vdW50ID0gaSAvICh0b3RhbC0xKTtcblxuICAgICAgICB1dnNbaW5kZXhdID0gYW1vdW50ICogZmFjdG9yLnggKyBvZmZzZXQueDtcbiAgICAgICAgdXZzW2luZGV4KzFdID0gMCArIG9mZnNldC55O1xuXG4gICAgICAgIHV2c1tpbmRleCsyXSA9IGFtb3VudCAqIGZhY3Rvci54ICsgb2Zmc2V0Lng7XG4gICAgICAgIHV2c1tpbmRleCszXSA9IDEgKiBmYWN0b3IueSArIG9mZnNldC55O1xuXG4gICAgICAgIGluZGV4ID0gaSAqIDI7XG4gICAgICAgIGNvbG9yc1tpbmRleF0gPSAxO1xuICAgICAgICBjb2xvcnNbaW5kZXgrMV0gPSAxO1xuXG4gICAgICAgIGluZGV4ID0gaSAqIDI7XG4gICAgICAgIGluZGljZXNbaW5kZXhdID0gaW5kZXg7XG4gICAgICAgIGluZGljZXNbaW5kZXggKyAxXSA9IGluZGV4ICsgMTtcbiAgICB9XG5cbiAgICB0aGlzLmRpcnR5ID0gdHJ1ZTtcbn07XG5cbi8qKlxuICogQ2xlYXIgdGV4dHVyZSBVVnMgd2hlbiBuZXcgdGV4dHVyZSBpcyBzZXRcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5Sb3BlLnByb3RvdHlwZS5fb25UZXh0dXJlVXBkYXRlID0gZnVuY3Rpb24gKClcbntcbiAgICBNZXNoLnByb3RvdHlwZS5fb25UZXh0dXJlVXBkYXRlLmNhbGwodGhpcyk7XG5cbiAgICAvLyB3YWl0IGZvciB0aGUgUm9wZSBjdG9yIHRvIGZpbmlzaCBiZWZvcmUgY2FsbGluZyByZWZyZXNoXG4gICAgaWYgKHRoaXMuX3JlYWR5KSB7XG4gICAgICAgIHRoaXMucmVmcmVzaCgpO1xuICAgIH1cbn07XG5cbi8qKlxuICogVXBkYXRlcyB0aGUgb2JqZWN0IHRyYW5zZm9ybSBmb3IgcmVuZGVyaW5nXG4gKlxuICogQHByaXZhdGVcbiAqL1xuUm9wZS5wcm90b3R5cGUudXBkYXRlVHJhbnNmb3JtID0gZnVuY3Rpb24gKClcbntcbiAgICB2YXIgcG9pbnRzID0gdGhpcy5wb2ludHM7XG5cbiAgICBpZiAocG9pbnRzLmxlbmd0aCA8IDEpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFyIGxhc3RQb2ludCA9IHBvaW50c1swXTtcbiAgICB2YXIgbmV4dFBvaW50O1xuICAgIHZhciBwZXJwWCA9IDA7XG4gICAgdmFyIHBlcnBZID0gMDtcblxuICAgIC8vIHRoaXMuY291bnQgLT0gMC4yO1xuXG4gICAgdmFyIHZlcnRpY2VzID0gdGhpcy52ZXJ0aWNlcztcbiAgICB2YXIgdG90YWwgPSBwb2ludHMubGVuZ3RoLFxuICAgICAgICBwb2ludCwgaW5kZXgsIHJhdGlvLCBwZXJwTGVuZ3RoLCBudW07XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRvdGFsOyBpKyspXG4gICAge1xuICAgICAgICBwb2ludCA9IHBvaW50c1tpXTtcbiAgICAgICAgaW5kZXggPSBpICogNDtcblxuICAgICAgICBpZiAoaSA8IHBvaW50cy5sZW5ndGgtMSlcbiAgICAgICAge1xuICAgICAgICAgICAgbmV4dFBvaW50ID0gcG9pbnRzW2krMV07XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgICBuZXh0UG9pbnQgPSBwb2ludDtcbiAgICAgICAgfVxuXG4gICAgICAgIHBlcnBZID0gLShuZXh0UG9pbnQueCAtIGxhc3RQb2ludC54KTtcbiAgICAgICAgcGVycFggPSBuZXh0UG9pbnQueSAtIGxhc3RQb2ludC55O1xuXG4gICAgICAgIHJhdGlvID0gKDEgLSAoaSAvICh0b3RhbC0xKSkpICogMTA7XG5cbiAgICAgICAgaWYgKHJhdGlvID4gMSlcbiAgICAgICAge1xuICAgICAgICAgICAgcmF0aW8gPSAxO1xuICAgICAgICB9XG5cbiAgICAgICAgcGVycExlbmd0aCA9IE1hdGguc3FydChwZXJwWCAqIHBlcnBYICsgcGVycFkgKiBwZXJwWSk7XG4gICAgICAgIG51bSA9IHRoaXMuX3RleHR1cmUuaGVpZ2h0IC8gMjsgLy8oMjAgKyBNYXRoLmFicyhNYXRoLnNpbigoaSArIHRoaXMuY291bnQpICogMC4zKSAqIDUwKSApKiByYXRpbztcbiAgICAgICAgcGVycFggLz0gcGVycExlbmd0aDtcbiAgICAgICAgcGVycFkgLz0gcGVycExlbmd0aDtcblxuICAgICAgICBwZXJwWCAqPSBudW07XG4gICAgICAgIHBlcnBZICo9IG51bTtcblxuICAgICAgICB2ZXJ0aWNlc1tpbmRleF0gPSBwb2ludC54ICsgcGVycFg7XG4gICAgICAgIHZlcnRpY2VzW2luZGV4KzFdID0gcG9pbnQueSArIHBlcnBZO1xuICAgICAgICB2ZXJ0aWNlc1tpbmRleCsyXSA9IHBvaW50LnggLSBwZXJwWDtcbiAgICAgICAgdmVydGljZXNbaW5kZXgrM10gPSBwb2ludC55IC0gcGVycFk7XG5cbiAgICAgICAgbGFzdFBvaW50ID0gcG9pbnQ7XG4gICAgfVxuXG4gICAgdGhpcy5jb250YWluZXJVcGRhdGVUcmFuc2Zvcm0oKTtcbn07XG4iLCIvKipcbiAqIEBmaWxlICAgICAgICBNYWluIGV4cG9ydCBvZiB0aGUgUElYSSBleHRyYXMgbGlicmFyeVxuICogQGF1dGhvciAgICAgIE1hdCBHcm92ZXMgPG1hdEBnb29kYm95ZGlnaXRhbC5jb20+XG4gKiBAY29weXJpZ2h0ICAgMjAxMy0yMDE1IEdvb2RCb3lEaWdpdGFsXG4gKiBAbGljZW5zZSAgICAge0BsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9waXhpanMvcGl4aS5qcy9ibG9iL21hc3Rlci9MSUNFTlNFfE1JVCBMaWNlbnNlfVxuICovXG5cbi8qKlxuICogQG5hbWVzcGFjZSBQSVhJLm1lc2hcbiAqL1xubW9kdWxlLmV4cG9ydHMgPSB7XG4gICAgTWVzaDogICAgICAgICAgIHJlcXVpcmUoJy4vTWVzaCcpLFxuICAgIFBsYW5lOiAgICAgICAgICAgcmVxdWlyZSgnLi9QbGFuZScpLFxuICAgIFJvcGU6ICAgICAgICAgICByZXF1aXJlKCcuL1JvcGUnKSxcbiAgICBNZXNoUmVuZGVyZXI6ICAgcmVxdWlyZSgnLi93ZWJnbC9NZXNoUmVuZGVyZXInKSxcbiAgICBNZXNoU2hhZGVyOiAgICAgcmVxdWlyZSgnLi93ZWJnbC9NZXNoU2hhZGVyJylcbn07XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uLy4uL2NvcmUnKSxcbiAgICBNZXNoID0gcmVxdWlyZSgnLi4vTWVzaCcpO1xuXG4vKipcbiAqIEBhdXRob3IgTWF0IEdyb3Zlc1xuICpcbiAqIEJpZyB0aGFua3MgdG8gdGhlIHZlcnkgY2xldmVyIE1hdHQgRGVzTGF1cmllcnMgPG1hdHRkZXNsPiBodHRwczovL2dpdGh1Yi5jb20vbWF0dGRlc2wvXG4gKiBmb3IgY3JlYXRpbmcgdGhlIG9yaWdpbmFsIHBpeGkgdmVyc2lvbiFcbiAqIEFsc28gYSB0aGFua3MgdG8gaHR0cHM6Ly9naXRodWIuY29tL2JjaGV2YWxpZXIgZm9yIHR3ZWFraW5nIHRoZSB0aW50IGFuZCBhbHBoYSBzbyB0aGF0IHRoZXkgbm93IHNoYXJlIDQgYnl0ZXMgb24gdGhlIHZlcnRleCBidWZmZXJcbiAqXG4gKiBIZWF2aWx5IGluc3BpcmVkIGJ5IExpYkdEWCdzIE1lc2hSZW5kZXJlcjpcbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS9saWJnZHgvbGliZ2R4L2Jsb2IvbWFzdGVyL2dkeC9zcmMvY29tL2JhZGxvZ2ljL2dkeC9ncmFwaGljcy9nMmQvTWVzaFJlbmRlcmVyLmphdmFcbiAqL1xuXG4vKipcbiAqXG4gKiBAY2xhc3NcbiAqIEBwcml2YXRlXG4gKiBAbWVtYmVyb2YgUElYSS5tZXNoXG4gKiBAZXh0ZW5kcyBQSVhJLk9iamVjdFJlbmRlcmVyXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcn0gVGhlIHJlbmRlcmVyIHRoaXMgc3ByaXRlIGJhdGNoIHdvcmtzIGZvci5cbiAqL1xuZnVuY3Rpb24gTWVzaFJlbmRlcmVyKHJlbmRlcmVyKVxue1xuICAgIGNvcmUuT2JqZWN0UmVuZGVyZXIuY2FsbCh0aGlzLCByZW5kZXJlcik7XG5cblxuICAgIC8qKlxuICAgICAqIEhvbGRzIHRoZSBpbmRpY2VzXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtVaW50MTZBcnJheX1cbiAgICAgKi9cbiAgICBcbiAgICB0aGlzLmluZGljZXMgPSBuZXcgVWludDE2QXJyYXkoMTUwMDApO1xuXG4gICAgLy9UT0RPIHRoaXMgY291bGQgYmUgYSBzaW5nbGUgYnVmZmVyIHNoYXJlZCBhbW9uZ3N0IGFsbCByZW5kZXJlcnMgYXMgd2UgcmV1c2UgdGhpcyBzZXQgdXAgaW4gbW9zdCByZW5kZXJlcnNcbiAgICBmb3IgKHZhciBpPTAsIGo9MDsgaSA8IDE1MDAwOyBpICs9IDYsIGogKz0gNClcbiAgICB7XG4gICAgICAgIHRoaXMuaW5kaWNlc1tpICsgMF0gPSBqICsgMDtcbiAgICAgICAgdGhpcy5pbmRpY2VzW2kgKyAxXSA9IGogKyAxO1xuICAgICAgICB0aGlzLmluZGljZXNbaSArIDJdID0gaiArIDI7XG4gICAgICAgIHRoaXMuaW5kaWNlc1tpICsgM10gPSBqICsgMDtcbiAgICAgICAgdGhpcy5pbmRpY2VzW2kgKyA0XSA9IGogKyAyO1xuICAgICAgICB0aGlzLmluZGljZXNbaSArIDVdID0gaiArIDM7XG4gICAgfVxuXG4gICAgdGhpcy5jdXJyZW50U2hhZGVyID0gbnVsbDtcbn1cblxuTWVzaFJlbmRlcmVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoY29yZS5PYmplY3RSZW5kZXJlci5wcm90b3R5cGUpO1xuTWVzaFJlbmRlcmVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IE1lc2hSZW5kZXJlcjtcbm1vZHVsZS5leHBvcnRzID0gTWVzaFJlbmRlcmVyO1xuXG5jb3JlLldlYkdMUmVuZGVyZXIucmVnaXN0ZXJQbHVnaW4oJ21lc2gnLCBNZXNoUmVuZGVyZXIpO1xuXG4vKipcbiAqIFNldHMgdXAgdGhlIHJlbmRlcmVyIGNvbnRleHQgYW5kIG5lY2Vzc2FyeSBidWZmZXJzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0gZ2wge1dlYkdMUmVuZGVyaW5nQ29udGV4dH0gdGhlIGN1cnJlbnQgV2ViR0wgZHJhd2luZyBjb250ZXh0XG4gKi9cbk1lc2hSZW5kZXJlci5wcm90b3R5cGUub25Db250ZXh0Q2hhbmdlID0gZnVuY3Rpb24gKClcbntcblxufTtcblxuLyoqXG4gKiBSZW5kZXJzIHRoZSBzcHJpdGUgb2JqZWN0LlxuICpcbiAqIEBwYXJhbSBtZXNoIHtQSVhJLm1lc2guTWVzaH0gdGhlIG1lc2ggdG8gcmVuZGVyXG4gKi9cbk1lc2hSZW5kZXJlci5wcm90b3R5cGUucmVuZGVyID0gZnVuY3Rpb24gKG1lc2gpXG57XG4gICAgaWYoIW1lc2guX3ZlcnRleEJ1ZmZlcilcbiAgICB7XG4gICAgICAgIHRoaXMuX2luaXRXZWJHTChtZXNoKTtcbiAgICB9XG5cbiAgICB2YXIgcmVuZGVyZXIgPSB0aGlzLnJlbmRlcmVyLFxuICAgICAgICBnbCA9IHJlbmRlcmVyLmdsLFxuICAgICAgICB0ZXh0dXJlID0gbWVzaC5fdGV4dHVyZS5iYXNlVGV4dHVyZSxcbiAgICAgICAgc2hhZGVyID0gbWVzaC5zaGFkZXI7Ly8gfHwgcmVuZGVyZXIuc2hhZGVyTWFuYWdlci5wbHVnaW5zLm1lc2hTaGFkZXI7XG5cbiAgICB2YXIgZHJhd01vZGUgPSBtZXNoLmRyYXdNb2RlID09PSBNZXNoLkRSQVdfTU9ERVMuVFJJQU5HTEVfTUVTSCA/IGdsLlRSSUFOR0xFX1NUUklQIDogZ2wuVFJJQU5HTEVTO1xuXG4gICAgcmVuZGVyZXIuYmxlbmRNb2RlTWFuYWdlci5zZXRCbGVuZE1vZGUobWVzaC5ibGVuZE1vZGUpO1xuXG4gICAgLy9UT0RPIGNhY2hlIGN1c3RvbSBzdGF0ZS4uXG4gICAgaWYgKCFzaGFkZXIpXG4gICAge1xuICAgICAgICBzaGFkZXIgPSByZW5kZXJlci5zaGFkZXJNYW5hZ2VyLnBsdWdpbnMubWVzaFNoYWRlcjtcbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgc2hhZGVyID0gc2hhZGVyLnNoYWRlcnNbZ2wuaWRdIHx8IHNoYWRlci5nZXRTaGFkZXIocmVuZGVyZXIpOy8vIDogc2hhZGVyO1xuICAgIH1cblxuICAgIHRoaXMucmVuZGVyZXIuc2hhZGVyTWFuYWdlci5zZXRTaGFkZXIoc2hhZGVyKTtcblxuICAgIHNoYWRlci51bmlmb3Jtcy50cmFuc2xhdGlvbk1hdHJpeC52YWx1ZSA9IG1lc2gud29ybGRUcmFuc2Zvcm0udG9BcnJheSh0cnVlKTtcbiAgICBzaGFkZXIudW5pZm9ybXMucHJvamVjdGlvbk1hdHJpeC52YWx1ZSA9IHJlbmRlcmVyLmN1cnJlbnRSZW5kZXJUYXJnZXQucHJvamVjdGlvbk1hdHJpeC50b0FycmF5KHRydWUpO1xuICAgIHNoYWRlci51bmlmb3Jtcy5hbHBoYS52YWx1ZSA9IG1lc2gud29ybGRBbHBoYTtcblxuICAgIHNoYWRlci5zeW5jVW5pZm9ybXMoKTtcblxuICAgIGlmICghbWVzaC5kaXJ0eSlcbiAgICB7XG5cbiAgICAgICAgZ2wuYmluZEJ1ZmZlcihnbC5BUlJBWV9CVUZGRVIsIG1lc2guX3ZlcnRleEJ1ZmZlcik7XG4gICAgICAgIGdsLmJ1ZmZlclN1YkRhdGEoZ2wuQVJSQVlfQlVGRkVSLCAwLCBtZXNoLnZlcnRpY2VzKTtcbiAgICAgICAgZ2wudmVydGV4QXR0cmliUG9pbnRlcihzaGFkZXIuYXR0cmlidXRlcy5hVmVydGV4UG9zaXRpb24sIDIsIGdsLkZMT0FULCBmYWxzZSwgMCwgMCk7XG5cbiAgICAgICAgLy8gdXBkYXRlIHRoZSB1dnNcbiAgICAgICAgZ2wuYmluZEJ1ZmZlcihnbC5BUlJBWV9CVUZGRVIsIG1lc2guX3V2QnVmZmVyKTtcbiAgICAgICAgZ2wudmVydGV4QXR0cmliUG9pbnRlcihzaGFkZXIuYXR0cmlidXRlcy5hVGV4dHVyZUNvb3JkLCAyLCBnbC5GTE9BVCwgZmFsc2UsIDAsIDApO1xuXG5cbiAgICAgICAgZ2wuYWN0aXZlVGV4dHVyZShnbC5URVhUVVJFMCk7XG5cbiAgICAgICBpZiAoIXRleHR1cmUuX2dsVGV4dHVyZXNbZ2wuaWRdKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnJlbmRlcmVyLnVwZGF0ZVRleHR1cmUodGV4dHVyZSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgICAvLyBiaW5kIHRoZSBjdXJyZW50IHRleHR1cmVcbiAgICAgICAgICAgIGdsLmJpbmRUZXh0dXJlKGdsLlRFWFRVUkVfMkQsIHRleHR1cmUuX2dsVGV4dHVyZXNbZ2wuaWRdKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGdsLmJpbmRCdWZmZXIoZ2wuRUxFTUVOVF9BUlJBWV9CVUZGRVIsIG1lc2guX2luZGV4QnVmZmVyKTtcbiAgICAgICAgZ2wuYnVmZmVyU3ViRGF0YShnbC5FTEVNRU5UX0FSUkFZX0JVRkZFUiwgMCwgbWVzaC5pbmRpY2VzKTtcbiAgICB9XG4gICAgZWxzZVxuICAgIHtcblxuICAgICAgICBtZXNoLmRpcnR5ID0gZmFsc2U7XG4gICAgICAgIGdsLmJpbmRCdWZmZXIoZ2wuQVJSQVlfQlVGRkVSLCBtZXNoLl92ZXJ0ZXhCdWZmZXIpO1xuICAgICAgICBnbC5idWZmZXJEYXRhKGdsLkFSUkFZX0JVRkZFUiwgbWVzaC52ZXJ0aWNlcywgZ2wuU1RBVElDX0RSQVcpO1xuICAgICAgICBnbC52ZXJ0ZXhBdHRyaWJQb2ludGVyKHNoYWRlci5hdHRyaWJ1dGVzLmFWZXJ0ZXhQb3NpdGlvbiwgMiwgZ2wuRkxPQVQsIGZhbHNlLCAwLCAwKTtcblxuICAgICAgICAvLyB1cGRhdGUgdGhlIHV2c1xuICAgICAgICBnbC5iaW5kQnVmZmVyKGdsLkFSUkFZX0JVRkZFUiwgbWVzaC5fdXZCdWZmZXIpO1xuICAgICAgICBnbC5idWZmZXJEYXRhKGdsLkFSUkFZX0JVRkZFUiwgbWVzaC51dnMsIGdsLlNUQVRJQ19EUkFXKTtcbiAgICAgICAgZ2wudmVydGV4QXR0cmliUG9pbnRlcihzaGFkZXIuYXR0cmlidXRlcy5hVGV4dHVyZUNvb3JkLCAyLCBnbC5GTE9BVCwgZmFsc2UsIDAsIDApO1xuXG4gICAgICAgICBnbC5hY3RpdmVUZXh0dXJlKGdsLlRFWFRVUkUwKTtcblxuICAgICAgICBpZiAoIXRleHR1cmUuX2dsVGV4dHVyZXNbZ2wuaWRdKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnJlbmRlcmVyLnVwZGF0ZVRleHR1cmUodGV4dHVyZSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgICAvLyBiaW5kIHRoZSBjdXJyZW50IHRleHR1cmVcbiAgICAgICAgICAgIGdsLmJpbmRUZXh0dXJlKGdsLlRFWFRVUkVfMkQsIHRleHR1cmUuX2dsVGV4dHVyZXNbZ2wuaWRdKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGRvbnQgbmVlZCB0byB1cGxvYWQhXG4gICAgICAgIGdsLmJpbmRCdWZmZXIoZ2wuRUxFTUVOVF9BUlJBWV9CVUZGRVIsIG1lc2guX2luZGV4QnVmZmVyKTtcbiAgICAgICAgZ2wuYnVmZmVyRGF0YShnbC5FTEVNRU5UX0FSUkFZX0JVRkZFUiwgbWVzaC5pbmRpY2VzLCBnbC5TVEFUSUNfRFJBVyk7XG5cbiAgICB9XG5cbiAgICBnbC5kcmF3RWxlbWVudHMoZHJhd01vZGUsIG1lc2guaW5kaWNlcy5sZW5ndGgsIGdsLlVOU0lHTkVEX1NIT1JULCAwKTtcblxufTtcblxuLyoqXG4gKiBQcmVwYXJlcyBhbGwgdGhlIGJ1ZmZlcnMgdG8gcmVuZGVyIHRoaXMgbWVzaFxuICogQHBhcmFtIG1lc2gge1BJWEkubWVzaC5NZXNofSB0aGUgbWVzaCB0byByZW5kZXJcbiAqL1xuTWVzaFJlbmRlcmVyLnByb3RvdHlwZS5faW5pdFdlYkdMID0gZnVuY3Rpb24gKG1lc2gpXG57XG4gICAgLy8gYnVpbGQgdGhlIHN0cmlwIVxuICAgIHZhciBnbCA9IHRoaXMucmVuZGVyZXIuZ2w7XG5cbiAgICBtZXNoLl92ZXJ0ZXhCdWZmZXIgPSBnbC5jcmVhdGVCdWZmZXIoKTtcbiAgICBtZXNoLl9pbmRleEJ1ZmZlciA9IGdsLmNyZWF0ZUJ1ZmZlcigpO1xuICAgIG1lc2guX3V2QnVmZmVyID0gZ2wuY3JlYXRlQnVmZmVyKCk7XG5cblxuXG4gICAgZ2wuYmluZEJ1ZmZlcihnbC5BUlJBWV9CVUZGRVIsIG1lc2guX3ZlcnRleEJ1ZmZlcik7XG4gICAgZ2wuYnVmZmVyRGF0YShnbC5BUlJBWV9CVUZGRVIsIG1lc2gudmVydGljZXMsIGdsLkRZTkFNSUNfRFJBVyk7XG5cbiAgICBnbC5iaW5kQnVmZmVyKGdsLkFSUkFZX0JVRkZFUiwgbWVzaC5fdXZCdWZmZXIpO1xuICAgIGdsLmJ1ZmZlckRhdGEoZ2wuQVJSQVlfQlVGRkVSLCAgbWVzaC51dnMsIGdsLlNUQVRJQ19EUkFXKTtcblxuICAgIGlmKG1lc2guY29sb3JzKXtcbiAgICAgICAgbWVzaC5fY29sb3JCdWZmZXIgPSBnbC5jcmVhdGVCdWZmZXIoKTtcbiAgICAgICAgZ2wuYmluZEJ1ZmZlcihnbC5BUlJBWV9CVUZGRVIsIG1lc2guX2NvbG9yQnVmZmVyKTtcbiAgICAgICAgZ2wuYnVmZmVyRGF0YShnbC5BUlJBWV9CVUZGRVIsIG1lc2guY29sb3JzLCBnbC5TVEFUSUNfRFJBVyk7XG4gICAgfVxuXG4gICAgZ2wuYmluZEJ1ZmZlcihnbC5FTEVNRU5UX0FSUkFZX0JVRkZFUiwgbWVzaC5faW5kZXhCdWZmZXIpO1xuICAgIGdsLmJ1ZmZlckRhdGEoZ2wuRUxFTUVOVF9BUlJBWV9CVUZGRVIsIG1lc2guaW5kaWNlcywgZ2wuU1RBVElDX0RSQVcpO1xufTtcblxuXG4vKipcbiAqIEVtcHRpZXMgdGhlIGN1cnJlbnQgYmF0Y2guXG4gKlxuICovXG5NZXNoUmVuZGVyZXIucHJvdG90eXBlLmZsdXNoID0gZnVuY3Rpb24gKClcbntcblxufTtcblxuLyoqXG4gKiBTdGFydHMgYSBuZXcgbWVzaCByZW5kZXJlci5cbiAqXG4gKi9cbk1lc2hSZW5kZXJlci5wcm90b3R5cGUuc3RhcnQgPSBmdW5jdGlvbiAoKVxue1xuICAgIFxuXG4gICAgdGhpcy5jdXJyZW50U2hhZGVyID0gbnVsbDtcbn07XG5cbi8qKlxuICogRGVzdHJveXMgdGhlIE1lc2ggcmVuZGVyZXJcbiAqXG4gKi9cbk1lc2hSZW5kZXJlci5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uICgpXG57XG4gICAgY29yZS5PYmplY3RSZW5kZXJlci5wcm90b3R5cGUuZGVzdHJveS5jYWxsKHRoaXMpO1xufTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vLi4vY29yZScpO1xuXG4vKipcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5TaGFkZXJcbiAqIEBtZW1iZXJvZiBQSVhJLm1lc2hcbiAqIEBwYXJhbSBzaGFkZXJNYW5hZ2VyIHtQSVhJLlNoYWRlck1hbmFnZXJ9IFRoZSBXZWJHTCBzaGFkZXIgbWFuYWdlciB0aGlzIHNoYWRlciB3b3JrcyBmb3IuXG4gKi9cbmZ1bmN0aW9uIE1lc2hTaGFkZXIoc2hhZGVyTWFuYWdlcilcbntcbiAgICBjb3JlLlNoYWRlci5jYWxsKHRoaXMsXG4gICAgICAgIHNoYWRlck1hbmFnZXIsXG4gICAgICAgIC8vIHZlcnRleCBzaGFkZXJcbiAgICAgICAgW1xuICAgICAgICAgICAgJ3ByZWNpc2lvbiBsb3dwIGZsb2F0OycsXG4gICAgICAgICAgICAnYXR0cmlidXRlIHZlYzIgYVZlcnRleFBvc2l0aW9uOycsXG4gICAgICAgICAgICAnYXR0cmlidXRlIHZlYzIgYVRleHR1cmVDb29yZDsnLFxuXG4gICAgICAgICAgICAndW5pZm9ybSBtYXQzIHRyYW5zbGF0aW9uTWF0cml4OycsXG4gICAgICAgICAgICAndW5pZm9ybSBtYXQzIHByb2plY3Rpb25NYXRyaXg7JyxcblxuICAgICAgICAgICAgJ3ZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkOycsXG5cbiAgICAgICAgICAgICd2b2lkIG1haW4odm9pZCl7JyxcbiAgICAgICAgICAgICcgICBnbF9Qb3NpdGlvbiA9IHZlYzQoKHByb2plY3Rpb25NYXRyaXggKiB0cmFuc2xhdGlvbk1hdHJpeCAqIHZlYzMoYVZlcnRleFBvc2l0aW9uLCAxLjApKS54eSwgMC4wLCAxLjApOycsXG4gICAgICAgICAgICAnICAgdlRleHR1cmVDb29yZCA9IGFUZXh0dXJlQ29vcmQ7JyxcbiAgICAgICAgICAgICd9J1xuICAgICAgICBdLmpvaW4oJ1xcbicpLFxuICAgICAgICBbXG4gICAgICAgICAgICAncHJlY2lzaW9uIGxvd3AgZmxvYXQ7JyxcblxuICAgICAgICAgICAgJ3ZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkOycsXG4gICAgICAgICAgICAndW5pZm9ybSBmbG9hdCBhbHBoYTsnLFxuXG4gICAgICAgICAgICAndW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXI7JyxcblxuICAgICAgICAgICAgJ3ZvaWQgbWFpbih2b2lkKXsnLFxuICAgICAgICAgICAgJyAgIGdsX0ZyYWdDb2xvciA9IHRleHR1cmUyRCh1U2FtcGxlciwgdlRleHR1cmVDb29yZCkgKiBhbHBoYSA7JyxcbiAgICAgICAgICAgICd9J1xuICAgICAgICBdLmpvaW4oJ1xcbicpLFxuICAgICAgICAvLyBjdXN0b20gdW5pZm9ybXNcbiAgICAgICAge1xuICAgICAgICAgICAgYWxwaGE6ICB7IHR5cGU6ICcxZicsIHZhbHVlOiAwIH0sXG4gICAgICAgICAgICB0cmFuc2xhdGlvbk1hdHJpeDogeyB0eXBlOiAnbWF0MycsIHZhbHVlOiBuZXcgRmxvYXQzMkFycmF5KDkpIH0sXG4gICAgICAgICAgICBwcm9qZWN0aW9uTWF0cml4OiB7IHR5cGU6ICdtYXQzJywgdmFsdWU6IG5ldyBGbG9hdDMyQXJyYXkoOSkgfVxuICAgICAgICB9LFxuICAgICAgICAvLyBjdXN0b20gYXR0cmlidXRlc1xuICAgICAgICB7XG4gICAgICAgICAgICBhVmVydGV4UG9zaXRpb246MCxcbiAgICAgICAgICAgIGFUZXh0dXJlQ29vcmQ6MFxuICAgICAgICB9XG4gICAgKTtcbn1cblxuTWVzaFNoYWRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuU2hhZGVyLnByb3RvdHlwZSk7XG5NZXNoU2hhZGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IE1lc2hTaGFkZXI7XG5tb2R1bGUuZXhwb3J0cyA9IE1lc2hTaGFkZXI7XG5cbmNvcmUuU2hhZGVyTWFuYWdlci5yZWdpc3RlclBsdWdpbignbWVzaFNoYWRlcicsIE1lc2hTaGFkZXIpO1xuIiwiLy8gUmVmZXJlbmNlczpcbi8vIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0phdmFTY3JpcHQvUmVmZXJlbmNlL0dsb2JhbF9PYmplY3RzL01hdGgvc2lnblxuXG5pZiAoIU1hdGguc2lnbilcbntcbiAgICBNYXRoLnNpZ24gPSBmdW5jdGlvbiAoeCkge1xuICAgICAgICB4ID0gK3g7XG4gICAgICAgIGlmICh4ID09PSAwIHx8IGlzTmFOKHgpKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4geDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4geCA+IDAgPyAxIDogLTE7XG4gICAgfTtcbn1cbiIsIi8vIFJlZmVyZW5jZXM6XG4vLyBodHRwczovL2dpdGh1Yi5jb20vc2luZHJlc29yaHVzL29iamVjdC1hc3NpZ25cbi8vIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0phdmFTY3JpcHQvUmVmZXJlbmNlL0dsb2JhbF9PYmplY3RzL09iamVjdC9hc3NpZ25cblxuaWYgKCFPYmplY3QuYXNzaWduKVxue1xuICAgIE9iamVjdC5hc3NpZ24gPSByZXF1aXJlKCdvYmplY3QtYXNzaWduJyk7XG59XG4iLCJyZXF1aXJlKCcuL09iamVjdC5hc3NpZ24nKTtcbnJlcXVpcmUoJy4vcmVxdWVzdEFuaW1hdGlvbkZyYW1lJyk7XG5yZXF1aXJlKCcuL01hdGguc2lnbicpO1xuIiwiLy8gUmVmZXJlbmNlczpcbi8vIGh0dHA6Ly9wYXVsaXJpc2guY29tLzIwMTEvcmVxdWVzdGFuaW1hdGlvbmZyYW1lLWZvci1zbWFydC1hbmltYXRpbmcvXG4vLyBodHRwczovL2dpc3QuZ2l0aHViLmNvbS8xNTc5NjcxXG4vLyBodHRwOi8vdXBkYXRlcy5odG1sNXJvY2tzLmNvbS8yMDEyLzA1L3JlcXVlc3RBbmltYXRpb25GcmFtZS1BUEktbm93LXdpdGgtc3ViLW1pbGxpc2Vjb25kLXByZWNpc2lvblxuLy8gaHR0cHM6Ly9naXN0LmdpdGh1Yi5jb20vdGltaGFsbC80MDc4NjE0XG4vLyBodHRwczovL2dpdGh1Yi5jb20vRmluYW5jaWFsLVRpbWVzL3BvbHlmaWxsLXNlcnZpY2UvdHJlZS9tYXN0ZXIvcG9seWZpbGxzL3JlcXVlc3RBbmltYXRpb25GcmFtZVxuXG4vLyBFeHBlY3RlZCB0byBiZSB1c2VkIHdpdGggQnJvd3NlcmZpeVxuLy8gQnJvd3NlcmlmeSBhdXRvbWF0aWNhbGx5IGRldGVjdHMgdGhlIHVzZSBvZiBgZ2xvYmFsYCBhbmQgcGFzc2VzIHRoZVxuLy8gY29ycmVjdCByZWZlcmVuY2Ugb2YgYGdsb2JhbGAsIGBzZWxmYCwgYW5kIGZpbmFsbHkgYHdpbmRvd2BcblxuLy8gRGF0ZS5ub3dcbmlmICghKERhdGUubm93ICYmIERhdGUucHJvdG90eXBlLmdldFRpbWUpKSB7XG4gICAgRGF0ZS5ub3cgPSBmdW5jdGlvbiBub3coKSB7XG4gICAgICAgIHJldHVybiBuZXcgRGF0ZSgpLmdldFRpbWUoKTtcbiAgICB9O1xufVxuXG4vLyBwZXJmb3JtYW5jZS5ub3dcbmlmICghKGdsb2JhbC5wZXJmb3JtYW5jZSAmJiBnbG9iYWwucGVyZm9ybWFuY2Uubm93KSkge1xuICAgIHZhciBzdGFydFRpbWUgPSBEYXRlLm5vdygpO1xuICAgIGlmICghZ2xvYmFsLnBlcmZvcm1hbmNlKSB7XG4gICAgICAgIGdsb2JhbC5wZXJmb3JtYW5jZSA9IHt9O1xuICAgIH1cbiAgICBnbG9iYWwucGVyZm9ybWFuY2Uubm93ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gRGF0ZS5ub3coKSAtIHN0YXJ0VGltZTtcbiAgICB9O1xufVxuXG4vLyByZXF1ZXN0QW5pbWF0aW9uRnJhbWVcbnZhciBsYXN0VGltZSA9IERhdGUubm93KCk7XG52YXIgdmVuZG9ycyA9IFsnbXMnLCAnbW96JywgJ3dlYmtpdCcsICdvJ107XG5cbmZvcih2YXIgeCA9IDA7IHggPCB2ZW5kb3JzLmxlbmd0aCAmJiAhZ2xvYmFsLnJlcXVlc3RBbmltYXRpb25GcmFtZTsgKyt4KSB7XG4gICAgZ2xvYmFsLnJlcXVlc3RBbmltYXRpb25GcmFtZSA9IGdsb2JhbFt2ZW5kb3JzW3hdICsgJ1JlcXVlc3RBbmltYXRpb25GcmFtZSddO1xuICAgIGdsb2JhbC5jYW5jZWxBbmltYXRpb25GcmFtZSA9IGdsb2JhbFt2ZW5kb3JzW3hdICsgJ0NhbmNlbEFuaW1hdGlvbkZyYW1lJ10gfHxcbiAgICAgICAgZ2xvYmFsW3ZlbmRvcnNbeF0gKyAnQ2FuY2VsUmVxdWVzdEFuaW1hdGlvbkZyYW1lJ107XG59XG5cbmlmICghZ2xvYmFsLnJlcXVlc3RBbmltYXRpb25GcmFtZSkge1xuICAgIGdsb2JhbC5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUgPSBmdW5jdGlvbiAoY2FsbGJhY2spIHtcbiAgICAgICAgaWYgKHR5cGVvZiBjYWxsYmFjayAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihjYWxsYmFjayArICdpcyBub3QgYSBmdW5jdGlvbicpO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGN1cnJlbnRUaW1lID0gRGF0ZS5ub3coKSxcbiAgICAgICAgICAgIGRlbGF5ID0gMTYgKyBsYXN0VGltZSAtIGN1cnJlbnRUaW1lO1xuXG4gICAgICAgIGlmIChkZWxheSA8IDApIHtcbiAgICAgICAgICAgIGRlbGF5ID0gMDtcbiAgICAgICAgfVxuXG4gICAgICAgIGxhc3RUaW1lID0gY3VycmVudFRpbWU7XG5cbiAgICAgICAgcmV0dXJuIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgbGFzdFRpbWUgPSBEYXRlLm5vdygpO1xuICAgICAgICAgICAgY2FsbGJhY2socGVyZm9ybWFuY2Uubm93KCkpO1xuICAgICAgICB9LCBkZWxheSk7XG4gICAgfTtcbn1cblxuaWYgKCFnbG9iYWwuY2FuY2VsQW5pbWF0aW9uRnJhbWUpIHtcbiAgICBnbG9iYWwuY2FuY2VsQW5pbWF0aW9uRnJhbWUgPSBmdW5jdGlvbihpZCkge1xuICAgICAgICBjbGVhclRpbWVvdXQoaWQpO1xuICAgIH07XG59XG4iXX0= //# sourceMappingURL=pixi.js.map diff --git a/bin/pixi.min.js b/bin/pixi.min.js index f7a788e..d59cd98 100644 --- a/bin/pixi.min.js +++ b/bin/pixi.min.js @@ -1,11 +1,11 @@ -!function(t){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=t();else if("function"==typeof define&&define.amd)define([],t);else{var e;e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:this,e.PIXI=t()}}(function(){var t;return function e(t,r,i){function n(s,a){if(!r[s]){if(!t[s]){var h="function"==typeof require&&require;if(!a&&h)return h(s,!0);if(o)return o(s,!0);var u=new Error("Cannot find module '"+s+"'");throw u.code="MODULE_NOT_FOUND",u}var l=r[s]={exports:{}};t[s][0].call(l.exports,function(e){var r=t[s][1][e];return n(r?r:e)},l,l.exports,e,t,r,i)}return r[s].exports}for(var o="function"==typeof require&&require,s=0;s=t.byteLength?i.bufferSubData(this.type,e,t):i.bufferData(this.type,t,this.drawType),this.data=t},n.prototype.bind=function(){var t=this.gl;t.bindBuffer(this.type,this.buffer)},n.createVertexBuffer=function(t,e,r){return new n(t,t.ARRAY_BUFFER,e,r)},n.createIndexBuffer=function(t,e,r){return new n(t,t.ELEMENT_ARRAY_BUFFER,e,r)},n.create=function(t,e,r,i){return new n(t,e,i)},e.exports=n},{}],3:[function(t,e,r){var i=t("./GLTexture"),n=function(t,e,r){this.gl=t,this.framebuffer=t.createFramebuffer(),this.stencil=null,this.texture=null,this.width=e||100,this.height=r||100};n.prototype.enableTexture=function(t){var e=this.gl;this.texture=t||new i(e),this.texture.bind(),this.bind(),e.framebufferTexture2D(e.FRAMEBUFFER,e.COLOR_ATTACHMENT0,e.TEXTURE_2D,this.texture.texture,0)},n.prototype.enableStencil=function(){if(!this.stencil){var t=this.gl;this.stencil=t.createRenderbuffer(),t.bindRenderbuffer(t.RENDERBUFFER,this.stencil),t.framebufferRenderbuffer(t.FRAMEBUFFER,t.DEPTH_STENCIL_ATTACHMENT,t.RENDERBUFFER,this.stencil),t.renderbufferStorage(t.RENDERBUFFER,t.DEPTH_STENCIL,this.width,this.height)}},n.prototype.clear=function(t,e,r,i){this.bind();var n=this.gl;n.clearColor(t,e,r,i),n.clear(n.COLOR_BUFFER_BIT)},n.prototype.bind=function(){var t=this.gl;t.bindFramebuffer(t.FRAMEBUFFER,this.framebuffer)},n.prototype.unbind=function(){gl.bindFramebuffer(gl.FRAMEBUFFER,null)},n.prototype.resize=function(t,e){var r=this.gl;this.width=t,this.height=e,this.texture&&(this.texture.bind(),r.texImage2D(r.TEXTURE_2D,0,this.format,t,e,0,this.format,this.type,null)),this.stencil&&(r.bindRenderbuffer(r.RENDERBUFFER,this.stencil),r.renderbufferStorage(r.RENDERBUFFER,r.DEPTH_STENCIL,t,e))},n.prototype.destroy=function(){var t=this.gl;t.deleteFramebuffer(this.framebuffer)},n.createRGBA=function(t,e,r,o){var s=new i(t,e,r);s.enableNearestScaling(),s.enableWrapClamp(),t.texImage2D(t.TEXTURE_2D,0,t.RGBA,e,r,0,t.RGBA,t.UNSIGNED_BYTE,o);var a=new n(t,e,r);return a.enableTexture(s),a},n.createFloat32=function(t,e,r,o){var s=new i.fromData(t,o,e,r);s.enableNearestScaling(),s.enableWrapClamp();var a=new n(t,e,r);return a.enableTexture(s),a},e.exports=n},{"./GLTexture":5}],4:[function(t,e,r){var i=t("./shader/compileProgram"),n=t("./shader/extractAttributes"),o=t("./shader/extractUniforms"),s=t("./shader/generateUniformAccessObject"),a=function(t,e,r){this.gl=t,this.program=i(t,e,r),this.attributes=n(t,this.program);var a=o(t,this.program);this.uniforms=s(t,a)};a.prototype.bind=function(){this.gl.useProgram(this.program)},a.prototype.destroy=function(){this.gl},e.exports=a},{"./shader/compileProgram":9,"./shader/extractAttributes":11,"./shader/extractUniforms":12,"./shader/generateUniformAccessObject":13}],5:[function(t,e,r){var i=function(t,e,r,i,n){this.gl=t,this.texture=t.createTexture(),this.mipmap=!1,this.premultiplyAlpha=!1,this.width=e||0,this.height=r||0,this.format=i||t.RGBA,this.type=n||t.UNSIGNED_BYTE};i.prototype.upload=function(t){this.bind();var e=this.gl;this.width=t.width,this.height=t.height,e.pixelStorei(e.UNPACK_PREMULTIPLY_ALPHA_WEBGL,this.premultiplyAlpha),e.texImage2D(e.TEXTURE_2D,0,this.format,this.format,this.type,t)};var n=!1;i.prototype.uploadData=function(t,e,r){if(this.bind(),this.width=e||this.width,this.height=r||this.height,t instanceof Float32Array){if(!n){var i=gl.getExtension("OES_texture_float");if(!i)throw new Error("floating point textures not available");n=!0}this.type=gl.FLOAT}else this.type=gl.UNSIGNED_BYTE;gl.pixelStorei(gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL,this.premultiplyAlpha),gl.texImage2D(gl.TEXTURE_2D,0,this.format,this.width,this.height,0,this.format,this.type,t)},i.prototype.bind=function(t){var e=this.gl;void 0!==t&&e.activeTexture(e.TEXTURE0+t),e.bindTexture(e.TEXTURE_2D,this.texture)},i.prototype.unbind=function(){var t=this.gl;t.bindTexture(t.TEXTURE_2D,null)},i.prototype.minFilter=function(t){var e=this.gl;this.bind(),this.mipmap?e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MIN_FILTER,t?e.LINEAR_MIPMAP_LINEAR:e.NEAREST_MIPMAP_NEAREST):e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MIN_FILTER,t?e.LINEAR:e.NEAREST)},i.prototype.magFilter=function(t){var e=this.gl;this.bind(),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MAG_FILTER,t?e.LINEAR:e.NEAREST)},i.prototype.enableMipmap=function(){this.bind(),this.mipmap=!0,gl.generateMipmap(gl.TEXTURE_2D)},i.prototype.enableLinearScaling=function(){this.minFilter(!0),this.magFilter(!0)},i.prototype.enableNearestScaling=function(){this.minFilter(!1),this.magFilter(!1)},i.prototype.enableWrapClamp=function(){var t=this.gl;this.bind(),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_WRAP_S,t.CLAMP_TO_EDGE),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_WRAP_T,t.CLAMP_TO_EDGE)},i.prototype.enableWrapRepeat=function(){var t=this.gl;this.bind(),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_WRAP_S,t.REPEAT),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_WRAP_T,t.REPEAT)},i.prototype.destroy=function(){var t=this.gl;t.deleteTexture(this.texture)},i.fromSource=function(t,e,r){var n=new i(t);return n.premultiplyAlpha=r||!1,n.upload(e),n},i.fromData=function(t,e,r,n){var o=new i(t);return o.uploadData(e,r,n),o},e.exports=i},{}],6:[function(t,e,r){function i(t){this.nativeVaoExtension=t.getExtension("OES_vertex_array_object")||t.getExtension("MOZ_OES_vertex_array_object")||t.getExtension("WEBKIT_OES_vertex_array_object"),this.nativeVaoExtension&&(this.nativeVao=this.nativeVaoExtension.createVertexArrayOES()),this.gl=t,this.attributes=[],this.indexBuffer=null,this.dirty=!1}i.prototype.constructor=i,e.exports=i,i.prototype.bind=function(){this.nativeVao?(this.nativeVaoExtension.bindVertexArrayOES(this.nativeVao),this.dirty&&(this.dirty=!1,this.activate())):this.activate()},i.prototype.unbind=function(){this.nativeVao&&this.nativeVaoExtension.bindVertexArrayOES(null)},i.prototype.activate=function(){for(var t=this.gl,e=0;es;s++){var a=t.getActiveAttrib(e,s),h=i(t,a.type);r[a.name]={type:h,size:n(h),location:t.getAttribLocation(e,a.name),pointer:function(e,r,i,n){t.vertexAttribPointer(this.location,this.size,e||t.FLOAT,r||!1,i||0,n||0)}}}return r};e.exports=o},{"./mapSize":14,"./mapType":15}],12:[function(t,e,r){var i=t("./mapType"),n=t("./defaultValue"),o=function(t,e){for(var r={},o=t.getProgramParameter(e,t.ACTIVE_UNIFORMS),s=0;o>s;s++){var a=t.getActiveUniform(e,s),h=a.name.replace(/\[.*?\]/,""),u=i(t,a.type);r[h]={type:u,size:a.size,location:t.getUniformLocation(e,h),value:n(u,a.size)}}return r};e.exports=o},{"./defaultValue":10,"./mapType":15}],13:[function(t,e,r){var i=function(t,e){var r={data:{}};r.gl=t;for(var i=Object.keys(e),a=0;a=0&&t.length%1===0}function c(t,e){for(var r=-1,i=t.length;++ri?i:null}):(r=Y(t),e=r.length,function(){return i++,e>i?r[i]:null})}function y(t,e){return e=null==e?t.length-1:+e,function(){for(var r=Math.max(arguments.length-e,0),i=Array(r),n=0;r>n;n++)i[n]=arguments[n+e];switch(e){case 0:return t.call(this,i);case 1:return t.call(this,arguments[0],i)}}}function x(t){return function(e,r,i){return t(e,i)}}function b(t){return function(e,r,i){i=u(i||n),e=e||[];var o=m(e);if(0>=t)return i(null);var s=!1,a=0,l=!1;!function c(){if(s&&0>=a)return i(null);for(;t>a&&!l;){var n=o();if(null===n)return s=!0,void(0>=a&&i(null));a+=1,r(e[n],n,h(function(t){a-=1,t?(i(t),l=!0):c()}))}}()}}function _(t){return function(e,r,i){return t(N.eachOf,e,r,i)}}function T(t){return function(e,r,i,n){return t(b(r),e,i,n)}}function E(t){return function(e,r,i){return t(N.eachOfSeries,e,r,i)}}function S(t,e,r,i){i=u(i||n),e=e||[];var o=l(e)?[]:{};t(e,function(t,e,i){r(t,function(t,r){o[e]=r,i(t)})},function(t){i(t,o)})}function w(t,e,r,i){var n=[];t(e,function(t,e,i){r(t,function(r){r&&n.push({index:e,value:t}),i()})},function(){i(p(n.sort(function(t,e){return t.index-e.index}),function(t){return t.value}))})}function C(t,e,r,i){w(t,e,function(t,e){r(t,function(t){e(!t)})},i)}function A(t,e,r){return function(i,n,o,s){function a(){s&&s(r(!1,void 0))}function h(t,i,n){return s?void o(t,function(i){s&&e(i)&&(s(r(!0,t)),s=o=!1),n()}):n()}arguments.length>3?t(i,n,h,a):(s=o,o=n,t(i,h,a))}}function M(t,e){return e}function R(t,e,r){r=r||n;var i=l(e)?[]:{};t(e,function(t,e,r){t(y(function(t,n){n.length<=1&&(n=n[0]),i[e]=n,r(t)}))},function(t){r(t,i)})}function O(t,e,r,i){var n=[];t(e,function(t,e,i){r(t,function(t,e){n=n.concat(e||[]),i(t)})},function(t){i(t,n)})}function D(t,e,r){function i(t,e,r,i){if(null!=i&&"function"!=typeof i)throw new Error("task callback must be a function");return t.started=!0,j(e)||(e=[e]),0===e.length&&t.idle()?N.setImmediate(function(){t.drain()}):(c(e,function(e){var o={data:e,callback:i||n};r?t.tasks.unshift(o):t.tasks.push(o),t.tasks.length===t.concurrency&&t.saturated()}),void N.setImmediate(t.process))}function o(t,e){return function(){s-=1;var r=!1,i=arguments;c(e,function(t){c(a,function(e,i){e!==t||r||(a.splice(i,1),r=!0)}),t.callback.apply(t,i)}),t.tasks.length+s===0&&t.drain(),t.process()}}if(null==e)e=1;else if(0===e)throw new Error("Concurrency must not be zero");var s=0,a=[],u={tasks:[],concurrency:e,payload:r,saturated:n,empty:n,drain:n,started:!1,paused:!1,push:function(t,e){i(u,t,!1,e)},kill:function(){u.drain=n,u.tasks=[]},unshift:function(t,e){i(u,t,!0,e)},process:function(){if(!u.paused&&s=e;e++)N.setImmediate(u.process)}}};return u}function P(t){return y(function(e,r){e.apply(null,r.concat([y(function(e,r){"object"==typeof console&&(e?console.error&&console.error(e):console[t]&&c(r,function(e){console[t](e)}))})]))})}function F(t){return function(e,r,i){t(d(e),r,i)}}function L(t){return y(function(e,r){var i=y(function(r){var i=this,n=r.pop();return t(e,function(t,e,n){t.apply(i,r.concat([n]))},n)});return r.length?i.apply(this,r):i})}function B(t){return y(function(e){var r=e.pop();e.push(function(){var t=arguments;i?N.setImmediate(function(){r.apply(null,t)}):r.apply(null,t)});var i=!0;t.apply(this,e),i=!1})}var I,N={},U="object"==typeof self&&self.self===self&&self||"object"==typeof i&&i.global===i&&i||this;null!=U&&(I=U.async),N.noConflict=function(){return U.async=I,N};var k=Object.prototype.toString,j=Array.isArray||function(t){return"[object Array]"===k.call(t)},G=function(t){var e=typeof t;return"function"===e||"object"===e&&!!t},Y=Object.keys||function(t){var e=[];for(var r in t)t.hasOwnProperty(r)&&e.push(r);return e},X="function"==typeof setImmediate&&setImmediate,z=X?function(t){X(t)}:function(t){setTimeout(t,0)};"object"==typeof e&&"function"==typeof e.nextTick?N.nextTick=e.nextTick:N.nextTick=z,N.setImmediate=X?z:N.nextTick,N.forEach=N.each=function(t,e,r){return N.eachOf(t,x(e),r)},N.forEachSeries=N.eachSeries=function(t,e,r){return N.eachOfSeries(t,x(e),r)},N.forEachLimit=N.eachLimit=function(t,e,r,i){return b(e)(t,x(r),i)},N.forEachOf=N.eachOf=function(t,e,r){function i(t){a--,t?r(t):null===o&&0>=a&&r(null)}r=u(r||n),t=t||[];for(var o,s=m(t),a=0;null!=(o=s());)a+=1,e(t[o],o,h(i));0===a&&r(null)},N.forEachOfSeries=N.eachOfSeries=function(t,e,r){function i(){var n=!0;return null===s?r(null):(e(t[s],s,h(function(t){if(t)r(t);else{if(s=o(),null===s)return r(null);n?N.setImmediate(i):i()}})),void(n=!1))}r=u(r||n),t=t||[];var o=m(t),s=o();i()},N.forEachOfLimit=N.eachOfLimit=function(t,e,r,i){b(e)(t,r,i)},N.map=_(S),N.mapSeries=E(S),N.mapLimit=T(S),N.inject=N.foldl=N.reduce=function(t,e,r,i){N.eachOfSeries(t,function(t,i,n){r(e,t,function(t,r){e=r,n(t)})},function(t){i(t,e)})},N.foldr=N.reduceRight=function(t,e,r,i){var n=p(t,o).reverse();N.reduce(n,e,r,i)},N.transform=function(t,e,r,i){3===arguments.length&&(i=r,r=e,e=j(t)?[]:{}),N.eachOf(t,function(t,i,n){r(e,t,i,n)},function(t){i(t,e)})},N.select=N.filter=_(w),N.selectLimit=N.filterLimit=T(w),N.selectSeries=N.filterSeries=E(w),N.reject=_(C),N.rejectLimit=T(C),N.rejectSeries=E(C),N.any=N.some=A(N.eachOf,s,o),N.someLimit=A(N.eachOfLimit,s,o),N.all=N.every=A(N.eachOf,a,a),N.everyLimit=A(N.eachOfLimit,a,a),N.detect=A(N.eachOf,o,M),N.detectSeries=A(N.eachOfSeries,o,M),N.detectLimit=A(N.eachOfLimit,o,M),N.sortBy=function(t,e,r){function i(t,e){var r=t.criteria,i=e.criteria;return i>r?-1:r>i?1:0}N.map(t,function(t,r){e(t,function(e,i){e?r(e):r(null,{value:t,criteria:i})})},function(t,e){return t?r(t):void r(null,p(e.sort(i),function(t){return t.value}))})},N.auto=function(t,e,r){function i(t){d.unshift(t)}function o(t){var e=g(d,t);e>=0&&d.splice(e,1)}function s(){h--,c(d.slice(0),function(t){t()})}r||(r=e,e=null),r=u(r||n);var a=Y(t),h=a.length;if(!h)return r(null);e||(e=h);var l={},p=0,d=[];i(function(){h||r(null,l)}),c(a,function(n){function a(){return e>p&&f(m,function(t,e){return t&&l.hasOwnProperty(e)},!0)&&!l.hasOwnProperty(n)}function h(){a()&&(p++,o(h),c[c.length-1](d,l))}for(var u,c=j(t[n])?t[n]:[t[n]],d=y(function(t,e){if(p--,e.length<=1&&(e=e[0]),t){var i={};v(l,function(t,e){i[e]=t}),i[n]=e,r(t,i)}else l[n]=e,N.setImmediate(s)}),m=c.slice(0,c.length-1),x=m.length;x--;){if(!(u=t[m[x]]))throw new Error("Has inexistant dependency");if(j(u)&&g(u,n)>=0)throw new Error("Has cyclic dependencies")}a()?(p++,c[c.length-1](d,l)):i(h)})},N.retry=function(t,e,r){function i(t,e){if("number"==typeof e)t.times=parseInt(e,10)||o;else{if("object"!=typeof e)throw new Error("Unsupported argument type for 'times': "+typeof e);t.times=parseInt(e.times,10)||o,t.interval=parseInt(e.interval,10)||s}}function n(t,e){function r(t,r){return function(i){t(function(t,e){i(!t||r,{err:t,result:e})},e)}}function i(t){return function(e){setTimeout(function(){e(null)},t)}}for(;h.times;){var n=!(h.times-=1);a.push(r(h.task,n)),!n&&h.interval>0&&a.push(i(h.interval))}N.series(a,function(e,r){r=r[r.length-1],(t||h.callback)(r.err,r.result)})}var o=5,s=0,a=[],h={times:o,interval:s},u=arguments.length;if(1>u||u>3)throw new Error("Invalid arguments - must be either (task), (task, callback), (times, task) or (times, task, callback)");return 2>=u&&"function"==typeof t&&(r=e,e=t),"function"!=typeof t&&i(h,t),h.callback=r,h.task=e,h.callback?n():n},N.waterfall=function(t,e){function r(t){return y(function(i,n){if(i)e.apply(null,[i].concat(n));else{var o=t.next();o?n.push(r(o)):n.push(e),B(t).apply(null,n)}})}if(e=u(e||n),!j(t)){var i=new Error("First argument to waterfall must be an array of functions");return e(i)}return t.length?void r(N.iterator(t))():e()},N.parallel=function(t,e){R(N.eachOf,t,e)},N.parallelLimit=function(t,e,r){R(b(e),t,r)},N.series=function(t,e){R(N.eachOfSeries,t,e)},N.iterator=function(t){function e(r){function i(){return t.length&&t[r].apply(null,arguments),i.next()}return i.next=function(){return ri;){var o=i+(n-i+1>>>1);r(e,t[o])>=0?i=o:n=o-1}return i}function o(t,e,o,s){if(null!=s&&"function"!=typeof s)throw new Error("task callback must be a function");return t.started=!0,j(e)||(e=[e]),0===e.length?N.setImmediate(function(){t.drain()}):void c(e,function(e){var a={data:e,priority:o,callback:"function"==typeof s?s:n};t.tasks.splice(i(t.tasks,a,r)+1,0,a),t.tasks.length===t.concurrency&&t.saturated(),N.setImmediate(t.process)})}var s=N.queue(t,e);return s.push=function(t,e,r){o(s,t,e,r)},delete s.unshift,s},N.cargo=function(t,e){return D(t,1,e)},N.log=P("log"),N.dir=P("dir"),N.memoize=function(t,e){var r={},i={};e=e||o;var n=y(function(n){var o=n.pop(),s=e.apply(null,n);s in r?N.setImmediate(function(){o.apply(null,r[s])}):s in i?i[s].push(o):(i[s]=[o],t.apply(null,n.concat([y(function(t){r[s]=t;var e=i[s];delete i[s];for(var n=0,o=e.length;o>n;n++)e[n].apply(null,t)})])))});return n.memo=r,n.unmemoized=t,n},N.unmemoize=function(t){return function(){return(t.unmemoized||t).apply(null,arguments)}},N.times=F(N.map),N.timesSeries=F(N.mapSeries),N.timesLimit=function(t,e,r,i){return N.mapLimit(d(t),e,r,i)},N.seq=function(){var t=arguments;return y(function(e){var r=this,i=e[e.length-1];"function"==typeof i?e.pop():i=n,N.reduce(t,e,function(t,e,i){e.apply(r,t.concat([y(function(t,e){i(t,e)})]))},function(t,e){i.apply(r,[t].concat(e))})})},N.compose=function(){return N.seq.apply(null,Array.prototype.reverse.call(arguments))},N.applyEach=L(N.eachOf),N.applyEachSeries=L(N.eachOfSeries),N.forever=function(t,e){function r(t){return t?i(t):void o(r)}var i=h(e||n),o=B(t);r()},N.ensureAsync=B,N.constant=y(function(t){var e=[null].concat(t);return function(t){return t.apply(this,e)}}),N.wrapSync=N.asyncify=function(t){return y(function(e){var r,i=e.pop();try{r=t.apply(this,e)}catch(n){return i(n)}G(r)&&"function"==typeof r.then?r.then(function(t){i(null,t)})["catch"](function(t){i(t.message?t:new Error(t))}):i(null,r)})},"object"==typeof r&&r.exports?r.exports=N:"function"==typeof t&&t.amd?t([],function(){return N}):U.async=N}()}).call(this,e("_process"),"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{_process:18}],17:[function(t,e,r){(function(t){function e(t,e){for(var r=0,i=t.length-1;i>=0;i--){var n=t[i];"."===n?t.splice(i,1):".."===n?(t.splice(i,1),r++):r&&(t.splice(i,1),r--)}if(e)for(;r--;r)t.unshift("..");return t}function i(t,e){if(t.filter)return t.filter(e);for(var r=[],i=0;i=-1&&!n;o--){var s=o>=0?arguments[o]:t.cwd();if("string"!=typeof s)throw new TypeError("Arguments to path.resolve must be strings");s&&(r=s+"/"+r,n="/"===s.charAt(0))}return r=e(i(r.split("/"),function(t){return!!t}),!n).join("/"),(n?"/":"")+r||"."},r.normalize=function(t){var n=r.isAbsolute(t),o="/"===s(t,-1);return t=e(i(t.split("/"),function(t){return!!t}),!n).join("/"),t||n||(t="."),t&&o&&(t+="/"),(n?"/":"")+t},r.isAbsolute=function(t){return"/"===t.charAt(0)},r.join=function(){var t=Array.prototype.slice.call(arguments,0);return r.normalize(i(t,function(t,e){if("string"!=typeof t)throw new TypeError("Arguments to path.join must be strings");return t}).join("/"))},r.relative=function(t,e){function i(t){for(var e=0;e=0&&""===t[r];r--);return e>r?[]:t.slice(e,r-e+1)}t=r.resolve(t).substr(1),e=r.resolve(e).substr(1);for(var n=i(t.split("/")),o=i(e.split("/")),s=Math.min(n.length,o.length),a=s,h=0;s>h;h++)if(n[h]!==o[h]){a=h;break}for(var u=[],h=a;he&&(e=t.length+e),t.substr(e,r)}}).call(this,t("_process"))},{_process:18}],18:[function(t,e,r){function i(){l=!1,a.length?u=a.concat(u):c=-1,u.length&&n()}function n(){if(!l){var t=setTimeout(i);l=!0;for(var e=u.length;e;){for(a=u,u=[];++c1)for(var r=1;r1&&(i=r[0]+"@",t=r[1]),t=t.replace(F,".");var n=t.split("."),o=s(n,e).join(".");return i+o}function h(t){for(var e,r,i=[],n=0,o=t.length;o>n;)e=t.charCodeAt(n++),e>=55296&&56319>=e&&o>n?(r=t.charCodeAt(n++),56320==(64512&r)?i.push(((1023&e)<<10)+(1023&r)+65536):(i.push(e),n--)):i.push(e);return i}function u(t){return s(t,function(t){var e="";return t>65535&&(t-=65536,e+=N(t>>>10&1023|55296),t=56320|1023&t),e+=N(t)}).join("")}function l(t){return 10>t-48?t-22:26>t-65?t-65:26>t-97?t-97:E}function c(t,e){return t+22+75*(26>t)-((0!=e)<<5)}function p(t,e,r){var i=0;for(t=r?I(t/A):t>>1,t+=I(t/e);t>B*w>>1;i+=E)t=I(t/B);return I(i+(B+1)*t/(t+C))}function d(t){var e,r,i,n,s,a,h,c,d,f,v=[],g=t.length,m=0,y=R,x=M;for(r=t.lastIndexOf(O),0>r&&(r=0),i=0;r>i;++i)t.charCodeAt(i)>=128&&o("not-basic"),v.push(t.charCodeAt(i));for(n=r>0?r+1:0;g>n;){for(s=m,a=1,h=E;n>=g&&o("invalid-input"),c=l(t.charCodeAt(n++)),(c>=E||c>I((T-m)/a))&&o("overflow"),m+=c*a,d=x>=h?S:h>=x+w?w:h-x,!(d>c);h+=E)f=E-d,a>I(T/f)&&o("overflow"),a*=f;e=v.length+1,x=p(m-s,e,0==s),I(m/e)>T-y&&o("overflow"),y+=I(m/e),m%=e,v.splice(m++,0,y)}return u(v)}function f(t){var e,r,i,n,s,a,u,l,d,f,v,g,m,y,x,b=[];for(t=h(t),g=t.length,e=R,r=0,s=M,a=0;g>a;++a)v=t[a],128>v&&b.push(N(v));for(i=n=b.length,n&&b.push(O);g>i;){for(u=T,a=0;g>a;++a)v=t[a],v>=e&&u>v&&(u=v);for(m=i+1,u-e>I((T-r)/m)&&o("overflow"),r+=(u-e)*m,e=u,a=0;g>a;++a)if(v=t[a],e>v&&++r>T&&o("overflow"),v==e){for(l=r,d=E;f=s>=d?S:d>=s+w?w:d-s,!(f>l);d+=E)x=l-f,y=E-f,b.push(N(c(f+x%y,0))),l=I(x/y);b.push(N(c(l,0))),s=p(r,m,i==n),r=0,++i}++r,++e}return b.join("")}function v(t){return a(t,function(t){return D.test(t)?d(t.slice(4).toLowerCase()):t})}function g(t){return a(t,function(t){return P.test(t)?"xn--"+f(t):t})}var m="object"==typeof i&&i&&!i.nodeType&&i,y="object"==typeof r&&r&&!r.nodeType&&r,x="object"==typeof e&&e;(x.global===x||x.window===x||x.self===x)&&(n=x);var b,_,T=2147483647,E=36,S=1,w=26,C=38,A=700,M=72,R=128,O="-",D=/^xn--/,P=/[^\x20-\x7E]/,F=/[\x2E\u3002\uFF0E\uFF61]/g,L={overflow:"Overflow: input needs wider integers to process","not-basic":"Illegal input >= 0x80 (not a basic code point)","invalid-input":"Invalid input"},B=E-S,I=Math.floor,N=String.fromCharCode;if(b={version:"1.3.2",ucs2:{decode:h,encode:u},decode:d,encode:f,toASCII:g,toUnicode:v},"function"==typeof t&&"object"==typeof t.amd&&t.amd)t("punycode",function(){return b});else if(m&&y)if(r.exports==m)y.exports=b;else for(_ in b)b.hasOwnProperty(_)&&(m[_]=b[_]);else n.punycode=b}(this)}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{}],20:[function(t,e,r){"use strict";function i(t,e){return Object.prototype.hasOwnProperty.call(t,e)}e.exports=function(t,e,r,o){e=e||"&",r=r||"=";var s={};if("string"!=typeof t||0===t.length)return s;var a=/\+/g;t=t.split(e);var h=1e3;o&&"number"==typeof o.maxKeys&&(h=o.maxKeys);var u=t.length;h>0&&u>h&&(u=h);for(var l=0;u>l;++l){var c,p,d,f,v=t[l].replace(a,"%20"),g=v.indexOf(r);g>=0?(c=v.substr(0,g),p=v.substr(g+1)):(c=v, -p=""),d=decodeURIComponent(c),f=decodeURIComponent(p),i(s,d)?n(s[d])?s[d].push(f):s[d]=[s[d],f]:s[d]=f}return s};var n=Array.isArray||function(t){return"[object Array]"===Object.prototype.toString.call(t)}},{}],21:[function(t,e,r){"use strict";function i(t,e){if(t.map)return t.map(e);for(var r=[],i=0;i",'"',"`"," ","\r","\n"," "],g=["{","}","|","\\","^","`"].concat(v),m=["'"].concat(g),y=["%","/","?",";","#"].concat(m),x=["/","?","#"],b=255,_=/^[a-z0-9A-Z_-]{0,63}$/,T=/^([a-z0-9A-Z_-]{0,63})(.*)$/,E={javascript:!0,"javascript:":!0},S={javascript:!0,"javascript:":!0},w={http:!0,https:!0,ftp:!0,gopher:!0,file:!0,"http:":!0,"https:":!0,"ftp:":!0,"gopher:":!0,"file:":!0},C=t("querystring");i.prototype.parse=function(t,e,r){if(!h(t))throw new TypeError("Parameter 'url' must be a string, not "+typeof t);var i=t;i=i.trim();var n=d.exec(i);if(n){n=n[0];var o=n.toLowerCase();this.protocol=o,i=i.substr(n.length)}if(r||n||i.match(/^\/\/[^@\/]+@[^@\/]+/)){var s="//"===i.substr(0,2);!s||n&&S[n]||(i=i.substr(2),this.slashes=!0)}if(!S[n]&&(s||n&&!w[n])){for(var a=-1,u=0;ul)&&(a=l)}var c,f;f=-1===a?i.lastIndexOf("@"):i.lastIndexOf("@",a),-1!==f&&(c=i.slice(0,f),i=i.slice(f+1),this.auth=decodeURIComponent(c)),a=-1;for(var u=0;ul)&&(a=l)}-1===a&&(a=i.length),this.host=i.slice(0,a),i=i.slice(a),this.parseHost(),this.hostname=this.hostname||"";var v="["===this.hostname[0]&&"]"===this.hostname[this.hostname.length-1];if(!v)for(var g=this.hostname.split(/\./),u=0,A=g.length;A>u;u++){var M=g[u];if(M&&!M.match(_)){for(var R="",O=0,D=M.length;D>O;O++)R+=M.charCodeAt(O)>127?"x":M[O];if(!R.match(_)){var P=g.slice(0,u),F=g.slice(u+1),L=M.match(T);L&&(P.push(L[1]),F.unshift(L[2])),F.length&&(i="/"+F.join(".")+i),this.hostname=P.join(".");break}}}if(this.hostname.length>b?this.hostname="":this.hostname=this.hostname.toLowerCase(),!v){for(var B=this.hostname.split("."),I=[],u=0;uu;u++){var j=m[u],G=encodeURIComponent(j);G===j&&(G=escape(j)),i=i.split(j).join(G)}var Y=i.indexOf("#");-1!==Y&&(this.hash=i.substr(Y),i=i.slice(0,Y));var X=i.indexOf("?");if(-1!==X?(this.search=i.substr(X),this.query=i.substr(X+1),e&&(this.query=C.parse(this.query)),i=i.slice(0,X)):e&&(this.search="",this.query={}),i&&(this.pathname=i),w[o]&&this.hostname&&!this.pathname&&(this.pathname="/"),this.pathname||this.search){var U=this.pathname||"",N=this.search||"";this.path=U+N}return this.href=this.format(),this},i.prototype.format=function(){var t=this.auth||"";t&&(t=encodeURIComponent(t),t=t.replace(/%3A/i,":"),t+="@");var e=this.protocol||"",r=this.pathname||"",i=this.hash||"",n=!1,o="";this.host?n=t+this.host:this.hostname&&(n=t+(-1===this.hostname.indexOf(":")?this.hostname:"["+this.hostname+"]"),this.port&&(n+=":"+this.port)),this.query&&u(this.query)&&Object.keys(this.query).length&&(o=C.stringify(this.query));var s=this.search||o&&"?"+o||"";return e&&":"!==e.substr(-1)&&(e+=":"),this.slashes||(!e||w[e])&&n!==!1?(n="//"+(n||""),r&&"/"!==r.charAt(0)&&(r="/"+r)):n||(n=""),i&&"#"!==i.charAt(0)&&(i="#"+i),s&&"?"!==s.charAt(0)&&(s="?"+s),r=r.replace(/[?#]/g,function(t){return encodeURIComponent(t)}),s=s.replace("#","%23"),e+n+r+s+i},i.prototype.resolve=function(t){return this.resolveObject(n(t,!1,!0)).format()},i.prototype.resolveObject=function(t){if(h(t)){var e=new i;e.parse(t,!1,!0),t=e}var r=new i;if(Object.keys(this).forEach(function(t){r[t]=this[t]},this),r.hash=t.hash,""===t.href)return r.href=r.format(),r;if(t.slashes&&!t.protocol)return Object.keys(t).forEach(function(e){"protocol"!==e&&(r[e]=t[e])}),w[r.protocol]&&r.hostname&&!r.pathname&&(r.path=r.pathname="/"),r.href=r.format(),r;if(t.protocol&&t.protocol!==r.protocol){if(!w[t.protocol])return Object.keys(t).forEach(function(e){r[e]=t[e]}),r.href=r.format(),r;if(r.protocol=t.protocol,t.host||S[t.protocol])r.pathname=t.pathname;else{for(var n=(t.pathname||"").split("/");n.length&&!(t.host=n.shift()););t.host||(t.host=""),t.hostname||(t.hostname=""),""!==n[0]&&n.unshift(""),n.length<2&&n.unshift(""),r.pathname=n.join("/")}if(r.search=t.search,r.query=t.query,r.host=t.host||"",r.auth=t.auth,r.hostname=t.hostname||t.host,r.port=t.port,r.pathname||r.search){var o=r.pathname||"",s=r.search||"";r.path=o+s}return r.slashes=r.slashes||t.slashes,r.href=r.format(),r}var a=r.pathname&&"/"===r.pathname.charAt(0),u=t.host||t.pathname&&"/"===t.pathname.charAt(0),p=u||a||r.host&&t.pathname,d=p,f=r.pathname&&r.pathname.split("/")||[],n=t.pathname&&t.pathname.split("/")||[],v=r.protocol&&!w[r.protocol];if(v&&(r.hostname="",r.port=null,r.host&&(""===f[0]?f[0]=r.host:f.unshift(r.host)),r.host="",t.protocol&&(t.hostname=null,t.port=null,t.host&&(""===n[0]?n[0]=t.host:n.unshift(t.host)),t.host=null),p=p&&(""===n[0]||""===f[0])),u)r.host=t.host||""===t.host?t.host:r.host,r.hostname=t.hostname||""===t.hostname?t.hostname:r.hostname,r.search=t.search,r.query=t.query,f=n;else if(n.length)f||(f=[]),f.pop(),f=f.concat(n),r.search=t.search,r.query=t.query;else if(!c(t.search)){if(v){r.hostname=r.host=f.shift();var g=r.host&&r.host.indexOf("@")>0?r.host.split("@"):!1;g&&(r.auth=g.shift(),r.host=r.hostname=g.shift())}return r.search=t.search,r.query=t.query,l(r.pathname)&&l(r.search)||(r.path=(r.pathname?r.pathname:"")+(r.search?r.search:"")),r.href=r.format(),r}if(!f.length)return r.pathname=null,r.search?r.path="/"+r.search:r.path=null,r.href=r.format(),r;for(var m=f.slice(-1)[0],y=(r.host||t.host)&&("."===m||".."===m)||""===m,x=0,b=f.length;b>=0;b--)m=f[b],"."==m?f.splice(b,1):".."===m?(f.splice(b,1),x++):x&&(f.splice(b,1),x--);if(!p&&!d)for(;x--;x)f.unshift("..");!p||""===f[0]||f[0]&&"/"===f[0].charAt(0)||f.unshift(""),y&&"/"!==f.join("/").substr(-1)&&f.push("");var _=""===f[0]||f[0]&&"/"===f[0].charAt(0);if(v){r.hostname=r.host=_?"":f.length?f.shift():"";var g=r.host&&r.host.indexOf("@")>0?r.host.split("@"):!1;g&&(r.auth=g.shift(),r.host=r.hostname=g.shift())}return p=p||r.host&&f.length,p&&!_&&f.unshift(""),f.length?r.pathname=f.join("/"):(r.pathname=null,r.path=null),l(r.pathname)&&l(r.search)||(r.path=(r.pathname?r.pathname:"")+(r.search?r.search:"")),r.auth=t.auth||r.auth,r.slashes=r.slashes||t.slashes,r.href=r.format(),r},i.prototype.parseHost=function(){var t=this.host,e=f.exec(t);e&&(e=e[0],":"!==e&&(this.port=e.substr(1)),t=t.substr(0,t.length-e.length)),t&&(this.hostname=t)}},{punycode:19,querystring:22}],24:[function(t,e,r){"use strict";function i(t,e,r){r=r||2;var i=e&&e.length,o=i?e[0]*r:t.length,a=n(t,0,o,r,!0),h=[];if(!a)return h;var u,l,p,d,f,v,g;if(i&&(a=c(t,e,a,r)),t.length>80*r){u=p=t[0],l=d=t[1];for(var m=r;o>m;m+=r)f=t[m],v=t[m+1],u>f&&(u=f),l>v&&(l=v),f>p&&(p=f),v>d&&(d=v);g=Math.max(p-u,d-l)}return s(a,h,r,u,l,g),h}function n(t,e,r,i,n){var o,s,a,h=0;for(o=e,s=r-i;r>o;o+=i)h+=(t[s]-t[o])*(t[o+1]+t[s+1]),s=o;if(n===h>0)for(o=e;r>o;o+=i)a=M(o,t[o],t[o+1],a);else for(o=r-i;o>=e;o-=i)a=M(o,t[o],t[o+1],a);return a}function o(t,e){if(!t)return t;e||(e=t);var r,i=t;do if(r=!1,i.steiner||!T(i,i.next)&&0!==_(i.prev,i,i.next))i=i.next;else{if(R(i),i=e=i.prev,i===i.next)return null;r=!0}while(r||i!==e);return e}function s(t,e,r,i,n,c,p){if(t){!p&&c&&v(t,i,n,c);for(var d,f,g=t;t.prev!==t.next;)if(d=t.prev,f=t.next,c?h(t,i,n,c):a(t))e.push(d.i/r),e.push(t.i/r),e.push(f.i/r),R(t),t=f.next,g=f.next;else if(t=f,t===g){p?1===p?(t=u(t,e,r),s(t,e,r,i,n,c,2)):2===p&&l(t,e,r,i,n,c):s(o(t),e,r,i,n,c,1);break}}}function a(t){var e=t.prev,r=t,i=t.next;if(_(e,r,i)>=0)return!1;for(var n=t.next.next;n!==t.prev;){if(x(e.x,e.y,r.x,r.y,i.x,i.y,n.x,n.y)&&_(n.prev,n,n.next)>=0)return!1;n=n.next}return!0}function h(t,e,r,i){var n=t.prev,o=t,s=t.next;if(_(n,o,s)>=0)return!1;for(var a=n.xo.x?n.x>s.x?n.x:s.x:o.x>s.x?o.x:s.x,l=n.y>o.y?n.y>s.y?n.y:s.y:o.y>s.y?o.y:s.y,c=m(a,h,e,r,i),p=m(u,l,e,r,i),d=t.nextZ;d&&d.z<=p;){if(d!==t.prev&&d!==t.next&&x(n.x,n.y,o.x,o.y,s.x,s.y,d.x,d.y)&&_(d.prev,d,d.next)>=0)return!1;d=d.nextZ}for(d=t.prevZ;d&&d.z>=c;){if(d!==t.prev&&d!==t.next&&x(n.x,n.y,o.x,o.y,s.x,s.y,d.x,d.y)&&_(d.prev,d,d.next)>=0)return!1;d=d.prevZ}return!0}function u(t,e,r){var i=t;do{var n=i.prev,o=i.next.next;E(n,i,i.next,o)&&w(n,o)&&w(o,n)&&(e.push(n.i/r),e.push(i.i/r),e.push(o.i/r),R(i),R(i.next),i=t=o),i=i.next}while(i!==t);return i}function l(t,e,r,i,n,a){var h=t;do{for(var u=h.next.next;u!==h.prev;){if(h.i!==u.i&&b(h,u)){var l=A(h,u);return h=o(h,h.next),l=o(l,l.next),s(h,e,r,i,n,a),void s(l,e,r,i,n,a)}u=u.next}h=h.next}while(h!==t)}function c(t,e,r,i){var s,a,h,u,l,c=[];for(s=0,a=e.length;a>s;s++)h=e[s]*i,u=a-1>s?e[s+1]*i:t.length,l=n(t,h,u,i,!1),l===l.next&&(l.steiner=!0),c.push(y(l));for(c.sort(p),s=0;s=i.next.y){var a=i.x+(o-i.y)*(i.next.x-i.x)/(i.next.y-i.y);n>=a&&a>s&&(s=a,r=i.x=i.x&&i.x>=r.x&&x(oh||h===l&&i.x>r.x)&&w(i,t)&&(r=i,l=h)),i=i.next;return r}function v(t,e,r,i){var n=t;do null===n.z&&(n.z=m(n.x,n.y,e,r,i)),n.prevZ=n.prev,n.nextZ=n.next,n=n.next;while(n!==t);n.prevZ.nextZ=null,n.prevZ=null,g(n)}function g(t){var e,r,i,n,o,s,a,h,u=1;do{for(r=t,t=null,o=null,s=0;r;){for(s++,i=r,a=0,e=0;u>e&&(a++,i=i.nextZ,i);e++);for(h=u;a>0||h>0&&i;)0===a?(n=i,i=i.nextZ,h--):0!==h&&i?r.z<=i.z?(n=r,r=r.nextZ,a--):(n=i,i=i.nextZ,h--):(n=r,r=r.nextZ,a--),o?o.nextZ=n:t=n,n.prevZ=o,o=n;r=i}o.nextZ=null,u*=2}while(s>1);return t}function m(t,e,r,i,n){return t=32767*(t-r)/n,e=32767*(e-i)/n,t=16711935&(t|t<<8),t=252645135&(t|t<<4),t=858993459&(t|t<<2),t=1431655765&(t|t<<1),e=16711935&(e|e<<8),e=252645135&(e|e<<4),e=858993459&(e|e<<2),e=1431655765&(e|e<<1),t|e<<1}function y(t){var e=t,r=t;do e.x=0&&(t-s)*(i-a)-(r-s)*(e-a)>=0&&(r-s)*(o-a)-(n-s)*(i-a)>=0}function b(t,e){return T(t,e)||t.next.i!==e.i&&t.prev.i!==e.i&&!S(t,e)&&w(t,e)&&w(e,t)&&C(t,e)}function _(t,e,r){return(e.y-t.y)*(r.x-e.x)-(e.x-t.x)*(r.y-e.y)}function T(t,e){return t.x===e.x&&t.y===e.y}function E(t,e,r,i){return _(t,e,r)>0!=_(t,e,i)>0&&_(r,i,t)>0!=_(r,i,e)>0}function S(t,e){var r=t;do{if(r.i!==t.i&&r.next.i!==t.i&&r.i!==e.i&&r.next.i!==e.i&&E(r,r.next,t,e))return!0;r=r.next}while(r!==t);return!1}function w(t,e){return _(t.prev,t,t.next)<0?_(t,e,t.next)>=0&&_(t,t.prev,e)>=0:_(t,e,t.prev)<0||_(t,t.next,e)<0}function C(t,e){var r=t,i=!1,n=(t.x+e.x)/2,o=(t.y+e.y)/2;do r.y>o!=r.next.y>o&&n<(r.next.x-r.x)*(o-r.y)/(r.next.y-r.y)+r.x&&(i=!i),r=r.next;while(r!==t);return i}function A(t,e){var r=new O(t.i,t.x,t.y),i=new O(e.i,e.x,e.y),n=t.next,o=e.prev;return t.next=e,e.prev=t,r.next=n,n.prev=r,i.next=r,r.prev=i,o.next=i,i.prev=o,i}function M(t,e,r,i){var n=new O(t,e,r);return i?(n.next=i.next,n.prev=i,i.next.prev=n,i.next=n):(n.prev=n,n.next=n),n}function R(t){t.next.prev=t.prev,t.prev.next=t.next,t.prevZ&&(t.prevZ.nextZ=t.nextZ),t.nextZ&&(t.nextZ.prevZ=t.prevZ)}function O(t,e,r){this.i=t,this.x=e,this.y=r,this.prev=null,this.next=null,this.z=null,this.prevZ=null,this.nextZ=null,this.steiner=!1}e.exports=i},{}],25:[function(t,e,r){"use strict";function i(t,e,r){this.fn=t,this.context=e,this.once=r||!1}function n(){}var o="function"!=typeof Object.create?"~":!1;n.prototype._events=void 0,n.prototype.listeners=function(t,e){var r=o?o+t:t,i=this._events&&this._events[r];if(e)return!!i;if(!i)return[];if(i.fn)return[i.fn];for(var n=0,s=i.length,a=new Array(s);s>n;n++)a[n]=i[n].fn;return a},n.prototype.emit=function(t,e,r,i,n,s){var a=o?o+t:t;if(!this._events||!this._events[a])return!1;var h,u,l=this._events[a],c=arguments.length;if("function"==typeof l.fn){switch(l.once&&this.removeListener(t,l.fn,void 0,!0),c){case 1:return l.fn.call(l.context),!0;case 2:return l.fn.call(l.context,e),!0;case 3:return l.fn.call(l.context,e,r),!0;case 4:return l.fn.call(l.context,e,r,i),!0;case 5:return l.fn.call(l.context,e,r,i,n),!0;case 6:return l.fn.call(l.context,e,r,i,n,s),!0}for(u=1,h=new Array(c-1);c>u;u++)h[u-1]=arguments[u];l.fn.apply(l.context,h)}else{var p,d=l.length;for(u=0;d>u;u++)switch(l[u].once&&this.removeListener(t,l[u].fn,void 0,!0),c){case 1:l[u].fn.call(l[u].context);break;case 2:l[u].fn.call(l[u].context,e);break;case 3:l[u].fn.call(l[u].context,e,r);break;default:if(!h)for(p=1,h=new Array(c-1);c>p;p++)h[p-1]=arguments[p];l[u].fn.apply(l[u].context,h)}}return!0},n.prototype.on=function(t,e,r){var n=new i(e,r||this),s=o?o+t:t;return this._events||(this._events=o?{}:Object.create(null)),this._events[s]?this._events[s].fn?this._events[s]=[this._events[s],n]:this._events[s].push(n):this._events[s]=n,this},n.prototype.once=function(t,e,r){var n=new i(e,r||this,!0),s=o?o+t:t;return this._events||(this._events=o?{}:Object.create(null)),this._events[s]?this._events[s].fn?this._events[s]=[this._events[s],n]:this._events[s].push(n):this._events[s]=n,this},n.prototype.removeListener=function(t,e,r,i){var n=o?o+t:t;if(!this._events||!this._events[n])return this;var s=this._events[n],a=[];if(e)if(s.fn)(s.fn!==e||i&&!s.once||r&&s.context!==r)&&a.push(s);else for(var h=0,u=s.length;u>h;h++)(s[h].fn!==e||i&&!s[h].once||r&&s[h].context!==r)&&a.push(s[h]);return a.length?this._events[n]=1===a.length?a[0]:a:delete this._events[n],this},n.prototype.removeAllListeners=function(t){return this._events?(t?delete this._events[o?o+t:t]:this._events=o?{}:Object.create(null),this):this},n.prototype.off=n.prototype.removeListener,n.prototype.addListener=n.prototype.on,n.prototype.setMaxListeners=function(){return this},n.prefixed=o,"undefined"!=typeof e&&(e.exports=n)},{}],26:[function(t,e,r){"use strict";function i(t){if(null===t||void 0===t)throw new TypeError("Object.assign cannot be called with null or undefined");return Object(t)}var n=Object.prototype.hasOwnProperty,o=Object.prototype.propertyIsEnumerable;e.exports=Object.assign||function(t,e){for(var r,s,a=i(t),h=1;h=t.length&&r())}if(r=r||function(){},!t.length)return r();var o=0;u(t,function(t){e(t,i(n))})},s.forEach=s.each,s.eachSeries=function(t,e,r){if(r=r||function(){},!t.length)return r();var i=0,n=function(){e(t[i],function(e){e?(r(e),r=function(){}):(i+=1,i>=t.length?r():n())})};n()},s.forEachSeries=s.eachSeries,s.eachLimit=function(t,e,r,i){var n=d(e);n.apply(null,[t,r,i])},s.forEachLimit=s.eachLimit;var d=function(t){return function(e,r,i){if(i=i||function(){},!e.length||0>=t)return i();var n=0,o=0,s=0;!function a(){if(n>=e.length)return i();for(;t>s&&o=e.length?i():a())})}()}},f=function(t){return function(){var e=Array.prototype.slice.call(arguments);return t.apply(null,[s.each].concat(e))}},v=function(t,e){return function(){var r=Array.prototype.slice.call(arguments);return e.apply(null,[d(t)].concat(r))}},g=function(t){return function(){var e=Array.prototype.slice.call(arguments);return t.apply(null,[s.eachSeries].concat(e))}},m=function(t,e,r,i){if(e=l(e,function(t,e){return{index:e,value:t}}),i){var n=[];t(e,function(t,e){r(t.value,function(r,i){n[t.index]=i,e(r)})},function(t){i(t,n)})}else t(e,function(t,e){r(t.value,function(t){e(t)})})};s.map=f(m),s.mapSeries=g(m),s.mapLimit=function(t,e,r,i){return y(e)(t,r,i)};var y=function(t){return v(t,m)};s.reduce=function(t,e,r,i){s.eachSeries(t,function(t,i){r(e,t,function(t,r){e=r,i(t)})},function(t){i(t,e)})},s.inject=s.reduce,s.foldl=s.reduce,s.reduceRight=function(t,e,r,i){var n=l(t,function(t){return t}).reverse();s.reduce(n,e,r,i)},s.foldr=s.reduceRight;var x=function(t,e,r,i){var n=[];e=l(e,function(t,e){return{index:e,value:t}}),t(e,function(t,e){r(t.value,function(r){r&&n.push(t),e()})},function(t){i(l(n.sort(function(t,e){return t.index-e.index}),function(t){return t.value}))})};s.filter=f(x),s.filterSeries=g(x),s.select=s.filter,s.selectSeries=s.filterSeries;var b=function(t,e,r,i){var n=[];e=l(e,function(t,e){return{index:e,value:t}}),t(e,function(t,e){r(t.value,function(r){r||n.push(t),e()})},function(t){i(l(n.sort(function(t,e){return t.index-e.index}),function(t){return t.value}))})};s.reject=f(b),s.rejectSeries=g(b);var _=function(t,e,r,i){t(e,function(t,e){r(t,function(r){r?(i(t),i=function(){}):e()})},function(t){i()})};s.detect=f(_),s.detectSeries=g(_),s.some=function(t,e,r){s.each(t,function(t,i){e(t,function(t){t&&(r(!0),r=function(){}),i()})},function(t){r(!1)})},s.any=s.some,s.every=function(t,e,r){s.each(t,function(t,i){e(t,function(t){t||(r(!1),r=function(){}),i()})},function(t){r(!0)})},s.all=s.every,s.sortBy=function(t,e,r){s.map(t,function(t,r){e(t,function(e,i){e?r(e):r(null,{value:t,criteria:i})})},function(t,e){if(t)return r(t);var i=function(t,e){var r=t.criteria,i=e.criteria;return i>r?-1:r>i?1:0};r(null,l(e.sort(i),function(t){return t.value}))})},s.auto=function(t,e){e=e||function(){};var r=p(t),i=r.length;if(!i)return e();var n={},o=[],a=function(t){o.unshift(t)},l=function(t){for(var e=0;ei;){var o=i+(n-i+1>>>1);r(e,t[o])>=0?i=o:n=o-1}return i}function n(t,e,n,o){return t.started||(t.started=!0),h(e)||(e=[e]),0==e.length?s.setImmediate(function(){t.drain&&t.drain()}):void u(e,function(e){var a={data:e,priority:n,callback:"function"==typeof o?o:null};t.tasks.splice(i(t.tasks,a,r)+1,0,a),t.saturated&&t.tasks.length===t.concurrency&&t.saturated(),s.setImmediate(t.process)})}var o=s.queue(t,e);return o.push=function(t,e,r){n(o,t,e,r)},delete o.unshift,o},s.cargo=function(t,e){var r=!1,i=[],n={tasks:i,payload:e,saturated:null,empty:null,drain:null,drained:!0,push:function(t,r){h(t)||(t=[t]),u(t,function(t){i.push({data:t,callback:"function"==typeof r?r:null}),n.drained=!1,n.saturated&&i.length===e&&n.saturated()}),s.setImmediate(n.process)},process:function o(){if(!r){if(0===i.length)return n.drain&&!n.drained&&n.drain(),void(n.drained=!0);var s="number"==typeof e?i.splice(0,e):i.splice(0,i.length),a=l(s,function(t){return t.data});n.empty&&n.empty(),r=!0,t(a,function(){r=!1;var t=arguments;u(s,function(e){e.callback&&e.callback.apply(null,t)}),o()})}},length:function(){return i.length},running:function(){return r}};return n};var S=function(t){return function(e){var r=Array.prototype.slice.call(arguments,1);e.apply(null,r.concat([function(e){var r=Array.prototype.slice.call(arguments,1);"undefined"!=typeof console&&(e?console.error&&console.error(e):console[t]&&u(r,function(e){console[t](e)}))}]))}};s.log=S("log"),s.dir=S("dir"),s.memoize=function(t,e){var r={},i={};e=e||function(t){return t};var n=function(){var n=Array.prototype.slice.call(arguments),o=n.pop(),a=e.apply(null,n);a in r?s.nextTick(function(){o.apply(null,r[a])}):a in i?i[a].push(o):(i[a]=[o],t.apply(null,n.concat([function(){r[a]=arguments;var t=i[a];delete i[a];for(var e=0,n=t.length;n>e;e++)t[e].apply(null,arguments)}])))};return n.memo=r,n.unmemoized=t,n},s.unmemoize=function(t){return function(){return(t.unmemoized||t).apply(null,arguments)}},s.times=function(t,e,r){for(var i=[],n=0;t>n;n++)i.push(n);return s.map(i,e,r)},s.timesSeries=function(t,e,r){for(var i=[],n=0;t>n;n++)i.push(n);return s.mapSeries(i,e,r)},s.seq=function(){var t=arguments;return function(){var e=this,r=Array.prototype.slice.call(arguments),i=r.pop();s.reduce(t,r,function(t,r,i){r.apply(e,t.concat([function(){var t=arguments[0],e=Array.prototype.slice.call(arguments,1);i(t,e)}]))},function(t,r){i.apply(e,[t].concat(r))})}},s.compose=function(){return s.seq.apply(null,Array.prototype.reverse.call(arguments))};var w=function(t,e){var r=function(){var r=this,i=Array.prototype.slice.call(arguments),n=i.pop();return t(e,function(t,e){t.apply(r,i.concat([e]))},n)};if(arguments.length>2){var i=Array.prototype.slice.call(arguments,2);return r.apply(this,i)}return r};s.applyEach=f(w),s.applyEachSeries=g(w),s.forever=function(t,e){function r(i){if(i){if(e)return e(i);throw i}t(r)}r()},"undefined"!=typeof r&&r.exports?r.exports=s:"undefined"!=typeof t&&t.amd?t([],function(){return s}):n.async=s}()}).call(this,e("_process"))},{_process:18}],28:[function(t,e,r){function i(t,e){a.call(this),e=e||10,this.baseUrl=t||"",this.progress=0,this.loading=!1,this._progressChunk=0,this._beforeMiddleware=[],this._afterMiddleware=[],this._boundLoadResource=this._loadResource.bind(this),this._boundOnLoad=this._onLoad.bind(this),this._buffer=[],this._numToLoad=0,this._queue=n.queue(this._boundLoadResource,e),this.resources={}}var n=t("async"),o=t("url"),s=t("./Resource"),a=t("eventemitter3");i.prototype=Object.create(a.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.add=i.prototype.enqueue=function(t,e,r,i){if(Array.isArray(t)){for(var n=0;n0)if(this.xhrType===i.XHR_RESPONSE_TYPE.TEXT)this.data=t.responseText;else if(this.xhrType===i.XHR_RESPONSE_TYPE.JSON)try{this.data=JSON.parse(t.responseText),this.isJson=!0}catch(r){this.error=new Error("Error trying to parse loaded json:",r)}else if(this.xhrType===i.XHR_RESPONSE_TYPE.DOCUMENT)try{if(window.DOMParser){var n=new DOMParser;this.data=n.parseFromString(t.responseText,"text/xml")}else{var o=document.createElement("div");o.innerHTML=t.responseText,this.data=o}this.isXml=!0}catch(r){this.error=new Error("Error trying to parse loaded xml:",r)}else this.data=t.response||t.responseText;else this.error=new Error("["+t.status+"]"+t.statusText+":"+t.responseURL);this.complete()},i.prototype._determineCrossOrigin=function(t,e){if(0===t.indexOf("data:"))return"";e=e||window.location,u||(u=document.createElement("a")),u.href=t,t=a.parse(u.href);var r=!t.port&&""===e.port||t.port===e.port;return t.hostname===e.hostname&&r&&t.protocol===e.protocol?"":"anonymous"},i.prototype._determineXhrType=function(){return i._xhrTypeMap[this._getExtension()]||i.XHR_RESPONSE_TYPE.TEXT},i.prototype._determineLoadType=function(){return i._loadTypeMap[this._getExtension()]||i.LOAD_TYPE.XHR},i.prototype._getExtension=function(){var t,e=this.url;if(this.isDataUrl){var r=e.indexOf("/");t=e.substring(r+1,e.indexOf(";",r))}else{var i=e.indexOf("?");-1!==i&&(e=e.substring(0,i)),t=e.substring(e.lastIndexOf(".")+1)}return t},i.prototype._getMimeFromXhrType=function(t){switch(t){case i.XHR_RESPONSE_TYPE.BUFFER:return"application/octet-binary";case i.XHR_RESPONSE_TYPE.BLOB:return"application/blob";case i.XHR_RESPONSE_TYPE.DOCUMENT:return"application/xml";case i.XHR_RESPONSE_TYPE.JSON:return"application/json";case i.XHR_RESPONSE_TYPE.DEFAULT:case i.XHR_RESPONSE_TYPE.TEXT:default:return"text/plain"}},i.LOAD_TYPE={XHR:1,IMAGE:2,AUDIO:3,VIDEO:4},i.XHR_READY_STATE={UNSENT:0,OPENED:1,HEADERS_RECEIVED:2,LOADING:3,DONE:4},i.XHR_RESPONSE_TYPE={DEFAULT:"text",BUFFER:"arraybuffer",BLOB:"blob",DOCUMENT:"document",JSON:"json",TEXT:"text"},i._loadTypeMap={gif:i.LOAD_TYPE.IMAGE,png:i.LOAD_TYPE.IMAGE,bmp:i.LOAD_TYPE.IMAGE,jpg:i.LOAD_TYPE.IMAGE,jpeg:i.LOAD_TYPE.IMAGE,tif:i.LOAD_TYPE.IMAGE,tiff:i.LOAD_TYPE.IMAGE,webp:i.LOAD_TYPE.IMAGE,tga:i.LOAD_TYPE.IMAGE},i._xhrTypeMap={xhtml:i.XHR_RESPONSE_TYPE.DOCUMENT,html:i.XHR_RESPONSE_TYPE.DOCUMENT,htm:i.XHR_RESPONSE_TYPE.DOCUMENT,xml:i.XHR_RESPONSE_TYPE.DOCUMENT,tmx:i.XHR_RESPONSE_TYPE.DOCUMENT,tsx:i.XHR_RESPONSE_TYPE.DOCUMENT,svg:i.XHR_RESPONSE_TYPE.DOCUMENT,gif:i.XHR_RESPONSE_TYPE.BLOB,png:i.XHR_RESPONSE_TYPE.BLOB,bmp:i.XHR_RESPONSE_TYPE.BLOB,jpg:i.XHR_RESPONSE_TYPE.BLOB,jpeg:i.XHR_RESPONSE_TYPE.BLOB,tif:i.XHR_RESPONSE_TYPE.BLOB,tiff:i.XHR_RESPONSE_TYPE.BLOB,webp:i.XHR_RESPONSE_TYPE.BLOB,tga:i.XHR_RESPONSE_TYPE.BLOB,json:i.XHR_RESPONSE_TYPE.JSON,text:i.XHR_RESPONSE_TYPE.TEXT,txt:i.XHR_RESPONSE_TYPE.TEXT},i.setExtensionLoadType=function(t,e){o(i._loadTypeMap,t,e)},i.setExtensionXhrType=function(t,e){o(i._xhrTypeMap,t,e)}},{eventemitter3:25,url:23}],30:[function(t,e,r){e.exports={_keyStr:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",encodeBinary:function(t){for(var e,r="",i=new Array(4),n=0,o=0,s=0;n>2,i[1]=(3&e[0])<<4|e[1]>>4,i[2]=(15&e[1])<<2|e[2]>>6,i[3]=63&e[2],s=n-(t.length-1)){case 2:i[3]=64,i[2]=64;break;case 1:i[3]=64}for(o=0;o","Richard Davey "],main:"./src/index.js",homepage:"http://goodboydigital.com/",bugs:"https://github.com/pixijs/pixi.js/issues",license:"MIT",repository:{type:"git",url:"https://github.com/pixijs/pixi.js.git"},scripts:{start:"gulp && gulp watch",test:"gulp && testem ci",build:"gulp",docs:"jsdoc -c ./gulp/util/jsdoc.conf.json -R README.md"},files:["bin/","src/","CONTRIBUTING.md","LICENSE","package.json","README.md"],dependencies:{async:"^1.5.0",brfs:"^1.4.1",earcut:"^2.0.7",eventemitter3:"^1.1.1","object-assign":"^4.0.1","pixi-gl-core":"git+https://github.com/GoodBoyDigital/pixi-gl-core.git","resource-loader":"^1.6.4"},devDependencies:{browserify:"^11.1.0",chai:"^3.2.0",del:"^2.0.2",gulp:"^3.9.0","gulp-cached":"^1.1.0","gulp-concat":"^2.6.0","gulp-debug":"^2.1.0","gulp-header":"^1.7.1","gulp-jshint":"^1.11.2","gulp-mirror":"^0.4.0","gulp-plumber":"^1.0.1","gulp-rename":"^1.2.2","gulp-sourcemaps":"^1.5.2","gulp-uglify":"^1.4.1","gulp-util":"^3.0.6","jaguarjs-jsdoc":"git+https://github.com/davidshimjs/jaguarjs-jsdoc.git",jsdoc:"^3.3.2","jshint-summary":"^0.4.0",minimist:"^1.2.0",mocha:"^2.3.2","require-dir":"^0.3.0","run-sequence":"^1.1.2",testem:"^0.9.4","vinyl-buffer":"^1.0.0","vinyl-source-stream":"^1.1.0",watchify:"^3.4.0"},browserify:{transform:["brfs"]}}},{}],35:[function(t,e,r){function i(t){var e=document.createElement("div");e.style.width="100px",e.style.height="100px",e.style.position="absolute",e.style.top=0,e.style.left=0,e.style.zIndex=2,this.div=e,this.pool=[],this.renderId=0,this.debug=!1,this.renderer=t,this.children=[],this._onKeyDown=this._onKeyDown.bind(this),this._onMouseMove=this._onMouseMove.bind(this),this.isActive=!1,window.addEventListener("keydown",this._onKeyDown,!1)}var n=t("../core");Object.assign(n.DisplayObject.prototype,t("./accessibleTarget")),i.prototype.constructor=i,e.exports=i,i.prototype.activate=function(){this.isActive||(this.isActive=!0,window.document.addEventListener("mousemove",this._onMouseMove,!0),window.removeEventListener("keydown",this._onKeyDown,!1),this.renderer.on("postrender",this.update,this),this.renderer.view.parentNode.appendChild(this.div))},i.prototype.deactivate=function(){this.isActive&&(this.isActive=!1,window.document.removeEventListener("mousemove",this._onMouseMove),window.addEventListener("keydown",this._onKeyDown,!1),this.renderer.off("postrender",this.update),this.div.parentNode.removeChild(this.div))},i.prototype.updateAccessibleObjects=function(t){if(t.visible){t.accessible&&t.interactive&&(t._accessibleActive||this.addChild(t),t.renderId=this.renderId);for(var e=t.children,r=e.length-1;r>=0;r--)this.updateAccessibleObjects(e[r])}},i.prototype.update=function(){this.updateAccessibleObjects(this.renderer._lastObjectRendered);var t=this.renderer.view.getBoundingClientRect(),e=t.width/this.renderer.width,r=t.height/this.renderer.height,i=this.div;i.style.left=t.left+"px",i.style.top=t.top+"px",i.style.width=this.renderer.width+"px",i.style.height=this.renderer.height+"px";for(var o=0;othis.renderer.width&&(t.width=this.renderer.width-t.x),t.y+t.height>this.renderer.height&&(t.height=this.renderer.height-t.y)},i.prototype.addChild=function(t){var e=this.pool.pop();e||(e=document.createElement("button"),e.style.width="100px",e.style.height="100px",e.style.backgroundColor=this.debug?"rgba(255,0,0,0.5)":"transparent",e.style.position="absolute",e.style.zIndex=2,e.style.borderStyle="none",e.addEventListener("click",this._onClick.bind(this)),e.addEventListener("focus",this._onFocus.bind(this)),e.addEventListener("focusout",this._onFocusOut.bind(this))),e.title=t.accessibleTitle||"displayObject "+this.tabIndex,t._accessibleActive=!0,t._accessibleDiv=e,e.displayObject=t,this.children.push(t),this.div.appendChild(t._accessibleDiv),t._accessibleDiv.tabIndex=t.tabIndex},i.prototype._onClick=function(t){var e=this.renderer.plugins.interaction;e.dispatchEvent(t.target.displayObject,"click",e.eventData)},i.prototype._onFocus=function(t){var e=this.renderer.plugins.interaction;e.dispatchEvent(t.target.displayObject,"mouseover",e.eventData)},i.prototype._onFocusOut=function(t){var e=this.renderer.plugins.interaction;e.dispatchEvent(t.target.displayObject,"mouseout",e.eventData)},i.prototype._onKeyDown=function(t){9===t.keyCode&&this.activate()},i.prototype._onMouseMove=function(){this.deactivate()},i.prototype.destroy=function(){this.div=null;for(var t=0;t1)for(var r=0;e>r;r++)this.addChild(arguments[r]);else t.parent&&t.parent.removeChild(t),t.parent=this,this.children.push(t),this.onChildrenChange(this.children.length-1),t.emit("added",this);return t},i.prototype.addChildAt=function(t,e){if(e>=0&&e<=this.children.length)return t.parent&&t.parent.removeChild(t),t.parent=this,this.children.splice(e,0,t),this.onChildrenChange(e),t.emit("added",this),t;throw new Error(t+"addChildAt: The index "+e+" supplied is out of bounds "+this.children.length)},i.prototype.swapChildren=function(t,e){if(t!==e){var r=this.getChildIndex(t),i=this.getChildIndex(e);if(0>r||0>i)throw new Error("swapChildren: Both the supplied DisplayObjects must be children of the caller.");this.children[r]=e,this.children[i]=t,this.onChildrenChange(i>r?r:i)}},i.prototype.getChildIndex=function(t){var e=this.children.indexOf(t);if(-1===e)throw new Error("The supplied DisplayObject must be a child of the caller");return e},i.prototype.setChildIndex=function(t,e){if(0>e||e>=this.children.length)throw new Error("The supplied index is out of bounds");var r=this.getChildIndex(t);o.removeItems(this.children,r,1),this.children.splice(e,0,t),this.onChildrenChange(e)},i.prototype.getChildAt=function(t){if(0>t||t>=this.children.length)throw new Error("getChildAt: Supplied index "+t+" does not exist in the child list, or the supplied DisplayObject is not a child of the caller");return this.children[t]},i.prototype.removeChild=function(t){var e=arguments.length;if(e>1)for(var r=0;e>r;r++)this.removeChild(arguments[r]);else{var i=this.children.indexOf(t);if(-1===i)return;t.parent=null,o.removeItems(this.children,i,1),this.onChildrenChange(i),t.emit("removed",this)}return t},i.prototype.removeChildAt=function(t){var e=this.getChildAt(t);return e.parent=null,o.removeItems(this.children,t,1),this.onChildrenChange(t),e.emit("removed",this),e},i.prototype.removeChildren=function(t,e){var r,i,n=t||0,o="number"==typeof e?e:this.children.length,s=o-n;if(s>0&&o>=s){for(r=this.children.splice(n,s),i=0;it;++t)this.children[t].updateTransform();this.dirty=!1}},i.prototype.containerUpdateTransform=i.prototype.updateTransform,i.prototype.getBounds=function(){if(!this._currentBounds){if(0===this.children.length)return n.Rectangle.EMPTY;for(var t,e,r,i=1/0,o=1/0,s=-(1/0),a=-(1/0),h=!1,u=0,l=this.children.length;l>u;++u){var c=this.children[u];c.visible&&(h=!0,t=this.children[u].getBounds(),i=ie?s:e,a=a>r?a:r)}if(!h)return n.Rectangle.EMPTY;var p=this._bounds;p.x=i,p.y=o,p.width=s-i,p.height=a-o,this._currentBounds=p}return this._currentBounds},i.prototype.containerGetBounds=i.prototype.getBounds,i.prototype.getLocalBounds=function(){var t=this.worldTransform;this.worldTransform=n.Matrix.IDENTITY;for(var e=0,r=this.children.length;r>e;++e)this.children[e].updateTransform();return this.worldTransform=t,this._currentBounds=null,this.getBounds(n.Matrix.IDENTITY)},i.prototype.renderWebGL=function(t){if(this.visible&&!(this.worldAlpha<=0)&&this.renderable){var e,r;if(this._mask||this._filters){for(t.currentRenderer.flush(),this._filters&&this._filters.length&&t.filterManager.pushFilter(this,this._filters),this._mask&&t.maskManager.pushMask(this,this._mask),t.currentRenderer.start(),this._renderWebGL(t),e=0,r=this.children.length;r>e;e++)this.children[e].renderWebGL(t);t.currentRenderer.flush(),this._mask&&t.maskManager.popMask(this,this._mask),this._filters&&t.filterManager.popFilter(),t.currentRenderer.start()}else for(this._renderWebGL(t),e=0,r=this.children.length;r>e;++e)this.children[e].renderWebGL(t)}},i.prototype._renderWebGL=function(t){},i.prototype._renderCanvas=function(t){},i.prototype.renderCanvas=function(t){if(this.visible&&!(this.alpha<=0)&&this.renderable){this._mask&&t.maskManager.pushMask(this._mask,t),this._renderCanvas(t);for(var e=0,r=this.children.length;r>e;++e)this.children[e].renderCanvas(t);this._mask&&t.maskManager.popMask(t)}},i.prototype.destroy=function(t){if(s.prototype.destroy.call(this),t)for(var e=0,r=this.children.length;r>e;++e)this.children[e].destroy(t);this.removeChildren(),this.children=null}},{"../math":48,"../textures/RenderTexture":91,"../utils":98,"./DisplayObject":40}],40:[function(t,e,r){function i(){s.call(this),this.position=new n.Point,this.scale=new n.Point(1,1),this.pivot=new n.Point(0,0),this.skew=new n.Point(0,0),this._rotation=0,this.alpha=1,this.visible=!0,this.renderable=!0,this.parent=null,this.worldAlpha=1,this.worldTransform=new n.Matrix,this.localTransform=new n.Matrix,this.filterArea=null,this._sr=0,this._cr=1,this._bounds=new n.Rectangle(0,0,1,1),this._currentBounds=null,this._mask=null,this.dirty=!0}var n=t("../math"),o=t("../textures/RenderTexture"),s=t("eventemitter3"),a=(t("../const"),new n.Matrix),h={worldTransform:new n.Matrix,worldAlpha:1,children:[]};i.prototype=Object.create(s.prototype),i.prototype.constructor=i,e.exports=i,Object.defineProperties(i.prototype,{x:{get:function(){return this.position.x},set:function(t){this.position.x=t,this.dirty=!0}},y:{get:function(){return this.position.y},set:function(t){this.position.y=t,this.dirty=!0}},scaleX:{get:function(){return this.scale.x},set:function(t){this.scale.x=t,this.dirty=!0}},scaleY:{get:function(){return this.scale.y},set:function(t){this.scale.y=t,this.dirty=!0}},rotation:{get:function(){return this._rotation},set:function(t){this._rotation=t,this.dirty=!0,this._sr=Math.sin(t),this._cr=Math.cos(t)}},scaleY:{get:function(){return this.scale.y},set:function(t){this.scale.y=t,this.dirty=!0}},worldVisible:{get:function(){var t=this;do{if(!t.visible)return!1;t=t.parent}while(t);return!0}},mask:{get:function(){return this._mask},set:function(t){this._mask&&(this._mask.renderable=!0),this._mask=t,this._mask&&(this._mask.renderable=!1)}},filters:{get:function(){return this._filters&&this._filters.slice()},set:function(t){this._filters=t&&t.slice()}}}),i.prototype.updateTransform=function(){var t=this.parent.worldTransform,e=this.worldTransform,r=this.localTransform;this.dirty&&(r.a=this._cr*this.scale.x,r.b=this._sr*this.scale.x,r.c=-this._sr*this.scale.y,r.d=this._cr*this.scale.y,r.tx=this.position.x-(this.pivot.x*r.a+this.pivot.y*r.c),r.ty=this.position.y-(this.pivot.x*r.b+this.pivot.y*r.d)),(this.dirty||this.parent.dirty)&&(e.a=r.a*t.a+r.b*t.c,e.b=r.a*t.b+r.b*t.d,e.c=r.c*t.a+r.d*t.c,e.d=r.c*t.b+r.d*t.d,e.tx=r.tx*t.a+r.ty*t.c+t.tx,e.ty=r.tx*t.b+r.ty*t.d+t.ty,this._currentBounds=null),this.worldAlpha=this.alpha*this.parent.worldAlpha},i.prototype.displayObjectUpdateTransform=i.prototype.updateTransform,i.prototype.getBounds=function(t){return n.Rectangle.EMPTY},i.prototype.getLocalBounds=function(){return this.getBounds(n.Matrix.IDENTITY)},i.prototype.toGlobal=function(t){return this.parent?this.displayObjectUpdateTransform():(this.parent=h,this.displayObjectUpdateTransform(),this.parent=null),this.worldTransform.apply(t)},i.prototype.toLocal=function(t,e,r){return e&&(t=e.toGlobal(t)),this.parent?this.displayObjectUpdateTransform():(this.parent=h,this.displayObjectUpdateTransform(),this.parent=null),this.worldTransform.applyInverse(t,r)},i.prototype.renderWebGL=function(t){},i.prototype.renderCanvas=function(t){},i.prototype.generateTexture=function(t,e,r){var i=this.getLocalBounds(),n=new o(t,0|i.width,0|i.height,e,r);return a.tx=-i.x,a.ty=-i.y,n.render(this,a),n},i.prototype.setParent=function(t){if(!t||!t.addChild)throw new Error("setParent: Argument must be a Container");return t.addChild(this),t},i.prototype.setTransform=function(t,e,r,i,n,o,s,a,h){return this.position.x=t||0,this.position.y=e||0,this.scale.x=r?r:1,this.scale.y=i?i:1,this.rotation=n||0,this.skew.x=o||0,this.skew.y=s||0,this.pivot.x=a||0,this.pivot.y=h||0,this.dirty=!0,this},i.prototype.destroy=function(){this.position=null,this.scale=null,this.pivot=null,this.skew=null,this.parent=null,this._bounds=null,this._currentBounds=null,this._mask=null,this.worldTransform=null,this.filterArea=null}},{"../const":38,"../math":48,"../textures/RenderTexture":91,eventemitter3:25}],41:[function(t,e,r){function i(){n.call(this),this.fillAlpha=1,this.lineWidth=0,this.lineColor=0,this.graphicsData=[],this.tint=16777215,this._prevTint=16777215,this.blendMode=l.BLEND_MODES.NORMAL,this.currentPath=null,this._webGL={},this.isMask=!1,this.boundsPadding=0,this._localBounds=new u.Rectangle(0,0,1,1),this.dirty=!0,this.glDirty=!1,this.boundsDirty=!0,this.cachedSpriteDirty=!1}var n=t("../display/Container"),o=t("../textures/Texture"),s=t("../renderers/canvas/utils/CanvasBuffer"),a=t("../renderers/canvas/utils/CanvasGraphics"),h=t("./GraphicsData"),u=t("../math"),l=t("../const"),c=new u.Point;i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.clone=function(){var t=new i;t.renderable=this.renderable,t.fillAlpha=this.fillAlpha,t.lineWidth=this.lineWidth,t.lineColor=this.lineColor,t.tint=this.tint,t.blendMode=this.blendMode,t.isMask=this.isMask,t.boundsPadding=this.boundsPadding,t.dirty=!0,t.glDirty=!0,t.cachedSpriteDirty=this.cachedSpriteDirty;for(var e=0;e=c;++c)l=c/s,n=h+(t-h)*l,o=u+(e-u)*l,a.push(n+(t+(r-t)*l-n)*l,o+(e+(i-e)*l-o)*l);return this.dirty=this.boundsDirty=!0,this},i.prototype.bezierCurveTo=function(t,e,r,i,n,o){this.currentPath?0===this.currentPath.shape.points.length&&(this.currentPath.shape.points=[0,0]):this.moveTo(0,0);for(var s,a,h,u,l,c=20,p=this.currentPath.shape.points,d=p[p.length-2],f=p[p.length-1],v=0,g=1;c>=g;++g)v=g/c,s=1-v,a=s*s,h=a*s,u=v*v,l=u*v,p.push(h*d+3*a*v*t+3*s*u*r+l*n,h*f+3*a*v*e+3*s*u*i+l*o);return this.dirty=this.boundsDirty=!0,this},i.prototype.arcTo=function(t,e,r,i,n){this.currentPath?0===this.currentPath.shape.points.length&&this.currentPath.shape.points.push(t,e):this.moveTo(t,e);var o=this.currentPath.shape.points,s=o[o.length-2],a=o[o.length-1],h=a-e,u=s-t,l=i-e,c=r-t,p=Math.abs(h*c-u*l);if(1e-8>p||0===n)(o[o.length-2]!==t||o[o.length-1]!==e)&&o.push(t,e);else{var d=h*h+u*u,f=l*l+c*c,v=h*l+u*c,g=n*Math.sqrt(d)/p,m=n*Math.sqrt(f)/p,y=g*v/d,x=m*v/f,b=g*c+m*u,_=g*l+m*h,T=u*(m+y),E=h*(m+y),S=c*(g+x),w=l*(g+x),C=Math.atan2(E-_,T-b),A=Math.atan2(w-_,S-b);this.arc(b+t,_+e,n,C,A,u*l>c*h)}return this.dirty=this.boundsDirty=!0,this},i.prototype.arc=function(t,e,r,i,n,o){if(o=o||!1,i===n)return this;!o&&i>=n?n+=2*Math.PI:o&&n>=i&&(i+=2*Math.PI);var s=o?-1*(i-n):n-i,a=40*Math.ceil(Math.abs(s)/(2*Math.PI));if(0===s)return this;var h=t+Math.cos(i)*r,u=e+Math.sin(i)*r;this.currentPath?this.currentPath.shape.points.push(h,u):this.moveTo(h,u);for(var l=this.currentPath.shape.points,c=s/(2*a),p=2*c,d=Math.cos(c),f=Math.sin(c),v=a-1,g=v%1/v,m=0;v>=m;m++){var y=m+g*m,x=c+i+p*y,b=Math.cos(x),_=-Math.sin(x);l.push((d*b+f*_)*r+t,(d*-_+f*b)*r+e)}return this.dirty=this.boundsDirty=!0,this},i.prototype.beginFill=function(t,e){return this.filling=!0,this.fillColor=t||0,this.fillAlpha=void 0===e?1:e,this.currentPath&&this.currentPath.shape.points.length<=2&&(this.currentPath.fill=this.filling,this.currentPath.fillColor=this.fillColor,this.currentPath.fillAlpha=this.fillAlpha),this},i.prototype.endFill=function(){return this.filling=!1,this.fillColor=null,this.fillAlpha=1,this},i.prototype.drawRect=function(t,e,r,i){return this.drawShape(new u.Rectangle(t,e,r,i)),this},i.prototype.drawRoundedRect=function(t,e,r,i,n){return this.drawShape(new u.RoundedRectangle(t,e,r,i,n)),this},i.prototype.drawCircle=function(t,e,r){return this.drawShape(new u.Circle(t,e,r)),this},i.prototype.drawEllipse=function(t,e,r,i){return this.drawShape(new u.Ellipse(t,e,r,i)),this},i.prototype.drawPolygon=function(t){var e=t,r=!0;if(e instanceof u.Polygon&&(r=e.closed,e=e.points),!Array.isArray(e)){e=new Array(arguments.length);for(var i=0;ig?g:S,S=S>y?y:S,S=S>b?b:S,w=w>m?m:w,w=w>x?x:w,w=w>_?_:w,T=g>T?g:T,T=y>T?y:T,T=b>T?b:T,E=m>E?m:E,E=x>E?x:E,E=_>E?_:E,this._bounds.x=S,this._bounds.width=T-S,this._bounds.y=w,this._bounds.height=E-w,this._currentBounds=this._bounds}return this._currentBounds},i.prototype.containsPoint=function(t){this.worldTransform.applyInverse(t,c);for(var e=this.graphicsData,r=0;rs?s:t,e=s+h>e?s+h:e,r=r>a?a:r,i=a+u>i?a+u:i;else if(d===l.SHAPES.CIRC)s=n.x,a=n.y,h=n.radius+f/2,u=n.radius+f/2,t=t>s-h?s-h:t,e=s+h>e?s+h:e,r=r>a-u?a-u:r,i=a+u>i?a+u:i;else if(d===l.SHAPES.ELIP)s=n.x,a=n.y,h=n.width+f/2,u=n.height+f/2,t=t>s-h?s-h:t,e=s+h>e?s+h:e,r=r>a-u?a-u:r,i=a+u>i?a+u:i;else{o=n.points;for(var v=0;vs-f?s-f:t,e=s+f>e?s+f:e,r=r>a-f?a-f:r,i=a+f>i?a+f:i}}else t=0,e=0,r=0,i=0;var g=this.boundsPadding;this._localBounds.x=t-g,this._localBounds.width=e-t+2*g,this._localBounds.y=r-g,this._localBounds.height=i-r+2*g},i.prototype.drawShape=function(t){this.currentPath&&this.currentPath.shape.points.length<=2&&this.graphicsData.pop(),this.currentPath=null;var e=new h(this.lineWidth,this.lineColor,this.lineAlpha,this.fillColor,this.fillAlpha,this.filling,t);return this.graphicsData.push(e),e.type===l.SHAPES.POLY&&(e.shape.closed=e.shape.closed||this.filling,this.currentPath=e),this.dirty=this.boundsDirty=!0,e},i.prototype.destroy=function(){n.prototype.destroy.apply(this,arguments);for(var t=0;ta;a++)e=s.data[a],1===s.data[a].mode?(r.stencilManager.pushStencil(t,e),i.uniform1f(r.shaderManager.complexPrimitiveShader.uniforms.alpha._location,t.worldAlpha*e.alpha),i.drawElements(i.TRIANGLE_FAN,4,i.UNSIGNED_SHORT,2*(e.indices.length-4)),r.stencilManager.popStencil(t,e)):(o=r.shaderManager.primitiveShader,r.shaderManager.setShader(o),i.uniformMatrix3fv(o.uniforms.translationMatrix._location,!1,t.worldTransform.toArray(!0)),i.uniformMatrix3fv(o.uniforms.projectionMatrix._location,!1,r.currentRenderTarget.projectionMatrix.toArray(!0)),i.uniform3fv(o.uniforms.tint._location,n.hex2rgb(t.tint)),i.uniform1f(o.uniforms.alpha._location,t.worldAlpha),i.bindBuffer(i.ARRAY_BUFFER,e.buffer),i.vertexAttribPointer(o.attributes.aVertexPosition,2,i.FLOAT,!1,24,0),i.vertexAttribPointer(o.attributes.aColor,4,i.FLOAT,!1,24,8),i.bindBuffer(i.ELEMENT_ARRAY_BUFFER,e.indexBuffer),i.drawElements(i.TRIANGLE_STRIP,e.indices.length,i.UNSIGNED_SHORT,0)),r.drawCount++},i.prototype.updateGraphics=function(t){var e=this.renderer.gl,r=t._webGL[e.id];r||(r=t._webGL[e.id]={lastIndex:0,data:[],gl:e}),t.dirty=!1;var i;if(t.clearDirty){for(t.clearDirty=!1,i=0;i=6)if(a.points.length<2*this.maximumSimplePolySize){o=this.switchMode(r,0);var h=this.buildPoly(a,o);h||(o=this.switchMode(r,1),this.buildComplexPoly(a,o))}else o=this.switchMode(r,1),this.buildComplexPoly(a,o);a.lineWidth>0&&(o=this.switchMode(r,0),this.buildLine(a,o))}else o=this.switchMode(r,0),a.type===s.SHAPES.RECT?this.buildRectangle(a,o):a.type===s.SHAPES.CIRC||a.type===s.SHAPES.ELIP?this.buildCircle(a,o):a.type===s.SHAPES.RREC&&this.buildRoundedRectangle(a,o);r.lastIndex++}for(i=0;i32e4||r.mode!==e||1===e)&&(r=this.graphicsDataPool.pop()||new u(t.gl),r.mode=e,t.data.push(r))):(r=this.graphicsDataPool.pop()||new u(t.gl),r.mode=e,t.data.push(r)),r.dirty=!0,r},i.prototype.buildRectangle=function(t,e){var r=t.shape,i=r.x,o=r.y,s=r.width,a=r.height;if(t.fill){var h=n.hex2rgb(t.fillColor),u=t.fillAlpha,l=h[0]*u,c=h[1]*u,p=h[2]*u,d=e.points,f=e.indices,v=d.length/6;d.push(i,o),d.push(l,c,p,u),d.push(i+s,o),d.push(l,c,p,u),d.push(i,o+a),d.push(l,c,p,u),d.push(i+s,o+a),d.push(l,c,p,u),f.push(v,v,v+1,v+2,v+3,v+3)}if(t.lineWidth){var g=t.points;t.points=[i,o,i+s,o,i+s,o+a,i,o+a,i,o],this.buildLine(t,e),t.points=g}},i.prototype.buildRoundedRectangle=function(t,e){var r=t.shape,i=r.x,o=r.y,s=r.width,a=r.height,h=r.radius,u=[];if(u.push(i,o+h),this.quadraticBezierCurve(i,o+a-h,i,o+a,i+h,o+a,u),this.quadraticBezierCurve(i+s-h,o+a,i+s,o+a,i+s,o+a-h,u),this.quadraticBezierCurve(i+s,o+h,i+s,o,i+s-h,o,u),this.quadraticBezierCurve(i+h,o,i,o,i,o+h+1e-10,u),t.fill){var c=n.hex2rgb(t.fillColor),p=t.fillAlpha,d=c[0]*p,f=c[1]*p,v=c[2]*p,g=e.points,m=e.indices,y=g.length/6,x=l(u,null,2),b=0;for(b=0;b=m;m++)g=m/f,h=a(t,r,g),u=a(e,i,g),l=a(r,n,g),c=a(i,o,g),p=a(h,l,g),d=a(u,c,g),v.push(p,d);return v},i.prototype.buildCircle=function(t,e){var r,i,o=t.shape,a=o.x,h=o.y;t.type===s.SHAPES.CIRC?(r=o.radius,i=o.radius):(r=o.width,i=o.height);var u=Math.floor(30*Math.sqrt(o.radius))||Math.floor(15*Math.sqrt(o.width+o.height)),l=2*Math.PI/u,c=0;if(t.fill){var p=n.hex2rgb(t.fillColor),d=t.fillAlpha,f=p[0]*d,v=p[1]*d,g=p[2]*d,m=e.points,y=e.indices,x=m.length/6;for(y.push(x),c=0;u+1>c;c++)m.push(a,h,f,v,g,d),m.push(a+Math.sin(l*c)*r,h+Math.cos(l*c)*i,f,v,g,d),y.push(x++,x++);y.push(x-1)}if(t.lineWidth){var b=t.points;for(t.points=[],c=0;u+1>c;c++)t.points.push(a+Math.sin(l*c)*r,h+Math.cos(l*c)*i);this.buildLine(t,e),t.points=b}},i.prototype.buildLine=function(t,e){var r=0,i=t.points;if(0!==i.length){var s=new o.Point(i[0],i[1]),a=new o.Point(i[i.length-2],i[i.length-1]);if(s.x===a.x&&s.y===a.y){i=i.slice(),i.pop(),i.pop(),a=new o.Point(i[i.length-2],i[i.length-1]);var h=a.x+.5*(s.x-a.x),u=a.y+.5*(s.y-a.y);i.unshift(h,u),i.push(h,u)}var l,c,p,d,f,v,g,m,y,x,b,_,T,E,S,w,C,A,M,R,O,D,P,F=e.points,L=e.indices,B=i.length/2,I=i.length,N=F.length/6,U=t.lineWidth/2,k=n.hex2rgb(t.lineColor),j=t.lineAlpha,G=k[0]*j,Y=k[1]*j,X=k[2]*j;for(p=i[0],d=i[1],f=i[2],v=i[3],y=-(d-v),x=p-f,P=Math.sqrt(y*y+x*x),y/=P,x/=P,y*=U,x*=U,F.push(p-y,d-x,G,Y,X,j),F.push(p+y,d+x,G,Y,X,j),r=1;B-1>r;r++)p=i[2*(r-1)],d=i[2*(r-1)+1],f=i[2*r],v=i[2*r+1],g=i[2*(r+1)],m=i[2*(r+1)+1],y=-(d-v),x=p-f,P=Math.sqrt(y*y+x*x),y/=P,x/=P,y*=U,x*=U,b=-(v-m),_=f-g,P=Math.sqrt(b*b+_*_),b/=P,_/=P,b*=U,_*=U,S=-x+d-(-x+v),w=-y+f-(-y+p),C=(-y+p)*(-x+v)-(-y+f)*(-x+d),A=-_+m-(-_+v),M=-b+f-(-b+g),R=(-b+g)*(-_+v)-(-b+f)*(-_+m),O=S*M-A*w,Math.abs(O)<.1?(O+=10.1,F.push(f-y,v-x,G,Y,X,j),F.push(f+y,v+x,G,Y,X,j)):(l=(w*R-M*C)/O,c=(A*C-S*R)/O,D=(l-f)*(l-f)+(c-v)*(c-v),D>19600?(T=y-b,E=x-_,P=Math.sqrt(T*T+E*E),T/=P,E/=P,T*=U,E*=U,F.push(f-T,v-E),F.push(G,Y,X,j),F.push(f+T,v+E),F.push(G,Y,X,j),F.push(f-T,v-E),F.push(G,Y,X,j),I++):(F.push(l,c),F.push(G,Y,X,j),F.push(f-(l-f),v-(c-v)),F.push(G,Y,X,j)));for(p=i[2*(B-2)],d=i[2*(B-2)+1],f=i[2*(B-1)],v=i[2*(B-1)+1],y=-(d-v),x=p-f,P=Math.sqrt(y*y+x*x),y/=P,x/=P,y*=U,x*=U,F.push(f-y,v-x),F.push(G,Y,X,j),F.push(f+y,v+x),F.push(G,Y,X,j),L.push(N),r=0;I>r;r++)L.push(N++);L.push(N-1)}},i.prototype.buildComplexPoly=function(t,e){var r=t.points.slice();if(!(r.length<6)){var i=e.indices;e.points=r,e.alpha=t.fillAlpha,e.color=n.hex2rgb(t.fillColor);for(var o,s,a=1/0,h=-(1/0),u=1/0,l=-(1/0),c=0;co?o:a,h=o>h?o:h,u=u>s?s:u,l=s>l?s:l;r.push(a,u,h,u,h,l,a,l);var p=r.length/2;for(c=0;p>c;c++)i.push(c)}},i.prototype.buildPoly=function(t,e){var r=t.points;if(!(r.length<6)){var i=e.points,o=e.indices,s=r.length/2,a=n.hex2rgb(t.fillColor),h=t.fillAlpha,u=a[0]*h,c=a[1]*h,p=a[2]*h,d=l(r,null,2);if(!d)return!1;var f=i.length/6,v=0;for(v=0;vv;v++)i.push(r[2*v],r[2*v+1],u,c,p,h);return!0}}},{"../../const":38,"../../math":48,"../../renderers/webgl/WebGLRenderer":65,"../../renderers/webgl/utils/ObjectRenderer":80,"../../utils":98,"./WebGLGraphicsData":44,earcut:24}],44:[function(t,e,r){function i(t){this.gl=t,this.color=[0,0,0],this.points=[],this.indices=[],this.buffer=t.createBuffer(),this.indexBuffer=t.createBuffer(),this.mode=1,this.alpha=1,this.dirty=!0,this.glPoints=null,this.glIndices=null}i.prototype.constructor=i,e.exports=i,i.prototype.reset=function(){this.points.length=0,this.indices.length=0},i.prototype.upload=function(){var t=this.gl;this.glPoints=new Float32Array(this.points),t.bindBuffer(t.ARRAY_BUFFER,this.buffer),t.bufferData(t.ARRAY_BUFFER,this.glPoints,t.STATIC_DRAW),this.glIndices=new Uint16Array(this.indices),t.bindBuffer(t.ELEMENT_ARRAY_BUFFER,this.indexBuffer),t.bufferData(t.ELEMENT_ARRAY_BUFFER,this.glIndices,t.STATIC_DRAW),this.dirty=!1},i.prototype.destroy=function(){this.color=null,this.points=null,this.indices=null,this.gl.deleteBuffer(this.buffer),this.gl.deleteBuffer(this.indexBuffer),this.gl=null,this.buffer=null,this.indexBuffer=null,this.glPoints=null,this.glIndices=null}},{}],45:[function(t,e,r){var i=e.exports=Object.assign(t("./const"),t("./math"),{utils:t("./utils"),ticker:t("./ticker"),DisplayObject:t("./display/DisplayObject"),Container:t("./display/Container"),Sprite:t("./sprites/Sprite"),ParticleContainer:t("./particles/ParticleContainer"),SpriteRenderer:t("./sprites/webgl/SpriteRenderer"),ParticleRenderer:t("./particles/webgl/ParticleRenderer"),Text:t("./text/Text"),Graphics:t("./graphics/Graphics"),GraphicsData:t("./graphics/GraphicsData"),GraphicsRenderer:t("./graphics/webgl/GraphicsRenderer"),Texture:t("./textures/Texture"),BaseTexture:t("./textures/BaseTexture"),RenderTexture:t("./textures/RenderTexture"),VideoBaseTexture:t("./textures/VideoBaseTexture"),TextureUvs:t("./textures/TextureUvs"),CanvasRenderer:t("./renderers/canvas/CanvasRenderer"),CanvasGraphics:t("./renderers/canvas/utils/CanvasGraphics"),CanvasBuffer:t("./renderers/canvas/utils/CanvasBuffer"),WebGLRenderer:t("./renderers/webgl/WebGLRenderer"),WebGLManager:t("./renderers/webgl/managers/WebGLManager"),ShaderManager:t("./renderers/webgl/managers/ShaderManager"),Shader:t("./renderers/webgl/shaders/Shader"),ObjectRenderer:t("./renderers/webgl/utils/ObjectRenderer"),RenderTarget:t("./renderers/webgl/utils/RenderTarget"),AbstractFilter:t("./renderers/webgl/filters/AbstractFilter"),FXAAFilter:t("./renderers/webgl/filters/FXAAFilter"),SpriteMaskFilter:t("./renderers/webgl/filters/SpriteMaskFilter"),glCore:t("pixi-gl-core"),autoDetectRenderer:function(t,e,r,n){return t=t||800,e=e||600,!n&&i.utils.isWebGLSupported()?new i.WebGLRenderer(t,e,r):new i.CanvasRenderer(t,e,r)}})},{"./const":38,"./display/Container":39,"./display/DisplayObject":40,"./graphics/Graphics":41,"./graphics/GraphicsData":42,"./graphics/webgl/GraphicsRenderer":43,"./math":48,"./particles/ParticleContainer":54,"./particles/webgl/ParticleRenderer":56,"./renderers/canvas/CanvasRenderer":59,"./renderers/canvas/utils/CanvasBuffer":60,"./renderers/canvas/utils/CanvasGraphics":61,"./renderers/webgl/WebGLRenderer":65,"./renderers/webgl/filters/AbstractFilter":66,"./renderers/webgl/filters/FXAAFilter":67,"./renderers/webgl/filters/SpriteMaskFilter":68,"./renderers/webgl/managers/ShaderManager":72,"./renderers/webgl/managers/WebGLManager":74,"./renderers/webgl/shaders/Shader":77,"./renderers/webgl/utils/ObjectRenderer":80,"./renderers/webgl/utils/RenderTarget":82,"./sprites/Sprite":86,"./sprites/webgl/SpriteRenderer":87,"./text/Text":89,"./textures/BaseTexture":90,"./textures/RenderTexture":91,"./textures/Texture":92,"./textures/TextureUvs":93,"./textures/VideoBaseTexture":94,"./ticker":96,"./utils":98,"pixi-gl-core":1}],46:[function(t,e,r){function i(){this.a=1,this.b=0,this.c=0,this.d=1,this.tx=0,this.ty=0}var n=t("./Point");i.prototype.constructor=i,e.exports=i,i.prototype.fromArray=function(t){this.a=t[0],this.b=t[1],this.c=t[3],this.d=t[4],this.tx=t[2],this.ty=t[5]},i.prototype.set=function(t,e,r,i,n,o){return this.a=t,this.b=e,this.c=r,this.d=i,this.tx=n,this.ty=o,this},i.prototype.toArray=function(t,e){this.array||(this.array=new Float32Array(9));var r=e||this.array;return t?(r[0]=this.a,r[1]=this.b,r[2]=0,r[3]=this.c,r[4]=this.d,r[5]=0,r[6]=this.tx,r[7]=this.ty,r[8]=1):(r[0]=this.a,r[1]=this.c,r[2]=this.tx,r[3]=this.b,r[4]=this.d,r[5]=this.ty,r[6]=0,r[7]=0,r[8]=1),r},i.prototype.apply=function(t,e){e=e||new n;var r=t.x,i=t.y;return e.x=this.a*r+this.c*i+this.tx,e.y=this.b*r+this.d*i+this.ty,e},i.prototype.applyInverse=function(t,e){e=e||new n;var r=1/(this.a*this.d+this.c*-this.b),i=t.x,o=t.y;return e.x=this.d*r*i+-this.c*r*o+(this.ty*this.c-this.tx*this.d)*r,e.y=this.a*r*o+-this.b*r*i+(-this.ty*this.a+this.tx*this.b)*r,e},i.prototype.translate=function(t,e){return this.tx+=t,this.ty+=e,this},i.prototype.scale=function(t,e){return this.a*=t,this.d*=e,this.c*=t,this.b*=e,this.tx*=t,this.ty*=e,this},i.prototype.rotate=function(t){var e=Math.cos(t),r=Math.sin(t),i=this.a,n=this.c,o=this.tx;return this.a=i*e-this.b*r,this.b=i*r+this.b*e,this.c=n*e-this.d*r,this.d=n*r+this.d*e,this.tx=o*e-this.ty*r,this.ty=o*r+this.ty*e,this},i.prototype.append=function(t){var e=this.a,r=this.b,i=this.c,n=this.d;return this.a=t.a*e+t.b*i,this.b=t.a*r+t.b*n,this.c=t.c*e+t.d*i,this.d=t.c*r+t.d*n,this.tx=t.tx*e+t.ty*i+this.tx,this.ty=t.tx*r+t.ty*n+this.ty,this},i.prototype.setTransform=function(t,e,r,i,n,o,s,a,h){var u,l,c,p,d,f,v,g,m,y;return d=Math.sin(s),f=Math.cos(s),v=Math.cos(h),g=Math.sin(h),m=-Math.sin(a),y=Math.cos(a),u=f*n,l=d*n,c=-d*o,p=f*o,this.a=v*u+g*c,this.b=v*l+g*p,this.c=m*u+y*c,this.d=m*l+y*p,this.tx=t+(r*u+i*c),this.ty=e+(r*l+i*p),this},i.prototype.prepend=function(t){var e=this.tx;if(1!==t.a||0!==t.b||0!==t.c||1!==t.d){var r=this.a,i=this.c;this.a=r*t.a+this.b*t.c,this.b=r*t.b+this.b*t.d,this.c=i*t.a+this.d*t.c,this.d=i*t.b+this.d*t.d}return this.tx=e*t.a+this.ty*t.c+t.tx,this.ty=e*t.b+this.ty*t.d+t.ty,this},i.prototype.invert=function(){var t=this.a,e=this.b,r=this.c,i=this.d,n=this.tx,o=t*i-e*r;return this.a=i/o,this.b=-e/o,this.c=-r/o,this.d=t/o,this.tx=(r*this.ty-i*n)/o,this.ty=-(t*this.ty-e*n)/o,this},i.prototype.identity=function(){return this.a=1,this.b=0,this.c=0,this.d=1,this.tx=0,this.ty=0,this},i.prototype.clone=function(){var t=new i;return t.a=this.a,t.b=this.b,t.c=this.c,t.d=this.d,t.tx=this.tx,t.ty=this.ty,t},i.prototype.copy=function(t){return t.a=this.a,t.b=this.b,t.c=this.c,t.d=this.d,t.tx=this.tx,t.ty=this.ty,t},i.IDENTITY=new i,i.TEMP_MATRIX=new i},{"./Point":47}],47:[function(t,e,r){function i(t,e){this.x=t||0,this.y=e||0}i.prototype.constructor=i,e.exports=i,i.prototype.clone=function(){return new i(this.x,this.y)},i.prototype.copy=function(t){this.set(t.x,t.y)},i.prototype.equals=function(t){return t.x===this.x&&t.y===this.y},i.prototype.set=function(t,e){this.x=t||0,this.y=e||(0!==e?this.x:0)}},{}],48:[function(t,e,r){e.exports={Point:t("./Point"),Matrix:t("./Matrix"),Circle:t("./shapes/Circle"),Ellipse:t("./shapes/Ellipse"),Polygon:t("./shapes/Polygon"),Rectangle:t("./shapes/Rectangle"),RoundedRectangle:t("./shapes/RoundedRectangle")}},{"./Matrix":46,"./Point":47,"./shapes/Circle":49,"./shapes/Ellipse":50,"./shapes/Polygon":51,"./shapes/Rectangle":52,"./shapes/RoundedRectangle":53}],49:[function(t,e,r){function i(t,e,r){this.x=t||0,this.y=e||0,this.radius=r||0,this.type=o.SHAPES.CIRC}var n=t("./Rectangle"),o=t("../../const");i.prototype.constructor=i,e.exports=i,i.prototype.clone=function(){return new i(this.x,this.y,this.radius)},i.prototype.contains=function(t,e){if(this.radius<=0)return!1;var r=this.x-t,i=this.y-e,n=this.radius*this.radius;return r*=r,i*=i,n>=r+i},i.prototype.getBounds=function(){return new n(this.x-this.radius,this.y-this.radius,2*this.radius,2*this.radius)}},{"../../const":38,"./Rectangle":52}],50:[function(t,e,r){function i(t,e,r,i){this.x=t||0,this.y=e||0,this.width=r||0,this.height=i||0,this.type=o.SHAPES.ELIP}var n=t("./Rectangle"),o=t("../../const");i.prototype.constructor=i,e.exports=i,i.prototype.clone=function(){return new i(this.x,this.y,this.width,this.height)},i.prototype.contains=function(t,e){if(this.width<=0||this.height<=0)return!1;var r=(t-this.x)/this.width,i=(e-this.y)/this.height;return r*=r,i*=i,1>=r+i},i.prototype.getBounds=function(){return new n(this.x-this.width,this.y-this.height,this.width,this.height)}},{"../../const":38,"./Rectangle":52}],51:[function(t,e,r){function i(t){var e=t;if(!Array.isArray(e)){e=new Array(arguments.length);for(var r=0;rs;s++)i.push(e[s].x,e[s].y);e=i}this.closed=!0,this.points=e,this.type=o.SHAPES.POLY}var n=t("../Point"),o=t("../../const");i.prototype.constructor=i,e.exports=i,i.prototype.clone=function(){return new i(this.points.slice())},i.prototype.contains=function(t,e){for(var r=!1,i=this.points.length/2,n=0,o=i-1;i>n;o=n++){var s=this.points[2*n],a=this.points[2*n+1],h=this.points[2*o],u=this.points[2*o+1],l=a>e!=u>e&&(h-s)*(e-a)/(u-a)+s>t;l&&(r=!r)}return r}},{"../../const":38,"../Point":47}],52:[function(t,e,r){function i(t,e,r,i){this.x=t||0,this.y=e||0,this.width=r||0,this.height=i||0,this.type=n.SHAPES.RECT}var n=t("../../const");i.prototype.constructor=i,e.exports=i,i.EMPTY=new i(0,0,0,0),i.prototype.clone=function(){return new i(this.x,this.y,this.width,this.height)},i.prototype.contains=function(t,e){return this.width<=0||this.height<=0?!1:t>=this.x&&t=this.y&&e=this.x&&t<=this.x+this.width&&e>=this.y&&e<=this.y+this.height?!0:!1}},{"../../const":38}],54:[function(t,e,r){function i(t,e,r){n.call(this),r=r||15e3,t=t||15e3;var i=16384;r>i&&(r=i),r>t&&(r=t),this._properties=[!1,!0,!1,!1,!1],this._maxSize=t,this._batchSize=r,this._buffers=null,this._bufferToUpdate=0,this.interactiveChildren=!1,this.blendMode=o.BLEND_MODES.NORMAL,this.roundPixels=!0,this.setProperties(e)}var n=t("../display/Container"),o=t("../const");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.setProperties=function(t){t&&(this._properties[0]="scale"in t?!!t.scale:this._properties[0],this._properties[1]="position"in t?!!t.position:this._properties[1],this._properties[2]="rotation"in t?!!t.rotation:this._properties[2],this._properties[3]="uvs"in t?!!t.uvs:this._properties[3],this._properties[4]="alpha"in t?!!t.alpha:this._properties[4])},i.prototype.updateTransform=function(){this.displayObjectUpdateTransform()},i.prototype.renderWebGL=function(t){this.visible&&!(this.worldAlpha<=0)&&this.children.length&&this.renderable&&(t.setObjectRenderer(t.plugins.particle),t.plugins.particle.render(this))},i.prototype.onChildrenChange=function(t){var e=Math.floor(t/this._batchSize);er;r+=6,i+=4)this.indices[r+0]=i+0,this.indices[r+1]=i+1,this.indices[r+2]=i+2,this.indices[r+3]=i+0,this.indices[r+4]=i+2,this.indices[r+5]=i+3;this.shader=null,this.indexBuffer=null,this.properties=null,this.tempMatrix=new h.Matrix}var n=t("../../renderers/webgl/utils/ObjectRenderer"),o=t("../../renderers/webgl/WebGLRenderer"),s=t("./ParticleShader"),a=t("./ParticleBuffer"),h=t("../../math");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,o.registerPlugin("particle",i),i.prototype.onContextChange=function(){var t=this.renderer.gl;this.shader=new s(this.renderer.shaderManager),this.indexBuffer=t.createBuffer(),t.bindBuffer(t.ELEMENT_ARRAY_BUFFER,this.indexBuffer),t.bufferData(t.ELEMENT_ARRAY_BUFFER,this.indices,t.STATIC_DRAW),this.properties=[{attribute:this.shader.attributes.aVertexPosition,size:2,uploadFunction:this.uploadVertices,offset:0},{attribute:this.shader.attributes.aPositionCoord,size:2,uploadFunction:this.uploadPosition,offset:0},{attribute:this.shader.attributes.aRotation,size:1,uploadFunction:this.uploadRotation,offset:0},{attribute:this.shader.attributes.aTextureCoord,size:2,uploadFunction:this.uploadUvs,offset:0},{attribute:this.shader.attributes.aColor,size:1,uploadFunction:this.uploadAlpha,offset:0}]},i.prototype.start=function(){var t=this.renderer.gl;t.activeTexture(t.TEXTURE0),t.bindBuffer(t.ELEMENT_ARRAY_BUFFER,this.indexBuffer);var e=this.shader;this.renderer.shaderManager.setShader(e)},i.prototype.render=function(t){var e=t.children,r=e.length,i=t._maxSize,n=t._batchSize;if(0!==r){r>i&&(r=i),t._buffers||(t._buffers=this.generateBuffers(t)),this.renderer.blendModeManager.setBlendMode(t.blendMode);var o=this.renderer.gl,s=t.worldTransform.copy(this.tempMatrix);s.prepend(this.renderer.currentRenderTarget.projectionMatrix),o.uniformMatrix3fv(this.shader.uniforms.projectionMatrix._location,!1,s.toArray(!0)),o.uniform1f(this.shader.uniforms.uAlpha._location,t.worldAlpha);var a=e[0]._texture.baseTexture;if(a._glTextures[o.id])o.bindTexture(o.TEXTURE_2D,a._glTextures[o.id]);else{if(!this.renderer.updateTexture(a))return;t._properties[0]&&t._properties[3]||(t._bufferToUpdate=0)}for(var h=0,u=0;r>h;h+=n,u+=1){var l=r-h;l>n&&(l=n);var c=t._buffers[u];c.uploadDynamic(e,h,l),t._bufferToUpdate===u&&(c.uploadStatic(e,h,l),t._bufferToUpdate=u+1),c.bind(this.shader),o.drawElements(o.TRIANGLES,6*l,o.UNSIGNED_SHORT,0),this.renderer.drawCount++}}},i.prototype.generateBuffers=function(t){var e,r=this.renderer.gl,i=[],n=t._maxSize,o=t._batchSize,s=t._properties;for(e=0;n>e;e+=o)i.push(new a(r,this.properties,s,o));return i},i.prototype.uploadVertices=function(t,e,r,i,n,o){for(var s,a,h,u,l,c,p,d,f,v=0;r>v;v++)s=t[e+v],a=s._texture,u=s.scale.x,l=s.scale.y,a.trim?(h=a.trim,p=h.x-s.anchor.x*h.width,c=p+a.crop.width,f=h.y-s.anchor.y*h.height,d=f+a.crop.height):(c=a._frame.width*(1-s.anchor.x),p=a._frame.width*-s.anchor.x,d=a._frame.height*(1-s.anchor.y),f=a._frame.height*-s.anchor.y),i[o]=p*u,i[o+1]=f*l,i[o+n]=c*u,i[o+n+1]=f*l,i[o+2*n]=c*u,i[o+2*n+1]=d*l,i[o+3*n]=p*u,i[o+3*n+1]=d*l,o+=4*n},i.prototype.uploadPosition=function(t,e,r,i,n,o){for(var s=0;r>s;s++){var a=t[e+s].position;i[o]=a.x,i[o+1]=a.y,i[o+n]=a.x,i[o+n+1]=a.y,i[o+2*n]=a.x,i[o+2*n+1]=a.y,i[o+3*n]=a.x,i[o+3*n+1]=a.y,o+=4*n}},i.prototype.uploadRotation=function(t,e,r,i,n,o){for(var s=0;r>s;s++){var a=t[e+s].rotation;i[o]=a,i[o+n]=a,i[o+2*n]=a,i[o+3*n]=a,o+=4*n}},i.prototype.uploadUvs=function(t,e,r,i,n,o){for(var s=0;r>s;s++){var a=t[e+s]._texture._uvs;a?(i[o]=a.x0,i[o+1]=a.y0,i[o+n]=a.x1,i[o+n+1]=a.y1,i[o+2*n]=a.x2,i[o+2*n+1]=a.y2,i[o+3*n]=a.x3,i[o+3*n+1]=a.y3,o+=4*n):(i[o]=0,i[o+1]=0,i[o+n]=0,i[o+n+1]=0,i[o+2*n]=0,i[o+2*n+1]=0,i[o+3*n]=0,i[o+3*n+1]=0,o+=4*n)}},i.prototype.uploadAlpha=function(t,e,r,i,n,o){for(var s=0;r>s;s++){var a=t[e+s].alpha;i[o]=a,i[o+n]=a,i[o+2*n]=a,i[o+3*n]=a,o+=4*n}},i.prototype.destroy=function(){this.renderer.gl&&this.renderer.gl.deleteBuffer(this.indexBuffer),n.prototype.destroy.apply(this,arguments),this.shader.destroy(),this.indices=null,this.tempMatrix=null}},{"../../math":48,"../../renderers/webgl/WebGLRenderer":65,"../../renderers/webgl/utils/ObjectRenderer":80,"./ParticleBuffer":55,"./ParticleShader":57}],57:[function(t,e,r){function i(t){n.call(this,t,["attribute vec2 aVertexPosition;","attribute vec2 aTextureCoord;","attribute float aColor;","attribute vec2 aPositionCoord;","attribute vec2 aScale;","attribute float aRotation;","uniform mat3 projectionMatrix;","varying vec2 vTextureCoord;","varying float vColor;","void main(void){"," vec2 v = aVertexPosition;"," v.x = (aVertexPosition.x) * cos(aRotation) - (aVertexPosition.y) * sin(aRotation);"," v.y = (aVertexPosition.x) * sin(aRotation) + (aVertexPosition.y) * cos(aRotation);"," v = v + aPositionCoord;"," gl_Position = vec4((projectionMatrix * vec3(v, 1.0)).xy, 0.0, 1.0);"," vTextureCoord = aTextureCoord;"," vColor = aColor;","}"].join("\n"),["precision lowp float;","varying vec2 vTextureCoord;","varying float vColor;","uniform sampler2D uSampler;","uniform float uAlpha;","void main(void){"," vec4 color = texture2D(uSampler, vTextureCoord) * vColor * uAlpha;"," if (color.a == 0.0) discard;"," gl_FragColor = color;","}"].join("\n"),{uAlpha:{type:"1f",value:1}},{aPositionCoord:0,aRotation:0})}var n=t("../../renderers/webgl/shaders/TextureShader");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i},{"../../renderers/webgl/shaders/TextureShader":78}],58:[function(t,e,r){function i(t,e,r,i){if(a.call(this),n.sayHello(t),i)for(var h in s.DEFAULT_RENDER_OPTIONS)"undefined"==typeof i[h]&&(i[h]=s.DEFAULT_RENDER_OPTIONS[h]);else i=s.DEFAULT_RENDER_OPTIONS;this.type=s.RENDERER_TYPE.UNKNOWN,this.width=e||800,this.height=r||600,this.view=i.view||document.createElement("canvas"),this.resolution=i.resolution,this.transparent=i.transparent,this.autoResize=i.autoResize||!1,this.blendModes=null,this.preserveDrawingBuffer=i.preserveDrawingBuffer,this.clearBeforeRender=i.clearBeforeRender,this.roundPixels=i.roundPixels,this._backgroundColor=0,this._backgroundColorRgba=[0,0,0,0],this._backgroundColorString="#000000",this.backgroundColor=i.backgroundColor||this._backgroundColor,this._tempDisplayObjectParent={worldTransform:new o.Matrix,worldAlpha:1,children:[]},this._lastObjectRendered=this._tempDisplayObjectParent}var n=t("../utils"),o=t("../math"),s=t("../const"),a=t("eventemitter3");i.prototype=Object.create(a.prototype),i.prototype.constructor=i,e.exports=i,Object.defineProperties(i.prototype,{backgroundColor:{get:function(){return this._backgroundColor},set:function(t){this._backgroundColor=t,this._backgroundColorString=n.hex2string(t),n.hex2rgb(t,this._backgroundColorRgba)}}}),i.prototype.resize=function(t,e){this.width=t*this.resolution,this.height=e*this.resolution,this.view.width=this.width,this.view.height=this.height,this.autoResize&&(this.view.style.width=this.width/this.resolution+"px",this.view.style.height=this.height/this.resolution+"px")},i.prototype.destroy=function(t){t&&this.view.parentNode&&this.view.parentNode.removeChild(this.view),this.type=s.RENDERER_TYPE.UNKNOWN,this.width=0,this.height=0,this.view=null,this.resolution=0,this.transparent=!1,this.autoResize=!1,this.blendModes=null,this.preserveDrawingBuffer=!1,this.clearBeforeRender=!1,this.roundPixels=!1,this._backgroundColor=0, -this._backgroundColorRgba=null,this._backgroundColorString=null}},{"../const":38,"../math":48,"../utils":98,eventemitter3:25}],59:[function(t,e,r){function i(t,e,r){r=r||{},n.call(this,"Canvas",t,e,r),this.type=h.RENDERER_TYPE.CANVAS,this.context=this.view.getContext("2d",{alpha:this.transparent}),this.refresh=!0,this.maskManager=new o,this.smoothProperty="imageSmoothingEnabled",this.context.imageSmoothingEnabled||(this.context.webkitImageSmoothingEnabled?this.smoothProperty="webkitImageSmoothingEnabled":this.context.mozImageSmoothingEnabled?this.smoothProperty="mozImageSmoothingEnabled":this.context.oImageSmoothingEnabled?this.smoothProperty="oImageSmoothingEnabled":this.context.msImageSmoothingEnabled&&(this.smoothProperty="msImageSmoothingEnabled")),this.initPlugins(),this._mapBlendModes(),this._tempDisplayObjectParent={worldTransform:new a.Matrix,worldAlpha:1},this.resize(t,e)}var n=t("../SystemRenderer"),o=t("./utils/CanvasMaskManager"),s=t("../../utils"),a=t("../../math"),h=t("../../const");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,s.pluginTarget.mixin(i),i.prototype.render=function(t){this.emit("prerender");var e=t.parent;this._lastObjectRendered=t,t.parent=this._tempDisplayObjectParent,t.updateTransform(),t.parent=e,this.context.setTransform(1,0,0,1,0,0),this.context.globalAlpha=1,this.context.globalCompositeOperation=this.blendModes[h.BLEND_MODES.NORMAL],navigator.isCocoonJS&&this.view.screencanvas&&(this.context.fillStyle="black",this.context.clear()),this.clearBeforeRender&&(this.transparent?this.context.clearRect(0,0,this.width,this.height):(this.context.fillStyle=this._backgroundColorString,this.context.fillRect(0,0,this.width,this.height))),this.renderDisplayObject(t,this.context),this.emit("postrender")},i.prototype.destroy=function(t){this.destroyPlugins(),n.prototype.destroy.call(this,t),this.context=null,this.refresh=!0,this.maskManager.destroy(),this.maskManager=null,this.smoothProperty=null},i.prototype.renderDisplayObject=function(t,e){var r=this.context;this.context=e,t.renderCanvas(this),this.context=r},i.prototype.resize=function(t,e){n.prototype.resize.call(this,t,e),this.smoothProperty&&(this.context[this.smoothProperty]=h.SCALE_MODES.DEFAULT===h.SCALE_MODES.LINEAR)},i.prototype._mapBlendModes=function(){this.blendModes||(this.blendModes={},s.canUseNewCanvasBlendModes()?(this.blendModes[h.BLEND_MODES.NORMAL]="source-over",this.blendModes[h.BLEND_MODES.ADD]="lighter",this.blendModes[h.BLEND_MODES.MULTIPLY]="multiply",this.blendModes[h.BLEND_MODES.SCREEN]="screen",this.blendModes[h.BLEND_MODES.OVERLAY]="overlay",this.blendModes[h.BLEND_MODES.DARKEN]="darken",this.blendModes[h.BLEND_MODES.LIGHTEN]="lighten",this.blendModes[h.BLEND_MODES.COLOR_DODGE]="color-dodge",this.blendModes[h.BLEND_MODES.COLOR_BURN]="color-burn",this.blendModes[h.BLEND_MODES.HARD_LIGHT]="hard-light",this.blendModes[h.BLEND_MODES.SOFT_LIGHT]="soft-light",this.blendModes[h.BLEND_MODES.DIFFERENCE]="difference",this.blendModes[h.BLEND_MODES.EXCLUSION]="exclusion",this.blendModes[h.BLEND_MODES.HUE]="hue",this.blendModes[h.BLEND_MODES.SATURATION]="saturate",this.blendModes[h.BLEND_MODES.COLOR]="color",this.blendModes[h.BLEND_MODES.LUMINOSITY]="luminosity"):(this.blendModes[h.BLEND_MODES.NORMAL]="source-over",this.blendModes[h.BLEND_MODES.ADD]="lighter",this.blendModes[h.BLEND_MODES.MULTIPLY]="source-over",this.blendModes[h.BLEND_MODES.SCREEN]="source-over",this.blendModes[h.BLEND_MODES.OVERLAY]="source-over",this.blendModes[h.BLEND_MODES.DARKEN]="source-over",this.blendModes[h.BLEND_MODES.LIGHTEN]="source-over",this.blendModes[h.BLEND_MODES.COLOR_DODGE]="source-over",this.blendModes[h.BLEND_MODES.COLOR_BURN]="source-over",this.blendModes[h.BLEND_MODES.HARD_LIGHT]="source-over",this.blendModes[h.BLEND_MODES.SOFT_LIGHT]="source-over",this.blendModes[h.BLEND_MODES.DIFFERENCE]="source-over",this.blendModes[h.BLEND_MODES.EXCLUSION]="source-over",this.blendModes[h.BLEND_MODES.HUE]="source-over",this.blendModes[h.BLEND_MODES.SATURATION]="source-over",this.blendModes[h.BLEND_MODES.COLOR]="source-over",this.blendModes[h.BLEND_MODES.LUMINOSITY]="source-over"))}},{"../../const":38,"../../math":48,"../../utils":98,"../SystemRenderer":58,"./utils/CanvasMaskManager":62}],60:[function(t,e,r){function i(t,e){this.canvas=document.createElement("canvas"),this.context=this.canvas.getContext("2d"),this.canvas.width=t,this.canvas.height=e}i.prototype.constructor=i,e.exports=i,Object.defineProperties(i.prototype,{width:{get:function(){return this.canvas.width},set:function(t){this.canvas.width=t}},height:{get:function(){return this.canvas.height},set:function(t){this.canvas.height=t}}}),i.prototype.clear=function(){this.context.setTransform(1,0,0,1,0,0),this.context.clearRect(0,0,this.canvas.width,this.canvas.height)},i.prototype.resize=function(t,e){this.canvas.width=t,this.canvas.height=e},i.prototype.destroy=function(){this.context=null,this.canvas=null}},{}],61:[function(t,e,r){var i=t("../../../const"),n={};e.exports=n,n.renderGraphics=function(t,e){var r=t.worldAlpha;t.dirty&&(this.updateGraphicsTint(t),t.dirty=!1);for(var n=0;nA?A:C,e.beginPath(),e.moveTo(T,E+C),e.lineTo(T,E+w-C),e.quadraticCurveTo(T,E+w,T+C,E+w),e.lineTo(T+S-C,E+w),e.quadraticCurveTo(T+S,E+w,T+S,E+w-C),e.lineTo(T+S,E+C),e.quadraticCurveTo(T+S,E,T+S-C,E),e.lineTo(T+C,E),e.quadraticCurveTo(T,E,T,E+C),e.closePath(),(o.fillColor||0===o.fillColor)&&(e.globalAlpha=o.fillAlpha*r,e.fillStyle="#"+("00000"+(0|a).toString(16)).substr(-6),e.fill()),o.lineWidth&&(e.globalAlpha=o.lineAlpha*r,e.strokeStyle="#"+("00000"+(0|h).toString(16)).substr(-6),e.stroke())}}},n.renderGraphicsMask=function(t,e){var r=t.graphicsData.length;if(0!==r){e.beginPath();for(var n=0;r>n;n++){var o=t.graphicsData[n],s=o.shape;if(o.type===i.SHAPES.POLY){var a=s.points;e.moveTo(a[0],a[1]);for(var h=1;hw?w:S,e.moveTo(b,_+S),e.lineTo(b,_+E-S),e.quadraticCurveTo(b,_+E,b+S,_+E),e.lineTo(b+T-S,_+E),e.quadraticCurveTo(b+T,_+E,b+T,_+E-S),e.lineTo(b+T,_+S),e.quadraticCurveTo(b+T,_,b+T-S,_),e.lineTo(b+S,_),e.quadraticCurveTo(b,_,b,_+S),e.closePath()}}}},n.updateGraphicsTint=function(t){if(16777215!==t.tint||t._prevTint!==t.tint){t._prevTint=t.tint;for(var e=(t.tint>>16&255)/255,r=(t.tint>>8&255)/255,i=(255&t.tint)/255,n=0;n>16&255)/255*e*255<<16)+((s>>8&255)/255*r*255<<8)+(255&s)/255*i*255,o._lineTint=((a>>16&255)/255*e*255<<16)+((a>>8&255)/255*r*255<<8)+(255&a)/255*i*255}}}},{"../../../const":38}],62:[function(t,e,r){function i(){}var n=t("./CanvasGraphics");i.prototype.constructor=i,e.exports=i,i.prototype.pushMask=function(t,e){e.context.save();var r=t.alpha,i=t.worldTransform,o=e.resolution;e.context.setTransform(i.a*o,i.b*o,i.c*o,i.d*o,i.tx*o,i.ty*o),t.texture||(n.renderGraphicsMask(t,e.context),e.context.clip()),t.worldAlpha=r},i.prototype.popMask=function(t){t.context.restore()},i.prototype.destroy=function(){}},{"./CanvasGraphics":61}],63:[function(t,e,r){var i=t("../../../utils"),n={};e.exports=n,n.getTintedTexture=function(t,e){var r=t.texture;e=n.roundColor(e);var i="#"+("00000"+(0|e).toString(16)).substr(-6);if(r.tintCache=r.tintCache||{},r.tintCache[i])return r.tintCache[i];var o=n.canvas||document.createElement("canvas");if(n.tintMethod(r,e,o),n.convertTintToImage){var s=new Image;s.src=o.toDataURL(),r.tintCache[i]=s}else r.tintCache[i]=o,n.canvas=null;return o},n.tintWithMultiply=function(t,e,r){var i=r.getContext("2d"),n=t.baseTexture.resolution,o=t.crop.clone();o.x*=n,o.y*=n,o.width*=n,o.height*=n,r.width=o.width,r.height=o.height,i.fillStyle="#"+("00000"+(0|e).toString(16)).substr(-6),i.fillRect(0,0,o.width,o.height),i.globalCompositeOperation="multiply",i.drawImage(t.baseTexture.source,o.x,o.y,o.width,o.height,0,0,o.width,o.height),i.globalCompositeOperation="destination-atop",i.drawImage(t.baseTexture.source,o.x,o.y,o.width,o.height,0,0,o.width,o.height)},n.tintWithOverlay=function(t,e,r){var i=r.getContext("2d"),n=t.baseTexture.resolution,o=t.crop.clone();o.x*=n,o.y*=n,o.width*=n,o.height*=n,r.width=o.width,r.height=o.height,i.globalCompositeOperation="copy",i.fillStyle="#"+("00000"+(0|e).toString(16)).substr(-6),i.fillRect(0,0,o.width,o.height),i.globalCompositeOperation="destination-atop",i.drawImage(t.baseTexture.source,o.x,o.y,o.width,o.height,0,0,o.width,o.height)},n.tintWithPerPixel=function(t,e,r){var n=r.getContext("2d"),o=t.baseTexture.resolution,s=t.crop.clone();s.x*=o,s.y*=o,s.width*=o,s.height*=o,r.width=s.width,r.height=s.height,n.globalCompositeOperation="copy",n.drawImage(t.baseTexture.source,s.x,s.y,s.width,s.height,0,0,s.width,s.height);for(var a=i.hex2rgb(e),h=a[0],u=a[1],l=a[2],c=n.getImageData(0,0,s.width,s.height),p=c.data,d=0;de;++e)this.shaders[e].syncUniform(t)}},{"../shaders/TextureShader":78}],67:[function(t,e,r){function i(){n.call(this,"\nprecision mediump float;\n\nattribute vec2 aVertexPosition;\nattribute vec2 aTextureCoord;\nattribute vec4 aColor;\n\nuniform mat3 projectionMatrix;\nuniform vec2 resolution;\n\nvarying vec2 vTextureCoord;\nvarying vec4 vColor;\n\nvarying vec2 vResolution;\n\n//texcoords computed in vertex step\n//to avoid dependent texture reads\nvarying vec2 v_rgbNW;\nvarying vec2 v_rgbNE;\nvarying vec2 v_rgbSW;\nvarying vec2 v_rgbSE;\nvarying vec2 v_rgbM;\n\n\nvoid texcoords(vec2 fragCoord, vec2 resolution,\n out vec2 v_rgbNW, out vec2 v_rgbNE,\n out vec2 v_rgbSW, out vec2 v_rgbSE,\n out vec2 v_rgbM) {\n vec2 inverseVP = 1.0 / resolution.xy;\n v_rgbNW = (fragCoord + vec2(-1.0, -1.0)) * inverseVP;\n v_rgbNE = (fragCoord + vec2(1.0, -1.0)) * inverseVP;\n v_rgbSW = (fragCoord + vec2(-1.0, 1.0)) * inverseVP;\n v_rgbSE = (fragCoord + vec2(1.0, 1.0)) * inverseVP;\n v_rgbM = vec2(fragCoord * inverseVP);\n}\n\nvoid main(void){\n gl_Position = vec4((projectionMatrix * vec3(aVertexPosition, 1.0)).xy, 0.0, 1.0);\n vTextureCoord = aTextureCoord;\n vColor = vec4(aColor.rgb * aColor.a, aColor.a);\n vResolution = resolution;\n\n //compute the texture coords and send them to varyings\n texcoords(aTextureCoord * resolution, resolution, v_rgbNW, v_rgbNE, v_rgbSW, v_rgbSE, v_rgbM);\n}\n",'precision lowp float;\n\n\n/**\nBasic FXAA implementation based on the code on geeks3d.com with the\nmodification that the texture2DLod stuff was removed since it\'s\nunsupported by WebGL.\n\n--\n\nFrom:\nhttps://github.com/mitsuhiko/webgl-meincraft\n\nCopyright (c) 2011 by Armin Ronacher.\n\nSome rights reserved.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are\nmet:\n\n * Redistributions of source code must retain the above copyright\n notice, this list of conditions and the following disclaimer.\n\n * Redistributions in binary form must reproduce the above\n copyright notice, this list of conditions and the following\n disclaimer in the documentation and/or other materials provided\n with the distribution.\n\n * The names of the contributors may not be used to endorse or\n promote products derived from this software without specific\n prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\nLIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\nA PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\nOWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\nSPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\nLIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\nDATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\nTHEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\nOF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n*/\n\n#ifndef FXAA_REDUCE_MIN\n #define FXAA_REDUCE_MIN (1.0/ 128.0)\n#endif\n#ifndef FXAA_REDUCE_MUL\n #define FXAA_REDUCE_MUL (1.0 / 8.0)\n#endif\n#ifndef FXAA_SPAN_MAX\n #define FXAA_SPAN_MAX 8.0\n#endif\n\n//optimized version for mobile, where dependent\n//texture reads can be a bottleneck\nvec4 fxaa(sampler2D tex, vec2 fragCoord, vec2 resolution,\n vec2 v_rgbNW, vec2 v_rgbNE,\n vec2 v_rgbSW, vec2 v_rgbSE,\n vec2 v_rgbM) {\n vec4 color;\n mediump vec2 inverseVP = vec2(1.0 / resolution.x, 1.0 / resolution.y);\n vec3 rgbNW = texture2D(tex, v_rgbNW).xyz;\n vec3 rgbNE = texture2D(tex, v_rgbNE).xyz;\n vec3 rgbSW = texture2D(tex, v_rgbSW).xyz;\n vec3 rgbSE = texture2D(tex, v_rgbSE).xyz;\n vec4 texColor = texture2D(tex, v_rgbM);\n vec3 rgbM = texColor.xyz;\n vec3 luma = vec3(0.299, 0.587, 0.114);\n float lumaNW = dot(rgbNW, luma);\n float lumaNE = dot(rgbNE, luma);\n float lumaSW = dot(rgbSW, luma);\n float lumaSE = dot(rgbSE, luma);\n float lumaM = dot(rgbM, luma);\n float lumaMin = min(lumaM, min(min(lumaNW, lumaNE), min(lumaSW, lumaSE)));\n float lumaMax = max(lumaM, max(max(lumaNW, lumaNE), max(lumaSW, lumaSE)));\n\n mediump vec2 dir;\n dir.x = -((lumaNW + lumaNE) - (lumaSW + lumaSE));\n dir.y = ((lumaNW + lumaSW) - (lumaNE + lumaSE));\n\n float dirReduce = max((lumaNW + lumaNE + lumaSW + lumaSE) *\n (0.25 * FXAA_REDUCE_MUL), FXAA_REDUCE_MIN);\n\n float rcpDirMin = 1.0 / (min(abs(dir.x), abs(dir.y)) + dirReduce);\n dir = min(vec2(FXAA_SPAN_MAX, FXAA_SPAN_MAX),\n max(vec2(-FXAA_SPAN_MAX, -FXAA_SPAN_MAX),\n dir * rcpDirMin)) * inverseVP;\n\n vec3 rgbA = 0.5 * (\n texture2D(tex, fragCoord * inverseVP + dir * (1.0 / 3.0 - 0.5)).xyz +\n texture2D(tex, fragCoord * inverseVP + dir * (2.0 / 3.0 - 0.5)).xyz);\n vec3 rgbB = rgbA * 0.5 + 0.25 * (\n texture2D(tex, fragCoord * inverseVP + dir * -0.5).xyz +\n texture2D(tex, fragCoord * inverseVP + dir * 0.5).xyz);\n\n float lumaB = dot(rgbB, luma);\n if ((lumaB < lumaMin) || (lumaB > lumaMax))\n color = vec4(rgbA, texColor.a);\n else\n color = vec4(rgbB, texColor.a);\n return color;\n}\n\n\nvarying vec2 vTextureCoord;\nvarying vec4 vColor;\nvarying vec2 vResolution;\n\n//texcoords computed in vertex step\n//to avoid dependent texture reads\nvarying vec2 v_rgbNW;\nvarying vec2 v_rgbNE;\nvarying vec2 v_rgbSW;\nvarying vec2 v_rgbSE;\nvarying vec2 v_rgbM;\n\nuniform sampler2D uSampler;\n\n\nvoid main(void){\n\n gl_FragColor = fxaa(uSampler, vTextureCoord * vResolution, vResolution, v_rgbNW, v_rgbNE, v_rgbSW, v_rgbSE, v_rgbM);\n\n}\n',{resolution:{type:"v2",value:{x:1,y:1}}})}var n=t("./AbstractFilter");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.applyFilter=function(t,e,r){var i=t.filterManager,n=this.getShader(t);i.applyFilter(n,e,r)}},{"./AbstractFilter":66}],68:[function(t,e,r){function i(t){var e=new o.Matrix;n.call(this,"attribute vec2 aVertexPosition;\nattribute vec2 aTextureCoord;\nattribute vec4 aColor;\n\nuniform mat3 projectionMatrix;\nuniform mat3 otherMatrix;\n\nvarying vec2 vMaskCoord;\nvarying vec2 vTextureCoord;\nvarying vec4 vColor;\n\nvoid main(void)\n{\n gl_Position = vec4((projectionMatrix * vec3(aVertexPosition, 1.0)).xy, 0.0, 1.0);\n vTextureCoord = aTextureCoord;\n vMaskCoord = ( otherMatrix * vec3( aTextureCoord, 1.0) ).xy;\n vColor = vec4(aColor.rgb * aColor.a, aColor.a);\n}\n","precision lowp float;\n\nvarying vec2 vMaskCoord;\nvarying vec2 vTextureCoord;\nvarying vec4 vColor;\n\nuniform sampler2D uSampler;\nuniform float alpha;\nuniform sampler2D mask;\n\nvoid main(void)\n{\n // check clip! this will stop the mask bleeding out from the edges\n vec2 text = abs( vMaskCoord - 0.5 );\n text = step(0.5, text);\n float clip = 1.0 - max(text.y, text.x);\n vec4 original = texture2D(uSampler, vTextureCoord);\n vec4 masky = texture2D(mask, vMaskCoord);\n original *= (masky.r * masky.a * alpha * clip);\n gl_FragColor = original;\n}\n",{mask:{type:"sampler2D",value:t._texture},alpha:{type:"f",value:1},otherMatrix:{type:"mat3",value:e.toArray(!0)}}),this.maskSprite=t,this.maskMatrix=e}var n=t("./AbstractFilter"),o=t("../../../math");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.applyFilter=function(t,e,r){var i=t.filterManager;this.uniforms.mask.value=this.maskSprite._texture,i.calculateMappedMatrix(e.frame,this.maskSprite,this.maskMatrix),this.uniforms.otherMatrix.value=this.maskMatrix.toArray(!0),this.uniforms.alpha.value=this.maskSprite.worldAlpha;var n=this.getShader(t);i.applyFilter(n,e,r)},Object.defineProperties(i.prototype,{map:{get:function(){return this.uniforms.mask.value},set:function(t){this.uniforms.mask.value=t}},offset:{get:function(){return this.uniforms.offset.value},set:function(t){this.uniforms.offset.value=t}}})},{"../../../math":48,"./AbstractFilter":66}],69:[function(t,e,r){function i(t){n.call(this,t),this.currentBlendMode=99999}var n=t("./WebGLManager");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.setBlendMode=function(t){if(this.currentBlendMode===t)return!1;this.currentBlendMode=t;var e=this.renderer.blendModes[this.currentBlendMode];return this.renderer.gl.blendFunc(e[0],e[1]),!0}},{"./WebGLManager":74}],70:[function(t,e,r){function i(t){n.call(this,t),this.filterStack=[],this.filterStack.push({renderTarget:t.currentRenderTarget,filter:[],bounds:null}),this.texturePool=[],this.textureSize=new h.Rectangle(0,0,t.width,t.height),this.currentFrame=null}var n=t("./WebGLManager"),o=t("../utils/RenderTarget"),s=t("../../../const"),a=t("../utils/Quad"),h=t("../../../math");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.onContextChange=function(){this.texturePool.length=0;var t=this.renderer.gl;this.quad=new a(t)},i.prototype.setFilterStack=function(t){this.filterStack=t},i.prototype.pushFilter=function(t,e){var r=t.filterArea?t.filterArea.clone():t.getBounds();r.x=0|r.x,r.y=0|r.y,r.width=0|r.width,r.height=0|r.height;var i=0|e[0].padding;if(r.x-=i,r.y-=i,r.width+=2*i,r.height+=2*i,this.renderer.currentRenderTarget.transform){var n=this.renderer.currentRenderTarget.transform;r.x+=n.tx,r.y+=n.ty,this.capFilterArea(r),r.x-=n.tx,r.y-=n.ty}else this.capFilterArea(r);if(r.width>0&&r.height>0){this.currentFrame=r;var o=this.getRenderTarget();this.renderer.setRenderTarget(o),o.clear(),this.filterStack.push({renderTarget:o,filter:e})}else this.filterStack.push({renderTarget:null,filter:e})},i.prototype.popFilter=function(){var t=this.filterStack.pop(),e=this.filterStack[this.filterStack.length-1],r=t.renderTarget;if(t.renderTarget){var i=e.renderTarget,n=this.renderer.gl;this.currentFrame=r.frame,this.quad.map(this.textureSize,r.frame),n.bindBuffer(n.ARRAY_BUFFER,this.quad.vertexBuffer),n.bindBuffer(n.ELEMENT_ARRAY_BUFFER,this.quad.indexBuffer);var o=t.filter;if(n.vertexAttribPointer(this.renderer.shaderManager.defaultShader.attributes.aVertexPosition,2,n.FLOAT,!1,0,0),n.vertexAttribPointer(this.renderer.shaderManager.defaultShader.attributes.aTextureCoord,2,n.FLOAT,!1,0,32),n.vertexAttribPointer(this.renderer.shaderManager.defaultShader.attributes.aColor,4,n.FLOAT,!1,0,64),this.renderer.blendModeManager.setBlendMode(s.BLEND_MODES.NORMAL),1===o.length)o[0].uniforms.dimensions&&(o[0].uniforms.dimensions.value[0]=this.renderer.width,o[0].uniforms.dimensions.value[1]=this.renderer.height,o[0].uniforms.dimensions.value[2]=this.quad.vertices[0],o[0].uniforms.dimensions.value[3]=this.quad.vertices[5]),o[0].applyFilter(this.renderer,r,i),this.returnRenderTarget(r);else{for(var a=r,h=this.getRenderTarget(!0),u=0;uthis.textureSize.width&&(t.width=this.textureSize.width-t.x),t.y+t.height>this.textureSize.height&&(t.height=this.textureSize.height-t.y)},i.prototype.resize=function(t,e){this.textureSize.width=t,this.textureSize.height=e;for(var r=0;re;++e)t._array[2*e]=o[e].x,t._array[2*e+1]=o[e].y;s.uniform2fv(i,t._array);break;case"v3v":for(t._array||(t._array=new Float32Array(3*o.length)),e=0,r=o.length;r>e;++e)t._array[3*e]=o[e].x,t._array[3*e+1]=o[e].y,t._array[3*e+2]=o[e].z;s.uniform3fv(i,t._array);break;case"v4v":for(t._array||(t._array=new Float32Array(4*o.length)),e=0,r=o.length;r>e;++e)t._array[4*e]=o[e].x,t._array[4*e+1]=o[e].y,t._array[4*e+2]=o[e].z,t._array[4*e+3]=o[e].w;s.uniform4fv(i,t._array);break;case"t":case"sampler2D":if(!t.value||!t.value.baseTexture.hasLoaded)break;s.activeTexture(s["TEXTURE"+this.textureCount]);var a=t.value.baseTexture._glTextures[s.id];a||(this.initSampler2D(t),a=t.value.baseTexture._glTextures[s.id]),s.bindTexture(s.TEXTURE_2D,a),s.uniform1i(t._location,this.textureCount),this.textureCount++;break;default:console.warn("Pixi.js Shader Warning: Unknown uniform type: "+t.type)}},i.prototype.syncUniforms=function(){this.textureCount=1;for(var t in this.uniforms)this.syncUniform(this.uniforms[t])},i.prototype.initSampler2D=function(t){var e=this.gl,r=t.value.baseTexture;if(r.hasLoaded)if(t.textureData){var i=t.textureData;r._glTextures[e.id]=e.createTexture(),e.bindTexture(e.TEXTURE_2D,r._glTextures[e.id]),e.pixelStorei(e.UNPACK_PREMULTIPLY_ALPHA_WEBGL,r.premultipliedAlpha),e.texImage2D(e.TEXTURE_2D,0,i.luminance?e.LUMINANCE:e.RGBA,e.RGBA,e.UNSIGNED_BYTE,r.source),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MAG_FILTER,i.magFilter?i.magFilter:e.LINEAR),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MIN_FILTER,i.wrapS?i.wrapS:e.CLAMP_TO_EDGE),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,i.wrapS?i.wrapS:e.CLAMP_TO_EDGE),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,i.wrapT?i.wrapT:e.CLAMP_TO_EDGE)}else this.shaderManager.renderer.updateTexture(r)},i.prototype.destroy=function(){this.gl.deleteProgram(this.program),this.gl=null,this.uniforms=null,this.attributes=null,this.vertexSrc=null,this.fragmentSrc=null},i.prototype._glCompile=function(t,e){var r=this.gl.createShader(t);return this.gl.shaderSource(r,e),this.gl.compileShader(r),this.gl.getShaderParameter(r,this.gl.COMPILE_STATUS)?r:(console.log(this.gl.getShaderInfoLog(r)),null)}},{"../../../utils":98}],78:[function(t,e,r){function i(t,e,r,o,s){var a={uSampler:{type:"sampler2D",value:0},projectionMatrix:{type:"mat3",value:new Float32Array([1,0,0,0,1,0,0,0,1])}};if(o)for(var h in o)a[h]=o[h];var u={aVertexPosition:0,aTextureCoord:0,aColor:0};if(s)for(var l in s)u[l]=s[l];e=e||i.defaultVertexSrc,r=r||i.defaultFragmentSrc,n.call(this,t,e,r,a,u)}var n=t("./Shader");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.defaultVertexSrc=["precision lowp float;","attribute vec2 aVertexPosition;","attribute vec2 aTextureCoord;","attribute vec4 aColor;","uniform mat3 projectionMatrix;","varying vec2 vTextureCoord;","varying vec4 vColor;","void main(void){"," gl_Position = vec4((projectionMatrix * vec3(aVertexPosition, 1.0)).xy, 0.0, 1.0);"," vTextureCoord = aTextureCoord;"," vColor = vec4(aColor.rgb * aColor.a, aColor.a);","}"].join("\n"),i.defaultFragmentSrc=["precision lowp float;","varying vec2 vTextureCoord;","varying vec4 vColor;","uniform sampler2D uSampler;","void main(void){"," gl_FragColor = texture2D(uSampler, vTextureCoord) * vColor ;","}"].join("\n")},{"./Shader":77}],79:[function(t,e,r){function i(t){vertexSrc=i.defaultVertexSrc,fragmentSrc=i.defaultFragmentSrc,console.log(fragmentSrc),n.call(this,t,vertexSrc,fragmentSrc)}var n=t("pixi-gl-core").GLShader;i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.defaultVertexSrc=["precision lowp float;","attribute vec2 aVertexPosition;","attribute vec2 aTextureCoord;","attribute vec4 aColor;","uniform mat3 projectionMatrix;","varying vec2 vTextureCoord;","varying vec4 vColor;","void main(void){"," gl_Position = vec4((projectionMatrix * vec3(aVertexPosition, 1.0)).xy, 0.0, 1.0);"," vTextureCoord = aTextureCoord;"," vColor = vec4(aColor.rgb * aColor.a, aColor.a);","}"].join("\n"),i.defaultFragmentSrc=["precision lowp float;","varying vec2 vTextureCoord;","varying vec4 vColor;","uniform sampler2D uSampler;","void main(void){"," gl_FragColor = texture2D(uSampler, vTextureCoord) * vColor ;","}"].join("\n")},{"pixi-gl-core":1}],80:[function(t,e,r){function i(t){n.call(this,t)}var n=t("../managers/WebGLManager");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.start=function(){},i.prototype.stop=function(){this.flush()},i.prototype.flush=function(){},i.prototype.render=function(t){}},{"../managers/WebGLManager":74}],81:[function(t,e,r){function i(t){this.gl=t,this.vertices=new Float32Array([0,0,200,0,200,200,0,200]),this.uvs=new Float32Array([0,0,1,0,1,1,0,1]),this.colors=new Float32Array([1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]),this.indices=new Uint16Array([0,1,2,0,3,2]),this.vertexBuffer=t.createBuffer(),this.indexBuffer=t.createBuffer(),t.bindBuffer(t.ARRAY_BUFFER,this.vertexBuffer),t.bufferData(t.ARRAY_BUFFER,128,t.DYNAMIC_DRAW),t.bindBuffer(t.ELEMENT_ARRAY_BUFFER,this.indexBuffer),t.bufferData(t.ELEMENT_ARRAY_BUFFER,this.indices,t.STATIC_DRAW),this.upload()}i.prototype.constructor=i,i.prototype.map=function(t,e){var r=0,i=0;this.uvs[0]=r,this.uvs[1]=i,this.uvs[2]=r+e.width/t.width,this.uvs[3]=i,this.uvs[4]=r+e.width/t.width,this.uvs[5]=i+e.height/t.height,this.uvs[6]=r,this.uvs[7]=i+e.height/t.height,r=e.x,i=e.y,this.vertices[0]=r,this.vertices[1]=i,this.vertices[2]=r+e.width,this.vertices[3]=i,this.vertices[4]=r+e.width,this.vertices[5]=i+e.height,this.vertices[6]=r,this.vertices[7]=i+e.height,this.upload()},i.prototype.upload=function(){var t=this.gl;t.bindBuffer(t.ARRAY_BUFFER,this.vertexBuffer),t.bufferSubData(t.ARRAY_BUFFER,0,this.vertices),t.bufferSubData(t.ARRAY_BUFFER,32,this.uvs),t.bufferSubData(t.ARRAY_BUFFER,64,this.colors)},i.prototype.destroy=function(){var t=this.gl;t.deleteBuffer(this.vertexBuffer),t.deleteBuffer(this.indexBuffer)},e.exports=i},{}],82:[function(t,e,r){var i=t("../../../math"),n=(t("../../../utils"),t("../../../const")),o=t("pixi-gl-core").GLTexture,s=t("pixi-gl-core").GLFramebuffer,a=t("./StencilMaskStack"),h=function(t,e,r,h,u,l){if(this.gl=t,this.frameBuffer=null,this.texture=null,this.clearColor=[0,0,0,0],this.size=new i.Rectangle(0,0,1,1),this.resolution=u||n.RESOLUTION,this.projectionMatrix=new i.Matrix,this.transform=null,this.frame=null,this.stencilBuffer=null,this.stencilMaskStack=new a,this.filterStack=[{renderTarget:this,filter:[],bounds:this.size}],this.scaleMode=h||n.SCALE_MODES.DEFAULT,this.root=l,this.frameBuffer=new s.createRGBA(t,100,100),this.root)this.frameBuffer.framebuffer=null;else{var c=new o(t);c.enableLinearScaling(),c.enableWrapClamp(),this.frameBuffer.enableTexture(c),this.texture=c.texture}this.resize(e,r)};h.prototype.constructor=h,e.exports=h,h.prototype.clear=function(t){var e=t||this.clearColor;this.frameBuffer.clear(e[0],e[1],e[2],e[3])},h.prototype.attachStencilBuffer=function(){this.root||this.frameBuffer.enableStencil()},h.prototype.activate=function(){var t=this.gl;this.frameBuffer.bind();var e=this.frame||this.size;this.calculateProjection(e),this.transform&&this.projectionMatrix.append(this.transform),t.viewport(0,0,e.width*this.resolution,e.height*this.resolution)},h.prototype.calculateProjection=function(t){var e=this.projectionMatrix;e.identity(),this.root?(e.a=1/t.width*2,e.d=-1/t.height*2,e.tx=-1-t.x*e.a,e.ty=1-t.y*e.d):(e.a=1/t.width*2,e.d=1/t.height*2,e.tx=-1-t.x*e.a,e.ty=-1-t.y*e.d)},h.prototype.resize=function(t,e){if(t=0|t,e=0|e,this.size.width!==t||this.size.height!==e){this.size.width=t,this.size.height=e,this.frameBuffer.resize(t*this.resolution,e*this.resolution);var r=this.frame||this.size;this.calculateProjection(r)}},h.prototype.destroy=function(){this.gl;this.frameBuffer.destroy(),this.frameBuffer=null,this.texture=null}},{"../../../const":38,"../../../math":48,"../../../utils":98,"./StencilMaskStack":83,"pixi-gl-core":1}],83:[function(t,e,r){function i(){this.stencilStack=[],this.reverse=!0,this.count=0}i.prototype.constructor=i,e.exports=i},{}],84:[function(t,e,r){function i(t,e){return e=e||{},e[CONST.BLEND_MODES.NORMAL]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.ADD]=[t.SRC_ALPHA,t.DST_ALPHA],e[CONST.BLEND_MODES.MULTIPLY]=[t.DST_COLOR,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.SCREEN]=[t.SRC_ALPHA,t.ONE],e[CONST.BLEND_MODES.OVERLAY]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.DARKEN]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.LIGHTEN]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.COLOR_DODGE]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.COLOR_BURN]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.HARD_LIGHT]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.SOFT_LIGHT]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.DIFFERENCE]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.EXCLUSION]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.HUE]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.SATURATION]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.COLOR]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.LUMINOSITY]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e}CONST=t("../../../const"),e.exports=i},{"../../../const":38}],85:[function(t,e,r){function i(t,e){e=e||{},e[CONST.DRAW_MODES.POINTS]=t.POINTS,e[CONST.DRAW_MODES.LINES]=t.LINES,e[CONST.DRAW_MODES.LINE_LOOP]=t.LINE_LOOP,e[CONST.DRAW_MODES.LINE_STRIP]=t.LINE_STRIP,e[CONST.DRAW_MODES.TRIANGLES]=t.TRIANGLES,e[CONST.DRAW_MODES.TRIANGLE_STRIP]=t.TRIANGLE_STRIP,e[CONST.DRAW_MODES.TRIANGLE_FAN]=t.TRIANGLE_FAN}CONST=t("../../../const"),e.exports=i},{"../../../const":38}],86:[function(t,e,r){function i(t){s.call(this),this.anchor=new n.Point,this._texture=null,this._width=0,this._height=0,this.tint=16777215,this.blendMode=u.BLEND_MODES.NORMAL,this.shader=null,this.cachedTint=16777215,this.texture=t||o.EMPTY,this.textureDirty=!0,this.vertexDirty=!0,this.vertexData=new Float32Array(8)}var n=t("../math"),o=t("../textures/Texture"),s=t("../display/Container"),a=t("../renderers/canvas/utils/CanvasTinter"),h=t("../utils"),u=t("../const"),l=new n.Point;i.prototype=Object.create(s.prototype),i.prototype.constructor=i,e.exports=i,Object.defineProperties(i.prototype,{width:{get:function(){return Math.abs(this.scale.x)*this.texture._frame.width},set:function(t){var e=h.sign(this.scale.x)||1;this.scale.x=e*t/this.texture._frame.width,this._width=t}},height:{get:function(){return Math.abs(this.scale.y)*this.texture._frame.height},set:function(t){var e=h.sign(this.scale.y)||1;this.scale.y=e*t/this.texture._frame.height,this._height=t}},texture:{get:function(){return this._texture},set:function(t){this._texture!==t&&(this._texture=t,this.cachedTint=16777215,this.textureDirty=!0,t&&(t.baseTexture.hasLoaded?this._onTextureUpdate():t.once("update",this._onTextureUpdate,this)))}}}),i.prototype._onTextureUpdate=function(){this.textureDirty=!0,this._width&&(this.scale.x=h.sign(this.scale.x)*this._width/this.texture.frame.width),this._height&&(this.scale.y=h.sign(this.scale.y)*this._height/this.texture.frame.height)},i.prototype.caclulateVertices=function(){var t,e,r,i,n=this._texture,o=this.worldTransform,s=o.a,a=o.b,h=o.c,u=o.d,l=o.tx,c=o.ty,p=this.vertexData,d=n.trim;d?(e=d.x-this.anchor.x*d.width,t=e+n.crop.width,i=d.y-this.anchor.y*d.height,r=i+n.crop.height):(t=n._frame.width*(1-this.anchor.x),e=n._frame.width*-this.anchor.x,r=n._frame.height*(1-this.anchor.y),i=n._frame.height*-this.anchor.y),p[0]=s*e+h*i+l,p[1]=u*i+a*e+c,p[2]=s*t+h*i+l,p[3]=u*i+a*t+c,p[4]=s*t+h*r+l,p[5]=u*r+a*t+c,p[6]=s*e+h*r+l,p[7]=u*r+a*e+c},i.prototype._renderWebGL=function(t){this.textureDirty&&(this.textureDirty=!1,this._onTextureUpdate(),this.vertexDirty=!0),this.vertexDirty&&(this.vertexDirty=!1,this.caclulateVertices()),t.setObjectRenderer(t.plugins.sprite),t.plugins.sprite.render(this)},i.prototype.getBounds=function(t){if(!this._currentBounds){this.vertexDirty&&(this.vertexDirty=!1,this.caclulateVertices());var e,r,i,n,o=this.vertexData,s=o[0],a=o[1],h=o[2],u=o[3],l=o[4],c=o[5],p=o[6],d=o[7];if(e=s,e=e>h?h:e,e=e>l?l:e,e=e>p?p:e,i=a,i=i>u?u:i,i=i>c?c:i,i=i>d?d:i,r=s,r=h>r?h:r,r=l>r?l:r,r=p>r?p:r,n=a,n=u>n?u:n,n=c>n?c:n,n=d>n?d:n,this.children.length){var f=this.containerGetBounds();w0=f.x,w1=f.x+f.width,h0=f.y,h1=f.y+f.height,e=ew1?r:w1,n=n>h1?n:h1}var v=this._bounds;v.x=e,v.width=r-e,v.y=i,v.height=n-i,this._currentBounds=v}return this._currentBounds},i.prototype.getLocalBounds=function(){return this._bounds.x=-this._texture._frame.width*this.anchor.x,this._bounds.y=-this._texture._frame.height*this.anchor.y,this._bounds.width=this._texture._frame.width,this._bounds.height=this._texture._frame.height,this._bounds},i.prototype.containsPoint=function(t){this.worldTransform.applyInverse(t,l);var e,r=this._texture._frame.width,i=this._texture._frame.height,n=-r*this.anchor.x;return l.x>n&&l.xe&&l.yr;r++)this.groups[r]={textures:[],textureCount:0,ids:[],size:0,start:0,blend:0};this.currentGroup=this.groups[this.groupCount++],this.currentTexture=null}var n=t("../../renderers/webgl/utils/ObjectRenderer"),o=t("../../renderers/webgl/WebGLRenderer"),s=(t("../../renderers/webgl/shaders/_TextureShader"),t("../../utils/createIndicesForQuads")),a=t("./generateMultiTextureShader"),h=t("../../const"),u=t("pixi-gl-core"),l=2;i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,o.registerPlugin("sprite",i),i.prototype.onContextChange=function(){var t=this.renderer.gl;this._shader=a(t,l),this.shader=this.renderer.shaderManager.defaultShader,this.vertexBuffer=u.GLBuffer.createVertexBuffer(t,null,t.DYNAMIC_DRAW),this.indexBuffer=u.GLBuffer.createIndexBuffer(t,this.indices,t.STATIC_DRAW),this.vao=new u.VertexArrayObject(t),this.vao.addIndex(this.indexBuffer),this.vao.addAttribute(this.vertexBuffer,this._shader.attributes.aVertexPosition,t.FLOAT,!1,this.vertByteSize,0),this.vao.addAttribute(this.vertexBuffer,this._shader.attributes.aTextureCoord,t.UNSIGNED_SHORT,!0,this.vertByteSize,8),this.vao.addAttribute(this.vertexBuffer,this._shader.attributes.aColor,t.UNSIGNED_BYTE,!0,this.vertByteSize,12),this.vao.addAttribute(this.vertexBuffer,this._shader.attributes.aTextureId,t.FLOAT,!1,this.vertByteSize,16),this.currentBlendMode=99999},i.prototype.render=function(t){this.currentIndex>=this.size&&this.flush();var e=t.texture._uvs;if(e){var r=(this.groups,t.texture.baseTexture),i=this.currentGroup;if(this.currentTexture!==r&&(this.currentTexture=r,!r._enabled)){if(r._enabled=!0,r._id=this.textureCount,this.textureCount===l){for(var n=0;n>16)+(65280&t.tint)+((255&t.tint)<<16)+(255*t.worldAlpha<<24);a[o++]=h[0],a[o++]=h[1],this.uvs[o++]=e.uvs_uint32[0],s[o++]=u,a[o++]=r._id,a[o++]=h[2],a[o++]=h[3],this.uvs[o++]=e.uvs_uint32[1],s[o++]=u,a[o++]=r._id,a[o++]=h[4],a[o++]=h[5],this.uvs[o++]=e.uvs_uint32[2],s[o++]=u,a[o++]=r._id,a[o++]=h[6],a[o++]=h[7],this.uvs[o++]=e.uvs_uint32[3],s[o++]=u,a[o++]=r._id,this.sprites[this.currentBatchSize++]=t}},i.prototype.renderSprites=function(t){for(var e=0;e.5*this.size)this.vertexBuffer.upload(this.vertices,0,!0);else{var e=this.positions.subarray(0,this.currentIndex*this.vertByteSize);this.vertexBuffer.upload(e,0,!0)}for(this.renderer.bindShader(this._shader),this.renderer.blendModeManager.setBlendMode(0),t=0;tu;u++)h[u]=u;return a.bind(),a.uniforms.uSamplers=h,a}function n(t){var e="vec4 getSampleFromArray(sampler2D textures[%%], int ndx, vec2 uv) {\n\nvec4 color;";e+="\n", -e+="\n";for(var r=0;t>r;r++)r>0&&(e+="\nelse "),t-1>r&&(e+="if(ndx == "+r+")"),e+="\n{",e+="\n color = texture2D(textures["+r+"], uv);",e+="\n}";return e+="\n",e+="\n",e+="return color;",e+="\n}"}var o=t("pixi-gl-core").GLShader,s=["varying vec2 vTextureCoord;","varying vec4 vColor;","varying float vTextureId;","uniform sampler2D uSamplers[%%];","void main(void){","gl_FragColor = getSampleFromArray(uSamplers, int(vTextureId), vTextureCoord) * vColor;","}"].join("\n");e.exports=i},{"pixi-gl-core":1}],89:[function(t,e,r){function i(t,e,r){this.canvas=document.createElement("canvas"),this.context=this.canvas.getContext("2d"),this.resolution=r||h.RESOLUTION,this._text=null,this._style=null;var i=o.fromCanvas(this.canvas);i.trim=new s.Rectangle,n.call(this,i),this.text=t,this.style=e}var n=t("../sprites/Sprite"),o=t("../textures/Texture"),s=t("../math"),a=t("../utils"),h=t("../const");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.fontPropertiesCache={},i.fontPropertiesCanvas=document.createElement("canvas"),i.fontPropertiesContext=i.fontPropertiesCanvas.getContext("2d"),Object.defineProperties(i.prototype,{width:{get:function(){return this.dirty&&this.updateText(),this.scale.x*this._texture._frame.width},set:function(t){this.scale.x=t/this._texture._frame.width,this._width=t}},height:{get:function(){return this.dirty&&this.updateText(),this.scale.y*this._texture._frame.height},set:function(t){this.scale.y=t/this._texture._frame.height,this._height=t}},style:{get:function(){return this._style},set:function(t){t=t||{},"number"==typeof t.fill&&(t.fill=a.hex2string(t.fill)),"number"==typeof t.stroke&&(t.stroke=a.hex2string(t.stroke)),"number"==typeof t.dropShadowColor&&(t.dropShadowColor=a.hex2string(t.dropShadowColor)),t.font=t.font||"bold 20pt Arial",t.fill=t.fill||"black",t.align=t.align||"left",t.stroke=t.stroke||"black",t.strokeThickness=t.strokeThickness||0,t.wordWrap=t.wordWrap||!1,t.wordWrapWidth=t.wordWrapWidth||100,t.dropShadow=t.dropShadow||!1,t.dropShadowColor=t.dropShadowColor||"#000000",t.dropShadowAngle=void 0!==t.dropShadowAngle?t.dropShadowAngle:Math.PI/6,t.dropShadowDistance=void 0!==t.dropShadowDistance?t.dropShadowDistance:5,t.dropShadowBlur=void 0!==t.dropShadowBlur?t.dropShadowBlur:0,t.padding=t.padding||0,t.textBaseline=t.textBaseline||"alphabetic",t.lineJoin=t.lineJoin||"miter",t.miterLimit=t.miterLimit||10,this._style=t,this.dirty=!0}},text:{get:function(){return this._text},set:function(t){t=t.toString()||" ",this._text!==t&&(this._text=t,this.dirty=!0)}}}),i.prototype.updateText=function(){var t=this._style;this.context.font=t.font;for(var e=t.wordWrap?this.wordWrap(this._text):this._text,r=e.split(/(?:\r\n|\r|\n)/),i=new Array(r.length),n=0,o=this.determineFontProperties(t.font),s=0;s0?(this.context.shadowColor=t.dropShadowColor,this.context.shadowBlur=t.dropShadowBlur):this.context.fillStyle=t.dropShadowColor;var d=Math.cos(t.dropShadowAngle)*t.dropShadowDistance,f=Math.sin(t.dropShadowAngle)*t.dropShadowDistance;for(s=0;sh;h++){for(u=0;p>u;u+=4)if(255!==l[d+u]){f=!0;break}if(f)break;d+=p}for(e.ascent=s-h,d=c-p,f=!1,h=a;h>s;h--){for(u=0;p>u;u+=4)if(255!==l[d+u]){f=!0;break}if(f)break;d-=p}e.descent=h-s,e.fontSize=e.ascent+e.descent,i.fontPropertiesCache[t]=e}return e},i.prototype.wordWrap=function(t){for(var e="",r=t.split("\n"),i=this._style.wordWrapWidth,n=0;no?(a>0&&(e+="\n"),e+=s[a],o=i-h):(o-=u,e+=" "+s[a])}n0&&e>0,this.width=this._frame.width=this.crop.width=t,this.height=this._frame.height=this.crop.height=e,r&&(this.baseTexture.width=this.width,this.baseTexture.height=this.height),this.valid&&(this.textureBuffer.resize(this.width,this.height),this.filterManager&&this.filterManager.resize(this.width,this.height)))},i.prototype.clear=function(){this.valid&&(this.renderer.type===l.RENDERER_TYPE.WEBGL&&this.renderer.gl.bindFramebuffer(this.renderer.gl.FRAMEBUFFER,this.textureBuffer.frameBuffer),this.textureBuffer.clear())},i.prototype.renderWebGL=function(t,e,r,i){if(this.valid){if(i=void 0!==i?i:!0,this.textureBuffer.transform=e,this.textureBuffer.activate(),t.worldAlpha=1,i){t.worldTransform.identity(),t.currentBounds=null;var n,o,s=t.children;for(n=0,o=s.length;o>n;++n)s[n].updateTransform()}var a=this.renderer.filterManager;this.renderer.filterManager=this.filterManager,this.renderer.renderDisplayObject(t,this.textureBuffer,r),this.renderer.filterManager=a}},i.prototype.renderCanvas=function(t,e,r,i){if(this.valid){i=!!i;var n=c;n.identity(),e&&n.append(e);var o=t.worldTransform;t.worldTransform=n,t.worldAlpha=1;var s,a,h=t.children;for(s=0,a=h.length;a>s;++s)h[s].updateTransform();r&&this.textureBuffer.clear();var u=this.textureBuffer.context,l=this.renderer.resolution;this.renderer.resolution=this.resolution,this.renderer.renderDisplayObject(t,u),this.renderer.resolution=l,t.worldTransform===n&&(t.worldTransform=o)}},i.prototype.destroy=function(){o.prototype.destroy.call(this,!0),this.textureBuffer.destroy(),this.filterManager&&this.filterManager.destroy(),this.renderer=null},i.prototype.getImage=function(){var t=new Image;return t.src=this.getBase64(),t},i.prototype.getBase64=function(){return this.getCanvas().toDataURL()},i.prototype.getCanvas=function(){if(this.renderer.type===l.RENDERER_TYPE.WEBGL){var t=this.renderer.gl,e=this.textureBuffer.size.width,r=this.textureBuffer.size.height,i=new Uint8Array(4*e*r);t.bindFramebuffer(t.FRAMEBUFFER,this.textureBuffer.frameBuffer),t.readPixels(0,0,e,r,t.RGBA,t.UNSIGNED_BYTE,i),t.bindFramebuffer(t.FRAMEBUFFER,null);var n=new h(e,r),o=n.context.getImageData(0,0,e,r);return o.data.set(i),n.context.putImageData(o,0,0),n.canvas}return this.textureBuffer.canvas},i.prototype.getPixels=function(){var t,e;if(this.renderer.type===l.RENDERER_TYPE.WEBGL){var r=this.renderer.gl;t=this.textureBuffer.size.width,e=this.textureBuffer.size.height;var i=new Uint8Array(4*t*e);return r.bindFramebuffer(r.FRAMEBUFFER,this.textureBuffer.frameBuffer),r.readPixels(0,0,t,e,r.RGBA,r.UNSIGNED_BYTE,i),r.bindFramebuffer(r.FRAMEBUFFER,null),i}return t=this.textureBuffer.canvas.width,e=this.textureBuffer.canvas.height,this.textureBuffer.canvas.getContext("2d").getImageData(0,0,t,e).data},i.prototype.getPixel=function(t,e){if(this.renderer.type===l.RENDERER_TYPE.WEBGL){var r=this.renderer.gl,i=new Uint8Array(4);return r.bindFramebuffer(r.FRAMEBUFFER,this.textureBuffer.frameBuffer),r.readPixels(t,e,1,1,r.RGBA,r.UNSIGNED_BYTE,i),r.bindFramebuffer(r.FRAMEBUFFER,null),i}return this.textureBuffer.canvas.getContext("2d").getImageData(t,e,1,1).data}},{"../const":38,"../math":48,"../renderers/canvas/utils/CanvasBuffer":60,"../renderers/webgl/managers/FilterManager":70,"../renderers/webgl/utils/RenderTarget":82,"./BaseTexture":90,"./Texture":92}],92:[function(t,e,r){function i(t,e,r,n,o){a.call(this),this.noFrame=!1,e||(this.noFrame=!0,e=new h.Rectangle(0,0,1,1)),t instanceof i&&(t=t.baseTexture),this.baseTexture=t,this._frame=e,this.trim=n,this.valid=!1,this.requiresUpdate=!1,this._uvs=null,this.width=0,this.height=0,this.crop=r||e,this.rotate=!!o,t.hasLoaded?(this.noFrame&&(e=new h.Rectangle(0,0,t.width,t.height),t.on("update",this.onBaseTextureUpdated,this)),this.frame=e):t.once("loaded",this.onBaseTextureLoaded,this)}var n=t("./BaseTexture"),o=t("./VideoBaseTexture"),s=t("./TextureUvs"),a=t("eventemitter3"),h=t("../math"),u=t("../utils");i.prototype=Object.create(a.prototype),i.prototype.constructor=i,e.exports=i,Object.defineProperties(i.prototype,{frame:{get:function(){return this._frame},set:function(t){if(this._frame=t,this.noFrame=!1,this.width=t.width,this.height=t.height,!this.trim&&!this.rotate&&(t.x+t.width>this.baseTexture.width||t.y+t.height>this.baseTexture.height))throw new Error("Texture Error: frame does not fit inside the base Texture dimensions "+this);this.valid=t&&t.width&&t.height&&this.baseTexture.hasLoaded,this.trim?(this.width=this.trim.width,this.height=this.trim.height,this._frame.width=this.trim.width,this._frame.height=this.trim.height):this.crop=t,this.valid&&this._updateUvs()}}}),i.prototype.update=function(){this.baseTexture.update()},i.prototype.onBaseTextureLoaded=function(t){this.noFrame?this.frame=new h.Rectangle(0,0,t.width,t.height):this.frame=this._frame,this.emit("update",this)},i.prototype.onBaseTextureUpdated=function(t){this._frame.width=t.width,this._frame.height=t.height,this.emit("update",this)},i.prototype.destroy=function(t){this.baseTexture&&(t&&this.baseTexture.destroy(),this.baseTexture.off("update",this.onBaseTextureUpdated,this),this.baseTexture.off("loaded",this.onBaseTextureLoaded,this),this.baseTexture=null),this._frame=null,this._uvs=null,this.trim=null,this.crop=null,this.valid=!1,this.off("dispose",this.dispose,this),this.off("update",this.update,this)},i.prototype.clone=function(){return new i(this.baseTexture,this.frame,this.crop,this.trim,this.rotate)},i.prototype._updateUvs=function(){this._uvs||(this._uvs=new s),this._uvs.set(this.crop,this.baseTexture,this.rotate)},i.fromImage=function(t,e,r){var o=u.TextureCache[t];return o||(o=new i(n.fromImage(t,e,r)),u.TextureCache[t]=o),o},i.fromFrame=function(t){var e=u.TextureCache[t];if(!e)throw new Error('The frameId "'+t+'" does not exist in the texture cache');return e},i.fromCanvas=function(t,e){return new i(n.fromCanvas(t,e))},i.fromVideo=function(t,e){return"string"==typeof t?i.fromVideoUrl(t,e):new i(o.fromVideo(t,e))},i.fromVideoUrl=function(t,e){return new i(o.fromUrl(t,e))},i.addTextureToCache=function(t,e){u.TextureCache[e]=t},i.removeTextureFromCache=function(t){var e=u.TextureCache[t];return delete u.TextureCache[t],delete u.BaseTextureCache[t],e},i.EMPTY=new i(new n)},{"../math":48,"../utils":98,"./BaseTexture":90,"./TextureUvs":93,"./VideoBaseTexture":94,eventemitter3:25}],93:[function(t,e,r){function i(){this.x0=0,this.y0=0,this.x1=1,this.y1=0,this.x2=1,this.y2=1,this.x3=0,this.y3=1,this.xy0_uint32=0,this.xy1_uint32=0,this.xy2_uint32=0,this.xy3_uint32=0,this.uvs_uint32=new Uint32Array(4)}e.exports=i,i.prototype.set=function(t,e,r){var i=e.width,n=e.height;r?(this.x0=(t.x+t.height)/i,this.y0=t.y/n,this.x1=(t.x+t.height)/i,this.y1=(t.y+t.width)/n,this.x2=t.x/i,this.y2=(t.y+t.width)/n,this.x3=t.x/i,this.y3=t.y/n):(this.x0=t.x/i,this.y0=t.y/n,this.x1=(t.x+t.width)/i,this.y1=t.y/n,this.x2=(t.x+t.width)/i,this.y2=(t.y+t.height)/n,this.x3=t.x/i,this.y3=(t.y+t.height)/n),this.uvs_uint32[0]=(65535*this.y0&65535)<<16|65535*this.x0&65535,this.uvs_uint32[1]=(65535*this.y1&65535)<<16|65535*this.x1&65535,this.uvs_uint32[2]=(65535*this.y2&65535)<<16|65535*this.x2&65535,this.uvs_uint32[3]=(65535*this.y3&65535)<<16|65535*this.x3&65535}},{}],94:[function(t,e,r){function i(t,e){if(!t)throw new Error("No video source element specified.");(t.readyState===t.HAVE_ENOUGH_DATA||t.readyState===t.HAVE_FUTURE_DATA)&&t.width&&t.height&&(t.complete=!0),o.call(this,t,e),this.autoUpdate=!1,this._onUpdate=this._onUpdate.bind(this),this._onCanPlay=this._onCanPlay.bind(this),t.complete||(t.addEventListener("canplay",this._onCanPlay),t.addEventListener("canplaythrough",this._onCanPlay),t.addEventListener("play",this._onPlayStart.bind(this)),t.addEventListener("pause",this._onPlayStop.bind(this))),this.__loaded=!1}function n(t,e){e||(e="video/"+t.substr(t.lastIndexOf(".")+1));var r=document.createElement("source");return r.src=t,r.type=e,r}var o=t("./BaseTexture"),s=t("../utils");i.prototype=Object.create(o.prototype),i.prototype.constructor=i,e.exports=i,i.prototype._onUpdate=function(){this.autoUpdate&&(window.requestAnimationFrame(this._onUpdate),this.update())},i.prototype._onPlayStart=function(){this.autoUpdate||(window.requestAnimationFrame(this._onUpdate),this.autoUpdate=!0)},i.prototype._onPlayStop=function(){this.autoUpdate=!1},i.prototype._onCanPlay=function(){this.hasLoaded=!0,this.source&&(this.source.removeEventListener("canplay",this._onCanPlay),this.source.removeEventListener("canplaythrough",this._onCanPlay),this.width=this.source.videoWidth,this.height=this.source.videoHeight,this.source.play(),this.__loaded||(this.__loaded=!0,this.emit("loaded",this)))},i.prototype.destroy=function(){this.source&&this.source._pixiId&&(delete s.BaseTextureCache[this.source._pixiId],delete this.source._pixiId),o.prototype.destroy.call(this)},i.fromVideo=function(t,e){t._pixiId||(t._pixiId="video_"+s.uid());var r=s.BaseTextureCache[t._pixiId];return r||(r=new i(t,e),s.BaseTextureCache[t._pixiId]=r),r},i.fromUrl=function(t,e){var r=document.createElement("video");if(Array.isArray(t))for(var o=0;othis._maxElapsedMS&&(e=this._maxElapsedMS),this.deltaTime=e*n.TARGET_FPMS*this.speed,this._emitter.emit(s,this.deltaTime),this.lastTime=t},e.exports=i},{"../const":38,eventemitter3:25}],96:[function(t,e,r){var i=t("./Ticker"),n=new i;n.autoStart=!0,e.exports={shared:n,Ticker:i}},{"./Ticker":95}],97:[function(t,e,r){var i=function(t){for(var e=6*t,r=new Uint16Array(e),i=0,n=0;e>i;i+=6,n+=4)r[i+0]=n+0,r[i+1]=n+1,r[i+2]=n+2,r[i+3]=n+0,r[i+4]=n+2,r[i+5]=n+3;return r};e.exports=i},{}],98:[function(t,e,r){var i=t("../const"),n=e.exports={_uid:0,_saidHello:!1,EventEmitter:t("eventemitter3"),pluginTarget:t("./pluginTarget"),async:t("async"),uid:function(){return++n._uid},hex2rgb:function(t,e){return e=e||[],e[0]=(t>>16&255)/255,e[1]=(t>>8&255)/255,e[2]=(255&t)/255,e},hex2string:function(t){return t=t.toString(16),t="000000".substr(0,6-t.length)+t,"#"+t},rgb2hex:function(t){return(255*t[0]<<16)+(255*t[1]<<8)+255*t[2]},canUseNewCanvasBlendModes:function(){if("undefined"==typeof document)return!1;var t="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAQAAAABAQMAAADD8p2OAAAAA1BMVEX/",e="AAAACklEQVQI12NgAAAAAgAB4iG8MwAAAABJRU5ErkJggg==",r=new Image;r.src=t+"AP804Oa6"+e;var i=new Image;i.src=t+"/wCKxvRF"+e;var n=document.createElement("canvas");n.width=6,n.height=1;var o=n.getContext("2d");o.globalCompositeOperation="multiply",o.drawImage(r,0,0),o.drawImage(i,2,0);var s=o.getImageData(2,0,1,1).data;return 255===s[0]&&0===s[1]&&0===s[2]},getNextPowerOfTwo:function(t){if(t>0&&0===(t&t-1))return t;for(var e=1;t>e;)e<<=1;return e},isPowerOfTwo:function(t,e){return t>0&&0===(t&t-1)&&e>0&&0===(e&e-1)},getResolutionOfUrl:function(t){var e=i.RETINA_PREFIX.exec(t);return e?parseFloat(e[1]):1},sayHello:function(t){if(!n._saidHello){if(navigator.userAgent.toLowerCase().indexOf("chrome")>-1){var e=["\n %c %c %c Pixi.js "+i.VERSION+" - ✰ "+t+" ✰ %c %c http://www.pixijs.com/ %c %c ♥%c♥%c♥ \n\n","background: #ff66a5; padding:5px 0;","background: #ff66a5; padding:5px 0;","color: #ff66a5; background: #030307; padding:5px 0;","background: #ff66a5; padding:5px 0;","background: #ffc3dc; padding:5px 0;","background: #ff66a5; padding:5px 0;","color: #ff2424; background: #fff; padding:5px 0;","color: #ff2424; background: #fff; padding:5px 0;","color: #ff2424; background: #fff; padding:5px 0;"];window.console.log.apply(console,e)}else window.console&&window.console.log("Pixi.js "+i.VERSION+" - "+t+" - http://www.pixijs.com/");n._saidHello=!0}},isWebGLSupported:function(){var t={stencil:!0};try{if(!window.WebGLRenderingContext)return!1;var e=document.createElement("canvas"),r=e.getContext("webgl",t)||e.getContext("experimental-webgl",t);return!(!r||!r.getContextAttributes().stencil)}catch(i){return!1}},sign:function(t){return t?0>t?-1:1:0},removeItems:function(t,e,r){var i=t.length;if(!(e>=i||0===r)){r=e+r>i?i-e:r;for(var n=e,o=i-r;o>n;++n)t[n]=t[n+r];t.length=o}},TextureCache:{},BaseTextureCache:{}}},{"../const":38,"./pluginTarget":99,async:16,eventemitter3:25}],99:[function(t,e,r){function i(t){t.__plugins={},t.registerPlugin=function(e,r){t.__plugins[e]=r},t.prototype.initPlugins=function(){this.plugins=this.plugins||{};for(var e in t.__plugins)this.plugins[e]=new t.__plugins[e](this)},t.prototype.destroyPlugins=function(){for(var t in this.plugins)this.plugins[t].destroy(),this.plugins[t]=null;this.plugins=null}}e.exports={mixin:function(t){i(t)}}},{}],100:[function(t,e,r){var i=t("./core"),n=t("./mesh"),o=t("./extras"),s=t("./filters");i.SpriteBatch=function(){throw new ReferenceError("SpriteBatch does not exist any more, please use the new ParticleContainer instead.")},i.AssetLoader=function(){throw new ReferenceError("The loader system was overhauled in pixi v3, please see the new PIXI.loaders.Loader class.")},Object.defineProperties(i,{Stage:{get:function(){return console.warn("You do not need to use a PIXI Stage any more, you can simply render any container."),i.Container}},DisplayObjectContainer:{get:function(){return console.warn("DisplayObjectContainer has been shortened to Container, please use Container from now on."),i.Container}},Strip:{get:function(){return console.warn("The Strip class has been renamed to Mesh and moved to mesh.Mesh, please use mesh.Mesh from now on."),n.Mesh}},Rope:{get:function(){return console.warn("The Rope class has been moved to mesh.Rope, please use mesh.Rope from now on."),n.Rope}},MovieClip:{get:function(){return console.warn("The MovieClip class has been moved to extras.MovieClip, please use extras.MovieClip from now on."),o.MovieClip}},TilingSprite:{get:function(){return console.warn("The TilingSprite class has been moved to extras.TilingSprite, please use extras.TilingSprite from now on."),o.TilingSprite}},BitmapText:{get:function(){return console.warn("The BitmapText class has been moved to extras.BitmapText, please use extras.BitmapText from now on."),o.BitmapText}},blendModes:{get:function(){return console.warn("The blendModes has been moved to BLEND_MODES, please use BLEND_MODES from now on."),i.BLEND_MODES}},scaleModes:{get:function(){return console.warn("The scaleModes has been moved to SCALE_MODES, please use SCALE_MODES from now on."),i.SCALE_MODES}},BaseTextureCache:{get:function(){return console.warn("The BaseTextureCache class has been moved to utils.BaseTextureCache, please use utils.BaseTextureCache from now on."),i.utils.BaseTextureCache}},TextureCache:{get:function(){return console.warn("The TextureCache class has been moved to utils.TextureCache, please use utils.TextureCache from now on."),i.utils.TextureCache}},math:{get:function(){return console.warn("The math namespace is deprecated, please access members already accessible on PIXI."),i}}}),i.Sprite.prototype.setTexture=function(t){this.texture=t,console.warn("setTexture is now deprecated, please use the texture property, e.g : sprite.texture = texture;")},o.BitmapText.prototype.setText=function(t){this.text=t,console.warn("setText is now deprecated, please use the text property, e.g : myBitmapText.text = 'my text';")},i.Text.prototype.setText=function(t){this.text=t,console.warn("setText is now deprecated, please use the text property, e.g : myText.text = 'my text';")},i.Text.prototype.setStyle=function(t){this.style=t,console.warn("setStyle is now deprecated, please use the style property, e.g : myText.style = style;")},i.Texture.prototype.setFrame=function(t){this.frame=t,console.warn("setFrame is now deprecated, please use the frame property, e.g : myTexture.frame = frame;")},Object.defineProperties(s,{AbstractFilter:{get:function(){return console.warn("filters.AbstractFilter is an undocumented alias, please use AbstractFilter from now on."),i.AbstractFilter}},FXAAFilter:{get:function(){return console.warn("filters.FXAAFilter is an undocumented alias, please use FXAAFilter from now on."),i.FXAAFilter}},SpriteMaskFilter:{get:function(){return console.warn("filters.SpriteMaskFilter is an undocumented alias, please use SpriteMaskFilter from now on."),i.SpriteMaskFilter}}}),i.utils.uuid=function(){return console.warn("utils.uuid() is deprecated, please use utils.uid() from now on."),i.utils.uid()}},{"./core":45,"./extras":107,"./filters":124,"./mesh":149}],101:[function(t,e,r){function i(t,e){n.Container.call(this),e=e||{},this.textWidth=0,this.textHeight=0,this._glyphs=[],this._font={tint:void 0!==e.tint?e.tint:16777215,align:e.align||"left",name:null,size:0},this.font=e.font,this._text=t,this.maxWidth=0,this.maxLineHeight=0,this.dirty=!1,this.updateText()}var n=t("../core");i.prototype=Object.create(n.Container.prototype),i.prototype.constructor=i,e.exports=i,Object.defineProperties(i.prototype,{tint:{get:function(){return this._font.tint},set:function(t){this._font.tint="number"==typeof t&&t>=0?t:16777215,this.dirty=!0}},align:{get:function(){return this._font.align},set:function(t){this._font.align=t||"left",this.dirty=!0}},font:{get:function(){return this._font},set:function(t){t&&("string"==typeof t?(t=t.split(" "),this._font.name=1===t.length?t[0]:t.slice(1).join(" "),this._font.size=t.length>=2?parseInt(t[0],10):i.fonts[this._font.name].size):(this._font.name=t.name,this._font.size="number"==typeof t.size?t.size:parseInt(t.size,10)),this.dirty=!0)}},text:{get:function(){return this._text},set:function(t){t=t.toString()||" ",this._text!==t&&(this._text=t,this.dirty=!0)}}}),i.prototype.updateText=function(){for(var t=i.fonts[this._font.name],e=new n.Point,r=null,o=[],s=0,a=0,h=[],u=0,l=this._font.size/t.size,c=-1,p=0,d=0;d0&&e.x*l>this.maxWidth)n.utils.removeItems(o,c,d-c),d=c,c=-1,h.push(s),a=Math.max(a,s),u++,e.x=0,e.y+=t.lineHeight,r=null;else{var v=t.chars[f];v&&(r&&v.kerning[r]&&(e.x+=v.kerning[r]),o.push({texture:v.texture,line:u,charCode:f,position:new n.Point(e.x+v.xOffset,e.y+v.yOffset)}),s=e.x+(v.texture.width+v.xOffset),e.x+=v.xAdvance,p=Math.max(p,v.yOffset+v.texture.height),r=f)}}h.push(s),a=Math.max(a,s);var g=[];for(d=0;u>=d;d++){var m=0;"right"===this._font.align?m=a-h[d]:"center"===this._font.align&&(m=(a-h[d])/2),g.push(m)}var y=o.length,x=this.tint;for(d=0;y>d;d++){var b=this._glyphs[d];b?b.texture=o[d].texture:(b=new n.Sprite(o[d].texture),this._glyphs.push(b)),b.position.x=(o[d].position.x+g[o[d].line])*l,b.position.y=o[d].position.y*l,b.scale.x=b.scale.y=l,b.tint=x,b.parent||this.addChild(b)}for(d=y;dt&&(t+=this._textures.length),t}}}),i.prototype.stop=function(){this.playing&&(this.playing=!1,n.ticker.shared.remove(this.update,this))},i.prototype.play=function(){this.playing||(this.playing=!0,n.ticker.shared.add(this.update,this))},i.prototype.gotoAndStop=function(t){this.stop(),this._currentTime=t,this._texture=this._textures[this.currentFrame]},i.prototype.gotoAndPlay=function(t){this._currentTime=t,this.play()},i.prototype.update=function(t){var e=this.animationSpeed*t;if(null!==this._durations){var r=this._currentTime%1*this._durations[this.currentFrame];for(r+=e/60*1e3;0>r;)this._currentTime--,r+=this._durations[this.currentFrame];var i=Math.sign(this.animationSpeed*t);for(this._currentTime=Math.floor(this._currentTime);r>=this._durations[this.currentFrame];)r-=this._durations[this.currentFrame]*i,this._currentTime+=i;this._currentTime+=r/this._durations[this.currentFrame]}else this._currentTime+=e;this._currentTime<0&&!this.loop?(this.gotoAndStop(0),this.onComplete&&this.onComplete()):this._currentTime>=this._textures.length&&!this.loop?(this.gotoAndStop(this._textures.length-1),this.onComplete&&this.onComplete()):this._texture=this._textures[this.currentFrame]},i.prototype.destroy=function(){this.stop(),n.Sprite.prototype.destroy.call(this)},i.fromFrames=function(t){for(var e=[],r=0;rx?x:t,t=t>_?_:t,t=t>E?E:t,r=y,r=r>b?b:r,r=r>T?T:r,r=r>S?S:r,e=m,e=x>e?x:e,e=_>e?_:e,e=E>e?E:e,i=y,i=b>i?b:i,i=T>i?T:i,i=S>i?S:i;var w=this._bounds;return w.x=t,w.width=e-t,w.y=r,w.height=i-r,this._currentBounds=w,w},i.prototype.containsPoint=function(t){this.worldTransform.applyInverse(t,o);var e,r=this._width,i=this._height,n=-r*this.anchor.x;return o.x>n&&o.xe&&o.y 0.2) n = 65600.0; // :\n if (gray > 0.3) n = 332772.0; // *\n if (gray > 0.4) n = 15255086.0; // o\n if (gray > 0.5) n = 23385164.0; // &\n if (gray > 0.6) n = 15252014.0; // 8\n if (gray > 0.7) n = 13199452.0; // @\n if (gray > 0.8) n = 11512810.0; // #\n\n vec2 p = mod( uv / ( pixelSize * 0.5 ), 2.0) - vec2(1.0);\n col = col * character(n, p);\n\n gl_FragColor = vec4(col, 1.0);\n}\n",{dimensions:{type:"4fv",value:new Float32Array([0,0,0,0])},pixelSize:{type:"1f",value:8}})}var n=t("../../core");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i,Object.defineProperties(i.prototype,{size:{get:function(){return this.uniforms.pixelSize.value},set:function(t){this.uniforms.pixelSize.value=t}}})},{"../../core":45}],109:[function(t,e,r){function i(){n.AbstractFilter.call(this),this.blurXFilter=new o,this.blurYFilter=new s,this.defaultFilter=new n.AbstractFilter}var n=t("../../core"),o=t("../blur/BlurXFilter"),s=t("../blur/BlurYFilter");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.applyFilter=function(t,e,r){var i=t.filterManager.getRenderTarget(!0);this.defaultFilter.applyFilter(t,e,r),this.blurXFilter.applyFilter(t,e,i),t.blendModeManager.setBlendMode(n.BLEND_MODES.SCREEN),this.blurYFilter.applyFilter(t,i,r),t.blendModeManager.setBlendMode(n.BLEND_MODES.NORMAL),t.filterManager.returnRenderTarget(i)},Object.defineProperties(i.prototype,{blur:{get:function(){return this.blurXFilter.blur},set:function(t){this.blurXFilter.blur=this.blurYFilter.blur=t}},blurX:{get:function(){return this.blurXFilter.blur},set:function(t){this.blurXFilter.blur=t}},blurY:{get:function(){return this.blurYFilter.blur},set:function(t){this.blurYFilter.blur=t}}})},{"../../core":45,"../blur/BlurXFilter":112,"../blur/BlurYFilter":113}],110:[function(t,e,r){function i(t,e){n.AbstractFilter.call(this,"attribute vec2 aVertexPosition;\nattribute vec2 aTextureCoord;\nattribute vec4 aColor;\n\nuniform float strength;\nuniform float dirX;\nuniform float dirY;\nuniform mat3 projectionMatrix;\n\nvarying vec2 vTextureCoord;\nvarying vec4 vColor;\nvarying vec2 vBlurTexCoords[3];\n\nvoid main(void)\n{\n gl_Position = vec4((projectionMatrix * vec3((aVertexPosition), 1.0)).xy, 0.0, 1.0);\n vTextureCoord = aTextureCoord;\n\n vBlurTexCoords[0] = aTextureCoord + vec2( (0.004 * strength) * dirX, (0.004 * strength) * dirY );\n vBlurTexCoords[1] = aTextureCoord + vec2( (0.008 * strength) * dirX, (0.008 * strength) * dirY );\n vBlurTexCoords[2] = aTextureCoord + vec2( (0.012 * strength) * dirX, (0.012 * strength) * dirY );\n\n vColor = vec4(aColor.rgb * aColor.a, aColor.a);\n}\n","precision lowp float;\n\nvarying vec2 vTextureCoord;\nvarying vec2 vBlurTexCoords[3];\nvarying vec4 vColor;\n\nuniform sampler2D uSampler;\n\nvoid main(void)\n{\n gl_FragColor = vec4(0.0);\n\n gl_FragColor += texture2D(uSampler, vTextureCoord ) * 0.3989422804014327;\n gl_FragColor += texture2D(uSampler, vBlurTexCoords[ 0]) * 0.2419707245191454;\n gl_FragColor += texture2D(uSampler, vBlurTexCoords[ 1]) * 0.05399096651318985;\n gl_FragColor += texture2D(uSampler, vBlurTexCoords[ 2]) * 0.004431848411938341;\n}\n",{strength:{type:"1f",value:1},dirX:{type:"1f",value:t||0},dirY:{type:"1f",value:e||0}}),this.defaultFilter=new n.AbstractFilter,this.passes=1,this.dirX=t||0,this.dirY=e||0,this.strength=4}var n=t("../../core");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.applyFilter=function(t,e,r,i){var n=this.getShader(t);if(this.uniforms.strength.value=this.strength/4/this.passes*(e.frame.width/e.size.width),1===this.passes)t.filterManager.applyFilter(n,e,r,i);else{var o=t.filterManager.getRenderTarget(!0);t.filterManager.applyFilter(n,e,o,i);for(var s=0;s>16&255)/255,s=(r>>8&255)/255,a=(255&r)/255,h=(i>>16&255)/255,u=(i>>8&255)/255,l=(255&i)/255,c=[.3,.59,.11,0,0,o,s,a,t,0,h,u,l,e,0,o-h,s-u,a-l,0,0];this._loadMatrix(c,n)},i.prototype.night=function(t,e){t=t||.1;var r=[-2*t,-t,0,0,0,-t,0,t,0,0,0,t,2*t,0,0,0,0,0,1,0];this._loadMatrix(r,e)},i.prototype.predator=function(t,e){var r=[11.224130630493164*t,-4.794486999511719*t,-2.8746118545532227*t,0*t,.40342438220977783*t,-3.6330697536468506*t,9.193157196044922*t,-2.951810836791992*t,0*t,-1.316135048866272*t,-3.2184197902679443*t,-4.2375030517578125*t,7.476448059082031*t,0*t,.8044459223747253*t,0,0,0,1,0];this._loadMatrix(r,e)},i.prototype.lsd=function(t){var e=[2,-.4,.5,0,0,-.5,2,-.4,0,0,-.4,-.5,3,0,0,0,0,0,1,0];this._loadMatrix(e,t)},i.prototype.reset=function(){var t=[1,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,1,0];this._loadMatrix(t,!1)},Object.defineProperties(i.prototype,{matrix:{get:function(){return this.uniforms.m.value},set:function(t){this.uniforms.m.value=t}}})},{"../../core":45}],116:[function(t,e,r){function i(){n.AbstractFilter.call(this,null,"precision mediump float;\n\nvarying vec2 vTextureCoord;\n\nuniform sampler2D uSampler;\nuniform float step;\n\nvoid main(void)\n{\n vec4 color = texture2D(uSampler, vTextureCoord);\n\n color = floor(color * step) / step;\n\n gl_FragColor = color;\n}\n",{step:{type:"1f",value:5}})}var n=t("../../core");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i,Object.defineProperties(i.prototype,{step:{get:function(){return this.uniforms.step.value},set:function(t){this.uniforms.step.value=t}}})},{"../../core":45}],117:[function(t,e,r){function i(t,e,r){n.AbstractFilter.call(this,null,"precision mediump float;\n\nvarying mediump vec2 vTextureCoord;\n\nuniform sampler2D uSampler;\nuniform vec2 texelSize;\nuniform float matrix[9];\n\nvoid main(void)\n{\n vec4 c11 = texture2D(uSampler, vTextureCoord - texelSize); // top left\n vec4 c12 = texture2D(uSampler, vec2(vTextureCoord.x, vTextureCoord.y - texelSize.y)); // top center\n vec4 c13 = texture2D(uSampler, vec2(vTextureCoord.x + texelSize.x, vTextureCoord.y - texelSize.y)); // top right\n\n vec4 c21 = texture2D(uSampler, vec2(vTextureCoord.x - texelSize.x, vTextureCoord.y)); // mid left\n vec4 c22 = texture2D(uSampler, vTextureCoord); // mid center\n vec4 c23 = texture2D(uSampler, vec2(vTextureCoord.x + texelSize.x, vTextureCoord.y)); // mid right\n\n vec4 c31 = texture2D(uSampler, vec2(vTextureCoord.x - texelSize.x, vTextureCoord.y + texelSize.y)); // bottom left\n vec4 c32 = texture2D(uSampler, vec2(vTextureCoord.x, vTextureCoord.y + texelSize.y)); // bottom center\n vec4 c33 = texture2D(uSampler, vTextureCoord + texelSize); // bottom right\n\n gl_FragColor =\n c11 * matrix[0] + c12 * matrix[1] + c13 * matrix[2] +\n c21 * matrix[3] + c22 * matrix[4] + c23 * matrix[5] +\n c31 * matrix[6] + c32 * matrix[7] + c33 * matrix[8];\n\n gl_FragColor.a = c22.a;\n}\n",{matrix:{type:"1fv",value:new Float32Array(t)},texelSize:{type:"v2",value:{x:1/e,y:1/r}}})}var n=t("../../core");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i,Object.defineProperties(i.prototype,{matrix:{get:function(){return this.uniforms.matrix.value},set:function(t){this.uniforms.matrix.value=new Float32Array(t)}},width:{get:function(){return 1/this.uniforms.texelSize.value.x},set:function(t){this.uniforms.texelSize.value.x=1/t}},height:{get:function(){return 1/this.uniforms.texelSize.value.y},set:function(t){this.uniforms.texelSize.value.y=1/t}}})},{"../../core":45 -}],118:[function(t,e,r){function i(){n.AbstractFilter.call(this,null,"precision mediump float;\n\nvarying vec2 vTextureCoord;\n\nuniform sampler2D uSampler;\n\nvoid main(void)\n{\n float lum = length(texture2D(uSampler, vTextureCoord.xy).rgb);\n\n gl_FragColor = vec4(1.0, 1.0, 1.0, 1.0);\n\n if (lum < 1.00)\n {\n if (mod(gl_FragCoord.x + gl_FragCoord.y, 10.0) == 0.0)\n {\n gl_FragColor = vec4(0.0, 0.0, 0.0, 1.0);\n }\n }\n\n if (lum < 0.75)\n {\n if (mod(gl_FragCoord.x - gl_FragCoord.y, 10.0) == 0.0)\n {\n gl_FragColor = vec4(0.0, 0.0, 0.0, 1.0);\n }\n }\n\n if (lum < 0.50)\n {\n if (mod(gl_FragCoord.x + gl_FragCoord.y - 5.0, 10.0) == 0.0)\n {\n gl_FragColor = vec4(0.0, 0.0, 0.0, 1.0);\n }\n }\n\n if (lum < 0.3)\n {\n if (mod(gl_FragCoord.x - gl_FragCoord.y - 5.0, 10.0) == 0.0)\n {\n gl_FragColor = vec4(0.0, 0.0, 0.0, 1.0);\n }\n }\n}\n")}var n=t("../../core");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i},{"../../core":45}],119:[function(t,e,r){function i(t,e){var r=new n.Matrix;t.renderable=!1,n.AbstractFilter.call(this,"attribute vec2 aVertexPosition;\nattribute vec2 aTextureCoord;\nattribute vec4 aColor;\n\nuniform mat3 projectionMatrix;\nuniform mat3 otherMatrix;\n\nvarying vec2 vMapCoord;\nvarying vec2 vTextureCoord;\nvarying vec4 vColor;\n\nvoid main(void)\n{\n gl_Position = vec4((projectionMatrix * vec3(aVertexPosition, 1.0)).xy, 0.0, 1.0);\n vTextureCoord = aTextureCoord;\n vMapCoord = ( otherMatrix * vec3( aTextureCoord, 1.0) ).xy;\n vColor = vec4(aColor.rgb * aColor.a, aColor.a);\n}\n","precision mediump float;\n\nvarying vec2 vMapCoord;\nvarying vec2 vTextureCoord;\nvarying vec4 vColor;\n\nuniform vec2 scale;\n\nuniform sampler2D uSampler;\nuniform sampler2D mapSampler;\n\nvoid main(void)\n{\n vec4 map = texture2D(mapSampler, vMapCoord);\n\n map -= 0.5;\n map.xy *= scale;\n\n gl_FragColor = texture2D(uSampler, vec2(vTextureCoord.x + map.x, vTextureCoord.y + map.y));\n}\n",{mapSampler:{type:"sampler2D",value:t.texture},otherMatrix:{type:"mat3",value:r.toArray(!0)},scale:{type:"v2",value:{x:1,y:1}}}),this.maskSprite=t,this.maskMatrix=r,(null===e||void 0===e)&&(e=20),this.scale=new n.Point(e,e)}var n=t("../../core");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.applyFilter=function(t,e,r){var i=t.filterManager;i.calculateMappedMatrix(e.frame,this.maskSprite,this.maskMatrix),this.uniforms.otherMatrix.value=this.maskMatrix.toArray(!0),this.uniforms.scale.value.x=this.scale.x*(1/e.frame.width),this.uniforms.scale.value.y=this.scale.y*(1/e.frame.height);var n=this.getShader(t);i.applyFilter(n,e,r)},Object.defineProperties(i.prototype,{map:{get:function(){return this.uniforms.mapSampler.value},set:function(t){this.uniforms.mapSampler.value=t}}})},{"../../core":45}],120:[function(t,e,r){function i(){n.AbstractFilter.call(this,null,"precision mediump float;\n\nvarying vec2 vTextureCoord;\nvarying vec4 vColor;\n\nuniform vec4 dimensions;\nuniform sampler2D uSampler;\n\nuniform float angle;\nuniform float scale;\n\nfloat pattern()\n{\n float s = sin(angle), c = cos(angle);\n vec2 tex = vTextureCoord * dimensions.xy;\n vec2 point = vec2(\n c * tex.x - s * tex.y,\n s * tex.x + c * tex.y\n ) * scale;\n return (sin(point.x) * sin(point.y)) * 4.0;\n}\n\nvoid main()\n{\n vec4 color = texture2D(uSampler, vTextureCoord);\n float average = (color.r + color.g + color.b) / 3.0;\n gl_FragColor = vec4(vec3(average * 10.0 - 5.0 + pattern()), color.a);\n}\n",{scale:{type:"1f",value:1},angle:{type:"1f",value:5},dimensions:{type:"4fv",value:[0,0,0,0]}})}var n=t("../../core");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i,Object.defineProperties(i.prototype,{scale:{get:function(){return this.uniforms.scale.value},set:function(t){this.uniforms.scale.value=t}},angle:{get:function(){return this.uniforms.angle.value},set:function(t){this.uniforms.angle.value=t}}})},{"../../core":45}],121:[function(t,e,r){function i(){n.AbstractFilter.call(this,"attribute vec2 aVertexPosition;\nattribute vec2 aTextureCoord;\nattribute vec4 aColor;\n\nuniform float strength;\nuniform vec2 offset;\n\nuniform mat3 projectionMatrix;\n\nvarying vec2 vTextureCoord;\nvarying vec4 vColor;\nvarying vec2 vBlurTexCoords[6];\n\nvoid main(void)\n{\n gl_Position = vec4((projectionMatrix * vec3((aVertexPosition+offset), 1.0)).xy, 0.0, 1.0);\n vTextureCoord = aTextureCoord;\n\n vBlurTexCoords[ 0] = aTextureCoord + vec2(0.0, -0.012 * strength);\n vBlurTexCoords[ 1] = aTextureCoord + vec2(0.0, -0.008 * strength);\n vBlurTexCoords[ 2] = aTextureCoord + vec2(0.0, -0.004 * strength);\n vBlurTexCoords[ 3] = aTextureCoord + vec2(0.0, 0.004 * strength);\n vBlurTexCoords[ 4] = aTextureCoord + vec2(0.0, 0.008 * strength);\n vBlurTexCoords[ 5] = aTextureCoord + vec2(0.0, 0.012 * strength);\n\n vColor = vec4(aColor.rgb * aColor.a, aColor.a);\n}\n","precision lowp float;\n\nvarying vec2 vTextureCoord;\nvarying vec2 vBlurTexCoords[6];\nvarying vec4 vColor;\n\nuniform vec3 color;\nuniform float alpha;\n\nuniform sampler2D uSampler;\n\nvoid main(void)\n{\n vec4 sum = vec4(0.0);\n\n sum += texture2D(uSampler, vBlurTexCoords[ 0])*0.004431848411938341;\n sum += texture2D(uSampler, vBlurTexCoords[ 1])*0.05399096651318985;\n sum += texture2D(uSampler, vBlurTexCoords[ 2])*0.2419707245191454;\n sum += texture2D(uSampler, vTextureCoord )*0.3989422804014327;\n sum += texture2D(uSampler, vBlurTexCoords[ 3])*0.2419707245191454;\n sum += texture2D(uSampler, vBlurTexCoords[ 4])*0.05399096651318985;\n sum += texture2D(uSampler, vBlurTexCoords[ 5])*0.004431848411938341;\n\n gl_FragColor = vec4( color.rgb * sum.a * alpha, sum.a * alpha );\n}\n",{blur:{type:"1f",value:1/512},color:{type:"c",value:[0,0,0]},alpha:{type:"1f",value:.7},offset:{type:"2f",value:[5,5]},strength:{type:"1f",value:1}}),this.passes=1,this.strength=4}var n=t("../../core");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.applyFilter=function(t,e,r,i){var n=this.getShader(t);if(this.uniforms.strength.value=this.strength/4/this.passes*(e.frame.height/e.size.height),1===this.passes)t.filterManager.applyFilter(n,e,r,i);else{for(var o=t.filterManager.getRenderTarget(!0),s=e,a=o,h=0;h= (time - params.z)) )\n {\n float diff = (dist - time);\n float powDiff = 1.0 - pow(abs(diff*params.x), params.y);\n\n float diffTime = diff * powDiff;\n vec2 diffUV = normalize(uv - center);\n texCoord = uv + (diffUV * diffTime);\n }\n\n gl_FragColor = texture2D(uSampler, texCoord);\n}\n",{center:{type:"v2",value:{x:.5,y:.5}},params:{type:"v3",value:{x:10,y:.8,z:.1}},time:{type:"1f",value:0}})}var n=t("../../core");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i,Object.defineProperties(i.prototype,{center:{get:function(){return this.uniforms.center.value},set:function(t){this.uniforms.center.value=t}},params:{get:function(){return this.uniforms.params.value},set:function(t){this.uniforms.params.value=t}},time:{get:function(){return this.uniforms.time.value},set:function(t){this.uniforms.time.value=t}}})},{"../../core":45}],131:[function(t,e,r){function i(){n.AbstractFilter.call(this,null,"precision mediump float;\n\nvarying vec2 vTextureCoord;\n\nuniform sampler2D uSampler;\nuniform float blur;\nuniform float gradientBlur;\nuniform vec2 start;\nuniform vec2 end;\nuniform vec2 delta;\nuniform vec2 texSize;\n\nfloat random(vec3 scale, float seed)\n{\n return fract(sin(dot(gl_FragCoord.xyz + seed, scale)) * 43758.5453 + seed);\n}\n\nvoid main(void)\n{\n vec4 color = vec4(0.0);\n float total = 0.0;\n\n float offset = random(vec3(12.9898, 78.233, 151.7182), 0.0);\n vec2 normal = normalize(vec2(start.y - end.y, end.x - start.x));\n float radius = smoothstep(0.0, 1.0, abs(dot(vTextureCoord * texSize - start, normal)) / gradientBlur) * blur;\n\n for (float t = -30.0; t <= 30.0; t++)\n {\n float percent = (t + offset - 0.5) / 30.0;\n float weight = 1.0 - abs(percent);\n vec4 sample = texture2D(uSampler, vTextureCoord + delta / texSize * percent * radius);\n sample.rgb *= sample.a;\n color += sample * weight;\n total += weight;\n }\n\n gl_FragColor = color / total;\n gl_FragColor.rgb /= gl_FragColor.a + 0.00001;\n}\n",{blur:{type:"1f",value:100},gradientBlur:{type:"1f",value:600},start:{type:"v2",value:{x:0,y:window.innerHeight/2}},end:{type:"v2",value:{x:600,y:window.innerHeight/2}},delta:{type:"v2",value:{x:30,y:30}},texSize:{type:"v2",value:{x:window.innerWidth,y:window.innerHeight}}}),this.updateDelta()}var n=t("../../core");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.updateDelta=function(){this.uniforms.delta.value.x=0,this.uniforms.delta.value.y=0},Object.defineProperties(i.prototype,{blur:{get:function(){return this.uniforms.blur.value},set:function(t){this.uniforms.blur.value=t}},gradientBlur:{get:function(){return this.uniforms.gradientBlur.value},set:function(t){this.uniforms.gradientBlur.value=t}},start:{get:function(){return this.uniforms.start.value},set:function(t){this.uniforms.start.value=t,this.updateDelta()}},end:{get:function(){return this.uniforms.end.value},set:function(t){this.uniforms.end.value=t,this.updateDelta()}}})},{"../../core":45}],132:[function(t,e,r){function i(){n.AbstractFilter.call(this),this.tiltShiftXFilter=new o,this.tiltShiftYFilter=new s}var n=t("../../core"),o=t("./TiltShiftXFilter"),s=t("./TiltShiftYFilter");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.applyFilter=function(t,e,r){var i=t.filterManager.getRenderTarget(!0);this.tiltShiftXFilter.applyFilter(t,e,i),this.tiltShiftYFilter.applyFilter(t,i,r),t.filterManager.returnRenderTarget(i)},Object.defineProperties(i.prototype,{blur:{get:function(){return this.tiltShiftXFilter.blur},set:function(t){this.tiltShiftXFilter.blur=this.tiltShiftYFilter.blur=t}},gradientBlur:{get:function(){return this.tiltShiftXFilter.gradientBlur},set:function(t){this.tiltShiftXFilter.gradientBlur=this.tiltShiftYFilter.gradientBlur=t}},start:{get:function(){return this.tiltShiftXFilter.start},set:function(t){this.tiltShiftXFilter.start=this.tiltShiftYFilter.start=t}},end:{get:function(){return this.tiltShiftXFilter.end},set:function(t){this.tiltShiftXFilter.end=this.tiltShiftYFilter.end=t}}})},{"../../core":45,"./TiltShiftXFilter":133,"./TiltShiftYFilter":134}],133:[function(t,e,r){function i(){n.call(this)}var n=t("./TiltShiftAxisFilter");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.updateDelta=function(){var t=this.uniforms.end.value.x-this.uniforms.start.value.x,e=this.uniforms.end.value.y-this.uniforms.start.value.y,r=Math.sqrt(t*t+e*e);this.uniforms.delta.value.x=t/r,this.uniforms.delta.value.y=e/r}},{"./TiltShiftAxisFilter":131}],134:[function(t,e,r){function i(){n.call(this)}var n=t("./TiltShiftAxisFilter");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.updateDelta=function(){var t=this.uniforms.end.value.x-this.uniforms.start.value.x,e=this.uniforms.end.value.y-this.uniforms.start.value.y,r=Math.sqrt(t*t+e*e);this.uniforms.delta.value.x=-e/r,this.uniforms.delta.value.y=t/r}},{"./TiltShiftAxisFilter":131}],135:[function(t,e,r){function i(){n.AbstractFilter.call(this,null,"precision mediump float;\n\nvarying vec2 vTextureCoord;\n\nuniform sampler2D uSampler;\nuniform float radius;\nuniform float angle;\nuniform vec2 offset;\n\nvoid main(void)\n{\n vec2 coord = vTextureCoord - offset;\n float dist = length(coord);\n\n if (dist < radius)\n {\n float ratio = (radius - dist) / radius;\n float angleMod = ratio * ratio * angle;\n float s = sin(angleMod);\n float c = cos(angleMod);\n coord = vec2(coord.x * c - coord.y * s, coord.x * s + coord.y * c);\n }\n\n gl_FragColor = texture2D(uSampler, coord+offset);\n}\n",{radius:{type:"1f",value:.5},angle:{type:"1f",value:5},offset:{type:"v2",value:{x:.5,y:.5}}})}var n=t("../../core");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i,Object.defineProperties(i.prototype,{offset:{get:function(){return this.uniforms.offset.value},set:function(t){this.uniforms.offset.value=t}},radius:{get:function(){return this.uniforms.radius.value},set:function(t){this.uniforms.radius.value=t}},angle:{get:function(){return this.uniforms.angle.value},set:function(t){this.uniforms.angle.value=t}}})},{"../../core":45}],136:[function(t,e,r){(function(r){t("./polyfill");var i=e.exports=t("./core");i.extras=t("./extras"),i.filters=t("./filters"),i.interaction=t("./interaction"),i.loaders=t("./loaders"),i.mesh=t("./mesh"),i.accessibility=t("./accessibility"),i.loader=new i.loaders.Loader,Object.assign(i,t("./deprecation")),r.PIXI=i}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{"./accessibility":37,"./core":45,"./deprecation":100,"./extras":107,"./filters":124,"./interaction":139,"./loaders":142,"./mesh":149,"./polyfill":154}],137:[function(t,e,r){function i(){this.global=new n.Point,this.target=null,this.originalEvent=null}var n=t("../core");i.prototype.constructor=i,e.exports=i,i.prototype.getLocalPosition=function(t,e,r){return t.worldTransform.applyInverse(r||this.global,e)}},{"../core":45}],138:[function(t,e,r){function i(t,e){e=e||{},this.renderer=t,this.autoPreventDefault=void 0!==e.autoPreventDefault?e.autoPreventDefault:!0,this.interactionFrequency=e.interactionFrequency||10,this.mouse=new o,this.eventData={stopped:!1,target:null,type:null,data:this.mouse,stopPropagation:function(){this.stopped=!0}},this.interactiveDataPool=[],this.interactionDOMElement=null,this.eventsAdded=!1,this.onMouseUp=this.onMouseUp.bind(this),this.processMouseUp=this.processMouseUp.bind(this),this.onMouseDown=this.onMouseDown.bind(this),this.processMouseDown=this.processMouseDown.bind(this),this.onMouseMove=this.onMouseMove.bind(this),this.processMouseMove=this.processMouseMove.bind(this),this.onMouseOut=this.onMouseOut.bind(this),this.processMouseOverOut=this.processMouseOverOut.bind(this),this.onTouchStart=this.onTouchStart.bind(this),this.processTouchStart=this.processTouchStart.bind(this),this.onTouchEnd=this.onTouchEnd.bind(this),this.processTouchEnd=this.processTouchEnd.bind(this),this.onTouchMove=this.onTouchMove.bind(this),this.processTouchMove=this.processTouchMove.bind(this),this.last=0,this.currentCursorStyle="inherit",this._tempPoint=new n.Point,this.resolution=1,this.setTargetElement(this.renderer.view,this.renderer.resolution)}var n=t("../core"),o=t("./InteractionData");Object.assign(n.DisplayObject.prototype,t("./interactiveTarget")),i.prototype.constructor=i,e.exports=i,i.prototype.setTargetElement=function(t,e){this.removeEvents(),this.interactionDOMElement=t,this.resolution=e||1,this.addEvents()},i.prototype.addEvents=function(){this.interactionDOMElement&&(n.ticker.shared.add(this.update,this),window.navigator.msPointerEnabled&&(this.interactionDOMElement.style["-ms-content-zooming"]="none",this.interactionDOMElement.style["-ms-touch-action"]="none"),window.document.addEventListener("mousemove",this.onMouseMove,!0),this.interactionDOMElement.addEventListener("mousedown",this.onMouseDown,!0),this.interactionDOMElement.addEventListener("mouseout",this.onMouseOut,!0),this.interactionDOMElement.addEventListener("touchstart",this.onTouchStart,!0),this.interactionDOMElement.addEventListener("touchend",this.onTouchEnd,!0),this.interactionDOMElement.addEventListener("touchmove",this.onTouchMove,!0),window.addEventListener("mouseup",this.onMouseUp,!0),this.eventsAdded=!0)},i.prototype.removeEvents=function(){this.interactionDOMElement&&(n.ticker.shared.remove(this.update),window.navigator.msPointerEnabled&&(this.interactionDOMElement.style["-ms-content-zooming"]="",this.interactionDOMElement.style["-ms-touch-action"]=""),window.document.removeEventListener("mousemove",this.onMouseMove,!0),this.interactionDOMElement.removeEventListener("mousedown",this.onMouseDown,!0),this.interactionDOMElement.removeEventListener("mouseout",this.onMouseOut,!0),this.interactionDOMElement.removeEventListener("touchstart",this.onTouchStart,!0),this.interactionDOMElement.removeEventListener("touchend",this.onTouchEnd,!0),this.interactionDOMElement.removeEventListener("touchmove",this.onTouchMove,!0),this.interactionDOMElement=null,window.removeEventListener("mouseup",this.onMouseUp,!0),this.eventsAdded=!1)},i.prototype.update=function(t){if(this._deltaTime+=t,!(this._deltaTime=0;h--)this.processInteractive(t,a[h],r,i,s)&&(o=!0,s=!1,a[h].interactive&&(i=!1));return n&&(i&&!o&&(e.hitArea?(e.worldTransform.applyInverse(t,this._tempPoint),o=e.hitArea.contains(this._tempPoint.x,this._tempPoint.y)):e.containsPoint&&(o=e.containsPoint(t))),e.interactive&&r(e,o)),o},i.prototype.onMouseDown=function(t){this.mouse.originalEvent=t,this.eventData.data=this.mouse,this.eventData.stopped=!1,this.mapPositionToPoint(this.mouse.global,t.clientX,t.clientY),this.autoPreventDefault&&this.mouse.originalEvent.preventDefault(),this.processInteractive(this.mouse.global,this.renderer._lastObjectRendered,this.processMouseDown,!0)},i.prototype.processMouseDown=function(t,e){var r=this.mouse.originalEvent,i=2===r.button||3===r.which;e&&(t[i?"_isRightDown":"_isLeftDown"]=!0,this.dispatchEvent(t,i?"rightdown":"mousedown",this.eventData))},i.prototype.onMouseUp=function(t){this.mouse.originalEvent=t,this.eventData.data=this.mouse,this.eventData.stopped=!1,this.mapPositionToPoint(this.mouse.global,t.clientX,t.clientY),this.processInteractive(this.mouse.global,this.renderer._lastObjectRendered,this.processMouseUp,!0)},i.prototype.processMouseUp=function(t,e){var r=this.mouse.originalEvent,i=2===r.button||3===r.which,n=i?"_isRightDown":"_isLeftDown";e?(this.dispatchEvent(t,i?"rightup":"mouseup",this.eventData),t[n]&&(t[n]=!1,this.dispatchEvent(t,i?"rightclick":"click",this.eventData))):t[n]&&(t[n]=!1,this.dispatchEvent(t,i?"rightupoutside":"mouseupoutside",this.eventData))},i.prototype.onMouseMove=function(t){this.mouse.originalEvent=t,this.eventData.data=this.mouse,this.eventData.stopped=!1,this.mapPositionToPoint(this.mouse.global,t.clientX,t.clientY),this.didMove=!0,this.cursor="inherit",this.processInteractive(this.mouse.global,this.renderer._lastObjectRendered,this.processMouseMove,!0),this.currentCursorStyle!==this.cursor&&(this.currentCursorStyle=this.cursor,this.interactionDOMElement.style.cursor=this.cursor)},i.prototype.processMouseMove=function(t,e){this.dispatchEvent(t,"mousemove",this.eventData),this.processMouseOverOut(t,e)},i.prototype.onMouseOut=function(t){this.mouse.originalEvent=t,this.eventData.stopped=!1,this.mapPositionToPoint(this.mouse.global,t.clientX,t.clientY),this.interactionDOMElement.style.cursor="inherit",this.mapPositionToPoint(this.mouse.global,t.clientX,t.clientY),this.processInteractive(this.mouse.global,this.renderer._lastObjectRendered,this.processMouseOverOut,!1)},i.prototype.processMouseOverOut=function(t,e){e?(t._over||(t._over=!0,this.dispatchEvent(t,"mouseover",this.eventData)),t.buttonMode&&(this.cursor=t.defaultCursor)):t._over&&(t._over=!1,this.dispatchEvent(t,"mouseout",this.eventData))},i.prototype.onTouchStart=function(t){this.autoPreventDefault&&t.preventDefault();for(var e=t.changedTouches,r=e.length,i=0;r>i;i++){var n=e[i],o=this.getTouchData(n);o.originalEvent=t,this.eventData.data=o,this.eventData.stopped=!1,this.processInteractive(o.global,this.renderer._lastObjectRendered,this.processTouchStart,!0),this.returnTouchData(o)}},i.prototype.processTouchStart=function(t,e){e&&(t._touchDown=!0,this.dispatchEvent(t,"touchstart",this.eventData))},i.prototype.onTouchEnd=function(t){this.autoPreventDefault&&t.preventDefault();for(var e=t.changedTouches,r=e.length,i=0;r>i;i++){var n=e[i],o=this.getTouchData(n);o.originalEvent=t,this.eventData.data=o,this.eventData.stopped=!1,this.processInteractive(o.global,this.renderer._lastObjectRendered,this.processTouchEnd,!0),this.returnTouchData(o)}},i.prototype.processTouchEnd=function(t,e){e?(this.dispatchEvent(t,"touchend",this.eventData),t._touchDown&&(t._touchDown=!1,this.dispatchEvent(t,"tap",this.eventData))):t._touchDown&&(t._touchDown=!1,this.dispatchEvent(t,"touchendoutside",this.eventData))},i.prototype.onTouchMove=function(t){this.autoPreventDefault&&t.preventDefault();for(var e=t.changedTouches,r=e.length,i=0;r>i;i++){var n=e[i],o=this.getTouchData(n);o.originalEvent=t,this.eventData.data=o,this.eventData.stopped=!1,this.processInteractive(o.global,this.renderer._lastObjectRendered,this.processTouchMove,!0),this.returnTouchData(o)}},i.prototype.processTouchMove=function(t,e){e=e,this.dispatchEvent(t,"touchmove",this.eventData)},i.prototype.getTouchData=function(t){var e=this.interactiveDataPool.pop();return e||(e=new o),e.identifier=t.identifier,this.mapPositionToPoint(e.global,t.clientX,t.clientY),navigator.isCocoonJS&&(e.global.x=e.global.x/this.resolution,e.global.y=e.global.y/this.resolution),t.globalX=e.global.x,t.globalY=e.global.y,e},i.prototype.returnTouchData=function(t){ -this.interactiveDataPool.push(t)},i.prototype.destroy=function(){this.removeEvents(),this.renderer=null,this.mouse=null,this.eventData=null,this.interactiveDataPool=null,this.interactionDOMElement=null,this.onMouseUp=null,this.processMouseUp=null,this.onMouseDown=null,this.processMouseDown=null,this.onMouseMove=null,this.processMouseMove=null,this.onMouseOut=null,this.processMouseOverOut=null,this.onTouchStart=null,this.processTouchStart=null,this.onTouchEnd=null,this.processTouchEnd=null,this.onTouchMove=null,this.processTouchMove=null,this._tempPoint=null},n.WebGLRenderer.registerPlugin("interaction",i),n.CanvasRenderer.registerPlugin("interaction",i)},{"../core":45,"./InteractionData":137,"./interactiveTarget":140}],139:[function(t,e,r){e.exports={InteractionData:t("./InteractionData"),InteractionManager:t("./InteractionManager"),interactiveTarget:t("./interactiveTarget")}},{"./InteractionData":137,"./InteractionManager":138,"./interactiveTarget":140}],140:[function(t,e,r){var i={interactive:!1,buttonMode:!1,interactiveChildren:!0,defaultCursor:"pointer",_over:!1,_touchDown:!1};e.exports=i},{}],141:[function(t,e,r){function i(t,e){var r={},i=t.data.getElementsByTagName("info")[0],n=t.data.getElementsByTagName("common")[0];r.font=i.getAttribute("face"),r.size=parseInt(i.getAttribute("size"),10),r.lineHeight=parseInt(n.getAttribute("lineHeight"),10),r.chars={};for(var a=t.data.getElementsByTagName("char"),h=0;hn;n++){var o=2*n;this._renderCanvasDrawTriangle(t,e,r,o,o+2,o+4)}},i.prototype._renderCanvasTriangles=function(t){for(var e=this.vertices,r=this.uvs,i=this.indices,n=i.length,o=0;n>o;o+=3){var s=2*i[o],a=2*i[o+1],h=2*i[o+2];this._renderCanvasDrawTriangle(t,e,r,s,a,h)}},i.prototype._renderCanvasDrawTriangle=function(t,e,r,i,n,o){var s=this._texture.baseTexture.source,a=this._texture.baseTexture.width,h=this._texture.baseTexture.height,u=e[i],l=e[n],c=e[o],p=e[i+1],d=e[n+1],f=e[o+1],v=r[i]*a,g=r[n]*a,m=r[o]*a,y=r[i+1]*h,x=r[n+1]*h,b=r[o+1]*h;if(this.canvasPadding>0){var _=this.canvasPadding/this.worldTransform.a,T=this.canvasPadding/this.worldTransform.d,E=(u+l+c)/3,S=(p+d+f)/3,w=u-E,C=p-S,A=Math.sqrt(w*w+C*C);u=E+w/A*(A+_),p=S+C/A*(A+T),w=l-E,C=d-S,A=Math.sqrt(w*w+C*C),l=E+w/A*(A+_),d=S+C/A*(A+T),w=c-E,C=f-S,A=Math.sqrt(w*w+C*C),c=E+w/A*(A+_),f=S+C/A*(A+T)}t.save(),t.beginPath(),t.moveTo(u,p),t.lineTo(l,d),t.lineTo(c,f),t.closePath(),t.clip();var M=v*x+y*m+g*b-x*m-y*g-v*b,R=u*x+y*c+l*b-x*c-y*l-u*b,O=v*l+u*m+g*c-l*m-u*g-v*c,D=v*x*c+y*l*m+u*g*b-u*x*m-y*g*c-v*l*b,P=p*x+y*f+d*b-x*f-y*d-p*b,F=v*d+p*m+g*f-d*m-p*g-v*f,L=v*x*f+y*d*m+p*g*b-p*x*m-y*g*f-v*d*b;t.transform(R/M,P/M,O/M,F/M,D/M,L/M),t.drawImage(s,0,0),t.restore()},i.prototype.renderMeshFlat=function(t){var e=this.context,r=t.vertices,i=r.length/2;e.beginPath();for(var n=1;i-2>n;n++){var o=2*n,s=r[o],a=r[o+2],h=r[o+4],u=r[o+1],l=r[o+3],c=r[o+5];e.moveTo(s,u),e.lineTo(a,l),e.lineTo(h,c)}e.fillStyle="#FF0000",e.fill(),e.closePath()},i.prototype._onTextureUpdate=function(){this.updateFrame=!0},i.prototype.getBounds=function(t){if(!this._currentBounds){for(var e=t||this.worldTransform,r=e.a,i=e.b,o=e.c,s=e.d,a=e.tx,h=e.ty,u=-(1/0),l=-(1/0),c=1/0,p=1/0,d=this.vertices,f=0,v=d.length;v>f;f+=2){var g=d[f],m=d[f+1],y=r*g+o*m+a,x=s*m+i*g+h;c=c>y?y:c,p=p>x?x:p,u=y>u?y:u,l=x>l?x:l}if(c===-(1/0)||l===1/0)return n.Rectangle.EMPTY;var b=this._bounds;b.x=c,b.width=u-c,b.y=p,b.height=l-p,this._currentBounds=b}return this._currentBounds},i.prototype.containsPoint=function(t){if(!this.getBounds().contains(t.x,t.y))return!1;this.worldTransform.applyInverse(t,o);var e,r,n=this.vertices,a=s.points;if(this.drawMode===i.DRAW_MODES.TRIANGLES){var h=this.indices;for(r=this.indices.length,e=0;r>e;e+=3){var u=2*h[e],l=2*h[e+1],c=2*h[e+2];if(a[0]=n[u],a[1]=n[u+1],a[2]=n[l],a[3]=n[l+1],a[4]=n[c],a[5]=n[c+1],s.contains(o.x,o.y))return!0}}else for(r=n.length,e=0;r>e;e+=6)if(a[0]=n[e],a[1]=n[e+1],a[2]=n[e+2],a[3]=n[e+3],a[4]=n[e+4],a[5]=n[e+5],s.contains(o.x,o.y))return!0;return!1},i.DRAW_MODES={TRIANGLE_MESH:0,TRIANGLES:1}},{"../core":45}],147:[function(t,e,r){function i(t,e,r){n.call(this,t),this._ready=!0,this.segmentsX=e||10,this.segmentsY=r||10,this.drawMode=n.DRAW_MODES.TRIANGLES,this.refresh()}var n=t("./Mesh");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.refresh=function(){var t=this.segmentsX*this.segmentsY,e=[],r=[],i=[],n=[],o=this.texture,s=this.segmentsX-1,a=this.segmentsY-1,h=0,u=o.width/s,l=o.height/a;for(h=0;t>h;h++){var c=h%this.segmentsX,p=h/this.segmentsX|0;e.push(c*u,p*l),i.push(o._uvs.x0+(o._uvs.x1-o._uvs.x0)*(c/(this.segmentsX-1)),o._uvs.y0+(o._uvs.y3-o._uvs.y0)*(p/(this.segmentsY-1)))}var d=s*a;for(h=0;d>h;h++){var f=h%s,v=h/s|0,g=v*this.segmentsX+f,m=v*this.segmentsX+f+1,y=(v+1)*this.segmentsX+f,x=(v+1)*this.segmentsX+f+1;n.push(g,m,y),n.push(m,x,y)}this.vertices=new Float32Array(e),this.uvs=new Float32Array(i),this.colors=new Float32Array(r),this.indices=new Uint16Array(n)},i.prototype._onTextureUpdate=function(){n.prototype._onTextureUpdate.call(this),this._ready&&this.refresh()}},{"./Mesh":146}],148:[function(t,e,r){function i(t,e){n.call(this,t),this.points=e,this.vertices=new Float32Array(4*e.length),this.uvs=new Float32Array(4*e.length),this.colors=new Float32Array(2*e.length),this.indices=new Uint16Array(2*e.length),this._ready=!0,this.refresh()}var n=t("./Mesh"),o=t("../core");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.refresh=function(){var t=this.points;if(!(t.length<1)&&this._texture._uvs){var e=this.uvs,r=this.indices,i=this.colors,n=this._texture._uvs,s=new o.Point(n.x0,n.y0),a=new o.Point(n.x2-n.x0,n.y2-n.y0);e[0]=0+s.x,e[1]=0+s.y,e[2]=0+s.x,e[3]=1*a.y+s.y,i[0]=1,i[1]=1,r[0]=0,r[1]=1;for(var h,u,l,c=t.length,p=1;c>p;p++)h=t[p],u=4*p,l=p/(c-1),e[u]=l*a.x+s.x,e[u+1]=0+s.y,e[u+2]=l*a.x+s.x,e[u+3]=1*a.y+s.y,u=2*p,i[u]=1,i[u+1]=1,u=2*p,r[u]=u,r[u+1]=u+1;this.dirty=!0}},i.prototype._onTextureUpdate=function(){n.prototype._onTextureUpdate.call(this),this._ready&&this.refresh()},i.prototype.updateTransform=function(){var t=this.points;if(!(t.length<1)){for(var e,r,i,n,o,s,a=t[0],h=0,u=0,l=this.vertices,c=t.length,p=0;c>p;p++)r=t[p],i=4*p,e=p1&&(n=1),o=Math.sqrt(h*h+u*u),s=this._texture.height/2,h/=o,u/=o,h*=s,u*=s,l[i]=r.x+h,l[i+1]=r.y+u,l[i+2]=r.x-h,l[i+3]=r.y-u,a=r;this.containerUpdateTransform()}}},{"../core":45,"./Mesh":146}],149:[function(t,e,r){e.exports={Mesh:t("./Mesh"),Plane:t("./Plane"),Rope:t("./Rope"),MeshRenderer:t("./webgl/MeshRenderer"),MeshShader:t("./webgl/MeshShader")}},{"./Mesh":146,"./Plane":147,"./Rope":148,"./webgl/MeshRenderer":150,"./webgl/MeshShader":151}],150:[function(t,e,r){function i(t){n.ObjectRenderer.call(this,t),this.indices=new Uint16Array(15e3);for(var e=0,r=0;15e3>e;e+=6,r+=4)this.indices[e+0]=r+0,this.indices[e+1]=r+1,this.indices[e+2]=r+2,this.indices[e+3]=r+0,this.indices[e+4]=r+2,this.indices[e+5]=r+3;this.currentShader=null}var n=t("../../core"),o=t("../Mesh");i.prototype=Object.create(n.ObjectRenderer.prototype),i.prototype.constructor=i,e.exports=i,n.WebGLRenderer.registerPlugin("mesh",i),i.prototype.onContextChange=function(){},i.prototype.render=function(t){t._vertexBuffer||this._initWebGL(t);var e=this.renderer,r=e.gl,i=t._texture.baseTexture,n=t.shader,s=t.drawMode===o.DRAW_MODES.TRIANGLE_MESH?r.TRIANGLE_STRIP:r.TRIANGLES;e.blendModeManager.setBlendMode(t.blendMode),n=n?n.shaders[r.id]||n.getShader(e):e.shaderManager.plugins.meshShader,this.renderer.shaderManager.setShader(n),n.uniforms.translationMatrix.value=t.worldTransform.toArray(!0),n.uniforms.projectionMatrix.value=e.currentRenderTarget.projectionMatrix.toArray(!0),n.uniforms.alpha.value=t.worldAlpha,n.syncUniforms(),t.dirty?(t.dirty=!1,r.bindBuffer(r.ARRAY_BUFFER,t._vertexBuffer),r.bufferData(r.ARRAY_BUFFER,t.vertices,r.STATIC_DRAW),r.vertexAttribPointer(n.attributes.aVertexPosition,2,r.FLOAT,!1,0,0),r.bindBuffer(r.ARRAY_BUFFER,t._uvBuffer),r.bufferData(r.ARRAY_BUFFER,t.uvs,r.STATIC_DRAW),r.vertexAttribPointer(n.attributes.aTextureCoord,2,r.FLOAT,!1,0,0),r.activeTexture(r.TEXTURE0),i._glTextures[r.id]?r.bindTexture(r.TEXTURE_2D,i._glTextures[r.id]):this.renderer.updateTexture(i),r.bindBuffer(r.ELEMENT_ARRAY_BUFFER,t._indexBuffer),r.bufferData(r.ELEMENT_ARRAY_BUFFER,t.indices,r.STATIC_DRAW)):(r.bindBuffer(r.ARRAY_BUFFER,t._vertexBuffer),r.bufferSubData(r.ARRAY_BUFFER,0,t.vertices),r.vertexAttribPointer(n.attributes.aVertexPosition,2,r.FLOAT,!1,0,0),r.bindBuffer(r.ARRAY_BUFFER,t._uvBuffer),r.vertexAttribPointer(n.attributes.aTextureCoord,2,r.FLOAT,!1,0,0),r.activeTexture(r.TEXTURE0),i._glTextures[r.id]?r.bindTexture(r.TEXTURE_2D,i._glTextures[r.id]):this.renderer.updateTexture(i),r.bindBuffer(r.ELEMENT_ARRAY_BUFFER,t._indexBuffer),r.bufferSubData(r.ELEMENT_ARRAY_BUFFER,0,t.indices)),r.drawElements(s,t.indices.length,r.UNSIGNED_SHORT,0)},i.prototype._initWebGL=function(t){var e=this.renderer.gl;t._vertexBuffer=e.createBuffer(),t._indexBuffer=e.createBuffer(),t._uvBuffer=e.createBuffer(),e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferData(e.ARRAY_BUFFER,t.vertices,e.DYNAMIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferData(e.ARRAY_BUFFER,t.uvs,e.STATIC_DRAW),t.colors&&(t._colorBuffer=e.createBuffer(),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.bufferData(e.ARRAY_BUFFER,t.colors,e.STATIC_DRAW)),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer),e.bufferData(e.ELEMENT_ARRAY_BUFFER,t.indices,e.STATIC_DRAW)},i.prototype.flush=function(){},i.prototype.start=function(){this.currentShader=null},i.prototype.destroy=function(){n.ObjectRenderer.prototype.destroy.call(this)}},{"../../core":45,"../Mesh":146}],151:[function(t,e,r){function i(t){n.Shader.call(this,t,["precision lowp float;","attribute vec2 aVertexPosition;","attribute vec2 aTextureCoord;","uniform mat3 translationMatrix;","uniform mat3 projectionMatrix;","varying vec2 vTextureCoord;","void main(void){"," gl_Position = vec4((projectionMatrix * translationMatrix * vec3(aVertexPosition, 1.0)).xy, 0.0, 1.0);"," vTextureCoord = aTextureCoord;","}"].join("\n"),["precision lowp float;","varying vec2 vTextureCoord;","uniform float alpha;","uniform sampler2D uSampler;","void main(void){"," gl_FragColor = texture2D(uSampler, vTextureCoord) * alpha ;","}"].join("\n"),{alpha:{type:"1f",value:0},translationMatrix:{type:"mat3",value:new Float32Array(9)},projectionMatrix:{type:"mat3",value:new Float32Array(9)}},{aVertexPosition:0,aTextureCoord:0})}var n=t("../../core");i.prototype=Object.create(n.Shader.prototype),i.prototype.constructor=i,e.exports=i,n.ShaderManager.registerPlugin("meshShader",i)},{"../../core":45}],152:[function(t,e,r){Math.sign||(Math.sign=function(t){return t=+t,0===t||isNaN(t)?t:t>0?1:-1})},{}],153:[function(t,e,r){Object.assign||(Object.assign=t("object-assign"))},{"object-assign":26}],154:[function(t,e,r){t("./Object.assign"),t("./requestAnimationFrame"),t("./Math.sign")},{"./Math.sign":152,"./Object.assign":153,"./requestAnimationFrame":155}],155:[function(t,e,r){(function(t){if(Date.now&&Date.prototype.getTime||(Date.now=function(){return(new Date).getTime()}),!t.performance||!t.performance.now){var e=Date.now();t.performance||(t.performance={}),t.performance.now=function(){return Date.now()-e}}for(var r=Date.now(),i=["ms","moz","webkit","o"],n=0;ni&&(i=0),r=e,setTimeout(function(){r=Date.now(),t(performance.now())},i)}),t.cancelAnimationFrame||(t.cancelAnimationFrame=function(t){clearTimeout(t)})}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{}]},{},[136])(136)}); +!function(t){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=t();else if("function"==typeof define&&define.amd)define([],t);else{var e;e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:this,e.PIXI=t()}}(function(){var t;return function e(t,r,i){function n(s,a){if(!r[s]){if(!t[s]){var h="function"==typeof require&&require;if(!a&&h)return h(s,!0);if(o)return o(s,!0);var u=new Error("Cannot find module '"+s+"'");throw u.code="MODULE_NOT_FOUND",u}var l=r[s]={exports:{}};t[s][0].call(l.exports,function(e){var r=t[s][1][e];return n(r?r:e)},l,l.exports,e,t,r,i)}return r[s].exports}for(var o="function"==typeof require&&require,s=0;s=t.byteLength?i.bufferSubData(this.type,e,t):i.bufferData(this.type,t,this.drawType),this.data=t},n.prototype.bind=function(){var t=this.gl;t.bindBuffer(this.type,this.buffer)},n.createVertexBuffer=function(t,e,r){return new n(t,t.ARRAY_BUFFER,e,r)},n.createIndexBuffer=function(t,e,r){return new n(t,t.ELEMENT_ARRAY_BUFFER,e,r)},n.create=function(t,e,r,i){return new n(t,e,i)},e.exports=n},{}],3:[function(t,e,r){var i=t("./GLTexture"),n=function(t,e,r){this.gl=t,this.framebuffer=t.createFramebuffer(),this.stencil=null,this.texture=null,this.width=e||100,this.height=r||100};n.prototype.enableTexture=function(t){var e=this.gl;this.texture=t||new i(e),this.texture.bind(),this.bind(),e.framebufferTexture2D(e.FRAMEBUFFER,e.COLOR_ATTACHMENT0,e.TEXTURE_2D,this.texture.texture,0)},n.prototype.enableStencil=function(){if(!this.stencil){var t=this.gl;this.stencil=t.createRenderbuffer(),t.bindRenderbuffer(t.RENDERBUFFER,this.stencil),t.framebufferRenderbuffer(t.FRAMEBUFFER,t.DEPTH_STENCIL_ATTACHMENT,t.RENDERBUFFER,this.stencil),t.renderbufferStorage(t.RENDERBUFFER,t.DEPTH_STENCIL,this.width,this.height)}},n.prototype.clear=function(t,e,r,i){this.bind();var n=this.gl;n.clearColor(t,e,r,i),n.clear(n.COLOR_BUFFER_BIT)},n.prototype.bind=function(){var t=this.gl;t.bindFramebuffer(t.FRAMEBUFFER,this.framebuffer)},n.prototype.unbind=function(){gl.bindFramebuffer(gl.FRAMEBUFFER,null)},n.prototype.resize=function(t,e){var r=this.gl;this.width=t,this.height=e,this.texture&&this.texture.uploadData(null,t,e),this.stencil&&(r.bindRenderbuffer(r.RENDERBUFFER,this.stencil),r.renderbufferStorage(r.RENDERBUFFER,r.DEPTH_STENCIL,t,e))},n.prototype.destroy=function(){var t=this.gl;t.deleteFramebuffer(this.framebuffer)},n.createRGBA=function(t,e,r,o){var s=i.fromData(t,null,e,r);s.enableNearestScaling(),s.enableWrapClamp();var a=new n(t,e,r);return a.enableTexture(s),a},n.createFloat32=function(t,e,r,o){var s=new i.fromData(t,o,e,r);s.enableNearestScaling(),s.enableWrapClamp();var a=new n(t,e,r);return a.enableTexture(s),a},e.exports=n},{"./GLTexture":5}],4:[function(t,e,r){var i=t("./shader/compileProgram"),n=t("./shader/extractAttributes"),o=t("./shader/extractUniforms"),s=t("./shader/generateUniformAccessObject"),a=function(t,e,r){this.gl=t,this.program=i(t,e,r),this.attributes=n(t,this.program);var a=o(t,this.program);this.uniforms=s(t,a)};a.prototype.bind=function(){this.gl.useProgram(this.program)},a.prototype.destroy=function(){this.gl},e.exports=a},{"./shader/compileProgram":9,"./shader/extractAttributes":11,"./shader/extractUniforms":12,"./shader/generateUniformAccessObject":13}],5:[function(t,e,r){var i=function(t,e,r,i,n){this.gl=t,this.texture=t.createTexture(),this.mipmap=!1,this.premultiplyAlpha=!1,this.width=e||0,this.height=r||0,this.format=i||t.RGBA,this.type=n||t.UNSIGNED_BYTE};i.prototype.upload=function(t){this.bind();var e=this.gl;this.width=t.width,this.height=t.height,e.pixelStorei(e.UNPACK_PREMULTIPLY_ALPHA_WEBGL,this.premultiplyAlpha),e.texImage2D(e.TEXTURE_2D,0,this.format,this.format,this.type,t)};var n=!1;i.prototype.uploadData=function(t,e,r){if(this.bind(),this.width=e||this.width,this.height=r||this.height,t instanceof Float32Array){if(!n){var i=gl.getExtension("OES_texture_float");if(!i)throw new Error("floating point textures not available");n=!0}this.type=gl.FLOAT}else this.type=gl.UNSIGNED_BYTE;gl.pixelStorei(gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL,this.premultiplyAlpha),gl.texImage2D(gl.TEXTURE_2D,0,this.format,this.width,this.height,0,this.format,this.type,t||null)},i.prototype.bind=function(t){var e=this.gl;void 0!==t&&e.activeTexture(e.TEXTURE0+t),e.bindTexture(e.TEXTURE_2D,this.texture)},i.prototype.unbind=function(){var t=this.gl;t.bindTexture(t.TEXTURE_2D,null)},i.prototype.minFilter=function(t){var e=this.gl;this.bind(),this.mipmap?e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MIN_FILTER,t?e.LINEAR_MIPMAP_LINEAR:e.NEAREST_MIPMAP_NEAREST):e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MIN_FILTER,t?e.LINEAR:e.NEAREST)},i.prototype.magFilter=function(t){var e=this.gl;this.bind(),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MAG_FILTER,t?e.LINEAR:e.NEAREST)},i.prototype.enableMipmap=function(){this.bind(),this.mipmap=!0,gl.generateMipmap(gl.TEXTURE_2D)},i.prototype.enableLinearScaling=function(){this.minFilter(!0),this.magFilter(!0)},i.prototype.enableNearestScaling=function(){this.minFilter(!1),this.magFilter(!1)},i.prototype.enableWrapClamp=function(){var t=this.gl;this.bind(),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_WRAP_S,t.CLAMP_TO_EDGE),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_WRAP_T,t.CLAMP_TO_EDGE)},i.prototype.enableWrapRepeat=function(){var t=this.gl;this.bind(),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_WRAP_S,t.REPEAT),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_WRAP_T,t.REPEAT)},i.prototype.destroy=function(){var t=this.gl;t.deleteTexture(this.texture)},i.fromSource=function(t,e,r){var n=new i(t);return n.premultiplyAlpha=r||!1,n.upload(e),n},i.fromData=function(t,e,r,n){var o=new i(t);return o.uploadData(e,r,n),o},e.exports=i},{}],6:[function(t,e,r){function i(t){this.nativeVaoExtension=t.getExtension("OES_vertex_array_object")||t.getExtension("MOZ_OES_vertex_array_object")||t.getExtension("WEBKIT_OES_vertex_array_object"),this.nativeVaoExtension&&(this.nativeVao=this.nativeVaoExtension.createVertexArrayOES()),this.gl=t,this.attributes=[],this.indexBuffer=null,this.dirty=!1}i.prototype.constructor=i,e.exports=i,i.prototype.bind=function(){this.nativeVao?(this.nativeVaoExtension.bindVertexArrayOES(this.nativeVao),this.dirty&&(this.dirty=!1,this.activate())):this.activate()},i.prototype.unbind=function(){this.nativeVao&&this.nativeVaoExtension.bindVertexArrayOES(null)},i.prototype.activate=function(){for(var t=this.gl,e=0;es;s++){var a=t.getActiveAttrib(e,s),h=i(t,a.type);r[a.name]={type:h,size:n(h),location:t.getAttribLocation(e,a.name),pointer:function(e,r,i,n){t.vertexAttribPointer(this.location,this.size,e||t.FLOAT,r||!1,i||0,n||0)}}}return r};e.exports=o},{"./mapSize":14,"./mapType":15}],12:[function(t,e,r){var i=t("./mapType"),n=t("./defaultValue"),o=function(t,e){for(var r={},o=t.getProgramParameter(e,t.ACTIVE_UNIFORMS),s=0;o>s;s++){var a=t.getActiveUniform(e,s),h=a.name.replace(/\[.*?\]/,""),u=i(t,a.type);r[h]={type:u,size:a.size,location:t.getUniformLocation(e,h),value:n(u,a.size)}}return r};e.exports=o},{"./defaultValue":10,"./mapType":15}],13:[function(t,e,r){var i=function(t,e){var r={data:{}};r.gl=t;for(var i=Object.keys(e),a=0;a=0&&t.length%1===0}function c(t,e){for(var r=-1,i=t.length;++ri?i:null}):(r=X(t),e=r.length,function(){return i++,e>i?r[i]:null})}function y(t,e){return e=null==e?t.length-1:+e,function(){for(var r=Math.max(arguments.length-e,0),i=Array(r),n=0;r>n;n++)i[n]=arguments[n+e];switch(e){case 0:return t.call(this,i);case 1:return t.call(this,arguments[0],i)}}}function x(t){return function(e,r,i){return t(e,i)}}function b(t){return function(e,r,i){i=u(i||n),e=e||[];var o=m(e);if(0>=t)return i(null);var s=!1,a=0,l=!1;!function c(){if(s&&0>=a)return i(null);for(;t>a&&!l;){var n=o();if(null===n)return s=!0,void(0>=a&&i(null));a+=1,r(e[n],n,h(function(t){a-=1,t?(i(t),l=!0):c()}))}}()}}function _(t){return function(e,r,i){return t(N.eachOf,e,r,i)}}function T(t){return function(e,r,i,n){return t(b(r),e,i,n)}}function E(t){return function(e,r,i){return t(N.eachOfSeries,e,r,i)}}function S(t,e,r,i){i=u(i||n),e=e||[];var o=l(e)?[]:{};t(e,function(t,e,i){r(t,function(t,r){o[e]=r,i(t)})},function(t){i(t,o)})}function w(t,e,r,i){var n=[];t(e,function(t,e,i){r(t,function(r){r&&n.push({index:e,value:t}),i()})},function(){i(p(n.sort(function(t,e){return t.index-e.index}),function(t){return t.value}))})}function C(t,e,r,i){w(t,e,function(t,e){r(t,function(t){e(!t)})},i)}function A(t,e,r){return function(i,n,o,s){function a(){s&&s(r(!1,void 0))}function h(t,i,n){return s?void o(t,function(i){s&&e(i)&&(s(r(!0,t)),s=o=!1),n()}):n()}arguments.length>3?t(i,n,h,a):(s=o,o=n,t(i,h,a))}}function M(t,e){return e}function R(t,e,r){r=r||n;var i=l(e)?[]:{};t(e,function(t,e,r){t(y(function(t,n){n.length<=1&&(n=n[0]),i[e]=n,r(t)}))},function(t){r(t,i)})}function O(t,e,r,i){var n=[];t(e,function(t,e,i){r(t,function(t,e){n=n.concat(e||[]),i(t)})},function(t){i(t,n)})}function P(t,e,r){function i(t,e,r,i){if(null!=i&&"function"!=typeof i)throw new Error("task callback must be a function");return t.started=!0,j(e)||(e=[e]),0===e.length&&t.idle()?N.setImmediate(function(){t.drain()}):(c(e,function(e){var o={data:e,callback:i||n};r?t.tasks.unshift(o):t.tasks.push(o),t.tasks.length===t.concurrency&&t.saturated()}),void N.setImmediate(t.process))}function o(t,e){return function(){s-=1;var r=!1,i=arguments;c(e,function(t){c(a,function(e,i){e!==t||r||(a.splice(i,1),r=!0)}),t.callback.apply(t,i)}),t.tasks.length+s===0&&t.drain(),t.process()}}if(null==e)e=1;else if(0===e)throw new Error("Concurrency must not be zero");var s=0,a=[],u={tasks:[],concurrency:e,payload:r,saturated:n,empty:n,drain:n,started:!1,paused:!1,push:function(t,e){i(u,t,!1,e)},kill:function(){u.drain=n,u.tasks=[]},unshift:function(t,e){i(u,t,!0,e)},process:function(){if(!u.paused&&s=e;e++)N.setImmediate(u.process)}}};return u}function D(t){return y(function(e,r){e.apply(null,r.concat([y(function(e,r){"object"==typeof console&&(e?console.error&&console.error(e):console[t]&&c(r,function(e){console[t](e)}))})]))})}function F(t){return function(e,r,i){t(d(e),r,i)}}function L(t){return y(function(e,r){var i=y(function(r){var i=this,n=r.pop();return t(e,function(t,e,n){t.apply(i,r.concat([n]))},n)});return r.length?i.apply(this,r):i})}function B(t){return y(function(e){var r=e.pop();e.push(function(){var t=arguments;i?N.setImmediate(function(){r.apply(null,t)}):r.apply(null,t)});var i=!0;t.apply(this,e),i=!1})}var I,N={},U="object"==typeof self&&self.self===self&&self||"object"==typeof i&&i.global===i&&i||this;null!=U&&(I=U.async),N.noConflict=function(){return U.async=I,N};var k=Object.prototype.toString,j=Array.isArray||function(t){return"[object Array]"===k.call(t)},G=function(t){var e=typeof t;return"function"===e||"object"===e&&!!t},X=Object.keys||function(t){var e=[];for(var r in t)t.hasOwnProperty(r)&&e.push(r);return e},Y="function"==typeof setImmediate&&setImmediate,z=Y?function(t){Y(t)}:function(t){setTimeout(t,0)};"object"==typeof e&&"function"==typeof e.nextTick?N.nextTick=e.nextTick:N.nextTick=z,N.setImmediate=Y?z:N.nextTick,N.forEach=N.each=function(t,e,r){return N.eachOf(t,x(e),r)},N.forEachSeries=N.eachSeries=function(t,e,r){return N.eachOfSeries(t,x(e),r)},N.forEachLimit=N.eachLimit=function(t,e,r,i){return b(e)(t,x(r),i)},N.forEachOf=N.eachOf=function(t,e,r){function i(t){a--,t?r(t):null===o&&0>=a&&r(null)}r=u(r||n),t=t||[];for(var o,s=m(t),a=0;null!=(o=s());)a+=1,e(t[o],o,h(i));0===a&&r(null)},N.forEachOfSeries=N.eachOfSeries=function(t,e,r){function i(){var n=!0;return null===s?r(null):(e(t[s],s,h(function(t){if(t)r(t);else{if(s=o(),null===s)return r(null);n?N.setImmediate(i):i()}})),void(n=!1))}r=u(r||n),t=t||[];var o=m(t),s=o();i()},N.forEachOfLimit=N.eachOfLimit=function(t,e,r,i){b(e)(t,r,i)},N.map=_(S),N.mapSeries=E(S),N.mapLimit=T(S),N.inject=N.foldl=N.reduce=function(t,e,r,i){N.eachOfSeries(t,function(t,i,n){r(e,t,function(t,r){e=r,n(t)})},function(t){i(t,e)})},N.foldr=N.reduceRight=function(t,e,r,i){var n=p(t,o).reverse();N.reduce(n,e,r,i)},N.transform=function(t,e,r,i){3===arguments.length&&(i=r,r=e,e=j(t)?[]:{}),N.eachOf(t,function(t,i,n){r(e,t,i,n)},function(t){i(t,e)})},N.select=N.filter=_(w),N.selectLimit=N.filterLimit=T(w),N.selectSeries=N.filterSeries=E(w),N.reject=_(C),N.rejectLimit=T(C),N.rejectSeries=E(C),N.any=N.some=A(N.eachOf,s,o),N.someLimit=A(N.eachOfLimit,s,o),N.all=N.every=A(N.eachOf,a,a),N.everyLimit=A(N.eachOfLimit,a,a),N.detect=A(N.eachOf,o,M),N.detectSeries=A(N.eachOfSeries,o,M),N.detectLimit=A(N.eachOfLimit,o,M),N.sortBy=function(t,e,r){function i(t,e){var r=t.criteria,i=e.criteria;return i>r?-1:r>i?1:0}N.map(t,function(t,r){e(t,function(e,i){e?r(e):r(null,{value:t,criteria:i})})},function(t,e){return t?r(t):void r(null,p(e.sort(i),function(t){return t.value}))})},N.auto=function(t,e,r){function i(t){d.unshift(t)}function o(t){var e=g(d,t);e>=0&&d.splice(e,1)}function s(){h--,c(d.slice(0),function(t){t()})}r||(r=e,e=null),r=u(r||n);var a=X(t),h=a.length;if(!h)return r(null);e||(e=h);var l={},p=0,d=[];i(function(){h||r(null,l)}),c(a,function(n){function a(){return e>p&&f(m,function(t,e){return t&&l.hasOwnProperty(e)},!0)&&!l.hasOwnProperty(n)}function h(){a()&&(p++,o(h),c[c.length-1](d,l))}for(var u,c=j(t[n])?t[n]:[t[n]],d=y(function(t,e){if(p--,e.length<=1&&(e=e[0]),t){var i={};v(l,function(t,e){i[e]=t}),i[n]=e,r(t,i)}else l[n]=e,N.setImmediate(s)}),m=c.slice(0,c.length-1),x=m.length;x--;){if(!(u=t[m[x]]))throw new Error("Has inexistant dependency");if(j(u)&&g(u,n)>=0)throw new Error("Has cyclic dependencies")}a()?(p++,c[c.length-1](d,l)):i(h)})},N.retry=function(t,e,r){function i(t,e){if("number"==typeof e)t.times=parseInt(e,10)||o;else{if("object"!=typeof e)throw new Error("Unsupported argument type for 'times': "+typeof e);t.times=parseInt(e.times,10)||o,t.interval=parseInt(e.interval,10)||s}}function n(t,e){function r(t,r){return function(i){t(function(t,e){i(!t||r,{err:t,result:e})},e)}}function i(t){return function(e){setTimeout(function(){e(null)},t)}}for(;h.times;){var n=!(h.times-=1);a.push(r(h.task,n)),!n&&h.interval>0&&a.push(i(h.interval))}N.series(a,function(e,r){r=r[r.length-1],(t||h.callback)(r.err,r.result)})}var o=5,s=0,a=[],h={times:o,interval:s},u=arguments.length;if(1>u||u>3)throw new Error("Invalid arguments - must be either (task), (task, callback), (times, task) or (times, task, callback)");return 2>=u&&"function"==typeof t&&(r=e,e=t),"function"!=typeof t&&i(h,t),h.callback=r,h.task=e,h.callback?n():n},N.waterfall=function(t,e){function r(t){return y(function(i,n){if(i)e.apply(null,[i].concat(n));else{var o=t.next();o?n.push(r(o)):n.push(e),B(t).apply(null,n)}})}if(e=u(e||n),!j(t)){var i=new Error("First argument to waterfall must be an array of functions");return e(i)}return t.length?void r(N.iterator(t))():e()},N.parallel=function(t,e){R(N.eachOf,t,e)},N.parallelLimit=function(t,e,r){R(b(e),t,r)},N.series=function(t,e){R(N.eachOfSeries,t,e)},N.iterator=function(t){function e(r){function i(){return t.length&&t[r].apply(null,arguments),i.next()}return i.next=function(){return ri;){var o=i+(n-i+1>>>1);r(e,t[o])>=0?i=o:n=o-1}return i}function o(t,e,o,s){if(null!=s&&"function"!=typeof s)throw new Error("task callback must be a function");return t.started=!0,j(e)||(e=[e]),0===e.length?N.setImmediate(function(){t.drain()}):void c(e,function(e){var a={data:e,priority:o,callback:"function"==typeof s?s:n};t.tasks.splice(i(t.tasks,a,r)+1,0,a),t.tasks.length===t.concurrency&&t.saturated(),N.setImmediate(t.process)})}var s=N.queue(t,e);return s.push=function(t,e,r){o(s,t,e,r)},delete s.unshift,s},N.cargo=function(t,e){return P(t,1,e)},N.log=D("log"),N.dir=D("dir"),N.memoize=function(t,e){var r={},i={};e=e||o;var n=y(function(n){var o=n.pop(),s=e.apply(null,n);s in r?N.setImmediate(function(){o.apply(null,r[s])}):s in i?i[s].push(o):(i[s]=[o],t.apply(null,n.concat([y(function(t){r[s]=t;var e=i[s];delete i[s];for(var n=0,o=e.length;o>n;n++)e[n].apply(null,t)})])))});return n.memo=r,n.unmemoized=t,n},N.unmemoize=function(t){return function(){return(t.unmemoized||t).apply(null,arguments)}},N.times=F(N.map),N.timesSeries=F(N.mapSeries),N.timesLimit=function(t,e,r,i){return N.mapLimit(d(t),e,r,i)},N.seq=function(){var t=arguments;return y(function(e){var r=this,i=e[e.length-1];"function"==typeof i?e.pop():i=n,N.reduce(t,e,function(t,e,i){e.apply(r,t.concat([y(function(t,e){i(t,e)})]))},function(t,e){i.apply(r,[t].concat(e))})})},N.compose=function(){return N.seq.apply(null,Array.prototype.reverse.call(arguments))},N.applyEach=L(N.eachOf),N.applyEachSeries=L(N.eachOfSeries),N.forever=function(t,e){function r(t){return t?i(t):void o(r)}var i=h(e||n),o=B(t);r()},N.ensureAsync=B,N.constant=y(function(t){var e=[null].concat(t);return function(t){return t.apply(this,e)}}),N.wrapSync=N.asyncify=function(t){return y(function(e){var r,i=e.pop();try{r=t.apply(this,e)}catch(n){return i(n)}G(r)&&"function"==typeof r.then?r.then(function(t){i(null,t)})["catch"](function(t){i(t.message?t:new Error(t))}):i(null,r)})},"object"==typeof r&&r.exports?r.exports=N:"function"==typeof t&&t.amd?t([],function(){return N}):U.async=N}()}).call(this,e("_process"),"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{_process:18}],17:[function(t,e,r){(function(t){function e(t,e){for(var r=0,i=t.length-1;i>=0;i--){var n=t[i];"."===n?t.splice(i,1):".."===n?(t.splice(i,1),r++):r&&(t.splice(i,1),r--)}if(e)for(;r--;r)t.unshift("..");return t}function i(t,e){if(t.filter)return t.filter(e);for(var r=[],i=0;i=-1&&!n;o--){var s=o>=0?arguments[o]:t.cwd();if("string"!=typeof s)throw new TypeError("Arguments to path.resolve must be strings");s&&(r=s+"/"+r,n="/"===s.charAt(0))}return r=e(i(r.split("/"),function(t){return!!t}),!n).join("/"),(n?"/":"")+r||"."},r.normalize=function(t){var n=r.isAbsolute(t),o="/"===s(t,-1);return t=e(i(t.split("/"),function(t){return!!t}),!n).join("/"),t||n||(t="."),t&&o&&(t+="/"),(n?"/":"")+t},r.isAbsolute=function(t){return"/"===t.charAt(0)},r.join=function(){var t=Array.prototype.slice.call(arguments,0);return r.normalize(i(t,function(t,e){if("string"!=typeof t)throw new TypeError("Arguments to path.join must be strings");return t}).join("/"))},r.relative=function(t,e){function i(t){for(var e=0;e=0&&""===t[r];r--);return e>r?[]:t.slice(e,r-e+1)}t=r.resolve(t).substr(1),e=r.resolve(e).substr(1);for(var n=i(t.split("/")),o=i(e.split("/")),s=Math.min(n.length,o.length),a=s,h=0;s>h;h++)if(n[h]!==o[h]){a=h;break}for(var u=[],h=a;he&&(e=t.length+e),t.substr(e,r)}}).call(this,t("_process"))},{_process:18}],18:[function(t,e,r){function i(){l=!1,a.length?u=a.concat(u):c=-1,u.length&&n()}function n(){if(!l){var t=setTimeout(i);l=!0;for(var e=u.length;e;){for(a=u,u=[];++c1)for(var r=1;r1&&(i=r[0]+"@",t=r[1]),t=t.replace(F,".");var n=t.split("."),o=s(n,e).join(".");return i+o}function h(t){for(var e,r,i=[],n=0,o=t.length;o>n;)e=t.charCodeAt(n++),e>=55296&&56319>=e&&o>n?(r=t.charCodeAt(n++),56320==(64512&r)?i.push(((1023&e)<<10)+(1023&r)+65536):(i.push(e),n--)):i.push(e);return i}function u(t){return s(t,function(t){var e="";return t>65535&&(t-=65536,e+=N(t>>>10&1023|55296),t=56320|1023&t),e+=N(t)}).join("")}function l(t){return 10>t-48?t-22:26>t-65?t-65:26>t-97?t-97:E}function c(t,e){return t+22+75*(26>t)-((0!=e)<<5)}function p(t,e,r){var i=0;for(t=r?I(t/A):t>>1,t+=I(t/e);t>B*w>>1;i+=E)t=I(t/B);return I(i+(B+1)*t/(t+C))}function d(t){var e,r,i,n,s,a,h,c,d,f,v=[],g=t.length,m=0,y=R,x=M;for(r=t.lastIndexOf(O),0>r&&(r=0),i=0;r>i;++i)t.charCodeAt(i)>=128&&o("not-basic"),v.push(t.charCodeAt(i));for(n=r>0?r+1:0;g>n;){for(s=m,a=1,h=E;n>=g&&o("invalid-input"),c=l(t.charCodeAt(n++)),(c>=E||c>I((T-m)/a))&&o("overflow"),m+=c*a,d=x>=h?S:h>=x+w?w:h-x,!(d>c);h+=E)f=E-d,a>I(T/f)&&o("overflow"),a*=f;e=v.length+1,x=p(m-s,e,0==s),I(m/e)>T-y&&o("overflow"),y+=I(m/e),m%=e,v.splice(m++,0,y)}return u(v)}function f(t){var e,r,i,n,s,a,u,l,d,f,v,g,m,y,x,b=[];for(t=h(t),g=t.length,e=R,r=0,s=M,a=0;g>a;++a)v=t[a],128>v&&b.push(N(v));for(i=n=b.length,n&&b.push(O);g>i;){for(u=T,a=0;g>a;++a)v=t[a],v>=e&&u>v&&(u=v);for(m=i+1,u-e>I((T-r)/m)&&o("overflow"),r+=(u-e)*m,e=u,a=0;g>a;++a)if(v=t[a],e>v&&++r>T&&o("overflow"),v==e){for(l=r,d=E;f=s>=d?S:d>=s+w?w:d-s,!(f>l);d+=E)x=l-f,y=E-f,b.push(N(c(f+x%y,0))),l=I(x/y);b.push(N(c(l,0))),s=p(r,m,i==n),r=0,++i}++r,++e}return b.join("")}function v(t){return a(t,function(t){return P.test(t)?d(t.slice(4).toLowerCase()):t})}function g(t){return a(t,function(t){return D.test(t)?"xn--"+f(t):t})}var m="object"==typeof i&&i&&!i.nodeType&&i,y="object"==typeof r&&r&&!r.nodeType&&r,x="object"==typeof e&&e;(x.global===x||x.window===x||x.self===x)&&(n=x);var b,_,T=2147483647,E=36,S=1,w=26,C=38,A=700,M=72,R=128,O="-",P=/^xn--/,D=/[^\x20-\x7E]/,F=/[\x2E\u3002\uFF0E\uFF61]/g,L={overflow:"Overflow: input needs wider integers to process","not-basic":"Illegal input >= 0x80 (not a basic code point)","invalid-input":"Invalid input"},B=E-S,I=Math.floor,N=String.fromCharCode;if(b={version:"1.3.2",ucs2:{decode:h,encode:u},decode:d,encode:f,toASCII:g,toUnicode:v},"function"==typeof t&&"object"==typeof t.amd&&t.amd)t("punycode",function(){return b});else if(m&&y)if(r.exports==m)y.exports=b;else for(_ in b)b.hasOwnProperty(_)&&(m[_]=b[_]);else n.punycode=b}(this)}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{}],20:[function(t,e,r){"use strict";function i(t,e){return Object.prototype.hasOwnProperty.call(t,e)}e.exports=function(t,e,r,o){e=e||"&",r=r||"=";var s={};if("string"!=typeof t||0===t.length)return s;var a=/\+/g;t=t.split(e);var h=1e3;o&&"number"==typeof o.maxKeys&&(h=o.maxKeys);var u=t.length;h>0&&u>h&&(u=h);for(var l=0;u>l;++l){var c,p,d,f,v=t[l].replace(a,"%20"),g=v.indexOf(r);g>=0?(c=v.substr(0,g),p=v.substr(g+1)):(c=v,p=""),d=decodeURIComponent(c), +f=decodeURIComponent(p),i(s,d)?n(s[d])?s[d].push(f):s[d]=[s[d],f]:s[d]=f}return s};var n=Array.isArray||function(t){return"[object Array]"===Object.prototype.toString.call(t)}},{}],21:[function(t,e,r){"use strict";function i(t,e){if(t.map)return t.map(e);for(var r=[],i=0;i",'"',"`"," ","\r","\n"," "],g=["{","}","|","\\","^","`"].concat(v),m=["'"].concat(g),y=["%","/","?",";","#"].concat(m),x=["/","?","#"],b=255,_=/^[a-z0-9A-Z_-]{0,63}$/,T=/^([a-z0-9A-Z_-]{0,63})(.*)$/,E={javascript:!0,"javascript:":!0},S={javascript:!0,"javascript:":!0},w={http:!0,https:!0,ftp:!0,gopher:!0,file:!0,"http:":!0,"https:":!0,"ftp:":!0,"gopher:":!0,"file:":!0},C=t("querystring");i.prototype.parse=function(t,e,r){if(!h(t))throw new TypeError("Parameter 'url' must be a string, not "+typeof t);var i=t;i=i.trim();var n=d.exec(i);if(n){n=n[0];var o=n.toLowerCase();this.protocol=o,i=i.substr(n.length)}if(r||n||i.match(/^\/\/[^@\/]+@[^@\/]+/)){var s="//"===i.substr(0,2);!s||n&&S[n]||(i=i.substr(2),this.slashes=!0)}if(!S[n]&&(s||n&&!w[n])){for(var a=-1,u=0;ul)&&(a=l)}var c,f;f=-1===a?i.lastIndexOf("@"):i.lastIndexOf("@",a),-1!==f&&(c=i.slice(0,f),i=i.slice(f+1),this.auth=decodeURIComponent(c)),a=-1;for(var u=0;ul)&&(a=l)}-1===a&&(a=i.length),this.host=i.slice(0,a),i=i.slice(a),this.parseHost(),this.hostname=this.hostname||"";var v="["===this.hostname[0]&&"]"===this.hostname[this.hostname.length-1];if(!v)for(var g=this.hostname.split(/\./),u=0,A=g.length;A>u;u++){var M=g[u];if(M&&!M.match(_)){for(var R="",O=0,P=M.length;P>O;O++)R+=M.charCodeAt(O)>127?"x":M[O];if(!R.match(_)){var D=g.slice(0,u),F=g.slice(u+1),L=M.match(T);L&&(D.push(L[1]),F.unshift(L[2])),F.length&&(i="/"+F.join(".")+i),this.hostname=D.join(".");break}}}if(this.hostname.length>b?this.hostname="":this.hostname=this.hostname.toLowerCase(),!v){for(var B=this.hostname.split("."),I=[],u=0;uu;u++){var j=m[u],G=encodeURIComponent(j);G===j&&(G=escape(j)),i=i.split(j).join(G)}var X=i.indexOf("#");-1!==X&&(this.hash=i.substr(X),i=i.slice(0,X));var Y=i.indexOf("?");if(-1!==Y?(this.search=i.substr(Y),this.query=i.substr(Y+1),e&&(this.query=C.parse(this.query)),i=i.slice(0,Y)):e&&(this.search="",this.query={}),i&&(this.pathname=i),w[o]&&this.hostname&&!this.pathname&&(this.pathname="/"),this.pathname||this.search){var U=this.pathname||"",N=this.search||"";this.path=U+N}return this.href=this.format(),this},i.prototype.format=function(){var t=this.auth||"";t&&(t=encodeURIComponent(t),t=t.replace(/%3A/i,":"),t+="@");var e=this.protocol||"",r=this.pathname||"",i=this.hash||"",n=!1,o="";this.host?n=t+this.host:this.hostname&&(n=t+(-1===this.hostname.indexOf(":")?this.hostname:"["+this.hostname+"]"),this.port&&(n+=":"+this.port)),this.query&&u(this.query)&&Object.keys(this.query).length&&(o=C.stringify(this.query));var s=this.search||o&&"?"+o||"";return e&&":"!==e.substr(-1)&&(e+=":"),this.slashes||(!e||w[e])&&n!==!1?(n="//"+(n||""),r&&"/"!==r.charAt(0)&&(r="/"+r)):n||(n=""),i&&"#"!==i.charAt(0)&&(i="#"+i),s&&"?"!==s.charAt(0)&&(s="?"+s),r=r.replace(/[?#]/g,function(t){return encodeURIComponent(t)}),s=s.replace("#","%23"),e+n+r+s+i},i.prototype.resolve=function(t){return this.resolveObject(n(t,!1,!0)).format()},i.prototype.resolveObject=function(t){if(h(t)){var e=new i;e.parse(t,!1,!0),t=e}var r=new i;if(Object.keys(this).forEach(function(t){r[t]=this[t]},this),r.hash=t.hash,""===t.href)return r.href=r.format(),r;if(t.slashes&&!t.protocol)return Object.keys(t).forEach(function(e){"protocol"!==e&&(r[e]=t[e])}),w[r.protocol]&&r.hostname&&!r.pathname&&(r.path=r.pathname="/"),r.href=r.format(),r;if(t.protocol&&t.protocol!==r.protocol){if(!w[t.protocol])return Object.keys(t).forEach(function(e){r[e]=t[e]}),r.href=r.format(),r;if(r.protocol=t.protocol,t.host||S[t.protocol])r.pathname=t.pathname;else{for(var n=(t.pathname||"").split("/");n.length&&!(t.host=n.shift()););t.host||(t.host=""),t.hostname||(t.hostname=""),""!==n[0]&&n.unshift(""),n.length<2&&n.unshift(""),r.pathname=n.join("/")}if(r.search=t.search,r.query=t.query,r.host=t.host||"",r.auth=t.auth,r.hostname=t.hostname||t.host,r.port=t.port,r.pathname||r.search){var o=r.pathname||"",s=r.search||"";r.path=o+s}return r.slashes=r.slashes||t.slashes,r.href=r.format(),r}var a=r.pathname&&"/"===r.pathname.charAt(0),u=t.host||t.pathname&&"/"===t.pathname.charAt(0),p=u||a||r.host&&t.pathname,d=p,f=r.pathname&&r.pathname.split("/")||[],n=t.pathname&&t.pathname.split("/")||[],v=r.protocol&&!w[r.protocol];if(v&&(r.hostname="",r.port=null,r.host&&(""===f[0]?f[0]=r.host:f.unshift(r.host)),r.host="",t.protocol&&(t.hostname=null,t.port=null,t.host&&(""===n[0]?n[0]=t.host:n.unshift(t.host)),t.host=null),p=p&&(""===n[0]||""===f[0])),u)r.host=t.host||""===t.host?t.host:r.host,r.hostname=t.hostname||""===t.hostname?t.hostname:r.hostname,r.search=t.search,r.query=t.query,f=n;else if(n.length)f||(f=[]),f.pop(),f=f.concat(n),r.search=t.search,r.query=t.query;else if(!c(t.search)){if(v){r.hostname=r.host=f.shift();var g=r.host&&r.host.indexOf("@")>0?r.host.split("@"):!1;g&&(r.auth=g.shift(),r.host=r.hostname=g.shift())}return r.search=t.search,r.query=t.query,l(r.pathname)&&l(r.search)||(r.path=(r.pathname?r.pathname:"")+(r.search?r.search:"")),r.href=r.format(),r}if(!f.length)return r.pathname=null,r.search?r.path="/"+r.search:r.path=null,r.href=r.format(),r;for(var m=f.slice(-1)[0],y=(r.host||t.host)&&("."===m||".."===m)||""===m,x=0,b=f.length;b>=0;b--)m=f[b],"."==m?f.splice(b,1):".."===m?(f.splice(b,1),x++):x&&(f.splice(b,1),x--);if(!p&&!d)for(;x--;x)f.unshift("..");!p||""===f[0]||f[0]&&"/"===f[0].charAt(0)||f.unshift(""),y&&"/"!==f.join("/").substr(-1)&&f.push("");var _=""===f[0]||f[0]&&"/"===f[0].charAt(0);if(v){r.hostname=r.host=_?"":f.length?f.shift():"";var g=r.host&&r.host.indexOf("@")>0?r.host.split("@"):!1;g&&(r.auth=g.shift(),r.host=r.hostname=g.shift())}return p=p||r.host&&f.length,p&&!_&&f.unshift(""),f.length?r.pathname=f.join("/"):(r.pathname=null,r.path=null),l(r.pathname)&&l(r.search)||(r.path=(r.pathname?r.pathname:"")+(r.search?r.search:"")),r.auth=t.auth||r.auth,r.slashes=r.slashes||t.slashes,r.href=r.format(),r},i.prototype.parseHost=function(){var t=this.host,e=f.exec(t);e&&(e=e[0],":"!==e&&(this.port=e.substr(1)),t=t.substr(0,t.length-e.length)),t&&(this.hostname=t)}},{punycode:19,querystring:22}],24:[function(t,e,r){"use strict";function i(t,e,r){r=r||2;var i=e&&e.length,o=i?e[0]*r:t.length,a=n(t,0,o,r,!0),h=[];if(!a)return h;var u,l,p,d,f,v,g;if(i&&(a=c(t,e,a,r)),t.length>80*r){u=p=t[0],l=d=t[1];for(var m=r;o>m;m+=r)f=t[m],v=t[m+1],u>f&&(u=f),l>v&&(l=v),f>p&&(p=f),v>d&&(d=v);g=Math.max(p-u,d-l)}return s(a,h,r,u,l,g),h}function n(t,e,r,i,n){var o,s,a,h=0;for(o=e,s=r-i;r>o;o+=i)h+=(t[s]-t[o])*(t[o+1]+t[s+1]),s=o;if(n===h>0)for(o=e;r>o;o+=i)a=M(o,t[o],t[o+1],a);else for(o=r-i;o>=e;o-=i)a=M(o,t[o],t[o+1],a);return a}function o(t,e){if(!t)return t;e||(e=t);var r,i=t;do if(r=!1,i.steiner||!T(i,i.next)&&0!==_(i.prev,i,i.next))i=i.next;else{if(R(i),i=e=i.prev,i===i.next)return null;r=!0}while(r||i!==e);return e}function s(t,e,r,i,n,c,p){if(t){!p&&c&&v(t,i,n,c);for(var d,f,g=t;t.prev!==t.next;)if(d=t.prev,f=t.next,c?h(t,i,n,c):a(t))e.push(d.i/r),e.push(t.i/r),e.push(f.i/r),R(t),t=f.next,g=f.next;else if(t=f,t===g){p?1===p?(t=u(t,e,r),s(t,e,r,i,n,c,2)):2===p&&l(t,e,r,i,n,c):s(o(t),e,r,i,n,c,1);break}}}function a(t){var e=t.prev,r=t,i=t.next;if(_(e,r,i)>=0)return!1;for(var n=t.next.next;n!==t.prev;){if(x(e.x,e.y,r.x,r.y,i.x,i.y,n.x,n.y)&&_(n.prev,n,n.next)>=0)return!1;n=n.next}return!0}function h(t,e,r,i){var n=t.prev,o=t,s=t.next;if(_(n,o,s)>=0)return!1;for(var a=n.xo.x?n.x>s.x?n.x:s.x:o.x>s.x?o.x:s.x,l=n.y>o.y?n.y>s.y?n.y:s.y:o.y>s.y?o.y:s.y,c=m(a,h,e,r,i),p=m(u,l,e,r,i),d=t.nextZ;d&&d.z<=p;){if(d!==t.prev&&d!==t.next&&x(n.x,n.y,o.x,o.y,s.x,s.y,d.x,d.y)&&_(d.prev,d,d.next)>=0)return!1;d=d.nextZ}for(d=t.prevZ;d&&d.z>=c;){if(d!==t.prev&&d!==t.next&&x(n.x,n.y,o.x,o.y,s.x,s.y,d.x,d.y)&&_(d.prev,d,d.next)>=0)return!1;d=d.prevZ}return!0}function u(t,e,r){var i=t;do{var n=i.prev,o=i.next.next;E(n,i,i.next,o)&&w(n,o)&&w(o,n)&&(e.push(n.i/r),e.push(i.i/r),e.push(o.i/r),R(i),R(i.next),i=t=o),i=i.next}while(i!==t);return i}function l(t,e,r,i,n,a){var h=t;do{for(var u=h.next.next;u!==h.prev;){if(h.i!==u.i&&b(h,u)){var l=A(h,u);return h=o(h,h.next),l=o(l,l.next),s(h,e,r,i,n,a),void s(l,e,r,i,n,a)}u=u.next}h=h.next}while(h!==t)}function c(t,e,r,i){var s,a,h,u,l,c=[];for(s=0,a=e.length;a>s;s++)h=e[s]*i,u=a-1>s?e[s+1]*i:t.length,l=n(t,h,u,i,!1),l===l.next&&(l.steiner=!0),c.push(y(l));for(c.sort(p),s=0;s=i.next.y){var a=i.x+(o-i.y)*(i.next.x-i.x)/(i.next.y-i.y);n>=a&&a>s&&(s=a,r=i.x=i.x&&i.x>=r.x&&x(oh||h===l&&i.x>r.x)&&w(i,t)&&(r=i,l=h)),i=i.next;return r}function v(t,e,r,i){var n=t;do null===n.z&&(n.z=m(n.x,n.y,e,r,i)),n.prevZ=n.prev,n.nextZ=n.next,n=n.next;while(n!==t);n.prevZ.nextZ=null,n.prevZ=null,g(n)}function g(t){var e,r,i,n,o,s,a,h,u=1;do{for(r=t,t=null,o=null,s=0;r;){for(s++,i=r,a=0,e=0;u>e&&(a++,i=i.nextZ,i);e++);for(h=u;a>0||h>0&&i;)0===a?(n=i,i=i.nextZ,h--):0!==h&&i?r.z<=i.z?(n=r,r=r.nextZ,a--):(n=i,i=i.nextZ,h--):(n=r,r=r.nextZ,a--),o?o.nextZ=n:t=n,n.prevZ=o,o=n;r=i}o.nextZ=null,u*=2}while(s>1);return t}function m(t,e,r,i,n){return t=32767*(t-r)/n,e=32767*(e-i)/n,t=16711935&(t|t<<8),t=252645135&(t|t<<4),t=858993459&(t|t<<2),t=1431655765&(t|t<<1),e=16711935&(e|e<<8),e=252645135&(e|e<<4),e=858993459&(e|e<<2),e=1431655765&(e|e<<1),t|e<<1}function y(t){var e=t,r=t;do e.x=0&&(t-s)*(i-a)-(r-s)*(e-a)>=0&&(r-s)*(o-a)-(n-s)*(i-a)>=0}function b(t,e){return T(t,e)||t.next.i!==e.i&&t.prev.i!==e.i&&!S(t,e)&&w(t,e)&&w(e,t)&&C(t,e)}function _(t,e,r){return(e.y-t.y)*(r.x-e.x)-(e.x-t.x)*(r.y-e.y)}function T(t,e){return t.x===e.x&&t.y===e.y}function E(t,e,r,i){return _(t,e,r)>0!=_(t,e,i)>0&&_(r,i,t)>0!=_(r,i,e)>0}function S(t,e){var r=t;do{if(r.i!==t.i&&r.next.i!==t.i&&r.i!==e.i&&r.next.i!==e.i&&E(r,r.next,t,e))return!0;r=r.next}while(r!==t);return!1}function w(t,e){return _(t.prev,t,t.next)<0?_(t,e,t.next)>=0&&_(t,t.prev,e)>=0:_(t,e,t.prev)<0||_(t,t.next,e)<0}function C(t,e){var r=t,i=!1,n=(t.x+e.x)/2,o=(t.y+e.y)/2;do r.y>o!=r.next.y>o&&n<(r.next.x-r.x)*(o-r.y)/(r.next.y-r.y)+r.x&&(i=!i),r=r.next;while(r!==t);return i}function A(t,e){var r=new O(t.i,t.x,t.y),i=new O(e.i,e.x,e.y),n=t.next,o=e.prev;return t.next=e,e.prev=t,r.next=n,n.prev=r,i.next=r,r.prev=i,o.next=i,i.prev=o,i}function M(t,e,r,i){var n=new O(t,e,r);return i?(n.next=i.next,n.prev=i,i.next.prev=n,i.next=n):(n.prev=n,n.next=n),n}function R(t){t.next.prev=t.prev,t.prev.next=t.next,t.prevZ&&(t.prevZ.nextZ=t.nextZ),t.nextZ&&(t.nextZ.prevZ=t.prevZ)}function O(t,e,r){this.i=t,this.x=e,this.y=r,this.prev=null,this.next=null,this.z=null,this.prevZ=null,this.nextZ=null,this.steiner=!1}e.exports=i},{}],25:[function(t,e,r){"use strict";function i(t,e,r){this.fn=t,this.context=e,this.once=r||!1}function n(){}var o="function"!=typeof Object.create?"~":!1;n.prototype._events=void 0,n.prototype.listeners=function(t,e){var r=o?o+t:t,i=this._events&&this._events[r];if(e)return!!i;if(!i)return[];if(i.fn)return[i.fn];for(var n=0,s=i.length,a=new Array(s);s>n;n++)a[n]=i[n].fn;return a},n.prototype.emit=function(t,e,r,i,n,s){var a=o?o+t:t;if(!this._events||!this._events[a])return!1;var h,u,l=this._events[a],c=arguments.length;if("function"==typeof l.fn){switch(l.once&&this.removeListener(t,l.fn,void 0,!0),c){case 1:return l.fn.call(l.context),!0;case 2:return l.fn.call(l.context,e),!0;case 3:return l.fn.call(l.context,e,r),!0;case 4:return l.fn.call(l.context,e,r,i),!0;case 5:return l.fn.call(l.context,e,r,i,n),!0;case 6:return l.fn.call(l.context,e,r,i,n,s),!0}for(u=1,h=new Array(c-1);c>u;u++)h[u-1]=arguments[u];l.fn.apply(l.context,h)}else{var p,d=l.length;for(u=0;d>u;u++)switch(l[u].once&&this.removeListener(t,l[u].fn,void 0,!0),c){case 1:l[u].fn.call(l[u].context);break;case 2:l[u].fn.call(l[u].context,e);break;case 3:l[u].fn.call(l[u].context,e,r);break;default:if(!h)for(p=1,h=new Array(c-1);c>p;p++)h[p-1]=arguments[p];l[u].fn.apply(l[u].context,h)}}return!0},n.prototype.on=function(t,e,r){var n=new i(e,r||this),s=o?o+t:t;return this._events||(this._events=o?{}:Object.create(null)),this._events[s]?this._events[s].fn?this._events[s]=[this._events[s],n]:this._events[s].push(n):this._events[s]=n,this},n.prototype.once=function(t,e,r){var n=new i(e,r||this,!0),s=o?o+t:t;return this._events||(this._events=o?{}:Object.create(null)),this._events[s]?this._events[s].fn?this._events[s]=[this._events[s],n]:this._events[s].push(n):this._events[s]=n,this},n.prototype.removeListener=function(t,e,r,i){var n=o?o+t:t;if(!this._events||!this._events[n])return this;var s=this._events[n],a=[];if(e)if(s.fn)(s.fn!==e||i&&!s.once||r&&s.context!==r)&&a.push(s);else for(var h=0,u=s.length;u>h;h++)(s[h].fn!==e||i&&!s[h].once||r&&s[h].context!==r)&&a.push(s[h]);return a.length?this._events[n]=1===a.length?a[0]:a:delete this._events[n],this},n.prototype.removeAllListeners=function(t){return this._events?(t?delete this._events[o?o+t:t]:this._events=o?{}:Object.create(null),this):this},n.prototype.off=n.prototype.removeListener,n.prototype.addListener=n.prototype.on,n.prototype.setMaxListeners=function(){return this},n.prefixed=o,"undefined"!=typeof e&&(e.exports=n)},{}],26:[function(t,e,r){"use strict";function i(t){if(null===t||void 0===t)throw new TypeError("Object.assign cannot be called with null or undefined");return Object(t)}var n=Object.prototype.hasOwnProperty,o=Object.prototype.propertyIsEnumerable;e.exports=Object.assign||function(t,e){for(var r,s,a=i(t),h=1;h=t.length&&r())}if(r=r||function(){},!t.length)return r();var o=0;u(t,function(t){e(t,i(n))})},s.forEach=s.each,s.eachSeries=function(t,e,r){if(r=r||function(){},!t.length)return r();var i=0,n=function(){e(t[i],function(e){e?(r(e),r=function(){}):(i+=1,i>=t.length?r():n())})};n()},s.forEachSeries=s.eachSeries,s.eachLimit=function(t,e,r,i){var n=d(e);n.apply(null,[t,r,i])},s.forEachLimit=s.eachLimit;var d=function(t){return function(e,r,i){if(i=i||function(){},!e.length||0>=t)return i();var n=0,o=0,s=0;!function a(){if(n>=e.length)return i();for(;t>s&&o=e.length?i():a())})}()}},f=function(t){return function(){var e=Array.prototype.slice.call(arguments);return t.apply(null,[s.each].concat(e))}},v=function(t,e){return function(){var r=Array.prototype.slice.call(arguments);return e.apply(null,[d(t)].concat(r))}},g=function(t){return function(){var e=Array.prototype.slice.call(arguments);return t.apply(null,[s.eachSeries].concat(e))}},m=function(t,e,r,i){if(e=l(e,function(t,e){return{index:e,value:t}}),i){var n=[];t(e,function(t,e){r(t.value,function(r,i){n[t.index]=i,e(r)})},function(t){i(t,n)})}else t(e,function(t,e){r(t.value,function(t){e(t)})})};s.map=f(m),s.mapSeries=g(m),s.mapLimit=function(t,e,r,i){return y(e)(t,r,i)};var y=function(t){return v(t,m)};s.reduce=function(t,e,r,i){s.eachSeries(t,function(t,i){r(e,t,function(t,r){e=r,i(t)})},function(t){i(t,e)})},s.inject=s.reduce,s.foldl=s.reduce,s.reduceRight=function(t,e,r,i){var n=l(t,function(t){return t}).reverse();s.reduce(n,e,r,i)},s.foldr=s.reduceRight;var x=function(t,e,r,i){var n=[];e=l(e,function(t,e){return{index:e,value:t}}),t(e,function(t,e){r(t.value,function(r){r&&n.push(t),e()})},function(t){i(l(n.sort(function(t,e){return t.index-e.index}),function(t){return t.value}))})};s.filter=f(x),s.filterSeries=g(x),s.select=s.filter,s.selectSeries=s.filterSeries;var b=function(t,e,r,i){var n=[];e=l(e,function(t,e){return{index:e,value:t}}),t(e,function(t,e){r(t.value,function(r){r||n.push(t),e()})},function(t){i(l(n.sort(function(t,e){return t.index-e.index}),function(t){return t.value}))})};s.reject=f(b),s.rejectSeries=g(b);var _=function(t,e,r,i){t(e,function(t,e){r(t,function(r){r?(i(t),i=function(){}):e()})},function(t){i()})};s.detect=f(_),s.detectSeries=g(_),s.some=function(t,e,r){s.each(t,function(t,i){e(t,function(t){t&&(r(!0),r=function(){}),i()})},function(t){r(!1)})},s.any=s.some,s.every=function(t,e,r){s.each(t,function(t,i){e(t,function(t){t||(r(!1),r=function(){}),i()})},function(t){r(!0)})},s.all=s.every,s.sortBy=function(t,e,r){s.map(t,function(t,r){e(t,function(e,i){e?r(e):r(null,{value:t,criteria:i})})},function(t,e){if(t)return r(t);var i=function(t,e){var r=t.criteria,i=e.criteria;return i>r?-1:r>i?1:0};r(null,l(e.sort(i),function(t){return t.value}))})},s.auto=function(t,e){e=e||function(){};var r=p(t),i=r.length;if(!i)return e();var n={},o=[],a=function(t){o.unshift(t)},l=function(t){for(var e=0;ei;){var o=i+(n-i+1>>>1);r(e,t[o])>=0?i=o:n=o-1}return i}function n(t,e,n,o){return t.started||(t.started=!0),h(e)||(e=[e]),0==e.length?s.setImmediate(function(){t.drain&&t.drain()}):void u(e,function(e){var a={data:e,priority:n,callback:"function"==typeof o?o:null};t.tasks.splice(i(t.tasks,a,r)+1,0,a),t.saturated&&t.tasks.length===t.concurrency&&t.saturated(),s.setImmediate(t.process)})}var o=s.queue(t,e);return o.push=function(t,e,r){n(o,t,e,r)},delete o.unshift,o},s.cargo=function(t,e){var r=!1,i=[],n={tasks:i,payload:e,saturated:null,empty:null,drain:null,drained:!0,push:function(t,r){h(t)||(t=[t]),u(t,function(t){i.push({data:t,callback:"function"==typeof r?r:null}),n.drained=!1,n.saturated&&i.length===e&&n.saturated()}),s.setImmediate(n.process)},process:function o(){if(!r){if(0===i.length)return n.drain&&!n.drained&&n.drain(),void(n.drained=!0);var s="number"==typeof e?i.splice(0,e):i.splice(0,i.length),a=l(s,function(t){return t.data});n.empty&&n.empty(),r=!0,t(a,function(){r=!1;var t=arguments;u(s,function(e){e.callback&&e.callback.apply(null,t)}),o()})}},length:function(){return i.length},running:function(){return r}};return n};var S=function(t){return function(e){var r=Array.prototype.slice.call(arguments,1);e.apply(null,r.concat([function(e){var r=Array.prototype.slice.call(arguments,1);"undefined"!=typeof console&&(e?console.error&&console.error(e):console[t]&&u(r,function(e){console[t](e)}))}]))}};s.log=S("log"),s.dir=S("dir"),s.memoize=function(t,e){var r={},i={};e=e||function(t){return t};var n=function(){var n=Array.prototype.slice.call(arguments),o=n.pop(),a=e.apply(null,n);a in r?s.nextTick(function(){o.apply(null,r[a])}):a in i?i[a].push(o):(i[a]=[o],t.apply(null,n.concat([function(){r[a]=arguments;var t=i[a];delete i[a];for(var e=0,n=t.length;n>e;e++)t[e].apply(null,arguments)}])))};return n.memo=r,n.unmemoized=t,n},s.unmemoize=function(t){return function(){return(t.unmemoized||t).apply(null,arguments)}},s.times=function(t,e,r){for(var i=[],n=0;t>n;n++)i.push(n);return s.map(i,e,r)},s.timesSeries=function(t,e,r){for(var i=[],n=0;t>n;n++)i.push(n);return s.mapSeries(i,e,r)},s.seq=function(){var t=arguments;return function(){var e=this,r=Array.prototype.slice.call(arguments),i=r.pop();s.reduce(t,r,function(t,r,i){r.apply(e,t.concat([function(){var t=arguments[0],e=Array.prototype.slice.call(arguments,1);i(t,e)}]))},function(t,r){i.apply(e,[t].concat(r))})}},s.compose=function(){return s.seq.apply(null,Array.prototype.reverse.call(arguments))};var w=function(t,e){var r=function(){var r=this,i=Array.prototype.slice.call(arguments),n=i.pop();return t(e,function(t,e){t.apply(r,i.concat([e]))},n)};if(arguments.length>2){var i=Array.prototype.slice.call(arguments,2);return r.apply(this,i)}return r};s.applyEach=f(w),s.applyEachSeries=g(w),s.forever=function(t,e){function r(i){if(i){if(e)return e(i);throw i}t(r)}r()},"undefined"!=typeof r&&r.exports?r.exports=s:"undefined"!=typeof t&&t.amd?t([],function(){return s}):n.async=s}()}).call(this,e("_process"))},{_process:18}],28:[function(t,e,r){function i(t,e){a.call(this),e=e||10,this.baseUrl=t||"",this.progress=0,this.loading=!1,this._progressChunk=0,this._beforeMiddleware=[],this._afterMiddleware=[],this._boundLoadResource=this._loadResource.bind(this),this._boundOnLoad=this._onLoad.bind(this),this._buffer=[],this._numToLoad=0,this._queue=n.queue(this._boundLoadResource,e),this.resources={}}var n=t("async"),o=t("url"),s=t("./Resource"),a=t("eventemitter3");i.prototype=Object.create(a.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.add=i.prototype.enqueue=function(t,e,r,i){if(Array.isArray(t)){for(var n=0;n0)if(this.xhrType===i.XHR_RESPONSE_TYPE.TEXT)this.data=t.responseText;else if(this.xhrType===i.XHR_RESPONSE_TYPE.JSON)try{this.data=JSON.parse(t.responseText),this.isJson=!0}catch(r){this.error=new Error("Error trying to parse loaded json:",r)}else if(this.xhrType===i.XHR_RESPONSE_TYPE.DOCUMENT)try{if(window.DOMParser){var n=new DOMParser;this.data=n.parseFromString(t.responseText,"text/xml")}else{var o=document.createElement("div");o.innerHTML=t.responseText,this.data=o}this.isXml=!0}catch(r){this.error=new Error("Error trying to parse loaded xml:",r)}else this.data=t.response||t.responseText;else this.error=new Error("["+t.status+"]"+t.statusText+":"+t.responseURL);this.complete()},i.prototype._determineCrossOrigin=function(t,e){if(0===t.indexOf("data:"))return"";e=e||window.location,u||(u=document.createElement("a")),u.href=t,t=a.parse(u.href);var r=!t.port&&""===e.port||t.port===e.port;return t.hostname===e.hostname&&r&&t.protocol===e.protocol?"":"anonymous"},i.prototype._determineXhrType=function(){return i._xhrTypeMap[this._getExtension()]||i.XHR_RESPONSE_TYPE.TEXT},i.prototype._determineLoadType=function(){return i._loadTypeMap[this._getExtension()]||i.LOAD_TYPE.XHR},i.prototype._getExtension=function(){var t,e=this.url;if(this.isDataUrl){var r=e.indexOf("/");t=e.substring(r+1,e.indexOf(";",r))}else{var i=e.indexOf("?");-1!==i&&(e=e.substring(0,i)),t=e.substring(e.lastIndexOf(".")+1)}return t},i.prototype._getMimeFromXhrType=function(t){switch(t){case i.XHR_RESPONSE_TYPE.BUFFER:return"application/octet-binary";case i.XHR_RESPONSE_TYPE.BLOB:return"application/blob";case i.XHR_RESPONSE_TYPE.DOCUMENT:return"application/xml";case i.XHR_RESPONSE_TYPE.JSON:return"application/json";case i.XHR_RESPONSE_TYPE.DEFAULT:case i.XHR_RESPONSE_TYPE.TEXT:default:return"text/plain"}},i.LOAD_TYPE={XHR:1,IMAGE:2,AUDIO:3,VIDEO:4},i.XHR_READY_STATE={UNSENT:0,OPENED:1,HEADERS_RECEIVED:2,LOADING:3,DONE:4},i.XHR_RESPONSE_TYPE={DEFAULT:"text",BUFFER:"arraybuffer",BLOB:"blob",DOCUMENT:"document",JSON:"json",TEXT:"text"},i._loadTypeMap={gif:i.LOAD_TYPE.IMAGE,png:i.LOAD_TYPE.IMAGE,bmp:i.LOAD_TYPE.IMAGE,jpg:i.LOAD_TYPE.IMAGE,jpeg:i.LOAD_TYPE.IMAGE,tif:i.LOAD_TYPE.IMAGE,tiff:i.LOAD_TYPE.IMAGE,webp:i.LOAD_TYPE.IMAGE,tga:i.LOAD_TYPE.IMAGE},i._xhrTypeMap={xhtml:i.XHR_RESPONSE_TYPE.DOCUMENT,html:i.XHR_RESPONSE_TYPE.DOCUMENT,htm:i.XHR_RESPONSE_TYPE.DOCUMENT,xml:i.XHR_RESPONSE_TYPE.DOCUMENT,tmx:i.XHR_RESPONSE_TYPE.DOCUMENT,tsx:i.XHR_RESPONSE_TYPE.DOCUMENT,svg:i.XHR_RESPONSE_TYPE.DOCUMENT,gif:i.XHR_RESPONSE_TYPE.BLOB,png:i.XHR_RESPONSE_TYPE.BLOB,bmp:i.XHR_RESPONSE_TYPE.BLOB,jpg:i.XHR_RESPONSE_TYPE.BLOB,jpeg:i.XHR_RESPONSE_TYPE.BLOB,tif:i.XHR_RESPONSE_TYPE.BLOB,tiff:i.XHR_RESPONSE_TYPE.BLOB,webp:i.XHR_RESPONSE_TYPE.BLOB,tga:i.XHR_RESPONSE_TYPE.BLOB,json:i.XHR_RESPONSE_TYPE.JSON,text:i.XHR_RESPONSE_TYPE.TEXT,txt:i.XHR_RESPONSE_TYPE.TEXT},i.setExtensionLoadType=function(t,e){o(i._loadTypeMap,t,e)},i.setExtensionXhrType=function(t,e){o(i._xhrTypeMap,t,e)}},{eventemitter3:25,url:23}],30:[function(t,e,r){e.exports={_keyStr:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",encodeBinary:function(t){for(var e,r="",i=new Array(4),n=0,o=0,s=0;n>2,i[1]=(3&e[0])<<4|e[1]>>4,i[2]=(15&e[1])<<2|e[2]>>6,i[3]=63&e[2],s=n-(t.length-1)){case 2:i[3]=64,i[2]=64;break;case 1:i[3]=64}for(o=0;o","Richard Davey "],main:"./src/index.js",homepage:"http://goodboydigital.com/",bugs:"https://github.com/pixijs/pixi.js/issues",license:"MIT",repository:{type:"git",url:"https://github.com/pixijs/pixi.js.git"},scripts:{start:"gulp && gulp watch",test:"gulp && testem ci",build:"gulp",docs:"jsdoc -c ./gulp/util/jsdoc.conf.json -R README.md"},files:["bin/","src/","CONTRIBUTING.md","LICENSE","package.json","README.md"],dependencies:{async:"^1.5.0",brfs:"^1.4.1",earcut:"^2.0.7",eventemitter3:"^1.1.1","object-assign":"^4.0.1","pixi-gl-core":"git+https://github.com/GoodBoyDigital/pixi-gl-core.git","resource-loader":"^1.6.4"},devDependencies:{browserify:"^11.1.0",chai:"^3.2.0",del:"^2.0.2",gulp:"^3.9.0","gulp-cached":"^1.1.0","gulp-concat":"^2.6.0","gulp-debug":"^2.1.0","gulp-header":"^1.7.1","gulp-jshint":"^1.11.2","gulp-mirror":"^0.4.0","gulp-plumber":"^1.0.1","gulp-rename":"^1.2.2","gulp-sourcemaps":"^1.5.2","gulp-uglify":"^1.4.1","gulp-util":"^3.0.6","jaguarjs-jsdoc":"git+https://github.com/davidshimjs/jaguarjs-jsdoc.git",jsdoc:"^3.3.2","jshint-summary":"^0.4.0",minimist:"^1.2.0",mocha:"^2.3.2","require-dir":"^0.3.0","run-sequence":"^1.1.2",testem:"^0.9.4","vinyl-buffer":"^1.0.0","vinyl-source-stream":"^1.1.0",watchify:"^3.4.0"},browserify:{transform:["brfs"]}}},{}],35:[function(t,e,r){function i(t){var e=document.createElement("div");e.style.width="100px",e.style.height="100px",e.style.position="absolute",e.style.top=0,e.style.left=0,e.style.zIndex=2,this.div=e,this.pool=[],this.renderId=0,this.debug=!1,this.renderer=t,this.children=[],this._onKeyDown=this._onKeyDown.bind(this),this._onMouseMove=this._onMouseMove.bind(this),this.isActive=!1,window.addEventListener("keydown",this._onKeyDown,!1)}var n=t("../core");Object.assign(n.DisplayObject.prototype,t("./accessibleTarget")),i.prototype.constructor=i,e.exports=i,i.prototype.activate=function(){this.isActive||(this.isActive=!0,window.document.addEventListener("mousemove",this._onMouseMove,!0),window.removeEventListener("keydown",this._onKeyDown,!1),this.renderer.on("postrender",this.update,this),this.renderer.view.parentNode.appendChild(this.div))},i.prototype.deactivate=function(){this.isActive&&(this.isActive=!1,window.document.removeEventListener("mousemove",this._onMouseMove),window.addEventListener("keydown",this._onKeyDown,!1),this.renderer.off("postrender",this.update),this.div.parentNode.removeChild(this.div))},i.prototype.updateAccessibleObjects=function(t){if(t.visible){t.accessible&&t.interactive&&(t._accessibleActive||this.addChild(t),t.renderId=this.renderId);for(var e=t.children,r=e.length-1;r>=0;r--)this.updateAccessibleObjects(e[r])}},i.prototype.update=function(){this.updateAccessibleObjects(this.renderer._lastObjectRendered);var t=this.renderer.view.getBoundingClientRect(),e=t.width/this.renderer.width,r=t.height/this.renderer.height,i=this.div;i.style.left=t.left+"px",i.style.top=t.top+"px",i.style.width=this.renderer.width+"px",i.style.height=this.renderer.height+"px";for(var o=0;othis.renderer.width&&(t.width=this.renderer.width-t.x),t.y+t.height>this.renderer.height&&(t.height=this.renderer.height-t.y)},i.prototype.addChild=function(t){var e=this.pool.pop();e||(e=document.createElement("button"),e.style.width="100px",e.style.height="100px",e.style.backgroundColor=this.debug?"rgba(255,0,0,0.5)":"transparent",e.style.position="absolute",e.style.zIndex=2,e.style.borderStyle="none",e.addEventListener("click",this._onClick.bind(this)),e.addEventListener("focus",this._onFocus.bind(this)),e.addEventListener("focusout",this._onFocusOut.bind(this))),e.title=t.accessibleTitle||"displayObject "+this.tabIndex,t._accessibleActive=!0,t._accessibleDiv=e,e.displayObject=t,this.children.push(t),this.div.appendChild(t._accessibleDiv),t._accessibleDiv.tabIndex=t.tabIndex},i.prototype._onClick=function(t){var e=this.renderer.plugins.interaction;e.dispatchEvent(t.target.displayObject,"click",e.eventData)},i.prototype._onFocus=function(t){var e=this.renderer.plugins.interaction;e.dispatchEvent(t.target.displayObject,"mouseover",e.eventData)},i.prototype._onFocusOut=function(t){var e=this.renderer.plugins.interaction;e.dispatchEvent(t.target.displayObject,"mouseout",e.eventData)},i.prototype._onKeyDown=function(t){9===t.keyCode&&this.activate()},i.prototype._onMouseMove=function(){this.deactivate()},i.prototype.destroy=function(){this.div=null;for(var t=0;t1)for(var r=0;e>r;r++)this.addChild(arguments[r]);else t.parent&&t.parent.removeChild(t),t.parent=this,this.children.push(t),this.onChildrenChange(this.children.length-1),t.emit("added",this);return t},i.prototype.addChildAt=function(t,e){if(e>=0&&e<=this.children.length)return t.parent&&t.parent.removeChild(t),t.parent=this,this.children.splice(e,0,t),this.onChildrenChange(e),t.emit("added",this),t;throw new Error(t+"addChildAt: The index "+e+" supplied is out of bounds "+this.children.length)},i.prototype.swapChildren=function(t,e){if(t!==e){var r=this.getChildIndex(t),i=this.getChildIndex(e);if(0>r||0>i)throw new Error("swapChildren: Both the supplied DisplayObjects must be children of the caller.");this.children[r]=e,this.children[i]=t,this.onChildrenChange(i>r?r:i)}},i.prototype.getChildIndex=function(t){var e=this.children.indexOf(t);if(-1===e)throw new Error("The supplied DisplayObject must be a child of the caller");return e},i.prototype.setChildIndex=function(t,e){if(0>e||e>=this.children.length)throw new Error("The supplied index is out of bounds");var r=this.getChildIndex(t);o.removeItems(this.children,r,1),this.children.splice(e,0,t),this.onChildrenChange(e)},i.prototype.getChildAt=function(t){if(0>t||t>=this.children.length)throw new Error("getChildAt: Supplied index "+t+" does not exist in the child list, or the supplied DisplayObject is not a child of the caller");return this.children[t]},i.prototype.removeChild=function(t){var e=arguments.length;if(e>1)for(var r=0;e>r;r++)this.removeChild(arguments[r]);else{var i=this.children.indexOf(t);if(-1===i)return;t.parent=null,o.removeItems(this.children,i,1),this.onChildrenChange(i),t.emit("removed",this)}return t},i.prototype.removeChildAt=function(t){var e=this.getChildAt(t);return e.parent=null,o.removeItems(this.children,t,1),this.onChildrenChange(t),e.emit("removed",this),e},i.prototype.removeChildren=function(t,e){var r,i,n=t||0,o="number"==typeof e?e:this.children.length,s=o-n;if(s>0&&o>=s){for(r=this.children.splice(n,s),i=0;it;++t)this.children[t].updateTransform();this.dirtyTransform=!1}},i.prototype.containerUpdateTransform=i.prototype.updateTransform,i.prototype.getBounds=function(){if(!this._currentBounds){if(0===this.children.length)return n.Rectangle.EMPTY;for(var t,e,r,i=1/0,o=1/0,s=-(1/0),a=-(1/0),h=!1,u=0,l=this.children.length;l>u;++u){var c=this.children[u];c.visible&&(h=!0,t=this.children[u].getBounds(),i=ie?s:e,a=a>r?a:r)}if(!h)return n.Rectangle.EMPTY;var p=this._bounds;p.x=i,p.y=o,p.width=s-i,p.height=a-o,this._currentBounds=p}return this._currentBounds},i.prototype.containerGetBounds=i.prototype.getBounds,i.prototype.getLocalBounds=function(){var t=this.worldTransform;this.worldTransform=n.Matrix.IDENTITY;for(var e=0,r=this.children.length;r>e;++e)this.children[e].updateTransform();return this.worldTransform=t,this._currentBounds=null,this.getBounds(n.Matrix.IDENTITY)},i.prototype.renderWebGL=function(t){if(this.visible&&!(this.worldAlpha<=0)&&this.renderable){var e,r;if(this._mask||this._filters){for(t.currentRenderer.flush(),this._filters&&this._filters.length&&t.filterManager.pushFilter(this,this._filters),this._mask&&t.maskManager.pushMask(this,this._mask),t.currentRenderer.start(),this._renderWebGL(t),e=0,r=this.children.length;r>e;e++)this.children[e].renderWebGL(t);t.currentRenderer.flush(),this._mask&&t.maskManager.popMask(this,this._mask),this._filters&&t.filterManager.popFilter(),t.currentRenderer.start()}else for(this._renderWebGL(t),e=0,r=this.children.length;r>e;++e)this.children[e].renderWebGL(t)}},i.prototype._renderWebGL=function(t){},i.prototype._renderCanvas=function(t){},i.prototype.renderCanvas=function(t){if(this.visible&&!(this.alpha<=0)&&this.renderable){this._mask&&t.maskManager.pushMask(this._mask,t),this._renderCanvas(t);for(var e=0,r=this.children.length;r>e;++e)this.children[e].renderCanvas(t);this._mask&&t.maskManager.popMask(t)}},i.prototype.destroy=function(t){if(s.prototype.destroy.call(this),t)for(var e=0,r=this.children.length;r>e;++e)this.children[e].destroy(t);this.removeChildren(),this.children=null}},{"../math":55,"../textures/RenderTexture":98,"../utils":105,"./DisplayObject":40}],40:[function(t,e,r){function i(){s.call(this),this.position=new n.Point,this._position=new u(this),this.scale=new n.Point(1,1),this.pivot=new n.Point(0,0),this.skew=new n.Point(0,0),this._rotation=0,this.alpha=1,this.visible=!0,this.renderable=!0,this.parent=null,this.worldAlpha=1,this.worldTransform=new n.Matrix,this.localTransform=new n.Matrix,this.filterArea=null,this._sr=0,this._cr=1,this._bounds=new n.Rectangle(0,0,1,1),this._currentBounds=null,this._mask=null,this.dirtyTransform=!0}var n=t("../math"),o=t("../textures/RenderTexture"),s=t("eventemitter3"),a=(t("../const"),new n.Matrix),h={worldTransform:new n.Matrix,worldAlpha:1,children:[]};i.prototype=Object.create(s.prototype),i.prototype.constructor=i,e.exports=i;var u=function(t){this.doc=t,this.x=0,this.y=0};Object.defineProperties(u.prototype,{x:{get:function(){return this.doc.position.x},set:function(t){this.doc.position.x=t,this.doc.dirtyTransform=!0}},y:{get:function(){return this.doc.posiiton.y},set:function(t){this.doc.position.y=t,this.doc.dirtyTransform=!0}}}),Object.defineProperties(i.prototype,{x:{get:function(){return this.position.x},set:function(t){this.position.x=t,this.dirtyTransform=!0}},y:{get:function(){return this.position.y},set:function(t){this.position.y=t,this.dirtyTransform=!0}},scaleX:{get:function(){return this.scale.x},set:function(t){this.scale.x=t,this.dirtyTransform=!0}},scaleY:{get:function(){return this.scale.y},set:function(t){this.scale.y=t,this.dirtyTransform=!0}},rotation:{get:function(){return this._rotation},set:function(t){this._rotation=t,this.dirtyTransform=!0,this._sr=Math.sin(t),this._cr=Math.cos(t)}},scaleY:{get:function(){return this.scale.y},set:function(t){this.scale.y=t,this.dirtyTransform=!0}},worldVisible:{get:function(){var t=this;do{if(!t.visible)return!1;t=t.parent}while(t);return!0}},mask:{get:function(){return this._mask},set:function(t){this._mask&&(this._mask.renderable=!0),this._mask=t,this._mask&&(this._mask.renderable=!1)}},filters:{get:function(){return this._filters&&this._filters.slice()},set:function(t){this._filters=t&&t.slice()}}}),i.prototype.updateTransform=function(){var t=this.parent.worldTransform,e=this.worldTransform,r=this.localTransform;this.dirtyTransform&&(r.a=this._cr*this.scale.x,r.b=this._sr*this.scale.x,r.c=-this._sr*this.scale.y,r.d=this._cr*this.scale.y,r.tx=this.position.x-(this.pivot.x*r.a+this.pivot.y*r.c),r.ty=this.position.y-(this.pivot.x*r.b+this.pivot.y*r.d)),(this.dirtyTransform||this.parent.dirtyTransform)&&(e.a=r.a*t.a+r.b*t.c,e.b=r.a*t.b+r.b*t.d,e.c=r.c*t.a+r.d*t.c,e.d=r.c*t.b+r.d*t.d,e.tx=r.tx*t.a+r.ty*t.c+t.tx,e.ty=r.tx*t.b+r.ty*t.d+t.ty,this._currentBounds=null),this.worldAlpha=this.alpha*this.parent.worldAlpha},i.prototype.displayObjectUpdateTransform=i.prototype.updateTransform,i.prototype.getBounds=function(t){return n.Rectangle.EMPTY},i.prototype.getLocalBounds=function(){return this.getBounds(n.Matrix.IDENTITY)},i.prototype.toGlobal=function(t){return this.parent?this.displayObjectUpdateTransform():(this.parent=h,this.displayObjectUpdateTransform(),this.parent=null),this.worldTransform.apply(t)},i.prototype.toLocal=function(t,e,r){return e&&(t=e.toGlobal(t)),this.parent?this.displayObjectUpdateTransform():(this.parent=h,this.displayObjectUpdateTransform(),this.parent=null),this.worldTransform.applyInverse(t,r)},i.prototype.renderWebGL=function(t){},i.prototype.renderCanvas=function(t){},i.prototype.generateTexture=function(t,e,r){var i=this.getLocalBounds(),n=new o(t,0|i.width,0|i.height,e,r);return a.tx=-i.x,a.ty=-i.y,n.render(this,a),n},i.prototype.setParent=function(t){if(!t||!t.addChild)throw new Error("setParent: Argument must be a Container");return t.addChild(this),t},i.prototype.setTransform=function(t,e,r,i,n,o,s,a,h){return this.position.x=t||0,this.position.y=e||0,this.scale.x=r?r:1,this.scale.y=i?i:1,this.rotation=n||0,this.skew.x=o||0,this.skew.y=s||0,this.pivot.x=a||0,this.pivot.y=h||0,this.dirtyTransform=!0,this},i.prototype.destroy=function(){this.position=null,this.scale=null,this.pivot=null,this.skew=null,this.parent=null,this._bounds=null,this._currentBounds=null,this._mask=null,this.worldTransform=null,this.filterArea=null}},{"../const":38,"../math":55,"../textures/RenderTexture":98,eventemitter3:25}],41:[function(t,e,r){function i(){n.call(this),this.fillAlpha=1,this.lineWidth=0,this.lineColor=0,this.graphicsData=[],this.tint=16777215,this._prevTint=16777215,this.blendMode=l.BLEND_MODES.NORMAL,this.currentPath=null,this._webGL={},this.isMask=!1,this.boundsPadding=0,this._localBounds=new u.Rectangle(0,0,1,1),this.dirty=!0,this.glDirty=!1,this.boundsDirty=!0,this.cachedSpriteDirty=!1}var n=t("../display/Container"),o=t("../textures/Texture"),s=t("../renderers/canvas/utils/CanvasBuffer"),a=t("../renderers/canvas/utils/CanvasGraphics"),h=t("./GraphicsData"),u=t("../math"),l=t("../const"),c=new u.Point;i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.clone=function(){var t=new i;t.renderable=this.renderable,t.fillAlpha=this.fillAlpha,t.lineWidth=this.lineWidth,t.lineColor=this.lineColor,t.tint=this.tint,t.blendMode=this.blendMode,t.isMask=this.isMask,t.boundsPadding=this.boundsPadding,t.dirty=!0,t.glDirty=!0,t.cachedSpriteDirty=this.cachedSpriteDirty;for(var e=0;e=c;++c)l=c/s,n=h+(t-h)*l,o=u+(e-u)*l,a.push(n+(t+(r-t)*l-n)*l,o+(e+(i-e)*l-o)*l);return this.dirty=this.boundsDirty=!0,this},i.prototype.bezierCurveTo=function(t,e,r,i,n,o){this.currentPath?0===this.currentPath.shape.points.length&&(this.currentPath.shape.points=[0,0]):this.moveTo(0,0);for(var s,a,h,u,l,c=20,p=this.currentPath.shape.points,d=p[p.length-2],f=p[p.length-1],v=0,g=1;c>=g;++g)v=g/c,s=1-v,a=s*s,h=a*s,u=v*v,l=u*v,p.push(h*d+3*a*v*t+3*s*u*r+l*n,h*f+3*a*v*e+3*s*u*i+l*o);return this.dirty=this.boundsDirty=!0,this},i.prototype.arcTo=function(t,e,r,i,n){this.currentPath?0===this.currentPath.shape.points.length&&this.currentPath.shape.points.push(t,e):this.moveTo(t,e);var o=this.currentPath.shape.points,s=o[o.length-2],a=o[o.length-1],h=a-e,u=s-t,l=i-e,c=r-t,p=Math.abs(h*c-u*l);if(1e-8>p||0===n)(o[o.length-2]!==t||o[o.length-1]!==e)&&o.push(t,e);else{var d=h*h+u*u,f=l*l+c*c,v=h*l+u*c,g=n*Math.sqrt(d)/p,m=n*Math.sqrt(f)/p,y=g*v/d,x=m*v/f,b=g*c+m*u,_=g*l+m*h,T=u*(m+y),E=h*(m+y),S=c*(g+x),w=l*(g+x),C=Math.atan2(E-_,T-b),A=Math.atan2(w-_,S-b);this.arc(b+t,_+e,n,C,A,u*l>c*h)}return this.dirty=this.boundsDirty=!0,this},i.prototype.arc=function(t,e,r,i,n,o){if(o=o||!1,i===n)return this;!o&&i>=n?n+=2*Math.PI:o&&n>=i&&(i+=2*Math.PI);var s=o?-1*(i-n):n-i,a=40*Math.ceil(Math.abs(s)/(2*Math.PI));if(0===s)return this;var h=t+Math.cos(i)*r,u=e+Math.sin(i)*r;this.currentPath?this.currentPath.shape.points.push(h,u):this.moveTo(h,u);for(var l=this.currentPath.shape.points,c=s/(2*a),p=2*c,d=Math.cos(c),f=Math.sin(c),v=a-1,g=v%1/v,m=0;v>=m;m++){var y=m+g*m,x=c+i+p*y,b=Math.cos(x),_=-Math.sin(x);l.push((d*b+f*_)*r+t,(d*-_+f*b)*r+e)}return this.dirty=this.boundsDirty=!0,this},i.prototype.beginFill=function(t,e){return this.filling=!0,this.fillColor=t||0,this.fillAlpha=void 0===e?1:e,this.currentPath&&this.currentPath.shape.points.length<=2&&(this.currentPath.fill=this.filling,this.currentPath.fillColor=this.fillColor,this.currentPath.fillAlpha=this.fillAlpha),this},i.prototype.endFill=function(){return this.filling=!1,this.fillColor=null,this.fillAlpha=1,this},i.prototype.drawRect=function(t,e,r,i){return this.drawShape(new u.Rectangle(t,e,r,i)),this},i.prototype.drawRoundedRect=function(t,e,r,i,n){return this.drawShape(new u.RoundedRectangle(t,e,r,i,n)),this},i.prototype.drawCircle=function(t,e,r){return this.drawShape(new u.Circle(t,e,r)),this},i.prototype.drawEllipse=function(t,e,r,i){return this.drawShape(new u.Ellipse(t,e,r,i)),this},i.prototype.drawPolygon=function(t){var e=t,r=!0;if(e instanceof u.Polygon&&(r=e.closed,e=e.points),!Array.isArray(e)){e=new Array(arguments.length);for(var i=0;ig?g:S,S=S>y?y:S,S=S>b?b:S,w=w>m?m:w,w=w>x?x:w,w=w>_?_:w,T=g>T?g:T,T=y>T?y:T,T=b>T?b:T,E=m>E?m:E,E=x>E?x:E,E=_>E?_:E,this._bounds.x=S,this._bounds.width=T-S,this._bounds.y=w,this._bounds.height=E-w,this._currentBounds=this._bounds}return this._currentBounds},i.prototype.containsPoint=function(t){this.worldTransform.applyInverse(t,c); +for(var e=this.graphicsData,r=0;rs?s:t,e=s+h>e?s+h:e,r=r>a?a:r,i=a+u>i?a+u:i;else if(d===l.SHAPES.CIRC)s=n.x,a=n.y,h=n.radius+f/2,u=n.radius+f/2,t=t>s-h?s-h:t,e=s+h>e?s+h:e,r=r>a-u?a-u:r,i=a+u>i?a+u:i;else if(d===l.SHAPES.ELIP)s=n.x,a=n.y,h=n.width+f/2,u=n.height+f/2,t=t>s-h?s-h:t,e=s+h>e?s+h:e,r=r>a-u?a-u:r,i=a+u>i?a+u:i;else{o=n.points;for(var v=0;vs-f?s-f:t,e=s+f>e?s+f:e,r=r>a-f?a-f:r,i=a+f>i?a+f:i}}else t=0,e=0,r=0,i=0;var g=this.boundsPadding;this._localBounds.x=t-g,this._localBounds.width=e-t+2*g,this._localBounds.y=r-g,this._localBounds.height=i-r+2*g},i.prototype.drawShape=function(t){this.currentPath&&this.currentPath.shape.points.length<=2&&this.graphicsData.pop(),this.currentPath=null;var e=new h(this.lineWidth,this.lineColor,this.lineAlpha,this.fillColor,this.fillAlpha,this.filling,t);return this.graphicsData.push(e),e.type===l.SHAPES.POLY&&(e.shape.closed=e.shape.closed||this.filling,this.currentPath=e),this.dirty=this.boundsDirty=!0,e},i.prototype.destroy=function(){n.prototype.destroy.apply(this,arguments);for(var t=0;ts;s++)e=o.data[s],1===o.data[s].mode||(shader=this.primitiveShader,r.bindShader(shader),shader.uniforms.translationMatrix=t.worldTransform.toArray(!0),shader.uniforms.tint=n.hex2rgb(t.tint),shader.uniforms.alpha=t.worldAlpha,i.bindBuffer(i.ARRAY_BUFFER,e.buffer),shader=this.primitiveShader,shader.attributes.aVertexPosition.pointer(i.FLOAT,!1,24,0),shader.attributes.aColor.pointer(i.FLOAT,!1,24,8),i.enableVertexAttribArray(shader.attributes.aVertexPosition.location),i.enableVertexAttribArray(shader.attributes.aColor.location),i.bindBuffer(i.ELEMENT_ARRAY_BUFFER,e.indexBuffer),i.drawElements(i.TRIANGLE_STRIP,e.indices.length,i.UNSIGNED_SHORT,0)),r.drawCount++},i.prototype.updateGraphics=function(t){var e=this.renderer.gl,r=t._webGL[e.id];r||(r=t._webGL[e.id]={lastIndex:0,data:[],gl:e}),t.dirty=!1;var i;if(t.clearDirty){for(t.clearDirty=!1,i=0;i=6)if(a.points.length<2*this.maximumSimplePolySize){s=this.switchMode(r,0);var h=buildPoly(a,s);h||(s=this.switchMode(r,1),buildComplexPoly(a,s))}else s=this.switchMode(r,1),buildComplexPoly(a,s);a.lineWidth>0&&(s=this.switchMode(r,0),l(a,s))}else s=this.switchMode(r,0),a.type===o.SHAPES.RECT?buildRectangle(a,s):a.type===o.SHAPES.CIRC||a.type===o.SHAPES.ELIP?buildCircle(a,s):a.type===o.SHAPES.RREC&&buildRoundedRectangle(a,s);r.lastIndex++}for(i=0;i32e4||r.mode!==e||1===e)&&(r=this.graphicsDataPool.pop()||new h(t.gl),r.mode=e,t.data.push(r))):(r=this.graphicsDataPool.pop()||new h(t.gl),r.mode=e,t.data.push(r)),r.dirty=!0,r}},{"../../const":38,"../../math":55,"../../renderers/webgl/WebGLRenderer":72,"../../renderers/webgl/utils/ObjectRenderer":87,"../../utils":105,"./WebGLGraphicsData":44,"./shaders/PrimitiveShader":45,"./utils/buildCircle":46,"./utils/buildComplexPoly":47,"./utils/buildLine":48,"./utils/buildPoly":49,"./utils/buildRectangle":50,"./utils/buildRoundedRectangle":51,earcut:24}],44:[function(t,e,r){function i(t){this.gl=t,this.color=[0,0,0],this.points=[],this.indices=[],this.buffer=t.createBuffer(),this.indexBuffer=t.createBuffer(),this.mode=1,this.alpha=1,this.dirty=!0,this.glPoints=null,this.glIndices=null}i.prototype.constructor=i,e.exports=i,i.prototype.reset=function(){this.points.length=0,this.indices.length=0},i.prototype.upload=function(){var t=this.gl;this.glPoints=new Float32Array(this.points),t.bindBuffer(t.ARRAY_BUFFER,this.buffer),t.bufferData(t.ARRAY_BUFFER,this.glPoints,t.STATIC_DRAW),this.glIndices=new Uint16Array(this.indices),t.bindBuffer(t.ELEMENT_ARRAY_BUFFER,this.indexBuffer),t.bufferData(t.ELEMENT_ARRAY_BUFFER,this.glIndices,t.STATIC_DRAW),this.dirty=!1},i.prototype.destroy=function(){this.color=null,this.points=null,this.indices=null,this.gl.deleteBuffer(this.buffer),this.gl.deleteBuffer(this.indexBuffer),this.gl=null,this.buffer=null,this.indexBuffer=null,this.glPoints=null,this.glIndices=null}},{}],45:[function(t,e,r){function i(t){n.call(this,t,["attribute vec2 aVertexPosition;","attribute vec4 aColor;","uniform mat3 translationMatrix;","uniform mat3 projectionMatrix;","uniform float alpha;","uniform float flipY;","uniform vec3 tint;","varying vec4 vColor;","void main(void){"," gl_Position = vec4((projectionMatrix * translationMatrix * vec3(aVertexPosition, 1.0)).xy, 0.0, 1.0);"," vColor = aColor * vec4(tint * alpha, alpha);","}"].join("\n"),["precision mediump float;","varying vec4 vColor;","void main(void){"," gl_FragColor = vColor;","}"].join("\n"))}var n=t("pixi-gl-core").GLShader;i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i},{"pixi-gl-core":1}],46:[function(t,e,r){var i=t("./buildLine"),n=t("../../../utils"),o=function(t,e){var r,o,s=t.shape,a=s.x,h=s.y;t.type===CONST.SHAPES.CIRC?(r=s.radius,o=s.radius):(r=s.width,o=s.height);var u=Math.floor(30*Math.sqrt(s.radius))||Math.floor(15*Math.sqrt(s.width+s.height)),l=2*Math.PI/u,c=0;if(t.fill){var p=n.hex2rgb(t.fillColor),d=t.fillAlpha,f=p[0]*d,v=p[1]*d,g=p[2]*d,m=e.points,y=e.indices,x=m.length/6;for(y.push(x),c=0;u+1>c;c++)m.push(a,h,f,v,g,d),m.push(a+Math.sin(l*c)*r,h+Math.cos(l*c)*o,f,v,g,d),y.push(x++,x++);y.push(x-1)}if(t.lineWidth){var b=t.points;for(t.points=[],c=0;u+1>c;c++)t.points.push(a+Math.sin(l*c)*r,h+Math.cos(l*c)*o);i(t,e),t.points=b}};e.exports=o},{"../../../utils":105,"./buildLine":48}],47:[function(t,e,r){var i=(t("./buildLine"),t("../../../utils")),n=function(t,e){var r=t.points.slice();if(!(r.length<6)){var n=e.indices;e.points=r,e.alpha=t.fillAlpha,e.color=i.hex2rgb(t.fillColor);for(var o,s,a=1/0,h=-(1/0),u=1/0,l=-(1/0),c=0;co?o:a,h=o>h?o:h,u=u>s?s:u,l=s>l?s:l;r.push(a,u,h,u,h,l,a,l);var p=r.length/2;for(c=0;p>c;c++)n.push(c)}};e.exports=n},{"../../../utils":105,"./buildLine":48}],48:[function(t,e,r){var i=t("../../../math"),n=t("../../../utils"),o=function(t,e){var r=0,o=t.points;if(0!==o.length){var s=new i.Point(o[0],o[1]),a=new i.Point(o[o.length-2],o[o.length-1]);if(s.x===a.x&&s.y===a.y){o=o.slice(),o.pop(),o.pop(),a=new i.Point(o[o.length-2],o[o.length-1]);var h=a.x+.5*(s.x-a.x),u=a.y+.5*(s.y-a.y);o.unshift(h,u),o.push(h,u)}var l,c,p,d,f,v,g,m,y,x,b,_,T,E,S,w,C,A,M,R,O,P,D,F=e.points,L=e.indices,B=o.length/2,I=o.length,N=F.length/6,U=t.lineWidth/2,k=n.hex2rgb(t.lineColor),j=t.lineAlpha,G=k[0]*j,X=k[1]*j,Y=k[2]*j;for(p=o[0],d=o[1],f=o[2],v=o[3],y=-(d-v),x=p-f,D=Math.sqrt(y*y+x*x),y/=D,x/=D,y*=U,x*=U,F.push(p-y,d-x,G,X,Y,j),F.push(p+y,d+x,G,X,Y,j),r=1;B-1>r;r++)p=o[2*(r-1)],d=o[2*(r-1)+1],f=o[2*r],v=o[2*r+1],g=o[2*(r+1)],m=o[2*(r+1)+1],y=-(d-v),x=p-f,D=Math.sqrt(y*y+x*x),y/=D,x/=D,y*=U,x*=U,b=-(v-m),_=f-g,D=Math.sqrt(b*b+_*_),b/=D,_/=D,b*=U,_*=U,S=-x+d-(-x+v),w=-y+f-(-y+p),C=(-y+p)*(-x+v)-(-y+f)*(-x+d),A=-_+m-(-_+v),M=-b+f-(-b+g),R=(-b+g)*(-_+v)-(-b+f)*(-_+m),O=S*M-A*w,Math.abs(O)<.1?(O+=10.1,F.push(f-y,v-x,G,X,Y,j),F.push(f+y,v+x,G,X,Y,j)):(l=(w*R-M*C)/O,c=(A*C-S*R)/O,P=(l-f)*(l-f)+(c-v)*(c-v),P>19600?(T=y-b,E=x-_,D=Math.sqrt(T*T+E*E),T/=D,E/=D,T*=U,E*=U,F.push(f-T,v-E),F.push(G,X,Y,j),F.push(f+T,v+E),F.push(G,X,Y,j),F.push(f-T,v-E),F.push(G,X,Y,j),I++):(F.push(l,c),F.push(G,X,Y,j),F.push(f-(l-f),v-(c-v)),F.push(G,X,Y,j)));for(p=o[2*(B-2)],d=o[2*(B-2)+1],f=o[2*(B-1)],v=o[2*(B-1)+1],y=-(d-v),x=p-f,D=Math.sqrt(y*y+x*x),y/=D,x/=D,y*=U,x*=U,F.push(f-y,v-x),F.push(G,X,Y,j),F.push(f+y,v+x),F.push(G,X,Y,j),L.push(N),r=0;I>r;r++)L.push(N++);L.push(N-1)}};e.exports=o},{"../../../math":55,"../../../utils":105}],49:[function(t,e,r){var i=t("../../../utils"),n=function(t,e){var r=t.points;if(!(r.length<6)){var n=e.points,o=e.indices,s=r.length/2,a=i.hex2rgb(t.fillColor),h=t.fillAlpha,u=a[0]*h,l=a[1]*h,c=a[2]*h,p=earcut(r,null,2);if(!p)return!1;var d=n.length/6,f=0;for(f=0;ff;f++)n.push(r[2*f],r[2*f+1],u,l,c,h);return!0}};e.exports=n},{"../../../utils":105}],50:[function(t,e,r){var i=t("./buildLine"),n=t("../../../utils"),o=function(t,e){var r=t.shape,o=r.x,s=r.y,a=r.width,h=r.height;if(t.fill){var u=n.hex2rgb(t.fillColor),l=t.fillAlpha,c=u[0]*l,p=u[1]*l,d=u[2]*l,f=e.points,v=e.indices,g=f.length/6;f.push(o,s),f.push(c,p,d,l),f.push(o+a,s),f.push(c,p,d,l),f.push(o,s+h),f.push(c,p,d,l),f.push(o+a,s+h),f.push(c,p,d,l),v.push(g,g,g+1,g+2,g+3,g+3)}if(t.lineWidth){var m=t.points;t.points=[o,s,o+a,s,o+a,s+h,o,s+h,o,s],i(t,e),t.points=m}};e.exports=o},{"../../../utils":105,"./buildLine":48}],51:[function(t,e,r){var i=(t("./buildLine"),t("../../../utils"));buildRoundedRectangle=function(t,e){var r=t.shape,n=r.x,o=r.y,s=r.width,a=r.height,h=r.radius,u=[];if(u.push(n,o+h),this.quadraticBezierCurve(n,o+a-h,n,o+a,n+h,o+a,u),this.quadraticBezierCurve(n+s-h,o+a,n+s,o+a,n+s,o+a-h,u),this.quadraticBezierCurve(n+s,o+h,n+s,o,n+s-h,o,u),this.quadraticBezierCurve(n+h,o,n,o,n,o+h+1e-10,u),t.fill){var l=i.hex2rgb(t.fillColor),c=t.fillAlpha,p=l[0]*c,d=l[1]*c,f=l[2]*c,v=e.points,g=e.indices,m=v.length/6,y=earcut(u,null,2),x=0;for(x=0;x=m;m++)g=m/f,h=a(t,r,g),u=a(e,i,g),l=a(r,n,g),c=a(i,o,g),p=a(h,l,g),d=a(u,c,g),v.push(p,d);return v},e.exports=buildRoundedRectangle},{"../../../utils":105,"./buildLine":48}],52:[function(t,e,r){var i=e.exports=Object.assign(t("./const"),t("./math"),{utils:t("./utils"),ticker:t("./ticker"),DisplayObject:t("./display/DisplayObject"),Container:t("./display/Container"),Sprite:t("./sprites/Sprite"),ParticleContainer:t("./particles/ParticleContainer"),SpriteRenderer:t("./sprites/webgl/SpriteRenderer"),ParticleRenderer:t("./particles/webgl/ParticleRenderer"),Text:t("./text/Text"),Graphics:t("./graphics/Graphics"),GraphicsData:t("./graphics/GraphicsData"),GraphicsRenderer:t("./graphics/webgl/GraphicsRenderer"),Texture:t("./textures/Texture"),BaseTexture:t("./textures/BaseTexture"),RenderTexture:t("./textures/RenderTexture"),VideoBaseTexture:t("./textures/VideoBaseTexture"),TextureUvs:t("./textures/TextureUvs"),CanvasRenderer:t("./renderers/canvas/CanvasRenderer"),CanvasGraphics:t("./renderers/canvas/utils/CanvasGraphics"),CanvasBuffer:t("./renderers/canvas/utils/CanvasBuffer"),WebGLRenderer:t("./renderers/webgl/WebGLRenderer"),WebGLManager:t("./renderers/webgl/managers/WebGLManager"),ShaderManager:t("./renderers/webgl/managers/ShaderManager"),Shader:t("./renderers/webgl/shaders/Shader"),ObjectRenderer:t("./renderers/webgl/utils/ObjectRenderer"),RenderTarget:t("./renderers/webgl/utils/RenderTarget"),AbstractFilter:t("./renderers/webgl/filters/AbstractFilter"),FXAAFilter:t("./renderers/webgl/filters/FXAAFilter"),SpriteMaskFilter:t("./renderers/webgl/filters/SpriteMaskFilter"),glCore:t("pixi-gl-core"),autoDetectRenderer:function(t,e,r,n){return t=t||800,e=e||600,!n&&i.utils.isWebGLSupported()?new i.WebGLRenderer(t,e,r):new i.CanvasRenderer(t,e,r)}})},{"./const":38,"./display/Container":39,"./display/DisplayObject":40,"./graphics/Graphics":41,"./graphics/GraphicsData":42,"./graphics/webgl/GraphicsRenderer":43,"./math":55,"./particles/ParticleContainer":61,"./particles/webgl/ParticleRenderer":63,"./renderers/canvas/CanvasRenderer":66,"./renderers/canvas/utils/CanvasBuffer":67,"./renderers/canvas/utils/CanvasGraphics":68,"./renderers/webgl/WebGLRenderer":72,"./renderers/webgl/filters/AbstractFilter":73,"./renderers/webgl/filters/FXAAFilter":74,"./renderers/webgl/filters/SpriteMaskFilter":75,"./renderers/webgl/managers/ShaderManager":79,"./renderers/webgl/managers/WebGLManager":81,"./renderers/webgl/shaders/Shader":84,"./renderers/webgl/utils/ObjectRenderer":87,"./renderers/webgl/utils/RenderTarget":89,"./sprites/Sprite":93,"./sprites/webgl/SpriteRenderer":94,"./text/Text":96,"./textures/BaseTexture":97,"./textures/RenderTexture":98,"./textures/Texture":99,"./textures/TextureUvs":100,"./textures/VideoBaseTexture":101,"./ticker":103,"./utils":105,"pixi-gl-core":1}],53:[function(t,e,r){function i(){this.a=1,this.b=0,this.c=0,this.d=1,this.tx=0,this.ty=0}var n=t("./Point");i.prototype.constructor=i,e.exports=i,i.prototype.fromArray=function(t){this.a=t[0],this.b=t[1],this.c=t[3],this.d=t[4],this.tx=t[2],this.ty=t[5]},i.prototype.set=function(t,e,r,i,n,o){return this.a=t,this.b=e,this.c=r,this.d=i,this.tx=n,this.ty=o,this},i.prototype.toArray=function(t,e){this.array||(this.array=new Float32Array(9));var r=e||this.array;return t?(r[0]=this.a,r[1]=this.b,r[2]=0,r[3]=this.c,r[4]=this.d,r[5]=0,r[6]=this.tx,r[7]=this.ty,r[8]=1):(r[0]=this.a,r[1]=this.c,r[2]=this.tx,r[3]=this.b,r[4]=this.d,r[5]=this.ty,r[6]=0,r[7]=0,r[8]=1),r},i.prototype.apply=function(t,e){e=e||new n;var r=t.x,i=t.y;return e.x=this.a*r+this.c*i+this.tx,e.y=this.b*r+this.d*i+this.ty,e},i.prototype.applyInverse=function(t,e){e=e||new n;var r=1/(this.a*this.d+this.c*-this.b),i=t.x,o=t.y;return e.x=this.d*r*i+-this.c*r*o+(this.ty*this.c-this.tx*this.d)*r,e.y=this.a*r*o+-this.b*r*i+(-this.ty*this.a+this.tx*this.b)*r,e},i.prototype.translate=function(t,e){return this.tx+=t,this.ty+=e,this},i.prototype.scale=function(t,e){return this.a*=t,this.d*=e,this.c*=t,this.b*=e,this.tx*=t,this.ty*=e,this},i.prototype.rotate=function(t){var e=Math.cos(t),r=Math.sin(t),i=this.a,n=this.c,o=this.tx;return this.a=i*e-this.b*r,this.b=i*r+this.b*e,this.c=n*e-this.d*r,this.d=n*r+this.d*e,this.tx=o*e-this.ty*r,this.ty=o*r+this.ty*e,this},i.prototype.append=function(t){var e=this.a,r=this.b,i=this.c,n=this.d;return this.a=t.a*e+t.b*i,this.b=t.a*r+t.b*n,this.c=t.c*e+t.d*i,this.d=t.c*r+t.d*n,this.tx=t.tx*e+t.ty*i+this.tx,this.ty=t.tx*r+t.ty*n+this.ty,this},i.prototype.setTransform=function(t,e,r,i,n,o,s,a,h){var u,l,c,p,d,f,v,g,m,y;return d=Math.sin(s),f=Math.cos(s),v=Math.cos(h),g=Math.sin(h),m=-Math.sin(a),y=Math.cos(a),u=f*n,l=d*n,c=-d*o,p=f*o,this.a=v*u+g*c,this.b=v*l+g*p,this.c=m*u+y*c,this.d=m*l+y*p,this.tx=t+(r*u+i*c),this.ty=e+(r*l+i*p),this},i.prototype.prepend=function(t){var e=this.tx;if(1!==t.a||0!==t.b||0!==t.c||1!==t.d){var r=this.a,i=this.c;this.a=r*t.a+this.b*t.c,this.b=r*t.b+this.b*t.d,this.c=i*t.a+this.d*t.c,this.d=i*t.b+this.d*t.d}return this.tx=e*t.a+this.ty*t.c+t.tx,this.ty=e*t.b+this.ty*t.d+t.ty,this},i.prototype.invert=function(){var t=this.a,e=this.b,r=this.c,i=this.d,n=this.tx,o=t*i-e*r;return this.a=i/o,this.b=-e/o,this.c=-r/o,this.d=t/o,this.tx=(r*this.ty-i*n)/o,this.ty=-(t*this.ty-e*n)/o,this},i.prototype.identity=function(){return this.a=1,this.b=0,this.c=0,this.d=1,this.tx=0,this.ty=0,this},i.prototype.clone=function(){var t=new i;return t.a=this.a,t.b=this.b,t.c=this.c,t.d=this.d,t.tx=this.tx,t.ty=this.ty,t},i.prototype.copy=function(t){return t.a=this.a,t.b=this.b,t.c=this.c,t.d=this.d,t.tx=this.tx,t.ty=this.ty,t},i.IDENTITY=new i,i.TEMP_MATRIX=new i},{"./Point":54}],54:[function(t,e,r){function i(t,e){this.x=t||0,this.y=e||0}i.prototype.constructor=i,e.exports=i,i.prototype.clone=function(){return new i(this.x,this.y)},i.prototype.copy=function(t){this.set(t.x,t.y)},i.prototype.equals=function(t){return t.x===this.x&&t.y===this.y},i.prototype.set=function(t,e){this.x=t||0,this.y=e||(0!==e?this.x:0)}},{}],55:[function(t,e,r){e.exports={Point:t("./Point"),Matrix:t("./Matrix"),Circle:t("./shapes/Circle"),Ellipse:t("./shapes/Ellipse"),Polygon:t("./shapes/Polygon"),Rectangle:t("./shapes/Rectangle"),RoundedRectangle:t("./shapes/RoundedRectangle")}},{"./Matrix":53,"./Point":54,"./shapes/Circle":56,"./shapes/Ellipse":57,"./shapes/Polygon":58,"./shapes/Rectangle":59,"./shapes/RoundedRectangle":60}],56:[function(t,e,r){function i(t,e,r){this.x=t||0,this.y=e||0,this.radius=r||0,this.type=o.SHAPES.CIRC}var n=t("./Rectangle"),o=t("../../const");i.prototype.constructor=i,e.exports=i,i.prototype.clone=function(){return new i(this.x,this.y,this.radius)},i.prototype.contains=function(t,e){if(this.radius<=0)return!1;var r=this.x-t,i=this.y-e,n=this.radius*this.radius;return r*=r,i*=i,n>=r+i},i.prototype.getBounds=function(){return new n(this.x-this.radius,this.y-this.radius,2*this.radius,2*this.radius)}},{"../../const":38,"./Rectangle":59}],57:[function(t,e,r){function i(t,e,r,i){this.x=t||0,this.y=e||0,this.width=r||0,this.height=i||0,this.type=o.SHAPES.ELIP}var n=t("./Rectangle"),o=t("../../const");i.prototype.constructor=i,e.exports=i,i.prototype.clone=function(){return new i(this.x,this.y,this.width,this.height)},i.prototype.contains=function(t,e){if(this.width<=0||this.height<=0)return!1;var r=(t-this.x)/this.width,i=(e-this.y)/this.height;return r*=r,i*=i,1>=r+i},i.prototype.getBounds=function(){return new n(this.x-this.width,this.y-this.height,this.width,this.height)}},{"../../const":38,"./Rectangle":59}],58:[function(t,e,r){function i(t){var e=t;if(!Array.isArray(e)){e=new Array(arguments.length);for(var r=0;rs;s++)i.push(e[s].x,e[s].y);e=i}this.closed=!0,this.points=e,this.type=o.SHAPES.POLY}var n=t("../Point"),o=t("../../const");i.prototype.constructor=i,e.exports=i,i.prototype.clone=function(){return new i(this.points.slice())},i.prototype.contains=function(t,e){for(var r=!1,i=this.points.length/2,n=0,o=i-1;i>n;o=n++){var s=this.points[2*n],a=this.points[2*n+1],h=this.points[2*o],u=this.points[2*o+1],l=a>e!=u>e&&(h-s)*(e-a)/(u-a)+s>t;l&&(r=!r)}return r}},{"../../const":38,"../Point":54}],59:[function(t,e,r){function i(t,e,r,i){this.x=t||0,this.y=e||0,this.width=r||0,this.height=i||0,this.type=n.SHAPES.RECT}var n=t("../../const");i.prototype.constructor=i,e.exports=i,i.EMPTY=new i(0,0,0,0),i.prototype.clone=function(){return new i(this.x,this.y,this.width,this.height)},i.prototype.contains=function(t,e){return this.width<=0||this.height<=0?!1:t>=this.x&&t=this.y&&e=this.x&&t<=this.x+this.width&&e>=this.y&&e<=this.y+this.height?!0:!1}},{"../../const":38}],61:[function(t,e,r){function i(t,e,r){n.call(this),r=r||15e3,t=t||15e3;var i=16384;r>i&&(r=i),r>t&&(r=t),this._properties=[!1,!0,!1,!1,!1],this._maxSize=t,this._batchSize=r,this._buffers=null,this._bufferToUpdate=0,this.interactiveChildren=!1,this.blendMode=o.BLEND_MODES.NORMAL,this.roundPixels=!0,this.setProperties(e)}var n=t("../display/Container"),o=t("../const");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.setProperties=function(t){t&&(this._properties[0]="scale"in t?!!t.scale:this._properties[0],this._properties[1]="position"in t?!!t.position:this._properties[1],this._properties[2]="rotation"in t?!!t.rotation:this._properties[2],this._properties[3]="uvs"in t?!!t.uvs:this._properties[3],this._properties[4]="alpha"in t?!!t.alpha:this._properties[4])},i.prototype.updateTransform=function(){this.displayObjectUpdateTransform()},i.prototype.renderWebGL=function(t){this.visible&&!(this.worldAlpha<=0)&&this.children.length&&this.renderable&&(t.setObjectRenderer(t.plugins.particle),t.plugins.particle.render(this))},i.prototype.onChildrenChange=function(t){var e=Math.floor(t/this._batchSize);er;r+=6,i+=4)this.indices[r+0]=i+0,this.indices[r+1]=i+1,this.indices[r+2]=i+2,this.indices[r+3]=i+0,this.indices[r+4]=i+2,this.indices[r+5]=i+3;this.shader=null,this.indexBuffer=null,this.properties=null,this.tempMatrix=new h.Matrix}var n=t("../../renderers/webgl/utils/ObjectRenderer"),o=t("../../renderers/webgl/WebGLRenderer"),s=t("./ParticleShader"),a=t("./ParticleBuffer"),h=t("../../math");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,o.registerPlugin("particle",i),i.prototype.onContextChange=function(){var t=this.renderer.gl;this.shader=new s(this.renderer.shaderManager),this.indexBuffer=t.createBuffer(),t.bindBuffer(t.ELEMENT_ARRAY_BUFFER,this.indexBuffer),t.bufferData(t.ELEMENT_ARRAY_BUFFER,this.indices,t.STATIC_DRAW),this.properties=[{attribute:this.shader.attributes.aVertexPosition,size:2,uploadFunction:this.uploadVertices,offset:0},{attribute:this.shader.attributes.aPositionCoord,size:2,uploadFunction:this.uploadPosition,offset:0},{attribute:this.shader.attributes.aRotation,size:1,uploadFunction:this.uploadRotation,offset:0},{attribute:this.shader.attributes.aTextureCoord,size:2,uploadFunction:this.uploadUvs,offset:0},{attribute:this.shader.attributes.aColor,size:1,uploadFunction:this.uploadAlpha,offset:0}]},i.prototype.start=function(){var t=this.renderer.gl;t.activeTexture(t.TEXTURE0),t.bindBuffer(t.ELEMENT_ARRAY_BUFFER,this.indexBuffer);var e=this.shader;this.renderer.shaderManager.setShader(e)},i.prototype.render=function(t){var e=t.children,r=e.length,i=t._maxSize,n=t._batchSize;if(0!==r){r>i&&(r=i),t._buffers||(t._buffers=this.generateBuffers(t)),this.renderer.blendModeManager.setBlendMode(t.blendMode);var o=this.renderer.gl,s=t.worldTransform.copy(this.tempMatrix);s.prepend(this.renderer.currentRenderTarget.projectionMatrix),o.uniformMatrix3fv(this.shader.uniforms.projectionMatrix._location,!1,s.toArray(!0)),o.uniform1f(this.shader.uniforms.uAlpha._location,t.worldAlpha);var a=e[0]._texture.baseTexture;if(a._glTextures[o.id])o.bindTexture(o.TEXTURE_2D,a._glTextures[o.id]);else{if(!this.renderer.updateTexture(a))return;t._properties[0]&&t._properties[3]||(t._bufferToUpdate=0)}for(var h=0,u=0;r>h;h+=n,u+=1){var l=r-h;l>n&&(l=n);var c=t._buffers[u];c.uploadDynamic(e,h,l),t._bufferToUpdate===u&&(c.uploadStatic(e,h,l),t._bufferToUpdate=u+1),c.bind(this.shader),o.drawElements(o.TRIANGLES,6*l,o.UNSIGNED_SHORT,0),this.renderer.drawCount++}}},i.prototype.generateBuffers=function(t){var e,r=this.renderer.gl,i=[],n=t._maxSize,o=t._batchSize,s=t._properties;for(e=0;n>e;e+=o)i.push(new a(r,this.properties,s,o));return i},i.prototype.uploadVertices=function(t,e,r,i,n,o){for(var s,a,h,u,l,c,p,d,f,v=0;r>v;v++)s=t[e+v],a=s._texture,u=s.scale.x,l=s.scale.y,a.trim?(h=a.trim,p=h.x-s.anchor.x*h.width,c=p+a.crop.width,f=h.y-s.anchor.y*h.height,d=f+a.crop.height):(c=a._frame.width*(1-s.anchor.x),p=a._frame.width*-s.anchor.x,d=a._frame.height*(1-s.anchor.y),f=a._frame.height*-s.anchor.y),i[o]=p*u,i[o+1]=f*l,i[o+n]=c*u,i[o+n+1]=f*l,i[o+2*n]=c*u,i[o+2*n+1]=d*l,i[o+3*n]=p*u,i[o+3*n+1]=d*l,o+=4*n},i.prototype.uploadPosition=function(t,e,r,i,n,o){for(var s=0;r>s;s++){var a=t[e+s].position;i[o]=a.x,i[o+1]=a.y,i[o+n]=a.x,i[o+n+1]=a.y,i[o+2*n]=a.x,i[o+2*n+1]=a.y,i[o+3*n]=a.x,i[o+3*n+1]=a.y,o+=4*n}},i.prototype.uploadRotation=function(t,e,r,i,n,o){for(var s=0;r>s;s++){var a=t[e+s].rotation;i[o]=a,i[o+n]=a,i[o+2*n]=a,i[o+3*n]=a,o+=4*n}},i.prototype.uploadUvs=function(t,e,r,i,n,o){for(var s=0;r>s;s++){var a=t[e+s]._texture._uvs;a?(i[o]=a.x0,i[o+1]=a.y0,i[o+n]=a.x1,i[o+n+1]=a.y1,i[o+2*n]=a.x2,i[o+2*n+1]=a.y2,i[o+3*n]=a.x3,i[o+3*n+1]=a.y3,o+=4*n):(i[o]=0,i[o+1]=0,i[o+n]=0,i[o+n+1]=0,i[o+2*n]=0,i[o+2*n+1]=0,i[o+3*n]=0,i[o+3*n+1]=0,o+=4*n)}},i.prototype.uploadAlpha=function(t,e,r,i,n,o){for(var s=0;r>s;s++){var a=t[e+s].alpha;i[o]=a,i[o+n]=a,i[o+2*n]=a,i[o+3*n]=a,o+=4*n}},i.prototype.destroy=function(){this.renderer.gl&&this.renderer.gl.deleteBuffer(this.indexBuffer),n.prototype.destroy.apply(this,arguments),this.shader.destroy(),this.indices=null,this.tempMatrix=null}},{"../../math":55,"../../renderers/webgl/WebGLRenderer":72,"../../renderers/webgl/utils/ObjectRenderer":87,"./ParticleBuffer":62,"./ParticleShader":64}],64:[function(t,e,r){function i(t){n.call(this,t,["attribute vec2 aVertexPosition;","attribute vec2 aTextureCoord;","attribute float aColor;","attribute vec2 aPositionCoord;","attribute vec2 aScale;","attribute float aRotation;","uniform mat3 projectionMatrix;","varying vec2 vTextureCoord;","varying float vColor;","void main(void){"," vec2 v = aVertexPosition;"," v.x = (aVertexPosition.x) * cos(aRotation) - (aVertexPosition.y) * sin(aRotation);"," v.y = (aVertexPosition.x) * sin(aRotation) + (aVertexPosition.y) * cos(aRotation);"," v = v + aPositionCoord;"," gl_Position = vec4((projectionMatrix * vec3(v, 1.0)).xy, 0.0, 1.0);"," vTextureCoord = aTextureCoord;"," vColor = aColor;","}"].join("\n"),["precision lowp float;","varying vec2 vTextureCoord;","varying float vColor;","uniform sampler2D uSampler;","uniform float uAlpha;","void main(void){"," vec4 color = texture2D(uSampler, vTextureCoord) * vColor * uAlpha;"," if (color.a == 0.0) discard;"," gl_FragColor = color;","}"].join("\n"),{uAlpha:{type:"1f",value:1}},{aPositionCoord:0,aRotation:0})}var n=t("../../renderers/webgl/shaders/TextureShader");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i},{"../../renderers/webgl/shaders/TextureShader":85}],65:[function(t,e,r){ +function i(t,e,r,i){if(a.call(this),n.sayHello(t),i)for(var h in s.DEFAULT_RENDER_OPTIONS)"undefined"==typeof i[h]&&(i[h]=s.DEFAULT_RENDER_OPTIONS[h]);else i=s.DEFAULT_RENDER_OPTIONS;this.type=s.RENDERER_TYPE.UNKNOWN,this.width=e||800,this.height=r||600,this.view=i.view||document.createElement("canvas"),this.resolution=i.resolution,this.transparent=i.transparent,this.autoResize=i.autoResize||!1,this.blendModes=null,this.preserveDrawingBuffer=i.preserveDrawingBuffer,this.clearBeforeRender=i.clearBeforeRender,this.roundPixels=i.roundPixels,this._backgroundColor=0,this._backgroundColorRgba=[0,0,0,0],this._backgroundColorString="#000000",this.backgroundColor=i.backgroundColor||this._backgroundColor,this._tempDisplayObjectParent={worldTransform:new o.Matrix,worldAlpha:1,children:[]},this._lastObjectRendered=this._tempDisplayObjectParent}var n=t("../utils"),o=t("../math"),s=t("../const"),a=t("eventemitter3");i.prototype=Object.create(a.prototype),i.prototype.constructor=i,e.exports=i,Object.defineProperties(i.prototype,{backgroundColor:{get:function(){return this._backgroundColor},set:function(t){this._backgroundColor=t,this._backgroundColorString=n.hex2string(t),n.hex2rgb(t,this._backgroundColorRgba)}}}),i.prototype.resize=function(t,e){this.width=t*this.resolution,this.height=e*this.resolution,this.view.width=this.width,this.view.height=this.height,this.autoResize&&(this.view.style.width=this.width/this.resolution+"px",this.view.style.height=this.height/this.resolution+"px")},i.prototype.destroy=function(t){t&&this.view.parentNode&&this.view.parentNode.removeChild(this.view),this.type=s.RENDERER_TYPE.UNKNOWN,this.width=0,this.height=0,this.view=null,this.resolution=0,this.transparent=!1,this.autoResize=!1,this.blendModes=null,this.preserveDrawingBuffer=!1,this.clearBeforeRender=!1,this.roundPixels=!1,this._backgroundColor=0,this._backgroundColorRgba=null,this._backgroundColorString=null}},{"../const":38,"../math":55,"../utils":105,eventemitter3:25}],66:[function(t,e,r){function i(t,e,r){r=r||{},n.call(this,"Canvas",t,e,r),this.type=h.RENDERER_TYPE.CANVAS,this.context=this.view.getContext("2d",{alpha:this.transparent}),this.refresh=!0,this.maskManager=new o,this.smoothProperty="imageSmoothingEnabled",this.context.imageSmoothingEnabled||(this.context.webkitImageSmoothingEnabled?this.smoothProperty="webkitImageSmoothingEnabled":this.context.mozImageSmoothingEnabled?this.smoothProperty="mozImageSmoothingEnabled":this.context.oImageSmoothingEnabled?this.smoothProperty="oImageSmoothingEnabled":this.context.msImageSmoothingEnabled&&(this.smoothProperty="msImageSmoothingEnabled")),this.initPlugins(),this._mapBlendModes(),this._tempDisplayObjectParent={worldTransform:new a.Matrix,worldAlpha:1},this.resize(t,e)}var n=t("../SystemRenderer"),o=t("./utils/CanvasMaskManager"),s=t("../../utils"),a=t("../../math"),h=t("../../const");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,s.pluginTarget.mixin(i),i.prototype.render=function(t){this.emit("prerender");var e=t.parent;this._lastObjectRendered=t,t.parent=this._tempDisplayObjectParent,t.updateTransform(),t.parent=e,this.context.setTransform(1,0,0,1,0,0),this.context.globalAlpha=1,this.context.globalCompositeOperation=this.blendModes[h.BLEND_MODES.NORMAL],navigator.isCocoonJS&&this.view.screencanvas&&(this.context.fillStyle="black",this.context.clear()),this.clearBeforeRender&&(this.transparent?this.context.clearRect(0,0,this.width,this.height):(this.context.fillStyle=this._backgroundColorString,this.context.fillRect(0,0,this.width,this.height))),this.renderDisplayObject(t,this.context),this.emit("postrender")},i.prototype.destroy=function(t){this.destroyPlugins(),n.prototype.destroy.call(this,t),this.context=null,this.refresh=!0,this.maskManager.destroy(),this.maskManager=null,this.smoothProperty=null},i.prototype.renderDisplayObject=function(t,e){var r=this.context;this.context=e,t.renderCanvas(this),this.context=r},i.prototype.resize=function(t,e){n.prototype.resize.call(this,t,e),this.smoothProperty&&(this.context[this.smoothProperty]=h.SCALE_MODES.DEFAULT===h.SCALE_MODES.LINEAR)},i.prototype._mapBlendModes=function(){this.blendModes||(this.blendModes={},s.canUseNewCanvasBlendModes()?(this.blendModes[h.BLEND_MODES.NORMAL]="source-over",this.blendModes[h.BLEND_MODES.ADD]="lighter",this.blendModes[h.BLEND_MODES.MULTIPLY]="multiply",this.blendModes[h.BLEND_MODES.SCREEN]="screen",this.blendModes[h.BLEND_MODES.OVERLAY]="overlay",this.blendModes[h.BLEND_MODES.DARKEN]="darken",this.blendModes[h.BLEND_MODES.LIGHTEN]="lighten",this.blendModes[h.BLEND_MODES.COLOR_DODGE]="color-dodge",this.blendModes[h.BLEND_MODES.COLOR_BURN]="color-burn",this.blendModes[h.BLEND_MODES.HARD_LIGHT]="hard-light",this.blendModes[h.BLEND_MODES.SOFT_LIGHT]="soft-light",this.blendModes[h.BLEND_MODES.DIFFERENCE]="difference",this.blendModes[h.BLEND_MODES.EXCLUSION]="exclusion",this.blendModes[h.BLEND_MODES.HUE]="hue",this.blendModes[h.BLEND_MODES.SATURATION]="saturate",this.blendModes[h.BLEND_MODES.COLOR]="color",this.blendModes[h.BLEND_MODES.LUMINOSITY]="luminosity"):(this.blendModes[h.BLEND_MODES.NORMAL]="source-over",this.blendModes[h.BLEND_MODES.ADD]="lighter",this.blendModes[h.BLEND_MODES.MULTIPLY]="source-over",this.blendModes[h.BLEND_MODES.SCREEN]="source-over",this.blendModes[h.BLEND_MODES.OVERLAY]="source-over",this.blendModes[h.BLEND_MODES.DARKEN]="source-over",this.blendModes[h.BLEND_MODES.LIGHTEN]="source-over",this.blendModes[h.BLEND_MODES.COLOR_DODGE]="source-over",this.blendModes[h.BLEND_MODES.COLOR_BURN]="source-over",this.blendModes[h.BLEND_MODES.HARD_LIGHT]="source-over",this.blendModes[h.BLEND_MODES.SOFT_LIGHT]="source-over",this.blendModes[h.BLEND_MODES.DIFFERENCE]="source-over",this.blendModes[h.BLEND_MODES.EXCLUSION]="source-over",this.blendModes[h.BLEND_MODES.HUE]="source-over",this.blendModes[h.BLEND_MODES.SATURATION]="source-over",this.blendModes[h.BLEND_MODES.COLOR]="source-over",this.blendModes[h.BLEND_MODES.LUMINOSITY]="source-over"))}},{"../../const":38,"../../math":55,"../../utils":105,"../SystemRenderer":65,"./utils/CanvasMaskManager":69}],67:[function(t,e,r){function i(t,e){this.canvas=document.createElement("canvas"),this.context=this.canvas.getContext("2d"),this.canvas.width=t,this.canvas.height=e}i.prototype.constructor=i,e.exports=i,Object.defineProperties(i.prototype,{width:{get:function(){return this.canvas.width},set:function(t){this.canvas.width=t}},height:{get:function(){return this.canvas.height},set:function(t){this.canvas.height=t}}}),i.prototype.clear=function(){this.context.setTransform(1,0,0,1,0,0),this.context.clearRect(0,0,this.canvas.width,this.canvas.height)},i.prototype.resize=function(t,e){this.canvas.width=t,this.canvas.height=e},i.prototype.destroy=function(){this.context=null,this.canvas=null}},{}],68:[function(t,e,r){var i=t("../../../const"),n={};e.exports=n,n.renderGraphics=function(t,e){var r=t.worldAlpha;t.dirty&&(this.updateGraphicsTint(t),t.dirty=!1);for(var n=0;nA?A:C,e.beginPath(),e.moveTo(T,E+C),e.lineTo(T,E+w-C),e.quadraticCurveTo(T,E+w,T+C,E+w),e.lineTo(T+S-C,E+w),e.quadraticCurveTo(T+S,E+w,T+S,E+w-C),e.lineTo(T+S,E+C),e.quadraticCurveTo(T+S,E,T+S-C,E),e.lineTo(T+C,E),e.quadraticCurveTo(T,E,T,E+C),e.closePath(),(o.fillColor||0===o.fillColor)&&(e.globalAlpha=o.fillAlpha*r,e.fillStyle="#"+("00000"+(0|a).toString(16)).substr(-6),e.fill()),o.lineWidth&&(e.globalAlpha=o.lineAlpha*r,e.strokeStyle="#"+("00000"+(0|h).toString(16)).substr(-6),e.stroke())}}},n.renderGraphicsMask=function(t,e){var r=t.graphicsData.length;if(0!==r){e.beginPath();for(var n=0;r>n;n++){var o=t.graphicsData[n],s=o.shape;if(o.type===i.SHAPES.POLY){var a=s.points;e.moveTo(a[0],a[1]);for(var h=1;hw?w:S,e.moveTo(b,_+S),e.lineTo(b,_+E-S),e.quadraticCurveTo(b,_+E,b+S,_+E),e.lineTo(b+T-S,_+E),e.quadraticCurveTo(b+T,_+E,b+T,_+E-S),e.lineTo(b+T,_+S),e.quadraticCurveTo(b+T,_,b+T-S,_),e.lineTo(b+S,_),e.quadraticCurveTo(b,_,b,_+S),e.closePath()}}}},n.updateGraphicsTint=function(t){if(16777215!==t.tint||t._prevTint!==t.tint){t._prevTint=t.tint;for(var e=(t.tint>>16&255)/255,r=(t.tint>>8&255)/255,i=(255&t.tint)/255,n=0;n>16&255)/255*e*255<<16)+((s>>8&255)/255*r*255<<8)+(255&s)/255*i*255,o._lineTint=((a>>16&255)/255*e*255<<16)+((a>>8&255)/255*r*255<<8)+(255&a)/255*i*255}}}},{"../../../const":38}],69:[function(t,e,r){function i(){}var n=t("./CanvasGraphics");i.prototype.constructor=i,e.exports=i,i.prototype.pushMask=function(t,e){e.context.save();var r=t.alpha,i=t.worldTransform,o=e.resolution;e.context.setTransform(i.a*o,i.b*o,i.c*o,i.d*o,i.tx*o,i.ty*o),t.texture||(n.renderGraphicsMask(t,e.context),e.context.clip()),t.worldAlpha=r},i.prototype.popMask=function(t){t.context.restore()},i.prototype.destroy=function(){}},{"./CanvasGraphics":68}],70:[function(t,e,r){var i=t("../../../utils"),n={};e.exports=n,n.getTintedTexture=function(t,e){var r=t.texture;e=n.roundColor(e);var i="#"+("00000"+(0|e).toString(16)).substr(-6);if(r.tintCache=r.tintCache||{},r.tintCache[i])return r.tintCache[i];var o=n.canvas||document.createElement("canvas");if(n.tintMethod(r,e,o),n.convertTintToImage){var s=new Image;s.src=o.toDataURL(),r.tintCache[i]=s}else r.tintCache[i]=o,n.canvas=null;return o},n.tintWithMultiply=function(t,e,r){var i=r.getContext("2d"),n=t.baseTexture.resolution,o=t.crop.clone();o.x*=n,o.y*=n,o.width*=n,o.height*=n,r.width=o.width,r.height=o.height,i.fillStyle="#"+("00000"+(0|e).toString(16)).substr(-6),i.fillRect(0,0,o.width,o.height),i.globalCompositeOperation="multiply",i.drawImage(t.baseTexture.source,o.x,o.y,o.width,o.height,0,0,o.width,o.height),i.globalCompositeOperation="destination-atop",i.drawImage(t.baseTexture.source,o.x,o.y,o.width,o.height,0,0,o.width,o.height)},n.tintWithOverlay=function(t,e,r){var i=r.getContext("2d"),n=t.baseTexture.resolution,o=t.crop.clone();o.x*=n,o.y*=n,o.width*=n,o.height*=n,r.width=o.width,r.height=o.height,i.globalCompositeOperation="copy",i.fillStyle="#"+("00000"+(0|e).toString(16)).substr(-6),i.fillRect(0,0,o.width,o.height),i.globalCompositeOperation="destination-atop",i.drawImage(t.baseTexture.source,o.x,o.y,o.width,o.height,0,0,o.width,o.height)},n.tintWithPerPixel=function(t,e,r){var n=r.getContext("2d"),o=t.baseTexture.resolution,s=t.crop.clone();s.x*=o,s.y*=o,s.width*=o,s.height*=o,r.width=s.width,r.height=s.height,n.globalCompositeOperation="copy",n.drawImage(t.baseTexture.source,s.x,s.y,s.width,s.height,0,0,s.width,s.height);for(var a=i.hex2rgb(e),h=a[0],u=a[1],l=a[2],c=n.getImageData(0,0,s.width,s.height),p=c.data,d=0;de;++e)this.shaders[e].syncUniform(t)}},{"../shaders/TextureShader":85}],74:[function(t,e,r){function i(){n.call(this,"\nprecision mediump float;\n\nattribute vec2 aVertexPosition;\nattribute vec2 aTextureCoord;\nattribute vec4 aColor;\n\nuniform mat3 projectionMatrix;\nuniform vec2 resolution;\n\nvarying vec2 vTextureCoord;\nvarying vec4 vColor;\n\nvarying vec2 vResolution;\n\n//texcoords computed in vertex step\n//to avoid dependent texture reads\nvarying vec2 v_rgbNW;\nvarying vec2 v_rgbNE;\nvarying vec2 v_rgbSW;\nvarying vec2 v_rgbSE;\nvarying vec2 v_rgbM;\n\n\nvoid texcoords(vec2 fragCoord, vec2 resolution,\n out vec2 v_rgbNW, out vec2 v_rgbNE,\n out vec2 v_rgbSW, out vec2 v_rgbSE,\n out vec2 v_rgbM) {\n vec2 inverseVP = 1.0 / resolution.xy;\n v_rgbNW = (fragCoord + vec2(-1.0, -1.0)) * inverseVP;\n v_rgbNE = (fragCoord + vec2(1.0, -1.0)) * inverseVP;\n v_rgbSW = (fragCoord + vec2(-1.0, 1.0)) * inverseVP;\n v_rgbSE = (fragCoord + vec2(1.0, 1.0)) * inverseVP;\n v_rgbM = vec2(fragCoord * inverseVP);\n}\n\nvoid main(void){\n gl_Position = vec4((projectionMatrix * vec3(aVertexPosition, 1.0)).xy, 0.0, 1.0);\n vTextureCoord = aTextureCoord;\n vColor = vec4(aColor.rgb * aColor.a, aColor.a);\n vResolution = resolution;\n\n //compute the texture coords and send them to varyings\n texcoords(aTextureCoord * resolution, resolution, v_rgbNW, v_rgbNE, v_rgbSW, v_rgbSE, v_rgbM);\n}\n",'precision lowp float;\n\n\n/**\nBasic FXAA implementation based on the code on geeks3d.com with the\nmodification that the texture2DLod stuff was removed since it\'s\nunsupported by WebGL.\n\n--\n\nFrom:\nhttps://github.com/mitsuhiko/webgl-meincraft\n\nCopyright (c) 2011 by Armin Ronacher.\n\nSome rights reserved.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are\nmet:\n\n * Redistributions of source code must retain the above copyright\n notice, this list of conditions and the following disclaimer.\n\n * Redistributions in binary form must reproduce the above\n copyright notice, this list of conditions and the following\n disclaimer in the documentation and/or other materials provided\n with the distribution.\n\n * The names of the contributors may not be used to endorse or\n promote products derived from this software without specific\n prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\nLIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\nA PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\nOWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\nSPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\nLIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\nDATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\nTHEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\nOF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n*/\n\n#ifndef FXAA_REDUCE_MIN\n #define FXAA_REDUCE_MIN (1.0/ 128.0)\n#endif\n#ifndef FXAA_REDUCE_MUL\n #define FXAA_REDUCE_MUL (1.0 / 8.0)\n#endif\n#ifndef FXAA_SPAN_MAX\n #define FXAA_SPAN_MAX 8.0\n#endif\n\n//optimized version for mobile, where dependent\n//texture reads can be a bottleneck\nvec4 fxaa(sampler2D tex, vec2 fragCoord, vec2 resolution,\n vec2 v_rgbNW, vec2 v_rgbNE,\n vec2 v_rgbSW, vec2 v_rgbSE,\n vec2 v_rgbM) {\n vec4 color;\n mediump vec2 inverseVP = vec2(1.0 / resolution.x, 1.0 / resolution.y);\n vec3 rgbNW = texture2D(tex, v_rgbNW).xyz;\n vec3 rgbNE = texture2D(tex, v_rgbNE).xyz;\n vec3 rgbSW = texture2D(tex, v_rgbSW).xyz;\n vec3 rgbSE = texture2D(tex, v_rgbSE).xyz;\n vec4 texColor = texture2D(tex, v_rgbM);\n vec3 rgbM = texColor.xyz;\n vec3 luma = vec3(0.299, 0.587, 0.114);\n float lumaNW = dot(rgbNW, luma);\n float lumaNE = dot(rgbNE, luma);\n float lumaSW = dot(rgbSW, luma);\n float lumaSE = dot(rgbSE, luma);\n float lumaM = dot(rgbM, luma);\n float lumaMin = min(lumaM, min(min(lumaNW, lumaNE), min(lumaSW, lumaSE)));\n float lumaMax = max(lumaM, max(max(lumaNW, lumaNE), max(lumaSW, lumaSE)));\n\n mediump vec2 dir;\n dir.x = -((lumaNW + lumaNE) - (lumaSW + lumaSE));\n dir.y = ((lumaNW + lumaSW) - (lumaNE + lumaSE));\n\n float dirReduce = max((lumaNW + lumaNE + lumaSW + lumaSE) *\n (0.25 * FXAA_REDUCE_MUL), FXAA_REDUCE_MIN);\n\n float rcpDirMin = 1.0 / (min(abs(dir.x), abs(dir.y)) + dirReduce);\n dir = min(vec2(FXAA_SPAN_MAX, FXAA_SPAN_MAX),\n max(vec2(-FXAA_SPAN_MAX, -FXAA_SPAN_MAX),\n dir * rcpDirMin)) * inverseVP;\n\n vec3 rgbA = 0.5 * (\n texture2D(tex, fragCoord * inverseVP + dir * (1.0 / 3.0 - 0.5)).xyz +\n texture2D(tex, fragCoord * inverseVP + dir * (2.0 / 3.0 - 0.5)).xyz);\n vec3 rgbB = rgbA * 0.5 + 0.25 * (\n texture2D(tex, fragCoord * inverseVP + dir * -0.5).xyz +\n texture2D(tex, fragCoord * inverseVP + dir * 0.5).xyz);\n\n float lumaB = dot(rgbB, luma);\n if ((lumaB < lumaMin) || (lumaB > lumaMax))\n color = vec4(rgbA, texColor.a);\n else\n color = vec4(rgbB, texColor.a);\n return color;\n}\n\n\nvarying vec2 vTextureCoord;\nvarying vec4 vColor;\nvarying vec2 vResolution;\n\n//texcoords computed in vertex step\n//to avoid dependent texture reads\nvarying vec2 v_rgbNW;\nvarying vec2 v_rgbNE;\nvarying vec2 v_rgbSW;\nvarying vec2 v_rgbSE;\nvarying vec2 v_rgbM;\n\nuniform sampler2D uSampler;\n\n\nvoid main(void){\n\n gl_FragColor = fxaa(uSampler, vTextureCoord * vResolution, vResolution, v_rgbNW, v_rgbNE, v_rgbSW, v_rgbSE, v_rgbM);\n\n}\n',{resolution:{type:"v2",value:{x:1,y:1}}})}var n=t("./AbstractFilter");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.applyFilter=function(t,e,r){var i=t.filterManager,n=this.getShader(t);i.applyFilter(n,e,r)}},{"./AbstractFilter":73}],75:[function(t,e,r){function i(t){var e=new o.Matrix;n.call(this,"attribute vec2 aVertexPosition;\nattribute vec2 aTextureCoord;\nattribute vec4 aColor;\n\nuniform mat3 projectionMatrix;\nuniform mat3 otherMatrix;\n\nvarying vec2 vMaskCoord;\nvarying vec2 vTextureCoord;\nvarying vec4 vColor;\n\nvoid main(void)\n{\n gl_Position = vec4((projectionMatrix * vec3(aVertexPosition, 1.0)).xy, 0.0, 1.0);\n vTextureCoord = aTextureCoord;\n vMaskCoord = ( otherMatrix * vec3( aTextureCoord, 1.0) ).xy;\n vColor = vec4(aColor.rgb * aColor.a, aColor.a);\n}\n","precision lowp float;\n\nvarying vec2 vMaskCoord;\nvarying vec2 vTextureCoord;\nvarying vec4 vColor;\n\nuniform sampler2D uSampler;\nuniform float alpha;\nuniform sampler2D mask;\n\nvoid main(void)\n{\n // check clip! this will stop the mask bleeding out from the edges\n vec2 text = abs( vMaskCoord - 0.5 );\n text = step(0.5, text);\n float clip = 1.0 - max(text.y, text.x);\n vec4 original = texture2D(uSampler, vTextureCoord);\n vec4 masky = texture2D(mask, vMaskCoord);\n original *= (masky.r * masky.a * alpha * clip);\n gl_FragColor = original;\n}\n",{mask:{type:"sampler2D",value:t._texture},alpha:{type:"f",value:1},otherMatrix:{type:"mat3",value:e.toArray(!0)}}),this.maskSprite=t,this.maskMatrix=e}var n=t("./AbstractFilter"),o=t("../../../math");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.applyFilter=function(t,e,r){var i=t.filterManager;this.uniforms.mask.value=this.maskSprite._texture,i.calculateMappedMatrix(e.frame,this.maskSprite,this.maskMatrix),this.uniforms.otherMatrix.value=this.maskMatrix.toArray(!0),this.uniforms.alpha.value=this.maskSprite.worldAlpha;var n=this.getShader(t);i.applyFilter(n,e,r)},Object.defineProperties(i.prototype,{map:{get:function(){return this.uniforms.mask.value},set:function(t){this.uniforms.mask.value=t}},offset:{get:function(){return this.uniforms.offset.value},set:function(t){this.uniforms.offset.value=t}}})},{"../../../math":55,"./AbstractFilter":73}],76:[function(t,e,r){function i(t){n.call(this,t),this.currentBlendMode=99999}var n=t("./WebGLManager");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.setBlendMode=function(t){if(this.currentBlendMode===t)return!1;this.currentBlendMode=t;var e=this.renderer.blendModes[this.currentBlendMode];return this.renderer.gl.blendFunc(e[0],e[1]),!0}},{"./WebGLManager":81}],77:[function(t,e,r){function i(t){n.call(this,t),this.filterStack=[],this.filterStack.push({renderTarget:t.currentRenderTarget,filter:[],bounds:null}),this.texturePool=[],this.textureSize=new h.Rectangle(0,0,t.width,t.height),this.currentFrame=null}var n=t("./WebGLManager"),o=t("../utils/RenderTarget"),s=t("../../../const"),a=t("../utils/Quad"),h=t("../../../math");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.onContextChange=function(){this.texturePool.length=0;var t=this.renderer.gl;this.quad=new a(t)},i.prototype.setFilterStack=function(t){this.filterStack=t},i.prototype.pushFilter=function(t,e){var r=t.filterArea?t.filterArea.clone():t.getBounds();r.x=0|r.x,r.y=0|r.y,r.width=0|r.width,r.height=0|r.height;var i=0|e[0].padding;if(r.x-=i,r.y-=i,r.width+=2*i,r.height+=2*i,this.renderer.currentRenderTarget.transform){var n=this.renderer.currentRenderTarget.transform;r.x+=n.tx,r.y+=n.ty,this.capFilterArea(r),r.x-=n.tx,r.y-=n.ty}else this.capFilterArea(r);if(r.width>0&&r.height>0){this.currentFrame=r;var o=this.getRenderTarget();this.renderer.setRenderTarget(o),o.clear(),this.filterStack.push({renderTarget:o,filter:e})}else this.filterStack.push({renderTarget:null,filter:e})},i.prototype.popFilter=function(){var t=this.filterStack.pop(),e=this.filterStack[this.filterStack.length-1],r=t.renderTarget;if(t.renderTarget){var i=e.renderTarget,n=this.renderer.gl;this.currentFrame=r.frame,this.quad.map(this.textureSize,r.frame),n.bindBuffer(n.ARRAY_BUFFER,this.quad.vertexBuffer),n.bindBuffer(n.ELEMENT_ARRAY_BUFFER,this.quad.indexBuffer);var o=t.filter;if(n.vertexAttribPointer(this.renderer.shaderManager.defaultShader.attributes.aVertexPosition,2,n.FLOAT,!1,0,0),n.vertexAttribPointer(this.renderer.shaderManager.defaultShader.attributes.aTextureCoord,2,n.FLOAT,!1,0,32),n.vertexAttribPointer(this.renderer.shaderManager.defaultShader.attributes.aColor,4,n.FLOAT,!1,0,64),this.renderer.blendModeManager.setBlendMode(s.BLEND_MODES.NORMAL),1===o.length)o[0].uniforms.dimensions&&(o[0].uniforms.dimensions.value[0]=this.renderer.width,o[0].uniforms.dimensions.value[1]=this.renderer.height,o[0].uniforms.dimensions.value[2]=this.quad.vertices[0],o[0].uniforms.dimensions.value[3]=this.quad.vertices[5]),o[0].applyFilter(this.renderer,r,i),this.returnRenderTarget(r);else{for(var a=r,h=this.getRenderTarget(!0),u=0;uthis.textureSize.width&&(t.width=this.textureSize.width-t.x),t.y+t.height>this.textureSize.height&&(t.height=this.textureSize.height-t.y)},i.prototype.resize=function(t,e){this.textureSize.width=t,this.textureSize.height=e;for(var r=0;re;++e)t._array[2*e]=o[e].x,t._array[2*e+1]=o[e].y;s.uniform2fv(i,t._array);break;case"v3v":for(t._array||(t._array=new Float32Array(3*o.length)),e=0,r=o.length;r>e;++e)t._array[3*e]=o[e].x,t._array[3*e+1]=o[e].y,t._array[3*e+2]=o[e].z;s.uniform3fv(i,t._array);break;case"v4v":for(t._array||(t._array=new Float32Array(4*o.length)),e=0,r=o.length;r>e;++e)t._array[4*e]=o[e].x,t._array[4*e+1]=o[e].y,t._array[4*e+2]=o[e].z,t._array[4*e+3]=o[e].w;s.uniform4fv(i,t._array);break;case"t":case"sampler2D":if(!t.value||!t.value.baseTexture.hasLoaded)break;s.activeTexture(s["TEXTURE"+this.textureCount]);var a=t.value.baseTexture._glTextures[s.id];a||(this.initSampler2D(t),a=t.value.baseTexture._glTextures[s.id]),s.bindTexture(s.TEXTURE_2D,a),s.uniform1i(t._location,this.textureCount),this.textureCount++;break;default:console.warn("Pixi.js Shader Warning: Unknown uniform type: "+t.type)}},i.prototype.syncUniforms=function(){this.textureCount=1;for(var t in this.uniforms)this.syncUniform(this.uniforms[t])},i.prototype.initSampler2D=function(t){var e=this.gl,r=t.value.baseTexture;if(r.hasLoaded)if(t.textureData){var i=t.textureData;r._glTextures[e.id]=e.createTexture(),e.bindTexture(e.TEXTURE_2D,r._glTextures[e.id]),e.pixelStorei(e.UNPACK_PREMULTIPLY_ALPHA_WEBGL,r.premultipliedAlpha),e.texImage2D(e.TEXTURE_2D,0,i.luminance?e.LUMINANCE:e.RGBA,e.RGBA,e.UNSIGNED_BYTE,r.source),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MAG_FILTER,i.magFilter?i.magFilter:e.LINEAR),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MIN_FILTER,i.wrapS?i.wrapS:e.CLAMP_TO_EDGE),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,i.wrapS?i.wrapS:e.CLAMP_TO_EDGE),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,i.wrapT?i.wrapT:e.CLAMP_TO_EDGE)}else this.shaderManager.renderer.updateTexture(r)},i.prototype.destroy=function(){this.gl.deleteProgram(this.program),this.gl=null,this.uniforms=null,this.attributes=null,this.vertexSrc=null,this.fragmentSrc=null},i.prototype._glCompile=function(t,e){var r=this.gl.createShader(t);return this.gl.shaderSource(r,e),this.gl.compileShader(r),this.gl.getShaderParameter(r,this.gl.COMPILE_STATUS)?r:(console.log(this.gl.getShaderInfoLog(r)),null)}},{"../../../utils":105}],85:[function(t,e,r){function i(t,e,r,o,s){var a={uSampler:{type:"sampler2D",value:0},projectionMatrix:{type:"mat3",value:new Float32Array([1,0,0,0,1,0,0,0,1])}};if(o)for(var h in o)a[h]=o[h];var u={aVertexPosition:0,aTextureCoord:0,aColor:0};if(s)for(var l in s)u[l]=s[l];e=e||i.defaultVertexSrc,r=r||i.defaultFragmentSrc,n.call(this,t,e,r,a,u)}var n=t("./Shader");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.defaultVertexSrc=["precision lowp float;","attribute vec2 aVertexPosition;","attribute vec2 aTextureCoord;","attribute vec4 aColor;","uniform mat3 projectionMatrix;","varying vec2 vTextureCoord;","varying vec4 vColor;","void main(void){"," gl_Position = vec4((projectionMatrix * vec3(aVertexPosition, 1.0)).xy, 0.0, 1.0);"," vTextureCoord = aTextureCoord;"," vColor = vec4(aColor.rgb * aColor.a, aColor.a);","}"].join("\n"),i.defaultFragmentSrc=["precision lowp float;","varying vec2 vTextureCoord;","varying vec4 vColor;","uniform sampler2D uSampler;","void main(void){"," gl_FragColor = texture2D(uSampler, vTextureCoord) * vColor ;","}"].join("\n")},{"./Shader":84}],86:[function(t,e,r){function i(t){vertexSrc=i.defaultVertexSrc,fragmentSrc=i.defaultFragmentSrc,n.call(this,t,vertexSrc,fragmentSrc)}var n=t("pixi-gl-core").GLShader;i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.defaultVertexSrc=["precision lowp float;","attribute vec2 aVertexPosition;","attribute vec2 aTextureCoord;","attribute vec4 aColor;","uniform mat3 projectionMatrix;","varying vec2 vTextureCoord;","varying vec4 vColor;","void main(void){"," gl_Position = vec4((projectionMatrix * vec3(aVertexPosition, 1.0)).xy, 0.0, 1.0);"," vTextureCoord = aTextureCoord;"," vColor = vec4(aColor.rgb * aColor.a, aColor.a);","}"].join("\n"),i.defaultFragmentSrc=["precision lowp float;","varying vec2 vTextureCoord;","varying vec4 vColor;","uniform sampler2D uSampler;","void main(void){"," gl_FragColor = texture2D(uSampler, vTextureCoord) * vColor ;","}"].join("\n")},{"pixi-gl-core":1}],87:[function(t,e,r){function i(t){n.call(this,t)}var n=t("../managers/WebGLManager");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.start=function(){},i.prototype.stop=function(){this.flush()},i.prototype.flush=function(){},i.prototype.render=function(t){}},{"../managers/WebGLManager":81}],88:[function(t,e,r){function i(t){this.gl=t,this.vertices=new Float32Array([0,0,200,0,200,200,0,200]),this.uvs=new Float32Array([0,0,1,0,1,1,0,1]),this.colors=new Float32Array([1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]),this.indices=new Uint16Array([0,1,2,0,3,2]),this.vertexBuffer=t.createBuffer(),this.indexBuffer=t.createBuffer(),t.bindBuffer(t.ARRAY_BUFFER,this.vertexBuffer),t.bufferData(t.ARRAY_BUFFER,128,t.DYNAMIC_DRAW),t.bindBuffer(t.ELEMENT_ARRAY_BUFFER,this.indexBuffer),t.bufferData(t.ELEMENT_ARRAY_BUFFER,this.indices,t.STATIC_DRAW),this.upload()}i.prototype.constructor=i,i.prototype.map=function(t,e){var r=0,i=0;this.uvs[0]=r,this.uvs[1]=i,this.uvs[2]=r+e.width/t.width,this.uvs[3]=i,this.uvs[4]=r+e.width/t.width,this.uvs[5]=i+e.height/t.height,this.uvs[6]=r,this.uvs[7]=i+e.height/t.height,r=e.x,i=e.y,this.vertices[0]=r,this.vertices[1]=i,this.vertices[2]=r+e.width,this.vertices[3]=i,this.vertices[4]=r+e.width,this.vertices[5]=i+e.height,this.vertices[6]=r,this.vertices[7]=i+e.height,this.upload()},i.prototype.upload=function(){var t=this.gl;t.bindBuffer(t.ARRAY_BUFFER,this.vertexBuffer),t.bufferSubData(t.ARRAY_BUFFER,0,this.vertices),t.bufferSubData(t.ARRAY_BUFFER,32,this.uvs),t.bufferSubData(t.ARRAY_BUFFER,64,this.colors)},i.prototype.destroy=function(){var t=this.gl;t.deleteBuffer(this.vertexBuffer),t.deleteBuffer(this.indexBuffer)},e.exports=i},{}],89:[function(t,e,r){var i=t("../../../math"),n=(t("../../../utils"),t("../../../const")),o=t("pixi-gl-core").GLTexture,s=t("pixi-gl-core").GLFramebuffer,a=t("./StencilMaskStack"),h=function(t,e,r,h,u,l){if(this.gl=t,this.frameBuffer=null,this.texture=null,this.clearColor=[0,0,0,0],this.size=new i.Rectangle(0,0,1,1),this.resolution=u||n.RESOLUTION,this.projectionMatrix=new i.Matrix,this.transform=null,this.frame=null,this.stencilBuffer=null,this.stencilMaskStack=new a,this.filterStack=[{renderTarget:this,filter:[],bounds:this.size}],this.scaleMode=h||n.SCALE_MODES.DEFAULT,this.root=l,this.frameBuffer=s.createRGBA(t,100,100),this.frameBuffer&&this.frameBuffer.unbind(),this.root)this.frameBuffer.framebuffer=null;else{var c=new o(t);c.enableLinearScaling(),c.enableWrapClamp(),this.frameBuffer.enableTexture(c),this.texture=c.texture}this.resize(e,r)};h.prototype.constructor=h,e.exports=h,h.prototype.clear=function(t){var e=t||this.clearColor;this.frameBuffer.clear(e[0],e[1],e[2],e[3])},h.prototype.attachStencilBuffer=function(){this.root||this.frameBuffer.enableStencil()},h.prototype.activate=function(){var t=this.gl;this.frameBuffer.bind();var e=this.frame||this.size;this.calculateProjection(e),this.transform&&this.projectionMatrix.append(this.transform),t.viewport(0,0,e.width*this.resolution,e.height*this.resolution)},h.prototype.calculateProjection=function(t){var e=this.projectionMatrix;e.identity(),this.root?(e.a=1/t.width*2,e.d=-1/t.height*2,e.tx=-1-t.x*e.a,e.ty=1-t.y*e.d):(e.a=1/t.width*2,e.d=1/t.height*2,e.tx=-1-t.x*e.a,e.ty=-1-t.y*e.d)},h.prototype.resize=function(t,e){if(t=0|t,e=0|e,this.size.width!==t||this.size.height!==e){this.size.width=t,this.size.height=e,this.frameBuffer.resize(t*this.resolution,e*this.resolution);var r=this.frame||this.size;this.calculateProjection(r)}},h.prototype.destroy=function(){this.gl;this.frameBuffer.destroy(),this.frameBuffer=null,this.texture=null}},{"../../../const":38,"../../../math":55,"../../../utils":105,"./StencilMaskStack":90,"pixi-gl-core":1}],90:[function(t,e,r){function i(){this.stencilStack=[],this.reverse=!0,this.count=0}i.prototype.constructor=i,e.exports=i},{}],91:[function(t,e,r){function i(t,e){return e=e||{},e[CONST.BLEND_MODES.NORMAL]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.ADD]=[t.SRC_ALPHA,t.DST_ALPHA],e[CONST.BLEND_MODES.MULTIPLY]=[t.DST_COLOR,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.SCREEN]=[t.SRC_ALPHA,t.ONE],e[CONST.BLEND_MODES.OVERLAY]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.DARKEN]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.LIGHTEN]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.COLOR_DODGE]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.COLOR_BURN]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.HARD_LIGHT]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.SOFT_LIGHT]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.DIFFERENCE]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.EXCLUSION]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.HUE]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.SATURATION]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.COLOR]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.LUMINOSITY]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e}CONST=t("../../../const"),e.exports=i},{"../../../const":38}],92:[function(t,e,r){function i(t,e){e=e||{},e[CONST.DRAW_MODES.POINTS]=t.POINTS,e[CONST.DRAW_MODES.LINES]=t.LINES,e[CONST.DRAW_MODES.LINE_LOOP]=t.LINE_LOOP,e[CONST.DRAW_MODES.LINE_STRIP]=t.LINE_STRIP,e[CONST.DRAW_MODES.TRIANGLES]=t.TRIANGLES,e[CONST.DRAW_MODES.TRIANGLE_STRIP]=t.TRIANGLE_STRIP,e[CONST.DRAW_MODES.TRIANGLE_FAN]=t.TRIANGLE_FAN}CONST=t("../../../const"),e.exports=i},{"../../../const":38}],93:[function(t,e,r){function i(t){s.call(this),this.anchor=new n.Point,this._texture=null,this._width=0,this._height=0,this.tint=16777215,this.blendMode=u.BLEND_MODES.NORMAL,this.shader=null,this.cachedTint=16777215,this.texture=t||o.EMPTY,this.textureDirty=!0,this.vertexDirty=!0,this.vertexData=new Float32Array(8)}var n=t("../math"),o=t("../textures/Texture"),s=t("../display/Container"),a=t("../renderers/canvas/utils/CanvasTinter"),h=t("../utils"),u=t("../const"),l=new n.Point;i.prototype=Object.create(s.prototype),i.prototype.constructor=i,e.exports=i,Object.defineProperties(i.prototype,{width:{get:function(){return Math.abs(this.scale.x)*this.texture._frame.width},set:function(t){var e=h.sign(this.scale.x)||1;this.scale.x=e*t/this.texture._frame.width,this._width=t}},height:{get:function(){return Math.abs(this.scale.y)*this.texture._frame.height},set:function(t){var e=h.sign(this.scale.y)||1;this.scale.y=e*t/this.texture._frame.height,this._height=t}},texture:{get:function(){return this._texture},set:function(t){this._texture!==t&&(this._texture=t,this.cachedTint=16777215,this.textureDirty=!0,t&&(t.baseTexture.hasLoaded?this._onTextureUpdate():t.once("update",this._onTextureUpdate,this)))}}}),i.prototype._onTextureUpdate=function(){this.textureDirty=!0,this._width&&(this.scale.x=h.sign(this.scale.x)*this._width/this.texture.frame.width),this._height&&(this.scale.y=h.sign(this.scale.y)*this._height/this.texture.frame.height)},i.prototype.caclulateVertices=function(){var t,e,r,i,n=this._texture,o=this.worldTransform,s=o.a,a=o.b,h=o.c,u=o.d,l=o.tx,c=o.ty,p=this.vertexData,d=n.trim;d?(e=d.x-this.anchor.x*d.width,t=e+n.crop.width,i=d.y-this.anchor.y*d.height,r=i+n.crop.height):(t=n._frame.width*(1-this.anchor.x),e=n._frame.width*-this.anchor.x,r=n._frame.height*(1-this.anchor.y),i=n._frame.height*-this.anchor.y),p[0]=s*e+h*i+l,p[1]=u*i+a*e+c,p[2]=s*t+h*i+l,p[3]=u*i+a*t+c,p[4]=s*t+h*r+l,p[5]=u*r+a*t+c,p[6]=s*e+h*r+l,p[7]=u*r+a*e+c},i.prototype._renderWebGL=function(t){this.textureDirty&&(this.textureDirty=!1,this._onTextureUpdate(),this.vertexDirty=!0),this.vertexDirty&&(this.vertexDirty=!1,this.caclulateVertices()),t.setObjectRenderer(t.plugins.sprite),t.plugins.sprite.render(this)},i.prototype.getBounds=function(t){if(!this._currentBounds){this.vertexDirty&&(this.vertexDirty=!1,this.caclulateVertices());var e,r,i,n,o=this.vertexData,s=o[0],a=o[1],h=o[2],u=o[3],l=o[4],c=o[5],p=o[6],d=o[7];if(e=s,e=e>h?h:e,e=e>l?l:e,e=e>p?p:e,i=a,i=i>u?u:i,i=i>c?c:i,i=i>d?d:i,r=s,r=h>r?h:r,r=l>r?l:r,r=p>r?p:r,n=a,n=u>n?u:n,n=c>n?c:n,n=d>n?d:n,this.children.length){var f=this.containerGetBounds();w0=f.x,w1=f.x+f.width,h0=f.y,h1=f.y+f.height,e=ew1?r:w1,n=n>h1?n:h1}var v=this._bounds;v.x=e,v.width=r-e,v.y=i,v.height=n-i,this._currentBounds=v}return this._currentBounds},i.prototype.getLocalBounds=function(){return this._bounds.x=-this._texture._frame.width*this.anchor.x,this._bounds.y=-this._texture._frame.height*this.anchor.y,this._bounds.width=this._texture._frame.width,this._bounds.height=this._texture._frame.height,this._bounds},i.prototype.containsPoint=function(t){this.worldTransform.applyInverse(t,l);var e,r=this._texture._frame.width,i=this._texture._frame.height,n=-r*this.anchor.x;return l.x>n&&l.xe&&l.y=this.size&&this.flush(),t.texture._uvs){var e,r=t.texture.baseTexture,i=this.currentGroup;if(this.currentTexture!==r){if(this.currentTexture=r,!r._enabled){if(r._enabled=!0,r._id=this.textureCount,this.textureCount===this.MAX_TEXTUES){for(e=0;e>16)+(65280&t.tint)+((255&t.tint)<<16)+(255*t.worldAlpha<<24),u=t.texture._uvs.uvs_uint32;s[n++]=a[0],s[n++]=a[1],this.uvs[n++]=u[0],o[n++]=h,s[n++]=r._id,s[n++]=a[2],s[n++]=a[3],this.uvs[n++]=u[1],o[n++]=h,s[n++]=r._id,s[n++]=a[4],s[n++]=a[5],this.uvs[n++]=u[2],o[n++]=h,s[n++]=r._id,s[n++]=a[6],s[n++]=a[7],this.uvs[n++]=u[3],o[n++]=h,s[n++]=r._id}},i.prototype.flush=function(){if(0!==this.currentIndex){var t=this.renderer.gl;this.currentGroup.size=this.currentIndex-this.currentGroup.start;for(var e=0;e.5*this.size)this.vertexBuffer.upload(this.vertices,0,!0);else{var r=this.positions.subarray(0,this.currentIndex*this.vertByteSize);this.vertexBuffer.upload(r,0,!0)}for(this.renderer.bindShader(this._shader),this.renderer.blendModeManager.setBlendMode(0),e=0;eu;u++)h[u]=u;return a.bind(),a.uniforms.uSamplers=h,a}function n(t){var e="vec4 getSampleFromArray(sampler2D textures[%%], int ndx, vec2 uv) {\n\nvec4 color;";e+="\n",e+="\n";for(var r=0;t>r;r++)r>0&&(e+="\nelse "),t-1>r&&(e+="if(ndx == "+r+")"),e+="\n{",e+="\n color = texture2D(textures["+r+"], uv);",e+="\n}";return e+="\n",e+="\n",e+="return color;",e+="\n}"}var o=t("pixi-gl-core").GLShader,s=["varying vec2 vTextureCoord;","varying vec4 vColor;","varying float vTextureId;","uniform sampler2D uSamplers[%%];","void main(void){","gl_FragColor = getSampleFromArray(uSamplers, int(vTextureId), vTextureCoord) * vColor;","}"].join("\n");e.exports=i},{"pixi-gl-core":1}],96:[function(t,e,r){function i(t,e,r){this.canvas=document.createElement("canvas"),this.context=this.canvas.getContext("2d"),this.resolution=r||h.RESOLUTION,this._text=null,this._style=null;var i=o.fromCanvas(this.canvas);i.trim=new s.Rectangle,n.call(this,i),this.text=t,this.style=e}var n=t("../sprites/Sprite"),o=t("../textures/Texture"),s=t("../math"),a=t("../utils"),h=t("../const");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.fontPropertiesCache={},i.fontPropertiesCanvas=document.createElement("canvas"),i.fontPropertiesContext=i.fontPropertiesCanvas.getContext("2d"),Object.defineProperties(i.prototype,{width:{get:function(){return this.dirty&&this.updateText(),this.scale.x*this._texture._frame.width},set:function(t){this.scale.x=t/this._texture._frame.width,this._width=t}},height:{get:function(){return this.dirty&&this.updateText(),this.scale.y*this._texture._frame.height},set:function(t){this.scale.y=t/this._texture._frame.height,this._height=t}},style:{get:function(){return this._style},set:function(t){t=t||{},"number"==typeof t.fill&&(t.fill=a.hex2string(t.fill)),"number"==typeof t.stroke&&(t.stroke=a.hex2string(t.stroke)),"number"==typeof t.dropShadowColor&&(t.dropShadowColor=a.hex2string(t.dropShadowColor)),t.font=t.font||"bold 20pt Arial",t.fill=t.fill||"black",t.align=t.align||"left",t.stroke=t.stroke||"black",t.strokeThickness=t.strokeThickness||0,t.wordWrap=t.wordWrap||!1,t.wordWrapWidth=t.wordWrapWidth||100,t.dropShadow=t.dropShadow||!1,t.dropShadowColor=t.dropShadowColor||"#000000",t.dropShadowAngle=void 0!==t.dropShadowAngle?t.dropShadowAngle:Math.PI/6,t.dropShadowDistance=void 0!==t.dropShadowDistance?t.dropShadowDistance:5,t.dropShadowBlur=void 0!==t.dropShadowBlur?t.dropShadowBlur:0,t.padding=t.padding||0,t.textBaseline=t.textBaseline||"alphabetic",t.lineJoin=t.lineJoin||"miter",t.miterLimit=t.miterLimit||10,this._style=t,this.dirty=!0}},text:{get:function(){return this._text},set:function(t){t=t.toString()||" ",this._text!==t&&(this._text=t,this.dirty=!0)}}}),i.prototype.updateText=function(){var t=this._style;this.context.font=t.font;for(var e=t.wordWrap?this.wordWrap(this._text):this._text,r=e.split(/(?:\r\n|\r|\n)/),i=new Array(r.length),n=0,o=this.determineFontProperties(t.font),s=0;s0?(this.context.shadowColor=t.dropShadowColor,this.context.shadowBlur=t.dropShadowBlur):this.context.fillStyle=t.dropShadowColor;var d=Math.cos(t.dropShadowAngle)*t.dropShadowDistance,f=Math.sin(t.dropShadowAngle)*t.dropShadowDistance;for(s=0;sh;h++){for(u=0;p>u;u+=4)if(255!==l[d+u]){f=!0;break}if(f)break;d+=p}for(e.ascent=s-h,d=c-p,f=!1,h=a;h>s;h--){for(u=0;p>u;u+=4)if(255!==l[d+u]){f=!0;break}if(f)break;d-=p}e.descent=h-s,e.fontSize=e.ascent+e.descent,i.fontPropertiesCache[t]=e}return e},i.prototype.wordWrap=function(t){for(var e="",r=t.split("\n"),i=this._style.wordWrapWidth,n=0;no?(a>0&&(e+="\n"),e+=s[a],o=i-h):(o-=u,e+=" "+s[a])}n0&&e>0,this.width=this._frame.width=this.crop.width=t,this.height=this._frame.height=this.crop.height=e,r&&(this.baseTexture.width=this.width,this.baseTexture.height=this.height),this.valid&&(this.textureBuffer.resize(this.width,this.height),this.filterManager&&this.filterManager.resize(this.width,this.height)))},i.prototype.clear=function(){this.valid&&(this.renderer.type===l.RENDERER_TYPE.WEBGL&&this.renderer.gl.bindFramebuffer(this.renderer.gl.FRAMEBUFFER,this.textureBuffer.frameBuffer),this.textureBuffer.clear())},i.prototype.renderWebGL=function(t,e,r,i){if(this.valid){if(i=void 0!==i?i:!0,this.textureBuffer.transform=e,this.textureBuffer.activate(),t.worldAlpha=1,i){t.worldTransform.identity(),t.currentBounds=null;var n,o,s=t.children;for(n=0,o=s.length;o>n;++n)s[n].updateTransform()}var a=this.renderer.filterManager;this.renderer.filterManager=this.filterManager,this.renderer.renderDisplayObject(t,this.textureBuffer,r),this.renderer.filterManager=a}},i.prototype.renderCanvas=function(t,e,r,i){if(this.valid){i=!!i;var n=c;n.identity(),e&&n.append(e);var o=t.worldTransform;t.worldTransform=n,t.worldAlpha=1;var s,a,h=t.children;for(s=0,a=h.length;a>s;++s)h[s].updateTransform();r&&this.textureBuffer.clear();var u=this.textureBuffer.context,l=this.renderer.resolution;this.renderer.resolution=this.resolution,this.renderer.renderDisplayObject(t,u),this.renderer.resolution=l,t.worldTransform===n&&(t.worldTransform=o)}},i.prototype.destroy=function(){o.prototype.destroy.call(this,!0),this.textureBuffer.destroy(),this.filterManager&&this.filterManager.destroy(),this.renderer=null},i.prototype.getImage=function(){var t=new Image;return t.src=this.getBase64(),t},i.prototype.getBase64=function(){return this.getCanvas().toDataURL()},i.prototype.getCanvas=function(){if(this.renderer.type===l.RENDERER_TYPE.WEBGL){var t=this.renderer.gl,e=this.textureBuffer.size.width,r=this.textureBuffer.size.height,i=new Uint8Array(4*e*r);t.bindFramebuffer(t.FRAMEBUFFER,this.textureBuffer.frameBuffer),t.readPixels(0,0,e,r,t.RGBA,t.UNSIGNED_BYTE,i),t.bindFramebuffer(t.FRAMEBUFFER,null);var n=new h(e,r),o=n.context.getImageData(0,0,e,r);return o.data.set(i),n.context.putImageData(o,0,0),n.canvas}return this.textureBuffer.canvas},i.prototype.getPixels=function(){var t,e;if(this.renderer.type===l.RENDERER_TYPE.WEBGL){var r=this.renderer.gl;t=this.textureBuffer.size.width,e=this.textureBuffer.size.height;var i=new Uint8Array(4*t*e);return r.bindFramebuffer(r.FRAMEBUFFER,this.textureBuffer.frameBuffer),r.readPixels(0,0,t,e,r.RGBA,r.UNSIGNED_BYTE,i),r.bindFramebuffer(r.FRAMEBUFFER,null),i}return t=this.textureBuffer.canvas.width,e=this.textureBuffer.canvas.height,this.textureBuffer.canvas.getContext("2d").getImageData(0,0,t,e).data},i.prototype.getPixel=function(t,e){if(this.renderer.type===l.RENDERER_TYPE.WEBGL){var r=this.renderer.gl,i=new Uint8Array(4);return r.bindFramebuffer(r.FRAMEBUFFER,this.textureBuffer.frameBuffer),r.readPixels(t,e,1,1,r.RGBA,r.UNSIGNED_BYTE,i),r.bindFramebuffer(r.FRAMEBUFFER,null),i}return this.textureBuffer.canvas.getContext("2d").getImageData(t,e,1,1).data}},{"../const":38,"../math":55,"../renderers/canvas/utils/CanvasBuffer":67,"../renderers/webgl/managers/FilterManager":77,"../renderers/webgl/utils/RenderTarget":89,"./BaseTexture":97,"./Texture":99}],99:[function(t,e,r){function i(t,e,r,n,o){a.call(this),this.noFrame=!1,e||(this.noFrame=!0,e=new h.Rectangle(0,0,1,1)),t instanceof i&&(t=t.baseTexture),this.baseTexture=t,this._frame=e,this.trim=n,this.valid=!1,this.requiresUpdate=!1,this._uvs=null,this.width=0,this.height=0,this.crop=r||e,this.rotate=!!o,t.hasLoaded?(this.noFrame&&(e=new h.Rectangle(0,0,t.width,t.height),t.on("update",this.onBaseTextureUpdated,this)),this.frame=e):t.once("loaded",this.onBaseTextureLoaded,this)}var n=t("./BaseTexture"),o=t("./VideoBaseTexture"),s=t("./TextureUvs"),a=t("eventemitter3"),h=t("../math"),u=t("../utils");i.prototype=Object.create(a.prototype),i.prototype.constructor=i,e.exports=i,Object.defineProperties(i.prototype,{frame:{get:function(){return this._frame},set:function(t){if(this._frame=t,this.noFrame=!1,this.width=t.width,this.height=t.height,!this.trim&&!this.rotate&&(t.x+t.width>this.baseTexture.width||t.y+t.height>this.baseTexture.height))throw new Error("Texture Error: frame does not fit inside the base Texture dimensions "+this);this.valid=t&&t.width&&t.height&&this.baseTexture.hasLoaded,this.trim?(this.width=this.trim.width,this.height=this.trim.height,this._frame.width=this.trim.width,this._frame.height=this.trim.height):this.crop=t,this.valid&&this._updateUvs()}}}),i.prototype.update=function(){this.baseTexture.update()},i.prototype.onBaseTextureLoaded=function(t){this.noFrame?this.frame=new h.Rectangle(0,0,t.width,t.height):this.frame=this._frame,this.emit("update",this)},i.prototype.onBaseTextureUpdated=function(t){this._frame.width=t.width,this._frame.height=t.height,this.emit("update",this)},i.prototype.destroy=function(t){this.baseTexture&&(t&&this.baseTexture.destroy(),this.baseTexture.off("update",this.onBaseTextureUpdated,this),this.baseTexture.off("loaded",this.onBaseTextureLoaded,this),this.baseTexture=null),this._frame=null,this._uvs=null,this.trim=null,this.crop=null,this.valid=!1,this.off("dispose",this.dispose,this),this.off("update",this.update,this)},i.prototype.clone=function(){return new i(this.baseTexture,this.frame,this.crop,this.trim,this.rotate)},i.prototype._updateUvs=function(){this._uvs||(this._uvs=new s),this._uvs.set(this.crop,this.baseTexture,this.rotate)},i.fromImage=function(t,e,r){var o=u.TextureCache[t];return o||(o=new i(n.fromImage(t,e,r)),u.TextureCache[t]=o),o},i.fromFrame=function(t){var e=u.TextureCache[t];if(!e)throw new Error('The frameId "'+t+'" does not exist in the texture cache');return e},i.fromCanvas=function(t,e){return new i(n.fromCanvas(t,e))},i.fromVideo=function(t,e){return"string"==typeof t?i.fromVideoUrl(t,e):new i(o.fromVideo(t,e))},i.fromVideoUrl=function(t,e){return new i(o.fromUrl(t,e))},i.addTextureToCache=function(t,e){u.TextureCache[e]=t},i.removeTextureFromCache=function(t){var e=u.TextureCache[t];return delete u.TextureCache[t],delete u.BaseTextureCache[t],e},i.EMPTY=new i(new n)},{"../math":55,"../utils":105,"./BaseTexture":97,"./TextureUvs":100,"./VideoBaseTexture":101,eventemitter3:25}],100:[function(t,e,r){function i(){this.x0=0,this.y0=0,this.x1=1,this.y1=0,this.x2=1,this.y2=1,this.x3=0,this.y3=1,this.xy0_uint32=0,this.xy1_uint32=0,this.xy2_uint32=0,this.xy3_uint32=0,this.uvs_uint32=new Uint32Array(4)}e.exports=i,i.prototype.set=function(t,e,r){var i=e.width,n=e.height;r?(this.x0=(t.x+t.height)/i,this.y0=t.y/n,this.x1=(t.x+t.height)/i,this.y1=(t.y+t.width)/n,this.x2=t.x/i,this.y2=(t.y+t.width)/n,this.x3=t.x/i,this.y3=t.y/n):(this.x0=t.x/i,this.y0=t.y/n,this.x1=(t.x+t.width)/i,this.y1=t.y/n,this.x2=(t.x+t.width)/i,this.y2=(t.y+t.height)/n,this.x3=t.x/i,this.y3=(t.y+t.height)/n),this.uvs_uint32[0]=(65535*this.y0&65535)<<16|65535*this.x0&65535,this.uvs_uint32[1]=(65535*this.y1&65535)<<16|65535*this.x1&65535,this.uvs_uint32[2]=(65535*this.y2&65535)<<16|65535*this.x2&65535,this.uvs_uint32[3]=(65535*this.y3&65535)<<16|65535*this.x3&65535}},{}],101:[function(t,e,r){function i(t,e){if(!t)throw new Error("No video source element specified.");(t.readyState===t.HAVE_ENOUGH_DATA||t.readyState===t.HAVE_FUTURE_DATA)&&t.width&&t.height&&(t.complete=!0),o.call(this,t,e),this.autoUpdate=!1,this._onUpdate=this._onUpdate.bind(this),this._onCanPlay=this._onCanPlay.bind(this),t.complete||(t.addEventListener("canplay",this._onCanPlay),t.addEventListener("canplaythrough",this._onCanPlay),t.addEventListener("play",this._onPlayStart.bind(this)),t.addEventListener("pause",this._onPlayStop.bind(this))),this.__loaded=!1}function n(t,e){e||(e="video/"+t.substr(t.lastIndexOf(".")+1));var r=document.createElement("source");return r.src=t,r.type=e,r}var o=t("./BaseTexture"),s=t("../utils");i.prototype=Object.create(o.prototype),i.prototype.constructor=i,e.exports=i,i.prototype._onUpdate=function(){this.autoUpdate&&(window.requestAnimationFrame(this._onUpdate),this.update())},i.prototype._onPlayStart=function(){this.autoUpdate||(window.requestAnimationFrame(this._onUpdate),this.autoUpdate=!0)},i.prototype._onPlayStop=function(){this.autoUpdate=!1},i.prototype._onCanPlay=function(){this.hasLoaded=!0,this.source&&(this.source.removeEventListener("canplay",this._onCanPlay),this.source.removeEventListener("canplaythrough",this._onCanPlay),this.width=this.source.videoWidth,this.height=this.source.videoHeight,this.source.play(),this.__loaded||(this.__loaded=!0,this.emit("loaded",this)))},i.prototype.destroy=function(){this.source&&this.source._pixiId&&(delete s.BaseTextureCache[this.source._pixiId],delete this.source._pixiId),o.prototype.destroy.call(this)},i.fromVideo=function(t,e){t._pixiId||(t._pixiId="video_"+s.uid());var r=s.BaseTextureCache[t._pixiId];return r||(r=new i(t,e),s.BaseTextureCache[t._pixiId]=r),r},i.fromUrl=function(t,e){var r=document.createElement("video");if(Array.isArray(t))for(var o=0;othis._maxElapsedMS&&(e=this._maxElapsedMS),this.deltaTime=e*n.TARGET_FPMS*this.speed,this._emitter.emit(s,this.deltaTime),this.lastTime=t},e.exports=i},{"../const":38,eventemitter3:25}],103:[function(t,e,r){var i=t("./Ticker"),n=new i;n.autoStart=!0,e.exports={shared:n,Ticker:i}},{"./Ticker":102}],104:[function(t,e,r){var i=function(t){for(var e=6*t,r=new Uint16Array(e),i=0,n=0;e>i;i+=6,n+=4)r[i+0]=n+0,r[i+1]=n+1,r[i+2]=n+2,r[i+3]=n+0,r[i+4]=n+2,r[i+5]=n+3;return r};e.exports=i},{}],105:[function(t,e,r){var i=t("../const"),n=e.exports={_uid:0,_saidHello:!1,EventEmitter:t("eventemitter3"),pluginTarget:t("./pluginTarget"),async:t("async"),uid:function(){return++n._uid},hex2rgb:function(t,e){return e=e||[],e[0]=(t>>16&255)/255,e[1]=(t>>8&255)/255,e[2]=(255&t)/255,e},hex2string:function(t){return t=t.toString(16),t="000000".substr(0,6-t.length)+t,"#"+t},rgb2hex:function(t){return(255*t[0]<<16)+(255*t[1]<<8)+255*t[2]},canUseNewCanvasBlendModes:function(){if("undefined"==typeof document)return!1;var t="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAQAAAABAQMAAADD8p2OAAAAA1BMVEX/",e="AAAACklEQVQI12NgAAAAAgAB4iG8MwAAAABJRU5ErkJggg==",r=new Image;r.src=t+"AP804Oa6"+e;var i=new Image;i.src=t+"/wCKxvRF"+e;var n=document.createElement("canvas");n.width=6,n.height=1;var o=n.getContext("2d");o.globalCompositeOperation="multiply",o.drawImage(r,0,0),o.drawImage(i,2,0);var s=o.getImageData(2,0,1,1).data;return 255===s[0]&&0===s[1]&&0===s[2]},getNextPowerOfTwo:function(t){if(t>0&&0===(t&t-1))return t;for(var e=1;t>e;)e<<=1;return e},isPowerOfTwo:function(t,e){return t>0&&0===(t&t-1)&&e>0&&0===(e&e-1)},getResolutionOfUrl:function(t){var e=i.RETINA_PREFIX.exec(t);return e?parseFloat(e[1]):1},sayHello:function(t){if(!n._saidHello){if(navigator.userAgent.toLowerCase().indexOf("chrome")>-1){var e=["\n %c %c %c Pixi.js "+i.VERSION+" - ✰ "+t+" ✰ %c %c http://www.pixijs.com/ %c %c ♥%c♥%c♥ \n\n","background: #ff66a5; padding:5px 0;","background: #ff66a5; padding:5px 0;","color: #ff66a5; background: #030307; padding:5px 0;","background: #ff66a5; padding:5px 0;","background: #ffc3dc; padding:5px 0;","background: #ff66a5; padding:5px 0;","color: #ff2424; background: #fff; padding:5px 0;","color: #ff2424; background: #fff; padding:5px 0;","color: #ff2424; background: #fff; padding:5px 0;"];window.console.log.apply(console,e)}else window.console&&window.console.log("Pixi.js "+i.VERSION+" - "+t+" - http://www.pixijs.com/");n._saidHello=!0}},isWebGLSupported:function(){var t={stencil:!0};try{if(!window.WebGLRenderingContext)return!1;var e=document.createElement("canvas"),r=e.getContext("webgl",t)||e.getContext("experimental-webgl",t);return!(!r||!r.getContextAttributes().stencil)}catch(i){return!1}},sign:function(t){return t?0>t?-1:1:0},removeItems:function(t,e,r){var i=t.length;if(!(e>=i||0===r)){r=e+r>i?i-e:r;for(var n=e,o=i-r;o>n;++n)t[n]=t[n+r];t.length=o}},TextureCache:{},BaseTextureCache:{}}},{"../const":38,"./pluginTarget":106,async:16,eventemitter3:25}],106:[function(t,e,r){function i(t){t.__plugins={},t.registerPlugin=function(e,r){t.__plugins[e]=r},t.prototype.initPlugins=function(){this.plugins=this.plugins||{};for(var e in t.__plugins)this.plugins[e]=new t.__plugins[e](this)},t.prototype.destroyPlugins=function(){for(var t in this.plugins)this.plugins[t].destroy(),this.plugins[t]=null;this.plugins=null}}e.exports={mixin:function(t){i(t)}}},{}],107:[function(t,e,r){var i=t("./core"),n=t("./mesh"),o=t("./extras"),s=t("./filters");i.SpriteBatch=function(){throw new ReferenceError("SpriteBatch does not exist any more, please use the new ParticleContainer instead.")},i.AssetLoader=function(){throw new ReferenceError("The loader system was overhauled in pixi v3, please see the new PIXI.loaders.Loader class.")},Object.defineProperties(i,{Stage:{get:function(){return console.warn("You do not need to use a PIXI Stage any more, you can simply render any container."),i.Container}},DisplayObjectContainer:{get:function(){return console.warn("DisplayObjectContainer has been shortened to Container, please use Container from now on."),i.Container}},Strip:{get:function(){return console.warn("The Strip class has been renamed to Mesh and moved to mesh.Mesh, please use mesh.Mesh from now on."),n.Mesh}},Rope:{get:function(){return console.warn("The Rope class has been moved to mesh.Rope, please use mesh.Rope from now on."),n.Rope}},MovieClip:{get:function(){return console.warn("The MovieClip class has been moved to extras.MovieClip, please use extras.MovieClip from now on."),o.MovieClip}},TilingSprite:{get:function(){return console.warn("The TilingSprite class has been moved to extras.TilingSprite, please use extras.TilingSprite from now on."),o.TilingSprite}},BitmapText:{get:function(){return console.warn("The BitmapText class has been moved to extras.BitmapText, please use extras.BitmapText from now on."),o.BitmapText}},blendModes:{get:function(){return console.warn("The blendModes has been moved to BLEND_MODES, please use BLEND_MODES from now on."),i.BLEND_MODES}},scaleModes:{get:function(){return console.warn("The scaleModes has been moved to SCALE_MODES, please use SCALE_MODES from now on."),i.SCALE_MODES}},BaseTextureCache:{get:function(){return console.warn("The BaseTextureCache class has been moved to utils.BaseTextureCache, please use utils.BaseTextureCache from now on."),i.utils.BaseTextureCache}},TextureCache:{get:function(){return console.warn("The TextureCache class has been moved to utils.TextureCache, please use utils.TextureCache from now on."),i.utils.TextureCache}},math:{get:function(){return console.warn("The math namespace is deprecated, please access members already accessible on PIXI."),i}}}),i.Sprite.prototype.setTexture=function(t){this.texture=t,console.warn("setTexture is now deprecated, please use the texture property, e.g : sprite.texture = texture;")},o.BitmapText.prototype.setText=function(t){this.text=t,console.warn("setText is now deprecated, please use the text property, e.g : myBitmapText.text = 'my text';")},i.Text.prototype.setText=function(t){this.text=t,console.warn("setText is now deprecated, please use the text property, e.g : myText.text = 'my text';")},i.Text.prototype.setStyle=function(t){this.style=t,console.warn("setStyle is now deprecated, please use the style property, e.g : myText.style = style;")},i.Texture.prototype.setFrame=function(t){this.frame=t,console.warn("setFrame is now deprecated, please use the frame property, e.g : myTexture.frame = frame;")},Object.defineProperties(s,{AbstractFilter:{get:function(){return console.warn("filters.AbstractFilter is an undocumented alias, please use AbstractFilter from now on."),i.AbstractFilter}},FXAAFilter:{get:function(){return console.warn("filters.FXAAFilter is an undocumented alias, please use FXAAFilter from now on."),i.FXAAFilter}},SpriteMaskFilter:{get:function(){return console.warn("filters.SpriteMaskFilter is an undocumented alias, please use SpriteMaskFilter from now on."),i.SpriteMaskFilter}}}),i.utils.uuid=function(){return console.warn("utils.uuid() is deprecated, please use utils.uid() from now on."),i.utils.uid()}},{"./core":52,"./extras":114,"./filters":131,"./mesh":156}],108:[function(t,e,r){function i(t,e){n.Container.call(this),e=e||{},this.textWidth=0,this.textHeight=0,this._glyphs=[],this._font={tint:void 0!==e.tint?e.tint:16777215,align:e.align||"left",name:null,size:0},this.font=e.font,this._text=t,this.maxWidth=0,this.maxLineHeight=0,this.dirty=!1,this.updateText()}var n=t("../core");i.prototype=Object.create(n.Container.prototype),i.prototype.constructor=i,e.exports=i,Object.defineProperties(i.prototype,{tint:{get:function(){return this._font.tint},set:function(t){this._font.tint="number"==typeof t&&t>=0?t:16777215,this.dirty=!0}},align:{get:function(){return this._font.align},set:function(t){this._font.align=t||"left",this.dirty=!0}},font:{get:function(){return this._font},set:function(t){t&&("string"==typeof t?(t=t.split(" "),this._font.name=1===t.length?t[0]:t.slice(1).join(" "),this._font.size=t.length>=2?parseInt(t[0],10):i.fonts[this._font.name].size):(this._font.name=t.name,this._font.size="number"==typeof t.size?t.size:parseInt(t.size,10)),this.dirty=!0)}},text:{get:function(){return this._text},set:function(t){t=t.toString()||" ",this._text!==t&&(this._text=t,this.dirty=!0)}}}),i.prototype.updateText=function(){for(var t=i.fonts[this._font.name],e=new n.Point,r=null,o=[],s=0,a=0,h=[],u=0,l=this._font.size/t.size,c=-1,p=0,d=0;d0&&e.x*l>this.maxWidth)n.utils.removeItems(o,c,d-c),d=c,c=-1,h.push(s),a=Math.max(a,s),u++,e.x=0,e.y+=t.lineHeight,r=null;else{var v=t.chars[f];v&&(r&&v.kerning[r]&&(e.x+=v.kerning[r]),o.push({texture:v.texture,line:u,charCode:f,position:new n.Point(e.x+v.xOffset,e.y+v.yOffset)}),s=e.x+(v.texture.width+v.xOffset),e.x+=v.xAdvance,p=Math.max(p,v.yOffset+v.texture.height),r=f)}}h.push(s),a=Math.max(a,s);var g=[];for(d=0;u>=d;d++){var m=0;"right"===this._font.align?m=a-h[d]:"center"===this._font.align&&(m=(a-h[d])/2),g.push(m)}var y=o.length,x=this.tint;for(d=0;y>d;d++){var b=this._glyphs[d];b?b.texture=o[d].texture:(b=new n.Sprite(o[d].texture),this._glyphs.push(b)),b.position.x=(o[d].position.x+g[o[d].line])*l,b.position.y=o[d].position.y*l, +b.scale.x=b.scale.y=l,b.tint=x,b.parent||this.addChild(b)}for(d=y;dt&&(t+=this._textures.length),t}}}),i.prototype.stop=function(){this.playing&&(this.playing=!1,n.ticker.shared.remove(this.update,this))},i.prototype.play=function(){this.playing||(this.playing=!0,n.ticker.shared.add(this.update,this))},i.prototype.gotoAndStop=function(t){this.stop(),this._currentTime=t,this._texture=this._textures[this.currentFrame]},i.prototype.gotoAndPlay=function(t){this._currentTime=t,this.play()},i.prototype.update=function(t){var e=this.animationSpeed*t;if(null!==this._durations){var r=this._currentTime%1*this._durations[this.currentFrame];for(r+=e/60*1e3;0>r;)this._currentTime--,r+=this._durations[this.currentFrame];var i=Math.sign(this.animationSpeed*t);for(this._currentTime=Math.floor(this._currentTime);r>=this._durations[this.currentFrame];)r-=this._durations[this.currentFrame]*i,this._currentTime+=i;this._currentTime+=r/this._durations[this.currentFrame]}else this._currentTime+=e;this._currentTime<0&&!this.loop?(this.gotoAndStop(0),this.onComplete&&this.onComplete()):this._currentTime>=this._textures.length&&!this.loop?(this.gotoAndStop(this._textures.length-1),this.onComplete&&this.onComplete()):this._texture=this._textures[this.currentFrame]},i.prototype.destroy=function(){this.stop(),n.Sprite.prototype.destroy.call(this)},i.fromFrames=function(t){for(var e=[],r=0;rx?x:t,t=t>_?_:t,t=t>E?E:t,r=y,r=r>b?b:r,r=r>T?T:r,r=r>S?S:r,e=m,e=x>e?x:e,e=_>e?_:e,e=E>e?E:e,i=y,i=b>i?b:i,i=T>i?T:i,i=S>i?S:i;var w=this._bounds;return w.x=t,w.width=e-t,w.y=r,w.height=i-r,this._currentBounds=w,w},i.prototype.containsPoint=function(t){this.worldTransform.applyInverse(t,o);var e,r=this._width,i=this._height,n=-r*this.anchor.x;return o.x>n&&o.xe&&o.y 0.2) n = 65600.0; // :\n if (gray > 0.3) n = 332772.0; // *\n if (gray > 0.4) n = 15255086.0; // o\n if (gray > 0.5) n = 23385164.0; // &\n if (gray > 0.6) n = 15252014.0; // 8\n if (gray > 0.7) n = 13199452.0; // @\n if (gray > 0.8) n = 11512810.0; // #\n\n vec2 p = mod( uv / ( pixelSize * 0.5 ), 2.0) - vec2(1.0);\n col = col * character(n, p);\n\n gl_FragColor = vec4(col, 1.0);\n}\n",{dimensions:{type:"4fv",value:new Float32Array([0,0,0,0])},pixelSize:{type:"1f",value:8}})}var n=t("../../core");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i,Object.defineProperties(i.prototype,{size:{get:function(){return this.uniforms.pixelSize.value},set:function(t){this.uniforms.pixelSize.value=t}}})},{"../../core":52}],116:[function(t,e,r){function i(){n.AbstractFilter.call(this),this.blurXFilter=new o,this.blurYFilter=new s,this.defaultFilter=new n.AbstractFilter}var n=t("../../core"),o=t("../blur/BlurXFilter"),s=t("../blur/BlurYFilter");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.applyFilter=function(t,e,r){var i=t.filterManager.getRenderTarget(!0);this.defaultFilter.applyFilter(t,e,r),this.blurXFilter.applyFilter(t,e,i),t.blendModeManager.setBlendMode(n.BLEND_MODES.SCREEN),this.blurYFilter.applyFilter(t,i,r),t.blendModeManager.setBlendMode(n.BLEND_MODES.NORMAL),t.filterManager.returnRenderTarget(i)},Object.defineProperties(i.prototype,{blur:{get:function(){return this.blurXFilter.blur},set:function(t){this.blurXFilter.blur=this.blurYFilter.blur=t}},blurX:{get:function(){return this.blurXFilter.blur},set:function(t){this.blurXFilter.blur=t}},blurY:{get:function(){return this.blurYFilter.blur},set:function(t){this.blurYFilter.blur=t}}})},{"../../core":52,"../blur/BlurXFilter":119,"../blur/BlurYFilter":120}],117:[function(t,e,r){function i(t,e){n.AbstractFilter.call(this,"attribute vec2 aVertexPosition;\nattribute vec2 aTextureCoord;\nattribute vec4 aColor;\n\nuniform float strength;\nuniform float dirX;\nuniform float dirY;\nuniform mat3 projectionMatrix;\n\nvarying vec2 vTextureCoord;\nvarying vec4 vColor;\nvarying vec2 vBlurTexCoords[3];\n\nvoid main(void)\n{\n gl_Position = vec4((projectionMatrix * vec3((aVertexPosition), 1.0)).xy, 0.0, 1.0);\n vTextureCoord = aTextureCoord;\n\n vBlurTexCoords[0] = aTextureCoord + vec2( (0.004 * strength) * dirX, (0.004 * strength) * dirY );\n vBlurTexCoords[1] = aTextureCoord + vec2( (0.008 * strength) * dirX, (0.008 * strength) * dirY );\n vBlurTexCoords[2] = aTextureCoord + vec2( (0.012 * strength) * dirX, (0.012 * strength) * dirY );\n\n vColor = vec4(aColor.rgb * aColor.a, aColor.a);\n}\n","precision lowp float;\n\nvarying vec2 vTextureCoord;\nvarying vec2 vBlurTexCoords[3];\nvarying vec4 vColor;\n\nuniform sampler2D uSampler;\n\nvoid main(void)\n{\n gl_FragColor = vec4(0.0);\n\n gl_FragColor += texture2D(uSampler, vTextureCoord ) * 0.3989422804014327;\n gl_FragColor += texture2D(uSampler, vBlurTexCoords[ 0]) * 0.2419707245191454;\n gl_FragColor += texture2D(uSampler, vBlurTexCoords[ 1]) * 0.05399096651318985;\n gl_FragColor += texture2D(uSampler, vBlurTexCoords[ 2]) * 0.004431848411938341;\n}\n",{strength:{type:"1f",value:1},dirX:{type:"1f",value:t||0},dirY:{type:"1f",value:e||0}}),this.defaultFilter=new n.AbstractFilter,this.passes=1,this.dirX=t||0,this.dirY=e||0,this.strength=4}var n=t("../../core");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.applyFilter=function(t,e,r,i){var n=this.getShader(t);if(this.uniforms.strength.value=this.strength/4/this.passes*(e.frame.width/e.size.width),1===this.passes)t.filterManager.applyFilter(n,e,r,i);else{var o=t.filterManager.getRenderTarget(!0);t.filterManager.applyFilter(n,e,o,i);for(var s=0;s>16&255)/255,s=(r>>8&255)/255,a=(255&r)/255,h=(i>>16&255)/255,u=(i>>8&255)/255,l=(255&i)/255,c=[.3,.59,.11,0,0,o,s,a,t,0,h,u,l,e,0,o-h,s-u,a-l,0,0];this._loadMatrix(c,n)},i.prototype.night=function(t,e){t=t||.1;var r=[-2*t,-t,0,0,0,-t,0,t,0,0,0,t,2*t,0,0,0,0,0,1,0];this._loadMatrix(r,e)},i.prototype.predator=function(t,e){var r=[11.224130630493164*t,-4.794486999511719*t,-2.8746118545532227*t,0*t,.40342438220977783*t,-3.6330697536468506*t,9.193157196044922*t,-2.951810836791992*t,0*t,-1.316135048866272*t,-3.2184197902679443*t,-4.2375030517578125*t,7.476448059082031*t,0*t,.8044459223747253*t,0,0,0,1,0];this._loadMatrix(r,e)},i.prototype.lsd=function(t){var e=[2,-.4,.5,0,0,-.5,2,-.4,0,0,-.4,-.5,3,0,0,0,0,0,1,0];this._loadMatrix(e,t)},i.prototype.reset=function(){var t=[1,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,1,0];this._loadMatrix(t,!1)},Object.defineProperties(i.prototype,{matrix:{get:function(){return this.uniforms.m.value},set:function(t){this.uniforms.m.value=t}}})},{"../../core":52}],123:[function(t,e,r){function i(){n.AbstractFilter.call(this,null,"precision mediump float;\n\nvarying vec2 vTextureCoord;\n\nuniform sampler2D uSampler;\nuniform float step;\n\nvoid main(void)\n{\n vec4 color = texture2D(uSampler, vTextureCoord);\n\n color = floor(color * step) / step;\n\n gl_FragColor = color;\n}\n",{step:{type:"1f",value:5}})}var n=t("../../core");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i,Object.defineProperties(i.prototype,{step:{get:function(){return this.uniforms.step.value},set:function(t){this.uniforms.step.value=t}}})},{"../../core":52}],124:[function(t,e,r){function i(t,e,r){n.AbstractFilter.call(this,null,"precision mediump float;\n\nvarying mediump vec2 vTextureCoord;\n\nuniform sampler2D uSampler;\nuniform vec2 texelSize;\nuniform float matrix[9];\n\nvoid main(void)\n{\n vec4 c11 = texture2D(uSampler, vTextureCoord - texelSize); // top left\n vec4 c12 = texture2D(uSampler, vec2(vTextureCoord.x, vTextureCoord.y - texelSize.y)); // top center\n vec4 c13 = texture2D(uSampler, vec2(vTextureCoord.x + texelSize.x, vTextureCoord.y - texelSize.y)); // top right\n\n vec4 c21 = texture2D(uSampler, vec2(vTextureCoord.x - texelSize.x, vTextureCoord.y)); // mid left\n vec4 c22 = texture2D(uSampler, vTextureCoord); // mid center\n vec4 c23 = texture2D(uSampler, vec2(vTextureCoord.x + texelSize.x, vTextureCoord.y)); // mid right\n\n vec4 c31 = texture2D(uSampler, vec2(vTextureCoord.x - texelSize.x, vTextureCoord.y + texelSize.y)); // bottom left\n vec4 c32 = texture2D(uSampler, vec2(vTextureCoord.x, vTextureCoord.y + texelSize.y)); // bottom center\n vec4 c33 = texture2D(uSampler, vTextureCoord + texelSize); // bottom right\n\n gl_FragColor =\n c11 * matrix[0] + c12 * matrix[1] + c13 * matrix[2] +\n c21 * matrix[3] + c22 * matrix[4] + c23 * matrix[5] +\n c31 * matrix[6] + c32 * matrix[7] + c33 * matrix[8];\n\n gl_FragColor.a = c22.a;\n}\n",{ +matrix:{type:"1fv",value:new Float32Array(t)},texelSize:{type:"v2",value:{x:1/e,y:1/r}}})}var n=t("../../core");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i,Object.defineProperties(i.prototype,{matrix:{get:function(){return this.uniforms.matrix.value},set:function(t){this.uniforms.matrix.value=new Float32Array(t)}},width:{get:function(){return 1/this.uniforms.texelSize.value.x},set:function(t){this.uniforms.texelSize.value.x=1/t}},height:{get:function(){return 1/this.uniforms.texelSize.value.y},set:function(t){this.uniforms.texelSize.value.y=1/t}}})},{"../../core":52}],125:[function(t,e,r){function i(){n.AbstractFilter.call(this,null,"precision mediump float;\n\nvarying vec2 vTextureCoord;\n\nuniform sampler2D uSampler;\n\nvoid main(void)\n{\n float lum = length(texture2D(uSampler, vTextureCoord.xy).rgb);\n\n gl_FragColor = vec4(1.0, 1.0, 1.0, 1.0);\n\n if (lum < 1.00)\n {\n if (mod(gl_FragCoord.x + gl_FragCoord.y, 10.0) == 0.0)\n {\n gl_FragColor = vec4(0.0, 0.0, 0.0, 1.0);\n }\n }\n\n if (lum < 0.75)\n {\n if (mod(gl_FragCoord.x - gl_FragCoord.y, 10.0) == 0.0)\n {\n gl_FragColor = vec4(0.0, 0.0, 0.0, 1.0);\n }\n }\n\n if (lum < 0.50)\n {\n if (mod(gl_FragCoord.x + gl_FragCoord.y - 5.0, 10.0) == 0.0)\n {\n gl_FragColor = vec4(0.0, 0.0, 0.0, 1.0);\n }\n }\n\n if (lum < 0.3)\n {\n if (mod(gl_FragCoord.x - gl_FragCoord.y - 5.0, 10.0) == 0.0)\n {\n gl_FragColor = vec4(0.0, 0.0, 0.0, 1.0);\n }\n }\n}\n")}var n=t("../../core");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i},{"../../core":52}],126:[function(t,e,r){function i(t,e){var r=new n.Matrix;t.renderable=!1,n.AbstractFilter.call(this,"attribute vec2 aVertexPosition;\nattribute vec2 aTextureCoord;\nattribute vec4 aColor;\n\nuniform mat3 projectionMatrix;\nuniform mat3 otherMatrix;\n\nvarying vec2 vMapCoord;\nvarying vec2 vTextureCoord;\nvarying vec4 vColor;\n\nvoid main(void)\n{\n gl_Position = vec4((projectionMatrix * vec3(aVertexPosition, 1.0)).xy, 0.0, 1.0);\n vTextureCoord = aTextureCoord;\n vMapCoord = ( otherMatrix * vec3( aTextureCoord, 1.0) ).xy;\n vColor = vec4(aColor.rgb * aColor.a, aColor.a);\n}\n","precision mediump float;\n\nvarying vec2 vMapCoord;\nvarying vec2 vTextureCoord;\nvarying vec4 vColor;\n\nuniform vec2 scale;\n\nuniform sampler2D uSampler;\nuniform sampler2D mapSampler;\n\nvoid main(void)\n{\n vec4 map = texture2D(mapSampler, vMapCoord);\n\n map -= 0.5;\n map.xy *= scale;\n\n gl_FragColor = texture2D(uSampler, vec2(vTextureCoord.x + map.x, vTextureCoord.y + map.y));\n}\n",{mapSampler:{type:"sampler2D",value:t.texture},otherMatrix:{type:"mat3",value:r.toArray(!0)},scale:{type:"v2",value:{x:1,y:1}}}),this.maskSprite=t,this.maskMatrix=r,(null===e||void 0===e)&&(e=20),this.scale=new n.Point(e,e)}var n=t("../../core");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.applyFilter=function(t,e,r){var i=t.filterManager;i.calculateMappedMatrix(e.frame,this.maskSprite,this.maskMatrix),this.uniforms.otherMatrix.value=this.maskMatrix.toArray(!0),this.uniforms.scale.value.x=this.scale.x*(1/e.frame.width),this.uniforms.scale.value.y=this.scale.y*(1/e.frame.height);var n=this.getShader(t);i.applyFilter(n,e,r)},Object.defineProperties(i.prototype,{map:{get:function(){return this.uniforms.mapSampler.value},set:function(t){this.uniforms.mapSampler.value=t}}})},{"../../core":52}],127:[function(t,e,r){function i(){n.AbstractFilter.call(this,null,"precision mediump float;\n\nvarying vec2 vTextureCoord;\nvarying vec4 vColor;\n\nuniform vec4 dimensions;\nuniform sampler2D uSampler;\n\nuniform float angle;\nuniform float scale;\n\nfloat pattern()\n{\n float s = sin(angle), c = cos(angle);\n vec2 tex = vTextureCoord * dimensions.xy;\n vec2 point = vec2(\n c * tex.x - s * tex.y,\n s * tex.x + c * tex.y\n ) * scale;\n return (sin(point.x) * sin(point.y)) * 4.0;\n}\n\nvoid main()\n{\n vec4 color = texture2D(uSampler, vTextureCoord);\n float average = (color.r + color.g + color.b) / 3.0;\n gl_FragColor = vec4(vec3(average * 10.0 - 5.0 + pattern()), color.a);\n}\n",{scale:{type:"1f",value:1},angle:{type:"1f",value:5},dimensions:{type:"4fv",value:[0,0,0,0]}})}var n=t("../../core");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i,Object.defineProperties(i.prototype,{scale:{get:function(){return this.uniforms.scale.value},set:function(t){this.uniforms.scale.value=t}},angle:{get:function(){return this.uniforms.angle.value},set:function(t){this.uniforms.angle.value=t}}})},{"../../core":52}],128:[function(t,e,r){function i(){n.AbstractFilter.call(this,"attribute vec2 aVertexPosition;\nattribute vec2 aTextureCoord;\nattribute vec4 aColor;\n\nuniform float strength;\nuniform vec2 offset;\n\nuniform mat3 projectionMatrix;\n\nvarying vec2 vTextureCoord;\nvarying vec4 vColor;\nvarying vec2 vBlurTexCoords[6];\n\nvoid main(void)\n{\n gl_Position = vec4((projectionMatrix * vec3((aVertexPosition+offset), 1.0)).xy, 0.0, 1.0);\n vTextureCoord = aTextureCoord;\n\n vBlurTexCoords[ 0] = aTextureCoord + vec2(0.0, -0.012 * strength);\n vBlurTexCoords[ 1] = aTextureCoord + vec2(0.0, -0.008 * strength);\n vBlurTexCoords[ 2] = aTextureCoord + vec2(0.0, -0.004 * strength);\n vBlurTexCoords[ 3] = aTextureCoord + vec2(0.0, 0.004 * strength);\n vBlurTexCoords[ 4] = aTextureCoord + vec2(0.0, 0.008 * strength);\n vBlurTexCoords[ 5] = aTextureCoord + vec2(0.0, 0.012 * strength);\n\n vColor = vec4(aColor.rgb * aColor.a, aColor.a);\n}\n","precision lowp float;\n\nvarying vec2 vTextureCoord;\nvarying vec2 vBlurTexCoords[6];\nvarying vec4 vColor;\n\nuniform vec3 color;\nuniform float alpha;\n\nuniform sampler2D uSampler;\n\nvoid main(void)\n{\n vec4 sum = vec4(0.0);\n\n sum += texture2D(uSampler, vBlurTexCoords[ 0])*0.004431848411938341;\n sum += texture2D(uSampler, vBlurTexCoords[ 1])*0.05399096651318985;\n sum += texture2D(uSampler, vBlurTexCoords[ 2])*0.2419707245191454;\n sum += texture2D(uSampler, vTextureCoord )*0.3989422804014327;\n sum += texture2D(uSampler, vBlurTexCoords[ 3])*0.2419707245191454;\n sum += texture2D(uSampler, vBlurTexCoords[ 4])*0.05399096651318985;\n sum += texture2D(uSampler, vBlurTexCoords[ 5])*0.004431848411938341;\n\n gl_FragColor = vec4( color.rgb * sum.a * alpha, sum.a * alpha );\n}\n",{blur:{type:"1f",value:1/512},color:{type:"c",value:[0,0,0]},alpha:{type:"1f",value:.7},offset:{type:"2f",value:[5,5]},strength:{type:"1f",value:1}}),this.passes=1,this.strength=4}var n=t("../../core");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.applyFilter=function(t,e,r,i){var n=this.getShader(t);if(this.uniforms.strength.value=this.strength/4/this.passes*(e.frame.height/e.size.height),1===this.passes)t.filterManager.applyFilter(n,e,r,i);else{for(var o=t.filterManager.getRenderTarget(!0),s=e,a=o,h=0;h= (time - params.z)) )\n {\n float diff = (dist - time);\n float powDiff = 1.0 - pow(abs(diff*params.x), params.y);\n\n float diffTime = diff * powDiff;\n vec2 diffUV = normalize(uv - center);\n texCoord = uv + (diffUV * diffTime);\n }\n\n gl_FragColor = texture2D(uSampler, texCoord);\n}\n",{center:{type:"v2",value:{x:.5,y:.5}},params:{type:"v3",value:{x:10,y:.8,z:.1}},time:{type:"1f",value:0}})}var n=t("../../core");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i,Object.defineProperties(i.prototype,{center:{get:function(){return this.uniforms.center.value},set:function(t){this.uniforms.center.value=t}},params:{get:function(){return this.uniforms.params.value},set:function(t){this.uniforms.params.value=t}},time:{get:function(){return this.uniforms.time.value},set:function(t){this.uniforms.time.value=t}}})},{"../../core":52}],138:[function(t,e,r){function i(){n.AbstractFilter.call(this,null,"precision mediump float;\n\nvarying vec2 vTextureCoord;\n\nuniform sampler2D uSampler;\nuniform float blur;\nuniform float gradientBlur;\nuniform vec2 start;\nuniform vec2 end;\nuniform vec2 delta;\nuniform vec2 texSize;\n\nfloat random(vec3 scale, float seed)\n{\n return fract(sin(dot(gl_FragCoord.xyz + seed, scale)) * 43758.5453 + seed);\n}\n\nvoid main(void)\n{\n vec4 color = vec4(0.0);\n float total = 0.0;\n\n float offset = random(vec3(12.9898, 78.233, 151.7182), 0.0);\n vec2 normal = normalize(vec2(start.y - end.y, end.x - start.x));\n float radius = smoothstep(0.0, 1.0, abs(dot(vTextureCoord * texSize - start, normal)) / gradientBlur) * blur;\n\n for (float t = -30.0; t <= 30.0; t++)\n {\n float percent = (t + offset - 0.5) / 30.0;\n float weight = 1.0 - abs(percent);\n vec4 sample = texture2D(uSampler, vTextureCoord + delta / texSize * percent * radius);\n sample.rgb *= sample.a;\n color += sample * weight;\n total += weight;\n }\n\n gl_FragColor = color / total;\n gl_FragColor.rgb /= gl_FragColor.a + 0.00001;\n}\n",{blur:{type:"1f",value:100},gradientBlur:{type:"1f",value:600},start:{type:"v2",value:{x:0,y:window.innerHeight/2}},end:{type:"v2",value:{x:600,y:window.innerHeight/2}},delta:{type:"v2",value:{x:30,y:30}},texSize:{type:"v2",value:{x:window.innerWidth,y:window.innerHeight}}}),this.updateDelta()}var n=t("../../core");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.updateDelta=function(){this.uniforms.delta.value.x=0,this.uniforms.delta.value.y=0},Object.defineProperties(i.prototype,{blur:{get:function(){return this.uniforms.blur.value},set:function(t){this.uniforms.blur.value=t}},gradientBlur:{get:function(){return this.uniforms.gradientBlur.value},set:function(t){this.uniforms.gradientBlur.value=t}},start:{get:function(){return this.uniforms.start.value},set:function(t){this.uniforms.start.value=t,this.updateDelta()}},end:{get:function(){return this.uniforms.end.value},set:function(t){this.uniforms.end.value=t,this.updateDelta()}}})},{"../../core":52}],139:[function(t,e,r){function i(){n.AbstractFilter.call(this),this.tiltShiftXFilter=new o,this.tiltShiftYFilter=new s}var n=t("../../core"),o=t("./TiltShiftXFilter"),s=t("./TiltShiftYFilter");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.applyFilter=function(t,e,r){var i=t.filterManager.getRenderTarget(!0);this.tiltShiftXFilter.applyFilter(t,e,i),this.tiltShiftYFilter.applyFilter(t,i,r),t.filterManager.returnRenderTarget(i)},Object.defineProperties(i.prototype,{blur:{get:function(){return this.tiltShiftXFilter.blur},set:function(t){this.tiltShiftXFilter.blur=this.tiltShiftYFilter.blur=t}},gradientBlur:{get:function(){return this.tiltShiftXFilter.gradientBlur},set:function(t){this.tiltShiftXFilter.gradientBlur=this.tiltShiftYFilter.gradientBlur=t}},start:{get:function(){return this.tiltShiftXFilter.start},set:function(t){this.tiltShiftXFilter.start=this.tiltShiftYFilter.start=t}},end:{get:function(){return this.tiltShiftXFilter.end},set:function(t){this.tiltShiftXFilter.end=this.tiltShiftYFilter.end=t}}})},{"../../core":52,"./TiltShiftXFilter":140,"./TiltShiftYFilter":141}],140:[function(t,e,r){function i(){n.call(this)}var n=t("./TiltShiftAxisFilter");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.updateDelta=function(){var t=this.uniforms.end.value.x-this.uniforms.start.value.x,e=this.uniforms.end.value.y-this.uniforms.start.value.y,r=Math.sqrt(t*t+e*e);this.uniforms.delta.value.x=t/r,this.uniforms.delta.value.y=e/r}},{"./TiltShiftAxisFilter":138}],141:[function(t,e,r){function i(){n.call(this)}var n=t("./TiltShiftAxisFilter");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.updateDelta=function(){var t=this.uniforms.end.value.x-this.uniforms.start.value.x,e=this.uniforms.end.value.y-this.uniforms.start.value.y,r=Math.sqrt(t*t+e*e);this.uniforms.delta.value.x=-e/r,this.uniforms.delta.value.y=t/r}},{"./TiltShiftAxisFilter":138}],142:[function(t,e,r){function i(){n.AbstractFilter.call(this,null,"precision mediump float;\n\nvarying vec2 vTextureCoord;\n\nuniform sampler2D uSampler;\nuniform float radius;\nuniform float angle;\nuniform vec2 offset;\n\nvoid main(void)\n{\n vec2 coord = vTextureCoord - offset;\n float dist = length(coord);\n\n if (dist < radius)\n {\n float ratio = (radius - dist) / radius;\n float angleMod = ratio * ratio * angle;\n float s = sin(angleMod);\n float c = cos(angleMod);\n coord = vec2(coord.x * c - coord.y * s, coord.x * s + coord.y * c);\n }\n\n gl_FragColor = texture2D(uSampler, coord+offset);\n}\n",{radius:{type:"1f",value:.5},angle:{type:"1f",value:5},offset:{type:"v2",value:{x:.5,y:.5}}})}var n=t("../../core");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i,Object.defineProperties(i.prototype,{offset:{get:function(){return this.uniforms.offset.value},set:function(t){this.uniforms.offset.value=t}},radius:{get:function(){return this.uniforms.radius.value},set:function(t){this.uniforms.radius.value=t}},angle:{get:function(){return this.uniforms.angle.value},set:function(t){this.uniforms.angle.value=t}}})},{"../../core":52}],143:[function(t,e,r){(function(r){t("./polyfill");var i=e.exports=t("./core");i.extras=t("./extras"),i.filters=t("./filters"),i.interaction=t("./interaction"),i.loaders=t("./loaders"),i.mesh=t("./mesh"),i.accessibility=t("./accessibility"),i.loader=new i.loaders.Loader,Object.assign(i,t("./deprecation")),r.PIXI=i}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{"./accessibility":37,"./core":52,"./deprecation":107,"./extras":114,"./filters":131,"./interaction":146,"./loaders":149,"./mesh":156,"./polyfill":161}],144:[function(t,e,r){function i(){this.global=new n.Point,this.target=null,this.originalEvent=null}var n=t("../core");i.prototype.constructor=i,e.exports=i,i.prototype.getLocalPosition=function(t,e,r){return t.worldTransform.applyInverse(r||this.global,e)}},{"../core":52}],145:[function(t,e,r){function i(t,e){e=e||{},this.renderer=t,this.autoPreventDefault=void 0!==e.autoPreventDefault?e.autoPreventDefault:!0,this.interactionFrequency=e.interactionFrequency||10,this.mouse=new o,this.eventData={stopped:!1,target:null,type:null,data:this.mouse,stopPropagation:function(){this.stopped=!0}},this.interactiveDataPool=[],this.interactionDOMElement=null,this.eventsAdded=!1,this.onMouseUp=this.onMouseUp.bind(this),this.processMouseUp=this.processMouseUp.bind(this),this.onMouseDown=this.onMouseDown.bind(this),this.processMouseDown=this.processMouseDown.bind(this),this.onMouseMove=this.onMouseMove.bind(this),this.processMouseMove=this.processMouseMove.bind(this),this.onMouseOut=this.onMouseOut.bind(this),this.processMouseOverOut=this.processMouseOverOut.bind(this),this.onTouchStart=this.onTouchStart.bind(this),this.processTouchStart=this.processTouchStart.bind(this),this.onTouchEnd=this.onTouchEnd.bind(this),this.processTouchEnd=this.processTouchEnd.bind(this),this.onTouchMove=this.onTouchMove.bind(this),this.processTouchMove=this.processTouchMove.bind(this),this.last=0,this.currentCursorStyle="inherit",this._tempPoint=new n.Point,this.resolution=1,this.setTargetElement(this.renderer.view,this.renderer.resolution)}var n=t("../core"),o=t("./InteractionData");Object.assign(n.DisplayObject.prototype,t("./interactiveTarget")),i.prototype.constructor=i,e.exports=i,i.prototype.setTargetElement=function(t,e){this.removeEvents(),this.interactionDOMElement=t,this.resolution=e||1,this.addEvents()},i.prototype.addEvents=function(){this.interactionDOMElement&&(n.ticker.shared.add(this.update,this),window.navigator.msPointerEnabled&&(this.interactionDOMElement.style["-ms-content-zooming"]="none",this.interactionDOMElement.style["-ms-touch-action"]="none"),window.document.addEventListener("mousemove",this.onMouseMove,!0),this.interactionDOMElement.addEventListener("mousedown",this.onMouseDown,!0),this.interactionDOMElement.addEventListener("mouseout",this.onMouseOut,!0),this.interactionDOMElement.addEventListener("touchstart",this.onTouchStart,!0),this.interactionDOMElement.addEventListener("touchend",this.onTouchEnd,!0),this.interactionDOMElement.addEventListener("touchmove",this.onTouchMove,!0),window.addEventListener("mouseup",this.onMouseUp,!0),this.eventsAdded=!0)},i.prototype.removeEvents=function(){this.interactionDOMElement&&(n.ticker.shared.remove(this.update),window.navigator.msPointerEnabled&&(this.interactionDOMElement.style["-ms-content-zooming"]="",this.interactionDOMElement.style["-ms-touch-action"]=""),window.document.removeEventListener("mousemove",this.onMouseMove,!0),this.interactionDOMElement.removeEventListener("mousedown",this.onMouseDown,!0),this.interactionDOMElement.removeEventListener("mouseout",this.onMouseOut,!0),this.interactionDOMElement.removeEventListener("touchstart",this.onTouchStart,!0),this.interactionDOMElement.removeEventListener("touchend",this.onTouchEnd,!0),this.interactionDOMElement.removeEventListener("touchmove",this.onTouchMove,!0),this.interactionDOMElement=null,window.removeEventListener("mouseup",this.onMouseUp,!0),this.eventsAdded=!1)},i.prototype.update=function(t){if(this._deltaTime+=t,!(this._deltaTime=0;h--)this.processInteractive(t,a[h],r,i,s)&&(o=!0,s=!1,a[h].interactive&&(i=!1));return n&&(i&&!o&&(e.hitArea?(e.worldTransform.applyInverse(t,this._tempPoint),o=e.hitArea.contains(this._tempPoint.x,this._tempPoint.y)):e.containsPoint&&(o=e.containsPoint(t))),e.interactive&&r(e,o)),o},i.prototype.onMouseDown=function(t){this.mouse.originalEvent=t,this.eventData.data=this.mouse,this.eventData.stopped=!1,this.mapPositionToPoint(this.mouse.global,t.clientX,t.clientY),this.autoPreventDefault&&this.mouse.originalEvent.preventDefault(),this.processInteractive(this.mouse.global,this.renderer._lastObjectRendered,this.processMouseDown,!0)},i.prototype.processMouseDown=function(t,e){var r=this.mouse.originalEvent,i=2===r.button||3===r.which;e&&(t[i?"_isRightDown":"_isLeftDown"]=!0,this.dispatchEvent(t,i?"rightdown":"mousedown",this.eventData))},i.prototype.onMouseUp=function(t){this.mouse.originalEvent=t,this.eventData.data=this.mouse,this.eventData.stopped=!1,this.mapPositionToPoint(this.mouse.global,t.clientX,t.clientY),this.processInteractive(this.mouse.global,this.renderer._lastObjectRendered,this.processMouseUp,!0)},i.prototype.processMouseUp=function(t,e){var r=this.mouse.originalEvent,i=2===r.button||3===r.which,n=i?"_isRightDown":"_isLeftDown";e?(this.dispatchEvent(t,i?"rightup":"mouseup",this.eventData),t[n]&&(t[n]=!1,this.dispatchEvent(t,i?"rightclick":"click",this.eventData))):t[n]&&(t[n]=!1,this.dispatchEvent(t,i?"rightupoutside":"mouseupoutside",this.eventData))},i.prototype.onMouseMove=function(t){this.mouse.originalEvent=t,this.eventData.data=this.mouse,this.eventData.stopped=!1,this.mapPositionToPoint(this.mouse.global,t.clientX,t.clientY),this.didMove=!0,this.cursor="inherit",this.processInteractive(this.mouse.global,this.renderer._lastObjectRendered,this.processMouseMove,!0),this.currentCursorStyle!==this.cursor&&(this.currentCursorStyle=this.cursor,this.interactionDOMElement.style.cursor=this.cursor)},i.prototype.processMouseMove=function(t,e){this.dispatchEvent(t,"mousemove",this.eventData),this.processMouseOverOut(t,e)},i.prototype.onMouseOut=function(t){this.mouse.originalEvent=t,this.eventData.stopped=!1,this.mapPositionToPoint(this.mouse.global,t.clientX,t.clientY),this.interactionDOMElement.style.cursor="inherit",this.mapPositionToPoint(this.mouse.global,t.clientX,t.clientY),this.processInteractive(this.mouse.global,this.renderer._lastObjectRendered,this.processMouseOverOut,!1)},i.prototype.processMouseOverOut=function(t,e){e?(t._over||(t._over=!0,this.dispatchEvent(t,"mouseover",this.eventData)),t.buttonMode&&(this.cursor=t.defaultCursor)):t._over&&(t._over=!1,this.dispatchEvent(t,"mouseout",this.eventData))},i.prototype.onTouchStart=function(t){this.autoPreventDefault&&t.preventDefault();for(var e=t.changedTouches,r=e.length,i=0;r>i;i++){var n=e[i],o=this.getTouchData(n);o.originalEvent=t,this.eventData.data=o,this.eventData.stopped=!1,this.processInteractive(o.global,this.renderer._lastObjectRendered,this.processTouchStart,!0),this.returnTouchData(o)}},i.prototype.processTouchStart=function(t,e){e&&(t._touchDown=!0,this.dispatchEvent(t,"touchstart",this.eventData))},i.prototype.onTouchEnd=function(t){this.autoPreventDefault&&t.preventDefault();for(var e=t.changedTouches,r=e.length,i=0;r>i;i++){var n=e[i],o=this.getTouchData(n);o.originalEvent=t,this.eventData.data=o,this.eventData.stopped=!1,this.processInteractive(o.global,this.renderer._lastObjectRendered,this.processTouchEnd,!0),this.returnTouchData(o)}},i.prototype.processTouchEnd=function(t,e){e?(this.dispatchEvent(t,"touchend",this.eventData),t._touchDown&&(t._touchDown=!1,this.dispatchEvent(t,"tap",this.eventData))):t._touchDown&&(t._touchDown=!1,this.dispatchEvent(t,"touchendoutside",this.eventData))},i.prototype.onTouchMove=function(t){this.autoPreventDefault&&t.preventDefault();for(var e=t.changedTouches,r=e.length,i=0;r>i;i++){var n=e[i],o=this.getTouchData(n);o.originalEvent=t, +this.eventData.data=o,this.eventData.stopped=!1,this.processInteractive(o.global,this.renderer._lastObjectRendered,this.processTouchMove,!0),this.returnTouchData(o)}},i.prototype.processTouchMove=function(t,e){e=e,this.dispatchEvent(t,"touchmove",this.eventData)},i.prototype.getTouchData=function(t){var e=this.interactiveDataPool.pop();return e||(e=new o),e.identifier=t.identifier,this.mapPositionToPoint(e.global,t.clientX,t.clientY),navigator.isCocoonJS&&(e.global.x=e.global.x/this.resolution,e.global.y=e.global.y/this.resolution),t.globalX=e.global.x,t.globalY=e.global.y,e},i.prototype.returnTouchData=function(t){this.interactiveDataPool.push(t)},i.prototype.destroy=function(){this.removeEvents(),this.renderer=null,this.mouse=null,this.eventData=null,this.interactiveDataPool=null,this.interactionDOMElement=null,this.onMouseUp=null,this.processMouseUp=null,this.onMouseDown=null,this.processMouseDown=null,this.onMouseMove=null,this.processMouseMove=null,this.onMouseOut=null,this.processMouseOverOut=null,this.onTouchStart=null,this.processTouchStart=null,this.onTouchEnd=null,this.processTouchEnd=null,this.onTouchMove=null,this.processTouchMove=null,this._tempPoint=null},n.WebGLRenderer.registerPlugin("interaction",i),n.CanvasRenderer.registerPlugin("interaction",i)},{"../core":52,"./InteractionData":144,"./interactiveTarget":147}],146:[function(t,e,r){e.exports={InteractionData:t("./InteractionData"),InteractionManager:t("./InteractionManager"),interactiveTarget:t("./interactiveTarget")}},{"./InteractionData":144,"./InteractionManager":145,"./interactiveTarget":147}],147:[function(t,e,r){var i={interactive:!1,buttonMode:!1,interactiveChildren:!0,defaultCursor:"pointer",_over:!1,_touchDown:!1};e.exports=i},{}],148:[function(t,e,r){function i(t,e){var r={},i=t.data.getElementsByTagName("info")[0],n=t.data.getElementsByTagName("common")[0];r.font=i.getAttribute("face"),r.size=parseInt(i.getAttribute("size"),10),r.lineHeight=parseInt(n.getAttribute("lineHeight"),10),r.chars={};for(var a=t.data.getElementsByTagName("char"),h=0;hn;n++){var o=2*n;this._renderCanvasDrawTriangle(t,e,r,o,o+2,o+4)}},i.prototype._renderCanvasTriangles=function(t){for(var e=this.vertices,r=this.uvs,i=this.indices,n=i.length,o=0;n>o;o+=3){var s=2*i[o],a=2*i[o+1],h=2*i[o+2];this._renderCanvasDrawTriangle(t,e,r,s,a,h)}},i.prototype._renderCanvasDrawTriangle=function(t,e,r,i,n,o){var s=this._texture.baseTexture.source,a=this._texture.baseTexture.width,h=this._texture.baseTexture.height,u=e[i],l=e[n],c=e[o],p=e[i+1],d=e[n+1],f=e[o+1],v=r[i]*a,g=r[n]*a,m=r[o]*a,y=r[i+1]*h,x=r[n+1]*h,b=r[o+1]*h;if(this.canvasPadding>0){var _=this.canvasPadding/this.worldTransform.a,T=this.canvasPadding/this.worldTransform.d,E=(u+l+c)/3,S=(p+d+f)/3,w=u-E,C=p-S,A=Math.sqrt(w*w+C*C);u=E+w/A*(A+_),p=S+C/A*(A+T),w=l-E,C=d-S,A=Math.sqrt(w*w+C*C),l=E+w/A*(A+_),d=S+C/A*(A+T),w=c-E,C=f-S,A=Math.sqrt(w*w+C*C),c=E+w/A*(A+_),f=S+C/A*(A+T)}t.save(),t.beginPath(),t.moveTo(u,p),t.lineTo(l,d),t.lineTo(c,f),t.closePath(),t.clip();var M=v*x+y*m+g*b-x*m-y*g-v*b,R=u*x+y*c+l*b-x*c-y*l-u*b,O=v*l+u*m+g*c-l*m-u*g-v*c,P=v*x*c+y*l*m+u*g*b-u*x*m-y*g*c-v*l*b,D=p*x+y*f+d*b-x*f-y*d-p*b,F=v*d+p*m+g*f-d*m-p*g-v*f,L=v*x*f+y*d*m+p*g*b-p*x*m-y*g*f-v*d*b;t.transform(R/M,D/M,O/M,F/M,P/M,L/M),t.drawImage(s,0,0),t.restore()},i.prototype.renderMeshFlat=function(t){var e=this.context,r=t.vertices,i=r.length/2;e.beginPath();for(var n=1;i-2>n;n++){var o=2*n,s=r[o],a=r[o+2],h=r[o+4],u=r[o+1],l=r[o+3],c=r[o+5];e.moveTo(s,u),e.lineTo(a,l),e.lineTo(h,c)}e.fillStyle="#FF0000",e.fill(),e.closePath()},i.prototype._onTextureUpdate=function(){this.updateFrame=!0},i.prototype.getBounds=function(t){if(!this._currentBounds){for(var e=t||this.worldTransform,r=e.a,i=e.b,o=e.c,s=e.d,a=e.tx,h=e.ty,u=-(1/0),l=-(1/0),c=1/0,p=1/0,d=this.vertices,f=0,v=d.length;v>f;f+=2){var g=d[f],m=d[f+1],y=r*g+o*m+a,x=s*m+i*g+h;c=c>y?y:c,p=p>x?x:p,u=y>u?y:u,l=x>l?x:l}if(c===-(1/0)||l===1/0)return n.Rectangle.EMPTY;var b=this._bounds;b.x=c,b.width=u-c,b.y=p,b.height=l-p,this._currentBounds=b}return this._currentBounds},i.prototype.containsPoint=function(t){if(!this.getBounds().contains(t.x,t.y))return!1;this.worldTransform.applyInverse(t,o);var e,r,n=this.vertices,a=s.points;if(this.drawMode===i.DRAW_MODES.TRIANGLES){var h=this.indices;for(r=this.indices.length,e=0;r>e;e+=3){var u=2*h[e],l=2*h[e+1],c=2*h[e+2];if(a[0]=n[u],a[1]=n[u+1],a[2]=n[l],a[3]=n[l+1],a[4]=n[c],a[5]=n[c+1],s.contains(o.x,o.y))return!0}}else for(r=n.length,e=0;r>e;e+=6)if(a[0]=n[e],a[1]=n[e+1],a[2]=n[e+2],a[3]=n[e+3],a[4]=n[e+4],a[5]=n[e+5],s.contains(o.x,o.y))return!0;return!1},i.DRAW_MODES={TRIANGLE_MESH:0,TRIANGLES:1}},{"../core":52}],154:[function(t,e,r){function i(t,e,r){n.call(this,t),this._ready=!0,this.segmentsX=e||10,this.segmentsY=r||10,this.drawMode=n.DRAW_MODES.TRIANGLES,this.refresh()}var n=t("./Mesh");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.refresh=function(){var t=this.segmentsX*this.segmentsY,e=[],r=[],i=[],n=[],o=this.texture,s=this.segmentsX-1,a=this.segmentsY-1,h=0,u=o.width/s,l=o.height/a;for(h=0;t>h;h++){var c=h%this.segmentsX,p=h/this.segmentsX|0;e.push(c*u,p*l),i.push(o._uvs.x0+(o._uvs.x1-o._uvs.x0)*(c/(this.segmentsX-1)),o._uvs.y0+(o._uvs.y3-o._uvs.y0)*(p/(this.segmentsY-1)))}var d=s*a;for(h=0;d>h;h++){var f=h%s,v=h/s|0,g=v*this.segmentsX+f,m=v*this.segmentsX+f+1,y=(v+1)*this.segmentsX+f,x=(v+1)*this.segmentsX+f+1;n.push(g,m,y),n.push(m,x,y)}this.vertices=new Float32Array(e),this.uvs=new Float32Array(i),this.colors=new Float32Array(r),this.indices=new Uint16Array(n)},i.prototype._onTextureUpdate=function(){n.prototype._onTextureUpdate.call(this),this._ready&&this.refresh()}},{"./Mesh":153}],155:[function(t,e,r){function i(t,e){n.call(this,t),this.points=e,this.vertices=new Float32Array(4*e.length),this.uvs=new Float32Array(4*e.length),this.colors=new Float32Array(2*e.length),this.indices=new Uint16Array(2*e.length),this._ready=!0,this.refresh()}var n=t("./Mesh"),o=t("../core");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.refresh=function(){var t=this.points;if(!(t.length<1)&&this._texture._uvs){var e=this.uvs,r=this.indices,i=this.colors,n=this._texture._uvs,s=new o.Point(n.x0,n.y0),a=new o.Point(n.x2-n.x0,n.y2-n.y0);e[0]=0+s.x,e[1]=0+s.y,e[2]=0+s.x,e[3]=1*a.y+s.y,i[0]=1,i[1]=1,r[0]=0,r[1]=1;for(var h,u,l,c=t.length,p=1;c>p;p++)h=t[p],u=4*p,l=p/(c-1),e[u]=l*a.x+s.x,e[u+1]=0+s.y,e[u+2]=l*a.x+s.x,e[u+3]=1*a.y+s.y,u=2*p,i[u]=1,i[u+1]=1,u=2*p,r[u]=u,r[u+1]=u+1;this.dirty=!0}},i.prototype._onTextureUpdate=function(){n.prototype._onTextureUpdate.call(this),this._ready&&this.refresh()},i.prototype.updateTransform=function(){var t=this.points;if(!(t.length<1)){for(var e,r,i,n,o,s,a=t[0],h=0,u=0,l=this.vertices,c=t.length,p=0;c>p;p++)r=t[p],i=4*p,e=p1&&(n=1),o=Math.sqrt(h*h+u*u),s=this._texture.height/2,h/=o,u/=o,h*=s,u*=s,l[i]=r.x+h,l[i+1]=r.y+u,l[i+2]=r.x-h,l[i+3]=r.y-u,a=r;this.containerUpdateTransform()}}},{"../core":52,"./Mesh":153}],156:[function(t,e,r){e.exports={Mesh:t("./Mesh"),Plane:t("./Plane"),Rope:t("./Rope"),MeshRenderer:t("./webgl/MeshRenderer"),MeshShader:t("./webgl/MeshShader")}},{"./Mesh":153,"./Plane":154,"./Rope":155,"./webgl/MeshRenderer":157,"./webgl/MeshShader":158}],157:[function(t,e,r){function i(t){n.ObjectRenderer.call(this,t),this.indices=new Uint16Array(15e3);for(var e=0,r=0;15e3>e;e+=6,r+=4)this.indices[e+0]=r+0,this.indices[e+1]=r+1,this.indices[e+2]=r+2,this.indices[e+3]=r+0,this.indices[e+4]=r+2,this.indices[e+5]=r+3;this.currentShader=null}var n=t("../../core"),o=t("../Mesh");i.prototype=Object.create(n.ObjectRenderer.prototype),i.prototype.constructor=i,e.exports=i,n.WebGLRenderer.registerPlugin("mesh",i),i.prototype.onContextChange=function(){},i.prototype.render=function(t){t._vertexBuffer||this._initWebGL(t);var e=this.renderer,r=e.gl,i=t._texture.baseTexture,n=t.shader,s=t.drawMode===o.DRAW_MODES.TRIANGLE_MESH?r.TRIANGLE_STRIP:r.TRIANGLES;e.blendModeManager.setBlendMode(t.blendMode),n=n?n.shaders[r.id]||n.getShader(e):e.shaderManager.plugins.meshShader,this.renderer.shaderManager.setShader(n),n.uniforms.translationMatrix.value=t.worldTransform.toArray(!0),n.uniforms.projectionMatrix.value=e.currentRenderTarget.projectionMatrix.toArray(!0),n.uniforms.alpha.value=t.worldAlpha,n.syncUniforms(),t.dirty?(t.dirty=!1,r.bindBuffer(r.ARRAY_BUFFER,t._vertexBuffer),r.bufferData(r.ARRAY_BUFFER,t.vertices,r.STATIC_DRAW),r.vertexAttribPointer(n.attributes.aVertexPosition,2,r.FLOAT,!1,0,0),r.bindBuffer(r.ARRAY_BUFFER,t._uvBuffer),r.bufferData(r.ARRAY_BUFFER,t.uvs,r.STATIC_DRAW),r.vertexAttribPointer(n.attributes.aTextureCoord,2,r.FLOAT,!1,0,0),r.activeTexture(r.TEXTURE0),i._glTextures[r.id]?r.bindTexture(r.TEXTURE_2D,i._glTextures[r.id]):this.renderer.updateTexture(i),r.bindBuffer(r.ELEMENT_ARRAY_BUFFER,t._indexBuffer),r.bufferData(r.ELEMENT_ARRAY_BUFFER,t.indices,r.STATIC_DRAW)):(r.bindBuffer(r.ARRAY_BUFFER,t._vertexBuffer),r.bufferSubData(r.ARRAY_BUFFER,0,t.vertices),r.vertexAttribPointer(n.attributes.aVertexPosition,2,r.FLOAT,!1,0,0),r.bindBuffer(r.ARRAY_BUFFER,t._uvBuffer),r.vertexAttribPointer(n.attributes.aTextureCoord,2,r.FLOAT,!1,0,0),r.activeTexture(r.TEXTURE0),i._glTextures[r.id]?r.bindTexture(r.TEXTURE_2D,i._glTextures[r.id]):this.renderer.updateTexture(i),r.bindBuffer(r.ELEMENT_ARRAY_BUFFER,t._indexBuffer),r.bufferSubData(r.ELEMENT_ARRAY_BUFFER,0,t.indices)),r.drawElements(s,t.indices.length,r.UNSIGNED_SHORT,0)},i.prototype._initWebGL=function(t){var e=this.renderer.gl;t._vertexBuffer=e.createBuffer(),t._indexBuffer=e.createBuffer(),t._uvBuffer=e.createBuffer(),e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferData(e.ARRAY_BUFFER,t.vertices,e.DYNAMIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferData(e.ARRAY_BUFFER,t.uvs,e.STATIC_DRAW),t.colors&&(t._colorBuffer=e.createBuffer(),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.bufferData(e.ARRAY_BUFFER,t.colors,e.STATIC_DRAW)),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer),e.bufferData(e.ELEMENT_ARRAY_BUFFER,t.indices,e.STATIC_DRAW)},i.prototype.flush=function(){},i.prototype.start=function(){this.currentShader=null},i.prototype.destroy=function(){n.ObjectRenderer.prototype.destroy.call(this)}},{"../../core":52,"../Mesh":153}],158:[function(t,e,r){function i(t){n.Shader.call(this,t,["precision lowp float;","attribute vec2 aVertexPosition;","attribute vec2 aTextureCoord;","uniform mat3 translationMatrix;","uniform mat3 projectionMatrix;","varying vec2 vTextureCoord;","void main(void){"," gl_Position = vec4((projectionMatrix * translationMatrix * vec3(aVertexPosition, 1.0)).xy, 0.0, 1.0);"," vTextureCoord = aTextureCoord;","}"].join("\n"),["precision lowp float;","varying vec2 vTextureCoord;","uniform float alpha;","uniform sampler2D uSampler;","void main(void){"," gl_FragColor = texture2D(uSampler, vTextureCoord) * alpha ;","}"].join("\n"),{alpha:{type:"1f",value:0},translationMatrix:{type:"mat3",value:new Float32Array(9)},projectionMatrix:{type:"mat3",value:new Float32Array(9)}},{aVertexPosition:0,aTextureCoord:0})}var n=t("../../core");i.prototype=Object.create(n.Shader.prototype),i.prototype.constructor=i,e.exports=i,n.ShaderManager.registerPlugin("meshShader",i)},{"../../core":52}],159:[function(t,e,r){Math.sign||(Math.sign=function(t){return t=+t,0===t||isNaN(t)?t:t>0?1:-1})},{}],160:[function(t,e,r){Object.assign||(Object.assign=t("object-assign"))},{"object-assign":26}],161:[function(t,e,r){t("./Object.assign"),t("./requestAnimationFrame"),t("./Math.sign")},{"./Math.sign":159,"./Object.assign":160,"./requestAnimationFrame":162}],162:[function(t,e,r){(function(t){if(Date.now&&Date.prototype.getTime||(Date.now=function(){return(new Date).getTime()}),!t.performance||!t.performance.now){var e=Date.now();t.performance||(t.performance={}),t.performance.now=function(){return Date.now()-e}}for(var r=Date.now(),i=["ms","moz","webkit","o"],n=0;ni&&(i=0),r=e,setTimeout(function(){r=Date.now(),t(performance.now())},i)}),t.cancelAnimationFrame||(t.cancelAnimationFrame=function(t){clearTimeout(t)})}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{}]},{},[143])(143)}); //# sourceMappingURL=pixi.min.js.map diff --git a/bin/pixi.min.js.map b/bin/pixi.min.js.map index 857d92a..419daff 100644 --- a/bin/pixi.min.js.map +++ b/bin/pixi.min.js.map @@ -1 +1 @@ -{"version":3,"sources":["pixi.js"],"names":["f","exports","module","define","amd","g","window","global","self","this","PIXI","e","t","n","r","s","o","u","a","require","i","Error","code","l","call","length",1,"createContext","setVertexAttribArrays","GLBuffer","GLFramebuffer","GLShader","GLTexture","VertexArrayObject","./lib/GLBuffer","./lib/GLFramebuffer","./lib/GLShader","./lib/GLTexture","./lib/VertexArrayObject","./lib/createContext","./lib/setVertexAttribArrays",2,"EMPTY_ARRAY_BUFFER","ArrayBuffer","Buffer","gl","type","data","drawType","buffer","createBuffer","ARRAY_BUFFER","STATIC_DRAW","upload","prototype","offset","dontBind","bind","byteLength","bufferSubData","bufferData","bindBuffer","createVertexBuffer","createIndexBuffer","ELEMENT_ARRAY_BUFFER","create",3,"Texture","Framebuffer","width","height","framebuffer","createFramebuffer","stencil","texture","enableTexture","framebufferTexture2D","FRAMEBUFFER","COLOR_ATTACHMENT0","TEXTURE_2D","enableStencil","createRenderbuffer","bindRenderbuffer","RENDERBUFFER","framebufferRenderbuffer","DEPTH_STENCIL_ATTACHMENT","renderbufferStorage","DEPTH_STENCIL","clear","b","clearColor","COLOR_BUFFER_BIT","bindFramebuffer","unbind","resize","texImage2D","format","destroy","deleteFramebuffer","createRGBA","enableNearestScaling","enableWrapClamp","RGBA","UNSIGNED_BYTE","fbo","createFloat32","fromData","./GLTexture",4,"compileProgram","extractAttributes","extractUniforms","generateUniformAccessObject","Shader","vertexSrc","fragmentSrc","program","attributes","uniformData","uniforms","useProgram","./shader/compileProgram","./shader/extractAttributes","./shader/extractUniforms","./shader/generateUniformAccessObject",5,"createTexture","mipmap","premultiplyAlpha","source","pixelStorei","UNPACK_PREMULTIPLY_ALPHA_WEBGL","FLOATING_POINT_AVAILABLE","uploadData","Float32Array","ext","getExtension","FLOAT","location","undefined","activeTexture","TEXTURE0","bindTexture","minFilter","linear","texParameteri","TEXTURE_MIN_FILTER","LINEAR_MIPMAP_LINEAR","NEAREST_MIPMAP_NEAREST","LINEAR","NEAREST","magFilter","TEXTURE_MAG_FILTER","enableMipmap","generateMipmap","enableLinearScaling","TEXTURE_WRAP_S","CLAMP_TO_EDGE","TEXTURE_WRAP_T","enableWrapRepeat","REPEAT","deleteTexture","fromSource",6,"nativeVaoExtension","nativeVao","createVertexArrayOES","indexBuffer","dirty","constructor","bindVertexArrayOES","activate","attrib","attribute","pointer","normalized","stride","start","enableVertexAttribArray","addAttribute","push","addIndex","options",7,"CONTEXT_UID","canvas","getContext","id",8,"GL_MAP","attribs","maxAttribs","getParameter","MAX_VERTEX_ATTRIBS","tempAttribState","Array","attribState","disableVertexAttribArray",9,"glVertShader","compileShader","VERTEX_SHADER","glFragShader","FRAGMENT_SHADER","createProgram","attachShader","linkProgram","getProgramParameter","LINK_STATUS","console","error","VALIDATE_STATUS","getError","getProgramInfoLog","warn","deleteProgram","deleteShader","src","shader","createShader","shaderSource","getShaderParameter","COMPILE_STATUS","log","getShaderInfoLog",10,"defaultValue","size","Int32Array","booleanArray","array",11,"mapType","mapSize","totalAttributes","ACTIVE_ATTRIBUTES","attribData","getActiveAttrib","name","getAttribLocation","vertexAttribPointer","./mapSize","./mapType",12,"totalUniforms","ACTIVE_UNIFORMS","getActiveUniform","replace","getUniformLocation","value","./defaultValue",13,"uniformKeys","Object","keys","fullName","nameTokens","split","uniformGroup","getUniformGroup","uniform","defineProperty","get","generateGetter","set","generateSetter","template","getterTemplate","Function","setTemplate","setterTemplate","GLSL_TO_SINGLE_SETTERS","GLSL_TO_ARRAY_SETTERS","cur","join","float","vec2","vec3","vec4","int","ivec2","ivec3","ivec4","bool","bvec2","bvec3","bvec4","mat2","mat3","mat4","sampler2D",14,"GLSL_TO_SIZE",15,"GL_TABLE","typeNames","GL_TO_GLSL_TYPES","tn","FLOAT_VEC2","FLOAT_VEC3","FLOAT_VEC4","INT","INT_VEC2","INT_VEC3","INT_VEC4","BOOL","BOOL_VEC2","BOOL_VEC3","BOOL_VEC4","FLOAT_MAT2","FLOAT_MAT3","FLOAT_MAT4","SAMPLER_2D",16,"process","noop","identity","v","toBool","notId","only_once","fn","apply","arguments","_once","_isArrayLike","arr","_isArray","_arrayEach","iterator","index","_map","result","_range","count","_reduce","memo","x","_forEachOf","object","_keys","key","_indexOf","item","_keyIterator","coll","len","_restParam","func","startIndex","Math","max","rest","_withoutIndex","callback","_eachOfLimit","limit","obj","nextKey","done","running","errored","replenish","err","doParallel","async","eachOf","doParallelLimit","doSeries","eachOfSeries","_asyncMap","eachfn","results","_filter","sort","_reject","cb","_createTester","check","getResult","iteratee","_","_findGetResult","_parallel","tasks","task","args","_concat","y","concat","_queue","worker","concurrency","payload","_insert","q","pos","started","idle","setImmediate","drain","unshift","saturated","_next","workers","removed","workersList","splice","empty","paused","kill","pause","resume","resumeCount","min","w","_console_fn","_times","mapper","_applyEach","fns","go","that","pop","ensureAsync","innerArgs","sync","previous_async","root","noConflict","_toString","toString","isArray","_isObject","k","hasOwnProperty","_setImmediate","_delay","setTimeout","nextTick","forEach","each","forEachSeries","eachSeries","forEachLimit","eachLimit","forEachOf","completed","iter","forEachOfSeries","iterate","forEachOfLimit","eachOfLimit","map","mapSeries","mapLimit","inject","foldl","reduce","foldr","reduceRight","reversed","reverse","transform","select","filter","selectLimit","filterLimit","selectSeries","filterSeries","reject","rejectLimit","rejectSeries","any","some","someLimit","all","every","everyLimit","detect","detectSeries","detectLimit","sortBy","comparator","left","right","criteria","auto","addListener","listeners","removeListener","idx","taskComplete","remainingTasks","slice","runningTasks","ready","requires","listener","taskCallback","dep","safeResults","val","rkey","retry","times","parseTimes","acc","parseInt","DEFAULT_TIMES","interval","DEFAULT_INTERVAL","wrappedTask","wrappedCallback","wrappedResults","retryAttempt","finalAttempt","seriesCallback","retryInterval","opts","attempts","series","waterfall","wrapIterator","next","parallel","parallelLimit","makeCallback","callArgs","concatSeries","whilst","test","doWhilst","calls","until","doUntil","during","truth","doDuring","queue","items","priorityQueue","_compareTasks","priority","_binarySearch","sequence","compare","beg","end","mid","cargo","dir","memoize","hasher","queues","memoized","unmemoized","unmemoize","timesSeries","timesLimit","seq","newargs","nextargs","compose","applyEach","applyEachSeries","forever","constant","values","wrapSync","asyncify","then","message","_process",17,"normalizeArray","parts","allowAboveRoot","up","last","xs","res","splitPathRe","splitPath","filename","exec","resolve","resolvedPath","resolvedAbsolute","path","cwd","TypeError","charAt","p","normalize","isAbsolute","trailingSlash","substr","paths","relative","from","to","trim","fromParts","toParts","samePartsLength","outputParts","sep","delimiter","dirname","basename","extname","str",18,"cleanUpNextTick","draining","currentQueue","queueIndex","drainQueue","timeout","run","clearTimeout","Item","fun","title","browser","env","argv","version","versions","on","once","off","removeAllListeners","emit","binding","chdir","umask",19,"RangeError","errors","mapDomain","string","regexSeparators","labels","encoded","ucs2decode","extra","output","counter","charCodeAt","ucs2encode","stringFromCharCode","basicToDigit","codePoint","base","digitToBasic","digit","flag","adapt","delta","numPoints","firstTime","floor","damp","baseMinusTMin","tMax","skew","decode","input","out","basic","j","oldi","baseMinusT","inputLength","initialN","bias","initialBias","lastIndexOf","maxInt","tMin","encode","handledCPCount","basicLength","m","currentValue","handledCPCountPlusOne","qMinusT","toUnicode","regexPunycode","toLowerCase","toASCII","regexNonASCII","freeExports","nodeType","freeModule","freeGlobal","punycode","overflow","not-basic","invalid-input","String","fromCharCode","ucs2",20,"prop","qs","eq","regexp","maxKeys","kstr","vstr","indexOf","decodeURIComponent",21,"stringifyPrimitive","isFinite","objectKeys","ks","encodeURIComponent",22,"parse","stringify","./decode","./encode",23,"Url","protocol","slashes","auth","host","port","hostname","hash","search","query","pathname","href","urlParse","url","parseQueryString","slashesDenoteHost","isObject","urlFormat","isString","urlResolve","urlResolveObject","resolveObject","arg","isNull","isNullOrUndefined","protocolPattern","portPattern","delims","unwise","autoEscape","nonHostChars","hostEndingChars","hostnameMaxLen","hostnamePartPattern","hostnamePartStart","unsafeProtocol","javascript","javascript:","hostlessProtocol","slashedProtocol","http","https","ftp","gopher","file","http:","https:","ftp:","gopher:","file:","querystring","proto","lowerProto","match","hostEnd","hec","atSign","parseHost","ipv6Hostname","hostparts","part","newpart","validParts","notHost","bit","domainArray","newOut","h","ae","esc","escape","qm","rel","relPath","shift","isSourceAbs","isRelAbs","mustEndAbs","removeAllDots","srcPath","psychotic","authInHost","hasTrailingSlash",24,"earcut","holeIndices","dim","hasHoles","outerLen","outerNode","linkedList","triangles","minX","minY","maxX","maxY","eliminateHoles","earcutLinked","clockwise","sum","insertNode","filterPoints","again","steiner","equals","area","prev","removeNode","ear","pass","indexCurve","stop","isEarHashed","isEar","cureLocalIntersections","splitEarcut","c","pointInTriangle","minTX","minTY","maxTX","maxTY","minZ","zOrder","maxZ","nextZ","z","prevZ","intersects","locallyInside","isValidDiagonal","splitPolygon","list","getLeftmost","compareX","eliminateHole","hole","findHoleBridge","hx","hy","qx","Infinity","tan","tanMin","abs","sortLinked","tail","numMerges","pSize","qSize","inSize","leftmost","ax","ay","bx","by","cx","cy","px","py","intersectsPolygon","middleInside","p1","p2","q1","q2","inside","a2","Node","b2","an","bp",25,"EE","context","EventEmitter","prefix","_events","event","exists","evt","available","ee","a1","a3","a4","a5","events","setMaxListeners","prefixed",26,"toObject","propIsEnumerable","propertyIsEnumerable","assign","target","symbols","getOwnPropertySymbols",27,"called","_each","_eachLimit","_mapLimit","_detect","main_callback","theCallback","working","drained","ts","ds",28,"Loader","baseUrl","progress","loading","_progressChunk","_beforeMiddleware","_afterMiddleware","_boundLoadResource","_loadResource","_boundOnLoad","_onLoad","_buffer","_numToLoad","resources","urlParser","Resource","add","enqueue","onComplete","_handleBaseUrl","parsedUrl","before","pre","after","use","reset","load","resource","dequeue","_dequeue","_runMiddleware","_onComplete","LOAD_TYPE","XHR_READY_STATE","XHR_RESPONSE_TYPE","./Resource","eventemitter3",29,"isDataUrl","crossOrigin","loadType","_determineLoadType","xhrType","metadata","xhr","isJson","isXml","isImage","isAudio","isVideo","_boundComplete","complete","_boundOnError","_onError","_boundOnProgress","_onProgress","_boundXhrOnError","_xhrOnError","_boundXhrOnAbort","_xhrOnAbort","_boundXhrOnLoad","_xhrOnLoad","_boundXdrOnTimeout","_xdrOnTimeout","reqType","setExtMap","substring","_url","useXdr","XDomainRequest","XMLHttpRequest","tempAnchor","removeEventListener","onerror","ontimeout","onprogress","onload","_determineCrossOrigin","IMAGE","_loadImage","AUDIO","_loadElement","VIDEO","XHR","_loadXdr","_loadXhr","Image","addEventListener","Audio","document","createElement","navigator","isCocoonJS","appendChild","_createSource","toUpperCase","_determineXhrType","open","JSON","DOCUMENT","responseType","TEXT","send","xdr","mime","nodeName","lengthComputable","loaded","total","status","statusText","responseText","DOMParser","domparser","parseFromString","div","innerHTML","response","responseURL","loc","samePort","_xhrTypeMap","_getExtension","_loadTypeMap","slashIndex","queryStart","_getMimeFromXhrType","BUFFER","BLOB","DEFAULT","UNSENT","OPENED","HEADERS_RECEIVED","LOADING","DONE","gif","png","bmp","jpg","jpeg","tif","tiff","webp","tga","xhtml","html","htm","xml","tmx","tsx","svg","json","text","txt","setExtensionLoadType","setExtensionXhrType",30,"_keyStr","encodeBinary","bytebuffer","encodedCharIndexes","inx","jnx","paddingBytes",31,"middleware","caching","memory","parsing","blob","./Loader","./middlewares/caching/memory","./middlewares/parsing/blob",32,"cache",33,"b64","URL","webkitURL","Blob","createObjectURL","revokeObjectURL","getResponseHeader","../../Resource","../../b64",34,"description","author","contributors","main","homepage","bugs","license","repository","scripts","build","docs","files","dependencies","brfs","object-assign","pixi-gl-core","resource-loader","devDependencies","browserify","chai","del","gulp","gulp-cached","gulp-concat","gulp-debug","gulp-header","gulp-jshint","gulp-mirror","gulp-plumber","gulp-rename","gulp-sourcemaps","gulp-uglify","gulp-util","jaguarjs-jsdoc","jsdoc","jshint-summary","minimist","mocha","require-dir","run-sequence","testem","vinyl-buffer","vinyl-source-stream","watchify",35,"AccessibilityManager","renderer","style","position","top","zIndex","pool","renderId","debug","children","_onKeyDown","_onMouseMove","isActive","core","DisplayObject","update","view","parentNode","deactivate","removeChild","updateAccessibleObjects","displayObject","visible","accessible","interactive","_accessibleActive","addChild","_lastObjectRendered","rect","getBoundingClientRect","sx","sy","child","utils","removeItems","_accessibleDiv","hitArea","wt","worldTransform","tx","ty","d","getBounds","capHitArea","backgroundColor","borderStyle","_onClick","_onFocus","_onFocusOut","accessibleTitle","tabIndex","interactionManager","plugins","interaction","dispatchEvent","eventData","keyCode","WebGLRenderer","registerPlugin","CanvasRenderer","../core","./accessibleTarget",36,"accessibleTarget",37,"./AccessibilityManager",38,"CONST","VERSION","PI_2","PI","RAD_TO_DEG","DEG_TO_RAD","TARGET_FPMS","RENDERER_TYPE","UNKNOWN","WEBGL","CANVAS","BLEND_MODES","NORMAL","ADD","MULTIPLY","SCREEN","OVERLAY","DARKEN","LIGHTEN","COLOR_DODGE","COLOR_BURN","HARD_LIGHT","SOFT_LIGHT","DIFFERENCE","EXCLUSION","HUE","SATURATION","COLOR","LUMINOSITY","DRAW_MODES","POINTS","LINES","LINE_LOOP","LINE_STRIP","TRIANGLES","TRIANGLE_STRIP","TRIANGLE_FAN","SCALE_MODES","RETINA_PREFIX","RESOLUTION","FILTER_RESOLUTION","DEFAULT_RENDER_OPTIONS","resolution","antialias","forceFXAA","autoResize","transparent","clearBeforeRender","preserveDrawingBuffer","roundPixels","SHAPES","POLY","RECT","CIRC","ELIP","RREC","SPRITE_BATCH_SIZE","../../package.json",39,"Container","math","RenderTexture","_tempMatrix","Matrix","defineProperties","scale","getLocalBounds","_width","_height","onChildrenChange","argumentsLength","parent","addChildAt","swapChildren","child2","index1","getChildIndex","index2","setChildIndex","currentIndex","getChildAt","removeChildAt","removeChildren","beginIndex","endIndex","begin","range","generateTexture","scaleMode","bounds","renderTexture","render","updateTransform","displayObjectUpdateTransform","containerUpdateTransform","_currentBounds","Rectangle","EMPTY","childBounds","childMaxX","childMaxY","childVisible","_bounds","containerGetBounds","matrixCache","IDENTITY","renderWebGL","worldAlpha","renderable","_mask","_filters","currentRenderer","flush","filterManager","pushFilter","maskManager","pushMask","_renderWebGL","popMask","popFilter","_renderCanvas","renderCanvas","alpha","destroyChildren","../math","../textures/RenderTexture","../utils","./DisplayObject",40,"Point","pivot","_rotation","localTransform","filterArea","_sr","_cr","_tempDisplayObjectParent","scaleX","scaleY","rotation","sin","cos","worldVisible","mask","filters","pt","lt","matrix","toGlobal","toLocal","point","applyInverse","setParent","container","setTransform","skewX","skewY","pivotX","pivotY","../const",41,"Graphics","fillAlpha","lineWidth","lineColor","graphicsData","tint","_prevTint","blendMode","currentPath","_webGL","isMask","boundsPadding","_localBounds","glDirty","boundsDirty","cachedSpriteDirty","CanvasBuffer","CanvasGraphics","GraphicsData","tempPoint","clone","updateLocalBounds","lineStyle","color","lineAlpha","shape","points","Polygon","closed","drawShape","moveTo","lineTo","quadraticCurveTo","cpX","cpY","toX","toY","xa","ya","fromX","fromY","bezierCurveTo","cpX2","cpY2","dt","dt2","dt3","t2","t3","arcTo","x1","y1","x2","y2","radius","b1","mm","dd","cc","tt","k1","sqrt","k2","j1","j2","qy","startAngle","atan2","endAngle","arc","anticlockwise","sweep","segs","ceil","startX","startY","theta","theta2","cTheta","sTheta","segMinus","remainder","real","angle","beginFill","filling","fillColor","fill","endFill","drawRect","drawRoundedRect","RoundedRectangle","drawCircle","Circle","drawEllipse","Ellipse","drawPolygon","clearDirty","canvasBuffer","fromCanvas","baseTexture","translate","renderGraphics","setObjectRenderer","graphics","compositeOperation","blendModes","globalCompositeOperation","w0","w1","h0","h1","x3","y3","x4","y4","containsPoint","contains","padding","_webgl","../display/Container","../renderers/canvas/utils/CanvasBuffer","../renderers/canvas/utils/CanvasGraphics","../textures/Texture","./GraphicsData",42,"_lineTint","_fillTint",43,"GraphicsRenderer","ObjectRenderer","graphicsDataPool","primitiveShader","complexPrimitiveShader","maximumSimplePolySize","WebGLGraphicsData","onContextChange","webGLData","shaderManager","updateGraphics","webGL","blendModeManager","setBlendMode","mode","stencilManager","pushStencil","uniform1f","_location","drawElements","UNSIGNED_SHORT","indices","popStencil","setShader","uniformMatrix3fv","translationMatrix","toArray","projectionMatrix","currentRenderTarget","uniform3fv","hex2rgb","aVertexPosition","aColor","drawCount","lastIndex","switchMode","canDrawUsingSimple","buildPoly","buildComplexPoly","buildLine","buildRectangle","buildCircle","buildRoundedRectangle","rectData","verts","vertPos","tempPoints","rrectData","recPoints","quadraticBezierCurve","vecPos","getPt","n1","n2","perc","diff","xb","yb","circleData","totalSegs","seg","firstPoint","lastPoint","midPointX","midPointY","p1x","p1y","p2x","p2y","p3x","p3y","perpx","perpy","perp2x","perp2y","perp3x","perp3y","c1","c2","denom","pdist","dist","indexCount","indexStart","../../const","../../math","../../renderers/webgl/WebGLRenderer","../../renderers/webgl/utils/ObjectRenderer","../../utils","./WebGLGraphicsData",44,"glPoints","glIndices","Uint16Array","deleteBuffer",45,"ticker","Sprite","ParticleContainer","SpriteRenderer","ParticleRenderer","Text","BaseTexture","VideoBaseTexture","TextureUvs","WebGLManager","ShaderManager","RenderTarget","AbstractFilter","FXAAFilter","SpriteMaskFilter","glCore","autoDetectRenderer","noWebGL","isWebGLSupported","./const","./display/Container","./display/DisplayObject","./graphics/Graphics","./graphics/GraphicsData","./graphics/webgl/GraphicsRenderer","./math","./particles/ParticleContainer","./particles/webgl/ParticleRenderer","./renderers/canvas/CanvasRenderer","./renderers/canvas/utils/CanvasBuffer","./renderers/canvas/utils/CanvasGraphics","./renderers/webgl/WebGLRenderer","./renderers/webgl/filters/AbstractFilter","./renderers/webgl/filters/FXAAFilter","./renderers/webgl/filters/SpriteMaskFilter","./renderers/webgl/managers/ShaderManager","./renderers/webgl/managers/WebGLManager","./renderers/webgl/shaders/Shader","./renderers/webgl/utils/ObjectRenderer","./renderers/webgl/utils/RenderTarget","./sprites/Sprite","./sprites/webgl/SpriteRenderer","./text/Text","./textures/BaseTexture","./textures/RenderTexture","./textures/Texture","./textures/TextureUvs","./textures/VideoBaseTexture","./ticker","./utils",46,"fromArray","transpose","newPos","rotate","tx1","append","d1","sr","cr","nsx","prepend","invert","copy","TEMP_MATRIX","./Point",47,48,"./Matrix","./shapes/Circle","./shapes/Ellipse","./shapes/Polygon","./shapes/Rectangle","./shapes/RoundedRectangle",49,"dx","dy","r2","./Rectangle",50,"normx","normy",51,"points_","il","xi","yi","xj","yj","intersect","../Point",52,53,54,"maxSize","properties","batchSize","maxBatchSize","_properties","_maxSize","_batchSize","_buffers","_bufferToUpdate","interactiveChildren","setProperties","uvs","particle","smallestChildIndex","bufferIndex","isRotated","positionX","positionY","finalWidth","finalHeight","globalAlpha","frame","anchor","childTransform","drawImage",55,"ParticleBuffer","dynamicPropertyFlags","vertSize","vertByteSize","dynamicProperties","staticProperties","property","staticStride","staticBuffer","staticData","dynamicStride","dynamicBuffer","dynamicData","initBuffers","dynamicOffset","DYNAMIC_DRAW","staticOffset","uploadDynamic","amount","uploadFunction","uploadStatic",56,"numIndices","tempMatrix","ParticleShader","uploadVertices","aPositionCoord","uploadPosition","aRotation","uploadRotation","aTextureCoord","uploadUvs","uploadAlpha","totalChildren","generateBuffers","uAlpha","_texture","_glTextures","updateTexture","buffers","sprite","crop","_frame","spritePosition","spriteRotation","textureUvs","_uvs","x0","y0","spriteAlpha","./ParticleBuffer","./ParticleShader",57,"TextureShader","../../renderers/webgl/shaders/TextureShader",58,"SystemRenderer","system","sayHello","_backgroundColor","_backgroundColorRgba","_backgroundColorString","hex2string","removeView",59,"refresh","CanvasMaskManager","smoothProperty","imageSmoothingEnabled","webkitImageSmoothingEnabled","mozImageSmoothingEnabled","oImageSmoothingEnabled","msImageSmoothingEnabled","initPlugins","_mapBlendModes","pluginTarget","mixin","cacheParent","screencanvas","fillStyle","clearRect","fillRect","renderDisplayObject","destroyPlugins","tempContext","canUseNewCanvasBlendModes","../SystemRenderer","./utils/CanvasMaskManager",60,61,"updateGraphicsTint","beginPath","closePath","strokeStyle","stroke","strokeRect","kappa","ox","oy","xe","ye","xm","ym","rx","ry","maxRadius","renderGraphicsMask","tintR","tintG","tintB","../../../const",62,"maskData","save","cacheAlpha","clip","restore","./CanvasGraphics",63,"CanvasTinter","getTintedTexture","roundColor","stringColor","tintCache","tintMethod","convertTintToImage","tintImage","toDataURL","tintWithMultiply","tintWithOverlay","tintWithPerPixel","rgbValues","pixelData","getImageData","pixels","putImageData","step","cacheStepsPerColorChannel","rgb2hex","canUseMultiply","../../../utils",64,"TextureManager","_managedTextures","glTextures","getTexture","hasLoaded","glTexture","uid","destroyTexture","_skipRemove","removeAll",65,"handleContextLost","handleContextRestored","_contextOptions","premultipliedAlpha","MaskManager","StencilManager","FilterManager","BlendModeManager","_initContext","mapWebGLBlendModesToPixi","drawModes","mapWebGLDrawModesToPixi","_activeShader","_activeRenderTarget","_activeTextureLocation","_activeTexture","textureManager","disable","DEPTH_TEST","CULL_FACE","enable","BLEND","rootRenderTarget","bindRenderTarget","isContextLost","renderTarget","setFilterStack","filterStack","objectRenderer","setMaskStack","stencilMaskStack","bindShader","preventDefault","destroyAll","./TextureManager","./filters/FXAAFilter","./managers/BlendModeManager","./managers/FilterManager","./managers/MaskManager","./managers/ShaderManager","./managers/StencilManager","./utils/ObjectRenderer","./utils/RenderTarget","./utils/mapWebGLBlendModesToPixi","./utils/mapWebGLDrawModesToPixi",66,"shaders","DefaultShader","defaultVertexSrc","defaultFragmentSrc","getShader","applyFilter","syncUniform","../shaders/TextureShader",67,"./AbstractFilter",68,"maskMatrix","otherMatrix","maskSprite","calculateMappedMatrix","../../../math",69,"currentBlendMode","blendFunc","./WebGLManager",70,"texturePool","textureSize","currentFrame","Quad","quad","capFilterArea","getRenderTarget","setRenderTarget","filterData","previousFilterData","vertexBuffer","defaultShader","dimensions","vertices","returnRenderTarget","flipTexture","flopTexture","temp","inputTarget","outputTarget","syncUniforms","outputMatrix","mappedMatrix","ratio","translateScaleX","translateScaleY","offsetY","../utils/Quad","../utils/RenderTarget",71,"stencilStack","alphaMaskPool","AlphaMaskFilter","pushSpriteMask","pushStencilMask","popSpriteMask","popStencilMask","alphaMaskFilter","../filters/SpriteMaskFilter",72,"maxAttibs","stack","_currentId","currentShader","ComplexPrimitiveShader","PrimitiveShader","setAttribs","../shaders/ComplexPrimitiveShader","../shaders/PrimitiveShader",73,"WebGLMaskManager","STENCIL_TEST","attachStencilBuffer","sms","bindGraphics","STENCIL_BUFFER_BIT","level","colorMask","stencilFunc","ALWAYS","stencilOp","KEEP","INVERT","EQUAL","DECR","INCR",74,75,"./Shader",76,77,"textureCount","init","compile","cacheUniformLocations","cacheAttributeLocations","_glCompile","uniform1i","uniform2f","uniform3f","uniform4f","uniform1iv","uniform2iv","uniform3iv","uniform4iv","uniform1fv","uniform2fv","uniform4fv","uniformMatrix2fv","uniformMatrix4fv","_array","initSampler2D","textureData","luminance","LUMINANCE","wrapS","wrapT",78,"customUniforms","customAttributes","uSampler",79,80,"../managers/WebGLManager",81,"colors","rect2",82,"StencilMaskStack","frameBuffer","stencilBuffer","projectionFrame","calculateProjection","viewport","pm","./StencilMaskStack",83,84,"ONE","ONE_MINUS_SRC_ALPHA","SRC_ALPHA","DST_ALPHA","DST_COLOR",85,86,"cachedTint","textureDirty","vertexDirty","vertexData","sign","_onTextureUpdate","caclulateVertices","valid","smoothingEnabled","tintedTexture","destroyBaseTexture","fromFrame","frameId","TextureCache","fromImage","imageId","crossorigin","../renderers/canvas/utils/CanvasTinter",87,"numVerts","positions","Uint32Array","createIndicesForQuads","currentBatchSize","sprites","groupCount","groups","textures","ids","blend","currentGroup","currentTexture","generateMultiTextureShader","MAX_TEXTUES","_shader","vao","aTextureId","nextTexture","_enabled","_id","uvs_uint32","renderSprites","subarray","group","../../renderers/webgl/shaders/_TextureShader","../../utils/createIndicesForQuads","./generateMultiTextureShader",88,"maxTextures","generateSampleSrc","fragTemplate","sampleValues","uSamplers",89,"_text","_style","fontPropertiesCache","fontPropertiesCanvas","fontPropertiesContext","updateText","dropShadowColor","font","align","strokeThickness","wordWrap","wordWrapWidth","dropShadow","dropShadowAngle","dropShadowDistance","dropShadowBlur","textBaseline","lineJoin","miterLimit","outputText","lines","lineWidths","maxLineWidth","fontProperties","determineFontProperties","measureText","lineHeight","fontSize","linePositionX","linePositionY","shadowColor","shadowBlur","xShadowOffset","yShadowOffset","ascent","fillText","strokeText","fontStyle","baseline","imagedata","line","descent","spaceLeft","words","wordWidth","wordWidthWithSpace","../sprites/Sprite",90,"realWidth","realHeight","isLoading","imageUrl","isPowerOfTwo","_active","loadSource","naturalWidth","naturalHeight","wasLoading","_sourceLoaded","scope","BaseTextureCache","_pixiId","dispose","updateSourceImage","newSrc","image","getResolutionOfUrl",91,"textureBuffer","_updateUvs","updateBase","currentBounds","cachedWt","realResolution","getImage","getBase64","getCanvas","webGLPixels","Uint8Array","readPixels","tempCanvas","canvasData","getPixels","getPixel","../renderers/webgl/managers/FilterManager","../renderers/webgl/utils/RenderTarget","./BaseTexture","./Texture",92,"noFrame","requiresUpdate","onBaseTextureUpdated","onBaseTextureLoaded","destroyBase","fromVideo","video","fromVideoUrl","videoUrl","fromUrl","addTextureToCache","removeTextureFromCache","./TextureUvs","./VideoBaseTexture",93,"xy0_uint32","xy1_uint32","xy2_uint32","xy3_uint32","baseFrame","tw","th",94,"readyState","HAVE_ENOUGH_DATA","HAVE_FUTURE_DATA","autoUpdate","_onUpdate","_onCanPlay","_onPlayStart","_onPlayStop","__loaded","createSource","requestAnimationFrame","videoWidth","videoHeight","play","videoSrc","fromUrls",95,"Ticker","_this","_tick","time","_requestId","_emitter","TICK","_maxElapsedMS","autoStart","deltaTime","elapsedMS","lastTime","speed","FPS","minFPS","fps","minFPMS","_requestIfNeeded","performance","now","_cancelIfNeeded","cancelAnimationFrame","_startIfPossible","addOnce","remove","currentTime",96,"shared","./Ticker",97,"totalIndices",98,"_uid","_saidHello","hex","rgb","pngHead","pngEnd","magenta","yellow","getNextPowerOfTwo","number","parseFloat","userAgent","contextOptions","WebGLRenderingContext","getContextAttributes","startIdx","removeCount","./pluginTarget",99,"__plugins","pluginName","ctor",100,"mesh","extras","SpriteBatch","ReferenceError","AssetLoader","Stage","DisplayObjectContainer","Strip","Mesh","Rope","MovieClip","TilingSprite","BitmapText","scaleModes","setTexture","setText","setStyle","setFrame","uuid","./core","./extras","./filters","./mesh",101,"textWidth","textHeight","_glyphs","_font","maxWidth","maxLineHeight","fonts","prevCharCode","chars","lastLineWidth","lastSpace","charCode","charData","kerning","xOffset","yOffset","xAdvance","lineAlignOffsets","alignOffset","lenChars","validate",102,"_textures","_durations","animationSpeed","loop","_currentTime","playing","totalFrames","gotoAndStop","frameNumber","gotoAndPlay","elapsed","lag","fromFrames","frames","fromImages","images",103,"tileScale","tilePosition","_canvasPattern","uFrame","uTransform","uPixelSize","tempUvs","tempWidth","tempHeight","modX","modY","createPattern","_tileScaleOffset","../core/renderers/canvas/utils/CanvasTinter",104,"_cacheAsBitmap","_originalRenderWebGL","_originalRenderCanvas","_originalUpdateTransform","_originalHitTest","_originalDestroy","_cachedSprite","cacheAsBitmap","_originalGetBounds","_originalContainsPoint","_renderCachedWebGL","_renderCachedCanvas","_cacheAsBitmapDestroy","_destroyCachedDisplayObject","_initCachedDisplayObject","cachedRenderTarget","_getCachedBounds","_initCachedDisplayObjectCanvas",105,"getChildByName",106,"getGlobalPosition",107,"./BitmapText","./MovieClip","./TilingSprite","./cacheAsBitmap","./getChildByName","./getGlobalPosition",108,"AsciiFilter","pixelSize","../../core",109,"BloomFilter","blurXFilter","BlurXFilter","blurYFilter","BlurYFilter","defaultFilter","blur","blurX","blurY","../blur/BlurXFilter","../blur/BlurYFilter",110,"BlurDirFilter","dirX","dirY","strength","passes",111,"BlurFilter","./BlurXFilter","./BlurYFilter",112,"flip","flop",113,114,"SmartBlurFilter",115,"ColorMatrixFilter","_loadMatrix","multiply","newMatrix","_multiply","_colorMatrix","brightness","greyscale","grayscale","blackAndWhite","hue","lumR","lumG","lumB","contrast","saturate","desaturate","negative","sepia","technicolor","polaroid","toBGR","kodachrome","browni","vintage","colorTone","desaturation","toned","lightColor","darkColor","lR","lG","lB","dR","dG","dB","night","intensity","predator","lsd",116,"ColorStepFilter",117,"ConvolutionFilter","texelSize",118,"CrossHatchFilter",119,"DisplacementFilter","mapSampler",120,"DotScreenFilter",121,"BlurYTintFilter",122,"DropShadowFilter","blurYTintFilter","_dirtyPosition","_angle","_distance","hideObject","distance","./BlurYTintFilter",123,"GrayFilter","gray",124,"InvertFilter","NoiseFilter","PixelateFilter","RGBSplitFilter","ShockwaveFilter","SepiaFilter","TiltShiftFilter","TiltShiftXFilter","TiltShiftYFilter","TwistFilter","./ascii/AsciiFilter","./bloom/BloomFilter","./blur/BlurDirFilter","./blur/BlurFilter","./blur/BlurXFilter","./blur/BlurYFilter","./blur/SmartBlurFilter","./color/ColorMatrixFilter","./color/ColorStepFilter","./convolution/ConvolutionFilter","./crosshatch/CrossHatchFilter","./displacement/DisplacementFilter","./dot/DotScreenFilter","./dropshadow/DropShadowFilter","./gray/GrayFilter","./invert/InvertFilter","./noise/NoiseFilter","./pixelate/PixelateFilter","./rgb/RGBSplitFilter","./sepia/SepiaFilter","./shockwave/ShockwaveFilter","./tiltshift/TiltShiftFilter","./tiltshift/TiltShiftXFilter","./tiltshift/TiltShiftYFilter","./twist/TwistFilter",125,126,"noise",127,128,"red","green","blue",129,130,"center","params",131,"TiltShiftAxisFilter","gradientBlur","innerHeight","texSize","innerWidth","updateDelta",132,"tiltShiftXFilter","tiltShiftYFilter","./TiltShiftXFilter","./TiltShiftYFilter",133,"./TiltShiftAxisFilter",134,135,136,"loaders","accessibility","loader","./accessibility","./deprecation","./interaction","./loaders","./polyfill",137,"InteractionData","originalEvent","getLocalPosition","globalPos",138,"InteractionManager","autoPreventDefault","interactionFrequency","mouse","stopped","stopPropagation","interactiveDataPool","interactionDOMElement","eventsAdded","onMouseUp","processMouseUp","onMouseDown","processMouseDown","onMouseMove","processMouseMove","onMouseOut","processMouseOverOut","onTouchStart","processTouchStart","onTouchEnd","processTouchEnd","onTouchMove","processTouchMove","currentCursorStyle","_tempPoint","setTargetElement","element","removeEvents","addEvents","msPointerEnabled","_deltaTime","didMove","cursor","processInteractive","eventString","mapPositionToPoint","hitTest","hit","interactiveParent","clientX","clientY","isRightButton","button","which","isDown","_over","buttonMode","defaultCursor","changedTouches","cLength","touchEvent","touchData","getTouchData","returnTouchData","_touchDown","identifier","globalX","globalY","./InteractionData","./interactiveTarget",139,"interactiveTarget","./InteractionManager",140,141,"info","getElementsByTagName","common","getAttribute","letters","textureRect","kernings","first","second","bitmapFont","xmlUrl","textureUrl","loadOptions","imageMetadata","../extras",142,"bitmapFontParser","spritesheetParser","textureParser","./bitmapFontParser","./loader","./spritesheetParser","./textureParser",143,"ResourceLoader","_pixiMiddleware","addPixiMiddleware",144,"route","meta","rotated","trimmed","spriteSourceSize","sourceSize",145,146,"drawMode","canvasPadding","TRIANGLE_MESH","tempPolygon","_renderCanvasTriangleMesh","_renderCanvasTriangles","_renderCanvasDrawTriangle","index0","textureSource","textureWidth","textureHeight","u0","u1","u2","v0","v1","v2","paddingX","paddingY","centerX","centerY","normX","normY","deltaA","deltaB","deltaC","deltaD","deltaE","deltaF","renderMeshFlat","updateFrame","rawX","rawY","ind0","ind1","ind2",147,"Plane","segmentsX","segmentsY","_ready","segmentsXSub","segmentsYSub","sizeX","sizeY","totalSub","xpos","ypos","value2","value3","value4","./Mesh",148,"factor","nextPoint","perpLength","num","perpX","perpY",149,"MeshRenderer","MeshShader","./Plane","./Rope","./webgl/MeshRenderer","./webgl/MeshShader",150,"_vertexBuffer","_initWebGL","meshShader","_uvBuffer","_indexBuffer","_colorBuffer","../Mesh",151,152,"isNaN",153,154,"./Math.sign","./Object.assign","./requestAnimationFrame",155,"Date","getTime","startTime","vendors","delay"],"mappings":"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EAAA,GAAAuE,EAAA,GAAAvE,EAAA,GAAAuE,EAAA,GAAAvE,EAAA,GAAAuE,EAAA,IAAAvE,EAAA,GAAAuE,EAAA,IACAqkB,EAAA,GAAA5oB,EAAA,GAAAuE,EAAA,GAAAvE,EAAA,GAAAuE,EAAA,GAAAvE,EAAA,GAAAuE,EAAA,IAAAvE,EAAA,GAAAuE,EAAA,IAGAqkB,EAAA,IAAA5oB,EAAA,IAAAuE,EAAA,GAAAvE,EAAA,IAAAuE,EAAA,GAAAvE,EAAA,IAAAuE,EAAA,IAAAvE,EAAA,IAAAuE,EAAA,IACAqkB,EAAA,IAAA5oB,EAAA,IAAAuE,EAAA,GAAAvE,EAAA,IAAAuE,EAAA,GAAAvE,EAAA,IAAAuE,EAAA,IAAAvE,EAAA,IAAAuE,EAAA,IACAqkB,EAAA,IAAA5oB,EAAA,IAAAuE,EAAA,GAAAvE,EAAA,IAAAuE,EAAA,GAAAvE,EAAA,IAAAuE,EAAA,IAAAvE,EAAA,IAAAuE,EAAA,IACAqkB,EAAA,IAAA5oB,EAAA,IAAAuE,EAAA,GAAAvE,EAAA,IAAAuE,EAAA,GAAAvE,EAAA,IAAAuE,EAAA,IAAAvE,EAAA,IAAAuE,EAAA,IACAqkB,EAAA,IAAA5oB,EAAA,IAAAuE,EAAA,GAAAvE,EAAA,IAAAuE,EAAA,GAAAvE,EAAA,IAAAuE,EAAA,IAAAvE,EAAA,IAAAuE,EAAA,IAGAqkB,EAAA,IAAA5oB,EAAA,IAAAuE,EAAA,GAAAvE,EAAA,IAAAuE,EAAA,GAAAvE,EAAA,IAAAuE,EAAA,IAAAvE,EAAA,IAAAuE,EAAA,IACAqkB,EAAA,IAAA5oB,EAAA,IAAAuE,EAAA,GAAAvE,EAAA,IAAAuE,EAAA,GAAAvE,EAAA,IAAAuE,EAAA,IAAAvE,EAAA,IAAAuE,EAAA,IACAqkB,EAAA,IAAA5oB,EAAA,IAAAuE,EAAA,GAAAvE,EAAA,IAAAuE,EAAA,GAAAvE,EAAA,IAAAuE,EAAA,IAAAvE,EAAA,IAAAuE,EAAA,IACAqkB,EAAA,IAAA5oB,EAAA,IAAAuE,EAAA,GAAAvE,EAAA,IAAAuE,EAAA,GAAAvE,EAAA,IAAAuE,EAAA,IAAAvE,EAAA,IAAAuE,EAAA,IACAqkB,EAA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","file":"pixi.min.js","sourcesContent":[null],"sourceRoot":"./"} \ No newline at end of file +{"version":3,"sources":["pixi.js"],"names":["f","exports","module","define","amd","g","window","global","self","this","PIXI","e","t","n","r","s","o","u","a","require","i","Error","code","l","call","length",1,"createContext","setVertexAttribArrays","GLBuffer","GLFramebuffer","GLShader","GLTexture","VertexArrayObject","./lib/GLBuffer","./lib/GLFramebuffer","./lib/GLShader","./lib/GLTexture","./lib/VertexArrayObject","./lib/createContext","./lib/setVertexAttribArrays",2,"EMPTY_ARRAY_BUFFER","ArrayBuffer","Buffer","gl","type","data","drawType","buffer","createBuffer","ARRAY_BUFFER","STATIC_DRAW","upload","prototype","offset","dontBind","bind","byteLength","bufferSubData","bufferData","bindBuffer","createVertexBuffer","createIndexBuffer","ELEMENT_ARRAY_BUFFER","create",3,"Texture","Framebuffer","width","height","framebuffer","createFramebuffer","stencil","texture","enableTexture","framebufferTexture2D","FRAMEBUFFER","COLOR_ATTACHMENT0","TEXTURE_2D","enableStencil","createRenderbuffer","bindRenderbuffer","RENDERBUFFER","framebufferRenderbuffer","DEPTH_STENCIL_ATTACHMENT","renderbufferStorage","DEPTH_STENCIL","clear","b","clearColor","COLOR_BUFFER_BIT","bindFramebuffer","unbind","resize","uploadData","destroy","deleteFramebuffer","createRGBA","fromData","enableNearestScaling","enableWrapClamp","fbo","createFloat32","./GLTexture",4,"compileProgram","extractAttributes","extractUniforms","generateUniformAccessObject","Shader","vertexSrc","fragmentSrc","program","attributes","uniformData","uniforms","useProgram","./shader/compileProgram","./shader/extractAttributes","./shader/extractUniforms","./shader/generateUniformAccessObject",5,"format","createTexture","mipmap","premultiplyAlpha","RGBA","UNSIGNED_BYTE","source","pixelStorei","UNPACK_PREMULTIPLY_ALPHA_WEBGL","texImage2D","FLOATING_POINT_AVAILABLE","Float32Array","ext","getExtension","FLOAT","location","undefined","activeTexture","TEXTURE0","bindTexture","minFilter","linear","texParameteri","TEXTURE_MIN_FILTER","LINEAR_MIPMAP_LINEAR","NEAREST_MIPMAP_NEAREST","LINEAR","NEAREST","magFilter","TEXTURE_MAG_FILTER","enableMipmap","generateMipmap","enableLinearScaling","TEXTURE_WRAP_S","CLAMP_TO_EDGE","TEXTURE_WRAP_T","enableWrapRepeat","REPEAT","deleteTexture","fromSource",6,"nativeVaoExtension","nativeVao","createVertexArrayOES","indexBuffer","dirty","constructor","bindVertexArrayOES","activate","attrib","attribute","pointer","normalized","stride","start","enableVertexAttribArray","addAttribute","push","addIndex","options","draw","size","drawElements","UNSIGNED_SHORT",7,"CONTEXT_UID","canvas","getContext","id",8,"GL_MAP","attribs","maxAttribs","getParameter","MAX_VERTEX_ATTRIBS","tempAttribState","Array","attribState","disableVertexAttribArray",9,"glVertShader","compileShader","VERTEX_SHADER","glFragShader","FRAGMENT_SHADER","createProgram","attachShader","linkProgram","getProgramParameter","LINK_STATUS","console","error","VALIDATE_STATUS","getError","getProgramInfoLog","warn","deleteProgram","deleteShader","src","shader","createShader","shaderSource","getShaderParameter","COMPILE_STATUS","log","getShaderInfoLog",10,"defaultValue","Int32Array","booleanArray","array",11,"mapType","mapSize","totalAttributes","ACTIVE_ATTRIBUTES","attribData","getActiveAttrib","name","getAttribLocation","vertexAttribPointer","./mapSize","./mapType",12,"totalUniforms","ACTIVE_UNIFORMS","getActiveUniform","replace","getUniformLocation","value","./defaultValue",13,"uniformKeys","Object","keys","fullName","nameTokens","split","uniformGroup","getUniformGroup","uniform","defineProperty","get","generateGetter","set","generateSetter","template","getterTemplate","Function","setTemplate","setterTemplate","GLSL_TO_SINGLE_SETTERS","GLSL_TO_ARRAY_SETTERS","cur","join","float","vec2","vec3","vec4","int","ivec2","ivec3","ivec4","bool","bvec2","bvec3","bvec4","mat2","mat3","mat4","sampler2D",14,"GLSL_TO_SIZE",15,"GL_TABLE","typeNames","GL_TO_GLSL_TYPES","tn","FLOAT_VEC2","FLOAT_VEC3","FLOAT_VEC4","INT","INT_VEC2","INT_VEC3","INT_VEC4","BOOL","BOOL_VEC2","BOOL_VEC3","BOOL_VEC4","FLOAT_MAT2","FLOAT_MAT3","FLOAT_MAT4","SAMPLER_2D",16,"process","noop","identity","v","toBool","notId","only_once","fn","apply","arguments","_once","_isArrayLike","arr","_isArray","_arrayEach","iterator","index","_map","result","_range","count","_reduce","memo","x","_forEachOf","object","_keys","key","_indexOf","item","_keyIterator","coll","len","_restParam","func","startIndex","Math","max","rest","_withoutIndex","callback","_eachOfLimit","limit","obj","nextKey","done","running","errored","replenish","err","doParallel","async","eachOf","doParallelLimit","doSeries","eachOfSeries","_asyncMap","eachfn","results","_filter","sort","_reject","cb","_createTester","check","getResult","iteratee","_","_findGetResult","_parallel","tasks","task","args","_concat","y","concat","_queue","worker","concurrency","payload","_insert","q","pos","started","idle","setImmediate","drain","unshift","saturated","_next","workers","removed","workersList","splice","empty","paused","kill","pause","resume","resumeCount","min","w","_console_fn","_times","mapper","_applyEach","fns","go","that","pop","ensureAsync","innerArgs","sync","previous_async","root","noConflict","_toString","toString","isArray","_isObject","k","hasOwnProperty","_setImmediate","_delay","setTimeout","nextTick","forEach","each","forEachSeries","eachSeries","forEachLimit","eachLimit","forEachOf","completed","iter","forEachOfSeries","iterate","forEachOfLimit","eachOfLimit","map","mapSeries","mapLimit","inject","foldl","reduce","foldr","reduceRight","reversed","reverse","transform","select","filter","selectLimit","filterLimit","selectSeries","filterSeries","reject","rejectLimit","rejectSeries","any","some","someLimit","all","every","everyLimit","detect","detectSeries","detectLimit","sortBy","comparator","left","right","criteria","auto","addListener","listeners","removeListener","idx","taskComplete","remainingTasks","slice","runningTasks","ready","requires","listener","taskCallback","dep","safeResults","val","rkey","retry","times","parseTimes","acc","parseInt","DEFAULT_TIMES","interval","DEFAULT_INTERVAL","wrappedTask","wrappedCallback","wrappedResults","retryAttempt","finalAttempt","seriesCallback","retryInterval","opts","attempts","series","waterfall","wrapIterator","next","parallel","parallelLimit","makeCallback","callArgs","concatSeries","whilst","test","doWhilst","calls","until","doUntil","during","truth","doDuring","queue","items","priorityQueue","_compareTasks","priority","_binarySearch","sequence","compare","beg","end","mid","cargo","dir","memoize","hasher","queues","memoized","unmemoized","unmemoize","timesSeries","timesLimit","seq","newargs","nextargs","compose","applyEach","applyEachSeries","forever","constant","values","wrapSync","asyncify","then","message","_process",17,"normalizeArray","parts","allowAboveRoot","up","last","xs","res","splitPathRe","splitPath","filename","exec","resolve","resolvedPath","resolvedAbsolute","path","cwd","TypeError","charAt","p","normalize","isAbsolute","trailingSlash","substr","paths","relative","from","to","trim","fromParts","toParts","samePartsLength","outputParts","sep","delimiter","dirname","basename","extname","str",18,"cleanUpNextTick","draining","currentQueue","queueIndex","drainQueue","timeout","run","clearTimeout","Item","fun","title","browser","env","argv","version","versions","on","once","off","removeAllListeners","emit","binding","chdir","umask",19,"RangeError","errors","mapDomain","string","regexSeparators","labels","encoded","ucs2decode","extra","output","counter","charCodeAt","ucs2encode","stringFromCharCode","basicToDigit","codePoint","base","digitToBasic","digit","flag","adapt","delta","numPoints","firstTime","floor","damp","baseMinusTMin","tMax","skew","decode","input","out","basic","j","oldi","baseMinusT","inputLength","initialN","bias","initialBias","lastIndexOf","maxInt","tMin","encode","handledCPCount","basicLength","m","currentValue","handledCPCountPlusOne","qMinusT","toUnicode","regexPunycode","toLowerCase","toASCII","regexNonASCII","freeExports","nodeType","freeModule","freeGlobal","punycode","overflow","not-basic","invalid-input","String","fromCharCode","ucs2",20,"prop","qs","eq","regexp","maxKeys","kstr","vstr","indexOf","decodeURIComponent",21,"stringifyPrimitive","isFinite","objectKeys","ks","encodeURIComponent",22,"parse","stringify","./decode","./encode",23,"Url","protocol","slashes","auth","host","port","hostname","hash","search","query","pathname","href","urlParse","url","parseQueryString","slashesDenoteHost","isObject","urlFormat","isString","urlResolve","urlResolveObject","resolveObject","arg","isNull","isNullOrUndefined","protocolPattern","portPattern","delims","unwise","autoEscape","nonHostChars","hostEndingChars","hostnameMaxLen","hostnamePartPattern","hostnamePartStart","unsafeProtocol","javascript","javascript:","hostlessProtocol","slashedProtocol","http","https","ftp","gopher","file","http:","https:","ftp:","gopher:","file:","querystring","proto","lowerProto","match","hostEnd","hec","atSign","parseHost","ipv6Hostname","hostparts","part","newpart","validParts","notHost","bit","domainArray","newOut","h","ae","esc","escape","qm","rel","relPath","shift","isSourceAbs","isRelAbs","mustEndAbs","removeAllDots","srcPath","psychotic","authInHost","hasTrailingSlash",24,"earcut","holeIndices","dim","hasHoles","outerLen","outerNode","linkedList","triangles","minX","minY","maxX","maxY","eliminateHoles","earcutLinked","clockwise","sum","insertNode","filterPoints","again","steiner","equals","area","prev","removeNode","ear","pass","indexCurve","stop","isEarHashed","isEar","cureLocalIntersections","splitEarcut","c","pointInTriangle","minTX","minTY","maxTX","maxTY","minZ","zOrder","maxZ","nextZ","z","prevZ","intersects","locallyInside","isValidDiagonal","splitPolygon","list","getLeftmost","compareX","eliminateHole","hole","findHoleBridge","hx","hy","qx","Infinity","tan","tanMin","abs","sortLinked","tail","numMerges","pSize","qSize","inSize","leftmost","ax","ay","bx","by","cx","cy","px","py","intersectsPolygon","middleInside","p1","p2","q1","q2","inside","a2","Node","b2","an","bp",25,"EE","context","EventEmitter","prefix","_events","event","exists","evt","available","ee","a1","a3","a4","a5","events","setMaxListeners","prefixed",26,"toObject","propIsEnumerable","propertyIsEnumerable","assign","target","symbols","getOwnPropertySymbols",27,"called","_each","_eachLimit","_mapLimit","_detect","main_callback","theCallback","working","drained","ts","ds",28,"Loader","baseUrl","progress","loading","_progressChunk","_beforeMiddleware","_afterMiddleware","_boundLoadResource","_loadResource","_boundOnLoad","_onLoad","_buffer","_numToLoad","resources","urlParser","Resource","add","enqueue","onComplete","_handleBaseUrl","parsedUrl","before","pre","after","use","reset","load","resource","dequeue","_dequeue","_runMiddleware","_onComplete","LOAD_TYPE","XHR_READY_STATE","XHR_RESPONSE_TYPE","./Resource","eventemitter3",29,"isDataUrl","crossOrigin","loadType","_determineLoadType","xhrType","metadata","xhr","isJson","isXml","isImage","isAudio","isVideo","_boundComplete","complete","_boundOnError","_onError","_boundOnProgress","_onProgress","_boundXhrOnError","_xhrOnError","_boundXhrOnAbort","_xhrOnAbort","_boundXhrOnLoad","_xhrOnLoad","_boundXdrOnTimeout","_xdrOnTimeout","reqType","setExtMap","substring","_url","useXdr","XDomainRequest","XMLHttpRequest","tempAnchor","removeEventListener","onerror","ontimeout","onprogress","onload","_determineCrossOrigin","IMAGE","_loadImage","AUDIO","_loadElement","VIDEO","XHR","_loadXdr","_loadXhr","Image","addEventListener","Audio","document","createElement","navigator","isCocoonJS","appendChild","_createSource","toUpperCase","_determineXhrType","open","JSON","DOCUMENT","responseType","TEXT","send","xdr","mime","nodeName","lengthComputable","loaded","total","status","statusText","responseText","DOMParser","domparser","parseFromString","div","innerHTML","response","responseURL","loc","samePort","_xhrTypeMap","_getExtension","_loadTypeMap","slashIndex","queryStart","_getMimeFromXhrType","BUFFER","BLOB","DEFAULT","UNSENT","OPENED","HEADERS_RECEIVED","LOADING","DONE","gif","png","bmp","jpg","jpeg","tif","tiff","webp","tga","xhtml","html","htm","xml","tmx","tsx","svg","json","text","txt","setExtensionLoadType","setExtensionXhrType",30,"_keyStr","encodeBinary","bytebuffer","encodedCharIndexes","inx","jnx","paddingBytes",31,"middleware","caching","memory","parsing","blob","./Loader","./middlewares/caching/memory","./middlewares/parsing/blob",32,"cache",33,"b64","URL","webkitURL","Blob","createObjectURL","revokeObjectURL","getResponseHeader","../../Resource","../../b64",34,"description","author","contributors","main","homepage","bugs","license","repository","scripts","build","docs","files","dependencies","brfs","object-assign","pixi-gl-core","resource-loader","devDependencies","browserify","chai","del","gulp","gulp-cached","gulp-concat","gulp-debug","gulp-header","gulp-jshint","gulp-mirror","gulp-plumber","gulp-rename","gulp-sourcemaps","gulp-uglify","gulp-util","jaguarjs-jsdoc","jsdoc","jshint-summary","minimist","mocha","require-dir","run-sequence","testem","vinyl-buffer","vinyl-source-stream","watchify",35,"AccessibilityManager","renderer","style","position","top","zIndex","pool","renderId","debug","children","_onKeyDown","_onMouseMove","isActive","core","DisplayObject","update","view","parentNode","deactivate","removeChild","updateAccessibleObjects","displayObject","visible","accessible","interactive","_accessibleActive","addChild","_lastObjectRendered","rect","getBoundingClientRect","sx","sy","child","utils","removeItems","_accessibleDiv","hitArea","wt","worldTransform","tx","ty","d","getBounds","capHitArea","backgroundColor","borderStyle","_onClick","_onFocus","_onFocusOut","accessibleTitle","tabIndex","interactionManager","plugins","interaction","dispatchEvent","eventData","keyCode","WebGLRenderer","registerPlugin","CanvasRenderer","../core","./accessibleTarget",36,"accessibleTarget",37,"./AccessibilityManager",38,"CONST","VERSION","PI_2","PI","RAD_TO_DEG","DEG_TO_RAD","TARGET_FPMS","RENDERER_TYPE","UNKNOWN","WEBGL","CANVAS","BLEND_MODES","NORMAL","ADD","MULTIPLY","SCREEN","OVERLAY","DARKEN","LIGHTEN","COLOR_DODGE","COLOR_BURN","HARD_LIGHT","SOFT_LIGHT","DIFFERENCE","EXCLUSION","HUE","SATURATION","COLOR","LUMINOSITY","DRAW_MODES","POINTS","LINES","LINE_LOOP","LINE_STRIP","TRIANGLES","TRIANGLE_STRIP","TRIANGLE_FAN","SCALE_MODES","RETINA_PREFIX","RESOLUTION","FILTER_RESOLUTION","DEFAULT_RENDER_OPTIONS","resolution","antialias","forceFXAA","autoResize","transparent","clearBeforeRender","preserveDrawingBuffer","roundPixels","SHAPES","POLY","RECT","CIRC","ELIP","RREC","SPRITE_BATCH_SIZE","../../package.json",39,"Container","math","RenderTexture","_tempMatrix","Matrix","defineProperties","scale","getLocalBounds","_width","_height","onChildrenChange","argumentsLength","parent","addChildAt","swapChildren","child2","index1","getChildIndex","index2","setChildIndex","currentIndex","getChildAt","removeChildAt","removeChildren","beginIndex","endIndex","begin","range","generateTexture","scaleMode","bounds","renderTexture","render","updateTransform","displayObjectUpdateTransform","dirtyTransform","containerUpdateTransform","_currentBounds","Rectangle","EMPTY","childBounds","childMaxX","childMaxY","childVisible","_bounds","containerGetBounds","matrixCache","IDENTITY","renderWebGL","worldAlpha","renderable","_mask","_filters","currentRenderer","flush","filterManager","pushFilter","maskManager","pushMask","_renderWebGL","popMask","popFilter","_renderCanvas","renderCanvas","alpha","destroyChildren","../math","../textures/RenderTexture","../utils","./DisplayObject",40,"Point","_position","CachePoint","pivot","_rotation","localTransform","filterArea","_sr","_cr","_tempDisplayObjectParent","doc","posiiton","scaleX","scaleY","rotation","sin","cos","worldVisible","mask","filters","pt","lt","matrix","toGlobal","toLocal","point","applyInverse","setParent","container","setTransform","skewX","skewY","pivotX","pivotY","../const",41,"Graphics","fillAlpha","lineWidth","lineColor","graphicsData","tint","_prevTint","blendMode","currentPath","_webGL","isMask","boundsPadding","_localBounds","glDirty","boundsDirty","cachedSpriteDirty","CanvasBuffer","CanvasGraphics","GraphicsData","tempPoint","clone","updateLocalBounds","lineStyle","color","lineAlpha","shape","points","Polygon","closed","drawShape","moveTo","lineTo","quadraticCurveTo","cpX","cpY","toX","toY","xa","ya","fromX","fromY","bezierCurveTo","cpX2","cpY2","dt","dt2","dt3","t2","t3","arcTo","x1","y1","x2","y2","radius","b1","mm","dd","cc","tt","k1","sqrt","k2","j1","j2","qy","startAngle","atan2","endAngle","arc","anticlockwise","sweep","segs","ceil","startX","startY","theta","theta2","cTheta","sTheta","segMinus","remainder","real","angle","beginFill","filling","fillColor","fill","endFill","drawRect","drawRoundedRect","RoundedRectangle","drawCircle","Circle","drawEllipse","Ellipse","drawPolygon","clearDirty","canvasBuffer","fromCanvas","baseTexture","translate","renderGraphics","setObjectRenderer","graphics","compositeOperation","blendModes","globalCompositeOperation","w0","w1","h0","h1","x3","y3","x4","y4","containsPoint","contains","padding","_webgl","../display/Container","../renderers/canvas/utils/CanvasBuffer","../renderers/canvas/utils/CanvasGraphics","../textures/Texture","./GraphicsData",42,"_lineTint","_fillTint",43,"GraphicsRenderer","ObjectRenderer","graphicsDataPool","primitiveShader","complexPrimitiveShader","maximumSimplePolySize","WebGLGraphicsData","PrimitiveShader","buildLine","buildPoly","buildComplexPoly","buildRectangle","buildRoundedRectangle","buildCircle","onContextChange","webGLData","updateGraphics","webGL","blendModeManager","setBlendMode","mode","bindShader","translationMatrix","toArray","hex2rgb","aVertexPosition","aColor","indices","drawCount","lastIndex","switchMode","canDrawUsingSimple","../../const","../../math","../../renderers/webgl/WebGLRenderer","../../renderers/webgl/utils/ObjectRenderer","../../utils","./WebGLGraphicsData","./shaders/PrimitiveShader","./utils/buildCircle","./utils/buildComplexPoly","./utils/buildLine","./utils/buildPoly","./utils/buildRectangle","./utils/buildRoundedRectangle",44,"glPoints","glIndices","Uint16Array","deleteBuffer",45,46,"circleData","totalSegs","seg","verts","vecPos","tempPoints","../../../utils","./buildLine",47,48,"firstPoint","lastPoint","midPointX","midPointY","p1x","p1y","p2x","p2y","p3x","p3y","perpx","perpy","perp2x","perp2y","perp3x","perp3y","c1","c2","denom","pdist","dist","indexCount","indexStart","../../../math",49,"vertPos",50,"rectData",51,"rrectData","recPoints","quadraticBezierCurve","getPt","n1","n2","perc","diff","xb","yb",52,"ticker","Sprite","ParticleContainer","SpriteRenderer","ParticleRenderer","Text","BaseTexture","VideoBaseTexture","TextureUvs","WebGLManager","ShaderManager","RenderTarget","AbstractFilter","FXAAFilter","SpriteMaskFilter","glCore","autoDetectRenderer","noWebGL","isWebGLSupported","./const","./display/Container","./display/DisplayObject","./graphics/Graphics","./graphics/GraphicsData","./graphics/webgl/GraphicsRenderer","./math","./particles/ParticleContainer","./particles/webgl/ParticleRenderer","./renderers/canvas/CanvasRenderer","./renderers/canvas/utils/CanvasBuffer","./renderers/canvas/utils/CanvasGraphics","./renderers/webgl/WebGLRenderer","./renderers/webgl/filters/AbstractFilter","./renderers/webgl/filters/FXAAFilter","./renderers/webgl/filters/SpriteMaskFilter","./renderers/webgl/managers/ShaderManager","./renderers/webgl/managers/WebGLManager","./renderers/webgl/shaders/Shader","./renderers/webgl/utils/ObjectRenderer","./renderers/webgl/utils/RenderTarget","./sprites/Sprite","./sprites/webgl/SpriteRenderer","./text/Text","./textures/BaseTexture","./textures/RenderTexture","./textures/Texture","./textures/TextureUvs","./textures/VideoBaseTexture","./ticker","./utils",53,"fromArray","transpose","newPos","rotate","tx1","append","d1","sr","cr","nsx","prepend","invert","copy","TEMP_MATRIX","./Point",54,55,"./Matrix","./shapes/Circle","./shapes/Ellipse","./shapes/Polygon","./shapes/Rectangle","./shapes/RoundedRectangle",56,"dx","dy","r2","./Rectangle",57,"normx","normy",58,"points_","il","xi","yi","xj","yj","intersect","../Point",59,60,61,"maxSize","properties","batchSize","maxBatchSize","_properties","_maxSize","_batchSize","_buffers","_bufferToUpdate","interactiveChildren","setProperties","uvs","particle","smallestChildIndex","bufferIndex","isRotated","positionX","positionY","finalWidth","finalHeight","globalAlpha","frame","anchor","childTransform","drawImage",62,"ParticleBuffer","dynamicPropertyFlags","vertSize","vertByteSize","dynamicProperties","staticProperties","property","staticStride","staticBuffer","staticData","dynamicStride","dynamicBuffer","dynamicData","initBuffers","dynamicOffset","DYNAMIC_DRAW","staticOffset","uploadDynamic","amount","uploadFunction","uploadStatic",63,"numIndices","tempMatrix","ParticleShader","shaderManager","uploadVertices","aPositionCoord","uploadPosition","aRotation","uploadRotation","aTextureCoord","uploadUvs","uploadAlpha","setShader","totalChildren","generateBuffers","currentRenderTarget","projectionMatrix","uniformMatrix3fv","_location","uniform1f","uAlpha","_texture","_glTextures","updateTexture","buffers","sprite","crop","_frame","spritePosition","spriteRotation","textureUvs","_uvs","x0","y0","spriteAlpha","./ParticleBuffer","./ParticleShader",64,"TextureShader","../../renderers/webgl/shaders/TextureShader",65,"SystemRenderer","system","sayHello","_backgroundColor","_backgroundColorRgba","_backgroundColorString","hex2string","removeView",66,"refresh","CanvasMaskManager","smoothProperty","imageSmoothingEnabled","webkitImageSmoothingEnabled","mozImageSmoothingEnabled","oImageSmoothingEnabled","msImageSmoothingEnabled","initPlugins","_mapBlendModes","pluginTarget","mixin","cacheParent","screencanvas","fillStyle","clearRect","fillRect","renderDisplayObject","destroyPlugins","tempContext","canUseNewCanvasBlendModes","../SystemRenderer","./utils/CanvasMaskManager",67,68,"updateGraphicsTint","beginPath","closePath","strokeStyle","stroke","strokeRect","kappa","ox","oy","xe","ye","xm","ym","rx","ry","maxRadius","renderGraphicsMask","tintR","tintG","tintB","../../../const",69,"maskData","save","cacheAlpha","clip","restore","./CanvasGraphics",70,"CanvasTinter","getTintedTexture","roundColor","stringColor","tintCache","tintMethod","convertTintToImage","tintImage","toDataURL","tintWithMultiply","tintWithOverlay","tintWithPerPixel","rgbValues","pixelData","getImageData","pixels","putImageData","step","cacheStepsPerColorChannel","rgb2hex","canUseMultiply",71,"TextureManager","_managedTextures","glTextures","getTexture","hasLoaded","glTexture","uid","destroyTexture","_skipRemove","removeAll",72,"handleContextLost","handleContextRestored","_contextOptions","premultipliedAlpha","MaskManager","stencilManager","StencilManager","FilterManager","BlendModeManager","_initContext","mapWebGLBlendModesToPixi","drawModes","mapWebGLDrawModesToPixi","_activeShader","_activeRenderTarget","_activeTextureLocation","_activeTexture","textureManager","disable","DEPTH_TEST","CULL_FACE","enable","BLEND","rootRenderTarget","bindRenderTarget","isContextLost","renderTarget","setFilterStack","filterStack","objectRenderer","setMaskStack","stencilMaskStack","preventDefault","destroyAll","./TextureManager","./filters/FXAAFilter","./managers/BlendModeManager","./managers/FilterManager","./managers/MaskManager","./managers/ShaderManager","./managers/StencilManager","./utils/ObjectRenderer","./utils/RenderTarget","./utils/mapWebGLBlendModesToPixi","./utils/mapWebGLDrawModesToPixi",73,"shaders","DefaultShader","defaultVertexSrc","defaultFragmentSrc","getShader","applyFilter","syncUniform","../shaders/TextureShader",74,"./AbstractFilter",75,"maskMatrix","otherMatrix","maskSprite","calculateMappedMatrix",76,"currentBlendMode","blendFunc","./WebGLManager",77,"texturePool","textureSize","currentFrame","Quad","quad","capFilterArea","getRenderTarget","setRenderTarget","filterData","previousFilterData","vertexBuffer","defaultShader","dimensions","vertices","returnRenderTarget","flipTexture","flopTexture","temp","inputTarget","outputTarget","syncUniforms","outputMatrix","mappedMatrix","ratio","translateScaleX","translateScaleY","offsetY","../utils/Quad","../utils/RenderTarget",78,"stencilStack","alphaMaskPool","AlphaMaskFilter","pushSpriteMask","pushStencilMask","popSpriteMask","popStencilMask","alphaMaskFilter","../filters/SpriteMaskFilter",79,"maxAttibs","stack","_currentId","currentShader","ComplexPrimitiveShader","setAttribs","../shaders/ComplexPrimitiveShader","../shaders/PrimitiveShader",80,"WebGLMaskManager","STENCIL_TEST","pushStencil","attachStencilBuffer","sms","bindGraphics","STENCIL_BUFFER_BIT","level","colorMask","stencilFunc","ALWAYS","stencilOp","KEEP","INVERT","EQUAL","DECR","INCR","popStencil",81,82,"./Shader",83,84,"textureCount","init","compile","cacheUniformLocations","cacheAttributeLocations","_glCompile","uniform1i","uniform2f","uniform3f","uniform4f","uniform1iv","uniform2iv","uniform3iv","uniform4iv","uniform1fv","uniform2fv","uniform3fv","uniform4fv","uniformMatrix2fv","uniformMatrix4fv","_array","initSampler2D","textureData","luminance","LUMINANCE","wrapS","wrapT",85,"customUniforms","customAttributes","uSampler",86,87,"../managers/WebGLManager",88,"colors","rect2",89,"StencilMaskStack","frameBuffer","stencilBuffer","projectionFrame","calculateProjection","viewport","pm","./StencilMaskStack",90,91,"ONE","ONE_MINUS_SRC_ALPHA","SRC_ALPHA","DST_ALPHA","DST_COLOR",92,93,"cachedTint","textureDirty","vertexDirty","vertexData","sign","_onTextureUpdate","caclulateVertices","valid","smoothingEnabled","tintedTexture","destroyBaseTexture","fromFrame","frameId","TextureCache","fromImage","imageId","crossorigin","../renderers/canvas/utils/CanvasTinter",94,"numVerts","positions","Uint32Array","createIndicesForQuads","groupCount","groups","textures","ids","blend","currentGroup","currentTexture","generateMultiTextureShader","MAX_TEXTUES","MAX_TEXTURE_IMAGE_UNITS","_shader","vao","aTextureId","nextTexture","_enabled","_id","uvs_uint32","currentBatchSize","subarray","group","sprites","../../renderers/webgl/shaders/_TextureShader","../../utils/createIndicesForQuads","./generateMultiTextureShader",95,"maxTextures","generateSampleSrc","fragTemplate","sampleValues","uSamplers",96,"_text","_style","fontPropertiesCache","fontPropertiesCanvas","fontPropertiesContext","updateText","dropShadowColor","font","align","strokeThickness","wordWrap","wordWrapWidth","dropShadow","dropShadowAngle","dropShadowDistance","dropShadowBlur","textBaseline","lineJoin","miterLimit","outputText","lines","lineWidths","maxLineWidth","fontProperties","determineFontProperties","measureText","lineHeight","fontSize","linePositionX","linePositionY","shadowColor","shadowBlur","xShadowOffset","yShadowOffset","ascent","fillText","strokeText","fontStyle","baseline","imagedata","line","descent","spaceLeft","words","wordWidth","wordWidthWithSpace","../sprites/Sprite",97,"realWidth","realHeight","isLoading","imageUrl","isPowerOfTwo","_active","loadSource","naturalWidth","naturalHeight","wasLoading","_sourceLoaded","scope","BaseTextureCache","_pixiId","dispose","updateSourceImage","newSrc","image","getResolutionOfUrl",98,"textureBuffer","_updateUvs","updateBase","currentBounds","cachedWt","realResolution","getImage","getBase64","getCanvas","webGLPixels","Uint8Array","readPixels","tempCanvas","canvasData","getPixels","getPixel","../renderers/webgl/managers/FilterManager","../renderers/webgl/utils/RenderTarget","./BaseTexture","./Texture",99,"noFrame","requiresUpdate","onBaseTextureUpdated","onBaseTextureLoaded","destroyBase","fromVideo","video","fromVideoUrl","videoUrl","fromUrl","addTextureToCache","removeTextureFromCache","./TextureUvs","./VideoBaseTexture",100,"xy0_uint32","xy1_uint32","xy2_uint32","xy3_uint32","baseFrame","tw","th",101,"readyState","HAVE_ENOUGH_DATA","HAVE_FUTURE_DATA","autoUpdate","_onUpdate","_onCanPlay","_onPlayStart","_onPlayStop","__loaded","createSource","requestAnimationFrame","videoWidth","videoHeight","play","videoSrc","fromUrls",102,"Ticker","_this","_tick","time","_requestId","_emitter","TICK","_maxElapsedMS","autoStart","deltaTime","elapsedMS","lastTime","speed","FPS","minFPS","fps","minFPMS","_requestIfNeeded","performance","now","_cancelIfNeeded","cancelAnimationFrame","_startIfPossible","addOnce","remove","currentTime",103,"shared","./Ticker",104,"totalIndices",105,"_uid","_saidHello","hex","rgb","pngHead","pngEnd","magenta","yellow","getNextPowerOfTwo","number","parseFloat","userAgent","contextOptions","WebGLRenderingContext","getContextAttributes","startIdx","removeCount","./pluginTarget",106,"__plugins","pluginName","ctor",107,"mesh","extras","SpriteBatch","ReferenceError","AssetLoader","Stage","DisplayObjectContainer","Strip","Mesh","Rope","MovieClip","TilingSprite","BitmapText","scaleModes","setTexture","setText","setStyle","setFrame","uuid","./core","./extras","./filters","./mesh",108,"textWidth","textHeight","_glyphs","_font","maxWidth","maxLineHeight","fonts","prevCharCode","chars","lastLineWidth","lastSpace","charCode","charData","kerning","xOffset","yOffset","xAdvance","lineAlignOffsets","alignOffset","lenChars","validate",109,"_textures","_durations","animationSpeed","loop","_currentTime","playing","totalFrames","gotoAndStop","frameNumber","gotoAndPlay","elapsed","lag","fromFrames","frames","fromImages","images",110,"tileScale","tilePosition","_canvasPattern","uFrame","uTransform","uPixelSize","tempUvs","tempWidth","tempHeight","modX","modY","createPattern","_tileScaleOffset","../core/renderers/canvas/utils/CanvasTinter",111,"_cacheAsBitmap","_originalRenderWebGL","_originalRenderCanvas","_originalUpdateTransform","_originalHitTest","_originalDestroy","_cachedSprite","cacheAsBitmap","_originalGetBounds","_originalContainsPoint","_renderCachedWebGL","_renderCachedCanvas","_cacheAsBitmapDestroy","_destroyCachedDisplayObject","_initCachedDisplayObject","cachedRenderTarget","_getCachedBounds","_initCachedDisplayObjectCanvas",112,"getChildByName",113,"getGlobalPosition",114,"./BitmapText","./MovieClip","./TilingSprite","./cacheAsBitmap","./getChildByName","./getGlobalPosition",115,"AsciiFilter","pixelSize","../../core",116,"BloomFilter","blurXFilter","BlurXFilter","blurYFilter","BlurYFilter","defaultFilter","blur","blurX","blurY","../blur/BlurXFilter","../blur/BlurYFilter",117,"BlurDirFilter","dirX","dirY","strength","passes",118,"BlurFilter","./BlurXFilter","./BlurYFilter",119,"flip","flop",120,121,"SmartBlurFilter",122,"ColorMatrixFilter","_loadMatrix","multiply","newMatrix","_multiply","_colorMatrix","brightness","greyscale","grayscale","blackAndWhite","hue","lumR","lumG","lumB","contrast","saturate","desaturate","negative","sepia","technicolor","polaroid","toBGR","kodachrome","browni","vintage","colorTone","desaturation","toned","lightColor","darkColor","lR","lG","lB","dR","dG","dB","night","intensity","predator","lsd",123,"ColorStepFilter",124,"ConvolutionFilter","texelSize",125,"CrossHatchFilter",126,"DisplacementFilter","mapSampler",127,"DotScreenFilter",128,"BlurYTintFilter",129,"DropShadowFilter","blurYTintFilter","_dirtyPosition","_angle","_distance","hideObject","distance","./BlurYTintFilter",130,"GrayFilter","gray",131,"InvertFilter","NoiseFilter","PixelateFilter","RGBSplitFilter","ShockwaveFilter","SepiaFilter","TiltShiftFilter","TiltShiftXFilter","TiltShiftYFilter","TwistFilter","./ascii/AsciiFilter","./bloom/BloomFilter","./blur/BlurDirFilter","./blur/BlurFilter","./blur/BlurXFilter","./blur/BlurYFilter","./blur/SmartBlurFilter","./color/ColorMatrixFilter","./color/ColorStepFilter","./convolution/ConvolutionFilter","./crosshatch/CrossHatchFilter","./displacement/DisplacementFilter","./dot/DotScreenFilter","./dropshadow/DropShadowFilter","./gray/GrayFilter","./invert/InvertFilter","./noise/NoiseFilter","./pixelate/PixelateFilter","./rgb/RGBSplitFilter","./sepia/SepiaFilter","./shockwave/ShockwaveFilter","./tiltshift/TiltShiftFilter","./tiltshift/TiltShiftXFilter","./tiltshift/TiltShiftYFilter","./twist/TwistFilter",132,133,"noise",134,135,"red","green","blue",136,137,"center","params",138,"TiltShiftAxisFilter","gradientBlur","innerHeight","texSize","innerWidth","updateDelta",139,"tiltShiftXFilter","tiltShiftYFilter","./TiltShiftXFilter","./TiltShiftYFilter",140,"./TiltShiftAxisFilter",141,142,143,"loaders","accessibility","loader","./accessibility","./deprecation","./interaction","./loaders","./polyfill",144,"InteractionData","originalEvent","getLocalPosition","globalPos",145,"InteractionManager","autoPreventDefault","interactionFrequency","mouse","stopped","stopPropagation","interactiveDataPool","interactionDOMElement","eventsAdded","onMouseUp","processMouseUp","onMouseDown","processMouseDown","onMouseMove","processMouseMove","onMouseOut","processMouseOverOut","onTouchStart","processTouchStart","onTouchEnd","processTouchEnd","onTouchMove","processTouchMove","currentCursorStyle","_tempPoint","setTargetElement","element","removeEvents","addEvents","msPointerEnabled","_deltaTime","didMove","cursor","processInteractive","eventString","mapPositionToPoint","hitTest","hit","interactiveParent","clientX","clientY","isRightButton","button","which","isDown","_over","buttonMode","defaultCursor","changedTouches","cLength","touchEvent","touchData","getTouchData","returnTouchData","_touchDown","identifier","globalX","globalY","./InteractionData","./interactiveTarget",146,"interactiveTarget","./InteractionManager",147,148,"info","getElementsByTagName","common","getAttribute","letters","textureRect","kernings","first","second","bitmapFont","xmlUrl","textureUrl","loadOptions","imageMetadata","../extras",149,"bitmapFontParser","spritesheetParser","textureParser","./bitmapFontParser","./loader","./spritesheetParser","./textureParser",150,"ResourceLoader","_pixiMiddleware","addPixiMiddleware",151,"route","meta","rotated","trimmed","spriteSourceSize","sourceSize",152,153,"drawMode","canvasPadding","TRIANGLE_MESH","tempPolygon","_renderCanvasTriangleMesh","_renderCanvasTriangles","_renderCanvasDrawTriangle","index0","textureSource","textureWidth","textureHeight","u0","u1","u2","v0","v1","v2","paddingX","paddingY","centerX","centerY","normX","normY","deltaA","deltaB","deltaC","deltaD","deltaE","deltaF","renderMeshFlat","updateFrame","rawX","rawY","ind0","ind1","ind2",154,"Plane","segmentsX","segmentsY","_ready","segmentsXSub","segmentsYSub","sizeX","sizeY","totalSub","xpos","ypos","value2","value3","value4","./Mesh",155,"factor","nextPoint","perpLength","num","perpX","perpY",156,"MeshRenderer","MeshShader","./Plane","./Rope","./webgl/MeshRenderer","./webgl/MeshShader",157,"_vertexBuffer","_initWebGL","meshShader","_uvBuffer","_indexBuffer","_colorBuffer","../Mesh",158,159,"isNaN",160,161,"./Math.sign","./Object.assign","./requestAnimationFrame",162,"Date","getTime","startTime","vendors","delay"],"mappings":"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E,EAAA,GAAAuE,EAAA,GAAAvE,EAAA,GAAAuE,EAAA,IAAAvE,EAAA,GAAAuE,EAAA,IACAwkB,EAAA,GAAA/oB,EAAA,GAAAuE,EAAA,GAAAvE,EAAA,GAAAuE,EAAA,GAAAvE,EAAA,GAAAuE,EAAA,IAAAvE,EAAA,GAAAuE,EAAA,IACAwkB,EAAA,GAAA/oB,EAAA,GAAAuE,EAAA,GAAAvE,EAAA,GAAAuE,EAAA,GAAAvE,EAAA,GAAAuE,EAAA,IAAAvE,EAAA,GAAAuE,EAAA,IAGAwkB,EAAA,GAAA/oB,EAAA,GAAAuE,EAAA,GAAAvE,EAAA,GAAAuE,EAAA,GAAAvE,EAAA,GAAAuE,EAAA,IAAAvE,EAAA,GAAAuE,EAAA,IACAwkB,EAAA,GAAA/oB,EAAA,GAAAuE,EAAA,GAAAvE,EAAA,GAAAuE,EAAA,GAAAvE,EAAA,GAAAuE,EAAA,IAAAvE,EAAA,GAAAuE,EAAA,IACAwkB,EAAA,GAAA/oB,EAAA,GAAAuE,EAAA,GAAAvE,EAAA,GAAAuE,EAAA,GAAAvE,EAAA,GAAAuE,EAAA,IAAAvE,EAAA,GAAAuE,EAAA,IACAwkB,EAAA,GAAA/oB,EAAA,GAAAuE,EAAA,GAAAvE,EAAA,GAAAuE,EAAA,GAAAvE,EAAA,GAAAuE,EAAA,IAAAvE,EAAA,GAAAuE,EAAA,IACAwkB,EAAA,GAAA/oB,EAAA,GAAAuE,EAAA,GAAAvE,EAAA,GAAAuE,EAAA,GAAAvE,EAAA,GAAAuE,EAAA,IAAAvE,EAAA,GAAAuE,EAAA,IAGAwkB,EAAA,IAAA/oB,EAAA,IAAAuE,EAAA,GAAAvE,EAAA,IAAAuE,EAAA,GAAAvE,EAAA,IAAAuE,EAAA,IAAAvE,EAAA,IAAAuE,EAAA,IACAwkB,EAAA,IAAA/oB,EAAA,IAAAuE,EAAA,GAAAvE,EAAA,IAAAuE,EAAA,GAAAvE,EAAA,IAAAuE,EAAA,IAAAvE,EAAA,IAAAuE,EAAA,IACAwkB,EAAA,IAAA/oB,EAAA,IAAAuE,EAAA,GAAAvE,EAAA,IAAAuE,EAAA,GAAAvE,EAAA,IAAAuE,EAAA,IAAAvE,EAAA,IAAAuE,EAAA,IACAwkB,EAAA,IAAA/oB,EAAA,IAAAuE,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","file":"pixi.min.js","sourcesContent":[null],"sourceRoot":"./"} \ No newline at end of file diff --git a/src/core/graphics/webgl/GraphicsRenderer.js b/src/core/graphics/webgl/GraphicsRenderer.js index 279525e..12d80c0 100644 --- a/src/core/graphics/webgl/GraphicsRenderer.js +++ b/src/core/graphics/webgl/GraphicsRenderer.js @@ -4,15 +4,15 @@ ObjectRenderer = require('../../renderers/webgl/utils/ObjectRenderer'), WebGLRenderer = require('../../renderers/webgl/WebGLRenderer'), WebGLGraphicsData = require('./WebGLGraphicsData'), - PrimitiveShader = require('./PrimitiveShader'), + PrimitiveShader = require('./shaders/PrimitiveShader'), // some drawing functions.. - buildLine = require('../buildLine'); - buildPoly = require('../buildPoly'); - buildComplexPoly = require('../buildComplexPoly'); - buildRectangle = require('../buildRectangle'); - buildRoundedRectangle = require('../buildRoundedRectangle'); - buildCircle = require('../buildCircle'); + buildLine = require('./utils/buildLine'); + buildPoly = require('./utils/buildPoly'); + buildComplexPoly = require('./utils/buildComplexPoly'); + buildRectangle = require('./utils/buildRectangle'); + buildRoundedRectangle = require('./utils/buildRoundedRectangle'); + buildCircle = require('./utils/buildCircle'); earcut = require('earcut'); diff --git a/src/core/graphics/webgl/PrimitiveShader.js b/src/core/graphics/webgl/PrimitiveShader.js deleted file mode 100644 index 44166b3..0000000 --- a/src/core/graphics/webgl/PrimitiveShader.js +++ /dev/null @@ -1,50 +0,0 @@ -var Shader = require('pixi-gl-core').GLShader; - -/** - * This shader is used to draw simple primitive shapes for {@link PIXI.Graphics}. - * - * @class - * @memberof PIXI - * @extends PIXI.Shader - * @param shaderManager {ShaderManager} The webgl shader manager this shader works for. - */ -function PrimitiveShader(gl) -{ - Shader.call(this, - gl, - // vertex shader - [ - 'attribute vec2 aVertexPosition;', - 'attribute vec4 aColor;', - - 'uniform mat3 translationMatrix;', - 'uniform mat3 projectionMatrix;', - - 'uniform float alpha;', - 'uniform float flipY;', - 'uniform vec3 tint;', - - 'varying vec4 vColor;', - - 'void main(void){', - ' gl_Position = vec4((projectionMatrix * translationMatrix * vec3(aVertexPosition, 1.0)).xy, 0.0, 1.0);', - ' vColor = aColor * vec4(tint * alpha, alpha);', - '}' - ].join('\n'), - // fragment shader - [ - 'precision mediump float;', - - 'varying vec4 vColor;', - - 'void main(void){', - ' gl_FragColor = vColor;', - '}' - ].join('\n') - ); -} - -PrimitiveShader.prototype = Object.create(Shader.prototype); -PrimitiveShader.prototype.constructor = PrimitiveShader; - -module.exports = PrimitiveShader; diff --git a/src/core/graphics/webgl/buildRoundedRectangle.js b/src/core/graphics/webgl/buildRoundedRectangle.js deleted file mode 100644 index 55bb1b4..0000000 --- a/src/core/graphics/webgl/buildRoundedRectangle.js +++ /dev/null @@ -1,127 +0,0 @@ -var buildLine = require('./buildLine'), - utils = require('../../utils'); - -/** - * Builds a rounded rectangle to draw - * - * @private - * @param graphicsData {PIXI.Graphics} The graphics object containing all the necessary properties - * @param webGLData {object} an object containing all the webGL-specific information to create this shape - */ -buildRoundedRectangle = function (graphicsData, webGLData) -{ - var rrectData = graphicsData.shape; - var x = rrectData.x; - var y = rrectData.y; - var width = rrectData.width; - var height = rrectData.height; - - var radius = rrectData.radius; - - var recPoints = []; - recPoints.push(x, y + radius); - this.quadraticBezierCurve(x, y + height - radius, x, y + height, x + radius, y + height, recPoints); - this.quadraticBezierCurve(x + width - radius, y + height, x + width, y + height, x + width, y + height - radius, recPoints); - this.quadraticBezierCurve(x + width, y + radius, x + width, y, x + width - radius, y, recPoints); - this.quadraticBezierCurve(x + radius, y, x, y, x, y + radius + 0.0000000001, recPoints); - - // this tiny number deals with the issue that occurs when points overlap and earcut fails to triangulate the item. - // TODO - fix this properly, this is not very elegant.. but it works for now. - - if (graphicsData.fill) - { - var color = utils.hex2rgb(graphicsData.fillColor); - var alpha = graphicsData.fillAlpha; - - var r = color[0] * alpha; - var g = color[1] * alpha; - var b = color[2] * alpha; - - var verts = webGLData.points; - var indices = webGLData.indices; - - var vecPos = verts.length/6; - - var triangles = earcut(recPoints, null, 2); - - var i = 0; - for (i = 0; i < triangles.length; i+=3) - { - indices.push(triangles[i] + vecPos); - indices.push(triangles[i] + vecPos); - indices.push(triangles[i+1] + vecPos); - indices.push(triangles[i+2] + vecPos); - indices.push(triangles[i+2] + vecPos); - } - - for (i = 0; i < recPoints.length; i++) - { - verts.push(recPoints[i], recPoints[++i], r, g, b, alpha); - } - } - - if (graphicsData.lineWidth) - { - var tempPoints = graphicsData.points; - - graphicsData.points = recPoints; - - this.buildLine(graphicsData, webGLData); - - graphicsData.points = tempPoints; - } -}; - -/** - * Calculate the points for a quadratic bezier curve. (helper function..) - * Based on: https://stackoverflow.com/questions/785097/how-do-i-implement-a-bezier-curve-in-c - * - * @private - * @param fromX {number} Origin point x - * @param fromY {number} Origin point x - * @param cpX {number} Control point x - * @param cpY {number} Control point y - * @param toX {number} Destination point x - * @param toY {number} Destination point y - * @param [out] {number[]} The output array to add points into. If not passed, a new array is created. - * @return {number[]} an array of points - */ -quadraticBezierCurve = function (fromX, fromY, cpX, cpY, toX, toY, out) -{ - var xa, - ya, - xb, - yb, - x, - y, - n = 20, - points = out || []; - - function getPt(n1 , n2, perc) { - var diff = n2 - n1; - - return n1 + ( diff * perc ); - } - - var j = 0; - for (var i = 0; i <= n; i++ ) { - j = i / n; - - // The Green Line - xa = getPt( fromX , cpX , j ); - ya = getPt( fromY , cpY , j ); - xb = getPt( cpX , toX , j ); - yb = getPt( cpY , toY , j ); - - // The Black Dot - x = getPt( xa , xb , j ); - y = getPt( ya , yb , j ); - - points.push(x, y); - } - - return points; -}; - - -module.exports = buildRoundedRectangle; \ No newline at end of file diff --git a/src/core/graphics/webgl/shaders/PrimitiveShader.js b/src/core/graphics/webgl/shaders/PrimitiveShader.js new file mode 100644 index 0000000..44166b3 --- /dev/null +++ b/src/core/graphics/webgl/shaders/PrimitiveShader.js @@ -0,0 +1,50 @@ +var Shader = require('pixi-gl-core').GLShader; + +/** + * This shader is used to draw simple primitive shapes for {@link PIXI.Graphics}. + * + * @class + * @memberof PIXI + * @extends PIXI.Shader + * @param shaderManager {ShaderManager} The webgl shader manager this shader works for. + */ +function PrimitiveShader(gl) +{ + Shader.call(this, + gl, + // vertex shader + [ + 'attribute vec2 aVertexPosition;', + 'attribute vec4 aColor;', + + 'uniform mat3 translationMatrix;', + 'uniform mat3 projectionMatrix;', + + 'uniform float alpha;', + 'uniform float flipY;', + 'uniform vec3 tint;', + + 'varying vec4 vColor;', + + 'void main(void){', + ' gl_Position = vec4((projectionMatrix * translationMatrix * vec3(aVertexPosition, 1.0)).xy, 0.0, 1.0);', + ' vColor = aColor * vec4(tint * alpha, alpha);', + '}' + ].join('\n'), + // fragment shader + [ + 'precision mediump float;', + + 'varying vec4 vColor;', + + 'void main(void){', + ' gl_FragColor = vColor;', + '}' + ].join('\n') + ); +} + +PrimitiveShader.prototype = Object.create(Shader.prototype); +PrimitiveShader.prototype.constructor = PrimitiveShader; + +module.exports = PrimitiveShader; diff --git a/src/core/graphics/webgl/utils/buildCircle.js b/src/core/graphics/webgl/utils/buildCircle.js index cc39fe0..f7d9eeb 100644 --- a/src/core/graphics/webgl/utils/buildCircle.js +++ b/src/core/graphics/webgl/utils/buildCircle.js @@ -76,7 +76,7 @@ y + Math.cos(seg * i) * height); } - this.buildLine(graphicsData, webGLData); + buildLine(graphicsData, webGLData); graphicsData.points = tempPoints; } diff --git a/bin/pixi.js b/bin/pixi.js index b57ad10..40862ec 100644 --- a/bin/pixi.js +++ b/bin/pixi.js @@ -1,7 +1,7 @@ /** * @license * pixi.js - v3.0.10-dev - * Compiled 2016-01-17T18:07:22.522Z + * Compiled 2016-01-17T18:16:46.120Z * * pixi.js is licensed under the MIT License. * http://www.opensource.org/licenses/mit-license.php @@ -10864,15 +10864,15 @@ ObjectRenderer = require('../../renderers/webgl/utils/ObjectRenderer'), WebGLRenderer = require('../../renderers/webgl/WebGLRenderer'), WebGLGraphicsData = require('./WebGLGraphicsData'), - PrimitiveShader = require('./PrimitiveShader'), + PrimitiveShader = require('./shaders/PrimitiveShader'), // some drawing functions.. - buildLine = require('./buildLine'); - buildPoly = require('./buildPoly'); - buildComplexPoly = require('./buildComplexPoly'); - buildRectangle = require('./buildRectangle'); - buildRoundedRectangle = require('./buildRoundedRectangle'); - buildCircle = require('./buildCircle'); + buildLine = require('./utils/buildLine'); + buildPoly = require('./utils/buildPoly'); + buildComplexPoly = require('./utils/buildComplexPoly'); + buildRectangle = require('./utils/buildRectangle'); + buildRoundedRectangle = require('./utils/buildRoundedRectangle'); + buildCircle = require('./utils/buildCircle'); earcut = require('earcut'); @@ -11177,59 +11177,7 @@ }; -},{"../../const":38,"../../math":55,"../../renderers/webgl/WebGLRenderer":72,"../../renderers/webgl/utils/ObjectRenderer":87,"../../utils":105,"./PrimitiveShader":44,"./WebGLGraphicsData":45,"./buildCircle":46,"./buildComplexPoly":47,"./buildLine":48,"./buildPoly":49,"./buildRectangle":50,"./buildRoundedRectangle":51,"earcut":24}],44:[function(require,module,exports){ -var Shader = require('pixi-gl-core').GLShader; - -/** - * This shader is used to draw simple primitive shapes for {@link PIXI.Graphics}. - * - * @class - * @memberof PIXI - * @extends PIXI.Shader - * @param shaderManager {ShaderManager} The webgl shader manager this shader works for. - */ -function PrimitiveShader(gl) -{ - Shader.call(this, - gl, - // vertex shader - [ - 'attribute vec2 aVertexPosition;', - 'attribute vec4 aColor;', - - 'uniform mat3 translationMatrix;', - 'uniform mat3 projectionMatrix;', - - 'uniform float alpha;', - 'uniform float flipY;', - 'uniform vec3 tint;', - - 'varying vec4 vColor;', - - 'void main(void){', - ' gl_Position = vec4((projectionMatrix * translationMatrix * vec3(aVertexPosition, 1.0)).xy, 0.0, 1.0);', - ' vColor = aColor * vec4(tint * alpha, alpha);', - '}' - ].join('\n'), - // fragment shader - [ - 'precision mediump float;', - - 'varying vec4 vColor;', - - 'void main(void){', - ' gl_FragColor = vColor;', - '}' - ].join('\n') - ); -} - -PrimitiveShader.prototype = Object.create(Shader.prototype); -PrimitiveShader.prototype.constructor = PrimitiveShader; - -module.exports = PrimitiveShader; - -},{"pixi-gl-core":1}],45:[function(require,module,exports){ +},{"../../const":38,"../../math":55,"../../renderers/webgl/WebGLRenderer":72,"../../renderers/webgl/utils/ObjectRenderer":87,"../../utils":105,"./WebGLGraphicsData":44,"./shaders/PrimitiveShader":45,"./utils/buildCircle":46,"./utils/buildComplexPoly":47,"./utils/buildLine":48,"./utils/buildPoly":49,"./utils/buildRectangle":50,"./utils/buildRoundedRectangle":51,"earcut":24}],44:[function(require,module,exports){ /** * An object containing WebGL specific properties to be used by the WebGL renderer * @@ -11347,9 +11295,61 @@ this.glIndices = null; }; -},{}],46:[function(require,module,exports){ +},{}],45:[function(require,module,exports){ +var Shader = require('pixi-gl-core').GLShader; + +/** + * This shader is used to draw simple primitive shapes for {@link PIXI.Graphics}. + * + * @class + * @memberof PIXI + * @extends PIXI.Shader + * @param shaderManager {ShaderManager} The webgl shader manager this shader works for. + */ +function PrimitiveShader(gl) +{ + Shader.call(this, + gl, + // vertex shader + [ + 'attribute vec2 aVertexPosition;', + 'attribute vec4 aColor;', + + 'uniform mat3 translationMatrix;', + 'uniform mat3 projectionMatrix;', + + 'uniform float alpha;', + 'uniform float flipY;', + 'uniform vec3 tint;', + + 'varying vec4 vColor;', + + 'void main(void){', + ' gl_Position = vec4((projectionMatrix * translationMatrix * vec3(aVertexPosition, 1.0)).xy, 0.0, 1.0);', + ' vColor = aColor * vec4(tint * alpha, alpha);', + '}' + ].join('\n'), + // fragment shader + [ + 'precision mediump float;', + + 'varying vec4 vColor;', + + 'void main(void){', + ' gl_FragColor = vColor;', + '}' + ].join('\n') + ); +} + +PrimitiveShader.prototype = Object.create(Shader.prototype); +PrimitiveShader.prototype.constructor = PrimitiveShader; + +module.exports = PrimitiveShader; + +},{"pixi-gl-core":1}],46:[function(require,module,exports){ var buildLine = require('./buildLine'), - utils = require('../../utils'); + utils = require('../../../utils'); /** * Builds a circle to draw @@ -11426,7 +11426,7 @@ y + Math.cos(seg * i) * height); } - this.buildLine(graphicsData, webGLData); + buildLine(graphicsData, webGLData); graphicsData.points = tempPoints; } @@ -11434,9 +11434,9 @@ module.exports = buildCircle; -},{"../../utils":105,"./buildLine":48}],47:[function(require,module,exports){ +},{"../../../utils":105,"./buildLine":48}],47:[function(require,module,exports){ var buildLine = require('./buildLine'), - utils = require('../../utils'); + utils = require('../../../utils'); @@ -11505,9 +11505,9 @@ module.exports = buildComplexPoly; -},{"../../utils":105,"./buildLine":48}],48:[function(require,module,exports){ -var math = require('../../math'), - utils = require('../../utils'); +},{"../../../utils":105,"./buildLine":48}],48:[function(require,module,exports){ +var math = require('../../../math'), + utils = require('../../../utils'); /** * Builds a line to draw @@ -11725,8 +11725,8 @@ }; module.exports = buildLine; -},{"../../math":55,"../../utils":105}],49:[function(require,module,exports){ -var utils = require('../../utils'); +},{"../../../math":55,"../../../utils":105}],49:[function(require,module,exports){ +var utils = require('../../../utils'); /** * Builds a polygon to draw @@ -11788,9 +11788,9 @@ module.exports = buildPoly; -},{"../../utils":105}],50:[function(require,module,exports){ +},{"../../../utils":105}],50:[function(require,module,exports){ var buildLine = require('./buildLine'), - utils = require('../../utils'); + utils = require('../../../utils'); /** * Builds a rectangle to draw @@ -11859,9 +11859,9 @@ }; module.exports = buildRectangle; -},{"../../utils":105,"./buildLine":48}],51:[function(require,module,exports){ +},{"../../../utils":105,"./buildLine":48}],51:[function(require,module,exports){ var buildLine = require('./buildLine'), - utils = require('../../utils'); + utils = require('../../../utils'); /** * Builds a rounded rectangle to draw @@ -11987,7 +11987,7 @@ module.exports = buildRoundedRectangle; -},{"../../utils":105,"./buildLine":48}],52:[function(require,module,exports){ +},{"../../../utils":105,"./buildLine":48}],52:[function(require,module,exports){ /** * @file Main export of the PIXI core library * @author Mat Groves @@ -30075,6 +30075,6 @@ },{}]},{},[143])(143) }); -//# sourceMappingURL=data:application/json;charset:utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIm5vZGVfbW9kdWxlcy9icm93c2VyaWZ5L25vZGVfbW9kdWxlcy9icm93c2VyLXBhY2svX3ByZWx1ZGUuanMiLCIuLi9waXhpLWdsLWNvcmUvaW5kZXguanMiLCIuLi9waXhpLWdsLWNvcmUvbGliL0dMQnVmZmVyLmpzIiwiLi4vcGl4aS1nbC1jb3JlL2xpYi9HTEZyYW1lYnVmZmVyLmpzIiwiLi4vcGl4aS1nbC1jb3JlL2xpYi9HTFNoYWRlci5qcyIsIi4uL3BpeGktZ2wtY29yZS9saWIvR0xUZXh0dXJlLmpzIiwiLi4vcGl4aS1nbC1jb3JlL2xpYi9WZXJ0ZXhBcnJheU9iamVjdC5qcyIsIi4uL3BpeGktZ2wtY29yZS9saWIvY3JlYXRlQ29udGV4dC5qcyIsIi4uL3BpeGktZ2wtY29yZS9saWIvc2V0VmVydGV4QXR0cmliQXJyYXlzLmpzIiwiLi4vcGl4aS1nbC1jb3JlL2xpYi9zaGFkZXIvY29tcGlsZVByb2dyYW0uanMiLCIuLi9waXhpLWdsLWNvcmUvbGliL3NoYWRlci9kZWZhdWx0VmFsdWUuanMiLCIuLi9waXhpLWdsLWNvcmUvbGliL3NoYWRlci9leHRyYWN0QXR0cmlidXRlcy5qcyIsIi4uL3BpeGktZ2wtY29yZS9saWIvc2hhZGVyL2V4dHJhY3RVbmlmb3Jtcy5qcyIsIi4uL3BpeGktZ2wtY29yZS9saWIvc2hhZGVyL2dlbmVyYXRlVW5pZm9ybUFjY2Vzc09iamVjdC5qcyIsIi4uL3BpeGktZ2wtY29yZS9saWIvc2hhZGVyL21hcFNpemUuanMiLCIuLi9waXhpLWdsLWNvcmUvbGliL3NoYWRlci9tYXBUeXBlLmpzIiwibm9kZV9tb2R1bGVzL2FzeW5jL2xpYi9hc3luYy5qcyIsIm5vZGVfbW9kdWxlcy9icm93c2VyaWZ5L25vZGVfbW9kdWxlcy9wYXRoLWJyb3dzZXJpZnkvaW5kZXguanMiLCJub2RlX21vZHVsZXMvYnJvd3NlcmlmeS9ub2RlX21vZHVsZXMvcHJvY2Vzcy9icm93c2VyLmpzIiwibm9kZV9tb2R1bGVzL2Jyb3dzZXJpZnkvbm9kZV9tb2R1bGVzL3B1bnljb2RlL3B1bnljb2RlLmpzIiwibm9kZV9tb2R1bGVzL2Jyb3dzZXJpZnkvbm9kZV9tb2R1bGVzL3F1ZXJ5c3RyaW5nLWVzMy9kZWNvZGUuanMiLCJub2RlX21vZHVsZXMvYnJvd3NlcmlmeS9ub2RlX21vZHVsZXMvcXVlcnlzdHJpbmctZXMzL2VuY29kZS5qcyIsIm5vZGVfbW9kdWxlcy9icm93c2VyaWZ5L25vZGVfbW9kdWxlcy9xdWVyeXN0cmluZy1lczMvaW5kZXguanMiLCJub2RlX21vZHVsZXMvYnJvd3NlcmlmeS9ub2RlX21vZHVsZXMvdXJsL3VybC5qcyIsIm5vZGVfbW9kdWxlcy9lYXJjdXQvc3JjL2VhcmN1dC5qcyIsIm5vZGVfbW9kdWxlcy9ldmVudGVtaXR0ZXIzL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL29iamVjdC1hc3NpZ24vaW5kZXguanMiLCJub2RlX21vZHVsZXMvcmVzb3VyY2UtbG9hZGVyL25vZGVfbW9kdWxlcy9hc3luYy9saWIvYXN5bmMuanMiLCJub2RlX21vZHVsZXMvcmVzb3VyY2UtbG9hZGVyL3NyYy9Mb2FkZXIuanMiLCJub2RlX21vZHVsZXMvcmVzb3VyY2UtbG9hZGVyL3NyYy9SZXNvdXJjZS5qcyIsIm5vZGVfbW9kdWxlcy9yZXNvdXJjZS1sb2FkZXIvc3JjL2I2NC5qcyIsIm5vZGVfbW9kdWxlcy9yZXNvdXJjZS1sb2FkZXIvc3JjL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL3Jlc291cmNlLWxvYWRlci9zcmMvbWlkZGxld2FyZXMvY2FjaGluZy9tZW1vcnkuanMiLCJub2RlX21vZHVsZXMvcmVzb3VyY2UtbG9hZGVyL3NyYy9taWRkbGV3YXJlcy9wYXJzaW5nL2Jsb2IuanMiLCJwYWNrYWdlLmpzb24iLCJzcmMvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5TWFuYWdlci5qcyIsInNyYy9hY2Nlc3NpYmlsaXR5L2FjY2Vzc2libGVUYXJnZXQuanMiLCJzcmMvYWNjZXNzaWJpbGl0eS9pbmRleC5qcyIsInNyYy9jb3JlL2NvbnN0LmpzIiwic3JjL2NvcmUvZGlzcGxheS9Db250YWluZXIuanMiLCJzcmMvY29yZS9kaXNwbGF5L0Rpc3BsYXlPYmplY3QuanMiLCJzcmMvY29yZS9ncmFwaGljcy9HcmFwaGljcy5qcyIsInNyYy9jb3JlL2dyYXBoaWNzL0dyYXBoaWNzRGF0YS5qcyIsInNyYy9jb3JlL2dyYXBoaWNzL3dlYmdsL0dyYXBoaWNzUmVuZGVyZXIuanMiLCJzcmMvY29yZS9ncmFwaGljcy93ZWJnbC9QcmltaXRpdmVTaGFkZXIuanMiLCJzcmMvY29yZS9ncmFwaGljcy93ZWJnbC9XZWJHTEdyYXBoaWNzRGF0YS5qcyIsInNyYy9jb3JlL2dyYXBoaWNzL3dlYmdsL2J1aWxkQ2lyY2xlLmpzIiwic3JjL2NvcmUvZ3JhcGhpY3Mvd2ViZ2wvYnVpbGRDb21wbGV4UG9seS5qcyIsInNyYy9jb3JlL2dyYXBoaWNzL3dlYmdsL2J1aWxkTGluZS5qcyIsInNyYy9jb3JlL2dyYXBoaWNzL3dlYmdsL2J1aWxkUG9seS5qcyIsInNyYy9jb3JlL2dyYXBoaWNzL3dlYmdsL2J1aWxkUmVjdGFuZ2xlLmpzIiwic3JjL2NvcmUvZ3JhcGhpY3Mvd2ViZ2wvYnVpbGRSb3VuZGVkUmVjdGFuZ2xlLmpzIiwic3JjL2NvcmUvaW5kZXguanMiLCJzcmMvY29yZS9tYXRoL01hdHJpeC5qcyIsInNyYy9jb3JlL21hdGgvUG9pbnQuanMiLCJzcmMvY29yZS9tYXRoL2luZGV4LmpzIiwic3JjL2NvcmUvbWF0aC9zaGFwZXMvQ2lyY2xlLmpzIiwic3JjL2NvcmUvbWF0aC9zaGFwZXMvRWxsaXBzZS5qcyIsInNyYy9jb3JlL21hdGgvc2hhcGVzL1BvbHlnb24uanMiLCJzcmMvY29yZS9tYXRoL3NoYXBlcy9SZWN0YW5nbGUuanMiLCJzcmMvY29yZS9tYXRoL3NoYXBlcy9Sb3VuZGVkUmVjdGFuZ2xlLmpzIiwic3JjL2NvcmUvcGFydGljbGVzL1BhcnRpY2xlQ29udGFpbmVyLmpzIiwic3JjL2NvcmUvcGFydGljbGVzL3dlYmdsL1BhcnRpY2xlQnVmZmVyLmpzIiwic3JjL2NvcmUvcGFydGljbGVzL3dlYmdsL1BhcnRpY2xlUmVuZGVyZXIuanMiLCJzcmMvY29yZS9wYXJ0aWNsZXMvd2ViZ2wvUGFydGljbGVTaGFkZXIuanMiLCJzcmMvY29yZS9yZW5kZXJlcnMvU3lzdGVtUmVuZGVyZXIuanMiLCJzcmMvY29yZS9yZW5kZXJlcnMvY2FudmFzL0NhbnZhc1JlbmRlcmVyLmpzIiwic3JjL2NvcmUvcmVuZGVyZXJzL2NhbnZhcy91dGlscy9DYW52YXNCdWZmZXIuanMiLCJzcmMvY29yZS9yZW5kZXJlcnMvY2FudmFzL3V0aWxzL0NhbnZhc0dyYXBoaWNzLmpzIiwic3JjL2NvcmUvcmVuZGVyZXJzL2NhbnZhcy91dGlscy9DYW52YXNNYXNrTWFuYWdlci5qcyIsInNyYy9jb3JlL3JlbmRlcmVycy9jYW52YXMvdXRpbHMvQ2FudmFzVGludGVyLmpzIiwic3JjL2NvcmUvcmVuZGVyZXJzL3dlYmdsL1RleHR1cmVNYW5hZ2VyLmpzIiwic3JjL2NvcmUvcmVuZGVyZXJzL3dlYmdsL1dlYkdMUmVuZGVyZXIuanMiLCJzcmMvY29yZS9yZW5kZXJlcnMvd2ViZ2wvZmlsdGVycy9BYnN0cmFjdEZpbHRlci5qcyIsInNyYy9jb3JlL3JlbmRlcmVycy93ZWJnbC9maWx0ZXJzL0ZYQUFGaWx0ZXIuanMiLCJzcmMvY29yZS9yZW5kZXJlcnMvd2ViZ2wvZmlsdGVycy9TcHJpdGVNYXNrRmlsdGVyLmpzIiwic3JjL2NvcmUvcmVuZGVyZXJzL3dlYmdsL21hbmFnZXJzL0JsZW5kTW9kZU1hbmFnZXIuanMiLCJzcmMvY29yZS9yZW5kZXJlcnMvd2ViZ2wvbWFuYWdlcnMvRmlsdGVyTWFuYWdlci5qcyIsInNyYy9jb3JlL3JlbmRlcmVycy93ZWJnbC9tYW5hZ2Vycy9NYXNrTWFuYWdlci5qcyIsInNyYy9jb3JlL3JlbmRlcmVycy93ZWJnbC9tYW5hZ2Vycy9TaGFkZXJNYW5hZ2VyLmpzIiwic3JjL2NvcmUvcmVuZGVyZXJzL3dlYmdsL21hbmFnZXJzL1N0ZW5jaWxNYW5hZ2VyLmpzIiwic3JjL2NvcmUvcmVuZGVyZXJzL3dlYmdsL21hbmFnZXJzL1dlYkdMTWFuYWdlci5qcyIsInNyYy9jb3JlL3JlbmRlcmVycy93ZWJnbC9zaGFkZXJzL0NvbXBsZXhQcmltaXRpdmVTaGFkZXIuanMiLCJzcmMvY29yZS9yZW5kZXJlcnMvd2ViZ2wvc2hhZGVycy9QcmltaXRpdmVTaGFkZXIuanMiLCJzcmMvY29yZS9yZW5kZXJlcnMvd2ViZ2wvc2hhZGVycy9TaGFkZXIuanMiLCJzcmMvY29yZS9yZW5kZXJlcnMvd2ViZ2wvc2hhZGVycy9UZXh0dXJlU2hhZGVyLmpzIiwic3JjL2NvcmUvcmVuZGVyZXJzL3dlYmdsL3NoYWRlcnMvX1RleHR1cmVTaGFkZXIuanMiLCJzcmMvY29yZS9yZW5kZXJlcnMvd2ViZ2wvdXRpbHMvT2JqZWN0UmVuZGVyZXIuanMiLCJzcmMvY29yZS9yZW5kZXJlcnMvd2ViZ2wvdXRpbHMvUXVhZC5qcyIsInNyYy9jb3JlL3JlbmRlcmVycy93ZWJnbC91dGlscy9SZW5kZXJUYXJnZXQuanMiLCJzcmMvY29yZS9yZW5kZXJlcnMvd2ViZ2wvdXRpbHMvU3RlbmNpbE1hc2tTdGFjay5qcyIsInNyYy9jb3JlL3JlbmRlcmVycy93ZWJnbC91dGlscy9tYXBXZWJHTEJsZW5kTW9kZXNUb1BpeGkuanMiLCJzcmMvY29yZS9yZW5kZXJlcnMvd2ViZ2wvdXRpbHMvbWFwV2ViR0xEcmF3TW9kZXNUb1BpeGkuanMiLCJzcmMvY29yZS9zcHJpdGVzL1Nwcml0ZS5qcyIsInNyYy9jb3JlL3Nwcml0ZXMvd2ViZ2wvU3ByaXRlUmVuZGVyZXIuanMiLCJzcmMvY29yZS9zcHJpdGVzL3dlYmdsL2dlbmVyYXRlTXVsdGlUZXh0dXJlU2hhZGVyLmpzIiwic3JjL2NvcmUvdGV4dC9UZXh0LmpzIiwic3JjL2NvcmUvdGV4dHVyZXMvQmFzZVRleHR1cmUuanMiLCJzcmMvY29yZS90ZXh0dXJlcy9SZW5kZXJUZXh0dXJlLmpzIiwic3JjL2NvcmUvdGV4dHVyZXMvVGV4dHVyZS5qcyIsInNyYy9jb3JlL3RleHR1cmVzL1RleHR1cmVVdnMuanMiLCJzcmMvY29yZS90ZXh0dXJlcy9WaWRlb0Jhc2VUZXh0dXJlLmpzIiwic3JjL2NvcmUvdGlja2VyL1RpY2tlci5qcyIsInNyYy9jb3JlL3RpY2tlci9pbmRleC5qcyIsInNyYy9jb3JlL3V0aWxzL2NyZWF0ZUluZGljZXNGb3JRdWFkcy5qcyIsInNyYy9jb3JlL3V0aWxzL2luZGV4LmpzIiwic3JjL2NvcmUvdXRpbHMvcGx1Z2luVGFyZ2V0LmpzIiwic3JjL2RlcHJlY2F0aW9uLmpzIiwic3JjL2V4dHJhcy9CaXRtYXBUZXh0LmpzIiwic3JjL2V4dHJhcy9Nb3ZpZUNsaXAuanMiLCJzcmMvZXh0cmFzL1RpbGluZ1Nwcml0ZS5qcyIsInNyYy9leHRyYXMvY2FjaGVBc0JpdG1hcC5qcyIsInNyYy9leHRyYXMvZ2V0Q2hpbGRCeU5hbWUuanMiLCJzcmMvZXh0cmFzL2dldEdsb2JhbFBvc2l0aW9uLmpzIiwic3JjL2V4dHJhcy9pbmRleC5qcyIsInNyYy9maWx0ZXJzL2FzY2lpL0FzY2lpRmlsdGVyLmpzIiwic3JjL2ZpbHRlcnMvYmxvb20vQmxvb21GaWx0ZXIuanMiLCJzcmMvZmlsdGVycy9ibHVyL0JsdXJEaXJGaWx0ZXIuanMiLCJzcmMvZmlsdGVycy9ibHVyL0JsdXJGaWx0ZXIuanMiLCJzcmMvZmlsdGVycy9ibHVyL0JsdXJYRmlsdGVyLmpzIiwic3JjL2ZpbHRlcnMvYmx1ci9CbHVyWUZpbHRlci5qcyIsInNyYy9maWx0ZXJzL2JsdXIvU21hcnRCbHVyRmlsdGVyLmpzIiwic3JjL2ZpbHRlcnMvY29sb3IvQ29sb3JNYXRyaXhGaWx0ZXIuanMiLCJzcmMvZmlsdGVycy9jb2xvci9Db2xvclN0ZXBGaWx0ZXIuanMiLCJzcmMvZmlsdGVycy9jb252b2x1dGlvbi9Db252b2x1dGlvbkZpbHRlci5qcyIsInNyYy9maWx0ZXJzL2Nyb3NzaGF0Y2gvQ3Jvc3NIYXRjaEZpbHRlci5qcyIsInNyYy9maWx0ZXJzL2Rpc3BsYWNlbWVudC9EaXNwbGFjZW1lbnRGaWx0ZXIuanMiLCJzcmMvZmlsdGVycy9kb3QvRG90U2NyZWVuRmlsdGVyLmpzIiwic3JjL2ZpbHRlcnMvZHJvcHNoYWRvdy9CbHVyWVRpbnRGaWx0ZXIuanMiLCJzcmMvZmlsdGVycy9kcm9wc2hhZG93L0Ryb3BTaGFkb3dGaWx0ZXIuanMiLCJzcmMvZmlsdGVycy9ncmF5L0dyYXlGaWx0ZXIuanMiLCJzcmMvZmlsdGVycy9pbmRleC5qcyIsInNyYy9maWx0ZXJzL2ludmVydC9JbnZlcnRGaWx0ZXIuanMiLCJzcmMvZmlsdGVycy9ub2lzZS9Ob2lzZUZpbHRlci5qcyIsInNyYy9maWx0ZXJzL3BpeGVsYXRlL1BpeGVsYXRlRmlsdGVyLmpzIiwic3JjL2ZpbHRlcnMvcmdiL1JHQlNwbGl0RmlsdGVyLmpzIiwic3JjL2ZpbHRlcnMvc2VwaWEvU2VwaWFGaWx0ZXIuanMiLCJzcmMvZmlsdGVycy9zaG9ja3dhdmUvU2hvY2t3YXZlRmlsdGVyLmpzIiwic3JjL2ZpbHRlcnMvdGlsdHNoaWZ0L1RpbHRTaGlmdEF4aXNGaWx0ZXIuanMiLCJzcmMvZmlsdGVycy90aWx0c2hpZnQvVGlsdFNoaWZ0RmlsdGVyLmpzIiwic3JjL2ZpbHRlcnMvdGlsdHNoaWZ0L1RpbHRTaGlmdFhGaWx0ZXIuanMiLCJzcmMvZmlsdGVycy90aWx0c2hpZnQvVGlsdFNoaWZ0WUZpbHRlci5qcyIsInNyYy9maWx0ZXJzL3R3aXN0L1R3aXN0RmlsdGVyLmpzIiwic3JjL3NyYy9pbmRleC5qcyIsInNyYy9pbnRlcmFjdGlvbi9JbnRlcmFjdGlvbkRhdGEuanMiLCJzcmMvaW50ZXJhY3Rpb24vSW50ZXJhY3Rpb25NYW5hZ2VyLmpzIiwic3JjL2ludGVyYWN0aW9uL2luZGV4LmpzIiwic3JjL2ludGVyYWN0aW9uL2ludGVyYWN0aXZlVGFyZ2V0LmpzIiwic3JjL2xvYWRlcnMvYml0bWFwRm9udFBhcnNlci5qcyIsInNyYy9sb2FkZXJzL2luZGV4LmpzIiwic3JjL2xvYWRlcnMvbG9hZGVyLmpzIiwic3JjL2xvYWRlcnMvc3ByaXRlc2hlZXRQYXJzZXIuanMiLCJzcmMvbG9hZGVycy90ZXh0dXJlUGFyc2VyLmpzIiwic3JjL21lc2gvTWVzaC5qcyIsInNyYy9tZXNoL1BsYW5lLmpzIiwic3JjL21lc2gvUm9wZS5qcyIsInNyYy9tZXNoL2luZGV4LmpzIiwic3JjL21lc2gvd2ViZ2wvTWVzaFJlbmRlcmVyLmpzIiwic3JjL21lc2gvd2ViZ2wvTWVzaFNoYWRlci5qcyIsInNyYy9wb2x5ZmlsbC9NYXRoLnNpZ24uanMiLCJzcmMvcG9seWZpbGwvT2JqZWN0LmFzc2lnbi5qcyIsInNyYy9wb2x5ZmlsbC9pbmRleC5qcyIsInNyYy9wb2x5ZmlsbC9yZXF1ZXN0QW5pbWF0aW9uRnJhbWUuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUNBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbklBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDeENBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdk1BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNqSEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDOUJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3REQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN6REE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2xDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDN0JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0SUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2hDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUM5Q0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7O0FDNXVDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7QUNoT0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FDM0ZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7OztBQ3JoQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDcEZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDckZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDSkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ25zQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdGtCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3RRQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FDdkNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7QUNubUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3hjQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDaHlCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2hFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNaQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDcEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDMURBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMxRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuWkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzVDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzdOQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNyb0JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3ZtQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdG9DQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzNGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM5VEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2xEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDcEhBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDckZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3JFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDMU5BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDN0RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3JFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM5SEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDN0ZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3RiQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDcEVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNwQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3RGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM3RkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3JHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNUZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzFGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDN1RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMxTkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDMWRBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDblFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMxUUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2xHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2hXQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM1REE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMxUEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDMUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMzWUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzlHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDckRBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMvRkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDMUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2xjQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDakhBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3hLQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDN1dBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3ZDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM1REE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM3REE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM5Z0JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDN0dBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDL0VBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN4REE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDekpBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDalNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDL0JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3ptQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3ZXQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzdEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzNtQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbmJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzdkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3hhQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQy9FQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzNPQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDaldBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3REQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQy9CQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDblJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNwRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM3VkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2xZQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM5VEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbGNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzlRQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzVCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzVCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ25CQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3ZEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzVJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM1R0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMzRkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDcEZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNUJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3RoQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQy9DQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDekZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3hCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2xGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3RFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDekZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMvTEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQy9DQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3JDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNoREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3JEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2pEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNwRkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDaERBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0RkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDM0hBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzVHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNwQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDcENBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FDbkZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7QUM1QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQy9DQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzEyQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQy9DQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdkhBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbkJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzVEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2xGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDcEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzFkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzVIQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ25OQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDakJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuT0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzNEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ1JBO0FBQ0E7QUFDQTtBQUNBOzs7QUNIQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsImZpbGUiOiJnZW5lcmF0ZWQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlc0NvbnRlbnQiOlsiKGZ1bmN0aW9uIGUodCxuLHIpe2Z1bmN0aW9uIHMobyx1KXtpZighbltvXSl7aWYoIXRbb10pe3ZhciBhPXR5cGVvZiByZXF1aXJlPT1cImZ1bmN0aW9uXCImJnJlcXVpcmU7aWYoIXUmJmEpcmV0dXJuIGEobywhMCk7aWYoaSlyZXR1cm4gaShvLCEwKTt2YXIgZj1uZXcgRXJyb3IoXCJDYW5ub3QgZmluZCBtb2R1bGUgJ1wiK28rXCInXCIpO3Rocm93IGYuY29kZT1cIk1PRFVMRV9OT1RfRk9VTkRcIixmfXZhciBsPW5bb109e2V4cG9ydHM6e319O3Rbb11bMF0uY2FsbChsLmV4cG9ydHMsZnVuY3Rpb24oZSl7dmFyIG49dFtvXVsxXVtlXTtyZXR1cm4gcyhuP246ZSl9LGwsbC5leHBvcnRzLGUsdCxuLHIpfXJldHVybiBuW29dLmV4cG9ydHN9dmFyIGk9dHlwZW9mIHJlcXVpcmU9PVwiZnVuY3Rpb25cIiYmcmVxdWlyZTtmb3IodmFyIG89MDtvPHIubGVuZ3RoO28rKylzKHJbb10pO3JldHVybiBzfSkiLCJcblxubW9kdWxlLmV4cG9ydHMgPSB7XG5cbiAgICBjcmVhdGVDb250ZXh0OiBcdFx0XHRyZXF1aXJlKCcuL2xpYi9jcmVhdGVDb250ZXh0JyksXG4gICAgc2V0VmVydGV4QXR0cmliQXJyYXlzOiBcdHJlcXVpcmUoJy4vbGliL3NldFZlcnRleEF0dHJpYkFycmF5cycpLFxuICAgIFxuICAgIEdMQnVmZmVyOiBcdFx0XHRcdHJlcXVpcmUoJy4vbGliL0dMQnVmZmVyJyksXG4gICAgR0xGcmFtZWJ1ZmZlcjogXHRcdFx0cmVxdWlyZSgnLi9saWIvR0xGcmFtZWJ1ZmZlcicpLFxuICAgIEdMU2hhZGVyOiBcdFx0XHRcdHJlcXVpcmUoJy4vbGliL0dMU2hhZGVyJyksXG4gICAgR0xUZXh0dXJlOiBcdFx0XHRcdHJlcXVpcmUoJy4vbGliL0dMVGV4dHVyZScpLFxuICAgIFxuICAgIFZlcnRleEFycmF5T2JqZWN0OiBcdFx0cmVxdWlyZSgnLi9saWIvVmVydGV4QXJyYXlPYmplY3QnKVxuXG59OyIsIlxuLyoqXG4gKiBIZWxwZXIgY2xhc3MgdG8gY3JlYXRlIGEgd2ViR0wgYnVmZmVyXG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIGdsIHtXZWJHTFJlbmRlcmluZ0NvbnRleHR9XG4gKi9cblxudmFyIEVNUFRZX0FSUkFZX0JVRkZFUiA9IG5ldyBBcnJheUJ1ZmZlcigwKTtcblxudmFyIEJ1ZmZlciA9IGZ1bmN0aW9uKGdsLCB0eXBlLCBkYXRhLCBkcmF3VHlwZSlcbntcblx0dGhpcy5nbCA9IGdsO1xuXG5cdHRoaXMuYnVmZmVyID0gZ2wuY3JlYXRlQnVmZmVyKCk7XG5cdHRoaXMudHlwZSA9IHR5cGUgfHwgZ2wuQVJSQVlfQlVGRkVSO1xuXHR0aGlzLmRyYXdUeXBlID0gZHJhd1R5cGUgfHwgZ2wuU1RBVElDX0RSQVc7XG5cdHRoaXMuZGF0YSA9IEVNUFRZX0FSUkFZX0JVRkZFUjtcblxuXHRpZihkYXRhKVxuXHR7XG5cdFx0dGhpcy51cGxvYWQoZGF0YSk7XG5cdH1cbn1cblxuQnVmZmVyLnByb3RvdHlwZS51cGxvYWQgPSBmdW5jdGlvbihkYXRhLCBvZmZzZXQsIGRvbnRCaW5kKVxue1xuXHQvLyB0b2RvIC0gbmVlZGVkP1xuXHQvL2lmKCFkb250QmluZClcblx0dGhpcy5iaW5kKCk7XG5cblx0dmFyIGdsID0gdGhpcy5nbDtcblx0XG5cdGRhdGEgPSBkYXRhIHx8IHRoaXMuZGF0YTtcblx0b2Zmc2V0ID0gb2Zmc2V0IHx8IDA7XG5cblx0aWYodGhpcy5kYXRhLmJ5dGVMZW5ndGggPj0gZGF0YS5ieXRlTGVuZ3RoKVxuXHR7XHRcblx0XHRnbC5idWZmZXJTdWJEYXRhKHRoaXMudHlwZSwgb2Zmc2V0LCBkYXRhKTtcblx0fVxuXHRlbHNlXG5cdHtcblx0XHRnbC5idWZmZXJEYXRhKHRoaXMudHlwZSwgZGF0YSwgdGhpcy5kcmF3VHlwZSk7XG5cdH1cblxuXHR0aGlzLmRhdGEgPSBkYXRhO1xufVxuXG5CdWZmZXIucHJvdG90eXBlLmJpbmQgPSBmdW5jdGlvbigpXG57XG5cdHZhciBnbCA9IHRoaXMuZ2w7XG5cdGdsLmJpbmRCdWZmZXIodGhpcy50eXBlLCB0aGlzLmJ1ZmZlcik7XG59XG5cbkJ1ZmZlci5jcmVhdGVWZXJ0ZXhCdWZmZXIgPSBmdW5jdGlvbihnbCwgZGF0YSwgZHJhd1R5cGUpXG57XG5cdHJldHVybiBuZXcgQnVmZmVyKGdsLCBnbC5BUlJBWV9CVUZGRVIsIGRhdGEsIGRyYXdUeXBlKTtcbn1cblxuQnVmZmVyLmNyZWF0ZUluZGV4QnVmZmVyID0gZnVuY3Rpb24oZ2wsIGRhdGEsIGRyYXdUeXBlKVxue1xuXHRyZXR1cm4gbmV3IEJ1ZmZlcihnbCwgZ2wuRUxFTUVOVF9BUlJBWV9CVUZGRVIsIGRhdGEsIGRyYXdUeXBlKTtcbn1cblxuQnVmZmVyLmNyZWF0ZSA9IGZ1bmN0aW9uKGdsLCB0eXBlLCBkYXRhLCBkcmF3VHlwZSlcbntcblx0cmV0dXJuIG5ldyBCdWZmZXIoZ2wsIHR5cGUsIGRyYXdUeXBlKTtcbn1cblxuLy9UT0RPIERlc3Ryb3kuLlxuXG5tb2R1bGUuZXhwb3J0cyA9IEJ1ZmZlcjtcblxuIiwiXG52YXIgVGV4dHVyZSA9IHJlcXVpcmUoJy4vR0xUZXh0dXJlJyk7XG5cbi8qKlxuICogSGVscGVyIGNsYXNzIHRvIGNyZWF0ZSBhIHdlYkdMIEZyYW1lYnVmZmVyXG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIGdsIHtXZWJHTFJlbmRlcmluZ0NvbnRleHR9XG4gKi9cblxudmFyIEZyYW1lYnVmZmVyID0gZnVuY3Rpb24oZ2wsIHdpZHRoLCBoZWlnaHQpXG57XG5cdHRoaXMuZ2wgPSBnbDtcblxuXHR0aGlzLmZyYW1lYnVmZmVyID0gZ2wuY3JlYXRlRnJhbWVidWZmZXIoKTtcblx0XG5cdHRoaXMuc3RlbmNpbCA9IG51bGw7XG5cdHRoaXMudGV4dHVyZSA9IG51bGw7XG5cblx0dGhpcy53aWR0aCA9IHdpZHRoIHx8IDEwMDtcblx0dGhpcy5oZWlnaHQgPSBoZWlnaHQgfHwgMTAwO1xufVxuXG5GcmFtZWJ1ZmZlci5wcm90b3R5cGUuZW5hYmxlVGV4dHVyZSA9IGZ1bmN0aW9uKHRleHR1cmUpXG57XG5cdHZhciBnbCA9IHRoaXMuZ2w7XG5cblx0dGhpcy50ZXh0dXJlID0gdGV4dHVyZSB8fCBuZXcgVGV4dHVyZShnbCk7XG5cblx0dGhpcy50ZXh0dXJlLmJpbmQoKTtcblxuXHQvL2dsLnRleEltYWdlMkQoZ2wuVEVYVFVSRV8yRCwgMCwgZ2wuUkdCQSwgIHRoaXMud2lkdGgsIHRoaXMuaGVpZ2h0LCAwLCBnbC5SR0JBLCBnbC5VTlNJR05FRF9CWVRFLCBudWxsKTtcblxuXHR0aGlzLmJpbmQoKTtcblxuXHRnbC5mcmFtZWJ1ZmZlclRleHR1cmUyRChnbC5GUkFNRUJVRkZFUiwgZ2wuQ09MT1JfQVRUQUNITUVOVDAsIGdsLlRFWFRVUkVfMkQsIHRoaXMudGV4dHVyZS50ZXh0dXJlLCAwKTtcbn1cblxuRnJhbWVidWZmZXIucHJvdG90eXBlLmVuYWJsZVN0ZW5jaWwgPSBmdW5jdGlvbigpXG57XG5cdGlmKHRoaXMuc3RlbmNpbClyZXR1cm47XG5cblx0dmFyIGdsID0gdGhpcy5nbDtcblxuXHR0aGlzLnN0ZW5jaWwgPSBnbC5jcmVhdGVSZW5kZXJidWZmZXIoKTtcbiAgICBcbiAgICBnbC5iaW5kUmVuZGVyYnVmZmVyKGdsLlJFTkRFUkJVRkZFUiwgdGhpcy5zdGVuY2lsKTtcbiAgICBcbiAgICAvLyBUT0RPLi4gdGhpcyBpcyBkZXB0aCBBTkQgc3RlbmNpbD9cbiAgICBnbC5mcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcihnbC5GUkFNRUJVRkZFUiwgZ2wuREVQVEhfU1RFTkNJTF9BVFRBQ0hNRU5ULCBnbC5SRU5ERVJCVUZGRVIsIHRoaXMuc3RlbmNpbCk7XG4gICAgZ2wucmVuZGVyYnVmZmVyU3RvcmFnZShnbC5SRU5ERVJCVUZGRVIsIGdsLkRFUFRIX1NURU5DSUwsICB0aGlzLndpZHRoICAsIHRoaXMuaGVpZ2h0ICk7XG59XG5cbkZyYW1lYnVmZmVyLnByb3RvdHlwZS5jbGVhciA9IGZ1bmN0aW9uKCByLCBnLCBiLCBhIClcbntcblx0dGhpcy5iaW5kKCk7XG5cblx0dmFyIGdsID0gdGhpcy5nbDtcbiAgICBcbiAgICBnbC5jbGVhckNvbG9yKHIsIGcsIGIsIGEpO1xuICAgIGdsLmNsZWFyKGdsLkNPTE9SX0JVRkZFUl9CSVQpO1xufVxuXG5GcmFtZWJ1ZmZlci5wcm90b3R5cGUuYmluZCA9IGZ1bmN0aW9uKClcbntcblx0dmFyIGdsID0gdGhpcy5nbDtcblx0Z2wuYmluZEZyYW1lYnVmZmVyKGdsLkZSQU1FQlVGRkVSLCB0aGlzLmZyYW1lYnVmZmVyICk7XHRcbn1cblxuRnJhbWVidWZmZXIucHJvdG90eXBlLnVuYmluZCA9IGZ1bmN0aW9uKClcbntcblx0Z2wuYmluZEZyYW1lYnVmZmVyKGdsLkZSQU1FQlVGRkVSLCBudWxsICk7XHRcbn1cblxuRnJhbWVidWZmZXIucHJvdG90eXBlLnJlc2l6ZSA9IGZ1bmN0aW9uKHdpZHRoLCBoZWlnaHQpXG57XG5cdHZhciBnbCA9IHRoaXMuZ2w7XG5cblx0dGhpcy53aWR0aCA9IHdpZHRoO1xuXHR0aGlzLmhlaWdodCA9IGhlaWdodDtcblxuXHRpZiAoIHRoaXMudGV4dHVyZSApXG4gICAge1xuICAgIFx0dGhpcy50ZXh0dXJlLnVwbG9hZERhdGEobnVsbCwgd2lkdGgsIGhlaWdodCk7XG5cdH1cblxuXHRpZiAoIHRoaXMuc3RlbmNpbCApXG4gICAge1xuICAgICAgICAvLyB1cGRhdGUgdGhlIHN0ZW5jaWwgYnVmZmVyIHdpZHRoIGFuZCBoZWlnaHRcbiAgICAgICAgZ2wuYmluZFJlbmRlcmJ1ZmZlcihnbC5SRU5ERVJCVUZGRVIsIHRoaXMuc3RlbmNpbCk7XG4gICAgICAgIGdsLnJlbmRlcmJ1ZmZlclN0b3JhZ2UoZ2wuUkVOREVSQlVGRkVSLCBnbC5ERVBUSF9TVEVOQ0lMLCB3aWR0aCwgaGVpZ2h0KTtcbiAgICB9XG59XG5cbkZyYW1lYnVmZmVyLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24oKVxue1xuXHR2YXIgZ2wgPSB0aGlzLmdsO1xuXHQvL1RPRE9cblx0Z2wuZGVsZXRlRnJhbWVidWZmZXIodGhpcy5mcmFtZWJ1ZmZlcik7XG59XG5cbkZyYW1lYnVmZmVyLmNyZWF0ZVJHQkEgPSBmdW5jdGlvbihnbCwgd2lkdGgsIGhlaWdodCwgZGF0YSlcbntcblx0dmFyIHRleHR1cmUgPSBUZXh0dXJlLmZyb21EYXRhKGdsLCBudWxsLCB3aWR0aCwgaGVpZ2h0KTtcblx0dGV4dHVyZS5lbmFibGVOZWFyZXN0U2NhbGluZygpO1xuICAgIHRleHR1cmUuZW5hYmxlV3JhcENsYW1wKCk7XG5cbiAgICAvL25vdyBjcmVhdGUgdGhlIGZyYW1lYnVmZmVyIG9iamVjdCBhbmQgYXR0YWNoIHRoZSB0ZXh0dXJlIHRvIGl0LlxuICAgIHZhciBmYm8gPSBuZXcgRnJhbWVidWZmZXIoZ2wsIHdpZHRoLCBoZWlnaHQpO1xuICAgIGZiby5lbmFibGVUZXh0dXJlKHRleHR1cmUpO1xuXG4gICAgcmV0dXJuIGZibztcbn1cblxuRnJhbWVidWZmZXIuY3JlYXRlRmxvYXQzMiA9IGZ1bmN0aW9uKGdsLCB3aWR0aCwgaGVpZ2h0LCBkYXRhKVxue1xuXHQvLyBjcmVhdGUgYSBuZXcgdGV4dHVyZS4uXG4gICAgdmFyIHRleHR1cmUgPSBuZXcgVGV4dHVyZS5mcm9tRGF0YShnbCwgZGF0YSwgd2lkdGgsIGhlaWdodCk7XG4gICAgdGV4dHVyZS5lbmFibGVOZWFyZXN0U2NhbGluZygpO1xuICAgIHRleHR1cmUuZW5hYmxlV3JhcENsYW1wKCk7XG5cbiAgICAvL25vdyBjcmVhdGUgdGhlIGZyYW1lYnVmZmVyIG9iamVjdCBhbmQgYXR0YWNoIHRoZSB0ZXh0dXJlIHRvIGl0LlxuICAgIHZhciBmYm8gPSBuZXcgRnJhbWVidWZmZXIoZ2wsIHdpZHRoLCBoZWlnaHQpO1xuICAgIGZiby5lbmFibGVUZXh0dXJlKHRleHR1cmUpXG5cbiAgICByZXR1cm4gZmJvO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IEZyYW1lYnVmZmVyO1xuXG4iLCJcbnZhciBjb21waWxlUHJvZ3JhbSA9IHJlcXVpcmUoJy4vc2hhZGVyL2NvbXBpbGVQcm9ncmFtJyksXG5cdGV4dHJhY3RBdHRyaWJ1dGVzID0gcmVxdWlyZSgnLi9zaGFkZXIvZXh0cmFjdEF0dHJpYnV0ZXMnKSxcblx0ZXh0cmFjdFVuaWZvcm1zID0gcmVxdWlyZSgnLi9zaGFkZXIvZXh0cmFjdFVuaWZvcm1zJyksXG5cdGdlbmVyYXRlVW5pZm9ybUFjY2Vzc09iamVjdCA9IHJlcXVpcmUoJy4vc2hhZGVyL2dlbmVyYXRlVW5pZm9ybUFjY2Vzc09iamVjdCcpO1xuXG4vKipcbiAqIEhlbHBlciBjbGFzcyB0byBjcmVhdGUgYSB3ZWJHTCBTaGFkZXJcbiAqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gZ2wge1dlYkdMUmVuZGVyaW5nQ29udGV4dH1cbiAqL1xudmFyIFNoYWRlciA9IGZ1bmN0aW9uKGdsLCB2ZXJ0ZXhTcmMsIGZyYWdtZW50U3JjKVxue1xuXHR0aGlzLmdsID0gZ2w7XG5cblx0Ly8gRmlyc3QgY29tcGlsZSB0aGUgcHJvZ3JhbS4uXG5cdHRoaXMucHJvZ3JhbSA9IGNvbXBpbGVQcm9ncmFtKGdsLCB2ZXJ0ZXhTcmMsIGZyYWdtZW50U3JjKTtcblxuXHQvLyBuZXh0IGV4dHJhY3QgdGhlIGF0dHJpYnV0ZXNcblx0dGhpcy5hdHRyaWJ1dGVzID0gZXh0cmFjdEF0dHJpYnV0ZXMoZ2wsIHRoaXMucHJvZ3JhbSk7IFxuXG4gICAgdmFyIHVuaWZvcm1EYXRhID0gZXh0cmFjdFVuaWZvcm1zKGdsLCB0aGlzLnByb2dyYW0pO1xuXG4gICAgdGhpcy51bmlmb3JtcyA9IGdlbmVyYXRlVW5pZm9ybUFjY2Vzc09iamVjdCggZ2wsIHVuaWZvcm1EYXRhICk7XG59XG5cblNoYWRlci5wcm90b3R5cGUuYmluZCA9IGZ1bmN0aW9uKClcbntcblx0dGhpcy5nbC51c2VQcm9ncmFtKHRoaXMucHJvZ3JhbSk7XG59XG5cblNoYWRlci5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uKClcbntcblx0dmFyIGdsID0gdGhpcy5nbDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBTaGFkZXI7XG5cbiIsIlxuLyoqXG4gKiBIZWxwZXIgY2xhc3MgdG8gY3JlYXRlIGEgd2ViR0wgVGV4dHVyZVxuICpcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqIEBwYXJhbSBnbCB7V2ViR0xSZW5kZXJpbmdDb250ZXh0fSBhIFdlYkdMIGNvbnRleHRcbiAqIEBwYXJhbSB3aWR0aCB7bnVtYmVyfSB0aGUgd2lkdGggb2YgdGhlIHRleHR1cmUgXG4gKiBAcGFyYW0gaGVpZ2h0IHtudW1iZXJ9IHRoZSBoZWlnaHQgb2YgdGhlIHRleHR1cmUgXG4gKiBAcGFyYW0gZm9ybWF0IHtudW1iZXJ9IHRoZSBwaXhlbCBmb3JtYXQgb2YgdGhlIHRleHR1cmUuIGRlZmF1bHRzIHRvIGdsLlJHQkFcbiAqIEBwYXJhbSB0eXBlIHtudW1iZXJ9IHRoZSBnbCB0eXBlIG9mIHRoZSB0ZXh0dXJlLiBkZWZhdWx0cyB0byBnbC5VTlNJR05FRF9CWVRFXG4gKi9cbnZhciBUZXh0dXJlID0gZnVuY3Rpb24oZ2wsIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgdHlwZSlcbntcblx0dGhpcy5nbCA9IGdsO1xuXG5cdHRoaXMudGV4dHVyZSA9IGdsLmNyZWF0ZVRleHR1cmUoKTtcblxuXHQvLyBzb21lIHNldHRpbmdzLi5cblx0dGhpcy5taXBtYXAgPSBmYWxzZTtcblxuXHR0aGlzLnByZW11bHRpcGx5QWxwaGEgPSBmYWxzZTtcblxuXHR0aGlzLndpZHRoID0gd2lkdGggfHwgMDtcblx0dGhpcy5oZWlnaHQgPSBoZWlnaHQgfHwgMDtcblxuXHR0aGlzLmZvcm1hdCA9IGZvcm1hdCB8fCBnbC5SR0JBO1xuXHR0aGlzLnR5cGUgPSB0eXBlIHx8IGdsLlVOU0lHTkVEX0JZVEU7XG5cblxufVxuXG4vKipcbiAqIEBwYXJhbSB7UElYSS5nbENvcmUuVGV4dHVyZX0gW3Zhcm5hbWVdIFtkZXNjcmlwdGlvbl1cbiAqL1xuVGV4dHVyZS5wcm90b3R5cGUudXBsb2FkID0gZnVuY3Rpb24oc291cmNlKVxue1xuXHR0aGlzLmJpbmQoKTtcblxuXHR2YXIgZ2wgPSB0aGlzLmdsO1xuXG5cdHRoaXMud2lkdGggPSBzb3VyY2Uud2lkdGg7XG5cdHRoaXMuaGVpZ2h0ID0gc291cmNlLmhlaWdodDtcblxuXHRnbC5waXhlbFN0b3JlaShnbC5VTlBBQ0tfUFJFTVVMVElQTFlfQUxQSEFfV0VCR0wsIHRoaXMucHJlbXVsdGlwbHlBbHBoYSk7XG4gICAgZ2wudGV4SW1hZ2UyRChnbC5URVhUVVJFXzJELCAwLCB0aGlzLmZvcm1hdCwgdGhpcy5mb3JtYXQsIHRoaXMudHlwZSwgc291cmNlKTtcbn1cblxudmFyIEZMT0FUSU5HX1BPSU5UX0FWQUlMQUJMRSA9IGZhbHNlO1xuXG5UZXh0dXJlLnByb3RvdHlwZS51cGxvYWREYXRhID0gZnVuY3Rpb24oZGF0YSwgd2lkdGgsIGhlaWdodClcbntcblx0dGhpcy5iaW5kKCk7XG5cdFxuXHR0aGlzLndpZHRoID0gd2lkdGggfHwgdGhpcy53aWR0aDtcblx0dGhpcy5oZWlnaHQgPSBoZWlnaHQgfHwgdGhpcy5oZWlnaHQ7XG5cblx0aWYoZGF0YSBpbnN0YW5jZW9mIEZsb2F0MzJBcnJheSlcblx0e1xuXHRcdGlmKCFGTE9BVElOR19QT0lOVF9BVkFJTEFCTEUpXG5cdFx0e1xuXHRcdFx0dmFyIGV4dCA9IGdsLmdldEV4dGVuc2lvbihcIk9FU190ZXh0dXJlX2Zsb2F0XCIpO1xuXHRcdFx0XG5cdFx0XHRpZihleHQpXG5cdFx0XHR7XG5cdFx0XHRcdEZMT0FUSU5HX1BPSU5UX0FWQUlMQUJMRSA9IHRydWU7XG5cdFx0XHR9XG5cdFx0XHRlbHNlXG5cdFx0XHR7XG5cdFx0XHRcdHRocm93IG5ldyBFcnJvcignZmxvYXRpbmcgcG9pbnQgdGV4dHVyZXMgbm90IGF2YWlsYWJsZScpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHRoaXMudHlwZSA9IGdsLkZMT0FUO1xuXHR9XG5cdGVsc2Vcblx0e1xuXHRcdC8vIFRPRE8gc3VwcG9ydCBmb3Igb3RoZXIgdHlwZXNcblx0XHR0aGlzLnR5cGUgPSBnbC5VTlNJR05FRF9CWVRFO1xuXHR9XG5cblx0Ly8gd2hhdCB0eXBlIG9mIGRhdGE/XG5cdGdsLnBpeGVsU3RvcmVpKGdsLlVOUEFDS19QUkVNVUxUSVBMWV9BTFBIQV9XRUJHTCwgdGhpcy5wcmVtdWx0aXBseUFscGhhKTtcblx0Z2wudGV4SW1hZ2UyRChnbC5URVhUVVJFXzJELCAwLCB0aGlzLmZvcm1hdCwgIHRoaXMud2lkdGgsIHRoaXMuaGVpZ2h0LCAwLCB0aGlzLmZvcm1hdCwgdGhpcy50eXBlLCBkYXRhIHx8IG51bGwpO1xuXG59XG5cblRleHR1cmUucHJvdG90eXBlLmJpbmQgPSBmdW5jdGlvbihsb2NhdGlvbilcbntcblx0dmFyIGdsID0gdGhpcy5nbDtcblxuXHRpZihsb2NhdGlvbiAhPT0gdW5kZWZpbmVkKVxuXHR7XG5cdFx0Z2wuYWN0aXZlVGV4dHVyZShnbC5URVhUVVJFMCArIGxvY2F0aW9uKTtcblx0fVxuXG5cdGdsLmJpbmRUZXh0dXJlKGdsLlRFWFRVUkVfMkQsIHRoaXMudGV4dHVyZSk7XG59XG5cblRleHR1cmUucHJvdG90eXBlLnVuYmluZCA9IGZ1bmN0aW9uKClcbntcblx0dmFyIGdsID0gdGhpcy5nbDtcblx0Z2wuYmluZFRleHR1cmUoZ2wuVEVYVFVSRV8yRCwgbnVsbCk7XG59XG5cblRleHR1cmUucHJvdG90eXBlLm1pbkZpbHRlciA9IGZ1bmN0aW9uKCBsaW5lYXIgKVxue1xuXHR2YXIgZ2wgPSB0aGlzLmdsO1xuXG5cdHRoaXMuYmluZCgpO1xuXG5cdGlmKHRoaXMubWlwbWFwKVxuXHR7XG5cdFx0Z2wudGV4UGFyYW1ldGVyaShnbC5URVhUVVJFXzJELCBnbC5URVhUVVJFX01JTl9GSUxURVIsIGxpbmVhciA/IGdsLkxJTkVBUl9NSVBNQVBfTElORUFSIDogZ2wuTkVBUkVTVF9NSVBNQVBfTkVBUkVTVCk7XG5cdH1cblx0ZWxzZVxuXHR7XG5cdFx0Z2wudGV4UGFyYW1ldGVyaShnbC5URVhUVVJFXzJELCBnbC5URVhUVVJFX01JTl9GSUxURVIsIGxpbmVhciA/IGdsLkxJTkVBUiA6IGdsLk5FQVJFU1QpO1xuXHR9XHRcbn1cblxuVGV4dHVyZS5wcm90b3R5cGUubWFnRmlsdGVyID0gZnVuY3Rpb24oIGxpbmVhciApXG57XG5cdHZhciBnbCA9IHRoaXMuZ2w7XG5cblx0dGhpcy5iaW5kKCk7XG5cblx0Z2wudGV4UGFyYW1ldGVyaShnbC5URVhUVVJFXzJELCBnbC5URVhUVVJFX01BR19GSUxURVIsIGxpbmVhciA/IGdsLkxJTkVBUiA6IGdsLk5FQVJFU1QpO1xufVxuXG5UZXh0dXJlLnByb3RvdHlwZS5lbmFibGVNaXBtYXAgPSBmdW5jdGlvbigpXG57XG5cdHRoaXMuYmluZCgpO1xuXG5cdHRoaXMubWlwbWFwID0gdHJ1ZTtcblx0Z2wuZ2VuZXJhdGVNaXBtYXAoZ2wuVEVYVFVSRV8yRCk7XG59XG5cblRleHR1cmUucHJvdG90eXBlLmVuYWJsZUxpbmVhclNjYWxpbmcgPSBmdW5jdGlvbigpXG57XG5cdHRoaXMubWluRmlsdGVyKHRydWUpO1xuXHR0aGlzLm1hZ0ZpbHRlcih0cnVlKTtcbn1cblxuVGV4dHVyZS5wcm90b3R5cGUuZW5hYmxlTmVhcmVzdFNjYWxpbmcgPSBmdW5jdGlvbigpXG57XG5cdHRoaXMubWluRmlsdGVyKGZhbHNlKTtcblx0dGhpcy5tYWdGaWx0ZXIoZmFsc2UpO1xufVxuXG5UZXh0dXJlLnByb3RvdHlwZS5lbmFibGVXcmFwQ2xhbXAgPSBmdW5jdGlvbigpXG57XG5cdHZhciBnbCA9IHRoaXMuZ2w7XG5cblx0dGhpcy5iaW5kKCk7XG5cblx0Z2wudGV4UGFyYW1ldGVyaShnbC5URVhUVVJFXzJELCBnbC5URVhUVVJFX1dSQVBfUywgZ2wuQ0xBTVBfVE9fRURHRSk7XG4gICAgZ2wudGV4UGFyYW1ldGVyaShnbC5URVhUVVJFXzJELCBnbC5URVhUVVJFX1dSQVBfVCwgZ2wuQ0xBTVBfVE9fRURHRSk7XG59XG5cblRleHR1cmUucHJvdG90eXBlLmVuYWJsZVdyYXBSZXBlYXQgPSBmdW5jdGlvbigpXG57XG5cdHZhciBnbCA9IHRoaXMuZ2w7XG5cblx0dGhpcy5iaW5kKCk7XG5cdFxuXHRnbC50ZXhQYXJhbWV0ZXJpKGdsLlRFWFRVUkVfMkQsIGdsLlRFWFRVUkVfV1JBUF9TLCBnbC5SRVBFQVQpO1xuICAgIGdsLnRleFBhcmFtZXRlcmkoZ2wuVEVYVFVSRV8yRCwgZ2wuVEVYVFVSRV9XUkFQX1QsIGdsLlJFUEVBVCk7XG59XG5cblRleHR1cmUucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbigpXG57XG5cdHZhciBnbCA9IHRoaXMuZ2w7XG5cdC8vVE9ET1xuXHRnbC5kZWxldGVUZXh0dXJlKHRoaXMudGV4dHVyZSk7XG59XG5cbi8vVGV4dHVyZS5cblRleHR1cmUuZnJvbVNvdXJjZSA9IGZ1bmN0aW9uKGdsLCBzb3VyY2UsIHByZW11bHRpcGx5QWxwaGEpXG57XG5cdHZhciB0ZXh0dXJlID0gbmV3IFRleHR1cmUoZ2wpO1xuXHR0ZXh0dXJlLnByZW11bHRpcGx5QWxwaGEgPSBwcmVtdWx0aXBseUFscGhhIHx8IGZhbHNlO1xuXHR0ZXh0dXJlLnVwbG9hZChzb3VyY2UpO1xuXG5cdHJldHVybiB0ZXh0dXJlO1xufVxuXG5UZXh0dXJlLmZyb21EYXRhID0gZnVuY3Rpb24oZ2wsIGRhdGEsIHdpZHRoLCBoZWlnaHQpXG57XG5cdC8vY29uc29sZS5sb2coZGF0YSwgd2lkdGgsIGhlaWdodCk7XG5cdHZhciB0ZXh0dXJlID0gbmV3IFRleHR1cmUoZ2wpO1xuXHR0ZXh0dXJlLnVwbG9hZERhdGEoZGF0YSwgd2lkdGgsIGhlaWdodCk7XG5cblx0cmV0dXJuIHRleHR1cmU7XG59XG5cblxubW9kdWxlLmV4cG9ydHMgPSBUZXh0dXJlO1xuXG4iLCJcbi8qKlxuICogR2VuZXJpYyBNYXNrIFN0YWNrIGRhdGEgc3RydWN0dXJlXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKi9cblxuLy8gc3RhdGUgb2JqZWN0Ly9cblxuXG5mdW5jdGlvbiBWZXJ0ZXhBcnJheU9iamVjdChnbClcbntcblx0XG5cdHRoaXMubmF0aXZlVmFvRXh0ZW5zaW9uID0gKFxuICAgICAgZ2wuZ2V0RXh0ZW5zaW9uKCdPRVNfdmVydGV4X2FycmF5X29iamVjdCcpIHx8XG4gICAgICBnbC5nZXRFeHRlbnNpb24oJ01PWl9PRVNfdmVydGV4X2FycmF5X29iamVjdCcpIHx8XG4gICAgICBnbC5nZXRFeHRlbnNpb24oJ1dFQktJVF9PRVNfdmVydGV4X2FycmF5X29iamVjdCcpXG4gICAgKTtcblxuLy9cdHRoaXMubmF0aXZlVmFvRXh0ZW5zaW9uID0gbnVsbDtcblxuXHRpZih0aGlzLm5hdGl2ZVZhb0V4dGVuc2lvbilcblx0e1xuXHRcdHRoaXMubmF0aXZlVmFvID0gdGhpcy5uYXRpdmVWYW9FeHRlbnNpb24uY3JlYXRlVmVydGV4QXJyYXlPRVMoKTsgIFxuXHR9XG5cblx0dGhpcy5nbCA9IGdsO1xuXG5cdHRoaXMuYXR0cmlidXRlcyA9IFtdO1xuXG5cdHRoaXMuaW5kZXhCdWZmZXIgPSBudWxsO1xuXG5cdHRoaXMuZGlydHkgPSBmYWxzZTtcblxuXHRcbn1cblxuVmVydGV4QXJyYXlPYmplY3QucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gVmVydGV4QXJyYXlPYmplY3Q7XG5tb2R1bGUuZXhwb3J0cyA9IFZlcnRleEFycmF5T2JqZWN0O1xuXG5WZXJ0ZXhBcnJheU9iamVjdC5wcm90b3R5cGUuYmluZCA9IGZ1bmN0aW9uKClcbntcblx0aWYodGhpcy5uYXRpdmVWYW8pXG5cdHtcblx0XHR0aGlzLm5hdGl2ZVZhb0V4dGVuc2lvbi5iaW5kVmVydGV4QXJyYXlPRVModGhpcy5uYXRpdmVWYW8pOyAgXG5cblx0XHRpZih0aGlzLmRpcnR5KVxuXHRcdHtcblx0XHRcdHRoaXMuZGlydHkgPSBmYWxzZTtcblx0XHRcdHRoaXMuYWN0aXZhdGUoKTtcblx0XHR9XG5cdH1cblx0ZWxzZVxuXHR7XG5cdFx0dGhpcy5hY3RpdmF0ZSgpO1xuXHR9XG59XG5cblZlcnRleEFycmF5T2JqZWN0LnByb3RvdHlwZS51bmJpbmQgPSBmdW5jdGlvbigpXG57XG5cdGlmKHRoaXMubmF0aXZlVmFvKVxuXHR7XG5cdFx0dGhpcy5uYXRpdmVWYW9FeHRlbnNpb24uYmluZFZlcnRleEFycmF5T0VTKG51bGwpO1xuXHR9XG59XG5cblZlcnRleEFycmF5T2JqZWN0LnByb3RvdHlwZS5hY3RpdmF0ZSA9IGZ1bmN0aW9uKClcbntcblx0dmFyIGdsID0gdGhpcy5nbDtcblxuXHRmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuYXR0cmlidXRlcy5sZW5ndGg7IGkrKykgXG5cdHtcblx0XHR2YXIgYXR0cmliID0gdGhpcy5hdHRyaWJ1dGVzW2ldO1xuXHRcdGF0dHJpYi5idWZmZXIuYmluZCgpO1x0XG5cblx0XHRhdHRyaWIuYXR0cmlidXRlLnBvaW50ZXIoYXR0cmliLnR5cGUsIGF0dHJpYi5ub3JtYWxpemVkLCBhdHRyaWIuc3RyaWRlLCBhdHRyaWIuc3RhcnQpOyBcblx0XHRcblx0XHRnbC5lbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShhdHRyaWIuYXR0cmlidXRlLmxvY2F0aW9uKTtcblx0fTtcblxuXHR0aGlzLmluZGV4QnVmZmVyLmJpbmQoKTtcbn1cblxuVmVydGV4QXJyYXlPYmplY3QucHJvdG90eXBlLmFkZEF0dHJpYnV0ZSA9IGZ1bmN0aW9uKGJ1ZmZlciwgYXR0cmlidXRlLCB0eXBlLCBub3JtYWxpemVkLCBzdHJpZGUsIHN0YXJ0KVxue1xuICAgIHRoaXMuYXR0cmlidXRlcy5wdXNoKHtcbiAgICBcdGJ1ZmZlcjogXHRidWZmZXIsXG4gICAgXHRhdHRyaWJ1dGU6IFx0YXR0cmlidXRlLFxuXG4gICAgXHRsb2NhdGlvbjogXHRhdHRyaWJ1dGUubG9jYXRpb24sXG5cdCBcdHR5cGU6IFx0XHR0eXBlIHx8IHRoaXMuZ2wuRkxPQVQsXG5cdCBcdG5vcm1hbGl6ZWQ6IG5vcm1hbGl6ZWQgfHwgZmFsc2UsXG5cdCBcdHN0cmlkZTogXHRzdHJpZGUgfHwgMCxcblx0IFx0c3RhcnQ6IFx0XHRzdGFydCB8fCAwXG5cdH0pXG5cblx0dGhpcy5kaXJ0eSA9IHRydWU7XG59XG5cblxuVmVydGV4QXJyYXlPYmplY3QucHJvdG90eXBlLmFkZEluZGV4ID0gZnVuY3Rpb24oYnVmZmVyLCBvcHRpb25zKVxue1xuICAgIHRoaXMuaW5kZXhCdWZmZXIgPSBidWZmZXI7XG5cbiAgICB0aGlzLmRpcnR5ID0gdHJ1ZTtcbn1cblxuVmVydGV4QXJyYXlPYmplY3QucHJvdG90eXBlLmRyYXcgPSBmdW5jdGlvbih0eXBlLCBzaXplLCBzdGFydClcbntcblx0dmFyIGdsID0gdGhpcy5nbDtcblx0Z2wuZHJhd0VsZW1lbnRzKHR5cGUsIHNpemUsIGdsLlVOU0lHTkVEX1NIT1JULCBzdGFydCk7XG59XG5cbiIsIlxuLyoqXG4gKiBIZWxwZXIgY2xhc3MgdG8gY3JlYXRlIGEgd2ViR0wgQ29udGV4dFxuICpcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqIEBwYXJhbSBnbCB7V2ViR0xSZW5kZXJpbmdDb250ZXh0fVxuICovXG5cbnZhciBDT05URVhUX1VJRCA9IDA7XG5cbnZhciBjcmVhdGVDb250ZXh0ID0gZnVuY3Rpb24oY2FudmFzLCBvcHRpb25zKVxue1xuICAgIGdsID0gY2FudmFzLmdldENvbnRleHQoJ3dlYmdsJywgb3B0aW9ucykgfHwgXG4gICAgXHQgY2FudmFzLmdldENvbnRleHQoJ2V4cGVyaW1lbnRhbC13ZWJnbCcsIG9wdGlvbnMpO1xuXG4gICAgaWYgKCFnbClcbiAgICB7XG4gICAgICAgIC8vIGZhaWwsIG5vdCBhYmxlIHRvIGdldCBhIGNvbnRleHRcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdUaGlzIGJyb3dzZXIgZG9lcyBub3Qgc3VwcG9ydCB3ZWJHTC4gVHJ5IHVzaW5nIHRoZSBjYW52YXMgcmVuZGVyZXInKTtcbiAgICB9XG5cbiAgICAvLyBtaWdodCB3YW50IHRvIHBoYXNlIHRoaXMgb3V0P1xuICAgIGdsLmlkID0gQ09OVEVYVF9VSUQrKztcblxuICAgIHJldHVybiBnbDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBjcmVhdGVDb250ZXh0O1xuXG4iLCIvKipcbiAqIEdlbmVyaWMgTWFzayBTdGFjayBkYXRhIHN0cnVjdHVyZVxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICovXG5cbnZhciBHTF9NQVAgPSB7fTtcblxuXG52YXIgc2V0VmVydGV4QXR0cmliQXJyYXlzID0gZnVuY3Rpb24gKGdsLCBhdHRyaWJzKVxue1x0XG4gICAvLyBjb25zb2xlLmxvZyhnbC5pZClcbiAgICB2YXIgZGF0YSA9IEdMX01BUFtnbC5pZF07XG5cbiAgICBpZighZGF0YSlcbiAgICB7XG5cdCAgIHZhciBtYXhBdHRyaWJzID0gZ2wuZ2V0UGFyYW1ldGVyKGdsLk1BWF9WRVJURVhfQVRUUklCUyk7XG5cdFx0ZGF0YSA9IEdMX01BUFtnbC5pZF0gPSB7dGVtcEF0dHJpYlN0YXRlOm5ldyBBcnJheShtYXhBdHRyaWJzKVxuXHRcdFx0XHQgXHQgXHRcdCAgICxhdHRyaWJTdGF0ZTpuZXcgQXJyYXkobWF4QXR0cmlicyl9O1xuXHR9XG5cdFxuICAgIHZhciBpLFxuICAgIFx0dGVtcEF0dHJpYlN0YXRlID0gZGF0YS50ZW1wQXR0cmliU3RhdGUsXG4gICAgXHRhdHRyaWJTdGF0ZSA9IGRhdGEuYXR0cmliU3RhdGU7XG5cbiAgICBmb3IgKGkgPSAwOyBpIDwgdGVtcEF0dHJpYlN0YXRlLmxlbmd0aDsgaSsrKVxuICAgIHtcbiAgICAgICAgdGVtcEF0dHJpYlN0YXRlW2ldID0gZmFsc2U7XG4gICAgfVxuXG4gICAgLy8gc2V0IHRoZSBuZXcgYXR0cmlic1xuICAgIGZvciAoaSBpbiBhdHRyaWJzKVxuICAgIHtcbiAgICAgICAgdGVtcEF0dHJpYlN0YXRlW2F0dHJpYnNbaV0ubG9jYXRpb25dID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBmb3IgKGkgPSAxOyBpIDwgYXR0cmliU3RhdGUubGVuZ3RoOyBpKyspXG4gICAge1xuICAgICAgICBpZiAoYXR0cmliU3RhdGVbaV0gIT09IHRlbXBBdHRyaWJTdGF0ZVtpXSlcbiAgICAgICAge1xuICAgICAgICAgICAgYXR0cmliU3RhdGVbaV0gPSB0ZW1wQXR0cmliU3RhdGVbaV07XG5cbiAgICAgICAgICAgIGlmIChkYXRhLmF0dHJpYlN0YXRlW2ldKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGdsLmVuYWJsZVZlcnRleEF0dHJpYkFycmF5KGkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGdsLmRpc2FibGVWZXJ0ZXhBdHRyaWJBcnJheShpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn07XG5cbm1vZHVsZS5leHBvcnRzID0gc2V0VmVydGV4QXR0cmliQXJyYXlzOyIsIlxuXG5cblxuY29tcGlsZVByb2dyYW0gPSBmdW5jdGlvbihnbCwgdmVydGV4U3JjLCBmcmFnbWVudFNyYylcbntcbiAgICB2YXIgZ2xWZXJ0U2hhZGVyID0gY29tcGlsZVNoYWRlcihnbCwgZ2wuVkVSVEVYX1NIQURFUiwgdmVydGV4U3JjKTtcbiAgICB2YXIgZ2xGcmFnU2hhZGVyID0gY29tcGlsZVNoYWRlcihnbCwgZ2wuRlJBR01FTlRfU0hBREVSLCBmcmFnbWVudFNyYyk7XG5cbiAgICB2YXIgcHJvZ3JhbSA9IGdsLmNyZWF0ZVByb2dyYW0oKTtcblxuICAgIGdsLmF0dGFjaFNoYWRlcihwcm9ncmFtLCBnbFZlcnRTaGFkZXIpO1xuICAgIGdsLmF0dGFjaFNoYWRlcihwcm9ncmFtLCBnbEZyYWdTaGFkZXIpO1xuICAgIGdsLmxpbmtQcm9ncmFtKHByb2dyYW0pO1xuXG4gICAgLy8gaWYgbGlua2luZyBmYWlscywgdGhlbiBsb2cgYW5kIGNsZWFudXBcbiAgICBpZiAoIWdsLmdldFByb2dyYW1QYXJhbWV0ZXIocHJvZ3JhbSwgZ2wuTElOS19TVEFUVVMpKVxuICAgIHtcbiAgICAgICAgY29uc29sZS5lcnJvcignUGl4aS5qcyBFcnJvcjogQ291bGQgbm90IGluaXRpYWxpemUgc2hhZGVyLicpO1xuICAgICAgICBjb25zb2xlLmVycm9yKCdnbC5WQUxJREFURV9TVEFUVVMnLCBnbC5nZXRQcm9ncmFtUGFyYW1ldGVyKHByb2dyYW0sIGdsLlZBTElEQVRFX1NUQVRVUykpO1xuICAgICAgICBjb25zb2xlLmVycm9yKCdnbC5nZXRFcnJvcigpJywgZ2wuZ2V0RXJyb3IoKSk7XG5cbiAgICAgICAgLy8gaWYgdGhlcmUgaXMgYSBwcm9ncmFtIGluZm8gbG9nLCBsb2cgaXRcbiAgICAgICAgaWYgKGdsLmdldFByb2dyYW1JbmZvTG9nKHByb2dyYW0pICE9PSAnJylcbiAgICAgICAge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKCdQaXhpLmpzIFdhcm5pbmc6IGdsLmdldFByb2dyYW1JbmZvTG9nKCknLCBnbC5nZXRQcm9ncmFtSW5mb0xvZyhwcm9ncmFtKSk7XG4gICAgICAgIH1cblxuICAgICAgICBnbC5kZWxldGVQcm9ncmFtKHByb2dyYW0pO1xuICAgICAgICBwcm9ncmFtID0gbnVsbDtcbiAgICB9XG5cbiAgICAvLyBjbGVhbiB1cCBzb21lIHNoYWRlcnNcbiAgICBnbC5kZWxldGVTaGFkZXIoZ2xWZXJ0U2hhZGVyKTtcbiAgICBnbC5kZWxldGVTaGFkZXIoZ2xGcmFnU2hhZGVyKTtcblxuICAgIHJldHVybiBwcm9ncmFtO1xufVxuXG52YXIgY29tcGlsZVNoYWRlciA9IGZ1bmN0aW9uIChnbCwgdHlwZSwgc3JjKVxue1xuICAgIHZhciBzaGFkZXIgPSBnbC5jcmVhdGVTaGFkZXIodHlwZSk7XG5cbiAgICBnbC5zaGFkZXJTb3VyY2Uoc2hhZGVyLCBzcmMpO1xuICAgIGdsLmNvbXBpbGVTaGFkZXIoc2hhZGVyKTtcblxuICAgIGlmICghZ2wuZ2V0U2hhZGVyUGFyYW1ldGVyKHNoYWRlciwgZ2wuQ09NUElMRV9TVEFUVVMpKVxuICAgIHtcbiAgICAgICAgY29uc29sZS5sb2coZ2wuZ2V0U2hhZGVySW5mb0xvZyhzaGFkZXIpKTtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgcmV0dXJuIHNoYWRlcjtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gY29tcGlsZVByb2dyYW07XG5cbiIsIlxuXG52YXIgZGVmYXVsdFZhbHVlID0gZnVuY3Rpb24odHlwZSwgc2l6ZSkgXG57XG4gICAgc3dpdGNoICh0eXBlKVxuICAgIHtcbiAgICAgICAgY2FzZSAnZmxvYXQnOlxuICAgICAgICAgICAgcmV0dXJuIDA7XG5cbiAgICAgICAgY2FzZSAndmVjMic6IFxuICAgICAgICAgICAgcmV0dXJuIG5ldyBGbG9hdDMyQXJyYXkoMiAqIHNpemUpO1xuXG4gICAgICAgIGNhc2UgJ3ZlYzMnOlxuICAgICAgICAgICAgcmV0dXJuIG5ldyBGbG9hdDMyQXJyYXkoMyAqIHNpemUpO1xuXG4gICAgICAgIGNhc2UgJ3ZlYzQnOiAgICAgXG4gICAgICAgICAgICByZXR1cm4gbmV3IEZsb2F0MzJBcnJheSg0ICogc2l6ZSk7XG4gICAgICAgICAgICBcbiAgICAgICAgY2FzZSAnaW50JzpcbiAgICAgICAgY2FzZSAnc2FtcGxlcjJEJzpcbiAgICAgICAgICAgIHJldHVybiAwO1xuXG4gICAgICAgIGNhc2UgJ2l2ZWMyJzogICBcbiAgICAgICAgICAgIHJldHVybiBuZXcgSW50MzJBcnJheSgyICogc2l6ZSk7XG5cbiAgICAgICAgY2FzZSAnaXZlYzMnOlxuICAgICAgICAgICAgcmV0dXJuIG5ldyBJbnQzMkFycmF5KDMgKiBzaXplKTtcblxuICAgICAgICBjYXNlICdpdmVjNCc6IFxuICAgICAgICAgICAgcmV0dXJuIG5ldyBJbnQzMkFycmF5KDQgKiBzaXplKTtcblxuICAgICAgICBjYXNlICdib29sJzogICAgIFxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuXG4gICAgICAgIGNhc2UgJ2J2ZWMyJzpcblxuICAgICAgICAgICAgcmV0dXJuIGJvb2xlYW5BcnJheSggMiAqIHNpemUpO1xuXG4gICAgICAgIGNhc2UgJ2J2ZWMzJzpcbiAgICAgICAgICAgIHJldHVybiBib29sZWFuQXJyYXkoMyAqIHNpemUpO1xuXG4gICAgICAgIGNhc2UgJ2J2ZWM0JzpcbiAgICAgICAgICAgIHJldHVybiBib29sZWFuQXJyYXkoNCAqIHNpemUpO1xuXG4gICAgICAgIGNhc2UgJ21hdDInOlxuICAgICAgICAgICAgcmV0dXJuIG5ldyBGbG9hdDMyQXJyYXkoWzEsIDBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwwLCAxXSk7XG5cbiAgICAgICAgY2FzZSAnbWF0Myc6IFxuICAgICAgICAgICAgcmV0dXJuIG5ldyBGbG9hdDMyQXJyYXkoWzEsIDAsIDBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwwLCAxLCAwXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsMCwgMCwgMV0pO1xuXG4gICAgICAgIGNhc2UgJ21hdDQnOlxuICAgICAgICAgICAgcmV0dXJuIG5ldyBGbG9hdDMyQXJyYXkoWzEsIDAsIDAsIDBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwwLCAxLCAwLCAwXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsMCwgMCwgMSwgMFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLDAsIDAsIDAsIDFdKTtcbiAgICB9XG59XG5cbnZhciBib29sZWFuQXJyYXkgPSBmdW5jdGlvbihzaXplKVxue1xuICAgIHZhciBhcnJheSA9IG5ldyBBcnJheShzaXplKTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXJyYXkubGVuZ3RoOyBpKyspIFxuICAgIHtcbiAgICAgICAgYXJyYXlbaV0gPSBmYWxzZTtcbiAgICB9O1xuXG4gICAgcmV0dXJuIGFycmF5O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGRlZmF1bHRWYWx1ZTtcbiIsIlxudmFyIG1hcFR5cGUgPSByZXF1aXJlKCcuL21hcFR5cGUnKTtcbnZhciBtYXBTaXplID0gcmVxdWlyZSgnLi9tYXBTaXplJyk7XG5cbnZhciBleHRyYWN0QXR0cmlidXRlcyA9IGZ1bmN0aW9uKGdsLCBwcm9ncmFtKVxue1xuICAgIHZhciBhdHRyaWJ1dGVzID0ge307XG5cbiAgICB2YXIgdG90YWxBdHRyaWJ1dGVzID0gZ2wuZ2V0UHJvZ3JhbVBhcmFtZXRlcihwcm9ncmFtLCBnbC5BQ1RJVkVfQVRUUklCVVRFUylcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdG90YWxBdHRyaWJ1dGVzOyBpKyspIFxuICAgIHtcbiAgICAgICAgdmFyIGF0dHJpYkRhdGEgPSBnbC5nZXRBY3RpdmVBdHRyaWIocHJvZ3JhbSwgaSk7XG4gICAgICAgIHZhciB0eXBlID0gbWFwVHlwZShnbCwgYXR0cmliRGF0YS50eXBlKTtcblxuICAgICAgICBhdHRyaWJ1dGVzW2F0dHJpYkRhdGEubmFtZV0gPSB7XG4gICAgICAgICAgICB0eXBlOnR5cGUsXG4gICAgICAgICAgICBzaXplOm1hcFNpemUodHlwZSksXG4gICAgICAgICAgICBsb2NhdGlvbjpnbC5nZXRBdHRyaWJMb2NhdGlvbihwcm9ncmFtLCBhdHRyaWJEYXRhLm5hbWUpLFxuICAgICAgICAgICAgLy9UT0RPIC0gbWFrZSBhbiBhdHRyaWJ1dGUgb2JqZWN0XG4gICAgICAgICAgICBwb2ludGVyOmZ1bmN0aW9uKHR5cGUsIG5vcm1hbGl6ZWQsIHN0cmlkZSwgc3RhcnQpe1xuXG4gICAgICAgICAgICAgLy8gICBjb25zb2xlLmxvZyh0aGlzLmxvY2F0aW9uKVxuICAgICAgICAgICAgICAgIGdsLnZlcnRleEF0dHJpYlBvaW50ZXIodGhpcy5sb2NhdGlvbix0aGlzLnNpemUsIHR5cGUgfHwgZ2wuRkxPQVQsIG5vcm1hbGl6ZWQgfHwgZmFsc2UsIHN0cmlkZSB8fCAwLCBzdGFydCB8fCAwKTsgXG5cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH07XG5cbiAgICByZXR1cm4gYXR0cmlidXRlczsgIFxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGV4dHJhY3RBdHRyaWJ1dGVzO1xuXG4iLCJ2YXIgbWFwVHlwZSA9IHJlcXVpcmUoJy4vbWFwVHlwZScpO1xudmFyIGRlZmF1bHRWYWx1ZSA9IHJlcXVpcmUoJy4vZGVmYXVsdFZhbHVlJyk7XG5cblxudmFyIGV4dHJhY3RVbmlmb3JtcyA9IGZ1bmN0aW9uKGdsLCBwcm9ncmFtKVxue1xuXHR2YXIgdW5pZm9ybXMgPSB7fTtcblx0XG4gICAgdmFyIHRvdGFsVW5pZm9ybXMgPSBnbC5nZXRQcm9ncmFtUGFyYW1ldGVyKHByb2dyYW0sIGdsLkFDVElWRV9VTklGT1JNUylcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdG90YWxVbmlmb3JtczsgaSsrKSBcbiAgICB7XG4gICAgXHR2YXIgdW5pZm9ybURhdGEgPSBnbC5nZXRBY3RpdmVVbmlmb3JtKHByb2dyYW0sIGkpO1xuICAgIFx0dmFyIG5hbWUgPSB1bmlmb3JtRGF0YS5uYW1lLnJlcGxhY2UoL1xcWy4qP1xcXS8sIFwiXCIpO1xuICAgICAgICB2YXIgdHlwZSA9IG1hcFR5cGUoZ2wsIHVuaWZvcm1EYXRhLnR5cGUgKTtcblxuICAgIFx0dW5pZm9ybXNbbmFtZV0gPSB7XG4gICAgXHRcdHR5cGU6dHlwZSxcbiAgICBcdFx0c2l6ZTp1bmlmb3JtRGF0YS5zaXplLFxuICAgIFx0XHRsb2NhdGlvbjpnbC5nZXRVbmlmb3JtTG9jYXRpb24ocHJvZ3JhbSwgbmFtZSksXG4gICAgXHRcdHZhbHVlOmRlZmF1bHRWYWx1ZSh0eXBlLCB1bmlmb3JtRGF0YS5zaXplKVxuICAgIFx0fVxuICAgIH07XG5cdFxuXHRyZXR1cm4gdW5pZm9ybXM7XHRcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBleHRyYWN0VW5pZm9ybXM7XG5cbiIsIlxudmFyIGdlbmVyYXRlVW5pZm9ybUFjY2Vzc09iamVjdCA9IGZ1bmN0aW9uKGdsLCB1bmlmb3JtRGF0YSlcbntcbiAgICAvLyB0aGlzIGlzIHRoZSBvYmplY3Qgd2Ugd2lsbCBiZSBzZW5kaW5nIGJhY2suXG4gICAgLy8gYW4gb2JqZWN0IGhpZXJhY2h5IHdpbGwgYmUgY3JlYXRlZCBmb3Igc3RydWN0c1xuICAgIHZhciB1bmlmb3JtcyA9IHtkYXRhOnt9fTtcblxuICAgIHVuaWZvcm1zLmdsID0gZ2w7XG4gICAgXG4gICAgdmFyIHVuaWZvcm1LZXlzPSBPYmplY3Qua2V5cyh1bmlmb3JtRGF0YSk7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHVuaWZvcm1LZXlzLmxlbmd0aDsgaSsrKSBcbiAgICB7XG4gICAgICAgIHZhciBmdWxsTmFtZSA9IHVuaWZvcm1LZXlzW2ldXG5cbiAgICAgICAgdmFyIG5hbWVUb2tlbnMgPSBmdWxsTmFtZS5zcGxpdCgnLicpO1xuICAgICAgICB2YXIgbmFtZSA9IG5hbWVUb2tlbnNbbmFtZVRva2Vucy5sZW5ndGggLSAxXTtcblxuICAgICAgICB2YXIgdW5pZm9ybUdyb3VwID0gZ2V0VW5pZm9ybUdyb3VwKG5hbWVUb2tlbnMsIHVuaWZvcm1zKTtcblxuICAgICAgICB2YXIgdW5pZm9ybSA9ICB1bmlmb3JtRGF0YVtmdWxsTmFtZV07XG4gICAgICAgIHVuaWZvcm1Hcm91cC5kYXRhW25hbWVdID0gdW5pZm9ybTtcblxuICAgICAgICB1bmlmb3JtR3JvdXAuZ2wgPSBnbDtcblxuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodW5pZm9ybUdyb3VwLCBuYW1lLCB7XG4gICAgICAgICAgICBnZXQ6IGdlbmVyYXRlR2V0dGVyKG5hbWUpLFxuICAgICAgICAgICAgc2V0OiBnZW5lcmF0ZVNldHRlcihuYW1lLCB1bmlmb3JtKVxuICAgICAgICB9KVxuICAgIH07XG5cbiAgICByZXR1cm4gdW5pZm9ybXM7XG59XG5cbnZhciBnZW5lcmF0ZUdldHRlciA9IGZ1bmN0aW9uKG5hbWUpXG57XG5cdHZhciB0ZW1wbGF0ZSA9IGdldHRlclRlbXBsYXRlLnJlcGxhY2UoJyUlJywgbmFtZSk7XG5cdHJldHVybiBuZXcgRnVuY3Rpb24odGVtcGxhdGUpO1xufVxuXG52YXIgZ2VuZXJhdGVTZXR0ZXIgPSBmdW5jdGlvbihuYW1lLCB1bmlmb3JtKVxue1xuICAgIHZhciB0ZW1wbGF0ZSA9IHNldHRlclRlbXBsYXRlLnJlcGxhY2UoLyUlL2csIG5hbWUpO1xuICAgIHZhciBzZXRUZW1wbGF0ZVxuICAgIFxuICAgIGlmKHVuaWZvcm0uc2l6ZSA9PT0gMSlcbiAgICB7XG4gICAgICAgIHNldFRlbXBsYXRlID0gR0xTTF9UT19TSU5HTEVfU0VUVEVSU1t1bmlmb3JtLnR5cGVdO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICBzZXRUZW1wbGF0ZSA9IEdMU0xfVE9fQVJSQVlfU0VUVEVSU1t1bmlmb3JtLnR5cGVdO1xuICAgIH1cblxuICAgIGlmKHNldFRlbXBsYXRlKVxuICAgIHtcbiAgICAgICAgdGVtcGxhdGUgKz0gXCJcXG50aGlzLmdsLlwiICsgc2V0VGVtcGxhdGUgKyBcIjtcIjtcbiAgICB9XG5cbiAgXHRyZXR1cm4gbmV3IEZ1bmN0aW9uKCd2YWx1ZScsIHRlbXBsYXRlKTtcbn1cblxudmFyIGdldFVuaWZvcm1Hcm91cCA9IGZ1bmN0aW9uKG5hbWVUb2tlbnMsIHVuaWZvcm0pXG57XG4gICAgdmFyIGN1ciA9IHVuaWZvcm07XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG5hbWVUb2tlbnMubGVuZ3RoIC0gMTsgaSsrKSBcbiAgICB7XG4gICAgICAgIHZhciBvID0gY3VyW25hbWVUb2tlbnNbaV1dIHx8IHtkYXRhOnt9fTtcbiAgICAgICAgY3VyW25hbWVUb2tlbnNbaV1dID0gbztcbiAgICAgICAgY3VyID0gbztcbiAgICB9O1xuXG4gICAgcmV0dXJuIGN1clxufVxuXG52YXIgZ2V0dGVyVGVtcGxhdGUgPSBbXG4gICAgJ3JldHVybiB0aGlzLmRhdGEuJSUudmFsdWU7Jyxcbl0uam9pbignXFxuJyk7XG5cbnZhciBzZXR0ZXJUZW1wbGF0ZSA9IFtcbiAgICAndGhpcy5kYXRhLiUlLnZhbHVlID0gdmFsdWU7JyxcbiAgICAndmFyIGxvY2F0aW9uID0gdGhpcy5kYXRhLiUlLmxvY2F0aW9uOydcbl0uam9pbignXFxuJyk7XG5cblxudmFyIEdMU0xfVE9fU0lOR0xFX1NFVFRFUlMgPSB7XG5cbiAgICAnZmxvYXQnOiAgICAndW5pZm9ybTFmKGxvY2F0aW9uLCB2YWx1ZSknLFxuXG4gICAgJ3ZlYzInOiAgICAgJ3VuaWZvcm0yZihsb2NhdGlvbiwgdmFsdWVbMF0sIHZhbHVlWzFdKScsXG4gICAgJ3ZlYzMnOiAgICAgJ3VuaWZvcm0zZihsb2NhdGlvbiwgdmFsdWVbMF0sIHZhbHVlWzFdLCB2YWx1ZVsyXSknLFxuICAgICd2ZWM0JzogICAgICd1bmlmb3JtNGYobG9jYXRpb24sIHZhbHVlWzBdLCB2YWx1ZVsxXSwgdmFsdWVbMl0sIHZhbHVlWzNdKScsXG4gICAgXHRcbiAgICAnaW50JzogICAgICAndW5pZm9ybTFpKGxvY2F0aW9uLCB2YWx1ZSknLFxuICAgICdpdmVjMic6ICAgICd1bmlmb3JtMmkobG9jYXRpb24sIHZhbHVlWzBdLCB2YWx1ZVsxXSknLFxuICAgICdpdmVjMyc6ICAgICd1bmlmb3JtM2kobG9jYXRpb24sIHZhbHVlWzBdLCB2YWx1ZVsxXSwgdmFsdWVbMl0pJyxcbiAgICAnaXZlYzQnOiAgICAndW5pZm9ybTRpKGxvY2F0aW9uLCB2YWx1ZVswXSwgdmFsdWVbMV0sIHZhbHVlWzJdLCB2YWx1ZVszXSknLFxuXG4gICAgJ2Jvb2wnOiAgICAgJ3VuaWZvcm0xaShsb2NhdGlvbiwgdmFsdWUpJyxcbiAgICAnYnZlYzInOiAgICAndW5pZm9ybTJpKGxvY2F0aW9uLCB2YWx1ZVswXSwgdmFsdWVbMV0pJyxcbiAgICAnYnZlYzMnOiAgICAndW5pZm9ybTNpKGxvY2F0aW9uLCB2YWx1ZVswXSwgdmFsdWVbMV0sIHZhbHVlWzJdKScsXG4gICAgJ2J2ZWM0JzogICAgJ3VuaWZvcm00aShsb2NhdGlvbiwgdmFsdWVbMF0sIHZhbHVlWzFdLCB2YWx1ZVsyXSwgdmFsdWVbM10pJyxcblxuICAgICdtYXQyJzogICAgICd1bmlmb3JtTWF0cml4MmZ2KGxvY2F0aW9uLCBmYWxzZSwgdmFsdWUpJyxcbiAgICAnbWF0Myc6ICAgICAndW5pZm9ybU1hdHJpeDNmdihsb2NhdGlvbiwgZmFsc2UsIHZhbHVlKScsXG4gICAgJ21hdDQnOiAgICAgJ3VuaWZvcm1NYXRyaXg0ZnYobG9jYXRpb24sIGZhbHNlLCB2YWx1ZSknLFxuXG4gICAgJ3NhbXBsZXIyRCc6J3VuaWZvcm0xaShsb2NhdGlvbiwgdmFsdWUpJ1xufVxuXG52YXIgR0xTTF9UT19BUlJBWV9TRVRURVJTID0ge1xuXG4gICAgJ2Zsb2F0JzogICAgJ3VuaWZvcm0xZnYobG9jYXRpb24sIHZhbHVlKScsXG5cbiAgICAndmVjMic6ICAgICAndW5pZm9ybTJmdihsb2NhdGlvbiwgdmFsdWUpJyxcbiAgICAndmVjMyc6ICAgICAndW5pZm9ybTNmdihsb2NhdGlvbiwgdmFsdWUpJyxcbiAgICAndmVjNCc6ICAgICAndW5pZm9ybTRmdihsb2NhdGlvbiwgdmFsdWUpJyxcbiAgICBcdFxuICAgICdpbnQnOiAgICAgICd1bmlmb3JtMWl2KGxvY2F0aW9uLCB2YWx1ZSknLFxuICAgICdpdmVjMic6ICAgICd1bmlmb3JtMml2KGxvY2F0aW9uLCB2YWx1ZSknLFxuICAgICdpdmVjMyc6ICAgICd1bmlmb3JtM2l2KGxvY2F0aW9uLCB2YWx1ZSknLFxuICAgICdpdmVjNCc6ICAgICd1bmlmb3JtNGl2KGxvY2F0aW9uLCB2YWx1ZSknLFxuXG4gICAgJ2Jvb2wnOiAgICAgJ3VuaWZvcm0xaXYobG9jYXRpb24sIHZhbHVlKScsXG4gICAgJ2J2ZWMyJzogICAgJ3VuaWZvcm0yaXYobG9jYXRpb24sIHZhbHVlKScsXG4gICAgJ2J2ZWMzJzogICAgJ3VuaWZvcm0zaXYobG9jYXRpb24sIHZhbHVlKScsXG4gICAgJ2J2ZWM0JzogICAgJ3VuaWZvcm00aXYobG9jYXRpb24sIHZhbHVlKScsXG4gICBcbiAgICAnc2FtcGxlcjJEJzondW5pZm9ybTFpdihsb2NhdGlvbiwgdmFsdWUpJ1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGdlbmVyYXRlVW5pZm9ybUFjY2Vzc09iamVjdDtcblxuIiwiXG5cbnZhciBtYXBTaXplID0gZnVuY3Rpb24odHlwZSkgXG57IFxuICAgIHJldHVybiBHTFNMX1RPX1NJWkVbdHlwZV07XG59XG5cblxudmFyIEdMU0xfVE9fU0laRSA9IHtcbiAgICAnZmxvYXQnOiAgICAxLFxuICAgICd2ZWMyJzogICAgIDIsXG4gICAgJ3ZlYzMnOiAgICAgMyxcbiAgICAndmVjNCc6ICAgICA0LFxuXG4gICAgJ2ludCc6ICAgICAgMSxcbiAgICAnaXZlYzInOiAgICAyLFxuICAgICdpdmVjMyc6ICAgIDMsXG4gICAgJ2l2ZWM0JzogICAgNCxcblxuICAgICdib29sJzogICAgIDEsXG4gICAgJ2J2ZWMyJzogICAgMixcbiAgICAnYnZlYzMnOiAgICAzLFxuICAgICdidmVjNCc6ICAgIDQsXG5cbiAgICAnbWF0Mic6ICAgICA0LFxuICAgICdtYXQzJzogICAgIDksXG4gICAgJ21hdDQnOiAgICAgMTYsXG5cbiAgICAnc2FtcGxlcjJEJzogIDFcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBtYXBTaXplO1xuIiwiXG5cbnZhciBtYXBTaXplID0gZnVuY3Rpb24oZ2wsIHR5cGUpIFxue1xuICAgIGlmKCFHTF9UQUJMRSkgXG4gICAge1xuICAgICAgICB2YXIgdHlwZU5hbWVzID0gT2JqZWN0LmtleXMoR0xfVE9fR0xTTF9UWVBFUyk7XG5cbiAgICAgICAgR0xfVEFCTEUgPSB7fTtcblxuICAgICAgICBmb3IodmFyIGkgPSAwOyBpIDwgdHlwZU5hbWVzLmxlbmd0aDsgKytpKSBcbiAgICAgICAge1xuICAgICAgICAgICAgdmFyIHRuID0gdHlwZU5hbWVzW2ldO1xuICAgICAgICAgICAgR0xfVEFCTEVbIGdsW3RuXSBdID0gR0xfVE9fR0xTTF9UWVBFU1t0bl07XG4gICAgICAgIH1cbiAgICB9XG5cbiAgcmV0dXJuIEdMX1RBQkxFW3R5cGVdO1xufVxuXG52YXIgR0xfVEFCTEUgPSBudWxsO1xuXG52YXIgR0xfVE9fR0xTTF9UWVBFUyA9IHtcbiAgJ0ZMT0FUJzogICAgICAgJ2Zsb2F0JyxcbiAgJ0ZMT0FUX1ZFQzInOiAgJ3ZlYzInLFxuICAnRkxPQVRfVkVDMyc6ICAndmVjMycsXG4gICdGTE9BVF9WRUM0JzogICd2ZWM0JyxcblxuICAnSU5UJzogICAgICAgICAnaW50JyxcbiAgJ0lOVF9WRUMyJzogICAgJ2l2ZWMyJyxcbiAgJ0lOVF9WRUMzJzogICAgJ2l2ZWMzJyxcbiAgJ0lOVF9WRUM0JzogICAgJ2l2ZWM0JyxcbiAgXG4gICdCT09MJzogICAgICAgICdib29sJyxcbiAgJ0JPT0xfVkVDMic6ICAgJ2J2ZWMyJyxcbiAgJ0JPT0xfVkVDMyc6ICAgJ2J2ZWMzJyxcbiAgJ0JPT0xfVkVDNCc6ICAgJ2J2ZWM0JyxcbiAgXG4gICdGTE9BVF9NQVQyJzogICdtYXQyJyxcbiAgJ0ZMT0FUX01BVDMnOiAgJ21hdDMnLFxuICAnRkxPQVRfTUFUNCc6ICAnbWF0NCcsXG4gIFxuICAnU0FNUExFUl8yRCc6ICAnc2FtcGxlcjJEJyAgXG59XG5cbm1vZHVsZS5leHBvcnRzID0gbWFwU2l6ZTtcbiIsIi8qIVxuICogYXN5bmNcbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS9jYW9sYW4vYXN5bmNcbiAqXG4gKiBDb3B5cmlnaHQgMjAxMC0yMDE0IENhb2xhbiBNY01haG9uXG4gKiBSZWxlYXNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2VcbiAqL1xuKGZ1bmN0aW9uICgpIHtcblxuICAgIHZhciBhc3luYyA9IHt9O1xuICAgIGZ1bmN0aW9uIG5vb3AoKSB7fVxuICAgIGZ1bmN0aW9uIGlkZW50aXR5KHYpIHtcbiAgICAgICAgcmV0dXJuIHY7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHRvQm9vbCh2KSB7XG4gICAgICAgIHJldHVybiAhIXY7XG4gICAgfVxuICAgIGZ1bmN0aW9uIG5vdElkKHYpIHtcbiAgICAgICAgcmV0dXJuICF2O1xuICAgIH1cblxuICAgIC8vIGdsb2JhbCBvbiB0aGUgc2VydmVyLCB3aW5kb3cgaW4gdGhlIGJyb3dzZXJcbiAgICB2YXIgcHJldmlvdXNfYXN5bmM7XG5cbiAgICAvLyBFc3RhYmxpc2ggdGhlIHJvb3Qgb2JqZWN0LCBgd2luZG93YCAoYHNlbGZgKSBpbiB0aGUgYnJvd3NlciwgYGdsb2JhbGBcbiAgICAvLyBvbiB0aGUgc2VydmVyLCBvciBgdGhpc2AgaW4gc29tZSB2aXJ0dWFsIG1hY2hpbmVzLiBXZSB1c2UgYHNlbGZgXG4gICAgLy8gaW5zdGVhZCBvZiBgd2luZG93YCBmb3IgYFdlYldvcmtlcmAgc3VwcG9ydC5cbiAgICB2YXIgcm9vdCA9IHR5cGVvZiBzZWxmID09PSAnb2JqZWN0JyAmJiBzZWxmLnNlbGYgPT09IHNlbGYgJiYgc2VsZiB8fFxuICAgICAgICAgICAgdHlwZW9mIGdsb2JhbCA9PT0gJ29iamVjdCcgJiYgZ2xvYmFsLmdsb2JhbCA9PT0gZ2xvYmFsICYmIGdsb2JhbCB8fFxuICAgICAgICAgICAgdGhpcztcblxuICAgIGlmIChyb290ICE9IG51bGwpIHtcbiAgICAgICAgcHJldmlvdXNfYXN5bmMgPSByb290LmFzeW5jO1xuICAgIH1cblxuICAgIGFzeW5jLm5vQ29uZmxpY3QgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJvb3QuYXN5bmMgPSBwcmV2aW91c19hc3luYztcbiAgICAgICAgcmV0dXJuIGFzeW5jO1xuICAgIH07XG5cbiAgICBmdW5jdGlvbiBvbmx5X29uY2UoZm4pIHtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgaWYgKGZuID09PSBudWxsKSB0aHJvdyBuZXcgRXJyb3IoXCJDYWxsYmFjayB3YXMgYWxyZWFkeSBjYWxsZWQuXCIpO1xuICAgICAgICAgICAgZm4uYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICAgICAgICAgIGZuID0gbnVsbDtcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBfb25jZShmbikge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICBpZiAoZm4gPT09IG51bGwpIHJldHVybjtcbiAgICAgICAgICAgIGZuLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgICAgICAgICBmbiA9IG51bGw7XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgLy8vLyBjcm9zcy1icm93c2VyIGNvbXBhdGlibGl0eSBmdW5jdGlvbnMgLy8vL1xuXG4gICAgdmFyIF90b1N0cmluZyA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7XG5cbiAgICB2YXIgX2lzQXJyYXkgPSBBcnJheS5pc0FycmF5IHx8IGZ1bmN0aW9uIChvYmopIHtcbiAgICAgICAgcmV0dXJuIF90b1N0cmluZy5jYWxsKG9iaikgPT09ICdbb2JqZWN0IEFycmF5XSc7XG4gICAgfTtcblxuICAgIC8vIFBvcnRlZCBmcm9tIHVuZGVyc2NvcmUuanMgaXNPYmplY3RcbiAgICB2YXIgX2lzT2JqZWN0ID0gZnVuY3Rpb24ob2JqKSB7XG4gICAgICAgIHZhciB0eXBlID0gdHlwZW9mIG9iajtcbiAgICAgICAgcmV0dXJuIHR5cGUgPT09ICdmdW5jdGlvbicgfHwgdHlwZSA9PT0gJ29iamVjdCcgJiYgISFvYmo7XG4gICAgfTtcblxuICAgIGZ1bmN0aW9uIF9pc0FycmF5TGlrZShhcnIpIHtcbiAgICAgICAgcmV0dXJuIF9pc0FycmF5KGFycikgfHwgKFxuICAgICAgICAgICAgLy8gaGFzIGEgcG9zaXRpdmUgaW50ZWdlciBsZW5ndGggcHJvcGVydHlcbiAgICAgICAgICAgIHR5cGVvZiBhcnIubGVuZ3RoID09PSBcIm51bWJlclwiICYmXG4gICAgICAgICAgICBhcnIubGVuZ3RoID49IDAgJiZcbiAgICAgICAgICAgIGFyci5sZW5ndGggJSAxID09PSAwXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gX2FycmF5RWFjaChhcnIsIGl0ZXJhdG9yKSB7XG4gICAgICAgIHZhciBpbmRleCA9IC0xLFxuICAgICAgICAgICAgbGVuZ3RoID0gYXJyLmxlbmd0aDtcblxuICAgICAgICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgICAgICAgICAgaXRlcmF0b3IoYXJyW2luZGV4XSwgaW5kZXgsIGFycik7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBfbWFwKGFyciwgaXRlcmF0b3IpIHtcbiAgICAgICAgdmFyIGluZGV4ID0gLTEsXG4gICAgICAgICAgICBsZW5ndGggPSBhcnIubGVuZ3RoLFxuICAgICAgICAgICAgcmVzdWx0ID0gQXJyYXkobGVuZ3RoKTtcblxuICAgICAgICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgICAgICAgICAgcmVzdWx0W2luZGV4XSA9IGl0ZXJhdG9yKGFycltpbmRleF0sIGluZGV4LCBhcnIpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gX3JhbmdlKGNvdW50KSB7XG4gICAgICAgIHJldHVybiBfbWFwKEFycmF5KGNvdW50KSwgZnVuY3Rpb24gKHYsIGkpIHsgcmV0dXJuIGk7IH0pO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIF9yZWR1Y2UoYXJyLCBpdGVyYXRvciwgbWVtbykge1xuICAgICAgICBfYXJyYXlFYWNoKGFyciwgZnVuY3Rpb24gKHgsIGksIGEpIHtcbiAgICAgICAgICAgIG1lbW8gPSBpdGVyYXRvcihtZW1vLCB4LCBpLCBhKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBtZW1vO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIF9mb3JFYWNoT2Yob2JqZWN0LCBpdGVyYXRvcikge1xuICAgICAgICBfYXJyYXlFYWNoKF9rZXlzKG9iamVjdCksIGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgICAgIGl0ZXJhdG9yKG9iamVjdFtrZXldLCBrZXkpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBfaW5kZXhPZihhcnIsIGl0ZW0pIHtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcnIubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGlmIChhcnJbaV0gPT09IGl0ZW0pIHJldHVybiBpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiAtMTtcbiAgICB9XG5cbiAgICB2YXIgX2tleXMgPSBPYmplY3Qua2V5cyB8fCBmdW5jdGlvbiAob2JqKSB7XG4gICAgICAgIHZhciBrZXlzID0gW107XG4gICAgICAgIGZvciAodmFyIGsgaW4gb2JqKSB7XG4gICAgICAgICAgICBpZiAob2JqLmhhc093blByb3BlcnR5KGspKSB7XG4gICAgICAgICAgICAgICAga2V5cy5wdXNoKGspO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBrZXlzO1xuICAgIH07XG5cbiAgICBmdW5jdGlvbiBfa2V5SXRlcmF0b3IoY29sbCkge1xuICAgICAgICB2YXIgaSA9IC0xO1xuICAgICAgICB2YXIgbGVuO1xuICAgICAgICB2YXIga2V5cztcbiAgICAgICAgaWYgKF9pc0FycmF5TGlrZShjb2xsKSkge1xuICAgICAgICAgICAgbGVuID0gY29sbC5sZW5ndGg7XG4gICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24gbmV4dCgpIHtcbiAgICAgICAgICAgICAgICBpKys7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGkgPCBsZW4gPyBpIDogbnVsbDtcbiAgICAgICAgICAgIH07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBrZXlzID0gX2tleXMoY29sbCk7XG4gICAgICAgICAgICBsZW4gPSBrZXlzLmxlbmd0aDtcbiAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbiBuZXh0KCkge1xuICAgICAgICAgICAgICAgIGkrKztcbiAgICAgICAgICAgICAgICByZXR1cm4gaSA8IGxlbiA/IGtleXNbaV0gOiBudWxsO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIFNpbWlsYXIgdG8gRVM2J3MgcmVzdCBwYXJhbSAoaHR0cDovL2FyaXlhLm9maWxhYnMuY29tLzIwMTMvMDMvZXM2LWFuZC1yZXN0LXBhcmFtZXRlci5odG1sKVxuICAgIC8vIFRoaXMgYWNjdW11bGF0ZXMgdGhlIGFyZ3VtZW50cyBwYXNzZWQgaW50byBhbiBhcnJheSwgYWZ0ZXIgYSBnaXZlbiBpbmRleC5cbiAgICAvLyBGcm9tIHVuZGVyc2NvcmUuanMgKGh0dHBzOi8vZ2l0aHViLmNvbS9qYXNoa2VuYXMvdW5kZXJzY29yZS9wdWxsLzIxNDApLlxuICAgIGZ1bmN0aW9uIF9yZXN0UGFyYW0oZnVuYywgc3RhcnRJbmRleCkge1xuICAgICAgICBzdGFydEluZGV4ID0gc3RhcnRJbmRleCA9PSBudWxsID8gZnVuYy5sZW5ndGggLSAxIDogK3N0YXJ0SW5kZXg7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIHZhciBsZW5ndGggPSBNYXRoLm1heChhcmd1bWVudHMubGVuZ3RoIC0gc3RhcnRJbmRleCwgMCk7XG4gICAgICAgICAgICB2YXIgcmVzdCA9IEFycmF5KGxlbmd0aCk7XG4gICAgICAgICAgICBmb3IgKHZhciBpbmRleCA9IDA7IGluZGV4IDwgbGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgICAgICAgICAgICAgcmVzdFtpbmRleF0gPSBhcmd1bWVudHNbaW5kZXggKyBzdGFydEluZGV4XTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHN3aXRjaCAoc3RhcnRJbmRleCkge1xuICAgICAgICAgICAgICAgIGNhc2UgMDogcmV0dXJuIGZ1bmMuY2FsbCh0aGlzLCByZXN0KTtcbiAgICAgICAgICAgICAgICBjYXNlIDE6IHJldHVybiBmdW5jLmNhbGwodGhpcywgYXJndW1lbnRzWzBdLCByZXN0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIEN1cnJlbnRseSB1bnVzZWQgYnV0IGhhbmRsZSBjYXNlcyBvdXRzaWRlIG9mIHRoZSBzd2l0Y2ggc3RhdGVtZW50OlxuICAgICAgICAgICAgLy8gdmFyIGFyZ3MgPSBBcnJheShzdGFydEluZGV4ICsgMSk7XG4gICAgICAgICAgICAvLyBmb3IgKGluZGV4ID0gMDsgaW5kZXggPCBzdGFydEluZGV4OyBpbmRleCsrKSB7XG4gICAgICAgICAgICAvLyAgICAgYXJnc1tpbmRleF0gPSBhcmd1bWVudHNbaW5kZXhdO1xuICAgICAgICAgICAgLy8gfVxuICAgICAgICAgICAgLy8gYXJnc1tzdGFydEluZGV4XSA9IHJlc3Q7XG4gICAgICAgICAgICAvLyByZXR1cm4gZnVuYy5hcHBseSh0aGlzLCBhcmdzKTtcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBfd2l0aG91dEluZGV4KGl0ZXJhdG9yKSB7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAodmFsdWUsIGluZGV4LCBjYWxsYmFjaykge1xuICAgICAgICAgICAgcmV0dXJuIGl0ZXJhdG9yKHZhbHVlLCBjYWxsYmFjayk7XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgLy8vLyBleHBvcnRlZCBhc3luYyBtb2R1bGUgZnVuY3Rpb25zIC8vLy9cblxuICAgIC8vLy8gbmV4dFRpY2sgaW1wbGVtZW50YXRpb24gd2l0aCBicm93c2VyLWNvbXBhdGlibGUgZmFsbGJhY2sgLy8vL1xuXG4gICAgLy8gY2FwdHVyZSB0aGUgZ2xvYmFsIHJlZmVyZW5jZSB0byBndWFyZCBhZ2FpbnN0IGZha2VUaW1lciBtb2Nrc1xuICAgIHZhciBfc2V0SW1tZWRpYXRlID0gdHlwZW9mIHNldEltbWVkaWF0ZSA9PT0gJ2Z1bmN0aW9uJyAmJiBzZXRJbW1lZGlhdGU7XG5cbiAgICB2YXIgX2RlbGF5ID0gX3NldEltbWVkaWF0ZSA/IGZ1bmN0aW9uKGZuKSB7XG4gICAgICAgIC8vIG5vdCBhIGRpcmVjdCBhbGlhcyBmb3IgSUUxMCBjb21wYXRpYmlsaXR5XG4gICAgICAgIF9zZXRJbW1lZGlhdGUoZm4pO1xuICAgIH0gOiBmdW5jdGlvbihmbikge1xuICAgICAgICBzZXRUaW1lb3V0KGZuLCAwKTtcbiAgICB9O1xuXG4gICAgaWYgKHR5cGVvZiBwcm9jZXNzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgcHJvY2Vzcy5uZXh0VGljayA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBhc3luYy5uZXh0VGljayA9IHByb2Nlc3MubmV4dFRpY2s7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgYXN5bmMubmV4dFRpY2sgPSBfZGVsYXk7XG4gICAgfVxuICAgIGFzeW5jLnNldEltbWVkaWF0ZSA9IF9zZXRJbW1lZGlhdGUgPyBfZGVsYXkgOiBhc3luYy5uZXh0VGljaztcblxuXG4gICAgYXN5bmMuZm9yRWFjaCA9XG4gICAgYXN5bmMuZWFjaCA9IGZ1bmN0aW9uIChhcnIsIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICByZXR1cm4gYXN5bmMuZWFjaE9mKGFyciwgX3dpdGhvdXRJbmRleChpdGVyYXRvciksIGNhbGxiYWNrKTtcbiAgICB9O1xuXG4gICAgYXN5bmMuZm9yRWFjaFNlcmllcyA9XG4gICAgYXN5bmMuZWFjaFNlcmllcyA9IGZ1bmN0aW9uIChhcnIsIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICByZXR1cm4gYXN5bmMuZWFjaE9mU2VyaWVzKGFyciwgX3dpdGhvdXRJbmRleChpdGVyYXRvciksIGNhbGxiYWNrKTtcbiAgICB9O1xuXG5cbiAgICBhc3luYy5mb3JFYWNoTGltaXQgPVxuICAgIGFzeW5jLmVhY2hMaW1pdCA9IGZ1bmN0aW9uIChhcnIsIGxpbWl0LCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgcmV0dXJuIF9lYWNoT2ZMaW1pdChsaW1pdCkoYXJyLCBfd2l0aG91dEluZGV4KGl0ZXJhdG9yKSwgY2FsbGJhY2spO1xuICAgIH07XG5cbiAgICBhc3luYy5mb3JFYWNoT2YgPVxuICAgIGFzeW5jLmVhY2hPZiA9IGZ1bmN0aW9uIChvYmplY3QsIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICBjYWxsYmFjayA9IF9vbmNlKGNhbGxiYWNrIHx8IG5vb3ApO1xuICAgICAgICBvYmplY3QgPSBvYmplY3QgfHwgW107XG5cbiAgICAgICAgdmFyIGl0ZXIgPSBfa2V5SXRlcmF0b3Iob2JqZWN0KTtcbiAgICAgICAgdmFyIGtleSwgY29tcGxldGVkID0gMDtcblxuICAgICAgICB3aGlsZSAoKGtleSA9IGl0ZXIoKSkgIT0gbnVsbCkge1xuICAgICAgICAgICAgY29tcGxldGVkICs9IDE7XG4gICAgICAgICAgICBpdGVyYXRvcihvYmplY3Rba2V5XSwga2V5LCBvbmx5X29uY2UoZG9uZSkpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGNvbXBsZXRlZCA9PT0gMCkgY2FsbGJhY2sobnVsbCk7XG5cbiAgICAgICAgZnVuY3Rpb24gZG9uZShlcnIpIHtcbiAgICAgICAgICAgIGNvbXBsZXRlZC0tO1xuICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBDaGVjayBrZXkgaXMgbnVsbCBpbiBjYXNlIGl0ZXJhdG9yIGlzbid0IGV4aGF1c3RlZFxuICAgICAgICAgICAgLy8gYW5kIGRvbmUgcmVzb2x2ZWQgc3luY2hyb25vdXNseS5cbiAgICAgICAgICAgIGVsc2UgaWYgKGtleSA9PT0gbnVsbCAmJiBjb21wbGV0ZWQgPD0gMCkge1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrKG51bGwpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfTtcblxuICAgIGFzeW5jLmZvckVhY2hPZlNlcmllcyA9XG4gICAgYXN5bmMuZWFjaE9mU2VyaWVzID0gZnVuY3Rpb24gKG9iaiwgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgIGNhbGxiYWNrID0gX29uY2UoY2FsbGJhY2sgfHwgbm9vcCk7XG4gICAgICAgIG9iaiA9IG9iaiB8fCBbXTtcbiAgICAgICAgdmFyIG5leHRLZXkgPSBfa2V5SXRlcmF0b3Iob2JqKTtcbiAgICAgICAgdmFyIGtleSA9IG5leHRLZXkoKTtcbiAgICAgICAgZnVuY3Rpb24gaXRlcmF0ZSgpIHtcbiAgICAgICAgICAgIHZhciBzeW5jID0gdHJ1ZTtcbiAgICAgICAgICAgIGlmIChrZXkgPT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gY2FsbGJhY2sobnVsbCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpdGVyYXRvcihvYmpba2V5XSwga2V5LCBvbmx5X29uY2UoZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGtleSA9IG5leHRLZXkoKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGtleSA9PT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKG51bGwpO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN5bmMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhc3luYy5zZXRJbW1lZGlhdGUoaXRlcmF0ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZXJhdGUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgIHN5bmMgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBpdGVyYXRlKCk7XG4gICAgfTtcblxuXG5cbiAgICBhc3luYy5mb3JFYWNoT2ZMaW1pdCA9XG4gICAgYXN5bmMuZWFjaE9mTGltaXQgPSBmdW5jdGlvbiAob2JqLCBsaW1pdCwgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgIF9lYWNoT2ZMaW1pdChsaW1pdCkob2JqLCBpdGVyYXRvciwgY2FsbGJhY2spO1xuICAgIH07XG5cbiAgICBmdW5jdGlvbiBfZWFjaE9mTGltaXQobGltaXQpIHtcblxuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKG9iaiwgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICBjYWxsYmFjayA9IF9vbmNlKGNhbGxiYWNrIHx8IG5vb3ApO1xuICAgICAgICAgICAgb2JqID0gb2JqIHx8IFtdO1xuICAgICAgICAgICAgdmFyIG5leHRLZXkgPSBfa2V5SXRlcmF0b3Iob2JqKTtcbiAgICAgICAgICAgIGlmIChsaW1pdCA8PSAwKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKG51bGwpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdmFyIGRvbmUgPSBmYWxzZTtcbiAgICAgICAgICAgIHZhciBydW5uaW5nID0gMDtcbiAgICAgICAgICAgIHZhciBlcnJvcmVkID0gZmFsc2U7XG5cbiAgICAgICAgICAgIChmdW5jdGlvbiByZXBsZW5pc2ggKCkge1xuICAgICAgICAgICAgICAgIGlmIChkb25lICYmIHJ1bm5pbmcgPD0gMCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gY2FsbGJhY2sobnVsbCk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgd2hpbGUgKHJ1bm5pbmcgPCBsaW1pdCAmJiAhZXJyb3JlZCkge1xuICAgICAgICAgICAgICAgICAgICB2YXIga2V5ID0gbmV4dEtleSgpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoa2V5ID09PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBkb25lID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChydW5uaW5nIDw9IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhudWxsKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBydW5uaW5nICs9IDE7XG4gICAgICAgICAgICAgICAgICAgIGl0ZXJhdG9yKG9ialtrZXldLCBrZXksIG9ubHlfb25jZShmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBydW5uaW5nIC09IDE7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvcmVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcGxlbmlzaCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSkoKTtcbiAgICAgICAgfTtcbiAgICB9XG5cblxuICAgIGZ1bmN0aW9uIGRvUGFyYWxsZWwoZm4pIHtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChvYmosIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICAgICAgcmV0dXJuIGZuKGFzeW5jLmVhY2hPZiwgb2JqLCBpdGVyYXRvciwgY2FsbGJhY2spO1xuICAgICAgICB9O1xuICAgIH1cbiAgICBmdW5jdGlvbiBkb1BhcmFsbGVsTGltaXQoZm4pIHtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChvYmosIGxpbWl0LCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIHJldHVybiBmbihfZWFjaE9mTGltaXQobGltaXQpLCBvYmosIGl0ZXJhdG9yLCBjYWxsYmFjayk7XG4gICAgICAgIH07XG4gICAgfVxuICAgIGZ1bmN0aW9uIGRvU2VyaWVzKGZuKSB7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAob2JqLCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIHJldHVybiBmbihhc3luYy5lYWNoT2ZTZXJpZXMsIG9iaiwgaXRlcmF0b3IsIGNhbGxiYWNrKTtcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBfYXN5bmNNYXAoZWFjaGZuLCBhcnIsIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICBjYWxsYmFjayA9IF9vbmNlKGNhbGxiYWNrIHx8IG5vb3ApO1xuICAgICAgICBhcnIgPSBhcnIgfHwgW107XG4gICAgICAgIHZhciByZXN1bHRzID0gX2lzQXJyYXlMaWtlKGFycikgPyBbXSA6IHt9O1xuICAgICAgICBlYWNoZm4oYXJyLCBmdW5jdGlvbiAodmFsdWUsIGluZGV4LCBjYWxsYmFjaykge1xuICAgICAgICAgICAgaXRlcmF0b3IodmFsdWUsIGZ1bmN0aW9uIChlcnIsIHYpIHtcbiAgICAgICAgICAgICAgICByZXN1bHRzW2luZGV4XSA9IHY7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICBjYWxsYmFjayhlcnIsIHJlc3VsdHMpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBhc3luYy5tYXAgPSBkb1BhcmFsbGVsKF9hc3luY01hcCk7XG4gICAgYXN5bmMubWFwU2VyaWVzID0gZG9TZXJpZXMoX2FzeW5jTWFwKTtcbiAgICBhc3luYy5tYXBMaW1pdCA9IGRvUGFyYWxsZWxMaW1pdChfYXN5bmNNYXApO1xuXG4gICAgLy8gcmVkdWNlIG9ubHkgaGFzIGEgc2VyaWVzIHZlcnNpb24sIGFzIGRvaW5nIHJlZHVjZSBpbiBwYXJhbGxlbCB3b24ndFxuICAgIC8vIHdvcmsgaW4gbWFueSBzaXR1YXRpb25zLlxuICAgIGFzeW5jLmluamVjdCA9XG4gICAgYXN5bmMuZm9sZGwgPVxuICAgIGFzeW5jLnJlZHVjZSA9IGZ1bmN0aW9uIChhcnIsIG1lbW8sIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICBhc3luYy5lYWNoT2ZTZXJpZXMoYXJyLCBmdW5jdGlvbiAoeCwgaSwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIGl0ZXJhdG9yKG1lbW8sIHgsIGZ1bmN0aW9uIChlcnIsIHYpIHtcbiAgICAgICAgICAgICAgICBtZW1vID0gdjtcbiAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgIGNhbGxiYWNrKGVyciwgbWVtbyk7XG4gICAgICAgIH0pO1xuICAgIH07XG5cbiAgICBhc3luYy5mb2xkciA9XG4gICAgYXN5bmMucmVkdWNlUmlnaHQgPSBmdW5jdGlvbiAoYXJyLCBtZW1vLCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgdmFyIHJldmVyc2VkID0gX21hcChhcnIsIGlkZW50aXR5KS5yZXZlcnNlKCk7XG4gICAgICAgIGFzeW5jLnJlZHVjZShyZXZlcnNlZCwgbWVtbywgaXRlcmF0b3IsIGNhbGxiYWNrKTtcbiAgICB9O1xuXG4gICAgYXN5bmMudHJhbnNmb3JtID0gZnVuY3Rpb24gKGFyciwgbWVtbywgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAzKSB7XG4gICAgICAgICAgICBjYWxsYmFjayA9IGl0ZXJhdG9yO1xuICAgICAgICAgICAgaXRlcmF0b3IgPSBtZW1vO1xuICAgICAgICAgICAgbWVtbyA9IF9pc0FycmF5KGFycikgPyBbXSA6IHt9O1xuICAgICAgICB9XG5cbiAgICAgICAgYXN5bmMuZWFjaE9mKGFyciwgZnVuY3Rpb24odiwgaywgY2IpIHtcbiAgICAgICAgICAgIGl0ZXJhdG9yKG1lbW8sIHYsIGssIGNiKTtcbiAgICAgICAgfSwgZnVuY3Rpb24oZXJyKSB7XG4gICAgICAgICAgICBjYWxsYmFjayhlcnIsIG1lbW8pO1xuICAgICAgICB9KTtcbiAgICB9O1xuXG4gICAgZnVuY3Rpb24gX2ZpbHRlcihlYWNoZm4sIGFyciwgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgIHZhciByZXN1bHRzID0gW107XG4gICAgICAgIGVhY2hmbihhcnIsIGZ1bmN0aW9uICh4LCBpbmRleCwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIGl0ZXJhdG9yKHgsIGZ1bmN0aW9uICh2KSB7XG4gICAgICAgICAgICAgICAgaWYgKHYpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0cy5wdXNoKHtpbmRleDogaW5kZXgsIHZhbHVlOiB4fSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhbGxiYWNrKCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgY2FsbGJhY2soX21hcChyZXN1bHRzLnNvcnQoZnVuY3Rpb24gKGEsIGIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gYS5pbmRleCAtIGIuaW5kZXg7XG4gICAgICAgICAgICB9KSwgZnVuY3Rpb24gKHgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4geC52YWx1ZTtcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgYXN5bmMuc2VsZWN0ID1cbiAgICBhc3luYy5maWx0ZXIgPSBkb1BhcmFsbGVsKF9maWx0ZXIpO1xuXG4gICAgYXN5bmMuc2VsZWN0TGltaXQgPVxuICAgIGFzeW5jLmZpbHRlckxpbWl0ID0gZG9QYXJhbGxlbExpbWl0KF9maWx0ZXIpO1xuXG4gICAgYXN5bmMuc2VsZWN0U2VyaWVzID1cbiAgICBhc3luYy5maWx0ZXJTZXJpZXMgPSBkb1NlcmllcyhfZmlsdGVyKTtcblxuICAgIGZ1bmN0aW9uIF9yZWplY3QoZWFjaGZuLCBhcnIsIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICBfZmlsdGVyKGVhY2hmbiwgYXJyLCBmdW5jdGlvbih2YWx1ZSwgY2IpIHtcbiAgICAgICAgICAgIGl0ZXJhdG9yKHZhbHVlLCBmdW5jdGlvbih2KSB7XG4gICAgICAgICAgICAgICAgY2IoIXYpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sIGNhbGxiYWNrKTtcbiAgICB9XG4gICAgYXN5bmMucmVqZWN0ID0gZG9QYXJhbGxlbChfcmVqZWN0KTtcbiAgICBhc3luYy5yZWplY3RMaW1pdCA9IGRvUGFyYWxsZWxMaW1pdChfcmVqZWN0KTtcbiAgICBhc3luYy5yZWplY3RTZXJpZXMgPSBkb1NlcmllcyhfcmVqZWN0KTtcblxuICAgIGZ1bmN0aW9uIF9jcmVhdGVUZXN0ZXIoZWFjaGZuLCBjaGVjaywgZ2V0UmVzdWx0KSB7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbihhcnIsIGxpbWl0LCBpdGVyYXRvciwgY2IpIHtcbiAgICAgICAgICAgIGZ1bmN0aW9uIGRvbmUoKSB7XG4gICAgICAgICAgICAgICAgaWYgKGNiKSBjYihnZXRSZXN1bHQoZmFsc2UsIHZvaWQgMCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZnVuY3Rpb24gaXRlcmF0ZWUoeCwgXywgY2FsbGJhY2spIHtcbiAgICAgICAgICAgICAgICBpZiAoIWNiKSByZXR1cm4gY2FsbGJhY2soKTtcbiAgICAgICAgICAgICAgICBpdGVyYXRvcih4LCBmdW5jdGlvbiAodikge1xuICAgICAgICAgICAgICAgICAgICBpZiAoY2IgJiYgY2hlY2sodikpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNiKGdldFJlc3VsdCh0cnVlLCB4KSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBjYiA9IGl0ZXJhdG9yID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID4gMykge1xuICAgICAgICAgICAgICAgIGVhY2hmbihhcnIsIGxpbWl0LCBpdGVyYXRlZSwgZG9uZSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGNiID0gaXRlcmF0b3I7XG4gICAgICAgICAgICAgICAgaXRlcmF0b3IgPSBsaW1pdDtcbiAgICAgICAgICAgICAgICBlYWNoZm4oYXJyLCBpdGVyYXRlZSwgZG9uZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgYXN5bmMuYW55ID1cbiAgICBhc3luYy5zb21lID0gX2NyZWF0ZVRlc3Rlcihhc3luYy5lYWNoT2YsIHRvQm9vbCwgaWRlbnRpdHkpO1xuXG4gICAgYXN5bmMuc29tZUxpbWl0ID0gX2NyZWF0ZVRlc3Rlcihhc3luYy5lYWNoT2ZMaW1pdCwgdG9Cb29sLCBpZGVudGl0eSk7XG5cbiAgICBhc3luYy5hbGwgPVxuICAgIGFzeW5jLmV2ZXJ5ID0gX2NyZWF0ZVRlc3Rlcihhc3luYy5lYWNoT2YsIG5vdElkLCBub3RJZCk7XG5cbiAgICBhc3luYy5ldmVyeUxpbWl0ID0gX2NyZWF0ZVRlc3Rlcihhc3luYy5lYWNoT2ZMaW1pdCwgbm90SWQsIG5vdElkKTtcblxuICAgIGZ1bmN0aW9uIF9maW5kR2V0UmVzdWx0KHYsIHgpIHtcbiAgICAgICAgcmV0dXJuIHg7XG4gICAgfVxuICAgIGFzeW5jLmRldGVjdCA9IF9jcmVhdGVUZXN0ZXIoYXN5bmMuZWFjaE9mLCBpZGVudGl0eSwgX2ZpbmRHZXRSZXN1bHQpO1xuICAgIGFzeW5jLmRldGVjdFNlcmllcyA9IF9jcmVhdGVUZXN0ZXIoYXN5bmMuZWFjaE9mU2VyaWVzLCBpZGVudGl0eSwgX2ZpbmRHZXRSZXN1bHQpO1xuICAgIGFzeW5jLmRldGVjdExpbWl0ID0gX2NyZWF0ZVRlc3Rlcihhc3luYy5lYWNoT2ZMaW1pdCwgaWRlbnRpdHksIF9maW5kR2V0UmVzdWx0KTtcblxuICAgIGFzeW5jLnNvcnRCeSA9IGZ1bmN0aW9uIChhcnIsIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICBhc3luYy5tYXAoYXJyLCBmdW5jdGlvbiAoeCwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIGl0ZXJhdG9yKHgsIGZ1bmN0aW9uIChlcnIsIGNyaXRlcmlhKSB7XG4gICAgICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2sobnVsbCwge3ZhbHVlOiB4LCBjcml0ZXJpYTogY3JpdGVyaWF9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSwgZnVuY3Rpb24gKGVyciwgcmVzdWx0cykge1xuICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAgIHJldHVybiBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2sobnVsbCwgX21hcChyZXN1bHRzLnNvcnQoY29tcGFyYXRvciksIGZ1bmN0aW9uICh4KSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB4LnZhbHVlO1xuICAgICAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICB9KTtcblxuICAgICAgICBmdW5jdGlvbiBjb21wYXJhdG9yKGxlZnQsIHJpZ2h0KSB7XG4gICAgICAgICAgICB2YXIgYSA9IGxlZnQuY3JpdGVyaWEsIGIgPSByaWdodC5jcml0ZXJpYTtcbiAgICAgICAgICAgIHJldHVybiBhIDwgYiA/IC0xIDogYSA+IGIgPyAxIDogMDtcbiAgICAgICAgfVxuICAgIH07XG5cbiAgICBhc3luYy5hdXRvID0gZnVuY3Rpb24gKHRhc2tzLCBjb25jdXJyZW5jeSwgY2FsbGJhY2spIHtcbiAgICAgICAgaWYgKCFjYWxsYmFjaykge1xuICAgICAgICAgICAgLy8gY29uY3VycmVuY3kgaXMgb3B0aW9uYWwsIHNoaWZ0IHRoZSBhcmdzLlxuICAgICAgICAgICAgY2FsbGJhY2sgPSBjb25jdXJyZW5jeTtcbiAgICAgICAgICAgIGNvbmN1cnJlbmN5ID0gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBjYWxsYmFjayA9IF9vbmNlKGNhbGxiYWNrIHx8IG5vb3ApO1xuICAgICAgICB2YXIga2V5cyA9IF9rZXlzKHRhc2tzKTtcbiAgICAgICAgdmFyIHJlbWFpbmluZ1Rhc2tzID0ga2V5cy5sZW5ndGg7XG4gICAgICAgIGlmICghcmVtYWluaW5nVGFza3MpIHtcbiAgICAgICAgICAgIHJldHVybiBjYWxsYmFjayhudWxsKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWNvbmN1cnJlbmN5KSB7XG4gICAgICAgICAgICBjb25jdXJyZW5jeSA9IHJlbWFpbmluZ1Rhc2tzO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIHJlc3VsdHMgPSB7fTtcbiAgICAgICAgdmFyIHJ1bm5pbmdUYXNrcyA9IDA7XG5cbiAgICAgICAgdmFyIGxpc3RlbmVycyA9IFtdO1xuICAgICAgICBmdW5jdGlvbiBhZGRMaXN0ZW5lcihmbikge1xuICAgICAgICAgICAgbGlzdGVuZXJzLnVuc2hpZnQoZm4pO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIHJlbW92ZUxpc3RlbmVyKGZuKSB7XG4gICAgICAgICAgICB2YXIgaWR4ID0gX2luZGV4T2YobGlzdGVuZXJzLCBmbik7XG4gICAgICAgICAgICBpZiAoaWR4ID49IDApIGxpc3RlbmVycy5zcGxpY2UoaWR4LCAxKTtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiB0YXNrQ29tcGxldGUoKSB7XG4gICAgICAgICAgICByZW1haW5pbmdUYXNrcy0tO1xuICAgICAgICAgICAgX2FycmF5RWFjaChsaXN0ZW5lcnMuc2xpY2UoMCksIGZ1bmN0aW9uIChmbikge1xuICAgICAgICAgICAgICAgIGZuKCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGFkZExpc3RlbmVyKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGlmICghcmVtYWluaW5nVGFza3MpIHtcbiAgICAgICAgICAgICAgICBjYWxsYmFjayhudWxsLCByZXN1bHRzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgX2FycmF5RWFjaChrZXlzLCBmdW5jdGlvbiAoaykge1xuICAgICAgICAgICAgdmFyIHRhc2sgPSBfaXNBcnJheSh0YXNrc1trXSkgPyB0YXNrc1trXTogW3Rhc2tzW2tdXTtcbiAgICAgICAgICAgIHZhciB0YXNrQ2FsbGJhY2sgPSBfcmVzdFBhcmFtKGZ1bmN0aW9uKGVyciwgYXJncykge1xuICAgICAgICAgICAgICAgIHJ1bm5pbmdUYXNrcy0tO1xuICAgICAgICAgICAgICAgIGlmIChhcmdzLmxlbmd0aCA8PSAxKSB7XG4gICAgICAgICAgICAgICAgICAgIGFyZ3MgPSBhcmdzWzBdO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBzYWZlUmVzdWx0cyA9IHt9O1xuICAgICAgICAgICAgICAgICAgICBfZm9yRWFjaE9mKHJlc3VsdHMsIGZ1bmN0aW9uKHZhbCwgcmtleSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgc2FmZVJlc3VsdHNbcmtleV0gPSB2YWw7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICBzYWZlUmVzdWx0c1trXSA9IGFyZ3M7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKGVyciwgc2FmZVJlc3VsdHMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0c1trXSA9IGFyZ3M7XG4gICAgICAgICAgICAgICAgICAgIGFzeW5jLnNldEltbWVkaWF0ZSh0YXNrQ29tcGxldGUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdmFyIHJlcXVpcmVzID0gdGFzay5zbGljZSgwLCB0YXNrLmxlbmd0aCAtIDEpO1xuICAgICAgICAgICAgLy8gcHJldmVudCBkZWFkLWxvY2tzXG4gICAgICAgICAgICB2YXIgbGVuID0gcmVxdWlyZXMubGVuZ3RoO1xuICAgICAgICAgICAgdmFyIGRlcDtcbiAgICAgICAgICAgIHdoaWxlIChsZW4tLSkge1xuICAgICAgICAgICAgICAgIGlmICghKGRlcCA9IHRhc2tzW3JlcXVpcmVzW2xlbl1dKSkge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0hhcyBpbmV4aXN0YW50IGRlcGVuZGVuY3knKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKF9pc0FycmF5KGRlcCkgJiYgX2luZGV4T2YoZGVwLCBrKSA+PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignSGFzIGN5Y2xpYyBkZXBlbmRlbmNpZXMnKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmdW5jdGlvbiByZWFkeSgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcnVubmluZ1Rhc2tzIDwgY29uY3VycmVuY3kgJiYgX3JlZHVjZShyZXF1aXJlcywgZnVuY3Rpb24gKGEsIHgpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChhICYmIHJlc3VsdHMuaGFzT3duUHJvcGVydHkoeCkpO1xuICAgICAgICAgICAgICAgIH0sIHRydWUpICYmICFyZXN1bHRzLmhhc093blByb3BlcnR5KGspO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHJlYWR5KCkpIHtcbiAgICAgICAgICAgICAgICBydW5uaW5nVGFza3MrKztcbiAgICAgICAgICAgICAgICB0YXNrW3Rhc2subGVuZ3RoIC0gMV0odGFza0NhbGxiYWNrLCByZXN1bHRzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGFkZExpc3RlbmVyKGxpc3RlbmVyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZ1bmN0aW9uIGxpc3RlbmVyKCkge1xuICAgICAgICAgICAgICAgIGlmIChyZWFkeSgpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJ1bm5pbmdUYXNrcysrO1xuICAgICAgICAgICAgICAgICAgICByZW1vdmVMaXN0ZW5lcihsaXN0ZW5lcik7XG4gICAgICAgICAgICAgICAgICAgIHRhc2tbdGFzay5sZW5ndGggLSAxXSh0YXNrQ2FsbGJhY2ssIHJlc3VsdHMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfTtcblxuXG5cbiAgICBhc3luYy5yZXRyeSA9IGZ1bmN0aW9uKHRpbWVzLCB0YXNrLCBjYWxsYmFjaykge1xuICAgICAgICB2YXIgREVGQVVMVF9USU1FUyA9IDU7XG4gICAgICAgIHZhciBERUZBVUxUX0lOVEVSVkFMID0gMDtcblxuICAgICAgICB2YXIgYXR0ZW1wdHMgPSBbXTtcblxuICAgICAgICB2YXIgb3B0cyA9IHtcbiAgICAgICAgICAgIHRpbWVzOiBERUZBVUxUX1RJTUVTLFxuICAgICAgICAgICAgaW50ZXJ2YWw6IERFRkFVTFRfSU5URVJWQUxcbiAgICAgICAgfTtcblxuICAgICAgICBmdW5jdGlvbiBwYXJzZVRpbWVzKGFjYywgdCl7XG4gICAgICAgICAgICBpZih0eXBlb2YgdCA9PT0gJ251bWJlcicpe1xuICAgICAgICAgICAgICAgIGFjYy50aW1lcyA9IHBhcnNlSW50KHQsIDEwKSB8fCBERUZBVUxUX1RJTUVTO1xuICAgICAgICAgICAgfSBlbHNlIGlmKHR5cGVvZiB0ID09PSAnb2JqZWN0Jyl7XG4gICAgICAgICAgICAgICAgYWNjLnRpbWVzID0gcGFyc2VJbnQodC50aW1lcywgMTApIHx8IERFRkFVTFRfVElNRVM7XG4gICAgICAgICAgICAgICAgYWNjLmludGVydmFsID0gcGFyc2VJbnQodC5pbnRlcnZhbCwgMTApIHx8IERFRkFVTFRfSU5URVJWQUw7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignVW5zdXBwb3J0ZWQgYXJndW1lbnQgdHlwZSBmb3IgXFwndGltZXNcXCc6ICcgKyB0eXBlb2YgdCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgbGVuZ3RoID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgICAgICAgaWYgKGxlbmd0aCA8IDEgfHwgbGVuZ3RoID4gMykge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIGFyZ3VtZW50cyAtIG11c3QgYmUgZWl0aGVyICh0YXNrKSwgKHRhc2ssIGNhbGxiYWNrKSwgKHRpbWVzLCB0YXNrKSBvciAodGltZXMsIHRhc2ssIGNhbGxiYWNrKScpO1xuICAgICAgICB9IGVsc2UgaWYgKGxlbmd0aCA8PSAyICYmIHR5cGVvZiB0aW1lcyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgY2FsbGJhY2sgPSB0YXNrO1xuICAgICAgICAgICAgdGFzayA9IHRpbWVzO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0eXBlb2YgdGltZXMgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIHBhcnNlVGltZXMob3B0cywgdGltZXMpO1xuICAgICAgICB9XG4gICAgICAgIG9wdHMuY2FsbGJhY2sgPSBjYWxsYmFjaztcbiAgICAgICAgb3B0cy50YXNrID0gdGFzaztcblxuICAgICAgICBmdW5jdGlvbiB3cmFwcGVkVGFzayh3cmFwcGVkQ2FsbGJhY2ssIHdyYXBwZWRSZXN1bHRzKSB7XG4gICAgICAgICAgICBmdW5jdGlvbiByZXRyeUF0dGVtcHQodGFzaywgZmluYWxBdHRlbXB0KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKHNlcmllc0NhbGxiYWNrKSB7XG4gICAgICAgICAgICAgICAgICAgIHRhc2soZnVuY3Rpb24oZXJyLCByZXN1bHQpe1xuICAgICAgICAgICAgICAgICAgICAgICAgc2VyaWVzQ2FsbGJhY2soIWVyciB8fCBmaW5hbEF0dGVtcHQsIHtlcnI6IGVyciwgcmVzdWx0OiByZXN1bHR9KTtcbiAgICAgICAgICAgICAgICAgICAgfSwgd3JhcHBlZFJlc3VsdHMpO1xuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGZ1bmN0aW9uIHJldHJ5SW50ZXJ2YWwoaW50ZXJ2YWwpe1xuICAgICAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbihzZXJpZXNDYWxsYmFjayl7XG4gICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKXtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlcmllc0NhbGxiYWNrKG51bGwpO1xuICAgICAgICAgICAgICAgICAgICB9LCBpbnRlcnZhbCk7XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgd2hpbGUgKG9wdHMudGltZXMpIHtcblxuICAgICAgICAgICAgICAgIHZhciBmaW5hbEF0dGVtcHQgPSAhKG9wdHMudGltZXMtPTEpO1xuICAgICAgICAgICAgICAgIGF0dGVtcHRzLnB1c2gocmV0cnlBdHRlbXB0KG9wdHMudGFzaywgZmluYWxBdHRlbXB0KSk7XG4gICAgICAgICAgICAgICAgaWYoIWZpbmFsQXR0ZW1wdCAmJiBvcHRzLmludGVydmFsID4gMCl7XG4gICAgICAgICAgICAgICAgICAgIGF0dGVtcHRzLnB1c2gocmV0cnlJbnRlcnZhbChvcHRzLmludGVydmFsKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBhc3luYy5zZXJpZXMoYXR0ZW1wdHMsIGZ1bmN0aW9uKGRvbmUsIGRhdGEpe1xuICAgICAgICAgICAgICAgIGRhdGEgPSBkYXRhW2RhdGEubGVuZ3RoIC0gMV07XG4gICAgICAgICAgICAgICAgKHdyYXBwZWRDYWxsYmFjayB8fCBvcHRzLmNhbGxiYWNrKShkYXRhLmVyciwgZGF0YS5yZXN1bHQpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBJZiBhIGNhbGxiYWNrIGlzIHBhc3NlZCwgcnVuIHRoaXMgYXMgYSBjb250cm9sbCBmbG93XG4gICAgICAgIHJldHVybiBvcHRzLmNhbGxiYWNrID8gd3JhcHBlZFRhc2soKSA6IHdyYXBwZWRUYXNrO1xuICAgIH07XG5cbiAgICBhc3luYy53YXRlcmZhbGwgPSBmdW5jdGlvbiAodGFza3MsIGNhbGxiYWNrKSB7XG4gICAgICAgIGNhbGxiYWNrID0gX29uY2UoY2FsbGJhY2sgfHwgbm9vcCk7XG4gICAgICAgIGlmICghX2lzQXJyYXkodGFza3MpKSB7XG4gICAgICAgICAgICB2YXIgZXJyID0gbmV3IEVycm9yKCdGaXJzdCBhcmd1bWVudCB0byB3YXRlcmZhbGwgbXVzdCBiZSBhbiBhcnJheSBvZiBmdW5jdGlvbnMnKTtcbiAgICAgICAgICAgIHJldHVybiBjYWxsYmFjayhlcnIpO1xuICAgICAgICB9XG4gICAgICAgIGlmICghdGFza3MubGVuZ3RoKSB7XG4gICAgICAgICAgICByZXR1cm4gY2FsbGJhY2soKTtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiB3cmFwSXRlcmF0b3IoaXRlcmF0b3IpIHtcbiAgICAgICAgICAgIHJldHVybiBfcmVzdFBhcmFtKGZ1bmN0aW9uIChlcnIsIGFyZ3MpIHtcbiAgICAgICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrLmFwcGx5KG51bGwsIFtlcnJdLmNvbmNhdChhcmdzKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB2YXIgbmV4dCA9IGl0ZXJhdG9yLm5leHQoKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKG5leHQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3MucHVzaCh3cmFwSXRlcmF0b3IobmV4dCkpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgYXJncy5wdXNoKGNhbGxiYWNrKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbnN1cmVBc3luYyhpdGVyYXRvcikuYXBwbHkobnVsbCwgYXJncyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgd3JhcEl0ZXJhdG9yKGFzeW5jLml0ZXJhdG9yKHRhc2tzKSkoKTtcbiAgICB9O1xuXG4gICAgZnVuY3Rpb24gX3BhcmFsbGVsKGVhY2hmbiwgdGFza3MsIGNhbGxiYWNrKSB7XG4gICAgICAgIGNhbGxiYWNrID0gY2FsbGJhY2sgfHwgbm9vcDtcbiAgICAgICAgdmFyIHJlc3VsdHMgPSBfaXNBcnJheUxpa2UodGFza3MpID8gW10gOiB7fTtcblxuICAgICAgICBlYWNoZm4odGFza3MsIGZ1bmN0aW9uICh0YXNrLCBrZXksIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICB0YXNrKF9yZXN0UGFyYW0oZnVuY3Rpb24gKGVyciwgYXJncykge1xuICAgICAgICAgICAgICAgIGlmIChhcmdzLmxlbmd0aCA8PSAxKSB7XG4gICAgICAgICAgICAgICAgICAgIGFyZ3MgPSBhcmdzWzBdO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXN1bHRzW2tleV0gPSBhcmdzO1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgICB9KSk7XG4gICAgICAgIH0sIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgIGNhbGxiYWNrKGVyciwgcmVzdWx0cyk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGFzeW5jLnBhcmFsbGVsID0gZnVuY3Rpb24gKHRhc2tzLCBjYWxsYmFjaykge1xuICAgICAgICBfcGFyYWxsZWwoYXN5bmMuZWFjaE9mLCB0YXNrcywgY2FsbGJhY2spO1xuICAgIH07XG5cbiAgICBhc3luYy5wYXJhbGxlbExpbWl0ID0gZnVuY3Rpb24odGFza3MsIGxpbWl0LCBjYWxsYmFjaykge1xuICAgICAgICBfcGFyYWxsZWwoX2VhY2hPZkxpbWl0KGxpbWl0KSwgdGFza3MsIGNhbGxiYWNrKTtcbiAgICB9O1xuXG4gICAgYXN5bmMuc2VyaWVzID0gZnVuY3Rpb24odGFza3MsIGNhbGxiYWNrKSB7XG4gICAgICAgIF9wYXJhbGxlbChhc3luYy5lYWNoT2ZTZXJpZXMsIHRhc2tzLCBjYWxsYmFjayk7XG4gICAgfTtcblxuICAgIGFzeW5jLml0ZXJhdG9yID0gZnVuY3Rpb24gKHRhc2tzKSB7XG4gICAgICAgIGZ1bmN0aW9uIG1ha2VDYWxsYmFjayhpbmRleCkge1xuICAgICAgICAgICAgZnVuY3Rpb24gZm4oKSB7XG4gICAgICAgICAgICAgICAgaWYgKHRhc2tzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICB0YXNrc1tpbmRleF0uYXBwbHkobnVsbCwgYXJndW1lbnRzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZuLm5leHQoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZuLm5leHQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIChpbmRleCA8IHRhc2tzLmxlbmd0aCAtIDEpID8gbWFrZUNhbGxiYWNrKGluZGV4ICsgMSk6IG51bGw7XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgcmV0dXJuIGZuO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBtYWtlQ2FsbGJhY2soMCk7XG4gICAgfTtcblxuICAgIGFzeW5jLmFwcGx5ID0gX3Jlc3RQYXJhbShmdW5jdGlvbiAoZm4sIGFyZ3MpIHtcbiAgICAgICAgcmV0dXJuIF9yZXN0UGFyYW0oZnVuY3Rpb24gKGNhbGxBcmdzKSB7XG4gICAgICAgICAgICByZXR1cm4gZm4uYXBwbHkoXG4gICAgICAgICAgICAgICAgbnVsbCwgYXJncy5jb25jYXQoY2FsbEFyZ3MpXG4gICAgICAgICAgICApO1xuICAgICAgICB9KTtcbiAgICB9KTtcblxuICAgIGZ1bmN0aW9uIF9jb25jYXQoZWFjaGZuLCBhcnIsIGZuLCBjYWxsYmFjaykge1xuICAgICAgICB2YXIgcmVzdWx0ID0gW107XG4gICAgICAgIGVhY2hmbihhcnIsIGZ1bmN0aW9uICh4LCBpbmRleCwgY2IpIHtcbiAgICAgICAgICAgIGZuKHgsIGZ1bmN0aW9uIChlcnIsIHkpIHtcbiAgICAgICAgICAgICAgICByZXN1bHQgPSByZXN1bHQuY29uY2F0KHkgfHwgW10pO1xuICAgICAgICAgICAgICAgIGNiKGVycik7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSwgZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgY2FsbGJhY2soZXJyLCByZXN1bHQpO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgYXN5bmMuY29uY2F0ID0gZG9QYXJhbGxlbChfY29uY2F0KTtcbiAgICBhc3luYy5jb25jYXRTZXJpZXMgPSBkb1NlcmllcyhfY29uY2F0KTtcblxuICAgIGFzeW5jLndoaWxzdCA9IGZ1bmN0aW9uICh0ZXN0LCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgY2FsbGJhY2sgPSBjYWxsYmFjayB8fCBub29wO1xuICAgICAgICBpZiAodGVzdCgpKSB7XG4gICAgICAgICAgICB2YXIgbmV4dCA9IF9yZXN0UGFyYW0oZnVuY3Rpb24oZXJyLCBhcmdzKSB7XG4gICAgICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodGVzdC5hcHBseSh0aGlzLCBhcmdzKSkge1xuICAgICAgICAgICAgICAgICAgICBpdGVyYXRvcihuZXh0KTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhudWxsKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGl0ZXJhdG9yKG5leHQpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY2FsbGJhY2sobnVsbCk7XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgYXN5bmMuZG9XaGlsc3QgPSBmdW5jdGlvbiAoaXRlcmF0b3IsIHRlc3QsIGNhbGxiYWNrKSB7XG4gICAgICAgIHZhciBjYWxscyA9IDA7XG4gICAgICAgIHJldHVybiBhc3luYy53aGlsc3QoZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICByZXR1cm4gKytjYWxscyA8PSAxIHx8IHRlc3QuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICAgICAgfSwgaXRlcmF0b3IsIGNhbGxiYWNrKTtcbiAgICB9O1xuXG4gICAgYXN5bmMudW50aWwgPSBmdW5jdGlvbiAodGVzdCwgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgIHJldHVybiBhc3luYy53aGlsc3QoZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICByZXR1cm4gIXRlc3QuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICAgICAgfSwgaXRlcmF0b3IsIGNhbGxiYWNrKTtcbiAgICB9O1xuXG4gICAgYXN5bmMuZG9VbnRpbCA9IGZ1bmN0aW9uIChpdGVyYXRvciwgdGVzdCwgY2FsbGJhY2spIHtcbiAgICAgICAgcmV0dXJuIGFzeW5jLmRvV2hpbHN0KGl0ZXJhdG9yLCBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIHJldHVybiAhdGVzdC5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgICAgICB9LCBjYWxsYmFjayk7XG4gICAgfTtcblxuICAgIGFzeW5jLmR1cmluZyA9IGZ1bmN0aW9uICh0ZXN0LCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgY2FsbGJhY2sgPSBjYWxsYmFjayB8fCBub29wO1xuXG4gICAgICAgIHZhciBuZXh0ID0gX3Jlc3RQYXJhbShmdW5jdGlvbihlcnIsIGFyZ3MpIHtcbiAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBhcmdzLnB1c2goY2hlY2spO1xuICAgICAgICAgICAgICAgIHRlc3QuYXBwbHkodGhpcywgYXJncyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHZhciBjaGVjayA9IGZ1bmN0aW9uKGVyciwgdHJ1dGgpIHtcbiAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh0cnV0aCkge1xuICAgICAgICAgICAgICAgIGl0ZXJhdG9yKG5leHQpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBjYWxsYmFjayhudWxsKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcblxuICAgICAgICB0ZXN0KGNoZWNrKTtcbiAgICB9O1xuXG4gICAgYXN5bmMuZG9EdXJpbmcgPSBmdW5jdGlvbiAoaXRlcmF0b3IsIHRlc3QsIGNhbGxiYWNrKSB7XG4gICAgICAgIHZhciBjYWxscyA9IDA7XG4gICAgICAgIGFzeW5jLmR1cmluZyhmdW5jdGlvbihuZXh0KSB7XG4gICAgICAgICAgICBpZiAoY2FsbHMrKyA8IDEpIHtcbiAgICAgICAgICAgICAgICBuZXh0KG51bGwsIHRydWUpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0ZXN0LmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sIGl0ZXJhdG9yLCBjYWxsYmFjayk7XG4gICAgfTtcblxuICAgIGZ1bmN0aW9uIF9xdWV1ZSh3b3JrZXIsIGNvbmN1cnJlbmN5LCBwYXlsb2FkKSB7XG4gICAgICAgIGlmIChjb25jdXJyZW5jeSA9PSBudWxsKSB7XG4gICAgICAgICAgICBjb25jdXJyZW5jeSA9IDE7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZihjb25jdXJyZW5jeSA9PT0gMCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdDb25jdXJyZW5jeSBtdXN0IG5vdCBiZSB6ZXJvJyk7XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gX2luc2VydChxLCBkYXRhLCBwb3MsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICBpZiAoY2FsbGJhY2sgIT0gbnVsbCAmJiB0eXBlb2YgY2FsbGJhY2sgIT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcInRhc2sgY2FsbGJhY2sgbXVzdCBiZSBhIGZ1bmN0aW9uXCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcS5zdGFydGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIGlmICghX2lzQXJyYXkoZGF0YSkpIHtcbiAgICAgICAgICAgICAgICBkYXRhID0gW2RhdGFdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYoZGF0YS5sZW5ndGggPT09IDAgJiYgcS5pZGxlKCkpIHtcbiAgICAgICAgICAgICAgICAvLyBjYWxsIGRyYWluIGltbWVkaWF0ZWx5IGlmIHRoZXJlIGFyZSBubyB0YXNrc1xuICAgICAgICAgICAgICAgIHJldHVybiBhc3luYy5zZXRJbW1lZGlhdGUoZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgICAgIHEuZHJhaW4oKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIF9hcnJheUVhY2goZGF0YSwgZnVuY3Rpb24odGFzaykge1xuICAgICAgICAgICAgICAgIHZhciBpdGVtID0ge1xuICAgICAgICAgICAgICAgICAgICBkYXRhOiB0YXNrLFxuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjazogY2FsbGJhY2sgfHwgbm9vcFxuICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICBpZiAocG9zKSB7XG4gICAgICAgICAgICAgICAgICAgIHEudGFza3MudW5zaGlmdChpdGVtKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBxLnRhc2tzLnB1c2goaXRlbSk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKHEudGFza3MubGVuZ3RoID09PSBxLmNvbmN1cnJlbmN5KSB7XG4gICAgICAgICAgICAgICAgICAgIHEuc2F0dXJhdGVkKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBhc3luYy5zZXRJbW1lZGlhdGUocS5wcm9jZXNzKTtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBfbmV4dChxLCB0YXNrcykge1xuICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKCl7XG4gICAgICAgICAgICAgICAgd29ya2VycyAtPSAxO1xuXG4gICAgICAgICAgICAgICAgdmFyIHJlbW92ZWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB2YXIgYXJncyA9IGFyZ3VtZW50cztcbiAgICAgICAgICAgICAgICBfYXJyYXlFYWNoKHRhc2tzLCBmdW5jdGlvbiAodGFzaykge1xuICAgICAgICAgICAgICAgICAgICBfYXJyYXlFYWNoKHdvcmtlcnNMaXN0LCBmdW5jdGlvbiAod29ya2VyLCBpbmRleCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHdvcmtlciA9PT0gdGFzayAmJiAhcmVtb3ZlZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdvcmtlcnNMaXN0LnNwbGljZShpbmRleCwgMSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVtb3ZlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgICAgIHRhc2suY2FsbGJhY2suYXBwbHkodGFzaywgYXJncyk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgaWYgKHEudGFza3MubGVuZ3RoICsgd29ya2VycyA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICBxLmRyYWluKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHEucHJvY2VzcygpO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciB3b3JrZXJzID0gMDtcbiAgICAgICAgdmFyIHdvcmtlcnNMaXN0ID0gW107XG4gICAgICAgIHZhciBxID0ge1xuICAgICAgICAgICAgdGFza3M6IFtdLFxuICAgICAgICAgICAgY29uY3VycmVuY3k6IGNvbmN1cnJlbmN5LFxuICAgICAgICAgICAgcGF5bG9hZDogcGF5bG9hZCxcbiAgICAgICAgICAgIHNhdHVyYXRlZDogbm9vcCxcbiAgICAgICAgICAgIGVtcHR5OiBub29wLFxuICAgICAgICAgICAgZHJhaW46IG5vb3AsXG4gICAgICAgICAgICBzdGFydGVkOiBmYWxzZSxcbiAgICAgICAgICAgIHBhdXNlZDogZmFsc2UsXG4gICAgICAgICAgICBwdXNoOiBmdW5jdGlvbiAoZGF0YSwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgICAgICBfaW5zZXJ0KHEsIGRhdGEsIGZhbHNlLCBjYWxsYmFjayk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAga2lsbDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHEuZHJhaW4gPSBub29wO1xuICAgICAgICAgICAgICAgIHEudGFza3MgPSBbXTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB1bnNoaWZ0OiBmdW5jdGlvbiAoZGF0YSwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgICAgICBfaW5zZXJ0KHEsIGRhdGEsIHRydWUsIGNhbGxiYWNrKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBwcm9jZXNzOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgaWYgKCFxLnBhdXNlZCAmJiB3b3JrZXJzIDwgcS5jb25jdXJyZW5jeSAmJiBxLnRhc2tzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICB3aGlsZSh3b3JrZXJzIDwgcS5jb25jdXJyZW5jeSAmJiBxLnRhc2tzLmxlbmd0aCl7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgdGFza3MgPSBxLnBheWxvYWQgP1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHEudGFza3Muc3BsaWNlKDAsIHEucGF5bG9hZCkgOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHEudGFza3Muc3BsaWNlKDAsIHEudGFza3MubGVuZ3RoKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGRhdGEgPSBfbWFwKHRhc2tzLCBmdW5jdGlvbiAodGFzaykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0YXNrLmRhdGE7XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHEudGFza3MubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcS5lbXB0eSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgd29ya2VycyArPSAxO1xuICAgICAgICAgICAgICAgICAgICAgICAgd29ya2Vyc0xpc3QucHVzaCh0YXNrc1swXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgY2IgPSBvbmx5X29uY2UoX25leHQocSwgdGFza3MpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHdvcmtlcihkYXRhLCBjYik7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbGVuZ3RoOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHEudGFza3MubGVuZ3RoO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHJ1bm5pbmc6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gd29ya2VycztcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB3b3JrZXJzTGlzdDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB3b3JrZXJzTGlzdDtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBpZGxlOiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcS50YXNrcy5sZW5ndGggKyB3b3JrZXJzID09PSAwO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHBhdXNlOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgcS5wYXVzZWQgPSB0cnVlO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHJlc3VtZTogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGlmIChxLnBhdXNlZCA9PT0gZmFsc2UpIHsgcmV0dXJuOyB9XG4gICAgICAgICAgICAgICAgcS5wYXVzZWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB2YXIgcmVzdW1lQ291bnQgPSBNYXRoLm1pbihxLmNvbmN1cnJlbmN5LCBxLnRhc2tzLmxlbmd0aCk7XG4gICAgICAgICAgICAgICAgLy8gTmVlZCB0byBjYWxsIHEucHJvY2VzcyBvbmNlIHBlciBjb25jdXJyZW50XG4gICAgICAgICAgICAgICAgLy8gd29ya2VyIHRvIHByZXNlcnZlIGZ1bGwgY29uY3VycmVuY3kgYWZ0ZXIgcGF1c2VcbiAgICAgICAgICAgICAgICBmb3IgKHZhciB3ID0gMTsgdyA8PSByZXN1bWVDb3VudDsgdysrKSB7XG4gICAgICAgICAgICAgICAgICAgIGFzeW5jLnNldEltbWVkaWF0ZShxLnByb2Nlc3MpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIHE7XG4gICAgfVxuXG4gICAgYXN5bmMucXVldWUgPSBmdW5jdGlvbiAod29ya2VyLCBjb25jdXJyZW5jeSkge1xuICAgICAgICB2YXIgcSA9IF9xdWV1ZShmdW5jdGlvbiAoaXRlbXMsIGNiKSB7XG4gICAgICAgICAgICB3b3JrZXIoaXRlbXNbMF0sIGNiKTtcbiAgICAgICAgfSwgY29uY3VycmVuY3ksIDEpO1xuXG4gICAgICAgIHJldHVybiBxO1xuICAgIH07XG5cbiAgICBhc3luYy5wcmlvcml0eVF1ZXVlID0gZnVuY3Rpb24gKHdvcmtlciwgY29uY3VycmVuY3kpIHtcblxuICAgICAgICBmdW5jdGlvbiBfY29tcGFyZVRhc2tzKGEsIGIpe1xuICAgICAgICAgICAgcmV0dXJuIGEucHJpb3JpdHkgLSBiLnByaW9yaXR5O1xuICAgICAgICB9XG5cbiAgICAgICAgZnVuY3Rpb24gX2JpbmFyeVNlYXJjaChzZXF1ZW5jZSwgaXRlbSwgY29tcGFyZSkge1xuICAgICAgICAgICAgdmFyIGJlZyA9IC0xLFxuICAgICAgICAgICAgICAgIGVuZCA9IHNlcXVlbmNlLmxlbmd0aCAtIDE7XG4gICAgICAgICAgICB3aGlsZSAoYmVnIDwgZW5kKSB7XG4gICAgICAgICAgICAgICAgdmFyIG1pZCA9IGJlZyArICgoZW5kIC0gYmVnICsgMSkgPj4+IDEpO1xuICAgICAgICAgICAgICAgIGlmIChjb21wYXJlKGl0ZW0sIHNlcXVlbmNlW21pZF0pID49IDApIHtcbiAgICAgICAgICAgICAgICAgICAgYmVnID0gbWlkO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGVuZCA9IG1pZCAtIDE7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGJlZztcbiAgICAgICAgfVxuXG4gICAgICAgIGZ1bmN0aW9uIF9pbnNlcnQocSwgZGF0YSwgcHJpb3JpdHksIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICBpZiAoY2FsbGJhY2sgIT0gbnVsbCAmJiB0eXBlb2YgY2FsbGJhY2sgIT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcInRhc2sgY2FsbGJhY2sgbXVzdCBiZSBhIGZ1bmN0aW9uXCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcS5zdGFydGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIGlmICghX2lzQXJyYXkoZGF0YSkpIHtcbiAgICAgICAgICAgICAgICBkYXRhID0gW2RhdGFdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYoZGF0YS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgICAvLyBjYWxsIGRyYWluIGltbWVkaWF0ZWx5IGlmIHRoZXJlIGFyZSBubyB0YXNrc1xuICAgICAgICAgICAgICAgIHJldHVybiBhc3luYy5zZXRJbW1lZGlhdGUoZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgICAgIHEuZHJhaW4oKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIF9hcnJheUVhY2goZGF0YSwgZnVuY3Rpb24odGFzaykge1xuICAgICAgICAgICAgICAgIHZhciBpdGVtID0ge1xuICAgICAgICAgICAgICAgICAgICBkYXRhOiB0YXNrLFxuICAgICAgICAgICAgICAgICAgICBwcmlvcml0eTogcHJpb3JpdHksXG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrOiB0eXBlb2YgY2FsbGJhY2sgPT09ICdmdW5jdGlvbicgPyBjYWxsYmFjayA6IG5vb3BcbiAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgcS50YXNrcy5zcGxpY2UoX2JpbmFyeVNlYXJjaChxLnRhc2tzLCBpdGVtLCBfY29tcGFyZVRhc2tzKSArIDEsIDAsIGl0ZW0pO1xuXG4gICAgICAgICAgICAgICAgaWYgKHEudGFza3MubGVuZ3RoID09PSBxLmNvbmN1cnJlbmN5KSB7XG4gICAgICAgICAgICAgICAgICAgIHEuc2F0dXJhdGVkKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGFzeW5jLnNldEltbWVkaWF0ZShxLnByb2Nlc3MpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBTdGFydCB3aXRoIGEgbm9ybWFsIHF1ZXVlXG4gICAgICAgIHZhciBxID0gYXN5bmMucXVldWUod29ya2VyLCBjb25jdXJyZW5jeSk7XG5cbiAgICAgICAgLy8gT3ZlcnJpZGUgcHVzaCB0byBhY2NlcHQgc2Vjb25kIHBhcmFtZXRlciByZXByZXNlbnRpbmcgcHJpb3JpdHlcbiAgICAgICAgcS5wdXNoID0gZnVuY3Rpb24gKGRhdGEsIHByaW9yaXR5LCBjYWxsYmFjaykge1xuICAgICAgICAgICAgX2luc2VydChxLCBkYXRhLCBwcmlvcml0eSwgY2FsbGJhY2spO1xuICAgICAgICB9O1xuXG4gICAgICAgIC8vIFJlbW92ZSB1bnNoaWZ0IGZ1bmN0aW9uXG4gICAgICAgIGRlbGV0ZSBxLnVuc2hpZnQ7XG5cbiAgICAgICAgcmV0dXJuIHE7XG4gICAgfTtcblxuICAgIGFzeW5jLmNhcmdvID0gZnVuY3Rpb24gKHdvcmtlciwgcGF5bG9hZCkge1xuICAgICAgICByZXR1cm4gX3F1ZXVlKHdvcmtlciwgMSwgcGF5bG9hZCk7XG4gICAgfTtcblxuICAgIGZ1bmN0aW9uIF9jb25zb2xlX2ZuKG5hbWUpIHtcbiAgICAgICAgcmV0dXJuIF9yZXN0UGFyYW0oZnVuY3Rpb24gKGZuLCBhcmdzKSB7XG4gICAgICAgICAgICBmbi5hcHBseShudWxsLCBhcmdzLmNvbmNhdChbX3Jlc3RQYXJhbShmdW5jdGlvbiAoZXJyLCBhcmdzKSB7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBjb25zb2xlID09PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoY29uc29sZS5lcnJvcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChjb25zb2xlW25hbWVdKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBfYXJyYXlFYWNoKGFyZ3MsIGZ1bmN0aW9uICh4KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZVtuYW1lXSh4KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSldKSk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBhc3luYy5sb2cgPSBfY29uc29sZV9mbignbG9nJyk7XG4gICAgYXN5bmMuZGlyID0gX2NvbnNvbGVfZm4oJ2RpcicpO1xuICAgIC8qYXN5bmMuaW5mbyA9IF9jb25zb2xlX2ZuKCdpbmZvJyk7XG4gICAgYXN5bmMud2FybiA9IF9jb25zb2xlX2ZuKCd3YXJuJyk7XG4gICAgYXN5bmMuZXJyb3IgPSBfY29uc29sZV9mbignZXJyb3InKTsqL1xuXG4gICAgYXN5bmMubWVtb2l6ZSA9IGZ1bmN0aW9uIChmbiwgaGFzaGVyKSB7XG4gICAgICAgIHZhciBtZW1vID0ge307XG4gICAgICAgIHZhciBxdWV1ZXMgPSB7fTtcbiAgICAgICAgaGFzaGVyID0gaGFzaGVyIHx8IGlkZW50aXR5O1xuICAgICAgICB2YXIgbWVtb2l6ZWQgPSBfcmVzdFBhcmFtKGZ1bmN0aW9uIG1lbW9pemVkKGFyZ3MpIHtcbiAgICAgICAgICAgIHZhciBjYWxsYmFjayA9IGFyZ3MucG9wKCk7XG4gICAgICAgICAgICB2YXIga2V5ID0gaGFzaGVyLmFwcGx5KG51bGwsIGFyZ3MpO1xuICAgICAgICAgICAgaWYgKGtleSBpbiBtZW1vKSB7XG4gICAgICAgICAgICAgICAgYXN5bmMuc2V0SW1tZWRpYXRlKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2suYXBwbHkobnVsbCwgbWVtb1trZXldKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGtleSBpbiBxdWV1ZXMpIHtcbiAgICAgICAgICAgICAgICBxdWV1ZXNba2V5XS5wdXNoKGNhbGxiYWNrKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHF1ZXVlc1trZXldID0gW2NhbGxiYWNrXTtcbiAgICAgICAgICAgICAgICBmbi5hcHBseShudWxsLCBhcmdzLmNvbmNhdChbX3Jlc3RQYXJhbShmdW5jdGlvbiAoYXJncykge1xuICAgICAgICAgICAgICAgICAgICBtZW1vW2tleV0gPSBhcmdzO1xuICAgICAgICAgICAgICAgICAgICB2YXIgcSA9IHF1ZXVlc1trZXldO1xuICAgICAgICAgICAgICAgICAgICBkZWxldGUgcXVldWVzW2tleV07XG4gICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwLCBsID0gcS5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHFbaV0uYXBwbHkobnVsbCwgYXJncyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KV0pKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIG1lbW9pemVkLm1lbW8gPSBtZW1vO1xuICAgICAgICBtZW1vaXplZC51bm1lbW9pemVkID0gZm47XG4gICAgICAgIHJldHVybiBtZW1vaXplZDtcbiAgICB9O1xuXG4gICAgYXN5bmMudW5tZW1vaXplID0gZnVuY3Rpb24gKGZuKSB7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gKGZuLnVubWVtb2l6ZWQgfHwgZm4pLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7XG4gICAgICAgIH07XG4gICAgfTtcblxuICAgIGZ1bmN0aW9uIF90aW1lcyhtYXBwZXIpIHtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChjb3VudCwgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICBtYXBwZXIoX3JhbmdlKGNvdW50KSwgaXRlcmF0b3IsIGNhbGxiYWNrKTtcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBhc3luYy50aW1lcyA9IF90aW1lcyhhc3luYy5tYXApO1xuICAgIGFzeW5jLnRpbWVzU2VyaWVzID0gX3RpbWVzKGFzeW5jLm1hcFNlcmllcyk7XG4gICAgYXN5bmMudGltZXNMaW1pdCA9IGZ1bmN0aW9uIChjb3VudCwgbGltaXQsIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICByZXR1cm4gYXN5bmMubWFwTGltaXQoX3JhbmdlKGNvdW50KSwgbGltaXQsIGl0ZXJhdG9yLCBjYWxsYmFjayk7XG4gICAgfTtcblxuICAgIGFzeW5jLnNlcSA9IGZ1bmN0aW9uICgvKiBmdW5jdGlvbnMuLi4gKi8pIHtcbiAgICAgICAgdmFyIGZucyA9IGFyZ3VtZW50cztcbiAgICAgICAgcmV0dXJuIF9yZXN0UGFyYW0oZnVuY3Rpb24gKGFyZ3MpIHtcbiAgICAgICAgICAgIHZhciB0aGF0ID0gdGhpcztcblxuICAgICAgICAgICAgdmFyIGNhbGxiYWNrID0gYXJnc1thcmdzLmxlbmd0aCAtIDFdO1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBjYWxsYmFjayA9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgYXJncy5wb3AoKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2sgPSBub29wO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBhc3luYy5yZWR1Y2UoZm5zLCBhcmdzLCBmdW5jdGlvbiAobmV3YXJncywgZm4sIGNiKSB7XG4gICAgICAgICAgICAgICAgZm4uYXBwbHkodGhhdCwgbmV3YXJncy5jb25jYXQoW19yZXN0UGFyYW0oZnVuY3Rpb24gKGVyciwgbmV4dGFyZ3MpIHtcbiAgICAgICAgICAgICAgICAgICAgY2IoZXJyLCBuZXh0YXJncyk7XG4gICAgICAgICAgICAgICAgfSldKSk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZnVuY3Rpb24gKGVyciwgcmVzdWx0cykge1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrLmFwcGx5KHRoYXQsIFtlcnJdLmNvbmNhdChyZXN1bHRzKSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfTtcblxuICAgIGFzeW5jLmNvbXBvc2UgPSBmdW5jdGlvbiAoLyogZnVuY3Rpb25zLi4uICovKSB7XG4gICAgICAgIHJldHVybiBhc3luYy5zZXEuYXBwbHkobnVsbCwgQXJyYXkucHJvdG90eXBlLnJldmVyc2UuY2FsbChhcmd1bWVudHMpKTtcbiAgICB9O1xuXG5cbiAgICBmdW5jdGlvbiBfYXBwbHlFYWNoKGVhY2hmbikge1xuICAgICAgICByZXR1cm4gX3Jlc3RQYXJhbShmdW5jdGlvbihmbnMsIGFyZ3MpIHtcbiAgICAgICAgICAgIHZhciBnbyA9IF9yZXN0UGFyYW0oZnVuY3Rpb24oYXJncykge1xuICAgICAgICAgICAgICAgIHZhciB0aGF0ID0gdGhpcztcbiAgICAgICAgICAgICAgICB2YXIgY2FsbGJhY2sgPSBhcmdzLnBvcCgpO1xuICAgICAgICAgICAgICAgIHJldHVybiBlYWNoZm4oZm5zLCBmdW5jdGlvbiAoZm4sIF8sIGNiKSB7XG4gICAgICAgICAgICAgICAgICAgIGZuLmFwcGx5KHRoYXQsIGFyZ3MuY29uY2F0KFtjYl0pKTtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIGNhbGxiYWNrKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgaWYgKGFyZ3MubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGdvLmFwcGx5KHRoaXMsIGFyZ3MpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGdvO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBhc3luYy5hcHBseUVhY2ggPSBfYXBwbHlFYWNoKGFzeW5jLmVhY2hPZik7XG4gICAgYXN5bmMuYXBwbHlFYWNoU2VyaWVzID0gX2FwcGx5RWFjaChhc3luYy5lYWNoT2ZTZXJpZXMpO1xuXG5cbiAgICBhc3luYy5mb3JldmVyID0gZnVuY3Rpb24gKGZuLCBjYWxsYmFjaykge1xuICAgICAgICB2YXIgZG9uZSA9IG9ubHlfb25jZShjYWxsYmFjayB8fCBub29wKTtcbiAgICAgICAgdmFyIHRhc2sgPSBlbnN1cmVBc3luYyhmbik7XG4gICAgICAgIGZ1bmN0aW9uIG5leHQoZXJyKSB7XG4gICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGRvbmUoZXJyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRhc2sobmV4dCk7XG4gICAgICAgIH1cbiAgICAgICAgbmV4dCgpO1xuICAgIH07XG5cbiAgICBmdW5jdGlvbiBlbnN1cmVBc3luYyhmbikge1xuICAgICAgICByZXR1cm4gX3Jlc3RQYXJhbShmdW5jdGlvbiAoYXJncykge1xuICAgICAgICAgICAgdmFyIGNhbGxiYWNrID0gYXJncy5wb3AoKTtcbiAgICAgICAgICAgIGFyZ3MucHVzaChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgdmFyIGlubmVyQXJncyA9IGFyZ3VtZW50cztcbiAgICAgICAgICAgICAgICBpZiAoc3luYykge1xuICAgICAgICAgICAgICAgICAgICBhc3luYy5zZXRJbW1lZGlhdGUoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2suYXBwbHkobnVsbCwgaW5uZXJBcmdzKTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2suYXBwbHkobnVsbCwgaW5uZXJBcmdzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHZhciBzeW5jID0gdHJ1ZTtcbiAgICAgICAgICAgIGZuLmFwcGx5KHRoaXMsIGFyZ3MpO1xuICAgICAgICAgICAgc3luYyA9IGZhbHNlO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBhc3luYy5lbnN1cmVBc3luYyA9IGVuc3VyZUFzeW5jO1xuXG4gICAgYXN5bmMuY29uc3RhbnQgPSBfcmVzdFBhcmFtKGZ1bmN0aW9uKHZhbHVlcykge1xuICAgICAgICB2YXIgYXJncyA9IFtudWxsXS5jb25jYXQodmFsdWVzKTtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChjYWxsYmFjaykge1xuICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrLmFwcGx5KHRoaXMsIGFyZ3MpO1xuICAgICAgICB9O1xuICAgIH0pO1xuXG4gICAgYXN5bmMud3JhcFN5bmMgPVxuICAgIGFzeW5jLmFzeW5jaWZ5ID0gZnVuY3Rpb24gYXN5bmNpZnkoZnVuYykge1xuICAgICAgICByZXR1cm4gX3Jlc3RQYXJhbShmdW5jdGlvbiAoYXJncykge1xuICAgICAgICAgICAgdmFyIGNhbGxiYWNrID0gYXJncy5wb3AoKTtcbiAgICAgICAgICAgIHZhciByZXN1bHQ7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIHJlc3VsdCA9IGZ1bmMuYXBwbHkodGhpcywgYXJncyk7XG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gaWYgcmVzdWx0IGlzIFByb21pc2Ugb2JqZWN0XG4gICAgICAgICAgICBpZiAoX2lzT2JqZWN0KHJlc3VsdCkgJiYgdHlwZW9mIHJlc3VsdC50aGVuID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgICAgICAgICByZXN1bHQudGhlbihmdW5jdGlvbih2YWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhudWxsLCB2YWx1ZSk7XG4gICAgICAgICAgICAgICAgfSlbXCJjYXRjaFwiXShmdW5jdGlvbihlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soZXJyLm1lc3NhZ2UgPyBlcnIgOiBuZXcgRXJyb3IoZXJyKSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrKG51bGwsIHJlc3VsdCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH07XG5cbiAgICAvLyBOb2RlLmpzXG4gICAgaWYgKHR5cGVvZiBtb2R1bGUgPT09ICdvYmplY3QnICYmIG1vZHVsZS5leHBvcnRzKSB7XG4gICAgICAgIG1vZHVsZS5leHBvcnRzID0gYXN5bmM7XG4gICAgfVxuICAgIC8vIEFNRCAvIFJlcXVpcmVKU1xuICAgIGVsc2UgaWYgKHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCkge1xuICAgICAgICBkZWZpbmUoW10sIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiBhc3luYztcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8vIGluY2x1ZGVkIGRpcmVjdGx5IHZpYSA8c2NyaXB0PiB0YWdcbiAgICBlbHNlIHtcbiAgICAgICAgcm9vdC5hc3luYyA9IGFzeW5jO1xuICAgIH1cblxufSgpKTtcbiIsIi8vIENvcHlyaWdodCBKb3llbnQsIEluYy4gYW5kIG90aGVyIE5vZGUgY29udHJpYnV0b3JzLlxuLy9cbi8vIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhXG4vLyBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlXG4vLyBcIlNvZnR3YXJlXCIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmdcbi8vIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCxcbi8vIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXRcbi8vIHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZVxuLy8gZm9sbG93aW5nIGNvbmRpdGlvbnM6XG4vL1xuLy8gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWRcbi8vIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuLy9cbi8vIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1Ncbi8vIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0Zcbi8vIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU5cbi8vIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLFxuLy8gREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SXG4vLyBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFXG4vLyBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLlxuXG4vLyByZXNvbHZlcyAuIGFuZCAuLiBlbGVtZW50cyBpbiBhIHBhdGggYXJyYXkgd2l0aCBkaXJlY3RvcnkgbmFtZXMgdGhlcmVcbi8vIG11c3QgYmUgbm8gc2xhc2hlcywgZW1wdHkgZWxlbWVudHMsIG9yIGRldmljZSBuYW1lcyAoYzpcXCkgaW4gdGhlIGFycmF5XG4vLyAoc28gYWxzbyBubyBsZWFkaW5nIGFuZCB0cmFpbGluZyBzbGFzaGVzIC0gaXQgZG9lcyBub3QgZGlzdGluZ3Vpc2hcbi8vIHJlbGF0aXZlIGFuZCBhYnNvbHV0ZSBwYXRocylcbmZ1bmN0aW9uIG5vcm1hbGl6ZUFycmF5KHBhcnRzLCBhbGxvd0Fib3ZlUm9vdCkge1xuICAvLyBpZiB0aGUgcGF0aCB0cmllcyB0byBnbyBhYm92ZSB0aGUgcm9vdCwgYHVwYCBlbmRzIHVwID4gMFxuICB2YXIgdXAgPSAwO1xuICBmb3IgKHZhciBpID0gcGFydHMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICB2YXIgbGFzdCA9IHBhcnRzW2ldO1xuICAgIGlmIChsYXN0ID09PSAnLicpIHtcbiAgICAgIHBhcnRzLnNwbGljZShpLCAxKTtcbiAgICB9IGVsc2UgaWYgKGxhc3QgPT09ICcuLicpIHtcbiAgICAgIHBhcnRzLnNwbGljZShpLCAxKTtcbiAgICAgIHVwKys7XG4gICAgfSBlbHNlIGlmICh1cCkge1xuICAgICAgcGFydHMuc3BsaWNlKGksIDEpO1xuICAgICAgdXAtLTtcbiAgICB9XG4gIH1cblxuICAvLyBpZiB0aGUgcGF0aCBpcyBhbGxvd2VkIHRvIGdvIGFib3ZlIHRoZSByb290LCByZXN0b3JlIGxlYWRpbmcgLi5zXG4gIGlmIChhbGxvd0Fib3ZlUm9vdCkge1xuICAgIGZvciAoOyB1cC0tOyB1cCkge1xuICAgICAgcGFydHMudW5zaGlmdCgnLi4nKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gcGFydHM7XG59XG5cbi8vIFNwbGl0IGEgZmlsZW5hbWUgaW50byBbcm9vdCwgZGlyLCBiYXNlbmFtZSwgZXh0XSwgdW5peCB2ZXJzaW9uXG4vLyAncm9vdCcgaXMganVzdCBhIHNsYXNoLCBvciBub3RoaW5nLlxudmFyIHNwbGl0UGF0aFJlID1cbiAgICAvXihcXC8/fCkoW1xcc1xcU10qPykoKD86XFwuezEsMn18W15cXC9dKz98KShcXC5bXi5cXC9dKnwpKSg/OltcXC9dKikkLztcbnZhciBzcGxpdFBhdGggPSBmdW5jdGlvbihmaWxlbmFtZSkge1xuICByZXR1cm4gc3BsaXRQYXRoUmUuZXhlYyhmaWxlbmFtZSkuc2xpY2UoMSk7XG59O1xuXG4vLyBwYXRoLnJlc29sdmUoW2Zyb20gLi4uXSwgdG8pXG4vLyBwb3NpeCB2ZXJzaW9uXG5leHBvcnRzLnJlc29sdmUgPSBmdW5jdGlvbigpIHtcbiAgdmFyIHJlc29sdmVkUGF0aCA9ICcnLFxuICAgICAgcmVzb2x2ZWRBYnNvbHV0ZSA9IGZhbHNlO1xuXG4gIGZvciAodmFyIGkgPSBhcmd1bWVudHMubGVuZ3RoIC0gMTsgaSA+PSAtMSAmJiAhcmVzb2x2ZWRBYnNvbHV0ZTsgaS0tKSB7XG4gICAgdmFyIHBhdGggPSAoaSA+PSAwKSA/IGFyZ3VtZW50c1tpXSA6IHByb2Nlc3MuY3dkKCk7XG5cbiAgICAvLyBTa2lwIGVtcHR5IGFuZCBpbnZhbGlkIGVudHJpZXNcbiAgICBpZiAodHlwZW9mIHBhdGggIT09ICdzdHJpbmcnKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdBcmd1bWVudHMgdG8gcGF0aC5yZXNvbHZlIG11c3QgYmUgc3RyaW5ncycpO1xuICAgIH0gZWxzZSBpZiAoIXBhdGgpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIHJlc29sdmVkUGF0aCA9IHBhdGggKyAnLycgKyByZXNvbHZlZFBhdGg7XG4gICAgcmVzb2x2ZWRBYnNvbHV0ZSA9IHBhdGguY2hhckF0KDApID09PSAnLyc7XG4gIH1cblxuICAvLyBBdCB0aGlzIHBvaW50IHRoZSBwYXRoIHNob3VsZCBiZSByZXNvbHZlZCB0byBhIGZ1bGwgYWJzb2x1dGUgcGF0aCwgYnV0XG4gIC8vIGhhbmRsZSByZWxhdGl2ZSBwYXRocyB0byBiZSBzYWZlIChtaWdodCBoYXBwZW4gd2hlbiBwcm9jZXNzLmN3ZCgpIGZhaWxzKVxuXG4gIC8vIE5vcm1hbGl6ZSB0aGUgcGF0aFxuICByZXNvbHZlZFBhdGggPSBub3JtYWxpemVBcnJheShmaWx0ZXIocmVzb2x2ZWRQYXRoLnNwbGl0KCcvJyksIGZ1bmN0aW9uKHApIHtcbiAgICByZXR1cm4gISFwO1xuICB9KSwgIXJlc29sdmVkQWJzb2x1dGUpLmpvaW4oJy8nKTtcblxuICByZXR1cm4gKChyZXNvbHZlZEFic29sdXRlID8gJy8nIDogJycpICsgcmVzb2x2ZWRQYXRoKSB8fCAnLic7XG59O1xuXG4vLyBwYXRoLm5vcm1hbGl6ZShwYXRoKVxuLy8gcG9zaXggdmVyc2lvblxuZXhwb3J0cy5ub3JtYWxpemUgPSBmdW5jdGlvbihwYXRoKSB7XG4gIHZhciBpc0Fic29sdXRlID0gZXhwb3J0cy5pc0Fic29sdXRlKHBhdGgpLFxuICAgICAgdHJhaWxpbmdTbGFzaCA9IHN1YnN0cihwYXRoLCAtMSkgPT09ICcvJztcblxuICAvLyBOb3JtYWxpemUgdGhlIHBhdGhcbiAgcGF0aCA9IG5vcm1hbGl6ZUFycmF5KGZpbHRlcihwYXRoLnNwbGl0KCcvJyksIGZ1bmN0aW9uKHApIHtcbiAgICByZXR1cm4gISFwO1xuICB9KSwgIWlzQWJzb2x1dGUpLmpvaW4oJy8nKTtcblxuICBpZiAoIXBhdGggJiYgIWlzQWJzb2x1dGUpIHtcbiAgICBwYXRoID0gJy4nO1xuICB9XG4gIGlmIChwYXRoICYmIHRyYWlsaW5nU2xhc2gpIHtcbiAgICBwYXRoICs9ICcvJztcbiAgfVxuXG4gIHJldHVybiAoaXNBYnNvbHV0ZSA/ICcvJyA6ICcnKSArIHBhdGg7XG59O1xuXG4vLyBwb3NpeCB2ZXJzaW9uXG5leHBvcnRzLmlzQWJzb2x1dGUgPSBmdW5jdGlvbihwYXRoKSB7XG4gIHJldHVybiBwYXRoLmNoYXJBdCgwKSA9PT0gJy8nO1xufTtcblxuLy8gcG9zaXggdmVyc2lvblxuZXhwb3J0cy5qb2luID0gZnVuY3Rpb24oKSB7XG4gIHZhciBwYXRocyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMCk7XG4gIHJldHVybiBleHBvcnRzLm5vcm1hbGl6ZShmaWx0ZXIocGF0aHMsIGZ1bmN0aW9uKHAsIGluZGV4KSB7XG4gICAgaWYgKHR5cGVvZiBwICE9PSAnc3RyaW5nJykge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignQXJndW1lbnRzIHRvIHBhdGguam9pbiBtdXN0IGJlIHN0cmluZ3MnKTtcbiAgICB9XG4gICAgcmV0dXJuIHA7XG4gIH0pLmpvaW4oJy8nKSk7XG59O1xuXG5cbi8vIHBhdGgucmVsYXRpdmUoZnJvbSwgdG8pXG4vLyBwb3NpeCB2ZXJzaW9uXG5leHBvcnRzLnJlbGF0aXZlID0gZnVuY3Rpb24oZnJvbSwgdG8pIHtcbiAgZnJvbSA9IGV4cG9ydHMucmVzb2x2ZShmcm9tKS5zdWJzdHIoMSk7XG4gIHRvID0gZXhwb3J0cy5yZXNvbHZlKHRvKS5zdWJzdHIoMSk7XG5cbiAgZnVuY3Rpb24gdHJpbShhcnIpIHtcbiAgICB2YXIgc3RhcnQgPSAwO1xuICAgIGZvciAoOyBzdGFydCA8IGFyci5sZW5ndGg7IHN0YXJ0KyspIHtcbiAgICAgIGlmIChhcnJbc3RhcnRdICE9PSAnJykgYnJlYWs7XG4gICAgfVxuXG4gICAgdmFyIGVuZCA9IGFyci5sZW5ndGggLSAxO1xuICAgIGZvciAoOyBlbmQgPj0gMDsgZW5kLS0pIHtcbiAgICAgIGlmIChhcnJbZW5kXSAhPT0gJycpIGJyZWFrO1xuICAgIH1cblxuICAgIGlmIChzdGFydCA+IGVuZCkgcmV0dXJuIFtdO1xuICAgIHJldHVybiBhcnIuc2xpY2Uoc3RhcnQsIGVuZCAtIHN0YXJ0ICsgMSk7XG4gIH1cblxuICB2YXIgZnJvbVBhcnRzID0gdHJpbShmcm9tLnNwbGl0KCcvJykpO1xuICB2YXIgdG9QYXJ0cyA9IHRyaW0odG8uc3BsaXQoJy8nKSk7XG5cbiAgdmFyIGxlbmd0aCA9IE1hdGgubWluKGZyb21QYXJ0cy5sZW5ndGgsIHRvUGFydHMubGVuZ3RoKTtcbiAgdmFyIHNhbWVQYXJ0c0xlbmd0aCA9IGxlbmd0aDtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgIGlmIChmcm9tUGFydHNbaV0gIT09IHRvUGFydHNbaV0pIHtcbiAgICAgIHNhbWVQYXJ0c0xlbmd0aCA9IGk7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICB2YXIgb3V0cHV0UGFydHMgPSBbXTtcbiAgZm9yICh2YXIgaSA9IHNhbWVQYXJ0c0xlbmd0aDsgaSA8IGZyb21QYXJ0cy5sZW5ndGg7IGkrKykge1xuICAgIG91dHB1dFBhcnRzLnB1c2goJy4uJyk7XG4gIH1cblxuICBvdXRwdXRQYXJ0cyA9IG91dHB1dFBhcnRzLmNvbmNhdCh0b1BhcnRzLnNsaWNlKHNhbWVQYXJ0c0xlbmd0aCkpO1xuXG4gIHJldHVybiBvdXRwdXRQYXJ0cy5qb2luKCcvJyk7XG59O1xuXG5leHBvcnRzLnNlcCA9ICcvJztcbmV4cG9ydHMuZGVsaW1pdGVyID0gJzonO1xuXG5leHBvcnRzLmRpcm5hbWUgPSBmdW5jdGlvbihwYXRoKSB7XG4gIHZhciByZXN1bHQgPSBzcGxpdFBhdGgocGF0aCksXG4gICAgICByb290ID0gcmVzdWx0WzBdLFxuICAgICAgZGlyID0gcmVzdWx0WzFdO1xuXG4gIGlmICghcm9vdCAmJiAhZGlyKSB7XG4gICAgLy8gTm8gZGlybmFtZSB3aGF0c29ldmVyXG4gICAgcmV0dXJuICcuJztcbiAgfVxuXG4gIGlmIChkaXIpIHtcbiAgICAvLyBJdCBoYXMgYSBkaXJuYW1lLCBzdHJpcCB0cmFpbGluZyBzbGFzaFxuICAgIGRpciA9IGRpci5zdWJzdHIoMCwgZGlyLmxlbmd0aCAtIDEpO1xuICB9XG5cbiAgcmV0dXJuIHJvb3QgKyBkaXI7XG59O1xuXG5cbmV4cG9ydHMuYmFzZW5hbWUgPSBmdW5jdGlvbihwYXRoLCBleHQpIHtcbiAgdmFyIGYgPSBzcGxpdFBhdGgocGF0aClbMl07XG4gIC8vIFRPRE86IG1ha2UgdGhpcyBjb21wYXJpc29uIGNhc2UtaW5zZW5zaXRpdmUgb24gd2luZG93cz9cbiAgaWYgKGV4dCAmJiBmLnN1YnN0cigtMSAqIGV4dC5sZW5ndGgpID09PSBleHQpIHtcbiAgICBmID0gZi5zdWJzdHIoMCwgZi5sZW5ndGggLSBleHQubGVuZ3RoKTtcbiAgfVxuICByZXR1cm4gZjtcbn07XG5cblxuZXhwb3J0cy5leHRuYW1lID0gZnVuY3Rpb24ocGF0aCkge1xuICByZXR1cm4gc3BsaXRQYXRoKHBhdGgpWzNdO1xufTtcblxuZnVuY3Rpb24gZmlsdGVyICh4cywgZikge1xuICAgIGlmICh4cy5maWx0ZXIpIHJldHVybiB4cy5maWx0ZXIoZik7XG4gICAgdmFyIHJlcyA9IFtdO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgeHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgaWYgKGYoeHNbaV0sIGksIHhzKSkgcmVzLnB1c2goeHNbaV0pO1xuICAgIH1cbiAgICByZXR1cm4gcmVzO1xufVxuXG4vLyBTdHJpbmcucHJvdG90eXBlLnN1YnN0ciAtIG5lZ2F0aXZlIGluZGV4IGRvbid0IHdvcmsgaW4gSUU4XG52YXIgc3Vic3RyID0gJ2FiJy5zdWJzdHIoLTEpID09PSAnYidcbiAgICA/IGZ1bmN0aW9uIChzdHIsIHN0YXJ0LCBsZW4pIHsgcmV0dXJuIHN0ci5zdWJzdHIoc3RhcnQsIGxlbikgfVxuICAgIDogZnVuY3Rpb24gKHN0ciwgc3RhcnQsIGxlbikge1xuICAgICAgICBpZiAoc3RhcnQgPCAwKSBzdGFydCA9IHN0ci5sZW5ndGggKyBzdGFydDtcbiAgICAgICAgcmV0dXJuIHN0ci5zdWJzdHIoc3RhcnQsIGxlbik7XG4gICAgfVxuO1xuIiwiLy8gc2hpbSBmb3IgdXNpbmcgcHJvY2VzcyBpbiBicm93c2VyXG5cbnZhciBwcm9jZXNzID0gbW9kdWxlLmV4cG9ydHMgPSB7fTtcbnZhciBxdWV1ZSA9IFtdO1xudmFyIGRyYWluaW5nID0gZmFsc2U7XG52YXIgY3VycmVudFF1ZXVlO1xudmFyIHF1ZXVlSW5kZXggPSAtMTtcblxuZnVuY3Rpb24gY2xlYW5VcE5leHRUaWNrKCkge1xuICAgIGRyYWluaW5nID0gZmFsc2U7XG4gICAgaWYgKGN1cnJlbnRRdWV1ZS5sZW5ndGgpIHtcbiAgICAgICAgcXVldWUgPSBjdXJyZW50UXVldWUuY29uY2F0KHF1ZXVlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICBxdWV1ZUluZGV4ID0gLTE7XG4gICAgfVxuICAgIGlmIChxdWV1ZS5sZW5ndGgpIHtcbiAgICAgICAgZHJhaW5RdWV1ZSgpO1xuICAgIH1cbn1cblxuZnVuY3Rpb24gZHJhaW5RdWV1ZSgpIHtcbiAgICBpZiAoZHJhaW5pbmcpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB2YXIgdGltZW91dCA9IHNldFRpbWVvdXQoY2xlYW5VcE5leHRUaWNrKTtcbiAgICBkcmFpbmluZyA9IHRydWU7XG5cbiAgICB2YXIgbGVuID0gcXVldWUubGVuZ3RoO1xuICAgIHdoaWxlKGxlbikge1xuICAgICAgICBjdXJyZW50UXVldWUgPSBxdWV1ZTtcbiAgICAgICAgcXVldWUgPSBbXTtcbiAgICAgICAgd2hpbGUgKCsrcXVldWVJbmRleCA8IGxlbikge1xuICAgICAgICAgICAgaWYgKGN1cnJlbnRRdWV1ZSkge1xuICAgICAgICAgICAgICAgIGN1cnJlbnRRdWV1ZVtxdWV1ZUluZGV4XS5ydW4oKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBxdWV1ZUluZGV4ID0gLTE7XG4gICAgICAgIGxlbiA9IHF1ZXVlLmxlbmd0aDtcbiAgICB9XG4gICAgY3VycmVudFF1ZXVlID0gbnVsbDtcbiAgICBkcmFpbmluZyA9IGZhbHNlO1xuICAgIGNsZWFyVGltZW91dCh0aW1lb3V0KTtcbn1cblxucHJvY2Vzcy5uZXh0VGljayA9IGZ1bmN0aW9uIChmdW4pIHtcbiAgICB2YXIgYXJncyA9IG5ldyBBcnJheShhcmd1bWVudHMubGVuZ3RoIC0gMSk7XG4gICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPiAxKSB7XG4gICAgICAgIGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBhcmdzW2kgLSAxXSA9IGFyZ3VtZW50c1tpXTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBxdWV1ZS5wdXNoKG5ldyBJdGVtKGZ1biwgYXJncykpO1xuICAgIGlmIChxdWV1ZS5sZW5ndGggPT09IDEgJiYgIWRyYWluaW5nKSB7XG4gICAgICAgIHNldFRpbWVvdXQoZHJhaW5RdWV1ZSwgMCk7XG4gICAgfVxufTtcblxuLy8gdjggbGlrZXMgcHJlZGljdGlibGUgb2JqZWN0c1xuZnVuY3Rpb24gSXRlbShmdW4sIGFycmF5KSB7XG4gICAgdGhpcy5mdW4gPSBmdW47XG4gICAgdGhpcy5hcnJheSA9IGFycmF5O1xufVxuSXRlbS5wcm90b3R5cGUucnVuID0gZnVuY3Rpb24gKCkge1xuICAgIHRoaXMuZnVuLmFwcGx5KG51bGwsIHRoaXMuYXJyYXkpO1xufTtcbnByb2Nlc3MudGl0bGUgPSAnYnJvd3Nlcic7XG5wcm9jZXNzLmJyb3dzZXIgPSB0cnVlO1xucHJvY2Vzcy5lbnYgPSB7fTtcbnByb2Nlc3MuYXJndiA9IFtdO1xucHJvY2Vzcy52ZXJzaW9uID0gJyc7IC8vIGVtcHR5IHN0cmluZyB0byBhdm9pZCByZWdleHAgaXNzdWVzXG5wcm9jZXNzLnZlcnNpb25zID0ge307XG5cbmZ1bmN0aW9uIG5vb3AoKSB7fVxuXG5wcm9jZXNzLm9uID0gbm9vcDtcbnByb2Nlc3MuYWRkTGlzdGVuZXIgPSBub29wO1xucHJvY2Vzcy5vbmNlID0gbm9vcDtcbnByb2Nlc3Mub2ZmID0gbm9vcDtcbnByb2Nlc3MucmVtb3ZlTGlzdGVuZXIgPSBub29wO1xucHJvY2Vzcy5yZW1vdmVBbGxMaXN0ZW5lcnMgPSBub29wO1xucHJvY2Vzcy5lbWl0ID0gbm9vcDtcblxucHJvY2Vzcy5iaW5kaW5nID0gZnVuY3Rpb24gKG5hbWUpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3Byb2Nlc3MuYmluZGluZyBpcyBub3Qgc3VwcG9ydGVkJyk7XG59O1xuXG5wcm9jZXNzLmN3ZCA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuICcvJyB9O1xucHJvY2Vzcy5jaGRpciA9IGZ1bmN0aW9uIChkaXIpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3Byb2Nlc3MuY2hkaXIgaXMgbm90IHN1cHBvcnRlZCcpO1xufTtcbnByb2Nlc3MudW1hc2sgPSBmdW5jdGlvbigpIHsgcmV0dXJuIDA7IH07XG4iLCIvKiEgaHR0cHM6Ly9tdGhzLmJlL3B1bnljb2RlIHYxLjQuMCBieSBAbWF0aGlhcyAqL1xuOyhmdW5jdGlvbihyb290KSB7XG5cblx0LyoqIERldGVjdCBmcmVlIHZhcmlhYmxlcyAqL1xuXHR2YXIgZnJlZUV4cG9ydHMgPSB0eXBlb2YgZXhwb3J0cyA9PSAnb2JqZWN0JyAmJiBleHBvcnRzICYmXG5cdFx0IWV4cG9ydHMubm9kZVR5cGUgJiYgZXhwb3J0cztcblx0dmFyIGZyZWVNb2R1bGUgPSB0eXBlb2YgbW9kdWxlID09ICdvYmplY3QnICYmIG1vZHVsZSAmJlxuXHRcdCFtb2R1bGUubm9kZVR5cGUgJiYgbW9kdWxlO1xuXHR2YXIgZnJlZUdsb2JhbCA9IHR5cGVvZiBnbG9iYWwgPT0gJ29iamVjdCcgJiYgZ2xvYmFsO1xuXHRpZiAoXG5cdFx0ZnJlZUdsb2JhbC5nbG9iYWwgPT09IGZyZWVHbG9iYWwgfHxcblx0XHRmcmVlR2xvYmFsLndpbmRvdyA9PT0gZnJlZUdsb2JhbCB8fFxuXHRcdGZyZWVHbG9iYWwuc2VsZiA9PT0gZnJlZUdsb2JhbFxuXHQpIHtcblx0XHRyb290ID0gZnJlZUdsb2JhbDtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGUgYHB1bnljb2RlYCBvYmplY3QuXG5cdCAqIEBuYW1lIHB1bnljb2RlXG5cdCAqIEB0eXBlIE9iamVjdFxuXHQgKi9cblx0dmFyIHB1bnljb2RlLFxuXG5cdC8qKiBIaWdoZXN0IHBvc2l0aXZlIHNpZ25lZCAzMi1iaXQgZmxvYXQgdmFsdWUgKi9cblx0bWF4SW50ID0gMjE0NzQ4MzY0NywgLy8gYWthLiAweDdGRkZGRkZGIG9yIDJeMzEtMVxuXG5cdC8qKiBCb290c3RyaW5nIHBhcmFtZXRlcnMgKi9cblx0YmFzZSA9IDM2LFxuXHR0TWluID0gMSxcblx0dE1heCA9IDI2LFxuXHRza2V3ID0gMzgsXG5cdGRhbXAgPSA3MDAsXG5cdGluaXRpYWxCaWFzID0gNzIsXG5cdGluaXRpYWxOID0gMTI4LCAvLyAweDgwXG5cdGRlbGltaXRlciA9ICctJywgLy8gJ1xceDJEJ1xuXG5cdC8qKiBSZWd1bGFyIGV4cHJlc3Npb25zICovXG5cdHJlZ2V4UHVueWNvZGUgPSAvXnhuLS0vLFxuXHRyZWdleE5vbkFTQ0lJID0gL1teXFx4MjAtXFx4N0VdLywgLy8gdW5wcmludGFibGUgQVNDSUkgY2hhcnMgKyBub24tQVNDSUkgY2hhcnNcblx0cmVnZXhTZXBhcmF0b3JzID0gL1tcXHgyRVxcdTMwMDJcXHVGRjBFXFx1RkY2MV0vZywgLy8gUkZDIDM0OTAgc2VwYXJhdG9yc1xuXG5cdC8qKiBFcnJvciBtZXNzYWdlcyAqL1xuXHRlcnJvcnMgPSB7XG5cdFx0J292ZXJmbG93JzogJ092ZXJmbG93OiBpbnB1dCBuZWVkcyB3aWRlciBpbnRlZ2VycyB0byBwcm9jZXNzJyxcblx0XHQnbm90LWJhc2ljJzogJ0lsbGVnYWwgaW5wdXQgPj0gMHg4MCAobm90IGEgYmFzaWMgY29kZSBwb2ludCknLFxuXHRcdCdpbnZhbGlkLWlucHV0JzogJ0ludmFsaWQgaW5wdXQnXG5cdH0sXG5cblx0LyoqIENvbnZlbmllbmNlIHNob3J0Y3V0cyAqL1xuXHRiYXNlTWludXNUTWluID0gYmFzZSAtIHRNaW4sXG5cdGZsb29yID0gTWF0aC5mbG9vcixcblx0c3RyaW5nRnJvbUNoYXJDb2RlID0gU3RyaW5nLmZyb21DaGFyQ29kZSxcblxuXHQvKiogVGVtcG9yYXJ5IHZhcmlhYmxlICovXG5cdGtleTtcblxuXHQvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cblxuXHQvKipcblx0ICogQSBnZW5lcmljIGVycm9yIHV0aWxpdHkgZnVuY3Rpb24uXG5cdCAqIEBwcml2YXRlXG5cdCAqIEBwYXJhbSB7U3RyaW5nfSB0eXBlIFRoZSBlcnJvciB0eXBlLlxuXHQgKiBAcmV0dXJucyB7RXJyb3J9IFRocm93cyBhIGBSYW5nZUVycm9yYCB3aXRoIHRoZSBhcHBsaWNhYmxlIGVycm9yIG1lc3NhZ2UuXG5cdCAqL1xuXHRmdW5jdGlvbiBlcnJvcih0eXBlKSB7XG5cdFx0dGhyb3cgbmV3IFJhbmdlRXJyb3IoZXJyb3JzW3R5cGVdKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBBIGdlbmVyaWMgYEFycmF5I21hcGAgdXRpbGl0eSBmdW5jdGlvbi5cblx0ICogQHByaXZhdGVcblx0ICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIGl0ZXJhdGUgb3Zlci5cblx0ICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2sgVGhlIGZ1bmN0aW9uIHRoYXQgZ2V0cyBjYWxsZWQgZm9yIGV2ZXJ5IGFycmF5XG5cdCAqIGl0ZW0uXG5cdCAqIEByZXR1cm5zIHtBcnJheX0gQSBuZXcgYXJyYXkgb2YgdmFsdWVzIHJldHVybmVkIGJ5IHRoZSBjYWxsYmFjayBmdW5jdGlvbi5cblx0ICovXG5cdGZ1bmN0aW9uIG1hcChhcnJheSwgZm4pIHtcblx0XHR2YXIgbGVuZ3RoID0gYXJyYXkubGVuZ3RoO1xuXHRcdHZhciByZXN1bHQgPSBbXTtcblx0XHR3aGlsZSAobGVuZ3RoLS0pIHtcblx0XHRcdHJlc3VsdFtsZW5ndGhdID0gZm4oYXJyYXlbbGVuZ3RoXSk7XG5cdFx0fVxuXHRcdHJldHVybiByZXN1bHQ7XG5cdH1cblxuXHQvKipcblx0ICogQSBzaW1wbGUgYEFycmF5I21hcGAtbGlrZSB3cmFwcGVyIHRvIHdvcmsgd2l0aCBkb21haW4gbmFtZSBzdHJpbmdzIG9yIGVtYWlsXG5cdCAqIGFkZHJlc3Nlcy5cblx0ICogQHByaXZhdGVcblx0ICogQHBhcmFtIHtTdHJpbmd9IGRvbWFpbiBUaGUgZG9tYWluIG5hbWUgb3IgZW1haWwgYWRkcmVzcy5cblx0ICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2sgVGhlIGZ1bmN0aW9uIHRoYXQgZ2V0cyBjYWxsZWQgZm9yIGV2ZXJ5XG5cdCAqIGNoYXJhY3Rlci5cblx0ICogQHJldHVybnMge0FycmF5fSBBIG5ldyBzdHJpbmcgb2YgY2hhcmFjdGVycyByZXR1cm5lZCBieSB0aGUgY2FsbGJhY2tcblx0ICogZnVuY3Rpb24uXG5cdCAqL1xuXHRmdW5jdGlvbiBtYXBEb21haW4oc3RyaW5nLCBmbikge1xuXHRcdHZhciBwYXJ0cyA9IHN0cmluZy5zcGxpdCgnQCcpO1xuXHRcdHZhciByZXN1bHQgPSAnJztcblx0XHRpZiAocGFydHMubGVuZ3RoID4gMSkge1xuXHRcdFx0Ly8gSW4gZW1haWwgYWRkcmVzc2VzLCBvbmx5IHRoZSBkb21haW4gbmFtZSBzaG91bGQgYmUgcHVueWNvZGVkLiBMZWF2ZVxuXHRcdFx0Ly8gdGhlIGxvY2FsIHBhcnQgKGkuZS4gZXZlcnl0aGluZyB1cCB0byBgQGApIGludGFjdC5cblx0XHRcdHJlc3VsdCA9IHBhcnRzWzBdICsgJ0AnO1xuXHRcdFx0c3RyaW5nID0gcGFydHNbMV07XG5cdFx0fVxuXHRcdC8vIEF2b2lkIGBzcGxpdChyZWdleClgIGZvciBJRTggY29tcGF0aWJpbGl0eS4gU2VlICMxNy5cblx0XHRzdHJpbmcgPSBzdHJpbmcucmVwbGFjZShyZWdleFNlcGFyYXRvcnMsICdcXHgyRScpO1xuXHRcdHZhciBsYWJlbHMgPSBzdHJpbmcuc3BsaXQoJy4nKTtcblx0XHR2YXIgZW5jb2RlZCA9IG1hcChsYWJlbHMsIGZuKS5qb2luKCcuJyk7XG5cdFx0cmV0dXJuIHJlc3VsdCArIGVuY29kZWQ7XG5cdH1cblxuXHQvKipcblx0ICogQ3JlYXRlcyBhbiBhcnJheSBjb250YWluaW5nIHRoZSBudW1lcmljIGNvZGUgcG9pbnRzIG9mIGVhY2ggVW5pY29kZVxuXHQgKiBjaGFyYWN0ZXIgaW4gdGhlIHN0cmluZy4gV2hpbGUgSmF2YVNjcmlwdCB1c2VzIFVDUy0yIGludGVybmFsbHksXG5cdCAqIHRoaXMgZnVuY3Rpb24gd2lsbCBjb252ZXJ0IGEgcGFpciBvZiBzdXJyb2dhdGUgaGFsdmVzIChlYWNoIG9mIHdoaWNoXG5cdCAqIFVDUy0yIGV4cG9zZXMgYXMgc2VwYXJhdGUgY2hhcmFjdGVycykgaW50byBhIHNpbmdsZSBjb2RlIHBvaW50LFxuXHQgKiBtYXRjaGluZyBVVEYtMTYuXG5cdCAqIEBzZWUgYHB1bnljb2RlLnVjczIuZW5jb2RlYFxuXHQgKiBAc2VlIDxodHRwczovL21hdGhpYXNieW5lbnMuYmUvbm90ZXMvamF2YXNjcmlwdC1lbmNvZGluZz5cblx0ICogQG1lbWJlck9mIHB1bnljb2RlLnVjczJcblx0ICogQG5hbWUgZGVjb2RlXG5cdCAqIEBwYXJhbSB7U3RyaW5nfSBzdHJpbmcgVGhlIFVuaWNvZGUgaW5wdXQgc3RyaW5nIChVQ1MtMikuXG5cdCAqIEByZXR1cm5zIHtBcnJheX0gVGhlIG5ldyBhcnJheSBvZiBjb2RlIHBvaW50cy5cblx0ICovXG5cdGZ1bmN0aW9uIHVjczJkZWNvZGUoc3RyaW5nKSB7XG5cdFx0dmFyIG91dHB1dCA9IFtdLFxuXHRcdCAgICBjb3VudGVyID0gMCxcblx0XHQgICAgbGVuZ3RoID0gc3RyaW5nLmxlbmd0aCxcblx0XHQgICAgdmFsdWUsXG5cdFx0ICAgIGV4dHJhO1xuXHRcdHdoaWxlIChjb3VudGVyIDwgbGVuZ3RoKSB7XG5cdFx0XHR2YWx1ZSA9IHN0cmluZy5jaGFyQ29kZUF0KGNvdW50ZXIrKyk7XG5cdFx0XHRpZiAodmFsdWUgPj0gMHhEODAwICYmIHZhbHVlIDw9IDB4REJGRiAmJiBjb3VudGVyIDwgbGVuZ3RoKSB7XG5cdFx0XHRcdC8vIGhpZ2ggc3Vycm9nYXRlLCBhbmQgdGhlcmUgaXMgYSBuZXh0IGNoYXJhY3RlclxuXHRcdFx0XHRleHRyYSA9IHN0cmluZy5jaGFyQ29kZUF0KGNvdW50ZXIrKyk7XG5cdFx0XHRcdGlmICgoZXh0cmEgJiAweEZDMDApID09IDB4REMwMCkgeyAvLyBsb3cgc3Vycm9nYXRlXG5cdFx0XHRcdFx0b3V0cHV0LnB1c2goKCh2YWx1ZSAmIDB4M0ZGKSA8PCAxMCkgKyAoZXh0cmEgJiAweDNGRikgKyAweDEwMDAwKTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHQvLyB1bm1hdGNoZWQgc3Vycm9nYXRlOyBvbmx5IGFwcGVuZCB0aGlzIGNvZGUgdW5pdCwgaW4gY2FzZSB0aGUgbmV4dFxuXHRcdFx0XHRcdC8vIGNvZGUgdW5pdCBpcyB0aGUgaGlnaCBzdXJyb2dhdGUgb2YgYSBzdXJyb2dhdGUgcGFpclxuXHRcdFx0XHRcdG91dHB1dC5wdXNoKHZhbHVlKTtcblx0XHRcdFx0XHRjb3VudGVyLS07XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdG91dHB1dC5wdXNoKHZhbHVlKTtcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIG91dHB1dDtcblx0fVxuXG5cdC8qKlxuXHQgKiBDcmVhdGVzIGEgc3RyaW5nIGJhc2VkIG9uIGFuIGFycmF5IG9mIG51bWVyaWMgY29kZSBwb2ludHMuXG5cdCAqIEBzZWUgYHB1bnljb2RlLnVjczIuZGVjb2RlYFxuXHQgKiBAbWVtYmVyT2YgcHVueWNvZGUudWNzMlxuXHQgKiBAbmFtZSBlbmNvZGVcblx0ICogQHBhcmFtIHtBcnJheX0gY29kZVBvaW50cyBUaGUgYXJyYXkgb2YgbnVtZXJpYyBjb2RlIHBvaW50cy5cblx0ICogQHJldHVybnMge1N0cmluZ30gVGhlIG5ldyBVbmljb2RlIHN0cmluZyAoVUNTLTIpLlxuXHQgKi9cblx0ZnVuY3Rpb24gdWNzMmVuY29kZShhcnJheSkge1xuXHRcdHJldHVybiBtYXAoYXJyYXksIGZ1bmN0aW9uKHZhbHVlKSB7XG5cdFx0XHR2YXIgb3V0cHV0ID0gJyc7XG5cdFx0XHRpZiAodmFsdWUgPiAweEZGRkYpIHtcblx0XHRcdFx0dmFsdWUgLT0gMHgxMDAwMDtcblx0XHRcdFx0b3V0cHV0ICs9IHN0cmluZ0Zyb21DaGFyQ29kZSh2YWx1ZSA+Pj4gMTAgJiAweDNGRiB8IDB4RDgwMCk7XG5cdFx0XHRcdHZhbHVlID0gMHhEQzAwIHwgdmFsdWUgJiAweDNGRjtcblx0XHRcdH1cblx0XHRcdG91dHB1dCArPSBzdHJpbmdGcm9tQ2hhckNvZGUodmFsdWUpO1xuXHRcdFx0cmV0dXJuIG91dHB1dDtcblx0XHR9KS5qb2luKCcnKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBDb252ZXJ0cyBhIGJhc2ljIGNvZGUgcG9pbnQgaW50byBhIGRpZ2l0L2ludGVnZXIuXG5cdCAqIEBzZWUgYGRpZ2l0VG9CYXNpYygpYFxuXHQgKiBAcHJpdmF0ZVxuXHQgKiBAcGFyYW0ge051bWJlcn0gY29kZVBvaW50IFRoZSBiYXNpYyBudW1lcmljIGNvZGUgcG9pbnQgdmFsdWUuXG5cdCAqIEByZXR1cm5zIHtOdW1iZXJ9IFRoZSBudW1lcmljIHZhbHVlIG9mIGEgYmFzaWMgY29kZSBwb2ludCAoZm9yIHVzZSBpblxuXHQgKiByZXByZXNlbnRpbmcgaW50ZWdlcnMpIGluIHRoZSByYW5nZSBgMGAgdG8gYGJhc2UgLSAxYCwgb3IgYGJhc2VgIGlmXG5cdCAqIHRoZSBjb2RlIHBvaW50IGRvZXMgbm90IHJlcHJlc2VudCBhIHZhbHVlLlxuXHQgKi9cblx0ZnVuY3Rpb24gYmFzaWNUb0RpZ2l0KGNvZGVQb2ludCkge1xuXHRcdGlmIChjb2RlUG9pbnQgLSA0OCA8IDEwKSB7XG5cdFx0XHRyZXR1cm4gY29kZVBvaW50IC0gMjI7XG5cdFx0fVxuXHRcdGlmIChjb2RlUG9pbnQgLSA2NSA8IDI2KSB7XG5cdFx0XHRyZXR1cm4gY29kZVBvaW50IC0gNjU7XG5cdFx0fVxuXHRcdGlmIChjb2RlUG9pbnQgLSA5NyA8IDI2KSB7XG5cdFx0XHRyZXR1cm4gY29kZVBvaW50IC0gOTc7XG5cdFx0fVxuXHRcdHJldHVybiBiYXNlO1xuXHR9XG5cblx0LyoqXG5cdCAqIENvbnZlcnRzIGEgZGlnaXQvaW50ZWdlciBpbnRvIGEgYmFzaWMgY29kZSBwb2ludC5cblx0ICogQHNlZSBgYmFzaWNUb0RpZ2l0KClgXG5cdCAqIEBwcml2YXRlXG5cdCAqIEBwYXJhbSB7TnVtYmVyfSBkaWdpdCBUaGUgbnVtZXJpYyB2YWx1ZSBvZiBhIGJhc2ljIGNvZGUgcG9pbnQuXG5cdCAqIEByZXR1cm5zIHtOdW1iZXJ9IFRoZSBiYXNpYyBjb2RlIHBvaW50IHdob3NlIHZhbHVlICh3aGVuIHVzZWQgZm9yXG5cdCAqIHJlcHJlc2VudGluZyBpbnRlZ2VycykgaXMgYGRpZ2l0YCwgd2hpY2ggbmVlZHMgdG8gYmUgaW4gdGhlIHJhbmdlXG5cdCAqIGAwYCB0byBgYmFzZSAtIDFgLiBJZiBgZmxhZ2AgaXMgbm9uLXplcm8sIHRoZSB1cHBlcmNhc2UgZm9ybSBpc1xuXHQgKiB1c2VkOyBlbHNlLCB0aGUgbG93ZXJjYXNlIGZvcm0gaXMgdXNlZC4gVGhlIGJlaGF2aW9yIGlzIHVuZGVmaW5lZFxuXHQgKiBpZiBgZmxhZ2AgaXMgbm9uLXplcm8gYW5kIGBkaWdpdGAgaGFzIG5vIHVwcGVyY2FzZSBmb3JtLlxuXHQgKi9cblx0ZnVuY3Rpb24gZGlnaXRUb0Jhc2ljKGRpZ2l0LCBmbGFnKSB7XG5cdFx0Ly8gIDAuLjI1IG1hcCB0byBBU0NJSSBhLi56IG9yIEEuLlpcblx0XHQvLyAyNi4uMzUgbWFwIHRvIEFTQ0lJIDAuLjlcblx0XHRyZXR1cm4gZGlnaXQgKyAyMiArIDc1ICogKGRpZ2l0IDwgMjYpIC0gKChmbGFnICE9IDApIDw8IDUpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEJpYXMgYWRhcHRhdGlvbiBmdW5jdGlvbiBhcyBwZXIgc2VjdGlvbiAzLjQgb2YgUkZDIDM0OTIuXG5cdCAqIGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmMzNDkyI3NlY3Rpb24tMy40XG5cdCAqIEBwcml2YXRlXG5cdCAqL1xuXHRmdW5jdGlvbiBhZGFwdChkZWx0YSwgbnVtUG9pbnRzLCBmaXJzdFRpbWUpIHtcblx0XHR2YXIgayA9IDA7XG5cdFx0ZGVsdGEgPSBmaXJzdFRpbWUgPyBmbG9vcihkZWx0YSAvIGRhbXApIDogZGVsdGEgPj4gMTtcblx0XHRkZWx0YSArPSBmbG9vcihkZWx0YSAvIG51bVBvaW50cyk7XG5cdFx0Zm9yICgvKiBubyBpbml0aWFsaXphdGlvbiAqLzsgZGVsdGEgPiBiYXNlTWludXNUTWluICogdE1heCA+PiAxOyBrICs9IGJhc2UpIHtcblx0XHRcdGRlbHRhID0gZmxvb3IoZGVsdGEgLyBiYXNlTWludXNUTWluKTtcblx0XHR9XG5cdFx0cmV0dXJuIGZsb29yKGsgKyAoYmFzZU1pbnVzVE1pbiArIDEpICogZGVsdGEgLyAoZGVsdGEgKyBza2V3KSk7XG5cdH1cblxuXHQvKipcblx0ICogQ29udmVydHMgYSBQdW55Y29kZSBzdHJpbmcgb2YgQVNDSUktb25seSBzeW1ib2xzIHRvIGEgc3RyaW5nIG9mIFVuaWNvZGVcblx0ICogc3ltYm9scy5cblx0ICogQG1lbWJlck9mIHB1bnljb2RlXG5cdCAqIEBwYXJhbSB7U3RyaW5nfSBpbnB1dCBUaGUgUHVueWNvZGUgc3RyaW5nIG9mIEFTQ0lJLW9ubHkgc3ltYm9scy5cblx0ICogQHJldHVybnMge1N0cmluZ30gVGhlIHJlc3VsdGluZyBzdHJpbmcgb2YgVW5pY29kZSBzeW1ib2xzLlxuXHQgKi9cblx0ZnVuY3Rpb24gZGVjb2RlKGlucHV0KSB7XG5cdFx0Ly8gRG9uJ3QgdXNlIFVDUy0yXG5cdFx0dmFyIG91dHB1dCA9IFtdLFxuXHRcdCAgICBpbnB1dExlbmd0aCA9IGlucHV0Lmxlbmd0aCxcblx0XHQgICAgb3V0LFxuXHRcdCAgICBpID0gMCxcblx0XHQgICAgbiA9IGluaXRpYWxOLFxuXHRcdCAgICBiaWFzID0gaW5pdGlhbEJpYXMsXG5cdFx0ICAgIGJhc2ljLFxuXHRcdCAgICBqLFxuXHRcdCAgICBpbmRleCxcblx0XHQgICAgb2xkaSxcblx0XHQgICAgdyxcblx0XHQgICAgayxcblx0XHQgICAgZGlnaXQsXG5cdFx0ICAgIHQsXG5cdFx0ICAgIC8qKiBDYWNoZWQgY2FsY3VsYXRpb24gcmVzdWx0cyAqL1xuXHRcdCAgICBiYXNlTWludXNUO1xuXG5cdFx0Ly8gSGFuZGxlIHRoZSBiYXNpYyBjb2RlIHBvaW50czogbGV0IGBiYXNpY2AgYmUgdGhlIG51bWJlciBvZiBpbnB1dCBjb2RlXG5cdFx0Ly8gcG9pbnRzIGJlZm9yZSB0aGUgbGFzdCBkZWxpbWl0ZXIsIG9yIGAwYCBpZiB0aGVyZSBpcyBub25lLCB0aGVuIGNvcHlcblx0XHQvLyB0aGUgZmlyc3QgYmFzaWMgY29kZSBwb2ludHMgdG8gdGhlIG91dHB1dC5cblxuXHRcdGJhc2ljID0gaW5wdXQubGFzdEluZGV4T2YoZGVsaW1pdGVyKTtcblx0XHRpZiAoYmFzaWMgPCAwKSB7XG5cdFx0XHRiYXNpYyA9IDA7XG5cdFx0fVxuXG5cdFx0Zm9yIChqID0gMDsgaiA8IGJhc2ljOyArK2opIHtcblx0XHRcdC8vIGlmIGl0J3Mgbm90IGEgYmFzaWMgY29kZSBwb2ludFxuXHRcdFx0aWYgKGlucHV0LmNoYXJDb2RlQXQoaikgPj0gMHg4MCkge1xuXHRcdFx0XHRlcnJvcignbm90LWJhc2ljJyk7XG5cdFx0XHR9XG5cdFx0XHRvdXRwdXQucHVzaChpbnB1dC5jaGFyQ29kZUF0KGopKTtcblx0XHR9XG5cblx0XHQvLyBNYWluIGRlY29kaW5nIGxvb3A6IHN0YXJ0IGp1c3QgYWZ0ZXIgdGhlIGxhc3QgZGVsaW1pdGVyIGlmIGFueSBiYXNpYyBjb2RlXG5cdFx0Ly8gcG9pbnRzIHdlcmUgY29waWVkOyBzdGFydCBhdCB0aGUgYmVnaW5uaW5nIG90aGVyd2lzZS5cblxuXHRcdGZvciAoaW5kZXggPSBiYXNpYyA+IDAgPyBiYXNpYyArIDEgOiAwOyBpbmRleCA8IGlucHV0TGVuZ3RoOyAvKiBubyBmaW5hbCBleHByZXNzaW9uICovKSB7XG5cblx0XHRcdC8vIGBpbmRleGAgaXMgdGhlIGluZGV4IG9mIHRoZSBuZXh0IGNoYXJhY3RlciB0byBiZSBjb25zdW1lZC5cblx0XHRcdC8vIERlY29kZSBhIGdlbmVyYWxpemVkIHZhcmlhYmxlLWxlbmd0aCBpbnRlZ2VyIGludG8gYGRlbHRhYCxcblx0XHRcdC8vIHdoaWNoIGdldHMgYWRkZWQgdG8gYGlgLiBUaGUgb3ZlcmZsb3cgY2hlY2tpbmcgaXMgZWFzaWVyXG5cdFx0XHQvLyBpZiB3ZSBpbmNyZWFzZSBgaWAgYXMgd2UgZ28sIHRoZW4gc3VidHJhY3Qgb2ZmIGl0cyBzdGFydGluZ1xuXHRcdFx0Ly8gdmFsdWUgYXQgdGhlIGVuZCB0byBvYnRhaW4gYGRlbHRhYC5cblx0XHRcdGZvciAob2xkaSA9IGksIHcgPSAxLCBrID0gYmFzZTsgLyogbm8gY29uZGl0aW9uICovOyBrICs9IGJhc2UpIHtcblxuXHRcdFx0XHRpZiAoaW5kZXggPj0gaW5wdXRMZW5ndGgpIHtcblx0XHRcdFx0XHRlcnJvcignaW52YWxpZC1pbnB1dCcpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0ZGlnaXQgPSBiYXNpY1RvRGlnaXQoaW5wdXQuY2hhckNvZGVBdChpbmRleCsrKSk7XG5cblx0XHRcdFx0aWYgKGRpZ2l0ID49IGJhc2UgfHwgZGlnaXQgPiBmbG9vcigobWF4SW50IC0gaSkgLyB3KSkge1xuXHRcdFx0XHRcdGVycm9yKCdvdmVyZmxvdycpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0aSArPSBkaWdpdCAqIHc7XG5cdFx0XHRcdHQgPSBrIDw9IGJpYXMgPyB0TWluIDogKGsgPj0gYmlhcyArIHRNYXggPyB0TWF4IDogayAtIGJpYXMpO1xuXG5cdFx0XHRcdGlmIChkaWdpdCA8IHQpIHtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGJhc2VNaW51c1QgPSBiYXNlIC0gdDtcblx0XHRcdFx0aWYgKHcgPiBmbG9vcihtYXhJbnQgLyBiYXNlTWludXNUKSkge1xuXHRcdFx0XHRcdGVycm9yKCdvdmVyZmxvdycpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0dyAqPSBiYXNlTWludXNUO1xuXG5cdFx0XHR9XG5cblx0XHRcdG91dCA9IG91dHB1dC5sZW5ndGggKyAxO1xuXHRcdFx0YmlhcyA9IGFkYXB0KGkgLSBvbGRpLCBvdXQsIG9sZGkgPT0gMCk7XG5cblx0XHRcdC8vIGBpYCB3YXMgc3VwcG9zZWQgdG8gd3JhcCBhcm91bmQgZnJvbSBgb3V0YCB0byBgMGAsXG5cdFx0XHQvLyBpbmNyZW1lbnRpbmcgYG5gIGVhY2ggdGltZSwgc28gd2UnbGwgZml4IHRoYXQgbm93OlxuXHRcdFx0aWYgKGZsb29yKGkgLyBvdXQpID4gbWF4SW50IC0gbikge1xuXHRcdFx0XHRlcnJvcignb3ZlcmZsb3cnKTtcblx0XHRcdH1cblxuXHRcdFx0biArPSBmbG9vcihpIC8gb3V0KTtcblx0XHRcdGkgJT0gb3V0O1xuXG5cdFx0XHQvLyBJbnNlcnQgYG5gIGF0IHBvc2l0aW9uIGBpYCBvZiB0aGUgb3V0cHV0XG5cdFx0XHRvdXRwdXQuc3BsaWNlKGkrKywgMCwgbik7XG5cblx0XHR9XG5cblx0XHRyZXR1cm4gdWNzMmVuY29kZShvdXRwdXQpO1xuXHR9XG5cblx0LyoqXG5cdCAqIENvbnZlcnRzIGEgc3RyaW5nIG9mIFVuaWNvZGUgc3ltYm9scyAoZS5nLiBhIGRvbWFpbiBuYW1lIGxhYmVsKSB0byBhXG5cdCAqIFB1bnljb2RlIHN0cmluZyBvZiBBU0NJSS1vbmx5IHN5bWJvbHMuXG5cdCAqIEBtZW1iZXJPZiBwdW55Y29kZVxuXHQgKiBAcGFyYW0ge1N0cmluZ30gaW5wdXQgVGhlIHN0cmluZyBvZiBVbmljb2RlIHN5bWJvbHMuXG5cdCAqIEByZXR1cm5zIHtTdHJpbmd9IFRoZSByZXN1bHRpbmcgUHVueWNvZGUgc3RyaW5nIG9mIEFTQ0lJLW9ubHkgc3ltYm9scy5cblx0ICovXG5cdGZ1bmN0aW9uIGVuY29kZShpbnB1dCkge1xuXHRcdHZhciBuLFxuXHRcdCAgICBkZWx0YSxcblx0XHQgICAgaGFuZGxlZENQQ291bnQsXG5cdFx0ICAgIGJhc2ljTGVuZ3RoLFxuXHRcdCAgICBiaWFzLFxuXHRcdCAgICBqLFxuXHRcdCAgICBtLFxuXHRcdCAgICBxLFxuXHRcdCAgICBrLFxuXHRcdCAgICB0LFxuXHRcdCAgICBjdXJyZW50VmFsdWUsXG5cdFx0ICAgIG91dHB1dCA9IFtdLFxuXHRcdCAgICAvKiogYGlucHV0TGVuZ3RoYCB3aWxsIGhvbGQgdGhlIG51bWJlciBvZiBjb2RlIHBvaW50cyBpbiBgaW5wdXRgLiAqL1xuXHRcdCAgICBpbnB1dExlbmd0aCxcblx0XHQgICAgLyoqIENhY2hlZCBjYWxjdWxhdGlvbiByZXN1bHRzICovXG5cdFx0ICAgIGhhbmRsZWRDUENvdW50UGx1c09uZSxcblx0XHQgICAgYmFzZU1pbnVzVCxcblx0XHQgICAgcU1pbnVzVDtcblxuXHRcdC8vIENvbnZlcnQgdGhlIGlucHV0IGluIFVDUy0yIHRvIFVuaWNvZGVcblx0XHRpbnB1dCA9IHVjczJkZWNvZGUoaW5wdXQpO1xuXG5cdFx0Ly8gQ2FjaGUgdGhlIGxlbmd0aFxuXHRcdGlucHV0TGVuZ3RoID0gaW5wdXQubGVuZ3RoO1xuXG5cdFx0Ly8gSW5pdGlhbGl6ZSB0aGUgc3RhdGVcblx0XHRuID0gaW5pdGlhbE47XG5cdFx0ZGVsdGEgPSAwO1xuXHRcdGJpYXMgPSBpbml0aWFsQmlhcztcblxuXHRcdC8vIEhhbmRsZSB0aGUgYmFzaWMgY29kZSBwb2ludHNcblx0XHRmb3IgKGogPSAwOyBqIDwgaW5wdXRMZW5ndGg7ICsraikge1xuXHRcdFx0Y3VycmVudFZhbHVlID0gaW5wdXRbal07XG5cdFx0XHRpZiAoY3VycmVudFZhbHVlIDwgMHg4MCkge1xuXHRcdFx0XHRvdXRwdXQucHVzaChzdHJpbmdGcm9tQ2hhckNvZGUoY3VycmVudFZhbHVlKSk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0aGFuZGxlZENQQ291bnQgPSBiYXNpY0xlbmd0aCA9IG91dHB1dC5sZW5ndGg7XG5cblx0XHQvLyBgaGFuZGxlZENQQ291bnRgIGlzIHRoZSBudW1iZXIgb2YgY29kZSBwb2ludHMgdGhhdCBoYXZlIGJlZW4gaGFuZGxlZDtcblx0XHQvLyBgYmFzaWNMZW5ndGhgIGlzIHRoZSBudW1iZXIgb2YgYmFzaWMgY29kZSBwb2ludHMuXG5cblx0XHQvLyBGaW5pc2ggdGhlIGJhc2ljIHN0cmluZyAtIGlmIGl0IGlzIG5vdCBlbXB0eSAtIHdpdGggYSBkZWxpbWl0ZXJcblx0XHRpZiAoYmFzaWNMZW5ndGgpIHtcblx0XHRcdG91dHB1dC5wdXNoKGRlbGltaXRlcik7XG5cdFx0fVxuXG5cdFx0Ly8gTWFpbiBlbmNvZGluZyBsb29wOlxuXHRcdHdoaWxlIChoYW5kbGVkQ1BDb3VudCA8IGlucHV0TGVuZ3RoKSB7XG5cblx0XHRcdC8vIEFsbCBub24tYmFzaWMgY29kZSBwb2ludHMgPCBuIGhhdmUgYmVlbiBoYW5kbGVkIGFscmVhZHkuIEZpbmQgdGhlIG5leHRcblx0XHRcdC8vIGxhcmdlciBvbmU6XG5cdFx0XHRmb3IgKG0gPSBtYXhJbnQsIGogPSAwOyBqIDwgaW5wdXRMZW5ndGg7ICsraikge1xuXHRcdFx0XHRjdXJyZW50VmFsdWUgPSBpbnB1dFtqXTtcblx0XHRcdFx0aWYgKGN1cnJlbnRWYWx1ZSA+PSBuICYmIGN1cnJlbnRWYWx1ZSA8IG0pIHtcblx0XHRcdFx0XHRtID0gY3VycmVudFZhbHVlO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdC8vIEluY3JlYXNlIGBkZWx0YWAgZW5vdWdoIHRvIGFkdmFuY2UgdGhlIGRlY29kZXIncyA8bixpPiBzdGF0ZSB0byA8bSwwPixcblx0XHRcdC8vIGJ1dCBndWFyZCBhZ2FpbnN0IG92ZXJmbG93XG5cdFx0XHRoYW5kbGVkQ1BDb3VudFBsdXNPbmUgPSBoYW5kbGVkQ1BDb3VudCArIDE7XG5cdFx0XHRpZiAobSAtIG4gPiBmbG9vcigobWF4SW50IC0gZGVsdGEpIC8gaGFuZGxlZENQQ291bnRQbHVzT25lKSkge1xuXHRcdFx0XHRlcnJvcignb3ZlcmZsb3cnKTtcblx0XHRcdH1cblxuXHRcdFx0ZGVsdGEgKz0gKG0gLSBuKSAqIGhhbmRsZWRDUENvdW50UGx1c09uZTtcblx0XHRcdG4gPSBtO1xuXG5cdFx0XHRmb3IgKGogPSAwOyBqIDwgaW5wdXRMZW5ndGg7ICsraikge1xuXHRcdFx0XHRjdXJyZW50VmFsdWUgPSBpbnB1dFtqXTtcblxuXHRcdFx0XHRpZiAoY3VycmVudFZhbHVlIDwgbiAmJiArK2RlbHRhID4gbWF4SW50KSB7XG5cdFx0XHRcdFx0ZXJyb3IoJ292ZXJmbG93Jyk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZiAoY3VycmVudFZhbHVlID09IG4pIHtcblx0XHRcdFx0XHQvLyBSZXByZXNlbnQgZGVsdGEgYXMgYSBnZW5lcmFsaXplZCB2YXJpYWJsZS1sZW5ndGggaW50ZWdlclxuXHRcdFx0XHRcdGZvciAocSA9IGRlbHRhLCBrID0gYmFzZTsgLyogbm8gY29uZGl0aW9uICovOyBrICs9IGJhc2UpIHtcblx0XHRcdFx0XHRcdHQgPSBrIDw9IGJpYXMgPyB0TWluIDogKGsgPj0gYmlhcyArIHRNYXggPyB0TWF4IDogayAtIGJpYXMpO1xuXHRcdFx0XHRcdFx0aWYgKHEgPCB0KSB7XG5cdFx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0cU1pbnVzVCA9IHEgLSB0O1xuXHRcdFx0XHRcdFx0YmFzZU1pbnVzVCA9IGJhc2UgLSB0O1xuXHRcdFx0XHRcdFx0b3V0cHV0LnB1c2goXG5cdFx0XHRcdFx0XHRcdHN0cmluZ0Zyb21DaGFyQ29kZShkaWdpdFRvQmFzaWModCArIHFNaW51c1QgJSBiYXNlTWludXNULCAwKSlcblx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0XHRxID0gZmxvb3IocU1pbnVzVCAvIGJhc2VNaW51c1QpO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdG91dHB1dC5wdXNoKHN0cmluZ0Zyb21DaGFyQ29kZShkaWdpdFRvQmFzaWMocSwgMCkpKTtcblx0XHRcdFx0XHRiaWFzID0gYWRhcHQoZGVsdGEsIGhhbmRsZWRDUENvdW50UGx1c09uZSwgaGFuZGxlZENQQ291bnQgPT0gYmFzaWNMZW5ndGgpO1xuXHRcdFx0XHRcdGRlbHRhID0gMDtcblx0XHRcdFx0XHQrK2hhbmRsZWRDUENvdW50O1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdCsrZGVsdGE7XG5cdFx0XHQrK247XG5cblx0XHR9XG5cdFx0cmV0dXJuIG91dHB1dC5qb2luKCcnKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBDb252ZXJ0cyBhIFB1bnljb2RlIHN0cmluZyByZXByZXNlbnRpbmcgYSBkb21haW4gbmFtZSBvciBhbiBlbWFpbCBhZGRyZXNzXG5cdCAqIHRvIFVuaWNvZGUuIE9ubHkgdGhlIFB1bnljb2RlZCBwYXJ0cyBvZiB0aGUgaW5wdXQgd2lsbCBiZSBjb252ZXJ0ZWQsIGkuZS5cblx0ICogaXQgZG9lc24ndCBtYXR0ZXIgaWYgeW91IGNhbGwgaXQgb24gYSBzdHJpbmcgdGhhdCBoYXMgYWxyZWFkeSBiZWVuXG5cdCAqIGNvbnZlcnRlZCB0byBVbmljb2RlLlxuXHQgKiBAbWVtYmVyT2YgcHVueWNvZGVcblx0ICogQHBhcmFtIHtTdHJpbmd9IGlucHV0IFRoZSBQdW55Y29kZWQgZG9tYWluIG5hbWUgb3IgZW1haWwgYWRkcmVzcyB0b1xuXHQgKiBjb252ZXJ0IHRvIFVuaWNvZGUuXG5cdCAqIEByZXR1cm5zIHtTdHJpbmd9IFRoZSBVbmljb2RlIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBnaXZlbiBQdW55Y29kZVxuXHQgKiBzdHJpbmcuXG5cdCAqL1xuXHRmdW5jdGlvbiB0b1VuaWNvZGUoaW5wdXQpIHtcblx0XHRyZXR1cm4gbWFwRG9tYWluKGlucHV0LCBmdW5jdGlvbihzdHJpbmcpIHtcblx0XHRcdHJldHVybiByZWdleFB1bnljb2RlLnRlc3Qoc3RyaW5nKVxuXHRcdFx0XHQ/IGRlY29kZShzdHJpbmcuc2xpY2UoNCkudG9Mb3dlckNhc2UoKSlcblx0XHRcdFx0OiBzdHJpbmc7XG5cdFx0fSk7XG5cdH1cblxuXHQvKipcblx0ICogQ29udmVydHMgYSBVbmljb2RlIHN0cmluZyByZXByZXNlbnRpbmcgYSBkb21haW4gbmFtZSBvciBhbiBlbWFpbCBhZGRyZXNzIHRvXG5cdCAqIFB1bnljb2RlLiBPbmx5IHRoZSBub24tQVNDSUkgcGFydHMgb2YgdGhlIGRvbWFpbiBuYW1lIHdpbGwgYmUgY29udmVydGVkLFxuXHQgKiBpLmUuIGl0IGRvZXNuJ3QgbWF0dGVyIGlmIHlvdSBjYWxsIGl0IHdpdGggYSBkb21haW4gdGhhdCdzIGFscmVhZHkgaW5cblx0ICogQVNDSUkuXG5cdCAqIEBtZW1iZXJPZiBwdW55Y29kZVxuXHQgKiBAcGFyYW0ge1N0cmluZ30gaW5wdXQgVGhlIGRvbWFpbiBuYW1lIG9yIGVtYWlsIGFkZHJlc3MgdG8gY29udmVydCwgYXMgYVxuXHQgKiBVbmljb2RlIHN0cmluZy5cblx0ICogQHJldHVybnMge1N0cmluZ30gVGhlIFB1bnljb2RlIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBnaXZlbiBkb21haW4gbmFtZSBvclxuXHQgKiBlbWFpbCBhZGRyZXNzLlxuXHQgKi9cblx0ZnVuY3Rpb24gdG9BU0NJSShpbnB1dCkge1xuXHRcdHJldHVybiBtYXBEb21haW4oaW5wdXQsIGZ1bmN0aW9uKHN0cmluZykge1xuXHRcdFx0cmV0dXJuIHJlZ2V4Tm9uQVNDSUkudGVzdChzdHJpbmcpXG5cdFx0XHRcdD8gJ3huLS0nICsgZW5jb2RlKHN0cmluZylcblx0XHRcdFx0OiBzdHJpbmc7XG5cdFx0fSk7XG5cdH1cblxuXHQvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cblxuXHQvKiogRGVmaW5lIHRoZSBwdWJsaWMgQVBJICovXG5cdHB1bnljb2RlID0ge1xuXHRcdC8qKlxuXHRcdCAqIEEgc3RyaW5nIHJlcHJlc2VudGluZyB0aGUgY3VycmVudCBQdW55Y29kZS5qcyB2ZXJzaW9uIG51bWJlci5cblx0XHQgKiBAbWVtYmVyT2YgcHVueWNvZGVcblx0XHQgKiBAdHlwZSBTdHJpbmdcblx0XHQgKi9cblx0XHQndmVyc2lvbic6ICcxLjMuMicsXG5cdFx0LyoqXG5cdFx0ICogQW4gb2JqZWN0IG9mIG1ldGhvZHMgdG8gY29udmVydCBmcm9tIEphdmFTY3JpcHQncyBpbnRlcm5hbCBjaGFyYWN0ZXJcblx0XHQgKiByZXByZXNlbnRhdGlvbiAoVUNTLTIpIHRvIFVuaWNvZGUgY29kZSBwb2ludHMsIGFuZCBiYWNrLlxuXHRcdCAqIEBzZWUgPGh0dHBzOi8vbWF0aGlhc2J5bmVucy5iZS9ub3Rlcy9qYXZhc2NyaXB0LWVuY29kaW5nPlxuXHRcdCAqIEBtZW1iZXJPZiBwdW55Y29kZVxuXHRcdCAqIEB0eXBlIE9iamVjdFxuXHRcdCAqL1xuXHRcdCd1Y3MyJzoge1xuXHRcdFx0J2RlY29kZSc6IHVjczJkZWNvZGUsXG5cdFx0XHQnZW5jb2RlJzogdWNzMmVuY29kZVxuXHRcdH0sXG5cdFx0J2RlY29kZSc6IGRlY29kZSxcblx0XHQnZW5jb2RlJzogZW5jb2RlLFxuXHRcdCd0b0FTQ0lJJzogdG9BU0NJSSxcblx0XHQndG9Vbmljb2RlJzogdG9Vbmljb2RlXG5cdH07XG5cblx0LyoqIEV4cG9zZSBgcHVueWNvZGVgICovXG5cdC8vIFNvbWUgQU1EIGJ1aWxkIG9wdGltaXplcnMsIGxpa2Ugci5qcywgY2hlY2sgZm9yIHNwZWNpZmljIGNvbmRpdGlvbiBwYXR0ZXJuc1xuXHQvLyBsaWtlIHRoZSBmb2xsb3dpbmc6XG5cdGlmIChcblx0XHR0eXBlb2YgZGVmaW5lID09ICdmdW5jdGlvbicgJiZcblx0XHR0eXBlb2YgZGVmaW5lLmFtZCA9PSAnb2JqZWN0JyAmJlxuXHRcdGRlZmluZS5hbWRcblx0KSB7XG5cdFx0ZGVmaW5lKCdwdW55Y29kZScsIGZ1bmN0aW9uKCkge1xuXHRcdFx0cmV0dXJuIHB1bnljb2RlO1xuXHRcdH0pO1xuXHR9IGVsc2UgaWYgKGZyZWVFeHBvcnRzICYmIGZyZWVNb2R1bGUpIHtcblx0XHRpZiAobW9kdWxlLmV4cG9ydHMgPT0gZnJlZUV4cG9ydHMpIHtcblx0XHRcdC8vIGluIE5vZGUuanMsIGlvLmpzLCBvciBSaW5nb0pTIHYwLjguMCtcblx0XHRcdGZyZWVNb2R1bGUuZXhwb3J0cyA9IHB1bnljb2RlO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHQvLyBpbiBOYXJ3aGFsIG9yIFJpbmdvSlMgdjAuNy4wLVxuXHRcdFx0Zm9yIChrZXkgaW4gcHVueWNvZGUpIHtcblx0XHRcdFx0cHVueWNvZGUuaGFzT3duUHJvcGVydHkoa2V5KSAmJiAoZnJlZUV4cG9ydHNba2V5XSA9IHB1bnljb2RlW2tleV0pO1xuXHRcdFx0fVxuXHRcdH1cblx0fSBlbHNlIHtcblx0XHQvLyBpbiBSaGlubyBvciBhIHdlYiBicm93c2VyXG5cdFx0cm9vdC5wdW55Y29kZSA9IHB1bnljb2RlO1xuXHR9XG5cbn0odGhpcykpO1xuIiwiLy8gQ29weXJpZ2h0IEpveWVudCwgSW5jLiBhbmQgb3RoZXIgTm9kZSBjb250cmlidXRvcnMuXG4vL1xuLy8gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGFcbi8vIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGVcbi8vIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZ1xuLy8gd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLFxuLy8gZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdFxuLy8gcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlXG4vLyBmb2xsb3dpbmcgY29uZGl0aW9uczpcbi8vXG4vLyBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZFxuLy8gaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4vL1xuLy8gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTU1xuLy8gT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRlxuLy8gTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTlxuLy8gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sXG4vLyBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1Jcbi8vIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEVcbi8vIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG5cbid1c2Ugc3RyaWN0JztcblxuLy8gSWYgb2JqLmhhc093blByb3BlcnR5IGhhcyBiZWVuIG92ZXJyaWRkZW4sIHRoZW4gY2FsbGluZ1xuLy8gb2JqLmhhc093blByb3BlcnR5KHByb3ApIHdpbGwgYnJlYWsuXG4vLyBTZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9qb3llbnQvbm9kZS9pc3N1ZXMvMTcwN1xuZnVuY3Rpb24gaGFzT3duUHJvcGVydHkob2JqLCBwcm9wKSB7XG4gIHJldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqLCBwcm9wKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihxcywgc2VwLCBlcSwgb3B0aW9ucykge1xuICBzZXAgPSBzZXAgfHwgJyYnO1xuICBlcSA9IGVxIHx8ICc9JztcbiAgdmFyIG9iaiA9IHt9O1xuXG4gIGlmICh0eXBlb2YgcXMgIT09ICdzdHJpbmcnIHx8IHFzLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiBvYmo7XG4gIH1cblxuICB2YXIgcmVnZXhwID0gL1xcKy9nO1xuICBxcyA9IHFzLnNwbGl0KHNlcCk7XG5cbiAgdmFyIG1heEtleXMgPSAxMDAwO1xuICBpZiAob3B0aW9ucyAmJiB0eXBlb2Ygb3B0aW9ucy5tYXhLZXlzID09PSAnbnVtYmVyJykge1xuICAgIG1heEtleXMgPSBvcHRpb25zLm1heEtleXM7XG4gIH1cblxuICB2YXIgbGVuID0gcXMubGVuZ3RoO1xuICAvLyBtYXhLZXlzIDw9IDAgbWVhbnMgdGhhdCB3ZSBzaG91bGQgbm90IGxpbWl0IGtleXMgY291bnRcbiAgaWYgKG1heEtleXMgPiAwICYmIGxlbiA+IG1heEtleXMpIHtcbiAgICBsZW4gPSBtYXhLZXlzO1xuICB9XG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47ICsraSkge1xuICAgIHZhciB4ID0gcXNbaV0ucmVwbGFjZShyZWdleHAsICclMjAnKSxcbiAgICAgICAgaWR4ID0geC5pbmRleE9mKGVxKSxcbiAgICAgICAga3N0ciwgdnN0ciwgaywgdjtcblxuICAgIGlmIChpZHggPj0gMCkge1xuICAgICAga3N0ciA9IHguc3Vic3RyKDAsIGlkeCk7XG4gICAgICB2c3RyID0geC5zdWJzdHIoaWR4ICsgMSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGtzdHIgPSB4O1xuICAgICAgdnN0ciA9ICcnO1xuICAgIH1cblxuICAgIGsgPSBkZWNvZGVVUklDb21wb25lbnQoa3N0cik7XG4gICAgdiA9IGRlY29kZVVSSUNvbXBvbmVudCh2c3RyKTtcblxuICAgIGlmICghaGFzT3duUHJvcGVydHkob2JqLCBrKSkge1xuICAgICAgb2JqW2tdID0gdjtcbiAgICB9IGVsc2UgaWYgKGlzQXJyYXkob2JqW2tdKSkge1xuICAgICAgb2JqW2tdLnB1c2godik7XG4gICAgfSBlbHNlIHtcbiAgICAgIG9ialtrXSA9IFtvYmpba10sIHZdO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBvYmo7XG59O1xuXG52YXIgaXNBcnJheSA9IEFycmF5LmlzQXJyYXkgfHwgZnVuY3Rpb24gKHhzKSB7XG4gIHJldHVybiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoeHMpID09PSAnW29iamVjdCBBcnJheV0nO1xufTtcbiIsIi8vIENvcHlyaWdodCBKb3llbnQsIEluYy4gYW5kIG90aGVyIE5vZGUgY29udHJpYnV0b3JzLlxuLy9cbi8vIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhXG4vLyBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlXG4vLyBcIlNvZnR3YXJlXCIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmdcbi8vIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCxcbi8vIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXRcbi8vIHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZVxuLy8gZm9sbG93aW5nIGNvbmRpdGlvbnM6XG4vL1xuLy8gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWRcbi8vIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuLy9cbi8vIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1Ncbi8vIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0Zcbi8vIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU5cbi8vIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLFxuLy8gREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SXG4vLyBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFXG4vLyBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLlxuXG4ndXNlIHN0cmljdCc7XG5cbnZhciBzdHJpbmdpZnlQcmltaXRpdmUgPSBmdW5jdGlvbih2KSB7XG4gIHN3aXRjaCAodHlwZW9mIHYpIHtcbiAgICBjYXNlICdzdHJpbmcnOlxuICAgICAgcmV0dXJuIHY7XG5cbiAgICBjYXNlICdib29sZWFuJzpcbiAgICAgIHJldHVybiB2ID8gJ3RydWUnIDogJ2ZhbHNlJztcblxuICAgIGNhc2UgJ251bWJlcic6XG4gICAgICByZXR1cm4gaXNGaW5pdGUodikgPyB2IDogJyc7XG5cbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuICcnO1xuICB9XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKG9iaiwgc2VwLCBlcSwgbmFtZSkge1xuICBzZXAgPSBzZXAgfHwgJyYnO1xuICBlcSA9IGVxIHx8ICc9JztcbiAgaWYgKG9iaiA9PT0gbnVsbCkge1xuICAgIG9iaiA9IHVuZGVmaW5lZDtcbiAgfVxuXG4gIGlmICh0eXBlb2Ygb2JqID09PSAnb2JqZWN0Jykge1xuICAgIHJldHVybiBtYXAob2JqZWN0S2V5cyhvYmopLCBmdW5jdGlvbihrKSB7XG4gICAgICB2YXIga3MgPSBlbmNvZGVVUklDb21wb25lbnQoc3RyaW5naWZ5UHJpbWl0aXZlKGspKSArIGVxO1xuICAgICAgaWYgKGlzQXJyYXkob2JqW2tdKSkge1xuICAgICAgICByZXR1cm4gbWFwKG9ialtrXSwgZnVuY3Rpb24odikge1xuICAgICAgICAgIHJldHVybiBrcyArIGVuY29kZVVSSUNvbXBvbmVudChzdHJpbmdpZnlQcmltaXRpdmUodikpO1xuICAgICAgICB9KS5qb2luKHNlcCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4ga3MgKyBlbmNvZGVVUklDb21wb25lbnQoc3RyaW5naWZ5UHJpbWl0aXZlKG9ialtrXSkpO1xuICAgICAgfVxuICAgIH0pLmpvaW4oc2VwKTtcblxuICB9XG5cbiAgaWYgKCFuYW1lKSByZXR1cm4gJyc7XG4gIHJldHVybiBlbmNvZGVVUklDb21wb25lbnQoc3RyaW5naWZ5UHJpbWl0aXZlKG5hbWUpKSArIGVxICtcbiAgICAgICAgIGVuY29kZVVSSUNvbXBvbmVudChzdHJpbmdpZnlQcmltaXRpdmUob2JqKSk7XG59O1xuXG52YXIgaXNBcnJheSA9IEFycmF5LmlzQXJyYXkgfHwgZnVuY3Rpb24gKHhzKSB7XG4gIHJldHVybiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoeHMpID09PSAnW29iamVjdCBBcnJheV0nO1xufTtcblxuZnVuY3Rpb24gbWFwICh4cywgZikge1xuICBpZiAoeHMubWFwKSByZXR1cm4geHMubWFwKGYpO1xuICB2YXIgcmVzID0gW107XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgeHMubGVuZ3RoOyBpKyspIHtcbiAgICByZXMucHVzaChmKHhzW2ldLCBpKSk7XG4gIH1cbiAgcmV0dXJuIHJlcztcbn1cblxudmFyIG9iamVjdEtleXMgPSBPYmplY3Qua2V5cyB8fCBmdW5jdGlvbiAob2JqKSB7XG4gIHZhciByZXMgPSBbXTtcbiAgZm9yICh2YXIga2V5IGluIG9iaikge1xuICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqLCBrZXkpKSByZXMucHVzaChrZXkpO1xuICB9XG4gIHJldHVybiByZXM7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG5leHBvcnRzLmRlY29kZSA9IGV4cG9ydHMucGFyc2UgPSByZXF1aXJlKCcuL2RlY29kZScpO1xuZXhwb3J0cy5lbmNvZGUgPSBleHBvcnRzLnN0cmluZ2lmeSA9IHJlcXVpcmUoJy4vZW5jb2RlJyk7XG4iLCIvLyBDb3B5cmlnaHQgSm95ZW50LCBJbmMuIGFuZCBvdGhlciBOb2RlIGNvbnRyaWJ1dG9ycy5cbi8vXG4vLyBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYVxuLy8gY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZVxuLy8gXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nXG4vLyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsXG4vLyBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0XG4vLyBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGVcbi8vIGZvbGxvd2luZyBjb25kaXRpb25zOlxuLy9cbi8vIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkXG4vLyBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbi8vXG4vLyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTXG4vLyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GXG4vLyBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOXG4vLyBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSxcbi8vIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUlxuLy8gT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRVxuLy8gVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cblxudmFyIHB1bnljb2RlID0gcmVxdWlyZSgncHVueWNvZGUnKTtcblxuZXhwb3J0cy5wYXJzZSA9IHVybFBhcnNlO1xuZXhwb3J0cy5yZXNvbHZlID0gdXJsUmVzb2x2ZTtcbmV4cG9ydHMucmVzb2x2ZU9iamVjdCA9IHVybFJlc29sdmVPYmplY3Q7XG5leHBvcnRzLmZvcm1hdCA9IHVybEZvcm1hdDtcblxuZXhwb3J0cy5VcmwgPSBVcmw7XG5cbmZ1bmN0aW9uIFVybCgpIHtcbiAgdGhpcy5wcm90b2NvbCA9IG51bGw7XG4gIHRoaXMuc2xhc2hlcyA9IG51bGw7XG4gIHRoaXMuYXV0aCA9IG51bGw7XG4gIHRoaXMuaG9zdCA9IG51bGw7XG4gIHRoaXMucG9ydCA9IG51bGw7XG4gIHRoaXMuaG9zdG5hbWUgPSBudWxsO1xuICB0aGlzLmhhc2ggPSBudWxsO1xuICB0aGlzLnNlYXJjaCA9IG51bGw7XG4gIHRoaXMucXVlcnkgPSBudWxsO1xuICB0aGlzLnBhdGhuYW1lID0gbnVsbDtcbiAgdGhpcy5wYXRoID0gbnVsbDtcbiAgdGhpcy5ocmVmID0gbnVsbDtcbn1cblxuLy8gUmVmZXJlbmNlOiBSRkMgMzk4NiwgUkZDIDE4MDgsIFJGQyAyMzk2XG5cbi8vIGRlZmluZSB0aGVzZSBoZXJlIHNvIGF0IGxlYXN0IHRoZXkgb25seSBoYXZlIHRvIGJlXG4vLyBjb21waWxlZCBvbmNlIG9uIHRoZSBmaXJzdCBtb2R1bGUgbG9hZC5cbnZhciBwcm90b2NvbFBhdHRlcm4gPSAvXihbYS16MC05ListXSs6KS9pLFxuICAgIHBvcnRQYXR0ZXJuID0gLzpbMC05XSokLyxcblxuICAgIC8vIFJGQyAyMzk2OiBjaGFyYWN0ZXJzIHJlc2VydmVkIGZvciBkZWxpbWl0aW5nIFVSTHMuXG4gICAgLy8gV2UgYWN0dWFsbHkganVzdCBhdXRvLWVzY2FwZSB0aGVzZS5cbiAgICBkZWxpbXMgPSBbJzwnLCAnPicsICdcIicsICdgJywgJyAnLCAnXFxyJywgJ1xcbicsICdcXHQnXSxcblxuICAgIC8vIFJGQyAyMzk2OiBjaGFyYWN0ZXJzIG5vdCBhbGxvd2VkIGZvciB2YXJpb3VzIHJlYXNvbnMuXG4gICAgdW53aXNlID0gWyd7JywgJ30nLCAnfCcsICdcXFxcJywgJ14nLCAnYCddLmNvbmNhdChkZWxpbXMpLFxuXG4gICAgLy8gQWxsb3dlZCBieSBSRkNzLCBidXQgY2F1c2Ugb2YgWFNTIGF0dGFja3MuICBBbHdheXMgZXNjYXBlIHRoZXNlLlxuICAgIGF1dG9Fc2NhcGUgPSBbJ1xcJyddLmNvbmNhdCh1bndpc2UpLFxuICAgIC8vIENoYXJhY3RlcnMgdGhhdCBhcmUgbmV2ZXIgZXZlciBhbGxvd2VkIGluIGEgaG9zdG5hbWUuXG4gICAgLy8gTm90ZSB0aGF0IGFueSBpbnZhbGlkIGNoYXJzIGFyZSBhbHNvIGhhbmRsZWQsIGJ1dCB0aGVzZVxuICAgIC8vIGFyZSB0aGUgb25lcyB0aGF0IGFyZSAqZXhwZWN0ZWQqIHRvIGJlIHNlZW4sIHNvIHdlIGZhc3QtcGF0aFxuICAgIC8vIHRoZW0uXG4gICAgbm9uSG9zdENoYXJzID0gWyclJywgJy8nLCAnPycsICc7JywgJyMnXS5jb25jYXQoYXV0b0VzY2FwZSksXG4gICAgaG9zdEVuZGluZ0NoYXJzID0gWycvJywgJz8nLCAnIyddLFxuICAgIGhvc3RuYW1lTWF4TGVuID0gMjU1LFxuICAgIGhvc3RuYW1lUGFydFBhdHRlcm4gPSAvXlthLXowLTlBLVpfLV17MCw2M30kLyxcbiAgICBob3N0bmFtZVBhcnRTdGFydCA9IC9eKFthLXowLTlBLVpfLV17MCw2M30pKC4qKSQvLFxuICAgIC8vIHByb3RvY29scyB0aGF0IGNhbiBhbGxvdyBcInVuc2FmZVwiIGFuZCBcInVud2lzZVwiIGNoYXJzLlxuICAgIHVuc2FmZVByb3RvY29sID0ge1xuICAgICAgJ2phdmFzY3JpcHQnOiB0cnVlLFxuICAgICAgJ2phdmFzY3JpcHQ6JzogdHJ1ZVxuICAgIH0sXG4gICAgLy8gcHJvdG9jb2xzIHRoYXQgbmV2ZXIgaGF2ZSBhIGhvc3RuYW1lLlxuICAgIGhvc3RsZXNzUHJvdG9jb2wgPSB7XG4gICAgICAnamF2YXNjcmlwdCc6IHRydWUsXG4gICAgICAnamF2YXNjcmlwdDonOiB0cnVlXG4gICAgfSxcbiAgICAvLyBwcm90b2NvbHMgdGhhdCBhbHdheXMgY29udGFpbiBhIC8vIGJpdC5cbiAgICBzbGFzaGVkUHJvdG9jb2wgPSB7XG4gICAgICAnaHR0cCc6IHRydWUsXG4gICAgICAnaHR0cHMnOiB0cnVlLFxuICAgICAgJ2Z0cCc6IHRydWUsXG4gICAgICAnZ29waGVyJzogdHJ1ZSxcbiAgICAgICdmaWxlJzogdHJ1ZSxcbiAgICAgICdodHRwOic6IHRydWUsXG4gICAgICAnaHR0cHM6JzogdHJ1ZSxcbiAgICAgICdmdHA6JzogdHJ1ZSxcbiAgICAgICdnb3BoZXI6JzogdHJ1ZSxcbiAgICAgICdmaWxlOic6IHRydWVcbiAgICB9LFxuICAgIHF1ZXJ5c3RyaW5nID0gcmVxdWlyZSgncXVlcnlzdHJpbmcnKTtcblxuZnVuY3Rpb24gdXJsUGFyc2UodXJsLCBwYXJzZVF1ZXJ5U3RyaW5nLCBzbGFzaGVzRGVub3RlSG9zdCkge1xuICBpZiAodXJsICYmIGlzT2JqZWN0KHVybCkgJiYgdXJsIGluc3RhbmNlb2YgVXJsKSByZXR1cm4gdXJsO1xuXG4gIHZhciB1ID0gbmV3IFVybDtcbiAgdS5wYXJzZSh1cmwsIHBhcnNlUXVlcnlTdHJpbmcsIHNsYXNoZXNEZW5vdGVIb3N0KTtcbiAgcmV0dXJuIHU7XG59XG5cblVybC5wcm90b3R5cGUucGFyc2UgPSBmdW5jdGlvbih1cmwsIHBhcnNlUXVlcnlTdHJpbmcsIHNsYXNoZXNEZW5vdGVIb3N0KSB7XG4gIGlmICghaXNTdHJpbmcodXJsKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJQYXJhbWV0ZXIgJ3VybCcgbXVzdCBiZSBhIHN0cmluZywgbm90IFwiICsgdHlwZW9mIHVybCk7XG4gIH1cblxuICB2YXIgcmVzdCA9IHVybDtcblxuICAvLyB0cmltIGJlZm9yZSBwcm9jZWVkaW5nLlxuICAvLyBUaGlzIGlzIHRvIHN1cHBvcnQgcGFyc2Ugc3R1ZmYgbGlrZSBcIiAgaHR0cDovL2Zvby5jb20gIFxcblwiXG4gIHJlc3QgPSByZXN0LnRyaW0oKTtcblxuICB2YXIgcHJvdG8gPSBwcm90b2NvbFBhdHRlcm4uZXhlYyhyZXN0KTtcbiAgaWYgKHByb3RvKSB7XG4gICAgcHJvdG8gPSBwcm90b1swXTtcbiAgICB2YXIgbG93ZXJQcm90byA9IHByb3RvLnRvTG93ZXJDYXNlKCk7XG4gICAgdGhpcy5wcm90b2NvbCA9IGxvd2VyUHJvdG87XG4gICAgcmVzdCA9IHJlc3Quc3Vic3RyKHByb3RvLmxlbmd0aCk7XG4gIH1cblxuICAvLyBmaWd1cmUgb3V0IGlmIGl0J3MgZ290IGEgaG9zdFxuICAvLyB1c2VyQHNlcnZlciBpcyAqYWx3YXlzKiBpbnRlcnByZXRlZCBhcyBhIGhvc3RuYW1lLCBhbmQgdXJsXG4gIC8vIHJlc29sdXRpb24gd2lsbCB0cmVhdCAvL2Zvby9iYXIgYXMgaG9zdD1mb28scGF0aD1iYXIgYmVjYXVzZSB0aGF0J3NcbiAgLy8gaG93IHRoZSBicm93c2VyIHJlc29sdmVzIHJlbGF0aXZlIFVSTHMuXG4gIGlmIChzbGFzaGVzRGVub3RlSG9zdCB8fCBwcm90byB8fCByZXN0Lm1hdGNoKC9eXFwvXFwvW15AXFwvXStAW15AXFwvXSsvKSkge1xuICAgIHZhciBzbGFzaGVzID0gcmVzdC5zdWJzdHIoMCwgMikgPT09ICcvLyc7XG4gICAgaWYgKHNsYXNoZXMgJiYgIShwcm90byAmJiBob3N0bGVzc1Byb3RvY29sW3Byb3RvXSkpIHtcbiAgICAgIHJlc3QgPSByZXN0LnN1YnN0cigyKTtcbiAgICAgIHRoaXMuc2xhc2hlcyA9IHRydWU7XG4gICAgfVxuICB9XG5cbiAgaWYgKCFob3N0bGVzc1Byb3RvY29sW3Byb3RvXSAmJlxuICAgICAgKHNsYXNoZXMgfHwgKHByb3RvICYmICFzbGFzaGVkUHJvdG9jb2xbcHJvdG9dKSkpIHtcblxuICAgIC8vIHRoZXJlJ3MgYSBob3N0bmFtZS5cbiAgICAvLyB0aGUgZmlyc3QgaW5zdGFuY2Ugb2YgLywgPywgOywgb3IgIyBlbmRzIHRoZSBob3N0LlxuICAgIC8vXG4gICAgLy8gSWYgdGhlcmUgaXMgYW4gQCBpbiB0aGUgaG9zdG5hbWUsIHRoZW4gbm9uLWhvc3QgY2hhcnMgKmFyZSogYWxsb3dlZFxuICAgIC8vIHRvIHRoZSBsZWZ0IG9mIHRoZSBsYXN0IEAgc2lnbiwgdW5sZXNzIHNvbWUgaG9zdC1lbmRpbmcgY2hhcmFjdGVyXG4gICAgLy8gY29tZXMgKmJlZm9yZSogdGhlIEAtc2lnbi5cbiAgICAvLyBVUkxzIGFyZSBvYm5veGlvdXMuXG4gICAgLy9cbiAgICAvLyBleDpcbiAgICAvLyBodHRwOi8vYUBiQGMvID0+IHVzZXI6YUBiIGhvc3Q6Y1xuICAgIC8vIGh0dHA6Ly9hQGI/QGMgPT4gdXNlcjphIGhvc3Q6YyBwYXRoOi8/QGNcblxuICAgIC8vIHYwLjEyIFRPRE8oaXNhYWNzKTogVGhpcyBpcyBub3QgcXVpdGUgaG93IENocm9tZSBkb2VzIHRoaW5ncy5cbiAgICAvLyBSZXZpZXcgb3VyIHRlc3QgY2FzZSBhZ2FpbnN0IGJyb3dzZXJzIG1vcmUgY29tcHJlaGVuc2l2ZWx5LlxuXG4gICAgLy8gZmluZCB0aGUgZmlyc3QgaW5zdGFuY2Ugb2YgYW55IGhvc3RFbmRpbmdDaGFyc1xuICAgIHZhciBob3N0RW5kID0gLTE7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBob3N0RW5kaW5nQ2hhcnMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBoZWMgPSByZXN0LmluZGV4T2YoaG9zdEVuZGluZ0NoYXJzW2ldKTtcbiAgICAgIGlmIChoZWMgIT09IC0xICYmIChob3N0RW5kID09PSAtMSB8fCBoZWMgPCBob3N0RW5kKSlcbiAgICAgICAgaG9zdEVuZCA9IGhlYztcbiAgICB9XG5cbiAgICAvLyBhdCB0aGlzIHBvaW50LCBlaXRoZXIgd2UgaGF2ZSBhbiBleHBsaWNpdCBwb2ludCB3aGVyZSB0aGVcbiAgICAvLyBhdXRoIHBvcnRpb24gY2Fubm90IGdvIHBhc3QsIG9yIHRoZSBsYXN0IEAgY2hhciBpcyB0aGUgZGVjaWRlci5cbiAgICB2YXIgYXV0aCwgYXRTaWduO1xuICAgIGlmIChob3N0RW5kID09PSAtMSkge1xuICAgICAgLy8gYXRTaWduIGNhbiBiZSBhbnl3aGVyZS5cbiAgICAgIGF0U2lnbiA9IHJlc3QubGFzdEluZGV4T2YoJ0AnKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gYXRTaWduIG11c3QgYmUgaW4gYXV0aCBwb3J0aW9uLlxuICAgICAgLy8gaHR0cDovL2FAYi9jQGQgPT4gaG9zdDpiIGF1dGg6YSBwYXRoOi9jQGRcbiAgICAgIGF0U2lnbiA9IHJlc3QubGFzdEluZGV4T2YoJ0AnLCBob3N0RW5kKTtcbiAgICB9XG5cbiAgICAvLyBOb3cgd2UgaGF2ZSBhIHBvcnRpb24gd2hpY2ggaXMgZGVmaW5pdGVseSB0aGUgYXV0aC5cbiAgICAvLyBQdWxsIHRoYXQgb2ZmLlxuICAgIGlmIChhdFNpZ24gIT09IC0xKSB7XG4gICAgICBhdXRoID0gcmVzdC5zbGljZSgwLCBhdFNpZ24pO1xuICAgICAgcmVzdCA9IHJlc3Quc2xpY2UoYXRTaWduICsgMSk7XG4gICAgICB0aGlzLmF1dGggPSBkZWNvZGVVUklDb21wb25lbnQoYXV0aCk7XG4gICAgfVxuXG4gICAgLy8gdGhlIGhvc3QgaXMgdGhlIHJlbWFpbmluZyB0byB0aGUgbGVmdCBvZiB0aGUgZmlyc3Qgbm9uLWhvc3QgY2hhclxuICAgIGhvc3RFbmQgPSAtMTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG5vbkhvc3RDaGFycy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGhlYyA9IHJlc3QuaW5kZXhPZihub25Ib3N0Q2hhcnNbaV0pO1xuICAgICAgaWYgKGhlYyAhPT0gLTEgJiYgKGhvc3RFbmQgPT09IC0xIHx8IGhlYyA8IGhvc3RFbmQpKVxuICAgICAgICBob3N0RW5kID0gaGVjO1xuICAgIH1cbiAgICAvLyBpZiB3ZSBzdGlsbCBoYXZlIG5vdCBoaXQgaXQsIHRoZW4gdGhlIGVudGlyZSB0aGluZyBpcyBhIGhvc3QuXG4gICAgaWYgKGhvc3RFbmQgPT09IC0xKVxuICAgICAgaG9zdEVuZCA9IHJlc3QubGVuZ3RoO1xuXG4gICAgdGhpcy5ob3N0ID0gcmVzdC5zbGljZSgwLCBob3N0RW5kKTtcbiAgICByZXN0ID0gcmVzdC5zbGljZShob3N0RW5kKTtcblxuICAgIC8vIHB1bGwgb3V0IHBvcnQuXG4gICAgdGhpcy5wYXJzZUhvc3QoKTtcblxuICAgIC8vIHdlJ3ZlIGluZGljYXRlZCB0aGF0IHRoZXJlIGlzIGEgaG9zdG5hbWUsXG4gICAgLy8gc28gZXZlbiBpZiBpdCdzIGVtcHR5LCBpdCBoYXMgdG8gYmUgcHJlc2VudC5cbiAgICB0aGlzLmhvc3RuYW1lID0gdGhpcy5ob3N0bmFtZSB8fCAnJztcblxuICAgIC8vIGlmIGhvc3RuYW1lIGJlZ2lucyB3aXRoIFsgYW5kIGVuZHMgd2l0aCBdXG4gICAgLy8gYXNzdW1lIHRoYXQgaXQncyBhbiBJUHY2IGFkZHJlc3MuXG4gICAgdmFyIGlwdjZIb3N0bmFtZSA9IHRoaXMuaG9zdG5hbWVbMF0gPT09ICdbJyAmJlxuICAgICAgICB0aGlzLmhvc3RuYW1lW3RoaXMuaG9zdG5hbWUubGVuZ3RoIC0gMV0gPT09ICddJztcblxuICAgIC8vIHZhbGlkYXRlIGEgbGl0dGxlLlxuICAgIGlmICghaXB2Nkhvc3RuYW1lKSB7XG4gICAgICB2YXIgaG9zdHBhcnRzID0gdGhpcy5ob3N0bmFtZS5zcGxpdCgvXFwuLyk7XG4gICAgICBmb3IgKHZhciBpID0gMCwgbCA9IGhvc3RwYXJ0cy5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICAgICAgdmFyIHBhcnQgPSBob3N0cGFydHNbaV07XG4gICAgICAgIGlmICghcGFydCkgY29udGludWU7XG4gICAgICAgIGlmICghcGFydC5tYXRjaChob3N0bmFtZVBhcnRQYXR0ZXJuKSkge1xuICAgICAgICAgIHZhciBuZXdwYXJ0ID0gJyc7XG4gICAgICAgICAgZm9yICh2YXIgaiA9IDAsIGsgPSBwYXJ0Lmxlbmd0aDsgaiA8IGs7IGorKykge1xuICAgICAgICAgICAgaWYgKHBhcnQuY2hhckNvZGVBdChqKSA+IDEyNykge1xuICAgICAgICAgICAgICAvLyB3ZSByZXBsYWNlIG5vbi1BU0NJSSBjaGFyIHdpdGggYSB0ZW1wb3JhcnkgcGxhY2Vob2xkZXJcbiAgICAgICAgICAgICAgLy8gd2UgbmVlZCB0aGlzIHRvIG1ha2Ugc3VyZSBzaXplIG9mIGhvc3RuYW1lIGlzIG5vdFxuICAgICAgICAgICAgICAvLyBicm9rZW4gYnkgcmVwbGFjaW5nIG5vbi1BU0NJSSBieSBub3RoaW5nXG4gICAgICAgICAgICAgIG5ld3BhcnQgKz0gJ3gnO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgbmV3cGFydCArPSBwYXJ0W2pdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICAvLyB3ZSB0ZXN0IGFnYWluIHdpdGggQVNDSUkgY2hhciBvbmx5XG4gICAgICAgICAgaWYgKCFuZXdwYXJ0Lm1hdGNoKGhvc3RuYW1lUGFydFBhdHRlcm4pKSB7XG4gICAgICAgICAgICB2YXIgdmFsaWRQYXJ0cyA9IGhvc3RwYXJ0cy5zbGljZSgwLCBpKTtcbiAgICAgICAgICAgIHZhciBub3RIb3N0ID0gaG9zdHBhcnRzLnNsaWNlKGkgKyAxKTtcbiAgICAgICAgICAgIHZhciBiaXQgPSBwYXJ0Lm1hdGNoKGhvc3RuYW1lUGFydFN0YXJ0KTtcbiAgICAgICAgICAgIGlmIChiaXQpIHtcbiAgICAgICAgICAgICAgdmFsaWRQYXJ0cy5wdXNoKGJpdFsxXSk7XG4gICAgICAgICAgICAgIG5vdEhvc3QudW5zaGlmdChiaXRbMl0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKG5vdEhvc3QubGVuZ3RoKSB7XG4gICAgICAgICAgICAgIHJlc3QgPSAnLycgKyBub3RIb3N0LmpvaW4oJy4nKSArIHJlc3Q7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmhvc3RuYW1lID0gdmFsaWRQYXJ0cy5qb2luKCcuJyk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodGhpcy5ob3N0bmFtZS5sZW5ndGggPiBob3N0bmFtZU1heExlbikge1xuICAgICAgdGhpcy5ob3N0bmFtZSA9ICcnO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBob3N0bmFtZXMgYXJlIGFsd2F5cyBsb3dlciBjYXNlLlxuICAgICAgdGhpcy5ob3N0bmFtZSA9IHRoaXMuaG9zdG5hbWUudG9Mb3dlckNhc2UoKTtcbiAgICB9XG5cbiAgICBpZiAoIWlwdjZIb3N0bmFtZSkge1xuICAgICAgLy8gSUROQSBTdXBwb3J0OiBSZXR1cm5zIGEgcHVueSBjb2RlZCByZXByZXNlbnRhdGlvbiBvZiBcImRvbWFpblwiLlxuICAgICAgLy8gSXQgb25seSBjb252ZXJ0cyB0aGUgcGFydCBvZiB0aGUgZG9tYWluIG5hbWUgdGhhdFxuICAgICAgLy8gaGFzIG5vbiBBU0NJSSBjaGFyYWN0ZXJzLiBJLmUuIGl0IGRvc2VudCBtYXR0ZXIgaWZcbiAgICAgIC8vIHlvdSBjYWxsIGl0IHdpdGggYSBkb21haW4gdGhhdCBhbHJlYWR5IGlzIGluIEFTQ0lJLlxuICAgICAgdmFyIGRvbWFpbkFycmF5ID0gdGhpcy5ob3N0bmFtZS5zcGxpdCgnLicpO1xuICAgICAgdmFyIG5ld091dCA9IFtdO1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBkb21haW5BcnJheS5sZW5ndGg7ICsraSkge1xuICAgICAgICB2YXIgcyA9IGRvbWFpbkFycmF5W2ldO1xuICAgICAgICBuZXdPdXQucHVzaChzLm1hdGNoKC9bXkEtWmEtejAtOV8tXS8pID9cbiAgICAgICAgICAgICd4bi0tJyArIHB1bnljb2RlLmVuY29kZShzKSA6IHMpO1xuICAgICAgfVxuICAgICAgdGhpcy5ob3N0bmFtZSA9IG5ld091dC5qb2luKCcuJyk7XG4gICAgfVxuXG4gICAgdmFyIHAgPSB0aGlzLnBvcnQgPyAnOicgKyB0aGlzLnBvcnQgOiAnJztcbiAgICB2YXIgaCA9IHRoaXMuaG9zdG5hbWUgfHwgJyc7XG4gICAgdGhpcy5ob3N0ID0gaCArIHA7XG4gICAgdGhpcy5ocmVmICs9IHRoaXMuaG9zdDtcblxuICAgIC8vIHN0cmlwIFsgYW5kIF0gZnJvbSB0aGUgaG9zdG5hbWVcbiAgICAvLyB0aGUgaG9zdCBmaWVsZCBzdGlsbCByZXRhaW5zIHRoZW0sIHRob3VnaFxuICAgIGlmIChpcHY2SG9zdG5hbWUpIHtcbiAgICAgIHRoaXMuaG9zdG5hbWUgPSB0aGlzLmhvc3RuYW1lLnN1YnN0cigxLCB0aGlzLmhvc3RuYW1lLmxlbmd0aCAtIDIpO1xuICAgICAgaWYgKHJlc3RbMF0gIT09ICcvJykge1xuICAgICAgICByZXN0ID0gJy8nICsgcmVzdDtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyBub3cgcmVzdCBpcyBzZXQgdG8gdGhlIHBvc3QtaG9zdCBzdHVmZi5cbiAgLy8gY2hvcCBvZmYgYW55IGRlbGltIGNoYXJzLlxuICBpZiAoIXVuc2FmZVByb3RvY29sW2xvd2VyUHJvdG9dKSB7XG5cbiAgICAvLyBGaXJzdCwgbWFrZSAxMDAlIHN1cmUgdGhhdCBhbnkgXCJhdXRvRXNjYXBlXCIgY2hhcnMgZ2V0XG4gICAgLy8gZXNjYXBlZCwgZXZlbiBpZiBlbmNvZGVVUklDb21wb25lbnQgZG9lc24ndCB0aGluayB0aGV5XG4gICAgLy8gbmVlZCB0byBiZS5cbiAgICBmb3IgKHZhciBpID0gMCwgbCA9IGF1dG9Fc2NhcGUubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgICB2YXIgYWUgPSBhdXRvRXNjYXBlW2ldO1xuICAgICAgdmFyIGVzYyA9IGVuY29kZVVSSUNvbXBvbmVudChhZSk7XG4gICAgICBpZiAoZXNjID09PSBhZSkge1xuICAgICAgICBlc2MgPSBlc2NhcGUoYWUpO1xuICAgICAgfVxuICAgICAgcmVzdCA9IHJlc3Quc3BsaXQoYWUpLmpvaW4oZXNjKTtcbiAgICB9XG4gIH1cblxuXG4gIC8vIGNob3Agb2ZmIGZyb20gdGhlIHRhaWwgZmlyc3QuXG4gIHZhciBoYXNoID0gcmVzdC5pbmRleE9mKCcjJyk7XG4gIGlmIChoYXNoICE9PSAtMSkge1xuICAgIC8vIGdvdCBhIGZyYWdtZW50IHN0cmluZy5cbiAgICB0aGlzLmhhc2ggPSByZXN0LnN1YnN0cihoYXNoKTtcbiAgICByZXN0ID0gcmVzdC5zbGljZSgwLCBoYXNoKTtcbiAgfVxuICB2YXIgcW0gPSByZXN0LmluZGV4T2YoJz8nKTtcbiAgaWYgKHFtICE9PSAtMSkge1xuICAgIHRoaXMuc2VhcmNoID0gcmVzdC5zdWJzdHIocW0pO1xuICAgIHRoaXMucXVlcnkgPSByZXN0LnN1YnN0cihxbSArIDEpO1xuICAgIGlmIChwYXJzZVF1ZXJ5U3RyaW5nKSB7XG4gICAgICB0aGlzLnF1ZXJ5ID0gcXVlcnlzdHJpbmcucGFyc2UodGhpcy5xdWVyeSk7XG4gICAgfVxuICAgIHJlc3QgPSByZXN0LnNsaWNlKDAsIHFtKTtcbiAgfSBlbHNlIGlmIChwYXJzZVF1ZXJ5U3RyaW5nKSB7XG4gICAgLy8gbm8gcXVlcnkgc3RyaW5nLCBidXQgcGFyc2VRdWVyeVN0cmluZyBzdGlsbCByZXF1ZXN0ZWRcbiAgICB0aGlzLnNlYXJjaCA9ICcnO1xuICAgIHRoaXMucXVlcnkgPSB7fTtcbiAgfVxuICBpZiAocmVzdCkgdGhpcy5wYXRobmFtZSA9IHJlc3Q7XG4gIGlmIChzbGFzaGVkUHJvdG9jb2xbbG93ZXJQcm90b10gJiZcbiAgICAgIHRoaXMuaG9zdG5hbWUgJiYgIXRoaXMucGF0aG5hbWUpIHtcbiAgICB0aGlzLnBhdGhuYW1lID0gJy8nO1xuICB9XG5cbiAgLy90byBzdXBwb3J0IGh0dHAucmVxdWVzdFxuICBpZiAodGhpcy5wYXRobmFtZSB8fCB0aGlzLnNlYXJjaCkge1xuICAgIHZhciBwID0gdGhpcy5wYXRobmFtZSB8fCAnJztcbiAgICB2YXIgcyA9IHRoaXMuc2VhcmNoIHx8ICcnO1xuICAgIHRoaXMucGF0aCA9IHAgKyBzO1xuICB9XG5cbiAgLy8gZmluYWxseSwgcmVjb25zdHJ1Y3QgdGhlIGhyZWYgYmFzZWQgb24gd2hhdCBoYXMgYmVlbiB2YWxpZGF0ZWQuXG4gIHRoaXMuaHJlZiA9IHRoaXMuZm9ybWF0KCk7XG4gIHJldHVybiB0aGlzO1xufTtcblxuLy8gZm9ybWF0IGEgcGFyc2VkIG9iamVjdCBpbnRvIGEgdXJsIHN0cmluZ1xuZnVuY3Rpb24gdXJsRm9ybWF0KG9iaikge1xuICAvLyBlbnN1cmUgaXQncyBhbiBvYmplY3QsIGFuZCBub3QgYSBzdHJpbmcgdXJsLlxuICAvLyBJZiBpdCdzIGFuIG9iaiwgdGhpcyBpcyBhIG5vLW9wLlxuICAvLyB0aGlzIHdheSwgeW91IGNhbiBjYWxsIHVybF9mb3JtYXQoKSBvbiBzdHJpbmdzXG4gIC8vIHRvIGNsZWFuIHVwIHBvdGVudGlhbGx5IHdvbmt5IHVybHMuXG4gIGlmIChpc1N0cmluZyhvYmopKSBvYmogPSB1cmxQYXJzZShvYmopO1xuICBpZiAoIShvYmogaW5zdGFuY2VvZiBVcmwpKSByZXR1cm4gVXJsLnByb3RvdHlwZS5mb3JtYXQuY2FsbChvYmopO1xuICByZXR1cm4gb2JqLmZvcm1hdCgpO1xufVxuXG5VcmwucHJvdG90eXBlLmZvcm1hdCA9IGZ1bmN0aW9uKCkge1xuICB2YXIgYXV0aCA9IHRoaXMuYXV0aCB8fCAnJztcbiAgaWYgKGF1dGgpIHtcbiAgICBhdXRoID0gZW5jb2RlVVJJQ29tcG9uZW50KGF1dGgpO1xuICAgIGF1dGggPSBhdXRoLnJlcGxhY2UoLyUzQS9pLCAnOicpO1xuICAgIGF1dGggKz0gJ0AnO1xuICB9XG5cbiAgdmFyIHByb3RvY29sID0gdGhpcy5wcm90b2NvbCB8fCAnJyxcbiAgICAgIHBhdGhuYW1lID0gdGhpcy5wYXRobmFtZSB8fCAnJyxcbiAgICAgIGhhc2ggPSB0aGlzLmhhc2ggfHwgJycsXG4gICAgICBob3N0ID0gZmFsc2UsXG4gICAgICBxdWVyeSA9ICcnO1xuXG4gIGlmICh0aGlzLmhvc3QpIHtcbiAgICBob3N0ID0gYXV0aCArIHRoaXMuaG9zdDtcbiAgfSBlbHNlIGlmICh0aGlzLmhvc3RuYW1lKSB7XG4gICAgaG9zdCA9IGF1dGggKyAodGhpcy5ob3N0bmFtZS5pbmRleE9mKCc6JykgPT09IC0xID9cbiAgICAgICAgdGhpcy5ob3N0bmFtZSA6XG4gICAgICAgICdbJyArIHRoaXMuaG9zdG5hbWUgKyAnXScpO1xuICAgIGlmICh0aGlzLnBvcnQpIHtcbiAgICAgIGhvc3QgKz0gJzonICsgdGhpcy5wb3J0O1xuICAgIH1cbiAgfVxuXG4gIGlmICh0aGlzLnF1ZXJ5ICYmXG4gICAgICBpc09iamVjdCh0aGlzLnF1ZXJ5KSAmJlxuICAgICAgT2JqZWN0LmtleXModGhpcy5xdWVyeSkubGVuZ3RoKSB7XG4gICAgcXVlcnkgPSBxdWVyeXN0cmluZy5zdHJpbmdpZnkodGhpcy5xdWVyeSk7XG4gIH1cblxuICB2YXIgc2VhcmNoID0gdGhpcy5zZWFyY2ggfHwgKHF1ZXJ5ICYmICgnPycgKyBxdWVyeSkpIHx8ICcnO1xuXG4gIGlmIChwcm90b2NvbCAmJiBwcm90b2NvbC5zdWJzdHIoLTEpICE9PSAnOicpIHByb3RvY29sICs9ICc6JztcblxuICAvLyBvbmx5IHRoZSBzbGFzaGVkUHJvdG9jb2xzIGdldCB0aGUgLy8uICBOb3QgbWFpbHRvOiwgeG1wcDosIGV0Yy5cbiAgLy8gdW5sZXNzIHRoZXkgaGFkIHRoZW0gdG8gYmVnaW4gd2l0aC5cbiAgaWYgKHRoaXMuc2xhc2hlcyB8fFxuICAgICAgKCFwcm90b2NvbCB8fCBzbGFzaGVkUHJvdG9jb2xbcHJvdG9jb2xdKSAmJiBob3N0ICE9PSBmYWxzZSkge1xuICAgIGhvc3QgPSAnLy8nICsgKGhvc3QgfHwgJycpO1xuICAgIGlmIChwYXRobmFtZSAmJiBwYXRobmFtZS5jaGFyQXQoMCkgIT09ICcvJykgcGF0aG5hbWUgPSAnLycgKyBwYXRobmFtZTtcbiAgfSBlbHNlIGlmICghaG9zdCkge1xuICAgIGhvc3QgPSAnJztcbiAgfVxuXG4gIGlmIChoYXNoICYmIGhhc2guY2hhckF0KDApICE9PSAnIycpIGhhc2ggPSAnIycgKyBoYXNoO1xuICBpZiAoc2VhcmNoICYmIHNlYXJjaC5jaGFyQXQoMCkgIT09ICc/Jykgc2VhcmNoID0gJz8nICsgc2VhcmNoO1xuXG4gIHBhdGhuYW1lID0gcGF0aG5hbWUucmVwbGFjZSgvWz8jXS9nLCBmdW5jdGlvbihtYXRjaCkge1xuICAgIHJldHVybiBlbmNvZGVVUklDb21wb25lbnQobWF0Y2gpO1xuICB9KTtcbiAgc2VhcmNoID0gc2VhcmNoLnJlcGxhY2UoJyMnLCAnJTIzJyk7XG5cbiAgcmV0dXJuIHByb3RvY29sICsgaG9zdCArIHBhdGhuYW1lICsgc2VhcmNoICsgaGFzaDtcbn07XG5cbmZ1bmN0aW9uIHVybFJlc29sdmUoc291cmNlLCByZWxhdGl2ZSkge1xuICByZXR1cm4gdXJsUGFyc2Uoc291cmNlLCBmYWxzZSwgdHJ1ZSkucmVzb2x2ZShyZWxhdGl2ZSk7XG59XG5cblVybC5wcm90b3R5cGUucmVzb2x2ZSA9IGZ1bmN0aW9uKHJlbGF0aXZlKSB7XG4gIHJldHVybiB0aGlzLnJlc29sdmVPYmplY3QodXJsUGFyc2UocmVsYXRpdmUsIGZhbHNlLCB0cnVlKSkuZm9ybWF0KCk7XG59O1xuXG5mdW5jdGlvbiB1cmxSZXNvbHZlT2JqZWN0KHNvdXJjZSwgcmVsYXRpdmUpIHtcbiAgaWYgKCFzb3VyY2UpIHJldHVybiByZWxhdGl2ZTtcbiAgcmV0dXJuIHVybFBhcnNlKHNvdXJjZSwgZmFsc2UsIHRydWUpLnJlc29sdmVPYmplY3QocmVsYXRpdmUpO1xufVxuXG5VcmwucHJvdG90eXBlLnJlc29sdmVPYmplY3QgPSBmdW5jdGlvbihyZWxhdGl2ZSkge1xuICBpZiAoaXNTdHJpbmcocmVsYXRpdmUpKSB7XG4gICAgdmFyIHJlbCA9IG5ldyBVcmwoKTtcbiAgICByZWwucGFyc2UocmVsYXRpdmUsIGZhbHNlLCB0cnVlKTtcbiAgICByZWxhdGl2ZSA9IHJlbDtcbiAgfVxuXG4gIHZhciByZXN1bHQgPSBuZXcgVXJsKCk7XG4gIE9iamVjdC5rZXlzKHRoaXMpLmZvckVhY2goZnVuY3Rpb24oaykge1xuICAgIHJlc3VsdFtrXSA9IHRoaXNba107XG4gIH0sIHRoaXMpO1xuXG4gIC8vIGhhc2ggaXMgYWx3YXlzIG92ZXJyaWRkZW4sIG5vIG1hdHRlciB3aGF0LlxuICAvLyBldmVuIGhyZWY9XCJcIiB3aWxsIHJlbW92ZSBpdC5cbiAgcmVzdWx0Lmhhc2ggPSByZWxhdGl2ZS5oYXNoO1xuXG4gIC8vIGlmIHRoZSByZWxhdGl2ZSB1cmwgaXMgZW1wdHksIHRoZW4gdGhlcmUncyBub3RoaW5nIGxlZnQgdG8gZG8gaGVyZS5cbiAgaWYgKHJlbGF0aXZlLmhyZWYgPT09ICcnKSB7XG4gICAgcmVzdWx0LmhyZWYgPSByZXN1bHQuZm9ybWF0KCk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIC8vIGhyZWZzIGxpa2UgLy9mb28vYmFyIGFsd2F5cyBjdXQgdG8gdGhlIHByb3RvY29sLlxuICBpZiAocmVsYXRpdmUuc2xhc2hlcyAmJiAhcmVsYXRpdmUucHJvdG9jb2wpIHtcbiAgICAvLyB0YWtlIGV2ZXJ5dGhpbmcgZXhjZXB0IHRoZSBwcm90b2NvbCBmcm9tIHJlbGF0aXZlXG4gICAgT2JqZWN0LmtleXMocmVsYXRpdmUpLmZvckVhY2goZnVuY3Rpb24oaykge1xuICAgICAgaWYgKGsgIT09ICdwcm90b2NvbCcpXG4gICAgICAgIHJlc3VsdFtrXSA9IHJlbGF0aXZlW2tdO1xuICAgIH0pO1xuXG4gICAgLy91cmxQYXJzZSBhcHBlbmRzIHRyYWlsaW5nIC8gdG8gdXJscyBsaWtlIGh0dHA6Ly93d3cuZXhhbXBsZS5jb21cbiAgICBpZiAoc2xhc2hlZFByb3RvY29sW3Jlc3VsdC5wcm90b2NvbF0gJiZcbiAgICAgICAgcmVzdWx0Lmhvc3RuYW1lICYmICFyZXN1bHQucGF0aG5hbWUpIHtcbiAgICAgIHJlc3VsdC5wYXRoID0gcmVzdWx0LnBhdGhuYW1lID0gJy8nO1xuICAgIH1cblxuICAgIHJlc3VsdC5ocmVmID0gcmVzdWx0LmZvcm1hdCgpO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICBpZiAocmVsYXRpdmUucHJvdG9jb2wgJiYgcmVsYXRpdmUucHJvdG9jb2wgIT09IHJlc3VsdC5wcm90b2NvbCkge1xuICAgIC8vIGlmIGl0J3MgYSBrbm93biB1cmwgcHJvdG9jb2wsIHRoZW4gY2hhbmdpbmdcbiAgICAvLyB0aGUgcHJvdG9jb2wgZG9lcyB3ZWlyZCB0aGluZ3NcbiAgICAvLyBmaXJzdCwgaWYgaXQncyBub3QgZmlsZTosIHRoZW4gd2UgTVVTVCBoYXZlIGEgaG9zdCxcbiAgICAvLyBhbmQgaWYgdGhlcmUgd2FzIGEgcGF0aFxuICAgIC8vIHRvIGJlZ2luIHdpdGgsIHRoZW4gd2UgTVVTVCBoYXZlIGEgcGF0aC5cbiAgICAvLyBpZiBpdCBpcyBmaWxlOiwgdGhlbiB0aGUgaG9zdCBpcyBkcm9wcGVkLFxuICAgIC8vIGJlY2F1c2UgdGhhdCdzIGtub3duIHRvIGJlIGhvc3RsZXNzLlxuICAgIC8vIGFueXRoaW5nIGVsc2UgaXMgYXNzdW1lZCB0byBiZSBhYnNvbHV0ZS5cbiAgICBpZiAoIXNsYXNoZWRQcm90b2NvbFtyZWxhdGl2ZS5wcm90b2NvbF0pIHtcbiAgICAgIE9iamVjdC5rZXlzKHJlbGF0aXZlKS5mb3JFYWNoKGZ1bmN0aW9uKGspIHtcbiAgICAgICAgcmVzdWx0W2tdID0gcmVsYXRpdmVba107XG4gICAgICB9KTtcbiAgICAgIHJlc3VsdC5ocmVmID0gcmVzdWx0LmZvcm1hdCgpO1xuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICByZXN1bHQucHJvdG9jb2wgPSByZWxhdGl2ZS5wcm90b2NvbDtcbiAgICBpZiAoIXJlbGF0aXZlLmhvc3QgJiYgIWhvc3RsZXNzUHJvdG9jb2xbcmVsYXRpdmUucHJvdG9jb2xdKSB7XG4gICAgICB2YXIgcmVsUGF0aCA9IChyZWxhdGl2ZS5wYXRobmFtZSB8fCAnJykuc3BsaXQoJy8nKTtcbiAgICAgIHdoaWxlIChyZWxQYXRoLmxlbmd0aCAmJiAhKHJlbGF0aXZlLmhvc3QgPSByZWxQYXRoLnNoaWZ0KCkpKTtcbiAgICAgIGlmICghcmVsYXRpdmUuaG9zdCkgcmVsYXRpdmUuaG9zdCA9ICcnO1xuICAgICAgaWYgKCFyZWxhdGl2ZS5ob3N0bmFtZSkgcmVsYXRpdmUuaG9zdG5hbWUgPSAnJztcbiAgICAgIGlmIChyZWxQYXRoWzBdICE9PSAnJykgcmVsUGF0aC51bnNoaWZ0KCcnKTtcbiAgICAgIGlmIChyZWxQYXRoLmxlbmd0aCA8IDIpIHJlbFBhdGgudW5zaGlmdCgnJyk7XG4gICAgICByZXN1bHQucGF0aG5hbWUgPSByZWxQYXRoLmpvaW4oJy8nKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmVzdWx0LnBhdGhuYW1lID0gcmVsYXRpdmUucGF0aG5hbWU7XG4gICAgfVxuICAgIHJlc3VsdC5zZWFyY2ggPSByZWxhdGl2ZS5zZWFyY2g7XG4gICAgcmVzdWx0LnF1ZXJ5ID0gcmVsYXRpdmUucXVlcnk7XG4gICAgcmVzdWx0Lmhvc3QgPSByZWxhdGl2ZS5ob3N0IHx8ICcnO1xuICAgIHJlc3VsdC5hdXRoID0gcmVsYXRpdmUuYXV0aDtcbiAgICByZXN1bHQuaG9zdG5hbWUgPSByZWxhdGl2ZS5ob3N0bmFtZSB8fCByZWxhdGl2ZS5ob3N0O1xuICAgIHJlc3VsdC5wb3J0ID0gcmVsYXRpdmUucG9ydDtcbiAgICAvLyB0byBzdXBwb3J0IGh0dHAucmVxdWVzdFxuICAgIGlmIChyZXN1bHQucGF0aG5hbWUgfHwgcmVzdWx0LnNlYXJjaCkge1xuICAgICAgdmFyIHAgPSByZXN1bHQucGF0aG5hbWUgfHwgJyc7XG4gICAgICB2YXIgcyA9IHJlc3VsdC5zZWFyY2ggfHwgJyc7XG4gICAgICByZXN1bHQucGF0aCA9IHAgKyBzO1xuICAgIH1cbiAgICByZXN1bHQuc2xhc2hlcyA9IHJlc3VsdC5zbGFzaGVzIHx8IHJlbGF0aXZlLnNsYXNoZXM7XG4gICAgcmVzdWx0LmhyZWYgPSByZXN1bHQuZm9ybWF0KCk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIHZhciBpc1NvdXJjZUFicyA9IChyZXN1bHQucGF0aG5hbWUgJiYgcmVzdWx0LnBhdGhuYW1lLmNoYXJBdCgwKSA9PT0gJy8nKSxcbiAgICAgIGlzUmVsQWJzID0gKFxuICAgICAgICAgIHJlbGF0aXZlLmhvc3QgfHxcbiAgICAgICAgICByZWxhdGl2ZS5wYXRobmFtZSAmJiByZWxhdGl2ZS5wYXRobmFtZS5jaGFyQXQoMCkgPT09ICcvJ1xuICAgICAgKSxcbiAgICAgIG11c3RFbmRBYnMgPSAoaXNSZWxBYnMgfHwgaXNTb3VyY2VBYnMgfHxcbiAgICAgICAgICAgICAgICAgICAgKHJlc3VsdC5ob3N0ICYmIHJlbGF0aXZlLnBhdGhuYW1lKSksXG4gICAgICByZW1vdmVBbGxEb3RzID0gbXVzdEVuZEFicyxcbiAgICAgIHNyY1BhdGggPSByZXN1bHQucGF0aG5hbWUgJiYgcmVzdWx0LnBhdGhuYW1lLnNwbGl0KCcvJykgfHwgW10sXG4gICAgICByZWxQYXRoID0gcmVsYXRpdmUucGF0aG5hbWUgJiYgcmVsYXRpdmUucGF0aG5hbWUuc3BsaXQoJy8nKSB8fCBbXSxcbiAgICAgIHBzeWNob3RpYyA9IHJlc3VsdC5wcm90b2NvbCAmJiAhc2xhc2hlZFByb3RvY29sW3Jlc3VsdC5wcm90b2NvbF07XG5cbiAgLy8gaWYgdGhlIHVybCBpcyBhIG5vbi1zbGFzaGVkIHVybCwgdGhlbiByZWxhdGl2ZVxuICAvLyBsaW5rcyBsaWtlIC4uLy4uIHNob3VsZCBiZSBhYmxlXG4gIC8vIHRvIGNyYXdsIHVwIHRvIHRoZSBob3N0bmFtZSwgYXMgd2VsbC4gIFRoaXMgaXMgc3RyYW5nZS5cbiAgLy8gcmVzdWx0LnByb3RvY29sIGhhcyBhbHJlYWR5IGJlZW4gc2V0IGJ5IG5vdy5cbiAgLy8gTGF0ZXIgb24sIHB1dCB0aGUgZmlyc3QgcGF0aCBwYXJ0IGludG8gdGhlIGhvc3QgZmllbGQuXG4gIGlmIChwc3ljaG90aWMpIHtcbiAgICByZXN1bHQuaG9zdG5hbWUgPSAnJztcbiAgICByZXN1bHQucG9ydCA9IG51bGw7XG4gICAgaWYgKHJlc3VsdC5ob3N0KSB7XG4gICAgICBpZiAoc3JjUGF0aFswXSA9PT0gJycpIHNyY1BhdGhbMF0gPSByZXN1bHQuaG9zdDtcbiAgICAgIGVsc2Ugc3JjUGF0aC51bnNoaWZ0KHJlc3VsdC5ob3N0KTtcbiAgICB9XG4gICAgcmVzdWx0Lmhvc3QgPSAnJztcbiAgICBpZiAocmVsYXRpdmUucHJvdG9jb2wpIHtcbiAgICAgIHJlbGF0aXZlLmhvc3RuYW1lID0gbnVsbDtcbiAgICAgIHJlbGF0aXZlLnBvcnQgPSBudWxsO1xuICAgICAgaWYgKHJlbGF0aXZlLmhvc3QpIHtcbiAgICAgICAgaWYgKHJlbFBhdGhbMF0gPT09ICcnKSByZWxQYXRoWzBdID0gcmVsYXRpdmUuaG9zdDtcbiAgICAgICAgZWxzZSByZWxQYXRoLnVuc2hpZnQocmVsYXRpdmUuaG9zdCk7XG4gICAgICB9XG4gICAgICByZWxhdGl2ZS5ob3N0ID0gbnVsbDtcbiAgICB9XG4gICAgbXVzdEVuZEFicyA9IG11c3RFbmRBYnMgJiYgKHJlbFBhdGhbMF0gPT09ICcnIHx8IHNyY1BhdGhbMF0gPT09ICcnKTtcbiAgfVxuXG4gIGlmIChpc1JlbEFicykge1xuICAgIC8vIGl0J3MgYWJzb2x1dGUuXG4gICAgcmVzdWx0Lmhvc3QgPSAocmVsYXRpdmUuaG9zdCB8fCByZWxhdGl2ZS5ob3N0ID09PSAnJykgP1xuICAgICAgICAgICAgICAgICAgcmVsYXRpdmUuaG9zdCA6IHJlc3VsdC5ob3N0O1xuICAgIHJlc3VsdC5ob3N0bmFtZSA9IChyZWxhdGl2ZS5ob3N0bmFtZSB8fCByZWxhdGl2ZS5ob3N0bmFtZSA9PT0gJycpID9cbiAgICAgICAgICAgICAgICAgICAgICByZWxhdGl2ZS5ob3N0bmFtZSA6IHJlc3VsdC5ob3N0bmFtZTtcbiAgICByZXN1bHQuc2VhcmNoID0gcmVsYXRpdmUuc2VhcmNoO1xuICAgIHJlc3VsdC5xdWVyeSA9IHJlbGF0aXZlLnF1ZXJ5O1xuICAgIHNyY1BhdGggPSByZWxQYXRoO1xuICAgIC8vIGZhbGwgdGhyb3VnaCB0byB0aGUgZG90LWhhbmRsaW5nIGJlbG93LlxuICB9IGVsc2UgaWYgKHJlbFBhdGgubGVuZ3RoKSB7XG4gICAgLy8gaXQncyByZWxhdGl2ZVxuICAgIC8vIHRocm93IGF3YXkgdGhlIGV4aXN0aW5nIGZpbGUsIGFuZCB0YWtlIHRoZSBuZXcgcGF0aCBpbnN0ZWFkLlxuICAgIGlmICghc3JjUGF0aCkgc3JjUGF0aCA9IFtdO1xuICAgIHNyY1BhdGgucG9wKCk7XG4gICAgc3JjUGF0aCA9IHNyY1BhdGguY29uY2F0KHJlbFBhdGgpO1xuICAgIHJlc3VsdC5zZWFyY2ggPSByZWxhdGl2ZS5zZWFyY2g7XG4gICAgcmVzdWx0LnF1ZXJ5ID0gcmVsYXRpdmUucXVlcnk7XG4gIH0gZWxzZSBpZiAoIWlzTnVsbE9yVW5kZWZpbmVkKHJlbGF0aXZlLnNlYXJjaCkpIHtcbiAgICAvLyBqdXN0IHB1bGwgb3V0IHRoZSBzZWFyY2guXG4gICAgLy8gbGlrZSBocmVmPSc/Zm9vJy5cbiAgICAvLyBQdXQgdGhpcyBhZnRlciB0aGUgb3RoZXIgdHdvIGNhc2VzIGJlY2F1c2UgaXQgc2ltcGxpZmllcyB0aGUgYm9vbGVhbnNcbiAgICBpZiAocHN5Y2hvdGljKSB7XG4gICAgICByZXN1bHQuaG9zdG5hbWUgPSByZXN1bHQuaG9zdCA9IHNyY1BhdGguc2hpZnQoKTtcbiAgICAgIC8vb2NjYXRpb25hbHkgdGhlIGF1dGggY2FuIGdldCBzdHVjayBvbmx5IGluIGhvc3RcbiAgICAgIC8vdGhpcyBlc3BlY2lhbHkgaGFwcGVucyBpbiBjYXNlcyBsaWtlXG4gICAgICAvL3VybC5yZXNvbHZlT2JqZWN0KCdtYWlsdG86bG9jYWwxQGRvbWFpbjEnLCAnbG9jYWwyQGRvbWFpbjInKVxuICAgICAgdmFyIGF1dGhJbkhvc3QgPSByZXN1bHQuaG9zdCAmJiByZXN1bHQuaG9zdC5pbmRleE9mKCdAJykgPiAwID9cbiAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0Lmhvc3Quc3BsaXQoJ0AnKSA6IGZhbHNlO1xuICAgICAgaWYgKGF1dGhJbkhvc3QpIHtcbiAgICAgICAgcmVzdWx0LmF1dGggPSBhdXRoSW5Ib3N0LnNoaWZ0KCk7XG4gICAgICAgIHJlc3VsdC5ob3N0ID0gcmVzdWx0Lmhvc3RuYW1lID0gYXV0aEluSG9zdC5zaGlmdCgpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXN1bHQuc2VhcmNoID0gcmVsYXRpdmUuc2VhcmNoO1xuICAgIHJlc3VsdC5xdWVyeSA9IHJlbGF0aXZlLnF1ZXJ5O1xuICAgIC8vdG8gc3VwcG9ydCBodHRwLnJlcXVlc3RcbiAgICBpZiAoIWlzTnVsbChyZXN1bHQucGF0aG5hbWUpIHx8ICFpc051bGwocmVzdWx0LnNlYXJjaCkpIHtcbiAgICAgIHJlc3VsdC5wYXRoID0gKHJlc3VsdC5wYXRobmFtZSA/IHJlc3VsdC5wYXRobmFtZSA6ICcnKSArXG4gICAgICAgICAgICAgICAgICAgIChyZXN1bHQuc2VhcmNoID8gcmVzdWx0LnNlYXJjaCA6ICcnKTtcbiAgICB9XG4gICAgcmVzdWx0LmhyZWYgPSByZXN1bHQuZm9ybWF0KCk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIGlmICghc3JjUGF0aC5sZW5ndGgpIHtcbiAgICAvLyBubyBwYXRoIGF0IGFsbC4gIGVhc3kuXG4gICAgLy8gd2UndmUgYWxyZWFkeSBoYW5kbGVkIHRoZSBvdGhlciBzdHVmZiBhYm92ZS5cbiAgICByZXN1bHQucGF0aG5hbWUgPSBudWxsO1xuICAgIC8vdG8gc3VwcG9ydCBodHRwLnJlcXVlc3RcbiAgICBpZiAocmVzdWx0LnNlYXJjaCkge1xuICAgICAgcmVzdWx0LnBhdGggPSAnLycgKyByZXN1bHQuc2VhcmNoO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXN1bHQucGF0aCA9IG51bGw7XG4gICAgfVxuICAgIHJlc3VsdC5ocmVmID0gcmVzdWx0LmZvcm1hdCgpO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICAvLyBpZiBhIHVybCBFTkRzIGluIC4gb3IgLi4sIHRoZW4gaXQgbXVzdCBnZXQgYSB0cmFpbGluZyBzbGFzaC5cbiAgLy8gaG93ZXZlciwgaWYgaXQgZW5kcyBpbiBhbnl0aGluZyBlbHNlIG5vbi1zbGFzaHksXG4gIC8vIHRoZW4gaXQgbXVzdCBOT1QgZ2V0IGEgdHJhaWxpbmcgc2xhc2guXG4gIHZhciBsYXN0ID0gc3JjUGF0aC5zbGljZSgtMSlbMF07XG4gIHZhciBoYXNUcmFpbGluZ1NsYXNoID0gKFxuICAgICAgKHJlc3VsdC5ob3N0IHx8IHJlbGF0aXZlLmhvc3QpICYmIChsYXN0ID09PSAnLicgfHwgbGFzdCA9PT0gJy4uJykgfHxcbiAgICAgIGxhc3QgPT09ICcnKTtcblxuICAvLyBzdHJpcCBzaW5nbGUgZG90cywgcmVzb2x2ZSBkb3VibGUgZG90cyB0byBwYXJlbnQgZGlyXG4gIC8vIGlmIHRoZSBwYXRoIHRyaWVzIHRvIGdvIGFib3ZlIHRoZSByb290LCBgdXBgIGVuZHMgdXAgPiAwXG4gIHZhciB1cCA9IDA7XG4gIGZvciAodmFyIGkgPSBzcmNQYXRoLmxlbmd0aDsgaSA+PSAwOyBpLS0pIHtcbiAgICBsYXN0ID0gc3JjUGF0aFtpXTtcbiAgICBpZiAobGFzdCA9PSAnLicpIHtcbiAgICAgIHNyY1BhdGguc3BsaWNlKGksIDEpO1xuICAgIH0gZWxzZSBpZiAobGFzdCA9PT0gJy4uJykge1xuICAgICAgc3JjUGF0aC5zcGxpY2UoaSwgMSk7XG4gICAgICB1cCsrO1xuICAgIH0gZWxzZSBpZiAodXApIHtcbiAgICAgIHNyY1BhdGguc3BsaWNlKGksIDEpO1xuICAgICAgdXAtLTtcbiAgICB9XG4gIH1cblxuICAvLyBpZiB0aGUgcGF0aCBpcyBhbGxvd2VkIHRvIGdvIGFib3ZlIHRoZSByb290LCByZXN0b3JlIGxlYWRpbmcgLi5zXG4gIGlmICghbXVzdEVuZEFicyAmJiAhcmVtb3ZlQWxsRG90cykge1xuICAgIGZvciAoOyB1cC0tOyB1cCkge1xuICAgICAgc3JjUGF0aC51bnNoaWZ0KCcuLicpO1xuICAgIH1cbiAgfVxuXG4gIGlmIChtdXN0RW5kQWJzICYmIHNyY1BhdGhbMF0gIT09ICcnICYmXG4gICAgICAoIXNyY1BhdGhbMF0gfHwgc3JjUGF0aFswXS5jaGFyQXQoMCkgIT09ICcvJykpIHtcbiAgICBzcmNQYXRoLnVuc2hpZnQoJycpO1xuICB9XG5cbiAgaWYgKGhhc1RyYWlsaW5nU2xhc2ggJiYgKHNyY1BhdGguam9pbignLycpLnN1YnN0cigtMSkgIT09ICcvJykpIHtcbiAgICBzcmNQYXRoLnB1c2goJycpO1xuICB9XG5cbiAgdmFyIGlzQWJzb2x1dGUgPSBzcmNQYXRoWzBdID09PSAnJyB8fFxuICAgICAgKHNyY1BhdGhbMF0gJiYgc3JjUGF0aFswXS5jaGFyQXQoMCkgPT09ICcvJyk7XG5cbiAgLy8gcHV0IHRoZSBob3N0IGJhY2tcbiAgaWYgKHBzeWNob3RpYykge1xuICAgIHJlc3VsdC5ob3N0bmFtZSA9IHJlc3VsdC5ob3N0ID0gaXNBYnNvbHV0ZSA/ICcnIDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyY1BhdGgubGVuZ3RoID8gc3JjUGF0aC5zaGlmdCgpIDogJyc7XG4gICAgLy9vY2NhdGlvbmFseSB0aGUgYXV0aCBjYW4gZ2V0IHN0dWNrIG9ubHkgaW4gaG9zdFxuICAgIC8vdGhpcyBlc3BlY2lhbHkgaGFwcGVucyBpbiBjYXNlcyBsaWtlXG4gICAgLy91cmwucmVzb2x2ZU9iamVjdCgnbWFpbHRvOmxvY2FsMUBkb21haW4xJywgJ2xvY2FsMkBkb21haW4yJylcbiAgICB2YXIgYXV0aEluSG9zdCA9IHJlc3VsdC5ob3N0ICYmIHJlc3VsdC5ob3N0LmluZGV4T2YoJ0AnKSA+IDAgP1xuICAgICAgICAgICAgICAgICAgICAgcmVzdWx0Lmhvc3Quc3BsaXQoJ0AnKSA6IGZhbHNlO1xuICAgIGlmIChhdXRoSW5Ib3N0KSB7XG4gICAgICByZXN1bHQuYXV0aCA9IGF1dGhJbkhvc3Quc2hpZnQoKTtcbiAgICAgIHJlc3VsdC5ob3N0ID0gcmVzdWx0Lmhvc3RuYW1lID0gYXV0aEluSG9zdC5zaGlmdCgpO1xuICAgIH1cbiAgfVxuXG4gIG11c3RFbmRBYnMgPSBtdXN0RW5kQWJzIHx8IChyZXN1bHQuaG9zdCAmJiBzcmNQYXRoLmxlbmd0aCk7XG5cbiAgaWYgKG11c3RFbmRBYnMgJiYgIWlzQWJzb2x1dGUpIHtcbiAgICBzcmNQYXRoLnVuc2hpZnQoJycpO1xuICB9XG5cbiAgaWYgKCFzcmNQYXRoLmxlbmd0aCkge1xuICAgIHJlc3VsdC5wYXRobmFtZSA9IG51bGw7XG4gICAgcmVzdWx0LnBhdGggPSBudWxsO1xuICB9IGVsc2Uge1xuICAgIHJlc3VsdC5wYXRobmFtZSA9IHNyY1BhdGguam9pbignLycpO1xuICB9XG5cbiAgLy90byBzdXBwb3J0IHJlcXVlc3QuaHR0cFxuICBpZiAoIWlzTnVsbChyZXN1bHQucGF0aG5hbWUpIHx8ICFpc051bGwocmVzdWx0LnNlYXJjaCkpIHtcbiAgICByZXN1bHQucGF0aCA9IChyZXN1bHQucGF0aG5hbWUgPyByZXN1bHQucGF0aG5hbWUgOiAnJykgK1xuICAgICAgICAgICAgICAgICAgKHJlc3VsdC5zZWFyY2ggPyByZXN1bHQuc2VhcmNoIDogJycpO1xuICB9XG4gIHJlc3VsdC5hdXRoID0gcmVsYXRpdmUuYXV0aCB8fCByZXN1bHQuYXV0aDtcbiAgcmVzdWx0LnNsYXNoZXMgPSByZXN1bHQuc2xhc2hlcyB8fCByZWxhdGl2ZS5zbGFzaGVzO1xuICByZXN1bHQuaHJlZiA9IHJlc3VsdC5mb3JtYXQoKTtcbiAgcmV0dXJuIHJlc3VsdDtcbn07XG5cblVybC5wcm90b3R5cGUucGFyc2VIb3N0ID0gZnVuY3Rpb24oKSB7XG4gIHZhciBob3N0ID0gdGhpcy5ob3N0O1xuICB2YXIgcG9ydCA9IHBvcnRQYXR0ZXJuLmV4ZWMoaG9zdCk7XG4gIGlmIChwb3J0KSB7XG4gICAgcG9ydCA9IHBvcnRbMF07XG4gICAgaWYgKHBvcnQgIT09ICc6Jykge1xuICAgICAgdGhpcy5wb3J0ID0gcG9ydC5zdWJzdHIoMSk7XG4gICAgfVxuICAgIGhvc3QgPSBob3N0LnN1YnN0cigwLCBob3N0Lmxlbmd0aCAtIHBvcnQubGVuZ3RoKTtcbiAgfVxuICBpZiAoaG9zdCkgdGhpcy5ob3N0bmFtZSA9IGhvc3Q7XG59O1xuXG5mdW5jdGlvbiBpc1N0cmluZyhhcmcpIHtcbiAgcmV0dXJuIHR5cGVvZiBhcmcgPT09IFwic3RyaW5nXCI7XG59XG5cbmZ1bmN0aW9uIGlzT2JqZWN0KGFyZykge1xuICByZXR1cm4gdHlwZW9mIGFyZyA9PT0gJ29iamVjdCcgJiYgYXJnICE9PSBudWxsO1xufVxuXG5mdW5jdGlvbiBpc051bGwoYXJnKSB7XG4gIHJldHVybiBhcmcgPT09IG51bGw7XG59XG5mdW5jdGlvbiBpc051bGxPclVuZGVmaW5lZChhcmcpIHtcbiAgcmV0dXJuICBhcmcgPT0gbnVsbDtcbn1cbiIsIid1c2Ugc3RyaWN0JztcblxubW9kdWxlLmV4cG9ydHMgPSBlYXJjdXQ7XG5cbmZ1bmN0aW9uIGVhcmN1dChkYXRhLCBob2xlSW5kaWNlcywgZGltKSB7XG5cbiAgICBkaW0gPSBkaW0gfHwgMjtcblxuICAgIHZhciBoYXNIb2xlcyA9IGhvbGVJbmRpY2VzICYmIGhvbGVJbmRpY2VzLmxlbmd0aCxcbiAgICAgICAgb3V0ZXJMZW4gPSBoYXNIb2xlcyA/IGhvbGVJbmRpY2VzWzBdICogZGltIDogZGF0YS5sZW5ndGgsXG4gICAgICAgIG91dGVyTm9kZSA9IGxpbmtlZExpc3QoZGF0YSwgMCwgb3V0ZXJMZW4sIGRpbSwgdHJ1ZSksXG4gICAgICAgIHRyaWFuZ2xlcyA9IFtdO1xuXG4gICAgaWYgKCFvdXRlck5vZGUpIHJldHVybiB0cmlhbmdsZXM7XG5cbiAgICB2YXIgbWluWCwgbWluWSwgbWF4WCwgbWF4WSwgeCwgeSwgc2l6ZTtcblxuICAgIGlmIChoYXNIb2xlcykgb3V0ZXJOb2RlID0gZWxpbWluYXRlSG9sZXMoZGF0YSwgaG9sZUluZGljZXMsIG91dGVyTm9kZSwgZGltKTtcblxuICAgIC8vIGlmIHRoZSBzaGFwZSBpcyBub3QgdG9vIHNpbXBsZSwgd2UnbGwgdXNlIHotb3JkZXIgY3VydmUgaGFzaCBsYXRlcjsgY2FsY3VsYXRlIHBvbHlnb24gYmJveFxuICAgIGlmIChkYXRhLmxlbmd0aCA+IDgwICogZGltKSB7XG4gICAgICAgIG1pblggPSBtYXhYID0gZGF0YVswXTtcbiAgICAgICAgbWluWSA9IG1heFkgPSBkYXRhWzFdO1xuXG4gICAgICAgIGZvciAodmFyIGkgPSBkaW07IGkgPCBvdXRlckxlbjsgaSArPSBkaW0pIHtcbiAgICAgICAgICAgIHggPSBkYXRhW2ldO1xuICAgICAgICAgICAgeSA9IGRhdGFbaSArIDFdO1xuICAgICAgICAgICAgaWYgKHggPCBtaW5YKSBtaW5YID0geDtcbiAgICAgICAgICAgIGlmICh5IDwgbWluWSkgbWluWSA9IHk7XG4gICAgICAgICAgICBpZiAoeCA+IG1heFgpIG1heFggPSB4O1xuICAgICAgICAgICAgaWYgKHkgPiBtYXhZKSBtYXhZID0geTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIG1pblgsIG1pblkgYW5kIHNpemUgYXJlIGxhdGVyIHVzZWQgdG8gdHJhbnNmb3JtIGNvb3JkcyBpbnRvIGludGVnZXJzIGZvciB6LW9yZGVyIGNhbGN1bGF0aW9uXG4gICAgICAgIHNpemUgPSBNYXRoLm1heChtYXhYIC0gbWluWCwgbWF4WSAtIG1pblkpO1xuICAgIH1cblxuICAgIGVhcmN1dExpbmtlZChvdXRlck5vZGUsIHRyaWFuZ2xlcywgZGltLCBtaW5YLCBtaW5ZLCBzaXplKTtcblxuICAgIHJldHVybiB0cmlhbmdsZXM7XG59XG5cbi8vIGNyZWF0ZSBhIGNpcmN1bGFyIGRvdWJseSBsaW5rZWQgbGlzdCBmcm9tIHBvbHlnb24gcG9pbnRzIGluIHRoZSBzcGVjaWZpZWQgd2luZGluZyBvcmRlclxuZnVuY3Rpb24gbGlua2VkTGlzdChkYXRhLCBzdGFydCwgZW5kLCBkaW0sIGNsb2Nrd2lzZSkge1xuICAgIHZhciBzdW0gPSAwLFxuICAgICAgICBpLCBqLCBsYXN0O1xuXG4gICAgLy8gY2FsY3VsYXRlIG9yaWdpbmFsIHdpbmRpbmcgb3JkZXIgb2YgYSBwb2x5Z29uIHJpbmdcbiAgICBmb3IgKGkgPSBzdGFydCwgaiA9IGVuZCAtIGRpbTsgaSA8IGVuZDsgaSArPSBkaW0pIHtcbiAgICAgICAgc3VtICs9IChkYXRhW2pdIC0gZGF0YVtpXSkgKiAoZGF0YVtpICsgMV0gKyBkYXRhW2ogKyAxXSk7XG4gICAgICAgIGogPSBpO1xuICAgIH1cblxuICAgIC8vIGxpbmsgcG9pbnRzIGludG8gY2lyY3VsYXIgZG91Ymx5LWxpbmtlZCBsaXN0IGluIHRoZSBzcGVjaWZpZWQgd2luZGluZyBvcmRlclxuICAgIGlmIChjbG9ja3dpc2UgPT09IChzdW0gPiAwKSkge1xuICAgICAgICBmb3IgKGkgPSBzdGFydDsgaSA8IGVuZDsgaSArPSBkaW0pIGxhc3QgPSBpbnNlcnROb2RlKGksIGRhdGFbaV0sIGRhdGFbaSArIDFdLCBsYXN0KTtcbiAgICB9IGVsc2Uge1xuICAgICAgICBmb3IgKGkgPSBlbmQgLSBkaW07IGkgPj0gc3RhcnQ7IGkgLT0gZGltKSBsYXN0ID0gaW5zZXJ0Tm9kZShpLCBkYXRhW2ldLCBkYXRhW2kgKyAxXSwgbGFzdCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGxhc3Q7XG59XG5cbi8vIGVsaW1pbmF0ZSBjb2xpbmVhciBvciBkdXBsaWNhdGUgcG9pbnRzXG5mdW5jdGlvbiBmaWx0ZXJQb2ludHMoc3RhcnQsIGVuZCkge1xuICAgIGlmICghc3RhcnQpIHJldHVybiBzdGFydDtcbiAgICBpZiAoIWVuZCkgZW5kID0gc3RhcnQ7XG5cbiAgICB2YXIgcCA9IHN0YXJ0LFxuICAgICAgICBhZ2FpbjtcbiAgICBkbyB7XG4gICAgICAgIGFnYWluID0gZmFsc2U7XG5cbiAgICAgICAgaWYgKCFwLnN0ZWluZXIgJiYgKGVxdWFscyhwLCBwLm5leHQpIHx8IGFyZWEocC5wcmV2LCBwLCBwLm5leHQpID09PSAwKSkge1xuICAgICAgICAgICAgcmVtb3ZlTm9kZShwKTtcbiAgICAgICAgICAgIHAgPSBlbmQgPSBwLnByZXY7XG4gICAgICAgICAgICBpZiAocCA9PT0gcC5uZXh0KSByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIGFnYWluID0gdHJ1ZTtcblxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcCA9IHAubmV4dDtcbiAgICAgICAgfVxuICAgIH0gd2hpbGUgKGFnYWluIHx8IHAgIT09IGVuZCk7XG5cbiAgICByZXR1cm4gZW5kO1xufVxuXG4vLyBtYWluIGVhciBzbGljaW5nIGxvb3Agd2hpY2ggdHJpYW5ndWxhdGVzIGEgcG9seWdvbiAoZ2l2ZW4gYXMgYSBsaW5rZWQgbGlzdClcbmZ1bmN0aW9uIGVhcmN1dExpbmtlZChlYXIsIHRyaWFuZ2xlcywgZGltLCBtaW5YLCBtaW5ZLCBzaXplLCBwYXNzKSB7XG4gICAgaWYgKCFlYXIpIHJldHVybjtcblxuICAgIC8vIGludGVybGluayBwb2x5Z29uIG5vZGVzIGluIHotb3JkZXJcbiAgICBpZiAoIXBhc3MgJiYgc2l6ZSkgaW5kZXhDdXJ2ZShlYXIsIG1pblgsIG1pblksIHNpemUpO1xuXG4gICAgdmFyIHN0b3AgPSBlYXIsXG4gICAgICAgIHByZXYsIG5leHQ7XG5cbiAgICAvLyBpdGVyYXRlIHRocm91Z2ggZWFycywgc2xpY2luZyB0aGVtIG9uZSBieSBvbmVcbiAgICB3aGlsZSAoZWFyLnByZXYgIT09IGVhci5uZXh0KSB7XG4gICAgICAgIHByZXYgPSBlYXIucHJldjtcbiAgICAgICAgbmV4dCA9IGVhci5uZXh0O1xuXG4gICAgICAgIGlmIChzaXplID8gaXNFYXJIYXNoZWQoZWFyLCBtaW5YLCBtaW5ZLCBzaXplKSA6IGlzRWFyKGVhcikpIHtcbiAgICAgICAgICAgIC8vIGN1dCBvZmYgdGhlIHRyaWFuZ2xlXG4gICAgICAgICAgICB0cmlhbmdsZXMucHVzaChwcmV2LmkgLyBkaW0pO1xuICAgICAgICAgICAgdHJpYW5nbGVzLnB1c2goZWFyLmkgLyBkaW0pO1xuICAgICAgICAgICAgdHJpYW5nbGVzLnB1c2gobmV4dC5pIC8gZGltKTtcblxuICAgICAgICAgICAgcmVtb3ZlTm9kZShlYXIpO1xuXG4gICAgICAgICAgICAvLyBza2lwcGluZyB0aGUgbmV4dCB2ZXJ0aWNlIGxlYWRzIHRvIGxlc3Mgc2xpdmVyIHRyaWFuZ2xlc1xuICAgICAgICAgICAgZWFyID0gbmV4dC5uZXh0O1xuICAgICAgICAgICAgc3RvcCA9IG5leHQubmV4dDtcblxuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICBlYXIgPSBuZXh0O1xuXG4gICAgICAgIC8vIGlmIHdlIGxvb3BlZCB0aHJvdWdoIHRoZSB3aG9sZSByZW1haW5pbmcgcG9seWdvbiBhbmQgY2FuJ3QgZmluZCBhbnkgbW9yZSBlYXJzXG4gICAgICAgIGlmIChlYXIgPT09IHN0b3ApIHtcbiAgICAgICAgICAgIC8vIHRyeSBmaWx0ZXJpbmcgcG9pbnRzIGFuZCBzbGljaW5nIGFnYWluXG4gICAgICAgICAgICBpZiAoIXBhc3MpIHtcbiAgICAgICAgICAgICAgICBlYXJjdXRMaW5rZWQoZmlsdGVyUG9pbnRzKGVhciksIHRyaWFuZ2xlcywgZGltLCBtaW5YLCBtaW5ZLCBzaXplLCAxKTtcblxuICAgICAgICAgICAgLy8gaWYgdGhpcyBkaWRuJ3Qgd29yaywgdHJ5IGN1cmluZyBhbGwgc21hbGwgc2VsZi1pbnRlcnNlY3Rpb25zIGxvY2FsbHlcbiAgICAgICAgICAgIH0gZWxzZSBpZiAocGFzcyA9PT0gMSkge1xuICAgICAgICAgICAgICAgIGVhciA9IGN1cmVMb2NhbEludGVyc2VjdGlvbnMoZWFyLCB0cmlhbmdsZXMsIGRpbSk7XG4gICAgICAgICAgICAgICAgZWFyY3V0TGlua2VkKGVhciwgdHJpYW5nbGVzLCBkaW0sIG1pblgsIG1pblksIHNpemUsIDIpO1xuXG4gICAgICAgICAgICAvLyBhcyBhIGxhc3QgcmVzb3J0LCB0cnkgc3BsaXR0aW5nIHRoZSByZW1haW5pbmcgcG9seWdvbiBpbnRvIHR3b1xuICAgICAgICAgICAgfSBlbHNlIGlmIChwYXNzID09PSAyKSB7XG4gICAgICAgICAgICAgICAgc3BsaXRFYXJjdXQoZWFyLCB0cmlhbmdsZXMsIGRpbSwgbWluWCwgbWluWSwgc2l6ZSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgfVxufVxuXG4vLyBjaGVjayB3aGV0aGVyIGEgcG9seWdvbiBub2RlIGZvcm1zIGEgdmFsaWQgZWFyIHdpdGggYWRqYWNlbnQgbm9kZXNcbmZ1bmN0aW9uIGlzRWFyKGVhcikge1xuICAgIHZhciBhID0gZWFyLnByZXYsXG4gICAgICAgIGIgPSBlYXIsXG4gICAgICAgIGMgPSBlYXIubmV4dDtcblxuICAgIGlmIChhcmVhKGEsIGIsIGMpID49IDApIHJldHVybiBmYWxzZTsgLy8gcmVmbGV4LCBjYW4ndCBiZSBhbiBlYXJcblxuICAgIC8vIG5vdyBtYWtlIHN1cmUgd2UgZG9uJ3QgaGF2ZSBvdGhlciBwb2ludHMgaW5zaWRlIHRoZSBwb3RlbnRpYWwgZWFyXG4gICAgdmFyIHAgPSBlYXIubmV4dC5uZXh0O1xuXG4gICAgd2hpbGUgKHAgIT09IGVhci5wcmV2KSB7XG4gICAgICAgIGlmIChwb2ludEluVHJpYW5nbGUoYS54LCBhLnksIGIueCwgYi55LCBjLngsIGMueSwgcC54LCBwLnkpICYmXG4gICAgICAgICAgICBhcmVhKHAucHJldiwgcCwgcC5uZXh0KSA+PSAwKSByZXR1cm4gZmFsc2U7XG4gICAgICAgIHAgPSBwLm5leHQ7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRydWU7XG59XG5cbmZ1bmN0aW9uIGlzRWFySGFzaGVkKGVhciwgbWluWCwgbWluWSwgc2l6ZSkge1xuICAgIHZhciBhID0gZWFyLnByZXYsXG4gICAgICAgIGIgPSBlYXIsXG4gICAgICAgIGMgPSBlYXIubmV4dDtcblxuICAgIGlmIChhcmVhKGEsIGIsIGMpID49IDApIHJldHVybiBmYWxzZTsgLy8gcmVmbGV4LCBjYW4ndCBiZSBhbiBlYXJcblxuICAgIC8vIHRyaWFuZ2xlIGJib3g7IG1pbiAmIG1heCBhcmUgY2FsY3VsYXRlZCBsaWtlIHRoaXMgZm9yIHNwZWVkXG4gICAgdmFyIG1pblRYID0gYS54IDwgYi54ID8gKGEueCA8IGMueCA/IGEueCA6IGMueCkgOiAoYi54IDwgYy54ID8gYi54IDogYy54KSxcbiAgICAgICAgbWluVFkgPSBhLnkgPCBiLnkgPyAoYS55IDwgYy55ID8gYS55IDogYy55KSA6IChiLnkgPCBjLnkgPyBiLnkgOiBjLnkpLFxuICAgICAgICBtYXhUWCA9IGEueCA+IGIueCA/IChhLnggPiBjLnggPyBhLnggOiBjLngpIDogKGIueCA+IGMueCA/IGIueCA6IGMueCksXG4gICAgICAgIG1heFRZID0gYS55ID4gYi55ID8gKGEueSA+IGMueSA/IGEueSA6IGMueSkgOiAoYi55ID4gYy55ID8gYi55IDogYy55KTtcblxuICAgIC8vIHotb3JkZXIgcmFuZ2UgZm9yIHRoZSBjdXJyZW50IHRyaWFuZ2xlIGJib3g7XG4gICAgdmFyIG1pblogPSB6T3JkZXIobWluVFgsIG1pblRZLCBtaW5YLCBtaW5ZLCBzaXplKSxcbiAgICAgICAgbWF4WiA9IHpPcmRlcihtYXhUWCwgbWF4VFksIG1pblgsIG1pblksIHNpemUpO1xuXG4gICAgLy8gZmlyc3QgbG9vayBmb3IgcG9pbnRzIGluc2lkZSB0aGUgdHJpYW5nbGUgaW4gaW5jcmVhc2luZyB6LW9yZGVyXG4gICAgdmFyIHAgPSBlYXIubmV4dFo7XG5cbiAgICB3aGlsZSAocCAmJiBwLnogPD0gbWF4Wikge1xuICAgICAgICBpZiAocCAhPT0gZWFyLnByZXYgJiYgcCAhPT0gZWFyLm5leHQgJiZcbiAgICAgICAgICAgIHBvaW50SW5UcmlhbmdsZShhLngsIGEueSwgYi54LCBiLnksIGMueCwgYy55LCBwLngsIHAueSkgJiZcbiAgICAgICAgICAgIGFyZWEocC5wcmV2LCBwLCBwLm5leHQpID49IDApIHJldHVybiBmYWxzZTtcbiAgICAgICAgcCA9IHAubmV4dFo7XG4gICAgfVxuXG4gICAgLy8gdGhlbiBsb29rIGZvciBwb2ludHMgaW4gZGVjcmVhc2luZyB6LW9yZGVyXG4gICAgcCA9IGVhci5wcmV2WjtcblxuICAgIHdoaWxlIChwICYmIHAueiA+PSBtaW5aKSB7XG4gICAgICAgIGlmIChwICE9PSBlYXIucHJldiAmJiBwICE9PSBlYXIubmV4dCAmJlxuICAgICAgICAgICAgcG9pbnRJblRyaWFuZ2xlKGEueCwgYS55LCBiLngsIGIueSwgYy54LCBjLnksIHAueCwgcC55KSAmJlxuICAgICAgICAgICAgYXJlYShwLnByZXYsIHAsIHAubmV4dCkgPj0gMCkgcmV0dXJuIGZhbHNlO1xuICAgICAgICBwID0gcC5wcmV2WjtcbiAgICB9XG5cbiAgICByZXR1cm4gdHJ1ZTtcbn1cblxuLy8gZ28gdGhyb3VnaCBhbGwgcG9seWdvbiBub2RlcyBhbmQgY3VyZSBzbWFsbCBsb2NhbCBzZWxmLWludGVyc2VjdGlvbnNcbmZ1bmN0aW9uIGN1cmVMb2NhbEludGVyc2VjdGlvbnMoc3RhcnQsIHRyaWFuZ2xlcywgZGltKSB7XG4gICAgdmFyIHAgPSBzdGFydDtcbiAgICBkbyB7XG4gICAgICAgIHZhciBhID0gcC5wcmV2LFxuICAgICAgICAgICAgYiA9IHAubmV4dC5uZXh0O1xuXG4gICAgICAgIC8vIGEgc2VsZi1pbnRlcnNlY3Rpb24gd2hlcmUgZWRnZSAodltpLTFdLHZbaV0pIGludGVyc2VjdHMgKHZbaSsxXSx2W2krMl0pXG4gICAgICAgIGlmIChpbnRlcnNlY3RzKGEsIHAsIHAubmV4dCwgYikgJiYgbG9jYWxseUluc2lkZShhLCBiKSAmJiBsb2NhbGx5SW5zaWRlKGIsIGEpKSB7XG5cbiAgICAgICAgICAgIHRyaWFuZ2xlcy5wdXNoKGEuaSAvIGRpbSk7XG4gICAgICAgICAgICB0cmlhbmdsZXMucHVzaChwLmkgLyBkaW0pO1xuICAgICAgICAgICAgdHJpYW5nbGVzLnB1c2goYi5pIC8gZGltKTtcblxuICAgICAgICAgICAgLy8gcmVtb3ZlIHR3byBub2RlcyBpbnZvbHZlZFxuICAgICAgICAgICAgcmVtb3ZlTm9kZShwKTtcbiAgICAgICAgICAgIHJlbW92ZU5vZGUocC5uZXh0KTtcblxuICAgICAgICAgICAgcCA9IHN0YXJ0ID0gYjtcbiAgICAgICAgfVxuICAgICAgICBwID0gcC5uZXh0O1xuICAgIH0gd2hpbGUgKHAgIT09IHN0YXJ0KTtcblxuICAgIHJldHVybiBwO1xufVxuXG4vLyB0cnkgc3BsaXR0aW5nIHBvbHlnb24gaW50byB0d28gYW5kIHRyaWFuZ3VsYXRlIHRoZW0gaW5kZXBlbmRlbnRseVxuZnVuY3Rpb24gc3BsaXRFYXJjdXQoc3RhcnQsIHRyaWFuZ2xlcywgZGltLCBtaW5YLCBtaW5ZLCBzaXplKSB7XG4gICAgLy8gbG9vayBmb3IgYSB2YWxpZCBkaWFnb25hbCB0aGF0IGRpdmlkZXMgdGhlIHBvbHlnb24gaW50byB0d29cbiAgICB2YXIgYSA9IHN0YXJ0O1xuICAgIGRvIHtcbiAgICAgICAgdmFyIGIgPSBhLm5leHQubmV4dDtcbiAgICAgICAgd2hpbGUgKGIgIT09IGEucHJldikge1xuICAgICAgICAgICAgaWYgKGEuaSAhPT0gYi5pICYmIGlzVmFsaWREaWFnb25hbChhLCBiKSkge1xuICAgICAgICAgICAgICAgIC8vIHNwbGl0IHRoZSBwb2x5Z29uIGluIHR3byBieSB0aGUgZGlhZ29uYWxcbiAgICAgICAgICAgICAgICB2YXIgYyA9IHNwbGl0UG9seWdvbihhLCBiKTtcblxuICAgICAgICAgICAgICAgIC8vIGZpbHRlciBjb2xpbmVhciBwb2ludHMgYXJvdW5kIHRoZSBjdXRzXG4gICAgICAgICAgICAgICAgYSA9IGZpbHRlclBvaW50cyhhLCBhLm5leHQpO1xuICAgICAgICAgICAgICAgIGMgPSBmaWx0ZXJQb2ludHMoYywgYy5uZXh0KTtcblxuICAgICAgICAgICAgICAgIC8vIHJ1biBlYXJjdXQgb24gZWFjaCBoYWxmXG4gICAgICAgICAgICAgICAgZWFyY3V0TGlua2VkKGEsIHRyaWFuZ2xlcywgZGltLCBtaW5YLCBtaW5ZLCBzaXplKTtcbiAgICAgICAgICAgICAgICBlYXJjdXRMaW5rZWQoYywgdHJpYW5nbGVzLCBkaW0sIG1pblgsIG1pblksIHNpemUpO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGIgPSBiLm5leHQ7XG4gICAgICAgIH1cbiAgICAgICAgYSA9IGEubmV4dDtcbiAgICB9IHdoaWxlIChhICE9PSBzdGFydCk7XG59XG5cbi8vIGxpbmsgZXZlcnkgaG9sZSBpbnRvIHRoZSBvdXRlciBsb29wLCBwcm9kdWNpbmcgYSBzaW5nbGUtcmluZyBwb2x5Z29uIHdpdGhvdXQgaG9sZXNcbmZ1bmN0aW9uIGVsaW1pbmF0ZUhvbGVzKGRhdGEsIGhvbGVJbmRpY2VzLCBvdXRlck5vZGUsIGRpbSkge1xuICAgIHZhciBxdWV1ZSA9IFtdLFxuICAgICAgICBpLCBsZW4sIHN0YXJ0LCBlbmQsIGxpc3Q7XG5cbiAgICBmb3IgKGkgPSAwLCBsZW4gPSBob2xlSW5kaWNlcy5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuICAgICAgICBzdGFydCA9IGhvbGVJbmRpY2VzW2ldICogZGltO1xuICAgICAgICBlbmQgPSBpIDwgbGVuIC0gMSA/IGhvbGVJbmRpY2VzW2kgKyAxXSAqIGRpbSA6IGRhdGEubGVuZ3RoO1xuICAgICAgICBsaXN0ID0gbGlua2VkTGlzdChkYXRhLCBzdGFydCwgZW5kLCBkaW0sIGZhbHNlKTtcbiAgICAgICAgaWYgKGxpc3QgPT09IGxpc3QubmV4dCkgbGlzdC5zdGVpbmVyID0gdHJ1ZTtcbiAgICAgICAgcXVldWUucHVzaChnZXRMZWZ0bW9zdChsaXN0KSk7XG4gICAgfVxuXG4gICAgcXVldWUuc29ydChjb21wYXJlWCk7XG5cbiAgICAvLyBwcm9jZXNzIGhvbGVzIGZyb20gbGVmdCB0byByaWdodFxuICAgIGZvciAoaSA9IDA7IGkgPCBxdWV1ZS5sZW5ndGg7IGkrKykge1xuICAgICAgICBlbGltaW5hdGVIb2xlKHF1ZXVlW2ldLCBvdXRlck5vZGUpO1xuICAgICAgICBvdXRlck5vZGUgPSBmaWx0ZXJQb2ludHMob3V0ZXJOb2RlLCBvdXRlck5vZGUubmV4dCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG91dGVyTm9kZTtcbn1cblxuZnVuY3Rpb24gY29tcGFyZVgoYSwgYikge1xuICAgIHJldHVybiBhLnggLSBiLng7XG59XG5cbi8vIGZpbmQgYSBicmlkZ2UgYmV0d2VlbiB2ZXJ0aWNlcyB0aGF0IGNvbm5lY3RzIGhvbGUgd2l0aCBhbiBvdXRlciByaW5nIGFuZCBhbmQgbGluayBpdFxuZnVuY3Rpb24gZWxpbWluYXRlSG9sZShob2xlLCBvdXRlck5vZGUpIHtcbiAgICBvdXRlck5vZGUgPSBmaW5kSG9sZUJyaWRnZShob2xlLCBvdXRlck5vZGUpO1xuICAgIGlmIChvdXRlck5vZGUpIHtcbiAgICAgICAgdmFyIGIgPSBzcGxpdFBvbHlnb24ob3V0ZXJOb2RlLCBob2xlKTtcbiAgICAgICAgZmlsdGVyUG9pbnRzKGIsIGIubmV4dCk7XG4gICAgfVxufVxuXG4vLyBEYXZpZCBFYmVybHkncyBhbGdvcml0aG0gZm9yIGZpbmRpbmcgYSBicmlkZ2UgYmV0d2VlbiBob2xlIGFuZCBvdXRlciBwb2x5Z29uXG5mdW5jdGlvbiBmaW5kSG9sZUJyaWRnZShob2xlLCBvdXRlck5vZGUpIHtcbiAgICB2YXIgcCA9IG91dGVyTm9kZSxcbiAgICAgICAgaHggPSBob2xlLngsXG4gICAgICAgIGh5ID0gaG9sZS55LFxuICAgICAgICBxeCA9IC1JbmZpbml0eSxcbiAgICAgICAgbTtcblxuICAgIC8vIGZpbmQgYSBzZWdtZW50IGludGVyc2VjdGVkIGJ5IGEgcmF5IGZyb20gdGhlIGhvbGUncyBsZWZ0bW9zdCBwb2ludCB0byB0aGUgbGVmdDtcbiAgICAvLyBzZWdtZW50J3MgZW5kcG9pbnQgd2l0aCBsZXNzZXIgeCB3aWxsIGJlIHBvdGVudGlhbCBjb25uZWN0aW9uIHBvaW50XG4gICAgZG8ge1xuICAgICAgICBpZiAoaHkgPD0gcC55ICYmIGh5ID49IHAubmV4dC55KSB7XG4gICAgICAgICAgICB2YXIgeCA9IHAueCArIChoeSAtIHAueSkgKiAocC5uZXh0LnggLSBwLngpIC8gKHAubmV4dC55IC0gcC55KTtcbiAgICAgICAgICAgIGlmICh4IDw9IGh4ICYmIHggPiBxeCkge1xuICAgICAgICAgICAgICAgIHF4ID0geDtcbiAgICAgICAgICAgICAgICBtID0gcC54IDwgcC5uZXh0LnggPyBwIDogcC5uZXh0O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHAgPSBwLm5leHQ7XG4gICAgfSB3aGlsZSAocCAhPT0gb3V0ZXJOb2RlKTtcblxuICAgIGlmICghbSkgcmV0dXJuIG51bGw7XG5cbiAgICAvLyBsb29rIGZvciBwb2ludHMgaW5zaWRlIHRoZSB0cmlhbmdsZSBvZiBob2xlIHBvaW50LCBzZWdtZW50IGludGVyc2VjdGlvbiBhbmQgZW5kcG9pbnQ7XG4gICAgLy8gaWYgdGhlcmUgYXJlIG5vIHBvaW50cyBmb3VuZCwgd2UgaGF2ZSBhIHZhbGlkIGNvbm5lY3Rpb247XG4gICAgLy8gb3RoZXJ3aXNlIGNob29zZSB0aGUgcG9pbnQgb2YgdGhlIG1pbmltdW0gYW5nbGUgd2l0aCB0aGUgcmF5IGFzIGNvbm5lY3Rpb24gcG9pbnRcblxuICAgIHZhciBzdG9wID0gbSxcbiAgICAgICAgdGFuTWluID0gSW5maW5pdHksXG4gICAgICAgIHRhbjtcblxuICAgIHAgPSBtLm5leHQ7XG5cbiAgICB3aGlsZSAocCAhPT0gc3RvcCkge1xuICAgICAgICBpZiAoaHggPj0gcC54ICYmIHAueCA+PSBtLnggJiZcbiAgICAgICAgICAgICAgICBwb2ludEluVHJpYW5nbGUoaHkgPCBtLnkgPyBoeCA6IHF4LCBoeSwgbS54LCBtLnksIGh5IDwgbS55ID8gcXggOiBoeCwgaHksIHAueCwgcC55KSkge1xuXG4gICAgICAgICAgICB0YW4gPSBNYXRoLmFicyhoeSAtIHAueSkgLyAoaHggLSBwLngpOyAvLyB0YW5nZW50aWFsXG5cbiAgICAgICAgICAgIGlmICgodGFuIDwgdGFuTWluIHx8ICh0YW4gPT09IHRhbk1pbiAmJiBwLnggPiBtLngpKSAmJiBsb2NhbGx5SW5zaWRlKHAsIGhvbGUpKSB7XG4gICAgICAgICAgICAgICAgbSA9IHA7XG4gICAgICAgICAgICAgICAgdGFuTWluID0gdGFuO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcCA9IHAubmV4dDtcbiAgICB9XG5cbiAgICByZXR1cm4gbTtcbn1cblxuLy8gaW50ZXJsaW5rIHBvbHlnb24gbm9kZXMgaW4gei1vcmRlclxuZnVuY3Rpb24gaW5kZXhDdXJ2ZShzdGFydCwgbWluWCwgbWluWSwgc2l6ZSkge1xuICAgIHZhciBwID0gc3RhcnQ7XG4gICAgZG8ge1xuICAgICAgICBpZiAocC56ID09PSBudWxsKSBwLnogPSB6T3JkZXIocC54LCBwLnksIG1pblgsIG1pblksIHNpemUpO1xuICAgICAgICBwLnByZXZaID0gcC5wcmV2O1xuICAgICAgICBwLm5leHRaID0gcC5uZXh0O1xuICAgICAgICBwID0gcC5uZXh0O1xuICAgIH0gd2hpbGUgKHAgIT09IHN0YXJ0KTtcblxuICAgIHAucHJldloubmV4dFogPSBudWxsO1xuICAgIHAucHJldlogPSBudWxsO1xuXG4gICAgc29ydExpbmtlZChwKTtcbn1cblxuLy8gU2ltb24gVGF0aGFtJ3MgbGlua2VkIGxpc3QgbWVyZ2Ugc29ydCBhbGdvcml0aG1cbi8vIGh0dHA6Ly93d3cuY2hpYXJrLmdyZWVuZW5kLm9yZy51ay9+c2d0YXRoYW0vYWxnb3JpdGhtcy9saXN0c29ydC5odG1sXG5mdW5jdGlvbiBzb3J0TGlua2VkKGxpc3QpIHtcbiAgICB2YXIgaSwgcCwgcSwgZSwgdGFpbCwgbnVtTWVyZ2VzLCBwU2l6ZSwgcVNpemUsXG4gICAgICAgIGluU2l6ZSA9IDE7XG5cbiAgICBkbyB7XG4gICAgICAgIHAgPSBsaXN0O1xuICAgICAgICBsaXN0ID0gbnVsbDtcbiAgICAgICAgdGFpbCA9IG51bGw7XG4gICAgICAgIG51bU1lcmdlcyA9IDA7XG5cbiAgICAgICAgd2hpbGUgKHApIHtcbiAgICAgICAgICAgIG51bU1lcmdlcysrO1xuICAgICAgICAgICAgcSA9IHA7XG4gICAgICAgICAgICBwU2l6ZSA9IDA7XG4gICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgaW5TaXplOyBpKyspIHtcbiAgICAgICAgICAgICAgICBwU2l6ZSsrO1xuICAgICAgICAgICAgICAgIHEgPSBxLm5leHRaO1xuICAgICAgICAgICAgICAgIGlmICghcSkgYnJlYWs7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHFTaXplID0gaW5TaXplO1xuXG4gICAgICAgICAgICB3aGlsZSAocFNpemUgPiAwIHx8IChxU2l6ZSA+IDAgJiYgcSkpIHtcblxuICAgICAgICAgICAgICAgIGlmIChwU2l6ZSA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICBlID0gcTtcbiAgICAgICAgICAgICAgICAgICAgcSA9IHEubmV4dFo7XG4gICAgICAgICAgICAgICAgICAgIHFTaXplLS07XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChxU2l6ZSA9PT0gMCB8fCAhcSkge1xuICAgICAgICAgICAgICAgICAgICBlID0gcDtcbiAgICAgICAgICAgICAgICAgICAgcCA9IHAubmV4dFo7XG4gICAgICAgICAgICAgICAgICAgIHBTaXplLS07XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChwLnogPD0gcS56KSB7XG4gICAgICAgICAgICAgICAgICAgIGUgPSBwO1xuICAgICAgICAgICAgICAgICAgICBwID0gcC5uZXh0WjtcbiAgICAgICAgICAgICAgICAgICAgcFNpemUtLTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBlID0gcTtcbiAgICAgICAgICAgICAgICAgICAgcSA9IHEubmV4dFo7XG4gICAgICAgICAgICAgICAgICAgIHFTaXplLS07XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKHRhaWwpIHRhaWwubmV4dFogPSBlO1xuICAgICAgICAgICAgICAgIGVsc2UgbGlzdCA9IGU7XG5cbiAgICAgICAgICAgICAgICBlLnByZXZaID0gdGFpbDtcbiAgICAgICAgICAgICAgICB0YWlsID0gZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcCA9IHE7XG4gICAgICAgIH1cblxuICAgICAgICB0YWlsLm5leHRaID0gbnVsbDtcbiAgICAgICAgaW5TaXplICo9IDI7XG5cbiAgICB9IHdoaWxlIChudW1NZXJnZXMgPiAxKTtcblxuICAgIHJldHVybiBsaXN0O1xufVxuXG4vLyB6LW9yZGVyIG9mIGEgcG9pbnQgZ2l2ZW4gY29vcmRzIGFuZCBzaXplIG9mIHRoZSBkYXRhIGJvdW5kaW5nIGJveFxuZnVuY3Rpb24gek9yZGVyKHgsIHksIG1pblgsIG1pblksIHNpemUpIHtcbiAgICAvLyBjb29yZHMgYXJlIHRyYW5zZm9ybWVkIGludG8gbm9uLW5lZ2F0aXZlIDE1LWJpdCBpbnRlZ2VyIHJhbmdlXG4gICAgeCA9IDMyNzY3ICogKHggLSBtaW5YKSAvIHNpemU7XG4gICAgeSA9IDMyNzY3ICogKHkgLSBtaW5ZKSAvIHNpemU7XG5cbiAgICB4ID0gKHggfCAoeCA8PCA4KSkgJiAweDAwRkYwMEZGO1xuICAgIHggPSAoeCB8ICh4IDw8IDQpKSAmIDB4MEYwRjBGMEY7XG4gICAgeCA9ICh4IHwgKHggPDwgMikpICYgMHgzMzMzMzMzMztcbiAgICB4ID0gKHggfCAoeCA8PCAxKSkgJiAweDU1NTU1NTU1O1xuXG4gICAgeSA9ICh5IHwgKHkgPDwgOCkpICYgMHgwMEZGMDBGRjtcbiAgICB5ID0gKHkgfCAoeSA8PCA0KSkgJiAweDBGMEYwRjBGO1xuICAgIHkgPSAoeSB8ICh5IDw8IDIpKSAmIDB4MzMzMzMzMzM7XG4gICAgeSA9ICh5IHwgKHkgPDwgMSkpICYgMHg1NTU1NTU1NTtcblxuICAgIHJldHVybiB4IHwgKHkgPDwgMSk7XG59XG5cbi8vIGZpbmQgdGhlIGxlZnRtb3N0IG5vZGUgb2YgYSBwb2x5Z29uIHJpbmdcbmZ1bmN0aW9uIGdldExlZnRtb3N0KHN0YXJ0KSB7XG4gICAgdmFyIHAgPSBzdGFydCxcbiAgICAgICAgbGVmdG1vc3QgPSBzdGFydDtcbiAgICBkbyB7XG4gICAgICAgIGlmIChwLnggPCBsZWZ0bW9zdC54KSBsZWZ0bW9zdCA9IHA7XG4gICAgICAgIHAgPSBwLm5leHQ7XG4gICAgfSB3aGlsZSAocCAhPT0gc3RhcnQpO1xuXG4gICAgcmV0dXJuIGxlZnRtb3N0O1xufVxuXG4vLyBjaGVjayBpZiBhIHBvaW50IGxpZXMgd2l0aGluIGEgY29udmV4IHRyaWFuZ2xlXG5mdW5jdGlvbiBwb2ludEluVHJpYW5nbGUoYXgsIGF5LCBieCwgYnksIGN4LCBjeSwgcHgsIHB5KSB7XG4gICAgcmV0dXJuIChjeCAtIHB4KSAqIChheSAtIHB5KSAtIChheCAtIHB4KSAqIChjeSAtIHB5KSA+PSAwICYmXG4gICAgICAgICAgIChheCAtIHB4KSAqIChieSAtIHB5KSAtIChieCAtIHB4KSAqIChheSAtIHB5KSA+PSAwICYmXG4gICAgICAgICAgIChieCAtIHB4KSAqIChjeSAtIHB5KSAtIChjeCAtIHB4KSAqIChieSAtIHB5KSA+PSAwO1xufVxuXG4vLyBjaGVjayBpZiBhIGRpYWdvbmFsIGJldHdlZW4gdHdvIHBvbHlnb24gbm9kZXMgaXMgdmFsaWQgKGxpZXMgaW4gcG9seWdvbiBpbnRlcmlvcilcbmZ1bmN0aW9uIGlzVmFsaWREaWFnb25hbChhLCBiKSB7XG4gICAgcmV0dXJuIGVxdWFscyhhLCBiKSB8fCBhLm5leHQuaSAhPT0gYi5pICYmIGEucHJldi5pICE9PSBiLmkgJiYgIWludGVyc2VjdHNQb2x5Z29uKGEsIGIpICYmXG4gICAgICAgICAgIGxvY2FsbHlJbnNpZGUoYSwgYikgJiYgbG9jYWxseUluc2lkZShiLCBhKSAmJiBtaWRkbGVJbnNpZGUoYSwgYik7XG59XG5cbi8vIHNpZ25lZCBhcmVhIG9mIGEgdHJpYW5nbGVcbmZ1bmN0aW9uIGFyZWEocCwgcSwgcikge1xuICAgIHJldHVybiAocS55IC0gcC55KSAqIChyLnggLSBxLngpIC0gKHEueCAtIHAueCkgKiAoci55IC0gcS55KTtcbn1cblxuLy8gY2hlY2sgaWYgdHdvIHBvaW50cyBhcmUgZXF1YWxcbmZ1bmN0aW9uIGVxdWFscyhwMSwgcDIpIHtcbiAgICByZXR1cm4gcDEueCA9PT0gcDIueCAmJiBwMS55ID09PSBwMi55O1xufVxuXG4vLyBjaGVjayBpZiB0d28gc2VnbWVudHMgaW50ZXJzZWN0XG5mdW5jdGlvbiBpbnRlcnNlY3RzKHAxLCBxMSwgcDIsIHEyKSB7XG4gICAgcmV0dXJuIGFyZWEocDEsIHExLCBwMikgPiAwICE9PSBhcmVhKHAxLCBxMSwgcTIpID4gMCAmJlxuICAgICAgICAgICBhcmVhKHAyLCBxMiwgcDEpID4gMCAhPT0gYXJlYShwMiwgcTIsIHExKSA+IDA7XG59XG5cbi8vIGNoZWNrIGlmIGEgcG9seWdvbiBkaWFnb25hbCBpbnRlcnNlY3RzIGFueSBwb2x5Z29uIHNlZ21lbnRzXG5mdW5jdGlvbiBpbnRlcnNlY3RzUG9seWdvbihhLCBiKSB7XG4gICAgdmFyIHAgPSBhO1xuICAgIGRvIHtcbiAgICAgICAgaWYgKHAuaSAhPT0gYS5pICYmIHAubmV4dC5pICE9PSBhLmkgJiYgcC5pICE9PSBiLmkgJiYgcC5uZXh0LmkgIT09IGIuaSAmJlxuICAgICAgICAgICAgICAgIGludGVyc2VjdHMocCwgcC5uZXh0LCBhLCBiKSkgcmV0dXJuIHRydWU7XG4gICAgICAgIHAgPSBwLm5leHQ7XG4gICAgfSB3aGlsZSAocCAhPT0gYSk7XG5cbiAgICByZXR1cm4gZmFsc2U7XG59XG5cbi8vIGNoZWNrIGlmIGEgcG9seWdvbiBkaWFnb25hbCBpcyBsb2NhbGx5IGluc2lkZSB0aGUgcG9seWdvblxuZnVuY3Rpb24gbG9jYWxseUluc2lkZShhLCBiKSB7XG4gICAgcmV0dXJuIGFyZWEoYS5wcmV2LCBhLCBhLm5leHQpIDwgMCA/XG4gICAgICAgIGFyZWEoYSwgYiwgYS5uZXh0KSA+PSAwICYmIGFyZWEoYSwgYS5wcmV2LCBiKSA+PSAwIDpcbiAgICAgICAgYXJlYShhLCBiLCBhLnByZXYpIDwgMCB8fCBhcmVhKGEsIGEubmV4dCwgYikgPCAwO1xufVxuXG4vLyBjaGVjayBpZiB0aGUgbWlkZGxlIHBvaW50IG9mIGEgcG9seWdvbiBkaWFnb25hbCBpcyBpbnNpZGUgdGhlIHBvbHlnb25cbmZ1bmN0aW9uIG1pZGRsZUluc2lkZShhLCBiKSB7XG4gICAgdmFyIHAgPSBhLFxuICAgICAgICBpbnNpZGUgPSBmYWxzZSxcbiAgICAgICAgcHggPSAoYS54ICsgYi54KSAvIDIsXG4gICAgICAgIHB5ID0gKGEueSArIGIueSkgLyAyO1xuICAgIGRvIHtcbiAgICAgICAgaWYgKCgocC55ID4gcHkpICE9PSAocC5uZXh0LnkgPiBweSkpICYmIChweCA8IChwLm5leHQueCAtIHAueCkgKiAocHkgLSBwLnkpIC8gKHAubmV4dC55IC0gcC55KSArIHAueCkpXG4gICAgICAgICAgICBpbnNpZGUgPSAhaW5zaWRlO1xuICAgICAgICBwID0gcC5uZXh0O1xuICAgIH0gd2hpbGUgKHAgIT09IGEpO1xuXG4gICAgcmV0dXJuIGluc2lkZTtcbn1cblxuLy8gbGluayB0d28gcG9seWdvbiB2ZXJ0aWNlcyB3aXRoIGEgYnJpZGdlOyBpZiB0aGUgdmVydGljZXMgYmVsb25nIHRvIHRoZSBzYW1lIHJpbmcsIGl0IHNwbGl0cyBwb2x5Z29uIGludG8gdHdvO1xuLy8gaWYgb25lIGJlbG9uZ3MgdG8gdGhlIG91dGVyIHJpbmcgYW5kIGFub3RoZXIgdG8gYSBob2xlLCBpdCBtZXJnZXMgaXQgaW50byBhIHNpbmdsZSByaW5nXG5mdW5jdGlvbiBzcGxpdFBvbHlnb24oYSwgYikge1xuICAgIHZhciBhMiA9IG5ldyBOb2RlKGEuaSwgYS54LCBhLnkpLFxuICAgICAgICBiMiA9IG5ldyBOb2RlKGIuaSwgYi54LCBiLnkpLFxuICAgICAgICBhbiA9IGEubmV4dCxcbiAgICAgICAgYnAgPSBiLnByZXY7XG5cbiAgICBhLm5leHQgPSBiO1xuICAgIGIucHJldiA9IGE7XG5cbiAgICBhMi5uZXh0ID0gYW47XG4gICAgYW4ucHJldiA9IGEyO1xuXG4gICAgYjIubmV4dCA9IGEyO1xuICAgIGEyLnByZXYgPSBiMjtcblxuICAgIGJwLm5leHQgPSBiMjtcbiAgICBiMi5wcmV2ID0gYnA7XG5cbiAgICByZXR1cm4gYjI7XG59XG5cbi8vIGNyZWF0ZSBhIG5vZGUgYW5kIG9wdGlvbmFsbHkgbGluayBpdCB3aXRoIHByZXZpb3VzIG9uZSAoaW4gYSBjaXJjdWxhciBkb3VibHkgbGlua2VkIGxpc3QpXG5mdW5jdGlvbiBpbnNlcnROb2RlKGksIHgsIHksIGxhc3QpIHtcbiAgICB2YXIgcCA9IG5ldyBOb2RlKGksIHgsIHkpO1xuXG4gICAgaWYgKCFsYXN0KSB7XG4gICAgICAgIHAucHJldiA9IHA7XG4gICAgICAgIHAubmV4dCA9IHA7XG5cbiAgICB9IGVsc2Uge1xuICAgICAgICBwLm5leHQgPSBsYXN0Lm5leHQ7XG4gICAgICAgIHAucHJldiA9IGxhc3Q7XG4gICAgICAgIGxhc3QubmV4dC5wcmV2ID0gcDtcbiAgICAgICAgbGFzdC5uZXh0ID0gcDtcbiAgICB9XG4gICAgcmV0dXJuIHA7XG59XG5cbmZ1bmN0aW9uIHJlbW92ZU5vZGUocCkge1xuICAgIHAubmV4dC5wcmV2ID0gcC5wcmV2O1xuICAgIHAucHJldi5uZXh0ID0gcC5uZXh0O1xuXG4gICAgaWYgKHAucHJldlopIHAucHJldloubmV4dFogPSBwLm5leHRaO1xuICAgIGlmIChwLm5leHRaKSBwLm5leHRaLnByZXZaID0gcC5wcmV2Wjtcbn1cblxuZnVuY3Rpb24gTm9kZShpLCB4LCB5KSB7XG4gICAgLy8gdmVydGljZSBpbmRleCBpbiBjb29yZGluYXRlcyBhcnJheVxuICAgIHRoaXMuaSA9IGk7XG5cbiAgICAvLyB2ZXJ0ZXggY29vcmRpbmF0ZXNcbiAgICB0aGlzLnggPSB4O1xuICAgIHRoaXMueSA9IHk7XG5cbiAgICAvLyBwcmV2aW91cyBhbmQgbmV4dCB2ZXJ0aWNlIG5vZGVzIGluIGEgcG9seWdvbiByaW5nXG4gICAgdGhpcy5wcmV2ID0gbnVsbDtcbiAgICB0aGlzLm5leHQgPSBudWxsO1xuXG4gICAgLy8gei1vcmRlciBjdXJ2ZSB2YWx1ZVxuICAgIHRoaXMueiA9IG51bGw7XG5cbiAgICAvLyBwcmV2aW91cyBhbmQgbmV4dCBub2RlcyBpbiB6LW9yZGVyXG4gICAgdGhpcy5wcmV2WiA9IG51bGw7XG4gICAgdGhpcy5uZXh0WiA9IG51bGw7XG5cbiAgICAvLyBpbmRpY2F0ZXMgd2hldGhlciB0aGlzIGlzIGEgc3RlaW5lciBwb2ludFxuICAgIHRoaXMuc3RlaW5lciA9IGZhbHNlO1xufVxuIiwiJ3VzZSBzdHJpY3QnO1xuXG4vL1xuLy8gV2Ugc3RvcmUgb3VyIEVFIG9iamVjdHMgaW4gYSBwbGFpbiBvYmplY3Qgd2hvc2UgcHJvcGVydGllcyBhcmUgZXZlbnQgbmFtZXMuXG4vLyBJZiBgT2JqZWN0LmNyZWF0ZShudWxsKWAgaXMgbm90IHN1cHBvcnRlZCB3ZSBwcmVmaXggdGhlIGV2ZW50IG5hbWVzIHdpdGggYVxuLy8gYH5gIHRvIG1ha2Ugc3VyZSB0aGF0IHRoZSBidWlsdC1pbiBvYmplY3QgcHJvcGVydGllcyBhcmUgbm90IG92ZXJyaWRkZW4gb3Jcbi8vIHVzZWQgYXMgYW4gYXR0YWNrIHZlY3Rvci5cbi8vIFdlIGFsc28gYXNzdW1lIHRoYXQgYE9iamVjdC5jcmVhdGUobnVsbClgIGlzIGF2YWlsYWJsZSB3aGVuIHRoZSBldmVudCBuYW1lXG4vLyBpcyBhbiBFUzYgU3ltYm9sLlxuLy9cbnZhciBwcmVmaXggPSB0eXBlb2YgT2JqZWN0LmNyZWF0ZSAhPT0gJ2Z1bmN0aW9uJyA/ICd+JyA6IGZhbHNlO1xuXG4vKipcbiAqIFJlcHJlc2VudGF0aW9uIG9mIGEgc2luZ2xlIEV2ZW50RW1pdHRlciBmdW5jdGlvbi5cbiAqXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmbiBFdmVudCBoYW5kbGVyIHRvIGJlIGNhbGxlZC5cbiAqIEBwYXJhbSB7TWl4ZWR9IGNvbnRleHQgQ29udGV4dCBmb3IgZnVuY3Rpb24gZXhlY3V0aW9uLlxuICogQHBhcmFtIHtCb29sZWFufSBvbmNlIE9ubHkgZW1pdCBvbmNlXG4gKiBAYXBpIHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gRUUoZm4sIGNvbnRleHQsIG9uY2UpIHtcbiAgdGhpcy5mbiA9IGZuO1xuICB0aGlzLmNvbnRleHQgPSBjb250ZXh0O1xuICB0aGlzLm9uY2UgPSBvbmNlIHx8IGZhbHNlO1xufVxuXG4vKipcbiAqIE1pbmltYWwgRXZlbnRFbWl0dGVyIGludGVyZmFjZSB0aGF0IGlzIG1vbGRlZCBhZ2FpbnN0IHRoZSBOb2RlLmpzXG4gKiBFdmVudEVtaXR0ZXIgaW50ZXJmYWNlLlxuICpcbiAqIEBjb25zdHJ1Y3RvclxuICogQGFwaSBwdWJsaWNcbiAqL1xuZnVuY3Rpb24gRXZlbnRFbWl0dGVyKCkgeyAvKiBOb3RoaW5nIHRvIHNldCAqLyB9XG5cbi8qKlxuICogSG9sZHMgdGhlIGFzc2lnbmVkIEV2ZW50RW1pdHRlcnMgYnkgbmFtZS5cbiAqXG4gKiBAdHlwZSB7T2JqZWN0fVxuICogQHByaXZhdGVcbiAqL1xuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5fZXZlbnRzID0gdW5kZWZpbmVkO1xuXG4vKipcbiAqIFJldHVybiBhIGxpc3Qgb2YgYXNzaWduZWQgZXZlbnQgbGlzdGVuZXJzLlxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBldmVudCBUaGUgZXZlbnRzIHRoYXQgc2hvdWxkIGJlIGxpc3RlZC5cbiAqIEBwYXJhbSB7Qm9vbGVhbn0gZXhpc3RzIFdlIG9ubHkgbmVlZCB0byBrbm93IGlmIHRoZXJlIGFyZSBsaXN0ZW5lcnMuXG4gKiBAcmV0dXJucyB7QXJyYXl8Qm9vbGVhbn1cbiAqIEBhcGkgcHVibGljXG4gKi9cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUubGlzdGVuZXJzID0gZnVuY3Rpb24gbGlzdGVuZXJzKGV2ZW50LCBleGlzdHMpIHtcbiAgdmFyIGV2dCA9IHByZWZpeCA/IHByZWZpeCArIGV2ZW50IDogZXZlbnRcbiAgICAsIGF2YWlsYWJsZSA9IHRoaXMuX2V2ZW50cyAmJiB0aGlzLl9ldmVudHNbZXZ0XTtcblxuICBpZiAoZXhpc3RzKSByZXR1cm4gISFhdmFpbGFibGU7XG4gIGlmICghYXZhaWxhYmxlKSByZXR1cm4gW107XG4gIGlmIChhdmFpbGFibGUuZm4pIHJldHVybiBbYXZhaWxhYmxlLmZuXTtcblxuICBmb3IgKHZhciBpID0gMCwgbCA9IGF2YWlsYWJsZS5sZW5ndGgsIGVlID0gbmV3IEFycmF5KGwpOyBpIDwgbDsgaSsrKSB7XG4gICAgZWVbaV0gPSBhdmFpbGFibGVbaV0uZm47XG4gIH1cblxuICByZXR1cm4gZWU7XG59O1xuXG4vKipcbiAqIEVtaXQgYW4gZXZlbnQgdG8gYWxsIHJlZ2lzdGVyZWQgZXZlbnQgbGlzdGVuZXJzLlxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBldmVudCBUaGUgbmFtZSBvZiB0aGUgZXZlbnQuXG4gKiBAcmV0dXJucyB7Qm9vbGVhbn0gSW5kaWNhdGlvbiBpZiB3ZSd2ZSBlbWl0dGVkIGFuIGV2ZW50LlxuICogQGFwaSBwdWJsaWNcbiAqL1xuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5lbWl0ID0gZnVuY3Rpb24gZW1pdChldmVudCwgYTEsIGEyLCBhMywgYTQsIGE1KSB7XG4gIHZhciBldnQgPSBwcmVmaXggPyBwcmVmaXggKyBldmVudCA6IGV2ZW50O1xuXG4gIGlmICghdGhpcy5fZXZlbnRzIHx8ICF0aGlzLl9ldmVudHNbZXZ0XSkgcmV0dXJuIGZhbHNlO1xuXG4gIHZhciBsaXN0ZW5lcnMgPSB0aGlzLl9ldmVudHNbZXZ0XVxuICAgICwgbGVuID0gYXJndW1lbnRzLmxlbmd0aFxuICAgICwgYXJnc1xuICAgICwgaTtcblxuICBpZiAoJ2Z1bmN0aW9uJyA9PT0gdHlwZW9mIGxpc3RlbmVycy5mbikge1xuICAgIGlmIChsaXN0ZW5lcnMub25jZSkgdGhpcy5yZW1vdmVMaXN0ZW5lcihldmVudCwgbGlzdGVuZXJzLmZuLCB1bmRlZmluZWQsIHRydWUpO1xuXG4gICAgc3dpdGNoIChsZW4pIHtcbiAgICAgIGNhc2UgMTogcmV0dXJuIGxpc3RlbmVycy5mbi5jYWxsKGxpc3RlbmVycy5jb250ZXh0KSwgdHJ1ZTtcbiAgICAgIGNhc2UgMjogcmV0dXJuIGxpc3RlbmVycy5mbi5jYWxsKGxpc3RlbmVycy5jb250ZXh0LCBhMSksIHRydWU7XG4gICAgICBjYXNlIDM6IHJldHVybiBsaXN0ZW5lcnMuZm4uY2FsbChsaXN0ZW5lcnMuY29udGV4dCwgYTEsIGEyKSwgdHJ1ZTtcbiAgICAgIGNhc2UgNDogcmV0dXJuIGxpc3RlbmVycy5mbi5jYWxsKGxpc3RlbmVycy5jb250ZXh0LCBhMSwgYTIsIGEzKSwgdHJ1ZTtcbiAgICAgIGNhc2UgNTogcmV0dXJuIGxpc3RlbmVycy5mbi5jYWxsKGxpc3RlbmVycy5jb250ZXh0LCBhMSwgYTIsIGEzLCBhNCksIHRydWU7XG4gICAgICBjYXNlIDY6IHJldHVybiBsaXN0ZW5lcnMuZm4uY2FsbChsaXN0ZW5lcnMuY29udGV4dCwgYTEsIGEyLCBhMywgYTQsIGE1KSwgdHJ1ZTtcbiAgICB9XG5cbiAgICBmb3IgKGkgPSAxLCBhcmdzID0gbmV3IEFycmF5KGxlbiAtMSk7IGkgPCBsZW47IGkrKykge1xuICAgICAgYXJnc1tpIC0gMV0gPSBhcmd1bWVudHNbaV07XG4gICAgfVxuXG4gICAgbGlzdGVuZXJzLmZuLmFwcGx5KGxpc3RlbmVycy5jb250ZXh0LCBhcmdzKTtcbiAgfSBlbHNlIHtcbiAgICB2YXIgbGVuZ3RoID0gbGlzdGVuZXJzLmxlbmd0aFxuICAgICAgLCBqO1xuXG4gICAgZm9yIChpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAobGlzdGVuZXJzW2ldLm9uY2UpIHRoaXMucmVtb3ZlTGlzdGVuZXIoZXZlbnQsIGxpc3RlbmVyc1tpXS5mbiwgdW5kZWZpbmVkLCB0cnVlKTtcblxuICAgICAgc3dpdGNoIChsZW4pIHtcbiAgICAgICAgY2FzZSAxOiBsaXN0ZW5lcnNbaV0uZm4uY2FsbChsaXN0ZW5lcnNbaV0uY29udGV4dCk7IGJyZWFrO1xuICAgICAgICBjYXNlIDI6IGxpc3RlbmVyc1tpXS5mbi5jYWxsKGxpc3RlbmVyc1tpXS5jb250ZXh0LCBhMSk7IGJyZWFrO1xuICAgICAgICBjYXNlIDM6IGxpc3RlbmVyc1tpXS5mbi5jYWxsKGxpc3RlbmVyc1tpXS5jb250ZXh0LCBhMSwgYTIpOyBicmVhaztcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICBpZiAoIWFyZ3MpIGZvciAoaiA9IDEsIGFyZ3MgPSBuZXcgQXJyYXkobGVuIC0xKTsgaiA8IGxlbjsgaisrKSB7XG4gICAgICAgICAgICBhcmdzW2ogLSAxXSA9IGFyZ3VtZW50c1tqXTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBsaXN0ZW5lcnNbaV0uZm4uYXBwbHkobGlzdGVuZXJzW2ldLmNvbnRleHQsIGFyZ3MpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiB0cnVlO1xufTtcblxuLyoqXG4gKiBSZWdpc3RlciBhIG5ldyBFdmVudExpc3RlbmVyIGZvciB0aGUgZ2l2ZW4gZXZlbnQuXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IGV2ZW50IE5hbWUgb2YgdGhlIGV2ZW50LlxuICogQHBhcmFtIHtGdW5jdG9ufSBmbiBDYWxsYmFjayBmdW5jdGlvbi5cbiAqIEBwYXJhbSB7TWl4ZWR9IGNvbnRleHQgVGhlIGNvbnRleHQgb2YgdGhlIGZ1bmN0aW9uLlxuICogQGFwaSBwdWJsaWNcbiAqL1xuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5vbiA9IGZ1bmN0aW9uIG9uKGV2ZW50LCBmbiwgY29udGV4dCkge1xuICB2YXIgbGlzdGVuZXIgPSBuZXcgRUUoZm4sIGNvbnRleHQgfHwgdGhpcylcbiAgICAsIGV2dCA9IHByZWZpeCA/IHByZWZpeCArIGV2ZW50IDogZXZlbnQ7XG5cbiAgaWYgKCF0aGlzLl9ldmVudHMpIHRoaXMuX2V2ZW50cyA9IHByZWZpeCA/IHt9IDogT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgaWYgKCF0aGlzLl9ldmVudHNbZXZ0XSkgdGhpcy5fZXZlbnRzW2V2dF0gPSBsaXN0ZW5lcjtcbiAgZWxzZSB7XG4gICAgaWYgKCF0aGlzLl9ldmVudHNbZXZ0XS5mbikgdGhpcy5fZXZlbnRzW2V2dF0ucHVzaChsaXN0ZW5lcik7XG4gICAgZWxzZSB0aGlzLl9ldmVudHNbZXZ0XSA9IFtcbiAgICAgIHRoaXMuX2V2ZW50c1tldnRdLCBsaXN0ZW5lclxuICAgIF07XG4gIH1cblxuICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogQWRkIGFuIEV2ZW50TGlzdGVuZXIgdGhhdCdzIG9ubHkgY2FsbGVkIG9uY2UuXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IGV2ZW50IE5hbWUgb2YgdGhlIGV2ZW50LlxuICogQHBhcmFtIHtGdW5jdGlvbn0gZm4gQ2FsbGJhY2sgZnVuY3Rpb24uXG4gKiBAcGFyYW0ge01peGVkfSBjb250ZXh0IFRoZSBjb250ZXh0IG9mIHRoZSBmdW5jdGlvbi5cbiAqIEBhcGkgcHVibGljXG4gKi9cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUub25jZSA9IGZ1bmN0aW9uIG9uY2UoZXZlbnQsIGZuLCBjb250ZXh0KSB7XG4gIHZhciBsaXN0ZW5lciA9IG5ldyBFRShmbiwgY29udGV4dCB8fCB0aGlzLCB0cnVlKVxuICAgICwgZXZ0ID0gcHJlZml4ID8gcHJlZml4ICsgZXZlbnQgOiBldmVudDtcblxuICBpZiAoIXRoaXMuX2V2ZW50cykgdGhpcy5fZXZlbnRzID0gcHJlZml4ID8ge30gOiBPYmplY3QuY3JlYXRlKG51bGwpO1xuICBpZiAoIXRoaXMuX2V2ZW50c1tldnRdKSB0aGlzLl9ldmVudHNbZXZ0XSA9IGxpc3RlbmVyO1xuICBlbHNlIHtcbiAgICBpZiAoIXRoaXMuX2V2ZW50c1tldnRdLmZuKSB0aGlzLl9ldmVudHNbZXZ0XS5wdXNoKGxpc3RlbmVyKTtcbiAgICBlbHNlIHRoaXMuX2V2ZW50c1tldnRdID0gW1xuICAgICAgdGhpcy5fZXZlbnRzW2V2dF0sIGxpc3RlbmVyXG4gICAgXTtcbiAgfVxuXG4gIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBSZW1vdmUgZXZlbnQgbGlzdGVuZXJzLlxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBldmVudCBUaGUgZXZlbnQgd2Ugd2FudCB0byByZW1vdmUuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmbiBUaGUgbGlzdGVuZXIgdGhhdCB3ZSBuZWVkIHRvIGZpbmQuXG4gKiBAcGFyYW0ge01peGVkfSBjb250ZXh0IE9ubHkgcmVtb3ZlIGxpc3RlbmVycyBtYXRjaGluZyB0aGlzIGNvbnRleHQuXG4gKiBAcGFyYW0ge0Jvb2xlYW59IG9uY2UgT25seSByZW1vdmUgb25jZSBsaXN0ZW5lcnMuXG4gKiBAYXBpIHB1YmxpY1xuICovXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLnJlbW92ZUxpc3RlbmVyID0gZnVuY3Rpb24gcmVtb3ZlTGlzdGVuZXIoZXZlbnQsIGZuLCBjb250ZXh0LCBvbmNlKSB7XG4gIHZhciBldnQgPSBwcmVmaXggPyBwcmVmaXggKyBldmVudCA6IGV2ZW50O1xuXG4gIGlmICghdGhpcy5fZXZlbnRzIHx8ICF0aGlzLl9ldmVudHNbZXZ0XSkgcmV0dXJuIHRoaXM7XG5cbiAgdmFyIGxpc3RlbmVycyA9IHRoaXMuX2V2ZW50c1tldnRdXG4gICAgLCBldmVudHMgPSBbXTtcblxuICBpZiAoZm4pIHtcbiAgICBpZiAobGlzdGVuZXJzLmZuKSB7XG4gICAgICBpZiAoXG4gICAgICAgICAgIGxpc3RlbmVycy5mbiAhPT0gZm5cbiAgICAgICAgfHwgKG9uY2UgJiYgIWxpc3RlbmVycy5vbmNlKVxuICAgICAgICB8fCAoY29udGV4dCAmJiBsaXN0ZW5lcnMuY29udGV4dCAhPT0gY29udGV4dClcbiAgICAgICkge1xuICAgICAgICBldmVudHMucHVzaChsaXN0ZW5lcnMpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBmb3IgKHZhciBpID0gMCwgbGVuZ3RoID0gbGlzdGVuZXJzLmxlbmd0aDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICAgICBsaXN0ZW5lcnNbaV0uZm4gIT09IGZuXG4gICAgICAgICAgfHwgKG9uY2UgJiYgIWxpc3RlbmVyc1tpXS5vbmNlKVxuICAgICAgICAgIHx8IChjb250ZXh0ICYmIGxpc3RlbmVyc1tpXS5jb250ZXh0ICE9PSBjb250ZXh0KVxuICAgICAgICApIHtcbiAgICAgICAgICBldmVudHMucHVzaChsaXN0ZW5lcnNbaV0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLy9cbiAgLy8gUmVzZXQgdGhlIGFycmF5LCBvciByZW1vdmUgaXQgY29tcGxldGVseSBpZiB3ZSBoYXZlIG5vIG1vcmUgbGlzdGVuZXJzLlxuICAvL1xuICBpZiAoZXZlbnRzLmxlbmd0aCkge1xuICAgIHRoaXMuX2V2ZW50c1tldnRdID0gZXZlbnRzLmxlbmd0aCA9PT0gMSA/IGV2ZW50c1swXSA6IGV2ZW50cztcbiAgfSBlbHNlIHtcbiAgICBkZWxldGUgdGhpcy5fZXZlbnRzW2V2dF07XG4gIH1cblxuICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogUmVtb3ZlIGFsbCBsaXN0ZW5lcnMgb3Igb25seSB0aGUgbGlzdGVuZXJzIGZvciB0aGUgc3BlY2lmaWVkIGV2ZW50LlxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBldmVudCBUaGUgZXZlbnQgd2FudCB0byByZW1vdmUgYWxsIGxpc3RlbmVycyBmb3IuXG4gKiBAYXBpIHB1YmxpY1xuICovXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLnJlbW92ZUFsbExpc3RlbmVycyA9IGZ1bmN0aW9uIHJlbW92ZUFsbExpc3RlbmVycyhldmVudCkge1xuICBpZiAoIXRoaXMuX2V2ZW50cykgcmV0dXJuIHRoaXM7XG5cbiAgaWYgKGV2ZW50KSBkZWxldGUgdGhpcy5fZXZlbnRzW3ByZWZpeCA/IHByZWZpeCArIGV2ZW50IDogZXZlbnRdO1xuICBlbHNlIHRoaXMuX2V2ZW50cyA9IHByZWZpeCA/IHt9IDogT2JqZWN0LmNyZWF0ZShudWxsKTtcblxuICByZXR1cm4gdGhpcztcbn07XG5cbi8vXG4vLyBBbGlhcyBtZXRob2RzIG5hbWVzIGJlY2F1c2UgcGVvcGxlIHJvbGwgbGlrZSB0aGF0LlxuLy9cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUub2ZmID0gRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5yZW1vdmVMaXN0ZW5lcjtcbkV2ZW50RW1pdHRlci5wcm90b3R5cGUuYWRkTGlzdGVuZXIgPSBFdmVudEVtaXR0ZXIucHJvdG90eXBlLm9uO1xuXG4vL1xuLy8gVGhpcyBmdW5jdGlvbiBkb2Vzbid0IGFwcGx5IGFueW1vcmUuXG4vL1xuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5zZXRNYXhMaXN0ZW5lcnMgPSBmdW5jdGlvbiBzZXRNYXhMaXN0ZW5lcnMoKSB7XG4gIHJldHVybiB0aGlzO1xufTtcblxuLy9cbi8vIEV4cG9zZSB0aGUgcHJlZml4LlxuLy9cbkV2ZW50RW1pdHRlci5wcmVmaXhlZCA9IHByZWZpeDtcblxuLy9cbi8vIEV4cG9zZSB0aGUgbW9kdWxlLlxuLy9cbmlmICgndW5kZWZpbmVkJyAhPT0gdHlwZW9mIG1vZHVsZSkge1xuICBtb2R1bGUuZXhwb3J0cyA9IEV2ZW50RW1pdHRlcjtcbn1cbiIsIi8qIGVzbGludC1kaXNhYmxlIG5vLXVudXNlZC12YXJzICovXG4ndXNlIHN0cmljdCc7XG52YXIgaGFzT3duUHJvcGVydHkgPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O1xudmFyIHByb3BJc0VudW1lcmFibGUgPSBPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlO1xuXG5mdW5jdGlvbiB0b09iamVjdCh2YWwpIHtcblx0aWYgKHZhbCA9PT0gbnVsbCB8fCB2YWwgPT09IHVuZGVmaW5lZCkge1xuXHRcdHRocm93IG5ldyBUeXBlRXJyb3IoJ09iamVjdC5hc3NpZ24gY2Fubm90IGJlIGNhbGxlZCB3aXRoIG51bGwgb3IgdW5kZWZpbmVkJyk7XG5cdH1cblxuXHRyZXR1cm4gT2JqZWN0KHZhbCk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0LCBzb3VyY2UpIHtcblx0dmFyIGZyb207XG5cdHZhciB0byA9IHRvT2JqZWN0KHRhcmdldCk7XG5cdHZhciBzeW1ib2xzO1xuXG5cdGZvciAodmFyIHMgPSAxOyBzIDwgYXJndW1lbnRzLmxlbmd0aDsgcysrKSB7XG5cdFx0ZnJvbSA9IE9iamVjdChhcmd1bWVudHNbc10pO1xuXG5cdFx0Zm9yICh2YXIga2V5IGluIGZyb20pIHtcblx0XHRcdGlmIChoYXNPd25Qcm9wZXJ0eS5jYWxsKGZyb20sIGtleSkpIHtcblx0XHRcdFx0dG9ba2V5XSA9IGZyb21ba2V5XTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykge1xuXHRcdFx0c3ltYm9scyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZnJvbSk7XG5cdFx0XHRmb3IgKHZhciBpID0gMDsgaSA8IHN5bWJvbHMubGVuZ3RoOyBpKyspIHtcblx0XHRcdFx0aWYgKHByb3BJc0VudW1lcmFibGUuY2FsbChmcm9tLCBzeW1ib2xzW2ldKSkge1xuXHRcdFx0XHRcdHRvW3N5bWJvbHNbaV1dID0gZnJvbVtzeW1ib2xzW2ldXTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdHJldHVybiB0bztcbn07XG4iLCIvKiFcbiAqIGFzeW5jXG4gKiBodHRwczovL2dpdGh1Yi5jb20vY2FvbGFuL2FzeW5jXG4gKlxuICogQ29weXJpZ2h0IDIwMTAtMjAxNCBDYW9sYW4gTWNNYWhvblxuICogUmVsZWFzZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlXG4gKi9cbi8qanNoaW50IG9uZXZhcjogZmFsc2UsIGluZGVudDo0ICovXG4vKmdsb2JhbCBzZXRJbW1lZGlhdGU6IGZhbHNlLCBzZXRUaW1lb3V0OiBmYWxzZSwgY29uc29sZTogZmFsc2UgKi9cbihmdW5jdGlvbiAoKSB7XG5cbiAgICB2YXIgYXN5bmMgPSB7fTtcblxuICAgIC8vIGdsb2JhbCBvbiB0aGUgc2VydmVyLCB3aW5kb3cgaW4gdGhlIGJyb3dzZXJcbiAgICB2YXIgcm9vdCwgcHJldmlvdXNfYXN5bmM7XG5cbiAgICByb290ID0gdGhpcztcbiAgICBpZiAocm9vdCAhPSBudWxsKSB7XG4gICAgICBwcmV2aW91c19hc3luYyA9IHJvb3QuYXN5bmM7XG4gICAgfVxuXG4gICAgYXN5bmMubm9Db25mbGljdCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcm9vdC5hc3luYyA9IHByZXZpb3VzX2FzeW5jO1xuICAgICAgICByZXR1cm4gYXN5bmM7XG4gICAgfTtcblxuICAgIGZ1bmN0aW9uIG9ubHlfb25jZShmbikge1xuICAgICAgICB2YXIgY2FsbGVkID0gZmFsc2U7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIGlmIChjYWxsZWQpIHRocm93IG5ldyBFcnJvcihcIkNhbGxiYWNrIHdhcyBhbHJlYWR5IGNhbGxlZC5cIik7XG4gICAgICAgICAgICBjYWxsZWQgPSB0cnVlO1xuICAgICAgICAgICAgZm4uYXBwbHkocm9vdCwgYXJndW1lbnRzKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vLy8gY3Jvc3MtYnJvd3NlciBjb21wYXRpYmxpdHkgZnVuY3Rpb25zIC8vLy9cblxuICAgIHZhciBfdG9TdHJpbmcgPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nO1xuXG4gICAgdmFyIF9pc0FycmF5ID0gQXJyYXkuaXNBcnJheSB8fCBmdW5jdGlvbiAob2JqKSB7XG4gICAgICAgIHJldHVybiBfdG9TdHJpbmcuY2FsbChvYmopID09PSAnW29iamVjdCBBcnJheV0nO1xuICAgIH07XG5cbiAgICB2YXIgX2VhY2ggPSBmdW5jdGlvbiAoYXJyLCBpdGVyYXRvcikge1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFyci5sZW5ndGg7IGkgKz0gMSkge1xuICAgICAgICAgICAgaXRlcmF0b3IoYXJyW2ldLCBpLCBhcnIpO1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIHZhciBfbWFwID0gZnVuY3Rpb24gKGFyciwgaXRlcmF0b3IpIHtcbiAgICAgICAgaWYgKGFyci5tYXApIHtcbiAgICAgICAgICAgIHJldHVybiBhcnIubWFwKGl0ZXJhdG9yKTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgcmVzdWx0cyA9IFtdO1xuICAgICAgICBfZWFjaChhcnIsIGZ1bmN0aW9uICh4LCBpLCBhKSB7XG4gICAgICAgICAgICByZXN1bHRzLnB1c2goaXRlcmF0b3IoeCwgaSwgYSkpO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdHM7XG4gICAgfTtcblxuICAgIHZhciBfcmVkdWNlID0gZnVuY3Rpb24gKGFyciwgaXRlcmF0b3IsIG1lbW8pIHtcbiAgICAgICAgaWYgKGFyci5yZWR1Y2UpIHtcbiAgICAgICAgICAgIHJldHVybiBhcnIucmVkdWNlKGl0ZXJhdG9yLCBtZW1vKTtcbiAgICAgICAgfVxuICAgICAgICBfZWFjaChhcnIsIGZ1bmN0aW9uICh4LCBpLCBhKSB7XG4gICAgICAgICAgICBtZW1vID0gaXRlcmF0b3IobWVtbywgeCwgaSwgYSk7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gbWVtbztcbiAgICB9O1xuXG4gICAgdmFyIF9rZXlzID0gZnVuY3Rpb24gKG9iaikge1xuICAgICAgICBpZiAoT2JqZWN0LmtleXMpIHtcbiAgICAgICAgICAgIHJldHVybiBPYmplY3Qua2V5cyhvYmopO1xuICAgICAgICB9XG4gICAgICAgIHZhciBrZXlzID0gW107XG4gICAgICAgIGZvciAodmFyIGsgaW4gb2JqKSB7XG4gICAgICAgICAgICBpZiAob2JqLmhhc093blByb3BlcnR5KGspKSB7XG4gICAgICAgICAgICAgICAga2V5cy5wdXNoKGspO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBrZXlzO1xuICAgIH07XG5cbiAgICAvLy8vIGV4cG9ydGVkIGFzeW5jIG1vZHVsZSBmdW5jdGlvbnMgLy8vL1xuXG4gICAgLy8vLyBuZXh0VGljayBpbXBsZW1lbnRhdGlvbiB3aXRoIGJyb3dzZXItY29tcGF0aWJsZSBmYWxsYmFjayAvLy8vXG4gICAgaWYgKHR5cGVvZiBwcm9jZXNzID09PSAndW5kZWZpbmVkJyB8fCAhKHByb2Nlc3MubmV4dFRpY2spKSB7XG4gICAgICAgIGlmICh0eXBlb2Ygc2V0SW1tZWRpYXRlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICBhc3luYy5uZXh0VGljayA9IGZ1bmN0aW9uIChmbikge1xuICAgICAgICAgICAgICAgIC8vIG5vdCBhIGRpcmVjdCBhbGlhcyBmb3IgSUUxMCBjb21wYXRpYmlsaXR5XG4gICAgICAgICAgICAgICAgc2V0SW1tZWRpYXRlKGZuKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBhc3luYy5zZXRJbW1lZGlhdGUgPSBhc3luYy5uZXh0VGljaztcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGFzeW5jLm5leHRUaWNrID0gZnVuY3Rpb24gKGZuKSB7XG4gICAgICAgICAgICAgICAgc2V0VGltZW91dChmbiwgMCk7XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgYXN5bmMuc2V0SW1tZWRpYXRlID0gYXN5bmMubmV4dFRpY2s7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIGFzeW5jLm5leHRUaWNrID0gcHJvY2Vzcy5uZXh0VGljaztcbiAgICAgICAgaWYgKHR5cGVvZiBzZXRJbW1lZGlhdGUgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICBhc3luYy5zZXRJbW1lZGlhdGUgPSBmdW5jdGlvbiAoZm4pIHtcbiAgICAgICAgICAgICAgLy8gbm90IGEgZGlyZWN0IGFsaWFzIGZvciBJRTEwIGNvbXBhdGliaWxpdHlcbiAgICAgICAgICAgICAgc2V0SW1tZWRpYXRlKGZuKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBhc3luYy5zZXRJbW1lZGlhdGUgPSBhc3luYy5uZXh0VGljaztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGFzeW5jLmVhY2ggPSBmdW5jdGlvbiAoYXJyLCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgY2FsbGJhY2sgPSBjYWxsYmFjayB8fCBmdW5jdGlvbiAoKSB7fTtcbiAgICAgICAgaWYgKCFhcnIubGVuZ3RoKSB7XG4gICAgICAgICAgICByZXR1cm4gY2FsbGJhY2soKTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgY29tcGxldGVkID0gMDtcbiAgICAgICAgX2VhY2goYXJyLCBmdW5jdGlvbiAoeCkge1xuICAgICAgICAgICAgaXRlcmF0b3IoeCwgb25seV9vbmNlKGRvbmUpICk7XG4gICAgICAgIH0pO1xuICAgICAgICBmdW5jdGlvbiBkb25lKGVycikge1xuICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgICAgY2FsbGJhY2sgPSBmdW5jdGlvbiAoKSB7fTtcbiAgICAgICAgICB9XG4gICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgIGNvbXBsZXRlZCArPSAxO1xuICAgICAgICAgICAgICBpZiAoY29tcGxldGVkID49IGFyci5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9O1xuICAgIGFzeW5jLmZvckVhY2ggPSBhc3luYy5lYWNoO1xuXG4gICAgYXN5bmMuZWFjaFNlcmllcyA9IGZ1bmN0aW9uIChhcnIsIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICBjYWxsYmFjayA9IGNhbGxiYWNrIHx8IGZ1bmN0aW9uICgpIHt9O1xuICAgICAgICBpZiAoIWFyci5sZW5ndGgpIHtcbiAgICAgICAgICAgIHJldHVybiBjYWxsYmFjaygpO1xuICAgICAgICB9XG4gICAgICAgIHZhciBjb21wbGV0ZWQgPSAwO1xuICAgICAgICB2YXIgaXRlcmF0ZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGl0ZXJhdG9yKGFycltjb21wbGV0ZWRdLCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayA9IGZ1bmN0aW9uICgpIHt9O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgY29tcGxldGVkICs9IDE7XG4gICAgICAgICAgICAgICAgICAgIGlmIChjb21wbGV0ZWQgPj0gYXJyLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGl0ZXJhdGUoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9O1xuICAgICAgICBpdGVyYXRlKCk7XG4gICAgfTtcbiAgICBhc3luYy5mb3JFYWNoU2VyaWVzID0gYXN5bmMuZWFjaFNlcmllcztcblxuICAgIGFzeW5jLmVhY2hMaW1pdCA9IGZ1bmN0aW9uIChhcnIsIGxpbWl0LCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgdmFyIGZuID0gX2VhY2hMaW1pdChsaW1pdCk7XG4gICAgICAgIGZuLmFwcGx5KG51bGwsIFthcnIsIGl0ZXJhdG9yLCBjYWxsYmFja10pO1xuICAgIH07XG4gICAgYXN5bmMuZm9yRWFjaExpbWl0ID0gYXN5bmMuZWFjaExpbWl0O1xuXG4gICAgdmFyIF9lYWNoTGltaXQgPSBmdW5jdGlvbiAobGltaXQpIHtcblxuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKGFyciwgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICBjYWxsYmFjayA9IGNhbGxiYWNrIHx8IGZ1bmN0aW9uICgpIHt9O1xuICAgICAgICAgICAgaWYgKCFhcnIubGVuZ3RoIHx8IGxpbWl0IDw9IDApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gY2FsbGJhY2soKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHZhciBjb21wbGV0ZWQgPSAwO1xuICAgICAgICAgICAgdmFyIHN0YXJ0ZWQgPSAwO1xuICAgICAgICAgICAgdmFyIHJ1bm5pbmcgPSAwO1xuXG4gICAgICAgICAgICAoZnVuY3Rpb24gcmVwbGVuaXNoICgpIHtcbiAgICAgICAgICAgICAgICBpZiAoY29tcGxldGVkID49IGFyci5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKCk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgd2hpbGUgKHJ1bm5pbmcgPCBsaW1pdCAmJiBzdGFydGVkIDwgYXJyLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICBzdGFydGVkICs9IDE7XG4gICAgICAgICAgICAgICAgICAgIHJ1bm5pbmcgKz0gMTtcbiAgICAgICAgICAgICAgICAgICAgaXRlcmF0b3IoYXJyW3N0YXJ0ZWQgLSAxXSwgZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2sgPSBmdW5jdGlvbiAoKSB7fTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBsZXRlZCArPSAxO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJ1bm5pbmcgLT0gMTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY29tcGxldGVkID49IGFyci5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcGxlbmlzaCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSkoKTtcbiAgICAgICAgfTtcbiAgICB9O1xuXG5cbiAgICB2YXIgZG9QYXJhbGxlbCA9IGZ1bmN0aW9uIChmbikge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIGFyZ3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMpO1xuICAgICAgICAgICAgcmV0dXJuIGZuLmFwcGx5KG51bGwsIFthc3luYy5lYWNoXS5jb25jYXQoYXJncykpO1xuICAgICAgICB9O1xuICAgIH07XG4gICAgdmFyIGRvUGFyYWxsZWxMaW1pdCA9IGZ1bmN0aW9uKGxpbWl0LCBmbikge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIGFyZ3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMpO1xuICAgICAgICAgICAgcmV0dXJuIGZuLmFwcGx5KG51bGwsIFtfZWFjaExpbWl0KGxpbWl0KV0uY29uY2F0KGFyZ3MpKTtcbiAgICAgICAgfTtcbiAgICB9O1xuICAgIHZhciBkb1NlcmllcyA9IGZ1bmN0aW9uIChmbikge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIGFyZ3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMpO1xuICAgICAgICAgICAgcmV0dXJuIGZuLmFwcGx5KG51bGwsIFthc3luYy5lYWNoU2VyaWVzXS5jb25jYXQoYXJncykpO1xuICAgICAgICB9O1xuICAgIH07XG5cblxuICAgIHZhciBfYXN5bmNNYXAgPSBmdW5jdGlvbiAoZWFjaGZuLCBhcnIsIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICBhcnIgPSBfbWFwKGFyciwgZnVuY3Rpb24gKHgsIGkpIHtcbiAgICAgICAgICAgIHJldHVybiB7aW5kZXg6IGksIHZhbHVlOiB4fTtcbiAgICAgICAgfSk7XG4gICAgICAgIGlmICghY2FsbGJhY2spIHtcbiAgICAgICAgICAgIGVhY2hmbihhcnIsIGZ1bmN0aW9uICh4LCBjYWxsYmFjaykge1xuICAgICAgICAgICAgICAgIGl0ZXJhdG9yKHgudmFsdWUsIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdmFyIHJlc3VsdHMgPSBbXTtcbiAgICAgICAgICAgIGVhY2hmbihhcnIsIGZ1bmN0aW9uICh4LCBjYWxsYmFjaykge1xuICAgICAgICAgICAgICAgIGl0ZXJhdG9yKHgudmFsdWUsIGZ1bmN0aW9uIChlcnIsIHYpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0c1t4LmluZGV4XSA9IHY7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9LCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2soZXJyLCByZXN1bHRzKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBhc3luYy5tYXAgPSBkb1BhcmFsbGVsKF9hc3luY01hcCk7XG4gICAgYXN5bmMubWFwU2VyaWVzID0gZG9TZXJpZXMoX2FzeW5jTWFwKTtcbiAgICBhc3luYy5tYXBMaW1pdCA9IGZ1bmN0aW9uIChhcnIsIGxpbWl0LCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgcmV0dXJuIF9tYXBMaW1pdChsaW1pdCkoYXJyLCBpdGVyYXRvciwgY2FsbGJhY2spO1xuICAgIH07XG5cbiAgICB2YXIgX21hcExpbWl0ID0gZnVuY3Rpb24obGltaXQpIHtcbiAgICAgICAgcmV0dXJuIGRvUGFyYWxsZWxMaW1pdChsaW1pdCwgX2FzeW5jTWFwKTtcbiAgICB9O1xuXG4gICAgLy8gcmVkdWNlIG9ubHkgaGFzIGEgc2VyaWVzIHZlcnNpb24sIGFzIGRvaW5nIHJlZHVjZSBpbiBwYXJhbGxlbCB3b24ndFxuICAgIC8vIHdvcmsgaW4gbWFueSBzaXR1YXRpb25zLlxuICAgIGFzeW5jLnJlZHVjZSA9IGZ1bmN0aW9uIChhcnIsIG1lbW8sIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICBhc3luYy5lYWNoU2VyaWVzKGFyciwgZnVuY3Rpb24gKHgsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICBpdGVyYXRvcihtZW1vLCB4LCBmdW5jdGlvbiAoZXJyLCB2KSB7XG4gICAgICAgICAgICAgICAgbWVtbyA9IHY7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICBjYWxsYmFjayhlcnIsIG1lbW8pO1xuICAgICAgICB9KTtcbiAgICB9O1xuICAgIC8vIGluamVjdCBhbGlhc1xuICAgIGFzeW5jLmluamVjdCA9IGFzeW5jLnJlZHVjZTtcbiAgICAvLyBmb2xkbCBhbGlhc1xuICAgIGFzeW5jLmZvbGRsID0gYXN5bmMucmVkdWNlO1xuXG4gICAgYXN5bmMucmVkdWNlUmlnaHQgPSBmdW5jdGlvbiAoYXJyLCBtZW1vLCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgdmFyIHJldmVyc2VkID0gX21hcChhcnIsIGZ1bmN0aW9uICh4KSB7XG4gICAgICAgICAgICByZXR1cm4geDtcbiAgICAgICAgfSkucmV2ZXJzZSgpO1xuICAgICAgICBhc3luYy5yZWR1Y2UocmV2ZXJzZWQsIG1lbW8sIGl0ZXJhdG9yLCBjYWxsYmFjayk7XG4gICAgfTtcbiAgICAvLyBmb2xkciBhbGlhc1xuICAgIGFzeW5jLmZvbGRyID0gYXN5bmMucmVkdWNlUmlnaHQ7XG5cbiAgICB2YXIgX2ZpbHRlciA9IGZ1bmN0aW9uIChlYWNoZm4sIGFyciwgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgIHZhciByZXN1bHRzID0gW107XG4gICAgICAgIGFyciA9IF9tYXAoYXJyLCBmdW5jdGlvbiAoeCwgaSkge1xuICAgICAgICAgICAgcmV0dXJuIHtpbmRleDogaSwgdmFsdWU6IHh9O1xuICAgICAgICB9KTtcbiAgICAgICAgZWFjaGZuKGFyciwgZnVuY3Rpb24gKHgsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICBpdGVyYXRvcih4LnZhbHVlLCBmdW5jdGlvbiAodikge1xuICAgICAgICAgICAgICAgIGlmICh2KSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdHMucHVzaCh4KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2FsbGJhY2soKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICBjYWxsYmFjayhfbWFwKHJlc3VsdHMuc29ydChmdW5jdGlvbiAoYSwgYikge1xuICAgICAgICAgICAgICAgIHJldHVybiBhLmluZGV4IC0gYi5pbmRleDtcbiAgICAgICAgICAgIH0pLCBmdW5jdGlvbiAoeCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB4LnZhbHVlO1xuICAgICAgICAgICAgfSkpO1xuICAgICAgICB9KTtcbiAgICB9O1xuICAgIGFzeW5jLmZpbHRlciA9IGRvUGFyYWxsZWwoX2ZpbHRlcik7XG4gICAgYXN5bmMuZmlsdGVyU2VyaWVzID0gZG9TZXJpZXMoX2ZpbHRlcik7XG4gICAgLy8gc2VsZWN0IGFsaWFzXG4gICAgYXN5bmMuc2VsZWN0ID0gYXN5bmMuZmlsdGVyO1xuICAgIGFzeW5jLnNlbGVjdFNlcmllcyA9IGFzeW5jLmZpbHRlclNlcmllcztcblxuICAgIHZhciBfcmVqZWN0ID0gZnVuY3Rpb24gKGVhY2hmbiwgYXJyLCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgdmFyIHJlc3VsdHMgPSBbXTtcbiAgICAgICAgYXJyID0gX21hcChhcnIsIGZ1bmN0aW9uICh4LCBpKSB7XG4gICAgICAgICAgICByZXR1cm4ge2luZGV4OiBpLCB2YWx1ZTogeH07XG4gICAgICAgIH0pO1xuICAgICAgICBlYWNoZm4oYXJyLCBmdW5jdGlvbiAoeCwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIGl0ZXJhdG9yKHgudmFsdWUsIGZ1bmN0aW9uICh2KSB7XG4gICAgICAgICAgICAgICAgaWYgKCF2KSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdHMucHVzaCh4KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2FsbGJhY2soKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICBjYWxsYmFjayhfbWFwKHJlc3VsdHMuc29ydChmdW5jdGlvbiAoYSwgYikge1xuICAgICAgICAgICAgICAgIHJldHVybiBhLmluZGV4IC0gYi5pbmRleDtcbiAgICAgICAgICAgIH0pLCBmdW5jdGlvbiAoeCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB4LnZhbHVlO1xuICAgICAgICAgICAgfSkpO1xuICAgICAgICB9KTtcbiAgICB9O1xuICAgIGFzeW5jLnJlamVjdCA9IGRvUGFyYWxsZWwoX3JlamVjdCk7XG4gICAgYXN5bmMucmVqZWN0U2VyaWVzID0gZG9TZXJpZXMoX3JlamVjdCk7XG5cbiAgICB2YXIgX2RldGVjdCA9IGZ1bmN0aW9uIChlYWNoZm4sIGFyciwgaXRlcmF0b3IsIG1haW5fY2FsbGJhY2spIHtcbiAgICAgICAgZWFjaGZuKGFyciwgZnVuY3Rpb24gKHgsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICBpdGVyYXRvcih4LCBmdW5jdGlvbiAocmVzdWx0KSB7XG4gICAgICAgICAgICAgICAgaWYgKHJlc3VsdCkge1xuICAgICAgICAgICAgICAgICAgICBtYWluX2NhbGxiYWNrKHgpO1xuICAgICAgICAgICAgICAgICAgICBtYWluX2NhbGxiYWNrID0gZnVuY3Rpb24gKCkge307XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICBtYWluX2NhbGxiYWNrKCk7XG4gICAgICAgIH0pO1xuICAgIH07XG4gICAgYXN5bmMuZGV0ZWN0ID0gZG9QYXJhbGxlbChfZGV0ZWN0KTtcbiAgICBhc3luYy5kZXRlY3RTZXJpZXMgPSBkb1NlcmllcyhfZGV0ZWN0KTtcblxuICAgIGFzeW5jLnNvbWUgPSBmdW5jdGlvbiAoYXJyLCBpdGVyYXRvciwgbWFpbl9jYWxsYmFjaykge1xuICAgICAgICBhc3luYy5lYWNoKGFyciwgZnVuY3Rpb24gKHgsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICBpdGVyYXRvcih4LCBmdW5jdGlvbiAodikge1xuICAgICAgICAgICAgICAgIGlmICh2KSB7XG4gICAgICAgICAgICAgICAgICAgIG1haW5fY2FsbGJhY2sodHJ1ZSk7XG4gICAgICAgICAgICAgICAgICAgIG1haW5fY2FsbGJhY2sgPSBmdW5jdGlvbiAoKSB7fTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2FsbGJhY2soKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICBtYWluX2NhbGxiYWNrKGZhbHNlKTtcbiAgICAgICAgfSk7XG4gICAgfTtcbiAgICAvLyBhbnkgYWxpYXNcbiAgICBhc3luYy5hbnkgPSBhc3luYy5zb21lO1xuXG4gICAgYXN5bmMuZXZlcnkgPSBmdW5jdGlvbiAoYXJyLCBpdGVyYXRvciwgbWFpbl9jYWxsYmFjaykge1xuICAgICAgICBhc3luYy5lYWNoKGFyciwgZnVuY3Rpb24gKHgsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICBpdGVyYXRvcih4LCBmdW5jdGlvbiAodikge1xuICAgICAgICAgICAgICAgIGlmICghdikge1xuICAgICAgICAgICAgICAgICAgICBtYWluX2NhbGxiYWNrKGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgICAgbWFpbl9jYWxsYmFjayA9IGZ1bmN0aW9uICgpIHt9O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgIG1haW5fY2FsbGJhY2sodHJ1ZSk7XG4gICAgICAgIH0pO1xuICAgIH07XG4gICAgLy8gYWxsIGFsaWFzXG4gICAgYXN5bmMuYWxsID0gYXN5bmMuZXZlcnk7XG5cbiAgICBhc3luYy5zb3J0QnkgPSBmdW5jdGlvbiAoYXJyLCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgYXN5bmMubWFwKGFyciwgZnVuY3Rpb24gKHgsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICBpdGVyYXRvcih4LCBmdW5jdGlvbiAoZXJyLCBjcml0ZXJpYSkge1xuICAgICAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKG51bGwsIHt2YWx1ZTogeCwgY3JpdGVyaWE6IGNyaXRlcmlhfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sIGZ1bmN0aW9uIChlcnIsIHJlc3VsdHMpIHtcbiAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHZhciBmbiA9IGZ1bmN0aW9uIChsZWZ0LCByaWdodCkge1xuICAgICAgICAgICAgICAgICAgICB2YXIgYSA9IGxlZnQuY3JpdGVyaWEsIGIgPSByaWdodC5jcml0ZXJpYTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGEgPCBiID8gLTEgOiBhID4gYiA/IDEgOiAwO1xuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgY2FsbGJhY2sobnVsbCwgX21hcChyZXN1bHRzLnNvcnQoZm4pLCBmdW5jdGlvbiAoeCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4geC52YWx1ZTtcbiAgICAgICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH07XG5cbiAgICBhc3luYy5hdXRvID0gZnVuY3Rpb24gKHRhc2tzLCBjYWxsYmFjaykge1xuICAgICAgICBjYWxsYmFjayA9IGNhbGxiYWNrIHx8IGZ1bmN0aW9uICgpIHt9O1xuICAgICAgICB2YXIga2V5cyA9IF9rZXlzKHRhc2tzKTtcbiAgICAgICAgdmFyIHJlbWFpbmluZ1Rhc2tzID0ga2V5cy5sZW5ndGhcbiAgICAgICAgaWYgKCFyZW1haW5pbmdUYXNrcykge1xuICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKCk7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgcmVzdWx0cyA9IHt9O1xuXG4gICAgICAgIHZhciBsaXN0ZW5lcnMgPSBbXTtcbiAgICAgICAgdmFyIGFkZExpc3RlbmVyID0gZnVuY3Rpb24gKGZuKSB7XG4gICAgICAgICAgICBsaXN0ZW5lcnMudW5zaGlmdChmbik7XG4gICAgICAgIH07XG4gICAgICAgIHZhciByZW1vdmVMaXN0ZW5lciA9IGZ1bmN0aW9uIChmbikge1xuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsaXN0ZW5lcnMubGVuZ3RoOyBpICs9IDEpIHtcbiAgICAgICAgICAgICAgICBpZiAobGlzdGVuZXJzW2ldID09PSBmbikge1xuICAgICAgICAgICAgICAgICAgICBsaXN0ZW5lcnMuc3BsaWNlKGksIDEpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICB2YXIgdGFza0NvbXBsZXRlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmVtYWluaW5nVGFza3MtLVxuICAgICAgICAgICAgX2VhY2gobGlzdGVuZXJzLnNsaWNlKDApLCBmdW5jdGlvbiAoZm4pIHtcbiAgICAgICAgICAgICAgICBmbigpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH07XG5cbiAgICAgICAgYWRkTGlzdGVuZXIoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgaWYgKCFyZW1haW5pbmdUYXNrcykge1xuICAgICAgICAgICAgICAgIHZhciB0aGVDYWxsYmFjayA9IGNhbGxiYWNrO1xuICAgICAgICAgICAgICAgIC8vIHByZXZlbnQgZmluYWwgY2FsbGJhY2sgZnJvbSBjYWxsaW5nIGl0c2VsZiBpZiBpdCBlcnJvcnNcbiAgICAgICAgICAgICAgICBjYWxsYmFjayA9IGZ1bmN0aW9uICgpIHt9O1xuXG4gICAgICAgICAgICAgICAgdGhlQ2FsbGJhY2sobnVsbCwgcmVzdWx0cyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIF9lYWNoKGtleXMsIGZ1bmN0aW9uIChrKSB7XG4gICAgICAgICAgICB2YXIgdGFzayA9IF9pc0FycmF5KHRhc2tzW2tdKSA/IHRhc2tzW2tdOiBbdGFza3Nba11dO1xuICAgICAgICAgICAgdmFyIHRhc2tDYWxsYmFjayA9IGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgICAgICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMSk7XG4gICAgICAgICAgICAgICAgaWYgKGFyZ3MubGVuZ3RoIDw9IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgYXJncyA9IGFyZ3NbMF07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHNhZmVSZXN1bHRzID0ge307XG4gICAgICAgICAgICAgICAgICAgIF9lYWNoKF9rZXlzKHJlc3VsdHMpLCBmdW5jdGlvbihya2V5KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzYWZlUmVzdWx0c1tya2V5XSA9IHJlc3VsdHNbcmtleV07XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICBzYWZlUmVzdWx0c1trXSA9IGFyZ3M7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKGVyciwgc2FmZVJlc3VsdHMpO1xuICAgICAgICAgICAgICAgICAgICAvLyBzdG9wIHN1YnNlcXVlbnQgZXJyb3JzIGhpdHRpbmcgY2FsbGJhY2sgbXVsdGlwbGUgdGltZXNcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2sgPSBmdW5jdGlvbiAoKSB7fTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdHNba10gPSBhcmdzO1xuICAgICAgICAgICAgICAgICAgICBhc3luYy5zZXRJbW1lZGlhdGUodGFza0NvbXBsZXRlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgdmFyIHJlcXVpcmVzID0gdGFzay5zbGljZSgwLCBNYXRoLmFicyh0YXNrLmxlbmd0aCAtIDEpKSB8fCBbXTtcbiAgICAgICAgICAgIHZhciByZWFkeSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gX3JlZHVjZShyZXF1aXJlcywgZnVuY3Rpb24gKGEsIHgpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChhICYmIHJlc3VsdHMuaGFzT3duUHJvcGVydHkoeCkpO1xuICAgICAgICAgICAgICAgIH0sIHRydWUpICYmICFyZXN1bHRzLmhhc093blByb3BlcnR5KGspO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGlmIChyZWFkeSgpKSB7XG4gICAgICAgICAgICAgICAgdGFza1t0YXNrLmxlbmd0aCAtIDFdKHRhc2tDYWxsYmFjaywgcmVzdWx0cyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICB2YXIgbGlzdGVuZXIgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChyZWFkeSgpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZW1vdmVMaXN0ZW5lcihsaXN0ZW5lcik7XG4gICAgICAgICAgICAgICAgICAgICAgICB0YXNrW3Rhc2subGVuZ3RoIC0gMV0odGFza0NhbGxiYWNrLCByZXN1bHRzKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgYWRkTGlzdGVuZXIobGlzdGVuZXIpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9O1xuXG4gICAgYXN5bmMucmV0cnkgPSBmdW5jdGlvbih0aW1lcywgdGFzaywgY2FsbGJhY2spIHtcbiAgICAgICAgdmFyIERFRkFVTFRfVElNRVMgPSA1O1xuICAgICAgICB2YXIgYXR0ZW1wdHMgPSBbXTtcbiAgICAgICAgLy8gVXNlIGRlZmF1bHRzIGlmIHRpbWVzIG5vdCBwYXNzZWRcbiAgICAgICAgaWYgKHR5cGVvZiB0aW1lcyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgY2FsbGJhY2sgPSB0YXNrO1xuICAgICAgICAgICAgdGFzayA9IHRpbWVzO1xuICAgICAgICAgICAgdGltZXMgPSBERUZBVUxUX1RJTUVTO1xuICAgICAgICB9XG4gICAgICAgIC8vIE1ha2Ugc3VyZSB0aW1lcyBpcyBhIG51bWJlclxuICAgICAgICB0aW1lcyA9IHBhcnNlSW50KHRpbWVzLCAxMCkgfHwgREVGQVVMVF9USU1FUztcbiAgICAgICAgdmFyIHdyYXBwZWRUYXNrID0gZnVuY3Rpb24od3JhcHBlZENhbGxiYWNrLCB3cmFwcGVkUmVzdWx0cykge1xuICAgICAgICAgICAgdmFyIHJldHJ5QXR0ZW1wdCA9IGZ1bmN0aW9uKHRhc2ssIGZpbmFsQXR0ZW1wdCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbihzZXJpZXNDYWxsYmFjaykge1xuICAgICAgICAgICAgICAgICAgICB0YXNrKGZ1bmN0aW9uKGVyciwgcmVzdWx0KXtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlcmllc0NhbGxiYWNrKCFlcnIgfHwgZmluYWxBdHRlbXB0LCB7ZXJyOiBlcnIsIHJlc3VsdDogcmVzdWx0fSk7XG4gICAgICAgICAgICAgICAgICAgIH0sIHdyYXBwZWRSZXN1bHRzKTtcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIHdoaWxlICh0aW1lcykge1xuICAgICAgICAgICAgICAgIGF0dGVtcHRzLnB1c2gocmV0cnlBdHRlbXB0KHRhc2ssICEodGltZXMtPTEpKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBhc3luYy5zZXJpZXMoYXR0ZW1wdHMsIGZ1bmN0aW9uKGRvbmUsIGRhdGEpe1xuICAgICAgICAgICAgICAgIGRhdGEgPSBkYXRhW2RhdGEubGVuZ3RoIC0gMV07XG4gICAgICAgICAgICAgICAgKHdyYXBwZWRDYWxsYmFjayB8fCBjYWxsYmFjaykoZGF0YS5lcnIsIGRhdGEucmVzdWx0KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIC8vIElmIGEgY2FsbGJhY2sgaXMgcGFzc2VkLCBydW4gdGhpcyBhcyBhIGNvbnRyb2xsIGZsb3dcbiAgICAgICAgcmV0dXJuIGNhbGxiYWNrID8gd3JhcHBlZFRhc2soKSA6IHdyYXBwZWRUYXNrXG4gICAgfTtcblxuICAgIGFzeW5jLndhdGVyZmFsbCA9IGZ1bmN0aW9uICh0YXNrcywgY2FsbGJhY2spIHtcbiAgICAgICAgY2FsbGJhY2sgPSBjYWxsYmFjayB8fCBmdW5jdGlvbiAoKSB7fTtcbiAgICAgICAgaWYgKCFfaXNBcnJheSh0YXNrcykpIHtcbiAgICAgICAgICB2YXIgZXJyID0gbmV3IEVycm9yKCdGaXJzdCBhcmd1bWVudCB0byB3YXRlcmZhbGwgbXVzdCBiZSBhbiBhcnJheSBvZiBmdW5jdGlvbnMnKTtcbiAgICAgICAgICByZXR1cm4gY2FsbGJhY2soZXJyKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIXRhc2tzLmxlbmd0aCkge1xuICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKCk7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIHdyYXBJdGVyYXRvciA9IGZ1bmN0aW9uIChpdGVyYXRvcikge1xuICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrID0gZnVuY3Rpb24gKCkge307XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMSk7XG4gICAgICAgICAgICAgICAgICAgIHZhciBuZXh0ID0gaXRlcmF0b3IubmV4dCgpO1xuICAgICAgICAgICAgICAgICAgICBpZiAobmV4dCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgYXJncy5wdXNoKHdyYXBJdGVyYXRvcihuZXh0KSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhcmdzLnB1c2goY2FsbGJhY2spO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGFzeW5jLnNldEltbWVkaWF0ZShmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpdGVyYXRvci5hcHBseShudWxsLCBhcmdzKTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfTtcbiAgICAgICAgfTtcbiAgICAgICAgd3JhcEl0ZXJhdG9yKGFzeW5jLml0ZXJhdG9yKHRhc2tzKSkoKTtcbiAgICB9O1xuXG4gICAgdmFyIF9wYXJhbGxlbCA9IGZ1bmN0aW9uKGVhY2hmbiwgdGFza3MsIGNhbGxiYWNrKSB7XG4gICAgICAgIGNhbGxiYWNrID0gY2FsbGJhY2sgfHwgZnVuY3Rpb24gKCkge307XG4gICAgICAgIGlmIChfaXNBcnJheSh0YXNrcykpIHtcbiAgICAgICAgICAgIGVhY2hmbi5tYXAodGFza3MsIGZ1bmN0aW9uIChmbiwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgICAgICBpZiAoZm4pIHtcbiAgICAgICAgICAgICAgICAgICAgZm4oZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGFyZ3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsIDEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFyZ3MubGVuZ3RoIDw9IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmdzID0gYXJnc1swXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrLmNhbGwobnVsbCwgZXJyLCBhcmdzKTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSwgY2FsbGJhY2spO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdmFyIHJlc3VsdHMgPSB7fTtcbiAgICAgICAgICAgIGVhY2hmbi5lYWNoKF9rZXlzKHRhc2tzKSwgZnVuY3Rpb24gKGssIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICAgICAgdGFza3Nba10oZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgICAgICAgICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMSk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChhcmdzLmxlbmd0aCA8PSAxKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhcmdzID0gYXJnc1swXTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICByZXN1bHRzW2tdID0gYXJncztcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0sIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnIsIHJlc3VsdHMpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgYXN5bmMucGFyYWxsZWwgPSBmdW5jdGlvbiAodGFza3MsIGNhbGxiYWNrKSB7XG4gICAgICAgIF9wYXJhbGxlbCh7IG1hcDogYXN5bmMubWFwLCBlYWNoOiBhc3luYy5lYWNoIH0sIHRhc2tzLCBjYWxsYmFjayk7XG4gICAgfTtcblxuICAgIGFzeW5jLnBhcmFsbGVsTGltaXQgPSBmdW5jdGlvbih0YXNrcywgbGltaXQsIGNhbGxiYWNrKSB7XG4gICAgICAgIF9wYXJhbGxlbCh7IG1hcDogX21hcExpbWl0KGxpbWl0KSwgZWFjaDogX2VhY2hMaW1pdChsaW1pdCkgfSwgdGFza3MsIGNhbGxiYWNrKTtcbiAgICB9O1xuXG4gICAgYXN5bmMuc2VyaWVzID0gZnVuY3Rpb24gKHRhc2tzLCBjYWxsYmFjaykge1xuICAgICAgICBjYWxsYmFjayA9IGNhbGxiYWNrIHx8IGZ1bmN0aW9uICgpIHt9O1xuICAgICAgICBpZiAoX2lzQXJyYXkodGFza3MpKSB7XG4gICAgICAgICAgICBhc3luYy5tYXBTZXJpZXModGFza3MsIGZ1bmN0aW9uIChmbiwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgICAgICBpZiAoZm4pIHtcbiAgICAgICAgICAgICAgICAgICAgZm4oZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGFyZ3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsIDEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFyZ3MubGVuZ3RoIDw9IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmdzID0gYXJnc1swXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrLmNhbGwobnVsbCwgZXJyLCBhcmdzKTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSwgY2FsbGJhY2spO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdmFyIHJlc3VsdHMgPSB7fTtcbiAgICAgICAgICAgIGFzeW5jLmVhY2hTZXJpZXMoX2tleXModGFza3MpLCBmdW5jdGlvbiAoaywgY2FsbGJhY2spIHtcbiAgICAgICAgICAgICAgICB0YXNrc1trXShmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBhcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGFyZ3MubGVuZ3RoIDw9IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3MgPSBhcmdzWzBdO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdHNba10gPSBhcmdzO1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSwgZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrKGVyciwgcmVzdWx0cyk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH07XG5cbiAgICBhc3luYy5pdGVyYXRvciA9IGZ1bmN0aW9uICh0YXNrcykge1xuICAgICAgICB2YXIgbWFrZUNhbGxiYWNrID0gZnVuY3Rpb24gKGluZGV4KSB7XG4gICAgICAgICAgICB2YXIgZm4gPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgaWYgKHRhc2tzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICB0YXNrc1tpbmRleF0uYXBwbHkobnVsbCwgYXJndW1lbnRzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZuLm5leHQoKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBmbi5uZXh0ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiAoaW5kZXggPCB0YXNrcy5sZW5ndGggLSAxKSA/IG1ha2VDYWxsYmFjayhpbmRleCArIDEpOiBudWxsO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIHJldHVybiBmbjtcbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIG1ha2VDYWxsYmFjaygwKTtcbiAgICB9O1xuXG4gICAgYXN5bmMuYXBwbHkgPSBmdW5jdGlvbiAoZm4pIHtcbiAgICAgICAgdmFyIGFyZ3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsIDEpO1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIGZuLmFwcGx5KFxuICAgICAgICAgICAgICAgIG51bGwsIGFyZ3MuY29uY2F0KEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cykpXG4gICAgICAgICAgICApO1xuICAgICAgICB9O1xuICAgIH07XG5cbiAgICB2YXIgX2NvbmNhdCA9IGZ1bmN0aW9uIChlYWNoZm4sIGFyciwgZm4sIGNhbGxiYWNrKSB7XG4gICAgICAgIHZhciByID0gW107XG4gICAgICAgIGVhY2hmbihhcnIsIGZ1bmN0aW9uICh4LCBjYikge1xuICAgICAgICAgICAgZm4oeCwgZnVuY3Rpb24gKGVyciwgeSkge1xuICAgICAgICAgICAgICAgIHIgPSByLmNvbmNhdCh5IHx8IFtdKTtcbiAgICAgICAgICAgICAgICBjYihlcnIpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgIGNhbGxiYWNrKGVyciwgcik7XG4gICAgICAgIH0pO1xuICAgIH07XG4gICAgYXN5bmMuY29uY2F0ID0gZG9QYXJhbGxlbChfY29uY2F0KTtcbiAgICBhc3luYy5jb25jYXRTZXJpZXMgPSBkb1NlcmllcyhfY29uY2F0KTtcblxuICAgIGFzeW5jLndoaWxzdCA9IGZ1bmN0aW9uICh0ZXN0LCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgaWYgKHRlc3QoKSkge1xuICAgICAgICAgICAgaXRlcmF0b3IoZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGFzeW5jLndoaWxzdCh0ZXN0LCBpdGVyYXRvciwgY2FsbGJhY2spO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIGFzeW5jLmRvV2hpbHN0ID0gZnVuY3Rpb24gKGl0ZXJhdG9yLCB0ZXN0LCBjYWxsYmFjaykge1xuICAgICAgICBpdGVyYXRvcihmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMSk7XG4gICAgICAgICAgICBpZiAodGVzdC5hcHBseShudWxsLCBhcmdzKSkge1xuICAgICAgICAgICAgICAgIGFzeW5jLmRvV2hpbHN0KGl0ZXJhdG9yLCB0ZXN0LCBjYWxsYmFjayk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9O1xuXG4gICAgYXN5bmMudW50aWwgPSBmdW5jdGlvbiAodGVzdCwgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgIGlmICghdGVzdCgpKSB7XG4gICAgICAgICAgICBpdGVyYXRvcihmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYXN5bmMudW50aWwodGVzdCwgaXRlcmF0b3IsIGNhbGxiYWNrKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgY2FsbGJhY2soKTtcbiAgICAgICAgfVxuICAgIH07XG5cbiAgICBhc3luYy5kb1VudGlsID0gZnVuY3Rpb24gKGl0ZXJhdG9yLCB0ZXN0LCBjYWxsYmFjaykge1xuICAgICAgICBpdGVyYXRvcihmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMSk7XG4gICAgICAgICAgICBpZiAoIXRlc3QuYXBwbHkobnVsbCwgYXJncykpIHtcbiAgICAgICAgICAgICAgICBhc3luYy5kb1VudGlsKGl0ZXJhdG9yLCB0ZXN0LCBjYWxsYmFjayk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9O1xuXG4gICAgYXN5bmMucXVldWUgPSBmdW5jdGlvbiAod29ya2VyLCBjb25jdXJyZW5jeSkge1xuICAgICAgICBpZiAoY29uY3VycmVuY3kgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgY29uY3VycmVuY3kgPSAxO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIF9pbnNlcnQocSwgZGF0YSwgcG9zLCBjYWxsYmFjaykge1xuICAgICAgICAgIGlmICghcS5zdGFydGVkKXtcbiAgICAgICAgICAgIHEuc3RhcnRlZCA9IHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICghX2lzQXJyYXkoZGF0YSkpIHtcbiAgICAgICAgICAgICAgZGF0YSA9IFtkYXRhXTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYoZGF0YS5sZW5ndGggPT0gMCkge1xuICAgICAgICAgICAgIC8vIGNhbGwgZHJhaW4gaW1tZWRpYXRlbHkgaWYgdGhlcmUgYXJlIG5vIHRhc2tzXG4gICAgICAgICAgICAgcmV0dXJuIGFzeW5jLnNldEltbWVkaWF0ZShmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgaWYgKHEuZHJhaW4pIHtcbiAgICAgICAgICAgICAgICAgICAgIHEuZHJhaW4oKTtcbiAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgICBfZWFjaChkYXRhLCBmdW5jdGlvbih0YXNrKSB7XG4gICAgICAgICAgICAgIHZhciBpdGVtID0ge1xuICAgICAgICAgICAgICAgICAgZGF0YTogdGFzayxcbiAgICAgICAgICAgICAgICAgIGNhbGxiYWNrOiB0eXBlb2YgY2FsbGJhY2sgPT09ICdmdW5jdGlvbicgPyBjYWxsYmFjayA6IG51bGxcbiAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICBpZiAocG9zKSB7XG4gICAgICAgICAgICAgICAgcS50YXNrcy51bnNoaWZ0KGl0ZW0pO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHEudGFza3MucHVzaChpdGVtKTtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGlmIChxLnNhdHVyYXRlZCAmJiBxLnRhc2tzLmxlbmd0aCA9PT0gcS5jb25jdXJyZW5jeSkge1xuICAgICAgICAgICAgICAgICAgcS5zYXR1cmF0ZWQoKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBhc3luYy5zZXRJbW1lZGlhdGUocS5wcm9jZXNzKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciB3b3JrZXJzID0gMDtcbiAgICAgICAgdmFyIHEgPSB7XG4gICAgICAgICAgICB0YXNrczogW10sXG4gICAgICAgICAgICBjb25jdXJyZW5jeTogY29uY3VycmVuY3ksXG4gICAgICAgICAgICBzYXR1cmF0ZWQ6IG51bGwsXG4gICAgICAgICAgICBlbXB0eTogbnVsbCxcbiAgICAgICAgICAgIGRyYWluOiBudWxsLFxuICAgICAgICAgICAgc3RhcnRlZDogZmFsc2UsXG4gICAgICAgICAgICBwYXVzZWQ6IGZhbHNlLFxuICAgICAgICAgICAgcHVzaDogZnVuY3Rpb24gKGRhdGEsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICAgIF9pbnNlcnQocSwgZGF0YSwgZmFsc2UsIGNhbGxiYWNrKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBraWxsOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgIHEuZHJhaW4gPSBudWxsO1xuICAgICAgICAgICAgICBxLnRhc2tzID0gW107XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdW5zaGlmdDogZnVuY3Rpb24gKGRhdGEsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICAgIF9pbnNlcnQocSwgZGF0YSwgdHJ1ZSwgY2FsbGJhY2spO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHByb2Nlc3M6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBpZiAoIXEucGF1c2VkICYmIHdvcmtlcnMgPCBxLmNvbmN1cnJlbmN5ICYmIHEudGFza3MubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciB0YXNrID0gcS50YXNrcy5zaGlmdCgpO1xuICAgICAgICAgICAgICAgICAgICBpZiAocS5lbXB0eSAmJiBxLnRhc2tzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcS5lbXB0eSgpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHdvcmtlcnMgKz0gMTtcbiAgICAgICAgICAgICAgICAgICAgdmFyIG5leHQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB3b3JrZXJzIC09IDE7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodGFzay5jYWxsYmFjaykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhc2suY2FsbGJhY2suYXBwbHkodGFzaywgYXJndW1lbnRzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChxLmRyYWluICYmIHEudGFza3MubGVuZ3RoICsgd29ya2VycyA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHEuZHJhaW4oKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHEucHJvY2VzcygpO1xuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICB2YXIgY2IgPSBvbmx5X29uY2UobmV4dCk7XG4gICAgICAgICAgICAgICAgICAgIHdvcmtlcih0YXNrLmRhdGEsIGNiKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbGVuZ3RoOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHEudGFza3MubGVuZ3RoO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHJ1bm5pbmc6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gd29ya2VycztcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBpZGxlOiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcS50YXNrcy5sZW5ndGggKyB3b3JrZXJzID09PSAwO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHBhdXNlOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgaWYgKHEucGF1c2VkID09PSB0cnVlKSB7IHJldHVybjsgfVxuICAgICAgICAgICAgICAgIHEucGF1c2VkID0gdHJ1ZTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICByZXN1bWU6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBpZiAocS5wYXVzZWQgPT09IGZhbHNlKSB7IHJldHVybjsgfVxuICAgICAgICAgICAgICAgIHEucGF1c2VkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgLy8gTmVlZCB0byBjYWxsIHEucHJvY2VzcyBvbmNlIHBlciBjb25jdXJyZW50XG4gICAgICAgICAgICAgICAgLy8gd29ya2VyIHRvIHByZXNlcnZlIGZ1bGwgY29uY3VycmVuY3kgYWZ0ZXIgcGF1c2VcbiAgICAgICAgICAgICAgICBmb3IgKHZhciB3ID0gMTsgdyA8PSBxLmNvbmN1cnJlbmN5OyB3KyspIHtcbiAgICAgICAgICAgICAgICAgICAgYXN5bmMuc2V0SW1tZWRpYXRlKHEucHJvY2Vzcyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gcTtcbiAgICB9O1xuXG4gICAgYXN5bmMucHJpb3JpdHlRdWV1ZSA9IGZ1bmN0aW9uICh3b3JrZXIsIGNvbmN1cnJlbmN5KSB7XG5cbiAgICAgICAgZnVuY3Rpb24gX2NvbXBhcmVUYXNrcyhhLCBiKXtcbiAgICAgICAgICByZXR1cm4gYS5wcmlvcml0eSAtIGIucHJpb3JpdHk7XG4gICAgICAgIH07XG5cbiAgICAgICAgZnVuY3Rpb24gX2JpbmFyeVNlYXJjaChzZXF1ZW5jZSwgaXRlbSwgY29tcGFyZSkge1xuICAgICAgICAgIHZhciBiZWcgPSAtMSxcbiAgICAgICAgICAgICAgZW5kID0gc2VxdWVuY2UubGVuZ3RoIC0gMTtcbiAgICAgICAgICB3aGlsZSAoYmVnIDwgZW5kKSB7XG4gICAgICAgICAgICB2YXIgbWlkID0gYmVnICsgKChlbmQgLSBiZWcgKyAxKSA+Pj4gMSk7XG4gICAgICAgICAgICBpZiAoY29tcGFyZShpdGVtLCBzZXF1ZW5jZVttaWRdKSA+PSAwKSB7XG4gICAgICAgICAgICAgIGJlZyA9IG1pZDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGVuZCA9IG1pZCAtIDE7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBiZWc7XG4gICAgICAgIH1cblxuICAgICAgICBmdW5jdGlvbiBfaW5zZXJ0KHEsIGRhdGEsIHByaW9yaXR5LCBjYWxsYmFjaykge1xuICAgICAgICAgIGlmICghcS5zdGFydGVkKXtcbiAgICAgICAgICAgIHEuc3RhcnRlZCA9IHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICghX2lzQXJyYXkoZGF0YSkpIHtcbiAgICAgICAgICAgICAgZGF0YSA9IFtkYXRhXTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYoZGF0YS5sZW5ndGggPT0gMCkge1xuICAgICAgICAgICAgIC8vIGNhbGwgZHJhaW4gaW1tZWRpYXRlbHkgaWYgdGhlcmUgYXJlIG5vIHRhc2tzXG4gICAgICAgICAgICAgcmV0dXJuIGFzeW5jLnNldEltbWVkaWF0ZShmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgaWYgKHEuZHJhaW4pIHtcbiAgICAgICAgICAgICAgICAgICAgIHEuZHJhaW4oKTtcbiAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgICBfZWFjaChkYXRhLCBmdW5jdGlvbih0YXNrKSB7XG4gICAgICAgICAgICAgIHZhciBpdGVtID0ge1xuICAgICAgICAgICAgICAgICAgZGF0YTogdGFzayxcbiAgICAgICAgICAgICAgICAgIHByaW9yaXR5OiBwcmlvcml0eSxcbiAgICAgICAgICAgICAgICAgIGNhbGxiYWNrOiB0eXBlb2YgY2FsbGJhY2sgPT09ICdmdW5jdGlvbicgPyBjYWxsYmFjayA6IG51bGxcbiAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICBxLnRhc2tzLnNwbGljZShfYmluYXJ5U2VhcmNoKHEudGFza3MsIGl0ZW0sIF9jb21wYXJlVGFza3MpICsgMSwgMCwgaXRlbSk7XG5cbiAgICAgICAgICAgICAgaWYgKHEuc2F0dXJhdGVkICYmIHEudGFza3MubGVuZ3RoID09PSBxLmNvbmN1cnJlbmN5KSB7XG4gICAgICAgICAgICAgICAgICBxLnNhdHVyYXRlZCgpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGFzeW5jLnNldEltbWVkaWF0ZShxLnByb2Nlc3MpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gU3RhcnQgd2l0aCBhIG5vcm1hbCBxdWV1ZVxuICAgICAgICB2YXIgcSA9IGFzeW5jLnF1ZXVlKHdvcmtlciwgY29uY3VycmVuY3kpO1xuXG4gICAgICAgIC8vIE92ZXJyaWRlIHB1c2ggdG8gYWNjZXB0IHNlY29uZCBwYXJhbWV0ZXIgcmVwcmVzZW50aW5nIHByaW9yaXR5XG4gICAgICAgIHEucHVzaCA9IGZ1bmN0aW9uIChkYXRhLCBwcmlvcml0eSwgY2FsbGJhY2spIHtcbiAgICAgICAgICBfaW5zZXJ0KHEsIGRhdGEsIHByaW9yaXR5LCBjYWxsYmFjayk7XG4gICAgICAgIH07XG5cbiAgICAgICAgLy8gUmVtb3ZlIHVuc2hpZnQgZnVuY3Rpb25cbiAgICAgICAgZGVsZXRlIHEudW5zaGlmdDtcblxuICAgICAgICByZXR1cm4gcTtcbiAgICB9O1xuXG4gICAgYXN5bmMuY2FyZ28gPSBmdW5jdGlvbiAod29ya2VyLCBwYXlsb2FkKSB7XG4gICAgICAgIHZhciB3b3JraW5nICAgICA9IGZhbHNlLFxuICAgICAgICAgICAgdGFza3MgICAgICAgPSBbXTtcblxuICAgICAgICB2YXIgY2FyZ28gPSB7XG4gICAgICAgICAgICB0YXNrczogdGFza3MsXG4gICAgICAgICAgICBwYXlsb2FkOiBwYXlsb2FkLFxuICAgICAgICAgICAgc2F0dXJhdGVkOiBudWxsLFxuICAgICAgICAgICAgZW1wdHk6IG51bGwsXG4gICAgICAgICAgICBkcmFpbjogbnVsbCxcbiAgICAgICAgICAgIGRyYWluZWQ6IHRydWUsXG4gICAgICAgICAgICBwdXNoOiBmdW5jdGlvbiAoZGF0YSwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgICAgICBpZiAoIV9pc0FycmF5KGRhdGEpKSB7XG4gICAgICAgICAgICAgICAgICAgIGRhdGEgPSBbZGF0YV07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIF9lYWNoKGRhdGEsIGZ1bmN0aW9uKHRhc2spIHtcbiAgICAgICAgICAgICAgICAgICAgdGFza3MucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgICAgICBkYXRhOiB0YXNrLFxuICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2s6IHR5cGVvZiBjYWxsYmFjayA9PT0gJ2Z1bmN0aW9uJyA/IGNhbGxiYWNrIDogbnVsbFxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgY2FyZ28uZHJhaW5lZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICBpZiAoY2FyZ28uc2F0dXJhdGVkICYmIHRhc2tzLmxlbmd0aCA9PT0gcGF5bG9hZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY2FyZ28uc2F0dXJhdGVkKCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBhc3luYy5zZXRJbW1lZGlhdGUoY2FyZ28ucHJvY2Vzcyk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcHJvY2VzczogZnVuY3Rpb24gcHJvY2VzcygpIHtcbiAgICAgICAgICAgICAgICBpZiAod29ya2luZykgcmV0dXJuO1xuICAgICAgICAgICAgICAgIGlmICh0YXNrcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgaWYoY2FyZ28uZHJhaW4gJiYgIWNhcmdvLmRyYWluZWQpIGNhcmdvLmRyYWluKCk7XG4gICAgICAgICAgICAgICAgICAgIGNhcmdvLmRyYWluZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgdmFyIHRzID0gdHlwZW9mIHBheWxvYWQgPT09ICdudW1iZXInXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPyB0YXNrcy5zcGxpY2UoMCwgcGF5bG9hZClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IHRhc2tzLnNwbGljZSgwLCB0YXNrcy5sZW5ndGgpO1xuXG4gICAgICAgICAgICAgICAgdmFyIGRzID0gX21hcCh0cywgZnVuY3Rpb24gKHRhc2spIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRhc2suZGF0YTtcbiAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgIGlmKGNhcmdvLmVtcHR5KSBjYXJnby5lbXB0eSgpO1xuICAgICAgICAgICAgICAgIHdvcmtpbmcgPSB0cnVlO1xuICAgICAgICAgICAgICAgIHdvcmtlcihkcywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICB3b3JraW5nID0gZmFsc2U7XG5cbiAgICAgICAgICAgICAgICAgICAgdmFyIGFyZ3MgPSBhcmd1bWVudHM7XG4gICAgICAgICAgICAgICAgICAgIF9lYWNoKHRzLCBmdW5jdGlvbiAoZGF0YSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRhdGEuY2FsbGJhY2spIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLmNhbGxiYWNrLmFwcGx5KG51bGwsIGFyZ3MpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgICAgICBwcm9jZXNzKCk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbGVuZ3RoOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRhc2tzLmxlbmd0aDtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBydW5uaW5nOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHdvcmtpbmc7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiBjYXJnbztcbiAgICB9O1xuXG4gICAgdmFyIF9jb25zb2xlX2ZuID0gZnVuY3Rpb24gKG5hbWUpIHtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChmbikge1xuICAgICAgICAgICAgdmFyIGFyZ3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsIDEpO1xuICAgICAgICAgICAgZm4uYXBwbHkobnVsbCwgYXJncy5jb25jYXQoW2Z1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgICAgICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMSk7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBjb25zb2xlICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoY29uc29sZS5lcnJvcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChjb25zb2xlW25hbWVdKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBfZWFjaChhcmdzLCBmdW5jdGlvbiAoeCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGVbbmFtZV0oeCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1dKSk7XG4gICAgICAgIH07XG4gICAgfTtcbiAgICBhc3luYy5sb2cgPSBfY29uc29sZV9mbignbG9nJyk7XG4gICAgYXN5bmMuZGlyID0gX2NvbnNvbGVfZm4oJ2RpcicpO1xuICAgIC8qYXN5bmMuaW5mbyA9IF9jb25zb2xlX2ZuKCdpbmZvJyk7XG4gICAgYXN5bmMud2FybiA9IF9jb25zb2xlX2ZuKCd3YXJuJyk7XG4gICAgYXN5bmMuZXJyb3IgPSBfY29uc29sZV9mbignZXJyb3InKTsqL1xuXG4gICAgYXN5bmMubWVtb2l6ZSA9IGZ1bmN0aW9uIChmbiwgaGFzaGVyKSB7XG4gICAgICAgIHZhciBtZW1vID0ge307XG4gICAgICAgIHZhciBxdWV1ZXMgPSB7fTtcbiAgICAgICAgaGFzaGVyID0gaGFzaGVyIHx8IGZ1bmN0aW9uICh4KSB7XG4gICAgICAgICAgICByZXR1cm4geDtcbiAgICAgICAgfTtcbiAgICAgICAgdmFyIG1lbW9pemVkID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIGFyZ3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMpO1xuICAgICAgICAgICAgdmFyIGNhbGxiYWNrID0gYXJncy5wb3AoKTtcbiAgICAgICAgICAgIHZhciBrZXkgPSBoYXNoZXIuYXBwbHkobnVsbCwgYXJncyk7XG4gICAgICAgICAgICBpZiAoa2V5IGluIG1lbW8pIHtcbiAgICAgICAgICAgICAgICBhc3luYy5uZXh0VGljayhmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrLmFwcGx5KG51bGwsIG1lbW9ba2V5XSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChrZXkgaW4gcXVldWVzKSB7XG4gICAgICAgICAgICAgICAgcXVldWVzW2tleV0ucHVzaChjYWxsYmFjayk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBxdWV1ZXNba2V5XSA9IFtjYWxsYmFja107XG4gICAgICAgICAgICAgICAgZm4uYXBwbHkobnVsbCwgYXJncy5jb25jYXQoW2Z1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgbWVtb1trZXldID0gYXJndW1lbnRzO1xuICAgICAgICAgICAgICAgICAgICB2YXIgcSA9IHF1ZXVlc1trZXldO1xuICAgICAgICAgICAgICAgICAgICBkZWxldGUgcXVldWVzW2tleV07XG4gICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwLCBsID0gcS5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICBxW2ldLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICBtZW1vaXplZC5tZW1vID0gbWVtbztcbiAgICAgICAgbWVtb2l6ZWQudW5tZW1vaXplZCA9IGZuO1xuICAgICAgICByZXR1cm4gbWVtb2l6ZWQ7XG4gICAgfTtcblxuICAgIGFzeW5jLnVubWVtb2l6ZSA9IGZ1bmN0aW9uIChmbikge1xuICAgICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIChmbi51bm1lbW9pemVkIHx8IGZuKS5hcHBseShudWxsLCBhcmd1bWVudHMpO1xuICAgICAgfTtcbiAgICB9O1xuXG4gICAgYXN5bmMudGltZXMgPSBmdW5jdGlvbiAoY291bnQsIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICB2YXIgY291bnRlciA9IFtdO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNvdW50OyBpKyspIHtcbiAgICAgICAgICAgIGNvdW50ZXIucHVzaChpKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYXN5bmMubWFwKGNvdW50ZXIsIGl0ZXJhdG9yLCBjYWxsYmFjayk7XG4gICAgfTtcblxuICAgIGFzeW5jLnRpbWVzU2VyaWVzID0gZnVuY3Rpb24gKGNvdW50LCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgdmFyIGNvdW50ZXIgPSBbXTtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7XG4gICAgICAgICAgICBjb3VudGVyLnB1c2goaSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGFzeW5jLm1hcFNlcmllcyhjb3VudGVyLCBpdGVyYXRvciwgY2FsbGJhY2spO1xuICAgIH07XG5cbiAgICBhc3luYy5zZXEgPSBmdW5jdGlvbiAoLyogZnVuY3Rpb25zLi4uICovKSB7XG4gICAgICAgIHZhciBmbnMgPSBhcmd1bWVudHM7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgdGhhdCA9IHRoaXM7XG4gICAgICAgICAgICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7XG4gICAgICAgICAgICB2YXIgY2FsbGJhY2sgPSBhcmdzLnBvcCgpO1xuICAgICAgICAgICAgYXN5bmMucmVkdWNlKGZucywgYXJncywgZnVuY3Rpb24gKG5ld2FyZ3MsIGZuLCBjYikge1xuICAgICAgICAgICAgICAgIGZuLmFwcGx5KHRoYXQsIG5ld2FyZ3MuY29uY2F0KFtmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBlcnIgPSBhcmd1bWVudHNbMF07XG4gICAgICAgICAgICAgICAgICAgIHZhciBuZXh0YXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMSk7XG4gICAgICAgICAgICAgICAgICAgIGNiKGVyciwgbmV4dGFyZ3MpO1xuICAgICAgICAgICAgICAgIH1dKSlcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBmdW5jdGlvbiAoZXJyLCByZXN1bHRzKSB7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2suYXBwbHkodGhhdCwgW2Vycl0uY29uY2F0KHJlc3VsdHMpKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9O1xuICAgIH07XG5cbiAgICBhc3luYy5jb21wb3NlID0gZnVuY3Rpb24gKC8qIGZ1bmN0aW9ucy4uLiAqLykge1xuICAgICAgcmV0dXJuIGFzeW5jLnNlcS5hcHBseShudWxsLCBBcnJheS5wcm90b3R5cGUucmV2ZXJzZS5jYWxsKGFyZ3VtZW50cykpO1xuICAgIH07XG5cbiAgICB2YXIgX2FwcGx5RWFjaCA9IGZ1bmN0aW9uIChlYWNoZm4sIGZucyAvKmFyZ3MuLi4qLykge1xuICAgICAgICB2YXIgZ28gPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgdGhhdCA9IHRoaXM7XG4gICAgICAgICAgICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7XG4gICAgICAgICAgICB2YXIgY2FsbGJhY2sgPSBhcmdzLnBvcCgpO1xuICAgICAgICAgICAgcmV0dXJuIGVhY2hmbihmbnMsIGZ1bmN0aW9uIChmbiwgY2IpIHtcbiAgICAgICAgICAgICAgICBmbi5hcHBseSh0aGF0LCBhcmdzLmNvbmNhdChbY2JdKSk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY2FsbGJhY2spO1xuICAgICAgICB9O1xuICAgICAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA+IDIpIHtcbiAgICAgICAgICAgIHZhciBhcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAyKTtcbiAgICAgICAgICAgIHJldHVybiBnby5hcHBseSh0aGlzLCBhcmdzKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBnbztcbiAgICAgICAgfVxuICAgIH07XG4gICAgYXN5bmMuYXBwbHlFYWNoID0gZG9QYXJhbGxlbChfYXBwbHlFYWNoKTtcbiAgICBhc3luYy5hcHBseUVhY2hTZXJpZXMgPSBkb1NlcmllcyhfYXBwbHlFYWNoKTtcblxuICAgIGFzeW5jLmZvcmV2ZXIgPSBmdW5jdGlvbiAoZm4sIGNhbGxiYWNrKSB7XG4gICAgICAgIGZ1bmN0aW9uIG5leHQoZXJyKSB7XG4gICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgaWYgKGNhbGxiYWNrKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aHJvdyBlcnI7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmbihuZXh0KTtcbiAgICAgICAgfVxuICAgICAgICBuZXh0KCk7XG4gICAgfTtcblxuICAgIC8vIE5vZGUuanNcbiAgICBpZiAodHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCcgJiYgbW9kdWxlLmV4cG9ydHMpIHtcbiAgICAgICAgbW9kdWxlLmV4cG9ydHMgPSBhc3luYztcbiAgICB9XG4gICAgLy8gQU1EIC8gUmVxdWlyZUpTXG4gICAgZWxzZSBpZiAodHlwZW9mIGRlZmluZSAhPT0gJ3VuZGVmaW5lZCcgJiYgZGVmaW5lLmFtZCkge1xuICAgICAgICBkZWZpbmUoW10sIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiBhc3luYztcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8vIGluY2x1ZGVkIGRpcmVjdGx5IHZpYSA8c2NyaXB0PiB0YWdcbiAgICBlbHNlIHtcbiAgICAgICAgcm9vdC5hc3luYyA9IGFzeW5jO1xuICAgIH1cblxufSgpKTtcbiIsInZhciBhc3luYyAgICAgICA9IHJlcXVpcmUoJ2FzeW5jJyksXG4gICAgdXJsUGFyc2VyICAgPSByZXF1aXJlKCd1cmwnKSxcbiAgICBSZXNvdXJjZSAgICA9IHJlcXVpcmUoJy4vUmVzb3VyY2UnKSxcbiAgICBFdmVudEVtaXR0ZXIgPSByZXF1aXJlKCdldmVudGVtaXR0ZXIzJyk7XG5cbi8qKlxuICogTWFuYWdlcyB0aGUgc3RhdGUgYW5kIGxvYWRpbmcgb2YgbXVsdGlwbGUgcmVzb3VyY2VzIHRvIGxvYWQuXG4gKlxuICogQGNsYXNzXG4gKiBAcGFyYW0gW2Jhc2VVcmw9JyddIHtzdHJpbmd9IFRoZSBiYXNlIHVybCBmb3IgYWxsIHJlc291cmNlcyBsb2FkZWQgYnkgdGhpcyBsb2FkZXIuXG4gKiBAcGFyYW0gW2NvbmN1cnJlbmN5PTEwXSB7bnVtYmVyfSBUaGUgbnVtYmVyIG9mIHJlc291cmNlcyB0byBsb2FkIGNvbmN1cnJlbnRseS5cbiAqL1xuZnVuY3Rpb24gTG9hZGVyKGJhc2VVcmwsIGNvbmN1cnJlbmN5KSB7XG4gICAgRXZlbnRFbWl0dGVyLmNhbGwodGhpcyk7XG5cbiAgICBjb25jdXJyZW5jeSA9IGNvbmN1cnJlbmN5IHx8IDEwO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGJhc2UgdXJsIGZvciBhbGwgcmVzb3VyY2VzIGxvYWRlZCBieSB0aGlzIGxvYWRlci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge3N0cmluZ31cbiAgICAgKi9cbiAgICB0aGlzLmJhc2VVcmwgPSBiYXNlVXJsIHx8ICcnO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHByb2dyZXNzIHBlcmNlbnQgb2YgdGhlIGxvYWRlciBnb2luZyB0aHJvdWdoIHRoZSBxdWV1ZS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLnByb2dyZXNzID0gMDtcblxuICAgIC8qKlxuICAgICAqIExvYWRpbmcgc3RhdGUgb2YgdGhlIGxvYWRlciwgdHJ1ZSBpZiBpdCBpcyBjdXJyZW50bHkgbG9hZGluZyByZXNvdXJjZXMuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqL1xuICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHBlcmNlbnRhZ2Ugb2YgdG90YWwgcHJvZ3Jlc3MgdGhhdCBhIHNpbmdsZSByZXNvdXJjZSByZXByZXNlbnRzLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMuX3Byb2dyZXNzQ2h1bmsgPSAwO1xuXG4gICAgLyoqXG4gICAgICogVGhlIG1pZGRsZXdhcmUgdG8gcnVuIGJlZm9yZSBsb2FkaW5nIGVhY2ggcmVzb3VyY2UuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtmdW5jdGlvbltdfVxuICAgICAqL1xuICAgIHRoaXMuX2JlZm9yZU1pZGRsZXdhcmUgPSBbXTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBtaWRkbGV3YXJlIHRvIHJ1biBhZnRlciBsb2FkaW5nIGVhY2ggcmVzb3VyY2UuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtmdW5jdGlvbltdfVxuICAgICAqL1xuICAgIHRoaXMuX2FmdGVyTWlkZGxld2FyZSA9IFtdO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGBfbG9hZFJlc291cmNlYCBmdW5jdGlvbiBib3VuZCB3aXRoIHRoaXMgb2JqZWN0IGNvbnRleHQuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBtZW1iZXIge2Z1bmN0aW9ufVxuICAgICAqL1xuICAgIHRoaXMuX2JvdW5kTG9hZFJlc291cmNlID0gdGhpcy5fbG9hZFJlc291cmNlLmJpbmQodGhpcyk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYF9vbkxvYWRgIGZ1bmN0aW9uIGJvdW5kIHdpdGggdGhpcyBvYmplY3QgY29udGV4dC5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQG1lbWJlciB7ZnVuY3Rpb259XG4gICAgICovXG4gICAgdGhpcy5fYm91bmRPbkxvYWQgPSB0aGlzLl9vbkxvYWQuYmluZCh0aGlzKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSByZXNvdXJjZSBidWZmZXIgdGhhdCBmaWxscyB1bnRpbCBgbG9hZGAgaXMgY2FsbGVkIHRvIHN0YXJ0IGxvYWRpbmcgcmVzb3VyY2VzLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAbWVtYmVyIHtSZXNvdXJjZVtdfVxuICAgICAqL1xuICAgIHRoaXMuX2J1ZmZlciA9IFtdO1xuXG4gICAgLyoqXG4gICAgICogVXNlZCB0byB0cmFjayBsb2FkIGNvbXBsZXRpb24uXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLl9udW1Ub0xvYWQgPSAwO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHJlc291cmNlcyB3YWl0aW5nIHRvIGJlIGxvYWRlZC5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQG1lbWJlciB7UmVzb3VyY2VbXX1cbiAgICAgKi9cbiAgICB0aGlzLl9xdWV1ZSA9IGFzeW5jLnF1ZXVlKHRoaXMuX2JvdW5kTG9hZFJlc291cmNlLCBjb25jdXJyZW5jeSk7XG5cbiAgICAvKipcbiAgICAgKiBBbGwgdGhlIHJlc291cmNlcyBmb3IgdGhpcyBsb2FkZXIga2V5ZWQgYnkgbmFtZS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge29iamVjdDxzdHJpbmcsIFJlc291cmNlPn1cbiAgICAgKi9cbiAgICB0aGlzLnJlc291cmNlcyA9IHt9O1xuXG4gICAgLyoqXG4gICAgICogRW1pdHRlZCBvbmNlIHBlciBsb2FkZWQgb3IgZXJyb3JlZCByZXNvdXJjZS5cbiAgICAgKlxuICAgICAqIEBldmVudCBwcm9ncmVzc1xuICAgICAqIEBtZW1iZXJvZiBMb2FkZXIjXG4gICAgICovXG5cbiAgICAvKipcbiAgICAgKiBFbWl0dGVkIG9uY2UgcGVyIGVycm9yZWQgcmVzb3VyY2UuXG4gICAgICpcbiAgICAgKiBAZXZlbnQgZXJyb3JcbiAgICAgKiBAbWVtYmVyb2YgTG9hZGVyI1xuICAgICAqL1xuXG4gICAgLyoqXG4gICAgICogRW1pdHRlZCBvbmNlIHBlciBsb2FkZWQgcmVzb3VyY2UuXG4gICAgICpcbiAgICAgKiBAZXZlbnQgbG9hZFxuICAgICAqIEBtZW1iZXJvZiBMb2FkZXIjXG4gICAgICovXG5cbiAgICAvKipcbiAgICAgKiBFbWl0dGVkIHdoZW4gdGhlIGxvYWRlciBiZWdpbnMgdG8gcHJvY2VzcyB0aGUgcXVldWUuXG4gICAgICpcbiAgICAgKiBAZXZlbnQgc3RhcnRcbiAgICAgKiBAbWVtYmVyb2YgTG9hZGVyI1xuICAgICAqL1xuXG4gICAgLyoqXG4gICAgICogRW1pdHRlZCB3aGVuIHRoZSBxdWV1ZWQgcmVzb3VyY2VzIGFsbCBsb2FkLlxuICAgICAqXG4gICAgICogQGV2ZW50IGNvbXBsZXRlXG4gICAgICogQG1lbWJlcm9mIExvYWRlciNcbiAgICAgKi9cbn1cblxuTG9hZGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoRXZlbnRFbWl0dGVyLnByb3RvdHlwZSk7XG5Mb2FkZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gTG9hZGVyO1xubW9kdWxlLmV4cG9ydHMgPSBMb2FkZXI7XG5cbi8qKlxuICogQWRkcyBhIHJlc291cmNlIChvciBtdWx0aXBsZSByZXNvdXJjZXMpIHRvIHRoZSBsb2FkZXIgcXVldWUuXG4gKlxuICogVGhpcyBmdW5jdGlvbiBjYW4gdGFrZSBhIHdpZGUgdmFyaWV0eSBvZiBkaWZmZXJlbnQgcGFyYW1ldGVycy4gVGhlIG9ubHkgdGhpbmcgdGhhdCBpcyBhbHdheXNcbiAqIHJlcXVpcmVkIHRoZSB1cmwgdG8gbG9hZC4gQWxsIHRoZSBmb2xsb3dpbmcgd2lsbCB3b3JrOlxuICpcbiAqIGBgYGpzXG4gKiBsb2FkZXJcbiAqICAgICAvLyBub3JtYWwgcGFyYW0gc3ludGF4XG4gKiAgICAgLmFkZCgna2V5JywgJ2h0dHA6Ly8uLi4nLCBmdW5jdGlvbiAoKSB7fSlcbiAqICAgICAuYWRkKCdodHRwOi8vLi4uJywgZnVuY3Rpb24gKCkge30pXG4gKiAgICAgLmFkZCgnaHR0cDovLy4uLicpXG4gKlxuICogICAgIC8vIG9iamVjdCBzeW50YXhcbiAqICAgICAuYWRkKHtcbiAqICAgICAgICAgbmFtZTogJ2tleTInLFxuICogICAgICAgICB1cmw6ICdodHRwOi8vLi4uJ1xuICogICAgIH0sIGZ1bmN0aW9uICgpIHt9KVxuICogICAgIC5hZGQoe1xuICogICAgICAgICB1cmw6ICdodHRwOi8vLi4uJ1xuICogICAgIH0sIGZ1bmN0aW9uICgpIHt9KVxuICogICAgIC5hZGQoe1xuICogICAgICAgICBuYW1lOiAna2V5MycsXG4gKiAgICAgICAgIHVybDogJ2h0dHA6Ly8uLi4nXG4gKiAgICAgICAgIG9uQ29tcGxldGU6IGZ1bmN0aW9uICgpIHt9XG4gKiAgICAgfSlcbiAqICAgICAuYWRkKHtcbiAqICAgICAgICAgdXJsOiAnaHR0cHM6Ly8uLi4nLFxuICogICAgICAgICBvbkNvbXBsZXRlOiBmdW5jdGlvbiAoKSB7fSxcbiAqICAgICAgICAgY3Jvc3NPcmlnaW46IHRydWVcbiAqICAgICB9KVxuICpcbiAqICAgICAvLyB5b3UgY2FuIGFsc28gcGFzcyBhbiBhcnJheSBvZiBvYmplY3RzIG9yIHVybHMgb3IgYm90aFxuICogICAgIC5hZGQoW1xuICogICAgICAgICB7IG5hbWU6ICdrZXk0JywgdXJsOiAnaHR0cDovLy4uLicsIG9uQ29tcGxldGU6IGZ1bmN0aW9uICgpIHt9IH0sXG4gKiAgICAgICAgIHsgdXJsOiAnaHR0cDovLy4uLicsIG9uQ29tcGxldGU6IGZ1bmN0aW9uICgpIHt9IH0sXG4gKiAgICAgICAgICdodHRwOi8vLi4uJ1xuICogICAgIF0pO1xuICogYGBgXG4gKlxuICogQGFsaWFzIGVucXVldWVcbiAqIEBwYXJhbSBbbmFtZV0ge3N0cmluZ30gVGhlIG5hbWUgb2YgdGhlIHJlc291cmNlIHRvIGxvYWQsIGlmIG5vdCBwYXNzZWQgdGhlIHVybCBpcyB1c2VkLlxuICogQHBhcmFtIHVybCB7c3RyaW5nfSBUaGUgdXJsIGZvciB0aGlzIHJlc291cmNlLCByZWxhdGl2ZSB0byB0aGUgYmFzZVVybCBvZiB0aGlzIGxvYWRlci5cbiAqIEBwYXJhbSBbb3B0aW9uc10ge29iamVjdH0gVGhlIG9wdGlvbnMgZm9yIHRoZSBsb2FkLlxuICogQHBhcmFtIFtvcHRpb25zLmNyb3NzT3JpZ2luXSB7Ym9vbGVhbn0gSXMgdGhpcyByZXF1ZXN0IGNyb3NzLW9yaWdpbj8gRGVmYXVsdCBpcyB0byBkZXRlcm1pbmUgYXV0b21hdGljYWxseS5cbiAqIEBwYXJhbSBbb3B0aW9ucy5sb2FkVHlwZT1SZXNvdXJjZS5MT0FEX1RZUEUuWEhSXSB7UmVzb3VyY2UuWEhSX0xPQURfVFlQRX0gSG93IHNob3VsZCB0aGlzIHJlc291cmNlIGJlIGxvYWRlZD9cbiAqIEBwYXJhbSBbb3B0aW9ucy54aHJUeXBlPVJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkRFRkFVTFRdIHtSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRX0gSG93IHNob3VsZCB0aGUgZGF0YSBiZWluZ1xuICogICAgICBsb2FkZWQgYmUgaW50ZXJwcmV0ZWQgd2hlbiB1c2luZyBYSFI/XG4gKiBAcGFyYW0gW2NhbGxiYWNrXSB7ZnVuY3Rpb259IEZ1bmN0aW9uIHRvIGNhbGwgd2hlbiB0aGlzIHNwZWNpZmljIHJlc291cmNlIGNvbXBsZXRlcyBsb2FkaW5nLlxuICogQHJldHVybiB7TG9hZGVyfVxuICovXG5Mb2FkZXIucHJvdG90eXBlLmFkZCA9IExvYWRlci5wcm90b3R5cGUuZW5xdWV1ZSA9IGZ1bmN0aW9uIChuYW1lLCB1cmwsIG9wdGlvbnMsIGNiKSB7XG4gICAgLy8gc3BlY2lhbCBjYXNlIG9mIGFuIGFycmF5IG9mIG9iamVjdHMgb3IgdXJsc1xuICAgIGlmIChBcnJheS5pc0FycmF5KG5hbWUpKSB7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbmFtZS5sZW5ndGg7ICsraSkge1xuICAgICAgICAgICAgdGhpcy5hZGQobmFtZVtpXSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICAvLyBpZiBhbiBvYmplY3QgaXMgcGFzc2VkIGluc3RlYWQgb2YgcGFyYW1zXG4gICAgaWYgKHR5cGVvZiBuYW1lID09PSAnb2JqZWN0Jykge1xuICAgICAgICBjYiA9IHVybCB8fCBuYW1lLmNhbGxiYWNrIHx8IG5hbWUub25Db21wbGV0ZTtcbiAgICAgICAgb3B0aW9ucyA9IG5hbWU7XG4gICAgICAgIHVybCA9IG5hbWUudXJsO1xuICAgICAgICBuYW1lID0gbmFtZS5uYW1lIHx8IG5hbWUua2V5IHx8IG5hbWUudXJsO1xuICAgIH1cblxuICAgIC8vIGNhc2Ugd2hlcmUgbm8gbmFtZSBpcyBwYXNzZWQgc2hpZnQgYWxsIGFyZ3Mgb3ZlciBieSBvbmUuXG4gICAgaWYgKHR5cGVvZiB1cmwgIT09ICdzdHJpbmcnKSB7XG4gICAgICAgIGNiID0gb3B0aW9ucztcbiAgICAgICAgb3B0aW9ucyA9IHVybDtcbiAgICAgICAgdXJsID0gbmFtZTtcbiAgICB9XG5cbiAgICAvLyBub3cgdGhhdCB3ZSBzaGlmdGVkIG1ha2Ugc3VyZSB3ZSBoYXZlIGEgcHJvcGVyIHVybC5cbiAgICBpZiAodHlwZW9mIHVybCAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdObyB1cmwgcGFzc2VkIHRvIGFkZCByZXNvdXJjZSB0byBsb2FkZXIuJyk7XG4gICAgfVxuXG4gICAgLy8gb3B0aW9ucyBhcmUgb3B0aW9uYWwgc28gcGVvcGxlIG1pZ2h0IHBhc3MgYSBmdW5jdGlvbiBhbmQgbm8gb3B0aW9uc1xuICAgIGlmICh0eXBlb2Ygb3B0aW9ucyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBjYiA9IG9wdGlvbnM7XG4gICAgICAgIG9wdGlvbnMgPSBudWxsO1xuICAgIH1cblxuICAgIC8vIGNoZWNrIGlmIHJlc291cmNlIGFscmVhZHkgZXhpc3RzLlxuICAgIGlmICh0aGlzLnJlc291cmNlc1tuYW1lXSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1Jlc291cmNlIHdpdGggbmFtZSBcIicgKyBuYW1lICsgJ1wiIGFscmVhZHkgZXhpc3RzLicpO1xuICAgIH1cblxuICAgIC8vIGFkZCBiYXNlIHVybCBpZiB0aGlzIGlzbid0IGFuIGFic29sdXRlIHVybFxuICAgIHVybCA9IHRoaXMuX2hhbmRsZUJhc2VVcmwodXJsKTtcblxuICAgIC8vIGNyZWF0ZSB0aGUgc3RvcmUgdGhlIHJlc291cmNlXG4gICAgdGhpcy5yZXNvdXJjZXNbbmFtZV0gPSBuZXcgUmVzb3VyY2UobmFtZSwgdXJsLCBvcHRpb25zKTtcblxuICAgIGlmICh0eXBlb2YgY2IgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgdGhpcy5yZXNvdXJjZXNbbmFtZV0ub25jZSgnYWZ0ZXJNaWRkbGV3YXJlJywgY2IpO1xuICAgIH1cblxuICAgIHRoaXMuX251bVRvTG9hZCsrO1xuXG4gICAgLy8gaWYgYWxyZWFkeSBsb2FkaW5nIGFkZCBpdCB0byB0aGUgd29ya2VyIHF1ZXVlXG4gICAgaWYgKHRoaXMuX3F1ZXVlLnN0YXJ0ZWQpIHtcbiAgICAgICAgdGhpcy5fcXVldWUucHVzaCh0aGlzLnJlc291cmNlc1tuYW1lXSk7XG4gICAgICAgIHRoaXMuX3Byb2dyZXNzQ2h1bmsgPSAoMTAwIC0gdGhpcy5wcm9ncmVzcykgLyAodGhpcy5fcXVldWUubGVuZ3RoKCkgKyB0aGlzLl9xdWV1ZS5ydW5uaW5nKCkpO1xuICAgIH1cbiAgICAvLyBvdGhlcndpc2UgYnVmZmVyIGl0IHRvIGJlIGFkZGVkIHRvIHRoZSBxdWV1ZSBsYXRlclxuICAgIGVsc2Uge1xuICAgICAgICB0aGlzLl9idWZmZXIucHVzaCh0aGlzLnJlc291cmNlc1tuYW1lXSk7XG4gICAgICAgIHRoaXMuX3Byb2dyZXNzQ2h1bmsgPSAxMDAgLyB0aGlzLl9idWZmZXIubGVuZ3RoO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzO1xufTtcblxuTG9hZGVyLnByb3RvdHlwZS5faGFuZGxlQmFzZVVybCA9IGZ1bmN0aW9uICh1cmwpIHtcbiAgICB2YXIgcGFyc2VkVXJsID0gdXJsUGFyc2VyLnBhcnNlKHVybCk7XG5cbiAgICAvLyBhYnNvbHV0ZSB1cmwsIGp1c3QgdXNlIGl0IGFzIGlzLlxuICAgIGlmIChwYXJzZWRVcmwucHJvdG9jb2wgfHwgcGFyc2VkVXJsLnBhdGhuYW1lLmluZGV4T2YoJy8vJykgPT09IDApIHtcbiAgICAgICAgcmV0dXJuIHVybDtcbiAgICB9XG5cbiAgICAvLyBpZiBiYXNlVXJsIGRvZXNuJ3QgZW5kIGluIHNsYXNoIGFuZCB1cmwgZG9lc24ndCBzdGFydCB3aXRoIHNsYXNoLCB0aGVuIGFkZCBhIHNsYXNoIGluYmV0d2VlblxuICAgIGlmIChcbiAgICAgICAgdGhpcy5iYXNlVXJsLmxlbmd0aCAmJlxuICAgICAgICB0aGlzLmJhc2VVcmwubGFzdEluZGV4T2YoJy8nKSAhPT0gdGhpcy5iYXNlVXJsLmxlbmd0aCAtIDEgJiZcbiAgICAgICAgdXJsLmNoYXJBdCgwKSAhPT0gJy8nXG4gICAgKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmJhc2VVcmwgKyAnLycgKyB1cmw7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICByZXR1cm4gdGhpcy5iYXNlVXJsICsgdXJsO1xuICAgIH1cbn07XG5cblxuLyoqXG4gKiBTZXRzIHVwIGEgbWlkZGxld2FyZSBmdW5jdGlvbiB0aGF0IHdpbGwgcnVuICpiZWZvcmUqIHRoZVxuICogcmVzb3VyY2UgaXMgbG9hZGVkLlxuICpcbiAqIEBhbGlhcyBwcmVcbiAqIEBwYXJhbSBtaWRkbGV3YXJlIHtmdW5jdGlvbn0gVGhlIG1pZGRsZXdhcmUgZnVuY3Rpb24gdG8gcmVnaXN0ZXIuXG4gKiBAcmV0dXJuIHtMb2FkZXJ9XG4gKi9cbkxvYWRlci5wcm90b3R5cGUuYmVmb3JlID0gTG9hZGVyLnByb3RvdHlwZS5wcmUgPSBmdW5jdGlvbiAoZm4pIHtcbiAgICB0aGlzLl9iZWZvcmVNaWRkbGV3YXJlLnB1c2goZm4pO1xuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIFNldHMgdXAgYSBtaWRkbGV3YXJlIGZ1bmN0aW9uIHRoYXQgd2lsbCBydW4gKmFmdGVyKiB0aGVcbiAqIHJlc291cmNlIGlzIGxvYWRlZC5cbiAqXG4gKiBAYWxpYXMgdXNlXG4gKiBAcGFyYW0gbWlkZGxld2FyZSB7ZnVuY3Rpb259IFRoZSBtaWRkbGV3YXJlIGZ1bmN0aW9uIHRvIHJlZ2lzdGVyLlxuICogQHJldHVybiB7TG9hZGVyfVxuICovXG5Mb2FkZXIucHJvdG90eXBlLmFmdGVyID0gTG9hZGVyLnByb3RvdHlwZS51c2UgPSBmdW5jdGlvbiAoZm4pIHtcbiAgICB0aGlzLl9hZnRlck1pZGRsZXdhcmUucHVzaChmbik7XG5cbiAgICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogUmVzZXRzIHRoZSBxdWV1ZSBvZiB0aGUgbG9hZGVyIHRvIHByZXBhcmUgZm9yIGEgbmV3IGxvYWQuXG4gKlxuICogQHJldHVybiB7TG9hZGVyfVxuICovXG5Mb2FkZXIucHJvdG90eXBlLnJlc2V0ID0gZnVuY3Rpb24gKCkge1xuICAgIC8vIHRoaXMuYmFzZVVybCA9IGJhc2VVcmwgfHwgJyc7XG5cbiAgICB0aGlzLnByb2dyZXNzID0gMDtcblxuICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xuXG4gICAgdGhpcy5fcHJvZ3Jlc3NDaHVuayA9IDA7XG5cbiAgICAvLyB0aGlzLl9iZWZvcmVNaWRkbGV3YXJlLmxlbmd0aCA9IDA7XG4gICAgLy8gdGhpcy5fYWZ0ZXJNaWRkbGV3YXJlLmxlbmd0aCA9IDA7XG5cbiAgICB0aGlzLl9idWZmZXIubGVuZ3RoID0gMDtcblxuICAgIHRoaXMuX251bVRvTG9hZCA9IDA7XG5cbiAgICB0aGlzLl9xdWV1ZS5raWxsKCk7XG4gICAgdGhpcy5fcXVldWUuc3RhcnRlZCA9IGZhbHNlO1xuXG4gICAgdGhpcy5yZXNvdXJjZXMgPSB7fTtcbn07XG5cbi8qKlxuICogU3RhcnRzIGxvYWRpbmcgdGhlIHF1ZXVlZCByZXNvdXJjZXMuXG4gKlxuICogQGZpcmVzIHN0YXJ0XG4gKiBAcGFyYW0gW2NhbGxiYWNrXSB7ZnVuY3Rpb259IE9wdGlvbmFsIGNhbGxiYWNrIHRoYXQgd2lsbCBiZSBib3VuZCB0byB0aGUgYGNvbXBsZXRlYCBldmVudC5cbiAqIEByZXR1cm4ge0xvYWRlcn1cbiAqL1xuTG9hZGVyLnByb3RvdHlwZS5sb2FkID0gZnVuY3Rpb24gKGNiKSB7XG4gICAgLy8gcmVnaXN0ZXIgY29tcGxldGUgY2FsbGJhY2sgaWYgdGhleSBwYXNzIG9uZVxuICAgIGlmICh0eXBlb2YgY2IgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgdGhpcy5vbmNlKCdjb21wbGV0ZScsIGNiKTtcbiAgICB9XG5cbiAgICAvLyBpZiB0aGUgcXVldWUgaGFzIGFscmVhZHkgc3RhcnRlZCB3ZSBhcmUgZG9uZSBoZXJlXG4gICAgaWYgKHRoaXMuX3F1ZXVlLnN0YXJ0ZWQpIHtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLy8gbm90aWZ5IG9mIHN0YXJ0XG4gICAgdGhpcy5lbWl0KCdzdGFydCcsIHRoaXMpO1xuXG4gICAgLy8gc3RhcnQgdGhlIGludGVybmFsIHF1ZXVlXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLl9idWZmZXIubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgdGhpcy5fcXVldWUucHVzaCh0aGlzLl9idWZmZXJbaV0pO1xuICAgIH1cblxuICAgIC8vIGVtcHR5IHRoZSBidWZmZXJcbiAgICB0aGlzLl9idWZmZXIubGVuZ3RoID0gMDtcblxuICAgIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBMb2FkcyBhIHNpbmdsZSByZXNvdXJjZS5cbiAqXG4gKiBAZmlyZXMgcHJvZ3Jlc3NcbiAqIEBwcml2YXRlXG4gKi9cbkxvYWRlci5wcm90b3R5cGUuX2xvYWRSZXNvdXJjZSA9IGZ1bmN0aW9uIChyZXNvdXJjZSwgZGVxdWV1ZSkge1xuICAgIHZhciBzZWxmID0gdGhpcztcblxuICAgIHJlc291cmNlLl9kZXF1ZXVlID0gZGVxdWV1ZTtcblxuICAgIHRoaXMuX3J1bk1pZGRsZXdhcmUocmVzb3VyY2UsIHRoaXMuX2JlZm9yZU1pZGRsZXdhcmUsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgLy8gcmVzb3VyY2Uub24oJ3Byb2dyZXNzJywgc2VsZi5lbWl0LmJpbmQoc2VsZiwgJ3Byb2dyZXNzJykpO1xuXG4gICAgICAgIHJlc291cmNlLmxvYWQoc2VsZi5fYm91bmRPbkxvYWQpO1xuICAgIH0pO1xufTtcblxuLyoqXG4gKiBDYWxsZWQgb25jZSBlYWNoIHJlc291cmNlIGhhcyBsb2FkZWQuXG4gKlxuICogQGZpcmVzIGNvbXBsZXRlXG4gKiBAcHJpdmF0ZVxuICovXG5Mb2FkZXIucHJvdG90eXBlLl9vbkNvbXBsZXRlID0gZnVuY3Rpb24gKCkge1xuICAgIHRoaXMuZW1pdCgnY29tcGxldGUnLCB0aGlzLCB0aGlzLnJlc291cmNlcyk7XG59O1xuXG4vKipcbiAqIENhbGxlZCBlYWNoIHRpbWUgYSByZXNvdXJjZXMgaXMgbG9hZGVkLlxuICpcbiAqIEBmaXJlcyBwcm9ncmVzc1xuICogQGZpcmVzIGVycm9yXG4gKiBAZmlyZXMgbG9hZFxuICogQHByaXZhdGVcbiAqL1xuTG9hZGVyLnByb3RvdHlwZS5fb25Mb2FkID0gZnVuY3Rpb24gKHJlc291cmNlKSB7XG4gICAgdGhpcy5wcm9ncmVzcyArPSB0aGlzLl9wcm9ncmVzc0NodW5rO1xuXG4gICAgdGhpcy5lbWl0KCdwcm9ncmVzcycsIHRoaXMsIHJlc291cmNlKTtcblxuICAgIC8vIHJ1biBtaWRkbGV3YXJlLCB0aGlzICptdXN0KiBoYXBwZW4gYmVmb3JlIGRlcXVldWUgc28gc3ViLWFzc2V0cyBnZXQgYWRkZWQgcHJvcGVybHlcbiAgICB0aGlzLl9ydW5NaWRkbGV3YXJlKHJlc291cmNlLCB0aGlzLl9hZnRlck1pZGRsZXdhcmUsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmVzb3VyY2UuZW1pdCgnYWZ0ZXJNaWRkbGV3YXJlJywgcmVzb3VyY2UpO1xuXG4gICAgICAgIHRoaXMuX251bVRvTG9hZC0tO1xuXG4gICAgICAgIC8vIGRvIGNvbXBsZXRpb24gY2hlY2tcbiAgICAgICAgaWYgKHRoaXMuX251bVRvTG9hZCA9PT0gMCkge1xuICAgICAgICAgICAgdGhpcy5wcm9ncmVzcyA9IDEwMDtcbiAgICAgICAgICAgIHRoaXMuX29uQ29tcGxldGUoKTtcbiAgICAgICAgfVxuICAgICAgICBcbiAgICAgICAgaWYgKHJlc291cmNlLmVycm9yKSB7XG4gICAgICAgICAgICB0aGlzLmVtaXQoJ2Vycm9yJywgcmVzb3VyY2UuZXJyb3IsIHRoaXMsIHJlc291cmNlKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuZW1pdCgnbG9hZCcsIHRoaXMsIHJlc291cmNlKTtcbiAgICAgICAgfVxuICAgIH0pO1xuICAgIFxuXG5cbiAgICAvLyByZW1vdmUgdGhpcyByZXNvdXJjZSBmcm9tIHRoZSBhc3luYyBxdWV1ZVxuICAgIHJlc291cmNlLl9kZXF1ZXVlKCk7XG59O1xuXG4vKipcbiAqIFJ1biBtaWRkbGV3YXJlIGZ1bmN0aW9ucyBvbiBhIHJlc291cmNlLlxuICpcbiAqIEBwcml2YXRlXG4gKi9cbkxvYWRlci5wcm90b3R5cGUuX3J1bk1pZGRsZXdhcmUgPSBmdW5jdGlvbiAocmVzb3VyY2UsIGZucywgY2IpIHtcbiAgICB2YXIgc2VsZiA9IHRoaXM7XG5cbiAgICBhc3luYy5lYWNoU2VyaWVzKGZucywgZnVuY3Rpb24gKGZuLCBuZXh0KSB7XG4gICAgICAgIGZuLmNhbGwoc2VsZiwgcmVzb3VyY2UsIG5leHQpO1xuICAgIH0sIGNiLmJpbmQodGhpcywgcmVzb3VyY2UpKTtcbn07XG5cbkxvYWRlci5MT0FEX1RZUEUgPSBSZXNvdXJjZS5MT0FEX1RZUEU7XG5Mb2FkZXIuWEhSX1JFQURZX1NUQVRFID0gUmVzb3VyY2UuWEhSX1JFQURZX1NUQVRFO1xuTG9hZGVyLlhIUl9SRVNQT05TRV9UWVBFID0gUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEU7XG4iLCJ2YXIgRXZlbnRFbWl0dGVyID0gcmVxdWlyZSgnZXZlbnRlbWl0dGVyMycpLFxuICAgIF91cmwgPSByZXF1aXJlKCd1cmwnKSxcbiAgICAvLyB0ZXN0cyBpcyBDT1JTIGlzIHN1cHBvcnRlZCBpbiBYSFIsIGlmIG5vdCB3ZSBuZWVkIHRvIHVzZSBYRFJcbiAgICB1c2VYZHIgPSAhISh3aW5kb3cuWERvbWFpblJlcXVlc3QgJiYgISgnd2l0aENyZWRlbnRpYWxzJyBpbiAobmV3IFhNTEh0dHBSZXF1ZXN0KCkpKSksXG4gICAgdGVtcEFuY2hvciA9IG51bGw7XG5cbi8qKlxuICogTWFuYWdlcyB0aGUgc3RhdGUgYW5kIGxvYWRpbmcgb2YgYSBzaW5nbGUgcmVzb3VyY2UgcmVwcmVzZW50ZWQgYnlcbiAqIGEgc2luZ2xlIFVSTC5cbiAqXG4gKiBAY2xhc3NcbiAqIEBwYXJhbSBuYW1lIHtzdHJpbmd9IFRoZSBuYW1lIG9mIHRoZSByZXNvdXJjZSB0byBsb2FkLlxuICogQHBhcmFtIHVybCB7c3RyaW5nfHN0cmluZ1tdfSBUaGUgdXJsIGZvciB0aGlzIHJlc291cmNlLCBmb3IgYXVkaW8vdmlkZW8gbG9hZHMgeW91IGNhbiBwYXNzIGFuIGFycmF5IG9mIHNvdXJjZXMuXG4gKiBAcGFyYW0gW29wdGlvbnNdIHtvYmplY3R9IFRoZSBvcHRpb25zIGZvciB0aGUgbG9hZC5cbiAqIEBwYXJhbSBbb3B0aW9ucy5jcm9zc09yaWdpbl0ge3N0cmluZ3xib29sZWFufSBJcyB0aGlzIHJlcXVlc3QgY3Jvc3Mtb3JpZ2luPyBEZWZhdWx0IGlzIHRvIGRldGVybWluZSBhdXRvbWF0aWNhbGx5LlxuICogQHBhcmFtIFtvcHRpb25zLmxvYWRUeXBlPVJlc291cmNlLkxPQURfVFlQRS5YSFJdIHtSZXNvdXJjZS5MT0FEX1RZUEV9IEhvdyBzaG91bGQgdGhpcyByZXNvdXJjZSBiZSBsb2FkZWQ/XG4gKiBAcGFyYW0gW29wdGlvbnMueGhyVHlwZT1SZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRS5ERUZBVUxUXSB7UmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEV9IEhvdyBzaG91bGQgdGhlIGRhdGEgYmVpbmdcbiAqICAgICAgbG9hZGVkIGJlIGludGVycHJldGVkIHdoZW4gdXNpbmcgWEhSP1xuICogQHBhcmFtIFtvcHRpb25zLm1ldGFkYXRhXSB7b2JqZWN0fSBFeHRyYSBpbmZvIGZvciBtaWRkbGV3YXJlLlxuICovXG5mdW5jdGlvbiBSZXNvdXJjZShuYW1lLCB1cmwsIG9wdGlvbnMpIHtcbiAgICBFdmVudEVtaXR0ZXIuY2FsbCh0aGlzKTtcblxuICAgIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuXG4gICAgaWYgKHR5cGVvZiBuYW1lICE9PSAnc3RyaW5nJyB8fCB0eXBlb2YgdXJsICE9PSAnc3RyaW5nJykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0JvdGggbmFtZSBhbmQgdXJsIGFyZSByZXF1aXJlZCBmb3IgY29uc3RydWN0aW5nIGEgcmVzb3VyY2UuJyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhlIG5hbWUgb2YgdGhpcyByZXNvdXJjZS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge3N0cmluZ31cbiAgICAgKiBAcmVhZG9ubHlcbiAgICAgKi9cbiAgICB0aGlzLm5hbWUgPSBuYW1lO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHVybCB1c2VkIHRvIGxvYWQgdGhpcyByZXNvdXJjZS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge3N0cmluZ31cbiAgICAgKiBAcmVhZG9ubHlcbiAgICAgKi9cbiAgICB0aGlzLnVybCA9IHVybDtcblxuICAgIC8qKlxuICAgICAqIFN0b3JlcyB3aGV0aGVyIG9yIG5vdCB0aGlzIHVybCBpcyBhIGRhdGEgdXJsLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKiBAcmVhZG9ubHlcbiAgICAgKi9cbiAgICB0aGlzLmlzRGF0YVVybCA9IHRoaXMudXJsLmluZGV4T2YoJ2RhdGE6JykgPT09IDA7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgZGF0YSB0aGF0IHdhcyBsb2FkZWQgYnkgdGhlIHJlc291cmNlLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7YW55fVxuICAgICAqL1xuICAgIHRoaXMuZGF0YSA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBJcyB0aGlzIHJlcXVlc3QgY3Jvc3Mtb3JpZ2luPyBJZiB1bnNldCwgZGV0ZXJtaW5lZCBhdXRvbWF0aWNhbGx5LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7c3RyaW5nfVxuICAgICAqL1xuICAgIHRoaXMuY3Jvc3NPcmlnaW4gPSBvcHRpb25zLmNyb3NzT3JpZ2luID09PSB0cnVlID8gJ2Fub255bW91cycgOiBvcHRpb25zLmNyb3NzT3JpZ2luO1xuXG4gICAgLyoqXG4gICAgICogVGhlIG1ldGhvZCBvZiBsb2FkaW5nIHRvIHVzZSBmb3IgdGhpcyByZXNvdXJjZS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1Jlc291cmNlLkxPQURfVFlQRX1cbiAgICAgKi9cbiAgICB0aGlzLmxvYWRUeXBlID0gb3B0aW9ucy5sb2FkVHlwZSB8fCB0aGlzLl9kZXRlcm1pbmVMb2FkVHlwZSgpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHR5cGUgdXNlZCB0byBsb2FkIHRoZSByZXNvdXJjZSB2aWEgWEhSLiBJZiB1bnNldCwgZGV0ZXJtaW5lZCBhdXRvbWF0aWNhbGx5LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7c3RyaW5nfVxuICAgICAqL1xuICAgIHRoaXMueGhyVHlwZSA9IG9wdGlvbnMueGhyVHlwZTtcblxuICAgIC8qKlxuICAgICAqIEV4dHJhIGluZm8gZm9yIG1pZGRsZXdhcmVcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge29iamVjdH1cbiAgICAgKi9cbiAgICB0aGlzLm1ldGFkYXRhID0gb3B0aW9ucy5tZXRhZGF0YSB8fCB7fTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBlcnJvciB0aGF0IG9jY3VycmVkIHdoaWxlIGxvYWRpbmcgKGlmIGFueSkuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtFcnJvcn1cbiAgICAgKiBAcmVhZG9ubHlcbiAgICAgKi9cbiAgICB0aGlzLmVycm9yID0gbnVsbDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBYSFIgb2JqZWN0IHRoYXQgd2FzIHVzZWQgdG8gbG9hZCB0aGlzIHJlc291cmNlLiBUaGlzIGlzIG9ubHkgc2V0XG4gICAgICogd2hlbiBgbG9hZFR5cGVgIGlzIGBSZXNvdXJjZS5MT0FEX1RZUEUuWEhSYC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1hNTEh0dHBSZXF1ZXN0fVxuICAgICAqL1xuICAgIHRoaXMueGhyID0gbnVsbDtcblxuICAgIC8qKlxuICAgICAqIERlc2NyaWJlcyBpZiB0aGlzIHJlc291cmNlIHdhcyBsb2FkZWQgYXMganNvbi4gT25seSB2YWxpZCBhZnRlciB0aGUgcmVzb3VyY2VcbiAgICAgKiBoYXMgY29tcGxldGVseSBsb2FkZWQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqL1xuICAgIHRoaXMuaXNKc29uID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBEZXNjcmliZXMgaWYgdGhpcyByZXNvdXJjZSB3YXMgbG9hZGVkIGFzIHhtbC4gT25seSB2YWxpZCBhZnRlciB0aGUgcmVzb3VyY2VcbiAgICAgKiBoYXMgY29tcGxldGVseSBsb2FkZWQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqL1xuICAgIHRoaXMuaXNYbWwgPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIERlc2NyaWJlcyBpZiB0aGlzIHJlc291cmNlIHdhcyBsb2FkZWQgYXMgYW4gaW1hZ2UgdGFnLiBPbmx5IHZhbGlkIGFmdGVyIHRoZSByZXNvdXJjZVxuICAgICAqIGhhcyBjb21wbGV0ZWx5IGxvYWRlZC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICovXG4gICAgdGhpcy5pc0ltYWdlID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBEZXNjcmliZXMgaWYgdGhpcyByZXNvdXJjZSB3YXMgbG9hZGVkIGFzIGFuIGF1ZGlvIHRhZy4gT25seSB2YWxpZCBhZnRlciB0aGUgcmVzb3VyY2VcbiAgICAgKiBoYXMgY29tcGxldGVseSBsb2FkZWQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqL1xuICAgIHRoaXMuaXNBdWRpbyA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogRGVzY3JpYmVzIGlmIHRoaXMgcmVzb3VyY2Ugd2FzIGxvYWRlZCBhcyBhIHZpZGVvIHRhZy4gT25seSB2YWxpZCBhZnRlciB0aGUgcmVzb3VyY2VcbiAgICAgKiBoYXMgY29tcGxldGVseSBsb2FkZWQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqL1xuICAgIHRoaXMuaXNWaWRlbyA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGBkZXF1ZXVlYCBtZXRob2QgdGhhdCB3aWxsIGJlIHVzZWQgYSBzdG9yYWdlIHBsYWNlIGZvciB0aGUgYXN5bmMgcXVldWUgZGVxdWV1ZSBtZXRob2RcbiAgICAgKiB1c2VkIHByaXZhdGVseSBieSB0aGUgbG9hZGVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7ZnVuY3Rpb259XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9kZXF1ZXVlID0gbnVsbDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBgY29tcGxldGVgIGZ1bmN0aW9uIGJvdW5kIHRvIHRoaXMgcmVzb3VyY2UncyBjb250ZXh0LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7ZnVuY3Rpb259XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9ib3VuZENvbXBsZXRlID0gdGhpcy5jb21wbGV0ZS5iaW5kKHRoaXMpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGBfb25FcnJvcmAgZnVuY3Rpb24gYm91bmQgdG8gdGhpcyByZXNvdXJjZSdzIGNvbnRleHQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtmdW5jdGlvbn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX2JvdW5kT25FcnJvciA9IHRoaXMuX29uRXJyb3IuYmluZCh0aGlzKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBgX29uUHJvZ3Jlc3NgIGZ1bmN0aW9uIGJvdW5kIHRvIHRoaXMgcmVzb3VyY2UncyBjb250ZXh0LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7ZnVuY3Rpb259XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9ib3VuZE9uUHJvZ3Jlc3MgPSB0aGlzLl9vblByb2dyZXNzLmJpbmQodGhpcyk7XG5cbiAgICAvLyB4aHIgY2FsbGJhY2tzXG4gICAgdGhpcy5fYm91bmRYaHJPbkVycm9yID0gdGhpcy5feGhyT25FcnJvci5iaW5kKHRoaXMpO1xuICAgIHRoaXMuX2JvdW5kWGhyT25BYm9ydCA9IHRoaXMuX3hock9uQWJvcnQuYmluZCh0aGlzKTtcbiAgICB0aGlzLl9ib3VuZFhock9uTG9hZCA9IHRoaXMuX3hock9uTG9hZC5iaW5kKHRoaXMpO1xuICAgIHRoaXMuX2JvdW5kWGRyT25UaW1lb3V0ID0gdGhpcy5feGRyT25UaW1lb3V0LmJpbmQodGhpcyk7XG5cbiAgICAvKipcbiAgICAgKiBFbWl0dGVkIHdoZW4gdGhlIHJlc291cmNlIGJlaW5ncyB0byBsb2FkLlxuICAgICAqXG4gICAgICogQGV2ZW50IHN0YXJ0XG4gICAgICogQG1lbWJlcm9mIFJlc291cmNlI1xuICAgICAqL1xuXG4gICAgLyoqXG4gICAgICogRW1pdHRlZCBlYWNoIHRpbWUgcHJvZ3Jlc3Mgb2YgdGhpcyByZXNvdXJjZSBsb2FkIHVwZGF0ZXMuXG4gICAgICogTm90IGFsbCByZXNvdXJjZXMgdHlwZXMgYW5kIGxvYWRlciBzeXN0ZW1zIGNhbiBzdXBwb3J0IHRoaXMgZXZlbnRcbiAgICAgKiBzbyBzb21ldGltZXMgaXQgbWF5IG5vdCBiZSBhdmFpbGFibGUuIElmIHRoZSByZXNvdXJjZVxuICAgICAqIGlzIGJlaW5nIGxvYWRlZCBvbiBhIG1vZGVybiBicm93c2VyLCB1c2luZyBYSFIsIGFuZCB0aGUgcmVtb3RlIHNlcnZlclxuICAgICAqIHByb3Blcmx5IHNldHMgQ29udGVudC1MZW5ndGggaGVhZGVycywgdGhlbiB0aGlzIHdpbGwgYmUgYXZhaWxhYmxlLlxuICAgICAqXG4gICAgICogQGV2ZW50IHByb2dyZXNzXG4gICAgICogQG1lbWJlcm9mIFJlc291cmNlI1xuICAgICAqL1xuXG4gICAgLyoqXG4gICAgICogRW1pdHRlZCBvbmNlIHRoaXMgcmVzb3VyY2UgaGFzIGxvYWRlZCwgaWYgdGhlcmUgd2FzIGFuIGVycm9yIGl0IHdpbGxcbiAgICAgKiBiZSBpbiB0aGUgYGVycm9yYCBwcm9wZXJ0eS5cbiAgICAgKlxuICAgICAqIEBldmVudCBjb21wbGV0ZVxuICAgICAqIEBtZW1iZXJvZiBSZXNvdXJjZSNcbiAgICAgKi9cbn1cblxuUmVzb3VyY2UucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShFdmVudEVtaXR0ZXIucHJvdG90eXBlKTtcblJlc291cmNlLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFJlc291cmNlO1xubW9kdWxlLmV4cG9ydHMgPSBSZXNvdXJjZTtcblxuLyoqXG4gKiBNYXJrcyB0aGUgcmVzb3VyY2UgYXMgY29tcGxldGUuXG4gKlxuICogQGZpcmVzIGNvbXBsZXRlXG4gKi9cblJlc291cmNlLnByb3RvdHlwZS5jb21wbGV0ZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAvLyBUT0RPOiBDbGVhbiB0aGlzIHVwIGluIGEgd3JhcHBlciBvciBzb21ldGhpbmcuLi5ncm9zcy4uLi5cbiAgICBpZiAodGhpcy5kYXRhICYmIHRoaXMuZGF0YS5yZW1vdmVFdmVudExpc3RlbmVyKSB7XG4gICAgICAgIHRoaXMuZGF0YS5yZW1vdmVFdmVudExpc3RlbmVyKCdlcnJvcicsIHRoaXMuX2JvdW5kT25FcnJvcik7XG4gICAgICAgIHRoaXMuZGF0YS5yZW1vdmVFdmVudExpc3RlbmVyKCdsb2FkJywgdGhpcy5fYm91bmRDb21wbGV0ZSk7XG4gICAgICAgIHRoaXMuZGF0YS5yZW1vdmVFdmVudExpc3RlbmVyKCdwcm9ncmVzcycsIHRoaXMuX2JvdW5kT25Qcm9ncmVzcyk7XG4gICAgICAgIHRoaXMuZGF0YS5yZW1vdmVFdmVudExpc3RlbmVyKCdjYW5wbGF5dGhyb3VnaCcsIHRoaXMuX2JvdW5kQ29tcGxldGUpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnhocikge1xuICAgICAgICBpZiAodGhpcy54aHIucmVtb3ZlRXZlbnRMaXN0ZW5lcikge1xuICAgICAgICAgICAgdGhpcy54aHIucmVtb3ZlRXZlbnRMaXN0ZW5lcignZXJyb3InLCB0aGlzLl9ib3VuZFhock9uRXJyb3IpO1xuICAgICAgICAgICAgdGhpcy54aHIucmVtb3ZlRXZlbnRMaXN0ZW5lcignYWJvcnQnLCB0aGlzLl9ib3VuZFhock9uQWJvcnQpO1xuICAgICAgICAgICAgdGhpcy54aHIucmVtb3ZlRXZlbnRMaXN0ZW5lcigncHJvZ3Jlc3MnLCB0aGlzLl9ib3VuZE9uUHJvZ3Jlc3MpO1xuICAgICAgICAgICAgdGhpcy54aHIucmVtb3ZlRXZlbnRMaXN0ZW5lcignbG9hZCcsIHRoaXMuX2JvdW5kWGhyT25Mb2FkKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMueGhyLm9uZXJyb3IgPSBudWxsO1xuICAgICAgICAgICAgdGhpcy54aHIub250aW1lb3V0ID0gbnVsbDtcbiAgICAgICAgICAgIHRoaXMueGhyLm9ucHJvZ3Jlc3MgPSBudWxsO1xuICAgICAgICAgICAgdGhpcy54aHIub25sb2FkID0gbnVsbDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMuZW1pdCgnY29tcGxldGUnLCB0aGlzKTtcbn07XG5cbi8qKlxuICogS2lja3Mgb2ZmIGxvYWRpbmcgb2YgdGhpcyByZXNvdXJjZS5cbiAqXG4gKiBAZmlyZXMgc3RhcnRcbiAqIEBwYXJhbSBbY2FsbGJhY2tdIHtmdW5jdGlvbn0gT3B0aW9uYWwgY2FsbGJhY2sgdG8gY2FsbCBvbmNlIHRoZSByZXNvdXJjZSBpcyBsb2FkZWQuXG4gKi9cblJlc291cmNlLnByb3RvdHlwZS5sb2FkID0gZnVuY3Rpb24gKGNiKSB7XG4gICAgdGhpcy5lbWl0KCdzdGFydCcsIHRoaXMpO1xuXG4gICAgLy8gaWYgYSBjYWxsYmFjayBpcyBzZXQsIGxpc3RlbiBmb3IgY29tcGxldGUgZXZlbnRcbiAgICBpZiAoY2IpIHtcbiAgICAgICAgdGhpcy5vbmNlKCdjb21wbGV0ZScsIGNiKTtcbiAgICB9XG5cbiAgICAvLyBpZiB1bnNldCwgZGV0ZXJtaW5lIHRoZSB2YWx1ZVxuICAgIGlmICh0aGlzLmNyb3NzT3JpZ2luID09PSBmYWxzZSB8fCB0eXBlb2YgdGhpcy5jcm9zc09yaWdpbiAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgdGhpcy5jcm9zc09yaWdpbiA9IHRoaXMuX2RldGVybWluZUNyb3NzT3JpZ2luKHRoaXMudXJsKTtcbiAgICB9XG5cbiAgICBzd2l0Y2godGhpcy5sb2FkVHlwZSkge1xuICAgICAgICBjYXNlIFJlc291cmNlLkxPQURfVFlQRS5JTUFHRTpcbiAgICAgICAgICAgIHRoaXMuX2xvYWRJbWFnZSgpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSBSZXNvdXJjZS5MT0FEX1RZUEUuQVVESU86XG4gICAgICAgICAgICB0aGlzLl9sb2FkRWxlbWVudCgnYXVkaW8nKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgUmVzb3VyY2UuTE9BRF9UWVBFLlZJREVPOlxuICAgICAgICAgICAgdGhpcy5fbG9hZEVsZW1lbnQoJ3ZpZGVvJyk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIFJlc291cmNlLkxPQURfVFlQRS5YSFI6XG4gICAgICAgICAgICAvKiBmYWxscyB0aHJvdWdoICovXG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICBpZiAodXNlWGRyICYmIHRoaXMuY3Jvc3NPcmlnaW4pIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9sb2FkWGRyKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9sb2FkWGhyKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBicmVhaztcbiAgICB9XG59O1xuXG4vKipcbiAqIExvYWRzIHRoaXMgcmVzb3VyY2VzIHVzaW5nIGFuIEltYWdlIG9iamVjdC5cbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5SZXNvdXJjZS5wcm90b3R5cGUuX2xvYWRJbWFnZSA9IGZ1bmN0aW9uICgpIHtcbiAgICB0aGlzLmRhdGEgPSBuZXcgSW1hZ2UoKTtcblxuICAgIGlmICh0aGlzLmNyb3NzT3JpZ2luKSB7XG4gICAgICAgIHRoaXMuZGF0YS5jcm9zc09yaWdpbiA9IHRoaXMuY3Jvc3NPcmlnaW47XG4gICAgfVxuXG4gICAgdGhpcy5kYXRhLnNyYyA9IHRoaXMudXJsO1xuXG4gICAgdGhpcy5pc0ltYWdlID0gdHJ1ZTtcblxuICAgIHRoaXMuZGF0YS5hZGRFdmVudExpc3RlbmVyKCdlcnJvcicsIHRoaXMuX2JvdW5kT25FcnJvciwgZmFsc2UpO1xuICAgIHRoaXMuZGF0YS5hZGRFdmVudExpc3RlbmVyKCdsb2FkJywgdGhpcy5fYm91bmRDb21wbGV0ZSwgZmFsc2UpO1xuICAgIHRoaXMuZGF0YS5hZGRFdmVudExpc3RlbmVyKCdwcm9ncmVzcycsIHRoaXMuX2JvdW5kT25Qcm9ncmVzcywgZmFsc2UpO1xufTtcblxuLyoqXG4gKiBMb2FkcyB0aGlzIHJlc291cmNlcyB1c2luZyBhbiBIVE1MQXVkaW9FbGVtZW50IG9yIEhUTUxWaWRlb0VsZW1lbnQuXG4gKlxuICogQHByaXZhdGVcbiAqL1xuUmVzb3VyY2UucHJvdG90eXBlLl9sb2FkRWxlbWVudCA9IGZ1bmN0aW9uICh0eXBlKSB7XG4gICAgaWYgKHR5cGUgPT09ICdhdWRpbycgJiYgdHlwZW9mIEF1ZGlvICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICB0aGlzLmRhdGEgPSBuZXcgQXVkaW8oKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHRoaXMuZGF0YSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQodHlwZSk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuZGF0YSA9PT0gbnVsbCkge1xuICAgICAgICB0aGlzLmVycm9yID0gbmV3IEVycm9yKCdVbnN1cHBvcnRlZCBlbGVtZW50ICcgKyB0eXBlKTtcbiAgICAgICAgdGhpcy5jb21wbGV0ZSgpO1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gc3VwcG9ydCBmb3IgQ29jb29uSlMgQ2FudmFzKyBydW50aW1lLCBsYWNrcyBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzb3VyY2UnKVxuICAgIGlmIChuYXZpZ2F0b3IuaXNDb2Nvb25KUykge1xuICAgICAgICB0aGlzLmRhdGEuc3JjID0gQXJyYXkuaXNBcnJheSh0aGlzLnVybCkgPyB0aGlzLnVybFswXSA6IHRoaXMudXJsO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkodGhpcy51cmwpKSB7XG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMudXJsLmxlbmd0aDsgKytpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5kYXRhLmFwcGVuZENoaWxkKHRoaXMuX2NyZWF0ZVNvdXJjZSh0eXBlLCB0aGlzLnVybFtpXSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5kYXRhLmFwcGVuZENoaWxkKHRoaXMuX2NyZWF0ZVNvdXJjZSh0eXBlLCB0aGlzLnVybCkpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgdGhpc1snaXMnICsgdHlwZVswXS50b1VwcGVyQ2FzZSgpICsgdHlwZS5zdWJzdHJpbmcoMSldID0gdHJ1ZTtcblxuICAgIHRoaXMuZGF0YS5hZGRFdmVudExpc3RlbmVyKCdlcnJvcicsIHRoaXMuX2JvdW5kT25FcnJvciwgZmFsc2UpO1xuICAgIHRoaXMuZGF0YS5hZGRFdmVudExpc3RlbmVyKCdsb2FkJywgdGhpcy5fYm91bmRDb21wbGV0ZSwgZmFsc2UpO1xuICAgIHRoaXMuZGF0YS5hZGRFdmVudExpc3RlbmVyKCdwcm9ncmVzcycsIHRoaXMuX2JvdW5kT25Qcm9ncmVzcywgZmFsc2UpO1xuICAgIHRoaXMuZGF0YS5hZGRFdmVudExpc3RlbmVyKCdjYW5wbGF5dGhyb3VnaCcsIHRoaXMuX2JvdW5kQ29tcGxldGUsIGZhbHNlKTtcblxuICAgIHRoaXMuZGF0YS5sb2FkKCk7XG59O1xuXG4vKipcbiAqIExvYWRzIHRoaXMgcmVzb3VyY2VzIHVzaW5nIGFuIFhNTEh0dHBSZXF1ZXN0LlxuICpcbiAqIEBwcml2YXRlXG4gKi9cblJlc291cmNlLnByb3RvdHlwZS5fbG9hZFhociA9IGZ1bmN0aW9uICgpIHtcbiAgICAvLyBpZiB1bnNldCwgZGV0ZXJtaW5lIHRoZSB2YWx1ZVxuICAgIGlmICh0eXBlb2YgdGhpcy54aHJUeXBlICE9PSAnc3RyaW5nJykge1xuICAgICAgICB0aGlzLnhoclR5cGUgPSB0aGlzLl9kZXRlcm1pbmVYaHJUeXBlKCk7XG4gICAgfVxuXG4gICAgdmFyIHhociA9IHRoaXMueGhyID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7XG5cbiAgICAvLyBzZXQgdGhlIHJlcXVlc3QgdHlwZSBhbmQgdXJsXG4gICAgeGhyLm9wZW4oJ0dFVCcsIHRoaXMudXJsLCB0cnVlKTtcblxuICAgIC8vIGxvYWQganNvbiBhcyB0ZXh0IGFuZCBwYXJzZSBpdCBvdXJzZWx2ZXMuIFdlIGRvIHRoaXMgYmVjYXVzZSBzb21lIGJyb3dzZXJzXG4gICAgLy8gKmNvdWdoKiBzYWZhcmkgKmNvdWdoKiBjYW4ndCBkZWFsIHdpdGggaXQuXG4gICAgaWYgKHRoaXMueGhyVHlwZSA9PT0gUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuSlNPTiB8fCB0aGlzLnhoclR5cGUgPT09IFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkRPQ1VNRU5UKSB7XG4gICAgICAgIHhoci5yZXNwb25zZVR5cGUgPSBSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRS5URVhUO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgeGhyLnJlc3BvbnNlVHlwZSA9IHRoaXMueGhyVHlwZTtcbiAgICB9XG5cbiAgICB4aHIuYWRkRXZlbnRMaXN0ZW5lcignZXJyb3InLCB0aGlzLl9ib3VuZFhock9uRXJyb3IsIGZhbHNlKTtcbiAgICB4aHIuYWRkRXZlbnRMaXN0ZW5lcignYWJvcnQnLCB0aGlzLl9ib3VuZFhock9uQWJvcnQsIGZhbHNlKTtcbiAgICB4aHIuYWRkRXZlbnRMaXN0ZW5lcigncHJvZ3Jlc3MnLCB0aGlzLl9ib3VuZE9uUHJvZ3Jlc3MsIGZhbHNlKTtcbiAgICB4aHIuYWRkRXZlbnRMaXN0ZW5lcignbG9hZCcsIHRoaXMuX2JvdW5kWGhyT25Mb2FkLCBmYWxzZSk7XG5cbiAgICB4aHIuc2VuZCgpO1xufTtcblxuLyoqXG4gKiBMb2FkcyB0aGlzIHJlc291cmNlcyB1c2luZyBhbiBYRG9tYWluUmVxdWVzdC4gVGhpcyBpcyBoZXJlIGJlY2F1c2Ugd2UgbmVlZCB0byBzdXBwb3J0IElFOSAoZ3Jvc3MpLlxuICpcbiAqIEBwcml2YXRlXG4gKi9cblJlc291cmNlLnByb3RvdHlwZS5fbG9hZFhkciA9IGZ1bmN0aW9uICgpIHtcbiAgICAvLyBpZiB1bnNldCwgZGV0ZXJtaW5lIHRoZSB2YWx1ZVxuICAgIGlmICh0eXBlb2YgdGhpcy54aHJUeXBlICE9PSAnc3RyaW5nJykge1xuICAgICAgICB0aGlzLnhoclR5cGUgPSB0aGlzLl9kZXRlcm1pbmVYaHJUeXBlKCk7XG4gICAgfVxuXG4gICAgdmFyIHhkciA9IHRoaXMueGhyID0gbmV3IFhEb21haW5SZXF1ZXN0KCk7XG5cbiAgICAvLyBYRG9tYWluUmVxdWVzdCBoYXMgYSBmZXcgcXVpcmtzLiBPY2Nhc2lvbmFsbHkgaXQgd2lsbCBhYm9ydCByZXF1ZXN0c1xuICAgIC8vIEEgd2F5IHRvIGF2b2lkIHRoaXMgaXMgdG8gbWFrZSBzdXJlIEFMTCBjYWxsYmFja3MgYXJlIHNldCBldmVuIGlmIG5vdCB1c2VkXG4gICAgLy8gTW9yZSBpbmZvIGhlcmU6IGh0dHA6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvMTU3ODY5NjYveGRvbWFpbnJlcXVlc3QtYWJvcnRzLXBvc3Qtb24taWUtOVxuICAgIHhkci50aW1lb3V0ID0gNTAwMDtcblxuICAgIHhkci5vbmVycm9yID0gdGhpcy5fYm91bmRYaHJPbkVycm9yO1xuICAgIHhkci5vbnRpbWVvdXQgPSB0aGlzLl9ib3VuZFhkck9uVGltZW91dDtcbiAgICB4ZHIub25wcm9ncmVzcyA9IHRoaXMuX2JvdW5kT25Qcm9ncmVzcztcbiAgICB4ZHIub25sb2FkID0gdGhpcy5fYm91bmRYaHJPbkxvYWQ7XG5cbiAgICB4ZHIub3BlbignR0VUJywgdGhpcy51cmwsIHRydWUpO1xuXG4gICAgLy8gIE5vdGU6IFRoZSB4ZHIuc2VuZCgpIGNhbGwgaXMgd3JhcHBlZCBpbiBhIHRpbWVvdXQgdG8gcHJldmVudCBhbiBpc3N1ZSB3aXRoIHRoZSBpbnRlcmZhY2Ugd2hlcmUgc29tZSByZXF1ZXN0cyBhcmUgbG9zdFxuICAgIC8vICBpZiBtdWx0aXBsZSBYRG9tYWluUmVxdWVzdHMgYXJlIGJlaW5nIHNlbnQgYXQgdGhlIHNhbWUgdGltZS5cbiAgICAvLyBTb21lIGluZm8gaGVyZTogaHR0cHM6Ly9naXRodWIuY29tL3Bob3RvbnN0b3JtL3BoYXNlci9pc3N1ZXMvMTI0OFxuICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgICB4ZHIuc2VuZCgpO1xuICAgIH0sIDApO1xufTtcblxuLyoqXG4gKiBDcmVhdGVzIGEgc291cmNlIHVzZWQgaW4gbG9hZGluZyB2aWEgYW4gZWxlbWVudC5cbiAqXG4gKiBAcGFyYW0gdHlwZSB7c3RyaW5nfSBUaGUgZWxlbWVudCB0eXBlICh2aWRlbyBvciBhdWRpbykuXG4gKiBAcGFyYW0gdXJsIHtzdHJpbmd9IFRoZSBzb3VyY2UgVVJMIHRvIGxvYWQgZnJvbS5cbiAqIEBwYXJhbSBbbWltZV0ge3N0cmluZ30gVGhlIG1pbWUgdHlwZSBvZiB0aGUgdmlkZW9cbiAqIEBwcml2YXRlXG4gKi9cblJlc291cmNlLnByb3RvdHlwZS5fY3JlYXRlU291cmNlID0gZnVuY3Rpb24gKHR5cGUsIHVybCwgbWltZSkge1xuICAgIGlmICghbWltZSkge1xuICAgICAgICBtaW1lID0gdHlwZSArICcvJyArIHVybC5zdWJzdHIodXJsLmxhc3RJbmRleE9mKCcuJykgKyAxKTtcbiAgICB9XG5cbiAgICB2YXIgc291cmNlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc291cmNlJyk7XG5cbiAgICBzb3VyY2Uuc3JjID0gdXJsO1xuICAgIHNvdXJjZS50eXBlID0gbWltZTtcblxuICAgIHJldHVybiBzb3VyY2U7XG59O1xuXG4vKipcbiAqIENhbGxlZCBpZiBhIGxvYWQgZXJyb3JzIG91dC5cbiAqXG4gKiBAcGFyYW0gZXZlbnQge0V2ZW50fSBUaGUgZXJyb3IgZXZlbnQgZnJvbSB0aGUgZWxlbWVudCB0aGF0IGVtaXRzIGl0LlxuICogQHByaXZhdGVcbiAqL1xuUmVzb3VyY2UucHJvdG90eXBlLl9vbkVycm9yID0gZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgdGhpcy5lcnJvciA9IG5ldyBFcnJvcignRmFpbGVkIHRvIGxvYWQgZWxlbWVudCB1c2luZyAnICsgZXZlbnQudGFyZ2V0Lm5vZGVOYW1lKTtcbiAgICB0aGlzLmNvbXBsZXRlKCk7XG59O1xuXG4vKipcbiAqIENhbGxlZCBpZiBhIGxvYWQgcHJvZ3Jlc3MgZXZlbnQgZmlyZXMgZm9yIHhoci94ZHIuXG4gKlxuICogQGZpcmVzIHByb2dyZXNzXG4gKiBAcGFyYW0gZXZlbnQge1hNTEh0dHBSZXF1ZXN0UHJvZ3Jlc3NFdmVudHxFdmVudH1cbiAqIEBwcml2YXRlXG4gKi9cblJlc291cmNlLnByb3RvdHlwZS5fb25Qcm9ncmVzcyA9ICBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICBpZiAoZXZlbnQgJiYgZXZlbnQubGVuZ3RoQ29tcHV0YWJsZSkge1xuICAgICAgICB0aGlzLmVtaXQoJ3Byb2dyZXNzJywgdGhpcywgZXZlbnQubG9hZGVkIC8gZXZlbnQudG90YWwpO1xuICAgIH1cbn07XG5cbi8qKlxuICogQ2FsbGVkIGlmIGFuIGVycm9yIGV2ZW50IGZpcmVzIGZvciB4aHIveGRyLlxuICpcbiAqIEBwYXJhbSBldmVudCB7WE1MSHR0cFJlcXVlc3RFcnJvckV2ZW50fEV2ZW50fVxuICogQHByaXZhdGVcbiAqL1xuUmVzb3VyY2UucHJvdG90eXBlLl94aHJPbkVycm9yID0gZnVuY3Rpb24gKCkge1xuICAgIHRoaXMuZXJyb3IgPSBuZXcgRXJyb3IoXG4gICAgICAgIHJlcVR5cGUodGhpcy54aHIpICsgJyBSZXF1ZXN0IGZhaWxlZC4gJyArXG4gICAgICAgICdTdGF0dXM6ICcgKyB0aGlzLnhoci5zdGF0dXMgKyAnLCB0ZXh0OiBcIicgKyB0aGlzLnhoci5zdGF0dXNUZXh0ICsgJ1wiJ1xuICAgICk7XG5cbiAgICB0aGlzLmNvbXBsZXRlKCk7XG59O1xuXG4vKipcbiAqIENhbGxlZCBpZiBhbiBhYm9ydCBldmVudCBmaXJlcyBmb3IgeGhyLlxuICpcbiAqIEBwYXJhbSBldmVudCB7WE1MSHR0cFJlcXVlc3RBYm9ydEV2ZW50fVxuICogQHByaXZhdGVcbiAqL1xuUmVzb3VyY2UucHJvdG90eXBlLl94aHJPbkFib3J0ID0gZnVuY3Rpb24gKCkge1xuICAgIHRoaXMuZXJyb3IgPSBuZXcgRXJyb3IocmVxVHlwZSh0aGlzLnhocikgKyAnIFJlcXVlc3Qgd2FzIGFib3J0ZWQgYnkgdGhlIHVzZXIuJyk7XG4gICAgdGhpcy5jb21wbGV0ZSgpO1xufTtcblxuLyoqXG4gKiBDYWxsZWQgaWYgYSB0aW1lb3V0IGV2ZW50IGZpcmVzIGZvciB4ZHIuXG4gKlxuICogQHBhcmFtIGV2ZW50IHtFdmVudH1cbiAqIEBwcml2YXRlXG4gKi9cblJlc291cmNlLnByb3RvdHlwZS5feGRyT25UaW1lb3V0ID0gZnVuY3Rpb24gKCkge1xuICAgIHRoaXMuZXJyb3IgPSBuZXcgRXJyb3IocmVxVHlwZSh0aGlzLnhocikgKyAnIFJlcXVlc3QgdGltZWQgb3V0LicpO1xuICAgIHRoaXMuY29tcGxldGUoKTtcbn07XG5cbi8qKlxuICogQ2FsbGVkIHdoZW4gZGF0YSBzdWNjZXNzZnVsbHkgbG9hZHMgZnJvbSBhbiB4aHIveGRyIHJlcXVlc3QuXG4gKlxuICogQHBhcmFtIGV2ZW50IHtYTUxIdHRwUmVxdWVzdExvYWRFdmVudHxFdmVudH1cbiAqIEBwcml2YXRlXG4gKi9cblJlc291cmNlLnByb3RvdHlwZS5feGhyT25Mb2FkID0gZnVuY3Rpb24gKCkge1xuICAgIHZhciB4aHIgPSB0aGlzLnhocixcbiAgICAgICAgc3RhdHVzID0geGhyLnN0YXR1cyAhPT0gdW5kZWZpbmVkID8geGhyLnN0YXR1cyA6IDIwMDsgLy9YRFIgaGFzIG5vIGAuc3RhdHVzYCwgYXNzdW1lIDIwMC5cblxuICAgIC8vIHN0YXR1cyBjYW4gYmUgMCB3aGVuIHVzaW5nIHRoZSBmaWxlOi8vIHByb3RvY29sLCBhbHNvIGNoZWNrIGlmIGEgcmVzcG9uc2Ugd2FzIGZvdW5kXG4gICAgaWYgKHN0YXR1cyA9PT0gMjAwIHx8IHN0YXR1cyA9PT0gMjA0IHx8IChzdGF0dXMgPT09IDAgJiYgeGhyLnJlc3BvbnNlVGV4dC5sZW5ndGggPiAwKSkge1xuICAgICAgICAvLyBpZiB0ZXh0LCBqdXN0IHJldHVybiBpdFxuICAgICAgICBpZiAodGhpcy54aHJUeXBlID09PSBSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRS5URVhUKSB7XG4gICAgICAgICAgICB0aGlzLmRhdGEgPSB4aHIucmVzcG9uc2VUZXh0O1xuICAgICAgICB9XG4gICAgICAgIC8vIGlmIGpzb24sIHBhcnNlIGludG8ganNvbiBvYmplY3RcbiAgICAgICAgZWxzZSBpZiAodGhpcy54aHJUeXBlID09PSBSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRS5KU09OKSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIHRoaXMuZGF0YSA9IEpTT04ucGFyc2UoeGhyLnJlc3BvbnNlVGV4dCk7XG4gICAgICAgICAgICAgICAgdGhpcy5pc0pzb24gPSB0cnVlO1xuICAgICAgICAgICAgfSBjYXRjaChlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5lcnJvciA9IG5ldyBFcnJvcignRXJyb3IgdHJ5aW5nIHRvIHBhcnNlIGxvYWRlZCBqc29uOicsIGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIGlmIHhtbCwgcGFyc2UgaW50byBhbiB4bWwgZG9jdW1lbnQgb3IgZGl2IGVsZW1lbnRcbiAgICAgICAgZWxzZSBpZiAodGhpcy54aHJUeXBlID09PSBSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRS5ET0NVTUVOVCkge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBpZiAod2luZG93LkRPTVBhcnNlcikge1xuICAgICAgICAgICAgICAgICAgICB2YXIgZG9tcGFyc2VyID0gbmV3IERPTVBhcnNlcigpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmRhdGEgPSBkb21wYXJzZXIucGFyc2VGcm9tU3RyaW5nKHhoci5yZXNwb25zZVRleHQsICd0ZXh0L3htbCcpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICAgICAgICAgICAgICBkaXYuaW5uZXJIVE1MID0geGhyLnJlc3BvbnNlVGV4dDtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kYXRhID0gZGl2O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzLmlzWG1sID0gdHJ1ZTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmVycm9yID0gbmV3IEVycm9yKCdFcnJvciB0cnlpbmcgdG8gcGFyc2UgbG9hZGVkIHhtbDonLCBlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvLyBvdGhlciB0eXBlcyBqdXN0IHJldHVybiB0aGUgcmVzcG9uc2VcbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmRhdGEgPSB4aHIucmVzcG9uc2UgfHwgeGhyLnJlc3BvbnNlVGV4dDtcbiAgICAgICAgfVxuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgdGhpcy5lcnJvciA9IG5ldyBFcnJvcignWycgKyB4aHIuc3RhdHVzICsgJ10nICsgeGhyLnN0YXR1c1RleHQgKyAnOicgKyB4aHIucmVzcG9uc2VVUkwpO1xuICAgIH1cblxuICAgIHRoaXMuY29tcGxldGUoKTtcbn07XG5cbmZ1bmN0aW9uIHJlcVR5cGUoeGhyKSB7XG4gICAgcmV0dXJuIHhoci50b1N0cmluZygpLnJlcGxhY2UoJ29iamVjdCAnLCAnJyk7XG59XG5cbi8qKlxuICogU2V0cyB0aGUgYGNyb3NzT3JpZ2luYCBwcm9wZXJ0eSBmb3IgdGhpcyByZXNvdXJjZSBiYXNlZCBvbiBpZiB0aGUgdXJsXG4gKiBmb3IgdGhpcyByZXNvdXJjZSBpcyBjcm9zcy1vcmlnaW4uIElmIGNyb3NzT3JpZ2luIHdhcyBtYW51YWxseSBzZXQsIHRoaXNcbiAqIGZ1bmN0aW9uIGRvZXMgbm90aGluZy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHVybCB7c3RyaW5nfSBUaGUgdXJsIHRvIHRlc3QuXG4gKiBAcGFyYW0gW2xvY2F0aW9uPXdpbmRvdy5sb2NhdGlvbl0ge29iamVjdH0gVGhlIGxvY2F0aW9uIG9iamVjdCB0byB0ZXN0IGFnYWluc3QuXG4gKiBAcmV0dXJuIHtzdHJpbmd9IFRoZSBjcm9zc09yaWdpbiB2YWx1ZSB0byB1c2UgKG9yIGVtcHR5IHN0cmluZyBmb3Igbm9uZSkuXG4gKi9cblJlc291cmNlLnByb3RvdHlwZS5fZGV0ZXJtaW5lQ3Jvc3NPcmlnaW4gPSBmdW5jdGlvbiAodXJsLCBsb2MpIHtcbiAgICAvLyBkYXRhOiBhbmQgamF2YXNjcmlwdDogdXJscyBhcmUgY29uc2lkZXJlZCBzYW1lLW9yaWdpblxuICAgIGlmICh1cmwuaW5kZXhPZignZGF0YTonKSA9PT0gMCkge1xuICAgICAgICByZXR1cm4gJyc7XG4gICAgfVxuXG4gICAgLy8gZGVmYXVsdCBpcyB3aW5kb3cubG9jYXRpb25cbiAgICBsb2MgPSBsb2MgfHwgd2luZG93LmxvY2F0aW9uO1xuXG4gICAgaWYgKCF0ZW1wQW5jaG9yKSB7XG4gICAgICAgIHRlbXBBbmNob3IgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdhJyk7XG4gICAgfVxuXG4gICAgLy8gbGV0IHRoZSBicm93c2VyIGRldGVybWluZSB0aGUgZnVsbCBocmVmIGZvciB0aGUgdXJsIG9mIHRoaXMgcmVzb3VyY2UgYW5kIHRoZW5cbiAgICAvLyBwYXJzZSB3aXRoIHRoZSBub2RlIHVybCBsaWIsIHdlIGNhbid0IHVzZSB0aGUgcHJvcGVydGllcyBvZiB0aGUgYW5jaG9yIGVsZW1lbnRcbiAgICAvLyBiZWNhdXNlIHRoZXkgZG9uJ3Qgd29yayBpbiBJRTkgOihcbiAgICB0ZW1wQW5jaG9yLmhyZWYgPSB1cmw7XG4gICAgdXJsID0gX3VybC5wYXJzZSh0ZW1wQW5jaG9yLmhyZWYpO1xuXG4gICAgdmFyIHNhbWVQb3J0ID0gKCF1cmwucG9ydCAmJiBsb2MucG9ydCA9PT0gJycpIHx8ICh1cmwucG9ydCA9PT0gbG9jLnBvcnQpO1xuXG4gICAgLy8gaWYgY3Jvc3Mgb3JpZ2luXG4gICAgaWYgKHVybC5ob3N0bmFtZSAhPT0gbG9jLmhvc3RuYW1lIHx8ICFzYW1lUG9ydCB8fCB1cmwucHJvdG9jb2wgIT09IGxvYy5wcm90b2NvbCkge1xuICAgICAgICByZXR1cm4gJ2Fub255bW91cyc7XG4gICAgfVxuXG4gICAgcmV0dXJuICcnO1xufTtcblxuLyoqXG4gKiBEZXRlcm1pbmVzIHRoZSByZXNwb25zZVR5cGUgb2YgYW4gWEhSIHJlcXVlc3QgYmFzZWQgb24gdGhlIGV4dGVuc2lvbiBvZiB0aGVcbiAqIHJlc291cmNlIGJlaW5nIGxvYWRlZC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHJldHVybiB7UmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEV9IFRoZSByZXNwb25zZVR5cGUgdG8gdXNlLlxuICovXG5SZXNvdXJjZS5wcm90b3R5cGUuX2RldGVybWluZVhoclR5cGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIFJlc291cmNlLl94aHJUeXBlTWFwW3RoaXMuX2dldEV4dGVuc2lvbigpXSB8fCBSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRS5URVhUO1xufTtcblxuUmVzb3VyY2UucHJvdG90eXBlLl9kZXRlcm1pbmVMb2FkVHlwZSA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gUmVzb3VyY2UuX2xvYWRUeXBlTWFwW3RoaXMuX2dldEV4dGVuc2lvbigpXSB8fCBSZXNvdXJjZS5MT0FEX1RZUEUuWEhSO1xufTtcblxuUmVzb3VyY2UucHJvdG90eXBlLl9nZXRFeHRlbnNpb24gPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHVybCA9IHRoaXMudXJsLFxuICAgICAgICBleHQ7XG5cbiAgICBpZiAodGhpcy5pc0RhdGFVcmwpIHtcbiAgICAgICAgdmFyIHNsYXNoSW5kZXggPSB1cmwuaW5kZXhPZignLycpO1xuICAgICAgICBleHQgPSB1cmwuc3Vic3RyaW5nKHNsYXNoSW5kZXggKyAxLCB1cmwuaW5kZXhPZignOycsIHNsYXNoSW5kZXgpKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHZhciBxdWVyeVN0YXJ0ID0gdXJsLmluZGV4T2YoJz8nKTtcbiAgICAgICAgaWYgKHF1ZXJ5U3RhcnQgIT09IC0xKSB7XG4gICAgICAgICAgICB1cmwgPSB1cmwuc3Vic3RyaW5nKDAsIHF1ZXJ5U3RhcnQpO1xuICAgICAgICB9XG5cbiAgICAgICAgZXh0ID0gdXJsLnN1YnN0cmluZyh1cmwubGFzdEluZGV4T2YoJy4nKSArIDEpO1xuICAgIH1cblxuICAgIHJldHVybiBleHQ7XG59O1xuXG4vKipcbiAqIERldGVybWluZXMgdGhlIG1pbWUgdHlwZSBvZiBhbiBYSFIgcmVxdWVzdCBiYXNlZCBvbiB0aGUgcmVzcG9uc2VUeXBlIG9mXG4gKiByZXNvdXJjZSBiZWluZyBsb2FkZWQuXG4gKlxuICogQHByaXZhdGVcbiAqIEByZXR1cm4ge3N0cmluZ30gVGhlIG1pbWUgdHlwZSB0byB1c2UuXG4gKi9cblJlc291cmNlLnByb3RvdHlwZS5fZ2V0TWltZUZyb21YaHJUeXBlID0gZnVuY3Rpb24gKHR5cGUpIHtcbiAgICBzd2l0Y2godHlwZSkge1xuICAgICAgICBjYXNlIFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkJVRkZFUjpcbiAgICAgICAgICAgIHJldHVybiAnYXBwbGljYXRpb24vb2N0ZXQtYmluYXJ5JztcblxuICAgICAgICBjYXNlIFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkJMT0I6XG4gICAgICAgICAgICByZXR1cm4gJ2FwcGxpY2F0aW9uL2Jsb2InO1xuXG4gICAgICAgIGNhc2UgUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuRE9DVU1FTlQ6XG4gICAgICAgICAgICByZXR1cm4gJ2FwcGxpY2F0aW9uL3htbCc7XG5cbiAgICAgICAgY2FzZSBSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRS5KU09OOlxuICAgICAgICAgICAgcmV0dXJuICdhcHBsaWNhdGlvbi9qc29uJztcblxuICAgICAgICBjYXNlIFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkRFRkFVTFQ6XG4gICAgICAgIGNhc2UgUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuVEVYVDpcbiAgICAgICAgICAgIC8qIGZhbGxzIHRocm91Z2ggKi9cbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIHJldHVybiAndGV4dC9wbGFpbic7XG5cbiAgICB9XG59O1xuXG4vKipcbiAqIFRoZSB0eXBlcyBvZiBsb2FkaW5nIGEgcmVzb3VyY2UgY2FuIHVzZS5cbiAqXG4gKiBAc3RhdGljXG4gKiBAY29uc3RhbnRcbiAqIEBwcm9wZXJ0eSB7b2JqZWN0fSBMT0FEX1RZUEVcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBMT0FEX1RZUEUuWEhSIC0gVXNlcyBYTUxIdHRwUmVxdWVzdCB0byBsb2FkIHRoZSByZXNvdXJjZS5cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBMT0FEX1RZUEUuSU1BR0UgLSBVc2VzIGFuIGBJbWFnZWAgb2JqZWN0IHRvIGxvYWQgdGhlIHJlc291cmNlLlxuICogQHByb3BlcnR5IHtudW1iZXJ9IExPQURfVFlQRS5BVURJTyAtIFVzZXMgYW4gYEF1ZGlvYCBvYmplY3QgdG8gbG9hZCB0aGUgcmVzb3VyY2UuXG4gKiBAcHJvcGVydHkge251bWJlcn0gTE9BRF9UWVBFLlZJREVPIC0gVXNlcyBhIGBWaWRlb2Agb2JqZWN0IHRvIGxvYWQgdGhlIHJlc291cmNlLlxuICovXG5SZXNvdXJjZS5MT0FEX1RZUEUgPSB7XG4gICAgWEhSOiAgICAxLFxuICAgIElNQUdFOiAgMixcbiAgICBBVURJTzogIDMsXG4gICAgVklERU86ICA0XG59O1xuXG4vKipcbiAqIFRoZSBYSFIgcmVhZHkgc3RhdGVzLCB1c2VkIGludGVybmFsbHkuXG4gKlxuICogQHN0YXRpY1xuICogQGNvbnN0YW50XG4gKiBAcHJvcGVydHkge29iamVjdH0gWEhSX1JFQURZX1NUQVRFXG4gKiBAcHJvcGVydHkge251bWJlcn0gWEhSX1JFQURZX1NUQVRFLlVOU0VOVCAtIG9wZW4oKWhhcyBub3QgYmVlbiBjYWxsZWQgeWV0LlxuICogQHByb3BlcnR5IHtudW1iZXJ9IFhIUl9SRUFEWV9TVEFURS5PUEVORUQgLSBzZW5kKCloYXMgbm90IGJlZW4gY2FsbGVkIHlldC5cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBYSFJfUkVBRFlfU1RBVEUuSEVBREVSU19SRUNFSVZFRCAtIHNlbmQoKSBoYXMgYmVlbiBjYWxsZWQsIGFuZCBoZWFkZXJzIGFuZCBzdGF0dXMgYXJlIGF2YWlsYWJsZS5cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBYSFJfUkVBRFlfU1RBVEUuTE9BRElORyAtIERvd25sb2FkaW5nOyByZXNwb25zZVRleHQgaG9sZHMgcGFydGlhbCBkYXRhLlxuICogQHByb3BlcnR5IHtudW1iZXJ9IFhIUl9SRUFEWV9TVEFURS5ET05FIC0gVGhlIG9wZXJhdGlvbiBpcyBjb21wbGV0ZS5cbiAqL1xuUmVzb3VyY2UuWEhSX1JFQURZX1NUQVRFID0ge1xuICAgIFVOU0VOVDogMCxcbiAgICBPUEVORUQ6IDEsXG4gICAgSEVBREVSU19SRUNFSVZFRDogMixcbiAgICBMT0FESU5HOiAzLFxuICAgIERPTkU6IDRcbn07XG5cbi8qKlxuICogVGhlIFhIUiByZWFkeSBzdGF0ZXMsIHVzZWQgaW50ZXJuYWxseS5cbiAqXG4gKiBAc3RhdGljXG4gKiBAY29uc3RhbnRcbiAqIEBwcm9wZXJ0eSB7b2JqZWN0fSBYSFJfUkVTUE9OU0VfVFlQRVxuICogQHByb3BlcnR5IHtzdHJpbmd9IFhIUl9SRVNQT05TRV9UWVBFLkRFRkFVTFQgLSBkZWZhdWx0cyB0byB0ZXh0XG4gKiBAcHJvcGVydHkge3N0cmluZ30gWEhSX1JFU1BPTlNFX1RZUEUuQlVGRkVSIC0gQXJyYXlCdWZmZXJcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBYSFJfUkVTUE9OU0VfVFlQRS5CTE9CIC0gQmxvYlxuICogQHByb3BlcnR5IHtzdHJpbmd9IFhIUl9SRVNQT05TRV9UWVBFLkRPQ1VNRU5UIC0gRG9jdW1lbnRcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBYSFJfUkVTUE9OU0VfVFlQRS5KU09OIC0gT2JqZWN0XG4gKiBAcHJvcGVydHkge3N0cmluZ30gWEhSX1JFU1BPTlNFX1RZUEUuVEVYVCAtIFN0cmluZ1xuICovXG5SZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRSA9IHtcbiAgICBERUZBVUxUOiAgICAndGV4dCcsXG4gICAgQlVGRkVSOiAgICAgJ2FycmF5YnVmZmVyJyxcbiAgICBCTE9COiAgICAgICAnYmxvYicsXG4gICAgRE9DVU1FTlQ6ICAgJ2RvY3VtZW50JyxcbiAgICBKU09OOiAgICAgICAnanNvbicsXG4gICAgVEVYVDogICAgICAgJ3RleHQnXG59O1xuXG5SZXNvdXJjZS5fbG9hZFR5cGVNYXAgPSB7XG4gICAgJ2dpZic6ICAgICAgUmVzb3VyY2UuTE9BRF9UWVBFLklNQUdFLFxuICAgICdwbmcnOiAgICAgIFJlc291cmNlLkxPQURfVFlQRS5JTUFHRSxcbiAgICAnYm1wJzogICAgICBSZXNvdXJjZS5MT0FEX1RZUEUuSU1BR0UsXG4gICAgJ2pwZyc6ICAgICAgUmVzb3VyY2UuTE9BRF9UWVBFLklNQUdFLFxuICAgICdqcGVnJzogICAgIFJlc291cmNlLkxPQURfVFlQRS5JTUFHRSxcbiAgICAndGlmJzogICAgICBSZXNvdXJjZS5MT0FEX1RZUEUuSU1BR0UsXG4gICAgJ3RpZmYnOiAgICAgUmVzb3VyY2UuTE9BRF9UWVBFLklNQUdFLFxuICAgICd3ZWJwJzogICAgIFJlc291cmNlLkxPQURfVFlQRS5JTUFHRSxcbiAgICAndGdhJzogICAgICBSZXNvdXJjZS5MT0FEX1RZUEUuSU1BR0Vcbn07XG5cblJlc291cmNlLl94aHJUeXBlTWFwID0ge1xuICAgIC8vIHhtbFxuICAgICd4aHRtbCc6ICAgIFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkRPQ1VNRU5ULFxuICAgICdodG1sJzogICAgIFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkRPQ1VNRU5ULFxuICAgICdodG0nOiAgICAgIFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkRPQ1VNRU5ULFxuICAgICd4bWwnOiAgICAgIFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkRPQ1VNRU5ULFxuICAgICd0bXgnOiAgICAgIFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkRPQ1VNRU5ULFxuICAgICd0c3gnOiAgICAgIFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkRPQ1VNRU5ULFxuICAgICdzdmcnOiAgICAgIFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkRPQ1VNRU5ULFxuXG4gICAgLy8gaW1hZ2VzXG4gICAgJ2dpZic6ICAgICAgUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuQkxPQixcbiAgICAncG5nJzogICAgICBSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRS5CTE9CLFxuICAgICdibXAnOiAgICAgIFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkJMT0IsXG4gICAgJ2pwZyc6ICAgICAgUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuQkxPQixcbiAgICAnanBlZyc6ICAgICBSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRS5CTE9CLFxuICAgICd0aWYnOiAgICAgIFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkJMT0IsXG4gICAgJ3RpZmYnOiAgICAgUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuQkxPQixcbiAgICAnd2VicCc6ICAgICBSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRS5CTE9CLFxuICAgICd0Z2EnOiAgICAgIFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkJMT0IsXG5cbiAgICAvLyBqc29uXG4gICAgJ2pzb24nOiAgICAgUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuSlNPTixcblxuICAgIC8vIHRleHRcbiAgICAndGV4dCc6ICAgICBSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRS5URVhULFxuICAgICd0eHQnOiAgICAgIFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLlRFWFRcbn07XG5cbi8qKlxuICogU2V0cyB0aGUgbG9hZCB0eXBlIHRvIGJlIHVzZWQgZm9yIGEgc3BlY2lmaWMgZXh0ZW5zaW9uLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBwYXJhbSBleHRuYW1lIHtzdHJpbmd9IFRoZSBleHRlbnNpb24gdG8gc2V0IHRoZSB0eXBlIGZvciwgZS5nLiBcInBuZ1wiIG9yIFwiZm50XCJcbiAqIEBwYXJhbSBsb2FkVHlwZSB7UmVzb3VyY2UuTE9BRF9UWVBFfSBUaGUgbG9hZCB0eXBlIHRvIHNldCBpdCB0by5cbiAqL1xuUmVzb3VyY2Uuc2V0RXh0ZW5zaW9uTG9hZFR5cGUgPSBmdW5jdGlvbiAoZXh0bmFtZSwgbG9hZFR5cGUpIHtcbiAgICBzZXRFeHRNYXAoUmVzb3VyY2UuX2xvYWRUeXBlTWFwLCBleHRuYW1lLCBsb2FkVHlwZSk7XG59O1xuXG4vKipcbiAqIFNldHMgdGhlIGxvYWQgdHlwZSB0byBiZSB1c2VkIGZvciBhIHNwZWNpZmljIGV4dGVuc2lvbi5cbiAqXG4gKiBAc3RhdGljXG4gKiBAcGFyYW0gZXh0bmFtZSB7c3RyaW5nfSBUaGUgZXh0ZW5zaW9uIHRvIHNldCB0aGUgdHlwZSBmb3IsIGUuZy4gXCJwbmdcIiBvciBcImZudFwiXG4gKiBAcGFyYW0geGhyVHlwZSB7UmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEV9IFRoZSB4aHIgdHlwZSB0byBzZXQgaXQgdG8uXG4gKi9cblJlc291cmNlLnNldEV4dGVuc2lvblhoclR5cGUgPSBmdW5jdGlvbiAoZXh0bmFtZSwgeGhyVHlwZSkge1xuICAgIHNldEV4dE1hcChSZXNvdXJjZS5feGhyVHlwZU1hcCwgZXh0bmFtZSwgeGhyVHlwZSk7XG59O1xuXG5mdW5jdGlvbiBzZXRFeHRNYXAobWFwLCBleHRuYW1lLCB2YWwpIHtcbiAgICBpZiAoZXh0bmFtZSAmJiBleHRuYW1lLmluZGV4T2YoJy4nKSA9PT0gMCkge1xuICAgICAgICBleHRuYW1lID0gZXh0bmFtZS5zdWJzdHJpbmcoMSk7XG4gICAgfVxuXG4gICAgaWYgKCFleHRuYW1lKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBtYXBbZXh0bmFtZV0gPSB2YWw7XG59XG4iLCJtb2R1bGUuZXhwb3J0cyA9IHtcblxuICAgIC8vIHByaXZhdGUgcHJvcGVydHlcbiAgICBfa2V5U3RyOiBcIkFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5Ky89XCIsXG5cbiAgICBlbmNvZGVCaW5hcnk6IGZ1bmN0aW9uIChpbnB1dCkge1xuICAgICAgICB2YXIgb3V0cHV0ID0gXCJcIjtcbiAgICAgICAgdmFyIGJ5dGVidWZmZXI7XG4gICAgICAgIHZhciBlbmNvZGVkQ2hhckluZGV4ZXMgPSBuZXcgQXJyYXkoNCk7XG4gICAgICAgIHZhciBpbnggPSAwO1xuICAgICAgICB2YXIgam54ID0gMDtcbiAgICAgICAgdmFyIHBhZGRpbmdCeXRlcyA9IDA7XG5cbiAgICAgICAgd2hpbGUgKGlueCA8IGlucHV0Lmxlbmd0aCkge1xuICAgICAgICAgICAgLy8gRmlsbCBieXRlIGJ1ZmZlciBhcnJheVxuICAgICAgICAgICAgYnl0ZWJ1ZmZlciA9IG5ldyBBcnJheSgzKTtcbiAgICAgICAgICAgIGZvciAoam54ID0gMDsgam54IDwgYnl0ZWJ1ZmZlci5sZW5ndGg7IGpueCsrKSB7XG4gICAgICAgICAgICAgICAgaWYgKGlueCA8IGlucHV0Lmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICAvLyB0aHJvdyBhd2F5IGhpZ2gtb3JkZXIgYnl0ZSwgYXMgZG9jdW1lbnRlZCBhdDpcbiAgICAgICAgICAgICAgICAgICAgLy8gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvRW4vVXNpbmdfWE1MSHR0cFJlcXVlc3QjSGFuZGxpbmdfYmluYXJ5X2RhdGFcbiAgICAgICAgICAgICAgICAgICAgYnl0ZWJ1ZmZlcltqbnhdID0gaW5wdXQuY2hhckNvZGVBdChpbngrKykgJiAweGZmO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgYnl0ZWJ1ZmZlcltqbnhdID0gMDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIEdldCBlYWNoIGVuY29kZWQgY2hhcmFjdGVyLCA2IGJpdHMgYXQgYSB0aW1lXG4gICAgICAgICAgICAvLyBpbmRleCAxOiBmaXJzdCA2IGJpdHNcbiAgICAgICAgICAgIGVuY29kZWRDaGFySW5kZXhlc1swXSA9IGJ5dGVidWZmZXJbMF0gPj4gMjtcbiAgICAgICAgICAgIC8vIGluZGV4IDI6IHNlY29uZCA2IGJpdHMgKDIgbGVhc3Qgc2lnbmlmaWNhbnQgYml0cyBmcm9tIGlucHV0IGJ5dGUgMSArIDQgbW9zdCBzaWduaWZpY2FudCBiaXRzIGZyb20gYnl0ZSAyKVxuICAgICAgICAgICAgZW5jb2RlZENoYXJJbmRleGVzWzFdID0gKChieXRlYnVmZmVyWzBdICYgMHgzKSA8PCA0KSB8IChieXRlYnVmZmVyWzFdID4+IDQpO1xuICAgICAgICAgICAgLy8gaW5kZXggMzogdGhpcmQgNiBiaXRzICg0IGxlYXN0IHNpZ25pZmljYW50IGJpdHMgZnJvbSBpbnB1dCBieXRlIDIgKyAyIG1vc3Qgc2lnbmlmaWNhbnQgYml0cyBmcm9tIGJ5dGUgMylcbiAgICAgICAgICAgIGVuY29kZWRDaGFySW5kZXhlc1syXSA9ICgoYnl0ZWJ1ZmZlclsxXSAmIDB4MGYpIDw8IDIpIHwgKGJ5dGVidWZmZXJbMl0gPj4gNik7XG4gICAgICAgICAgICAvLyBpbmRleCAzOiBmb3J0aCA2IGJpdHMgKDYgbGVhc3Qgc2lnbmlmaWNhbnQgYml0cyBmcm9tIGlucHV0IGJ5dGUgMylcbiAgICAgICAgICAgIGVuY29kZWRDaGFySW5kZXhlc1szXSA9IGJ5dGVidWZmZXJbMl0gJiAweDNmO1xuXG4gICAgICAgICAgICAvLyBEZXRlcm1pbmUgd2hldGhlciBwYWRkaW5nIGhhcHBlbmVkLCBhbmQgYWRqdXN0IGFjY29yZGluZ2x5XG4gICAgICAgICAgICBwYWRkaW5nQnl0ZXMgPSBpbnggLSAoaW5wdXQubGVuZ3RoIC0gMSk7XG4gICAgICAgICAgICBzd2l0Y2ggKHBhZGRpbmdCeXRlcykge1xuICAgICAgICAgICAgICAgIGNhc2UgMjpcbiAgICAgICAgICAgICAgICAgICAgLy8gU2V0IGxhc3QgMiBjaGFyYWN0ZXJzIHRvIHBhZGRpbmcgY2hhclxuICAgICAgICAgICAgICAgICAgICBlbmNvZGVkQ2hhckluZGV4ZXNbM10gPSA2NDtcbiAgICAgICAgICAgICAgICAgICAgZW5jb2RlZENoYXJJbmRleGVzWzJdID0gNjQ7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgY2FzZSAxOlxuICAgICAgICAgICAgICAgICAgICAvLyBTZXQgbGFzdCBjaGFyYWN0ZXIgdG8gcGFkZGluZyBjaGFyXG4gICAgICAgICAgICAgICAgICAgIGVuY29kZWRDaGFySW5kZXhlc1szXSA9IDY0O1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrOyAvLyBObyBwYWRkaW5nIC0gcHJvY2VlZFxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBOb3cgd2Ugd2lsbCBncmFiIGVhY2ggYXBwcm9wcmlhdGUgY2hhcmFjdGVyIG91dCBvZiBvdXIga2V5c3RyaW5nXG4gICAgICAgICAgICAvLyBiYXNlZCBvbiBvdXIgaW5kZXggYXJyYXkgYW5kIGFwcGVuZCBpdCB0byB0aGUgb3V0cHV0IHN0cmluZ1xuICAgICAgICAgICAgZm9yIChqbnggPSAwOyBqbnggPCBlbmNvZGVkQ2hhckluZGV4ZXMubGVuZ3RoOyBqbngrKykge1xuICAgICAgICAgICAgICAgIG91dHB1dCArPSB0aGlzLl9rZXlTdHIuY2hhckF0KGVuY29kZWRDaGFySW5kZXhlc1tqbnhdKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gb3V0cHV0O1xuICAgIH1cbn07XG4iLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vTG9hZGVyJyk7XG5cbm1vZHVsZS5leHBvcnRzLlJlc291cmNlID0gcmVxdWlyZSgnLi9SZXNvdXJjZScpO1xuXG5tb2R1bGUuZXhwb3J0cy5taWRkbGV3YXJlID0ge1xuICAgIGNhY2hpbmc6IHtcbiAgICAgICAgbWVtb3J5OiByZXF1aXJlKCcuL21pZGRsZXdhcmVzL2NhY2hpbmcvbWVtb3J5JylcbiAgICB9LFxuICAgIHBhcnNpbmc6IHtcbiAgICAgICAgYmxvYjogcmVxdWlyZSgnLi9taWRkbGV3YXJlcy9wYXJzaW5nL2Jsb2InKVxuICAgIH1cbn07XG4iLCIvLyBhIHNpbXBsZSBpbi1tZW1vcnkgY2FjaGUgZm9yIHJlc291cmNlc1xudmFyIGNhY2hlID0ge307XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBmdW5jdGlvbiAocmVzb3VyY2UsIG5leHQpIHtcbiAgICAgICAgLy8gaWYgY2FjaGVkLCB0aGVuIHNldCBkYXRhIGFuZCBjb21wbGV0ZSB0aGUgcmVzb3VyY2VcbiAgICAgICAgaWYgKGNhY2hlW3Jlc291cmNlLnVybF0pIHtcbiAgICAgICAgICAgIHJlc291cmNlLmRhdGEgPSBjYWNoZVtyZXNvdXJjZS51cmxdO1xuICAgICAgICAgICAgcmVzb3VyY2UuY29tcGxldGUoKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBpZiBub3QgY2FjaGVkLCB3YWl0IGZvciBjb21wbGV0ZSBhbmQgc3RvcmUgaXQgaW4gdGhlIGNhY2hlLlxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJlc291cmNlLm9uY2UoJ2NvbXBsZXRlJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgY2FjaGVbdGhpcy51cmxdID0gdGhpcy5kYXRhO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgXG4gICAgICAgIG5leHQoKTtcbiAgICB9O1xufTtcbiIsInZhciBSZXNvdXJjZSA9IHJlcXVpcmUoJy4uLy4uL1Jlc291cmNlJyksXG4gICAgYjY0ID0gcmVxdWlyZSgnLi4vLi4vYjY0Jyk7XG5cbndpbmRvdy5VUkwgPSB3aW5kb3cuVVJMIHx8IHdpbmRvdy53ZWJraXRVUkw7XG5cbi8vIGEgbWlkZGxld2FyZSBmb3IgdHJhbnNmb3JtaW5nIFhIUiBsb2FkZWQgQmxvYnMgaW50byBtb3JlIHVzZWZ1bCBvYmplY3RzXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBmdW5jdGlvbiAocmVzb3VyY2UsIG5leHQpIHtcbiAgICAgICAgaWYgKCFyZXNvdXJjZS5kYXRhKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV4dCgpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gaWYgdGhpcyB3YXMgYW4gWEhSIGxvYWQgb2YgYSBibG9iXG4gICAgICAgIGlmIChyZXNvdXJjZS54aHIgJiYgcmVzb3VyY2UueGhyVHlwZSA9PT0gUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuQkxPQikge1xuICAgICAgICAgICAgLy8gaWYgdGhlcmUgaXMgbm8gYmxvYiBzdXBwb3J0IHdlIHByb2JhYmx5IGdvdCBhIGJpbmFyeSBzdHJpbmcgYmFja1xuICAgICAgICAgICAgaWYgKCF3aW5kb3cuQmxvYiB8fCB0eXBlb2YgcmVzb3VyY2UuZGF0YSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgICAgICB2YXIgdHlwZSA9IHJlc291cmNlLnhoci5nZXRSZXNwb25zZUhlYWRlcignY29udGVudC10eXBlJyk7XG5cbiAgICAgICAgICAgICAgICAvLyB0aGlzIGlzIGFuIGltYWdlLCBjb252ZXJ0IHRoZSBiaW5hcnkgc3RyaW5nIGludG8gYSBkYXRhIHVybFxuICAgICAgICAgICAgICAgIGlmICh0eXBlICYmIHR5cGUuaW5kZXhPZignaW1hZ2UnKSA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICByZXNvdXJjZS5kYXRhID0gbmV3IEltYWdlKCk7XG4gICAgICAgICAgICAgICAgICAgIHJlc291cmNlLmRhdGEuc3JjID0gJ2RhdGE6JyArIHR5cGUgKyAnO2Jhc2U2NCwnICsgYjY0LmVuY29kZUJpbmFyeShyZXNvdXJjZS54aHIucmVzcG9uc2VUZXh0KTtcblxuICAgICAgICAgICAgICAgICAgICByZXNvdXJjZS5pc0ltYWdlID0gdHJ1ZTtcblxuICAgICAgICAgICAgICAgICAgICAvLyB3YWl0IHVudGlsIHRoZSBpbWFnZSBsb2FkcyBhbmQgdGhlbiBjYWxsYmFja1xuICAgICAgICAgICAgICAgICAgICByZXNvdXJjZS5kYXRhLm9ubG9hZCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc291cmNlLmRhdGEub25sb2FkID0gbnVsbDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgbmV4dCgpO1xuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIGlmIGNvbnRlbnQgdHlwZSBzYXlzIHRoaXMgaXMgYW4gaW1hZ2UsIHRoZW4gd2Ugc2hvdWxkIHRyYW5zZm9ybSB0aGUgYmxvYiBpbnRvIGFuIEltYWdlIG9iamVjdFxuICAgICAgICAgICAgZWxzZSBpZiAocmVzb3VyY2UuZGF0YS50eXBlLmluZGV4T2YoJ2ltYWdlJykgPT09IDApIHtcbiAgICAgICAgICAgICAgICB2YXIgc3JjID0gVVJMLmNyZWF0ZU9iamVjdFVSTChyZXNvdXJjZS5kYXRhKTtcblxuICAgICAgICAgICAgICAgIHJlc291cmNlLmJsb2IgPSByZXNvdXJjZS5kYXRhO1xuICAgICAgICAgICAgICAgIHJlc291cmNlLmRhdGEgPSBuZXcgSW1hZ2UoKTtcbiAgICAgICAgICAgICAgICByZXNvdXJjZS5kYXRhLnNyYyA9IHNyYztcblxuICAgICAgICAgICAgICAgIHJlc291cmNlLmlzSW1hZ2UgPSB0cnVlO1xuXG4gICAgICAgICAgICAgICAgLy8gY2xlYW51cCB0aGUgbm8gbG9uZ2VyIHVzZWQgYmxvYiBhZnRlciB0aGUgaW1hZ2UgbG9hZHNcbiAgICAgICAgICAgICAgICByZXNvdXJjZS5kYXRhLm9ubG9hZCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgVVJMLnJldm9rZU9iamVjdFVSTChzcmMpO1xuICAgICAgICAgICAgICAgICAgICByZXNvdXJjZS5kYXRhLm9ubG9hZCA9IG51bGw7XG5cbiAgICAgICAgICAgICAgICAgICAgbmV4dCgpO1xuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBuZXh0KCk7XG4gICAgICAgIH1cbiAgICB9O1xufTtcbiIsIm1vZHVsZS5leHBvcnRzPXtcbiAgXCJuYW1lXCI6IFwicGl4aS5qc1wiLFxuICBcInZlcnNpb25cIjogXCIzLjAuMTAtZGV2XCIsXG4gIFwiZGVzY3JpcHRpb25cIjogXCJQaXhpLmpzIGlzIGEgZmFzdCBsaWdodHdlaWdodCAyRCBsaWJyYXJ5IHRoYXQgd29ya3MgYWNyb3NzIGFsbCBkZXZpY2VzLlwiLFxuICBcImF1dGhvclwiOiBcIk1hdCBHcm92ZXNcIixcbiAgXCJjb250cmlidXRvcnNcIjogW1xuICAgIFwiQ2hhZCBFbmdsZXIgPGNoYWRAcGFudGhlcmRldi5jb20+XCIsXG4gICAgXCJSaWNoYXJkIERhdmV5IDxyZGF2ZXlAZ21haWwuY29tPlwiXG4gIF0sXG4gIFwibWFpblwiOiBcIi4vc3JjL2luZGV4LmpzXCIsXG4gIFwiaG9tZXBhZ2VcIjogXCJodHRwOi8vZ29vZGJveWRpZ2l0YWwuY29tL1wiLFxuICBcImJ1Z3NcIjogXCJodHRwczovL2dpdGh1Yi5jb20vcGl4aWpzL3BpeGkuanMvaXNzdWVzXCIsXG4gIFwibGljZW5zZVwiOiBcIk1JVFwiLFxuICBcInJlcG9zaXRvcnlcIjoge1xuICAgIFwidHlwZVwiOiBcImdpdFwiLFxuICAgIFwidXJsXCI6IFwiaHR0cHM6Ly9naXRodWIuY29tL3BpeGlqcy9waXhpLmpzLmdpdFwiXG4gIH0sXG4gIFwic2NyaXB0c1wiOiB7XG4gICAgXCJzdGFydFwiOiBcImd1bHAgJiYgZ3VscCB3YXRjaFwiLFxuICAgIFwidGVzdFwiOiBcImd1bHAgJiYgdGVzdGVtIGNpXCIsXG4gICAgXCJidWlsZFwiOiBcImd1bHBcIixcbiAgICBcImRvY3NcIjogXCJqc2RvYyAtYyAuL2d1bHAvdXRpbC9qc2RvYy5jb25mLmpzb24gLVIgUkVBRE1FLm1kXCJcbiAgfSxcbiAgXCJmaWxlc1wiOiBbXG4gICAgXCJiaW4vXCIsXG4gICAgXCJzcmMvXCIsXG4gICAgXCJDT05UUklCVVRJTkcubWRcIixcbiAgICBcIkxJQ0VOU0VcIixcbiAgICBcInBhY2thZ2UuanNvblwiLFxuICAgIFwiUkVBRE1FLm1kXCJcbiAgXSxcbiAgXCJkZXBlbmRlbmNpZXNcIjoge1xuICAgIFwiYXN5bmNcIjogXCJeMS41LjBcIixcbiAgICBcImJyZnNcIjogXCJeMS40LjFcIixcbiAgICBcImVhcmN1dFwiOiBcIl4yLjAuN1wiLFxuICAgIFwiZXZlbnRlbWl0dGVyM1wiOiBcIl4xLjEuMVwiLFxuICAgIFwib2JqZWN0LWFzc2lnblwiOiBcIl40LjAuMVwiLFxuICAgIFwicGl4aS1nbC1jb3JlXCI6IFwiZ2l0K2h0dHBzOi8vZ2l0aHViLmNvbS9Hb29kQm95RGlnaXRhbC9waXhpLWdsLWNvcmUuZ2l0XCIsXG4gICAgXCJyZXNvdXJjZS1sb2FkZXJcIjogXCJeMS42LjRcIlxuICB9LFxuICBcImRldkRlcGVuZGVuY2llc1wiOiB7XG4gICAgXCJicm93c2VyaWZ5XCI6IFwiXjExLjEuMFwiLFxuICAgIFwiY2hhaVwiOiBcIl4zLjIuMFwiLFxuICAgIFwiZGVsXCI6IFwiXjIuMC4yXCIsXG4gICAgXCJndWxwXCI6IFwiXjMuOS4wXCIsXG4gICAgXCJndWxwLWNhY2hlZFwiOiBcIl4xLjEuMFwiLFxuICAgIFwiZ3VscC1jb25jYXRcIjogXCJeMi42LjBcIixcbiAgICBcImd1bHAtZGVidWdcIjogXCJeMi4xLjBcIixcbiAgICBcImd1bHAtaGVhZGVyXCI6IFwiXjEuNy4xXCIsXG4gICAgXCJndWxwLWpzaGludFwiOiBcIl4xLjExLjJcIixcbiAgICBcImd1bHAtbWlycm9yXCI6IFwiXjAuNC4wXCIsXG4gICAgXCJndWxwLXBsdW1iZXJcIjogXCJeMS4wLjFcIixcbiAgICBcImd1bHAtcmVuYW1lXCI6IFwiXjEuMi4yXCIsXG4gICAgXCJndWxwLXNvdXJjZW1hcHNcIjogXCJeMS41LjJcIixcbiAgICBcImd1bHAtdWdsaWZ5XCI6IFwiXjEuNC4xXCIsXG4gICAgXCJndWxwLXV0aWxcIjogXCJeMy4wLjZcIixcbiAgICBcImphZ3VhcmpzLWpzZG9jXCI6IFwiZ2l0K2h0dHBzOi8vZ2l0aHViLmNvbS9kYXZpZHNoaW1qcy9qYWd1YXJqcy1qc2RvYy5naXRcIixcbiAgICBcImpzZG9jXCI6IFwiXjMuMy4yXCIsXG4gICAgXCJqc2hpbnQtc3VtbWFyeVwiOiBcIl4wLjQuMFwiLFxuICAgIFwibWluaW1pc3RcIjogXCJeMS4yLjBcIixcbiAgICBcIm1vY2hhXCI6IFwiXjIuMy4yXCIsXG4gICAgXCJyZXF1aXJlLWRpclwiOiBcIl4wLjMuMFwiLFxuICAgIFwicnVuLXNlcXVlbmNlXCI6IFwiXjEuMS4yXCIsXG4gICAgXCJ0ZXN0ZW1cIjogXCJeMC45LjRcIixcbiAgICBcInZpbnlsLWJ1ZmZlclwiOiBcIl4xLjAuMFwiLFxuICAgIFwidmlueWwtc291cmNlLXN0cmVhbVwiOiBcIl4xLjEuMFwiLFxuICAgIFwid2F0Y2hpZnlcIjogXCJeMy40LjBcIlxuICB9LFxuICBcImJyb3dzZXJpZnlcIjoge1xuICAgIFwidHJhbnNmb3JtXCI6IFtcbiAgICAgIFwiYnJmc1wiXG4gICAgXVxuICB9XG59XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uL2NvcmUnKTtcblxuLy8gYWRkIHNvbWUgZXh0cmEgdmFyaWFibGVzIHRvIHRoZSBjb250YWluZXIuLlxuT2JqZWN0LmFzc2lnbihcbiAgICBjb3JlLkRpc3BsYXlPYmplY3QucHJvdG90eXBlLFxuICAgIHJlcXVpcmUoJy4vYWNjZXNzaWJsZVRhcmdldCcpXG4pO1xuXG5cbi8qKlxuICogVGhlIEFjY2Vzc2liaWxpdHkgbWFuYWdlciByZWFjcmVhdGVzIHRoZSBhYmlsaXR5IHRvIHRhYiBhbmQgYW5kIGhhdmUgY29udGVudCByZWFkIGJ5IHNjcmVlbiByZWFkZXJzLiBUaGlzIGlzIHZlcnkgaW1wb3J0YW50IGFzIGl0IGNhbiBwb3NzaWJseSBoZWxwIHBlb3BsZSB3aXRoIGRpc2FiaWxpdGllcyBhY2Nlc3MgcGl4aSBjb250ZW50LlxuICogTXVjaCBsaWtlIGludGVyYWN0aW9uIGFueSBEaXNwbGF5T2JqZWN0IGNhbiBiZSBtYWRlIGFjY2Vzc2libGUuIFRoaXMgbWFuYWdlciB3aWxsIG1hcCB0aGUgZXZlbnRzIGFzIGlmIHRoZSBtb3VzZSB3YXMgYmVpbmcgdXNlZCwgbWluaW1pemluZyB0aGUgZWZmZXJvdCByZXF1aXJlZCB0byBpbXBsZW1lbnQuXG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLkNhbnZhc1JlbmRlcmVyfFBJWEkuV2ViR0xSZW5kZXJlcn0gQSByZWZlcmVuY2UgdG8gdGhlIGN1cnJlbnQgcmVuZGVyZXJcbiAqL1xuZnVuY3Rpb24gQWNjZXNzaWJpbGl0eU1hbmFnZXIocmVuZGVyZXIpXG57XG5cdC8vIGZpcnN0IHdlIGNyZWF0ZSBhIGRpdiB0aGF0IHdpbGwgc2l0IG92ZXIgdGhlIHBpeGkgZWxlbWVudC4gVGhpcyBpcyB3aGVyZSB0aGUgZGl2IG92ZXJsYXlzIHdpbGwgZ28uXG4gICAgdmFyIGRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgIFxuICAgIGRpdi5zdHlsZS53aWR0aCA9IDEwMCArICdweCc7XG4gICAgZGl2LnN0eWxlLmhlaWdodCA9IDEwMCArICdweCc7XG4gICAgZGl2LnN0eWxlLnBvc2l0aW9uID0gJ2Fic29sdXRlJztcbiAgICBkaXYuc3R5bGUudG9wID0gMDtcbiAgICBkaXYuc3R5bGUubGVmdCA9IDA7XG4gICAvL1xuICAgIGRpdi5zdHlsZS56SW5kZXggPSAyO1xuICAgXHRcbiAgIFx0LyoqXG4gICBcdCAqIFRoaXMgaXMgdGhlIGRvbSBlbGVtZW50IHRoYXQgd2lsbCBzaXQgb3ZlciB0aGUgcGl4aSBlbGVtZW50LiBUaGlzIGlzIHdoZXJlIHRoZSBkaXYgb3ZlcmxheXMgd2lsbCBnby5cbiAgIFx0ICogXG4gICBcdCAqIEB0eXBlIHtIVE1MRWxlbWVudH1cbiAgIFx0ICogQHByaXZhdGVcbiAgIFx0ICovXG4gICBcdHRoaXMuZGl2ID0gZGl2O1xuXG4gICBcdC8qKlxuICAgXHQgKiBBIHNpbXBsZSBwb29sIGZvciBzdG9yaW5nIGRpdnMuXG4gICBcdCAqIFxuICAgXHQgKiBAdHlwZSB7QXJyYXl9XG4gICBcdCAqIEBwcml2YXRlXG4gICBcdCAqL1xuIFx0dGhpcy5wb29sID0gW107XG5cbiBcdC8qKlxuIFx0ICogVGhpcyBpcyBhIHRpY2sgdXNlZCB0byBjaGVjayBpZiBhbiBvYmplY3QgaXMgbm8gbG9uZ2VyIGJlaW5nIHJlbmRlcmVkLlxuIFx0ICogXG4gXHQgKiBAdHlwZSB7TnVtYmVyfVxuIFx0ICogQHByaXZhdGVcbiBcdCAqL1xuICAgXHR0aGlzLnJlbmRlcklkID0gMDtcblxuICAgXHQvKipcbiAgIFx0ICogU2V0dGluZyB0aGlzIHRvIHRydWUgd2lsbCB2aXN1YWxseSBzaG93IHRoZSBkaXZzXG4gICBcdCAqIFxuICAgXHQgKiBAdHlwZSB7Qm9vbGVhbn1cbiAgIFx0ICovXG4gICBcdHRoaXMuZGVidWcgPSBmYWxzZTtcblxuICBcdC8qKlxuICAgICAqIFRoZSByZW5kZXJlciB0aGlzIGFjY2Vzc2liaWxpdHkgbWFuYWdlciB3b3JrcyBmb3IuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlN5c3RlbVJlbmRlcmVyfVxuICAgICAqL1xuICAgXHR0aGlzLnJlbmRlcmVyID0gcmVuZGVyZXI7XG5cbiAgIFx0LyoqXG4gICAgICogVGhlIGFycmF5IG9mIGN1cnJlbnRseSBhY3RpdmUgYWNjZXNzaWJsZSBpdGVtcy5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge0FycmF5fVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICBcdHRoaXMuY2hpbGRyZW4gPSBbXTtcbiAgIFx0XG4gICBcdC8qKlxuICAgICAqIHByZSBiaW5kIHRoZSBmdW5jdGlvbnMuLlxuICAgICAqL1xuICAgXHR0aGlzLl9vbktleURvd24gPSB0aGlzLl9vbktleURvd24uYmluZCh0aGlzKTtcbiAgIFx0dGhpcy5fb25Nb3VzZU1vdmUgPSB0aGlzLl9vbk1vdXNlTW92ZS5iaW5kKHRoaXMpO1xuICAgXHRcbiAgIFx0LyoqXG4gICAgICogc3RvcmVzIHRoZSBzdGF0ZSBvZiB0aGUgbWFuYWdlci4gSWYgdGhlcmUgYXJlIG5vIGFjY2Vzc2libGUgb2JqZWN0cyBvciB0aGUgbW91c2UgaXMgbW92aW5nIHRoZSB3aWxsIGJlIGZhbHNlLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7QXJyYXl9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgIFx0dGhpcy5pc0FjdGl2ZSA9IGZhbHNlO1xuXG5cbiAgIFx0Ly8gbGV0IGxpc3RlbiBmb3IgdGFiLi4gb25jZSBwcmVzc2VkIHdlIGNhbiBmaXJlIHVwIGFuZCBzaG93IHRoZSBhY2Nlc3NpYmlsaXR5IGxheWVyXG4gICBcdHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdrZXlkb3duJywgdGhpcy5fb25LZXlEb3duLCBmYWxzZSk7XG59XG5cblxuQWNjZXNzaWJpbGl0eU1hbmFnZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gQWNjZXNzaWJpbGl0eU1hbmFnZXI7XG5tb2R1bGUuZXhwb3J0cyA9IEFjY2Vzc2liaWxpdHlNYW5hZ2VyO1xuXG4vKipcbiAqIEFjdGl2YXRpbmcgd2lsbCBjYXVzZSB0aGUgQWNjZXNzaWJpbGl0eSBsYXllciB0byBiZSBzaG93bi4gVGhpcyBpcyBjYWxsZWQgd2hlbiBhIHVzZXIgcHJlc2VzIHRoZSB0YWIga2V5XG4gKiBAcHJpdmF0ZVxuICovXG5BY2Nlc3NpYmlsaXR5TWFuYWdlci5wcm90b3R5cGUuYWN0aXZhdGUgPSBmdW5jdGlvbigpXG57XG5cdGlmKHRoaXMuaXNBY3RpdmUpXG5cdHtcblx0XHRyZXR1cm47XG5cdH1cblxuXHR0aGlzLmlzQWN0aXZlID0gdHJ1ZTtcblxuXHR3aW5kb3cuZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignbW91c2Vtb3ZlJywgdGhpcy5fb25Nb3VzZU1vdmUsIHRydWUpO1xuXHR3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsIHRoaXMuX29uS2V5RG93biwgZmFsc2UpO1xuXG5cdHRoaXMucmVuZGVyZXIub24oJ3Bvc3RyZW5kZXInLCB0aGlzLnVwZGF0ZSwgdGhpcyk7XG5cblx0dGhpcy5yZW5kZXJlci52aWV3LnBhcmVudE5vZGUuYXBwZW5kQ2hpbGQodGhpcy5kaXYpO1x0XG59O1xuXG4vKipcbiAqIERlYWN0aXZhdGluZyB3aWxsIGNhdXNlIHRoZSBBY2Nlc3NpYmlsaXR5IGxheWVyIHRvIGJlIGhpZGRlbi4gVGhpcyBpcyBjYWxsZWQgd2hlbiBhIHVzZXIgbW92ZXMgdGhlIG1vdXNlXG4gKiBAcHJpdmF0ZVxuICovXG5BY2Nlc3NpYmlsaXR5TWFuYWdlci5wcm90b3R5cGUuZGVhY3RpdmF0ZSA9IGZ1bmN0aW9uKClcbntcblx0aWYoIXRoaXMuaXNBY3RpdmUpXG5cdHtcblx0XHRyZXR1cm47XG5cdH1cblxuXHR0aGlzLmlzQWN0aXZlID0gZmFsc2U7XG5cblx0d2luZG93LmRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21vdXNlbW92ZScsIHRoaXMuX29uTW91c2VNb3ZlKTtcblx0d2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLCB0aGlzLl9vbktleURvd24sIGZhbHNlKTtcblxuXHR0aGlzLnJlbmRlcmVyLm9mZigncG9zdHJlbmRlcicsIHRoaXMudXBkYXRlKTtcblxuXHR0aGlzLmRpdi5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHRoaXMuZGl2KTtcblxufTtcblxuLyoqXG4gKiBUaGlzIHJlY3Vyc2l2ZSBmdW5jdGlvbiB3aWxsIHJ1biB0aHJvdWdodCBoZSBzY2VuZSBncmFwaCBhbmQgYWRkIGFueSBuZXcgYWNjZXNzaWJsZSBvYmplY3RzIHRvIHRoZSBET00gbGF5ZXIuXG4gKiBAcGFyYW0gZWxlbWVudCB7UElYSS5Db250YWluZXJ8UElYSS5TcHJpdGV8UElYSS5leHRyYXMuVGlsaW5nU3ByaXRlfSB0aGUgRGlzcGxheU9iamVjdCB0byBjaGVjay5cbiAqIEBwcml2YXRlXG4gKi9cbkFjY2Vzc2liaWxpdHlNYW5hZ2VyLnByb3RvdHlwZS51cGRhdGVBY2Nlc3NpYmxlT2JqZWN0cyA9IGZ1bmN0aW9uKGRpc3BsYXlPYmplY3QpXG57XG5cdGlmKCFkaXNwbGF5T2JqZWN0LnZpc2libGUpXG5cdHtcblx0XHRyZXR1cm47XG5cdH1cblxuXHRpZihkaXNwbGF5T2JqZWN0LmFjY2Vzc2libGUgJiYgZGlzcGxheU9iamVjdC5pbnRlcmFjdGl2ZSlcblx0e1xuXHRcdGlmKCFkaXNwbGF5T2JqZWN0Ll9hY2Nlc3NpYmxlQWN0aXZlKVxuXHRcdHtcblx0XHRcdHRoaXMuYWRkQ2hpbGQoZGlzcGxheU9iamVjdCk7XG5cdFx0fVxuXHQgICBcdFxuXHQgICBcdGRpc3BsYXlPYmplY3QucmVuZGVySWQgPSB0aGlzLnJlbmRlcklkO1xuXHR9XG5cblx0dmFyIGNoaWxkcmVuID0gZGlzcGxheU9iamVjdC5jaGlsZHJlbjtcblxuXHRmb3IgKHZhciBpID0gY2hpbGRyZW4ubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcblx0XHRcblx0XHR0aGlzLnVwZGF0ZUFjY2Vzc2libGVPYmplY3RzKGNoaWxkcmVuW2ldKTtcblx0fVxufTtcblxuXG4vKipcbiAqIEJlZm9yZSBlYWNoIHJlbmRlciB0aGlzIGZ1bmN0aW9uIHdpbGwgZW5zdXJlIHRoYXQgYWxsIGRpdnMgYXJlIG1hcHBlZCBjb3JyZWN0bHkgdG8gdGhlaXIgRGlzcGxheU9iamVjdHNcbiAqIEBwcml2YXRlXG4gKi9cbkFjY2Vzc2liaWxpdHlNYW5hZ2VyLnByb3RvdHlwZS51cGRhdGUgPSBmdW5jdGlvbigpXG57XG5cblx0Ly8gdXBkYXRlIGNoaWxkcmVuLi4uXG5cdHRoaXMudXBkYXRlQWNjZXNzaWJsZU9iamVjdHModGhpcy5yZW5kZXJlci5fbGFzdE9iamVjdFJlbmRlcmVkKTtcblxuXHR2YXIgcmVjdCA9IHRoaXMucmVuZGVyZXIudmlldy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcblx0dmFyIHN4ID0gcmVjdC53aWR0aCAgLyB0aGlzLnJlbmRlcmVyLndpZHRoO1xuXHR2YXIgc3kgPSByZWN0LmhlaWdodCAvIHRoaXMucmVuZGVyZXIuaGVpZ2h0O1xuXG5cdHZhciBkaXYgPSB0aGlzLmRpdjtcblxuXHRkaXYuc3R5bGUubGVmdCA9IHJlY3QubGVmdCArICdweCc7XG5cdGRpdi5zdHlsZS50b3AgPSByZWN0LnRvcCArICdweCc7XG5cdGRpdi5zdHlsZS53aWR0aCA9IHRoaXMucmVuZGVyZXIud2lkdGggKyAncHgnO1xuXHRkaXYuc3R5bGUuaGVpZ2h0ID0gdGhpcy5yZW5kZXJlci5oZWlnaHQgKyAncHgnO1xuXG5cdGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5jaGlsZHJlbi5sZW5ndGg7IGkrKylcblx0e1xuXG5cdFx0dmFyIGNoaWxkID0gdGhpcy5jaGlsZHJlbltpXTtcblxuXHRcdGlmKGNoaWxkLnJlbmRlcklkICE9PSB0aGlzLnJlbmRlcklkKVxuXHRcdHtcblx0XHRcdGNoaWxkLl9hY2Nlc3NpYmxlQWN0aXZlID0gZmFsc2U7XG5cbiAgICAgICAgICAgIGNvcmUudXRpbHMucmVtb3ZlSXRlbXModGhpcy5jaGlsZHJlbiwgaSwgMSk7XG5cdFx0XHR0aGlzLmRpdi5yZW1vdmVDaGlsZCggY2hpbGQuX2FjY2Vzc2libGVEaXYgKTtcblx0XHRcdHRoaXMucG9vbC5wdXNoKGNoaWxkLl9hY2Nlc3NpYmxlRGl2KTtcblx0XHRcdGNoaWxkLl9hY2Nlc3NpYmxlRGl2ID0gbnVsbDtcblxuXHRcdFx0aS0tO1xuXG5cdFx0XHRpZih0aGlzLmNoaWxkcmVuLmxlbmd0aCA9PT0gMClcblx0XHRcdHtcblx0XHRcdFx0dGhpcy5kZWFjdGl2YXRlKCk7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdGVsc2Vcblx0XHR7XG5cdFx0XHQvLyBtYXAgZGl2IHRvIGRpc3BsYXkuLlxuXHRcdFx0ZGl2ID0gY2hpbGQuX2FjY2Vzc2libGVEaXY7XG5cdFx0XHR2YXIgaGl0QXJlYSA9IGNoaWxkLmhpdEFyZWE7XG5cdFx0XHR2YXIgd3QgPSBjaGlsZC53b3JsZFRyYW5zZm9ybTtcblxuXHRcdFx0aWYoY2hpbGQuaGl0QXJlYSlcblx0XHRcdHtcblx0XHRcdFx0ZGl2LnN0eWxlLmxlZnQgPSAoKHd0LnR4ICsgKGhpdEFyZWEueCAqIHd0LmEpKSAqIHN4KSArICdweCc7XG5cdFx0XHRcdGRpdi5zdHlsZS50b3AgPSAgKCh3dC50eSArIChoaXRBcmVhLnkgKiB3dC5kKSkgKiBzeSkgKyAgJ3B4JztcblxuXHRcdFx0XHRkaXYuc3R5bGUud2lkdGggPSAoaGl0QXJlYS53aWR0aCAqIHd0LmEgKiBzeCkgKyAncHgnO1xuXHRcdFx0XHRkaXYuc3R5bGUuaGVpZ2h0ID0gKGhpdEFyZWEuaGVpZ2h0ICogd3QuZCAqIHN5KSArICdweCc7XG5cdFx0XHRcblx0XHRcdH1cblx0XHRcdGVsc2Vcblx0XHRcdHtcblx0XHRcdFx0aGl0QXJlYSA9IGNoaWxkLmdldEJvdW5kcygpO1xuXG5cdFx0XHRcdHRoaXMuY2FwSGl0QXJlYShoaXRBcmVhKTtcblxuXHRcdFx0XHRkaXYuc3R5bGUubGVmdCA9IChoaXRBcmVhLnggKiBzeCkgKyAncHgnO1xuXHRcdFx0XHRkaXYuc3R5bGUudG9wID0gIChoaXRBcmVhLnkgKiBzeSkgKyAgJ3B4JztcblxuXHRcdFx0XHRkaXYuc3R5bGUud2lkdGggPSAoaGl0QXJlYS53aWR0aCAqIHN4KSArICdweCc7XG5cdFx0XHRcdGRpdi5zdHlsZS5oZWlnaHQgPSAoaGl0QXJlYS5oZWlnaHQgKiBzeSkgKyAncHgnO1xuXHRcdFx0fVx0XHRcblx0XHR9XG5cdH1cblxuXHQvLyBpbmNyZW1lbnQgdGhlIHJlbmRlciBpZC4uXG5cdHRoaXMucmVuZGVySWQrKztcbn07XG5cbkFjY2Vzc2liaWxpdHlNYW5hZ2VyLnByb3RvdHlwZS5jYXBIaXRBcmVhID0gZnVuY3Rpb24gKGhpdEFyZWEpXG57XG4gICAgaWYgKGhpdEFyZWEueCA8IDApXG4gICAge1xuICAgICAgICBoaXRBcmVhLndpZHRoICs9IGhpdEFyZWEueDtcbiAgICAgICAgaGl0QXJlYS54ID0gMDtcbiAgICB9XG5cbiAgICBpZiAoaGl0QXJlYS55IDwgMClcbiAgICB7XG4gICAgICAgIGhpdEFyZWEuaGVpZ2h0ICs9IGhpdEFyZWEueTtcbiAgICAgICAgaGl0QXJlYS55ID0gMDtcbiAgICB9XG5cbiAgICBpZiAoIGhpdEFyZWEueCArIGhpdEFyZWEud2lkdGggPiB0aGlzLnJlbmRlcmVyLndpZHRoIClcbiAgICB7XG4gICAgICAgIGhpdEFyZWEud2lkdGggPSB0aGlzLnJlbmRlcmVyLndpZHRoIC0gaGl0QXJlYS54O1xuICAgIH1cblxuICAgIGlmICggaGl0QXJlYS55ICsgaGl0QXJlYS5oZWlnaHQgPiB0aGlzLnJlbmRlcmVyLmhlaWdodCApXG4gICAge1xuICAgICAgICBoaXRBcmVhLmhlaWdodCA9IHRoaXMucmVuZGVyZXIuaGVpZ2h0IC0gaGl0QXJlYS55O1xuICAgIH1cbn07XG5cblxuLyoqXG4gKiBBZGRzIGEgRGlzcGxheU9iamVjdCB0byB0aGUgYWNjZXNzaWJpbGl0eSBtYW5hZ2VyXG4gKiBAcHJpdmF0ZVxuICovXG5BY2Nlc3NpYmlsaXR5TWFuYWdlci5wcm90b3R5cGUuYWRkQ2hpbGQgPSBmdW5jdGlvbihkaXNwbGF5T2JqZWN0KVxue1xuLy9cdHRoaXMuYWN0aXZhdGUoKTtcblx0XG5cdHZhciBkaXYgPSB0aGlzLnBvb2wucG9wKCk7XG5cblx0aWYoIWRpdilcblx0e1xuXHRcdGRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2J1dHRvbicpOyBcblxuXHQgICAgZGl2LnN0eWxlLndpZHRoID0gMTAwICsgJ3B4Jztcblx0ICAgIGRpdi5zdHlsZS5oZWlnaHQgPSAxMDAgKyAncHgnO1xuXHQgICAgZGl2LnN0eWxlLmJhY2tncm91bmRDb2xvciA9IHRoaXMuZGVidWcgPyAncmdiYSgyNTUsMCwwLDAuNSknIDogJ3RyYW5zcGFyZW50Jztcblx0ICAgIGRpdi5zdHlsZS5wb3NpdGlvbiA9ICdhYnNvbHV0ZSc7XG5cdCAgICBkaXYuc3R5bGUuekluZGV4ID0gMjtcblx0ICAgIGRpdi5zdHlsZS5ib3JkZXJTdHlsZSA9ICdub25lJztcblxuXHQgICAgXG5cdCAgICBkaXYuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCB0aGlzLl9vbkNsaWNrLmJpbmQodGhpcykpO1xuXHQgICAgZGl2LmFkZEV2ZW50TGlzdGVuZXIoJ2ZvY3VzJywgdGhpcy5fb25Gb2N1cy5iaW5kKHRoaXMpKTtcblx0ICAgIGRpdi5hZGRFdmVudExpc3RlbmVyKCdmb2N1c291dCcsIHRoaXMuX29uRm9jdXNPdXQuYmluZCh0aGlzKSk7XG5cdH1cblx0ICAgXHRcblxuXG5cblx0ZGl2LnRpdGxlID0gZGlzcGxheU9iamVjdC5hY2Nlc3NpYmxlVGl0bGUgfHwgJ2Rpc3BsYXlPYmplY3QgJyArIHRoaXMudGFiSW5kZXg7XG5cblx0Ly9cblx0XG5cdGRpc3BsYXlPYmplY3QuX2FjY2Vzc2libGVBY3RpdmUgPSB0cnVlO1xuXHRkaXNwbGF5T2JqZWN0Ll9hY2Nlc3NpYmxlRGl2ID0gZGl2O1xuXHRkaXYuZGlzcGxheU9iamVjdCA9IGRpc3BsYXlPYmplY3Q7XG5cblxuXHR0aGlzLmNoaWxkcmVuLnB1c2goZGlzcGxheU9iamVjdCk7XG5cdHRoaXMuZGl2LmFwcGVuZENoaWxkKCBkaXNwbGF5T2JqZWN0Ll9hY2Nlc3NpYmxlRGl2ICk7XG5cdGRpc3BsYXlPYmplY3QuX2FjY2Vzc2libGVEaXYudGFiSW5kZXggPSBkaXNwbGF5T2JqZWN0LnRhYkluZGV4O1xufTtcblxuXG4vKipcbiAqIE1hcHMgdGhlIGRpdiBidXR0b24gcHJlc3MgdG8gcGl4aSdzIEludGVyYWN0aW9uTWFuYWdlciAoY2xpY2spXG4gKiBAcHJpdmF0ZVxuICovXG5BY2Nlc3NpYmlsaXR5TWFuYWdlci5wcm90b3R5cGUuX29uQ2xpY2sgPSBmdW5jdGlvbihlKVxue1xuXHR2YXIgaW50ZXJhY3Rpb25NYW5hZ2VyID0gdGhpcy5yZW5kZXJlci5wbHVnaW5zLmludGVyYWN0aW9uO1xuXHRpbnRlcmFjdGlvbk1hbmFnZXIuZGlzcGF0Y2hFdmVudChlLnRhcmdldC5kaXNwbGF5T2JqZWN0LCAnY2xpY2snLCBpbnRlcmFjdGlvbk1hbmFnZXIuZXZlbnREYXRhKTtcbn07XG5cbi8qKlxuICogTWFwcyB0aGUgZGl2IGZvY3VzIGV2ZW50cyB0byBwaXhpcyBJbnRlcmFjdGlvbk1hbmFnZXIgKG1vdXNlb3ZlcilcbiAqIEBwcml2YXRlXG4gKi9cbkFjY2Vzc2liaWxpdHlNYW5hZ2VyLnByb3RvdHlwZS5fb25Gb2N1cyA9IGZ1bmN0aW9uKGUpXG57XG5cdHZhciBpbnRlcmFjdGlvbk1hbmFnZXIgPSB0aGlzLnJlbmRlcmVyLnBsdWdpbnMuaW50ZXJhY3Rpb247XG5cdGludGVyYWN0aW9uTWFuYWdlci5kaXNwYXRjaEV2ZW50KGUudGFyZ2V0LmRpc3BsYXlPYmplY3QsICdtb3VzZW92ZXInLCBpbnRlcmFjdGlvbk1hbmFnZXIuZXZlbnREYXRhKTtcbn07XG5cbi8qKlxuICogTWFwcyB0aGUgZGl2IGZvY3VzIGV2ZW50cyB0byBwaXhpcyBJbnRlcmFjdGlvbk1hbmFnZXIgKG1vdXNlb3V0KVxuICogQHByaXZhdGVcbiAqL1xuQWNjZXNzaWJpbGl0eU1hbmFnZXIucHJvdG90eXBlLl9vbkZvY3VzT3V0ID0gZnVuY3Rpb24oZSlcbntcblx0dmFyIGludGVyYWN0aW9uTWFuYWdlciA9IHRoaXMucmVuZGVyZXIucGx1Z2lucy5pbnRlcmFjdGlvbjtcblx0aW50ZXJhY3Rpb25NYW5hZ2VyLmRpc3BhdGNoRXZlbnQoZS50YXJnZXQuZGlzcGxheU9iamVjdCwgJ21vdXNlb3V0JywgaW50ZXJhY3Rpb25NYW5hZ2VyLmV2ZW50RGF0YSk7XG59O1xuXG4vKipcbiAqIElzIGNhbGxlZCB3aGVuIGEga2V5IGlzIHByZXNzZWRcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5BY2Nlc3NpYmlsaXR5TWFuYWdlci5wcm90b3R5cGUuX29uS2V5RG93biA9IGZ1bmN0aW9uKGUpXG57XG5cdGlmKGUua2V5Q29kZSAhPT0gOSlcblx0e1xuXHRcdHJldHVybjtcblx0fVxuXG5cdHRoaXMuYWN0aXZhdGUoKTtcbn07XG5cbi8qKlxuICogSXMgY2FsbGVkIHdoZW4gdGhlIG1vdXNlIG1vdmVzIGFjcm9zcyB0aGUgcmVuZGVyZXIgZWxlbWVudFxuICpcbiAqIEBwcml2YXRlXG4gKi9cbkFjY2Vzc2liaWxpdHlNYW5hZ2VyLnByb3RvdHlwZS5fb25Nb3VzZU1vdmUgPSBmdW5jdGlvbigpXG57XG5cdHRoaXMuZGVhY3RpdmF0ZSgpO1xufTtcblxuXG4vKipcbiAqIERlc3Ryb3lzIHRoZSBhY2Nlc3NpYmlsaXR5IG1hbmFnZXJcbiAqXG4gKi9cbkFjY2Vzc2liaWxpdHlNYW5hZ2VyLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKCkgXG57XG5cdHRoaXMuZGl2ID0gbnVsbDtcblxuXHRmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuY2hpbGRyZW4ubGVuZ3RoOyBpKyspXG5cdHtcblx0XHR0aGlzLmNoaWxkcmVuW2ldLmRpdiA9IG51bGw7XG5cdH1cblxuXHRcblx0d2luZG93LmRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21vdXNlbW92ZScsIHRoaXMuX29uTW91c2VNb3ZlKTtcblx0d2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLCB0aGlzLl9vbktleURvd24pO1xuXHRcdFxuXHR0aGlzLnBvb2wgPSBudWxsO1xuXHR0aGlzLmNoaWxkcmVuID0gbnVsbDtcblx0dGhpcy5yZW5kZXJlciA9IG51bGw7XG5cbn07XG5cbmNvcmUuV2ViR0xSZW5kZXJlci5yZWdpc3RlclBsdWdpbignYWNjZXNzaWJpbGl0eScsIEFjY2Vzc2liaWxpdHlNYW5hZ2VyKTtcbmNvcmUuQ2FudmFzUmVuZGVyZXIucmVnaXN0ZXJQbHVnaW4oJ2FjY2Vzc2liaWxpdHknLCBBY2Nlc3NpYmlsaXR5TWFuYWdlcik7XG5cbiIsIi8qKlxuICogRGVmYXVsdCBwcm9wZXJ0eSB2YWx1ZXMgb2YgYWNjZXNzaWJsZSBvYmplY3RzXG4gKiB1c2VkIGJ5IHtAbGluayBQSVhJLmFjY2Vzc2liaWxpdHkuQWNjZXNzaWJpbGl0eU1hbmFnZXJ9LlxuICpcbiAqIEBtaXhpblxuICogQG1lbWJlcm9mIFBJWElcbiAqIEBleGFtcGxlXG4gKiAgICAgIGZ1bmN0aW9uIE15T2JqZWN0KCkge31cbiAqXG4gKiAgICAgIE9iamVjdC5hc3NpZ24oXG4gKiAgICAgICAgICBNeU9iamVjdC5wcm90b3R5cGUsXG4gKiAgICAgICAgICBQSVhJLmFjY2Vzc2liaWxpdHkuYWNjZXNzaWJsZVRhcmdldFxuICogICAgICApO1xuICovXG52YXIgYWNjZXNzaWJsZVRhcmdldCA9IHtcbiAgICBcbiAgICAvKipcbiAgICAgKiBAdG9kbyBOZWVkcyBkb2NzLlxuICAgICAqL1xuICAgIGFjY2Vzc2libGU6ZmFsc2UsXG5cbiAgICAvKipcbiAgICAgKiBAdG9kbyBOZWVkcyBkb2NzLlxuICAgICAqL1xuICAgIGFjY2Vzc2libGVUaXRsZTpudWxsLFxuXG4gICAgLyoqXG4gICAgICogQHRvZG8gTmVlZHMgZG9jcy5cbiAgICAgKi9cbiAgICB0YWJJbmRleDowLFxuXG4gICAgLyoqXG4gICAgICogQHRvZG8gTmVlZHMgZG9jcy5cbiAgICAgKi9cbiAgICBfYWNjZXNzaWJsZUFjdGl2ZTpmYWxzZSxcblxuICAgIC8qKlxuICAgICAqIEB0b2RvIE5lZWRzIGRvY3MuXG4gICAgICovXG4gICAgX2FjY2Vzc2libGVEaXY6ZmFsc2VcblxufTtcblxubW9kdWxlLmV4cG9ydHMgPSBhY2Nlc3NpYmxlVGFyZ2V0O1xuIiwiLyoqXG4gKiBAZmlsZSAgICAgICAgTWFpbiBleHBvcnQgb2YgdGhlIFBJWEkgYWNjZXNzaWJpbGl0eSBsaWJyYXJ5XG4gKiBAYXV0aG9yICAgICAgTWF0IEdyb3ZlcyA8bWF0QGdvb2Rib3lkaWdpdGFsLmNvbT5cbiAqIEBjb3B5cmlnaHQgICAyMDEzLTIwMTUgR29vZEJveURpZ2l0YWxcbiAqIEBsaWNlbnNlICAgICB7QGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL3BpeGlqcy9waXhpLmpzL2Jsb2IvbWFzdGVyL0xJQ0VOU0V8TUlUIExpY2Vuc2V9XG4gKi9cblxuLyoqXG4gKiBAbmFtZXNwYWNlIFBJWEkuaW50ZXJhY3Rpb25cbiAqL1xubW9kdWxlLmV4cG9ydHMgPSB7XG4gICAgYWNjZXNzaWJsZVRhcmdldDogICAgIHJlcXVpcmUoJy4vYWNjZXNzaWJsZVRhcmdldCcpLFxuICAgIEFjY2Vzc2liaWxpdHlNYW5hZ2VyOiByZXF1aXJlKCcuL0FjY2Vzc2liaWxpdHlNYW5hZ2VyJylcbn07XG4iLCIvKipcbiAqIENvbnN0YW50IHZhbHVlcyB1c2VkIGluIHBpeGlcbiAqXG4gKiBAbGVuZHMgUElYSVxuICovXG52YXIgQ09OU1QgPSB7XG4gICAgLyoqXG4gICAgICogU3RyaW5nIG9mIHRoZSBjdXJyZW50IFBJWEkgdmVyc2lvblxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBjb25zdGFudFxuICAgICAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBWRVJTSU9OXG4gICAgICovXG4gICAgVkVSU0lPTjogcmVxdWlyZSgnLi4vLi4vcGFja2FnZS5qc29uJykudmVyc2lvbixcblxuICAgIC8qKlxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBQSV8yIC0gVHdvIFBpXG4gICAgICogQGNvbnN0YW50XG4gICAgICogQHN0YXRpY1xuICAgICAqL1xuICAgIFBJXzI6IE1hdGguUEkgKiAyLFxuXG4gICAgLyoqXG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IFJBRF9UT19ERUcgLSBDb25zdGFudCBjb252ZXJzaW9uIGZhY3RvciBmb3IgY29udmVydGluZyByYWRpYW5zIHRvIGRlZ3JlZXNcbiAgICAgKiBAY29uc3RhbnRcbiAgICAgKiBAc3RhdGljXG4gICAgICovXG4gICAgUkFEX1RPX0RFRzogMTgwIC8gTWF0aC5QSSxcblxuICAgIC8qKlxuICAgICAqIEBwcm9wZXJ0eSB7TnVtYmVyfSBERUdfVE9fUkFEIC0gQ29uc3RhbnQgY29udmVyc2lvbiBmYWN0b3IgZm9yIGNvbnZlcnRpbmcgZGVncmVlcyB0byByYWRpYW5zXG4gICAgICogQGNvbnN0YW50XG4gICAgICogQHN0YXRpY1xuICAgICAqL1xuICAgIERFR19UT19SQUQ6IE1hdGguUEkgLyAxODAsXG5cbiAgICAvKipcbiAgICAgKiBUYXJnZXQgZnJhbWVzIHBlciBtaWxsaXNlY29uZC5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAY29uc3RhbnRcbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gVEFSR0VUX0ZQTVM9MC4wNlxuICAgICAqL1xuICAgIFRBUkdFVF9GUE1TOiAwLjA2LFxuXG4gICAgLyoqXG4gICAgICogQ29uc3RhbnQgdG8gaWRlbnRpZnkgdGhlIFJlbmRlcmVyIFR5cGUuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQGNvbnN0YW50XG4gICAgICogQHByb3BlcnR5IHtvYmplY3R9IFJFTkRFUkVSX1RZUEVcbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gUkVOREVSRVJfVFlQRS5VTktOT1dOXG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IFJFTkRFUkVSX1RZUEUuV0VCR0xcbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gUkVOREVSRVJfVFlQRS5DQU5WQVNcbiAgICAgKi9cbiAgICBSRU5ERVJFUl9UWVBFOiB7XG4gICAgICAgIFVOS05PV046ICAgIDAsXG4gICAgICAgIFdFQkdMOiAgICAgIDEsXG4gICAgICAgIENBTlZBUzogICAgIDJcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVmFyaW91cyBibGVuZCBtb2RlcyBzdXBwb3J0ZWQgYnkgUElYSS4gSU1QT1JUQU5UIC0gVGhlIFdlYkdMIHJlbmRlcmVyIG9ubHkgc3VwcG9ydHNcbiAgICAgKiB0aGUgTk9STUFMLCBBREQsIE1VTFRJUExZIGFuZCBTQ1JFRU4gYmxlbmQgbW9kZXMuIEFueXRoaW5nIGVsc2Ugd2lsbCBzaWxlbnRseSBhY3QgbGlrZVxuICAgICAqIE5PUk1BTC5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAY29uc3RhbnRcbiAgICAgKiBAcHJvcGVydHkge29iamVjdH0gQkxFTkRfTU9ERVNcbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gQkxFTkRfTU9ERVMuTk9STUFMXG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IEJMRU5EX01PREVTLkFERFxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBCTEVORF9NT0RFUy5NVUxUSVBMWVxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBCTEVORF9NT0RFUy5TQ1JFRU5cbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gQkxFTkRfTU9ERVMuT1ZFUkxBWVxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBCTEVORF9NT0RFUy5EQVJLRU5cbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gQkxFTkRfTU9ERVMuTElHSFRFTlxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBCTEVORF9NT0RFUy5DT0xPUl9ET0RHRVxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBCTEVORF9NT0RFUy5DT0xPUl9CVVJOXG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IEJMRU5EX01PREVTLkhBUkRfTElHSFRcbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gQkxFTkRfTU9ERVMuU09GVF9MSUdIVFxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBCTEVORF9NT0RFUy5ESUZGRVJFTkNFXG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IEJMRU5EX01PREVTLkVYQ0xVU0lPTlxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBCTEVORF9NT0RFUy5IVUVcbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gQkxFTkRfTU9ERVMuU0FUVVJBVElPTlxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBCTEVORF9NT0RFUy5DT0xPUlxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBCTEVORF9NT0RFUy5MVU1JTk9TSVRZXG4gICAgICovXG4gICAgQkxFTkRfTU9ERVM6IHtcbiAgICAgICAgTk9STUFMOiAgICAgICAgIDAsXG4gICAgICAgIEFERDogICAgICAgICAgICAxLFxuICAgICAgICBNVUxUSVBMWTogICAgICAgMixcbiAgICAgICAgU0NSRUVOOiAgICAgICAgIDMsXG4gICAgICAgIE9WRVJMQVk6ICAgICAgICA0LFxuICAgICAgICBEQVJLRU46ICAgICAgICAgNSxcbiAgICAgICAgTElHSFRFTjogICAgICAgIDYsXG4gICAgICAgIENPTE9SX0RPREdFOiAgICA3LFxuICAgICAgICBDT0xPUl9CVVJOOiAgICAgOCxcbiAgICAgICAgSEFSRF9MSUdIVDogICAgIDksXG4gICAgICAgIFNPRlRfTElHSFQ6ICAgICAxMCxcbiAgICAgICAgRElGRkVSRU5DRTogICAgIDExLFxuICAgICAgICBFWENMVVNJT046ICAgICAgMTIsXG4gICAgICAgIEhVRTogICAgICAgICAgICAxMyxcbiAgICAgICAgU0FUVVJBVElPTjogICAgIDE0LFxuICAgICAgICBDT0xPUjogICAgICAgICAgMTUsXG4gICAgICAgIExVTUlOT1NJVFk6ICAgICAxNlxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBWYXJpb3VzIHdlYmdsIGRyYXcgbW9kZXMuIFRoZXNlIGNhbiBiZSB1c2VkIHRvIHNwZWNpZnkgd2hpY2ggR0wgZHJhd01vZGUgdG8gdXNlXG4gICAgICogdW5kZXIgY2VydGFpbiBzaXR1YXRpb25zIGFuZCByZW5kZXJlcnMuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQGNvbnN0YW50XG4gICAgICogQHByb3BlcnR5IHtvYmplY3R9IERSQVdfTU9ERVNcbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gRFJBV19NT0RFUy5QT0lOVFNcbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gRFJBV19NT0RFUy5MSU5FU1xuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBEUkFXX01PREVTLkxJTkVfTE9PUFxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBEUkFXX01PREVTLkxJTkVfU1RSSVBcbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gRFJBV19NT0RFUy5UUklBTkdMRVNcbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gRFJBV19NT0RFUy5UUklBTkdMRV9TVFJJUFxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBEUkFXX01PREVTLlRSSUFOR0xFX0ZBTlxuICAgICAqL1xuICAgIERSQVdfTU9ERVM6IHtcbiAgICAgICAgUE9JTlRTOiAgICAgICAgIDAsXG4gICAgICAgIExJTkVTOiAgICAgICAgICAxLFxuICAgICAgICBMSU5FX0xPT1A6ICAgICAgMixcbiAgICAgICAgTElORV9TVFJJUDogICAgIDMsXG4gICAgICAgIFRSSUFOR0xFUzogICAgICA0LFxuICAgICAgICBUUklBTkdMRV9TVFJJUDogNSxcbiAgICAgICAgVFJJQU5HTEVfRkFOOiAgIDZcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVGhlIHNjYWxlIG1vZGVzIHRoYXQgYXJlIHN1cHBvcnRlZCBieSBwaXhpLlxuICAgICAqXG4gICAgICogVGhlIERFRkFVTFQgc2NhbGUgbW9kZSBhZmZlY3RzIHRoZSBkZWZhdWx0IHNjYWxpbmcgbW9kZSBvZiBmdXR1cmUgb3BlcmF0aW9ucy5cbiAgICAgKiBJdCBjYW4gYmUgcmUtYXNzaWduZWQgdG8gZWl0aGVyIExJTkVBUiBvciBORUFSRVNULCBkZXBlbmRpbmcgdXBvbiBzdWl0YWJpbGl0eS5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAY29uc3RhbnRcbiAgICAgKiBAcHJvcGVydHkge29iamVjdH0gU0NBTEVfTU9ERVNcbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gU0NBTEVfTU9ERVMuREVGQVVMVD1MSU5FQVJcbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gU0NBTEVfTU9ERVMuTElORUFSIFNtb290aCBzY2FsaW5nXG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IFNDQUxFX01PREVTLk5FQVJFU1QgUGl4ZWxhdGluZyBzY2FsaW5nXG4gICAgICovXG4gICAgU0NBTEVfTU9ERVM6IHtcbiAgICAgICAgREVGQVVMVDogICAgMCxcbiAgICAgICAgTElORUFSOiAgICAgMCxcbiAgICAgICAgTkVBUkVTVDogICAgMVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBUaGUgcHJlZml4IHRoYXQgZGVub3RlcyBhIFVSTCBpcyBmb3IgYSByZXRpbmEgYXNzZXRcbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAY29uc3RhbnRcbiAgICAgKiBAcHJvcGVydHkge3N0cmluZ30gUkVUSU5BX1BSRUZJWFxuICAgICAqL1xuICAgIC8vZXhhbXBsZTogJ0AyeCcsXG4gICAgUkVUSU5BX1BSRUZJWDogL0AoLispeC8sXG5cbiAgICBSRVNPTFVUSU9OOjEsXG5cbiAgICBGSUxURVJfUkVTT0xVVElPTjoxLFxuXG4gICAgLyoqXG4gICAgICogVGhlIGRlZmF1bHQgcmVuZGVyIG9wdGlvbnMgaWYgbm9uZSBhcmUgc3VwcGxpZWQgdG8ge0BsaW5rIFBJWEkuV2ViR0xSZW5kZXJlcn1cbiAgICAgKiBvciB7QGxpbmsgUElYSS5DYW52YXNSZW5kZXJlcn0uXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQGNvbnN0YW50XG4gICAgICogQHByb3BlcnR5IHtvYmplY3R9IERFRkFVTFRfUkVOREVSX09QVElPTlNcbiAgICAgKiBAcHJvcGVydHkge0hUTUxDYW52YXNFbGVtZW50fSBERUZBVUxUX1JFTkRFUl9PUFRJT05TLnZpZXc9bnVsbFxuICAgICAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gREVGQVVMVF9SRU5ERVJfT1BUSU9OUy50cmFuc3BhcmVudD1mYWxzZVxuICAgICAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gREVGQVVMVF9SRU5ERVJfT1BUSU9OUy5hbnRpYWxpYXM9ZmFsc2VcbiAgICAgKiBAcHJvcGVydHkge2Jvb2xlYW59IERFRkFVTFRfUkVOREVSX09QVElPTlMuZm9yY2VGWEFBPWZhbHNlXG4gICAgICogQHByb3BlcnR5IHtib29sZWFufSBERUZBVUxUX1JFTkRFUl9PUFRJT05TLnByZXNlcnZlRHJhd2luZ0J1ZmZlcj1mYWxzZVxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBERUZBVUxUX1JFTkRFUl9PUFRJT05TLnJlc29sdXRpb249MVxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBERUZBVUxUX1JFTkRFUl9PUFRJT05TLmJhY2tncm91bmRDb2xvcj0weDAwMDAwMFxuICAgICAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gREVGQVVMVF9SRU5ERVJfT1BUSU9OUy5jbGVhckJlZm9yZVJlbmRlcj10cnVlXG4gICAgICogQHByb3BlcnR5IHtib29sZWFufSBERUZBVUxUX1JFTkRFUl9PUFRJT05TLmF1dG9SZXNpemU9ZmFsc2VcbiAgICAgKi9cbiAgICBERUZBVUxUX1JFTkRFUl9PUFRJT05TOiB7XG4gICAgICAgIHZpZXc6IG51bGwsXG4gICAgICAgIHJlc29sdXRpb246IDEsXG4gICAgICAgIGFudGlhbGlhczogZmFsc2UsXG4gICAgICAgIGZvcmNlRlhBQTogZmFsc2UsXG4gICAgICAgIGF1dG9SZXNpemU6IGZhbHNlLFxuICAgICAgICB0cmFuc3BhcmVudDogZmFsc2UsXG4gICAgICAgIGJhY2tncm91bmRDb2xvcjogMHgwMDAwMDAsXG4gICAgICAgIGNsZWFyQmVmb3JlUmVuZGVyOiB0cnVlLFxuICAgICAgICBwcmVzZXJ2ZURyYXdpbmdCdWZmZXI6IGZhbHNlLFxuICAgICAgICByb3VuZFBpeGVsczogZmFsc2VcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQ29uc3RhbnRzIHRoYXQgaWRlbnRpZnkgc2hhcGVzLCBtYWlubHkgdG8gcHJldmVudCBgaW5zdGFuY2VvZmAgY2FsbHMuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQGNvbnN0YW50XG4gICAgICogQHByb3BlcnR5IHtvYmplY3R9IFNIQVBFU1xuICAgICAqIEBwcm9wZXJ0eSB7b2JqZWN0fSBTSEFQRVMuUE9MWT0wXG4gICAgICogQHByb3BlcnR5IHtvYmplY3R9IFNIQVBFUy5SRUNUPTFcbiAgICAgKiBAcHJvcGVydHkge29iamVjdH0gU0hBUEVTLkNJUkM9MlxuICAgICAqIEBwcm9wZXJ0eSB7b2JqZWN0fSBTSEFQRVMuRUxJUD0zXG4gICAgICogQHByb3BlcnR5IHtvYmplY3R9IFNIQVBFUy5SUkVDPTRcbiAgICAgKi9cbiAgICBTSEFQRVM6IHtcbiAgICAgICAgUE9MWTogMCxcbiAgICAgICAgUkVDVDogMSxcbiAgICAgICAgQ0lSQzogMixcbiAgICAgICAgRUxJUDogMyxcbiAgICAgICAgUlJFQzogNFxuICAgIH0sXG5cbiAgICAvLyBUT0RPOiBtYXliZSBjaGFuZ2UgdG8gU1BSSVRFLkJBVENIX1NJWkU6IDIwMDBcbiAgICAvLyBUT0RPOiBtYXliZSBhZGQgUEFSVElDTEUuQkFUQ0hfU0laRTogMTUwMDBcbiAgICBTUFJJVEVfQkFUQ0hfU0laRTogMjAwMCAvL25pY2UgYmFsYW5jZSBiZXR3ZWVuIG1vYmlsZSBhbmQgZGVza3RvcCBtYWNoaW5lc1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBDT05TVDtcbiIsInZhciBtYXRoID0gcmVxdWlyZSgnLi4vbWF0aCcpLFxuICAgIHV0aWxzID0gcmVxdWlyZSgnLi4vdXRpbHMnKSxcbiAgICBEaXNwbGF5T2JqZWN0ID0gcmVxdWlyZSgnLi9EaXNwbGF5T2JqZWN0JyksXG4gICAgUmVuZGVyVGV4dHVyZSA9IHJlcXVpcmUoJy4uL3RleHR1cmVzL1JlbmRlclRleHR1cmUnKSxcbiAgICBfdGVtcE1hdHJpeCA9IG5ldyBtYXRoLk1hdHJpeCgpO1xuXG4vKipcbiAqIEEgQ29udGFpbmVyIHJlcHJlc2VudHMgYSBjb2xsZWN0aW9uIG9mIGRpc3BsYXkgb2JqZWN0cy5cbiAqIEl0IGlzIHRoZSBiYXNlIGNsYXNzIG9mIGFsbCBkaXNwbGF5IG9iamVjdHMgdGhhdCBhY3QgYXMgYSBjb250YWluZXIgZm9yIG90aGVyIG9iamVjdHMuXG4gKlxuICpgYGBqc1xuICogdmFyIGNvbnRhaW5lciA9IG5ldyBQSVhJLkNvbnRhaW5lcigpO1xuICogY29udGFpbmVyLmFkZENoaWxkKHNwcml0ZSk7XG4gKiBgYGBcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5EaXNwbGF5T2JqZWN0XG4gKiBAbWVtYmVyb2YgUElYSVxuICovXG5mdW5jdGlvbiBDb250YWluZXIoKVxue1xuICAgIERpc3BsYXlPYmplY3QuY2FsbCh0aGlzKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBhcnJheSBvZiBjaGlsZHJlbiBvZiB0aGlzIGNvbnRhaW5lci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuRGlzcGxheU9iamVjdFtdfVxuICAgICAqIEByZWFkb25seVxuICAgICAqL1xuICAgIHRoaXMuY2hpbGRyZW4gPSBbXTtcbn1cblxuLy8gY29uc3RydWN0b3JcbkNvbnRhaW5lci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKERpc3BsYXlPYmplY3QucHJvdG90eXBlKTtcbkNvbnRhaW5lci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBDb250YWluZXI7XG5tb2R1bGUuZXhwb3J0cyA9IENvbnRhaW5lcjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoQ29udGFpbmVyLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFRoZSB3aWR0aCBvZiB0aGUgQ29udGFpbmVyLCBzZXR0aW5nIHRoaXMgd2lsbCBhY3R1YWxseSBtb2RpZnkgdGhlIHNjYWxlIHRvIGFjaGlldmUgdGhlIHZhbHVlIHNldFxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLkNvbnRhaW5lciNcbiAgICAgKi9cbiAgICB3aWR0aDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnNjYWxlLnggKiB0aGlzLmdldExvY2FsQm91bmRzKCkud2lkdGg7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG5cbiAgICAgICAgICAgIHZhciB3aWR0aCA9IHRoaXMuZ2V0TG9jYWxCb3VuZHMoKS53aWR0aDtcblxuICAgICAgICAgICAgaWYgKHdpZHRoICE9PSAwKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHRoaXMuc2NhbGUueCA9IHZhbHVlIC8gd2lkdGg7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdGhpcy5zY2FsZS54ID0gMTtcbiAgICAgICAgICAgIH1cblxuXG4gICAgICAgICAgICB0aGlzLl93aWR0aCA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFRoZSBoZWlnaHQgb2YgdGhlIENvbnRhaW5lciwgc2V0dGluZyB0aGlzIHdpbGwgYWN0dWFsbHkgbW9kaWZ5IHRoZSBzY2FsZSB0byBhY2hpZXZlIHRoZSB2YWx1ZSBzZXRcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5Db250YWluZXIjXG4gICAgICovXG4gICAgaGVpZ2h0OiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuICB0aGlzLnNjYWxlLnkgKiB0aGlzLmdldExvY2FsQm91bmRzKCkuaGVpZ2h0O1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuXG4gICAgICAgICAgICB2YXIgaGVpZ2h0ID0gdGhpcy5nZXRMb2NhbEJvdW5kcygpLmhlaWdodDtcblxuICAgICAgICAgICAgaWYgKGhlaWdodCAhPT0gMClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNjYWxlLnkgPSB2YWx1ZSAvIGhlaWdodCA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdGhpcy5zY2FsZS55ID0gMTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5faGVpZ2h0ID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG59KTtcblxuLyoqXG4gKiBPdmVycmlkYWJsZSBtZXRob2QgdGhhdCBjYW4gYmUgdXNlZCBieSBDb250YWluZXIgc3ViY2xhc3NlcyB3aGVuZXZlciB0aGUgY2hpbGRyZW4gYXJyYXkgaXMgbW9kaWZpZWRcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5Db250YWluZXIucHJvdG90eXBlLm9uQ2hpbGRyZW5DaGFuZ2UgPSBmdW5jdGlvbiAoKSB7fTtcblxuLyoqXG4gKiBBZGRzIGEgY2hpbGQgdG8gdGhlIGNvbnRhaW5lci5cbiAqIFxuICogWW91IGNhbiBhbHNvIGFkZCBtdWx0cGxlIGl0ZW1zIGxpa2Ugc286IG15Q29udGFpbmVyLmFkZENoaWxkKHRoaW5rT25lLCB0aGluZ1R3bywgdGhpbmdUaHJlZSlcbiAqIEBwYXJhbSBjaGlsZCB7UElYSS5EaXNwbGF5T2JqZWN0fSBUaGUgRGlzcGxheU9iamVjdCB0byBhZGQgdG8gdGhlIGNvbnRhaW5lclxuICogQHJldHVybiB7UElYSS5EaXNwbGF5T2JqZWN0fSBUaGUgY2hpbGQgdGhhdCB3YXMgYWRkZWQuXG4gKi9cbkNvbnRhaW5lci5wcm90b3R5cGUuYWRkQ2hpbGQgPSBmdW5jdGlvbiAoY2hpbGQpXG57IFxuICAgIHZhciBhcmd1bWVudHNMZW5ndGggPSBhcmd1bWVudHMubGVuZ3RoO1xuXG4gICAgLy8gaWYgdGhlcmUgaXMgb25seSBvbmUgYXJndW1lbnQgd2UgY2FuIGJ5cGFzcyBsb29waW5nIHRocm91Z2ggdGhlIHRoZW1cbiAgICBpZihhcmd1bWVudHNMZW5ndGggPiAxKVxuICAgIHtcbiAgICAgICAgLy8gbG9vcCB0aHJvdWdoIHRoZSBhcmd1bWVudHMgcHJvcGVydHkgYW5kIGFkZCBhbGwgY2hpbGRyZW5cbiAgICAgICAgLy8gdXNlIGl0IHRoZSByaWdodCB3YXkgKC5sZW5ndGggYW5kIFtpXSkgc28gdGhhdCB0aGlzIGZ1bmN0aW9uIGNhbiBzdGlsbCBiZSBvcHRpbWlzZWQgYnkgSlMgcnVudGltZXNcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcmd1bWVudHNMZW5ndGg7IGkrKylcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5hZGRDaGlsZCggYXJndW1lbnRzW2ldICk7XG4gICAgICAgIH1cbiAgICB9ICAgICBcbiAgICBlbHNlXG4gICAge1xuICAgICAgICAvLyBpZiB0aGUgY2hpbGQgaGFzIGEgcGFyZW50IHRoZW4gbGV0cyByZW1vdmUgaXQgYXMgUGl4aSBvYmplY3RzIGNhbiBvbmx5IGV4aXN0IGluIG9uZSBwbGFjZVxuICAgICAgICBpZiAoY2hpbGQucGFyZW50KVxuICAgICAgICB7XG4gICAgICAgICAgICBjaGlsZC5wYXJlbnQucmVtb3ZlQ2hpbGQoY2hpbGQpO1xuICAgICAgICB9XG5cbiAgICAgICAgY2hpbGQucGFyZW50ID0gdGhpcztcbiAgICAgICAgXG4gICAgICAgIHRoaXMuY2hpbGRyZW4ucHVzaChjaGlsZCk7XG5cbiAgICAgICAgLy8gVE9ETyAtIGxldHMgZWl0aGVyIGRvIGFsbCBjYWxsYmFja3Mgb3IgYWxsIGV2ZW50cy4uIG5vdCBib3RoIVxuICAgICAgICB0aGlzLm9uQ2hpbGRyZW5DaGFuZ2UodGhpcy5jaGlsZHJlbi5sZW5ndGgtMSk7XG4gICAgICAgIGNoaWxkLmVtaXQoJ2FkZGVkJywgdGhpcyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGNoaWxkO1xufTtcblxuLyoqXG4gKiBBZGRzIGEgY2hpbGQgdG8gdGhlIGNvbnRhaW5lciBhdCBhIHNwZWNpZmllZCBpbmRleC4gSWYgdGhlIGluZGV4IGlzIG91dCBvZiBib3VuZHMgYW4gZXJyb3Igd2lsbCBiZSB0aHJvd25cbiAqXG4gKiBAcGFyYW0gY2hpbGQge1BJWEkuRGlzcGxheU9iamVjdH0gVGhlIGNoaWxkIHRvIGFkZFxuICogQHBhcmFtIGluZGV4IHtudW1iZXJ9IFRoZSBpbmRleCB0byBwbGFjZSB0aGUgY2hpbGQgaW5cbiAqIEByZXR1cm4ge1BJWEkuRGlzcGxheU9iamVjdH0gVGhlIGNoaWxkIHRoYXQgd2FzIGFkZGVkLlxuICovXG5Db250YWluZXIucHJvdG90eXBlLmFkZENoaWxkQXQgPSBmdW5jdGlvbiAoY2hpbGQsIGluZGV4KVxue1xuICAgIGlmIChpbmRleCA+PSAwICYmIGluZGV4IDw9IHRoaXMuY2hpbGRyZW4ubGVuZ3RoKVxuICAgIHtcbiAgICAgICAgaWYgKGNoaWxkLnBhcmVudClcbiAgICAgICAge1xuICAgICAgICAgICAgY2hpbGQucGFyZW50LnJlbW92ZUNoaWxkKGNoaWxkKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNoaWxkLnBhcmVudCA9IHRoaXM7XG5cbiAgICAgICAgdGhpcy5jaGlsZHJlbi5zcGxpY2UoaW5kZXgsIDAsIGNoaWxkKTtcblxuICAgICAgICAvLyBUT0RPIC0gbGV0cyBlaXRoZXIgZG8gYWxsIGNhbGxiYWNrcyBvciBhbGwgZXZlbnRzLi4gbm90IGJvdGghXG4gICAgICAgIHRoaXMub25DaGlsZHJlbkNoYW5nZShpbmRleCk7XG4gICAgICAgIGNoaWxkLmVtaXQoJ2FkZGVkJywgdGhpcyk7XG5cbiAgICAgICAgcmV0dXJuIGNoaWxkO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoY2hpbGQgKyAnYWRkQ2hpbGRBdDogVGhlIGluZGV4ICcrIGluZGV4ICsnIHN1cHBsaWVkIGlzIG91dCBvZiBib3VuZHMgJyArIHRoaXMuY2hpbGRyZW4ubGVuZ3RoKTtcbiAgICB9XG59O1xuXG4vKipcbiAqIFN3YXBzIHRoZSBwb3NpdGlvbiBvZiAyIERpc3BsYXkgT2JqZWN0cyB3aXRoaW4gdGhpcyBjb250YWluZXIuXG4gKlxuICogQHBhcmFtIGNoaWxkIHtQSVhJLkRpc3BsYXlPYmplY3R9XG4gKiBAcGFyYW0gY2hpbGQyIHtQSVhJLkRpc3BsYXlPYmplY3R9XG4gKi9cbkNvbnRhaW5lci5wcm90b3R5cGUuc3dhcENoaWxkcmVuID0gZnVuY3Rpb24gKGNoaWxkLCBjaGlsZDIpXG57XG4gICAgaWYgKGNoaWxkID09PSBjaGlsZDIpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFyIGluZGV4MSA9IHRoaXMuZ2V0Q2hpbGRJbmRleChjaGlsZCk7XG4gICAgdmFyIGluZGV4MiA9IHRoaXMuZ2V0Q2hpbGRJbmRleChjaGlsZDIpO1xuXG4gICAgaWYgKGluZGV4MSA8IDAgfHwgaW5kZXgyIDwgMClcbiAgICB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignc3dhcENoaWxkcmVuOiBCb3RoIHRoZSBzdXBwbGllZCBEaXNwbGF5T2JqZWN0cyBtdXN0IGJlIGNoaWxkcmVuIG9mIHRoZSBjYWxsZXIuJyk7XG4gICAgfVxuXG4gICAgdGhpcy5jaGlsZHJlbltpbmRleDFdID0gY2hpbGQyO1xuICAgIHRoaXMuY2hpbGRyZW5baW5kZXgyXSA9IGNoaWxkO1xuICAgIHRoaXMub25DaGlsZHJlbkNoYW5nZShpbmRleDEgPCBpbmRleDIgPyBpbmRleDEgOiBpbmRleDIpO1xufTtcblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBpbmRleCBwb3NpdGlvbiBvZiBhIGNoaWxkIERpc3BsYXlPYmplY3QgaW5zdGFuY2VcbiAqXG4gKiBAcGFyYW0gY2hpbGQge1BJWEkuRGlzcGxheU9iamVjdH0gVGhlIERpc3BsYXlPYmplY3QgaW5zdGFuY2UgdG8gaWRlbnRpZnlcbiAqIEByZXR1cm4ge251bWJlcn0gVGhlIGluZGV4IHBvc2l0aW9uIG9mIHRoZSBjaGlsZCBkaXNwbGF5IG9iamVjdCB0byBpZGVudGlmeVxuICovXG5Db250YWluZXIucHJvdG90eXBlLmdldENoaWxkSW5kZXggPSBmdW5jdGlvbiAoY2hpbGQpXG57XG4gICAgdmFyIGluZGV4ID0gdGhpcy5jaGlsZHJlbi5pbmRleE9mKGNoaWxkKTtcblxuICAgIGlmIChpbmRleCA9PT0gLTEpXG4gICAge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RoZSBzdXBwbGllZCBEaXNwbGF5T2JqZWN0IG11c3QgYmUgYSBjaGlsZCBvZiB0aGUgY2FsbGVyJyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGluZGV4O1xufTtcblxuLyoqXG4gKiBDaGFuZ2VzIHRoZSBwb3NpdGlvbiBvZiBhbiBleGlzdGluZyBjaGlsZCBpbiB0aGUgZGlzcGxheSBvYmplY3QgY29udGFpbmVyXG4gKlxuICogQHBhcmFtIGNoaWxkIHtQSVhJLkRpc3BsYXlPYmplY3R9IFRoZSBjaGlsZCBEaXNwbGF5T2JqZWN0IGluc3RhbmNlIGZvciB3aGljaCB5b3Ugd2FudCB0byBjaGFuZ2UgdGhlIGluZGV4IG51bWJlclxuICogQHBhcmFtIGluZGV4IHtudW1iZXJ9IFRoZSByZXN1bHRpbmcgaW5kZXggbnVtYmVyIGZvciB0aGUgY2hpbGQgZGlzcGxheSBvYmplY3RcbiAqL1xuQ29udGFpbmVyLnByb3RvdHlwZS5zZXRDaGlsZEluZGV4ID0gZnVuY3Rpb24gKGNoaWxkLCBpbmRleClcbntcbiAgICBpZiAoaW5kZXggPCAwIHx8IGluZGV4ID49IHRoaXMuY2hpbGRyZW4ubGVuZ3RoKVxuICAgIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdUaGUgc3VwcGxpZWQgaW5kZXggaXMgb3V0IG9mIGJvdW5kcycpO1xuICAgIH1cblxuICAgIHZhciBjdXJyZW50SW5kZXggPSB0aGlzLmdldENoaWxkSW5kZXgoY2hpbGQpO1xuXG4gICAgdXRpbHMucmVtb3ZlSXRlbXModGhpcy5jaGlsZHJlbiwgY3VycmVudEluZGV4LCAxKTsgLy8gcmVtb3ZlIGZyb20gb2xkIHBvc2l0aW9uXG4gICAgdGhpcy5jaGlsZHJlbi5zcGxpY2UoaW5kZXgsIDAsIGNoaWxkKTsgLy9hZGQgYXQgbmV3IHBvc2l0aW9uXG4gICAgdGhpcy5vbkNoaWxkcmVuQ2hhbmdlKGluZGV4KTtcbn07XG5cbi8qKlxuICogUmV0dXJucyB0aGUgY2hpbGQgYXQgdGhlIHNwZWNpZmllZCBpbmRleFxuICpcbiAqIEBwYXJhbSBpbmRleCB7bnVtYmVyfSBUaGUgaW5kZXggdG8gZ2V0IHRoZSBjaGlsZCBhdFxuICogQHJldHVybiB7UElYSS5EaXNwbGF5T2JqZWN0fSBUaGUgY2hpbGQgYXQgdGhlIGdpdmVuIGluZGV4LCBpZiBhbnkuXG4gKi9cbkNvbnRhaW5lci5wcm90b3R5cGUuZ2V0Q2hpbGRBdCA9IGZ1bmN0aW9uIChpbmRleClcbntcbiAgICBpZiAoaW5kZXggPCAwIHx8IGluZGV4ID49IHRoaXMuY2hpbGRyZW4ubGVuZ3RoKVxuICAgIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdnZXRDaGlsZEF0OiBTdXBwbGllZCBpbmRleCAnICsgaW5kZXggKyAnIGRvZXMgbm90IGV4aXN0IGluIHRoZSBjaGlsZCBsaXN0LCBvciB0aGUgc3VwcGxpZWQgRGlzcGxheU9iamVjdCBpcyBub3QgYSBjaGlsZCBvZiB0aGUgY2FsbGVyJyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuY2hpbGRyZW5baW5kZXhdO1xufTtcblxuLyoqXG4gKiBSZW1vdmVzIGEgY2hpbGQgZnJvbSB0aGUgY29udGFpbmVyLlxuICpcbiAqIEBwYXJhbSBjaGlsZCB7UElYSS5EaXNwbGF5T2JqZWN0fSBUaGUgRGlzcGxheU9iamVjdCB0byByZW1vdmVcbiAqIEByZXR1cm4ge1BJWEkuRGlzcGxheU9iamVjdH0gVGhlIGNoaWxkIHRoYXQgd2FzIHJlbW92ZWQuXG4gKi9cbkNvbnRhaW5lci5wcm90b3R5cGUucmVtb3ZlQ2hpbGQgPSBmdW5jdGlvbiAoY2hpbGQpXG57XG4gICAgdmFyIGFyZ3VtZW50c0xlbmd0aCA9IGFyZ3VtZW50cy5sZW5ndGg7XG5cbiAgICAvLyBpZiB0aGVyZSBpcyBvbmx5IG9uZSBhcmd1bWVudCB3ZSBjYW4gYnlwYXNzIGxvb3BpbmcgdGhyb3VnaCB0aGUgdGhlbVxuICAgIGlmKGFyZ3VtZW50c0xlbmd0aCA+IDEpXG4gICAge1xuICAgICAgICAvLyBsb29wIHRocm91Z2ggdGhlIGFyZ3VtZW50cyBwcm9wZXJ0eSBhbmQgYWRkIGFsbCBjaGlsZHJlblxuICAgICAgICAvLyB1c2UgaXQgdGhlIHJpZ2h0IHdheSAoLmxlbmd0aCBhbmQgW2ldKSBzbyB0aGF0IHRoaXMgZnVuY3Rpb24gY2FuIHN0aWxsIGJlIG9wdGltaXNlZCBieSBKUyBydW50aW1lc1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFyZ3VtZW50c0xlbmd0aDsgaSsrKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnJlbW92ZUNoaWxkKCBhcmd1bWVudHNbaV0gKTtcbiAgICAgICAgfVxuICAgIH0gICAgIFxuICAgIGVsc2VcbiAgICB7ICAgXG4gICAgICAgIHZhciBpbmRleCA9IHRoaXMuY2hpbGRyZW4uaW5kZXhPZihjaGlsZCk7XG5cbiAgICAgICAgaWYgKGluZGV4ID09PSAtMSlcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY2hpbGQucGFyZW50ID0gbnVsbDtcbiAgICAgICAgdXRpbHMucmVtb3ZlSXRlbXModGhpcy5jaGlsZHJlbiwgaW5kZXgsIDEpO1xuXG4gICAgICAgIC8vIFRPRE8gLSBsZXRzIGVpdGhlciBkbyBhbGwgY2FsbGJhY2tzIG9yIGFsbCBldmVudHMuLiBub3QgYm90aCFcbiAgICAgICAgdGhpcy5vbkNoaWxkcmVuQ2hhbmdlKGluZGV4KTtcbiAgICAgICAgY2hpbGQuZW1pdCgncmVtb3ZlZCcsIHRoaXMpO1xuICAgIH1cblxuICAgIHJldHVybiBjaGlsZDtcbn07XG5cbi8qKlxuICogUmVtb3ZlcyBhIGNoaWxkIGZyb20gdGhlIHNwZWNpZmllZCBpbmRleCBwb3NpdGlvbi5cbiAqXG4gKiBAcGFyYW0gaW5kZXgge251bWJlcn0gVGhlIGluZGV4IHRvIGdldCB0aGUgY2hpbGQgZnJvbVxuICogQHJldHVybiB7UElYSS5EaXNwbGF5T2JqZWN0fSBUaGUgY2hpbGQgdGhhdCB3YXMgcmVtb3ZlZC5cbiAqL1xuQ29udGFpbmVyLnByb3RvdHlwZS5yZW1vdmVDaGlsZEF0ID0gZnVuY3Rpb24gKGluZGV4KVxue1xuICAgIHZhciBjaGlsZCA9IHRoaXMuZ2V0Q2hpbGRBdChpbmRleCk7XG5cbiAgICBjaGlsZC5wYXJlbnQgPSBudWxsO1xuICAgIHV0aWxzLnJlbW92ZUl0ZW1zKHRoaXMuY2hpbGRyZW4sIGluZGV4LCAxKTtcblxuICAgIC8vIFRPRE8gLSBsZXRzIGVpdGhlciBkbyBhbGwgY2FsbGJhY2tzIG9yIGFsbCBldmVudHMuLiBub3QgYm90aCFcbiAgICB0aGlzLm9uQ2hpbGRyZW5DaGFuZ2UoaW5kZXgpO1xuICAgIGNoaWxkLmVtaXQoJ3JlbW92ZWQnLCB0aGlzKTtcblxuICAgIHJldHVybiBjaGlsZDtcbn07XG5cbi8qKlxuICogUmVtb3ZlcyBhbGwgY2hpbGRyZW4gZnJvbSB0aGlzIGNvbnRhaW5lciB0aGF0IGFyZSB3aXRoaW4gdGhlIGJlZ2luIGFuZCBlbmQgaW5kZXhlcy5cbiAqXG4gKiBAcGFyYW0gYmVnaW5JbmRleCB7bnVtYmVyfSBUaGUgYmVnaW5uaW5nIHBvc2l0aW9uLiBEZWZhdWx0IHZhbHVlIGlzIDAuXG4gKiBAcGFyYW0gZW5kSW5kZXgge251bWJlcn0gVGhlIGVuZGluZyBwb3NpdGlvbi4gRGVmYXVsdCB2YWx1ZSBpcyBzaXplIG9mIHRoZSBjb250YWluZXIuXG4gKi9cbkNvbnRhaW5lci5wcm90b3R5cGUucmVtb3ZlQ2hpbGRyZW4gPSBmdW5jdGlvbiAoYmVnaW5JbmRleCwgZW5kSW5kZXgpXG57XG4gICAgdmFyIGJlZ2luID0gYmVnaW5JbmRleCB8fCAwO1xuICAgIHZhciBlbmQgPSB0eXBlb2YgZW5kSW5kZXggPT09ICdudW1iZXInID8gZW5kSW5kZXggOiB0aGlzLmNoaWxkcmVuLmxlbmd0aDtcbiAgICB2YXIgcmFuZ2UgPSBlbmQgLSBiZWdpbjtcbiAgICB2YXIgcmVtb3ZlZCwgaTtcblxuICAgIGlmIChyYW5nZSA+IDAgJiYgcmFuZ2UgPD0gZW5kKVxuICAgIHtcbiAgICAgICAgcmVtb3ZlZCA9IHRoaXMuY2hpbGRyZW4uc3BsaWNlKGJlZ2luLCByYW5nZSk7XG5cbiAgICAgICAgZm9yIChpID0gMDsgaSA8IHJlbW92ZWQubGVuZ3RoOyArK2kpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJlbW92ZWRbaV0ucGFyZW50ID0gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMub25DaGlsZHJlbkNoYW5nZShiZWdpbkluZGV4KTtcblxuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgcmVtb3ZlZC5sZW5ndGg7ICsraSlcbiAgICAgICAge1xuICAgICAgICAgICAgcmVtb3ZlZFtpXS5lbWl0KCdyZW1vdmVkJywgdGhpcyk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gcmVtb3ZlZDtcbiAgICB9XG4gICAgZWxzZSBpZiAocmFuZ2UgPT09IDAgJiYgdGhpcy5jaGlsZHJlbi5sZW5ndGggPT09IDApXG4gICAge1xuICAgICAgICByZXR1cm4gW107XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdyZW1vdmVDaGlsZHJlbjogbnVtZXJpYyB2YWx1ZXMgYXJlIG91dHNpZGUgdGhlIGFjY2VwdGFibGUgcmFuZ2UuJyk7XG4gICAgfVxufTtcblxuLyoqXG4gKiBVc2VmdWwgZnVuY3Rpb24gdGhhdCByZXR1cm5zIGEgdGV4dHVyZSBvZiB0aGUgZGlzcGxheSBvYmplY3QgdGhhdCBjYW4gdGhlbiBiZSB1c2VkIHRvIGNyZWF0ZSBzcHJpdGVzXG4gKiBUaGlzIGNhbiBiZSBxdWl0ZSB1c2VmdWwgaWYgeW91ciBkaXNwbGF5T2JqZWN0IGlzIHN0YXRpYyAvIGNvbXBsaWNhdGVkIGFuZCBuZWVkcyB0byBiZSByZXVzZWQgbXVsdGlwbGUgdGltZXMuXG4gKlxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLkNhbnZhc1JlbmRlcmVyfFBJWEkuV2ViR0xSZW5kZXJlcn0gVGhlIHJlbmRlcmVyIHVzZWQgdG8gZ2VuZXJhdGUgdGhlIHRleHR1cmUuXG4gKiBAcGFyYW0gcmVzb2x1dGlvbiB7bnVtYmVyfSBUaGUgcmVzb2x1dGlvbiBvZiB0aGUgdGV4dHVyZSBiZWluZyBnZW5lcmF0ZWRcbiAqIEBwYXJhbSBzY2FsZU1vZGUge251bWJlcn0gU2VlIHtAbGluayBQSVhJLlNDQUxFX01PREVTfSBmb3IgcG9zc2libGUgdmFsdWVzXG4gKiBAcmV0dXJuIHtQSVhJLlRleHR1cmV9IGEgdGV4dHVyZSBvZiB0aGUgZGlzcGxheSBvYmplY3RcbiAqL1xuQ29udGFpbmVyLnByb3RvdHlwZS5nZW5lcmF0ZVRleHR1cmUgPSBmdW5jdGlvbiAocmVuZGVyZXIsIHJlc29sdXRpb24sIHNjYWxlTW9kZSlcbntcbiAgICB2YXIgYm91bmRzID0gdGhpcy5nZXRMb2NhbEJvdW5kcygpO1xuXG4gICAgdmFyIHJlbmRlclRleHR1cmUgPSBuZXcgUmVuZGVyVGV4dHVyZShyZW5kZXJlciwgYm91bmRzLndpZHRoIHwgMCwgYm91bmRzLmhlaWdodCB8IDAsIHNjYWxlTW9kZSwgcmVzb2x1dGlvbik7XG5cbiAgICBfdGVtcE1hdHJpeC50eCA9IC1ib3VuZHMueDtcbiAgICBfdGVtcE1hdHJpeC50eSA9IC1ib3VuZHMueTtcblxuICAgIHJlbmRlclRleHR1cmUucmVuZGVyKHRoaXMsIF90ZW1wTWF0cml4KTtcblxuICAgIHJldHVybiByZW5kZXJUZXh0dXJlO1xufTtcblxuLypcbiAqIFVwZGF0ZXMgdGhlIHRyYW5zZm9ybSBvbiBhbGwgY2hpbGRyZW4gb2YgdGhpcyBjb250YWluZXIgZm9yIHJlbmRlcmluZ1xuICpcbiAqIEBwcml2YXRlXG4gKi9cbkNvbnRhaW5lci5wcm90b3R5cGUudXBkYXRlVHJhbnNmb3JtID0gZnVuY3Rpb24gKClcbntcbiAgICBpZiAoIXRoaXMudmlzaWJsZSlcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLmRpc3BsYXlPYmplY3RVcGRhdGVUcmFuc2Zvcm0oKTtcblxuICAgIGZvciAodmFyIGkgPSAwLCBqID0gdGhpcy5jaGlsZHJlbi5sZW5ndGg7IGkgPCBqOyArK2kpXG4gICAge1xuICAgICAgICB0aGlzLmNoaWxkcmVuW2ldLnVwZGF0ZVRyYW5zZm9ybSgpO1xuICAgIH1cblxuICAgIHRoaXMuZGlydHlUcmFuc2Zvcm0gPSBmYWxzZTtcbn07XG5cbi8vIHBlcmZvcm1hbmNlIGluY3JlYXNlIHRvIGF2b2lkIHVzaW5nIGNhbGwuLiAoMTB4IGZhc3RlcilcbkNvbnRhaW5lci5wcm90b3R5cGUuY29udGFpbmVyVXBkYXRlVHJhbnNmb3JtID0gQ29udGFpbmVyLnByb3RvdHlwZS51cGRhdGVUcmFuc2Zvcm07XG5cbi8qKlxuICogUmV0cmlldmVzIHRoZSBib3VuZHMgb2YgdGhlIENvbnRhaW5lciBhcyBhIHJlY3RhbmdsZS4gVGhlIGJvdW5kcyBjYWxjdWxhdGlvbiB0YWtlcyBhbGwgdmlzaWJsZSBjaGlsZHJlbiBpbnRvIGNvbnNpZGVyYXRpb24uXG4gKlxuICogQHJldHVybiB7UElYSS5SZWN0YW5nbGV9IFRoZSByZWN0YW5ndWxhciBib3VuZGluZyBhcmVhXG4gKi9cbkNvbnRhaW5lci5wcm90b3R5cGUuZ2V0Qm91bmRzID0gZnVuY3Rpb24gKClcbntcbiAgICBpZighdGhpcy5fY3VycmVudEJvdW5kcylcbiAgICB7XG5cbiAgICAgICAgaWYgKHRoaXMuY2hpbGRyZW4ubGVuZ3RoID09PSAwKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gbWF0aC5SZWN0YW5nbGUuRU1QVFk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBUT0RPIHRoZSBib3VuZHMgaGF2ZSBhbHJlYWR5IGJlZW4gY2FsY3VsYXRlZCB0aGlzIHJlbmRlciBzZXNzaW9uIHNvIHJldHVybiB3aGF0IHdlIGhhdmVcblxuICAgICAgICB2YXIgbWluWCA9IEluZmluaXR5O1xuICAgICAgICB2YXIgbWluWSA9IEluZmluaXR5O1xuXG4gICAgICAgIHZhciBtYXhYID0gLUluZmluaXR5O1xuICAgICAgICB2YXIgbWF4WSA9IC1JbmZpbml0eTtcblxuICAgICAgICB2YXIgY2hpbGRCb3VuZHM7XG4gICAgICAgIHZhciBjaGlsZE1heFg7XG4gICAgICAgIHZhciBjaGlsZE1heFk7XG5cbiAgICAgICAgdmFyIGNoaWxkVmlzaWJsZSA9IGZhbHNlO1xuXG4gICAgICAgIGZvciAodmFyIGkgPSAwLCBqID0gdGhpcy5jaGlsZHJlbi5sZW5ndGg7IGkgPCBqOyArK2kpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHZhciBjaGlsZCA9IHRoaXMuY2hpbGRyZW5baV07XG5cbiAgICAgICAgICAgIGlmICghY2hpbGQudmlzaWJsZSlcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY2hpbGRWaXNpYmxlID0gdHJ1ZTtcblxuICAgICAgICAgICAgY2hpbGRCb3VuZHMgPSB0aGlzLmNoaWxkcmVuW2ldLmdldEJvdW5kcygpO1xuXG4gICAgICAgICAgICBtaW5YID0gbWluWCA8IGNoaWxkQm91bmRzLnggPyBtaW5YIDogY2hpbGRCb3VuZHMueDtcbiAgICAgICAgICAgIG1pblkgPSBtaW5ZIDwgY2hpbGRCb3VuZHMueSA/IG1pblkgOiBjaGlsZEJvdW5kcy55O1xuXG4gICAgICAgICAgICBjaGlsZE1heFggPSBjaGlsZEJvdW5kcy53aWR0aCArIGNoaWxkQm91bmRzLng7XG4gICAgICAgICAgICBjaGlsZE1heFkgPSBjaGlsZEJvdW5kcy5oZWlnaHQgKyBjaGlsZEJvdW5kcy55O1xuXG4gICAgICAgICAgICBtYXhYID0gbWF4WCA+IGNoaWxkTWF4WCA/IG1heFggOiBjaGlsZE1heFg7XG4gICAgICAgICAgICBtYXhZID0gbWF4WSA+IGNoaWxkTWF4WSA/IG1heFkgOiBjaGlsZE1heFk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIWNoaWxkVmlzaWJsZSlcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIG1hdGguUmVjdGFuZ2xlLkVNUFRZO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGJvdW5kcyA9IHRoaXMuX2JvdW5kcztcblxuICAgICAgICBib3VuZHMueCA9IG1pblg7XG4gICAgICAgIGJvdW5kcy55ID0gbWluWTtcbiAgICAgICAgYm91bmRzLndpZHRoID0gbWF4WCAtIG1pblg7XG4gICAgICAgIGJvdW5kcy5oZWlnaHQgPSBtYXhZIC0gbWluWTtcblxuICAgICAgICB0aGlzLl9jdXJyZW50Qm91bmRzID0gYm91bmRzO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLl9jdXJyZW50Qm91bmRzO1xufTtcblxuQ29udGFpbmVyLnByb3RvdHlwZS5jb250YWluZXJHZXRCb3VuZHMgPSBDb250YWluZXIucHJvdG90eXBlLmdldEJvdW5kcztcblxuLyoqXG4gKiBSZXRyaWV2ZXMgdGhlIG5vbi1nbG9iYWwgbG9jYWwgYm91bmRzIG9mIHRoZSBDb250YWluZXIgYXMgYSByZWN0YW5nbGUuXG4gKiBUaGUgY2FsY3VsYXRpb24gdGFrZXMgYWxsIHZpc2libGUgY2hpbGRyZW4gaW50byBjb25zaWRlcmF0aW9uLlxuICpcbiAqIEByZXR1cm4ge1BJWEkuUmVjdGFuZ2xlfSBUaGUgcmVjdGFuZ3VsYXIgYm91bmRpbmcgYXJlYVxuICovXG5Db250YWluZXIucHJvdG90eXBlLmdldExvY2FsQm91bmRzID0gZnVuY3Rpb24gKClcbntcbiAgICB2YXIgbWF0cml4Q2FjaGUgPSB0aGlzLndvcmxkVHJhbnNmb3JtO1xuXG4gICAgdGhpcy53b3JsZFRyYW5zZm9ybSA9IG1hdGguTWF0cml4LklERU5USVRZO1xuXG4gICAgZm9yICh2YXIgaSA9IDAsIGogPSB0aGlzLmNoaWxkcmVuLmxlbmd0aDsgaSA8IGo7ICsraSlcbiAgICB7XG4gICAgICAgIHRoaXMuY2hpbGRyZW5baV0udXBkYXRlVHJhbnNmb3JtKCk7XG4gICAgfVxuXG4gICAgdGhpcy53b3JsZFRyYW5zZm9ybSA9IG1hdHJpeENhY2hlO1xuXG4gICAgdGhpcy5fY3VycmVudEJvdW5kcyA9IG51bGw7XG5cbiAgICByZXR1cm4gdGhpcy5nZXRCb3VuZHMoIG1hdGguTWF0cml4LklERU5USVRZICk7XG59O1xuXG4vKipcbiAqIFJlbmRlcnMgdGhlIG9iamVjdCB1c2luZyB0aGUgV2ViR0wgcmVuZGVyZXJcbiAqXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcn0gVGhlIHJlbmRlcmVyXG4gKi9cbkNvbnRhaW5lci5wcm90b3R5cGUucmVuZGVyV2ViR0wgPSBmdW5jdGlvbiAocmVuZGVyZXIpXG57XG5cbiAgICAvLyBpZiB0aGUgb2JqZWN0IGlzIG5vdCB2aXNpYmxlIG9yIHRoZSBhbHBoYSBpcyAwIHRoZW4gbm8gbmVlZCB0byByZW5kZXIgdGhpcyBlbGVtZW50XG4gICAgaWYgKCF0aGlzLnZpc2libGUgfHwgdGhpcy53b3JsZEFscGhhIDw9IDAgfHwgIXRoaXMucmVuZGVyYWJsZSlcbiAgICB7XG4gICAgICBcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHZhciBpLCBqO1xuXG4gICAgLy8gZG8gYSBxdWljayBjaGVjayB0byBzZWUgaWYgdGhpcyBlbGVtZW50IGhhcyBhIG1hc2sgb3IgYSBmaWx0ZXIuXG4gICAgaWYgKHRoaXMuX21hc2sgfHwgdGhpcy5fZmlsdGVycylcbiAgICB7XG4gICAgICAgIHJlbmRlcmVyLmN1cnJlbnRSZW5kZXJlci5mbHVzaCgpO1xuXG4gICAgICAgIC8vIHB1c2ggZmlsdGVyIGZpcnN0IGFzIHdlIG5lZWQgdG8gZW5zdXJlIHRoZSBzdGVuY2lsIGJ1ZmZlciBpcyBjb3JyZWN0IGZvciBhbnkgbWFza2luZ1xuICAgICAgICBpZiAodGhpcy5fZmlsdGVycyAmJiB0aGlzLl9maWx0ZXJzLmxlbmd0aClcbiAgICAgICAge1xuICAgICAgICAgICAgcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5wdXNoRmlsdGVyKHRoaXMsIHRoaXMuX2ZpbHRlcnMpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuX21hc2spXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJlbmRlcmVyLm1hc2tNYW5hZ2VyLnB1c2hNYXNrKHRoaXMsIHRoaXMuX21hc2spO1xuICAgICAgICB9XG5cbiAgICAgICAgcmVuZGVyZXIuY3VycmVudFJlbmRlcmVyLnN0YXJ0KCk7XG5cbiAgICAgICAgLy8gYWRkIHRoaXMgb2JqZWN0IHRvIHRoZSBiYXRjaCwgb25seSByZW5kZXJlZCBpZiBpdCBoYXMgYSB0ZXh0dXJlLlxuICAgICAgICB0aGlzLl9yZW5kZXJXZWJHTChyZW5kZXJlcik7XG5cbiAgICAgICAgLy8gbm93IGxvb3AgdGhyb3VnaCB0aGUgY2hpbGRyZW4gYW5kIG1ha2Ugc3VyZSB0aGV5IGdldCByZW5kZXJlZFxuICAgICAgICBmb3IgKGkgPSAwLCBqID0gdGhpcy5jaGlsZHJlbi5sZW5ndGg7IGkgPCBqOyBpKyspXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuY2hpbGRyZW5baV0ucmVuZGVyV2ViR0wocmVuZGVyZXIpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmVuZGVyZXIuY3VycmVudFJlbmRlcmVyLmZsdXNoKCk7XG5cbiAgICAgICAgaWYgKHRoaXMuX21hc2spXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJlbmRlcmVyLm1hc2tNYW5hZ2VyLnBvcE1hc2sodGhpcywgdGhpcy5fbWFzayk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5fZmlsdGVycylcbiAgICAgICAge1xuICAgICAgICAgICAgcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5wb3BGaWx0ZXIoKTtcblxuICAgICAgICB9XG4gICAgICAgIHJlbmRlcmVyLmN1cnJlbnRSZW5kZXJlci5zdGFydCgpO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICB0aGlzLl9yZW5kZXJXZWJHTChyZW5kZXJlcik7XG5cbiAgICAgICAgLy8gc2ltcGxlIHJlbmRlciBjaGlsZHJlbiFcbiAgICAgICAgZm9yIChpID0gMCwgaiA9IHRoaXMuY2hpbGRyZW4ubGVuZ3RoOyBpIDwgajsgKytpKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmNoaWxkcmVuW2ldLnJlbmRlcldlYkdMKHJlbmRlcmVyKTtcbiAgICAgICAgfVxuICAgIH1cbn07XG5cbi8qKlxuICogVG8gYmUgb3ZlcnJpZGRlbiBieSB0aGUgc3ViY2xhc3NcbiAqXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcn0gVGhlIHJlbmRlcmVyXG4gKiBAcHJpdmF0ZVxuICovXG5Db250YWluZXIucHJvdG90eXBlLl9yZW5kZXJXZWJHTCA9IGZ1bmN0aW9uIChyZW5kZXJlcikgLy8ganNoaW50IHVudXNlZDpmYWxzZVxue1xuICAgIC8vIHRoaXMgaXMgd2hlcmUgY29udGVudCBpdHNlbGYgZ2V0cyByZW5kZXJlZC4uLlxufTtcblxuLyoqXG4gKiBUbyBiZSBvdmVycmlkZGVuIGJ5IHRoZSBzdWJjbGFzc1xuICpcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5DYW52YXNSZW5kZXJlcn0gVGhlIHJlbmRlcmVyXG4gKiBAcHJpdmF0ZVxuICovXG5Db250YWluZXIucHJvdG90eXBlLl9yZW5kZXJDYW52YXMgPSBmdW5jdGlvbiAocmVuZGVyZXIpIC8vIGpzaGludCB1bnVzZWQ6ZmFsc2VcbntcbiAgICAvLyB0aGlzIGlzIHdoZXJlIGNvbnRlbnQgaXRzZWxmIGdldHMgcmVuZGVyZWQuLi5cbn07XG5cblxuLyoqXG4gKiBSZW5kZXJzIHRoZSBvYmplY3QgdXNpbmcgdGhlIENhbnZhcyByZW5kZXJlclxuICpcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5DYW52YXNSZW5kZXJlcn0gVGhlIHJlbmRlcmVyXG4gKi9cbkNvbnRhaW5lci5wcm90b3R5cGUucmVuZGVyQ2FudmFzID0gZnVuY3Rpb24gKHJlbmRlcmVyKVxue1xuICAgIC8vIGlmIG5vdCB2aXNpYmxlIG9yIHRoZSBhbHBoYSBpcyAwIHRoZW4gbm8gbmVlZCB0byByZW5kZXIgdGhpc1xuICAgIGlmICghdGhpcy52aXNpYmxlIHx8IHRoaXMuYWxwaGEgPD0gMCB8fCAhdGhpcy5yZW5kZXJhYmxlKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICh0aGlzLl9tYXNrKVxuICAgIHtcbiAgICAgICAgcmVuZGVyZXIubWFza01hbmFnZXIucHVzaE1hc2sodGhpcy5fbWFzaywgcmVuZGVyZXIpO1xuICAgIH1cblxuICAgIHRoaXMuX3JlbmRlckNhbnZhcyhyZW5kZXJlcik7XG4gICAgZm9yICh2YXIgaSA9IDAsIGogPSB0aGlzLmNoaWxkcmVuLmxlbmd0aDsgaSA8IGo7ICsraSlcbiAgICB7XG4gICAgICAgIHRoaXMuY2hpbGRyZW5baV0ucmVuZGVyQ2FudmFzKHJlbmRlcmVyKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5fbWFzaylcbiAgICB7XG4gICAgICAgIHJlbmRlcmVyLm1hc2tNYW5hZ2VyLnBvcE1hc2socmVuZGVyZXIpO1xuICAgIH1cbn07XG5cbi8qKlxuICogRGVzdHJveXMgdGhlIGNvbnRhaW5lclxuICogQHBhcmFtIFtkZXN0cm95Q2hpbGRyZW49ZmFsc2VdIHtib29sZWFufSBpZiBzZXQgdG8gdHJ1ZSwgYWxsIHRoZSBjaGlsZHJlbiB3aWxsIGhhdmUgdGhlaXIgZGVzdHJveSBtZXRob2QgY2FsbGVkIGFzIHdlbGxcbiAqL1xuQ29udGFpbmVyLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKGRlc3Ryb3lDaGlsZHJlbilcbntcbiAgICBEaXNwbGF5T2JqZWN0LnByb3RvdHlwZS5kZXN0cm95LmNhbGwodGhpcyk7XG5cbiAgICBpZiAoZGVzdHJveUNoaWxkcmVuKVxuICAgIHtcbiAgICAgICAgZm9yICh2YXIgaSA9IDAsIGogPSB0aGlzLmNoaWxkcmVuLmxlbmd0aDsgaSA8IGo7ICsraSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5jaGlsZHJlbltpXS5kZXN0cm95KGRlc3Ryb3lDaGlsZHJlbik7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLnJlbW92ZUNoaWxkcmVuKCk7XG5cbiAgICB0aGlzLmNoaWxkcmVuID0gbnVsbDtcbn07XG4iLCJ2YXIgbWF0aCA9IHJlcXVpcmUoJy4uL21hdGgnKSxcbiAgICBSZW5kZXJUZXh0dXJlID0gcmVxdWlyZSgnLi4vdGV4dHVyZXMvUmVuZGVyVGV4dHVyZScpLFxuICAgIEV2ZW50RW1pdHRlciA9IHJlcXVpcmUoJ2V2ZW50ZW1pdHRlcjMnKSxcbiAgICBDT05TVCA9IHJlcXVpcmUoJy4uL2NvbnN0JyksXG4gICAgX3RlbXBNYXRyaXggPSBuZXcgbWF0aC5NYXRyaXgoKSxcbiAgICBfdGVtcERpc3BsYXlPYmplY3RQYXJlbnQgPSB7d29ybGRUcmFuc2Zvcm06bmV3IG1hdGguTWF0cml4KCksIHdvcmxkQWxwaGE6MSwgY2hpbGRyZW46W119O1xuXG5cbi8qKlxuICogVGhlIGJhc2UgY2xhc3MgZm9yIGFsbCBvYmplY3RzIHRoYXQgYXJlIHJlbmRlcmVkIG9uIHRoZSBzY3JlZW4uXG4gKiBUaGlzIGlzIGFuIGFic3RyYWN0IGNsYXNzIGFuZCBzaG91bGQgbm90IGJlIHVzZWQgb24gaXRzIG93biByYXRoZXIgaXQgc2hvdWxkIGJlIGV4dGVuZGVkLlxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgRXZlbnRFbWl0dGVyXG4gKiBAbWVtYmVyb2YgUElYSVxuICovXG5mdW5jdGlvbiBEaXNwbGF5T2JqZWN0KClcbntcbiAgICBFdmVudEVtaXR0ZXIuY2FsbCh0aGlzKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBjb29yZGluYXRlIG9mIHRoZSBvYmplY3QgcmVsYXRpdmUgdG8gdGhlIGxvY2FsIGNvb3JkaW5hdGVzIG9mIHRoZSBwYXJlbnQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlBvaW50fVxuICAgICAqL1xuICAgIHRoaXMucG9zaXRpb24gPSBuZXcgbWF0aC5Qb2ludCgpO1xuICAgIHRoaXMuX3Bvc2l0aW9uID0gbmV3IENhY2hlUG9pbnQodGhpcyk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgc2NhbGUgZmFjdG9yIG9mIHRoZSBvYmplY3QuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlBvaW50fVxuICAgICAqL1xuICAgIHRoaXMuc2NhbGUgPSBuZXcgbWF0aC5Qb2ludCgxLCAxKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBwaXZvdCBwb2ludCBvZiB0aGUgZGlzcGxheU9iamVjdCB0aGF0IGl0IHJvdGF0ZXMgYXJvdW5kXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlBvaW50fVxuICAgICAqL1xuICAgIHRoaXMucGl2b3QgPSBuZXcgbWF0aC5Qb2ludCgwLCAwKTtcblxuXG4gICAgLyoqXG4gICAgICogVGhlIHNrZXcgZmFjdG9yIGZvciB0aGUgb2JqZWN0IGluIHJhZGlhbnMuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlBvaW50fVxuICAgICAqL1xuICAgIHRoaXMuc2tldyA9IG5ldyBtYXRoLlBvaW50KDAsIDApO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHJvdGF0aW9uIG9mIHRoZSBvYmplY3QgaW4gcmFkaWFucy5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLl9yb3RhdGlvbiA9IDA7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgb3BhY2l0eSBvZiB0aGUgb2JqZWN0LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMuYWxwaGEgPSAxO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHZpc2liaWxpdHkgb2YgdGhlIG9iamVjdC4gSWYgZmFsc2UgdGhlIG9iamVjdCB3aWxsIG5vdCBiZSBkcmF3biwgYW5kXG4gICAgICogdGhlIHVwZGF0ZVRyYW5zZm9ybSBmdW5jdGlvbiB3aWxsIG5vdCBiZSBjYWxsZWQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqL1xuICAgIHRoaXMudmlzaWJsZSA9IHRydWU7XG5cbiAgICAvKipcbiAgICAgKiBDYW4gdGhpcyBvYmplY3QgYmUgcmVuZGVyZWQsIGlmIGZhbHNlIHRoZSBvYmplY3Qgd2lsbCBub3QgYmUgZHJhd24gYnV0IHRoZSB1cGRhdGVUcmFuc2Zvcm1cbiAgICAgKiBtZXRob2RzIHdpbGwgc3RpbGwgYmUgY2FsbGVkLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKi9cbiAgICB0aGlzLnJlbmRlcmFibGUgPSB0cnVlO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGRpc3BsYXkgb2JqZWN0IGNvbnRhaW5lciB0aGF0IGNvbnRhaW5zIHRoaXMgZGlzcGxheSBvYmplY3QuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLkNvbnRhaW5lcn1cbiAgICAgKiBAcmVhZE9ubHlcbiAgICAgKi9cbiAgICB0aGlzLnBhcmVudCA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgbXVsdGlwbGllZCBhbHBoYSBvZiB0aGUgZGlzcGxheU9iamVjdFxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEByZWFkT25seVxuICAgICAqL1xuICAgIHRoaXMud29ybGRBbHBoYSA9IDE7XG5cbiAgICAvKipcbiAgICAgKiBDdXJyZW50IHRyYW5zZm9ybSBvZiB0aGUgb2JqZWN0IGJhc2VkIG9uIHdvcmxkIChwYXJlbnQpIGZhY3RvcnNcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuTWF0cml4fVxuICAgICAqIEByZWFkT25seVxuICAgICAqL1xuICAgIHRoaXMud29ybGRUcmFuc2Zvcm0gPSBuZXcgbWF0aC5NYXRyaXgoKTtcbiAgICB0aGlzLmxvY2FsVHJhbnNmb3JtID0gbmV3IG1hdGguTWF0cml4KCk7XG5cblxuICAgIC8qKlxuICAgICAqIFRoZSBhcmVhIHRoZSBmaWx0ZXIgaXMgYXBwbGllZCB0by4gVGhpcyBpcyB1c2VkIGFzIG1vcmUgb2YgYW4gb3B0aW1pc2F0aW9uXG4gICAgICogcmF0aGVyIHRoYW4gZmlndXJpbmcgb3V0IHRoZSBkaW1lbnNpb25zIG9mIHRoZSBkaXNwbGF5T2JqZWN0IGVhY2ggZnJhbWUgeW91IGNhbiBzZXQgdGhpcyByZWN0YW5nbGVcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuUmVjdGFuZ2xlfVxuICAgICAqL1xuICAgIHRoaXMuZmlsdGVyQXJlYSA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBjYWNoZWQgc2luIHJvdGF0aW9uXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9zciA9IDA7XG5cbiAgICAvKipcbiAgICAgKiBjYWNoZWQgY29zIHJvdGF0aW9uXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9jciA9IDE7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgb3JpZ2luYWwsIGNhY2hlZCBib3VuZHMgb2YgdGhlIG9iamVjdFxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5SZWN0YW5nbGV9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9ib3VuZHMgPSBuZXcgbWF0aC5SZWN0YW5nbGUoMCwgMCwgMSwgMSk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgbW9zdCB1cC10by1kYXRlIGJvdW5kcyBvZiB0aGUgb2JqZWN0XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlJlY3RhbmdsZX1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX2N1cnJlbnRCb3VuZHMgPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogVGhlIG9yaWdpbmFsLCBjYWNoZWQgbWFzayBvZiB0aGUgb2JqZWN0XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlJlY3RhbmdsZX1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX21hc2sgPSBudWxsO1xuXG4gICAgdGhpcy5kaXJ0eVRyYW5zZm9ybSA9IHRydWU7XG59XG5cbi8vIGNvbnN0cnVjdG9yXG5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoRXZlbnRFbWl0dGVyLnByb3RvdHlwZSk7XG5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IERpc3BsYXlPYmplY3Q7XG5tb2R1bGUuZXhwb3J0cyA9IERpc3BsYXlPYmplY3Q7XG5cbnZhciBDYWNoZVBvaW50ID0gZnVuY3Rpb24oZG9jKXtcbiAgICBcbiAgICB0aGlzLmRvYyA9IGRvYztcblxuICAgIHRoaXMueCA9IDA7XG4gICAgdGhpcy55ID0gMDtcbn1cblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoQ2FjaGVQb2ludC5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBUaGUgcG9zaXRpb24gb2YgdGhlIGRpc3BsYXlPYmplY3Qgb24gdGhlIHggYXhpcyByZWxhdGl2ZSB0byB0aGUgbG9jYWwgY29vcmRpbmF0ZXMgb2YgdGhlIHBhcmVudC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5EaXNwbGF5T2JqZWN0I1xuICAgICAqL1xuICAgIHg6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5kb2MucG9zaXRpb24ueDtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuZG9jLnBvc2l0aW9uLnggPSB2YWx1ZTtcbiAgICAgICAgICAgIHRoaXMuZG9jLmRpcnR5VHJhbnNmb3JtID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICB5OiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZG9jLnBvc2lpdG9uLnk7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmRvYy5wb3NpdGlvbi55ID0gdmFsdWU7XG4gICAgICAgICAgICB0aGlzLmRvYy5kaXJ0eVRyYW5zZm9ybSA9IHRydWU7XG4gICAgICAgIH1cbiAgICB9XG59KTtcblxuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhEaXNwbGF5T2JqZWN0LnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFRoZSBwb3NpdGlvbiBvZiB0aGUgZGlzcGxheU9iamVjdCBvbiB0aGUgeCBheGlzIHJlbGF0aXZlIHRvIHRoZSBsb2NhbCBjb29yZGluYXRlcyBvZiB0aGUgcGFyZW50LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLkRpc3BsYXlPYmplY3QjXG4gICAgICovXG4gICAgeDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnBvc2l0aW9uLng7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnBvc2l0aW9uLnggPSB2YWx1ZTtcbiAgICAgICAgICAgIHRoaXMuZGlydHlUcmFuc2Zvcm0gPSB0cnVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFRoZSBwb3NpdGlvbiBvZiB0aGUgZGlzcGxheU9iamVjdCBvbiB0aGUgeSBheGlzIHJlbGF0aXZlIHRvIHRoZSBsb2NhbCBjb29yZGluYXRlcyBvZiB0aGUgcGFyZW50LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLkRpc3BsYXlPYmplY3QjXG4gICAgICovXG4gICAgeToge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnBvc2l0aW9uLnk7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnBvc2l0aW9uLnkgPSB2YWx1ZTtcbiAgICAgICAgICAgIHRoaXMuZGlydHlUcmFuc2Zvcm0gPSB0cnVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIHNjYWxlWDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnNjYWxlLng7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnNjYWxlLnggPSB2YWx1ZTtcbiAgICAgICAgICAgIHRoaXMuZGlydHlUcmFuc2Zvcm0gPSB0cnVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFRoZSBwb3NpdGlvbiBvZiB0aGUgZGlzcGxheU9iamVjdCBvbiB0aGUgeSBheGlzIHJlbGF0aXZlIHRvIHRoZSBsb2NhbCBjb29yZGluYXRlcyBvZiB0aGUgcGFyZW50LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLkRpc3BsYXlPYmplY3QjXG4gICAgICovXG4gICAgc2NhbGVZOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuc2NhbGUueTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuc2NhbGUueSA9IHZhbHVlO1xuICAgICAgICAgICAgdGhpcy5kaXJ0eVRyYW5zZm9ybSA9IHRydWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgcm90YXRpb246IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fcm90YXRpb247XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLl9yb3RhdGlvbiA9IHZhbHVlO1xuICAgICAgICAgICAgdGhpcy5kaXJ0eVRyYW5zZm9ybSA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLl9zciA9IE1hdGguc2luKHZhbHVlKTtcbiAgICAgICAgICAgIHRoaXMuX2NyID0gTWF0aC5jb3ModmFsdWUpO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFRoZSBwb3NpdGlvbiBvZiB0aGUgZGlzcGxheU9iamVjdCBvbiB0aGUgeSBheGlzIHJlbGF0aXZlIHRvIHRoZSBsb2NhbCBjb29yZGluYXRlcyBvZiB0aGUgcGFyZW50LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLkRpc3BsYXlPYmplY3QjXG4gICAgICovXG4gICAgc2NhbGVZOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuc2NhbGUueTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuc2NhbGUueSA9IHZhbHVlO1xuICAgICAgICAgICAgdGhpcy5kaXJ0eVRyYW5zZm9ybSA9IHRydWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogSW5kaWNhdGVzIGlmIHRoZSBzcHJpdGUgaXMgZ2xvYmFsbHkgdmlzaWJsZS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICogQG1lbWJlcm9mIFBJWEkuRGlzcGxheU9iamVjdCNcbiAgICAgKiBAcmVhZG9ubHlcbiAgICAgKi9cbiAgICB3b3JsZFZpc2libGU6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICB2YXIgaXRlbSA9IHRoaXM7XG5cbiAgICAgICAgICAgIGRvIHtcbiAgICAgICAgICAgICAgICBpZiAoIWl0ZW0udmlzaWJsZSlcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpdGVtID0gaXRlbS5wYXJlbnQ7XG4gICAgICAgICAgICB9IHdoaWxlIChpdGVtKTtcblxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogU2V0cyBhIG1hc2sgZm9yIHRoZSBkaXNwbGF5T2JqZWN0LiBBIG1hc2sgaXMgYW4gb2JqZWN0IHRoYXQgbGltaXRzIHRoZSB2aXNpYmlsaXR5IG9mIGFuIG9iamVjdCB0byB0aGUgc2hhcGUgb2YgdGhlIG1hc2sgYXBwbGllZCB0byBpdC5cbiAgICAgKiBJbiBQSVhJIGEgcmVndWxhciBtYXNrIG11c3QgYmUgYSBQSVhJLkdyYXBoaWNzIG9yIGEgUElYSS5TcHJpdGUgb2JqZWN0LiBUaGlzIGFsbG93cyBmb3IgbXVjaCBmYXN0ZXIgbWFza2luZyBpbiBjYW52YXMgYXMgaXQgdXRpbGlzZXMgc2hhcGUgY2xpcHBpbmcuXG4gICAgICogVG8gcmVtb3ZlIGEgbWFzaywgc2V0IHRoaXMgcHJvcGVydHkgdG8gbnVsbC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuR3JhcGhpY3N8UElYSS5TcHJpdGV9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuRGlzcGxheU9iamVjdCNcbiAgICAgKi9cbiAgICBtYXNrOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX21hc2s7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICBpZiAodGhpcy5fbWFzaylcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9tYXNrLnJlbmRlcmFibGUgPSB0cnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLl9tYXNrID0gdmFsdWU7XG5cbiAgICAgICAgICAgIGlmICh0aGlzLl9tYXNrKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHRoaXMuX21hc2sucmVuZGVyYWJsZSA9IGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIGZpbHRlcnMgZm9yIHRoZSBkaXNwbGF5T2JqZWN0LlxuICAgICAqICogSU1QT1JUQU5UOiBUaGlzIGlzIGEgd2ViR0wgb25seSBmZWF0dXJlIGFuZCB3aWxsIGJlIGlnbm9yZWQgYnkgdGhlIGNhbnZhcyByZW5kZXJlci5cbiAgICAgKiBUbyByZW1vdmUgZmlsdGVycyBzaW1wbHkgc2V0IHRoaXMgcHJvcGVydHkgdG8gJ251bGwnXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLkFic3RyYWN0RmlsdGVyW119XG4gICAgICogQG1lbWJlcm9mIFBJWEkuRGlzcGxheU9iamVjdCNcbiAgICAgKi9cbiAgICBmaWx0ZXJzOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2ZpbHRlcnMgJiYgdGhpcy5fZmlsdGVycy5zbGljZSgpO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5fZmlsdGVycyA9IHZhbHVlICYmIHZhbHVlLnNsaWNlKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbn0pO1xuXG4vKlxuICogVXBkYXRlcyB0aGUgb2JqZWN0IHRyYW5zZm9ybSBmb3IgcmVuZGVyaW5nXG4gKlxuICogVE9ETyAtIE9wdGltaXphdGlvbiBwYXNzIVxuICovXG5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS51cGRhdGVUcmFuc2Zvcm0gPSBmdW5jdGlvbiAoKVxue1xuICAgIHZhciBwdCA9IHRoaXMucGFyZW50LndvcmxkVHJhbnNmb3JtO1xuICAgIHZhciB3dCA9IHRoaXMud29ybGRUcmFuc2Zvcm07XG4gICAgdmFyIGx0ID0gdGhpcy5sb2NhbFRyYW5zZm9ybTtcblxuICAgIGlmKHRoaXMuZGlydHlUcmFuc2Zvcm0pXG4gICAge1xuICAgICAgICAvLyBnZXQgdGhlIG1hdHJpeCB2YWx1ZXMgb2YgdGhlIGRpc3BsYXlvYmplY3QgYmFzZWQgb24gaXRzIHRyYW5zZm9ybSBwcm9wZXJ0aWVzLi5cbiAgICAgICAgbHQuYSAgPSAgdGhpcy5fY3IgKiB0aGlzLnNjYWxlLng7XG4gICAgICAgIGx0LmIgID0gIHRoaXMuX3NyICogdGhpcy5zY2FsZS54O1xuICAgICAgICBsdC5jICA9IC10aGlzLl9zciAqIHRoaXMuc2NhbGUueTtcbiAgICAgICAgbHQuZCAgPSAgdGhpcy5fY3IgKiB0aGlzLnNjYWxlLnk7XG4gICAgICAgIGx0LnR4ID0gIHRoaXMucG9zaXRpb24ueCAtICh0aGlzLnBpdm90LnggKiBsdC5hICsgdGhpcy5waXZvdC55ICogbHQuYyk7XG4gICAgICAgIGx0LnR5ID0gIHRoaXMucG9zaXRpb24ueSAtICh0aGlzLnBpdm90LnggKiBsdC5iICsgdGhpcy5waXZvdC55ICogbHQuZCk7XG4gICAgfVxuXG4gICAgaWYodGhpcy5kaXJ0eVRyYW5zZm9ybSB8fCB0aGlzLnBhcmVudC5kaXJ0eVRyYW5zZm9ybSlcbiAgICB7ICAgICAgXG4gICAgICAgIC8vIGNvbmNhdCB0aGUgcGFyZW50IG1hdHJpeCB3aXRoIHRoZSBvYmplY3RzIHRyYW5zZm9ybS5cbiAgICAgICAgd3QuYSAgPSBsdC5hICAqIHB0LmEgKyBsdC5iICAqIHB0LmM7XG4gICAgICAgIHd0LmIgID0gbHQuYSAgKiBwdC5iICsgbHQuYiAgKiBwdC5kO1xuICAgICAgICB3dC5jICA9IGx0LmMgICogcHQuYSArIGx0LmQgICogcHQuYztcbiAgICAgICAgd3QuZCAgPSBsdC5jICAqIHB0LmIgKyBsdC5kICAqIHB0LmQ7XG4gICAgICAgIHd0LnR4ID0gbHQudHggKiBwdC5hICsgbHQudHkgKiBwdC5jICsgcHQudHg7XG4gICAgICAgIHd0LnR5ID0gbHQudHggKiBwdC5iICsgbHQudHkgKiBwdC5kICsgcHQudHk7ICAgICAgIFxuICAgIFxuICAgICAgICB0aGlzLl9jdXJyZW50Qm91bmRzID0gbnVsbDtcbiAgICB9XG5cbiAgICAvLyBtdWx0aXBseSB0aGUgYWxwaGFzLi5cbiAgICB0aGlzLndvcmxkQWxwaGEgPSB0aGlzLmFscGhhICogdGhpcy5wYXJlbnQud29ybGRBbHBoYTtcblxuICAgIC8vIHJlc2V0IHRoZSBib3VuZHMgZWFjaCB0aW1lIHRoaXMgaXMgY2FsbGVkIVxuICAgIFxufTtcblxuLy8gcGVyZm9ybWFuY2UgaW5jcmVhc2UgdG8gYXZvaWQgdXNpbmcgY2FsbC4uICgxMHggZmFzdGVyKVxuRGlzcGxheU9iamVjdC5wcm90b3R5cGUuZGlzcGxheU9iamVjdFVwZGF0ZVRyYW5zZm9ybSA9IERpc3BsYXlPYmplY3QucHJvdG90eXBlLnVwZGF0ZVRyYW5zZm9ybTtcblxuLyoqXG4gKlxuICpcbiAqIFJldHJpZXZlcyB0aGUgYm91bmRzIG9mIHRoZSBkaXNwbGF5T2JqZWN0IGFzIGEgcmVjdGFuZ2xlIG9iamVjdFxuICpcbiAqIEBwYXJhbSBtYXRyaXgge1BJWEkuTWF0cml4fVxuICogQHJldHVybiB7UElYSS5SZWN0YW5nbGV9IHRoZSByZWN0YW5ndWxhciBib3VuZGluZyBhcmVhXG4gKi9cbkRpc3BsYXlPYmplY3QucHJvdG90eXBlLmdldEJvdW5kcyA9IGZ1bmN0aW9uIChtYXRyaXgpIC8vIGpzaGludCB1bnVzZWQ6ZmFsc2VcbntcbiAgICByZXR1cm4gbWF0aC5SZWN0YW5nbGUuRU1QVFk7XG59O1xuXG4vKipcbiAqIFJldHJpZXZlcyB0aGUgbG9jYWwgYm91bmRzIG9mIHRoZSBkaXNwbGF5T2JqZWN0IGFzIGEgcmVjdGFuZ2xlIG9iamVjdFxuICpcbiAqIEByZXR1cm4ge1BJWEkuUmVjdGFuZ2xlfSB0aGUgcmVjdGFuZ3VsYXIgYm91bmRpbmcgYXJlYVxuICovXG5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS5nZXRMb2NhbEJvdW5kcyA9IGZ1bmN0aW9uICgpXG57XG4gICAgcmV0dXJuIHRoaXMuZ2V0Qm91bmRzKG1hdGguTWF0cml4LklERU5USVRZKTtcbn07XG5cbi8qKlxuICogQ2FsY3VsYXRlcyB0aGUgZ2xvYmFsIHBvc2l0aW9uIG9mIHRoZSBkaXNwbGF5IG9iamVjdFxuICpcbiAqIEBwYXJhbSBwb3NpdGlvbiB7UElYSS5Qb2ludH0gVGhlIHdvcmxkIG9yaWdpbiB0byBjYWxjdWxhdGUgZnJvbVxuICogQHJldHVybiB7UElYSS5Qb2ludH0gQSBwb2ludCBvYmplY3QgcmVwcmVzZW50aW5nIHRoZSBwb3NpdGlvbiBvZiB0aGlzIG9iamVjdFxuICovXG5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS50b0dsb2JhbCA9IGZ1bmN0aW9uIChwb3NpdGlvbilcbntcbiAgICAvLyB0aGlzIHBhcmVudCBjaGVjayBpcyBmb3IganVzdCBpbiBjYXNlIHRoZSBpdGVtIGlzIGEgcm9vdCBvYmplY3QuXG4gICAgLy8gSWYgaXQgaXMgd2UgbmVlZCB0byBnaXZlIGl0IGEgdGVtcG9yYXJ5IHBhcmVudCBzbyB0aGF0IGRpc3BsYXlPYmplY3RVcGRhdGVUcmFuc2Zvcm0gd29ya3MgY29ycmVjdGx5XG4gICAgLy8gdGhpcyBpcyBtYWlubHkgdG8gYXZvaWQgYSBwYXJlbnQgY2hlY2sgaW4gdGhlIG1haW4gbG9vcC4gRXZlcnkgbGl0dGxlIGhlbHBzIGZvciBwZXJmb3JtYW5jZSA6KVxuICAgIGlmKCF0aGlzLnBhcmVudClcbiAgICB7XG4gICAgICAgIHRoaXMucGFyZW50ID0gX3RlbXBEaXNwbGF5T2JqZWN0UGFyZW50O1xuICAgICAgICB0aGlzLmRpc3BsYXlPYmplY3RVcGRhdGVUcmFuc2Zvcm0oKTtcbiAgICAgICAgdGhpcy5wYXJlbnQgPSBudWxsO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICB0aGlzLmRpc3BsYXlPYmplY3RVcGRhdGVUcmFuc2Zvcm0oKTtcbiAgICB9XG5cbiAgICAvLyBkb24ndCBuZWVkIHRvIHVwZGF0ZSB0aGUgbG90XG4gICAgcmV0dXJuIHRoaXMud29ybGRUcmFuc2Zvcm0uYXBwbHkocG9zaXRpb24pO1xufTtcblxuLyoqXG4gKiBDYWxjdWxhdGVzIHRoZSBsb2NhbCBwb3NpdGlvbiBvZiB0aGUgZGlzcGxheSBvYmplY3QgcmVsYXRpdmUgdG8gYW5vdGhlciBwb2ludFxuICpcbiAqIEBwYXJhbSBwb3NpdGlvbiB7UElYSS5Qb2ludH0gVGhlIHdvcmxkIG9yaWdpbiB0byBjYWxjdWxhdGUgZnJvbVxuICogQHBhcmFtIFtmcm9tXSB7UElYSS5EaXNwbGF5T2JqZWN0fSBUaGUgRGlzcGxheU9iamVjdCB0byBjYWxjdWxhdGUgdGhlIGdsb2JhbCBwb3NpdGlvbiBmcm9tXG4gKiBAcGFyYW0gW3BvaW50XSB7UElYSS5Qb2ludH0gQSBQb2ludCBvYmplY3QgaW4gd2hpY2ggdG8gc3RvcmUgdGhlIHZhbHVlLCBvcHRpb25hbCAob3RoZXJ3aXNlIHdpbGwgY3JlYXRlIGEgbmV3IFBvaW50KVxuICogQHJldHVybiB7UElYSS5Qb2ludH0gQSBwb2ludCBvYmplY3QgcmVwcmVzZW50aW5nIHRoZSBwb3NpdGlvbiBvZiB0aGlzIG9iamVjdFxuICovXG5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS50b0xvY2FsID0gZnVuY3Rpb24gKHBvc2l0aW9uLCBmcm9tLCBwb2ludClcbntcbiAgICBpZiAoZnJvbSlcbiAgICB7XG4gICAgICAgIHBvc2l0aW9uID0gZnJvbS50b0dsb2JhbChwb3NpdGlvbik7XG4gICAgfVxuXG4gICAgLy8gdGhpcyBwYXJlbnQgY2hlY2sgaXMgZm9yIGp1c3QgaW4gY2FzZSB0aGUgaXRlbSBpcyBhIHJvb3Qgb2JqZWN0LlxuICAgIC8vIElmIGl0IGlzIHdlIG5lZWQgdG8gZ2l2ZSBpdCBhIHRlbXBvcmFyeSBwYXJlbnQgc28gdGhhdCBkaXNwbGF5T2JqZWN0VXBkYXRlVHJhbnNmb3JtIHdvcmtzIGNvcnJlY3RseVxuICAgIC8vIHRoaXMgaXMgbWFpbmx5IHRvIGF2b2lkIGEgcGFyZW50IGNoZWNrIGluIHRoZSBtYWluIGxvb3AuIEV2ZXJ5IGxpdHRsZSBoZWxwcyBmb3IgcGVyZm9ybWFuY2UgOilcbiAgICBpZighdGhpcy5wYXJlbnQpXG4gICAge1xuICAgICAgICB0aGlzLnBhcmVudCA9IF90ZW1wRGlzcGxheU9iamVjdFBhcmVudDtcbiAgICAgICAgdGhpcy5kaXNwbGF5T2JqZWN0VXBkYXRlVHJhbnNmb3JtKCk7XG4gICAgICAgIHRoaXMucGFyZW50ID0gbnVsbDtcbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgdGhpcy5kaXNwbGF5T2JqZWN0VXBkYXRlVHJhbnNmb3JtKCk7XG4gICAgfVxuXG4gICAgLy8gc2ltcGx5IGFwcGx5IHRoZSBtYXRyaXguLlxuICAgIHJldHVybiB0aGlzLndvcmxkVHJhbnNmb3JtLmFwcGx5SW52ZXJzZShwb3NpdGlvbiwgcG9pbnQpO1xufTtcblxuLyoqXG4gKiBSZW5kZXJzIHRoZSBvYmplY3QgdXNpbmcgdGhlIFdlYkdMIHJlbmRlcmVyXG4gKlxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLldlYkdMUmVuZGVyZXJ9IFRoZSByZW5kZXJlclxuICogQHByaXZhdGVcbiAqL1xuRGlzcGxheU9iamVjdC5wcm90b3R5cGUucmVuZGVyV2ViR0wgPSBmdW5jdGlvbiAocmVuZGVyZXIpIC8vIGpzaGludCB1bnVzZWQ6ZmFsc2VcbntcbiAgICAvLyBPVkVSV1JJVEU7XG59O1xuXG4vKipcbiAqIFJlbmRlcnMgdGhlIG9iamVjdCB1c2luZyB0aGUgQ2FudmFzIHJlbmRlcmVyXG4gKlxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLkNhbnZhc1JlbmRlcmVyfSBUaGUgcmVuZGVyZXJcbiAqIEBwcml2YXRlXG4gKi9cbkRpc3BsYXlPYmplY3QucHJvdG90eXBlLnJlbmRlckNhbnZhcyA9IGZ1bmN0aW9uIChyZW5kZXJlcikgLy8ganNoaW50IHVudXNlZDpmYWxzZVxue1xuICAgIC8vIE9WRVJXUklURTtcbn07XG4vKipcbiAqIFVzZWZ1bCBmdW5jdGlvbiB0aGF0IHJldHVybnMgYSB0ZXh0dXJlIG9mIHRoZSBkaXNwbGF5IG9iamVjdCB0aGF0IGNhbiB0aGVuIGJlIHVzZWQgdG8gY3JlYXRlIHNwcml0ZXNcbiAqIFRoaXMgY2FuIGJlIHF1aXRlIHVzZWZ1bCBpZiB5b3VyIGRpc3BsYXlPYmplY3QgaXMgc3RhdGljIC8gY29tcGxpY2F0ZWQgYW5kIG5lZWRzIHRvIGJlIHJldXNlZCBtdWx0aXBsZSB0aW1lcy5cbiAqXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuQ2FudmFzUmVuZGVyZXJ8UElYSS5XZWJHTFJlbmRlcmVyfSBUaGUgcmVuZGVyZXIgdXNlZCB0byBnZW5lcmF0ZSB0aGUgdGV4dHVyZS5cbiAqIEBwYXJhbSBzY2FsZU1vZGUge251bWJlcn0gU2VlIHtAbGluayBQSVhJLlNDQUxFX01PREVTfSBmb3IgcG9zc2libGUgdmFsdWVzXG4gKiBAcGFyYW0gcmVzb2x1dGlvbiB7bnVtYmVyfSBUaGUgcmVzb2x1dGlvbiBvZiB0aGUgdGV4dHVyZSBiZWluZyBnZW5lcmF0ZWRcbiAqIEByZXR1cm4ge1BJWEkuVGV4dHVyZX0gYSB0ZXh0dXJlIG9mIHRoZSBkaXNwbGF5IG9iamVjdFxuICovXG5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS5nZW5lcmF0ZVRleHR1cmUgPSBmdW5jdGlvbiAocmVuZGVyZXIsIHNjYWxlTW9kZSwgcmVzb2x1dGlvbilcbntcbiAgICB2YXIgYm91bmRzID0gdGhpcy5nZXRMb2NhbEJvdW5kcygpO1xuXG4gICAgdmFyIHJlbmRlclRleHR1cmUgPSBuZXcgUmVuZGVyVGV4dHVyZShyZW5kZXJlciwgYm91bmRzLndpZHRoIHwgMCwgYm91bmRzLmhlaWdodCB8IDAsIHNjYWxlTW9kZSwgcmVzb2x1dGlvbik7XG5cbiAgICBfdGVtcE1hdHJpeC50eCA9IC1ib3VuZHMueDtcbiAgICBfdGVtcE1hdHJpeC50eSA9IC1ib3VuZHMueTtcblxuICAgIHJlbmRlclRleHR1cmUucmVuZGVyKHRoaXMsIF90ZW1wTWF0cml4KTtcblxuICAgIHJldHVybiByZW5kZXJUZXh0dXJlO1xufTtcblxuLyoqXG4gKiBTZXQgdGhlIHBhcmVudCBDb250YWluZXIgb2YgdGhpcyBEaXNwbGF5T2JqZWN0XG4gKlxuICogQHBhcmFtIGNvbnRhaW5lciB7Q29udGFpbmVyfSBUaGUgQ29udGFpbmVyIHRvIGFkZCB0aGlzIERpc3BsYXlPYmplY3QgdG9cbiAqIEByZXR1cm4ge0NvbnRhaW5lcn0gVGhlIENvbnRhaW5lciB0aGF0IHRoaXMgRGlzcGxheU9iamVjdCB3YXMgYWRkZWQgdG9cbiAqL1xuRGlzcGxheU9iamVjdC5wcm90b3R5cGUuc2V0UGFyZW50ID0gZnVuY3Rpb24gKGNvbnRhaW5lcilcbntcbiAgICBpZiAoIWNvbnRhaW5lciB8fCAhY29udGFpbmVyLmFkZENoaWxkKVxuICAgIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdzZXRQYXJlbnQ6IEFyZ3VtZW50IG11c3QgYmUgYSBDb250YWluZXInKTtcbiAgICB9XG5cbiAgICBjb250YWluZXIuYWRkQ2hpbGQodGhpcyk7XG4gICAgcmV0dXJuIGNvbnRhaW5lcjtcbn07XG5cbi8qKlxuICogQ29udmVuaWVuY2UgZnVuY3Rpb24gdG8gc2V0IHRoZSBwb3N0aW9uLCBzY2FsZSwgc2tldyBhbmQgcGl2b3QgYXQgb25jZS5cbiAqXG4gKiBAcGFyYW0gW3g9MF0ge251bWJlcn0gVGhlIFggcG9zaXRpb25cbiAqIEBwYXJhbSBbeT0wXSB7bnVtYmVyfSBUaGUgWSBwb3NpdGlvblxuICogQHBhcmFtIFtzY2FsZVg9MV0ge251bWJlcn0gVGhlIFggc2NhbGUgdmFsdWVcbiAqIEBwYXJhbSBbc2NhbGVZPTFdIHtudW1iZXJ9IFRoZSBZIHNjYWxlIHZhbHVlXG4gKiBAcGFyYW0gW3JvdGF0aW9uPTBdIHtudW1iZXJ9IFRoZSByb3RhdGlvblxuICogQHBhcmFtIFtza2V3WD0wXSB7bnVtYmVyfSBUaGUgWCBza2V3IHZhbHVlXG4gKiBAcGFyYW0gW3NrZXdZPTBdIHtudW1iZXJ9IFRoZSBZIHNrZXcgdmFsdWVcbiAqIEBwYXJhbSBbcGl2b3RYPTBdIHtudW1iZXJ9IFRoZSBYIHBpdm90IHZhbHVlXG4gKiBAcGFyYW0gW3Bpdm90WT0wXSB7bnVtYmVyfSBUaGUgWSBwaXZvdCB2YWx1ZVxuICogQHJldHVybiB7UElYSS5EaXNwbGF5T2JqZWN0fVxuICovXG5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS5zZXRUcmFuc2Zvcm0gPSBmdW5jdGlvbih4LCB5LCBzY2FsZVgsIHNjYWxlWSwgcm90YXRpb24sIHNrZXdYLCBza2V3WSwgcGl2b3RYLCBwaXZvdFkpIC8vanNoaW50IGlnbm9yZTpsaW5lXG57XG4gICAgdGhpcy5wb3NpdGlvbi54ID0geCB8fCAwO1xuICAgIHRoaXMucG9zaXRpb24ueSA9IHkgfHwgMDtcbiAgICB0aGlzLnNjYWxlLnggPSAhc2NhbGVYID8gMSA6IHNjYWxlWDtcbiAgICB0aGlzLnNjYWxlLnkgPSAhc2NhbGVZID8gMSA6IHNjYWxlWTtcbiAgICB0aGlzLnJvdGF0aW9uID0gcm90YXRpb24gfHwgMDtcbiAgICB0aGlzLnNrZXcueCA9IHNrZXdYIHx8IDA7XG4gICAgdGhpcy5za2V3LnkgPSBza2V3WSB8fCAwO1xuICAgIHRoaXMucGl2b3QueCA9IHBpdm90WCB8fCAwO1xuICAgIHRoaXMucGl2b3QueSA9IHBpdm90WSB8fCAwO1xuICAgIHRoaXMuZGlydHlUcmFuc2Zvcm0gPSB0cnVlO1xuICAgIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBCYXNlIGRlc3Ryb3kgbWV0aG9kIGZvciBnZW5lcmljIGRpc3BsYXkgb2JqZWN0c1xuICpcbiAqL1xuRGlzcGxheU9iamVjdC5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uICgpXG57XG5cbiAgICB0aGlzLnBvc2l0aW9uID0gbnVsbDtcbiAgICB0aGlzLnNjYWxlID0gbnVsbDtcbiAgICB0aGlzLnBpdm90ID0gbnVsbDtcbiAgICB0aGlzLnNrZXcgPSBudWxsO1xuXG4gICAgdGhpcy5wYXJlbnQgPSBudWxsO1xuXG4gICAgdGhpcy5fYm91bmRzID0gbnVsbDtcbiAgICB0aGlzLl9jdXJyZW50Qm91bmRzID0gbnVsbDtcbiAgICB0aGlzLl9tYXNrID0gbnVsbDtcblxuICAgIHRoaXMud29ybGRUcmFuc2Zvcm0gPSBudWxsO1xuICAgIHRoaXMuZmlsdGVyQXJlYSA9IG51bGw7XG59O1xuIiwidmFyIENvbnRhaW5lciA9IHJlcXVpcmUoJy4uL2Rpc3BsYXkvQ29udGFpbmVyJyksXG4gICAgVGV4dHVyZSA9IHJlcXVpcmUoJy4uL3RleHR1cmVzL1RleHR1cmUnKSxcbiAgICBDYW52YXNCdWZmZXIgPSByZXF1aXJlKCcuLi9yZW5kZXJlcnMvY2FudmFzL3V0aWxzL0NhbnZhc0J1ZmZlcicpLFxuICAgIENhbnZhc0dyYXBoaWNzID0gcmVxdWlyZSgnLi4vcmVuZGVyZXJzL2NhbnZhcy91dGlscy9DYW52YXNHcmFwaGljcycpLFxuICAgIEdyYXBoaWNzRGF0YSA9IHJlcXVpcmUoJy4vR3JhcGhpY3NEYXRhJyksXG4gICAgbWF0aCA9IHJlcXVpcmUoJy4uL21hdGgnKSxcbiAgICBDT05TVCA9IHJlcXVpcmUoJy4uL2NvbnN0JyksXG4gICAgdGVtcFBvaW50ID0gbmV3IG1hdGguUG9pbnQoKTtcblxuLyoqXG4gKiBUaGUgR3JhcGhpY3MgY2xhc3MgY29udGFpbnMgbWV0aG9kcyB1c2VkIHRvIGRyYXcgcHJpbWl0aXZlIHNoYXBlcyBzdWNoIGFzIGxpbmVzLCBjaXJjbGVzIGFuZFxuICogcmVjdGFuZ2xlcyB0byB0aGUgZGlzcGxheSwgYW5kIHRvIGNvbG9yIGFuZCBmaWxsIHRoZW0uXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLkNvbnRhaW5lclxuICogQG1lbWJlcm9mIFBJWElcbiAqL1xuZnVuY3Rpb24gR3JhcGhpY3MoKVxue1xuICAgIENvbnRhaW5lci5jYWxsKHRoaXMpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGFscGhhIHZhbHVlIHVzZWQgd2hlbiBmaWxsaW5nIHRoZSBHcmFwaGljcyBvYmplY3QuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMVxuICAgICAqL1xuICAgIHRoaXMuZmlsbEFscGhhID0gMTtcblxuICAgIC8qKlxuICAgICAqIFRoZSB3aWR0aCAodGhpY2tuZXNzKSBvZiBhbnkgbGluZXMgZHJhd24uXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMFxuICAgICAqL1xuICAgIHRoaXMubGluZVdpZHRoID0gMDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBjb2xvciBvZiBhbnkgbGluZXMgZHJhd24uXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtzdHJpbmd9XG4gICAgICogQGRlZmF1bHQgMFxuICAgICAqL1xuICAgIHRoaXMubGluZUNvbG9yID0gMDtcblxuICAgIC8qKlxuICAgICAqIEdyYXBoaWNzIGRhdGFcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuR3JhcGhpY3NEYXRhW119XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLmdyYXBoaWNzRGF0YSA9IFtdO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHRpbnQgYXBwbGllZCB0byB0aGUgZ3JhcGhpYyBzaGFwZS4gVGhpcyBpcyBhIGhleCB2YWx1ZS4gQXBwbHkgYSB2YWx1ZSBvZiAweEZGRkZGRiB0byByZXNldCB0aGUgdGludC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAweEZGRkZGRlxuICAgICAqL1xuICAgIHRoaXMudGludCA9IDB4RkZGRkZGO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHByZXZpb3VzIHRpbnQgYXBwbGllZCB0byB0aGUgZ3JhcGhpYyBzaGFwZS4gVXNlZCB0byBjb21wYXJlIHRvIHRoZSBjdXJyZW50IHRpbnQgYW5kIGNoZWNrIGlmIHRoZXJlcyBjaGFuZ2UuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAZGVmYXVsdCAweEZGRkZGRlxuICAgICAqL1xuICAgIHRoaXMuX3ByZXZUaW50ID0gMHhGRkZGRkY7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYmxlbmQgbW9kZSB0byBiZSBhcHBsaWVkIHRvIHRoZSBncmFwaGljIHNoYXBlLiBBcHBseSBhIHZhbHVlIG9mIGBQSVhJLkJMRU5EX01PREVTLk5PUk1BTGAgdG8gcmVzZXQgdGhlIGJsZW5kIG1vZGUuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgUElYSS5CTEVORF9NT0RFUy5OT1JNQUw7XG4gICAgICogQHNlZSBQSVhJLkJMRU5EX01PREVTXG4gICAgICovXG4gICAgdGhpcy5ibGVuZE1vZGUgPSBDT05TVC5CTEVORF9NT0RFUy5OT1JNQUw7XG5cbiAgICAvKipcbiAgICAgKiBDdXJyZW50IHBhdGhcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuR3JhcGhpY3NEYXRhfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5jdXJyZW50UGF0aCA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBBcnJheSBjb250YWluaW5nIHNvbWUgV2ViR0wtcmVsYXRlZCBwcm9wZXJ0aWVzIHVzZWQgYnkgdGhlIFdlYkdMIHJlbmRlcmVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7b2JqZWN0PG51bWJlciwgb2JqZWN0Pn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIC8vIFRPRE8gLSBfd2ViZ2wgc2hvdWxkIHVzZSBhIHByb3RvdHlwZSBvYmplY3QsIG5vdCBhIHJhbmRvbSB1bmRvY3VtZW50ZWQgb2JqZWN0Li4uXG4gICAgdGhpcy5fd2ViR0wgPSB7fTtcblxuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgdGhpcyBzaGFwZSBpcyBiZWluZyB1c2VkIGFzIGEgbWFzay5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICovXG4gICAgdGhpcy5pc01hc2sgPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBib3VuZHMnIHBhZGRpbmcgdXNlZCBmb3IgYm91bmRzIGNhbGN1bGF0aW9uLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMuYm91bmRzUGFkZGluZyA9IDA7XG5cbiAgICAvKipcbiAgICAgKiBBIGNhY2hlIG9mIHRoZSBsb2NhbCBib3VuZHMgdG8gcHJldmVudCByZWNhbGN1bGF0aW9uLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5SZWN0YW5nbGV9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9sb2NhbEJvdW5kcyA9IG5ldyBtYXRoLlJlY3RhbmdsZSgwLDAsMSwxKTtcblxuICAgIC8qKlxuICAgICAqIFVzZWQgdG8gZGV0ZWN0IGlmIHRoZSBncmFwaGljcyBvYmplY3QgaGFzIGNoYW5nZWQuIElmIHRoaXMgaXMgc2V0IHRvIHRydWUgdGhlbiB0aGUgZ3JhcGhpY3NcbiAgICAgKiBvYmplY3Qgd2lsbCBiZSByZWNhbGN1bGF0ZWQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5kaXJ0eSA9IHRydWU7XG5cbiAgICAvKipcbiAgICAgKiBVc2VkIHRvIGRldGVjdCBpZiB0aGUgV2ViR0wgZ3JhcGhpY3Mgb2JqZWN0IGhhcyBjaGFuZ2VkLiBJZiB0aGlzIGlzIHNldCB0byB0cnVlIHRoZW4gdGhlXG4gICAgICogZ3JhcGhpY3Mgb2JqZWN0IHdpbGwgYmUgcmVjYWxjdWxhdGVkLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuZ2xEaXJ0eSA9IGZhbHNlO1xuXG4gICAgdGhpcy5ib3VuZHNEaXJ0eSA9IHRydWU7XG5cbiAgICAvKipcbiAgICAgKiBVc2VkIHRvIGRldGVjdCBpZiB0aGUgY2FjaGVkIHNwcml0ZSBvYmplY3QgbmVlZHMgdG8gYmUgdXBkYXRlZC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLmNhY2hlZFNwcml0ZURpcnR5ID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBXaGVuIGNhY2hlQXNCaXRtYXAgaXMgc2V0IHRvIHRydWUgdGhlIGdyYXBoaWNzIG9iamVjdCB3aWxsIGJlIHJlbmRlcmVkIGFzIGlmIGl0IHdhcyBhIHNwcml0ZS5cbiAgICAgKiBUaGlzIGlzIHVzZWZ1bCBpZiB5b3VyIGdyYXBoaWNzIGVsZW1lbnQgZG9lcyBub3QgY2hhbmdlIG9mdGVuLCBhcyBpdCB3aWxsIHNwZWVkIHVwIHRoZSByZW5kZXJpbmdcbiAgICAgKiBvZiB0aGUgb2JqZWN0IGluIGV4Y2hhbmdlIGZvciB0YWtpbmcgdXAgdGV4dHVyZSBtZW1vcnkuIEl0IGlzIGFsc28gdXNlZnVsIGlmIHlvdSBuZWVkIHRoZSBncmFwaGljc1xuICAgICAqIG9iamVjdCB0byBiZSBhbnRpLWFsaWFzZWQsIGJlY2F1c2UgaXQgd2lsbCBiZSByZW5kZXJlZCB1c2luZyBjYW52YXMuIFRoaXMgaXMgbm90IHJlY29tbWVuZGVkIGlmXG4gICAgICogeW91IGFyZSBjb25zdGFudGx5IHJlZHJhd2luZyB0aGUgZ3JhcGhpY3MgZWxlbWVudC5cbiAgICAgKlxuICAgICAqIEBuYW1lIGNhY2hlQXNCaXRtYXBcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLkdyYXBoaWNzI1xuICAgICAqIEBkZWZhdWx0IGZhbHNlXG4gICAgICovXG59XG5cbi8vIGNvbnN0cnVjdG9yXG5HcmFwaGljcy5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKENvbnRhaW5lci5wcm90b3R5cGUpO1xuR3JhcGhpY3MucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gR3JhcGhpY3M7XG5tb2R1bGUuZXhwb3J0cyA9IEdyYXBoaWNzO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBuZXcgR3JhcGhpY3Mgb2JqZWN0IHdpdGggdGhlIHNhbWUgdmFsdWVzIGFzIHRoaXMgb25lLlxuICogTm90ZSB0aGF0IHRoZSBvbmx5IHRoZSBwcm9wZXJ0aWVzIG9mIHRoZSBvYmplY3QgYXJlIGNsb25lZCwgbm90IGl0cyB0cmFuc2Zvcm0gKHBvc2l0aW9uLHNjYWxlLGV0YylcbiAqXG4gKiBAcmV0dXJuIHtQSVhJLkdyYXBoaWNzfVxuICovXG5HcmFwaGljcy5wcm90b3R5cGUuY2xvbmUgPSBmdW5jdGlvbiAoKVxue1xuICAgIHZhciBjbG9uZSA9IG5ldyBHcmFwaGljcygpO1xuXG4gICAgY2xvbmUucmVuZGVyYWJsZSAgICA9IHRoaXMucmVuZGVyYWJsZTtcbiAgICBjbG9uZS5maWxsQWxwaGEgICAgID0gdGhpcy5maWxsQWxwaGE7XG4gICAgY2xvbmUubGluZVdpZHRoICAgICA9IHRoaXMubGluZVdpZHRoO1xuICAgIGNsb25lLmxpbmVDb2xvciAgICAgPSB0aGlzLmxpbmVDb2xvcjtcbiAgICBjbG9uZS50aW50ICAgICAgICAgID0gdGhpcy50aW50O1xuICAgIGNsb25lLmJsZW5kTW9kZSAgICAgPSB0aGlzLmJsZW5kTW9kZTtcbiAgICBjbG9uZS5pc01hc2sgICAgICAgID0gdGhpcy5pc01hc2s7XG4gICAgY2xvbmUuYm91bmRzUGFkZGluZyA9IHRoaXMuYm91bmRzUGFkZGluZztcbiAgICBjbG9uZS5kaXJ0eSAgICAgICAgID0gdHJ1ZTtcbiAgICBjbG9uZS5nbERpcnR5ICAgICAgID0gdHJ1ZTtcbiAgICBjbG9uZS5jYWNoZWRTcHJpdGVEaXJ0eSA9IHRoaXMuY2FjaGVkU3ByaXRlRGlydHk7XG5cbiAgICAvLyBjb3B5IGdyYXBoaWNzIGRhdGFcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuZ3JhcGhpY3NEYXRhLmxlbmd0aDsgKytpKVxuICAgIHtcbiAgICAgICAgY2xvbmUuZ3JhcGhpY3NEYXRhLnB1c2godGhpcy5ncmFwaGljc0RhdGFbaV0uY2xvbmUoKSk7XG4gICAgfVxuXG4gICAgY2xvbmUuY3VycmVudFBhdGggPSBjbG9uZS5ncmFwaGljc0RhdGFbY2xvbmUuZ3JhcGhpY3NEYXRhLmxlbmd0aCAtIDFdO1xuXG4gICAgY2xvbmUudXBkYXRlTG9jYWxCb3VuZHMoKTtcblxuICAgIHJldHVybiBjbG9uZTtcbn07XG5cbi8qKlxuICogU3BlY2lmaWVzIHRoZSBsaW5lIHN0eWxlIHVzZWQgZm9yIHN1YnNlcXVlbnQgY2FsbHMgdG8gR3JhcGhpY3MgbWV0aG9kcyBzdWNoIGFzIHRoZSBsaW5lVG8oKSBtZXRob2Qgb3IgdGhlIGRyYXdDaXJjbGUoKSBtZXRob2QuXG4gKlxuICogQHBhcmFtIGxpbmVXaWR0aCB7bnVtYmVyfSB3aWR0aCBvZiB0aGUgbGluZSB0byBkcmF3LCB3aWxsIHVwZGF0ZSB0aGUgb2JqZWN0cyBzdG9yZWQgc3R5bGVcbiAqIEBwYXJhbSBjb2xvciB7bnVtYmVyfSBjb2xvciBvZiB0aGUgbGluZSB0byBkcmF3LCB3aWxsIHVwZGF0ZSB0aGUgb2JqZWN0cyBzdG9yZWQgc3R5bGVcbiAqIEBwYXJhbSBhbHBoYSB7bnVtYmVyfSBhbHBoYSBvZiB0aGUgbGluZSB0byBkcmF3LCB3aWxsIHVwZGF0ZSB0aGUgb2JqZWN0cyBzdG9yZWQgc3R5bGVcbiAqIEByZXR1cm4ge1BJWEkuR3JhcGhpY3N9XG4gKi9cbkdyYXBoaWNzLnByb3RvdHlwZS5saW5lU3R5bGUgPSBmdW5jdGlvbiAobGluZVdpZHRoLCBjb2xvciwgYWxwaGEpXG57XG4gICAgdGhpcy5saW5lV2lkdGggPSBsaW5lV2lkdGggfHwgMDtcbiAgICB0aGlzLmxpbmVDb2xvciA9IGNvbG9yIHx8IDA7XG4gICAgdGhpcy5saW5lQWxwaGEgPSAoYWxwaGEgPT09IHVuZGVmaW5lZCkgPyAxIDogYWxwaGE7XG5cbiAgICBpZiAodGhpcy5jdXJyZW50UGF0aClcbiAgICB7XG4gICAgICAgIGlmICh0aGlzLmN1cnJlbnRQYXRoLnNoYXBlLnBvaW50cy5sZW5ndGgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIC8vIGhhbGZ3YXkgdGhyb3VnaCBhIGxpbmU/IHN0YXJ0IGEgbmV3IG9uZSFcbiAgICAgICAgICAgIHZhciBzaGFwZSA9IG5ldyBtYXRoLlBvbHlnb24odGhpcy5jdXJyZW50UGF0aC5zaGFwZS5wb2ludHMuc2xpY2UoLTIpKTtcbiAgICAgICAgICAgIHNoYXBlLmNsb3NlZCA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5kcmF3U2hhcGUoc2hhcGUpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2VcbiAgICAgICAge1xuICAgICAgICAgICAgLy8gb3RoZXJ3aXNlIGl0cyBlbXB0eSBzbyBsZXRzIGp1c3Qgc2V0IHRoZSBsaW5lIHByb3BlcnRpZXNcbiAgICAgICAgICAgIHRoaXMuY3VycmVudFBhdGgubGluZVdpZHRoID0gdGhpcy5saW5lV2lkdGg7XG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRQYXRoLmxpbmVDb2xvciA9IHRoaXMubGluZUNvbG9yO1xuICAgICAgICAgICAgdGhpcy5jdXJyZW50UGF0aC5saW5lQWxwaGEgPSB0aGlzLmxpbmVBbHBoYTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBNb3ZlcyB0aGUgY3VycmVudCBkcmF3aW5nIHBvc2l0aW9uIHRvIHgsIHkuXG4gKlxuICogQHBhcmFtIHgge251bWJlcn0gdGhlIFggY29vcmRpbmF0ZSB0byBtb3ZlIHRvXG4gKiBAcGFyYW0geSB7bnVtYmVyfSB0aGUgWSBjb29yZGluYXRlIHRvIG1vdmUgdG9cbiAqIEByZXR1cm4ge1BJWEkuR3JhcGhpY3N9XG4gICovXG5HcmFwaGljcy5wcm90b3R5cGUubW92ZVRvID0gZnVuY3Rpb24gKHgsIHkpXG57XG4gICAgdmFyIHNoYXBlID0gbmV3IG1hdGguUG9seWdvbihbeCx5XSk7XG4gICAgc2hhcGUuY2xvc2VkID0gZmFsc2U7XG4gICAgdGhpcy5kcmF3U2hhcGUoc2hhcGUpO1xuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIERyYXdzIGEgbGluZSB1c2luZyB0aGUgY3VycmVudCBsaW5lIHN0eWxlIGZyb20gdGhlIGN1cnJlbnQgZHJhd2luZyBwb3NpdGlvbiB0byAoeCwgeSk7XG4gKiBUaGUgY3VycmVudCBkcmF3aW5nIHBvc2l0aW9uIGlzIHRoZW4gc2V0IHRvICh4LCB5KS5cbiAqXG4gKiBAcGFyYW0geCB7bnVtYmVyfSB0aGUgWCBjb29yZGluYXRlIHRvIGRyYXcgdG9cbiAqIEBwYXJhbSB5IHtudW1iZXJ9IHRoZSBZIGNvb3JkaW5hdGUgdG8gZHJhdyB0b1xuICogQHJldHVybiB7UElYSS5HcmFwaGljc31cbiAqL1xuR3JhcGhpY3MucHJvdG90eXBlLmxpbmVUbyA9IGZ1bmN0aW9uICh4LCB5KVxue1xuICAgIHRoaXMuY3VycmVudFBhdGguc2hhcGUucG9pbnRzLnB1c2goeCwgeSk7XG4gICAgdGhpcy5kaXJ0eSA9IHRydWU7XG5cbiAgICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogQ2FsY3VsYXRlIHRoZSBwb2ludHMgZm9yIGEgcXVhZHJhdGljIGJlemllciBjdXJ2ZSBhbmQgdGhlbiBkcmF3cyBpdC5cbiAqIEJhc2VkIG9uOiBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy83ODUwOTcvaG93LWRvLWktaW1wbGVtZW50LWEtYmV6aWVyLWN1cnZlLWluLWNcbiAqXG4gKiBAcGFyYW0gY3BYIHtudW1iZXJ9IENvbnRyb2wgcG9pbnQgeFxuICogQHBhcmFtIGNwWSB7bnVtYmVyfSBDb250cm9sIHBvaW50IHlcbiAqIEBwYXJhbSB0b1gge251bWJlcn0gRGVzdGluYXRpb24gcG9pbnQgeFxuICogQHBhcmFtIHRvWSB7bnVtYmVyfSBEZXN0aW5hdGlvbiBwb2ludCB5XG4gKiBAcmV0dXJuIHtQSVhJLkdyYXBoaWNzfVxuICovXG5HcmFwaGljcy5wcm90b3R5cGUucXVhZHJhdGljQ3VydmVUbyA9IGZ1bmN0aW9uIChjcFgsIGNwWSwgdG9YLCB0b1kpXG57XG4gICAgaWYgKHRoaXMuY3VycmVudFBhdGgpXG4gICAge1xuICAgICAgICBpZiAodGhpcy5jdXJyZW50UGF0aC5zaGFwZS5wb2ludHMubGVuZ3RoID09PSAwKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRQYXRoLnNoYXBlLnBvaW50cyA9IFswLCAwXTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICB0aGlzLm1vdmVUbygwLDApO1xuICAgIH1cblxuICAgIHZhciB4YSxcbiAgICAgICAgeWEsXG4gICAgICAgIG4gPSAyMCxcbiAgICAgICAgcG9pbnRzID0gdGhpcy5jdXJyZW50UGF0aC5zaGFwZS5wb2ludHM7XG5cbiAgICBpZiAocG9pbnRzLmxlbmd0aCA9PT0gMClcbiAgICB7XG4gICAgICAgIHRoaXMubW92ZVRvKDAsIDApO1xuICAgIH1cblxuICAgIHZhciBmcm9tWCA9IHBvaW50c1twb2ludHMubGVuZ3RoLTJdO1xuICAgIHZhciBmcm9tWSA9IHBvaW50c1twb2ludHMubGVuZ3RoLTFdO1xuXG4gICAgdmFyIGogPSAwO1xuICAgIGZvciAodmFyIGkgPSAxOyBpIDw9IG47ICsraSlcbiAgICB7XG4gICAgICAgIGogPSBpIC8gbjtcblxuICAgICAgICB4YSA9IGZyb21YICsgKCAoY3BYIC0gZnJvbVgpICogaiApO1xuICAgICAgICB5YSA9IGZyb21ZICsgKCAoY3BZIC0gZnJvbVkpICogaiApO1xuXG4gICAgICAgIHBvaW50cy5wdXNoKCB4YSArICggKChjcFggKyAoICh0b1ggLSBjcFgpICogaiApKSAtIHhhKSAqIGogKSxcbiAgICAgICAgICAgICAgICAgICAgIHlhICsgKCAoKGNwWSArICggKHRvWSAtIGNwWSkgKiBqICkpIC0geWEpICogaiApICk7XG4gICAgfVxuXG4gICAgdGhpcy5kaXJ0eSA9IHRoaXMuYm91bmRzRGlydHkgPSB0cnVlO1xuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIENhbGN1bGF0ZSB0aGUgcG9pbnRzIGZvciBhIGJlemllciBjdXJ2ZSBhbmQgdGhlbiBkcmF3cyBpdC5cbiAqXG4gKiBAcGFyYW0gY3BYIHtudW1iZXJ9IENvbnRyb2wgcG9pbnQgeFxuICogQHBhcmFtIGNwWSB7bnVtYmVyfSBDb250cm9sIHBvaW50IHlcbiAqIEBwYXJhbSBjcFgyIHtudW1iZXJ9IFNlY29uZCBDb250cm9sIHBvaW50IHhcbiAqIEBwYXJhbSBjcFkyIHtudW1iZXJ9IFNlY29uZCBDb250cm9sIHBvaW50IHlcbiAqIEBwYXJhbSB0b1gge251bWJlcn0gRGVzdGluYXRpb24gcG9pbnQgeFxuICogQHBhcmFtIHRvWSB7bnVtYmVyfSBEZXN0aW5hdGlvbiBwb2ludCB5XG4gKiBAcmV0dXJuIHtQSVhJLkdyYXBoaWNzfVxuICovXG5HcmFwaGljcy5wcm90b3R5cGUuYmV6aWVyQ3VydmVUbyA9IGZ1bmN0aW9uIChjcFgsIGNwWSwgY3BYMiwgY3BZMiwgdG9YLCB0b1kpXG57XG4gICAgaWYgKHRoaXMuY3VycmVudFBhdGgpXG4gICAge1xuICAgICAgICBpZiAodGhpcy5jdXJyZW50UGF0aC5zaGFwZS5wb2ludHMubGVuZ3RoID09PSAwKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRQYXRoLnNoYXBlLnBvaW50cyA9IFswLCAwXTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICB0aGlzLm1vdmVUbygwLDApO1xuICAgIH1cblxuICAgIHZhciBuID0gMjAsXG4gICAgICAgIGR0LFxuICAgICAgICBkdDIsXG4gICAgICAgIGR0MyxcbiAgICAgICAgdDIsXG4gICAgICAgIHQzLFxuICAgICAgICBwb2ludHMgPSB0aGlzLmN1cnJlbnRQYXRoLnNoYXBlLnBvaW50cztcblxuICAgIHZhciBmcm9tWCA9IHBvaW50c1twb2ludHMubGVuZ3RoLTJdO1xuICAgIHZhciBmcm9tWSA9IHBvaW50c1twb2ludHMubGVuZ3RoLTFdO1xuXG4gICAgdmFyIGogPSAwO1xuXG4gICAgZm9yICh2YXIgaSA9IDE7IGkgPD0gbjsgKytpKVxuICAgIHtcbiAgICAgICAgaiA9IGkgLyBuO1xuXG4gICAgICAgIGR0ID0gKDEgLSBqKTtcbiAgICAgICAgZHQyID0gZHQgKiBkdDtcbiAgICAgICAgZHQzID0gZHQyICogZHQ7XG5cbiAgICAgICAgdDIgPSBqICogajtcbiAgICAgICAgdDMgPSB0MiAqIGo7XG5cbiAgICAgICAgcG9pbnRzLnB1c2goIGR0MyAqIGZyb21YICsgMyAqIGR0MiAqIGogKiBjcFggKyAzICogZHQgKiB0MiAqIGNwWDIgKyB0MyAqIHRvWCxcbiAgICAgICAgICAgICAgICAgICAgIGR0MyAqIGZyb21ZICsgMyAqIGR0MiAqIGogKiBjcFkgKyAzICogZHQgKiB0MiAqIGNwWTIgKyB0MyAqIHRvWSk7XG4gICAgfVxuXG4gICAgdGhpcy5kaXJ0eSA9IHRoaXMuYm91bmRzRGlydHkgPSB0cnVlO1xuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIFRoZSBhcmNUbygpIG1ldGhvZCBjcmVhdGVzIGFuIGFyYy9jdXJ2ZSBiZXR3ZWVuIHR3byB0YW5nZW50cyBvbiB0aGUgY2FudmFzLlxuICpcbiAqIFwiYm9ycm93ZWRcIiBmcm9tIGh0dHBzOi8vY29kZS5nb29nbGUuY29tL3AvZnhjYW52YXMvIC0gdGhhbmtzIGdvb2dsZSFcbiAqXG4gKiBAcGFyYW0geDEge251bWJlcn0gVGhlIHgtY29vcmRpbmF0ZSBvZiB0aGUgYmVnaW5uaW5nIG9mIHRoZSBhcmNcbiAqIEBwYXJhbSB5MSB7bnVtYmVyfSBUaGUgeS1jb29yZGluYXRlIG9mIHRoZSBiZWdpbm5pbmcgb2YgdGhlIGFyY1xuICogQHBhcmFtIHgyIHtudW1iZXJ9IFRoZSB4LWNvb3JkaW5hdGUgb2YgdGhlIGVuZCBvZiB0aGUgYXJjXG4gKiBAcGFyYW0geTIge251bWJlcn0gVGhlIHktY29vcmRpbmF0ZSBvZiB0aGUgZW5kIG9mIHRoZSBhcmNcbiAqIEBwYXJhbSByYWRpdXMge251bWJlcn0gVGhlIHJhZGl1cyBvZiB0aGUgYXJjXG4gKiBAcmV0dXJuIHtQSVhJLkdyYXBoaWNzfVxuICovXG5HcmFwaGljcy5wcm90b3R5cGUuYXJjVG8gPSBmdW5jdGlvbiAoeDEsIHkxLCB4MiwgeTIsIHJhZGl1cylcbntcbiAgICBpZiAodGhpcy5jdXJyZW50UGF0aClcbiAgICB7XG4gICAgICAgIGlmICh0aGlzLmN1cnJlbnRQYXRoLnNoYXBlLnBvaW50cy5sZW5ndGggPT09IDApXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuY3VycmVudFBhdGguc2hhcGUucG9pbnRzLnB1c2goeDEsIHkxKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICB0aGlzLm1vdmVUbyh4MSwgeTEpO1xuICAgIH1cblxuICAgIHZhciBwb2ludHMgPSB0aGlzLmN1cnJlbnRQYXRoLnNoYXBlLnBvaW50cyxcbiAgICAgICAgZnJvbVggPSBwb2ludHNbcG9pbnRzLmxlbmd0aC0yXSxcbiAgICAgICAgZnJvbVkgPSBwb2ludHNbcG9pbnRzLmxlbmd0aC0xXSxcbiAgICAgICAgYTEgPSBmcm9tWSAtIHkxLFxuICAgICAgICBiMSA9IGZyb21YIC0geDEsXG4gICAgICAgIGEyID0geTIgICAtIHkxLFxuICAgICAgICBiMiA9IHgyICAgLSB4MSxcbiAgICAgICAgbW0gPSBNYXRoLmFicyhhMSAqIGIyIC0gYjEgKiBhMik7XG5cbiAgICBpZiAobW0gPCAxLjBlLTggfHwgcmFkaXVzID09PSAwKVxuICAgIHtcbiAgICAgICAgaWYgKHBvaW50c1twb2ludHMubGVuZ3RoLTJdICE9PSB4MSB8fCBwb2ludHNbcG9pbnRzLmxlbmd0aC0xXSAhPT0geTEpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHBvaW50cy5wdXNoKHgxLCB5MSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgdmFyIGRkID0gYTEgKiBhMSArIGIxICogYjEsXG4gICAgICAgICAgICBjYyA9IGEyICogYTIgKyBiMiAqIGIyLFxuICAgICAgICAgICAgdHQgPSBhMSAqIGEyICsgYjEgKiBiMixcbiAgICAgICAgICAgIGsxID0gcmFkaXVzICogTWF0aC5zcXJ0KGRkKSAvIG1tLFxuICAgICAgICAgICAgazIgPSByYWRpdXMgKiBNYXRoLnNxcnQoY2MpIC8gbW0sXG4gICAgICAgICAgICBqMSA9IGsxICogdHQgLyBkZCxcbiAgICAgICAgICAgIGoyID0gazIgKiB0dCAvIGNjLFxuICAgICAgICAgICAgY3ggPSBrMSAqIGIyICsgazIgKiBiMSxcbiAgICAgICAgICAgIGN5ID0gazEgKiBhMiArIGsyICogYTEsXG4gICAgICAgICAgICBweCA9IGIxICogKGsyICsgajEpLFxuICAgICAgICAgICAgcHkgPSBhMSAqIChrMiArIGoxKSxcbiAgICAgICAgICAgIHF4ID0gYjIgKiAoazEgKyBqMiksXG4gICAgICAgICAgICBxeSA9IGEyICogKGsxICsgajIpLFxuICAgICAgICAgICAgc3RhcnRBbmdsZSA9IE1hdGguYXRhbjIocHkgLSBjeSwgcHggLSBjeCksXG4gICAgICAgICAgICBlbmRBbmdsZSAgID0gTWF0aC5hdGFuMihxeSAtIGN5LCBxeCAtIGN4KTtcblxuICAgICAgICB0aGlzLmFyYyhjeCArIHgxLCBjeSArIHkxLCByYWRpdXMsIHN0YXJ0QW5nbGUsIGVuZEFuZ2xlLCBiMSAqIGEyID4gYjIgKiBhMSk7XG4gICAgfVxuXG4gICAgdGhpcy5kaXJ0eSA9IHRoaXMuYm91bmRzRGlydHkgPSB0cnVlO1xuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIFRoZSBhcmMgbWV0aG9kIGNyZWF0ZXMgYW4gYXJjL2N1cnZlICh1c2VkIHRvIGNyZWF0ZSBjaXJjbGVzLCBvciBwYXJ0cyBvZiBjaXJjbGVzKS5cbiAqXG4gKiBAcGFyYW0gY3gge251bWJlcn0gVGhlIHgtY29vcmRpbmF0ZSBvZiB0aGUgY2VudGVyIG9mIHRoZSBjaXJjbGVcbiAqIEBwYXJhbSBjeSB7bnVtYmVyfSBUaGUgeS1jb29yZGluYXRlIG9mIHRoZSBjZW50ZXIgb2YgdGhlIGNpcmNsZVxuICogQHBhcmFtIHJhZGl1cyB7bnVtYmVyfSBUaGUgcmFkaXVzIG9mIHRoZSBjaXJjbGVcbiAqIEBwYXJhbSBzdGFydEFuZ2xlIHtudW1iZXJ9IFRoZSBzdGFydGluZyBhbmdsZSwgaW4gcmFkaWFucyAoMCBpcyBhdCB0aGUgMyBvJ2Nsb2NrIHBvc2l0aW9uIG9mIHRoZSBhcmMncyBjaXJjbGUpXG4gKiBAcGFyYW0gZW5kQW5nbGUge251bWJlcn0gVGhlIGVuZGluZyBhbmdsZSwgaW4gcmFkaWFuc1xuICogQHBhcmFtIGFudGljbG9ja3dpc2Uge2Jvb2xlYW59IE9wdGlvbmFsLiBTcGVjaWZpZXMgd2hldGhlciB0aGUgZHJhd2luZyBzaG91bGQgYmUgY291bnRlcmNsb2Nrd2lzZSBvciBjbG9ja3dpc2UuIEZhbHNlIGlzIGRlZmF1bHQsIGFuZCBpbmRpY2F0ZXMgY2xvY2t3aXNlLCB3aGlsZSB0cnVlIGluZGljYXRlcyBjb3VudGVyLWNsb2Nrd2lzZS5cbiAqIEByZXR1cm4ge1BJWEkuR3JhcGhpY3N9XG4gKi9cbkdyYXBoaWNzLnByb3RvdHlwZS5hcmMgPSBmdW5jdGlvbihjeCwgY3ksIHJhZGl1cywgc3RhcnRBbmdsZSwgZW5kQW5nbGUsIGFudGljbG9ja3dpc2UpXG57XG4gICAgYW50aWNsb2Nrd2lzZSA9IGFudGljbG9ja3dpc2UgfHwgZmFsc2U7XG5cbiAgICBpZiAoc3RhcnRBbmdsZSA9PT0gZW5kQW5nbGUpXG4gICAge1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBpZiggIWFudGljbG9ja3dpc2UgJiYgZW5kQW5nbGUgPD0gc3RhcnRBbmdsZSApXG4gICAge1xuICAgICAgICBlbmRBbmdsZSArPSBNYXRoLlBJICogMjtcbiAgICB9XG4gICAgZWxzZSBpZiggYW50aWNsb2Nrd2lzZSAmJiBzdGFydEFuZ2xlIDw9IGVuZEFuZ2xlIClcbiAgICB7XG4gICAgICAgIHN0YXJ0QW5nbGUgKz0gTWF0aC5QSSAqIDI7XG4gICAgfVxuXG4gICAgdmFyIHN3ZWVwID0gYW50aWNsb2Nrd2lzZSA/IChzdGFydEFuZ2xlIC0gZW5kQW5nbGUpICogLTEgOiAoZW5kQW5nbGUgLSBzdGFydEFuZ2xlKTtcbiAgICB2YXIgc2VncyA9ICBNYXRoLmNlaWwoTWF0aC5hYnMoc3dlZXApIC8gKE1hdGguUEkgKiAyKSkgKiA0MDtcblxuICAgIGlmKHN3ZWVwID09PSAwKVxuICAgIHtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgdmFyIHN0YXJ0WCA9IGN4ICsgTWF0aC5jb3Moc3RhcnRBbmdsZSkgKiByYWRpdXM7XG4gICAgdmFyIHN0YXJ0WSA9IGN5ICsgTWF0aC5zaW4oc3RhcnRBbmdsZSkgKiByYWRpdXM7XG5cbiAgICBpZiAodGhpcy5jdXJyZW50UGF0aClcbiAgICB7XG4gICAgICAgIHRoaXMuY3VycmVudFBhdGguc2hhcGUucG9pbnRzLnB1c2goc3RhcnRYLCBzdGFydFkpO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICB0aGlzLm1vdmVUbyhzdGFydFgsIHN0YXJ0WSk7XG4gICAgfVxuXG4gICAgdmFyIHBvaW50cyA9IHRoaXMuY3VycmVudFBhdGguc2hhcGUucG9pbnRzO1xuXG4gICAgdmFyIHRoZXRhID0gc3dlZXAvKHNlZ3MqMik7XG4gICAgdmFyIHRoZXRhMiA9IHRoZXRhKjI7XG5cbiAgICB2YXIgY1RoZXRhID0gTWF0aC5jb3ModGhldGEpO1xuICAgIHZhciBzVGhldGEgPSBNYXRoLnNpbih0aGV0YSk7XG5cbiAgICB2YXIgc2VnTWludXMgPSBzZWdzIC0gMTtcblxuICAgIHZhciByZW1haW5kZXIgPSAoIHNlZ01pbnVzICUgMSApIC8gc2VnTWludXM7XG5cbiAgICBmb3IodmFyIGk9MDsgaTw9c2VnTWludXM7IGkrKylcbiAgICB7XG4gICAgICAgIHZhciByZWFsID0gIGkgKyByZW1haW5kZXIgKiBpO1xuXG5cbiAgICAgICAgdmFyIGFuZ2xlID0gKCh0aGV0YSkgKyBzdGFydEFuZ2xlICsgKHRoZXRhMiAqIHJlYWwpKTtcblxuICAgICAgICB2YXIgYyA9IE1hdGguY29zKGFuZ2xlKTtcbiAgICAgICAgdmFyIHMgPSAtTWF0aC5zaW4oYW5nbGUpO1xuXG4gICAgICAgIHBvaW50cy5wdXNoKCggKGNUaGV0YSAqICBjKSArIChzVGhldGEgKiBzKSApICogcmFkaXVzICsgY3gsXG4gICAgICAgICAgICAgICAgICAgICggKGNUaGV0YSAqIC1zKSArIChzVGhldGEgKiBjKSApICogcmFkaXVzICsgY3kpO1xuICAgIH1cblxuICAgIHRoaXMuZGlydHkgPSB0aGlzLmJvdW5kc0RpcnR5ID0gdHJ1ZTtcblxuICAgIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBTcGVjaWZpZXMgYSBzaW1wbGUgb25lLWNvbG9yIGZpbGwgdGhhdCBzdWJzZXF1ZW50IGNhbGxzIHRvIG90aGVyIEdyYXBoaWNzIG1ldGhvZHNcbiAqIChzdWNoIGFzIGxpbmVUbygpIG9yIGRyYXdDaXJjbGUoKSkgdXNlIHdoZW4gZHJhd2luZy5cbiAqXG4gKiBAcGFyYW0gY29sb3Ige251bWJlcn0gdGhlIGNvbG9yIG9mIHRoZSBmaWxsXG4gKiBAcGFyYW0gYWxwaGEge251bWJlcn0gdGhlIGFscGhhIG9mIHRoZSBmaWxsXG4gKiBAcmV0dXJuIHtQSVhJLkdyYXBoaWNzfVxuICovXG5HcmFwaGljcy5wcm90b3R5cGUuYmVnaW5GaWxsID0gZnVuY3Rpb24gKGNvbG9yLCBhbHBoYSlcbntcbiAgICB0aGlzLmZpbGxpbmcgPSB0cnVlO1xuICAgIHRoaXMuZmlsbENvbG9yID0gY29sb3IgfHwgMDtcbiAgICB0aGlzLmZpbGxBbHBoYSA9IChhbHBoYSA9PT0gdW5kZWZpbmVkKSA/IDEgOiBhbHBoYTtcblxuICAgIGlmICh0aGlzLmN1cnJlbnRQYXRoKVxuICAgIHtcbiAgICAgICAgaWYgKHRoaXMuY3VycmVudFBhdGguc2hhcGUucG9pbnRzLmxlbmd0aCA8PSAyKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRQYXRoLmZpbGwgPSB0aGlzLmZpbGxpbmc7XG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRQYXRoLmZpbGxDb2xvciA9IHRoaXMuZmlsbENvbG9yO1xuICAgICAgICAgICAgdGhpcy5jdXJyZW50UGF0aC5maWxsQWxwaGEgPSB0aGlzLmZpbGxBbHBoYTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogQXBwbGllcyBhIGZpbGwgdG8gdGhlIGxpbmVzIGFuZCBzaGFwZXMgdGhhdCB3ZXJlIGFkZGVkIHNpbmNlIHRoZSBsYXN0IGNhbGwgdG8gdGhlIGJlZ2luRmlsbCgpIG1ldGhvZC5cbiAqXG4gKiBAcmV0dXJuIHtHcmFwaGljc31cbiAqL1xuR3JhcGhpY3MucHJvdG90eXBlLmVuZEZpbGwgPSBmdW5jdGlvbiAoKVxue1xuICAgIHRoaXMuZmlsbGluZyA9IGZhbHNlO1xuICAgIHRoaXMuZmlsbENvbG9yID0gbnVsbDtcbiAgICB0aGlzLmZpbGxBbHBoYSA9IDE7XG5cbiAgICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICpcbiAqIEBwYXJhbSB4IHtudW1iZXJ9IFRoZSBYIGNvb3JkIG9mIHRoZSB0b3AtbGVmdCBvZiB0aGUgcmVjdGFuZ2xlXG4gKiBAcGFyYW0geSB7bnVtYmVyfSBUaGUgWSBjb29yZCBvZiB0aGUgdG9wLWxlZnQgb2YgdGhlIHJlY3RhbmdsZVxuICogQHBhcmFtIHdpZHRoIHtudW1iZXJ9IFRoZSB3aWR0aCBvZiB0aGUgcmVjdGFuZ2xlXG4gKiBAcGFyYW0gaGVpZ2h0IHtudW1iZXJ9IFRoZSBoZWlnaHQgb2YgdGhlIHJlY3RhbmdsZVxuICogQHJldHVybiB7UElYSS5HcmFwaGljc31cbiAqL1xuR3JhcGhpY3MucHJvdG90eXBlLmRyYXdSZWN0ID0gZnVuY3Rpb24gKCB4LCB5LCB3aWR0aCwgaGVpZ2h0IClcbntcbiAgICB0aGlzLmRyYXdTaGFwZShuZXcgbWF0aC5SZWN0YW5nbGUoeCx5LCB3aWR0aCwgaGVpZ2h0KSk7XG5cbiAgICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICpcbiAqIEBwYXJhbSB4IHtudW1iZXJ9IFRoZSBYIGNvb3JkIG9mIHRoZSB0b3AtbGVmdCBvZiB0aGUgcmVjdGFuZ2xlXG4gKiBAcGFyYW0geSB7bnVtYmVyfSBUaGUgWSBjb29yZCBvZiB0aGUgdG9wLWxlZnQgb2YgdGhlIHJlY3RhbmdsZVxuICogQHBhcmFtIHdpZHRoIHtudW1iZXJ9IFRoZSB3aWR0aCBvZiB0aGUgcmVjdGFuZ2xlXG4gKiBAcGFyYW0gaGVpZ2h0IHtudW1iZXJ9IFRoZSBoZWlnaHQgb2YgdGhlIHJlY3RhbmdsZVxuICogQHBhcmFtIHJhZGl1cyB7bnVtYmVyfSBSYWRpdXMgb2YgdGhlIHJlY3RhbmdsZSBjb3JuZXJzXG4gKiBAcmV0dXJuIHtQSVhJLkdyYXBoaWNzfVxuICovXG5HcmFwaGljcy5wcm90b3R5cGUuZHJhd1JvdW5kZWRSZWN0ID0gZnVuY3Rpb24gKCB4LCB5LCB3aWR0aCwgaGVpZ2h0LCByYWRpdXMgKVxue1xuICAgIHRoaXMuZHJhd1NoYXBlKG5ldyBtYXRoLlJvdW5kZWRSZWN0YW5nbGUoeCwgeSwgd2lkdGgsIGhlaWdodCwgcmFkaXVzKSk7XG5cbiAgICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogRHJhd3MgYSBjaXJjbGUuXG4gKlxuICogQHBhcmFtIHgge251bWJlcn0gVGhlIFggY29vcmRpbmF0ZSBvZiB0aGUgY2VudGVyIG9mIHRoZSBjaXJjbGVcbiAqIEBwYXJhbSB5IHtudW1iZXJ9IFRoZSBZIGNvb3JkaW5hdGUgb2YgdGhlIGNlbnRlciBvZiB0aGUgY2lyY2xlXG4gKiBAcGFyYW0gcmFkaXVzIHtudW1iZXJ9IFRoZSByYWRpdXMgb2YgdGhlIGNpcmNsZVxuICogQHJldHVybiB7UElYSS5HcmFwaGljc31cbiAqL1xuR3JhcGhpY3MucHJvdG90eXBlLmRyYXdDaXJjbGUgPSBmdW5jdGlvbiAoeCwgeSwgcmFkaXVzKVxue1xuICAgIHRoaXMuZHJhd1NoYXBlKG5ldyBtYXRoLkNpcmNsZSh4LHksIHJhZGl1cykpO1xuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIERyYXdzIGFuIGVsbGlwc2UuXG4gKlxuICogQHBhcmFtIHgge251bWJlcn0gVGhlIFggY29vcmRpbmF0ZSBvZiB0aGUgY2VudGVyIG9mIHRoZSBlbGxpcHNlXG4gKiBAcGFyYW0geSB7bnVtYmVyfSBUaGUgWSBjb29yZGluYXRlIG9mIHRoZSBjZW50ZXIgb2YgdGhlIGVsbGlwc2VcbiAqIEBwYXJhbSB3aWR0aCB7bnVtYmVyfSBUaGUgaGFsZiB3aWR0aCBvZiB0aGUgZWxsaXBzZVxuICogQHBhcmFtIGhlaWdodCB7bnVtYmVyfSBUaGUgaGFsZiBoZWlnaHQgb2YgdGhlIGVsbGlwc2VcbiAqIEByZXR1cm4ge1BJWEkuR3JhcGhpY3N9XG4gKi9cbkdyYXBoaWNzLnByb3RvdHlwZS5kcmF3RWxsaXBzZSA9IGZ1bmN0aW9uICh4LCB5LCB3aWR0aCwgaGVpZ2h0KVxue1xuICAgIHRoaXMuZHJhd1NoYXBlKG5ldyBtYXRoLkVsbGlwc2UoeCwgeSwgd2lkdGgsIGhlaWdodCkpO1xuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIERyYXdzIGEgcG9seWdvbiB1c2luZyB0aGUgZ2l2ZW4gcGF0aC5cbiAqXG4gKiBAcGFyYW0gcGF0aCB7bnVtYmVyW118UElYSS5Qb2ludFtdfSBUaGUgcGF0aCBkYXRhIHVzZWQgdG8gY29uc3RydWN0IHRoZSBwb2x5Z29uLlxuICogQHJldHVybiB7UElYSS5HcmFwaGljc31cbiAqL1xuR3JhcGhpY3MucHJvdG90eXBlLmRyYXdQb2x5Z29uID0gZnVuY3Rpb24gKHBhdGgpXG57XG4gICAgLy8gcHJldmVudHMgYW4gYXJndW1lbnQgYXNzaWdubWVudCBkZW9wdFxuICAgIC8vIHNlZSBzZWN0aW9uIDMuMTogaHR0cHM6Ly9naXRodWIuY29tL3BldGthYW50b25vdi9ibHVlYmlyZC93aWtpL09wdGltaXphdGlvbi1raWxsZXJzIzMtbWFuYWdpbmctYXJndW1lbnRzXG4gICAgdmFyIHBvaW50cyA9IHBhdGg7XG5cbiAgICB2YXIgY2xvc2VkID0gdHJ1ZTtcblxuICAgIGlmIChwb2ludHMgaW5zdGFuY2VvZiBtYXRoLlBvbHlnb24pXG4gICAge1xuICAgICAgICBjbG9zZWQgPSBwb2ludHMuY2xvc2VkO1xuICAgICAgICBwb2ludHMgPSBwb2ludHMucG9pbnRzO1xuICAgIH1cblxuICAgIGlmICghQXJyYXkuaXNBcnJheShwb2ludHMpKVxuICAgIHtcbiAgICAgICAgLy8gcHJldmVudHMgYW4gYXJndW1lbnQgbGVhayBkZW9wdFxuICAgICAgICAvLyBzZWUgc2VjdGlvbiAzLjI6IGh0dHBzOi8vZ2l0aHViLmNvbS9wZXRrYWFudG9ub3YvYmx1ZWJpcmQvd2lraS9PcHRpbWl6YXRpb24ta2lsbGVycyMzLW1hbmFnaW5nLWFyZ3VtZW50c1xuICAgICAgICBwb2ludHMgPSBuZXcgQXJyYXkoYXJndW1lbnRzLmxlbmd0aCk7XG5cbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwb2ludHMubGVuZ3RoOyArK2kpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHBvaW50c1tpXSA9IGFyZ3VtZW50c1tpXTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHZhciBzaGFwZSA9IG5ldyBtYXRoLlBvbHlnb24ocG9pbnRzKTtcbiAgICBzaGFwZS5jbG9zZWQgPSBjbG9zZWQ7XG5cbiAgICB0aGlzLmRyYXdTaGFwZShzaGFwZSk7XG5cbiAgICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogQ2xlYXJzIHRoZSBncmFwaGljcyB0aGF0IHdlcmUgZHJhd24gdG8gdGhpcyBHcmFwaGljcyBvYmplY3QsIGFuZCByZXNldHMgZmlsbCBhbmQgbGluZSBzdHlsZSBzZXR0aW5ncy5cbiAqXG4gKiBAcmV0dXJuIHtQSVhJLkdyYXBoaWNzfVxuICovXG5HcmFwaGljcy5wcm90b3R5cGUuY2xlYXIgPSBmdW5jdGlvbiAoKVxue1xuICAgIHRoaXMubGluZVdpZHRoID0gMDtcbiAgICB0aGlzLmZpbGxpbmcgPSBmYWxzZTtcblxuICAgIHRoaXMuZGlydHkgPSB0cnVlO1xuICAgIHRoaXMuY2xlYXJEaXJ0eSA9IHRydWU7XG4gICAgdGhpcy5ncmFwaGljc0RhdGEgPSBbXTtcblxuICAgIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBVc2VmdWwgZnVuY3Rpb24gdGhhdCByZXR1cm5zIGEgdGV4dHVyZSBvZiB0aGUgZ3JhcGhpY3Mgb2JqZWN0IHRoYXQgY2FuIHRoZW4gYmUgdXNlZCB0byBjcmVhdGUgc3ByaXRlc1xuICogVGhpcyBjYW4gYmUgcXVpdGUgdXNlZnVsIGlmIHlvdXIgZ2VvbWV0cnkgaXMgY29tcGxpY2F0ZWQgYW5kIG5lZWRzIHRvIGJlIHJldXNlZCBtdWx0aXBsZSB0aW1lcy5cbiAqXG4gKiBAcGFyYW0gcmVzb2x1dGlvbiB7bnVtYmVyfSBUaGUgcmVzb2x1dGlvbiBvZiB0aGUgdGV4dHVyZSBiZWluZyBnZW5lcmF0ZWRcbiAqIEBwYXJhbSBzY2FsZU1vZGUge251bWJlcn0gU2hvdWxkIGJlIG9uZSBvZiB0aGUgc2NhbGVNb2RlIGNvbnN0c1xuICogQHJldHVybiB7UElYSS5UZXh0dXJlfSBhIHRleHR1cmUgb2YgdGhlIGdyYXBoaWNzIG9iamVjdFxuICovXG5HcmFwaGljcy5wcm90b3R5cGUuZ2VuZXJhdGVUZXh0dXJlID0gZnVuY3Rpb24gKHJlbmRlcmVyLCByZXNvbHV0aW9uLCBzY2FsZU1vZGUpXG57XG5cbiAgICByZXNvbHV0aW9uID0gcmVzb2x1dGlvbiB8fCAxO1xuXG4gICAgdmFyIGJvdW5kcyA9IHRoaXMuZ2V0TG9jYWxCb3VuZHMoKTtcblxuICAgIHZhciBjYW52YXNCdWZmZXIgPSBuZXcgQ2FudmFzQnVmZmVyKGJvdW5kcy53aWR0aCAqIHJlc29sdXRpb24sIGJvdW5kcy5oZWlnaHQgKiByZXNvbHV0aW9uKTtcblxuICAgIHZhciB0ZXh0dXJlID0gVGV4dHVyZS5mcm9tQ2FudmFzKGNhbnZhc0J1ZmZlci5jYW52YXMsIHNjYWxlTW9kZSk7XG4gICAgdGV4dHVyZS5iYXNlVGV4dHVyZS5yZXNvbHV0aW9uID0gcmVzb2x1dGlvbjtcblxuICAgIGNhbnZhc0J1ZmZlci5jb250ZXh0LnNjYWxlKHJlc29sdXRpb24sIHJlc29sdXRpb24pO1xuXG4gICAgY2FudmFzQnVmZmVyLmNvbnRleHQudHJhbnNsYXRlKC1ib3VuZHMueCwtYm91bmRzLnkpO1xuXG4gICAgQ2FudmFzR3JhcGhpY3MucmVuZGVyR3JhcGhpY3ModGhpcywgY2FudmFzQnVmZmVyLmNvbnRleHQpO1xuXG4gICAgcmV0dXJuIHRleHR1cmU7XG59O1xuXG4vKipcbiAqIFJlbmRlcnMgdGhlIG9iamVjdCB1c2luZyB0aGUgV2ViR0wgcmVuZGVyZXJcbiAqXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcn1cbiAqIEBwcml2YXRlXG4gKi9cbkdyYXBoaWNzLnByb3RvdHlwZS5fcmVuZGVyV2ViR0wgPSBmdW5jdGlvbiAocmVuZGVyZXIpXG57XG4gICAgLy8gaWYgdGhlIHNwcml0ZSBpcyBub3QgdmlzaWJsZSBvciB0aGUgYWxwaGEgaXMgMCB0aGVuIG5vIG5lZWQgdG8gcmVuZGVyIHRoaXMgZWxlbWVudFxuXG4gICAgaWYgKHRoaXMuZ2xEaXJ0eSlcbiAgICB7XG4gICAgICAgIHRoaXMuZGlydHkgPSB0cnVlO1xuICAgICAgICB0aGlzLmdsRGlydHkgPSBmYWxzZTtcbiAgICB9XG5cbiAgICByZW5kZXJlci5zZXRPYmplY3RSZW5kZXJlcihyZW5kZXJlci5wbHVnaW5zLmdyYXBoaWNzKTtcbiAgICByZW5kZXJlci5wbHVnaW5zLmdyYXBoaWNzLnJlbmRlcih0aGlzKTtcblxufTtcblxuLyoqXG4gKiBSZW5kZXJzIHRoZSBvYmplY3QgdXNpbmcgdGhlIENhbnZhcyByZW5kZXJlclxuICpcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5DYW52YXNSZW5kZXJlcn1cbiAqIEBwcml2YXRlXG4gKi9cbkdyYXBoaWNzLnByb3RvdHlwZS5fcmVuZGVyQ2FudmFzID0gZnVuY3Rpb24gKHJlbmRlcmVyKVxue1xuICAgIGlmICh0aGlzLmlzTWFzayA9PT0gdHJ1ZSlcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBpZiB0aGUgdGludCBoYXMgY2hhbmdlZCwgc2V0IHRoZSBncmFwaGljcyBvYmplY3QgdG8gZGlydHkuXG4gICAgaWYgKHRoaXMuX3ByZXZUaW50ICE9PSB0aGlzLnRpbnQpIHtcbiAgICAgICAgdGhpcy5kaXJ0eSA9IHRydWU7XG4gICAgfVxuXG4gICAgLy8gdGhpcyBjb2RlIG1heSBzdGlsbCBiZSBuZWVkZWQgc28gbGVhdmluZyBmb3Igbm93Li5cbiAgICAvL1xuICAgIC8qXG4gICAgaWYgKHRoaXMuX2NhY2hlQXNCaXRtYXApXG4gICAge1xuICAgICAgICBpZiAodGhpcy5kaXJ0eSB8fCB0aGlzLmNhY2hlZFNwcml0ZURpcnR5KVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLl9nZW5lcmF0ZUNhY2hlZFNwcml0ZSgpO1xuXG4gICAgICAgICAgICAvLyB3ZSB3aWxsIGFsc28gbmVlZCB0byB1cGRhdGUgdGhlIHRleHR1cmVcbiAgICAgICAgICAgIHRoaXMudXBkYXRlQ2FjaGVkU3ByaXRlVGV4dHVyZSgpO1xuXG4gICAgICAgICAgICB0aGlzLmNhY2hlZFNwcml0ZURpcnR5ID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLmRpcnR5ID0gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9jYWNoZWRTcHJpdGUuYWxwaGEgPSB0aGlzLmFscGhhO1xuXG4gICAgICAgIFNwcml0ZS5wcm90b3R5cGUuX3JlbmRlckNhbnZhcy5jYWxsKHRoaXMuX2NhY2hlZFNwcml0ZSwgcmVuZGVyZXIpO1xuXG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgKi9cbiAgICB2YXIgY29udGV4dCA9IHJlbmRlcmVyLmNvbnRleHQ7XG4gICAgdmFyIHRyYW5zZm9ybSA9IHRoaXMud29ybGRUcmFuc2Zvcm07XG5cbiAgICB2YXIgY29tcG9zaXRlT3BlcmF0aW9uID0gcmVuZGVyZXIuYmxlbmRNb2Rlc1t0aGlzLmJsZW5kTW9kZV07XG4gICAgaWYgKGNvbXBvc2l0ZU9wZXJhdGlvbiAhPT0gY29udGV4dC5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb24pXG4gICAge1xuICAgICAgICBjb250ZXh0Lmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbiA9IGNvbXBvc2l0ZU9wZXJhdGlvbjtcbiAgICB9XG5cbiAgICB2YXIgcmVzb2x1dGlvbiA9IHJlbmRlcmVyLnJlc29sdXRpb247XG4gICAgY29udGV4dC5zZXRUcmFuc2Zvcm0oXG4gICAgICAgIHRyYW5zZm9ybS5hICogcmVzb2x1dGlvbixcbiAgICAgICAgdHJhbnNmb3JtLmIgKiByZXNvbHV0aW9uLFxuICAgICAgICB0cmFuc2Zvcm0uYyAqIHJlc29sdXRpb24sXG4gICAgICAgIHRyYW5zZm9ybS5kICogcmVzb2x1dGlvbixcbiAgICAgICAgdHJhbnNmb3JtLnR4ICogcmVzb2x1dGlvbixcbiAgICAgICAgdHJhbnNmb3JtLnR5ICogcmVzb2x1dGlvblxuICAgICk7XG5cbiAgICBDYW52YXNHcmFwaGljcy5yZW5kZXJHcmFwaGljcyh0aGlzLCBjb250ZXh0KTtcbn07XG5cbi8qKlxuICogUmV0cmlldmVzIHRoZSBib3VuZHMgb2YgdGhlIGdyYXBoaWMgc2hhcGUgYXMgYSByZWN0YW5nbGUgb2JqZWN0XG4gKlxuICogQHBhcmFtIFttYXRyaXhdIHtQSVhJLk1hdHJpeH0gVGhlIHdvcmxkIHRyYW5zZm9ybSBtYXRyaXggdG8gdXNlLCBkZWZhdWx0cyB0byB0aGlzXG4gKiAgb2JqZWN0J3Mgd29ybGRUcmFuc2Zvcm0uXG4gKiBAcmV0dXJuIHtQSVhJLlJlY3RhbmdsZX0gdGhlIHJlY3Rhbmd1bGFyIGJvdW5kaW5nIGFyZWFcbiAqL1xuR3JhcGhpY3MucHJvdG90eXBlLmdldEJvdW5kcyA9IGZ1bmN0aW9uIChtYXRyaXgpXG57XG4gICAgaWYoIXRoaXMuX2N1cnJlbnRCb3VuZHMpXG4gICAge1xuXG4gICAgICAgIC8vIHJldHVybiBhbiBlbXB0eSBvYmplY3QgaWYgdGhlIGl0ZW0gaXMgYSBtYXNrIVxuICAgICAgICBpZiAoIXRoaXMucmVuZGVyYWJsZSlcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIG1hdGguUmVjdGFuZ2xlLkVNUFRZO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuYm91bmRzRGlydHkpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlTG9jYWxCb3VuZHMoKTtcblxuICAgICAgICAgICAgdGhpcy5nbERpcnR5ID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMuY2FjaGVkU3ByaXRlRGlydHkgPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy5ib3VuZHNEaXJ0eSA9IGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGJvdW5kcyA9IHRoaXMuX2xvY2FsQm91bmRzO1xuXG4gICAgICAgIHZhciB3MCA9IGJvdW5kcy54O1xuICAgICAgICB2YXIgdzEgPSBib3VuZHMud2lkdGggKyBib3VuZHMueDtcblxuICAgICAgICB2YXIgaDAgPSBib3VuZHMueTtcbiAgICAgICAgdmFyIGgxID0gYm91bmRzLmhlaWdodCArIGJvdW5kcy55O1xuXG4gICAgICAgIHZhciB3b3JsZFRyYW5zZm9ybSA9IG1hdHJpeCB8fCB0aGlzLndvcmxkVHJhbnNmb3JtO1xuXG4gICAgICAgIHZhciBhID0gd29ybGRUcmFuc2Zvcm0uYTtcbiAgICAgICAgdmFyIGIgPSB3b3JsZFRyYW5zZm9ybS5iO1xuICAgICAgICB2YXIgYyA9IHdvcmxkVHJhbnNmb3JtLmM7XG4gICAgICAgIHZhciBkID0gd29ybGRUcmFuc2Zvcm0uZDtcbiAgICAgICAgdmFyIHR4ID0gd29ybGRUcmFuc2Zvcm0udHg7XG4gICAgICAgIHZhciB0eSA9IHdvcmxkVHJhbnNmb3JtLnR5O1xuXG4gICAgICAgIHZhciB4MSA9IGEgKiB3MSArIGMgKiBoMSArIHR4O1xuICAgICAgICB2YXIgeTEgPSBkICogaDEgKyBiICogdzEgKyB0eTtcblxuICAgICAgICB2YXIgeDIgPSBhICogdzAgKyBjICogaDEgKyB0eDtcbiAgICAgICAgdmFyIHkyID0gZCAqIGgxICsgYiAqIHcwICsgdHk7XG5cbiAgICAgICAgdmFyIHgzID0gYSAqIHcwICsgYyAqIGgwICsgdHg7XG4gICAgICAgIHZhciB5MyA9IGQgKiBoMCArIGIgKiB3MCArIHR5O1xuXG4gICAgICAgIHZhciB4NCA9ICBhICogdzEgKyBjICogaDAgKyB0eDtcbiAgICAgICAgdmFyIHk0ID0gIGQgKiBoMCArIGIgKiB3MSArIHR5O1xuXG4gICAgICAgIHZhciBtYXhYID0geDE7XG4gICAgICAgIHZhciBtYXhZID0geTE7XG5cbiAgICAgICAgdmFyIG1pblggPSB4MTtcbiAgICAgICAgdmFyIG1pblkgPSB5MTtcblxuICAgICAgICBtaW5YID0geDIgPCBtaW5YID8geDIgOiBtaW5YO1xuICAgICAgICBtaW5YID0geDMgPCBtaW5YID8geDMgOiBtaW5YO1xuICAgICAgICBtaW5YID0geDQgPCBtaW5YID8geDQgOiBtaW5YO1xuXG4gICAgICAgIG1pblkgPSB5MiA8IG1pblkgPyB5MiA6IG1pblk7XG4gICAgICAgIG1pblkgPSB5MyA8IG1pblkgPyB5MyA6IG1pblk7XG4gICAgICAgIG1pblkgPSB5NCA8IG1pblkgPyB5NCA6IG1pblk7XG5cbiAgICAgICAgbWF4WCA9IHgyID4gbWF4WCA/IHgyIDogbWF4WDtcbiAgICAgICAgbWF4WCA9IHgzID4gbWF4WCA/IHgzIDogbWF4WDtcbiAgICAgICAgbWF4WCA9IHg0ID4gbWF4WCA/IHg0IDogbWF4WDtcblxuICAgICAgICBtYXhZID0geTIgPiBtYXhZID8geTIgOiBtYXhZO1xuICAgICAgICBtYXhZID0geTMgPiBtYXhZID8geTMgOiBtYXhZO1xuICAgICAgICBtYXhZID0geTQgPiBtYXhZID8geTQgOiBtYXhZO1xuXG4gICAgICAgIHRoaXMuX2JvdW5kcy54ID0gbWluWDtcbiAgICAgICAgdGhpcy5fYm91bmRzLndpZHRoID0gbWF4WCAtIG1pblg7XG5cbiAgICAgICAgdGhpcy5fYm91bmRzLnkgPSBtaW5ZO1xuICAgICAgICB0aGlzLl9ib3VuZHMuaGVpZ2h0ID0gbWF4WSAtIG1pblk7XG5cbiAgICAgICAgdGhpcy5fY3VycmVudEJvdW5kcyA9IHRoaXMuX2JvdW5kcztcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5fY3VycmVudEJvdW5kcztcbn07XG5cbi8qKlxuKiBUZXN0cyBpZiBhIHBvaW50IGlzIGluc2lkZSB0aGlzIGdyYXBoaWNzIG9iamVjdFxuKlxuKiBAcGFyYW0gcG9pbnQge1BJWEkuUG9pbnR9IHRoZSBwb2ludCB0byB0ZXN0XG4qIEByZXR1cm4ge2Jvb2xlYW59IHRoZSByZXN1bHQgb2YgdGhlIHRlc3RcbiovXG5HcmFwaGljcy5wcm90b3R5cGUuY29udGFpbnNQb2ludCA9IGZ1bmN0aW9uKCBwb2ludCApXG57XG4gICAgdGhpcy53b3JsZFRyYW5zZm9ybS5hcHBseUludmVyc2UocG9pbnQsICB0ZW1wUG9pbnQpO1xuXG4gICAgdmFyIGdyYXBoaWNzRGF0YSA9IHRoaXMuZ3JhcGhpY3NEYXRhO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBncmFwaGljc0RhdGEubGVuZ3RoOyBpKyspXG4gICAge1xuICAgICAgICB2YXIgZGF0YSA9IGdyYXBoaWNzRGF0YVtpXTtcblxuICAgICAgICBpZiAoIWRhdGEuZmlsbClcbiAgICAgICAge1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBvbmx5IGRlYWwgd2l0aCBmaWxscy4uXG4gICAgICAgIGlmIChkYXRhLnNoYXBlKVxuICAgICAgICB7XG4gICAgICAgICAgICBpZiAoIGRhdGEuc2hhcGUuY29udGFpbnMoIHRlbXBQb2ludC54LCB0ZW1wUG9pbnQueSApIClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBmYWxzZTtcbn07XG5cbi8qKlxuICogVXBkYXRlIHRoZSBib3VuZHMgb2YgdGhlIG9iamVjdFxuICpcbiAqL1xuR3JhcGhpY3MucHJvdG90eXBlLnVwZGF0ZUxvY2FsQm91bmRzID0gZnVuY3Rpb24gKClcbntcbiAgICB2YXIgbWluWCA9IEluZmluaXR5O1xuICAgIHZhciBtYXhYID0gLUluZmluaXR5O1xuXG4gICAgdmFyIG1pblkgPSBJbmZpbml0eTtcbiAgICB2YXIgbWF4WSA9IC1JbmZpbml0eTtcblxuICAgIGlmICh0aGlzLmdyYXBoaWNzRGF0YS5sZW5ndGgpXG4gICAge1xuICAgICAgICB2YXIgc2hhcGUsIHBvaW50cywgeCwgeSwgdywgaDtcblxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuZ3JhcGhpY3NEYXRhLmxlbmd0aDsgaSsrKVxuICAgICAgICB7XG4gICAgICAgICAgICB2YXIgZGF0YSA9IHRoaXMuZ3JhcGhpY3NEYXRhW2ldO1xuICAgICAgICAgICAgdmFyIHR5cGUgPSBkYXRhLnR5cGU7XG4gICAgICAgICAgICB2YXIgbGluZVdpZHRoID0gZGF0YS5saW5lV2lkdGg7XG4gICAgICAgICAgICBzaGFwZSA9IGRhdGEuc2hhcGU7XG5cbiAgICAgICAgICAgIGlmICh0eXBlID09PSBDT05TVC5TSEFQRVMuUkVDVCB8fCB0eXBlID09PSBDT05TVC5TSEFQRVMuUlJFQylcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB4ID0gc2hhcGUueCAtIGxpbmVXaWR0aC8yO1xuICAgICAgICAgICAgICAgIHkgPSBzaGFwZS55IC0gbGluZVdpZHRoLzI7XG4gICAgICAgICAgICAgICAgdyA9IHNoYXBlLndpZHRoICsgbGluZVdpZHRoO1xuICAgICAgICAgICAgICAgIGggPSBzaGFwZS5oZWlnaHQgKyBsaW5lV2lkdGg7XG5cbiAgICAgICAgICAgICAgICBtaW5YID0geCA8IG1pblggPyB4IDogbWluWDtcbiAgICAgICAgICAgICAgICBtYXhYID0geCArIHcgPiBtYXhYID8geCArIHcgOiBtYXhYO1xuXG4gICAgICAgICAgICAgICAgbWluWSA9IHkgPCBtaW5ZID8geSA6IG1pblk7XG4gICAgICAgICAgICAgICAgbWF4WSA9IHkgKyBoID4gbWF4WSA/IHkgKyBoIDogbWF4WTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKHR5cGUgPT09IENPTlNULlNIQVBFUy5DSVJDKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHggPSBzaGFwZS54O1xuICAgICAgICAgICAgICAgIHkgPSBzaGFwZS55O1xuICAgICAgICAgICAgICAgIHcgPSBzaGFwZS5yYWRpdXMgKyBsaW5lV2lkdGgvMjtcbiAgICAgICAgICAgICAgICBoID0gc2hhcGUucmFkaXVzICsgbGluZVdpZHRoLzI7XG5cbiAgICAgICAgICAgICAgICBtaW5YID0geCAtIHcgPCBtaW5YID8geCAtIHcgOiBtaW5YO1xuICAgICAgICAgICAgICAgIG1heFggPSB4ICsgdyA+IG1heFggPyB4ICsgdyA6IG1heFg7XG5cbiAgICAgICAgICAgICAgICBtaW5ZID0geSAtIGggPCBtaW5ZID8geSAtIGggOiBtaW5ZO1xuICAgICAgICAgICAgICAgIG1heFkgPSB5ICsgaCA+IG1heFkgPyB5ICsgaCA6IG1heFk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmICh0eXBlID09PSBDT05TVC5TSEFQRVMuRUxJUClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB4ID0gc2hhcGUueDtcbiAgICAgICAgICAgICAgICB5ID0gc2hhcGUueTtcbiAgICAgICAgICAgICAgICB3ID0gc2hhcGUud2lkdGggKyBsaW5lV2lkdGgvMjtcbiAgICAgICAgICAgICAgICBoID0gc2hhcGUuaGVpZ2h0ICsgbGluZVdpZHRoLzI7XG5cbiAgICAgICAgICAgICAgICBtaW5YID0geCAtIHcgPCBtaW5YID8geCAtIHcgOiBtaW5YO1xuICAgICAgICAgICAgICAgIG1heFggPSB4ICsgdyA+IG1heFggPyB4ICsgdyA6IG1heFg7XG5cbiAgICAgICAgICAgICAgICBtaW5ZID0geSAtIGggPCBtaW5ZID8geSAtIGggOiBtaW5ZO1xuICAgICAgICAgICAgICAgIG1heFkgPSB5ICsgaCA+IG1heFkgPyB5ICsgaCA6IG1heFk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgLy8gUE9MWVxuICAgICAgICAgICAgICAgIHBvaW50cyA9IHNoYXBlLnBvaW50cztcblxuICAgICAgICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgcG9pbnRzLmxlbmd0aDsgaiArPSAyKVxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgeCA9IHBvaW50c1tqXTtcbiAgICAgICAgICAgICAgICAgICAgeSA9IHBvaW50c1tqKzFdO1xuXG4gICAgICAgICAgICAgICAgICAgIG1pblggPSB4LWxpbmVXaWR0aCA8IG1pblggPyB4LWxpbmVXaWR0aCA6IG1pblg7XG4gICAgICAgICAgICAgICAgICAgIG1heFggPSB4K2xpbmVXaWR0aCA+IG1heFggPyB4K2xpbmVXaWR0aCA6IG1heFg7XG5cbiAgICAgICAgICAgICAgICAgICAgbWluWSA9IHktbGluZVdpZHRoIDwgbWluWSA/IHktbGluZVdpZHRoIDogbWluWTtcbiAgICAgICAgICAgICAgICAgICAgbWF4WSA9IHkrbGluZVdpZHRoID4gbWF4WSA/IHkrbGluZVdpZHRoIDogbWF4WTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgbWluWCA9IDA7XG4gICAgICAgIG1heFggPSAwO1xuICAgICAgICBtaW5ZID0gMDtcbiAgICAgICAgbWF4WSA9IDA7XG4gICAgfVxuXG4gICAgdmFyIHBhZGRpbmcgPSB0aGlzLmJvdW5kc1BhZGRpbmc7XG5cbiAgICB0aGlzLl9sb2NhbEJvdW5kcy54ID0gbWluWCAtIHBhZGRpbmc7XG4gICAgdGhpcy5fbG9jYWxCb3VuZHMud2lkdGggPSAobWF4WCAtIG1pblgpICsgcGFkZGluZyAqIDI7XG5cbiAgICB0aGlzLl9sb2NhbEJvdW5kcy55ID0gbWluWSAtIHBhZGRpbmc7XG4gICAgdGhpcy5fbG9jYWxCb3VuZHMuaGVpZ2h0ID0gKG1heFkgLSBtaW5ZKSArIHBhZGRpbmcgKiAyO1xufTtcblxuLyoqXG4gKiBHZW5lcmF0ZXMgdGhlIGNhY2hlZCBzcHJpdGUgd2hlbiB0aGUgc3ByaXRlIGhhcyBjYWNoZUFzQml0bWFwID0gdHJ1ZVxuICpcbiAqIEBwcml2YXRlXG4gKi9cbi8qXG5HcmFwaGljcy5wcm90b3R5cGUuX2dlbmVyYXRlQ2FjaGVkU3ByaXRlID0gZnVuY3Rpb24gKClcbntcbiAgICB2YXIgYm91bmRzID0gdGhpcy5nZXRMb2NhbEJvdW5kcygpO1xuXG4gICAgaWYgKCF0aGlzLl9jYWNoZWRTcHJpdGUpXG4gICAge1xuICAgICAgICB2YXIgY2FudmFzQnVmZmVyID0gbmV3IENhbnZhc0J1ZmZlcihib3VuZHMud2lkdGgsIGJvdW5kcy5oZWlnaHQpO1xuICAgICAgICB2YXIgdGV4dHVyZSA9IFRleHR1cmUuZnJvbUNhbnZhcyhjYW52YXNCdWZmZXIuY2FudmFzKTtcblxuICAgICAgICB0aGlzLl9jYWNoZWRTcHJpdGUgPSBuZXcgU3ByaXRlKHRleHR1cmUpO1xuICAgICAgICB0aGlzLl9jYWNoZWRTcHJpdGUuYnVmZmVyID0gY2FudmFzQnVmZmVyO1xuXG4gICAgICAgIHRoaXMuX2NhY2hlZFNwcml0ZS53b3JsZFRyYW5zZm9ybSA9IHRoaXMud29ybGRUcmFuc2Zvcm07XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHRoaXMuX2NhY2hlZFNwcml0ZS5idWZmZXIucmVzaXplKGJvdW5kcy53aWR0aCwgYm91bmRzLmhlaWdodCk7XG4gICAgfVxuXG4gICAgLy8gbGV2ZXJhZ2UgdGhlIGFuY2hvciB0byBhY2NvdW50IGZvciB0aGUgb2Zmc2V0IG9mIHRoZSBlbGVtZW50XG4gICAgdGhpcy5fY2FjaGVkU3ByaXRlLmFuY2hvci54ID0gLSggYm91bmRzLnggLyBib3VuZHMud2lkdGggKTtcbiAgICB0aGlzLl9jYWNoZWRTcHJpdGUuYW5jaG9yLnkgPSAtKCBib3VuZHMueSAvIGJvdW5kcy5oZWlnaHQgKTtcblxuICAgIC8vIHRoaXMuX2NhY2hlZFNwcml0ZS5idWZmZXIuY29udGV4dC5zYXZlKCk7XG4gICAgdGhpcy5fY2FjaGVkU3ByaXRlLmJ1ZmZlci5jb250ZXh0LnRyYW5zbGF0ZSgtYm91bmRzLngsLWJvdW5kcy55KTtcblxuICAgIC8vIG1ha2Ugc3VyZSB3ZSBzZXQgdGhlIGFscGhhIG9mIHRoZSBncmFwaGljcyB0byAxIGZvciB0aGUgcmVuZGVyLi5cbiAgICB0aGlzLndvcmxkQWxwaGEgPSAxO1xuXG4gICAgLy8gbm93IHJlbmRlciB0aGUgZ3JhcGhpYy4uXG4gICAgQ2FudmFzR3JhcGhpY3MucmVuZGVyR3JhcGhpY3ModGhpcywgdGhpcy5fY2FjaGVkU3ByaXRlLmJ1ZmZlci5jb250ZXh0KTtcblxuICAgIHRoaXMuX2NhY2hlZFNwcml0ZS5hbHBoYSA9IHRoaXMuYWxwaGE7XG59O1xuKi9cbi8qKlxuICogVXBkYXRlcyB0ZXh0dXJlIHNpemUgYmFzZWQgb24gY2FudmFzIHNpemVcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG4vKlxuR3JhcGhpY3MucHJvdG90eXBlLnVwZGF0ZUNhY2hlZFNwcml0ZVRleHR1cmUgPSBmdW5jdGlvbiAoKVxue1xuICAgIHZhciBjYWNoZWRTcHJpdGUgPSB0aGlzLl9jYWNoZWRTcHJpdGU7XG4gICAgdmFyIHRleHR1cmUgPSBjYWNoZWRTcHJpdGUudGV4dHVyZTtcbiAgICB2YXIgY2FudmFzID0gY2FjaGVkU3ByaXRlLmJ1ZmZlci5jYW52YXM7XG5cbiAgICB0ZXh0dXJlLmJhc2VUZXh0dXJlLndpZHRoID0gY2FudmFzLndpZHRoO1xuICAgIHRleHR1cmUuYmFzZVRleHR1cmUuaGVpZ2h0ID0gY2FudmFzLmhlaWdodDtcbiAgICB0ZXh0dXJlLmNyb3Aud2lkdGggPSB0ZXh0dXJlLmZyYW1lLndpZHRoID0gY2FudmFzLndpZHRoO1xuICAgIHRleHR1cmUuY3JvcC5oZWlnaHQgPSB0ZXh0dXJlLmZyYW1lLmhlaWdodCA9IGNhbnZhcy5oZWlnaHQ7XG5cbiAgICBjYWNoZWRTcHJpdGUuX3dpZHRoID0gY2FudmFzLndpZHRoO1xuICAgIGNhY2hlZFNwcml0ZS5faGVpZ2h0ID0gY2FudmFzLmhlaWdodDtcblxuICAgIC8vIHVwZGF0ZSB0aGUgZGlydHkgYmFzZSB0ZXh0dXJlc1xuICAgIHRleHR1cmUuYmFzZVRleHR1cmUuZGlydHkoKTtcbn07Ki9cblxuLyoqXG4gKiBEZXN0cm95cyBhIHByZXZpb3VzIGNhY2hlZCBzcHJpdGUuXG4gKlxuICovXG4vKlxuR3JhcGhpY3MucHJvdG90eXBlLmRlc3Ryb3lDYWNoZWRTcHJpdGUgPSBmdW5jdGlvbiAoKVxue1xuICAgIHRoaXMuX2NhY2hlZFNwcml0ZS50ZXh0dXJlLmRlc3Ryb3kodHJ1ZSk7XG5cbiAgICAvLyBsZXQgdGhlIGdjIGNvbGxlY3QgdGhlIHVudXNlZCBzcHJpdGVcbiAgICAvLyBUT0RPIGNvdWxkIGJlIG9iamVjdCBwb29sZWQhXG4gICAgdGhpcy5fY2FjaGVkU3ByaXRlID0gbnVsbDtcbn07Ki9cblxuLyoqXG4gKiBEcmF3cyB0aGUgZ2l2ZW4gc2hhcGUgdG8gdGhpcyBHcmFwaGljcyBvYmplY3QuIENhbiBiZSBhbnkgb2YgQ2lyY2xlLCBSZWN0YW5nbGUsIEVsbGlwc2UsIExpbmUgb3IgUG9seWdvbi5cbiAqXG4gKiBAcGFyYW0gc2hhcGUge1BJWEkuQ2lyY2xlfFBJWEkuUmVjdGFuZ2xlfFBJWEkuRWxsaXBzZXxQSVhJLkxpbmV8UElYSS5Qb2x5Z29ufSBUaGUgc2hhcGUgb2JqZWN0IHRvIGRyYXcuXG4gKiBAcmV0dXJuIHtQSVhJLkdyYXBoaWNzRGF0YX0gVGhlIGdlbmVyYXRlZCBHcmFwaGljc0RhdGEgb2JqZWN0LlxuICovXG5HcmFwaGljcy5wcm90b3R5cGUuZHJhd1NoYXBlID0gZnVuY3Rpb24gKHNoYXBlKVxue1xuICAgIGlmICh0aGlzLmN1cnJlbnRQYXRoKVxuICAgIHtcbiAgICAgICAgLy8gY2hlY2sgY3VycmVudCBwYXRoIVxuICAgICAgICBpZiAodGhpcy5jdXJyZW50UGF0aC5zaGFwZS5wb2ludHMubGVuZ3RoIDw9IDIpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuZ3JhcGhpY3NEYXRhLnBvcCgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5jdXJyZW50UGF0aCA9IG51bGw7XG5cbiAgICB2YXIgZGF0YSA9IG5ldyBHcmFwaGljc0RhdGEodGhpcy5saW5lV2lkdGgsIHRoaXMubGluZUNvbG9yLCB0aGlzLmxpbmVBbHBoYSwgdGhpcy5maWxsQ29sb3IsIHRoaXMuZmlsbEFscGhhLCB0aGlzLmZpbGxpbmcsIHNoYXBlKTtcblxuICAgIHRoaXMuZ3JhcGhpY3NEYXRhLnB1c2goZGF0YSk7XG5cbiAgICBpZiAoZGF0YS50eXBlID09PSBDT05TVC5TSEFQRVMuUE9MWSlcbiAgICB7XG4gICAgICAgIGRhdGEuc2hhcGUuY2xvc2VkID0gZGF0YS5zaGFwZS5jbG9zZWQgfHwgdGhpcy5maWxsaW5nO1xuICAgICAgICB0aGlzLmN1cnJlbnRQYXRoID0gZGF0YTtcbiAgICB9XG5cbiAgICB0aGlzLmRpcnR5ID0gdGhpcy5ib3VuZHNEaXJ0eSA9IHRydWU7XG5cbiAgICByZXR1cm4gZGF0YTtcbn07XG5cbi8qKlxuICogRGVzdHJveXMgdGhlIEdyYXBoaWNzIG9iamVjdC5cbiAqL1xuR3JhcGhpY3MucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoKSB7XG4gICAgQ29udGFpbmVyLnByb3RvdHlwZS5kZXN0cm95LmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG5cbiAgICAvLyBkZXN0cm95IGVhY2ggb2YgdGhlIEdyYXBoaWNzRGF0YSBvYmplY3RzXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmdyYXBoaWNzRGF0YS5sZW5ndGg7ICsraSkge1xuICAgICAgICB0aGlzLmdyYXBoaWNzRGF0YVtpXS5kZXN0cm95KCk7XG4gICAgfVxuXG4gICAgLy8gZm9yIGVhY2ggd2ViZ2wgZGF0YSBlbnRyeSwgZGVzdHJveSB0aGUgV2ViR0xHcmFwaGljc0RhdGFcbiAgICBmb3IgKHZhciBpZCBpbiB0aGlzLl93ZWJnbCkge1xuICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IHRoaXMuX3dlYmdsW2lkXS5kYXRhLmxlbmd0aDsgKytqKSB7XG4gICAgICAgICAgICB0aGlzLl93ZWJnbFtpZF0uZGF0YVtqXS5kZXN0cm95KCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLmdyYXBoaWNzRGF0YSA9IG51bGw7XG5cbiAgICB0aGlzLmN1cnJlbnRQYXRoID0gbnVsbDtcbiAgICB0aGlzLl93ZWJnbCA9IG51bGw7XG4gICAgdGhpcy5fbG9jYWxCb3VuZHMgPSBudWxsO1xufTtcbiIsIi8qKlxuICogQSBHcmFwaGljc0RhdGEgb2JqZWN0LlxuICpcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqIEBwYXJhbSBsaW5lV2lkdGgge251bWJlcn0gdGhlIHdpZHRoIG9mIHRoZSBsaW5lIHRvIGRyYXdcbiAqIEBwYXJhbSBsaW5lQ29sb3Ige251bWJlcn0gdGhlIGNvbG9yIG9mIHRoZSBsaW5lIHRvIGRyYXdcbiAqIEBwYXJhbSBsaW5lQWxwaGEge251bWJlcn0gdGhlIGFscGhhIG9mIHRoZSBsaW5lIHRvIGRyYXdcbiAqIEBwYXJhbSBmaWxsQ29sb3Ige251bWJlcn0gdGhlIGNvbG9yIG9mIHRoZSBmaWxsXG4gKiBAcGFyYW0gZmlsbEFscGhhIHtudW1iZXJ9IHRoZSBhbHBoYSBvZiB0aGUgZmlsbFxuICogQHBhcmFtIGZpbGwgICAgICB7Ym9vbGVhbn0gd2hldGhlciBvciBub3QgdGhlIHNoYXBlIGlzIGZpbGxlZCB3aXRoIGEgY29sb3VyXG4gKiBAcGFyYW0gc2hhcGUgICAgIHtDaXJjbGV8UmVjdGFuZ2xlfEVsbGlwc2V8TGluZXxQb2x5Z29ufSBUaGUgc2hhcGUgb2JqZWN0IHRvIGRyYXcuXG4gKi9cbmZ1bmN0aW9uIEdyYXBoaWNzRGF0YShsaW5lV2lkdGgsIGxpbmVDb2xvciwgbGluZUFscGhhLCBmaWxsQ29sb3IsIGZpbGxBbHBoYSwgZmlsbCwgc2hhcGUpXG57XG4gICAgLypcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9IHRoZSB3aWR0aCBvZiB0aGUgbGluZSB0byBkcmF3XG4gICAgICovXG4gICAgdGhpcy5saW5lV2lkdGggPSBsaW5lV2lkdGg7XG5cbiAgICAvKlxuICAgICAqIEBtZW1iZXIge251bWJlcn0gdGhlIGNvbG9yIG9mIHRoZSBsaW5lIHRvIGRyYXdcbiAgICAgKi9cbiAgICB0aGlzLmxpbmVDb2xvciA9IGxpbmVDb2xvcjtcbiAgICAvKlxuICAgICAqIEBtZW1iZXIge251bWJlcn0gdGhlIGFscGhhIG9mIHRoZSBsaW5lIHRvIGRyYXdcbiAgICAgKi9cbiAgICB0aGlzLmxpbmVBbHBoYSA9IGxpbmVBbHBoYTtcbiAgICAvKlxuICAgICAqIEBtZW1iZXIge251bWJlcn0gY2FjaGVkIHRpbnQgb2YgdGhlIGxpbmUgdG8gZHJhd1xuICAgICAqL1xuICAgIHRoaXMuX2xpbmVUaW50ID0gbGluZUNvbG9yO1xuXG4gICAgLypcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9IHRoZSBjb2xvciBvZiB0aGUgZmlsbFxuICAgICAqL1xuICAgIHRoaXMuZmlsbENvbG9yID0gZmlsbENvbG9yO1xuXG4gICAgLypcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9IHRoZSBhbHBoYSBvZiB0aGUgZmlsbFxuICAgICAqL1xuICAgIHRoaXMuZmlsbEFscGhhID0gZmlsbEFscGhhO1xuXG4gICAgLypcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9IGNhY2hlZCB0aW50IG9mIHRoZSBmaWxsXG4gICAgICovXG4gICAgdGhpcy5fZmlsbFRpbnQgPSBmaWxsQ29sb3I7XG5cbiAgICAvKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59IHdoZXRoZXIgb3Igbm90IHRoZSBzaGFwZSBpcyBmaWxsZWQgd2l0aCBhIGNvbG91clxuICAgICAqL1xuICAgIHRoaXMuZmlsbCA9IGZpbGw7XG5cbiAgICAvKlxuICAgICAqIEBtZW1iZXIge1BJWEkuQ2lyY2xlfFBJWEkuUmVjdGFuZ2xlfFBJWEkuRWxsaXBzZXxQSVhJLkxpbmV8UElYSS5Qb2x5Z29ufSBUaGUgc2hhcGUgb2JqZWN0IHRvIGRyYXcuXG4gICAgICovXG4gICAgdGhpcy5zaGFwZSA9IHNoYXBlO1xuXG4gICAgLypcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9IFRoZSB0eXBlIG9mIHRoZSBzaGFwZSwgc2VlIHRoZSBDb25zdC5TaGFwZXMgZmlsZSBmb3IgYWxsIHRoZSBleGlzdGluZyB0eXBlcyxcbiAgICAgKi9cbiAgICB0aGlzLnR5cGUgPSBzaGFwZS50eXBlO1xufVxuXG5HcmFwaGljc0RhdGEucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gR3JhcGhpY3NEYXRhO1xubW9kdWxlLmV4cG9ydHMgPSBHcmFwaGljc0RhdGE7XG5cbi8qKlxuICogQ3JlYXRlcyBhIG5ldyBHcmFwaGljc0RhdGEgb2JqZWN0IHdpdGggdGhlIHNhbWUgdmFsdWVzIGFzIHRoaXMgb25lLlxuICpcbiAqIEByZXR1cm4ge1BJWEkuR3JhcGhpY3NEYXRhfVxuICovXG5HcmFwaGljc0RhdGEucHJvdG90eXBlLmNsb25lID0gZnVuY3Rpb24gKClcbntcbiAgICByZXR1cm4gbmV3IEdyYXBoaWNzRGF0YShcbiAgICAgICAgdGhpcy5saW5lV2lkdGgsXG4gICAgICAgIHRoaXMubGluZUNvbG9yLFxuICAgICAgICB0aGlzLmxpbmVBbHBoYSxcbiAgICAgICAgdGhpcy5maWxsQ29sb3IsXG4gICAgICAgIHRoaXMuZmlsbEFscGhhLFxuICAgICAgICB0aGlzLmZpbGwsXG4gICAgICAgIHRoaXMuc2hhcGVcbiAgICApO1xufTtcblxuLyoqXG4gKiBEZXN0cm95cyB0aGUgR3JhcGhpY3MgZGF0YS5cbiAqL1xuR3JhcGhpY3NEYXRhLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKCkge1xuICAgIHRoaXMuc2hhcGUgPSBudWxsO1xufTtcbiIsInZhciB1dGlscyA9IHJlcXVpcmUoJy4uLy4uL3V0aWxzJyksXG4gICAgbWF0aCA9IHJlcXVpcmUoJy4uLy4uL21hdGgnKSxcbiAgICBDT05TVCA9IHJlcXVpcmUoJy4uLy4uL2NvbnN0JyksXG4gICAgT2JqZWN0UmVuZGVyZXIgPSByZXF1aXJlKCcuLi8uLi9yZW5kZXJlcnMvd2ViZ2wvdXRpbHMvT2JqZWN0UmVuZGVyZXInKSxcbiAgICBXZWJHTFJlbmRlcmVyID0gcmVxdWlyZSgnLi4vLi4vcmVuZGVyZXJzL3dlYmdsL1dlYkdMUmVuZGVyZXInKSxcbiAgICBXZWJHTEdyYXBoaWNzRGF0YSA9IHJlcXVpcmUoJy4vV2ViR0xHcmFwaGljc0RhdGEnKSxcbiAgICBQcmltaXRpdmVTaGFkZXIgPSByZXF1aXJlKCcuL1ByaW1pdGl2ZVNoYWRlcicpLFxuXG4gICAgLy8gc29tZSBkcmF3aW5nIGZ1bmN0aW9ucy4uXG4gICAgYnVpbGRMaW5lID0gcmVxdWlyZSgnLi9idWlsZExpbmUnKTtcbiAgICBidWlsZFBvbHkgPSByZXF1aXJlKCcuL2J1aWxkUG9seScpO1xuICAgIGJ1aWxkQ29tcGxleFBvbHkgPSByZXF1aXJlKCcuL2J1aWxkQ29tcGxleFBvbHknKTtcbiAgICBidWlsZFJlY3RhbmdsZSA9IHJlcXVpcmUoJy4vYnVpbGRSZWN0YW5nbGUnKTtcbiAgICBidWlsZFJvdW5kZWRSZWN0YW5nbGUgPSByZXF1aXJlKCcuL2J1aWxkUm91bmRlZFJlY3RhbmdsZScpO1xuICAgIGJ1aWxkQ2lyY2xlID0gcmVxdWlyZSgnLi9idWlsZENpcmNsZScpO1xuXG4gICAgZWFyY3V0ID0gcmVxdWlyZSgnZWFyY3V0Jyk7XG5cbi8qKlxuICogUmVuZGVycyB0aGUgZ3JhcGhpY3Mgb2JqZWN0LlxuICpcbiAqIEBjbGFzc1xuICogQHByaXZhdGVcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAZXh0ZW5kcyBQSVhJLk9iamVjdFJlbmRlcmVyXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcn0gVGhlIHJlbmRlcmVyIHRoaXMgb2JqZWN0IHJlbmRlcmVyIHdvcmtzIGZvci5cbiAqL1xuZnVuY3Rpb24gR3JhcGhpY3NSZW5kZXJlcihyZW5kZXJlcilcbntcbiAgICBPYmplY3RSZW5kZXJlci5jYWxsKHRoaXMsIHJlbmRlcmVyKTtcblxuICAgIHRoaXMuZ3JhcGhpY3NEYXRhUG9vbCA9IFtdO1xuXG4gICAgdGhpcy5wcmltaXRpdmVTaGFkZXIgPSBudWxsO1xuICAgIHRoaXMuY29tcGxleFByaW1pdGl2ZVNoYWRlciA9IG51bGw7XG5cbiAgICB0aGlzLmdsID0gcmVuZGVyZXIuZ2w7XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIGlzIHRoZSBtYXhpbXVtIG51bWJlciBvZiBwb2ludHMgYSBwb2x5IGNhbiBjb250YWluIGJlZm9yZSBpdCBpcyByZW5kZXJlZCBhcyBhIGNvbXBsZXggcG9seWdvbiAodXNpbmcgdGhlIHN0ZW5jaWwgYnVmZmVyKVxuICAgICAqIEB0eXBlIHtOdW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy5tYXhpbXVtU2ltcGxlUG9seVNpemUgPSAyMDA7XG59XG5cbkdyYXBoaWNzUmVuZGVyZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShPYmplY3RSZW5kZXJlci5wcm90b3R5cGUpO1xuR3JhcGhpY3NSZW5kZXJlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBHcmFwaGljc1JlbmRlcmVyO1xubW9kdWxlLmV4cG9ydHMgPSBHcmFwaGljc1JlbmRlcmVyO1xuXG5XZWJHTFJlbmRlcmVyLnJlZ2lzdGVyUGx1Z2luKCdncmFwaGljcycsIEdyYXBoaWNzUmVuZGVyZXIpO1xuXG4vKipcbiAqIENhbGxlZCB3aGVuIHRoZXJlIGlzIGEgV2ViR0wgY29udGV4dCBjaGFuZ2VcbiAqXG4gKiBAcHJpdmF0ZVxuICpcbiAqL1xuR3JhcGhpY3NSZW5kZXJlci5wcm90b3R5cGUub25Db250ZXh0Q2hhbmdlID0gZnVuY3Rpb24oKVxue1xuICAgIHRoaXMuZ2wgPSB0aGlzLnJlbmRlcmVyLmdsO1xuICAgIHRoaXMucHJpbWl0aXZlU2hhZGVyID0gbmV3IFByaW1pdGl2ZVNoYWRlcih0aGlzLmdsKVxufTtcblxuLyoqXG4gKiBEZXN0cm95cyB0aGlzIHJlbmRlcmVyLlxuICpcbiAqL1xuR3JhcGhpY3NSZW5kZXJlci5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uICgpIHtcbiAgICBPYmplY3RSZW5kZXJlci5wcm90b3R5cGUuZGVzdHJveS5jYWxsKHRoaXMpO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmdyYXBoaWNzRGF0YVBvb2wubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgdGhpcy5ncmFwaGljc0RhdGFQb29sW2ldLmRlc3Ryb3koKTtcbiAgICB9XG5cbiAgICB0aGlzLmdyYXBoaWNzRGF0YVBvb2wgPSBudWxsO1xufTtcblxuLyoqXG4gKiBSZW5kZXJzIGEgZ3JhcGhpY3Mgb2JqZWN0LlxuICpcbiAqIEBwYXJhbSBncmFwaGljcyB7UElYSS5HcmFwaGljc30gVGhlIGdyYXBoaWNzIG9iamVjdCB0byByZW5kZXIuXG4gKi9cbkdyYXBoaWNzUmVuZGVyZXIucHJvdG90eXBlLnJlbmRlciA9IGZ1bmN0aW9uKGdyYXBoaWNzKVxue1xuICAgIHZhciByZW5kZXJlciA9IHRoaXMucmVuZGVyZXI7XG4gICAgdmFyIGdsID0gcmVuZGVyZXIuZ2w7XG5cbiAgICB2YXIgd2ViR0xEYXRhO1xuICAvLyAgY29uc29sZS5sb2coZ3JhcGhpY3MpXG4gICAgaWYgKGdyYXBoaWNzLmRpcnR5IHx8ICFncmFwaGljcy5fd2ViR0xbZ2wuaWRdKVxuICAgIHtcbiAgICAgICAgdGhpcy51cGRhdGVHcmFwaGljcyhncmFwaGljcyk7XG4gICAgfVxuXG4gICAgdmFyIHdlYkdMID0gZ3JhcGhpY3MuX3dlYkdMW2dsLmlkXTtcblxuICAgIC8vIFRoaXMgIGNvdWxkIGJlIHNwZWVkZWQgdXAgZm9yIHN1cmUhXG5cbiAgICByZW5kZXJlci5ibGVuZE1vZGVNYW5hZ2VyLnNldEJsZW5kTW9kZSggZ3JhcGhpY3MuYmxlbmRNb2RlICk7XG5cbi8vICAgIHZhciBtYXRyaXggPSAgZ3JhcGhpY3Mud29ybGRUcmFuc2Zvcm0uY2xvbmUoKTtcbi8vICAgIHZhciBtYXRyaXggPSAgcmVuZGVyZXIuY3VycmVudFJlbmRlclRhcmdldC5wcm9qZWN0aW9uTWF0cml4LmNsb25lKCk7XG4vLyAgICBtYXRyaXguYXBwZW5kKGdyYXBoaWNzLndvcmxkVHJhbnNmb3JtKTtcblxuICAgIGZvciAodmFyIGkgPSAwLCBuID0gd2ViR0wuZGF0YS5sZW5ndGg7IGkgPCBuOyBpKyspXG4gICAge1xuICAgICAgICB3ZWJHTERhdGEgPSB3ZWJHTC5kYXRhW2ldO1xuXG4gICAgICAgIGlmICh3ZWJHTC5kYXRhW2ldLm1vZGUgPT09IDEpXG4gICAgICAgIHtcbiAgICAgICAgICAgIC8vVE9ETyBmaXggdGhpcyBvbmUhXG4gICAgICAgICAgICBcbiAgICAgICAgICAgIC8qXG4gICAgICAgICAgICByZW5kZXJlci5zdGVuY2lsTWFuYWdlci5wdXNoU3RlbmNpbChncmFwaGljcywgd2ViR0xEYXRhKTtcblxuICAgICAgICAgICAgZ2wudW5pZm9ybTFmKHJlbmRlcmVyLnNoYWRlck1hbmFnZXIuY29tcGxleFByaW1pdGl2ZVNoYWRlci51bmlmb3Jtcy5hbHBoYS5fbG9jYXRpb24sIGdyYXBoaWNzLndvcmxkQWxwaGEgKiB3ZWJHTERhdGEuYWxwaGEpO1xuXG4gICAgICAgICAgICAvLyByZW5kZXIgcXVhZC4uXG4gICAgICAgICAgICBnbC5kcmF3RWxlbWVudHMoZ2wuVFJJQU5HTEVfRkFOLCA0LCBnbC5VTlNJR05FRF9TSE9SVCwgKCB3ZWJHTERhdGEuaW5kaWNlcy5sZW5ndGggLSA0ICkgKiAyICk7XG5cbiAgICAgICAgICAgIHJlbmRlcmVyLnN0ZW5jaWxNYW5hZ2VyLnBvcFN0ZW5jaWwoZ3JhcGhpY3MsIHdlYkdMRGF0YSk7XG4gICAgICAgICAgICAqL1xuICAgICAgICB9XG4gICAgICAgIGVsc2VcbiAgICAgICAge1xuXG4gICAgICAgICAgICBzaGFkZXIgPSB0aGlzLnByaW1pdGl2ZVNoYWRlcjtcblxuICAgICAgICAgICAgcmVuZGVyZXIuYmluZFNoYWRlcihzaGFkZXIpXG5cbiAgICAgICAgICAgIHNoYWRlci51bmlmb3Jtcy50cmFuc2xhdGlvbk1hdHJpeCA9IGdyYXBoaWNzLndvcmxkVHJhbnNmb3JtLnRvQXJyYXkodHJ1ZSk7XG4gICAgICAgICAgICBzaGFkZXIudW5pZm9ybXMudGludCA9IHV0aWxzLmhleDJyZ2IoZ3JhcGhpY3MudGludCk7XG4gICAgICAgICAgICBzaGFkZXIudW5pZm9ybXMuYWxwaGEgPSBncmFwaGljcy53b3JsZEFscGhhO1xuXG5cbiAgICAgICAgICAgIGdsLmJpbmRCdWZmZXIoZ2wuQVJSQVlfQlVGRkVSLCB3ZWJHTERhdGEuYnVmZmVyKTtcblxuICAgICAgICAgICAgc2hhZGVyID0gdGhpcy5wcmltaXRpdmVTaGFkZXI7XG5cbiAgICAgICAgICAgIHNoYWRlci5hdHRyaWJ1dGVzLmFWZXJ0ZXhQb3NpdGlvbi5wb2ludGVyKGdsLkZMT0FULCBmYWxzZSwgNCAqIDYsIDApO1xuICAgICAgICAgICAgc2hhZGVyLmF0dHJpYnV0ZXMuYUNvbG9yLnBvaW50ZXIoZ2wuRkxPQVQsIGZhbHNlLCA0ICogNiwgMiAqIDQpO1xuXG4gICAgICAgICAgICBnbC5lbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShzaGFkZXIuYXR0cmlidXRlcy5hVmVydGV4UG9zaXRpb24ubG9jYXRpb24pO1xuICAgICAgICAgICAgZ2wuZW5hYmxlVmVydGV4QXR0cmliQXJyYXkoc2hhZGVyLmF0dHJpYnV0ZXMuYUNvbG9yLmxvY2F0aW9uKTtcblxuICAgICAgICAgICAgLy8gc2V0IHRoZSBpbmRleCBidWZmZXIhXG4gICAgICAgICAgICBnbC5iaW5kQnVmZmVyKGdsLkVMRU1FTlRfQVJSQVlfQlVGRkVSLCB3ZWJHTERhdGEuaW5kZXhCdWZmZXIpO1xuICAgICAgICAgICAgZ2wuZHJhd0VsZW1lbnRzKGdsLlRSSUFOR0xFX1NUUklQLCAgd2ViR0xEYXRhLmluZGljZXMubGVuZ3RoLCBnbC5VTlNJR05FRF9TSE9SVCwgMCApO1xuICAgICAgICB9XG5cbiAgICAgICAgcmVuZGVyZXIuZHJhd0NvdW50Kys7XG4gICAgfVxufTtcblxuLyoqXG4gKiBVcGRhdGVzIHRoZSBncmFwaGljcyBvYmplY3RcbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIGdyYXBoaWNzIHtQSVhJLkdyYXBoaWNzfSBUaGUgZ3JhcGhpY3Mgb2JqZWN0IHRvIHVwZGF0ZVxuICovXG5HcmFwaGljc1JlbmRlcmVyLnByb3RvdHlwZS51cGRhdGVHcmFwaGljcyA9IGZ1bmN0aW9uKGdyYXBoaWNzKVxue1xuICAgIHZhciBnbCA9IHRoaXMucmVuZGVyZXIuZ2w7XG5cbiAgICAgLy8gZ2V0IHRoZSBjb250ZXh0cyBncmFwaGljcyBvYmplY3RcbiAgICB2YXIgd2ViR0wgPSBncmFwaGljcy5fd2ViR0xbZ2wuaWRdO1xuXG4gICAgLy8gaWYgdGhlIGdyYXBoaWNzIG9iamVjdCBkb2VzIG5vdCBleGlzdCBpbiB0aGUgd2ViR0wgY29udGV4dCB0aW1lIHRvIGNyZWF0ZSBpdCFcbiAgICBpZiAoIXdlYkdMKVxuICAgIHtcbiAgICAgICAgd2ViR0wgPSBncmFwaGljcy5fd2ViR0xbZ2wuaWRdID0ge2xhc3RJbmRleDowLCBkYXRhOltdLCBnbDpnbH07XG4gICAgfVxuXG4gICBcbiAgICAvLyBmbGFnIHRoZSBncmFwaGljcyBhcyBub3QgZGlydHkgYXMgd2UgYXJlIGFib3V0IHRvIHVwZGF0ZSBpdC4uLlxuICAgIGdyYXBoaWNzLmRpcnR5ID0gZmFsc2U7XG5cbiAgICB2YXIgaTtcblxuICAgIC8vIGlmIHRoZSB1c2VyIGNsZWFyZWQgdGhlIGdyYXBoaWNzIG9iamVjdCB3ZSB3aWxsIG5lZWQgdG8gY2xlYXIgZXZlcnkgb2JqZWN0XG4gICAgaWYgKGdyYXBoaWNzLmNsZWFyRGlydHkpXG4gICAge1xuICAgICAgICBncmFwaGljcy5jbGVhckRpcnR5ID0gZmFsc2U7XG5cbiAgICAgICAgLy8gbG9vcCB0aHJvdWdoIGFuZCByZXR1cm4gYWxsIHRoZSB3ZWJHTERhdGFzIHRvIHRoZSBvYmplY3QgcG9vbCBzbyB0aGFuIGNhbiBiZSByZXVzZWQgbGF0ZXIgb25cbiAgICAgICAgZm9yIChpID0gMDsgaSA8IHdlYkdMLmRhdGEubGVuZ3RoOyBpKyspXG4gICAgICAgIHtcbiAgICAgICAgICAgIHZhciBncmFwaGljc0RhdGEgPSB3ZWJHTC5kYXRhW2ldO1xuICAgICAgICAgICAgZ3JhcGhpY3NEYXRhLnJlc2V0KCk7XG4gICAgICAgICAgICB0aGlzLmdyYXBoaWNzRGF0YVBvb2wucHVzaCggZ3JhcGhpY3NEYXRhICk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBjbGVhciB0aGUgYXJyYXkgYW5kIHJlc2V0IHRoZSBpbmRleC4uXG4gICAgICAgIHdlYkdMLmRhdGEgPSBbXTtcbiAgICAgICAgd2ViR0wubGFzdEluZGV4ID0gMDtcbiAgICB9XG5cbiAgICB2YXIgd2ViR0xEYXRhO1xuXG4gICAgLy8gbG9vcCB0aHJvdWdoIHRoZSBncmFwaGljcyBkYXRhcyBhbmQgY29uc3RydWN0IGVhY2ggb25lLi5cbiAgICAvLyBpZiB0aGUgb2JqZWN0IGlzIGEgY29tcGxleCBmaWxsIHRoZW4gdGhlIG5ldyBzdGVuY2lsIGJ1ZmZlciB0ZWNobmlxdWUgd2lsbCBiZSB1c2VkXG4gICAgLy8gb3RoZXIgd2lzZSBncmFwaGljcyBvYmplY3RzIHdpbGwgYmUgcHVzaGVkIGludG8gYSBiYXRjaC4uXG4gICAgZm9yIChpID0gd2ViR0wubGFzdEluZGV4OyBpIDwgZ3JhcGhpY3MuZ3JhcGhpY3NEYXRhLmxlbmd0aDsgaSsrKVxuICAgIHtcbiAgICAgICAgdmFyIGRhdGEgPSBncmFwaGljcy5ncmFwaGljc0RhdGFbaV07XG5cbiAgICAgICAgaWYgKGRhdGEudHlwZSA9PT0gQ09OU1QuU0hBUEVTLlBPTFkpXG4gICAgICAgIHtcbiAgICAgICAgICAgIC8vIG5lZWQgdG8gYWRkIHRoZSBwb2ludHMgdGhlIHRoZSBncmFwaGljcyBvYmplY3QuLlxuICAgICAgICAgICAgZGF0YS5wb2ludHMgPSBkYXRhLnNoYXBlLnBvaW50cy5zbGljZSgpO1xuICAgICAgICAgICAgaWYgKGRhdGEuc2hhcGUuY2xvc2VkKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIC8vIGNsb3NlIHRoZSBwb2x5IGlmIHRoZSB2YWx1ZSBpcyB0cnVlIVxuICAgICAgICAgICAgICAgIGlmIChkYXRhLnBvaW50c1swXSAhPT0gZGF0YS5wb2ludHNbZGF0YS5wb2ludHMubGVuZ3RoLTJdIHx8IGRhdGEucG9pbnRzWzFdICE9PSBkYXRhLnBvaW50c1tkYXRhLnBvaW50cy5sZW5ndGgtMV0pXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBkYXRhLnBvaW50cy5wdXNoKGRhdGEucG9pbnRzWzBdLCBkYXRhLnBvaW50c1sxXSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBNQUtFIFNVUkUgV0UgSEFWRSBUSEUgQ09SUkVDVCBUWVBFLi5cbiAgICAgICAgICAgIGlmIChkYXRhLmZpbGwpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgaWYgKGRhdGEucG9pbnRzLmxlbmd0aCA+PSA2KVxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGRhdGEucG9pbnRzLmxlbmd0aCA8IHRoaXMubWF4aW11bVNpbXBsZVBvbHlTaXplICogMilcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgd2ViR0xEYXRhID0gdGhpcy5zd2l0Y2hNb2RlKHdlYkdMLCAwKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNhbkRyYXdVc2luZ1NpbXBsZSA9IGJ1aWxkUG9seShkYXRhLCB3ZWJHTERhdGEpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWNhbkRyYXdVc2luZ1NpbXBsZSlcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3ZWJHTERhdGEgPSB0aGlzLnN3aXRjaE1vZGUod2ViR0wsIDEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1aWxkQ29tcGxleFBvbHkoZGF0YSwgd2ViR0xEYXRhKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgd2ViR0xEYXRhID0gdGhpcy5zd2l0Y2hNb2RlKHdlYkdMLCAxKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJ1aWxkQ29tcGxleFBvbHkoZGF0YSwgd2ViR0xEYXRhKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGRhdGEubGluZVdpZHRoID4gMClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB3ZWJHTERhdGEgPSB0aGlzLnN3aXRjaE1vZGUod2ViR0wsIDApO1xuICAgICAgICAgICAgICAgIGJ1aWxkTGluZShkYXRhLCB3ZWJHTERhdGEpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2VcbiAgICAgICAge1xuICAgICAgICAgICAgd2ViR0xEYXRhID0gdGhpcy5zd2l0Y2hNb2RlKHdlYkdMLCAwKTtcblxuICAgICAgICAgICAgaWYgKGRhdGEudHlwZSA9PT0gQ09OU1QuU0hBUEVTLlJFQ1QpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgYnVpbGRSZWN0YW5nbGUoZGF0YSwgd2ViR0xEYXRhKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGRhdGEudHlwZSA9PT0gQ09OU1QuU0hBUEVTLkNJUkMgfHwgZGF0YS50eXBlID09PSBDT05TVC5TSEFQRVMuRUxJUClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBidWlsZENpcmNsZShkYXRhLCB3ZWJHTERhdGEpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoZGF0YS50eXBlID09PSBDT05TVC5TSEFQRVMuUlJFQylcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBidWlsZFJvdW5kZWRSZWN0YW5nbGUoZGF0YSwgd2ViR0xEYXRhKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHdlYkdMLmxhc3RJbmRleCsrO1xuICAgIH1cblxuICAgIC8vIHVwbG9hZCBhbGwgdGhlIGRpcnR5IGRhdGEuLi5cbiAgICBmb3IgKGkgPSAwOyBpIDwgd2ViR0wuZGF0YS5sZW5ndGg7IGkrKylcbiAgICB7XG4gICAgICAgIHdlYkdMRGF0YSA9IHdlYkdMLmRhdGFbaV07XG5cbiAgICAgICAgaWYgKHdlYkdMRGF0YS5kaXJ0eSlcbiAgICAgICAge1xuICAgICAgICAgICAgd2ViR0xEYXRhLnVwbG9hZCgpO1xuICAgICAgICB9XG4gICAgfVxufTtcblxuLyoqXG4gKlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0gd2ViR0wge1dlYkdMUmVuZGVyaW5nQ29udGV4dH0gdGhlIGN1cnJlbnQgV2ViR0wgZHJhd2luZyBjb250ZXh0XG4gKiBAcGFyYW0gdHlwZSB7bnVtYmVyfSBUT0RPIEBBbHZpblxuICovXG5HcmFwaGljc1JlbmRlcmVyLnByb3RvdHlwZS5zd2l0Y2hNb2RlID0gZnVuY3Rpb24gKHdlYkdMLCB0eXBlKVxue1xuICAgIHZhciB3ZWJHTERhdGE7XG5cbiAgICBpZiAoIXdlYkdMLmRhdGEubGVuZ3RoKVxuICAgIHtcbiAgICAgICAgd2ViR0xEYXRhID0gdGhpcy5ncmFwaGljc0RhdGFQb29sLnBvcCgpIHx8IG5ldyBXZWJHTEdyYXBoaWNzRGF0YSh3ZWJHTC5nbCk7XG4gICAgICAgIHdlYkdMRGF0YS5tb2RlID0gdHlwZTtcbiAgICAgICAgd2ViR0wuZGF0YS5wdXNoKHdlYkdMRGF0YSk7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHdlYkdMRGF0YSA9IHdlYkdMLmRhdGFbd2ViR0wuZGF0YS5sZW5ndGgtMV07XG5cbiAgICAgICAgaWYgKCh3ZWJHTERhdGEucG9pbnRzLmxlbmd0aCA+IDMyMDAwMCkgfHwgd2ViR0xEYXRhLm1vZGUgIT09IHR5cGUgfHwgdHlwZSA9PT0gMSlcbiAgICAgICAge1xuICAgICAgICAgICAgd2ViR0xEYXRhID0gdGhpcy5ncmFwaGljc0RhdGFQb29sLnBvcCgpIHx8IG5ldyBXZWJHTEdyYXBoaWNzRGF0YSh3ZWJHTC5nbCk7XG4gICAgICAgICAgICB3ZWJHTERhdGEubW9kZSA9IHR5cGU7XG4gICAgICAgICAgICB3ZWJHTC5kYXRhLnB1c2god2ViR0xEYXRhKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHdlYkdMRGF0YS5kaXJ0eSA9IHRydWU7XG5cbiAgICByZXR1cm4gd2ViR0xEYXRhO1xufTtcblxuIiwidmFyIFNoYWRlciA9IHJlcXVpcmUoJ3BpeGktZ2wtY29yZScpLkdMU2hhZGVyO1xuXG4vKipcbiAqIFRoaXMgc2hhZGVyIGlzIHVzZWQgdG8gZHJhdyBzaW1wbGUgcHJpbWl0aXZlIHNoYXBlcyBmb3Ige0BsaW5rIFBJWEkuR3JhcGhpY3N9LlxuICpcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqIEBleHRlbmRzIFBJWEkuU2hhZGVyXG4gKiBAcGFyYW0gc2hhZGVyTWFuYWdlciB7U2hhZGVyTWFuYWdlcn0gVGhlIHdlYmdsIHNoYWRlciBtYW5hZ2VyIHRoaXMgc2hhZGVyIHdvcmtzIGZvci5cbiAqL1xuZnVuY3Rpb24gUHJpbWl0aXZlU2hhZGVyKGdsKVxue1xuICAgIFNoYWRlci5jYWxsKHRoaXMsXG4gICAgICAgIGdsLFxuICAgICAgICAvLyB2ZXJ0ZXggc2hhZGVyXG4gICAgICAgIFtcbiAgICAgICAgICAgICdhdHRyaWJ1dGUgdmVjMiBhVmVydGV4UG9zaXRpb247JyxcbiAgICAgICAgICAgICdhdHRyaWJ1dGUgdmVjNCBhQ29sb3I7JyxcblxuICAgICAgICAgICAgJ3VuaWZvcm0gbWF0MyB0cmFuc2xhdGlvbk1hdHJpeDsnLFxuICAgICAgICAgICAgJ3VuaWZvcm0gbWF0MyBwcm9qZWN0aW9uTWF0cml4OycsXG5cbiAgICAgICAgICAgICd1bmlmb3JtIGZsb2F0IGFscGhhOycsXG4gICAgICAgICAgICAndW5pZm9ybSBmbG9hdCBmbGlwWTsnLFxuICAgICAgICAgICAgJ3VuaWZvcm0gdmVjMyB0aW50OycsXG5cbiAgICAgICAgICAgICd2YXJ5aW5nIHZlYzQgdkNvbG9yOycsXG5cbiAgICAgICAgICAgICd2b2lkIG1haW4odm9pZCl7JyxcbiAgICAgICAgICAgICcgICBnbF9Qb3NpdGlvbiA9IHZlYzQoKHByb2plY3Rpb25NYXRyaXggKiB0cmFuc2xhdGlvbk1hdHJpeCAqIHZlYzMoYVZlcnRleFBvc2l0aW9uLCAxLjApKS54eSwgMC4wLCAxLjApOycsXG4gICAgICAgICAgICAnICAgdkNvbG9yID0gYUNvbG9yICogdmVjNCh0aW50ICogYWxwaGEsIGFscGhhKTsnLFxuICAgICAgICAgICAgJ30nXG4gICAgICAgIF0uam9pbignXFxuJyksXG4gICAgICAgIC8vIGZyYWdtZW50IHNoYWRlclxuICAgICAgICBbXG4gICAgICAgICAgICAncHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7JyxcblxuICAgICAgICAgICAgJ3ZhcnlpbmcgdmVjNCB2Q29sb3I7JyxcblxuICAgICAgICAgICAgJ3ZvaWQgbWFpbih2b2lkKXsnLFxuICAgICAgICAgICAgJyAgIGdsX0ZyYWdDb2xvciA9IHZDb2xvcjsnLFxuICAgICAgICAgICAgJ30nXG4gICAgICAgIF0uam9pbignXFxuJylcbiAgICApO1xufVxuXG5QcmltaXRpdmVTaGFkZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShTaGFkZXIucHJvdG90eXBlKTtcblByaW1pdGl2ZVNoYWRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBQcmltaXRpdmVTaGFkZXI7XG5cbm1vZHVsZS5leHBvcnRzID0gUHJpbWl0aXZlU2hhZGVyO1xuIiwiLyoqXG4gKiBBbiBvYmplY3QgY29udGFpbmluZyBXZWJHTCBzcGVjaWZpYyBwcm9wZXJ0aWVzIHRvIGJlIHVzZWQgYnkgdGhlIFdlYkdMIHJlbmRlcmVyXG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIGdsIHtXZWJHTFJlbmRlcmluZ0NvbnRleHR9IHRoZSBjdXJyZW50IFdlYkdMIGRyYXdpbmcgY29udGV4dFxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gV2ViR0xHcmFwaGljc0RhdGEoZ2wpIHtcblxuICAgIC8qKlxuICAgICAqIFRoZSBjdXJyZW50IFdlYkdMIGRyYXdpbmcgY29udGV4dFxuICAgICAqXG4gICAgICogQG1lbWJlciB7V2ViR0xSZW5kZXJpbmdDb250ZXh0fVxuICAgICAqL1xuICAgIHRoaXMuZ2wgPSBnbDtcblxuICAgIC8vVE9ETyBkb2VzIHRoaXMgbmVlZCB0byBiZSBzcGxpdCBiZWZvcmUgdXBsb2Rpbmc/P1xuICAgIC8qKlxuICAgICAqIEFuIGFycmF5IG9mIGNvbG9yIGNvbXBvbmVudHMgKHIsZyxiKVxuICAgICAqIEBtZW1iZXIge251bWJlcltdfVxuICAgICAqL1xuICAgIHRoaXMuY29sb3IgPSBbMCwwLDBdOyAvLyBjb2xvciBzcGxpdCFcblxuICAgIC8qKlxuICAgICAqIEFuIGFycmF5IG9mIHBvaW50cyB0byBkcmF3XG4gICAgICogQG1lbWJlciB7UElYSS5Qb2ludFtdfVxuICAgICAqL1xuICAgIHRoaXMucG9pbnRzID0gW107XG5cbiAgICAvKipcbiAgICAgKiBUaGUgaW5kaWNlcyBvZiB0aGUgdmVydGljZXNcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJbXX1cbiAgICAgKi9cbiAgICB0aGlzLmluZGljZXMgPSBbXTtcbiAgICAvKipcbiAgICAgKiBUaGUgbWFpbiBidWZmZXJcbiAgICAgKiBAbWVtYmVyIHtXZWJHTEJ1ZmZlcn1cbiAgICAgKi9cbiAgICB0aGlzLmJ1ZmZlciA9IGdsLmNyZWF0ZUJ1ZmZlcigpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGluZGV4IGJ1ZmZlclxuICAgICAqIEBtZW1iZXIge1dlYkdMQnVmZmVyfVxuICAgICAqL1xuICAgIHRoaXMuaW5kZXhCdWZmZXIgPSBnbC5jcmVhdGVCdWZmZXIoKTtcblxuICAgIC8qKlxuICAgICAqIHRvZG8gQGFsdmluXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMubW9kZSA9IDE7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYWxwaGEgb2YgdGhlIGdyYXBoaWNzXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMuYWxwaGEgPSAxO1xuXG4gICAgLyoqXG4gICAgICogV2hldGhlciB0aGlzIGdyYXBoaWNzIGlzIGRpcnR5IG9yIG5vdFxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICovXG4gICAgdGhpcy5kaXJ0eSA9IHRydWU7XG5cbiAgICB0aGlzLmdsUG9pbnRzID0gbnVsbDtcbiAgICB0aGlzLmdsSW5kaWNlcyA9IG51bGw7XG59XG5cbldlYkdMR3JhcGhpY3NEYXRhLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFdlYkdMR3JhcGhpY3NEYXRhO1xubW9kdWxlLmV4cG9ydHMgPSBXZWJHTEdyYXBoaWNzRGF0YTtcblxuLyoqXG4gKiBSZXNldHMgdGhlIHZlcnRpY2VzIGFuZCB0aGUgaW5kaWNlc1xuICovXG5XZWJHTEdyYXBoaWNzRGF0YS5wcm90b3R5cGUucmVzZXQgPSBmdW5jdGlvbiAoKSB7XG4gICAgdGhpcy5wb2ludHMubGVuZ3RoID0gMDtcbiAgICB0aGlzLmluZGljZXMubGVuZ3RoID0gMDtcbn07XG5cbi8qKlxuICogQmluZHMgdGhlIGJ1ZmZlcnMgYW5kIHVwbG9hZHMgdGhlIGRhdGFcbiAqL1xuV2ViR0xHcmFwaGljc0RhdGEucHJvdG90eXBlLnVwbG9hZCA9IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgZ2wgPSB0aGlzLmdsO1xuXG4vLyAgICB0aGlzLmxhc3RJbmRleCA9IGdyYXBoaWNzLmdyYXBoaWNzRGF0YS5sZW5ndGg7XG4gICAgdGhpcy5nbFBvaW50cyA9IG5ldyBGbG9hdDMyQXJyYXkodGhpcy5wb2ludHMpO1xuXG4gICAgZ2wuYmluZEJ1ZmZlcihnbC5BUlJBWV9CVUZGRVIsIHRoaXMuYnVmZmVyKTtcbiAgICBnbC5idWZmZXJEYXRhKGdsLkFSUkFZX0JVRkZFUiwgdGhpcy5nbFBvaW50cywgZ2wuU1RBVElDX0RSQVcpO1xuXG4gICAgdGhpcy5nbEluZGljZXMgPSBuZXcgVWludDE2QXJyYXkodGhpcy5pbmRpY2VzKTtcblxuICAgIGdsLmJpbmRCdWZmZXIoZ2wuRUxFTUVOVF9BUlJBWV9CVUZGRVIsIHRoaXMuaW5kZXhCdWZmZXIpO1xuICAgIGdsLmJ1ZmZlckRhdGEoZ2wuRUxFTUVOVF9BUlJBWV9CVUZGRVIsIHRoaXMuZ2xJbmRpY2VzLCBnbC5TVEFUSUNfRFJBVyk7XG5cbiAgICB0aGlzLmRpcnR5ID0gZmFsc2U7XG59O1xuXG5XZWJHTEdyYXBoaWNzRGF0YS5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uICgpIHtcbiAgICB0aGlzLmNvbG9yID0gbnVsbDtcbiAgICB0aGlzLnBvaW50cyA9IG51bGw7XG4gICAgdGhpcy5pbmRpY2VzID0gbnVsbDtcblxuICAgIHRoaXMuZ2wuZGVsZXRlQnVmZmVyKHRoaXMuYnVmZmVyKTtcbiAgICB0aGlzLmdsLmRlbGV0ZUJ1ZmZlcih0aGlzLmluZGV4QnVmZmVyKTtcbiAgICBcbiAgICB0aGlzLmdsID0gbnVsbDtcblxuICAgIHRoaXMuYnVmZmVyID0gbnVsbDtcbiAgICB0aGlzLmluZGV4QnVmZmVyID0gbnVsbDtcblxuICAgIHRoaXMuZ2xQb2ludHMgPSBudWxsO1xuICAgIHRoaXMuZ2xJbmRpY2VzID0gbnVsbDtcbn07XG4iLCJ2YXIgYnVpbGRMaW5lID0gcmVxdWlyZSgnLi9idWlsZExpbmUnKSxcbiAgICB1dGlscyA9IHJlcXVpcmUoJy4uLy4uL3V0aWxzJyk7XG5cbi8qKlxuICogQnVpbGRzIGEgY2lyY2xlIHRvIGRyYXdcbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIGdyYXBoaWNzRGF0YSB7UElYSS5HcmFwaGljc30gVGhlIGdyYXBoaWNzIG9iamVjdCB0byBkcmF3XG4gKiBAcGFyYW0gd2ViR0xEYXRhIHtvYmplY3R9IGFuIG9iamVjdCBjb250YWluaW5nIGFsbCB0aGUgd2ViR0wtc3BlY2lmaWMgaW5mb3JtYXRpb24gdG8gY3JlYXRlIHRoaXMgc2hhcGVcbiAqL1xudmFyIGJ1aWxkQ2lyY2xlID0gZnVuY3Rpb24gKGdyYXBoaWNzRGF0YSwgd2ViR0xEYXRhKVxue1xuICAgIC8vIG5lZWQgdG8gY29udmVydCBwb2ludHMgdG8gYSBuaWNlIHJlZ3VsYXIgZGF0YVxuICAgIHZhciBjaXJjbGVEYXRhID0gZ3JhcGhpY3NEYXRhLnNoYXBlO1xuICAgIHZhciB4ID0gY2lyY2xlRGF0YS54O1xuICAgIHZhciB5ID0gY2lyY2xlRGF0YS55O1xuICAgIHZhciB3aWR0aDtcbiAgICB2YXIgaGVpZ2h0O1xuXG4gICAgLy8gVE9ETyAtIGJpdCBoYWNreT8/XG4gICAgaWYgKGdyYXBoaWNzRGF0YS50eXBlID09PSBDT05TVC5TSEFQRVMuQ0lSQylcbiAgICB7XG4gICAgICAgIHdpZHRoID0gY2lyY2xlRGF0YS5yYWRpdXM7XG4gICAgICAgIGhlaWdodCA9IGNpcmNsZURhdGEucmFkaXVzO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICB3aWR0aCA9IGNpcmNsZURhdGEud2lkdGg7XG4gICAgICAgIGhlaWdodCA9IGNpcmNsZURhdGEuaGVpZ2h0O1xuICAgIH1cblxuICAgIHZhciB0b3RhbFNlZ3MgPSBNYXRoLmZsb29yKDMwICogTWF0aC5zcXJ0KGNpcmNsZURhdGEucmFkaXVzKSkgfHwgTWF0aC5mbG9vcigxNSAqIE1hdGguc3FydChjaXJjbGVEYXRhLndpZHRoICsgY2lyY2xlRGF0YS5oZWlnaHQpKTtcbiAgICB2YXIgc2VnID0gKE1hdGguUEkgKiAyKSAvIHRvdGFsU2VncyA7XG5cbiAgICB2YXIgaSA9IDA7XG5cbiAgICBpZiAoZ3JhcGhpY3NEYXRhLmZpbGwpXG4gICAge1xuICAgICAgICB2YXIgY29sb3IgPSB1dGlscy5oZXgycmdiKGdyYXBoaWNzRGF0YS5maWxsQ29sb3IpO1xuICAgICAgICB2YXIgYWxwaGEgPSBncmFwaGljc0RhdGEuZmlsbEFscGhhO1xuXG4gICAgICAgIHZhciByID0gY29sb3JbMF0gKiBhbHBoYTtcbiAgICAgICAgdmFyIGcgPSBjb2xvclsxXSAqIGFscGhhO1xuICAgICAgICB2YXIgYiA9IGNvbG9yWzJdICogYWxwaGE7XG5cbiAgICAgICAgdmFyIHZlcnRzID0gd2ViR0xEYXRhLnBvaW50cztcbiAgICAgICAgdmFyIGluZGljZXMgPSB3ZWJHTERhdGEuaW5kaWNlcztcblxuICAgICAgICB2YXIgdmVjUG9zID0gdmVydHMubGVuZ3RoLzY7XG5cbiAgICAgICAgaW5kaWNlcy5wdXNoKHZlY1Bvcyk7XG5cbiAgICAgICAgZm9yIChpID0gMDsgaSA8IHRvdGFsU2VncyArIDEgOyBpKyspXG4gICAgICAgIHtcbiAgICAgICAgICAgIHZlcnRzLnB1c2goeCx5LCByLCBnLCBiLCBhbHBoYSk7XG5cbiAgICAgICAgICAgIHZlcnRzLnB1c2goeCArIE1hdGguc2luKHNlZyAqIGkpICogd2lkdGgsXG4gICAgICAgICAgICAgICAgICAgICAgIHkgKyBNYXRoLmNvcyhzZWcgKiBpKSAqIGhlaWdodCxcbiAgICAgICAgICAgICAgICAgICAgICAgciwgZywgYiwgYWxwaGEpO1xuXG4gICAgICAgICAgICBpbmRpY2VzLnB1c2godmVjUG9zKyssIHZlY1BvcysrKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGluZGljZXMucHVzaCh2ZWNQb3MtMSk7XG4gICAgfVxuXG4gICAgaWYgKGdyYXBoaWNzRGF0YS5saW5lV2lkdGgpXG4gICAge1xuICAgICAgICB2YXIgdGVtcFBvaW50cyA9IGdyYXBoaWNzRGF0YS5wb2ludHM7XG5cbiAgICAgICAgZ3JhcGhpY3NEYXRhLnBvaW50cyA9IFtdO1xuXG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCB0b3RhbFNlZ3MgKyAxOyBpKyspXG4gICAgICAgIHtcbiAgICAgICAgICAgIGdyYXBoaWNzRGF0YS5wb2ludHMucHVzaCh4ICsgTWF0aC5zaW4oc2VnICogaSkgKiB3aWR0aCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB5ICsgTWF0aC5jb3Moc2VnICogaSkgKiBoZWlnaHQpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5idWlsZExpbmUoZ3JhcGhpY3NEYXRhLCB3ZWJHTERhdGEpO1xuXG4gICAgICAgIGdyYXBoaWNzRGF0YS5wb2ludHMgPSB0ZW1wUG9pbnRzO1xuICAgIH1cbn07XG5cblxubW9kdWxlLmV4cG9ydHMgPSBidWlsZENpcmNsZTsiLCJ2YXIgYnVpbGRMaW5lID0gcmVxdWlyZSgnLi9idWlsZExpbmUnKSxcbiAgICB1dGlscyA9IHJlcXVpcmUoJy4uLy4uL3V0aWxzJyk7XG4gICAgXG5cblxuLyoqXG4gKiBCdWlsZHMgYSBjb21wbGV4IHBvbHlnb24gdG8gZHJhd1xuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0gZ3JhcGhpY3NEYXRhIHtQSVhJLkdyYXBoaWNzfSBUaGUgZ3JhcGhpY3Mgb2JqZWN0IGNvbnRhaW5pbmcgYWxsIHRoZSBuZWNlc3NhcnkgcHJvcGVydGllc1xuICogQHBhcmFtIHdlYkdMRGF0YSB7b2JqZWN0fSBhbiBvYmplY3QgY29udGFpbmluZyBhbGwgdGhlIHdlYkdMLXNwZWNpZmljIGluZm9ybWF0aW9uIHRvIGNyZWF0ZSB0aGlzIHNoYXBlXG4gKi9cbnZhciBidWlsZENvbXBsZXhQb2x5ID0gZnVuY3Rpb24gKGdyYXBoaWNzRGF0YSwgd2ViR0xEYXRhKVxue1xuICAgIC8vVE9ETyAtIG5vIG5lZWQgdG8gY29weSB0aGlzIGFzIGl0IGdldHMgdHVybmVkIGludG8gYSBGTG9hdDMyQXJyYXkgYW55d2F5cy4uXG4gICAgdmFyIHBvaW50cyA9IGdyYXBoaWNzRGF0YS5wb2ludHMuc2xpY2UoKTtcblxuICAgIGlmIChwb2ludHMubGVuZ3RoIDwgNilcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBnZXQgZmlyc3QgYW5kIGxhc3QgcG9pbnQuLiBmaWd1cmUgb3V0IHRoZSBtaWRkbGUhXG4gICAgdmFyIGluZGljZXMgPSB3ZWJHTERhdGEuaW5kaWNlcztcbiAgICB3ZWJHTERhdGEucG9pbnRzID0gcG9pbnRzO1xuICAgIHdlYkdMRGF0YS5hbHBoYSA9IGdyYXBoaWNzRGF0YS5maWxsQWxwaGE7XG4gICAgd2ViR0xEYXRhLmNvbG9yID0gdXRpbHMuaGV4MnJnYihncmFwaGljc0RhdGEuZmlsbENvbG9yKTtcblxuICAgIC8vIGNhbGNsYXRlIHRoZSBib3VuZHMuLlxuICAgIHZhciBtaW5YID0gSW5maW5pdHk7XG4gICAgdmFyIG1heFggPSAtSW5maW5pdHk7XG5cbiAgICB2YXIgbWluWSA9IEluZmluaXR5O1xuICAgIHZhciBtYXhZID0gLUluZmluaXR5O1xuXG4gICAgdmFyIHgseTtcblxuICAgIC8vIGdldCBzaXplLi5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHBvaW50cy5sZW5ndGg7IGkrPTIpXG4gICAge1xuICAgICAgICB4ID0gcG9pbnRzW2ldO1xuICAgICAgICB5ID0gcG9pbnRzW2krMV07XG5cbiAgICAgICAgbWluWCA9IHggPCBtaW5YID8geCA6IG1pblg7XG4gICAgICAgIG1heFggPSB4ID4gbWF4WCA/IHggOiBtYXhYO1xuXG4gICAgICAgIG1pblkgPSB5IDwgbWluWSA/IHkgOiBtaW5ZO1xuICAgICAgICBtYXhZID0geSA+IG1heFkgPyB5IDogbWF4WTtcbiAgICB9XG5cbiAgICAvLyBhZGQgYSBxdWFkIHRvIHRoZSBlbmQgY29zIHRoZXJlIGlzIG5vIHBvaW50IG1ha2luZyBhbm90aGVyIGJ1ZmZlciFcbiAgICBwb2ludHMucHVzaChtaW5YLCBtaW5ZLFxuICAgICAgICAgICAgICAgIG1heFgsIG1pblksXG4gICAgICAgICAgICAgICAgbWF4WCwgbWF4WSxcbiAgICAgICAgICAgICAgICBtaW5YLCBtYXhZKTtcblxuICAgIC8vIHB1c2ggYSBxdWFkIG9udG8gdGhlIGVuZC4uXG5cbiAgICAvL1RPRE8gLSB0aGlzIGFpbnQgbmVlZGVkIVxuICAgIHZhciBsZW5ndGggPSBwb2ludHMubGVuZ3RoIC8gMjtcbiAgICBmb3IgKGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspXG4gICAge1xuICAgICAgICBpbmRpY2VzLnB1c2goIGkgKTtcbiAgICB9XG5cbn07XG5cblxuXG5tb2R1bGUuZXhwb3J0cyA9IGJ1aWxkQ29tcGxleFBvbHk7IiwidmFyIG1hdGggPSByZXF1aXJlKCcuLi8uLi9tYXRoJyksXG4gICAgdXRpbHMgPSByZXF1aXJlKCcuLi8uLi91dGlscycpO1xuXG4vKipcbiAqIEJ1aWxkcyBhIGxpbmUgdG8gZHJhd1xuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0gZ3JhcGhpY3NEYXRhIHtQSVhJLkdyYXBoaWNzfSBUaGUgZ3JhcGhpY3Mgb2JqZWN0IGNvbnRhaW5pbmcgYWxsIHRoZSBuZWNlc3NhcnkgcHJvcGVydGllc1xuICogQHBhcmFtIHdlYkdMRGF0YSB7b2JqZWN0fSBhbiBvYmplY3QgY29udGFpbmluZyBhbGwgdGhlIHdlYkdMLXNwZWNpZmljIGluZm9ybWF0aW9uIHRvIGNyZWF0ZSB0aGlzIHNoYXBlXG4gKi9cbnZhciBidWlsZExpbmUgPSBmdW5jdGlvbiAoZ3JhcGhpY3NEYXRhLCB3ZWJHTERhdGEpXG57XG4gICAgLy8gVE9ETyBPUFRJTUlTRSFcbiAgICB2YXIgaSA9IDA7XG4gICAgdmFyIHBvaW50cyA9IGdyYXBoaWNzRGF0YS5wb2ludHM7XG5cbiAgICBpZiAocG9pbnRzLmxlbmd0aCA9PT0gMClcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgLy8gaWYgdGhlIGxpbmUgd2lkdGggaXMgYW4gb2RkIG51bWJlciBhZGQgMC41IHRvIGFsaWduIHRvIGEgd2hvbGUgcGl4ZWxcbiAgICAvLyBjb21tZW50aW5nIHRoaXMgb3V0IGZpeGVzICM3MTEgYW5kICMxNjIwXG4gICAgLy8gaWYgKGdyYXBoaWNzRGF0YS5saW5lV2lkdGglMilcbiAgICAvLyB7XG4gICAgLy8gICAgIGZvciAoaSA9IDA7IGkgPCBwb2ludHMubGVuZ3RoOyBpKyspXG4gICAgLy8gICAgIHtcbiAgICAvLyAgICAgICAgIHBvaW50c1tpXSArPSAwLjU7XG4gICAgLy8gICAgIH1cbiAgICAvLyB9XG5cbiAgICAvLyBnZXQgZmlyc3QgYW5kIGxhc3QgcG9pbnQuLiBmaWd1cmUgb3V0IHRoZSBtaWRkbGUhXG4gICAgdmFyIGZpcnN0UG9pbnQgPSBuZXcgbWF0aC5Qb2ludChwb2ludHNbMF0sIHBvaW50c1sxXSk7XG4gICAgdmFyIGxhc3RQb2ludCA9IG5ldyBtYXRoLlBvaW50KHBvaW50c1twb2ludHMubGVuZ3RoIC0gMl0sIHBvaW50c1twb2ludHMubGVuZ3RoIC0gMV0pO1xuXG4gICAgLy8gaWYgdGhlIGZpcnN0IHBvaW50IGlzIHRoZSBsYXN0IHBvaW50IC0gZ29ubmEgaGF2ZSBpc3N1ZXMgOilcbiAgICBpZiAoZmlyc3RQb2ludC54ID09PSBsYXN0UG9pbnQueCAmJiBmaXJzdFBvaW50LnkgPT09IGxhc3RQb2ludC55KVxuICAgIHtcbiAgICAgICAgLy8gbmVlZCB0byBjbG9uZSBhcyB3ZSBhcmUgZ29pbmcgdG8gc2xpZ2h0bHkgbW9kaWZ5IHRoZSBzaGFwZS4uXG4gICAgICAgIHBvaW50cyA9IHBvaW50cy5zbGljZSgpO1xuXG4gICAgICAgIHBvaW50cy5wb3AoKTtcbiAgICAgICAgcG9pbnRzLnBvcCgpO1xuXG4gICAgICAgIGxhc3RQb2ludCA9IG5ldyBtYXRoLlBvaW50KHBvaW50c1twb2ludHMubGVuZ3RoIC0gMl0sIHBvaW50c1twb2ludHMubGVuZ3RoIC0gMV0pO1xuXG4gICAgICAgIHZhciBtaWRQb2ludFggPSBsYXN0UG9pbnQueCArIChmaXJzdFBvaW50LnggLSBsYXN0UG9pbnQueCkgKjAuNTtcbiAgICAgICAgdmFyIG1pZFBvaW50WSA9IGxhc3RQb2ludC55ICsgKGZpcnN0UG9pbnQueSAtIGxhc3RQb2ludC55KSAqMC41O1xuXG4gICAgICAgIHBvaW50cy51bnNoaWZ0KG1pZFBvaW50WCwgbWlkUG9pbnRZKTtcbiAgICAgICAgcG9pbnRzLnB1c2gobWlkUG9pbnRYLCBtaWRQb2ludFkpO1xuICAgIH1cblxuICAgIHZhciB2ZXJ0cyA9IHdlYkdMRGF0YS5wb2ludHM7XG4gICAgdmFyIGluZGljZXMgPSB3ZWJHTERhdGEuaW5kaWNlcztcbiAgICB2YXIgbGVuZ3RoID0gcG9pbnRzLmxlbmd0aCAvIDI7XG4gICAgdmFyIGluZGV4Q291bnQgPSBwb2ludHMubGVuZ3RoO1xuICAgIHZhciBpbmRleFN0YXJ0ID0gdmVydHMubGVuZ3RoLzY7XG5cbiAgICAvLyBEUkFXIHRoZSBMaW5lXG4gICAgdmFyIHdpZHRoID0gZ3JhcGhpY3NEYXRhLmxpbmVXaWR0aCAvIDI7XG5cbiAgICAvLyBzb3J0IGNvbG9yXG4gICAgdmFyIGNvbG9yID0gdXRpbHMuaGV4MnJnYihncmFwaGljc0RhdGEubGluZUNvbG9yKTtcbiAgICB2YXIgYWxwaGEgPSBncmFwaGljc0RhdGEubGluZUFscGhhO1xuICAgIHZhciByID0gY29sb3JbMF0gKiBhbHBoYTtcbiAgICB2YXIgZyA9IGNvbG9yWzFdICogYWxwaGE7XG4gICAgdmFyIGIgPSBjb2xvclsyXSAqIGFscGhhO1xuXG4gICAgdmFyIHB4LCBweSwgcDF4LCBwMXksIHAyeCwgcDJ5LCBwM3gsIHAzeTtcbiAgICB2YXIgcGVycHgsIHBlcnB5LCBwZXJwMngsIHBlcnAyeSwgcGVycDN4LCBwZXJwM3k7XG4gICAgdmFyIGExLCBiMSwgYzEsIGEyLCBiMiwgYzI7XG4gICAgdmFyIGRlbm9tLCBwZGlzdCwgZGlzdDtcblxuICAgIHAxeCA9IHBvaW50c1swXTtcbiAgICBwMXkgPSBwb2ludHNbMV07XG5cbiAgICBwMnggPSBwb2ludHNbMl07XG4gICAgcDJ5ID0gcG9pbnRzWzNdO1xuXG4gICAgcGVycHggPSAtKHAxeSAtIHAyeSk7XG4gICAgcGVycHkgPSAgcDF4IC0gcDJ4O1xuXG4gICAgZGlzdCA9IE1hdGguc3FydChwZXJweCpwZXJweCArIHBlcnB5KnBlcnB5KTtcblxuICAgIHBlcnB4IC89IGRpc3Q7XG4gICAgcGVycHkgLz0gZGlzdDtcbiAgICBwZXJweCAqPSB3aWR0aDtcbiAgICBwZXJweSAqPSB3aWR0aDtcblxuICAgIC8vIHN0YXJ0XG4gICAgdmVydHMucHVzaChwMXggLSBwZXJweCAsIHAxeSAtIHBlcnB5LFxuICAgICAgICAgICAgICAgIHIsIGcsIGIsIGFscGhhKTtcblxuICAgIHZlcnRzLnB1c2gocDF4ICsgcGVycHggLCBwMXkgKyBwZXJweSxcbiAgICAgICAgICAgICAgICByLCBnLCBiLCBhbHBoYSk7XG5cbiAgICBmb3IgKGkgPSAxOyBpIDwgbGVuZ3RoLTE7IGkrKylcbiAgICB7XG4gICAgICAgIHAxeCA9IHBvaW50c1soaS0xKSoyXTtcbiAgICAgICAgcDF5ID0gcG9pbnRzWyhpLTEpKjIgKyAxXTtcblxuICAgICAgICBwMnggPSBwb2ludHNbKGkpKjJdO1xuICAgICAgICBwMnkgPSBwb2ludHNbKGkpKjIgKyAxXTtcblxuICAgICAgICBwM3ggPSBwb2ludHNbKGkrMSkqMl07XG4gICAgICAgIHAzeSA9IHBvaW50c1soaSsxKSoyICsgMV07XG5cbiAgICAgICAgcGVycHggPSAtKHAxeSAtIHAyeSk7XG4gICAgICAgIHBlcnB5ID0gcDF4IC0gcDJ4O1xuXG4gICAgICAgIGRpc3QgPSBNYXRoLnNxcnQocGVycHgqcGVycHggKyBwZXJweSpwZXJweSk7XG4gICAgICAgIHBlcnB4IC89IGRpc3Q7XG4gICAgICAgIHBlcnB5IC89IGRpc3Q7XG4gICAgICAgIHBlcnB4ICo9IHdpZHRoO1xuICAgICAgICBwZXJweSAqPSB3aWR0aDtcblxuICAgICAgICBwZXJwMnggPSAtKHAyeSAtIHAzeSk7XG4gICAgICAgIHBlcnAyeSA9IHAyeCAtIHAzeDtcblxuICAgICAgICBkaXN0ID0gTWF0aC5zcXJ0KHBlcnAyeCpwZXJwMnggKyBwZXJwMnkqcGVycDJ5KTtcbiAgICAgICAgcGVycDJ4IC89IGRpc3Q7XG4gICAgICAgIHBlcnAyeSAvPSBkaXN0O1xuICAgICAgICBwZXJwMnggKj0gd2lkdGg7XG4gICAgICAgIHBlcnAyeSAqPSB3aWR0aDtcblxuICAgICAgICBhMSA9ICgtcGVycHkgKyBwMXkpIC0gKC1wZXJweSArIHAyeSk7XG4gICAgICAgIGIxID0gKC1wZXJweCArIHAyeCkgLSAoLXBlcnB4ICsgcDF4KTtcbiAgICAgICAgYzEgPSAoLXBlcnB4ICsgcDF4KSAqICgtcGVycHkgKyBwMnkpIC0gKC1wZXJweCArIHAyeCkgKiAoLXBlcnB5ICsgcDF5KTtcbiAgICAgICAgYTIgPSAoLXBlcnAyeSArIHAzeSkgLSAoLXBlcnAyeSArIHAyeSk7XG4gICAgICAgIGIyID0gKC1wZXJwMnggKyBwMngpIC0gKC1wZXJwMnggKyBwM3gpO1xuICAgICAgICBjMiA9ICgtcGVycDJ4ICsgcDN4KSAqICgtcGVycDJ5ICsgcDJ5KSAtICgtcGVycDJ4ICsgcDJ4KSAqICgtcGVycDJ5ICsgcDN5KTtcblxuICAgICAgICBkZW5vbSA9IGExKmIyIC0gYTIqYjE7XG5cbiAgICAgICAgaWYgKE1hdGguYWJzKGRlbm9tKSA8IDAuMSApXG4gICAgICAgIHtcblxuICAgICAgICAgICAgZGVub20rPTEwLjE7XG4gICAgICAgICAgICB2ZXJ0cy5wdXNoKHAyeCAtIHBlcnB4ICwgcDJ5IC0gcGVycHksXG4gICAgICAgICAgICAgICAgciwgZywgYiwgYWxwaGEpO1xuXG4gICAgICAgICAgICB2ZXJ0cy5wdXNoKHAyeCArIHBlcnB4ICwgcDJ5ICsgcGVycHksXG4gICAgICAgICAgICAgICAgciwgZywgYiwgYWxwaGEpO1xuXG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHB4ID0gKGIxKmMyIC0gYjIqYzEpL2Rlbm9tO1xuICAgICAgICBweSA9IChhMipjMSAtIGExKmMyKS9kZW5vbTtcblxuXG4gICAgICAgIHBkaXN0ID0gKHB4IC1wMngpICogKHB4IC1wMngpICsgKHB5IC1wMnkpICogKHB5IC1wMnkpO1xuXG5cbiAgICAgICAgaWYgKHBkaXN0ID4gMTQwICogMTQwKVxuICAgICAgICB7XG4gICAgICAgICAgICBwZXJwM3ggPSBwZXJweCAtIHBlcnAyeDtcbiAgICAgICAgICAgIHBlcnAzeSA9IHBlcnB5IC0gcGVycDJ5O1xuXG4gICAgICAgICAgICBkaXN0ID0gTWF0aC5zcXJ0KHBlcnAzeCpwZXJwM3ggKyBwZXJwM3kqcGVycDN5KTtcbiAgICAgICAgICAgIHBlcnAzeCAvPSBkaXN0O1xuICAgICAgICAgICAgcGVycDN5IC89IGRpc3Q7XG4gICAgICAgICAgICBwZXJwM3ggKj0gd2lkdGg7XG4gICAgICAgICAgICBwZXJwM3kgKj0gd2lkdGg7XG5cbiAgICAgICAgICAgIHZlcnRzLnB1c2gocDJ4IC0gcGVycDN4LCBwMnkgLXBlcnAzeSk7XG4gICAgICAgICAgICB2ZXJ0cy5wdXNoKHIsIGcsIGIsIGFscGhhKTtcblxuICAgICAgICAgICAgdmVydHMucHVzaChwMnggKyBwZXJwM3gsIHAyeSArcGVycDN5KTtcbiAgICAgICAgICAgIHZlcnRzLnB1c2gociwgZywgYiwgYWxwaGEpO1xuXG4gICAgICAgICAgICB2ZXJ0cy5wdXNoKHAyeCAtIHBlcnAzeCwgcDJ5IC1wZXJwM3kpO1xuICAgICAgICAgICAgdmVydHMucHVzaChyLCBnLCBiLCBhbHBoYSk7XG5cbiAgICAgICAgICAgIGluZGV4Q291bnQrKztcbiAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgIHtcblxuICAgICAgICAgICAgdmVydHMucHVzaChweCAsIHB5KTtcbiAgICAgICAgICAgIHZlcnRzLnB1c2gociwgZywgYiwgYWxwaGEpO1xuXG4gICAgICAgICAgICB2ZXJ0cy5wdXNoKHAyeCAtIChweC1wMngpLCBwMnkgLSAocHkgLSBwMnkpKTtcbiAgICAgICAgICAgIHZlcnRzLnB1c2gociwgZywgYiwgYWxwaGEpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcDF4ID0gcG9pbnRzWyhsZW5ndGgtMikqMl07XG4gICAgcDF5ID0gcG9pbnRzWyhsZW5ndGgtMikqMiArIDFdO1xuXG4gICAgcDJ4ID0gcG9pbnRzWyhsZW5ndGgtMSkqMl07XG4gICAgcDJ5ID0gcG9pbnRzWyhsZW5ndGgtMSkqMiArIDFdO1xuXG4gICAgcGVycHggPSAtKHAxeSAtIHAyeSk7XG4gICAgcGVycHkgPSBwMXggLSBwMng7XG5cbiAgICBkaXN0ID0gTWF0aC5zcXJ0KHBlcnB4KnBlcnB4ICsgcGVycHkqcGVycHkpO1xuICAgIHBlcnB4IC89IGRpc3Q7XG4gICAgcGVycHkgLz0gZGlzdDtcbiAgICBwZXJweCAqPSB3aWR0aDtcbiAgICBwZXJweSAqPSB3aWR0aDtcblxuICAgIHZlcnRzLnB1c2gocDJ4IC0gcGVycHggLCBwMnkgLSBwZXJweSk7XG4gICAgdmVydHMucHVzaChyLCBnLCBiLCBhbHBoYSk7XG5cbiAgICB2ZXJ0cy5wdXNoKHAyeCArIHBlcnB4ICwgcDJ5ICsgcGVycHkpO1xuICAgIHZlcnRzLnB1c2gociwgZywgYiwgYWxwaGEpO1xuXG4gICAgaW5kaWNlcy5wdXNoKGluZGV4U3RhcnQpO1xuXG4gICAgZm9yIChpID0gMDsgaSA8IGluZGV4Q291bnQ7IGkrKylcbiAgICB7XG4gICAgICAgIGluZGljZXMucHVzaChpbmRleFN0YXJ0KyspO1xuICAgIH1cblxuICAgIGluZGljZXMucHVzaChpbmRleFN0YXJ0LTEpO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBidWlsZExpbmU7IiwidmFyIHV0aWxzID0gcmVxdWlyZSgnLi4vLi4vdXRpbHMnKTtcblxuLyoqXG4gKiBCdWlsZHMgYSBwb2x5Z29uIHRvIGRyYXdcbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIGdyYXBoaWNzRGF0YSB7UElYSS5XZWJHTEdyYXBoaWNzRGF0YX0gVGhlIGdyYXBoaWNzIG9iamVjdCBjb250YWluaW5nIGFsbCB0aGUgbmVjZXNzYXJ5IHByb3BlcnRpZXNcbiAqIEBwYXJhbSB3ZWJHTERhdGEge29iamVjdH0gYW4gb2JqZWN0IGNvbnRhaW5pbmcgYWxsIHRoZSB3ZWJHTC1zcGVjaWZpYyBpbmZvcm1hdGlvbiB0byBjcmVhdGUgdGhpcyBzaGFwZVxuICovXG52YXIgYnVpbGRQb2x5ID0gZnVuY3Rpb24gKGdyYXBoaWNzRGF0YSwgd2ViR0xEYXRhKVxue1xuICAgIHZhciBwb2ludHMgPSBncmFwaGljc0RhdGEucG9pbnRzO1xuXG4gICAgaWYgKHBvaW50cy5sZW5ndGggPCA2KVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIGdldCBmaXJzdCBhbmQgbGFzdCBwb2ludC4uIGZpZ3VyZSBvdXQgdGhlIG1pZGRsZSFcbiAgICB2YXIgdmVydHMgPSB3ZWJHTERhdGEucG9pbnRzO1xuICAgIHZhciBpbmRpY2VzID0gd2ViR0xEYXRhLmluZGljZXM7XG5cbiAgICB2YXIgbGVuZ3RoID0gcG9pbnRzLmxlbmd0aCAvIDI7XG5cbiAgICAvLyBzb3J0IGNvbG9yXG4gICAgdmFyIGNvbG9yID0gdXRpbHMuaGV4MnJnYihncmFwaGljc0RhdGEuZmlsbENvbG9yKTtcbiAgICB2YXIgYWxwaGEgPSBncmFwaGljc0RhdGEuZmlsbEFscGhhO1xuICAgIHZhciByID0gY29sb3JbMF0gKiBhbHBoYTtcbiAgICB2YXIgZyA9IGNvbG9yWzFdICogYWxwaGE7XG4gICAgdmFyIGIgPSBjb2xvclsyXSAqIGFscGhhO1xuXG4gICAgdmFyIHRyaWFuZ2xlcyA9IGVhcmN1dChwb2ludHMsIG51bGwsIDIpO1xuXG4gICAgaWYgKCF0cmlhbmdsZXMpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHZhciB2ZXJ0UG9zID0gdmVydHMubGVuZ3RoIC8gNjtcblxuICAgIHZhciBpID0gMDtcblxuICAgIGZvciAoaSA9IDA7IGkgPCB0cmlhbmdsZXMubGVuZ3RoOyBpKz0zKVxuICAgIHtcbiAgICAgICAgaW5kaWNlcy5wdXNoKHRyaWFuZ2xlc1tpXSArIHZlcnRQb3MpO1xuICAgICAgICBpbmRpY2VzLnB1c2godHJpYW5nbGVzW2ldICsgdmVydFBvcyk7XG4gICAgICAgIGluZGljZXMucHVzaCh0cmlhbmdsZXNbaSsxXSArIHZlcnRQb3MpO1xuICAgICAgICBpbmRpY2VzLnB1c2godHJpYW5nbGVzW2krMl0gK3ZlcnRQb3MpO1xuICAgICAgICBpbmRpY2VzLnB1c2godHJpYW5nbGVzW2krMl0gKyB2ZXJ0UG9zKTtcbiAgICB9XG5cbiAgICBmb3IgKGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspXG4gICAge1xuICAgICAgICB2ZXJ0cy5wdXNoKHBvaW50c1tpICogMl0sIHBvaW50c1tpICogMiArIDFdLFxuICAgICAgICAgICAgICAgICAgIHIsIGcsIGIsIGFscGhhKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdHJ1ZTtcbn07XG5cblxubW9kdWxlLmV4cG9ydHMgPSBidWlsZFBvbHk7XG4iLCJ2YXIgYnVpbGRMaW5lID0gcmVxdWlyZSgnLi9idWlsZExpbmUnKSxcbiAgICB1dGlscyA9IHJlcXVpcmUoJy4uLy4uL3V0aWxzJyk7XG5cbi8qKlxuICogQnVpbGRzIGEgcmVjdGFuZ2xlIHRvIGRyYXdcbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIGdyYXBoaWNzRGF0YSB7UElYSS5HcmFwaGljc30gVGhlIGdyYXBoaWNzIG9iamVjdCBjb250YWluaW5nIGFsbCB0aGUgbmVjZXNzYXJ5IHByb3BlcnRpZXNcbiAqIEBwYXJhbSB3ZWJHTERhdGEge29iamVjdH0gYW4gb2JqZWN0IGNvbnRhaW5pbmcgYWxsIHRoZSB3ZWJHTC1zcGVjaWZpYyBpbmZvcm1hdGlvbiB0byBjcmVhdGUgdGhpcyBzaGFwZVxuICovXG52YXIgYnVpbGRSZWN0YW5nbGUgPSBmdW5jdGlvbiAoZ3JhcGhpY3NEYXRhLCB3ZWJHTERhdGEpXG57XG4gICAgLy8gLS0tIC8vXG4gICAgLy8gbmVlZCB0byBjb252ZXJ0IHBvaW50cyB0byBhIG5pY2UgcmVndWxhciBkYXRhXG4gICAgLy9cbiAgICB2YXIgcmVjdERhdGEgPSBncmFwaGljc0RhdGEuc2hhcGU7XG4gICAgdmFyIHggPSByZWN0RGF0YS54O1xuICAgIHZhciB5ID0gcmVjdERhdGEueTtcbiAgICB2YXIgd2lkdGggPSByZWN0RGF0YS53aWR0aDtcbiAgICB2YXIgaGVpZ2h0ID0gcmVjdERhdGEuaGVpZ2h0O1xuXG4gICAgaWYgKGdyYXBoaWNzRGF0YS5maWxsKVxuICAgIHtcbiAgICAgICAgdmFyIGNvbG9yID0gdXRpbHMuaGV4MnJnYihncmFwaGljc0RhdGEuZmlsbENvbG9yKTtcbiAgICAgICAgdmFyIGFscGhhID0gZ3JhcGhpY3NEYXRhLmZpbGxBbHBoYTtcblxuICAgICAgICB2YXIgciA9IGNvbG9yWzBdICogYWxwaGE7XG4gICAgICAgIHZhciBnID0gY29sb3JbMV0gKiBhbHBoYTtcbiAgICAgICAgdmFyIGIgPSBjb2xvclsyXSAqIGFscGhhO1xuXG4gICAgICAgIHZhciB2ZXJ0cyA9IHdlYkdMRGF0YS5wb2ludHM7XG4gICAgICAgIHZhciBpbmRpY2VzID0gd2ViR0xEYXRhLmluZGljZXM7XG5cbiAgICAgICAgdmFyIHZlcnRQb3MgPSB2ZXJ0cy5sZW5ndGgvNjtcblxuICAgICAgICAvLyBzdGFydFxuICAgICAgICB2ZXJ0cy5wdXNoKHgsIHkpO1xuICAgICAgICB2ZXJ0cy5wdXNoKHIsIGcsIGIsIGFscGhhKTtcblxuICAgICAgICB2ZXJ0cy5wdXNoKHggKyB3aWR0aCwgeSk7XG4gICAgICAgIHZlcnRzLnB1c2gociwgZywgYiwgYWxwaGEpO1xuXG4gICAgICAgIHZlcnRzLnB1c2goeCAsIHkgKyBoZWlnaHQpO1xuICAgICAgICB2ZXJ0cy5wdXNoKHIsIGcsIGIsIGFscGhhKTtcblxuICAgICAgICB2ZXJ0cy5wdXNoKHggKyB3aWR0aCwgeSArIGhlaWdodCk7XG4gICAgICAgIHZlcnRzLnB1c2gociwgZywgYiwgYWxwaGEpO1xuXG4gICAgICAgIC8vIGluc2VydCAyIGRlYWQgdHJpYW5nbGVzLi5cbiAgICAgICAgaW5kaWNlcy5wdXNoKHZlcnRQb3MsIHZlcnRQb3MsIHZlcnRQb3MrMSwgdmVydFBvcysyLCB2ZXJ0UG9zKzMsIHZlcnRQb3MrMyk7XG4gICAgfVxuXG4gICAgaWYgKGdyYXBoaWNzRGF0YS5saW5lV2lkdGgpXG4gICAge1xuICAgICAgICB2YXIgdGVtcFBvaW50cyA9IGdyYXBoaWNzRGF0YS5wb2ludHM7XG5cbiAgICAgICAgZ3JhcGhpY3NEYXRhLnBvaW50cyA9IFt4LCB5LFxuICAgICAgICAgICAgICAgICAgeCArIHdpZHRoLCB5LFxuICAgICAgICAgICAgICAgICAgeCArIHdpZHRoLCB5ICsgaGVpZ2h0LFxuICAgICAgICAgICAgICAgICAgeCwgeSArIGhlaWdodCxcbiAgICAgICAgICAgICAgICAgIHgsIHldO1xuXG5cbiAgICAgICAgYnVpbGRMaW5lKGdyYXBoaWNzRGF0YSwgd2ViR0xEYXRhKTtcblxuICAgICAgICBncmFwaGljc0RhdGEucG9pbnRzID0gdGVtcFBvaW50cztcbiAgICB9XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGJ1aWxkUmVjdGFuZ2xlOyIsInZhciBidWlsZExpbmUgPSByZXF1aXJlKCcuL2J1aWxkTGluZScpLFxuICAgIHV0aWxzID0gcmVxdWlyZSgnLi4vLi4vdXRpbHMnKTtcbiAgICBcbi8qKlxuICogQnVpbGRzIGEgcm91bmRlZCByZWN0YW5nbGUgdG8gZHJhd1xuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0gZ3JhcGhpY3NEYXRhIHtQSVhJLkdyYXBoaWNzfSBUaGUgZ3JhcGhpY3Mgb2JqZWN0IGNvbnRhaW5pbmcgYWxsIHRoZSBuZWNlc3NhcnkgcHJvcGVydGllc1xuICogQHBhcmFtIHdlYkdMRGF0YSB7b2JqZWN0fSBhbiBvYmplY3QgY29udGFpbmluZyBhbGwgdGhlIHdlYkdMLXNwZWNpZmljIGluZm9ybWF0aW9uIHRvIGNyZWF0ZSB0aGlzIHNoYXBlXG4gKi9cbmJ1aWxkUm91bmRlZFJlY3RhbmdsZSA9IGZ1bmN0aW9uIChncmFwaGljc0RhdGEsIHdlYkdMRGF0YSlcbntcbiAgICB2YXIgcnJlY3REYXRhID0gZ3JhcGhpY3NEYXRhLnNoYXBlO1xuICAgIHZhciB4ID0gcnJlY3REYXRhLng7XG4gICAgdmFyIHkgPSBycmVjdERhdGEueTtcbiAgICB2YXIgd2lkdGggPSBycmVjdERhdGEud2lkdGg7XG4gICAgdmFyIGhlaWdodCA9IHJyZWN0RGF0YS5oZWlnaHQ7XG5cbiAgICB2YXIgcmFkaXVzID0gcnJlY3REYXRhLnJhZGl1cztcblxuICAgIHZhciByZWNQb2ludHMgPSBbXTtcbiAgICByZWNQb2ludHMucHVzaCh4LCB5ICsgcmFkaXVzKTtcbiAgICB0aGlzLnF1YWRyYXRpY0JlemllckN1cnZlKHgsIHkgKyBoZWlnaHQgLSByYWRpdXMsIHgsIHkgKyBoZWlnaHQsIHggKyByYWRpdXMsIHkgKyBoZWlnaHQsIHJlY1BvaW50cyk7XG4gICAgdGhpcy5xdWFkcmF0aWNCZXppZXJDdXJ2ZSh4ICsgd2lkdGggLSByYWRpdXMsIHkgKyBoZWlnaHQsIHggKyB3aWR0aCwgeSArIGhlaWdodCwgeCArIHdpZHRoLCB5ICsgaGVpZ2h0IC0gcmFkaXVzLCByZWNQb2ludHMpO1xuICAgIHRoaXMucXVhZHJhdGljQmV6aWVyQ3VydmUoeCArIHdpZHRoLCB5ICsgcmFkaXVzLCB4ICsgd2lkdGgsIHksIHggKyB3aWR0aCAtIHJhZGl1cywgeSwgcmVjUG9pbnRzKTtcbiAgICB0aGlzLnF1YWRyYXRpY0JlemllckN1cnZlKHggKyByYWRpdXMsIHksIHgsIHksIHgsIHkgKyByYWRpdXMgKyAwLjAwMDAwMDAwMDEsIHJlY1BvaW50cyk7XG5cbiAgICAvLyB0aGlzIHRpbnkgbnVtYmVyIGRlYWxzIHdpdGggdGhlIGlzc3VlIHRoYXQgb2NjdXJzIHdoZW4gcG9pbnRzIG92ZXJsYXAgYW5kIGVhcmN1dCBmYWlscyB0byB0cmlhbmd1bGF0ZSB0aGUgaXRlbS5cbiAgICAvLyBUT0RPIC0gZml4IHRoaXMgcHJvcGVybHksIHRoaXMgaXMgbm90IHZlcnkgZWxlZ2FudC4uIGJ1dCBpdCB3b3JrcyBmb3Igbm93LlxuXG4gICAgaWYgKGdyYXBoaWNzRGF0YS5maWxsKVxuICAgIHtcbiAgICAgICAgdmFyIGNvbG9yID0gdXRpbHMuaGV4MnJnYihncmFwaGljc0RhdGEuZmlsbENvbG9yKTtcbiAgICAgICAgdmFyIGFscGhhID0gZ3JhcGhpY3NEYXRhLmZpbGxBbHBoYTtcblxuICAgICAgICB2YXIgciA9IGNvbG9yWzBdICogYWxwaGE7XG4gICAgICAgIHZhciBnID0gY29sb3JbMV0gKiBhbHBoYTtcbiAgICAgICAgdmFyIGIgPSBjb2xvclsyXSAqIGFscGhhO1xuXG4gICAgICAgIHZhciB2ZXJ0cyA9IHdlYkdMRGF0YS5wb2ludHM7XG4gICAgICAgIHZhciBpbmRpY2VzID0gd2ViR0xEYXRhLmluZGljZXM7XG5cbiAgICAgICAgdmFyIHZlY1BvcyA9IHZlcnRzLmxlbmd0aC82O1xuXG4gICAgICAgIHZhciB0cmlhbmdsZXMgPSBlYXJjdXQocmVjUG9pbnRzLCBudWxsLCAyKTtcblxuICAgICAgICB2YXIgaSA9IDA7XG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCB0cmlhbmdsZXMubGVuZ3RoOyBpKz0zKVxuICAgICAgICB7XG4gICAgICAgICAgICBpbmRpY2VzLnB1c2godHJpYW5nbGVzW2ldICsgdmVjUG9zKTtcbiAgICAgICAgICAgIGluZGljZXMucHVzaCh0cmlhbmdsZXNbaV0gKyB2ZWNQb3MpO1xuICAgICAgICAgICAgaW5kaWNlcy5wdXNoKHRyaWFuZ2xlc1tpKzFdICsgdmVjUG9zKTtcbiAgICAgICAgICAgIGluZGljZXMucHVzaCh0cmlhbmdsZXNbaSsyXSArIHZlY1Bvcyk7XG4gICAgICAgICAgICBpbmRpY2VzLnB1c2godHJpYW5nbGVzW2krMl0gKyB2ZWNQb3MpO1xuICAgICAgICB9XG5cbiAgICAgICAgZm9yIChpID0gMDsgaSA8IHJlY1BvaW50cy5sZW5ndGg7IGkrKylcbiAgICAgICAge1xuICAgICAgICAgICAgdmVydHMucHVzaChyZWNQb2ludHNbaV0sIHJlY1BvaW50c1srK2ldLCByLCBnLCBiLCBhbHBoYSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoZ3JhcGhpY3NEYXRhLmxpbmVXaWR0aClcbiAgICB7XG4gICAgICAgIHZhciB0ZW1wUG9pbnRzID0gZ3JhcGhpY3NEYXRhLnBvaW50cztcblxuICAgICAgICBncmFwaGljc0RhdGEucG9pbnRzID0gcmVjUG9pbnRzO1xuXG4gICAgICAgIHRoaXMuYnVpbGRMaW5lKGdyYXBoaWNzRGF0YSwgd2ViR0xEYXRhKTtcblxuICAgICAgICBncmFwaGljc0RhdGEucG9pbnRzID0gdGVtcFBvaW50cztcbiAgICB9XG59O1xuXG4vKipcbiAqIENhbGN1bGF0ZSB0aGUgcG9pbnRzIGZvciBhIHF1YWRyYXRpYyBiZXppZXIgY3VydmUuIChoZWxwZXIgZnVuY3Rpb24uLilcbiAqIEJhc2VkIG9uOiBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy83ODUwOTcvaG93LWRvLWktaW1wbGVtZW50LWEtYmV6aWVyLWN1cnZlLWluLWNcbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIGZyb21YIHtudW1iZXJ9IE9yaWdpbiBwb2ludCB4XG4gKiBAcGFyYW0gZnJvbVkge251bWJlcn0gT3JpZ2luIHBvaW50IHhcbiAqIEBwYXJhbSBjcFgge251bWJlcn0gQ29udHJvbCBwb2ludCB4XG4gKiBAcGFyYW0gY3BZIHtudW1iZXJ9IENvbnRyb2wgcG9pbnQgeVxuICogQHBhcmFtIHRvWCB7bnVtYmVyfSBEZXN0aW5hdGlvbiBwb2ludCB4XG4gKiBAcGFyYW0gdG9ZIHtudW1iZXJ9IERlc3RpbmF0aW9uIHBvaW50IHlcbiAqIEBwYXJhbSBbb3V0XSB7bnVtYmVyW119IFRoZSBvdXRwdXQgYXJyYXkgdG8gYWRkIHBvaW50cyBpbnRvLiBJZiBub3QgcGFzc2VkLCBhIG5ldyBhcnJheSBpcyBjcmVhdGVkLlxuICogQHJldHVybiB7bnVtYmVyW119IGFuIGFycmF5IG9mIHBvaW50c1xuICovXG5xdWFkcmF0aWNCZXppZXJDdXJ2ZSA9IGZ1bmN0aW9uIChmcm9tWCwgZnJvbVksIGNwWCwgY3BZLCB0b1gsIHRvWSwgb3V0KVxue1xuICAgIHZhciB4YSxcbiAgICAgICAgeWEsXG4gICAgICAgIHhiLFxuICAgICAgICB5YixcbiAgICAgICAgeCxcbiAgICAgICAgeSxcbiAgICAgICAgbiA9IDIwLFxuICAgICAgICBwb2ludHMgPSBvdXQgfHwgW107XG5cbiAgICBmdW5jdGlvbiBnZXRQdChuMSAsIG4yLCBwZXJjKSB7XG4gICAgICAgIHZhciBkaWZmID0gbjIgLSBuMTtcblxuICAgICAgICByZXR1cm4gbjEgKyAoIGRpZmYgKiBwZXJjICk7XG4gICAgfVxuXG4gICAgdmFyIGogPSAwO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDw9IG47IGkrKyApIHtcbiAgICAgICAgaiA9IGkgLyBuO1xuXG4gICAgICAgIC8vIFRoZSBHcmVlbiBMaW5lXG4gICAgICAgIHhhID0gZ2V0UHQoIGZyb21YICwgY3BYICwgaiApO1xuICAgICAgICB5YSA9IGdldFB0KCBmcm9tWSAsIGNwWSAsIGogKTtcbiAgICAgICAgeGIgPSBnZXRQdCggY3BYICwgdG9YICwgaiApO1xuICAgICAgICB5YiA9IGdldFB0KCBjcFkgLCB0b1kgLCBqICk7XG5cbiAgICAgICAgLy8gVGhlIEJsYWNrIERvdFxuICAgICAgICB4ID0gZ2V0UHQoIHhhICwgeGIgLCBqICk7XG4gICAgICAgIHkgPSBnZXRQdCggeWEgLCB5YiAsIGogKTtcblxuICAgICAgICBwb2ludHMucHVzaCh4LCB5KTtcbiAgICB9XG5cbiAgICByZXR1cm4gcG9pbnRzO1xufTtcblxuXG5tb2R1bGUuZXhwb3J0cyA9IGJ1aWxkUm91bmRlZFJlY3RhbmdsZTsiLCIvKipcbiAqIEBmaWxlICAgICAgICBNYWluIGV4cG9ydCBvZiB0aGUgUElYSSBjb3JlIGxpYnJhcnlcbiAqIEBhdXRob3IgICAgICBNYXQgR3JvdmVzIDxtYXRAZ29vZGJveWRpZ2l0YWwuY29tPlxuICogQGNvcHlyaWdodCAgIDIwMTMtMjAxNSBHb29kQm95RGlnaXRhbFxuICogQGxpY2Vuc2UgICAgIHtAbGluayBodHRwczovL2dpdGh1Yi5jb20vcGl4aWpzL3BpeGkuanMvYmxvYi9tYXN0ZXIvTElDRU5TRXxNSVQgTGljZW5zZX1cbiAqL1xuXG4vKipcbiAqIEBuYW1lc3BhY2UgUElYSVxuICovXG4vLyBleHBvcnQgY29yZSBhbmQgY29uc3QuIFdlIGFzc2lnbiBjb3JlIHRvIGNvbnN0IHNvIHRoYXQgdGhlIG5vbi1yZWZlcmVuY2UgdHlwZXMgaW4gY29uc3QgcmVtYWluIGluLXRhY3RcbnZhciBjb3JlID0gbW9kdWxlLmV4cG9ydHMgPSBPYmplY3QuYXNzaWduKHJlcXVpcmUoJy4vY29uc3QnKSwgcmVxdWlyZSgnLi9tYXRoJyksIHtcbiAgICAvLyB1dGlsc1xuICAgIHV0aWxzOiByZXF1aXJlKCcuL3V0aWxzJyksXG4gICAgdGlja2VyOiByZXF1aXJlKCcuL3RpY2tlcicpLFxuXG4gICAgLy8gZGlzcGxheVxuICAgIERpc3BsYXlPYmplY3Q6ICAgICAgICAgIHJlcXVpcmUoJy4vZGlzcGxheS9EaXNwbGF5T2JqZWN0JyksXG4gICAgQ29udGFpbmVyOiAgICAgICAgICAgICAgcmVxdWlyZSgnLi9kaXNwbGF5L0NvbnRhaW5lcicpLFxuXG4gICAgLy8gc3ByaXRlc1xuICAgIFNwcml0ZTogICAgICAgICAgICAgICAgIHJlcXVpcmUoJy4vc3ByaXRlcy9TcHJpdGUnKSxcbiAgICBQYXJ0aWNsZUNvbnRhaW5lcjogICAgICByZXF1aXJlKCcuL3BhcnRpY2xlcy9QYXJ0aWNsZUNvbnRhaW5lcicpLFxuICAgIFNwcml0ZVJlbmRlcmVyOiAgICAgICAgIHJlcXVpcmUoJy4vc3ByaXRlcy93ZWJnbC9TcHJpdGVSZW5kZXJlcicpLFxuICAgIFBhcnRpY2xlUmVuZGVyZXI6ICAgICAgIHJlcXVpcmUoJy4vcGFydGljbGVzL3dlYmdsL1BhcnRpY2xlUmVuZGVyZXInKSxcblxuICAgIC8vIHRleHRcbiAgICBUZXh0OiAgICAgICAgICAgICAgICAgICByZXF1aXJlKCcuL3RleHQvVGV4dCcpLFxuXG4gICAgLy8gcHJpbWl0aXZlc1xuICAgIEdyYXBoaWNzOiAgICAgICAgICAgICAgIHJlcXVpcmUoJy4vZ3JhcGhpY3MvR3JhcGhpY3MnKSxcbiAgICBHcmFwaGljc0RhdGE6ICAgICAgICAgICByZXF1aXJlKCcuL2dyYXBoaWNzL0dyYXBoaWNzRGF0YScpLFxuICAgIEdyYXBoaWNzUmVuZGVyZXI6ICAgICAgIHJlcXVpcmUoJy4vZ3JhcGhpY3Mvd2ViZ2wvR3JhcGhpY3NSZW5kZXJlcicpLFxuXG4gICAgLy8gdGV4dHVyZXNcbiAgICBUZXh0dXJlOiAgICAgICAgICAgICAgICByZXF1aXJlKCcuL3RleHR1cmVzL1RleHR1cmUnKSxcbiAgICBCYXNlVGV4dHVyZTogICAgICAgICAgICByZXF1aXJlKCcuL3RleHR1cmVzL0Jhc2VUZXh0dXJlJyksXG4gICAgUmVuZGVyVGV4dHVyZTogICAgICAgICAgcmVxdWlyZSgnLi90ZXh0dXJlcy9SZW5kZXJUZXh0dXJlJyksXG4gICAgVmlkZW9CYXNlVGV4dHVyZTogICAgICAgcmVxdWlyZSgnLi90ZXh0dXJlcy9WaWRlb0Jhc2VUZXh0dXJlJyksXG4gICAgVGV4dHVyZVV2czogICAgICAgICAgICAgcmVxdWlyZSgnLi90ZXh0dXJlcy9UZXh0dXJlVXZzJyksXG5cbiAgICAvLyByZW5kZXJlcnMgLSBjYW52YXNcbiAgICBDYW52YXNSZW5kZXJlcjogICAgICAgICByZXF1aXJlKCcuL3JlbmRlcmVycy9jYW52YXMvQ2FudmFzUmVuZGVyZXInKSxcbiAgICBDYW52YXNHcmFwaGljczogICAgICAgICByZXF1aXJlKCcuL3JlbmRlcmVycy9jYW52YXMvdXRpbHMvQ2FudmFzR3JhcGhpY3MnKSxcbiAgICBDYW52YXNCdWZmZXI6ICAgICAgICAgICByZXF1aXJlKCcuL3JlbmRlcmVycy9jYW52YXMvdXRpbHMvQ2FudmFzQnVmZmVyJyksXG5cbiAgICAvLyByZW5kZXJlcnMgLSB3ZWJnbFxuICAgIFdlYkdMUmVuZGVyZXI6ICAgICAgICAgIHJlcXVpcmUoJy4vcmVuZGVyZXJzL3dlYmdsL1dlYkdMUmVuZGVyZXInKSxcbiAgICBXZWJHTE1hbmFnZXI6ICAgICAgICAgIHJlcXVpcmUoJy4vcmVuZGVyZXJzL3dlYmdsL21hbmFnZXJzL1dlYkdMTWFuYWdlcicpLFxuICAgIFNoYWRlck1hbmFnZXI6ICAgICAgICAgIHJlcXVpcmUoJy4vcmVuZGVyZXJzL3dlYmdsL21hbmFnZXJzL1NoYWRlck1hbmFnZXInKSxcbiAgICBTaGFkZXI6ICAgICAgICAgICAgICAgICByZXF1aXJlKCcuL3JlbmRlcmVycy93ZWJnbC9zaGFkZXJzL1NoYWRlcicpLFxuICAgIE9iamVjdFJlbmRlcmVyOiAgICAgICAgIHJlcXVpcmUoJy4vcmVuZGVyZXJzL3dlYmdsL3V0aWxzL09iamVjdFJlbmRlcmVyJyksXG4gICAgUmVuZGVyVGFyZ2V0OiAgICAgICAgICAgcmVxdWlyZSgnLi9yZW5kZXJlcnMvd2ViZ2wvdXRpbHMvUmVuZGVyVGFyZ2V0JyksXG5cbiAgICAvLyBmaWx0ZXJzIC0gd2ViZ2xcbiAgICBBYnN0cmFjdEZpbHRlcjogICAgICAgICByZXF1aXJlKCcuL3JlbmRlcmVycy93ZWJnbC9maWx0ZXJzL0Fic3RyYWN0RmlsdGVyJyksXG4gICAgRlhBQUZpbHRlcjogICAgICAgICAgICAgcmVxdWlyZSgnLi9yZW5kZXJlcnMvd2ViZ2wvZmlsdGVycy9GWEFBRmlsdGVyJyksXG4gICAgU3ByaXRlTWFza0ZpbHRlcjogICAgICAgcmVxdWlyZSgnLi9yZW5kZXJlcnMvd2ViZ2wvZmlsdGVycy9TcHJpdGVNYXNrRmlsdGVyJyksXG5cbiAgICBnbENvcmU6ICAgICAgICAgICAgICAgICAgIHJlcXVpcmUoJ3BpeGktZ2wtY29yZScpLFxuXG4gICAgLyoqXG4gICAgICogVGhpcyBoZWxwZXIgZnVuY3Rpb24gd2lsbCBhdXRvbWF0aWNhbGx5IGRldGVjdCB3aGljaCByZW5kZXJlciB5b3Ugc2hvdWxkIGJlIHVzaW5nLlxuICAgICAqIFdlYkdMIGlzIHRoZSBwcmVmZXJyZWQgcmVuZGVyZXIgYXMgaXQgaXMgYSBsb3QgZmFzdGVyLiBJZiB3ZWJHTCBpcyBub3Qgc3VwcG9ydGVkIGJ5XG4gICAgICogdGhlIGJyb3dzZXIgdGhlbiB0aGlzIGZ1bmN0aW9uIHdpbGwgcmV0dXJuIGEgY2FudmFzIHJlbmRlcmVyXG4gICAgICpcbiAgICAgKiBAbWVtYmVyb2YgUElYSVxuICAgICAqIEBwYXJhbSB3aWR0aD04MDAge251bWJlcn0gdGhlIHdpZHRoIG9mIHRoZSByZW5kZXJlcnMgdmlld1xuICAgICAqIEBwYXJhbSBoZWlnaHQ9NjAwIHtudW1iZXJ9IHRoZSBoZWlnaHQgb2YgdGhlIHJlbmRlcmVycyB2aWV3XG4gICAgICogQHBhcmFtIFtvcHRpb25zXSB7b2JqZWN0fSBUaGUgb3B0aW9uYWwgcmVuZGVyZXIgcGFyYW1ldGVyc1xuICAgICAqIEBwYXJhbSBbb3B0aW9ucy52aWV3XSB7SFRNTENhbnZhc0VsZW1lbnR9IHRoZSBjYW52YXMgdG8gdXNlIGFzIGEgdmlldywgb3B0aW9uYWxcbiAgICAgKiBAcGFyYW0gW29wdGlvbnMudHJhbnNwYXJlbnQ9ZmFsc2VdIHtib29sZWFufSBJZiB0aGUgcmVuZGVyIHZpZXcgaXMgdHJhbnNwYXJlbnQsIGRlZmF1bHQgZmFsc2VcbiAgICAgKiBAcGFyYW0gW29wdGlvbnMuYW50aWFsaWFzPWZhbHNlXSB7Ym9vbGVhbn0gc2V0cyBhbnRpYWxpYXMgKG9ubHkgYXBwbGljYWJsZSBpbiBjaHJvbWUgYXQgdGhlIG1vbWVudClcbiAgICAgKiBAcGFyYW0gW29wdGlvbnMucHJlc2VydmVEcmF3aW5nQnVmZmVyPWZhbHNlXSB7Ym9vbGVhbn0gZW5hYmxlcyBkcmF3aW5nIGJ1ZmZlciBwcmVzZXJ2YXRpb24sIGVuYWJsZSB0aGlzIGlmIHlvdVxuICAgICAqICAgICAgbmVlZCB0byBjYWxsIHRvRGF0YVVybCBvbiB0aGUgd2ViZ2wgY29udGV4dFxuICAgICAqIEBwYXJhbSBbb3B0aW9ucy5yZXNvbHV0aW9uPTFdIHtudW1iZXJ9IHRoZSByZXNvbHV0aW9uIG9mIHRoZSByZW5kZXJlciwgcmV0aW5hIHdvdWxkIGJlIDJcbiAgICAgKiBAcGFyYW0gW25vV2ViR0w9ZmFsc2VdIHtib29sZWFufSBwcmV2ZW50cyBzZWxlY3Rpb24gb2YgV2ViR0wgcmVuZGVyZXIsIGV2ZW4gaWYgc3VjaCBpcyBwcmVzZW50XG4gICAgICpcbiAgICAgKiBAcmV0dXJuIHtXZWJHTFJlbmRlcmVyfENhbnZhc1JlbmRlcmVyfSBSZXR1cm5zIFdlYkdMIHJlbmRlcmVyIGlmIGF2YWlsYWJsZSwgb3RoZXJ3aXNlIENhbnZhc1JlbmRlcmVyXG4gICAgICovXG4gICAgYXV0b0RldGVjdFJlbmRlcmVyOiBmdW5jdGlvbiAod2lkdGgsIGhlaWdodCwgb3B0aW9ucywgbm9XZWJHTClcbiAgICB7XG4gICAgICAgIHdpZHRoID0gd2lkdGggfHwgODAwO1xuICAgICAgICBoZWlnaHQgPSBoZWlnaHQgfHwgNjAwO1xuXG4gICAgICAgIGlmICghbm9XZWJHTCAmJiBjb3JlLnV0aWxzLmlzV2ViR0xTdXBwb3J0ZWQoKSlcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBjb3JlLldlYkdMUmVuZGVyZXIod2lkdGgsIGhlaWdodCwgb3B0aW9ucyk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbmV3IGNvcmUuQ2FudmFzUmVuZGVyZXIod2lkdGgsIGhlaWdodCwgb3B0aW9ucyk7XG4gICAgfVxufSk7XG4iLCIvLyBAdG9kbyAtIGlnbm9yZSB0aGUgdG9vIG1hbnkgcGFyYW1ldGVycyB3YXJuaW5nIGZvciBub3dcbi8vIHNob3VsZCBlaXRoZXIgZml4IGl0IG9yIGNoYW5nZSB0aGUganNoaW50IGNvbmZpZ1xuLy8ganNoaW50IC1XMDcyXG5cbnZhciBQb2ludCA9IHJlcXVpcmUoJy4vUG9pbnQnKTtcblxuLyoqXG4gKiBUaGUgcGl4aSBNYXRyaXggY2xhc3MgYXMgYW4gb2JqZWN0LCB3aGljaCBtYWtlcyBpdCBhIGxvdCBmYXN0ZXIsXG4gKiBoZXJlIGlzIGEgcmVwcmVzZW50YXRpb24gb2YgaXQgOlxuICogfCBhIHwgYiB8IHR4fFxuICogfCBjIHwgZCB8IHR5fFxuICogfCAwIHwgMCB8IDEgfFxuICpcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqL1xuZnVuY3Rpb24gTWF0cml4KClcbntcbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMVxuICAgICAqL1xuICAgIHRoaXMuYSA9IDE7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMFxuICAgICAqL1xuICAgIHRoaXMuYiA9IDA7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMFxuICAgICAqL1xuICAgIHRoaXMuYyA9IDA7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMVxuICAgICAqL1xuICAgIHRoaXMuZCA9IDE7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMFxuICAgICAqL1xuICAgIHRoaXMudHggPSAwO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDBcbiAgICAgKi9cbiAgICB0aGlzLnR5ID0gMDtcbn1cblxuTWF0cml4LnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IE1hdHJpeDtcbm1vZHVsZS5leHBvcnRzID0gTWF0cml4O1xuXG4vKipcbiAqIENyZWF0ZXMgYSBNYXRyaXggb2JqZWN0IGJhc2VkIG9uIHRoZSBnaXZlbiBhcnJheS4gVGhlIEVsZW1lbnQgdG8gTWF0cml4IG1hcHBpbmcgb3JkZXIgaXMgYXMgZm9sbG93czpcbiAqXG4gKiBhID0gYXJyYXlbMF1cbiAqIGIgPSBhcnJheVsxXVxuICogYyA9IGFycmF5WzNdXG4gKiBkID0gYXJyYXlbNF1cbiAqIHR4ID0gYXJyYXlbMl1cbiAqIHR5ID0gYXJyYXlbNV1cbiAqXG4gKiBAcGFyYW0gYXJyYXkge251bWJlcltdfSBUaGUgYXJyYXkgdGhhdCB0aGUgbWF0cml4IHdpbGwgYmUgcG9wdWxhdGVkIGZyb20uXG4gKi9cbk1hdHJpeC5wcm90b3R5cGUuZnJvbUFycmF5ID0gZnVuY3Rpb24gKGFycmF5KVxue1xuICAgIHRoaXMuYSA9IGFycmF5WzBdO1xuICAgIHRoaXMuYiA9IGFycmF5WzFdO1xuICAgIHRoaXMuYyA9IGFycmF5WzNdO1xuICAgIHRoaXMuZCA9IGFycmF5WzRdO1xuICAgIHRoaXMudHggPSBhcnJheVsyXTtcbiAgICB0aGlzLnR5ID0gYXJyYXlbNV07XG59O1xuXG5cbi8qKlxuICogc2V0cyB0aGUgbWF0cml4IHByb3BlcnRpZXNcbiAqXG4gKiBAcGFyYW0ge251bWJlcn0gYVxuICogQHBhcmFtIHtudW1iZXJ9IGJcbiAqIEBwYXJhbSB7bnVtYmVyfSBjXG4gKiBAcGFyYW0ge251bWJlcn0gZFxuICogQHBhcmFtIHtudW1iZXJ9IHR4XG4gKiBAcGFyYW0ge251bWJlcn0gdHlcbiAqXG4gKiBAcmV0dXJuIHtQSVhJLk1hdHJpeH0gVGhpcyBtYXRyaXguIEdvb2QgZm9yIGNoYWluaW5nIG1ldGhvZCBjYWxscy5cbiAqL1xuTWF0cml4LnByb3RvdHlwZS5zZXQgPSBmdW5jdGlvbiAoYSwgYiwgYywgZCwgdHgsIHR5KVxue1xuICAgIHRoaXMuYSA9IGE7XG4gICAgdGhpcy5iID0gYjtcbiAgICB0aGlzLmMgPSBjO1xuICAgIHRoaXMuZCA9IGQ7XG4gICAgdGhpcy50eCA9IHR4O1xuICAgIHRoaXMudHkgPSB0eTtcblxuICAgIHJldHVybiB0aGlzO1xufTtcblxuXG4vKipcbiAqIENyZWF0ZXMgYW4gYXJyYXkgZnJvbSB0aGUgY3VycmVudCBNYXRyaXggb2JqZWN0LlxuICpcbiAqIEBwYXJhbSB0cmFuc3Bvc2Uge2Jvb2xlYW59IFdoZXRoZXIgd2UgbmVlZCB0byB0cmFuc3Bvc2UgdGhlIG1hdHJpeCBvciBub3RcbiAqIEBwYXJhbSBbb3V0XSB7QXJyYXl9IElmIHByb3ZpZGVkIHRoZSBhcnJheSB3aWxsIGJlIGFzc2lnbmVkIHRvIG91dFxuICogQHJldHVybiB7bnVtYmVyW119IHRoZSBuZXdseSBjcmVhdGVkIGFycmF5IHdoaWNoIGNvbnRhaW5zIHRoZSBtYXRyaXhcbiAqL1xuTWF0cml4LnByb3RvdHlwZS50b0FycmF5ID0gZnVuY3Rpb24gKHRyYW5zcG9zZSwgb3V0KVxue1xuICAgIGlmICghdGhpcy5hcnJheSlcbiAgICB7XG4gICAgICAgIHRoaXMuYXJyYXkgPSBuZXcgRmxvYXQzMkFycmF5KDkpO1xuICAgIH1cblxuICAgIHZhciBhcnJheSA9IG91dCB8fCB0aGlzLmFycmF5O1xuXG4gICAgaWYgKHRyYW5zcG9zZSlcbiAgICB7XG4gICAgICAgIGFycmF5WzBdID0gdGhpcy5hO1xuICAgICAgICBhcnJheVsxXSA9IHRoaXMuYjtcbiAgICAgICAgYXJyYXlbMl0gPSAwO1xuICAgICAgICBhcnJheVszXSA9IHRoaXMuYztcbiAgICAgICAgYXJyYXlbNF0gPSB0aGlzLmQ7XG4gICAgICAgIGFycmF5WzVdID0gMDtcbiAgICAgICAgYXJyYXlbNl0gPSB0aGlzLnR4O1xuICAgICAgICBhcnJheVs3XSA9IHRoaXMudHk7XG4gICAgICAgIGFycmF5WzhdID0gMTtcbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgYXJyYXlbMF0gPSB0aGlzLmE7XG4gICAgICAgIGFycmF5WzFdID0gdGhpcy5jO1xuICAgICAgICBhcnJheVsyXSA9IHRoaXMudHg7XG4gICAgICAgIGFycmF5WzNdID0gdGhpcy5iO1xuICAgICAgICBhcnJheVs0XSA9IHRoaXMuZDtcbiAgICAgICAgYXJyYXlbNV0gPSB0aGlzLnR5O1xuICAgICAgICBhcnJheVs2XSA9IDA7XG4gICAgICAgIGFycmF5WzddID0gMDtcbiAgICAgICAgYXJyYXlbOF0gPSAxO1xuICAgIH1cblxuICAgIHJldHVybiBhcnJheTtcbn07XG5cbi8qKlxuICogR2V0IGEgbmV3IHBvc2l0aW9uIHdpdGggdGhlIGN1cnJlbnQgdHJhbnNmb3JtYXRpb24gYXBwbGllZC5cbiAqIENhbiBiZSB1c2VkIHRvIGdvIGZyb20gYSBjaGlsZCdzIGNvb3JkaW5hdGUgc3BhY2UgdG8gdGhlIHdvcmxkIGNvb3JkaW5hdGUgc3BhY2UuIChlLmcuIHJlbmRlcmluZylcbiAqXG4gKiBAcGFyYW0gcG9zIHtQSVhJLlBvaW50fSBUaGUgb3JpZ2luXG4gKiBAcGFyYW0gW25ld1Bvc10ge1BJWEkuUG9pbnR9IFRoZSBwb2ludCB0aGF0IHRoZSBuZXcgcG9zaXRpb24gaXMgYXNzaWduZWQgdG8gKGFsbG93ZWQgdG8gYmUgc2FtZSBhcyBpbnB1dClcbiAqIEByZXR1cm4ge1BJWEkuUG9pbnR9IFRoZSBuZXcgcG9pbnQsIHRyYW5zZm9ybWVkIHRocm91Z2ggdGhpcyBtYXRyaXhcbiAqL1xuTWF0cml4LnByb3RvdHlwZS5hcHBseSA9IGZ1bmN0aW9uIChwb3MsIG5ld1BvcylcbntcbiAgICBuZXdQb3MgPSBuZXdQb3MgfHwgbmV3IFBvaW50KCk7XG5cbiAgICB2YXIgeCA9IHBvcy54O1xuICAgIHZhciB5ID0gcG9zLnk7XG5cbiAgICBuZXdQb3MueCA9IHRoaXMuYSAqIHggKyB0aGlzLmMgKiB5ICsgdGhpcy50eDtcbiAgICBuZXdQb3MueSA9IHRoaXMuYiAqIHggKyB0aGlzLmQgKiB5ICsgdGhpcy50eTtcblxuICAgIHJldHVybiBuZXdQb3M7XG59O1xuXG4vKipcbiAqIEdldCBhIG5ldyBwb3NpdGlvbiB3aXRoIHRoZSBpbnZlcnNlIG9mIHRoZSBjdXJyZW50IHRyYW5zZm9ybWF0aW9uIGFwcGxpZWQuXG4gKiBDYW4gYmUgdXNlZCB0byBnbyBmcm9tIHRoZSB3b3JsZCBjb29yZGluYXRlIHNwYWNlIHRvIGEgY2hpbGQncyBjb29yZGluYXRlIHNwYWNlLiAoZS5nLiBpbnB1dClcbiAqXG4gKiBAcGFyYW0gcG9zIHtQSVhJLlBvaW50fSBUaGUgb3JpZ2luXG4gKiBAcGFyYW0gW25ld1Bvc10ge1BJWEkuUG9pbnR9IFRoZSBwb2ludCB0aGF0IHRoZSBuZXcgcG9zaXRpb24gaXMgYXNzaWduZWQgdG8gKGFsbG93ZWQgdG8gYmUgc2FtZSBhcyBpbnB1dClcbiAqIEByZXR1cm4ge1BJWEkuUG9pbnR9IFRoZSBuZXcgcG9pbnQsIGludmVyc2UtdHJhbnNmb3JtZWQgdGhyb3VnaCB0aGlzIG1hdHJpeFxuICovXG5NYXRyaXgucHJvdG90eXBlLmFwcGx5SW52ZXJzZSA9IGZ1bmN0aW9uIChwb3MsIG5ld1BvcylcbntcbiAgICBuZXdQb3MgPSBuZXdQb3MgfHwgbmV3IFBvaW50KCk7XG5cbiAgICB2YXIgaWQgPSAxIC8gKHRoaXMuYSAqIHRoaXMuZCArIHRoaXMuYyAqIC10aGlzLmIpO1xuXG4gICAgdmFyIHggPSBwb3MueDtcbiAgICB2YXIgeSA9IHBvcy55O1xuXG4gICAgbmV3UG9zLnggPSB0aGlzLmQgKiBpZCAqIHggKyAtdGhpcy5jICogaWQgKiB5ICsgKHRoaXMudHkgKiB0aGlzLmMgLSB0aGlzLnR4ICogdGhpcy5kKSAqIGlkO1xuICAgIG5ld1Bvcy55ID0gdGhpcy5hICogaWQgKiB5ICsgLXRoaXMuYiAqIGlkICogeCArICgtdGhpcy50eSAqIHRoaXMuYSArIHRoaXMudHggKiB0aGlzLmIpICogaWQ7XG5cbiAgICByZXR1cm4gbmV3UG9zO1xufTtcblxuLyoqXG4gKiBUcmFuc2xhdGVzIHRoZSBtYXRyaXggb24gdGhlIHggYW5kIHkuXG4gKlxuICogQHBhcmFtIHtudW1iZXJ9IHhcbiAqIEBwYXJhbSB7bnVtYmVyfSB5XG4gKiBAcmV0dXJuIHtQSVhJLk1hdHJpeH0gVGhpcyBtYXRyaXguIEdvb2QgZm9yIGNoYWluaW5nIG1ldGhvZCBjYWxscy5cbiAqL1xuTWF0cml4LnByb3RvdHlwZS50cmFuc2xhdGUgPSBmdW5jdGlvbiAoeCwgeSlcbntcbiAgICB0aGlzLnR4ICs9IHg7XG4gICAgdGhpcy50eSArPSB5O1xuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIEFwcGxpZXMgYSBzY2FsZSB0cmFuc2Zvcm1hdGlvbiB0byB0aGUgbWF0cml4LlxuICpcbiAqIEBwYXJhbSB7bnVtYmVyfSB4IFRoZSBhbW91bnQgdG8gc2NhbGUgaG9yaXpvbnRhbGx5XG4gKiBAcGFyYW0ge251bWJlcn0geSBUaGUgYW1vdW50IHRvIHNjYWxlIHZlcnRpY2FsbHlcbiAqIEByZXR1cm4ge1BJWEkuTWF0cml4fSBUaGlzIG1hdHJpeC4gR29vZCBmb3IgY2hhaW5pbmcgbWV0aG9kIGNhbGxzLlxuICovXG5NYXRyaXgucHJvdG90eXBlLnNjYWxlID0gZnVuY3Rpb24gKHgsIHkpXG57XG4gICAgdGhpcy5hICo9IHg7XG4gICAgdGhpcy5kICo9IHk7XG4gICAgdGhpcy5jICo9IHg7XG4gICAgdGhpcy5iICo9IHk7XG4gICAgdGhpcy50eCAqPSB4O1xuICAgIHRoaXMudHkgKj0geTtcblxuICAgIHJldHVybiB0aGlzO1xufTtcblxuXG4vKipcbiAqIEFwcGxpZXMgYSByb3RhdGlvbiB0cmFuc2Zvcm1hdGlvbiB0byB0aGUgbWF0cml4LlxuICpcbiAqIEBwYXJhbSB7bnVtYmVyfSBhbmdsZSAtIFRoZSBhbmdsZSBpbiByYWRpYW5zLlxuICogQHJldHVybiB7UElYSS5NYXRyaXh9IFRoaXMgbWF0cml4LiBHb29kIGZvciBjaGFpbmluZyBtZXRob2QgY2FsbHMuXG4gKi9cbk1hdHJpeC5wcm90b3R5cGUucm90YXRlID0gZnVuY3Rpb24gKGFuZ2xlKVxue1xuICAgIHZhciBjb3MgPSBNYXRoLmNvcyggYW5nbGUgKTtcbiAgICB2YXIgc2luID0gTWF0aC5zaW4oIGFuZ2xlICk7XG5cbiAgICB2YXIgYTEgPSB0aGlzLmE7XG4gICAgdmFyIGMxID0gdGhpcy5jO1xuICAgIHZhciB0eDEgPSB0aGlzLnR4O1xuXG4gICAgdGhpcy5hID0gYTEgKiBjb3MtdGhpcy5iICogc2luO1xuICAgIHRoaXMuYiA9IGExICogc2luK3RoaXMuYiAqIGNvcztcbiAgICB0aGlzLmMgPSBjMSAqIGNvcy10aGlzLmQgKiBzaW47XG4gICAgdGhpcy5kID0gYzEgKiBzaW4rdGhpcy5kICogY29zO1xuICAgIHRoaXMudHggPSB0eDEgKiBjb3MgLSB0aGlzLnR5ICogc2luO1xuICAgIHRoaXMudHkgPSB0eDEgKiBzaW4gKyB0aGlzLnR5ICogY29zO1xuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIEFwcGVuZHMgdGhlIGdpdmVuIE1hdHJpeCB0byB0aGlzIE1hdHJpeC5cbiAqXG4gKiBAcGFyYW0ge1BJWEkuTWF0cml4fSBtYXRyaXhcbiAqIEByZXR1cm4ge1BJWEkuTWF0cml4fSBUaGlzIG1hdHJpeC4gR29vZCBmb3IgY2hhaW5pbmcgbWV0aG9kIGNhbGxzLlxuICovXG5NYXRyaXgucHJvdG90eXBlLmFwcGVuZCA9IGZ1bmN0aW9uIChtYXRyaXgpXG57XG4gICAgdmFyIGExID0gdGhpcy5hO1xuICAgIHZhciBiMSA9IHRoaXMuYjtcbiAgICB2YXIgYzEgPSB0aGlzLmM7XG4gICAgdmFyIGQxID0gdGhpcy5kO1xuXG4gICAgdGhpcy5hICA9IG1hdHJpeC5hICogYTEgKyBtYXRyaXguYiAqIGMxO1xuICAgIHRoaXMuYiAgPSBtYXRyaXguYSAqIGIxICsgbWF0cml4LmIgKiBkMTtcbiAgICB0aGlzLmMgID0gbWF0cml4LmMgKiBhMSArIG1hdHJpeC5kICogYzE7XG4gICAgdGhpcy5kICA9IG1hdHJpeC5jICogYjEgKyBtYXRyaXguZCAqIGQxO1xuXG4gICAgdGhpcy50eCA9IG1hdHJpeC50eCAqIGExICsgbWF0cml4LnR5ICogYzEgKyB0aGlzLnR4O1xuICAgIHRoaXMudHkgPSBtYXRyaXgudHggKiBiMSArIG1hdHJpeC50eSAqIGQxICsgdGhpcy50eTtcblxuICAgIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBTZXRzIHRoZSBtYXRyaXggYmFzZWQgb24gYWxsIHRoZSBhdmFpbGFibGUgcHJvcGVydGllc1xuICpcbiAqIEBwYXJhbSB7bnVtYmVyfSB4XG4gKiBAcGFyYW0ge251bWJlcn0geVxuICogQHBhcmFtIHtudW1iZXJ9IHBpdm90WFxuICogQHBhcmFtIHtudW1iZXJ9IHBpdm90WVxuICogQHBhcmFtIHtudW1iZXJ9IHNjYWxlWFxuICogQHBhcmFtIHtudW1iZXJ9IHNjYWxlWVxuICogQHBhcmFtIHtudW1iZXJ9IHJvdGF0aW9uXG4gKiBAcGFyYW0ge251bWJlcn0gc2tld1hcbiAqIEBwYXJhbSB7bnVtYmVyfSBza2V3WVxuICpcbiAqIEByZXR1cm4ge1BJWEkuTWF0cml4fSBUaGlzIG1hdHJpeC4gR29vZCBmb3IgY2hhaW5pbmcgbWV0aG9kIGNhbGxzLlxuICovXG5NYXRyaXgucHJvdG90eXBlLnNldFRyYW5zZm9ybSA9IGZ1bmN0aW9uICh4LCB5LCBwaXZvdFgsIHBpdm90WSwgc2NhbGVYLCBzY2FsZVksIHJvdGF0aW9uLCBza2V3WCwgc2tld1kpXG57XG4gICAgdmFyIGEsIGIsIGMsIGQsIHNyLCBjciwgY3ksIHN5LCBuc3gsIGN4O1xuXG4gICAgc3IgID0gTWF0aC5zaW4ocm90YXRpb24pO1xuICAgIGNyICA9IE1hdGguY29zKHJvdGF0aW9uKTtcbiAgICBjeSAgPSBNYXRoLmNvcyhza2V3WSk7XG4gICAgc3kgID0gTWF0aC5zaW4oc2tld1kpO1xuICAgIG5zeCA9IC1NYXRoLnNpbihza2V3WCk7XG4gICAgY3ggID0gIE1hdGguY29zKHNrZXdYKTtcblxuICAgIGEgID0gIGNyICogc2NhbGVYO1xuICAgIGIgID0gIHNyICogc2NhbGVYO1xuICAgIGMgID0gLXNyICogc2NhbGVZO1xuICAgIGQgID0gIGNyICogc2NhbGVZO1xuXG4gICAgdGhpcy5hICA9IGN5ICogYSArIHN5ICogYztcbiAgICB0aGlzLmIgID0gY3kgKiBiICsgc3kgKiBkO1xuICAgIHRoaXMuYyAgPSBuc3ggKiBhICsgY3ggKiBjO1xuICAgIHRoaXMuZCAgPSBuc3ggKiBiICsgY3ggKiBkO1xuXG4gICAgdGhpcy50eCA9IHggKyAoIHBpdm90WCAqIGEgKyBwaXZvdFkgKiBjICk7XG4gICAgdGhpcy50eSA9IHkgKyAoIHBpdm90WCAqIGIgKyBwaXZvdFkgKiBkICk7XG5cbiAgICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogUHJlcGVuZHMgdGhlIGdpdmVuIE1hdHJpeCB0byB0aGlzIE1hdHJpeC5cbiAqXG4gKiBAcGFyYW0ge1BJWEkuTWF0cml4fSBtYXRyaXhcbiAqIEByZXR1cm4ge1BJWEkuTWF0cml4fSBUaGlzIG1hdHJpeC4gR29vZCBmb3IgY2hhaW5pbmcgbWV0aG9kIGNhbGxzLlxuICovXG5NYXRyaXgucHJvdG90eXBlLnByZXBlbmQgPSBmdW5jdGlvbihtYXRyaXgpXG57XG4gICAgdmFyIHR4MSA9IHRoaXMudHg7XG5cbiAgICBpZiAobWF0cml4LmEgIT09IDEgfHwgbWF0cml4LmIgIT09IDAgfHwgbWF0cml4LmMgIT09IDAgfHwgbWF0cml4LmQgIT09IDEpXG4gICAge1xuICAgICAgICB2YXIgYTEgPSB0aGlzLmE7XG4gICAgICAgIHZhciBjMSA9IHRoaXMuYztcbiAgICAgICAgdGhpcy5hICA9IGExKm1hdHJpeC5hK3RoaXMuYiptYXRyaXguYztcbiAgICAgICAgdGhpcy5iICA9IGExKm1hdHJpeC5iK3RoaXMuYiptYXRyaXguZDtcbiAgICAgICAgdGhpcy5jICA9IGMxKm1hdHJpeC5hK3RoaXMuZCptYXRyaXguYztcbiAgICAgICAgdGhpcy5kICA9IGMxKm1hdHJpeC5iK3RoaXMuZCptYXRyaXguZDtcbiAgICB9XG5cbiAgICB0aGlzLnR4ID0gdHgxKm1hdHJpeC5hK3RoaXMudHkqbWF0cml4LmMrbWF0cml4LnR4O1xuICAgIHRoaXMudHkgPSB0eDEqbWF0cml4LmIrdGhpcy50eSptYXRyaXguZCttYXRyaXgudHk7XG5cbiAgICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogSW52ZXJ0cyB0aGlzIG1hdHJpeFxuICpcbiAqIEByZXR1cm4ge1BJWEkuTWF0cml4fSBUaGlzIG1hdHJpeC4gR29vZCBmb3IgY2hhaW5pbmcgbWV0aG9kIGNhbGxzLlxuICovXG5NYXRyaXgucHJvdG90eXBlLmludmVydCA9IGZ1bmN0aW9uKClcbntcbiAgICB2YXIgYTEgPSB0aGlzLmE7XG4gICAgdmFyIGIxID0gdGhpcy5iO1xuICAgIHZhciBjMSA9IHRoaXMuYztcbiAgICB2YXIgZDEgPSB0aGlzLmQ7XG4gICAgdmFyIHR4MSA9IHRoaXMudHg7XG4gICAgdmFyIG4gPSBhMSpkMS1iMSpjMTtcblxuICAgIHRoaXMuYSA9IGQxL247XG4gICAgdGhpcy5iID0gLWIxL247XG4gICAgdGhpcy5jID0gLWMxL247XG4gICAgdGhpcy5kID0gYTEvbjtcbiAgICB0aGlzLnR4ID0gKGMxKnRoaXMudHktZDEqdHgxKS9uO1xuICAgIHRoaXMudHkgPSAtKGExKnRoaXMudHktYjEqdHgxKS9uO1xuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG5cbi8qKlxuICogUmVzZXRzIHRoaXMgTWF0aXggdG8gYW4gaWRlbnRpdHkgKGRlZmF1bHQpIG1hdHJpeC5cbiAqXG4gKiBAcmV0dXJuIHtQSVhJLk1hdHJpeH0gVGhpcyBtYXRyaXguIEdvb2QgZm9yIGNoYWluaW5nIG1ldGhvZCBjYWxscy5cbiAqL1xuTWF0cml4LnByb3RvdHlwZS5pZGVudGl0eSA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy5hID0gMTtcbiAgICB0aGlzLmIgPSAwO1xuICAgIHRoaXMuYyA9IDA7XG4gICAgdGhpcy5kID0gMTtcbiAgICB0aGlzLnR4ID0gMDtcbiAgICB0aGlzLnR5ID0gMDtcblxuICAgIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBDcmVhdGVzIGEgbmV3IE1hdHJpeCBvYmplY3Qgd2l0aCB0aGUgc2FtZSB2YWx1ZXMgYXMgdGhpcyBvbmUuXG4gKlxuICogQHJldHVybiB7UElYSS5NYXRyaXh9IEEgY29weSBvZiB0aGlzIG1hdHJpeC4gR29vZCBmb3IgY2hhaW5pbmcgbWV0aG9kIGNhbGxzLlxuICovXG5NYXRyaXgucHJvdG90eXBlLmNsb25lID0gZnVuY3Rpb24gKClcbntcbiAgICB2YXIgbWF0cml4ID0gbmV3IE1hdHJpeCgpO1xuICAgIG1hdHJpeC5hID0gdGhpcy5hO1xuICAgIG1hdHJpeC5iID0gdGhpcy5iO1xuICAgIG1hdHJpeC5jID0gdGhpcy5jO1xuICAgIG1hdHJpeC5kID0gdGhpcy5kO1xuICAgIG1hdHJpeC50eCA9IHRoaXMudHg7XG4gICAgbWF0cml4LnR5ID0gdGhpcy50eTtcblxuICAgIHJldHVybiBtYXRyaXg7XG59O1xuXG4vKipcbiAqIENoYW5nZXMgdGhlIHZhbHVlcyBvZiB0aGUgZ2l2ZW4gbWF0cml4IHRvIGJlIHRoZSBzYW1lIGFzIHRoZSBvbmVzIGluIHRoaXMgbWF0cml4XG4gKlxuICogQHJldHVybiB7UElYSS5NYXRyaXh9IFRoZSBtYXRyaXggZ2l2ZW4gaW4gcGFyYW1ldGVyIHdpdGggaXRzIHZhbHVlcyB1cGRhdGVkLlxuICovXG5NYXRyaXgucHJvdG90eXBlLmNvcHkgPSBmdW5jdGlvbiAobWF0cml4KVxue1xuICAgIG1hdHJpeC5hID0gdGhpcy5hO1xuICAgIG1hdHJpeC5iID0gdGhpcy5iO1xuICAgIG1hdHJpeC5jID0gdGhpcy5jO1xuICAgIG1hdHJpeC5kID0gdGhpcy5kO1xuICAgIG1hdHJpeC50eCA9IHRoaXMudHg7XG4gICAgbWF0cml4LnR5ID0gdGhpcy50eTtcblxuICAgIHJldHVybiBtYXRyaXg7XG59O1xuXG4vKipcbiAqIEEgZGVmYXVsdCAoaWRlbnRpdHkpIG1hdHJpeFxuICpcbiAqIEBzdGF0aWNcbiAqIEBjb25zdFxuICovXG5NYXRyaXguSURFTlRJVFkgPSBuZXcgTWF0cml4KCk7XG5cbi8qKlxuICogQSB0ZW1wIG1hdHJpeFxuICpcbiAqIEBzdGF0aWNcbiAqIEBjb25zdFxuICovXG5NYXRyaXguVEVNUF9NQVRSSVggPSBuZXcgTWF0cml4KCk7XG4iLCIvKipcbiAqIFRoZSBQb2ludCBvYmplY3QgcmVwcmVzZW50cyBhIGxvY2F0aW9uIGluIGEgdHdvLWRpbWVuc2lvbmFsIGNvb3JkaW5hdGUgc3lzdGVtLCB3aGVyZSB4IHJlcHJlc2VudHNcbiAqIHRoZSBob3Jpem9udGFsIGF4aXMgYW5kIHkgcmVwcmVzZW50cyB0aGUgdmVydGljYWwgYXhpcy5cbiAqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gW3g9MF0ge251bWJlcn0gcG9zaXRpb24gb2YgdGhlIHBvaW50IG9uIHRoZSB4IGF4aXNcbiAqIEBwYXJhbSBbeT0wXSB7bnVtYmVyfSBwb3NpdGlvbiBvZiB0aGUgcG9pbnQgb24gdGhlIHkgYXhpc1xuICovXG5mdW5jdGlvbiBQb2ludCh4LCB5KVxue1xuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAwXG4gICAgICovXG4gICAgdGhpcy54ID0geCB8fCAwO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDBcbiAgICAgKi9cbiAgICB0aGlzLnkgPSB5IHx8IDA7XG59XG5cblBvaW50LnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFBvaW50O1xubW9kdWxlLmV4cG9ydHMgPSBQb2ludDtcblxuLyoqXG4gKiBDcmVhdGVzIGEgY2xvbmUgb2YgdGhpcyBwb2ludFxuICpcbiAqIEByZXR1cm4ge1BJWEkuUG9pbnR9IGEgY29weSBvZiB0aGUgcG9pbnRcbiAqL1xuUG9pbnQucHJvdG90eXBlLmNsb25lID0gZnVuY3Rpb24gKClcbntcbiAgICByZXR1cm4gbmV3IFBvaW50KHRoaXMueCwgdGhpcy55KTtcbn07XG5cbi8qKlxuICogQ29waWVzIHggYW5kIHkgZnJvbSB0aGUgZ2l2ZW4gcG9pbnRcbiAqXG4gKiBAcGFyYW0gcCB7UElYSS5Qb2ludH1cbiAqL1xuUG9pbnQucHJvdG90eXBlLmNvcHkgPSBmdW5jdGlvbiAocCkge1xuICAgIHRoaXMuc2V0KHAueCwgcC55KTtcbn07XG5cbi8qKlxuICogUmV0dXJucyB0cnVlIGlmIHRoZSBnaXZlbiBwb2ludCBpcyBlcXVhbCB0byB0aGlzIHBvaW50XG4gKlxuICogQHBhcmFtIHAge1BJWEkuUG9pbnR9XG4gKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAqL1xuUG9pbnQucHJvdG90eXBlLmVxdWFscyA9IGZ1bmN0aW9uIChwKSB7XG4gICAgcmV0dXJuIChwLnggPT09IHRoaXMueCkgJiYgKHAueSA9PT0gdGhpcy55KTtcbn07XG5cbi8qKlxuICogU2V0cyB0aGUgcG9pbnQgdG8gYSBuZXcgeCBhbmQgeSBwb3NpdGlvbi5cbiAqIElmIHkgaXMgb21pdHRlZCwgYm90aCB4IGFuZCB5IHdpbGwgYmUgc2V0IHRvIHguXG4gKlxuICogQHBhcmFtIFt4PTBdIHtudW1iZXJ9IHBvc2l0aW9uIG9mIHRoZSBwb2ludCBvbiB0aGUgeCBheGlzXG4gKiBAcGFyYW0gW3k9MF0ge251bWJlcn0gcG9zaXRpb24gb2YgdGhlIHBvaW50IG9uIHRoZSB5IGF4aXNcbiAqL1xuUG9pbnQucHJvdG90eXBlLnNldCA9IGZ1bmN0aW9uICh4LCB5KVxue1xuICAgIHRoaXMueCA9IHggfHwgMDtcbiAgICB0aGlzLnkgPSB5IHx8ICggKHkgIT09IDApID8gdGhpcy54IDogMCApIDtcbn07XG4iLCIvKipcbiAqIE1hdGggY2xhc3NlcyBhbmQgdXRpbGl0aWVzIG1peGVkIGludG8gUElYSSBuYW1lc3BhY2UuXG4gKlxuICogQGxlbmRzIFBJWElcbiAqL1xubW9kdWxlLmV4cG9ydHMgPSB7XG4gICAgLy8gVGhlc2Ugd2lsbCBiZSBtaXhlZCB0byBiZSBtYWRlIHB1YmxpY2x5IGF2YWlsYWJsZSxcbiAgICAvLyB3aGlsZSB0aGlzIG1vZHVsZSBpcyB1c2VkIGludGVybmFsbHkgaW4gY29yZVxuICAgIC8vIHRvIGF2b2lkIGNpcmN1bGFyIGRlcGVuZGVuY2llcyBhbmQgY3V0IGRvd24gb25cbiAgICAvLyBpbnRlcm5hbCBtb2R1bGUgcmVxdWlyZXMuXG5cbiAgICBQb2ludDogICAgICByZXF1aXJlKCcuL1BvaW50JyksXG4gICAgTWF0cml4OiAgICAgcmVxdWlyZSgnLi9NYXRyaXgnKSxcblxuICAgIENpcmNsZTogICAgIHJlcXVpcmUoJy4vc2hhcGVzL0NpcmNsZScpLFxuICAgIEVsbGlwc2U6ICAgIHJlcXVpcmUoJy4vc2hhcGVzL0VsbGlwc2UnKSxcbiAgICBQb2x5Z29uOiAgICByZXF1aXJlKCcuL3NoYXBlcy9Qb2x5Z29uJyksXG4gICAgUmVjdGFuZ2xlOiAgcmVxdWlyZSgnLi9zaGFwZXMvUmVjdGFuZ2xlJyksXG4gICAgUm91bmRlZFJlY3RhbmdsZTogcmVxdWlyZSgnLi9zaGFwZXMvUm91bmRlZFJlY3RhbmdsZScpXG59O1xuIiwidmFyIFJlY3RhbmdsZSA9IHJlcXVpcmUoJy4vUmVjdGFuZ2xlJyksXG4gICAgQ09OU1QgPSByZXF1aXJlKCcuLi8uLi9jb25zdCcpO1xuXG4vKipcbiAqIFRoZSBDaXJjbGUgb2JqZWN0IGNhbiBiZSB1c2VkIHRvIHNwZWNpZnkgYSBoaXQgYXJlYSBmb3IgZGlzcGxheU9iamVjdHNcbiAqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0geCB7bnVtYmVyfSBUaGUgWCBjb29yZGluYXRlIG9mIHRoZSBjZW50ZXIgb2YgdGhpcyBjaXJjbGVcbiAqIEBwYXJhbSB5IHtudW1iZXJ9IFRoZSBZIGNvb3JkaW5hdGUgb2YgdGhlIGNlbnRlciBvZiB0aGlzIGNpcmNsZVxuICogQHBhcmFtIHJhZGl1cyB7bnVtYmVyfSBUaGUgcmFkaXVzIG9mIHRoZSBjaXJjbGVcbiAqL1xuZnVuY3Rpb24gQ2lyY2xlKHgsIHksIHJhZGl1cylcbntcbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMFxuICAgICAqL1xuICAgIHRoaXMueCA9IHggfHwgMDtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAwXG4gICAgICovXG4gICAgdGhpcy55ID0geSB8fCAwO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDBcbiAgICAgKi9cbiAgICB0aGlzLnJhZGl1cyA9IHJhZGl1cyB8fCAwO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHR5cGUgb2YgdGhlIG9iamVjdCwgbWFpbmx5IHVzZWQgdG8gYXZvaWQgYGluc3RhbmNlb2ZgIGNoZWNrc1xuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMudHlwZSA9IENPTlNULlNIQVBFUy5DSVJDO1xufVxuXG5DaXJjbGUucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gQ2lyY2xlO1xubW9kdWxlLmV4cG9ydHMgPSBDaXJjbGU7XG5cbi8qKlxuICogQ3JlYXRlcyBhIGNsb25lIG9mIHRoaXMgQ2lyY2xlIGluc3RhbmNlXG4gKlxuICogQHJldHVybiB7UElYSS5DaXJjbGV9IGEgY29weSBvZiB0aGUgQ2lyY2xlXG4gKi9cbkNpcmNsZS5wcm90b3R5cGUuY2xvbmUgPSBmdW5jdGlvbiAoKVxue1xuICAgIHJldHVybiBuZXcgQ2lyY2xlKHRoaXMueCwgdGhpcy55LCB0aGlzLnJhZGl1cyk7XG59O1xuXG4vKipcbiAqIENoZWNrcyB3aGV0aGVyIHRoZSB4IGFuZCB5IGNvb3JkaW5hdGVzIGdpdmVuIGFyZSBjb250YWluZWQgd2l0aGluIHRoaXMgY2lyY2xlXG4gKlxuICogQHBhcmFtIHgge251bWJlcn0gVGhlIFggY29vcmRpbmF0ZSBvZiB0aGUgcG9pbnQgdG8gdGVzdFxuICogQHBhcmFtIHkge251bWJlcn0gVGhlIFkgY29vcmRpbmF0ZSBvZiB0aGUgcG9pbnQgdG8gdGVzdFxuICogQHJldHVybiB7Ym9vbGVhbn0gV2hldGhlciB0aGUgeC95IGNvb3JkaW5hdGVzIGFyZSB3aXRoaW4gdGhpcyBDaXJjbGVcbiAqL1xuQ2lyY2xlLnByb3RvdHlwZS5jb250YWlucyA9IGZ1bmN0aW9uICh4LCB5KVxue1xuICAgIGlmICh0aGlzLnJhZGl1cyA8PSAwKVxuICAgIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHZhciBkeCA9ICh0aGlzLnggLSB4KSxcbiAgICAgICAgZHkgPSAodGhpcy55IC0geSksXG4gICAgICAgIHIyID0gdGhpcy5yYWRpdXMgKiB0aGlzLnJhZGl1cztcblxuICAgIGR4ICo9IGR4O1xuICAgIGR5ICo9IGR5O1xuXG4gICAgcmV0dXJuIChkeCArIGR5IDw9IHIyKTtcbn07XG5cbi8qKlxuKiBSZXR1cm5zIHRoZSBmcmFtaW5nIHJlY3RhbmdsZSBvZiB0aGUgY2lyY2xlIGFzIGEgUmVjdGFuZ2xlIG9iamVjdFxuKlxuKiBAcmV0dXJuIHtQSVhJLlJlY3RhbmdsZX0gdGhlIGZyYW1pbmcgcmVjdGFuZ2xlXG4qL1xuQ2lyY2xlLnByb3RvdHlwZS5nZXRCb3VuZHMgPSBmdW5jdGlvbiAoKVxue1xuICAgIHJldHVybiBuZXcgUmVjdGFuZ2xlKHRoaXMueCAtIHRoaXMucmFkaXVzLCB0aGlzLnkgLSB0aGlzLnJhZGl1cywgdGhpcy5yYWRpdXMgKiAyLCB0aGlzLnJhZGl1cyAqIDIpO1xufTtcbiIsInZhciBSZWN0YW5nbGUgPSByZXF1aXJlKCcuL1JlY3RhbmdsZScpLFxuICAgIENPTlNUID0gcmVxdWlyZSgnLi4vLi4vY29uc3QnKTtcblxuLyoqXG4gKiBUaGUgRWxsaXBzZSBvYmplY3QgY2FuIGJlIHVzZWQgdG8gc3BlY2lmeSBhIGhpdCBhcmVhIGZvciBkaXNwbGF5T2JqZWN0c1xuICpcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqIEBwYXJhbSB4IHtudW1iZXJ9IFRoZSBYIGNvb3JkaW5hdGUgb2YgdGhlIGNlbnRlciBvZiB0aGUgZWxsaXBzZVxuICogQHBhcmFtIHkge251bWJlcn0gVGhlIFkgY29vcmRpbmF0ZSBvZiB0aGUgY2VudGVyIG9mIHRoZSBlbGxpcHNlXG4gKiBAcGFyYW0gd2lkdGgge251bWJlcn0gVGhlIGhhbGYgd2lkdGggb2YgdGhpcyBlbGxpcHNlXG4gKiBAcGFyYW0gaGVpZ2h0IHtudW1iZXJ9IFRoZSBoYWxmIGhlaWdodCBvZiB0aGlzIGVsbGlwc2VcbiAqL1xuZnVuY3Rpb24gRWxsaXBzZSh4LCB5LCB3aWR0aCwgaGVpZ2h0KVxue1xuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAwXG4gICAgICovXG4gICAgdGhpcy54ID0geCB8fCAwO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDBcbiAgICAgKi9cbiAgICB0aGlzLnkgPSB5IHx8IDA7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMFxuICAgICAqL1xuICAgIHRoaXMud2lkdGggPSB3aWR0aCB8fCAwO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDBcbiAgICAgKi9cbiAgICB0aGlzLmhlaWdodCA9IGhlaWdodCB8fCAwO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHR5cGUgb2YgdGhlIG9iamVjdCwgbWFpbmx5IHVzZWQgdG8gYXZvaWQgYGluc3RhbmNlb2ZgIGNoZWNrc1xuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMudHlwZSA9IENPTlNULlNIQVBFUy5FTElQO1xufVxuXG5FbGxpcHNlLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IEVsbGlwc2U7XG5tb2R1bGUuZXhwb3J0cyA9IEVsbGlwc2U7XG5cbi8qKlxuICogQ3JlYXRlcyBhIGNsb25lIG9mIHRoaXMgRWxsaXBzZSBpbnN0YW5jZVxuICpcbiAqIEByZXR1cm4ge1BJWEkuRWxsaXBzZX0gYSBjb3B5IG9mIHRoZSBlbGxpcHNlXG4gKi9cbkVsbGlwc2UucHJvdG90eXBlLmNsb25lID0gZnVuY3Rpb24gKClcbntcbiAgICByZXR1cm4gbmV3IEVsbGlwc2UodGhpcy54LCB0aGlzLnksIHRoaXMud2lkdGgsIHRoaXMuaGVpZ2h0KTtcbn07XG5cbi8qKlxuICogQ2hlY2tzIHdoZXRoZXIgdGhlIHggYW5kIHkgY29vcmRpbmF0ZXMgZ2l2ZW4gYXJlIGNvbnRhaW5lZCB3aXRoaW4gdGhpcyBlbGxpcHNlXG4gKlxuICogQHBhcmFtIHgge251bWJlcn0gVGhlIFggY29vcmRpbmF0ZSBvZiB0aGUgcG9pbnQgdG8gdGVzdFxuICogQHBhcmFtIHkge251bWJlcn0gVGhlIFkgY29vcmRpbmF0ZSBvZiB0aGUgcG9pbnQgdG8gdGVzdFxuICogQHJldHVybiB7Ym9vbGVhbn0gV2hldGhlciB0aGUgeC95IGNvb3JkcyBhcmUgd2l0aGluIHRoaXMgZWxsaXBzZVxuICovXG5FbGxpcHNlLnByb3RvdHlwZS5jb250YWlucyA9IGZ1bmN0aW9uICh4LCB5KVxue1xuICAgIGlmICh0aGlzLndpZHRoIDw9IDAgfHwgdGhpcy5oZWlnaHQgPD0gMClcbiAgICB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICAvL25vcm1hbGl6ZSB0aGUgY29vcmRzIHRvIGFuIGVsbGlwc2Ugd2l0aCBjZW50ZXIgMCwwXG4gICAgdmFyIG5vcm14ID0gKCh4IC0gdGhpcy54KSAvIHRoaXMud2lkdGgpLFxuICAgICAgICBub3JteSA9ICgoeSAtIHRoaXMueSkgLyB0aGlzLmhlaWdodCk7XG5cbiAgICBub3JteCAqPSBub3JteDtcbiAgICBub3JteSAqPSBub3JteTtcblxuICAgIHJldHVybiAobm9ybXggKyBub3JteSA8PSAxKTtcbn07XG5cbi8qKlxuICogUmV0dXJucyB0aGUgZnJhbWluZyByZWN0YW5nbGUgb2YgdGhlIGVsbGlwc2UgYXMgYSBSZWN0YW5nbGUgb2JqZWN0XG4gKlxuICogQHJldHVybiB7UElYSS5SZWN0YW5nbGV9IHRoZSBmcmFtaW5nIHJlY3RhbmdsZVxuICovXG5FbGxpcHNlLnByb3RvdHlwZS5nZXRCb3VuZHMgPSBmdW5jdGlvbiAoKVxue1xuICAgIHJldHVybiBuZXcgUmVjdGFuZ2xlKHRoaXMueCAtIHRoaXMud2lkdGgsIHRoaXMueSAtIHRoaXMuaGVpZ2h0LCB0aGlzLndpZHRoLCB0aGlzLmhlaWdodCk7XG59O1xuIiwidmFyIFBvaW50ID0gcmVxdWlyZSgnLi4vUG9pbnQnKSxcbiAgICBDT05TVCA9IHJlcXVpcmUoJy4uLy4uL2NvbnN0Jyk7XG5cbi8qKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIHBvaW50cyB7UElYSS5Qb2ludFtdfG51bWJlcltdfC4uLlBJWEkuUG9pbnR8Li4ubnVtYmVyfSBUaGlzIGNhbiBiZSBhbiBhcnJheSBvZiBQb2ludHMgdGhhdCBmb3JtIHRoZSBwb2x5Z29uLFxuICogICAgICBhIGZsYXQgYXJyYXkgb2YgbnVtYmVycyB0aGF0IHdpbGwgYmUgaW50ZXJwcmV0ZWQgYXMgW3gseSwgeCx5LCAuLi5dLCBvciB0aGUgYXJndW1lbnRzIHBhc3NlZCBjYW4gYmVcbiAqICAgICAgYWxsIHRoZSBwb2ludHMgb2YgdGhlIHBvbHlnb24gZS5nLiBgbmV3IFBJWEkuUG9seWdvbihuZXcgUElYSS5Qb2ludCgpLCBuZXcgUElYSS5Qb2ludCgpLCAuLi4pYCwgb3IgdGhlXG4gKiAgICAgIGFyZ3VtZW50cyBwYXNzZWQgY2FuIGJlIGZsYXQgeCx5IHZhbHVlcyBlLmcuIGBuZXcgUG9seWdvbih4LHksIHgseSwgeCx5LCAuLi4pYCB3aGVyZSBgeGAgYW5kIGB5YCBhcmVcbiAqICAgICAgTnVtYmVycy5cbiAqL1xuZnVuY3Rpb24gUG9seWdvbihwb2ludHNfKVxue1xuICAgIC8vIHByZXZlbnRzIGFuIGFyZ3VtZW50IGFzc2lnbm1lbnQgZGVvcHRcbiAgICAvLyBzZWUgc2VjdGlvbiAzLjE6IGh0dHBzOi8vZ2l0aHViLmNvbS9wZXRrYWFudG9ub3YvYmx1ZWJpcmQvd2lraS9PcHRpbWl6YXRpb24ta2lsbGVycyMzLW1hbmFnaW5nLWFyZ3VtZW50c1xuICAgIHZhciBwb2ludHMgPSBwb2ludHNfO1xuXG4gICAgLy9pZiBwb2ludHMgaXNuJ3QgYW4gYXJyYXksIHVzZSBhcmd1bWVudHMgYXMgdGhlIGFycmF5XG4gICAgaWYgKCFBcnJheS5pc0FycmF5KHBvaW50cykpXG4gICAge1xuICAgICAgICAvLyBwcmV2ZW50cyBhbiBhcmd1bWVudCBsZWFrIGRlb3B0XG4gICAgICAgIC8vIHNlZSBzZWN0aW9uIDMuMjogaHR0cHM6Ly9naXRodWIuY29tL3BldGthYW50b25vdi9ibHVlYmlyZC93aWtpL09wdGltaXphdGlvbi1raWxsZXJzIzMtbWFuYWdpbmctYXJndW1lbnRzXG4gICAgICAgIHBvaW50cyA9IG5ldyBBcnJheShhcmd1bWVudHMubGVuZ3RoKTtcblxuICAgICAgICBmb3IgKHZhciBhID0gMDsgYSA8IHBvaW50cy5sZW5ndGg7ICsrYSkge1xuICAgICAgICAgICAgcG9pbnRzW2FdID0gYXJndW1lbnRzW2FdO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gaWYgdGhpcyBpcyBhbiBhcnJheSBvZiBwb2ludHMsIGNvbnZlcnQgaXQgdG8gYSBmbGF0IGFycmF5IG9mIG51bWJlcnNcbiAgICBpZiAocG9pbnRzWzBdIGluc3RhbmNlb2YgUG9pbnQpXG4gICAge1xuICAgICAgICB2YXIgcCA9IFtdO1xuICAgICAgICBmb3IgKHZhciBpID0gMCwgaWwgPSBwb2ludHMubGVuZ3RoOyBpIDwgaWw7IGkrKylcbiAgICAgICAge1xuICAgICAgICAgICAgcC5wdXNoKHBvaW50c1tpXS54LCBwb2ludHNbaV0ueSk7XG4gICAgICAgIH1cblxuICAgICAgICBwb2ludHMgPSBwO1xuICAgIH1cblxuICAgIHRoaXMuY2xvc2VkID0gdHJ1ZTtcblxuICAgIC8qKlxuICAgICAqIEFuIGFycmF5IG9mIHRoZSBwb2ludHMgb2YgdGhpcyBwb2x5Z29uXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJbXX1cbiAgICAgKi9cbiAgICB0aGlzLnBvaW50cyA9IHBvaW50cztcblxuICAgIC8qKlxuICAgICAqIFRoZSB0eXBlIG9mIHRoZSBvYmplY3QsIG1haW5seSB1c2VkIHRvIGF2b2lkIGBpbnN0YW5jZW9mYCBjaGVja3NcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLnR5cGUgPSBDT05TVC5TSEFQRVMuUE9MWTtcbn1cblxuUG9seWdvbi5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBQb2x5Z29uO1xubW9kdWxlLmV4cG9ydHMgPSBQb2x5Z29uO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBjbG9uZSBvZiB0aGlzIHBvbHlnb25cbiAqXG4gKiBAcmV0dXJuIHtQSVhJLlBvbHlnb259IGEgY29weSBvZiB0aGUgcG9seWdvblxuICovXG5Qb2x5Z29uLnByb3RvdHlwZS5jbG9uZSA9IGZ1bmN0aW9uICgpXG57XG4gICAgcmV0dXJuIG5ldyBQb2x5Z29uKHRoaXMucG9pbnRzLnNsaWNlKCkpO1xufTtcblxuLyoqXG4gKiBDaGVja3Mgd2hldGhlciB0aGUgeCBhbmQgeSBjb29yZGluYXRlcyBwYXNzZWQgdG8gdGhpcyBmdW5jdGlvbiBhcmUgY29udGFpbmVkIHdpdGhpbiB0aGlzIHBvbHlnb25cbiAqXG4gKiBAcGFyYW0geCB7bnVtYmVyfSBUaGUgWCBjb29yZGluYXRlIG9mIHRoZSBwb2ludCB0byB0ZXN0XG4gKiBAcGFyYW0geSB7bnVtYmVyfSBUaGUgWSBjb29yZGluYXRlIG9mIHRoZSBwb2ludCB0byB0ZXN0XG4gKiBAcmV0dXJuIHtib29sZWFufSBXaGV0aGVyIHRoZSB4L3kgY29vcmRpbmF0ZXMgYXJlIHdpdGhpbiB0aGlzIHBvbHlnb25cbiAqL1xuUG9seWdvbi5wcm90b3R5cGUuY29udGFpbnMgPSBmdW5jdGlvbiAoeCwgeSlcbntcbiAgICB2YXIgaW5zaWRlID0gZmFsc2U7XG5cbiAgICAvLyB1c2Ugc29tZSByYXljYXN0aW5nIHRvIHRlc3QgaGl0c1xuICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9zdWJzdGFjay9wb2ludC1pbi1wb2x5Z29uL2Jsb2IvbWFzdGVyL2luZGV4LmpzXG4gICAgdmFyIGxlbmd0aCA9IHRoaXMucG9pbnRzLmxlbmd0aCAvIDI7XG5cbiAgICBmb3IgKHZhciBpID0gMCwgaiA9IGxlbmd0aCAtIDE7IGkgPCBsZW5ndGg7IGogPSBpKyspXG4gICAge1xuICAgICAgICB2YXIgeGkgPSB0aGlzLnBvaW50c1tpICogMl0sIHlpID0gdGhpcy5wb2ludHNbaSAqIDIgKyAxXSxcbiAgICAgICAgICAgIHhqID0gdGhpcy5wb2ludHNbaiAqIDJdLCB5aiA9IHRoaXMucG9pbnRzW2ogKiAyICsgMV0sXG4gICAgICAgICAgICBpbnRlcnNlY3QgPSAoKHlpID4geSkgIT09ICh5aiA+IHkpKSAmJiAoeCA8ICh4aiAtIHhpKSAqICh5IC0geWkpIC8gKHlqIC0geWkpICsgeGkpO1xuXG4gICAgICAgIGlmIChpbnRlcnNlY3QpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGluc2lkZSA9ICFpbnNpZGU7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gaW5zaWRlO1xufTtcbiIsInZhciBDT05TVCA9IHJlcXVpcmUoJy4uLy4uL2NvbnN0Jyk7XG5cbi8qKlxuICogdGhlIFJlY3RhbmdsZSBvYmplY3QgaXMgYW4gYXJlYSBkZWZpbmVkIGJ5IGl0cyBwb3NpdGlvbiwgYXMgaW5kaWNhdGVkIGJ5IGl0cyB0b3AtbGVmdCBjb3JuZXIgcG9pbnQgKHgsIHkpIGFuZCBieSBpdHMgd2lkdGggYW5kIGl0cyBoZWlnaHQuXG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIHgge251bWJlcn0gVGhlIFggY29vcmRpbmF0ZSBvZiB0aGUgdXBwZXItbGVmdCBjb3JuZXIgb2YgdGhlIHJlY3RhbmdsZVxuICogQHBhcmFtIHkge251bWJlcn0gVGhlIFkgY29vcmRpbmF0ZSBvZiB0aGUgdXBwZXItbGVmdCBjb3JuZXIgb2YgdGhlIHJlY3RhbmdsZVxuICogQHBhcmFtIHdpZHRoIHtudW1iZXJ9IFRoZSBvdmVyYWxsIHdpZHRoIG9mIHRoaXMgcmVjdGFuZ2xlXG4gKiBAcGFyYW0gaGVpZ2h0IHtudW1iZXJ9IFRoZSBvdmVyYWxsIGhlaWdodCBvZiB0aGlzIHJlY3RhbmdsZVxuICovXG5mdW5jdGlvbiBSZWN0YW5nbGUoeCwgeSwgd2lkdGgsIGhlaWdodClcbntcbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMFxuICAgICAqL1xuICAgIHRoaXMueCA9IHggfHwgMDtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAwXG4gICAgICovXG4gICAgdGhpcy55ID0geSB8fCAwO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDBcbiAgICAgKi9cbiAgICB0aGlzLndpZHRoID0gd2lkdGggfHwgMDtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAwXG4gICAgICovXG4gICAgdGhpcy5oZWlnaHQgPSBoZWlnaHQgfHwgMDtcblxuICAgIC8qKlxuICAgICAqIFRoZSB0eXBlIG9mIHRoZSBvYmplY3QsIG1haW5seSB1c2VkIHRvIGF2b2lkIGBpbnN0YW5jZW9mYCBjaGVja3NcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLnR5cGUgPSBDT05TVC5TSEFQRVMuUkVDVDtcbn1cblxuUmVjdGFuZ2xlLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFJlY3RhbmdsZTtcbm1vZHVsZS5leHBvcnRzID0gUmVjdGFuZ2xlO1xuXG4vKipcbiAqIEEgY29uc3RhbnQgZW1wdHkgcmVjdGFuZ2xlLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBjb25zdGFudFxuICovXG5SZWN0YW5nbGUuRU1QVFkgPSBuZXcgUmVjdGFuZ2xlKDAsIDAsIDAsIDApO1xuXG5cbi8qKlxuICogQ3JlYXRlcyBhIGNsb25lIG9mIHRoaXMgUmVjdGFuZ2xlXG4gKlxuICogQHJldHVybiB7UElYSS5SZWN0YW5nbGV9IGEgY29weSBvZiB0aGUgcmVjdGFuZ2xlXG4gKi9cblJlY3RhbmdsZS5wcm90b3R5cGUuY2xvbmUgPSBmdW5jdGlvbiAoKVxue1xuICAgIHJldHVybiBuZXcgUmVjdGFuZ2xlKHRoaXMueCwgdGhpcy55LCB0aGlzLndpZHRoLCB0aGlzLmhlaWdodCk7XG59O1xuXG4vKipcbiAqIENoZWNrcyB3aGV0aGVyIHRoZSB4IGFuZCB5IGNvb3JkaW5hdGVzIGdpdmVuIGFyZSBjb250YWluZWQgd2l0aGluIHRoaXMgUmVjdGFuZ2xlXG4gKlxuICogQHBhcmFtIHgge251bWJlcn0gVGhlIFggY29vcmRpbmF0ZSBvZiB0aGUgcG9pbnQgdG8gdGVzdFxuICogQHBhcmFtIHkge251bWJlcn0gVGhlIFkgY29vcmRpbmF0ZSBvZiB0aGUgcG9pbnQgdG8gdGVzdFxuICogQHJldHVybiB7Ym9vbGVhbn0gV2hldGhlciB0aGUgeC95IGNvb3JkaW5hdGVzIGFyZSB3aXRoaW4gdGhpcyBSZWN0YW5nbGVcbiAqL1xuUmVjdGFuZ2xlLnByb3RvdHlwZS5jb250YWlucyA9IGZ1bmN0aW9uICh4LCB5KVxue1xuICAgIGlmICh0aGlzLndpZHRoIDw9IDAgfHwgdGhpcy5oZWlnaHQgPD0gMClcbiAgICB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBpZiAoeCA+PSB0aGlzLnggJiYgeCA8IHRoaXMueCArIHRoaXMud2lkdGgpXG4gICAge1xuICAgICAgICBpZiAoeSA+PSB0aGlzLnkgJiYgeSA8IHRoaXMueSArIHRoaXMuaGVpZ2h0KVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBmYWxzZTtcbn07XG4iLCJ2YXIgQ09OU1QgPSByZXF1aXJlKCcuLi8uLi9jb25zdCcpO1xuXG4vKipcbiAqIFRoZSBSb3VuZGVkIFJlY3RhbmdsZSBvYmplY3QgaXMgYW4gYXJlYSB0aGF0IGhhcyBuaWNlIHJvdW5kZWQgY29ybmVycywgYXMgaW5kaWNhdGVkIGJ5IGl0cyB0b3AtbGVmdCBjb3JuZXIgcG9pbnQgKHgsIHkpIGFuZCBieSBpdHMgd2lkdGggYW5kIGl0cyBoZWlnaHQgYW5kIGl0cyByYWRpdXMuXG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIHgge251bWJlcn0gVGhlIFggY29vcmRpbmF0ZSBvZiB0aGUgdXBwZXItbGVmdCBjb3JuZXIgb2YgdGhlIHJvdW5kZWQgcmVjdGFuZ2xlXG4gKiBAcGFyYW0geSB7bnVtYmVyfSBUaGUgWSBjb29yZGluYXRlIG9mIHRoZSB1cHBlci1sZWZ0IGNvcm5lciBvZiB0aGUgcm91bmRlZCByZWN0YW5nbGVcbiAqIEBwYXJhbSB3aWR0aCB7bnVtYmVyfSBUaGUgb3ZlcmFsbCB3aWR0aCBvZiB0aGlzIHJvdW5kZWQgcmVjdGFuZ2xlXG4gKiBAcGFyYW0gaGVpZ2h0IHtudW1iZXJ9IFRoZSBvdmVyYWxsIGhlaWdodCBvZiB0aGlzIHJvdW5kZWQgcmVjdGFuZ2xlXG4gKiBAcGFyYW0gcmFkaXVzIHtudW1iZXJ9IENvbnRyb2xzIHRoZSByYWRpdXMgb2YgdGhlIHJvdW5kZWQgY29ybmVyc1xuICovXG5mdW5jdGlvbiBSb3VuZGVkUmVjdGFuZ2xlKHgsIHksIHdpZHRoLCBoZWlnaHQsIHJhZGl1cylcbntcbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMFxuICAgICAqL1xuICAgIHRoaXMueCA9IHggfHwgMDtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAwXG4gICAgICovXG4gICAgdGhpcy55ID0geSB8fCAwO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDBcbiAgICAgKi9cbiAgICB0aGlzLndpZHRoID0gd2lkdGggfHwgMDtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAwXG4gICAgICovXG4gICAgdGhpcy5oZWlnaHQgPSBoZWlnaHQgfHwgMDtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAyMFxuICAgICAqL1xuICAgIHRoaXMucmFkaXVzID0gcmFkaXVzIHx8IDIwO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHR5cGUgb2YgdGhlIG9iamVjdCwgbWFpbmx5IHVzZWQgdG8gYXZvaWQgYGluc3RhbmNlb2ZgIGNoZWNrc1xuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMudHlwZSA9IENPTlNULlNIQVBFUy5SUkVDO1xufVxuXG5Sb3VuZGVkUmVjdGFuZ2xlLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFJvdW5kZWRSZWN0YW5nbGU7XG5tb2R1bGUuZXhwb3J0cyA9IFJvdW5kZWRSZWN0YW5nbGU7XG5cbi8qKlxuICogQ3JlYXRlcyBhIGNsb25lIG9mIHRoaXMgUm91bmRlZCBSZWN0YW5nbGVcbiAqXG4gKiBAcmV0dXJuIHtQSVhJLlJvdW5kZWRSZWN0YW5nbGV9IGEgY29weSBvZiB0aGUgcm91bmRlZCByZWN0YW5nbGVcbiAqL1xuUm91bmRlZFJlY3RhbmdsZS5wcm90b3R5cGUuY2xvbmUgPSBmdW5jdGlvbiAoKVxue1xuICAgIHJldHVybiBuZXcgUm91bmRlZFJlY3RhbmdsZSh0aGlzLngsIHRoaXMueSwgdGhpcy53aWR0aCwgdGhpcy5oZWlnaHQsIHRoaXMucmFkaXVzKTtcbn07XG5cbi8qKlxuICogQ2hlY2tzIHdoZXRoZXIgdGhlIHggYW5kIHkgY29vcmRpbmF0ZXMgZ2l2ZW4gYXJlIGNvbnRhaW5lZCB3aXRoaW4gdGhpcyBSb3VuZGVkIFJlY3RhbmdsZVxuICpcbiAqIEBwYXJhbSB4IHtudW1iZXJ9IFRoZSBYIGNvb3JkaW5hdGUgb2YgdGhlIHBvaW50IHRvIHRlc3RcbiAqIEBwYXJhbSB5IHtudW1iZXJ9IFRoZSBZIGNvb3JkaW5hdGUgb2YgdGhlIHBvaW50IHRvIHRlc3RcbiAqIEByZXR1cm4ge2Jvb2xlYW59IFdoZXRoZXIgdGhlIHgveSBjb29yZGluYXRlcyBhcmUgd2l0aGluIHRoaXMgUm91bmRlZCBSZWN0YW5nbGVcbiAqL1xuUm91bmRlZFJlY3RhbmdsZS5wcm90b3R5cGUuY29udGFpbnMgPSBmdW5jdGlvbiAoeCwgeSlcbntcbiAgICBpZiAodGhpcy53aWR0aCA8PSAwIHx8IHRoaXMuaGVpZ2h0IDw9IDApXG4gICAge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgaWYgKHggPj0gdGhpcy54ICYmIHggPD0gdGhpcy54ICsgdGhpcy53aWR0aClcbiAgICB7XG4gICAgICAgIGlmICh5ID49IHRoaXMueSAmJiB5IDw9IHRoaXMueSArIHRoaXMuaGVpZ2h0KVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBmYWxzZTtcbn07XG4iLCJ2YXIgQ29udGFpbmVyID0gcmVxdWlyZSgnLi4vZGlzcGxheS9Db250YWluZXInKSxcbiAgICBDT05TVCA9IHJlcXVpcmUoJy4uL2NvbnN0Jyk7XG5cbi8qKlxuICogVGhlIFBhcnRpY2xlQ29udGFpbmVyIGNsYXNzIGlzIGEgcmVhbGx5IGZhc3QgdmVyc2lvbiBvZiB0aGUgQ29udGFpbmVyIGJ1aWx0IHNvbGVseSBmb3Igc3BlZWQsXG4gKiBzbyB1c2Ugd2hlbiB5b3UgbmVlZCBhIGxvdCBvZiBzcHJpdGVzIG9yIHBhcnRpY2xlcy4gVGhlIHRyYWRlb2ZmIG9mIHRoZSBQYXJ0aWNsZUNvbnRhaW5lciBpcyB0aGF0IGFkdmFuY2VkXG4gKiBmdW5jdGlvbmFsaXR5IHdpbGwgbm90IHdvcmsuIFBhcnRpY2xlQ29udGFpbmVyIGltcGxlbWVudHMgb25seSB0aGUgYmFzaWMgb2JqZWN0IHRyYW5zZm9ybSAocG9zaXRpb24sIHNjYWxlLCByb3RhdGlvbikuXG4gKiBBbnkgb3RoZXIgZnVuY3Rpb25hbGl0eSBsaWtlIHRpbnRpbmcsIG1hc2tpbmcsIGV0YyB3aWxsIG5vdCB3b3JrIG9uIHNwcml0ZXMgaW4gdGhpcyBiYXRjaC5cbiAqXG4gKiBJdCdzIGV4dHJlbWVseSBlYXN5IHRvIHVzZSA6XG4gKlxuICogYGBganNcbiAqIHZhciBjb250YWluZXIgPSBuZXcgUGFydGljbGVDb250YWluZXIoKTtcbiAqXG4gKiBmb3IgKHZhciBpID0gMDsgaSA8IDEwMDsgKytpKVxuICoge1xuICogICAgIHZhciBzcHJpdGUgPSBuZXcgUElYSS5TcHJpdGUuZnJvbUltYWdlKFwibXlJbWFnZS5wbmdcIik7XG4gKiAgICAgY29udGFpbmVyLmFkZENoaWxkKHNwcml0ZSk7XG4gKiB9XG4gKiBgYGBcbiAqXG4gKiBBbmQgaGVyZSB5b3UgaGF2ZSBhIGh1bmRyZWQgc3ByaXRlcyB0aGF0IHdpbGwgYmUgcmVuZGVyZXIgYXQgdGhlIHNwZWVkIG9mIGxpZ2h0LlxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5Db250YWluZXJcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gW21heFNpemU9MTUwMDBdIHtudW1iZXJ9IFRoZSBtYXhpbXVtIG51bWJlciBvZiBwYXJ0aWNsZXMgdGhhdCBjYW4gYmUgcmVuZGVyZXIgYnkgdGhlIGNvbnRhaW5lci5cbiAqIEBwYXJhbSBbcHJvcGVydGllc10ge29iamVjdH0gVGhlIHByb3BlcnRpZXMgb2YgY2hpbGRyZW4gdGhhdCBzaG91bGQgYmUgdXBsb2FkZWQgdG8gdGhlIGdwdSBhbmQgYXBwbGllZC5cbiAqIEBwYXJhbSBbcHJvcGVydGllcy5zY2FsZT1mYWxzZV0ge2Jvb2xlYW59IFdoZW4gdHJ1ZSwgc2NhbGUgYmUgdXBsb2FkZWQgYW5kIGFwcGxpZWQuXG4gKiBAcGFyYW0gW3Byb3BlcnRpZXMucG9zaXRpb249dHJ1ZV0ge2Jvb2xlYW59IFdoZW4gdHJ1ZSwgcG9zaXRpb24gYmUgdXBsb2FkZWQgYW5kIGFwcGxpZWQuXG4gKiBAcGFyYW0gW3Byb3BlcnRpZXMucm90YXRpb249ZmFsc2VdIHtib29sZWFufSBXaGVuIHRydWUsIHJvdGF0aW9uIGJlIHVwbG9hZGVkIGFuZCBhcHBsaWVkLlxuICogQHBhcmFtIFtwcm9wZXJ0aWVzLnV2cz1mYWxzZV0ge2Jvb2xlYW59IFdoZW4gdHJ1ZSwgdXZzIGJlIHVwbG9hZGVkIGFuZCBhcHBsaWVkLlxuICogQHBhcmFtIFtwcm9wZXJ0aWVzLmFscGhhPWZhbHNlXSB7Ym9vbGVhbn0gV2hlbiB0cnVlLCBhbHBoYSBiZSB1cGxvYWRlZCBhbmQgYXBwbGllZC5cbiAqIEBwYXJhbSBbYmF0Y2hTaXplPTE1MDAwXSB7bnVtYmVyfSBOdW1iZXIgb2YgcGFydGljbGVzIHBlciBiYXRjaC5cbiAqL1xuZnVuY3Rpb24gUGFydGljbGVDb250YWluZXIobWF4U2l6ZSwgcHJvcGVydGllcywgYmF0Y2hTaXplKVxue1xuICAgIENvbnRhaW5lci5jYWxsKHRoaXMpO1xuXG4gICAgYmF0Y2hTaXplID0gYmF0Y2hTaXplIHx8IDE1MDAwOyAvL0NPTlNULlNQUklURV9CQVRDSF9TSVpFOyAvLyAyMDAwIGlzIGEgbmljZSBiYWxhbmNlIGJldHdlZW4gbW9iaWxlIC8gZGVza3RvcFxuICAgIG1heFNpemUgPSBtYXhTaXplIHx8IDE1MDAwO1xuXG4gICAgLy8gTWFraW5nIHN1cmUgdGhlIGJhdGNoIHNpemUgaXMgdmFsaWRcbiAgICAvLyA2NTUzNSBpcyBtYXggdmVydGV4IGluZGV4IGluIHRoZSBpbmRleCBidWZmZXIgKHNlZSBQYXJ0aWNsZVJlbmRlcmVyKVxuICAgIC8vIHNvIG1heCBudW1iZXIgb2YgcGFydGljbGVzIGlzIDY1NTM2IC8gNCA9IDE2Mzg0XG4gICAgdmFyIG1heEJhdGNoU2l6ZSA9IDE2Mzg0O1xuICAgIGlmIChiYXRjaFNpemUgPiBtYXhCYXRjaFNpemUpIHtcbiAgICAgICAgYmF0Y2hTaXplID0gbWF4QmF0Y2hTaXplO1xuICAgIH1cblxuICAgIGlmIChiYXRjaFNpemUgPiBtYXhTaXplKSB7XG4gICAgICAgIGJhdGNoU2l6ZSA9IG1heFNpemU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2V0IHByb3BlcnRpZXMgdG8gYmUgZHluYW1pYyAodHJ1ZSkgLyBzdGF0aWMgKGZhbHNlKVxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbltdfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fcHJvcGVydGllcyA9IFtmYWxzZSwgdHJ1ZSwgZmFsc2UsIGZhbHNlLCBmYWxzZV07XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9tYXhTaXplID0gbWF4U2l6ZTtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX2JhdGNoU2l6ZSA9IGJhdGNoU2l6ZTtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge1dlYkdMQnVmZmVyfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fYnVmZmVycyA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9idWZmZXJUb1VwZGF0ZSA9IDA7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqXG4gICAgICovXG4gICAgdGhpcy5pbnRlcmFjdGl2ZUNoaWxkcmVuID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYmxlbmQgbW9kZSB0byBiZSBhcHBsaWVkIHRvIHRoZSBzcHJpdGUuIEFwcGx5IGEgdmFsdWUgb2YgYFBJWEkuQkxFTkRfTU9ERVMuTk9STUFMYCB0byByZXNldCB0aGUgYmxlbmQgbW9kZS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCBQSVhJLkJMRU5EX01PREVTLk5PUk1BTFxuICAgICAqIEBzZWUgUElYSS5CTEVORF9NT0RFU1xuICAgICAqL1xuICAgIHRoaXMuYmxlbmRNb2RlID0gQ09OU1QuQkxFTkRfTU9ERVMuTk9STUFMO1xuXG4gICAgLyoqXG4gICAgICogVXNlZCBmb3IgY2FudmFzIHJlbmRlcmVyaW5nLiBJZiB0cnVlIHRoZW4gdGhlIGVsZW1lbnRzIHdpbGwgYmUgcG9zaXRpb25lZCBhdCB0aGUgbmVhcmVzdCBwaXhlbC4gVGhpcyBwcm92aWRlcyBhIG5pY2Ugc3BlZWQgYm9vc3QuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqIEBkZWZhdWx0IHRydWU7XG4gICAgICovXG4gICAgdGhpcy5yb3VuZFBpeGVscyA9IHRydWU7XG5cbiAgICB0aGlzLnNldFByb3BlcnRpZXMocHJvcGVydGllcyk7XG59XG5cblBhcnRpY2xlQ29udGFpbmVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoQ29udGFpbmVyLnByb3RvdHlwZSk7XG5QYXJ0aWNsZUNvbnRhaW5lci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBQYXJ0aWNsZUNvbnRhaW5lcjtcbm1vZHVsZS5leHBvcnRzID0gUGFydGljbGVDb250YWluZXI7XG5cbi8qKlxuICogU2V0cyB0aGUgcHJpdmF0ZSBwcm9wZXJ0aWVzIGFycmF5IHRvIGR5bmFtaWMgLyBzdGF0aWMgYmFzZWQgb24gdGhlIHBhc3NlZCBwcm9wZXJ0aWVzIG9iamVjdFxuICpcbiAqIEBwYXJhbSBwcm9wZXJ0aWVzIHtvYmplY3R9IFRoZSBwcm9wZXJ0aWVzIHRvIGJlIHVwbG9hZGVkXG4gKi9cblBhcnRpY2xlQ29udGFpbmVyLnByb3RvdHlwZS5zZXRQcm9wZXJ0aWVzID0gZnVuY3Rpb24ocHJvcGVydGllcylcbntcbiAgICBpZiAoIHByb3BlcnRpZXMgKSB7XG4gICAgICAgIHRoaXMuX3Byb3BlcnRpZXNbMF0gPSAnc2NhbGUnIGluIHByb3BlcnRpZXMgPyAhIXByb3BlcnRpZXMuc2NhbGUgOiB0aGlzLl9wcm9wZXJ0aWVzWzBdO1xuICAgICAgICB0aGlzLl9wcm9wZXJ0aWVzWzFdID0gJ3Bvc2l0aW9uJyBpbiBwcm9wZXJ0aWVzID8gISFwcm9wZXJ0aWVzLnBvc2l0aW9uIDogdGhpcy5fcHJvcGVydGllc1sxXTtcbiAgICAgICAgdGhpcy5fcHJvcGVydGllc1syXSA9ICdyb3RhdGlvbicgaW4gcHJvcGVydGllcyA/ICEhcHJvcGVydGllcy5yb3RhdGlvbiA6IHRoaXMuX3Byb3BlcnRpZXNbMl07XG4gICAgICAgIHRoaXMuX3Byb3BlcnRpZXNbM10gPSAndXZzJyBpbiBwcm9wZXJ0aWVzID8gISFwcm9wZXJ0aWVzLnV2cyA6IHRoaXMuX3Byb3BlcnRpZXNbM107XG4gICAgICAgIHRoaXMuX3Byb3BlcnRpZXNbNF0gPSAnYWxwaGEnIGluIHByb3BlcnRpZXMgPyAhIXByb3BlcnRpZXMuYWxwaGEgOiB0aGlzLl9wcm9wZXJ0aWVzWzRdO1xuICAgIH1cbn07XG5cbi8qKlxuICogVXBkYXRlcyB0aGUgb2JqZWN0IHRyYW5zZm9ybSBmb3IgcmVuZGVyaW5nXG4gKlxuICogQHByaXZhdGVcbiAqL1xuUGFydGljbGVDb250YWluZXIucHJvdG90eXBlLnVwZGF0ZVRyYW5zZm9ybSA9IGZ1bmN0aW9uICgpXG57XG5cbiAgICAvLyBUT0RPIGRvbid0IG5lZWQgdG8hXG4gICAgdGhpcy5kaXNwbGF5T2JqZWN0VXBkYXRlVHJhbnNmb3JtKCk7XG4gICAgLy8gIFBJWEkuQ29udGFpbmVyLnByb3RvdHlwZS51cGRhdGVUcmFuc2Zvcm0uY2FsbCggdGhpcyApO1xufTtcblxuLyoqXG4gKiBSZW5kZXJzIHRoZSBjb250YWluZXIgdXNpbmcgdGhlIFdlYkdMIHJlbmRlcmVyXG4gKlxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLldlYkdMUmVuZGVyZXJ9IFRoZSB3ZWJnbCByZW5kZXJlclxuICogQHByaXZhdGVcbiAqL1xuUGFydGljbGVDb250YWluZXIucHJvdG90eXBlLnJlbmRlcldlYkdMID0gZnVuY3Rpb24gKHJlbmRlcmVyKVxue1xuICAgIGlmICghdGhpcy52aXNpYmxlIHx8IHRoaXMud29ybGRBbHBoYSA8PSAwIHx8ICF0aGlzLmNoaWxkcmVuLmxlbmd0aCB8fCAhdGhpcy5yZW5kZXJhYmxlKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHJlbmRlcmVyLnNldE9iamVjdFJlbmRlcmVyKCByZW5kZXJlci5wbHVnaW5zLnBhcnRpY2xlICk7XG4gICAgcmVuZGVyZXIucGx1Z2lucy5wYXJ0aWNsZS5yZW5kZXIoIHRoaXMgKTtcbn07XG5cbi8qKlxuICogU2V0IHRoZSBmbGFnIHRoYXQgc3RhdGljIGRhdGEgc2hvdWxkIGJlIHVwZGF0ZWQgdG8gdHJ1ZVxuICpcbiAqIEBwcml2YXRlXG4gKi9cblBhcnRpY2xlQ29udGFpbmVyLnByb3RvdHlwZS5vbkNoaWxkcmVuQ2hhbmdlID0gZnVuY3Rpb24gKHNtYWxsZXN0Q2hpbGRJbmRleClcbntcbiAgICB2YXIgYnVmZmVySW5kZXggPSBNYXRoLmZsb29yKHNtYWxsZXN0Q2hpbGRJbmRleCAvIHRoaXMuX2JhdGNoU2l6ZSk7XG4gICAgaWYgKGJ1ZmZlckluZGV4IDwgdGhpcy5fYnVmZmVyVG9VcGRhdGUpIHtcbiAgICAgICAgdGhpcy5fYnVmZmVyVG9VcGRhdGUgPSBidWZmZXJJbmRleDtcbiAgICB9XG59O1xuXG4vKipcbiAqIFJlbmRlcnMgdGhlIG9iamVjdCB1c2luZyB0aGUgQ2FudmFzIHJlbmRlcmVyXG4gKlxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLkNhbnZhc1JlbmRlcmVyfSBUaGUgY2FudmFzIHJlbmRlcmVyXG4gKiBAcHJpdmF0ZVxuICovXG5QYXJ0aWNsZUNvbnRhaW5lci5wcm90b3R5cGUucmVuZGVyQ2FudmFzID0gZnVuY3Rpb24gKHJlbmRlcmVyKVxue1xuICAgIGlmICghdGhpcy52aXNpYmxlIHx8IHRoaXMud29ybGRBbHBoYSA8PSAwIHx8ICF0aGlzLmNoaWxkcmVuLmxlbmd0aCB8fCAhdGhpcy5yZW5kZXJhYmxlKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHZhciBjb250ZXh0ID0gcmVuZGVyZXIuY29udGV4dDtcbiAgICB2YXIgdHJhbnNmb3JtID0gdGhpcy53b3JsZFRyYW5zZm9ybTtcbiAgICB2YXIgaXNSb3RhdGVkID0gdHJ1ZTtcblxuICAgIHZhciBwb3NpdGlvblggPSAwO1xuICAgIHZhciBwb3NpdGlvblkgPSAwO1xuXG4gICAgdmFyIGZpbmFsV2lkdGggPSAwO1xuICAgIHZhciBmaW5hbEhlaWdodCA9IDA7XG5cbiAgICB2YXIgY29tcG9zaXRlT3BlcmF0aW9uID0gcmVuZGVyZXIuYmxlbmRNb2Rlc1t0aGlzLmJsZW5kTW9kZV07XG4gICAgaWYgKGNvbXBvc2l0ZU9wZXJhdGlvbiAhPT0gY29udGV4dC5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb24pXG4gICAge1xuICAgICAgICBjb250ZXh0Lmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbiA9IGNvbXBvc2l0ZU9wZXJhdGlvbjtcbiAgICB9XG5cbiAgICBjb250ZXh0Lmdsb2JhbEFscGhhID0gdGhpcy53b3JsZEFscGhhO1xuXG4gICAgdGhpcy5kaXNwbGF5T2JqZWN0VXBkYXRlVHJhbnNmb3JtKCk7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuY2hpbGRyZW4ubGVuZ3RoOyArK2kpXG4gICAge1xuICAgICAgICB2YXIgY2hpbGQgPSB0aGlzLmNoaWxkcmVuW2ldO1xuXG4gICAgICAgIGlmICghY2hpbGQudmlzaWJsZSlcbiAgICAgICAge1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgZnJhbWUgPSBjaGlsZC50ZXh0dXJlLmZyYW1lO1xuXG4gICAgICAgIGNvbnRleHQuZ2xvYmFsQWxwaGEgPSB0aGlzLndvcmxkQWxwaGEgKiBjaGlsZC5hbHBoYTtcblxuICAgICAgICBpZiAoY2hpbGQucm90YXRpb24gJSAoTWF0aC5QSSAqIDIpID09PSAwKVxuICAgICAgICB7XG4gICAgICAgICAgICAvLyB0aGlzIGlzIHRoZSBmYXN0ZXN0ICB3YXkgdG8gb3B0aW1pc2UhIC0gaWYgcm90YXRpb24gaXMgMCB0aGVuIHdlIGNhbiBhdm9pZCBhbnkga2luZCBvZiBzZXRUcmFuc2Zvcm0gY2FsbFxuICAgICAgICAgICAgaWYgKGlzUm90YXRlZClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb250ZXh0LnNldFRyYW5zZm9ybShcbiAgICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtLmEsXG4gICAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybS5iLFxuICAgICAgICAgICAgICAgICAgICB0cmFuc2Zvcm0uYyxcbiAgICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtLmQsXG4gICAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybS50eCxcbiAgICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtLnR5XG4gICAgICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgICAgIGlzUm90YXRlZCA9IGZhbHNlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBwb3NpdGlvblggPSAoKGNoaWxkLmFuY2hvci54KSAqICgtZnJhbWUud2lkdGggKiBjaGlsZC5zY2FsZS54KSArIGNoaWxkLnBvc2l0aW9uLnggICsgMC41KTtcbiAgICAgICAgICAgIHBvc2l0aW9uWSA9ICgoY2hpbGQuYW5jaG9yLnkpICogKC1mcmFtZS5oZWlnaHQgKiBjaGlsZC5zY2FsZS55KSArIGNoaWxkLnBvc2l0aW9uLnkgICsgMC41KTtcblxuICAgICAgICAgICAgZmluYWxXaWR0aCA9IGZyYW1lLndpZHRoICogY2hpbGQuc2NhbGUueDtcbiAgICAgICAgICAgIGZpbmFsSGVpZ2h0ID0gZnJhbWUuaGVpZ2h0ICogY2hpbGQuc2NhbGUueTtcblxuICAgICAgICB9XG4gICAgICAgIGVsc2VcbiAgICAgICAge1xuICAgICAgICAgICAgaWYgKCFpc1JvdGF0ZWQpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgaXNSb3RhdGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY2hpbGQuZGlzcGxheU9iamVjdFVwZGF0ZVRyYW5zZm9ybSgpO1xuXG4gICAgICAgICAgICB2YXIgY2hpbGRUcmFuc2Zvcm0gPSBjaGlsZC53b3JsZFRyYW5zZm9ybTtcblxuICAgICAgICAgICAgaWYgKHJlbmRlcmVyLnJvdW5kUGl4ZWxzKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGNvbnRleHQuc2V0VHJhbnNmb3JtKFxuICAgICAgICAgICAgICAgICAgICBjaGlsZFRyYW5zZm9ybS5hLFxuICAgICAgICAgICAgICAgICAgICBjaGlsZFRyYW5zZm9ybS5iLFxuICAgICAgICAgICAgICAgICAgICBjaGlsZFRyYW5zZm9ybS5jLFxuICAgICAgICAgICAgICAgICAgICBjaGlsZFRyYW5zZm9ybS5kLFxuICAgICAgICAgICAgICAgICAgICBjaGlsZFRyYW5zZm9ybS50eCB8IDAsXG4gICAgICAgICAgICAgICAgICAgIGNoaWxkVHJhbnNmb3JtLnR5IHwgMFxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29udGV4dC5zZXRUcmFuc2Zvcm0oXG4gICAgICAgICAgICAgICAgICAgIGNoaWxkVHJhbnNmb3JtLmEsXG4gICAgICAgICAgICAgICAgICAgIGNoaWxkVHJhbnNmb3JtLmIsXG4gICAgICAgICAgICAgICAgICAgIGNoaWxkVHJhbnNmb3JtLmMsXG4gICAgICAgICAgICAgICAgICAgIGNoaWxkVHJhbnNmb3JtLmQsXG4gICAgICAgICAgICAgICAgICAgIGNoaWxkVHJhbnNmb3JtLnR4LFxuICAgICAgICAgICAgICAgICAgICBjaGlsZFRyYW5zZm9ybS50eVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHBvc2l0aW9uWCA9ICgoY2hpbGQuYW5jaG9yLngpICogKC1mcmFtZS53aWR0aCkgKyAwLjUpO1xuICAgICAgICAgICAgcG9zaXRpb25ZID0gKChjaGlsZC5hbmNob3IueSkgKiAoLWZyYW1lLmhlaWdodCkgKyAwLjUpO1xuXG4gICAgICAgICAgICBmaW5hbFdpZHRoID0gZnJhbWUud2lkdGg7XG4gICAgICAgICAgICBmaW5hbEhlaWdodCA9IGZyYW1lLmhlaWdodDtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnRleHQuZHJhd0ltYWdlKFxuICAgICAgICAgICAgY2hpbGQudGV4dHVyZS5iYXNlVGV4dHVyZS5zb3VyY2UsXG4gICAgICAgICAgICBmcmFtZS54LFxuICAgICAgICAgICAgZnJhbWUueSxcbiAgICAgICAgICAgIGZyYW1lLndpZHRoLFxuICAgICAgICAgICAgZnJhbWUuaGVpZ2h0LFxuICAgICAgICAgICAgcG9zaXRpb25YLFxuICAgICAgICAgICAgcG9zaXRpb25ZLFxuICAgICAgICAgICAgZmluYWxXaWR0aCxcbiAgICAgICAgICAgIGZpbmFsSGVpZ2h0XG4gICAgICAgICk7XG4gICAgfVxufTtcblxuLyoqXG4gKiBEZXN0cm95cyB0aGUgY29udGFpbmVyXG4gKlxuICogQHBhcmFtIFtkZXN0cm95Q2hpbGRyZW49ZmFsc2VdIHtib29sZWFufSBpZiBzZXQgdG8gdHJ1ZSwgYWxsIHRoZSBjaGlsZHJlbiB3aWxsIGhhdmUgdGhlaXIgZGVzdHJveSBtZXRob2QgY2FsbGVkIGFzIHdlbGxcbiAqL1xuUGFydGljbGVDb250YWluZXIucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoKSB7XG4gICAgQ29udGFpbmVyLnByb3RvdHlwZS5kZXN0cm95LmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG5cbiAgICBpZiAodGhpcy5fYnVmZmVycykge1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuX2J1ZmZlcnMubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgICAgIHRoaXMuX2J1ZmZlcnNbaV0uZGVzdHJveSgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5fcHJvcGVydGllcyA9IG51bGw7XG4gICAgdGhpcy5fYnVmZmVycyA9IG51bGw7XG59O1xuIiwiXG4vKipcbiAqIEBhdXRob3IgTWF0IEdyb3Zlc1xuICpcbiAqIEJpZyB0aGFua3MgdG8gdGhlIHZlcnkgY2xldmVyIE1hdHQgRGVzTGF1cmllcnMgPG1hdHRkZXNsPiBodHRwczovL2dpdGh1Yi5jb20vbWF0dGRlc2wvXG4gKiBmb3IgY3JlYXRpbmcgdGhlIG9yaWdpbmFsIHBpeGkgdmVyc2lvbiFcbiAqIEFsc28gYSB0aGFua3MgdG8gaHR0cHM6Ly9naXRodWIuY29tL2JjaGV2YWxpZXIgZm9yIHR3ZWFraW5nIHRoZSB0aW50IGFuZCBhbHBoYSBzbyB0aGF0IHRoZXkgbm93IHNoYXJlIDQgYnl0ZXMgb24gdGhlIHZlcnRleCBidWZmZXJcbiAqXG4gKiBIZWF2aWx5IGluc3BpcmVkIGJ5IExpYkdEWCdzIFBhcnRpY2xlQnVmZmVyOlxuICogaHR0cHM6Ly9naXRodWIuY29tL2xpYmdkeC9saWJnZHgvYmxvYi9tYXN0ZXIvZ2R4L3NyYy9jb20vYmFkbG9naWMvZ2R4L2dyYXBoaWNzL2cyZC9QYXJ0aWNsZUJ1ZmZlci5qYXZhXG4gKi9cblxuLyoqXG4gKiBUaGUgcGFydGljbGUgYnVmZmVyIG1hbmFnZXMgdGhlIHN0YXRpYyBhbmQgZHluYW1pYyBidWZmZXJzIGZvciBhIHBhcnRpY2xlIGNvbnRhaW5lci5cbiAqXG4gKiBAY2xhc3NcbiAqIEBwcml2YXRlXG4gKiBAbWVtYmVyb2YgUElYSVxuICovXG5mdW5jdGlvbiBQYXJ0aWNsZUJ1ZmZlcihnbCwgcHJvcGVydGllcywgZHluYW1pY1Byb3BlcnR5RmxhZ3MsIHNpemUpXG57XG4gICAgLyoqXG4gICAgICogVGhlIGN1cnJlbnQgV2ViR0wgZHJhd2luZyBjb250ZXh0LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7V2ViR0xSZW5kZXJpbmdDb250ZXh0fVxuICAgICAqL1xuICAgIHRoaXMuZ2wgPSBnbDtcblxuICAgIC8qKlxuICAgICAqIFNpemUgb2YgYSBzaW5nbGUgdmVydGV4LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMudmVydFNpemUgPSAyO1xuXG4gICAgLyoqXG4gICAgICogU2l6ZSBvZiBhIHNpbmdsZSB2ZXJ0ZXggaW4gYnl0ZXMuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy52ZXJ0Qnl0ZVNpemUgPSB0aGlzLnZlcnRTaXplICogNDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBudW1iZXIgb2YgcGFydGljbGVzIHRoZSBidWZmZXIgY2FuIGhvbGRcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLnNpemUgPSBzaXplO1xuXG4gICAgLyoqXG4gICAgICogQSBsaXN0IG9mIHRoZSBwcm9wZXJ0aWVzIHRoYXQgYXJlIGR5bmFtaWMuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtvYmplY3RbXX1cbiAgICAgKi9cbiAgICB0aGlzLmR5bmFtaWNQcm9wZXJ0aWVzID0gW107XG5cbiAgICAvKipcbiAgICAgKiBBIGxpc3Qgb2YgdGhlIHByb3BlcnRpZXMgdGhhdCBhcmUgc3RhdGljLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7b2JqZWN0W119XG4gICAgICovXG4gICAgdGhpcy5zdGF0aWNQcm9wZXJ0aWVzID0gW107XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BlcnRpZXMubGVuZ3RoOyBpKyspXG4gICAge1xuICAgICAgICB2YXIgcHJvcGVydHkgPSBwcm9wZXJ0aWVzW2ldO1xuXG4gICAgICAgIGlmKGR5bmFtaWNQcm9wZXJ0eUZsYWdzW2ldKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmR5bmFtaWNQcm9wZXJ0aWVzLnB1c2gocHJvcGVydHkpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2VcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5zdGF0aWNQcm9wZXJ0aWVzLnB1c2gocHJvcGVydHkpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5zdGF0aWNTdHJpZGUgPSAwO1xuICAgIHRoaXMuc3RhdGljQnVmZmVyID0gbnVsbDtcbiAgICB0aGlzLnN0YXRpY0RhdGEgPSBudWxsO1xuXG4gICAgdGhpcy5keW5hbWljU3RyaWRlID0gMDtcbiAgICB0aGlzLmR5bmFtaWNCdWZmZXIgPSBudWxsO1xuICAgIHRoaXMuZHluYW1pY0RhdGEgPSBudWxsO1xuXG4gICAgdGhpcy5pbml0QnVmZmVycygpO1xuXG59XG5cblBhcnRpY2xlQnVmZmVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFBhcnRpY2xlQnVmZmVyO1xubW9kdWxlLmV4cG9ydHMgPSBQYXJ0aWNsZUJ1ZmZlcjtcblxuLyoqXG4gKiBTZXRzIHVwIHRoZSByZW5kZXJlciBjb250ZXh0IGFuZCBuZWNlc3NhcnkgYnVmZmVycy5cbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5QYXJ0aWNsZUJ1ZmZlci5wcm90b3R5cGUuaW5pdEJ1ZmZlcnMgPSBmdW5jdGlvbiAoKVxue1xuICAgIHZhciBnbCA9IHRoaXMuZ2w7XG4gICAgdmFyIGk7XG4gICAgdmFyIHByb3BlcnR5O1xuXG4gICAgdmFyIGR5bmFtaWNPZmZzZXQgPSAwO1xuICAgIHRoaXMuZHluYW1pY1N0cmlkZSA9IDA7XG5cbiAgICBmb3IgKGkgPSAwOyBpIDwgdGhpcy5keW5hbWljUHJvcGVydGllcy5sZW5ndGg7IGkrKylcbiAgICB7XG4gICAgICAgIHByb3BlcnR5ID0gdGhpcy5keW5hbWljUHJvcGVydGllc1tpXTtcblxuICAgICAgICBwcm9wZXJ0eS5vZmZzZXQgPSBkeW5hbWljT2Zmc2V0O1xuICAgICAgICBkeW5hbWljT2Zmc2V0ICs9IHByb3BlcnR5LnNpemU7XG4gICAgICAgIHRoaXMuZHluYW1pY1N0cmlkZSArPSBwcm9wZXJ0eS5zaXplO1xuICAgIH1cblxuICAgIHRoaXMuZHluYW1pY0RhdGEgPSBuZXcgRmxvYXQzMkFycmF5KCB0aGlzLnNpemUgKiB0aGlzLmR5bmFtaWNTdHJpZGUgKiA0KTtcbiAgICB0aGlzLmR5bmFtaWNCdWZmZXIgPSBnbC5jcmVhdGVCdWZmZXIoKTtcblxuICAgIGdsLmJpbmRCdWZmZXIoZ2wuQVJSQVlfQlVGRkVSLCB0aGlzLmR5bmFtaWNCdWZmZXIpO1xuICAgIGdsLmJ1ZmZlckRhdGEoZ2wuQVJSQVlfQlVGRkVSLCB0aGlzLmR5bmFtaWNEYXRhLCBnbC5EWU5BTUlDX0RSQVcpO1xuXG5cbiAgICAvLyBzdGF0aWMgLy9cbiAgICB2YXIgc3RhdGljT2Zmc2V0ID0gMDtcbiAgICB0aGlzLnN0YXRpY1N0cmlkZSA9IDA7XG5cbiAgICBmb3IgKGkgPSAwOyBpIDwgdGhpcy5zdGF0aWNQcm9wZXJ0aWVzLmxlbmd0aDsgaSsrKVxuICAgIHtcbiAgICAgICAgcHJvcGVydHkgPSB0aGlzLnN0YXRpY1Byb3BlcnRpZXNbaV07XG5cbiAgICAgICAgcHJvcGVydHkub2Zmc2V0ID0gc3RhdGljT2Zmc2V0O1xuICAgICAgICBzdGF0aWNPZmZzZXQgKz0gcHJvcGVydHkuc2l6ZTtcbiAgICAgICAgdGhpcy5zdGF0aWNTdHJpZGUgKz0gcHJvcGVydHkuc2l6ZTtcbiAgICB9XG5cbiAgICB0aGlzLnN0YXRpY0RhdGEgPSBuZXcgRmxvYXQzMkFycmF5KCB0aGlzLnNpemUgKiB0aGlzLnN0YXRpY1N0cmlkZSAqIDQpO1xuICAgIHRoaXMuc3RhdGljQnVmZmVyID0gZ2wuY3JlYXRlQnVmZmVyKCk7XG5cbiAgICBnbC5iaW5kQnVmZmVyKGdsLkFSUkFZX0JVRkZFUiwgdGhpcy5zdGF0aWNCdWZmZXIpO1xuICAgIGdsLmJ1ZmZlckRhdGEoZ2wuQVJSQVlfQlVGRkVSLCB0aGlzLnN0YXRpY0RhdGEsIGdsLkRZTkFNSUNfRFJBVyk7XG59O1xuXG4vKipcbiAqIFVwbG9hZHMgdGhlIGR5bmFtaWMgcHJvcGVydGllcy5cbiAqXG4gKi9cblBhcnRpY2xlQnVmZmVyLnByb3RvdHlwZS51cGxvYWREeW5hbWljID0gZnVuY3Rpb24oY2hpbGRyZW4sIHN0YXJ0SW5kZXgsIGFtb3VudClcbntcbiAgICB2YXIgZ2wgPSB0aGlzLmdsO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmR5bmFtaWNQcm9wZXJ0aWVzLmxlbmd0aDsgaSsrKVxuICAgIHtcbiAgICAgICAgdmFyIHByb3BlcnR5ID0gdGhpcy5keW5hbWljUHJvcGVydGllc1tpXTtcbiAgICAgICAgcHJvcGVydHkudXBsb2FkRnVuY3Rpb24oY2hpbGRyZW4sIHN0YXJ0SW5kZXgsIGFtb3VudCwgdGhpcy5keW5hbWljRGF0YSwgdGhpcy5keW5hbWljU3RyaWRlLCBwcm9wZXJ0eS5vZmZzZXQpO1xuICAgIH1cblxuICAgIGdsLmJpbmRCdWZmZXIoZ2wuQVJSQVlfQlVGRkVSLCB0aGlzLmR5bmFtaWNCdWZmZXIpO1xuICAgIGdsLmJ1ZmZlclN1YkRhdGEoZ2wuQVJSQVlfQlVGRkVSLCAwLCB0aGlzLmR5bmFtaWNEYXRhKTtcbn07XG5cbi8qKlxuICogVXBsb2FkcyB0aGUgc3RhdGljIHByb3BlcnRpZXMuXG4gKlxuICovXG5QYXJ0aWNsZUJ1ZmZlci5wcm90b3R5cGUudXBsb2FkU3RhdGljID0gZnVuY3Rpb24oY2hpbGRyZW4sIHN0YXJ0SW5kZXgsIGFtb3VudClcbntcbiAgICB2YXIgZ2wgPSB0aGlzLmdsO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLnN0YXRpY1Byb3BlcnRpZXMubGVuZ3RoOyBpKyspXG4gICAge1xuICAgICAgICB2YXIgcHJvcGVydHkgPSB0aGlzLnN0YXRpY1Byb3BlcnRpZXNbaV07XG4gICAgICAgIHByb3BlcnR5LnVwbG9hZEZ1bmN0aW9uKGNoaWxkcmVuLCBzdGFydEluZGV4LCBhbW91bnQsIHRoaXMuc3RhdGljRGF0YSwgdGhpcy5zdGF0aWNTdHJpZGUsIHByb3BlcnR5Lm9mZnNldCk7XG4gICAgfVxuXG4gICAgZ2wuYmluZEJ1ZmZlcihnbC5BUlJBWV9CVUZGRVIsIHRoaXMuc3RhdGljQnVmZmVyKTtcbiAgICBnbC5idWZmZXJTdWJEYXRhKGdsLkFSUkFZX0JVRkZFUiwgMCwgdGhpcy5zdGF0aWNEYXRhKTtcbn07XG5cbi8qKlxuICogQmluZHMgdGhlIGJ1ZmZlcnMgdG8gdGhlIEdQVVxuICpcbiAqL1xuUGFydGljbGVCdWZmZXIucHJvdG90eXBlLmJpbmQgPSBmdW5jdGlvbiAoKVxue1xuICAgIHZhciBnbCA9IHRoaXMuZ2w7XG4gICAgdmFyIGksIHByb3BlcnR5O1xuXG4gICAgZ2wuYmluZEJ1ZmZlcihnbC5BUlJBWV9CVUZGRVIsIHRoaXMuZHluYW1pY0J1ZmZlcik7XG5cbiAgICBmb3IgKGkgPSAwOyBpIDwgdGhpcy5keW5hbWljUHJvcGVydGllcy5sZW5ndGg7IGkrKylcbiAgICB7XG4gICAgICAgIHByb3BlcnR5ID0gdGhpcy5keW5hbWljUHJvcGVydGllc1tpXTtcbiAgICAgICAgZ2wudmVydGV4QXR0cmliUG9pbnRlcihwcm9wZXJ0eS5hdHRyaWJ1dGUsIHByb3BlcnR5LnNpemUsIGdsLkZMT0FULCBmYWxzZSwgdGhpcy5keW5hbWljU3RyaWRlICogNCwgcHJvcGVydHkub2Zmc2V0ICogNCk7XG4gICAgfVxuXG4gICAgZ2wuYmluZEJ1ZmZlcihnbC5BUlJBWV9CVUZGRVIsIHRoaXMuc3RhdGljQnVmZmVyKTtcblxuICAgIGZvciAoaSA9IDA7IGkgPCB0aGlzLnN0YXRpY1Byb3BlcnRpZXMubGVuZ3RoOyBpKyspXG4gICAge1xuICAgICAgICBwcm9wZXJ0eSA9IHRoaXMuc3RhdGljUHJvcGVydGllc1tpXTtcbiAgICAgICAgZ2wudmVydGV4QXR0cmliUG9pbnRlcihwcm9wZXJ0eS5hdHRyaWJ1dGUsIHByb3BlcnR5LnNpemUsIGdsLkZMT0FULCBmYWxzZSwgdGhpcy5zdGF0aWNTdHJpZGUgKiA0LCBwcm9wZXJ0eS5vZmZzZXQgKiA0KTtcbiAgICB9XG59O1xuXG4vKipcbiAqIERlc3Ryb3lzIHRoZSBQYXJ0aWNsZUJ1ZmZlci5cbiAqXG4gKi9cblBhcnRpY2xlQnVmZmVyLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLmR5bmFtaWNQcm9wZXJ0aWVzID0gbnVsbDtcbiAgICB0aGlzLmR5bmFtaWNEYXRhID0gbnVsbDtcbiAgICB0aGlzLmdsLmRlbGV0ZUJ1ZmZlcih0aGlzLmR5bmFtaWNCdWZmZXIpO1xuXG4gICAgdGhpcy5zdGF0aWNQcm9wZXJ0aWVzID0gbnVsbDtcbiAgICB0aGlzLnN0YXRpY0RhdGEgPSBudWxsO1xuICAgIHRoaXMuZ2wuZGVsZXRlQnVmZmVyKHRoaXMuc3RhdGljQnVmZmVyKTtcbn07XG4iLCJ2YXIgT2JqZWN0UmVuZGVyZXIgPSByZXF1aXJlKCcuLi8uLi9yZW5kZXJlcnMvd2ViZ2wvdXRpbHMvT2JqZWN0UmVuZGVyZXInKSxcbiAgICBXZWJHTFJlbmRlcmVyID0gcmVxdWlyZSgnLi4vLi4vcmVuZGVyZXJzL3dlYmdsL1dlYkdMUmVuZGVyZXInKSxcbiAgICBQYXJ0aWNsZVNoYWRlciA9IHJlcXVpcmUoJy4vUGFydGljbGVTaGFkZXInKSxcbiAgICBQYXJ0aWNsZUJ1ZmZlciA9IHJlcXVpcmUoJy4vUGFydGljbGVCdWZmZXInKSxcbiAgICBtYXRoICAgICAgICAgICAgPSByZXF1aXJlKCcuLi8uLi9tYXRoJyk7XG5cbi8qKlxuICogQGF1dGhvciBNYXQgR3JvdmVzXG4gKlxuICogQmlnIHRoYW5rcyB0byB0aGUgdmVyeSBjbGV2ZXIgTWF0dCBEZXNMYXVyaWVycyA8bWF0dGRlc2w+IGh0dHBzOi8vZ2l0aHViLmNvbS9tYXR0ZGVzbC9cbiAqIGZvciBjcmVhdGluZyB0aGUgb3JpZ2luYWwgcGl4aSB2ZXJzaW9uIVxuICogQWxzbyBhIHRoYW5rcyB0byBodHRwczovL2dpdGh1Yi5jb20vYmNoZXZhbGllciBmb3IgdHdlYWtpbmcgdGhlIHRpbnQgYW5kIGFscGhhIHNvIHRoYXQgdGhleSBub3cgc2hhcmUgNCBieXRlcyBvbiB0aGUgdmVydGV4IGJ1ZmZlclxuICpcbiAqIEhlYXZpbHkgaW5zcGlyZWQgYnkgTGliR0RYJ3MgUGFydGljbGVSZW5kZXJlcjpcbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS9saWJnZHgvbGliZ2R4L2Jsb2IvbWFzdGVyL2dkeC9zcmMvY29tL2JhZGxvZ2ljL2dkeC9ncmFwaGljcy9nMmQvUGFydGljbGVSZW5kZXJlci5qYXZhXG4gKi9cblxuLyoqXG4gKlxuICogQGNsYXNzXG4gKiBAcHJpdmF0ZVxuICogQG1lbWJlcm9mIFBJWElcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5XZWJHTFJlbmRlcmVyfSBUaGUgcmVuZGVyZXIgdGhpcyBzcHJpdGUgYmF0Y2ggd29ya3MgZm9yLlxuICovXG5mdW5jdGlvbiBQYXJ0aWNsZVJlbmRlcmVyKHJlbmRlcmVyKVxue1xuICAgIE9iamVjdFJlbmRlcmVyLmNhbGwodGhpcywgcmVuZGVyZXIpO1xuXG4gICAgLy8gNjU1MzUgaXMgbWF4IHZlcnRleCBpbmRleCBpbiB0aGUgaW5kZXggYnVmZmVyIChzZWUgUGFydGljbGVSZW5kZXJlcilcbiAgICAvLyBzbyBtYXggbnVtYmVyIG9mIHBhcnRpY2xlcyBpcyA2NTUzNiAvIDQgPSAxNjM4NFxuICAgIC8vIGFuZCBtYXggbnVtYmVyIG9mIGVsZW1lbnQgaW4gdGhlIGluZGV4IGJ1ZmZlciBpcyAxNjM4NCAqIDYgPSA5ODMwNFxuICAgIC8vIENyZWF0aW5nIGEgZnVsbCBpbmRleCBidWZmZXIsIG92ZXJoZWFkIGlzIDk4MzA0ICogMiA9IDE5NktvXG4gICAgdmFyIG51bUluZGljZXMgPSA5ODMwNDtcblxuICAgIC8qKlxuICAgICAqIEhvbGRzIHRoZSBpbmRpY2VzXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtVaW50MTZBcnJheX1cbiAgICAgKi9cbiAgICB0aGlzLmluZGljZXMgPSBuZXcgVWludDE2QXJyYXkobnVtSW5kaWNlcyk7XG5cbiAgICBmb3IgKHZhciBpPTAsIGo9MDsgaSA8IG51bUluZGljZXM7IGkgKz0gNiwgaiArPSA0KVxuICAgIHtcbiAgICAgICAgdGhpcy5pbmRpY2VzW2kgKyAwXSA9IGogKyAwO1xuICAgICAgICB0aGlzLmluZGljZXNbaSArIDFdID0gaiArIDE7XG4gICAgICAgIHRoaXMuaW5kaWNlc1tpICsgMl0gPSBqICsgMjtcbiAgICAgICAgdGhpcy5pbmRpY2VzW2kgKyAzXSA9IGogKyAwO1xuICAgICAgICB0aGlzLmluZGljZXNbaSArIDRdID0gaiArIDI7XG4gICAgICAgIHRoaXMuaW5kaWNlc1tpICsgNV0gPSBqICsgMztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGUgZGVmYXVsdCBzaGFkZXIgdGhhdCBpcyB1c2VkIGlmIGEgc3ByaXRlIGRvZXNuJ3QgaGF2ZSBhIG1vcmUgc3BlY2lmaWMgb25lLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5TaGFkZXJ9XG4gICAgICovXG4gICAgdGhpcy5zaGFkZXIgPSBudWxsO1xuXG4gICAgdGhpcy5pbmRleEJ1ZmZlciA9IG51bGw7XG5cbiAgICB0aGlzLnByb3BlcnRpZXMgPSBudWxsO1xuXG4gICAgdGhpcy50ZW1wTWF0cml4ID0gbmV3IG1hdGguTWF0cml4KCk7XG59XG5cblBhcnRpY2xlUmVuZGVyZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShPYmplY3RSZW5kZXJlci5wcm90b3R5cGUpO1xuUGFydGljbGVSZW5kZXJlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBQYXJ0aWNsZVJlbmRlcmVyO1xubW9kdWxlLmV4cG9ydHMgPSBQYXJ0aWNsZVJlbmRlcmVyO1xuXG5XZWJHTFJlbmRlcmVyLnJlZ2lzdGVyUGx1Z2luKCdwYXJ0aWNsZScsIFBhcnRpY2xlUmVuZGVyZXIpO1xuXG4vKipcbiAqIFdoZW4gdGhlcmUgaXMgYSBXZWJHTCBjb250ZXh0IGNoYW5nZVxuICpcbiAqIEBwcml2YXRlXG4gKi9cblBhcnRpY2xlUmVuZGVyZXIucHJvdG90eXBlLm9uQ29udGV4dENoYW5nZSA9IGZ1bmN0aW9uICgpXG57XG4gICAgdmFyIGdsID0gdGhpcy5yZW5kZXJlci5nbDtcblxuICAgIC8vIHNldHVwIGRlZmF1bHQgc2hhZGVyXG4gICAgdGhpcy5zaGFkZXIgPSBuZXcgUGFydGljbGVTaGFkZXIodGhpcy5yZW5kZXJlci5zaGFkZXJNYW5hZ2VyKTtcblxuICAgIHRoaXMuaW5kZXhCdWZmZXIgPSBnbC5jcmVhdGVCdWZmZXIoKTtcblxuICAgIC8vIDY1NTM1IGlzIG1heCBpbmRleCwgc28gNjU1MzUgLyA2ID0gMTA5MjIuXG5cbiAgICAvL3VwbG9hZCB0aGUgaW5kZXggZGF0YVxuICAgIGdsLmJpbmRCdWZmZXIoZ2wuRUxFTUVOVF9BUlJBWV9CVUZGRVIsIHRoaXMuaW5kZXhCdWZmZXIpO1xuICAgIGdsLmJ1ZmZlckRhdGEoZ2wuRUxFTUVOVF9BUlJBWV9CVUZGRVIsIHRoaXMuaW5kaWNlcywgZ2wuU1RBVElDX0RSQVcpO1xuXG4gICAgdGhpcy5wcm9wZXJ0aWVzID0gW1xuICAgICAgICAvLyB2ZXJ0aWNlc0RhdGFcbiAgICAgICAge1xuICAgICAgICAgICAgYXR0cmlidXRlOnRoaXMuc2hhZGVyLmF0dHJpYnV0ZXMuYVZlcnRleFBvc2l0aW9uLFxuICAgICAgICAgICAgc2l6ZToyLFxuICAgICAgICAgICAgdXBsb2FkRnVuY3Rpb246dGhpcy51cGxvYWRWZXJ0aWNlcyxcbiAgICAgICAgICAgIG9mZnNldDowXG4gICAgICAgIH0sXG4gICAgICAgIC8vIHBvc2l0aW9uRGF0YVxuICAgICAgICB7XG4gICAgICAgICAgICBhdHRyaWJ1dGU6dGhpcy5zaGFkZXIuYXR0cmlidXRlcy5hUG9zaXRpb25Db29yZCxcbiAgICAgICAgICAgIHNpemU6MixcbiAgICAgICAgICAgIHVwbG9hZEZ1bmN0aW9uOnRoaXMudXBsb2FkUG9zaXRpb24sXG4gICAgICAgICAgICBvZmZzZXQ6MFxuICAgICAgICB9LFxuICAgICAgICAvLyByb3RhdGlvbkRhdGFcbiAgICAgICAge1xuICAgICAgICAgICAgYXR0cmlidXRlOnRoaXMuc2hhZGVyLmF0dHJpYnV0ZXMuYVJvdGF0aW9uLFxuICAgICAgICAgICAgc2l6ZToxLFxuICAgICAgICAgICAgdXBsb2FkRnVuY3Rpb246dGhpcy51cGxvYWRSb3RhdGlvbixcbiAgICAgICAgICAgIG9mZnNldDowXG4gICAgICAgIH0sXG4gICAgICAgIC8vIHV2c0RhdGFcbiAgICAgICAge1xuICAgICAgICAgICAgYXR0cmlidXRlOnRoaXMuc2hhZGVyLmF0dHJpYnV0ZXMuYVRleHR1cmVDb29yZCxcbiAgICAgICAgICAgIHNpemU6MixcbiAgICAgICAgICAgIHVwbG9hZEZ1bmN0aW9uOnRoaXMudXBsb2FkVXZzLFxuICAgICAgICAgICAgb2Zmc2V0OjBcbiAgICAgICAgfSxcbiAgICAgICAgLy8gYWxwaGFEYXRhXG4gICAgICAgIHtcbiAgICAgICAgICAgIGF0dHJpYnV0ZTp0aGlzLnNoYWRlci5hdHRyaWJ1dGVzLmFDb2xvcixcbiAgICAgICAgICAgIHNpemU6MSxcbiAgICAgICAgICAgIHVwbG9hZEZ1bmN0aW9uOnRoaXMudXBsb2FkQWxwaGEsXG4gICAgICAgICAgICBvZmZzZXQ6MFxuICAgICAgICB9XG4gICAgXTtcbn07XG5cbi8qKlxuICogU3RhcnRzIGEgbmV3IHBhcnRpY2xlIGJhdGNoLlxuICpcbiAqL1xuUGFydGljbGVSZW5kZXJlci5wcm90b3R5cGUuc3RhcnQgPSBmdW5jdGlvbiAoKVxue1xuICAgIHZhciBnbCA9IHRoaXMucmVuZGVyZXIuZ2w7XG5cbiAgICAvLyBiaW5kIHRoZSBtYWluIHRleHR1cmVcbiAgICBnbC5hY3RpdmVUZXh0dXJlKGdsLlRFWFRVUkUwKTtcblxuICAgIC8vIGJpbmQgdGhlIGJ1ZmZlcnNcblxuICAgIGdsLmJpbmRCdWZmZXIoZ2wuRUxFTUVOVF9BUlJBWV9CVUZGRVIsIHRoaXMuaW5kZXhCdWZmZXIpO1xuXG4gICAgdmFyIHNoYWRlciA9IHRoaXMuc2hhZGVyO1xuXG4gICAgdGhpcy5yZW5kZXJlci5zaGFkZXJNYW5hZ2VyLnNldFNoYWRlcihzaGFkZXIpO1xufTtcblxuXG4vKipcbiAqIFJlbmRlcnMgdGhlIHBhcnRpY2xlIGNvbnRhaW5lciBvYmplY3QuXG4gKlxuICogQHBhcmFtIGNvbnRhaW5lciB7UElYSS5QYXJ0aWNsZUNvbnRhaW5lcn0gVGhlIGNvbnRhaW5lciB0byByZW5kZXIgdXNpbmcgdGhpcyBQYXJ0aWNsZVJlbmRlcmVyXG4gKi9cblBhcnRpY2xlUmVuZGVyZXIucHJvdG90eXBlLnJlbmRlciA9IGZ1bmN0aW9uIChjb250YWluZXIpXG57XG4gICAgdmFyIGNoaWxkcmVuID0gY29udGFpbmVyLmNoaWxkcmVuLFxuICAgICAgICB0b3RhbENoaWxkcmVuID0gY2hpbGRyZW4ubGVuZ3RoLFxuICAgICAgICBtYXhTaXplID0gY29udGFpbmVyLl9tYXhTaXplLFxuICAgICAgICBiYXRjaFNpemUgPSBjb250YWluZXIuX2JhdGNoU2l6ZTtcblxuICAgIGlmKHRvdGFsQ2hpbGRyZW4gPT09IDApXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIGVsc2UgaWYodG90YWxDaGlsZHJlbiA+IG1heFNpemUpXG4gICAge1xuICAgICAgICB0b3RhbENoaWxkcmVuID0gbWF4U2l6ZTtcbiAgICB9XG5cbiAgICBpZighY29udGFpbmVyLl9idWZmZXJzKVxuICAgIHtcbiAgICAgICAgY29udGFpbmVyLl9idWZmZXJzID0gdGhpcy5nZW5lcmF0ZUJ1ZmZlcnMoIGNvbnRhaW5lciApO1xuICAgIH1cblxuICAgIC8vIGlmIHRoZSB1dnMgaGF2ZSBub3QgdXBkYXRlZCB0aGVuIG5vIHBvaW50IHJlbmRlcmluZyBqdXN0IHlldCFcbiAgICB0aGlzLnJlbmRlcmVyLmJsZW5kTW9kZU1hbmFnZXIuc2V0QmxlbmRNb2RlKGNvbnRhaW5lci5ibGVuZE1vZGUpO1xuXG4gICAgdmFyIGdsID0gdGhpcy5yZW5kZXJlci5nbDtcblxuICAgIHZhciBtID0gIGNvbnRhaW5lci53b3JsZFRyYW5zZm9ybS5jb3B5KCB0aGlzLnRlbXBNYXRyaXggKTtcbiAgICBtLnByZXBlbmQoIHRoaXMucmVuZGVyZXIuY3VycmVudFJlbmRlclRhcmdldC5wcm9qZWN0aW9uTWF0cml4ICk7XG4gICAgZ2wudW5pZm9ybU1hdHJpeDNmdih0aGlzLnNoYWRlci51bmlmb3Jtcy5wcm9qZWN0aW9uTWF0cml4Ll9sb2NhdGlvbiwgZmFsc2UsIG0udG9BcnJheSh0cnVlKSk7XG4gICAgZ2wudW5pZm9ybTFmKHRoaXMuc2hhZGVyLnVuaWZvcm1zLnVBbHBoYS5fbG9jYXRpb24sIGNvbnRhaW5lci53b3JsZEFscGhhKTtcblxuXG4gICAgLy8gbWFrZSBzdXJlIHRoZSB0ZXh0dXJlIGlzIGJvdW5kLi5cbiAgICB2YXIgYmFzZVRleHR1cmUgPSBjaGlsZHJlblswXS5fdGV4dHVyZS5iYXNlVGV4dHVyZTtcblxuICAgIGlmICghYmFzZVRleHR1cmUuX2dsVGV4dHVyZXNbZ2wuaWRdKVxuICAgIHtcbiAgICAgICAgLy8gaWYgdGhlIHRleHR1cmUgaGFzIG5vdCB1cGRhdGVkIHRoZW4gbGV0cyBub3QgdXBsb2FkIGFueSBzdGF0aWMgcHJvcGVydGllc1xuICAgICAgICBpZighdGhpcy5yZW5kZXJlci51cGRhdGVUZXh0dXJlKGJhc2VUZXh0dXJlKSlcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYoIWNvbnRhaW5lci5fcHJvcGVydGllc1swXSB8fCAhY29udGFpbmVyLl9wcm9wZXJ0aWVzWzNdKVxuICAgICAgICB7XG4gICAgICAgICAgICBjb250YWluZXIuX2J1ZmZlclRvVXBkYXRlID0gMDtcbiAgICAgICAgfVxuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICBnbC5iaW5kVGV4dHVyZShnbC5URVhUVVJFXzJELCBiYXNlVGV4dHVyZS5fZ2xUZXh0dXJlc1tnbC5pZF0pO1xuICAgIH1cblxuICAgIC8vIG5vdyBsZXRzIHVwbG9hZCBhbmQgcmVuZGVyIHRoZSBidWZmZXJzLi5cbiAgICBmb3IgKHZhciBpID0gMCwgaiA9IDA7IGkgPCB0b3RhbENoaWxkcmVuOyBpICs9IGJhdGNoU2l6ZSwgaiArPSAxKVxuICAgIHtcbiAgICAgICAgdmFyIGFtb3VudCA9ICggdG90YWxDaGlsZHJlbiAtIGkpO1xuICAgICAgICBpZihhbW91bnQgPiBiYXRjaFNpemUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGFtb3VudCA9IGJhdGNoU2l6ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBidWZmZXIgPSBjb250YWluZXIuX2J1ZmZlcnNbal07XG5cbiAgICAgICAgLy8gd2UgYWx3YXlzIHVwbG9hZCB0aGUgZHluYW1pY1xuICAgICAgICBidWZmZXIudXBsb2FkRHluYW1pYyhjaGlsZHJlbiwgaSwgYW1vdW50KTtcblxuICAgICAgICAvLyB3ZSBvbmx5IHVwbG9hZCB0aGUgc3RhdGljIGNvbnRlbnQgd2hlbiB3ZSBoYXZlIHRvIVxuICAgICAgICBpZihjb250YWluZXIuX2J1ZmZlclRvVXBkYXRlID09PSBqKVxuICAgICAgICB7XG4gICAgICAgICAgICBidWZmZXIudXBsb2FkU3RhdGljKGNoaWxkcmVuLCBpLCBhbW91bnQpO1xuICAgICAgICAgICAgY29udGFpbmVyLl9idWZmZXJUb1VwZGF0ZSA9IGogKyAxO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gYmluZCB0aGUgYnVmZmVyXG4gICAgICAgIGJ1ZmZlci5iaW5kKCB0aGlzLnNoYWRlciApO1xuXG4gICAgICAgICAvLyBub3cgZHJhdyB0aG9zZSBzdWNrYXMhXG4gICAgICAgIGdsLmRyYXdFbGVtZW50cyhnbC5UUklBTkdMRVMsIGFtb3VudCAqIDYsIGdsLlVOU0lHTkVEX1NIT1JULCAwKTtcbiAgICAgICAgdGhpcy5yZW5kZXJlci5kcmF3Q291bnQrKztcbiAgICB9XG59O1xuXG4vKipcbiAqIENyZWF0ZXMgb25lIHBhcnRpY2xlIGJ1ZmZlciBmb3IgZWFjaCBjaGlsZCBpbiB0aGUgY29udGFpbmVyIHdlIHdhbnQgdG8gcmVuZGVyIGFuZCB1cGRhdGVzIGludGVybmFsIHByb3BlcnRpZXNcbiAqXG4gKiBAcGFyYW0gY29udGFpbmVyIHtQSVhJLlBhcnRpY2xlQ29udGFpbmVyfSBUaGUgY29udGFpbmVyIHRvIHJlbmRlciB1c2luZyB0aGlzIFBhcnRpY2xlUmVuZGVyZXJcbiAqL1xuUGFydGljbGVSZW5kZXJlci5wcm90b3R5cGUuZ2VuZXJhdGVCdWZmZXJzID0gZnVuY3Rpb24gKGNvbnRhaW5lcilcbntcbiAgICB2YXIgZ2wgPSB0aGlzLnJlbmRlcmVyLmdsLFxuICAgICAgICBidWZmZXJzID0gW10sXG4gICAgICAgIHNpemUgPSBjb250YWluZXIuX21heFNpemUsXG4gICAgICAgIGJhdGNoU2l6ZSA9IGNvbnRhaW5lci5fYmF0Y2hTaXplLFxuICAgICAgICBkeW5hbWljUHJvcGVydHlGbGFncyA9IGNvbnRhaW5lci5fcHJvcGVydGllcyxcbiAgICAgICAgaTtcblxuICAgIGZvciAoaSA9IDA7IGkgPCBzaXplOyBpICs9IGJhdGNoU2l6ZSlcbiAgICB7XG4gICAgICAgIGJ1ZmZlcnMucHVzaChuZXcgUGFydGljbGVCdWZmZXIoZ2wsIHRoaXMucHJvcGVydGllcywgZHluYW1pY1Byb3BlcnR5RmxhZ3MsIGJhdGNoU2l6ZSkpO1xuICAgIH1cblxuICAgIHJldHVybiBidWZmZXJzO1xufTtcblxuLyoqXG4gKiBVcGxvYWRzIHRoZSB2ZXJ0aWNpZXMuXG4gKlxuICogQHBhcmFtIGNoaWxkcmVuIHtQSVhJLkRpc3BsYXlPYmplY3RbXX0gdGhlIGFycmF5IG9mIGRpc3BsYXkgb2JqZWN0cyB0byByZW5kZXJcbiAqIEBwYXJhbSBzdGFydEluZGV4IHtudW1iZXJ9IHRoZSBpbmRleCB0byBzdGFydCBmcm9tIGluIHRoZSBjaGlsZHJlbiBhcnJheVxuICogQHBhcmFtIGFtb3VudCB7bnVtYmVyfSB0aGUgYW1vdW50IG9mIGNoaWxkcmVuIHRoYXQgd2lsbCBoYXZlIHRoZWlyIHZlcnRpY2VzIHVwbG9hZGVkXG4gKiBAcGFyYW0gYXJyYXkge251bWJlcltdfVxuICogQHBhcmFtIHN0cmlkZSB7bnVtYmVyfVxuICogQHBhcmFtIG9mZnNldCB7bnVtYmVyfVxuICovXG5QYXJ0aWNsZVJlbmRlcmVyLnByb3RvdHlwZS51cGxvYWRWZXJ0aWNlcyA9IGZ1bmN0aW9uIChjaGlsZHJlbiwgc3RhcnRJbmRleCwgYW1vdW50LCBhcnJheSwgc3RyaWRlLCBvZmZzZXQpXG57XG4gICAgdmFyIHNwcml0ZSxcbiAgICAgICAgdGV4dHVyZSxcbiAgICAgICAgdHJpbSxcbiAgICAgICAgc3gsXG4gICAgICAgIHN5LFxuICAgICAgICB3MCwgdzEsIGgwLCBoMTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYW1vdW50OyBpKyspIHtcblxuICAgICAgICBzcHJpdGUgPSBjaGlsZHJlbltzdGFydEluZGV4ICsgaV07XG4gICAgICAgIHRleHR1cmUgPSBzcHJpdGUuX3RleHR1cmU7XG4gICAgICAgIHN4ID0gc3ByaXRlLnNjYWxlLng7XG4gICAgICAgIHN5ID0gc3ByaXRlLnNjYWxlLnk7XG5cbiAgICAgICAgaWYgKHRleHR1cmUudHJpbSlcbiAgICAgICAge1xuICAgICAgICAgICAgLy8gaWYgdGhlIHNwcml0ZSBpcyB0cmltbWVkIHRoZW4gd2UgbmVlZCB0byBhZGQgdGhlIGV4dHJhIHNwYWNlIGJlZm9yZSB0cmFuc2Zvcm1pbmcgdGhlIHNwcml0ZSBjb29yZHMuLlxuICAgICAgICAgICAgdHJpbSA9IHRleHR1cmUudHJpbTtcblxuICAgICAgICAgICAgdzEgPSB0cmltLnggLSBzcHJpdGUuYW5jaG9yLnggKiB0cmltLndpZHRoO1xuICAgICAgICAgICAgdzAgPSB3MSArIHRleHR1cmUuY3JvcC53aWR0aDtcblxuICAgICAgICAgICAgaDEgPSB0cmltLnkgLSBzcHJpdGUuYW5jaG9yLnkgKiB0cmltLmhlaWdodDtcbiAgICAgICAgICAgIGgwID0gaDEgKyB0ZXh0dXJlLmNyb3AuaGVpZ2h0O1xuICAgICAgICB9XG4gICAgICAgIGVsc2VcbiAgICAgICAge1xuICAgICAgICAgICAgdzAgPSAodGV4dHVyZS5fZnJhbWUud2lkdGggKSAqICgxLXNwcml0ZS5hbmNob3IueCk7XG4gICAgICAgICAgICB3MSA9ICh0ZXh0dXJlLl9mcmFtZS53aWR0aCApICogLXNwcml0ZS5hbmNob3IueDtcblxuICAgICAgICAgICAgaDAgPSB0ZXh0dXJlLl9mcmFtZS5oZWlnaHQgKiAoMS1zcHJpdGUuYW5jaG9yLnkpO1xuICAgICAgICAgICAgaDEgPSB0ZXh0dXJlLl9mcmFtZS5oZWlnaHQgKiAtc3ByaXRlLmFuY2hvci55O1xuICAgICAgICB9XG5cbiAgICAgICAgYXJyYXlbb2Zmc2V0XSA9IHcxICogc3g7XG4gICAgICAgIGFycmF5W29mZnNldCArIDFdID0gaDEgKiBzeTtcblxuICAgICAgICBhcnJheVtvZmZzZXQgKyBzdHJpZGVdID0gdzAgKiBzeDtcbiAgICAgICAgYXJyYXlbb2Zmc2V0ICsgc3RyaWRlICsgMV0gPSBoMSAqIHN5O1xuXG4gICAgICAgIGFycmF5W29mZnNldCArIHN0cmlkZSAqIDJdID0gdzAgKiBzeDtcbiAgICAgICAgYXJyYXlbb2Zmc2V0ICsgc3RyaWRlICogMiArIDFdID0gaDAgKiBzeTtcblxuICAgICAgICBhcnJheVtvZmZzZXQgKyBzdHJpZGUgKiAzXSA9IHcxICogc3g7XG4gICAgICAgIGFycmF5W29mZnNldCArIHN0cmlkZSAqIDMgKyAxXSA9IGgwICogc3k7XG5cbiAgICAgICAgb2Zmc2V0ICs9IHN0cmlkZSAqIDQ7XG4gICAgfVxuXG59O1xuXG4vKipcbiAqXG4gKiBAcGFyYW0gY2hpbGRyZW4ge1BJWEkuRGlzcGxheU9iamVjdFtdfSB0aGUgYXJyYXkgb2YgZGlzcGxheSBvYmplY3RzIHRvIHJlbmRlclxuICogQHBhcmFtIHN0YXJ0SW5kZXgge251bWJlcn0gdGhlIGluZGV4IHRvIHN0YXJ0IGZyb20gaW4gdGhlIGNoaWxkcmVuIGFycmF5XG4gKiBAcGFyYW0gYW1vdW50IHtudW1iZXJ9IHRoZSBhbW91bnQgb2YgY2hpbGRyZW4gdGhhdCB3aWxsIGhhdmUgdGhlaXIgcG9zaXRpb25zIHVwbG9hZGVkXG4gKiBAcGFyYW0gYXJyYXkge251bWJlcltdfVxuICogQHBhcmFtIHN0cmlkZSB7bnVtYmVyfVxuICogQHBhcmFtIG9mZnNldCB7bnVtYmVyfVxuICovXG5QYXJ0aWNsZVJlbmRlcmVyLnByb3RvdHlwZS51cGxvYWRQb3NpdGlvbiA9IGZ1bmN0aW9uIChjaGlsZHJlbixzdGFydEluZGV4LCBhbW91bnQsIGFycmF5LCBzdHJpZGUsIG9mZnNldClcbntcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFtb3VudDsgaSsrKVxuICAgIHtcbiAgICAgICAgdmFyIHNwcml0ZVBvc2l0aW9uID0gY2hpbGRyZW5bc3RhcnRJbmRleCArIGldLnBvc2l0aW9uO1xuXG4gICAgICAgIGFycmF5W29mZnNldF0gPSBzcHJpdGVQb3NpdGlvbi54O1xuICAgICAgICBhcnJheVtvZmZzZXQgKyAxXSA9IHNwcml0ZVBvc2l0aW9uLnk7XG5cbiAgICAgICAgYXJyYXlbb2Zmc2V0ICsgc3RyaWRlXSA9IHNwcml0ZVBvc2l0aW9uLng7XG4gICAgICAgIGFycmF5W29mZnNldCArIHN0cmlkZSArIDFdID0gc3ByaXRlUG9zaXRpb24ueTtcblxuICAgICAgICBhcnJheVtvZmZzZXQgKyBzdHJpZGUgKiAyXSA9IHNwcml0ZVBvc2l0aW9uLng7XG4gICAgICAgIGFycmF5W29mZnNldCArIHN0cmlkZSAqIDIgKyAxXSA9IHNwcml0ZVBvc2l0aW9uLnk7XG5cbiAgICAgICAgYXJyYXlbb2Zmc2V0ICsgc3RyaWRlICogM10gPSBzcHJpdGVQb3NpdGlvbi54O1xuICAgICAgICBhcnJheVtvZmZzZXQgKyBzdHJpZGUgKiAzICsgMV0gPSBzcHJpdGVQb3NpdGlvbi55O1xuXG4gICAgICAgIG9mZnNldCArPSBzdHJpZGUgKiA0O1xuICAgIH1cblxufTtcblxuLyoqXG4gKlxuICogQHBhcmFtIGNoaWxkcmVuIHtQSVhJLkRpc3BsYXlPYmplY3RbXX0gdGhlIGFycmF5IG9mIGRpc3BsYXkgb2JqZWN0cyB0byByZW5kZXJcbiAqIEBwYXJhbSBzdGFydEluZGV4IHtudW1iZXJ9IHRoZSBpbmRleCB0byBzdGFydCBmcm9tIGluIHRoZSBjaGlsZHJlbiBhcnJheVxuICogQHBhcmFtIGFtb3VudCB7bnVtYmVyfSB0aGUgYW1vdW50IG9mIGNoaWxkcmVuIHRoYXQgd2lsbCBoYXZlIHRoZWlyIHJvdGF0aW9uIHVwbG9hZGVkXG4gKiBAcGFyYW0gYXJyYXkge251bWJlcltdfVxuICogQHBhcmFtIHN0cmlkZSB7bnVtYmVyfVxuICogQHBhcmFtIG9mZnNldCB7bnVtYmVyfVxuICovXG5QYXJ0aWNsZVJlbmRlcmVyLnByb3RvdHlwZS51cGxvYWRSb3RhdGlvbiA9IGZ1bmN0aW9uIChjaGlsZHJlbixzdGFydEluZGV4LCBhbW91bnQsIGFycmF5LCBzdHJpZGUsIG9mZnNldClcbntcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFtb3VudDsgaSsrKVxuICAgIHtcbiAgICAgICAgdmFyIHNwcml0ZVJvdGF0aW9uID0gY2hpbGRyZW5bc3RhcnRJbmRleCArIGldLnJvdGF0aW9uO1xuXG5cbiAgICAgICAgYXJyYXlbb2Zmc2V0XSA9IHNwcml0ZVJvdGF0aW9uO1xuICAgICAgICBhcnJheVtvZmZzZXQgKyBzdHJpZGVdID0gc3ByaXRlUm90YXRpb247XG4gICAgICAgIGFycmF5W29mZnNldCArIHN0cmlkZSAqIDJdID0gc3ByaXRlUm90YXRpb247XG4gICAgICAgIGFycmF5W29mZnNldCArIHN0cmlkZSAqIDNdID0gc3ByaXRlUm90YXRpb247XG5cbiAgICAgICAgb2Zmc2V0ICs9IHN0cmlkZSAqIDQ7XG4gICAgfVxufTtcblxuLyoqXG4gKlxuICogQHBhcmFtIGNoaWxkcmVuIHtQSVhJLkRpc3BsYXlPYmplY3RbXX0gdGhlIGFycmF5IG9mIGRpc3BsYXkgb2JqZWN0cyB0byByZW5kZXJcbiAqIEBwYXJhbSBzdGFydEluZGV4IHtudW1iZXJ9IHRoZSBpbmRleCB0byBzdGFydCBmcm9tIGluIHRoZSBjaGlsZHJlbiBhcnJheVxuICogQHBhcmFtIGFtb3VudCB7bnVtYmVyfSB0aGUgYW1vdW50IG9mIGNoaWxkcmVuIHRoYXQgd2lsbCBoYXZlIHRoZWlyIFV2cyB1cGxvYWRlZFxuICogQHBhcmFtIGFycmF5IHtudW1iZXJbXX1cbiAqIEBwYXJhbSBzdHJpZGUge251bWJlcn1cbiAqIEBwYXJhbSBvZmZzZXQge251bWJlcn1cbiAqL1xuUGFydGljbGVSZW5kZXJlci5wcm90b3R5cGUudXBsb2FkVXZzID0gZnVuY3Rpb24gKGNoaWxkcmVuLHN0YXJ0SW5kZXgsIGFtb3VudCwgYXJyYXksIHN0cmlkZSwgb2Zmc2V0KVxue1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYW1vdW50OyBpKyspXG4gICAge1xuICAgICAgICB2YXIgdGV4dHVyZVV2cyA9IGNoaWxkcmVuW3N0YXJ0SW5kZXggKyBpXS5fdGV4dHVyZS5fdXZzO1xuXG4gICAgICAgIGlmICh0ZXh0dXJlVXZzKVxuICAgICAgICB7XG4gICAgICAgICAgICBhcnJheVtvZmZzZXRdID0gdGV4dHVyZVV2cy54MDtcbiAgICAgICAgICAgIGFycmF5W29mZnNldCArIDFdID0gdGV4dHVyZVV2cy55MDtcblxuICAgICAgICAgICAgYXJyYXlbb2Zmc2V0ICsgc3RyaWRlXSA9IHRleHR1cmVVdnMueDE7XG4gICAgICAgICAgICBhcnJheVtvZmZzZXQgKyBzdHJpZGUgKyAxXSA9IHRleHR1cmVVdnMueTE7XG5cbiAgICAgICAgICAgIGFycmF5W29mZnNldCArIHN0cmlkZSAqIDJdID0gdGV4dHVyZVV2cy54MjtcbiAgICAgICAgICAgIGFycmF5W29mZnNldCArIHN0cmlkZSAqIDIgKyAxXSA9IHRleHR1cmVVdnMueTI7XG5cbiAgICAgICAgICAgIGFycmF5W29mZnNldCArIHN0cmlkZSAqIDNdID0gdGV4dHVyZVV2cy54MztcbiAgICAgICAgICAgIGFycmF5W29mZnNldCArIHN0cmlkZSAqIDMgKyAxXSA9IHRleHR1cmVVdnMueTM7XG5cbiAgICAgICAgICAgIG9mZnNldCArPSBzdHJpZGUgKiA0O1xuICAgICAgICB9XG4gICAgICAgIGVsc2VcbiAgICAgICAge1xuICAgICAgICAgICAgLy9UT0RPIHlvdSBrbm93IHRoaXMgY2FuIGJlIGVhc2llciFcbiAgICAgICAgICAgIGFycmF5W29mZnNldF0gPSAwO1xuICAgICAgICAgICAgYXJyYXlbb2Zmc2V0ICsgMV0gPSAwO1xuXG4gICAgICAgICAgICBhcnJheVtvZmZzZXQgKyBzdHJpZGVdID0gMDtcbiAgICAgICAgICAgIGFycmF5W29mZnNldCArIHN0cmlkZSArIDFdID0gMDtcblxuICAgICAgICAgICAgYXJyYXlbb2Zmc2V0ICsgc3RyaWRlICogMl0gPSAwO1xuICAgICAgICAgICAgYXJyYXlbb2Zmc2V0ICsgc3RyaWRlICogMiArIDFdID0gMDtcblxuICAgICAgICAgICAgYXJyYXlbb2Zmc2V0ICsgc3RyaWRlICogM10gPSAwO1xuICAgICAgICAgICAgYXJyYXlbb2Zmc2V0ICsgc3RyaWRlICogMyArIDFdID0gMDtcblxuICAgICAgICAgICAgb2Zmc2V0ICs9IHN0cmlkZSAqIDQ7XG4gICAgICAgIH1cbiAgICB9XG59O1xuXG4vKipcbiAqXG4gKiBAcGFyYW0gY2hpbGRyZW4ge1BJWEkuRGlzcGxheU9iamVjdFtdfSB0aGUgYXJyYXkgb2YgZGlzcGxheSBvYmplY3RzIHRvIHJlbmRlclxuICogQHBhcmFtIHN0YXJ0SW5kZXgge251bWJlcn0gdGhlIGluZGV4IHRvIHN0YXJ0IGZyb20gaW4gdGhlIGNoaWxkcmVuIGFycmF5XG4gKiBAcGFyYW0gYW1vdW50IHtudW1iZXJ9IHRoZSBhbW91bnQgb2YgY2hpbGRyZW4gdGhhdCB3aWxsIGhhdmUgdGhlaXIgYWxwaGEgdXBsb2FkZWRcbiAqIEBwYXJhbSBhcnJheSB7bnVtYmVyW119XG4gKiBAcGFyYW0gc3RyaWRlIHtudW1iZXJ9XG4gKiBAcGFyYW0gb2Zmc2V0IHtudW1iZXJ9XG4gKi9cblBhcnRpY2xlUmVuZGVyZXIucHJvdG90eXBlLnVwbG9hZEFscGhhID0gZnVuY3Rpb24gKGNoaWxkcmVuLHN0YXJ0SW5kZXgsIGFtb3VudCwgYXJyYXksIHN0cmlkZSwgb2Zmc2V0KVxue1xuICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFtb3VudDsgaSsrKVxuICAgICB7XG4gICAgICAgIHZhciBzcHJpdGVBbHBoYSA9IGNoaWxkcmVuW3N0YXJ0SW5kZXggKyBpXS5hbHBoYTtcblxuICAgICAgICBhcnJheVtvZmZzZXRdID0gc3ByaXRlQWxwaGE7XG4gICAgICAgIGFycmF5W29mZnNldCArIHN0cmlkZV0gPSBzcHJpdGVBbHBoYTtcbiAgICAgICAgYXJyYXlbb2Zmc2V0ICsgc3RyaWRlICogMl0gPSBzcHJpdGVBbHBoYTtcbiAgICAgICAgYXJyYXlbb2Zmc2V0ICsgc3RyaWRlICogM10gPSBzcHJpdGVBbHBoYTtcblxuICAgICAgICBvZmZzZXQgKz0gc3RyaWRlICogNDtcbiAgICB9XG59O1xuXG5cbi8qKlxuICogRGVzdHJveXMgdGhlIFBhcnRpY2xlUmVuZGVyZXIuXG4gKlxuICovXG5QYXJ0aWNsZVJlbmRlcmVyLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKClcbntcbiAgICBpZiAodGhpcy5yZW5kZXJlci5nbCkge1xuICAgICAgICB0aGlzLnJlbmRlcmVyLmdsLmRlbGV0ZUJ1ZmZlcih0aGlzLmluZGV4QnVmZmVyKTtcbiAgICB9XG5cbiAgICBPYmplY3RSZW5kZXJlci5wcm90b3R5cGUuZGVzdHJveS5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuXG4gICAgdGhpcy5zaGFkZXIuZGVzdHJveSgpO1xuXG4gICAgdGhpcy5pbmRpY2VzID0gbnVsbDtcbiAgICB0aGlzLnRlbXBNYXRyaXggPSBudWxsO1xufTtcbiIsInZhciBUZXh0dXJlU2hhZGVyID0gcmVxdWlyZSgnLi4vLi4vcmVuZGVyZXJzL3dlYmdsL3NoYWRlcnMvVGV4dHVyZVNoYWRlcicpO1xuXG4vKipcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5UZXh0dXJlU2hhZGVyXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIHNoYWRlck1hbmFnZXIge1NoYWRlck1hbmFnZXJ9IFRoZSB3ZWJnbCBzaGFkZXIgbWFuYWdlciB0aGlzIHNoYWRlciB3b3JrcyBmb3IuXG4gKi9cbmZ1bmN0aW9uIFBhcnRpY2xlU2hhZGVyKHNoYWRlck1hbmFnZXIpXG57XG4gICAgVGV4dHVyZVNoYWRlci5jYWxsKHRoaXMsXG4gICAgICAgIHNoYWRlck1hbmFnZXIsXG4gICAgICAgIC8vIHZlcnRleCBzaGFkZXJcbiAgICAgICAgW1xuICAgICAgICAgICAgJ2F0dHJpYnV0ZSB2ZWMyIGFWZXJ0ZXhQb3NpdGlvbjsnLFxuICAgICAgICAgICAgJ2F0dHJpYnV0ZSB2ZWMyIGFUZXh0dXJlQ29vcmQ7JyxcbiAgICAgICAgICAgICdhdHRyaWJ1dGUgZmxvYXQgYUNvbG9yOycsXG5cbiAgICAgICAgICAgICdhdHRyaWJ1dGUgdmVjMiBhUG9zaXRpb25Db29yZDsnLFxuICAgICAgICAgICAgJ2F0dHJpYnV0ZSB2ZWMyIGFTY2FsZTsnLFxuICAgICAgICAgICAgJ2F0dHJpYnV0ZSBmbG9hdCBhUm90YXRpb247JyxcblxuICAgICAgICAgICAgJ3VuaWZvcm0gbWF0MyBwcm9qZWN0aW9uTWF0cml4OycsXG5cbiAgICAgICAgICAgICd2YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDsnLFxuICAgICAgICAgICAgJ3ZhcnlpbmcgZmxvYXQgdkNvbG9yOycsXG5cbiAgICAgICAgICAgICd2b2lkIG1haW4odm9pZCl7JyxcbiAgICAgICAgICAgICcgICB2ZWMyIHYgPSBhVmVydGV4UG9zaXRpb247JyxcblxuICAgICAgICAgICAgJyAgIHYueCA9IChhVmVydGV4UG9zaXRpb24ueCkgKiBjb3MoYVJvdGF0aW9uKSAtIChhVmVydGV4UG9zaXRpb24ueSkgKiBzaW4oYVJvdGF0aW9uKTsnLFxuICAgICAgICAgICAgJyAgIHYueSA9IChhVmVydGV4UG9zaXRpb24ueCkgKiBzaW4oYVJvdGF0aW9uKSArIChhVmVydGV4UG9zaXRpb24ueSkgKiBjb3MoYVJvdGF0aW9uKTsnLFxuICAgICAgICAgICAgJyAgIHYgPSB2ICsgYVBvc2l0aW9uQ29vcmQ7JyxcblxuICAgICAgICAgICAgJyAgIGdsX1Bvc2l0aW9uID0gdmVjNCgocHJvamVjdGlvbk1hdHJpeCAqIHZlYzModiwgMS4wKSkueHksIDAuMCwgMS4wKTsnLFxuXG4gICAgICAgICAgICAnICAgdlRleHR1cmVDb29yZCA9IGFUZXh0dXJlQ29vcmQ7JyxcbiAgICAgICAgICAgICcgICB2Q29sb3IgPSBhQ29sb3I7JyxcbiAgICAgICAgICAgICd9J1xuICAgICAgICBdLmpvaW4oJ1xcbicpLFxuICAgICAgICAvLyBoZWxsb1xuICAgICAgICAgW1xuICAgICAgICAgICAgJ3ByZWNpc2lvbiBsb3dwIGZsb2F0OycsXG5cbiAgICAgICAgICAgICd2YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDsnLFxuICAgICAgICAgICAgJ3ZhcnlpbmcgZmxvYXQgdkNvbG9yOycsXG5cbiAgICAgICAgICAgICd1bmlmb3JtIHNhbXBsZXIyRCB1U2FtcGxlcjsnLFxuICAgICAgICAgICAgJ3VuaWZvcm0gZmxvYXQgdUFscGhhOycsXG5cbiAgICAgICAgICAgICd2b2lkIG1haW4odm9pZCl7JyxcbiAgICAgICAgICAgICcgIHZlYzQgY29sb3IgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZUZXh0dXJlQ29vcmQpICogdkNvbG9yICogdUFscGhhOycsXG4gICAgICAgICAgICAnICBpZiAoY29sb3IuYSA9PSAwLjApIGRpc2NhcmQ7JyxcbiAgICAgICAgICAgICcgIGdsX0ZyYWdDb2xvciA9IGNvbG9yOycsXG4gICAgICAgICAgICAnfSdcbiAgICAgICAgXS5qb2luKCdcXG4nKSxcbiAgICAgICAgLy8gY3VzdG9tIHVuaWZvcm1zXG4gICAgICAgIHtcbiAgICAgICAgICAgIHVBbHBoYTogIHsgdHlwZTogJzFmJywgdmFsdWU6IDEgfVxuICAgICAgICB9LFxuICAgICAgICAvLyBjdXN0b20gYXR0cmlidXRlc1xuICAgICAgICB7XG4gICAgICAgICAgICBhUG9zaXRpb25Db29yZDogMCxcbiAgICAgICAgICAgLy8gYVNjYWxlOiAgICAgICAgIDAsXG4gICAgICAgICAgICBhUm90YXRpb246ICAgICAgMFxuICAgICAgICB9XG4gICAgKTtcblxuICAgIC8vIFRFTVAgSEFDS1xuXG59XG5cblBhcnRpY2xlU2hhZGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoVGV4dHVyZVNoYWRlci5wcm90b3R5cGUpO1xuUGFydGljbGVTaGFkZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gUGFydGljbGVTaGFkZXI7XG5cbm1vZHVsZS5leHBvcnRzID0gUGFydGljbGVTaGFkZXI7XG4iLCJ2YXIgdXRpbHMgPSByZXF1aXJlKCcuLi91dGlscycpLFxuICAgIG1hdGggPSByZXF1aXJlKCcuLi9tYXRoJyksXG4gICAgQ09OU1QgPSByZXF1aXJlKCcuLi9jb25zdCcpLFxuICAgIEV2ZW50RW1pdHRlciA9IHJlcXVpcmUoJ2V2ZW50ZW1pdHRlcjMnKTtcblxuLyoqXG4gKiBUaGUgQ2FudmFzUmVuZGVyZXIgZHJhd3MgdGhlIHNjZW5lIGFuZCBhbGwgaXRzIGNvbnRlbnQgb250byBhIDJkIGNhbnZhcy4gVGhpcyByZW5kZXJlciBzaG91bGQgYmUgdXNlZCBmb3IgYnJvd3NlcnMgdGhhdCBkbyBub3Qgc3VwcG9ydCB3ZWJHTC5cbiAqIERvbid0IGZvcmdldCB0byBhZGQgdGhlIENhbnZhc1JlbmRlcmVyLnZpZXcgdG8geW91ciBET00gb3IgeW91IHdpbGwgbm90IHNlZSBhbnl0aGluZyA6KVxuICpcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqIEBwYXJhbSBzeXN0ZW0ge3N0cmluZ30gVGhlIG5hbWUgb2YgdGhlIHN5c3RlbSB0aGlzIHJlbmRlcmVyIGlzIGZvci5cbiAqIEBwYXJhbSBbd2lkdGg9ODAwXSB7bnVtYmVyfSB0aGUgd2lkdGggb2YgdGhlIGNhbnZhcyB2aWV3XG4gKiBAcGFyYW0gW2hlaWdodD02MDBdIHtudW1iZXJ9IHRoZSBoZWlnaHQgb2YgdGhlIGNhbnZhcyB2aWV3XG4gKiBAcGFyYW0gW29wdGlvbnNdIHtvYmplY3R9IFRoZSBvcHRpb25hbCByZW5kZXJlciBwYXJhbWV0ZXJzXG4gKiBAcGFyYW0gW29wdGlvbnMudmlld10ge0hUTUxDYW52YXNFbGVtZW50fSB0aGUgY2FudmFzIHRvIHVzZSBhcyBhIHZpZXcsIG9wdGlvbmFsXG4gKiBAcGFyYW0gW29wdGlvbnMudHJhbnNwYXJlbnQ9ZmFsc2VdIHtib29sZWFufSBJZiB0aGUgcmVuZGVyIHZpZXcgaXMgdHJhbnNwYXJlbnQsIGRlZmF1bHQgZmFsc2VcbiAqIEBwYXJhbSBbb3B0aW9ucy5hdXRvUmVzaXplPWZhbHNlXSB7Ym9vbGVhbn0gSWYgdGhlIHJlbmRlciB2aWV3IGlzIGF1dG9tYXRpY2FsbHkgcmVzaXplZCwgZGVmYXVsdCBmYWxzZVxuICogQHBhcmFtIFtvcHRpb25zLmFudGlhbGlhcz1mYWxzZV0ge2Jvb2xlYW59IHNldHMgYW50aWFsaWFzIChvbmx5IGFwcGxpY2FibGUgaW4gY2hyb21lIGF0IHRoZSBtb21lbnQpXG4gKiBAcGFyYW0gW29wdGlvbnMucmVzb2x1dGlvbj0xXSB7bnVtYmVyfSB0aGUgcmVzb2x1dGlvbiBvZiB0aGUgcmVuZGVyZXIgcmV0aW5hIHdvdWxkIGJlIDJcbiAqIEBwYXJhbSBbb3B0aW9ucy5jbGVhckJlZm9yZVJlbmRlcj10cnVlXSB7Ym9vbGVhbn0gVGhpcyBzZXRzIGlmIHRoZSBDYW52YXNSZW5kZXJlciB3aWxsIGNsZWFyIHRoZSBjYW52YXMgb3JcbiAqICAgICAgbm90IGJlZm9yZSB0aGUgbmV3IHJlbmRlciBwYXNzLlxuICogQHBhcmFtIFtvcHRpb25zLmJhY2tncm91bmRDb2xvcj0weDAwMDAwMF0ge251bWJlcn0gVGhlIGJhY2tncm91bmQgY29sb3Igb2YgdGhlIHJlbmRlcmVkIGFyZWEgKHNob3duIGlmIG5vdCB0cmFuc3BhcmVudCkuXG4gKiBAcGFyYW0gW29wdGlvbnMucm91bmRQaXhlbHM9ZmFsc2VdIHtib29sZWFufSBJZiB0cnVlIFBpeGkgd2lsbCBNYXRoLmZsb29yKCkgeC95IHZhbHVlcyB3aGVuIHJlbmRlcmluZywgc3RvcHBpbmcgcGl4ZWwgaW50ZXJwb2xhdGlvbi5cbiAqL1xuZnVuY3Rpb24gU3lzdGVtUmVuZGVyZXIoc3lzdGVtLCB3aWR0aCwgaGVpZ2h0LCBvcHRpb25zKVxue1xuICAgIEV2ZW50RW1pdHRlci5jYWxsKHRoaXMpO1xuXG4gICAgdXRpbHMuc2F5SGVsbG8oc3lzdGVtKTtcblxuICAgIC8vIHByZXBhcmUgb3B0aW9uc1xuICAgIGlmIChvcHRpb25zKVxuICAgIHtcbiAgICAgICAgZm9yICh2YXIgaSBpbiBDT05TVC5ERUZBVUxUX1JFTkRFUl9PUFRJT05TKVxuICAgICAgICB7XG4gICAgICAgICAgICBpZiAodHlwZW9mIG9wdGlvbnNbaV0gPT09ICd1bmRlZmluZWQnKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIG9wdGlvbnNbaV0gPSBDT05TVC5ERUZBVUxUX1JFTkRFUl9PUFRJT05TW2ldO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIG9wdGlvbnMgPSBDT05TVC5ERUZBVUxUX1JFTkRFUl9PUFRJT05TO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoZSB0eXBlIG9mIHRoZSByZW5kZXJlci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCBQSVhJLlJFTkRFUkVSX1RZUEUuVU5LTk9XTlxuICAgICAqIEBzZWUgUElYSS5SRU5ERVJFUl9UWVBFXG4gICAgICovXG4gICAgdGhpcy50eXBlID0gQ09OU1QuUkVOREVSRVJfVFlQRS5VTktOT1dOO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHdpZHRoIG9mIHRoZSBjYW52YXMgdmlld1xuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDgwMFxuICAgICAqL1xuICAgIHRoaXMud2lkdGggPSB3aWR0aCB8fCA4MDA7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgaGVpZ2h0IG9mIHRoZSBjYW52YXMgdmlld1xuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDYwMFxuICAgICAqL1xuICAgIHRoaXMuaGVpZ2h0ID0gaGVpZ2h0IHx8IDYwMDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBjYW52YXMgZWxlbWVudCB0aGF0IGV2ZXJ5dGhpbmcgaXMgZHJhd24gdG9cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge0hUTUxDYW52YXNFbGVtZW50fVxuICAgICAqL1xuICAgIHRoaXMudmlldyA9IG9wdGlvbnMudmlldyB8fCBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdjYW52YXMnKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSByZXNvbHV0aW9uIG9mIHRoZSByZW5kZXJlclxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDFcbiAgICAgKi9cbiAgICB0aGlzLnJlc29sdXRpb24gPSBvcHRpb25zLnJlc29sdXRpb247XG5cbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIHRoZSByZW5kZXIgdmlldyBpcyB0cmFuc3BhcmVudFxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKi9cbiAgICB0aGlzLnRyYW5zcGFyZW50ID0gb3B0aW9ucy50cmFuc3BhcmVudDtcblxuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgdGhlIHJlbmRlciB2aWV3IHNob3VsZCBiZSByZXNpemVkIGF1dG9tYXRpY2FsbHlcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICovXG4gICAgdGhpcy5hdXRvUmVzaXplID0gb3B0aW9ucy5hdXRvUmVzaXplIHx8IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogVHJhY2tzIHRoZSBibGVuZCBtb2RlcyB1c2VmdWwgZm9yIHRoaXMgcmVuZGVyZXIuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtvYmplY3Q8c3RyaW5nLCBtaXhlZD59XG4gICAgICovXG4gICAgdGhpcy5ibGVuZE1vZGVzID0gbnVsbDtcblxuICAgIC8qKlxuICAgICAqIFRoZSB2YWx1ZSBvZiB0aGUgcHJlc2VydmVEcmF3aW5nQnVmZmVyIGZsYWcgYWZmZWN0cyB3aGV0aGVyIG9yIG5vdCB0aGUgY29udGVudHMgb2YgdGhlIHN0ZW5jaWwgYnVmZmVyIGlzIHJldGFpbmVkIGFmdGVyIHJlbmRlcmluZy5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICovXG4gICAgdGhpcy5wcmVzZXJ2ZURyYXdpbmdCdWZmZXIgPSBvcHRpb25zLnByZXNlcnZlRHJhd2luZ0J1ZmZlcjtcblxuICAgIC8qKlxuICAgICAqIFRoaXMgc2V0cyBpZiB0aGUgQ2FudmFzUmVuZGVyZXIgd2lsbCBjbGVhciB0aGUgY2FudmFzIG9yIG5vdCBiZWZvcmUgdGhlIG5ldyByZW5kZXIgcGFzcy5cbiAgICAgKiBJZiB0aGUgc2NlbmUgaXMgTk9UIHRyYW5zcGFyZW50IFBpeGkgd2lsbCB1c2UgYSBjYW52YXMgc2l6ZWQgZmlsbFJlY3Qgb3BlcmF0aW9uIGV2ZXJ5IGZyYW1lIHRvIHNldCB0aGUgY2FudmFzIGJhY2tncm91bmQgY29sb3IuXG4gICAgICogSWYgdGhlIHNjZW5lIGlzIHRyYW5zcGFyZW50IFBpeGkgd2lsbCB1c2UgY2xlYXJSZWN0IHRvIGNsZWFyIHRoZSBjYW52YXMgZXZlcnkgZnJhbWUuXG4gICAgICogRGlzYWJsZSB0aGlzIGJ5IHNldHRpbmcgdGhpcyB0byBmYWxzZS4gRm9yIGV4YW1wbGUgaWYgeW91ciBnYW1lIGhhcyBhIGNhbnZhcyBmaWxsaW5nIGJhY2tncm91bmQgaW1hZ2UgeW91IG9mdGVuIGRvbid0IG5lZWQgdGhpcyBzZXQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqIEBkZWZhdWx0XG4gICAgICovXG4gICAgdGhpcy5jbGVhckJlZm9yZVJlbmRlciA9IG9wdGlvbnMuY2xlYXJCZWZvcmVSZW5kZXI7XG5cbiAgICAvKipcbiAgICAgKiBJZiB0cnVlIFBpeGkgd2lsbCBNYXRoLmZsb29yKCkgeC95IHZhbHVlcyB3aGVuIHJlbmRlcmluZywgc3RvcHBpbmcgcGl4ZWwgaW50ZXJwb2xhdGlvbi5cbiAgICAgKiBIYW5keSBmb3IgY3Jpc3AgcGl4ZWwgYXJ0IGFuZCBzcGVlZCBvbiBsZWdhY3kgZGV2aWNlcy5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICovXG4gICAgdGhpcy5yb3VuZFBpeGVscyA9IG9wdGlvbnMucm91bmRQaXhlbHM7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYmFja2dyb3VuZCBjb2xvciBhcyBhIG51bWJlci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX2JhY2tncm91bmRDb2xvciA9IDB4MDAwMDAwO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGJhY2tncm91bmQgY29sb3IgYXMgYW4gW1IsIEcsIEJdIGFycmF5LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyW119XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9iYWNrZ3JvdW5kQ29sb3JSZ2JhID0gWzAsIDAsIDAsIDBdO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGJhY2tncm91bmQgY29sb3IgYXMgYSBzdHJpbmcuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtzdHJpbmd9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9iYWNrZ3JvdW5kQ29sb3JTdHJpbmcgPSAnIzAwMDAwMCc7XG5cbiAgICB0aGlzLmJhY2tncm91bmRDb2xvciA9IG9wdGlvbnMuYmFja2dyb3VuZENvbG9yIHx8IHRoaXMuX2JhY2tncm91bmRDb2xvcjsgLy8gcnVuIGJnIGNvbG9yIHNldHRlclxuXG4gICAgLyoqXG4gICAgICogVGhpcyB0ZW1wb3JhcnkgZGlzcGxheSBvYmplY3QgdXNlZCBhcyB0aGUgcGFyZW50IG9mIHRoZSBjdXJyZW50bHkgYmVpbmcgcmVuZGVyZWQgaXRlbVxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5EaXNwbGF5T2JqZWN0fVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fdGVtcERpc3BsYXlPYmplY3RQYXJlbnQgPSB7d29ybGRUcmFuc2Zvcm06bmV3IG1hdGguTWF0cml4KCksIHdvcmxkQWxwaGE6MSwgY2hpbGRyZW46W119O1xuXG4gICAgLyoqXG4gICAgICogVGhlIGxhc3Qgcm9vdCBvYmplY3QgdGhhdCB0aGUgcmVuZGVyZXIgdHJpZWQgdG8gcmVuZGVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5EaXNwbGF5T2JqZWN0fVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fbGFzdE9iamVjdFJlbmRlcmVkID0gdGhpcy5fdGVtcERpc3BsYXlPYmplY3RQYXJlbnQ7XG59XG5cbi8vIGNvbnN0cnVjdG9yXG5TeXN0ZW1SZW5kZXJlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKEV2ZW50RW1pdHRlci5wcm90b3R5cGUpO1xuU3lzdGVtUmVuZGVyZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gU3lzdGVtUmVuZGVyZXI7XG5tb2R1bGUuZXhwb3J0cyA9IFN5c3RlbVJlbmRlcmVyO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhTeXN0ZW1SZW5kZXJlci5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBUaGUgYmFja2dyb3VuZCBjb2xvciB0byBmaWxsIGlmIG5vdCB0cmFuc3BhcmVudFxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLlN5c3RlbVJlbmRlcmVyI1xuICAgICAqL1xuICAgIGJhY2tncm91bmRDb2xvcjpcbiAgICB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2JhY2tncm91bmRDb2xvcjtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLl9iYWNrZ3JvdW5kQ29sb3IgPSB2YWw7XG4gICAgICAgICAgICB0aGlzLl9iYWNrZ3JvdW5kQ29sb3JTdHJpbmcgPSB1dGlscy5oZXgyc3RyaW5nKHZhbCk7XG4gICAgICAgICAgICB1dGlscy5oZXgycmdiKHZhbCwgdGhpcy5fYmFja2dyb3VuZENvbG9yUmdiYSk7XG4gICAgICAgIH1cbiAgICB9XG59KTtcblxuLyoqXG4gKiBSZXNpemVzIHRoZSBjYW52YXMgdmlldyB0byB0aGUgc3BlY2lmaWVkIHdpZHRoIGFuZCBoZWlnaHRcbiAqXG4gKiBAcGFyYW0gd2lkdGgge251bWJlcn0gdGhlIG5ldyB3aWR0aCBvZiB0aGUgY2FudmFzIHZpZXdcbiAqIEBwYXJhbSBoZWlnaHQge251bWJlcn0gdGhlIG5ldyBoZWlnaHQgb2YgdGhlIGNhbnZhcyB2aWV3XG4gKi9cblN5c3RlbVJlbmRlcmVyLnByb3RvdHlwZS5yZXNpemUgPSBmdW5jdGlvbiAod2lkdGgsIGhlaWdodCkge1xuICAgIHRoaXMud2lkdGggPSB3aWR0aCAqIHRoaXMucmVzb2x1dGlvbjtcbiAgICB0aGlzLmhlaWdodCA9IGhlaWdodCAqIHRoaXMucmVzb2x1dGlvbjtcblxuICAgIHRoaXMudmlldy53aWR0aCA9IHRoaXMud2lkdGg7XG4gICAgdGhpcy52aWV3LmhlaWdodCA9IHRoaXMuaGVpZ2h0O1xuXG4gICAgaWYgKHRoaXMuYXV0b1Jlc2l6ZSlcbiAgICB7XG4gICAgICAgIHRoaXMudmlldy5zdHlsZS53aWR0aCA9IHRoaXMud2lkdGggLyB0aGlzLnJlc29sdXRpb24gKyAncHgnO1xuICAgICAgICB0aGlzLnZpZXcuc3R5bGUuaGVpZ2h0ID0gdGhpcy5oZWlnaHQgLyB0aGlzLnJlc29sdXRpb24gKyAncHgnO1xuICAgIH1cbn07XG5cbi8qKlxuICogUmVtb3ZlcyBldmVyeXRoaW5nIGZyb20gdGhlIHJlbmRlcmVyIGFuZCBvcHRpb25hbGx5IHJlbW92ZXMgdGhlIENhbnZhcyBET00gZWxlbWVudC5cbiAqXG4gKiBAcGFyYW0gW3JlbW92ZVZpZXc9ZmFsc2VdIHtib29sZWFufSBSZW1vdmVzIHRoZSBDYW52YXMgZWxlbWVudCBmcm9tIHRoZSBET00uXG4gKi9cblN5c3RlbVJlbmRlcmVyLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKHJlbW92ZVZpZXcpIHtcbiAgICBpZiAocmVtb3ZlVmlldyAmJiB0aGlzLnZpZXcucGFyZW50Tm9kZSlcbiAgICB7XG4gICAgICAgIHRoaXMudmlldy5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHRoaXMudmlldyk7XG4gICAgfVxuXG4gICAgdGhpcy50eXBlID0gQ09OU1QuUkVOREVSRVJfVFlQRS5VTktOT1dOO1xuXG4gICAgdGhpcy53aWR0aCA9IDA7XG4gICAgdGhpcy5oZWlnaHQgPSAwO1xuXG4gICAgdGhpcy52aWV3ID0gbnVsbDtcblxuICAgIHRoaXMucmVzb2x1dGlvbiA9IDA7XG5cbiAgICB0aGlzLnRyYW5zcGFyZW50ID0gZmFsc2U7XG5cbiAgICB0aGlzLmF1dG9SZXNpemUgPSBmYWxzZTtcblxuICAgIHRoaXMuYmxlbmRNb2RlcyA9IG51bGw7XG5cbiAgICB0aGlzLnByZXNlcnZlRHJhd2luZ0J1ZmZlciA9IGZhbHNlO1xuICAgIHRoaXMuY2xlYXJCZWZvcmVSZW5kZXIgPSBmYWxzZTtcblxuICAgIHRoaXMucm91bmRQaXhlbHMgPSBmYWxzZTtcblxuICAgIHRoaXMuX2JhY2tncm91bmRDb2xvciA9IDA7XG4gICAgdGhpcy5fYmFja2dyb3VuZENvbG9yUmdiYSA9IG51bGw7XG4gICAgdGhpcy5fYmFja2dyb3VuZENvbG9yU3RyaW5nID0gbnVsbDtcbn07XG4iLCJ2YXIgU3lzdGVtUmVuZGVyZXIgPSByZXF1aXJlKCcuLi9TeXN0ZW1SZW5kZXJlcicpLFxuICAgIENhbnZhc01hc2tNYW5hZ2VyID0gcmVxdWlyZSgnLi91dGlscy9DYW52YXNNYXNrTWFuYWdlcicpLFxuICAgIHV0aWxzID0gcmVxdWlyZSgnLi4vLi4vdXRpbHMnKSxcbiAgICBtYXRoID0gcmVxdWlyZSgnLi4vLi4vbWF0aCcpLFxuICAgIENPTlNUID0gcmVxdWlyZSgnLi4vLi4vY29uc3QnKTtcblxuLyoqXG4gKiBUaGUgQ2FudmFzUmVuZGVyZXIgZHJhd3MgdGhlIHNjZW5lIGFuZCBhbGwgaXRzIGNvbnRlbnQgb250byBhIDJkIGNhbnZhcy4gVGhpcyByZW5kZXJlciBzaG91bGQgYmUgdXNlZCBmb3IgYnJvd3NlcnMgdGhhdCBkbyBub3Qgc3VwcG9ydCB3ZWJHTC5cbiAqIERvbid0IGZvcmdldCB0byBhZGQgdGhlIENhbnZhc1JlbmRlcmVyLnZpZXcgdG8geW91ciBET00gb3IgeW91IHdpbGwgbm90IHNlZSBhbnl0aGluZyA6KVxuICpcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqIEBleHRlbmRzIFBJWEkuU3lzdGVtUmVuZGVyZXJcbiAqIEBwYXJhbSBbd2lkdGg9ODAwXSB7bnVtYmVyfSB0aGUgd2lkdGggb2YgdGhlIGNhbnZhcyB2aWV3XG4gKiBAcGFyYW0gW2hlaWdodD02MDBdIHtudW1iZXJ9IHRoZSBoZWlnaHQgb2YgdGhlIGNhbnZhcyB2aWV3XG4gKiBAcGFyYW0gW29wdGlvbnNdIHtvYmplY3R9IFRoZSBvcHRpb25hbCByZW5kZXJlciBwYXJhbWV0ZXJzXG4gKiBAcGFyYW0gW29wdGlvbnMudmlld10ge0hUTUxDYW52YXNFbGVtZW50fSB0aGUgY2FudmFzIHRvIHVzZSBhcyBhIHZpZXcsIG9wdGlvbmFsXG4gKiBAcGFyYW0gW29wdGlvbnMudHJhbnNwYXJlbnQ9ZmFsc2VdIHtib29sZWFufSBJZiB0aGUgcmVuZGVyIHZpZXcgaXMgdHJhbnNwYXJlbnQsIGRlZmF1bHQgZmFsc2VcbiAqIEBwYXJhbSBbb3B0aW9ucy5hdXRvUmVzaXplPWZhbHNlXSB7Ym9vbGVhbn0gSWYgdGhlIHJlbmRlciB2aWV3IGlzIGF1dG9tYXRpY2FsbHkgcmVzaXplZCwgZGVmYXVsdCBmYWxzZVxuICogQHBhcmFtIFtvcHRpb25zLmFudGlhbGlhcz1mYWxzZV0ge2Jvb2xlYW59IHNldHMgYW50aWFsaWFzIChvbmx5IGFwcGxpY2FibGUgaW4gY2hyb21lIGF0IHRoZSBtb21lbnQpXG4gKiBAcGFyYW0gW29wdGlvbnMucmVzb2x1dGlvbj0xXSB7bnVtYmVyfSB0aGUgcmVzb2x1dGlvbiBvZiB0aGUgcmVuZGVyZXIgcmV0aW5hIHdvdWxkIGJlIDJcbiAqIEBwYXJhbSBbb3B0aW9ucy5jbGVhckJlZm9yZVJlbmRlcj10cnVlXSB7Ym9vbGVhbn0gVGhpcyBzZXRzIGlmIHRoZSBDYW52YXNSZW5kZXJlciB3aWxsIGNsZWFyIHRoZSBjYW52YXMgb3JcbiAqICAgICAgbm90IGJlZm9yZSB0aGUgbmV3IHJlbmRlciBwYXNzLlxuICogQHBhcmFtIFtvcHRpb25zLnJvdW5kUGl4ZWxzPWZhbHNlXSB7Ym9vbGVhbn0gSWYgdHJ1ZSBQaXhpIHdpbGwgTWF0aC5mbG9vcigpIHgveSB2YWx1ZXMgd2hlbiByZW5kZXJpbmcsIHN0b3BwaW5nIHBpeGVsIGludGVycG9sYXRpb24uXG4gKi9cbmZ1bmN0aW9uIENhbnZhc1JlbmRlcmVyKHdpZHRoLCBoZWlnaHQsIG9wdGlvbnMpXG57XG4gICAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG5cbiAgICBTeXN0ZW1SZW5kZXJlci5jYWxsKHRoaXMsICdDYW52YXMnLCB3aWR0aCwgaGVpZ2h0LCBvcHRpb25zKTtcblxuICAgIHRoaXMudHlwZSA9IENPTlNULlJFTkRFUkVSX1RZUEUuQ0FOVkFTO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGNhbnZhcyAyZCBjb250ZXh0IHRoYXQgZXZlcnl0aGluZyBpcyBkcmF3biB3aXRoLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEfVxuICAgICAqL1xuICAgIHRoaXMuY29udGV4dCA9IHRoaXMudmlldy5nZXRDb250ZXh0KCcyZCcsIHsgYWxwaGE6IHRoaXMudHJhbnNwYXJlbnQgfSk7XG5cbiAgICAvKipcbiAgICAgKiBCb29sZWFuIGZsYWcgY29udHJvbGxpbmcgY2FudmFzIHJlZnJlc2guXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqL1xuICAgIHRoaXMucmVmcmVzaCA9IHRydWU7XG5cbiAgICAvKipcbiAgICAgKiBJbnN0YW5jZSBvZiBhIENhbnZhc01hc2tNYW5hZ2VyLCBoYW5kbGVzIG1hc2tpbmcgd2hlbiB1c2luZyB0aGUgY2FudmFzIHJlbmRlcmVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5DYW52YXNNYXNrTWFuYWdlcn1cbiAgICAgKi9cbiAgICB0aGlzLm1hc2tNYW5hZ2VyID0gbmV3IENhbnZhc01hc2tNYW5hZ2VyKCk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgY2FudmFzIHByb3BlcnR5IHVzZWQgdG8gc2V0IHRoZSBjYW52YXMgc21vb3RoaW5nIHByb3BlcnR5LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7c3RyaW5nfVxuICAgICAqL1xuICAgIHRoaXMuc21vb3RoUHJvcGVydHkgPSAnaW1hZ2VTbW9vdGhpbmdFbmFibGVkJztcblxuICAgIGlmICghdGhpcy5jb250ZXh0LmltYWdlU21vb3RoaW5nRW5hYmxlZClcbiAgICB7XG4gICAgICAgIGlmICh0aGlzLmNvbnRleHQud2Via2l0SW1hZ2VTbW9vdGhpbmdFbmFibGVkKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnNtb290aFByb3BlcnR5ID0gJ3dlYmtpdEltYWdlU21vb3RoaW5nRW5hYmxlZCc7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodGhpcy5jb250ZXh0Lm1vekltYWdlU21vb3RoaW5nRW5hYmxlZClcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5zbW9vdGhQcm9wZXJ0eSA9ICdtb3pJbWFnZVNtb290aGluZ0VuYWJsZWQnO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHRoaXMuY29udGV4dC5vSW1hZ2VTbW9vdGhpbmdFbmFibGVkKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnNtb290aFByb3BlcnR5ID0gJ29JbWFnZVNtb290aGluZ0VuYWJsZWQnO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHRoaXMuY29udGV4dC5tc0ltYWdlU21vb3RoaW5nRW5hYmxlZClcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5zbW9vdGhQcm9wZXJ0eSA9ICdtc0ltYWdlU21vb3RoaW5nRW5hYmxlZCc7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLmluaXRQbHVnaW5zKCk7XG5cbiAgICB0aGlzLl9tYXBCbGVuZE1vZGVzKCk7XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIHRlbXBvcmFyeSBkaXNwbGF5IG9iamVjdCB1c2VkIGFzIHRoZSBwYXJlbnQgb2YgdGhlIGN1cnJlbnRseSBiZWluZyByZW5kZXJlZCBpdGVtXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLkRpc3BsYXlPYmplY3R9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl90ZW1wRGlzcGxheU9iamVjdFBhcmVudCA9IHtcbiAgICAgICAgd29ybGRUcmFuc2Zvcm06IG5ldyBtYXRoLk1hdHJpeCgpLFxuICAgICAgICB3b3JsZEFscGhhOiAxXG4gICAgfTtcblxuXG4gICAgdGhpcy5yZXNpemUod2lkdGgsIGhlaWdodCk7XG59XG5cbi8vIGNvbnN0cnVjdG9yXG5DYW52YXNSZW5kZXJlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFN5c3RlbVJlbmRlcmVyLnByb3RvdHlwZSk7XG5DYW52YXNSZW5kZXJlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBDYW52YXNSZW5kZXJlcjtcbm1vZHVsZS5leHBvcnRzID0gQ2FudmFzUmVuZGVyZXI7XG51dGlscy5wbHVnaW5UYXJnZXQubWl4aW4oQ2FudmFzUmVuZGVyZXIpO1xuXG4vKipcbiAqIFJlbmRlcnMgdGhlIG9iamVjdCB0byB0aGlzIGNhbnZhcyB2aWV3XG4gKlxuICogQHBhcmFtIG9iamVjdCB7UElYSS5EaXNwbGF5T2JqZWN0fSB0aGUgb2JqZWN0IHRvIGJlIHJlbmRlcmVkXG4gKi9cbkNhbnZhc1JlbmRlcmVyLnByb3RvdHlwZS5yZW5kZXIgPSBmdW5jdGlvbiAob2JqZWN0KVxue1xuICAgIHRoaXMuZW1pdCgncHJlcmVuZGVyJyk7XG5cbiAgICB2YXIgY2FjaGVQYXJlbnQgPSBvYmplY3QucGFyZW50O1xuXG4gICAgdGhpcy5fbGFzdE9iamVjdFJlbmRlcmVkID0gb2JqZWN0O1xuXG4gICAgb2JqZWN0LnBhcmVudCA9IHRoaXMuX3RlbXBEaXNwbGF5T2JqZWN0UGFyZW50O1xuXG4gICAgLy8gdXBkYXRlIHRoZSBzY2VuZSBncmFwaFxuICAgIG9iamVjdC51cGRhdGVUcmFuc2Zvcm0oKTtcblxuICAgIG9iamVjdC5wYXJlbnQgPSBjYWNoZVBhcmVudDtcblxuICAgIHRoaXMuY29udGV4dC5zZXRUcmFuc2Zvcm0oMSwgMCwgMCwgMSwgMCwgMCk7XG5cbiAgICB0aGlzLmNvbnRleHQuZ2xvYmFsQWxwaGEgPSAxO1xuXG4gICAgdGhpcy5jb250ZXh0Lmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbiA9IHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5OT1JNQUxdO1xuXG4gICAgaWYgKG5hdmlnYXRvci5pc0NvY29vbkpTICYmIHRoaXMudmlldy5zY3JlZW5jYW52YXMpXG4gICAge1xuICAgICAgICB0aGlzLmNvbnRleHQuZmlsbFN0eWxlID0gJ2JsYWNrJztcbiAgICAgICAgdGhpcy5jb250ZXh0LmNsZWFyKCk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuY2xlYXJCZWZvcmVSZW5kZXIpXG4gICAge1xuICAgICAgICBpZiAodGhpcy50cmFuc3BhcmVudClcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5jb250ZXh0LmNsZWFyUmVjdCgwLCAwLCB0aGlzLndpZHRoLCB0aGlzLmhlaWdodCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmNvbnRleHQuZmlsbFN0eWxlID0gdGhpcy5fYmFja2dyb3VuZENvbG9yU3RyaW5nO1xuICAgICAgICAgICAgdGhpcy5jb250ZXh0LmZpbGxSZWN0KDAsIDAsIHRoaXMud2lkdGggLCB0aGlzLmhlaWdodCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLnJlbmRlckRpc3BsYXlPYmplY3Qob2JqZWN0LCB0aGlzLmNvbnRleHQpO1xuXG4gICAgdGhpcy5lbWl0KCdwb3N0cmVuZGVyJyk7XG59O1xuXG4vKipcbiAqIFJlbW92ZXMgZXZlcnl0aGluZyBmcm9tIHRoZSByZW5kZXJlciBhbmQgb3B0aW9uYWxseSByZW1vdmVzIHRoZSBDYW52YXMgRE9NIGVsZW1lbnQuXG4gKlxuICogQHBhcmFtIFtyZW1vdmVWaWV3PWZhbHNlXSB7Ym9vbGVhbn0gUmVtb3ZlcyB0aGUgQ2FudmFzIGVsZW1lbnQgZnJvbSB0aGUgRE9NLlxuICovXG5DYW52YXNSZW5kZXJlci5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uIChyZW1vdmVWaWV3KVxue1xuICAgIHRoaXMuZGVzdHJveVBsdWdpbnMoKTtcblxuICAgIC8vIGNhbGwgdGhlIGJhc2UgZGVzdHJveVxuICAgIFN5c3RlbVJlbmRlcmVyLnByb3RvdHlwZS5kZXN0cm95LmNhbGwodGhpcywgcmVtb3ZlVmlldyk7XG5cbiAgICB0aGlzLmNvbnRleHQgPSBudWxsO1xuXG4gICAgdGhpcy5yZWZyZXNoID0gdHJ1ZTtcblxuICAgIHRoaXMubWFza01hbmFnZXIuZGVzdHJveSgpO1xuICAgIHRoaXMubWFza01hbmFnZXIgPSBudWxsO1xuXG4gICAgdGhpcy5zbW9vdGhQcm9wZXJ0eSA9IG51bGw7XG59O1xuXG4vKipcbiAqIFJlbmRlcnMgYSBkaXNwbGF5IG9iamVjdFxuICpcbiAqIEBwYXJhbSBkaXNwbGF5T2JqZWN0IHtQSVhJLkRpc3BsYXlPYmplY3R9IFRoZSBkaXNwbGF5T2JqZWN0IHRvIHJlbmRlclxuICogQHByaXZhdGVcbiAqL1xuQ2FudmFzUmVuZGVyZXIucHJvdG90eXBlLnJlbmRlckRpc3BsYXlPYmplY3QgPSBmdW5jdGlvbiAoZGlzcGxheU9iamVjdCwgY29udGV4dClcbntcbiAgICB2YXIgdGVtcENvbnRleHQgPSB0aGlzLmNvbnRleHQ7XG5cbiAgICB0aGlzLmNvbnRleHQgPSBjb250ZXh0O1xuICAgIGRpc3BsYXlPYmplY3QucmVuZGVyQ2FudmFzKHRoaXMpO1xuICAgIHRoaXMuY29udGV4dCA9IHRlbXBDb250ZXh0O1xufTtcblxuLyoqXG4gKiBAZXh0ZW5kcyBQSVhJLlN5c3RlbVJlbmRlcmVyI3Jlc2l6ZVxuICpcbiAqIEBwYXJhbSB7bnVtYmVyfSB3XG4gKiBAcGFyYW0ge251bWJlcn0gaFxuICovXG5DYW52YXNSZW5kZXJlci5wcm90b3R5cGUucmVzaXplID0gZnVuY3Rpb24gKHcsIGgpXG57XG4gICAgU3lzdGVtUmVuZGVyZXIucHJvdG90eXBlLnJlc2l6ZS5jYWxsKHRoaXMsIHcsIGgpO1xuXG4gICAgLy9yZXNldCB0aGUgc2NhbGUgbW9kZS4uIG9kZGx5IHRoaXMgc2VlbXMgdG8gYmUgcmVzZXQgd2hlbiB0aGUgY2FudmFzIGlzIHJlc2l6ZWQuXG4gICAgLy9zdXJlbHkgYSBicm93c2VyIGJ1Zz8/IExldCBwaXhpIGZpeCB0aGF0IGZvciB5b3UuLlxuICAgIGlmKHRoaXMuc21vb3RoUHJvcGVydHkpXG4gICAge1xuICAgICAgICB0aGlzLmNvbnRleHRbdGhpcy5zbW9vdGhQcm9wZXJ0eV0gPSAoQ09OU1QuU0NBTEVfTU9ERVMuREVGQVVMVCA9PT0gQ09OU1QuU0NBTEVfTU9ERVMuTElORUFSKTtcbiAgICB9XG5cbn07XG5cbi8qKlxuICogTWFwcyBQaXhpIGJsZW5kIG1vZGVzIHRvIGNhbnZhcyBibGVuZCBtb2Rlcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5DYW52YXNSZW5kZXJlci5wcm90b3R5cGUuX21hcEJsZW5kTW9kZXMgPSBmdW5jdGlvbiAoKVxue1xuICAgIGlmICghdGhpcy5ibGVuZE1vZGVzKVxuICAgIHtcbiAgICAgICAgdGhpcy5ibGVuZE1vZGVzID0ge307XG5cbiAgICAgICAgaWYgKHV0aWxzLmNhblVzZU5ld0NhbnZhc0JsZW5kTW9kZXMoKSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5ibGVuZE1vZGVzW0NPTlNULkJMRU5EX01PREVTLk5PUk1BTF0gICAgICAgID0gJ3NvdXJjZS1vdmVyJztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5BRERdICAgICAgICAgICA9ICdsaWdodGVyJzsgLy9JUyBUSElTIE9LPz8/XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuTVVMVElQTFldICAgICAgPSAnbXVsdGlwbHknO1xuICAgICAgICAgICAgdGhpcy5ibGVuZE1vZGVzW0NPTlNULkJMRU5EX01PREVTLlNDUkVFTl0gICAgICAgID0gJ3NjcmVlbic7XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuT1ZFUkxBWV0gICAgICAgPSAnb3ZlcmxheSc7XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuREFSS0VOXSAgICAgICAgPSAnZGFya2VuJztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5MSUdIVEVOXSAgICAgICA9ICdsaWdodGVuJztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5DT0xPUl9ET0RHRV0gICA9ICdjb2xvci1kb2RnZSc7XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuQ09MT1JfQlVSTl0gICAgPSAnY29sb3ItYnVybic7XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuSEFSRF9MSUdIVF0gICAgPSAnaGFyZC1saWdodCc7XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuU09GVF9MSUdIVF0gICAgPSAnc29mdC1saWdodCc7XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuRElGRkVSRU5DRV0gICAgPSAnZGlmZmVyZW5jZSc7XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuRVhDTFVTSU9OXSAgICAgPSAnZXhjbHVzaW9uJztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5IVUVdICAgICAgICAgICA9ICdodWUnO1xuICAgICAgICAgICAgdGhpcy5ibGVuZE1vZGVzW0NPTlNULkJMRU5EX01PREVTLlNBVFVSQVRJT05dICAgID0gJ3NhdHVyYXRlJztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5DT0xPUl0gICAgICAgICA9ICdjb2xvcic7XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuTFVNSU5PU0lUWV0gICAgPSAnbHVtaW5vc2l0eSc7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgICAvLyB0aGlzIG1lYW5zIHRoYXQgdGhlIGJyb3dzZXIgZG9lcyBub3Qgc3VwcG9ydCB0aGUgY29vbCBuZXcgYmxlbmQgbW9kZXMgaW4gY2FudmFzICdjb3VnaCcgaWUgJ2NvdWdoJ1xuICAgICAgICAgICAgdGhpcy5ibGVuZE1vZGVzW0NPTlNULkJMRU5EX01PREVTLk5PUk1BTF0gICAgICAgID0gJ3NvdXJjZS1vdmVyJztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5BRERdICAgICAgICAgICA9ICdsaWdodGVyJzsgLy9JUyBUSElTIE9LPz8/XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuTVVMVElQTFldICAgICAgPSAnc291cmNlLW92ZXInO1xuICAgICAgICAgICAgdGhpcy5ibGVuZE1vZGVzW0NPTlNULkJMRU5EX01PREVTLlNDUkVFTl0gICAgICAgID0gJ3NvdXJjZS1vdmVyJztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5PVkVSTEFZXSAgICAgICA9ICdzb3VyY2Utb3Zlcic7XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuREFSS0VOXSAgICAgICAgPSAnc291cmNlLW92ZXInO1xuICAgICAgICAgICAgdGhpcy5ibGVuZE1vZGVzW0NPTlNULkJMRU5EX01PREVTLkxJR0hURU5dICAgICAgID0gJ3NvdXJjZS1vdmVyJztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5DT0xPUl9ET0RHRV0gICA9ICdzb3VyY2Utb3Zlcic7XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuQ09MT1JfQlVSTl0gICAgPSAnc291cmNlLW92ZXInO1xuICAgICAgICAgICAgdGhpcy5ibGVuZE1vZGVzW0NPTlNULkJMRU5EX01PREVTLkhBUkRfTElHSFRdICAgID0gJ3NvdXJjZS1vdmVyJztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5TT0ZUX0xJR0hUXSAgICA9ICdzb3VyY2Utb3Zlcic7XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuRElGRkVSRU5DRV0gICAgPSAnc291cmNlLW92ZXInO1xuICAgICAgICAgICAgdGhpcy5ibGVuZE1vZGVzW0NPTlNULkJMRU5EX01PREVTLkVYQ0xVU0lPTl0gICAgID0gJ3NvdXJjZS1vdmVyJztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5IVUVdICAgICAgICAgICA9ICdzb3VyY2Utb3Zlcic7XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuU0FUVVJBVElPTl0gICAgPSAnc291cmNlLW92ZXInO1xuICAgICAgICAgICAgdGhpcy5ibGVuZE1vZGVzW0NPTlNULkJMRU5EX01PREVTLkNPTE9SXSAgICAgICAgID0gJ3NvdXJjZS1vdmVyJztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5MVU1JTk9TSVRZXSAgICA9ICdzb3VyY2Utb3Zlcic7XG4gICAgICAgIH1cbiAgICB9XG59O1xuIiwiLyoqXG4gKiBDcmVhdGVzIGEgQ2FudmFzIGVsZW1lbnQgb2YgdGhlIGdpdmVuIHNpemUuXG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIHdpZHRoIHtudW1iZXJ9IHRoZSB3aWR0aCBmb3IgdGhlIG5ld2x5IGNyZWF0ZWQgY2FudmFzXG4gKiBAcGFyYW0gaGVpZ2h0IHtudW1iZXJ9IHRoZSBoZWlnaHQgZm9yIHRoZSBuZXdseSBjcmVhdGVkIGNhbnZhc1xuICovXG5mdW5jdGlvbiBDYW52YXNCdWZmZXIod2lkdGgsIGhlaWdodClcbntcbiAgICAvKipcbiAgICAgKiBUaGUgQ2FudmFzIG9iamVjdCB0aGF0IGJlbG9uZ3MgdG8gdGhpcyBDYW52YXNCdWZmZXIuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtIVE1MQ2FudmFzRWxlbWVudH1cbiAgICAgKi9cbiAgICB0aGlzLmNhbnZhcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NhbnZhcycpO1xuXG4gICAgLyoqXG4gICAgICogQSBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQgb2JqZWN0IHJlcHJlc2VudGluZyBhIHR3by1kaW1lbnNpb25hbCByZW5kZXJpbmcgY29udGV4dC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRH1cbiAgICAgKi9cbiAgICB0aGlzLmNvbnRleHQgPSB0aGlzLmNhbnZhcy5nZXRDb250ZXh0KCcyZCcpO1xuXG4gICAgdGhpcy5jYW52YXMud2lkdGggPSB3aWR0aDtcbiAgICB0aGlzLmNhbnZhcy5oZWlnaHQgPSBoZWlnaHQ7XG59XG5cbkNhbnZhc0J1ZmZlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBDYW52YXNCdWZmZXI7XG5tb2R1bGUuZXhwb3J0cyA9IENhbnZhc0J1ZmZlcjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoQ2FudmFzQnVmZmVyLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFRoZSB3aWR0aCBvZiB0aGUgY2FudmFzIGJ1ZmZlciBpbiBwaXhlbHMuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuQ2FudmFzQnVmZmVyI1xuICAgICAqL1xuICAgIHdpZHRoOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY2FudmFzLndpZHRoO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWwpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuY2FudmFzLndpZHRoID0gdmFsO1xuICAgICAgICB9XG4gICAgfSxcbiAgICAvKipcbiAgICAgKiBUaGUgaGVpZ2h0IG9mIHRoZSBjYW52YXMgYnVmZmVyIGluIHBpeGVscy5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5DYW52YXNCdWZmZXIjXG4gICAgICovXG4gICAgaGVpZ2h0OiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY2FudmFzLmhlaWdodDtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmNhbnZhcy5oZWlnaHQgPSB2YWw7XG4gICAgICAgIH1cbiAgICB9XG59KTtcblxuLyoqXG4gKiBDbGVhcnMgdGhlIGNhbnZhcyB0aGF0IHdhcyBjcmVhdGVkIGJ5IHRoZSBDYW52YXNCdWZmZXIgY2xhc3MuXG4gKlxuICogQHByaXZhdGVcbiAqL1xuQ2FudmFzQnVmZmVyLnByb3RvdHlwZS5jbGVhciA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy5jb250ZXh0LnNldFRyYW5zZm9ybSgxLCAwLCAwLCAxLCAwLCAwKTtcbiAgICB0aGlzLmNvbnRleHQuY2xlYXJSZWN0KDAsMCwgdGhpcy5jYW52YXMud2lkdGgsIHRoaXMuY2FudmFzLmhlaWdodCk7XG59O1xuXG4vKipcbiAqIFJlc2l6ZXMgdGhlIGNhbnZhcyB0byB0aGUgc3BlY2lmaWVkIHdpZHRoIGFuZCBoZWlnaHQuXG4gKlxuICogQHBhcmFtIHdpZHRoIHtudW1iZXJ9IHRoZSBuZXcgd2lkdGggb2YgdGhlIGNhbnZhc1xuICogQHBhcmFtIGhlaWdodCB7bnVtYmVyfSB0aGUgbmV3IGhlaWdodCBvZiB0aGUgY2FudmFzXG4gKi9cbkNhbnZhc0J1ZmZlci5wcm90b3R5cGUucmVzaXplID0gZnVuY3Rpb24gKHdpZHRoLCBoZWlnaHQpXG57XG4gICAgdGhpcy5jYW52YXMud2lkdGggPSB3aWR0aDtcbiAgICB0aGlzLmNhbnZhcy5oZWlnaHQgPSBoZWlnaHQ7XG59O1xuXG4vKipcbiAqIERlc3Ryb3lzIHRoaXMgY2FudmFzLlxuICpcbiAqL1xuQ2FudmFzQnVmZmVyLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLmNvbnRleHQgPSBudWxsO1xuICAgIHRoaXMuY2FudmFzID0gbnVsbDtcbn07XG4iLCJ2YXIgQ09OU1QgPSByZXF1aXJlKCcuLi8uLi8uLi9jb25zdCcpO1xuXG4vKipcbiAqIEEgc2V0IG9mIGZ1bmN0aW9ucyB1c2VkIGJ5IHRoZSBjYW52YXMgcmVuZGVyZXIgdG8gZHJhdyB0aGUgcHJpbWl0aXZlIGdyYXBoaWNzIGRhdGEuXG4gKiBAc3RhdGljXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKi9cbnZhciBDYW52YXNHcmFwaGljcyA9IHt9O1xubW9kdWxlLmV4cG9ydHMgPSBDYW52YXNHcmFwaGljcztcblxuLypcbiAqIFJlbmRlcnMgYSBHcmFwaGljcyBvYmplY3QgdG8gYSBjYW52YXMuXG4gKlxuICogQHBhcmFtIGdyYXBoaWNzIHtQSVhJLkdyYXBoaWNzfSB0aGUgYWN0dWFsIGdyYXBoaWNzIG9iamVjdCB0byByZW5kZXJcbiAqIEBwYXJhbSBjb250ZXh0IHtDYW52YXNSZW5kZXJpbmdDb250ZXh0MkR9IHRoZSAyZCBkcmF3aW5nIG1ldGhvZCBvZiB0aGUgY2FudmFzXG4gKi9cbkNhbnZhc0dyYXBoaWNzLnJlbmRlckdyYXBoaWNzID0gZnVuY3Rpb24gKGdyYXBoaWNzLCBjb250ZXh0KVxue1xuICAgIHZhciB3b3JsZEFscGhhID0gZ3JhcGhpY3Mud29ybGRBbHBoYTtcblxuICAgIGlmIChncmFwaGljcy5kaXJ0eSlcbiAgICB7XG4gICAgICAgIHRoaXMudXBkYXRlR3JhcGhpY3NUaW50KGdyYXBoaWNzKTtcbiAgICAgICAgZ3JhcGhpY3MuZGlydHkgPSBmYWxzZTtcbiAgICB9XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGdyYXBoaWNzLmdyYXBoaWNzRGF0YS5sZW5ndGg7IGkrKylcbiAgICB7XG4gICAgICAgIHZhciBkYXRhID0gZ3JhcGhpY3MuZ3JhcGhpY3NEYXRhW2ldO1xuICAgICAgICB2YXIgc2hhcGUgPSBkYXRhLnNoYXBlO1xuXG4gICAgICAgIHZhciBmaWxsQ29sb3IgPSBkYXRhLl9maWxsVGludDtcbiAgICAgICAgdmFyIGxpbmVDb2xvciA9IGRhdGEuX2xpbmVUaW50O1xuXG4gICAgICAgIGNvbnRleHQubGluZVdpZHRoID0gZGF0YS5saW5lV2lkdGg7XG5cbiAgICAgICAgaWYgKGRhdGEudHlwZSA9PT0gQ09OU1QuU0hBUEVTLlBPTFkpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNvbnRleHQuYmVnaW5QYXRoKCk7XG5cbiAgICAgICAgICAgIHZhciBwb2ludHMgPSBzaGFwZS5wb2ludHM7XG5cbiAgICAgICAgICAgIGNvbnRleHQubW92ZVRvKHBvaW50c1swXSwgcG9pbnRzWzFdKTtcblxuICAgICAgICAgICAgZm9yICh2YXIgaj0xOyBqIDwgcG9pbnRzLmxlbmd0aC8yOyBqKyspXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29udGV4dC5saW5lVG8ocG9pbnRzW2ogKiAyXSwgcG9pbnRzW2ogKiAyICsgMV0pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoc2hhcGUuY2xvc2VkKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGNvbnRleHQubGluZVRvKHBvaW50c1swXSwgcG9pbnRzWzFdKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gaWYgdGhlIGZpcnN0IGFuZCBsYXN0IHBvaW50IGFyZSB0aGUgc2FtZSBjbG9zZSB0aGUgcGF0aCAtIG11Y2ggbmVhdGVyIDopXG4gICAgICAgICAgICBpZiAocG9pbnRzWzBdID09PSBwb2ludHNbcG9pbnRzLmxlbmd0aC0yXSAmJiBwb2ludHNbMV0gPT09IHBvaW50c1twb2ludHMubGVuZ3RoLTFdKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGNvbnRleHQuY2xvc2VQYXRoKCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChkYXRhLmZpbGwpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29udGV4dC5nbG9iYWxBbHBoYSA9IGRhdGEuZmlsbEFscGhhICogd29ybGRBbHBoYTtcbiAgICAgICAgICAgICAgICBjb250ZXh0LmZpbGxTdHlsZSA9ICcjJyArICgnMDAwMDAnICsgKCBmaWxsQ29sb3IgfCAwKS50b1N0cmluZygxNikpLnN1YnN0cigtNik7XG4gICAgICAgICAgICAgICAgY29udGV4dC5maWxsKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZGF0YS5saW5lV2lkdGgpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29udGV4dC5nbG9iYWxBbHBoYSA9IGRhdGEubGluZUFscGhhICogd29ybGRBbHBoYTtcbiAgICAgICAgICAgICAgICBjb250ZXh0LnN0cm9rZVN0eWxlID0gJyMnICsgKCcwMDAwMCcgKyAoIGxpbmVDb2xvciB8IDApLnRvU3RyaW5nKDE2KSkuc3Vic3RyKC02KTtcbiAgICAgICAgICAgICAgICBjb250ZXh0LnN0cm9rZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGRhdGEudHlwZSA9PT0gQ09OU1QuU0hBUEVTLlJFQ1QpXG4gICAgICAgIHtcblxuICAgICAgICAgICAgaWYgKGRhdGEuZmlsbENvbG9yIHx8IGRhdGEuZmlsbENvbG9yID09PSAwKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGNvbnRleHQuZ2xvYmFsQWxwaGEgPSBkYXRhLmZpbGxBbHBoYSAqIHdvcmxkQWxwaGE7XG4gICAgICAgICAgICAgICAgY29udGV4dC5maWxsU3R5bGUgPSAnIycgKyAoJzAwMDAwJyArICggZmlsbENvbG9yIHwgMCkudG9TdHJpbmcoMTYpKS5zdWJzdHIoLTYpO1xuICAgICAgICAgICAgICAgIGNvbnRleHQuZmlsbFJlY3Qoc2hhcGUueCwgc2hhcGUueSwgc2hhcGUud2lkdGgsIHNoYXBlLmhlaWdodCk7XG5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChkYXRhLmxpbmVXaWR0aClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb250ZXh0Lmdsb2JhbEFscGhhID0gZGF0YS5saW5lQWxwaGEgKiB3b3JsZEFscGhhO1xuICAgICAgICAgICAgICAgIGNvbnRleHQuc3Ryb2tlU3R5bGUgPSAnIycgKyAoJzAwMDAwJyArICggbGluZUNvbG9yIHwgMCkudG9TdHJpbmcoMTYpKS5zdWJzdHIoLTYpO1xuICAgICAgICAgICAgICAgIGNvbnRleHQuc3Ryb2tlUmVjdChzaGFwZS54LCBzaGFwZS55LCBzaGFwZS53aWR0aCwgc2hhcGUuaGVpZ2h0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChkYXRhLnR5cGUgPT09IENPTlNULlNIQVBFUy5DSVJDKVxuICAgICAgICB7XG4gICAgICAgICAgICAvLyBUT0RPIC0gbmVlZCB0byBiZSBVbmRlZmluZWQhXG4gICAgICAgICAgICBjb250ZXh0LmJlZ2luUGF0aCgpO1xuICAgICAgICAgICAgY29udGV4dC5hcmMoc2hhcGUueCwgc2hhcGUueSwgc2hhcGUucmFkaXVzLDAsMipNYXRoLlBJKTtcbiAgICAgICAgICAgIGNvbnRleHQuY2xvc2VQYXRoKCk7XG5cbiAgICAgICAgICAgIGlmIChkYXRhLmZpbGwpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29udGV4dC5nbG9iYWxBbHBoYSA9IGRhdGEuZmlsbEFscGhhICogd29ybGRBbHBoYTtcbiAgICAgICAgICAgICAgICBjb250ZXh0LmZpbGxTdHlsZSA9ICcjJyArICgnMDAwMDAnICsgKCBmaWxsQ29sb3IgfCAwKS50b1N0cmluZygxNikpLnN1YnN0cigtNik7XG4gICAgICAgICAgICAgICAgY29udGV4dC5maWxsKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZGF0YS5saW5lV2lkdGgpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29udGV4dC5nbG9iYWxBbHBoYSA9IGRhdGEubGluZUFscGhhICogd29ybGRBbHBoYTtcbiAgICAgICAgICAgICAgICBjb250ZXh0LnN0cm9rZVN0eWxlID0gJyMnICsgKCcwMDAwMCcgKyAoIGxpbmVDb2xvciB8IDApLnRvU3RyaW5nKDE2KSkuc3Vic3RyKC02KTtcbiAgICAgICAgICAgICAgICBjb250ZXh0LnN0cm9rZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGRhdGEudHlwZSA9PT0gQ09OU1QuU0hBUEVTLkVMSVApXG4gICAgICAgIHtcbiAgICAgICAgICAgIC8vIGVsbGlwc2UgY29kZSB0YWtlbiBmcm9tOiBodHRwOi8vc3RhY2tvdmVyZmxvdy5jb20vcXVlc3Rpb25zLzIxNzI3OTgvaG93LXRvLWRyYXctYW4tb3ZhbC1pbi1odG1sNS1jYW52YXNcblxuICAgICAgICAgICAgdmFyIHcgPSBzaGFwZS53aWR0aCAqIDI7XG4gICAgICAgICAgICB2YXIgaCA9IHNoYXBlLmhlaWdodCAqIDI7XG5cbiAgICAgICAgICAgIHZhciB4ID0gc2hhcGUueCAtIHcvMjtcbiAgICAgICAgICAgIHZhciB5ID0gc2hhcGUueSAtIGgvMjtcblxuICAgICAgICAgICAgY29udGV4dC5iZWdpblBhdGgoKTtcblxuICAgICAgICAgICAgdmFyIGthcHBhID0gMC41NTIyODQ4LFxuICAgICAgICAgICAgICAgIG94ID0gKHcgLyAyKSAqIGthcHBhLCAvLyBjb250cm9sIHBvaW50IG9mZnNldCBob3Jpem9udGFsXG4gICAgICAgICAgICAgICAgb3kgPSAoaCAvIDIpICoga2FwcGEsIC8vIGNvbnRyb2wgcG9pbnQgb2Zmc2V0IHZlcnRpY2FsXG4gICAgICAgICAgICAgICAgeGUgPSB4ICsgdywgICAgICAgICAgIC8vIHgtZW5kXG4gICAgICAgICAgICAgICAgeWUgPSB5ICsgaCwgICAgICAgICAgIC8vIHktZW5kXG4gICAgICAgICAgICAgICAgeG0gPSB4ICsgdyAvIDIsICAgICAgIC8vIHgtbWlkZGxlXG4gICAgICAgICAgICAgICAgeW0gPSB5ICsgaCAvIDI7ICAgICAgIC8vIHktbWlkZGxlXG5cbiAgICAgICAgICAgIGNvbnRleHQubW92ZVRvKHgsIHltKTtcbiAgICAgICAgICAgIGNvbnRleHQuYmV6aWVyQ3VydmVUbyh4LCB5bSAtIG95LCB4bSAtIG94LCB5LCB4bSwgeSk7XG4gICAgICAgICAgICBjb250ZXh0LmJlemllckN1cnZlVG8oeG0gKyBveCwgeSwgeGUsIHltIC0gb3ksIHhlLCB5bSk7XG4gICAgICAgICAgICBjb250ZXh0LmJlemllckN1cnZlVG8oeGUsIHltICsgb3ksIHhtICsgb3gsIHllLCB4bSwgeWUpO1xuICAgICAgICAgICAgY29udGV4dC5iZXppZXJDdXJ2ZVRvKHhtIC0gb3gsIHllLCB4LCB5bSArIG95LCB4LCB5bSk7XG5cbiAgICAgICAgICAgIGNvbnRleHQuY2xvc2VQYXRoKCk7XG5cbiAgICAgICAgICAgIGlmIChkYXRhLmZpbGwpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29udGV4dC5nbG9iYWxBbHBoYSA9IGRhdGEuZmlsbEFscGhhICogd29ybGRBbHBoYTtcbiAgICAgICAgICAgICAgICBjb250ZXh0LmZpbGxTdHlsZSA9ICcjJyArICgnMDAwMDAnICsgKCBmaWxsQ29sb3IgfCAwKS50b1N0cmluZygxNikpLnN1YnN0cigtNik7XG4gICAgICAgICAgICAgICAgY29udGV4dC5maWxsKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZGF0YS5saW5lV2lkdGgpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29udGV4dC5nbG9iYWxBbHBoYSA9IGRhdGEubGluZUFscGhhICogd29ybGRBbHBoYTtcbiAgICAgICAgICAgICAgICBjb250ZXh0LnN0cm9rZVN0eWxlID0gJyMnICsgKCcwMDAwMCcgKyAoIGxpbmVDb2xvciB8IDApLnRvU3RyaW5nKDE2KSkuc3Vic3RyKC02KTtcbiAgICAgICAgICAgICAgICBjb250ZXh0LnN0cm9rZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGRhdGEudHlwZSA9PT0gQ09OU1QuU0hBUEVTLlJSRUMpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHZhciByeCA9IHNoYXBlLng7XG4gICAgICAgICAgICB2YXIgcnkgPSBzaGFwZS55O1xuICAgICAgICAgICAgdmFyIHdpZHRoID0gc2hhcGUud2lkdGg7XG4gICAgICAgICAgICB2YXIgaGVpZ2h0ID0gc2hhcGUuaGVpZ2h0O1xuICAgICAgICAgICAgdmFyIHJhZGl1cyA9IHNoYXBlLnJhZGl1cztcblxuICAgICAgICAgICAgdmFyIG1heFJhZGl1cyA9IE1hdGgubWluKHdpZHRoLCBoZWlnaHQpIC8gMiB8IDA7XG4gICAgICAgICAgICByYWRpdXMgPSByYWRpdXMgPiBtYXhSYWRpdXMgPyBtYXhSYWRpdXMgOiByYWRpdXM7XG5cbiAgICAgICAgICAgIGNvbnRleHQuYmVnaW5QYXRoKCk7XG4gICAgICAgICAgICBjb250ZXh0Lm1vdmVUbyhyeCwgcnkgKyByYWRpdXMpO1xuICAgICAgICAgICAgY29udGV4dC5saW5lVG8ocngsIHJ5ICsgaGVpZ2h0IC0gcmFkaXVzKTtcbiAgICAgICAgICAgIGNvbnRleHQucXVhZHJhdGljQ3VydmVUbyhyeCwgcnkgKyBoZWlnaHQsIHJ4ICsgcmFkaXVzLCByeSArIGhlaWdodCk7XG4gICAgICAgICAgICBjb250ZXh0LmxpbmVUbyhyeCArIHdpZHRoIC0gcmFkaXVzLCByeSArIGhlaWdodCk7XG4gICAgICAgICAgICBjb250ZXh0LnF1YWRyYXRpY0N1cnZlVG8ocnggKyB3aWR0aCwgcnkgKyBoZWlnaHQsIHJ4ICsgd2lkdGgsIHJ5ICsgaGVpZ2h0IC0gcmFkaXVzKTtcbiAgICAgICAgICAgIGNvbnRleHQubGluZVRvKHJ4ICsgd2lkdGgsIHJ5ICsgcmFkaXVzKTtcbiAgICAgICAgICAgIGNvbnRleHQucXVhZHJhdGljQ3VydmVUbyhyeCArIHdpZHRoLCByeSwgcnggKyB3aWR0aCAtIHJhZGl1cywgcnkpO1xuICAgICAgICAgICAgY29udGV4dC5saW5lVG8ocnggKyByYWRpdXMsIHJ5KTtcbiAgICAgICAgICAgIGNvbnRleHQucXVhZHJhdGljQ3VydmVUbyhyeCwgcnksIHJ4LCByeSArIHJhZGl1cyk7XG4gICAgICAgICAgICBjb250ZXh0LmNsb3NlUGF0aCgpO1xuXG4gICAgICAgICAgICBpZiAoZGF0YS5maWxsQ29sb3IgfHwgZGF0YS5maWxsQ29sb3IgPT09IDApXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29udGV4dC5nbG9iYWxBbHBoYSA9IGRhdGEuZmlsbEFscGhhICogd29ybGRBbHBoYTtcbiAgICAgICAgICAgICAgICBjb250ZXh0LmZpbGxTdHlsZSA9ICcjJyArICgnMDAwMDAnICsgKCBmaWxsQ29sb3IgfCAwKS50b1N0cmluZygxNikpLnN1YnN0cigtNik7XG4gICAgICAgICAgICAgICAgY29udGV4dC5maWxsKCk7XG5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChkYXRhLmxpbmVXaWR0aClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb250ZXh0Lmdsb2JhbEFscGhhID0gZGF0YS5saW5lQWxwaGEgKiB3b3JsZEFscGhhO1xuICAgICAgICAgICAgICAgIGNvbnRleHQuc3Ryb2tlU3R5bGUgPSAnIycgKyAoJzAwMDAwJyArICggbGluZUNvbG9yIHwgMCkudG9TdHJpbmcoMTYpKS5zdWJzdHIoLTYpO1xuICAgICAgICAgICAgICAgIGNvbnRleHQuc3Ryb2tlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG59O1xuXG4vKlxuICogUmVuZGVycyBhIGdyYXBoaWNzIG1hc2tcbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIGdyYXBoaWNzIHtQSVhJLkdyYXBoaWNzfSB0aGUgZ3JhcGhpY3Mgd2hpY2ggd2lsbCBiZSB1c2VkIGFzIGEgbWFza1xuICogQHBhcmFtIGNvbnRleHQge0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRH0gdGhlIGNvbnRleHQgMmQgbWV0aG9kIG9mIHRoZSBjYW52YXNcbiAqL1xuQ2FudmFzR3JhcGhpY3MucmVuZGVyR3JhcGhpY3NNYXNrID0gZnVuY3Rpb24gKGdyYXBoaWNzLCBjb250ZXh0KVxue1xuICAgIHZhciBsZW4gPSBncmFwaGljcy5ncmFwaGljc0RhdGEubGVuZ3RoO1xuXG4gICAgaWYgKGxlbiA9PT0gMClcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb250ZXh0LmJlZ2luUGF0aCgpO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47IGkrKylcbiAgICB7XG4gICAgICAgIHZhciBkYXRhID0gZ3JhcGhpY3MuZ3JhcGhpY3NEYXRhW2ldO1xuICAgICAgICB2YXIgc2hhcGUgPSBkYXRhLnNoYXBlO1xuXG4gICAgICAgIGlmIChkYXRhLnR5cGUgPT09IENPTlNULlNIQVBFUy5QT0xZKVxuICAgICAgICB7XG5cbiAgICAgICAgICAgIHZhciBwb2ludHMgPSBzaGFwZS5wb2ludHM7XG5cbiAgICAgICAgICAgIGNvbnRleHQubW92ZVRvKHBvaW50c1swXSwgcG9pbnRzWzFdKTtcblxuICAgICAgICAgICAgZm9yICh2YXIgaj0xOyBqIDwgcG9pbnRzLmxlbmd0aC8yOyBqKyspXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29udGV4dC5saW5lVG8ocG9pbnRzW2ogKiAyXSwgcG9pbnRzW2ogKiAyICsgMV0pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBpZiB0aGUgZmlyc3QgYW5kIGxhc3QgcG9pbnQgYXJlIHRoZSBzYW1lIGNsb3NlIHRoZSBwYXRoIC0gbXVjaCBuZWF0ZXIgOilcbiAgICAgICAgICAgIGlmIChwb2ludHNbMF0gPT09IHBvaW50c1twb2ludHMubGVuZ3RoLTJdICYmIHBvaW50c1sxXSA9PT0gcG9pbnRzW3BvaW50cy5sZW5ndGgtMV0pXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29udGV4dC5jbG9zZVBhdGgoKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGRhdGEudHlwZSA9PT0gQ09OU1QuU0hBUEVTLlJFQ1QpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNvbnRleHQucmVjdChzaGFwZS54LCBzaGFwZS55LCBzaGFwZS53aWR0aCwgc2hhcGUuaGVpZ2h0KTtcbiAgICAgICAgICAgIGNvbnRleHQuY2xvc2VQYXRoKCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoZGF0YS50eXBlID09PSBDT05TVC5TSEFQRVMuQ0lSQylcbiAgICAgICAge1xuICAgICAgICAgICAgLy8gVE9ETyAtIG5lZWQgdG8gYmUgVW5kZWZpbmVkIVxuICAgICAgICAgICAgY29udGV4dC5hcmMoc2hhcGUueCwgc2hhcGUueSwgc2hhcGUucmFkaXVzLCAwLCAyICogTWF0aC5QSSk7XG4gICAgICAgICAgICBjb250ZXh0LmNsb3NlUGF0aCgpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGRhdGEudHlwZSA9PT0gQ09OU1QuU0hBUEVTLkVMSVApXG4gICAgICAgIHtcblxuICAgICAgICAgICAgLy8gZWxsaXBzZSBjb2RlIHRha2VuIGZyb206IGh0dHA6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvMjE3Mjc5OC9ob3ctdG8tZHJhdy1hbi1vdmFsLWluLWh0bWw1LWNhbnZhc1xuXG4gICAgICAgICAgICB2YXIgdyA9IHNoYXBlLndpZHRoICogMjtcbiAgICAgICAgICAgIHZhciBoID0gc2hhcGUuaGVpZ2h0ICogMjtcblxuICAgICAgICAgICAgdmFyIHggPSBzaGFwZS54IC0gdy8yO1xuICAgICAgICAgICAgdmFyIHkgPSBzaGFwZS55IC0gaC8yO1xuXG4gICAgICAgICAgICB2YXIga2FwcGEgPSAwLjU1MjI4NDgsXG4gICAgICAgICAgICAgICAgb3ggPSAodyAvIDIpICoga2FwcGEsIC8vIGNvbnRyb2wgcG9pbnQgb2Zmc2V0IGhvcml6b250YWxcbiAgICAgICAgICAgICAgICBveSA9IChoIC8gMikgKiBrYXBwYSwgLy8gY29udHJvbCBwb2ludCBvZmZzZXQgdmVydGljYWxcbiAgICAgICAgICAgICAgICB4ZSA9IHggKyB3LCAgICAgICAgICAgLy8geC1lbmRcbiAgICAgICAgICAgICAgICB5ZSA9IHkgKyBoLCAgICAgICAgICAgLy8geS1lbmRcbiAgICAgICAgICAgICAgICB4bSA9IHggKyB3IC8gMiwgICAgICAgLy8geC1taWRkbGVcbiAgICAgICAgICAgICAgICB5bSA9IHkgKyBoIC8gMjsgICAgICAgLy8geS1taWRkbGVcblxuICAgICAgICAgICAgY29udGV4dC5tb3ZlVG8oeCwgeW0pO1xuICAgICAgICAgICAgY29udGV4dC5iZXppZXJDdXJ2ZVRvKHgsIHltIC0gb3ksIHhtIC0gb3gsIHksIHhtLCB5KTtcbiAgICAgICAgICAgIGNvbnRleHQuYmV6aWVyQ3VydmVUbyh4bSArIG94LCB5LCB4ZSwgeW0gLSBveSwgeGUsIHltKTtcbiAgICAgICAgICAgIGNvbnRleHQuYmV6aWVyQ3VydmVUbyh4ZSwgeW0gKyBveSwgeG0gKyBveCwgeWUsIHhtLCB5ZSk7XG4gICAgICAgICAgICBjb250ZXh0LmJlemllckN1cnZlVG8oeG0gLSBveCwgeWUsIHgsIHltICsgb3ksIHgsIHltKTtcbiAgICAgICAgICAgIGNvbnRleHQuY2xvc2VQYXRoKCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoZGF0YS50eXBlID09PSBDT05TVC5TSEFQRVMuUlJFQylcbiAgICAgICAge1xuXG4gICAgICAgICAgICB2YXIgcnggPSBzaGFwZS54O1xuICAgICAgICAgICAgdmFyIHJ5ID0gc2hhcGUueTtcbiAgICAgICAgICAgIHZhciB3aWR0aCA9IHNoYXBlLndpZHRoO1xuICAgICAgICAgICAgdmFyIGhlaWdodCA9IHNoYXBlLmhlaWdodDtcbiAgICAgICAgICAgIHZhciByYWRpdXMgPSBzaGFwZS5yYWRpdXM7XG5cbiAgICAgICAgICAgIHZhciBtYXhSYWRpdXMgPSBNYXRoLm1pbih3aWR0aCwgaGVpZ2h0KSAvIDIgfCAwO1xuICAgICAgICAgICAgcmFkaXVzID0gcmFkaXVzID4gbWF4UmFkaXVzID8gbWF4UmFkaXVzIDogcmFkaXVzO1xuXG4gICAgICAgICAgICBjb250ZXh0Lm1vdmVUbyhyeCwgcnkgKyByYWRpdXMpO1xuICAgICAgICAgICAgY29udGV4dC5saW5lVG8ocngsIHJ5ICsgaGVpZ2h0IC0gcmFkaXVzKTtcbiAgICAgICAgICAgIGNvbnRleHQucXVhZHJhdGljQ3VydmVUbyhyeCwgcnkgKyBoZWlnaHQsIHJ4ICsgcmFkaXVzLCByeSArIGhlaWdodCk7XG4gICAgICAgICAgICBjb250ZXh0LmxpbmVUbyhyeCArIHdpZHRoIC0gcmFkaXVzLCByeSArIGhlaWdodCk7XG4gICAgICAgICAgICBjb250ZXh0LnF1YWRyYXRpY0N1cnZlVG8ocnggKyB3aWR0aCwgcnkgKyBoZWlnaHQsIHJ4ICsgd2lkdGgsIHJ5ICsgaGVpZ2h0IC0gcmFkaXVzKTtcbiAgICAgICAgICAgIGNvbnRleHQubGluZVRvKHJ4ICsgd2lkdGgsIHJ5ICsgcmFkaXVzKTtcbiAgICAgICAgICAgIGNvbnRleHQucXVhZHJhdGljQ3VydmVUbyhyeCArIHdpZHRoLCByeSwgcnggKyB3aWR0aCAtIHJhZGl1cywgcnkpO1xuICAgICAgICAgICAgY29udGV4dC5saW5lVG8ocnggKyByYWRpdXMsIHJ5KTtcbiAgICAgICAgICAgIGNvbnRleHQucXVhZHJhdGljQ3VydmVUbyhyeCwgcnksIHJ4LCByeSArIHJhZGl1cyk7XG4gICAgICAgICAgICBjb250ZXh0LmNsb3NlUGF0aCgpO1xuICAgICAgICB9XG4gICAgfVxufTtcblxuLypcbiAqIFVwZGF0ZXMgdGhlIHRpbnQgb2YgYSBncmFwaGljcyBvYmplY3RcbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIGdyYXBoaWNzIHtQSVhJLkdyYXBoaWNzfSB0aGUgZ3JhcGhpY3MgdGhhdCB3aWxsIGhhdmUgaXRzIHRpbnQgdXBkYXRlZFxuICpcbiAqL1xuQ2FudmFzR3JhcGhpY3MudXBkYXRlR3JhcGhpY3NUaW50ID0gZnVuY3Rpb24gKGdyYXBoaWNzKVxue1xuICAgIGlmIChncmFwaGljcy50aW50ID09PSAweEZGRkZGRiAmJiBncmFwaGljcy5fcHJldlRpbnQgPT09IGdyYXBoaWNzLnRpbnQpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIGdyYXBoaWNzLl9wcmV2VGludCA9IGdyYXBoaWNzLnRpbnQ7XG5cbiAgICB2YXIgdGludFIgPSAoZ3JhcGhpY3MudGludCA+PiAxNiAmIDB4RkYpIC8gMjU1O1xuICAgIHZhciB0aW50RyA9IChncmFwaGljcy50aW50ID4+IDggJiAweEZGKSAvIDI1NTtcbiAgICB2YXIgdGludEIgPSAoZ3JhcGhpY3MudGludCAmIDB4RkYpLyAyNTU7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGdyYXBoaWNzLmdyYXBoaWNzRGF0YS5sZW5ndGg7IGkrKylcbiAgICB7XG4gICAgICAgIHZhciBkYXRhID0gZ3JhcGhpY3MuZ3JhcGhpY3NEYXRhW2ldO1xuXG4gICAgICAgIHZhciBmaWxsQ29sb3IgPSBkYXRhLmZpbGxDb2xvciB8IDA7XG4gICAgICAgIHZhciBsaW5lQ29sb3IgPSBkYXRhLmxpbmVDb2xvciB8IDA7XG5cbiAgICAgICAgLypcbiAgICAgICAgdmFyIGNvbG9yUiA9IChmaWxsQ29sb3IgPj4gMTYgJiAweEZGKSAvIDI1NTtcbiAgICAgICAgdmFyIGNvbG9yRyA9IChmaWxsQ29sb3IgPj4gOCAmIDB4RkYpIC8gMjU1O1xuICAgICAgICB2YXIgY29sb3JCID0gKGZpbGxDb2xvciAmIDB4RkYpIC8gMjU1O1xuXG4gICAgICAgIGNvbG9yUiAqPSB0aW50UjtcbiAgICAgICAgY29sb3JHICo9IHRpbnRHO1xuICAgICAgICBjb2xvckIgKj0gdGludEI7XG5cbiAgICAgICAgZmlsbENvbG9yID0gKChjb2xvclIqMjU1IDw8IDE2KSArIChjb2xvckcqMjU1IDw8IDgpICsgY29sb3JCKjI1NSk7XG5cbiAgICAgICAgY29sb3JSID0gKGxpbmVDb2xvciA+PiAxNiAmIDB4RkYpIC8gMjU1O1xuICAgICAgICBjb2xvckcgPSAobGluZUNvbG9yID4+IDggJiAweEZGKSAvIDI1NTtcbiAgICAgICAgY29sb3JCID0gKGxpbmVDb2xvciAmIDB4RkYpIC8gMjU1O1xuXG4gICAgICAgIGNvbG9yUiAqPSB0aW50UjtcbiAgICAgICAgY29sb3JHICo9IHRpbnRHO1xuICAgICAgICBjb2xvckIgKj0gdGludEI7XG5cbiAgICAgICAgbGluZUNvbG9yID0gKChjb2xvclIqMjU1IDw8IDE2KSArIChjb2xvckcqMjU1IDw8IDgpICsgY29sb3JCKjI1NSk7XG4gICAgICAgICovXG5cbiAgICAgICAgLy8gc3VwZXIgaW5saW5lIGNvcyBpbSBhbiBvcHRpbWl6YXRpb24gTkFaSSA6KVxuICAgICAgICBkYXRhLl9maWxsVGludCA9ICgoKGZpbGxDb2xvciA+PiAxNiAmIDB4RkYpIC8gMjU1ICogdGludFIqMjU1IDw8IDE2KSArICgoZmlsbENvbG9yID4+IDggJiAweEZGKSAvIDI1NSAqIHRpbnRHKjI1NSA8PCA4KSArICAoZmlsbENvbG9yICYgMHhGRikgLyAyNTUgKiB0aW50QioyNTUpO1xuICAgICAgICBkYXRhLl9saW5lVGludCA9ICgoKGxpbmVDb2xvciA+PiAxNiAmIDB4RkYpIC8gMjU1ICogdGludFIqMjU1IDw8IDE2KSArICgobGluZUNvbG9yID4+IDggJiAweEZGKSAvIDI1NSAqIHRpbnRHKjI1NSA8PCA4KSArICAobGluZUNvbG9yICYgMHhGRikgLyAyNTUgKiB0aW50QioyNTUpO1xuXG4gICAgfVxufTtcblxuIiwidmFyIENhbnZhc0dyYXBoaWNzID0gcmVxdWlyZSgnLi9DYW52YXNHcmFwaGljcycpO1xuXG4vKipcbiAqIEEgc2V0IG9mIGZ1bmN0aW9ucyB1c2VkIHRvIGhhbmRsZSBtYXNraW5nLlxuICpcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqL1xuZnVuY3Rpb24gQ2FudmFzTWFza01hbmFnZXIoKVxue31cblxuQ2FudmFzTWFza01hbmFnZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gQ2FudmFzTWFza01hbmFnZXI7XG5tb2R1bGUuZXhwb3J0cyA9IENhbnZhc01hc2tNYW5hZ2VyO1xuXG4vKipcbiAqIFRoaXMgbWV0aG9kIGFkZHMgaXQgdG8gdGhlIGN1cnJlbnQgc3RhY2sgb2YgbWFza3MuXG4gKlxuICogQHBhcmFtIG1hc2tEYXRhIHtvYmplY3R9IHRoZSBtYXNrRGF0YSB0aGF0IHdpbGwgYmUgcHVzaGVkXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcnxQSVhJLkNhbnZhc1JlbmRlcmVyfSBUaGUgcmVuZGVyZXIgY29udGV4dCB0byB1c2UuXG4gKi9cbkNhbnZhc01hc2tNYW5hZ2VyLnByb3RvdHlwZS5wdXNoTWFzayA9IGZ1bmN0aW9uIChtYXNrRGF0YSwgcmVuZGVyZXIpXG57XG5cbiAgICByZW5kZXJlci5jb250ZXh0LnNhdmUoKTtcblxuICAgIHZhciBjYWNoZUFscGhhID0gbWFza0RhdGEuYWxwaGE7XG4gICAgdmFyIHRyYW5zZm9ybSA9IG1hc2tEYXRhLndvcmxkVHJhbnNmb3JtO1xuICAgIHZhciByZXNvbHV0aW9uID0gcmVuZGVyZXIucmVzb2x1dGlvbjtcblxuICAgIHJlbmRlcmVyLmNvbnRleHQuc2V0VHJhbnNmb3JtKFxuICAgICAgICB0cmFuc2Zvcm0uYSAqIHJlc29sdXRpb24sXG4gICAgICAgIHRyYW5zZm9ybS5iICogcmVzb2x1dGlvbixcbiAgICAgICAgdHJhbnNmb3JtLmMgKiByZXNvbHV0aW9uLFxuICAgICAgICB0cmFuc2Zvcm0uZCAqIHJlc29sdXRpb24sXG4gICAgICAgIHRyYW5zZm9ybS50eCAqIHJlc29sdXRpb24sXG4gICAgICAgIHRyYW5zZm9ybS50eSAqIHJlc29sdXRpb25cbiAgICApO1xuXG4gICAgLy9UT0RPIHN1cG9ydCBzcHJpdGUgYWxwaGEgbWFza3M/P1xuICAgIC8vbG90cyBvZiBlZmZvcnQgcmVxdWlyZWQuIElmIGRlbWFuZCBpcyBncmVhdCBlbm91Z2guLlxuICAgIGlmKCFtYXNrRGF0YS50ZXh0dXJlKVxuICAgIHtcbiAgICAgICAgQ2FudmFzR3JhcGhpY3MucmVuZGVyR3JhcGhpY3NNYXNrKG1hc2tEYXRhLCByZW5kZXJlci5jb250ZXh0KTtcbiAgICAgICAgcmVuZGVyZXIuY29udGV4dC5jbGlwKCk7XG4gICAgfVxuXG4gICAgbWFza0RhdGEud29ybGRBbHBoYSA9IGNhY2hlQWxwaGE7XG59O1xuXG4vKipcbiAqIFJlc3RvcmVzIHRoZSBjdXJyZW50IGRyYXdpbmcgY29udGV4dCB0byB0aGUgc3RhdGUgaXQgd2FzIGJlZm9yZSB0aGUgbWFzayB3YXMgYXBwbGllZC5cbiAqXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcnxQSVhJLkNhbnZhc1JlbmRlcmVyfSBUaGUgcmVuZGVyZXIgY29udGV4dCB0byB1c2UuXG4gKi9cbkNhbnZhc01hc2tNYW5hZ2VyLnByb3RvdHlwZS5wb3BNYXNrID0gZnVuY3Rpb24gKHJlbmRlcmVyKVxue1xuICAgIHJlbmRlcmVyLmNvbnRleHQucmVzdG9yZSgpO1xufTtcblxuQ2FudmFzTWFza01hbmFnZXIucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoKSB7fTtcbiIsInZhciB1dGlscyA9IHJlcXVpcmUoJy4uLy4uLy4uL3V0aWxzJyk7XG5cbi8qKlxuICogVXRpbGl0eSBtZXRob2RzIGZvciBTcHJpdGUvVGV4dHVyZSB0aW50aW5nLlxuICogQHN0YXRpY1xuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICovXG52YXIgQ2FudmFzVGludGVyID0ge307XG5tb2R1bGUuZXhwb3J0cyA9IENhbnZhc1RpbnRlcjtcblxuLyoqXG4gKiBCYXNpY2FsbHkgdGhpcyBtZXRob2QganVzdCBuZWVkcyBhIHNwcml0ZSBhbmQgYSBjb2xvciBhbmQgdGludHMgdGhlIHNwcml0ZSB3aXRoIHRoZSBnaXZlbiBjb2xvci5cbiAqXG4gKiBAcGFyYW0gc3ByaXRlIHtQSVhJLlNwcml0ZX0gdGhlIHNwcml0ZSB0byB0aW50XG4gKiBAcGFyYW0gY29sb3Ige251bWJlcn0gdGhlIGNvbG9yIHRvIHVzZSB0byB0aW50IHRoZSBzcHJpdGUgd2l0aFxuICogQHJldHVybiB7SFRNTENhbnZhc0VsZW1lbnR9IFRoZSB0aW50ZWQgY2FudmFzXG4gKi9cbkNhbnZhc1RpbnRlci5nZXRUaW50ZWRUZXh0dXJlID0gZnVuY3Rpb24gKHNwcml0ZSwgY29sb3IpXG57XG4gICAgdmFyIHRleHR1cmUgPSBzcHJpdGUudGV4dHVyZTtcblxuICAgIGNvbG9yID0gQ2FudmFzVGludGVyLnJvdW5kQ29sb3IoY29sb3IpO1xuXG4gICAgdmFyIHN0cmluZ0NvbG9yID0gJyMnICsgKCcwMDAwMCcgKyAoIGNvbG9yIHwgMCkudG9TdHJpbmcoMTYpKS5zdWJzdHIoLTYpO1xuXG4gICAgdGV4dHVyZS50aW50Q2FjaGUgPSB0ZXh0dXJlLnRpbnRDYWNoZSB8fCB7fTtcblxuICAgIGlmICh0ZXh0dXJlLnRpbnRDYWNoZVtzdHJpbmdDb2xvcl0pXG4gICAge1xuICAgICAgICByZXR1cm4gdGV4dHVyZS50aW50Q2FjaGVbc3RyaW5nQ29sb3JdO1xuICAgIH1cblxuICAgICAvLyBjbG9uZSB0ZXh0dXJlLi5cbiAgICB2YXIgY2FudmFzID0gQ2FudmFzVGludGVyLmNhbnZhcyB8fCBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdjYW52YXMnKTtcblxuICAgIC8vQ2FudmFzVGludGVyLnRpbnRXaXRoUGVyUGl4ZWwodGV4dHVyZSwgc3RyaW5nQ29sb3IsIGNhbnZhcyk7XG4gICAgQ2FudmFzVGludGVyLnRpbnRNZXRob2QodGV4dHVyZSwgY29sb3IsIGNhbnZhcyk7XG5cbiAgICBpZiAoQ2FudmFzVGludGVyLmNvbnZlcnRUaW50VG9JbWFnZSlcbiAgICB7XG4gICAgICAgIC8vIGlzIHRoaXMgYmV0dGVyP1xuICAgICAgICB2YXIgdGludEltYWdlID0gbmV3IEltYWdlKCk7XG4gICAgICAgIHRpbnRJbWFnZS5zcmMgPSBjYW52YXMudG9EYXRhVVJMKCk7XG5cbiAgICAgICAgdGV4dHVyZS50aW50Q2FjaGVbc3RyaW5nQ29sb3JdID0gdGludEltYWdlO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICB0ZXh0dXJlLnRpbnRDYWNoZVtzdHJpbmdDb2xvcl0gPSBjYW52YXM7XG4gICAgICAgIC8vIGlmIHdlIGFyZSBub3QgY29udmVydGluZyB0aGUgdGV4dHVyZSB0byBhbiBpbWFnZSB0aGVuIHdlIG5lZWQgdG8gbG9zZSB0aGUgcmVmZXJlbmNlIHRvIHRoZSBjYW52YXNcbiAgICAgICAgQ2FudmFzVGludGVyLmNhbnZhcyA9IG51bGw7XG4gICAgfVxuXG4gICAgcmV0dXJuIGNhbnZhcztcbn07XG5cbi8qKlxuICogVGludCBhIHRleHR1cmUgdXNpbmcgdGhlICdtdWx0aXBseScgb3BlcmF0aW9uLlxuICpcbiAqIEBwYXJhbSB0ZXh0dXJlIHtQSVhJLlRleHR1cmV9IHRoZSB0ZXh0dXJlIHRvIHRpbnRcbiAqIEBwYXJhbSBjb2xvciB7bnVtYmVyfSB0aGUgY29sb3IgdG8gdXNlIHRvIHRpbnQgdGhlIHNwcml0ZSB3aXRoXG4gKiBAcGFyYW0gY2FudmFzIHtIVE1MQ2FudmFzRWxlbWVudH0gdGhlIGN1cnJlbnQgY2FudmFzXG4gKi9cbkNhbnZhc1RpbnRlci50aW50V2l0aE11bHRpcGx5ID0gZnVuY3Rpb24gKHRleHR1cmUsIGNvbG9yLCBjYW52YXMpXG57XG4gICAgdmFyIGNvbnRleHQgPSBjYW52YXMuZ2V0Q29udGV4dCggJzJkJyApO1xuXG4gICAgdmFyIHJlc29sdXRpb24gPSB0ZXh0dXJlLmJhc2VUZXh0dXJlLnJlc29sdXRpb247XG5cbiAgICB2YXIgY3JvcCA9IHRleHR1cmUuY3JvcC5jbG9uZSgpO1xuICAgIGNyb3AueCAqPSByZXNvbHV0aW9uO1xuICAgIGNyb3AueSAqPSByZXNvbHV0aW9uO1xuICAgIGNyb3Aud2lkdGggKj0gcmVzb2x1dGlvbjtcbiAgICBjcm9wLmhlaWdodCAqPSByZXNvbHV0aW9uO1xuXG4gICAgY2FudmFzLndpZHRoID0gY3JvcC53aWR0aDtcbiAgICBjYW52YXMuaGVpZ2h0ID0gY3JvcC5oZWlnaHQ7XG5cbiAgICBjb250ZXh0LmZpbGxTdHlsZSA9ICcjJyArICgnMDAwMDAnICsgKCBjb2xvciB8IDApLnRvU3RyaW5nKDE2KSkuc3Vic3RyKC02KTtcblxuICAgIGNvbnRleHQuZmlsbFJlY3QoMCwgMCwgY3JvcC53aWR0aCwgY3JvcC5oZWlnaHQpO1xuXG4gICAgY29udGV4dC5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb24gPSAnbXVsdGlwbHknO1xuXG4gICAgY29udGV4dC5kcmF3SW1hZ2UoXG4gICAgICAgIHRleHR1cmUuYmFzZVRleHR1cmUuc291cmNlLFxuICAgICAgICBjcm9wLngsXG4gICAgICAgIGNyb3AueSxcbiAgICAgICAgY3JvcC53aWR0aCxcbiAgICAgICAgY3JvcC5oZWlnaHQsXG4gICAgICAgIDAsXG4gICAgICAgIDAsXG4gICAgICAgIGNyb3Aud2lkdGgsXG4gICAgICAgIGNyb3AuaGVpZ2h0XG4gICAgKTtcblxuICAgIGNvbnRleHQuZ2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uID0gJ2Rlc3RpbmF0aW9uLWF0b3AnO1xuXG4gICAgY29udGV4dC5kcmF3SW1hZ2UoXG4gICAgICAgIHRleHR1cmUuYmFzZVRleHR1cmUuc291cmNlLFxuICAgICAgICBjcm9wLngsXG4gICAgICAgIGNyb3AueSxcbiAgICAgICAgY3JvcC53aWR0aCxcbiAgICAgICAgY3JvcC5oZWlnaHQsXG4gICAgICAgIDAsXG4gICAgICAgIDAsXG4gICAgICAgIGNyb3Aud2lkdGgsXG4gICAgICAgIGNyb3AuaGVpZ2h0XG4gICAgKTtcbn07XG5cbi8qKlxuICogVGludCBhIHRleHR1cmUgdXNpbmcgdGhlICdvdmVybGF5JyBvcGVyYXRpb24uXG4gKlxuICogQHBhcmFtIHRleHR1cmUge1BJWEkuVGV4dHVyZX0gdGhlIHRleHR1cmUgdG8gdGludFxuICogQHBhcmFtIGNvbG9yIHtudW1iZXJ9IHRoZSBjb2xvciB0byB1c2UgdG8gdGludCB0aGUgc3ByaXRlIHdpdGhcbiAqIEBwYXJhbSBjYW52YXMge0hUTUxDYW52YXNFbGVtZW50fSB0aGUgY3VycmVudCBjYW52YXNcbiAqL1xuQ2FudmFzVGludGVyLnRpbnRXaXRoT3ZlcmxheSA9IGZ1bmN0aW9uICh0ZXh0dXJlLCBjb2xvciwgY2FudmFzKVxue1xuICAgIHZhciBjb250ZXh0ID0gY2FudmFzLmdldENvbnRleHQoICcyZCcgKTtcblxuICAgIHZhciByZXNvbHV0aW9uID0gdGV4dHVyZS5iYXNlVGV4dHVyZS5yZXNvbHV0aW9uO1xuXG4gICAgdmFyIGNyb3AgPSB0ZXh0dXJlLmNyb3AuY2xvbmUoKTtcbiAgICBjcm9wLnggKj0gcmVzb2x1dGlvbjtcbiAgICBjcm9wLnkgKj0gcmVzb2x1dGlvbjtcbiAgICBjcm9wLndpZHRoICo9IHJlc29sdXRpb247XG4gICAgY3JvcC5oZWlnaHQgKj0gcmVzb2x1dGlvbjtcblxuICAgIGNhbnZhcy53aWR0aCA9IGNyb3Aud2lkdGg7XG4gICAgY2FudmFzLmhlaWdodCA9IGNyb3AuaGVpZ2h0O1xuXG4gICAgY29udGV4dC5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb24gPSAnY29weSc7XG4gICAgY29udGV4dC5maWxsU3R5bGUgPSAnIycgKyAoJzAwMDAwJyArICggY29sb3IgfCAwKS50b1N0cmluZygxNikpLnN1YnN0cigtNik7XG4gICAgY29udGV4dC5maWxsUmVjdCgwLCAwLCBjcm9wLndpZHRoLCBjcm9wLmhlaWdodCk7XG5cbiAgICBjb250ZXh0Lmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbiA9ICdkZXN0aW5hdGlvbi1hdG9wJztcbiAgICBjb250ZXh0LmRyYXdJbWFnZShcbiAgICAgICAgdGV4dHVyZS5iYXNlVGV4dHVyZS5zb3VyY2UsXG4gICAgICAgIGNyb3AueCxcbiAgICAgICAgY3JvcC55LFxuICAgICAgICBjcm9wLndpZHRoLFxuICAgICAgICBjcm9wLmhlaWdodCxcbiAgICAgICAgMCxcbiAgICAgICAgMCxcbiAgICAgICAgY3JvcC53aWR0aCxcbiAgICAgICAgY3JvcC5oZWlnaHRcbiAgICApO1xuXG4gICAgLy8gY29udGV4dC5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb24gPSAnY29weSc7XG59O1xuXG4vKipcbiAqIFRpbnQgYSB0ZXh0dXJlIHBpeGVsIHBlciBwaXhlbC5cbiAqXG4gKiBAcGFyYW0gdGV4dHVyZSB7UElYSS5UZXh0dXJlfSB0aGUgdGV4dHVyZSB0byB0aW50XG4gKiBAcGFyYW0gY29sb3Ige251bWJlcn0gdGhlIGNvbG9yIHRvIHVzZSB0byB0aW50IHRoZSBzcHJpdGUgd2l0aFxuICogQHBhcmFtIGNhbnZhcyB7SFRNTENhbnZhc0VsZW1lbnR9IHRoZSBjdXJyZW50IGNhbnZhc1xuICovXG5DYW52YXNUaW50ZXIudGludFdpdGhQZXJQaXhlbCA9IGZ1bmN0aW9uICh0ZXh0dXJlLCBjb2xvciwgY2FudmFzKVxue1xuICAgIHZhciBjb250ZXh0ID0gY2FudmFzLmdldENvbnRleHQoICcyZCcgKTtcblxuICAgIHZhciByZXNvbHV0aW9uID0gdGV4dHVyZS5iYXNlVGV4dHVyZS5yZXNvbHV0aW9uO1xuXG4gICAgdmFyIGNyb3AgPSB0ZXh0dXJlLmNyb3AuY2xvbmUoKTtcbiAgICBjcm9wLnggKj0gcmVzb2x1dGlvbjtcbiAgICBjcm9wLnkgKj0gcmVzb2x1dGlvbjtcbiAgICBjcm9wLndpZHRoICo9IHJlc29sdXRpb247XG4gICAgY3JvcC5oZWlnaHQgKj0gcmVzb2x1dGlvbjtcblxuICAgIGNhbnZhcy53aWR0aCA9IGNyb3Aud2lkdGg7XG4gICAgY2FudmFzLmhlaWdodCA9IGNyb3AuaGVpZ2h0O1xuXG4gICAgY29udGV4dC5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb24gPSAnY29weSc7XG4gICAgY29udGV4dC5kcmF3SW1hZ2UoXG4gICAgICAgIHRleHR1cmUuYmFzZVRleHR1cmUuc291cmNlLFxuICAgICAgICBjcm9wLngsXG4gICAgICAgIGNyb3AueSxcbiAgICAgICAgY3JvcC53aWR0aCxcbiAgICAgICAgY3JvcC5oZWlnaHQsXG4gICAgICAgIDAsXG4gICAgICAgIDAsXG4gICAgICAgIGNyb3Aud2lkdGgsXG4gICAgICAgIGNyb3AuaGVpZ2h0XG4gICAgKTtcblxuICAgIHZhciByZ2JWYWx1ZXMgPSB1dGlscy5oZXgycmdiKGNvbG9yKTtcbiAgICB2YXIgciA9IHJnYlZhbHVlc1swXSwgZyA9IHJnYlZhbHVlc1sxXSwgYiA9IHJnYlZhbHVlc1syXTtcblxuICAgIHZhciBwaXhlbERhdGEgPSBjb250ZXh0LmdldEltYWdlRGF0YSgwLCAwLCBjcm9wLndpZHRoLCBjcm9wLmhlaWdodCk7XG5cbiAgICB2YXIgcGl4ZWxzID0gcGl4ZWxEYXRhLmRhdGE7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHBpeGVscy5sZW5ndGg7IGkgKz0gNClcbiAgICB7XG4gICAgICAgIHBpeGVsc1tpKzBdICo9IHI7XG4gICAgICAgIHBpeGVsc1tpKzFdICo9IGc7XG4gICAgICAgIHBpeGVsc1tpKzJdICo9IGI7XG4gICAgfVxuXG4gICAgY29udGV4dC5wdXRJbWFnZURhdGEocGl4ZWxEYXRhLCAwLCAwKTtcbn07XG5cbi8qKlxuICogUm91bmRzIHRoZSBzcGVjaWZpZWQgY29sb3IgYWNjb3JkaW5nIHRvIHRoZSBDYW52YXNUaW50ZXIuY2FjaGVTdGVwc1BlckNvbG9yQ2hhbm5lbC5cbiAqXG4gKiBAcGFyYW0gY29sb3Ige251bWJlcn0gdGhlIGNvbG9yIHRvIHJvdW5kLCBzaG91bGQgYmUgYSBoZXggY29sb3JcbiAqL1xuQ2FudmFzVGludGVyLnJvdW5kQ29sb3IgPSBmdW5jdGlvbiAoY29sb3IpXG57XG4gICAgdmFyIHN0ZXAgPSBDYW52YXNUaW50ZXIuY2FjaGVTdGVwc1BlckNvbG9yQ2hhbm5lbDtcblxuICAgIHZhciByZ2JWYWx1ZXMgPSB1dGlscy5oZXgycmdiKGNvbG9yKTtcblxuICAgIHJnYlZhbHVlc1swXSA9IE1hdGgubWluKDI1NSwgKHJnYlZhbHVlc1swXSAvIHN0ZXApICogc3RlcCk7XG4gICAgcmdiVmFsdWVzWzFdID0gTWF0aC5taW4oMjU1LCAocmdiVmFsdWVzWzFdIC8gc3RlcCkgKiBzdGVwKTtcbiAgICByZ2JWYWx1ZXNbMl0gPSBNYXRoLm1pbigyNTUsIChyZ2JWYWx1ZXNbMl0gLyBzdGVwKSAqIHN0ZXApO1xuXG4gICAgcmV0dXJuIHV0aWxzLnJnYjJoZXgocmdiVmFsdWVzKTtcbn07XG5cbi8qKlxuICogTnVtYmVyIG9mIHN0ZXBzIHdoaWNoIHdpbGwgYmUgdXNlZCBhcyBhIGNhcCB3aGVuIHJvdW5kaW5nIGNvbG9ycy5cbiAqXG4gKiBAbWVtYmVyXG4gKi9cbkNhbnZhc1RpbnRlci5jYWNoZVN0ZXBzUGVyQ29sb3JDaGFubmVsID0gODtcblxuLyoqXG4gKiBUaW50IGNhY2hlIGJvb2xlYW4gZmxhZy5cbiAqXG4gKiBAbWVtYmVyXG4gKi9cbkNhbnZhc1RpbnRlci5jb252ZXJ0VGludFRvSW1hZ2UgPSBmYWxzZTtcblxuLyoqXG4gKiBXaGV0aGVyIG9yIG5vdCB0aGUgQ2FudmFzIEJsZW5kTW9kZXMgYXJlIHN1cHBvcnRlZCwgY29uc2VxdWVudGx5IHRoZSBhYmlsaXR5IHRvIHRpbnQgdXNpbmcgdGhlIG11bHRpcGx5IG1ldGhvZC5cbiAqXG4gKiBAbWVtYmVyXG4gKi9cbkNhbnZhc1RpbnRlci5jYW5Vc2VNdWx0aXBseSA9IHV0aWxzLmNhblVzZU5ld0NhbnZhc0JsZW5kTW9kZXMoKTtcblxuLyoqXG4gKiBUaGUgdGludGluZyBtZXRob2QgdGhhdCB3aWxsIGJlIHVzZWQuXG4gKlxuICovXG5DYW52YXNUaW50ZXIudGludE1ldGhvZCA9IENhbnZhc1RpbnRlci5jYW5Vc2VNdWx0aXBseSA/IENhbnZhc1RpbnRlci50aW50V2l0aE11bHRpcGx5IDogIENhbnZhc1RpbnRlci50aW50V2l0aFBlclBpeGVsO1xuIiwidmFyIEdMVGV4dHVyZSA9IHJlcXVpcmUoJ3BpeGktZ2wtY29yZScpLkdMVGV4dHVyZSxcblx0dXRpbHMgPSByZXF1aXJlKCcuLi8uLi91dGlscycpO1xuXG4vKipcbiAqIEhlbHBlciBjbGFzcyB0byBjcmVhdGUgYSB3ZWJHTCBUZXh0dXJlXG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIGdsIHtXZWJHTFJlbmRlcmluZ0NvbnRleHR9XG4gKi9cblxudmFyIFRleHR1cmVNYW5hZ2VyID0gZnVuY3Rpb24oZ2wpXG57XG5cdHRoaXMuZ2wgPSBnbDtcblxuXHQvLyB0cmFjayB0ZXh0dXJlcyBpbiB0aGUgcmVuZGVyZXIgc28gd2UgY2FuIG5vIGxvbmdlciBsaXN0ZW4gdG8gdGhlbSBvbiBkZXN0cnVjdGlvbi5cblx0dGhpcy5fbWFuYWdlZFRleHR1cmVzID0gW107XG4gICAgdGhpcy5nbFRleHR1cmVzID0ge307XG5cbn1cblxuVGV4dHVyZU1hbmFnZXIucHJvdG90eXBlLmJpbmRUZXh0dXJlID0gZnVuY3Rpb24odGV4dHVyZSlcbntcblxufVxuXG5cblRleHR1cmVNYW5hZ2VyLnByb3RvdHlwZS5nZXRUZXh0dXJlID0gZnVuY3Rpb24odGV4dHVyZSlcbntcblxufVxuXG4vKipcbiAqIFVwZGF0ZXMgYW5kL29yIENyZWF0ZXMgYSBXZWJHTCB0ZXh0dXJlIGZvciB0aGUgcmVuZGVyZXIncyBjb250ZXh0LlxuICpcbiAqIEBwYXJhbSB0ZXh0dXJlIHtQSVhJLkJhc2VUZXh0dXJlfFBJWEkuVGV4dHVyZX0gdGhlIHRleHR1cmUgdG8gdXBkYXRlXG4gKi9cblRleHR1cmVNYW5hZ2VyLnByb3RvdHlwZS51cGRhdGVUZXh0dXJlID0gZnVuY3Rpb24odGV4dHVyZSlcbntcblx0dGV4dHVyZSA9IHRleHR1cmUuYmFzZVRleHR1cmUgfHwgdGV4dHVyZTtcblxuXHRpZiAoIXRleHR1cmUuaGFzTG9hZGVkKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIFxuICAgIHZhciBnbCA9IHRoaXMuZ2w7XG4gICAgdmFyIGdsVGV4dHVyZSA9IHRoaXMuZ2xUZXh0dXJlc1t0ZXh0dXJlLnVpZF0vL3RleHR1cmUuX2dsVGV4dHVyZXNbZ2wuaWRdO1xuXG4gICAgaWYgKCFnbFRleHR1cmUpXG4gICAge1xuICAgICAgICBnbFRleHR1cmUgPSBuZXcgR0xUZXh0dXJlKGdsKTtcbiAgICAgICAgZ2xUZXh0dXJlLnByZW11bHRpcGx5QWxwaGEgPSB0cnVlXG4gICAgICAgIHRleHR1cmUuX2dsVGV4dHVyZXNbZ2wuaWRdID0gZ2xUZXh0dXJlO1xuXG4gICAgICAgLy8gdGhpcy5nbFRleHR1cmVzW3RleHR1cmUudWlkXSA9IGdsVGV4dHVyZTtcblxuICAgICAgICB0ZXh0dXJlLm9uKCd1cGRhdGUnLCB0aGlzLnVwZGF0ZVRleHR1cmUsIHRoaXMpO1xuICAgICAgICB0ZXh0dXJlLm9uKCdkaXNwb3NlJywgdGhpcy5kZXN0cm95VGV4dHVyZSwgdGhpcyk7XG4gICAgICAgIFxuICAgICAgICB0aGlzLl9tYW5hZ2VkVGV4dHVyZXMucHVzaCh0ZXh0dXJlKTtcbiAgICB9XG5cbiAgICBnbFRleHR1cmUudXBsb2FkKHRleHR1cmUuc291cmNlKTtcbiAgICBcbiAgICAvL1RPRE8gY2hlY2sgaXMgcG93ZXIgb2YgdHdvLi5cbiAgICBnbFRleHR1cmUuZW5hYmxlV3JhcENsYW1wKCk7XG5cblxuICAgIC8vIFRPRE8gY2hlY2sgZm9yIHNjYWxpbmcgdHlwZVxuICAgIGdsVGV4dHVyZS5lbmFibGVMaW5lYXJTY2FsaW5nKCk7XG5cbiAgICByZXR1cm4gIHRleHR1cmUuX2dsVGV4dHVyZXNbZ2wuaWRdO1xufVxuXG4vKipcbiAqIERlbGV0ZXMgdGhlIHRleHR1cmUgZnJvbSBXZWJHTFxuICpcbiAqIEBwYXJhbSB0ZXh0dXJlIHtQSVhJLkJhc2VUZXh0dXJlfFBJWEkuVGV4dHVyZX0gdGhlIHRleHR1cmUgdG8gZGVzdHJveVxuICovXG5UZXh0dXJlTWFuYWdlci5wcm90b3R5cGUuZGVzdHJveVRleHR1cmUgPSBmdW5jdGlvbih0ZXh0dXJlLCBfc2tpcFJlbW92ZSlcbntcblx0dGV4dHVyZSA9IHRleHR1cmUuYmFzZVRleHR1cmUgfHwgdGV4dHVyZTtcblxuICAgIGlmICghdGV4dHVyZS5oYXNMb2FkZWQpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHRleHR1cmUuX2dsVGV4dHVyZXNbdGhpcy5nbC5pZF0pXG4gICAge1xuICAgICAgICB0ZXh0dXJlLl9nbFRleHR1cmVzW3RoaXMuZ2wuaWRdLmRlc3Ryb3koKTtcbiAgICAgICAgdGV4dHVyZS5vZmYoJ3VwZGF0ZScsIHRoaXMudXBkYXRlVGV4dHVyZSwgdGhpcyk7XG4gICAgICAgIHRleHR1cmUub2ZmKCdkaXNwb3NlJywgdGhpcy5kZXN0cm95VGV4dHVyZSwgdGhpcyk7XG5cblxuICAgICAgICBkZWxldGUgdGV4dHVyZS5fZ2xUZXh0dXJlc1t0aGlzLmdsLmlkXTtcblxuICAgICAgICBpZiAoIV9za2lwUmVtb3ZlKVxuICAgICAgICB7XG4gICAgICAgICAgICB2YXIgaSA9IHRoaXMuX21hbmFnZWRUZXh0dXJlcy5pbmRleE9mKHRleHR1cmUpO1xuICAgICAgICAgICAgaWYgKGkgIT09IC0xKSB7XG4gICAgICAgICAgICAgICAgdXRpbHMucmVtb3ZlSXRlbXModGhpcy5fbWFuYWdlZFRleHR1cmVzLCBpLCAxKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn1cblxuVGV4dHVyZU1hbmFnZXIucHJvdG90eXBlLnJlbW92ZUFsbCA9IGZ1bmN0aW9uKClcbntcblx0Ly8gZW1wdHkgYWxsIHRoZSBvbGQgZ2wgdGV4dHVyZXMgYXMgdGhleSBhcmUgdXNlbGVzcyBub3dcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuX21hbmFnZWRUZXh0dXJlcy5sZW5ndGg7ICsraSlcbiAgICB7XG4gICAgICAgIHZhciB0ZXh0dXJlID0gdGhpcy5fbWFuYWdlZFRleHR1cmVzW2ldO1xuICAgICAgICBpZiAodGV4dHVyZS5fZ2xUZXh0dXJlc1t0aGlzLmdsLmlkXSlcbiAgICAgICAge1xuICAgICAgICAgICAgZGVsZXRlIHRleHR1cmUuX2dsVGV4dHVyZXNbdGhpcy5nbC5pZF07XG4gICAgICAgIH1cbiAgICB9XG59XG5cblRleHR1cmVNYW5hZ2VyLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24oKVxue1xuICAgIC8vIGRlc3Ryb3kgbWFuYWdlZCB0ZXh0dXJlc1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5fbWFuYWdlZFRleHR1cmVzLmxlbmd0aDsgKytpKVxuICAgIHtcbiAgICAgICAgdmFyIHRleHR1cmUgPSB0aGlzLl9tYW5hZ2VkVGV4dHVyZXNbaV07XG4gICAgICAgIHRoaXMuZGVzdHJveVRleHR1cmUodGV4dHVyZSwgdHJ1ZSk7XG4gICAgICAgIHRleHR1cmUub2ZmKCd1cGRhdGUnLCB0aGlzLnVwZGF0ZVRleHR1cmUsIHRoaXMpO1xuICAgICAgICB0ZXh0dXJlLm9mZignZGlzcG9zZScsIHRoaXMuZGVzdHJveVRleHR1cmUsIHRoaXMpO1xuICAgIH1cblxuICAgIHRoaXMuX21hbmFnZWRUZXh0dXJlcyA9IG51bGw7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gVGV4dHVyZU1hbmFnZXI7XG5cbiIsInZhciBTeXN0ZW1SZW5kZXJlciA9IHJlcXVpcmUoJy4uL1N5c3RlbVJlbmRlcmVyJyksXG4gICAgU2hhZGVyTWFuYWdlciA9IHJlcXVpcmUoJy4vbWFuYWdlcnMvU2hhZGVyTWFuYWdlcicpLFxuICAgIE1hc2tNYW5hZ2VyID0gcmVxdWlyZSgnLi9tYW5hZ2Vycy9NYXNrTWFuYWdlcicpLFxuICAgIFN0ZW5jaWxNYW5hZ2VyID0gcmVxdWlyZSgnLi9tYW5hZ2Vycy9TdGVuY2lsTWFuYWdlcicpLFxuICAgIEZpbHRlck1hbmFnZXIgPSByZXF1aXJlKCcuL21hbmFnZXJzL0ZpbHRlck1hbmFnZXInKSxcbiAgICBCbGVuZE1vZGVNYW5hZ2VyID0gcmVxdWlyZSgnLi9tYW5hZ2Vycy9CbGVuZE1vZGVNYW5hZ2VyJyksXG4gICAgUmVuZGVyVGFyZ2V0ID0gcmVxdWlyZSgnLi91dGlscy9SZW5kZXJUYXJnZXQnKSxcbiAgICBPYmplY3RSZW5kZXJlciA9IHJlcXVpcmUoJy4vdXRpbHMvT2JqZWN0UmVuZGVyZXInKSxcbiAgICBGWEFBRmlsdGVyID0gcmVxdWlyZSgnLi9maWx0ZXJzL0ZYQUFGaWx0ZXInKSxcbiAgICBUZXh0dXJlTWFuYWdlciA9IHJlcXVpcmUoJy4vVGV4dHVyZU1hbmFnZXInKSxcbiAgICBjcmVhdGVDb250ZXh0ID0gcmVxdWlyZSgncGl4aS1nbC1jb3JlJykuY3JlYXRlQ29udGV4dCxcbiAgICBtYXBXZWJHTEJsZW5kTW9kZXNUb1BpeGkgPSByZXF1aXJlKCcuL3V0aWxzL21hcFdlYkdMQmxlbmRNb2Rlc1RvUGl4aScpLFxuICAgIG1hcFdlYkdMRHJhd01vZGVzVG9QaXhpID0gcmVxdWlyZSgnLi91dGlscy9tYXBXZWJHTERyYXdNb2Rlc1RvUGl4aScpLFxuICAgIHV0aWxzID0gcmVxdWlyZSgnLi4vLi4vdXRpbHMnKSxcbiAgICBDT05TVCA9IHJlcXVpcmUoJy4uLy4uL2NvbnN0Jyk7XG5cbi8qKlxuICogVGhlIFdlYkdMUmVuZGVyZXIgZHJhd3MgdGhlIHNjZW5lIGFuZCBhbGwgaXRzIGNvbnRlbnQgb250byBhIHdlYkdMIGVuYWJsZWQgY2FudmFzLiBUaGlzIHJlbmRlcmVyXG4gKiBzaG91bGQgYmUgdXNlZCBmb3IgYnJvd3NlcnMgdGhhdCBzdXBwb3J0IHdlYkdMLiBUaGlzIFJlbmRlciB3b3JrcyBieSBhdXRvbWF0aWNhbGx5IG1hbmFnaW5nIHdlYkdMQmF0Y2hzLlxuICogU28gbm8gbmVlZCBmb3IgU3ByaXRlIEJhdGNoZXMgb3IgU3ByaXRlIENsb3Vkcy5cbiAqIERvbid0IGZvcmdldCB0byBhZGQgdGhlIHZpZXcgdG8geW91ciBET00gb3IgeW91IHdpbGwgbm90IHNlZSBhbnl0aGluZyA6KVxuICpcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqIEBleHRlbmRzIFBJWEkuU3lzdGVtUmVuZGVyZXJcbiAqIEBwYXJhbSBbd2lkdGg9MF0ge251bWJlcn0gdGhlIHdpZHRoIG9mIHRoZSBjYW52YXMgdmlld1xuICogQHBhcmFtIFtoZWlnaHQ9MF0ge251bWJlcn0gdGhlIGhlaWdodCBvZiB0aGUgY2FudmFzIHZpZXdcbiAqIEBwYXJhbSBbb3B0aW9uc10ge29iamVjdH0gVGhlIG9wdGlvbmFsIHJlbmRlcmVyIHBhcmFtZXRlcnNcbiAqIEBwYXJhbSBbb3B0aW9ucy52aWV3XSB7SFRNTENhbnZhc0VsZW1lbnR9IHRoZSBjYW52YXMgdG8gdXNlIGFzIGEgdmlldywgb3B0aW9uYWxcbiAqIEBwYXJhbSBbb3B0aW9ucy50cmFuc3BhcmVudD1mYWxzZV0ge2Jvb2xlYW59IElmIHRoZSByZW5kZXIgdmlldyBpcyB0cmFuc3BhcmVudCwgZGVmYXVsdCBmYWxzZVxuICogQHBhcmFtIFtvcHRpb25zLmF1dG9SZXNpemU9ZmFsc2VdIHtib29sZWFufSBJZiB0aGUgcmVuZGVyIHZpZXcgaXMgYXV0b21hdGljYWxseSByZXNpemVkLCBkZWZhdWx0IGZhbHNlXG4gKiBAcGFyYW0gW29wdGlvbnMuYW50aWFsaWFzPWZhbHNlXSB7Ym9vbGVhbn0gc2V0cyBhbnRpYWxpYXMuIElmIG5vdCBhdmFpbGFibGUgbmF0aXZlbHkgdGhlbiBGWEFBIGFudGlhbGlhc2luZyBpcyB1c2VkXG4gKiBAcGFyYW0gW29wdGlvbnMuZm9yY2VGWEFBPWZhbHNlXSB7Ym9vbGVhbn0gZm9yY2VzIEZYQUEgYW50aWFsaWFzaW5nIHRvIGJlIHVzZWQgb3ZlciBuYXRpdmUuIEZYQUEgaXMgZmFzdGVyLCBidXQgbWF5IG5vdCBhbHdheXMgbG9vayBhcyBncmVhdFxuICogQHBhcmFtIFtvcHRpb25zLnJlc29sdXRpb249MV0ge251bWJlcn0gdGhlIHJlc29sdXRpb24gb2YgdGhlIHJlbmRlcmVyIHJldGluYSB3b3VsZCBiZSAyXG4gKiBAcGFyYW0gW29wdGlvbnMuY2xlYXJCZWZvcmVSZW5kZXI9dHJ1ZV0ge2Jvb2xlYW59IFRoaXMgc2V0cyBpZiB0aGUgQ2FudmFzUmVuZGVyZXIgd2lsbCBjbGVhciB0aGUgY2FudmFzIG9yXG4gKiAgICAgIG5vdCBiZWZvcmUgdGhlIG5ldyByZW5kZXIgcGFzcy4gSWYgeW91IHdpc2ggdG8gc2V0IHRoaXMgdG8gZmFsc2UsIHlvdSAqbXVzdCogc2V0IHByZXNlcnZlRHJhd2luZ0J1ZmZlciB0byBgdHJ1ZWAuXG4gKiBAcGFyYW0gW29wdGlvbnMucHJlc2VydmVEcmF3aW5nQnVmZmVyPWZhbHNlXSB7Ym9vbGVhbn0gZW5hYmxlcyBkcmF3aW5nIGJ1ZmZlciBwcmVzZXJ2YXRpb24sIGVuYWJsZSB0aGlzIGlmXG4gKiAgICAgIHlvdSBuZWVkIHRvIGNhbGwgdG9EYXRhVXJsIG9uIHRoZSB3ZWJnbCBjb250ZXh0LlxuICogQHBhcmFtIFtvcHRpb25zLnJvdW5kUGl4ZWxzPWZhbHNlXSB7Ym9vbGVhbn0gSWYgdHJ1ZSBQaXhpIHdpbGwgTWF0aC5mbG9vcigpIHgveSB2YWx1ZXMgd2hlbiByZW5kZXJpbmcsIHN0b3BwaW5nIHBpeGVsIGludGVycG9sYXRpb24uXG4gKi9cbmZ1bmN0aW9uIFdlYkdMUmVuZGVyZXIod2lkdGgsIGhlaWdodCwgb3B0aW9ucylcbntcbiAgICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcblxuICAgIFN5c3RlbVJlbmRlcmVyLmNhbGwodGhpcywgJ1dlYkdMJywgd2lkdGgsIGhlaWdodCwgb3B0aW9ucyk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgdHlwZSBvZiB0aGlzIHJlbmRlcmVyIGFzIGEgc3RhbmRhcmRpc2VkIGNvbnN0XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9Ly9cbiAgICAgKlxuICAgICAqL1xuICAgIHRoaXMudHlwZSA9IENPTlNULlJFTkRFUkVSX1RZUEUuV0VCR0w7XG5cbiAgICB0aGlzLmhhbmRsZUNvbnRleHRMb3N0ID0gdGhpcy5oYW5kbGVDb250ZXh0TG9zdC5iaW5kKHRoaXMpO1xuICAgIHRoaXMuaGFuZGxlQ29udGV4dFJlc3RvcmVkID0gdGhpcy5oYW5kbGVDb250ZXh0UmVzdG9yZWQuYmluZCh0aGlzKTtcblxuICAgIHRoaXMudmlldy5hZGRFdmVudExpc3RlbmVyKCd3ZWJnbGNvbnRleHRsb3N0JywgdGhpcy5oYW5kbGVDb250ZXh0TG9zdCwgZmFsc2UpO1xuICAgIHRoaXMudmlldy5hZGRFdmVudExpc3RlbmVyKCd3ZWJnbGNvbnRleHRyZXN0b3JlZCcsIHRoaXMuaGFuZGxlQ29udGV4dFJlc3RvcmVkLCBmYWxzZSk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgb3B0aW9ucyBwYXNzZWQgaW4gdG8gY3JlYXRlIGEgbmV3IHdlYmdsIGNvbnRleHQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtvYmplY3R9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9jb250ZXh0T3B0aW9ucyA9IHtcbiAgICAgICAgYWxwaGE6IHRoaXMudHJhbnNwYXJlbnQsXG4gICAgICAgIGFudGlhbGlhczogb3B0aW9ucy5hbnRpYWxpYXMsXG4gICAgICAgIHByZW11bHRpcGxpZWRBbHBoYTogdGhpcy50cmFuc3BhcmVudCAmJiB0aGlzLnRyYW5zcGFyZW50ICE9PSAnbm90TXVsdGlwbGllZCcsXG4gICAgICAgIHN0ZW5jaWw6IHRydWUsXG4gICAgICAgIHByZXNlcnZlRHJhd2luZ0J1ZmZlcjogb3B0aW9ucy5wcmVzZXJ2ZURyYXdpbmdCdWZmZXJcbiAgICB9O1xuXG4gICAgdGhpcy5fYmFja2dyb3VuZENvbG9yUmdiYVszXSA9IHRoaXMudHJhbnNwYXJlbnQgPyAwIDogMTtcblxuICAgIC8qKlxuICAgICAqIERlYWxzIHdpdGggbWFuYWdpbmcgdGhlIHNoYWRlciBwcm9ncmFtcyBhbmQgdGhlaXIgYXR0cmlicy5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuU2hhZGVyTWFuYWdlcn1cbiAgICAgKi9cbiAgICB0aGlzLnNoYWRlck1hbmFnZXIgPSBuZXcgU2hhZGVyTWFuYWdlcih0aGlzKTtcblxuICAgIC8qKlxuICAgICAqIE1hbmFnZXMgdGhlIG1hc2tzIHVzaW5nIHRoZSBzdGVuY2lsIGJ1ZmZlci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuTWFza01hbmFnZXJ9XG4gICAgICovXG4gICAgdGhpcy5tYXNrTWFuYWdlciA9IG5ldyBNYXNrTWFuYWdlcih0aGlzKTtcblxuICAgIC8qKlxuICAgICAqIE1hbmFnZXMgdGhlIHN0ZW5jaWwgYnVmZmVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5TdGVuY2lsTWFuYWdlcn1cbiAgICAgKi9cbiAgICB0aGlzLnN0ZW5jaWxNYW5hZ2VyID0gbmV3IFN0ZW5jaWxNYW5hZ2VyKHRoaXMpO1xuXG4gICAgLyoqXG4gICAgICogTWFuYWdlcyB0aGUgZmlsdGVycy5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuRmlsdGVyTWFuYWdlcn1cbiAgICAgKi9cbiAgICB0aGlzLmZpbHRlck1hbmFnZXIgPSBuZXcgRmlsdGVyTWFuYWdlcih0aGlzKTtcblxuICAgIC8qKlxuICAgICAqIE1hbmFnZXMgdGhlIGJsZW5kTW9kZXNcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuQmxlbmRNb2RlTWFuYWdlcn1cbiAgICAgKi9cbiAgICB0aGlzLmJsZW5kTW9kZU1hbmFnZXIgPSBuZXcgQmxlbmRNb2RlTWFuYWdlcih0aGlzKTtcblxuICAgIFxuICAgIC8qKlxuICAgICAqIFRoZSBjdXJyZW50bHkgYWN0aXZlIE9iamVjdFJlbmRlcmVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5PYmplY3RSZW5kZXJlcn1cbiAgICAgKi9cbiAgICB0aGlzLmN1cnJlbnRSZW5kZXJlciA9IG5ldyBPYmplY3RSZW5kZXJlcih0aGlzKTtcblxuICAgIHRoaXMuaW5pdFBsdWdpbnMoKTtcblxuICAgIC8vIGluaXRpYWxpemUgdGhlIGNvbnRleHQgc28gaXQgaXMgcmVhZHkgZm9yIHRoZSBtYW5hZ2Vycy5cbiAgICB0aGlzLmdsID0gY3JlYXRlQ29udGV4dCh0aGlzLnZpZXcsIHRoaXMuX2NvbnRleHRPcHRpb25zKTtcblxuICAgIHRoaXMuX2luaXRDb250ZXh0KCk7XG5cbiAgICAvLyBtYXAgc29tZSB3ZWJHTCBibGVuZCBhbmQgZHJhd21vZGVzLi5cbiAgICB0aGlzLmJsZW5kTW9kZXMgPSBtYXBXZWJHTEJsZW5kTW9kZXNUb1BpeGkoZ2wpO1xuICAgIHRoaXMuZHJhd01vZGVzID0gbWFwV2ViR0xEcmF3TW9kZXNUb1BpeGkoZ2wpXG5cbiAgICB0aGlzLl9hY3RpdmVTaGFkZXIgPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogSG9sZHMgdGhlIGN1cnJlbnQgcmVuZGVyIHRhcmdldFxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5SZW5kZXJUYXJnZXR9XG4gICAgICovXG4gICAgdGhpcy5fYWN0aXZlUmVuZGVyVGFyZ2V0ID0gbnVsbDtcbiAgICB0aGlzLl9hY3RpdmVUZXh0dXJlTG9jYXRpb24gPSBudWxsO1xuICAgIHRoaXMuX2FjdGl2ZVRleHR1cmUgPSBudWxsO1xufVxuXG4vLyBjb25zdHJ1Y3RvclxuV2ViR0xSZW5kZXJlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFN5c3RlbVJlbmRlcmVyLnByb3RvdHlwZSk7XG5XZWJHTFJlbmRlcmVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFdlYkdMUmVuZGVyZXI7XG5tb2R1bGUuZXhwb3J0cyA9IFdlYkdMUmVuZGVyZXI7XG51dGlscy5wbHVnaW5UYXJnZXQubWl4aW4oV2ViR0xSZW5kZXJlcik7XG5cbi8qKlxuICogQ3JlYXRlcyB0aGUgV2ViR0wgY29udGV4dFxuICpcbiAqIEBwcml2YXRlXG4gKi9cbldlYkdMUmVuZGVyZXIucHJvdG90eXBlLl9pbml0Q29udGV4dCA9IGZ1bmN0aW9uICgpXG57XG4gICAgdmFyIGdsID0gdGhpcy5nbDtcblxuICAgIC8vIGNyZWF0ZSBhIHRleHR1cmUgbWFuYWdlci4uLlxuICAgIHRoaXMudGV4dHVyZU1hbmFnZXIgPSBuZXcgVGV4dHVyZU1hbmFnZXIoZ2wpO1xuXG4gICAgLy8gc2V0IHVwIHRoZSBkZWZhdWx0IHBpeGkgc2V0dGluZ3MuLlxuICAgIGdsLmRpc2FibGUoZ2wuREVQVEhfVEVTVCk7XG4gICAgZ2wuZGlzYWJsZShnbC5DVUxMX0ZBQ0UpO1xuICAgIGdsLmVuYWJsZShnbC5CTEVORCk7XG5cblxuICAgIHRoaXMucm9vdFJlbmRlclRhcmdldCA9IG5ldyBSZW5kZXJUYXJnZXQoZ2wsIHRoaXMud2lkdGgsIHRoaXMuaGVpZ2h0LCBudWxsLCB0aGlzLnJlc29sdXRpb24sIHRydWUpO1xuICAgIHRoaXMucm9vdFJlbmRlclRhcmdldC5jbGVhckNvbG9yID0gdGhpcy5fYmFja2dyb3VuZENvbG9yUmdiYTtcbiAgICBcbiAgICB0aGlzLmJpbmRSZW5kZXJUYXJnZXQodGhpcy5yb290UmVuZGVyVGFyZ2V0KTtcblxuICAgIHRoaXMuZW1pdCgnY29udGV4dCcsIGdsKTtcblxuICAgIC8vIHNldHVwIHRoZSB3aWR0aC9oZWlnaHQgcHJvcGVydGllcyBhbmQgZ2wgdmlld3BvcnRcbiAgICB0aGlzLnJlc2l6ZSh0aGlzLndpZHRoLCB0aGlzLmhlaWdodCk7ICAgIFxufTtcblxuLyoqXG4gKiBSZW5kZXJzIHRoZSBvYmplY3QgdG8gaXRzIHdlYkdMIHZpZXdcbiAqXG4gKiBAcGFyYW0gb2JqZWN0IHtQSVhJLkRpc3BsYXlPYmplY3R9IHRoZSBvYmplY3QgdG8gYmUgcmVuZGVyZWRcbiAqL1xuV2ViR0xSZW5kZXJlci5wcm90b3R5cGUucmVuZGVyID0gZnVuY3Rpb24gKGRpc3BsYXlPYmplY3QpXG57XG4gICAgdGhpcy5lbWl0KCdwcmVyZW5kZXInKTtcblxuICAgIC8vIG5vIHBvaW50IHJlbmRlcmluZyBpZiBvdXIgY29udGV4dCBoYXMgYmVlbiBibG93biB1cCFcbiAgICBpZiAodGhpcy5nbC5pc0NvbnRleHRMb3N0KCkpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5fbGFzdE9iamVjdFJlbmRlcmVkID0gZGlzcGxheU9iamVjdDtcblxuICAgIHZhciBjYWNoZVBhcmVudCA9IGRpc3BsYXlPYmplY3QucGFyZW50O1xuICAgIGRpc3BsYXlPYmplY3QucGFyZW50ID0gdGhpcy5fdGVtcERpc3BsYXlPYmplY3RQYXJlbnQ7XG4gICAgLy8gdXBkYXRlIHRoZSBzY2VuZSBncmFwaFxuICAgIGRpc3BsYXlPYmplY3QudXBkYXRlVHJhbnNmb3JtKCk7XG4gICAgZGlzcGxheU9iamVjdC5wYXJlbnQgPSBjYWNoZVBhcmVudDtcblxuICAgIHRoaXMucmVuZGVyRGlzcGxheU9iamVjdChkaXNwbGF5T2JqZWN0LCB0aGlzLnJvb3RSZW5kZXJUYXJnZXQsIHRoaXMuY2xlYXJCZWZvcmVSZW5kZXIpOy8vdGhpcy5wcm9qZWN0aW9uKTtcblxuICAgIHRoaXMuZW1pdCgncG9zdHJlbmRlcicpO1xufTtcblxuLyoqXG4gKiBSZW5kZXJzIGEgRGlzcGxheSBPYmplY3QuXG4gKlxuICogQHBhcmFtIGRpc3BsYXlPYmplY3Qge1BJWEkuRGlzcGxheU9iamVjdH0gVGhlIERpc3BsYXlPYmplY3QgdG8gcmVuZGVyXG4gKiBAcGFyYW0gcmVuZGVyVGFyZ2V0IHtQSVhJLlJlbmRlclRhcmdldH0gVGhlIHJlbmRlciB0YXJnZXQgdG8gdXNlIHRvIHJlbmRlciB0aGlzIGRpc3BsYXkgb2JqZWN0XG4gKlxuICovXG5XZWJHTFJlbmRlcmVyLnByb3RvdHlwZS5yZW5kZXJEaXNwbGF5T2JqZWN0ID0gZnVuY3Rpb24gKGRpc3BsYXlPYmplY3QsIHJlbmRlclRhcmdldCwgY2xlYXIpLy9wcm9qZWN0aW9uLCBidWZmZXIpXG57XG4gICAgdGhpcy5iaW5kUmVuZGVyVGFyZ2V0KHJlbmRlclRhcmdldCk7XG5cbiAgICBpZihjbGVhcilcbiAgICB7XG4gICAgICAgIHJlbmRlclRhcmdldC5jbGVhcigpO1xuICAgIH1cblxuICAgIC8vIHN0YXJ0IHRoZSBmaWx0ZXIgbWFuYWdlclxuICAgIHRoaXMuZmlsdGVyTWFuYWdlci5zZXRGaWx0ZXJTdGFjayggcmVuZGVyVGFyZ2V0LmZpbHRlclN0YWNrICk7XG5cbiAgICAvLyByZW5kZXIgdGhlIHNjZW5lIVxuICAgIGRpc3BsYXlPYmplY3QucmVuZGVyV2ViR0wodGhpcyk7XG5cbiAgICAvLyBmaW5pc2ggdGhlIGN1cnJlbnQgcmVuZGVyZXIuLlxuICAgIHRoaXMuY3VycmVudFJlbmRlcmVyLmZsdXNoKCk7XG59O1xuXG4vKipcbiAqIENoYW5nZXMgdGhlIGN1cnJlbnQgcmVuZGVyZXIgdG8gdGhlIG9uZSBnaXZlbiBpbiBwYXJhbWV0ZXJcbiAqXG4gKiBAcGFyYW0gb2JqZWN0UmVuZGVyZXIge1BJWEkuT2JqZWN0UmVuZGVyZXJ9IFRoZSBvYmplY3QgcmVuZGVyZXIgdG8gdXNlLlxuICovXG5XZWJHTFJlbmRlcmVyLnByb3RvdHlwZS5zZXRPYmplY3RSZW5kZXJlciA9IGZ1bmN0aW9uIChvYmplY3RSZW5kZXJlcilcbntcbiAgICBpZiAodGhpcy5jdXJyZW50UmVuZGVyZXIgPT09IG9iamVjdFJlbmRlcmVyKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuY3VycmVudFJlbmRlcmVyLnN0b3AoKTtcbiAgICB0aGlzLmN1cnJlbnRSZW5kZXJlciA9IG9iamVjdFJlbmRlcmVyO1xuICAgIHRoaXMuY3VycmVudFJlbmRlcmVyLnN0YXJ0KCk7XG59O1xuXG4vKipcbiAqIFJlc2l6ZXMgdGhlIHdlYkdMIHZpZXcgdG8gdGhlIHNwZWNpZmllZCB3aWR0aCBhbmQgaGVpZ2h0LlxuICpcbiAqIEBwYXJhbSB3aWR0aCB7bnVtYmVyfSB0aGUgbmV3IHdpZHRoIG9mIHRoZSB3ZWJHTCB2aWV3XG4gKiBAcGFyYW0gaGVpZ2h0IHtudW1iZXJ9IHRoZSBuZXcgaGVpZ2h0IG9mIHRoZSB3ZWJHTCB2aWV3XG4gKi9cbldlYkdMUmVuZGVyZXIucHJvdG90eXBlLnJlc2l6ZSA9IGZ1bmN0aW9uICh3aWR0aCwgaGVpZ2h0KVxue1xuICAgIFN5c3RlbVJlbmRlcmVyLnByb3RvdHlwZS5yZXNpemUuY2FsbCh0aGlzLCB3aWR0aCwgaGVpZ2h0KTtcblxuICAgIHRoaXMuZmlsdGVyTWFuYWdlci5yZXNpemUod2lkdGgsIGhlaWdodCk7XG4gICAgdGhpcy5yb290UmVuZGVyVGFyZ2V0LnJlc2l6ZSh3aWR0aCwgaGVpZ2h0KTtcblxuICAgIGlmKHRoaXMuY3VycmVudFJlbmRlclRhcmdldCA9PT0gdGhpcy5yZW5kZXJUYXJnZXQpXG4gICAge1xuICAgICAgICB0aGlzLnJvb3RSZW5kZXJUYXJnZXQuYWN0aXZhdGUoKTtcbiAgICB9XG59O1xuXG4vKipcbiAqIENoYW5nZXMgdGhlIGN1cnJlbnQgcmVuZGVyIHRhcmdldCB0byB0aGUgb25lIGdpdmVuIGluIHBhcmFtZXRlclxuICpcbiAqIEBwYXJhbSByZW5kZXJUYXJnZXQge1BJWEkuUmVuZGVyVGFyZ2V0fSB0aGUgbmV3IHJlbmRlciB0YXJnZXRcbiAqL1xuV2ViR0xSZW5kZXJlci5wcm90b3R5cGUuYmluZFJlbmRlclRhcmdldCA9IGZ1bmN0aW9uIChyZW5kZXJUYXJnZXQpLy9wcm9qZWN0aW9uLCBidWZmZXIpXG57XG4gICAgaWYocmVuZGVyVGFyZ2V0ICE9PSB0aGlzLl9hY3RpdmVSZW5kZXJUYXJnZXQpXG4gICAge1xuICAgICAgICB0aGlzLl9hY3RpdmVSZW5kZXJUYXJnZXQgPSByZW5kZXJUYXJnZXQ7XG5cbiAgICAgICAgaWYodGhpcy5fYWN0aXZlU2hhZGVyKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLl9hY3RpdmVTaGFkZXIudW5pZm9ybXMucHJvamVjdGlvbk1hdHJpeCA9IHJlbmRlclRhcmdldC5wcm9qZWN0aW9uTWF0cml4LnRvQXJyYXkodHJ1ZSk7XG4gICAgICAgIH1cblxuICAgICAgICByZW5kZXJUYXJnZXQuYWN0aXZhdGUoKTtcblxuICAgICAgICB0aGlzLnN0ZW5jaWxNYW5hZ2VyLnNldE1hc2tTdGFjayggcmVuZGVyVGFyZ2V0LnN0ZW5jaWxNYXNrU3RhY2sgKTtcbiAgICB9XG59XG5cbldlYkdMUmVuZGVyZXIucHJvdG90eXBlLmJpbmRTaGFkZXIgPSBmdW5jdGlvbiAoc2hhZGVyKS8vcHJvamVjdGlvbiwgYnVmZmVyKVxue1xuICAgIC8vVE9ETyBjYWNoZVxuICAgIGlmKHRoaXMuX2FjdGl2ZVNoYWRlciAhPT0gc2hhZGVyKVxuICAgIHtcbiAgICAgICAgdGhpcy5fYWN0aXZlU2hhZGVyID0gc2hhZGVyO1xuICAgICAgICBzaGFkZXIuYmluZCgpO1xuXG4gICAgICAgIC8vIGF1dG9tYXRpY2FsbHkgc2V0IHRoZSBwcm9qZWN0aW9uIG1hdHJpeFxuICAgICAgICBzaGFkZXIudW5pZm9ybXMucHJvamVjdGlvbk1hdHJpeCA9IHRoaXMuX2FjdGl2ZVJlbmRlclRhcmdldC5wcm9qZWN0aW9uTWF0cml4LnRvQXJyYXkodHJ1ZSk7XG4gICAgfVxufVxuXG5cbldlYkdMUmVuZGVyZXIucHJvdG90eXBlLmJpbmRUZXh0dXJlID0gZnVuY3Rpb24gKHRleHR1cmUsIGxvY2F0aW9uKVxue1xuICAgIHZhciBnbCA9IHRoaXMuZ2w7XG5cbiAgICAvL1RPRE8gdGVzdCBwZXJmIG9mIGNhY2hlP1xuICAgIGxvY2F0aW9uID0gbG9jYXRpb24gfHwgMDtcblxuICAgIGlmKHRoaXMuX2FjdGl2ZVRleHR1cmVMb2NhdGlvbiAhPT0gbG9jYXRpb24pLy9cbiAgICB7XG4gICAgICAgIHRoaXMuX2FjdGl2ZVRleHR1cmVMb2NhdGlvbiA9IGxvY2F0aW9uXG4gICAgICAgIGdsLmFjdGl2ZVRleHR1cmUoZ2wuVEVYVFVSRTAgKyBsb2NhdGlvbiApO1xuICAgIH1cblxuICAgIC8vVE9ETyAtIGNhbiB3ZSBjYWNoZSB0aGlzIHRleHR1cmUgdG9vP1xuICAgIHRoaXMuX2FjdGl2ZVRleHR1cmUgPSB0ZXh0dXJlOyAgICAgIFxuICAgIFxuICAgIGlmICghdGV4dHVyZS5fZ2xUZXh0dXJlc1tnbC5pZF0pXG4gICAge1xuICAgICAgICAvLyB0aGlzIHdpbGwgYWxzbyBiaW5kIHRoZSB0ZXh0dXJlLi5cbiAgICAgICAgdGhpcy50ZXh0dXJlTWFuYWdlci51cGRhdGVUZXh0dXJlKHRleHR1cmUpO1xuICAgIH1cbiAgICBlbHNlXG4gICAgeyAgIFxuICAgICAgICAvLyBiaW5kIHRoZSBjdXJyZW50IHRleHR1cmVcbiAgICAgICAgdGV4dHVyZS5fZ2xUZXh0dXJlc1tnbC5pZF0uYmluZCgpO1xuICAgIH1cbn1cblxuXG4vKipcbiAqIEhhbmRsZXMgYSBsb3N0IHdlYmdsIGNvbnRleHRcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5XZWJHTFJlbmRlcmVyLnByb3RvdHlwZS5oYW5kbGVDb250ZXh0TG9zdCA9IGZ1bmN0aW9uIChldmVudClcbntcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xufTtcblxuLyoqXG4gKiBIYW5kbGVzIGEgcmVzdG9yZWQgd2ViZ2wgY29udGV4dFxuICpcbiAqIEBwcml2YXRlXG4gKi9cbldlYkdMUmVuZGVyZXIucHJvdG90eXBlLmhhbmRsZUNvbnRleHRSZXN0b3JlZCA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy5faW5pdENvbnRleHQoKTtcbiAgICB0aGlzLnRleHR1cmVNYW5hZ2VyLnJlbW92ZUFsbCgpO1xufTtcblxuLyoqXG4gKiBSZW1vdmVzIGV2ZXJ5dGhpbmcgZnJvbSB0aGUgcmVuZGVyZXIgKGV2ZW50IGxpc3RlbmVycywgc3ByaXRlYmF0Y2gsIGV0Yy4uLilcbiAqXG4gKiBAcGFyYW0gW3JlbW92ZVZpZXc9ZmFsc2VdIHtib29sZWFufSBSZW1vdmVzIHRoZSBDYW52YXMgZWxlbWVudCBmcm9tIHRoZSBET00uXG4gKi9cbldlYkdMUmVuZGVyZXIucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAocmVtb3ZlVmlldylcbntcbiAgICB0aGlzLmRlc3Ryb3lQbHVnaW5zKCk7XG5cbiAgICAvLyByZW1vdmUgbGlzdGVuZXJzXG4gICAgdGhpcy52aWV3LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3dlYmdsY29udGV4dGxvc3QnLCB0aGlzLmhhbmRsZUNvbnRleHRMb3N0KTtcbiAgICB0aGlzLnZpZXcucmVtb3ZlRXZlbnRMaXN0ZW5lcignd2ViZ2xjb250ZXh0cmVzdG9yZWQnLCB0aGlzLmhhbmRsZUNvbnRleHRSZXN0b3JlZCk7XG5cbiAgICB0aGlzLnRleHR1cmVNYW5hZ2VyLmRlc3Ryb3lBbGwoKTtcblxuICAgIC8vIGNhbGwgYmFzZSBkZXN0cm95XG4gICAgU3lzdGVtUmVuZGVyZXIucHJvdG90eXBlLmRlc3Ryb3kuY2FsbCh0aGlzLCByZW1vdmVWaWV3KTtcblxuICAgIHRoaXMudWlkID0gMDtcblxuICAgIC8vIGRlc3Ryb3kgdGhlIG1hbmFnZXJzXG4gICAgdGhpcy5zaGFkZXJNYW5hZ2VyLmRlc3Ryb3koKTtcbiAgICB0aGlzLm1hc2tNYW5hZ2VyLmRlc3Ryb3koKTtcbiAgICB0aGlzLnN0ZW5jaWxNYW5hZ2VyLmRlc3Ryb3koKTtcbiAgICB0aGlzLmZpbHRlck1hbmFnZXIuZGVzdHJveSgpO1xuICAgIHRoaXMuYmxlbmRNb2RlTWFuYWdlci5kZXN0cm95KCk7XG5cbiAgICB0aGlzLnNoYWRlck1hbmFnZXIgPSBudWxsO1xuICAgIHRoaXMubWFza01hbmFnZXIgPSBudWxsO1xuICAgIHRoaXMuZmlsdGVyTWFuYWdlciA9IG51bGw7XG4gICAgdGhpcy5ibGVuZE1vZGVNYW5hZ2VyID0gbnVsbDtcbiAgICB0aGlzLmN1cnJlbnRSZW5kZXJlciA9IG51bGw7XG5cbiAgICB0aGlzLmhhbmRsZUNvbnRleHRMb3N0ID0gbnVsbDtcbiAgICB0aGlzLmhhbmRsZUNvbnRleHRSZXN0b3JlZCA9IG51bGw7XG5cbiAgICB0aGlzLl9jb250ZXh0T3B0aW9ucyA9IG51bGw7XG5cbiAgICB0aGlzLmdsLnVzZVByb2dyYW0obnVsbCk7XG4gICAgdGhpcy5nbCA9IG51bGw7XG59O1xuXG4iLCJ2YXIgRGVmYXVsdFNoYWRlciA9IHJlcXVpcmUoJy4uL3NoYWRlcnMvVGV4dHVyZVNoYWRlcicpO1xuXG4vKipcbiAqIFRoaXMgaXMgdGhlIGJhc2UgY2xhc3MgZm9yIGNyZWF0aW5nIGEgUElYSSBmaWx0ZXIuIEN1cnJlbnRseSBvbmx5IFdlYkdMIHN1cHBvcnRzIGZpbHRlcnMuXG4gKiBJZiB5b3Ugd2FudCB0byBtYWtlIGEgY3VzdG9tIGZpbHRlciB0aGlzIHNob3VsZCBiZSB5b3VyIGJhc2UgY2xhc3MuXG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIHZlcnRleFNyYyB7c3RyaW5nfHN0cmluZ1tdfSBUaGUgdmVydGV4IHNoYWRlciBzb3VyY2UgYXMgYW4gYXJyYXkgb2Ygc3RyaW5ncy5cbiAqIEBwYXJhbSBmcmFnbWVudFNyYyB7c3RyaW5nfHN0cmluZ1tdfSBUaGUgZnJhZ21lbnQgc2hhZGVyIHNvdXJjZSBhcyBhbiBhcnJheSBvZiBzdHJpbmdzLlxuICogQHBhcmFtIHVuaWZvcm1zIHtvYmplY3R9IEFuIG9iamVjdCBjb250YWluaW5nIHRoZSB1bmlmb3JtcyBmb3IgdGhpcyBmaWx0ZXIuXG4gKi9cbmZ1bmN0aW9uIEFic3RyYWN0RmlsdGVyKHZlcnRleFNyYywgZnJhZ21lbnRTcmMsIHVuaWZvcm1zKVxue1xuXG4gICAgLyoqXG4gICAgICogQW4gYXJyYXkgb2Ygc2hhZGVyc1xuICAgICAqIEBtZW1iZXIge1BJWEkuU2hhZGVyW119XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLnNoYWRlcnMgPSBbXTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBleHRyYSBwYWRkaW5nIHRoYXQgdGhlIGZpbHRlciBtaWdodCBuZWVkXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMucGFkZGluZyA9IDA7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgdW5pZm9ybXMgYXMgYW4gb2JqZWN0XG4gICAgICogQG1lbWJlciB7b2JqZWN0fVxuICAgICAqL1xuICAgIHRoaXMudW5pZm9ybXMgPSB1bmlmb3JtcyB8fCB7fTtcblxuXG4gICAgLyoqXG4gICAgICogVGhlIGNvZGUgb2YgdGhlIHZlcnRleCBzaGFkZXJcbiAgICAgKiBAbWVtYmVyIHtzdHJpbmdbXX1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMudmVydGV4U3JjID0gdmVydGV4U3JjIHx8IERlZmF1bHRTaGFkZXIuZGVmYXVsdFZlcnRleFNyYztcblxuICAgIC8qKlxuICAgICAqIFRoZSBjb2RlIG9mIHRoZSBmcmFtZW50IHNoYWRlclxuICAgICAqIEBtZW1iZXIge3N0cmluZ1tdfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5mcmFnbWVudFNyYyA9IGZyYWdtZW50U3JjIHx8IERlZmF1bHRTaGFkZXIuZGVmYXVsdEZyYWdtZW50U3JjO1xuXG4gICAgLy9UT0RPIGEgcmVtaW5kZXIgLSB3b3VsZCBiZSBjb29sIHRvIGhhdmUgbG93ZXIgcmVzIGZpbHRlcnMgYXMgdGhpcyB3b3VsZCBnaXZlIGJldHRlciBwZXJmb3JtYW5jZS5cblxuICAgIC8vdHlwZW9mIGZyYWdtZW50U3JjID09PSAnc3RyaW5nJyA/IGZyYWdtZW50U3JjLnNwbGl0KCcnKSA6IChmcmFnbWVudFNyYyB8fCBbXSk7XG5cbn1cblxuQWJzdHJhY3RGaWx0ZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gQWJzdHJhY3RGaWx0ZXI7XG5tb2R1bGUuZXhwb3J0cyA9IEFic3RyYWN0RmlsdGVyO1xuXG4vKipcbiAqIEdyYWJzIGEgc2hhZGVyIGZyb20gdGhlIGN1cnJlbnQgcmVuZGVyZXJcbiAqXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcn0gVGhlIHJlbmRlcmVyIHRvIHJldHJpZXZlIHRoZSBzaGFkZXIgZnJvbVxuICovXG5BYnN0cmFjdEZpbHRlci5wcm90b3R5cGUuZ2V0U2hhZGVyID0gZnVuY3Rpb24gKHJlbmRlcmVyKVxue1xuICAgIHZhciBnbCA9IHJlbmRlcmVyLmdsO1xuXG4gICAgdmFyIHNoYWRlciA9IHRoaXMuc2hhZGVyc1tnbC5pZF07XG5cbiAgICBpZiAoIXNoYWRlcilcbiAgICB7XG4gICAgICAgIHNoYWRlciA9IG5ldyBEZWZhdWx0U2hhZGVyKHJlbmRlcmVyLnNoYWRlck1hbmFnZXIsXG4gICAgICAgICAgICB0aGlzLnZlcnRleFNyYyxcbiAgICAgICAgICAgIHRoaXMuZnJhZ21lbnRTcmMsXG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLFxuICAgICAgICAgICAgdGhpcy5hdHRyaWJ1dGVzXG4gICAgICAgICk7XG5cbiAgICAgICAgdGhpcy5zaGFkZXJzW2dsLmlkXSA9IHNoYWRlcjtcbiAgICB9XG5cbiAgICByZXR1cm4gc2hhZGVyO1xufTtcblxuLyoqXG4gKiBBcHBsaWVzIHRoZSBmaWx0ZXJcbiAqXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcn0gVGhlIHJlbmRlcmVyIHRvIHJldHJpZXZlIHRoZSBmaWx0ZXIgZnJvbVxuICogQHBhcmFtIGlucHV0IHtQSVhJLlJlbmRlclRhcmdldH1cbiAqIEBwYXJhbSBvdXRwdXQge1BJWEkuUmVuZGVyVGFyZ2V0fVxuICogQHBhcmFtIGNsZWFyIHtib29sZWFufSBXaGV0aGVyIG9yIG5vdCB3ZSB3YW50IHRvIGNsZWFyIHRoZSBvdXRwdXRUYXJnZXRcbiAqL1xuQWJzdHJhY3RGaWx0ZXIucHJvdG90eXBlLmFwcGx5RmlsdGVyID0gZnVuY3Rpb24gKHJlbmRlcmVyLCBpbnB1dCwgb3V0cHV0LCBjbGVhcilcbntcbiAgICB2YXIgc2hhZGVyID0gdGhpcy5nZXRTaGFkZXIocmVuZGVyZXIpO1xuXG4gICAgcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5hcHBseUZpbHRlcihzaGFkZXIsIGlucHV0LCBvdXRwdXQsIGNsZWFyKTtcbn07XG5cbi8qKlxuICogU3luY3MgYSB1bmlmb3JtIGJldHdlZW4gdGhlIGNsYXNzIG9iamVjdCBhbmQgdGhlIHNoYWRlcnMuXG4gKlxuICovXG5BYnN0cmFjdEZpbHRlci5wcm90b3R5cGUuc3luY1VuaWZvcm0gPSBmdW5jdGlvbiAodW5pZm9ybSlcbntcbiAgICBmb3IgKHZhciBpID0gMCwgaiA9IHRoaXMuc2hhZGVycy5sZW5ndGg7IGkgPCBqOyArK2kpXG4gICAge1xuICAgICAgICB0aGlzLnNoYWRlcnNbaV0uc3luY1VuaWZvcm0odW5pZm9ybSk7XG4gICAgfVxufTtcbiIsInZhciBBYnN0cmFjdEZpbHRlciA9IHJlcXVpcmUoJy4vQWJzdHJhY3RGaWx0ZXInKTtcbi8vIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL3N1YnN0YWNrL2JyZnMvaXNzdWVzLzI1XG5cblxuLyoqXG4gKlxuICogQmFzaWMgRlhBQSBpbXBsZW1lbnRhdGlvbiBiYXNlZCBvbiB0aGUgY29kZSBvbiBnZWVrczNkLmNvbSB3aXRoIHRoZVxuICogbW9kaWZpY2F0aW9uIHRoYXQgdGhlIHRleHR1cmUyRExvZCBzdHVmZiB3YXMgcmVtb3ZlZCBzaW5jZSBpdCdzXG4gKiB1bnN1cHBvcnRlZCBieSBXZWJHTC5cbiAqXG4gKiAtLVxuICogRnJvbTpcbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS9taXRzdWhpa28vd2ViZ2wtbWVpbmNyYWZ0XG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLkFic3RyYWN0RmlsdGVyXG4gKiBAbWVtYmVyb2YgUElYSVxuICpcbiAqL1xuZnVuY3Rpb24gRlhBQUZpbHRlcigpXG57XG4gICAgQWJzdHJhY3RGaWx0ZXIuY2FsbCh0aGlzLFxuICAgICAgICAvLyB2ZXJ0ZXggc2hhZGVyXG4gICAgICAgIFwiXFxucHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XFxuXFxuYXR0cmlidXRlIHZlYzIgYVZlcnRleFBvc2l0aW9uO1xcbmF0dHJpYnV0ZSB2ZWMyIGFUZXh0dXJlQ29vcmQ7XFxuYXR0cmlidXRlIHZlYzQgYUNvbG9yO1xcblxcbnVuaWZvcm0gbWF0MyBwcm9qZWN0aW9uTWF0cml4O1xcbnVuaWZvcm0gdmVjMiByZXNvbHV0aW9uO1xcblxcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xcbnZhcnlpbmcgdmVjNCB2Q29sb3I7XFxuXFxudmFyeWluZyB2ZWMyIHZSZXNvbHV0aW9uO1xcblxcbi8vdGV4Y29vcmRzIGNvbXB1dGVkIGluIHZlcnRleCBzdGVwXFxuLy90byBhdm9pZCBkZXBlbmRlbnQgdGV4dHVyZSByZWFkc1xcbnZhcnlpbmcgdmVjMiB2X3JnYk5XO1xcbnZhcnlpbmcgdmVjMiB2X3JnYk5FO1xcbnZhcnlpbmcgdmVjMiB2X3JnYlNXO1xcbnZhcnlpbmcgdmVjMiB2X3JnYlNFO1xcbnZhcnlpbmcgdmVjMiB2X3JnYk07XFxuXFxuXFxudm9pZCB0ZXhjb29yZHModmVjMiBmcmFnQ29vcmQsIHZlYzIgcmVzb2x1dGlvbixcXG4gICAgICAgICAgICBvdXQgdmVjMiB2X3JnYk5XLCBvdXQgdmVjMiB2X3JnYk5FLFxcbiAgICAgICAgICAgIG91dCB2ZWMyIHZfcmdiU1csIG91dCB2ZWMyIHZfcmdiU0UsXFxuICAgICAgICAgICAgb3V0IHZlYzIgdl9yZ2JNKSB7XFxuICAgIHZlYzIgaW52ZXJzZVZQID0gMS4wIC8gcmVzb2x1dGlvbi54eTtcXG4gICAgdl9yZ2JOVyA9IChmcmFnQ29vcmQgKyB2ZWMyKC0xLjAsIC0xLjApKSAqIGludmVyc2VWUDtcXG4gICAgdl9yZ2JORSA9IChmcmFnQ29vcmQgKyB2ZWMyKDEuMCwgLTEuMCkpICogaW52ZXJzZVZQO1xcbiAgICB2X3JnYlNXID0gKGZyYWdDb29yZCArIHZlYzIoLTEuMCwgMS4wKSkgKiBpbnZlcnNlVlA7XFxuICAgIHZfcmdiU0UgPSAoZnJhZ0Nvb3JkICsgdmVjMigxLjAsIDEuMCkpICogaW52ZXJzZVZQO1xcbiAgICB2X3JnYk0gPSB2ZWMyKGZyYWdDb29yZCAqIGludmVyc2VWUCk7XFxufVxcblxcbnZvaWQgbWFpbih2b2lkKXtcXG4gICBnbF9Qb3NpdGlvbiA9IHZlYzQoKHByb2plY3Rpb25NYXRyaXggKiB2ZWMzKGFWZXJ0ZXhQb3NpdGlvbiwgMS4wKSkueHksIDAuMCwgMS4wKTtcXG4gICB2VGV4dHVyZUNvb3JkID0gYVRleHR1cmVDb29yZDtcXG4gICB2Q29sb3IgPSB2ZWM0KGFDb2xvci5yZ2IgKiBhQ29sb3IuYSwgYUNvbG9yLmEpO1xcbiAgIHZSZXNvbHV0aW9uID0gcmVzb2x1dGlvbjtcXG5cXG4gICAvL2NvbXB1dGUgdGhlIHRleHR1cmUgY29vcmRzIGFuZCBzZW5kIHRoZW0gdG8gdmFyeWluZ3NcXG4gICB0ZXhjb29yZHMoYVRleHR1cmVDb29yZCAqIHJlc29sdXRpb24sIHJlc29sdXRpb24sIHZfcmdiTlcsIHZfcmdiTkUsIHZfcmdiU1csIHZfcmdiU0UsIHZfcmdiTSk7XFxufVxcblwiLFxuICAgICAgICAvLyBmcmFnbWVudCBzaGFkZXJcbiAgICAgICAgXCJwcmVjaXNpb24gbG93cCBmbG9hdDtcXG5cXG5cXG4vKipcXG5CYXNpYyBGWEFBIGltcGxlbWVudGF0aW9uIGJhc2VkIG9uIHRoZSBjb2RlIG9uIGdlZWtzM2QuY29tIHdpdGggdGhlXFxubW9kaWZpY2F0aW9uIHRoYXQgdGhlIHRleHR1cmUyRExvZCBzdHVmZiB3YXMgcmVtb3ZlZCBzaW5jZSBpdCdzXFxudW5zdXBwb3J0ZWQgYnkgV2ViR0wuXFxuXFxuLS1cXG5cXG5Gcm9tOlxcbmh0dHBzOi8vZ2l0aHViLmNvbS9taXRzdWhpa28vd2ViZ2wtbWVpbmNyYWZ0XFxuXFxuQ29weXJpZ2h0IChjKSAyMDExIGJ5IEFybWluIFJvbmFjaGVyLlxcblxcblNvbWUgcmlnaHRzIHJlc2VydmVkLlxcblxcblJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dFxcbm1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmVcXG5tZXQ6XFxuXFxuICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHRcXG4gICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuXFxuXFxuICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZVxcbiAgICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nXFxuICAgICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkXFxuICAgICAgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLlxcblxcbiAgICAqIFRoZSBuYW1lcyBvZiB0aGUgY29udHJpYnV0b3JzIG1heSBub3QgYmUgdXNlZCB0byBlbmRvcnNlIG9yXFxuICAgICAgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljXFxuICAgICAgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLlxcblxcblRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlNcXG5cXFwiQVMgSVNcXFwiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVFxcbkxJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUlxcbkEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUXFxuT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsXFxuU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVFxcbkxJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLFxcbkRBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWVxcblRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlRcXG4oSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0VcXG5PRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLlxcbiovXFxuXFxuI2lmbmRlZiBGWEFBX1JFRFVDRV9NSU5cXG4gICAgI2RlZmluZSBGWEFBX1JFRFVDRV9NSU4gICAoMS4wLyAxMjguMClcXG4jZW5kaWZcXG4jaWZuZGVmIEZYQUFfUkVEVUNFX01VTFxcbiAgICAjZGVmaW5lIEZYQUFfUkVEVUNFX01VTCAgICgxLjAgLyA4LjApXFxuI2VuZGlmXFxuI2lmbmRlZiBGWEFBX1NQQU5fTUFYXFxuICAgICNkZWZpbmUgRlhBQV9TUEFOX01BWCAgICAgOC4wXFxuI2VuZGlmXFxuXFxuLy9vcHRpbWl6ZWQgdmVyc2lvbiBmb3IgbW9iaWxlLCB3aGVyZSBkZXBlbmRlbnRcXG4vL3RleHR1cmUgcmVhZHMgY2FuIGJlIGEgYm90dGxlbmVja1xcbnZlYzQgZnhhYShzYW1wbGVyMkQgdGV4LCB2ZWMyIGZyYWdDb29yZCwgdmVjMiByZXNvbHV0aW9uLFxcbiAgICAgICAgICAgIHZlYzIgdl9yZ2JOVywgdmVjMiB2X3JnYk5FLFxcbiAgICAgICAgICAgIHZlYzIgdl9yZ2JTVywgdmVjMiB2X3JnYlNFLFxcbiAgICAgICAgICAgIHZlYzIgdl9yZ2JNKSB7XFxuICAgIHZlYzQgY29sb3I7XFxuICAgIG1lZGl1bXAgdmVjMiBpbnZlcnNlVlAgPSB2ZWMyKDEuMCAvIHJlc29sdXRpb24ueCwgMS4wIC8gcmVzb2x1dGlvbi55KTtcXG4gICAgdmVjMyByZ2JOVyA9IHRleHR1cmUyRCh0ZXgsIHZfcmdiTlcpLnh5ejtcXG4gICAgdmVjMyByZ2JORSA9IHRleHR1cmUyRCh0ZXgsIHZfcmdiTkUpLnh5ejtcXG4gICAgdmVjMyByZ2JTVyA9IHRleHR1cmUyRCh0ZXgsIHZfcmdiU1cpLnh5ejtcXG4gICAgdmVjMyByZ2JTRSA9IHRleHR1cmUyRCh0ZXgsIHZfcmdiU0UpLnh5ejtcXG4gICAgdmVjNCB0ZXhDb2xvciA9IHRleHR1cmUyRCh0ZXgsIHZfcmdiTSk7XFxuICAgIHZlYzMgcmdiTSAgPSB0ZXhDb2xvci54eXo7XFxuICAgIHZlYzMgbHVtYSA9IHZlYzMoMC4yOTksIDAuNTg3LCAwLjExNCk7XFxuICAgIGZsb2F0IGx1bWFOVyA9IGRvdChyZ2JOVywgbHVtYSk7XFxuICAgIGZsb2F0IGx1bWFORSA9IGRvdChyZ2JORSwgbHVtYSk7XFxuICAgIGZsb2F0IGx1bWFTVyA9IGRvdChyZ2JTVywgbHVtYSk7XFxuICAgIGZsb2F0IGx1bWFTRSA9IGRvdChyZ2JTRSwgbHVtYSk7XFxuICAgIGZsb2F0IGx1bWFNICA9IGRvdChyZ2JNLCAgbHVtYSk7XFxuICAgIGZsb2F0IGx1bWFNaW4gPSBtaW4obHVtYU0sIG1pbihtaW4obHVtYU5XLCBsdW1hTkUpLCBtaW4obHVtYVNXLCBsdW1hU0UpKSk7XFxuICAgIGZsb2F0IGx1bWFNYXggPSBtYXgobHVtYU0sIG1heChtYXgobHVtYU5XLCBsdW1hTkUpLCBtYXgobHVtYVNXLCBsdW1hU0UpKSk7XFxuXFxuICAgIG1lZGl1bXAgdmVjMiBkaXI7XFxuICAgIGRpci54ID0gLSgobHVtYU5XICsgbHVtYU5FKSAtIChsdW1hU1cgKyBsdW1hU0UpKTtcXG4gICAgZGlyLnkgPSAgKChsdW1hTlcgKyBsdW1hU1cpIC0gKGx1bWFORSArIGx1bWFTRSkpO1xcblxcbiAgICBmbG9hdCBkaXJSZWR1Y2UgPSBtYXgoKGx1bWFOVyArIGx1bWFORSArIGx1bWFTVyArIGx1bWFTRSkgKlxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKDAuMjUgKiBGWEFBX1JFRFVDRV9NVUwpLCBGWEFBX1JFRFVDRV9NSU4pO1xcblxcbiAgICBmbG9hdCByY3BEaXJNaW4gPSAxLjAgLyAobWluKGFicyhkaXIueCksIGFicyhkaXIueSkpICsgZGlyUmVkdWNlKTtcXG4gICAgZGlyID0gbWluKHZlYzIoRlhBQV9TUEFOX01BWCwgRlhBQV9TUEFOX01BWCksXFxuICAgICAgICAgICAgICBtYXgodmVjMigtRlhBQV9TUEFOX01BWCwgLUZYQUFfU1BBTl9NQVgpLFxcbiAgICAgICAgICAgICAgZGlyICogcmNwRGlyTWluKSkgKiBpbnZlcnNlVlA7XFxuXFxuICAgIHZlYzMgcmdiQSA9IDAuNSAqIChcXG4gICAgICAgIHRleHR1cmUyRCh0ZXgsIGZyYWdDb29yZCAqIGludmVyc2VWUCArIGRpciAqICgxLjAgLyAzLjAgLSAwLjUpKS54eXogK1xcbiAgICAgICAgdGV4dHVyZTJEKHRleCwgZnJhZ0Nvb3JkICogaW52ZXJzZVZQICsgZGlyICogKDIuMCAvIDMuMCAtIDAuNSkpLnh5eik7XFxuICAgIHZlYzMgcmdiQiA9IHJnYkEgKiAwLjUgKyAwLjI1ICogKFxcbiAgICAgICAgdGV4dHVyZTJEKHRleCwgZnJhZ0Nvb3JkICogaW52ZXJzZVZQICsgZGlyICogLTAuNSkueHl6ICtcXG4gICAgICAgIHRleHR1cmUyRCh0ZXgsIGZyYWdDb29yZCAqIGludmVyc2VWUCArIGRpciAqIDAuNSkueHl6KTtcXG5cXG4gICAgZmxvYXQgbHVtYUIgPSBkb3QocmdiQiwgbHVtYSk7XFxuICAgIGlmICgobHVtYUIgPCBsdW1hTWluKSB8fCAobHVtYUIgPiBsdW1hTWF4KSlcXG4gICAgICAgIGNvbG9yID0gdmVjNChyZ2JBLCB0ZXhDb2xvci5hKTtcXG4gICAgZWxzZVxcbiAgICAgICAgY29sb3IgPSB2ZWM0KHJnYkIsIHRleENvbG9yLmEpO1xcbiAgICByZXR1cm4gY29sb3I7XFxufVxcblxcblxcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xcbnZhcnlpbmcgdmVjNCB2Q29sb3I7XFxudmFyeWluZyB2ZWMyIHZSZXNvbHV0aW9uO1xcblxcbi8vdGV4Y29vcmRzIGNvbXB1dGVkIGluIHZlcnRleCBzdGVwXFxuLy90byBhdm9pZCBkZXBlbmRlbnQgdGV4dHVyZSByZWFkc1xcbnZhcnlpbmcgdmVjMiB2X3JnYk5XO1xcbnZhcnlpbmcgdmVjMiB2X3JnYk5FO1xcbnZhcnlpbmcgdmVjMiB2X3JnYlNXO1xcbnZhcnlpbmcgdmVjMiB2X3JnYlNFO1xcbnZhcnlpbmcgdmVjMiB2X3JnYk07XFxuXFxudW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXI7XFxuXFxuXFxudm9pZCBtYWluKHZvaWQpe1xcblxcbiAgICBnbF9GcmFnQ29sb3IgPSBmeGFhKHVTYW1wbGVyLCB2VGV4dHVyZUNvb3JkICogdlJlc29sdXRpb24sIHZSZXNvbHV0aW9uLCB2X3JnYk5XLCB2X3JnYk5FLCB2X3JnYlNXLCB2X3JnYlNFLCB2X3JnYk0pO1xcblxcbn1cXG5cIixcbiAgICAgICAgLy8gdW5pZm9ybXNcbiAgICAgICAge1xuICAgICAgICAgICAgcmVzb2x1dGlvbjogeyB0eXBlOiAndjInLCB2YWx1ZTogeyB4OiAxLCB5OiAxIH0gfVxuICAgICAgICB9XG4gICAgKTtcblxufVxuXG5GWEFBRmlsdGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoQWJzdHJhY3RGaWx0ZXIucHJvdG90eXBlKTtcbkZYQUFGaWx0ZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gRlhBQUZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gRlhBQUZpbHRlcjtcblxuLyoqXG4gKiBBcHBsaWVzIHRoZSBmaWx0ZXJcbiAqXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcn0gVGhlIHJlbmRlcmVyIHRvIHJldHJpZXZlIHRoZSBmaWx0ZXIgZnJvbVxuICogQHBhcmFtIGlucHV0IHtQSVhJLlJlbmRlclRhcmdldH1cbiAqIEBwYXJhbSBvdXRwdXQge1BJWEkuUmVuZGVyVGFyZ2V0fVxuICovXG5GWEFBRmlsdGVyLnByb3RvdHlwZS5hcHBseUZpbHRlciA9IGZ1bmN0aW9uIChyZW5kZXJlciwgaW5wdXQsIG91dHB1dClcbntcbiAgICB2YXIgZmlsdGVyTWFuYWdlciA9IHJlbmRlcmVyLmZpbHRlck1hbmFnZXI7XG5cbiAgICB2YXIgc2hhZGVyID0gdGhpcy5nZXRTaGFkZXIoIHJlbmRlcmVyICk7XG4gICAgIC8vIGRyYXcgdGhlIGZpbHRlci4uLlxuICAgIGZpbHRlck1hbmFnZXIuYXBwbHlGaWx0ZXIoc2hhZGVyLCBpbnB1dCwgb3V0cHV0KTtcbn07XG4iLCJ2YXIgQWJzdHJhY3RGaWx0ZXIgPSByZXF1aXJlKCcuL0Fic3RyYWN0RmlsdGVyJyksXG4gICAgbWF0aCA9ICByZXF1aXJlKCcuLi8uLi8uLi9tYXRoJyk7XG5cbi8vIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL3N1YnN0YWNrL2JyZnMvaXNzdWVzLzI1XG5cblxuLyoqXG4gKiBUaGUgU3ByaXRlTWFza0ZpbHRlciBjbGFzc1xuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5BYnN0cmFjdEZpbHRlclxuICogQG1lbWJlcm9mIFBJWElcbiAqIEBwYXJhbSBzcHJpdGUge1BJWEkuU3ByaXRlfSB0aGUgdGFyZ2V0IHNwcml0ZVxuICovXG5mdW5jdGlvbiBTcHJpdGVNYXNrRmlsdGVyKHNwcml0ZSlcbntcbiAgICB2YXIgbWFza01hdHJpeCA9IG5ldyBtYXRoLk1hdHJpeCgpO1xuXG4gICAgQWJzdHJhY3RGaWx0ZXIuY2FsbCh0aGlzLFxuICAgICAgICBcImF0dHJpYnV0ZSB2ZWMyIGFWZXJ0ZXhQb3NpdGlvbjtcXG5hdHRyaWJ1dGUgdmVjMiBhVGV4dHVyZUNvb3JkO1xcbmF0dHJpYnV0ZSB2ZWM0IGFDb2xvcjtcXG5cXG51bmlmb3JtIG1hdDMgcHJvamVjdGlvbk1hdHJpeDtcXG51bmlmb3JtIG1hdDMgb3RoZXJNYXRyaXg7XFxuXFxudmFyeWluZyB2ZWMyIHZNYXNrQ29vcmQ7XFxudmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7XFxudmFyeWluZyB2ZWM0IHZDb2xvcjtcXG5cXG52b2lkIG1haW4odm9pZClcXG57XFxuICAgIGdsX1Bvc2l0aW9uID0gdmVjNCgocHJvamVjdGlvbk1hdHJpeCAqIHZlYzMoYVZlcnRleFBvc2l0aW9uLCAxLjApKS54eSwgMC4wLCAxLjApO1xcbiAgICB2VGV4dHVyZUNvb3JkID0gYVRleHR1cmVDb29yZDtcXG4gICAgdk1hc2tDb29yZCA9ICggb3RoZXJNYXRyaXggKiB2ZWMzKCBhVGV4dHVyZUNvb3JkLCAxLjApICApLnh5O1xcbiAgICB2Q29sb3IgPSB2ZWM0KGFDb2xvci5yZ2IgKiBhQ29sb3IuYSwgYUNvbG9yLmEpO1xcbn1cXG5cIixcbiAgICAgICAgXCJwcmVjaXNpb24gbG93cCBmbG9hdDtcXG5cXG52YXJ5aW5nIHZlYzIgdk1hc2tDb29yZDtcXG52YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDtcXG52YXJ5aW5nIHZlYzQgdkNvbG9yO1xcblxcbnVuaWZvcm0gc2FtcGxlcjJEIHVTYW1wbGVyO1xcbnVuaWZvcm0gZmxvYXQgYWxwaGE7XFxudW5pZm9ybSBzYW1wbGVyMkQgbWFzaztcXG5cXG52b2lkIG1haW4odm9pZClcXG57XFxuICAgIC8vIGNoZWNrIGNsaXAhIHRoaXMgd2lsbCBzdG9wIHRoZSBtYXNrIGJsZWVkaW5nIG91dCBmcm9tIHRoZSBlZGdlc1xcbiAgICB2ZWMyIHRleHQgPSBhYnMoIHZNYXNrQ29vcmQgLSAwLjUgKTtcXG4gICAgdGV4dCA9IHN0ZXAoMC41LCB0ZXh0KTtcXG4gICAgZmxvYXQgY2xpcCA9IDEuMCAtIG1heCh0ZXh0LnksIHRleHQueCk7XFxuICAgIHZlYzQgb3JpZ2luYWwgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZUZXh0dXJlQ29vcmQpO1xcbiAgICB2ZWM0IG1hc2t5ID0gdGV4dHVyZTJEKG1hc2ssIHZNYXNrQ29vcmQpO1xcbiAgICBvcmlnaW5hbCAqPSAobWFza3kuciAqIG1hc2t5LmEgKiBhbHBoYSAqIGNsaXApO1xcbiAgICBnbF9GcmFnQ29sb3IgPSBvcmlnaW5hbDtcXG59XFxuXCIsXG4gICAgICAgIHtcbiAgICAgICAgICAgIG1hc2s6ICAgICAgICAgICB7IHR5cGU6ICdzYW1wbGVyMkQnLCB2YWx1ZTogc3ByaXRlLl90ZXh0dXJlIH0sXG4gICAgICAgICAgICBhbHBoYTogICAgICAgICAgeyB0eXBlOiAnZicsIHZhbHVlOiAxfSxcbiAgICAgICAgICAgIG90aGVyTWF0cml4OiAgICB7IHR5cGU6ICdtYXQzJywgdmFsdWU6IG1hc2tNYXRyaXgudG9BcnJheSh0cnVlKSB9XG4gICAgICAgIH1cbiAgICApO1xuXG4gICAgdGhpcy5tYXNrU3ByaXRlID0gc3ByaXRlO1xuICAgIHRoaXMubWFza01hdHJpeCA9IG1hc2tNYXRyaXg7XG59XG5cblNwcml0ZU1hc2tGaWx0ZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShBYnN0cmFjdEZpbHRlci5wcm90b3R5cGUpO1xuU3ByaXRlTWFza0ZpbHRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBTcHJpdGVNYXNrRmlsdGVyO1xubW9kdWxlLmV4cG9ydHMgPSBTcHJpdGVNYXNrRmlsdGVyO1xuXG4vKipcbiAqIEFwcGxpZXMgdGhlIGZpbHRlclxuICpcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5XZWJHTFJlbmRlcmVyfSBUaGUgcmVuZGVyZXIgdG8gcmV0cmlldmUgdGhlIGZpbHRlciBmcm9tXG4gKiBAcGFyYW0gaW5wdXQge1BJWEkuUmVuZGVyVGFyZ2V0fVxuICogQHBhcmFtIG91dHB1dCB7UElYSS5SZW5kZXJUYXJnZXR9XG4gKi9cblNwcml0ZU1hc2tGaWx0ZXIucHJvdG90eXBlLmFwcGx5RmlsdGVyID0gZnVuY3Rpb24gKHJlbmRlcmVyLCBpbnB1dCwgb3V0cHV0KVxue1xuICAgIHZhciBmaWx0ZXJNYW5hZ2VyID0gcmVuZGVyZXIuZmlsdGVyTWFuYWdlcjtcblxuICAgIHRoaXMudW5pZm9ybXMubWFzay52YWx1ZSA9IHRoaXMubWFza1Nwcml0ZS5fdGV4dHVyZTtcblxuICAgIGZpbHRlck1hbmFnZXIuY2FsY3VsYXRlTWFwcGVkTWF0cml4KGlucHV0LmZyYW1lLCB0aGlzLm1hc2tTcHJpdGUsIHRoaXMubWFza01hdHJpeCk7XG5cbiAgICB0aGlzLnVuaWZvcm1zLm90aGVyTWF0cml4LnZhbHVlID0gdGhpcy5tYXNrTWF0cml4LnRvQXJyYXkodHJ1ZSk7XG4gICAgdGhpcy51bmlmb3Jtcy5hbHBoYS52YWx1ZSA9IHRoaXMubWFza1Nwcml0ZS53b3JsZEFscGhhO1xuXG4gICAgdmFyIHNoYWRlciA9IHRoaXMuZ2V0U2hhZGVyKHJlbmRlcmVyKTtcbiAgICAgLy8gZHJhdyB0aGUgZmlsdGVyLi4uXG4gICAgZmlsdGVyTWFuYWdlci5hcHBseUZpbHRlcihzaGFkZXIsIGlucHV0LCBvdXRwdXQpO1xufTtcblxuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhTcHJpdGVNYXNrRmlsdGVyLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFRoZSB0ZXh0dXJlIHVzZWQgZm9yIHRoZSBkaXNwbGFjZW1lbnQgbWFwLiBNdXN0IGJlIHBvd2VyIG9mIDIgc2l6ZWQgdGV4dHVyZS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuVGV4dHVyZX1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5TcHJpdGVNYXNrRmlsdGVyI1xuICAgICAqL1xuICAgIG1hcDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVuaWZvcm1zLm1hc2sudmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLm1hc2sudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBUaGUgb2Zmc2V0IHVzZWQgdG8gbW92ZSB0aGUgZGlzcGxhY2VtZW50IG1hcC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuUG9pbnR9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuU3ByaXRlTWFza0ZpbHRlciNcbiAgICAgKi9cbiAgICBvZmZzZXQ6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbigpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVuaWZvcm1zLm9mZnNldC52YWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbih2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy5vZmZzZXQudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuIiwidmFyIFdlYkdMTWFuYWdlciA9IHJlcXVpcmUoJy4vV2ViR0xNYW5hZ2VyJyk7XG5cbi8qKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQGV4dGVuZHMgUElYSS5XZWJHbE1hbmFnZXJcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5XZWJHTFJlbmRlcmVyfSBUaGUgcmVuZGVyZXIgdGhpcyBtYW5hZ2VyIHdvcmtzIGZvci5cbiAqL1xuZnVuY3Rpb24gQmxlbmRNb2RlTWFuYWdlcihyZW5kZXJlcilcbntcbiAgICBXZWJHTE1hbmFnZXIuY2FsbCh0aGlzLCByZW5kZXJlcik7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy5jdXJyZW50QmxlbmRNb2RlID0gOTk5OTk7XG59XG5cbkJsZW5kTW9kZU1hbmFnZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShXZWJHTE1hbmFnZXIucHJvdG90eXBlKTtcbkJsZW5kTW9kZU1hbmFnZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gQmxlbmRNb2RlTWFuYWdlcjtcbm1vZHVsZS5leHBvcnRzID0gQmxlbmRNb2RlTWFuYWdlcjtcblxuLyoqXG4gKiBTZXRzLXVwIHRoZSBnaXZlbiBibGVuZE1vZGUgZnJvbSBXZWJHTCdzIHBvaW50IG9mIHZpZXcuXG4gKlxuICogQHBhcmFtIGJsZW5kTW9kZSB7bnVtYmVyfSB0aGUgYmxlbmRNb2RlLCBzaG91bGQgYmUgYSBQaXhpIGNvbnN0LCBzdWNoIGFzIGBQSVhJLkJMRU5EX01PREVTLkFERGAuIFNlZVxuICogIHtAbGluayBQSVhJLkJMRU5EX01PREVTfSBmb3IgcG9zc2libGUgdmFsdWVzLlxuICovXG5CbGVuZE1vZGVNYW5hZ2VyLnByb3RvdHlwZS5zZXRCbGVuZE1vZGUgPSBmdW5jdGlvbiAoYmxlbmRNb2RlKVxue1xuICAgIGlmICh0aGlzLmN1cnJlbnRCbGVuZE1vZGUgPT09IGJsZW5kTW9kZSlcbiAgICB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICB0aGlzLmN1cnJlbnRCbGVuZE1vZGUgPSBibGVuZE1vZGU7XG5cbiAgICB2YXIgbW9kZSA9IHRoaXMucmVuZGVyZXIuYmxlbmRNb2Rlc1t0aGlzLmN1cnJlbnRCbGVuZE1vZGVdO1xuICAgIHRoaXMucmVuZGVyZXIuZ2wuYmxlbmRGdW5jKG1vZGVbMF0sIG1vZGVbMV0pO1xuXG4gICAgcmV0dXJuIHRydWU7XG59O1xuIiwidmFyIFdlYkdMTWFuYWdlciA9IHJlcXVpcmUoJy4vV2ViR0xNYW5hZ2VyJyksXG4gICAgUmVuZGVyVGFyZ2V0ID0gcmVxdWlyZSgnLi4vdXRpbHMvUmVuZGVyVGFyZ2V0JyksXG4gICAgQ09OU1QgPSByZXF1aXJlKCcuLi8uLi8uLi9jb25zdCcpLFxuICAgIFF1YWQgPSByZXF1aXJlKCcuLi91dGlscy9RdWFkJyksXG4gICAgbWF0aCA9ICByZXF1aXJlKCcuLi8uLi8uLi9tYXRoJyk7XG5cbi8qKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQGV4dGVuZHMgUElYSS5XZWJHTE1hbmFnZXJcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5XZWJHTFJlbmRlcmVyfSBUaGUgcmVuZGVyZXIgdGhpcyBtYW5hZ2VyIHdvcmtzIGZvci5cbiAqL1xuZnVuY3Rpb24gRmlsdGVyTWFuYWdlcihyZW5kZXJlcilcbntcbiAgICBXZWJHTE1hbmFnZXIuY2FsbCh0aGlzLCByZW5kZXJlcik7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtvYmplY3RbXX1cbiAgICAgKi9cbiAgICB0aGlzLmZpbHRlclN0YWNrID0gW107XG5cbiAgICB0aGlzLmZpbHRlclN0YWNrLnB1c2goe1xuICAgICAgICByZW5kZXJUYXJnZXQ6cmVuZGVyZXIuY3VycmVudFJlbmRlclRhcmdldCxcbiAgICAgICAgZmlsdGVyOltdLFxuICAgICAgICBib3VuZHM6bnVsbFxuICAgIH0pO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7UElYSS5SZW5kZXJUYXJnZXRbXX1cbiAgICAgKi9cbiAgICB0aGlzLnRleHR1cmVQb29sID0gW107XG5cbiAgICAvKipcbiAgICAgKiBUaGUgc2l6ZSBvZiB0aGUgdGV4dHVyZVxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5SZWN0YW5nbGV9XG4gICAgICovXG4gICAgLy8gbGlzdGVuIGZvciBjb250ZXh0IGFuZCB1cGRhdGUgbmVjZXNzYXJ5IGJ1ZmZlcnNcbiAgICAvL1RPRE8gbWFrZSB0aGlzIGR5bmFtaWMhXG4gICAgLy9UT0RPIHRlc3QgdGhpcyBvdXQgYnkgZm9yY2VzIHBvd2VyIG9mIHR3bz9cbiAgICB0aGlzLnRleHR1cmVTaXplID0gbmV3IG1hdGguUmVjdGFuZ2xlKDAsIDAsIHJlbmRlcmVyLndpZHRoLCByZW5kZXJlci5oZWlnaHQpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGN1cnJlbnQgZnJhbWVcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuUmVjdGFuZ2xlfVxuICAgICAqL1xuICAgIHRoaXMuY3VycmVudEZyYW1lID0gbnVsbDtcbn1cblxuRmlsdGVyTWFuYWdlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFdlYkdMTWFuYWdlci5wcm90b3R5cGUpO1xuRmlsdGVyTWFuYWdlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBGaWx0ZXJNYW5hZ2VyO1xubW9kdWxlLmV4cG9ydHMgPSBGaWx0ZXJNYW5hZ2VyO1xuXG5cbi8qKlxuICogQ2FsbGVkIHdoZW4gdGhlcmUgaXMgYSBXZWJHTCBjb250ZXh0IGNoYW5nZS5cbiAqXG4gKi9cbkZpbHRlck1hbmFnZXIucHJvdG90eXBlLm9uQ29udGV4dENoYW5nZSA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy50ZXh0dXJlUG9vbC5sZW5ndGggPSAwO1xuXG4gICAgdmFyIGdsID0gdGhpcy5yZW5kZXJlci5nbDtcbiAgICB0aGlzLnF1YWQgPSBuZXcgUXVhZChnbCk7XG59O1xuXG4vKipcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5XZWJHTFJlbmRlcmVyfVxuICogQHBhcmFtIGJ1ZmZlciB7QXJyYXlCdWZmZXJ9XG4gKi9cbkZpbHRlck1hbmFnZXIucHJvdG90eXBlLnNldEZpbHRlclN0YWNrID0gZnVuY3Rpb24gKCBmaWx0ZXJTdGFjayApXG57XG4gICAgdGhpcy5maWx0ZXJTdGFjayA9IGZpbHRlclN0YWNrO1xufTtcblxuLyoqXG4gKiBBcHBsaWVzIHRoZSBmaWx0ZXIgYW5kIGFkZHMgaXQgdG8gdGhlIGN1cnJlbnQgZmlsdGVyIHN0YWNrLlxuICpcbiAqIEBwYXJhbSB0YXJnZXQge1BJWEkuRGlzcGxheU9iamVjdH1cbiAqIEBwYXJhbSBmaWx0ZXJzIHtQSVhJLkFic3RyYWN0RmlsZXJbXX0gdGhlIGZpbHRlcnMgdGhhdCB3aWxsIGJlIHB1c2hlZCB0byB0aGUgY3VycmVudCBmaWx0ZXIgc3RhY2tcbiAqL1xuRmlsdGVyTWFuYWdlci5wcm90b3R5cGUucHVzaEZpbHRlciA9IGZ1bmN0aW9uICh0YXJnZXQsIGZpbHRlcnMpXG57XG4gICAgLy8gZ2V0IHRoZSBib3VuZHMgb2YgdGhlIG9iamVjdC4uXG4gICAgLy8gVE9ETyByZXBsYWNlIGNsb25lIHdpdGggYSBjb3B5IHRvIHNhdmUgb2JqZWN0IGNyZWF0aW9uXG4gICAgdmFyIGJvdW5kcyA9IHRhcmdldC5maWx0ZXJBcmVhID8gdGFyZ2V0LmZpbHRlckFyZWEuY2xvbmUoKSA6IHRhcmdldC5nZXRCb3VuZHMoKTtcblxuICAgIC8vYm91bmRzID0gYm91bmRzLmNsb25lKCk7XG5cbiAgICAvLyByb3VuZCBvZmYgdGhlIHJlY3RhbmdsZSB0byBnZXQgYSBuaWNlIHNtb29vb29vb3RoIGZpbHRlciA6KVxuICAgIGJvdW5kcy54ID0gYm91bmRzLnggfCAwO1xuICAgIGJvdW5kcy55ID0gYm91bmRzLnkgfCAwO1xuICAgIGJvdW5kcy53aWR0aCA9IGJvdW5kcy53aWR0aCB8IDA7XG4gICAgYm91bmRzLmhlaWdodCA9IGJvdW5kcy5oZWlnaHQgfCAwO1xuXG5cbiAgICAvLyBwYWRkaW5nIVxuICAgIHZhciBwYWRkaW5nID0gZmlsdGVyc1swXS5wYWRkaW5nIHwgMDtcbiAgICBib3VuZHMueCAtPSBwYWRkaW5nO1xuICAgIGJvdW5kcy55IC09IHBhZGRpbmc7XG4gICAgYm91bmRzLndpZHRoICs9IHBhZGRpbmcgKiAyO1xuICAgIGJvdW5kcy5oZWlnaHQgKz0gcGFkZGluZyAqIDI7XG5cblxuICAgIGlmKHRoaXMucmVuZGVyZXIuY3VycmVudFJlbmRlclRhcmdldC50cmFuc2Zvcm0pXG4gICAge1xuICAgICAgICAvL1RPRE8gdGhpcyB3aWxsIGJyZWFrIGlmIHRoZSByZW5kZXJUZXh0dXJlIHRyYW5zZm9ybSBpcyBhbnl0aGluZyBvdGhlciB0aGFuIGEgdHJhbnNsYXRpb24uXG4gICAgICAgIC8vV2lsbCBuZWVkIHRvIHRha2UgdGhlIGZ1bGwgbWF0cml4IHRyYW5zZm9ybSBpbnRvIGFjb3VudC4uXG4gICAgICAgIHZhciB0cmFuc2Zvcm0gPSB0aGlzLnJlbmRlcmVyLmN1cnJlbnRSZW5kZXJUYXJnZXQudHJhbnNmb3JtO1xuXG4gICAgICAgIGJvdW5kcy54ICs9IHRyYW5zZm9ybS50eDtcbiAgICAgICAgYm91bmRzLnkgKz0gdHJhbnNmb3JtLnR5O1xuXG4gICAgICAgIHRoaXMuY2FwRmlsdGVyQXJlYSggYm91bmRzICk7XG5cbiAgICAgICAgYm91bmRzLnggLT0gdHJhbnNmb3JtLnR4O1xuICAgICAgICBib3VuZHMueSAtPSB0cmFuc2Zvcm0udHk7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgICB0aGlzLmNhcEZpbHRlckFyZWEoIGJvdW5kcyApO1xuICAgIH1cblxuICAgIGlmKGJvdW5kcy53aWR0aCA+IDAgJiYgYm91bmRzLmhlaWdodCA+IDApXG4gICAge1xuICAgICAgICB0aGlzLmN1cnJlbnRGcmFtZSA9IGJvdW5kcztcblxuICAgICAgICB2YXIgdGV4dHVyZSA9IHRoaXMuZ2V0UmVuZGVyVGFyZ2V0KCk7XG5cbiAgICAgICAgdGhpcy5yZW5kZXJlci5zZXRSZW5kZXJUYXJnZXQodGV4dHVyZSk7XG5cbiAgICAgICAgLy8gY2xlYXIgdGhlIHRleHR1cmUuLlxuICAgICAgICB0ZXh0dXJlLmNsZWFyKCk7XG5cbiAgICAgICAgLy8gVE9ETyBnZXQgcmlkIG9mIG9iamVjdCBjcmVhdGlvbiFcbiAgICAgICAgdGhpcy5maWx0ZXJTdGFjay5wdXNoKHtcbiAgICAgICAgICAgIHJlbmRlclRhcmdldDogdGV4dHVyZSxcbiAgICAgICAgICAgIGZpbHRlcjogZmlsdGVyc1xuICAgICAgICB9KTtcblxuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICAvLyBwdXNoIHNvbXRoaW5nIG9uIHRvIHRoZSBzdGFjayB0aGF0IGlzIGVtcHR5XG4gICAgICAgIHRoaXMuZmlsdGVyU3RhY2sucHVzaCh7XG4gICAgICAgICAgICByZW5kZXJUYXJnZXQ6IG51bGwsXG4gICAgICAgICAgICBmaWx0ZXI6IGZpbHRlcnNcbiAgICAgICAgfSk7XG4gICAgfVxufTtcblxuXG4vKipcbiAqIFJlbW92ZXMgdGhlIGxhc3QgZmlsdGVyIGZyb20gdGhlIGZpbHRlciBzdGFjayBhbmQgcmV0dXJucyBpdC5cbiAqXG4gKi9cbkZpbHRlck1hbmFnZXIucHJvdG90eXBlLnBvcEZpbHRlciA9IGZ1bmN0aW9uICgpXG57XG4gICAgdmFyIGZpbHRlckRhdGEgPSB0aGlzLmZpbHRlclN0YWNrLnBvcCgpO1xuICAgIHZhciBwcmV2aW91c0ZpbHRlckRhdGEgPSB0aGlzLmZpbHRlclN0YWNrW3RoaXMuZmlsdGVyU3RhY2subGVuZ3RoLTFdO1xuXG4gICAgdmFyIGlucHV0ID0gZmlsdGVyRGF0YS5yZW5kZXJUYXJnZXQ7XG5cbiAgICAvLyBpZiB0aGUgcmVuZGVyVGFyZ2V0IGlzIG51bGwgdGhlbiB3ZSBkb24ndCBhcHBseSB0aGUgZmlsdGVyIGFzIGl0cyBvZmZzY3JlZW5cbiAgICBpZighZmlsdGVyRGF0YS5yZW5kZXJUYXJnZXQpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFyIG91dHB1dCA9IHByZXZpb3VzRmlsdGVyRGF0YS5yZW5kZXJUYXJnZXQ7XG5cbiAgICAvLyB1c2UgcHJvZ3JhbVxuICAgIHZhciBnbCA9IHRoaXMucmVuZGVyZXIuZ2w7XG5cblxuICAgIHRoaXMuY3VycmVudEZyYW1lID0gaW5wdXQuZnJhbWU7XG5cbiAgICB0aGlzLnF1YWQubWFwKHRoaXMudGV4dHVyZVNpemUsIGlucHV0LmZyYW1lKTtcblxuXG4gICAgLy8gVE9ETy4uIHRoaXMgcHJvYmFibHkgb25seSBuZWVkcyB0byBiZSBkb25lIG9uY2UhXG4gICAgZ2wuYmluZEJ1ZmZlcihnbC5BUlJBWV9CVUZGRVIsIHRoaXMucXVhZC52ZXJ0ZXhCdWZmZXIpO1xuICAgIGdsLmJpbmRCdWZmZXIoZ2wuRUxFTUVOVF9BUlJBWV9CVUZGRVIsIHRoaXMucXVhZC5pbmRleEJ1ZmZlcik7XG5cbiAgICB2YXIgZmlsdGVycyA9IGZpbHRlckRhdGEuZmlsdGVyO1xuXG4gICAgLy8gYXNzdW1pbmcgYWxsIGZpbHRlcnMgZm9sbG93IHRoZSBjb3JyZWN0IGZvcm1hdD8/XG4gICAgZ2wudmVydGV4QXR0cmliUG9pbnRlcih0aGlzLnJlbmRlcmVyLnNoYWRlck1hbmFnZXIuZGVmYXVsdFNoYWRlci5hdHRyaWJ1dGVzLmFWZXJ0ZXhQb3NpdGlvbiwgMiwgZ2wuRkxPQVQsIGZhbHNlLCAwLCAwKTtcbiAgICBnbC52ZXJ0ZXhBdHRyaWJQb2ludGVyKHRoaXMucmVuZGVyZXIuc2hhZGVyTWFuYWdlci5kZWZhdWx0U2hhZGVyLmF0dHJpYnV0ZXMuYVRleHR1cmVDb29yZCwgMiwgZ2wuRkxPQVQsIGZhbHNlLCAwLCAyICogNCAqIDQpO1xuICAgIGdsLnZlcnRleEF0dHJpYlBvaW50ZXIodGhpcy5yZW5kZXJlci5zaGFkZXJNYW5hZ2VyLmRlZmF1bHRTaGFkZXIuYXR0cmlidXRlcy5hQ29sb3IsIDQsIGdsLkZMT0FULCBmYWxzZSwgMCwgNCAqIDQgKiA0KTtcblxuICAgIC8vIHJlc3RvcmUgdGhlIG5vcm1hbCBibGVuZG1vZGUhXG4gICAgdGhpcy5yZW5kZXJlci5ibGVuZE1vZGVNYW5hZ2VyLnNldEJsZW5kTW9kZShDT05TVC5CTEVORF9NT0RFUy5OT1JNQUwpO1xuXG4gICAgaWYgKGZpbHRlcnMubGVuZ3RoID09PSAxKVxuICAgIHtcbiAgICAgICAgLy8gVE9ETyAoY2VuZ2xlcikgLSBUaGVyZSBoYXMgdG8gYmUgYSBiZXR0ZXIgd2F5IHRoZW4gc2V0dGluZyB0aGlzIGVhY2ggdGltZT9cbiAgICAgICAgaWYgKGZpbHRlcnNbMF0udW5pZm9ybXMuZGltZW5zaW9ucylcbiAgICAgICAge1xuICAgICAgICAgICAgZmlsdGVyc1swXS51bmlmb3Jtcy5kaW1lbnNpb25zLnZhbHVlWzBdID0gdGhpcy5yZW5kZXJlci53aWR0aDtcbiAgICAgICAgICAgIGZpbHRlcnNbMF0udW5pZm9ybXMuZGltZW5zaW9ucy52YWx1ZVsxXSA9IHRoaXMucmVuZGVyZXIuaGVpZ2h0O1xuICAgICAgICAgICAgZmlsdGVyc1swXS51bmlmb3Jtcy5kaW1lbnNpb25zLnZhbHVlWzJdID0gdGhpcy5xdWFkLnZlcnRpY2VzWzBdO1xuICAgICAgICAgICAgZmlsdGVyc1swXS51bmlmb3Jtcy5kaW1lbnNpb25zLnZhbHVlWzNdID0gdGhpcy5xdWFkLnZlcnRpY2VzWzVdO1xuICAgICAgICB9XG5cbiAgICAgICAgZmlsdGVyc1swXS5hcHBseUZpbHRlciggdGhpcy5yZW5kZXJlciwgaW5wdXQsIG91dHB1dCApO1xuICAgICAgICB0aGlzLnJldHVyblJlbmRlclRhcmdldCggaW5wdXQgKTtcblxuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICB2YXIgZmxpcFRleHR1cmUgPSBpbnB1dDtcbiAgICAgICAgdmFyIGZsb3BUZXh0dXJlID0gdGhpcy5nZXRSZW5kZXJUYXJnZXQodHJ1ZSk7XG5cbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBmaWx0ZXJzLmxlbmd0aC0xOyBpKyspXG4gICAgICAgIHtcbiAgICAgICAgICAgIHZhciBmaWx0ZXIgPSBmaWx0ZXJzW2ldO1xuXG4gICAgICAgICAgICAvLyBUT0RPIChjZW5nbGVyKSAtIFRoZXJlIGhhcyB0byBiZSBhIGJldHRlciB3YXkgdGhlbiBzZXR0aW5nIHRoaXMgZWFjaCB0aW1lP1xuICAgICAgICAgICAgaWYgKGZpbHRlci51bmlmb3Jtcy5kaW1lbnNpb25zKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGZpbHRlci51bmlmb3Jtcy5kaW1lbnNpb25zLnZhbHVlWzBdID0gdGhpcy5yZW5kZXJlci53aWR0aDtcbiAgICAgICAgICAgICAgICBmaWx0ZXIudW5pZm9ybXMuZGltZW5zaW9ucy52YWx1ZVsxXSA9IHRoaXMucmVuZGVyZXIuaGVpZ2h0O1xuICAgICAgICAgICAgICAgIGZpbHRlci51bmlmb3Jtcy5kaW1lbnNpb25zLnZhbHVlWzJdID0gdGhpcy5xdWFkLnZlcnRpY2VzWzBdO1xuICAgICAgICAgICAgICAgIGZpbHRlci51bmlmb3Jtcy5kaW1lbnNpb25zLnZhbHVlWzNdID0gdGhpcy5xdWFkLnZlcnRpY2VzWzVdO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBmaWx0ZXIuYXBwbHlGaWx0ZXIoIHRoaXMucmVuZGVyZXIsIGZsaXBUZXh0dXJlLCBmbG9wVGV4dHVyZSApO1xuXG4gICAgICAgICAgICB2YXIgdGVtcCA9IGZsaXBUZXh0dXJlO1xuICAgICAgICAgICAgZmxpcFRleHR1cmUgPSBmbG9wVGV4dHVyZTtcbiAgICAgICAgICAgIGZsb3BUZXh0dXJlID0gdGVtcDtcbiAgICAgICAgfVxuXG4gICAgICAgIGZpbHRlcnNbZmlsdGVycy5sZW5ndGgtMV0uYXBwbHlGaWx0ZXIoIHRoaXMucmVuZGVyZXIsIGZsaXBUZXh0dXJlLCBvdXRwdXQgKTtcblxuICAgICAgICB0aGlzLnJldHVyblJlbmRlclRhcmdldCggZmxpcFRleHR1cmUgKTtcbiAgICAgICAgdGhpcy5yZXR1cm5SZW5kZXJUYXJnZXQoIGZsb3BUZXh0dXJlICk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZpbHRlckRhdGEuZmlsdGVyO1xufTtcblxuLyoqXG4gKiBHcmFicyBhbiByZW5kZXIgdGFyZ2V0IGZyb20gdGhlIGludGVybmFsIHBvb2xcbiAqXG4gKiBAcGFyYW0gY2xlYXIge2Jvb2xlYW59IFdoZXRoZXIgb3Igbm90IHdlIG5lZWQgdG8gY2xlYXIgdGhlIFJlbmRlclRhcmdldFxuICogQHJldHVybiB7UmVuZGVyVGFyZ2V0fVxuICovXG5GaWx0ZXJNYW5hZ2VyLnByb3RvdHlwZS5nZXRSZW5kZXJUYXJnZXQgPSBmdW5jdGlvbiAoIGNsZWFyIClcbntcbiAgICB2YXIgcmVuZGVyVGFyZ2V0ID0gdGhpcy50ZXh0dXJlUG9vbC5wb3AoKSB8fCBuZXcgUmVuZGVyVGFyZ2V0KHRoaXMucmVuZGVyZXIuZ2wsIHRoaXMudGV4dHVyZVNpemUud2lkdGgsIHRoaXMudGV4dHVyZVNpemUuaGVpZ2h0LCBDT05TVC5TQ0FMRV9NT0RFUy5MSU5FQVIsIHRoaXMucmVuZGVyZXIucmVzb2x1dGlvbiAqIENPTlNULkZJTFRFUl9SRVNPTFVUSU9OKTtcbiAgICByZW5kZXJUYXJnZXQuZnJhbWUgPSB0aGlzLmN1cnJlbnRGcmFtZTtcblxuICAgIGlmIChjbGVhcilcbiAgICB7XG4gICAgICAgIHJlbmRlclRhcmdldC5jbGVhcih0cnVlKTtcbiAgICB9XG5cbiAgICByZXR1cm4gcmVuZGVyVGFyZ2V0O1xufTtcblxuLypcbiAqIFJldHVybnMgYSBSZW5kZXJUYXJnZXQgdG8gdGhlIGludGVybmFsIHBvb2xcbiAqIEBwYXJhbSByZW5kZXJUYXJnZXQge1JlbmRlclRhcmdldH0gVGhlIFJlbmRlclRhcmdldCB3ZSB3YW50IHRvIHJldHVybiB0byB0aGUgcG9vbFxuICovXG5GaWx0ZXJNYW5hZ2VyLnByb3RvdHlwZS5yZXR1cm5SZW5kZXJUYXJnZXQgPSBmdW5jdGlvbiAocmVuZGVyVGFyZ2V0KVxue1xuICAgIHRoaXMudGV4dHVyZVBvb2wucHVzaCggcmVuZGVyVGFyZ2V0ICk7XG59O1xuXG4vKlxuICogQXBwbGllcyB0aGUgZmlsdGVyXG4gKiBAcGFyYW0gc2hhZGVyIHtTaGFkZXJ9IFRoZSBzaGFkZXIgdG8gdXBsb2FkXG4gKiBAcGFyYW0gaW5wdXRUYXJnZXQge1JlbmRlclRhcmdldH1cbiAqIEBwYXJhbSBvdXRwdXRUYXJnZXQge1JlbmRlclRhcmdldH1cbiAqIEBwYXJhbSBjbGVhciB7Ym9vbGVhbn0gV2hldGhlciBvciBub3Qgd2Ugd2FudCB0byBjbGVhciB0aGUgb3V0cHV0VGFyZ2V0XG4gKi9cbkZpbHRlck1hbmFnZXIucHJvdG90eXBlLmFwcGx5RmlsdGVyID0gZnVuY3Rpb24gKHNoYWRlciwgaW5wdXRUYXJnZXQsIG91dHB1dFRhcmdldCwgY2xlYXIpXG57XG4gICAgdmFyIGdsID0gdGhpcy5yZW5kZXJlci5nbDtcblxuICAgIHRoaXMucmVuZGVyZXIuc2V0UmVuZGVyVGFyZ2V0KG91dHB1dFRhcmdldCk7XG5cbiAgICBpZiAoY2xlYXIpXG4gICAge1xuICAgICAgICBvdXRwdXRUYXJnZXQuY2xlYXIoKTtcbiAgICB9XG5cbiAgICAvLyBzZXQgdGhlIHNoYWRlclxuICAgIHRoaXMucmVuZGVyZXIuc2hhZGVyTWFuYWdlci5zZXRTaGFkZXIoc2hhZGVyKTtcblxuICAgIC8vIFRPRE8gKGNlbmdsZXIpIC0gQ2FuIHRoaXMgYmUgY2FjaGVkIGFuZCBub3QgYHRvQXJyYXlgZWQgZWFjaCBmcmFtZT9cbiAgICBzaGFkZXIudW5pZm9ybXMucHJvamVjdGlvbk1hdHJpeC52YWx1ZSA9IHRoaXMucmVuZGVyZXIuY3VycmVudFJlbmRlclRhcmdldC5wcm9qZWN0aW9uTWF0cml4LnRvQXJyYXkodHJ1ZSk7XG5cbiAgICAvL1RPRE8gY2FuIHRoaXMgYmUgb3B0aW1pc2VkP1xuICAgIHNoYWRlci5zeW5jVW5pZm9ybXMoKTtcbi8qXG4gICAgZ2wudmVydGV4QXR0cmliUG9pbnRlcihzaGFkZXIuYXR0cmlidXRlcy5hVmVydGV4UG9zaXRpb24sIDIsIGdsLkZMT0FULCBmYWxzZSwgMCwgMCk7XG4gICAgZ2wudmVydGV4QXR0cmliUG9pbnRlcihzaGFkZXIuYXR0cmlidXRlcy5hVGV4dHVyZUNvb3JkLCAyLCBnbC5GTE9BVCwgZmFsc2UsIDAsIDIgKiA0ICogNCk7XG4gICAgZ2wudmVydGV4QXR0cmliUG9pbnRlcihzaGFkZXIuYXR0cmlidXRlcy5hQ29sb3IsIDQsIGdsLkZMT0FULCBmYWxzZSwgMCwgNCAqIDQgKiA0KTtcbiovXG5cbiAgICBnbC5hY3RpdmVUZXh0dXJlKGdsLlRFWFRVUkUwKTtcbiAgICBnbC5iaW5kVGV4dHVyZShnbC5URVhUVVJFXzJELCBpbnB1dFRhcmdldC50ZXh0dXJlKTtcblxuICAgIGdsLmRyYXdFbGVtZW50cyhnbC5UUklBTkdMRVMsIDYsIGdsLlVOU0lHTkVEX1NIT1JULCAwICk7XG4gICAgdGhpcy5yZW5kZXJlci5kcmF3Q291bnQrKztcbn07XG5cbi8qXG4gKiBDYWxjdWxhdGVzIHRoZSBtYXBwZWQgbWF0cml4XG4gKiBAcGFyYW0gZmlsdGVyQXJlYSB7UmVjdGFuZ2xlfSBUaGUgZmlsdGVyIGFyZWFcbiAqIEBwYXJhbSBzcHJpdGUge1Nwcml0ZX0gdGhlIHRhcmdldCBzcHJpdGVcbiAqIEBwYXJhbSBvdXRwdXRNYXRyaXgge01hdHJpeH0gQGFsdmluXG4gKi9cbi8vIFRPRE8gcGxheWluZyBhcm91bmQgaGVyZS4uIHRoaXMgaXMgdGVtcG9yYXJ5IC0gKHdpbGwgZW5kIHVwIGluIHRoZSBzaGFkZXIpXG5GaWx0ZXJNYW5hZ2VyLnByb3RvdHlwZS5jYWxjdWxhdGVNYXBwZWRNYXRyaXggPSBmdW5jdGlvbiAoZmlsdGVyQXJlYSwgc3ByaXRlLCBvdXRwdXRNYXRyaXgpXG57XG4gICAgdmFyIHdvcmxkVHJhbnNmb3JtID0gc3ByaXRlLndvcmxkVHJhbnNmb3JtLmNvcHkobWF0aC5NYXRyaXguVEVNUF9NQVRSSVgpLFxuICAgIHRleHR1cmUgPSBzcHJpdGUuX3RleHR1cmUuYmFzZVRleHR1cmU7XG5cbiAgICB2YXIgbWFwcGVkTWF0cml4ID0gb3V0cHV0TWF0cml4LmlkZW50aXR5KCk7XG5cbiAgICAvLyBzY2FsZS4uXG4gICAgdmFyIHJhdGlvID0gdGhpcy50ZXh0dXJlU2l6ZS5oZWlnaHQgLyB0aGlzLnRleHR1cmVTaXplLndpZHRoO1xuXG4gICAgbWFwcGVkTWF0cml4LnRyYW5zbGF0ZShmaWx0ZXJBcmVhLnggLyB0aGlzLnRleHR1cmVTaXplLndpZHRoLCBmaWx0ZXJBcmVhLnkgLyB0aGlzLnRleHR1cmVTaXplLmhlaWdodCApO1xuXG4gICAgbWFwcGVkTWF0cml4LnNjYWxlKDEgLCByYXRpbyk7XG5cbiAgICB2YXIgdHJhbnNsYXRlU2NhbGVYID0gKHRoaXMudGV4dHVyZVNpemUud2lkdGggLyB0ZXh0dXJlLndpZHRoKTtcbiAgICB2YXIgdHJhbnNsYXRlU2NhbGVZID0gKHRoaXMudGV4dHVyZVNpemUuaGVpZ2h0IC8gdGV4dHVyZS5oZWlnaHQpO1xuXG4gICAgd29ybGRUcmFuc2Zvcm0udHggLz0gdGV4dHVyZS53aWR0aCAqIHRyYW5zbGF0ZVNjYWxlWDtcbiAgICB3b3JsZFRyYW5zZm9ybS50eSAvPSB0ZXh0dXJlLndpZHRoICogdHJhbnNsYXRlU2NhbGVYO1xuXG4gICAgd29ybGRUcmFuc2Zvcm0uaW52ZXJ0KCk7XG5cbiAgICBtYXBwZWRNYXRyaXgucHJlcGVuZCh3b3JsZFRyYW5zZm9ybSk7XG5cbiAgICAvLyBhcHBseSBpbnZlcnNlIHNjYWxlLi5cbiAgICBtYXBwZWRNYXRyaXguc2NhbGUoMSAsIDEvcmF0aW8pO1xuXG4gICAgbWFwcGVkTWF0cml4LnNjYWxlKCB0cmFuc2xhdGVTY2FsZVggLCB0cmFuc2xhdGVTY2FsZVkgKTtcblxuICAgIG1hcHBlZE1hdHJpeC50cmFuc2xhdGUoc3ByaXRlLmFuY2hvci54LCBzcHJpdGUuYW5jaG9yLnkpO1xuXG4gICAgcmV0dXJuIG1hcHBlZE1hdHJpeDtcblxuICAgIC8vIEtlZXBpbmcgdGhlIG9yZ2luYWwgYXMgYSByZW1pbmRlciB0byBtZSBvbiBob3cgdGhpcyB3b3JrcyFcbiAgICAvL1xuICAgIC8vIHZhciBtID0gbmV3IG1hdGguTWF0cml4KCk7XG5cbiAgICAvLyAvLyBzY2FsZS4uXG4gICAgLy8gdmFyIHJhdGlvID0gdGhpcy50ZXh0dXJlU2l6ZS5oZWlnaHQgLyB0aGlzLnRleHR1cmVTaXplLndpZHRoO1xuXG4gICAgLy8gbS50cmFuc2xhdGUoZmlsdGVyQXJlYS54IC8gdGhpcy50ZXh0dXJlU2l6ZS53aWR0aCwgZmlsdGVyQXJlYS55IC8gdGhpcy50ZXh0dXJlU2l6ZS5oZWlnaHQpO1xuXG5cbiAgICAvLyBtLnNjYWxlKDEgLCByYXRpbyk7XG5cblxuICAgIC8vIHZhciB0cmFuc2Zvcm0gPSB3dC5jbG9uZSgpO1xuXG4gICAgLy8gdmFyIHRyYW5zbGF0ZVNjYWxlWCA9ICh0aGlzLnRleHR1cmVTaXplLndpZHRoIC8gNjIwKTtcbiAgICAvLyB2YXIgdHJhbnNsYXRlU2NhbGVZID0gKHRoaXMudGV4dHVyZVNpemUuaGVpZ2h0IC8gMzgwKTtcblxuICAgIC8vIHRyYW5zZm9ybS50eCAvPSA2MjAgKiB0cmFuc2xhdGVTY2FsZVg7XG4gICAgLy8gdHJhbnNmb3JtLnR5IC89IDYyMCAqIHRyYW5zbGF0ZVNjYWxlWDtcblxuICAgIC8vIHRyYW5zZm9ybS5pbnZlcnQoKTtcblxuICAgIC8vIHRyYW5zZm9ybS5hcHBlbmQobSk7XG5cbiAgICAvLyAvLyBhcHBseSBpbnZlcnNlIHNjYWxlLi5cbiAgICAvLyB0cmFuc2Zvcm0uc2NhbGUoMSAsIDEvcmF0aW8pO1xuXG4gICAgLy8gdHJhbnNmb3JtLnNjYWxlKCB0cmFuc2xhdGVTY2FsZVggLCB0cmFuc2xhdGVTY2FsZVkgKTtcblxuICAgIC8vIHJldHVybiB0cmFuc2Zvcm07XG59O1xuXG4vKlxuICogQ29uc3RyYWlucyB0aGUgZmlsdGVyIGFyZWEgdG8gdGhlIHRleHR1cmUgc2l6ZVxuICogQHBhcmFtIGZpbHRlckFyZWEge1JlY3RhbmdsZX0gVGhlIGZpbHRlciBhcmVhIHdlIHdhbnQgdG8gY2FwXG4gKi9cbkZpbHRlck1hbmFnZXIucHJvdG90eXBlLmNhcEZpbHRlckFyZWEgPSBmdW5jdGlvbiAoZmlsdGVyQXJlYSlcbntcbiAgICBpZiAoZmlsdGVyQXJlYS54IDwgMClcbiAgICB7XG4gICAgICAgIGZpbHRlckFyZWEud2lkdGggKz0gZmlsdGVyQXJlYS54O1xuICAgICAgICBmaWx0ZXJBcmVhLnggPSAwO1xuICAgIH1cblxuICAgIGlmIChmaWx0ZXJBcmVhLnkgPCAwKVxuICAgIHtcbiAgICAgICAgZmlsdGVyQXJlYS5oZWlnaHQgKz0gZmlsdGVyQXJlYS55O1xuICAgICAgICBmaWx0ZXJBcmVhLnkgPSAwO1xuICAgIH1cblxuICAgIGlmICggZmlsdGVyQXJlYS54ICsgZmlsdGVyQXJlYS53aWR0aCA+IHRoaXMudGV4dHVyZVNpemUud2lkdGggKVxuICAgIHtcbiAgICAgICAgZmlsdGVyQXJlYS53aWR0aCA9IHRoaXMudGV4dHVyZVNpemUud2lkdGggLSBmaWx0ZXJBcmVhLng7XG4gICAgfVxuXG4gICAgaWYgKCBmaWx0ZXJBcmVhLnkgKyBmaWx0ZXJBcmVhLmhlaWdodCA+IHRoaXMudGV4dHVyZVNpemUuaGVpZ2h0IClcbiAgICB7XG4gICAgICAgIGZpbHRlckFyZWEuaGVpZ2h0ID0gdGhpcy50ZXh0dXJlU2l6ZS5oZWlnaHQgLSBmaWx0ZXJBcmVhLnk7XG4gICAgfVxufTtcblxuLypcbiAqIFJlc2l6ZXMgYWxsIHRoZSByZW5kZXIgdGFyZ2V0cyBpbiB0aGUgcG9vbFxuICogQHBhcmFtIHdpZHRoIHtudW1iZXJ9IHRoZSBuZXcgd2lkdGhcbiAqIEBwYXJhbSBoZWlnaHQge251bWJlcn0gdGhlIG5ldyBoZWlnaHRcbiAqL1xuRmlsdGVyTWFuYWdlci5wcm90b3R5cGUucmVzaXplID0gZnVuY3Rpb24gKCB3aWR0aCwgaGVpZ2h0IClcbntcbiAgICB0aGlzLnRleHR1cmVTaXplLndpZHRoID0gd2lkdGg7XG4gICAgdGhpcy50ZXh0dXJlU2l6ZS5oZWlnaHQgPSBoZWlnaHQ7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMudGV4dHVyZVBvb2wubGVuZ3RoOyBpKyspXG4gICAge1xuICAgICAgICB0aGlzLnRleHR1cmVQb29sW2ldLnJlc2l6ZSggd2lkdGgsIGhlaWdodCApO1xuICAgIH1cbn07XG5cbi8qKlxuICogRGVzdHJveXMgdGhlIGZpbHRlciBhbmQgcmVtb3ZlcyBpdCBmcm9tIHRoZSBmaWx0ZXIgc3RhY2suXG4gKlxuICovXG5GaWx0ZXJNYW5hZ2VyLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLnF1YWQuZGVzdHJveSgpO1xuICAgIFxuICAgIFdlYkdMTWFuYWdlci5wcm90b3R5cGUuZGVzdHJveS5jYWxsKHRoaXMpO1xuICAgIFxuICAgIHRoaXMuZmlsdGVyU3RhY2sgPSBudWxsO1xuICAgIHRoaXMub2Zmc2V0WSA9IDA7XG5cbiAgICAvLyBkZXN0cm95IHRleHR1cmVzXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLnRleHR1cmVQb29sLmxlbmd0aDsgaSsrKVxuICAgIHtcbiAgICAgICAgdGhpcy50ZXh0dXJlUG9vbFtpXS5kZXN0cm95KCk7XG4gICAgfVxuXG4gICAgdGhpcy50ZXh0dXJlUG9vbCA9IG51bGw7XG59O1xuIiwidmFyIFdlYkdMTWFuYWdlciA9IHJlcXVpcmUoJy4vV2ViR0xNYW5hZ2VyJyksXG4gICAgQWxwaGFNYXNrRmlsdGVyID0gcmVxdWlyZSgnLi4vZmlsdGVycy9TcHJpdGVNYXNrRmlsdGVyJyk7XG5cbi8qKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLldlYkdMUmVuZGVyZXJ9IFRoZSByZW5kZXJlciB0aGlzIG1hbmFnZXIgd29ya3MgZm9yLlxuICovXG5mdW5jdGlvbiBNYXNrTWFuYWdlcihyZW5kZXJlcilcbntcbiAgICBXZWJHTE1hbmFnZXIuY2FsbCh0aGlzLCByZW5kZXJlcik7XG5cbiAgICB0aGlzLnN0ZW5jaWxTdGFjayA9IFtdO1xuICAgIHRoaXMucmV2ZXJzZSA9IHRydWU7XG4gICAgdGhpcy5jb3VudCA9IDA7XG5cbiAgICB0aGlzLmFscGhhTWFza1Bvb2wgPSBbXTtcbn1cblxuTWFza01hbmFnZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShXZWJHTE1hbmFnZXIucHJvdG90eXBlKTtcbk1hc2tNYW5hZ2VyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IE1hc2tNYW5hZ2VyO1xubW9kdWxlLmV4cG9ydHMgPSBNYXNrTWFuYWdlcjtcblxuLyoqXG4gKiBBcHBsaWVzIHRoZSBNYXNrIGFuZCBhZGRzIGl0IHRvIHRoZSBjdXJyZW50IGZpbHRlciBzdGFjay5cbiAqXG4gKiBAcGFyYW0gZ3JhcGhpY3Mge1BJWEkuR3JhcGhpY3N9XG4gKiBAcGFyYW0gd2ViR0xEYXRhIHthbnlbXX1cbiAqL1xuTWFza01hbmFnZXIucHJvdG90eXBlLnB1c2hNYXNrID0gZnVuY3Rpb24gKHRhcmdldCwgbWFza0RhdGEpXG57XG4gICAgaWYgKG1hc2tEYXRhLnRleHR1cmUpXG4gICAge1xuICAgICAgICB0aGlzLnB1c2hTcHJpdGVNYXNrKHRhcmdldCwgbWFza0RhdGEpO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICB0aGlzLnB1c2hTdGVuY2lsTWFzayh0YXJnZXQsIG1hc2tEYXRhKTtcbiAgICB9XG5cbn07XG5cbi8qKlxuICogUmVtb3ZlcyB0aGUgbGFzdCBtYXNrIGZyb20gdGhlIG1hc2sgc3RhY2sgYW5kIGRvZXNuJ3QgcmV0dXJuIGl0LlxuICpcbiAqIEBwYXJhbSB0YXJnZXQge1BJWEkuUmVuZGVyVGFyZ2V0fVxuICogQHBhcmFtIG1hc2tEYXRhIHthbnlbXX1cbiAqL1xuTWFza01hbmFnZXIucHJvdG90eXBlLnBvcE1hc2sgPSBmdW5jdGlvbiAodGFyZ2V0LCBtYXNrRGF0YSlcbntcbiAgICBpZiAobWFza0RhdGEudGV4dHVyZSlcbiAgICB7XG4gICAgICAgIHRoaXMucG9wU3ByaXRlTWFzayh0YXJnZXQsIG1hc2tEYXRhKTtcbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgdGhpcy5wb3BTdGVuY2lsTWFzayh0YXJnZXQsIG1hc2tEYXRhKTtcbiAgICB9XG59O1xuXG4vKipcbiAqIEFwcGxpZXMgdGhlIE1hc2sgYW5kIGFkZHMgaXQgdG8gdGhlIGN1cnJlbnQgZmlsdGVyIHN0YWNrLlxuICpcbiAqIEBwYXJhbSB0YXJnZXQge1BJWEkuUmVuZGVyVGFyZ2V0fVxuICogQHBhcmFtIG1hc2tEYXRhIHthbnlbXX1cbiAqL1xuTWFza01hbmFnZXIucHJvdG90eXBlLnB1c2hTcHJpdGVNYXNrID0gZnVuY3Rpb24gKHRhcmdldCwgbWFza0RhdGEpXG57XG4gICAgdmFyIGFscGhhTWFza0ZpbHRlciA9IHRoaXMuYWxwaGFNYXNrUG9vbC5wb3AoKTtcblxuICAgIGlmICghYWxwaGFNYXNrRmlsdGVyKVxuICAgIHtcbiAgICAgICAgYWxwaGFNYXNrRmlsdGVyID0gW25ldyBBbHBoYU1hc2tGaWx0ZXIobWFza0RhdGEpXTtcbiAgICB9XG5cbiAgICBhbHBoYU1hc2tGaWx0ZXJbMF0ubWFza1Nwcml0ZSA9IG1hc2tEYXRhO1xuICAgIHRoaXMucmVuZGVyZXIuZmlsdGVyTWFuYWdlci5wdXNoRmlsdGVyKHRhcmdldCwgYWxwaGFNYXNrRmlsdGVyKTtcbn07XG5cbi8qKlxuICogUmVtb3ZlcyB0aGUgbGFzdCBmaWx0ZXIgZnJvbSB0aGUgZmlsdGVyIHN0YWNrIGFuZCBkb2Vzbid0IHJldHVybiBpdC5cbiAqXG4gKi9cbk1hc2tNYW5hZ2VyLnByb3RvdHlwZS5wb3BTcHJpdGVNYXNrID0gZnVuY3Rpb24gKClcbntcbiAgICB2YXIgZmlsdGVycyA9IHRoaXMucmVuZGVyZXIuZmlsdGVyTWFuYWdlci5wb3BGaWx0ZXIoKTtcblxuICAgIHRoaXMuYWxwaGFNYXNrUG9vbC5wdXNoKGZpbHRlcnMpO1xufTtcblxuXG4vKipcbiAqIEFwcGxpZXMgdGhlIE1hc2sgYW5kIGFkZHMgaXQgdG8gdGhlIGN1cnJlbnQgZmlsdGVyIHN0YWNrLlxuICpcbiAqIEBwYXJhbSB0YXJnZXQge1BJWEkuUmVuZGVyVGFyZ2V0fVxuICogQHBhcmFtIG1hc2tEYXRhIHthbnlbXX1cbiAqL1xuTWFza01hbmFnZXIucHJvdG90eXBlLnB1c2hTdGVuY2lsTWFzayA9IGZ1bmN0aW9uICh0YXJnZXQsIG1hc2tEYXRhKVxue1xuICAgIHRoaXMucmVuZGVyZXIuc3RlbmNpbE1hbmFnZXIucHVzaE1hc2sobWFza0RhdGEpO1xufTtcblxuLyoqXG4gKiBSZW1vdmVzIHRoZSBsYXN0IGZpbHRlciBmcm9tIHRoZSBmaWx0ZXIgc3RhY2sgYW5kIGRvZXNuJ3QgcmV0dXJuIGl0LlxuICpcbiAqIEBwYXJhbSB0YXJnZXQge1BJWEkuUmVuZGVyVGFyZ2V0fVxuICogQHBhcmFtIG1hc2tEYXRhIHthbnlbXX1cbiAqL1xuTWFza01hbmFnZXIucHJvdG90eXBlLnBvcFN0ZW5jaWxNYXNrID0gZnVuY3Rpb24gKHRhcmdldCwgbWFza0RhdGEpXG57XG4gICAgdGhpcy5yZW5kZXJlci5zdGVuY2lsTWFuYWdlci5wb3BNYXNrKG1hc2tEYXRhKTtcbn07XG5cbiIsInZhciBXZWJHTE1hbmFnZXIgPSByZXF1aXJlKCcuL1dlYkdMTWFuYWdlcicpLFxuICAgIFRleHR1cmVTaGFkZXIgPSByZXF1aXJlKCcuLi9zaGFkZXJzL1RleHR1cmVTaGFkZXInKSxcbiAgICBDb21wbGV4UHJpbWl0aXZlU2hhZGVyID0gcmVxdWlyZSgnLi4vc2hhZGVycy9Db21wbGV4UHJpbWl0aXZlU2hhZGVyJyksXG4gICAgUHJpbWl0aXZlU2hhZGVyID0gcmVxdWlyZSgnLi4vc2hhZGVycy9QcmltaXRpdmVTaGFkZXInKSxcbiAgICB1dGlscyA9IHJlcXVpcmUoJy4uLy4uLy4uL3V0aWxzJyk7XG5cbi8qKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQGV4dGVuZHMgUElYSS5XZWJHTE1hbmFnZXJcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5XZWJHTFJlbmRlcmVyfSBUaGUgcmVuZGVyZXIgdGhpcyBtYW5hZ2VyIHdvcmtzIGZvci5cbiAqL1xuZnVuY3Rpb24gU2hhZGVyTWFuYWdlcihyZW5kZXJlcilcbntcbiAgICBXZWJHTE1hbmFnZXIuY2FsbCh0aGlzLCByZW5kZXJlcik7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy5tYXhBdHRpYnMgPSAxMDtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge2FueVtdfVxuICAgICAqL1xuICAgIHRoaXMuYXR0cmliU3RhdGUgPSBbXTtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge2FueVtdfVxuICAgICAqL1xuICAgIHRoaXMudGVtcEF0dHJpYlN0YXRlID0gW107XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMubWF4QXR0aWJzOyBpKyspXG4gICAge1xuICAgICAgICB0aGlzLmF0dHJpYlN0YXRlW2ldID0gZmFsc2U7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7YW55W119XG4gICAgICovXG4gICAgdGhpcy5zdGFjayA9IFtdO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fY3VycmVudElkID0gLTE7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlNoYWRlcn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuY3VycmVudFNoYWRlciA9IG51bGw7XG5cbi8vICAgIHRoaXMuaW5pdFBsdWdpbnMoKTtcbn1cblxuU2hhZGVyTWFuYWdlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFdlYkdMTWFuYWdlci5wcm90b3R5cGUpO1xuU2hhZGVyTWFuYWdlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBTaGFkZXJNYW5hZ2VyO1xudXRpbHMucGx1Z2luVGFyZ2V0Lm1peGluKFNoYWRlck1hbmFnZXIpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IFNoYWRlck1hbmFnZXI7XG5cbi8qKlxuICogQ2FsbGVkIHdoZW4gdGhlcmUgaXMgYSBXZWJHTCBjb250ZXh0IGNoYW5nZS5cbiAqXG4gKi9cblNoYWRlck1hbmFnZXIucHJvdG90eXBlLm9uQ29udGV4dENoYW5nZSA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy5pbml0UGx1Z2lucygpO1xuXG4gICAgdmFyIGdsID0gdGhpcy5yZW5kZXJlci5nbDtcblxuICAgIC8vIGdldCB0aGUgbWF4aW11bSBudW1iZXIgb2YgYXR0cmlidXRlIGNvcnJlY3RseSBhcyB0aGlzIHRlbmRzIHRvIHZhcnlcbiAgICB0aGlzLm1heEF0dGlicyA9IGdsLmdldFBhcmFtZXRlcihnbC5NQVhfVkVSVEVYX0FUVFJJQlMpO1xuXG4gICAgdGhpcy5hdHRyaWJTdGF0ZSA9IFtdO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLm1heEF0dGliczsgaSsrKVxuICAgIHtcbiAgICAgICAgdGhpcy5hdHRyaWJTdGF0ZVtpXSA9IGZhbHNlO1xuICAgIH1cblxuICAgIC8vIFRPRE8gLSBXaHkgYXJlIHRoZXNlIG5vdCBwbHVnaW5zPyBXZSBjYW4ndCBkZWNvdXBsZSBwcmltaXRpdmVzIHVubGVzcyB0aGV5IGFyZS4uLi5cbiAgICB0aGlzLmRlZmF1bHRTaGFkZXIgPSBuZXcgVGV4dHVyZVNoYWRlcih0aGlzKTtcbiAgICB0aGlzLnByaW1pdGl2ZVNoYWRlciA9IG5ldyBQcmltaXRpdmVTaGFkZXIodGhpcyk7XG4gICAgdGhpcy5jb21wbGV4UHJpbWl0aXZlU2hhZGVyID0gbmV3IENvbXBsZXhQcmltaXRpdmVTaGFkZXIodGhpcyk7XG59O1xuXG4vKipcbiAqIFRha2VzIHRoZSBhdHRyaWJ1dGVzIGdpdmVuIGluIHBhcmFtZXRlcnMgYW5kIHVwbG9hZHMgdGhlbS5cbiAqXG4gKiBAcGFyYW0gYXR0cmlicyB7YW55W119IGF0dHJpYnNcbiAqL1xuU2hhZGVyTWFuYWdlci5wcm90b3R5cGUuc2V0QXR0cmlicyA9IGZ1bmN0aW9uIChhdHRyaWJzKVxue1xuICAgIC8vIHJlc2V0IHRlbXAgc3RhdGVcbiAgICB2YXIgaTtcblxuICAgIGZvciAoaSA9IDA7IGkgPCB0aGlzLnRlbXBBdHRyaWJTdGF0ZS5sZW5ndGg7IGkrKylcbiAgICB7XG4gICAgICAgIHRoaXMudGVtcEF0dHJpYlN0YXRlW2ldID0gZmFsc2U7XG4gICAgfVxuXG4gICAgLy8gc2V0IHRoZSBuZXcgYXR0cmlic1xuICAgIGZvciAodmFyIGEgaW4gYXR0cmlicylcbiAgICB7XG4gICAgICAgIHRoaXMudGVtcEF0dHJpYlN0YXRlW2F0dHJpYnNbYV1dID0gdHJ1ZTtcbiAgICB9XG5cbiAgICB2YXIgZ2wgPSB0aGlzLnJlbmRlcmVyLmdsO1xuXG4gICAgZm9yIChpID0gMDsgaSA8IHRoaXMuYXR0cmliU3RhdGUubGVuZ3RoOyBpKyspXG4gICAge1xuICAgICAgICBpZiAodGhpcy5hdHRyaWJTdGF0ZVtpXSAhPT0gdGhpcy50ZW1wQXR0cmliU3RhdGVbaV0pXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuYXR0cmliU3RhdGVbaV0gPSB0aGlzLnRlbXBBdHRyaWJTdGF0ZVtpXTtcblxuICAgICAgICAgICAgaWYgKHRoaXMuYXR0cmliU3RhdGVbaV0pXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgZ2wuZW5hYmxlVmVydGV4QXR0cmliQXJyYXkoaSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgZ2wuZGlzYWJsZVZlcnRleEF0dHJpYkFycmF5KGkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxufTtcblxuLyoqXG4gKiBTZXRzIHRoZSBjdXJyZW50IHNoYWRlci5cbiAqXG4gKiBAcGFyYW0gc2hhZGVyIHtQSVhJLlNoYWRlcn0gdGhlIHNoYWRlciB0byB1cGxvYWRcbiAqL1xuU2hhZGVyTWFuYWdlci5wcm90b3R5cGUuc2V0U2hhZGVyID0gZnVuY3Rpb24gKHNoYWRlcilcbntcbiAgICByZXR1cm47XG4gICAgaWYgKHRoaXMuX2N1cnJlbnRJZCA9PT0gc2hhZGVyLnVpZClcbiAgICB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICB0aGlzLl9jdXJyZW50SWQgPSBzaGFkZXIudWlkO1xuXG4gICAgdGhpcy5jdXJyZW50U2hhZGVyID0gc2hhZGVyO1xuXG4gICAgdGhpcy5yZW5kZXJlci5nbC51c2VQcm9ncmFtKHNoYWRlci5wcm9ncmFtKTtcbiAgICB0aGlzLnNldEF0dHJpYnMoc2hhZGVyLmF0dHJpYnV0ZXMpO1xuXG4gICAgcmV0dXJuIHRydWU7XG59O1xuXG4vKipcbiAqIERlc3Ryb3lzIHRoaXMgb2JqZWN0LlxuICpcbiAqL1xuU2hhZGVyTWFuYWdlci5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy5wcmltaXRpdmVTaGFkZXIuZGVzdHJveSgpO1xuICAgIHRoaXMuY29tcGxleFByaW1pdGl2ZVNoYWRlci5kZXN0cm95KCk7XG4gICAgV2ViR0xNYW5hZ2VyLnByb3RvdHlwZS5kZXN0cm95LmNhbGwodGhpcyk7XG5cbiAgICB0aGlzLmRlc3Ryb3lQbHVnaW5zKCk7XG5cbiAgICB0aGlzLmF0dHJpYlN0YXRlID0gbnVsbDtcblxuICAgIHRoaXMudGVtcEF0dHJpYlN0YXRlID0gbnVsbDtcbn07XG4iLCJ2YXIgV2ViR0xNYW5hZ2VyID0gcmVxdWlyZSgnLi9XZWJHTE1hbmFnZXInKSxcbiAgICB1dGlscyA9IHJlcXVpcmUoJy4uLy4uLy4uL3V0aWxzJyk7XG5cbi8qKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLldlYkdMUmVuZGVyZXJ9IFRoZSByZW5kZXJlciB0aGlzIG1hbmFnZXIgd29ya3MgZm9yLlxuICovXG5mdW5jdGlvbiBXZWJHTE1hc2tNYW5hZ2VyKHJlbmRlcmVyKVxue1xuICAgIFdlYkdMTWFuYWdlci5jYWxsKHRoaXMsIHJlbmRlcmVyKTtcbiAgICB0aGlzLnN0ZW5jaWxNYXNrU3RhY2sgPSBudWxsO1xufVxuXG5XZWJHTE1hc2tNYW5hZ2VyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoV2ViR0xNYW5hZ2VyLnByb3RvdHlwZSk7XG5XZWJHTE1hc2tNYW5hZ2VyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFdlYkdMTWFza01hbmFnZXI7XG5tb2R1bGUuZXhwb3J0cyA9IFdlYkdMTWFza01hbmFnZXI7XG5cbi8qKlxuICogQ2hhbmdlcyB0aGUgbWFzayBzdGFjayB0aGF0IGlzIHVzZWQgYnkgdGhpcyBtYW5hZ2VyLlxuICpcbiAqIEBwYXJhbSBzdGVuY2lsTWFza1N0YWNrIHtQSVhJLlN0ZW5jaWxNYXNrU3RhY2t9IFRoZSBtYXNrIHN0YWNrXG4gKi9cbldlYkdMTWFza01hbmFnZXIucHJvdG90eXBlLnNldE1hc2tTdGFjayA9IGZ1bmN0aW9uICggc3RlbmNpbE1hc2tTdGFjayApXG57XG4gICAgdGhpcy5zdGVuY2lsTWFza1N0YWNrID0gc3RlbmNpbE1hc2tTdGFjaztcblxuICAgIHZhciBnbCA9IHRoaXMucmVuZGVyZXIuZ2w7XG5cbiAgICBpZiAoc3RlbmNpbE1hc2tTdGFjay5zdGVuY2lsU3RhY2subGVuZ3RoID09PSAwKVxuICAgIHtcbiAgICAgICAgZ2wuZGlzYWJsZShnbC5TVEVOQ0lMX1RFU1QpO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICBnbC5lbmFibGUoZ2wuU1RFTkNJTF9URVNUKTtcbiAgICB9XG59O1xuXG4vKipcbiAqIEFwcGxpZXMgdGhlIE1hc2sgYW5kIGFkZHMgaXQgdG8gdGhlIGN1cnJlbnQgZmlsdGVyIHN0YWNrLiBAYWx2aW5cbiAqXG4gKiBAcGFyYW0gZ3JhcGhpY3Mge1BJWEkuR3JhcGhpY3N9XG4gKiBAcGFyYW0gd2ViR0xEYXRhIHthbnlbXX1cbiAqL1xuV2ViR0xNYXNrTWFuYWdlci5wcm90b3R5cGUucHVzaFN0ZW5jaWwgPSBmdW5jdGlvbiAoZ3JhcGhpY3MsIHdlYkdMRGF0YSlcbntcbiAgICB0aGlzLnJlbmRlcmVyLl9hY3RpdmVSZW5kZXJUYXJnZXQuYXR0YWNoU3RlbmNpbEJ1ZmZlcigpO1xuXG4gICAgdmFyIGdsID0gdGhpcy5yZW5kZXJlci5nbCxcbiAgICAgICAgc21zID0gdGhpcy5zdGVuY2lsTWFza1N0YWNrO1xuXG4gICAgdGhpcy5iaW5kR3JhcGhpY3MoZ3JhcGhpY3MsIHdlYkdMRGF0YSk7XG5cbiAgICBpZiAoc21zLnN0ZW5jaWxTdGFjay5sZW5ndGggPT09IDApXG4gICAge1xuICAgICAgICBnbC5lbmFibGUoZ2wuU1RFTkNJTF9URVNUKTtcbiAgICAgICAgZ2wuY2xlYXIoZ2wuU1RFTkNJTF9CVUZGRVJfQklUKTtcbiAgICAgICAgc21zLnJldmVyc2UgPSB0cnVlO1xuICAgICAgICBzbXMuY291bnQgPSAwO1xuICAgIH1cblxuICAgIHNtcy5zdGVuY2lsU3RhY2sucHVzaCh3ZWJHTERhdGEpO1xuXG4gICAgdmFyIGxldmVsID0gc21zLmNvdW50O1xuXG4gICAgZ2wuY29sb3JNYXNrKGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlKTtcblxuICAgIGdsLnN0ZW5jaWxGdW5jKGdsLkFMV0FZUywwLDB4RkYpO1xuICAgIGdsLnN0ZW5jaWxPcChnbC5LRUVQLGdsLktFRVAsZ2wuSU5WRVJUKTtcblxuICAgIC8vIGRyYXcgdGhlIHRyaWFuZ2xlIHN0cmlwIVxuXG4gICAgaWYgKHdlYkdMRGF0YS5tb2RlID09PSAxKVxuICAgIHtcbiAgICAgICAgZ2wuZHJhd0VsZW1lbnRzKGdsLlRSSUFOR0xFX0ZBTiwgIHdlYkdMRGF0YS5pbmRpY2VzLmxlbmd0aCAtIDQsIGdsLlVOU0lHTkVEX1NIT1JULCAwICk7XG5cbiAgICAgICAgaWYgKHNtcy5yZXZlcnNlKVxuICAgICAgICB7XG4gICAgICAgICAgICBnbC5zdGVuY2lsRnVuYyhnbC5FUVVBTCwgMHhGRiAtIGxldmVsLCAweEZGKTtcbiAgICAgICAgICAgIGdsLnN0ZW5jaWxPcChnbC5LRUVQLGdsLktFRVAsZ2wuREVDUik7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgICBnbC5zdGVuY2lsRnVuYyhnbC5FUVVBTCxsZXZlbCwgMHhGRik7XG4gICAgICAgICAgICBnbC5zdGVuY2lsT3AoZ2wuS0VFUCxnbC5LRUVQLGdsLklOQ1IpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gZHJhdyBhIHF1YWQgdG8gaW5jcmVtZW50Li5cbiAgICAgICAgZ2wuZHJhd0VsZW1lbnRzKGdsLlRSSUFOR0xFX0ZBTiwgNCwgZ2wuVU5TSUdORURfU0hPUlQsICggd2ViR0xEYXRhLmluZGljZXMubGVuZ3RoIC0gNCApICogMiApO1xuXG4gICAgICAgIGlmIChzbXMucmV2ZXJzZSlcbiAgICAgICAge1xuICAgICAgICAgICAgZ2wuc3RlbmNpbEZ1bmMoZ2wuRVFVQUwsMHhGRi0obGV2ZWwrMSksIDB4RkYpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2VcbiAgICAgICAge1xuICAgICAgICAgICAgZ2wuc3RlbmNpbEZ1bmMoZ2wuRVFVQUwsbGV2ZWwrMSwgMHhGRik7XG4gICAgICAgIH1cblxuICAgICAgICBzbXMucmV2ZXJzZSA9ICFzbXMucmV2ZXJzZTtcbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgaWYgKCFzbXMucmV2ZXJzZSlcbiAgICAgICAge1xuICAgICAgICAgICAgZ2wuc3RlbmNpbEZ1bmMoZ2wuRVFVQUwsIDB4RkYgLSBsZXZlbCwgMHhGRik7XG4gICAgICAgICAgICBnbC5zdGVuY2lsT3AoZ2wuS0VFUCxnbC5LRUVQLGdsLkRFQ1IpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2VcbiAgICAgICAge1xuICAgICAgICAgICAgZ2wuc3RlbmNpbEZ1bmMoZ2wuRVFVQUwsbGV2ZWwsIDB4RkYpO1xuICAgICAgICAgICAgZ2wuc3RlbmNpbE9wKGdsLktFRVAsZ2wuS0VFUCxnbC5JTkNSKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGdsLmRyYXdFbGVtZW50cyhnbC5UUklBTkdMRV9TVFJJUCwgIHdlYkdMRGF0YS5pbmRpY2VzLmxlbmd0aCwgZ2wuVU5TSUdORURfU0hPUlQsIDAgKTtcblxuICAgICAgICBpZiAoIXNtcy5yZXZlcnNlKVxuICAgICAgICB7XG4gICAgICAgICAgICBnbC5zdGVuY2lsRnVuYyhnbC5FUVVBTCwweEZGLShsZXZlbCsxKSwgMHhGRik7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgICBnbC5zdGVuY2lsRnVuYyhnbC5FUVVBTCxsZXZlbCsxLCAweEZGKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGdsLmNvbG9yTWFzayh0cnVlLCB0cnVlLCB0cnVlLCB0cnVlKTtcbiAgICBnbC5zdGVuY2lsT3AoZ2wuS0VFUCxnbC5LRUVQLGdsLktFRVApO1xuXG4gICAgc21zLmNvdW50Kys7XG59O1xuXG4vKipcbiAqIFRPRE8gdGhpcyBkb2VzIG5vdCBiZWxvbmcgaGVyZSFcbiAqXG4gKiBAcGFyYW0gZ3JhcGhpY3Mge1BJWEkuR3JhcGhpY3N9XG4gKiBAcGFyYW0gd2ViR0xEYXRhIHthbnlbXX1cbiAqL1xuV2ViR0xNYXNrTWFuYWdlci5wcm90b3R5cGUuYmluZEdyYXBoaWNzID0gZnVuY3Rpb24gKGdyYXBoaWNzLCB3ZWJHTERhdGEpXG57XG4gICAgLy9pZiAodGhpcy5fY3VycmVudEdyYXBoaWNzID09PSBncmFwaGljcylyZXR1cm47XG4gICAgdmFyIGdsID0gdGhpcy5yZW5kZXJlci5nbDtcblxuICAgICAvLyBiaW5kIHRoZSBncmFwaGljcyBvYmplY3QuLlxuICAgIHZhciBzaGFkZXIgPSB0aGlzLnJlbmRlcmVyLnBsdWdpbnMuZ3JhcGhpY3MucHJpbWl0aXZlU2hhZGVyO1xuXG4gICAgaWYgKHdlYkdMRGF0YS5tb2RlID09PSAxKVxuICAgIHtcbiAgICAgICAgLypcbiAgICAgICAgc2hhZGVyID0gdGhpcy5yZW5kZXJlci5zaGFkZXJNYW5hZ2VyLmNvbXBsZXhQcmltaXRpdmVTaGFkZXI7XG5cbiAgICAgICAgdGhpcy5yZW5kZXJlci5zaGFkZXJNYW5hZ2VyLnNldFNoYWRlcihzaGFkZXIpO1xuXG4gICAgICAgIGdsLnVuaWZvcm1NYXRyaXgzZnYoc2hhZGVyLnVuaWZvcm1zLnRyYW5zbGF0aW9uTWF0cml4Ll9sb2NhdGlvbiwgZmFsc2UsIGdyYXBoaWNzLndvcmxkVHJhbnNmb3JtLnRvQXJyYXkodHJ1ZSkpO1xuXG4gICAgICAgIGdsLnVuaWZvcm1NYXRyaXgzZnYoc2hhZGVyLnVuaWZvcm1zLnByb2plY3Rpb25NYXRyaXguX2xvY2F0aW9uLCBmYWxzZSwgdGhpcy5yZW5kZXJlci5jdXJyZW50UmVuZGVyVGFyZ2V0LnByb2plY3Rpb25NYXRyaXgudG9BcnJheSh0cnVlKSk7XG5cbiAgICAgICAgZ2wudW5pZm9ybTNmdihzaGFkZXIudW5pZm9ybXMudGludC5fbG9jYXRpb24sIHV0aWxzLmhleDJyZ2IoZ3JhcGhpY3MudGludCkpO1xuXG4gICAgICAgIGdsLnVuaWZvcm0zZnYoc2hhZGVyLnVuaWZvcm1zLmNvbG9yLl9sb2NhdGlvbiwgd2ViR0xEYXRhLmNvbG9yKTtcblxuICAgICAgICBnbC51bmlmb3JtMWYoc2hhZGVyLnVuaWZvcm1zLmFscGhhLl9sb2NhdGlvbiwgZ3JhcGhpY3Mud29ybGRBbHBoYSk7XG5cbiAgICAgICAgZ2wuYmluZEJ1ZmZlcihnbC5BUlJBWV9CVUZGRVIsIHdlYkdMRGF0YS5idWZmZXIpO1xuXG4gICAgICAgIGdsLnZlcnRleEF0dHJpYlBvaW50ZXIoc2hhZGVyLmF0dHJpYnV0ZXMuYVZlcnRleFBvc2l0aW9uLCAyLCBnbC5GTE9BVCwgZmFsc2UsIDQgKiAyLCAwKTtcblxuICAgICAgICAvLyBub3cgZG8gdGhlIHJlc3QuLlxuICAgICAgICAvLyBzZXQgdGhlIGluZGV4IGJ1ZmZlciFcbiAgICAgICAgZ2wuYmluZEJ1ZmZlcihnbC5FTEVNRU5UX0FSUkFZX0JVRkZFUiwgd2ViR0xEYXRhLmluZGV4QnVmZmVyKTtcbiAgICAqL1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICAvL3RoaXMucmVuZGVyZXIuc2hhZGVyTWFuYWdlci5hY3RpdmF0ZVByaW1pdGl2ZVNoYWRlcigpO1xuLy8gICAgICAgIHNoYWRlciA9IHRoaXMucmVuZGVyZXIuc2hhZGVyTWFuYWdlci5wcmltaXRpdmVTaGFkZXI7XG4gICAgICAgXG4gICAgICAgIHRoaXMucmVuZGVyZXIuYmluZFNoYWRlcihzaGFkZXIpXG5cbiAgICAgICAgc2hhZGVyLnVuaWZvcm1zLnRyYW5zbGF0aW9uTWF0cml4ID0gZ3JhcGhpY3Mud29ybGRUcmFuc2Zvcm0udG9BcnJheSh0cnVlKTtcbiAgICAgICAgc2hhZGVyLnVuaWZvcm1zLnRpbnQgPSB1dGlscy5oZXgycmdiKGdyYXBoaWNzLnRpbnQpO1xuICAgICAgICBzaGFkZXIudW5pZm9ybXMuYWxwaGEgPSBncmFwaGljcy53b3JsZEFscGhhO1xuXG5cbiAgICAgICAgZ2wuYmluZEJ1ZmZlcihnbC5BUlJBWV9CVUZGRVIsIHdlYkdMRGF0YS5idWZmZXIpO1xuXG5cbiAgICAgICAgc2hhZGVyLmF0dHJpYnV0ZXMuYVZlcnRleFBvc2l0aW9uLnBvaW50ZXIoZ2wuRkxPQVQsIGZhbHNlLCA0ICogNiwgMCk7XG4gICAgICAgIHNoYWRlci5hdHRyaWJ1dGVzLmFDb2xvci5wb2ludGVyKGdsLkZMT0FULCBmYWxzZSwgNCAqIDYsIDIgKiA0KTtcblxuICAgICAgICBnbC5lbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShzaGFkZXIuYXR0cmlidXRlcy5hVmVydGV4UG9zaXRpb24ubG9jYXRpb24pO1xuICAgICAgICBnbC5lbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShzaGFkZXIuYXR0cmlidXRlcy5hQ29sb3IubG9jYXRpb24pO1xuXG4gICAgICAgIC8vIHNldCB0aGUgaW5kZXggYnVmZmVyIVxuICAgICAgICBnbC5iaW5kQnVmZmVyKGdsLkVMRU1FTlRfQVJSQVlfQlVGRkVSLCB3ZWJHTERhdGEuaW5kZXhCdWZmZXIpO1xuLy8gICAgICAgIGdsLmRyYXdFbGVtZW50cyhnbC5UUklBTkdMRV9TVFJJUCwgIHdlYkdMRGF0YS5pbmRpY2VzLmxlbmd0aCwgZ2wuVU5TSUdORURfU0hPUlQsIDAgKTtcblxuXG4gICAgICAvKiAgdGhpcy5yZW5kZXJlci5zaGFkZXJNYW5hZ2VyLnNldFNoYWRlcihzaGFkZXIpO1xuXG4gICAgICAgIGdsLnVuaWZvcm1NYXRyaXgzZnYoc2hhZGVyLnVuaWZvcm1zLnRyYW5zbGF0aW9uTWF0cml4Ll9sb2NhdGlvbiwgZmFsc2UsIGdyYXBoaWNzLndvcmxkVHJhbnNmb3JtLnRvQXJyYXkodHJ1ZSkpO1xuXG4gICAgICAgIGdsLnVuaWZvcm1NYXRyaXgzZnYoc2hhZGVyLnVuaWZvcm1zLnByb2plY3Rpb25NYXRyaXguX2xvY2F0aW9uLCBmYWxzZSwgdGhpcy5yZW5kZXJlci5jdXJyZW50UmVuZGVyVGFyZ2V0LnByb2plY3Rpb25NYXRyaXgudG9BcnJheSh0cnVlKSk7XG5cbiAgICAgICAgZ2wudW5pZm9ybTNmdihzaGFkZXIudW5pZm9ybXMudGludC5fbG9jYXRpb24sIHV0aWxzLmhleDJyZ2IoZ3JhcGhpY3MudGludCkpO1xuXG4gICAgICAgIGdsLnVuaWZvcm0xZihzaGFkZXIudW5pZm9ybXMuYWxwaGEuX2xvY2F0aW9uLCBncmFwaGljcy53b3JsZEFscGhhKTtcblxuICAgICAgICBnbC5iaW5kQnVmZmVyKGdsLkFSUkFZX0JVRkZFUiwgd2ViR0xEYXRhLmJ1ZmZlcik7XG5cbiAgICAgICAgZ2wudmVydGV4QXR0cmliUG9pbnRlcihzaGFkZXIuYXR0cmlidXRlcy5hVmVydGV4UG9zaXRpb24sIDIsIGdsLkZMT0FULCBmYWxzZSwgNCAqIDYsIDApO1xuICAgICAgICBnbC52ZXJ0ZXhBdHRyaWJQb2ludGVyKHNoYWRlci5hdHRyaWJ1dGVzLmFDb2xvciwgNCwgZ2wuRkxPQVQsIGZhbHNlLDQgKiA2LCAyICogNCk7XG5cbiAgICAgICAgLy8gc2V0IHRoZSBpbmRleCBidWZmZXIhXG4gICAgICAgIGdsLmJpbmRCdWZmZXIoZ2wuRUxFTUVOVF9BUlJBWV9CVUZGRVIsIHdlYkdMRGF0YS5pbmRleEJ1ZmZlcik7Ki9cbiAgICB9XG59O1xuXG4vKipcbiAqIFRPRE8gQGFsdmluXG4gKiBAcGFyYW0gZ3JhcGhpY3Mge1BJWEkuR3JhcGhpY3N9XG4gKiBAcGFyYW0gd2ViR0xEYXRhIHthbnlbXX1cbiAqL1xuV2ViR0xNYXNrTWFuYWdlci5wcm90b3R5cGUucG9wU3RlbmNpbCA9IGZ1bmN0aW9uIChncmFwaGljcywgd2ViR0xEYXRhKVxue1xuICAgIHZhciBnbCA9IHRoaXMucmVuZGVyZXIuZ2wsXG4gICAgICAgIHNtcyA9IHRoaXMuc3RlbmNpbE1hc2tTdGFjaztcblxuICAgIHNtcy5zdGVuY2lsU3RhY2sucG9wKCk7XG5cbiAgICBzbXMuY291bnQtLTtcblxuICAgIGlmIChzbXMuc3RlbmNpbFN0YWNrLmxlbmd0aCA9PT0gMClcbiAgICB7XG4gICAgICAgIC8vIHRoZSBzdGFjayBpcyBlbXB0eSFcbiAgICAgICAgZ2wuZGlzYWJsZShnbC5TVEVOQ0lMX1RFU1QpO1xuXG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG5cbiAgICAgICAgdmFyIGxldmVsID0gc21zLmNvdW50O1xuXG4gICAgICAgIHRoaXMuYmluZEdyYXBoaWNzKGdyYXBoaWNzLCB3ZWJHTERhdGEpO1xuXG4gICAgICAgIGdsLmNvbG9yTWFzayhmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSk7XG5cbiAgICAgICAgaWYgKHdlYkdMRGF0YS5tb2RlID09PSAxKVxuICAgICAgICB7XG4gICAgICAgICAgICBzbXMucmV2ZXJzZSA9ICFzbXMucmV2ZXJzZTtcblxuICAgICAgICAgICAgaWYgKHNtcy5yZXZlcnNlKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGdsLnN0ZW5jaWxGdW5jKGdsLkVRVUFMLCAweEZGIC0gKGxldmVsKzEpLCAweEZGKTtcbiAgICAgICAgICAgICAgICBnbC5zdGVuY2lsT3AoZ2wuS0VFUCxnbC5LRUVQLGdsLklOQ1IpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGdsLnN0ZW5jaWxGdW5jKGdsLkVRVUFMLGxldmVsKzEsIDB4RkYpO1xuICAgICAgICAgICAgICAgIGdsLnN0ZW5jaWxPcChnbC5LRUVQLGdsLktFRVAsZ2wuREVDUik7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIGRyYXcgYSBxdWFkIHRvIGluY3JlbWVudC4uXG4gICAgICAgICAgICBnbC5kcmF3RWxlbWVudHMoZ2wuVFJJQU5HTEVfRkFOLCA0LCBnbC5VTlNJR05FRF9TSE9SVCwgKCB3ZWJHTERhdGEuaW5kaWNlcy5sZW5ndGggLSA0ICkgKiAyICk7XG5cbiAgICAgICAgICAgIGdsLnN0ZW5jaWxGdW5jKGdsLkFMV0FZUywwLDB4RkYpO1xuICAgICAgICAgICAgZ2wuc3RlbmNpbE9wKGdsLktFRVAsZ2wuS0VFUCxnbC5JTlZFUlQpO1xuXG4gICAgICAgICAgICAvLyBkcmF3IHRoZSB0cmlhbmdsZSBzdHJpcCFcbiAgICAgICAgICAgIGdsLmRyYXdFbGVtZW50cyhnbC5UUklBTkdMRV9GQU4sICB3ZWJHTERhdGEuaW5kaWNlcy5sZW5ndGggLSA0LCBnbC5VTlNJR05FRF9TSE9SVCwgMCApO1xuXG4gICAgICAgICAgICB0aGlzLnJlbmRlcmVyLmRyYXdDb3VudCArPSAyO1xuXG4gICAgICAgICAgICBpZiAoIXNtcy5yZXZlcnNlKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGdsLnN0ZW5jaWxGdW5jKGdsLkVRVUFMLDB4RkYtKGxldmVsKSwgMHhGRik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgZ2wuc3RlbmNpbEZ1bmMoZ2wuRVFVQUwsbGV2ZWwsIDB4RkYpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgLy8gIGNvbnNvbGUubG9nKFwiPDw+PlwiKVxuICAgICAgICAgICAgaWYgKCFzbXMucmV2ZXJzZSlcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBnbC5zdGVuY2lsRnVuYyhnbC5FUVVBTCwgMHhGRiAtIChsZXZlbCsxKSwgMHhGRik7XG4gICAgICAgICAgICAgICAgZ2wuc3RlbmNpbE9wKGdsLktFRVAsZ2wuS0VFUCxnbC5JTkNSKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBnbC5zdGVuY2lsRnVuYyhnbC5FUVVBTCxsZXZlbCsxLCAweEZGKTtcbiAgICAgICAgICAgICAgICBnbC5zdGVuY2lsT3AoZ2wuS0VFUCxnbC5LRUVQLGdsLkRFQ1IpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBnbC5kcmF3RWxlbWVudHMoZ2wuVFJJQU5HTEVfU1RSSVAsICB3ZWJHTERhdGEuaW5kaWNlcy5sZW5ndGgsIGdsLlVOU0lHTkVEX1NIT1JULCAwICk7XG5cbiAgICAgICAgICAgIHRoaXMucmVuZGVyZXIuZHJhd0NvdW50Kys7XG5cbiAgICAgICAgICAgIGlmICghc21zLnJldmVyc2UpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgZ2wuc3RlbmNpbEZ1bmMoZ2wuRVFVQUwsMHhGRi0obGV2ZWwpLCAweEZGKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBnbC5zdGVuY2lsRnVuYyhnbC5FUVVBTCxsZXZlbCwgMHhGRik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBnbC5jb2xvck1hc2sodHJ1ZSwgdHJ1ZSwgdHJ1ZSwgdHJ1ZSk7XG4gICAgICAgIGdsLnN0ZW5jaWxPcChnbC5LRUVQLGdsLktFRVAsZ2wuS0VFUCk7XG5cblxuICAgIH1cbn07XG5cbi8qKlxuICogRGVzdHJveXMgdGhlIG1hc2sgc3RhY2suXG4gKlxuICovXG5XZWJHTE1hc2tNYW5hZ2VyLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKClcbntcbiAgICBXZWJHTE1hbmFnZXIucHJvdG90eXBlLmRlc3Ryb3kuY2FsbCh0aGlzKTtcblxuICAgIHRoaXMuc3RlbmNpbE1hc2tTdGFjay5zdGVuY2lsU3RhY2sgPSBudWxsO1xufTtcblxuLyoqXG4gKiBBcHBsaWVzIHRoZSBNYXNrIGFuZCBhZGRzIGl0IHRvIHRoZSBjdXJyZW50IGZpbHRlciBzdGFjay5cbiAqXG4gKiBAcGFyYW0gbWFza0RhdGEge2FueVtdfSBUaGUgbWFzayBkYXRhIHN0cnVjdHVyZSB0byB1c2VcbiAqL1xuV2ViR0xNYXNrTWFuYWdlci5wcm90b3R5cGUucHVzaE1hc2sgPSBmdW5jdGlvbiAobWFza0RhdGEpXG57XG4gICAgdGhpcy5yZW5kZXJlci5zZXRPYmplY3RSZW5kZXJlcih0aGlzLnJlbmRlcmVyLnBsdWdpbnMuZ3JhcGhpY3MpO1xuICAgIFxuICAgIC8vVE9ETyBGSVhcbiAgICBpZiAobWFza0RhdGEuZGlydHkpXG4gICAge1xuICAgICAgICB0aGlzLnJlbmRlcmVyLnBsdWdpbnMuZ3JhcGhpY3MudXBkYXRlR3JhcGhpY3MobWFza0RhdGEsIHRoaXMucmVuZGVyZXIuZ2wpO1xuICAgIH1cblxuICAgIGlmICghbWFza0RhdGEuX3dlYkdMW3RoaXMucmVuZGVyZXIuZ2wuaWRdLmRhdGEubGVuZ3RoKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMucHVzaFN0ZW5jaWwobWFza0RhdGEsIG1hc2tEYXRhLl93ZWJHTFt0aGlzLnJlbmRlcmVyLmdsLmlkXS5kYXRhWzBdKTtcbn07XG5cbi8qKlxuICogUmVtb3ZlcyB0aGUgbGFzdCBmaWx0ZXIgZnJvbSB0aGUgZmlsdGVyIHN0YWNrIGFuZCBkb2Vzbid0IHJldHVybiBpdC5cbiAqXG4gKiBAcGFyYW0gbWFza0RhdGEge2FueVtdfVxuICovXG5XZWJHTE1hc2tNYW5hZ2VyLnByb3RvdHlwZS5wb3BNYXNrID0gZnVuY3Rpb24gKG1hc2tEYXRhKVxue1xuICAgIHRoaXMucmVuZGVyZXIuc2V0T2JqZWN0UmVuZGVyZXIodGhpcy5yZW5kZXJlci5wbHVnaW5zLmdyYXBoaWNzKTtcblxuICAgIHRoaXMucG9wU3RlbmNpbChtYXNrRGF0YSwgbWFza0RhdGEuX3dlYkdMW3RoaXMucmVuZGVyZXIuZ2wuaWRdLmRhdGFbMF0pO1xufTtcblxuIiwiLyoqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcn0gVGhlIHJlbmRlcmVyIHRoaXMgbWFuYWdlciB3b3JrcyBmb3IuXG4gKi9cbmZ1bmN0aW9uIFdlYkdMTWFuYWdlcihyZW5kZXJlcilcbntcbiAgICAvKipcbiAgICAgKiBUaGUgcmVuZGVyZXIgdGhpcyBtYW5hZ2VyIHdvcmtzIGZvci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuV2ViR0xSZW5kZXJlcn1cbiAgICAgKi9cbiAgICB0aGlzLnJlbmRlcmVyID0gcmVuZGVyZXI7XG5cbiAgICB0aGlzLnJlbmRlcmVyLm9uKCdjb250ZXh0JywgdGhpcy5vbkNvbnRleHRDaGFuZ2UsIHRoaXMpO1xufVxuXG5XZWJHTE1hbmFnZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gV2ViR0xNYW5hZ2VyO1xubW9kdWxlLmV4cG9ydHMgPSBXZWJHTE1hbmFnZXI7XG5cbi8qKlxuICogR2VuZXJpYyBtZXRob2QgY2FsbGVkIHdoZW4gdGhlcmUgaXMgYSBXZWJHTCBjb250ZXh0IGNoYW5nZS5cbiAqXG4gKi9cbldlYkdMTWFuYWdlci5wcm90b3R5cGUub25Db250ZXh0Q2hhbmdlID0gZnVuY3Rpb24gKClcbntcblx0Ly8gZG8gc29tZSBjb2RlcyBpbml0IVxufTtcblxuLyoqXG4gKiBHZW5lcmljIGRlc3Ryb3kgbWV0aG9kcyB0byBiZSBvdmVycmlkZGVuIGJ5IHRoZSBzdWJjbGFzc1xuICpcbiAqL1xuV2ViR0xNYW5hZ2VyLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLnJlbmRlcmVyLm9mZignY29udGV4dCcsIHRoaXMub25Db250ZXh0Q2hhbmdlLCB0aGlzKTtcblxuICAgIHRoaXMucmVuZGVyZXIgPSBudWxsO1xufTtcbiIsInZhciBTaGFkZXIgPSByZXF1aXJlKCcuL1NoYWRlcicpO1xuXG4vKipcbiAqIFRoaXMgc2hhZGVyIGlzIHVzZWQgdG8gZHJhdyBjb21wbGV4IHByaW1pdGl2ZSBzaGFwZXMgZm9yIHtAbGluayBQSVhJLkdyYXBoaWNzfS5cbiAqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAZXh0ZW5kcyBQSVhJLlNoYWRlclxuICogQHBhcmFtIHNoYWRlck1hbmFnZXIge1BJWEkuU2hhZGVyTWFuYWdlcn0gVGhlIHdlYmdsIHNoYWRlciBtYW5hZ2VyIHRoaXMgc2hhZGVyIHdvcmtzIGZvci5cbiAqL1xuZnVuY3Rpb24gQ29tcGxleFByaW1pdGl2ZVNoYWRlcihzaGFkZXJNYW5hZ2VyKVxue1xuICAgIFNoYWRlci5jYWxsKHRoaXMsXG4gICAgICAgIHNoYWRlck1hbmFnZXIsXG4gICAgICAgIC8vIHZlcnRleCBzaGFkZXJcbiAgICAgICAgW1xuICAgICAgICAgICAgJ2F0dHJpYnV0ZSB2ZWMyIGFWZXJ0ZXhQb3NpdGlvbjsnLFxuXG4gICAgICAgICAgICAndW5pZm9ybSBtYXQzIHRyYW5zbGF0aW9uTWF0cml4OycsXG4gICAgICAgICAgICAndW5pZm9ybSBtYXQzIHByb2plY3Rpb25NYXRyaXg7JyxcblxuICAgICAgICAgICAgJ3VuaWZvcm0gdmVjMyB0aW50OycsXG4gICAgICAgICAgICAndW5pZm9ybSBmbG9hdCBhbHBoYTsnLFxuICAgICAgICAgICAgJ3VuaWZvcm0gdmVjMyBjb2xvcjsnLFxuXG4gICAgICAgICAgICAndmFyeWluZyB2ZWM0IHZDb2xvcjsnLFxuXG4gICAgICAgICAgICAndm9pZCBtYWluKHZvaWQpeycsXG4gICAgICAgICAgICAnICAgZ2xfUG9zaXRpb24gPSB2ZWM0KChwcm9qZWN0aW9uTWF0cml4ICogdHJhbnNsYXRpb25NYXRyaXggKiB2ZWMzKGFWZXJ0ZXhQb3NpdGlvbiwgMS4wKSkueHksIDAuMCwgMS4wKTsnLFxuICAgICAgICAgICAgJyAgIHZDb2xvciA9IHZlYzQoY29sb3IgKiBhbHBoYSAqIHRpbnQsIGFscGhhKTsnLC8vXCIgKiB2ZWM0KHRpbnQgKiBhbHBoYSwgYWxwaGEpOycsXG4gICAgICAgICAgICAnfSdcbiAgICAgICAgXS5qb2luKCdcXG4nKSxcbiAgICAgICAgLy8gZnJhZ21lbnQgc2hhZGVyXG4gICAgICAgIFtcbiAgICAgICAgICAgICdwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDsnLFxuXG4gICAgICAgICAgICAndmFyeWluZyB2ZWM0IHZDb2xvcjsnLFxuXG4gICAgICAgICAgICAndm9pZCBtYWluKHZvaWQpeycsXG4gICAgICAgICAgICAnICAgZ2xfRnJhZ0NvbG9yID0gdkNvbG9yOycsXG4gICAgICAgICAgICAnfSdcbiAgICAgICAgXS5qb2luKCdcXG4nKSxcbiAgICAgICAgLy8gY3VzdG9tIHVuaWZvcm1zXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRpbnQ6ICAgeyB0eXBlOiAnM2YnLCB2YWx1ZTogWzAsIDAsIDBdIH0sXG4gICAgICAgICAgICBhbHBoYTogIHsgdHlwZTogJzFmJywgdmFsdWU6IDAgfSxcbiAgICAgICAgICAgIGNvbG9yOiAgeyB0eXBlOiAnM2YnLCB2YWx1ZTogWzAsMCwwXSB9LFxuICAgICAgICAgICAgdHJhbnNsYXRpb25NYXRyaXg6IHsgdHlwZTogJ21hdDMnLCB2YWx1ZTogbmV3IEZsb2F0MzJBcnJheSg5KSB9LFxuICAgICAgICAgICAgcHJvamVjdGlvbk1hdHJpeDogeyB0eXBlOiAnbWF0MycsIHZhbHVlOiBuZXcgRmxvYXQzMkFycmF5KDkpIH1cbiAgICAgICAgfSxcbiAgICAgICAgLy8gYXR0cmlidXRlc1xuICAgICAgICB7XG4gICAgICAgICAgICBhVmVydGV4UG9zaXRpb246MFxuICAgICAgICB9XG4gICAgKTtcbn1cblxuQ29tcGxleFByaW1pdGl2ZVNoYWRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFNoYWRlci5wcm90b3R5cGUpO1xuQ29tcGxleFByaW1pdGl2ZVNoYWRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBDb21wbGV4UHJpbWl0aXZlU2hhZGVyO1xubW9kdWxlLmV4cG9ydHMgPSBDb21wbGV4UHJpbWl0aXZlU2hhZGVyO1xuIiwidmFyIFNoYWRlciA9IHJlcXVpcmUoJy4vU2hhZGVyJyk7XG5cbi8qKlxuICogVGhpcyBzaGFkZXIgaXMgdXNlZCB0byBkcmF3IHNpbXBsZSBwcmltaXRpdmUgc2hhcGVzIGZvciB7QGxpbmsgUElYSS5HcmFwaGljc30uXG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQGV4dGVuZHMgUElYSS5TaGFkZXJcbiAqIEBwYXJhbSBzaGFkZXJNYW5hZ2VyIHtTaGFkZXJNYW5hZ2VyfSBUaGUgd2ViZ2wgc2hhZGVyIG1hbmFnZXIgdGhpcyBzaGFkZXIgd29ya3MgZm9yLlxuICovXG5mdW5jdGlvbiBQcmltaXRpdmVTaGFkZXIoc2hhZGVyTWFuYWdlcilcbntcbiAgICBTaGFkZXIuY2FsbCh0aGlzLFxuICAgICAgICBzaGFkZXJNYW5hZ2VyLFxuICAgICAgICAvLyB2ZXJ0ZXggc2hhZGVyXG4gICAgICAgIFtcbiAgICAgICAgICAgICdhdHRyaWJ1dGUgdmVjMiBhVmVydGV4UG9zaXRpb247JyxcbiAgICAgICAgICAgICdhdHRyaWJ1dGUgdmVjNCBhQ29sb3I7JyxcblxuICAgICAgICAgICAgJ3VuaWZvcm0gbWF0MyB0cmFuc2xhdGlvbk1hdHJpeDsnLFxuICAgICAgICAgICAgJ3VuaWZvcm0gbWF0MyBwcm9qZWN0aW9uTWF0cml4OycsXG5cbiAgICAgICAgICAgICd1bmlmb3JtIGZsb2F0IGFscGhhOycsXG4gICAgICAgICAgICAndW5pZm9ybSBmbG9hdCBmbGlwWTsnLFxuICAgICAgICAgICAgJ3VuaWZvcm0gdmVjMyB0aW50OycsXG5cbiAgICAgICAgICAgICd2YXJ5aW5nIHZlYzQgdkNvbG9yOycsXG5cbiAgICAgICAgICAgICd2b2lkIG1haW4odm9pZCl7JyxcbiAgICAgICAgICAgICcgICBnbF9Qb3NpdGlvbiA9IHZlYzQoKHByb2plY3Rpb25NYXRyaXggKiB0cmFuc2xhdGlvbk1hdHJpeCAqIHZlYzMoYVZlcnRleFBvc2l0aW9uLCAxLjApKS54eSwgMC4wLCAxLjApOycsXG4gICAgICAgICAgICAnICAgdkNvbG9yID0gYUNvbG9yICogdmVjNCh0aW50ICogYWxwaGEsIGFscGhhKTsnLFxuICAgICAgICAgICAgJ30nXG4gICAgICAgIF0uam9pbignXFxuJyksXG4gICAgICAgIC8vIGZyYWdtZW50IHNoYWRlclxuICAgICAgICBbXG4gICAgICAgICAgICAncHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7JyxcblxuICAgICAgICAgICAgJ3ZhcnlpbmcgdmVjNCB2Q29sb3I7JyxcblxuICAgICAgICAgICAgJ3ZvaWQgbWFpbih2b2lkKXsnLFxuICAgICAgICAgICAgJyAgIGdsX0ZyYWdDb2xvciA9IHZDb2xvcjsnLFxuICAgICAgICAgICAgJ30nXG4gICAgICAgIF0uam9pbignXFxuJyksXG4gICAgICAgIC8vIGN1c3RvbSB1bmlmb3Jtc1xuICAgICAgICB7XG4gICAgICAgICAgICB0aW50OiAgIHsgdHlwZTogJzNmJywgdmFsdWU6IFswLCAwLCAwXSB9LFxuICAgICAgICAgICAgYWxwaGE6ICB7IHR5cGU6ICcxZicsIHZhbHVlOiAwIH0sXG4gICAgICAgICAgICB0cmFuc2xhdGlvbk1hdHJpeDogeyB0eXBlOiAnbWF0MycsIHZhbHVlOiBuZXcgRmxvYXQzMkFycmF5KDkpIH0sXG4gICAgICAgICAgICBwcm9qZWN0aW9uTWF0cml4OiB7IHR5cGU6ICdtYXQzJywgdmFsdWU6IG5ldyBGbG9hdDMyQXJyYXkoOSkgfVxuICAgICAgICB9LFxuICAgICAgICAvLyBjdXN0b20gYXR0cmlidXRlc1xuICAgICAgICB7XG4gICAgICAgICAgICBhVmVydGV4UG9zaXRpb246MCxcbiAgICAgICAgICAgIGFDb2xvcjowXG4gICAgICAgIH1cbiAgICApO1xufVxuXG5QcmltaXRpdmVTaGFkZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShTaGFkZXIucHJvdG90eXBlKTtcblByaW1pdGl2ZVNoYWRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBQcmltaXRpdmVTaGFkZXI7XG5tb2R1bGUuZXhwb3J0cyA9IFByaW1pdGl2ZVNoYWRlcjtcbiIsIi8qZ2xvYmFsIGNvbnNvbGUgKi9cbnZhciB1dGlscyA9IHJlcXVpcmUoJy4uLy4uLy4uL3V0aWxzJyk7XG5cbi8qKlxuICogQmFzZSBzaGFkZXIgY2xhc3MgZm9yIFBJWEkgbWFuYWdlZCBzaGFkZXJzLlxuICpcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqIEBwYXJhbSBzaGFkZXJNYW5hZ2VyIHtQSVhJLlNoYWRlck1hbmFnZXJ9IFRoZSB3ZWJnbCBzaGFkZXIgbWFuYWdlciB0aGlzIHNoYWRlciB3b3JrcyBmb3IuXG4gKiBAcGFyYW0gW3ZlcnRleFNyY10ge3N0cmluZ30gVGhlIHNvdXJjZSBvZiB0aGUgdmVydGV4IHNoYWRlci5cbiAqIEBwYXJhbSBbZnJhZ21lbnRTcmNdIHtzdHJpbmd9IFRoZSBzb3VyY2Ugb2YgdGhlIGZyYWdtZW50IHNoYWRlci5cbiAqIEBwYXJhbSBbdW5pZm9ybXNdIHtvYmplY3R9IFVuaWZvcm1zIGZvciB0aGlzIHNoYWRlci5cbiAqIEBwYXJhbSBbYXR0cmlidXRlc10ge29iamVjdH0gQXR0cmlidXRlcyBmb3IgdGhpcyBzaGFkZXIuXG4gKi9cbmZ1bmN0aW9uIFNoYWRlcihzaGFkZXJNYW5hZ2VyLCB2ZXJ0ZXhTcmMsIGZyYWdtZW50U3JjLCB1bmlmb3JtcywgYXR0cmlidXRlcylcbntcbiAgICBpZiAoIXZlcnRleFNyYyB8fCAhZnJhZ21lbnRTcmMpXG4gICAge1xuICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdQaXhpLmpzIEVycm9yLiBTaGFkZXIgcmVxdWlyZXMgdmVydGV4U3JjIGFuZCBmcmFnbWVudFNyYycpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEEgdW5pcXVlIGlkXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEByZWFkb25seVxuICAgICAqL1xuICAgIHRoaXMudWlkID0gdXRpbHMudWlkKCk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgY3VycmVudCBXZWJHTCBkcmF3aW5nIGNvbnRleHRcbiAgICAgKiBAbWVtYmVyIHtXZWJHTFJlbmRlcmluZ0NvbnRleHR9XG4gICAgICogQHJlYWRvbmx5XG4gICAgICovXG4gICAgdGhpcy5nbCA9IHNoYWRlck1hbmFnZXIucmVuZGVyZXIuZ2w7XG5cbiAgICAvL1RPRE8gbWF5YmUgd2Ugc2hvdWxkIHBhc3MgcmVuZGVyZXIgcmF0aGVyIHRoYW4gc2hhZGVyIG1hbmdlcj8/IGZvb2QgZm9yIHRob3VnaHQuLlxuICAgIHRoaXMuc2hhZGVyTWFuYWdlciA9IHNoYWRlck1hbmFnZXI7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgV2ViR0wgcHJvZ3JhbS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1dlYkdMUHJvZ3JhbX1cbiAgICAgKiBAcmVhZG9ubHlcbiAgICAgKi9cbiAgICB0aGlzLnByb2dyYW0gPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHVuaWZvcm1zIGFzIGFuIG9iamVjdFxuICAgICAqIEBtZW1iZXIge29iamVjdH1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMudW5pZm9ybXMgPSB1bmlmb3JtcyB8fCB7fTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBhdHRyaWJ1dGVzIGFzIGFuIG9iamVjdFxuICAgICAqIEBtZW1iZXIge29iamVjdH1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuYXR0cmlidXRlcyA9IGF0dHJpYnV0ZXMgfHwge307XG5cbiAgICAvKipcbiAgICAgKiBJbnRlcm5hbCB0ZXh0dXJlIGNvdW50ZXJcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLnRleHR1cmVDb3VudCA9IDE7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgdmVydGV4IHNoYWRlciBhcyBhbiBhcnJheSBvZiBzdHJpbmdzXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtzdHJpbmd9XG4gICAgICovXG4gICAgdGhpcy52ZXJ0ZXhTcmMgPSB2ZXJ0ZXhTcmM7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgZnJhZ21lbnQgc2hhZGVyIGFzIGFuIGFycmF5IG9mIHN0cmluZ3NcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge3N0cmluZ31cbiAgICAgKi9cbiAgICB0aGlzLmZyYWdtZW50U3JjID0gZnJhZ21lbnRTcmM7XG5cbiAgICB0aGlzLmluaXQoKTtcbn1cblxuU2hhZGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFNoYWRlcjtcbm1vZHVsZS5leHBvcnRzID0gU2hhZGVyO1xuXG4vKipcbiAqIENyZWF0ZXMgdGhlIHNoYWRlciBhbmQgdXNlcyBpdFxuICpcbiAqL1xuU2hhZGVyLnByb3RvdHlwZS5pbml0ID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLmNvbXBpbGUoKTtcblxuICAgIHRoaXMuZ2wudXNlUHJvZ3JhbSh0aGlzLnByb2dyYW0pO1xuXG4gICAgdGhpcy5jYWNoZVVuaWZvcm1Mb2NhdGlvbnMoT2JqZWN0LmtleXModGhpcy51bmlmb3JtcykpO1xuICAgIHRoaXMuY2FjaGVBdHRyaWJ1dGVMb2NhdGlvbnMoT2JqZWN0LmtleXModGhpcy5hdHRyaWJ1dGVzKSk7XG59O1xuXG4vKipcbiAqIENhY2hlcyB0aGUgbG9jYXRpb25zIG9mIHRoZSB1bmlmb3JtIGZvciByZXVzZS5cbiAqXG4gKiBAcGFyYW0ga2V5cyB7c3RyaW5nfSB0aGUgdW5pZm9ybXMgdG8gY2FjaGVcbiAqL1xuU2hhZGVyLnByb3RvdHlwZS5jYWNoZVVuaWZvcm1Mb2NhdGlvbnMgPSBmdW5jdGlvbiAoa2V5cylcbntcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyArK2kpXG4gICAge1xuICAgICAgICB0aGlzLnVuaWZvcm1zW2tleXNbaV1dLl9sb2NhdGlvbiA9IHRoaXMuZ2wuZ2V0VW5pZm9ybUxvY2F0aW9uKHRoaXMucHJvZ3JhbSwga2V5c1tpXSk7XG4gICAgfVxufTtcblxuLyoqXG4gKiBDYWNoZXMgdGhlIGxvY2F0aW9ucyBvZiB0aGUgYXR0cmlidXRlIGZvciByZXVzZS5cbiAqXG4gKiBAcGFyYW0ga2V5cyB7c3RyaW5nfSB0aGUgYXR0cmlidXRlcyB0byBjYWNoZVxuICovXG5TaGFkZXIucHJvdG90eXBlLmNhY2hlQXR0cmlidXRlTG9jYXRpb25zID0gZnVuY3Rpb24gKGtleXMpXG57XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgKytpKVxuICAgIHtcbiAgICAgICAgdGhpcy5hdHRyaWJ1dGVzW2tleXNbaV1dID0gdGhpcy5nbC5nZXRBdHRyaWJMb2NhdGlvbih0aGlzLnByb2dyYW0sIGtleXNbaV0pO1xuICAgIH1cblxuICAgIC8vIFRPRE86IENoZWNrIGlmIHRoaXMgaXMgbmVlZGVkIGFueW1vcmUuLi5cblxuICAgIC8vIEJlZ2luIHdvcnN0IGhhY2sgZXZhIC8vXG5cbiAgICAvLyBXSFk/Pz8gT05MWSBvbiBteSBjaHJvbWUgcGl4ZWwgdGhlIGxpbmUgYWJvdmUgcmV0dXJucyAtMSB3aGVuIHVzaW5nIGZpbHRlcnM/XG4gICAgLy8gbWF5YmUgaXRzIHNvbWV0aGluZyB0byBkbyB3aXRoIHRoZSBjdXJyZW50IHN0YXRlIG9mIHRoZSBnbCBjb250ZXh0LlxuICAgIC8vIEknbSBjb252aW5jZWQgdGhpcyBpcyBhIGJ1ZyBpbiB0aGUgY2hyb21lIGJyb3dzZXIgYXMgdGhlcmUgaXMgTk8gcmVhc29uIHdoeSB0aGlzIHNob3VsZCBiZSByZXR1cm5pbmcgLTEgZXNwZWNpYWxseSBhcyBpdCBvbmx5IG1hbmlmZXN0cyBvbiBteSBjaHJvbWUgcGl4ZWxcbiAgICAvLyBJZiB0aGVyZXMgYW55IHdlYkdMIHBlb3BsZSB0aGF0IGtub3cgd2h5IGNvdWxkIGhhcHBlbiBwbGVhc2UgaGVscCA6KVxuICAgIC8vIGlmICh0aGlzLmF0dHJpYnV0ZXMuYUNvbG9yID09PSAtMSl7XG4gICAgLy8gICAgIHRoaXMuYXR0cmlidXRlcy5hQ29sb3IgPSAyO1xuICAgIC8vIH1cblxuICAgIC8vIEVuZCB3b3JzdCBoYWNrIGV2YSAvL1xufTtcblxuLyoqXG4gKiBBdHRhY2hlcyB0aGUgc2hhZGVycyBhbmQgY3JlYXRlcyB0aGUgcHJvZ3JhbS5cbiAqXG4gKiBAcmV0dXJuIHtXZWJHTFByb2dyYW19XG4gKi9cblNoYWRlci5wcm90b3R5cGUuY29tcGlsZSA9IGZ1bmN0aW9uICgpXG57XG4gICAgdmFyIGdsID0gdGhpcy5nbDtcblxuICAgIHZhciBnbFZlcnRTaGFkZXIgPSB0aGlzLl9nbENvbXBpbGUoZ2wuVkVSVEVYX1NIQURFUiwgdGhpcy52ZXJ0ZXhTcmMpO1xuICAgIHZhciBnbEZyYWdTaGFkZXIgPSB0aGlzLl9nbENvbXBpbGUoZ2wuRlJBR01FTlRfU0hBREVSLCB0aGlzLmZyYWdtZW50U3JjKTtcblxuICAgIHZhciBwcm9ncmFtID0gZ2wuY3JlYXRlUHJvZ3JhbSgpO1xuXG4gICAgZ2wuYXR0YWNoU2hhZGVyKHByb2dyYW0sIGdsVmVydFNoYWRlcik7XG4gICAgZ2wuYXR0YWNoU2hhZGVyKHByb2dyYW0sIGdsRnJhZ1NoYWRlcik7XG4gICAgZ2wubGlua1Byb2dyYW0ocHJvZ3JhbSk7XG5cbiAgICAvLyBpZiBsaW5raW5nIGZhaWxzLCB0aGVuIGxvZyBhbmQgY2xlYW51cFxuICAgIGlmICghZ2wuZ2V0UHJvZ3JhbVBhcmFtZXRlcihwcm9ncmFtLCBnbC5MSU5LX1NUQVRVUykpXG4gICAge1xuICAgICAgICBjb25zb2xlLmVycm9yKCdQaXhpLmpzIEVycm9yOiBDb3VsZCBub3QgaW5pdGlhbGl6ZSBzaGFkZXIuJyk7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ2dsLlZBTElEQVRFX1NUQVRVUycsIGdsLmdldFByb2dyYW1QYXJhbWV0ZXIocHJvZ3JhbSwgZ2wuVkFMSURBVEVfU1RBVFVTKSk7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ2dsLmdldEVycm9yKCknLCBnbC5nZXRFcnJvcigpKTtcblxuICAgICAgICAvLyBpZiB0aGVyZSBpcyBhIHByb2dyYW0gaW5mbyBsb2csIGxvZyBpdFxuICAgICAgICBpZiAoZ2wuZ2V0UHJvZ3JhbUluZm9Mb2cocHJvZ3JhbSkgIT09ICcnKVxuICAgICAgICB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ1BpeGkuanMgV2FybmluZzogZ2wuZ2V0UHJvZ3JhbUluZm9Mb2coKScsIGdsLmdldFByb2dyYW1JbmZvTG9nKHByb2dyYW0pKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGdsLmRlbGV0ZVByb2dyYW0ocHJvZ3JhbSk7XG4gICAgICAgIHByb2dyYW0gPSBudWxsO1xuICAgIH1cblxuICAgIC8vIGNsZWFuIHVwIHNvbWUgc2hhZGVyc1xuICAgIGdsLmRlbGV0ZVNoYWRlcihnbFZlcnRTaGFkZXIpO1xuICAgIGdsLmRlbGV0ZVNoYWRlcihnbEZyYWdTaGFkZXIpO1xuXG4gICAgcmV0dXJuICh0aGlzLnByb2dyYW0gPSBwcm9ncmFtKTtcbn07XG5cbi8qKlxuKiBBZGRzIGEgbmV3IHVuaWZvcm1cbipcbiogQHBhcmFtIHVuaWZvcm0ge29iamVjdH0gdGhlIG5ldyB1bmlmb3JtIHRvIGF0dGFjaFxuKi9cblNoYWRlci5wcm90b3R5cGUuc3luY1VuaWZvcm0gPSBmdW5jdGlvbiAodW5pZm9ybSlcbntcbiAgICB2YXIgbG9jYXRpb24gPSB1bmlmb3JtLl9sb2NhdGlvbixcbiAgICAgICAgdmFsdWUgPSB1bmlmb3JtLnZhbHVlLFxuICAgICAgICBnbCA9IHRoaXMuZ2wsXG4gICAgICAgIGksIGlsO1xuXG4gICAgc3dpdGNoICh1bmlmb3JtLnR5cGUpXG4gICAge1xuICAgICAgICBjYXNlICdiJzpcbiAgICAgICAgY2FzZSAnYm9vbCc6XG4gICAgICAgIGNhc2UgJ2Jvb2xlYW4nOlxuICAgICAgICAgICAgZ2wudW5pZm9ybTFpKGxvY2F0aW9uLCB2YWx1ZSA/IDEgOiAwKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIC8vIHNpbmdsZSBpbnQgdmFsdWVcbiAgICAgICAgY2FzZSAnaSc6XG4gICAgICAgIGNhc2UgJzFpJzpcbiAgICAgICAgICAgIGdsLnVuaWZvcm0xaShsb2NhdGlvbiwgdmFsdWUpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLy8gc2luZ2xlIGZsb2F0IHZhbHVlXG4gICAgICAgIGNhc2UgJ2YnOlxuICAgICAgICBjYXNlICcxZic6XG4gICAgICAgICAgICBnbC51bmlmb3JtMWYobG9jYXRpb24sIHZhbHVlKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIC8vIEZsb2F0MzJBcnJheSgyKSBvciBKUyBBcnJyYXlcbiAgICAgICAgY2FzZSAnMmYnOlxuICAgICAgICAgICAgZ2wudW5pZm9ybTJmKGxvY2F0aW9uLCB2YWx1ZVswXSwgdmFsdWVbMV0pO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLy8gRmxvYXQzMkFycmF5KDMpIG9yIEpTIEFycnJheVxuICAgICAgICBjYXNlICczZic6XG4gICAgICAgICAgICBnbC51bmlmb3JtM2YobG9jYXRpb24sIHZhbHVlWzBdLCB2YWx1ZVsxXSwgdmFsdWVbMl0pO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLy8gRmxvYXQzMkFycmF5KDQpIG9yIEpTIEFycnJheVxuICAgICAgICBjYXNlICc0Zic6XG4gICAgICAgICAgICBnbC51bmlmb3JtNGYobG9jYXRpb24sIHZhbHVlWzBdLCB2YWx1ZVsxXSwgdmFsdWVbMl0sIHZhbHVlWzNdKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIC8vIGEgMkQgUG9pbnQgb2JqZWN0XG4gICAgICAgIGNhc2UgJ3YyJzpcbiAgICAgICAgICAgIGdsLnVuaWZvcm0yZihsb2NhdGlvbiwgdmFsdWUueCwgdmFsdWUueSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAvLyBhIDNEIFBvaW50IG9iamVjdFxuICAgICAgICBjYXNlICd2Myc6XG4gICAgICAgICAgICBnbC51bmlmb3JtM2YobG9jYXRpb24sIHZhbHVlLngsIHZhbHVlLnksIHZhbHVlLnopO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLy8gYSA0RCBQb2ludCBvYmplY3RcbiAgICAgICAgY2FzZSAndjQnOlxuICAgICAgICAgICAgZ2wudW5pZm9ybTRmKGxvY2F0aW9uLCB2YWx1ZS54LCB2YWx1ZS55LCB2YWx1ZS56LCB2YWx1ZS53KTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIC8vIEludDMyQXJyYXkgb3IgSlMgQXJyYXlcbiAgICAgICAgY2FzZSAnMWl2JzpcbiAgICAgICAgICAgIGdsLnVuaWZvcm0xaXYobG9jYXRpb24sIHZhbHVlKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIC8vIEludDMyQXJyYXkgb3IgSlMgQXJyYXlcbiAgICAgICAgY2FzZSAnMml2JzpcbiAgICAgICAgICAgIGdsLnVuaWZvcm0yaXYobG9jYXRpb24sIHZhbHVlKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIC8vIEludDMyQXJyYXkgb3IgSlMgQXJyYXlcbiAgICAgICAgY2FzZSAnM2l2JzpcbiAgICAgICAgICAgIGdsLnVuaWZvcm0zaXYobG9jYXRpb24sIHZhbHVlKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIC8vIEludDMyQXJyYXkgb3IgSlMgQXJyYXlcbiAgICAgICAgY2FzZSAnNGl2JzpcbiAgICAgICAgICAgIGdsLnVuaWZvcm00aXYobG9jYXRpb24sIHZhbHVlKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIC8vIEZsb2F0MzJBcnJheSBvciBKUyBBcnJheVxuICAgICAgICBjYXNlICcxZnYnOlxuICAgICAgICAgICAgZ2wudW5pZm9ybTFmdihsb2NhdGlvbiwgdmFsdWUpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLy8gRmxvYXQzMkFycmF5IG9yIEpTIEFycmF5XG4gICAgICAgIGNhc2UgJzJmdic6XG4gICAgICAgICAgICBnbC51bmlmb3JtMmZ2KGxvY2F0aW9uLCB2YWx1ZSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAvLyBGbG9hdDMyQXJyYXkgb3IgSlMgQXJyYXlcbiAgICAgICAgY2FzZSAnM2Z2JzpcbiAgICAgICAgICAgIGdsLnVuaWZvcm0zZnYobG9jYXRpb24sIHZhbHVlKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIC8vIEZsb2F0MzJBcnJheSBvciBKUyBBcnJheVxuICAgICAgICBjYXNlICc0ZnYnOlxuICAgICAgICAgICAgZ2wudW5pZm9ybTRmdihsb2NhdGlvbiwgdmFsdWUpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLy8gRmxvYXQzMkFycmF5IG9yIEpTIEFycmF5XG4gICAgICAgIGNhc2UgJ20yJzpcbiAgICAgICAgY2FzZSAnbWF0Mic6XG4gICAgICAgIGNhc2UgJ01hdHJpeDJmdic6XG4gICAgICAgICAgICBnbC51bmlmb3JtTWF0cml4MmZ2KGxvY2F0aW9uLCB1bmlmb3JtLnRyYW5zcG9zZSwgdmFsdWUpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLy8gRmxvYXQzMkFycmF5IG9yIEpTIEFycmF5XG4gICAgICAgIGNhc2UgJ20zJzpcbiAgICAgICAgY2FzZSAnbWF0Myc6XG4gICAgICAgIGNhc2UgJ01hdHJpeDNmdic6XG5cbiAgICAgICAgICAgIGdsLnVuaWZvcm1NYXRyaXgzZnYobG9jYXRpb24sIHVuaWZvcm0udHJhbnNwb3NlLCB2YWx1ZSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAvLyBGbG9hdDMyQXJyYXkgb3IgSlMgQXJyYXlcbiAgICAgICAgY2FzZSAnbTQnOlxuICAgICAgICBjYXNlICdtYXQ0JzpcbiAgICAgICAgY2FzZSAnTWF0cml4NGZ2JzpcbiAgICAgICAgICAgIGdsLnVuaWZvcm1NYXRyaXg0ZnYobG9jYXRpb24sIHVuaWZvcm0udHJhbnNwb3NlLCB2YWx1ZSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAvLyBhIENvbG9yIFZhbHVlXG4gICAgICAgIGNhc2UgJ2MnOlxuICAgICAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdmFsdWUgPSB1dGlscy5oZXgycmdiKHZhbHVlKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZ2wudW5pZm9ybTNmKGxvY2F0aW9uLCB2YWx1ZVswXSwgdmFsdWVbMV0sIHZhbHVlWzJdKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIC8vIGZsYXQgYXJyYXkgb2YgaW50ZWdlcnMgKEpTIG9yIHR5cGVkIGFycmF5KVxuICAgICAgICBjYXNlICdpdjEnOlxuICAgICAgICAgICAgZ2wudW5pZm9ybTFpdihsb2NhdGlvbiwgdmFsdWUpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLy8gZmxhdCBhcnJheSBvZiBpbnRlZ2VycyB3aXRoIDMgeCBOIHNpemUgKEpTIG9yIHR5cGVkIGFycmF5KVxuICAgICAgICBjYXNlICdpdic6XG4gICAgICAgICAgICBnbC51bmlmb3JtM2l2KGxvY2F0aW9uLCB2YWx1ZSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAvLyBmbGF0IGFycmF5IG9mIGZsb2F0cyAoSlMgb3IgdHlwZWQgYXJyYXkpXG4gICAgICAgIGNhc2UgJ2Z2MSc6XG4gICAgICAgICAgICBnbC51bmlmb3JtMWZ2KGxvY2F0aW9uLCB2YWx1ZSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAvLyBmbGF0IGFycmF5IG9mIGZsb2F0cyB3aXRoIDMgeCBOIHNpemUgKEpTIG9yIHR5cGVkIGFycmF5KVxuICAgICAgICBjYXNlICdmdic6XG4gICAgICAgICAgICBnbC51bmlmb3JtM2Z2KGxvY2F0aW9uLCB2YWx1ZSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAvLyBhcnJheSBvZiAyRCBQb2ludCBvYmplY3RzXG4gICAgICAgIGNhc2UgJ3Yydic6XG4gICAgICAgICAgICBpZiAoIXVuaWZvcm0uX2FycmF5KVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHVuaWZvcm0uX2FycmF5ID0gbmV3IEZsb2F0MzJBcnJheSgyICogdmFsdWUubGVuZ3RoKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZm9yIChpID0gMCwgaWwgPSB2YWx1ZS5sZW5ndGg7IGkgPCBpbDsgKytpKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHVuaWZvcm0uX2FycmF5W2kgKiAyXSAgICAgICA9IHZhbHVlW2ldLng7XG4gICAgICAgICAgICAgICAgdW5pZm9ybS5fYXJyYXlbaSAqIDIgKyAxXSAgID0gdmFsdWVbaV0ueTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZ2wudW5pZm9ybTJmdihsb2NhdGlvbiwgdW5pZm9ybS5fYXJyYXkpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLy8gYXJyYXkgb2YgM0QgUG9pbnQgb2JqZWN0c1xuICAgICAgICBjYXNlICd2M3YnOlxuICAgICAgICAgICAgaWYgKCF1bmlmb3JtLl9hcnJheSlcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB1bmlmb3JtLl9hcnJheSA9IG5ldyBGbG9hdDMyQXJyYXkoMyAqIHZhbHVlLmxlbmd0aCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGZvciAoaSA9IDAsIGlsID0gdmFsdWUubGVuZ3RoOyBpIDwgaWw7ICsraSlcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB1bmlmb3JtLl9hcnJheVtpICogM10gICAgICAgPSB2YWx1ZVtpXS54O1xuICAgICAgICAgICAgICAgIHVuaWZvcm0uX2FycmF5W2kgKiAzICsgMV0gICA9IHZhbHVlW2ldLnk7XG4gICAgICAgICAgICAgICAgdW5pZm9ybS5fYXJyYXlbaSAqIDMgKyAyXSAgID0gdmFsdWVbaV0uejtcblxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBnbC51bmlmb3JtM2Z2KGxvY2F0aW9uLCB1bmlmb3JtLl9hcnJheSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAvLyBhcnJheSBvZiA0RCBQb2ludCBvYmplY3RzXG4gICAgICAgIGNhc2UgJ3Y0dic6XG4gICAgICAgICAgICBpZiAoIXVuaWZvcm0uX2FycmF5KVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHVuaWZvcm0uX2FycmF5ID0gbmV3IEZsb2F0MzJBcnJheSg0ICogdmFsdWUubGVuZ3RoKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZm9yIChpID0gMCwgaWwgPSB2YWx1ZS5sZW5ndGg7IGkgPCBpbDsgKytpKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHVuaWZvcm0uX2FycmF5W2kgKiA0XSAgICAgICA9IHZhbHVlW2ldLng7XG4gICAgICAgICAgICAgICAgdW5pZm9ybS5fYXJyYXlbaSAqIDQgKyAxXSAgID0gdmFsdWVbaV0ueTtcbiAgICAgICAgICAgICAgICB1bmlmb3JtLl9hcnJheVtpICogNCArIDJdICAgPSB2YWx1ZVtpXS56O1xuICAgICAgICAgICAgICAgIHVuaWZvcm0uX2FycmF5W2kgKiA0ICsgM10gICA9IHZhbHVlW2ldLnc7XG5cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZ2wudW5pZm9ybTRmdihsb2NhdGlvbiwgdW5pZm9ybS5fYXJyYXkpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLy8gUElYSS5UZXh0dXJlXG4gICAgICAgIGNhc2UgJ3QnOlxuICAgICAgICBjYXNlICdzYW1wbGVyMkQnOlxuXG4gICAgICAgICAgICBpZiAoIXVuaWZvcm0udmFsdWUgfHwgIXVuaWZvcm0udmFsdWUuYmFzZVRleHR1cmUuaGFzTG9hZGVkKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBhY3RpdmF0ZSB0aGlzIHRleHR1cmVcbiAgICAgICAgICAgIGdsLmFjdGl2ZVRleHR1cmUoZ2xbJ1RFWFRVUkUnICsgdGhpcy50ZXh0dXJlQ291bnRdKTtcblxuICAgICAgICAgICAgdmFyIHRleHR1cmUgPSB1bmlmb3JtLnZhbHVlLmJhc2VUZXh0dXJlLl9nbFRleHR1cmVzW2dsLmlkXTtcblxuICAgICAgICAgICAgaWYgKCF0ZXh0dXJlKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHRoaXMuaW5pdFNhbXBsZXIyRCh1bmlmb3JtKTtcblxuICAgICAgICAgICAgICAgIC8vIHNldCB0aGUgdGV4dHVyIHRvIHRoZSBuZXdseSBjcmVhdGVkIG9uZS4uXG4gICAgICAgICAgICAgICAgdGV4dHVyZSA9IHVuaWZvcm0udmFsdWUuYmFzZVRleHR1cmUuX2dsVGV4dHVyZXNbZ2wuaWRdO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBiaW5kIHRoZSB0ZXh0dXJlXG4gICAgICAgICAgICBnbC5iaW5kVGV4dHVyZShnbC5URVhUVVJFXzJELCB0ZXh0dXJlKTtcblxuICAgICAgICAgICAgLy8gc2V0IHVuaWZvcm0gdG8gdGV4dHVyZSBpbmRleFxuICAgICAgICAgICAgZ2wudW5pZm9ybTFpKHVuaWZvcm0uX2xvY2F0aW9uLCB0aGlzLnRleHR1cmVDb3VudCk7XG5cbiAgICAgICAgICAgIC8vIGluY3JlbWVudCBuZXh0IHRleHR1cmUgaWRcbiAgICAgICAgICAgIHRoaXMudGV4dHVyZUNvdW50Kys7XG5cbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ1BpeGkuanMgU2hhZGVyIFdhcm5pbmc6IFVua25vd24gdW5pZm9ybSB0eXBlOiAnICsgdW5pZm9ybS50eXBlKTtcbiAgICB9XG59O1xuXG4vKipcbiAqIFVwZGF0ZXMgdGhlIHNoYWRlciB1bmlmb3JtIHZhbHVlcy5cbiAqXG4gKi9cblNoYWRlci5wcm90b3R5cGUuc3luY1VuaWZvcm1zID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLnRleHR1cmVDb3VudCA9IDE7XG5cbiAgICBmb3IgKHZhciBrZXkgaW4gdGhpcy51bmlmb3JtcylcbiAgICB7XG4gICAgICAgIHRoaXMuc3luY1VuaWZvcm0odGhpcy51bmlmb3Jtc1trZXldKTtcbiAgICB9XG59O1xuXG5cbi8qKlxuICogSW5pdGlhbGlzZXMgYSBTYW1wbGVyMkQgdW5pZm9ybSAod2hpY2ggbWF5IG9ubHkgYmUgYXZhaWxhYmxlIGxhdGVyIG9uIGFmdGVyIGluaXRVbmlmb3JtcyBvbmNlIHRoZSB0ZXh0dXJlIGhhcyBsb2FkZWQpXG4gKlxuICovXG5TaGFkZXIucHJvdG90eXBlLmluaXRTYW1wbGVyMkQgPSBmdW5jdGlvbiAodW5pZm9ybSlcbntcbiAgICB2YXIgZ2wgPSB0aGlzLmdsO1xuXG4gICAgdmFyIHRleHR1cmUgPSB1bmlmb3JtLnZhbHVlLmJhc2VUZXh0dXJlO1xuXG4gICAgaWYoIXRleHR1cmUuaGFzTG9hZGVkKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuXG5cbiAgICBpZiAodW5pZm9ybS50ZXh0dXJlRGF0YSlcbiAgICB7XG5cbiAgICAgICAgLy9UT0RPIG1vdmUgdGhpcy4uLlxuICAgICAgICB2YXIgZGF0YSA9IHVuaWZvcm0udGV4dHVyZURhdGE7XG5cbiAgICAgICAgdGV4dHVyZS5fZ2xUZXh0dXJlc1tnbC5pZF0gPSBnbC5jcmVhdGVUZXh0dXJlKCk7XG5cbiAgICAgICAgZ2wuYmluZFRleHR1cmUoZ2wuVEVYVFVSRV8yRCwgdGV4dHVyZS5fZ2xUZXh0dXJlc1tnbC5pZF0pO1xuXG4gICAgICAgIGdsLnBpeGVsU3RvcmVpKGdsLlVOUEFDS19QUkVNVUxUSVBMWV9BTFBIQV9XRUJHTCwgdGV4dHVyZS5wcmVtdWx0aXBsaWVkQWxwaGEpO1xuICAgICAgICAvLyBHTFRleHR1cmUgPSBtYWcgbGluZWFyLCBtaW4gbGluZWFyX21pcG1hcF9saW5lYXIsIHdyYXAgcmVwZWF0ICsgZ2wuZ2VuZXJhdGVNaXBtYXAoZ2wuVEVYVFVSRV8yRCk7XG4gICAgICAgIC8vIEdMVGV4dHVyZUxpbmVhciA9IG1hZy9taW4gbGluZWFyLCB3cmFwIGNsYW1wXG4gICAgICAgIC8vIEdMVGV4dHVyZU5lYXJlc3RSZXBlYXQgPSBtYWcvbWluIE5FQVJFU1QsIHdyYXAgcmVwZWF0XG4gICAgICAgIC8vIEdMVGV4dHVyZU5lYXJlc3QgPSBtYWcvbWluIG5lYXJlc3QsIHdyYXAgY2xhbXBcbiAgICAgICAgLy8gQXVkaW9UZXh0dXJlID0gd2hhdGV2ZXIgKyBsdW1pbmFuY2UgKyB3aWR0aCA1MTIsIGhlaWdodCAyLCBib3JkZXIgMFxuICAgICAgICAvLyBLZXlUZXh0dXJlID0gd2hhdGV2ZXIgKyBsdW1pbmFuY2UgKyB3aWR0aCAyNTYsIGhlaWdodCAyLCBib3JkZXIgMFxuXG4gICAgICAgIC8vICBtYWdGaWx0ZXIgY2FuIGJlOiBnbC5MSU5FQVIsIGdsLkxJTkVBUl9NSVBNQVBfTElORUFSIG9yIGdsLk5FQVJFU1RcbiAgICAgICAgLy8gIHdyYXBTL1QgY2FuIGJlOiBnbC5DTEFNUF9UT19FREdFIG9yIGdsLlJFUEVBVFxuXG4gICAgICAgIGdsLnRleEltYWdlMkQoZ2wuVEVYVFVSRV8yRCwgMCwgZGF0YS5sdW1pbmFuY2UgPyBnbC5MVU1JTkFOQ0UgOiBnbC5SR0JBLCBnbC5SR0JBLCBnbC5VTlNJR05FRF9CWVRFLCB0ZXh0dXJlLnNvdXJjZSk7XG5cbiAgICAgICAgZ2wudGV4UGFyYW1ldGVyaShnbC5URVhUVVJFXzJELCBnbC5URVhUVVJFX01BR19GSUxURVIsIGRhdGEubWFnRmlsdGVyID8gZGF0YS5tYWdGaWx0ZXIgOiBnbC5MSU5FQVIgKTtcbiAgICAgICAgZ2wudGV4UGFyYW1ldGVyaShnbC5URVhUVVJFXzJELCBnbC5URVhUVVJFX01JTl9GSUxURVIsIGRhdGEud3JhcFMgPyBkYXRhLndyYXBTIDogZ2wuQ0xBTVBfVE9fRURHRSApO1xuXG4gICAgICAgIGdsLnRleFBhcmFtZXRlcmkoZ2wuVEVYVFVSRV8yRCwgZ2wuVEVYVFVSRV9XUkFQX1QsIGRhdGEud3JhcFMgPyBkYXRhLndyYXBTIDogZ2wuQ0xBTVBfVE9fRURHRSk7XG4gICAgICAgIGdsLnRleFBhcmFtZXRlcmkoZ2wuVEVYVFVSRV8yRCwgZ2wuVEVYVFVSRV9XUkFQX1MsIGRhdGEud3JhcFQgPyBkYXRhLndyYXBUIDogZ2wuQ0xBTVBfVE9fRURHRSk7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHRoaXMuc2hhZGVyTWFuYWdlci5yZW5kZXJlci51cGRhdGVUZXh0dXJlKHRleHR1cmUpO1xuICAgIH1cbn07XG5cbi8qKlxuICogRGVzdHJveXMgdGhlIHNoYWRlci5cbiAqXG4gKi9cblNoYWRlci5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy5nbC5kZWxldGVQcm9ncmFtKHRoaXMucHJvZ3JhbSk7XG5cbiAgICB0aGlzLmdsID0gbnVsbDtcbiAgICB0aGlzLnVuaWZvcm1zID0gbnVsbDtcbiAgICB0aGlzLmF0dHJpYnV0ZXMgPSBudWxsO1xuXG4gICAgdGhpcy52ZXJ0ZXhTcmMgPSBudWxsO1xuICAgIHRoaXMuZnJhZ21lbnRTcmMgPSBudWxsO1xufTtcblxuU2hhZGVyLnByb3RvdHlwZS5fZ2xDb21waWxlID0gZnVuY3Rpb24gKHR5cGUsIHNyYylcbntcbiAgICB2YXIgc2hhZGVyID0gdGhpcy5nbC5jcmVhdGVTaGFkZXIodHlwZSk7XG5cbiAgICB0aGlzLmdsLnNoYWRlclNvdXJjZShzaGFkZXIsIHNyYyk7XG4gICAgdGhpcy5nbC5jb21waWxlU2hhZGVyKHNoYWRlcik7XG5cbiAgICBpZiAoIXRoaXMuZ2wuZ2V0U2hhZGVyUGFyYW1ldGVyKHNoYWRlciwgdGhpcy5nbC5DT01QSUxFX1NUQVRVUykpXG4gICAge1xuICAgICAgICBjb25zb2xlLmxvZyh0aGlzLmdsLmdldFNoYWRlckluZm9Mb2coc2hhZGVyKSk7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHJldHVybiBzaGFkZXI7XG59O1xuIiwidmFyIFNoYWRlciA9IHJlcXVpcmUoJy4vU2hhZGVyJyk7XG5cbi8qKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQGV4dGVuZHMgUElYSS5TaGFkZXJcbiAqIEBwYXJhbSBzaGFkZXJNYW5hZ2VyIHtQSVhJLlNoYWRlck1hbmFnZXJ9IFRoZSB3ZWJnbCBzaGFkZXIgbWFuYWdlciB0aGlzIHNoYWRlciB3b3JrcyBmb3IuXG4gKiBAcGFyYW0gW3ZlcnRleFNyY10ge3N0cmluZ30gVGhlIHNvdXJjZSBvZiB0aGUgdmVydGV4IHNoYWRlci5cbiAqIEBwYXJhbSBbZnJhZ21lbnRTcmNdIHtzdHJpbmd9IFRoZSBzb3VyY2Ugb2YgdGhlIGZyYWdtZW50IHNoYWRlci5cbiAqIEBwYXJhbSBbY3VzdG9tVW5pZm9ybXNdIHtvYmplY3R9IEN1c3RvbSB1bmlmb3JtcyB0byB1c2UgdG8gYXVnbWVudCB0aGUgYnVpbHQtaW4gb25lcy5cbiAqIEBwYXJhbSBbZnJhZ21lbnRTcmNdIHtzdHJpbmd9IFRoZSBzb3VyY2Ugb2YgdGhlIGZyYWdtZW50IHNoYWRlci5cbiAqL1xuZnVuY3Rpb24gVGV4dHVyZVNoYWRlcihzaGFkZXJNYW5hZ2VyLCB2ZXJ0ZXhTcmMsIGZyYWdtZW50U3JjLCBjdXN0b21Vbmlmb3JtcywgY3VzdG9tQXR0cmlidXRlcylcbntcbiAgICB2YXIgdW5pZm9ybXMgPSB7XG5cbiAgICAgICAgdVNhbXBsZXI6ICAgICAgICAgICB7IHR5cGU6ICdzYW1wbGVyMkQnLCB2YWx1ZTogMCB9LFxuICAgICAgICBwcm9qZWN0aW9uTWF0cml4OiAgIHsgdHlwZTogJ21hdDMnLCB2YWx1ZTogbmV3IEZsb2F0MzJBcnJheShbMSwgMCwgMCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsIDEsIDAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLCAwLCAxXSkgfVxuICAgIH07XG5cbiAgICBpZiAoY3VzdG9tVW5pZm9ybXMpXG4gICAge1xuICAgICAgICBmb3IgKHZhciB1IGluIGN1c3RvbVVuaWZvcm1zKVxuICAgICAgICB7XG4gICAgICAgICAgICB1bmlmb3Jtc1t1XSA9IGN1c3RvbVVuaWZvcm1zW3VdO1xuICAgICAgICB9XG4gICAgfVxuXG5cbiAgICB2YXIgYXR0cmlidXRlcyA9IHtcbiAgICAgICAgYVZlcnRleFBvc2l0aW9uOiAgICAwLFxuICAgICAgICBhVGV4dHVyZUNvb3JkOiAgICAgIDAsXG4gICAgICAgIGFDb2xvcjogICAgICAgICAgICAgMFxuICAgIH07XG5cbiAgICBpZiAoY3VzdG9tQXR0cmlidXRlcylcbiAgICB7XG4gICAgICAgIGZvciAodmFyIGEgaW4gY3VzdG9tQXR0cmlidXRlcylcbiAgICAgICAge1xuICAgICAgICAgICAgYXR0cmlidXRlc1thXSA9IGN1c3RvbUF0dHJpYnV0ZXNbYV07XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGUgdmVydGV4IHNoYWRlci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge3N0cmluZ31cbiAgICAgKi9cbiAgICB2ZXJ0ZXhTcmMgPSB2ZXJ0ZXhTcmMgfHwgVGV4dHVyZVNoYWRlci5kZWZhdWx0VmVydGV4U3JjO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGZyYWdtZW50IHNoYWRlci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge3N0cmluZ31cbiAgICAgKi9cbiAgICBmcmFnbWVudFNyYyA9IGZyYWdtZW50U3JjIHx8IFRleHR1cmVTaGFkZXIuZGVmYXVsdEZyYWdtZW50U3JjO1xuXG4gICAgU2hhZGVyLmNhbGwodGhpcywgc2hhZGVyTWFuYWdlciwgdmVydGV4U3JjLCBmcmFnbWVudFNyYywgdW5pZm9ybXMsIGF0dHJpYnV0ZXMpO1xufVxuXG4vLyBjb25zdHJ1Y3RvclxuVGV4dHVyZVNoYWRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFNoYWRlci5wcm90b3R5cGUpO1xuVGV4dHVyZVNoYWRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBUZXh0dXJlU2hhZGVyO1xubW9kdWxlLmV4cG9ydHMgPSBUZXh0dXJlU2hhZGVyO1xuXG4vKipcbiAqIFRoZSBkZWZhdWx0IHZlcnRleCBzaGFkZXIgc291cmNlXG4gKlxuICogQHN0YXRpY1xuICogQGNvbnN0YW50XG4gKi9cblRleHR1cmVTaGFkZXIuZGVmYXVsdFZlcnRleFNyYyA9IFtcbiAgICAncHJlY2lzaW9uIGxvd3AgZmxvYXQ7JyxcbiAgICAnYXR0cmlidXRlIHZlYzIgYVZlcnRleFBvc2l0aW9uOycsXG4gICAgJ2F0dHJpYnV0ZSB2ZWMyIGFUZXh0dXJlQ29vcmQ7JyxcbiAgICAnYXR0cmlidXRlIHZlYzQgYUNvbG9yOycsXG5cbiAgICAndW5pZm9ybSBtYXQzIHByb2plY3Rpb25NYXRyaXg7JyxcblxuICAgICd2YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDsnLFxuICAgICd2YXJ5aW5nIHZlYzQgdkNvbG9yOycsXG5cbiAgICAndm9pZCBtYWluKHZvaWQpeycsXG4gICAgJyAgIGdsX1Bvc2l0aW9uID0gdmVjNCgocHJvamVjdGlvbk1hdHJpeCAqIHZlYzMoYVZlcnRleFBvc2l0aW9uLCAxLjApKS54eSwgMC4wLCAxLjApOycsXG4gICAgJyAgIHZUZXh0dXJlQ29vcmQgPSBhVGV4dHVyZUNvb3JkOycsXG4gICAgJyAgIHZDb2xvciA9IHZlYzQoYUNvbG9yLnJnYiAqIGFDb2xvci5hLCBhQ29sb3IuYSk7JyxcbiAgICAnfSdcbl0uam9pbignXFxuJyk7XG5cbi8qKlxuICogVGhlIGRlZmF1bHQgZnJhZ21lbnQgc2hhZGVyIHNvdXJjZVxuICpcbiAqIEBzdGF0aWNcbiAqIEBjb25zdGFudFxuICovXG5UZXh0dXJlU2hhZGVyLmRlZmF1bHRGcmFnbWVudFNyYyA9IFtcbiAgICAncHJlY2lzaW9uIGxvd3AgZmxvYXQ7JyxcblxuICAgICd2YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDsnLFxuICAgICd2YXJ5aW5nIHZlYzQgdkNvbG9yOycsXG5cbiAgICAndW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXI7JyxcblxuICAgICd2b2lkIG1haW4odm9pZCl7JyxcbiAgICAnICAgZ2xfRnJhZ0NvbG9yID0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2VGV4dHVyZUNvb3JkKSAqIHZDb2xvciA7JyxcbiAgICAnfSdcbl0uam9pbignXFxuJyk7XG4iLCJ2YXIgU2hhZGVyID0gcmVxdWlyZSgncGl4aS1nbC1jb3JlJykuR0xTaGFkZXI7XG5cbi8qKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQGV4dGVuZHMgUElYSS5TaGFkZXJcbiAqIEBwYXJhbSBzaGFkZXJNYW5hZ2VyIHtQSVhJLlNoYWRlck1hbmFnZXJ9IFRoZSB3ZWJnbCBzaGFkZXIgbWFuYWdlciB0aGlzIHNoYWRlciB3b3JrcyBmb3IuXG4gKiBAcGFyYW0gW3ZlcnRleFNyY10ge3N0cmluZ30gVGhlIHNvdXJjZSBvZiB0aGUgdmVydGV4IHNoYWRlci5cbiAqIEBwYXJhbSBbZnJhZ21lbnRTcmNdIHtzdHJpbmd9IFRoZSBzb3VyY2Ugb2YgdGhlIGZyYWdtZW50IHNoYWRlci5cbiAqIEBwYXJhbSBbY3VzdG9tVW5pZm9ybXNdIHtvYmplY3R9IEN1c3RvbSB1bmlmb3JtcyB0byB1c2UgdG8gYXVnbWVudCB0aGUgYnVpbHQtaW4gb25lcy5cbiAqIEBwYXJhbSBbZnJhZ21lbnRTcmNdIHtzdHJpbmd9IFRoZSBzb3VyY2Ugb2YgdGhlIGZyYWdtZW50IHNoYWRlci5cbiAqL1xuZnVuY3Rpb24gVGV4dHVyZVNoYWRlcihnbClcbntcbiAgICAvKipcbiAgICAgKiBUaGUgdmVydGV4IHNoYWRlci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge3N0cmluZ31cbiAgICAgKi9cbiAgICB2ZXJ0ZXhTcmMgPSBUZXh0dXJlU2hhZGVyLmRlZmF1bHRWZXJ0ZXhTcmM7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgZnJhZ21lbnQgc2hhZGVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7c3RyaW5nfVxuICAgICAqL1xuICAgIGZyYWdtZW50U3JjID0gVGV4dHVyZVNoYWRlci5kZWZhdWx0RnJhZ21lbnRTcmM7XG5cbiAgICBTaGFkZXIuY2FsbCh0aGlzLCBnbCwgdmVydGV4U3JjLCBmcmFnbWVudFNyYyk7Ly8sIHVuaWZvcm1zLCBhdHRyaWJ1dGVzKTtcblxufVxuXG4vLyBjb25zdHJ1Y3RvclxuVGV4dHVyZVNoYWRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFNoYWRlci5wcm90b3R5cGUpO1xuVGV4dHVyZVNoYWRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBUZXh0dXJlU2hhZGVyO1xubW9kdWxlLmV4cG9ydHMgPSBUZXh0dXJlU2hhZGVyO1xuXG4vKipcbiAqIFRoZSBkZWZhdWx0IHZlcnRleCBzaGFkZXIgc291cmNlXG4gKlxuICogQHN0YXRpY1xuICogQGNvbnN0YW50XG4gKi9cblRleHR1cmVTaGFkZXIuZGVmYXVsdFZlcnRleFNyYyA9IFtcbiAgICAncHJlY2lzaW9uIGxvd3AgZmxvYXQ7JyxcbiAgICAnYXR0cmlidXRlIHZlYzIgYVZlcnRleFBvc2l0aW9uOycsXG4gICAgJ2F0dHJpYnV0ZSB2ZWMyIGFUZXh0dXJlQ29vcmQ7JyxcbiAgICAnYXR0cmlidXRlIHZlYzQgYUNvbG9yOycsXG5cbiAgICAndW5pZm9ybSBtYXQzIHByb2plY3Rpb25NYXRyaXg7JyxcblxuICAgICd2YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDsnLFxuICAgICd2YXJ5aW5nIHZlYzQgdkNvbG9yOycsXG5cbiAgICAndm9pZCBtYWluKHZvaWQpeycsXG4gICAgJyAgIGdsX1Bvc2l0aW9uID0gdmVjNCgocHJvamVjdGlvbk1hdHJpeCAqIHZlYzMoYVZlcnRleFBvc2l0aW9uLCAxLjApKS54eSwgMC4wLCAxLjApOycsXG4gICAgJyAgIHZUZXh0dXJlQ29vcmQgPSBhVGV4dHVyZUNvb3JkOycsXG4gICAgJyAgIHZDb2xvciA9IHZlYzQoYUNvbG9yLnJnYiAqIGFDb2xvci5hLCBhQ29sb3IuYSk7JyxcbiAgICAnfSdcbl0uam9pbignXFxuJyk7XG5cbi8qKlxuICogVGhlIGRlZmF1bHQgZnJhZ21lbnQgc2hhZGVyIHNvdXJjZVxuICpcbiAqIEBzdGF0aWNcbiAqIEBjb25zdGFudFxuICovXG5UZXh0dXJlU2hhZGVyLmRlZmF1bHRGcmFnbWVudFNyYyA9IFtcbiAgICAncHJlY2lzaW9uIGxvd3AgZmxvYXQ7JyxcblxuICAgICd2YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDsnLFxuICAgICd2YXJ5aW5nIHZlYzQgdkNvbG9yOycsXG5cbiAgICAndW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXI7JyxcblxuICAgICd2b2lkIG1haW4odm9pZCl7JyxcbiAgICAnICAgZ2xfRnJhZ0NvbG9yID0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2VGV4dHVyZUNvb3JkKSAqIHZDb2xvciA7JyxcbiAgICAnfSdcbl0uam9pbignXFxuJyk7XG4iLCJ2YXIgV2ViR0xNYW5hZ2VyID0gcmVxdWlyZSgnLi4vbWFuYWdlcnMvV2ViR0xNYW5hZ2VyJyk7XG5cbi8qKlxuICogQmFzZSBmb3IgYSBjb21tb24gb2JqZWN0IHJlbmRlcmVyIHRoYXQgY2FuIGJlIHVzZWQgYXMgYSBzeXN0ZW0gcmVuZGVyZXIgcGx1Z2luLlxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5XZWJHTE1hbmFnZXJcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcn0gVGhlIHJlbmRlcmVyIHRoaXMgb2JqZWN0IHJlbmRlcmVyIHdvcmtzIGZvci5cbiAqL1xuZnVuY3Rpb24gT2JqZWN0UmVuZGVyZXIocmVuZGVyZXIpXG57XG4gICAgV2ViR0xNYW5hZ2VyLmNhbGwodGhpcywgcmVuZGVyZXIpO1xufVxuXG5cbk9iamVjdFJlbmRlcmVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoV2ViR0xNYW5hZ2VyLnByb3RvdHlwZSk7XG5PYmplY3RSZW5kZXJlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBPYmplY3RSZW5kZXJlcjtcbm1vZHVsZS5leHBvcnRzID0gT2JqZWN0UmVuZGVyZXI7XG5cbi8qKlxuICogU3RhcnRzIHRoZSByZW5kZXJlciBhbmQgc2V0cyB0aGUgc2hhZGVyXG4gKlxuICovXG5PYmplY3RSZW5kZXJlci5wcm90b3R5cGUuc3RhcnQgPSBmdW5jdGlvbiAoKVxue1xuICAgIC8vIHNldCB0aGUgc2hhZGVyLi5cbn07XG5cbi8qKlxuICogU3RvcHMgdGhlIHJlbmRlcmVyXG4gKlxuICovXG5PYmplY3RSZW5kZXJlci5wcm90b3R5cGUuc3RvcCA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy5mbHVzaCgpO1xufTtcblxuLyoqXG4gKiBmbHVzaGVzXG4gKlxuICovXG5PYmplY3RSZW5kZXJlci5wcm90b3R5cGUuZmx1c2ggPSBmdW5jdGlvbiAoKVxue1xuICAgIC8vIGZsdXNoIVxufTtcblxuLyoqXG4gKiBSZW5kZXJzIGFuIG9iamVjdFxuICpcbiAqIEBwYXJhbSBvYmplY3Qge1BJWEkuRGlzcGxheU9iamVjdH0gVGhlIG9iamVjdCB0byByZW5kZXIuXG4gKi9cbk9iamVjdFJlbmRlcmVyLnByb3RvdHlwZS5yZW5kZXIgPSBmdW5jdGlvbiAob2JqZWN0KSAvLyBqc2hpbnQgdW51c2VkOmZhbHNlXG57XG4gICAgLy8gcmVuZGVyIHRoZSBvYmplY3Rcbn07XG4iLCIvKipcbiAqIEhlbHBlciBjbGFzcyB0byBjcmVhdGUgYSBxdWFkXG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIGdsIHtXZWJHTFJlbmRlcmluZ0NvbnRleHR9IFRoZSBnbCBjb250ZXh0IGZvciB0aGlzIHF1YWQgdG8gdXNlLlxuICovXG5mdW5jdGlvbiBRdWFkKGdsKVxue1xuICAgIC8qXG4gICAgICogdGhlIGN1cnJlbnQgV2ViR0wgZHJhd2luZyBjb250ZXh0XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtXZWJHTFJlbmRlcmluZ0NvbnRleHR9XG4gICAgICovXG4gICAgdGhpcy5nbCA9IGdsO1xuXG4vLyAgICB0aGlzLnRleHR1cmVzID0gbmV3IFRleHR1cmVVdnMoKTtcblxuICAgIC8qKlxuICAgICAqIEFuIGFycmF5IG9mIHZlcnRpY2VzXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtGbG9hdDMyQXJyYXl9XG4gICAgICovXG4gICAgdGhpcy52ZXJ0aWNlcyA9IG5ldyBGbG9hdDMyQXJyYXkoW1xuICAgICAgICAwLDAsXG4gICAgICAgIDIwMCwwLFxuICAgICAgICAyMDAsMjAwLFxuICAgICAgICAwLDIwMFxuICAgIF0pO1xuXG4gICAgLyoqXG4gICAgICogVGhlIFV2cyBvZiB0aGUgcXVhZFxuICAgICAqXG4gICAgICogQG1lbWJlciB7RmxvYXQzMkFycmF5fVxuICAgICAqL1xuICAgIHRoaXMudXZzID0gbmV3IEZsb2F0MzJBcnJheShbXG4gICAgICAgIDAsMCxcbiAgICAgICAgMSwwLFxuICAgICAgICAxLDEsXG4gICAgICAgIDAsMVxuICAgIF0pO1xuXG4vLyAgICB2YXIgd2hpdGUgPSAoMHhGRkZGRkYgPj4gMTYpICsgKDB4RkZGRkZGICYgMHhmZjAwKSArICgoMHhGRkZGRkYgJiAweGZmKSA8PCAxNikgKyAoMSAqIDI1NSA8PCAyNCk7XG4gICAgLy9UT0RPIGNvbnZlcnQgdGhpcyB0byBhIDMyIHVuc2lnbmVkIGludCBhcnJheVxuICAgIC8qKlxuICAgICAqIFRoZSBjb2xvciBjb21wb25lbnRzIG9mIHRoZSB0cmlhbmdsZXNcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge0Zsb2F0MzJBcnJheX1cbiAgICAgKi9cbiAgICB0aGlzLmNvbG9ycyA9IG5ldyBGbG9hdDMyQXJyYXkoW1xuICAgICAgICAxLDEsMSwxLFxuICAgICAgICAxLDEsMSwxLFxuICAgICAgICAxLDEsMSwxLFxuICAgICAgICAxLDEsMSwxXG4gICAgXSk7XG5cbiAgICAvKlxuICAgICAqIEBtZW1iZXIge1VpbnQxNkFycmF5fSBBbiBhcnJheSBjb250YWluaW5nIHRoZSBpbmRpY2VzIG9mIHRoZSB2ZXJ0aWNlc1xuICAgICAqL1xuICAgIHRoaXMuaW5kaWNlcyA9IG5ldyBVaW50MTZBcnJheShbXG4gICAgICAgIDAsIDEsIDIsIDAsIDMsIDJcbiAgICBdKTtcblxuICAgIC8qXG4gICAgICogQG1lbWJlciB7V2ViR0xCdWZmZXJ9IFRoZSB2ZXJ0ZXggYnVmZmVyXG4gICAgICovXG4gICAgdGhpcy52ZXJ0ZXhCdWZmZXIgPSBnbC5jcmVhdGVCdWZmZXIoKTtcblxuICAgIC8qXG4gICAgICogQG1lbWJlciB7V2ViR0xCdWZmZXJ9IFRoZSBpbmRleCBidWZmZXJcbiAgICAgKi9cbiAgICB0aGlzLmluZGV4QnVmZmVyID0gZ2wuY3JlYXRlQnVmZmVyKCk7XG5cbiAgICBnbC5iaW5kQnVmZmVyKGdsLkFSUkFZX0JVRkZFUiwgdGhpcy52ZXJ0ZXhCdWZmZXIpO1xuICAgIGdsLmJ1ZmZlckRhdGEoZ2wuQVJSQVlfQlVGRkVSLCAoOCArIDggKyAxNikgKiA0LCBnbC5EWU5BTUlDX0RSQVcpO1xuXG4gICAgZ2wuYmluZEJ1ZmZlcihnbC5FTEVNRU5UX0FSUkFZX0JVRkZFUiwgdGhpcy5pbmRleEJ1ZmZlcik7XG4gICAgZ2wuYnVmZmVyRGF0YShnbC5FTEVNRU5UX0FSUkFZX0JVRkZFUiwgdGhpcy5pbmRpY2VzLCBnbC5TVEFUSUNfRFJBVyk7XG5cbiAgICB0aGlzLnVwbG9hZCgpO1xufVxuXG5RdWFkLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFF1YWQ7XG5cbi8qKlxuICogTWFwcyB0d28gUmVjdGFuZ2xlIHRvIHRoZSBxdWFkXG4gKiBAcGFyYW0gcmVjdCB7UElYSS5SZWN0YW5nbGV9IHRoZSBmaXJzdCByZWN0YW5nbGVcbiAqIEBwYXJhbSByZWN0MiB7UElYSS5SZWN0YW5nbGV9IHRoZSBzZWNvbmQgcmVjdGFuZ2xlXG4gKi9cblF1YWQucHJvdG90eXBlLm1hcCA9IGZ1bmN0aW9uKHJlY3QsIHJlY3QyKVxue1xuICAgIHZhciB4ID0gMDsgLy9yZWN0Mi54IC8gcmVjdC53aWR0aDtcbiAgICB2YXIgeSA9IDA7IC8vcmVjdDIueSAvIHJlY3QuaGVpZ2h0O1xuXG4gICAgdGhpcy51dnNbMF0gPSB4O1xuICAgIHRoaXMudXZzWzFdID0geTtcblxuICAgIHRoaXMudXZzWzJdID0geCArIHJlY3QyLndpZHRoIC8gcmVjdC53aWR0aDtcbiAgICB0aGlzLnV2c1szXSA9IHk7XG5cbiAgICB0aGlzLnV2c1s0XSA9IHggKyByZWN0Mi53aWR0aCAvIHJlY3Qud2lkdGg7XG4gICAgdGhpcy51dnNbNV0gPSB5ICsgcmVjdDIuaGVpZ2h0IC8gcmVjdC5oZWlnaHQ7XG5cbiAgICB0aGlzLnV2c1s2XSA9IHg7XG4gICAgdGhpcy51dnNbN10gPSB5ICsgcmVjdDIuaGVpZ2h0IC8gcmVjdC5oZWlnaHQ7XG5cbiAgICAvLy8gLS0tLS1cbiAgICB4ID0gcmVjdDIueDtcbiAgICB5ID0gcmVjdDIueTtcblxuICAgIHRoaXMudmVydGljZXNbMF0gPSB4O1xuICAgIHRoaXMudmVydGljZXNbMV0gPSB5O1xuXG4gICAgdGhpcy52ZXJ0aWNlc1syXSA9IHggKyByZWN0Mi53aWR0aDtcbiAgICB0aGlzLnZlcnRpY2VzWzNdID0geTtcblxuICAgIHRoaXMudmVydGljZXNbNF0gPSB4ICsgcmVjdDIud2lkdGg7XG4gICAgdGhpcy52ZXJ0aWNlc1s1XSA9IHkgKyByZWN0Mi5oZWlnaHQ7XG5cbiAgICB0aGlzLnZlcnRpY2VzWzZdID0geDtcbiAgICB0aGlzLnZlcnRpY2VzWzddID0geSArIHJlY3QyLmhlaWdodDtcblxuICAgIHRoaXMudXBsb2FkKCk7XG59O1xuXG4vKipcbiAqIEJpbmRzIHRoZSBidWZmZXIgYW5kIHVwbG9hZHMgdGhlIGRhdGFcbiAqL1xuUXVhZC5wcm90b3R5cGUudXBsb2FkID0gZnVuY3Rpb24oKVxue1xuICAgIHZhciBnbCA9IHRoaXMuZ2w7XG5cbiAgICAvLyBUT0RPIGNvdWxkIHByb2JhYmx5IGJlIHB1c2hlZCBpbnRvIG9uZSB1cGxvYWQhXG4gICAgZ2wuYmluZEJ1ZmZlciggZ2wuQVJSQVlfQlVGRkVSLCB0aGlzLnZlcnRleEJ1ZmZlciApO1xuXG4gICAgZ2wuYnVmZmVyU3ViRGF0YShnbC5BUlJBWV9CVUZGRVIsIDAsIHRoaXMudmVydGljZXMpO1xuXG4gICAgZ2wuYnVmZmVyU3ViRGF0YShnbC5BUlJBWV9CVUZGRVIsIDggKiA0LCB0aGlzLnV2cyk7XG5cbiAgICBnbC5idWZmZXJTdWJEYXRhKGdsLkFSUkFZX0JVRkZFUiwgKDggKyA4KSAqIDQsIHRoaXMuY29sb3JzKTtcbn07XG5cblF1YWQucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbigpXG57XG4gICAgdmFyIGdsID0gdGhpcy5nbDtcbiAgICBcbiAgICAgZ2wuZGVsZXRlQnVmZmVyKHRoaXMudmVydGV4QnVmZmVyKTtcbiAgICAgZ2wuZGVsZXRlQnVmZmVyKHRoaXMuaW5kZXhCdWZmZXIpO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBRdWFkO1xuXG5cbiIsInZhciBtYXRoID0gcmVxdWlyZSgnLi4vLi4vLi4vbWF0aCcpLFxuICAgIHV0aWxzID0gcmVxdWlyZSgnLi4vLi4vLi4vdXRpbHMnKSxcbiAgICBDT05TVCA9IHJlcXVpcmUoJy4uLy4uLy4uL2NvbnN0JyksXG4gICAgICAgIFxuICAgIEdMVGV4dHVyZSA9IHJlcXVpcmUoJ3BpeGktZ2wtY29yZScpLkdMVGV4dHVyZSxcbiAgICBHTEZyYW1lYnVmZmVyID0gcmVxdWlyZSgncGl4aS1nbC1jb3JlJykuR0xGcmFtZWJ1ZmZlcixcbiAgICBcbiAgICBTdGVuY2lsTWFza1N0YWNrID0gcmVxdWlyZSgnLi9TdGVuY2lsTWFza1N0YWNrJyk7XG5cbi8qKlxuICogQGF1dGhvciBNYXQgR3JvdmVzIGh0dHA6Ly9tYXRncm92ZXMuY29tLyBARG9vcm1hdDIzXG4gKi9cblxuLyoqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gZ2wge1dlYkdMUmVuZGVyaW5nQ29udGV4dH0gdGhlIGN1cnJlbnQgV2ViR0wgZHJhd2luZyBjb250ZXh0XG4gKiBAcGFyYW0gd2lkdGgge251bWJlcn0gdGhlIGhvcml6b250YWwgcmFuZ2Ugb2YgdGhlIGZpbHRlclxuICogQHBhcmFtIGhlaWdodCB7bnVtYmVyfSB0aGUgdmVydGljYWwgcmFuZ2Ugb2YgdGhlIGZpbHRlclxuICogQHBhcmFtIHNjYWxlTW9kZSB7bnVtYmVyfSBTZWUge0BsaW5rIFBJWEkuU0NBTEVfTU9ERVN9IGZvciBwb3NzaWJsZSB2YWx1ZXNcbiAqIEBwYXJhbSByZXNvbHV0aW9uIHtudW1iZXJ9IHRoZSBjdXJyZW50IHJlc29sdXRpb25cbiAqIEBwYXJhbSByb290IHtib29sZWFufSBXaGV0aGVyIHRoaXMgb2JqZWN0IGlzIHRoZSByb290IGVsZW1lbnQgb3Igbm90XG4gKi9cbnZhciBSZW5kZXJUYXJnZXQgPSBmdW5jdGlvbihnbCwgd2lkdGgsIGhlaWdodCwgc2NhbGVNb2RlLCByZXNvbHV0aW9uLCByb290KVxue1xuICAgIC8vVE9ETyBSZXNvbHV0aW9uIGNvdWxkIGdvIGhlcmUgKCBlZyBsb3cgcmVzIGJsdXJzIClcblxuICAgIC8qKlxuICAgICAqIFRoZSBjdXJyZW50IFdlYkdMIGRyYXdpbmcgY29udGV4dC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1dlYkdMUmVuZGVyaW5nQ29udGV4dH1cbiAgICAgKi9cbiAgICB0aGlzLmdsID0gZ2w7XG5cbiAgICAvLyBuZXh0IHRpbWUgdG8gY3JlYXRlIGEgZnJhbWUgYnVmZmVyIGFuZCB0ZXh0dXJlXG5cbiAgICAvKipcbiAgICAgKiBBIGZyYW1lIGJ1ZmZlclxuICAgICAqXG4gICAgICogQG1lbWJlciB7V2ViR0xGcmFtZUJ1ZmZlcn1cbiAgICAgKi9cbiAgICB0aGlzLmZyYW1lQnVmZmVyID0gbnVsbDtcblxuICAgIC8qKlxuICAgICAqIFRoZSB0ZXh0dXJlXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlRleHR1cmV9XG4gICAgICovXG4gICAgdGhpcy50ZXh0dXJlID0gbnVsbDtcblxuICAgIHRoaXMuY2xlYXJDb2xvciA9IFswLCAwLCAwLCAwXTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBzaXplIG9mIHRoZSBvYmplY3QgYXMgYSByZWN0YW5nbGVcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuUmVjdGFuZ2xlfVxuICAgICAqL1xuICAgIHRoaXMuc2l6ZSA9IG5ldyBtYXRoLlJlY3RhbmdsZSgwLCAwLCAxLCAxKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBjdXJyZW50IHJlc29sdXRpb25cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLnJlc29sdXRpb24gPSByZXNvbHV0aW9uIHx8IENPTlNULlJFU09MVVRJT047XG5cbiAgICAvKipcbiAgICAgKiBUaGUgcHJvamVjdGlvbiBtYXRyaXhcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuTWF0cml4fVxuICAgICAqL1xuICAgIHRoaXMucHJvamVjdGlvbk1hdHJpeCA9IG5ldyBtYXRoLk1hdHJpeCgpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIG9iamVjdCdzIHRyYW5zZm9ybVxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5NYXRyaXh9XG4gICAgICovXG4gICAgdGhpcy50cmFuc2Zvcm0gPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGZyYW1lLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5SZWN0YW5nbGV9XG4gICAgICovXG4gICAgdGhpcy5mcmFtZSA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgc3RlbmNpbCBidWZmZXIgc3RvcmVzIG1hc2tpbmcgZGF0YSBmb3IgdGhlIHJlbmRlciB0YXJnZXRcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1dlYkdMUmVuZGVyQnVmZmVyfVxuICAgICAqL1xuICAgIHRoaXMuc3RlbmNpbEJ1ZmZlciA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgZGF0YSBzdHJ1Y3R1cmUgZm9yIHRoZSBzdGVuY2lsIG1hc2tzXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlN0ZW5jaWxNYXNrU3RhY2t9XG4gICAgICovXG4gICAgdGhpcy5zdGVuY2lsTWFza1N0YWNrID0gbmV3IFN0ZW5jaWxNYXNrU3RhY2soKTtcblxuICAgIC8qKlxuICAgICAqIFN0b3JlcyBmaWx0ZXIgZGF0YSBmb3IgdGhlIHJlbmRlciB0YXJnZXRcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge29iamVjdFtdfVxuICAgICAqL1xuICAgIHRoaXMuZmlsdGVyU3RhY2sgPSBbXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJlbmRlclRhcmdldDp0aGlzLFxuICAgICAgICAgICAgZmlsdGVyOltdLFxuICAgICAgICAgICAgYm91bmRzOnRoaXMuc2l6ZVxuICAgICAgICB9XG4gICAgXTtcblxuXG4gICAgLyoqXG4gICAgICogVGhlIHNjYWxlIG1vZGUuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgUElYSS5TQ0FMRV9NT0RFUy5ERUZBVUxUXG4gICAgICogQHNlZSBQSVhJLlNDQUxFX01PREVTXG4gICAgICovXG4gICAgdGhpcy5zY2FsZU1vZGUgPSBzY2FsZU1vZGUgfHwgQ09OU1QuU0NBTEVfTU9ERVMuREVGQVVMVDtcblxuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgdGhpcyBvYmplY3QgaXMgdGhlIHJvb3QgZWxlbWVudCBvciBub3RcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICovXG4gICAgdGhpcy5yb290ID0gcm9vdDtcblxuICAgIHRoaXMuZnJhbWVCdWZmZXIgPSBHTEZyYW1lYnVmZmVyLmNyZWF0ZVJHQkEoZ2wsIDEwMCwgMTAwKTtcbiAgICBpZih0aGlzLmZyYW1lQnVmZmVyKXRoaXMuZnJhbWVCdWZmZXIudW5iaW5kKCk7XG5cbiAgIC8vIHRoaXMuZnJhbWVCdWZmZXIgPSB7ZnJhbWVidWZmZXI6bnVsbCwgYmluZDpmdW5jdGlvbigpe30sIGNsZWFyOmZ1bmN0aW9uKCl7fSwgcmVzaXplOmZ1bmN0aW9uKCl7fX0vL25ldyBHTEZyYW1lYnVmZmVyLmNyZWF0ZVJHQkEoZ2wsIDEwMCwgMTAwKTtcblxuXG5cbiAgICBpZiAoIXRoaXMucm9vdClcbiAgICB7XG4gICAgICAgIC8qXG4gICAgICAgICAgICBBIGZyYW1lIGJ1ZmZlciBuZWVkcyBhIHRhcmdldCB0byByZW5kZXIgdG8uLlxuICAgICAgICAgICAgY3JlYXRlIGEgdGV4dHVyZSBhbmQgYmluZCBpdCBhdHRhY2ggaXQgdG8gdGhlIGZyYW1lYnVmZmVyLi5cbiAgICAgICAgICovXG4gICAgICAgIFxuICAgICAgICAvLyBjcmVhdGUgYSB0ZXh0dXJlIHRvIGJpbmQgYXR0YWNoIHRvIHRoZSBmcmFtZUJ1ZmZlci4uXG4gICAgICAgIHZhciB0ZXh0dXJlID0gbmV3IEdMVGV4dHVyZShnbCk7XG5cbiAgICAgICAgdGV4dHVyZS5lbmFibGVMaW5lYXJTY2FsaW5nKClcbiAgICAgICAgdGV4dHVyZS5lbmFibGVXcmFwQ2xhbXAoKVxuXG4gICAgICAgIHRoaXMuZnJhbWVCdWZmZXIuZW5hYmxlVGV4dHVyZSh0ZXh0dXJlKTtcblxuICAgICAgICAvLyBUT0RPIGNoYW5nZSFcbiAgICAgICAgLy8gdGhpcyBpcyB1c2VkIGJ5IHRoZSBiYXNlIHRleHR1cmVcbiAgICAgICAgdGhpcy50ZXh0dXJlID0gdGV4dHVyZS50ZXh0dXJlO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICAvLyBtYWtlIGl0IGEgbnVsbCBmcmFtZWJ1ZmZlci4uXG4gICAgICAgIHRoaXMuZnJhbWVCdWZmZXIuZnJhbWVidWZmZXIgPSBudWxsO1xuICAgIH1cblxuICAgIHRoaXMucmVzaXplKHdpZHRoLCBoZWlnaHQpO1xufTtcblxuUmVuZGVyVGFyZ2V0LnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFJlbmRlclRhcmdldDtcbm1vZHVsZS5leHBvcnRzID0gUmVuZGVyVGFyZ2V0O1xuXG4vKipcbiAqIENsZWFycyB0aGUgZmlsdGVyIHRleHR1cmUuXG4gKlxuICogQHBhcmFtIFtiaW5kPWZhbHNlXSB7Ym9vbGVhbn0gU2hvdWxkIHdlIGJpbmQgb3VyIGZyYW1lYnVmZmVyIGJlZm9yZSBjbGVhcmluZz9cbiAqL1xuUmVuZGVyVGFyZ2V0LnByb3RvdHlwZS5jbGVhciA9IGZ1bmN0aW9uKGNsZWFyQ29sb3IpXG57XG4gICAgdmFyIGNjID0gY2xlYXJDb2xvciB8fCB0aGlzLmNsZWFyQ29sb3JcbiAgICB0aGlzLmZyYW1lQnVmZmVyLmNsZWFyKGNjWzBdLGNjWzFdLGNjWzJdLGNjWzNdKS8vcixnLGIsYSk7XG59O1xuXG4vKipcbiAqIEJpbmRzIHRoZSBzdGVuY2lsIGJ1ZmZlci5cbiAqXG4gKi9cblJlbmRlclRhcmdldC5wcm90b3R5cGUuYXR0YWNoU3RlbmNpbEJ1ZmZlciA9IGZ1bmN0aW9uKClcbntcbiAgICAvL1RPRE8gY2hlY2sgaWYgc3RlbmNpbCBpcyBkb25lP1xuICAgIC8qKlxuICAgICAqIFRoZSBzdGVuY2lsIGJ1ZmZlciBpcyB1c2VkIGZvciBtYXNraW5nIGluIHBpeGlcbiAgICAgKiBsZXRzIGNyZWF0ZSBvbmUgYW5kIHRoZW4gYWRkIGF0dGFjaCBpdCB0byB0aGUgZnJhbWVidWZmZXIuLlxuICAgICAqL1xuICAgIGlmICghdGhpcy5yb290KVxuICAgIHtcbiAgICAgICAgdGhpcy5mcmFtZUJ1ZmZlci5lbmFibGVTdGVuY2lsKCk7XG4gICAgfVxufTtcblxuLyoqXG4gKiBCaW5kcyB0aGUgYnVmZmVycyBhbmQgaW5pdGlhbGlzZXMgdGhlIHZpZXdwb3J0LlxuICpcbiAqL1xuUmVuZGVyVGFyZ2V0LnByb3RvdHlwZS5hY3RpdmF0ZSA9IGZ1bmN0aW9uKClcbntcbiAgICAvL1RPT0QgcmVmYWN0b3IgdXNhZ2Ugb2YgZnJhbWUuLlxuICAgIHZhciBnbCA9IHRoaXMuZ2w7XG5cbiAgICB0aGlzLmZyYW1lQnVmZmVyLmJpbmQoKTtcblxuXG4gICAgdmFyIHByb2plY3Rpb25GcmFtZSA9IHRoaXMuZnJhbWUgfHwgdGhpcy5zaXplO1xuXG4gICAgLy8gVE9ETyBhZGQgYSBkaXJ0eSBmbGFnIHRvIHRoaXMgb2YgYSBzZXR0ZXIgZm9yIHRoZSBmcmFtZT9cbiAgICB0aGlzLmNhbGN1bGF0ZVByb2plY3Rpb24oIHByb2plY3Rpb25GcmFtZSApO1xuXG4gICAgaWYodGhpcy50cmFuc2Zvcm0pXG4gICAge1xuICAgICAgICB0aGlzLnByb2plY3Rpb25NYXRyaXguYXBwZW5kKHRoaXMudHJhbnNmb3JtKTtcbiAgICB9XG5cbiAgICBnbC52aWV3cG9ydCgwLDAsIHByb2plY3Rpb25GcmFtZS53aWR0aCAqIHRoaXMucmVzb2x1dGlvbiwgcHJvamVjdGlvbkZyYW1lLmhlaWdodCAqIHRoaXMucmVzb2x1dGlvbik7XG59O1xuXG4vKipcbiAqIFVwZGF0ZXMgdGhlIHByb2plY3Rpb24gbWF0cml4IGJhc2VkIG9uIGEgcHJvamVjdGlvbiBmcmFtZSAod2hpY2ggaXMgYSByZWN0YW5nbGUpXG4gKlxuICovXG5SZW5kZXJUYXJnZXQucHJvdG90eXBlLmNhbGN1bGF0ZVByb2plY3Rpb24gPSBmdW5jdGlvbiAocHJvamVjdGlvbkZyYW1lKVxue1xuICAgIHZhciBwbSA9IHRoaXMucHJvamVjdGlvbk1hdHJpeDtcblxuICAgIHBtLmlkZW50aXR5KCk7XG5cbiAgICBpZiAoIXRoaXMucm9vdClcbiAgICB7XG4gICAgICAgIHBtLmEgPSAxIC8gcHJvamVjdGlvbkZyYW1lLndpZHRoKjI7XG4gICAgICAgIHBtLmQgPSAxIC8gcHJvamVjdGlvbkZyYW1lLmhlaWdodCoyO1xuXG4gICAgICAgIHBtLnR4ID0gLTEgLSBwcm9qZWN0aW9uRnJhbWUueCAqIHBtLmE7XG4gICAgICAgIHBtLnR5ID0gLTEgLSBwcm9qZWN0aW9uRnJhbWUueSAqIHBtLmQ7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHBtLmEgPSAxIC8gcHJvamVjdGlvbkZyYW1lLndpZHRoKjI7XG4gICAgICAgIHBtLmQgPSAtMSAvIHByb2plY3Rpb25GcmFtZS5oZWlnaHQqMjtcblxuICAgICAgICBwbS50eCA9IC0xIC0gcHJvamVjdGlvbkZyYW1lLnggKiBwbS5hO1xuICAgICAgICBwbS50eSA9IDEgLSBwcm9qZWN0aW9uRnJhbWUueSAqIHBtLmQ7XG4gICAgfVxufTtcblxuLyoqXG4gKiBSZXNpemVzIHRoZSB0ZXh0dXJlIHRvIHRoZSBzcGVjaWZpZWQgd2lkdGggYW5kIGhlaWdodFxuICpcbiAqIEBwYXJhbSB3aWR0aCB7TnVtYmVyfSB0aGUgbmV3IHdpZHRoIG9mIHRoZSB0ZXh0dXJlXG4gKiBAcGFyYW0gaGVpZ2h0IHtOdW1iZXJ9IHRoZSBuZXcgaGVpZ2h0IG9mIHRoZSB0ZXh0dXJlXG4gKi9cblJlbmRlclRhcmdldC5wcm90b3R5cGUucmVzaXplID0gZnVuY3Rpb24gKHdpZHRoLCBoZWlnaHQpXG57XG4gICAgd2lkdGggPSB3aWR0aCB8IDA7XG4gICAgaGVpZ2h0ID0gaGVpZ2h0IHwgMDtcblxuICAgIGlmICh0aGlzLnNpemUud2lkdGggPT09IHdpZHRoICYmIHRoaXMuc2l6ZS5oZWlnaHQgPT09IGhlaWdodCkgXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5zaXplLndpZHRoID0gd2lkdGg7XG4gICAgdGhpcy5zaXplLmhlaWdodCA9IGhlaWdodDtcblxuICAgIHRoaXMuZnJhbWVCdWZmZXIucmVzaXplKHdpZHRoICogdGhpcy5yZXNvbHV0aW9uLCBoZWlnaHQgKiB0aGlzLnJlc29sdXRpb24pO1xuICAgIFxuICAgIHZhciBwcm9qZWN0aW9uRnJhbWUgPSB0aGlzLmZyYW1lIHx8IHRoaXMuc2l6ZTtcblxuICAgIHRoaXMuY2FsY3VsYXRlUHJvamVjdGlvbiggcHJvamVjdGlvbkZyYW1lICk7XG59O1xuXG4vKipcbiAqIERlc3Ryb3lzIHRoZSByZW5kZXIgdGFyZ2V0LlxuICpcbiAqL1xuUmVuZGVyVGFyZ2V0LnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKClcbntcbiAgICB2YXIgZ2wgPSB0aGlzLmdsO1xuICAgIFxuICAgIHRoaXMuZnJhbWVCdWZmZXIuZGVzdHJveSgpO1xuXG4gICAgdGhpcy5mcmFtZUJ1ZmZlciA9IG51bGw7XG4gICAgdGhpcy50ZXh0dXJlID0gbnVsbDtcbn07XG4iLCIvKipcbiAqIEdlbmVyaWMgTWFzayBTdGFjayBkYXRhIHN0cnVjdHVyZVxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICovXG5mdW5jdGlvbiBTdGVuY2lsTWFza1N0YWNrKClcbntcblx0LyoqXG4gICAgICogVGhlIGFjdHVhbCBzdGFja1xuICAgICAqXG4gICAgICogQG1lbWJlciB7YW55W119XG4gICAgICovXG4gICAgdGhpcy5zdGVuY2lsU3RhY2sgPSBbXTtcblxuICAgIC8qKlxuICAgICAqIFRPRE8gQGFsdmluXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqL1xuICAgIHRoaXMucmV2ZXJzZSA9IHRydWU7XG5cbiAgICAvKipcbiAgICAgKiBJbnRlcm5hbCBjb3VudFxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMuY291bnQgPSAwO1xufVxuXG5TdGVuY2lsTWFza1N0YWNrLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFN0ZW5jaWxNYXNrU3RhY2s7XG5tb2R1bGUuZXhwb3J0cyA9IFN0ZW5jaWxNYXNrU3RhY2s7XG4iLCJDT05TVCA9IHJlcXVpcmUoJy4uLy4uLy4uL2NvbnN0Jyk7XG5cbi8qKlxuICogTWFwcyBnbCBibGVuZCBjb21iaW5hdGlvbnMgdG8gV2ViR0xcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqL1xuZnVuY3Rpb24gbWFwV2ViR0xCbGVuZE1vZGVzVG9QaXhpKGdsLCBvYmplY3QpXG57XG4gICAgb2JqZWN0ID0gb2JqZWN0IHx8IHt9O1xuXG4gICAgLy9UT0RPIC0gcHJlbXVsdGlwbHkgYWxwaGEgd291bGQgYmUgZGlmZmVyZW50LlxuICAgIC8vYWRkIGEgYm9vbGVhbiBmb3IgdGhhdCFcbiAgICBvYmplY3RbQ09OU1QuQkxFTkRfTU9ERVMuTk9STUFMXSAgICAgICAgPSBbZ2wuT05FLCAgICAgICBnbC5PTkVfTUlOVVNfU1JDX0FMUEhBXTtcbiAgICBvYmplY3RbQ09OU1QuQkxFTkRfTU9ERVMuQUREXSAgICAgICAgICAgPSBbZ2wuU1JDX0FMUEhBLCBnbC5EU1RfQUxQSEFdO1xuICAgIG9iamVjdFtDT05TVC5CTEVORF9NT0RFUy5NVUxUSVBMWV0gICAgICA9IFtnbC5EU1RfQ09MT1IsIGdsLk9ORV9NSU5VU19TUkNfQUxQSEFdO1xuICAgIG9iamVjdFtDT05TVC5CTEVORF9NT0RFUy5TQ1JFRU5dICAgICAgICA9IFtnbC5TUkNfQUxQSEEsIGdsLk9ORV07XG4gICAgb2JqZWN0W0NPTlNULkJMRU5EX01PREVTLk9WRVJMQVldICAgICAgID0gW2dsLk9ORSwgICAgICAgZ2wuT05FX01JTlVTX1NSQ19BTFBIQV07XG4gICAgb2JqZWN0W0NPTlNULkJMRU5EX01PREVTLkRBUktFTl0gICAgICAgID0gW2dsLk9ORSwgICAgICAgZ2wuT05FX01JTlVTX1NSQ19BTFBIQV07XG4gICAgb2JqZWN0W0NPTlNULkJMRU5EX01PREVTLkxJR0hURU5dICAgICAgID0gW2dsLk9ORSwgICAgICAgZ2wuT05FX01JTlVTX1NSQ19BTFBIQV07XG4gICAgb2JqZWN0W0NPTlNULkJMRU5EX01PREVTLkNPTE9SX0RPREdFXSAgID0gW2dsLk9ORSwgICAgICAgZ2wuT05FX01JTlVTX1NSQ19BTFBIQV07XG4gICAgb2JqZWN0W0NPTlNULkJMRU5EX01PREVTLkNPTE9SX0JVUk5dICAgID0gW2dsLk9ORSwgICAgICAgZ2wuT05FX01JTlVTX1NSQ19BTFBIQV07XG4gICAgb2JqZWN0W0NPTlNULkJMRU5EX01PREVTLkhBUkRfTElHSFRdICAgID0gW2dsLk9ORSwgICAgICAgZ2wuT05FX01JTlVTX1NSQ19BTFBIQV07XG4gICAgb2JqZWN0W0NPTlNULkJMRU5EX01PREVTLlNPRlRfTElHSFRdICAgID0gW2dsLk9ORSwgICAgICAgZ2wuT05FX01JTlVTX1NSQ19BTFBIQV07XG4gICAgb2JqZWN0W0NPTlNULkJMRU5EX01PREVTLkRJRkZFUkVOQ0VdICAgID0gW2dsLk9ORSwgICAgICAgZ2wuT05FX01JTlVTX1NSQ19BTFBIQV07XG4gICAgb2JqZWN0W0NPTlNULkJMRU5EX01PREVTLkVYQ0xVU0lPTl0gICAgID0gW2dsLk9ORSwgICAgICAgZ2wuT05FX01JTlVTX1NSQ19BTFBIQV07XG4gICAgb2JqZWN0W0NPTlNULkJMRU5EX01PREVTLkhVRV0gICAgICAgICAgID0gW2dsLk9ORSwgICAgICAgZ2wuT05FX01JTlVTX1NSQ19BTFBIQV07XG4gICAgb2JqZWN0W0NPTlNULkJMRU5EX01PREVTLlNBVFVSQVRJT05dICAgID0gW2dsLk9ORSwgICAgICAgZ2wuT05FX01JTlVTX1NSQ19BTFBIQV07XG4gICAgb2JqZWN0W0NPTlNULkJMRU5EX01PREVTLkNPTE9SXSAgICAgICAgID0gW2dsLk9ORSwgICAgICAgZ2wuT05FX01JTlVTX1NSQ19BTFBIQV07XG4gICAgb2JqZWN0W0NPTlNULkJMRU5EX01PREVTLkxVTUlOT1NJVFldICAgID0gW2dsLk9ORSwgICAgICAgZ2wuT05FX01JTlVTX1NSQ19BTFBIQV07XG5cbiAgICByZXR1cm4gb2JqZWN0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IG1hcFdlYkdMQmxlbmRNb2Rlc1RvUGl4aTtcbiIsIkNPTlNUID0gcmVxdWlyZSgnLi4vLi4vLi4vY29uc3QnKTtcblxuLyoqXG4gKiBHZW5lcmljIE1hc2sgU3RhY2sgZGF0YSBzdHJ1Y3R1cmVcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqL1xuZnVuY3Rpb24gbWFwV2ViR0xEcmF3TW9kZXNUb1BpeGkoZ2wsIG9iamVjdClcbntcblx0b2JqZWN0PSBvYmplY3QgfHwge307XG5cbiAgICBvYmplY3RbQ09OU1QuRFJBV19NT0RFUy5QT0lOVFNdICAgICAgICAgPSBnbC5QT0lOVFM7XG4gICAgb2JqZWN0W0NPTlNULkRSQVdfTU9ERVMuTElORVNdICAgICAgICAgID0gZ2wuTElORVM7XG4gICAgb2JqZWN0W0NPTlNULkRSQVdfTU9ERVMuTElORV9MT09QXSAgICAgID0gZ2wuTElORV9MT09QO1xuICAgIG9iamVjdFtDT05TVC5EUkFXX01PREVTLkxJTkVfU1RSSVBdICAgICA9IGdsLkxJTkVfU1RSSVA7XG4gICAgb2JqZWN0W0NPTlNULkRSQVdfTU9ERVMuVFJJQU5HTEVTXSAgICAgID0gZ2wuVFJJQU5HTEVTO1xuICAgIG9iamVjdFtDT05TVC5EUkFXX01PREVTLlRSSUFOR0xFX1NUUklQXSA9IGdsLlRSSUFOR0xFX1NUUklQO1xuICAgIG9iamVjdFtDT05TVC5EUkFXX01PREVTLlRSSUFOR0xFX0ZBTl0gICA9IGdsLlRSSUFOR0xFX0ZBTjtcblxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IG1hcFdlYkdMRHJhd01vZGVzVG9QaXhpO1xuIiwidmFyIG1hdGggPSByZXF1aXJlKCcuLi9tYXRoJyksXG4gICAgVGV4dHVyZSA9IHJlcXVpcmUoJy4uL3RleHR1cmVzL1RleHR1cmUnKSxcbiAgICBDb250YWluZXIgPSByZXF1aXJlKCcuLi9kaXNwbGF5L0NvbnRhaW5lcicpLFxuICAgIENhbnZhc1RpbnRlciA9IHJlcXVpcmUoJy4uL3JlbmRlcmVycy9jYW52YXMvdXRpbHMvQ2FudmFzVGludGVyJyksXG4gICAgdXRpbHMgPSByZXF1aXJlKCcuLi91dGlscycpLFxuICAgIENPTlNUID0gcmVxdWlyZSgnLi4vY29uc3QnKSxcbiAgICB0ZW1wUG9pbnQgPSBuZXcgbWF0aC5Qb2ludCgpO1xuXG4vKipcbiAqIFRoZSBTcHJpdGUgb2JqZWN0IGlzIHRoZSBiYXNlIGZvciBhbGwgdGV4dHVyZWQgb2JqZWN0cyB0aGF0IGFyZSByZW5kZXJlZCB0byB0aGUgc2NyZWVuXG4gKlxuICogQSBzcHJpdGUgY2FuIGJlIGNyZWF0ZWQgZGlyZWN0bHkgZnJvbSBhbiBpbWFnZSBsaWtlIHRoaXM6XG4gKlxuICogYGBganNcbiAqIHZhciBzcHJpdGUgPSBuZXcgUElYSS5TcHJpdGUuZnJvbUltYWdlKCdhc3NldHMvaW1hZ2UucG5nJyk7XG4gKiBgYGBcbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQ29udGFpbmVyXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIHRleHR1cmUge1BJWEkuVGV4dHVyZX0gVGhlIHRleHR1cmUgZm9yIHRoaXMgc3ByaXRlXG4gKi9cbmZ1bmN0aW9uIFNwcml0ZSh0ZXh0dXJlKVxue1xuICAgIENvbnRhaW5lci5jYWxsKHRoaXMpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGFuY2hvciBzZXRzIHRoZSBvcmlnaW4gcG9pbnQgb2YgdGhlIHRleHR1cmUuXG4gICAgICogVGhlIGRlZmF1bHQgaXMgMCwwIHRoaXMgbWVhbnMgdGhlIHRleHR1cmUncyBvcmlnaW4gaXMgdGhlIHRvcCBsZWZ0XG4gICAgICogU2V0dGluZyB0aGUgYW5jaG9yIHRvIDAuNSwwLjUgbWVhbnMgdGhlIHRleHR1cmUncyBvcmlnaW4gaXMgY2VudGVyZWRcbiAgICAgKiBTZXR0aW5nIHRoZSBhbmNob3IgdG8gMSwxIHdvdWxkIG1lYW4gdGhlIHRleHR1cmUncyBvcmlnaW4gcG9pbnQgd2lsbCBiZSB0aGUgYm90dG9tIHJpZ2h0IGNvcm5lclxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5Qb2ludH1cbiAgICAgKi9cbiAgICB0aGlzLmFuY2hvciA9IG5ldyBtYXRoLlBvaW50KCk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgdGV4dHVyZSB0aGF0IHRoZSBzcHJpdGUgaXMgdXNpbmdcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuVGV4dHVyZX1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX3RleHR1cmUgPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHdpZHRoIG9mIHRoZSBzcHJpdGUgKHRoaXMgaXMgaW5pdGlhbGx5IHNldCBieSB0aGUgdGV4dHVyZSlcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX3dpZHRoID0gMDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBoZWlnaHQgb2YgdGhlIHNwcml0ZSAodGhpcyBpcyBpbml0aWFsbHkgc2V0IGJ5IHRoZSB0ZXh0dXJlKVxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5faGVpZ2h0ID0gMDtcblxuICAgIC8qKlxuICAgICAqIFRoZSB0aW50IGFwcGxpZWQgdG8gdGhlIHNwcml0ZS4gVGhpcyBpcyBhIGhleCB2YWx1ZS4gQSB2YWx1ZSBvZiAweEZGRkZGRiB3aWxsIHJlbW92ZSBhbnkgdGludCBlZmZlY3QuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMHhGRkZGRkZcbiAgICAgKi9cbiAgICB0aGlzLnRpbnQgPSAweEZGRkZGRjtcblxuICAgIC8qKlxuICAgICAqIFRoZSBibGVuZCBtb2RlIHRvIGJlIGFwcGxpZWQgdG8gdGhlIHNwcml0ZS4gQXBwbHkgYSB2YWx1ZSBvZiBgUElYSS5CTEVORF9NT0RFUy5OT1JNQUxgIHRvIHJlc2V0IHRoZSBibGVuZCBtb2RlLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IFBJWEkuQkxFTkRfTU9ERVMuTk9STUFMXG4gICAgICogQHNlZSBQSVhJLkJMRU5EX01PREVTXG4gICAgICovXG4gICAgdGhpcy5ibGVuZE1vZGUgPSBDT05TVC5CTEVORF9NT0RFUy5OT1JNQUw7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgc2hhZGVyIHRoYXQgd2lsbCBiZSB1c2VkIHRvIHJlbmRlciB0aGUgc3ByaXRlLiBTZXQgdG8gbnVsbCB0byByZW1vdmUgYSBjdXJyZW50IHNoYWRlci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuQWJzdHJhY3RGaWx0ZXJ8UElYSS5TaGFkZXJ9XG4gICAgICovXG4gICAgdGhpcy5zaGFkZXIgPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogQW4gaW50ZXJuYWwgY2FjaGVkIHZhbHVlIG9mIHRoZSB0aW50LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDB4RkZGRkZGXG4gICAgICovXG4gICAgdGhpcy5jYWNoZWRUaW50ID0gMHhGRkZGRkY7XG5cbiAgICAvLyBjYWxsIHRleHR1cmUgc2V0dGVyXG4gICAgdGhpcy50ZXh0dXJlID0gdGV4dHVyZSB8fCBUZXh0dXJlLkVNUFRZO1xuICAgIHRoaXMudGV4dHVyZURpcnR5ID0gdHJ1ZVxuICAgIHRoaXMudmVydGV4RGlydHkgPSB0cnVlO1xuICAgIHRoaXMudmVydGV4RGF0YSA9IG5ldyBGbG9hdDMyQXJyYXkoOCk7XG59XG5cbi8vIGNvbnN0cnVjdG9yXG5TcHJpdGUucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShDb250YWluZXIucHJvdG90eXBlKTtcblNwcml0ZS5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBTcHJpdGU7XG5tb2R1bGUuZXhwb3J0cyA9IFNwcml0ZTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoU3ByaXRlLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFRoZSB3aWR0aCBvZiB0aGUgc3ByaXRlLCBzZXR0aW5nIHRoaXMgd2lsbCBhY3R1YWxseSBtb2RpZnkgdGhlIHNjYWxlIHRvIGFjaGlldmUgdGhlIHZhbHVlIHNldFxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLlNwcml0ZSNcbiAgICAgKi9cbiAgICB3aWR0aDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiBNYXRoLmFicyh0aGlzLnNjYWxlLngpICogdGhpcy50ZXh0dXJlLl9mcmFtZS53aWR0aDtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHZhciBzaWduID0gdXRpbHMuc2lnbih0aGlzLnNjYWxlLngpIHx8IDE7XG4gICAgICAgICAgICB0aGlzLnNjYWxlLnggPSBzaWduICogdmFsdWUgLyB0aGlzLnRleHR1cmUuX2ZyYW1lLndpZHRoO1xuICAgICAgICAgICAgdGhpcy5fd2lkdGggPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBUaGUgaGVpZ2h0IG9mIHRoZSBzcHJpdGUsIHNldHRpbmcgdGhpcyB3aWxsIGFjdHVhbGx5IG1vZGlmeSB0aGUgc2NhbGUgdG8gYWNoaWV2ZSB0aGUgdmFsdWUgc2V0XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuU3ByaXRlI1xuICAgICAqL1xuICAgIGhlaWdodDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiAgTWF0aC5hYnModGhpcy5zY2FsZS55KSAqIHRoaXMudGV4dHVyZS5fZnJhbWUuaGVpZ2h0O1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdmFyIHNpZ24gPSB1dGlscy5zaWduKHRoaXMuc2NhbGUueSkgfHwgMTtcbiAgICAgICAgICAgIHRoaXMuc2NhbGUueSA9IHNpZ24gKiB2YWx1ZSAvIHRoaXMudGV4dHVyZS5fZnJhbWUuaGVpZ2h0O1xuICAgICAgICAgICAgdGhpcy5faGVpZ2h0ID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVGhlIHRleHR1cmUgdGhhdCB0aGUgc3ByaXRlIGlzIHVzaW5nXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlRleHR1cmV9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuU3ByaXRlI1xuICAgICAqL1xuICAgIHRleHR1cmU6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gIHRoaXMuX3RleHR1cmU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICBpZiAodGhpcy5fdGV4dHVyZSA9PT0gdmFsdWUpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLl90ZXh0dXJlID0gdmFsdWU7XG4gICAgICAgICAgICB0aGlzLmNhY2hlZFRpbnQgPSAweEZGRkZGRjtcblxuICAgICAgICAgICAgdGhpcy50ZXh0dXJlRGlydHkgPSB0cnVlO1xuXG4gICAgICAgICAgICBpZiAodmFsdWUpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgLy8gd2FpdCBmb3IgdGhlIHRleHR1cmUgdG8gbG9hZFxuICAgICAgICAgICAgICAgIGlmICh2YWx1ZS5iYXNlVGV4dHVyZS5oYXNMb2FkZWQpXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9vblRleHR1cmVVcGRhdGUoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgdmFsdWUub25jZSgndXBkYXRlJywgdGhpcy5fb25UZXh0dXJlVXBkYXRlLCB0aGlzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG59KTtcblxuLyoqXG4gKiBXaGVuIHRoZSB0ZXh0dXJlIGlzIHVwZGF0ZWQsIHRoaXMgZXZlbnQgd2lsbCBmaXJlIHRvIHVwZGF0ZSB0aGUgc2NhbGUgYW5kIGZyYW1lXG4gKlxuICogQHByaXZhdGVcbiAqL1xuU3ByaXRlLnByb3RvdHlwZS5fb25UZXh0dXJlVXBkYXRlID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLnRleHR1cmVEaXJ0eSA9IHRydWU7XG5cbiAgICAvLyBzbyBpZiBfd2lkdGggaXMgMCB0aGVuIHdpZHRoIHdhcyBub3Qgc2V0Li5cbiAgICBpZiAodGhpcy5fd2lkdGgpXG4gICAge1xuICAgICAgICB0aGlzLnNjYWxlLnggPSB1dGlscy5zaWduKHRoaXMuc2NhbGUueCkgKiB0aGlzLl93aWR0aCAvIHRoaXMudGV4dHVyZS5mcmFtZS53aWR0aDtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5faGVpZ2h0KVxuICAgIHtcbiAgICAgICAgdGhpcy5zY2FsZS55ID0gdXRpbHMuc2lnbih0aGlzLnNjYWxlLnkpICogdGhpcy5faGVpZ2h0IC8gdGhpcy50ZXh0dXJlLmZyYW1lLmhlaWdodDtcbiAgICB9XG59O1xuXG5TcHJpdGUucHJvdG90eXBlLmNhY2x1bGF0ZVZlcnRpY2VzID0gZnVuY3Rpb24gKClcbntcblxuICAgIHZhciB0ZXh0dXJlID0gdGhpcy5fdGV4dHVyZSxcbiAgICAgICAgd3QgPSB0aGlzLndvcmxkVHJhbnNmb3JtLFxuICAgICAgICBhID0gd3QuYSwgYiA9IHd0LmIsIGMgPSB3dC5jLCBkID0gd3QuZCwgdHggPSB3dC50eCwgdHkgPSB3dC50eSxcbiAgICAgICAgdmVydGV4RGF0YSA9IHRoaXMudmVydGV4RGF0YSxcbiAgICAgICAgdzAsIHcxLCBoMCwgaDEsXG4gICAgICAgIHRyaW0gPSB0ZXh0dXJlLnRyaW07XG4gICAgXG4gICAgaWYgKHRyaW0pXG4gICAge1xuICAgICAgICAvLyBpZiB0aGUgc3ByaXRlIGlzIHRyaW1tZWQgYW5kIGlzIG5vdCBhIHRpbGluZ3Nwcml0ZSB0aGVuIHdlIG5lZWQgdG8gYWRkIHRoZSBleHRyYSBzcGFjZSBiZWZvcmUgdHJhbnNmb3JtaW5nIHRoZSBzcHJpdGUgY29vcmRzLi5cbiAgICAgICAgdzEgPSB0cmltLnggLSB0aGlzLmFuY2hvci54ICogdHJpbS53aWR0aDtcbiAgICAgICAgdzAgPSB3MSArIHRleHR1cmUuY3JvcC53aWR0aDtcblxuICAgICAgICBoMSA9IHRyaW0ueSAtIHRoaXMuYW5jaG9yLnkgKiB0cmltLmhlaWdodDtcbiAgICAgICAgaDAgPSBoMSArIHRleHR1cmUuY3JvcC5oZWlnaHQ7XG5cbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgdzAgPSAodGV4dHVyZS5fZnJhbWUud2lkdGggKSAqICgxLXRoaXMuYW5jaG9yLngpO1xuICAgICAgICB3MSA9ICh0ZXh0dXJlLl9mcmFtZS53aWR0aCApICogLXRoaXMuYW5jaG9yLng7XG5cbiAgICAgICAgaDAgPSB0ZXh0dXJlLl9mcmFtZS5oZWlnaHQgKiAoMS10aGlzLmFuY2hvci55KTtcbiAgICAgICAgaDEgPSB0ZXh0dXJlLl9mcmFtZS5oZWlnaHQgKiAtdGhpcy5hbmNob3IueTtcbiAgICB9XG5cbiAgICAvLyB4eVxuICAgIHZlcnRleERhdGFbMF0gPSBhICogdzEgKyBjICogaDEgKyB0eDtcbiAgICB2ZXJ0ZXhEYXRhWzFdID0gZCAqIGgxICsgYiAqIHcxICsgdHk7XG5cbiAgICAvLyB4eVxuICAgIHZlcnRleERhdGFbMl0gPSBhICogdzAgKyBjICogaDEgKyB0eDtcbiAgICB2ZXJ0ZXhEYXRhWzNdID0gZCAqIGgxICsgYiAqIHcwICsgdHk7XG5cbiAgICAgLy8geHlcbiAgICB2ZXJ0ZXhEYXRhWzRdID0gYSAqIHcwICsgYyAqIGgwICsgdHg7XG4gICAgdmVydGV4RGF0YVs1XSA9IGQgKiBoMCArIGIgKiB3MCArIHR5O1xuXG4gICAgLy8geHlcbiAgICB2ZXJ0ZXhEYXRhWzZdID0gYSAqIHcxICsgYyAqIGgwICsgdHg7XG4gICAgdmVydGV4RGF0YVs3XSA9IGQgKiBoMCArIGIgKiB3MSArIHR5O1xuXG5cbn1cblxuLyoqXG4qXG4qIFJlbmRlcnMgdGhlIG9iamVjdCB1c2luZyB0aGUgV2ViR0wgcmVuZGVyZXJcbipcbiogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLldlYkdMUmVuZGVyZXJ9XG4qIEBwcml2YXRlXG4qL1xuU3ByaXRlLnByb3RvdHlwZS5fcmVuZGVyV2ViR0wgPSBmdW5jdGlvbiAocmVuZGVyZXIpXG57XG4gICAgaWYodGhpcy50ZXh0dXJlRGlydHkpXG4gICAge1xuICAgICAgICB0aGlzLnRleHR1cmVEaXJ0eSA9IGZhbHNlO1xuXG4gICAgICAgIHRoaXMuX29uVGV4dHVyZVVwZGF0ZSgpO1xuICAgICAgICBcbiAgICAgICAgdGhpcy52ZXJ0ZXhEaXJ0eSA9IHRydWU7XG4gICAgfVxuXG4gICAgaWYodGhpcy52ZXJ0ZXhEaXJ0eSlcbiAgICB7XG4gICAgICAgIHRoaXMudmVydGV4RGlydHkgPSBmYWxzZTtcblxuICAgICAgICAvLyBzZXQgdGhlIHZlcnRleCBkYXRhXG4gICAgICAgIHRoaXMuY2FjbHVsYXRlVmVydGljZXMoKTtcblxuICAgIH1cbiAgICBcbiAgICByZW5kZXJlci5zZXRPYmplY3RSZW5kZXJlcihyZW5kZXJlci5wbHVnaW5zLnNwcml0ZSk7XG4gICAgcmVuZGVyZXIucGx1Z2lucy5zcHJpdGUucmVuZGVyKHRoaXMpO1xufTtcblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBib3VuZHMgb2YgdGhlIFNwcml0ZSBhcyBhIHJlY3RhbmdsZS4gVGhlIGJvdW5kcyBjYWxjdWxhdGlvbiB0YWtlcyB0aGUgd29ybGRUcmFuc2Zvcm0gaW50byBhY2NvdW50LlxuICpcbiAqIEBwYXJhbSBtYXRyaXgge1BJWEkuTWF0cml4fSB0aGUgdHJhbnNmb3JtYXRpb24gbWF0cml4IG9mIHRoZSBzcHJpdGVcbiAqIEByZXR1cm4ge1BJWEkuUmVjdGFuZ2xlfSB0aGUgZnJhbWluZyByZWN0YW5nbGVcbiAqL1xuU3ByaXRlLnByb3RvdHlwZS5nZXRCb3VuZHMgPSBmdW5jdGlvbiAobWF0cml4KVxue1xuICAgIGlmKCF0aGlzLl9jdXJyZW50Qm91bmRzKVxuICAgIHtcbiAgICAgICAgaWYodGhpcy52ZXJ0ZXhEaXJ0eSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy52ZXJ0ZXhEaXJ0eSA9IGZhbHNlO1xuXG4gICAgICAgICAgICAvLyBzZXQgdGhlIHZlcnRleCBkYXRhXG4gICAgICAgICAgICB0aGlzLmNhY2x1bGF0ZVZlcnRpY2VzKCk7XG5cbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBtaW5YLFxuICAgICAgICAgICAgbWF4WCxcbiAgICAgICAgICAgIG1pblksXG4gICAgICAgICAgICBtYXhZLFxuICAgICAgICAgICAgdmVydGV4RGF0YSA9IHRoaXMudmVydGV4RGF0YTtcblxuICAgICAgICB2YXIgeDEgPSB2ZXJ0ZXhEYXRhWzBdXG4gICAgICAgIHZhciB5MSA9IHZlcnRleERhdGFbMV1cblxuICAgICAgICB2YXIgeDIgPSB2ZXJ0ZXhEYXRhWzJdXG4gICAgICAgIHZhciB5MiA9IHZlcnRleERhdGFbM11cblxuICAgICAgICB2YXIgeDMgPSB2ZXJ0ZXhEYXRhWzRdXG4gICAgICAgIHZhciB5MyA9IHZlcnRleERhdGFbNV1cblxuICAgICAgICB2YXIgeDQgPSB2ZXJ0ZXhEYXRhWzZdXG4gICAgICAgIHZhciB5NCA9IHZlcnRleERhdGFbN11cblxuICAgICAgICBtaW5YID0geDE7XG4gICAgICAgIG1pblggPSB4MiA8IG1pblggPyB4MiA6IG1pblg7XG4gICAgICAgIG1pblggPSB4MyA8IG1pblggPyB4MyA6IG1pblg7XG4gICAgICAgIG1pblggPSB4NCA8IG1pblggPyB4NCA6IG1pblg7XG5cbiAgICAgICAgbWluWSA9IHkxO1xuICAgICAgICBtaW5ZID0geTIgPCBtaW5ZID8geTIgOiBtaW5ZO1xuICAgICAgICBtaW5ZID0geTMgPCBtaW5ZID8geTMgOiBtaW5ZO1xuICAgICAgICBtaW5ZID0geTQgPCBtaW5ZID8geTQgOiBtaW5ZO1xuXG4gICAgICAgIG1heFggPSB4MTtcbiAgICAgICAgbWF4WCA9IHgyID4gbWF4WCA/IHgyIDogbWF4WDtcbiAgICAgICAgbWF4WCA9IHgzID4gbWF4WCA/IHgzIDogbWF4WDtcbiAgICAgICAgbWF4WCA9IHg0ID4gbWF4WCA/IHg0IDogbWF4WDtcblxuICAgICAgICBtYXhZID0geTE7XG4gICAgICAgIG1heFkgPSB5MiA+IG1heFkgPyB5MiA6IG1heFk7XG4gICAgICAgIG1heFkgPSB5MyA+IG1heFkgPyB5MyA6IG1heFk7XG4gICAgICAgIG1heFkgPSB5NCA+IG1heFkgPyB5NCA6IG1heFk7XG5cbiAgICAgICAgLy8gY2hlY2sgZm9yIGNoaWxkcmVuXG4gICAgICAgIGlmKHRoaXMuY2hpbGRyZW4ubGVuZ3RoKVxuICAgICAgICB7XG4gICAgICAgICAgICB2YXIgY2hpbGRCb3VuZHMgPSB0aGlzLmNvbnRhaW5lckdldEJvdW5kcygpO1xuXG4gICAgICAgICAgICB3MCA9IGNoaWxkQm91bmRzLng7XG4gICAgICAgICAgICB3MSA9IGNoaWxkQm91bmRzLnggKyBjaGlsZEJvdW5kcy53aWR0aDtcbiAgICAgICAgICAgIGgwID0gY2hpbGRCb3VuZHMueTtcbiAgICAgICAgICAgIGgxID0gY2hpbGRCb3VuZHMueSArIGNoaWxkQm91bmRzLmhlaWdodDtcblxuICAgICAgICAgICAgbWluWCA9IChtaW5YIDwgdzApID8gbWluWCA6IHcwO1xuICAgICAgICAgICAgbWluWSA9IChtaW5ZIDwgaDApID8gbWluWSA6IGgwO1xuXG4gICAgICAgICAgICBtYXhYID0gKG1heFggPiB3MSkgPyBtYXhYIDogdzE7XG4gICAgICAgICAgICBtYXhZID0gKG1heFkgPiBoMSkgPyBtYXhZIDogaDE7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgYm91bmRzID0gdGhpcy5fYm91bmRzO1xuXG4gICAgICAgIGJvdW5kcy54ID0gbWluWDtcbiAgICAgICAgYm91bmRzLndpZHRoID0gbWF4WCAtIG1pblg7XG5cbiAgICAgICAgYm91bmRzLnkgPSBtaW5ZO1xuICAgICAgICBib3VuZHMuaGVpZ2h0ID0gbWF4WSAtIG1pblk7XG5cbiAgICAgICAgLy8gc3RvcmUgYSByZWZlcmVuY2Ugc28gdGhhdCBpZiB0aGlzIGZ1bmN0aW9uIGdldHMgY2FsbGVkIGFnYWluIGluIHRoZSByZW5kZXIgY3ljbGUgd2UgZG8gbm90IGhhdmUgdG8gcmVjYWxjdWxhdGVcbiAgICAgICAgdGhpcy5fY3VycmVudEJvdW5kcyA9IGJvdW5kcztcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5fY3VycmVudEJvdW5kcztcbn07XG5cbi8qKlxuICogR2V0cyB0aGUgbG9jYWwgYm91bmRzIG9mIHRoZSBzcHJpdGUgb2JqZWN0LlxuICpcbiAqL1xuU3ByaXRlLnByb3RvdHlwZS5nZXRMb2NhbEJvdW5kcyA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy5fYm91bmRzLnggPSAtdGhpcy5fdGV4dHVyZS5fZnJhbWUud2lkdGggKiB0aGlzLmFuY2hvci54O1xuICAgIHRoaXMuX2JvdW5kcy55ID0gLXRoaXMuX3RleHR1cmUuX2ZyYW1lLmhlaWdodCAqIHRoaXMuYW5jaG9yLnk7XG4gICAgdGhpcy5fYm91bmRzLndpZHRoID0gdGhpcy5fdGV4dHVyZS5fZnJhbWUud2lkdGg7XG4gICAgdGhpcy5fYm91bmRzLmhlaWdodCA9IHRoaXMuX3RleHR1cmUuX2ZyYW1lLmhlaWdodDtcbiAgICByZXR1cm4gdGhpcy5fYm91bmRzO1xufTtcblxuLyoqXG4qIFRlc3RzIGlmIGEgcG9pbnQgaXMgaW5zaWRlIHRoaXMgc3ByaXRlXG4qXG4qIEBwYXJhbSBwb2ludCB7UElYSS5Qb2ludH0gdGhlIHBvaW50IHRvIHRlc3RcbiogQHJldHVybiB7Ym9vbGVhbn0gdGhlIHJlc3VsdCBvZiB0aGUgdGVzdFxuKi9cblNwcml0ZS5wcm90b3R5cGUuY29udGFpbnNQb2ludCA9IGZ1bmN0aW9uKCBwb2ludCApXG57XG4gICAgdGhpcy53b3JsZFRyYW5zZm9ybS5hcHBseUludmVyc2UocG9pbnQsICB0ZW1wUG9pbnQpO1xuXG4gICAgdmFyIHdpZHRoID0gdGhpcy5fdGV4dHVyZS5fZnJhbWUud2lkdGg7XG4gICAgdmFyIGhlaWdodCA9IHRoaXMuX3RleHR1cmUuX2ZyYW1lLmhlaWdodDtcbiAgICB2YXIgeDEgPSAtd2lkdGggKiB0aGlzLmFuY2hvci54O1xuICAgIHZhciB5MTtcblxuICAgIGlmICggdGVtcFBvaW50LnggPiB4MSAmJiB0ZW1wUG9pbnQueCA8IHgxICsgd2lkdGggKVxuICAgIHtcbiAgICAgICAgeTEgPSAtaGVpZ2h0ICogdGhpcy5hbmNob3IueTtcblxuICAgICAgICBpZiAoIHRlbXBQb2ludC55ID4geTEgJiYgdGVtcFBvaW50LnkgPCB5MSArIGhlaWdodCApXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xufTtcblxuLyoqXG4qIFJlbmRlcnMgdGhlIG9iamVjdCB1c2luZyB0aGUgQ2FudmFzIHJlbmRlcmVyXG4qXG4qIEBwYXJhbSByZW5kZXJlciB7UElYSS5DYW52YXNSZW5kZXJlcn0gVGhlIHJlbmRlcmVyXG4qIEBwcml2YXRlXG4qL1xuU3ByaXRlLnByb3RvdHlwZS5fcmVuZGVyQ2FudmFzID0gZnVuY3Rpb24gKHJlbmRlcmVyKVxue1xuICAgIGlmICh0aGlzLnRleHR1cmUuY3JvcC53aWR0aCA8PSAwIHx8IHRoaXMudGV4dHVyZS5jcm9wLmhlaWdodCA8PSAwKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHZhciBjb21wb3NpdGVPcGVyYXRpb24gPSByZW5kZXJlci5ibGVuZE1vZGVzW3RoaXMuYmxlbmRNb2RlXTtcbiAgICBpZiAoY29tcG9zaXRlT3BlcmF0aW9uICE9PSByZW5kZXJlci5jb250ZXh0Lmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbilcbiAgICB7XG4gICAgICAgIHJlbmRlcmVyLmNvbnRleHQuZ2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uID0gY29tcG9zaXRlT3BlcmF0aW9uO1xuICAgIH1cblxuICAgIC8vICBJZ25vcmUgbnVsbCBzb3VyY2VzXG4gICAgaWYgKHRoaXMudGV4dHVyZS52YWxpZClcbiAgICB7XG4gICAgICAgIHZhciB0ZXh0dXJlID0gdGhpcy5fdGV4dHVyZSxcbiAgICAgICAgICAgIHd0ID0gdGhpcy53b3JsZFRyYW5zZm9ybSxcbiAgICAgICAgICAgIGR4LFxuICAgICAgICAgICAgZHksXG4gICAgICAgICAgICB3aWR0aCxcbiAgICAgICAgICAgIGhlaWdodDtcblxuICAgICAgICByZW5kZXJlci5jb250ZXh0Lmdsb2JhbEFscGhhID0gdGhpcy53b3JsZEFscGhhO1xuXG4gICAgICAgIC8vIElmIHNtb290aGluZ0VuYWJsZWQgaXMgc3VwcG9ydGVkIGFuZCB3ZSBuZWVkIHRvIGNoYW5nZSB0aGUgc21vb3RoaW5nIHByb3BlcnR5IGZvciB0aGlzIHRleHR1cmVcbiAgICAgICAgdmFyIHNtb290aGluZ0VuYWJsZWQgPSB0ZXh0dXJlLmJhc2VUZXh0dXJlLnNjYWxlTW9kZSA9PT0gQ09OU1QuU0NBTEVfTU9ERVMuTElORUFSO1xuICAgICAgICBpZiAocmVuZGVyZXIuc21vb3RoUHJvcGVydHkgJiYgcmVuZGVyZXIuY29udGV4dFtyZW5kZXJlci5zbW9vdGhQcm9wZXJ0eV0gIT09IHNtb290aGluZ0VuYWJsZWQpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJlbmRlcmVyLmNvbnRleHRbcmVuZGVyZXIuc21vb3RoUHJvcGVydHldID0gc21vb3RoaW5nRW5hYmxlZDtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIElmIHRoZSB0ZXh0dXJlIGlzIHRyaW1tZWQgd2Ugb2Zmc2V0IGJ5IHRoZSB0cmltIHgveSwgb3RoZXJ3aXNlIHdlIHVzZSB0aGUgZnJhbWUgZGltZW5zaW9uc1xuXG4gICAgICAgIGlmKHRleHR1cmUucm90YXRlKVxuICAgICAgICB7XG4gICAgICAgICAgICB3aWR0aCA9IHRleHR1cmUuY3JvcC5oZWlnaHQ7XG4gICAgICAgICAgICBoZWlnaHQgPSB0ZXh0dXJlLmNyb3Aud2lkdGg7XG5cbiAgICAgICAgICAgIGR4ID0gKHRleHR1cmUudHJpbSkgPyB0ZXh0dXJlLnRyaW0ueSAtIHRoaXMuYW5jaG9yLnkgKiB0ZXh0dXJlLnRyaW0uaGVpZ2h0IDogdGhpcy5hbmNob3IueSAqIC10ZXh0dXJlLl9mcmFtZS5oZWlnaHQ7XG4gICAgICAgICAgICBkeSA9ICh0ZXh0dXJlLnRyaW0pID8gdGV4dHVyZS50cmltLnggLSB0aGlzLmFuY2hvci54ICogdGV4dHVyZS50cmltLndpZHRoIDogdGhpcy5hbmNob3IueCAqIC10ZXh0dXJlLl9mcmFtZS53aWR0aDtcbiAgICAgICBcbiAgICAgICAgICAgIGR4ICs9IHdpZHRoO1xuXG4gICAgICAgICAgICB3dC50eCA9IGR5ICogd3QuYSArIGR4ICogd3QuYyArIHd0LnR4O1xuICAgICAgICAgICAgd3QudHkgPSBkeSAqIHd0LmIgKyBkeCAqIHd0LmQgKyB3dC50eTtcblxuICAgICAgICAgICAgdmFyIHRlbXAgPSB3dC5hO1xuICAgICAgICAgICAgd3QuYSAgPSAtd3QuYztcbiAgICAgICAgICAgIHd0LmMgID0gIHRlbXA7XG5cbiAgICAgICAgICAgIHRlbXAgPSB3dC5iO1xuICAgICAgICAgICAgd3QuYiAgPSAtd3QuZDtcbiAgICAgICAgICAgIHd0LmQgID0gIHRlbXA7XG5cbiAgICAgICAgICAgIC8vIHRoZSBhbmNob3IgaGFzIGFscmVhZHkgYmVlbiBhcHBsaWVkIGFib3ZlLCBzbyBsZXRzIHNldCBpdCB0byB6ZXJvXG4gICAgICAgICAgICBkeCA9IDA7XG4gICAgICAgICAgICBkeSA9IDA7XG5cbiAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgIHtcbiAgICAgICAgICAgIHdpZHRoID0gdGV4dHVyZS5jcm9wLndpZHRoO1xuICAgICAgICAgICAgaGVpZ2h0ID0gdGV4dHVyZS5jcm9wLmhlaWdodDtcblxuICAgICAgICAgICAgZHggPSAodGV4dHVyZS50cmltKSA/IHRleHR1cmUudHJpbS54IC0gdGhpcy5hbmNob3IueCAqIHRleHR1cmUudHJpbS53aWR0aCA6IHRoaXMuYW5jaG9yLnggKiAtdGV4dHVyZS5fZnJhbWUud2lkdGg7XG4gICAgICAgICAgICBkeSA9ICh0ZXh0dXJlLnRyaW0pID8gdGV4dHVyZS50cmltLnkgLSB0aGlzLmFuY2hvci55ICogdGV4dHVyZS50cmltLmhlaWdodCA6IHRoaXMuYW5jaG9yLnkgKiAtdGV4dHVyZS5fZnJhbWUuaGVpZ2h0O1xuICAgICAgICB9XG5cblxuXG4gICAgICAgIC8vIEFsbG93IGZvciBwaXhlbCByb3VuZGluZ1xuICAgICAgICBpZiAocmVuZGVyZXIucm91bmRQaXhlbHMpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJlbmRlcmVyLmNvbnRleHQuc2V0VHJhbnNmb3JtKFxuICAgICAgICAgICAgICAgIHd0LmEsXG4gICAgICAgICAgICAgICAgd3QuYixcbiAgICAgICAgICAgICAgICB3dC5jLFxuICAgICAgICAgICAgICAgIHd0LmQsXG4gICAgICAgICAgICAgICAgKHd0LnR4ICogcmVuZGVyZXIucmVzb2x1dGlvbikgfCAwLFxuICAgICAgICAgICAgICAgICh3dC50eSAqIHJlbmRlcmVyLnJlc29sdXRpb24pIHwgMFxuICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgZHggPSBkeCB8IDA7XG4gICAgICAgICAgICBkeSA9IGR5IHwgMDtcbiAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgIHtcblxuICAgICAgICAgICAgcmVuZGVyZXIuY29udGV4dC5zZXRUcmFuc2Zvcm0oXG4gICAgICAgICAgICAgICAgd3QuYSxcbiAgICAgICAgICAgICAgICB3dC5iLFxuICAgICAgICAgICAgICAgIHd0LmMsXG4gICAgICAgICAgICAgICAgd3QuZCxcbiAgICAgICAgICAgICAgICB3dC50eCAqIHJlbmRlcmVyLnJlc29sdXRpb24sXG4gICAgICAgICAgICAgICAgd3QudHkgKiByZW5kZXJlci5yZXNvbHV0aW9uXG4gICAgICAgICAgICApO1xuXG5cbiAgICAgICAgfVxuXG4gICAgICAgIHZhciByZXNvbHV0aW9uID0gdGV4dHVyZS5iYXNlVGV4dHVyZS5yZXNvbHV0aW9uO1xuXG4gICAgICAgIGlmICh0aGlzLnRpbnQgIT09IDB4RkZGRkZGKVxuICAgICAgICB7XG4gICAgICAgICAgICBpZiAodGhpcy5jYWNoZWRUaW50ICE9PSB0aGlzLnRpbnQpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdGhpcy5jYWNoZWRUaW50ID0gdGhpcy50aW50O1xuXG4gICAgICAgICAgICAgICAgLy8gVE9ETyBjbGVhbiB1cCBjYWNoaW5nIC0gaG93IHRvIGNsZWFuIHVwIHRoZSBjYWNoZXM/XG4gICAgICAgICAgICAgICAgdGhpcy50aW50ZWRUZXh0dXJlID0gQ2FudmFzVGludGVyLmdldFRpbnRlZFRleHR1cmUodGhpcywgdGhpcy50aW50KTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmVuZGVyZXIuY29udGV4dC5kcmF3SW1hZ2UoXG4gICAgICAgICAgICAgICAgdGhpcy50aW50ZWRUZXh0dXJlLFxuICAgICAgICAgICAgICAgIDAsXG4gICAgICAgICAgICAgICAgMCxcbiAgICAgICAgICAgICAgICB3aWR0aCAqIHJlc29sdXRpb24sXG4gICAgICAgICAgICAgICAgaGVpZ2h0ICogcmVzb2x1dGlvbixcbiAgICAgICAgICAgICAgICBkeCAqIHJlbmRlcmVyLnJlc29sdXRpb24sXG4gICAgICAgICAgICAgICAgZHkgKiByZW5kZXJlci5yZXNvbHV0aW9uLFxuICAgICAgICAgICAgICAgIHdpZHRoICogcmVuZGVyZXIucmVzb2x1dGlvbixcbiAgICAgICAgICAgICAgICBoZWlnaHQgKiByZW5kZXJlci5yZXNvbHV0aW9uXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIGVsc2VcbiAgICAgICAge1xuICAgICAgICAgICAgcmVuZGVyZXIuY29udGV4dC5kcmF3SW1hZ2UoXG4gICAgICAgICAgICAgICAgdGV4dHVyZS5iYXNlVGV4dHVyZS5zb3VyY2UsXG4gICAgICAgICAgICAgICAgdGV4dHVyZS5jcm9wLnggKiByZXNvbHV0aW9uLFxuICAgICAgICAgICAgICAgIHRleHR1cmUuY3JvcC55ICogcmVzb2x1dGlvbixcbiAgICAgICAgICAgICAgICB3aWR0aCAqIHJlc29sdXRpb24sXG4gICAgICAgICAgICAgICAgaGVpZ2h0ICogcmVzb2x1dGlvbixcbiAgICAgICAgICAgICAgICBkeCAgKiByZW5kZXJlci5yZXNvbHV0aW9uLFxuICAgICAgICAgICAgICAgIGR5ICAqIHJlbmRlcmVyLnJlc29sdXRpb24sXG4gICAgICAgICAgICAgICAgd2lkdGggKiByZW5kZXJlci5yZXNvbHV0aW9uLFxuICAgICAgICAgICAgICAgIGhlaWdodCAqIHJlbmRlcmVyLnJlc29sdXRpb25cbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICB9XG59O1xuXG4vKipcbiAqIERlc3Ryb3lzIHRoaXMgc3ByaXRlIGFuZCBvcHRpb25hbGx5IGl0cyB0ZXh0dXJlXG4gKlxuICogQHBhcmFtIFtkZXN0cm95VGV4dHVyZT1mYWxzZV0ge2Jvb2xlYW59IFNob3VsZCBpdCBkZXN0cm95IHRoZSBjdXJyZW50IHRleHR1cmUgb2YgdGhlIHNwcml0ZSBhcyB3ZWxsXG4gKiBAcGFyYW0gW2Rlc3Ryb3lCYXNlVGV4dHVyZT1mYWxzZV0ge2Jvb2xlYW59IFNob3VsZCBpdCBkZXN0cm95IHRoZSBiYXNlIHRleHR1cmUgb2YgdGhlIHNwcml0ZSBhcyB3ZWxsXG4gKi9cblNwcml0ZS5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uIChkZXN0cm95VGV4dHVyZSwgZGVzdHJveUJhc2VUZXh0dXJlKVxue1xuICAgIENvbnRhaW5lci5wcm90b3R5cGUuZGVzdHJveS5jYWxsKHRoaXMpO1xuXG4gICAgdGhpcy5hbmNob3IgPSBudWxsO1xuXG4gICAgaWYgKGRlc3Ryb3lUZXh0dXJlKVxuICAgIHtcbiAgICAgICAgdGhpcy5fdGV4dHVyZS5kZXN0cm95KGRlc3Ryb3lCYXNlVGV4dHVyZSk7XG4gICAgfVxuXG4gICAgdGhpcy5fdGV4dHVyZSA9IG51bGw7XG4gICAgdGhpcy5zaGFkZXIgPSBudWxsO1xufTtcblxuLy8gc29tZSBoZWxwZXIgZnVuY3Rpb25zLi5cblxuLyoqXG4gKiBIZWxwZXIgZnVuY3Rpb24gdGhhdCBjcmVhdGVzIGEgc3ByaXRlIHRoYXQgd2lsbCBjb250YWluIGEgdGV4dHVyZSBmcm9tIHRoZSBUZXh0dXJlQ2FjaGUgYmFzZWQgb24gdGhlIGZyYW1lSWRcbiAqIFRoZSBmcmFtZSBpZHMgYXJlIGNyZWF0ZWQgd2hlbiBhIFRleHR1cmUgcGFja2VyIGZpbGUgaGFzIGJlZW4gbG9hZGVkXG4gKlxuICogQHN0YXRpY1xuICogQHBhcmFtIGZyYW1lSWQge3N0cmluZ30gVGhlIGZyYW1lIElkIG9mIHRoZSB0ZXh0dXJlIGluIHRoZSBjYWNoZVxuICogQHBhcmFtIFtjcm9zc29yaWdpbj0oYXV0byldIHtib29sZWFufSBpZiB5b3Ugd2FudCB0byBzcGVjaWZ5IHRoZSBjcm9zcy1vcmlnaW4gcGFyYW1ldGVyXG4gKiBAcGFyYW0gW3NjYWxlTW9kZT1QSVhJLlNDQUxFX01PREVTLkRFRkFVTFRdIHtudW1iZXJ9IGlmIHlvdSB3YW50IHRvIHNwZWNpZnkgdGhlIHNjYWxlIG1vZGUsIHNlZSB7QGxpbmsgUElYSS5TQ0FMRV9NT0RFU30gZm9yIHBvc3NpYmxlIHZhbHVlc1xuICogQHJldHVybiB7UElYSS5TcHJpdGV9IEEgbmV3IFNwcml0ZSB1c2luZyBhIHRleHR1cmUgZnJvbSB0aGUgdGV4dHVyZSBjYWNoZSBtYXRjaGluZyB0aGUgZnJhbWVJZFxuICovXG5TcHJpdGUuZnJvbUZyYW1lID0gZnVuY3Rpb24gKGZyYW1lSWQpXG57XG4gICAgdmFyIHRleHR1cmUgPSB1dGlscy5UZXh0dXJlQ2FjaGVbZnJhbWVJZF07XG5cbiAgICBpZiAoIXRleHR1cmUpXG4gICAge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RoZSBmcmFtZUlkIFwiJyArIGZyYW1lSWQgKyAnXCIgZG9lcyBub3QgZXhpc3QgaW4gdGhlIHRleHR1cmUgY2FjaGUnKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IFNwcml0ZSh0ZXh0dXJlKTtcbn07XG5cbi8qKlxuICogSGVscGVyIGZ1bmN0aW9uIHRoYXQgY3JlYXRlcyBhIHNwcml0ZSB0aGF0IHdpbGwgY29udGFpbiBhIHRleHR1cmUgYmFzZWQgb24gYW4gaW1hZ2UgdXJsXG4gKiBJZiB0aGUgaW1hZ2UgaXMgbm90IGluIHRoZSB0ZXh0dXJlIGNhY2hlIGl0IHdpbGwgYmUgbG9hZGVkXG4gKlxuICogQHN0YXRpY1xuICogQHBhcmFtIGltYWdlSWQge3N0cmluZ30gVGhlIGltYWdlIHVybCBvZiB0aGUgdGV4dHVyZVxuICogQHJldHVybiB7UElYSS5TcHJpdGV9IEEgbmV3IFNwcml0ZSB1c2luZyBhIHRleHR1cmUgZnJvbSB0aGUgdGV4dHVyZSBjYWNoZSBtYXRjaGluZyB0aGUgaW1hZ2UgaWRcbiAqL1xuU3ByaXRlLmZyb21JbWFnZSA9IGZ1bmN0aW9uIChpbWFnZUlkLCBjcm9zc29yaWdpbiwgc2NhbGVNb2RlKVxue1xuICAgIHJldHVybiBuZXcgU3ByaXRlKFRleHR1cmUuZnJvbUltYWdlKGltYWdlSWQsIGNyb3Nzb3JpZ2luLCBzY2FsZU1vZGUpKTtcbn07XG4iLCJ2YXIgT2JqZWN0UmVuZGVyZXIgPSByZXF1aXJlKCcuLi8uLi9yZW5kZXJlcnMvd2ViZ2wvdXRpbHMvT2JqZWN0UmVuZGVyZXInKSxcbiAgICBXZWJHTFJlbmRlcmVyID0gcmVxdWlyZSgnLi4vLi4vcmVuZGVyZXJzL3dlYmdsL1dlYkdMUmVuZGVyZXInKSxcbiAgICBUZXh0dXJlU2hhZGVyID0gcmVxdWlyZSgnLi4vLi4vcmVuZGVyZXJzL3dlYmdsL3NoYWRlcnMvX1RleHR1cmVTaGFkZXInKSxcbiAgICBjcmVhdGVJbmRpY2VzRm9yUXVhZHMgPSByZXF1aXJlKCcuLi8uLi91dGlscy9jcmVhdGVJbmRpY2VzRm9yUXVhZHMnKSxcbiAgICBnZW5lcmF0ZU11bHRpVGV4dHVyZVNoYWRlciA9IHJlcXVpcmUoJy4vZ2VuZXJhdGVNdWx0aVRleHR1cmVTaGFkZXInKSxcbiAgICBDT05TVCA9IHJlcXVpcmUoJy4uLy4uL2NvbnN0JyksXG4gICAgZ2xDb3JlID0gcmVxdWlyZSgncGl4aS1nbC1jb3JlJyk7XG5cbi8qKlxuICogQGF1dGhvciBNYXQgR3JvdmVzXG4gKlxuICogQmlnIHRoYW5rcyB0byB0aGUgdmVyeSBjbGV2ZXIgTWF0dCBEZXNMYXVyaWVycyA8bWF0dGRlc2w+IGh0dHBzOi8vZ2l0aHViLmNvbS9tYXR0ZGVzbC9cbiAqIGZvciBjcmVhdGluZyB0aGUgb3JpZ2luYWwgcGl4aSB2ZXJzaW9uIVxuICogQWxzbyBhIHRoYW5rcyB0byBodHRwczovL2dpdGh1Yi5jb20vYmNoZXZhbGllciBmb3IgdHdlYWtpbmcgdGhlIHRpbnQgYW5kIGFscGhhIHNvIHRoYXQgdGhleSBub3cgc2hhcmUgNCBieXRlcyBvbiB0aGUgdmVydGV4IGJ1ZmZlclxuICpcbiAqIEhlYXZpbHkgaW5zcGlyZWQgYnkgTGliR0RYJ3MgU3ByaXRlUmVuZGVyZXI6XG4gKiBodHRwczovL2dpdGh1Yi5jb20vbGliZ2R4L2xpYmdkeC9ibG9iL21hc3Rlci9nZHgvc3JjL2NvbS9iYWRsb2dpYy9nZHgvZ3JhcGhpY3MvZzJkL1Nwcml0ZVJlbmRlcmVyLmphdmFcbiAqL1xuXG4vKipcbiAqIFJlbmRlcmVyIGRlZGljYXRlZCB0byBkcmF3aW5nIGFuZCBiYXRjaGluZyBzcHJpdGVzLlxuICpcbiAqIEBjbGFzc1xuICogQHByaXZhdGVcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAZXh0ZW5kcyBQSVhJLk9iamVjdFJlbmRlcmVyXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcn0gVGhlIHJlbmRlcmVyIHRoaXMgc3ByaXRlIGJhdGNoIHdvcmtzIGZvci5cbiAqL1xuZnVuY3Rpb24gU3ByaXRlUmVuZGVyZXIocmVuZGVyZXIpXG57XG4gICAgT2JqZWN0UmVuZGVyZXIuY2FsbCh0aGlzLCByZW5kZXJlcik7XG5cbiAgICAvKipcbiAgICAgKiBOdW1iZXIgb2YgdmFsdWVzIHNlbnQgaW4gdGhlIHZlcnRleCBidWZmZXIuXG4gICAgICogcG9zaXRpb25YLCBwb3NpdGlvblksIGNvbG9yUiwgY29sb3JHLCBjb2xvckIgPSA1XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy52ZXJ0U2l6ZSA9IDU7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgc2l6ZSBvZiB0aGUgdmVydGV4IGluZm9ybWF0aW9uIGluIGJ5dGVzLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMudmVydEJ5dGVTaXplID0gdGhpcy52ZXJ0U2l6ZSAqIDQ7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgbnVtYmVyIG9mIGltYWdlcyBpbiB0aGUgU3ByaXRlQmF0Y2ggYmVmb3JlIGl0IGZsdXNoZXMuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy5zaXplID0gQ09OU1QuU1BSSVRFX0JBVENIX1NJWkU7IC8vIDIwMDAgaXMgYSBuaWNlIGJhbGFuY2UgYmV0d2VlbiBtb2JpbGUgLyBkZXNrdG9wXG5cbiAgICAvLyB0aGUgdG90YWwgbnVtYmVyIG9mIGJ5dGVzIGluIG91ciBiYXRjaFxuICAgIHZhciBudW1WZXJ0cyA9ICh0aGlzLnNpemUgKiA0KSAqIHRoaXMudmVydEJ5dGVTaXplO1xuXG4gICAgLy8gdGhlIHRvdGFsIG51bWJlciBvZiBpbmRpY2VzIGluIG91ciBiYXRjaCwgdGhlcmUgYXJlIDYgcG9pbnRzIHBlciBxdWFkLlxuICAgIHZhciBudW1JbmRpY2VzID0gdGhpcy5zaXplICogNjtcblxuICAgIC8qKlxuICAgICAqIEhvbGRzIHRoZSB2ZXJ0ZXggZGF0YSB0aGF0IHdpbGwgYmUgc2VudCB0byB0aGUgdmVydGV4IHNoYWRlci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge0FycmF5QnVmZmVyfVxuICAgICAqL1xuICAgIHRoaXMudmVydGljZXMgPSBuZXcgQXJyYXlCdWZmZXIobnVtVmVydHMpO1xuXG4gICAgLyoqXG4gICAgICogVmlldyBvbiB0aGUgdmVydGljZXMgYXMgYSBGbG9hdDMyQXJyYXkgZm9yIHBvc2l0aW9uc1xuICAgICAqXG4gICAgICogQG1lbWJlciB7RmxvYXQzMkFycmF5fVxuICAgICAqL1xuICAgIHRoaXMucG9zaXRpb25zID0gbmV3IEZsb2F0MzJBcnJheSh0aGlzLnZlcnRpY2VzKTtcbiAgICBcbiAgICAvKipcbiAgICAgKiBWaWV3IG9uIHRoZSB2ZXJ0aWNlcyBhcyBhIFVpbnQzMkFycmF5IGZvciB1dnNcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge0Zsb2F0MzJBcnJheX1cbiAgICAgKi9cbiAgICB0aGlzLnV2cyA9IG5ldyBVaW50MzJBcnJheSh0aGlzLnZlcnRpY2VzKTtcblxuICAgIC8qKlxuICAgICAqIFZpZXcgb24gdGhlIHZlcnRpY2VzIGFzIGEgVWludDMyQXJyYXkgZm9yIGNvbG9yc1xuICAgICAqXG4gICAgICogQG1lbWJlciB7VWludDMyQXJyYXl9XG4gICAgICovXG4gICAgdGhpcy5jb2xvcnMgPSBuZXcgVWludDMyQXJyYXkodGhpcy52ZXJ0aWNlcyk7XG5cbiAgICAvKipcbiAgICAgKiBIb2xkcyB0aGUgaW5kaWNlcyBvZiB0aGUgZ2VvbWV0cnkgKHF1YWRzKSB0byBkcmF3XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtVaW50MTZBcnJheX1cbiAgICAgKi9cbiAgICB0aGlzLmluZGljZXMgPSBjcmVhdGVJbmRpY2VzRm9yUXVhZHModGhpcy5zaXplKVxuXG4gICAgLyoqXG4gICAgICogVGhlIGRlZmF1bHQgc2hhZGVyIHRoYXQgaXMgdXNlZCBpZiBhIHNwcml0ZSBkb2Vzbid0IGhhdmUgYSBtb3JlIHNwZWNpZmljIG9uZS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuU2hhZGVyfVxuICAgICAqL1xuICAgIHRoaXMuc2hhZGVyID0gbnVsbDtcblxuICAgIHRoaXMudGV4dHVyZUNvdW50ID0gMDtcbiAgICB0aGlzLmN1cnJlbnRJbmRleCA9IDA7XG4gIFxuICAgIHRoaXMuZ3JvdXBDb3VudCA9IDA7XG4gICAgdGhpcy5ncm91cHMgPSBbXTtcbiAgICBcbiAgICAvL1RPRE8gLSAzMDAgaXMgYSBiaXQgbWFnaWMsIGZpZ3VyZSBvdXQgYSBuaWNlciBhbW91bnQhXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLnNpemU7IGkrKykgXG4gICAge1xuICAgICAgICB0aGlzLmdyb3Vwc1tpXSA9IHt0ZXh0dXJlczpbXSwgdGV4dHVyZUNvdW50OjAsIGlkczpbXSwgc2l6ZTowLCBzdGFydDowLCBibGVuZDowfTsgXG4gICAgfTtcbiAgICBcbiAgICB0aGlzLmN1cnJlbnRHcm91cCA9IHRoaXMuZ3JvdXBzW3RoaXMuZ3JvdXBDb3VudCsrXTtcblxuICAgIHRoaXMuY3VycmVudFRleHR1cmUgPSBudWxsOyAgICBcbn1cblxuXG5TcHJpdGVSZW5kZXJlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKE9iamVjdFJlbmRlcmVyLnByb3RvdHlwZSk7XG5TcHJpdGVSZW5kZXJlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBTcHJpdGVSZW5kZXJlcjtcbm1vZHVsZS5leHBvcnRzID0gU3ByaXRlUmVuZGVyZXI7XG5cbldlYkdMUmVuZGVyZXIucmVnaXN0ZXJQbHVnaW4oJ3Nwcml0ZScsIFNwcml0ZVJlbmRlcmVyKTtcblxuLyoqXG4gKiBTZXRzIHVwIHRoZSByZW5kZXJlciBjb250ZXh0IGFuZCBuZWNlc3NhcnkgYnVmZmVycy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIGdsIHtXZWJHTFJlbmRlcmluZ0NvbnRleHR9IHRoZSBjdXJyZW50IFdlYkdMIGRyYXdpbmcgY29udGV4dFxuICovXG5TcHJpdGVSZW5kZXJlci5wcm90b3R5cGUub25Db250ZXh0Q2hhbmdlID0gZnVuY3Rpb24gKClcbntcbiAgICB2YXIgZ2wgPSB0aGlzLnJlbmRlcmVyLmdsO1xuXG4gICAgdGhpcy5NQVhfVEVYVFVFUyA9IGdsLmdldFBhcmFtZXRlcihnbC5NQVhfVEVYVFVSRV9JTUFHRV9VTklUUyk7XG5cbiAgICB0aGlzLl9zaGFkZXIgPSBnZW5lcmF0ZU11bHRpVGV4dHVyZVNoYWRlcihnbCwgdGhpcy5NQVhfVEVYVFVFUykvL25ldyBUZXh0dXJlU2hhZGVyKGdsKTtcblxuICAgIC8vIHNldHVwIGRlZmF1bHQgc2hhZGVyXG4gICAgdGhpcy5zaGFkZXIgPSB0aGlzLnJlbmRlcmVyLnNoYWRlck1hbmFnZXIuZGVmYXVsdFNoYWRlcjtcblxuICAgIC8vIGNyZWF0ZSBhIGNvdXBsZSBvZiBidWZmZXJzXG4gICAgdGhpcy52ZXJ0ZXhCdWZmZXIgPSBnbENvcmUuR0xCdWZmZXIuY3JlYXRlVmVydGV4QnVmZmVyKGdsLCBudWxsLCBnbC5EWU5BTUlDX0RSQVcpO1xuICAgIHRoaXMuaW5kZXhCdWZmZXIgPSBnbENvcmUuR0xCdWZmZXIuY3JlYXRlSW5kZXhCdWZmZXIoZ2wsIHRoaXMuaW5kaWNlcywgZ2wuU1RBVElDX0RSQVcpO1xuXG4gICAgLy8gYnVpbGQgdGhlIHZhbyBvYmplY3QgdGhhdCB3aWxsIHJlbmRlci4uXG4gICAgdGhpcy52YW8gPSBuZXcgZ2xDb3JlLlZlcnRleEFycmF5T2JqZWN0KGdsKTtcblxuICAgIHRoaXMudmFvLmFkZEluZGV4KHRoaXMuaW5kZXhCdWZmZXIpO1xuICAgIHRoaXMudmFvLmFkZEF0dHJpYnV0ZSh0aGlzLnZlcnRleEJ1ZmZlciwgdGhpcy5fc2hhZGVyLmF0dHJpYnV0ZXMuYVZlcnRleFBvc2l0aW9uLCBnbC5GTE9BVCwgZmFsc2UsIHRoaXMudmVydEJ5dGVTaXplLCAwKTtcbiAgICB0aGlzLnZhby5hZGRBdHRyaWJ1dGUodGhpcy52ZXJ0ZXhCdWZmZXIsIHRoaXMuX3NoYWRlci5hdHRyaWJ1dGVzLmFUZXh0dXJlQ29vcmQsIGdsLlVOU0lHTkVEX1NIT1JULCB0cnVlLCB0aGlzLnZlcnRCeXRlU2l6ZSwgMiAqIDQpO1xuICAgIHRoaXMudmFvLmFkZEF0dHJpYnV0ZSh0aGlzLnZlcnRleEJ1ZmZlciwgdGhpcy5fc2hhZGVyLmF0dHJpYnV0ZXMuYUNvbG9yLCBnbC5VTlNJR05FRF9CWVRFLCB0cnVlLCB0aGlzLnZlcnRCeXRlU2l6ZSwgMyAqIDQpO1xuICAgIHRoaXMudmFvLmFkZEF0dHJpYnV0ZSh0aGlzLnZlcnRleEJ1ZmZlciwgdGhpcy5fc2hhZGVyLmF0dHJpYnV0ZXMuYVRleHR1cmVJZCwgZ2wuRkxPQVQsIGZhbHNlLCB0aGlzLnZlcnRCeXRlU2l6ZSwgNCAqIDQpO1xuXG4gICAgdGhpcy5jdXJyZW50QmxlbmRNb2RlID0gOTk5OTk7XG59O1xuXG4vKipcbiAqIFJlbmRlcnMgdGhlIHNwcml0ZSBvYmplY3QuXG4gKlxuICogQHBhcmFtIHNwcml0ZSB7UElYSS5TcHJpdGV9IHRoZSBzcHJpdGUgdG8gcmVuZGVyIHdoZW4gdXNpbmcgdGhpcyBzcHJpdGViYXRjaFxuICovXG5TcHJpdGVSZW5kZXJlci5wcm90b3R5cGUucmVuZGVyID0gZnVuY3Rpb24gKHNwcml0ZSlcbntcbiAgICAvL1RPRE8gc2V0IGJsZW5kIG1vZGVzLi5cbiAgICAvLyBjaGVjayB0ZXh0dXJlLi5cbiAgICBpZiAodGhpcy5jdXJyZW50SW5kZXggPj0gdGhpcy5zaXplKVxuICAgIHtcbiAgICAgICAgdGhpcy5mbHVzaCgpO1xuICAgIH1cblxuICBcbiAgICAvLyBnZXQgdGhlIHV2cyBmb3IgdGhlIHRleHR1cmVcbiAgIFxuXG4gICAgLy8gaWYgdGhlIHV2cyBoYXZlIG5vdCB1cGRhdGVkIHRoZW4gbm8gcG9pbnQgcmVuZGVyaW5nIGp1c3QgeWV0IVxuICAgIGlmICghc3ByaXRlLnRleHR1cmUuX3V2cylcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAgLy8gcHVzaCBhIHRleHR1cmUuXG4gICAgLy8gaW5jcmVtZW50IHRoZSBiYXRjaHNpemVcbiAgICB2YXIgbmV4dFRleHR1cmUgPSAgc3ByaXRlLnRleHR1cmUuYmFzZVRleHR1cmU7XG4gICAgdmFyIGN1cnJlbnRHcm91cCA9IHRoaXMuY3VycmVudEdyb3VwO1xuICAgIHZhciBpO1xuXG4gICAgaWYodGhpcy5jdXJyZW50VGV4dHVyZSAhPT0gbmV4dFRleHR1cmUpXG4gICAge1xuICAgICAgICB0aGlzLmN1cnJlbnRUZXh0dXJlID0gbmV4dFRleHR1cmU7XG4gICAgICAgIFxuICAgICAgICBpZighbmV4dFRleHR1cmUuX2VuYWJsZWQpXG4gICAgICAgIHtcbiAgICAgICAgICAgIG5leHRUZXh0dXJlLl9lbmFibGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIG5leHRUZXh0dXJlLl9pZCA9IHRoaXMudGV4dHVyZUNvdW50O1xuICAgICAgICAgICAgXG4gICAgICAgICAgICBpZih0aGlzLnRleHR1cmVDb3VudCA9PT0gdGhpcy5NQVhfVEVYVFVFUylcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBmb3IgKCBpID0gMDsgaSA8IGN1cnJlbnRHcm91cC50ZXh0dXJlQ291bnQ7IGkrKykgXG4gICAgICAgICAgICAgICAgeyAgICAgXG4gICAgICAgICAgICAgICAgICAgIGN1cnJlbnRHcm91cC50ZXh0dXJlc1tpXS5fZW5hYmxlZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICB0aGlzLnRleHR1cmVDb3VudCA9IDA7XG5cbiAgICAgICAgICAgICAgICBjdXJyZW50R3JvdXAuc2l6ZSA9IHRoaXMuY3VycmVudEluZGV4IC0gY3VycmVudEdyb3VwLnN0YXJ0O1xuICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgY3VycmVudEdyb3VwID0gdGhpcy5jdXJyZW50R3JvdXAgPSB0aGlzLmdyb3Vwc1t0aGlzLmdyb3VwQ291bnQrK107XG4gICAgICAgICAgICAgICAgY3VycmVudEdyb3VwLnRleHR1cmVDb3VudCA9IDA7XG4gICAgICAgICAgICAgICAgY3VycmVudEdyb3VwLnN0YXJ0ID0gdGhpcy5jdXJyZW50SW5kZXg7XG4gICAgICAgICAgICAgICAgXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGN1cnJlbnRHcm91cC50ZXh0dXJlc1tjdXJyZW50R3JvdXAudGV4dHVyZUNvdW50KytdID0gbmV4dFRleHR1cmU7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnRleHR1cmVDb3VudCsrO1xuICAgIH1cblxuICAgIC8vIFRPRE8gdHJpbT8/XG4gICAgdmFyIGluZGV4ID0gdGhpcy5jdXJyZW50SW5kZXggKiB0aGlzLnZlcnRCeXRlU2l6ZTtcblxuICAgIHRoaXMuY3VycmVudEluZGV4Kys7XG5cbiAgICAvLyB1cGxvYWQgdGhlIHNwcml0ZSBlbGVtZXRucy4uLlxuICAgIC8vIHRoZXkgaGF2ZSBhbGwgcmVhZHkgYmVlbiBjYWxjdWxhdGVkIHNvIHdlIGp1c3QgbmVlZCB0byBwdXNoIHRoZW0gaW50byB0aGUgYnVmZmVyLlxuICAgIHZhciBjb2xvcnMgPSB0aGlzLmNvbG9ycztcbiAgICB2YXIgcG9zaXRpb25zID0gdGhpcy5wb3NpdGlvbnM7XG4gICAgdmFyIHZlcnRleERhdGEgPSBzcHJpdGUudmVydGV4RGF0YVxuICAgIHZhciB0aW50ID0gKHNwcml0ZS50aW50ID4+IDE2KSArIChzcHJpdGUudGludCAmIDB4ZmYwMCkgKyAoKHNwcml0ZS50aW50ICYgMHhmZikgPDwgMTYpICsgKHNwcml0ZS53b3JsZEFscGhhICogMjU1IDw8IDI0KTtcbiAgICB2YXIgdXZzID0gc3ByaXRlLnRleHR1cmUuX3V2cy51dnNfdWludDMyO1xuICAgIC8veHlcbiAgICBwb3NpdGlvbnNbaW5kZXgrK10gPSB2ZXJ0ZXhEYXRhWzBdO1xuICAgIHBvc2l0aW9uc1tpbmRleCsrXSA9IHZlcnRleERhdGFbMV07XG4gICAgdGhpcy51dnNbaW5kZXgrK10gPSB1dnNbMF07XG4gICAgY29sb3JzW2luZGV4KytdID0gdGludDtcbiAgICBwb3NpdGlvbnNbaW5kZXgrK10gPSBuZXh0VGV4dHVyZS5faWQ7IFxuICAgIFxuICAgIC8vIHh5XG4gICAgcG9zaXRpb25zW2luZGV4KytdID0gdmVydGV4RGF0YVsyXTtcbiAgICBwb3NpdGlvbnNbaW5kZXgrK10gPSB2ZXJ0ZXhEYXRhWzNdO1xuICAgIHRoaXMudXZzW2luZGV4KytdID0gdXZzWzFdO1xuICAgIGNvbG9yc1tpbmRleCsrXSA9IHRpbnQ7XG4gICAgcG9zaXRpb25zW2luZGV4KytdID0gbmV4dFRleHR1cmUuX2lkO1xuXG4gICAgIC8vIHh5XG4gICAgcG9zaXRpb25zW2luZGV4KytdID0gdmVydGV4RGF0YVs0XTtcbiAgICBwb3NpdGlvbnNbaW5kZXgrK10gPSB2ZXJ0ZXhEYXRhWzVdO1xuICAgIHRoaXMudXZzW2luZGV4KytdID0gdXZzWzJdO1xuICAgIGNvbG9yc1tpbmRleCsrXSA9IHRpbnQ7XG4gICAgcG9zaXRpb25zW2luZGV4KytdID0gbmV4dFRleHR1cmUuX2lkO1xuXG4gICAgLy8geHlcbiAgICBwb3NpdGlvbnNbaW5kZXgrK10gPSB2ZXJ0ZXhEYXRhWzZdO1xuICAgIHBvc2l0aW9uc1tpbmRleCsrXSA9IHZlcnRleERhdGFbN107XG4gICAgdGhpcy51dnNbaW5kZXgrK10gPSB1dnNbM107XG4gICAgY29sb3JzW2luZGV4KytdID0gdGludDtcbiAgICBwb3NpdGlvbnNbaW5kZXgrK10gPSBuZXh0VGV4dHVyZS5faWQ7XG59O1xuXG4vKipcbiAqIFJlbmRlcnMgdGhlIGNvbnRlbnQgYW5kIGVtcHRpZXMgdGhlIGN1cnJlbnQgYmF0Y2guXG4gKlxuICovXG5TcHJpdGVSZW5kZXJlci5wcm90b3R5cGUuZmx1c2ggPSBmdW5jdGlvbiAoKVxue1xuICAgIGlmICh0aGlzLmN1cnJlbnRJbmRleCA9PT0gMClyZXR1cm47XG5cbiAgICB2YXIgZ2wgPSB0aGlzLnJlbmRlcmVyLmdsO1xuXG5cbiAgICB0aGlzLmN1cnJlbnRHcm91cC5zaXplID0gdGhpcy5jdXJyZW50SW5kZXggLSB0aGlzLmN1cnJlbnRHcm91cC5zdGFydDtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuY3VycmVudEdyb3VwLnRleHR1cmVDb3VudDsgaSsrKSBcbiAgICB7ICAgICBcbiAgICAgICAgdGhpcy5jdXJyZW50R3JvdXAudGV4dHVyZXNbaV0uX2VuYWJsZWQgPSBmYWxzZTtcbiAgICB9O1xuICAgXG4gICAgLy8gZG8gc29tZSBzbWFydCBhcnJheSBzdHVmZi4uXG4gICAgLy8gZG91YmxlIHNpemUgc28gd2UgZG9udCBhbHdheSBzdWJhcnJheSB0aGUgZWxlbWVudHMuLlxuICAgIC8vIHVwbG9hZCB0aGUgdmVydHMgdG8gdGhlIGJ1ZmZlclxuICAgIGlmICh0aGlzLmN1cnJlbnRCYXRjaFNpemUgPiAoIHRoaXMuc2l6ZSAqIDAuNSApIClcbiAgICB7XG4gICAgICAgIHRoaXMudmVydGV4QnVmZmVyLnVwbG9hZCh0aGlzLnZlcnRpY2VzLCAwLCB0cnVlKTtcbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgLy8gbyBrIC4uIHN1YiBhcnJheSBpcyBTTE9XPj9cbiAgICAgICAgdmFyIHZpZXcgPSB0aGlzLnBvc2l0aW9ucy5zdWJhcnJheSgwLCB0aGlzLmN1cnJlbnRJbmRleCAqIHRoaXMudmVydEJ5dGVTaXplKTtcbiAgICAgICAgdGhpcy52ZXJ0ZXhCdWZmZXIudXBsb2FkKHZpZXcsIDAsIHRydWUpO1xuICAgIH1cblxuICAgIC8vIGJpbmQgc2hhZGVyLi5cbiAgICB0aGlzLnJlbmRlcmVyLmJpbmRTaGFkZXIodGhpcy5fc2hhZGVyKTtcbiAgICB0aGlzLnJlbmRlcmVyLmJsZW5kTW9kZU1hbmFnZXIuc2V0QmxlbmRNb2RlKCAwICk7XG5cbiAgICAvLy8gcmVuZGVyIHRoZSBncm91cHMuLlxuICAgIGZvciAoaSA9IDA7IGkgPCB0aGlzLmdyb3VwQ291bnQ7IGkrKykge1xuICAgICAgICBcbiAgICAgICAgdmFyIGdyb3VwID0gdGhpcy5ncm91cHNbaV07XG5cbiAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBncm91cC50ZXh0dXJlQ291bnQ7IGorKykge1xuICAgICAgICAgICAgdGhpcy5yZW5kZXJlci5iaW5kVGV4dHVyZShncm91cC50ZXh0dXJlc1tqXSwgaik7XG4gICAgICAgIH07XG5cbiAgICAgICAgZ2wuZHJhd0VsZW1lbnRzKGdsLlRSSUFOR0xFUywgZ3JvdXAuc2l6ZSAqIDYsIGdsLlVOU0lHTkVEX1NIT1JULCBncm91cC5zdGFydCAqIDYgKiAyKTtcbiAgICB9O1xuXG4gICAgLy8gcmVzZXQgZWxlbWVudHMgZm9yIHRoZSBuZXh0IGZsdXNoXG4gICAgdGhpcy5jdXJyZW50VGV4dHVyZSA9IG51bGw7XG4gICAgdGhpcy5jdXJyZW50SW5kZXggPSAwO1xuICAgIHRoaXMudGV4dHVyZUNvdW50ID0gMDtcbiAgICB0aGlzLmdyb3VwQ291bnQgPSAwO1xuICAgIFxuICAgIHRoaXMuY3VycmVudEdyb3VwID0gdGhpcy5ncm91cHNbdGhpcy5ncm91cENvdW50KytdO1xuICAgIHRoaXMuY3VycmVudEdyb3VwLnRleHR1cmVDb3VudCA9IDA7XG59O1xuXG4vKipcbiAqIFN0YXJ0cyBhIG5ldyBzcHJpdGUgYmF0Y2guXG4gKlxuICovXG5TcHJpdGVSZW5kZXJlci5wcm90b3R5cGUuc3RhcnQgPSBmdW5jdGlvbiAoKVxue1xuICAgIHRoaXMudmFvLmJpbmQoKTtcbn07XG5cblNwcml0ZVJlbmRlcmVyLnByb3RvdHlwZS5zdG9wID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLmZsdXNoKCk7XG4gICAgdGhpcy52YW8udW5iaW5kKCk7XG59O1xuLyoqXG4gKiBEZXN0cm95cyB0aGUgU3ByaXRlQmF0Y2guXG4gKlxuICovXG5TcHJpdGVSZW5kZXJlci5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy52ZXJ0ZXhCdWZmZXIuZGVzdHJveSgpO1xuICAgIHRoaXMuaW5kZXhCdWZmZXIuZGVzdHJveSgpO1xuXG4gICAgT2JqZWN0UmVuZGVyZXIucHJvdG90eXBlLmRlc3Ryb3kuY2FsbCh0aGlzKTtcblxuICAgIHRoaXMuc2hhZGVyLmRlc3Ryb3koKTtcblxuICAgIHRoaXMucmVuZGVyZXIgPSBudWxsO1xuXG4gICAgdGhpcy52ZXJ0aWNlcyA9IG51bGw7XG4gICAgdGhpcy5wb3NpdGlvbnMgPSBudWxsO1xuICAgIHRoaXMuY29sb3JzID0gbnVsbDtcbiAgICB0aGlzLmluZGljZXMgPSBudWxsO1xuXG4gICAgdGhpcy52ZXJ0ZXhCdWZmZXIgPSBudWxsO1xuICAgIHRoaXMuaW5kZXhCdWZmZXIgPSBudWxsO1xuXG4gICAgdGhpcy5zcHJpdGVzID0gbnVsbDtcbiAgICB0aGlzLnNoYWRlciA9IG51bGw7XG59O1xuIiwidmFyIFNoYWRlciA9IHJlcXVpcmUoJ3BpeGktZ2wtY29yZScpLkdMU2hhZGVyO1xuXG5cbmZ1bmN0aW9uIGdlbmVyYXRlTXVsdGlUZXh0dXJlU2hhZGVyKGdsLCBtYXhUZXh0dXJlcylcbntcbiAgICB2YXIgdmVydGV4U3JjID0gXCJwcmVjaXNpb24gbG93cCBmbG9hdDtcXG5hdHRyaWJ1dGUgdmVjMiBhVmVydGV4UG9zaXRpb247XFxuYXR0cmlidXRlIHZlYzIgYVRleHR1cmVDb29yZDtcXG5hdHRyaWJ1dGUgdmVjNCBhQ29sb3I7XFxuYXR0cmlidXRlIGZsb2F0IGFUZXh0dXJlSWQ7XFxuXFxudW5pZm9ybSBtYXQzIHByb2plY3Rpb25NYXRyaXg7XFxuXFxudmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7XFxudmFyeWluZyB2ZWM0IHZDb2xvcjtcXG52YXJ5aW5nIGZsb2F0IHZUZXh0dXJlSWQ7XFxuXFxudm9pZCBtYWluKHZvaWQpe1xcbiAgIGdsX1Bvc2l0aW9uID0gdmVjNCgocHJvamVjdGlvbk1hdHJpeCAqIHZlYzMoYVZlcnRleFBvc2l0aW9uLCAxLjApKS54eSwgMC4wLCAxLjApO1xcbiAgIHZUZXh0dXJlQ29vcmQgPSBhVGV4dHVyZUNvb3JkO1xcbiAgIHZUZXh0dXJlSWQgPSBhVGV4dHVyZUlkO1xcbiAgIHZDb2xvciA9IHZlYzQoYUNvbG9yLnJnYiAqIGFDb2xvci5hLCBhQ29sb3IuYSk7XFxufVwiO1xuICAgIHZhciBmcmFnbWVudFNyYyA9ICdwcmVjaXNpb24gbG93cCBmbG9hdDtcXG5cXG4nICsgZ2VuZXJhdGVTYW1wbGVTcmMobWF4VGV4dHVyZXMpICsgXCJcXG5cXG5cIiArIGZyYWdUZW1wbGF0ZVxuXG4gICAgZnJhZ21lbnRTcmMgPSBmcmFnbWVudFNyYy5yZXBsYWNlKC9cXCVcXCUvZ2ksICcxNicpO1xuXG4gICAgdmFyIHNoYWRlciA9IG5ldyBTaGFkZXIoZ2wsIHZlcnRleFNyYywgZnJhZ21lbnRTcmMpO1xuXG5cbiAgICB2YXIgc2FtcGxlVmFsdWVzID0gW107XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBtYXhUZXh0dXJlczsgaSsrKSB7XG4gICAgICAgIHNhbXBsZVZhbHVlc1tpXSA9IGk7XG4gICAgfTtcblxuICAgIHNoYWRlci5iaW5kKCk7XG4gICAgc2hhZGVyLnVuaWZvcm1zLnVTYW1wbGVycyA9IHNhbXBsZVZhbHVlcztcblxuICAgIHJldHVybiBzaGFkZXI7XG59XG5cbmZ1bmN0aW9uIGdlbmVyYXRlU2FtcGxlU3JjKG1heFRleHR1cmVzKVxue1xuICAgIHZhciBzcmMgPSAndmVjNCBnZXRTYW1wbGVGcm9tQXJyYXkoc2FtcGxlcjJEIHRleHR1cmVzWyUlXSwgaW50IG5keCwgdmVjMiB1dikge1xcblxcbnZlYzQgY29sb3I7J1xuXG4gICAgc3JjICs9ICdcXG4nO1xuICAgIHNyYyArPSAnXFxuJztcbiAgICBcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG1heFRleHR1cmVzOyBpKyspIFxuICAgIHtcbiAgICAgICAgaWYoaSA+IDApc3JjICs9ICdcXG5lbHNlICc7XG4gICAgICAgIGlmKGkgPCBtYXhUZXh0dXJlcy0xKXNyYyArPSAnaWYobmR4ID09ICcgKyBpICsgJyknO1xuICAgICAgICBzcmMgKz0gJ1xcbnsnO1xuICAgICAgICBzcmMgKz0gJ1xcblxcdGNvbG9yID0gdGV4dHVyZTJEKHRleHR1cmVzWycraSsnXSwgdXYpOyc7XG4gICAgICAgIHNyYyArPSAnXFxufSc7XG4gICAgfTtcblxuICAgIHNyYyArPSAnXFxuJztcbiAgICBzcmMgKz0gJ1xcbic7XG4gICAgc3JjICs9ICdyZXR1cm4gY29sb3I7JztcbiAgICBzcmMgKz0gJ1xcbn0nO1xuXG4gICAgcmV0dXJuIHNyYztcbn1cblxudmFyIGZyYWdUZW1wbGF0ZSA9IFtcblxuICAgICd2YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDsnLFxuICAgICd2YXJ5aW5nIHZlYzQgdkNvbG9yOycsXG4gICAgJ3ZhcnlpbmcgZmxvYXQgdlRleHR1cmVJZDsnLFxuICAgICd1bmlmb3JtIHNhbXBsZXIyRCB1U2FtcGxlcnNbJSVdOycsXG5cbiAgICAndm9pZCBtYWluKHZvaWQpeycsXG4gICAgICAgICdnbF9GcmFnQ29sb3IgPSBnZXRTYW1wbGVGcm9tQXJyYXkodVNhbXBsZXJzLCBpbnQodlRleHR1cmVJZCksIHZUZXh0dXJlQ29vcmQpICogdkNvbG9yOycsXG4gICAgJ30nXG5dLmpvaW4oJ1xcbicpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGdlbmVyYXRlTXVsdGlUZXh0dXJlU2hhZGVyO1xuIiwidmFyIFNwcml0ZSA9IHJlcXVpcmUoJy4uL3Nwcml0ZXMvU3ByaXRlJyksXG4gICAgVGV4dHVyZSA9IHJlcXVpcmUoJy4uL3RleHR1cmVzL1RleHR1cmUnKSxcbiAgICBtYXRoID0gcmVxdWlyZSgnLi4vbWF0aCcpLFxuICAgIHV0aWxzID0gcmVxdWlyZSgnLi4vdXRpbHMnKSxcbiAgICBDT05TVCA9IHJlcXVpcmUoJy4uL2NvbnN0Jyk7XG5cbi8qKlxuICogQSBUZXh0IE9iamVjdCB3aWxsIGNyZWF0ZSBhIGxpbmUgb3IgbXVsdGlwbGUgbGluZXMgb2YgdGV4dC4gVG8gc3BsaXQgYSBsaW5lIHlvdSBjYW4gdXNlICdcXG4nIGluIHlvdXIgdGV4dCBzdHJpbmcsXG4gKiBvciBhZGQgYSB3b3JkV3JhcCBwcm9wZXJ0eSBzZXQgdG8gdHJ1ZSBhbmQgYW5kIHdvcmRXcmFwV2lkdGggcHJvcGVydHkgd2l0aCBhIHZhbHVlIGluIHRoZSBzdHlsZSBvYmplY3QuXG4gKlxuICogQSBUZXh0IGNhbiBiZSBjcmVhdGVkIGRpcmVjdGx5IGZyb20gYSBzdHJpbmcgYW5kIGEgc3R5bGUgb2JqZWN0XG4gKlxuICogYGBganNcbiAqIHZhciB0ZXh0ID0gbmV3IFBJWEkuVGV4dCgnVGhpcyBpcyBhIHBpeGkgdGV4dCcse2ZvbnQgOiAnMjRweCBBcmlhbCcsIGZpbGwgOiAweGZmMTAxMCwgYWxpZ24gOiAnY2VudGVyJ30pO1xuICogYGBgXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLlNwcml0ZVxuICogQG1lbWJlcm9mIFBJWElcbiAqIEBwYXJhbSB0ZXh0IHtzdHJpbmd9IFRoZSBjb3B5IHRoYXQgeW91IHdvdWxkIGxpa2UgdGhlIHRleHQgdG8gZGlzcGxheVxuICogQHBhcmFtIFtzdHlsZV0ge29iamVjdH0gVGhlIHN0eWxlIHBhcmFtZXRlcnNcbiAqIEBwYXJhbSBbc3R5bGUuZm9udF0ge3N0cmluZ30gZGVmYXVsdCAnYm9sZCAyMHB4IEFyaWFsJyBUaGUgc3R5bGUgYW5kIHNpemUgb2YgdGhlIGZvbnRcbiAqIEBwYXJhbSBbc3R5bGUuZmlsbD0nYmxhY2snXSB7U3RyaW5nfE51bWJlcn0gQSBjYW52YXMgZmlsbHN0eWxlIHRoYXQgd2lsbCBiZSB1c2VkIG9uIHRoZSB0ZXh0IGUuZyAncmVkJywgJyMwMEZGMDAnXG4gKiBAcGFyYW0gW3N0eWxlLmFsaWduPSdsZWZ0J10ge3N0cmluZ30gQWxpZ25tZW50IGZvciBtdWx0aWxpbmUgdGV4dCAoJ2xlZnQnLCAnY2VudGVyJyBvciAncmlnaHQnKSwgZG9lcyBub3QgYWZmZWN0IHNpbmdsZSBsaW5lIHRleHRcbiAqIEBwYXJhbSBbc3R5bGUuc3Ryb2tlXSB7U3RyaW5nfE51bWJlcn0gQSBjYW52YXMgZmlsbHN0eWxlIHRoYXQgd2lsbCBiZSB1c2VkIG9uIHRoZSB0ZXh0IHN0cm9rZSBlLmcgJ2JsdWUnLCAnI0ZDRkYwMCdcbiAqIEBwYXJhbSBbc3R5bGUuc3Ryb2tlVGhpY2tuZXNzPTBdIHtudW1iZXJ9IEEgbnVtYmVyIHRoYXQgcmVwcmVzZW50cyB0aGUgdGhpY2tuZXNzIG9mIHRoZSBzdHJva2UuIERlZmF1bHQgaXMgMCAobm8gc3Ryb2tlKVxuICogQHBhcmFtIFtzdHlsZS53b3JkV3JhcD1mYWxzZV0ge2Jvb2xlYW59IEluZGljYXRlcyBpZiB3b3JkIHdyYXAgc2hvdWxkIGJlIHVzZWRcbiAqIEBwYXJhbSBbc3R5bGUud29yZFdyYXBXaWR0aD0xMDBdIHtudW1iZXJ9IFRoZSB3aWR0aCBhdCB3aGljaCB0ZXh0IHdpbGwgd3JhcCwgaXQgbmVlZHMgd29yZFdyYXAgdG8gYmUgc2V0IHRvIHRydWVcbiAqIEBwYXJhbSBbc3R5bGUubGluZUhlaWdodF0ge251bWJlcn0gVGhlIGxpbmUgaGVpZ2h0LCBhIG51bWJlciB0aGF0IHJlcHJlc2VudHMgdGhlIHZlcnRpY2FsIHNwYWNlIHRoYXQgYSBsZXR0ZXIgdXNlc1xuICogQHBhcmFtIFtzdHlsZS5kcm9wU2hhZG93PWZhbHNlXSB7Ym9vbGVhbn0gU2V0IGEgZHJvcCBzaGFkb3cgZm9yIHRoZSB0ZXh0XG4gKiBAcGFyYW0gW3N0eWxlLmRyb3BTaGFkb3dDb2xvcj0nIzAwMDAwMCddIHtzdHJpbmd9IEEgZmlsbCBzdHlsZSB0byBiZSB1c2VkIG9uIHRoZSBkcm9wc2hhZG93IGUuZyAncmVkJywgJyMwMEZGMDAnXG4gKiBAcGFyYW0gW3N0eWxlLmRyb3BTaGFkb3dBbmdsZT1NYXRoLlBJLzRdIHtudW1iZXJ9IFNldCBhIGFuZ2xlIG9mIHRoZSBkcm9wIHNoYWRvd1xuICogQHBhcmFtIFtzdHlsZS5kcm9wU2hhZG93RGlzdGFuY2U9NV0ge251bWJlcn0gU2V0IGEgZGlzdGFuY2Ugb2YgdGhlIGRyb3Agc2hhZG93XG4gKiBAcGFyYW0gW3N0eWxlLmRyb3BTaGFkb3dCbHVyPTBdIHtudW1iZXJ9IFNldCBhIHNoYWRvdyBibHVyIHJhZGl1c1xuICogQHBhcmFtIFtzdHlsZS5wYWRkaW5nPTBdIHtudW1iZXJ9IE9jY2FzaW9uYWxseSBzb21lIGZvbnRzIGFyZSBjcm9wcGVkIG9uIHRvcCBvciBib3R0b20uIEFkZGluZyBzb21lIHBhZGRpbmcgd2lsbFxuICogICAgICBwcmV2ZW50IHRoaXMgZnJvbSBoYXBwZW5pbmcgYnkgYWRkaW5nIHBhZGRpbmcgdG8gdGhlIHRvcCBhbmQgYm90dG9tIG9mIHRleHQgaGVpZ2h0LlxuICogQHBhcmFtIFtzdHlsZS50ZXh0QmFzZWxpbmU9J2FscGhhYmV0aWMnXSB7c3RyaW5nfSBUaGUgYmFzZWxpbmUgb2YgdGhlIHRleHQgdGhhdCBpcyByZW5kZXJlZC5cbiAqIEBwYXJhbSBbc3R5bGUubGluZUpvaW49J21pdGVyJ10ge3N0cmluZ30gVGhlIGxpbmVKb2luIHByb3BlcnR5IHNldHMgdGhlIHR5cGUgb2YgY29ybmVyIGNyZWF0ZWQsIGl0IGNhbiByZXNvbHZlXG4gKiAgICAgIHNwaWtlZCB0ZXh0IGlzc3Vlcy4gRGVmYXVsdCBpcyAnbWl0ZXInIChjcmVhdGVzIGEgc2hhcnAgY29ybmVyKS5cbiAqIEBwYXJhbSBbc3R5bGUubWl0ZXJMaW1pdD0xMF0ge251bWJlcn0gVGhlIG1pdGVyIGxpbWl0IHRvIHVzZSB3aGVuIHVzaW5nIHRoZSAnbWl0ZXInIGxpbmVKb2luIG1vZGUuIFRoaXMgY2FuIHJlZHVjZVxuICogICAgICBvciBpbmNyZWFzZSB0aGUgc3Bpa2luZXNzIG9mIHJlbmRlcmVkIHRleHQuXG4gKi9cbmZ1bmN0aW9uIFRleHQodGV4dCwgc3R5bGUsIHJlc29sdXRpb24pXG57XG4gICAgLyoqXG4gICAgICogVGhlIGNhbnZhcyBlbGVtZW50IHRoYXQgZXZlcnl0aGluZyBpcyBkcmF3biB0b1xuICAgICAqXG4gICAgICogQG1lbWJlciB7SFRNTENhbnZhc0VsZW1lbnR9XG4gICAgICovXG4gICAgdGhpcy5jYW52YXMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdjYW52YXMnKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBjYW52YXMgMmQgY29udGV4dCB0aGF0IGV2ZXJ5dGhpbmcgaXMgZHJhd24gd2l0aFxuICAgICAqIEBtZW1iZXIge0hUTUxDYW52YXNFbGVtZW50fVxuICAgICAqL1xuICAgIHRoaXMuY29udGV4dCA9IHRoaXMuY2FudmFzLmdldENvbnRleHQoJzJkJyk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgcmVzb2x1dGlvbiBvZiB0aGUgY2FudmFzLlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLnJlc29sdXRpb24gPSByZXNvbHV0aW9uIHx8IENPTlNULlJFU09MVVRJT047XG5cbiAgICAvKipcbiAgICAgKiBQcml2YXRlIHRyYWNrZXIgZm9yIHRoZSBjdXJyZW50IHRleHQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtzdHJpbmd9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl90ZXh0ID0gbnVsbDtcblxuICAgIC8qKlxuICAgICAqIFByaXZhdGUgdHJhY2tlciBmb3IgdGhlIGN1cnJlbnQgc3R5bGUuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtvYmplY3R9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9zdHlsZSA9IG51bGw7XG5cbiAgICB2YXIgdGV4dHVyZSA9IFRleHR1cmUuZnJvbUNhbnZhcyh0aGlzLmNhbnZhcyk7XG4gICAgdGV4dHVyZS50cmltID0gbmV3IG1hdGguUmVjdGFuZ2xlKCk7XG4gICAgU3ByaXRlLmNhbGwodGhpcywgdGV4dHVyZSk7XG5cbiAgICB0aGlzLnRleHQgPSB0ZXh0O1xuICAgIHRoaXMuc3R5bGUgPSBzdHlsZTtcbn1cblxuLy8gY29uc3RydWN0b3JcblRleHQucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShTcHJpdGUucHJvdG90eXBlKTtcblRleHQucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gVGV4dDtcbm1vZHVsZS5leHBvcnRzID0gVGV4dDtcblxuVGV4dC5mb250UHJvcGVydGllc0NhY2hlID0ge307XG5UZXh0LmZvbnRQcm9wZXJ0aWVzQ2FudmFzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnY2FudmFzJyk7XG5UZXh0LmZvbnRQcm9wZXJ0aWVzQ29udGV4dCA9IFRleHQuZm9udFByb3BlcnRpZXNDYW52YXMuZ2V0Q29udGV4dCgnMmQnKTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoVGV4dC5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBUaGUgd2lkdGggb2YgdGhlIFRleHQsIHNldHRpbmcgdGhpcyB3aWxsIGFjdHVhbGx5IG1vZGlmeSB0aGUgc2NhbGUgdG8gYWNoaWV2ZSB0aGUgdmFsdWUgc2V0XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuVGV4dCNcbiAgICAgKi9cbiAgICB3aWR0aDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmRpcnR5KVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlVGV4dCgpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5zY2FsZS54ICogdGhpcy5fdGV4dHVyZS5fZnJhbWUud2lkdGg7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnNjYWxlLnggPSB2YWx1ZSAvIHRoaXMuX3RleHR1cmUuX2ZyYW1lLndpZHRoO1xuICAgICAgICAgICAgdGhpcy5fd2lkdGggPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBUaGUgaGVpZ2h0IG9mIHRoZSBUZXh0LCBzZXR0aW5nIHRoaXMgd2lsbCBhY3R1YWxseSBtb2RpZnkgdGhlIHNjYWxlIHRvIGFjaGlldmUgdGhlIHZhbHVlIHNldFxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLlRleHQjXG4gICAgICovXG4gICAgaGVpZ2h0OiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgaWYgKHRoaXMuZGlydHkpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdGhpcy51cGRhdGVUZXh0KCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiAgdGhpcy5zY2FsZS55ICogdGhpcy5fdGV4dHVyZS5fZnJhbWUuaGVpZ2h0O1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5zY2FsZS55ID0gdmFsdWUgLyB0aGlzLl90ZXh0dXJlLl9mcmFtZS5oZWlnaHQ7XG4gICAgICAgICAgICB0aGlzLl9oZWlnaHQgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBTZXQgdGhlIHN0eWxlIG9mIHRoZSB0ZXh0XG4gICAgICpcbiAgICAgKiBAcGFyYW0gW3N0eWxlXSB7b2JqZWN0fSBUaGUgc3R5bGUgcGFyYW1ldGVyc1xuICAgICAqIEBwYXJhbSBbc3R5bGUuZm9udD0nYm9sZCAyMHB0IEFyaWFsJ10ge3N0cmluZ30gVGhlIHN0eWxlIGFuZCBzaXplIG9mIHRoZSBmb250XG4gICAgICogQHBhcmFtIFtzdHlsZS5maWxsPSdibGFjayddIHtzdHJpbmd8bnVtYmVyfSBBIGNhbnZhcyBmaWxsc3R5bGUgdGhhdCB3aWxsIGJlIHVzZWQgb24gdGhlIHRleHQgZWcgJ3JlZCcsICcjMDBGRjAwJ1xuICAgICAqIEBwYXJhbSBbc3R5bGUuYWxpZ249J2xlZnQnXSB7c3RyaW5nfSBBbGlnbm1lbnQgZm9yIG11bHRpbGluZSB0ZXh0ICgnbGVmdCcsICdjZW50ZXInIG9yICdyaWdodCcpLCBkb2VzIG5vdCBhZmZlY3Qgc2luZ2xlIGxpbmUgdGV4dFxuICAgICAqIEBwYXJhbSBbc3R5bGUuc3Ryb2tlPSdibGFjayddIHtzdHJpbmd8bnVtYmVyfSBBIGNhbnZhcyBmaWxsc3R5bGUgdGhhdCB3aWxsIGJlIHVzZWQgb24gdGhlIHRleHQgc3Ryb2tlIGVnICdibHVlJywgJyNGQ0ZGMDAnXG4gICAgICogQHBhcmFtIFtzdHlsZS5zdHJva2VUaGlja25lc3M9MF0ge251bWJlcn0gQSBudW1iZXIgdGhhdCByZXByZXNlbnRzIHRoZSB0aGlja25lc3Mgb2YgdGhlIHN0cm9rZS4gRGVmYXVsdCBpcyAwIChubyBzdHJva2UpXG4gICAgICogQHBhcmFtIFtzdHlsZS53b3JkV3JhcD1mYWxzZV0ge2Jvb2xlYW59IEluZGljYXRlcyBpZiB3b3JkIHdyYXAgc2hvdWxkIGJlIHVzZWRcbiAgICAgKiBAcGFyYW0gW3N0eWxlLndvcmRXcmFwV2lkdGg9MTAwXSB7bnVtYmVyfSBUaGUgd2lkdGggYXQgd2hpY2ggdGV4dCB3aWxsIHdyYXBcbiAgICAgKiBAcGFyYW0gW3N0eWxlLmxpbmVIZWlnaHRdIHtudW1iZXJ9IFRoZSBsaW5lIGhlaWdodCwgYSBudW1iZXIgdGhhdCByZXByZXNlbnRzIHRoZSB2ZXJ0aWNhbCBzcGFjZSB0aGF0IGEgbGV0dGVyIHVzZXNcbiAgICAgKiBAcGFyYW0gW3N0eWxlLmRyb3BTaGFkb3c9ZmFsc2VdIHtib29sZWFufSBTZXQgYSBkcm9wIHNoYWRvdyBmb3IgdGhlIHRleHRcbiAgICAgKiBAcGFyYW0gW3N0eWxlLmRyb3BTaGFkb3dDb2xvcj0nIzAwMDAwMCddIHtzdHJpbmd8bnVtYmVyfSBBIGZpbGwgc3R5bGUgdG8gYmUgdXNlZCBvbiB0aGUgZHJvcHNoYWRvdyBlLmcgJ3JlZCcsICcjMDBGRjAwJ1xuICAgICAqIEBwYXJhbSBbc3R5bGUuZHJvcFNoYWRvd0FuZ2xlPU1hdGguUEkvNl0ge251bWJlcn0gU2V0IGEgYW5nbGUgb2YgdGhlIGRyb3Agc2hhZG93XG4gICAgICogQHBhcmFtIFtzdHlsZS5kcm9wU2hhZG93RGlzdGFuY2U9NV0ge251bWJlcn0gU2V0IGEgZGlzdGFuY2Ugb2YgdGhlIGRyb3Agc2hhZG93XG4gICAgICogQHBhcmFtIFtzdHlsZS5kcm9wU2hhZG93Qmx1cj0wXSB7bnVtYmVyfSBTZXQgYSBzaGFkb3cgYmx1ciByYWRpdXNcbiAgICAgKiBAcGFyYW0gW3N0eWxlLnBhZGRpbmc9MF0ge251bWJlcn0gT2NjYXNpb25hbGx5IHNvbWUgZm9udHMgYXJlIGNyb3BwZWQgb24gdG9wIG9yIGJvdHRvbS4gQWRkaW5nIHNvbWUgcGFkZGluZyB3aWxsXG4gICAgICogICAgICBwcmV2ZW50IHRoaXMgZnJvbSBoYXBwZW5pbmcgYnkgYWRkaW5nIHBhZGRpbmcgdG8gdGhlIHRvcCBhbmQgYm90dG9tIG9mIHRleHQgaGVpZ2h0LlxuICAgICAqIEBwYXJhbSBbc3R5bGUudGV4dEJhc2VsaW5lPSdhbHBoYWJldGljJ10ge3N0cmluZ30gVGhlIGJhc2VsaW5lIG9mIHRoZSB0ZXh0IHRoYXQgaXMgcmVuZGVyZWQuXG4gICAgICogQHBhcmFtIFtzdHlsZS5saW5lSm9pbj0nbWl0ZXInXSB7c3RyaW5nfSBUaGUgbGluZUpvaW4gcHJvcGVydHkgc2V0cyB0aGUgdHlwZSBvZiBjb3JuZXIgY3JlYXRlZCwgaXQgY2FuIHJlc29sdmVcbiAgICAgKiAgICAgIHNwaWtlZCB0ZXh0IGlzc3Vlcy4gRGVmYXVsdCBpcyAnbWl0ZXInIChjcmVhdGVzIGEgc2hhcnAgY29ybmVyKS5cbiAgICAgKiBAcGFyYW0gW3N0eWxlLm1pdGVyTGltaXQ9MTBdIHtudW1iZXJ9IFRoZSBtaXRlciBsaW1pdCB0byB1c2Ugd2hlbiB1c2luZyB0aGUgJ21pdGVyJyBsaW5lSm9pbiBtb2RlLiBUaGlzIGNhbiByZWR1Y2VcbiAgICAgKiAgICAgIG9yIGluY3JlYXNlIHRoZSBzcGlraW5lc3Mgb2YgcmVuZGVyZWQgdGV4dC5cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5UZXh0I1xuICAgICAqL1xuICAgIHN0eWxlOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3N0eWxlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uIChzdHlsZSlcbiAgICAgICAge1xuICAgICAgICAgICAgc3R5bGUgPSBzdHlsZSB8fCB7fTtcblxuICAgICAgICAgICAgaWYgKHR5cGVvZiBzdHlsZS5maWxsID09PSAnbnVtYmVyJykge1xuICAgICAgICAgICAgICAgIHN0eWxlLmZpbGwgPSB1dGlscy5oZXgyc3RyaW5nKHN0eWxlLmZpbGwpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAodHlwZW9mIHN0eWxlLnN0cm9rZSA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgICAgICAgICBzdHlsZS5zdHJva2UgPSB1dGlscy5oZXgyc3RyaW5nKHN0eWxlLnN0cm9rZSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICh0eXBlb2Ygc3R5bGUuZHJvcFNoYWRvd0NvbG9yID09PSAnbnVtYmVyJykge1xuICAgICAgICAgICAgICAgIHN0eWxlLmRyb3BTaGFkb3dDb2xvciA9IHV0aWxzLmhleDJzdHJpbmcoc3R5bGUuZHJvcFNoYWRvd0NvbG9yKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgc3R5bGUuZm9udCA9IHN0eWxlLmZvbnQgfHwgJ2JvbGQgMjBwdCBBcmlhbCc7XG4gICAgICAgICAgICBzdHlsZS5maWxsID0gc3R5bGUuZmlsbCB8fCAnYmxhY2snO1xuICAgICAgICAgICAgc3R5bGUuYWxpZ24gPSBzdHlsZS5hbGlnbiB8fCAnbGVmdCc7XG4gICAgICAgICAgICBzdHlsZS5zdHJva2UgPSBzdHlsZS5zdHJva2UgfHwgJ2JsYWNrJzsgLy9wcm92aWRlIGEgZGVmYXVsdCwgc2VlOiBodHRwczovL2dpdGh1Yi5jb20vcGl4aWpzL3BpeGkuanMvaXNzdWVzLzEzNlxuICAgICAgICAgICAgc3R5bGUuc3Ryb2tlVGhpY2tuZXNzID0gc3R5bGUuc3Ryb2tlVGhpY2tuZXNzIHx8IDA7XG4gICAgICAgICAgICBzdHlsZS53b3JkV3JhcCA9IHN0eWxlLndvcmRXcmFwIHx8IGZhbHNlO1xuICAgICAgICAgICAgc3R5bGUud29yZFdyYXBXaWR0aCA9IHN0eWxlLndvcmRXcmFwV2lkdGggfHwgMTAwO1xuXG4gICAgICAgICAgICBzdHlsZS5kcm9wU2hhZG93ID0gc3R5bGUuZHJvcFNoYWRvdyB8fCBmYWxzZTtcbiAgICAgICAgICAgIHN0eWxlLmRyb3BTaGFkb3dDb2xvciA9IHN0eWxlLmRyb3BTaGFkb3dDb2xvciB8fCAnIzAwMDAwMCc7XG4gICAgICAgICAgICBzdHlsZS5kcm9wU2hhZG93QW5nbGUgPSBzdHlsZS5kcm9wU2hhZG93QW5nbGUgIT09IHVuZGVmaW5lZCA/IHN0eWxlLmRyb3BTaGFkb3dBbmdsZSA6IE1hdGguUEkgLyA2O1xuICAgICAgICAgICAgc3R5bGUuZHJvcFNoYWRvd0Rpc3RhbmNlID0gc3R5bGUuZHJvcFNoYWRvd0Rpc3RhbmNlICE9PSB1bmRlZmluZWQgPyBzdHlsZS5kcm9wU2hhZG93RGlzdGFuY2UgOiA1O1xuICAgICAgICAgICAgc3R5bGUuZHJvcFNoYWRvd0JsdXIgPSBzdHlsZS5kcm9wU2hhZG93Qmx1ciAhPT0gdW5kZWZpbmVkID8gc3R5bGUuZHJvcFNoYWRvd0JsdXIgOiAwOyAvL3NoYWRvd0JsdXIgaXMgJzAnIGJ5IGRlZmF1bHQgYWNjb3JkaW5nIHRvIEhUTUxcblxuICAgICAgICAgICAgc3R5bGUucGFkZGluZyA9IHN0eWxlLnBhZGRpbmcgfHwgMDtcblxuICAgICAgICAgICAgc3R5bGUudGV4dEJhc2VsaW5lID0gc3R5bGUudGV4dEJhc2VsaW5lIHx8ICdhbHBoYWJldGljJztcblxuICAgICAgICAgICAgc3R5bGUubGluZUpvaW4gPSBzdHlsZS5saW5lSm9pbiB8fCAnbWl0ZXInO1xuICAgICAgICAgICAgc3R5bGUubWl0ZXJMaW1pdCA9IHN0eWxlLm1pdGVyTGltaXQgfHwgMTA7XG5cbiAgICAgICAgICAgIHRoaXMuX3N0eWxlID0gc3R5bGU7XG4gICAgICAgICAgICB0aGlzLmRpcnR5ID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBTZXQgdGhlIGNvcHkgZm9yIHRoZSB0ZXh0IG9iamVjdC4gVG8gc3BsaXQgYSBsaW5lIHlvdSBjYW4gdXNlICdcXG4nLlxuICAgICAqXG4gICAgICogQHBhcmFtIHRleHQge3N0cmluZ30gVGhlIGNvcHkgdGhhdCB5b3Ugd291bGQgbGlrZSB0aGUgdGV4dCB0byBkaXNwbGF5XG4gICAgICogQG1lbWJlcm9mIFBJWEkuVGV4dCNcbiAgICAgKi9cbiAgICB0ZXh0OiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24oKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fdGV4dDtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodGV4dCl7XG4gICAgICAgICAgICB0ZXh0ID0gdGV4dC50b1N0cmluZygpIHx8ICcgJztcbiAgICAgICAgICAgIGlmICh0aGlzLl90ZXh0ID09PSB0ZXh0KVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuX3RleHQgPSB0ZXh0O1xuICAgICAgICAgICAgdGhpcy5kaXJ0eSA9IHRydWU7XG4gICAgICAgIH1cbiAgICB9XG59KTtcblxuLyoqXG4gKiBSZW5kZXJzIHRleHQgYW5kIHVwZGF0ZXMgaXQgd2hlbiBuZWVkZWRcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5UZXh0LnByb3RvdHlwZS51cGRhdGVUZXh0ID0gZnVuY3Rpb24gKClcbntcbiAgICB2YXIgc3R5bGUgPSB0aGlzLl9zdHlsZTtcbiAgICB0aGlzLmNvbnRleHQuZm9udCA9IHN0eWxlLmZvbnQ7XG5cbiAgICAvLyB3b3JkIHdyYXBcbiAgICAvLyBwcmVzZXJ2ZSBvcmlnaW5hbCB0ZXh0XG4gICAgdmFyIG91dHB1dFRleHQgPSBzdHlsZS53b3JkV3JhcCA/IHRoaXMud29yZFdyYXAodGhpcy5fdGV4dCkgOiB0aGlzLl90ZXh0O1xuXG4gICAgLy8gc3BsaXQgdGV4dCBpbnRvIGxpbmVzXG4gICAgdmFyIGxpbmVzID0gb3V0cHV0VGV4dC5zcGxpdCgvKD86XFxyXFxufFxccnxcXG4pLyk7XG5cbiAgICAvLyBjYWxjdWxhdGUgdGV4dCB3aWR0aFxuICAgIHZhciBsaW5lV2lkdGhzID0gbmV3IEFycmF5KGxpbmVzLmxlbmd0aCk7XG4gICAgdmFyIG1heExpbmVXaWR0aCA9IDA7XG4gICAgdmFyIGZvbnRQcm9wZXJ0aWVzID0gdGhpcy5kZXRlcm1pbmVGb250UHJvcGVydGllcyhzdHlsZS5mb250KTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxpbmVzLmxlbmd0aDsgaSsrKVxuICAgIHtcbiAgICAgICAgdmFyIGxpbmVXaWR0aCA9IHRoaXMuY29udGV4dC5tZWFzdXJlVGV4dChsaW5lc1tpXSkud2lkdGg7XG4gICAgICAgIGxpbmVXaWR0aHNbaV0gPSBsaW5lV2lkdGg7XG4gICAgICAgIG1heExpbmVXaWR0aCA9IE1hdGgubWF4KG1heExpbmVXaWR0aCwgbGluZVdpZHRoKTtcbiAgICB9XG5cbiAgICB2YXIgd2lkdGggPSBtYXhMaW5lV2lkdGggKyBzdHlsZS5zdHJva2VUaGlja25lc3M7XG4gICAgaWYgKHN0eWxlLmRyb3BTaGFkb3cpXG4gICAge1xuICAgICAgICB3aWR0aCArPSBzdHlsZS5kcm9wU2hhZG93RGlzdGFuY2U7XG4gICAgfVxuXG4gICAgdGhpcy5jYW52YXMud2lkdGggPSAoIHdpZHRoICsgdGhpcy5jb250ZXh0LmxpbmVXaWR0aCApICogdGhpcy5yZXNvbHV0aW9uO1xuXG4gICAgLy8gY2FsY3VsYXRlIHRleHQgaGVpZ2h0XG4gICAgdmFyIGxpbmVIZWlnaHQgPSB0aGlzLnN0eWxlLmxpbmVIZWlnaHQgfHwgZm9udFByb3BlcnRpZXMuZm9udFNpemUgKyBzdHlsZS5zdHJva2VUaGlja25lc3M7XG5cbiAgICB2YXIgaGVpZ2h0ID0gbGluZUhlaWdodCAqIGxpbmVzLmxlbmd0aDtcbiAgICBpZiAoc3R5bGUuZHJvcFNoYWRvdylcbiAgICB7XG4gICAgICAgIGhlaWdodCArPSBzdHlsZS5kcm9wU2hhZG93RGlzdGFuY2U7XG4gICAgfVxuXG4gICAgdGhpcy5jYW52YXMuaGVpZ2h0ID0gKCBoZWlnaHQgKyB0aGlzLl9zdHlsZS5wYWRkaW5nICogMiApICogdGhpcy5yZXNvbHV0aW9uO1xuXG4gICAgdGhpcy5jb250ZXh0LnNjYWxlKCB0aGlzLnJlc29sdXRpb24sIHRoaXMucmVzb2x1dGlvbik7XG5cbiAgICBpZiAobmF2aWdhdG9yLmlzQ29jb29uSlMpXG4gICAge1xuICAgICAgICB0aGlzLmNvbnRleHQuY2xlYXJSZWN0KDAsIDAsIHRoaXMuY2FudmFzLndpZHRoLCB0aGlzLmNhbnZhcy5oZWlnaHQpO1xuXG4gICAgfVxuXG4gICAgLy90aGlzLmNvbnRleHQuZmlsbFN0eWxlPVwiI0ZGMDAwMFwiO1xuICAgIC8vdGhpcy5jb250ZXh0LmZpbGxSZWN0KDAsIDAsIHRoaXMuY2FudmFzLndpZHRoLCB0aGlzLmNhbnZhcy5oZWlnaHQpO1xuXG4gICAgdGhpcy5jb250ZXh0LmZvbnQgPSBzdHlsZS5mb250O1xuICAgIHRoaXMuY29udGV4dC5zdHJva2VTdHlsZSA9IHN0eWxlLnN0cm9rZTtcbiAgICB0aGlzLmNvbnRleHQubGluZVdpZHRoID0gc3R5bGUuc3Ryb2tlVGhpY2tuZXNzO1xuICAgIHRoaXMuY29udGV4dC50ZXh0QmFzZWxpbmUgPSBzdHlsZS50ZXh0QmFzZWxpbmU7XG4gICAgdGhpcy5jb250ZXh0LmxpbmVKb2luID0gc3R5bGUubGluZUpvaW47XG4gICAgdGhpcy5jb250ZXh0Lm1pdGVyTGltaXQgPSBzdHlsZS5taXRlckxpbWl0O1xuXG4gICAgdmFyIGxpbmVQb3NpdGlvblg7XG4gICAgdmFyIGxpbmVQb3NpdGlvblk7XG5cbiAgICBpZiAoc3R5bGUuZHJvcFNoYWRvdylcbiAgICB7XG4gICAgICAgIGlmIChzdHlsZS5kcm9wU2hhZG93Qmx1ciA+IDApIHtcbiAgICAgICAgICAgIHRoaXMuY29udGV4dC5zaGFkb3dDb2xvciA9IHN0eWxlLmRyb3BTaGFkb3dDb2xvcjtcbiAgICAgICAgICAgIHRoaXMuY29udGV4dC5zaGFkb3dCbHVyID0gc3R5bGUuZHJvcFNoYWRvd0JsdXI7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmNvbnRleHQuZmlsbFN0eWxlID0gc3R5bGUuZHJvcFNoYWRvd0NvbG9yO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIHhTaGFkb3dPZmZzZXQgPSBNYXRoLmNvcyhzdHlsZS5kcm9wU2hhZG93QW5nbGUpICogc3R5bGUuZHJvcFNoYWRvd0Rpc3RhbmNlO1xuICAgICAgICB2YXIgeVNoYWRvd09mZnNldCA9IE1hdGguc2luKHN0eWxlLmRyb3BTaGFkb3dBbmdsZSkgKiBzdHlsZS5kcm9wU2hhZG93RGlzdGFuY2U7XG5cbiAgICAgICAgZm9yIChpID0gMDsgaSA8IGxpbmVzLmxlbmd0aDsgaSsrKVxuICAgICAgICB7XG4gICAgICAgICAgICBsaW5lUG9zaXRpb25YID0gc3R5bGUuc3Ryb2tlVGhpY2tuZXNzIC8gMjtcbiAgICAgICAgICAgIGxpbmVQb3NpdGlvblkgPSAoc3R5bGUuc3Ryb2tlVGhpY2tuZXNzIC8gMiArIGkgKiBsaW5lSGVpZ2h0KSArIGZvbnRQcm9wZXJ0aWVzLmFzY2VudDtcblxuICAgICAgICAgICAgaWYgKHN0eWxlLmFsaWduID09PSAncmlnaHQnKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGxpbmVQb3NpdGlvblggKz0gbWF4TGluZVdpZHRoIC0gbGluZVdpZHRoc1tpXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKHN0eWxlLmFsaWduID09PSAnY2VudGVyJylcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBsaW5lUG9zaXRpb25YICs9IChtYXhMaW5lV2lkdGggLSBsaW5lV2lkdGhzW2ldKSAvIDI7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChzdHlsZS5maWxsKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHRoaXMuY29udGV4dC5maWxsVGV4dChsaW5lc1tpXSwgbGluZVBvc2l0aW9uWCArIHhTaGFkb3dPZmZzZXQsIGxpbmVQb3NpdGlvblkgKyB5U2hhZG93T2Zmc2V0ICsgdGhpcy5fc3R5bGUucGFkZGluZyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvL3NldCBjYW52YXMgdGV4dCBzdHlsZXNcbiAgICB0aGlzLmNvbnRleHQuZmlsbFN0eWxlID0gc3R5bGUuZmlsbDtcblxuICAgIC8vZHJhdyBsaW5lcyBsaW5lIGJ5IGxpbmVcbiAgICBmb3IgKGkgPSAwOyBpIDwgbGluZXMubGVuZ3RoOyBpKyspXG4gICAge1xuICAgICAgICBsaW5lUG9zaXRpb25YID0gc3R5bGUuc3Ryb2tlVGhpY2tuZXNzIC8gMjtcbiAgICAgICAgbGluZVBvc2l0aW9uWSA9IChzdHlsZS5zdHJva2VUaGlja25lc3MgLyAyICsgaSAqIGxpbmVIZWlnaHQpICsgZm9udFByb3BlcnRpZXMuYXNjZW50O1xuXG4gICAgICAgIGlmIChzdHlsZS5hbGlnbiA9PT0gJ3JpZ2h0JylcbiAgICAgICAge1xuICAgICAgICAgICAgbGluZVBvc2l0aW9uWCArPSBtYXhMaW5lV2lkdGggLSBsaW5lV2lkdGhzW2ldO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHN0eWxlLmFsaWduID09PSAnY2VudGVyJylcbiAgICAgICAge1xuICAgICAgICAgICAgbGluZVBvc2l0aW9uWCArPSAobWF4TGluZVdpZHRoIC0gbGluZVdpZHRoc1tpXSkgLyAyO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHN0eWxlLnN0cm9rZSAmJiBzdHlsZS5zdHJva2VUaGlja25lc3MpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuY29udGV4dC5zdHJva2VUZXh0KGxpbmVzW2ldLCBsaW5lUG9zaXRpb25YLCBsaW5lUG9zaXRpb25ZICsgdGhpcy5fc3R5bGUucGFkZGluZyk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoc3R5bGUuZmlsbClcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5jb250ZXh0LmZpbGxUZXh0KGxpbmVzW2ldLCBsaW5lUG9zaXRpb25YLCBsaW5lUG9zaXRpb25ZICsgdGhpcy5fc3R5bGUucGFkZGluZyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLnVwZGF0ZVRleHR1cmUoKTtcbn07XG5cbi8qKlxuICogVXBkYXRlcyB0ZXh0dXJlIHNpemUgYmFzZWQgb24gY2FudmFzIHNpemVcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5UZXh0LnByb3RvdHlwZS51cGRhdGVUZXh0dXJlID0gZnVuY3Rpb24gKClcbntcbiAgICB2YXIgdGV4dHVyZSA9IHRoaXMuX3RleHR1cmU7XG5cbiAgICB0ZXh0dXJlLmJhc2VUZXh0dXJlLmhhc0xvYWRlZCA9IHRydWU7XG4gICAgdGV4dHVyZS5iYXNlVGV4dHVyZS5yZXNvbHV0aW9uID0gdGhpcy5yZXNvbHV0aW9uO1xuXG4gICAgdGV4dHVyZS5iYXNlVGV4dHVyZS53aWR0aCA9IHRoaXMuY2FudmFzLndpZHRoIC8gdGhpcy5yZXNvbHV0aW9uO1xuICAgIHRleHR1cmUuYmFzZVRleHR1cmUuaGVpZ2h0ID0gdGhpcy5jYW52YXMuaGVpZ2h0IC8gdGhpcy5yZXNvbHV0aW9uO1xuICAgIHRleHR1cmUuY3JvcC53aWR0aCA9IHRleHR1cmUuX2ZyYW1lLndpZHRoID0gdGhpcy5jYW52YXMud2lkdGggLyB0aGlzLnJlc29sdXRpb247XG4gICAgdGV4dHVyZS5jcm9wLmhlaWdodCA9IHRleHR1cmUuX2ZyYW1lLmhlaWdodCA9IHRoaXMuY2FudmFzLmhlaWdodCAvIHRoaXMucmVzb2x1dGlvbjtcblxuICAgIHRleHR1cmUudHJpbS54ID0gMDtcbiAgICB0ZXh0dXJlLnRyaW0ueSA9IC10aGlzLl9zdHlsZS5wYWRkaW5nO1xuXG4gICAgdGV4dHVyZS50cmltLndpZHRoID0gdGV4dHVyZS5fZnJhbWUud2lkdGg7XG4gICAgdGV4dHVyZS50cmltLmhlaWdodCA9IHRleHR1cmUuX2ZyYW1lLmhlaWdodCAtIHRoaXMuX3N0eWxlLnBhZGRpbmcqMjtcblxuICAgIHRoaXMuX3dpZHRoID0gdGhpcy5jYW52YXMud2lkdGggLyB0aGlzLnJlc29sdXRpb247XG4gICAgdGhpcy5faGVpZ2h0ID0gdGhpcy5jYW52YXMuaGVpZ2h0IC8gdGhpcy5yZXNvbHV0aW9uO1xuXG4gICAgdGV4dHVyZS5iYXNlVGV4dHVyZS5lbWl0KCd1cGRhdGUnLCAgdGV4dHVyZS5iYXNlVGV4dHVyZSk7XG5cbiAgICB0aGlzLmRpcnR5ID0gZmFsc2U7XG59O1xuXG4vKipcbiAqIFJlbmRlcnMgdGhlIG9iamVjdCB1c2luZyB0aGUgV2ViR0wgcmVuZGVyZXJcbiAqXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcn1cbiAqL1xuVGV4dC5wcm90b3R5cGUucmVuZGVyV2ViR0wgPSBmdW5jdGlvbiAocmVuZGVyZXIpXG57XG4gICAgaWYgKHRoaXMuZGlydHkpXG4gICAge1xuICAgICAgICAvL3RoaXMucmVzb2x1dGlvbiA9IDEvL3JlbmRlcmVyLnJlc29sdXRpb247XG5cbiAgICAgICAgdGhpcy51cGRhdGVUZXh0KCk7XG4gICAgfVxuXG4gICAgU3ByaXRlLnByb3RvdHlwZS5yZW5kZXJXZWJHTC5jYWxsKHRoaXMsIHJlbmRlcmVyKTtcbn07XG5cbi8qKlxuICogUmVuZGVycyB0aGUgb2JqZWN0IHVzaW5nIHRoZSBDYW52YXMgcmVuZGVyZXJcbiAqXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuQ2FudmFzUmVuZGVyZXJ9XG4gKiBAcHJpdmF0ZVxuICovXG5UZXh0LnByb3RvdHlwZS5fcmVuZGVyQ2FudmFzID0gZnVuY3Rpb24gKHJlbmRlcmVyKVxue1xuICAgIGlmICh0aGlzLmRpcnR5KVxuICAgIHtcbiAgICAgLy8gICB0aGlzLnJlc29sdXRpb24gPSAxLy9yZW5kZXJlci5yZXNvbHV0aW9uO1xuXG4gICAgICAgIHRoaXMudXBkYXRlVGV4dCgpO1xuICAgIH1cblxuICAgIFNwcml0ZS5wcm90b3R5cGUuX3JlbmRlckNhbnZhcy5jYWxsKHRoaXMsIHJlbmRlcmVyKTtcbn07XG5cbi8qKlxuICogQ2FsY3VsYXRlcyB0aGUgYXNjZW50LCBkZXNjZW50IGFuZCBmb250U2l6ZSBvZiBhIGdpdmVuIGZvbnRTdHlsZVxuICpcbiAqIEBwYXJhbSBmb250U3R5bGUge29iamVjdH1cbiAqIEBwcml2YXRlXG4gKi9cblRleHQucHJvdG90eXBlLmRldGVybWluZUZvbnRQcm9wZXJ0aWVzID0gZnVuY3Rpb24gKGZvbnRTdHlsZSlcbntcbiAgICB2YXIgcHJvcGVydGllcyA9IFRleHQuZm9udFByb3BlcnRpZXNDYWNoZVtmb250U3R5bGVdO1xuXG4gICAgaWYgKCFwcm9wZXJ0aWVzKVxuICAgIHtcbiAgICAgICAgcHJvcGVydGllcyA9IHt9O1xuXG4gICAgICAgIHZhciBjYW52YXMgPSBUZXh0LmZvbnRQcm9wZXJ0aWVzQ2FudmFzO1xuICAgICAgICB2YXIgY29udGV4dCA9IFRleHQuZm9udFByb3BlcnRpZXNDb250ZXh0O1xuXG4gICAgICAgIGNvbnRleHQuZm9udCA9IGZvbnRTdHlsZTtcblxuICAgICAgICB2YXIgd2lkdGggPSBNYXRoLmNlaWwoY29udGV4dC5tZWFzdXJlVGV4dCgnfE3DiXEnKS53aWR0aCk7XG4gICAgICAgIHZhciBiYXNlbGluZSA9IE1hdGguY2VpbChjb250ZXh0Lm1lYXN1cmVUZXh0KCdNJykud2lkdGgpO1xuICAgICAgICB2YXIgaGVpZ2h0ID0gMiAqIGJhc2VsaW5lO1xuXG4gICAgICAgIGJhc2VsaW5lID0gYmFzZWxpbmUgKiAxLjQgfCAwO1xuXG4gICAgICAgIGNhbnZhcy53aWR0aCA9IHdpZHRoO1xuICAgICAgICBjYW52YXMuaGVpZ2h0ID0gaGVpZ2h0O1xuXG4gICAgICAgIGNvbnRleHQuZmlsbFN0eWxlID0gJyNmMDAnO1xuICAgICAgICBjb250ZXh0LmZpbGxSZWN0KDAsIDAsIHdpZHRoLCBoZWlnaHQpO1xuXG4gICAgICAgIGNvbnRleHQuZm9udCA9IGZvbnRTdHlsZTtcblxuICAgICAgICBjb250ZXh0LnRleHRCYXNlbGluZSA9ICdhbHBoYWJldGljJztcbiAgICAgICAgY29udGV4dC5maWxsU3R5bGUgPSAnIzAwMCc7XG4gICAgICAgIGNvbnRleHQuZmlsbFRleHQoJ3xNw4lxJywgMCwgYmFzZWxpbmUpO1xuXG4gICAgICAgIHZhciBpbWFnZWRhdGEgPSBjb250ZXh0LmdldEltYWdlRGF0YSgwLCAwLCB3aWR0aCwgaGVpZ2h0KS5kYXRhO1xuICAgICAgICB2YXIgcGl4ZWxzID0gaW1hZ2VkYXRhLmxlbmd0aDtcbiAgICAgICAgdmFyIGxpbmUgPSB3aWR0aCAqIDQ7XG5cbiAgICAgICAgdmFyIGksIGo7XG5cbiAgICAgICAgdmFyIGlkeCA9IDA7XG4gICAgICAgIHZhciBzdG9wID0gZmFsc2U7XG5cbiAgICAgICAgLy8gYXNjZW50LiBzY2FuIGZyb20gdG9wIHRvIGJvdHRvbSB1bnRpbCB3ZSBmaW5kIGEgbm9uIHJlZCBwaXhlbFxuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgYmFzZWxpbmU7IGkrKylcbiAgICAgICAge1xuICAgICAgICAgICAgZm9yIChqID0gMDsgaiA8IGxpbmU7IGogKz0gNClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBpZiAoaW1hZ2VkYXRhW2lkeCArIGpdICE9PSAyNTUpXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBzdG9wID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCFzdG9wKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGlkeCArPSBsaW5lO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcHJvcGVydGllcy5hc2NlbnQgPSBiYXNlbGluZSAtIGk7XG5cbiAgICAgICAgaWR4ID0gcGl4ZWxzIC0gbGluZTtcbiAgICAgICAgc3RvcCA9IGZhbHNlO1xuXG4gICAgICAgIC8vIGRlc2NlbnQuIHNjYW4gZnJvbSBib3R0b20gdG8gdG9wIHVudGlsIHdlIGZpbmQgYSBub24gcmVkIHBpeGVsXG4gICAgICAgIGZvciAoaSA9IGhlaWdodDsgaSA+IGJhc2VsaW5lOyBpLS0pXG4gICAgICAgIHtcbiAgICAgICAgICAgIGZvciAoaiA9IDA7IGogPCBsaW5lOyBqICs9IDQpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgaWYgKGltYWdlZGF0YVtpZHggKyBqXSAhPT0gMjU1KVxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgc3RvcCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghc3RvcClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBpZHggLT0gbGluZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHByb3BlcnRpZXMuZGVzY2VudCA9IGkgLSBiYXNlbGluZTtcbiAgICAgICAgcHJvcGVydGllcy5mb250U2l6ZSA9IHByb3BlcnRpZXMuYXNjZW50ICsgcHJvcGVydGllcy5kZXNjZW50O1xuXG4gICAgICAgIFRleHQuZm9udFByb3BlcnRpZXNDYWNoZVtmb250U3R5bGVdID0gcHJvcGVydGllcztcbiAgICB9XG5cbiAgICByZXR1cm4gcHJvcGVydGllcztcbn07XG5cbi8qKlxuICogQXBwbGllcyBuZXdsaW5lcyB0byBhIHN0cmluZyB0byBoYXZlIGl0IG9wdGltYWxseSBmaXQgaW50byB0aGUgaG9yaXpvbnRhbFxuICogYm91bmRzIHNldCBieSB0aGUgVGV4dCBvYmplY3QncyB3b3JkV3JhcFdpZHRoIHByb3BlcnR5LlxuICpcbiAqIEBwYXJhbSB0ZXh0IHtzdHJpbmd9XG4gKiBAcHJpdmF0ZVxuICovXG5UZXh0LnByb3RvdHlwZS53b3JkV3JhcCA9IGZ1bmN0aW9uICh0ZXh0KVxue1xuICAgIC8vIEdyZWVkeSB3cmFwcGluZyBhbGdvcml0aG0gdGhhdCB3aWxsIHdyYXAgd29yZHMgYXMgdGhlIGxpbmUgZ3Jvd3MgbG9uZ2VyXG4gICAgLy8gdGhhbiBpdHMgaG9yaXpvbnRhbCBib3VuZHMuXG4gICAgdmFyIHJlc3VsdCA9ICcnO1xuICAgIHZhciBsaW5lcyA9IHRleHQuc3BsaXQoJ1xcbicpO1xuICAgIHZhciB3b3JkV3JhcFdpZHRoID0gdGhpcy5fc3R5bGUud29yZFdyYXBXaWR0aDtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxpbmVzLmxlbmd0aDsgaSsrKVxuICAgIHtcbiAgICAgICAgdmFyIHNwYWNlTGVmdCA9IHdvcmRXcmFwV2lkdGg7XG4gICAgICAgIHZhciB3b3JkcyA9IGxpbmVzW2ldLnNwbGl0KCcgJyk7XG4gICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgd29yZHMubGVuZ3RoOyBqKyspXG4gICAgICAgIHtcbiAgICAgICAgICAgIHZhciB3b3JkV2lkdGggPSB0aGlzLmNvbnRleHQubWVhc3VyZVRleHQod29yZHNbal0pLndpZHRoO1xuICAgICAgICAgICAgdmFyIHdvcmRXaWR0aFdpdGhTcGFjZSA9IHdvcmRXaWR0aCArIHRoaXMuY29udGV4dC5tZWFzdXJlVGV4dCgnICcpLndpZHRoO1xuICAgICAgICAgICAgaWYgKGogPT09IDAgfHwgd29yZFdpZHRoV2l0aFNwYWNlID4gc3BhY2VMZWZ0KVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIC8vIFNraXAgcHJpbnRpbmcgdGhlIG5ld2xpbmUgaWYgaXQncyB0aGUgZmlyc3Qgd29yZCBvZiB0aGUgbGluZSB0aGF0IGlzXG4gICAgICAgICAgICAgICAgLy8gZ3JlYXRlciB0aGFuIHRoZSB3b3JkIHdyYXAgd2lkdGguXG4gICAgICAgICAgICAgICAgaWYgKGogPiAwKVxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0ICs9ICdcXG4nO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXN1bHQgKz0gd29yZHNbal07XG4gICAgICAgICAgICAgICAgc3BhY2VMZWZ0ID0gd29yZFdyYXBXaWR0aCAtIHdvcmRXaWR0aDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBzcGFjZUxlZnQgLT0gd29yZFdpZHRoV2l0aFNwYWNlO1xuICAgICAgICAgICAgICAgIHJlc3VsdCArPSAnICcgKyB3b3Jkc1tqXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChpIDwgbGluZXMubGVuZ3RoLTEpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJlc3VsdCArPSAnXFxuJztcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xufTtcblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBib3VuZHMgb2YgdGhlIFRleHQgYXMgYSByZWN0YW5nbGUuIFRoZSBib3VuZHMgY2FsY3VsYXRpb24gdGFrZXMgdGhlIHdvcmxkVHJhbnNmb3JtIGludG8gYWNjb3VudC5cbiAqXG4gKiBAcGFyYW0gbWF0cml4IHtQSVhJLk1hdHJpeH0gdGhlIHRyYW5zZm9ybWF0aW9uIG1hdHJpeCBvZiB0aGUgVGV4dFxuICogQHJldHVybiB7UElYSS5SZWN0YW5nbGV9IHRoZSBmcmFtaW5nIHJlY3RhbmdsZVxuICovXG5UZXh0LnByb3RvdHlwZS5nZXRCb3VuZHMgPSBmdW5jdGlvbiAobWF0cml4KVxue1xuICAgIGlmICh0aGlzLmRpcnR5KVxuICAgIHtcbiAgICAgICAgdGhpcy51cGRhdGVUZXh0KCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIFNwcml0ZS5wcm90b3R5cGUuZ2V0Qm91bmRzLmNhbGwodGhpcywgbWF0cml4KTtcbn07XG5cbi8qKlxuICogRGVzdHJveXMgdGhpcyB0ZXh0IG9iamVjdC5cbiAqXG4gKiBAcGFyYW0gW2Rlc3Ryb3lCYXNlVGV4dHVyZT10cnVlXSB7Ym9vbGVhbn0gd2hldGhlciB0byBkZXN0cm95IHRoZSBiYXNlIHRleHR1cmUgYXMgd2VsbFxuICovXG5UZXh0LnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKGRlc3Ryb3lCYXNlVGV4dHVyZSlcbntcbiAgICAvLyBtYWtlIHN1cmUgdG8gcmVzZXQgdGhlIHRoZSBjb250ZXh0IGFuZCBjYW52YXMuLiBkb250IHdhbnQgdGhpcyBoYW5naW5nIGFyb3VuZCBpbiBtZW1vcnkhXG4gICAgdGhpcy5jb250ZXh0ID0gbnVsbDtcbiAgICB0aGlzLmNhbnZhcyA9IG51bGw7XG5cbiAgICB0aGlzLl9zdHlsZSA9IG51bGw7XG5cbiAgICB0aGlzLl90ZXh0dXJlLmRlc3Ryb3koZGVzdHJveUJhc2VUZXh0dXJlID09PSB1bmRlZmluZWQgPyB0cnVlIDogZGVzdHJveUJhc2VUZXh0dXJlKTtcbn07XG4iLCJ2YXIgdXRpbHMgPSByZXF1aXJlKCcuLi91dGlscycpLFxuICAgIENPTlNUID0gcmVxdWlyZSgnLi4vY29uc3QnKSxcbiAgICBFdmVudEVtaXR0ZXIgPSByZXF1aXJlKCdldmVudGVtaXR0ZXIzJyk7XG5cbi8qKlxuICogQSB0ZXh0dXJlIHN0b3JlcyB0aGUgaW5mb3JtYXRpb24gdGhhdCByZXByZXNlbnRzIGFuIGltYWdlLiBBbGwgdGV4dHVyZXMgaGF2ZSBhIGJhc2UgdGV4dHVyZS5cbiAqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gc291cmNlIHtJbWFnZXxDYW52YXN9IHRoZSBzb3VyY2Ugb2JqZWN0IG9mIHRoZSB0ZXh0dXJlLlxuICogQHBhcmFtIFtzY2FsZU1vZGU9UElYSS5TQ0FMRV9NT0RFUy5ERUZBVUxUXSB7bnVtYmVyfSBTZWUge0BsaW5rIFBJWEkuU0NBTEVfTU9ERVN9IGZvciBwb3NzaWJsZSB2YWx1ZXNcbiAqIEBwYXJhbSByZXNvbHV0aW9uIHtudW1iZXJ9IHRoZSByZXNvbHV0aW9uIG9mIHRoZSB0ZXh0dXJlIGZvciBkZXZpY2VzIHdpdGggZGlmZmVyZW50IHBpeGVsIHJhdGlvc1xuICovXG5mdW5jdGlvbiBCYXNlVGV4dHVyZShzb3VyY2UsIHNjYWxlTW9kZSwgcmVzb2x1dGlvbilcbntcbiAgICBFdmVudEVtaXR0ZXIuY2FsbCh0aGlzKTtcblxuICAgIHRoaXMudWlkID0gdXRpbHMudWlkKCk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgUmVzb2x1dGlvbiBvZiB0aGUgdGV4dHVyZS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLnJlc29sdXRpb24gPSByZXNvbHV0aW9uIHx8IDE7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgd2lkdGggb2YgdGhlIGJhc2UgdGV4dHVyZSBzZXQgd2hlbiB0aGUgaW1hZ2UgaGFzIGxvYWRlZFxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEByZWFkT25seVxuICAgICAqL1xuICAgIHRoaXMud2lkdGggPSAxMDA7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgaGVpZ2h0IG9mIHRoZSBiYXNlIHRleHR1cmUgc2V0IHdoZW4gdGhlIGltYWdlIGhhcyBsb2FkZWRcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAcmVhZE9ubHlcbiAgICAgKi9cbiAgICB0aGlzLmhlaWdodCA9IDEwMDtcblxuICAgIC8vIFRPRE8gZG9jc1xuICAgIC8vIHVzZWQgdG8gc3RvcmUgdGhlIGFjdHVhbCBkaW1lbnNpb25zIG9mIHRoZSBzb3VyY2VcbiAgICAvKipcbiAgICAgKiBVc2VkIHRvIHN0b3JlIHRoZSBhY3R1YWwgd2lkdGggb2YgdGhlIHNvdXJjZSBvZiB0aGlzIHRleHR1cmVcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAcmVhZE9ubHlcbiAgICAgKi9cbiAgICB0aGlzLnJlYWxXaWR0aCA9IDEwMDtcbiAgICAvKipcbiAgICAgKiBVc2VkIHRvIHN0b3JlIHRoZSBhY3R1YWwgaGVpZ2h0IG9mIHRoZSBzb3VyY2Ugb2YgdGhpcyB0ZXh0dXJlXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQHJlYWRPbmx5XG4gICAgICovXG4gICAgdGhpcy5yZWFsSGVpZ2h0ID0gMTAwO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHNjYWxlIG1vZGUgdG8gYXBwbHkgd2hlbiBzY2FsaW5nIHRoaXMgdGV4dHVyZVxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IFBJWEkuU0NBTEVfTU9ERVMuTElORUFSXG4gICAgICogQHNlZSBQSVhJLlNDQUxFX01PREVTXG4gICAgICovXG4gICAgdGhpcy5zY2FsZU1vZGUgPSBzY2FsZU1vZGUgfHwgQ09OU1QuU0NBTEVfTU9ERVMuREVGQVVMVDtcblxuICAgIC8qKlxuICAgICAqIFNldCB0byB0cnVlIG9uY2UgdGhlIGJhc2UgdGV4dHVyZSBoYXMgc3VjY2Vzc2Z1bGx5IGxvYWRlZC5cbiAgICAgKlxuICAgICAqIFRoaXMgaXMgbmV2ZXIgdHJ1ZSBpZiB0aGUgdW5kZXJseWluZyBzb3VyY2UgZmFpbHMgdG8gbG9hZCBvciBoYXMgbm8gdGV4dHVyZSBkYXRhLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKiBAcmVhZE9ubHlcbiAgICAgKi9cbiAgICB0aGlzLmhhc0xvYWRlZCA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogU2V0IHRvIHRydWUgaWYgdGhlIHNvdXJjZSBpcyBjdXJyZW50bHkgbG9hZGluZy5cbiAgICAgKlxuICAgICAqIElmIGFuIEltYWdlIHNvdXJjZSBpcyBsb2FkaW5nIHRoZSAnbG9hZGVkJyBvciAnZXJyb3InIGV2ZW50IHdpbGwgYmVcbiAgICAgKiBkaXNwYXRjaGVkIHdoZW4gdGhlIG9wZXJhdGlvbiBlbmRzLiBBbiB1bmRlcnlsaW5nIHNvdXJjZSB0aGF0IGlzXG4gICAgICogaW1tZWRpYXRlbHktYXZhaWxhYmxlIGJ5cGFzc2VzIGxvYWRpbmcgZW50aXJlbHkuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqIEByZWFkb25seVxuICAgICAqL1xuICAgIHRoaXMuaXNMb2FkaW5nID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgaW1hZ2Ugc291cmNlIHRoYXQgaXMgdXNlZCB0byBjcmVhdGUgdGhlIHRleHR1cmUuXG4gICAgICpcbiAgICAgKiBUT0RPOiBNYWtlIHRoaXMgYSBzZXR0ZXIgdGhhdCBjYWxscyBsb2FkU291cmNlKCk7XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtJbWFnZXxDYW52YXN9XG4gICAgICogQHJlYWRvbmx5XG4gICAgICovXG4gICAgdGhpcy5zb3VyY2UgPSBudWxsOyAvLyBzZXQgaW4gbG9hZFNvdXJjZSwgaWYgYXQgYWxsXG5cbiAgICAvKipcbiAgICAgKiBDb250cm9scyBpZiBSR0IgY2hhbm5lbHMgc2hvdWxkIGJlIHByZS1tdWx0aXBsaWVkIGJ5IEFscGhhICAoV2ViR0wgb25seSlcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICogQGRlZmF1bHQgdHJ1ZVxuICAgICAqL1xuICAgIHRoaXMucHJlbXVsdGlwbGllZEFscGhhID0gdHJ1ZTtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge3N0cmluZ31cbiAgICAgKi9cbiAgICB0aGlzLmltYWdlVXJsID0gbnVsbDtcblxuICAgIC8qKlxuICAgICAqIFdldGhlciBvciBub3QgdGhlIHRleHR1cmUgaXMgYSBwb3dlciBvZiB0d28sIHRyeSB0byB1c2UgcG93ZXIgb2YgdHdvIHRleHR1cmVzIGFzIG11Y2ggYXMgeW91IGNhblxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLmlzUG93ZXJPZlR3byA9IGZhbHNlO1xuXG4gICAgLy8gdXNlZCBmb3Igd2ViR0xcblxuICAgIC8qKlxuICAgICAqXG4gICAgICogU2V0IHRoaXMgdG8gdHJ1ZSBpZiBhIG1pcG1hcCBvZiB0aGlzIHRleHR1cmUgbmVlZHMgdG8gYmUgZ2VuZXJhdGVkLiBUaGlzIHZhbHVlIG5lZWRzIHRvIGJlIHNldCBiZWZvcmUgdGhlIHRleHR1cmUgaXMgdXNlZFxuICAgICAqIEFsc28gdGhlIHRleHR1cmUgbXVzdCBiZSBhIHBvd2VyIG9mIHR3byBzaXplIHRvIHdvcmtcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICovXG4gICAgdGhpcy5taXBtYXAgPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIEEgbWFwIG9mIHJlbmRlcmVyIElEcyB0byB3ZWJnbCB0ZXh0dXJlc1xuICAgICAqXG4gICAgICogQG1lbWJlciB7b2JqZWN0PG51bWJlciwgV2ViR0xUZXh0dXJlPn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX2dsVGV4dHVyZXMgPSB7fTtcbiAgICB0aGlzLl9hY3RpdmUgPSBmYWxzZTtcbiAgICB0aGlzLl9pZCA9IDA7XG4gICAgXG4gICAgLy8gaWYgbm8gc291cmNlIHBhc3NlZCBkb24ndCB0cnkgdG8gbG9hZFxuICAgIGlmIChzb3VyY2UpXG4gICAge1xuICAgICAgICB0aGlzLmxvYWRTb3VyY2Uoc291cmNlKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBGaXJlZCB3aGVuIGEgbm90LWltbWVkaWF0ZWx5LWF2YWlsYWJsZSBzb3VyY2UgZmluaXNoZXMgbG9hZGluZy5cbiAgICAgKlxuICAgICAqIEBldmVudCBsb2FkZWRcbiAgICAgKiBAbWVtYmVyb2YgUElYSS5CYXNlVGV4dHVyZSNcbiAgICAgKiBAcHJvdGVjdGVkXG4gICAgICovXG5cbiAgICAvKipcbiAgICAgKiBGaXJlZCB3aGVuIGEgbm90LWltbWVkaWF0ZWx5LWF2YWlsYWJsZSBzb3VyY2UgZmFpbHMgdG8gbG9hZC5cbiAgICAgKlxuICAgICAqIEBldmVudCBlcnJvclxuICAgICAqIEBtZW1iZXJvZiBQSVhJLkJhc2VUZXh0dXJlI1xuICAgICAqIEBwcm90ZWN0ZWRcbiAgICAgKi9cbn1cblxuQmFzZVRleHR1cmUucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShFdmVudEVtaXR0ZXIucHJvdG90eXBlKTtcbkJhc2VUZXh0dXJlLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IEJhc2VUZXh0dXJlO1xubW9kdWxlLmV4cG9ydHMgPSBCYXNlVGV4dHVyZTtcblxuLyoqXG4gKiBVcGRhdGVzIHRoZSB0ZXh0dXJlIG9uIGFsbCB0aGUgd2ViZ2wgcmVuZGVyZXJzLCB0aGlzIGFsc28gYXNzdW1lcyB0aGUgc3JjIGhhcyBjaGFuZ2VkLlxuICpcbiAqIEBmaXJlcyB1cGRhdGVcbiAqL1xuQmFzZVRleHR1cmUucHJvdG90eXBlLnVwZGF0ZSA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy5yZWFsV2lkdGggPSB0aGlzLnNvdXJjZS5uYXR1cmFsV2lkdGggfHwgdGhpcy5zb3VyY2Uud2lkdGg7XG4gICAgdGhpcy5yZWFsSGVpZ2h0ID0gdGhpcy5zb3VyY2UubmF0dXJhbEhlaWdodCB8fCB0aGlzLnNvdXJjZS5oZWlnaHQ7XG5cbiAgICB0aGlzLndpZHRoID0gdGhpcy5yZWFsV2lkdGggLyB0aGlzLnJlc29sdXRpb247XG4gICAgdGhpcy5oZWlnaHQgPSB0aGlzLnJlYWxIZWlnaHQgLyB0aGlzLnJlc29sdXRpb247XG5cbiAgICB0aGlzLmlzUG93ZXJPZlR3byA9IHV0aWxzLmlzUG93ZXJPZlR3byh0aGlzLnJlYWxXaWR0aCwgdGhpcy5yZWFsSGVpZ2h0KTtcblxuICAgIHRoaXMuZW1pdCgndXBkYXRlJywgdGhpcyk7XG59O1xuXG4vKipcbiAqIExvYWQgYSBzb3VyY2UuXG4gKlxuICogSWYgdGhlIHNvdXJjZSBpcyBub3QtaW1tZWRpYXRlbHktYXZhaWxhYmxlLCBzdWNoIGFzIGFuIGltYWdlIHRoYXQgbmVlZHMgdG8gYmVcbiAqIGRvd25sb2FkZWQsIHRoZW4gdGhlICdsb2FkZWQnIG9yICdlcnJvcicgZXZlbnQgd2lsbCBiZSBkaXNwYXRjaGVkIGluIHRoZSBmdXR1cmVcbiAqIGFuZCBgaGFzTG9hZGVkYCB3aWxsIHJlbWFpbiBmYWxzZSBhZnRlciB0aGlzIGNhbGwuXG4gKlxuICogVGhlIGxvZ2ljIHN0YXRlIGFmdGVyIGNhbGxpbmcgYGxvYWRTb3VyY2VgIGRpcmVjdGx5IG9yIGluZGlyZWN0bHkgKGVnLiBgZnJvbUltYWdlYCwgYG5ldyBCYXNlVGV4dHVyZWApIGlzOlxuICpcbiAqICAgICBpZiAodGV4dHVyZS5oYXNMb2FkZWQpXG4ge1xuICogICAgICAgIC8vIHRleHR1cmUgcmVhZHkgZm9yIHVzZVxuICogICAgIH0gZWxzZSBpZiAodGV4dHVyZS5pc0xvYWRpbmcpXG4ge1xuICogICAgICAgIC8vIGxpc3RlbiB0byAnbG9hZGVkJyBhbmQvb3IgJ2Vycm9yJyBldmVudHMgb24gdGV4dHVyZVxuICogICAgIH0gZWxzZSB7XG4gKiAgICAgICAgLy8gbm90IGxvYWRpbmcsIG5vdCBnb2luZyB0byBsb2FkIFVOTEVTUyB0aGUgc291cmNlIGlzIHJlbG9hZGVkXG4gKiAgICAgICAgLy8gKGl0IG1heSBzdGlsbCBtYWtlIHNlbnNlIHRvIGxpc3RlbiB0byB0aGUgZXZlbnRzKVxuICogICAgIH1cbiAqXG4gKiBAcHJvdGVjdGVkXG4gKiBAcGFyYW0gc291cmNlIHtJbWFnZXxDYW52YXN9IHRoZSBzb3VyY2Ugb2JqZWN0IG9mIHRoZSB0ZXh0dXJlLlxuICovXG5CYXNlVGV4dHVyZS5wcm90b3R5cGUubG9hZFNvdXJjZSA9IGZ1bmN0aW9uIChzb3VyY2UpXG57XG4gICAgdmFyIHdhc0xvYWRpbmcgPSB0aGlzLmlzTG9hZGluZztcbiAgICB0aGlzLmhhc0xvYWRlZCA9IGZhbHNlO1xuICAgIHRoaXMuaXNMb2FkaW5nID0gZmFsc2U7XG5cbiAgICBpZiAod2FzTG9hZGluZyAmJiB0aGlzLnNvdXJjZSlcbiAgICB7XG4gICAgICAgIHRoaXMuc291cmNlLm9ubG9hZCA9IG51bGw7XG4gICAgICAgIHRoaXMuc291cmNlLm9uZXJyb3IgPSBudWxsO1xuICAgIH1cblxuICAgIHRoaXMuc291cmNlID0gc291cmNlO1xuXG4gICAgLy8gQXBwbHkgc291cmNlIGlmIGxvYWRlZC4gT3RoZXJ3aXNlIHNldHVwIGFwcHJvcHJpYXRlIGxvYWRpbmcgbW9uaXRvcnMuXG4gICAgaWYgKCh0aGlzLnNvdXJjZS5jb21wbGV0ZSB8fCB0aGlzLnNvdXJjZS5nZXRDb250ZXh0KSAmJiB0aGlzLnNvdXJjZS53aWR0aCAmJiB0aGlzLnNvdXJjZS5oZWlnaHQpXG4gICAge1xuICAgICAgICB0aGlzLl9zb3VyY2VMb2FkZWQoKTtcbiAgICB9XG4gICAgZWxzZSBpZiAoIXNvdXJjZS5nZXRDb250ZXh0KVxuICAgIHtcblxuICAgICAgICAvLyBJbWFnZSBmYWlsIC8gbm90IHJlYWR5XG4gICAgICAgIHRoaXMuaXNMb2FkaW5nID0gdHJ1ZTtcblxuICAgICAgICB2YXIgc2NvcGUgPSB0aGlzO1xuXG4gICAgICAgIHNvdXJjZS5vbmxvYWQgPSBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICBzb3VyY2Uub25sb2FkID0gbnVsbDtcbiAgICAgICAgICAgIHNvdXJjZS5vbmVycm9yID0gbnVsbDtcblxuICAgICAgICAgICAgaWYgKCFzY29wZS5pc0xvYWRpbmcpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBzY29wZS5pc0xvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgICAgIHNjb3BlLl9zb3VyY2VMb2FkZWQoKTtcblxuICAgICAgICAgICAgc2NvcGUuZW1pdCgnbG9hZGVkJywgc2NvcGUpO1xuICAgICAgICB9O1xuXG4gICAgICAgIHNvdXJjZS5vbmVycm9yID0gZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgc291cmNlLm9ubG9hZCA9IG51bGw7XG4gICAgICAgICAgICBzb3VyY2Uub25lcnJvciA9IG51bGw7XG5cbiAgICAgICAgICAgIGlmICghc2NvcGUuaXNMb2FkaW5nKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgc2NvcGUuaXNMb2FkaW5nID0gZmFsc2U7XG4gICAgICAgICAgICBzY29wZS5lbWl0KCdlcnJvcicsIHNjb3BlKTtcbiAgICAgICAgfTtcblxuICAgICAgICAvLyBQZXIgaHR0cDovL3d3dy53My5vcmcvVFIvaHRtbDUvZW1iZWRkZWQtY29udGVudC0wLmh0bWwjdGhlLWltZy1lbGVtZW50XG4gICAgICAgIC8vICAgXCJUaGUgdmFsdWUgb2YgYGNvbXBsZXRlYCBjYW4gdGh1cyBjaGFuZ2Ugd2hpbGUgYSBzY3JpcHQgaXMgZXhlY3V0aW5nLlwiXG4gICAgICAgIC8vIFNvIGNvbXBsZXRlIG5lZWRzIHRvIGJlIHJlLWNoZWNrZWQgYWZ0ZXIgdGhlIGNhbGxiYWNrcyBoYXZlIGJlZW4gYWRkZWQuLlxuICAgICAgICAvLyBOT1RFOiBjb21wbGV0ZSB3aWxsIGJlIHRydWUgaWYgdGhlIGltYWdlIGhhcyBubyBzcmMgc28gYmVzdCB0byBjaGVjayBpZiB0aGUgc3JjIGlzIHNldC5cbiAgICAgICAgaWYgKHNvdXJjZS5jb21wbGV0ZSAmJiBzb3VyY2Uuc3JjKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmlzTG9hZGluZyA9IGZhbHNlO1xuXG4gICAgICAgICAgICAvLyAuLmFuZCBpZiB3ZSdyZSBjb21wbGV0ZSBub3csIG5vIG5lZWQgZm9yIGNhbGxiYWNrc1xuICAgICAgICAgICAgc291cmNlLm9ubG9hZCA9IG51bGw7XG4gICAgICAgICAgICBzb3VyY2Uub25lcnJvciA9IG51bGw7XG5cbiAgICAgICAgICAgIGlmIChzb3VyY2Uud2lkdGggJiYgc291cmNlLmhlaWdodClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9zb3VyY2VMb2FkZWQoKTtcblxuICAgICAgICAgICAgICAgIC8vIElmIGFueSBwcmV2aW91cyBzdWJzY3JpYmVycyBwb3NzaWJsZVxuICAgICAgICAgICAgICAgIGlmICh3YXNMb2FkaW5nKVxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5lbWl0KCdsb2FkZWQnLCB0aGlzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgLy8gSWYgYW55IHByZXZpb3VzIHN1YnNjcmliZXJzIHBvc3NpYmxlXG4gICAgICAgICAgICAgICAgaWYgKHdhc0xvYWRpbmcpXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmVtaXQoJ2Vycm9yJywgdGhpcyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxufTtcblxuLyoqXG4gKiBVc2VkIGludGVybmFsbHkgdG8gdXBkYXRlIHRoZSB3aWR0aCwgaGVpZ2h0LCBhbmQgc29tZSBvdGhlciB0cmFja2luZyB2YXJzIG9uY2VcbiAqIGEgc291cmNlIGhhcyBzdWNjZXNzZnVsbHkgbG9hZGVkLlxuICpcbiAqIEBwcml2YXRlXG4gKi9cbkJhc2VUZXh0dXJlLnByb3RvdHlwZS5fc291cmNlTG9hZGVkID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLmhhc0xvYWRlZCA9IHRydWU7XG4gICAgdGhpcy51cGRhdGUoKTtcbn07XG5cbi8qKlxuICogRGVzdHJveXMgdGhpcyBiYXNlIHRleHR1cmVcbiAqXG4gKi9cbkJhc2VUZXh0dXJlLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKClcbntcbiAgICBpZiAodGhpcy5pbWFnZVVybClcbiAgICB7XG4gICAgICAgIGRlbGV0ZSB1dGlscy5CYXNlVGV4dHVyZUNhY2hlW3RoaXMuaW1hZ2VVcmxdO1xuICAgICAgICBkZWxldGUgdXRpbHMuVGV4dHVyZUNhY2hlW3RoaXMuaW1hZ2VVcmxdO1xuXG4gICAgICAgIHRoaXMuaW1hZ2VVcmwgPSBudWxsO1xuXG4gICAgICAgIGlmICghbmF2aWdhdG9yLmlzQ29jb29uSlMpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuc291cmNlLnNyYyA9ICcnO1xuICAgICAgICB9XG4gICAgfVxuICAgIGVsc2UgaWYgKHRoaXMuc291cmNlICYmIHRoaXMuc291cmNlLl9waXhpSWQpXG4gICAge1xuICAgICAgICBkZWxldGUgdXRpbHMuQmFzZVRleHR1cmVDYWNoZVt0aGlzLnNvdXJjZS5fcGl4aUlkXTtcbiAgICB9XG5cbiAgICB0aGlzLnNvdXJjZSA9IG51bGw7XG5cbiAgICB0aGlzLmRpc3Bvc2UoKTtcbn07XG5cbi8qKlxuICogRnJlZXMgdGhlIHRleHR1cmUgZnJvbSBXZWJHTCBtZW1vcnkgd2l0aG91dCBkZXN0cm95aW5nIHRoaXMgdGV4dHVyZSBvYmplY3QuXG4gKiBUaGlzIG1lYW5zIHlvdSBjYW4gc3RpbGwgdXNlIHRoZSB0ZXh0dXJlIGxhdGVyIHdoaWNoIHdpbGwgdXBsb2FkIGl0IHRvIEdQVVxuICogbWVtb3J5IGFnYWluLlxuICpcbiAqL1xuQmFzZVRleHR1cmUucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKVxue1xuICAgIHRoaXMuZW1pdCgnZGlzcG9zZScsIHRoaXMpO1xuXG4gICAgLy8gdGhpcyBzaG91bGQgbm8gbG9uZ2VyIGJlIG5lZWRlZCwgdGhlIHJlbmRlcmVycyBzaG91bGQgY2xlYW51cCBhbGwgdGhlIGdsIHRleHR1cmVzLlxuICAgIC8vIHRoaXMuX2dsVGV4dHVyZXMgPSB7fTtcbn07XG5cbi8qKlxuICogQ2hhbmdlcyB0aGUgc291cmNlIGltYWdlIG9mIHRoZSB0ZXh0dXJlLlxuICogVGhlIG9yaWdpbmFsIHNvdXJjZSBtdXN0IGJlIGFuIEltYWdlIGVsZW1lbnQuXG4gKlxuICogQHBhcmFtIG5ld1NyYyB7c3RyaW5nfSB0aGUgcGF0aCBvZiB0aGUgaW1hZ2VcbiAqL1xuQmFzZVRleHR1cmUucHJvdG90eXBlLnVwZGF0ZVNvdXJjZUltYWdlID0gZnVuY3Rpb24gKG5ld1NyYylcbntcbiAgICB0aGlzLnNvdXJjZS5zcmMgPSBuZXdTcmM7XG5cbiAgICB0aGlzLmxvYWRTb3VyY2UodGhpcy5zb3VyY2UpO1xufTtcblxuLyoqXG4gKiBIZWxwZXIgZnVuY3Rpb24gdGhhdCBjcmVhdGVzIGEgYmFzZSB0ZXh0dXJlIGZyb20gdGhlIGdpdmVuIGltYWdlIHVybC5cbiAqIElmIHRoZSBpbWFnZSBpcyBub3QgaW4gdGhlIGJhc2UgdGV4dHVyZSBjYWNoZSBpdCB3aWxsIGJlIGNyZWF0ZWQgYW5kIGxvYWRlZC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAcGFyYW0gaW1hZ2VVcmwge3N0cmluZ30gVGhlIGltYWdlIHVybCBvZiB0aGUgdGV4dHVyZVxuICogQHBhcmFtIFtjcm9zc29yaWdpbj0oYXV0byldIHtib29sZWFufSBTaG91bGQgdXNlIGFub255bW91cyBDT1JTPyBEZWZhdWx0cyB0byB0cnVlIGlmIHRoZSBVUkwgaXMgbm90IGEgZGF0YS1VUkkuXG4gKiBAcGFyYW0gW3NjYWxlTW9kZT1QSVhJLlNDQUxFX01PREVTLkRFRkFVTFRdIHtudW1iZXJ9IFNlZSB7QGxpbmsgUElYSS5TQ0FMRV9NT0RFU30gZm9yIHBvc3NpYmxlIHZhbHVlc1xuICogQHJldHVybiBQSVhJLkJhc2VUZXh0dXJlXG4gKi9cbkJhc2VUZXh0dXJlLmZyb21JbWFnZSA9IGZ1bmN0aW9uIChpbWFnZVVybCwgY3Jvc3NvcmlnaW4sIHNjYWxlTW9kZSlcbntcbiAgICB2YXIgYmFzZVRleHR1cmUgPSB1dGlscy5CYXNlVGV4dHVyZUNhY2hlW2ltYWdlVXJsXTtcblxuICAgIGlmIChjcm9zc29yaWdpbiA9PT0gdW5kZWZpbmVkICYmIGltYWdlVXJsLmluZGV4T2YoJ2RhdGE6JykgIT09IDApXG4gICAge1xuICAgICAgICBjcm9zc29yaWdpbiA9IHRydWU7XG4gICAgfVxuXG4gICAgaWYgKCFiYXNlVGV4dHVyZSlcbiAgICB7XG4gICAgICAgIC8vIG5ldyBJbWFnZSgpIGJyZWFrcyB0ZXggbG9hZGluZyBpbiBzb21lIHZlcnNpb25zIG9mIENocm9tZS5cbiAgICAgICAgLy8gU2VlIGh0dHBzOi8vY29kZS5nb29nbGUuY29tL3AvY2hyb21pdW0vaXNzdWVzL2RldGFpbD9pZD0yMzgwNzFcbiAgICAgICAgdmFyIGltYWdlID0gbmV3IEltYWdlKCk7Ly9kb2N1bWVudC5jcmVhdGVFbGVtZW50KCdpbWcnKTtcbiAgICAgICAgaWYgKGNyb3Nzb3JpZ2luKVxuICAgICAgICB7XG4gICAgICAgICAgICBpbWFnZS5jcm9zc09yaWdpbiA9ICcnO1xuICAgICAgICB9XG5cbiAgICAgICAgYmFzZVRleHR1cmUgPSBuZXcgQmFzZVRleHR1cmUoaW1hZ2UsIHNjYWxlTW9kZSk7XG4gICAgICAgIGJhc2VUZXh0dXJlLmltYWdlVXJsID0gaW1hZ2VVcmw7XG5cbiAgICAgICAgaW1hZ2Uuc3JjID0gaW1hZ2VVcmw7XG5cbiAgICAgICAgdXRpbHMuQmFzZVRleHR1cmVDYWNoZVtpbWFnZVVybF0gPSBiYXNlVGV4dHVyZTtcblxuICAgICAgICAvLyBpZiB0aGVyZSBpcyBhbiBAMnggYXQgdGhlIGVuZCBvZiB0aGUgdXJsIHdlIGFyZSBnb2luZyB0byBhc3N1bWUgaXRzIGEgaGlnaHJlcyBpbWFnZVxuICAgICAgICBiYXNlVGV4dHVyZS5yZXNvbHV0aW9uID0gdXRpbHMuZ2V0UmVzb2x1dGlvbk9mVXJsKGltYWdlVXJsKTtcbiAgICB9XG5cbiAgICByZXR1cm4gYmFzZVRleHR1cmU7XG59O1xuXG4vKipcbiAqIEhlbHBlciBmdW5jdGlvbiB0aGF0IGNyZWF0ZXMgYSBiYXNlIHRleHR1cmUgZnJvbSB0aGUgZ2l2ZW4gY2FudmFzIGVsZW1lbnQuXG4gKlxuICogQHN0YXRpY1xuICogQHBhcmFtIGNhbnZhcyB7Q2FudmFzfSBUaGUgY2FudmFzIGVsZW1lbnQgc291cmNlIG9mIHRoZSB0ZXh0dXJlXG4gKiBAcGFyYW0gc2NhbGVNb2RlIHtudW1iZXJ9IFNlZSB7QGxpbmsgUElYSS5TQ0FMRV9NT0RFU30gZm9yIHBvc3NpYmxlIHZhbHVlc1xuICogQHJldHVybiBQSVhJLkJhc2VUZXh0dXJlXG4gKi9cbkJhc2VUZXh0dXJlLmZyb21DYW52YXMgPSBmdW5jdGlvbiAoY2FudmFzLCBzY2FsZU1vZGUpXG57XG4gICAgaWYgKCFjYW52YXMuX3BpeGlJZClcbiAgICB7XG4gICAgICAgIGNhbnZhcy5fcGl4aUlkID0gJ2NhbnZhc18nICsgdXRpbHMudWlkKCk7XG4gICAgfVxuXG4gICAgdmFyIGJhc2VUZXh0dXJlID0gdXRpbHMuQmFzZVRleHR1cmVDYWNoZVtjYW52YXMuX3BpeGlJZF07XG5cbiAgICBpZiAoIWJhc2VUZXh0dXJlKVxuICAgIHtcbiAgICAgICAgYmFzZVRleHR1cmUgPSBuZXcgQmFzZVRleHR1cmUoY2FudmFzLCBzY2FsZU1vZGUpO1xuICAgICAgICB1dGlscy5CYXNlVGV4dHVyZUNhY2hlW2NhbnZhcy5fcGl4aUlkXSA9IGJhc2VUZXh0dXJlO1xuICAgIH1cblxuICAgIHJldHVybiBiYXNlVGV4dHVyZTtcbn07XG4iLCJ2YXIgQmFzZVRleHR1cmUgPSByZXF1aXJlKCcuL0Jhc2VUZXh0dXJlJyksXG4gICAgVGV4dHVyZSA9IHJlcXVpcmUoJy4vVGV4dHVyZScpLFxuICAgIFJlbmRlclRhcmdldCA9IHJlcXVpcmUoJy4uL3JlbmRlcmVycy93ZWJnbC91dGlscy9SZW5kZXJUYXJnZXQnKSxcbiAgICBGaWx0ZXJNYW5hZ2VyID0gcmVxdWlyZSgnLi4vcmVuZGVyZXJzL3dlYmdsL21hbmFnZXJzL0ZpbHRlck1hbmFnZXInKSxcbiAgICBDYW52YXNCdWZmZXIgPSByZXF1aXJlKCcuLi9yZW5kZXJlcnMvY2FudmFzL3V0aWxzL0NhbnZhc0J1ZmZlcicpLFxuICAgIG1hdGggPSByZXF1aXJlKCcuLi9tYXRoJyksXG4gICAgQ09OU1QgPSByZXF1aXJlKCcuLi9jb25zdCcpLFxuICAgIHRlbXBNYXRyaXggPSBuZXcgbWF0aC5NYXRyaXgoKTtcblxuLyoqXG4gKiBBIFJlbmRlclRleHR1cmUgaXMgYSBzcGVjaWFsIHRleHR1cmUgdGhhdCBhbGxvd3MgYW55IFBpeGkgZGlzcGxheSBvYmplY3QgdG8gYmUgcmVuZGVyZWQgdG8gaXQuXG4gKlxuICogX19IaW50X186IEFsbCBEaXNwbGF5T2JqZWN0cyAoaS5lLiBTcHJpdGVzKSB0aGF0IHJlbmRlciB0byBhIFJlbmRlclRleHR1cmUgc2hvdWxkIGJlIHByZWxvYWRlZFxuICogb3RoZXJ3aXNlIGJsYWNrIHJlY3RhbmdsZXMgd2lsbCBiZSBkcmF3biBpbnN0ZWFkLlxuICpcbiAqIEEgUmVuZGVyVGV4dHVyZSB0YWtlcyBhIHNuYXBzaG90IG9mIGFueSBEaXNwbGF5IE9iamVjdCBnaXZlbiB0byBpdHMgcmVuZGVyIG1ldGhvZC4gVGhlIHBvc2l0aW9uXG4gKiBhbmQgcm90YXRpb24gb2YgdGhlIGdpdmVuIERpc3BsYXkgT2JqZWN0cyBpcyBpZ25vcmVkLiBGb3IgZXhhbXBsZTpcbiAqXG4gKiBgYGBqc1xuICogdmFyIHJlbmRlcmVyID0gUElYSS5hdXRvRGV0ZWN0UmVuZGVyZXIoMTAyNCwgMTAyNCwgeyB2aWV3OiBjYW52YXMsIHJhdGlvOiAxIH0pO1xuICogdmFyIHJlbmRlclRleHR1cmUgPSBuZXcgUElYSS5SZW5kZXJUZXh0dXJlKHJlbmRlcmVyLCA4MDAsIDYwMCk7XG4gKiB2YXIgc3ByaXRlID0gUElYSS5TcHJpdGUuZnJvbUltYWdlKFwic3Bpbk9ial8wMS5wbmdcIik7XG4gKlxuICogc3ByaXRlLnBvc2l0aW9uLnggPSA4MDAvMjtcbiAqIHNwcml0ZS5wb3NpdGlvbi55ID0gNjAwLzI7XG4gKiBzcHJpdGUuYW5jaG9yLnggPSAwLjU7XG4gKiBzcHJpdGUuYW5jaG9yLnkgPSAwLjU7XG4gKlxuICogcmVuZGVyVGV4dHVyZS5yZW5kZXIoc3ByaXRlKTtcbiAqIGBgYFxuICpcbiAqIFRoZSBTcHJpdGUgaW4gdGhpcyBjYXNlIHdpbGwgYmUgcmVuZGVyZWQgdG8gYSBwb3NpdGlvbiBvZiAwLDAuIFRvIHJlbmRlciB0aGlzIHNwcml0ZSBhdCBpdHMgYWN0dWFsXG4gKiBwb3NpdGlvbiBhIENvbnRhaW5lciBzaG91bGQgYmUgdXNlZDpcbiAqXG4gKiBgYGBqc1xuICogdmFyIGRvYyA9IG5ldyBQSVhJLkNvbnRhaW5lcigpO1xuICpcbiAqIGRvYy5hZGRDaGlsZChzcHJpdGUpO1xuICpcbiAqIHJlbmRlclRleHR1cmUucmVuZGVyKGRvYyk7ICAvLyBSZW5kZXJzIHRvIGNlbnRlciBvZiByZW5kZXJUZXh0dXJlXG4gKiBgYGBcbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuVGV4dHVyZVxuICogQG1lbWJlcm9mIFBJWElcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5DYW52YXNSZW5kZXJlcnxQSVhJLldlYkdMUmVuZGVyZXJ9IFRoZSByZW5kZXJlciB1c2VkIGZvciB0aGlzIFJlbmRlclRleHR1cmVcbiAqIEBwYXJhbSBbd2lkdGg9MTAwXSB7bnVtYmVyfSBUaGUgd2lkdGggb2YgdGhlIHJlbmRlciB0ZXh0dXJlXG4gKiBAcGFyYW0gW2hlaWdodD0xMDBdIHtudW1iZXJ9IFRoZSBoZWlnaHQgb2YgdGhlIHJlbmRlciB0ZXh0dXJlXG4gKiBAcGFyYW0gW3NjYWxlTW9kZV0ge251bWJlcn0gU2VlIHtAbGluayBQSVhJLlNDQUxFX01PREVTfSBmb3IgcG9zc2libGUgdmFsdWVzXG4gKiBAcGFyYW0gW3Jlc29sdXRpb249MV0ge251bWJlcn0gVGhlIHJlc29sdXRpb24gb2YgdGhlIHRleHR1cmUgYmVpbmcgZ2VuZXJhdGVkXG4gKi9cbmZ1bmN0aW9uIFJlbmRlclRleHR1cmUocmVuZGVyZXIsIHdpZHRoLCBoZWlnaHQsIHNjYWxlTW9kZSwgcmVzb2x1dGlvbilcbntcbiAgICBpZiAoIXJlbmRlcmVyKVxuICAgIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdVbmFibGUgdG8gY3JlYXRlIFJlbmRlclRleHR1cmUsIHlvdSBtdXN0IHBhc3MgYSByZW5kZXJlciBpbnRvIHRoZSBjb25zdHJ1Y3Rvci4nKTtcbiAgICB9XG5cbiAgICB3aWR0aCA9IHdpZHRoIHx8IDEwMDtcbiAgICBoZWlnaHQgPSBoZWlnaHQgfHwgMTAwO1xuICAgIHJlc29sdXRpb24gPSByZXNvbHV0aW9uIHx8IENPTlNULlJFU09MVVRJT047XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYmFzZSB0ZXh0dXJlIG9iamVjdCB0aGF0IHRoaXMgdGV4dHVyZSB1c2VzXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtCYXNlVGV4dHVyZX1cbiAgICAgKi9cbiAgICB2YXIgYmFzZVRleHR1cmUgPSBuZXcgQmFzZVRleHR1cmUoKTtcbiAgICBiYXNlVGV4dHVyZS53aWR0aCA9IHdpZHRoO1xuICAgIGJhc2VUZXh0dXJlLmhlaWdodCA9IGhlaWdodDtcbiAgICBiYXNlVGV4dHVyZS5yZXNvbHV0aW9uID0gcmVzb2x1dGlvbjtcbiAgICBiYXNlVGV4dHVyZS5zY2FsZU1vZGUgPSBzY2FsZU1vZGUgfHwgQ09OU1QuU0NBTEVfTU9ERVMuREVGQVVMVDtcbiAgICBiYXNlVGV4dHVyZS5oYXNMb2FkZWQgPSB0cnVlO1xuXG5cbiAgICBUZXh0dXJlLmNhbGwodGhpcyxcbiAgICAgICAgYmFzZVRleHR1cmUsXG4gICAgICAgIG5ldyBtYXRoLlJlY3RhbmdsZSgwLCAwLCB3aWR0aCwgaGVpZ2h0KVxuICAgICk7XG5cblxuICAgIC8qKlxuICAgICAqIFRoZSB3aXRoIG9mIHRoZSByZW5kZXIgdGV4dHVyZVxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMud2lkdGggPSB3aWR0aDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBoZWlnaHQgb2YgdGhlIHJlbmRlciB0ZXh0dXJlXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy5oZWlnaHQgPSBoZWlnaHQ7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgUmVzb2x1dGlvbiBvZiB0aGUgdGV4dHVyZS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLnJlc29sdXRpb24gPSByZXNvbHV0aW9uO1xuXG4gICAgLyoqXG4gICAgICogRHJhdy9yZW5kZXIgdGhlIGdpdmVuIERpc3BsYXlPYmplY3Qgb250byB0aGUgdGV4dHVyZS5cbiAgICAgKlxuICAgICAqIFRoZSBkaXNwbGF5T2JqZWN0IGFuZCBkZXNjZW5kZW50cyBhcmUgdHJhbnNmb3JtZWQgZHVyaW5nIHRoaXMgb3BlcmF0aW9uLlxuICAgICAqIElmIGB1cGRhdGVUcmFuc2Zvcm1gIGlzIHRydWUgdGhlbiB0aGUgdHJhbnNmb3JtYXRpb25zIHdpbGwgYmUgcmVzdG9yZWQgYmVmb3JlIHRoZVxuICAgICAqIG1ldGhvZCByZXR1cm5zLiBPdGhlcndpc2UgaXQgaXMgdXAgdG8gdGhlIGNhbGxpbmcgY29kZSB0byBjb3JyZWN0bHkgdXNlIG9yIHJlc2V0XG4gICAgICogdGhlIHRyYW5zZm9ybWVkIGRpc3BsYXkgb2JqZWN0cy5cbiAgICAgKlxuICAgICAqIFRoZSBkaXNwbGF5IG9iamVjdCBpcyBhbHdheXMgcmVuZGVyZWQgd2l0aCBhIHdvcmxkQWxwaGEgdmFsdWUgb2YgMS5cbiAgICAgKlxuICAgICAqIEBtZXRob2RcbiAgICAgKiBAcGFyYW0gZGlzcGxheU9iamVjdCB7UElYSS5EaXNwbGF5T2JqZWN0fSBUaGUgZGlzcGxheSBvYmplY3QgdG8gcmVuZGVyIHRoaXMgdGV4dHVyZSBvblxuICAgICAqIEBwYXJhbSBbbWF0cml4XSB7UElYSS5NYXRyaXh9IE9wdGlvbmFsIG1hdHJpeCB0byBhcHBseSB0byB0aGUgZGlzcGxheSBvYmplY3QgYmVmb3JlIHJlbmRlcmluZy5cbiAgICAgKiBAcGFyYW0gW2NsZWFyPWZhbHNlXSB7Ym9vbGVhbn0gSWYgdHJ1ZSB0aGUgdGV4dHVyZSB3aWxsIGJlIGNsZWFyZWQgYmVmb3JlIHRoZSBkaXNwbGF5T2JqZWN0IGlzIGRyYXduXG4gICAgICogQHBhcmFtIFt1cGRhdGVUcmFuc2Zvcm09dHJ1ZV0ge2Jvb2xlYW59IElmIHRydWUgdGhlIGRpc3BsYXlPYmplY3QncyB3b3JsZFRyYW5zZm9ybS93b3JsZEFscGhhIGFuZCBhbGwgY2hpbGRyZW5cbiAgICAgKiAgdHJhbnNmb3JtYXRpb25zIHdpbGwgYmUgcmVzdG9yZWQuIE5vdCByZXN0b3JpbmcgdGhpcyBpbmZvcm1hdGlvbiB3aWxsIGJlIGEgbGl0dGxlIGZhc3Rlci5cbiAgICAgKi9cbiAgICB0aGlzLnJlbmRlciA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgcmVuZGVyZXIgdGhpcyBSZW5kZXJUZXh0dXJlIHVzZXMuIEEgUmVuZGVyVGV4dHVyZSBjYW4gb25seSBiZWxvbmcgdG8gb25lIHJlbmRlcmVyIGF0IHRoZSBtb21lbnQgaWYgaXRzIHdlYkdMLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5DYW52YXNSZW5kZXJlcnxQSVhJLldlYkdMUmVuZGVyZXJ9XG4gICAgICovXG4gICAgdGhpcy5yZW5kZXJlciA9IHJlbmRlcmVyO1xuXG4gICAgaWYgKHRoaXMucmVuZGVyZXIudHlwZSA9PT0gQ09OU1QuUkVOREVSRVJfVFlQRS5XRUJHTClcbiAgICB7XG4gICAgICAgIHZhciBnbCA9IHRoaXMucmVuZGVyZXIuZ2w7XG5cbiAgICAgICAgdGhpcy50ZXh0dXJlQnVmZmVyID0gbmV3IFJlbmRlclRhcmdldChnbCwgdGhpcy53aWR0aCwgdGhpcy5oZWlnaHQsIGJhc2VUZXh0dXJlLnNjYWxlTW9kZSwgdGhpcy5yZXNvbHV0aW9uKTsvLywgdGhpcy5iYXNlVGV4dHVyZS5zY2FsZU1vZGUpO1xuICAgICAgICB0aGlzLmJhc2VUZXh0dXJlLl9nbFRleHR1cmVzW2dsLmlkXSA9IHRoaXMudGV4dHVyZUJ1ZmZlci50ZXh0dXJlO1xuXG4gICAgICAgIC8vVE9ETyByZWZhY3RvciBmaWx0ZXIgbWFuYWdlci4uIGFzIHJlYWxseSBpdHMgbm8gbG9uZ2VyIGEgbWFuYWdlciBpZiB3ZSB1c2UgaXQgaGVyZS4uXG4gICAgICAgIHRoaXMuZmlsdGVyTWFuYWdlciA9IG5ldyBGaWx0ZXJNYW5hZ2VyKHRoaXMucmVuZGVyZXIpO1xuICAgICAgICB0aGlzLmZpbHRlck1hbmFnZXIub25Db250ZXh0Q2hhbmdlKCk7XG4gICAgICAgIHRoaXMuZmlsdGVyTWFuYWdlci5yZXNpemUod2lkdGgsIGhlaWdodCk7XG4gICAgICAgIHRoaXMucmVuZGVyID0gdGhpcy5yZW5kZXJXZWJHTDtcblxuICAgICAgICAvLyB0aGUgY3JlYXRpb24gb2YgYSBmaWx0ZXIgbWFuYWdlciB1bmJpbmRzIHRoZSBidWZmZXJzLi5cbiAgICAgICAgdGhpcy5yZW5kZXJlci5jdXJyZW50UmVuZGVyZXIuc3RhcnQoKTtcbiAgICAgICAgdGhpcy5yZW5kZXJlci5jdXJyZW50UmVuZGVyVGFyZ2V0LmFjdGl2YXRlKCk7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG5cbiAgICAgICAgdGhpcy5yZW5kZXIgPSB0aGlzLnJlbmRlckNhbnZhcztcbiAgICAgICAgdGhpcy50ZXh0dXJlQnVmZmVyID0gbmV3IENhbnZhc0J1ZmZlcih0aGlzLndpZHRoKiB0aGlzLnJlc29sdXRpb24sIHRoaXMuaGVpZ2h0KiB0aGlzLnJlc29sdXRpb24pO1xuICAgICAgICB0aGlzLmJhc2VUZXh0dXJlLnNvdXJjZSA9IHRoaXMudGV4dHVyZUJ1ZmZlci5jYW52YXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKi9cbiAgICB0aGlzLnZhbGlkID0gdHJ1ZTtcblxuICAgIHRoaXMuX3VwZGF0ZVV2cygpO1xufVxuXG5SZW5kZXJUZXh0dXJlLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoVGV4dHVyZS5wcm90b3R5cGUpO1xuUmVuZGVyVGV4dHVyZS5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBSZW5kZXJUZXh0dXJlO1xubW9kdWxlLmV4cG9ydHMgPSBSZW5kZXJUZXh0dXJlO1xuXG4vKipcbiAqIFJlc2l6ZXMgdGhlIFJlbmRlclRleHR1cmUuXG4gKlxuICogQHBhcmFtIHdpZHRoIHtudW1iZXJ9IFRoZSB3aWR0aCB0byByZXNpemUgdG8uXG4gKiBAcGFyYW0gaGVpZ2h0IHtudW1iZXJ9IFRoZSBoZWlnaHQgdG8gcmVzaXplIHRvLlxuICogQHBhcmFtIHVwZGF0ZUJhc2Uge2Jvb2xlYW59IFNob3VsZCB0aGUgYmFzZVRleHR1cmUud2lkdGggYW5kIGhlaWdodCB2YWx1ZXMgYmUgcmVzaXplZCBhcyB3ZWxsP1xuICovXG5SZW5kZXJUZXh0dXJlLnByb3RvdHlwZS5yZXNpemUgPSBmdW5jdGlvbiAod2lkdGgsIGhlaWdodCwgdXBkYXRlQmFzZSlcbntcbiAgICBpZiAod2lkdGggPT09IHRoaXMud2lkdGggJiYgaGVpZ2h0ID09PSB0aGlzLmhlaWdodClcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLnZhbGlkID0gKHdpZHRoID4gMCAmJiBoZWlnaHQgPiAwKTtcblxuICAgIHRoaXMud2lkdGggPSB0aGlzLl9mcmFtZS53aWR0aCA9IHRoaXMuY3JvcC53aWR0aCA9IHdpZHRoO1xuICAgIHRoaXMuaGVpZ2h0ID0gIHRoaXMuX2ZyYW1lLmhlaWdodCA9IHRoaXMuY3JvcC5oZWlnaHQgPSBoZWlnaHQ7XG5cbiAgICBpZiAodXBkYXRlQmFzZSlcbiAgICB7XG4gICAgICAgIHRoaXMuYmFzZVRleHR1cmUud2lkdGggPSB0aGlzLndpZHRoO1xuICAgICAgICB0aGlzLmJhc2VUZXh0dXJlLmhlaWdodCA9IHRoaXMuaGVpZ2h0O1xuICAgIH1cblxuICAgIGlmICghdGhpcy52YWxpZClcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLnRleHR1cmVCdWZmZXIucmVzaXplKHRoaXMud2lkdGgsIHRoaXMuaGVpZ2h0KTtcblxuICAgIGlmKHRoaXMuZmlsdGVyTWFuYWdlcilcbiAgICB7XG4gICAgICAgIHRoaXMuZmlsdGVyTWFuYWdlci5yZXNpemUodGhpcy53aWR0aCwgdGhpcy5oZWlnaHQpO1xuICAgIH1cbn07XG5cbi8qKlxuICogQ2xlYXJzIHRoZSBSZW5kZXJUZXh0dXJlLlxuICpcbiAqL1xuUmVuZGVyVGV4dHVyZS5wcm90b3R5cGUuY2xlYXIgPSBmdW5jdGlvbiAoKVxue1xuICAgIGlmICghdGhpcy52YWxpZClcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5yZW5kZXJlci50eXBlID09PSBDT05TVC5SRU5ERVJFUl9UWVBFLldFQkdMKVxuICAgIHtcbiAgICAgICAgdGhpcy5yZW5kZXJlci5nbC5iaW5kRnJhbWVidWZmZXIodGhpcy5yZW5kZXJlci5nbC5GUkFNRUJVRkZFUiwgdGhpcy50ZXh0dXJlQnVmZmVyLmZyYW1lQnVmZmVyKTtcbiAgICB9XG5cbiAgICB0aGlzLnRleHR1cmVCdWZmZXIuY2xlYXIoKTtcbn07XG5cbi8qKlxuICogSW50ZXJuYWwgbWV0aG9kIGFzc2lnbmVkIHRvIHRoZSBgcmVuZGVyYCBwcm9wZXJ0eSBpZiB1c2luZyBhIENhbnZhc1JlbmRlcmVyLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0gZGlzcGxheU9iamVjdCB7UElYSS5EaXNwbGF5T2JqZWN0fSBUaGUgZGlzcGxheSBvYmplY3QgdG8gcmVuZGVyIHRoaXMgdGV4dHVyZSBvblxuICogQHBhcmFtIFttYXRyaXhdIHtQSVhJLk1hdHJpeH0gT3B0aW9uYWwgbWF0cml4IHRvIGFwcGx5IHRvIHRoZSBkaXNwbGF5IG9iamVjdCBiZWZvcmUgcmVuZGVyaW5nLlxuICogQHBhcmFtIFtjbGVhcj1mYWxzZV0ge2Jvb2xlYW59IElmIHRydWUgdGhlIHRleHR1cmUgd2lsbCBiZSBjbGVhcmVkIGJlZm9yZSB0aGUgZGlzcGxheU9iamVjdCBpcyBkcmF3blxuICogQHBhcmFtIFt1cGRhdGVUcmFuc2Zvcm09dHJ1ZV0ge2Jvb2xlYW59IElmIHRydWUgdGhlIGRpc3BsYXlPYmplY3QncyB3b3JsZFRyYW5zZm9ybS93b3JsZEFscGhhIGFuZCBhbGwgY2hpbGRyZW5cbiAqICB0cmFuc2Zvcm1hdGlvbnMgd2lsbCBiZSByZXN0b3JlZC4gTm90IHJlc3RvcmluZyB0aGlzIGluZm9ybWF0aW9uIHdpbGwgYmUgYSBsaXR0bGUgZmFzdGVyLlxuICovXG5SZW5kZXJUZXh0dXJlLnByb3RvdHlwZS5yZW5kZXJXZWJHTCA9IGZ1bmN0aW9uIChkaXNwbGF5T2JqZWN0LCBtYXRyaXgsIGNsZWFyLCB1cGRhdGVUcmFuc2Zvcm0pXG57XG4gICAgaWYgKCF0aGlzLnZhbGlkKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuXG4gICAgdXBkYXRlVHJhbnNmb3JtID0gKHVwZGF0ZVRyYW5zZm9ybSAhPT0gdW5kZWZpbmVkKSA/IHVwZGF0ZVRyYW5zZm9ybSA6IHRydWU7Ly8hdXBkYXRlVHJhbnNmb3JtO1xuXG4gICAgdGhpcy50ZXh0dXJlQnVmZmVyLnRyYW5zZm9ybSA9IG1hdHJpeDtcblxuICAgIC8vVE9ETyBub3QgYSBmYW4gdGhhdCB0aGlzIGlzIGhlcmUuLi4gaXQgd2lsbCBtb3ZlIVxuICAgIHRoaXMudGV4dHVyZUJ1ZmZlci5hY3RpdmF0ZSgpO1xuXG4gICAgLy8gc2V0V29ybGQgQWxwaGEgdG8gZW5zdXJlIHRoYXQgdGhlIG9iamVjdCBpcyByZW5kZXJlciBhdCBmdWxsIG9wYWNpdHlcbiAgICBkaXNwbGF5T2JqZWN0LndvcmxkQWxwaGEgPSAxO1xuXG4gICAgaWYgKHVwZGF0ZVRyYW5zZm9ybSlcbiAgICB7XG5cbiAgICAgICAgLy8gcmVzZXQgdGhlIG1hdHJpeCBvZiB0aGUgZGlzcGxhdHlPYmplY3QuLlxuICAgICAgICBkaXNwbGF5T2JqZWN0LndvcmxkVHJhbnNmb3JtLmlkZW50aXR5KCk7XG5cbiAgICAgICAgZGlzcGxheU9iamVjdC5jdXJyZW50Qm91bmRzID0gbnVsbDtcblxuICAgICAgICAvLyBUaW1lIHRvIHVwZGF0ZSBhbGwgdGhlIGNoaWxkcmVuIG9mIHRoZSBkaXNwbGF5T2JqZWN0IHdpdGggdGhlIG5ldyBtYXRyaXguLlxuICAgICAgICB2YXIgY2hpbGRyZW4gPSBkaXNwbGF5T2JqZWN0LmNoaWxkcmVuO1xuICAgICAgICB2YXIgaSwgajtcblxuICAgICAgICBmb3IgKGkgPSAwLCBqID0gY2hpbGRyZW4ubGVuZ3RoOyBpIDwgajsgKytpKVxuICAgICAgICB7XG4gICAgICAgICAgICBjaGlsZHJlbltpXS51cGRhdGVUcmFuc2Zvcm0oKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vVE9ETyByZW5hbWUgdGV4dHVyZUJ1ZmZlciB0byByZW5kZXJUYXJnZXQuLlxuICAgIHZhciB0ZW1wID0gIHRoaXMucmVuZGVyZXIuZmlsdGVyTWFuYWdlcjtcblxuICAgIHRoaXMucmVuZGVyZXIuZmlsdGVyTWFuYWdlciA9IHRoaXMuZmlsdGVyTWFuYWdlcjtcbiAgICB0aGlzLnJlbmRlcmVyLnJlbmRlckRpc3BsYXlPYmplY3QoZGlzcGxheU9iamVjdCwgdGhpcy50ZXh0dXJlQnVmZmVyLCBjbGVhcik7XG5cbiAgICB0aGlzLnJlbmRlcmVyLmZpbHRlck1hbmFnZXIgPSB0ZW1wO1xufTtcblxuXG4vKipcbiAqIEludGVybmFsIG1ldGhvZCBhc3NpZ25lZCB0byB0aGUgYHJlbmRlcmAgcHJvcGVydHkgaWYgdXNpbmcgYSBDYW52YXNSZW5kZXJlci5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIGRpc3BsYXlPYmplY3Qge1BJWEkuRGlzcGxheU9iamVjdH0gVGhlIGRpc3BsYXkgb2JqZWN0IHRvIHJlbmRlciB0aGlzIHRleHR1cmUgb25cbiAqIEBwYXJhbSBbbWF0cml4XSB7UElYSS5NYXRyaXh9IE9wdGlvbmFsIG1hdHJpeCB0byBhcHBseSB0byB0aGUgZGlzcGxheSBvYmplY3QgYmVmb3JlIHJlbmRlcmluZy5cbiAqIEBwYXJhbSBbY2xlYXJdIHtib29sZWFufSBJZiB0cnVlIHRoZSB0ZXh0dXJlIHdpbGwgYmUgY2xlYXJlZCBiZWZvcmUgdGhlIGRpc3BsYXlPYmplY3QgaXMgZHJhd25cbiAqL1xuUmVuZGVyVGV4dHVyZS5wcm90b3R5cGUucmVuZGVyQ2FudmFzID0gZnVuY3Rpb24gKGRpc3BsYXlPYmplY3QsIG1hdHJpeCwgY2xlYXIsIHVwZGF0ZVRyYW5zZm9ybSlcbntcbiAgICBpZiAoIXRoaXMudmFsaWQpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdXBkYXRlVHJhbnNmb3JtID0gISF1cGRhdGVUcmFuc2Zvcm07XG5cbiAgICB2YXIgd3QgPSB0ZW1wTWF0cml4O1xuXG4gICAgd3QuaWRlbnRpdHkoKTtcblxuICAgIGlmIChtYXRyaXgpXG4gICAge1xuICAgICAgICB3dC5hcHBlbmQobWF0cml4KTtcbiAgICB9XG5cbiAgICB2YXIgY2FjaGVkV3QgPSBkaXNwbGF5T2JqZWN0LndvcmxkVHJhbnNmb3JtO1xuICAgIGRpc3BsYXlPYmplY3Qud29ybGRUcmFuc2Zvcm0gPSB3dDtcblxuICAgIC8vIHNldFdvcmxkIEFscGhhIHRvIGVuc3VyZSB0aGF0IHRoZSBvYmplY3QgaXMgcmVuZGVyZXIgYXQgZnVsbCBvcGFjaXR5XG4gICAgZGlzcGxheU9iamVjdC53b3JsZEFscGhhID0gMTtcblxuICAgIC8vIFRpbWUgdG8gdXBkYXRlIGFsbCB0aGUgY2hpbGRyZW4gb2YgdGhlIGRpc3BsYXlPYmplY3Qgd2l0aCB0aGUgbmV3IG1hdHJpeC4uXG4gICAgdmFyIGNoaWxkcmVuID0gZGlzcGxheU9iamVjdC5jaGlsZHJlbjtcbiAgICB2YXIgaSwgajtcblxuICAgIGZvciAoaSA9IDAsIGogPSBjaGlsZHJlbi5sZW5ndGg7IGkgPCBqOyArK2kpXG4gICAge1xuICAgICAgICBjaGlsZHJlbltpXS51cGRhdGVUcmFuc2Zvcm0oKTtcbiAgICB9XG5cbiAgICBpZiAoY2xlYXIpXG4gICAge1xuICAgICAgICB0aGlzLnRleHR1cmVCdWZmZXIuY2xlYXIoKTtcbiAgICB9XG5cblxuLy8gICAgdGhpcy50ZXh0dXJlQnVmZmVyLlxuICAgIHZhciBjb250ZXh0ID0gdGhpcy50ZXh0dXJlQnVmZmVyLmNvbnRleHQ7XG5cbiAgICB2YXIgcmVhbFJlc29sdXRpb24gPSB0aGlzLnJlbmRlcmVyLnJlc29sdXRpb247XG5cbiAgICB0aGlzLnJlbmRlcmVyLnJlc29sdXRpb24gPSB0aGlzLnJlc29sdXRpb247XG5cbiAgICB0aGlzLnJlbmRlcmVyLnJlbmRlckRpc3BsYXlPYmplY3QoZGlzcGxheU9iamVjdCwgY29udGV4dCk7XG5cbiAgICB0aGlzLnJlbmRlcmVyLnJlc29sdXRpb24gPSByZWFsUmVzb2x1dGlvbjtcblxuICAgIGlmKGRpc3BsYXlPYmplY3Qud29ybGRUcmFuc2Zvcm0gPT09IHd0KVxuICAgIHtcbiAgICAgICAgLy8gZml4ZXMgY2FjaGVBc0JpdG1hcCBIYXBwZW5pbmcgZHVyaW5nIHRoZSBhYm92ZS4uXG4gICAgICAgIGRpc3BsYXlPYmplY3Qud29ybGRUcmFuc2Zvcm0gPSBjYWNoZWRXdDtcbiAgICB9XG5cbn07XG5cbi8qKlxuICogRGVzdHJveXMgdGhpcyB0ZXh0dXJlXG4gKlxuICogQHBhcmFtIGRlc3Ryb3lCYXNlIHtib29sZWFufSBXaGV0aGVyIHRvIGRlc3Ryb3kgdGhlIGJhc2UgdGV4dHVyZSBhcyB3ZWxsXG4gKi9cblJlbmRlclRleHR1cmUucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoKVxue1xuICAgIFRleHR1cmUucHJvdG90eXBlLmRlc3Ryb3kuY2FsbCh0aGlzLCB0cnVlKTtcblxuICAgIHRoaXMudGV4dHVyZUJ1ZmZlci5kZXN0cm95KCk7XG5cbiAgICAvLyBkZXN0cm95IHRoZSBmaWx0ZXJtYW5hZ2VyLi5cbiAgICBpZih0aGlzLmZpbHRlck1hbmFnZXIpXG4gICAge1xuICAgICAgICB0aGlzLmZpbHRlck1hbmFnZXIuZGVzdHJveSgpO1xuICAgIH1cblxuICAgIHRoaXMucmVuZGVyZXIgPSBudWxsO1xufTtcblxuLyoqXG4gKiBXaWxsIHJldHVybiBhIEhUTUwgSW1hZ2Ugb2YgdGhlIHRleHR1cmVcbiAqXG4gKiBAcmV0dXJuIHtJbWFnZX1cbiAqL1xuUmVuZGVyVGV4dHVyZS5wcm90b3R5cGUuZ2V0SW1hZ2UgPSBmdW5jdGlvbiAoKVxue1xuICAgIHZhciBpbWFnZSA9IG5ldyBJbWFnZSgpO1xuICAgIGltYWdlLnNyYyA9IHRoaXMuZ2V0QmFzZTY0KCk7XG4gICAgcmV0dXJuIGltYWdlO1xufTtcblxuLyoqXG4gKiBXaWxsIHJldHVybiBhIGEgYmFzZTY0IGVuY29kZWQgc3RyaW5nIG9mIHRoaXMgdGV4dHVyZS4gSXQgd29ya3MgYnkgY2FsbGluZyBSZW5kZXJUZXh0dXJlLmdldENhbnZhcyBhbmQgdGhlbiBydW5uaW5nIHRvRGF0YVVSTCBvbiB0aGF0LlxuICpcbiAqIEByZXR1cm4ge3N0cmluZ30gQSBiYXNlNjQgZW5jb2RlZCBzdHJpbmcgb2YgdGhlIHRleHR1cmUuXG4gKi9cblJlbmRlclRleHR1cmUucHJvdG90eXBlLmdldEJhc2U2NCA9IGZ1bmN0aW9uICgpXG57XG4gICAgcmV0dXJuIHRoaXMuZ2V0Q2FudmFzKCkudG9EYXRhVVJMKCk7XG59O1xuXG4vKipcbiAqIENyZWF0ZXMgYSBDYW52YXMgZWxlbWVudCwgcmVuZGVycyB0aGlzIFJlbmRlclRleHR1cmUgdG8gaXQgYW5kIHRoZW4gcmV0dXJucyBpdC5cbiAqXG4gKiBAcmV0dXJuIHtIVE1MQ2FudmFzRWxlbWVudH0gQSBDYW52YXMgZWxlbWVudCB3aXRoIHRoZSB0ZXh0dXJlIHJlbmRlcmVkIG9uLlxuICovXG5SZW5kZXJUZXh0dXJlLnByb3RvdHlwZS5nZXRDYW52YXMgPSBmdW5jdGlvbiAoKVxue1xuICAgIGlmICh0aGlzLnJlbmRlcmVyLnR5cGUgPT09IENPTlNULlJFTkRFUkVSX1RZUEUuV0VCR0wpXG4gICAge1xuICAgICAgICB2YXIgZ2wgPSB0aGlzLnJlbmRlcmVyLmdsO1xuICAgICAgICB2YXIgd2lkdGggPSB0aGlzLnRleHR1cmVCdWZmZXIuc2l6ZS53aWR0aDtcbiAgICAgICAgdmFyIGhlaWdodCA9IHRoaXMudGV4dHVyZUJ1ZmZlci5zaXplLmhlaWdodDtcblxuICAgICAgICB2YXIgd2ViR0xQaXhlbHMgPSBuZXcgVWludDhBcnJheSg0ICogd2lkdGggKiBoZWlnaHQpO1xuXG4gICAgICAgIGdsLmJpbmRGcmFtZWJ1ZmZlcihnbC5GUkFNRUJVRkZFUiwgdGhpcy50ZXh0dXJlQnVmZmVyLmZyYW1lQnVmZmVyKTtcbiAgICAgICAgZ2wucmVhZFBpeGVscygwLCAwLCB3aWR0aCwgaGVpZ2h0LCBnbC5SR0JBLCBnbC5VTlNJR05FRF9CWVRFLCB3ZWJHTFBpeGVscyk7XG4gICAgICAgIGdsLmJpbmRGcmFtZWJ1ZmZlcihnbC5GUkFNRUJVRkZFUiwgbnVsbCk7XG5cbiAgICAgICAgdmFyIHRlbXBDYW52YXMgPSBuZXcgQ2FudmFzQnVmZmVyKHdpZHRoLCBoZWlnaHQpO1xuICAgICAgICB2YXIgY2FudmFzRGF0YSA9IHRlbXBDYW52YXMuY29udGV4dC5nZXRJbWFnZURhdGEoMCwgMCwgd2lkdGgsIGhlaWdodCk7XG4gICAgICAgIGNhbnZhc0RhdGEuZGF0YS5zZXQod2ViR0xQaXhlbHMpO1xuXG4gICAgICAgIHRlbXBDYW52YXMuY29udGV4dC5wdXRJbWFnZURhdGEoY2FudmFzRGF0YSwgMCwgMCk7XG5cbiAgICAgICAgcmV0dXJuIHRlbXBDYW52YXMuY2FudmFzO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICByZXR1cm4gdGhpcy50ZXh0dXJlQnVmZmVyLmNhbnZhcztcbiAgICB9XG59O1xuXG4vKipcbiAqIFdpbGwgcmV0dXJuIGEgb25lLWRpbWVuc2lvbmFsIGFycmF5IGNvbnRhaW5pbmcgdGhlIHBpeGVsIGRhdGEgb2YgdGhlIGVudGlyZSB0ZXh0dXJlIGluIFJHQkEgb3JkZXIsIHdpdGggaW50ZWdlciB2YWx1ZXMgYmV0d2VlbiAwIGFuZCAyNTUgKGluY2x1ZGVkKS5cbiAqXG4gKiBAcmV0dXJuIHtVaW50OENsYW1wZWRBcnJheX1cbiAqL1xuUmVuZGVyVGV4dHVyZS5wcm90b3R5cGUuZ2V0UGl4ZWxzID0gZnVuY3Rpb24gKClcbntcbiAgICB2YXIgd2lkdGgsIGhlaWdodDtcblxuICAgIGlmICh0aGlzLnJlbmRlcmVyLnR5cGUgPT09IENPTlNULlJFTkRFUkVSX1RZUEUuV0VCR0wpXG4gICAge1xuICAgICAgICB2YXIgZ2wgPSB0aGlzLnJlbmRlcmVyLmdsO1xuICAgICAgICB3aWR0aCA9IHRoaXMudGV4dHVyZUJ1ZmZlci5zaXplLndpZHRoO1xuICAgICAgICBoZWlnaHQgPSB0aGlzLnRleHR1cmVCdWZmZXIuc2l6ZS5oZWlnaHQ7XG5cbiAgICAgICAgdmFyIHdlYkdMUGl4ZWxzID0gbmV3IFVpbnQ4QXJyYXkoNCAqIHdpZHRoICogaGVpZ2h0KTtcblxuICAgICAgICBnbC5iaW5kRnJhbWVidWZmZXIoZ2wuRlJBTUVCVUZGRVIsIHRoaXMudGV4dHVyZUJ1ZmZlci5mcmFtZUJ1ZmZlcik7XG4gICAgICAgIGdsLnJlYWRQaXhlbHMoMCwgMCwgd2lkdGgsIGhlaWdodCwgZ2wuUkdCQSwgZ2wuVU5TSUdORURfQllURSwgd2ViR0xQaXhlbHMpO1xuICAgICAgICBnbC5iaW5kRnJhbWVidWZmZXIoZ2wuRlJBTUVCVUZGRVIsIG51bGwpO1xuXG4gICAgICAgIHJldHVybiB3ZWJHTFBpeGVscztcbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgd2lkdGggPSB0aGlzLnRleHR1cmVCdWZmZXIuY2FudmFzLndpZHRoO1xuICAgICAgICBoZWlnaHQgPSB0aGlzLnRleHR1cmVCdWZmZXIuY2FudmFzLmhlaWdodDtcblxuICAgICAgICByZXR1cm4gdGhpcy50ZXh0dXJlQnVmZmVyLmNhbnZhcy5nZXRDb250ZXh0KCcyZCcpLmdldEltYWdlRGF0YSgwLCAwLCB3aWR0aCwgaGVpZ2h0KS5kYXRhO1xuICAgIH1cbn07XG5cbi8qKlxuICogV2lsbCByZXR1cm4gYSBvbmUtZGltZW5zaW9uYWwgYXJyYXkgY29udGFpbmluZyB0aGUgcGl4ZWwgZGF0YSBvZiBhIHBpeGVsIHdpdGhpbiB0aGUgdGV4dHVyZSBpbiBSR0JBIG9yZGVyLCB3aXRoIGludGVnZXIgdmFsdWVzIGJldHdlZW4gMCBhbmQgMjU1IChpbmNsdWRlZCkuXG4gKlxuICogQHBhcmFtIHgge251bWJlcn0gVGhlIHggY29vcmRpbmF0ZSBvZiB0aGUgcGl4ZWwgdG8gcmV0cmlldmUuXG4gKiBAcGFyYW0geSB7bnVtYmVyfSBUaGUgeSBjb29yZGluYXRlIG9mIHRoZSBwaXhlbCB0byByZXRyaWV2ZS5cbiAqIEByZXR1cm4ge1VpbnQ4Q2xhbXBlZEFycmF5fVxuICovXG5SZW5kZXJUZXh0dXJlLnByb3RvdHlwZS5nZXRQaXhlbCA9IGZ1bmN0aW9uICh4LCB5KVxue1xuICAgIGlmICh0aGlzLnJlbmRlcmVyLnR5cGUgPT09IENPTlNULlJFTkRFUkVSX1RZUEUuV0VCR0wpXG4gICAge1xuICAgICAgICB2YXIgZ2wgPSB0aGlzLnJlbmRlcmVyLmdsO1xuXG4gICAgICAgIHZhciB3ZWJHTFBpeGVscyA9IG5ldyBVaW50OEFycmF5KDQpO1xuXG4gICAgICAgIGdsLmJpbmRGcmFtZWJ1ZmZlcihnbC5GUkFNRUJVRkZFUiwgdGhpcy50ZXh0dXJlQnVmZmVyLmZyYW1lQnVmZmVyKTtcbiAgICAgICAgZ2wucmVhZFBpeGVscyh4LCB5LCAxLCAxLCBnbC5SR0JBLCBnbC5VTlNJR05FRF9CWVRFLCB3ZWJHTFBpeGVscyk7XG4gICAgICAgIGdsLmJpbmRGcmFtZWJ1ZmZlcihnbC5GUkFNRUJVRkZFUiwgbnVsbCk7XG5cbiAgICAgICAgcmV0dXJuIHdlYkdMUGl4ZWxzO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICByZXR1cm4gdGhpcy50ZXh0dXJlQnVmZmVyLmNhbnZhcy5nZXRDb250ZXh0KCcyZCcpLmdldEltYWdlRGF0YSh4LCB5LCAxLCAxKS5kYXRhO1xuICAgIH1cbn07XG4iLCJ2YXIgQmFzZVRleHR1cmUgPSByZXF1aXJlKCcuL0Jhc2VUZXh0dXJlJyksXG4gICAgVmlkZW9CYXNlVGV4dHVyZSA9IHJlcXVpcmUoJy4vVmlkZW9CYXNlVGV4dHVyZScpLFxuICAgIFRleHR1cmVVdnMgPSByZXF1aXJlKCcuL1RleHR1cmVVdnMnKSxcbiAgICBFdmVudEVtaXR0ZXIgPSByZXF1aXJlKCdldmVudGVtaXR0ZXIzJyksXG4gICAgbWF0aCA9IHJlcXVpcmUoJy4uL21hdGgnKSxcbiAgICB1dGlscyA9IHJlcXVpcmUoJy4uL3V0aWxzJyk7XG5cbi8qKlxuICogQSB0ZXh0dXJlIHN0b3JlcyB0aGUgaW5mb3JtYXRpb24gdGhhdCByZXByZXNlbnRzIGFuIGltYWdlIG9yIHBhcnQgb2YgYW4gaW1hZ2UuIEl0IGNhbm5vdCBiZSBhZGRlZFxuICogdG8gdGhlIGRpc3BsYXkgbGlzdCBkaXJlY3RseS4gSW5zdGVhZCB1c2UgaXQgYXMgdGhlIHRleHR1cmUgZm9yIGEgU3ByaXRlLiBJZiBubyBmcmFtZSBpcyBwcm92aWRlZCB0aGVuIHRoZSB3aG9sZSBpbWFnZSBpcyB1c2VkLlxuICpcbiAqIFlvdSBjYW4gZGlyZWN0bHkgY3JlYXRlIGEgdGV4dHVyZSBmcm9tIGFuIGltYWdlIGFuZCB0aGVuIHJldXNlIGl0IG11bHRpcGxlIHRpbWVzIGxpa2UgdGhpcyA6XG4gKlxuICogYGBganNcbiAqIHZhciB0ZXh0dXJlID0gUElYSS5UZXh0dXJlLmZyb21JbWFnZSgnYXNzZXRzL2ltYWdlLnBuZycpO1xuICogdmFyIHNwcml0ZTEgPSBuZXcgUElYSS5TcHJpdGUodGV4dHVyZSk7XG4gKiB2YXIgc3ByaXRlMiA9IG5ldyBQSVhJLlNwcml0ZSh0ZXh0dXJlKTtcbiAqIGBgYFxuICpcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqIEBwYXJhbSBiYXNlVGV4dHVyZSB7UElYSS5CYXNlVGV4dHVyZX0gVGhlIGJhc2UgdGV4dHVyZSBzb3VyY2UgdG8gY3JlYXRlIHRoZSB0ZXh0dXJlIGZyb21cbiAqIEBwYXJhbSBbZnJhbWVdIHtQSVhJLlJlY3RhbmdsZX0gVGhlIHJlY3RhbmdsZSBmcmFtZSBvZiB0aGUgdGV4dHVyZSB0byBzaG93XG4gKiBAcGFyYW0gW2Nyb3BdIHtQSVhJLlJlY3RhbmdsZX0gVGhlIGFyZWEgb2Ygb3JpZ2luYWwgdGV4dHVyZVxuICogQHBhcmFtIFt0cmltXSB7UElYSS5SZWN0YW5nbGV9IFRyaW1tZWQgdGV4dHVyZSByZWN0YW5nbGVcbiAqIEBwYXJhbSBbcm90YXRlXSB7Ym9vbGVhbn0gaW5kaWNhdGVzIHdoZXRoZXIgdGhlIHRleHR1cmUgc2hvdWxkIGJlIHJvdGF0ZWQgYnkgOTAgZGVncmVlcyAoIHVzZWQgYnkgdGV4dHVyZSBwYWNrZXIgKVxuICovXG5mdW5jdGlvbiBUZXh0dXJlKGJhc2VUZXh0dXJlLCBmcmFtZSwgY3JvcCwgdHJpbSwgcm90YXRlKVxue1xuICAgIEV2ZW50RW1pdHRlci5jYWxsKHRoaXMpO1xuXG4gICAgLyoqXG4gICAgICogRG9lcyB0aGlzIFRleHR1cmUgaGF2ZSBhbnkgZnJhbWUgZGF0YSBhc3NpZ25lZCB0byBpdD9cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICovXG4gICAgdGhpcy5ub0ZyYW1lID0gZmFsc2U7XG5cbiAgICBpZiAoIWZyYW1lKVxuICAgIHtcbiAgICAgICAgdGhpcy5ub0ZyYW1lID0gdHJ1ZTtcbiAgICAgICAgZnJhbWUgPSBuZXcgbWF0aC5SZWN0YW5nbGUoMCwgMCwgMSwgMSk7XG4gICAgfVxuXG4gICAgaWYgKGJhc2VUZXh0dXJlIGluc3RhbmNlb2YgVGV4dHVyZSlcbiAgICB7XG4gICAgICAgIGJhc2VUZXh0dXJlID0gYmFzZVRleHR1cmUuYmFzZVRleHR1cmU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhlIGJhc2UgdGV4dHVyZSB0aGF0IHRoaXMgdGV4dHVyZSB1c2VzLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5CYXNlVGV4dHVyZX1cbiAgICAgKi9cbiAgICB0aGlzLmJhc2VUZXh0dXJlID0gYmFzZVRleHR1cmU7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgZnJhbWUgc3BlY2lmaWVzIHRoZSByZWdpb24gb2YgdGhlIGJhc2UgdGV4dHVyZSB0aGF0IHRoaXMgdGV4dHVyZSB1c2VzXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlJlY3RhbmdsZX1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX2ZyYW1lID0gZnJhbWU7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgdGV4dHVyZSB0cmltIGRhdGEuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlJlY3RhbmdsZX1cbiAgICAgKi9cbiAgICB0aGlzLnRyaW0gPSB0cmltO1xuXG4gICAgLyoqXG4gICAgICogVGhpcyB3aWxsIGxldCB0aGUgcmVuZGVyZXIga25vdyBpZiB0aGUgdGV4dHVyZSBpcyB2YWxpZC4gSWYgaXQncyBub3QgdGhlbiBpdCBjYW5ub3QgYmUgcmVuZGVyZWQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqL1xuICAgIHRoaXMudmFsaWQgPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIFRoaXMgd2lsbCBsZXQgYSByZW5kZXJlciBrbm93IHRoYXQgYSB0ZXh0dXJlIGhhcyBiZWVuIHVwZGF0ZWQgKHVzZWQgbWFpbmx5IGZvciB3ZWJHTCB1diB1cGRhdGVzKVxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKi9cbiAgICB0aGlzLnJlcXVpcmVzVXBkYXRlID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgV2ViR0wgVVYgZGF0YSBjYWNoZS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuVGV4dHVyZVV2c31cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX3V2cyA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgd2lkdGggb2YgdGhlIFRleHR1cmUgaW4gcGl4ZWxzLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMud2lkdGggPSAwO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGhlaWdodCBvZiB0aGUgVGV4dHVyZSBpbiBwaXhlbHMuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy5oZWlnaHQgPSAwO1xuXG4gICAgLyoqXG4gICAgICogVGhpcyBpcyB0aGUgYXJlYSBvZiB0aGUgQmFzZVRleHR1cmUgaW1hZ2UgdG8gYWN0dWFsbHkgY29weSB0byB0aGUgQ2FudmFzIC8gV2ViR0wgd2hlbiByZW5kZXJpbmcsXG4gICAgICogaXJyZXNwZWN0aXZlIG9mIHRoZSBhY3R1YWwgZnJhbWUgc2l6ZSBvciBwbGFjZW1lbnQgKHdoaWNoIGNhbiBiZSBpbmZsdWVuY2VkIGJ5IHRyaW1tZWQgdGV4dHVyZSBhdGxhc2VzKVxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5SZWN0YW5nbGV9XG4gICAgICovXG4gICAgdGhpcy5jcm9wID0gY3JvcCB8fCBmcmFtZTsvL25ldyBtYXRoLlJlY3RhbmdsZSgwLCAwLCAxLCAxKTtcblxuICAgIC8qKlxuICAgICAqIEluZGljYXRlcyB3aGV0aGVyIHRoZSB0ZXh0dXJlIHNob3VsZCBiZSByb3RhdGVkIGJ5IDkwIGRlZ3JlZXNcbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKi9cbiAgICB0aGlzLnJvdGF0ZSA9ICEhcm90YXRlO1xuXG4gICAgaWYgKGJhc2VUZXh0dXJlLmhhc0xvYWRlZClcbiAgICB7XG4gICAgICAgIGlmICh0aGlzLm5vRnJhbWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGZyYW1lID0gbmV3IG1hdGguUmVjdGFuZ2xlKDAsIDAsIGJhc2VUZXh0dXJlLndpZHRoLCBiYXNlVGV4dHVyZS5oZWlnaHQpO1xuXG4gICAgICAgICAgICAvLyBpZiB0aGVyZSBpcyBubyBmcmFtZSB3ZSBzaG91bGQgbW9uaXRvciBmb3IgYW55IGJhc2UgdGV4dHVyZSBjaGFuZ2VzLi5cbiAgICAgICAgICAgIGJhc2VUZXh0dXJlLm9uKCd1cGRhdGUnLCB0aGlzLm9uQmFzZVRleHR1cmVVcGRhdGVkLCB0aGlzKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmZyYW1lID0gZnJhbWU7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIGJhc2VUZXh0dXJlLm9uY2UoJ2xvYWRlZCcsIHRoaXMub25CYXNlVGV4dHVyZUxvYWRlZCwgdGhpcyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRmlyZWQgd2hlbiB0aGUgdGV4dHVyZSBpcyB1cGRhdGVkLiBUaGlzIGhhcHBlbnMgaWYgdGhlIGZyYW1lIG9yIHRoZSBiYXNlVGV4dHVyZSBpcyB1cGRhdGVkLlxuICAgICAqXG4gICAgICogQGV2ZW50IHVwZGF0ZVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLlRleHR1cmUjXG4gICAgICogQHByb3RlY3RlZFxuICAgICAqL1xufVxuXG5UZXh0dXJlLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoRXZlbnRFbWl0dGVyLnByb3RvdHlwZSk7XG5UZXh0dXJlLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFRleHR1cmU7XG5tb2R1bGUuZXhwb3J0cyA9IFRleHR1cmU7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKFRleHR1cmUucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogVGhlIGZyYW1lIHNwZWNpZmllcyB0aGUgcmVnaW9uIG9mIHRoZSBiYXNlIHRleHR1cmUgdGhhdCB0aGlzIHRleHR1cmUgdXNlcy5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuUmVjdGFuZ2xlfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLlRleHR1cmUjXG4gICAgICovXG4gICAgZnJhbWU6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fZnJhbWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKGZyYW1lKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLl9mcmFtZSA9IGZyYW1lO1xuXG4gICAgICAgICAgICB0aGlzLm5vRnJhbWUgPSBmYWxzZTtcblxuICAgICAgICAgICAgdGhpcy53aWR0aCA9IGZyYW1lLndpZHRoO1xuICAgICAgICAgICAgdGhpcy5oZWlnaHQgPSBmcmFtZS5oZWlnaHQ7XG5cbiAgICAgICAgICAgIGlmICghdGhpcy50cmltICYmICF0aGlzLnJvdGF0ZSAmJiAoZnJhbWUueCArIGZyYW1lLndpZHRoID4gdGhpcy5iYXNlVGV4dHVyZS53aWR0aCB8fCBmcmFtZS55ICsgZnJhbWUuaGVpZ2h0ID4gdGhpcy5iYXNlVGV4dHVyZS5oZWlnaHQpKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignVGV4dHVyZSBFcnJvcjogZnJhbWUgZG9lcyBub3QgZml0IGluc2lkZSB0aGUgYmFzZSBUZXh0dXJlIGRpbWVuc2lvbnMgJyArIHRoaXMpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvL3RoaXMudmFsaWQgPSBmcmFtZSAmJiBmcmFtZS53aWR0aCAmJiBmcmFtZS5oZWlnaHQgJiYgdGhpcy5iYXNlVGV4dHVyZS5zb3VyY2UgJiYgdGhpcy5iYXNlVGV4dHVyZS5oYXNMb2FkZWQ7XG4gICAgICAgICAgICB0aGlzLnZhbGlkID0gZnJhbWUgJiYgZnJhbWUud2lkdGggJiYgZnJhbWUuaGVpZ2h0ICYmIHRoaXMuYmFzZVRleHR1cmUuaGFzTG9hZGVkO1xuXG4gICAgICAgICAgICBpZiAodGhpcy50cmltKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHRoaXMud2lkdGggPSB0aGlzLnRyaW0ud2lkdGg7XG4gICAgICAgICAgICAgICAgdGhpcy5oZWlnaHQgPSB0aGlzLnRyaW0uaGVpZ2h0O1xuICAgICAgICAgICAgICAgIHRoaXMuX2ZyYW1lLndpZHRoID0gdGhpcy50cmltLndpZHRoO1xuICAgICAgICAgICAgICAgIHRoaXMuX2ZyYW1lLmhlaWdodCA9IHRoaXMudHJpbS5oZWlnaHQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdGhpcy5jcm9wID0gZnJhbWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICh0aGlzLnZhbGlkKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHRoaXMuX3VwZGF0ZVV2cygpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxufSk7XG5cbi8qKlxuICogVXBkYXRlcyB0aGlzIHRleHR1cmUgb24gdGhlIGdwdS5cbiAqXG4gKi9cblRleHR1cmUucHJvdG90eXBlLnVwZGF0ZSA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy5iYXNlVGV4dHVyZS51cGRhdGUoKTtcbn07XG5cbi8qKlxuICogQ2FsbGVkIHdoZW4gdGhlIGJhc2UgdGV4dHVyZSBpcyBsb2FkZWRcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5UZXh0dXJlLnByb3RvdHlwZS5vbkJhc2VUZXh0dXJlTG9hZGVkID0gZnVuY3Rpb24gKGJhc2VUZXh0dXJlKVxue1xuICAgIC8vIFRPRE8gdGhpcyBjb2RlIGxvb2tzIGNvbmZ1c2luZy4uIGJvbyB0byBhYnVzaW5nIGdldHRlcnMgYW5kIHNldHRlcnNzIVxuICAgIGlmICh0aGlzLm5vRnJhbWUpXG4gICAge1xuICAgICAgICB0aGlzLmZyYW1lID0gbmV3IG1hdGguUmVjdGFuZ2xlKDAsIDAsIGJhc2VUZXh0dXJlLndpZHRoLCBiYXNlVGV4dHVyZS5oZWlnaHQpO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICB0aGlzLmZyYW1lID0gdGhpcy5fZnJhbWU7XG4gICAgfVxuXG4gICAgdGhpcy5lbWl0KCd1cGRhdGUnLCB0aGlzKTtcbn07XG5cbi8qKlxuICogQ2FsbGVkIHdoZW4gdGhlIGJhc2UgdGV4dHVyZSBpcyB1cGRhdGVkXG4gKlxuICogQHByaXZhdGVcbiAqL1xuVGV4dHVyZS5wcm90b3R5cGUub25CYXNlVGV4dHVyZVVwZGF0ZWQgPSBmdW5jdGlvbiAoYmFzZVRleHR1cmUpXG57XG4gICAgdGhpcy5fZnJhbWUud2lkdGggPSBiYXNlVGV4dHVyZS53aWR0aDtcbiAgICB0aGlzLl9mcmFtZS5oZWlnaHQgPSBiYXNlVGV4dHVyZS5oZWlnaHQ7XG5cbiAgICB0aGlzLmVtaXQoJ3VwZGF0ZScsIHRoaXMpO1xufTtcblxuLyoqXG4gKiBEZXN0cm95cyB0aGlzIHRleHR1cmVcbiAqXG4gKiBAcGFyYW0gW2Rlc3Ryb3lCYXNlPWZhbHNlXSB7Ym9vbGVhbn0gV2hldGhlciB0byBkZXN0cm95IHRoZSBiYXNlIHRleHR1cmUgYXMgd2VsbFxuICovXG5UZXh0dXJlLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKGRlc3Ryb3lCYXNlKVxue1xuICAgIGlmICh0aGlzLmJhc2VUZXh0dXJlKVxuICAgIHtcbiAgICAgICAgaWYgKGRlc3Ryb3lCYXNlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmJhc2VUZXh0dXJlLmRlc3Ryb3koKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuYmFzZVRleHR1cmUub2ZmKCd1cGRhdGUnLCB0aGlzLm9uQmFzZVRleHR1cmVVcGRhdGVkLCB0aGlzKTtcbiAgICAgICAgdGhpcy5iYXNlVGV4dHVyZS5vZmYoJ2xvYWRlZCcsIHRoaXMub25CYXNlVGV4dHVyZUxvYWRlZCwgdGhpcyk7XG5cbiAgICAgICAgdGhpcy5iYXNlVGV4dHVyZSA9IG51bGw7XG4gICAgfVxuXG4gICAgdGhpcy5fZnJhbWUgPSBudWxsO1xuICAgIHRoaXMuX3V2cyA9IG51bGw7XG4gICAgdGhpcy50cmltID0gbnVsbDtcbiAgICB0aGlzLmNyb3AgPSBudWxsO1xuXG4gICAgdGhpcy52YWxpZCA9IGZhbHNlO1xuXG4gICAgdGhpcy5vZmYoJ2Rpc3Bvc2UnLCB0aGlzLmRpc3Bvc2UsIHRoaXMpO1xuICAgIHRoaXMub2ZmKCd1cGRhdGUnLCB0aGlzLnVwZGF0ZSwgdGhpcyk7XG59O1xuXG4vKipcbiAqIENyZWF0ZXMgYSBuZXcgdGV4dHVyZSBvYmplY3QgdGhhdCBhY3RzIHRoZSBzYW1lIGFzIHRoaXMgb25lLlxuICpcbiAqIEByZXR1cm4ge1BJWEkuVGV4dHVyZX1cbiAqL1xuVGV4dHVyZS5wcm90b3R5cGUuY2xvbmUgPSBmdW5jdGlvbiAoKVxue1xuICAgIHJldHVybiBuZXcgVGV4dHVyZSh0aGlzLmJhc2VUZXh0dXJlLCB0aGlzLmZyYW1lLCB0aGlzLmNyb3AsIHRoaXMudHJpbSwgdGhpcy5yb3RhdGUpO1xufTtcblxuLyoqXG4gKiBVcGRhdGVzIHRoZSBpbnRlcm5hbCBXZWJHTCBVViBjYWNoZS5cbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5UZXh0dXJlLnByb3RvdHlwZS5fdXBkYXRlVXZzID0gZnVuY3Rpb24gKClcbntcbiAgICBpZiAoIXRoaXMuX3V2cylcbiAgICB7XG4gICAgICAgIHRoaXMuX3V2cyA9IG5ldyBUZXh0dXJlVXZzKCk7XG4gICAgfVxuXG4gICAgdGhpcy5fdXZzLnNldCh0aGlzLmNyb3AsIHRoaXMuYmFzZVRleHR1cmUsIHRoaXMucm90YXRlKTtcbn07XG5cbi8qKlxuICogSGVscGVyIGZ1bmN0aW9uIHRoYXQgY3JlYXRlcyBhIFRleHR1cmUgb2JqZWN0IGZyb20gdGhlIGdpdmVuIGltYWdlIHVybC5cbiAqIElmIHRoZSBpbWFnZSBpcyBub3QgaW4gdGhlIHRleHR1cmUgY2FjaGUgaXQgd2lsbCBiZSAgY3JlYXRlZCBhbmQgbG9hZGVkLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBwYXJhbSBpbWFnZVVybCB7c3RyaW5nfSBUaGUgaW1hZ2UgdXJsIG9mIHRoZSB0ZXh0dXJlXG4gKiBAcGFyYW0gY3Jvc3NvcmlnaW4ge2Jvb2xlYW59IFdoZXRoZXIgcmVxdWVzdHMgc2hvdWxkIGJlIHRyZWF0ZWQgYXMgY3Jvc3NvcmlnaW5cbiAqIEBwYXJhbSBzY2FsZU1vZGUge251bWJlcn0gU2VlIHtAbGluayBQSVhJLlNDQUxFX01PREVTfSBmb3IgcG9zc2libGUgdmFsdWVzXG4gKiBAcmV0dXJuIHtQSVhJLlRleHR1cmV9IFRoZSBuZXdseSBjcmVhdGVkIHRleHR1cmVcbiAqL1xuVGV4dHVyZS5mcm9tSW1hZ2UgPSBmdW5jdGlvbiAoaW1hZ2VVcmwsIGNyb3Nzb3JpZ2luLCBzY2FsZU1vZGUpXG57XG4gICAgdmFyIHRleHR1cmUgPSB1dGlscy5UZXh0dXJlQ2FjaGVbaW1hZ2VVcmxdO1xuXG4gICAgaWYgKCF0ZXh0dXJlKVxuICAgIHtcbiAgICAgICAgdGV4dHVyZSA9IG5ldyBUZXh0dXJlKEJhc2VUZXh0dXJlLmZyb21JbWFnZShpbWFnZVVybCwgY3Jvc3NvcmlnaW4sIHNjYWxlTW9kZSkpO1xuICAgICAgICB1dGlscy5UZXh0dXJlQ2FjaGVbaW1hZ2VVcmxdID0gdGV4dHVyZTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGV4dHVyZTtcbn07XG5cbi8qKlxuICogSGVscGVyIGZ1bmN0aW9uIHRoYXQgY3JlYXRlcyBhIHNwcml0ZSB0aGF0IHdpbGwgY29udGFpbiBhIHRleHR1cmUgZnJvbSB0aGUgVGV4dHVyZUNhY2hlIGJhc2VkIG9uIHRoZSBmcmFtZUlkXG4gKiBUaGUgZnJhbWUgaWRzIGFyZSBjcmVhdGVkIHdoZW4gYSBUZXh0dXJlIHBhY2tlciBmaWxlIGhhcyBiZWVuIGxvYWRlZFxuICpcbiAqIEBzdGF0aWNcbiAqIEBwYXJhbSBmcmFtZUlkIHtzdHJpbmd9IFRoZSBmcmFtZSBJZCBvZiB0aGUgdGV4dHVyZSBpbiB0aGUgY2FjaGVcbiAqIEByZXR1cm4ge1BJWEkuVGV4dHVyZX0gVGhlIG5ld2x5IGNyZWF0ZWQgdGV4dHVyZVxuICovXG5UZXh0dXJlLmZyb21GcmFtZSA9IGZ1bmN0aW9uIChmcmFtZUlkKVxue1xuICAgIHZhciB0ZXh0dXJlID0gdXRpbHMuVGV4dHVyZUNhY2hlW2ZyYW1lSWRdO1xuXG4gICAgaWYgKCF0ZXh0dXJlKVxuICAgIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdUaGUgZnJhbWVJZCBcIicgKyBmcmFtZUlkICsgJ1wiIGRvZXMgbm90IGV4aXN0IGluIHRoZSB0ZXh0dXJlIGNhY2hlJyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRleHR1cmU7XG59O1xuXG4vKipcbiAqIEhlbHBlciBmdW5jdGlvbiB0aGF0IGNyZWF0ZXMgYSBuZXcgVGV4dHVyZSBiYXNlZCBvbiB0aGUgZ2l2ZW4gY2FudmFzIGVsZW1lbnQuXG4gKlxuICogQHN0YXRpY1xuICogQHBhcmFtIGNhbnZhcyB7Q2FudmFzfSBUaGUgY2FudmFzIGVsZW1lbnQgc291cmNlIG9mIHRoZSB0ZXh0dXJlXG4gKiBAcGFyYW0gc2NhbGVNb2RlIHtudW1iZXJ9IFNlZSB7QGxpbmsgUElYSS5TQ0FMRV9NT0RFU30gZm9yIHBvc3NpYmxlIHZhbHVlc1xuICogQHJldHVybiB7UElYSS5UZXh0dXJlfVxuICovXG5UZXh0dXJlLmZyb21DYW52YXMgPSBmdW5jdGlvbiAoY2FudmFzLCBzY2FsZU1vZGUpXG57XG4gICAgcmV0dXJuIG5ldyBUZXh0dXJlKEJhc2VUZXh0dXJlLmZyb21DYW52YXMoY2FudmFzLCBzY2FsZU1vZGUpKTtcbn07XG5cbi8qKlxuICogSGVscGVyIGZ1bmN0aW9uIHRoYXQgY3JlYXRlcyBhIG5ldyBUZXh0dXJlIGJhc2VkIG9uIHRoZSBnaXZlbiB2aWRlbyBlbGVtZW50LlxuICpcbiAqIEBzdGF0aWNcbiAqIEBwYXJhbSB2aWRlbyB7SFRNTFZpZGVvRWxlbWVudH1cbiAqIEBwYXJhbSBzY2FsZU1vZGUge251bWJlcn0gU2VlIHtAbGluayBQSVhJLlNDQUxFX01PREVTfSBmb3IgcG9zc2libGUgdmFsdWVzXG4gKiBAcmV0dXJuIHtQSVhJLlRleHR1cmV9IEEgVGV4dHVyZVxuICovXG5UZXh0dXJlLmZyb21WaWRlbyA9IGZ1bmN0aW9uICh2aWRlbywgc2NhbGVNb2RlKVxue1xuICAgIGlmICh0eXBlb2YgdmlkZW8gPT09ICdzdHJpbmcnKVxuICAgIHtcbiAgICAgICAgcmV0dXJuIFRleHR1cmUuZnJvbVZpZGVvVXJsKHZpZGVvLCBzY2FsZU1vZGUpO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICByZXR1cm4gbmV3IFRleHR1cmUoVmlkZW9CYXNlVGV4dHVyZS5mcm9tVmlkZW8odmlkZW8sIHNjYWxlTW9kZSkpO1xuICAgIH1cbn07XG5cbi8qKlxuICogSGVscGVyIGZ1bmN0aW9uIHRoYXQgY3JlYXRlcyBhIG5ldyBUZXh0dXJlIGJhc2VkIG9uIHRoZSB2aWRlbyB1cmwuXG4gKlxuICogQHN0YXRpY1xuICogQHBhcmFtIHZpZGVvVXJsIHtzdHJpbmd9XG4gKiBAcGFyYW0gc2NhbGVNb2RlIHtudW1iZXJ9IFNlZSB7QGxpbmsgUElYSS5TQ0FMRV9NT0RFU30gZm9yIHBvc3NpYmxlIHZhbHVlc1xuICogQHJldHVybiB7UElYSS5UZXh0dXJlfSBBIFRleHR1cmVcbiAqL1xuVGV4dHVyZS5mcm9tVmlkZW9VcmwgPSBmdW5jdGlvbiAodmlkZW9VcmwsIHNjYWxlTW9kZSlcbntcbiAgICByZXR1cm4gbmV3IFRleHR1cmUoVmlkZW9CYXNlVGV4dHVyZS5mcm9tVXJsKHZpZGVvVXJsLCBzY2FsZU1vZGUpKTtcbn07XG5cbi8qKlxuICogQWRkcyBhIHRleHR1cmUgdG8gdGhlIGdsb2JhbCB1dGlscy5UZXh0dXJlQ2FjaGUuIFRoaXMgY2FjaGUgaXMgc2hhcmVkIGFjcm9zcyB0aGUgd2hvbGUgUElYSSBvYmplY3QuXG4gKlxuICogQHN0YXRpY1xuICogQHBhcmFtIHRleHR1cmUge1BJWEkuVGV4dHVyZX0gVGhlIFRleHR1cmUgdG8gYWRkIHRvIHRoZSBjYWNoZS5cbiAqIEBwYXJhbSBpZCB7c3RyaW5nfSBUaGUgaWQgdGhhdCB0aGUgdGV4dHVyZSB3aWxsIGJlIHN0b3JlZCBhZ2FpbnN0LlxuICovXG5UZXh0dXJlLmFkZFRleHR1cmVUb0NhY2hlID0gZnVuY3Rpb24gKHRleHR1cmUsIGlkKVxue1xuICAgIHV0aWxzLlRleHR1cmVDYWNoZVtpZF0gPSB0ZXh0dXJlO1xufTtcblxuLyoqXG4gKiBSZW1vdmUgYSB0ZXh0dXJlIGZyb20gdGhlIGdsb2JhbCB1dGlscy5UZXh0dXJlQ2FjaGUuXG4gKlxuICogQHN0YXRpY1xuICogQHBhcmFtIGlkIHtzdHJpbmd9IFRoZSBpZCBvZiB0aGUgdGV4dHVyZSB0byBiZSByZW1vdmVkXG4gKiBAcmV0dXJuIHtQSVhJLlRleHR1cmV9IFRoZSB0ZXh0dXJlIHRoYXQgd2FzIHJlbW92ZWRcbiAqL1xuVGV4dHVyZS5yZW1vdmVUZXh0dXJlRnJvbUNhY2hlID0gZnVuY3Rpb24gKGlkKVxue1xuICAgIHZhciB0ZXh0dXJlID0gdXRpbHMuVGV4dHVyZUNhY2hlW2lkXTtcblxuICAgIGRlbGV0ZSB1dGlscy5UZXh0dXJlQ2FjaGVbaWRdO1xuICAgIGRlbGV0ZSB1dGlscy5CYXNlVGV4dHVyZUNhY2hlW2lkXTtcblxuICAgIHJldHVybiB0ZXh0dXJlO1xufTtcblxuLyoqXG4gKiBBbiBlbXB0eSB0ZXh0dXJlLCB1c2VkIG9mdGVuIHRvIG5vdCBoYXZlIHRvIGNyZWF0ZSBtdWx0aXBsZSBlbXB0eSB0ZXh0dXJlcy5cbiAqXG4gKiBAc3RhdGljXG4gKiBAY29uc3RhbnRcbiAqL1xuVGV4dHVyZS5FTVBUWSA9IG5ldyBUZXh0dXJlKG5ldyBCYXNlVGV4dHVyZSgpKTtcbiIsIlxuLyoqXG4gKiBBIHN0YW5kYXJkIG9iamVjdCB0byBzdG9yZSB0aGUgVXZzIG9mIGEgdGV4dHVyZVxuICpcbiAqIEBjbGFzc1xuICogQHByaXZhdGVcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKi9cbmZ1bmN0aW9uIFRleHR1cmVVdnMoKVxue1xuICAgIHRoaXMueDAgPSAwO1xuICAgIHRoaXMueTAgPSAwO1xuXG4gICAgdGhpcy54MSA9IDE7XG4gICAgdGhpcy55MSA9IDA7XG5cbiAgICB0aGlzLngyID0gMTtcbiAgICB0aGlzLnkyID0gMTtcblxuICAgIHRoaXMueDMgPSAwO1xuICAgIHRoaXMueTMgPSAxO1xuXG4gICAgdGhpcy54eTBfdWludDMyID0gMDtcbiAgICB0aGlzLnh5MV91aW50MzIgPSAwO1xuICAgIHRoaXMueHkyX3VpbnQzMiA9IDA7XG4gICAgdGhpcy54eTNfdWludDMyID0gMDtcblxuICAgIHRoaXMudXZzX3VpbnQzMiA9IG5ldyBVaW50MzJBcnJheSg0KVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IFRleHR1cmVVdnM7XG5cbi8qKlxuICogU2V0cyB0aGUgdGV4dHVyZSBVdnMgYmFzZWQgb24gdGhlIGdpdmVuIGZyYW1lIGluZm9ybWF0aW9uXG4gKiBAcGFyYW0gZnJhbWUge1BJWEkuUmVjdGFuZ2xlfVxuICogQHBhcmFtIGJhc2VGcmFtZSB7UElYSS5SZWN0YW5nbGV9XG4gKiBAcGFyYW0gcm90YXRlIHtib29sZWFufSBXaGV0aGVyIG9yIG5vdCB0aGUgZnJhbWUgaXMgcm90YXRlZFxuICogQHByaXZhdGVcbiAqL1xuVGV4dHVyZVV2cy5wcm90b3R5cGUuc2V0ID0gZnVuY3Rpb24gKGZyYW1lLCBiYXNlRnJhbWUsIHJvdGF0ZSlcbntcbiAgICB2YXIgdHcgPSBiYXNlRnJhbWUud2lkdGg7XG4gICAgdmFyIHRoID0gYmFzZUZyYW1lLmhlaWdodDtcblxuICAgIGlmKHJvdGF0ZSlcbiAgICB7XG4gICAgICAgIHRoaXMueDAgPSAoZnJhbWUueCArIGZyYW1lLmhlaWdodCkgLyB0dztcbiAgICAgICAgdGhpcy55MCA9IGZyYW1lLnkgLyB0aDtcblxuICAgICAgICB0aGlzLngxID0gKGZyYW1lLnggKyBmcmFtZS5oZWlnaHQpIC8gdHc7XG4gICAgICAgIHRoaXMueTEgPSAoZnJhbWUueSArIGZyYW1lLndpZHRoKSAvIHRoO1xuXG4gICAgICAgIHRoaXMueDIgPSBmcmFtZS54IC8gdHc7XG4gICAgICAgIHRoaXMueTIgPSAoZnJhbWUueSArIGZyYW1lLndpZHRoKSAvIHRoO1xuXG4gICAgICAgIHRoaXMueDMgPSBmcmFtZS54IC8gdHc7XG4gICAgICAgIHRoaXMueTMgPSBmcmFtZS55IC8gdGg7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG5cbiAgICAgICAgdGhpcy54MCA9IGZyYW1lLnggLyB0dztcbiAgICAgICAgdGhpcy55MCA9IGZyYW1lLnkgLyB0aDtcblxuICAgICAgICB0aGlzLngxID0gKGZyYW1lLnggKyBmcmFtZS53aWR0aCkgLyB0dztcbiAgICAgICAgdGhpcy55MSA9IGZyYW1lLnkgLyB0aDtcblxuICAgICAgICB0aGlzLngyID0gKGZyYW1lLnggKyBmcmFtZS53aWR0aCkgLyB0dztcbiAgICAgICAgdGhpcy55MiA9IChmcmFtZS55ICsgZnJhbWUuaGVpZ2h0KSAvIHRoO1xuXG4gICAgICAgIHRoaXMueDMgPSBmcmFtZS54IC8gdHc7XG4gICAgICAgIHRoaXMueTMgPSAoZnJhbWUueSArIGZyYW1lLmhlaWdodCkgLyB0aDtcbiAgICB9XG5cbiAgICB0aGlzLnV2c191aW50MzJbMF0gPSAoKCh0aGlzLnkwICogNjU1MzUpICYgMHhGRkZGKSA8PCAxNikgfCAoKHRoaXMueDAgKiA2NTUzNSkgJiAweEZGRkYpO1xuICAgIHRoaXMudXZzX3VpbnQzMlsxXSA9ICgoKHRoaXMueTEgKiA2NTUzNSkgJiAweEZGRkYpIDw8IDE2KSB8ICgodGhpcy54MSAqIDY1NTM1KSAmIDB4RkZGRik7XG4gICAgdGhpcy51dnNfdWludDMyWzJdID0gKCgodGhpcy55MiAqIDY1NTM1KSAmIDB4RkZGRikgPDwgMTYpIHwgKCh0aGlzLngyICogNjU1MzUpICYgMHhGRkZGKTtcbiAgICB0aGlzLnV2c191aW50MzJbM10gPSAoKCh0aGlzLnkzICogNjU1MzUpICYgMHhGRkZGKSA8PCAxNikgfCAoKHRoaXMueDMgKiA2NTUzNSkgJiAweEZGRkYpO1xufTtcbiIsInZhciBCYXNlVGV4dHVyZSA9IHJlcXVpcmUoJy4vQmFzZVRleHR1cmUnKSxcbiAgICB1dGlscyA9IHJlcXVpcmUoJy4uL3V0aWxzJyk7XG5cbi8qKlxuICogQSB0ZXh0dXJlIG9mIGEgW3BsYXlpbmddIFZpZGVvLlxuICpcbiAqIFZpZGVvIGJhc2UgdGV4dHVyZXMgbWltaWMgUGl4aSBCYXNlVGV4dHVyZS5mcm9tLi4uLiBtZXRob2QgaW4gdGhlaXIgY3JlYXRpb24gcHJvY2Vzcy5cbiAqXG4gKiBUaGlzIGNhbiBiZSB1c2VkIGluIHNldmVyYWwgd2F5cywgc3VjaCBhczpcbiAqXG4gKiBgYGBqc1xuICogdmFyIHRleHR1cmUgPSBQSVhJLlZpZGVvQmFzZVRleHR1cmUuZnJvbVVybCgnaHR0cDovL215ZG9tYWluLmNvbS92aWRlby5tcDQnKTtcbiAqXG4gKiB2YXIgdGV4dHVyZSA9IFBJWEkuVmlkZW9CYXNlVGV4dHVyZS5mcm9tVXJsKHsgc3JjOiAnaHR0cDovL215ZG9tYWluLmNvbS92aWRlby5tcDQnLCBtaW1lOiAndmlkZW8vbXA0JyB9KTtcbiAqXG4gKiB2YXIgdGV4dHVyZSA9IFBJWEkuVmlkZW9CYXNlVGV4dHVyZS5mcm9tVXJscyhbJy92aWRlby53ZWJtJywgJy92aWRlby5tcDQnXSk7XG4gKlxuICogdmFyIHRleHR1cmUgPSBQSVhJLlZpZGVvQmFzZVRleHR1cmUuZnJvbVVybHMoW1xuICogICAgIHsgc3JjOiAnL3ZpZGVvLndlYm0nLCBtaW1lOiAndmlkZW8vd2VibScgfSxcbiAqICAgICB7IHNyYzogJy92aWRlby5tcDQnLCBtaW1lOiAndmlkZW8vbXA0JyB9XG4gKiBdKTtcbiAqIGBgYFxuICpcbiAqIFNlZSB0aGUgW1wiZGV1c1wiIGRlbW9dKGh0dHA6Ly93d3cuZ29vZGJveWRpZ2l0YWwuY29tL3BpeGlqcy9leGFtcGxlcy9kZXVzLykuXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLkJhc2VUZXh0dXJlXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIHNvdXJjZSB7SFRNTFZpZGVvRWxlbWVudH1cbiAqIEBwYXJhbSBbc2NhbGVNb2RlXSB7bnVtYmVyfSBTZWUge0BsaW5rIFBJWEkuU0NBTEVfTU9ERVN9IGZvciBwb3NzaWJsZSB2YWx1ZXNcbiAqL1xuZnVuY3Rpb24gVmlkZW9CYXNlVGV4dHVyZShzb3VyY2UsIHNjYWxlTW9kZSlcbntcbiAgICBpZiAoIXNvdXJjZSlcbiAgICB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignTm8gdmlkZW8gc291cmNlIGVsZW1lbnQgc3BlY2lmaWVkLicpO1xuICAgIH1cblxuICAgIC8vIGhvb2sgaW4gaGVyZSB0byBjaGVjayBpZiB2aWRlbyBpcyBhbHJlYWR5IGF2YWlsYWJsZS5cbiAgICAvLyBCYXNlVGV4dHVyZSBsb29rcyBmb3IgYSBzb3VyY2UuY29tcGxldGUgYm9vbGVhbiwgcGx1cyB3aWR0aCAmIGhlaWdodC5cblxuICAgIGlmICgoc291cmNlLnJlYWR5U3RhdGUgPT09IHNvdXJjZS5IQVZFX0VOT1VHSF9EQVRBIHx8IHNvdXJjZS5yZWFkeVN0YXRlID09PSBzb3VyY2UuSEFWRV9GVVRVUkVfREFUQSkgJiYgc291cmNlLndpZHRoICYmIHNvdXJjZS5oZWlnaHQpXG4gICAge1xuICAgICAgICBzb3VyY2UuY29tcGxldGUgPSB0cnVlO1xuICAgIH1cblxuICAgIEJhc2VUZXh0dXJlLmNhbGwodGhpcywgc291cmNlLCBzY2FsZU1vZGUpO1xuXG4gICAgLyoqXG4gICAgICogU2hvdWxkIHRoZSBiYXNlIHRleHR1cmUgYXV0b21hdGljYWxseSB1cGRhdGUgaXRzZWxmLCBzZXQgdG8gdHJ1ZSBieSBkZWZhdWx0XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqIEBkZWZhdWx0IHRydWVcbiAgICAgKi9cbiAgICB0aGlzLmF1dG9VcGRhdGUgPSBmYWxzZTtcblxuICAgIHRoaXMuX29uVXBkYXRlID0gdGhpcy5fb25VcGRhdGUuYmluZCh0aGlzKTtcbiAgICB0aGlzLl9vbkNhblBsYXkgPSB0aGlzLl9vbkNhblBsYXkuYmluZCh0aGlzKTtcblxuICAgIGlmICghc291cmNlLmNvbXBsZXRlKVxuICAgIHtcbiAgICAgICAgc291cmNlLmFkZEV2ZW50TGlzdGVuZXIoJ2NhbnBsYXknLCB0aGlzLl9vbkNhblBsYXkpO1xuICAgICAgICBzb3VyY2UuYWRkRXZlbnRMaXN0ZW5lcignY2FucGxheXRocm91Z2gnLCB0aGlzLl9vbkNhblBsYXkpO1xuXG4gICAgICAgIC8vIHN0YXJ0ZWQgcGxheWluZy4uXG4gICAgICAgIHNvdXJjZS5hZGRFdmVudExpc3RlbmVyKCdwbGF5JywgdGhpcy5fb25QbGF5U3RhcnQuYmluZCh0aGlzKSk7XG4gICAgICAgIHNvdXJjZS5hZGRFdmVudExpc3RlbmVyKCdwYXVzZScsIHRoaXMuX29uUGxheVN0b3AuYmluZCh0aGlzKSk7XG4gICAgfVxuXG4gICAgdGhpcy5fX2xvYWRlZCA9IGZhbHNlO1xufVxuXG5WaWRlb0Jhc2VUZXh0dXJlLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoQmFzZVRleHR1cmUucHJvdG90eXBlKTtcblZpZGVvQmFzZVRleHR1cmUucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gVmlkZW9CYXNlVGV4dHVyZTtcbm1vZHVsZS5leHBvcnRzID0gVmlkZW9CYXNlVGV4dHVyZTtcblxuLyoqXG4gKiBUaGUgaW50ZXJuYWwgdXBkYXRlIGxvb3Agb2YgdGhlIHZpZGVvIGJhc2UgdGV4dHVyZSwgb25seSBydW5zIHdoZW4gYXV0b1VwZGF0ZSBpcyBzZXQgdG8gdHJ1ZVxuICpcbiAqIEBwcml2YXRlXG4gKi9cblZpZGVvQmFzZVRleHR1cmUucHJvdG90eXBlLl9vblVwZGF0ZSA9IGZ1bmN0aW9uICgpXG57XG4gICAgaWYgKHRoaXMuYXV0b1VwZGF0ZSlcbiAgICB7XG4gICAgICAgIHdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUodGhpcy5fb25VcGRhdGUpO1xuICAgICAgICB0aGlzLnVwZGF0ZSgpO1xuICAgIH1cbn07XG5cbi8qKlxuICogUnVucyB0aGUgdXBkYXRlIGxvb3Agd2hlbiB0aGUgdmlkZW8gaXMgcmVhZHkgdG8gcGxheVxuICpcbiAqIEBwcml2YXRlXG4gKi9cblZpZGVvQmFzZVRleHR1cmUucHJvdG90eXBlLl9vblBsYXlTdGFydCA9IGZ1bmN0aW9uICgpXG57XG4gICAgaWYgKCF0aGlzLmF1dG9VcGRhdGUpXG4gICAge1xuICAgICAgICB3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lKHRoaXMuX29uVXBkYXRlKTtcbiAgICAgICAgdGhpcy5hdXRvVXBkYXRlID0gdHJ1ZTtcbiAgICB9XG59O1xuXG4vKipcbiAqIEZpcmVkIHdoZW4gYSBwYXVzZSBldmVudCBpcyB0cmlnZ2VyZWQsIHN0b3BzIHRoZSB1cGRhdGUgbG9vcFxuICpcbiAqIEBwcml2YXRlXG4gKi9cblZpZGVvQmFzZVRleHR1cmUucHJvdG90eXBlLl9vblBsYXlTdG9wID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLmF1dG9VcGRhdGUgPSBmYWxzZTtcbn07XG5cbi8qKlxuICogRmlyZWQgd2hlbiB0aGUgdmlkZW8gaXMgbG9hZGVkIGFuZCByZWFkeSB0byBwbGF5XG4gKlxuICogQHByaXZhdGVcbiAqL1xuVmlkZW9CYXNlVGV4dHVyZS5wcm90b3R5cGUuX29uQ2FuUGxheSA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy5oYXNMb2FkZWQgPSB0cnVlO1xuXG4gICAgaWYgKHRoaXMuc291cmNlKVxuICAgIHtcbiAgICAgICAgdGhpcy5zb3VyY2UucmVtb3ZlRXZlbnRMaXN0ZW5lcignY2FucGxheScsIHRoaXMuX29uQ2FuUGxheSk7XG4gICAgICAgIHRoaXMuc291cmNlLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2NhbnBsYXl0aHJvdWdoJywgdGhpcy5fb25DYW5QbGF5KTtcblxuICAgICAgICB0aGlzLndpZHRoID0gdGhpcy5zb3VyY2UudmlkZW9XaWR0aDtcbiAgICAgICAgdGhpcy5oZWlnaHQgPSB0aGlzLnNvdXJjZS52aWRlb0hlaWdodDtcblxuICAgICAgICB0aGlzLnNvdXJjZS5wbGF5KCk7XG5cbiAgICAgICAgLy8gcHJldmVudCBtdWx0aXBsZSBsb2FkZWQgZGlzcGF0Y2hlcy4uXG4gICAgICAgIGlmICghdGhpcy5fX2xvYWRlZClcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5fX2xvYWRlZCA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLmVtaXQoJ2xvYWRlZCcsIHRoaXMpO1xuICAgICAgICB9XG4gICAgfVxufTtcblxuLyoqXG4gKiBEZXN0cm95cyB0aGlzIHRleHR1cmVcbiAqXG4gKi9cblZpZGVvQmFzZVRleHR1cmUucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoKVxue1xuICAgIGlmICh0aGlzLnNvdXJjZSAmJiB0aGlzLnNvdXJjZS5fcGl4aUlkKVxuICAgIHtcbiAgICAgICAgZGVsZXRlIHV0aWxzLkJhc2VUZXh0dXJlQ2FjaGVbIHRoaXMuc291cmNlLl9waXhpSWQgXTtcbiAgICAgICAgZGVsZXRlIHRoaXMuc291cmNlLl9waXhpSWQ7XG4gICAgfVxuXG4gICAgQmFzZVRleHR1cmUucHJvdG90eXBlLmRlc3Ryb3kuY2FsbCh0aGlzKTtcbn07XG5cbi8qKlxuICogTWltaWMgUGl4aSBCYXNlVGV4dHVyZS5mcm9tLi4uLiBtZXRob2QuXG4gKlxuICogQHN0YXRpY1xuICogQHBhcmFtIHZpZGVvIHtIVE1MVmlkZW9FbGVtZW50fVxuICogQHBhcmFtIHNjYWxlTW9kZSB7bnVtYmVyfSBTZWUge0BsaW5rIFBJWEkuU0NBTEVfTU9ERVN9IGZvciBwb3NzaWJsZSB2YWx1ZXNcbiAqIEByZXR1cm4ge1BJWEkuVmlkZW9CYXNlVGV4dHVyZX1cbiAqL1xuVmlkZW9CYXNlVGV4dHVyZS5mcm9tVmlkZW8gPSBmdW5jdGlvbiAodmlkZW8sIHNjYWxlTW9kZSlcbntcbiAgICBpZiAoIXZpZGVvLl9waXhpSWQpXG4gICAge1xuICAgICAgICB2aWRlby5fcGl4aUlkID0gJ3ZpZGVvXycgKyB1dGlscy51aWQoKTtcbiAgICB9XG5cbiAgICB2YXIgYmFzZVRleHR1cmUgPSB1dGlscy5CYXNlVGV4dHVyZUNhY2hlW3ZpZGVvLl9waXhpSWRdO1xuXG4gICAgaWYgKCFiYXNlVGV4dHVyZSlcbiAgICB7XG4gICAgICAgIGJhc2VUZXh0dXJlID0gbmV3IFZpZGVvQmFzZVRleHR1cmUodmlkZW8sIHNjYWxlTW9kZSk7XG4gICAgICAgIHV0aWxzLkJhc2VUZXh0dXJlQ2FjaGVbIHZpZGVvLl9waXhpSWQgXSA9IGJhc2VUZXh0dXJlO1xuICAgIH1cblxuICAgIHJldHVybiBiYXNlVGV4dHVyZTtcbn07XG5cbi8qKlxuICogSGVscGVyIGZ1bmN0aW9uIHRoYXQgY3JlYXRlcyBhIG5ldyBCYXNlVGV4dHVyZSBiYXNlZCBvbiB0aGUgZ2l2ZW4gdmlkZW8gZWxlbWVudC5cbiAqIFRoaXMgQmFzZVRleHR1cmUgY2FuIHRoZW4gYmUgdXNlZCB0byBjcmVhdGUgYSB0ZXh0dXJlXG4gKlxuICogQHN0YXRpY1xuICogQHBhcmFtIHZpZGVvU3JjIHtzdHJpbmd8b2JqZWN0fHN0cmluZ1tdfG9iamVjdFtdfSBUaGUgVVJMKHMpIGZvciB0aGUgdmlkZW8uXG4gKiBAcGFyYW0gW3ZpZGVvU3JjLnNyY10ge3N0cmluZ30gT25lIG9mIHRoZSBzb3VyY2UgdXJscyBmb3IgdGhlIHZpZGVvXG4gKiBAcGFyYW0gW3ZpZGVvU3JjLm1pbWVdIHtzdHJpbmd9IFRoZSBtaW1ldHlwZSBvZiB0aGUgdmlkZW8gKGUuZy4gJ3ZpZGVvL21wNCcpLiBJZiBub3Qgc3BlY2lmaWVkXG4gKiAgdGhlIHVybCdzIGV4dGVuc2lvbiB3aWxsIGJlIHVzZWQgYXMgdGhlIHNlY29uZCBwYXJ0IG9mIHRoZSBtaW1lIHR5cGUuXG4gKiBAcGFyYW0gc2NhbGVNb2RlIHtudW1iZXJ9IFNlZSB7QGxpbmsgUElYSS5TQ0FMRV9NT0RFU30gZm9yIHBvc3NpYmxlIHZhbHVlc1xuICogQHJldHVybiB7UElYSS5WaWRlb0Jhc2VUZXh0dXJlfVxuICovXG5WaWRlb0Jhc2VUZXh0dXJlLmZyb21VcmwgPSBmdW5jdGlvbiAodmlkZW9TcmMsIHNjYWxlTW9kZSlcbntcbiAgICB2YXIgdmlkZW8gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd2aWRlbycpO1xuXG4gICAgLy8gYXJyYXkgb2Ygb2JqZWN0cyBvciBzdHJpbmdzXG4gICAgaWYgKEFycmF5LmlzQXJyYXkodmlkZW9TcmMpKVxuICAgIHtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB2aWRlb1NyYy5sZW5ndGg7ICsraSlcbiAgICAgICAge1xuICAgICAgICAgICAgdmlkZW8uYXBwZW5kQ2hpbGQoY3JlYXRlU291cmNlKHZpZGVvU3JjW2ldLnNyYyB8fCB2aWRlb1NyY1tpXSwgdmlkZW9TcmNbaV0ubWltZSkpO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8vIHNpbmdsZSBvYmplY3Qgb3Igc3RyaW5nXG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgdmlkZW8uYXBwZW5kQ2hpbGQoY3JlYXRlU291cmNlKHZpZGVvU3JjLnNyYyB8fCB2aWRlb1NyYywgdmlkZW9TcmMubWltZSkpO1xuICAgIH1cblxuICAgIHZpZGVvLmxvYWQoKTtcbiAgICB2aWRlby5wbGF5KCk7XG5cbiAgICByZXR1cm4gVmlkZW9CYXNlVGV4dHVyZS5mcm9tVmlkZW8odmlkZW8sIHNjYWxlTW9kZSk7XG59O1xuXG5WaWRlb0Jhc2VUZXh0dXJlLmZyb21VcmxzID0gVmlkZW9CYXNlVGV4dHVyZS5mcm9tVXJsO1xuXG5mdW5jdGlvbiBjcmVhdGVTb3VyY2UocGF0aCwgdHlwZSlcbntcbiAgICBpZiAoIXR5cGUpXG4gICAge1xuICAgICAgICB0eXBlID0gJ3ZpZGVvLycgKyBwYXRoLnN1YnN0cihwYXRoLmxhc3RJbmRleE9mKCcuJykgKyAxKTtcbiAgICB9XG5cbiAgICB2YXIgc291cmNlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc291cmNlJyk7XG5cbiAgICBzb3VyY2Uuc3JjID0gcGF0aDtcbiAgICBzb3VyY2UudHlwZSA9IHR5cGU7XG5cbiAgICByZXR1cm4gc291cmNlO1xufVxuIiwidmFyIENPTlNUID0gcmVxdWlyZSgnLi4vY29uc3QnKSxcbiAgICBFdmVudEVtaXR0ZXIgPSByZXF1aXJlKCdldmVudGVtaXR0ZXIzJyksXG4gICAgLy8gSW50ZXJuYWwgZXZlbnQgdXNlZCBieSBjb21wb3NlZCBlbWl0dGVyXG4gICAgVElDSyA9ICd0aWNrJztcblxuLyoqXG4gKiBBIFRpY2tlciBjbGFzcyB0aGF0IHJ1bnMgYW4gdXBkYXRlIGxvb3AgdGhhdCBvdGhlciBvYmplY3RzIGxpc3RlbiB0by5cbiAqIFRoaXMgY2xhc3MgaXMgY29tcG9zZWQgYXJvdW5kIGFuIEV2ZW50RW1pdHRlciBvYmplY3QgdG8gYWRkIGxpc3RlbmVyc1xuICogbWVhbnQgZm9yIGV4ZWN1dGlvbiBvbiB0aGUgbmV4dCByZXF1ZXN0ZWQgYW5pbWF0aW9uIGZyYW1lLlxuICogQW5pbWF0aW9uIGZyYW1lcyBhcmUgcmVxdWVzdGVkIG9ubHkgd2hlbiBuZWNlc3NhcnksXG4gKiBlLmcuIFdoZW4gdGhlIHRpY2tlciBpcyBzdGFydGVkIGFuZCB0aGUgZW1pdHRlciBoYXMgbGlzdGVuZXJzLlxuICpcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWEkudGlja2VyXG4gKi9cbmZ1bmN0aW9uIFRpY2tlcigpXG57XG4gICAgdmFyIF90aGlzID0gdGhpcztcblxuICAgIC8qKlxuICAgICAqIEludGVybmFsIHRpY2sgbWV0aG9kIGJvdW5kIHRvIHRpY2tlciBpbnN0YW5jZS5cbiAgICAgKiBUaGlzIGlzIGJlY2F1c2UgaW4gZWFybHkgMjAxNSwgRnVuY3Rpb24uYmluZFxuICAgICAqIGlzIHN0aWxsIDYwJSBzbG93ZXIgaW4gaGlnaCBwZXJmb3JtYW5jZSBzY2VuYXJpb3MuXG4gICAgICogQWxzbyBzZXBhcmF0aW5nIGZyYW1lIHJlcXVlc3RzIGZyb20gdXBkYXRlIG1ldGhvZFxuICAgICAqIHNvIGxpc3RlbmVycyBtYXkgYmUgY2FsbGVkIGF0IGFueSB0aW1lIGFuZCB3aXRoXG4gICAgICogYW55IGFuaW1hdGlvbiBBUEksIGp1c3QgaW52b2tlIHRpY2tlci51cGRhdGUodGltZSkuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX3RpY2sgPSBmdW5jdGlvbiBfdGljayh0aW1lKSB7XG5cbiAgICAgICAgX3RoaXMuX3JlcXVlc3RJZCA9IG51bGw7XG5cbiAgICAgICAgaWYgKF90aGlzLnN0YXJ0ZWQpXG4gICAgICAgIHtcbiAgICAgICAgICAgIC8vIEludm9rZSBsaXN0ZW5lcnMgbm93XG4gICAgICAgICAgICBfdGhpcy51cGRhdGUodGltZSk7XG4gICAgICAgICAgICAvLyBMaXN0ZW5lciBzaWRlIGVmZmVjdHMgbWF5IGhhdmUgbW9kaWZpZWQgdGlja2VyIHN0YXRlLlxuICAgICAgICAgICAgaWYgKF90aGlzLnN0YXJ0ZWQgJiYgX3RoaXMuX3JlcXVlc3RJZCA9PT0gbnVsbCAmJiBfdGhpcy5fZW1pdHRlci5saXN0ZW5lcnMoVElDSywgdHJ1ZSkpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgX3RoaXMuX3JlcXVlc3RJZCA9IHJlcXVlc3RBbmltYXRpb25GcmFtZShfdGhpcy5fdGljayk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgLyoqXG4gICAgICogSW50ZXJuYWwgZW1pdHRlciB1c2VkIHRvIGZpcmUgJ3RpY2snIGV2ZW50XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9lbWl0dGVyID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gICAgLyoqXG4gICAgICogSW50ZXJuYWwgY3VycmVudCBmcmFtZSByZXF1ZXN0IElEXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9yZXF1ZXN0SWQgPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogSW50ZXJuYWwgdmFsdWUgbWFuYWdlZCBieSBtaW5GUFMgcHJvcGVydHkgc2V0dGVyIGFuZCBnZXR0ZXIuXG4gICAgICogVGhpcyBpcyB0aGUgbWF4aW11bSBhbGxvd2VkIG1pbGxpc2Vjb25kcyBiZXR3ZWVuIHVwZGF0ZXMuXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9tYXhFbGFwc2VkTVMgPSAxMDA7XG5cbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIG9yIG5vdCB0aGlzIHRpY2tlciBzaG91bGQgaW52b2tlIHRoZSBtZXRob2RcbiAgICAgKiB7QGxpbmsgUElYSS50aWNrZXIuVGlja2VyI3N0YXJ0fSBhdXRvbWF0aWNhbGx5XG4gICAgICogd2hlbiBhIGxpc3RlbmVyIGlzIGFkZGVkLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgICAqL1xuICAgIHRoaXMuYXV0b1N0YXJ0ID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBTY2FsYXIgdGltZSB2YWx1ZSBmcm9tIGxhc3QgZnJhbWUgdG8gdGhpcyBmcmFtZS5cbiAgICAgKiBUaGlzIHZhbHVlIGlzIGNhcHBlZCBieSBzZXR0aW5nIHtAbGluayBQSVhJLnRpY2tlci5UaWNrZXIjbWluRlBTfVxuICAgICAqIGFuZCBpcyBzY2FsZWQgd2l0aCB7QGxpbmsgUElYSS50aWNrZXIuVGlja2VyI3NwZWVkfS5cbiAgICAgKiAqKk5vdGU6KiogVGhlIGNhcCBtYXkgYmUgZXhjZWVkZWQgYnkgc2NhbGluZy5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAxXG4gICAgICovXG4gICAgdGhpcy5kZWx0YVRpbWUgPSAxO1xuXG4gICAgLyoqXG4gICAgICogVGltZSBlbGFwc2VkIGluIG1pbGxpc2Vjb25kcyBmcm9tIGxhc3QgZnJhbWUgdG8gdGhpcyBmcmFtZS5cbiAgICAgKiBPcHBvc2VkIHRvIHdoYXQgdGhlIHNjYWxhciB7QGxpbmsgUElYSS50aWNrZXIuVGlja2VyI2RlbHRhVGltZX1cbiAgICAgKiBpcyBiYXNlZCwgdGhpcyB2YWx1ZSBpcyBuZWl0aGVyIGNhcHBlZCBub3Igc2NhbGVkLlxuICAgICAqIElmIHRoZSBwbGF0Zm9ybSBzdXBwb3J0cyBET01IaWdoUmVzVGltZVN0YW1wLFxuICAgICAqIHRoaXMgdmFsdWUgd2lsbCBoYXZlIGEgcHJlY2lzaW9uIG9mIDEgwrVzLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7RE9NSGlnaFJlc1RpbWVTdGFtcHxudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMSAvIFRBUkdFVF9GUE1TXG4gICAgICovXG4gICAgdGhpcy5lbGFwc2VkTVMgPSAxIC8gQ09OU1QuVEFSR0VUX0ZQTVM7IC8vIGRlZmF1bHQgdG8gdGFyZ2V0IGZyYW1lIHRpbWVcblxuICAgIC8qKlxuICAgICAqIFRoZSBsYXN0IHRpbWUge0BsaW5rIFBJWEkudGlja2VyLlRpY2tlciN1cGRhdGV9IHdhcyBpbnZva2VkLlxuICAgICAqIFRoaXMgdmFsdWUgaXMgYWxzbyByZXNldCBpbnRlcm5hbGx5IG91dHNpZGUgb2YgaW52b2tpbmdcbiAgICAgKiB1cGRhdGUsIGJ1dCBvbmx5IHdoZW4gYSBuZXcgYW5pbWF0aW9uIGZyYW1lIGlzIHJlcXVlc3RlZC5cbiAgICAgKiBJZiB0aGUgcGxhdGZvcm0gc3VwcG9ydHMgRE9NSGlnaFJlc1RpbWVTdGFtcCxcbiAgICAgKiB0aGlzIHZhbHVlIHdpbGwgaGF2ZSBhIHByZWNpc2lvbiBvZiAxIMK1cy5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge0RPTUhpZ2hSZXNUaW1lU3RhbXB8bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDBcbiAgICAgKi9cbiAgICB0aGlzLmxhc3RUaW1lID0gMDtcblxuICAgIC8qKlxuICAgICAqIEZhY3RvciBvZiBjdXJyZW50IHtAbGluayBQSVhJLnRpY2tlci5UaWNrZXIjZGVsdGFUaW1lfS5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIC8vIFNjYWxlcyB0aWNrZXIuZGVsdGFUaW1lIHRvIHdoYXQgd291bGQgYmVcbiAgICAgKiAvLyB0aGUgZXF1aXZhbGVudCBvZiBhcHByb3hpbWF0ZWx5IDEyMCBGUFNcbiAgICAgKiB0aWNrZXIuc3BlZWQgPSAyO1xuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDFcbiAgICAgKi9cbiAgICB0aGlzLnNwZWVkID0gMTtcblxuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgb3Igbm90IHRoaXMgdGlja2VyIGhhcyBiZWVuIHN0YXJ0ZWQuXG4gICAgICogYHRydWVgIGlmIHtAbGluayBQSVhJLnRpY2tlci5UaWNrZXIjc3RhcnR9IGhhcyBiZWVuIGNhbGxlZC5cbiAgICAgKiBgZmFsc2VgIGlmIHtAbGluayBQSVhJLnRpY2tlci5UaWNrZXIjc3RvcH0gaGFzIGJlZW4gY2FsbGVkLlxuICAgICAqIFdoaWxlIGBmYWxzZWAsIHRoaXMgdmFsdWUgbWF5IGNoYW5nZSB0byBgdHJ1ZWAgaW4gdGhlXG4gICAgICogZXZlbnQgb2Yge0BsaW5rIFBJWEkudGlja2VyLlRpY2tlciNhdXRvU3RhcnR9IGJlaW5nIGB0cnVlYFxuICAgICAqIGFuZCBhIGxpc3RlbmVyIGlzIGFkZGVkLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgICAqL1xuICAgIHRoaXMuc3RhcnRlZCA9IGZhbHNlO1xufVxuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhUaWNrZXIucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogVGhlIGZyYW1lcyBwZXIgc2Vjb25kIGF0IHdoaWNoIHRoaXMgdGlja2VyIGlzIHJ1bm5pbmcuXG4gICAgICogVGhlIGRlZmF1bHQgaXMgYXBwcm94aW1hdGVseSA2MCBpbiBtb3N0IG1vZGVybiBicm93c2Vycy5cbiAgICAgKiAqKk5vdGU6KiogVGhpcyBkb2VzIG5vdCBmYWN0b3IgaW4gdGhlIHZhbHVlIG9mXG4gICAgICoge0BsaW5rIFBJWEkudGlja2VyLlRpY2tlciNzcGVlZH0sIHdoaWNoIGlzIHNwZWNpZmljXG4gICAgICogdG8gc2NhbGluZyB7QGxpbmsgUElYSS50aWNrZXIuVGlja2VyI2RlbHRhVGltZX0uXG4gICAgICpcbiAgICAgKiBAbWVtYmVyXG4gICAgICogQG1lbWJlcm9mIFBJWEkudGlja2VyLlRpY2tlciNcbiAgICAgKiBAcmVhZG9ubHlcbiAgICAgKi9cbiAgICBGUFM6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbigpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiAxMDAwIC8gdGhpcy5lbGFwc2VkTVM7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogTWFuYWdlcyB0aGUgbWF4aW11bSBhbW91bnQgb2YgbWlsbGlzZWNvbmRzIGFsbG93ZWQgdG9cbiAgICAgKiBlbGFwc2UgYmV0d2VlbiBpbnZva2luZyB7QGxpbmsgUElYSS50aWNrZXIuVGlja2VyI3VwZGF0ZX0uXG4gICAgICogVGhpcyB2YWx1ZSBpcyB1c2VkIHRvIGNhcCB7QGxpbmsgUElYSS50aWNrZXIuVGlja2VyI2RlbHRhVGltZX0sXG4gICAgICogYnV0IGRvZXMgbm90IGVmZmVjdCB0aGUgbWVhc3VyZWQgdmFsdWUgb2Yge0BsaW5rIFBJWEkudGlja2VyLlRpY2tlciNGUFN9LlxuICAgICAqIFdoZW4gc2V0dGluZyB0aGlzIHByb3BlcnR5IGl0IGlzIGNsYW1wZWQgdG8gYSB2YWx1ZSBiZXR3ZWVuXG4gICAgICogYDBgIGFuZCBgUElYSS5UQVJHRVRfRlBNUyAqIDEwMDBgLlxuICAgICAqXG4gICAgICogQG1lbWJlclxuICAgICAqIEBtZW1iZXJvZiBQSVhJLnRpY2tlci5UaWNrZXIjXG4gICAgICogQGRlZmF1bHQgMTBcbiAgICAgKi9cbiAgICBtaW5GUFM6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbigpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiAxMDAwIC8gdGhpcy5fbWF4RWxhcHNlZE1TO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uKGZwcylcbiAgICAgICAge1xuICAgICAgICAgICAgLy8gQ2xhbXA6IDAgdG8gVEFSR0VUX0ZQTVNcbiAgICAgICAgICAgIHZhciBtaW5GUE1TID0gTWF0aC5taW4oTWF0aC5tYXgoMCwgZnBzKSAvIDEwMDAsIENPTlNULlRBUkdFVF9GUE1TKTtcbiAgICAgICAgICAgIHRoaXMuX21heEVsYXBzZWRNUyA9IDEgLyBtaW5GUE1TO1xuICAgICAgICB9XG4gICAgfVxufSk7XG5cbi8qKlxuICogQ29uZGl0aW9uYWxseSByZXF1ZXN0cyBhIG5ldyBhbmltYXRpb24gZnJhbWUuXG4gKiBJZiBhIGZyYW1lIGhhcyBub3QgYWxyZWFkeSBiZWVuIHJlcXVlc3RlZCwgYW5kIGlmIHRoZSBpbnRlcm5hbFxuICogZW1pdHRlciBoYXMgbGlzdGVuZXJzLCBhIG5ldyBmcmFtZSBpcyByZXF1ZXN0ZWQuXG4gKlxuICogQHByaXZhdGVcbiAqL1xuVGlja2VyLnByb3RvdHlwZS5fcmVxdWVzdElmTmVlZGVkID0gZnVuY3Rpb24gX3JlcXVlc3RJZk5lZWRlZCgpXG57XG4gICAgaWYgKHRoaXMuX3JlcXVlc3RJZCA9PT0gbnVsbCAmJiB0aGlzLl9lbWl0dGVyLmxpc3RlbmVycyhUSUNLLCB0cnVlKSlcbiAgICB7XG4gICAgICAgIC8vIGVuc3VyZSBjYWxsYmFja3MgZ2V0IGNvcnJlY3QgZGVsdGFcbiAgICAgICAgdGhpcy5sYXN0VGltZSA9IHBlcmZvcm1hbmNlLm5vdygpO1xuICAgICAgICB0aGlzLl9yZXF1ZXN0SWQgPSByZXF1ZXN0QW5pbWF0aW9uRnJhbWUodGhpcy5fdGljayk7XG4gICAgfVxufTtcblxuLyoqXG4gKiBDb25kaXRpb25hbGx5IGNhbmNlbHMgYSBwZW5kaW5nIGFuaW1hdGlvbiBmcmFtZS5cbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5UaWNrZXIucHJvdG90eXBlLl9jYW5jZWxJZk5lZWRlZCA9IGZ1bmN0aW9uIF9jYW5jZWxJZk5lZWRlZCgpXG57XG4gICAgaWYgKHRoaXMuX3JlcXVlc3RJZCAhPT0gbnVsbClcbiAgICB7XG4gICAgICAgIGNhbmNlbEFuaW1hdGlvbkZyYW1lKHRoaXMuX3JlcXVlc3RJZCk7XG4gICAgICAgIHRoaXMuX3JlcXVlc3RJZCA9IG51bGw7XG4gICAgfVxufTtcblxuLyoqXG4gKiBDb25kaXRpb25hbGx5IHJlcXVlc3RzIGEgbmV3IGFuaW1hdGlvbiBmcmFtZS5cbiAqIElmIHRoZSB0aWNrZXIgaGFzIGJlZW4gc3RhcnRlZCBpdCBjaGVja3MgaWYgYSBmcmFtZSBoYXMgbm90IGFscmVhZHlcbiAqIGJlZW4gcmVxdWVzdGVkLCBhbmQgaWYgdGhlIGludGVybmFsIGVtaXR0ZXIgaGFzIGxpc3RlbmVycy4gSWYgdGhlc2VcbiAqIGNvbmRpdGlvbnMgYXJlIG1ldCwgYSBuZXcgZnJhbWUgaXMgcmVxdWVzdGVkLiBJZiB0aGUgdGlja2VyIGhhcyBub3RcbiAqIGJlZW4gc3RhcnRlZCwgYnV0IGF1dG9TdGFydCBpcyBgdHJ1ZWAsIHRoZW4gdGhlIHRpY2tlciBzdGFydHMgbm93LFxuICogYW5kIGNvbnRpbnVlcyB3aXRoIHRoZSBwcmV2aW91cyBjb25kaXRpb25zIHRvIHJlcXVlc3QgYSBuZXcgZnJhbWUuXG4gKlxuICogQHByaXZhdGVcbiAqL1xuVGlja2VyLnByb3RvdHlwZS5fc3RhcnRJZlBvc3NpYmxlID0gZnVuY3Rpb24gX3N0YXJ0SWZQb3NzaWJsZSgpXG57XG4gICAgaWYgKHRoaXMuc3RhcnRlZClcbiAgICB7XG4gICAgICAgIHRoaXMuX3JlcXVlc3RJZk5lZWRlZCgpO1xuICAgIH1cbiAgICBlbHNlIGlmICh0aGlzLmF1dG9TdGFydClcbiAgICB7XG4gICAgICAgIHRoaXMuc3RhcnQoKTtcbiAgICB9XG59O1xuXG4vKipcbiAqIENhbGxzIHtAbGluayBtb2R1bGU6ZXZlbnRlbWl0dGVyMy5FdmVudEVtaXR0ZXIjb259IGludGVybmFsbHkgZm9yIHRoZVxuICogaW50ZXJuYWwgJ3RpY2snIGV2ZW50LiBJdCBjaGVja3MgaWYgdGhlIGVtaXR0ZXIgaGFzIGxpc3RlbmVycyxcbiAqIGFuZCBpZiBzbyBpdCByZXF1ZXN0cyBhIG5ldyBhbmltYXRpb24gZnJhbWUgYXQgdGhpcyBwb2ludC5cbiAqXG4gKiBAcGFyYW0gZm4ge0Z1bmN0aW9ufSBUaGUgbGlzdGVuZXIgZnVuY3Rpb24gdG8gYmUgYWRkZWQgZm9yIHVwZGF0ZXNcbiAqIEBwYXJhbSBbY29udGV4dF0ge0Z1bmN0aW9ufSBUaGUgbGlzdGVuZXIgY29udGV4dFxuICogQHJldHVybnMge1BJWEkudGlja2VyLlRpY2tlcn0gdGhpc1xuICovXG5UaWNrZXIucHJvdG90eXBlLmFkZCA9IGZ1bmN0aW9uIGFkZChmbiwgY29udGV4dClcbntcbiAgICB0aGlzLl9lbWl0dGVyLm9uKFRJQ0ssIGZuLCBjb250ZXh0KTtcblxuICAgIHRoaXMuX3N0YXJ0SWZQb3NzaWJsZSgpO1xuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIENhbGxzIHtAbGluayBtb2R1bGU6ZXZlbnRlbWl0dGVyMy5FdmVudEVtaXR0ZXIjb25jZX0gaW50ZXJuYWxseSBmb3IgdGhlXG4gKiBpbnRlcm5hbCAndGljaycgZXZlbnQuIEl0IGNoZWNrcyBpZiB0aGUgZW1pdHRlciBoYXMgbGlzdGVuZXJzLFxuICogYW5kIGlmIHNvIGl0IHJlcXVlc3RzIGEgbmV3IGFuaW1hdGlvbiBmcmFtZSBhdCB0aGlzIHBvaW50LlxuICpcbiAqIEBwYXJhbSBmbiB7RnVuY3Rpb259IFRoZSBsaXN0ZW5lciBmdW5jdGlvbiB0byBiZSBhZGRlZCBmb3Igb25lIHVwZGF0ZVxuICogQHBhcmFtIFtjb250ZXh0XSB7RnVuY3Rpb259IFRoZSBsaXN0ZW5lciBjb250ZXh0XG4gKiBAcmV0dXJucyB7UElYSS50aWNrZXIuVGlja2VyfSB0aGlzXG4gKi9cblRpY2tlci5wcm90b3R5cGUuYWRkT25jZSA9IGZ1bmN0aW9uIGFkZE9uY2UoZm4sIGNvbnRleHQpXG57XG4gICAgdGhpcy5fZW1pdHRlci5vbmNlKFRJQ0ssIGZuLCBjb250ZXh0KTtcblxuICAgIHRoaXMuX3N0YXJ0SWZQb3NzaWJsZSgpO1xuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIENhbGxzIHtAbGluayBtb2R1bGU6ZXZlbnRlbWl0dGVyMy5FdmVudEVtaXR0ZXIjb2ZmfSBpbnRlcm5hbGx5IGZvciAndGljaycgZXZlbnQuXG4gKiBJdCBjaGVja3MgaWYgdGhlIGVtaXR0ZXIgaGFzIGxpc3RlbmVycyBmb3IgJ3RpY2snIGV2ZW50LlxuICogSWYgaXQgZG9lcywgdGhlbiBpdCBjYW5jZWxzIHRoZSBhbmltYXRpb24gZnJhbWUuXG4gKlxuICogQHBhcmFtIFtmbl0ge0Z1bmN0aW9ufSBUaGUgbGlzdGVuZXIgZnVuY3Rpb24gdG8gYmUgcmVtb3ZlZFxuICogQHBhcmFtIFtjb250ZXh0XSB7RnVuY3Rpb259IFRoZSBsaXN0ZW5lciBjb250ZXh0IHRvIGJlIHJlbW92ZWRcbiAqIEByZXR1cm5zIHtQSVhJLnRpY2tlci5UaWNrZXJ9IHRoaXNcbiAqL1xuVGlja2VyLnByb3RvdHlwZS5yZW1vdmUgPSBmdW5jdGlvbiByZW1vdmUoZm4sIGNvbnRleHQpXG57XG4gICAgdGhpcy5fZW1pdHRlci5vZmYoVElDSywgZm4sIGNvbnRleHQpO1xuXG4gICAgaWYgKCF0aGlzLl9lbWl0dGVyLmxpc3RlbmVycyhUSUNLLCB0cnVlKSlcbiAgICB7XG4gICAgICAgIHRoaXMuX2NhbmNlbElmTmVlZGVkKCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIFN0YXJ0cyB0aGUgdGlja2VyLiBJZiB0aGUgdGlja2VyIGhhcyBsaXN0ZW5lcnNcbiAqIGEgbmV3IGFuaW1hdGlvbiBmcmFtZSBpcyByZXF1ZXN0ZWQgYXQgdGhpcyBwb2ludC5cbiAqL1xuVGlja2VyLnByb3RvdHlwZS5zdGFydCA9IGZ1bmN0aW9uIHN0YXJ0KClcbntcbiAgICBpZiAoIXRoaXMuc3RhcnRlZClcbiAgICB7XG4gICAgICAgIHRoaXMuc3RhcnRlZCA9IHRydWU7XG4gICAgICAgIHRoaXMuX3JlcXVlc3RJZk5lZWRlZCgpO1xuICAgIH1cbn07XG5cbi8qKlxuICogU3RvcHMgdGhlIHRpY2tlci4gSWYgdGhlIHRpY2tlciBoYXMgcmVxdWVzdGVkXG4gKiBhbiBhbmltYXRpb24gZnJhbWUgaXQgaXMgY2FuY2VsZWQgYXQgdGhpcyBwb2ludC5cbiAqL1xuVGlja2VyLnByb3RvdHlwZS5zdG9wID0gZnVuY3Rpb24gc3RvcCgpXG57XG4gICAgaWYgKHRoaXMuc3RhcnRlZClcbiAgICB7XG4gICAgICAgIHRoaXMuc3RhcnRlZCA9IGZhbHNlO1xuICAgICAgICB0aGlzLl9jYW5jZWxJZk5lZWRlZCgpO1xuICAgIH1cbn07XG5cbi8qKlxuICogVHJpZ2dlcnMgYW4gdXBkYXRlLiBBbiB1cGRhdGUgZW50YWlscyBzZXR0aW5nIHRoZVxuICogY3VycmVudCB7QGxpbmsgUElYSS50aWNrZXIuVGlja2VyI2VsYXBzZWRNU30sXG4gKiB0aGUgY3VycmVudCB7QGxpbmsgUElYSS50aWNrZXIuVGlja2VyI2RlbHRhVGltZX0sXG4gKiBpbnZva2luZyBhbGwgbGlzdGVuZXJzIHdpdGggY3VycmVudCBkZWx0YVRpbWUsXG4gKiBhbmQgdGhlbiBmaW5hbGx5IHNldHRpbmcge0BsaW5rIFBJWEkudGlja2VyLlRpY2tlciNsYXN0VGltZX1cbiAqIHdpdGggdGhlIHZhbHVlIG9mIGN1cnJlbnRUaW1lIHRoYXQgd2FzIHByb3ZpZGVkLlxuICogVGhpcyBtZXRob2Qgd2lsbCBiZSBjYWxsZWQgYXV0b21hdGljYWxseSBieSBhbmltYXRpb25cbiAqIGZyYW1lIGNhbGxiYWNrcyBpZiB0aGUgdGlja2VyIGluc3RhbmNlIGhhcyBiZWVuIHN0YXJ0ZWRcbiAqIGFuZCBsaXN0ZW5lcnMgYXJlIGFkZGVkLlxuICpcbiAqIEBwYXJhbSBbY3VycmVudFRpbWU9cGVyZm9ybWFuY2Uubm93KCldIHtET01IaWdoUmVzVGltZVN0YW1wfG51bWJlcn0gdGhlIGN1cnJlbnQgdGltZSBvZiBleGVjdXRpb25cbiAqL1xuVGlja2VyLnByb3RvdHlwZS51cGRhdGUgPSBmdW5jdGlvbiB1cGRhdGUoY3VycmVudFRpbWUpXG57XG4gICAgdmFyIGVsYXBzZWRNUztcblxuICAgIC8vIEFsbG93IGNhbGxpbmcgdXBkYXRlIGRpcmVjdGx5IHdpdGggZGVmYXVsdCBjdXJyZW50VGltZS5cbiAgICBjdXJyZW50VGltZSA9IGN1cnJlbnRUaW1lIHx8IHBlcmZvcm1hbmNlLm5vdygpO1xuICAgIC8vIFNhdmUgdW5jYXBwZWQgZWxhcHNlZE1TIGZvciBtZWFzdXJlbWVudFxuICAgIGVsYXBzZWRNUyA9IHRoaXMuZWxhcHNlZE1TID0gY3VycmVudFRpbWUgLSB0aGlzLmxhc3RUaW1lO1xuXG4gICAgLy8gY2FwIHRoZSBtaWxsaXNlY29uZHMgZWxhcHNlZCB1c2VkIGZvciBkZWx0YVRpbWVcbiAgICBpZiAoZWxhcHNlZE1TID4gdGhpcy5fbWF4RWxhcHNlZE1TKVxuICAgIHtcbiAgICAgICAgZWxhcHNlZE1TID0gdGhpcy5fbWF4RWxhcHNlZE1TO1xuICAgIH1cblxuICAgIHRoaXMuZGVsdGFUaW1lID0gZWxhcHNlZE1TICogQ09OU1QuVEFSR0VUX0ZQTVMgKiB0aGlzLnNwZWVkO1xuXG4gICAgLy8gSW52b2tlIGxpc3RlbmVycyBhZGRlZCB0byBpbnRlcm5hbCBlbWl0dGVyXG4gICAgdGhpcy5fZW1pdHRlci5lbWl0KFRJQ0ssIHRoaXMuZGVsdGFUaW1lKTtcblxuICAgIHRoaXMubGFzdFRpbWUgPSBjdXJyZW50VGltZTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gVGlja2VyO1xuIiwidmFyIFRpY2tlciA9IHJlcXVpcmUoJy4vVGlja2VyJyk7XG5cbi8qKlxuICogVGhlIHNoYXJlZCB0aWNrZXIgaW5zdGFuY2UgdXNlZCBieSB7QGxpbmsgUElYSS5leHRyYXMuTW92aWVDbGlwfS5cbiAqIGFuZCBieSB7QGxpbmsgUElYSS5pbnRlcmFjdGlvbi5JbnRlcmFjdGlvbk1hbmFnZXJ9LlxuICogVGhlIHByb3BlcnR5IHtAbGluayBQSVhJLnRpY2tlci5UaWNrZXIjYXV0b1N0YXJ0fSBpcyBzZXQgdG8gYHRydWVgXG4gKiBmb3IgdGhpcyBpbnN0YW5jZS4gUGxlYXNlIGZvbGxvdyB0aGUgZXhhbXBsZXMgZm9yIHVzYWdlLCBpbmNsdWRpbmdcbiAqIGhvdyB0byBvcHQtb3V0IG9mIGF1dG8tc3RhcnRpbmcgdGhlIHNoYXJlZCB0aWNrZXIuXG4gKlxuICogQGV4YW1wbGVcbiAqIHZhciB0aWNrZXIgPSBQSVhJLnRpY2tlci5zaGFyZWQ7XG4gKiAvLyBTZXQgdGhpcyB0byBwcmV2ZW50IHN0YXJ0aW5nIHRoaXMgdGlja2VyIHdoZW4gbGlzdGVuZXJzIGFyZSBhZGRlZC5cbiAqIC8vIEJ5IGRlZmF1bHQgdGhpcyBpcyB0cnVlIG9ubHkgZm9yIHRoZSBQSVhJLnRpY2tlci5zaGFyZWQgaW5zdGFuY2UuXG4gKiB0aWNrZXIuYXV0b1N0YXJ0ID0gZmFsc2U7XG4gKiAvLyBGWUksIGNhbGwgdGhpcyB0byBlbnN1cmUgdGhlIHRpY2tlciBpcyBzdG9wcGVkLiBJdCBzaG91bGQgYmUgc3RvcHBlZFxuICogLy8gaWYgeW91IGhhdmUgbm90IGF0dGVtcHRlZCB0byByZW5kZXIgYW55dGhpbmcgeWV0LlxuICogdGlja2VyLnN0b3AoKTtcbiAqIC8vIENhbGwgdGhpcyB3aGVuIHlvdSBhcmUgcmVhZHkgZm9yIGEgcnVubmluZyBzaGFyZWQgdGlja2VyLlxuICogdGlja2VyLnN0YXJ0KCk7XG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIFlvdSBtYXkgdXNlIHRoZSBzaGFyZWQgdGlja2VyIHRvIHJlbmRlci4uLlxuICogdmFyIHJlbmRlcmVyID0gUElYSS5hdXRvRGV0ZWN0UmVuZGVyZXIoODAwLCA2MDApO1xuICogdmFyIHN0YWdlID0gbmV3IFBJWEkuQ29udGFpbmVyKCk7XG4gKiB2YXIgaW50ZXJhY3Rpb25NYW5hZ2VyID0gUElYSS5pbnRlcmFjdGlvbi5JbnRlcmFjdGlvbk1hbmFnZXIocmVuZGVyZXIpO1xuICogZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChyZW5kZXJlci52aWV3KTtcbiAqIHRpY2tlci5hZGQoZnVuY3Rpb24gKHRpbWUpIHtcbiAqICAgICByZW5kZXJlci5yZW5kZXIoc3RhZ2UpO1xuICogfSk7XG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIE9yIHlvdSBjYW4ganVzdCB1cGRhdGUgaXQgbWFudWFsbHkuXG4gKiB0aWNrZXIuYXV0b1N0YXJ0ID0gZmFsc2U7XG4gKiB0aWNrZXIuc3RvcCgpO1xuICogZnVuY3Rpb24gYW5pbWF0ZSh0aW1lKSB7XG4gKiAgICAgdGlja2VyLnVwZGF0ZSh0aW1lKTtcbiAqICAgICByZW5kZXJlci5yZW5kZXIoc3RhZ2UpO1xuICogICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZShhbmltYXRlKTtcbiAqIH1cbiAqIGFuaW1hdGUocGVyZm9ybWFuY2Uubm93KCkpO1xuICpcbiAqIEB0eXBlIHtQSVhJLnRpY2tlci5UaWNrZXJ9XG4gKiBAbWVtYmVyb2YgUElYSS50aWNrZXJcbiAqL1xudmFyIHNoYXJlZCA9IG5ldyBUaWNrZXIoKTtcbnNoYXJlZC5hdXRvU3RhcnQgPSB0cnVlO1xuXG4vKipcbiAqIEBuYW1lc3BhY2UgUElYSS50aWNrZXJcbiAqL1xubW9kdWxlLmV4cG9ydHMgPSB7XG4gICAgc2hhcmVkOiBzaGFyZWQsXG4gICAgVGlja2VyOiBUaWNrZXJcbn07XG4iLCIvKipcbiAqIEdlbmVyaWMgTWFzayBTdGFjayBkYXRhIHN0cnVjdHVyZVxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICovXG5cbnZhciBHTF9NQVAgPSB7fTtcblxuXG52YXIgY3JlYXRlSW5kaWNlc0ZvclF1YWRzID0gZnVuY3Rpb24gKHNpemUpXG57XG4gICAgLy8gdGhlIHRvdGFsIG51bWJlciBvZiBpbmRpY2VzIGluIG91ciBhcnJheSwgdGhlcmUgYXJlIDYgcG9pbnRzIHBlciBxdWFkLlxuICAgXG4gICAgdmFyIHRvdGFsSW5kaWNlcyA9IHNpemUgKiA2O1xuXG4gICAgdmFyIGluZGljZXMgPSBuZXcgVWludDE2QXJyYXkodG90YWxJbmRpY2VzKTtcblxuXHQvLyBmaWxsIHRoZSBpbmRpY2VzIHdpdGggdGhlIHF1YWRzIHRvIGRyYXdcbiAgICBmb3IgKHZhciBpPTAsIGo9MDsgaSA8IHRvdGFsSW5kaWNlczsgaSArPSA2LCBqICs9IDQpXG4gICAge1xuICAgICAgICBpbmRpY2VzW2kgKyAwXSA9IGogKyAwO1xuICAgICAgICBpbmRpY2VzW2kgKyAxXSA9IGogKyAxO1xuICAgICAgICBpbmRpY2VzW2kgKyAyXSA9IGogKyAyO1xuICAgICAgICBpbmRpY2VzW2kgKyAzXSA9IGogKyAwO1xuICAgICAgICBpbmRpY2VzW2kgKyA0XSA9IGogKyAyO1xuICAgICAgICBpbmRpY2VzW2kgKyA1XSA9IGogKyAzO1xuICAgIH1cblxuICAgIHJldHVybiBpbmRpY2VzO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBjcmVhdGVJbmRpY2VzRm9yUXVhZHM7IiwidmFyIENPTlNUID0gcmVxdWlyZSgnLi4vY29uc3QnKTtcblxuLyoqXG4gKiBAbmFtZXNwYWNlIFBJWEkudXRpbHNcbiAqL1xudmFyIHV0aWxzID0gbW9kdWxlLmV4cG9ydHMgPSB7XG4gICAgX3VpZDogMCxcbiAgICBfc2FpZEhlbGxvOiBmYWxzZSxcblxuICAgIEV2ZW50RW1pdHRlcjogICByZXF1aXJlKCdldmVudGVtaXR0ZXIzJyksXG4gICAgcGx1Z2luVGFyZ2V0OiAgIHJlcXVpcmUoJy4vcGx1Z2luVGFyZ2V0JyksXG4gICAgYXN5bmM6ICAgICAgICAgIHJlcXVpcmUoJ2FzeW5jJyksXG5cbiAgICAvKipcbiAgICAgKiBHZXRzIHRoZSBuZXh0IHVuaXF1ZSBpZGVudGlmaWVyXG4gICAgICpcbiAgICAgKiBAcmV0dXJuIHtudW1iZXJ9IFRoZSBuZXh0IHVuaXF1ZSBpZGVudGlmaWVyIHRvIHVzZS5cbiAgICAgKi9cbiAgICB1aWQ6IGZ1bmN0aW9uICgpXG4gICAge1xuICAgICAgICByZXR1cm4gKyt1dGlscy5fdWlkO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBDb252ZXJ0cyBhIGhleCBjb2xvciBudW1iZXIgdG8gYW4gW1IsIEcsIEJdIGFycmF5XG4gICAgICpcbiAgICAgKiBAcGFyYW0gaGV4IHtudW1iZXJ9XG4gICAgICogQHBhcmFtICB7bnVtYmVyW119IFtvdXQ9W11dXG4gICAgICogQHJldHVybiB7bnVtYmVyW119IEFuIGFycmF5IHJlcHJlc2VudGluZyB0aGUgW1IsIEcsIEJdIG9mIHRoZSBjb2xvci5cbiAgICAgKi9cbiAgICBoZXgycmdiOiBmdW5jdGlvbiAoaGV4LCBvdXQpXG4gICAge1xuICAgICAgICBvdXQgPSBvdXQgfHwgW107XG5cbiAgICAgICAgb3V0WzBdID0gKGhleCA+PiAxNiAmIDB4RkYpIC8gMjU1O1xuICAgICAgICBvdXRbMV0gPSAoaGV4ID4+IDggJiAweEZGKSAvIDI1NTtcbiAgICAgICAgb3V0WzJdID0gKGhleCAmIDB4RkYpIC8gMjU1O1xuXG4gICAgICAgIHJldHVybiBvdXQ7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIENvbnZlcnRzIGEgaGV4IGNvbG9yIG51bWJlciB0byBhIHN0cmluZy5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBoZXgge251bWJlcn1cbiAgICAgKiBAcmV0dXJuIHtzdHJpbmd9IFRoZSBzdHJpbmcgY29sb3IuXG4gICAgICovXG4gICAgaGV4MnN0cmluZzogZnVuY3Rpb24gKGhleClcbiAgICB7XG4gICAgICAgIGhleCA9IGhleC50b1N0cmluZygxNik7XG4gICAgICAgIGhleCA9ICcwMDAwMDAnLnN1YnN0cigwLCA2IC0gaGV4Lmxlbmd0aCkgKyBoZXg7XG5cbiAgICAgICAgcmV0dXJuICcjJyArIGhleDtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQ29udmVydHMgYSBjb2xvciBhcyBhbiBbUiwgRywgQl0gYXJyYXkgdG8gYSBoZXggbnVtYmVyXG4gICAgICpcbiAgICAgKiBAcGFyYW0gcmdiIHtudW1iZXJbXX1cbiAgICAgKiBAcmV0dXJuIHtudW1iZXJ9IFRoZSBjb2xvciBudW1iZXJcbiAgICAgKi9cbiAgICByZ2IyaGV4OiBmdW5jdGlvbiAocmdiKVxuICAgIHtcbiAgICAgICAgcmV0dXJuICgocmdiWzBdKjI1NSA8PCAxNikgKyAocmdiWzFdKjI1NSA8PCA4KSArIHJnYlsyXSoyNTUpO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBDaGVja3Mgd2hldGhlciB0aGUgQ2FudmFzIEJsZW5kTW9kZXMgYXJlIHN1cHBvcnRlZCBieSB0aGUgY3VycmVudCBicm93c2VyXG4gICAgICpcbiAgICAgKiBAcmV0dXJuIHtib29sZWFufSB3aGV0aGVyIHRoZXkgYXJlIHN1cHBvcnRlZFxuICAgICAqL1xuICAgIGNhblVzZU5ld0NhbnZhc0JsZW5kTW9kZXM6IGZ1bmN0aW9uICgpXG4gICAge1xuICAgICAgICBpZiAodHlwZW9mIGRvY3VtZW50ID09PSAndW5kZWZpbmVkJylcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIHBuZ0hlYWQgPSAnZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFBUUFBQUFCQVFNQUFBREQ4cDJPQUFBQUExQk1WRVgvJztcbiAgICAgICAgdmFyIHBuZ0VuZCA9ICdBQUFBQ2tsRVFWUUkxMk5nQUFBQUFnQUI0aUc4TXdBQUFBQkpSVTVFcmtKZ2dnPT0nO1xuXG4gICAgICAgIHZhciBtYWdlbnRhID0gbmV3IEltYWdlKCk7XG4gICAgICAgIG1hZ2VudGEuc3JjID0gcG5nSGVhZCArICdBUDgwNE9hNicgKyBwbmdFbmQ7XG5cbiAgICAgICAgdmFyIHllbGxvdyA9IG5ldyBJbWFnZSgpO1xuICAgICAgICB5ZWxsb3cuc3JjID0gcG5nSGVhZCArICcvd0NLeHZSRicgKyBwbmdFbmQ7XG5cbiAgICAgICAgdmFyIGNhbnZhcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NhbnZhcycpO1xuICAgICAgICBjYW52YXMud2lkdGggPSA2O1xuICAgICAgICBjYW52YXMuaGVpZ2h0ID0gMTtcblxuICAgICAgICB2YXIgY29udGV4dCA9IGNhbnZhcy5nZXRDb250ZXh0KCcyZCcpO1xuICAgICAgICBjb250ZXh0Lmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbiA9ICdtdWx0aXBseSc7XG4gICAgICAgIGNvbnRleHQuZHJhd0ltYWdlKG1hZ2VudGEsIDAsIDApO1xuICAgICAgICBjb250ZXh0LmRyYXdJbWFnZSh5ZWxsb3csIDIsIDApO1xuXG4gICAgICAgIHZhciBkYXRhID0gY29udGV4dC5nZXRJbWFnZURhdGEoMiwwLDEsMSkuZGF0YTtcblxuICAgICAgICByZXR1cm4gKGRhdGFbMF0gPT09IDI1NSAmJiBkYXRhWzFdID09PSAwICYmIGRhdGFbMl0gPT09IDApO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBHaXZlbiBhIG51bWJlciwgdGhpcyBmdW5jdGlvbiByZXR1cm5zIHRoZSBjbG9zZXN0IG51bWJlciB0aGF0IGlzIGEgcG93ZXIgb2YgdHdvXG4gICAgICogdGhpcyBmdW5jdGlvbiBpcyB0YWtlbiBmcm9tIFN0YXJsaW5nIEZyYW1ld29yayBhcyBpdHMgcHJldHR5IG5lYXQgOylcbiAgICAgKlxuICAgICAqIEBwYXJhbSBudW1iZXIge251bWJlcn1cbiAgICAgKiBAcmV0dXJuIHtudW1iZXJ9IHRoZSBjbG9zZXN0IG51bWJlciB0aGF0IGlzIGEgcG93ZXIgb2YgdHdvXG4gICAgICovXG4gICAgZ2V0TmV4dFBvd2VyT2ZUd286IGZ1bmN0aW9uIChudW1iZXIpXG4gICAge1xuICAgICAgICAvLyBzZWU6IGh0dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvUG93ZXJfb2ZfdHdvI0Zhc3RfYWxnb3JpdGhtX3RvX2NoZWNrX2lmX2FfcG9zaXRpdmVfbnVtYmVyX2lzX2FfcG93ZXJfb2ZfdHdvXG4gICAgICAgIGlmIChudW1iZXIgPiAwICYmIChudW1iZXIgJiAobnVtYmVyIC0gMSkpID09PSAwKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gbnVtYmVyO1xuICAgICAgICB9XG4gICAgICAgIGVsc2VcbiAgICAgICAge1xuICAgICAgICAgICAgdmFyIHJlc3VsdCA9IDE7XG5cbiAgICAgICAgICAgIHdoaWxlIChyZXN1bHQgPCBudW1iZXIpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgcmVzdWx0IDw8PSAxO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIGNoZWNrcyBpZiB0aGUgZ2l2ZW4gd2lkdGggYW5kIGhlaWdodCBtYWtlIGEgcG93ZXIgb2YgdHdvIHJlY3RhbmdsZVxuICAgICAqXG4gICAgICogQHBhcmFtIHdpZHRoIHtudW1iZXJ9XG4gICAgICogQHBhcmFtIGhlaWdodCB7bnVtYmVyfVxuICAgICAqIEByZXR1cm4ge2Jvb2xlYW59XG4gICAgICovXG4gICAgaXNQb3dlck9mVHdvOiBmdW5jdGlvbiAod2lkdGgsIGhlaWdodClcbiAgICB7XG4gICAgICAgIHJldHVybiAod2lkdGggPiAwICYmICh3aWR0aCAmICh3aWR0aCAtIDEpKSA9PT0gMCAmJiBoZWlnaHQgPiAwICYmIChoZWlnaHQgJiAoaGVpZ2h0IC0gMSkpID09PSAwKTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogZ2V0IHRoZSByZXNvbHV0aW9uIG9mIGFuIGFzc2V0IGJ5IGxvb2tpbmcgZm9yIHRoZSBwcmVmaXhcbiAgICAgKiB1c2VkIGJ5IHNwcml0ZXNoZWV0cyBhbmQgaW1hZ2UgdXJsc1xuICAgICAqXG4gICAgICogQHBhcmFtIHVybCB7c3RyaW5nfSB0aGUgaW1hZ2UgcGF0aFxuICAgICAqIEByZXR1cm4ge251bWJlcn1cbiAgICAgKi9cbiAgICBnZXRSZXNvbHV0aW9uT2ZVcmw6IGZ1bmN0aW9uICh1cmwpXG4gICAge1xuICAgICAgICB2YXIgcmVzb2x1dGlvbiA9IENPTlNULlJFVElOQV9QUkVGSVguZXhlYyh1cmwpO1xuXG4gICAgICAgIGlmIChyZXNvbHV0aW9uKVxuICAgICAgICB7XG4gICAgICAgICAgIHJldHVybiBwYXJzZUZsb2F0KHJlc29sdXRpb25bMV0pO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIDE7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIExvZ3Mgb3V0IHRoZSB2ZXJzaW9uIGFuZCByZW5kZXJlciBpbmZvcm1hdGlvbiBmb3IgdGhpcyBydW5uaW5nIGluc3RhbmNlIG9mIFBJWEkuXG4gICAgICogSWYgeW91IGRvbid0IHdhbnQgdG8gc2VlIHRoaXMgbWVzc2FnZSB5b3UgY2FuIHNldCBgUElYSS51dGlscy5fc2FpZEhlbGxvID0gdHJ1ZTtgXG4gICAgICogc28gdGhlIGxpYnJhcnkgdGhpbmtzIGl0IGFscmVhZHkgc2FpZCBpdC4gS2VlcCBpbiBtaW5kIHRoYXQgZG9pbmcgdGhhdCB3aWxsIGZvcmV2ZXJcbiAgICAgKiBtYWtlcyB5b3UgYSBqZXJrIGZhY2UuXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gdHlwZSAtIFRoZSBzdHJpbmcgcmVuZGVyZXIgdHlwZSB0byBsb2cuXG4gICAgICogQGNvbnN0YW50XG4gICAgICogQHN0YXRpY1xuICAgICAqL1xuICAgIHNheUhlbGxvOiBmdW5jdGlvbiAodHlwZSlcbiAgICB7XG4gICAgICAgIGlmICh1dGlscy5fc2FpZEhlbGxvKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAobmF2aWdhdG9yLnVzZXJBZ2VudC50b0xvd2VyQ2FzZSgpLmluZGV4T2YoJ2Nocm9tZScpID4gLTEpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHZhciBhcmdzID0gW1xuICAgICAgICAgICAgICAgICdcXG4gJWMgJWMgJWMgUGl4aS5qcyAnICsgQ09OU1QuVkVSU0lPTiArICcgLSDinLAgJyArIHR5cGUgKyAnIOKcsCAgJWMgJyArICcgJWMgJyArICcgaHR0cDovL3d3dy5waXhpanMuY29tLyAgJWMgJWMg4pmlJWPimaUlY+KZpSBcXG5cXG4nLFxuICAgICAgICAgICAgICAgICdiYWNrZ3JvdW5kOiAjZmY2NmE1OyBwYWRkaW5nOjVweCAwOycsXG4gICAgICAgICAgICAgICAgJ2JhY2tncm91bmQ6ICNmZjY2YTU7IHBhZGRpbmc6NXB4IDA7JyxcbiAgICAgICAgICAgICAgICAnY29sb3I6ICNmZjY2YTU7IGJhY2tncm91bmQ6ICMwMzAzMDc7IHBhZGRpbmc6NXB4IDA7JyxcbiAgICAgICAgICAgICAgICAnYmFja2dyb3VuZDogI2ZmNjZhNTsgcGFkZGluZzo1cHggMDsnLFxuICAgICAgICAgICAgICAgICdiYWNrZ3JvdW5kOiAjZmZjM2RjOyBwYWRkaW5nOjVweCAwOycsXG4gICAgICAgICAgICAgICAgJ2JhY2tncm91bmQ6ICNmZjY2YTU7IHBhZGRpbmc6NXB4IDA7JyxcbiAgICAgICAgICAgICAgICAnY29sb3I6ICNmZjI0MjQ7IGJhY2tncm91bmQ6ICNmZmY7IHBhZGRpbmc6NXB4IDA7JyxcbiAgICAgICAgICAgICAgICAnY29sb3I6ICNmZjI0MjQ7IGJhY2tncm91bmQ6ICNmZmY7IHBhZGRpbmc6NXB4IDA7JyxcbiAgICAgICAgICAgICAgICAnY29sb3I6ICNmZjI0MjQ7IGJhY2tncm91bmQ6ICNmZmY7IHBhZGRpbmc6NXB4IDA7J1xuICAgICAgICAgICAgXTtcblxuICAgICAgICAgICAgd2luZG93LmNvbnNvbGUubG9nLmFwcGx5KGNvbnNvbGUsIGFyZ3MpOyAvL2pzaGludCBpZ25vcmU6bGluZVxuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHdpbmRvdy5jb25zb2xlKVxuICAgICAgICB7XG4gICAgICAgICAgICB3aW5kb3cuY29uc29sZS5sb2coJ1BpeGkuanMgJyArIENPTlNULlZFUlNJT04gKyAnIC0gJyArIHR5cGUgKyAnIC0gaHR0cDovL3d3dy5waXhpanMuY29tLycpOyAvL2pzaGludCBpZ25vcmU6bGluZVxuICAgICAgICB9XG5cbiAgICAgICAgdXRpbHMuX3NhaWRIZWxsbyA9IHRydWU7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIEhlbHBlciBmb3IgY2hlY2tpbmcgZm9yIHdlYmdsIHN1cHBvcnRcbiAgICAgKlxuICAgICAqIEByZXR1cm4ge2Jvb2xlYW59XG4gICAgICovXG4gICAgaXNXZWJHTFN1cHBvcnRlZDogZnVuY3Rpb24gKClcbiAgICB7XG4gICAgICAgIHZhciBjb250ZXh0T3B0aW9ucyA9IHsgc3RlbmNpbDogdHJ1ZSB9O1xuICAgICAgICB0cnlcbiAgICAgICAge1xuICAgICAgICAgICAgaWYgKCF3aW5kb3cuV2ViR0xSZW5kZXJpbmdDb250ZXh0KVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdmFyIGNhbnZhcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NhbnZhcycpLFxuICAgICAgICAgICAgICAgIGdsID0gY2FudmFzLmdldENvbnRleHQoJ3dlYmdsJywgY29udGV4dE9wdGlvbnMpIHx8IGNhbnZhcy5nZXRDb250ZXh0KCdleHBlcmltZW50YWwtd2ViZ2wnLCBjb250ZXh0T3B0aW9ucyk7XG5cbiAgICAgICAgICAgIHJldHVybiAhIShnbCAmJiBnbC5nZXRDb250ZXh0QXR0cmlidXRlcygpLnN0ZW5jaWwpO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyBzaWduIG9mIG51bWJlclxuICAgICAqXG4gICAgICogQHBhcmFtIG4ge251bWJlcn1cbiAgICAgKiBAcmV0dXJucyB7bnVtYmVyfSAwIGlmIG4gaXMgMCwgLTEgaWYgbiBpcyBuZWdhdGl2ZSwgMSBpZiBuIGkgcG9zaXRpdmVcbiAgICAgKi9cbiAgICBzaWduOiBmdW5jdGlvbiAobilcbiAgICB7XG4gICAgICAgIHJldHVybiBuID8gKG4gPCAwID8gLTEgOiAxKSA6IDA7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIHJlbW92ZUl0ZW1zXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge2FycmF5fSBhcnIgVGhlIHRhcmdldCBhcnJheVxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBzdGFydElkeCBUaGUgaW5kZXggdG8gYmVnaW4gcmVtb3ZpbmcgZnJvbSAoaW5jbHVzaXZlKVxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSByZW1vdmVDb3VudCBIb3cgbWFueSBpdGVtcyB0byByZW1vdmVcbiAgICAgKi9cbiAgICByZW1vdmVJdGVtczogZnVuY3Rpb24gKGFyciwgc3RhcnRJZHgsIHJlbW92ZUNvdW50KVxuICAgIHtcbiAgICAgICAgdmFyIGxlbmd0aCA9IGFyci5sZW5ndGg7XG5cbiAgICAgICAgaWYgKHN0YXJ0SWR4ID49IGxlbmd0aCB8fCByZW1vdmVDb3VudCA9PT0gMClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgcmVtb3ZlQ291bnQgPSAoc3RhcnRJZHgrcmVtb3ZlQ291bnQgPiBsZW5ndGggPyBsZW5ndGgtc3RhcnRJZHggOiByZW1vdmVDb3VudCk7XG4gICAgICAgIGZvciAodmFyIGkgPSBzdGFydElkeCwgbGVuID0gbGVuZ3RoLXJlbW92ZUNvdW50OyBpIDwgbGVuOyArK2kpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGFycltpXSA9IGFycltpICsgcmVtb3ZlQ291bnRdO1xuICAgICAgICB9XG5cbiAgICAgICAgYXJyLmxlbmd0aCA9IGxlbjtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQHRvZG8gRGVzY3JpYmUgcHJvcGVydHkgdXNhZ2VcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIFRleHR1cmVDYWNoZToge30sXG5cbiAgICAvKipcbiAgICAgKiBAdG9kbyBEZXNjcmliZSBwcm9wZXJ0eSB1c2FnZVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgQmFzZVRleHR1cmVDYWNoZToge31cbn07XG4iLCIvKipcbiAqIE1peGlucyBmdW5jdGlvbmFsaXR5IHRvIG1ha2UgYW4gb2JqZWN0IGhhdmUgXCJwbHVnaW5zXCIuXG4gKlxuICogQG1peGluXG4gKiBAbWVtYmVyb2YgUElYSS51dGlsc1xuICogQHBhcmFtIG9iaiB7b2JqZWN0fSBUaGUgb2JqZWN0IHRvIG1peCBpbnRvLlxuICogQGV4YW1wbGVcbiAqICAgICAgZnVuY3Rpb24gTXlPYmplY3QoKSB7fVxuICpcbiAqICAgICAgcGx1Z2luVGFyZ2V0Lm1peGluKE15T2JqZWN0KTtcbiAqL1xuZnVuY3Rpb24gcGx1Z2luVGFyZ2V0KG9iailcbntcbiAgICBvYmouX19wbHVnaW5zID0ge307XG5cbiAgICAvKipcbiAgICAgKiBBZGRzIGEgcGx1Z2luIHRvIGFuIG9iamVjdFxuICAgICAqXG4gICAgICogQHBhcmFtIHBsdWdpbk5hbWUge3N0cmluZ30gVGhlIGV2ZW50cyB0aGF0IHNob3VsZCBiZSBsaXN0ZWQuXG4gICAgICogQHBhcmFtIGN0b3Ige0Z1bmN0aW9ufSBUaGUgY29uc3RydWN0b3IgZnVuY3Rpb24gZm9yIHRoZSBwbHVnaW4uXG4gICAgICovXG4gICAgb2JqLnJlZ2lzdGVyUGx1Z2luID0gZnVuY3Rpb24gKHBsdWdpbk5hbWUsIGN0b3IpXG4gICAge1xuICAgICAgICBvYmouX19wbHVnaW5zW3BsdWdpbk5hbWVdID0gY3RvcjtcbiAgICB9O1xuXG4gICAgLyoqXG4gICAgICogSW5zdGFudGlhdGVzIGFsbCB0aGUgcGx1Z2lucyBvZiB0aGlzIG9iamVjdFxuICAgICAqXG4gICAgICovXG4gICAgb2JqLnByb3RvdHlwZS5pbml0UGx1Z2lucyA9IGZ1bmN0aW9uICgpXG4gICAge1xuICAgICAgICB0aGlzLnBsdWdpbnMgPSB0aGlzLnBsdWdpbnMgfHwge307XG5cbiAgICAgICAgZm9yICh2YXIgbyBpbiBvYmouX19wbHVnaW5zKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnBsdWdpbnNbb10gPSBuZXcgKG9iai5fX3BsdWdpbnNbb10pKHRoaXMpO1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIC8qKlxuICAgICAqIFJlbW92ZXMgYWxsIHRoZSBwbHVnaW5zIG9mIHRoaXMgb2JqZWN0XG4gICAgICpcbiAgICAgKi9cbiAgICBvYmoucHJvdG90eXBlLmRlc3Ryb3lQbHVnaW5zID0gZnVuY3Rpb24gKClcbiAgICB7XG4gICAgICAgIGZvciAodmFyIG8gaW4gdGhpcy5wbHVnaW5zKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnBsdWdpbnNbb10uZGVzdHJveSgpO1xuICAgICAgICAgICAgdGhpcy5wbHVnaW5zW29dID0gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMucGx1Z2lucyA9IG51bGw7XG4gICAgfTtcbn1cblxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgICAvKipcbiAgICAgKiBNaXhlcyBpbiB0aGUgcHJvcGVydGllcyBvZiB0aGUgcGx1Z2luVGFyZ2V0IGludG8gYW5vdGhlciBvYmplY3RcbiAgICAgKlxuICAgICAqIEBwYXJhbSBvYmplY3Qge29iamVjdH0gVGhlIG9iaiB0byBtaXggaW50b1xuICAgICAqL1xuICAgIG1peGluOiBmdW5jdGlvbiBtaXhpbihvYmopXG4gICAge1xuICAgICAgICBwbHVnaW5UYXJnZXQob2JqKTtcbiAgICB9XG59O1xuIiwiLypnbG9iYWwgY29uc29sZSAqL1xudmFyIGNvcmUgPSByZXF1aXJlKCcuL2NvcmUnKSxcbiAgICBtZXNoID0gcmVxdWlyZSgnLi9tZXNoJyksXG4gICAgZXh0cmFzID0gcmVxdWlyZSgnLi9leHRyYXMnKSxcbiAgICBmaWx0ZXJzID0gcmVxdWlyZSgnLi9maWx0ZXJzJyk7XG5cbi8qKlxuICogQGNsYXNzXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgU3ByaXRlQmF0Y2hcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAc2VlIFBJWEkuUGFydGljbGVDb250YWluZXJcbiAqIEB0aHJvd3Mge1JlZmVyZW5jZUVycm9yfSBTcHJpdGVCYXRjaCBkb2VzIG5vdCBleGlzdCBhbnkgbW9yZSwgcGxlYXNlIHVzZSB0aGUgbmV3IFBhcnRpY2xlQ29udGFpbmVyIGluc3RlYWQuXG4gKiBAZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDMuMC4wXG4gKi9cbmNvcmUuU3ByaXRlQmF0Y2ggPSBmdW5jdGlvbigpXG57XG4gICAgdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKCdTcHJpdGVCYXRjaCBkb2VzIG5vdCBleGlzdCBhbnkgbW9yZSwgcGxlYXNlIHVzZSB0aGUgbmV3IFBhcnRpY2xlQ29udGFpbmVyIGluc3RlYWQuJyk7XG59O1xuXG4vKipcbiAqIEBjbGFzc1xuICogQHByaXZhdGVcbiAqIEBuYW1lIEFzc2V0TG9hZGVyXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHNlZSBQSVhJLmxvYWRlcnMuTG9hZGVyXG4gKiBAdGhyb3dzIHtSZWZlcmVuY2VFcnJvcn0gVGhlIGxvYWRlciBzeXN0ZW0gd2FzIG92ZXJoYXVsZWQgaW4gcGl4aSB2MywgcGxlYXNlIHNlZSB0aGUgbmV3IFBJWEkubG9hZGVycy5Mb2FkZXIgY2xhc3MuXG4gKiBAZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDMuMC4wXG4gKi9cbmNvcmUuQXNzZXRMb2FkZXIgPSBmdW5jdGlvbigpXG57XG4gICAgdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKCdUaGUgbG9hZGVyIHN5c3RlbSB3YXMgb3ZlcmhhdWxlZCBpbiBwaXhpIHYzLCBwbGVhc2Ugc2VlIHRoZSBuZXcgUElYSS5sb2FkZXJzLkxvYWRlciBjbGFzcy4nKTtcbn07XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGNvcmUsIHtcblxuICAgIC8qKlxuICAgICAqIEBjbGFzc1xuICAgICAqIEBwcml2YXRlXG4gICAgICogQG5hbWUgU3RhZ2VcbiAgICAgKiBAbWVtYmVyb2YgUElYSVxuICAgICAqIEBzZWUgUElYSS5Db250YWluZXJcbiAgICAgKiBAZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDMuMC4wXG4gICAgICovXG4gICAgU3RhZ2U6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbigpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignWW91IGRvIG5vdCBuZWVkIHRvIHVzZSBhIFBJWEkgU3RhZ2UgYW55IG1vcmUsIHlvdSBjYW4gc2ltcGx5IHJlbmRlciBhbnkgY29udGFpbmVyLicpO1xuICAgICAgICAgICAgcmV0dXJuIGNvcmUuQ29udGFpbmVyO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIEBjbGFzc1xuICAgICAqIEBwcml2YXRlXG4gICAgICogQG5hbWUgRGlzcGxheU9iamVjdENvbnRhaW5lclxuICAgICAqIEBtZW1iZXJvZiBQSVhJXG4gICAgICogQHNlZSBQSVhJLkNvbnRhaW5lclxuICAgICAqIEBkZXByZWNhdGVkIHNpbmNlIHZlcnNpb24gMy4wLjBcbiAgICAgKi9cbiAgICBEaXNwbGF5T2JqZWN0Q29udGFpbmVyOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24oKVxuICAgICAgICB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ0Rpc3BsYXlPYmplY3RDb250YWluZXIgaGFzIGJlZW4gc2hvcnRlbmVkIHRvIENvbnRhaW5lciwgcGxlYXNlIHVzZSBDb250YWluZXIgZnJvbSBub3cgb24uJyk7XG4gICAgICAgICAgICByZXR1cm4gY29yZS5Db250YWluZXI7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQGNsYXNzXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAbmFtZSBTdHJpcFxuICAgICAqIEBtZW1iZXJvZiBQSVhJXG4gICAgICogQHNlZSBQSVhJLm1lc2guTWVzaFxuICAgICAqIEBkZXByZWNhdGVkIHNpbmNlIHZlcnNpb24gMy4wLjBcbiAgICAgKi9cbiAgICBTdHJpcDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uKClcbiAgICAgICAge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKCdUaGUgU3RyaXAgY2xhc3MgaGFzIGJlZW4gcmVuYW1lZCB0byBNZXNoIGFuZCBtb3ZlZCB0byBtZXNoLk1lc2gsIHBsZWFzZSB1c2UgbWVzaC5NZXNoIGZyb20gbm93IG9uLicpO1xuICAgICAgICAgICAgcmV0dXJuIG1lc2guTWVzaDtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBAY2xhc3NcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBuYW1lIFJvcGVcbiAgICAgKiBAbWVtYmVyb2YgUElYSVxuICAgICAqIEBzZWUgUElYSS5tZXNoLlJvcGVcbiAgICAgKiBAZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDMuMC4wXG4gICAgICovXG4gICAgUm9wZToge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uKClcbiAgICAgICAge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKCdUaGUgUm9wZSBjbGFzcyBoYXMgYmVlbiBtb3ZlZCB0byBtZXNoLlJvcGUsIHBsZWFzZSB1c2UgbWVzaC5Sb3BlIGZyb20gbm93IG9uLicpO1xuICAgICAgICAgICAgcmV0dXJuIG1lc2guUm9wZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBAY2xhc3NcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBuYW1lIE1vdmllQ2xpcFxuICAgICAqIEBtZW1iZXJvZiBQSVhJXG4gICAgICogQHNlZSBQSVhJLmV4dHJhcy5Nb3ZpZUNsaXBcbiAgICAgKiBAZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDMuMC4wXG4gICAgICovXG4gICAgTW92aWVDbGlwOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24oKVxuICAgICAgICB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ1RoZSBNb3ZpZUNsaXAgY2xhc3MgaGFzIGJlZW4gbW92ZWQgdG8gZXh0cmFzLk1vdmllQ2xpcCwgcGxlYXNlIHVzZSBleHRyYXMuTW92aWVDbGlwIGZyb20gbm93IG9uLicpO1xuICAgICAgICAgICAgcmV0dXJuIGV4dHJhcy5Nb3ZpZUNsaXA7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQGNsYXNzXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAbmFtZSBUaWxpbmdTcHJpdGVcbiAgICAgKiBAbWVtYmVyb2YgUElYSVxuICAgICAqIEBzZWUgUElYSS5leHRyYXMuVGlsaW5nU3ByaXRlXG4gICAgICogQGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiAzLjAuMFxuICAgICAqL1xuICAgIFRpbGluZ1Nwcml0ZToge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uKClcbiAgICAgICAge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKCdUaGUgVGlsaW5nU3ByaXRlIGNsYXNzIGhhcyBiZWVuIG1vdmVkIHRvIGV4dHJhcy5UaWxpbmdTcHJpdGUsIHBsZWFzZSB1c2UgZXh0cmFzLlRpbGluZ1Nwcml0ZSBmcm9tIG5vdyBvbi4nKTtcbiAgICAgICAgICAgIHJldHVybiBleHRyYXMuVGlsaW5nU3ByaXRlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIEBjbGFzc1xuICAgICAqIEBwcml2YXRlXG4gICAgICogQG5hbWUgQml0bWFwVGV4dFxuICAgICAqIEBtZW1iZXJvZiBQSVhJXG4gICAgICogQHNlZSBQSVhJLmV4dHJhcy5CaXRtYXBUZXh0XG4gICAgICogQGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiAzLjAuMFxuICAgICAqL1xuICAgIEJpdG1hcFRleHQ6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbigpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignVGhlIEJpdG1hcFRleHQgY2xhc3MgaGFzIGJlZW4gbW92ZWQgdG8gZXh0cmFzLkJpdG1hcFRleHQsIHBsZWFzZSB1c2UgZXh0cmFzLkJpdG1hcFRleHQgZnJvbSBub3cgb24uJyk7XG4gICAgICAgICAgICByZXR1cm4gZXh0cmFzLkJpdG1hcFRleHQ7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQGNsYXNzXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAbmFtZSBibGVuZE1vZGVzXG4gICAgICogQG1lbWJlcm9mIFBJWElcbiAgICAgKiBAc2VlIFBJWEkuQkxFTkRfTU9ERVNcbiAgICAgKiBAZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDMuMC4wXG4gICAgICovXG4gICAgYmxlbmRNb2Rlczoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uKClcbiAgICAgICAge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKCdUaGUgYmxlbmRNb2RlcyBoYXMgYmVlbiBtb3ZlZCB0byBCTEVORF9NT0RFUywgcGxlYXNlIHVzZSBCTEVORF9NT0RFUyBmcm9tIG5vdyBvbi4nKTtcbiAgICAgICAgICAgIHJldHVybiBjb3JlLkJMRU5EX01PREVTO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIEBjbGFzc1xuICAgICAqIEBwcml2YXRlXG4gICAgICogQG5hbWUgc2NhbGVNb2Rlc1xuICAgICAqIEBtZW1iZXJvZiBQSVhJXG4gICAgICogQHNlZSBQSVhJLlNDQUxFX01PREVTXG4gICAgICogQGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiAzLjAuMFxuICAgICAqL1xuICAgIHNjYWxlTW9kZXM6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbigpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignVGhlIHNjYWxlTW9kZXMgaGFzIGJlZW4gbW92ZWQgdG8gU0NBTEVfTU9ERVMsIHBsZWFzZSB1c2UgU0NBTEVfTU9ERVMgZnJvbSBub3cgb24uJyk7XG4gICAgICAgICAgICByZXR1cm4gY29yZS5TQ0FMRV9NT0RFUztcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBAY2xhc3NcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBuYW1lIEJhc2VUZXh0dXJlQ2FjaGVcbiAgICAgKiBAbWVtYmVyb2YgUElYSVxuICAgICAqIEBzZWUgUElYSS51dGlscy5CYXNlVGV4dHVyZUNhY2hlXG4gICAgICogQGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiAzLjAuMFxuICAgICAqL1xuICAgIEJhc2VUZXh0dXJlQ2FjaGU6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ1RoZSBCYXNlVGV4dHVyZUNhY2hlIGNsYXNzIGhhcyBiZWVuIG1vdmVkIHRvIHV0aWxzLkJhc2VUZXh0dXJlQ2FjaGUsIHBsZWFzZSB1c2UgdXRpbHMuQmFzZVRleHR1cmVDYWNoZSBmcm9tIG5vdyBvbi4nKTtcbiAgICAgICAgICAgIHJldHVybiBjb3JlLnV0aWxzLkJhc2VUZXh0dXJlQ2FjaGU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQGNsYXNzXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAbmFtZSBUZXh0dXJlQ2FjaGVcbiAgICAgKiBAbWVtYmVyb2YgUElYSVxuICAgICAqIEBzZWUgUElYSS51dGlscy5UZXh0dXJlQ2FjaGVcbiAgICAgKiBAZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDMuMC4wXG4gICAgICovXG4gICAgVGV4dHVyZUNhY2hlOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKCdUaGUgVGV4dHVyZUNhY2hlIGNsYXNzIGhhcyBiZWVuIG1vdmVkIHRvIHV0aWxzLlRleHR1cmVDYWNoZSwgcGxlYXNlIHVzZSB1dGlscy5UZXh0dXJlQ2FjaGUgZnJvbSBub3cgb24uJyk7XG4gICAgICAgICAgICByZXR1cm4gY29yZS51dGlscy5UZXh0dXJlQ2FjaGU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQG5hbWVzcGFjZVxuICAgICAqIEBwcml2YXRlXG4gICAgICogQG5hbWUgbWF0aFxuICAgICAqIEBtZW1iZXJvZiBQSVhJXG4gICAgICogQHNlZSBQSVhJXG4gICAgICogQGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiAzLjAuNlxuICAgICAqL1xuICAgIG1hdGg6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ1RoZSBtYXRoIG5hbWVzcGFjZSBpcyBkZXByZWNhdGVkLCBwbGVhc2UgYWNjZXNzIG1lbWJlcnMgYWxyZWFkeSBhY2Nlc3NpYmxlIG9uIFBJWEkuJyk7XG4gICAgICAgICAgICByZXR1cm4gY29yZTtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuXG4vKipcbiAqIEBtZXRob2RcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBQSVhJLlNwcml0ZSNzZXRUZXh0dXJlXG4gKiBAc2VlIFBJWEkuU3ByaXRlI3RleHR1cmVcbiAqIEBkZXByZWNhdGVkIHNpbmNlIHZlcnNpb24gMy4wLjBcbiAqL1xuY29yZS5TcHJpdGUucHJvdG90eXBlLnNldFRleHR1cmUgPSBmdW5jdGlvbih0ZXh0dXJlKVxue1xuICAgIHRoaXMudGV4dHVyZSA9IHRleHR1cmU7XG4gICAgY29uc29sZS53YXJuKCdzZXRUZXh0dXJlIGlzIG5vdyBkZXByZWNhdGVkLCBwbGVhc2UgdXNlIHRoZSB0ZXh0dXJlIHByb3BlcnR5LCBlLmcgOiBzcHJpdGUudGV4dHVyZSA9IHRleHR1cmU7Jyk7XG59O1xuXG4vKipcbiAqIEBtZXRob2RcbiAqIEBuYW1lIFBJWEkuZXh0cmFzLkJpdG1hcFRleHQjc2V0VGV4dFxuICogQHNlZSBQSVhJLmV4dHJhcy5CaXRtYXBUZXh0I3RleHRcbiAqIEBkZXByZWNhdGVkIHNpbmNlIHZlcnNpb24gMy4wLjBcbiAqL1xuZXh0cmFzLkJpdG1hcFRleHQucHJvdG90eXBlLnNldFRleHQgPSBmdW5jdGlvbih0ZXh0KVxue1xuICAgIHRoaXMudGV4dCA9IHRleHQ7XG4gICAgY29uc29sZS53YXJuKCdzZXRUZXh0IGlzIG5vdyBkZXByZWNhdGVkLCBwbGVhc2UgdXNlIHRoZSB0ZXh0IHByb3BlcnR5LCBlLmcgOiBteUJpdG1hcFRleHQudGV4dCA9IFxcJ215IHRleHRcXCc7Jyk7XG59O1xuXG4vKipcbiAqIEBtZXRob2RcbiAqIEBuYW1lIFBJWEkuVGV4dCNzZXRUZXh0XG4gKiBAc2VlIFBJWEkuVGV4dCN0ZXh0XG4gKiBAZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDMuMC4wXG4gKi9cbmNvcmUuVGV4dC5wcm90b3R5cGUuc2V0VGV4dCA9IGZ1bmN0aW9uKHRleHQpXG57XG4gICAgdGhpcy50ZXh0ID0gdGV4dDtcbiAgICBjb25zb2xlLndhcm4oJ3NldFRleHQgaXMgbm93IGRlcHJlY2F0ZWQsIHBsZWFzZSB1c2UgdGhlIHRleHQgcHJvcGVydHksIGUuZyA6IG15VGV4dC50ZXh0ID0gXFwnbXkgdGV4dFxcJzsnKTtcbn07XG5cbi8qKlxuICogQG1ldGhvZFxuICogQG5hbWUgUElYSS5UZXh0I3NldFN0eWxlXG4gKiBAc2VlIFBJWEkuVGV4dCNzdHlsZVxuICogQGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiAzLjAuMFxuICovXG5jb3JlLlRleHQucHJvdG90eXBlLnNldFN0eWxlID0gZnVuY3Rpb24oc3R5bGUpXG57XG4gICAgdGhpcy5zdHlsZSA9IHN0eWxlO1xuICAgIGNvbnNvbGUud2Fybignc2V0U3R5bGUgaXMgbm93IGRlcHJlY2F0ZWQsIHBsZWFzZSB1c2UgdGhlIHN0eWxlIHByb3BlcnR5LCBlLmcgOiBteVRleHQuc3R5bGUgPSBzdHlsZTsnKTtcbn07XG5cbi8qKlxuICogQG1ldGhvZFxuICogQG5hbWUgUElYSS5UZXh0dXJlI3NldEZyYW1lXG4gKiBAc2VlIFBJWEkuVGV4dHVyZSNzZXRGcmFtZVxuICogQGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiAzLjAuMFxuICovXG5jb3JlLlRleHR1cmUucHJvdG90eXBlLnNldEZyYW1lID0gZnVuY3Rpb24oZnJhbWUpXG57XG4gICAgdGhpcy5mcmFtZSA9IGZyYW1lO1xuICAgIGNvbnNvbGUud2Fybignc2V0RnJhbWUgaXMgbm93IGRlcHJlY2F0ZWQsIHBsZWFzZSB1c2UgdGhlIGZyYW1lIHByb3BlcnR5LCBlLmcgOiBteVRleHR1cmUuZnJhbWUgPSBmcmFtZTsnKTtcbn07XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGZpbHRlcnMsIHtcblxuICAgIC8qKlxuICAgICAqIEBjbGFzc1xuICAgICAqIEBwcml2YXRlXG4gICAgICogQG5hbWUgUElYSS5maWx0ZXJzLkFic3RyYWN0RmlsdGVyXG4gICAgICogQHNlZSBQSVhJLkFic3RyYWN0RmlsdGVyXG4gICAgICogQGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiAzLjAuNlxuICAgICAqL1xuICAgIEFic3RyYWN0RmlsdGVyOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24oKVxuICAgICAgICB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ2ZpbHRlcnMuQWJzdHJhY3RGaWx0ZXIgaXMgYW4gdW5kb2N1bWVudGVkIGFsaWFzLCBwbGVhc2UgdXNlIEFic3RyYWN0RmlsdGVyIGZyb20gbm93IG9uLicpO1xuICAgICAgICAgICAgcmV0dXJuIGNvcmUuQWJzdHJhY3RGaWx0ZXI7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQGNsYXNzXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAbmFtZSBQSVhJLmZpbHRlcnMuRlhBQUZpbHRlclxuICAgICAqIEBzZWUgUElYSS5GWEFBRmlsdGVyXG4gICAgICogQGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiAzLjAuNlxuICAgICAqL1xuICAgIEZYQUFGaWx0ZXI6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbigpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignZmlsdGVycy5GWEFBRmlsdGVyIGlzIGFuIHVuZG9jdW1lbnRlZCBhbGlhcywgcGxlYXNlIHVzZSBGWEFBRmlsdGVyIGZyb20gbm93IG9uLicpO1xuICAgICAgICAgICAgcmV0dXJuIGNvcmUuRlhBQUZpbHRlcjtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBAY2xhc3NcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBuYW1lIFBJWEkuZmlsdGVycy5TcHJpdGVNYXNrRmlsdGVyXG4gICAgICogQHNlZSBQSVhJLlNwcml0ZU1hc2tGaWx0ZXJcbiAgICAgKiBAZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDMuMC42XG4gICAgICovXG4gICAgU3ByaXRlTWFza0ZpbHRlcjoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uKClcbiAgICAgICAge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKCdmaWx0ZXJzLlNwcml0ZU1hc2tGaWx0ZXIgaXMgYW4gdW5kb2N1bWVudGVkIGFsaWFzLCBwbGVhc2UgdXNlIFNwcml0ZU1hc2tGaWx0ZXIgZnJvbSBub3cgb24uJyk7XG4gICAgICAgICAgICByZXR1cm4gY29yZS5TcHJpdGVNYXNrRmlsdGVyO1xuICAgICAgICB9XG4gICAgfVxufSk7XG5cbi8qKlxuICogQG1ldGhvZFxuICogQG5hbWUgUElYSS51dGlscy51dWlkXG4gKiBAc2VlIFBJWEkudXRpbHMudWlkXG4gKiBAZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDMuMC42XG4gKi9cbmNvcmUudXRpbHMudXVpZCA9IGZ1bmN0aW9uICgpXG57XG4gICAgY29uc29sZS53YXJuKCd1dGlscy51dWlkKCkgaXMgZGVwcmVjYXRlZCwgcGxlYXNlIHVzZSB1dGlscy51aWQoKSBmcm9tIG5vdyBvbi4nKTtcbiAgICByZXR1cm4gY29yZS51dGlscy51aWQoKTtcbn07XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uL2NvcmUnKTtcblxuLyoqXG4gKiBBIEJpdG1hcFRleHQgb2JqZWN0IHdpbGwgY3JlYXRlIGEgbGluZSBvciBtdWx0aXBsZSBsaW5lcyBvZiB0ZXh0IHVzaW5nIGJpdG1hcCBmb250LiBUb1xuICogc3BsaXQgYSBsaW5lIHlvdSBjYW4gdXNlICdcXG4nLCAnXFxyJyBvciAnXFxyXFxuJyBpbiB5b3VyIHN0cmluZy4gWW91IGNhbiBnZW5lcmF0ZSB0aGUgZm50IGZpbGVzIHVzaW5nOlxuICpcbiAqIEEgQml0bWFwVGV4dCBjYW4gb25seSBiZSBjcmVhdGVkIHdoZW4gdGhlIGZvbnQgaXMgbG9hZGVkXG4gKlxuICogYGBganNcbiAqIC8vIGluIHRoaXMgY2FzZSB0aGUgZm9udCBpcyBpbiBhIGZpbGUgY2FsbGVkICdkZXN5cmVsLmZudCdcbiAqIHZhciBiaXRtYXBUZXh0ID0gbmV3IFBJWEkuZXh0cmFzLkJpdG1hcFRleHQoXCJ0ZXh0IHVzaW5nIGEgZmFuY3kgZm9udCFcIiwge2ZvbnQ6IFwiMzVweCBEZXN5cmVsXCIsIGFsaWduOiBcInJpZ2h0XCJ9KTtcbiAqIGBgYFxuICpcbiAqXG4gKiBodHRwOi8vd3d3LmFuZ2VsY29kZS5jb20vcHJvZHVjdHMvYm1mb250LyBmb3Igd2luZG93cyBvclxuICogaHR0cDovL3d3dy5ibWdseXBoLmNvbS8gZm9yIG1hYy5cbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQ29udGFpbmVyXG4gKiBAbWVtYmVyb2YgUElYSS5leHRyYXNcbiAqIEBwYXJhbSB0ZXh0IHtzdHJpbmd9IFRoZSBjb3B5IHRoYXQgeW91IHdvdWxkIGxpa2UgdGhlIHRleHQgdG8gZGlzcGxheVxuICogQHBhcmFtIHN0eWxlIHtvYmplY3R9IFRoZSBzdHlsZSBwYXJhbWV0ZXJzXG4gKiBAcGFyYW0gc3R5bGUuZm9udCB7c3RyaW5nfG9iamVjdH0gVGhlIGZvbnQgZGVzY3JpcHRvciBmb3IgdGhlIG9iamVjdCwgY2FuIGJlIHBhc3NlZCBhcyBhIHN0cmluZyBvZiBmb3JtXG4gKiAgICAgIFwiMjRweCBGb250TmFtZVwiIG9yIFwiRm9udE5hbWVcIiBvciBhcyBhbiBvYmplY3Qgd2l0aCBleHBsaWNpdCBuYW1lL3NpemUgcHJvcGVydGllcy5cbiAqIEBwYXJhbSBbc3R5bGUuZm9udC5uYW1lXSB7c3RyaW5nfSBUaGUgYml0bWFwIGZvbnQgaWRcbiAqIEBwYXJhbSBbc3R5bGUuZm9udC5zaXplXSB7bnVtYmVyfSBUaGUgc2l6ZSBvZiB0aGUgZm9udCBpbiBwaXhlbHMsIGUuZy4gMjRcbiAqIEBwYXJhbSBbc3R5bGUuYWxpZ249J2xlZnQnXSB7c3RyaW5nfSBBbGlnbm1lbnQgZm9yIG11bHRpbGluZSB0ZXh0ICgnbGVmdCcsICdjZW50ZXInIG9yICdyaWdodCcpLCBkb2VzIG5vdCBhZmZlY3RcbiAqICAgICAgc2luZ2xlIGxpbmUgdGV4dFxuICogQHBhcmFtIFtzdHlsZS50aW50PTB4RkZGRkZGXSB7bnVtYmVyfSBUaGUgdGludCBjb2xvclxuICovXG5mdW5jdGlvbiBCaXRtYXBUZXh0KHRleHQsIHN0eWxlKVxue1xuICAgIGNvcmUuQ29udGFpbmVyLmNhbGwodGhpcyk7XG5cbiAgICBzdHlsZSA9IHN0eWxlIHx8IHt9O1xuXG4gICAgLyoqXG4gICAgICogVGhlIHdpZHRoIG9mIHRoZSBvdmVyYWxsIHRleHQsIGRpZmZlcmVudCBmcm9tIGZvbnRTaXplLFxuICAgICAqIHdoaWNoIGlzIGRlZmluZWQgaW4gdGhlIHN0eWxlIG9iamVjdFxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEByZWFkT25seVxuICAgICAqL1xuICAgIHRoaXMudGV4dFdpZHRoID0gMDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBoZWlnaHQgb2YgdGhlIG92ZXJhbGwgdGV4dCwgZGlmZmVyZW50IGZyb20gZm9udFNpemUsXG4gICAgICogd2hpY2ggaXMgZGVmaW5lZCBpbiB0aGUgc3R5bGUgb2JqZWN0XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQHJlYWRPbmx5XG4gICAgICovXG4gICAgdGhpcy50ZXh0SGVpZ2h0ID0gMDtcblxuICAgIC8qKlxuICAgICAqIFByaXZhdGUgdHJhY2tlciBmb3IgdGhlIGxldHRlciBzcHJpdGUgcG9vbC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuU3ByaXRlW119XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9nbHlwaHMgPSBbXTtcblxuICAgIC8qKlxuICAgICAqIFByaXZhdGUgdHJhY2tlciBmb3IgdGhlIGN1cnJlbnQgc3R5bGUuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtvYmplY3R9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9mb250ID0ge1xuICAgICAgICB0aW50OiBzdHlsZS50aW50ICE9PSB1bmRlZmluZWQgPyBzdHlsZS50aW50IDogMHhGRkZGRkYsXG4gICAgICAgIGFsaWduOiBzdHlsZS5hbGlnbiB8fCAnbGVmdCcsXG4gICAgICAgIG5hbWU6IG51bGwsXG4gICAgICAgIHNpemU6IDBcbiAgICB9O1xuXG4gICAgLyoqXG4gICAgICogUHJpdmF0ZSB0cmFja2VyIGZvciB0aGUgY3VycmVudCBmb250LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7b2JqZWN0fVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5mb250ID0gc3R5bGUuZm9udDsgLy8gcnVuIGZvbnQgc2V0dGVyXG5cbiAgICAvKipcbiAgICAgKiBQcml2YXRlIHRyYWNrZXIgZm9yIHRoZSBjdXJyZW50IHRleHQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtzdHJpbmd9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl90ZXh0ID0gdGV4dDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBtYXggd2lkdGggb2YgdGhpcyBiaXRtYXAgdGV4dCBpbiBwaXhlbHMuIElmIHRoZSB0ZXh0IHByb3ZpZGVkIGlzIGxvbmdlciB0aGFuIHRoZSB2YWx1ZSBwcm92aWRlZCwgbGluZSBicmVha3Mgd2lsbCBiZSBhdXRvbWF0aWNhbGx5IGluc2VydGVkIGluIHRoZSBsYXN0IHdoaXRlc3BhY2UuXG4gICAgICogRGlzYWJsZSBieSBzZXR0aW5nIHZhbHVlIHRvIDBcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLm1heFdpZHRoID0gMDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBtYXggbGluZSBoZWlnaHQuIFRoaXMgaXMgdXNlZnVsIHdoZW4gdHJ5aW5nIHRvIHVzZSB0aGUgdG90YWwgaGVpZ2h0IG9mIHRoZSBUZXh0LCBpZTogd2hlbiB0cnlpbmcgdG8gdmVydGljYWxseSBhbGlnbi5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLm1heExpbmVIZWlnaHQgPSAwO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGRpcnR5IHN0YXRlIG9mIHRoaXMgb2JqZWN0LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKi9cbiAgICB0aGlzLmRpcnR5ID0gZmFsc2U7XG5cbiAgICB0aGlzLnVwZGF0ZVRleHQoKTtcbn1cblxuLy8gY29uc3RydWN0b3JcbkJpdG1hcFRleHQucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShjb3JlLkNvbnRhaW5lci5wcm90b3R5cGUpO1xuQml0bWFwVGV4dC5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBCaXRtYXBUZXh0O1xubW9kdWxlLmV4cG9ydHMgPSBCaXRtYXBUZXh0O1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhCaXRtYXBUZXh0LnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFRoZSB0aW50IG9mIHRoZSBCaXRtYXBUZXh0IG9iamVjdFxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmV4dHJhcy5CaXRtYXBUZXh0I1xuICAgICAqL1xuICAgIHRpbnQ6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fZm9udC50aW50O1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5fZm9udC50aW50ID0gKHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicgJiYgdmFsdWUgPj0gMCkgPyB2YWx1ZSA6IDB4RkZGRkZGO1xuXG4gICAgICAgICAgICB0aGlzLmRpcnR5ID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBUaGUgYWxpZ25tZW50IG9mIHRoZSBCaXRtYXBUZXh0IG9iamVjdFxuICAgICAqXG4gICAgICogQG1lbWJlciB7c3RyaW5nfVxuICAgICAqIEBkZWZhdWx0ICdsZWZ0J1xuICAgICAqIEBtZW1iZXJvZiBQSVhJLmV4dHJhcy5CaXRtYXBUZXh0I1xuICAgICAqL1xuICAgIGFsaWduOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2ZvbnQuYWxpZ247XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLl9mb250LmFsaWduID0gdmFsdWUgfHwgJ2xlZnQnO1xuXG4gICAgICAgICAgICB0aGlzLmRpcnR5ID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBUaGUgZm9udCBkZXNjcmlwdG9yIG9mIHRoZSBCaXRtYXBUZXh0IG9iamVjdFxuICAgICAqXG4gICAgICogQG1lbWJlciB7Rm9udH1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5leHRyYXMuQml0bWFwVGV4dCNcbiAgICAgKi9cbiAgICBmb250OiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2ZvbnQ7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICBpZiAoIXZhbHVlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgICAgIHZhbHVlID0gdmFsdWUuc3BsaXQoJyAnKTtcblxuICAgICAgICAgICAgICAgIHRoaXMuX2ZvbnQubmFtZSA9IHZhbHVlLmxlbmd0aCA9PT0gMSA/IHZhbHVlWzBdIDogdmFsdWUuc2xpY2UoMSkuam9pbignICcpO1xuICAgICAgICAgICAgICAgIHRoaXMuX2ZvbnQuc2l6ZSA9IHZhbHVlLmxlbmd0aCA+PSAyID8gcGFyc2VJbnQodmFsdWVbMF0sIDEwKSA6IEJpdG1hcFRleHQuZm9udHNbdGhpcy5fZm9udC5uYW1lXS5zaXplO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fZm9udC5uYW1lID0gdmFsdWUubmFtZTtcbiAgICAgICAgICAgICAgICB0aGlzLl9mb250LnNpemUgPSB0eXBlb2YgdmFsdWUuc2l6ZSA9PT0gJ251bWJlcicgPyB2YWx1ZS5zaXplIDogcGFyc2VJbnQodmFsdWUuc2l6ZSwgMTApO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLmRpcnR5ID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBUaGUgdGV4dCBvZiB0aGUgQml0bWFwVGV4dCBvYmplY3RcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge3N0cmluZ31cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5leHRyYXMuQml0bWFwVGV4dCNcbiAgICAgKi9cbiAgICB0ZXh0OiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3RleHQ7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB2YWx1ZSA9IHZhbHVlLnRvU3RyaW5nKCkgfHwgJyAnO1xuICAgICAgICAgICAgaWYgKHRoaXMuX3RleHQgPT09IHZhbHVlKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuX3RleHQgPSB2YWx1ZTtcbiAgICAgICAgICAgIHRoaXMuZGlydHkgPSB0cnVlO1xuICAgICAgICB9XG4gICAgfVxufSk7XG5cbi8qKlxuICogUmVuZGVycyB0ZXh0IGFuZCB1cGRhdGVzIGl0IHdoZW4gbmVlZGVkXG4gKlxuICogQHByaXZhdGVcbiAqL1xuQml0bWFwVGV4dC5wcm90b3R5cGUudXBkYXRlVGV4dCA9IGZ1bmN0aW9uICgpXG57XG4gICAgdmFyIGRhdGEgPSBCaXRtYXBUZXh0LmZvbnRzW3RoaXMuX2ZvbnQubmFtZV07XG4gICAgdmFyIHBvcyA9IG5ldyBjb3JlLlBvaW50KCk7XG4gICAgdmFyIHByZXZDaGFyQ29kZSA9IG51bGw7XG4gICAgdmFyIGNoYXJzID0gW107XG4gICAgdmFyIGxhc3RMaW5lV2lkdGggPSAwO1xuICAgIHZhciBtYXhMaW5lV2lkdGggPSAwO1xuICAgIHZhciBsaW5lV2lkdGhzID0gW107XG4gICAgdmFyIGxpbmUgPSAwO1xuICAgIHZhciBzY2FsZSA9IHRoaXMuX2ZvbnQuc2l6ZSAvIGRhdGEuc2l6ZTtcbiAgICB2YXIgbGFzdFNwYWNlID0gLTE7XG4gICAgdmFyIG1heExpbmVIZWlnaHQgPSAwO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLnRleHQubGVuZ3RoOyBpKyspXG4gICAge1xuICAgICAgICB2YXIgY2hhckNvZGUgPSB0aGlzLnRleHQuY2hhckNvZGVBdChpKTtcbiAgICAgICAgbGFzdFNwYWNlID0gLyhcXHMpLy50ZXN0KHRoaXMudGV4dC5jaGFyQXQoaSkpID8gaSA6IGxhc3RTcGFjZTtcblxuICAgICAgICBpZiAoLyg/OlxcclxcbnxcXHJ8XFxuKS8udGVzdCh0aGlzLnRleHQuY2hhckF0KGkpKSlcbiAgICAgICAge1xuICAgICAgICAgICAgbGluZVdpZHRocy5wdXNoKGxhc3RMaW5lV2lkdGgpO1xuICAgICAgICAgICAgbWF4TGluZVdpZHRoID0gTWF0aC5tYXgobWF4TGluZVdpZHRoLCBsYXN0TGluZVdpZHRoKTtcbiAgICAgICAgICAgIGxpbmUrKztcblxuICAgICAgICAgICAgcG9zLnggPSAwO1xuICAgICAgICAgICAgcG9zLnkgKz0gZGF0YS5saW5lSGVpZ2h0O1xuICAgICAgICAgICAgcHJldkNoYXJDb2RlID0gbnVsbDtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGxhc3RTcGFjZSAhPT0gLTEgJiYgdGhpcy5tYXhXaWR0aCA+IDAgJiYgcG9zLnggKiBzY2FsZSA+IHRoaXMubWF4V2lkdGgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNvcmUudXRpbHMucmVtb3ZlSXRlbXMoY2hhcnMsIGxhc3RTcGFjZSwgaSAtIGxhc3RTcGFjZSk7XG4gICAgICAgICAgICBpID0gbGFzdFNwYWNlO1xuICAgICAgICAgICAgbGFzdFNwYWNlID0gLTE7XG5cbiAgICAgICAgICAgIGxpbmVXaWR0aHMucHVzaChsYXN0TGluZVdpZHRoKTtcbiAgICAgICAgICAgIG1heExpbmVXaWR0aCA9IE1hdGgubWF4KG1heExpbmVXaWR0aCwgbGFzdExpbmVXaWR0aCk7XG4gICAgICAgICAgICBsaW5lKys7XG5cbiAgICAgICAgICAgIHBvcy54ID0gMDtcbiAgICAgICAgICAgIHBvcy55ICs9IGRhdGEubGluZUhlaWdodDtcbiAgICAgICAgICAgIHByZXZDaGFyQ29kZSA9IG51bGw7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBjaGFyRGF0YSA9IGRhdGEuY2hhcnNbY2hhckNvZGVdO1xuXG4gICAgICAgIGlmICghY2hhckRhdGEpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHByZXZDaGFyQ29kZSAmJiBjaGFyRGF0YS5rZXJuaW5nW3ByZXZDaGFyQ29kZV0pXG4gICAgICAgIHtcbiAgICAgICAgICAgIHBvcy54ICs9IGNoYXJEYXRhLmtlcm5pbmdbcHJldkNoYXJDb2RlXTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNoYXJzLnB1c2goe3RleHR1cmU6Y2hhckRhdGEudGV4dHVyZSwgbGluZTogbGluZSwgY2hhckNvZGU6IGNoYXJDb2RlLCBwb3NpdGlvbjogbmV3IGNvcmUuUG9pbnQocG9zLnggKyBjaGFyRGF0YS54T2Zmc2V0LCBwb3MueSArIGNoYXJEYXRhLnlPZmZzZXQpfSk7XG4gICAgICAgIGxhc3RMaW5lV2lkdGggPSBwb3MueCArIChjaGFyRGF0YS50ZXh0dXJlLndpZHRoICsgY2hhckRhdGEueE9mZnNldCk7XG4gICAgICAgIHBvcy54ICs9IGNoYXJEYXRhLnhBZHZhbmNlO1xuICAgICAgICBtYXhMaW5lSGVpZ2h0ID0gTWF0aC5tYXgobWF4TGluZUhlaWdodCwgKGNoYXJEYXRhLnlPZmZzZXQgKyBjaGFyRGF0YS50ZXh0dXJlLmhlaWdodCkpO1xuICAgICAgICBwcmV2Q2hhckNvZGUgPSBjaGFyQ29kZTtcbiAgICB9XG5cbiAgICBsaW5lV2lkdGhzLnB1c2gobGFzdExpbmVXaWR0aCk7XG4gICAgbWF4TGluZVdpZHRoID0gTWF0aC5tYXgobWF4TGluZVdpZHRoLCBsYXN0TGluZVdpZHRoKTtcblxuICAgIHZhciBsaW5lQWxpZ25PZmZzZXRzID0gW107XG5cbiAgICBmb3IgKGkgPSAwOyBpIDw9IGxpbmU7IGkrKylcbiAgICB7XG4gICAgICAgIHZhciBhbGlnbk9mZnNldCA9IDA7XG5cbiAgICAgICAgaWYgKHRoaXMuX2ZvbnQuYWxpZ24gPT09ICdyaWdodCcpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGFsaWduT2Zmc2V0ID0gbWF4TGluZVdpZHRoIC0gbGluZVdpZHRoc1tpXTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh0aGlzLl9mb250LmFsaWduID09PSAnY2VudGVyJylcbiAgICAgICAge1xuICAgICAgICAgICAgYWxpZ25PZmZzZXQgPSAobWF4TGluZVdpZHRoIC0gbGluZVdpZHRoc1tpXSkgLyAyO1xuICAgICAgICB9XG5cbiAgICAgICAgbGluZUFsaWduT2Zmc2V0cy5wdXNoKGFsaWduT2Zmc2V0KTtcbiAgICB9XG5cbiAgICB2YXIgbGVuQ2hhcnMgPSBjaGFycy5sZW5ndGg7XG4gICAgdmFyIHRpbnQgPSB0aGlzLnRpbnQ7XG5cbiAgICBmb3IgKGkgPSAwOyBpIDwgbGVuQ2hhcnM7IGkrKylcbiAgICB7XG4gICAgICAgIHZhciBjID0gdGhpcy5fZ2x5cGhzW2ldOyAvLyBnZXQgdGhlIG5leHQgZ2x5cGggc3ByaXRlXG5cbiAgICAgICAgaWYgKGMpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGMudGV4dHVyZSA9IGNoYXJzW2ldLnRleHR1cmU7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgICBjID0gbmV3IGNvcmUuU3ByaXRlKGNoYXJzW2ldLnRleHR1cmUpO1xuICAgICAgICAgICAgdGhpcy5fZ2x5cGhzLnB1c2goYyk7XG4gICAgICAgIH1cblxuICAgICAgICBjLnBvc2l0aW9uLnggPSAoY2hhcnNbaV0ucG9zaXRpb24ueCArIGxpbmVBbGlnbk9mZnNldHNbY2hhcnNbaV0ubGluZV0pICogc2NhbGU7XG4gICAgICAgIGMucG9zaXRpb24ueSA9IGNoYXJzW2ldLnBvc2l0aW9uLnkgKiBzY2FsZTtcbiAgICAgICAgYy5zY2FsZS54ID0gYy5zY2FsZS55ID0gc2NhbGU7XG4gICAgICAgIGMudGludCA9IHRpbnQ7XG5cbiAgICAgICAgaWYgKCFjLnBhcmVudClcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5hZGRDaGlsZChjKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIHJlbW92ZSB1bm5lY2Vzc2FyeSBjaGlsZHJlbi5cbiAgICBmb3IgKGkgPSBsZW5DaGFyczsgaSA8IHRoaXMuX2dseXBocy5sZW5ndGg7ICsraSlcbiAgICB7XG4gICAgICAgIHRoaXMucmVtb3ZlQ2hpbGQodGhpcy5fZ2x5cGhzW2ldKTtcbiAgICB9XG5cbiAgICB0aGlzLnRleHRXaWR0aCA9IG1heExpbmVXaWR0aCAqIHNjYWxlO1xuICAgIHRoaXMudGV4dEhlaWdodCA9IChwb3MueSArIGRhdGEubGluZUhlaWdodCkgKiBzY2FsZTtcbiAgICB0aGlzLm1heExpbmVIZWlnaHQgPSBtYXhMaW5lSGVpZ2h0ICogc2NhbGU7XG59O1xuXG4vKipcbiAqIFVwZGF0ZXMgdGhlIHRyYW5zZm9ybSBvZiB0aGlzIG9iamVjdFxuICpcbiAqIEBwcml2YXRlXG4gKi9cbkJpdG1hcFRleHQucHJvdG90eXBlLnVwZGF0ZVRyYW5zZm9ybSA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy52YWxpZGF0ZSgpO1xuICAgIHRoaXMuY29udGFpbmVyVXBkYXRlVHJhbnNmb3JtKCk7XG59O1xuXG4vKipcbiAqIFZhbGlkYXRlcyB0ZXh0IGJlZm9yZSBjYWxsaW5nIHBhcmVudCdzIGdldExvY2FsQm91bmRzXG4gKlxuICogQHJldHVybiB7UElYSS5SZWN0YW5nbGV9IFRoZSByZWN0YW5ndWxhciBib3VuZGluZyBhcmVhXG4gKi9cblxuQml0bWFwVGV4dC5wcm90b3R5cGUuZ2V0TG9jYWxCb3VuZHMgPSBmdW5jdGlvbigpXG57XG4gICAgdGhpcy52YWxpZGF0ZSgpO1xuICAgIHJldHVybiBjb3JlLkNvbnRhaW5lci5wcm90b3R5cGUuZ2V0TG9jYWxCb3VuZHMuY2FsbCh0aGlzKTtcbn07XG5cbi8qKlxuICogVXBkYXRlcyB0ZXh0IHdoZW4gbmVlZGVkXG4gKlxuICogQHByaXZhdGVcbiAqL1xuQml0bWFwVGV4dC5wcm90b3R5cGUudmFsaWRhdGUgPSBmdW5jdGlvbigpXG57XG4gICAgaWYgKHRoaXMuZGlydHkpXG4gICAge1xuICAgICAgICB0aGlzLnVwZGF0ZVRleHQoKTtcbiAgICAgICAgdGhpcy5kaXJ0eSA9IGZhbHNlO1xuICAgIH1cbn07XG5cbkJpdG1hcFRleHQuZm9udHMgPSB7fTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vY29yZScpO1xuXG4vKipcbiAqIEEgTW92aWVDbGlwIGlzIGEgc2ltcGxlIHdheSB0byBkaXNwbGF5IGFuIGFuaW1hdGlvbiBkZXBpY3RlZCBieSBhIGxpc3Qgb2YgdGV4dHVyZXMuXG4gKlxuICogYGBganNcbiAqIHZhciBhbGllbkltYWdlcyA9IFtcImltYWdlX3NlcXVlbmNlXzAxLnBuZ1wiLFwiaW1hZ2Vfc2VxdWVuY2VfMDIucG5nXCIsXCJpbWFnZV9zZXF1ZW5jZV8wMy5wbmdcIixcImltYWdlX3NlcXVlbmNlXzA0LnBuZ1wiXTtcbiAqIHZhciB0ZXh0dXJlQXJyYXkgPSBbXTtcbiAqXG4gKiBmb3IgKHZhciBpPTA7IGkgPCA0OyBpKyspXG4gKiB7XG4gKiAgICAgIHZhciB0ZXh0dXJlID0gUElYSS5UZXh0dXJlLmZyb21JbWFnZShhbGllbkltYWdlc1tpXSk7XG4gKiAgICAgIHRleHR1cmVBcnJheS5wdXNoKHRleHR1cmUpO1xuICogfTtcbiAqXG4gKiB2YXIgbWMgPSBuZXcgUElYSS5Nb3ZpZUNsaXAodGV4dHVyZUFycmF5KTtcbiAqIGBgYFxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5TcHJpdGVcbiAqIEBtZW1iZXJvZiBQSVhJLmV4dHJhc1xuICogQHBhcmFtIHRleHR1cmVzIHtQSVhJLlRleHR1cmVbXXxPYmplY3RbXX0gYW4gYXJyYXkgb2Yge0BsaW5rIFBJWEkuVGV4dHVyZX0gb3IgZnJhbWUgb2JqZWN0cyB0aGF0IG1ha2UgdXAgdGhlIGFuaW1hdGlvblxuICogQHBhcmFtIHRleHR1cmVzW10udGV4dHVyZSB7UElYSS5UZXh0dXJlfSB0aGUge0BsaW5rIFBJWEkuVGV4dHVyZX0gb2YgdGhlIGZyYW1lXG4gKiBAcGFyYW0gdGV4dHVyZXNbXS50aW1lIHtudW1iZXJ9IHRoZSBkdXJhdGlvbiBvZiB0aGUgZnJhbWUgaW4gbXNcbiAqL1xuZnVuY3Rpb24gTW92aWVDbGlwKHRleHR1cmVzKVxue1xuICAgIGNvcmUuU3ByaXRlLmNhbGwodGhpcywgdGV4dHVyZXNbMF0gaW5zdGFuY2VvZiBjb3JlLlRleHR1cmUgPyB0ZXh0dXJlc1swXSA6IHRleHR1cmVzWzBdLnRleHR1cmUpO1xuXG4gICAgLyoqXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl90ZXh0dXJlcyA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX2R1cmF0aW9ucyA9IG51bGw7XG5cbiAgICB0aGlzLnRleHR1cmVzID0gdGV4dHVyZXM7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgc3BlZWQgdGhhdCB0aGUgTW92aWVDbGlwIHdpbGwgcGxheSBhdC4gSGlnaGVyIGlzIGZhc3RlciwgbG93ZXIgaXMgc2xvd2VyXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMVxuICAgICAqL1xuICAgIHRoaXMuYW5pbWF0aW9uU3BlZWQgPSAxO1xuXG4gICAgLyoqXG4gICAgICogV2hldGhlciBvciBub3QgdGhlIG1vdmllIGNsaXAgcmVwZWF0cyBhZnRlciBwbGF5aW5nLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKiBAZGVmYXVsdCB0cnVlXG4gICAgICovXG4gICAgdGhpcy5sb29wID0gdHJ1ZTtcblxuICAgIC8qKlxuICAgICAqIEZ1bmN0aW9uIHRvIGNhbGwgd2hlbiBhIE1vdmllQ2xpcCBmaW5pc2hlcyBwbGF5aW5nXG4gICAgICpcbiAgICAgKiBAbWV0aG9kXG4gICAgICogQG1lbWJlcm9mIFBJWEkuZXh0cmFzLk1vdmllQ2xpcCNcbiAgICAgKi9cbiAgICB0aGlzLm9uQ29tcGxldGUgPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogRWxhcHNlZCB0aW1lIHNpbmNlIGFuaW1hdGlvbiBoYXMgYmVlbiBzdGFydGVkLCB1c2VkIGludGVybmFsbHkgdG8gZGlzcGxheSBjdXJyZW50IHRleHR1cmVcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX2N1cnJlbnRUaW1lID0gMDtcblxuICAgIC8qKlxuICAgICAqIEluZGljYXRlcyBpZiB0aGUgTW92aWVDbGlwIGlzIGN1cnJlbnRseSBwbGF5aW5nXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqIEByZWFkb25seVxuICAgICAqL1xuICAgIHRoaXMucGxheWluZyA9IGZhbHNlO1xufVxuXG4vLyBjb25zdHJ1Y3RvclxuTW92aWVDbGlwLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoY29yZS5TcHJpdGUucHJvdG90eXBlKTtcbk1vdmllQ2xpcC5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBNb3ZpZUNsaXA7XG5tb2R1bGUuZXhwb3J0cyA9IE1vdmllQ2xpcDtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoTW92aWVDbGlwLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIHRvdGFsRnJhbWVzIGlzIHRoZSB0b3RhbCBudW1iZXIgb2YgZnJhbWVzIGluIHRoZSBNb3ZpZUNsaXAuIFRoaXMgaXMgdGhlIHNhbWUgYXMgbnVtYmVyIG9mIHRleHR1cmVzXG4gICAgICogYXNzaWduZWQgdG8gdGhlIE1vdmllQ2xpcC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5leHRyYXMuTW92aWVDbGlwI1xuICAgICAqIEBkZWZhdWx0IDBcbiAgICAgKiBAcmVhZG9ubHlcbiAgICAgKi9cbiAgICB0b3RhbEZyYW1lczoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3RleHR1cmVzLmxlbmd0aDtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBUaGUgYXJyYXkgb2YgdGV4dHVyZXMgdXNlZCBmb3IgdGhpcyBNb3ZpZUNsaXBcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuVGV4dHVyZVtdfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmV4dHJhcy5Nb3ZpZUNsaXAjXG4gICAgICpcbiAgICAgKi9cbiAgICB0ZXh0dXJlczoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl90ZXh0dXJlcztcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGlmKHZhbHVlWzBdIGluc3RhbmNlb2YgY29yZS5UZXh0dXJlKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHRoaXMuX3RleHR1cmVzID0gdmFsdWU7XG4gICAgICAgICAgICAgICAgdGhpcy5fZHVyYXRpb25zID0gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB0aGlzLl90ZXh0dXJlcyA9IFtdO1xuICAgICAgICAgICAgICAgIHRoaXMuX2R1cmF0aW9ucyA9IFtdO1xuICAgICAgICAgICAgICAgIGZvcih2YXIgaSA9IDA7IGkgPCB2YWx1ZS5sZW5ndGg7IGkrKylcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3RleHR1cmVzLnB1c2godmFsdWVbaV0udGV4dHVyZSk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2R1cmF0aW9ucy5wdXNoKHZhbHVlW2ldLnRpbWUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAqIFRoZSBNb3ZpZUNsaXBzIGN1cnJlbnQgZnJhbWUgaW5kZXhcbiAgICAqXG4gICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgKiBAbWVtYmVyb2YgUElYSS5leHRyYXMuTW92aWVDbGlwI1xuICAgICogQHJlYWRvbmx5XG4gICAgKi9cbiAgICBjdXJyZW50RnJhbWU6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICB2YXIgY3VycmVudEZyYW1lID0gTWF0aC5mbG9vcih0aGlzLl9jdXJyZW50VGltZSkgJSB0aGlzLl90ZXh0dXJlcy5sZW5ndGg7XG4gICAgICAgICAgICBpZiAoY3VycmVudEZyYW1lIDwgMClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjdXJyZW50RnJhbWUgKz0gdGhpcy5fdGV4dHVyZXMubGVuZ3RoO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGN1cnJlbnRGcmFtZTtcbiAgICAgICAgfVxuICAgIH1cblxufSk7XG5cbi8qKlxuICogU3RvcHMgdGhlIE1vdmllQ2xpcFxuICpcbiAqL1xuTW92aWVDbGlwLnByb3RvdHlwZS5zdG9wID0gZnVuY3Rpb24gKClcbntcbiAgICBpZighdGhpcy5wbGF5aW5nKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMucGxheWluZyA9IGZhbHNlO1xuICAgIGNvcmUudGlja2VyLnNoYXJlZC5yZW1vdmUodGhpcy51cGRhdGUsIHRoaXMpO1xufTtcblxuLyoqXG4gKiBQbGF5cyB0aGUgTW92aWVDbGlwXG4gKlxuICovXG5Nb3ZpZUNsaXAucHJvdG90eXBlLnBsYXkgPSBmdW5jdGlvbiAoKVxue1xuICAgIGlmKHRoaXMucGxheWluZylcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLnBsYXlpbmcgPSB0cnVlO1xuICAgIGNvcmUudGlja2VyLnNoYXJlZC5hZGQodGhpcy51cGRhdGUsIHRoaXMpO1xufTtcblxuLyoqXG4gKiBTdG9wcyB0aGUgTW92aWVDbGlwIGFuZCBnb2VzIHRvIGEgc3BlY2lmaWMgZnJhbWVcbiAqXG4gKiBAcGFyYW0gZnJhbWVOdW1iZXIge251bWJlcn0gZnJhbWUgaW5kZXggdG8gc3RvcCBhdFxuICovXG5Nb3ZpZUNsaXAucHJvdG90eXBlLmdvdG9BbmRTdG9wID0gZnVuY3Rpb24gKGZyYW1lTnVtYmVyKVxue1xuICAgIHRoaXMuc3RvcCgpO1xuXG4gICAgdGhpcy5fY3VycmVudFRpbWUgPSBmcmFtZU51bWJlcjtcblxuICAgIHRoaXMuX3RleHR1cmUgPSB0aGlzLl90ZXh0dXJlc1t0aGlzLmN1cnJlbnRGcmFtZV07XG59O1xuXG4vKipcbiAqIEdvZXMgdG8gYSBzcGVjaWZpYyBmcmFtZSBhbmQgYmVnaW5zIHBsYXlpbmcgdGhlIE1vdmllQ2xpcFxuICpcbiAqIEBwYXJhbSBmcmFtZU51bWJlciB7bnVtYmVyfSBmcmFtZSBpbmRleCB0byBzdGFydCBhdFxuICovXG5Nb3ZpZUNsaXAucHJvdG90eXBlLmdvdG9BbmRQbGF5ID0gZnVuY3Rpb24gKGZyYW1lTnVtYmVyKVxue1xuICAgIHRoaXMuX2N1cnJlbnRUaW1lID0gZnJhbWVOdW1iZXI7XG5cbiAgICB0aGlzLnBsYXkoKTtcbn07XG5cbi8qXG4gKiBVcGRhdGVzIHRoZSBvYmplY3QgdHJhbnNmb3JtIGZvciByZW5kZXJpbmdcbiAqIEBwcml2YXRlXG4gKi9cbk1vdmllQ2xpcC5wcm90b3R5cGUudXBkYXRlID0gZnVuY3Rpb24gKGRlbHRhVGltZSlcbntcbiAgICB2YXIgZWxhcHNlZCA9IHRoaXMuYW5pbWF0aW9uU3BlZWQgKiBkZWx0YVRpbWU7XG5cbiAgICBpZiAodGhpcy5fZHVyYXRpb25zICE9PSBudWxsKVxuICAgIHtcbiAgICAgICAgdmFyIGxhZyA9IHRoaXMuX2N1cnJlbnRUaW1lICUgMSAqIHRoaXMuX2R1cmF0aW9uc1t0aGlzLmN1cnJlbnRGcmFtZV07XG5cbiAgICAgICAgbGFnICs9IGVsYXBzZWQgLyA2MCAqIDEwMDA7XG5cbiAgICAgICAgd2hpbGUgKGxhZyA8IDApXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuX2N1cnJlbnRUaW1lLS07XG4gICAgICAgICAgICBsYWcgKz0gdGhpcy5fZHVyYXRpb25zW3RoaXMuY3VycmVudEZyYW1lXTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBzaWduID0gTWF0aC5zaWduKHRoaXMuYW5pbWF0aW9uU3BlZWQgKiBkZWx0YVRpbWUpO1xuICAgICAgICB0aGlzLl9jdXJyZW50VGltZSA9IE1hdGguZmxvb3IodGhpcy5fY3VycmVudFRpbWUpO1xuXG4gICAgICAgIHdoaWxlIChsYWcgPj0gdGhpcy5fZHVyYXRpb25zW3RoaXMuY3VycmVudEZyYW1lXSlcbiAgICAgICAge1xuICAgICAgICAgICAgbGFnIC09IHRoaXMuX2R1cmF0aW9uc1t0aGlzLmN1cnJlbnRGcmFtZV0gKiBzaWduO1xuICAgICAgICAgICAgdGhpcy5fY3VycmVudFRpbWUgKz0gc2lnbjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX2N1cnJlbnRUaW1lICs9IGxhZyAvIHRoaXMuX2R1cmF0aW9uc1t0aGlzLmN1cnJlbnRGcmFtZV07XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHRoaXMuX2N1cnJlbnRUaW1lICs9IGVsYXBzZWQ7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX2N1cnJlbnRUaW1lIDwgMCAmJiAhdGhpcy5sb29wKVxuICAgIHtcbiAgICAgICAgdGhpcy5nb3RvQW5kU3RvcCgwKTtcblxuICAgICAgICBpZiAodGhpcy5vbkNvbXBsZXRlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLm9uQ29tcGxldGUoKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBlbHNlIGlmICh0aGlzLl9jdXJyZW50VGltZSA+PSB0aGlzLl90ZXh0dXJlcy5sZW5ndGggJiYgIXRoaXMubG9vcClcbiAgICB7XG4gICAgICAgIHRoaXMuZ290b0FuZFN0b3AodGhpcy5fdGV4dHVyZXMubGVuZ3RoIC0gMSk7XG5cbiAgICAgICAgaWYgKHRoaXMub25Db21wbGV0ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5vbkNvbXBsZXRlKCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgdGhpcy5fdGV4dHVyZSA9IHRoaXMuX3RleHR1cmVzW3RoaXMuY3VycmVudEZyYW1lXTtcbiAgICB9XG5cbn07XG5cbi8qXG4gKiBTdG9wcyB0aGUgTW92aWVDbGlwIGFuZCBkZXN0cm95cyBpdFxuICpcbiAqL1xuTW92aWVDbGlwLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKCApXG57XG4gICAgdGhpcy5zdG9wKCk7XG4gICAgY29yZS5TcHJpdGUucHJvdG90eXBlLmRlc3Ryb3kuY2FsbCh0aGlzKTtcbn07XG5cbi8qKlxuICogQSBzaG9ydCBoYW5kIHdheSBvZiBjcmVhdGluZyBhIG1vdmllY2xpcCBmcm9tIGFuIGFycmF5IG9mIGZyYW1lIGlkc1xuICpcbiAqIEBzdGF0aWNcbiAqIEBwYXJhbSBmcmFtZXMge3N0cmluZ1tdfSB0aGUgYXJyYXkgb2YgZnJhbWVzIGlkcyB0aGUgbW92aWVjbGlwIHdpbGwgdXNlIGFzIGl0cyB0ZXh0dXJlIGZyYW1lc1xuICovXG5Nb3ZpZUNsaXAuZnJvbUZyYW1lcyA9IGZ1bmN0aW9uIChmcmFtZXMpXG57XG4gICAgdmFyIHRleHR1cmVzID0gW107XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGZyYW1lcy5sZW5ndGg7ICsraSlcbiAgICB7XG4gICAgICAgIHRleHR1cmVzLnB1c2gobmV3IGNvcmUuVGV4dHVyZS5mcm9tRnJhbWUoZnJhbWVzW2ldKSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBNb3ZpZUNsaXAodGV4dHVyZXMpO1xufTtcblxuLyoqXG4gKiBBIHNob3J0IGhhbmQgd2F5IG9mIGNyZWF0aW5nIGEgbW92aWVjbGlwIGZyb20gYW4gYXJyYXkgb2YgaW1hZ2UgaWRzXG4gKlxuICogQHN0YXRpY1xuICogQHBhcmFtIGltYWdlcyB7c3RyaW5nW119IHRoZSBhcnJheSBvZiBpbWFnZSB1cmxzIHRoZSBtb3ZpZWNsaXAgd2lsbCB1c2UgYXMgaXRzIHRleHR1cmUgZnJhbWVzXG4gKi9cbk1vdmllQ2xpcC5mcm9tSW1hZ2VzID0gZnVuY3Rpb24gKGltYWdlcylcbntcbiAgICB2YXIgdGV4dHVyZXMgPSBbXTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgaW1hZ2VzLmxlbmd0aDsgKytpKVxuICAgIHtcbiAgICAgICAgdGV4dHVyZXMucHVzaChuZXcgY29yZS5UZXh0dXJlLmZyb21JbWFnZShpbWFnZXNbaV0pKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IE1vdmllQ2xpcCh0ZXh0dXJlcyk7XG59OyIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vY29yZScpLFxuICAgIC8vIGEgc3ByaXRlIHVzZSBkZm9yIHJlbmRlcmluZyB0ZXh0dXJlcy4uXG4gICAgdGVtcFBvaW50ID0gbmV3IGNvcmUuUG9pbnQoKSxcbiAgICBDYW52YXNUaW50ZXIgPSByZXF1aXJlKCcuLi9jb3JlL3JlbmRlcmVycy9jYW52YXMvdXRpbHMvQ2FudmFzVGludGVyJyk7XG5cbi8qKlxuICogQSB0aWxpbmcgc3ByaXRlIGlzIGEgZmFzdCB3YXkgb2YgcmVuZGVyaW5nIGEgdGlsaW5nIGltYWdlXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLlNwcml0ZVxuICogQG1lbWJlcm9mIFBJWEkuZXh0cmFzXG4gKiBAcGFyYW0gdGV4dHVyZSB7VGV4dHVyZX0gdGhlIHRleHR1cmUgb2YgdGhlIHRpbGluZyBzcHJpdGVcbiAqIEBwYXJhbSB3aWR0aCB7bnVtYmVyfSAgdGhlIHdpZHRoIG9mIHRoZSB0aWxpbmcgc3ByaXRlXG4gKiBAcGFyYW0gaGVpZ2h0IHtudW1iZXJ9IHRoZSBoZWlnaHQgb2YgdGhlIHRpbGluZyBzcHJpdGVcbiAqL1xuZnVuY3Rpb24gVGlsaW5nU3ByaXRlKHRleHR1cmUsIHdpZHRoLCBoZWlnaHQpXG57XG4gICAgY29yZS5TcHJpdGUuY2FsbCh0aGlzLCB0ZXh0dXJlKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBzY2FsaW5nIG9mIHRoZSBpbWFnZSB0aGF0IGlzIGJlaW5nIHRpbGVkXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlBvaW50fVxuICAgICAqL1xuICAgIHRoaXMudGlsZVNjYWxlID0gbmV3IGNvcmUuUG9pbnQoMSwxKTtcblxuXG4gICAgLyoqXG4gICAgICogVGhlIG9mZnNldCBwb3NpdGlvbiBvZiB0aGUgaW1hZ2UgdGhhdCBpcyBiZWluZyB0aWxlZFxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5Qb2ludH1cbiAgICAgKi9cbiAgICB0aGlzLnRpbGVQb3NpdGlvbiA9IG5ldyBjb3JlLlBvaW50KDAsMCk7XG5cbiAgICAvLy8vLyBwcml2YXRlXG5cbiAgICAvKipcbiAgICAgKiBUaGUgd2l0aCBvZiB0aGUgdGlsaW5nIHNwcml0ZVxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fd2lkdGggPSB3aWR0aCB8fCAxMDA7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgaGVpZ2h0IG9mIHRoZSB0aWxpbmcgc3ByaXRlXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9oZWlnaHQgPSBoZWlnaHQgfHwgMTAwO1xuXG4gICAgLyoqXG4gICAgICogQW4gaW50ZXJuYWwgV2ViR0wgVVYgY2FjaGUuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlRleHR1cmVVdnN9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl91dnMgPSBuZXcgY29yZS5UZXh0dXJlVXZzKCk7XG5cbiAgICB0aGlzLl9jYW52YXNQYXR0ZXJuID0gbnVsbDtcblxuICAgIC8vVE9ETyBtb3ZlLi5cbiAgICB0aGlzLnNoYWRlciA9IG5ldyBjb3JlLkFic3RyYWN0RmlsdGVyKFxuXG4gICAgICBbXG4gICAgICAgICdwcmVjaXNpb24gbG93cCBmbG9hdDsnLFxuICAgICAgICAnYXR0cmlidXRlIHZlYzIgYVZlcnRleFBvc2l0aW9uOycsXG4gICAgICAgICdhdHRyaWJ1dGUgdmVjMiBhVGV4dHVyZUNvb3JkOycsXG4gICAgICAgICdhdHRyaWJ1dGUgdmVjNCBhQ29sb3I7JyxcblxuICAgICAgICAndW5pZm9ybSBtYXQzIHByb2plY3Rpb25NYXRyaXg7JyxcblxuICAgICAgICAndW5pZm9ybSB2ZWM0IHVGcmFtZTsnLFxuICAgICAgICAndW5pZm9ybSB2ZWM0IHVUcmFuc2Zvcm07JyxcblxuICAgICAgICAndmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7JyxcbiAgICAgICAgJ3ZhcnlpbmcgdmVjNCB2Q29sb3I7JyxcblxuICAgICAgICAndm9pZCBtYWluKHZvaWQpeycsXG4gICAgICAgICcgICBnbF9Qb3NpdGlvbiA9IHZlYzQoKHByb2plY3Rpb25NYXRyaXggKiB2ZWMzKGFWZXJ0ZXhQb3NpdGlvbiwgMS4wKSkueHksIDAuMCwgMS4wKTsnLFxuXG4gICAgICAgICcgICB2ZWMyIGNvb3JkID0gYVRleHR1cmVDb29yZDsnLFxuICAgICAgICAnICAgY29vcmQgLT0gdVRyYW5zZm9ybS54eTsnLFxuICAgICAgICAnICAgY29vcmQgLz0gdVRyYW5zZm9ybS56dzsnLFxuICAgICAgICAnICAgdlRleHR1cmVDb29yZCA9IGNvb3JkOycsXG5cbiAgICAgICAgJyAgIHZDb2xvciA9IHZlYzQoYUNvbG9yLnJnYiAqIGFDb2xvci5hLCBhQ29sb3IuYSk7JyxcbiAgICAgICAgJ30nXG4gICAgICBdLmpvaW4oJ1xcbicpLFxuICAgICAgW1xuICAgICAgICAncHJlY2lzaW9uIGxvd3AgZmxvYXQ7JyxcblxuICAgICAgICAndmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7JyxcbiAgICAgICAgJ3ZhcnlpbmcgdmVjNCB2Q29sb3I7JyxcblxuICAgICAgICAndW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXI7JyxcbiAgICAgICAgJ3VuaWZvcm0gdmVjNCB1RnJhbWU7JyxcbiAgICAgICAgJ3VuaWZvcm0gdmVjMiB1UGl4ZWxTaXplOycsXG5cbiAgICAgICAgJ3ZvaWQgbWFpbih2b2lkKXsnLFxuXG4gICAgICAgICcgICB2ZWMyIGNvb3JkID0gbW9kKHZUZXh0dXJlQ29vcmQsIHVGcmFtZS56dyk7JyxcbiAgICAgICAgJyAgIGNvb3JkID0gY2xhbXAoY29vcmQsIHVQaXhlbFNpemUsIHVGcmFtZS56dyAtIHVQaXhlbFNpemUpOycsXG4gICAgICAgICcgICBjb29yZCArPSB1RnJhbWUueHk7JyxcblxuICAgICAgICAnICAgZ2xfRnJhZ0NvbG9yID0gIHRleHR1cmUyRCh1U2FtcGxlciwgY29vcmQpICogdkNvbG9yIDsnLFxuICAgICAgICAnfSdcbiAgICAgIF0uam9pbignXFxuJyksXG5cbiAgICAgICAgICAgIC8vIHNldCB0aGUgdW5pZm9ybXNcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB1RnJhbWU6IHsgdHlwZTogJzRmdicsIHZhbHVlOiBbMCwwLDEsMV0gfSxcbiAgICAgICAgICAgICAgICB1VHJhbnNmb3JtOiB7IHR5cGU6ICc0ZnYnLCB2YWx1ZTogWzAsMCwxLDFdIH0sXG4gICAgICAgICAgICAgICAgdVBpeGVsU2l6ZSA6IHsgdHlwZSA6ICcyZnYnLCB2YWx1ZTogWzEsIDFdfVxuICAgICAgICAgICAgfVxuICAgICAgKTtcbn1cblxuVGlsaW5nU3ByaXRlLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoY29yZS5TcHJpdGUucHJvdG90eXBlKTtcblRpbGluZ1Nwcml0ZS5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBUaWxpbmdTcHJpdGU7XG5tb2R1bGUuZXhwb3J0cyA9IFRpbGluZ1Nwcml0ZTtcblxuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhUaWxpbmdTcHJpdGUucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogVGhlIHdpZHRoIG9mIHRoZSBzcHJpdGUsIHNldHRpbmcgdGhpcyB3aWxsIGFjdHVhbGx5IG1vZGlmeSB0aGUgc2NhbGUgdG8gYWNoaWV2ZSB0aGUgdmFsdWUgc2V0XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZXh0cmFzLlRpbGluZ1Nwcml0ZSNcbiAgICAgKi9cbiAgICB3aWR0aDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl93aWR0aDtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuX3dpZHRoID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVGhlIGhlaWdodCBvZiB0aGUgVGlsaW5nU3ByaXRlLCBzZXR0aW5nIHRoaXMgd2lsbCBhY3R1YWxseSBtb2RpZnkgdGhlIHNjYWxlIHRvIGFjaGlldmUgdGhlIHZhbHVlIHNldFxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmV4dHJhcy5UaWxpbmdTcHJpdGUjXG4gICAgICovXG4gICAgaGVpZ2h0OiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2hlaWdodDtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuX2hlaWdodCA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfVxufSk7XG5cblRpbGluZ1Nwcml0ZS5wcm90b3R5cGUuX29uVGV4dHVyZVVwZGF0ZSA9IGZ1bmN0aW9uICgpXG57XG4gICAgcmV0dXJuO1xufTtcblxuXG4vKipcbiAqIFJlbmRlcnMgdGhlIG9iamVjdCB1c2luZyB0aGUgV2ViR0wgcmVuZGVyZXJcbiAqXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcn1cbiAqIEBwcml2YXRlXG4gKi9cblRpbGluZ1Nwcml0ZS5wcm90b3R5cGUuX3JlbmRlcldlYkdMID0gZnVuY3Rpb24gKHJlbmRlcmVyKVxue1xuICAgIC8vIHR3ZWFrIG91ciB0ZXh0dXJlIHRlbXBvcmFyaWx5Li5cbiAgICB2YXIgdGV4dHVyZSA9IHRoaXMuX3RleHR1cmU7XG5cbiAgICBpZighdGV4dHVyZSB8fCAhdGV4dHVyZS5fdXZzKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHZhciB0ZW1wVXZzID0gdGV4dHVyZS5fdXZzLFxuICAgICAgICB0ZW1wV2lkdGggPSB0ZXh0dXJlLl9mcmFtZS53aWR0aCxcbiAgICAgICAgdGVtcEhlaWdodCA9IHRleHR1cmUuX2ZyYW1lLmhlaWdodCxcbiAgICAgICAgdHcgPSB0ZXh0dXJlLmJhc2VUZXh0dXJlLndpZHRoLFxuICAgICAgICB0aCA9IHRleHR1cmUuYmFzZVRleHR1cmUuaGVpZ2h0O1xuXG4gICAgdGV4dHVyZS5fdXZzID0gdGhpcy5fdXZzO1xuICAgIHRleHR1cmUuX2ZyYW1lLndpZHRoID0gdGhpcy53aWR0aDtcbiAgICB0ZXh0dXJlLl9mcmFtZS5oZWlnaHQgPSB0aGlzLmhlaWdodDtcblxuICAgIHRoaXMuc2hhZGVyLnVuaWZvcm1zLnVQaXhlbFNpemUudmFsdWVbMF0gPSAxLjAvdHc7XG4gICAgdGhpcy5zaGFkZXIudW5pZm9ybXMudVBpeGVsU2l6ZS52YWx1ZVsxXSA9IDEuMC90aDtcblxuICAgIHRoaXMuc2hhZGVyLnVuaWZvcm1zLnVGcmFtZS52YWx1ZVswXSA9IHRlbXBVdnMueDA7XG4gICAgdGhpcy5zaGFkZXIudW5pZm9ybXMudUZyYW1lLnZhbHVlWzFdID0gdGVtcFV2cy55MDtcbiAgICB0aGlzLnNoYWRlci51bmlmb3Jtcy51RnJhbWUudmFsdWVbMl0gPSB0ZW1wVXZzLngxIC0gdGVtcFV2cy54MDtcbiAgICB0aGlzLnNoYWRlci51bmlmb3Jtcy51RnJhbWUudmFsdWVbM10gPSB0ZW1wVXZzLnkyIC0gdGVtcFV2cy55MDtcblxuICAgIHRoaXMuc2hhZGVyLnVuaWZvcm1zLnVUcmFuc2Zvcm0udmFsdWVbMF0gPSAodGhpcy50aWxlUG9zaXRpb24ueCAlICh0ZW1wV2lkdGggKiB0aGlzLnRpbGVTY2FsZS54KSkgLyB0aGlzLl93aWR0aDtcbiAgICB0aGlzLnNoYWRlci51bmlmb3Jtcy51VHJhbnNmb3JtLnZhbHVlWzFdID0gKHRoaXMudGlsZVBvc2l0aW9uLnkgJSAodGVtcEhlaWdodCAqIHRoaXMudGlsZVNjYWxlLnkpKSAvIHRoaXMuX2hlaWdodDtcbiAgICB0aGlzLnNoYWRlci51bmlmb3Jtcy51VHJhbnNmb3JtLnZhbHVlWzJdID0gKCB0dyAvIHRoaXMuX3dpZHRoICkgKiB0aGlzLnRpbGVTY2FsZS54O1xuICAgIHRoaXMuc2hhZGVyLnVuaWZvcm1zLnVUcmFuc2Zvcm0udmFsdWVbM10gPSAoIHRoIC8gdGhpcy5faGVpZ2h0ICkgKiB0aGlzLnRpbGVTY2FsZS55O1xuXG4gICAgcmVuZGVyZXIuc2V0T2JqZWN0UmVuZGVyZXIocmVuZGVyZXIucGx1Z2lucy5zcHJpdGUpO1xuICAgIHJlbmRlcmVyLnBsdWdpbnMuc3ByaXRlLnJlbmRlcih0aGlzKTtcblxuICAgIHRleHR1cmUuX3V2cyA9IHRlbXBVdnM7XG4gICAgdGV4dHVyZS5fZnJhbWUud2lkdGggPSB0ZW1wV2lkdGg7XG4gICAgdGV4dHVyZS5fZnJhbWUuaGVpZ2h0ID0gdGVtcEhlaWdodDtcbn07XG5cbi8qKlxuICogUmVuZGVycyB0aGUgb2JqZWN0IHVzaW5nIHRoZSBDYW52YXMgcmVuZGVyZXJcbiAqXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuQ2FudmFzUmVuZGVyZXJ9IGEgcmVmZXJlbmNlIHRvIHRoZSBjYW52YXMgcmVuZGVyZXJcbiAqIEBwcml2YXRlXG4gKi9cblRpbGluZ1Nwcml0ZS5wcm90b3R5cGUuX3JlbmRlckNhbnZhcyA9IGZ1bmN0aW9uIChyZW5kZXJlcilcbntcbiAgICB2YXIgdGV4dHVyZSA9IHRoaXMuX3RleHR1cmU7XG5cbiAgICBpZiAoIXRleHR1cmUuYmFzZVRleHR1cmUuaGFzTG9hZGVkKVxuICAgIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB2YXIgY29udGV4dCA9IHJlbmRlcmVyLmNvbnRleHQsXG4gICAgICAgIHRyYW5zZm9ybSA9IHRoaXMud29ybGRUcmFuc2Zvcm0sXG4gICAgICAgIHJlc29sdXRpb24gPSByZW5kZXJlci5yZXNvbHV0aW9uLFxuICAgICAgICBiYXNlVGV4dHVyZSA9IHRleHR1cmUuYmFzZVRleHR1cmUsXG4gICAgICAgIG1vZFggPSAodGhpcy50aWxlUG9zaXRpb24ueCAvIHRoaXMudGlsZVNjYWxlLngpICUgdGV4dHVyZS5fZnJhbWUud2lkdGgsXG4gICAgICAgIG1vZFkgPSAodGhpcy50aWxlUG9zaXRpb24ueSAvIHRoaXMudGlsZVNjYWxlLnkpICUgdGV4dHVyZS5fZnJhbWUuaGVpZ2h0O1xuXG4gICAgLy8gY3JlYXRlIGEgbmljZSBzaGlueSBwYXR0ZXJuIVxuICAgIC8vIFRPRE8gdGhpcyBuZWVkcyB0byBiZSByZWZyZXNoZWQgaWYgdGV4dHVyZSBjaGFuZ2VzLi5cbiAgICBpZighdGhpcy5fY2FudmFzUGF0dGVybilcbiAgICB7XG4gICAgICAgIC8vIGN1dCBhbiBvYmplY3QgZnJvbSBhIHNwcml0ZXNoZWV0Li5cbiAgICAgICAgdmFyIHRlbXBDYW52YXMgPSBuZXcgY29yZS5DYW52YXNCdWZmZXIodGV4dHVyZS5fZnJhbWUud2lkdGgsIHRleHR1cmUuX2ZyYW1lLmhlaWdodCk7XG5cbiAgICAgICAgLy8gVGludCB0aGUgdGlsaW5nIHNwcml0ZVxuICAgICAgICBpZiAodGhpcy50aW50ICE9PSAweEZGRkZGRilcbiAgICAgICAge1xuICAgICAgICAgICAgaWYgKHRoaXMuY2FjaGVkVGludCAhPT0gdGhpcy50aW50KVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHRoaXMuY2FjaGVkVGludCA9IHRoaXMudGludDtcblxuICAgICAgICAgICAgICAgIHRoaXMudGludGVkVGV4dHVyZSA9IENhbnZhc1RpbnRlci5nZXRUaW50ZWRUZXh0dXJlKHRoaXMsIHRoaXMudGludCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0ZW1wQ2FudmFzLmNvbnRleHQuZHJhd0ltYWdlKHRoaXMudGludGVkVGV4dHVyZSwgMCwgMCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgICB0ZW1wQ2FudmFzLmNvbnRleHQuZHJhd0ltYWdlKGJhc2VUZXh0dXJlLnNvdXJjZSwgLXRleHR1cmUuX2ZyYW1lLngsIC10ZXh0dXJlLl9mcmFtZS55KTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9jYW52YXNQYXR0ZXJuID0gdGVtcENhbnZhcy5jb250ZXh0LmNyZWF0ZVBhdHRlcm4oIHRlbXBDYW52YXMuY2FudmFzLCAncmVwZWF0JyApO1xuICAgIH1cblxuICAgIC8vIHNldCBjb250ZXh0IHN0YXRlLi5cbiAgICBjb250ZXh0Lmdsb2JhbEFscGhhID0gdGhpcy53b3JsZEFscGhhO1xuICAgIGNvbnRleHQuc2V0VHJhbnNmb3JtKHRyYW5zZm9ybS5hICogcmVzb2x1dGlvbixcbiAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtLmIgKiByZXNvbHV0aW9uLFxuICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2Zvcm0uYyAqIHJlc29sdXRpb24sXG4gICAgICAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybS5kICogcmVzb2x1dGlvbixcbiAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtLnR4ICogcmVzb2x1dGlvbixcbiAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtLnR5ICogcmVzb2x1dGlvbik7XG5cbiAgICAvLyBUT0RPIC0gdGhpcyBzaG91bGQgYmUgcm9sbGVkIGludG8gdGhlIHNldFRyYW5zZm9ybSBhYm92ZS4uXG4gICAgY29udGV4dC5zY2FsZSh0aGlzLnRpbGVTY2FsZS54LHRoaXMudGlsZVNjYWxlLnkpO1xuXG4gICAgY29udGV4dC50cmFuc2xhdGUobW9kWCArICh0aGlzLmFuY2hvci54ICogLXRoaXMuX3dpZHRoICksXG4gICAgICAgICAgICAgICAgICAgICAgbW9kWSArICh0aGlzLmFuY2hvci55ICogLXRoaXMuX2hlaWdodCkpO1xuXG4gICAgLy8gY2hlY2sgYmxlbmQgbW9kZVxuICAgIHZhciBjb21wb3NpdGVPcGVyYXRpb24gPSByZW5kZXJlci5ibGVuZE1vZGVzW3RoaXMuYmxlbmRNb2RlXTtcbiAgICBpZiAoY29tcG9zaXRlT3BlcmF0aW9uICE9PSByZW5kZXJlci5jb250ZXh0Lmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbilcbiAgICB7XG4gICAgICAgIGNvbnRleHQuZ2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uID0gY29tcG9zaXRlT3BlcmF0aW9uO1xuICAgIH1cblxuICAgIC8vIGZpbGwgdGhlIHBhdHRlcm4hXG4gICAgY29udGV4dC5maWxsU3R5bGUgPSB0aGlzLl9jYW52YXNQYXR0ZXJuO1xuICAgIGNvbnRleHQuZmlsbFJlY3QoLW1vZFgsXG4gICAgICAgICAgICAgICAgICAgICAtbW9kWSxcbiAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3dpZHRoIC8gdGhpcy50aWxlU2NhbGUueCxcbiAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2hlaWdodCAvIHRoaXMudGlsZVNjYWxlLnkpO1xuXG5cbiAgICAvL1RPRE8gLSBwcmV0dHkgc3VyZSB0aGlzIGNhbiBiZSBkZWxldGVkLi4uXG4gICAgLy9jb250ZXh0LnRyYW5zbGF0ZSgtdGhpcy50aWxlUG9zaXRpb24ueCArICh0aGlzLmFuY2hvci54ICogdGhpcy5fd2lkdGgpLCAtdGhpcy50aWxlUG9zaXRpb24ueSArICh0aGlzLmFuY2hvci55ICogdGhpcy5faGVpZ2h0KSk7XG4gICAgLy9jb250ZXh0LnNjYWxlKDEgLyB0aGlzLnRpbGVTY2FsZS54LCAxIC8gdGhpcy50aWxlU2NhbGUueSk7XG59O1xuXG5cbi8qKlxuICogUmV0dXJucyB0aGUgZnJhbWluZyByZWN0YW5nbGUgb2YgdGhlIHNwcml0ZSBhcyBhIFJlY3RhbmdsZSBvYmplY3RcbipcbiAqIEByZXR1cm4ge1BJWEkuUmVjdGFuZ2xlfSB0aGUgZnJhbWluZyByZWN0YW5nbGVcbiAqL1xuVGlsaW5nU3ByaXRlLnByb3RvdHlwZS5nZXRCb3VuZHMgPSBmdW5jdGlvbiAoKVxue1xuICAgIHZhciB3aWR0aCA9IHRoaXMuX3dpZHRoO1xuICAgIHZhciBoZWlnaHQgPSB0aGlzLl9oZWlnaHQ7XG5cbiAgICB2YXIgdzAgPSB3aWR0aCAqICgxLXRoaXMuYW5jaG9yLngpO1xuICAgIHZhciB3MSA9IHdpZHRoICogLXRoaXMuYW5jaG9yLng7XG5cbiAgICB2YXIgaDAgPSBoZWlnaHQgKiAoMS10aGlzLmFuY2hvci55KTtcbiAgICB2YXIgaDEgPSBoZWlnaHQgKiAtdGhpcy5hbmNob3IueTtcblxuICAgIHZhciB3b3JsZFRyYW5zZm9ybSA9IHRoaXMud29ybGRUcmFuc2Zvcm07XG5cbiAgICB2YXIgYSA9IHdvcmxkVHJhbnNmb3JtLmE7XG4gICAgdmFyIGIgPSB3b3JsZFRyYW5zZm9ybS5iO1xuICAgIHZhciBjID0gd29ybGRUcmFuc2Zvcm0uYztcbiAgICB2YXIgZCA9IHdvcmxkVHJhbnNmb3JtLmQ7XG4gICAgdmFyIHR4ID0gd29ybGRUcmFuc2Zvcm0udHg7XG4gICAgdmFyIHR5ID0gd29ybGRUcmFuc2Zvcm0udHk7XG5cbiAgICB2YXIgeDEgPSBhICogdzEgKyBjICogaDEgKyB0eDtcbiAgICB2YXIgeTEgPSBkICogaDEgKyBiICogdzEgKyB0eTtcblxuICAgIHZhciB4MiA9IGEgKiB3MCArIGMgKiBoMSArIHR4O1xuICAgIHZhciB5MiA9IGQgKiBoMSArIGIgKiB3MCArIHR5O1xuXG4gICAgdmFyIHgzID0gYSAqIHcwICsgYyAqIGgwICsgdHg7XG4gICAgdmFyIHkzID0gZCAqIGgwICsgYiAqIHcwICsgdHk7XG5cbiAgICB2YXIgeDQgPSAgYSAqIHcxICsgYyAqIGgwICsgdHg7XG4gICAgdmFyIHk0ID0gIGQgKiBoMCArIGIgKiB3MSArIHR5O1xuXG4gICAgdmFyIG1pblgsXG4gICAgICAgIG1heFgsXG4gICAgICAgIG1pblksXG4gICAgICAgIG1heFk7XG5cbiAgICBtaW5YID0geDE7XG4gICAgbWluWCA9IHgyIDwgbWluWCA/IHgyIDogbWluWDtcbiAgICBtaW5YID0geDMgPCBtaW5YID8geDMgOiBtaW5YO1xuICAgIG1pblggPSB4NCA8IG1pblggPyB4NCA6IG1pblg7XG5cbiAgICBtaW5ZID0geTE7XG4gICAgbWluWSA9IHkyIDwgbWluWSA/IHkyIDogbWluWTtcbiAgICBtaW5ZID0geTMgPCBtaW5ZID8geTMgOiBtaW5ZO1xuICAgIG1pblkgPSB5NCA8IG1pblkgPyB5NCA6IG1pblk7XG5cbiAgICBtYXhYID0geDE7XG4gICAgbWF4WCA9IHgyID4gbWF4WCA/IHgyIDogbWF4WDtcbiAgICBtYXhYID0geDMgPiBtYXhYID8geDMgOiBtYXhYO1xuICAgIG1heFggPSB4NCA+IG1heFggPyB4NCA6IG1heFg7XG5cbiAgICBtYXhZID0geTE7XG4gICAgbWF4WSA9IHkyID4gbWF4WSA/IHkyIDogbWF4WTtcbiAgICBtYXhZID0geTMgPiBtYXhZID8geTMgOiBtYXhZO1xuICAgIG1heFkgPSB5NCA+IG1heFkgPyB5NCA6IG1heFk7XG5cbiAgICB2YXIgYm91bmRzID0gdGhpcy5fYm91bmRzO1xuXG4gICAgYm91bmRzLnggPSBtaW5YO1xuICAgIGJvdW5kcy53aWR0aCA9IG1heFggLSBtaW5YO1xuXG4gICAgYm91bmRzLnkgPSBtaW5ZO1xuICAgIGJvdW5kcy5oZWlnaHQgPSBtYXhZIC0gbWluWTtcblxuICAgIC8vIHN0b3JlIGEgcmVmZXJlbmNlIHNvIHRoYXQgaWYgdGhpcyBmdW5jdGlvbiBnZXRzIGNhbGxlZCBhZ2FpbiBpbiB0aGUgcmVuZGVyIGN5Y2xlIHdlIGRvIG5vdCBoYXZlIHRvIHJlY2FsY3VsYXRlXG4gICAgdGhpcy5fY3VycmVudEJvdW5kcyA9IGJvdW5kcztcblxuICAgIHJldHVybiBib3VuZHM7XG59O1xuXG4vKipcbiAqIENoZWNrcyBpZiBhIHBvaW50IGlzIGluc2lkZSB0aGlzIHRpbGluZyBzcHJpdGVcbiAqIEBwYXJhbSBwb2ludCB7UElYSS5Qb2ludH0gdGhlIHBvaW50IHRvIGNoZWNrXG4gKi9cblRpbGluZ1Nwcml0ZS5wcm90b3R5cGUuY29udGFpbnNQb2ludCA9IGZ1bmN0aW9uKCBwb2ludCApXG57XG4gICAgdGhpcy53b3JsZFRyYW5zZm9ybS5hcHBseUludmVyc2UocG9pbnQsICB0ZW1wUG9pbnQpO1xuXG4gICAgdmFyIHdpZHRoID0gdGhpcy5fd2lkdGg7XG4gICAgdmFyIGhlaWdodCA9IHRoaXMuX2hlaWdodDtcbiAgICB2YXIgeDEgPSAtd2lkdGggKiB0aGlzLmFuY2hvci54O1xuICAgIHZhciB5MTtcblxuICAgIGlmICggdGVtcFBvaW50LnggPiB4MSAmJiB0ZW1wUG9pbnQueCA8IHgxICsgd2lkdGggKVxuICAgIHtcbiAgICAgICAgeTEgPSAtaGVpZ2h0ICogdGhpcy5hbmNob3IueTtcblxuICAgICAgICBpZiAoIHRlbXBQb2ludC55ID4geTEgJiYgdGVtcFBvaW50LnkgPCB5MSArIGhlaWdodCApXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xufTtcblxuLyoqXG4gKiBEZXN0cm95cyB0aGlzIHRpbGluZyBzcHJpdGVcbiAqXG4gKi9cblRpbGluZ1Nwcml0ZS5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uICgpIHtcbiAgICBjb3JlLlNwcml0ZS5wcm90b3R5cGUuZGVzdHJveS5jYWxsKHRoaXMpO1xuXG4gICAgdGhpcy50aWxlU2NhbGUgPSBudWxsO1xuICAgIHRoaXMuX3RpbGVTY2FsZU9mZnNldCA9IG51bGw7XG4gICAgdGhpcy50aWxlUG9zaXRpb24gPSBudWxsO1xuXG4gICAgdGhpcy5fdXZzID0gbnVsbDtcbn07XG5cbi8qKlxuICogSGVscGVyIGZ1bmN0aW9uIHRoYXQgY3JlYXRlcyBhIHRpbGluZyBzcHJpdGUgdGhhdCB3aWxsIHVzZSBhIHRleHR1cmUgZnJvbSB0aGUgVGV4dHVyZUNhY2hlIGJhc2VkIG9uIHRoZSBmcmFtZUlkXG4gKiBUaGUgZnJhbWUgaWRzIGFyZSBjcmVhdGVkIHdoZW4gYSBUZXh0dXJlIHBhY2tlciBmaWxlIGhhcyBiZWVuIGxvYWRlZFxuICpcbiAqIEBzdGF0aWNcbiAqIEBwYXJhbSBmcmFtZUlkIHtzdHJpbmd9IFRoZSBmcmFtZSBJZCBvZiB0aGUgdGV4dHVyZSBpbiB0aGUgY2FjaGVcbiAqIEByZXR1cm4ge1BJWEkuZXh0cmFzLlRpbGluZ1Nwcml0ZX0gQSBuZXcgVGlsaW5nU3ByaXRlIHVzaW5nIGEgdGV4dHVyZSBmcm9tIHRoZSB0ZXh0dXJlIGNhY2hlIG1hdGNoaW5nIHRoZSBmcmFtZUlkXG4gKiBAcGFyYW0gd2lkdGgge251bWJlcn0gIHRoZSB3aWR0aCBvZiB0aGUgdGlsaW5nIHNwcml0ZVxuICogQHBhcmFtIGhlaWdodCB7bnVtYmVyfSB0aGUgaGVpZ2h0IG9mIHRoZSB0aWxpbmcgc3ByaXRlXG4gKi9cblRpbGluZ1Nwcml0ZS5mcm9tRnJhbWUgPSBmdW5jdGlvbiAoZnJhbWVJZCx3aWR0aCxoZWlnaHQpXG57XG4gICAgdmFyIHRleHR1cmUgPSBjb3JlLnV0aWxzLlRleHR1cmVDYWNoZVtmcmFtZUlkXTtcblxuICAgIGlmICghdGV4dHVyZSlcbiAgICB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignVGhlIGZyYW1lSWQgXCInICsgZnJhbWVJZCArICdcIiBkb2VzIG5vdCBleGlzdCBpbiB0aGUgdGV4dHVyZSBjYWNoZSAnICsgdGhpcyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBUaWxpbmdTcHJpdGUodGV4dHVyZSx3aWR0aCxoZWlnaHQpO1xufTtcblxuLyoqXG4gKiBIZWxwZXIgZnVuY3Rpb24gdGhhdCBjcmVhdGVzIGEgc3ByaXRlIHRoYXQgd2lsbCBjb250YWluIGEgdGV4dHVyZSBiYXNlZCBvbiBhbiBpbWFnZSB1cmxcbiAqIElmIHRoZSBpbWFnZSBpcyBub3QgaW4gdGhlIHRleHR1cmUgY2FjaGUgaXQgd2lsbCBiZSBsb2FkZWRcbiAqXG4gKiBAc3RhdGljXG4gKiBAcGFyYW0gaW1hZ2VJZCB7c3RyaW5nfSBUaGUgaW1hZ2UgdXJsIG9mIHRoZSB0ZXh0dXJlXG4gKiBAcGFyYW0gd2lkdGgge251bWJlcn0gIHRoZSB3aWR0aCBvZiB0aGUgdGlsaW5nIHNwcml0ZVxuICogQHBhcmFtIGhlaWdodCB7bnVtYmVyfSB0aGUgaGVpZ2h0IG9mIHRoZSB0aWxpbmcgc3ByaXRlXG4gKiBAcGFyYW0gW2Nyb3Nzb3JpZ2luPShhdXRvKV0ge2Jvb2xlYW59IGlmIHlvdSB3YW50IHRvIHNwZWNpZnkgdGhlIGNyb3NzLW9yaWdpbiBwYXJhbWV0ZXJcbiAqIEBwYXJhbSBbc2NhbGVNb2RlPVBJWEkuU0NBTEVfTU9ERVMuREVGQVVMVF0ge251bWJlcn0gaWYgeW91IHdhbnQgdG8gc3BlY2lmeSB0aGUgc2NhbGUgbW9kZSwgc2VlIHtAbGluayBQSVhJLlNDQUxFX01PREVTfSBmb3IgcG9zc2libGUgdmFsdWVzXG4gKiBAcmV0dXJuIHtQSVhJLmV4dHJhcy5UaWxpbmdTcHJpdGV9IEEgbmV3IFRpbGluZ1Nwcml0ZSB1c2luZyBhIHRleHR1cmUgZnJvbSB0aGUgdGV4dHVyZSBjYWNoZSBtYXRjaGluZyB0aGUgaW1hZ2UgaWRcbiAqL1xuVGlsaW5nU3ByaXRlLmZyb21JbWFnZSA9IGZ1bmN0aW9uIChpbWFnZUlkLCB3aWR0aCwgaGVpZ2h0LCBjcm9zc29yaWdpbiwgc2NhbGVNb2RlKVxue1xuICAgIHJldHVybiBuZXcgVGlsaW5nU3ByaXRlKGNvcmUuVGV4dHVyZS5mcm9tSW1hZ2UoaW1hZ2VJZCwgY3Jvc3NvcmlnaW4sIHNjYWxlTW9kZSksd2lkdGgsaGVpZ2h0KTtcbn07XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uL2NvcmUnKSxcbiAgICBEaXNwbGF5T2JqZWN0ID0gY29yZS5EaXNwbGF5T2JqZWN0LFxuICAgIF90ZW1wTWF0cml4ID0gbmV3IGNvcmUuTWF0cml4KCk7XG5cbkRpc3BsYXlPYmplY3QucHJvdG90eXBlLl9jYWNoZUFzQml0bWFwID0gZmFsc2U7XG5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS5fb3JpZ2luYWxSZW5kZXJXZWJHTCA9IG51bGw7XG5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS5fb3JpZ2luYWxSZW5kZXJDYW52YXMgPSBudWxsO1xuXG5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS5fb3JpZ2luYWxVcGRhdGVUcmFuc2Zvcm0gPSBudWxsO1xuRGlzcGxheU9iamVjdC5wcm90b3R5cGUuX29yaWdpbmFsSGl0VGVzdCA9IG51bGw7XG5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS5fb3JpZ2luYWxEZXN0cm95ID0gbnVsbDtcbkRpc3BsYXlPYmplY3QucHJvdG90eXBlLl9jYWNoZWRTcHJpdGUgPSBudWxsO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhEaXNwbGF5T2JqZWN0LnByb3RvdHlwZSwge1xuXG4gICAgLyoqXG4gICAgICogU2V0IHRoaXMgdG8gdHJ1ZSBpZiB5b3Ugd2FudCB0aGlzIGRpc3BsYXkgb2JqZWN0IHRvIGJlIGNhY2hlZCBhcyBhIGJpdG1hcC5cbiAgICAgKiBUaGlzIGJhc2ljYWxseSB0YWtlcyBhIHNuYXAgc2hvdCBvZiB0aGUgZGlzcGxheSBvYmplY3QgYXMgaXQgaXMgYXQgdGhhdCBtb21lbnQuIEl0IGNhbiBwcm92aWRlIGEgcGVyZm9ybWFuY2UgYmVuZWZpdCBmb3IgY29tcGxleCBzdGF0aWMgZGlzcGxheU9iamVjdHMuXG4gICAgICogVG8gcmVtb3ZlIHNpbXBseSBzZXQgdGhpcyBwcm9wZXJ0eSB0byAnZmFsc2UnXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLkRpc3BsYXlPYmplY3QjXG4gICAgICovXG4gICAgY2FjaGVBc0JpdG1hcDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9jYWNoZUFzQml0bWFwO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgaWYgKHRoaXMuX2NhY2hlQXNCaXRtYXAgPT09IHZhbHVlKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5fY2FjaGVBc0JpdG1hcCA9IHZhbHVlO1xuXG4gICAgICAgICAgICBpZiAodmFsdWUpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdGhpcy5fb3JpZ2luYWxSZW5kZXJXZWJHTCA9IHRoaXMucmVuZGVyV2ViR0w7XG4gICAgICAgICAgICAgICAgdGhpcy5fb3JpZ2luYWxSZW5kZXJDYW52YXMgPSB0aGlzLnJlbmRlckNhbnZhcztcblxuICAgICAgICAgICAgICAgIHRoaXMuX29yaWdpbmFsVXBkYXRlVHJhbnNmb3JtID0gdGhpcy51cGRhdGVUcmFuc2Zvcm07XG4gICAgICAgICAgICAgICAgdGhpcy5fb3JpZ2luYWxHZXRCb3VuZHMgPSB0aGlzLmdldEJvdW5kcztcblxuICAgICAgICAgICAgICAgIHRoaXMuX29yaWdpbmFsRGVzdHJveSA9IHRoaXMuZGVzdHJveTtcblxuICAgICAgICAgICAgICAgIHRoaXMuX29yaWdpbmFsQ29udGFpbnNQb2ludCA9IHRoaXMuY29udGFpbnNQb2ludDtcblxuICAgICAgICAgICAgICAgIHRoaXMucmVuZGVyV2ViR0wgPSB0aGlzLl9yZW5kZXJDYWNoZWRXZWJHTDtcbiAgICAgICAgICAgICAgICB0aGlzLnJlbmRlckNhbnZhcyA9IHRoaXMuX3JlbmRlckNhY2hlZENhbnZhcztcblxuICAgICAgICAgICAgICAgIHRoaXMuZGVzdHJveSA9IHRoaXMuX2NhY2hlQXNCaXRtYXBEZXN0cm95O1xuXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuX2NhY2hlZFNwcml0ZSlcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2Rlc3Ryb3lDYWNoZWREaXNwbGF5T2JqZWN0KCk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgdGhpcy5yZW5kZXJXZWJHTCA9IHRoaXMuX29yaWdpbmFsUmVuZGVyV2ViR0w7XG4gICAgICAgICAgICAgICAgdGhpcy5yZW5kZXJDYW52YXMgPSB0aGlzLl9vcmlnaW5hbFJlbmRlckNhbnZhcztcbiAgICAgICAgICAgICAgICB0aGlzLmdldEJvdW5kcyA9IHRoaXMuX29yaWdpbmFsR2V0Qm91bmRzO1xuXG4gICAgICAgICAgICAgICAgdGhpcy5kZXN0cm95ID0gdGhpcy5fb3JpZ2luYWxEZXN0cm95O1xuXG4gICAgICAgICAgICAgICAgdGhpcy51cGRhdGVUcmFuc2Zvcm0gPSB0aGlzLl9vcmlnaW5hbFVwZGF0ZVRyYW5zZm9ybTtcbiAgICAgICAgICAgICAgICB0aGlzLmNvbnRhaW5zUG9pbnQgPSB0aGlzLl9vcmlnaW5hbENvbnRhaW5zUG9pbnQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG59KTtcbi8qKlxuKiBSZW5kZXJzIGEgY2FjaGVkIHZlcnNpb24gb2YgdGhlIHNwcml0ZSB3aXRoIFdlYkdMXG4qXG4qIEBwYXJhbSByZW5kZXJlciB7UElYSS5XZWJHTFJlbmRlcmVyfSB0aGUgV2ViR0wgcmVuZGVyZXJcbiogQHByaXZhdGVcbiovXG5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS5fcmVuZGVyQ2FjaGVkV2ViR0wgPSBmdW5jdGlvbiAocmVuZGVyZXIpXG57XG4gICAgaWYgKCF0aGlzLnZpc2libGUgfHwgdGhpcy53b3JsZEFscGhhIDw9IDAgfHwgIXRoaXMucmVuZGVyYWJsZSlcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLl9pbml0Q2FjaGVkRGlzcGxheU9iamVjdCggcmVuZGVyZXIgKTtcblxuICAgIHRoaXMuX2NhY2hlZFNwcml0ZS53b3JsZEFscGhhID0gdGhpcy53b3JsZEFscGhhO1xuXG4gICAgcmVuZGVyZXIuc2V0T2JqZWN0UmVuZGVyZXIocmVuZGVyZXIucGx1Z2lucy5zcHJpdGUpO1xuICAgIHJlbmRlcmVyLnBsdWdpbnMuc3ByaXRlLnJlbmRlciggdGhpcy5fY2FjaGVkU3ByaXRlICk7XG59O1xuXG4vKipcbiogUHJlcGFyZXMgdGhlIFdlYkdMIHJlbmRlcmVyIHRvIGNhY2hlIHRoZSBzcHJpdGVcbipcbiogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLldlYkdMUmVuZGVyZXJ9IHRoZSBXZWJHTCByZW5kZXJlclxuKiBAcHJpdmF0ZVxuKi9cbkRpc3BsYXlPYmplY3QucHJvdG90eXBlLl9pbml0Q2FjaGVkRGlzcGxheU9iamVjdCA9IGZ1bmN0aW9uIChyZW5kZXJlcilcbntcbiAgICBpZih0aGlzLl9jYWNoZWRTcHJpdGUpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gZmlyc3Qgd2UgZmx1c2ggYW55dGhpbmcgbGVmdCBpbiB0aGUgcmVuZGVyZXIgKG90aGVyd2lzZSBpdCB3b3VsZCBnZXQgcmVuZGVyZWQgdG8gdGhlIGNhY2hlZCB0ZXh0dXJlKVxuICAgIHJlbmRlcmVyLmN1cnJlbnRSZW5kZXJlci5mbHVzaCgpO1xuICAgIC8vdGhpcy5maWx0ZXJzPSBbXTtcbiAgICAvLyBuZXh0IHdlIGZpbmQgdGhlIGRpbWVuc2lvbnMgb2YgdGhlIHVudHJhbnNmb3JtZWQgb2JqZWN0XG4gICAgLy8gdGhpcyBmdW5jdGlvbiBhbHNvIGNhbGxzIHVwZGF0ZXRyYW5zZm9ybSBvbiBhbGwgaXRzIGNoaWxkcmVuIGFzIHBhcnQgb2YgdGhlIG1lYXN1cmluZy4gVGhpcyBtZWFucyB3ZSBkb24ndCBuZWVkIHRvIHVwZGF0ZSB0aGUgdHJhbnNmb3JtIGFnYWluIGluIHRoaXMgZnVuY3Rpb25cbiAgICAvLyBUT0RPIHBhc3MgYW4gb2JqZWN0IHRvIGNsb25lIHRvbz8gc2F2ZXMgaGF2aW5nIHRvIGNyZWF0ZSBhIG5ldyBvbmUgZWFjaCB0aW1lIVxuICAgIHZhciBib3VuZHMgPSB0aGlzLmdldExvY2FsQm91bmRzKCkuY2xvbmUoKTtcblxuICAgIC8vIGFkZCBzb21lIHBhZGRpbmchXG4gICAgaWYodGhpcy5fZmlsdGVycylcbiAgICB7XG4gICAgICAgIHZhciBwYWRkaW5nID0gdGhpcy5fZmlsdGVyc1swXS5wYWRkaW5nO1xuICAgICAgICBib3VuZHMueCAtPSBwYWRkaW5nO1xuICAgICAgICBib3VuZHMueSAtPSBwYWRkaW5nO1xuXG4gICAgICAgIGJvdW5kcy53aWR0aCArPSBwYWRkaW5nICogMjtcbiAgICAgICAgYm91bmRzLmhlaWdodCArPSBwYWRkaW5nICogMjtcbiAgICB9XG5cbiAgICAvLyBmb3Igbm93IHdlIGNhY2hlIHRoZSBjdXJyZW50IHJlbmRlclRhcmdldCB0aGF0IHRoZSB3ZWJHTCByZW5kZXJlciBpcyBjdXJyZW50bHkgdXNpbmcuXG4gICAgLy8gdGhpcyBjb3VsZCBiZSBtb3JlIGVsZWdlbnQuLlxuICAgIHZhciBjYWNoZWRSZW5kZXJUYXJnZXQgPSByZW5kZXJlci5jdXJyZW50UmVuZGVyVGFyZ2V0O1xuICAgIC8vIFdlIGFsc28gc3RvcmUgdGhlIGZpbHRlciBzdGFjayAtIEkgd2lsbCBkZWZpbml0ZWx5IGxvb2sgdG8gY2hhbmdlIGhvdyB0aGlzIHdvcmtzIGEgbGl0dGxlIGxhdGVyIGRvd24gdGhlIGxpbmUuXG4gICAgdmFyIHN0YWNrID0gcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5maWx0ZXJTdGFjaztcblxuICAgIC8vIHRoaXMgcmVuZGVyVGV4dHVyZSB3aWxsIGJlIHVzZWQgdG8gc3RvcmUgdGhlIGNhY2hlZCBEaXNwbGF5T2JqZWN0XG4gICAgdmFyIHJlbmRlclRleHR1cmUgPSBuZXcgY29yZS5SZW5kZXJUZXh0dXJlKHJlbmRlcmVyLCBib3VuZHMud2lkdGggfCAwLCBib3VuZHMuaGVpZ2h0IHwgMCk7XG5cbiAgICAvLyBuZWVkIHRvIHNldCAvL1xuICAgIHZhciBtID0gX3RlbXBNYXRyaXg7XG5cbiAgICBtLnR4ID0gLWJvdW5kcy54O1xuICAgIG0udHkgPSAtYm91bmRzLnk7XG5cblxuXG4gICAgLy8gc2V0IGFsbCBwcm9wZXJ0aWVzIHRvIHRoZXJlIG9yaWdpbmFsIHNvIHdlIGNhbiByZW5kZXIgdG8gYSB0ZXh0dXJlXG4gICAgdGhpcy5yZW5kZXJXZWJHTCA9IHRoaXMuX29yaWdpbmFsUmVuZGVyV2ViR0w7XG5cbiAgICByZW5kZXJUZXh0dXJlLnJlbmRlcih0aGlzLCBtLCB0cnVlLCB0cnVlKTtcblxuICAgIC8vIG5vdyByZXN0b3JlIHRoZSBzdGF0ZSBiZSBzZXR0aW5nIHRoZSBuZXcgcHJvcGVydGllc1xuICAgIHJlbmRlcmVyLnNldFJlbmRlclRhcmdldChjYWNoZWRSZW5kZXJUYXJnZXQpO1xuICAgIHJlbmRlcmVyLmZpbHRlck1hbmFnZXIuZmlsdGVyU3RhY2sgPSBzdGFjaztcblxuICAgIHRoaXMucmVuZGVyV2ViR0wgICAgID0gdGhpcy5fcmVuZGVyQ2FjaGVkV2ViR0w7XG4gICAgdGhpcy51cGRhdGVUcmFuc2Zvcm0gPSB0aGlzLmRpc3BsYXlPYmplY3RVcGRhdGVUcmFuc2Zvcm07XG4gICAgdGhpcy5nZXRCb3VuZHMgICAgICAgPSB0aGlzLl9nZXRDYWNoZWRCb3VuZHM7XG5cblxuICAgIC8vIGNyZWF0ZSBvdXIgY2FjaGVkIHNwcml0ZVxuICAgIHRoaXMuX2NhY2hlZFNwcml0ZSA9IG5ldyBjb3JlLlNwcml0ZShyZW5kZXJUZXh0dXJlKTtcbiAgICB0aGlzLl9jYWNoZWRTcHJpdGUud29ybGRUcmFuc2Zvcm0gPSB0aGlzLndvcmxkVHJhbnNmb3JtO1xuICAgIHRoaXMuX2NhY2hlZFNwcml0ZS5hbmNob3IueCA9IC0oIGJvdW5kcy54IC8gYm91bmRzLndpZHRoICk7XG4gICAgdGhpcy5fY2FjaGVkU3ByaXRlLmFuY2hvci55ID0gLSggYm91bmRzLnkgLyBib3VuZHMuaGVpZ2h0ICk7XG5cbiAgICAvLyByZXN0b3JlIHRoZSB0cmFuc2Zvcm0gb2YgdGhlIGNhY2hlZCBzcHJpdGUgdG8gYXZvaWQgdGhlIG5hc3R5IGZsaWNrZXIuLlxuICAgIHRoaXMudXBkYXRlVHJhbnNmb3JtKCk7XG5cbiAgICAvLyBtYXAgdGhlIGhpdCB0ZXN0Li5cbiAgICB0aGlzLmNvbnRhaW5zUG9pbnQgPSB0aGlzLl9jYWNoZWRTcHJpdGUuY29udGFpbnNQb2ludC5iaW5kKHRoaXMuX2NhY2hlZFNwcml0ZSk7XG59O1xuXG4vKipcbiogUmVuZGVycyBhIGNhY2hlZCB2ZXJzaW9uIG9mIHRoZSBzcHJpdGUgd2l0aCBjYW52YXNcbipcbiogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLkNhbnZhc1JlbmRlcmVyfSB0aGUgQ2FudmFzIHJlbmRlcmVyXG4qIEBwcml2YXRlXG4qL1xuRGlzcGxheU9iamVjdC5wcm90b3R5cGUuX3JlbmRlckNhY2hlZENhbnZhcyA9IGZ1bmN0aW9uIChyZW5kZXJlcilcbntcbiAgICBpZiAoIXRoaXMudmlzaWJsZSB8fCB0aGlzLndvcmxkQWxwaGEgPD0gMCB8fCAhdGhpcy5yZW5kZXJhYmxlKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuX2luaXRDYWNoZWREaXNwbGF5T2JqZWN0Q2FudmFzKCByZW5kZXJlciApO1xuXG4gICAgdGhpcy5fY2FjaGVkU3ByaXRlLndvcmxkQWxwaGEgPSB0aGlzLndvcmxkQWxwaGE7XG5cbiAgICB0aGlzLl9jYWNoZWRTcHJpdGUucmVuZGVyQ2FudmFzKHJlbmRlcmVyKTtcbn07XG5cbi8vVE9ETyB0aGlzIGNhbiBiZSB0aGUgc2FtZSBhcyB0aGUgd2ViR0wgdmVyaXNvbi4uIHdpbGwgbmVlZCB0byBkbyBhIGxpdHRsZSB0d2Vha2luZyBmaXJzdCB0aG91Z2guLlxuLyoqXG4qIFByZXBhcmVzIHRoZSBDYW52YXMgcmVuZGVyZXIgdG8gY2FjaGUgdGhlIHNwcml0ZVxuKlxuKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuQ2FudmFzUmVuZGVyZXJ9IHRoZSBDYW52YXMgcmVuZGVyZXJcbiogQHByaXZhdGVcbiovXG5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS5faW5pdENhY2hlZERpc3BsYXlPYmplY3RDYW52YXMgPSBmdW5jdGlvbiAocmVuZGVyZXIpXG57XG4gICAgaWYodGhpcy5fY2FjaGVkU3ByaXRlKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vZ2V0IGJvdW5kcyBhY3R1YWxseSB0cmFuc2Zvcm1zIHRoZSBvYmplY3QgZm9yIHVzIGFscmVhZHkhXG4gICAgdmFyIGJvdW5kcyA9IHRoaXMuZ2V0TG9jYWxCb3VuZHMoKTtcblxuICAgIHZhciBjYWNoZWRSZW5kZXJUYXJnZXQgPSByZW5kZXJlci5jb250ZXh0O1xuXG4gICAgdmFyIHJlbmRlclRleHR1cmUgPSBuZXcgY29yZS5SZW5kZXJUZXh0dXJlKHJlbmRlcmVyLCBib3VuZHMud2lkdGggfCAwLCBib3VuZHMuaGVpZ2h0IHwgMCk7XG5cbiAgICAvLyBuZWVkIHRvIHNldCAvL1xuICAgIHZhciBtID0gX3RlbXBNYXRyaXg7XG5cbiAgICBtLnR4ID0gLWJvdW5kcy54O1xuICAgIG0udHkgPSAtYm91bmRzLnk7XG5cbiAgICAvLyBzZXQgYWxsIHByb3BlcnRpZXMgdG8gdGhlcmUgb3JpZ2luYWwgc28gd2UgY2FuIHJlbmRlciB0byBhIHRleHR1cmVcbiAgICB0aGlzLnJlbmRlckNhbnZhcyA9IHRoaXMuX29yaWdpbmFsUmVuZGVyQ2FudmFzO1xuXG4gICAgcmVuZGVyVGV4dHVyZS5yZW5kZXIodGhpcywgbSwgdHJ1ZSk7XG5cbiAgICAvLyBub3cgcmVzdG9yZSB0aGUgc3RhdGUgYmUgc2V0dGluZyB0aGUgbmV3IHByb3BlcnRpZXNcbiAgICByZW5kZXJlci5jb250ZXh0ID0gY2FjaGVkUmVuZGVyVGFyZ2V0O1xuXG4gICAgdGhpcy5yZW5kZXJDYW52YXMgPSB0aGlzLl9yZW5kZXJDYWNoZWRDYW52YXM7XG4gICAgdGhpcy51cGRhdGVUcmFuc2Zvcm0gPSB0aGlzLmRpc3BsYXlPYmplY3RVcGRhdGVUcmFuc2Zvcm07XG4gICAgdGhpcy5nZXRCb3VuZHMgID0gdGhpcy5fZ2V0Q2FjaGVkQm91bmRzO1xuXG5cbiAgICAvLyBjcmVhdGUgb3VyIGNhY2hlZCBzcHJpdGVcbiAgICB0aGlzLl9jYWNoZWRTcHJpdGUgPSBuZXcgY29yZS5TcHJpdGUocmVuZGVyVGV4dHVyZSk7XG4gICAgdGhpcy5fY2FjaGVkU3ByaXRlLndvcmxkVHJhbnNmb3JtID0gdGhpcy53b3JsZFRyYW5zZm9ybTtcbiAgICB0aGlzLl9jYWNoZWRTcHJpdGUuYW5jaG9yLnggPSAtKCBib3VuZHMueCAvIGJvdW5kcy53aWR0aCApO1xuICAgIHRoaXMuX2NhY2hlZFNwcml0ZS5hbmNob3IueSA9IC0oIGJvdW5kcy55IC8gYm91bmRzLmhlaWdodCApO1xuXG4gICAgdGhpcy51cGRhdGVUcmFuc2Zvcm0oKTtcblxuICAgIHRoaXMuY29udGFpbnNQb2ludCA9IHRoaXMuX2NhY2hlZFNwcml0ZS5jb250YWluc1BvaW50LmJpbmQodGhpcy5fY2FjaGVkU3ByaXRlKTtcbn07XG5cbi8qKlxuKiBDYWxjdWxhdGVzIHRoZSBib3VuZHMgb2YgdGhlIGNhY2hlZCBzcHJpdGVcbipcbiogQHByaXZhdGVcbiovXG5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS5fZ2V0Q2FjaGVkQm91bmRzID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLl9jYWNoZWRTcHJpdGUuX2N1cnJlbnRCb3VuZHMgPSBudWxsO1xuXG4gICAgcmV0dXJuIHRoaXMuX2NhY2hlZFNwcml0ZS5nZXRCb3VuZHMoKTtcbn07XG5cbi8qKlxuKiBEZXN0cm95cyB0aGUgY2FjaGVkIHNwcml0ZS5cbipcbiogQHByaXZhdGVcbiovXG5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS5fZGVzdHJveUNhY2hlZERpc3BsYXlPYmplY3QgPSBmdW5jdGlvbiAoKVxue1xuICAgIHRoaXMuX2NhY2hlZFNwcml0ZS5fdGV4dHVyZS5kZXN0cm95KCk7XG4gICAgdGhpcy5fY2FjaGVkU3ByaXRlID0gbnVsbDtcbn07XG5cbkRpc3BsYXlPYmplY3QucHJvdG90eXBlLl9jYWNoZUFzQml0bWFwRGVzdHJveSA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy5jYWNoZUFzQml0bWFwID0gZmFsc2U7XG4gICAgdGhpcy5fb3JpZ2luYWxEZXN0cm95KCk7XG59O1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi9jb3JlJyk7XG5cbi8qKlxuICogVGhlIGluc3RhbmNlIG5hbWUgb2YgdGhlIG9iamVjdC5cbiAqXG4gKiBAbWVtYmVyb2YgUElYSS5EaXNwbGF5T2JqZWN0I1xuICogQG1lbWJlciB7c3RyaW5nfVxuICovXG5jb3JlLkRpc3BsYXlPYmplY3QucHJvdG90eXBlLm5hbWUgPSBudWxsO1xuXG4vKipcbiogUmV0dXJucyB0aGUgZGlzcGxheSBvYmplY3QgaW4gdGhlIGNvbnRhaW5lclxuKlxuKiBAbWVtYmVyb2YgUElYSS5Db250YWluZXIjXG4qIEBwYXJhbSBuYW1lIHtzdHJpbmd9IGluc3RhbmNlIG5hbWVcbiogQHJldHVybiB7UElYSS5EaXNwbGF5T2JqZWN0fVxuKi9cbmNvcmUuQ29udGFpbmVyLnByb3RvdHlwZS5nZXRDaGlsZEJ5TmFtZSA9IGZ1bmN0aW9uIChuYW1lKVxue1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5jaGlsZHJlbi5sZW5ndGg7IGkrKylcbiAgICB7XG4gICAgICAgIGlmICh0aGlzLmNoaWxkcmVuW2ldLm5hbWUgPT09IG5hbWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmNoaWxkcmVuW2ldO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xufTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vY29yZScpO1xuXG4vKipcbiogUmV0dXJucyB0aGUgZ2xvYmFsIHBvc2l0aW9uIG9mIHRoZSBkaXNwbGF5T2JqZWN0XG4qXG4qIEBtZW1iZXJvZiBQSVhJLkRpc3BsYXlPYmplY3QjXG4qIEBwYXJhbSBwb2ludCB7UG9pbnR9IHRoZSBwb2ludCB0byB3cml0ZSB0aGUgZ2xvYmFsIHZhbHVlIHRvLiBJZiBudWxsIGEgbmV3IHBvaW50IHdpbGwgYmUgcmV0dXJuZWRcbiogQHJldHVybiB7UG9pbnR9XG4qL1xuY29yZS5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS5nZXRHbG9iYWxQb3NpdGlvbiA9IGZ1bmN0aW9uIChwb2ludClcbntcbiAgICBwb2ludCA9IHBvaW50IHx8IG5ldyBjb3JlLlBvaW50KCk7XG5cbiAgICBpZih0aGlzLnBhcmVudClcbiAgICB7XG4gICAgICAgIHRoaXMuZGlzcGxheU9iamVjdFVwZGF0ZVRyYW5zZm9ybSgpO1xuXG4gICAgICAgIHBvaW50LnggPSB0aGlzLndvcmxkVHJhbnNmb3JtLnR4O1xuICAgICAgICBwb2ludC55ID0gdGhpcy53b3JsZFRyYW5zZm9ybS50eTtcbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgcG9pbnQueCA9IHRoaXMucG9zaXRpb24ueDtcbiAgICAgICAgcG9pbnQueSA9IHRoaXMucG9zaXRpb24ueTtcbiAgICB9XG5cbiAgICByZXR1cm4gcG9pbnQ7XG59O1xuIiwiLyoqXG4gKiBAZmlsZSAgICAgICAgTWFpbiBleHBvcnQgb2YgdGhlIFBJWEkgZXh0cmFzIGxpYnJhcnlcbiAqIEBhdXRob3IgICAgICBNYXQgR3JvdmVzIDxtYXRAZ29vZGJveWRpZ2l0YWwuY29tPlxuICogQGNvcHlyaWdodCAgIDIwMTMtMjAxNSBHb29kQm95RGlnaXRhbFxuICogQGxpY2Vuc2UgICAgIHtAbGluayBodHRwczovL2dpdGh1Yi5jb20vcGl4aWpzL3BpeGkuanMvYmxvYi9tYXN0ZXIvTElDRU5TRXxNSVQgTGljZW5zZX1cbiAqL1xuXG5yZXF1aXJlKCcuL2NhY2hlQXNCaXRtYXAnKTtcbnJlcXVpcmUoJy4vZ2V0Q2hpbGRCeU5hbWUnKTtcbnJlcXVpcmUoJy4vZ2V0R2xvYmFsUG9zaXRpb24nKTtcblxuLyoqXG4gKiBAbmFtZXNwYWNlIFBJWEkuZXh0cmFzXG4gKi9cbm1vZHVsZS5leHBvcnRzID0ge1xuICAgIE1vdmllQ2xpcDogICAgICByZXF1aXJlKCcuL01vdmllQ2xpcCcpLFxuICAgIFRpbGluZ1Nwcml0ZTogICByZXF1aXJlKCcuL1RpbGluZ1Nwcml0ZScpLFxuICAgIEJpdG1hcFRleHQ6ICAgICByZXF1aXJlKCcuL0JpdG1hcFRleHQnKVxufTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vLi4vY29yZScpO1xuLy8gQHNlZSBodHRwczovL2dpdGh1Yi5jb20vc3Vic3RhY2svYnJmcy9pc3N1ZXMvMjVcblxuXG4vLyBUT0RPIChjZW5nbGVyKSAtIFRoZSBZIGlzIGZsaXBwZWQgaW4gdGhpcyBzaGFkZXIgZm9yIHNvbWUgcmVhc29uLlxuXG4vKipcbiAqIEBhdXRob3IgVmljbyBAdmljb2NvdGVhXG4gKiBvcmlnaW5hbCBzaGFkZXIgOiBodHRwczovL3d3dy5zaGFkZXJ0b3kuY29tL3ZpZXcvbHNzR0RqIGJ5IEBtb3ZBWDEzaFxuICovXG5cbi8qKlxuICogQW4gQVNDSUkgZmlsdGVyLlxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5BYnN0cmFjdEZpbHRlclxuICogQG1lbWJlcm9mIFBJWEkuZmlsdGVyc1xuICovXG5mdW5jdGlvbiBBc2NpaUZpbHRlcigpXG57XG4gICAgY29yZS5BYnN0cmFjdEZpbHRlci5jYWxsKHRoaXMsXG4gICAgICAgIC8vIHZlcnRleCBzaGFkZXJcbiAgICAgICAgbnVsbCxcbiAgICAgICAgLy8gZnJhZ21lbnQgc2hhZGVyXG4gICAgICAgIFwicHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XFxuXFxudW5pZm9ybSB2ZWM0IGRpbWVuc2lvbnM7XFxudW5pZm9ybSBmbG9hdCBwaXhlbFNpemU7XFxudW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXI7XFxuXFxuZmxvYXQgY2hhcmFjdGVyKGZsb2F0IG4sIHZlYzIgcClcXG57XFxuICAgIHAgPSBmbG9vcihwKnZlYzIoNC4wLCAtNC4wKSArIDIuNSk7XFxuICAgIGlmIChjbGFtcChwLngsIDAuMCwgNC4wKSA9PSBwLnggJiYgY2xhbXAocC55LCAwLjAsIDQuMCkgPT0gcC55KVxcbiAgICB7XFxuICAgICAgICBpZiAoaW50KG1vZChuL2V4cDIocC54ICsgNS4wKnAueSksIDIuMCkpID09IDEpIHJldHVybiAxLjA7XFxuICAgIH1cXG4gICAgcmV0dXJuIDAuMDtcXG59XFxuXFxudm9pZCBtYWluKClcXG57XFxuICAgIHZlYzIgdXYgPSBnbF9GcmFnQ29vcmQueHk7XFxuXFxuICAgIHZlYzMgY29sID0gdGV4dHVyZTJEKHVTYW1wbGVyLCBmbG9vciggdXYgLyBwaXhlbFNpemUgKSAqIHBpeGVsU2l6ZSAvIGRpbWVuc2lvbnMueHkpLnJnYjtcXG5cXG4gICAgZmxvYXQgZ3JheSA9IChjb2wuciArIGNvbC5nICsgY29sLmIpIC8gMy4wO1xcblxcbiAgICBmbG9hdCBuID0gIDY1NTM2LjA7ICAgICAgICAgICAgIC8vIC5cXG4gICAgaWYgKGdyYXkgPiAwLjIpIG4gPSA2NTYwMC4wOyAgICAvLyA6XFxuICAgIGlmIChncmF5ID4gMC4zKSBuID0gMzMyNzcyLjA7ICAgLy8gKlxcbiAgICBpZiAoZ3JheSA+IDAuNCkgbiA9IDE1MjU1MDg2LjA7IC8vIG9cXG4gICAgaWYgKGdyYXkgPiAwLjUpIG4gPSAyMzM4NTE2NC4wOyAvLyAmXFxuICAgIGlmIChncmF5ID4gMC42KSBuID0gMTUyNTIwMTQuMDsgLy8gOFxcbiAgICBpZiAoZ3JheSA+IDAuNykgbiA9IDEzMTk5NDUyLjA7IC8vIEBcXG4gICAgaWYgKGdyYXkgPiAwLjgpIG4gPSAxMTUxMjgxMC4wOyAvLyAjXFxuXFxuICAgIHZlYzIgcCA9IG1vZCggdXYgLyAoIHBpeGVsU2l6ZSAqIDAuNSApLCAyLjApIC0gdmVjMigxLjApO1xcbiAgICBjb2wgPSBjb2wgKiBjaGFyYWN0ZXIobiwgcCk7XFxuXFxuICAgIGdsX0ZyYWdDb2xvciA9IHZlYzQoY29sLCAxLjApO1xcbn1cXG5cIixcbiAgICAgICAgLy8gY3VzdG9tIHVuaWZvcm1zXG4gICAgICAgIHtcbiAgICAgICAgICAgIGRpbWVuc2lvbnM6IHsgdHlwZTogJzRmdicsIHZhbHVlOiBuZXcgRmxvYXQzMkFycmF5KFswLCAwLCAwLCAwXSkgfSxcbiAgICAgICAgICAgIHBpeGVsU2l6ZTogIHsgdHlwZTogJzFmJywgdmFsdWU6IDggfVxuICAgICAgICB9XG4gICAgKTtcbn1cblxuQXNjaWlGaWx0ZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShjb3JlLkFic3RyYWN0RmlsdGVyLnByb3RvdHlwZSk7XG5Bc2NpaUZpbHRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBBc2NpaUZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gQXNjaWlGaWx0ZXI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKEFzY2lpRmlsdGVyLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFRoZSBwaXhlbCBzaXplIHVzZWQgYnkgdGhlIGZpbHRlci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLkFzY2lpRmlsdGVyI1xuICAgICAqL1xuICAgIHNpemU6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy51bmlmb3Jtcy5waXhlbFNpemUudmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLnBpeGVsU2l6ZS52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfVxufSk7XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uLy4uL2NvcmUnKSxcbiAgICBCbHVyWEZpbHRlciA9IHJlcXVpcmUoJy4uL2JsdXIvQmx1clhGaWx0ZXInKSxcbiAgICBCbHVyWUZpbHRlciA9IHJlcXVpcmUoJy4uL2JsdXIvQmx1cllGaWx0ZXInKTtcblxuLyoqXG4gKiBUaGUgQmxvb21GaWx0ZXIgYXBwbGllcyBhIEdhdXNzaWFuIGJsdXIgdG8gYW4gb2JqZWN0LlxuICogVGhlIHN0cmVuZ3RoIG9mIHRoZSBibHVyIGNhbiBiZSBzZXQgZm9yIHgtIGFuZCB5LWF4aXMgc2VwYXJhdGVseS5cbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQWJzdHJhY3RGaWx0ZXJcbiAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnNcbiAqL1xuZnVuY3Rpb24gQmxvb21GaWx0ZXIoKVxue1xuICAgIGNvcmUuQWJzdHJhY3RGaWx0ZXIuY2FsbCh0aGlzKTtcblxuICAgIHRoaXMuYmx1clhGaWx0ZXIgPSBuZXcgQmx1clhGaWx0ZXIoKTtcbiAgICB0aGlzLmJsdXJZRmlsdGVyID0gbmV3IEJsdXJZRmlsdGVyKCk7XG5cbiAgICB0aGlzLmRlZmF1bHRGaWx0ZXIgPSBuZXcgY29yZS5BYnN0cmFjdEZpbHRlcigpO1xufVxuXG5CbG9vbUZpbHRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuQWJzdHJhY3RGaWx0ZXIucHJvdG90eXBlKTtcbkJsb29tRmlsdGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IEJsb29tRmlsdGVyO1xubW9kdWxlLmV4cG9ydHMgPSBCbG9vbUZpbHRlcjtcblxuQmxvb21GaWx0ZXIucHJvdG90eXBlLmFwcGx5RmlsdGVyID0gZnVuY3Rpb24gKHJlbmRlcmVyLCBpbnB1dCwgb3V0cHV0KVxue1xuICAgIHZhciByZW5kZXJUYXJnZXQgPSByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLmdldFJlbmRlclRhcmdldCh0cnVlKTtcblxuICAgIC8vVE9ETyAtIGNvcHlUZXhTdWJJbWFnZTJEIGNvdWxkIGJlIHVzZWQgaGVyZT9cbiAgICB0aGlzLmRlZmF1bHRGaWx0ZXIuYXBwbHlGaWx0ZXIocmVuZGVyZXIsIGlucHV0LCBvdXRwdXQpO1xuXG4gICAgdGhpcy5ibHVyWEZpbHRlci5hcHBseUZpbHRlcihyZW5kZXJlciwgaW5wdXQsIHJlbmRlclRhcmdldCk7XG5cbiAgICByZW5kZXJlci5ibGVuZE1vZGVNYW5hZ2VyLnNldEJsZW5kTW9kZShjb3JlLkJMRU5EX01PREVTLlNDUkVFTik7XG5cbiAgICB0aGlzLmJsdXJZRmlsdGVyLmFwcGx5RmlsdGVyKHJlbmRlcmVyLCByZW5kZXJUYXJnZXQsIG91dHB1dCk7XG5cbiAgICByZW5kZXJlci5ibGVuZE1vZGVNYW5hZ2VyLnNldEJsZW5kTW9kZShjb3JlLkJMRU5EX01PREVTLk5PUk1BTCk7XG5cbiAgICByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLnJldHVyblJlbmRlclRhcmdldChyZW5kZXJUYXJnZXQpO1xufTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoQmxvb21GaWx0ZXIucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgc3RyZW5ndGggb2YgYm90aCB0aGUgYmx1clggYW5kIGJsdXJZIHByb3BlcnRpZXMgc2ltdWx0YW5lb3VzbHlcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyT2YgUElYSS5maWx0ZXJzLkJsb29tRmlsdGVyI1xuICAgICAqIEBkZWZhdWx0IDJcbiAgICAgKi9cbiAgICBibHVyOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuYmx1clhGaWx0ZXIuYmx1cjtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuYmx1clhGaWx0ZXIuYmx1ciA9IHRoaXMuYmx1cllGaWx0ZXIuYmx1ciA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIHN0cmVuZ3RoIG9mIHRoZSBibHVyWCBwcm9wZXJ0eVxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJPZiBQSVhJLmZpbHRlcnMuQmxvb21GaWx0ZXIjXG4gICAgICogQGRlZmF1bHQgMlxuICAgICAqL1xuICAgIGJsdXJYOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuYmx1clhGaWx0ZXIuYmx1cjtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuYmx1clhGaWx0ZXIuYmx1ciA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIHN0cmVuZ3RoIG9mIHRoZSBibHVyWSBwcm9wZXJ0eVxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJPZiBQSVhJLmZpbHRlcnMuQmxvb21GaWx0ZXIjXG4gICAgICogQGRlZmF1bHQgMlxuICAgICAqL1xuICAgIGJsdXJZOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuYmx1cllGaWx0ZXIuYmx1cjtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuYmx1cllGaWx0ZXIuYmx1ciA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfVxufSk7XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uLy4uL2NvcmUnKTtcblxuXG4vKipcbiAqIFRoZSBCbHVyRGlyRmlsdGVyIGFwcGxpZXMgYSBHYXVzc2lhbiBibHVyIHRvd2FyZCBhIGRpcmVjdGlvbiB0byBhbiBvYmplY3QuXG4gKlxuICogQGNsYXNzXG4gKiBAcGFyYW0ge251bWJlcn0gZGlyWFxuICogQHBhcmFtIHtudW1iZXJ9IGRpcllcbiAqIEBleHRlbmRzIFBJWEkuQWJzdHJhY3RGaWx0ZXJcbiAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnNcbiAqL1xuZnVuY3Rpb24gQmx1ckRpckZpbHRlcihkaXJYLCBkaXJZKVxue1xuICAgIGNvcmUuQWJzdHJhY3RGaWx0ZXIuY2FsbCh0aGlzLFxuICAgICAgICAvLyB2ZXJ0ZXggc2hhZGVyXG4gICAgICAgIFwiYXR0cmlidXRlIHZlYzIgYVZlcnRleFBvc2l0aW9uO1xcbmF0dHJpYnV0ZSB2ZWMyIGFUZXh0dXJlQ29vcmQ7XFxuYXR0cmlidXRlIHZlYzQgYUNvbG9yO1xcblxcbnVuaWZvcm0gZmxvYXQgc3RyZW5ndGg7XFxudW5pZm9ybSBmbG9hdCBkaXJYO1xcbnVuaWZvcm0gZmxvYXQgZGlyWTtcXG51bmlmb3JtIG1hdDMgcHJvamVjdGlvbk1hdHJpeDtcXG5cXG52YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDtcXG52YXJ5aW5nIHZlYzQgdkNvbG9yO1xcbnZhcnlpbmcgdmVjMiB2Qmx1clRleENvb3Jkc1szXTtcXG5cXG52b2lkIG1haW4odm9pZClcXG57XFxuICAgIGdsX1Bvc2l0aW9uID0gdmVjNCgocHJvamVjdGlvbk1hdHJpeCAqIHZlYzMoKGFWZXJ0ZXhQb3NpdGlvbiksIDEuMCkpLnh5LCAwLjAsIDEuMCk7XFxuICAgIHZUZXh0dXJlQ29vcmQgPSBhVGV4dHVyZUNvb3JkO1xcblxcbiAgICB2Qmx1clRleENvb3Jkc1swXSA9IGFUZXh0dXJlQ29vcmQgKyB2ZWMyKCAoMC4wMDQgKiBzdHJlbmd0aCkgKiBkaXJYLCAoMC4wMDQgKiBzdHJlbmd0aCkgKiBkaXJZICk7XFxuICAgIHZCbHVyVGV4Q29vcmRzWzFdID0gYVRleHR1cmVDb29yZCArIHZlYzIoICgwLjAwOCAqIHN0cmVuZ3RoKSAqIGRpclgsICgwLjAwOCAqIHN0cmVuZ3RoKSAqIGRpclkgKTtcXG4gICAgdkJsdXJUZXhDb29yZHNbMl0gPSBhVGV4dHVyZUNvb3JkICsgdmVjMiggKDAuMDEyICogc3RyZW5ndGgpICogZGlyWCwgKDAuMDEyICogc3RyZW5ndGgpICogZGlyWSApO1xcblxcbiAgICB2Q29sb3IgPSB2ZWM0KGFDb2xvci5yZ2IgKiBhQ29sb3IuYSwgYUNvbG9yLmEpO1xcbn1cXG5cIixcbiAgICAgICAgLy8gZnJhZ21lbnQgc2hhZGVyXG4gICAgICAgIFwicHJlY2lzaW9uIGxvd3AgZmxvYXQ7XFxuXFxudmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7XFxudmFyeWluZyB2ZWMyIHZCbHVyVGV4Q29vcmRzWzNdO1xcbnZhcnlpbmcgdmVjNCB2Q29sb3I7XFxuXFxudW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXI7XFxuXFxudm9pZCBtYWluKHZvaWQpXFxue1xcbiAgICBnbF9GcmFnQ29sb3IgPSB2ZWM0KDAuMCk7XFxuXFxuICAgIGdsX0ZyYWdDb2xvciArPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZUZXh0dXJlQ29vcmQgICAgICkgKiAwLjM5ODk0MjI4MDQwMTQzMjc7XFxuICAgIGdsX0ZyYWdDb2xvciArPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZCbHVyVGV4Q29vcmRzWyAwXSkgKiAwLjI0MTk3MDcyNDUxOTE0NTQ7XFxuICAgIGdsX0ZyYWdDb2xvciArPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZCbHVyVGV4Q29vcmRzWyAxXSkgKiAwLjA1Mzk5MDk2NjUxMzE4OTg1O1xcbiAgICBnbF9GcmFnQ29sb3IgKz0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2Qmx1clRleENvb3Jkc1sgMl0pICogMC4wMDQ0MzE4NDg0MTE5MzgzNDE7XFxufVxcblwiLFxuICAgICAgICAvLyBzZXQgdGhlIHVuaWZvcm1zXG4gICAgICAgIHtcbiAgICAgICAgICAgIHN0cmVuZ3RoOiB7IHR5cGU6ICcxZicsIHZhbHVlOiAxIH0sXG4gICAgICAgICAgICBkaXJYOiB7IHR5cGU6ICcxZicsIHZhbHVlOiBkaXJYIHx8IDAgfSxcbiAgICAgICAgICAgIGRpclk6IHsgdHlwZTogJzFmJywgdmFsdWU6IGRpclkgfHwgMCB9XG4gICAgICAgIH1cbiAgICApO1xuXG4gICAgdGhpcy5kZWZhdWx0RmlsdGVyID0gbmV3IGNvcmUuQWJzdHJhY3RGaWx0ZXIoKTtcblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIG51bWJlciBvZiBwYXNzZXMgZm9yIGJsdXIuIE1vcmUgcGFzc2VzIG1lYW5zIGhpZ2hlciBxdWFpbGl0eSBibHVyaW5nLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDFcbiAgICAgKi9cbiAgICB0aGlzLnBhc3NlcyA9IDE7XG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBYIGRpcmVjdGlvbiBvZiB0aGUgYmx1clxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDBcbiAgICAgKi9cbiAgICB0aGlzLmRpclggPSBkaXJYIHx8IDA7XG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBZIGRpcmVjdGlvbiBvZiB0aGUgYmx1clxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDBcbiAgICAgKi9cbiAgICB0aGlzLmRpclkgPSBkaXJZIHx8IDA7XG5cbiAgICB0aGlzLnN0cmVuZ3RoID0gNDtcbn1cblxuQmx1ckRpckZpbHRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuQWJzdHJhY3RGaWx0ZXIucHJvdG90eXBlKTtcbkJsdXJEaXJGaWx0ZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gQmx1ckRpckZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gQmx1ckRpckZpbHRlcjtcblxuQmx1ckRpckZpbHRlci5wcm90b3R5cGUuYXBwbHlGaWx0ZXIgPSBmdW5jdGlvbiAocmVuZGVyZXIsIGlucHV0LCBvdXRwdXQsIGNsZWFyKSB7XG5cbiAgICB2YXIgc2hhZGVyID0gdGhpcy5nZXRTaGFkZXIocmVuZGVyZXIpO1xuXG4gICAgdGhpcy51bmlmb3Jtcy5zdHJlbmd0aC52YWx1ZSA9IHRoaXMuc3RyZW5ndGggLyA0IC8gdGhpcy5wYXNzZXMgKiAoaW5wdXQuZnJhbWUud2lkdGggLyBpbnB1dC5zaXplLndpZHRoKTtcblxuICAgIGlmICh0aGlzLnBhc3NlcyA9PT0gMSkge1xuICAgICAgICByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLmFwcGx5RmlsdGVyKHNoYWRlciwgaW5wdXQsIG91dHB1dCwgY2xlYXIpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHZhciByZW5kZXJUYXJnZXQgPSByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLmdldFJlbmRlclRhcmdldCh0cnVlKTtcblxuICAgICAgICByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLmFwcGx5RmlsdGVyKHNoYWRlciwgaW5wdXQsIHJlbmRlclRhcmdldCwgY2xlYXIpO1xuXG4gICAgICAgIGZvcih2YXIgaSA9IDA7IGkgPCB0aGlzLnBhc3Nlcy0yOyBpKyspXG4gICAgICAgIHtcbiAgICAgICAgICAgIC8vdGhpcy51bmlmb3Jtcy5zdHJlbmd0aC52YWx1ZSA9IHRoaXMuc3RyZW5ndGggLyA0IC8gKHRoaXMucGFzc2VzKyhpKjIpKSAqIChpbnB1dC5mcmFtZS53aWR0aCAvIGlucHV0LnNpemUud2lkdGgpO1xuICAgICAgICAgICAgcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5hcHBseUZpbHRlcihzaGFkZXIsIHJlbmRlclRhcmdldCwgcmVuZGVyVGFyZ2V0LCBjbGVhcik7XG4gICAgICAgIH1cblxuICAgICAgICByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLmFwcGx5RmlsdGVyKHNoYWRlciwgcmVuZGVyVGFyZ2V0LCBvdXRwdXQsIGNsZWFyKTtcblxuICAgICAgICByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLnJldHVyblJlbmRlclRhcmdldChyZW5kZXJUYXJnZXQpO1xuICAgIH1cbn07XG5cblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoQmx1ckRpckZpbHRlci5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBzdHJlbmd0aCBvZiBib3RoIHRoZSBibHVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuQmx1ckRpckZpbHRlciNcbiAgICAgKiBAZGVmYXVsdCAyXG4gICAgICovXG4gICAgYmx1cjoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnN0cmVuZ3RoO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5wYWRkaW5nID0gdmFsdWUgKiAwLjU7XG4gICAgICAgICAgICB0aGlzLnN0cmVuZ3RoID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9LFxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIFggZGlyZWN0aW9uIG9mIHRoZSBibHVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuQmx1cllGaWx0ZXIjXG4gICAgICogQGRlZmF1bHQgMFxuICAgICAqL1xuICAgIGRpclg6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5kaXJYO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy5kaXJYLnZhbHVlID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9LFxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIFkgZGlyZWN0aW9uIG9mIHRoZSBibHVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuQmx1ckRpckZpbHRlciNcbiAgICAgKiBAZGVmYXVsdCAwXG4gICAgICovXG4gICAgZGlyWToge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmRpclk7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLmRpclkudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi8uLi9jb3JlJyksXG4gICAgQmx1clhGaWx0ZXIgPSByZXF1aXJlKCcuL0JsdXJYRmlsdGVyJyksXG4gICAgQmx1cllGaWx0ZXIgPSByZXF1aXJlKCcuL0JsdXJZRmlsdGVyJyk7XG5cbi8qKlxuICogVGhlIEJsdXJGaWx0ZXIgYXBwbGllcyBhIEdhdXNzaWFuIGJsdXIgdG8gYW4gb2JqZWN0LlxuICogVGhlIHN0cmVuZ3RoIG9mIHRoZSBibHVyIGNhbiBiZSBzZXQgZm9yIHgtIGFuZCB5LWF4aXMgc2VwYXJhdGVseS5cbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQWJzdHJhY3RGaWx0ZXJcbiAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnNcbiAqL1xuZnVuY3Rpb24gQmx1ckZpbHRlcigpXG57XG4gICAgY29yZS5BYnN0cmFjdEZpbHRlci5jYWxsKHRoaXMpO1xuXG4gICAgdGhpcy5ibHVyWEZpbHRlciA9IG5ldyBCbHVyWEZpbHRlcigpO1xuICAgIHRoaXMuYmx1cllGaWx0ZXIgPSBuZXcgQmx1cllGaWx0ZXIoKTtcbn1cblxuQmx1ckZpbHRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuQWJzdHJhY3RGaWx0ZXIucHJvdG90eXBlKTtcbkJsdXJGaWx0ZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gQmx1ckZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gQmx1ckZpbHRlcjtcblxuQmx1ckZpbHRlci5wcm90b3R5cGUuYXBwbHlGaWx0ZXIgPSBmdW5jdGlvbiAocmVuZGVyZXIsIGlucHV0LCBvdXRwdXQpXG57XG4gICAgdmFyIHJlbmRlclRhcmdldCA9IHJlbmRlcmVyLmZpbHRlck1hbmFnZXIuZ2V0UmVuZGVyVGFyZ2V0KHRydWUpO1xuXG4gICAgdGhpcy5ibHVyWEZpbHRlci5hcHBseUZpbHRlcihyZW5kZXJlciwgaW5wdXQsIHJlbmRlclRhcmdldCk7XG4gICAgdGhpcy5ibHVyWUZpbHRlci5hcHBseUZpbHRlcihyZW5kZXJlciwgcmVuZGVyVGFyZ2V0LCBvdXRwdXQpO1xuXG4gICAgcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5yZXR1cm5SZW5kZXJUYXJnZXQocmVuZGVyVGFyZ2V0KTtcbn07XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKEJsdXJGaWx0ZXIucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgc3RyZW5ndGggb2YgYm90aCB0aGUgYmx1clggYW5kIGJsdXJZIHByb3BlcnRpZXMgc2ltdWx0YW5lb3VzbHlcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyT2YgUElYSS5maWx0ZXJzLkJsdXJGaWx0ZXIjXG4gICAgICogQGRlZmF1bHQgMlxuICAgICAqL1xuICAgIGJsdXI6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5ibHVyWEZpbHRlci5ibHVyO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5wYWRkaW5nID0gTWF0aC5hYnModmFsdWUpICogMC41O1xuICAgICAgICAgICAgdGhpcy5ibHVyWEZpbHRlci5ibHVyID0gdGhpcy5ibHVyWUZpbHRlci5ibHVyID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgbnVtYmVyIG9mIHBhc3NlcyBmb3IgYmx1ci4gTW9yZSBwYXNzZXMgbWVhbnMgaGlnaGVyIHF1YWlsaXR5IGJsdXJpbmcuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5CbHVyWUZpbHRlciNcbiAgICAgKiBAZGVmYXVsdCAxXG4gICAgICovXG4gICAgcGFzc2VzOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuICB0aGlzLmJsdXJYRmlsdGVyLnBhc3NlcztcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuYmx1clhGaWx0ZXIucGFzc2VzID0gdGhpcy5ibHVyWUZpbHRlci5wYXNzZXMgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBzdHJlbmd0aCBvZiB0aGUgYmx1clggcHJvcGVydHlcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyT2YgUElYSS5maWx0ZXJzLkJsdXJGaWx0ZXIjXG4gICAgICogQGRlZmF1bHQgMlxuICAgICAqL1xuICAgIGJsdXJYOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuYmx1clhGaWx0ZXIuYmx1cjtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuYmx1clhGaWx0ZXIuYmx1ciA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIHN0cmVuZ3RoIG9mIHRoZSBibHVyWSBwcm9wZXJ0eVxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJPZiBQSVhJLmZpbHRlcnMuQmx1ckZpbHRlciNcbiAgICAgKiBAZGVmYXVsdCAyXG4gICAgICovXG4gICAgYmx1clk6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5ibHVyWUZpbHRlci5ibHVyO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5ibHVyWUZpbHRlci5ibHVyID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG59KTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vLi4vY29yZScpO1xuLy8gQHNlZSBodHRwczovL2dpdGh1Yi5jb20vc3Vic3RhY2svYnJmcy9pc3N1ZXMvMjVcblxuXG4vKipcbiAqIFRoZSBCbHVyWEZpbHRlciBhcHBsaWVzIGEgaG9yaXpvbnRhbCBHYXVzc2lhbiBibHVyIHRvIGFuIG9iamVjdC5cbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQWJzdHJhY3RGaWx0ZXJcbiAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnNcbiAqL1xuZnVuY3Rpb24gQmx1clhGaWx0ZXIoKVxue1xuICAgIGNvcmUuQWJzdHJhY3RGaWx0ZXIuY2FsbCh0aGlzLFxuICAgICAgICAvLyB2ZXJ0ZXggc2hhZGVyXG4gICAgICAgIFwiYXR0cmlidXRlIHZlYzIgYVZlcnRleFBvc2l0aW9uO1xcbmF0dHJpYnV0ZSB2ZWMyIGFUZXh0dXJlQ29vcmQ7XFxuYXR0cmlidXRlIHZlYzQgYUNvbG9yO1xcblxcbnVuaWZvcm0gZmxvYXQgc3RyZW5ndGg7XFxudW5pZm9ybSBtYXQzIHByb2plY3Rpb25NYXRyaXg7XFxuXFxudmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7XFxudmFyeWluZyB2ZWM0IHZDb2xvcjtcXG52YXJ5aW5nIHZlYzIgdkJsdXJUZXhDb29yZHNbNl07XFxuXFxudm9pZCBtYWluKHZvaWQpXFxue1xcbiAgICBnbF9Qb3NpdGlvbiA9IHZlYzQoKHByb2plY3Rpb25NYXRyaXggKiB2ZWMzKChhVmVydGV4UG9zaXRpb24pLCAxLjApKS54eSwgMC4wLCAxLjApO1xcbiAgICB2VGV4dHVyZUNvb3JkID0gYVRleHR1cmVDb29yZDtcXG5cXG4gICAgdkJsdXJUZXhDb29yZHNbIDBdID0gYVRleHR1cmVDb29yZCArIHZlYzIoLTAuMDEyICogc3RyZW5ndGgsIDAuMCk7XFxuICAgIHZCbHVyVGV4Q29vcmRzWyAxXSA9IGFUZXh0dXJlQ29vcmQgKyB2ZWMyKC0wLjAwOCAqIHN0cmVuZ3RoLCAwLjApO1xcbiAgICB2Qmx1clRleENvb3Jkc1sgMl0gPSBhVGV4dHVyZUNvb3JkICsgdmVjMigtMC4wMDQgKiBzdHJlbmd0aCwgMC4wKTtcXG4gICAgdkJsdXJUZXhDb29yZHNbIDNdID0gYVRleHR1cmVDb29yZCArIHZlYzIoIDAuMDA0ICogc3RyZW5ndGgsIDAuMCk7XFxuICAgIHZCbHVyVGV4Q29vcmRzWyA0XSA9IGFUZXh0dXJlQ29vcmQgKyB2ZWMyKCAwLjAwOCAqIHN0cmVuZ3RoLCAwLjApO1xcbiAgICB2Qmx1clRleENvb3Jkc1sgNV0gPSBhVGV4dHVyZUNvb3JkICsgdmVjMiggMC4wMTIgKiBzdHJlbmd0aCwgMC4wKTtcXG5cXG4gICAgdkNvbG9yID0gdmVjNChhQ29sb3IucmdiICogYUNvbG9yLmEsIGFDb2xvci5hKTtcXG59XFxuXCIsXG4gICAgICAgIC8vIGZyYWdtZW50IHNoYWRlclxuICAgICAgICBcInByZWNpc2lvbiBsb3dwIGZsb2F0O1xcblxcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xcbnZhcnlpbmcgdmVjMiB2Qmx1clRleENvb3Jkc1s2XTtcXG52YXJ5aW5nIHZlYzQgdkNvbG9yO1xcblxcbnVuaWZvcm0gc2FtcGxlcjJEIHVTYW1wbGVyO1xcblxcbnZvaWQgbWFpbih2b2lkKVxcbntcXG4gICAgZ2xfRnJhZ0NvbG9yID0gdmVjNCgwLjApO1xcblxcbiAgICBnbF9GcmFnQ29sb3IgKz0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2Qmx1clRleENvb3Jkc1sgMF0pKjAuMDA0NDMxODQ4NDExOTM4MzQxO1xcbiAgICBnbF9GcmFnQ29sb3IgKz0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2Qmx1clRleENvb3Jkc1sgMV0pKjAuMDUzOTkwOTY2NTEzMTg5ODU7XFxuICAgIGdsX0ZyYWdDb2xvciArPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZCbHVyVGV4Q29vcmRzWyAyXSkqMC4yNDE5NzA3MjQ1MTkxNDU0O1xcbiAgICBnbF9GcmFnQ29sb3IgKz0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2VGV4dHVyZUNvb3JkICAgICApKjAuMzk4OTQyMjgwNDAxNDMyNztcXG4gICAgZ2xfRnJhZ0NvbG9yICs9IHRleHR1cmUyRCh1U2FtcGxlciwgdkJsdXJUZXhDb29yZHNbIDNdKSowLjI0MTk3MDcyNDUxOTE0NTQ7XFxuICAgIGdsX0ZyYWdDb2xvciArPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZCbHVyVGV4Q29vcmRzWyA0XSkqMC4wNTM5OTA5NjY1MTMxODk4NTtcXG4gICAgZ2xfRnJhZ0NvbG9yICs9IHRleHR1cmUyRCh1U2FtcGxlciwgdkJsdXJUZXhDb29yZHNbIDVdKSowLjAwNDQzMTg0ODQxMTkzODM0MTtcXG59XFxuXCIsXG4gICAgICAgIC8vIHNldCB0aGUgdW5pZm9ybXNcbiAgICAgICAge1xuICAgICAgICAgICAgc3RyZW5ndGg6IHsgdHlwZTogJzFmJywgdmFsdWU6IDEgfVxuICAgICAgICB9XG4gICAgKTtcblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIG51bWJlciBvZiBwYXNzZXMgZm9yIGJsdXIuIE1vcmUgcGFzc2VzIG1lYW5zIGhpZ2hlciBxdWFpbGl0eSBibHVyaW5nLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDFcbiAgICAgKi9cbiAgICB0aGlzLnBhc3NlcyA9IDE7XG5cbiAgICB0aGlzLnN0cmVuZ3RoID0gNDtcbn1cblxuQmx1clhGaWx0ZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShjb3JlLkFic3RyYWN0RmlsdGVyLnByb3RvdHlwZSk7XG5CbHVyWEZpbHRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBCbHVyWEZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gQmx1clhGaWx0ZXI7XG5cbkJsdXJYRmlsdGVyLnByb3RvdHlwZS5hcHBseUZpbHRlciA9IGZ1bmN0aW9uIChyZW5kZXJlciwgaW5wdXQsIG91dHB1dCwgY2xlYXIpXG57XG4gICAgdmFyIHNoYWRlciA9IHRoaXMuZ2V0U2hhZGVyKHJlbmRlcmVyKTtcblxuICAgIHRoaXMudW5pZm9ybXMuc3RyZW5ndGgudmFsdWUgPSB0aGlzLnN0cmVuZ3RoIC8gNCAvIHRoaXMucGFzc2VzICogKGlucHV0LmZyYW1lLndpZHRoIC8gaW5wdXQuc2l6ZS53aWR0aCk7XG5cbiAgICBpZih0aGlzLnBhc3NlcyA9PT0gMSlcbiAgICB7XG4gICAgICAgIHJlbmRlcmVyLmZpbHRlck1hbmFnZXIuYXBwbHlGaWx0ZXIoc2hhZGVyLCBpbnB1dCwgb3V0cHV0LCBjbGVhcik7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHZhciByZW5kZXJUYXJnZXQgPSByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLmdldFJlbmRlclRhcmdldCh0cnVlKTtcbiAgICAgICAgdmFyIGZsaXAgPSBpbnB1dDtcbiAgICAgICAgdmFyIGZsb3AgPSByZW5kZXJUYXJnZXQ7XG5cbiAgICAgICAgZm9yKHZhciBpID0gMDsgaSA8IHRoaXMucGFzc2VzLTE7IGkrKylcbiAgICAgICAge1xuICAgICAgICAgICAgcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5hcHBseUZpbHRlcihzaGFkZXIsIGZsaXAsIGZsb3AsIHRydWUpO1xuXG4gICAgICAgICAgIHZhciB0ZW1wID0gZmxvcDtcbiAgICAgICAgICAgZmxvcCA9IGZsaXA7XG4gICAgICAgICAgIGZsaXAgPSB0ZW1wO1xuICAgICAgICB9XG5cbiAgICAgICAgcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5hcHBseUZpbHRlcihzaGFkZXIsIGZsaXAsIG91dHB1dCwgY2xlYXIpO1xuXG4gICAgICAgIHJlbmRlcmVyLmZpbHRlck1hbmFnZXIucmV0dXJuUmVuZGVyVGFyZ2V0KHJlbmRlclRhcmdldCk7XG4gICAgfVxufTtcblxuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhCbHVyWEZpbHRlci5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBzdHJlbmd0aCBvZiBib3RoIHRoZSBibHVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuQmx1clhGaWx0ZXIjXG4gICAgICogQGRlZmF1bHQgMlxuICAgICAqL1xuICAgIGJsdXI6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gIHRoaXMuc3RyZW5ndGg7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnBhZGRpbmcgPSAgTWF0aC5hYnModmFsdWUpICogMC41O1xuICAgICAgICAgICAgdGhpcy5zdHJlbmd0aCA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfVxufSk7XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uLy4uL2NvcmUnKTtcbi8vIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL3N1YnN0YWNrL2JyZnMvaXNzdWVzLzI1XG5cblxuLyoqXG4gKiBUaGUgQmx1cllGaWx0ZXIgYXBwbGllcyBhIGhvcml6b250YWwgR2F1c3NpYW4gYmx1ciB0byBhbiBvYmplY3QuXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLkFic3RyYWN0RmlsdGVyXG4gKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzXG4gKi9cbmZ1bmN0aW9uIEJsdXJZRmlsdGVyKClcbntcbiAgICBjb3JlLkFic3RyYWN0RmlsdGVyLmNhbGwodGhpcyxcbiAgICAgICAgLy8gdmVydGV4IHNoYWRlclxuICAgICAgICBcImF0dHJpYnV0ZSB2ZWMyIGFWZXJ0ZXhQb3NpdGlvbjtcXG5hdHRyaWJ1dGUgdmVjMiBhVGV4dHVyZUNvb3JkO1xcbmF0dHJpYnV0ZSB2ZWM0IGFDb2xvcjtcXG5cXG51bmlmb3JtIGZsb2F0IHN0cmVuZ3RoO1xcbnVuaWZvcm0gbWF0MyBwcm9qZWN0aW9uTWF0cml4O1xcblxcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xcbnZhcnlpbmcgdmVjNCB2Q29sb3I7XFxudmFyeWluZyB2ZWMyIHZCbHVyVGV4Q29vcmRzWzZdO1xcblxcbnZvaWQgbWFpbih2b2lkKVxcbntcXG4gICAgZ2xfUG9zaXRpb24gPSB2ZWM0KChwcm9qZWN0aW9uTWF0cml4ICogdmVjMygoYVZlcnRleFBvc2l0aW9uKSwgMS4wKSkueHksIDAuMCwgMS4wKTtcXG4gICAgdlRleHR1cmVDb29yZCA9IGFUZXh0dXJlQ29vcmQ7XFxuXFxuICAgIHZCbHVyVGV4Q29vcmRzWyAwXSA9IGFUZXh0dXJlQ29vcmQgKyB2ZWMyKDAuMCwgLTAuMDEyICogc3RyZW5ndGgpO1xcbiAgICB2Qmx1clRleENvb3Jkc1sgMV0gPSBhVGV4dHVyZUNvb3JkICsgdmVjMigwLjAsIC0wLjAwOCAqIHN0cmVuZ3RoKTtcXG4gICAgdkJsdXJUZXhDb29yZHNbIDJdID0gYVRleHR1cmVDb29yZCArIHZlYzIoMC4wLCAtMC4wMDQgKiBzdHJlbmd0aCk7XFxuICAgIHZCbHVyVGV4Q29vcmRzWyAzXSA9IGFUZXh0dXJlQ29vcmQgKyB2ZWMyKDAuMCwgIDAuMDA0ICogc3RyZW5ndGgpO1xcbiAgICB2Qmx1clRleENvb3Jkc1sgNF0gPSBhVGV4dHVyZUNvb3JkICsgdmVjMigwLjAsICAwLjAwOCAqIHN0cmVuZ3RoKTtcXG4gICAgdkJsdXJUZXhDb29yZHNbIDVdID0gYVRleHR1cmVDb29yZCArIHZlYzIoMC4wLCAgMC4wMTIgKiBzdHJlbmd0aCk7XFxuXFxuICAgdkNvbG9yID0gdmVjNChhQ29sb3IucmdiICogYUNvbG9yLmEsIGFDb2xvci5hKTtcXG59XFxuXCIsXG4gICAgICAgIC8vIGZyYWdtZW50IHNoYWRlclxuICAgICAgICBcInByZWNpc2lvbiBsb3dwIGZsb2F0O1xcblxcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xcbnZhcnlpbmcgdmVjMiB2Qmx1clRleENvb3Jkc1s2XTtcXG52YXJ5aW5nIHZlYzQgdkNvbG9yO1xcblxcbnVuaWZvcm0gc2FtcGxlcjJEIHVTYW1wbGVyO1xcblxcbnZvaWQgbWFpbih2b2lkKVxcbntcXG4gICAgZ2xfRnJhZ0NvbG9yID0gdmVjNCgwLjApO1xcblxcbiAgICBnbF9GcmFnQ29sb3IgKz0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2Qmx1clRleENvb3Jkc1sgMF0pKjAuMDA0NDMxODQ4NDExOTM4MzQxO1xcbiAgICBnbF9GcmFnQ29sb3IgKz0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2Qmx1clRleENvb3Jkc1sgMV0pKjAuMDUzOTkwOTY2NTEzMTg5ODU7XFxuICAgIGdsX0ZyYWdDb2xvciArPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZCbHVyVGV4Q29vcmRzWyAyXSkqMC4yNDE5NzA3MjQ1MTkxNDU0O1xcbiAgICBnbF9GcmFnQ29sb3IgKz0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2VGV4dHVyZUNvb3JkICAgICApKjAuMzk4OTQyMjgwNDAxNDMyNztcXG4gICAgZ2xfRnJhZ0NvbG9yICs9IHRleHR1cmUyRCh1U2FtcGxlciwgdkJsdXJUZXhDb29yZHNbIDNdKSowLjI0MTk3MDcyNDUxOTE0NTQ7XFxuICAgIGdsX0ZyYWdDb2xvciArPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZCbHVyVGV4Q29vcmRzWyA0XSkqMC4wNTM5OTA5NjY1MTMxODk4NTtcXG4gICAgZ2xfRnJhZ0NvbG9yICs9IHRleHR1cmUyRCh1U2FtcGxlciwgdkJsdXJUZXhDb29yZHNbIDVdKSowLjAwNDQzMTg0ODQxMTkzODM0MTtcXG59XFxuXCIsXG4gICAgICAgIC8vIHNldCB0aGUgdW5pZm9ybXNcbiAgICAgICAge1xuICAgICAgICAgICAgc3RyZW5ndGg6IHsgdHlwZTogJzFmJywgdmFsdWU6IDEgfVxuICAgICAgICB9XG4gICAgKTtcblxuICAgIHRoaXMucGFzc2VzID0gMTtcbiAgICB0aGlzLnN0cmVuZ3RoID0gNDtcbn1cblxuQmx1cllGaWx0ZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShjb3JlLkFic3RyYWN0RmlsdGVyLnByb3RvdHlwZSk7XG5CbHVyWUZpbHRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBCbHVyWUZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gQmx1cllGaWx0ZXI7XG5cbkJsdXJZRmlsdGVyLnByb3RvdHlwZS5hcHBseUZpbHRlciA9IGZ1bmN0aW9uIChyZW5kZXJlciwgaW5wdXQsIG91dHB1dCwgY2xlYXIpXG57XG4gICAgdmFyIHNoYWRlciA9IHRoaXMuZ2V0U2hhZGVyKHJlbmRlcmVyKTtcblxuICAgIHRoaXMudW5pZm9ybXMuc3RyZW5ndGgudmFsdWUgPSBNYXRoLmFicyh0aGlzLnN0cmVuZ3RoKSAvIDQgLyB0aGlzLnBhc3NlcyAqIChpbnB1dC5mcmFtZS5oZWlnaHQgLyBpbnB1dC5zaXplLmhlaWdodCk7XG5cbiAgICBpZih0aGlzLnBhc3NlcyA9PT0gMSlcbiAgICB7XG4gICAgICAgIHJlbmRlcmVyLmZpbHRlck1hbmFnZXIuYXBwbHlGaWx0ZXIoc2hhZGVyLCBpbnB1dCwgb3V0cHV0LCBjbGVhcik7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHZhciByZW5kZXJUYXJnZXQgPSByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLmdldFJlbmRlclRhcmdldCh0cnVlKTtcbiAgICAgICAgdmFyIGZsaXAgPSBpbnB1dDtcbiAgICAgICAgdmFyIGZsb3AgPSByZW5kZXJUYXJnZXQ7XG5cbiAgICAgICAgZm9yKHZhciBpID0gMDsgaSA8IHRoaXMucGFzc2VzLTE7IGkrKylcbiAgICAgICAge1xuICAgICAgICAgICAgcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5hcHBseUZpbHRlcihzaGFkZXIsIGZsaXAsIGZsb3AsIHRydWUpO1xuXG4gICAgICAgICAgIHZhciB0ZW1wID0gZmxvcDtcbiAgICAgICAgICAgZmxvcCA9IGZsaXA7XG4gICAgICAgICAgIGZsaXAgPSB0ZW1wO1xuICAgICAgICB9XG5cbiAgICAgICAgcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5hcHBseUZpbHRlcihzaGFkZXIsIGZsaXAsIG91dHB1dCwgY2xlYXIpO1xuXG4gICAgICAgIHJlbmRlcmVyLmZpbHRlck1hbmFnZXIucmV0dXJuUmVuZGVyVGFyZ2V0KHJlbmRlclRhcmdldCk7XG4gICAgfVxufTtcblxuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhCbHVyWUZpbHRlci5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBzdHJlbmd0aCBvZiBib3RoIHRoZSBibHVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuQmx1cllGaWx0ZXIjXG4gICAgICogQGRlZmF1bHQgMlxuICAgICAqL1xuICAgIGJsdXI6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gIHRoaXMuc3RyZW5ndGg7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnBhZGRpbmcgPSBNYXRoLmFicyh2YWx1ZSkgKiAwLjU7XG4gICAgICAgICAgICB0aGlzLnN0cmVuZ3RoID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG59KTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vLi4vY29yZScpO1xuLy8gQHNlZSBodHRwczovL2dpdGh1Yi5jb20vc3Vic3RhY2svYnJmcy9pc3N1ZXMvMjVcblxuXG4vKipcbiAqIEEgU21hcnQgQmx1ciBGaWx0ZXIuXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLkFic3RyYWN0RmlsdGVyXG4gKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzXG4gKi9cbmZ1bmN0aW9uIFNtYXJ0Qmx1ckZpbHRlcigpXG57XG4gICAgY29yZS5BYnN0cmFjdEZpbHRlci5jYWxsKHRoaXMsXG4gICAgICAgIC8vIHZlcnRleCBzaGFkZXJcbiAgICAgICAgbnVsbCxcbiAgICAgICAgLy8gZnJhZ21lbnQgc2hhZGVyXG4gICAgICAgIFwicHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XFxuXFxudmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7XFxuXFxudW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXI7XFxudW5pZm9ybSB2ZWMyIGRlbHRhO1xcblxcbmZsb2F0IHJhbmRvbSh2ZWMzIHNjYWxlLCBmbG9hdCBzZWVkKVxcbntcXG4gICAgcmV0dXJuIGZyYWN0KHNpbihkb3QoZ2xfRnJhZ0Nvb3JkLnh5eiArIHNlZWQsIHNjYWxlKSkgKiA0Mzc1OC41NDUzICsgc2VlZCk7XFxufVxcblxcbnZvaWQgbWFpbih2b2lkKVxcbntcXG4gICAgdmVjNCBjb2xvciA9IHZlYzQoMC4wKTtcXG4gICAgZmxvYXQgdG90YWwgPSAwLjA7XFxuXFxuICAgIGZsb2F0IG9mZnNldCA9IHJhbmRvbSh2ZWMzKDEyLjk4OTgsIDc4LjIzMywgMTUxLjcxODIpLCAwLjApO1xcblxcbiAgICBmb3IgKGZsb2F0IHQgPSAtMzAuMDsgdCA8PSAzMC4wOyB0KyspXFxuICAgIHtcXG4gICAgICAgIGZsb2F0IHBlcmNlbnQgPSAodCArIG9mZnNldCAtIDAuNSkgLyAzMC4wO1xcbiAgICAgICAgZmxvYXQgd2VpZ2h0ID0gMS4wIC0gYWJzKHBlcmNlbnQpO1xcbiAgICAgICAgdmVjNCBzYW1wbGUgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZUZXh0dXJlQ29vcmQgKyBkZWx0YSAqIHBlcmNlbnQpO1xcbiAgICAgICAgc2FtcGxlLnJnYiAqPSBzYW1wbGUuYTtcXG4gICAgICAgIGNvbG9yICs9IHNhbXBsZSAqIHdlaWdodDtcXG4gICAgICAgIHRvdGFsICs9IHdlaWdodDtcXG4gICAgfVxcblxcbiAgICBnbF9GcmFnQ29sb3IgPSBjb2xvciAvIHRvdGFsO1xcbiAgICBnbF9GcmFnQ29sb3IucmdiIC89IGdsX0ZyYWdDb2xvci5hICsgMC4wMDAwMTtcXG59XFxuXCIsXG4gICAgICAgIC8vIHVuaWZvcm1zXG4gICAgICAgIHtcbiAgICAgICAgICBkZWx0YTogeyB0eXBlOiAndjInLCB2YWx1ZTogeyB4OiAwLjEsIHk6IDAuMCB9IH1cbiAgICAgICAgfVxuICAgICk7XG59XG5cblNtYXJ0Qmx1ckZpbHRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuQWJzdHJhY3RGaWx0ZXIucHJvdG90eXBlKTtcblNtYXJ0Qmx1ckZpbHRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBTbWFydEJsdXJGaWx0ZXI7XG5tb2R1bGUuZXhwb3J0cyA9IFNtYXJ0Qmx1ckZpbHRlcjtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vLi4vY29yZScpO1xuLy8gQHNlZSBodHRwczovL2dpdGh1Yi5jb20vc3Vic3RhY2svYnJmcy9pc3N1ZXMvMjVcblxuXG4vKipcbiAqIFRoZSBDb2xvck1hdHJpeEZpbHRlciBjbGFzcyBsZXRzIHlvdSBhcHBseSBhIDV4NCBtYXRyaXggdHJhbnNmb3JtYXRpb24gb24gdGhlIFJHQkFcbiAqIGNvbG9yIGFuZCBhbHBoYSB2YWx1ZXMgb2YgZXZlcnkgcGl4ZWwgb24geW91ciBkaXNwbGF5T2JqZWN0IHRvIHByb2R1Y2UgYSByZXN1bHRcbiAqIHdpdGggYSBuZXcgc2V0IG9mIFJHQkEgY29sb3IgYW5kIGFscGhhIHZhbHVlcy4gSXQncyBwcmV0dHkgcG93ZXJmdWwhXG4gKlxuICogYGBganNcbiAqICB2YXIgY29sb3JNYXRyaXggPSBuZXcgUElYSS5Db2xvck1hdHJpeEZpbHRlcigpO1xuICogIGNvbnRhaW5lci5maWx0ZXJzID0gW2NvbG9yTWF0cml4XTtcbiAqICBjb2xvck1hdHJpeC5jb250cmFzdCgyKTtcbiAqIGBgYFxuICogQGF1dGhvciBDbMOpbWVudCBDaGVuZWJhdWx0IDxjbGVtZW50QGdvb2Rib3lkaWdpdGFsLmNvbT5cbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5BYnN0cmFjdEZpbHRlclxuICogQG1lbWJlcm9mIFBJWEkuZmlsdGVyc1xuICovXG5mdW5jdGlvbiBDb2xvck1hdHJpeEZpbHRlcigpXG57XG4gICAgY29yZS5BYnN0cmFjdEZpbHRlci5jYWxsKHRoaXMsXG4gICAgICAgIC8vIHZlcnRleCBzaGFkZXJcbiAgICAgICAgbnVsbCxcbiAgICAgICAgLy8gZnJhZ21lbnQgc2hhZGVyXG4gICAgICAgIFwicHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XFxuXFxudmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7XFxudW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXI7XFxudW5pZm9ybSBmbG9hdCBtWzI1XTtcXG5cXG52b2lkIG1haW4odm9pZClcXG57XFxuXFxuICAgIHZlYzQgYyA9IHRleHR1cmUyRCh1U2FtcGxlciwgdlRleHR1cmVDb29yZCk7XFxuXFxuICAgIGdsX0ZyYWdDb2xvci5yID0gKG1bMF0gKiBjLnIpO1xcbiAgICAgICAgZ2xfRnJhZ0NvbG9yLnIgKz0gKG1bMV0gKiBjLmcpO1xcbiAgICAgICAgZ2xfRnJhZ0NvbG9yLnIgKz0gKG1bMl0gKiBjLmIpO1xcbiAgICAgICAgZ2xfRnJhZ0NvbG9yLnIgKz0gKG1bM10gKiBjLmEpO1xcbiAgICAgICAgZ2xfRnJhZ0NvbG9yLnIgKz0gbVs0XTtcXG5cXG4gICAgZ2xfRnJhZ0NvbG9yLmcgPSAobVs1XSAqIGMucik7XFxuICAgICAgICBnbF9GcmFnQ29sb3IuZyArPSAobVs2XSAqIGMuZyk7XFxuICAgICAgICBnbF9GcmFnQ29sb3IuZyArPSAobVs3XSAqIGMuYik7XFxuICAgICAgICBnbF9GcmFnQ29sb3IuZyArPSAobVs4XSAqIGMuYSk7XFxuICAgICAgICBnbF9GcmFnQ29sb3IuZyArPSBtWzldO1xcblxcbiAgICAgZ2xfRnJhZ0NvbG9yLmIgPSAobVsxMF0gKiBjLnIpO1xcbiAgICAgICAgZ2xfRnJhZ0NvbG9yLmIgKz0gKG1bMTFdICogYy5nKTtcXG4gICAgICAgIGdsX0ZyYWdDb2xvci5iICs9IChtWzEyXSAqIGMuYik7XFxuICAgICAgICBnbF9GcmFnQ29sb3IuYiArPSAobVsxM10gKiBjLmEpO1xcbiAgICAgICAgZ2xfRnJhZ0NvbG9yLmIgKz0gbVsxNF07XFxuXFxuICAgICBnbF9GcmFnQ29sb3IuYSA9IChtWzE1XSAqIGMucik7XFxuICAgICAgICBnbF9GcmFnQ29sb3IuYSArPSAobVsxNl0gKiBjLmcpO1xcbiAgICAgICAgZ2xfRnJhZ0NvbG9yLmEgKz0gKG1bMTddICogYy5iKTtcXG4gICAgICAgIGdsX0ZyYWdDb2xvci5hICs9IChtWzE4XSAqIGMuYSk7XFxuICAgICAgICBnbF9GcmFnQ29sb3IuYSArPSBtWzE5XTtcXG5cXG59XFxuXCIsXG4gICAgICAgIC8vIGN1c3RvbSB1bmlmb3Jtc1xuICAgICAgICB7XG4gICAgICAgICAgICBtOiB7XG4gICAgICAgICAgICAgICAgdHlwZTogJzFmdicsIHZhbHVlOiBbXG4gICAgICAgICAgICAgICAgICAgIDEsIDAsIDAsIDAsIDAsXG4gICAgICAgICAgICAgICAgICAgIDAsIDEsIDAsIDAsIDAsXG4gICAgICAgICAgICAgICAgICAgIDAsIDAsIDEsIDAsIDAsXG4gICAgICAgICAgICAgICAgICAgIDAsIDAsIDAsIDEsIDBcbiAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICApO1xufVxuXG5Db2xvck1hdHJpeEZpbHRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuQWJzdHJhY3RGaWx0ZXIucHJvdG90eXBlKTtcbkNvbG9yTWF0cml4RmlsdGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IENvbG9yTWF0cml4RmlsdGVyO1xubW9kdWxlLmV4cG9ydHMgPSBDb2xvck1hdHJpeEZpbHRlcjtcblxuXG4vKipcbiAqIFRyYW5zZm9ybXMgY3VycmVudCBtYXRyaXggYW5kIHNldCB0aGUgbmV3IG9uZVxuICpcbiAqIEBwYXJhbSBtYXRyaXgge251bWJlcltdfSAobWF0IDV4NClcbiAqIEBwYXJhbSBtdWx0aXBseSB7Ym9vbGVhbn0gaWYgdHJ1ZSwgY3VycmVudCBtYXRyaXggYW5kIG1hdHJpeCBhcmUgbXVsdGlwbGllZC4gSWYgZmFsc2UsIGp1c3Qgc2V0IHRoZSBjdXJyZW50IG1hdHJpeCB3aXRoIEBwYXJhbSBtYXRyaXhcbiAqL1xuQ29sb3JNYXRyaXhGaWx0ZXIucHJvdG90eXBlLl9sb2FkTWF0cml4ID0gZnVuY3Rpb24gKG1hdHJpeCwgbXVsdGlwbHkpXG57XG4gICAgbXVsdGlwbHkgPSAhIW11bHRpcGx5O1xuXG4gICAgdmFyIG5ld01hdHJpeCA9IG1hdHJpeDtcblxuICAgIGlmIChtdWx0aXBseSkge1xuICAgICAgICB0aGlzLl9tdWx0aXBseShuZXdNYXRyaXgsIHRoaXMudW5pZm9ybXMubS52YWx1ZSwgbWF0cml4KTtcbiAgICAgICAgbmV3TWF0cml4ID0gdGhpcy5fY29sb3JNYXRyaXgobmV3TWF0cml4KTtcbiAgICB9XG5cbiAgICAvLyBzZXQgdGhlIG5ldyBtYXRyaXhcbiAgICB0aGlzLnVuaWZvcm1zLm0udmFsdWUgPSBuZXdNYXRyaXg7XG59O1xuXG4vKipcbiAqIE11bHRpcGxpZXMgdHdvIG1hdDUnc1xuICpcbiAqIEBwYXJhbSBvdXQge251bWJlcltdfSAobWF0IDV4NCkgdGhlIHJlY2VpdmluZyBtYXRyaXhcbiAqIEBwYXJhbSBhIHtudW1iZXJbXX0gKG1hdCA1eDQpIHRoZSBmaXJzdCBvcGVyYW5kXG4gKiBAcGFyYW0gYiB7bnVtYmVyW119IChtYXQgNXg0KSB0aGUgc2Vjb25kIG9wZXJhbmRcbiAqIEByZXR1cm5zIG91dCB7bnVtYmVyW119IChtYXQgNXg0KVxuICovXG5Db2xvck1hdHJpeEZpbHRlci5wcm90b3R5cGUuX211bHRpcGx5ID0gZnVuY3Rpb24gKG91dCwgYSwgYilcbntcblxuICAgIC8vIFJlZCBDaGFubmVsXG4gICAgb3V0WzBdID0gKGFbMF0gKiBiWzBdKSArIChhWzFdICogYls1XSkgKyAoYVsyXSAqIGJbMTBdKSArIChhWzNdICogYlsxNV0pO1xuICAgIG91dFsxXSA9IChhWzBdICogYlsxXSkgKyAoYVsxXSAqIGJbNl0pICsgKGFbMl0gKiBiWzExXSkgKyAoYVszXSAqIGJbMTZdKTtcbiAgICBvdXRbMl0gPSAoYVswXSAqIGJbMl0pICsgKGFbMV0gKiBiWzddKSArIChhWzJdICogYlsxMl0pICsgKGFbM10gKiBiWzE3XSk7XG4gICAgb3V0WzNdID0gKGFbMF0gKiBiWzNdKSArIChhWzFdICogYls4XSkgKyAoYVsyXSAqIGJbMTNdKSArIChhWzNdICogYlsxOF0pO1xuICAgIG91dFs0XSA9IChhWzBdICogYls0XSkgKyAoYVsxXSAqIGJbOV0pICsgKGFbMl0gKiBiWzE0XSkgKyAoYVszXSAqIGJbMTldKTtcblxuICAgIC8vIEdyZWVuIENoYW5uZWxcbiAgICBvdXRbNV0gPSAoYVs1XSAqIGJbMF0pICsgKGFbNl0gKiBiWzVdKSArIChhWzddICogYlsxMF0pICsgKGFbOF0gKiBiWzE1XSk7XG4gICAgb3V0WzZdID0gKGFbNV0gKiBiWzFdKSArIChhWzZdICogYls2XSkgKyAoYVs3XSAqIGJbMTFdKSArIChhWzhdICogYlsxNl0pO1xuICAgIG91dFs3XSA9IChhWzVdICogYlsyXSkgKyAoYVs2XSAqIGJbN10pICsgKGFbN10gKiBiWzEyXSkgKyAoYVs4XSAqIGJbMTddKTtcbiAgICBvdXRbOF0gPSAoYVs1XSAqIGJbM10pICsgKGFbNl0gKiBiWzhdKSArIChhWzddICogYlsxM10pICsgKGFbOF0gKiBiWzE4XSk7XG4gICAgb3V0WzldID0gKGFbNV0gKiBiWzRdKSArIChhWzZdICogYls5XSkgKyAoYVs3XSAqIGJbMTRdKSArIChhWzhdICogYlsxOV0pO1xuXG4gICAgLy8gQmx1ZSBDaGFubmVsXG4gICAgb3V0WzEwXSA9IChhWzEwXSAqIGJbMF0pICsgKGFbMTFdICogYls1XSkgKyAoYVsxMl0gKiBiWzEwXSkgKyAoYVsxM10gKiBiWzE1XSk7XG4gICAgb3V0WzExXSA9IChhWzEwXSAqIGJbMV0pICsgKGFbMTFdICogYls2XSkgKyAoYVsxMl0gKiBiWzExXSkgKyAoYVsxM10gKiBiWzE2XSk7XG4gICAgb3V0WzEyXSA9IChhWzEwXSAqIGJbMl0pICsgKGFbMTFdICogYls3XSkgKyAoYVsxMl0gKiBiWzEyXSkgKyAoYVsxM10gKiBiWzE3XSk7XG4gICAgb3V0WzEzXSA9IChhWzEwXSAqIGJbM10pICsgKGFbMTFdICogYls4XSkgKyAoYVsxMl0gKiBiWzEzXSkgKyAoYVsxM10gKiBiWzE4XSk7XG4gICAgb3V0WzE0XSA9IChhWzEwXSAqIGJbNF0pICsgKGFbMTFdICogYls5XSkgKyAoYVsxMl0gKiBiWzE0XSkgKyAoYVsxM10gKiBiWzE5XSk7XG5cbiAgICAvLyBBbHBoYSBDaGFubmVsXG4gICAgb3V0WzE1XSA9IChhWzE1XSAqIGJbMF0pICsgKGFbMTZdICogYls1XSkgKyAoYVsxN10gKiBiWzEwXSkgKyAoYVsxOF0gKiBiWzE1XSk7XG4gICAgb3V0WzE2XSA9IChhWzE1XSAqIGJbMV0pICsgKGFbMTZdICogYls2XSkgKyAoYVsxN10gKiBiWzExXSkgKyAoYVsxOF0gKiBiWzE2XSk7XG4gICAgb3V0WzE3XSA9IChhWzE1XSAqIGJbMl0pICsgKGFbMTZdICogYls3XSkgKyAoYVsxN10gKiBiWzEyXSkgKyAoYVsxOF0gKiBiWzE3XSk7XG4gICAgb3V0WzE4XSA9IChhWzE1XSAqIGJbM10pICsgKGFbMTZdICogYls4XSkgKyAoYVsxN10gKiBiWzEzXSkgKyAoYVsxOF0gKiBiWzE4XSk7XG4gICAgb3V0WzE5XSA9IChhWzE1XSAqIGJbNF0pICsgKGFbMTZdICogYls5XSkgKyAoYVsxN10gKiBiWzE0XSkgKyAoYVsxOF0gKiBiWzE5XSk7XG5cbiAgICByZXR1cm4gb3V0O1xufTtcblxuLyoqXG4gKiBDcmVhdGUgYSBGbG9hdDMyIEFycmF5IGFuZCBub3JtYWxpemUgdGhlIG9mZnNldCBjb21wb25lbnQgdG8gMC0xXG4gKlxuICogQHBhcmFtIG1hdHJpeCB7bnVtYmVyW119IChtYXQgNXg0KVxuICogQHJldHVybiBtIHtudW1iZXJbXX0gKG1hdCA1eDQpIHdpdGggYWxsIHZhbHVlcyBiZXR3ZWVuIDAtMVxuICovXG5Db2xvck1hdHJpeEZpbHRlci5wcm90b3R5cGUuX2NvbG9yTWF0cml4ID0gZnVuY3Rpb24gKG1hdHJpeClcbntcbiAgICAvLyBDcmVhdGUgYSBGbG9hdDMyIEFycmF5IGFuZCBub3JtYWxpemUgdGhlIG9mZnNldCBjb21wb25lbnQgdG8gMC0xXG4gICAgdmFyIG0gPSBuZXcgRmxvYXQzMkFycmF5KG1hdHJpeCk7XG4gICAgbVs0XSAvPSAyNTU7XG4gICAgbVs5XSAvPSAyNTU7XG4gICAgbVsxNF0gLz0gMjU1O1xuICAgIG1bMTldIC89IDI1NTtcblxuICAgIHJldHVybiBtO1xufTtcblxuLyoqXG4gKiBBZGp1c3RzIGJyaWdodG5lc3NcbiAqXG4gKiBAcGFyYW0gYiB7bnVtYmVyfSB2YWx1ZSBvZiB0aGUgYnJpZ3RobmVzcyAoMCBpcyBibGFjaylcbiAqIEBwYXJhbSBtdWx0aXBseSB7Ym9vbGVhbn0gcmVmZXIgdG8gLl9sb2FkTWF0cml4KCkgbWV0aG9kXG4gKi9cbkNvbG9yTWF0cml4RmlsdGVyLnByb3RvdHlwZS5icmlnaHRuZXNzID0gZnVuY3Rpb24gKGIsIG11bHRpcGx5KVxue1xuICAgIHZhciBtYXRyaXggPSBbXG4gICAgICAgIGIsIDAsIDAsIDAsIDAsXG4gICAgICAgIDAsIGIsIDAsIDAsIDAsXG4gICAgICAgIDAsIDAsIGIsIDAsIDAsXG4gICAgICAgIDAsIDAsIDAsIDEsIDBcbiAgICBdO1xuXG4gICAgdGhpcy5fbG9hZE1hdHJpeChtYXRyaXgsIG11bHRpcGx5KTtcbn07XG5cbi8qKlxuICogU2V0IHRoZSBtYXRyaWNlcyBpbiBncmV5IHNjYWxlc1xuICpcbiAqIEBwYXJhbSBzY2FsZSB7bnVtYmVyfSB2YWx1ZSBvZiB0aGUgZ3JleSAoMCBpcyBibGFjaylcbiAqIEBwYXJhbSBtdWx0aXBseSB7Ym9vbGVhbn0gcmVmZXIgdG8gLl9sb2FkTWF0cml4KCkgbWV0aG9kXG4gKi9cbkNvbG9yTWF0cml4RmlsdGVyLnByb3RvdHlwZS5ncmV5c2NhbGUgPSBmdW5jdGlvbiAoc2NhbGUsIG11bHRpcGx5KVxue1xuICAgIHZhciBtYXRyaXggPSBbXG4gICAgICAgIHNjYWxlLCBzY2FsZSwgc2NhbGUsIDAsIDAsXG4gICAgICAgIHNjYWxlLCBzY2FsZSwgc2NhbGUsIDAsIDAsXG4gICAgICAgIHNjYWxlLCBzY2FsZSwgc2NhbGUsIDAsIDAsXG4gICAgICAgIDAsIDAsIDAsIDEsIDBcbiAgICBdO1xuXG4gICAgdGhpcy5fbG9hZE1hdHJpeChtYXRyaXgsIG11bHRpcGx5KTtcbn07XG4vL0FtZXJpY2FuaXplZCBhbGlhc1xuQ29sb3JNYXRyaXhGaWx0ZXIucHJvdG90eXBlLmdyYXlzY2FsZSA9IENvbG9yTWF0cml4RmlsdGVyLnByb3RvdHlwZS5ncmV5c2NhbGU7XG5cbi8qKlxuICogU2V0IHRoZSBibGFjayBhbmQgd2hpdGUgbWF0cmljZVxuICogTXVsdGlwbHkgdGhlIGN1cnJlbnQgbWF0cml4XG4gKlxuICogQHBhcmFtIG11bHRpcGx5IHtib29sZWFufSByZWZlciB0byAuX2xvYWRNYXRyaXgoKSBtZXRob2RcbiAqL1xuQ29sb3JNYXRyaXhGaWx0ZXIucHJvdG90eXBlLmJsYWNrQW5kV2hpdGUgPSBmdW5jdGlvbiAobXVsdGlwbHkpXG57XG4gICAgdmFyIG1hdHJpeCA9IFtcbiAgICAgICAgMC4zLCAwLjYsIDAuMSwgMCwgMCxcbiAgICAgICAgMC4zLCAwLjYsIDAuMSwgMCwgMCxcbiAgICAgICAgMC4zLCAwLjYsIDAuMSwgMCwgMCxcbiAgICAgICAgMCwgMCwgMCwgMSwgMFxuICAgIF07XG5cbiAgICB0aGlzLl9sb2FkTWF0cml4KG1hdHJpeCwgbXVsdGlwbHkpO1xufTtcblxuLyoqXG4gKiBTZXQgdGhlIGh1ZSBwcm9wZXJ0eSBvZiB0aGUgY29sb3JcbiAqXG4gKiBAcGFyYW0gcm90YXRpb24ge251bWJlcn0gaW4gZGVncmVlc1xuICogQHBhcmFtIG11bHRpcGx5IHtib29sZWFufSByZWZlciB0byAuX2xvYWRNYXRyaXgoKSBtZXRob2RcbiAqL1xuQ29sb3JNYXRyaXhGaWx0ZXIucHJvdG90eXBlLmh1ZSA9IGZ1bmN0aW9uIChyb3RhdGlvbiwgbXVsdGlwbHkpXG57XG4gICAgcm90YXRpb24gPSAocm90YXRpb24gfHwgMCkgLyAxODAgKiBNYXRoLlBJO1xuICAgIHZhciBjb3MgPSBNYXRoLmNvcyhyb3RhdGlvbiksXG4gICAgICAgIHNpbiA9IE1hdGguc2luKHJvdGF0aW9uKTtcblxuICAgIC8vIGx1bWluYW5jZVJlZCwgbHVtaW5hbmNlR3JlZW4sIGx1bWluYW5jZUJsdWVcbiAgICB2YXIgbHVtUiA9IDAuMjEzLCAvLyBvciAwLjMwODZcbiAgICAgICAgbHVtRyA9IDAuNzE1LCAvLyBvciAwLjYwOTRcbiAgICAgICAgbHVtQiA9IDAuMDcyOyAvLyBvciAwLjA4MjBcblxuICAgIHZhciBtYXRyaXggPSBbXG4gICAgICAgIGx1bVIgKyBjb3MgKiAoMSAtIGx1bVIpICsgc2luICogKC1sdW1SKSwgbHVtRyArIGNvcyAqICgtbHVtRykgKyBzaW4gKiAoLWx1bUcpLCBsdW1CICsgY29zICogKC1sdW1CKSArIHNpbiAqICgxIC0gbHVtQiksIDAsIDAsXG4gICAgICAgIGx1bVIgKyBjb3MgKiAoLWx1bVIpICsgc2luICogKDAuMTQzKSwgbHVtRyArIGNvcyAqICgxIC0gbHVtRykgKyBzaW4gKiAoMC4xNDApLCBsdW1CICsgY29zICogKC1sdW1CKSArIHNpbiAqICgtMC4yODMpLCAwLCAwLFxuICAgICAgICBsdW1SICsgY29zICogKC1sdW1SKSArIHNpbiAqICgtKDEgLSBsdW1SKSksIGx1bUcgKyBjb3MgKiAoLWx1bUcpICsgc2luICogKGx1bUcpLCBsdW1CICsgY29zICogKDEgLSBsdW1CKSArIHNpbiAqIChsdW1CKSwgMCwgMCxcbiAgICAgICAgMCwgMCwgMCwgMSwgMFxuICAgIF07XG5cbiAgICB0aGlzLl9sb2FkTWF0cml4KG1hdHJpeCwgbXVsdGlwbHkpO1xufTtcblxuXG4vKipcbiAqIFNldCB0aGUgY29udHJhc3QgbWF0cml4LCBpbmNyZWFzZSB0aGUgc2VwYXJhdGlvbiBiZXR3ZWVuIGRhcmsgYW5kIGJyaWdodFxuICogSW5jcmVhc2UgY29udHJhc3QgOiBzaGFkb3dzIGRhcmtlciBhbmQgaGlnaGxpZ2h0cyBicmlnaHRlclxuICogRGVjcmVhc2UgY29udHJhc3QgOiBicmluZyB0aGUgc2hhZG93cyB1cCBhbmQgdGhlIGhpZ2hsaWdodHMgZG93blxuICpcbiAqIEBwYXJhbSBhbW91bnQge251bWJlcn0gdmFsdWUgb2YgdGhlIGNvbnRyYXN0XG4gKiBAcGFyYW0gbXVsdGlwbHkge2Jvb2xlYW59IHJlZmVyIHRvIC5fbG9hZE1hdHJpeCgpIG1ldGhvZFxuICovXG5Db2xvck1hdHJpeEZpbHRlci5wcm90b3R5cGUuY29udHJhc3QgPSBmdW5jdGlvbiAoYW1vdW50LCBtdWx0aXBseSlcbntcbiAgICB2YXIgdiA9IChhbW91bnQgfHwgMCkgKyAxO1xuICAgIHZhciBvID0gLTEyOCAqICh2IC0gMSk7XG5cbiAgICB2YXIgbWF0cml4ID0gW1xuICAgICAgICB2LCAwLCAwLCAwLCBvLFxuICAgICAgICAwLCB2LCAwLCAwLCBvLFxuICAgICAgICAwLCAwLCB2LCAwLCBvLFxuICAgICAgICAwLCAwLCAwLCAxLCAwXG4gICAgXTtcblxuICAgIHRoaXMuX2xvYWRNYXRyaXgobWF0cml4LCBtdWx0aXBseSk7XG59O1xuXG4vKipcbiAqIFNldCB0aGUgc2F0dXJhdGlvbiBtYXRyaXgsIGluY3JlYXNlIHRoZSBzZXBhcmF0aW9uIGJldHdlZW4gY29sb3JzXG4gKiBJbmNyZWFzZSBzYXR1cmF0aW9uIDogaW5jcmVhc2UgY29udHJhc3QsIGJyaWdodG5lc3MsIGFuZCBzaGFycG5lc3NcbiAqXG4gKiBAcGFyYW0gYW1vdW50IHtudW1iZXJ9XG4gKiBAcGFyYW0gbXVsdGlwbHkge2Jvb2xlYW59IHJlZmVyIHRvIC5fbG9hZE1hdHJpeCgpIG1ldGhvZFxuICovXG5Db2xvck1hdHJpeEZpbHRlci5wcm90b3R5cGUuc2F0dXJhdGUgPSBmdW5jdGlvbiAoYW1vdW50LCBtdWx0aXBseSlcbntcbiAgICB2YXIgeCA9IChhbW91bnQgfHwgMCkgKiAyIC8gMyArIDE7XG4gICAgdmFyIHkgPSAoKHggLSAxKSAqIC0wLjUpO1xuXG4gICAgdmFyIG1hdHJpeCA9IFtcbiAgICAgICAgeCwgeSwgeSwgMCwgMCxcbiAgICAgICAgeSwgeCwgeSwgMCwgMCxcbiAgICAgICAgeSwgeSwgeCwgMCwgMCxcbiAgICAgICAgMCwgMCwgMCwgMSwgMFxuICAgIF07XG5cbiAgICB0aGlzLl9sb2FkTWF0cml4KG1hdHJpeCwgbXVsdGlwbHkpO1xufTtcblxuLyoqXG4gKiBEZXNhdHVyYXRlIGltYWdlIChyZW1vdmUgY29sb3IpXG4gKlxuICogQ2FsbCB0aGUgc2F0dXJhdGUgZnVuY3Rpb25cbiAqXG4gKiBAcGFyYW0gbXVsdGlwbHkge2Jvb2xlYW59IHJlZmVyIHRvIC5fbG9hZE1hdHJpeCgpIG1ldGhvZFxuICovXG5Db2xvck1hdHJpeEZpbHRlci5wcm90b3R5cGUuZGVzYXR1cmF0ZSA9IGZ1bmN0aW9uIChtdWx0aXBseSkgLy8ganNoaW50IHVudXNlZDpmYWxzZVxue1xuICAgIHRoaXMuc2F0dXJhdGUoLTEpO1xufTtcblxuLyoqXG4gKiBOZWdhdGl2ZSBpbWFnZSAoaW52ZXJzZSBvZiBjbGFzc2ljIHJnYiBtYXRyaXgpXG4gKlxuICogQHBhcmFtIG11bHRpcGx5IHtib29sZWFufSByZWZlciB0byAuX2xvYWRNYXRyaXgoKSBtZXRob2RcbiAqL1xuQ29sb3JNYXRyaXhGaWx0ZXIucHJvdG90eXBlLm5lZ2F0aXZlID0gZnVuY3Rpb24gKG11bHRpcGx5KVxue1xuICAgIHZhciBtYXRyaXggPSBbXG4gICAgICAgIDAsIDEsIDEsIDAsIDAsXG4gICAgICAgIDEsIDAsIDEsIDAsIDAsXG4gICAgICAgIDEsIDEsIDAsIDAsIDAsXG4gICAgICAgIDAsIDAsIDAsIDEsIDBcbiAgICBdO1xuXG4gICAgdGhpcy5fbG9hZE1hdHJpeChtYXRyaXgsIG11bHRpcGx5KTtcbn07XG5cbi8qKlxuICogU2VwaWEgaW1hZ2VcbiAqXG4gKiBAcGFyYW0gbXVsdGlwbHkge2Jvb2xlYW59IHJlZmVyIHRvIC5fbG9hZE1hdHJpeCgpIG1ldGhvZFxuICovXG5Db2xvck1hdHJpeEZpbHRlci5wcm90b3R5cGUuc2VwaWEgPSBmdW5jdGlvbiAobXVsdGlwbHkpXG57XG4gICAgdmFyIG1hdHJpeCA9IFtcbiAgICAgICAgMC4zOTMsIDAuNzY4OTk5OSwgMC4xODg5OTk5OSwgMCwgMCxcbiAgICAgICAgMC4zNDksIDAuNjg1OTk5OSwgMC4xNjc5OTk5OSwgMCwgMCxcbiAgICAgICAgMC4yNzIsIDAuNTMzOTk5OSwgMC4xMzA5OTk5OSwgMCwgMCxcbiAgICAgICAgMCwgMCwgMCwgMSwgMFxuICAgIF07XG5cbiAgICB0aGlzLl9sb2FkTWF0cml4KG1hdHJpeCwgbXVsdGlwbHkpO1xufTtcblxuLyoqXG4gKiBDb2xvciBtb3Rpb24gcGljdHVyZSBwcm9jZXNzIGludmVudGVkIGluIDE5MTYgKHRoYW5rcyBEb21pbmljIFN6YWJsZXdza2kpXG4gKlxuICogQHBhcmFtIG11bHRpcGx5IHtib29sZWFufSByZWZlciB0byAuX2xvYWRNYXRyaXgoKSBtZXRob2RcbiAqL1xuQ29sb3JNYXRyaXhGaWx0ZXIucHJvdG90eXBlLnRlY2huaWNvbG9yID0gZnVuY3Rpb24gKG11bHRpcGx5KVxue1xuICAgIHZhciBtYXRyaXggPSBbXG4gICAgICAgIDEuOTEyNTI3Nzg5MTQ1NjA4MywgLTAuODU0NTM0NDk3Njk1MTY0NSwgLTAuMDkxNTU1MDg0ODI3NTU1ODUsIDAsIDExLjc5MzYwMzQzNDM3NzMzNyxcbiAgICAgICAgLTAuMzA4NzgzMzM4NTkyODA5NywgMS43NjU4OTA4NTU1NDU4NDI4LCAtMC4xMDYwMTc0MzA3NDcyMjI0NSwgMCwgLTcwLjM1MjA1MTYxNDYxMzk4LFxuICAgICAgICAtMC4yMzExMDMzNzc1NDg2MTYsIC0wLjc1MDE4OTkxOTc0NDAyMTIsIDEuODQ3NTk3ODE2MTA4MTg5LCAwLCAzMC45NTA5NDA4Njk0OTExMzgsXG4gICAgICAgIDAsIDAsIDAsIDEsIDBcbiAgICBdO1xuXG4gICAgdGhpcy5fbG9hZE1hdHJpeChtYXRyaXgsIG11bHRpcGx5KTtcbn07XG5cbi8qKlxuICogUG9sYXJvaWQgZmlsdGVyXG4gKlxuICogQHBhcmFtIG11bHRpcGx5IHtib29sZWFufSByZWZlciB0byAuX2xvYWRNYXRyaXgoKSBtZXRob2RcbiAqL1xuQ29sb3JNYXRyaXhGaWx0ZXIucHJvdG90eXBlLnBvbGFyb2lkID0gZnVuY3Rpb24gKG11bHRpcGx5KVxue1xuICAgIHZhciBtYXRyaXggPSBbXG4gICAgICAgIDEuNDM4LCAtMC4wNjIsIC0wLjA2MiwgMCwgMCxcbiAgICAgICAgLTAuMTIyLCAxLjM3OCwgLTAuMTIyLCAwLCAwLFxuICAgICAgICAtMC4wMTYsIC0wLjAxNiwgMS40ODMsIDAsIDAsXG4gICAgICAgIDAsIDAsIDAsIDEsIDBcbiAgICBdO1xuXG4gICAgdGhpcy5fbG9hZE1hdHJpeChtYXRyaXgsIG11bHRpcGx5KTtcbn07XG5cbi8qKlxuICogRmlsdGVyIHdobyB0cmFuc2Zvcm1zIDogUmVkIC0+IEJsdWUgYW5kIEJsdWUgLT4gUmVkXG4gKlxuICogQHBhcmFtIG11bHRpcGx5IHtib29sZWFufSByZWZlciB0byAuX2xvYWRNYXRyaXgoKSBtZXRob2RcbiAqL1xuQ29sb3JNYXRyaXhGaWx0ZXIucHJvdG90eXBlLnRvQkdSID0gZnVuY3Rpb24gKG11bHRpcGx5KVxue1xuICAgIHZhciBtYXRyaXggPSBbXG4gICAgICAgIDAsIDAsIDEsIDAsIDAsXG4gICAgICAgIDAsIDEsIDAsIDAsIDAsXG4gICAgICAgIDEsIDAsIDAsIDAsIDAsXG4gICAgICAgIDAsIDAsIDAsIDEsIDBcbiAgICBdO1xuXG4gICAgdGhpcy5fbG9hZE1hdHJpeChtYXRyaXgsIG11bHRpcGx5KTtcbn07XG5cbi8qKlxuICogQ29sb3IgcmV2ZXJzYWwgZmlsbSBpbnRyb2R1Y2VkIGJ5IEVhc3RtYW4gS29kYWsgaW4gMTkzNS4gKHRoYW5rcyBEb21pbmljIFN6YWJsZXdza2kpXG4gKlxuICogQHBhcmFtIG11bHRpcGx5IHtib29sZWFufSByZWZlciB0byAuX2xvYWRNYXRyaXgoKSBtZXRob2RcbiAqL1xuQ29sb3JNYXRyaXhGaWx0ZXIucHJvdG90eXBlLmtvZGFjaHJvbWUgPSBmdW5jdGlvbiAobXVsdGlwbHkpXG57XG4gICAgdmFyIG1hdHJpeCA9IFtcbiAgICAgICAgMS4xMjg1NTgyMzk2NTkzNTI1LCAtMC4zOTY3MzgyMjgzNjAxMzQ4LCAtMC4wMzk5MjU1OTE3MjkyMTc5MywgMCwgNjMuNzI5NTg3NjIxOTY1MDIsXG4gICAgICAgIC0wLjE2NDA0MzM5OTYyMjQ0NjE2LCAxLjA4MzUyNTE1NjYyOTEzMDQsIC0wLjA1NDk4ODA1MTE1NjMzMTMyLCAwLCAyNC43MzI0MDc4OTY3MDYyMDMsXG4gICAgICAgIC0wLjE2Nzg2MDEwNzA2MTU1NzYzLCAtMC41NjAzNDE2Mjc3Njk1MjQ4LCAxLjYwMTQ4NTA3NjE5NjQ5NDMsIDAsIDM1LjYyOTgyODA3NDYwOTQ2LFxuICAgICAgICAwLCAwLCAwLCAxLCAwXG4gICAgXTtcblxuICAgIHRoaXMuX2xvYWRNYXRyaXgobWF0cml4LCBtdWx0aXBseSk7XG59O1xuXG4vKipcbiAqIEJyb3duIGRlbGljaW91cyBicm93bmkgZmlsdGVyICh0aGFua3MgRG9taW5pYyBTemFibGV3c2tpKVxuICpcbiAqIEBwYXJhbSBtdWx0aXBseSB7Ym9vbGVhbn0gcmVmZXIgdG8gLl9sb2FkTWF0cml4KCkgbWV0aG9kXG4gKi9cbkNvbG9yTWF0cml4RmlsdGVyLnByb3RvdHlwZS5icm93bmkgPSBmdW5jdGlvbiAobXVsdGlwbHkpXG57XG4gICAgdmFyIG1hdHJpeCA9IFtcbiAgICAgICAgMC41OTk3MDIzNDk4MTU5NzE1LCAwLjM0NTUzMjQzMDQ4MzkxMjYzLCAtMC4yNzA4Mjk4Njc0NTM4MDQyLCAwLCA0Ny40MzE5Mjg1NTYwMDg3MyxcbiAgICAgICAgLTAuMDM3NzAzMjQ5ODM3NzgzMTU3LCAwLjg2MDk1Nzc1ODc5OTI2NDEsIDAuMTUwNTk1NTIzODg0NTk5MTMsIDAsIC0zNi45Njg0MTQ5ODMxOTEyNyxcbiAgICAgICAgMC4yNDExMzYzNTEyODE1MzMzNSwgLTAuMDc0NDEwMzc5MDg0MjI0OTIsIDAuNDQ5NzIxODIwNjQ4NzcxNTMsIDAsIC03LjU2MjA3NTI3NzU5MTI4MyxcbiAgICAgICAgMCwgMCwgMCwgMSwgMFxuICAgIF07XG5cbiAgICB0aGlzLl9sb2FkTWF0cml4KG1hdHJpeCwgbXVsdGlwbHkpO1xufTtcblxuLypcbiAqIFZpbnRhZ2UgZmlsdGVyICh0aGFua3MgRG9taW5pYyBTemFibGV3c2tpKVxuICpcbiAqIEBwYXJhbSBtdWx0aXBseSB7Ym9vbGVhbn0gcmVmZXIgdG8gLl9sb2FkTWF0cml4KCkgbWV0aG9kXG4gKi9cbkNvbG9yTWF0cml4RmlsdGVyLnByb3RvdHlwZS52aW50YWdlID0gZnVuY3Rpb24gKG11bHRpcGx5KVxue1xuICAgIHZhciBtYXRyaXggPSBbXG4gICAgICAgIDAuNjI3OTM0NTYzNTYwNTk5NCwgMC4zMjAyMTgzNDIwODE5MzY3LCAtMC4wMzk2NTQwODIxMTMxMjQ1MywgMCwgOS42NTEyODU4MzUyOTQxMjMsXG4gICAgICAgIDAuMDI1NzgzOTc3MDQ4MDg4NjgsIDAuNjQ0MTE4ODY0NDM3NDc3MSwgMC4wMzI1OTEyNzYxNjE0OTI5NCwgMCwgNy40NjI4MjkxNzY0NzA1OTEsXG4gICAgICAgIDAuMDQ2NjA1NTU1Njc4MjcxOSwgLTAuMDg1MTIzMjk4NzI0Nzg5MSwgMC41MjQxNjQ4MDE4NzAwNDY1LCAwLCA1LjE1OTE5MDU4ODIzNTI5NixcbiAgICAgICAgMCwgMCwgMCwgMSwgMFxuICAgIF07XG5cbiAgICB0aGlzLl9sb2FkTWF0cml4KG1hdHJpeCwgbXVsdGlwbHkpO1xufTtcblxuLypcbiAqIFdlIGRvbid0IGtub3cgZXhhY3RseSB3aGF0IGl0IGRvZXMsIGtpbmQgb2YgZ3JhZGllbnQgbWFwLCBidXQgZnVubnkgdG8gcGxheSB3aXRoIVxuICpcbiAqIEBwYXJhbSBkZXNhdHVyYXRpb24ge251bWJlcn1cbiAqIEBwYXJhbSB0b25lZCB7bnVtYmVyfVxuICogQHBhcmFtIGxpZ2h0Q29sb3Ige3N0cmluZ30gKGV4YW1wbGUgOiBcIjB4RkZFNTgwXCIpXG4gKiBAcGFyYW0gZGFya0NvbG9yIHtzdHJpbmd9ICAoZXhhbXBsZSA6IFwiMHhGRkU1ODBcIilcbiAqXG4gKiBAcGFyYW0gbXVsdGlwbHkge2Jvb2xlYW59IHJlZmVyIHRvIC5fbG9hZE1hdHJpeCgpIG1ldGhvZFxuICovXG5Db2xvck1hdHJpeEZpbHRlci5wcm90b3R5cGUuY29sb3JUb25lID0gZnVuY3Rpb24gKGRlc2F0dXJhdGlvbiwgdG9uZWQsIGxpZ2h0Q29sb3IsIGRhcmtDb2xvciwgbXVsdGlwbHkpXG57XG4gICAgZGVzYXR1cmF0aW9uID0gZGVzYXR1cmF0aW9uIHx8IDAuMjtcbiAgICB0b25lZCA9IHRvbmVkIHx8IDAuMTU7XG4gICAgbGlnaHRDb2xvciA9IGxpZ2h0Q29sb3IgfHwgMHhGRkU1ODA7XG4gICAgZGFya0NvbG9yID0gZGFya0NvbG9yIHx8IDB4MzM4MDAwO1xuXG4gICAgdmFyIGxSID0gKChsaWdodENvbG9yID4+IDE2KSAmIDB4RkYpIC8gMjU1O1xuICAgIHZhciBsRyA9ICgobGlnaHRDb2xvciA+PiA4KSAmIDB4RkYpIC8gMjU1O1xuICAgIHZhciBsQiA9IChsaWdodENvbG9yICYgMHhGRikgLyAyNTU7XG5cbiAgICB2YXIgZFIgPSAoKGRhcmtDb2xvciA+PiAxNikgJiAweEZGKSAvIDI1NTtcbiAgICB2YXIgZEcgPSAoKGRhcmtDb2xvciA+PiA4KSAmIDB4RkYpIC8gMjU1O1xuICAgIHZhciBkQiA9IChkYXJrQ29sb3IgJiAweEZGKSAvIDI1NTtcblxuICAgIHZhciBtYXRyaXggPSBbXG4gICAgICAgIDAuMywgMC41OSwgMC4xMSwgMCwgMCxcbiAgICAgICAgbFIsIGxHLCBsQiwgZGVzYXR1cmF0aW9uLCAwLFxuICAgICAgICBkUiwgZEcsIGRCLCB0b25lZCwgMCxcbiAgICAgICAgbFIgLSBkUiwgbEcgLSBkRywgbEIgLSBkQiwgMCwgMFxuICAgIF07XG5cbiAgICB0aGlzLl9sb2FkTWF0cml4KG1hdHJpeCwgbXVsdGlwbHkpO1xufTtcblxuLypcbiAqIE5pZ2h0IGVmZmVjdFxuICpcbiAqIEBwYXJhbSBpbnRlbnNpdHkge251bWJlcn1cbiAqIEBwYXJhbSBtdWx0aXBseSB7Ym9vbGVhbn0gcmVmZXIgdG8gLl9sb2FkTWF0cml4KCkgbWV0aG9kXG4gKi9cbkNvbG9yTWF0cml4RmlsdGVyLnByb3RvdHlwZS5uaWdodCA9IGZ1bmN0aW9uIChpbnRlbnNpdHksIG11bHRpcGx5KVxue1xuICAgIGludGVuc2l0eSA9IGludGVuc2l0eSB8fCAwLjE7XG4gICAgdmFyIG1hdHJpeCA9IFtcbiAgICAgICAgaW50ZW5zaXR5ICogKCAtMi4wKSwgLWludGVuc2l0eSwgMCwgMCwgMCxcbiAgICAgICAgLWludGVuc2l0eSwgMCwgaW50ZW5zaXR5LCAwLCAwLFxuICAgICAgICAwLCBpbnRlbnNpdHksIGludGVuc2l0eSAqIDIuMCwgMCwgMCxcbiAgICAgICAgMCwgMCwgMCwgMSwgMFxuICAgIF07XG5cbiAgICB0aGlzLl9sb2FkTWF0cml4KG1hdHJpeCwgbXVsdGlwbHkpO1xufTtcblxuXG4vKlxuICogUHJlZGF0b3IgZWZmZWN0XG4gKlxuICogRXJhc2UgdGhlIGN1cnJlbnQgbWF0cml4IGJ5IHNldHRpbmcgYSBuZXcgaW5kZXBlbnQgb25lXG4gKlxuICogQHBhcmFtIGFtb3VudCB7bnVtYmVyfSBob3cgbXVjaCB0aGUgcHJlZGF0b3IgZmVlbHMgaGlzIGZ1dHVyZSB2aWN0aW1cbiAqIEBwYXJhbSBtdWx0aXBseSB7Ym9vbGVhbn0gcmVmZXIgdG8gLl9sb2FkTWF0cml4KCkgbWV0aG9kXG4gKi9cbkNvbG9yTWF0cml4RmlsdGVyLnByb3RvdHlwZS5wcmVkYXRvciA9IGZ1bmN0aW9uIChhbW91bnQsIG11bHRpcGx5KVxue1xuICAgIHZhciBtYXRyaXggPSBbXG4gICAgICAgIDExLjIyNDEzMDYzMDQ5MzE2NCAqIGFtb3VudCwgLTQuNzk0NDg2OTk5NTExNzE5ICogYW1vdW50LCAtMi44NzQ2MTE4NTQ1NTMyMjI3ICogYW1vdW50LCAwICogYW1vdW50LCAwLjQwMzQyNDM4MjIwOTc3NzgzICogYW1vdW50LFxuICAgICAgICAtMy42MzMwNjk3NTM2NDY4NTA2ICogYW1vdW50LCA5LjE5MzE1NzE5NjA0NDkyMiAqIGFtb3VudCwgLTIuOTUxODEwODM2NzkxOTkyICogYW1vdW50LCAwICogYW1vdW50LCAtMS4zMTYxMzUwNDg4NjYyNzIgKiBhbW91bnQsXG4gICAgICAgIC0zLjIxODQxOTc5MDI2Nzk0NDMgKiBhbW91bnQsIC00LjIzNzUwMzA1MTc1NzgxMjUgKiBhbW91bnQsIDcuNDc2NDQ4MDU5MDgyMDMxICogYW1vdW50LCAwICogYW1vdW50LCAwLjgwNDQ0NTkyMjM3NDcyNTMgKiBhbW91bnQsXG4gICAgICAgIDAsIDAsIDAsIDEsIDBcbiAgICBdO1xuXG4gICAgdGhpcy5fbG9hZE1hdHJpeChtYXRyaXgsIG11bHRpcGx5KTtcbn07XG5cbi8qXG4gKiBMU0QgZWZmZWN0XG4gKlxuICogTXVsdGlwbHkgdGhlIGN1cnJlbnQgbWF0cml4XG4gKlxuICogQHBhcmFtIGFtb3VudCB7bnVtYmVyfSBIb3cgY3JhenkgaXMgeW91ciBlZmZlY3RcbiAqIEBwYXJhbSBtdWx0aXBseSB7Ym9vbGVhbn0gcmVmZXIgdG8gLl9sb2FkTWF0cml4KCkgbWV0aG9kXG4gKi9cbkNvbG9yTWF0cml4RmlsdGVyLnByb3RvdHlwZS5sc2QgPSBmdW5jdGlvbiAobXVsdGlwbHkpXG57XG4gICAgdmFyIG1hdHJpeCA9IFtcbiAgICAgICAgMiwgLTAuNCwgMC41LCAwLCAwLFxuICAgICAgICAtMC41LCAyLCAtMC40LCAwLCAwLFxuICAgICAgICAtMC40LCAtMC41LCAzLCAwLCAwLFxuICAgICAgICAwLCAwLCAwLCAxLCAwXG4gICAgXTtcblxuICAgIHRoaXMuX2xvYWRNYXRyaXgobWF0cml4LCBtdWx0aXBseSk7XG59O1xuXG4vKlxuICogRXJhc2UgdGhlIGN1cnJlbnQgbWF0cml4IGJ5IHNldHRpbmcgdGhlIGRlZmF1bHQgb25lXG4gKlxuICovXG5Db2xvck1hdHJpeEZpbHRlci5wcm90b3R5cGUucmVzZXQgPSBmdW5jdGlvbiAoKVxue1xuICAgIHZhciBtYXRyaXggPSBbXG4gICAgICAgIDEsIDAsIDAsIDAsIDAsXG4gICAgICAgIDAsIDEsIDAsIDAsIDAsXG4gICAgICAgIDAsIDAsIDEsIDAsIDAsXG4gICAgICAgIDAsIDAsIDAsIDEsIDBcbiAgICBdO1xuXG4gICAgdGhpcy5fbG9hZE1hdHJpeChtYXRyaXgsIGZhbHNlKTtcbn07XG5cblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoQ29sb3JNYXRyaXhGaWx0ZXIucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgbWF0cml4IG9mIHRoZSBjb2xvciBtYXRyaXggZmlsdGVyXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJbXX1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLkNvbG9yTWF0cml4RmlsdGVyI1xuICAgICAqIEBkZWZhdWx0IFsxLCAwLCAwLCAwLCAwLCAwLCAxLCAwLCAwLCAwLCAwLCAwLCAxLCAwLCAwLCAwLCAwLCAwLCAxLCAwXVxuICAgICAqL1xuICAgIG1hdHJpeDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVuaWZvcm1zLm0udmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLm0udmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi8uLi9jb3JlJyk7XG4vLyBAc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9zdWJzdGFjay9icmZzL2lzc3Vlcy8yNVxuXG5cbi8qKlxuICogVGhpcyBsb3dlcnMgdGhlIGNvbG9yIGRlcHRoIG9mIHlvdXIgaW1hZ2UgYnkgdGhlIGdpdmVuIGFtb3VudCwgcHJvZHVjaW5nIGFuIGltYWdlIHdpdGggYSBzbWFsbGVyIHBhbGV0dGUuXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLkFic3RyYWN0RmlsdGVyXG4gKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzXG4gKi9cbmZ1bmN0aW9uIENvbG9yU3RlcEZpbHRlcigpXG57XG4gICAgY29yZS5BYnN0cmFjdEZpbHRlci5jYWxsKHRoaXMsXG4gICAgICAgIC8vIHZlcnRleCBzaGFkZXJcbiAgICAgICAgbnVsbCxcbiAgICAgICAgLy8gZnJhZ21lbnQgc2hhZGVyXG4gICAgICAgIFwicHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XFxuXFxudmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7XFxuXFxudW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXI7XFxudW5pZm9ybSBmbG9hdCBzdGVwO1xcblxcbnZvaWQgbWFpbih2b2lkKVxcbntcXG4gICAgdmVjNCBjb2xvciA9IHRleHR1cmUyRCh1U2FtcGxlciwgdlRleHR1cmVDb29yZCk7XFxuXFxuICAgIGNvbG9yID0gZmxvb3IoY29sb3IgKiBzdGVwKSAvIHN0ZXA7XFxuXFxuICAgIGdsX0ZyYWdDb2xvciA9IGNvbG9yO1xcbn1cXG5cIixcbiAgICAgICAgLy8gY3VzdG9tIHVuaWZvcm1zXG4gICAgICAgIHtcbiAgICAgICAgICAgIHN0ZXA6IHsgdHlwZTogJzFmJywgdmFsdWU6IDUgfVxuICAgICAgICB9XG4gICAgKTtcbn1cblxuQ29sb3JTdGVwRmlsdGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoY29yZS5BYnN0cmFjdEZpbHRlci5wcm90b3R5cGUpO1xuQ29sb3JTdGVwRmlsdGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IENvbG9yU3RlcEZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gQ29sb3JTdGVwRmlsdGVyO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhDb2xvclN0ZXBGaWx0ZXIucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogVGhlIG51bWJlciBvZiBzdGVwcyB0byByZWR1Y2UgdGhlIHBhbGV0dGUgYnkuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5Db2xvclN0ZXBGaWx0ZXIjXG4gICAgICovXG4gICAgc3RlcDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVuaWZvcm1zLnN0ZXAudmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLnN0ZXAudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi8uLi9jb3JlJyk7XG4vLyBAc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9zdWJzdGFjay9icmZzL2lzc3Vlcy8yNVxuXG5cbi8qKlxuICogVGhlIENvbnZvbHV0aW9uRmlsdGVyIGNsYXNzIGFwcGxpZXMgYSBtYXRyaXggY29udm9sdXRpb24gZmlsdGVyIGVmZmVjdC5cbiAqIEEgY29udm9sdXRpb24gY29tYmluZXMgcGl4ZWxzIGluIHRoZSBpbnB1dCBpbWFnZSB3aXRoIG5laWdoYm9yaW5nIHBpeGVscyB0byBwcm9kdWNlIGEgbmV3IGltYWdlLlxuICogQSB3aWRlIHZhcmlldHkgb2YgaW1hZ2UgZWZmZWN0cyBjYW4gYmUgYWNoaWV2ZWQgdGhyb3VnaCBjb252b2x1dGlvbnMsIGluY2x1ZGluZyBibHVycmluZywgZWRnZVxuICogZGV0ZWN0aW9uLCBzaGFycGVuaW5nLCBlbWJvc3NpbmcsIGFuZCBiZXZlbGluZy4gVGhlIG1hdHJpeCBzaG91bGQgYmUgc3BlY2lmaWVkIGFzIGEgOSBwb2ludCBBcnJheS5cbiAqIFNlZSBodHRwOi8vZG9jcy5naW1wLm9yZy9lbi9wbHVnLWluLWNvbnZtYXRyaXguaHRtbCBmb3IgbW9yZSBpbmZvLlxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5BYnN0cmFjdEZpbHRlclxuICogQG1lbWJlcm9mIFBJWEkuZmlsdGVyc1xuICogQHBhcmFtIG1hdHJpeCB7bnVtYmVyW119IEFuIGFycmF5IG9mIHZhbHVlcyB1c2VkIGZvciBtYXRyaXggdHJhbnNmb3JtYXRpb24uIFNwZWNpZmllZCBhcyBhIDkgcG9pbnQgQXJyYXkuXG4gKiBAcGFyYW0gd2lkdGgge251bWJlcn0gV2lkdGggb2YgdGhlIG9iamVjdCB5b3UgYXJlIHRyYW5zZm9ybWluZ1xuICogQHBhcmFtIGhlaWdodCB7bnVtYmVyfSBIZWlnaHQgb2YgdGhlIG9iamVjdCB5b3UgYXJlIHRyYW5zZm9ybWluZ1xuICovXG5mdW5jdGlvbiBDb252b2x1dGlvbkZpbHRlcihtYXRyaXgsIHdpZHRoLCBoZWlnaHQpXG57XG4gICAgY29yZS5BYnN0cmFjdEZpbHRlci5jYWxsKHRoaXMsXG4gICAgICAgIC8vIHZlcnRleCBzaGFkZXJcbiAgICAgICAgbnVsbCxcbiAgICAgICAgLy8gZnJhZ21lbnQgc2hhZGVyXG4gICAgICAgIFwicHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XFxuXFxudmFyeWluZyBtZWRpdW1wIHZlYzIgdlRleHR1cmVDb29yZDtcXG5cXG51bmlmb3JtIHNhbXBsZXIyRCB1U2FtcGxlcjtcXG51bmlmb3JtIHZlYzIgdGV4ZWxTaXplO1xcbnVuaWZvcm0gZmxvYXQgbWF0cml4WzldO1xcblxcbnZvaWQgbWFpbih2b2lkKVxcbntcXG4gICB2ZWM0IGMxMSA9IHRleHR1cmUyRCh1U2FtcGxlciwgdlRleHR1cmVDb29yZCAtIHRleGVsU2l6ZSk7IC8vIHRvcCBsZWZ0XFxuICAgdmVjNCBjMTIgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZlYzIodlRleHR1cmVDb29yZC54LCB2VGV4dHVyZUNvb3JkLnkgLSB0ZXhlbFNpemUueSkpOyAvLyB0b3AgY2VudGVyXFxuICAgdmVjNCBjMTMgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZlYzIodlRleHR1cmVDb29yZC54ICsgdGV4ZWxTaXplLngsIHZUZXh0dXJlQ29vcmQueSAtIHRleGVsU2l6ZS55KSk7IC8vIHRvcCByaWdodFxcblxcbiAgIHZlYzQgYzIxID0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2ZWMyKHZUZXh0dXJlQ29vcmQueCAtIHRleGVsU2l6ZS54LCB2VGV4dHVyZUNvb3JkLnkpKTsgLy8gbWlkIGxlZnRcXG4gICB2ZWM0IGMyMiA9IHRleHR1cmUyRCh1U2FtcGxlciwgdlRleHR1cmVDb29yZCk7IC8vIG1pZCBjZW50ZXJcXG4gICB2ZWM0IGMyMyA9IHRleHR1cmUyRCh1U2FtcGxlciwgdmVjMih2VGV4dHVyZUNvb3JkLnggKyB0ZXhlbFNpemUueCwgdlRleHR1cmVDb29yZC55KSk7IC8vIG1pZCByaWdodFxcblxcbiAgIHZlYzQgYzMxID0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2ZWMyKHZUZXh0dXJlQ29vcmQueCAtIHRleGVsU2l6ZS54LCB2VGV4dHVyZUNvb3JkLnkgKyB0ZXhlbFNpemUueSkpOyAvLyBib3R0b20gbGVmdFxcbiAgIHZlYzQgYzMyID0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2ZWMyKHZUZXh0dXJlQ29vcmQueCwgdlRleHR1cmVDb29yZC55ICsgdGV4ZWxTaXplLnkpKTsgLy8gYm90dG9tIGNlbnRlclxcbiAgIHZlYzQgYzMzID0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2VGV4dHVyZUNvb3JkICsgdGV4ZWxTaXplKTsgLy8gYm90dG9tIHJpZ2h0XFxuXFxuICAgZ2xfRnJhZ0NvbG9yID1cXG4gICAgICAgYzExICogbWF0cml4WzBdICsgYzEyICogbWF0cml4WzFdICsgYzEzICogbWF0cml4WzJdICtcXG4gICAgICAgYzIxICogbWF0cml4WzNdICsgYzIyICogbWF0cml4WzRdICsgYzIzICogbWF0cml4WzVdICtcXG4gICAgICAgYzMxICogbWF0cml4WzZdICsgYzMyICogbWF0cml4WzddICsgYzMzICogbWF0cml4WzhdO1xcblxcbiAgIGdsX0ZyYWdDb2xvci5hID0gYzIyLmE7XFxufVxcblwiLFxuICAgICAgICAvLyBjdXN0b20gdW5pZm9ybXNcbiAgICAgICAge1xuICAgICAgICAgICAgbWF0cml4OiAgICAgeyB0eXBlOiAnMWZ2JywgdmFsdWU6IG5ldyBGbG9hdDMyQXJyYXkobWF0cml4KSB9LFxuICAgICAgICAgICAgdGV4ZWxTaXplOiAgeyB0eXBlOiAndjInLCB2YWx1ZTogeyB4OiAxIC8gd2lkdGgsIHk6IDEgLyBoZWlnaHQgfSB9XG4gICAgICAgIH1cbiAgICApO1xufVxuXG5Db252b2x1dGlvbkZpbHRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuQWJzdHJhY3RGaWx0ZXIucHJvdG90eXBlKTtcbkNvbnZvbHV0aW9uRmlsdGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IENvbnZvbHV0aW9uRmlsdGVyO1xubW9kdWxlLmV4cG9ydHMgPSBDb252b2x1dGlvbkZpbHRlcjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoQ29udm9sdXRpb25GaWx0ZXIucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogQW4gYXJyYXkgb2YgdmFsdWVzIHVzZWQgZm9yIG1hdHJpeCB0cmFuc2Zvcm1hdGlvbi4gU3BlY2lmaWVkIGFzIGEgOSBwb2ludCBBcnJheS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcltdfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuQ29udm9sdXRpb25GaWx0ZXIjXG4gICAgICovXG4gICAgbWF0cml4OiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudW5pZm9ybXMubWF0cml4LnZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy5tYXRyaXgudmFsdWUgPSBuZXcgRmxvYXQzMkFycmF5KHZhbHVlKTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBXaWR0aCBvZiB0aGUgb2JqZWN0IHlvdSBhcmUgdHJhbnNmb3JtaW5nXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5Db252b2x1dGlvbkZpbHRlciNcbiAgICAgKi9cbiAgICB3aWR0aDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiAxL3RoaXMudW5pZm9ybXMudGV4ZWxTaXplLnZhbHVlLng7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLnRleGVsU2l6ZS52YWx1ZS54ID0gMS92YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBIZWlnaHQgb2YgdGhlIG9iamVjdCB5b3UgYXJlIHRyYW5zZm9ybWluZ1xuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuQ29udm9sdXRpb25GaWx0ZXIjXG4gICAgICovXG4gICAgaGVpZ2h0OiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIDEvdGhpcy51bmlmb3Jtcy50ZXhlbFNpemUudmFsdWUueTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudW5pZm9ybXMudGV4ZWxTaXplLnZhbHVlLnkgPSAxL3ZhbHVlO1xuICAgICAgICB9XG4gICAgfVxufSk7XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uLy4uL2NvcmUnKTtcbi8vIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL3N1YnN0YWNrL2JyZnMvaXNzdWVzLzI1XG5cblxuLyoqXG4gKiBBIENyb3NzIEhhdGNoIGVmZmVjdCBmaWx0ZXIuXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLkFic3RyYWN0RmlsdGVyXG4gKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzXG4gKi9cbmZ1bmN0aW9uIENyb3NzSGF0Y2hGaWx0ZXIoKVxue1xuICAgIGNvcmUuQWJzdHJhY3RGaWx0ZXIuY2FsbCh0aGlzLFxuICAgICAgICAvLyB2ZXJ0ZXggc2hhZGVyXG4gICAgICAgIG51bGwsXG4gICAgICAgIC8vIGZyYWdtZW50IHNoYWRlclxuICAgICAgICBcInByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xcblxcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xcblxcbnVuaWZvcm0gc2FtcGxlcjJEIHVTYW1wbGVyO1xcblxcbnZvaWQgbWFpbih2b2lkKVxcbntcXG4gICAgZmxvYXQgbHVtID0gbGVuZ3RoKHRleHR1cmUyRCh1U2FtcGxlciwgdlRleHR1cmVDb29yZC54eSkucmdiKTtcXG5cXG4gICAgZ2xfRnJhZ0NvbG9yID0gdmVjNCgxLjAsIDEuMCwgMS4wLCAxLjApO1xcblxcbiAgICBpZiAobHVtIDwgMS4wMClcXG4gICAge1xcbiAgICAgICAgaWYgKG1vZChnbF9GcmFnQ29vcmQueCArIGdsX0ZyYWdDb29yZC55LCAxMC4wKSA9PSAwLjApXFxuICAgICAgICB7XFxuICAgICAgICAgICAgZ2xfRnJhZ0NvbG9yID0gdmVjNCgwLjAsIDAuMCwgMC4wLCAxLjApO1xcbiAgICAgICAgfVxcbiAgICB9XFxuXFxuICAgIGlmIChsdW0gPCAwLjc1KVxcbiAgICB7XFxuICAgICAgICBpZiAobW9kKGdsX0ZyYWdDb29yZC54IC0gZ2xfRnJhZ0Nvb3JkLnksIDEwLjApID09IDAuMClcXG4gICAgICAgIHtcXG4gICAgICAgICAgICBnbF9GcmFnQ29sb3IgPSB2ZWM0KDAuMCwgMC4wLCAwLjAsIDEuMCk7XFxuICAgICAgICB9XFxuICAgIH1cXG5cXG4gICAgaWYgKGx1bSA8IDAuNTApXFxuICAgIHtcXG4gICAgICAgIGlmIChtb2QoZ2xfRnJhZ0Nvb3JkLnggKyBnbF9GcmFnQ29vcmQueSAtIDUuMCwgMTAuMCkgPT0gMC4wKVxcbiAgICAgICAge1xcbiAgICAgICAgICAgIGdsX0ZyYWdDb2xvciA9IHZlYzQoMC4wLCAwLjAsIDAuMCwgMS4wKTtcXG4gICAgICAgIH1cXG4gICAgfVxcblxcbiAgICBpZiAobHVtIDwgMC4zKVxcbiAgICB7XFxuICAgICAgICBpZiAobW9kKGdsX0ZyYWdDb29yZC54IC0gZ2xfRnJhZ0Nvb3JkLnkgLSA1LjAsIDEwLjApID09IDAuMClcXG4gICAgICAgIHtcXG4gICAgICAgICAgICBnbF9GcmFnQ29sb3IgPSB2ZWM0KDAuMCwgMC4wLCAwLjAsIDEuMCk7XFxuICAgICAgICB9XFxuICAgIH1cXG59XFxuXCJcbiAgICApO1xufVxuXG5Dcm9zc0hhdGNoRmlsdGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoY29yZS5BYnN0cmFjdEZpbHRlci5wcm90b3R5cGUpO1xuQ3Jvc3NIYXRjaEZpbHRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBDcm9zc0hhdGNoRmlsdGVyO1xubW9kdWxlLmV4cG9ydHMgPSBDcm9zc0hhdGNoRmlsdGVyO1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi8uLi9jb3JlJyk7XG4vLyBAc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9zdWJzdGFjay9icmZzL2lzc3Vlcy8yNVxuXG5cbi8qKlxuICogVGhlIERpc3BsYWNlbWVudEZpbHRlciBjbGFzcyB1c2VzIHRoZSBwaXhlbCB2YWx1ZXMgZnJvbSB0aGUgc3BlY2lmaWVkIHRleHR1cmUgKGNhbGxlZCB0aGUgZGlzcGxhY2VtZW50IG1hcCkgdG8gcGVyZm9ybSBhIGRpc3BsYWNlbWVudCBvZiBhbiBvYmplY3QuXG4gKiBZb3UgY2FuIHVzZSB0aGlzIGZpbHRlciB0byBhcHBseSBhbGwgbWFub3Igb2YgY3Jhenkgd2FycGluZyBlZmZlY3RzXG4gKiBDdXJyZW50bHkgdGhlIHIgcHJvcGVydHkgb2YgdGhlIHRleHR1cmUgaXMgdXNlZCB0byBvZmZzZXQgdGhlIHggYW5kIHRoZSBnIHByb3BlcnR5IG9mIHRoZSB0ZXh0dXJlIGlzIHVzZWQgdG8gb2Zmc2V0IHRoZSB5LlxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5BYnN0cmFjdEZpbHRlclxuICogQG1lbWJlcm9mIFBJWEkuZmlsdGVyc1xuICogQHBhcmFtIHNwcml0ZSB7UElYSS5TcHJpdGV9IHRoZSBzcHJpdGUgdXNlZCBmb3IgdGhlIGRpc3BsYWNlbWVudCBtYXAuIChtYWtlIHN1cmUgaXRzIGFkZGVkIHRvIHRoZSBzY2VuZSEpXG4gKi9cbmZ1bmN0aW9uIERpc3BsYWNlbWVudEZpbHRlcihzcHJpdGUsIHNjYWxlKVxue1xuICAgIHZhciBtYXNrTWF0cml4ID0gbmV3IGNvcmUuTWF0cml4KCk7XG4gICAgc3ByaXRlLnJlbmRlcmFibGUgPSBmYWxzZTtcblxuICAgIGNvcmUuQWJzdHJhY3RGaWx0ZXIuY2FsbCh0aGlzLFxuICAgICAgICAvLyB2ZXJ0ZXggc2hhZGVyXG4gICAgICAgIFwiYXR0cmlidXRlIHZlYzIgYVZlcnRleFBvc2l0aW9uO1xcbmF0dHJpYnV0ZSB2ZWMyIGFUZXh0dXJlQ29vcmQ7XFxuYXR0cmlidXRlIHZlYzQgYUNvbG9yO1xcblxcbnVuaWZvcm0gbWF0MyBwcm9qZWN0aW9uTWF0cml4O1xcbnVuaWZvcm0gbWF0MyBvdGhlck1hdHJpeDtcXG5cXG52YXJ5aW5nIHZlYzIgdk1hcENvb3JkO1xcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xcbnZhcnlpbmcgdmVjNCB2Q29sb3I7XFxuXFxudm9pZCBtYWluKHZvaWQpXFxue1xcbiAgIGdsX1Bvc2l0aW9uID0gdmVjNCgocHJvamVjdGlvbk1hdHJpeCAqIHZlYzMoYVZlcnRleFBvc2l0aW9uLCAxLjApKS54eSwgMC4wLCAxLjApO1xcbiAgIHZUZXh0dXJlQ29vcmQgPSBhVGV4dHVyZUNvb3JkO1xcbiAgIHZNYXBDb29yZCA9ICggb3RoZXJNYXRyaXggKiB2ZWMzKCBhVGV4dHVyZUNvb3JkLCAxLjApICApLnh5O1xcbiAgIHZDb2xvciA9IHZlYzQoYUNvbG9yLnJnYiAqIGFDb2xvci5hLCBhQ29sb3IuYSk7XFxufVxcblwiLFxuICAgICAgICAvLyBmcmFnbWVudCBzaGFkZXJcbiAgICAgICAgXCJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcXG5cXG52YXJ5aW5nIHZlYzIgdk1hcENvb3JkO1xcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xcbnZhcnlpbmcgdmVjNCB2Q29sb3I7XFxuXFxudW5pZm9ybSB2ZWMyIHNjYWxlO1xcblxcbnVuaWZvcm0gc2FtcGxlcjJEIHVTYW1wbGVyO1xcbnVuaWZvcm0gc2FtcGxlcjJEIG1hcFNhbXBsZXI7XFxuXFxudm9pZCBtYWluKHZvaWQpXFxue1xcbiAgIHZlYzQgbWFwID0gIHRleHR1cmUyRChtYXBTYW1wbGVyLCB2TWFwQ29vcmQpO1xcblxcbiAgIG1hcCAtPSAwLjU7XFxuICAgbWFwLnh5ICo9IHNjYWxlO1xcblxcbiAgIGdsX0ZyYWdDb2xvciA9IHRleHR1cmUyRCh1U2FtcGxlciwgdmVjMih2VGV4dHVyZUNvb3JkLnggKyBtYXAueCwgdlRleHR1cmVDb29yZC55ICsgbWFwLnkpKTtcXG59XFxuXCIsXG4gICAgICAgIC8vIHVuaWZvcm1zXG4gICAgICAgIHtcbiAgICAgICAgICAgIG1hcFNhbXBsZXI6ICAgICB7IHR5cGU6ICdzYW1wbGVyMkQnLCB2YWx1ZTogc3ByaXRlLnRleHR1cmUgfSxcbiAgICAgICAgICAgIG90aGVyTWF0cml4OiAgICB7IHR5cGU6ICdtYXQzJywgdmFsdWU6IG1hc2tNYXRyaXgudG9BcnJheSh0cnVlKSB9LFxuICAgICAgICAgICAgc2NhbGU6ICAgICAgICAgIHsgdHlwZTogJ3YyJywgdmFsdWU6IHsgeDogMSwgeTogMSB9IH1cbiAgICAgICAgfVxuICAgICk7XG5cbiAgICB0aGlzLm1hc2tTcHJpdGUgPSBzcHJpdGU7XG4gICAgdGhpcy5tYXNrTWF0cml4ID0gbWFza01hdHJpeDtcblxuICAgIGlmIChzY2FsZSA9PT0gbnVsbCB8fCBzY2FsZSA9PT0gdW5kZWZpbmVkKVxuICAgIHtcbiAgICAgICAgc2NhbGUgPSAyMDtcbiAgICB9XG5cbiAgICB0aGlzLnNjYWxlID0gbmV3IGNvcmUuUG9pbnQoc2NhbGUsIHNjYWxlKTtcbn1cblxuRGlzcGxhY2VtZW50RmlsdGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoY29yZS5BYnN0cmFjdEZpbHRlci5wcm90b3R5cGUpO1xuRGlzcGxhY2VtZW50RmlsdGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IERpc3BsYWNlbWVudEZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gRGlzcGxhY2VtZW50RmlsdGVyO1xuXG5EaXNwbGFjZW1lbnRGaWx0ZXIucHJvdG90eXBlLmFwcGx5RmlsdGVyID0gZnVuY3Rpb24gKHJlbmRlcmVyLCBpbnB1dCwgb3V0cHV0KVxue1xuICAgIHZhciBmaWx0ZXJNYW5hZ2VyID0gcmVuZGVyZXIuZmlsdGVyTWFuYWdlcjtcblxuICAgIGZpbHRlck1hbmFnZXIuY2FsY3VsYXRlTWFwcGVkTWF0cml4KGlucHV0LmZyYW1lLCB0aGlzLm1hc2tTcHJpdGUsIHRoaXMubWFza01hdHJpeCk7XG5cbiAgICB0aGlzLnVuaWZvcm1zLm90aGVyTWF0cml4LnZhbHVlID0gdGhpcy5tYXNrTWF0cml4LnRvQXJyYXkodHJ1ZSk7XG4gICAgdGhpcy51bmlmb3Jtcy5zY2FsZS52YWx1ZS54ID0gdGhpcy5zY2FsZS54ICogKDEvaW5wdXQuZnJhbWUud2lkdGgpO1xuICAgIHRoaXMudW5pZm9ybXMuc2NhbGUudmFsdWUueSA9IHRoaXMuc2NhbGUueSAqICgxL2lucHV0LmZyYW1lLmhlaWdodCk7XG5cbiAgICB2YXIgc2hhZGVyID0gdGhpcy5nZXRTaGFkZXIocmVuZGVyZXIpO1xuICAgICAvLyBkcmF3IHRoZSBmaWx0ZXIuLi5cbiAgICBmaWx0ZXJNYW5hZ2VyLmFwcGx5RmlsdGVyKHNoYWRlciwgaW5wdXQsIG91dHB1dCk7XG59O1xuXG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKERpc3BsYWNlbWVudEZpbHRlci5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBUaGUgdGV4dHVyZSB1c2VkIGZvciB0aGUgZGlzcGxhY2VtZW50IG1hcC4gTXVzdCBiZSBwb3dlciBvZiAyIHNpemVkIHRleHR1cmUuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlRleHR1cmV9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5EaXNwbGFjZW1lbnRGaWx0ZXIjXG4gICAgICovXG4gICAgbWFwOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudW5pZm9ybXMubWFwU2FtcGxlci52YWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudW5pZm9ybXMubWFwU2FtcGxlci52YWx1ZSA9IHZhbHVlO1xuXG4gICAgICAgIH1cbiAgICB9XG59KTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vLi4vY29yZScpO1xuLy8gQHNlZSBodHRwczovL2dpdGh1Yi5jb20vc3Vic3RhY2svYnJmcy9pc3N1ZXMvMjVcblxuXG4vKipcbiAqIEBhdXRob3IgTWF0IEdyb3ZlcyBodHRwOi8vbWF0Z3JvdmVzLmNvbS8gQERvb3JtYXQyM1xuICogb3JpZ2luYWwgZmlsdGVyOiBodHRwczovL2dpdGh1Yi5jb20vZXZhbncvZ2xmeC5qcy9ibG9iL21hc3Rlci9zcmMvZmlsdGVycy9mdW4vZG90c2NyZWVuLmpzXG4gKi9cblxuLyoqXG4gKiBUaGlzIGZpbHRlciBhcHBsaWVzIGEgZG90c2NyZWVuIGVmZmVjdCBtYWtpbmcgZGlzcGxheSBvYmplY3RzIGFwcGVhciB0byBiZSBtYWRlIG91dCBvZlxuICogYmxhY2sgYW5kIHdoaXRlIGhhbGZ0b25lIGRvdHMgbGlrZSBhbiBvbGQgcHJpbnRlci5cbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQWJzdHJhY3RGaWx0ZXJcbiAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnNcbiAqL1xuZnVuY3Rpb24gRG90U2NyZWVuRmlsdGVyKClcbntcbiAgICBjb3JlLkFic3RyYWN0RmlsdGVyLmNhbGwodGhpcyxcbiAgICAgICAgLy8gdmVydGV4IHNoYWRlclxuICAgICAgICBudWxsLFxuICAgICAgICAvLyBmcmFnbWVudCBzaGFkZXJcbiAgICAgICAgXCJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcXG5cXG52YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDtcXG52YXJ5aW5nIHZlYzQgdkNvbG9yO1xcblxcbnVuaWZvcm0gdmVjNCBkaW1lbnNpb25zO1xcbnVuaWZvcm0gc2FtcGxlcjJEIHVTYW1wbGVyO1xcblxcbnVuaWZvcm0gZmxvYXQgYW5nbGU7XFxudW5pZm9ybSBmbG9hdCBzY2FsZTtcXG5cXG5mbG9hdCBwYXR0ZXJuKClcXG57XFxuICAgZmxvYXQgcyA9IHNpbihhbmdsZSksIGMgPSBjb3MoYW5nbGUpO1xcbiAgIHZlYzIgdGV4ID0gdlRleHR1cmVDb29yZCAqIGRpbWVuc2lvbnMueHk7XFxuICAgdmVjMiBwb2ludCA9IHZlYzIoXFxuICAgICAgIGMgKiB0ZXgueCAtIHMgKiB0ZXgueSxcXG4gICAgICAgcyAqIHRleC54ICsgYyAqIHRleC55XFxuICAgKSAqIHNjYWxlO1xcbiAgIHJldHVybiAoc2luKHBvaW50LngpICogc2luKHBvaW50LnkpKSAqIDQuMDtcXG59XFxuXFxudm9pZCBtYWluKClcXG57XFxuICAgdmVjNCBjb2xvciA9IHRleHR1cmUyRCh1U2FtcGxlciwgdlRleHR1cmVDb29yZCk7XFxuICAgZmxvYXQgYXZlcmFnZSA9IChjb2xvci5yICsgY29sb3IuZyArIGNvbG9yLmIpIC8gMy4wO1xcbiAgIGdsX0ZyYWdDb2xvciA9IHZlYzQodmVjMyhhdmVyYWdlICogMTAuMCAtIDUuMCArIHBhdHRlcm4oKSksIGNvbG9yLmEpO1xcbn1cXG5cIixcbiAgICAgICAgLy8gY3VzdG9tIHVuaWZvcm1zXG4gICAgICAgIHtcbiAgICAgICAgICAgIHNjYWxlOiAgICAgIHsgdHlwZTogJzFmJywgdmFsdWU6IDEgfSxcbiAgICAgICAgICAgIGFuZ2xlOiAgICAgIHsgdHlwZTogJzFmJywgdmFsdWU6IDUgfSxcbiAgICAgICAgICAgIGRpbWVuc2lvbnM6IHsgdHlwZTogJzRmdicsIHZhbHVlOiBbMCwgMCwgMCwgMF0gfVxuICAgICAgICB9XG4gICAgKTtcbn1cblxuRG90U2NyZWVuRmlsdGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoY29yZS5BYnN0cmFjdEZpbHRlci5wcm90b3R5cGUpO1xuRG90U2NyZWVuRmlsdGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IERvdFNjcmVlbkZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gRG90U2NyZWVuRmlsdGVyO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhEb3RTY3JlZW5GaWx0ZXIucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogVGhlIHNjYWxlIG9mIHRoZSBlZmZlY3QuXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuRG90U2NyZWVuRmlsdGVyI1xuICAgICAqL1xuICAgIHNjYWxlOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudW5pZm9ybXMuc2NhbGUudmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLnNjYWxlLnZhbHVlID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVGhlIHJhZGl1cyBvZiB0aGUgZWZmZWN0LlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLkRvdFNjcmVlbkZpbHRlciNcbiAgICAgKi9cbiAgICBhbmdsZToge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVuaWZvcm1zLmFuZ2xlLnZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy5hbmdsZS52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfVxufSk7XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uLy4uL2NvcmUnKTtcblxuLy8gQHNlZSBodHRwczovL2dpdGh1Yi5jb20vc3Vic3RhY2svYnJmcy9pc3N1ZXMvMjVcblxuXG4vKipcbiAqIFRoZSBCbHVyWVRpbnRGaWx0ZXIgYXBwbGllcyBhIHZlcnRpY2FsIEdhdXNzaWFuIGJsdXIgdG8gYW4gb2JqZWN0LlxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5BYnN0cmFjdEZpbHRlclxuICogQG1lbWJlcm9mIFBJWEkuZmlsdGVyc1xuICovXG5mdW5jdGlvbiBCbHVyWVRpbnRGaWx0ZXIoKVxue1xuICAgIGNvcmUuQWJzdHJhY3RGaWx0ZXIuY2FsbCh0aGlzLFxuICAgICAgICAvLyB2ZXJ0ZXggc2hhZGVyXG4gICAgICAgIFwiYXR0cmlidXRlIHZlYzIgYVZlcnRleFBvc2l0aW9uO1xcbmF0dHJpYnV0ZSB2ZWMyIGFUZXh0dXJlQ29vcmQ7XFxuYXR0cmlidXRlIHZlYzQgYUNvbG9yO1xcblxcbnVuaWZvcm0gZmxvYXQgc3RyZW5ndGg7XFxudW5pZm9ybSB2ZWMyIG9mZnNldDtcXG5cXG51bmlmb3JtIG1hdDMgcHJvamVjdGlvbk1hdHJpeDtcXG5cXG52YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDtcXG52YXJ5aW5nIHZlYzQgdkNvbG9yO1xcbnZhcnlpbmcgdmVjMiB2Qmx1clRleENvb3Jkc1s2XTtcXG5cXG52b2lkIG1haW4odm9pZClcXG57XFxuICAgIGdsX1Bvc2l0aW9uID0gdmVjNCgocHJvamVjdGlvbk1hdHJpeCAqIHZlYzMoKGFWZXJ0ZXhQb3NpdGlvbitvZmZzZXQpLCAxLjApKS54eSwgMC4wLCAxLjApO1xcbiAgICB2VGV4dHVyZUNvb3JkID0gYVRleHR1cmVDb29yZDtcXG5cXG4gICAgdkJsdXJUZXhDb29yZHNbIDBdID0gYVRleHR1cmVDb29yZCArIHZlYzIoMC4wLCAtMC4wMTIgKiBzdHJlbmd0aCk7XFxuICAgIHZCbHVyVGV4Q29vcmRzWyAxXSA9IGFUZXh0dXJlQ29vcmQgKyB2ZWMyKDAuMCwgLTAuMDA4ICogc3RyZW5ndGgpO1xcbiAgICB2Qmx1clRleENvb3Jkc1sgMl0gPSBhVGV4dHVyZUNvb3JkICsgdmVjMigwLjAsIC0wLjAwNCAqIHN0cmVuZ3RoKTtcXG4gICAgdkJsdXJUZXhDb29yZHNbIDNdID0gYVRleHR1cmVDb29yZCArIHZlYzIoMC4wLCAgMC4wMDQgKiBzdHJlbmd0aCk7XFxuICAgIHZCbHVyVGV4Q29vcmRzWyA0XSA9IGFUZXh0dXJlQ29vcmQgKyB2ZWMyKDAuMCwgIDAuMDA4ICogc3RyZW5ndGgpO1xcbiAgICB2Qmx1clRleENvb3Jkc1sgNV0gPSBhVGV4dHVyZUNvb3JkICsgdmVjMigwLjAsICAwLjAxMiAqIHN0cmVuZ3RoKTtcXG5cXG4gICB2Q29sb3IgPSB2ZWM0KGFDb2xvci5yZ2IgKiBhQ29sb3IuYSwgYUNvbG9yLmEpO1xcbn1cXG5cIixcbiAgICAgICAgLy8gZnJhZ21lbnQgc2hhZGVyXG4gICAgICAgIFwicHJlY2lzaW9uIGxvd3AgZmxvYXQ7XFxuXFxudmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7XFxudmFyeWluZyB2ZWMyIHZCbHVyVGV4Q29vcmRzWzZdO1xcbnZhcnlpbmcgdmVjNCB2Q29sb3I7XFxuXFxudW5pZm9ybSB2ZWMzIGNvbG9yO1xcbnVuaWZvcm0gZmxvYXQgYWxwaGE7XFxuXFxudW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXI7XFxuXFxudm9pZCBtYWluKHZvaWQpXFxue1xcbiAgICB2ZWM0IHN1bSA9IHZlYzQoMC4wKTtcXG5cXG4gICAgc3VtICs9IHRleHR1cmUyRCh1U2FtcGxlciwgdkJsdXJUZXhDb29yZHNbIDBdKSowLjAwNDQzMTg0ODQxMTkzODM0MTtcXG4gICAgc3VtICs9IHRleHR1cmUyRCh1U2FtcGxlciwgdkJsdXJUZXhDb29yZHNbIDFdKSowLjA1Mzk5MDk2NjUxMzE4OTg1O1xcbiAgICBzdW0gKz0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2Qmx1clRleENvb3Jkc1sgMl0pKjAuMjQxOTcwNzI0NTE5MTQ1NDtcXG4gICAgc3VtICs9IHRleHR1cmUyRCh1U2FtcGxlciwgdlRleHR1cmVDb29yZCAgICAgKSowLjM5ODk0MjI4MDQwMTQzMjc7XFxuICAgIHN1bSArPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZCbHVyVGV4Q29vcmRzWyAzXSkqMC4yNDE5NzA3MjQ1MTkxNDU0O1xcbiAgICBzdW0gKz0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2Qmx1clRleENvb3Jkc1sgNF0pKjAuMDUzOTkwOTY2NTEzMTg5ODU7XFxuICAgIHN1bSArPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZCbHVyVGV4Q29vcmRzWyA1XSkqMC4wMDQ0MzE4NDg0MTE5MzgzNDE7XFxuXFxuICAgIGdsX0ZyYWdDb2xvciA9IHZlYzQoIGNvbG9yLnJnYiAqIHN1bS5hICogYWxwaGEsIHN1bS5hICogYWxwaGEgKTtcXG59XFxuXCIsXG4gICAgICAgIC8vIHNldCB0aGUgdW5pZm9ybXNcbiAgICAgICAge1xuICAgICAgICAgICAgYmx1cjogeyB0eXBlOiAnMWYnLCB2YWx1ZTogMSAvIDUxMiB9LFxuICAgICAgICAgICAgY29sb3I6IHsgdHlwZTogJ2MnLCB2YWx1ZTogWzAsMCwwXX0sXG4gICAgICAgICAgICBhbHBoYTogeyB0eXBlOiAnMWYnLCB2YWx1ZTogMC43IH0sXG4gICAgICAgICAgICBvZmZzZXQ6IHsgdHlwZTogJzJmJywgdmFsdWU6WzUsIDVdfSxcbiAgICAgICAgICAgIHN0cmVuZ3RoOiB7IHR5cGU6ICcxZicsIHZhbHVlOjF9XG4gICAgICAgIH1cbiAgICApO1xuXG4gICAgdGhpcy5wYXNzZXMgPSAxO1xuICAgIHRoaXMuc3RyZW5ndGggPSA0O1xufVxuXG5CbHVyWVRpbnRGaWx0ZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShjb3JlLkFic3RyYWN0RmlsdGVyLnByb3RvdHlwZSk7XG5CbHVyWVRpbnRGaWx0ZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gQmx1cllUaW50RmlsdGVyO1xubW9kdWxlLmV4cG9ydHMgPSBCbHVyWVRpbnRGaWx0ZXI7XG5cbkJsdXJZVGludEZpbHRlci5wcm90b3R5cGUuYXBwbHlGaWx0ZXIgPSBmdW5jdGlvbiAocmVuZGVyZXIsIGlucHV0LCBvdXRwdXQsIGNsZWFyKVxue1xuICAgIHZhciBzaGFkZXIgPSB0aGlzLmdldFNoYWRlcihyZW5kZXJlcik7XG5cbiAgICB0aGlzLnVuaWZvcm1zLnN0cmVuZ3RoLnZhbHVlID0gdGhpcy5zdHJlbmd0aCAvIDQgLyB0aGlzLnBhc3NlcyAqIChpbnB1dC5mcmFtZS5oZWlnaHQgLyBpbnB1dC5zaXplLmhlaWdodCk7XG5cbiAgICBpZih0aGlzLnBhc3NlcyA9PT0gMSlcbiAgICB7XG4gICAgICAgIHJlbmRlcmVyLmZpbHRlck1hbmFnZXIuYXBwbHlGaWx0ZXIoc2hhZGVyLCBpbnB1dCwgb3V0cHV0LCBjbGVhcik7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHZhciByZW5kZXJUYXJnZXQgPSByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLmdldFJlbmRlclRhcmdldCh0cnVlKTtcbiAgICAgICAgdmFyIGZsaXAgPSBpbnB1dDtcbiAgICAgICAgdmFyIGZsb3AgPSByZW5kZXJUYXJnZXQ7XG5cbiAgICAgICAgZm9yKHZhciBpID0gMDsgaSA8IHRoaXMucGFzc2VzLTE7IGkrKylcbiAgICAgICAge1xuICAgICAgICAgICAgcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5hcHBseUZpbHRlcihzaGFkZXIsIGZsaXAsIGZsb3AsIGNsZWFyKTtcblxuICAgICAgICAgICB2YXIgdGVtcCA9IGZsb3A7XG4gICAgICAgICAgIGZsb3AgPSBmbGlwO1xuICAgICAgICAgICBmbGlwID0gdGVtcDtcbiAgICAgICAgfVxuXG4gICAgICAgIHJlbmRlcmVyLmZpbHRlck1hbmFnZXIuYXBwbHlGaWx0ZXIoc2hhZGVyLCBmbGlwLCBvdXRwdXQsIGNsZWFyKTtcblxuICAgICAgICByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLnJldHVyblJlbmRlclRhcmdldChyZW5kZXJUYXJnZXQpO1xuICAgIH1cbn07XG5cblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoQmx1cllUaW50RmlsdGVyLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIHN0cmVuZ3RoIG9mIGJvdGggdGhlIGJsdXIuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5CbHVyWVRpbnRGaWx0ZXIjXG4gICAgICogQGRlZmF1bHQgMlxuICAgICAqL1xuICAgIGJsdXI6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gIHRoaXMuc3RyZW5ndGg7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnBhZGRpbmcgPSB2YWx1ZSAqIDAuNTtcbiAgICAgICAgICAgIHRoaXMuc3RyZW5ndGggPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi8uLi9jb3JlJyksXG4gICAgQmx1clhGaWx0ZXIgPSByZXF1aXJlKCcuLi9ibHVyL0JsdXJYRmlsdGVyJyksXG4gICAgQmx1cllUaW50RmlsdGVyID0gcmVxdWlyZSgnLi9CbHVyWVRpbnRGaWx0ZXInKTtcblxuLyoqXG4gKiBUaGUgRHJvcFNoYWRvd0ZpbHRlciBhcHBsaWVzIGEgR2F1c3NpYW4gYmx1ciB0byBhbiBvYmplY3QuXG4gKiBUaGUgc3RyZW5ndGggb2YgdGhlIGJsdXIgY2FuIGJlIHNldCBmb3IgeC0gYW5kIHktYXhpcyBzZXBhcmF0ZWx5LlxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5BYnN0cmFjdEZpbHRlclxuICogQG1lbWJlcm9mIFBJWEkuZmlsdGVyc1xuICovXG5mdW5jdGlvbiBEcm9wU2hhZG93RmlsdGVyKClcbntcbiAgICBjb3JlLkFic3RyYWN0RmlsdGVyLmNhbGwodGhpcyk7XG5cbiAgICB0aGlzLmJsdXJYRmlsdGVyID0gbmV3IEJsdXJYRmlsdGVyKCk7XG4gICAgdGhpcy5ibHVyWVRpbnRGaWx0ZXIgPSBuZXcgQmx1cllUaW50RmlsdGVyKCk7XG5cbiAgICB0aGlzLmRlZmF1bHRGaWx0ZXIgPSBuZXcgY29yZS5BYnN0cmFjdEZpbHRlcigpO1xuXG4gICAgdGhpcy5wYWRkaW5nID0gMzA7XG5cbiAgICB0aGlzLl9kaXJ0eVBvc2l0aW9uID0gdHJ1ZTtcbiAgICB0aGlzLl9hbmdsZSA9IDQ1ICogTWF0aC5QSSAvIDE4MDtcbiAgICB0aGlzLl9kaXN0YW5jZSA9IDEwO1xuICAgIHRoaXMuYWxwaGEgPSAwLjc1O1xuICAgIHRoaXMuaGlkZU9iamVjdCA9IGZhbHNlO1xuICAgIHRoaXMuYmxlbmRNb2RlID0gY29yZS5CTEVORF9NT0RFUy5NVUxUSVBMWTtcbn1cblxuRHJvcFNoYWRvd0ZpbHRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuQWJzdHJhY3RGaWx0ZXIucHJvdG90eXBlKTtcbkRyb3BTaGFkb3dGaWx0ZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gRHJvcFNoYWRvd0ZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gRHJvcFNoYWRvd0ZpbHRlcjtcblxuRHJvcFNoYWRvd0ZpbHRlci5wcm90b3R5cGUuYXBwbHlGaWx0ZXIgPSBmdW5jdGlvbiAocmVuZGVyZXIsIGlucHV0LCBvdXRwdXQpXG57XG4gICAgdmFyIHJlbmRlclRhcmdldCA9IHJlbmRlcmVyLmZpbHRlck1hbmFnZXIuZ2V0UmVuZGVyVGFyZ2V0KHRydWUpO1xuXG4gICAgLy9UT0RPIC0gY29weVRleFN1YkltYWdlMkQgY291bGQgYmUgdXNlZCBoZXJlP1xuICAgIGlmKHRoaXMuX2RpcnR5UG9zaXRpb24pXG4gICAge1xuICAgICAgICB0aGlzLl9kaXJ0eVBvc2l0aW9uID0gZmFsc2U7XG5cbiAgICAgICAgdGhpcy5ibHVyWVRpbnRGaWx0ZXIudW5pZm9ybXMub2Zmc2V0LnZhbHVlWzBdID0gTWF0aC5zaW4odGhpcy5fYW5nbGUpICogdGhpcy5fZGlzdGFuY2U7XG4gICAgICAgIHRoaXMuYmx1cllUaW50RmlsdGVyLnVuaWZvcm1zLm9mZnNldC52YWx1ZVsxXSA9IE1hdGguY29zKHRoaXMuX2FuZ2xlKSAqIHRoaXMuX2Rpc3RhbmNlO1xuICAgIH1cblxuICAgIHRoaXMuYmx1clhGaWx0ZXIuYXBwbHlGaWx0ZXIocmVuZGVyZXIsIGlucHV0LCByZW5kZXJUYXJnZXQpO1xuXG4gICAgcmVuZGVyZXIuYmxlbmRNb2RlTWFuYWdlci5zZXRCbGVuZE1vZGUodGhpcy5ibGVuZE1vZGUpO1xuXG4gICAgdGhpcy5ibHVyWVRpbnRGaWx0ZXIuYXBwbHlGaWx0ZXIocmVuZGVyZXIsIHJlbmRlclRhcmdldCwgb3V0cHV0KTtcblxuICAgIHJlbmRlcmVyLmJsZW5kTW9kZU1hbmFnZXIuc2V0QmxlbmRNb2RlKGNvcmUuQkxFTkRfTU9ERVMuTk9STUFMKTtcblxuICAgIGlmKCF0aGlzLmhpZGVPYmplY3QpXG4gICAge1xuXG4gICAgICAgIHRoaXMuZGVmYXVsdEZpbHRlci5hcHBseUZpbHRlcihyZW5kZXJlciwgaW5wdXQsIG91dHB1dCk7XG4gICAgfVxuXG5cbiAgICByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLnJldHVyblJlbmRlclRhcmdldChyZW5kZXJUYXJnZXQpO1xufTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoRHJvcFNoYWRvd0ZpbHRlci5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBzdHJlbmd0aCBvZiBib3RoIHRoZSBibHVyWCBhbmQgYmx1clkgcHJvcGVydGllcyBzaW11bHRhbmVvdXNseVxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJPZiBQSVhJLmZpbHRlcnMuRHJvcFNoYWRvd0ZpbHRlciNcbiAgICAgKiBAZGVmYXVsdCAyXG4gICAgICovXG4gICAgYmx1cjoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmJsdXJYRmlsdGVyLmJsdXI7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmJsdXJYRmlsdGVyLmJsdXIgPSB0aGlzLmJsdXJZVGludEZpbHRlci5ibHVyID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgc3RyZW5ndGggb2YgdGhlIGJsdXJYIHByb3BlcnR5XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlck9mIFBJWEkuZmlsdGVycy5Ecm9wU2hhZG93RmlsdGVyI1xuICAgICAqIEBkZWZhdWx0IDJcbiAgICAgKi9cbiAgICBibHVyWDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmJsdXJYRmlsdGVyLmJsdXI7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmJsdXJYRmlsdGVyLmJsdXIgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBzdHJlbmd0aCBvZiB0aGUgYmx1clkgcHJvcGVydHlcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyT2YgUElYSS5maWx0ZXJzLkRyb3BTaGFkb3dGaWx0ZXIjXG4gICAgICogQGRlZmF1bHQgMlxuICAgICAqL1xuICAgIGJsdXJZOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuYmx1cllUaW50RmlsdGVyLmJsdXI7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmJsdXJZVGludEZpbHRlci5ibHVyID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgY29sb3Igb2YgdGhlIHNoYWRvd1xuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJPZiBQSVhJLmZpbHRlcnMuRHJvcFNoYWRvd0ZpbHRlciNcbiAgICAgKi9cbiAgICBjb2xvcjoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiAgY29yZS51dGlscy5yZ2IyaGV4KCB0aGlzLmJsdXJZVGludEZpbHRlci51bmlmb3Jtcy5jb2xvci52YWx1ZSApO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5ibHVyWVRpbnRGaWx0ZXIudW5pZm9ybXMuY29sb3IudmFsdWUgPSBjb3JlLnV0aWxzLmhleDJyZ2IodmFsdWUpO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIGFscGhhIG9mIHRoZSBzaGFkb3dcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyT2YgUElYSS5maWx0ZXJzLkRyb3BTaGFkb3dGaWx0ZXIjXG4gICAgICovXG4gICAgYWxwaGE6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gIHRoaXMuYmx1cllUaW50RmlsdGVyLnVuaWZvcm1zLmFscGhhLnZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5ibHVyWVRpbnRGaWx0ZXIudW5pZm9ybXMuYWxwaGEudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBkaXN0YW5jZSBvZiB0aGUgc2hhZG93XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlck9mIFBJWEkuZmlsdGVycy5Ecm9wU2hhZG93RmlsdGVyI1xuICAgICAqL1xuICAgIGRpc3RhbmNlOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuICB0aGlzLl9kaXN0YW5jZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuX2RpcnR5UG9zaXRpb24gPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy5fZGlzdGFuY2UgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBhbmdsZSBvZiB0aGUgc2hhZG93XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlck9mIFBJWEkuZmlsdGVycy5Ecm9wU2hhZG93RmlsdGVyI1xuICAgICAqL1xuICAgIGFuZ2xlOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuICB0aGlzLl9hbmdsZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuX2RpcnR5UG9zaXRpb24gPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy5fYW5nbGUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi8uLi9jb3JlJyk7XG4vLyBAc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9zdWJzdGFjay9icmZzL2lzc3Vlcy8yNVxuXG5cbi8qKlxuICogVGhpcyBncmV5c2NhbGVzIHRoZSBwYWxldHRlIG9mIHlvdXIgRGlzcGxheSBPYmplY3RzLlxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5BYnN0cmFjdEZpbHRlclxuICogQG1lbWJlcm9mIFBJWEkuZmlsdGVyc1xuICovXG5mdW5jdGlvbiBHcmF5RmlsdGVyKClcbntcbiAgICBjb3JlLkFic3RyYWN0RmlsdGVyLmNhbGwodGhpcyxcbiAgICAgICAgLy8gdmVydGV4IHNoYWRlclxuICAgICAgICBudWxsLFxuICAgICAgICAvLyBmcmFnbWVudCBzaGFkZXJcbiAgICAgICAgXCJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcXG5cXG52YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDtcXG52YXJ5aW5nIHZlYzQgdkNvbG9yO1xcblxcbnVuaWZvcm0gc2FtcGxlcjJEIHVTYW1wbGVyO1xcbnVuaWZvcm0gZmxvYXQgZ3JheTtcXG5cXG52b2lkIG1haW4odm9pZClcXG57XFxuICAgZ2xfRnJhZ0NvbG9yID0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2VGV4dHVyZUNvb3JkKTtcXG4gICBnbF9GcmFnQ29sb3IucmdiID0gbWl4KGdsX0ZyYWdDb2xvci5yZ2IsIHZlYzMoMC4yMTI2KmdsX0ZyYWdDb2xvci5yICsgMC43MTUyKmdsX0ZyYWdDb2xvci5nICsgMC4wNzIyKmdsX0ZyYWdDb2xvci5iKSwgZ3JheSk7XFxufVxcblwiLFxuICAgICAgICAvLyBzZXQgdGhlIHVuaWZvcm1zXG4gICAgICAgIHtcbiAgICAgICAgICAgIGdyYXk6IHsgdHlwZTogJzFmJywgdmFsdWU6IDEgfVxuICAgICAgICB9XG4gICAgKTtcbn1cblxuR3JheUZpbHRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuQWJzdHJhY3RGaWx0ZXIucHJvdG90eXBlKTtcbkdyYXlGaWx0ZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gR3JheUZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gR3JheUZpbHRlcjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoR3JheUZpbHRlci5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBUaGUgc3RyZW5ndGggb2YgdGhlIGdyYXkuIDEgd2lsbCBtYWtlIHRoZSBvYmplY3QgYmxhY2sgYW5kIHdoaXRlLCAwIHdpbGwgbWFrZSB0aGUgb2JqZWN0IGl0cyBub3JtYWwgY29sb3IuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5HcmF5RmlsdGVyI1xuICAgICAqL1xuICAgIGdyYXk6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy51bmlmb3Jtcy5ncmF5LnZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy5ncmF5LnZhbHVlID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG59KTtcbiIsIi8qKlxuICogQGZpbGUgICAgICAgIE1haW4gZXhwb3J0IG9mIHRoZSBQSVhJIGZpbHRlcnMgbGlicmFyeVxuICogQGF1dGhvciAgICAgIE1hdCBHcm92ZXMgPG1hdEBnb29kYm95ZGlnaXRhbC5jb20+XG4gKiBAY29weXJpZ2h0ICAgMjAxMy0yMDE1IEdvb2RCb3lEaWdpdGFsXG4gKiBAbGljZW5zZSAgICAge0BsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9waXhpanMvcGl4aS5qcy9ibG9iL21hc3Rlci9MSUNFTlNFfE1JVCBMaWNlbnNlfVxuICovXG5cbi8qKlxuICogQG5hbWVzcGFjZSBQSVhJLmZpbHRlcnNcbiAqL1xubW9kdWxlLmV4cG9ydHMgPSB7XG4gICAgQXNjaWlGaWx0ZXI6ICAgICAgICByZXF1aXJlKCcuL2FzY2lpL0FzY2lpRmlsdGVyJyksXG4gICAgQmxvb21GaWx0ZXI6ICAgICAgICByZXF1aXJlKCcuL2Jsb29tL0Jsb29tRmlsdGVyJyksXG4gICAgQmx1ckZpbHRlcjogICAgICAgICByZXF1aXJlKCcuL2JsdXIvQmx1ckZpbHRlcicpLFxuICAgIEJsdXJYRmlsdGVyOiAgICAgICAgcmVxdWlyZSgnLi9ibHVyL0JsdXJYRmlsdGVyJyksXG4gICAgQmx1cllGaWx0ZXI6ICAgICAgICByZXF1aXJlKCcuL2JsdXIvQmx1cllGaWx0ZXInKSxcbiAgICBCbHVyRGlyRmlsdGVyOiAgICAgIHJlcXVpcmUoJy4vYmx1ci9CbHVyRGlyRmlsdGVyJyksXG4gICAgQ29sb3JNYXRyaXhGaWx0ZXI6ICByZXF1aXJlKCcuL2NvbG9yL0NvbG9yTWF0cml4RmlsdGVyJyksXG4gICAgQ29sb3JTdGVwRmlsdGVyOiAgICByZXF1aXJlKCcuL2NvbG9yL0NvbG9yU3RlcEZpbHRlcicpLFxuICAgIENvbnZvbHV0aW9uRmlsdGVyOiAgcmVxdWlyZSgnLi9jb252b2x1dGlvbi9Db252b2x1dGlvbkZpbHRlcicpLFxuICAgIENyb3NzSGF0Y2hGaWx0ZXI6ICAgcmVxdWlyZSgnLi9jcm9zc2hhdGNoL0Nyb3NzSGF0Y2hGaWx0ZXInKSxcbiAgICBEaXNwbGFjZW1lbnRGaWx0ZXI6IHJlcXVpcmUoJy4vZGlzcGxhY2VtZW50L0Rpc3BsYWNlbWVudEZpbHRlcicpLFxuICAgIERvdFNjcmVlbkZpbHRlcjogICAgcmVxdWlyZSgnLi9kb3QvRG90U2NyZWVuRmlsdGVyJyksXG4gICAgR3JheUZpbHRlcjogICAgICAgICByZXF1aXJlKCcuL2dyYXkvR3JheUZpbHRlcicpLFxuICAgIERyb3BTaGFkb3dGaWx0ZXI6ICAgcmVxdWlyZSgnLi9kcm9wc2hhZG93L0Ryb3BTaGFkb3dGaWx0ZXInKSxcbiAgICBJbnZlcnRGaWx0ZXI6ICAgICAgIHJlcXVpcmUoJy4vaW52ZXJ0L0ludmVydEZpbHRlcicpLFxuICAgIE5vaXNlRmlsdGVyOiAgICAgICAgcmVxdWlyZSgnLi9ub2lzZS9Ob2lzZUZpbHRlcicpLFxuICAgIFBpeGVsYXRlRmlsdGVyOiAgICAgcmVxdWlyZSgnLi9waXhlbGF0ZS9QaXhlbGF0ZUZpbHRlcicpLFxuICAgIFJHQlNwbGl0RmlsdGVyOiAgICAgcmVxdWlyZSgnLi9yZ2IvUkdCU3BsaXRGaWx0ZXInKSxcbiAgICBTaG9ja3dhdmVGaWx0ZXI6ICAgIHJlcXVpcmUoJy4vc2hvY2t3YXZlL1Nob2Nrd2F2ZUZpbHRlcicpLFxuICAgIFNlcGlhRmlsdGVyOiAgICAgICAgcmVxdWlyZSgnLi9zZXBpYS9TZXBpYUZpbHRlcicpLFxuICAgIFNtYXJ0Qmx1ckZpbHRlcjogICAgcmVxdWlyZSgnLi9ibHVyL1NtYXJ0Qmx1ckZpbHRlcicpLFxuICAgIFRpbHRTaGlmdEZpbHRlcjogICAgcmVxdWlyZSgnLi90aWx0c2hpZnQvVGlsdFNoaWZ0RmlsdGVyJyksXG4gICAgVGlsdFNoaWZ0WEZpbHRlcjogICByZXF1aXJlKCcuL3RpbHRzaGlmdC9UaWx0U2hpZnRYRmlsdGVyJyksXG4gICAgVGlsdFNoaWZ0WUZpbHRlcjogICByZXF1aXJlKCcuL3RpbHRzaGlmdC9UaWx0U2hpZnRZRmlsdGVyJyksXG4gICAgVHdpc3RGaWx0ZXI6ICAgICAgICByZXF1aXJlKCcuL3R3aXN0L1R3aXN0RmlsdGVyJylcbn07XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uLy4uL2NvcmUnKTtcbi8vIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL3N1YnN0YWNrL2JyZnMvaXNzdWVzLzI1XG5cblxuLyoqXG4gKiBUaGlzIGludmVydHMgeW91ciBEaXNwbGF5IE9iamVjdHMgY29sb3JzLlxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5BYnN0cmFjdEZpbHRlclxuICogQG1lbWJlcm9mIFBJWEkuZmlsdGVyc1xuICovXG5mdW5jdGlvbiBJbnZlcnRGaWx0ZXIoKVxue1xuICAgIGNvcmUuQWJzdHJhY3RGaWx0ZXIuY2FsbCh0aGlzLFxuICAgICAgICAvLyB2ZXJ0ZXggc2hhZGVyXG4gICAgICAgIG51bGwsXG4gICAgICAgIC8vIGZyYWdtZW50IHNoYWRlclxuICAgICAgICBcInByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xcblxcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xcblxcbnVuaWZvcm0gZmxvYXQgaW52ZXJ0O1xcbnVuaWZvcm0gc2FtcGxlcjJEIHVTYW1wbGVyO1xcblxcbnZvaWQgbWFpbih2b2lkKVxcbntcXG4gICAgZ2xfRnJhZ0NvbG9yID0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2VGV4dHVyZUNvb3JkKTtcXG5cXG4gICAgZ2xfRnJhZ0NvbG9yLnJnYiA9IG1peCggKHZlYzMoMSktZ2xfRnJhZ0NvbG9yLnJnYikgKiBnbF9GcmFnQ29sb3IuYSwgZ2xfRnJhZ0NvbG9yLnJnYiwgMS4wIC0gaW52ZXJ0KTtcXG59XFxuXCIsXG4gICAgICAgIC8vIGN1c3RvbSB1bmlmb3Jtc1xuICAgICAgICB7XG4gICAgICAgICAgICBpbnZlcnQ6IHsgdHlwZTogJzFmJywgdmFsdWU6IDEgfVxuICAgICAgICB9XG4gICAgKTtcbn1cblxuSW52ZXJ0RmlsdGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoY29yZS5BYnN0cmFjdEZpbHRlci5wcm90b3R5cGUpO1xuSW52ZXJ0RmlsdGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IEludmVydEZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gSW52ZXJ0RmlsdGVyO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhJbnZlcnRGaWx0ZXIucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogVGhlIHN0cmVuZ3RoIG9mIHRoZSBpbnZlcnQuIGAxYCB3aWxsIGZ1bGx5IGludmVydCB0aGUgY29sb3JzLCBhbmRcbiAgICAgKiBgMGAgd2lsbCBtYWtlIHRoZSBvYmplY3QgaXRzIG5vcm1hbCBjb2xvci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLkludmVydEZpbHRlciNcbiAgICAgKi9cbiAgICBpbnZlcnQ6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy51bmlmb3Jtcy5pbnZlcnQudmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLmludmVydC52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfVxufSk7XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uLy4uL2NvcmUnKTtcbi8vIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL3N1YnN0YWNrL2JyZnMvaXNzdWVzLzI1XG5cblxuLyoqXG4gKiBAYXV0aG9yIFZpY28gQHZpY29jb3RlYVxuICogb3JpZ2luYWwgZmlsdGVyOiBodHRwczovL2dpdGh1Yi5jb20vZXZhbncvZ2xmeC5qcy9ibG9iL21hc3Rlci9zcmMvZmlsdGVycy9hZGp1c3Qvbm9pc2UuanNcbiAqL1xuXG4vKipcbiAqIEEgTm9pc2UgZWZmZWN0IGZpbHRlci5cbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQWJzdHJhY3RGaWx0ZXJcbiAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnNcbiAqL1xuZnVuY3Rpb24gTm9pc2VGaWx0ZXIoKVxue1xuICAgIGNvcmUuQWJzdHJhY3RGaWx0ZXIuY2FsbCh0aGlzLFxuICAgICAgICAvLyB2ZXJ0ZXggc2hhZGVyXG4gICAgICAgIG51bGwsXG4gICAgICAgIC8vIGZyYWdtZW50IHNoYWRlclxuICAgICAgICBcInByZWNpc2lvbiBoaWdocCBmbG9hdDtcXG5cXG52YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDtcXG52YXJ5aW5nIHZlYzQgdkNvbG9yO1xcblxcbnVuaWZvcm0gZmxvYXQgbm9pc2U7XFxudW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXI7XFxuXFxuZmxvYXQgcmFuZCh2ZWMyIGNvKVxcbntcXG4gICAgcmV0dXJuIGZyYWN0KHNpbihkb3QoY28ueHksIHZlYzIoMTIuOTg5OCwgNzguMjMzKSkpICogNDM3NTguNTQ1Myk7XFxufVxcblxcbnZvaWQgbWFpbigpXFxue1xcbiAgICB2ZWM0IGNvbG9yID0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2VGV4dHVyZUNvb3JkKTtcXG5cXG4gICAgZmxvYXQgZGlmZiA9IChyYW5kKHZUZXh0dXJlQ29vcmQpIC0gMC41KSAqIG5vaXNlO1xcblxcbiAgICBjb2xvci5yICs9IGRpZmY7XFxuICAgIGNvbG9yLmcgKz0gZGlmZjtcXG4gICAgY29sb3IuYiArPSBkaWZmO1xcblxcbiAgICBnbF9GcmFnQ29sb3IgPSBjb2xvcjtcXG59XFxuXCIsXG4gICAgICAgIC8vIGN1c3RvbSB1bmlmb3Jtc1xuICAgICAgICB7XG4gICAgICAgICAgICBub2lzZTogeyB0eXBlOiAnMWYnLCB2YWx1ZTogMC41IH1cbiAgICAgICAgfVxuICAgICk7XG59XG5cbk5vaXNlRmlsdGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoY29yZS5BYnN0cmFjdEZpbHRlci5wcm90b3R5cGUpO1xuTm9pc2VGaWx0ZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gTm9pc2VGaWx0ZXI7XG5tb2R1bGUuZXhwb3J0cyA9IE5vaXNlRmlsdGVyO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhOb2lzZUZpbHRlci5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBUaGUgYW1vdW50IG9mIG5vaXNlIHRvIGFwcGx5LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuTm9pc2VGaWx0ZXIjXG4gICAgICogQGRlZmF1bHQgMC41XG4gICAgICovXG4gICAgbm9pc2U6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy51bmlmb3Jtcy5ub2lzZS52YWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudW5pZm9ybXMubm9pc2UudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi8uLi9jb3JlJyk7XG4vLyBAc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9zdWJzdGFjay9icmZzL2lzc3Vlcy8yNVxuXG5cbi8qKlxuICogVGhpcyBmaWx0ZXIgYXBwbGllcyBhIHBpeGVsYXRlIGVmZmVjdCBtYWtpbmcgZGlzcGxheSBvYmplY3RzIGFwcGVhciAnYmxvY2t5Jy5cbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQWJzdHJhY3RGaWx0ZXJcbiAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnNcbiAqL1xuZnVuY3Rpb24gUGl4ZWxhdGVGaWx0ZXIoKVxue1xuICAgIGNvcmUuQWJzdHJhY3RGaWx0ZXIuY2FsbCh0aGlzLFxuICAgICAgICAvLyB2ZXJ0ZXggc2hhZGVyXG4gICAgICAgIG51bGwsXG4gICAgICAgIC8vIGZyYWdtZW50IHNoYWRlclxuICAgICAgICBcInByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xcblxcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xcblxcbnVuaWZvcm0gdmVjNCBkaW1lbnNpb25zO1xcbnVuaWZvcm0gdmVjMiBwaXhlbFNpemU7XFxudW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXI7XFxuXFxudm9pZCBtYWluKHZvaWQpXFxue1xcbiAgICB2ZWMyIGNvb3JkID0gdlRleHR1cmVDb29yZDtcXG5cXG4gICAgdmVjMiBzaXplID0gZGltZW5zaW9ucy54eSAvIHBpeGVsU2l6ZTtcXG5cXG4gICAgdmVjMiBjb2xvciA9IGZsb29yKCAoIHZUZXh0dXJlQ29vcmQgKiBzaXplICkgKSAvIHNpemUgKyBwaXhlbFNpemUvZGltZW5zaW9ucy54eSAqIDAuNTtcXG5cXG4gICAgZ2xfRnJhZ0NvbG9yID0gdGV4dHVyZTJEKHVTYW1wbGVyLCBjb2xvcik7XFxufVxcblwiLFxuICAgICAgICAvLyBjdXN0b20gdW5pZm9ybXNcbiAgICAgICAge1xuICAgICAgICAgICAgZGltZW5zaW9uczogeyB0eXBlOiAnNGZ2JywgIHZhbHVlOiBuZXcgRmxvYXQzMkFycmF5KFswLCAwLCAwLCAwXSkgfSxcbiAgICAgICAgICAgIHBpeGVsU2l6ZTogIHsgdHlwZTogJ3YyJywgICB2YWx1ZTogeyB4OiAxMCwgeTogMTAgfSB9XG4gICAgICAgIH1cbiAgICApO1xufVxuXG5QaXhlbGF0ZUZpbHRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuQWJzdHJhY3RGaWx0ZXIucHJvdG90eXBlKTtcblBpeGVsYXRlRmlsdGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFBpeGVsYXRlRmlsdGVyO1xubW9kdWxlLmV4cG9ydHMgPSBQaXhlbGF0ZUZpbHRlcjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoUGl4ZWxhdGVGaWx0ZXIucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogVGhpcyBhIHBvaW50IHRoYXQgZGVzY3JpYmVzIHRoZSBzaXplIG9mIHRoZSBibG9ja3MuXG4gICAgICogeCBpcyB0aGUgd2lkdGggb2YgdGhlIGJsb2NrIGFuZCB5IGlzIHRoZSBoZWlnaHQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlBvaW50fVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuUGl4ZWxhdGVGaWx0ZXIjXG4gICAgICovXG4gICAgc2l6ZToge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVuaWZvcm1zLnBpeGVsU2l6ZS52YWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudW5pZm9ybXMucGl4ZWxTaXplLnZhbHVlID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG59KTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vLi4vY29yZScpO1xuLy8gQHNlZSBodHRwczovL2dpdGh1Yi5jb20vc3Vic3RhY2svYnJmcy9pc3N1ZXMvMjVcblxuXG4vKipcbiAqIEFuIFJHQiBTcGxpdCBGaWx0ZXIuXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLkFic3RyYWN0RmlsdGVyXG4gKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzXG4gKi9cbmZ1bmN0aW9uIFJHQlNwbGl0RmlsdGVyKClcbntcbiAgICBjb3JlLkFic3RyYWN0RmlsdGVyLmNhbGwodGhpcyxcbiAgICAgICAgLy8gdmVydGV4IHNoYWRlclxuICAgICAgICBudWxsLFxuICAgICAgICAvLyBmcmFnbWVudCBzaGFkZXJcbiAgICAgICAgXCJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcXG5cXG52YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDtcXG5cXG51bmlmb3JtIHNhbXBsZXIyRCB1U2FtcGxlcjtcXG51bmlmb3JtIHZlYzQgZGltZW5zaW9ucztcXG51bmlmb3JtIHZlYzIgcmVkO1xcbnVuaWZvcm0gdmVjMiBncmVlbjtcXG51bmlmb3JtIHZlYzIgYmx1ZTtcXG5cXG52b2lkIG1haW4odm9pZClcXG57XFxuICAgZ2xfRnJhZ0NvbG9yLnIgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZUZXh0dXJlQ29vcmQgKyByZWQvZGltZW5zaW9ucy54eSkucjtcXG4gICBnbF9GcmFnQ29sb3IuZyA9IHRleHR1cmUyRCh1U2FtcGxlciwgdlRleHR1cmVDb29yZCArIGdyZWVuL2RpbWVuc2lvbnMueHkpLmc7XFxuICAgZ2xfRnJhZ0NvbG9yLmIgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZUZXh0dXJlQ29vcmQgKyBibHVlL2RpbWVuc2lvbnMueHkpLmI7XFxuICAgZ2xfRnJhZ0NvbG9yLmEgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZUZXh0dXJlQ29vcmQpLmE7XFxufVxcblwiLFxuICAgICAgICAvLyBjdXN0b20gdW5pZm9ybXNcbiAgICAgICAge1xuICAgICAgICAgICAgcmVkOiAgICAgICAgeyB0eXBlOiAndjInLCB2YWx1ZTogeyB4OiAyMCwgeTogMjAgfSB9LFxuICAgICAgICAgICAgZ3JlZW46ICAgICAgeyB0eXBlOiAndjInLCB2YWx1ZTogeyB4OiAtMjAsIHk6IDIwIH0gfSxcbiAgICAgICAgICAgIGJsdWU6ICAgICAgIHsgdHlwZTogJ3YyJywgdmFsdWU6IHsgeDogMjAsIHk6IC0yMCB9IH0sXG4gICAgICAgICAgICBkaW1lbnNpb25zOiB7IHR5cGU6ICc0ZnYnLCB2YWx1ZTogWzAsIDAsIDAsIDBdIH1cbiAgICAgICAgfVxuICAgICk7XG59XG5cblJHQlNwbGl0RmlsdGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoY29yZS5BYnN0cmFjdEZpbHRlci5wcm90b3R5cGUpO1xuUkdCU3BsaXRGaWx0ZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gUkdCU3BsaXRGaWx0ZXI7XG5tb2R1bGUuZXhwb3J0cyA9IFJHQlNwbGl0RmlsdGVyO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhSR0JTcGxpdEZpbHRlci5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBSZWQgY2hhbm5lbCBvZmZzZXQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlBvaW50fVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuUkdCU3BsaXRGaWx0ZXIjXG4gICAgICovXG4gICAgcmVkOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudW5pZm9ybXMucmVkLnZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy5yZWQudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBHcmVlbiBjaGFubmVsIG9mZnNldC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuUG9pbnR9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5SR0JTcGxpdEZpbHRlciNcbiAgICAgKi9cbiAgICBncmVlbjoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVuaWZvcm1zLmdyZWVuLnZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy5ncmVlbi52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIEJsdWUgb2Zmc2V0LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5Qb2ludH1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLlJHQlNwbGl0RmlsdGVyI1xuICAgICAqL1xuICAgIGJsdWU6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy51bmlmb3Jtcy5ibHVlLnZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy5ibHVlLnZhbHVlID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG59KTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vLi4vY29yZScpO1xuLy8gQHNlZSBodHRwczovL2dpdGh1Yi5jb20vc3Vic3RhY2svYnJmcy9pc3N1ZXMvMjVcblxuXG4vKipcbiAqIFRoaXMgYXBwbGllcyBhIHNlcGlhIGVmZmVjdCB0byB5b3VyIERpc3BsYXkgT2JqZWN0cy5cbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQWJzdHJhY3RGaWx0ZXJcbiAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnNcbiAqL1xuZnVuY3Rpb24gU2VwaWFGaWx0ZXIoKVxue1xuICAgIGNvcmUuQWJzdHJhY3RGaWx0ZXIuY2FsbCh0aGlzLFxuICAgICAgICAvLyB2ZXJ0ZXggc2hhZGVyXG4gICAgICAgIG51bGwsXG4gICAgICAgIC8vIGZyYWdtZW50IHNoYWRlclxuICAgICAgICBcInByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xcblxcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xcblxcbnVuaWZvcm0gc2FtcGxlcjJEIHVTYW1wbGVyO1xcbnVuaWZvcm0gZmxvYXQgc2VwaWE7XFxuXFxuY29uc3QgbWF0MyBzZXBpYU1hdHJpeCA9IG1hdDMoMC4zNTg4LCAwLjcwNDQsIDAuMTM2OCwgMC4yOTkwLCAwLjU4NzAsIDAuMTE0MCwgMC4yMzkyLCAwLjQ2OTYsIDAuMDkxMik7XFxuXFxudm9pZCBtYWluKHZvaWQpXFxue1xcbiAgIGdsX0ZyYWdDb2xvciA9IHRleHR1cmUyRCh1U2FtcGxlciwgdlRleHR1cmVDb29yZCk7XFxuICAgZ2xfRnJhZ0NvbG9yLnJnYiA9IG1peCggZ2xfRnJhZ0NvbG9yLnJnYiwgZ2xfRnJhZ0NvbG9yLnJnYiAqIHNlcGlhTWF0cml4LCBzZXBpYSk7XFxufVxcblwiLFxuICAgICAgICAvLyBjdXN0b20gdW5pZm9ybXNcbiAgICAgICAge1xuICAgICAgICAgICAgc2VwaWE6IHsgdHlwZTogJzFmJywgdmFsdWU6IDEgfVxuICAgICAgICB9XG4gICAgKTtcbn1cblxuU2VwaWFGaWx0ZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShjb3JlLkFic3RyYWN0RmlsdGVyLnByb3RvdHlwZSk7XG5TZXBpYUZpbHRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBTZXBpYUZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gU2VwaWFGaWx0ZXI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKFNlcGlhRmlsdGVyLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFRoZSBzdHJlbmd0aCBvZiB0aGUgc2VwaWEuIGAxYCB3aWxsIGFwcGx5IHRoZSBmdWxsIHNlcGlhIGVmZmVjdCwgYW5kXG4gICAgICogYDBgIHdpbGwgbWFrZSB0aGUgb2JqZWN0IGl0cyBub3JtYWwgY29sb3IuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5TZXBpYUZpbHRlciNcbiAgICAgKi9cbiAgICBzZXBpYToge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVuaWZvcm1zLnNlcGlhLnZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy5zZXBpYS52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfVxufSk7XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uLy4uL2NvcmUnKTtcbi8vIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL3N1YnN0YWNrL2JyZnMvaXNzdWVzLzI1XG5cblxuLyoqXG4gKiBUaGUgQ29sb3JNYXRyaXhGaWx0ZXIgY2xhc3MgbGV0cyB5b3UgYXBwbHkgYSA0eDQgbWF0cml4IHRyYW5zZm9ybWF0aW9uIG9uIHRoZSBSR0JBXG4gKiBjb2xvciBhbmQgYWxwaGEgdmFsdWVzIG9mIGV2ZXJ5IHBpeGVsIG9uIHlvdXIgZGlzcGxheU9iamVjdCB0byBwcm9kdWNlIGEgcmVzdWx0XG4gKiB3aXRoIGEgbmV3IHNldCBvZiBSR0JBIGNvbG9yIGFuZCBhbHBoYSB2YWx1ZXMuIEl0J3MgcHJldHR5IHBvd2VyZnVsIVxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5BYnN0cmFjdEZpbHRlclxuICogQG1lbWJlcm9mIFBJWEkuZmlsdGVyc1xuICovXG5mdW5jdGlvbiBTaG9ja3dhdmVGaWx0ZXIoKVxue1xuICAgIGNvcmUuQWJzdHJhY3RGaWx0ZXIuY2FsbCh0aGlzLFxuICAgICAgICAvLyB2ZXJ0ZXggc2hhZGVyXG4gICAgICAgIG51bGwsXG4gICAgICAgIC8vIGZyYWdtZW50IHNoYWRlclxuICAgICAgICBcInByZWNpc2lvbiBsb3dwIGZsb2F0O1xcblxcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xcblxcbnVuaWZvcm0gc2FtcGxlcjJEIHVTYW1wbGVyO1xcblxcbnVuaWZvcm0gdmVjMiBjZW50ZXI7XFxudW5pZm9ybSB2ZWMzIHBhcmFtczsgLy8gMTAuMCwgMC44LCAwLjFcXG51bmlmb3JtIGZsb2F0IHRpbWU7XFxuXFxudm9pZCBtYWluKClcXG57XFxuICAgIHZlYzIgdXYgPSB2VGV4dHVyZUNvb3JkO1xcbiAgICB2ZWMyIHRleENvb3JkID0gdXY7XFxuXFxuICAgIGZsb2F0IGRpc3QgPSBkaXN0YW5jZSh1diwgY2VudGVyKTtcXG5cXG4gICAgaWYgKCAoZGlzdCA8PSAodGltZSArIHBhcmFtcy56KSkgJiYgKGRpc3QgPj0gKHRpbWUgLSBwYXJhbXMueikpIClcXG4gICAge1xcbiAgICAgICAgZmxvYXQgZGlmZiA9IChkaXN0IC0gdGltZSk7XFxuICAgICAgICBmbG9hdCBwb3dEaWZmID0gMS4wIC0gcG93KGFicyhkaWZmKnBhcmFtcy54KSwgcGFyYW1zLnkpO1xcblxcbiAgICAgICAgZmxvYXQgZGlmZlRpbWUgPSBkaWZmICAqIHBvd0RpZmY7XFxuICAgICAgICB2ZWMyIGRpZmZVViA9IG5vcm1hbGl6ZSh1diAtIGNlbnRlcik7XFxuICAgICAgICB0ZXhDb29yZCA9IHV2ICsgKGRpZmZVViAqIGRpZmZUaW1lKTtcXG4gICAgfVxcblxcbiAgICBnbF9GcmFnQ29sb3IgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHRleENvb3JkKTtcXG59XFxuXCIsXG4gICAgICAgIC8vIGN1c3RvbSB1bmlmb3Jtc1xuICAgICAgICB7XG4gICAgICAgICAgICBjZW50ZXI6IHsgdHlwZTogJ3YyJywgdmFsdWU6IHsgeDogMC41LCB5OiAwLjUgfSB9LFxuICAgICAgICAgICAgcGFyYW1zOiB7IHR5cGU6ICd2MycsIHZhbHVlOiB7IHg6IDEwLCB5OiAwLjgsIHo6IDAuMSB9IH0sXG4gICAgICAgICAgICB0aW1lOiB7IHR5cGU6ICcxZicsIHZhbHVlOiAwIH1cbiAgICAgICAgfVxuICAgICk7XG59XG5cblNob2Nrd2F2ZUZpbHRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuQWJzdHJhY3RGaWx0ZXIucHJvdG90eXBlKTtcblNob2Nrd2F2ZUZpbHRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBTaG9ja3dhdmVGaWx0ZXI7XG5tb2R1bGUuZXhwb3J0cyA9IFNob2Nrd2F2ZUZpbHRlcjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoU2hvY2t3YXZlRmlsdGVyLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIGNlbnRlciBvZiB0aGUgc2hvY2t3YXZlIGluIG5vcm1hbGl6ZWQgc2NyZWVuIGNvb3Jkcy4gVGhhdCBpc1xuICAgICAqICgwLDApIGlzIHRoZSB0b3AtbGVmdCBhbmQgKDEsMSkgaXMgdGhlIGJvdHRvbSByaWdodC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge29iamVjdDxzdHJpbmcsIG51bWJlcj59XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5TaG9ja3dhdmVGaWx0ZXIjXG4gICAgICovXG4gICAgY2VudGVyOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudW5pZm9ybXMuY2VudGVyLnZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy5jZW50ZXIudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgcGFyYW1zIG9mIHRoZSBzaG9ja3dhdmUuIFRoZXNlIG1vZGlmeSB0aGUgbG9vayBhbmQgYmVoYXZpb3Igb2ZcbiAgICAgKiB0aGUgc2hvY2t3YXZlIGFzIGl0IHJpcHBsZXMgb3V0LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7b2JqZWN0PHN0cmluZywgbnVtYmVyPn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLlNob2Nrd2F2ZUZpbHRlciNcbiAgICAgKi9cbiAgICBwYXJhbXM6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy51bmlmb3Jtcy5wYXJhbXMudmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLnBhcmFtcy52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfSxcbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBlbGFwc2VkIHRpbWUgb2YgdGhlIHNob2Nrd2F2ZS4gVGhpcyBjb250cm9scyB0aGUgc3BlZWQgYXQgd2hpY2hcbiAgICAgKiB0aGUgc2hvY2t3YXZlIHJpcHBsZXMgb3V0LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuU2hvY2t3YXZlRmlsdGVyI1xuICAgICAqL1xuICAgIHRpbWU6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy51bmlmb3Jtcy50aW1lLnZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy50aW1lLnZhbHVlID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG59KTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vLi4vY29yZScpO1xuLy8gQHNlZSBodHRwczovL2dpdGh1Yi5jb20vc3Vic3RhY2svYnJmcy9pc3N1ZXMvMjVcblxuXG4vKipcbiAqIEBhdXRob3IgVmljbyBAdmljb2NvdGVhXG4gKiBvcmlnaW5hbCBmaWx0ZXIgaHR0cHM6Ly9naXRodWIuY29tL2V2YW53L2dsZnguanMvYmxvYi9tYXN0ZXIvc3JjL2ZpbHRlcnMvYmx1ci90aWx0c2hpZnQuanMgYnkgRXZhbiBXYWxsYWNlIDogaHR0cDovL21hZGVieWV2YW4uY29tL1xuICovXG5cbi8qKlxuICogQSBUaWx0U2hpZnRBeGlzRmlsdGVyLlxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5BYnN0cmFjdEZpbHRlclxuICogQG1lbWJlcm9mIFBJWEkuZmlsdGVyc1xuICovXG5mdW5jdGlvbiBUaWx0U2hpZnRBeGlzRmlsdGVyKClcbntcbiAgICBjb3JlLkFic3RyYWN0RmlsdGVyLmNhbGwodGhpcyxcbiAgICAgICAgLy8gdmVydGV4IHNoYWRlclxuICAgICAgICBudWxsLFxuICAgICAgICAvLyBmcmFnbWVudCBzaGFkZXJcbiAgICAgICAgXCJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcXG5cXG52YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDtcXG5cXG51bmlmb3JtIHNhbXBsZXIyRCB1U2FtcGxlcjtcXG51bmlmb3JtIGZsb2F0IGJsdXI7XFxudW5pZm9ybSBmbG9hdCBncmFkaWVudEJsdXI7XFxudW5pZm9ybSB2ZWMyIHN0YXJ0O1xcbnVuaWZvcm0gdmVjMiBlbmQ7XFxudW5pZm9ybSB2ZWMyIGRlbHRhO1xcbnVuaWZvcm0gdmVjMiB0ZXhTaXplO1xcblxcbmZsb2F0IHJhbmRvbSh2ZWMzIHNjYWxlLCBmbG9hdCBzZWVkKVxcbntcXG4gICAgcmV0dXJuIGZyYWN0KHNpbihkb3QoZ2xfRnJhZ0Nvb3JkLnh5eiArIHNlZWQsIHNjYWxlKSkgKiA0Mzc1OC41NDUzICsgc2VlZCk7XFxufVxcblxcbnZvaWQgbWFpbih2b2lkKVxcbntcXG4gICAgdmVjNCBjb2xvciA9IHZlYzQoMC4wKTtcXG4gICAgZmxvYXQgdG90YWwgPSAwLjA7XFxuXFxuICAgIGZsb2F0IG9mZnNldCA9IHJhbmRvbSh2ZWMzKDEyLjk4OTgsIDc4LjIzMywgMTUxLjcxODIpLCAwLjApO1xcbiAgICB2ZWMyIG5vcm1hbCA9IG5vcm1hbGl6ZSh2ZWMyKHN0YXJ0LnkgLSBlbmQueSwgZW5kLnggLSBzdGFydC54KSk7XFxuICAgIGZsb2F0IHJhZGl1cyA9IHNtb290aHN0ZXAoMC4wLCAxLjAsIGFicyhkb3QodlRleHR1cmVDb29yZCAqIHRleFNpemUgLSBzdGFydCwgbm9ybWFsKSkgLyBncmFkaWVudEJsdXIpICogYmx1cjtcXG5cXG4gICAgZm9yIChmbG9hdCB0ID0gLTMwLjA7IHQgPD0gMzAuMDsgdCsrKVxcbiAgICB7XFxuICAgICAgICBmbG9hdCBwZXJjZW50ID0gKHQgKyBvZmZzZXQgLSAwLjUpIC8gMzAuMDtcXG4gICAgICAgIGZsb2F0IHdlaWdodCA9IDEuMCAtIGFicyhwZXJjZW50KTtcXG4gICAgICAgIHZlYzQgc2FtcGxlID0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2VGV4dHVyZUNvb3JkICsgZGVsdGEgLyB0ZXhTaXplICogcGVyY2VudCAqIHJhZGl1cyk7XFxuICAgICAgICBzYW1wbGUucmdiICo9IHNhbXBsZS5hO1xcbiAgICAgICAgY29sb3IgKz0gc2FtcGxlICogd2VpZ2h0O1xcbiAgICAgICAgdG90YWwgKz0gd2VpZ2h0O1xcbiAgICB9XFxuXFxuICAgIGdsX0ZyYWdDb2xvciA9IGNvbG9yIC8gdG90YWw7XFxuICAgIGdsX0ZyYWdDb2xvci5yZ2IgLz0gZ2xfRnJhZ0NvbG9yLmEgKyAwLjAwMDAxO1xcbn1cXG5cIixcbiAgICAgICAgLy8gY3VzdG9tIHVuaWZvcm1zXG4gICAgICAgIHtcbiAgICAgICAgICAgIGJsdXI6ICAgICAgICAgICB7IHR5cGU6ICcxZicsIHZhbHVlOiAxMDAgfSxcbiAgICAgICAgICAgIGdyYWRpZW50Qmx1cjogICB7IHR5cGU6ICcxZicsIHZhbHVlOiA2MDAgfSxcbiAgICAgICAgICAgIHN0YXJ0OiAgICAgICAgICB7IHR5cGU6ICd2MicsIHZhbHVlOiB7IHg6IDAsICAgIHk6IHdpbmRvdy5pbm5lckhlaWdodCAvIDIgfSB9LFxuICAgICAgICAgICAgZW5kOiAgICAgICAgICAgIHsgdHlwZTogJ3YyJywgdmFsdWU6IHsgeDogNjAwLCAgeTogd2luZG93LmlubmVySGVpZ2h0IC8gMiB9IH0sXG4gICAgICAgICAgICBkZWx0YTogICAgICAgICAgeyB0eXBlOiAndjInLCB2YWx1ZTogeyB4OiAzMCwgICB5OiAzMCB9IH0sXG4gICAgICAgICAgICB0ZXhTaXplOiAgICAgICAgeyB0eXBlOiAndjInLCB2YWx1ZTogeyB4OiB3aW5kb3cuaW5uZXJXaWR0aCwgeTogd2luZG93LmlubmVySGVpZ2h0IH0gfVxuICAgICAgICB9XG4gICAgKTtcblxuICAgIHRoaXMudXBkYXRlRGVsdGEoKTtcbn1cblxuVGlsdFNoaWZ0QXhpc0ZpbHRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuQWJzdHJhY3RGaWx0ZXIucHJvdG90eXBlKTtcblRpbHRTaGlmdEF4aXNGaWx0ZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gVGlsdFNoaWZ0QXhpc0ZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gVGlsdFNoaWZ0QXhpc0ZpbHRlcjtcblxuLyoqXG4gKiBVcGRhdGVzIHRoZSBmaWx0ZXIgZGVsdGEgdmFsdWVzLlxuICogVGhpcyBpcyBvdmVycmlkZGVuIGluIHRoZSBYIGFuZCBZIGZpbHRlcnMsIGRvZXMgbm90aGluZyBmb3IgdGhpcyBjbGFzcy5cbiAqXG4gKi9cblRpbHRTaGlmdEF4aXNGaWx0ZXIucHJvdG90eXBlLnVwZGF0ZURlbHRhID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLnVuaWZvcm1zLmRlbHRhLnZhbHVlLnggPSAwO1xuICAgIHRoaXMudW5pZm9ybXMuZGVsdGEudmFsdWUueSA9IDA7XG59O1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhUaWx0U2hpZnRBeGlzRmlsdGVyLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFRoZSBzdHJlbmd0aCBvZiB0aGUgYmx1ci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLlRpbHRTaGlmdEF4aXNGaWx0ZXIjXG4gICAgICovXG4gICAgYmx1cjoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVuaWZvcm1zLmJsdXIudmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLmJsdXIudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBUaGUgc3RyZW5ndGggb2YgdGhlIGdyYWRpZW50IGJsdXIuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5UaWx0U2hpZnRBeGlzRmlsdGVyI1xuICAgICAqL1xuICAgIGdyYWRpZW50Qmx1cjoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVuaWZvcm1zLmdyYWRpZW50Qmx1ci52YWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudW5pZm9ybXMuZ3JhZGllbnRCbHVyLnZhbHVlID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVGhlIFggdmFsdWUgdG8gc3RhcnQgdGhlIGVmZmVjdCBhdC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuUG9pbnR9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5UaWx0U2hpZnRBeGlzRmlsdGVyI1xuICAgICAqL1xuICAgIHN0YXJ0OiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudW5pZm9ybXMuc3RhcnQudmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLnN0YXJ0LnZhbHVlID0gdmFsdWU7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZURlbHRhKCk7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVGhlIFggdmFsdWUgdG8gZW5kIHRoZSBlZmZlY3QgYXQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlBvaW50fVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuVGlsdFNoaWZ0QXhpc0ZpbHRlciNcbiAgICAgKi9cbiAgICBlbmQ6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy51bmlmb3Jtcy5lbmQudmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLmVuZC52YWx1ZSA9IHZhbHVlO1xuICAgICAgICAgICAgdGhpcy51cGRhdGVEZWx0YSgpO1xuICAgICAgICB9XG4gICAgfVxufSk7XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uLy4uL2NvcmUnKSxcbiAgICBUaWx0U2hpZnRYRmlsdGVyID0gcmVxdWlyZSgnLi9UaWx0U2hpZnRYRmlsdGVyJyksXG4gICAgVGlsdFNoaWZ0WUZpbHRlciA9IHJlcXVpcmUoJy4vVGlsdFNoaWZ0WUZpbHRlcicpO1xuXG4vKipcbiAqIEBhdXRob3IgVmljbyBAdmljb2NvdGVhXG4gKiBvcmlnaW5hbCBmaWx0ZXIgaHR0cHM6Ly9naXRodWIuY29tL2V2YW53L2dsZnguanMvYmxvYi9tYXN0ZXIvc3JjL2ZpbHRlcnMvYmx1ci90aWx0c2hpZnQuanMgYnkgRXZhbiBXYWxsYWNlIDogaHR0cDovL21hZGVieWV2YW4uY29tL1xuICovXG5cbi8qKlxuICogQSBUaWx0U2hpZnQgRmlsdGVyLiBNYW5hZ2VzIHRoZSBwYXNzIG9mIGJvdGggYSBUaWx0U2hpZnRYRmlsdGVyIGFuZCBUaWx0U2hpZnRZRmlsdGVyLlxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5BYnN0cmFjdEZpbHRlclxuICogQG1lbWJlcm9mIFBJWEkuZmlsdGVyc1xuICovXG5mdW5jdGlvbiBUaWx0U2hpZnRGaWx0ZXIoKVxue1xuICAgIGNvcmUuQWJzdHJhY3RGaWx0ZXIuY2FsbCh0aGlzKTtcblxuICAgIHRoaXMudGlsdFNoaWZ0WEZpbHRlciA9IG5ldyBUaWx0U2hpZnRYRmlsdGVyKCk7XG4gICAgdGhpcy50aWx0U2hpZnRZRmlsdGVyID0gbmV3IFRpbHRTaGlmdFlGaWx0ZXIoKTtcbn1cblxuVGlsdFNoaWZ0RmlsdGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoY29yZS5BYnN0cmFjdEZpbHRlci5wcm90b3R5cGUpO1xuVGlsdFNoaWZ0RmlsdGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFRpbHRTaGlmdEZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gVGlsdFNoaWZ0RmlsdGVyO1xuXG5UaWx0U2hpZnRGaWx0ZXIucHJvdG90eXBlLmFwcGx5RmlsdGVyID0gZnVuY3Rpb24gKHJlbmRlcmVyLCBpbnB1dCwgb3V0cHV0KVxue1xuICAgIHZhciByZW5kZXJUYXJnZXQgPSByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLmdldFJlbmRlclRhcmdldCh0cnVlKTtcblxuICAgIHRoaXMudGlsdFNoaWZ0WEZpbHRlci5hcHBseUZpbHRlcihyZW5kZXJlciwgaW5wdXQsIHJlbmRlclRhcmdldCk7XG5cbiAgICB0aGlzLnRpbHRTaGlmdFlGaWx0ZXIuYXBwbHlGaWx0ZXIocmVuZGVyZXIsIHJlbmRlclRhcmdldCwgb3V0cHV0KTtcblxuICAgIHJlbmRlcmVyLmZpbHRlck1hbmFnZXIucmV0dXJuUmVuZGVyVGFyZ2V0KHJlbmRlclRhcmdldCk7XG59O1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhUaWx0U2hpZnRGaWx0ZXIucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogVGhlIHN0cmVuZ3RoIG9mIHRoZSBibHVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuVGlsdFNoaWZ0RmlsdGVyI1xuICAgICAqL1xuICAgIGJsdXI6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy50aWx0U2hpZnRYRmlsdGVyLmJsdXI7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnRpbHRTaGlmdFhGaWx0ZXIuYmx1ciA9IHRoaXMudGlsdFNoaWZ0WUZpbHRlci5ibHVyID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVGhlIHN0cmVuZ3RoIG9mIHRoZSBncmFkaWVudCBibHVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuVGlsdFNoaWZ0RmlsdGVyI1xuICAgICAqL1xuICAgIGdyYWRpZW50Qmx1cjoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnRpbHRTaGlmdFhGaWx0ZXIuZ3JhZGllbnRCbHVyO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy50aWx0U2hpZnRYRmlsdGVyLmdyYWRpZW50Qmx1ciA9IHRoaXMudGlsdFNoaWZ0WUZpbHRlci5ncmFkaWVudEJsdXIgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBUaGUgWSB2YWx1ZSB0byBzdGFydCB0aGUgZWZmZWN0IGF0LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuVGlsdFNoaWZ0RmlsdGVyI1xuICAgICAqL1xuICAgIHN0YXJ0OiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudGlsdFNoaWZ0WEZpbHRlci5zdGFydDtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudGlsdFNoaWZ0WEZpbHRlci5zdGFydCA9IHRoaXMudGlsdFNoaWZ0WUZpbHRlci5zdGFydCA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFRoZSBZIHZhbHVlIHRvIGVuZCB0aGUgZWZmZWN0IGF0LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuVGlsdFNoaWZ0RmlsdGVyI1xuICAgICAqL1xuICAgIGVuZDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnRpbHRTaGlmdFhGaWx0ZXIuZW5kO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy50aWx0U2hpZnRYRmlsdGVyLmVuZCA9IHRoaXMudGlsdFNoaWZ0WUZpbHRlci5lbmQgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuIiwidmFyIFRpbHRTaGlmdEF4aXNGaWx0ZXIgPSByZXF1aXJlKCcuL1RpbHRTaGlmdEF4aXNGaWx0ZXInKTtcblxuLyoqXG4gKiBAYXV0aG9yIFZpY28gQHZpY29jb3RlYVxuICogb3JpZ2luYWwgZmlsdGVyIGh0dHBzOi8vZ2l0aHViLmNvbS9ldmFudy9nbGZ4LmpzL2Jsb2IvbWFzdGVyL3NyYy9maWx0ZXJzL2JsdXIvdGlsdHNoaWZ0LmpzIGJ5IEV2YW4gV2FsbGFjZSA6IGh0dHA6Ly9tYWRlYnlldmFuLmNvbS9cbiAqL1xuXG4vKipcbiAqIEEgVGlsdFNoaWZ0WEZpbHRlci5cbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuVGlsdFNoaWZ0QXhpc0ZpbHRlclxuICogQG1lbWJlcm9mIFBJWEkuZmlsdGVyc1xuICovXG5mdW5jdGlvbiBUaWx0U2hpZnRYRmlsdGVyKClcbntcbiAgICBUaWx0U2hpZnRBeGlzRmlsdGVyLmNhbGwodGhpcyk7XG59XG5cblRpbHRTaGlmdFhGaWx0ZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShUaWx0U2hpZnRBeGlzRmlsdGVyLnByb3RvdHlwZSk7XG5UaWx0U2hpZnRYRmlsdGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFRpbHRTaGlmdFhGaWx0ZXI7XG5tb2R1bGUuZXhwb3J0cyA9IFRpbHRTaGlmdFhGaWx0ZXI7XG5cbi8qKlxuICogVXBkYXRlcyB0aGUgZmlsdGVyIGRlbHRhIHZhbHVlcy5cbiAqXG4gKi9cblRpbHRTaGlmdFhGaWx0ZXIucHJvdG90eXBlLnVwZGF0ZURlbHRhID0gZnVuY3Rpb24gKClcbntcbiAgICB2YXIgZHggPSB0aGlzLnVuaWZvcm1zLmVuZC52YWx1ZS54IC0gdGhpcy51bmlmb3Jtcy5zdGFydC52YWx1ZS54O1xuICAgIHZhciBkeSA9IHRoaXMudW5pZm9ybXMuZW5kLnZhbHVlLnkgLSB0aGlzLnVuaWZvcm1zLnN0YXJ0LnZhbHVlLnk7XG4gICAgdmFyIGQgPSBNYXRoLnNxcnQoZHggKiBkeCArIGR5ICogZHkpO1xuXG4gICAgdGhpcy51bmlmb3Jtcy5kZWx0YS52YWx1ZS54ID0gZHggLyBkO1xuICAgIHRoaXMudW5pZm9ybXMuZGVsdGEudmFsdWUueSA9IGR5IC8gZDtcbn07XG4iLCJ2YXIgVGlsdFNoaWZ0QXhpc0ZpbHRlciA9IHJlcXVpcmUoJy4vVGlsdFNoaWZ0QXhpc0ZpbHRlcicpO1xuXG4vKipcbiAqIEBhdXRob3IgVmljbyBAdmljb2NvdGVhXG4gKiBvcmlnaW5hbCBmaWx0ZXIgaHR0cHM6Ly9naXRodWIuY29tL2V2YW53L2dsZnguanMvYmxvYi9tYXN0ZXIvc3JjL2ZpbHRlcnMvYmx1ci90aWx0c2hpZnQuanMgYnkgRXZhbiBXYWxsYWNlIDogaHR0cDovL21hZGVieWV2YW4uY29tL1xuICovXG5cbi8qKlxuICogQSBUaWx0U2hpZnRZRmlsdGVyLlxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5UaWx0U2hpZnRBeGlzRmlsdGVyXG4gKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzXG4gKi9cbmZ1bmN0aW9uIFRpbHRTaGlmdFlGaWx0ZXIoKVxue1xuICAgIFRpbHRTaGlmdEF4aXNGaWx0ZXIuY2FsbCh0aGlzKTtcbn1cblxuVGlsdFNoaWZ0WUZpbHRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFRpbHRTaGlmdEF4aXNGaWx0ZXIucHJvdG90eXBlKTtcblRpbHRTaGlmdFlGaWx0ZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gVGlsdFNoaWZ0WUZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gVGlsdFNoaWZ0WUZpbHRlcjtcblxuLyoqXG4gKiBVcGRhdGVzIHRoZSBmaWx0ZXIgZGVsdGEgdmFsdWVzLlxuICpcbiAqL1xuVGlsdFNoaWZ0WUZpbHRlci5wcm90b3R5cGUudXBkYXRlRGVsdGEgPSBmdW5jdGlvbiAoKVxue1xuICAgIHZhciBkeCA9IHRoaXMudW5pZm9ybXMuZW5kLnZhbHVlLnggLSB0aGlzLnVuaWZvcm1zLnN0YXJ0LnZhbHVlLng7XG4gICAgdmFyIGR5ID0gdGhpcy51bmlmb3Jtcy5lbmQudmFsdWUueSAtIHRoaXMudW5pZm9ybXMuc3RhcnQudmFsdWUueTtcbiAgICB2YXIgZCA9IE1hdGguc3FydChkeCAqIGR4ICsgZHkgKiBkeSk7XG5cbiAgICB0aGlzLnVuaWZvcm1zLmRlbHRhLnZhbHVlLnggPSAtZHkgLyBkO1xuICAgIHRoaXMudW5pZm9ybXMuZGVsdGEudmFsdWUueSA9IGR4IC8gZDtcbn07XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uLy4uL2NvcmUnKTtcbi8vIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL3N1YnN0YWNrL2JyZnMvaXNzdWVzLzI1XG5cblxuLyoqXG4gKiBUaGlzIGZpbHRlciBhcHBsaWVzIGEgdHdpc3QgZWZmZWN0IG1ha2luZyBkaXNwbGF5IG9iamVjdHMgYXBwZWFyIHR3aXN0ZWQgaW4gdGhlIGdpdmVuIGRpcmVjdGlvbi5cbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQWJzdHJhY3RGaWx0ZXJcbiAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnNcbiAqL1xuZnVuY3Rpb24gVHdpc3RGaWx0ZXIoKVxue1xuICAgIGNvcmUuQWJzdHJhY3RGaWx0ZXIuY2FsbCh0aGlzLFxuICAgICAgICAvLyB2ZXJ0ZXggc2hhZGVyXG4gICAgICAgIG51bGwsXG4gICAgICAgIC8vIGZyYWdtZW50IHNoYWRlclxuICAgICAgICBcInByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xcblxcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xcblxcbnVuaWZvcm0gc2FtcGxlcjJEIHVTYW1wbGVyO1xcbnVuaWZvcm0gZmxvYXQgcmFkaXVzO1xcbnVuaWZvcm0gZmxvYXQgYW5nbGU7XFxudW5pZm9ybSB2ZWMyIG9mZnNldDtcXG5cXG52b2lkIG1haW4odm9pZClcXG57XFxuICAgdmVjMiBjb29yZCA9IHZUZXh0dXJlQ29vcmQgLSBvZmZzZXQ7XFxuICAgZmxvYXQgZGlzdCA9IGxlbmd0aChjb29yZCk7XFxuXFxuICAgaWYgKGRpc3QgPCByYWRpdXMpXFxuICAge1xcbiAgICAgICBmbG9hdCByYXRpbyA9IChyYWRpdXMgLSBkaXN0KSAvIHJhZGl1cztcXG4gICAgICAgZmxvYXQgYW5nbGVNb2QgPSByYXRpbyAqIHJhdGlvICogYW5nbGU7XFxuICAgICAgIGZsb2F0IHMgPSBzaW4oYW5nbGVNb2QpO1xcbiAgICAgICBmbG9hdCBjID0gY29zKGFuZ2xlTW9kKTtcXG4gICAgICAgY29vcmQgPSB2ZWMyKGNvb3JkLnggKiBjIC0gY29vcmQueSAqIHMsIGNvb3JkLnggKiBzICsgY29vcmQueSAqIGMpO1xcbiAgIH1cXG5cXG4gICBnbF9GcmFnQ29sb3IgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIGNvb3JkK29mZnNldCk7XFxufVxcblwiLFxuICAgICAgICAvLyBjdXN0b20gdW5pZm9ybXNcbiAgICAgICAge1xuICAgICAgICAgICAgcmFkaXVzOiAgICAgeyB0eXBlOiAnMWYnLCB2YWx1ZTogMC41IH0sXG4gICAgICAgICAgICBhbmdsZTogICAgICB7IHR5cGU6ICcxZicsIHZhbHVlOiA1IH0sXG4gICAgICAgICAgICBvZmZzZXQ6ICAgICB7IHR5cGU6ICd2MicsIHZhbHVlOiB7IHg6IDAuNSwgeTogMC41IH0gfVxuICAgICAgICB9XG4gICAgKTtcbn1cblxuVHdpc3RGaWx0ZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShjb3JlLkFic3RyYWN0RmlsdGVyLnByb3RvdHlwZSk7XG5Ud2lzdEZpbHRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBUd2lzdEZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gVHdpc3RGaWx0ZXI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKFR3aXN0RmlsdGVyLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFRoaXMgcG9pbnQgZGVzY3JpYmVzIHRoZSB0aGUgb2Zmc2V0IG9mIHRoZSB0d2lzdC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuUG9pbnR9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5Ud2lzdEZpbHRlciNcbiAgICAgKi9cbiAgICBvZmZzZXQ6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy51bmlmb3Jtcy5vZmZzZXQudmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLm9mZnNldC52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFRoaXMgcmFkaXVzIG9mIHRoZSB0d2lzdC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLlR3aXN0RmlsdGVyI1xuICAgICAqL1xuICAgIHJhZGl1czoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVuaWZvcm1zLnJhZGl1cy52YWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudW5pZm9ybXMucmFkaXVzLnZhbHVlID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVGhpcyBhbmdsZSBvZiB0aGUgdHdpc3QuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5Ud2lzdEZpbHRlciNcbiAgICAgKi9cbiAgICBhbmdsZToge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVuaWZvcm1zLmFuZ2xlLnZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy5hbmdsZS52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfVxufSk7XG4iLCIvLyBydW4gdGhlIHBvbHlmaWxsc1xucmVxdWlyZSgnLi9wb2x5ZmlsbCcpO1xuXG52YXIgY29yZSA9IG1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9jb3JlJyk7XG5cbi8vIGFkZCBjb3JlIHBsdWdpbnMuXG5jb3JlLmV4dHJhcyAgICAgICAgID0gcmVxdWlyZSgnLi9leHRyYXMnKTtcbmNvcmUuZmlsdGVycyAgICAgICAgPSByZXF1aXJlKCcuL2ZpbHRlcnMnKTtcbmNvcmUuaW50ZXJhY3Rpb24gICAgPSByZXF1aXJlKCcuL2ludGVyYWN0aW9uJyk7XG5jb3JlLmxvYWRlcnMgICAgICAgID0gcmVxdWlyZSgnLi9sb2FkZXJzJyk7XG5jb3JlLm1lc2ggICAgICAgICAgID0gcmVxdWlyZSgnLi9tZXNoJyk7XG5jb3JlLmFjY2Vzc2liaWxpdHkgID0gcmVxdWlyZSgnLi9hY2Nlc3NpYmlsaXR5Jyk7XG5cbi8vIGV4cG9ydCBhIHByZW1hZGUgbG9hZGVyIGluc3RhbmNlXG4vKipcbiAqIEEgcHJlbWFkZSBpbnN0YW5jZSBvZiB0aGUgbG9hZGVyIHRoYXQgY2FuIGJlIHVzZWQgdG8gbG9hZGVyIHJlc291cmNlcy5cbiAqXG4gKiBAbmFtZSBsb2FkZXJcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcHJvcGVydHkge1BJWEkubG9hZGVycy5Mb2FkZXJ9XG4gKi9cbmNvcmUubG9hZGVyID0gbmV3IGNvcmUubG9hZGVycy5Mb2FkZXIoKTtcblxuLy8gbWl4aW4gdGhlIGRlcHJlY2F0aW9uIGZlYXR1cmVzLlxuT2JqZWN0LmFzc2lnbihjb3JlLCByZXF1aXJlKCcuL2RlcHJlY2F0aW9uJykpO1xuXG4vLyBBbHdheXMgZXhwb3J0IHBpeGkgZ2xvYmFsbHkuXG5nbG9iYWwuUElYSSA9IGNvcmU7XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uL2NvcmUnKTtcblxuLyoqXG4gKiBIb2xkcyBhbGwgaW5mb3JtYXRpb24gcmVsYXRlZCB0byBhbiBJbnRlcmFjdGlvbiBldmVudFxuICpcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWEkuaW50ZXJhY3Rpb25cbiAqL1xuZnVuY3Rpb24gSW50ZXJhY3Rpb25EYXRhKClcbntcbiAgICAvKipcbiAgICAgKiBUaGlzIHBvaW50IHN0b3JlcyB0aGUgZ2xvYmFsIGNvb3JkcyBvZiB3aGVyZSB0aGUgdG91Y2gvbW91c2UgZXZlbnQgaGFwcGVuZWRcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuUG9pbnR9XG4gICAgICovXG4gICAgdGhpcy5nbG9iYWwgPSBuZXcgY29yZS5Qb2ludCgpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHRhcmdldCBTcHJpdGUgdGhhdCB3YXMgaW50ZXJhY3RlZCB3aXRoXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlNwcml0ZX1cbiAgICAgKi9cbiAgICB0aGlzLnRhcmdldCA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBXaGVuIHBhc3NlZCB0byBhbiBldmVudCBoYW5kbGVyLCB0aGlzIHdpbGwgYmUgdGhlIG9yaWdpbmFsIERPTSBFdmVudCB0aGF0IHdhcyBjYXB0dXJlZFxuICAgICAqXG4gICAgICogQG1lbWJlciB7RXZlbnR9XG4gICAgICovXG4gICAgdGhpcy5vcmlnaW5hbEV2ZW50ID0gbnVsbDtcbn1cblxuSW50ZXJhY3Rpb25EYXRhLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IEludGVyYWN0aW9uRGF0YTtcbm1vZHVsZS5leHBvcnRzID0gSW50ZXJhY3Rpb25EYXRhO1xuXG4vKipcbiAqIFRoaXMgd2lsbCByZXR1cm4gdGhlIGxvY2FsIGNvb3JkaW5hdGVzIG9mIHRoZSBzcGVjaWZpZWQgZGlzcGxheU9iamVjdCBmb3IgdGhpcyBJbnRlcmFjdGlvbkRhdGFcbiAqXG4gKiBAcGFyYW0gZGlzcGxheU9iamVjdCB7UElYSS5EaXNwbGF5T2JqZWN0fSBUaGUgRGlzcGxheU9iamVjdCB0aGF0IHlvdSB3b3VsZCBsaWtlIHRoZSBsb2NhbCBjb29yZHMgb2ZmXG4gKiBAcGFyYW0gW3BvaW50XSB7UElYSS5Qb2ludH0gQSBQb2ludCBvYmplY3QgaW4gd2hpY2ggdG8gc3RvcmUgdGhlIHZhbHVlLCBvcHRpb25hbCAob3RoZXJ3aXNlIHdpbGwgY3JlYXRlIGEgbmV3IHBvaW50KVxuICogQHBhcmFtIFtnbG9iYWxQb3NdIHtQSVhJLlBvaW50fSBBIFBvaW50IG9iamVjdCBjb250YWluaW5nIHlvdXIgY3VzdG9tIGdsb2JhbCBjb29yZHMsIG9wdGlvbmFsIChvdGhlcndpc2Ugd2lsbCB1c2UgdGhlIGN1cnJlbnQgZ2xvYmFsIGNvb3JkcylcbiAqIEByZXR1cm4ge1BJWEkuUG9pbnR9IEEgcG9pbnQgY29udGFpbmluZyB0aGUgY29vcmRpbmF0ZXMgb2YgdGhlIEludGVyYWN0aW9uRGF0YSBwb3NpdGlvbiByZWxhdGl2ZSB0byB0aGUgRGlzcGxheU9iamVjdFxuICovXG5JbnRlcmFjdGlvbkRhdGEucHJvdG90eXBlLmdldExvY2FsUG9zaXRpb24gPSBmdW5jdGlvbiAoZGlzcGxheU9iamVjdCwgcG9pbnQsIGdsb2JhbFBvcylcbntcbiAgICByZXR1cm4gZGlzcGxheU9iamVjdC53b3JsZFRyYW5zZm9ybS5hcHBseUludmVyc2UoZ2xvYmFsUG9zIHx8IHRoaXMuZ2xvYmFsLCBwb2ludCk7XG59O1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi9jb3JlJyksXG4gICAgSW50ZXJhY3Rpb25EYXRhID0gcmVxdWlyZSgnLi9JbnRlcmFjdGlvbkRhdGEnKTtcblxuLy8gTWl4IGludGVyYWN0aXZlVGFyZ2V0IGludG8gY29yZS5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZVxuT2JqZWN0LmFzc2lnbihcbiAgICBjb3JlLkRpc3BsYXlPYmplY3QucHJvdG90eXBlLFxuICAgIHJlcXVpcmUoJy4vaW50ZXJhY3RpdmVUYXJnZXQnKVxuKTtcblxuLyoqXG4gKiBUaGUgaW50ZXJhY3Rpb24gbWFuYWdlciBkZWFscyB3aXRoIG1vdXNlIGFuZCB0b3VjaCBldmVudHMuIEFueSBEaXNwbGF5T2JqZWN0IGNhbiBiZSBpbnRlcmFjdGl2ZVxuICogaWYgaXRzIGludGVyYWN0aXZlIHBhcmFtZXRlciBpcyBzZXQgdG8gdHJ1ZVxuICogVGhpcyBtYW5hZ2VyIGFsc28gc3VwcG9ydHMgbXVsdGl0b3VjaC5cbiAqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJLmludGVyYWN0aW9uXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuQ2FudmFzUmVuZGVyZXJ8UElYSS5XZWJHTFJlbmRlcmVyfSBBIHJlZmVyZW5jZSB0byB0aGUgY3VycmVudCByZW5kZXJlclxuICogQHBhcmFtIFtvcHRpb25zXSB7b2JqZWN0fVxuICogQHBhcmFtIFtvcHRpb25zLmF1dG9QcmV2ZW50RGVmYXVsdD10cnVlXSB7Ym9vbGVhbn0gU2hvdWxkIHRoZSBtYW5hZ2VyIGF1dG9tYXRpY2FsbHkgcHJldmVudCBkZWZhdWx0IGJyb3dzZXIgYWN0aW9ucy5cbiAqIEBwYXJhbSBbb3B0aW9ucy5pbnRlcmFjdGlvbkZyZXF1ZW5jeT0xMF0ge251bWJlcn0gRnJlcXVlbmN5IGluY3JlYXNlcyB0aGUgaW50ZXJhY3Rpb24gZXZlbnRzIHdpbGwgYmUgY2hlY2tlZC5cbiAqL1xuZnVuY3Rpb24gSW50ZXJhY3Rpb25NYW5hZ2VyKHJlbmRlcmVyLCBvcHRpb25zKVxue1xuICAgIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuXG4gICAgLyoqXG4gICAgICogVGhlIHJlbmRlcmVyIHRoaXMgaW50ZXJhY3Rpb24gbWFuYWdlciB3b3JrcyBmb3IuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlN5c3RlbVJlbmRlcmVyfVxuICAgICAqL1xuICAgIHRoaXMucmVuZGVyZXIgPSByZW5kZXJlcjtcblxuICAgIC8qKlxuICAgICAqIFNob3VsZCBkZWZhdWx0IGJyb3dzZXIgYWN0aW9ucyBhdXRvbWF0aWNhbGx5IGJlIHByZXZlbnRlZC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICogQGRlZmF1bHQgdHJ1ZVxuICAgICAqL1xuICAgIHRoaXMuYXV0b1ByZXZlbnREZWZhdWx0ID0gb3B0aW9ucy5hdXRvUHJldmVudERlZmF1bHQgIT09IHVuZGVmaW5lZCA/IG9wdGlvbnMuYXV0b1ByZXZlbnREZWZhdWx0IDogdHJ1ZTtcblxuICAgIC8qKlxuICAgICAqIEFzIHRoaXMgZnJlcXVlbmN5IGluY3JlYXNlcyB0aGUgaW50ZXJhY3Rpb24gZXZlbnRzIHdpbGwgYmUgY2hlY2tlZCBtb3JlIG9mdGVuLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDEwXG4gICAgICovXG4gICAgdGhpcy5pbnRlcmFjdGlvbkZyZXF1ZW5jeSA9IG9wdGlvbnMuaW50ZXJhY3Rpb25GcmVxdWVuY3kgfHwgMTA7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgbW91c2UgZGF0YVxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5pbnRlcmFjdGlvbi5JbnRlcmFjdGlvbkRhdGF9XG4gICAgICovXG4gICAgdGhpcy5tb3VzZSA9IG5ldyBJbnRlcmFjdGlvbkRhdGEoKTtcblxuICAgIC8qKlxuICAgICAqIEFuIGV2ZW50IGRhdGEgb2JqZWN0IHRvIGhhbmRsZSBhbGwgdGhlIGV2ZW50IHRyYWNraW5nL2Rpc3BhdGNoaW5nXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtvYmplY3R9XG4gICAgICovXG4gICAgdGhpcy5ldmVudERhdGEgPSB7XG4gICAgICAgIHN0b3BwZWQ6IGZhbHNlLFxuICAgICAgICB0YXJnZXQ6IG51bGwsXG4gICAgICAgIHR5cGU6IG51bGwsXG4gICAgICAgIGRhdGE6IHRoaXMubW91c2UsXG4gICAgICAgIHN0b3BQcm9wYWdhdGlvbjpmdW5jdGlvbigpe1xuICAgICAgICAgICAgdGhpcy5zdG9wcGVkID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH07XG5cbiAgICAvKipcbiAgICAgKiBUaW55IGxpdHRsZSBpbnRlcmFjdGl2ZURhdGEgcG9vbCAhXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLmludGVyYWN0aW9uLkludGVyYWN0aW9uRGF0YVtdfVxuICAgICAqL1xuICAgIHRoaXMuaW50ZXJhY3RpdmVEYXRhUG9vbCA9IFtdO1xuXG4gICAgLyoqXG4gICAgICogVGhlIERPTSBlbGVtZW50IHRvIGJpbmQgdG8uXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtIVE1MRWxlbWVudH1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuaW50ZXJhY3Rpb25ET01FbGVtZW50ID0gbnVsbDtcblxuICAgIC8qKlxuICAgICAqIEhhdmUgZXZlbnRzIGJlZW4gYXR0YWNoZWQgdG8gdGhlIGRvbSBlbGVtZW50P1xuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuZXZlbnRzQWRkZWQgPSBmYWxzZTtcblxuICAgIC8vdGhpcyB3aWxsIG1ha2UgaXQgc28gdGhhdCB5b3UgZG9uJ3QgaGF2ZSB0byBjYWxsIGJpbmQgYWxsIHRoZSB0aW1lXG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtGdW5jdGlvbn1cbiAgICAgKi9cbiAgICB0aGlzLm9uTW91c2VVcCA9IHRoaXMub25Nb3VzZVVwLmJpbmQodGhpcyk7XG4gICAgdGhpcy5wcm9jZXNzTW91c2VVcCA9IHRoaXMucHJvY2Vzc01vdXNlVXAuYmluZCggdGhpcyApO1xuXG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtGdW5jdGlvbn1cbiAgICAgKi9cbiAgICB0aGlzLm9uTW91c2VEb3duID0gdGhpcy5vbk1vdXNlRG93bi5iaW5kKHRoaXMpO1xuICAgIHRoaXMucHJvY2Vzc01vdXNlRG93biA9IHRoaXMucHJvY2Vzc01vdXNlRG93bi5iaW5kKCB0aGlzICk7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtGdW5jdGlvbn1cbiAgICAgKi9cbiAgICB0aGlzLm9uTW91c2VNb3ZlID0gdGhpcy5vbk1vdXNlTW92ZS5iaW5kKCB0aGlzICk7XG4gICAgdGhpcy5wcm9jZXNzTW91c2VNb3ZlID0gdGhpcy5wcm9jZXNzTW91c2VNb3ZlLmJpbmQoIHRoaXMgKTtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge0Z1bmN0aW9ufVxuICAgICAqL1xuICAgIHRoaXMub25Nb3VzZU91dCA9IHRoaXMub25Nb3VzZU91dC5iaW5kKHRoaXMpO1xuICAgIHRoaXMucHJvY2Vzc01vdXNlT3Zlck91dCA9IHRoaXMucHJvY2Vzc01vdXNlT3Zlck91dC5iaW5kKCB0aGlzICk7XG5cblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge0Z1bmN0aW9ufVxuICAgICAqL1xuICAgIHRoaXMub25Ub3VjaFN0YXJ0ID0gdGhpcy5vblRvdWNoU3RhcnQuYmluZCh0aGlzKTtcbiAgICB0aGlzLnByb2Nlc3NUb3VjaFN0YXJ0ID0gdGhpcy5wcm9jZXNzVG91Y2hTdGFydC5iaW5kKHRoaXMpO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7RnVuY3Rpb259XG4gICAgICovXG4gICAgdGhpcy5vblRvdWNoRW5kID0gdGhpcy5vblRvdWNoRW5kLmJpbmQodGhpcyk7XG4gICAgdGhpcy5wcm9jZXNzVG91Y2hFbmQgPSB0aGlzLnByb2Nlc3NUb3VjaEVuZC5iaW5kKHRoaXMpO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7RnVuY3Rpb259XG4gICAgICovXG4gICAgdGhpcy5vblRvdWNoTW92ZSA9IHRoaXMub25Ub3VjaE1vdmUuYmluZCh0aGlzKTtcbiAgICB0aGlzLnByb2Nlc3NUb3VjaE1vdmUgPSB0aGlzLnByb2Nlc3NUb3VjaE1vdmUuYmluZCh0aGlzKTtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLmxhc3QgPSAwO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGNzcyBzdHlsZSBvZiB0aGUgY3Vyc29yIHRoYXQgaXMgYmVpbmcgdXNlZFxuICAgICAqIEBtZW1iZXIge3N0cmluZ31cbiAgICAgKi9cbiAgICB0aGlzLmN1cnJlbnRDdXJzb3JTdHlsZSA9ICdpbmhlcml0JztcblxuICAgIC8qKlxuICAgICAqIEludGVybmFsIGNhY2hlZCB2YXJcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlBvaW50fVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fdGVtcFBvaW50ID0gbmV3IGNvcmUuUG9pbnQoKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBjdXJyZW50IHJlc29sdXRpb25cbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy5yZXNvbHV0aW9uID0gMTtcblxuICAgIHRoaXMuc2V0VGFyZ2V0RWxlbWVudCh0aGlzLnJlbmRlcmVyLnZpZXcsIHRoaXMucmVuZGVyZXIucmVzb2x1dGlvbik7XG59XG5cbkludGVyYWN0aW9uTWFuYWdlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBJbnRlcmFjdGlvbk1hbmFnZXI7XG5tb2R1bGUuZXhwb3J0cyA9IEludGVyYWN0aW9uTWFuYWdlcjtcblxuLyoqXG4gKiBTZXRzIHRoZSBET00gZWxlbWVudCB3aGljaCB3aWxsIHJlY2VpdmUgbW91c2UvdG91Y2ggZXZlbnRzLiBUaGlzIGlzIHVzZWZ1bCBmb3Igd2hlbiB5b3UgaGF2ZVxuICogb3RoZXIgRE9NIGVsZW1lbnRzIG9uIHRvcCBvZiB0aGUgcmVuZGVyZXJzIENhbnZhcyBlbGVtZW50LiBXaXRoIHRoaXMgeW91J2xsIGJlIGJhbGUgdG8gZGVsZXRlZ2F0ZVxuICogYW5vdGhlciBET00gZWxlbWVudCB0byByZWNlaXZlIHRob3NlIGV2ZW50cy5cbiAqXG4gKiBAcGFyYW0gZWxlbWVudCB7SFRNTEVsZW1lbnR9IHRoZSBET00gZWxlbWVudCB3aGljaCB3aWxsIHJlY2VpdmUgbW91c2UgYW5kIHRvdWNoIGV2ZW50cy5cbiAqIEBwYXJhbSBbcmVzb2x1dGlvbj0xXSB7bnVtYmVyfSBUSGUgcmVzb2x1dGlvbiBvZiB0aGUgbmV3IGVsZW1lbnQgKHJlbGF0aXZlIHRvIHRoZSBjYW52YXMpLlxuICogQHByaXZhdGVcbiAqL1xuSW50ZXJhY3Rpb25NYW5hZ2VyLnByb3RvdHlwZS5zZXRUYXJnZXRFbGVtZW50ID0gZnVuY3Rpb24gKGVsZW1lbnQsIHJlc29sdXRpb24pXG57XG4gICAgdGhpcy5yZW1vdmVFdmVudHMoKTtcblxuICAgIHRoaXMuaW50ZXJhY3Rpb25ET01FbGVtZW50ID0gZWxlbWVudDtcblxuICAgIHRoaXMucmVzb2x1dGlvbiA9IHJlc29sdXRpb24gfHwgMTtcblxuICAgIHRoaXMuYWRkRXZlbnRzKCk7XG59O1xuXG4vKipcbiAqIFJlZ2lzdGVycyBhbGwgdGhlIERPTSBldmVudHNcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5JbnRlcmFjdGlvbk1hbmFnZXIucHJvdG90eXBlLmFkZEV2ZW50cyA9IGZ1bmN0aW9uICgpXG57XG4gICAgaWYgKCF0aGlzLmludGVyYWN0aW9uRE9NRWxlbWVudClcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb3JlLnRpY2tlci5zaGFyZWQuYWRkKHRoaXMudXBkYXRlLCB0aGlzKTtcblxuICAgIGlmICh3aW5kb3cubmF2aWdhdG9yLm1zUG9pbnRlckVuYWJsZWQpXG4gICAge1xuICAgICAgICB0aGlzLmludGVyYWN0aW9uRE9NRWxlbWVudC5zdHlsZVsnLW1zLWNvbnRlbnQtem9vbWluZyddID0gJ25vbmUnO1xuICAgICAgICB0aGlzLmludGVyYWN0aW9uRE9NRWxlbWVudC5zdHlsZVsnLW1zLXRvdWNoLWFjdGlvbiddID0gJ25vbmUnO1xuICAgIH1cblxuICAgIHdpbmRvdy5kb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdtb3VzZW1vdmUnLCAgICB0aGlzLm9uTW91c2VNb3ZlLCB0cnVlKTtcbiAgICB0aGlzLmludGVyYWN0aW9uRE9NRWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCdtb3VzZWRvd24nLCAgICB0aGlzLm9uTW91c2VEb3duLCB0cnVlKTtcbiAgICB0aGlzLmludGVyYWN0aW9uRE9NRWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCdtb3VzZW91dCcsICAgICB0aGlzLm9uTW91c2VPdXQsIHRydWUpO1xuXG4gICAgdGhpcy5pbnRlcmFjdGlvbkRPTUVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigndG91Y2hzdGFydCcsICAgdGhpcy5vblRvdWNoU3RhcnQsIHRydWUpO1xuICAgIHRoaXMuaW50ZXJhY3Rpb25ET01FbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ3RvdWNoZW5kJywgICAgIHRoaXMub25Ub3VjaEVuZCwgdHJ1ZSk7XG4gICAgdGhpcy5pbnRlcmFjdGlvbkRPTUVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigndG91Y2htb3ZlJywgICAgdGhpcy5vblRvdWNoTW92ZSwgdHJ1ZSk7XG5cbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignbW91c2V1cCcsICB0aGlzLm9uTW91c2VVcCwgdHJ1ZSk7XG5cbiAgICB0aGlzLmV2ZW50c0FkZGVkID0gdHJ1ZTtcbn07XG5cbi8qKlxuICogUmVtb3ZlcyBhbGwgdGhlIERPTSBldmVudHMgdGhhdCB3ZXJlIHByZXZpb3VzbHkgcmVnaXN0ZXJlZFxuICpcbiAqIEBwcml2YXRlXG4gKi9cbkludGVyYWN0aW9uTWFuYWdlci5wcm90b3R5cGUucmVtb3ZlRXZlbnRzID0gZnVuY3Rpb24gKClcbntcbiAgICBpZiAoIXRoaXMuaW50ZXJhY3Rpb25ET01FbGVtZW50KVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvcmUudGlja2VyLnNoYXJlZC5yZW1vdmUodGhpcy51cGRhdGUpO1xuXG4gICAgaWYgKHdpbmRvdy5uYXZpZ2F0b3IubXNQb2ludGVyRW5hYmxlZClcbiAgICB7XG4gICAgICAgIHRoaXMuaW50ZXJhY3Rpb25ET01FbGVtZW50LnN0eWxlWyctbXMtY29udGVudC16b29taW5nJ10gPSAnJztcbiAgICAgICAgdGhpcy5pbnRlcmFjdGlvbkRPTUVsZW1lbnQuc3R5bGVbJy1tcy10b3VjaC1hY3Rpb24nXSA9ICcnO1xuICAgIH1cblxuICAgIHdpbmRvdy5kb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdtb3VzZW1vdmUnLCB0aGlzLm9uTW91c2VNb3ZlLCB0cnVlKTtcbiAgICB0aGlzLmludGVyYWN0aW9uRE9NRWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdtb3VzZWRvd24nLCB0aGlzLm9uTW91c2VEb3duLCB0cnVlKTtcbiAgICB0aGlzLmludGVyYWN0aW9uRE9NRWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdtb3VzZW91dCcsICB0aGlzLm9uTW91c2VPdXQsIHRydWUpO1xuXG4gICAgdGhpcy5pbnRlcmFjdGlvbkRPTUVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigndG91Y2hzdGFydCcsIHRoaXMub25Ub3VjaFN0YXJ0LCB0cnVlKTtcbiAgICB0aGlzLmludGVyYWN0aW9uRE9NRWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCd0b3VjaGVuZCcsICB0aGlzLm9uVG91Y2hFbmQsIHRydWUpO1xuICAgIHRoaXMuaW50ZXJhY3Rpb25ET01FbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3RvdWNobW92ZScsIHRoaXMub25Ub3VjaE1vdmUsIHRydWUpO1xuXG4gICAgdGhpcy5pbnRlcmFjdGlvbkRPTUVsZW1lbnQgPSBudWxsO1xuXG4gICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21vdXNldXAnLCAgdGhpcy5vbk1vdXNlVXAsIHRydWUpO1xuXG4gICAgdGhpcy5ldmVudHNBZGRlZCA9IGZhbHNlO1xufTtcblxuLyoqXG4gKiBVcGRhdGVzIHRoZSBzdGF0ZSBvZiBpbnRlcmFjdGl2ZSBvYmplY3RzLlxuICogSW52b2tlZCBieSBhIHRocm90dGxlZCB0aWNrZXIgdXBkYXRlIGZyb21cbiAqIHtAbGluayBQSVhJLnRpY2tlci5zaGFyZWR9LlxuICpcbiAqIEBwYXJhbSBkZWx0YVRpbWUge251bWJlcn1cbiAqL1xuSW50ZXJhY3Rpb25NYW5hZ2VyLnByb3RvdHlwZS51cGRhdGUgPSBmdW5jdGlvbiAoZGVsdGFUaW1lKVxue1xuICAgIHRoaXMuX2RlbHRhVGltZSArPSBkZWx0YVRpbWU7XG5cbiAgICBpZiAodGhpcy5fZGVsdGFUaW1lIDwgdGhpcy5pbnRlcmFjdGlvbkZyZXF1ZW5jeSlcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLl9kZWx0YVRpbWUgPSAwO1xuXG4gICAgaWYgKCF0aGlzLmludGVyYWN0aW9uRE9NRWxlbWVudClcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBpZiB0aGUgdXNlciBtb3ZlIHRoZSBtb3VzZSB0aGlzIGNoZWNrIGhhcyBhbHJlYWR5IGJlZW4gZGZvbmUgdXNpbmcgdGhlIG1vdXNlIG1vdmUhXG4gICAgaWYodGhpcy5kaWRNb3ZlKVxuICAgIHtcbiAgICAgICAgdGhpcy5kaWRNb3ZlID0gZmFsc2U7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLmN1cnNvciA9ICdpbmhlcml0JztcblxuICAgIHRoaXMucHJvY2Vzc0ludGVyYWN0aXZlKHRoaXMubW91c2UuZ2xvYmFsLCB0aGlzLnJlbmRlcmVyLl9sYXN0T2JqZWN0UmVuZGVyZWQsIHRoaXMucHJvY2Vzc01vdXNlT3Zlck91dCwgdHJ1ZSApO1xuXG4gICAgaWYgKHRoaXMuY3VycmVudEN1cnNvclN0eWxlICE9PSB0aGlzLmN1cnNvcilcbiAgICB7XG4gICAgICAgIHRoaXMuY3VycmVudEN1cnNvclN0eWxlID0gdGhpcy5jdXJzb3I7XG4gICAgICAgIHRoaXMuaW50ZXJhY3Rpb25ET01FbGVtZW50LnN0eWxlLmN1cnNvciA9IHRoaXMuY3Vyc29yO1xuICAgIH1cblxuICAgIC8vVE9ET1xufTtcblxuLyoqXG4gKiBEaXNwYXRjaGVzIGFuIGV2ZW50IG9uIHRoZSBkaXNwbGF5IG9iamVjdCB0aGF0IHdhcyBpbnRlcmFjdGVkIHdpdGhcbiAqXG4gKiBAcGFyYW0gZGlzcGxheU9iamVjdCB7UElYSS5Db250YWluZXJ8UElYSS5TcHJpdGV8UElYSS5leHRyYXMuVGlsaW5nU3ByaXRlfSB0aGUgZGlzcGxheSBvYmplY3QgaW4gcXVlc3Rpb25cbiAqIEBwYXJhbSBldmVudFN0cmluZyB7c3RyaW5nfSB0aGUgbmFtZSBvZiB0aGUgZXZlbnQgKGUuZywgbW91c2Vkb3duKVxuICogQHBhcmFtIGV2ZW50RGF0YSB7b2JqZWN0fSB0aGUgZXZlbnQgZGF0YSBvYmplY3RcbiAqIEBwcml2YXRlXG4gKi9cbkludGVyYWN0aW9uTWFuYWdlci5wcm90b3R5cGUuZGlzcGF0Y2hFdmVudCA9IGZ1bmN0aW9uICggZGlzcGxheU9iamVjdCwgZXZlbnRTdHJpbmcsIGV2ZW50RGF0YSApXG57XG4gICAgaWYoIWV2ZW50RGF0YS5zdG9wcGVkKVxuICAgIHtcbiAgICAgICAgZXZlbnREYXRhLnRhcmdldCA9IGRpc3BsYXlPYmplY3Q7XG4gICAgICAgIGV2ZW50RGF0YS50eXBlID0gZXZlbnRTdHJpbmc7XG5cbiAgICAgICAgZGlzcGxheU9iamVjdC5lbWl0KCBldmVudFN0cmluZywgZXZlbnREYXRhICk7XG5cbiAgICAgICAgaWYoIGRpc3BsYXlPYmplY3RbZXZlbnRTdHJpbmddIClcbiAgICAgICAge1xuICAgICAgICAgICAgZGlzcGxheU9iamVjdFtldmVudFN0cmluZ10oIGV2ZW50RGF0YSApO1xuICAgICAgICB9XG4gICAgfVxufTtcblxuLyoqXG4gKiBNYXBzIHggYW5kIHkgY29vcmRzIGZyb20gYSBET00gb2JqZWN0IGFuZCBtYXBzIHRoZW0gY29ycmVjdGx5IHRvIHRoZSBwaXhpIHZpZXcuIFRoZSByZXN1bHRpbmcgdmFsdWUgaXMgc3RvcmVkIGluIHRoZSBwb2ludC5cbiAqIFRoaXMgdGFrZXMgaW50byBhY2NvdW50IHRoZSBmYWN0IHRoYXQgdGhlIERPTSBlbGVtZW50IGNvdWxkIGJlIHNjYWxlZCBhbmQgcG9zaXRpb25lZCBhbnl3aGVyZSBvbiB0aGUgc2NyZWVuLlxuICpcbiAqIEBwYXJhbSAge1BJWEkuUG9pbnR9IHBvaW50IHRoZSBwb2ludCB0aGF0IHRoZSByZXN1bHQgd2lsbCBiZSBzdG9yZWQgaW5cbiAqIEBwYXJhbSAge251bWJlcn0geCAgICAgdGhlIHggY29vcmQgb2YgdGhlIHBvc2l0aW9uIHRvIG1hcFxuICogQHBhcmFtICB7bnVtYmVyfSB5ICAgICB0aGUgeSBjb29yZCBvZiB0aGUgcG9zaXRpb24gdG8gbWFwXG4gKi9cbkludGVyYWN0aW9uTWFuYWdlci5wcm90b3R5cGUubWFwUG9zaXRpb25Ub1BvaW50ID0gZnVuY3Rpb24gKCBwb2ludCwgeCwgeSApXG57XG4gICAgdmFyIHJlY3QgPSB0aGlzLmludGVyYWN0aW9uRE9NRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICBwb2ludC54ID0gKCAoIHggLSByZWN0LmxlZnQgKSAqICh0aGlzLmludGVyYWN0aW9uRE9NRWxlbWVudC53aWR0aCAgLyByZWN0LndpZHRoICApICkgLyB0aGlzLnJlc29sdXRpb247XG4gICAgcG9pbnQueSA9ICggKCB5IC0gcmVjdC50b3AgICkgKiAodGhpcy5pbnRlcmFjdGlvbkRPTUVsZW1lbnQuaGVpZ2h0IC8gcmVjdC5oZWlnaHQgKSApIC8gdGhpcy5yZXNvbHV0aW9uO1xufTtcblxuLyoqXG4gKiBUaGlzIGZ1bmN0aW9uIGlzIHByb3ZpZGVzIGEgbmVhdCB3YXkgb2YgY3Jhd2xpbmcgdGhyb3VnaCB0aGUgc2NlbmUgZ3JhcGggYW5kIHJ1bm5pbmcgYSBzcGVjaWZpZWQgZnVuY3Rpb24gb24gYWxsIGludGVyYWN0aXZlIG9iamVjdHMgaXQgZmluZHMuXG4gKiBJdCB3aWxsIGFsc28gdGFrZSBjYXJlIG9mIGhpdCB0ZXN0aW5nIHRoZSBpbnRlcmFjdGl2ZSBvYmplY3RzIGFuZCBwYXNzZXMgdGhlIGhpdCBhY3Jvc3MgaW4gdGhlIGZ1bmN0aW9uLlxuICpcbiAqIEBwYXJhbSAge1BJWEkuUG9pbnR9IHBvaW50IHRoZSBwb2ludCB0aGF0IGlzIHRlc3RlZCBmb3IgY29sbGlzaW9uXG4gKiBAcGFyYW0gIHtQSVhJLkNvbnRhaW5lcnxQSVhJLlNwcml0ZXxQSVhJLmV4dHJhcy5UaWxpbmdTcHJpdGV9IGRpc3BsYXlPYmplY3QgdGhlIGRpc3BsYXlPYmplY3QgdGhhdCB3aWxsIGJlIGhpdCB0ZXN0IChyZWN1cmNzaXZseSBjcmF3bHMgaXRzIGNoaWxkcmVuKVxuICogQHBhcmFtICB7RnVuY3Rpb259IGZ1bmMgdGhlIGZ1bmN0aW9uIHRoYXQgd2lsbCBiZSBjYWxsZWQgb24gZWFjaCBpbnRlcmFjdGl2ZSBvYmplY3QuIFRoZSBkaXNwbGF5T2JqZWN0IGFuZCBoaXQgd2lsbCBiZSBwYXNzZWQgdG8gdGhlIGZ1bmN0aW9uXG4gKiBAcGFyYW0gIHtib29sZWFufSBoaXRUZXN0IHRoaXMgaW5kaWNhdGVzIGlmIHRoZSBvYmplY3RzIGluc2lkZSBzaG91bGQgYmUgaGl0IHRlc3QgYWdhaW5zdCB0aGUgcG9pbnRcbiAqIEByZXR1cm4ge2Jvb2xlYW59IHJldHVybnMgdHJ1ZSBpZiB0aGUgZGlzcGxheU9iamVjdCBoaXQgdGhlIHBvaW50XG4gKi9cbkludGVyYWN0aW9uTWFuYWdlci5wcm90b3R5cGUucHJvY2Vzc0ludGVyYWN0aXZlID0gZnVuY3Rpb24gKHBvaW50LCBkaXNwbGF5T2JqZWN0LCBmdW5jLCBoaXRUZXN0LCBpbnRlcmFjdGl2ZSlcbntcbiAgICBpZighZGlzcGxheU9iamVjdCB8fCAhZGlzcGxheU9iamVjdC52aXNpYmxlKVxuICAgIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIC8vIFRvb2sgYSBsaXR0bGUgd2hpbGUgdG8gcmV3b3JrIHRoaXMgZnVuY3Rpb24gY29ycmVjdGx5ISBCdXQgbm93IGl0IGlzIGRvbmUgYW5kIG5pY2UgYW5kIG9wdGltaXNlZC4gXl9eXG4gICAgLy8gXG4gICAgLy8gVGhpcyBmdW5jdGlvbiB3aWxsIG5vdyBsb29wIHRocm91Z2ggYWxsIG9iamVjdHMgYW5kIHRoZW4gb25seSBoaXQgdGVzdCB0aGUgb2JqZWN0cyBpdCBIQVMgdG8sIG5vdCBhbGwgb2YgdGhlbS4gTVVDSCBmYXN0ZXIuLlxuICAgIC8vIEFuIG9iamVjdCB3aWxsIGJlIGhpdCB0ZXN0IGlmIHRoZSBmb2xsb3dpbmcgaXMgdHJ1ZTpcbiAgICAvLyBcbiAgICAvLyAxOiBJdCBpcyBpbnRlcmFjdGl2ZS5cbiAgICAvLyAyOiBJdCBiZWxvbmdzIHRvIGEgcGFyZW50IHRoYXQgaXMgaW50ZXJhY3RpdmUgQU5EIG9uZSBvZiB0aGUgcGFyZW50cyBjaGlsZHJlbiBoYXZlIG5vdCBhbHJlYWR5IGJlZW4gaGl0LlxuICAgIC8vIFxuICAgIC8vIEFzIGFub3RoZXIgbGl0dGxlIG9wdGltaXNhdGlvbiBvbmNlIGFuIGludGVyYWN0aXZlIG9iamVjdCBoYXMgYmVlbiBoaXQgd2UgY2FuIGNhcnJ5IG9uIHRocm91Z2ggdGhlIHNjZW5lZ3JhcGgsIGJ1dCB3ZSBrbm93IHRoYXQgdGhlcmUgd2lsbCBiZSBubyBtb3JlIGhpdHMhIFNvIHdlIGNhbiBhdm9pZCBleHRyYSBoaXQgdGVzdHNcbiAgICAvLyBBIGZpbmFsIG9wdGltaXNhdGlvbiBpcyB0aGF0IGFuIG9iamVjdCBpcyBub3QgaGl0IHRlc3QgZGlyZWN0bHkgaWYgYSBjaGlsZCBoYXMgYWxyZWFkeSBiZWVuIGhpdC5cbiAgICBcbiAgICB2YXIgaGl0ID0gZmFsc2UsXG4gICAgICAgIGludGVyYWN0aXZlUGFyZW50ID0gaW50ZXJhY3RpdmUgPSBkaXNwbGF5T2JqZWN0LmludGVyYWN0aXZlIHx8IGludGVyYWN0aXZlO1xuXG4gICAgLy8gaWYgdGhlIGRpc3BsYXlvYmplY3QgaGFzIGEgaGl0QXJlYSwgdGhlbiBpdCBkb2VzIG5vdCBuZWVkIHRvIGhpdFRlc3QgY2hpbGRyZW4uXG4gICAgaWYoZGlzcGxheU9iamVjdC5oaXRBcmVhKVxuICAgIHtcbiAgICAgICAgaW50ZXJhY3RpdmVQYXJlbnQgPSBmYWxzZTtcbiAgICB9XG5cbiAgICAvLyAqKiBGUkVFIFRJUCAqKiEgSWYgYW4gb2JqZWN0IGlzIG5vdCBpbnRlcmFjdHRpdmUgb3IgaGFzIG5vIGJ1dHRvbnMgaW4gaXQgKHN1Y2ggYXMgYSBnYW1lIHNjZW5lISkgc2V0IGludGVyYWN0aXZlQ2hpbGRyZW4gdG8gZmFsc2UgZm9yIHRoYXQgZGlzcGxheU9iamVjdC5cbiAgICAvLyBUaGlzIHdpbGwgYWxsb3cgcGl4aSB0byBjb21wbGV0bHkgaWdub3JlIGFuZCBieXBhc3MgY2hlY2tpbmcgdGhlIGRpc3BsYXlPYmplY3RzIGNoaWxkcmVuLlxuICAgIGlmKGRpc3BsYXlPYmplY3QuaW50ZXJhY3RpdmVDaGlsZHJlbilcbiAgICB7ICAgICAgIFxuICAgICAgICB2YXIgY2hpbGRyZW4gPSBkaXNwbGF5T2JqZWN0LmNoaWxkcmVuO1xuICAgICAgICBcbiAgICAgICAgZm9yICh2YXIgaSA9IGNoaWxkcmVuLmxlbmd0aC0xOyBpID49IDA7IGktLSlcbiAgICAgICAge1xuICAgICAgICAgICAgLy8gdGltZSB0byBnZXQgcmVjdXJzaXZlLi4gaWYgdGhpcyBmdW5jdGlvbiB3aWxsIHJldHVybiBpZiBzb210aGluZyBpcyBoaXQuLlxuICAgICAgICAgICAgaWYoIHRoaXMucHJvY2Vzc0ludGVyYWN0aXZlKHBvaW50LCBjaGlsZHJlbltpXSwgZnVuYywgaGl0VGVzdCwgaW50ZXJhY3RpdmVQYXJlbnQpIClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBoaXQgPSB0cnVlO1xuXG4gICAgICAgICAgICAgICAgLy8gd2Ugbm8gbG9uZ2VyIG5lZWQgdG8gaGl0IHRlc3QgYW55IG1vcmUgb2JqZWN0cyBpbiB0aGlzIGNvbnRhaW5lciBhcyB3ZSB3ZSBub3cga25vdyB0aGUgcGFyZW50IGhhcyBiZWVuIGhpdFxuICAgICAgICAgICAgICAgIGludGVyYWN0aXZlUGFyZW50ID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgLy8gSWYgdGhlIGNoaWxkIGlzIGludGVyYWN0aXZlICwgdGhhdCBtZWFucyB0aGF0IHRoZSBvYmplY3QgaGl0IHdhcyBhY3R1YWxseSBpbnRlcmFjdGl2ZSBhbmQgbm90IGp1c3QgdGhlIGNoaWxkIG9mIGFuIGludGVyYWN0aXZlIG9iamVjdC4gXG4gICAgICAgICAgICAgICAgLy8gVGhpcyBtZWFucyB3ZSBubyBsb25nZXIgbmVlZCB0byBoaXQgdGVzdCBhbnl0aGluZyBlbHNlLiBXZSBzdGlsbCBuZWVkIHRvIHJ1biB0aHJvdWdoIGFsbCBvYmplY3RzLCBidXQgd2UgZG9uJ3QgbmVlZCB0byBwZXJmb3JtIGFueSBoaXQgdGVzdHMuXG4gICAgICAgICAgICAgICAgaWYoY2hpbGRyZW5baV0uaW50ZXJhY3RpdmUpXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBoaXRUZXN0ID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gbm8gcG9pbnQgcnVubmluZyB0aGlzIGlmIHRoZSBpdGVtIGlzIG5vdCBpbnRlcmFjdGl2ZSBvciBkb2VzIG5vdCBoYXZlIGFuIGludGVyYWN0aXZlIHBhcmVudC5cbiAgICBpZihpbnRlcmFjdGl2ZSlcbiAgICB7XG4gICAgICAgIC8vIGlmIHdlIGFyZSBoaXQgdGVzdGluZyAoYXMgaW4gd2UgaGF2ZSBubyBoaXQgYW55IG9iamVjdHMgeWV0KVxuICAgICAgICAvLyBXZSBhbHNvIGRvbid0IG5lZWQgdG8gd29ycnkgYWJvdXQgaGl0IHRlc3RpbmcgaWYgb25jZSBvZiB0aGUgZGlzcGxheU9iamVjdHMgY2hpbGRyZW4gaGFzIGFscmVhZHkgYmVlbiBoaXQhXG4gICAgICAgIGlmKGhpdFRlc3QgJiYgIWhpdClcbiAgICAgICAgeyAgXG4gICAgICAgICAgICBpZihkaXNwbGF5T2JqZWN0LmhpdEFyZWEpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgZGlzcGxheU9iamVjdC53b3JsZFRyYW5zZm9ybS5hcHBseUludmVyc2UocG9pbnQsICB0aGlzLl90ZW1wUG9pbnQpO1xuICAgICAgICAgICAgICAgIGhpdCA9IGRpc3BsYXlPYmplY3QuaGl0QXJlYS5jb250YWlucyggdGhpcy5fdGVtcFBvaW50LngsIHRoaXMuX3RlbXBQb2ludC55ICk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmKGRpc3BsYXlPYmplY3QuY29udGFpbnNQb2ludClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBoaXQgPSBkaXNwbGF5T2JqZWN0LmNvbnRhaW5zUG9pbnQocG9pbnQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYoZGlzcGxheU9iamVjdC5pbnRlcmFjdGl2ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgZnVuYyhkaXNwbGF5T2JqZWN0LCBoaXQpOyBcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBoaXQ7XG4gIFxufTtcblxuXG4vKipcbiAqIElzIGNhbGxlZCB3aGVuIHRoZSBtb3VzZSBidXR0b24gaXMgcHJlc3NlZCBkb3duIG9uIHRoZSByZW5kZXJlciBlbGVtZW50XG4gKlxuICogQHBhcmFtIGV2ZW50IHtFdmVudH0gVGhlIERPTSBldmVudCBvZiBhIG1vdXNlIGJ1dHRvbiBiZWluZyBwcmVzc2VkIGRvd25cbiAqIEBwcml2YXRlXG4gKi9cbkludGVyYWN0aW9uTWFuYWdlci5wcm90b3R5cGUub25Nb3VzZURvd24gPSBmdW5jdGlvbiAoZXZlbnQpXG57XG4gICAgdGhpcy5tb3VzZS5vcmlnaW5hbEV2ZW50ID0gZXZlbnQ7XG4gICAgdGhpcy5ldmVudERhdGEuZGF0YSA9IHRoaXMubW91c2U7XG4gICAgdGhpcy5ldmVudERhdGEuc3RvcHBlZCA9IGZhbHNlO1xuXG4gICAgLy8gVXBkYXRlIGludGVybmFsIG1vdXNlIHJlZmVyZW5jZVxuICAgIHRoaXMubWFwUG9zaXRpb25Ub1BvaW50KCB0aGlzLm1vdXNlLmdsb2JhbCwgZXZlbnQuY2xpZW50WCwgZXZlbnQuY2xpZW50WSk7XG5cbiAgICBpZiAodGhpcy5hdXRvUHJldmVudERlZmF1bHQpXG4gICAge1xuICAgICAgICB0aGlzLm1vdXNlLm9yaWdpbmFsRXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICB9XG5cbiAgICB0aGlzLnByb2Nlc3NJbnRlcmFjdGl2ZSh0aGlzLm1vdXNlLmdsb2JhbCwgdGhpcy5yZW5kZXJlci5fbGFzdE9iamVjdFJlbmRlcmVkLCB0aGlzLnByb2Nlc3NNb3VzZURvd24sIHRydWUgKTtcbn07XG5cbi8qKlxuICogUHJvY2Vzc2VzIHRoZSByZXN1bHQgb2YgdGhlIG1vdXNlIGRvd24gY2hlY2sgYW5kIGRpc3BhdGNoZXMgdGhlIGV2ZW50IGlmIG5lZWQgYmVcbiAqXG4gKiBAcGFyYW0gZGlzcGxheU9iamVjdCB7UElYSS5Db250YWluZXJ8UElYSS5TcHJpdGV8UElYSS5leHRyYXMuVGlsaW5nU3ByaXRlfSBUaGUgZGlzcGxheSBvYmplY3QgdGhhdCB3YXMgdGVzdGVkXG4gKiBAcGFyYW0gaGl0IHtib29sZWFufSB0aGUgcmVzdWx0IG9mIHRoZSBoaXQgdGVzdCBvbiB0aGUgZGlzcGF5IG9iamVjdFxuICogQHByaXZhdGVcbiAqL1xuSW50ZXJhY3Rpb25NYW5hZ2VyLnByb3RvdHlwZS5wcm9jZXNzTW91c2VEb3duID0gZnVuY3Rpb24gKCBkaXNwbGF5T2JqZWN0LCBoaXQgKVxue1xuICAgIHZhciBlID0gdGhpcy5tb3VzZS5vcmlnaW5hbEV2ZW50O1xuICAgIFxuICAgIHZhciBpc1JpZ2h0QnV0dG9uID0gZS5idXR0b24gPT09IDIgfHwgZS53aGljaCA9PT0gMztcblxuICAgIGlmKGhpdClcbiAgICB7XG4gICAgICAgIGRpc3BsYXlPYmplY3RbIGlzUmlnaHRCdXR0b24gPyAnX2lzUmlnaHREb3duJyA6ICdfaXNMZWZ0RG93bicgXSA9IHRydWU7XG4gICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudCggZGlzcGxheU9iamVjdCwgaXNSaWdodEJ1dHRvbiA/ICdyaWdodGRvd24nIDogJ21vdXNlZG93bicsIHRoaXMuZXZlbnREYXRhICk7XG4gICAgfVxufTtcblxuXG5cbi8qKlxuICogSXMgY2FsbGVkIHdoZW4gdGhlIG1vdXNlIGJ1dHRvbiBpcyByZWxlYXNlZCBvbiB0aGUgcmVuZGVyZXIgZWxlbWVudFxuICpcbiAqIEBwYXJhbSBldmVudCB7RXZlbnR9IFRoZSBET00gZXZlbnQgb2YgYSBtb3VzZSBidXR0b24gYmVpbmcgcmVsZWFzZWRcbiAqIEBwcml2YXRlXG4gKi9cbkludGVyYWN0aW9uTWFuYWdlci5wcm90b3R5cGUub25Nb3VzZVVwID0gZnVuY3Rpb24gKGV2ZW50KVxue1xuICAgIHRoaXMubW91c2Uub3JpZ2luYWxFdmVudCA9IGV2ZW50O1xuICAgIHRoaXMuZXZlbnREYXRhLmRhdGEgPSB0aGlzLm1vdXNlO1xuICAgIHRoaXMuZXZlbnREYXRhLnN0b3BwZWQgPSBmYWxzZTtcblxuICAgIC8vIFVwZGF0ZSBpbnRlcm5hbCBtb3VzZSByZWZlcmVuY2VcbiAgICB0aGlzLm1hcFBvc2l0aW9uVG9Qb2ludCggdGhpcy5tb3VzZS5nbG9iYWwsIGV2ZW50LmNsaWVudFgsIGV2ZW50LmNsaWVudFkpO1xuXG4gICAgdGhpcy5wcm9jZXNzSW50ZXJhY3RpdmUodGhpcy5tb3VzZS5nbG9iYWwsIHRoaXMucmVuZGVyZXIuX2xhc3RPYmplY3RSZW5kZXJlZCwgdGhpcy5wcm9jZXNzTW91c2VVcCwgdHJ1ZSApO1xufTtcblxuLyoqXG4gKiBQcm9jZXNzZXMgdGhlIHJlc3VsdCBvZiB0aGUgbW91c2UgdXAgY2hlY2sgYW5kIGRpc3BhdGNoZXMgdGhlIGV2ZW50IGlmIG5lZWQgYmVcbiAqXG4gKiBAcGFyYW0gZGlzcGxheU9iamVjdCB7UElYSS5Db250YWluZXJ8UElYSS5TcHJpdGV8UElYSS5leHRyYXMuVGlsaW5nU3ByaXRlfSBUaGUgZGlzcGxheSBvYmplY3QgdGhhdCB3YXMgdGVzdGVkXG4gKiBAcGFyYW0gaGl0IHtib29sZWFufSB0aGUgcmVzdWx0IG9mIHRoZSBoaXQgdGVzdCBvbiB0aGUgZGlzcGxheSBvYmplY3RcbiAqIEBwcml2YXRlXG4gKi9cbkludGVyYWN0aW9uTWFuYWdlci5wcm90b3R5cGUucHJvY2Vzc01vdXNlVXAgPSBmdW5jdGlvbiAoIGRpc3BsYXlPYmplY3QsIGhpdCApXG57XG4gICAgdmFyIGUgPSB0aGlzLm1vdXNlLm9yaWdpbmFsRXZlbnQ7XG5cbiAgICB2YXIgaXNSaWdodEJ1dHRvbiA9IGUuYnV0dG9uID09PSAyIHx8IGUud2hpY2ggPT09IDM7XG4gICAgdmFyIGlzRG93biA9ICBpc1JpZ2h0QnV0dG9uID8gJ19pc1JpZ2h0RG93bicgOiAnX2lzTGVmdERvd24nO1xuXG4gICAgaWYoaGl0KVxuICAgIHtcbiAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50KCBkaXNwbGF5T2JqZWN0LCBpc1JpZ2h0QnV0dG9uID8gJ3JpZ2h0dXAnIDogJ21vdXNldXAnLCB0aGlzLmV2ZW50RGF0YSApO1xuXG4gICAgICAgIGlmKCBkaXNwbGF5T2JqZWN0WyBpc0Rvd24gXSApXG4gICAgICAgIHtcbiAgICAgICAgICAgIGRpc3BsYXlPYmplY3RbIGlzRG93biBdID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLmRpc3BhdGNoRXZlbnQoIGRpc3BsYXlPYmplY3QsIGlzUmlnaHRCdXR0b24gPyAncmlnaHRjbGljaycgOiAnY2xpY2snLCB0aGlzLmV2ZW50RGF0YSApO1xuICAgICAgICB9XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIGlmKCBkaXNwbGF5T2JqZWN0WyBpc0Rvd24gXSApXG4gICAgICAgIHtcbiAgICAgICAgICAgIGRpc3BsYXlPYmplY3RbIGlzRG93biBdID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLmRpc3BhdGNoRXZlbnQoIGRpc3BsYXlPYmplY3QsIGlzUmlnaHRCdXR0b24gPyAncmlnaHR1cG91dHNpZGUnIDogJ21vdXNldXBvdXRzaWRlJywgdGhpcy5ldmVudERhdGEgKTtcbiAgICAgICAgfVxuICAgIH1cbn07XG5cblxuLyoqXG4gKiBJcyBjYWxsZWQgd2hlbiB0aGUgbW91c2UgbW92ZXMgYWNyb3NzIHRoZSByZW5kZXJlciBlbGVtZW50XG4gKlxuICogQHBhcmFtIGV2ZW50IHtFdmVudH0gVGhlIERPTSBldmVudCBvZiB0aGUgbW91c2UgbW92aW5nXG4gKiBAcHJpdmF0ZVxuICovXG5JbnRlcmFjdGlvbk1hbmFnZXIucHJvdG90eXBlLm9uTW91c2VNb3ZlID0gZnVuY3Rpb24gKGV2ZW50KVxue1xuICAgIHRoaXMubW91c2Uub3JpZ2luYWxFdmVudCA9IGV2ZW50O1xuICAgIHRoaXMuZXZlbnREYXRhLmRhdGEgPSB0aGlzLm1vdXNlO1xuICAgIHRoaXMuZXZlbnREYXRhLnN0b3BwZWQgPSBmYWxzZTtcblxuICAgIHRoaXMubWFwUG9zaXRpb25Ub1BvaW50KCB0aGlzLm1vdXNlLmdsb2JhbCwgZXZlbnQuY2xpZW50WCwgZXZlbnQuY2xpZW50WSk7XG5cbiAgICB0aGlzLmRpZE1vdmUgPSB0cnVlO1xuXG4gICAgdGhpcy5jdXJzb3IgPSAnaW5oZXJpdCc7XG5cbiAgICB0aGlzLnByb2Nlc3NJbnRlcmFjdGl2ZSh0aGlzLm1vdXNlLmdsb2JhbCwgdGhpcy5yZW5kZXJlci5fbGFzdE9iamVjdFJlbmRlcmVkLCB0aGlzLnByb2Nlc3NNb3VzZU1vdmUsIHRydWUgKTtcblxuICAgIGlmICh0aGlzLmN1cnJlbnRDdXJzb3JTdHlsZSAhPT0gdGhpcy5jdXJzb3IpXG4gICAge1xuICAgICAgICB0aGlzLmN1cnJlbnRDdXJzb3JTdHlsZSA9IHRoaXMuY3Vyc29yO1xuICAgICAgICB0aGlzLmludGVyYWN0aW9uRE9NRWxlbWVudC5zdHlsZS5jdXJzb3IgPSB0aGlzLmN1cnNvcjtcbiAgICB9XG5cbiAgICAvL1RPRE8gQlVHIGZvciBwYXJlbnRzIGluZXJhY3RpdmUgb2JqZWN0IChib3JkZXIgb3JkZXIgaXNzdWUpXG59O1xuXG4vKipcbiAqIFByb2Nlc3NlcyB0aGUgcmVzdWx0IG9mIHRoZSBtb3VzZSBtb3ZlIGNoZWNrIGFuZCBkaXNwYXRjaGVzIHRoZSBldmVudCBpZiBuZWVkIGJlXG4gKlxuICogQHBhcmFtIGRpc3BsYXlPYmplY3Qge1BJWEkuQ29udGFpbmVyfFBJWEkuU3ByaXRlfFBJWEkuZXh0cmFzLlRpbGluZ1Nwcml0ZX0gVGhlIGRpc3BsYXkgb2JqZWN0IHRoYXQgd2FzIHRlc3RlZFxuICogQHBhcmFtIGhpdCB7Ym9vbGVhbn0gdGhlIHJlc3VsdCBvZiB0aGUgaGl0IHRlc3Qgb24gdGhlIGRpc3BsYXkgb2JqZWN0XG4gKiBAcHJpdmF0ZVxuICovXG5JbnRlcmFjdGlvbk1hbmFnZXIucHJvdG90eXBlLnByb2Nlc3NNb3VzZU1vdmUgPSBmdW5jdGlvbiAoIGRpc3BsYXlPYmplY3QsIGhpdCApXG57XG4gICAgdGhpcy5kaXNwYXRjaEV2ZW50KCBkaXNwbGF5T2JqZWN0LCAnbW91c2Vtb3ZlJywgdGhpcy5ldmVudERhdGEpO1xuICAgIHRoaXMucHJvY2Vzc01vdXNlT3Zlck91dChkaXNwbGF5T2JqZWN0LCBoaXQpO1xufTtcblxuXG4vKipcbiAqIElzIGNhbGxlZCB3aGVuIHRoZSBtb3VzZSBpcyBtb3ZlZCBvdXQgb2YgdGhlIHJlbmRlcmVyIGVsZW1lbnRcbiAqXG4gKiBAcGFyYW0gZXZlbnQge0V2ZW50fSBUaGUgRE9NIGV2ZW50IG9mIGEgbW91c2UgYmVpbmcgbW92ZWQgb3V0XG4gKiBAcHJpdmF0ZVxuICovXG5JbnRlcmFjdGlvbk1hbmFnZXIucHJvdG90eXBlLm9uTW91c2VPdXQgPSBmdW5jdGlvbiAoZXZlbnQpXG57XG4gICAgdGhpcy5tb3VzZS5vcmlnaW5hbEV2ZW50ID0gZXZlbnQ7XG4gICAgdGhpcy5ldmVudERhdGEuc3RvcHBlZCA9IGZhbHNlO1xuXG4gICAgLy8gVXBkYXRlIGludGVybmFsIG1vdXNlIHJlZmVyZW5jZVxuICAgIHRoaXMubWFwUG9zaXRpb25Ub1BvaW50KCB0aGlzLm1vdXNlLmdsb2JhbCwgZXZlbnQuY2xpZW50WCwgZXZlbnQuY2xpZW50WSk7XG5cbiAgICB0aGlzLmludGVyYWN0aW9uRE9NRWxlbWVudC5zdHlsZS5jdXJzb3IgPSAnaW5oZXJpdCc7XG5cbiAgICAvLyBUT0RPIG9wdGltaXplIGJ5IG5vdCBjaGVjayBFVkVSWSBUSU1FISBtYXliZSBoYWxmIGFzIG9mdGVuPyAvL1xuICAgIHRoaXMubWFwUG9zaXRpb25Ub1BvaW50KCB0aGlzLm1vdXNlLmdsb2JhbCwgZXZlbnQuY2xpZW50WCwgZXZlbnQuY2xpZW50WSApO1xuXG4gICAgdGhpcy5wcm9jZXNzSW50ZXJhY3RpdmUoIHRoaXMubW91c2UuZ2xvYmFsLCB0aGlzLnJlbmRlcmVyLl9sYXN0T2JqZWN0UmVuZGVyZWQsIHRoaXMucHJvY2Vzc01vdXNlT3Zlck91dCwgZmFsc2UgKTtcbn07XG5cbi8qKlxuICogUHJvY2Vzc2VzIHRoZSByZXN1bHQgb2YgdGhlIG1vdXNlIG92ZXIvb3V0IGNoZWNrIGFuZCBkaXNwYXRjaGVzIHRoZSBldmVudCBpZiBuZWVkIGJlXG4gKlxuICogQHBhcmFtIGRpc3BsYXlPYmplY3Qge1BJWEkuQ29udGFpbmVyfFBJWEkuU3ByaXRlfFBJWEkuZXh0cmFzLlRpbGluZ1Nwcml0ZX0gVGhlIGRpc3BsYXkgb2JqZWN0IHRoYXQgd2FzIHRlc3RlZFxuICogQHBhcmFtIGhpdCB7Ym9vbGVhbn0gdGhlIHJlc3VsdCBvZiB0aGUgaGl0IHRlc3Qgb24gdGhlIGRpc3BsYXkgb2JqZWN0XG4gKiBAcHJpdmF0ZVxuICovXG5JbnRlcmFjdGlvbk1hbmFnZXIucHJvdG90eXBlLnByb2Nlc3NNb3VzZU92ZXJPdXQgPSBmdW5jdGlvbiAoIGRpc3BsYXlPYmplY3QsIGhpdCApXG57XG4gICAgaWYoaGl0KVxuICAgIHtcbiAgICAgICAgaWYoIWRpc3BsYXlPYmplY3QuX292ZXIpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGRpc3BsYXlPYmplY3QuX292ZXIgPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50KCBkaXNwbGF5T2JqZWN0LCAnbW91c2VvdmVyJywgdGhpcy5ldmVudERhdGEgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChkaXNwbGF5T2JqZWN0LmJ1dHRvbk1vZGUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuY3Vyc29yID0gZGlzcGxheU9iamVjdC5kZWZhdWx0Q3Vyc29yO1xuICAgICAgICB9XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIGlmKGRpc3BsYXlPYmplY3QuX292ZXIpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGRpc3BsYXlPYmplY3QuX292ZXIgPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudCggZGlzcGxheU9iamVjdCwgJ21vdXNlb3V0JywgdGhpcy5ldmVudERhdGEpO1xuICAgICAgICB9XG4gICAgfVxufTtcblxuXG4vKipcbiAqIElzIGNhbGxlZCB3aGVuIGEgdG91Y2ggaXMgc3RhcnRlZCBvbiB0aGUgcmVuZGVyZXIgZWxlbWVudFxuICpcbiAqIEBwYXJhbSBldmVudCB7RXZlbnR9IFRoZSBET00gZXZlbnQgb2YgYSB0b3VjaCBzdGFydGluZyBvbiB0aGUgcmVuZGVyZXIgdmlld1xuICogQHByaXZhdGVcbiAqL1xuSW50ZXJhY3Rpb25NYW5hZ2VyLnByb3RvdHlwZS5vblRvdWNoU3RhcnQgPSBmdW5jdGlvbiAoZXZlbnQpXG57XG4gICAgaWYgKHRoaXMuYXV0b1ByZXZlbnREZWZhdWx0KVxuICAgIHtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICB9XG5cbiAgICB2YXIgY2hhbmdlZFRvdWNoZXMgPSBldmVudC5jaGFuZ2VkVG91Y2hlcztcbiAgICB2YXIgY0xlbmd0aCA9IGNoYW5nZWRUb3VjaGVzLmxlbmd0aDtcblxuICAgIGZvciAodmFyIGk9MDsgaSA8IGNMZW5ndGg7IGkrKylcbiAgICB7XG4gICAgICAgIHZhciB0b3VjaEV2ZW50ID0gY2hhbmdlZFRvdWNoZXNbaV07XG4gICAgICAgIC8vVE9ETyBQT09MXG4gICAgICAgIHZhciB0b3VjaERhdGEgPSB0aGlzLmdldFRvdWNoRGF0YSggdG91Y2hFdmVudCApO1xuXG4gICAgICAgIHRvdWNoRGF0YS5vcmlnaW5hbEV2ZW50ID0gZXZlbnQ7XG5cbiAgICAgICAgdGhpcy5ldmVudERhdGEuZGF0YSA9IHRvdWNoRGF0YTtcbiAgICAgICAgdGhpcy5ldmVudERhdGEuc3RvcHBlZCA9IGZhbHNlO1xuXG4gICAgICAgIHRoaXMucHJvY2Vzc0ludGVyYWN0aXZlKCB0b3VjaERhdGEuZ2xvYmFsLCB0aGlzLnJlbmRlcmVyLl9sYXN0T2JqZWN0UmVuZGVyZWQsIHRoaXMucHJvY2Vzc1RvdWNoU3RhcnQsIHRydWUgKTtcblxuICAgICAgICB0aGlzLnJldHVyblRvdWNoRGF0YSggdG91Y2hEYXRhICk7XG4gICAgfVxufTtcblxuLyoqXG4gKiBQcm9jZXNzZXMgdGhlIHJlc3VsdCBvZiBhIHRvdWNoIGNoZWNrIGFuZCBkaXNwYXRjaGVzIHRoZSBldmVudCBpZiBuZWVkIGJlXG4gKlxuICogQHBhcmFtIGRpc3BsYXlPYmplY3Qge1BJWEkuQ29udGFpbmVyfFBJWEkuU3ByaXRlfFBJWEkuZXh0cmFzLlRpbGluZ1Nwcml0ZX0gVGhlIGRpc3BsYXkgb2JqZWN0IHRoYXQgd2FzIHRlc3RlZFxuICogQHBhcmFtIGhpdCB7Ym9vbGVhbn0gdGhlIHJlc3VsdCBvZiB0aGUgaGl0IHRlc3Qgb24gdGhlIGRpc3BsYXkgb2JqZWN0XG4gKiBAcHJpdmF0ZVxuICovXG5JbnRlcmFjdGlvbk1hbmFnZXIucHJvdG90eXBlLnByb2Nlc3NUb3VjaFN0YXJ0ID0gZnVuY3Rpb24gKCBkaXNwbGF5T2JqZWN0LCBoaXQgKVxue1xuICAgIGlmKGhpdClcbiAgICB7XG4gICAgICAgIGRpc3BsYXlPYmplY3QuX3RvdWNoRG93biA9IHRydWU7XG4gICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudCggZGlzcGxheU9iamVjdCwgJ3RvdWNoc3RhcnQnLCB0aGlzLmV2ZW50RGF0YSApO1xuICAgIH1cbn07XG5cblxuLyoqXG4gKiBJcyBjYWxsZWQgd2hlbiBhIHRvdWNoIGVuZHMgb24gdGhlIHJlbmRlcmVyIGVsZW1lbnRcbiAqXG4gKiBAcGFyYW0gZXZlbnQge0V2ZW50fSBUaGUgRE9NIGV2ZW50IG9mIGEgdG91Y2ggZW5kaW5nIG9uIHRoZSByZW5kZXJlciB2aWV3XG4gKi9cbkludGVyYWN0aW9uTWFuYWdlci5wcm90b3R5cGUub25Ub3VjaEVuZCA9IGZ1bmN0aW9uIChldmVudClcbntcbiAgICBpZiAodGhpcy5hdXRvUHJldmVudERlZmF1bHQpXG4gICAge1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIH1cblxuICAgIHZhciBjaGFuZ2VkVG91Y2hlcyA9IGV2ZW50LmNoYW5nZWRUb3VjaGVzO1xuICAgIHZhciBjTGVuZ3RoID0gY2hhbmdlZFRvdWNoZXMubGVuZ3RoO1xuXG4gICAgZm9yICh2YXIgaT0wOyBpIDwgY0xlbmd0aDsgaSsrKVxuICAgIHtcbiAgICAgICAgdmFyIHRvdWNoRXZlbnQgPSBjaGFuZ2VkVG91Y2hlc1tpXTtcblxuICAgICAgICB2YXIgdG91Y2hEYXRhID0gdGhpcy5nZXRUb3VjaERhdGEoIHRvdWNoRXZlbnQgKTtcblxuICAgICAgICB0b3VjaERhdGEub3JpZ2luYWxFdmVudCA9IGV2ZW50O1xuXG4gICAgICAgIC8vVE9ETyB0aGlzIHNob3VsZCBiZSBwYXNzZWQgYWxvbmcuLiBubyBzZXRcbiAgICAgICAgdGhpcy5ldmVudERhdGEuZGF0YSA9IHRvdWNoRGF0YTtcbiAgICAgICAgdGhpcy5ldmVudERhdGEuc3RvcHBlZCA9IGZhbHNlO1xuXG5cbiAgICAgICAgdGhpcy5wcm9jZXNzSW50ZXJhY3RpdmUoIHRvdWNoRGF0YS5nbG9iYWwsIHRoaXMucmVuZGVyZXIuX2xhc3RPYmplY3RSZW5kZXJlZCwgdGhpcy5wcm9jZXNzVG91Y2hFbmQsIHRydWUgKTtcblxuICAgICAgICB0aGlzLnJldHVyblRvdWNoRGF0YSggdG91Y2hEYXRhICk7XG4gICAgfVxufTtcblxuLyoqXG4gKiBQcm9jZXNzZXMgdGhlIHJlc3VsdCBvZiB0aGUgZW5kIG9mIGEgdG91Y2ggYW5kIGRpc3BhdGNoZXMgdGhlIGV2ZW50IGlmIG5lZWQgYmVcbiAqXG4gKiBAcGFyYW0gZGlzcGxheU9iamVjdCB7UElYSS5Db250YWluZXJ8UElYSS5TcHJpdGV8UElYSS5leHRyYXMuVGlsaW5nU3ByaXRlfSBUaGUgZGlzcGxheSBvYmplY3QgdGhhdCB3YXMgdGVzdGVkXG4gKiBAcGFyYW0gaGl0IHtib29sZWFufSB0aGUgcmVzdWx0IG9mIHRoZSBoaXQgdGVzdCBvbiB0aGUgZGlzcGxheSBvYmplY3RcbiAqIEBwcml2YXRlXG4gKi9cbkludGVyYWN0aW9uTWFuYWdlci5wcm90b3R5cGUucHJvY2Vzc1RvdWNoRW5kID0gZnVuY3Rpb24gKCBkaXNwbGF5T2JqZWN0LCBoaXQgKVxue1xuICAgIGlmKGhpdClcbiAgICB7XG4gICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudCggZGlzcGxheU9iamVjdCwgJ3RvdWNoZW5kJywgdGhpcy5ldmVudERhdGEgKTtcblxuICAgICAgICBpZiggZGlzcGxheU9iamVjdC5fdG91Y2hEb3duIClcbiAgICAgICAge1xuICAgICAgICAgICAgZGlzcGxheU9iamVjdC5fdG91Y2hEb3duID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLmRpc3BhdGNoRXZlbnQoIGRpc3BsYXlPYmplY3QsICd0YXAnLCB0aGlzLmV2ZW50RGF0YSApO1xuICAgICAgICB9XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIGlmKCBkaXNwbGF5T2JqZWN0Ll90b3VjaERvd24gKVxuICAgICAgICB7XG4gICAgICAgICAgICBkaXNwbGF5T2JqZWN0Ll90b3VjaERvd24gPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudCggZGlzcGxheU9iamVjdCwgJ3RvdWNoZW5kb3V0c2lkZScsIHRoaXMuZXZlbnREYXRhICk7XG4gICAgICAgIH1cbiAgICB9XG59O1xuXG4vKipcbiAqIElzIGNhbGxlZCB3aGVuIGEgdG91Y2ggaXMgbW92ZWQgYWNyb3NzIHRoZSByZW5kZXJlciBlbGVtZW50XG4gKlxuICogQHBhcmFtIGV2ZW50IHtFdmVudH0gVGhlIERPTSBldmVudCBvZiBhIHRvdWNoIG1vdmluZyBhY3Jvc3MgdGhlIHJlbmRlcmVyIHZpZXdcbiAqIEBwcml2YXRlXG4gKi9cbkludGVyYWN0aW9uTWFuYWdlci5wcm90b3R5cGUub25Ub3VjaE1vdmUgPSBmdW5jdGlvbiAoZXZlbnQpXG57XG4gICAgaWYgKHRoaXMuYXV0b1ByZXZlbnREZWZhdWx0KVxuICAgIHtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICB9XG5cbiAgICB2YXIgY2hhbmdlZFRvdWNoZXMgPSBldmVudC5jaGFuZ2VkVG91Y2hlcztcbiAgICB2YXIgY0xlbmd0aCA9IGNoYW5nZWRUb3VjaGVzLmxlbmd0aDtcblxuICAgIGZvciAodmFyIGk9MDsgaSA8IGNMZW5ndGg7IGkrKylcbiAgICB7XG4gICAgICAgIHZhciB0b3VjaEV2ZW50ID0gY2hhbmdlZFRvdWNoZXNbaV07XG5cbiAgICAgICAgdmFyIHRvdWNoRGF0YSA9IHRoaXMuZ2V0VG91Y2hEYXRhKCB0b3VjaEV2ZW50ICk7XG5cbiAgICAgICAgdG91Y2hEYXRhLm9yaWdpbmFsRXZlbnQgPSBldmVudDtcblxuICAgICAgICB0aGlzLmV2ZW50RGF0YS5kYXRhID0gdG91Y2hEYXRhO1xuICAgICAgICB0aGlzLmV2ZW50RGF0YS5zdG9wcGVkID0gZmFsc2U7XG5cbiAgICAgICAgdGhpcy5wcm9jZXNzSW50ZXJhY3RpdmUoIHRvdWNoRGF0YS5nbG9iYWwsIHRoaXMucmVuZGVyZXIuX2xhc3RPYmplY3RSZW5kZXJlZCwgdGhpcy5wcm9jZXNzVG91Y2hNb3ZlLCB0cnVlICk7XG5cbiAgICAgICAgdGhpcy5yZXR1cm5Ub3VjaERhdGEoIHRvdWNoRGF0YSApO1xuICAgIH1cbn07XG5cbi8qKlxuICogUHJvY2Vzc2VzIHRoZSByZXN1bHQgb2YgYSB0b3VjaCBtb3ZlIGNoZWNrIGFuZCBkaXNwYXRjaGVzIHRoZSBldmVudCBpZiBuZWVkIGJlXG4gKlxuICogQHBhcmFtIGRpc3BsYXlPYmplY3Qge1BJWEkuQ29udGFpbmVyfFBJWEkuU3ByaXRlfFBJWEkuZXh0cmFzLlRpbGluZ1Nwcml0ZX0gVGhlIGRpc3BsYXkgb2JqZWN0IHRoYXQgd2FzIHRlc3RlZFxuICogQHBhcmFtIGhpdCB7Ym9vbGVhbn0gdGhlIHJlc3VsdCBvZiB0aGUgaGl0IHRlc3Qgb24gdGhlIGRpc3BsYXkgb2JqZWN0XG4gKiBAcHJpdmF0ZVxuICovXG5JbnRlcmFjdGlvbk1hbmFnZXIucHJvdG90eXBlLnByb2Nlc3NUb3VjaE1vdmUgPSBmdW5jdGlvbiAoIGRpc3BsYXlPYmplY3QsIGhpdCApXG57XG4gICAgaGl0ID0gaGl0O1xuICAgIHRoaXMuZGlzcGF0Y2hFdmVudCggZGlzcGxheU9iamVjdCwgJ3RvdWNobW92ZScsIHRoaXMuZXZlbnREYXRhKTtcbn07XG5cbi8qKlxuICogR3JhYnMgYW4gaW50ZXJhY3Rpb24gZGF0YSBvYmplY3QgZnJvbSB0aGUgaW50ZXJuYWwgcG9vbFxuICpcbiAqIEBwYXJhbSB0b3VjaEV2ZW50IHtFdmVudERhdGF9IFRoZSB0b3VjaCBldmVudCB3ZSBuZWVkIHRvIHBhaXIgd2l0aCBhbiBpbnRlcmFjdGlvbkRhdGEgb2JqZWN0XG4gKlxuICogQHByaXZhdGVcbiAqL1xuSW50ZXJhY3Rpb25NYW5hZ2VyLnByb3RvdHlwZS5nZXRUb3VjaERhdGEgPSBmdW5jdGlvbiAodG91Y2hFdmVudClcbntcbiAgICB2YXIgdG91Y2hEYXRhID0gdGhpcy5pbnRlcmFjdGl2ZURhdGFQb29sLnBvcCgpO1xuXG4gICAgaWYoIXRvdWNoRGF0YSlcbiAgICB7XG4gICAgICAgIHRvdWNoRGF0YSA9IG5ldyBJbnRlcmFjdGlvbkRhdGEoKTtcbiAgICB9XG5cbiAgICB0b3VjaERhdGEuaWRlbnRpZmllciA9IHRvdWNoRXZlbnQuaWRlbnRpZmllcjtcbiAgICB0aGlzLm1hcFBvc2l0aW9uVG9Qb2ludCggdG91Y2hEYXRhLmdsb2JhbCwgdG91Y2hFdmVudC5jbGllbnRYLCB0b3VjaEV2ZW50LmNsaWVudFkgKTtcblxuICAgIGlmKG5hdmlnYXRvci5pc0NvY29vbkpTKVxuICAgIHtcbiAgICAgICAgdG91Y2hEYXRhLmdsb2JhbC54ID0gdG91Y2hEYXRhLmdsb2JhbC54IC8gdGhpcy5yZXNvbHV0aW9uO1xuICAgICAgICB0b3VjaERhdGEuZ2xvYmFsLnkgPSB0b3VjaERhdGEuZ2xvYmFsLnkgLyB0aGlzLnJlc29sdXRpb247XG4gICAgfVxuXG4gICAgdG91Y2hFdmVudC5nbG9iYWxYID0gdG91Y2hEYXRhLmdsb2JhbC54O1xuICAgIHRvdWNoRXZlbnQuZ2xvYmFsWSA9IHRvdWNoRGF0YS5nbG9iYWwueTtcblxuICAgIHJldHVybiB0b3VjaERhdGE7XG59O1xuXG4vKipcbiAqIFJldHVybnMgYW4gaW50ZXJhY3Rpb24gZGF0YSBvYmplY3QgdG8gdGhlIGludGVybmFsIHBvb2xcbiAqXG4gKiBAcGFyYW0gdG91Y2hEYXRhIHtQSVhJLmludGVyYWN0aW9uLkludGVyYWN0aW9uRGF0YX0gVGhlIHRvdWNoIGRhdGEgb2JqZWN0IHdlIHdhbnQgdG8gcmV0dXJuIHRvIHRoZSBwb29sXG4gKlxuICogQHByaXZhdGVcbiAqL1xuSW50ZXJhY3Rpb25NYW5hZ2VyLnByb3RvdHlwZS5yZXR1cm5Ub3VjaERhdGEgPSBmdW5jdGlvbiAoIHRvdWNoRGF0YSApXG57XG4gICAgdGhpcy5pbnRlcmFjdGl2ZURhdGFQb29sLnB1c2goIHRvdWNoRGF0YSApO1xufTtcblxuLyoqXG4gKiBEZXN0cm95cyB0aGUgaW50ZXJhY3Rpb24gbWFuYWdlclxuICpcbiAqL1xuSW50ZXJhY3Rpb25NYW5hZ2VyLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKCkge1xuICAgIHRoaXMucmVtb3ZlRXZlbnRzKCk7XG5cbiAgICB0aGlzLnJlbmRlcmVyID0gbnVsbDtcblxuICAgIHRoaXMubW91c2UgPSBudWxsO1xuXG4gICAgdGhpcy5ldmVudERhdGEgPSBudWxsO1xuXG4gICAgdGhpcy5pbnRlcmFjdGl2ZURhdGFQb29sID0gbnVsbDtcblxuICAgIHRoaXMuaW50ZXJhY3Rpb25ET01FbGVtZW50ID0gbnVsbDtcblxuICAgIHRoaXMub25Nb3VzZVVwID0gbnVsbDtcbiAgICB0aGlzLnByb2Nlc3NNb3VzZVVwID0gbnVsbDtcblxuXG4gICAgdGhpcy5vbk1vdXNlRG93biA9IG51bGw7XG4gICAgdGhpcy5wcm9jZXNzTW91c2VEb3duID0gbnVsbDtcblxuICAgIHRoaXMub25Nb3VzZU1vdmUgPSBudWxsO1xuICAgIHRoaXMucHJvY2Vzc01vdXNlTW92ZSA9IG51bGw7XG5cbiAgICB0aGlzLm9uTW91c2VPdXQgPSBudWxsO1xuICAgIHRoaXMucHJvY2Vzc01vdXNlT3Zlck91dCA9IG51bGw7XG5cblxuICAgIHRoaXMub25Ub3VjaFN0YXJ0ID0gbnVsbDtcbiAgICB0aGlzLnByb2Nlc3NUb3VjaFN0YXJ0ID0gbnVsbDtcblxuICAgIHRoaXMub25Ub3VjaEVuZCA9IG51bGw7XG4gICAgdGhpcy5wcm9jZXNzVG91Y2hFbmQgPSBudWxsO1xuXG4gICAgdGhpcy5vblRvdWNoTW92ZSA9IG51bGw7XG4gICAgdGhpcy5wcm9jZXNzVG91Y2hNb3ZlID0gbnVsbDtcblxuICAgIHRoaXMuX3RlbXBQb2ludCA9IG51bGw7XG59O1xuXG5jb3JlLldlYkdMUmVuZGVyZXIucmVnaXN0ZXJQbHVnaW4oJ2ludGVyYWN0aW9uJywgSW50ZXJhY3Rpb25NYW5hZ2VyKTtcbmNvcmUuQ2FudmFzUmVuZGVyZXIucmVnaXN0ZXJQbHVnaW4oJ2ludGVyYWN0aW9uJywgSW50ZXJhY3Rpb25NYW5hZ2VyKTtcbiIsIi8qKlxuICogQGZpbGUgICAgICAgIE1haW4gZXhwb3J0IG9mIHRoZSBQSVhJIGludGVyYWN0aW9ucyBsaWJyYXJ5XG4gKiBAYXV0aG9yICAgICAgTWF0IEdyb3ZlcyA8bWF0QGdvb2Rib3lkaWdpdGFsLmNvbT5cbiAqIEBjb3B5cmlnaHQgICAyMDEzLTIwMTUgR29vZEJveURpZ2l0YWxcbiAqIEBsaWNlbnNlICAgICB7QGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL3BpeGlqcy9waXhpLmpzL2Jsb2IvbWFzdGVyL0xJQ0VOU0V8TUlUIExpY2Vuc2V9XG4gKi9cblxuLyoqXG4gKiBAbmFtZXNwYWNlIFBJWEkuaW50ZXJhY3Rpb25cbiAqL1xubW9kdWxlLmV4cG9ydHMgPSB7XG4gICAgSW50ZXJhY3Rpb25EYXRhOiAgICByZXF1aXJlKCcuL0ludGVyYWN0aW9uRGF0YScpLFxuICAgIEludGVyYWN0aW9uTWFuYWdlcjogcmVxdWlyZSgnLi9JbnRlcmFjdGlvbk1hbmFnZXInKSxcbiAgICBpbnRlcmFjdGl2ZVRhcmdldDogIHJlcXVpcmUoJy4vaW50ZXJhY3RpdmVUYXJnZXQnKVxufTtcbiIsIi8qKlxuICogRGVmYXVsdCBwcm9wZXJ0eSB2YWx1ZXMgb2YgaW50ZXJhY3RpdmUgb2JqZWN0c1xuICogdXNlZCBieSB7QGxpbmsgUElYSS5pbnRlcmFjdGlvbi5JbnRlcmFjdGlvbk1hbmFnZXJ9LlxuICpcbiAqIEBtaXhpblxuICogQG1lbWJlcm9mIFBJWEkuaW50ZXJhY3Rpb25cbiAqIEBleGFtcGxlXG4gKiAgICAgIGZ1bmN0aW9uIE15T2JqZWN0KCkge31cbiAqXG4gKiAgICAgIE9iamVjdC5hc3NpZ24oXG4gKiAgICAgICAgICBNeU9iamVjdC5wcm90b3R5cGUsXG4gKiAgICAgICAgICBQSVhJLmludGVyYWN0aW9uLmludGVyYWN0aXZlVGFyZ2V0XG4gKiAgICAgICk7XG4gKi9cbnZhciBpbnRlcmFjdGl2ZVRhcmdldCA9IHtcbiAgICAvKipcbiAgICAgKiBAdG9kbyBOZWVkcyBkb2NzLlxuICAgICAqL1xuICAgIGludGVyYWN0aXZlOiBmYWxzZSxcbiAgICAvKipcbiAgICAgKiBAdG9kbyBOZWVkcyBkb2NzLlxuICAgICAqL1xuICAgIGJ1dHRvbk1vZGU6IGZhbHNlLFxuICAgIC8qKlxuICAgICAqIEB0b2RvIE5lZWRzIGRvY3MuXG4gICAgICovXG4gICAgaW50ZXJhY3RpdmVDaGlsZHJlbjogdHJ1ZSxcbiAgICAvKipcbiAgICAgKiBAdG9kbyBOZWVkcyBkb2NzLlxuICAgICAqL1xuICAgIGRlZmF1bHRDdXJzb3I6ICdwb2ludGVyJyxcblxuICAgIC8vIHNvbWUgaW50ZXJuYWwgY2hlY2tzLi5cblxuICAgIC8qKlxuICAgICAqIEB0b2RvIE5lZWRzIGRvY3MuXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICBfb3ZlcjogZmFsc2UsXG4gICAgLyoqXG4gICAgICogQHRvZG8gTmVlZHMgZG9jcy5cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIF90b3VjaERvd246IGZhbHNlXG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGludGVyYWN0aXZlVGFyZ2V0O1xuIiwidmFyIFJlc291cmNlID0gcmVxdWlyZSgncmVzb3VyY2UtbG9hZGVyJykuUmVzb3VyY2UsXG4gICAgY29yZSA9IHJlcXVpcmUoJy4uL2NvcmUnKSxcbiAgICBleHRyYXMgPSByZXF1aXJlKCcuLi9leHRyYXMnKSxcbiAgICBwYXRoID0gcmVxdWlyZSgncGF0aCcpO1xuXG5cbmZ1bmN0aW9uIHBhcnNlKHJlc291cmNlLCB0ZXh0dXJlKSB7XG4gICAgdmFyIGRhdGEgPSB7fTtcbiAgICB2YXIgaW5mbyA9IHJlc291cmNlLmRhdGEuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2luZm8nKVswXTtcbiAgICB2YXIgY29tbW9uID0gcmVzb3VyY2UuZGF0YS5nZXRFbGVtZW50c0J5VGFnTmFtZSgnY29tbW9uJylbMF07XG5cbiAgICBkYXRhLmZvbnQgPSBpbmZvLmdldEF0dHJpYnV0ZSgnZmFjZScpO1xuICAgIGRhdGEuc2l6ZSA9IHBhcnNlSW50KGluZm8uZ2V0QXR0cmlidXRlKCdzaXplJyksIDEwKTtcbiAgICBkYXRhLmxpbmVIZWlnaHQgPSBwYXJzZUludChjb21tb24uZ2V0QXR0cmlidXRlKCdsaW5lSGVpZ2h0JyksIDEwKTtcbiAgICBkYXRhLmNoYXJzID0ge307XG5cbiAgICAvL3BhcnNlIGxldHRlcnNcbiAgICB2YXIgbGV0dGVycyA9IHJlc291cmNlLmRhdGEuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2NoYXInKTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGV0dGVycy5sZW5ndGg7IGkrKylcbiAgICB7XG4gICAgICAgIHZhciBjaGFyQ29kZSA9IHBhcnNlSW50KGxldHRlcnNbaV0uZ2V0QXR0cmlidXRlKCdpZCcpLCAxMCk7XG5cbiAgICAgICAgdmFyIHRleHR1cmVSZWN0ID0gbmV3IGNvcmUuUmVjdGFuZ2xlKFxuICAgICAgICAgICAgcGFyc2VJbnQobGV0dGVyc1tpXS5nZXRBdHRyaWJ1dGUoJ3gnKSwgMTApICsgdGV4dHVyZS5mcmFtZS54LFxuICAgICAgICAgICAgcGFyc2VJbnQobGV0dGVyc1tpXS5nZXRBdHRyaWJ1dGUoJ3knKSwgMTApICsgdGV4dHVyZS5mcmFtZS55LFxuICAgICAgICAgICAgcGFyc2VJbnQobGV0dGVyc1tpXS5nZXRBdHRyaWJ1dGUoJ3dpZHRoJyksIDEwKSxcbiAgICAgICAgICAgIHBhcnNlSW50KGxldHRlcnNbaV0uZ2V0QXR0cmlidXRlKCdoZWlnaHQnKSwgMTApXG4gICAgICAgICk7XG5cbiAgICAgICAgZGF0YS5jaGFyc1tjaGFyQ29kZV0gPSB7XG4gICAgICAgICAgICB4T2Zmc2V0OiBwYXJzZUludChsZXR0ZXJzW2ldLmdldEF0dHJpYnV0ZSgneG9mZnNldCcpLCAxMCksXG4gICAgICAgICAgICB5T2Zmc2V0OiBwYXJzZUludChsZXR0ZXJzW2ldLmdldEF0dHJpYnV0ZSgneW9mZnNldCcpLCAxMCksXG4gICAgICAgICAgICB4QWR2YW5jZTogcGFyc2VJbnQobGV0dGVyc1tpXS5nZXRBdHRyaWJ1dGUoJ3hhZHZhbmNlJyksIDEwKSxcbiAgICAgICAgICAgIGtlcm5pbmc6IHt9LFxuICAgICAgICAgICAgdGV4dHVyZTogbmV3IGNvcmUuVGV4dHVyZSh0ZXh0dXJlLmJhc2VUZXh0dXJlLCB0ZXh0dXJlUmVjdClcblxuICAgICAgICB9O1xuICAgIH1cblxuICAgIC8vcGFyc2Uga2VybmluZ3NcbiAgICB2YXIga2VybmluZ3MgPSByZXNvdXJjZS5kYXRhLmdldEVsZW1lbnRzQnlUYWdOYW1lKCdrZXJuaW5nJyk7XG4gICAgZm9yIChpID0gMDsgaSA8IGtlcm5pbmdzLmxlbmd0aDsgaSsrKVxuICAgIHtcbiAgICAgICAgdmFyIGZpcnN0ID0gcGFyc2VJbnQoa2VybmluZ3NbaV0uZ2V0QXR0cmlidXRlKCdmaXJzdCcpLCAxMCk7XG4gICAgICAgIHZhciBzZWNvbmQgPSBwYXJzZUludChrZXJuaW5nc1tpXS5nZXRBdHRyaWJ1dGUoJ3NlY29uZCcpLCAxMCk7XG4gICAgICAgIHZhciBhbW91bnQgPSBwYXJzZUludChrZXJuaW5nc1tpXS5nZXRBdHRyaWJ1dGUoJ2Ftb3VudCcpLCAxMCk7XG5cbiAgICAgICAgZGF0YS5jaGFyc1tzZWNvbmRdLmtlcm5pbmdbZmlyc3RdID0gYW1vdW50O1xuICAgIH1cblxuICAgIHJlc291cmNlLmJpdG1hcEZvbnQgPSBkYXRhO1xuXG4gICAgLy8gSSdtIGxlYXZpbmcgdGhpcyBhcyBhIHRlbXBvcmFyeSBmaXggc28gd2UgY2FuIHRlc3QgdGhlIGJpdG1hcCBmb250cyBpbiB2M1xuICAgIC8vIGJ1dCBpdCdzIHZlcnkgbGlrZWx5IHRvIGNoYW5nZVxuICAgIGV4dHJhcy5CaXRtYXBUZXh0LmZvbnRzW2RhdGEuZm9udF0gPSBkYXRhO1xufVxuXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKClcbntcbiAgICByZXR1cm4gZnVuY3Rpb24gKHJlc291cmNlLCBuZXh0KVxuICAgIHtcbiAgICAgICAgLy8gc2tpcCBpZiBubyBkYXRhIG9yIG5vdCB4bWwgZGF0YVxuICAgICAgICBpZiAoIXJlc291cmNlLmRhdGEgfHwgIXJlc291cmNlLmlzWG1sKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gbmV4dCgpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gc2tpcCBpZiBub3QgYml0bWFwIGZvbnQgZGF0YSwgdXNpbmcgc29tZSBzaWxseSBkdWNrLXR5cGluZ1xuICAgICAgICBpZiAoXG4gICAgICAgICAgICByZXNvdXJjZS5kYXRhLmdldEVsZW1lbnRzQnlUYWdOYW1lKCdwYWdlJykubGVuZ3RoID09PSAwIHx8XG4gICAgICAgICAgICByZXNvdXJjZS5kYXRhLmdldEVsZW1lbnRzQnlUYWdOYW1lKCdpbmZvJykubGVuZ3RoID09PSAwIHx8XG4gICAgICAgICAgICByZXNvdXJjZS5kYXRhLmdldEVsZW1lbnRzQnlUYWdOYW1lKCdpbmZvJylbMF0uZ2V0QXR0cmlidXRlKCdmYWNlJykgPT09IG51bGxcbiAgICAgICAgICAgIClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIG5leHQoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciB4bWxVcmwgPSBwYXRoLmRpcm5hbWUocmVzb3VyY2UudXJsKTtcblxuICAgICAgICBpZiAoeG1sVXJsID09PSAnLicpIHtcbiAgICAgICAgICAgIHhtbFVybCA9ICcnO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuYmFzZVVybCAmJiB4bWxVcmwpIHtcbiAgICAgICAgICAgIC8vIGlmIGJhc2V1cmwgaGFzIGEgdHJhaWxpbmcgc2xhc2ggdGhlbiBhZGQgb25lIHRvIHhtbFVybCBzbyB0aGUgcmVwbGFjZSB3b3JrcyBiZWxvd1xuICAgICAgICAgICAgaWYgKHRoaXMuYmFzZVVybC5jaGFyQXQodGhpcy5iYXNlVXJsLmxlbmd0aCAtIDEpID09PSAnLycpIHtcbiAgICAgICAgICAgICAgICB4bWxVcmwgKz0gJy8nO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyByZW1vdmUgYmFzZVVybCBmcm9tIHhtbFVybFxuICAgICAgICAgICAgeG1sVXJsID0geG1sVXJsLnJlcGxhY2UodGhpcy5iYXNlVXJsLCAnJyk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBpZiB0aGVyZSBpcyBhbiB4bWxVcmwgbm93LCBpdCBuZWVkcyBhIHRyYWlsaW5nIHNsYXNoLiBFbnN1cmUgdGhhdCBpdCBkb2VzIGlmIHRoZSBzdHJpbmcgaXNuJ3QgZW1wdHkuXG4gICAgICAgIGlmICh4bWxVcmwgJiYgeG1sVXJsLmNoYXJBdCh4bWxVcmwubGVuZ3RoIC0gMSkgIT09ICcvJykge1xuICAgICAgICAgICAgeG1sVXJsICs9ICcvJztcbiAgICAgICAgfVxuICAgICAgICB2YXIgdGV4dHVyZVVybCA9IHhtbFVybCArIHJlc291cmNlLmRhdGEuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ3BhZ2UnKVswXS5nZXRBdHRyaWJ1dGUoJ2ZpbGUnKTtcbiAgICAgICAgaWYgKGNvcmUudXRpbHMuVGV4dHVyZUNhY2hlW3RleHR1cmVVcmxdKSB7XG4gICAgICAgICAgICAvL3JldXNlIGV4aXN0aW5nIHRleHR1cmVcbiAgICAgICAgICAgIHBhcnNlKHJlc291cmNlLCBjb3JlLnV0aWxzLlRleHR1cmVDYWNoZVt0ZXh0dXJlVXJsXSk7XG4gICAgICAgICAgICBuZXh0KCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB2YXIgbG9hZE9wdGlvbnMgPSB7XG4gICAgICAgICAgICAgICAgY3Jvc3NPcmlnaW46IHJlc291cmNlLmNyb3NzT3JpZ2luLFxuICAgICAgICAgICAgICAgIGxvYWRUeXBlOiBSZXNvdXJjZS5MT0FEX1RZUEUuSU1BR0UsXG4gICAgICAgICAgICAgICAgbWV0YWRhdGE6IHJlc291cmNlLm1ldGFkYXRhLmltYWdlTWV0YWRhdGFcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICAvLyBsb2FkIHRoZSB0ZXh0dXJlIGZvciB0aGUgZm9udFxuICAgICAgICAgICAgdGhpcy5hZGQocmVzb3VyY2UubmFtZSArICdfaW1hZ2UnLCB0ZXh0dXJlVXJsLCBsb2FkT3B0aW9ucywgZnVuY3Rpb24gKHJlcykge1xuICAgICAgICAgICAgICAgIHBhcnNlKHJlc291cmNlLCByZXMudGV4dHVyZSk7XG4gICAgICAgICAgICAgICAgbmV4dCgpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9O1xufTtcbiIsIi8qKlxuICogQGZpbGUgICAgICAgIE1haW4gZXhwb3J0IG9mIHRoZSBQSVhJIGxvYWRlcnMgbGlicmFyeVxuICogQGF1dGhvciAgICAgIE1hdCBHcm92ZXMgPG1hdEBnb29kYm95ZGlnaXRhbC5jb20+XG4gKiBAY29weXJpZ2h0ICAgMjAxMy0yMDE1IEdvb2RCb3lEaWdpdGFsXG4gKiBAbGljZW5zZSAgICAge0BsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9waXhpanMvcGl4aS5qcy9ibG9iL21hc3Rlci9MSUNFTlNFfE1JVCBMaWNlbnNlfVxuICovXG5cbi8qKlxuICogQG5hbWVzcGFjZSBQSVhJLmxvYWRlcnNcbiAqL1xubW9kdWxlLmV4cG9ydHMgPSB7XG4gICAgTG9hZGVyOiAgICAgICAgICAgICByZXF1aXJlKCcuL2xvYWRlcicpLFxuXG4gICAgLy8gcGFyc2Vyc1xuICAgIGJpdG1hcEZvbnRQYXJzZXI6ICAgcmVxdWlyZSgnLi9iaXRtYXBGb250UGFyc2VyJyksXG4gICAgc3ByaXRlc2hlZXRQYXJzZXI6ICByZXF1aXJlKCcuL3Nwcml0ZXNoZWV0UGFyc2VyJyksXG4gICAgdGV4dHVyZVBhcnNlcjogICAgICByZXF1aXJlKCcuL3RleHR1cmVQYXJzZXInKSxcbiAgICBSZXNvdXJjZTogICAgICAgICAgIHJlcXVpcmUoJ3Jlc291cmNlLWxvYWRlcicpLlJlc291cmNlXG59O1xuIiwidmFyIFJlc291cmNlTG9hZGVyID0gcmVxdWlyZSgncmVzb3VyY2UtbG9hZGVyJyksXG4gICAgdGV4dHVyZVBhcnNlciA9IHJlcXVpcmUoJy4vdGV4dHVyZVBhcnNlcicpLFxuICAgIHNwcml0ZXNoZWV0UGFyc2VyID0gcmVxdWlyZSgnLi9zcHJpdGVzaGVldFBhcnNlcicpLFxuICAgIGJpdG1hcEZvbnRQYXJzZXIgPSByZXF1aXJlKCcuL2JpdG1hcEZvbnRQYXJzZXInKTtcblxuLyoqXG4gKlxuICogVGhlIG5ldyBsb2FkZXIsIGV4dGVuZHMgUmVzb3VyY2UgTG9hZGVyIGJ5IENoYWQgRW5nbGVyIDogaHR0cHM6Ly9naXRodWIuY29tL2VuZ2xlcmNqL3Jlc291cmNlLWxvYWRlclxuICpcbiAqIGBgYGpzXG4gKiB2YXIgbG9hZGVyID0gUElYSS5sb2FkZXI7IC8vIHBpeGkgZXhwb3NlcyBhIHByZW1hZGUgaW5zdGFuY2UgZm9yIHlvdSB0byB1c2UuXG4gKiAvL29yXG4gKiB2YXIgbG9hZGVyID0gbmV3IFBJWEkubG9hZGVycy5Mb2FkZXIoKTsgLy8geW91IGNhbiBhbHNvIGNyZWF0ZSB5b3VyIG93biBpZiB5b3Ugd2FudFxuICpcbiAqIGxvYWRlci5hZGQoJ2J1bm55JyxcImRhdGEvYnVubnkucG5nXCIpO1xuICpcbiAqIGxvYWRlci5vbmNlKCdjb21wbGV0ZScsb25Bc3NldHNMb2FkZWQpO1xuICpcbiAqIGxvYWRlci5sb2FkKCk7XG4gKiBgYGBcbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuUmVzb3VyY2VMb2FkZXJcbiAqIEBtZW1iZXJvZiBQSVhJLmxvYWRlcnNcbiAqIEBwYXJhbSBbYmFzZVVybD0nJ10ge3N0cmluZ30gVGhlIGJhc2UgdXJsIGZvciBhbGwgcmVzb3VyY2VzIGxvYWRlZCBieSB0aGlzIGxvYWRlci5cbiAqIEBwYXJhbSBbY29uY3VycmVuY3k9MTBdIHtudW1iZXJ9IFRoZSBudW1iZXIgb2YgcmVzb3VyY2VzIHRvIGxvYWQgY29uY3VycmVudGx5LlxuICovXG5mdW5jdGlvbiBMb2FkZXIoYmFzZVVybCwgY29uY3VycmVuY3kpXG57XG4gICAgUmVzb3VyY2VMb2FkZXIuY2FsbCh0aGlzLCBiYXNlVXJsLCBjb25jdXJyZW5jeSk7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IExvYWRlci5fcGl4aU1pZGRsZXdhcmUubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgdGhpcy51c2UoTG9hZGVyLl9waXhpTWlkZGxld2FyZVtpXSgpKTtcbiAgICB9XG59XG5cbkxvYWRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFJlc291cmNlTG9hZGVyLnByb3RvdHlwZSk7XG5Mb2FkZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gTG9hZGVyO1xuXG5tb2R1bGUuZXhwb3J0cyA9IExvYWRlcjtcblxuTG9hZGVyLl9waXhpTWlkZGxld2FyZSA9IFtcbiAgICAvLyBwYXJzZSBhbnkgYmxvYiBpbnRvIG1vcmUgdXNhYmxlIG9iamVjdHMgKGUuZy4gSW1hZ2UpXG4gICAgUmVzb3VyY2VMb2FkZXIubWlkZGxld2FyZS5wYXJzaW5nLmJsb2IsXG4gICAgLy8gcGFyc2UgYW55IEltYWdlIG9iamVjdHMgaW50byB0ZXh0dXJlc1xuICAgIHRleHR1cmVQYXJzZXIsXG4gICAgLy8gcGFyc2UgYW55IHNwcml0ZXNoZWV0IGRhdGEgaW50byBtdWx0aXBsZSB0ZXh0dXJlc1xuICAgIHNwcml0ZXNoZWV0UGFyc2VyLFxuICAgIC8vIHBhcnNlIGFueSBzcHJpdGVzaGVldCBkYXRhIGludG8gbXVsdGlwbGUgdGV4dHVyZXNcbiAgICBiaXRtYXBGb250UGFyc2VyXG5dO1xuXG5Mb2FkZXIuYWRkUGl4aU1pZGRsZXdhcmUgPSBmdW5jdGlvbiAoZm4pIHtcbiAgICBMb2FkZXIuX3BpeGlNaWRkbGV3YXJlLnB1c2goZm4pO1xufTtcblxuLy8gQWRkIGN1c3RvbSBleHRlbnRpb25zXG52YXIgUmVzb3VyY2UgPSBSZXNvdXJjZUxvYWRlci5SZXNvdXJjZTtcblxuUmVzb3VyY2Uuc2V0RXh0ZW5zaW9uWGhyVHlwZSgnZm50JywgUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuRE9DVU1FTlQpO1xuIiwidmFyIFJlc291cmNlID0gcmVxdWlyZSgncmVzb3VyY2UtbG9hZGVyJykuUmVzb3VyY2UsXG4gICAgcGF0aCA9IHJlcXVpcmUoJ3BhdGgnKSxcbiAgICBjb3JlID0gcmVxdWlyZSgnLi4vY29yZScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICgpXG57XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChyZXNvdXJjZSwgbmV4dClcbiAgICB7XG4gICAgICAgIC8vIHNraXAgaWYgbm8gZGF0YSwgaXRzIG5vdCBqc29uLCBvciBpdCBpc24ndCBzcHJpdGVzaGVldCBkYXRhXG4gICAgICAgIGlmICghcmVzb3VyY2UuZGF0YSB8fCAhcmVzb3VyY2UuaXNKc29uIHx8ICFyZXNvdXJjZS5kYXRhLmZyYW1lcylcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIG5leHQoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBsb2FkT3B0aW9ucyA9IHtcbiAgICAgICAgICAgIGNyb3NzT3JpZ2luOiByZXNvdXJjZS5jcm9zc09yaWdpbixcbiAgICAgICAgICAgIGxvYWRUeXBlOiBSZXNvdXJjZS5MT0FEX1RZUEUuSU1BR0UsXG4gICAgICAgICAgICBtZXRhZGF0YTogcmVzb3VyY2UubWV0YWRhdGEuaW1hZ2VNZXRhZGF0YVxuICAgICAgICB9O1xuXG4gICAgICAgIHZhciByb3V0ZSA9IHBhdGguZGlybmFtZShyZXNvdXJjZS51cmwucmVwbGFjZSh0aGlzLmJhc2VVcmwsICcnKSk7XG5cbiAgICAgICAgdmFyIHJlc29sdXRpb24gPSBjb3JlLnV0aWxzLmdldFJlc29sdXRpb25PZlVybCggcmVzb3VyY2UudXJsICk7XG5cbiAgICAgICAgLy8gbG9hZCB0aGUgaW1hZ2UgZm9yIHRoaXMgc2hlZXRcbiAgICAgICAgdGhpcy5hZGQocmVzb3VyY2UubmFtZSArICdfaW1hZ2UnLCByb3V0ZSArICcvJyArIHJlc291cmNlLmRhdGEubWV0YS5pbWFnZSwgbG9hZE9wdGlvbnMsIGZ1bmN0aW9uIChyZXMpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJlc291cmNlLnRleHR1cmVzID0ge307XG5cbiAgICAgICAgICAgIHZhciBmcmFtZXMgPSByZXNvdXJjZS5kYXRhLmZyYW1lcztcblxuICAgICAgICAgICAgZm9yICh2YXIgaSBpbiBmcmFtZXMpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdmFyIHJlY3QgPSBmcmFtZXNbaV0uZnJhbWU7XG5cbiAgICAgICAgICAgICAgICBpZiAocmVjdClcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBzaXplID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHRyaW0gPSBudWxsO1xuXG4gICAgICAgICAgICAgICAgICAgIGlmIChmcmFtZXNbaV0ucm90YXRlZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZSA9IG5ldyBjb3JlLlJlY3RhbmdsZShyZWN0LngsIHJlY3QueSwgcmVjdC5oLCByZWN0LncpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZSA9IG5ldyBjb3JlLlJlY3RhbmdsZShyZWN0LngsIHJlY3QueSwgcmVjdC53LCByZWN0LmgpO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgLy8gIENoZWNrIHRvIHNlZSBpZiB0aGUgc3ByaXRlIGlzIHRyaW1tZWRcbiAgICAgICAgICAgICAgICAgICAgaWYgKGZyYW1lc1tpXS50cmltbWVkKVxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0cmltID0gbmV3IGNvcmUuUmVjdGFuZ2xlKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyYW1lc1tpXS5zcHJpdGVTb3VyY2VTaXplLnggLyByZXNvbHV0aW9uLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyYW1lc1tpXS5zcHJpdGVTb3VyY2VTaXplLnkgLyByZXNvbHV0aW9uLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyYW1lc1tpXS5zb3VyY2VTaXplLncgLyByZXNvbHV0aW9uLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyYW1lc1tpXS5zb3VyY2VTaXplLmggLyByZXNvbHV0aW9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIC8vIGZsaXAgdGhlIHdpZHRoIGFuZCBoZWlnaHQhXG4gICAgICAgICAgICAgICAgICAgIGlmIChmcmFtZXNbaV0ucm90YXRlZClcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHRlbXAgPSBzaXplLndpZHRoO1xuICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZS53aWR0aCA9IHNpemUuaGVpZ2h0O1xuICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZS5oZWlnaHQgPSB0ZW1wO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgc2l6ZS54IC89IHJlc29sdXRpb247XG4gICAgICAgICAgICAgICAgICAgIHNpemUueSAvPSByZXNvbHV0aW9uO1xuICAgICAgICAgICAgICAgICAgICBzaXplLndpZHRoIC89IHJlc29sdXRpb247XG4gICAgICAgICAgICAgICAgICAgIHNpemUuaGVpZ2h0IC89IHJlc29sdXRpb247XG5cbiAgICAgICAgICAgICAgICAgICAgcmVzb3VyY2UudGV4dHVyZXNbaV0gPSBuZXcgY29yZS5UZXh0dXJlKHJlcy50ZXh0dXJlLmJhc2VUZXh0dXJlLCBzaXplLCBzaXplLmNsb25lKCksIHRyaW0sIGZyYW1lc1tpXS5yb3RhdGVkKTtcblxuICAgICAgICAgICAgICAgICAgICAvLyBsZXRzIGFsc28gYWRkIHRoZSBmcmFtZSB0byBwaXhpJ3MgZ2xvYmFsIGNhY2hlIGZvciBmcm9tRnJhbWUgYW5kIGZyb21JbWFnZSBmdW5jdGlvbnNcbiAgICAgICAgICAgICAgICAgICAgY29yZS51dGlscy5UZXh0dXJlQ2FjaGVbaV0gPSByZXNvdXJjZS50ZXh0dXJlc1tpXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIG5leHQoKTtcbiAgICAgICAgfSk7XG4gICAgfTtcbn07XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uL2NvcmUnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoKVxue1xuICAgIHJldHVybiBmdW5jdGlvbiAocmVzb3VyY2UsIG5leHQpXG4gICAge1xuICAgICAgICAvLyBjcmVhdGUgYSBuZXcgdGV4dHVyZSBpZiB0aGUgZGF0YSBpcyBhbiBJbWFnZSBvYmplY3RcbiAgICAgICAgaWYgKHJlc291cmNlLmRhdGEgJiYgcmVzb3VyY2UuaXNJbWFnZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdmFyIGJhc2VUZXh0dXJlID0gbmV3IGNvcmUuQmFzZVRleHR1cmUocmVzb3VyY2UuZGF0YSwgbnVsbCwgY29yZS51dGlscy5nZXRSZXNvbHV0aW9uT2ZVcmwocmVzb3VyY2UudXJsKSk7XG4gICAgICAgICAgICBiYXNlVGV4dHVyZS5pbWFnZVVybCA9IHJlc291cmNlLnVybDtcbiAgICAgICAgICAgIHJlc291cmNlLnRleHR1cmUgPSBuZXcgY29yZS5UZXh0dXJlKGJhc2VUZXh0dXJlKTtcbiAgICAgICAgICAgIC8vIGxldHMgYWxzbyBhZGQgdGhlIGZyYW1lIHRvIHBpeGkncyBnbG9iYWwgY2FjaGUgZm9yIGZyb21GcmFtZSBhbmQgZnJvbUltYWdlIGZ1Y250aW9uc1xuICAgICAgICAgICAgY29yZS51dGlscy5CYXNlVGV4dHVyZUNhY2hlW3Jlc291cmNlLnVybF0gPSBiYXNlVGV4dHVyZTtcbiAgICAgICAgICAgIGNvcmUudXRpbHMuVGV4dHVyZUNhY2hlW3Jlc291cmNlLnVybF0gPSByZXNvdXJjZS50ZXh0dXJlO1xuICAgICAgICB9XG5cbiAgICAgICAgbmV4dCgpO1xuICAgIH07XG59O1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi9jb3JlJyksXG4gICAgdGVtcFBvaW50ID0gbmV3IGNvcmUuUG9pbnQoKSxcbiAgICB0ZW1wUG9seWdvbiA9IG5ldyBjb3JlLlBvbHlnb24oKTtcblxuLyoqXG4gKiBCYXNlIG1lc2ggY2xhc3NcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5Db250YWluZXJcbiAqIEBtZW1iZXJvZiBQSVhJLm1lc2hcbiAqIEBwYXJhbSB0ZXh0dXJlIHtQSVhJLlRleHR1cmV9IFRoZSB0ZXh0dXJlIHRvIHVzZVxuICogQHBhcmFtIFt2ZXJ0aWNlc10ge0Zsb2F0MzJBcnJheX0gaWYgeW91IHdhbnQgdG8gc3BlY2lmeSB0aGUgdmVydGljZXNcbiAqIEBwYXJhbSBbdXZzXSB7RmxvYXQzMkFycmF5fSBpZiB5b3Ugd2FudCB0byBzcGVjaWZ5IHRoZSB1dnNcbiAqIEBwYXJhbSBbaW5kaWNlc10ge1VpbnQxNkFycmF5fSBpZiB5b3Ugd2FudCB0byBzcGVjaWZ5IHRoZSBpbmRpY2VzXG4gKiBAcGFyYW0gW2RyYXdNb2RlXSB7bnVtYmVyfSB0aGUgZHJhd01vZGUsIGNhbiBiZSBhbnkgb2YgdGhlIE1lc2guRFJBV19NT0RFUyBjb25zdHNcbiAqL1xuZnVuY3Rpb24gTWVzaCh0ZXh0dXJlLCB2ZXJ0aWNlcywgdXZzLCBpbmRpY2VzLCBkcmF3TW9kZSlcbntcbiAgICBjb3JlLkNvbnRhaW5lci5jYWxsKHRoaXMpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHRleHR1cmUgb2YgdGhlIE1lc2hcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuVGV4dHVyZX1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX3RleHR1cmUgPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogVGhlIFV2cyBvZiB0aGUgTWVzaFxuICAgICAqXG4gICAgICogQG1lbWJlciB7RmxvYXQzMkFycmF5fVxuICAgICAqL1xuICAgIHRoaXMudXZzID0gdXZzIHx8IG5ldyBGbG9hdDMyQXJyYXkoWzAsIDAsXG4gICAgICAgIDEsIDAsXG4gICAgICAgIDEsIDEsXG4gICAgICAgIDAsIDFdKTtcblxuICAgIC8qKlxuICAgICAqIEFuIGFycmF5IG9mIHZlcnRpY2VzXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtGbG9hdDMyQXJyYXl9XG4gICAgICovXG4gICAgdGhpcy52ZXJ0aWNlcyA9IHZlcnRpY2VzIHx8IG5ldyBGbG9hdDMyQXJyYXkoWzAsIDAsXG4gICAgICAgIDEwMCwgMCxcbiAgICAgICAgMTAwLCAxMDAsXG4gICAgICAgIDAsIDEwMF0pO1xuXG4gICAgLypcbiAgICAgKiBAbWVtYmVyIHtVaW50MTZBcnJheX0gQW4gYXJyYXkgY29udGFpbmluZyB0aGUgaW5kaWNlcyBvZiB0aGUgdmVydGljZXNcbiAgICAgKi9cbiAgICAvLyAgVE9ETyBhdXRvIGdlbmVyYXRlIHRoaXMgYmFzZWQgb24gZHJhdyBtb2RlIVxuICAgIHRoaXMuaW5kaWNlcyA9IGluZGljZXMgfHwgbmV3IFVpbnQxNkFycmF5KFswLCAxLCAzLCAyXSk7XG5cbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIHRoZSBNZXNoIGlzIGRpcnR5IG9yIG5vdFxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKi9cbiAgICB0aGlzLmRpcnR5ID0gdHJ1ZTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBibGVuZCBtb2RlIHRvIGJlIGFwcGxpZWQgdG8gdGhlIHNwcml0ZS4gU2V0IHRvIGBQSVhJLkJMRU5EX01PREVTLk5PUk1BTGAgdG8gcmVtb3ZlIGFueSBibGVuZCBtb2RlLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IFBJWEkuQkxFTkRfTU9ERVMuTk9STUFMXG4gICAgICogQHNlZSBQSVhJLkJMRU5EX01PREVTXG4gICAgICovXG4gICAgdGhpcy5ibGVuZE1vZGUgPSBjb3JlLkJMRU5EX01PREVTLk5PUk1BTDtcblxuICAgIC8qKlxuICAgICAqIFRyaWFuZ2xlcyBpbiBjYW52YXMgbW9kZSBhcmUgYXV0b21hdGljYWxseSBhbnRpYWxpYXNlZCwgdXNlIHRoaXMgdmFsdWUgdG8gZm9yY2UgdHJpYW5nbGVzIHRvIG92ZXJsYXAgYSBiaXQgd2l0aCBlYWNoIG90aGVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMuY2FudmFzUGFkZGluZyA9IDA7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgd2F5IHRoZSBNZXNoIHNob3VsZCBiZSBkcmF3biwgY2FuIGJlIGFueSBvZiB0aGUge0BsaW5rIFBJWEkubWVzaC5NZXNoLkRSQVdfTU9ERVN9IGNvbnN0c1xuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBzZWUgUElYSS5tZXNoLk1lc2guRFJBV19NT0RFU1xuICAgICAqL1xuICAgIHRoaXMuZHJhd01vZGUgPSBkcmF3TW9kZSB8fCBNZXNoLkRSQVdfTU9ERVMuVFJJQU5HTEVfTUVTSDtcblxuICAgIC8vIHJ1biB0ZXh0dXJlIHNldHRlcjtcbiAgICB0aGlzLnRleHR1cmUgPSB0ZXh0dXJlO1xuXG4gICAgIC8qKlxuICAgICAqIFRoZSBkZWZhdWx0IHNoYWRlciB0aGF0IGlzIHVzZWQgaWYgYSBtZXNoIGRvZXNuJ3QgaGF2ZSBhIG1vcmUgc3BlY2lmaWMgb25lLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5TaGFkZXJ9XG4gICAgICovXG4gICAgdGhpcy5zaGFkZXIgPSBudWxsO1xufVxuXG4vLyBjb25zdHJ1Y3RvclxuTWVzaC5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuQ29udGFpbmVyLnByb3RvdHlwZSk7XG5NZXNoLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IE1lc2g7XG5tb2R1bGUuZXhwb3J0cyA9IE1lc2g7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKE1lc2gucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogVGhlIHRleHR1cmUgdGhhdCB0aGUgc3ByaXRlIGlzIHVzaW5nXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlRleHR1cmV9XG4gICAgICogQG1lbWJlcm9mIFBJWEkubWVzaC5NZXNoI1xuICAgICAqL1xuICAgIHRleHR1cmU6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gIHRoaXMuX3RleHR1cmU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICBpZiAodGhpcy5fdGV4dHVyZSA9PT0gdmFsdWUpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLl90ZXh0dXJlID0gdmFsdWU7XG5cbiAgICAgICAgICAgIGlmICh2YWx1ZSlcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAvLyB3YWl0IGZvciB0aGUgdGV4dHVyZSB0byBsb2FkXG4gICAgICAgICAgICAgICAgaWYgKHZhbHVlLmJhc2VUZXh0dXJlLmhhc0xvYWRlZClcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX29uVGV4dHVyZVVwZGF0ZSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICB2YWx1ZS5vbmNlKCd1cGRhdGUnLCB0aGlzLl9vblRleHR1cmVVcGRhdGUsIHRoaXMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn0pO1xuXG4vKipcbiAqIFJlbmRlcnMgdGhlIG9iamVjdCB1c2luZyB0aGUgV2ViR0wgcmVuZGVyZXJcbiAqXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcn0gYSByZWZlcmVuY2UgdG8gdGhlIFdlYkdMIHJlbmRlcmVyXG4gKiBAcHJpdmF0ZVxuICovXG5NZXNoLnByb3RvdHlwZS5fcmVuZGVyV2ViR0wgPSBmdW5jdGlvbiAocmVuZGVyZXIpXG57XG4gICAgcmVuZGVyZXIuc2V0T2JqZWN0UmVuZGVyZXIocmVuZGVyZXIucGx1Z2lucy5tZXNoKTtcbiAgICByZW5kZXJlci5wbHVnaW5zLm1lc2gucmVuZGVyKHRoaXMpO1xufTtcblxuLyoqXG4gKiBSZW5kZXJzIHRoZSBvYmplY3QgdXNpbmcgdGhlIENhbnZhcyByZW5kZXJlclxuICpcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5DYW52YXNSZW5kZXJlcn1cbiAqIEBwcml2YXRlXG4gKi9cbk1lc2gucHJvdG90eXBlLl9yZW5kZXJDYW52YXMgPSBmdW5jdGlvbiAocmVuZGVyZXIpXG57XG4gICAgdmFyIGNvbnRleHQgPSByZW5kZXJlci5jb250ZXh0O1xuXG4gICAgdmFyIHRyYW5zZm9ybSA9IHRoaXMud29ybGRUcmFuc2Zvcm07XG5cbiAgICBpZiAocmVuZGVyZXIucm91bmRQaXhlbHMpXG4gICAge1xuICAgICAgICBjb250ZXh0LnNldFRyYW5zZm9ybSh0cmFuc2Zvcm0uYSwgdHJhbnNmb3JtLmIsIHRyYW5zZm9ybS5jLCB0cmFuc2Zvcm0uZCwgdHJhbnNmb3JtLnR4IHwgMCwgdHJhbnNmb3JtLnR5IHwgMCk7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIGNvbnRleHQuc2V0VHJhbnNmb3JtKHRyYW5zZm9ybS5hLCB0cmFuc2Zvcm0uYiwgdHJhbnNmb3JtLmMsIHRyYW5zZm9ybS5kLCB0cmFuc2Zvcm0udHgsIHRyYW5zZm9ybS50eSk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuZHJhd01vZGUgPT09IE1lc2guRFJBV19NT0RFUy5UUklBTkdMRV9NRVNIKVxuICAgIHtcbiAgICAgICAgdGhpcy5fcmVuZGVyQ2FudmFzVHJpYW5nbGVNZXNoKGNvbnRleHQpO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICB0aGlzLl9yZW5kZXJDYW52YXNUcmlhbmdsZXMoY29udGV4dCk7XG4gICAgfVxufTtcblxuLyoqXG4gKiBEcmF3cyB0aGUgb2JqZWN0IGluIFRyaWFuZ2xlIE1lc2ggbW9kZSB1c2luZyBjYW52YXNcbiAqXG4gKiBAcGFyYW0gY29udGV4dCB7Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEfSB0aGUgY3VycmVudCBkcmF3aW5nIGNvbnRleHRcbiAqIEBwcml2YXRlXG4gKi9cbk1lc2gucHJvdG90eXBlLl9yZW5kZXJDYW52YXNUcmlhbmdsZU1lc2ggPSBmdW5jdGlvbiAoY29udGV4dClcbntcbiAgICAvLyBkcmF3IHRyaWFuZ2xlcyEhXG4gICAgdmFyIHZlcnRpY2VzID0gdGhpcy52ZXJ0aWNlcztcbiAgICB2YXIgdXZzID0gdGhpcy51dnM7XG5cbiAgICB2YXIgbGVuZ3RoID0gdmVydGljZXMubGVuZ3RoIC8gMjtcbiAgICAvLyB0aGlzLmNvdW50Kys7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aCAtIDI7IGkrKylcbiAgICB7XG4gICAgICAgIC8vIGRyYXcgc29tZSB0cmlhbmdsZXMhXG4gICAgICAgIHZhciBpbmRleCA9IGkgKiAyO1xuICAgICAgICB0aGlzLl9yZW5kZXJDYW52YXNEcmF3VHJpYW5nbGUoY29udGV4dCwgdmVydGljZXMsIHV2cywgaW5kZXgsIChpbmRleCArIDIpLCAoaW5kZXggKyA0KSk7XG4gICAgfVxufTtcblxuLyoqXG4gKiBEcmF3cyB0aGUgb2JqZWN0IGluIHRyaWFuZ2xlIG1vZGUgdXNpbmcgY2FudmFzXG4gKlxuICogQHBhcmFtIGNvbnRleHQge0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRH0gdGhlIGN1cnJlbnQgZHJhd2luZyBjb250ZXh0XG4gKiBAcHJpdmF0ZVxuICovXG5NZXNoLnByb3RvdHlwZS5fcmVuZGVyQ2FudmFzVHJpYW5nbGVzID0gZnVuY3Rpb24gKGNvbnRleHQpXG57XG4gICAgLy8gZHJhdyB0cmlhbmdsZXMhIVxuICAgIHZhciB2ZXJ0aWNlcyA9IHRoaXMudmVydGljZXM7XG4gICAgdmFyIHV2cyA9IHRoaXMudXZzO1xuICAgIHZhciBpbmRpY2VzID0gdGhpcy5pbmRpY2VzO1xuXG4gICAgdmFyIGxlbmd0aCA9IGluZGljZXMubGVuZ3RoO1xuICAgIC8vIHRoaXMuY291bnQrKztcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyBpICs9IDMpXG4gICAge1xuICAgICAgICAvLyBkcmF3IHNvbWUgdHJpYW5nbGVzIVxuICAgICAgICB2YXIgaW5kZXgwID0gaW5kaWNlc1tpXSAqIDIsIGluZGV4MSA9IGluZGljZXNbaSArIDFdICogMiwgaW5kZXgyID0gaW5kaWNlc1tpICsgMl0gKiAyO1xuICAgICAgICB0aGlzLl9yZW5kZXJDYW52YXNEcmF3VHJpYW5nbGUoY29udGV4dCwgdmVydGljZXMsIHV2cywgaW5kZXgwLCBpbmRleDEsIGluZGV4Mik7XG4gICAgfVxufTtcblxuLyoqXG4gKiBEcmF3cyBvbmUgb2YgdGhlIHRyaWFuZ2xlcyB0aGF0IGZvcm0gdGhpcyBNZXNoXG4gKlxuICogQHBhcmFtIGNvbnRleHQge0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRH0gdGhlIGN1cnJlbnQgZHJhd2luZyBjb250ZXh0XG4gKiBAcGFyYW0gdmVydGljZXMge0Zsb2F0MzJBcnJheX0gYSByZWZlcmVuY2UgdG8gdGhlIHZlcnRpY2VzIG9mIHRoZSBNZXNoXG4gKiBAcGFyYW0gdXZzIHtGbG9hdDMyQXJyYXl9IGEgcmVmZXJlbmNlIHRvIHRoZSB1dnMgb2YgdGhlIE1lc2hcbiAqIEBwYXJhbSBpbmRleDAge251bWJlcn0gdGhlIGluZGV4IG9mIHRoZSBmaXJzdCB2ZXJ0ZXhcbiAqIEBwYXJhbSBpbmRleDEge251bWJlcn0gdGhlIGluZGV4IG9mIHRoZSBzZWNvbmQgdmVydGV4XG4gKiBAcGFyYW0gaW5kZXgyIHtudW1iZXJ9IHRoZSBpbmRleCBvZiB0aGUgdGhpcmQgdmVydGV4XG4gKiBAcHJpdmF0ZVxuICovXG5NZXNoLnByb3RvdHlwZS5fcmVuZGVyQ2FudmFzRHJhd1RyaWFuZ2xlID0gZnVuY3Rpb24gKGNvbnRleHQsIHZlcnRpY2VzLCB1dnMsIGluZGV4MCwgaW5kZXgxLCBpbmRleDIpXG57XG4gICAgdmFyIHRleHR1cmVTb3VyY2UgPSB0aGlzLl90ZXh0dXJlLmJhc2VUZXh0dXJlLnNvdXJjZTtcbiAgICB2YXIgdGV4dHVyZVdpZHRoID0gdGhpcy5fdGV4dHVyZS5iYXNlVGV4dHVyZS53aWR0aDtcbiAgICB2YXIgdGV4dHVyZUhlaWdodCA9IHRoaXMuX3RleHR1cmUuYmFzZVRleHR1cmUuaGVpZ2h0O1xuXG4gICAgdmFyIHgwID0gdmVydGljZXNbaW5kZXgwXSwgeDEgPSB2ZXJ0aWNlc1tpbmRleDFdLCB4MiA9IHZlcnRpY2VzW2luZGV4Ml07XG4gICAgdmFyIHkwID0gdmVydGljZXNbaW5kZXgwICsgMV0sIHkxID0gdmVydGljZXNbaW5kZXgxICsgMV0sIHkyID0gdmVydGljZXNbaW5kZXgyICsgMV07XG5cbiAgICB2YXIgdTAgPSB1dnNbaW5kZXgwXSAqIHRleHR1cmVXaWR0aCwgdTEgPSB1dnNbaW5kZXgxXSAqIHRleHR1cmVXaWR0aCwgdTIgPSB1dnNbaW5kZXgyXSAqIHRleHR1cmVXaWR0aDtcbiAgICB2YXIgdjAgPSB1dnNbaW5kZXgwICsgMV0gKiB0ZXh0dXJlSGVpZ2h0LCB2MSA9IHV2c1tpbmRleDEgKyAxXSAqIHRleHR1cmVIZWlnaHQsIHYyID0gdXZzW2luZGV4MiArIDFdICogdGV4dHVyZUhlaWdodDtcblxuICAgIGlmICh0aGlzLmNhbnZhc1BhZGRpbmcgPiAwKVxuICAgIHtcbiAgICAgICAgdmFyIHBhZGRpbmdYID0gdGhpcy5jYW52YXNQYWRkaW5nIC8gdGhpcy53b3JsZFRyYW5zZm9ybS5hO1xuICAgICAgICB2YXIgcGFkZGluZ1kgPSB0aGlzLmNhbnZhc1BhZGRpbmcgLyB0aGlzLndvcmxkVHJhbnNmb3JtLmQ7XG4gICAgICAgIHZhciBjZW50ZXJYID0gKHgwICsgeDEgKyB4MikgLyAzO1xuICAgICAgICB2YXIgY2VudGVyWSA9ICh5MCArIHkxICsgeTIpIC8gMztcblxuICAgICAgICB2YXIgbm9ybVggPSB4MCAtIGNlbnRlclg7XG4gICAgICAgIHZhciBub3JtWSA9IHkwIC0gY2VudGVyWTtcblxuICAgICAgICB2YXIgZGlzdCA9IE1hdGguc3FydChub3JtWCAqIG5vcm1YICsgbm9ybVkgKiBub3JtWSk7XG4gICAgICAgIHgwID0gY2VudGVyWCArIChub3JtWCAvIGRpc3QpICogKGRpc3QgKyBwYWRkaW5nWCk7XG4gICAgICAgIHkwID0gY2VudGVyWSArIChub3JtWSAvIGRpc3QpICogKGRpc3QgKyBwYWRkaW5nWSk7XG5cbiAgICAgICAgLy9cblxuICAgICAgICBub3JtWCA9IHgxIC0gY2VudGVyWDtcbiAgICAgICAgbm9ybVkgPSB5MSAtIGNlbnRlclk7XG5cbiAgICAgICAgZGlzdCA9IE1hdGguc3FydChub3JtWCAqIG5vcm1YICsgbm9ybVkgKiBub3JtWSk7XG4gICAgICAgIHgxID0gY2VudGVyWCArIChub3JtWCAvIGRpc3QpICogKGRpc3QgKyBwYWRkaW5nWCk7XG4gICAgICAgIHkxID0gY2VudGVyWSArIChub3JtWSAvIGRpc3QpICogKGRpc3QgKyBwYWRkaW5nWSk7XG5cbiAgICAgICAgbm9ybVggPSB4MiAtIGNlbnRlclg7XG4gICAgICAgIG5vcm1ZID0geTIgLSBjZW50ZXJZO1xuXG4gICAgICAgIGRpc3QgPSBNYXRoLnNxcnQobm9ybVggKiBub3JtWCArIG5vcm1ZICogbm9ybVkpO1xuICAgICAgICB4MiA9IGNlbnRlclggKyAobm9ybVggLyBkaXN0KSAqIChkaXN0ICsgcGFkZGluZ1gpO1xuICAgICAgICB5MiA9IGNlbnRlclkgKyAobm9ybVkgLyBkaXN0KSAqIChkaXN0ICsgcGFkZGluZ1kpO1xuICAgIH1cblxuICAgIGNvbnRleHQuc2F2ZSgpO1xuICAgIGNvbnRleHQuYmVnaW5QYXRoKCk7XG5cblxuICAgIGNvbnRleHQubW92ZVRvKHgwLCB5MCk7XG4gICAgY29udGV4dC5saW5lVG8oeDEsIHkxKTtcbiAgICBjb250ZXh0LmxpbmVUbyh4MiwgeTIpO1xuXG4gICAgY29udGV4dC5jbG9zZVBhdGgoKTtcblxuICAgIGNvbnRleHQuY2xpcCgpO1xuXG4gICAgLy8gQ29tcHV0ZSBtYXRyaXggdHJhbnNmb3JtXG4gICAgdmFyIGRlbHRhID0gICh1MCAqIHYxKSAgICAgICsgKHYwICogdTIpICAgICAgKyAodTEgKiB2MikgICAgICAtICh2MSAqIHUyKSAgICAgIC0gKHYwICogdTEpICAgICAgLSAodTAgKiB2Mik7XG4gICAgdmFyIGRlbHRhQSA9ICh4MCAqIHYxKSAgICAgICsgKHYwICogeDIpICAgICAgKyAoeDEgKiB2MikgICAgICAtICh2MSAqIHgyKSAgICAgIC0gKHYwICogeDEpICAgICAgLSAoeDAgKiB2Mik7XG4gICAgdmFyIGRlbHRhQiA9ICh1MCAqIHgxKSAgICAgICsgKHgwICogdTIpICAgICAgKyAodTEgKiB4MikgICAgICAtICh4MSAqIHUyKSAgICAgIC0gKHgwICogdTEpICAgICAgLSAodTAgKiB4Mik7XG4gICAgdmFyIGRlbHRhQyA9ICh1MCAqIHYxICogeDIpICsgKHYwICogeDEgKiB1MikgKyAoeDAgKiB1MSAqIHYyKSAtICh4MCAqIHYxICogdTIpIC0gKHYwICogdTEgKiB4MikgLSAodTAgKiB4MSAqIHYyKTtcbiAgICB2YXIgZGVsdGFEID0gKHkwICogdjEpICAgICAgKyAodjAgKiB5MikgICAgICArICh5MSAqIHYyKSAgICAgIC0gKHYxICogeTIpICAgICAgLSAodjAgKiB5MSkgICAgICAtICh5MCAqIHYyKTtcbiAgICB2YXIgZGVsdGFFID0gKHUwICogeTEpICAgICAgKyAoeTAgKiB1MikgICAgICArICh1MSAqIHkyKSAgICAgIC0gKHkxICogdTIpICAgICAgLSAoeTAgKiB1MSkgICAgICAtICh1MCAqIHkyKTtcbiAgICB2YXIgZGVsdGFGID0gKHUwICogdjEgKiB5MikgKyAodjAgKiB5MSAqIHUyKSArICh5MCAqIHUxICogdjIpIC0gKHkwICogdjEgKiB1MikgLSAodjAgKiB1MSAqIHkyKSAtICh1MCAqIHkxICogdjIpO1xuXG4gICAgY29udGV4dC50cmFuc2Zvcm0oZGVsdGFBIC8gZGVsdGEsIGRlbHRhRCAvIGRlbHRhLFxuICAgICAgICBkZWx0YUIgLyBkZWx0YSwgZGVsdGFFIC8gZGVsdGEsXG4gICAgICAgIGRlbHRhQyAvIGRlbHRhLCBkZWx0YUYgLyBkZWx0YSk7XG5cbiAgICBjb250ZXh0LmRyYXdJbWFnZSh0ZXh0dXJlU291cmNlLCAwLCAwKTtcbiAgICBjb250ZXh0LnJlc3RvcmUoKTtcbn07XG5cblxuXG4vKipcbiAqIFJlbmRlcnMgYSBmbGF0IE1lc2hcbiAqXG4gKiBAcGFyYW0gTWVzaCB7UElYSS5tZXNoLk1lc2h9IFRoZSBNZXNoIHRvIHJlbmRlclxuICogQHByaXZhdGVcbiAqL1xuTWVzaC5wcm90b3R5cGUucmVuZGVyTWVzaEZsYXQgPSBmdW5jdGlvbiAoTWVzaClcbntcbiAgICB2YXIgY29udGV4dCA9IHRoaXMuY29udGV4dDtcbiAgICB2YXIgdmVydGljZXMgPSBNZXNoLnZlcnRpY2VzO1xuXG4gICAgdmFyIGxlbmd0aCA9IHZlcnRpY2VzLmxlbmd0aC8yO1xuICAgIC8vIHRoaXMuY291bnQrKztcblxuICAgIGNvbnRleHQuYmVnaW5QYXRoKCk7XG4gICAgZm9yICh2YXIgaT0xOyBpIDwgbGVuZ3RoLTI7IGkrKylcbiAgICB7XG4gICAgICAgIC8vIGRyYXcgc29tZSB0cmlhbmdsZXMhXG4gICAgICAgIHZhciBpbmRleCA9IGkqMjtcblxuICAgICAgICB2YXIgeDAgPSB2ZXJ0aWNlc1tpbmRleF0sICAgeDEgPSB2ZXJ0aWNlc1tpbmRleCsyXSwgeDIgPSB2ZXJ0aWNlc1tpbmRleCs0XTtcbiAgICAgICAgdmFyIHkwID0gdmVydGljZXNbaW5kZXgrMV0sIHkxID0gdmVydGljZXNbaW5kZXgrM10sIHkyID0gdmVydGljZXNbaW5kZXgrNV07XG5cbiAgICAgICAgY29udGV4dC5tb3ZlVG8oeDAsIHkwKTtcbiAgICAgICAgY29udGV4dC5saW5lVG8oeDEsIHkxKTtcbiAgICAgICAgY29udGV4dC5saW5lVG8oeDIsIHkyKTtcbiAgICB9XG5cbiAgICBjb250ZXh0LmZpbGxTdHlsZSA9ICcjRkYwMDAwJztcbiAgICBjb250ZXh0LmZpbGwoKTtcbiAgICBjb250ZXh0LmNsb3NlUGF0aCgpO1xufTtcblxuLyoqXG4gKiBXaGVuIHRoZSB0ZXh0dXJlIGlzIHVwZGF0ZWQsIHRoaXMgZXZlbnQgd2lsbCBmaXJlIHRvIHVwZGF0ZSB0aGUgc2NhbGUgYW5kIGZyYW1lXG4gKlxuICogQHBhcmFtIGV2ZW50XG4gKiBAcHJpdmF0ZVxuICovXG5NZXNoLnByb3RvdHlwZS5fb25UZXh0dXJlVXBkYXRlID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLnVwZGF0ZUZyYW1lID0gdHJ1ZTtcbn07XG5cbi8qKlxuICogUmV0dXJucyB0aGUgYm91bmRzIG9mIHRoZSBtZXNoIGFzIGEgcmVjdGFuZ2xlLiBUaGUgYm91bmRzIGNhbGN1bGF0aW9uIHRha2VzIHRoZSB3b3JsZFRyYW5zZm9ybSBpbnRvIGFjY291bnQuXG4gKlxuICogQHBhcmFtIG1hdHJpeCB7UElYSS5NYXRyaXh9IHRoZSB0cmFuc2Zvcm1hdGlvbiBtYXRyaXggb2YgdGhlIHNwcml0ZVxuICogQHJldHVybiB7UElYSS5SZWN0YW5nbGV9IHRoZSBmcmFtaW5nIHJlY3RhbmdsZVxuICovXG5NZXNoLnByb3RvdHlwZS5nZXRCb3VuZHMgPSBmdW5jdGlvbiAobWF0cml4KVxue1xuICAgIGlmICghdGhpcy5fY3VycmVudEJvdW5kcykge1xuICAgICAgICB2YXIgd29ybGRUcmFuc2Zvcm0gPSBtYXRyaXggfHwgdGhpcy53b3JsZFRyYW5zZm9ybTtcblxuICAgICAgICB2YXIgYSA9IHdvcmxkVHJhbnNmb3JtLmE7XG4gICAgICAgIHZhciBiID0gd29ybGRUcmFuc2Zvcm0uYjtcbiAgICAgICAgdmFyIGMgPSB3b3JsZFRyYW5zZm9ybS5jO1xuICAgICAgICB2YXIgZCA9IHdvcmxkVHJhbnNmb3JtLmQ7XG4gICAgICAgIHZhciB0eCA9IHdvcmxkVHJhbnNmb3JtLnR4O1xuICAgICAgICB2YXIgdHkgPSB3b3JsZFRyYW5zZm9ybS50eTtcblxuICAgICAgICB2YXIgbWF4WCA9IC1JbmZpbml0eTtcbiAgICAgICAgdmFyIG1heFkgPSAtSW5maW5pdHk7XG5cbiAgICAgICAgdmFyIG1pblggPSBJbmZpbml0eTtcbiAgICAgICAgdmFyIG1pblkgPSBJbmZpbml0eTtcblxuICAgICAgICB2YXIgdmVydGljZXMgPSB0aGlzLnZlcnRpY2VzO1xuICAgICAgICBmb3IgKHZhciBpID0gMCwgbiA9IHZlcnRpY2VzLmxlbmd0aDsgaSA8IG47IGkgKz0gMikge1xuICAgICAgICAgICAgdmFyIHJhd1ggPSB2ZXJ0aWNlc1tpXSwgcmF3WSA9IHZlcnRpY2VzW2kgKyAxXTtcbiAgICAgICAgICAgIHZhciB4ID0gKGEgKiByYXdYKSArIChjICogcmF3WSkgKyB0eDtcbiAgICAgICAgICAgIHZhciB5ID0gKGQgKiByYXdZKSArIChiICogcmF3WCkgKyB0eTtcblxuICAgICAgICAgICAgbWluWCA9IHggPCBtaW5YID8geCA6IG1pblg7XG4gICAgICAgICAgICBtaW5ZID0geSA8IG1pblkgPyB5IDogbWluWTtcblxuICAgICAgICAgICAgbWF4WCA9IHggPiBtYXhYID8geCA6IG1heFg7XG4gICAgICAgICAgICBtYXhZID0geSA+IG1heFkgPyB5IDogbWF4WTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChtaW5YID09PSAtSW5maW5pdHkgfHwgbWF4WSA9PT0gSW5maW5pdHkpIHtcbiAgICAgICAgICAgIHJldHVybiBjb3JlLlJlY3RhbmdsZS5FTVBUWTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBib3VuZHMgPSB0aGlzLl9ib3VuZHM7XG5cbiAgICAgICAgYm91bmRzLnggPSBtaW5YO1xuICAgICAgICBib3VuZHMud2lkdGggPSBtYXhYIC0gbWluWDtcblxuICAgICAgICBib3VuZHMueSA9IG1pblk7XG4gICAgICAgIGJvdW5kcy5oZWlnaHQgPSBtYXhZIC0gbWluWTtcblxuICAgICAgICAvLyBzdG9yZSBhIHJlZmVyZW5jZSBzbyB0aGF0IGlmIHRoaXMgZnVuY3Rpb24gZ2V0cyBjYWxsZWQgYWdhaW4gaW4gdGhlIHJlbmRlciBjeWNsZSB3ZSBkbyBub3QgaGF2ZSB0byByZWNhbGN1bGF0ZVxuICAgICAgICB0aGlzLl9jdXJyZW50Qm91bmRzID0gYm91bmRzO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLl9jdXJyZW50Qm91bmRzO1xufTtcblxuLyoqXG4gKiBUZXN0cyBpZiBhIHBvaW50IGlzIGluc2lkZSB0aGlzIG1lc2guIFdvcmtzIG9ubHkgZm9yIFRSSUFOR0xFX01FU0hcbiAqXG4gKiBAcGFyYW0gcG9pbnQge1BJWEkuUG9pbnR9IHRoZSBwb2ludCB0byB0ZXN0XG4gKiBAcmV0dXJuIHtib29sZWFufSB0aGUgcmVzdWx0IG9mIHRoZSB0ZXN0XG4gKi9cbk1lc2gucHJvdG90eXBlLmNvbnRhaW5zUG9pbnQgPSBmdW5jdGlvbiggcG9pbnQgKSB7XG4gICAgaWYgKCF0aGlzLmdldEJvdW5kcygpLmNvbnRhaW5zKHBvaW50LngsIHBvaW50LnkpKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgdGhpcy53b3JsZFRyYW5zZm9ybS5hcHBseUludmVyc2UocG9pbnQsICB0ZW1wUG9pbnQpO1xuXG4gICAgdmFyIHZlcnRpY2VzID0gdGhpcy52ZXJ0aWNlcztcbiAgICB2YXIgcG9pbnRzID0gdGVtcFBvbHlnb24ucG9pbnRzO1xuICAgIHZhciBpLCBsZW47XG5cbiAgICBpZiAodGhpcy5kcmF3TW9kZSA9PT0gTWVzaC5EUkFXX01PREVTLlRSSUFOR0xFUykge1xuICAgICAgICB2YXIgaW5kaWNlcyA9IHRoaXMuaW5kaWNlcztcbiAgICAgICAgbGVuID0gdGhpcy5pbmRpY2VzLmxlbmd0aDtcbiAgICAgICAgLy9UT0RPOiBpbmxpbmUgdGhpcy5cbiAgICAgICAgZm9yIChpPTA7aTxsZW47aSs9Mykge1xuICAgICAgICAgICAgdmFyIGluZDAgPSBpbmRpY2VzW2ldKjIsIGluZDEgPSBpbmRpY2VzW2krMV0qMiwgaW5kMiA9IGluZGljZXNbaSsyXSoyO1xuICAgICAgICAgICAgcG9pbnRzWzBdID0gdmVydGljZXNbaW5kMF07XG4gICAgICAgICAgICBwb2ludHNbMV0gPSB2ZXJ0aWNlc1tpbmQwKzFdO1xuICAgICAgICAgICAgcG9pbnRzWzJdID0gdmVydGljZXNbaW5kMV07XG4gICAgICAgICAgICBwb2ludHNbM10gPSB2ZXJ0aWNlc1tpbmQxKzFdO1xuICAgICAgICAgICAgcG9pbnRzWzRdID0gdmVydGljZXNbaW5kMl07XG4gICAgICAgICAgICBwb2ludHNbNV0gPSB2ZXJ0aWNlc1tpbmQyKzFdO1xuICAgICAgICAgICAgaWYgKHRlbXBQb2x5Z29uLmNvbnRhaW5zKHRlbXBQb2ludC54LCB0ZW1wUG9pbnQueSkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAgIGxlbiA9IHZlcnRpY2VzLmxlbmd0aDtcbiAgICAgICAgZm9yIChpPTA7aTxsZW47aSs9Nikge1xuICAgICAgICAgICAgcG9pbnRzWzBdID0gdmVydGljZXNbaV07XG4gICAgICAgICAgICBwb2ludHNbMV0gPSB2ZXJ0aWNlc1tpKzFdO1xuICAgICAgICAgICAgcG9pbnRzWzJdID0gdmVydGljZXNbaSsyXTtcbiAgICAgICAgICAgIHBvaW50c1szXSA9IHZlcnRpY2VzW2krM107XG4gICAgICAgICAgICBwb2ludHNbNF0gPSB2ZXJ0aWNlc1tpKzRdO1xuICAgICAgICAgICAgcG9pbnRzWzVdID0gdmVydGljZXNbaSs1XTtcbiAgICAgICAgICAgIGlmICh0ZW1wUG9seWdvbi5jb250YWlucyh0ZW1wUG9pbnQueCwgdGVtcFBvaW50LnkpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xufTtcblxuLyoqXG4gKiBEaWZmZXJlbnQgZHJhd2luZyBidWZmZXIgbW9kZXMgc3VwcG9ydGVkXG4gKlxuICogQHN0YXRpY1xuICogQGNvbnN0YW50XG4gKiBAcHJvcGVydHkge29iamVjdH0gRFJBV19NT0RFU1xuICogQHByb3BlcnR5IHtudW1iZXJ9IERSQVdfTU9ERVMuVFJJQU5HTEVfTUVTSFxuICogQHByb3BlcnR5IHtudW1iZXJ9IERSQVdfTU9ERVMuVFJJQU5HTEVTXG4gKi9cbk1lc2guRFJBV19NT0RFUyA9IHtcbiAgICBUUklBTkdMRV9NRVNIOiAwLFxuICAgIFRSSUFOR0xFUzogMVxufTtcbiIsInZhciBNZXNoID0gcmVxdWlyZSgnLi9NZXNoJyk7XG5cbi8qKlxuICogVGhlIFBsYW5lIGFsbG93cyB5b3UgdG8gZHJhdyBhIHRleHR1cmUgYWNyb3NzIHNldmVyYWwgcG9pbnRzIGFuZCB0aGVtIG1hbmlwdWxhdGUgdGhlc2UgcG9pbnRzXG4gKlxuICpgYGBqc1xuICogZm9yICh2YXIgaSA9IDA7IGkgPCAyMDsgaSsrKSB7XG4gKiAgICAgcG9pbnRzLnB1c2gobmV3IFBJWEkuUG9pbnQoaSAqIDUwLCAwKSk7XG4gKiB9O1xuICogdmFyIFBsYW5lID0gbmV3IFBJWEkuUGxhbmUoUElYSS5UZXh0dXJlLmZyb21JbWFnZShcInNuYWtlLnBuZ1wiKSwgcG9pbnRzKTtcbiAqICBgYGBcbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkubWVzaC5NZXNoXG4gKiBAbWVtYmVyb2YgUElYSS5tZXNoXG4gKiBAcGFyYW0ge1BJWEkuVGV4dHVyZX0gdGV4dHVyZSAtIFRoZSB0ZXh0dXJlIHRvIHVzZSBvbiB0aGUgUGxhbmUuXG4gKiBAcGFyYW0ge2ludH0gc2VnbWVudHNYIC0gVGhlIG51bWJlciBveCB4IHNlZ21lbnRzXG4gKiBAcGFyYW0ge2ludH0gc2VnbWVudHNZIC0gVGhlIG51bWJlciBvZiB5IHNlZ21lbnRzXG4gKlxuICovXG5mdW5jdGlvbiBQbGFuZSh0ZXh0dXJlLCBzZWdtZW50c1gsIHNlZ21lbnRzWSlcbntcbiAgICBNZXNoLmNhbGwodGhpcywgdGV4dHVyZSk7XG5cbiAgICAvKipcbiAgICAgKiBUcmFja2VyIGZvciBpZiB0aGUgUGxhbmUgaXMgcmVhZHkgdG8gYmUgZHJhd24uIE5lZWRlZCBiZWNhdXNlIE1lc2ggY3RvciBjYW5cbiAgICAgKiBjYWxsIF9vblRleHR1cmVVcGRhdGVkIHdoaWNoIGNvdWxkIGNhbGwgcmVmcmVzaCB0b28gZWFybHkuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fcmVhZHkgPSB0cnVlO1xuXG4gICAgdGhpcy5zZWdtZW50c1ggPSAgc2VnbWVudHNYIHx8IDEwO1xuICAgIHRoaXMuc2VnbWVudHNZID0gc2VnbWVudHNZIHx8IDEwO1xuXG4gICAgdGhpcy5kcmF3TW9kZSA9IE1lc2guRFJBV19NT0RFUy5UUklBTkdMRVM7XG4gICAgdGhpcy5yZWZyZXNoKCk7XG5cbn1cblxuXG4vLyBjb25zdHJ1Y3RvclxuUGxhbmUucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZSggTWVzaC5wcm90b3R5cGUgKTtcblBsYW5lLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFBsYW5lO1xubW9kdWxlLmV4cG9ydHMgPSBQbGFuZTtcblxuLyoqXG4gKiBSZWZyZXNoZXNcbiAqXG4gKi9cblBsYW5lLnByb3RvdHlwZS5yZWZyZXNoID0gZnVuY3Rpb24oKVxue1xuICAgIHZhciB0b3RhbCA9IHRoaXMuc2VnbWVudHNYICogdGhpcy5zZWdtZW50c1k7XG4gICAgdmFyIHZlcnRzID0gW107XG4gICAgdmFyIGNvbG9ycyA9IFtdO1xuICAgIHZhciB1dnMgPSBbXTtcbiAgICB2YXIgaW5kaWNlcyA9IFtdO1xuICAgIHZhciB0ZXh0dXJlID0gdGhpcy50ZXh0dXJlO1xuXG4gIC8vICB0ZXh0dXJlLndpZHRoID0gODAwIHRleHR1cmUud2lkdGggfHwgODAwO1xuIC8vICAgdGV4dHVyZS5oZWlnaHQgPSA4MDAvL3RleHR1cmUuaGVpZ2h0IHx8IDgwMDtcblxuICAgIHZhciBzZWdtZW50c1hTdWIgPSB0aGlzLnNlZ21lbnRzWCAtIDE7XG4gICAgdmFyIHNlZ21lbnRzWVN1YiA9IHRoaXMuc2VnbWVudHNZIC0gMTtcbiAgICB2YXIgaSA9IDA7XG5cbiAgICB2YXIgc2l6ZVggPSB0ZXh0dXJlLndpZHRoIC8gc2VnbWVudHNYU3ViO1xuICAgIHZhciBzaXplWSA9IHRleHR1cmUuaGVpZ2h0IC8gc2VnbWVudHNZU3ViO1xuXG4gICAgZm9yIChpID0gMDsgaSA8IHRvdGFsOyBpKyspIHtcblxuICAgICAgICB2YXIgeCA9IChpICUgdGhpcy5zZWdtZW50c1gpO1xuICAgICAgICB2YXIgeSA9ICggKGkgLyB0aGlzLnNlZ21lbnRzWCApIHwgMCApO1xuXG5cbiAgICAgICAgdmVydHMucHVzaCgoeCAqIHNpemVYKSxcbiAgICAgICAgICAgICAgICAgICAoeSAqIHNpemVZKSk7XG5cbiAgICAgICAgLy8gdGhpcyB3b3JrcyBmb3IgcmVjdGFuZ3VsYXIgdGV4dHVyZXMuIFxuICAgICAgICB1dnMucHVzaCh0ZXh0dXJlLl91dnMueDAgKyAodGV4dHVyZS5fdXZzLngxIC0gdGV4dHVyZS5fdXZzLngwKSAqICh4IC8gKHRoaXMuc2VnbWVudHNYLTEpKSwgdGV4dHVyZS5fdXZzLnkwICsgKHRleHR1cmUuX3V2cy55My10ZXh0dXJlLl91dnMueTApICogKHkvICh0aGlzLnNlZ21lbnRzWS0xKSkpO1xuICAgICAgfVxuXG4gICAgLy8gIGNvbnNcblxuICAgIHZhciB0b3RhbFN1YiA9IHNlZ21lbnRzWFN1YiAqIHNlZ21lbnRzWVN1YjtcblxuICAgIGZvciAoaSA9IDA7IGkgPCB0b3RhbFN1YjsgaSsrKSB7XG5cbiAgICAgICAgdmFyIHhwb3MgPSBpICUgc2VnbWVudHNYU3ViO1xuICAgICAgICB2YXIgeXBvcyA9IChpIC8gc2VnbWVudHNYU3ViICkgfCAwO1xuXG5cbiAgICAgICAgdmFyICB2YWx1ZSA9ICh5cG9zICogdGhpcy5zZWdtZW50c1gpICsgeHBvcztcbiAgICAgICAgdmFyICB2YWx1ZTIgPSAoeXBvcyAqIHRoaXMuc2VnbWVudHNYKSArIHhwb3MgKyAxO1xuICAgICAgICB2YXIgIHZhbHVlMyA9ICgoeXBvcysxKSAqIHRoaXMuc2VnbWVudHNYKSArIHhwb3M7XG4gICAgICAgIHZhciAgdmFsdWU0ID0gKCh5cG9zKzEpICogdGhpcy5zZWdtZW50c1gpICsgeHBvcyArIDE7XG5cbiAgICAgICAgaW5kaWNlcy5wdXNoKHZhbHVlLCB2YWx1ZTIsIHZhbHVlMyk7XG4gICAgICAgIGluZGljZXMucHVzaCh2YWx1ZTIsIHZhbHVlNCwgdmFsdWUzKTtcbiAgICB9XG5cblxuICAgIC8vY29uc29sZS5sb2coaW5kaWNlcylcbiAgICB0aGlzLnZlcnRpY2VzID0gbmV3IEZsb2F0MzJBcnJheSh2ZXJ0cyk7XG4gICAgdGhpcy51dnMgPSBuZXcgRmxvYXQzMkFycmF5KHV2cyk7XG4gICAgdGhpcy5jb2xvcnMgPSBuZXcgRmxvYXQzMkFycmF5KGNvbG9ycyk7XG4gICAgdGhpcy5pbmRpY2VzID0gbmV3IFVpbnQxNkFycmF5KGluZGljZXMpO1xufTtcblxuLyoqXG4gKiBDbGVhciB0ZXh0dXJlIFVWcyB3aGVuIG5ldyB0ZXh0dXJlIGlzIHNldFxuICpcbiAqIEBwcml2YXRlXG4gKi9cblBsYW5lLnByb3RvdHlwZS5fb25UZXh0dXJlVXBkYXRlID0gZnVuY3Rpb24gKClcbntcbiAgICBNZXNoLnByb3RvdHlwZS5fb25UZXh0dXJlVXBkYXRlLmNhbGwodGhpcyk7XG5cbiAgICAvLyB3YWl0IGZvciB0aGUgUGxhbmUgY3RvciB0byBmaW5pc2ggYmVmb3JlIGNhbGxpbmcgcmVmcmVzaFxuICAgIGlmICh0aGlzLl9yZWFkeSkge1xuICAgICAgICB0aGlzLnJlZnJlc2goKTtcbiAgICB9XG59O1xuIiwidmFyIE1lc2ggPSByZXF1aXJlKCcuL01lc2gnKTtcbnZhciBjb3JlID0gcmVxdWlyZSgnLi4vY29yZScpO1xuXG4vKipcbiAqIFRoZSByb3BlIGFsbG93cyB5b3UgdG8gZHJhdyBhIHRleHR1cmUgYWNyb3NzIHNldmVyYWwgcG9pbnRzIGFuZCB0aGVtIG1hbmlwdWxhdGUgdGhlc2UgcG9pbnRzXG4gKlxuICpgYGBqc1xuICogZm9yICh2YXIgaSA9IDA7IGkgPCAyMDsgaSsrKSB7XG4gKiAgICAgcG9pbnRzLnB1c2gobmV3IFBJWEkuUG9pbnQoaSAqIDUwLCAwKSk7XG4gKiB9O1xuICogdmFyIHJvcGUgPSBuZXcgUElYSS5Sb3BlKFBJWEkuVGV4dHVyZS5mcm9tSW1hZ2UoXCJzbmFrZS5wbmdcIiksIHBvaW50cyk7XG4gKiAgYGBgXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLm1lc2guTWVzaFxuICogQG1lbWJlcm9mIFBJWEkubWVzaFxuICogQHBhcmFtIHtQSVhJLlRleHR1cmV9IHRleHR1cmUgLSBUaGUgdGV4dHVyZSB0byB1c2Ugb24gdGhlIHJvcGUuXG4gKiBAcGFyYW0ge1BJWEkuUG9pbnRbXX0gcG9pbnRzIC0gQW4gYXJyYXkgb2Yge0BsaW5rIFBJWEkuUG9pbnR9IG9iamVjdHMgdG8gY29uc3RydWN0IHRoaXMgcm9wZS5cbiAqXG4gKi9cbmZ1bmN0aW9uIFJvcGUodGV4dHVyZSwgcG9pbnRzKVxue1xuICAgIE1lc2guY2FsbCh0aGlzLCB0ZXh0dXJlKTtcblxuICAgIC8qXG4gICAgICogQG1lbWJlciB7UElYSS5Qb2ludFtdfSBBbiBhcnJheSBvZiBwb2ludHMgdGhhdCBkZXRlcm1pbmUgdGhlIHJvcGVcbiAgICAgKi9cbiAgICB0aGlzLnBvaW50cyA9IHBvaW50cztcblxuICAgIC8qXG4gICAgICogQG1lbWJlciB7RmxvYXQzMkFycmF5fSBBbiBhcnJheSBvZiB2ZXJ0aWNlcyB1c2VkIHRvIGNvbnN0cnVjdCB0aGlzIHJvcGUuXG4gICAgICovXG4gICAgdGhpcy52ZXJ0aWNlcyA9IG5ldyBGbG9hdDMyQXJyYXkocG9pbnRzLmxlbmd0aCAqIDQpO1xuXG4gICAgLypcbiAgICAgKiBAbWVtYmVyIHtGbG9hdDMyQXJyYXl9IFRoZSBXZWJHTCBVdnMgb2YgdGhlIHJvcGUuXG4gICAgICovXG4gICAgdGhpcy51dnMgPSBuZXcgRmxvYXQzMkFycmF5KHBvaW50cy5sZW5ndGggKiA0KTtcblxuICAgIC8qXG4gICAgICogQG1lbWJlciB7RmxvYXQzMkFycmF5fSBBbiBhcnJheSBjb250YWluaW5nIHRoZSBjb2xvciBjb21wb25lbnRzXG4gICAgICovXG4gICAgdGhpcy5jb2xvcnMgPSBuZXcgRmxvYXQzMkFycmF5KHBvaW50cy5sZW5ndGggKiAyKTtcblxuICAgIC8qXG4gICAgICogQG1lbWJlciB7VWludDE2QXJyYXl9IEFuIGFycmF5IGNvbnRhaW5pbmcgdGhlIGluZGljZXMgb2YgdGhlIHZlcnRpY2VzXG4gICAgICovXG4gICAgdGhpcy5pbmRpY2VzID0gbmV3IFVpbnQxNkFycmF5KHBvaW50cy5sZW5ndGggKiAyKTtcblxuICAgIC8qKlxuICAgICAqIFRyYWNrZXIgZm9yIGlmIHRoZSByb3BlIGlzIHJlYWR5IHRvIGJlIGRyYXduLiBOZWVkZWQgYmVjYXVzZSBNZXNoIGN0b3IgY2FuXG4gICAgICogY2FsbCBfb25UZXh0dXJlVXBkYXRlZCB3aGljaCBjb3VsZCBjYWxsIHJlZnJlc2ggdG9vIGVhcmx5LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgICB0aGlzLl9yZWFkeSA9IHRydWU7XG5cbiAgICAgdGhpcy5yZWZyZXNoKCk7XG59XG5cblxuLy8gY29uc3RydWN0b3JcblJvcGUucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShNZXNoLnByb3RvdHlwZSk7XG5Sb3BlLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFJvcGU7XG5tb2R1bGUuZXhwb3J0cyA9IFJvcGU7XG5cbi8qKlxuICogUmVmcmVzaGVzXG4gKlxuICovXG5Sb3BlLnByb3RvdHlwZS5yZWZyZXNoID0gZnVuY3Rpb24gKClcbntcbiAgICB2YXIgcG9pbnRzID0gdGhpcy5wb2ludHM7XG5cbiAgICAvLyBpZiB0b28gbGl0dGxlIHBvaW50cywgb3IgdGV4dHVyZSBoYXNuJ3QgZ290IFVWcyBzZXQgeWV0IGp1c3QgbW92ZSBvbi5cbiAgICBpZiAocG9pbnRzLmxlbmd0aCA8IDEgfHwgIXRoaXMuX3RleHR1cmUuX3V2cylcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB2YXIgdXZzID0gdGhpcy51dnM7XG5cbiAgICB2YXIgaW5kaWNlcyA9IHRoaXMuaW5kaWNlcztcbiAgICB2YXIgY29sb3JzID0gdGhpcy5jb2xvcnM7XG5cbiAgICB2YXIgdGV4dHVyZVV2cyA9IHRoaXMuX3RleHR1cmUuX3V2cztcbiAgICB2YXIgb2Zmc2V0ID0gbmV3IGNvcmUuUG9pbnQodGV4dHVyZVV2cy54MCwgdGV4dHVyZVV2cy55MCk7XG4gICAgdmFyIGZhY3RvciA9IG5ldyBjb3JlLlBvaW50KHRleHR1cmVVdnMueDIgLSB0ZXh0dXJlVXZzLngwLCB0ZXh0dXJlVXZzLnkyIC0gdGV4dHVyZVV2cy55MCk7XG5cbiAgICB1dnNbMF0gPSAwICsgb2Zmc2V0Lng7XG4gICAgdXZzWzFdID0gMCArIG9mZnNldC55O1xuICAgIHV2c1syXSA9IDAgKyBvZmZzZXQueDtcbiAgICB1dnNbM10gPSAxICogZmFjdG9yLnkgKyBvZmZzZXQueTtcblxuICAgIGNvbG9yc1swXSA9IDE7XG4gICAgY29sb3JzWzFdID0gMTtcblxuICAgIGluZGljZXNbMF0gPSAwO1xuICAgIGluZGljZXNbMV0gPSAxO1xuXG4gICAgdmFyIHRvdGFsID0gcG9pbnRzLmxlbmd0aCxcbiAgICAgICAgcG9pbnQsIGluZGV4LCBhbW91bnQ7XG5cbiAgICBmb3IgKHZhciBpID0gMTsgaSA8IHRvdGFsOyBpKyspXG4gICAge1xuICAgICAgICBwb2ludCA9IHBvaW50c1tpXTtcbiAgICAgICAgaW5kZXggPSBpICogNDtcbiAgICAgICAgLy8gdGltZSB0byBkbyBzb21lIHNtYXJ0IGRyYXdpbmchXG4gICAgICAgIGFtb3VudCA9IGkgLyAodG90YWwtMSk7XG5cbiAgICAgICAgdXZzW2luZGV4XSA9IGFtb3VudCAqIGZhY3Rvci54ICsgb2Zmc2V0Lng7XG4gICAgICAgIHV2c1tpbmRleCsxXSA9IDAgKyBvZmZzZXQueTtcblxuICAgICAgICB1dnNbaW5kZXgrMl0gPSBhbW91bnQgKiBmYWN0b3IueCArIG9mZnNldC54O1xuICAgICAgICB1dnNbaW5kZXgrM10gPSAxICogZmFjdG9yLnkgKyBvZmZzZXQueTtcblxuICAgICAgICBpbmRleCA9IGkgKiAyO1xuICAgICAgICBjb2xvcnNbaW5kZXhdID0gMTtcbiAgICAgICAgY29sb3JzW2luZGV4KzFdID0gMTtcblxuICAgICAgICBpbmRleCA9IGkgKiAyO1xuICAgICAgICBpbmRpY2VzW2luZGV4XSA9IGluZGV4O1xuICAgICAgICBpbmRpY2VzW2luZGV4ICsgMV0gPSBpbmRleCArIDE7XG4gICAgfVxuXG4gICAgdGhpcy5kaXJ0eSA9IHRydWU7XG59O1xuXG4vKipcbiAqIENsZWFyIHRleHR1cmUgVVZzIHdoZW4gbmV3IHRleHR1cmUgaXMgc2V0XG4gKlxuICogQHByaXZhdGVcbiAqL1xuUm9wZS5wcm90b3R5cGUuX29uVGV4dHVyZVVwZGF0ZSA9IGZ1bmN0aW9uICgpXG57XG4gICAgTWVzaC5wcm90b3R5cGUuX29uVGV4dHVyZVVwZGF0ZS5jYWxsKHRoaXMpO1xuXG4gICAgLy8gd2FpdCBmb3IgdGhlIFJvcGUgY3RvciB0byBmaW5pc2ggYmVmb3JlIGNhbGxpbmcgcmVmcmVzaFxuICAgIGlmICh0aGlzLl9yZWFkeSkge1xuICAgICAgICB0aGlzLnJlZnJlc2goKTtcbiAgICB9XG59O1xuXG4vKipcbiAqIFVwZGF0ZXMgdGhlIG9iamVjdCB0cmFuc2Zvcm0gZm9yIHJlbmRlcmluZ1xuICpcbiAqIEBwcml2YXRlXG4gKi9cblJvcGUucHJvdG90eXBlLnVwZGF0ZVRyYW5zZm9ybSA9IGZ1bmN0aW9uICgpXG57XG4gICAgdmFyIHBvaW50cyA9IHRoaXMucG9pbnRzO1xuXG4gICAgaWYgKHBvaW50cy5sZW5ndGggPCAxKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHZhciBsYXN0UG9pbnQgPSBwb2ludHNbMF07XG4gICAgdmFyIG5leHRQb2ludDtcbiAgICB2YXIgcGVycFggPSAwO1xuICAgIHZhciBwZXJwWSA9IDA7XG5cbiAgICAvLyB0aGlzLmNvdW50IC09IDAuMjtcblxuICAgIHZhciB2ZXJ0aWNlcyA9IHRoaXMudmVydGljZXM7XG4gICAgdmFyIHRvdGFsID0gcG9pbnRzLmxlbmd0aCxcbiAgICAgICAgcG9pbnQsIGluZGV4LCByYXRpbywgcGVycExlbmd0aCwgbnVtO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0b3RhbDsgaSsrKVxuICAgIHtcbiAgICAgICAgcG9pbnQgPSBwb2ludHNbaV07XG4gICAgICAgIGluZGV4ID0gaSAqIDQ7XG5cbiAgICAgICAgaWYgKGkgPCBwb2ludHMubGVuZ3RoLTEpXG4gICAgICAgIHtcbiAgICAgICAgICAgIG5leHRQb2ludCA9IHBvaW50c1tpKzFdO1xuICAgICAgICB9XG4gICAgICAgIGVsc2VcbiAgICAgICAge1xuICAgICAgICAgICAgbmV4dFBvaW50ID0gcG9pbnQ7XG4gICAgICAgIH1cblxuICAgICAgICBwZXJwWSA9IC0obmV4dFBvaW50LnggLSBsYXN0UG9pbnQueCk7XG4gICAgICAgIHBlcnBYID0gbmV4dFBvaW50LnkgLSBsYXN0UG9pbnQueTtcblxuICAgICAgICByYXRpbyA9ICgxIC0gKGkgLyAodG90YWwtMSkpKSAqIDEwO1xuXG4gICAgICAgIGlmIChyYXRpbyA+IDEpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJhdGlvID0gMTtcbiAgICAgICAgfVxuXG4gICAgICAgIHBlcnBMZW5ndGggPSBNYXRoLnNxcnQocGVycFggKiBwZXJwWCArIHBlcnBZICogcGVycFkpO1xuICAgICAgICBudW0gPSB0aGlzLl90ZXh0dXJlLmhlaWdodCAvIDI7IC8vKDIwICsgTWF0aC5hYnMoTWF0aC5zaW4oKGkgKyB0aGlzLmNvdW50KSAqIDAuMykgKiA1MCkgKSogcmF0aW87XG4gICAgICAgIHBlcnBYIC89IHBlcnBMZW5ndGg7XG4gICAgICAgIHBlcnBZIC89IHBlcnBMZW5ndGg7XG5cbiAgICAgICAgcGVycFggKj0gbnVtO1xuICAgICAgICBwZXJwWSAqPSBudW07XG5cbiAgICAgICAgdmVydGljZXNbaW5kZXhdID0gcG9pbnQueCArIHBlcnBYO1xuICAgICAgICB2ZXJ0aWNlc1tpbmRleCsxXSA9IHBvaW50LnkgKyBwZXJwWTtcbiAgICAgICAgdmVydGljZXNbaW5kZXgrMl0gPSBwb2ludC54IC0gcGVycFg7XG4gICAgICAgIHZlcnRpY2VzW2luZGV4KzNdID0gcG9pbnQueSAtIHBlcnBZO1xuXG4gICAgICAgIGxhc3RQb2ludCA9IHBvaW50O1xuICAgIH1cblxuICAgIHRoaXMuY29udGFpbmVyVXBkYXRlVHJhbnNmb3JtKCk7XG59O1xuIiwiLyoqXG4gKiBAZmlsZSAgICAgICAgTWFpbiBleHBvcnQgb2YgdGhlIFBJWEkgZXh0cmFzIGxpYnJhcnlcbiAqIEBhdXRob3IgICAgICBNYXQgR3JvdmVzIDxtYXRAZ29vZGJveWRpZ2l0YWwuY29tPlxuICogQGNvcHlyaWdodCAgIDIwMTMtMjAxNSBHb29kQm95RGlnaXRhbFxuICogQGxpY2Vuc2UgICAgIHtAbGluayBodHRwczovL2dpdGh1Yi5jb20vcGl4aWpzL3BpeGkuanMvYmxvYi9tYXN0ZXIvTElDRU5TRXxNSVQgTGljZW5zZX1cbiAqL1xuXG4vKipcbiAqIEBuYW1lc3BhY2UgUElYSS5tZXNoXG4gKi9cbm1vZHVsZS5leHBvcnRzID0ge1xuICAgIE1lc2g6ICAgICAgICAgICByZXF1aXJlKCcuL01lc2gnKSxcbiAgICBQbGFuZTogICAgICAgICAgIHJlcXVpcmUoJy4vUGxhbmUnKSxcbiAgICBSb3BlOiAgICAgICAgICAgcmVxdWlyZSgnLi9Sb3BlJyksXG4gICAgTWVzaFJlbmRlcmVyOiAgIHJlcXVpcmUoJy4vd2ViZ2wvTWVzaFJlbmRlcmVyJyksXG4gICAgTWVzaFNoYWRlcjogICAgIHJlcXVpcmUoJy4vd2ViZ2wvTWVzaFNoYWRlcicpXG59O1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi8uLi9jb3JlJyksXG4gICAgTWVzaCA9IHJlcXVpcmUoJy4uL01lc2gnKTtcblxuLyoqXG4gKiBAYXV0aG9yIE1hdCBHcm92ZXNcbiAqXG4gKiBCaWcgdGhhbmtzIHRvIHRoZSB2ZXJ5IGNsZXZlciBNYXR0IERlc0xhdXJpZXJzIDxtYXR0ZGVzbD4gaHR0cHM6Ly9naXRodWIuY29tL21hdHRkZXNsL1xuICogZm9yIGNyZWF0aW5nIHRoZSBvcmlnaW5hbCBwaXhpIHZlcnNpb24hXG4gKiBBbHNvIGEgdGhhbmtzIHRvIGh0dHBzOi8vZ2l0aHViLmNvbS9iY2hldmFsaWVyIGZvciB0d2Vha2luZyB0aGUgdGludCBhbmQgYWxwaGEgc28gdGhhdCB0aGV5IG5vdyBzaGFyZSA0IGJ5dGVzIG9uIHRoZSB2ZXJ0ZXggYnVmZmVyXG4gKlxuICogSGVhdmlseSBpbnNwaXJlZCBieSBMaWJHRFgncyBNZXNoUmVuZGVyZXI6XG4gKiBodHRwczovL2dpdGh1Yi5jb20vbGliZ2R4L2xpYmdkeC9ibG9iL21hc3Rlci9nZHgvc3JjL2NvbS9iYWRsb2dpYy9nZHgvZ3JhcGhpY3MvZzJkL01lc2hSZW5kZXJlci5qYXZhXG4gKi9cblxuLyoqXG4gKlxuICogQGNsYXNzXG4gKiBAcHJpdmF0ZVxuICogQG1lbWJlcm9mIFBJWEkubWVzaFxuICogQGV4dGVuZHMgUElYSS5PYmplY3RSZW5kZXJlclxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLldlYkdMUmVuZGVyZXJ9IFRoZSByZW5kZXJlciB0aGlzIHNwcml0ZSBiYXRjaCB3b3JrcyBmb3IuXG4gKi9cbmZ1bmN0aW9uIE1lc2hSZW5kZXJlcihyZW5kZXJlcilcbntcbiAgICBjb3JlLk9iamVjdFJlbmRlcmVyLmNhbGwodGhpcywgcmVuZGVyZXIpO1xuXG5cbiAgICAvKipcbiAgICAgKiBIb2xkcyB0aGUgaW5kaWNlc1xuICAgICAqXG4gICAgICogQG1lbWJlciB7VWludDE2QXJyYXl9XG4gICAgICovXG4gICAgXG4gICAgdGhpcy5pbmRpY2VzID0gbmV3IFVpbnQxNkFycmF5KDE1MDAwKTtcblxuICAgIC8vVE9ETyB0aGlzIGNvdWxkIGJlIGEgc2luZ2xlIGJ1ZmZlciBzaGFyZWQgYW1vbmdzdCBhbGwgcmVuZGVyZXJzIGFzIHdlIHJldXNlIHRoaXMgc2V0IHVwIGluIG1vc3QgcmVuZGVyZXJzXG4gICAgZm9yICh2YXIgaT0wLCBqPTA7IGkgPCAxNTAwMDsgaSArPSA2LCBqICs9IDQpXG4gICAge1xuICAgICAgICB0aGlzLmluZGljZXNbaSArIDBdID0gaiArIDA7XG4gICAgICAgIHRoaXMuaW5kaWNlc1tpICsgMV0gPSBqICsgMTtcbiAgICAgICAgdGhpcy5pbmRpY2VzW2kgKyAyXSA9IGogKyAyO1xuICAgICAgICB0aGlzLmluZGljZXNbaSArIDNdID0gaiArIDA7XG4gICAgICAgIHRoaXMuaW5kaWNlc1tpICsgNF0gPSBqICsgMjtcbiAgICAgICAgdGhpcy5pbmRpY2VzW2kgKyA1XSA9IGogKyAzO1xuICAgIH1cblxuICAgIHRoaXMuY3VycmVudFNoYWRlciA9IG51bGw7XG59XG5cbk1lc2hSZW5kZXJlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuT2JqZWN0UmVuZGVyZXIucHJvdG90eXBlKTtcbk1lc2hSZW5kZXJlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBNZXNoUmVuZGVyZXI7XG5tb2R1bGUuZXhwb3J0cyA9IE1lc2hSZW5kZXJlcjtcblxuY29yZS5XZWJHTFJlbmRlcmVyLnJlZ2lzdGVyUGx1Z2luKCdtZXNoJywgTWVzaFJlbmRlcmVyKTtcblxuLyoqXG4gKiBTZXRzIHVwIHRoZSByZW5kZXJlciBjb250ZXh0IGFuZCBuZWNlc3NhcnkgYnVmZmVycy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIGdsIHtXZWJHTFJlbmRlcmluZ0NvbnRleHR9IHRoZSBjdXJyZW50IFdlYkdMIGRyYXdpbmcgY29udGV4dFxuICovXG5NZXNoUmVuZGVyZXIucHJvdG90eXBlLm9uQ29udGV4dENoYW5nZSA9IGZ1bmN0aW9uICgpXG57XG5cbn07XG5cbi8qKlxuICogUmVuZGVycyB0aGUgc3ByaXRlIG9iamVjdC5cbiAqXG4gKiBAcGFyYW0gbWVzaCB7UElYSS5tZXNoLk1lc2h9IHRoZSBtZXNoIHRvIHJlbmRlclxuICovXG5NZXNoUmVuZGVyZXIucHJvdG90eXBlLnJlbmRlciA9IGZ1bmN0aW9uIChtZXNoKVxue1xuICAgIGlmKCFtZXNoLl92ZXJ0ZXhCdWZmZXIpXG4gICAge1xuICAgICAgICB0aGlzLl9pbml0V2ViR0wobWVzaCk7XG4gICAgfVxuXG4gICAgdmFyIHJlbmRlcmVyID0gdGhpcy5yZW5kZXJlcixcbiAgICAgICAgZ2wgPSByZW5kZXJlci5nbCxcbiAgICAgICAgdGV4dHVyZSA9IG1lc2guX3RleHR1cmUuYmFzZVRleHR1cmUsXG4gICAgICAgIHNoYWRlciA9IG1lc2guc2hhZGVyOy8vIHx8IHJlbmRlcmVyLnNoYWRlck1hbmFnZXIucGx1Z2lucy5tZXNoU2hhZGVyO1xuXG4gICAgdmFyIGRyYXdNb2RlID0gbWVzaC5kcmF3TW9kZSA9PT0gTWVzaC5EUkFXX01PREVTLlRSSUFOR0xFX01FU0ggPyBnbC5UUklBTkdMRV9TVFJJUCA6IGdsLlRSSUFOR0xFUztcblxuICAgIHJlbmRlcmVyLmJsZW5kTW9kZU1hbmFnZXIuc2V0QmxlbmRNb2RlKG1lc2guYmxlbmRNb2RlKTtcblxuICAgIC8vVE9ETyBjYWNoZSBjdXN0b20gc3RhdGUuLlxuICAgIGlmICghc2hhZGVyKVxuICAgIHtcbiAgICAgICAgc2hhZGVyID0gcmVuZGVyZXIuc2hhZGVyTWFuYWdlci5wbHVnaW5zLm1lc2hTaGFkZXI7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHNoYWRlciA9IHNoYWRlci5zaGFkZXJzW2dsLmlkXSB8fCBzaGFkZXIuZ2V0U2hhZGVyKHJlbmRlcmVyKTsvLyA6IHNoYWRlcjtcbiAgICB9XG5cbiAgICB0aGlzLnJlbmRlcmVyLnNoYWRlck1hbmFnZXIuc2V0U2hhZGVyKHNoYWRlcik7XG5cbiAgICBzaGFkZXIudW5pZm9ybXMudHJhbnNsYXRpb25NYXRyaXgudmFsdWUgPSBtZXNoLndvcmxkVHJhbnNmb3JtLnRvQXJyYXkodHJ1ZSk7XG4gICAgc2hhZGVyLnVuaWZvcm1zLnByb2plY3Rpb25NYXRyaXgudmFsdWUgPSByZW5kZXJlci5jdXJyZW50UmVuZGVyVGFyZ2V0LnByb2plY3Rpb25NYXRyaXgudG9BcnJheSh0cnVlKTtcbiAgICBzaGFkZXIudW5pZm9ybXMuYWxwaGEudmFsdWUgPSBtZXNoLndvcmxkQWxwaGE7XG5cbiAgICBzaGFkZXIuc3luY1VuaWZvcm1zKCk7XG5cbiAgICBpZiAoIW1lc2guZGlydHkpXG4gICAge1xuXG4gICAgICAgIGdsLmJpbmRCdWZmZXIoZ2wuQVJSQVlfQlVGRkVSLCBtZXNoLl92ZXJ0ZXhCdWZmZXIpO1xuICAgICAgICBnbC5idWZmZXJTdWJEYXRhKGdsLkFSUkFZX0JVRkZFUiwgMCwgbWVzaC52ZXJ0aWNlcyk7XG4gICAgICAgIGdsLnZlcnRleEF0dHJpYlBvaW50ZXIoc2hhZGVyLmF0dHJpYnV0ZXMuYVZlcnRleFBvc2l0aW9uLCAyLCBnbC5GTE9BVCwgZmFsc2UsIDAsIDApO1xuXG4gICAgICAgIC8vIHVwZGF0ZSB0aGUgdXZzXG4gICAgICAgIGdsLmJpbmRCdWZmZXIoZ2wuQVJSQVlfQlVGRkVSLCBtZXNoLl91dkJ1ZmZlcik7XG4gICAgICAgIGdsLnZlcnRleEF0dHJpYlBvaW50ZXIoc2hhZGVyLmF0dHJpYnV0ZXMuYVRleHR1cmVDb29yZCwgMiwgZ2wuRkxPQVQsIGZhbHNlLCAwLCAwKTtcblxuXG4gICAgICAgIGdsLmFjdGl2ZVRleHR1cmUoZ2wuVEVYVFVSRTApO1xuXG4gICAgICAgaWYgKCF0ZXh0dXJlLl9nbFRleHR1cmVzW2dsLmlkXSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5yZW5kZXJlci51cGRhdGVUZXh0dXJlKHRleHR1cmUpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2VcbiAgICAgICAge1xuICAgICAgICAgICAgLy8gYmluZCB0aGUgY3VycmVudCB0ZXh0dXJlXG4gICAgICAgICAgICBnbC5iaW5kVGV4dHVyZShnbC5URVhUVVJFXzJELCB0ZXh0dXJlLl9nbFRleHR1cmVzW2dsLmlkXSk7XG4gICAgICAgIH1cblxuICAgICAgICBnbC5iaW5kQnVmZmVyKGdsLkVMRU1FTlRfQVJSQVlfQlVGRkVSLCBtZXNoLl9pbmRleEJ1ZmZlcik7XG4gICAgICAgIGdsLmJ1ZmZlclN1YkRhdGEoZ2wuRUxFTUVOVF9BUlJBWV9CVUZGRVIsIDAsIG1lc2guaW5kaWNlcyk7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG5cbiAgICAgICAgbWVzaC5kaXJ0eSA9IGZhbHNlO1xuICAgICAgICBnbC5iaW5kQnVmZmVyKGdsLkFSUkFZX0JVRkZFUiwgbWVzaC5fdmVydGV4QnVmZmVyKTtcbiAgICAgICAgZ2wuYnVmZmVyRGF0YShnbC5BUlJBWV9CVUZGRVIsIG1lc2gudmVydGljZXMsIGdsLlNUQVRJQ19EUkFXKTtcbiAgICAgICAgZ2wudmVydGV4QXR0cmliUG9pbnRlcihzaGFkZXIuYXR0cmlidXRlcy5hVmVydGV4UG9zaXRpb24sIDIsIGdsLkZMT0FULCBmYWxzZSwgMCwgMCk7XG5cbiAgICAgICAgLy8gdXBkYXRlIHRoZSB1dnNcbiAgICAgICAgZ2wuYmluZEJ1ZmZlcihnbC5BUlJBWV9CVUZGRVIsIG1lc2guX3V2QnVmZmVyKTtcbiAgICAgICAgZ2wuYnVmZmVyRGF0YShnbC5BUlJBWV9CVUZGRVIsIG1lc2gudXZzLCBnbC5TVEFUSUNfRFJBVyk7XG4gICAgICAgIGdsLnZlcnRleEF0dHJpYlBvaW50ZXIoc2hhZGVyLmF0dHJpYnV0ZXMuYVRleHR1cmVDb29yZCwgMiwgZ2wuRkxPQVQsIGZhbHNlLCAwLCAwKTtcblxuICAgICAgICAgZ2wuYWN0aXZlVGV4dHVyZShnbC5URVhUVVJFMCk7XG5cbiAgICAgICAgaWYgKCF0ZXh0dXJlLl9nbFRleHR1cmVzW2dsLmlkXSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5yZW5kZXJlci51cGRhdGVUZXh0dXJlKHRleHR1cmUpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2VcbiAgICAgICAge1xuICAgICAgICAgICAgLy8gYmluZCB0aGUgY3VycmVudCB0ZXh0dXJlXG4gICAgICAgICAgICBnbC5iaW5kVGV4dHVyZShnbC5URVhUVVJFXzJELCB0ZXh0dXJlLl9nbFRleHR1cmVzW2dsLmlkXSk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBkb250IG5lZWQgdG8gdXBsb2FkIVxuICAgICAgICBnbC5iaW5kQnVmZmVyKGdsLkVMRU1FTlRfQVJSQVlfQlVGRkVSLCBtZXNoLl9pbmRleEJ1ZmZlcik7XG4gICAgICAgIGdsLmJ1ZmZlckRhdGEoZ2wuRUxFTUVOVF9BUlJBWV9CVUZGRVIsIG1lc2guaW5kaWNlcywgZ2wuU1RBVElDX0RSQVcpO1xuXG4gICAgfVxuXG4gICAgZ2wuZHJhd0VsZW1lbnRzKGRyYXdNb2RlLCBtZXNoLmluZGljZXMubGVuZ3RoLCBnbC5VTlNJR05FRF9TSE9SVCwgMCk7XG5cbn07XG5cbi8qKlxuICogUHJlcGFyZXMgYWxsIHRoZSBidWZmZXJzIHRvIHJlbmRlciB0aGlzIG1lc2hcbiAqIEBwYXJhbSBtZXNoIHtQSVhJLm1lc2guTWVzaH0gdGhlIG1lc2ggdG8gcmVuZGVyXG4gKi9cbk1lc2hSZW5kZXJlci5wcm90b3R5cGUuX2luaXRXZWJHTCA9IGZ1bmN0aW9uIChtZXNoKVxue1xuICAgIC8vIGJ1aWxkIHRoZSBzdHJpcCFcbiAgICB2YXIgZ2wgPSB0aGlzLnJlbmRlcmVyLmdsO1xuXG4gICAgbWVzaC5fdmVydGV4QnVmZmVyID0gZ2wuY3JlYXRlQnVmZmVyKCk7XG4gICAgbWVzaC5faW5kZXhCdWZmZXIgPSBnbC5jcmVhdGVCdWZmZXIoKTtcbiAgICBtZXNoLl91dkJ1ZmZlciA9IGdsLmNyZWF0ZUJ1ZmZlcigpO1xuXG5cblxuICAgIGdsLmJpbmRCdWZmZXIoZ2wuQVJSQVlfQlVGRkVSLCBtZXNoLl92ZXJ0ZXhCdWZmZXIpO1xuICAgIGdsLmJ1ZmZlckRhdGEoZ2wuQVJSQVlfQlVGRkVSLCBtZXNoLnZlcnRpY2VzLCBnbC5EWU5BTUlDX0RSQVcpO1xuXG4gICAgZ2wuYmluZEJ1ZmZlcihnbC5BUlJBWV9CVUZGRVIsIG1lc2guX3V2QnVmZmVyKTtcbiAgICBnbC5idWZmZXJEYXRhKGdsLkFSUkFZX0JVRkZFUiwgIG1lc2gudXZzLCBnbC5TVEFUSUNfRFJBVyk7XG5cbiAgICBpZihtZXNoLmNvbG9ycyl7XG4gICAgICAgIG1lc2guX2NvbG9yQnVmZmVyID0gZ2wuY3JlYXRlQnVmZmVyKCk7XG4gICAgICAgIGdsLmJpbmRCdWZmZXIoZ2wuQVJSQVlfQlVGRkVSLCBtZXNoLl9jb2xvckJ1ZmZlcik7XG4gICAgICAgIGdsLmJ1ZmZlckRhdGEoZ2wuQVJSQVlfQlVGRkVSLCBtZXNoLmNvbG9ycywgZ2wuU1RBVElDX0RSQVcpO1xuICAgIH1cblxuICAgIGdsLmJpbmRCdWZmZXIoZ2wuRUxFTUVOVF9BUlJBWV9CVUZGRVIsIG1lc2guX2luZGV4QnVmZmVyKTtcbiAgICBnbC5idWZmZXJEYXRhKGdsLkVMRU1FTlRfQVJSQVlfQlVGRkVSLCBtZXNoLmluZGljZXMsIGdsLlNUQVRJQ19EUkFXKTtcbn07XG5cblxuLyoqXG4gKiBFbXB0aWVzIHRoZSBjdXJyZW50IGJhdGNoLlxuICpcbiAqL1xuTWVzaFJlbmRlcmVyLnByb3RvdHlwZS5mbHVzaCA9IGZ1bmN0aW9uICgpXG57XG5cbn07XG5cbi8qKlxuICogU3RhcnRzIGEgbmV3IG1lc2ggcmVuZGVyZXIuXG4gKlxuICovXG5NZXNoUmVuZGVyZXIucHJvdG90eXBlLnN0YXJ0ID0gZnVuY3Rpb24gKClcbntcbiAgICBcblxuICAgIHRoaXMuY3VycmVudFNoYWRlciA9IG51bGw7XG59O1xuXG4vKipcbiAqIERlc3Ryb3lzIHRoZSBNZXNoIHJlbmRlcmVyXG4gKlxuICovXG5NZXNoUmVuZGVyZXIucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoKVxue1xuICAgIGNvcmUuT2JqZWN0UmVuZGVyZXIucHJvdG90eXBlLmRlc3Ryb3kuY2FsbCh0aGlzKTtcbn07XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uLy4uL2NvcmUnKTtcblxuLyoqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuU2hhZGVyXG4gKiBAbWVtYmVyb2YgUElYSS5tZXNoXG4gKiBAcGFyYW0gc2hhZGVyTWFuYWdlciB7UElYSS5TaGFkZXJNYW5hZ2VyfSBUaGUgV2ViR0wgc2hhZGVyIG1hbmFnZXIgdGhpcyBzaGFkZXIgd29ya3MgZm9yLlxuICovXG5mdW5jdGlvbiBNZXNoU2hhZGVyKHNoYWRlck1hbmFnZXIpXG57XG4gICAgY29yZS5TaGFkZXIuY2FsbCh0aGlzLFxuICAgICAgICBzaGFkZXJNYW5hZ2VyLFxuICAgICAgICAvLyB2ZXJ0ZXggc2hhZGVyXG4gICAgICAgIFtcbiAgICAgICAgICAgICdwcmVjaXNpb24gbG93cCBmbG9hdDsnLFxuICAgICAgICAgICAgJ2F0dHJpYnV0ZSB2ZWMyIGFWZXJ0ZXhQb3NpdGlvbjsnLFxuICAgICAgICAgICAgJ2F0dHJpYnV0ZSB2ZWMyIGFUZXh0dXJlQ29vcmQ7JyxcblxuICAgICAgICAgICAgJ3VuaWZvcm0gbWF0MyB0cmFuc2xhdGlvbk1hdHJpeDsnLFxuICAgICAgICAgICAgJ3VuaWZvcm0gbWF0MyBwcm9qZWN0aW9uTWF0cml4OycsXG5cbiAgICAgICAgICAgICd2YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDsnLFxuXG4gICAgICAgICAgICAndm9pZCBtYWluKHZvaWQpeycsXG4gICAgICAgICAgICAnICAgZ2xfUG9zaXRpb24gPSB2ZWM0KChwcm9qZWN0aW9uTWF0cml4ICogdHJhbnNsYXRpb25NYXRyaXggKiB2ZWMzKGFWZXJ0ZXhQb3NpdGlvbiwgMS4wKSkueHksIDAuMCwgMS4wKTsnLFxuICAgICAgICAgICAgJyAgIHZUZXh0dXJlQ29vcmQgPSBhVGV4dHVyZUNvb3JkOycsXG4gICAgICAgICAgICAnfSdcbiAgICAgICAgXS5qb2luKCdcXG4nKSxcbiAgICAgICAgW1xuICAgICAgICAgICAgJ3ByZWNpc2lvbiBsb3dwIGZsb2F0OycsXG5cbiAgICAgICAgICAgICd2YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDsnLFxuICAgICAgICAgICAgJ3VuaWZvcm0gZmxvYXQgYWxwaGE7JyxcblxuICAgICAgICAgICAgJ3VuaWZvcm0gc2FtcGxlcjJEIHVTYW1wbGVyOycsXG5cbiAgICAgICAgICAgICd2b2lkIG1haW4odm9pZCl7JyxcbiAgICAgICAgICAgICcgICBnbF9GcmFnQ29sb3IgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZUZXh0dXJlQ29vcmQpICogYWxwaGEgOycsXG4gICAgICAgICAgICAnfSdcbiAgICAgICAgXS5qb2luKCdcXG4nKSxcbiAgICAgICAgLy8gY3VzdG9tIHVuaWZvcm1zXG4gICAgICAgIHtcbiAgICAgICAgICAgIGFscGhhOiAgeyB0eXBlOiAnMWYnLCB2YWx1ZTogMCB9LFxuICAgICAgICAgICAgdHJhbnNsYXRpb25NYXRyaXg6IHsgdHlwZTogJ21hdDMnLCB2YWx1ZTogbmV3IEZsb2F0MzJBcnJheSg5KSB9LFxuICAgICAgICAgICAgcHJvamVjdGlvbk1hdHJpeDogeyB0eXBlOiAnbWF0MycsIHZhbHVlOiBuZXcgRmxvYXQzMkFycmF5KDkpIH1cbiAgICAgICAgfSxcbiAgICAgICAgLy8gY3VzdG9tIGF0dHJpYnV0ZXNcbiAgICAgICAge1xuICAgICAgICAgICAgYVZlcnRleFBvc2l0aW9uOjAsXG4gICAgICAgICAgICBhVGV4dHVyZUNvb3JkOjBcbiAgICAgICAgfVxuICAgICk7XG59XG5cbk1lc2hTaGFkZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShjb3JlLlNoYWRlci5wcm90b3R5cGUpO1xuTWVzaFNoYWRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBNZXNoU2hhZGVyO1xubW9kdWxlLmV4cG9ydHMgPSBNZXNoU2hhZGVyO1xuXG5jb3JlLlNoYWRlck1hbmFnZXIucmVnaXN0ZXJQbHVnaW4oJ21lc2hTaGFkZXInLCBNZXNoU2hhZGVyKTtcbiIsIi8vIFJlZmVyZW5jZXM6XG4vLyBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9KYXZhU2NyaXB0L1JlZmVyZW5jZS9HbG9iYWxfT2JqZWN0cy9NYXRoL3NpZ25cblxuaWYgKCFNYXRoLnNpZ24pXG57XG4gICAgTWF0aC5zaWduID0gZnVuY3Rpb24gKHgpIHtcbiAgICAgICAgeCA9ICt4O1xuICAgICAgICBpZiAoeCA9PT0gMCB8fCBpc05hTih4KSlcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHg7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHggPiAwID8gMSA6IC0xO1xuICAgIH07XG59XG4iLCIvLyBSZWZlcmVuY2VzOlxuLy8gaHR0cHM6Ly9naXRodWIuY29tL3NpbmRyZXNvcmh1cy9vYmplY3QtYXNzaWduXG4vLyBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9KYXZhU2NyaXB0L1JlZmVyZW5jZS9HbG9iYWxfT2JqZWN0cy9PYmplY3QvYXNzaWduXG5cbmlmICghT2JqZWN0LmFzc2lnbilcbntcbiAgICBPYmplY3QuYXNzaWduID0gcmVxdWlyZSgnb2JqZWN0LWFzc2lnbicpO1xufVxuIiwicmVxdWlyZSgnLi9PYmplY3QuYXNzaWduJyk7XG5yZXF1aXJlKCcuL3JlcXVlc3RBbmltYXRpb25GcmFtZScpO1xucmVxdWlyZSgnLi9NYXRoLnNpZ24nKTtcbiIsIi8vIFJlZmVyZW5jZXM6XG4vLyBodHRwOi8vcGF1bGlyaXNoLmNvbS8yMDExL3JlcXVlc3RhbmltYXRpb25mcmFtZS1mb3Itc21hcnQtYW5pbWF0aW5nL1xuLy8gaHR0cHM6Ly9naXN0LmdpdGh1Yi5jb20vMTU3OTY3MVxuLy8gaHR0cDovL3VwZGF0ZXMuaHRtbDVyb2Nrcy5jb20vMjAxMi8wNS9yZXF1ZXN0QW5pbWF0aW9uRnJhbWUtQVBJLW5vdy13aXRoLXN1Yi1taWxsaXNlY29uZC1wcmVjaXNpb25cbi8vIGh0dHBzOi8vZ2lzdC5naXRodWIuY29tL3RpbWhhbGwvNDA3ODYxNFxuLy8gaHR0cHM6Ly9naXRodWIuY29tL0ZpbmFuY2lhbC1UaW1lcy9wb2x5ZmlsbC1zZXJ2aWNlL3RyZWUvbWFzdGVyL3BvbHlmaWxscy9yZXF1ZXN0QW5pbWF0aW9uRnJhbWVcblxuLy8gRXhwZWN0ZWQgdG8gYmUgdXNlZCB3aXRoIEJyb3dzZXJmaXlcbi8vIEJyb3dzZXJpZnkgYXV0b21hdGljYWxseSBkZXRlY3RzIHRoZSB1c2Ugb2YgYGdsb2JhbGAgYW5kIHBhc3NlcyB0aGVcbi8vIGNvcnJlY3QgcmVmZXJlbmNlIG9mIGBnbG9iYWxgLCBgc2VsZmAsIGFuZCBmaW5hbGx5IGB3aW5kb3dgXG5cbi8vIERhdGUubm93XG5pZiAoIShEYXRlLm5vdyAmJiBEYXRlLnByb3RvdHlwZS5nZXRUaW1lKSkge1xuICAgIERhdGUubm93ID0gZnVuY3Rpb24gbm93KCkge1xuICAgICAgICByZXR1cm4gbmV3IERhdGUoKS5nZXRUaW1lKCk7XG4gICAgfTtcbn1cblxuLy8gcGVyZm9ybWFuY2Uubm93XG5pZiAoIShnbG9iYWwucGVyZm9ybWFuY2UgJiYgZ2xvYmFsLnBlcmZvcm1hbmNlLm5vdykpIHtcbiAgICB2YXIgc3RhcnRUaW1lID0gRGF0ZS5ub3coKTtcbiAgICBpZiAoIWdsb2JhbC5wZXJmb3JtYW5jZSkge1xuICAgICAgICBnbG9iYWwucGVyZm9ybWFuY2UgPSB7fTtcbiAgICB9XG4gICAgZ2xvYmFsLnBlcmZvcm1hbmNlLm5vdyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIERhdGUubm93KCkgLSBzdGFydFRpbWU7XG4gICAgfTtcbn1cblxuLy8gcmVxdWVzdEFuaW1hdGlvbkZyYW1lXG52YXIgbGFzdFRpbWUgPSBEYXRlLm5vdygpO1xudmFyIHZlbmRvcnMgPSBbJ21zJywgJ21veicsICd3ZWJraXQnLCAnbyddO1xuXG5mb3IodmFyIHggPSAwOyB4IDwgdmVuZG9ycy5sZW5ndGggJiYgIWdsb2JhbC5yZXF1ZXN0QW5pbWF0aW9uRnJhbWU7ICsreCkge1xuICAgIGdsb2JhbC5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUgPSBnbG9iYWxbdmVuZG9yc1t4XSArICdSZXF1ZXN0QW5pbWF0aW9uRnJhbWUnXTtcbiAgICBnbG9iYWwuY2FuY2VsQW5pbWF0aW9uRnJhbWUgPSBnbG9iYWxbdmVuZG9yc1t4XSArICdDYW5jZWxBbmltYXRpb25GcmFtZSddIHx8XG4gICAgICAgIGdsb2JhbFt2ZW5kb3JzW3hdICsgJ0NhbmNlbFJlcXVlc3RBbmltYXRpb25GcmFtZSddO1xufVxuXG5pZiAoIWdsb2JhbC5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUpIHtcbiAgICBnbG9iYWwucmVxdWVzdEFuaW1hdGlvbkZyYW1lID0gZnVuY3Rpb24gKGNhbGxiYWNrKSB7XG4gICAgICAgIGlmICh0eXBlb2YgY2FsbGJhY2sgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoY2FsbGJhY2sgKyAnaXMgbm90IGEgZnVuY3Rpb24nKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBjdXJyZW50VGltZSA9IERhdGUubm93KCksXG4gICAgICAgICAgICBkZWxheSA9IDE2ICsgbGFzdFRpbWUgLSBjdXJyZW50VGltZTtcblxuICAgICAgICBpZiAoZGVsYXkgPCAwKSB7XG4gICAgICAgICAgICBkZWxheSA9IDA7XG4gICAgICAgIH1cblxuICAgICAgICBsYXN0VGltZSA9IGN1cnJlbnRUaW1lO1xuXG4gICAgICAgIHJldHVybiBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGxhc3RUaW1lID0gRGF0ZS5ub3coKTtcbiAgICAgICAgICAgIGNhbGxiYWNrKHBlcmZvcm1hbmNlLm5vdygpKTtcbiAgICAgICAgfSwgZGVsYXkpO1xuICAgIH07XG59XG5cbmlmICghZ2xvYmFsLmNhbmNlbEFuaW1hdGlvbkZyYW1lKSB7XG4gICAgZ2xvYmFsLmNhbmNlbEFuaW1hdGlvbkZyYW1lID0gZnVuY3Rpb24oaWQpIHtcbiAgICAgICAgY2xlYXJUaW1lb3V0KGlkKTtcbiAgICB9O1xufVxuIl19 +//# sourceMappingURL=data:application/json;charset:utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIm5vZGVfbW9kdWxlcy9icm93c2VyaWZ5L25vZGVfbW9kdWxlcy9icm93c2VyLXBhY2svX3ByZWx1ZGUuanMiLCIuLi9waXhpLWdsLWNvcmUvaW5kZXguanMiLCIuLi9waXhpLWdsLWNvcmUvbGliL0dMQnVmZmVyLmpzIiwiLi4vcGl4aS1nbC1jb3JlL2xpYi9HTEZyYW1lYnVmZmVyLmpzIiwiLi4vcGl4aS1nbC1jb3JlL2xpYi9HTFNoYWRlci5qcyIsIi4uL3BpeGktZ2wtY29yZS9saWIvR0xUZXh0dXJlLmpzIiwiLi4vcGl4aS1nbC1jb3JlL2xpYi9WZXJ0ZXhBcnJheU9iamVjdC5qcyIsIi4uL3BpeGktZ2wtY29yZS9saWIvY3JlYXRlQ29udGV4dC5qcyIsIi4uL3BpeGktZ2wtY29yZS9saWIvc2V0VmVydGV4QXR0cmliQXJyYXlzLmpzIiwiLi4vcGl4aS1nbC1jb3JlL2xpYi9zaGFkZXIvY29tcGlsZVByb2dyYW0uanMiLCIuLi9waXhpLWdsLWNvcmUvbGliL3NoYWRlci9kZWZhdWx0VmFsdWUuanMiLCIuLi9waXhpLWdsLWNvcmUvbGliL3NoYWRlci9leHRyYWN0QXR0cmlidXRlcy5qcyIsIi4uL3BpeGktZ2wtY29yZS9saWIvc2hhZGVyL2V4dHJhY3RVbmlmb3Jtcy5qcyIsIi4uL3BpeGktZ2wtY29yZS9saWIvc2hhZGVyL2dlbmVyYXRlVW5pZm9ybUFjY2Vzc09iamVjdC5qcyIsIi4uL3BpeGktZ2wtY29yZS9saWIvc2hhZGVyL21hcFNpemUuanMiLCIuLi9waXhpLWdsLWNvcmUvbGliL3NoYWRlci9tYXBUeXBlLmpzIiwibm9kZV9tb2R1bGVzL2FzeW5jL2xpYi9hc3luYy5qcyIsIm5vZGVfbW9kdWxlcy9icm93c2VyaWZ5L25vZGVfbW9kdWxlcy9wYXRoLWJyb3dzZXJpZnkvaW5kZXguanMiLCJub2RlX21vZHVsZXMvYnJvd3NlcmlmeS9ub2RlX21vZHVsZXMvcHJvY2Vzcy9icm93c2VyLmpzIiwibm9kZV9tb2R1bGVzL2Jyb3dzZXJpZnkvbm9kZV9tb2R1bGVzL3B1bnljb2RlL3B1bnljb2RlLmpzIiwibm9kZV9tb2R1bGVzL2Jyb3dzZXJpZnkvbm9kZV9tb2R1bGVzL3F1ZXJ5c3RyaW5nLWVzMy9kZWNvZGUuanMiLCJub2RlX21vZHVsZXMvYnJvd3NlcmlmeS9ub2RlX21vZHVsZXMvcXVlcnlzdHJpbmctZXMzL2VuY29kZS5qcyIsIm5vZGVfbW9kdWxlcy9icm93c2VyaWZ5L25vZGVfbW9kdWxlcy9xdWVyeXN0cmluZy1lczMvaW5kZXguanMiLCJub2RlX21vZHVsZXMvYnJvd3NlcmlmeS9ub2RlX21vZHVsZXMvdXJsL3VybC5qcyIsIm5vZGVfbW9kdWxlcy9lYXJjdXQvc3JjL2VhcmN1dC5qcyIsIm5vZGVfbW9kdWxlcy9ldmVudGVtaXR0ZXIzL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL29iamVjdC1hc3NpZ24vaW5kZXguanMiLCJub2RlX21vZHVsZXMvcmVzb3VyY2UtbG9hZGVyL25vZGVfbW9kdWxlcy9hc3luYy9saWIvYXN5bmMuanMiLCJub2RlX21vZHVsZXMvcmVzb3VyY2UtbG9hZGVyL3NyYy9Mb2FkZXIuanMiLCJub2RlX21vZHVsZXMvcmVzb3VyY2UtbG9hZGVyL3NyYy9SZXNvdXJjZS5qcyIsIm5vZGVfbW9kdWxlcy9yZXNvdXJjZS1sb2FkZXIvc3JjL2I2NC5qcyIsIm5vZGVfbW9kdWxlcy9yZXNvdXJjZS1sb2FkZXIvc3JjL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL3Jlc291cmNlLWxvYWRlci9zcmMvbWlkZGxld2FyZXMvY2FjaGluZy9tZW1vcnkuanMiLCJub2RlX21vZHVsZXMvcmVzb3VyY2UtbG9hZGVyL3NyYy9taWRkbGV3YXJlcy9wYXJzaW5nL2Jsb2IuanMiLCJwYWNrYWdlLmpzb24iLCJzcmMvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5TWFuYWdlci5qcyIsInNyYy9hY2Nlc3NpYmlsaXR5L2FjY2Vzc2libGVUYXJnZXQuanMiLCJzcmMvYWNjZXNzaWJpbGl0eS9pbmRleC5qcyIsInNyYy9jb3JlL2NvbnN0LmpzIiwic3JjL2NvcmUvZGlzcGxheS9Db250YWluZXIuanMiLCJzcmMvY29yZS9kaXNwbGF5L0Rpc3BsYXlPYmplY3QuanMiLCJzcmMvY29yZS9ncmFwaGljcy9HcmFwaGljcy5qcyIsInNyYy9jb3JlL2dyYXBoaWNzL0dyYXBoaWNzRGF0YS5qcyIsInNyYy9jb3JlL2dyYXBoaWNzL3dlYmdsL0dyYXBoaWNzUmVuZGVyZXIuanMiLCJzcmMvY29yZS9ncmFwaGljcy93ZWJnbC9XZWJHTEdyYXBoaWNzRGF0YS5qcyIsInNyYy9jb3JlL2dyYXBoaWNzL3dlYmdsL3NoYWRlcnMvUHJpbWl0aXZlU2hhZGVyLmpzIiwic3JjL2NvcmUvZ3JhcGhpY3Mvd2ViZ2wvdXRpbHMvYnVpbGRDaXJjbGUuanMiLCJzcmMvY29yZS9ncmFwaGljcy93ZWJnbC91dGlscy9idWlsZENvbXBsZXhQb2x5LmpzIiwic3JjL2NvcmUvZ3JhcGhpY3Mvd2ViZ2wvdXRpbHMvYnVpbGRMaW5lLmpzIiwic3JjL2NvcmUvZ3JhcGhpY3Mvd2ViZ2wvdXRpbHMvYnVpbGRQb2x5LmpzIiwic3JjL2NvcmUvZ3JhcGhpY3Mvd2ViZ2wvdXRpbHMvYnVpbGRSZWN0YW5nbGUuanMiLCJzcmMvY29yZS9ncmFwaGljcy93ZWJnbC91dGlscy9idWlsZFJvdW5kZWRSZWN0YW5nbGUuanMiLCJzcmMvY29yZS9pbmRleC5qcyIsInNyYy9jb3JlL21hdGgvTWF0cml4LmpzIiwic3JjL2NvcmUvbWF0aC9Qb2ludC5qcyIsInNyYy9jb3JlL21hdGgvaW5kZXguanMiLCJzcmMvY29yZS9tYXRoL3NoYXBlcy9DaXJjbGUuanMiLCJzcmMvY29yZS9tYXRoL3NoYXBlcy9FbGxpcHNlLmpzIiwic3JjL2NvcmUvbWF0aC9zaGFwZXMvUG9seWdvbi5qcyIsInNyYy9jb3JlL21hdGgvc2hhcGVzL1JlY3RhbmdsZS5qcyIsInNyYy9jb3JlL21hdGgvc2hhcGVzL1JvdW5kZWRSZWN0YW5nbGUuanMiLCJzcmMvY29yZS9wYXJ0aWNsZXMvUGFydGljbGVDb250YWluZXIuanMiLCJzcmMvY29yZS9wYXJ0aWNsZXMvd2ViZ2wvUGFydGljbGVCdWZmZXIuanMiLCJzcmMvY29yZS9wYXJ0aWNsZXMvd2ViZ2wvUGFydGljbGVSZW5kZXJlci5qcyIsInNyYy9jb3JlL3BhcnRpY2xlcy93ZWJnbC9QYXJ0aWNsZVNoYWRlci5qcyIsInNyYy9jb3JlL3JlbmRlcmVycy9TeXN0ZW1SZW5kZXJlci5qcyIsInNyYy9jb3JlL3JlbmRlcmVycy9jYW52YXMvQ2FudmFzUmVuZGVyZXIuanMiLCJzcmMvY29yZS9yZW5kZXJlcnMvY2FudmFzL3V0aWxzL0NhbnZhc0J1ZmZlci5qcyIsInNyYy9jb3JlL3JlbmRlcmVycy9jYW52YXMvdXRpbHMvQ2FudmFzR3JhcGhpY3MuanMiLCJzcmMvY29yZS9yZW5kZXJlcnMvY2FudmFzL3V0aWxzL0NhbnZhc01hc2tNYW5hZ2VyLmpzIiwic3JjL2NvcmUvcmVuZGVyZXJzL2NhbnZhcy91dGlscy9DYW52YXNUaW50ZXIuanMiLCJzcmMvY29yZS9yZW5kZXJlcnMvd2ViZ2wvVGV4dHVyZU1hbmFnZXIuanMiLCJzcmMvY29yZS9yZW5kZXJlcnMvd2ViZ2wvV2ViR0xSZW5kZXJlci5qcyIsInNyYy9jb3JlL3JlbmRlcmVycy93ZWJnbC9maWx0ZXJzL0Fic3RyYWN0RmlsdGVyLmpzIiwic3JjL2NvcmUvcmVuZGVyZXJzL3dlYmdsL2ZpbHRlcnMvRlhBQUZpbHRlci5qcyIsInNyYy9jb3JlL3JlbmRlcmVycy93ZWJnbC9maWx0ZXJzL1Nwcml0ZU1hc2tGaWx0ZXIuanMiLCJzcmMvY29yZS9yZW5kZXJlcnMvd2ViZ2wvbWFuYWdlcnMvQmxlbmRNb2RlTWFuYWdlci5qcyIsInNyYy9jb3JlL3JlbmRlcmVycy93ZWJnbC9tYW5hZ2Vycy9GaWx0ZXJNYW5hZ2VyLmpzIiwic3JjL2NvcmUvcmVuZGVyZXJzL3dlYmdsL21hbmFnZXJzL01hc2tNYW5hZ2VyLmpzIiwic3JjL2NvcmUvcmVuZGVyZXJzL3dlYmdsL21hbmFnZXJzL1NoYWRlck1hbmFnZXIuanMiLCJzcmMvY29yZS9yZW5kZXJlcnMvd2ViZ2wvbWFuYWdlcnMvU3RlbmNpbE1hbmFnZXIuanMiLCJzcmMvY29yZS9yZW5kZXJlcnMvd2ViZ2wvbWFuYWdlcnMvV2ViR0xNYW5hZ2VyLmpzIiwic3JjL2NvcmUvcmVuZGVyZXJzL3dlYmdsL3NoYWRlcnMvQ29tcGxleFByaW1pdGl2ZVNoYWRlci5qcyIsInNyYy9jb3JlL3JlbmRlcmVycy93ZWJnbC9zaGFkZXJzL1ByaW1pdGl2ZVNoYWRlci5qcyIsInNyYy9jb3JlL3JlbmRlcmVycy93ZWJnbC9zaGFkZXJzL1NoYWRlci5qcyIsInNyYy9jb3JlL3JlbmRlcmVycy93ZWJnbC9zaGFkZXJzL1RleHR1cmVTaGFkZXIuanMiLCJzcmMvY29yZS9yZW5kZXJlcnMvd2ViZ2wvc2hhZGVycy9fVGV4dHVyZVNoYWRlci5qcyIsInNyYy9jb3JlL3JlbmRlcmVycy93ZWJnbC91dGlscy9PYmplY3RSZW5kZXJlci5qcyIsInNyYy9jb3JlL3JlbmRlcmVycy93ZWJnbC91dGlscy9RdWFkLmpzIiwic3JjL2NvcmUvcmVuZGVyZXJzL3dlYmdsL3V0aWxzL1JlbmRlclRhcmdldC5qcyIsInNyYy9jb3JlL3JlbmRlcmVycy93ZWJnbC91dGlscy9TdGVuY2lsTWFza1N0YWNrLmpzIiwic3JjL2NvcmUvcmVuZGVyZXJzL3dlYmdsL3V0aWxzL21hcFdlYkdMQmxlbmRNb2Rlc1RvUGl4aS5qcyIsInNyYy9jb3JlL3JlbmRlcmVycy93ZWJnbC91dGlscy9tYXBXZWJHTERyYXdNb2Rlc1RvUGl4aS5qcyIsInNyYy9jb3JlL3Nwcml0ZXMvU3ByaXRlLmpzIiwic3JjL2NvcmUvc3ByaXRlcy93ZWJnbC9TcHJpdGVSZW5kZXJlci5qcyIsInNyYy9jb3JlL3Nwcml0ZXMvd2ViZ2wvZ2VuZXJhdGVNdWx0aVRleHR1cmVTaGFkZXIuanMiLCJzcmMvY29yZS90ZXh0L1RleHQuanMiLCJzcmMvY29yZS90ZXh0dXJlcy9CYXNlVGV4dHVyZS5qcyIsInNyYy9jb3JlL3RleHR1cmVzL1JlbmRlclRleHR1cmUuanMiLCJzcmMvY29yZS90ZXh0dXJlcy9UZXh0dXJlLmpzIiwic3JjL2NvcmUvdGV4dHVyZXMvVGV4dHVyZVV2cy5qcyIsInNyYy9jb3JlL3RleHR1cmVzL1ZpZGVvQmFzZVRleHR1cmUuanMiLCJzcmMvY29yZS90aWNrZXIvVGlja2VyLmpzIiwic3JjL2NvcmUvdGlja2VyL2luZGV4LmpzIiwic3JjL2NvcmUvdXRpbHMvY3JlYXRlSW5kaWNlc0ZvclF1YWRzLmpzIiwic3JjL2NvcmUvdXRpbHMvaW5kZXguanMiLCJzcmMvY29yZS91dGlscy9wbHVnaW5UYXJnZXQuanMiLCJzcmMvZGVwcmVjYXRpb24uanMiLCJzcmMvZXh0cmFzL0JpdG1hcFRleHQuanMiLCJzcmMvZXh0cmFzL01vdmllQ2xpcC5qcyIsInNyYy9leHRyYXMvVGlsaW5nU3ByaXRlLmpzIiwic3JjL2V4dHJhcy9jYWNoZUFzQml0bWFwLmpzIiwic3JjL2V4dHJhcy9nZXRDaGlsZEJ5TmFtZS5qcyIsInNyYy9leHRyYXMvZ2V0R2xvYmFsUG9zaXRpb24uanMiLCJzcmMvZXh0cmFzL2luZGV4LmpzIiwic3JjL2ZpbHRlcnMvYXNjaWkvQXNjaWlGaWx0ZXIuanMiLCJzcmMvZmlsdGVycy9ibG9vbS9CbG9vbUZpbHRlci5qcyIsInNyYy9maWx0ZXJzL2JsdXIvQmx1ckRpckZpbHRlci5qcyIsInNyYy9maWx0ZXJzL2JsdXIvQmx1ckZpbHRlci5qcyIsInNyYy9maWx0ZXJzL2JsdXIvQmx1clhGaWx0ZXIuanMiLCJzcmMvZmlsdGVycy9ibHVyL0JsdXJZRmlsdGVyLmpzIiwic3JjL2ZpbHRlcnMvYmx1ci9TbWFydEJsdXJGaWx0ZXIuanMiLCJzcmMvZmlsdGVycy9jb2xvci9Db2xvck1hdHJpeEZpbHRlci5qcyIsInNyYy9maWx0ZXJzL2NvbG9yL0NvbG9yU3RlcEZpbHRlci5qcyIsInNyYy9maWx0ZXJzL2NvbnZvbHV0aW9uL0NvbnZvbHV0aW9uRmlsdGVyLmpzIiwic3JjL2ZpbHRlcnMvY3Jvc3NoYXRjaC9Dcm9zc0hhdGNoRmlsdGVyLmpzIiwic3JjL2ZpbHRlcnMvZGlzcGxhY2VtZW50L0Rpc3BsYWNlbWVudEZpbHRlci5qcyIsInNyYy9maWx0ZXJzL2RvdC9Eb3RTY3JlZW5GaWx0ZXIuanMiLCJzcmMvZmlsdGVycy9kcm9wc2hhZG93L0JsdXJZVGludEZpbHRlci5qcyIsInNyYy9maWx0ZXJzL2Ryb3BzaGFkb3cvRHJvcFNoYWRvd0ZpbHRlci5qcyIsInNyYy9maWx0ZXJzL2dyYXkvR3JheUZpbHRlci5qcyIsInNyYy9maWx0ZXJzL2luZGV4LmpzIiwic3JjL2ZpbHRlcnMvaW52ZXJ0L0ludmVydEZpbHRlci5qcyIsInNyYy9maWx0ZXJzL25vaXNlL05vaXNlRmlsdGVyLmpzIiwic3JjL2ZpbHRlcnMvcGl4ZWxhdGUvUGl4ZWxhdGVGaWx0ZXIuanMiLCJzcmMvZmlsdGVycy9yZ2IvUkdCU3BsaXRGaWx0ZXIuanMiLCJzcmMvZmlsdGVycy9zZXBpYS9TZXBpYUZpbHRlci5qcyIsInNyYy9maWx0ZXJzL3Nob2Nrd2F2ZS9TaG9ja3dhdmVGaWx0ZXIuanMiLCJzcmMvZmlsdGVycy90aWx0c2hpZnQvVGlsdFNoaWZ0QXhpc0ZpbHRlci5qcyIsInNyYy9maWx0ZXJzL3RpbHRzaGlmdC9UaWx0U2hpZnRGaWx0ZXIuanMiLCJzcmMvZmlsdGVycy90aWx0c2hpZnQvVGlsdFNoaWZ0WEZpbHRlci5qcyIsInNyYy9maWx0ZXJzL3RpbHRzaGlmdC9UaWx0U2hpZnRZRmlsdGVyLmpzIiwic3JjL2ZpbHRlcnMvdHdpc3QvVHdpc3RGaWx0ZXIuanMiLCJzcmMvc3JjL2luZGV4LmpzIiwic3JjL2ludGVyYWN0aW9uL0ludGVyYWN0aW9uRGF0YS5qcyIsInNyYy9pbnRlcmFjdGlvbi9JbnRlcmFjdGlvbk1hbmFnZXIuanMiLCJzcmMvaW50ZXJhY3Rpb24vaW5kZXguanMiLCJzcmMvaW50ZXJhY3Rpb24vaW50ZXJhY3RpdmVUYXJnZXQuanMiLCJzcmMvbG9hZGVycy9iaXRtYXBGb250UGFyc2VyLmpzIiwic3JjL2xvYWRlcnMvaW5kZXguanMiLCJzcmMvbG9hZGVycy9sb2FkZXIuanMiLCJzcmMvbG9hZGVycy9zcHJpdGVzaGVldFBhcnNlci5qcyIsInNyYy9sb2FkZXJzL3RleHR1cmVQYXJzZXIuanMiLCJzcmMvbWVzaC9NZXNoLmpzIiwic3JjL21lc2gvUGxhbmUuanMiLCJzcmMvbWVzaC9Sb3BlLmpzIiwic3JjL21lc2gvaW5kZXguanMiLCJzcmMvbWVzaC93ZWJnbC9NZXNoUmVuZGVyZXIuanMiLCJzcmMvbWVzaC93ZWJnbC9NZXNoU2hhZGVyLmpzIiwic3JjL3BvbHlmaWxsL01hdGguc2lnbi5qcyIsInNyYy9wb2x5ZmlsbC9PYmplY3QuYXNzaWduLmpzIiwic3JjL3BvbHlmaWxsL2luZGV4LmpzIiwic3JjL3BvbHlmaWxsL3JlcXVlc3RBbmltYXRpb25GcmFtZS5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQ0FBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDMUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN4Q0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN2TUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2pIQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM5QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdERBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3pEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDMUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbENBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM3QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3RJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDaENBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQzlDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7QUM1dUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7OztBQ2hPQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUMzRkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7O0FDcmhCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNwRkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNyRkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNKQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbnNCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0a0JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdFFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUN2Q0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7OztBQ25tQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDeGNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNoeUJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDaEVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ1pBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNwQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMxREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ25aQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDN05BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3JvQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdm1CQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0b0NBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDM0ZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzlUQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDcEhBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNsREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNyRkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDckVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMxTkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM3REE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDckVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzlIQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM3RkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdGJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNwRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3BCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdEZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzdGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDckdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM1RkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDMUZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM3VEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzFOQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMxZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM1RUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuUUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzFRQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbEdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDaFdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzVEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzFQQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMxSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzNZQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDOUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNyREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQy9GQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMxQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbGNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNqSEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDeEtBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM3V0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdkNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzVEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzdEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzlnQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM3R0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMvRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3hEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN6SkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNqU0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMvQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ25DQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3RCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDem1CQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdldBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDN0RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDM21CQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuYkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDN2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDeGFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDL0VBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDM09BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNqV0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdERBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDL0JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuUkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3BFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzdWQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbFlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzlUQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNsY0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDOVFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNUJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNUJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbkJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdkRBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ25HQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzVHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzNGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNwRkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM1QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdGhCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDL0NBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN6RkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDeEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbEZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdEVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN6RkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQy9MQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDL0NBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDckNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2hEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDckRBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDakRBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3BGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNoREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3RGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMzSEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3BDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNwQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUNuRkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7OztBQzVCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDL0NBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDMTJCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNmQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDL0NBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN2SEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNURBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbEZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNwQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDMWRBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNUhBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbk5BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNqQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ25PQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDM0RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDUkE7QUFDQTtBQUNBO0FBQ0E7OztBQ0hBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6ImdlbmVyYXRlZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzQ29udGVudCI6WyIoZnVuY3Rpb24gZSh0LG4scil7ZnVuY3Rpb24gcyhvLHUpe2lmKCFuW29dKXtpZighdFtvXSl7dmFyIGE9dHlwZW9mIHJlcXVpcmU9PVwiZnVuY3Rpb25cIiYmcmVxdWlyZTtpZighdSYmYSlyZXR1cm4gYShvLCEwKTtpZihpKXJldHVybiBpKG8sITApO3ZhciBmPW5ldyBFcnJvcihcIkNhbm5vdCBmaW5kIG1vZHVsZSAnXCIrbytcIidcIik7dGhyb3cgZi5jb2RlPVwiTU9EVUxFX05PVF9GT1VORFwiLGZ9dmFyIGw9bltvXT17ZXhwb3J0czp7fX07dFtvXVswXS5jYWxsKGwuZXhwb3J0cyxmdW5jdGlvbihlKXt2YXIgbj10W29dWzFdW2VdO3JldHVybiBzKG4/bjplKX0sbCxsLmV4cG9ydHMsZSx0LG4scil9cmV0dXJuIG5bb10uZXhwb3J0c312YXIgaT10eXBlb2YgcmVxdWlyZT09XCJmdW5jdGlvblwiJiZyZXF1aXJlO2Zvcih2YXIgbz0wO288ci5sZW5ndGg7bysrKXMocltvXSk7cmV0dXJuIHN9KSIsIlxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcblxuICAgIGNyZWF0ZUNvbnRleHQ6IFx0XHRcdHJlcXVpcmUoJy4vbGliL2NyZWF0ZUNvbnRleHQnKSxcbiAgICBzZXRWZXJ0ZXhBdHRyaWJBcnJheXM6IFx0cmVxdWlyZSgnLi9saWIvc2V0VmVydGV4QXR0cmliQXJyYXlzJyksXG4gICAgXG4gICAgR0xCdWZmZXI6IFx0XHRcdFx0cmVxdWlyZSgnLi9saWIvR0xCdWZmZXInKSxcbiAgICBHTEZyYW1lYnVmZmVyOiBcdFx0XHRyZXF1aXJlKCcuL2xpYi9HTEZyYW1lYnVmZmVyJyksXG4gICAgR0xTaGFkZXI6IFx0XHRcdFx0cmVxdWlyZSgnLi9saWIvR0xTaGFkZXInKSxcbiAgICBHTFRleHR1cmU6IFx0XHRcdFx0cmVxdWlyZSgnLi9saWIvR0xUZXh0dXJlJyksXG4gICAgXG4gICAgVmVydGV4QXJyYXlPYmplY3Q6IFx0XHRyZXF1aXJlKCcuL2xpYi9WZXJ0ZXhBcnJheU9iamVjdCcpXG5cbn07IiwiXG4vKipcbiAqIEhlbHBlciBjbGFzcyB0byBjcmVhdGUgYSB3ZWJHTCBidWZmZXJcbiAqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gZ2wge1dlYkdMUmVuZGVyaW5nQ29udGV4dH1cbiAqL1xuXG52YXIgRU1QVFlfQVJSQVlfQlVGRkVSID0gbmV3IEFycmF5QnVmZmVyKDApO1xuXG52YXIgQnVmZmVyID0gZnVuY3Rpb24oZ2wsIHR5cGUsIGRhdGEsIGRyYXdUeXBlKVxue1xuXHR0aGlzLmdsID0gZ2w7XG5cblx0dGhpcy5idWZmZXIgPSBnbC5jcmVhdGVCdWZmZXIoKTtcblx0dGhpcy50eXBlID0gdHlwZSB8fCBnbC5BUlJBWV9CVUZGRVI7XG5cdHRoaXMuZHJhd1R5cGUgPSBkcmF3VHlwZSB8fCBnbC5TVEFUSUNfRFJBVztcblx0dGhpcy5kYXRhID0gRU1QVFlfQVJSQVlfQlVGRkVSO1xuXG5cdGlmKGRhdGEpXG5cdHtcblx0XHR0aGlzLnVwbG9hZChkYXRhKTtcblx0fVxufVxuXG5CdWZmZXIucHJvdG90eXBlLnVwbG9hZCA9IGZ1bmN0aW9uKGRhdGEsIG9mZnNldCwgZG9udEJpbmQpXG57XG5cdC8vIHRvZG8gLSBuZWVkZWQ/XG5cdC8vaWYoIWRvbnRCaW5kKVxuXHR0aGlzLmJpbmQoKTtcblxuXHR2YXIgZ2wgPSB0aGlzLmdsO1xuXHRcblx0ZGF0YSA9IGRhdGEgfHwgdGhpcy5kYXRhO1xuXHRvZmZzZXQgPSBvZmZzZXQgfHwgMDtcblxuXHRpZih0aGlzLmRhdGEuYnl0ZUxlbmd0aCA+PSBkYXRhLmJ5dGVMZW5ndGgpXG5cdHtcdFxuXHRcdGdsLmJ1ZmZlclN1YkRhdGEodGhpcy50eXBlLCBvZmZzZXQsIGRhdGEpO1xuXHR9XG5cdGVsc2Vcblx0e1xuXHRcdGdsLmJ1ZmZlckRhdGEodGhpcy50eXBlLCBkYXRhLCB0aGlzLmRyYXdUeXBlKTtcblx0fVxuXG5cdHRoaXMuZGF0YSA9IGRhdGE7XG59XG5cbkJ1ZmZlci5wcm90b3R5cGUuYmluZCA9IGZ1bmN0aW9uKClcbntcblx0dmFyIGdsID0gdGhpcy5nbDtcblx0Z2wuYmluZEJ1ZmZlcih0aGlzLnR5cGUsIHRoaXMuYnVmZmVyKTtcbn1cblxuQnVmZmVyLmNyZWF0ZVZlcnRleEJ1ZmZlciA9IGZ1bmN0aW9uKGdsLCBkYXRhLCBkcmF3VHlwZSlcbntcblx0cmV0dXJuIG5ldyBCdWZmZXIoZ2wsIGdsLkFSUkFZX0JVRkZFUiwgZGF0YSwgZHJhd1R5cGUpO1xufVxuXG5CdWZmZXIuY3JlYXRlSW5kZXhCdWZmZXIgPSBmdW5jdGlvbihnbCwgZGF0YSwgZHJhd1R5cGUpXG57XG5cdHJldHVybiBuZXcgQnVmZmVyKGdsLCBnbC5FTEVNRU5UX0FSUkFZX0JVRkZFUiwgZGF0YSwgZHJhd1R5cGUpO1xufVxuXG5CdWZmZXIuY3JlYXRlID0gZnVuY3Rpb24oZ2wsIHR5cGUsIGRhdGEsIGRyYXdUeXBlKVxue1xuXHRyZXR1cm4gbmV3IEJ1ZmZlcihnbCwgdHlwZSwgZHJhd1R5cGUpO1xufVxuXG4vL1RPRE8gRGVzdHJveS4uXG5cbm1vZHVsZS5leHBvcnRzID0gQnVmZmVyO1xuXG4iLCJcbnZhciBUZXh0dXJlID0gcmVxdWlyZSgnLi9HTFRleHR1cmUnKTtcblxuLyoqXG4gKiBIZWxwZXIgY2xhc3MgdG8gY3JlYXRlIGEgd2ViR0wgRnJhbWVidWZmZXJcbiAqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gZ2wge1dlYkdMUmVuZGVyaW5nQ29udGV4dH1cbiAqL1xuXG52YXIgRnJhbWVidWZmZXIgPSBmdW5jdGlvbihnbCwgd2lkdGgsIGhlaWdodClcbntcblx0dGhpcy5nbCA9IGdsO1xuXG5cdHRoaXMuZnJhbWVidWZmZXIgPSBnbC5jcmVhdGVGcmFtZWJ1ZmZlcigpO1xuXHRcblx0dGhpcy5zdGVuY2lsID0gbnVsbDtcblx0dGhpcy50ZXh0dXJlID0gbnVsbDtcblxuXHR0aGlzLndpZHRoID0gd2lkdGggfHwgMTAwO1xuXHR0aGlzLmhlaWdodCA9IGhlaWdodCB8fCAxMDA7XG59XG5cbkZyYW1lYnVmZmVyLnByb3RvdHlwZS5lbmFibGVUZXh0dXJlID0gZnVuY3Rpb24odGV4dHVyZSlcbntcblx0dmFyIGdsID0gdGhpcy5nbDtcblxuXHR0aGlzLnRleHR1cmUgPSB0ZXh0dXJlIHx8IG5ldyBUZXh0dXJlKGdsKTtcblxuXHR0aGlzLnRleHR1cmUuYmluZCgpO1xuXG5cdC8vZ2wudGV4SW1hZ2UyRChnbC5URVhUVVJFXzJELCAwLCBnbC5SR0JBLCAgdGhpcy53aWR0aCwgdGhpcy5oZWlnaHQsIDAsIGdsLlJHQkEsIGdsLlVOU0lHTkVEX0JZVEUsIG51bGwpO1xuXG5cdHRoaXMuYmluZCgpO1xuXG5cdGdsLmZyYW1lYnVmZmVyVGV4dHVyZTJEKGdsLkZSQU1FQlVGRkVSLCBnbC5DT0xPUl9BVFRBQ0hNRU5UMCwgZ2wuVEVYVFVSRV8yRCwgdGhpcy50ZXh0dXJlLnRleHR1cmUsIDApO1xufVxuXG5GcmFtZWJ1ZmZlci5wcm90b3R5cGUuZW5hYmxlU3RlbmNpbCA9IGZ1bmN0aW9uKClcbntcblx0aWYodGhpcy5zdGVuY2lsKXJldHVybjtcblxuXHR2YXIgZ2wgPSB0aGlzLmdsO1xuXG5cdHRoaXMuc3RlbmNpbCA9IGdsLmNyZWF0ZVJlbmRlcmJ1ZmZlcigpO1xuICAgIFxuICAgIGdsLmJpbmRSZW5kZXJidWZmZXIoZ2wuUkVOREVSQlVGRkVSLCB0aGlzLnN0ZW5jaWwpO1xuICAgIFxuICAgIC8vIFRPRE8uLiB0aGlzIGlzIGRlcHRoIEFORCBzdGVuY2lsP1xuICAgIGdsLmZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyKGdsLkZSQU1FQlVGRkVSLCBnbC5ERVBUSF9TVEVOQ0lMX0FUVEFDSE1FTlQsIGdsLlJFTkRFUkJVRkZFUiwgdGhpcy5zdGVuY2lsKTtcbiAgICBnbC5yZW5kZXJidWZmZXJTdG9yYWdlKGdsLlJFTkRFUkJVRkZFUiwgZ2wuREVQVEhfU1RFTkNJTCwgIHRoaXMud2lkdGggICwgdGhpcy5oZWlnaHQgKTtcbn1cblxuRnJhbWVidWZmZXIucHJvdG90eXBlLmNsZWFyID0gZnVuY3Rpb24oIHIsIGcsIGIsIGEgKVxue1xuXHR0aGlzLmJpbmQoKTtcblxuXHR2YXIgZ2wgPSB0aGlzLmdsO1xuICAgIFxuICAgIGdsLmNsZWFyQ29sb3IociwgZywgYiwgYSk7XG4gICAgZ2wuY2xlYXIoZ2wuQ09MT1JfQlVGRkVSX0JJVCk7XG59XG5cbkZyYW1lYnVmZmVyLnByb3RvdHlwZS5iaW5kID0gZnVuY3Rpb24oKVxue1xuXHR2YXIgZ2wgPSB0aGlzLmdsO1xuXHRnbC5iaW5kRnJhbWVidWZmZXIoZ2wuRlJBTUVCVUZGRVIsIHRoaXMuZnJhbWVidWZmZXIgKTtcdFxufVxuXG5GcmFtZWJ1ZmZlci5wcm90b3R5cGUudW5iaW5kID0gZnVuY3Rpb24oKVxue1xuXHRnbC5iaW5kRnJhbWVidWZmZXIoZ2wuRlJBTUVCVUZGRVIsIG51bGwgKTtcdFxufVxuXG5GcmFtZWJ1ZmZlci5wcm90b3R5cGUucmVzaXplID0gZnVuY3Rpb24od2lkdGgsIGhlaWdodClcbntcblx0dmFyIGdsID0gdGhpcy5nbDtcblxuXHR0aGlzLndpZHRoID0gd2lkdGg7XG5cdHRoaXMuaGVpZ2h0ID0gaGVpZ2h0O1xuXG5cdGlmICggdGhpcy50ZXh0dXJlIClcbiAgICB7XG4gICAgXHR0aGlzLnRleHR1cmUudXBsb2FkRGF0YShudWxsLCB3aWR0aCwgaGVpZ2h0KTtcblx0fVxuXG5cdGlmICggdGhpcy5zdGVuY2lsIClcbiAgICB7XG4gICAgICAgIC8vIHVwZGF0ZSB0aGUgc3RlbmNpbCBidWZmZXIgd2lkdGggYW5kIGhlaWdodFxuICAgICAgICBnbC5iaW5kUmVuZGVyYnVmZmVyKGdsLlJFTkRFUkJVRkZFUiwgdGhpcy5zdGVuY2lsKTtcbiAgICAgICAgZ2wucmVuZGVyYnVmZmVyU3RvcmFnZShnbC5SRU5ERVJCVUZGRVIsIGdsLkRFUFRIX1NURU5DSUwsIHdpZHRoLCBoZWlnaHQpO1xuICAgIH1cbn1cblxuRnJhbWVidWZmZXIucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbigpXG57XG5cdHZhciBnbCA9IHRoaXMuZ2w7XG5cdC8vVE9ET1xuXHRnbC5kZWxldGVGcmFtZWJ1ZmZlcih0aGlzLmZyYW1lYnVmZmVyKTtcbn1cblxuRnJhbWVidWZmZXIuY3JlYXRlUkdCQSA9IGZ1bmN0aW9uKGdsLCB3aWR0aCwgaGVpZ2h0LCBkYXRhKVxue1xuXHR2YXIgdGV4dHVyZSA9IFRleHR1cmUuZnJvbURhdGEoZ2wsIG51bGwsIHdpZHRoLCBoZWlnaHQpO1xuXHR0ZXh0dXJlLmVuYWJsZU5lYXJlc3RTY2FsaW5nKCk7XG4gICAgdGV4dHVyZS5lbmFibGVXcmFwQ2xhbXAoKTtcblxuICAgIC8vbm93IGNyZWF0ZSB0aGUgZnJhbWVidWZmZXIgb2JqZWN0IGFuZCBhdHRhY2ggdGhlIHRleHR1cmUgdG8gaXQuXG4gICAgdmFyIGZibyA9IG5ldyBGcmFtZWJ1ZmZlcihnbCwgd2lkdGgsIGhlaWdodCk7XG4gICAgZmJvLmVuYWJsZVRleHR1cmUodGV4dHVyZSk7XG5cbiAgICByZXR1cm4gZmJvO1xufVxuXG5GcmFtZWJ1ZmZlci5jcmVhdGVGbG9hdDMyID0gZnVuY3Rpb24oZ2wsIHdpZHRoLCBoZWlnaHQsIGRhdGEpXG57XG5cdC8vIGNyZWF0ZSBhIG5ldyB0ZXh0dXJlLi5cbiAgICB2YXIgdGV4dHVyZSA9IG5ldyBUZXh0dXJlLmZyb21EYXRhKGdsLCBkYXRhLCB3aWR0aCwgaGVpZ2h0KTtcbiAgICB0ZXh0dXJlLmVuYWJsZU5lYXJlc3RTY2FsaW5nKCk7XG4gICAgdGV4dHVyZS5lbmFibGVXcmFwQ2xhbXAoKTtcblxuICAgIC8vbm93IGNyZWF0ZSB0aGUgZnJhbWVidWZmZXIgb2JqZWN0IGFuZCBhdHRhY2ggdGhlIHRleHR1cmUgdG8gaXQuXG4gICAgdmFyIGZibyA9IG5ldyBGcmFtZWJ1ZmZlcihnbCwgd2lkdGgsIGhlaWdodCk7XG4gICAgZmJvLmVuYWJsZVRleHR1cmUodGV4dHVyZSlcblxuICAgIHJldHVybiBmYm87XG59XG5cbm1vZHVsZS5leHBvcnRzID0gRnJhbWVidWZmZXI7XG5cbiIsIlxudmFyIGNvbXBpbGVQcm9ncmFtID0gcmVxdWlyZSgnLi9zaGFkZXIvY29tcGlsZVByb2dyYW0nKSxcblx0ZXh0cmFjdEF0dHJpYnV0ZXMgPSByZXF1aXJlKCcuL3NoYWRlci9leHRyYWN0QXR0cmlidXRlcycpLFxuXHRleHRyYWN0VW5pZm9ybXMgPSByZXF1aXJlKCcuL3NoYWRlci9leHRyYWN0VW5pZm9ybXMnKSxcblx0Z2VuZXJhdGVVbmlmb3JtQWNjZXNzT2JqZWN0ID0gcmVxdWlyZSgnLi9zaGFkZXIvZ2VuZXJhdGVVbmlmb3JtQWNjZXNzT2JqZWN0Jyk7XG5cbi8qKlxuICogSGVscGVyIGNsYXNzIHRvIGNyZWF0ZSBhIHdlYkdMIFNoYWRlclxuICpcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqIEBwYXJhbSBnbCB7V2ViR0xSZW5kZXJpbmdDb250ZXh0fVxuICovXG52YXIgU2hhZGVyID0gZnVuY3Rpb24oZ2wsIHZlcnRleFNyYywgZnJhZ21lbnRTcmMpXG57XG5cdHRoaXMuZ2wgPSBnbDtcblxuXHQvLyBGaXJzdCBjb21waWxlIHRoZSBwcm9ncmFtLi5cblx0dGhpcy5wcm9ncmFtID0gY29tcGlsZVByb2dyYW0oZ2wsIHZlcnRleFNyYywgZnJhZ21lbnRTcmMpO1xuXG5cdC8vIG5leHQgZXh0cmFjdCB0aGUgYXR0cmlidXRlc1xuXHR0aGlzLmF0dHJpYnV0ZXMgPSBleHRyYWN0QXR0cmlidXRlcyhnbCwgdGhpcy5wcm9ncmFtKTsgXG5cbiAgICB2YXIgdW5pZm9ybURhdGEgPSBleHRyYWN0VW5pZm9ybXMoZ2wsIHRoaXMucHJvZ3JhbSk7XG5cbiAgICB0aGlzLnVuaWZvcm1zID0gZ2VuZXJhdGVVbmlmb3JtQWNjZXNzT2JqZWN0KCBnbCwgdW5pZm9ybURhdGEgKTtcbn1cblxuU2hhZGVyLnByb3RvdHlwZS5iaW5kID0gZnVuY3Rpb24oKVxue1xuXHR0aGlzLmdsLnVzZVByb2dyYW0odGhpcy5wcm9ncmFtKTtcbn1cblxuU2hhZGVyLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24oKVxue1xuXHR2YXIgZ2wgPSB0aGlzLmdsO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IFNoYWRlcjtcblxuIiwiXG4vKipcbiAqIEhlbHBlciBjbGFzcyB0byBjcmVhdGUgYSB3ZWJHTCBUZXh0dXJlXG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIGdsIHtXZWJHTFJlbmRlcmluZ0NvbnRleHR9IGEgV2ViR0wgY29udGV4dFxuICogQHBhcmFtIHdpZHRoIHtudW1iZXJ9IHRoZSB3aWR0aCBvZiB0aGUgdGV4dHVyZSBcbiAqIEBwYXJhbSBoZWlnaHQge251bWJlcn0gdGhlIGhlaWdodCBvZiB0aGUgdGV4dHVyZSBcbiAqIEBwYXJhbSBmb3JtYXQge251bWJlcn0gdGhlIHBpeGVsIGZvcm1hdCBvZiB0aGUgdGV4dHVyZS4gZGVmYXVsdHMgdG8gZ2wuUkdCQVxuICogQHBhcmFtIHR5cGUge251bWJlcn0gdGhlIGdsIHR5cGUgb2YgdGhlIHRleHR1cmUuIGRlZmF1bHRzIHRvIGdsLlVOU0lHTkVEX0JZVEVcbiAqL1xudmFyIFRleHR1cmUgPSBmdW5jdGlvbihnbCwgd2lkdGgsIGhlaWdodCwgZm9ybWF0LCB0eXBlKVxue1xuXHR0aGlzLmdsID0gZ2w7XG5cblx0dGhpcy50ZXh0dXJlID0gZ2wuY3JlYXRlVGV4dHVyZSgpO1xuXG5cdC8vIHNvbWUgc2V0dGluZ3MuLlxuXHR0aGlzLm1pcG1hcCA9IGZhbHNlO1xuXG5cdHRoaXMucHJlbXVsdGlwbHlBbHBoYSA9IGZhbHNlO1xuXG5cdHRoaXMud2lkdGggPSB3aWR0aCB8fCAwO1xuXHR0aGlzLmhlaWdodCA9IGhlaWdodCB8fCAwO1xuXG5cdHRoaXMuZm9ybWF0ID0gZm9ybWF0IHx8IGdsLlJHQkE7XG5cdHRoaXMudHlwZSA9IHR5cGUgfHwgZ2wuVU5TSUdORURfQllURTtcblxuXG59XG5cbi8qKlxuICogQHBhcmFtIHtQSVhJLmdsQ29yZS5UZXh0dXJlfSBbdmFybmFtZV0gW2Rlc2NyaXB0aW9uXVxuICovXG5UZXh0dXJlLnByb3RvdHlwZS51cGxvYWQgPSBmdW5jdGlvbihzb3VyY2UpXG57XG5cdHRoaXMuYmluZCgpO1xuXG5cdHZhciBnbCA9IHRoaXMuZ2w7XG5cblx0dGhpcy53aWR0aCA9IHNvdXJjZS53aWR0aDtcblx0dGhpcy5oZWlnaHQgPSBzb3VyY2UuaGVpZ2h0O1xuXG5cdGdsLnBpeGVsU3RvcmVpKGdsLlVOUEFDS19QUkVNVUxUSVBMWV9BTFBIQV9XRUJHTCwgdGhpcy5wcmVtdWx0aXBseUFscGhhKTtcbiAgICBnbC50ZXhJbWFnZTJEKGdsLlRFWFRVUkVfMkQsIDAsIHRoaXMuZm9ybWF0LCB0aGlzLmZvcm1hdCwgdGhpcy50eXBlLCBzb3VyY2UpO1xufVxuXG52YXIgRkxPQVRJTkdfUE9JTlRfQVZBSUxBQkxFID0gZmFsc2U7XG5cblRleHR1cmUucHJvdG90eXBlLnVwbG9hZERhdGEgPSBmdW5jdGlvbihkYXRhLCB3aWR0aCwgaGVpZ2h0KVxue1xuXHR0aGlzLmJpbmQoKTtcblx0XG5cdHRoaXMud2lkdGggPSB3aWR0aCB8fCB0aGlzLndpZHRoO1xuXHR0aGlzLmhlaWdodCA9IGhlaWdodCB8fCB0aGlzLmhlaWdodDtcblxuXHRpZihkYXRhIGluc3RhbmNlb2YgRmxvYXQzMkFycmF5KVxuXHR7XG5cdFx0aWYoIUZMT0FUSU5HX1BPSU5UX0FWQUlMQUJMRSlcblx0XHR7XG5cdFx0XHR2YXIgZXh0ID0gZ2wuZ2V0RXh0ZW5zaW9uKFwiT0VTX3RleHR1cmVfZmxvYXRcIik7XG5cdFx0XHRcblx0XHRcdGlmKGV4dClcblx0XHRcdHtcblx0XHRcdFx0RkxPQVRJTkdfUE9JTlRfQVZBSUxBQkxFID0gdHJ1ZTtcblx0XHRcdH1cblx0XHRcdGVsc2Vcblx0XHRcdHtcblx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKCdmbG9hdGluZyBwb2ludCB0ZXh0dXJlcyBub3QgYXZhaWxhYmxlJyk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0dGhpcy50eXBlID0gZ2wuRkxPQVQ7XG5cdH1cblx0ZWxzZVxuXHR7XG5cdFx0Ly8gVE9ETyBzdXBwb3J0IGZvciBvdGhlciB0eXBlc1xuXHRcdHRoaXMudHlwZSA9IGdsLlVOU0lHTkVEX0JZVEU7XG5cdH1cblxuXHQvLyB3aGF0IHR5cGUgb2YgZGF0YT9cblx0Z2wucGl4ZWxTdG9yZWkoZ2wuVU5QQUNLX1BSRU1VTFRJUExZX0FMUEhBX1dFQkdMLCB0aGlzLnByZW11bHRpcGx5QWxwaGEpO1xuXHRnbC50ZXhJbWFnZTJEKGdsLlRFWFRVUkVfMkQsIDAsIHRoaXMuZm9ybWF0LCAgdGhpcy53aWR0aCwgdGhpcy5oZWlnaHQsIDAsIHRoaXMuZm9ybWF0LCB0aGlzLnR5cGUsIGRhdGEgfHwgbnVsbCk7XG5cbn1cblxuVGV4dHVyZS5wcm90b3R5cGUuYmluZCA9IGZ1bmN0aW9uKGxvY2F0aW9uKVxue1xuXHR2YXIgZ2wgPSB0aGlzLmdsO1xuXG5cdGlmKGxvY2F0aW9uICE9PSB1bmRlZmluZWQpXG5cdHtcblx0XHRnbC5hY3RpdmVUZXh0dXJlKGdsLlRFWFRVUkUwICsgbG9jYXRpb24pO1xuXHR9XG5cblx0Z2wuYmluZFRleHR1cmUoZ2wuVEVYVFVSRV8yRCwgdGhpcy50ZXh0dXJlKTtcbn1cblxuVGV4dHVyZS5wcm90b3R5cGUudW5iaW5kID0gZnVuY3Rpb24oKVxue1xuXHR2YXIgZ2wgPSB0aGlzLmdsO1xuXHRnbC5iaW5kVGV4dHVyZShnbC5URVhUVVJFXzJELCBudWxsKTtcbn1cblxuVGV4dHVyZS5wcm90b3R5cGUubWluRmlsdGVyID0gZnVuY3Rpb24oIGxpbmVhciApXG57XG5cdHZhciBnbCA9IHRoaXMuZ2w7XG5cblx0dGhpcy5iaW5kKCk7XG5cblx0aWYodGhpcy5taXBtYXApXG5cdHtcblx0XHRnbC50ZXhQYXJhbWV0ZXJpKGdsLlRFWFRVUkVfMkQsIGdsLlRFWFRVUkVfTUlOX0ZJTFRFUiwgbGluZWFyID8gZ2wuTElORUFSX01JUE1BUF9MSU5FQVIgOiBnbC5ORUFSRVNUX01JUE1BUF9ORUFSRVNUKTtcblx0fVxuXHRlbHNlXG5cdHtcblx0XHRnbC50ZXhQYXJhbWV0ZXJpKGdsLlRFWFRVUkVfMkQsIGdsLlRFWFRVUkVfTUlOX0ZJTFRFUiwgbGluZWFyID8gZ2wuTElORUFSIDogZ2wuTkVBUkVTVCk7XG5cdH1cdFxufVxuXG5UZXh0dXJlLnByb3RvdHlwZS5tYWdGaWx0ZXIgPSBmdW5jdGlvbiggbGluZWFyIClcbntcblx0dmFyIGdsID0gdGhpcy5nbDtcblxuXHR0aGlzLmJpbmQoKTtcblxuXHRnbC50ZXhQYXJhbWV0ZXJpKGdsLlRFWFRVUkVfMkQsIGdsLlRFWFRVUkVfTUFHX0ZJTFRFUiwgbGluZWFyID8gZ2wuTElORUFSIDogZ2wuTkVBUkVTVCk7XG59XG5cblRleHR1cmUucHJvdG90eXBlLmVuYWJsZU1pcG1hcCA9IGZ1bmN0aW9uKClcbntcblx0dGhpcy5iaW5kKCk7XG5cblx0dGhpcy5taXBtYXAgPSB0cnVlO1xuXHRnbC5nZW5lcmF0ZU1pcG1hcChnbC5URVhUVVJFXzJEKTtcbn1cblxuVGV4dHVyZS5wcm90b3R5cGUuZW5hYmxlTGluZWFyU2NhbGluZyA9IGZ1bmN0aW9uKClcbntcblx0dGhpcy5taW5GaWx0ZXIodHJ1ZSk7XG5cdHRoaXMubWFnRmlsdGVyKHRydWUpO1xufVxuXG5UZXh0dXJlLnByb3RvdHlwZS5lbmFibGVOZWFyZXN0U2NhbGluZyA9IGZ1bmN0aW9uKClcbntcblx0dGhpcy5taW5GaWx0ZXIoZmFsc2UpO1xuXHR0aGlzLm1hZ0ZpbHRlcihmYWxzZSk7XG59XG5cblRleHR1cmUucHJvdG90eXBlLmVuYWJsZVdyYXBDbGFtcCA9IGZ1bmN0aW9uKClcbntcblx0dmFyIGdsID0gdGhpcy5nbDtcblxuXHR0aGlzLmJpbmQoKTtcblxuXHRnbC50ZXhQYXJhbWV0ZXJpKGdsLlRFWFRVUkVfMkQsIGdsLlRFWFRVUkVfV1JBUF9TLCBnbC5DTEFNUF9UT19FREdFKTtcbiAgICBnbC50ZXhQYXJhbWV0ZXJpKGdsLlRFWFRVUkVfMkQsIGdsLlRFWFRVUkVfV1JBUF9ULCBnbC5DTEFNUF9UT19FREdFKTtcbn1cblxuVGV4dHVyZS5wcm90b3R5cGUuZW5hYmxlV3JhcFJlcGVhdCA9IGZ1bmN0aW9uKClcbntcblx0dmFyIGdsID0gdGhpcy5nbDtcblxuXHR0aGlzLmJpbmQoKTtcblx0XG5cdGdsLnRleFBhcmFtZXRlcmkoZ2wuVEVYVFVSRV8yRCwgZ2wuVEVYVFVSRV9XUkFQX1MsIGdsLlJFUEVBVCk7XG4gICAgZ2wudGV4UGFyYW1ldGVyaShnbC5URVhUVVJFXzJELCBnbC5URVhUVVJFX1dSQVBfVCwgZ2wuUkVQRUFUKTtcbn1cblxuVGV4dHVyZS5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uKClcbntcblx0dmFyIGdsID0gdGhpcy5nbDtcblx0Ly9UT0RPXG5cdGdsLmRlbGV0ZVRleHR1cmUodGhpcy50ZXh0dXJlKTtcbn1cblxuLy9UZXh0dXJlLlxuVGV4dHVyZS5mcm9tU291cmNlID0gZnVuY3Rpb24oZ2wsIHNvdXJjZSwgcHJlbXVsdGlwbHlBbHBoYSlcbntcblx0dmFyIHRleHR1cmUgPSBuZXcgVGV4dHVyZShnbCk7XG5cdHRleHR1cmUucHJlbXVsdGlwbHlBbHBoYSA9IHByZW11bHRpcGx5QWxwaGEgfHwgZmFsc2U7XG5cdHRleHR1cmUudXBsb2FkKHNvdXJjZSk7XG5cblx0cmV0dXJuIHRleHR1cmU7XG59XG5cblRleHR1cmUuZnJvbURhdGEgPSBmdW5jdGlvbihnbCwgZGF0YSwgd2lkdGgsIGhlaWdodClcbntcblx0Ly9jb25zb2xlLmxvZyhkYXRhLCB3aWR0aCwgaGVpZ2h0KTtcblx0dmFyIHRleHR1cmUgPSBuZXcgVGV4dHVyZShnbCk7XG5cdHRleHR1cmUudXBsb2FkRGF0YShkYXRhLCB3aWR0aCwgaGVpZ2h0KTtcblxuXHRyZXR1cm4gdGV4dHVyZTtcbn1cblxuXG5tb2R1bGUuZXhwb3J0cyA9IFRleHR1cmU7XG5cbiIsIlxuLyoqXG4gKiBHZW5lcmljIE1hc2sgU3RhY2sgZGF0YSBzdHJ1Y3R1cmVcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqL1xuXG4vLyBzdGF0ZSBvYmplY3QvL1xuXG5cbmZ1bmN0aW9uIFZlcnRleEFycmF5T2JqZWN0KGdsKVxue1xuXHRcblx0dGhpcy5uYXRpdmVWYW9FeHRlbnNpb24gPSAoXG4gICAgICBnbC5nZXRFeHRlbnNpb24oJ09FU192ZXJ0ZXhfYXJyYXlfb2JqZWN0JykgfHxcbiAgICAgIGdsLmdldEV4dGVuc2lvbignTU9aX09FU192ZXJ0ZXhfYXJyYXlfb2JqZWN0JykgfHxcbiAgICAgIGdsLmdldEV4dGVuc2lvbignV0VCS0lUX09FU192ZXJ0ZXhfYXJyYXlfb2JqZWN0JylcbiAgICApO1xuXG4vL1x0dGhpcy5uYXRpdmVWYW9FeHRlbnNpb24gPSBudWxsO1xuXG5cdGlmKHRoaXMubmF0aXZlVmFvRXh0ZW5zaW9uKVxuXHR7XG5cdFx0dGhpcy5uYXRpdmVWYW8gPSB0aGlzLm5hdGl2ZVZhb0V4dGVuc2lvbi5jcmVhdGVWZXJ0ZXhBcnJheU9FUygpOyAgXG5cdH1cblxuXHR0aGlzLmdsID0gZ2w7XG5cblx0dGhpcy5hdHRyaWJ1dGVzID0gW107XG5cblx0dGhpcy5pbmRleEJ1ZmZlciA9IG51bGw7XG5cblx0dGhpcy5kaXJ0eSA9IGZhbHNlO1xuXG5cdFxufVxuXG5WZXJ0ZXhBcnJheU9iamVjdC5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBWZXJ0ZXhBcnJheU9iamVjdDtcbm1vZHVsZS5leHBvcnRzID0gVmVydGV4QXJyYXlPYmplY3Q7XG5cblZlcnRleEFycmF5T2JqZWN0LnByb3RvdHlwZS5iaW5kID0gZnVuY3Rpb24oKVxue1xuXHRpZih0aGlzLm5hdGl2ZVZhbylcblx0e1xuXHRcdHRoaXMubmF0aXZlVmFvRXh0ZW5zaW9uLmJpbmRWZXJ0ZXhBcnJheU9FUyh0aGlzLm5hdGl2ZVZhbyk7ICBcblxuXHRcdGlmKHRoaXMuZGlydHkpXG5cdFx0e1xuXHRcdFx0dGhpcy5kaXJ0eSA9IGZhbHNlO1xuXHRcdFx0dGhpcy5hY3RpdmF0ZSgpO1xuXHRcdH1cblx0fVxuXHRlbHNlXG5cdHtcblx0XHR0aGlzLmFjdGl2YXRlKCk7XG5cdH1cbn1cblxuVmVydGV4QXJyYXlPYmplY3QucHJvdG90eXBlLnVuYmluZCA9IGZ1bmN0aW9uKClcbntcblx0aWYodGhpcy5uYXRpdmVWYW8pXG5cdHtcblx0XHR0aGlzLm5hdGl2ZVZhb0V4dGVuc2lvbi5iaW5kVmVydGV4QXJyYXlPRVMobnVsbCk7XG5cdH1cbn1cblxuVmVydGV4QXJyYXlPYmplY3QucHJvdG90eXBlLmFjdGl2YXRlID0gZnVuY3Rpb24oKVxue1xuXHR2YXIgZ2wgPSB0aGlzLmdsO1xuXG5cdGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5hdHRyaWJ1dGVzLmxlbmd0aDsgaSsrKSBcblx0e1xuXHRcdHZhciBhdHRyaWIgPSB0aGlzLmF0dHJpYnV0ZXNbaV07XG5cdFx0YXR0cmliLmJ1ZmZlci5iaW5kKCk7XHRcblxuXHRcdGF0dHJpYi5hdHRyaWJ1dGUucG9pbnRlcihhdHRyaWIudHlwZSwgYXR0cmliLm5vcm1hbGl6ZWQsIGF0dHJpYi5zdHJpZGUsIGF0dHJpYi5zdGFydCk7IFxuXHRcdFxuXHRcdGdsLmVuYWJsZVZlcnRleEF0dHJpYkFycmF5KGF0dHJpYi5hdHRyaWJ1dGUubG9jYXRpb24pO1xuXHR9O1xuXG5cdHRoaXMuaW5kZXhCdWZmZXIuYmluZCgpO1xufVxuXG5WZXJ0ZXhBcnJheU9iamVjdC5wcm90b3R5cGUuYWRkQXR0cmlidXRlID0gZnVuY3Rpb24oYnVmZmVyLCBhdHRyaWJ1dGUsIHR5cGUsIG5vcm1hbGl6ZWQsIHN0cmlkZSwgc3RhcnQpXG57XG4gICAgdGhpcy5hdHRyaWJ1dGVzLnB1c2goe1xuICAgIFx0YnVmZmVyOiBcdGJ1ZmZlcixcbiAgICBcdGF0dHJpYnV0ZTogXHRhdHRyaWJ1dGUsXG5cbiAgICBcdGxvY2F0aW9uOiBcdGF0dHJpYnV0ZS5sb2NhdGlvbixcblx0IFx0dHlwZTogXHRcdHR5cGUgfHwgdGhpcy5nbC5GTE9BVCxcblx0IFx0bm9ybWFsaXplZDogbm9ybWFsaXplZCB8fCBmYWxzZSxcblx0IFx0c3RyaWRlOiBcdHN0cmlkZSB8fCAwLFxuXHQgXHRzdGFydDogXHRcdHN0YXJ0IHx8IDBcblx0fSlcblxuXHR0aGlzLmRpcnR5ID0gdHJ1ZTtcbn1cblxuXG5WZXJ0ZXhBcnJheU9iamVjdC5wcm90b3R5cGUuYWRkSW5kZXggPSBmdW5jdGlvbihidWZmZXIsIG9wdGlvbnMpXG57XG4gICAgdGhpcy5pbmRleEJ1ZmZlciA9IGJ1ZmZlcjtcblxuICAgIHRoaXMuZGlydHkgPSB0cnVlO1xufVxuXG5WZXJ0ZXhBcnJheU9iamVjdC5wcm90b3R5cGUuZHJhdyA9IGZ1bmN0aW9uKHR5cGUsIHNpemUsIHN0YXJ0KVxue1xuXHR2YXIgZ2wgPSB0aGlzLmdsO1xuXHRnbC5kcmF3RWxlbWVudHModHlwZSwgc2l6ZSwgZ2wuVU5TSUdORURfU0hPUlQsIHN0YXJ0KTtcbn1cblxuIiwiXG4vKipcbiAqIEhlbHBlciBjbGFzcyB0byBjcmVhdGUgYSB3ZWJHTCBDb250ZXh0XG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIGdsIHtXZWJHTFJlbmRlcmluZ0NvbnRleHR9XG4gKi9cblxudmFyIENPTlRFWFRfVUlEID0gMDtcblxudmFyIGNyZWF0ZUNvbnRleHQgPSBmdW5jdGlvbihjYW52YXMsIG9wdGlvbnMpXG57XG4gICAgZ2wgPSBjYW52YXMuZ2V0Q29udGV4dCgnd2ViZ2wnLCBvcHRpb25zKSB8fCBcbiAgICBcdCBjYW52YXMuZ2V0Q29udGV4dCgnZXhwZXJpbWVudGFsLXdlYmdsJywgb3B0aW9ucyk7XG5cbiAgICBpZiAoIWdsKVxuICAgIHtcbiAgICAgICAgLy8gZmFpbCwgbm90IGFibGUgdG8gZ2V0IGEgY29udGV4dFxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RoaXMgYnJvd3NlciBkb2VzIG5vdCBzdXBwb3J0IHdlYkdMLiBUcnkgdXNpbmcgdGhlIGNhbnZhcyByZW5kZXJlcicpO1xuICAgIH1cblxuICAgIC8vIG1pZ2h0IHdhbnQgdG8gcGhhc2UgdGhpcyBvdXQ/XG4gICAgZ2wuaWQgPSBDT05URVhUX1VJRCsrO1xuXG4gICAgcmV0dXJuIGdsO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGNyZWF0ZUNvbnRleHQ7XG5cbiIsIi8qKlxuICogR2VuZXJpYyBNYXNrIFN0YWNrIGRhdGEgc3RydWN0dXJlXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKi9cblxudmFyIEdMX01BUCA9IHt9O1xuXG5cbnZhciBzZXRWZXJ0ZXhBdHRyaWJBcnJheXMgPSBmdW5jdGlvbiAoZ2wsIGF0dHJpYnMpXG57XHRcbiAgIC8vIGNvbnNvbGUubG9nKGdsLmlkKVxuICAgIHZhciBkYXRhID0gR0xfTUFQW2dsLmlkXTtcblxuICAgIGlmKCFkYXRhKVxuICAgIHtcblx0ICAgdmFyIG1heEF0dHJpYnMgPSBnbC5nZXRQYXJhbWV0ZXIoZ2wuTUFYX1ZFUlRFWF9BVFRSSUJTKTtcblx0XHRkYXRhID0gR0xfTUFQW2dsLmlkXSA9IHt0ZW1wQXR0cmliU3RhdGU6bmV3IEFycmF5KG1heEF0dHJpYnMpXG5cdFx0XHRcdCBcdCBcdFx0ICAgLGF0dHJpYlN0YXRlOm5ldyBBcnJheShtYXhBdHRyaWJzKX07XG5cdH1cblx0XG4gICAgdmFyIGksXG4gICAgXHR0ZW1wQXR0cmliU3RhdGUgPSBkYXRhLnRlbXBBdHRyaWJTdGF0ZSxcbiAgICBcdGF0dHJpYlN0YXRlID0gZGF0YS5hdHRyaWJTdGF0ZTtcblxuICAgIGZvciAoaSA9IDA7IGkgPCB0ZW1wQXR0cmliU3RhdGUubGVuZ3RoOyBpKyspXG4gICAge1xuICAgICAgICB0ZW1wQXR0cmliU3RhdGVbaV0gPSBmYWxzZTtcbiAgICB9XG5cbiAgICAvLyBzZXQgdGhlIG5ldyBhdHRyaWJzXG4gICAgZm9yIChpIGluIGF0dHJpYnMpXG4gICAge1xuICAgICAgICB0ZW1wQXR0cmliU3RhdGVbYXR0cmlic1tpXS5sb2NhdGlvbl0gPSB0cnVlO1xuICAgIH1cblxuICAgIGZvciAoaSA9IDE7IGkgPCBhdHRyaWJTdGF0ZS5sZW5ndGg7IGkrKylcbiAgICB7XG4gICAgICAgIGlmIChhdHRyaWJTdGF0ZVtpXSAhPT0gdGVtcEF0dHJpYlN0YXRlW2ldKVxuICAgICAgICB7XG4gICAgICAgICAgICBhdHRyaWJTdGF0ZVtpXSA9IHRlbXBBdHRyaWJTdGF0ZVtpXTtcblxuICAgICAgICAgICAgaWYgKGRhdGEuYXR0cmliU3RhdGVbaV0pXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgZ2wuZW5hYmxlVmVydGV4QXR0cmliQXJyYXkoaSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgZ2wuZGlzYWJsZVZlcnRleEF0dHJpYkFycmF5KGkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxufTtcblxubW9kdWxlLmV4cG9ydHMgPSBzZXRWZXJ0ZXhBdHRyaWJBcnJheXM7IiwiXG5cblxuXG5jb21waWxlUHJvZ3JhbSA9IGZ1bmN0aW9uKGdsLCB2ZXJ0ZXhTcmMsIGZyYWdtZW50U3JjKVxue1xuICAgIHZhciBnbFZlcnRTaGFkZXIgPSBjb21waWxlU2hhZGVyKGdsLCBnbC5WRVJURVhfU0hBREVSLCB2ZXJ0ZXhTcmMpO1xuICAgIHZhciBnbEZyYWdTaGFkZXIgPSBjb21waWxlU2hhZGVyKGdsLCBnbC5GUkFHTUVOVF9TSEFERVIsIGZyYWdtZW50U3JjKTtcblxuICAgIHZhciBwcm9ncmFtID0gZ2wuY3JlYXRlUHJvZ3JhbSgpO1xuXG4gICAgZ2wuYXR0YWNoU2hhZGVyKHByb2dyYW0sIGdsVmVydFNoYWRlcik7XG4gICAgZ2wuYXR0YWNoU2hhZGVyKHByb2dyYW0sIGdsRnJhZ1NoYWRlcik7XG4gICAgZ2wubGlua1Byb2dyYW0ocHJvZ3JhbSk7XG5cbiAgICAvLyBpZiBsaW5raW5nIGZhaWxzLCB0aGVuIGxvZyBhbmQgY2xlYW51cFxuICAgIGlmICghZ2wuZ2V0UHJvZ3JhbVBhcmFtZXRlcihwcm9ncmFtLCBnbC5MSU5LX1NUQVRVUykpXG4gICAge1xuICAgICAgICBjb25zb2xlLmVycm9yKCdQaXhpLmpzIEVycm9yOiBDb3VsZCBub3QgaW5pdGlhbGl6ZSBzaGFkZXIuJyk7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ2dsLlZBTElEQVRFX1NUQVRVUycsIGdsLmdldFByb2dyYW1QYXJhbWV0ZXIocHJvZ3JhbSwgZ2wuVkFMSURBVEVfU1RBVFVTKSk7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ2dsLmdldEVycm9yKCknLCBnbC5nZXRFcnJvcigpKTtcblxuICAgICAgICAvLyBpZiB0aGVyZSBpcyBhIHByb2dyYW0gaW5mbyBsb2csIGxvZyBpdFxuICAgICAgICBpZiAoZ2wuZ2V0UHJvZ3JhbUluZm9Mb2cocHJvZ3JhbSkgIT09ICcnKVxuICAgICAgICB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ1BpeGkuanMgV2FybmluZzogZ2wuZ2V0UHJvZ3JhbUluZm9Mb2coKScsIGdsLmdldFByb2dyYW1JbmZvTG9nKHByb2dyYW0pKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGdsLmRlbGV0ZVByb2dyYW0ocHJvZ3JhbSk7XG4gICAgICAgIHByb2dyYW0gPSBudWxsO1xuICAgIH1cblxuICAgIC8vIGNsZWFuIHVwIHNvbWUgc2hhZGVyc1xuICAgIGdsLmRlbGV0ZVNoYWRlcihnbFZlcnRTaGFkZXIpO1xuICAgIGdsLmRlbGV0ZVNoYWRlcihnbEZyYWdTaGFkZXIpO1xuXG4gICAgcmV0dXJuIHByb2dyYW07XG59XG5cbnZhciBjb21waWxlU2hhZGVyID0gZnVuY3Rpb24gKGdsLCB0eXBlLCBzcmMpXG57XG4gICAgdmFyIHNoYWRlciA9IGdsLmNyZWF0ZVNoYWRlcih0eXBlKTtcblxuICAgIGdsLnNoYWRlclNvdXJjZShzaGFkZXIsIHNyYyk7XG4gICAgZ2wuY29tcGlsZVNoYWRlcihzaGFkZXIpO1xuXG4gICAgaWYgKCFnbC5nZXRTaGFkZXJQYXJhbWV0ZXIoc2hhZGVyLCBnbC5DT01QSUxFX1NUQVRVUykpXG4gICAge1xuICAgICAgICBjb25zb2xlLmxvZyhnbC5nZXRTaGFkZXJJbmZvTG9nKHNoYWRlcikpO1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICByZXR1cm4gc2hhZGVyO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBjb21waWxlUHJvZ3JhbTtcblxuIiwiXG5cbnZhciBkZWZhdWx0VmFsdWUgPSBmdW5jdGlvbih0eXBlLCBzaXplKSBcbntcbiAgICBzd2l0Y2ggKHR5cGUpXG4gICAge1xuICAgICAgICBjYXNlICdmbG9hdCc6XG4gICAgICAgICAgICByZXR1cm4gMDtcblxuICAgICAgICBjYXNlICd2ZWMyJzogXG4gICAgICAgICAgICByZXR1cm4gbmV3IEZsb2F0MzJBcnJheSgyICogc2l6ZSk7XG5cbiAgICAgICAgY2FzZSAndmVjMyc6XG4gICAgICAgICAgICByZXR1cm4gbmV3IEZsb2F0MzJBcnJheSgzICogc2l6ZSk7XG5cbiAgICAgICAgY2FzZSAndmVjNCc6ICAgICBcbiAgICAgICAgICAgIHJldHVybiBuZXcgRmxvYXQzMkFycmF5KDQgKiBzaXplKTtcbiAgICAgICAgICAgIFxuICAgICAgICBjYXNlICdpbnQnOlxuICAgICAgICBjYXNlICdzYW1wbGVyMkQnOlxuICAgICAgICAgICAgcmV0dXJuIDA7XG5cbiAgICAgICAgY2FzZSAnaXZlYzInOiAgIFxuICAgICAgICAgICAgcmV0dXJuIG5ldyBJbnQzMkFycmF5KDIgKiBzaXplKTtcblxuICAgICAgICBjYXNlICdpdmVjMyc6XG4gICAgICAgICAgICByZXR1cm4gbmV3IEludDMyQXJyYXkoMyAqIHNpemUpO1xuXG4gICAgICAgIGNhc2UgJ2l2ZWM0JzogXG4gICAgICAgICAgICByZXR1cm4gbmV3IEludDMyQXJyYXkoNCAqIHNpemUpO1xuXG4gICAgICAgIGNhc2UgJ2Jvb2wnOiAgICAgXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG5cbiAgICAgICAgY2FzZSAnYnZlYzInOlxuXG4gICAgICAgICAgICByZXR1cm4gYm9vbGVhbkFycmF5KCAyICogc2l6ZSk7XG5cbiAgICAgICAgY2FzZSAnYnZlYzMnOlxuICAgICAgICAgICAgcmV0dXJuIGJvb2xlYW5BcnJheSgzICogc2l6ZSk7XG5cbiAgICAgICAgY2FzZSAnYnZlYzQnOlxuICAgICAgICAgICAgcmV0dXJuIGJvb2xlYW5BcnJheSg0ICogc2l6ZSk7XG5cbiAgICAgICAgY2FzZSAnbWF0Mic6XG4gICAgICAgICAgICByZXR1cm4gbmV3IEZsb2F0MzJBcnJheShbMSwgMFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLDAsIDFdKTtcblxuICAgICAgICBjYXNlICdtYXQzJzogXG4gICAgICAgICAgICByZXR1cm4gbmV3IEZsb2F0MzJBcnJheShbMSwgMCwgMFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLDAsIDEsIDBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwwLCAwLCAxXSk7XG5cbiAgICAgICAgY2FzZSAnbWF0NCc6XG4gICAgICAgICAgICByZXR1cm4gbmV3IEZsb2F0MzJBcnJheShbMSwgMCwgMCwgMFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLDAsIDEsIDAsIDBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwwLCAwLCAxLCAwXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsMCwgMCwgMCwgMV0pO1xuICAgIH1cbn1cblxudmFyIGJvb2xlYW5BcnJheSA9IGZ1bmN0aW9uKHNpemUpXG57XG4gICAgdmFyIGFycmF5ID0gbmV3IEFycmF5KHNpemUpO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcnJheS5sZW5ndGg7IGkrKykgXG4gICAge1xuICAgICAgICBhcnJheVtpXSA9IGZhbHNlO1xuICAgIH07XG5cbiAgICByZXR1cm4gYXJyYXk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZGVmYXVsdFZhbHVlO1xuIiwiXG52YXIgbWFwVHlwZSA9IHJlcXVpcmUoJy4vbWFwVHlwZScpO1xudmFyIG1hcFNpemUgPSByZXF1aXJlKCcuL21hcFNpemUnKTtcblxudmFyIGV4dHJhY3RBdHRyaWJ1dGVzID0gZnVuY3Rpb24oZ2wsIHByb2dyYW0pXG57XG4gICAgdmFyIGF0dHJpYnV0ZXMgPSB7fTtcblxuICAgIHZhciB0b3RhbEF0dHJpYnV0ZXMgPSBnbC5nZXRQcm9ncmFtUGFyYW1ldGVyKHByb2dyYW0sIGdsLkFDVElWRV9BVFRSSUJVVEVTKVxuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0b3RhbEF0dHJpYnV0ZXM7IGkrKykgXG4gICAge1xuICAgICAgICB2YXIgYXR0cmliRGF0YSA9IGdsLmdldEFjdGl2ZUF0dHJpYihwcm9ncmFtLCBpKTtcbiAgICAgICAgdmFyIHR5cGUgPSBtYXBUeXBlKGdsLCBhdHRyaWJEYXRhLnR5cGUpO1xuXG4gICAgICAgIGF0dHJpYnV0ZXNbYXR0cmliRGF0YS5uYW1lXSA9IHtcbiAgICAgICAgICAgIHR5cGU6dHlwZSxcbiAgICAgICAgICAgIHNpemU6bWFwU2l6ZSh0eXBlKSxcbiAgICAgICAgICAgIGxvY2F0aW9uOmdsLmdldEF0dHJpYkxvY2F0aW9uKHByb2dyYW0sIGF0dHJpYkRhdGEubmFtZSksXG4gICAgICAgICAgICAvL1RPRE8gLSBtYWtlIGFuIGF0dHJpYnV0ZSBvYmplY3RcbiAgICAgICAgICAgIHBvaW50ZXI6ZnVuY3Rpb24odHlwZSwgbm9ybWFsaXplZCwgc3RyaWRlLCBzdGFydCl7XG5cbiAgICAgICAgICAgICAvLyAgIGNvbnNvbGUubG9nKHRoaXMubG9jYXRpb24pXG4gICAgICAgICAgICAgICAgZ2wudmVydGV4QXR0cmliUG9pbnRlcih0aGlzLmxvY2F0aW9uLHRoaXMuc2l6ZSwgdHlwZSB8fCBnbC5GTE9BVCwgbm9ybWFsaXplZCB8fCBmYWxzZSwgc3RyaWRlIHx8IDAsIHN0YXJ0IHx8IDApOyBcblxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfTtcblxuICAgIHJldHVybiBhdHRyaWJ1dGVzOyAgXG59XG5cbm1vZHVsZS5leHBvcnRzID0gZXh0cmFjdEF0dHJpYnV0ZXM7XG5cbiIsInZhciBtYXBUeXBlID0gcmVxdWlyZSgnLi9tYXBUeXBlJyk7XG52YXIgZGVmYXVsdFZhbHVlID0gcmVxdWlyZSgnLi9kZWZhdWx0VmFsdWUnKTtcblxuXG52YXIgZXh0cmFjdFVuaWZvcm1zID0gZnVuY3Rpb24oZ2wsIHByb2dyYW0pXG57XG5cdHZhciB1bmlmb3JtcyA9IHt9O1xuXHRcbiAgICB2YXIgdG90YWxVbmlmb3JtcyA9IGdsLmdldFByb2dyYW1QYXJhbWV0ZXIocHJvZ3JhbSwgZ2wuQUNUSVZFX1VOSUZPUk1TKVxuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0b3RhbFVuaWZvcm1zOyBpKyspIFxuICAgIHtcbiAgICBcdHZhciB1bmlmb3JtRGF0YSA9IGdsLmdldEFjdGl2ZVVuaWZvcm0ocHJvZ3JhbSwgaSk7XG4gICAgXHR2YXIgbmFtZSA9IHVuaWZvcm1EYXRhLm5hbWUucmVwbGFjZSgvXFxbLio/XFxdLywgXCJcIik7XG4gICAgICAgIHZhciB0eXBlID0gbWFwVHlwZShnbCwgdW5pZm9ybURhdGEudHlwZSApO1xuXG4gICAgXHR1bmlmb3Jtc1tuYW1lXSA9IHtcbiAgICBcdFx0dHlwZTp0eXBlLFxuICAgIFx0XHRzaXplOnVuaWZvcm1EYXRhLnNpemUsXG4gICAgXHRcdGxvY2F0aW9uOmdsLmdldFVuaWZvcm1Mb2NhdGlvbihwcm9ncmFtLCBuYW1lKSxcbiAgICBcdFx0dmFsdWU6ZGVmYXVsdFZhbHVlKHR5cGUsIHVuaWZvcm1EYXRhLnNpemUpXG4gICAgXHR9XG4gICAgfTtcblx0XG5cdHJldHVybiB1bmlmb3JtcztcdFxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGV4dHJhY3RVbmlmb3JtcztcblxuIiwiXG52YXIgZ2VuZXJhdGVVbmlmb3JtQWNjZXNzT2JqZWN0ID0gZnVuY3Rpb24oZ2wsIHVuaWZvcm1EYXRhKVxue1xuICAgIC8vIHRoaXMgaXMgdGhlIG9iamVjdCB3ZSB3aWxsIGJlIHNlbmRpbmcgYmFjay5cbiAgICAvLyBhbiBvYmplY3QgaGllcmFjaHkgd2lsbCBiZSBjcmVhdGVkIGZvciBzdHJ1Y3RzXG4gICAgdmFyIHVuaWZvcm1zID0ge2RhdGE6e319O1xuXG4gICAgdW5pZm9ybXMuZ2wgPSBnbDtcbiAgICBcbiAgICB2YXIgdW5pZm9ybUtleXM9IE9iamVjdC5rZXlzKHVuaWZvcm1EYXRhKTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdW5pZm9ybUtleXMubGVuZ3RoOyBpKyspIFxuICAgIHtcbiAgICAgICAgdmFyIGZ1bGxOYW1lID0gdW5pZm9ybUtleXNbaV1cblxuICAgICAgICB2YXIgbmFtZVRva2VucyA9IGZ1bGxOYW1lLnNwbGl0KCcuJyk7XG4gICAgICAgIHZhciBuYW1lID0gbmFtZVRva2Vuc1tuYW1lVG9rZW5zLmxlbmd0aCAtIDFdO1xuXG4gICAgICAgIHZhciB1bmlmb3JtR3JvdXAgPSBnZXRVbmlmb3JtR3JvdXAobmFtZVRva2VucywgdW5pZm9ybXMpO1xuXG4gICAgICAgIHZhciB1bmlmb3JtID0gIHVuaWZvcm1EYXRhW2Z1bGxOYW1lXTtcbiAgICAgICAgdW5pZm9ybUdyb3VwLmRhdGFbbmFtZV0gPSB1bmlmb3JtO1xuXG4gICAgICAgIHVuaWZvcm1Hcm91cC5nbCA9IGdsO1xuXG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh1bmlmb3JtR3JvdXAsIG5hbWUsIHtcbiAgICAgICAgICAgIGdldDogZ2VuZXJhdGVHZXR0ZXIobmFtZSksXG4gICAgICAgICAgICBzZXQ6IGdlbmVyYXRlU2V0dGVyKG5hbWUsIHVuaWZvcm0pXG4gICAgICAgIH0pXG4gICAgfTtcblxuICAgIHJldHVybiB1bmlmb3Jtcztcbn1cblxudmFyIGdlbmVyYXRlR2V0dGVyID0gZnVuY3Rpb24obmFtZSlcbntcblx0dmFyIHRlbXBsYXRlID0gZ2V0dGVyVGVtcGxhdGUucmVwbGFjZSgnJSUnLCBuYW1lKTtcblx0cmV0dXJuIG5ldyBGdW5jdGlvbih0ZW1wbGF0ZSk7XG59XG5cbnZhciBnZW5lcmF0ZVNldHRlciA9IGZ1bmN0aW9uKG5hbWUsIHVuaWZvcm0pXG57XG4gICAgdmFyIHRlbXBsYXRlID0gc2V0dGVyVGVtcGxhdGUucmVwbGFjZSgvJSUvZywgbmFtZSk7XG4gICAgdmFyIHNldFRlbXBsYXRlXG4gICAgXG4gICAgaWYodW5pZm9ybS5zaXplID09PSAxKVxuICAgIHtcbiAgICAgICAgc2V0VGVtcGxhdGUgPSBHTFNMX1RPX1NJTkdMRV9TRVRURVJTW3VuaWZvcm0udHlwZV07XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHNldFRlbXBsYXRlID0gR0xTTF9UT19BUlJBWV9TRVRURVJTW3VuaWZvcm0udHlwZV07XG4gICAgfVxuXG4gICAgaWYoc2V0VGVtcGxhdGUpXG4gICAge1xuICAgICAgICB0ZW1wbGF0ZSArPSBcIlxcbnRoaXMuZ2wuXCIgKyBzZXRUZW1wbGF0ZSArIFwiO1wiO1xuICAgIH1cblxuICBcdHJldHVybiBuZXcgRnVuY3Rpb24oJ3ZhbHVlJywgdGVtcGxhdGUpO1xufVxuXG52YXIgZ2V0VW5pZm9ybUdyb3VwID0gZnVuY3Rpb24obmFtZVRva2VucywgdW5pZm9ybSlcbntcbiAgICB2YXIgY3VyID0gdW5pZm9ybTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbmFtZVRva2Vucy5sZW5ndGggLSAxOyBpKyspIFxuICAgIHtcbiAgICAgICAgdmFyIG8gPSBjdXJbbmFtZVRva2Vuc1tpXV0gfHwge2RhdGE6e319O1xuICAgICAgICBjdXJbbmFtZVRva2Vuc1tpXV0gPSBvO1xuICAgICAgICBjdXIgPSBvO1xuICAgIH07XG5cbiAgICByZXR1cm4gY3VyXG59XG5cbnZhciBnZXR0ZXJUZW1wbGF0ZSA9IFtcbiAgICAncmV0dXJuIHRoaXMuZGF0YS4lJS52YWx1ZTsnLFxuXS5qb2luKCdcXG4nKTtcblxudmFyIHNldHRlclRlbXBsYXRlID0gW1xuICAgICd0aGlzLmRhdGEuJSUudmFsdWUgPSB2YWx1ZTsnLFxuICAgICd2YXIgbG9jYXRpb24gPSB0aGlzLmRhdGEuJSUubG9jYXRpb247J1xuXS5qb2luKCdcXG4nKTtcblxuXG52YXIgR0xTTF9UT19TSU5HTEVfU0VUVEVSUyA9IHtcblxuICAgICdmbG9hdCc6ICAgICd1bmlmb3JtMWYobG9jYXRpb24sIHZhbHVlKScsXG5cbiAgICAndmVjMic6ICAgICAndW5pZm9ybTJmKGxvY2F0aW9uLCB2YWx1ZVswXSwgdmFsdWVbMV0pJyxcbiAgICAndmVjMyc6ICAgICAndW5pZm9ybTNmKGxvY2F0aW9uLCB2YWx1ZVswXSwgdmFsdWVbMV0sIHZhbHVlWzJdKScsXG4gICAgJ3ZlYzQnOiAgICAgJ3VuaWZvcm00Zihsb2NhdGlvbiwgdmFsdWVbMF0sIHZhbHVlWzFdLCB2YWx1ZVsyXSwgdmFsdWVbM10pJyxcbiAgICBcdFxuICAgICdpbnQnOiAgICAgICd1bmlmb3JtMWkobG9jYXRpb24sIHZhbHVlKScsXG4gICAgJ2l2ZWMyJzogICAgJ3VuaWZvcm0yaShsb2NhdGlvbiwgdmFsdWVbMF0sIHZhbHVlWzFdKScsXG4gICAgJ2l2ZWMzJzogICAgJ3VuaWZvcm0zaShsb2NhdGlvbiwgdmFsdWVbMF0sIHZhbHVlWzFdLCB2YWx1ZVsyXSknLFxuICAgICdpdmVjNCc6ICAgICd1bmlmb3JtNGkobG9jYXRpb24sIHZhbHVlWzBdLCB2YWx1ZVsxXSwgdmFsdWVbMl0sIHZhbHVlWzNdKScsXG5cbiAgICAnYm9vbCc6ICAgICAndW5pZm9ybTFpKGxvY2F0aW9uLCB2YWx1ZSknLFxuICAgICdidmVjMic6ICAgICd1bmlmb3JtMmkobG9jYXRpb24sIHZhbHVlWzBdLCB2YWx1ZVsxXSknLFxuICAgICdidmVjMyc6ICAgICd1bmlmb3JtM2kobG9jYXRpb24sIHZhbHVlWzBdLCB2YWx1ZVsxXSwgdmFsdWVbMl0pJyxcbiAgICAnYnZlYzQnOiAgICAndW5pZm9ybTRpKGxvY2F0aW9uLCB2YWx1ZVswXSwgdmFsdWVbMV0sIHZhbHVlWzJdLCB2YWx1ZVszXSknLFxuXG4gICAgJ21hdDInOiAgICAgJ3VuaWZvcm1NYXRyaXgyZnYobG9jYXRpb24sIGZhbHNlLCB2YWx1ZSknLFxuICAgICdtYXQzJzogICAgICd1bmlmb3JtTWF0cml4M2Z2KGxvY2F0aW9uLCBmYWxzZSwgdmFsdWUpJyxcbiAgICAnbWF0NCc6ICAgICAndW5pZm9ybU1hdHJpeDRmdihsb2NhdGlvbiwgZmFsc2UsIHZhbHVlKScsXG5cbiAgICAnc2FtcGxlcjJEJzondW5pZm9ybTFpKGxvY2F0aW9uLCB2YWx1ZSknXG59XG5cbnZhciBHTFNMX1RPX0FSUkFZX1NFVFRFUlMgPSB7XG5cbiAgICAnZmxvYXQnOiAgICAndW5pZm9ybTFmdihsb2NhdGlvbiwgdmFsdWUpJyxcblxuICAgICd2ZWMyJzogICAgICd1bmlmb3JtMmZ2KGxvY2F0aW9uLCB2YWx1ZSknLFxuICAgICd2ZWMzJzogICAgICd1bmlmb3JtM2Z2KGxvY2F0aW9uLCB2YWx1ZSknLFxuICAgICd2ZWM0JzogICAgICd1bmlmb3JtNGZ2KGxvY2F0aW9uLCB2YWx1ZSknLFxuICAgIFx0XG4gICAgJ2ludCc6ICAgICAgJ3VuaWZvcm0xaXYobG9jYXRpb24sIHZhbHVlKScsXG4gICAgJ2l2ZWMyJzogICAgJ3VuaWZvcm0yaXYobG9jYXRpb24sIHZhbHVlKScsXG4gICAgJ2l2ZWMzJzogICAgJ3VuaWZvcm0zaXYobG9jYXRpb24sIHZhbHVlKScsXG4gICAgJ2l2ZWM0JzogICAgJ3VuaWZvcm00aXYobG9jYXRpb24sIHZhbHVlKScsXG5cbiAgICAnYm9vbCc6ICAgICAndW5pZm9ybTFpdihsb2NhdGlvbiwgdmFsdWUpJyxcbiAgICAnYnZlYzInOiAgICAndW5pZm9ybTJpdihsb2NhdGlvbiwgdmFsdWUpJyxcbiAgICAnYnZlYzMnOiAgICAndW5pZm9ybTNpdihsb2NhdGlvbiwgdmFsdWUpJyxcbiAgICAnYnZlYzQnOiAgICAndW5pZm9ybTRpdihsb2NhdGlvbiwgdmFsdWUpJyxcbiAgIFxuICAgICdzYW1wbGVyMkQnOid1bmlmb3JtMWl2KGxvY2F0aW9uLCB2YWx1ZSknXG59XG5cbm1vZHVsZS5leHBvcnRzID0gZ2VuZXJhdGVVbmlmb3JtQWNjZXNzT2JqZWN0O1xuXG4iLCJcblxudmFyIG1hcFNpemUgPSBmdW5jdGlvbih0eXBlKSBcbnsgXG4gICAgcmV0dXJuIEdMU0xfVE9fU0laRVt0eXBlXTtcbn1cblxuXG52YXIgR0xTTF9UT19TSVpFID0ge1xuICAgICdmbG9hdCc6ICAgIDEsXG4gICAgJ3ZlYzInOiAgICAgMixcbiAgICAndmVjMyc6ICAgICAzLFxuICAgICd2ZWM0JzogICAgIDQsXG5cbiAgICAnaW50JzogICAgICAxLFxuICAgICdpdmVjMic6ICAgIDIsXG4gICAgJ2l2ZWMzJzogICAgMyxcbiAgICAnaXZlYzQnOiAgICA0LFxuXG4gICAgJ2Jvb2wnOiAgICAgMSxcbiAgICAnYnZlYzInOiAgICAyLFxuICAgICdidmVjMyc6ICAgIDMsXG4gICAgJ2J2ZWM0JzogICAgNCxcblxuICAgICdtYXQyJzogICAgIDQsXG4gICAgJ21hdDMnOiAgICAgOSxcbiAgICAnbWF0NCc6ICAgICAxNixcblxuICAgICdzYW1wbGVyMkQnOiAgMVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IG1hcFNpemU7XG4iLCJcblxudmFyIG1hcFNpemUgPSBmdW5jdGlvbihnbCwgdHlwZSkgXG57XG4gICAgaWYoIUdMX1RBQkxFKSBcbiAgICB7XG4gICAgICAgIHZhciB0eXBlTmFtZXMgPSBPYmplY3Qua2V5cyhHTF9UT19HTFNMX1RZUEVTKTtcblxuICAgICAgICBHTF9UQUJMRSA9IHt9O1xuXG4gICAgICAgIGZvcih2YXIgaSA9IDA7IGkgPCB0eXBlTmFtZXMubGVuZ3RoOyArK2kpIFxuICAgICAgICB7XG4gICAgICAgICAgICB2YXIgdG4gPSB0eXBlTmFtZXNbaV07XG4gICAgICAgICAgICBHTF9UQUJMRVsgZ2xbdG5dIF0gPSBHTF9UT19HTFNMX1RZUEVTW3RuXTtcbiAgICAgICAgfVxuICAgIH1cblxuICByZXR1cm4gR0xfVEFCTEVbdHlwZV07XG59XG5cbnZhciBHTF9UQUJMRSA9IG51bGw7XG5cbnZhciBHTF9UT19HTFNMX1RZUEVTID0ge1xuICAnRkxPQVQnOiAgICAgICAnZmxvYXQnLFxuICAnRkxPQVRfVkVDMic6ICAndmVjMicsXG4gICdGTE9BVF9WRUMzJzogICd2ZWMzJyxcbiAgJ0ZMT0FUX1ZFQzQnOiAgJ3ZlYzQnLFxuXG4gICdJTlQnOiAgICAgICAgICdpbnQnLFxuICAnSU5UX1ZFQzInOiAgICAnaXZlYzInLFxuICAnSU5UX1ZFQzMnOiAgICAnaXZlYzMnLFxuICAnSU5UX1ZFQzQnOiAgICAnaXZlYzQnLFxuICBcbiAgJ0JPT0wnOiAgICAgICAgJ2Jvb2wnLFxuICAnQk9PTF9WRUMyJzogICAnYnZlYzInLFxuICAnQk9PTF9WRUMzJzogICAnYnZlYzMnLFxuICAnQk9PTF9WRUM0JzogICAnYnZlYzQnLFxuICBcbiAgJ0ZMT0FUX01BVDInOiAgJ21hdDInLFxuICAnRkxPQVRfTUFUMyc6ICAnbWF0MycsXG4gICdGTE9BVF9NQVQ0JzogICdtYXQ0JyxcbiAgXG4gICdTQU1QTEVSXzJEJzogICdzYW1wbGVyMkQnICBcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBtYXBTaXplO1xuIiwiLyohXG4gKiBhc3luY1xuICogaHR0cHM6Ly9naXRodWIuY29tL2Nhb2xhbi9hc3luY1xuICpcbiAqIENvcHlyaWdodCAyMDEwLTIwMTQgQ2FvbGFuIE1jTWFob25cbiAqIFJlbGVhc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZVxuICovXG4oZnVuY3Rpb24gKCkge1xuXG4gICAgdmFyIGFzeW5jID0ge307XG4gICAgZnVuY3Rpb24gbm9vcCgpIHt9XG4gICAgZnVuY3Rpb24gaWRlbnRpdHkodikge1xuICAgICAgICByZXR1cm4gdjtcbiAgICB9XG4gICAgZnVuY3Rpb24gdG9Cb29sKHYpIHtcbiAgICAgICAgcmV0dXJuICEhdjtcbiAgICB9XG4gICAgZnVuY3Rpb24gbm90SWQodikge1xuICAgICAgICByZXR1cm4gIXY7XG4gICAgfVxuXG4gICAgLy8gZ2xvYmFsIG9uIHRoZSBzZXJ2ZXIsIHdpbmRvdyBpbiB0aGUgYnJvd3NlclxuICAgIHZhciBwcmV2aW91c19hc3luYztcblxuICAgIC8vIEVzdGFibGlzaCB0aGUgcm9vdCBvYmplY3QsIGB3aW5kb3dgIChgc2VsZmApIGluIHRoZSBicm93c2VyLCBgZ2xvYmFsYFxuICAgIC8vIG9uIHRoZSBzZXJ2ZXIsIG9yIGB0aGlzYCBpbiBzb21lIHZpcnR1YWwgbWFjaGluZXMuIFdlIHVzZSBgc2VsZmBcbiAgICAvLyBpbnN0ZWFkIG9mIGB3aW5kb3dgIGZvciBgV2ViV29ya2VyYCBzdXBwb3J0LlxuICAgIHZhciByb290ID0gdHlwZW9mIHNlbGYgPT09ICdvYmplY3QnICYmIHNlbGYuc2VsZiA9PT0gc2VsZiAmJiBzZWxmIHx8XG4gICAgICAgICAgICB0eXBlb2YgZ2xvYmFsID09PSAnb2JqZWN0JyAmJiBnbG9iYWwuZ2xvYmFsID09PSBnbG9iYWwgJiYgZ2xvYmFsIHx8XG4gICAgICAgICAgICB0aGlzO1xuXG4gICAgaWYgKHJvb3QgIT0gbnVsbCkge1xuICAgICAgICBwcmV2aW91c19hc3luYyA9IHJvb3QuYXN5bmM7XG4gICAgfVxuXG4gICAgYXN5bmMubm9Db25mbGljdCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcm9vdC5hc3luYyA9IHByZXZpb3VzX2FzeW5jO1xuICAgICAgICByZXR1cm4gYXN5bmM7XG4gICAgfTtcblxuICAgIGZ1bmN0aW9uIG9ubHlfb25jZShmbikge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICBpZiAoZm4gPT09IG51bGwpIHRocm93IG5ldyBFcnJvcihcIkNhbGxiYWNrIHdhcyBhbHJlYWR5IGNhbGxlZC5cIik7XG4gICAgICAgICAgICBmbi5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgICAgICAgICAgZm4gPSBudWxsO1xuICAgICAgICB9O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIF9vbmNlKGZuKSB7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIGlmIChmbiA9PT0gbnVsbCkgcmV0dXJuO1xuICAgICAgICAgICAgZm4uYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICAgICAgICAgIGZuID0gbnVsbDtcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICAvLy8vIGNyb3NzLWJyb3dzZXIgY29tcGF0aWJsaXR5IGZ1bmN0aW9ucyAvLy8vXG5cbiAgICB2YXIgX3RvU3RyaW5nID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZztcblxuICAgIHZhciBfaXNBcnJheSA9IEFycmF5LmlzQXJyYXkgfHwgZnVuY3Rpb24gKG9iaikge1xuICAgICAgICByZXR1cm4gX3RvU3RyaW5nLmNhbGwob2JqKSA9PT0gJ1tvYmplY3QgQXJyYXldJztcbiAgICB9O1xuXG4gICAgLy8gUG9ydGVkIGZyb20gdW5kZXJzY29yZS5qcyBpc09iamVjdFxuICAgIHZhciBfaXNPYmplY3QgPSBmdW5jdGlvbihvYmopIHtcbiAgICAgICAgdmFyIHR5cGUgPSB0eXBlb2Ygb2JqO1xuICAgICAgICByZXR1cm4gdHlwZSA9PT0gJ2Z1bmN0aW9uJyB8fCB0eXBlID09PSAnb2JqZWN0JyAmJiAhIW9iajtcbiAgICB9O1xuXG4gICAgZnVuY3Rpb24gX2lzQXJyYXlMaWtlKGFycikge1xuICAgICAgICByZXR1cm4gX2lzQXJyYXkoYXJyKSB8fCAoXG4gICAgICAgICAgICAvLyBoYXMgYSBwb3NpdGl2ZSBpbnRlZ2VyIGxlbmd0aCBwcm9wZXJ0eVxuICAgICAgICAgICAgdHlwZW9mIGFyci5sZW5ndGggPT09IFwibnVtYmVyXCIgJiZcbiAgICAgICAgICAgIGFyci5sZW5ndGggPj0gMCAmJlxuICAgICAgICAgICAgYXJyLmxlbmd0aCAlIDEgPT09IDBcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBfYXJyYXlFYWNoKGFyciwgaXRlcmF0b3IpIHtcbiAgICAgICAgdmFyIGluZGV4ID0gLTEsXG4gICAgICAgICAgICBsZW5ndGggPSBhcnIubGVuZ3RoO1xuXG4gICAgICAgIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgICAgICAgICBpdGVyYXRvcihhcnJbaW5kZXhdLCBpbmRleCwgYXJyKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIF9tYXAoYXJyLCBpdGVyYXRvcikge1xuICAgICAgICB2YXIgaW5kZXggPSAtMSxcbiAgICAgICAgICAgIGxlbmd0aCA9IGFyci5sZW5ndGgsXG4gICAgICAgICAgICByZXN1bHQgPSBBcnJheShsZW5ndGgpO1xuXG4gICAgICAgIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgICAgICAgICByZXN1bHRbaW5kZXhdID0gaXRlcmF0b3IoYXJyW2luZGV4XSwgaW5kZXgsIGFycik7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBfcmFuZ2UoY291bnQpIHtcbiAgICAgICAgcmV0dXJuIF9tYXAoQXJyYXkoY291bnQpLCBmdW5jdGlvbiAodiwgaSkgeyByZXR1cm4gaTsgfSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gX3JlZHVjZShhcnIsIGl0ZXJhdG9yLCBtZW1vKSB7XG4gICAgICAgIF9hcnJheUVhY2goYXJyLCBmdW5jdGlvbiAoeCwgaSwgYSkge1xuICAgICAgICAgICAgbWVtbyA9IGl0ZXJhdG9yKG1lbW8sIHgsIGksIGEpO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIG1lbW87XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gX2ZvckVhY2hPZihvYmplY3QsIGl0ZXJhdG9yKSB7XG4gICAgICAgIF9hcnJheUVhY2goX2tleXMob2JqZWN0KSwgZnVuY3Rpb24gKGtleSkge1xuICAgICAgICAgICAgaXRlcmF0b3Iob2JqZWN0W2tleV0sIGtleSk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIF9pbmRleE9mKGFyciwgaXRlbSkge1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFyci5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgaWYgKGFycltpXSA9PT0gaXRlbSkgcmV0dXJuIGk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIC0xO1xuICAgIH1cblxuICAgIHZhciBfa2V5cyA9IE9iamVjdC5rZXlzIHx8IGZ1bmN0aW9uIChvYmopIHtcbiAgICAgICAgdmFyIGtleXMgPSBbXTtcbiAgICAgICAgZm9yICh2YXIgayBpbiBvYmopIHtcbiAgICAgICAgICAgIGlmIChvYmouaGFzT3duUHJvcGVydHkoaykpIHtcbiAgICAgICAgICAgICAgICBrZXlzLnB1c2goayk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGtleXM7XG4gICAgfTtcblxuICAgIGZ1bmN0aW9uIF9rZXlJdGVyYXRvcihjb2xsKSB7XG4gICAgICAgIHZhciBpID0gLTE7XG4gICAgICAgIHZhciBsZW47XG4gICAgICAgIHZhciBrZXlzO1xuICAgICAgICBpZiAoX2lzQXJyYXlMaWtlKGNvbGwpKSB7XG4gICAgICAgICAgICBsZW4gPSBjb2xsLmxlbmd0aDtcbiAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbiBuZXh0KCkge1xuICAgICAgICAgICAgICAgIGkrKztcbiAgICAgICAgICAgICAgICByZXR1cm4gaSA8IGxlbiA/IGkgOiBudWxsO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGtleXMgPSBfa2V5cyhjb2xsKTtcbiAgICAgICAgICAgIGxlbiA9IGtleXMubGVuZ3RoO1xuICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIG5leHQoKSB7XG4gICAgICAgICAgICAgICAgaSsrO1xuICAgICAgICAgICAgICAgIHJldHVybiBpIDwgbGVuID8ga2V5c1tpXSA6IG51bGw7XG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gU2ltaWxhciB0byBFUzYncyByZXN0IHBhcmFtIChodHRwOi8vYXJpeWEub2ZpbGFicy5jb20vMjAxMy8wMy9lczYtYW5kLXJlc3QtcGFyYW1ldGVyLmh0bWwpXG4gICAgLy8gVGhpcyBhY2N1bXVsYXRlcyB0aGUgYXJndW1lbnRzIHBhc3NlZCBpbnRvIGFuIGFycmF5LCBhZnRlciBhIGdpdmVuIGluZGV4LlxuICAgIC8vIEZyb20gdW5kZXJzY29yZS5qcyAoaHR0cHM6Ly9naXRodWIuY29tL2phc2hrZW5hcy91bmRlcnNjb3JlL3B1bGwvMjE0MCkuXG4gICAgZnVuY3Rpb24gX3Jlc3RQYXJhbShmdW5jLCBzdGFydEluZGV4KSB7XG4gICAgICAgIHN0YXJ0SW5kZXggPSBzdGFydEluZGV4ID09IG51bGwgPyBmdW5jLmxlbmd0aCAtIDEgOiArc3RhcnRJbmRleDtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgdmFyIGxlbmd0aCA9IE1hdGgubWF4KGFyZ3VtZW50cy5sZW5ndGggLSBzdGFydEluZGV4LCAwKTtcbiAgICAgICAgICAgIHZhciByZXN0ID0gQXJyYXkobGVuZ3RoKTtcbiAgICAgICAgICAgIGZvciAodmFyIGluZGV4ID0gMDsgaW5kZXggPCBsZW5ndGg7IGluZGV4KyspIHtcbiAgICAgICAgICAgICAgICByZXN0W2luZGV4XSA9IGFyZ3VtZW50c1tpbmRleCArIHN0YXJ0SW5kZXhdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgc3dpdGNoIChzdGFydEluZGV4KSB7XG4gICAgICAgICAgICAgICAgY2FzZSAwOiByZXR1cm4gZnVuYy5jYWxsKHRoaXMsIHJlc3QpO1xuICAgICAgICAgICAgICAgIGNhc2UgMTogcmV0dXJuIGZ1bmMuY2FsbCh0aGlzLCBhcmd1bWVudHNbMF0sIHJlc3QpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gQ3VycmVudGx5IHVudXNlZCBidXQgaGFuZGxlIGNhc2VzIG91dHNpZGUgb2YgdGhlIHN3aXRjaCBzdGF0ZW1lbnQ6XG4gICAgICAgICAgICAvLyB2YXIgYXJncyA9IEFycmF5KHN0YXJ0SW5kZXggKyAxKTtcbiAgICAgICAgICAgIC8vIGZvciAoaW5kZXggPSAwOyBpbmRleCA8IHN0YXJ0SW5kZXg7IGluZGV4KyspIHtcbiAgICAgICAgICAgIC8vICAgICBhcmdzW2luZGV4XSA9IGFyZ3VtZW50c1tpbmRleF07XG4gICAgICAgICAgICAvLyB9XG4gICAgICAgICAgICAvLyBhcmdzW3N0YXJ0SW5kZXhdID0gcmVzdDtcbiAgICAgICAgICAgIC8vIHJldHVybiBmdW5jLmFwcGx5KHRoaXMsIGFyZ3MpO1xuICAgICAgICB9O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIF93aXRob3V0SW5kZXgoaXRlcmF0b3IpIHtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICh2YWx1ZSwgaW5kZXgsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICByZXR1cm4gaXRlcmF0b3IodmFsdWUsIGNhbGxiYWNrKTtcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICAvLy8vIGV4cG9ydGVkIGFzeW5jIG1vZHVsZSBmdW5jdGlvbnMgLy8vL1xuXG4gICAgLy8vLyBuZXh0VGljayBpbXBsZW1lbnRhdGlvbiB3aXRoIGJyb3dzZXItY29tcGF0aWJsZSBmYWxsYmFjayAvLy8vXG5cbiAgICAvLyBjYXB0dXJlIHRoZSBnbG9iYWwgcmVmZXJlbmNlIHRvIGd1YXJkIGFnYWluc3QgZmFrZVRpbWVyIG1vY2tzXG4gICAgdmFyIF9zZXRJbW1lZGlhdGUgPSB0eXBlb2Ygc2V0SW1tZWRpYXRlID09PSAnZnVuY3Rpb24nICYmIHNldEltbWVkaWF0ZTtcblxuICAgIHZhciBfZGVsYXkgPSBfc2V0SW1tZWRpYXRlID8gZnVuY3Rpb24oZm4pIHtcbiAgICAgICAgLy8gbm90IGEgZGlyZWN0IGFsaWFzIGZvciBJRTEwIGNvbXBhdGliaWxpdHlcbiAgICAgICAgX3NldEltbWVkaWF0ZShmbik7XG4gICAgfSA6IGZ1bmN0aW9uKGZuKSB7XG4gICAgICAgIHNldFRpbWVvdXQoZm4sIDApO1xuICAgIH07XG5cbiAgICBpZiAodHlwZW9mIHByb2Nlc3MgPT09ICdvYmplY3QnICYmIHR5cGVvZiBwcm9jZXNzLm5leHRUaWNrID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIGFzeW5jLm5leHRUaWNrID0gcHJvY2Vzcy5uZXh0VGljaztcbiAgICB9IGVsc2Uge1xuICAgICAgICBhc3luYy5uZXh0VGljayA9IF9kZWxheTtcbiAgICB9XG4gICAgYXN5bmMuc2V0SW1tZWRpYXRlID0gX3NldEltbWVkaWF0ZSA/IF9kZWxheSA6IGFzeW5jLm5leHRUaWNrO1xuXG5cbiAgICBhc3luYy5mb3JFYWNoID1cbiAgICBhc3luYy5lYWNoID0gZnVuY3Rpb24gKGFyciwgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgIHJldHVybiBhc3luYy5lYWNoT2YoYXJyLCBfd2l0aG91dEluZGV4KGl0ZXJhdG9yKSwgY2FsbGJhY2spO1xuICAgIH07XG5cbiAgICBhc3luYy5mb3JFYWNoU2VyaWVzID1cbiAgICBhc3luYy5lYWNoU2VyaWVzID0gZnVuY3Rpb24gKGFyciwgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgIHJldHVybiBhc3luYy5lYWNoT2ZTZXJpZXMoYXJyLCBfd2l0aG91dEluZGV4KGl0ZXJhdG9yKSwgY2FsbGJhY2spO1xuICAgIH07XG5cblxuICAgIGFzeW5jLmZvckVhY2hMaW1pdCA9XG4gICAgYXN5bmMuZWFjaExpbWl0ID0gZnVuY3Rpb24gKGFyciwgbGltaXQsIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICByZXR1cm4gX2VhY2hPZkxpbWl0KGxpbWl0KShhcnIsIF93aXRob3V0SW5kZXgoaXRlcmF0b3IpLCBjYWxsYmFjayk7XG4gICAgfTtcblxuICAgIGFzeW5jLmZvckVhY2hPZiA9XG4gICAgYXN5bmMuZWFjaE9mID0gZnVuY3Rpb24gKG9iamVjdCwgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgIGNhbGxiYWNrID0gX29uY2UoY2FsbGJhY2sgfHwgbm9vcCk7XG4gICAgICAgIG9iamVjdCA9IG9iamVjdCB8fCBbXTtcblxuICAgICAgICB2YXIgaXRlciA9IF9rZXlJdGVyYXRvcihvYmplY3QpO1xuICAgICAgICB2YXIga2V5LCBjb21wbGV0ZWQgPSAwO1xuXG4gICAgICAgIHdoaWxlICgoa2V5ID0gaXRlcigpKSAhPSBudWxsKSB7XG4gICAgICAgICAgICBjb21wbGV0ZWQgKz0gMTtcbiAgICAgICAgICAgIGl0ZXJhdG9yKG9iamVjdFtrZXldLCBrZXksIG9ubHlfb25jZShkb25lKSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoY29tcGxldGVkID09PSAwKSBjYWxsYmFjayhudWxsKTtcblxuICAgICAgICBmdW5jdGlvbiBkb25lKGVycikge1xuICAgICAgICAgICAgY29tcGxldGVkLS07XG4gICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIENoZWNrIGtleSBpcyBudWxsIGluIGNhc2UgaXRlcmF0b3IgaXNuJ3QgZXhoYXVzdGVkXG4gICAgICAgICAgICAvLyBhbmQgZG9uZSByZXNvbHZlZCBzeW5jaHJvbm91c2x5LlxuICAgICAgICAgICAgZWxzZSBpZiAoa2V5ID09PSBudWxsICYmIGNvbXBsZXRlZCA8PSAwKSB7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2sobnVsbCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgYXN5bmMuZm9yRWFjaE9mU2VyaWVzID1cbiAgICBhc3luYy5lYWNoT2ZTZXJpZXMgPSBmdW5jdGlvbiAob2JqLCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgY2FsbGJhY2sgPSBfb25jZShjYWxsYmFjayB8fCBub29wKTtcbiAgICAgICAgb2JqID0gb2JqIHx8IFtdO1xuICAgICAgICB2YXIgbmV4dEtleSA9IF9rZXlJdGVyYXRvcihvYmopO1xuICAgICAgICB2YXIga2V5ID0gbmV4dEtleSgpO1xuICAgICAgICBmdW5jdGlvbiBpdGVyYXRlKCkge1xuICAgICAgICAgICAgdmFyIHN5bmMgPSB0cnVlO1xuICAgICAgICAgICAgaWYgKGtleSA9PT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBjYWxsYmFjayhudWxsKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGl0ZXJhdG9yKG9ialtrZXldLCBrZXksIG9ubHlfb25jZShmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAga2V5ID0gbmV4dEtleSgpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoa2V5ID09PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gY2FsbGJhY2sobnVsbCk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3luYykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFzeW5jLnNldEltbWVkaWF0ZShpdGVyYXRlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlcmF0ZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSkpO1xuICAgICAgICAgICAgc3luYyA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGl0ZXJhdGUoKTtcbiAgICB9O1xuXG5cblxuICAgIGFzeW5jLmZvckVhY2hPZkxpbWl0ID1cbiAgICBhc3luYy5lYWNoT2ZMaW1pdCA9IGZ1bmN0aW9uIChvYmosIGxpbWl0LCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgX2VhY2hPZkxpbWl0KGxpbWl0KShvYmosIGl0ZXJhdG9yLCBjYWxsYmFjayk7XG4gICAgfTtcblxuICAgIGZ1bmN0aW9uIF9lYWNoT2ZMaW1pdChsaW1pdCkge1xuXG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAob2JqLCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIGNhbGxiYWNrID0gX29uY2UoY2FsbGJhY2sgfHwgbm9vcCk7XG4gICAgICAgICAgICBvYmogPSBvYmogfHwgW107XG4gICAgICAgICAgICB2YXIgbmV4dEtleSA9IF9rZXlJdGVyYXRvcihvYmopO1xuICAgICAgICAgICAgaWYgKGxpbWl0IDw9IDApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gY2FsbGJhY2sobnVsbCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB2YXIgZG9uZSA9IGZhbHNlO1xuICAgICAgICAgICAgdmFyIHJ1bm5pbmcgPSAwO1xuICAgICAgICAgICAgdmFyIGVycm9yZWQgPSBmYWxzZTtcblxuICAgICAgICAgICAgKGZ1bmN0aW9uIHJlcGxlbmlzaCAoKSB7XG4gICAgICAgICAgICAgICAgaWYgKGRvbmUgJiYgcnVubmluZyA8PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBjYWxsYmFjayhudWxsKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB3aGlsZSAocnVubmluZyA8IGxpbWl0ICYmICFlcnJvcmVkKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBrZXkgPSBuZXh0S2V5KCk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChrZXkgPT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRvbmUgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJ1bm5pbmcgPD0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKG51bGwpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJ1bm5pbmcgKz0gMTtcbiAgICAgICAgICAgICAgICAgICAgaXRlcmF0b3Iob2JqW2tleV0sIGtleSwgb25seV9vbmNlKGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJ1bm5pbmcgLT0gMTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVwbGVuaXNoKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KSgpO1xuICAgICAgICB9O1xuICAgIH1cblxuXG4gICAgZnVuY3Rpb24gZG9QYXJhbGxlbChmbikge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKG9iaiwgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICByZXR1cm4gZm4oYXN5bmMuZWFjaE9mLCBvYmosIGl0ZXJhdG9yLCBjYWxsYmFjayk7XG4gICAgICAgIH07XG4gICAgfVxuICAgIGZ1bmN0aW9uIGRvUGFyYWxsZWxMaW1pdChmbikge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKG9iaiwgbGltaXQsIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICAgICAgcmV0dXJuIGZuKF9lYWNoT2ZMaW1pdChsaW1pdCksIG9iaiwgaXRlcmF0b3IsIGNhbGxiYWNrKTtcbiAgICAgICAgfTtcbiAgICB9XG4gICAgZnVuY3Rpb24gZG9TZXJpZXMoZm4pIHtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChvYmosIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICAgICAgcmV0dXJuIGZuKGFzeW5jLmVhY2hPZlNlcmllcywgb2JqLCBpdGVyYXRvciwgY2FsbGJhY2spO1xuICAgICAgICB9O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIF9hc3luY01hcChlYWNoZm4sIGFyciwgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgIGNhbGxiYWNrID0gX29uY2UoY2FsbGJhY2sgfHwgbm9vcCk7XG4gICAgICAgIGFyciA9IGFyciB8fCBbXTtcbiAgICAgICAgdmFyIHJlc3VsdHMgPSBfaXNBcnJheUxpa2UoYXJyKSA/IFtdIDoge307XG4gICAgICAgIGVhY2hmbihhcnIsIGZ1bmN0aW9uICh2YWx1ZSwgaW5kZXgsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICBpdGVyYXRvcih2YWx1ZSwgZnVuY3Rpb24gKGVyciwgdikge1xuICAgICAgICAgICAgICAgIHJlc3VsdHNbaW5kZXhdID0gdjtcbiAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgIGNhbGxiYWNrKGVyciwgcmVzdWx0cyk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGFzeW5jLm1hcCA9IGRvUGFyYWxsZWwoX2FzeW5jTWFwKTtcbiAgICBhc3luYy5tYXBTZXJpZXMgPSBkb1NlcmllcyhfYXN5bmNNYXApO1xuICAgIGFzeW5jLm1hcExpbWl0ID0gZG9QYXJhbGxlbExpbWl0KF9hc3luY01hcCk7XG5cbiAgICAvLyByZWR1Y2Ugb25seSBoYXMgYSBzZXJpZXMgdmVyc2lvbiwgYXMgZG9pbmcgcmVkdWNlIGluIHBhcmFsbGVsIHdvbid0XG4gICAgLy8gd29yayBpbiBtYW55IHNpdHVhdGlvbnMuXG4gICAgYXN5bmMuaW5qZWN0ID1cbiAgICBhc3luYy5mb2xkbCA9XG4gICAgYXN5bmMucmVkdWNlID0gZnVuY3Rpb24gKGFyciwgbWVtbywgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgIGFzeW5jLmVhY2hPZlNlcmllcyhhcnIsIGZ1bmN0aW9uICh4LCBpLCBjYWxsYmFjaykge1xuICAgICAgICAgICAgaXRlcmF0b3IobWVtbywgeCwgZnVuY3Rpb24gKGVyciwgdikge1xuICAgICAgICAgICAgICAgIG1lbW8gPSB2O1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSwgZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgY2FsbGJhY2soZXJyLCBtZW1vKTtcbiAgICAgICAgfSk7XG4gICAgfTtcblxuICAgIGFzeW5jLmZvbGRyID1cbiAgICBhc3luYy5yZWR1Y2VSaWdodCA9IGZ1bmN0aW9uIChhcnIsIG1lbW8sIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICB2YXIgcmV2ZXJzZWQgPSBfbWFwKGFyciwgaWRlbnRpdHkpLnJldmVyc2UoKTtcbiAgICAgICAgYXN5bmMucmVkdWNlKHJldmVyc2VkLCBtZW1vLCBpdGVyYXRvciwgY2FsbGJhY2spO1xuICAgIH07XG5cbiAgICBhc3luYy50cmFuc2Zvcm0gPSBmdW5jdGlvbiAoYXJyLCBtZW1vLCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDMpIHtcbiAgICAgICAgICAgIGNhbGxiYWNrID0gaXRlcmF0b3I7XG4gICAgICAgICAgICBpdGVyYXRvciA9IG1lbW87XG4gICAgICAgICAgICBtZW1vID0gX2lzQXJyYXkoYXJyKSA/IFtdIDoge307XG4gICAgICAgIH1cblxuICAgICAgICBhc3luYy5lYWNoT2YoYXJyLCBmdW5jdGlvbih2LCBrLCBjYikge1xuICAgICAgICAgICAgaXRlcmF0b3IobWVtbywgdiwgaywgY2IpO1xuICAgICAgICB9LCBmdW5jdGlvbihlcnIpIHtcbiAgICAgICAgICAgIGNhbGxiYWNrKGVyciwgbWVtbyk7XG4gICAgICAgIH0pO1xuICAgIH07XG5cbiAgICBmdW5jdGlvbiBfZmlsdGVyKGVhY2hmbiwgYXJyLCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgdmFyIHJlc3VsdHMgPSBbXTtcbiAgICAgICAgZWFjaGZuKGFyciwgZnVuY3Rpb24gKHgsIGluZGV4LCBjYWxsYmFjaykge1xuICAgICAgICAgICAgaXRlcmF0b3IoeCwgZnVuY3Rpb24gKHYpIHtcbiAgICAgICAgICAgICAgICBpZiAodikge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHRzLnB1c2goe2luZGV4OiBpbmRleCwgdmFsdWU6IHh9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2FsbGJhY2soKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBjYWxsYmFjayhfbWFwKHJlc3VsdHMuc29ydChmdW5jdGlvbiAoYSwgYikge1xuICAgICAgICAgICAgICAgIHJldHVybiBhLmluZGV4IC0gYi5pbmRleDtcbiAgICAgICAgICAgIH0pLCBmdW5jdGlvbiAoeCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB4LnZhbHVlO1xuICAgICAgICAgICAgfSkpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBhc3luYy5zZWxlY3QgPVxuICAgIGFzeW5jLmZpbHRlciA9IGRvUGFyYWxsZWwoX2ZpbHRlcik7XG5cbiAgICBhc3luYy5zZWxlY3RMaW1pdCA9XG4gICAgYXN5bmMuZmlsdGVyTGltaXQgPSBkb1BhcmFsbGVsTGltaXQoX2ZpbHRlcik7XG5cbiAgICBhc3luYy5zZWxlY3RTZXJpZXMgPVxuICAgIGFzeW5jLmZpbHRlclNlcmllcyA9IGRvU2VyaWVzKF9maWx0ZXIpO1xuXG4gICAgZnVuY3Rpb24gX3JlamVjdChlYWNoZm4sIGFyciwgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgIF9maWx0ZXIoZWFjaGZuLCBhcnIsIGZ1bmN0aW9uKHZhbHVlLCBjYikge1xuICAgICAgICAgICAgaXRlcmF0b3IodmFsdWUsIGZ1bmN0aW9uKHYpIHtcbiAgICAgICAgICAgICAgICBjYighdik7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSwgY2FsbGJhY2spO1xuICAgIH1cbiAgICBhc3luYy5yZWplY3QgPSBkb1BhcmFsbGVsKF9yZWplY3QpO1xuICAgIGFzeW5jLnJlamVjdExpbWl0ID0gZG9QYXJhbGxlbExpbWl0KF9yZWplY3QpO1xuICAgIGFzeW5jLnJlamVjdFNlcmllcyA9IGRvU2VyaWVzKF9yZWplY3QpO1xuXG4gICAgZnVuY3Rpb24gX2NyZWF0ZVRlc3RlcihlYWNoZm4sIGNoZWNrLCBnZXRSZXN1bHQpIHtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKGFyciwgbGltaXQsIGl0ZXJhdG9yLCBjYikge1xuICAgICAgICAgICAgZnVuY3Rpb24gZG9uZSgpIHtcbiAgICAgICAgICAgICAgICBpZiAoY2IpIGNiKGdldFJlc3VsdChmYWxzZSwgdm9pZCAwKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmdW5jdGlvbiBpdGVyYXRlZSh4LCBfLCBjYWxsYmFjaykge1xuICAgICAgICAgICAgICAgIGlmICghY2IpIHJldHVybiBjYWxsYmFjaygpO1xuICAgICAgICAgICAgICAgIGl0ZXJhdG9yKHgsIGZ1bmN0aW9uICh2KSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChjYiAmJiBjaGVjayh2KSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY2IoZ2V0UmVzdWx0KHRydWUsIHgpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNiID0gaXRlcmF0b3IgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPiAzKSB7XG4gICAgICAgICAgICAgICAgZWFjaGZuKGFyciwgbGltaXQsIGl0ZXJhdGVlLCBkb25lKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgY2IgPSBpdGVyYXRvcjtcbiAgICAgICAgICAgICAgICBpdGVyYXRvciA9IGxpbWl0O1xuICAgICAgICAgICAgICAgIGVhY2hmbihhcnIsIGl0ZXJhdGVlLCBkb25lKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBhc3luYy5hbnkgPVxuICAgIGFzeW5jLnNvbWUgPSBfY3JlYXRlVGVzdGVyKGFzeW5jLmVhY2hPZiwgdG9Cb29sLCBpZGVudGl0eSk7XG5cbiAgICBhc3luYy5zb21lTGltaXQgPSBfY3JlYXRlVGVzdGVyKGFzeW5jLmVhY2hPZkxpbWl0LCB0b0Jvb2wsIGlkZW50aXR5KTtcblxuICAgIGFzeW5jLmFsbCA9XG4gICAgYXN5bmMuZXZlcnkgPSBfY3JlYXRlVGVzdGVyKGFzeW5jLmVhY2hPZiwgbm90SWQsIG5vdElkKTtcblxuICAgIGFzeW5jLmV2ZXJ5TGltaXQgPSBfY3JlYXRlVGVzdGVyKGFzeW5jLmVhY2hPZkxpbWl0LCBub3RJZCwgbm90SWQpO1xuXG4gICAgZnVuY3Rpb24gX2ZpbmRHZXRSZXN1bHQodiwgeCkge1xuICAgICAgICByZXR1cm4geDtcbiAgICB9XG4gICAgYXN5bmMuZGV0ZWN0ID0gX2NyZWF0ZVRlc3Rlcihhc3luYy5lYWNoT2YsIGlkZW50aXR5LCBfZmluZEdldFJlc3VsdCk7XG4gICAgYXN5bmMuZGV0ZWN0U2VyaWVzID0gX2NyZWF0ZVRlc3Rlcihhc3luYy5lYWNoT2ZTZXJpZXMsIGlkZW50aXR5LCBfZmluZEdldFJlc3VsdCk7XG4gICAgYXN5bmMuZGV0ZWN0TGltaXQgPSBfY3JlYXRlVGVzdGVyKGFzeW5jLmVhY2hPZkxpbWl0LCBpZGVudGl0eSwgX2ZpbmRHZXRSZXN1bHQpO1xuXG4gICAgYXN5bmMuc29ydEJ5ID0gZnVuY3Rpb24gKGFyciwgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgIGFzeW5jLm1hcChhcnIsIGZ1bmN0aW9uICh4LCBjYWxsYmFjaykge1xuICAgICAgICAgICAgaXRlcmF0b3IoeCwgZnVuY3Rpb24gKGVyciwgY3JpdGVyaWEpIHtcbiAgICAgICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhudWxsLCB7dmFsdWU6IHgsIGNyaXRlcmlhOiBjcml0ZXJpYX0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LCBmdW5jdGlvbiAoZXJyLCByZXN1bHRzKSB7XG4gICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBjYWxsYmFjayhudWxsLCBfbWFwKHJlc3VsdHMuc29ydChjb21wYXJhdG9yKSwgZnVuY3Rpb24gKHgpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHgudmFsdWU7XG4gICAgICAgICAgICAgICAgfSkpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGZ1bmN0aW9uIGNvbXBhcmF0b3IobGVmdCwgcmlnaHQpIHtcbiAgICAgICAgICAgIHZhciBhID0gbGVmdC5jcml0ZXJpYSwgYiA9IHJpZ2h0LmNyaXRlcmlhO1xuICAgICAgICAgICAgcmV0dXJuIGEgPCBiID8gLTEgOiBhID4gYiA/IDEgOiAwO1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIGFzeW5jLmF1dG8gPSBmdW5jdGlvbiAodGFza3MsIGNvbmN1cnJlbmN5LCBjYWxsYmFjaykge1xuICAgICAgICBpZiAoIWNhbGxiYWNrKSB7XG4gICAgICAgICAgICAvLyBjb25jdXJyZW5jeSBpcyBvcHRpb25hbCwgc2hpZnQgdGhlIGFyZ3MuXG4gICAgICAgICAgICBjYWxsYmFjayA9IGNvbmN1cnJlbmN5O1xuICAgICAgICAgICAgY29uY3VycmVuY3kgPSBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGNhbGxiYWNrID0gX29uY2UoY2FsbGJhY2sgfHwgbm9vcCk7XG4gICAgICAgIHZhciBrZXlzID0gX2tleXModGFza3MpO1xuICAgICAgICB2YXIgcmVtYWluaW5nVGFza3MgPSBrZXlzLmxlbmd0aDtcbiAgICAgICAgaWYgKCFyZW1haW5pbmdUYXNrcykge1xuICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKG51bGwpO1xuICAgICAgICB9XG4gICAgICAgIGlmICghY29uY3VycmVuY3kpIHtcbiAgICAgICAgICAgIGNvbmN1cnJlbmN5ID0gcmVtYWluaW5nVGFza3M7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgcmVzdWx0cyA9IHt9O1xuICAgICAgICB2YXIgcnVubmluZ1Rhc2tzID0gMDtcblxuICAgICAgICB2YXIgbGlzdGVuZXJzID0gW107XG4gICAgICAgIGZ1bmN0aW9uIGFkZExpc3RlbmVyKGZuKSB7XG4gICAgICAgICAgICBsaXN0ZW5lcnMudW5zaGlmdChmbik7XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gcmVtb3ZlTGlzdGVuZXIoZm4pIHtcbiAgICAgICAgICAgIHZhciBpZHggPSBfaW5kZXhPZihsaXN0ZW5lcnMsIGZuKTtcbiAgICAgICAgICAgIGlmIChpZHggPj0gMCkgbGlzdGVuZXJzLnNwbGljZShpZHgsIDEpO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIHRhc2tDb21wbGV0ZSgpIHtcbiAgICAgICAgICAgIHJlbWFpbmluZ1Rhc2tzLS07XG4gICAgICAgICAgICBfYXJyYXlFYWNoKGxpc3RlbmVycy5zbGljZSgwKSwgZnVuY3Rpb24gKGZuKSB7XG4gICAgICAgICAgICAgICAgZm4oKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgYWRkTGlzdGVuZXIoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgaWYgKCFyZW1haW5pbmdUYXNrcykge1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrKG51bGwsIHJlc3VsdHMpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICBfYXJyYXlFYWNoKGtleXMsIGZ1bmN0aW9uIChrKSB7XG4gICAgICAgICAgICB2YXIgdGFzayA9IF9pc0FycmF5KHRhc2tzW2tdKSA/IHRhc2tzW2tdOiBbdGFza3Nba11dO1xuICAgICAgICAgICAgdmFyIHRhc2tDYWxsYmFjayA9IF9yZXN0UGFyYW0oZnVuY3Rpb24oZXJyLCBhcmdzKSB7XG4gICAgICAgICAgICAgICAgcnVubmluZ1Rhc2tzLS07XG4gICAgICAgICAgICAgICAgaWYgKGFyZ3MubGVuZ3RoIDw9IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgYXJncyA9IGFyZ3NbMF07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHNhZmVSZXN1bHRzID0ge307XG4gICAgICAgICAgICAgICAgICAgIF9mb3JFYWNoT2YocmVzdWx0cywgZnVuY3Rpb24odmFsLCBya2V5KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzYWZlUmVzdWx0c1tya2V5XSA9IHZhbDtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIHNhZmVSZXN1bHRzW2tdID0gYXJncztcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soZXJyLCBzYWZlUmVzdWx0cyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHRzW2tdID0gYXJncztcbiAgICAgICAgICAgICAgICAgICAgYXN5bmMuc2V0SW1tZWRpYXRlKHRhc2tDb21wbGV0ZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB2YXIgcmVxdWlyZXMgPSB0YXNrLnNsaWNlKDAsIHRhc2subGVuZ3RoIC0gMSk7XG4gICAgICAgICAgICAvLyBwcmV2ZW50IGRlYWQtbG9ja3NcbiAgICAgICAgICAgIHZhciBsZW4gPSByZXF1aXJlcy5sZW5ndGg7XG4gICAgICAgICAgICB2YXIgZGVwO1xuICAgICAgICAgICAgd2hpbGUgKGxlbi0tKSB7XG4gICAgICAgICAgICAgICAgaWYgKCEoZGVwID0gdGFza3NbcmVxdWlyZXNbbGVuXV0pKSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignSGFzIGluZXhpc3RhbnQgZGVwZW5kZW5jeScpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoX2lzQXJyYXkoZGVwKSAmJiBfaW5kZXhPZihkZXAsIGspID49IDApIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdIYXMgY3ljbGljIGRlcGVuZGVuY2llcycpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZ1bmN0aW9uIHJlYWR5KCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBydW5uaW5nVGFza3MgPCBjb25jdXJyZW5jeSAmJiBfcmVkdWNlKHJlcXVpcmVzLCBmdW5jdGlvbiAoYSwgeCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gKGEgJiYgcmVzdWx0cy5oYXNPd25Qcm9wZXJ0eSh4KSk7XG4gICAgICAgICAgICAgICAgfSwgdHJ1ZSkgJiYgIXJlc3VsdHMuaGFzT3duUHJvcGVydHkoayk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAocmVhZHkoKSkge1xuICAgICAgICAgICAgICAgIHJ1bm5pbmdUYXNrcysrO1xuICAgICAgICAgICAgICAgIHRhc2tbdGFzay5sZW5ndGggLSAxXSh0YXNrQ2FsbGJhY2ssIHJlc3VsdHMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgYWRkTGlzdGVuZXIobGlzdGVuZXIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZnVuY3Rpb24gbGlzdGVuZXIoKSB7XG4gICAgICAgICAgICAgICAgaWYgKHJlYWR5KCkpIHtcbiAgICAgICAgICAgICAgICAgICAgcnVubmluZ1Rhc2tzKys7XG4gICAgICAgICAgICAgICAgICAgIHJlbW92ZUxpc3RlbmVyKGxpc3RlbmVyKTtcbiAgICAgICAgICAgICAgICAgICAgdGFza1t0YXNrLmxlbmd0aCAtIDFdKHRhc2tDYWxsYmFjaywgcmVzdWx0cyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9O1xuXG5cblxuICAgIGFzeW5jLnJldHJ5ID0gZnVuY3Rpb24odGltZXMsIHRhc2ssIGNhbGxiYWNrKSB7XG4gICAgICAgIHZhciBERUZBVUxUX1RJTUVTID0gNTtcbiAgICAgICAgdmFyIERFRkFVTFRfSU5URVJWQUwgPSAwO1xuXG4gICAgICAgIHZhciBhdHRlbXB0cyA9IFtdO1xuXG4gICAgICAgIHZhciBvcHRzID0ge1xuICAgICAgICAgICAgdGltZXM6IERFRkFVTFRfVElNRVMsXG4gICAgICAgICAgICBpbnRlcnZhbDogREVGQVVMVF9JTlRFUlZBTFxuICAgICAgICB9O1xuXG4gICAgICAgIGZ1bmN0aW9uIHBhcnNlVGltZXMoYWNjLCB0KXtcbiAgICAgICAgICAgIGlmKHR5cGVvZiB0ID09PSAnbnVtYmVyJyl7XG4gICAgICAgICAgICAgICAgYWNjLnRpbWVzID0gcGFyc2VJbnQodCwgMTApIHx8IERFRkFVTFRfVElNRVM7XG4gICAgICAgICAgICB9IGVsc2UgaWYodHlwZW9mIHQgPT09ICdvYmplY3QnKXtcbiAgICAgICAgICAgICAgICBhY2MudGltZXMgPSBwYXJzZUludCh0LnRpbWVzLCAxMCkgfHwgREVGQVVMVF9USU1FUztcbiAgICAgICAgICAgICAgICBhY2MuaW50ZXJ2YWwgPSBwYXJzZUludCh0LmludGVydmFsLCAxMCkgfHwgREVGQVVMVF9JTlRFUlZBTDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdVbnN1cHBvcnRlZCBhcmd1bWVudCB0eXBlIGZvciBcXCd0aW1lc1xcJzogJyArIHR5cGVvZiB0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBsZW5ndGggPSBhcmd1bWVudHMubGVuZ3RoO1xuICAgICAgICBpZiAobGVuZ3RoIDwgMSB8fCBsZW5ndGggPiAzKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgYXJndW1lbnRzIC0gbXVzdCBiZSBlaXRoZXIgKHRhc2spLCAodGFzaywgY2FsbGJhY2spLCAodGltZXMsIHRhc2spIG9yICh0aW1lcywgdGFzaywgY2FsbGJhY2spJyk7XG4gICAgICAgIH0gZWxzZSBpZiAobGVuZ3RoIDw9IDIgJiYgdHlwZW9mIHRpbWVzID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICBjYWxsYmFjayA9IHRhc2s7XG4gICAgICAgICAgICB0YXNrID0gdGltZXM7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHR5cGVvZiB0aW1lcyAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgcGFyc2VUaW1lcyhvcHRzLCB0aW1lcyk7XG4gICAgICAgIH1cbiAgICAgICAgb3B0cy5jYWxsYmFjayA9IGNhbGxiYWNrO1xuICAgICAgICBvcHRzLnRhc2sgPSB0YXNrO1xuXG4gICAgICAgIGZ1bmN0aW9uIHdyYXBwZWRUYXNrKHdyYXBwZWRDYWxsYmFjaywgd3JhcHBlZFJlc3VsdHMpIHtcbiAgICAgICAgICAgIGZ1bmN0aW9uIHJldHJ5QXR0ZW1wdCh0YXNrLCBmaW5hbEF0dGVtcHQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24oc2VyaWVzQ2FsbGJhY2spIHtcbiAgICAgICAgICAgICAgICAgICAgdGFzayhmdW5jdGlvbihlcnIsIHJlc3VsdCl7XG4gICAgICAgICAgICAgICAgICAgICAgICBzZXJpZXNDYWxsYmFjayghZXJyIHx8IGZpbmFsQXR0ZW1wdCwge2VycjogZXJyLCByZXN1bHQ6IHJlc3VsdH0pO1xuICAgICAgICAgICAgICAgICAgICB9LCB3cmFwcGVkUmVzdWx0cyk7XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZnVuY3Rpb24gcmV0cnlJbnRlcnZhbChpbnRlcnZhbCl7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKHNlcmllc0NhbGxiYWNrKXtcbiAgICAgICAgICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpe1xuICAgICAgICAgICAgICAgICAgICAgICAgc2VyaWVzQ2FsbGJhY2sobnVsbCk7XG4gICAgICAgICAgICAgICAgICAgIH0sIGludGVydmFsKTtcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB3aGlsZSAob3B0cy50aW1lcykge1xuXG4gICAgICAgICAgICAgICAgdmFyIGZpbmFsQXR0ZW1wdCA9ICEob3B0cy50aW1lcy09MSk7XG4gICAgICAgICAgICAgICAgYXR0ZW1wdHMucHVzaChyZXRyeUF0dGVtcHQob3B0cy50YXNrLCBmaW5hbEF0dGVtcHQpKTtcbiAgICAgICAgICAgICAgICBpZighZmluYWxBdHRlbXB0ICYmIG9wdHMuaW50ZXJ2YWwgPiAwKXtcbiAgICAgICAgICAgICAgICAgICAgYXR0ZW1wdHMucHVzaChyZXRyeUludGVydmFsKG9wdHMuaW50ZXJ2YWwpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGFzeW5jLnNlcmllcyhhdHRlbXB0cywgZnVuY3Rpb24oZG9uZSwgZGF0YSl7XG4gICAgICAgICAgICAgICAgZGF0YSA9IGRhdGFbZGF0YS5sZW5ndGggLSAxXTtcbiAgICAgICAgICAgICAgICAod3JhcHBlZENhbGxiYWNrIHx8IG9wdHMuY2FsbGJhY2spKGRhdGEuZXJyLCBkYXRhLnJlc3VsdCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIElmIGEgY2FsbGJhY2sgaXMgcGFzc2VkLCBydW4gdGhpcyBhcyBhIGNvbnRyb2xsIGZsb3dcbiAgICAgICAgcmV0dXJuIG9wdHMuY2FsbGJhY2sgPyB3cmFwcGVkVGFzaygpIDogd3JhcHBlZFRhc2s7XG4gICAgfTtcblxuICAgIGFzeW5jLndhdGVyZmFsbCA9IGZ1bmN0aW9uICh0YXNrcywgY2FsbGJhY2spIHtcbiAgICAgICAgY2FsbGJhY2sgPSBfb25jZShjYWxsYmFjayB8fCBub29wKTtcbiAgICAgICAgaWYgKCFfaXNBcnJheSh0YXNrcykpIHtcbiAgICAgICAgICAgIHZhciBlcnIgPSBuZXcgRXJyb3IoJ0ZpcnN0IGFyZ3VtZW50IHRvIHdhdGVyZmFsbCBtdXN0IGJlIGFuIGFycmF5IG9mIGZ1bmN0aW9ucycpO1xuICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKGVycik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCF0YXNrcy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHJldHVybiBjYWxsYmFjaygpO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIHdyYXBJdGVyYXRvcihpdGVyYXRvcikge1xuICAgICAgICAgICAgcmV0dXJuIF9yZXN0UGFyYW0oZnVuY3Rpb24gKGVyciwgYXJncykge1xuICAgICAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2suYXBwbHkobnVsbCwgW2Vycl0uY29uY2F0KGFyZ3MpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBuZXh0ID0gaXRlcmF0b3IubmV4dCgpO1xuICAgICAgICAgICAgICAgICAgICBpZiAobmV4dCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgYXJncy5wdXNoKHdyYXBJdGVyYXRvcihuZXh0KSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhcmdzLnB1c2goY2FsbGJhY2spO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVuc3VyZUFzeW5jKGl0ZXJhdG9yKS5hcHBseShudWxsLCBhcmdzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICB3cmFwSXRlcmF0b3IoYXN5bmMuaXRlcmF0b3IodGFza3MpKSgpO1xuICAgIH07XG5cbiAgICBmdW5jdGlvbiBfcGFyYWxsZWwoZWFjaGZuLCB0YXNrcywgY2FsbGJhY2spIHtcbiAgICAgICAgY2FsbGJhY2sgPSBjYWxsYmFjayB8fCBub29wO1xuICAgICAgICB2YXIgcmVzdWx0cyA9IF9pc0FycmF5TGlrZSh0YXNrcykgPyBbXSA6IHt9O1xuXG4gICAgICAgIGVhY2hmbih0YXNrcywgZnVuY3Rpb24gKHRhc2ssIGtleSwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIHRhc2soX3Jlc3RQYXJhbShmdW5jdGlvbiAoZXJyLCBhcmdzKSB7XG4gICAgICAgICAgICAgICAgaWYgKGFyZ3MubGVuZ3RoIDw9IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgYXJncyA9IGFyZ3NbMF07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJlc3VsdHNba2V5XSA9IGFyZ3M7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgfSwgZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgY2FsbGJhY2soZXJyLCByZXN1bHRzKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgYXN5bmMucGFyYWxsZWwgPSBmdW5jdGlvbiAodGFza3MsIGNhbGxiYWNrKSB7XG4gICAgICAgIF9wYXJhbGxlbChhc3luYy5lYWNoT2YsIHRhc2tzLCBjYWxsYmFjayk7XG4gICAgfTtcblxuICAgIGFzeW5jLnBhcmFsbGVsTGltaXQgPSBmdW5jdGlvbih0YXNrcywgbGltaXQsIGNhbGxiYWNrKSB7XG4gICAgICAgIF9wYXJhbGxlbChfZWFjaE9mTGltaXQobGltaXQpLCB0YXNrcywgY2FsbGJhY2spO1xuICAgIH07XG5cbiAgICBhc3luYy5zZXJpZXMgPSBmdW5jdGlvbih0YXNrcywgY2FsbGJhY2spIHtcbiAgICAgICAgX3BhcmFsbGVsKGFzeW5jLmVhY2hPZlNlcmllcywgdGFza3MsIGNhbGxiYWNrKTtcbiAgICB9O1xuXG4gICAgYXN5bmMuaXRlcmF0b3IgPSBmdW5jdGlvbiAodGFza3MpIHtcbiAgICAgICAgZnVuY3Rpb24gbWFrZUNhbGxiYWNrKGluZGV4KSB7XG4gICAgICAgICAgICBmdW5jdGlvbiBmbigpIHtcbiAgICAgICAgICAgICAgICBpZiAodGFza3MubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgIHRhc2tzW2luZGV4XS5hcHBseShudWxsLCBhcmd1bWVudHMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gZm4ubmV4dCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZm4ubmV4dCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gKGluZGV4IDwgdGFza3MubGVuZ3RoIC0gMSkgPyBtYWtlQ2FsbGJhY2soaW5kZXggKyAxKTogbnVsbDtcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICByZXR1cm4gZm47XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG1ha2VDYWxsYmFjaygwKTtcbiAgICB9O1xuXG4gICAgYXN5bmMuYXBwbHkgPSBfcmVzdFBhcmFtKGZ1bmN0aW9uIChmbiwgYXJncykge1xuICAgICAgICByZXR1cm4gX3Jlc3RQYXJhbShmdW5jdGlvbiAoY2FsbEFyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybiBmbi5hcHBseShcbiAgICAgICAgICAgICAgICBudWxsLCBhcmdzLmNvbmNhdChjYWxsQXJncylcbiAgICAgICAgICAgICk7XG4gICAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgZnVuY3Rpb24gX2NvbmNhdChlYWNoZm4sIGFyciwgZm4sIGNhbGxiYWNrKSB7XG4gICAgICAgIHZhciByZXN1bHQgPSBbXTtcbiAgICAgICAgZWFjaGZuKGFyciwgZnVuY3Rpb24gKHgsIGluZGV4LCBjYikge1xuICAgICAgICAgICAgZm4oeCwgZnVuY3Rpb24gKGVyciwgeSkge1xuICAgICAgICAgICAgICAgIHJlc3VsdCA9IHJlc3VsdC5jb25jYXQoeSB8fCBbXSk7XG4gICAgICAgICAgICAgICAgY2IoZXJyKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICBjYWxsYmFjayhlcnIsIHJlc3VsdCk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBhc3luYy5jb25jYXQgPSBkb1BhcmFsbGVsKF9jb25jYXQpO1xuICAgIGFzeW5jLmNvbmNhdFNlcmllcyA9IGRvU2VyaWVzKF9jb25jYXQpO1xuXG4gICAgYXN5bmMud2hpbHN0ID0gZnVuY3Rpb24gKHRlc3QsIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICBjYWxsYmFjayA9IGNhbGxiYWNrIHx8IG5vb3A7XG4gICAgICAgIGlmICh0ZXN0KCkpIHtcbiAgICAgICAgICAgIHZhciBuZXh0ID0gX3Jlc3RQYXJhbShmdW5jdGlvbihlcnIsIGFyZ3MpIHtcbiAgICAgICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0ZXN0LmFwcGx5KHRoaXMsIGFyZ3MpKSB7XG4gICAgICAgICAgICAgICAgICAgIGl0ZXJhdG9yKG5leHQpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKG51bGwpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgaXRlcmF0b3IobmV4dCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjYWxsYmFjayhudWxsKTtcbiAgICAgICAgfVxuICAgIH07XG5cbiAgICBhc3luYy5kb1doaWxzdCA9IGZ1bmN0aW9uIChpdGVyYXRvciwgdGVzdCwgY2FsbGJhY2spIHtcbiAgICAgICAgdmFyIGNhbGxzID0gMDtcbiAgICAgICAgcmV0dXJuIGFzeW5jLndoaWxzdChmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIHJldHVybiArK2NhbGxzIDw9IDEgfHwgdGVzdC5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgICAgICB9LCBpdGVyYXRvciwgY2FsbGJhY2spO1xuICAgIH07XG5cbiAgICBhc3luYy51bnRpbCA9IGZ1bmN0aW9uICh0ZXN0LCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgcmV0dXJuIGFzeW5jLndoaWxzdChmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIHJldHVybiAhdGVzdC5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgICAgICB9LCBpdGVyYXRvciwgY2FsbGJhY2spO1xuICAgIH07XG5cbiAgICBhc3luYy5kb1VudGlsID0gZnVuY3Rpb24gKGl0ZXJhdG9yLCB0ZXN0LCBjYWxsYmFjaykge1xuICAgICAgICByZXR1cm4gYXN5bmMuZG9XaGlsc3QoaXRlcmF0b3IsIGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgcmV0dXJuICF0ZXN0LmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgICAgIH0sIGNhbGxiYWNrKTtcbiAgICB9O1xuXG4gICAgYXN5bmMuZHVyaW5nID0gZnVuY3Rpb24gKHRlc3QsIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICBjYWxsYmFjayA9IGNhbGxiYWNrIHx8IG5vb3A7XG5cbiAgICAgICAgdmFyIG5leHQgPSBfcmVzdFBhcmFtKGZ1bmN0aW9uKGVyciwgYXJncykge1xuICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGFyZ3MucHVzaChjaGVjayk7XG4gICAgICAgICAgICAgICAgdGVzdC5hcHBseSh0aGlzLCBhcmdzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgdmFyIGNoZWNrID0gZnVuY3Rpb24oZXJyLCB0cnV0aCkge1xuICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHRydXRoKSB7XG4gICAgICAgICAgICAgICAgaXRlcmF0b3IobmV4dCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrKG51bGwpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuXG4gICAgICAgIHRlc3QoY2hlY2spO1xuICAgIH07XG5cbiAgICBhc3luYy5kb0R1cmluZyA9IGZ1bmN0aW9uIChpdGVyYXRvciwgdGVzdCwgY2FsbGJhY2spIHtcbiAgICAgICAgdmFyIGNhbGxzID0gMDtcbiAgICAgICAgYXN5bmMuZHVyaW5nKGZ1bmN0aW9uKG5leHQpIHtcbiAgICAgICAgICAgIGlmIChjYWxscysrIDwgMSkge1xuICAgICAgICAgICAgICAgIG5leHQobnVsbCwgdHJ1ZSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRlc3QuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSwgaXRlcmF0b3IsIGNhbGxiYWNrKTtcbiAgICB9O1xuXG4gICAgZnVuY3Rpb24gX3F1ZXVlKHdvcmtlciwgY29uY3VycmVuY3ksIHBheWxvYWQpIHtcbiAgICAgICAgaWYgKGNvbmN1cnJlbmN5ID09IG51bGwpIHtcbiAgICAgICAgICAgIGNvbmN1cnJlbmN5ID0gMTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmKGNvbmN1cnJlbmN5ID09PSAwKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0NvbmN1cnJlbmN5IG11c3Qgbm90IGJlIHplcm8nKTtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBfaW5zZXJ0KHEsIGRhdGEsIHBvcywgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIGlmIChjYWxsYmFjayAhPSBudWxsICYmIHR5cGVvZiBjYWxsYmFjayAhPT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwidGFzayBjYWxsYmFjayBtdXN0IGJlIGEgZnVuY3Rpb25cIik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBxLnN0YXJ0ZWQgPSB0cnVlO1xuICAgICAgICAgICAgaWYgKCFfaXNBcnJheShkYXRhKSkge1xuICAgICAgICAgICAgICAgIGRhdGEgPSBbZGF0YV07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZihkYXRhLmxlbmd0aCA9PT0gMCAmJiBxLmlkbGUoKSkge1xuICAgICAgICAgICAgICAgIC8vIGNhbGwgZHJhaW4gaW1tZWRpYXRlbHkgaWYgdGhlcmUgYXJlIG5vIHRhc2tzXG4gICAgICAgICAgICAgICAgcmV0dXJuIGFzeW5jLnNldEltbWVkaWF0ZShmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgICAgcS5kcmFpbigpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgX2FycmF5RWFjaChkYXRhLCBmdW5jdGlvbih0YXNrKSB7XG4gICAgICAgICAgICAgICAgdmFyIGl0ZW0gPSB7XG4gICAgICAgICAgICAgICAgICAgIGRhdGE6IHRhc2ssXG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrOiBjYWxsYmFjayB8fCBub29wXG4gICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgIGlmIChwb3MpIHtcbiAgICAgICAgICAgICAgICAgICAgcS50YXNrcy51bnNoaWZ0KGl0ZW0pO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHEudGFza3MucHVzaChpdGVtKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAocS50YXNrcy5sZW5ndGggPT09IHEuY29uY3VycmVuY3kpIHtcbiAgICAgICAgICAgICAgICAgICAgcS5zYXR1cmF0ZWQoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGFzeW5jLnNldEltbWVkaWF0ZShxLnByb2Nlc3MpO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIF9uZXh0KHEsIHRhc2tzKSB7XG4gICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24oKXtcbiAgICAgICAgICAgICAgICB3b3JrZXJzIC09IDE7XG5cbiAgICAgICAgICAgICAgICB2YXIgcmVtb3ZlZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHZhciBhcmdzID0gYXJndW1lbnRzO1xuICAgICAgICAgICAgICAgIF9hcnJheUVhY2godGFza3MsIGZ1bmN0aW9uICh0YXNrKSB7XG4gICAgICAgICAgICAgICAgICAgIF9hcnJheUVhY2god29ya2Vyc0xpc3QsIGZ1bmN0aW9uICh3b3JrZXIsIGluZGV4KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAod29ya2VyID09PSB0YXNrICYmICFyZW1vdmVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd29ya2Vyc0xpc3Quc3BsaWNlKGluZGV4LCAxKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZW1vdmVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICAgICAgdGFzay5jYWxsYmFjay5hcHBseSh0YXNrLCBhcmdzKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBpZiAocS50YXNrcy5sZW5ndGggKyB3b3JrZXJzID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIHEuZHJhaW4oKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcS5wcm9jZXNzKCk7XG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIHdvcmtlcnMgPSAwO1xuICAgICAgICB2YXIgd29ya2Vyc0xpc3QgPSBbXTtcbiAgICAgICAgdmFyIHEgPSB7XG4gICAgICAgICAgICB0YXNrczogW10sXG4gICAgICAgICAgICBjb25jdXJyZW5jeTogY29uY3VycmVuY3ksXG4gICAgICAgICAgICBwYXlsb2FkOiBwYXlsb2FkLFxuICAgICAgICAgICAgc2F0dXJhdGVkOiBub29wLFxuICAgICAgICAgICAgZW1wdHk6IG5vb3AsXG4gICAgICAgICAgICBkcmFpbjogbm9vcCxcbiAgICAgICAgICAgIHN0YXJ0ZWQ6IGZhbHNlLFxuICAgICAgICAgICAgcGF1c2VkOiBmYWxzZSxcbiAgICAgICAgICAgIHB1c2g6IGZ1bmN0aW9uIChkYXRhLCBjYWxsYmFjaykge1xuICAgICAgICAgICAgICAgIF9pbnNlcnQocSwgZGF0YSwgZmFsc2UsIGNhbGxiYWNrKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBraWxsOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgcS5kcmFpbiA9IG5vb3A7XG4gICAgICAgICAgICAgICAgcS50YXNrcyA9IFtdO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHVuc2hpZnQ6IGZ1bmN0aW9uIChkYXRhLCBjYWxsYmFjaykge1xuICAgICAgICAgICAgICAgIF9pbnNlcnQocSwgZGF0YSwgdHJ1ZSwgY2FsbGJhY2spO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHByb2Nlc3M6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBpZiAoIXEucGF1c2VkICYmIHdvcmtlcnMgPCBxLmNvbmN1cnJlbmN5ICYmIHEudGFza3MubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgIHdoaWxlKHdvcmtlcnMgPCBxLmNvbmN1cnJlbmN5ICYmIHEudGFza3MubGVuZ3RoKXtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0YXNrcyA9IHEucGF5bG9hZCA/XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcS50YXNrcy5zcGxpY2UoMCwgcS5wYXlsb2FkKSA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcS50YXNrcy5zcGxpY2UoMCwgcS50YXNrcy5sZW5ndGgpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgZGF0YSA9IF9tYXAodGFza3MsIGZ1bmN0aW9uICh0YXNrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRhc2suZGF0YTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocS50YXNrcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBxLmVtcHR5KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB3b3JrZXJzICs9IDE7XG4gICAgICAgICAgICAgICAgICAgICAgICB3b3JrZXJzTGlzdC5wdXNoKHRhc2tzWzBdKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjYiA9IG9ubHlfb25jZShfbmV4dChxLCB0YXNrcykpO1xuICAgICAgICAgICAgICAgICAgICAgICAgd29ya2VyKGRhdGEsIGNiKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBsZW5ndGg6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcS50YXNrcy5sZW5ndGg7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcnVubmluZzogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB3b3JrZXJzO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHdvcmtlcnNMaXN0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHdvcmtlcnNMaXN0O1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGlkbGU6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBxLnRhc2tzLmxlbmd0aCArIHdvcmtlcnMgPT09IDA7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcGF1c2U6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBxLnBhdXNlZCA9IHRydWU7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcmVzdW1lOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgaWYgKHEucGF1c2VkID09PSBmYWxzZSkgeyByZXR1cm47IH1cbiAgICAgICAgICAgICAgICBxLnBhdXNlZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHZhciByZXN1bWVDb3VudCA9IE1hdGgubWluKHEuY29uY3VycmVuY3ksIHEudGFza3MubGVuZ3RoKTtcbiAgICAgICAgICAgICAgICAvLyBOZWVkIHRvIGNhbGwgcS5wcm9jZXNzIG9uY2UgcGVyIGNvbmN1cnJlbnRcbiAgICAgICAgICAgICAgICAvLyB3b3JrZXIgdG8gcHJlc2VydmUgZnVsbCBjb25jdXJyZW5jeSBhZnRlciBwYXVzZVxuICAgICAgICAgICAgICAgIGZvciAodmFyIHcgPSAxOyB3IDw9IHJlc3VtZUNvdW50OyB3KyspIHtcbiAgICAgICAgICAgICAgICAgICAgYXN5bmMuc2V0SW1tZWRpYXRlKHEucHJvY2Vzcyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gcTtcbiAgICB9XG5cbiAgICBhc3luYy5xdWV1ZSA9IGZ1bmN0aW9uICh3b3JrZXIsIGNvbmN1cnJlbmN5KSB7XG4gICAgICAgIHZhciBxID0gX3F1ZXVlKGZ1bmN0aW9uIChpdGVtcywgY2IpIHtcbiAgICAgICAgICAgIHdvcmtlcihpdGVtc1swXSwgY2IpO1xuICAgICAgICB9LCBjb25jdXJyZW5jeSwgMSk7XG5cbiAgICAgICAgcmV0dXJuIHE7XG4gICAgfTtcblxuICAgIGFzeW5jLnByaW9yaXR5UXVldWUgPSBmdW5jdGlvbiAod29ya2VyLCBjb25jdXJyZW5jeSkge1xuXG4gICAgICAgIGZ1bmN0aW9uIF9jb21wYXJlVGFza3MoYSwgYil7XG4gICAgICAgICAgICByZXR1cm4gYS5wcmlvcml0eSAtIGIucHJpb3JpdHk7XG4gICAgICAgIH1cblxuICAgICAgICBmdW5jdGlvbiBfYmluYXJ5U2VhcmNoKHNlcXVlbmNlLCBpdGVtLCBjb21wYXJlKSB7XG4gICAgICAgICAgICB2YXIgYmVnID0gLTEsXG4gICAgICAgICAgICAgICAgZW5kID0gc2VxdWVuY2UubGVuZ3RoIC0gMTtcbiAgICAgICAgICAgIHdoaWxlIChiZWcgPCBlbmQpIHtcbiAgICAgICAgICAgICAgICB2YXIgbWlkID0gYmVnICsgKChlbmQgLSBiZWcgKyAxKSA+Pj4gMSk7XG4gICAgICAgICAgICAgICAgaWYgKGNvbXBhcmUoaXRlbSwgc2VxdWVuY2VbbWlkXSkgPj0gMCkge1xuICAgICAgICAgICAgICAgICAgICBiZWcgPSBtaWQ7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgZW5kID0gbWlkIC0gMTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gYmVnO1xuICAgICAgICB9XG5cbiAgICAgICAgZnVuY3Rpb24gX2luc2VydChxLCBkYXRhLCBwcmlvcml0eSwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIGlmIChjYWxsYmFjayAhPSBudWxsICYmIHR5cGVvZiBjYWxsYmFjayAhPT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwidGFzayBjYWxsYmFjayBtdXN0IGJlIGEgZnVuY3Rpb25cIik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBxLnN0YXJ0ZWQgPSB0cnVlO1xuICAgICAgICAgICAgaWYgKCFfaXNBcnJheShkYXRhKSkge1xuICAgICAgICAgICAgICAgIGRhdGEgPSBbZGF0YV07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZihkYXRhLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICAgIC8vIGNhbGwgZHJhaW4gaW1tZWRpYXRlbHkgaWYgdGhlcmUgYXJlIG5vIHRhc2tzXG4gICAgICAgICAgICAgICAgcmV0dXJuIGFzeW5jLnNldEltbWVkaWF0ZShmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgICAgcS5kcmFpbigpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgX2FycmF5RWFjaChkYXRhLCBmdW5jdGlvbih0YXNrKSB7XG4gICAgICAgICAgICAgICAgdmFyIGl0ZW0gPSB7XG4gICAgICAgICAgICAgICAgICAgIGRhdGE6IHRhc2ssXG4gICAgICAgICAgICAgICAgICAgIHByaW9yaXR5OiBwcmlvcml0eSxcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2s6IHR5cGVvZiBjYWxsYmFjayA9PT0gJ2Z1bmN0aW9uJyA/IGNhbGxiYWNrIDogbm9vcFxuICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICBxLnRhc2tzLnNwbGljZShfYmluYXJ5U2VhcmNoKHEudGFza3MsIGl0ZW0sIF9jb21wYXJlVGFza3MpICsgMSwgMCwgaXRlbSk7XG5cbiAgICAgICAgICAgICAgICBpZiAocS50YXNrcy5sZW5ndGggPT09IHEuY29uY3VycmVuY3kpIHtcbiAgICAgICAgICAgICAgICAgICAgcS5zYXR1cmF0ZWQoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYXN5bmMuc2V0SW1tZWRpYXRlKHEucHJvY2Vzcyk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFN0YXJ0IHdpdGggYSBub3JtYWwgcXVldWVcbiAgICAgICAgdmFyIHEgPSBhc3luYy5xdWV1ZSh3b3JrZXIsIGNvbmN1cnJlbmN5KTtcblxuICAgICAgICAvLyBPdmVycmlkZSBwdXNoIHRvIGFjY2VwdCBzZWNvbmQgcGFyYW1ldGVyIHJlcHJlc2VudGluZyBwcmlvcml0eVxuICAgICAgICBxLnB1c2ggPSBmdW5jdGlvbiAoZGF0YSwgcHJpb3JpdHksIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICBfaW5zZXJ0KHEsIGRhdGEsIHByaW9yaXR5LCBjYWxsYmFjayk7XG4gICAgICAgIH07XG5cbiAgICAgICAgLy8gUmVtb3ZlIHVuc2hpZnQgZnVuY3Rpb25cbiAgICAgICAgZGVsZXRlIHEudW5zaGlmdDtcblxuICAgICAgICByZXR1cm4gcTtcbiAgICB9O1xuXG4gICAgYXN5bmMuY2FyZ28gPSBmdW5jdGlvbiAod29ya2VyLCBwYXlsb2FkKSB7XG4gICAgICAgIHJldHVybiBfcXVldWUod29ya2VyLCAxLCBwYXlsb2FkKTtcbiAgICB9O1xuXG4gICAgZnVuY3Rpb24gX2NvbnNvbGVfZm4obmFtZSkge1xuICAgICAgICByZXR1cm4gX3Jlc3RQYXJhbShmdW5jdGlvbiAoZm4sIGFyZ3MpIHtcbiAgICAgICAgICAgIGZuLmFwcGx5KG51bGwsIGFyZ3MuY29uY2F0KFtfcmVzdFBhcmFtKGZ1bmN0aW9uIChlcnIsIGFyZ3MpIHtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGNvbnNvbGUgPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb25zb2xlLmVycm9yKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihlcnIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKGNvbnNvbGVbbmFtZV0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIF9hcnJheUVhY2goYXJncywgZnVuY3Rpb24gKHgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlW25hbWVdKHgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KV0pKTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGFzeW5jLmxvZyA9IF9jb25zb2xlX2ZuKCdsb2cnKTtcbiAgICBhc3luYy5kaXIgPSBfY29uc29sZV9mbignZGlyJyk7XG4gICAgLyphc3luYy5pbmZvID0gX2NvbnNvbGVfZm4oJ2luZm8nKTtcbiAgICBhc3luYy53YXJuID0gX2NvbnNvbGVfZm4oJ3dhcm4nKTtcbiAgICBhc3luYy5lcnJvciA9IF9jb25zb2xlX2ZuKCdlcnJvcicpOyovXG5cbiAgICBhc3luYy5tZW1vaXplID0gZnVuY3Rpb24gKGZuLCBoYXNoZXIpIHtcbiAgICAgICAgdmFyIG1lbW8gPSB7fTtcbiAgICAgICAgdmFyIHF1ZXVlcyA9IHt9O1xuICAgICAgICBoYXNoZXIgPSBoYXNoZXIgfHwgaWRlbnRpdHk7XG4gICAgICAgIHZhciBtZW1vaXplZCA9IF9yZXN0UGFyYW0oZnVuY3Rpb24gbWVtb2l6ZWQoYXJncykge1xuICAgICAgICAgICAgdmFyIGNhbGxiYWNrID0gYXJncy5wb3AoKTtcbiAgICAgICAgICAgIHZhciBrZXkgPSBoYXNoZXIuYXBwbHkobnVsbCwgYXJncyk7XG4gICAgICAgICAgICBpZiAoa2V5IGluIG1lbW8pIHtcbiAgICAgICAgICAgICAgICBhc3luYy5zZXRJbW1lZGlhdGUoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjay5hcHBseShudWxsLCBtZW1vW2tleV0pO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoa2V5IGluIHF1ZXVlcykge1xuICAgICAgICAgICAgICAgIHF1ZXVlc1trZXldLnB1c2goY2FsbGJhY2spO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgcXVldWVzW2tleV0gPSBbY2FsbGJhY2tdO1xuICAgICAgICAgICAgICAgIGZuLmFwcGx5KG51bGwsIGFyZ3MuY29uY2F0KFtfcmVzdFBhcmFtKGZ1bmN0aW9uIChhcmdzKSB7XG4gICAgICAgICAgICAgICAgICAgIG1lbW9ba2V5XSA9IGFyZ3M7XG4gICAgICAgICAgICAgICAgICAgIHZhciBxID0gcXVldWVzW2tleV07XG4gICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBxdWV1ZXNba2V5XTtcbiAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDAsIGwgPSBxLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgcVtpXS5hcHBseShudWxsLCBhcmdzKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pXSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgbWVtb2l6ZWQubWVtbyA9IG1lbW87XG4gICAgICAgIG1lbW9pemVkLnVubWVtb2l6ZWQgPSBmbjtcbiAgICAgICAgcmV0dXJuIG1lbW9pemVkO1xuICAgIH07XG5cbiAgICBhc3luYy51bm1lbW9pemUgPSBmdW5jdGlvbiAoZm4pIHtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiAoZm4udW5tZW1vaXplZCB8fCBmbikuYXBwbHkobnVsbCwgYXJndW1lbnRzKTtcbiAgICAgICAgfTtcbiAgICB9O1xuXG4gICAgZnVuY3Rpb24gX3RpbWVzKG1hcHBlcikge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKGNvdW50LCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIG1hcHBlcihfcmFuZ2UoY291bnQpLCBpdGVyYXRvciwgY2FsbGJhY2spO1xuICAgICAgICB9O1xuICAgIH1cblxuICAgIGFzeW5jLnRpbWVzID0gX3RpbWVzKGFzeW5jLm1hcCk7XG4gICAgYXN5bmMudGltZXNTZXJpZXMgPSBfdGltZXMoYXN5bmMubWFwU2VyaWVzKTtcbiAgICBhc3luYy50aW1lc0xpbWl0ID0gZnVuY3Rpb24gKGNvdW50LCBsaW1pdCwgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgIHJldHVybiBhc3luYy5tYXBMaW1pdChfcmFuZ2UoY291bnQpLCBsaW1pdCwgaXRlcmF0b3IsIGNhbGxiYWNrKTtcbiAgICB9O1xuXG4gICAgYXN5bmMuc2VxID0gZnVuY3Rpb24gKC8qIGZ1bmN0aW9ucy4uLiAqLykge1xuICAgICAgICB2YXIgZm5zID0gYXJndW1lbnRzO1xuICAgICAgICByZXR1cm4gX3Jlc3RQYXJhbShmdW5jdGlvbiAoYXJncykge1xuICAgICAgICAgICAgdmFyIHRoYXQgPSB0aGlzO1xuXG4gICAgICAgICAgICB2YXIgY2FsbGJhY2sgPSBhcmdzW2FyZ3MubGVuZ3RoIC0gMV07XG4gICAgICAgICAgICBpZiAodHlwZW9mIGNhbGxiYWNrID09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICBhcmdzLnBvcCgpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBjYWxsYmFjayA9IG5vb3A7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGFzeW5jLnJlZHVjZShmbnMsIGFyZ3MsIGZ1bmN0aW9uIChuZXdhcmdzLCBmbiwgY2IpIHtcbiAgICAgICAgICAgICAgICBmbi5hcHBseSh0aGF0LCBuZXdhcmdzLmNvbmNhdChbX3Jlc3RQYXJhbShmdW5jdGlvbiAoZXJyLCBuZXh0YXJncykge1xuICAgICAgICAgICAgICAgICAgICBjYihlcnIsIG5leHRhcmdzKTtcbiAgICAgICAgICAgICAgICB9KV0pKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBmdW5jdGlvbiAoZXJyLCByZXN1bHRzKSB7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2suYXBwbHkodGhhdCwgW2Vycl0uY29uY2F0KHJlc3VsdHMpKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9O1xuXG4gICAgYXN5bmMuY29tcG9zZSA9IGZ1bmN0aW9uICgvKiBmdW5jdGlvbnMuLi4gKi8pIHtcbiAgICAgICAgcmV0dXJuIGFzeW5jLnNlcS5hcHBseShudWxsLCBBcnJheS5wcm90b3R5cGUucmV2ZXJzZS5jYWxsKGFyZ3VtZW50cykpO1xuICAgIH07XG5cblxuICAgIGZ1bmN0aW9uIF9hcHBseUVhY2goZWFjaGZuKSB7XG4gICAgICAgIHJldHVybiBfcmVzdFBhcmFtKGZ1bmN0aW9uKGZucywgYXJncykge1xuICAgICAgICAgICAgdmFyIGdvID0gX3Jlc3RQYXJhbShmdW5jdGlvbihhcmdzKSB7XG4gICAgICAgICAgICAgICAgdmFyIHRoYXQgPSB0aGlzO1xuICAgICAgICAgICAgICAgIHZhciBjYWxsYmFjayA9IGFyZ3MucG9wKCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGVhY2hmbihmbnMsIGZ1bmN0aW9uIChmbiwgXywgY2IpIHtcbiAgICAgICAgICAgICAgICAgICAgZm4uYXBwbHkodGhhdCwgYXJncy5jb25jYXQoW2NiXSkpO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgY2FsbGJhY2spO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBpZiAoYXJncy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZ28uYXBwbHkodGhpcywgYXJncyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZ287XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGFzeW5jLmFwcGx5RWFjaCA9IF9hcHBseUVhY2goYXN5bmMuZWFjaE9mKTtcbiAgICBhc3luYy5hcHBseUVhY2hTZXJpZXMgPSBfYXBwbHlFYWNoKGFzeW5jLmVhY2hPZlNlcmllcyk7XG5cblxuICAgIGFzeW5jLmZvcmV2ZXIgPSBmdW5jdGlvbiAoZm4sIGNhbGxiYWNrKSB7XG4gICAgICAgIHZhciBkb25lID0gb25seV9vbmNlKGNhbGxiYWNrIHx8IG5vb3ApO1xuICAgICAgICB2YXIgdGFzayA9IGVuc3VyZUFzeW5jKGZuKTtcbiAgICAgICAgZnVuY3Rpb24gbmV4dChlcnIpIHtcbiAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZG9uZShlcnIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGFzayhuZXh0KTtcbiAgICAgICAgfVxuICAgICAgICBuZXh0KCk7XG4gICAgfTtcblxuICAgIGZ1bmN0aW9uIGVuc3VyZUFzeW5jKGZuKSB7XG4gICAgICAgIHJldHVybiBfcmVzdFBhcmFtKGZ1bmN0aW9uIChhcmdzKSB7XG4gICAgICAgICAgICB2YXIgY2FsbGJhY2sgPSBhcmdzLnBvcCgpO1xuICAgICAgICAgICAgYXJncy5wdXNoKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICB2YXIgaW5uZXJBcmdzID0gYXJndW1lbnRzO1xuICAgICAgICAgICAgICAgIGlmIChzeW5jKSB7XG4gICAgICAgICAgICAgICAgICAgIGFzeW5jLnNldEltbWVkaWF0ZShmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjYWxsYmFjay5hcHBseShudWxsLCBpbm5lckFyZ3MpO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjay5hcHBseShudWxsLCBpbm5lckFyZ3MpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdmFyIHN5bmMgPSB0cnVlO1xuICAgICAgICAgICAgZm4uYXBwbHkodGhpcywgYXJncyk7XG4gICAgICAgICAgICBzeW5jID0gZmFsc2U7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGFzeW5jLmVuc3VyZUFzeW5jID0gZW5zdXJlQXN5bmM7XG5cbiAgICBhc3luYy5jb25zdGFudCA9IF9yZXN0UGFyYW0oZnVuY3Rpb24odmFsdWVzKSB7XG4gICAgICAgIHZhciBhcmdzID0gW251bGxdLmNvbmNhdCh2YWx1ZXMpO1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKGNhbGxiYWNrKSB7XG4gICAgICAgICAgICByZXR1cm4gY2FsbGJhY2suYXBwbHkodGhpcywgYXJncyk7XG4gICAgICAgIH07XG4gICAgfSk7XG5cbiAgICBhc3luYy53cmFwU3luYyA9XG4gICAgYXN5bmMuYXN5bmNpZnkgPSBmdW5jdGlvbiBhc3luY2lmeShmdW5jKSB7XG4gICAgICAgIHJldHVybiBfcmVzdFBhcmFtKGZ1bmN0aW9uIChhcmdzKSB7XG4gICAgICAgICAgICB2YXIgY2FsbGJhY2sgPSBhcmdzLnBvcCgpO1xuICAgICAgICAgICAgdmFyIHJlc3VsdDtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0ID0gZnVuYy5hcHBseSh0aGlzLCBhcmdzKTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gY2FsbGJhY2soZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBpZiByZXN1bHQgaXMgUHJvbWlzZSBvYmplY3RcbiAgICAgICAgICAgIGlmIChfaXNPYmplY3QocmVzdWx0KSAmJiB0eXBlb2YgcmVzdWx0LnRoZW4gPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICAgICAgICAgIHJlc3VsdC50aGVuKGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKG51bGwsIHZhbHVlKTtcbiAgICAgICAgICAgICAgICB9KVtcImNhdGNoXCJdKGZ1bmN0aW9uKGVycikge1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnIubWVzc2FnZSA/IGVyciA6IG5ldyBFcnJvcihlcnIpKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2sobnVsbCwgcmVzdWx0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfTtcblxuICAgIC8vIE5vZGUuanNcbiAgICBpZiAodHlwZW9mIG1vZHVsZSA9PT0gJ29iamVjdCcgJiYgbW9kdWxlLmV4cG9ydHMpIHtcbiAgICAgICAgbW9kdWxlLmV4cG9ydHMgPSBhc3luYztcbiAgICB9XG4gICAgLy8gQU1EIC8gUmVxdWlyZUpTXG4gICAgZWxzZSBpZiAodHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kKSB7XG4gICAgICAgIGRlZmluZShbXSwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIGFzeW5jO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgLy8gaW5jbHVkZWQgZGlyZWN0bHkgdmlhIDxzY3JpcHQ+IHRhZ1xuICAgIGVsc2Uge1xuICAgICAgICByb290LmFzeW5jID0gYXN5bmM7XG4gICAgfVxuXG59KCkpO1xuIiwiLy8gQ29weXJpZ2h0IEpveWVudCwgSW5jLiBhbmQgb3RoZXIgTm9kZSBjb250cmlidXRvcnMuXG4vL1xuLy8gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGFcbi8vIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGVcbi8vIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZ1xuLy8gd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLFxuLy8gZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdFxuLy8gcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlXG4vLyBmb2xsb3dpbmcgY29uZGl0aW9uczpcbi8vXG4vLyBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZFxuLy8gaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4vL1xuLy8gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTU1xuLy8gT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRlxuLy8gTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTlxuLy8gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sXG4vLyBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1Jcbi8vIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEVcbi8vIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG5cbi8vIHJlc29sdmVzIC4gYW5kIC4uIGVsZW1lbnRzIGluIGEgcGF0aCBhcnJheSB3aXRoIGRpcmVjdG9yeSBuYW1lcyB0aGVyZVxuLy8gbXVzdCBiZSBubyBzbGFzaGVzLCBlbXB0eSBlbGVtZW50cywgb3IgZGV2aWNlIG5hbWVzIChjOlxcKSBpbiB0aGUgYXJyYXlcbi8vIChzbyBhbHNvIG5vIGxlYWRpbmcgYW5kIHRyYWlsaW5nIHNsYXNoZXMgLSBpdCBkb2VzIG5vdCBkaXN0aW5ndWlzaFxuLy8gcmVsYXRpdmUgYW5kIGFic29sdXRlIHBhdGhzKVxuZnVuY3Rpb24gbm9ybWFsaXplQXJyYXkocGFydHMsIGFsbG93QWJvdmVSb290KSB7XG4gIC8vIGlmIHRoZSBwYXRoIHRyaWVzIHRvIGdvIGFib3ZlIHRoZSByb290LCBgdXBgIGVuZHMgdXAgPiAwXG4gIHZhciB1cCA9IDA7XG4gIGZvciAodmFyIGkgPSBwYXJ0cy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgIHZhciBsYXN0ID0gcGFydHNbaV07XG4gICAgaWYgKGxhc3QgPT09ICcuJykge1xuICAgICAgcGFydHMuc3BsaWNlKGksIDEpO1xuICAgIH0gZWxzZSBpZiAobGFzdCA9PT0gJy4uJykge1xuICAgICAgcGFydHMuc3BsaWNlKGksIDEpO1xuICAgICAgdXArKztcbiAgICB9IGVsc2UgaWYgKHVwKSB7XG4gICAgICBwYXJ0cy5zcGxpY2UoaSwgMSk7XG4gICAgICB1cC0tO1xuICAgIH1cbiAgfVxuXG4gIC8vIGlmIHRoZSBwYXRoIGlzIGFsbG93ZWQgdG8gZ28gYWJvdmUgdGhlIHJvb3QsIHJlc3RvcmUgbGVhZGluZyAuLnNcbiAgaWYgKGFsbG93QWJvdmVSb290KSB7XG4gICAgZm9yICg7IHVwLS07IHVwKSB7XG4gICAgICBwYXJ0cy51bnNoaWZ0KCcuLicpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBwYXJ0cztcbn1cblxuLy8gU3BsaXQgYSBmaWxlbmFtZSBpbnRvIFtyb290LCBkaXIsIGJhc2VuYW1lLCBleHRdLCB1bml4IHZlcnNpb25cbi8vICdyb290JyBpcyBqdXN0IGEgc2xhc2gsIG9yIG5vdGhpbmcuXG52YXIgc3BsaXRQYXRoUmUgPVxuICAgIC9eKFxcLz98KShbXFxzXFxTXSo/KSgoPzpcXC57MSwyfXxbXlxcL10rP3wpKFxcLlteLlxcL10qfCkpKD86W1xcL10qKSQvO1xudmFyIHNwbGl0UGF0aCA9IGZ1bmN0aW9uKGZpbGVuYW1lKSB7XG4gIHJldHVybiBzcGxpdFBhdGhSZS5leGVjKGZpbGVuYW1lKS5zbGljZSgxKTtcbn07XG5cbi8vIHBhdGgucmVzb2x2ZShbZnJvbSAuLi5dLCB0bylcbi8vIHBvc2l4IHZlcnNpb25cbmV4cG9ydHMucmVzb2x2ZSA9IGZ1bmN0aW9uKCkge1xuICB2YXIgcmVzb2x2ZWRQYXRoID0gJycsXG4gICAgICByZXNvbHZlZEFic29sdXRlID0gZmFsc2U7XG5cbiAgZm9yICh2YXIgaSA9IGFyZ3VtZW50cy5sZW5ndGggLSAxOyBpID49IC0xICYmICFyZXNvbHZlZEFic29sdXRlOyBpLS0pIHtcbiAgICB2YXIgcGF0aCA9IChpID49IDApID8gYXJndW1lbnRzW2ldIDogcHJvY2Vzcy5jd2QoKTtcblxuICAgIC8vIFNraXAgZW1wdHkgYW5kIGludmFsaWQgZW50cmllc1xuICAgIGlmICh0eXBlb2YgcGF0aCAhPT0gJ3N0cmluZycpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0FyZ3VtZW50cyB0byBwYXRoLnJlc29sdmUgbXVzdCBiZSBzdHJpbmdzJyk7XG4gICAgfSBlbHNlIGlmICghcGF0aCkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgcmVzb2x2ZWRQYXRoID0gcGF0aCArICcvJyArIHJlc29sdmVkUGF0aDtcbiAgICByZXNvbHZlZEFic29sdXRlID0gcGF0aC5jaGFyQXQoMCkgPT09ICcvJztcbiAgfVxuXG4gIC8vIEF0IHRoaXMgcG9pbnQgdGhlIHBhdGggc2hvdWxkIGJlIHJlc29sdmVkIHRvIGEgZnVsbCBhYnNvbHV0ZSBwYXRoLCBidXRcbiAgLy8gaGFuZGxlIHJlbGF0aXZlIHBhdGhzIHRvIGJlIHNhZmUgKG1pZ2h0IGhhcHBlbiB3aGVuIHByb2Nlc3MuY3dkKCkgZmFpbHMpXG5cbiAgLy8gTm9ybWFsaXplIHRoZSBwYXRoXG4gIHJlc29sdmVkUGF0aCA9IG5vcm1hbGl6ZUFycmF5KGZpbHRlcihyZXNvbHZlZFBhdGguc3BsaXQoJy8nKSwgZnVuY3Rpb24ocCkge1xuICAgIHJldHVybiAhIXA7XG4gIH0pLCAhcmVzb2x2ZWRBYnNvbHV0ZSkuam9pbignLycpO1xuXG4gIHJldHVybiAoKHJlc29sdmVkQWJzb2x1dGUgPyAnLycgOiAnJykgKyByZXNvbHZlZFBhdGgpIHx8ICcuJztcbn07XG5cbi8vIHBhdGgubm9ybWFsaXplKHBhdGgpXG4vLyBwb3NpeCB2ZXJzaW9uXG5leHBvcnRzLm5vcm1hbGl6ZSA9IGZ1bmN0aW9uKHBhdGgpIHtcbiAgdmFyIGlzQWJzb2x1dGUgPSBleHBvcnRzLmlzQWJzb2x1dGUocGF0aCksXG4gICAgICB0cmFpbGluZ1NsYXNoID0gc3Vic3RyKHBhdGgsIC0xKSA9PT0gJy8nO1xuXG4gIC8vIE5vcm1hbGl6ZSB0aGUgcGF0aFxuICBwYXRoID0gbm9ybWFsaXplQXJyYXkoZmlsdGVyKHBhdGguc3BsaXQoJy8nKSwgZnVuY3Rpb24ocCkge1xuICAgIHJldHVybiAhIXA7XG4gIH0pLCAhaXNBYnNvbHV0ZSkuam9pbignLycpO1xuXG4gIGlmICghcGF0aCAmJiAhaXNBYnNvbHV0ZSkge1xuICAgIHBhdGggPSAnLic7XG4gIH1cbiAgaWYgKHBhdGggJiYgdHJhaWxpbmdTbGFzaCkge1xuICAgIHBhdGggKz0gJy8nO1xuICB9XG5cbiAgcmV0dXJuIChpc0Fic29sdXRlID8gJy8nIDogJycpICsgcGF0aDtcbn07XG5cbi8vIHBvc2l4IHZlcnNpb25cbmV4cG9ydHMuaXNBYnNvbHV0ZSA9IGZ1bmN0aW9uKHBhdGgpIHtcbiAgcmV0dXJuIHBhdGguY2hhckF0KDApID09PSAnLyc7XG59O1xuXG4vLyBwb3NpeCB2ZXJzaW9uXG5leHBvcnRzLmpvaW4gPSBmdW5jdGlvbigpIHtcbiAgdmFyIHBhdGhzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAwKTtcbiAgcmV0dXJuIGV4cG9ydHMubm9ybWFsaXplKGZpbHRlcihwYXRocywgZnVuY3Rpb24ocCwgaW5kZXgpIHtcbiAgICBpZiAodHlwZW9mIHAgIT09ICdzdHJpbmcnKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdBcmd1bWVudHMgdG8gcGF0aC5qb2luIG11c3QgYmUgc3RyaW5ncycpO1xuICAgIH1cbiAgICByZXR1cm4gcDtcbiAgfSkuam9pbignLycpKTtcbn07XG5cblxuLy8gcGF0aC5yZWxhdGl2ZShmcm9tLCB0bylcbi8vIHBvc2l4IHZlcnNpb25cbmV4cG9ydHMucmVsYXRpdmUgPSBmdW5jdGlvbihmcm9tLCB0bykge1xuICBmcm9tID0gZXhwb3J0cy5yZXNvbHZlKGZyb20pLnN1YnN0cigxKTtcbiAgdG8gPSBleHBvcnRzLnJlc29sdmUodG8pLnN1YnN0cigxKTtcblxuICBmdW5jdGlvbiB0cmltKGFycikge1xuICAgIHZhciBzdGFydCA9IDA7XG4gICAgZm9yICg7IHN0YXJ0IDwgYXJyLmxlbmd0aDsgc3RhcnQrKykge1xuICAgICAgaWYgKGFycltzdGFydF0gIT09ICcnKSBicmVhaztcbiAgICB9XG5cbiAgICB2YXIgZW5kID0gYXJyLmxlbmd0aCAtIDE7XG4gICAgZm9yICg7IGVuZCA+PSAwOyBlbmQtLSkge1xuICAgICAgaWYgKGFycltlbmRdICE9PSAnJykgYnJlYWs7XG4gICAgfVxuXG4gICAgaWYgKHN0YXJ0ID4gZW5kKSByZXR1cm4gW107XG4gICAgcmV0dXJuIGFyci5zbGljZShzdGFydCwgZW5kIC0gc3RhcnQgKyAxKTtcbiAgfVxuXG4gIHZhciBmcm9tUGFydHMgPSB0cmltKGZyb20uc3BsaXQoJy8nKSk7XG4gIHZhciB0b1BhcnRzID0gdHJpbSh0by5zcGxpdCgnLycpKTtcblxuICB2YXIgbGVuZ3RoID0gTWF0aC5taW4oZnJvbVBhcnRzLmxlbmd0aCwgdG9QYXJ0cy5sZW5ndGgpO1xuICB2YXIgc2FtZVBhcnRzTGVuZ3RoID0gbGVuZ3RoO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgaWYgKGZyb21QYXJ0c1tpXSAhPT0gdG9QYXJ0c1tpXSkge1xuICAgICAgc2FtZVBhcnRzTGVuZ3RoID0gaTtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuXG4gIHZhciBvdXRwdXRQYXJ0cyA9IFtdO1xuICBmb3IgKHZhciBpID0gc2FtZVBhcnRzTGVuZ3RoOyBpIDwgZnJvbVBhcnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgb3V0cHV0UGFydHMucHVzaCgnLi4nKTtcbiAgfVxuXG4gIG91dHB1dFBhcnRzID0gb3V0cHV0UGFydHMuY29uY2F0KHRvUGFydHMuc2xpY2Uoc2FtZVBhcnRzTGVuZ3RoKSk7XG5cbiAgcmV0dXJuIG91dHB1dFBhcnRzLmpvaW4oJy8nKTtcbn07XG5cbmV4cG9ydHMuc2VwID0gJy8nO1xuZXhwb3J0cy5kZWxpbWl0ZXIgPSAnOic7XG5cbmV4cG9ydHMuZGlybmFtZSA9IGZ1bmN0aW9uKHBhdGgpIHtcbiAgdmFyIHJlc3VsdCA9IHNwbGl0UGF0aChwYXRoKSxcbiAgICAgIHJvb3QgPSByZXN1bHRbMF0sXG4gICAgICBkaXIgPSByZXN1bHRbMV07XG5cbiAgaWYgKCFyb290ICYmICFkaXIpIHtcbiAgICAvLyBObyBkaXJuYW1lIHdoYXRzb2V2ZXJcbiAgICByZXR1cm4gJy4nO1xuICB9XG5cbiAgaWYgKGRpcikge1xuICAgIC8vIEl0IGhhcyBhIGRpcm5hbWUsIHN0cmlwIHRyYWlsaW5nIHNsYXNoXG4gICAgZGlyID0gZGlyLnN1YnN0cigwLCBkaXIubGVuZ3RoIC0gMSk7XG4gIH1cblxuICByZXR1cm4gcm9vdCArIGRpcjtcbn07XG5cblxuZXhwb3J0cy5iYXNlbmFtZSA9IGZ1bmN0aW9uKHBhdGgsIGV4dCkge1xuICB2YXIgZiA9IHNwbGl0UGF0aChwYXRoKVsyXTtcbiAgLy8gVE9ETzogbWFrZSB0aGlzIGNvbXBhcmlzb24gY2FzZS1pbnNlbnNpdGl2ZSBvbiB3aW5kb3dzP1xuICBpZiAoZXh0ICYmIGYuc3Vic3RyKC0xICogZXh0Lmxlbmd0aCkgPT09IGV4dCkge1xuICAgIGYgPSBmLnN1YnN0cigwLCBmLmxlbmd0aCAtIGV4dC5sZW5ndGgpO1xuICB9XG4gIHJldHVybiBmO1xufTtcblxuXG5leHBvcnRzLmV4dG5hbWUgPSBmdW5jdGlvbihwYXRoKSB7XG4gIHJldHVybiBzcGxpdFBhdGgocGF0aClbM107XG59O1xuXG5mdW5jdGlvbiBmaWx0ZXIgKHhzLCBmKSB7XG4gICAgaWYgKHhzLmZpbHRlcikgcmV0dXJuIHhzLmZpbHRlcihmKTtcbiAgICB2YXIgcmVzID0gW107XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB4cy5sZW5ndGg7IGkrKykge1xuICAgICAgICBpZiAoZih4c1tpXSwgaSwgeHMpKSByZXMucHVzaCh4c1tpXSk7XG4gICAgfVxuICAgIHJldHVybiByZXM7XG59XG5cbi8vIFN0cmluZy5wcm90b3R5cGUuc3Vic3RyIC0gbmVnYXRpdmUgaW5kZXggZG9uJ3Qgd29yayBpbiBJRThcbnZhciBzdWJzdHIgPSAnYWInLnN1YnN0cigtMSkgPT09ICdiJ1xuICAgID8gZnVuY3Rpb24gKHN0ciwgc3RhcnQsIGxlbikgeyByZXR1cm4gc3RyLnN1YnN0cihzdGFydCwgbGVuKSB9XG4gICAgOiBmdW5jdGlvbiAoc3RyLCBzdGFydCwgbGVuKSB7XG4gICAgICAgIGlmIChzdGFydCA8IDApIHN0YXJ0ID0gc3RyLmxlbmd0aCArIHN0YXJ0O1xuICAgICAgICByZXR1cm4gc3RyLnN1YnN0cihzdGFydCwgbGVuKTtcbiAgICB9XG47XG4iLCIvLyBzaGltIGZvciB1c2luZyBwcm9jZXNzIGluIGJyb3dzZXJcblxudmFyIHByb2Nlc3MgPSBtb2R1bGUuZXhwb3J0cyA9IHt9O1xudmFyIHF1ZXVlID0gW107XG52YXIgZHJhaW5pbmcgPSBmYWxzZTtcbnZhciBjdXJyZW50UXVldWU7XG52YXIgcXVldWVJbmRleCA9IC0xO1xuXG5mdW5jdGlvbiBjbGVhblVwTmV4dFRpY2soKSB7XG4gICAgZHJhaW5pbmcgPSBmYWxzZTtcbiAgICBpZiAoY3VycmVudFF1ZXVlLmxlbmd0aCkge1xuICAgICAgICBxdWV1ZSA9IGN1cnJlbnRRdWV1ZS5jb25jYXQocXVldWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHF1ZXVlSW5kZXggPSAtMTtcbiAgICB9XG4gICAgaWYgKHF1ZXVlLmxlbmd0aCkge1xuICAgICAgICBkcmFpblF1ZXVlKCk7XG4gICAgfVxufVxuXG5mdW5jdGlvbiBkcmFpblF1ZXVlKCkge1xuICAgIGlmIChkcmFpbmluZykge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIHZhciB0aW1lb3V0ID0gc2V0VGltZW91dChjbGVhblVwTmV4dFRpY2spO1xuICAgIGRyYWluaW5nID0gdHJ1ZTtcblxuICAgIHZhciBsZW4gPSBxdWV1ZS5sZW5ndGg7XG4gICAgd2hpbGUobGVuKSB7XG4gICAgICAgIGN1cnJlbnRRdWV1ZSA9IHF1ZXVlO1xuICAgICAgICBxdWV1ZSA9IFtdO1xuICAgICAgICB3aGlsZSAoKytxdWV1ZUluZGV4IDwgbGVuKSB7XG4gICAgICAgICAgICBpZiAoY3VycmVudFF1ZXVlKSB7XG4gICAgICAgICAgICAgICAgY3VycmVudFF1ZXVlW3F1ZXVlSW5kZXhdLnJ1bigpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHF1ZXVlSW5kZXggPSAtMTtcbiAgICAgICAgbGVuID0gcXVldWUubGVuZ3RoO1xuICAgIH1cbiAgICBjdXJyZW50UXVldWUgPSBudWxsO1xuICAgIGRyYWluaW5nID0gZmFsc2U7XG4gICAgY2xlYXJUaW1lb3V0KHRpbWVvdXQpO1xufVxuXG5wcm9jZXNzLm5leHRUaWNrID0gZnVuY3Rpb24gKGZ1bikge1xuICAgIHZhciBhcmdzID0gbmV3IEFycmF5KGFyZ3VtZW50cy5sZW5ndGggLSAxKTtcbiAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGFyZ3NbaSAtIDFdID0gYXJndW1lbnRzW2ldO1xuICAgICAgICB9XG4gICAgfVxuICAgIHF1ZXVlLnB1c2gobmV3IEl0ZW0oZnVuLCBhcmdzKSk7XG4gICAgaWYgKHF1ZXVlLmxlbmd0aCA9PT0gMSAmJiAhZHJhaW5pbmcpIHtcbiAgICAgICAgc2V0VGltZW91dChkcmFpblF1ZXVlLCAwKTtcbiAgICB9XG59O1xuXG4vLyB2OCBsaWtlcyBwcmVkaWN0aWJsZSBvYmplY3RzXG5mdW5jdGlvbiBJdGVtKGZ1biwgYXJyYXkpIHtcbiAgICB0aGlzLmZ1biA9IGZ1bjtcbiAgICB0aGlzLmFycmF5ID0gYXJyYXk7XG59XG5JdGVtLnByb3RvdHlwZS5ydW4gPSBmdW5jdGlvbiAoKSB7XG4gICAgdGhpcy5mdW4uYXBwbHkobnVsbCwgdGhpcy5hcnJheSk7XG59O1xucHJvY2Vzcy50aXRsZSA9ICdicm93c2VyJztcbnByb2Nlc3MuYnJvd3NlciA9IHRydWU7XG5wcm9jZXNzLmVudiA9IHt9O1xucHJvY2Vzcy5hcmd2ID0gW107XG5wcm9jZXNzLnZlcnNpb24gPSAnJzsgLy8gZW1wdHkgc3RyaW5nIHRvIGF2b2lkIHJlZ2V4cCBpc3N1ZXNcbnByb2Nlc3MudmVyc2lvbnMgPSB7fTtcblxuZnVuY3Rpb24gbm9vcCgpIHt9XG5cbnByb2Nlc3Mub24gPSBub29wO1xucHJvY2Vzcy5hZGRMaXN0ZW5lciA9IG5vb3A7XG5wcm9jZXNzLm9uY2UgPSBub29wO1xucHJvY2Vzcy5vZmYgPSBub29wO1xucHJvY2Vzcy5yZW1vdmVMaXN0ZW5lciA9IG5vb3A7XG5wcm9jZXNzLnJlbW92ZUFsbExpc3RlbmVycyA9IG5vb3A7XG5wcm9jZXNzLmVtaXQgPSBub29wO1xuXG5wcm9jZXNzLmJpbmRpbmcgPSBmdW5jdGlvbiAobmFtZSkge1xuICAgIHRocm93IG5ldyBFcnJvcigncHJvY2Vzcy5iaW5kaW5nIGlzIG5vdCBzdXBwb3J0ZWQnKTtcbn07XG5cbnByb2Nlc3MuY3dkID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gJy8nIH07XG5wcm9jZXNzLmNoZGlyID0gZnVuY3Rpb24gKGRpcikge1xuICAgIHRocm93IG5ldyBFcnJvcigncHJvY2Vzcy5jaGRpciBpcyBub3Qgc3VwcG9ydGVkJyk7XG59O1xucHJvY2Vzcy51bWFzayA9IGZ1bmN0aW9uKCkgeyByZXR1cm4gMDsgfTtcbiIsIi8qISBodHRwczovL210aHMuYmUvcHVueWNvZGUgdjEuNC4wIGJ5IEBtYXRoaWFzICovXG47KGZ1bmN0aW9uKHJvb3QpIHtcblxuXHQvKiogRGV0ZWN0IGZyZWUgdmFyaWFibGVzICovXG5cdHZhciBmcmVlRXhwb3J0cyA9IHR5cGVvZiBleHBvcnRzID09ICdvYmplY3QnICYmIGV4cG9ydHMgJiZcblx0XHQhZXhwb3J0cy5ub2RlVHlwZSAmJiBleHBvcnRzO1xuXHR2YXIgZnJlZU1vZHVsZSA9IHR5cGVvZiBtb2R1bGUgPT0gJ29iamVjdCcgJiYgbW9kdWxlICYmXG5cdFx0IW1vZHVsZS5ub2RlVHlwZSAmJiBtb2R1bGU7XG5cdHZhciBmcmVlR2xvYmFsID0gdHlwZW9mIGdsb2JhbCA9PSAnb2JqZWN0JyAmJiBnbG9iYWw7XG5cdGlmIChcblx0XHRmcmVlR2xvYmFsLmdsb2JhbCA9PT0gZnJlZUdsb2JhbCB8fFxuXHRcdGZyZWVHbG9iYWwud2luZG93ID09PSBmcmVlR2xvYmFsIHx8XG5cdFx0ZnJlZUdsb2JhbC5zZWxmID09PSBmcmVlR2xvYmFsXG5cdCkge1xuXHRcdHJvb3QgPSBmcmVlR2xvYmFsO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoZSBgcHVueWNvZGVgIG9iamVjdC5cblx0ICogQG5hbWUgcHVueWNvZGVcblx0ICogQHR5cGUgT2JqZWN0XG5cdCAqL1xuXHR2YXIgcHVueWNvZGUsXG5cblx0LyoqIEhpZ2hlc3QgcG9zaXRpdmUgc2lnbmVkIDMyLWJpdCBmbG9hdCB2YWx1ZSAqL1xuXHRtYXhJbnQgPSAyMTQ3NDgzNjQ3LCAvLyBha2EuIDB4N0ZGRkZGRkYgb3IgMl4zMS0xXG5cblx0LyoqIEJvb3RzdHJpbmcgcGFyYW1ldGVycyAqL1xuXHRiYXNlID0gMzYsXG5cdHRNaW4gPSAxLFxuXHR0TWF4ID0gMjYsXG5cdHNrZXcgPSAzOCxcblx0ZGFtcCA9IDcwMCxcblx0aW5pdGlhbEJpYXMgPSA3Mixcblx0aW5pdGlhbE4gPSAxMjgsIC8vIDB4ODBcblx0ZGVsaW1pdGVyID0gJy0nLCAvLyAnXFx4MkQnXG5cblx0LyoqIFJlZ3VsYXIgZXhwcmVzc2lvbnMgKi9cblx0cmVnZXhQdW55Y29kZSA9IC9eeG4tLS8sXG5cdHJlZ2V4Tm9uQVNDSUkgPSAvW15cXHgyMC1cXHg3RV0vLCAvLyB1bnByaW50YWJsZSBBU0NJSSBjaGFycyArIG5vbi1BU0NJSSBjaGFyc1xuXHRyZWdleFNlcGFyYXRvcnMgPSAvW1xceDJFXFx1MzAwMlxcdUZGMEVcXHVGRjYxXS9nLCAvLyBSRkMgMzQ5MCBzZXBhcmF0b3JzXG5cblx0LyoqIEVycm9yIG1lc3NhZ2VzICovXG5cdGVycm9ycyA9IHtcblx0XHQnb3ZlcmZsb3cnOiAnT3ZlcmZsb3c6IGlucHV0IG5lZWRzIHdpZGVyIGludGVnZXJzIHRvIHByb2Nlc3MnLFxuXHRcdCdub3QtYmFzaWMnOiAnSWxsZWdhbCBpbnB1dCA+PSAweDgwIChub3QgYSBiYXNpYyBjb2RlIHBvaW50KScsXG5cdFx0J2ludmFsaWQtaW5wdXQnOiAnSW52YWxpZCBpbnB1dCdcblx0fSxcblxuXHQvKiogQ29udmVuaWVuY2Ugc2hvcnRjdXRzICovXG5cdGJhc2VNaW51c1RNaW4gPSBiYXNlIC0gdE1pbixcblx0Zmxvb3IgPSBNYXRoLmZsb29yLFxuXHRzdHJpbmdGcm9tQ2hhckNvZGUgPSBTdHJpbmcuZnJvbUNoYXJDb2RlLFxuXG5cdC8qKiBUZW1wb3JhcnkgdmFyaWFibGUgKi9cblx0a2V5O1xuXG5cdC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuXG5cdC8qKlxuXHQgKiBBIGdlbmVyaWMgZXJyb3IgdXRpbGl0eSBmdW5jdGlvbi5cblx0ICogQHByaXZhdGVcblx0ICogQHBhcmFtIHtTdHJpbmd9IHR5cGUgVGhlIGVycm9yIHR5cGUuXG5cdCAqIEByZXR1cm5zIHtFcnJvcn0gVGhyb3dzIGEgYFJhbmdlRXJyb3JgIHdpdGggdGhlIGFwcGxpY2FibGUgZXJyb3IgbWVzc2FnZS5cblx0ICovXG5cdGZ1bmN0aW9uIGVycm9yKHR5cGUpIHtcblx0XHR0aHJvdyBuZXcgUmFuZ2VFcnJvcihlcnJvcnNbdHlwZV0pO1xuXHR9XG5cblx0LyoqXG5cdCAqIEEgZ2VuZXJpYyBgQXJyYXkjbWFwYCB1dGlsaXR5IGZ1bmN0aW9uLlxuXHQgKiBAcHJpdmF0ZVxuXHQgKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gaXRlcmF0ZSBvdmVyLlxuXHQgKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFjayBUaGUgZnVuY3Rpb24gdGhhdCBnZXRzIGNhbGxlZCBmb3IgZXZlcnkgYXJyYXlcblx0ICogaXRlbS5cblx0ICogQHJldHVybnMge0FycmF5fSBBIG5ldyBhcnJheSBvZiB2YWx1ZXMgcmV0dXJuZWQgYnkgdGhlIGNhbGxiYWNrIGZ1bmN0aW9uLlxuXHQgKi9cblx0ZnVuY3Rpb24gbWFwKGFycmF5LCBmbikge1xuXHRcdHZhciBsZW5ndGggPSBhcnJheS5sZW5ndGg7XG5cdFx0dmFyIHJlc3VsdCA9IFtdO1xuXHRcdHdoaWxlIChsZW5ndGgtLSkge1xuXHRcdFx0cmVzdWx0W2xlbmd0aF0gPSBmbihhcnJheVtsZW5ndGhdKTtcblx0XHR9XG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fVxuXG5cdC8qKlxuXHQgKiBBIHNpbXBsZSBgQXJyYXkjbWFwYC1saWtlIHdyYXBwZXIgdG8gd29yayB3aXRoIGRvbWFpbiBuYW1lIHN0cmluZ3Mgb3IgZW1haWxcblx0ICogYWRkcmVzc2VzLlxuXHQgKiBAcHJpdmF0ZVxuXHQgKiBAcGFyYW0ge1N0cmluZ30gZG9tYWluIFRoZSBkb21haW4gbmFtZSBvciBlbWFpbCBhZGRyZXNzLlxuXHQgKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFjayBUaGUgZnVuY3Rpb24gdGhhdCBnZXRzIGNhbGxlZCBmb3IgZXZlcnlcblx0ICogY2hhcmFjdGVyLlxuXHQgKiBAcmV0dXJucyB7QXJyYXl9IEEgbmV3IHN0cmluZyBvZiBjaGFyYWN0ZXJzIHJldHVybmVkIGJ5IHRoZSBjYWxsYmFja1xuXHQgKiBmdW5jdGlvbi5cblx0ICovXG5cdGZ1bmN0aW9uIG1hcERvbWFpbihzdHJpbmcsIGZuKSB7XG5cdFx0dmFyIHBhcnRzID0gc3RyaW5nLnNwbGl0KCdAJyk7XG5cdFx0dmFyIHJlc3VsdCA9ICcnO1xuXHRcdGlmIChwYXJ0cy5sZW5ndGggPiAxKSB7XG5cdFx0XHQvLyBJbiBlbWFpbCBhZGRyZXNzZXMsIG9ubHkgdGhlIGRvbWFpbiBuYW1lIHNob3VsZCBiZSBwdW55Y29kZWQuIExlYXZlXG5cdFx0XHQvLyB0aGUgbG9jYWwgcGFydCAoaS5lLiBldmVyeXRoaW5nIHVwIHRvIGBAYCkgaW50YWN0LlxuXHRcdFx0cmVzdWx0ID0gcGFydHNbMF0gKyAnQCc7XG5cdFx0XHRzdHJpbmcgPSBwYXJ0c1sxXTtcblx0XHR9XG5cdFx0Ly8gQXZvaWQgYHNwbGl0KHJlZ2V4KWAgZm9yIElFOCBjb21wYXRpYmlsaXR5LiBTZWUgIzE3LlxuXHRcdHN0cmluZyA9IHN0cmluZy5yZXBsYWNlKHJlZ2V4U2VwYXJhdG9ycywgJ1xceDJFJyk7XG5cdFx0dmFyIGxhYmVscyA9IHN0cmluZy5zcGxpdCgnLicpO1xuXHRcdHZhciBlbmNvZGVkID0gbWFwKGxhYmVscywgZm4pLmpvaW4oJy4nKTtcblx0XHRyZXR1cm4gcmVzdWx0ICsgZW5jb2RlZDtcblx0fVxuXG5cdC8qKlxuXHQgKiBDcmVhdGVzIGFuIGFycmF5IGNvbnRhaW5pbmcgdGhlIG51bWVyaWMgY29kZSBwb2ludHMgb2YgZWFjaCBVbmljb2RlXG5cdCAqIGNoYXJhY3RlciBpbiB0aGUgc3RyaW5nLiBXaGlsZSBKYXZhU2NyaXB0IHVzZXMgVUNTLTIgaW50ZXJuYWxseSxcblx0ICogdGhpcyBmdW5jdGlvbiB3aWxsIGNvbnZlcnQgYSBwYWlyIG9mIHN1cnJvZ2F0ZSBoYWx2ZXMgKGVhY2ggb2Ygd2hpY2hcblx0ICogVUNTLTIgZXhwb3NlcyBhcyBzZXBhcmF0ZSBjaGFyYWN0ZXJzKSBpbnRvIGEgc2luZ2xlIGNvZGUgcG9pbnQsXG5cdCAqIG1hdGNoaW5nIFVURi0xNi5cblx0ICogQHNlZSBgcHVueWNvZGUudWNzMi5lbmNvZGVgXG5cdCAqIEBzZWUgPGh0dHBzOi8vbWF0aGlhc2J5bmVucy5iZS9ub3Rlcy9qYXZhc2NyaXB0LWVuY29kaW5nPlxuXHQgKiBAbWVtYmVyT2YgcHVueWNvZGUudWNzMlxuXHQgKiBAbmFtZSBkZWNvZGVcblx0ICogQHBhcmFtIHtTdHJpbmd9IHN0cmluZyBUaGUgVW5pY29kZSBpbnB1dCBzdHJpbmcgKFVDUy0yKS5cblx0ICogQHJldHVybnMge0FycmF5fSBUaGUgbmV3IGFycmF5IG9mIGNvZGUgcG9pbnRzLlxuXHQgKi9cblx0ZnVuY3Rpb24gdWNzMmRlY29kZShzdHJpbmcpIHtcblx0XHR2YXIgb3V0cHV0ID0gW10sXG5cdFx0ICAgIGNvdW50ZXIgPSAwLFxuXHRcdCAgICBsZW5ndGggPSBzdHJpbmcubGVuZ3RoLFxuXHRcdCAgICB2YWx1ZSxcblx0XHQgICAgZXh0cmE7XG5cdFx0d2hpbGUgKGNvdW50ZXIgPCBsZW5ndGgpIHtcblx0XHRcdHZhbHVlID0gc3RyaW5nLmNoYXJDb2RlQXQoY291bnRlcisrKTtcblx0XHRcdGlmICh2YWx1ZSA+PSAweEQ4MDAgJiYgdmFsdWUgPD0gMHhEQkZGICYmIGNvdW50ZXIgPCBsZW5ndGgpIHtcblx0XHRcdFx0Ly8gaGlnaCBzdXJyb2dhdGUsIGFuZCB0aGVyZSBpcyBhIG5leHQgY2hhcmFjdGVyXG5cdFx0XHRcdGV4dHJhID0gc3RyaW5nLmNoYXJDb2RlQXQoY291bnRlcisrKTtcblx0XHRcdFx0aWYgKChleHRyYSAmIDB4RkMwMCkgPT0gMHhEQzAwKSB7IC8vIGxvdyBzdXJyb2dhdGVcblx0XHRcdFx0XHRvdXRwdXQucHVzaCgoKHZhbHVlICYgMHgzRkYpIDw8IDEwKSArIChleHRyYSAmIDB4M0ZGKSArIDB4MTAwMDApO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdC8vIHVubWF0Y2hlZCBzdXJyb2dhdGU7IG9ubHkgYXBwZW5kIHRoaXMgY29kZSB1bml0LCBpbiBjYXNlIHRoZSBuZXh0XG5cdFx0XHRcdFx0Ly8gY29kZSB1bml0IGlzIHRoZSBoaWdoIHN1cnJvZ2F0ZSBvZiBhIHN1cnJvZ2F0ZSBwYWlyXG5cdFx0XHRcdFx0b3V0cHV0LnB1c2godmFsdWUpO1xuXHRcdFx0XHRcdGNvdW50ZXItLTtcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0b3V0cHV0LnB1c2godmFsdWUpO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gb3V0cHV0O1xuXHR9XG5cblx0LyoqXG5cdCAqIENyZWF0ZXMgYSBzdHJpbmcgYmFzZWQgb24gYW4gYXJyYXkgb2YgbnVtZXJpYyBjb2RlIHBvaW50cy5cblx0ICogQHNlZSBgcHVueWNvZGUudWNzMi5kZWNvZGVgXG5cdCAqIEBtZW1iZXJPZiBwdW55Y29kZS51Y3MyXG5cdCAqIEBuYW1lIGVuY29kZVxuXHQgKiBAcGFyYW0ge0FycmF5fSBjb2RlUG9pbnRzIFRoZSBhcnJheSBvZiBudW1lcmljIGNvZGUgcG9pbnRzLlxuXHQgKiBAcmV0dXJucyB7U3RyaW5nfSBUaGUgbmV3IFVuaWNvZGUgc3RyaW5nIChVQ1MtMikuXG5cdCAqL1xuXHRmdW5jdGlvbiB1Y3MyZW5jb2RlKGFycmF5KSB7XG5cdFx0cmV0dXJuIG1hcChhcnJheSwgZnVuY3Rpb24odmFsdWUpIHtcblx0XHRcdHZhciBvdXRwdXQgPSAnJztcblx0XHRcdGlmICh2YWx1ZSA+IDB4RkZGRikge1xuXHRcdFx0XHR2YWx1ZSAtPSAweDEwMDAwO1xuXHRcdFx0XHRvdXRwdXQgKz0gc3RyaW5nRnJvbUNoYXJDb2RlKHZhbHVlID4+PiAxMCAmIDB4M0ZGIHwgMHhEODAwKTtcblx0XHRcdFx0dmFsdWUgPSAweERDMDAgfCB2YWx1ZSAmIDB4M0ZGO1xuXHRcdFx0fVxuXHRcdFx0b3V0cHV0ICs9IHN0cmluZ0Zyb21DaGFyQ29kZSh2YWx1ZSk7XG5cdFx0XHRyZXR1cm4gb3V0cHV0O1xuXHRcdH0pLmpvaW4oJycpO1xuXHR9XG5cblx0LyoqXG5cdCAqIENvbnZlcnRzIGEgYmFzaWMgY29kZSBwb2ludCBpbnRvIGEgZGlnaXQvaW50ZWdlci5cblx0ICogQHNlZSBgZGlnaXRUb0Jhc2ljKClgXG5cdCAqIEBwcml2YXRlXG5cdCAqIEBwYXJhbSB7TnVtYmVyfSBjb2RlUG9pbnQgVGhlIGJhc2ljIG51bWVyaWMgY29kZSBwb2ludCB2YWx1ZS5cblx0ICogQHJldHVybnMge051bWJlcn0gVGhlIG51bWVyaWMgdmFsdWUgb2YgYSBiYXNpYyBjb2RlIHBvaW50IChmb3IgdXNlIGluXG5cdCAqIHJlcHJlc2VudGluZyBpbnRlZ2VycykgaW4gdGhlIHJhbmdlIGAwYCB0byBgYmFzZSAtIDFgLCBvciBgYmFzZWAgaWZcblx0ICogdGhlIGNvZGUgcG9pbnQgZG9lcyBub3QgcmVwcmVzZW50IGEgdmFsdWUuXG5cdCAqL1xuXHRmdW5jdGlvbiBiYXNpY1RvRGlnaXQoY29kZVBvaW50KSB7XG5cdFx0aWYgKGNvZGVQb2ludCAtIDQ4IDwgMTApIHtcblx0XHRcdHJldHVybiBjb2RlUG9pbnQgLSAyMjtcblx0XHR9XG5cdFx0aWYgKGNvZGVQb2ludCAtIDY1IDwgMjYpIHtcblx0XHRcdHJldHVybiBjb2RlUG9pbnQgLSA2NTtcblx0XHR9XG5cdFx0aWYgKGNvZGVQb2ludCAtIDk3IDwgMjYpIHtcblx0XHRcdHJldHVybiBjb2RlUG9pbnQgLSA5Nztcblx0XHR9XG5cdFx0cmV0dXJuIGJhc2U7XG5cdH1cblxuXHQvKipcblx0ICogQ29udmVydHMgYSBkaWdpdC9pbnRlZ2VyIGludG8gYSBiYXNpYyBjb2RlIHBvaW50LlxuXHQgKiBAc2VlIGBiYXNpY1RvRGlnaXQoKWBcblx0ICogQHByaXZhdGVcblx0ICogQHBhcmFtIHtOdW1iZXJ9IGRpZ2l0IFRoZSBudW1lcmljIHZhbHVlIG9mIGEgYmFzaWMgY29kZSBwb2ludC5cblx0ICogQHJldHVybnMge051bWJlcn0gVGhlIGJhc2ljIGNvZGUgcG9pbnQgd2hvc2UgdmFsdWUgKHdoZW4gdXNlZCBmb3Jcblx0ICogcmVwcmVzZW50aW5nIGludGVnZXJzKSBpcyBgZGlnaXRgLCB3aGljaCBuZWVkcyB0byBiZSBpbiB0aGUgcmFuZ2Vcblx0ICogYDBgIHRvIGBiYXNlIC0gMWAuIElmIGBmbGFnYCBpcyBub24temVybywgdGhlIHVwcGVyY2FzZSBmb3JtIGlzXG5cdCAqIHVzZWQ7IGVsc2UsIHRoZSBsb3dlcmNhc2UgZm9ybSBpcyB1c2VkLiBUaGUgYmVoYXZpb3IgaXMgdW5kZWZpbmVkXG5cdCAqIGlmIGBmbGFnYCBpcyBub24temVybyBhbmQgYGRpZ2l0YCBoYXMgbm8gdXBwZXJjYXNlIGZvcm0uXG5cdCAqL1xuXHRmdW5jdGlvbiBkaWdpdFRvQmFzaWMoZGlnaXQsIGZsYWcpIHtcblx0XHQvLyAgMC4uMjUgbWFwIHRvIEFTQ0lJIGEuLnogb3IgQS4uWlxuXHRcdC8vIDI2Li4zNSBtYXAgdG8gQVNDSUkgMC4uOVxuXHRcdHJldHVybiBkaWdpdCArIDIyICsgNzUgKiAoZGlnaXQgPCAyNikgLSAoKGZsYWcgIT0gMCkgPDwgNSk7XG5cdH1cblxuXHQvKipcblx0ICogQmlhcyBhZGFwdGF0aW9uIGZ1bmN0aW9uIGFzIHBlciBzZWN0aW9uIDMuNCBvZiBSRkMgMzQ5Mi5cblx0ICogaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzM0OTIjc2VjdGlvbi0zLjRcblx0ICogQHByaXZhdGVcblx0ICovXG5cdGZ1bmN0aW9uIGFkYXB0KGRlbHRhLCBudW1Qb2ludHMsIGZpcnN0VGltZSkge1xuXHRcdHZhciBrID0gMDtcblx0XHRkZWx0YSA9IGZpcnN0VGltZSA/IGZsb29yKGRlbHRhIC8gZGFtcCkgOiBkZWx0YSA+PiAxO1xuXHRcdGRlbHRhICs9IGZsb29yKGRlbHRhIC8gbnVtUG9pbnRzKTtcblx0XHRmb3IgKC8qIG5vIGluaXRpYWxpemF0aW9uICovOyBkZWx0YSA+IGJhc2VNaW51c1RNaW4gKiB0TWF4ID4+IDE7IGsgKz0gYmFzZSkge1xuXHRcdFx0ZGVsdGEgPSBmbG9vcihkZWx0YSAvIGJhc2VNaW51c1RNaW4pO1xuXHRcdH1cblx0XHRyZXR1cm4gZmxvb3IoayArIChiYXNlTWludXNUTWluICsgMSkgKiBkZWx0YSAvIChkZWx0YSArIHNrZXcpKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBDb252ZXJ0cyBhIFB1bnljb2RlIHN0cmluZyBvZiBBU0NJSS1vbmx5IHN5bWJvbHMgdG8gYSBzdHJpbmcgb2YgVW5pY29kZVxuXHQgKiBzeW1ib2xzLlxuXHQgKiBAbWVtYmVyT2YgcHVueWNvZGVcblx0ICogQHBhcmFtIHtTdHJpbmd9IGlucHV0IFRoZSBQdW55Y29kZSBzdHJpbmcgb2YgQVNDSUktb25seSBzeW1ib2xzLlxuXHQgKiBAcmV0dXJucyB7U3RyaW5nfSBUaGUgcmVzdWx0aW5nIHN0cmluZyBvZiBVbmljb2RlIHN5bWJvbHMuXG5cdCAqL1xuXHRmdW5jdGlvbiBkZWNvZGUoaW5wdXQpIHtcblx0XHQvLyBEb24ndCB1c2UgVUNTLTJcblx0XHR2YXIgb3V0cHV0ID0gW10sXG5cdFx0ICAgIGlucHV0TGVuZ3RoID0gaW5wdXQubGVuZ3RoLFxuXHRcdCAgICBvdXQsXG5cdFx0ICAgIGkgPSAwLFxuXHRcdCAgICBuID0gaW5pdGlhbE4sXG5cdFx0ICAgIGJpYXMgPSBpbml0aWFsQmlhcyxcblx0XHQgICAgYmFzaWMsXG5cdFx0ICAgIGosXG5cdFx0ICAgIGluZGV4LFxuXHRcdCAgICBvbGRpLFxuXHRcdCAgICB3LFxuXHRcdCAgICBrLFxuXHRcdCAgICBkaWdpdCxcblx0XHQgICAgdCxcblx0XHQgICAgLyoqIENhY2hlZCBjYWxjdWxhdGlvbiByZXN1bHRzICovXG5cdFx0ICAgIGJhc2VNaW51c1Q7XG5cblx0XHQvLyBIYW5kbGUgdGhlIGJhc2ljIGNvZGUgcG9pbnRzOiBsZXQgYGJhc2ljYCBiZSB0aGUgbnVtYmVyIG9mIGlucHV0IGNvZGVcblx0XHQvLyBwb2ludHMgYmVmb3JlIHRoZSBsYXN0IGRlbGltaXRlciwgb3IgYDBgIGlmIHRoZXJlIGlzIG5vbmUsIHRoZW4gY29weVxuXHRcdC8vIHRoZSBmaXJzdCBiYXNpYyBjb2RlIHBvaW50cyB0byB0aGUgb3V0cHV0LlxuXG5cdFx0YmFzaWMgPSBpbnB1dC5sYXN0SW5kZXhPZihkZWxpbWl0ZXIpO1xuXHRcdGlmIChiYXNpYyA8IDApIHtcblx0XHRcdGJhc2ljID0gMDtcblx0XHR9XG5cblx0XHRmb3IgKGogPSAwOyBqIDwgYmFzaWM7ICsraikge1xuXHRcdFx0Ly8gaWYgaXQncyBub3QgYSBiYXNpYyBjb2RlIHBvaW50XG5cdFx0XHRpZiAoaW5wdXQuY2hhckNvZGVBdChqKSA+PSAweDgwKSB7XG5cdFx0XHRcdGVycm9yKCdub3QtYmFzaWMnKTtcblx0XHRcdH1cblx0XHRcdG91dHB1dC5wdXNoKGlucHV0LmNoYXJDb2RlQXQoaikpO1xuXHRcdH1cblxuXHRcdC8vIE1haW4gZGVjb2RpbmcgbG9vcDogc3RhcnQganVzdCBhZnRlciB0aGUgbGFzdCBkZWxpbWl0ZXIgaWYgYW55IGJhc2ljIGNvZGVcblx0XHQvLyBwb2ludHMgd2VyZSBjb3BpZWQ7IHN0YXJ0IGF0IHRoZSBiZWdpbm5pbmcgb3RoZXJ3aXNlLlxuXG5cdFx0Zm9yIChpbmRleCA9IGJhc2ljID4gMCA/IGJhc2ljICsgMSA6IDA7IGluZGV4IDwgaW5wdXRMZW5ndGg7IC8qIG5vIGZpbmFsIGV4cHJlc3Npb24gKi8pIHtcblxuXHRcdFx0Ly8gYGluZGV4YCBpcyB0aGUgaW5kZXggb2YgdGhlIG5leHQgY2hhcmFjdGVyIHRvIGJlIGNvbnN1bWVkLlxuXHRcdFx0Ly8gRGVjb2RlIGEgZ2VuZXJhbGl6ZWQgdmFyaWFibGUtbGVuZ3RoIGludGVnZXIgaW50byBgZGVsdGFgLFxuXHRcdFx0Ly8gd2hpY2ggZ2V0cyBhZGRlZCB0byBgaWAuIFRoZSBvdmVyZmxvdyBjaGVja2luZyBpcyBlYXNpZXJcblx0XHRcdC8vIGlmIHdlIGluY3JlYXNlIGBpYCBhcyB3ZSBnbywgdGhlbiBzdWJ0cmFjdCBvZmYgaXRzIHN0YXJ0aW5nXG5cdFx0XHQvLyB2YWx1ZSBhdCB0aGUgZW5kIHRvIG9idGFpbiBgZGVsdGFgLlxuXHRcdFx0Zm9yIChvbGRpID0gaSwgdyA9IDEsIGsgPSBiYXNlOyAvKiBubyBjb25kaXRpb24gKi87IGsgKz0gYmFzZSkge1xuXG5cdFx0XHRcdGlmIChpbmRleCA+PSBpbnB1dExlbmd0aCkge1xuXHRcdFx0XHRcdGVycm9yKCdpbnZhbGlkLWlucHV0Jyk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRkaWdpdCA9IGJhc2ljVG9EaWdpdChpbnB1dC5jaGFyQ29kZUF0KGluZGV4KyspKTtcblxuXHRcdFx0XHRpZiAoZGlnaXQgPj0gYmFzZSB8fCBkaWdpdCA+IGZsb29yKChtYXhJbnQgLSBpKSAvIHcpKSB7XG5cdFx0XHRcdFx0ZXJyb3IoJ292ZXJmbG93Jyk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpICs9IGRpZ2l0ICogdztcblx0XHRcdFx0dCA9IGsgPD0gYmlhcyA/IHRNaW4gOiAoayA+PSBiaWFzICsgdE1heCA/IHRNYXggOiBrIC0gYmlhcyk7XG5cblx0XHRcdFx0aWYgKGRpZ2l0IDwgdCkge1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0YmFzZU1pbnVzVCA9IGJhc2UgLSB0O1xuXHRcdFx0XHRpZiAodyA+IGZsb29yKG1heEludCAvIGJhc2VNaW51c1QpKSB7XG5cdFx0XHRcdFx0ZXJyb3IoJ292ZXJmbG93Jyk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHR3ICo9IGJhc2VNaW51c1Q7XG5cblx0XHRcdH1cblxuXHRcdFx0b3V0ID0gb3V0cHV0Lmxlbmd0aCArIDE7XG5cdFx0XHRiaWFzID0gYWRhcHQoaSAtIG9sZGksIG91dCwgb2xkaSA9PSAwKTtcblxuXHRcdFx0Ly8gYGlgIHdhcyBzdXBwb3NlZCB0byB3cmFwIGFyb3VuZCBmcm9tIGBvdXRgIHRvIGAwYCxcblx0XHRcdC8vIGluY3JlbWVudGluZyBgbmAgZWFjaCB0aW1lLCBzbyB3ZSdsbCBmaXggdGhhdCBub3c6XG5cdFx0XHRpZiAoZmxvb3IoaSAvIG91dCkgPiBtYXhJbnQgLSBuKSB7XG5cdFx0XHRcdGVycm9yKCdvdmVyZmxvdycpO1xuXHRcdFx0fVxuXG5cdFx0XHRuICs9IGZsb29yKGkgLyBvdXQpO1xuXHRcdFx0aSAlPSBvdXQ7XG5cblx0XHRcdC8vIEluc2VydCBgbmAgYXQgcG9zaXRpb24gYGlgIG9mIHRoZSBvdXRwdXRcblx0XHRcdG91dHB1dC5zcGxpY2UoaSsrLCAwLCBuKTtcblxuXHRcdH1cblxuXHRcdHJldHVybiB1Y3MyZW5jb2RlKG91dHB1dCk7XG5cdH1cblxuXHQvKipcblx0ICogQ29udmVydHMgYSBzdHJpbmcgb2YgVW5pY29kZSBzeW1ib2xzIChlLmcuIGEgZG9tYWluIG5hbWUgbGFiZWwpIHRvIGFcblx0ICogUHVueWNvZGUgc3RyaW5nIG9mIEFTQ0lJLW9ubHkgc3ltYm9scy5cblx0ICogQG1lbWJlck9mIHB1bnljb2RlXG5cdCAqIEBwYXJhbSB7U3RyaW5nfSBpbnB1dCBUaGUgc3RyaW5nIG9mIFVuaWNvZGUgc3ltYm9scy5cblx0ICogQHJldHVybnMge1N0cmluZ30gVGhlIHJlc3VsdGluZyBQdW55Y29kZSBzdHJpbmcgb2YgQVNDSUktb25seSBzeW1ib2xzLlxuXHQgKi9cblx0ZnVuY3Rpb24gZW5jb2RlKGlucHV0KSB7XG5cdFx0dmFyIG4sXG5cdFx0ICAgIGRlbHRhLFxuXHRcdCAgICBoYW5kbGVkQ1BDb3VudCxcblx0XHQgICAgYmFzaWNMZW5ndGgsXG5cdFx0ICAgIGJpYXMsXG5cdFx0ICAgIGosXG5cdFx0ICAgIG0sXG5cdFx0ICAgIHEsXG5cdFx0ICAgIGssXG5cdFx0ICAgIHQsXG5cdFx0ICAgIGN1cnJlbnRWYWx1ZSxcblx0XHQgICAgb3V0cHV0ID0gW10sXG5cdFx0ICAgIC8qKiBgaW5wdXRMZW5ndGhgIHdpbGwgaG9sZCB0aGUgbnVtYmVyIG9mIGNvZGUgcG9pbnRzIGluIGBpbnB1dGAuICovXG5cdFx0ICAgIGlucHV0TGVuZ3RoLFxuXHRcdCAgICAvKiogQ2FjaGVkIGNhbGN1bGF0aW9uIHJlc3VsdHMgKi9cblx0XHQgICAgaGFuZGxlZENQQ291bnRQbHVzT25lLFxuXHRcdCAgICBiYXNlTWludXNULFxuXHRcdCAgICBxTWludXNUO1xuXG5cdFx0Ly8gQ29udmVydCB0aGUgaW5wdXQgaW4gVUNTLTIgdG8gVW5pY29kZVxuXHRcdGlucHV0ID0gdWNzMmRlY29kZShpbnB1dCk7XG5cblx0XHQvLyBDYWNoZSB0aGUgbGVuZ3RoXG5cdFx0aW5wdXRMZW5ndGggPSBpbnB1dC5sZW5ndGg7XG5cblx0XHQvLyBJbml0aWFsaXplIHRoZSBzdGF0ZVxuXHRcdG4gPSBpbml0aWFsTjtcblx0XHRkZWx0YSA9IDA7XG5cdFx0YmlhcyA9IGluaXRpYWxCaWFzO1xuXG5cdFx0Ly8gSGFuZGxlIHRoZSBiYXNpYyBjb2RlIHBvaW50c1xuXHRcdGZvciAoaiA9IDA7IGogPCBpbnB1dExlbmd0aDsgKytqKSB7XG5cdFx0XHRjdXJyZW50VmFsdWUgPSBpbnB1dFtqXTtcblx0XHRcdGlmIChjdXJyZW50VmFsdWUgPCAweDgwKSB7XG5cdFx0XHRcdG91dHB1dC5wdXNoKHN0cmluZ0Zyb21DaGFyQ29kZShjdXJyZW50VmFsdWUpKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRoYW5kbGVkQ1BDb3VudCA9IGJhc2ljTGVuZ3RoID0gb3V0cHV0Lmxlbmd0aDtcblxuXHRcdC8vIGBoYW5kbGVkQ1BDb3VudGAgaXMgdGhlIG51bWJlciBvZiBjb2RlIHBvaW50cyB0aGF0IGhhdmUgYmVlbiBoYW5kbGVkO1xuXHRcdC8vIGBiYXNpY0xlbmd0aGAgaXMgdGhlIG51bWJlciBvZiBiYXNpYyBjb2RlIHBvaW50cy5cblxuXHRcdC8vIEZpbmlzaCB0aGUgYmFzaWMgc3RyaW5nIC0gaWYgaXQgaXMgbm90IGVtcHR5IC0gd2l0aCBhIGRlbGltaXRlclxuXHRcdGlmIChiYXNpY0xlbmd0aCkge1xuXHRcdFx0b3V0cHV0LnB1c2goZGVsaW1pdGVyKTtcblx0XHR9XG5cblx0XHQvLyBNYWluIGVuY29kaW5nIGxvb3A6XG5cdFx0d2hpbGUgKGhhbmRsZWRDUENvdW50IDwgaW5wdXRMZW5ndGgpIHtcblxuXHRcdFx0Ly8gQWxsIG5vbi1iYXNpYyBjb2RlIHBvaW50cyA8IG4gaGF2ZSBiZWVuIGhhbmRsZWQgYWxyZWFkeS4gRmluZCB0aGUgbmV4dFxuXHRcdFx0Ly8gbGFyZ2VyIG9uZTpcblx0XHRcdGZvciAobSA9IG1heEludCwgaiA9IDA7IGogPCBpbnB1dExlbmd0aDsgKytqKSB7XG5cdFx0XHRcdGN1cnJlbnRWYWx1ZSA9IGlucHV0W2pdO1xuXHRcdFx0XHRpZiAoY3VycmVudFZhbHVlID49IG4gJiYgY3VycmVudFZhbHVlIDwgbSkge1xuXHRcdFx0XHRcdG0gPSBjdXJyZW50VmFsdWU7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0Ly8gSW5jcmVhc2UgYGRlbHRhYCBlbm91Z2ggdG8gYWR2YW5jZSB0aGUgZGVjb2RlcidzIDxuLGk+IHN0YXRlIHRvIDxtLDA+LFxuXHRcdFx0Ly8gYnV0IGd1YXJkIGFnYWluc3Qgb3ZlcmZsb3dcblx0XHRcdGhhbmRsZWRDUENvdW50UGx1c09uZSA9IGhhbmRsZWRDUENvdW50ICsgMTtcblx0XHRcdGlmIChtIC0gbiA+IGZsb29yKChtYXhJbnQgLSBkZWx0YSkgLyBoYW5kbGVkQ1BDb3VudFBsdXNPbmUpKSB7XG5cdFx0XHRcdGVycm9yKCdvdmVyZmxvdycpO1xuXHRcdFx0fVxuXG5cdFx0XHRkZWx0YSArPSAobSAtIG4pICogaGFuZGxlZENQQ291bnRQbHVzT25lO1xuXHRcdFx0biA9IG07XG5cblx0XHRcdGZvciAoaiA9IDA7IGogPCBpbnB1dExlbmd0aDsgKytqKSB7XG5cdFx0XHRcdGN1cnJlbnRWYWx1ZSA9IGlucHV0W2pdO1xuXG5cdFx0XHRcdGlmIChjdXJyZW50VmFsdWUgPCBuICYmICsrZGVsdGEgPiBtYXhJbnQpIHtcblx0XHRcdFx0XHRlcnJvcignb3ZlcmZsb3cnKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGlmIChjdXJyZW50VmFsdWUgPT0gbikge1xuXHRcdFx0XHRcdC8vIFJlcHJlc2VudCBkZWx0YSBhcyBhIGdlbmVyYWxpemVkIHZhcmlhYmxlLWxlbmd0aCBpbnRlZ2VyXG5cdFx0XHRcdFx0Zm9yIChxID0gZGVsdGEsIGsgPSBiYXNlOyAvKiBubyBjb25kaXRpb24gKi87IGsgKz0gYmFzZSkge1xuXHRcdFx0XHRcdFx0dCA9IGsgPD0gYmlhcyA/IHRNaW4gOiAoayA+PSBiaWFzICsgdE1heCA/IHRNYXggOiBrIC0gYmlhcyk7XG5cdFx0XHRcdFx0XHRpZiAocSA8IHQpIHtcblx0XHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRxTWludXNUID0gcSAtIHQ7XG5cdFx0XHRcdFx0XHRiYXNlTWludXNUID0gYmFzZSAtIHQ7XG5cdFx0XHRcdFx0XHRvdXRwdXQucHVzaChcblx0XHRcdFx0XHRcdFx0c3RyaW5nRnJvbUNoYXJDb2RlKGRpZ2l0VG9CYXNpYyh0ICsgcU1pbnVzVCAlIGJhc2VNaW51c1QsIDApKVxuXHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdHEgPSBmbG9vcihxTWludXNUIC8gYmFzZU1pbnVzVCk7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0b3V0cHV0LnB1c2goc3RyaW5nRnJvbUNoYXJDb2RlKGRpZ2l0VG9CYXNpYyhxLCAwKSkpO1xuXHRcdFx0XHRcdGJpYXMgPSBhZGFwdChkZWx0YSwgaGFuZGxlZENQQ291bnRQbHVzT25lLCBoYW5kbGVkQ1BDb3VudCA9PSBiYXNpY0xlbmd0aCk7XG5cdFx0XHRcdFx0ZGVsdGEgPSAwO1xuXHRcdFx0XHRcdCsraGFuZGxlZENQQ291bnQ7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0KytkZWx0YTtcblx0XHRcdCsrbjtcblxuXHRcdH1cblx0XHRyZXR1cm4gb3V0cHV0LmpvaW4oJycpO1xuXHR9XG5cblx0LyoqXG5cdCAqIENvbnZlcnRzIGEgUHVueWNvZGUgc3RyaW5nIHJlcHJlc2VudGluZyBhIGRvbWFpbiBuYW1lIG9yIGFuIGVtYWlsIGFkZHJlc3Ncblx0ICogdG8gVW5pY29kZS4gT25seSB0aGUgUHVueWNvZGVkIHBhcnRzIG9mIHRoZSBpbnB1dCB3aWxsIGJlIGNvbnZlcnRlZCwgaS5lLlxuXHQgKiBpdCBkb2Vzbid0IG1hdHRlciBpZiB5b3UgY2FsbCBpdCBvbiBhIHN0cmluZyB0aGF0IGhhcyBhbHJlYWR5IGJlZW5cblx0ICogY29udmVydGVkIHRvIFVuaWNvZGUuXG5cdCAqIEBtZW1iZXJPZiBwdW55Y29kZVxuXHQgKiBAcGFyYW0ge1N0cmluZ30gaW5wdXQgVGhlIFB1bnljb2RlZCBkb21haW4gbmFtZSBvciBlbWFpbCBhZGRyZXNzIHRvXG5cdCAqIGNvbnZlcnQgdG8gVW5pY29kZS5cblx0ICogQHJldHVybnMge1N0cmluZ30gVGhlIFVuaWNvZGUgcmVwcmVzZW50YXRpb24gb2YgdGhlIGdpdmVuIFB1bnljb2RlXG5cdCAqIHN0cmluZy5cblx0ICovXG5cdGZ1bmN0aW9uIHRvVW5pY29kZShpbnB1dCkge1xuXHRcdHJldHVybiBtYXBEb21haW4oaW5wdXQsIGZ1bmN0aW9uKHN0cmluZykge1xuXHRcdFx0cmV0dXJuIHJlZ2V4UHVueWNvZGUudGVzdChzdHJpbmcpXG5cdFx0XHRcdD8gZGVjb2RlKHN0cmluZy5zbGljZSg0KS50b0xvd2VyQ2FzZSgpKVxuXHRcdFx0XHQ6IHN0cmluZztcblx0XHR9KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBDb252ZXJ0cyBhIFVuaWNvZGUgc3RyaW5nIHJlcHJlc2VudGluZyBhIGRvbWFpbiBuYW1lIG9yIGFuIGVtYWlsIGFkZHJlc3MgdG9cblx0ICogUHVueWNvZGUuIE9ubHkgdGhlIG5vbi1BU0NJSSBwYXJ0cyBvZiB0aGUgZG9tYWluIG5hbWUgd2lsbCBiZSBjb252ZXJ0ZWQsXG5cdCAqIGkuZS4gaXQgZG9lc24ndCBtYXR0ZXIgaWYgeW91IGNhbGwgaXQgd2l0aCBhIGRvbWFpbiB0aGF0J3MgYWxyZWFkeSBpblxuXHQgKiBBU0NJSS5cblx0ICogQG1lbWJlck9mIHB1bnljb2RlXG5cdCAqIEBwYXJhbSB7U3RyaW5nfSBpbnB1dCBUaGUgZG9tYWluIG5hbWUgb3IgZW1haWwgYWRkcmVzcyB0byBjb252ZXJ0LCBhcyBhXG5cdCAqIFVuaWNvZGUgc3RyaW5nLlxuXHQgKiBAcmV0dXJucyB7U3RyaW5nfSBUaGUgUHVueWNvZGUgcmVwcmVzZW50YXRpb24gb2YgdGhlIGdpdmVuIGRvbWFpbiBuYW1lIG9yXG5cdCAqIGVtYWlsIGFkZHJlc3MuXG5cdCAqL1xuXHRmdW5jdGlvbiB0b0FTQ0lJKGlucHV0KSB7XG5cdFx0cmV0dXJuIG1hcERvbWFpbihpbnB1dCwgZnVuY3Rpb24oc3RyaW5nKSB7XG5cdFx0XHRyZXR1cm4gcmVnZXhOb25BU0NJSS50ZXN0KHN0cmluZylcblx0XHRcdFx0PyAneG4tLScgKyBlbmNvZGUoc3RyaW5nKVxuXHRcdFx0XHQ6IHN0cmluZztcblx0XHR9KTtcblx0fVxuXG5cdC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuXG5cdC8qKiBEZWZpbmUgdGhlIHB1YmxpYyBBUEkgKi9cblx0cHVueWNvZGUgPSB7XG5cdFx0LyoqXG5cdFx0ICogQSBzdHJpbmcgcmVwcmVzZW50aW5nIHRoZSBjdXJyZW50IFB1bnljb2RlLmpzIHZlcnNpb24gbnVtYmVyLlxuXHRcdCAqIEBtZW1iZXJPZiBwdW55Y29kZVxuXHRcdCAqIEB0eXBlIFN0cmluZ1xuXHRcdCAqL1xuXHRcdCd2ZXJzaW9uJzogJzEuMy4yJyxcblx0XHQvKipcblx0XHQgKiBBbiBvYmplY3Qgb2YgbWV0aG9kcyB0byBjb252ZXJ0IGZyb20gSmF2YVNjcmlwdCdzIGludGVybmFsIGNoYXJhY3RlclxuXHRcdCAqIHJlcHJlc2VudGF0aW9uIChVQ1MtMikgdG8gVW5pY29kZSBjb2RlIHBvaW50cywgYW5kIGJhY2suXG5cdFx0ICogQHNlZSA8aHR0cHM6Ly9tYXRoaWFzYnluZW5zLmJlL25vdGVzL2phdmFzY3JpcHQtZW5jb2Rpbmc+XG5cdFx0ICogQG1lbWJlck9mIHB1bnljb2RlXG5cdFx0ICogQHR5cGUgT2JqZWN0XG5cdFx0ICovXG5cdFx0J3VjczInOiB7XG5cdFx0XHQnZGVjb2RlJzogdWNzMmRlY29kZSxcblx0XHRcdCdlbmNvZGUnOiB1Y3MyZW5jb2RlXG5cdFx0fSxcblx0XHQnZGVjb2RlJzogZGVjb2RlLFxuXHRcdCdlbmNvZGUnOiBlbmNvZGUsXG5cdFx0J3RvQVNDSUknOiB0b0FTQ0lJLFxuXHRcdCd0b1VuaWNvZGUnOiB0b1VuaWNvZGVcblx0fTtcblxuXHQvKiogRXhwb3NlIGBwdW55Y29kZWAgKi9cblx0Ly8gU29tZSBBTUQgYnVpbGQgb3B0aW1pemVycywgbGlrZSByLmpzLCBjaGVjayBmb3Igc3BlY2lmaWMgY29uZGl0aW9uIHBhdHRlcm5zXG5cdC8vIGxpa2UgdGhlIGZvbGxvd2luZzpcblx0aWYgKFxuXHRcdHR5cGVvZiBkZWZpbmUgPT0gJ2Z1bmN0aW9uJyAmJlxuXHRcdHR5cGVvZiBkZWZpbmUuYW1kID09ICdvYmplY3QnICYmXG5cdFx0ZGVmaW5lLmFtZFxuXHQpIHtcblx0XHRkZWZpbmUoJ3B1bnljb2RlJywgZnVuY3Rpb24oKSB7XG5cdFx0XHRyZXR1cm4gcHVueWNvZGU7XG5cdFx0fSk7XG5cdH0gZWxzZSBpZiAoZnJlZUV4cG9ydHMgJiYgZnJlZU1vZHVsZSkge1xuXHRcdGlmIChtb2R1bGUuZXhwb3J0cyA9PSBmcmVlRXhwb3J0cykge1xuXHRcdFx0Ly8gaW4gTm9kZS5qcywgaW8uanMsIG9yIFJpbmdvSlMgdjAuOC4wK1xuXHRcdFx0ZnJlZU1vZHVsZS5leHBvcnRzID0gcHVueWNvZGU7XG5cdFx0fSBlbHNlIHtcblx0XHRcdC8vIGluIE5hcndoYWwgb3IgUmluZ29KUyB2MC43LjAtXG5cdFx0XHRmb3IgKGtleSBpbiBwdW55Y29kZSkge1xuXHRcdFx0XHRwdW55Y29kZS5oYXNPd25Qcm9wZXJ0eShrZXkpICYmIChmcmVlRXhwb3J0c1trZXldID0gcHVueWNvZGVba2V5XSk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9IGVsc2Uge1xuXHRcdC8vIGluIFJoaW5vIG9yIGEgd2ViIGJyb3dzZXJcblx0XHRyb290LnB1bnljb2RlID0gcHVueWNvZGU7XG5cdH1cblxufSh0aGlzKSk7XG4iLCIvLyBDb3B5cmlnaHQgSm95ZW50LCBJbmMuIGFuZCBvdGhlciBOb2RlIGNvbnRyaWJ1dG9ycy5cbi8vXG4vLyBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYVxuLy8gY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZVxuLy8gXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nXG4vLyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsXG4vLyBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0XG4vLyBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGVcbi8vIGZvbGxvd2luZyBjb25kaXRpb25zOlxuLy9cbi8vIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkXG4vLyBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbi8vXG4vLyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTXG4vLyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GXG4vLyBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOXG4vLyBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSxcbi8vIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUlxuLy8gT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRVxuLy8gVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cblxuJ3VzZSBzdHJpY3QnO1xuXG4vLyBJZiBvYmouaGFzT3duUHJvcGVydHkgaGFzIGJlZW4gb3ZlcnJpZGRlbiwgdGhlbiBjYWxsaW5nXG4vLyBvYmouaGFzT3duUHJvcGVydHkocHJvcCkgd2lsbCBicmVhay5cbi8vIFNlZTogaHR0cHM6Ly9naXRodWIuY29tL2pveWVudC9ub2RlL2lzc3Vlcy8xNzA3XG5mdW5jdGlvbiBoYXNPd25Qcm9wZXJ0eShvYmosIHByb3ApIHtcbiAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmosIHByb3ApO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKHFzLCBzZXAsIGVxLCBvcHRpb25zKSB7XG4gIHNlcCA9IHNlcCB8fCAnJic7XG4gIGVxID0gZXEgfHwgJz0nO1xuICB2YXIgb2JqID0ge307XG5cbiAgaWYgKHR5cGVvZiBxcyAhPT0gJ3N0cmluZycgfHwgcXMubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIG9iajtcbiAgfVxuXG4gIHZhciByZWdleHAgPSAvXFwrL2c7XG4gIHFzID0gcXMuc3BsaXQoc2VwKTtcblxuICB2YXIgbWF4S2V5cyA9IDEwMDA7XG4gIGlmIChvcHRpb25zICYmIHR5cGVvZiBvcHRpb25zLm1heEtleXMgPT09ICdudW1iZXInKSB7XG4gICAgbWF4S2V5cyA9IG9wdGlvbnMubWF4S2V5cztcbiAgfVxuXG4gIHZhciBsZW4gPSBxcy5sZW5ndGg7XG4gIC8vIG1heEtleXMgPD0gMCBtZWFucyB0aGF0IHdlIHNob3VsZCBub3QgbGltaXQga2V5cyBjb3VudFxuICBpZiAobWF4S2V5cyA+IDAgJiYgbGVuID4gbWF4S2V5cykge1xuICAgIGxlbiA9IG1heEtleXM7XG4gIH1cblxuICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgKytpKSB7XG4gICAgdmFyIHggPSBxc1tpXS5yZXBsYWNlKHJlZ2V4cCwgJyUyMCcpLFxuICAgICAgICBpZHggPSB4LmluZGV4T2YoZXEpLFxuICAgICAgICBrc3RyLCB2c3RyLCBrLCB2O1xuXG4gICAgaWYgKGlkeCA+PSAwKSB7XG4gICAgICBrc3RyID0geC5zdWJzdHIoMCwgaWR4KTtcbiAgICAgIHZzdHIgPSB4LnN1YnN0cihpZHggKyAxKTtcbiAgICB9IGVsc2Uge1xuICAgICAga3N0ciA9IHg7XG4gICAgICB2c3RyID0gJyc7XG4gICAgfVxuXG4gICAgayA9IGRlY29kZVVSSUNvbXBvbmVudChrc3RyKTtcbiAgICB2ID0gZGVjb2RlVVJJQ29tcG9uZW50KHZzdHIpO1xuXG4gICAgaWYgKCFoYXNPd25Qcm9wZXJ0eShvYmosIGspKSB7XG4gICAgICBvYmpba10gPSB2O1xuICAgIH0gZWxzZSBpZiAoaXNBcnJheShvYmpba10pKSB7XG4gICAgICBvYmpba10ucHVzaCh2KTtcbiAgICB9IGVsc2Uge1xuICAgICAgb2JqW2tdID0gW29ialtrXSwgdl07XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG9iajtcbn07XG5cbnZhciBpc0FycmF5ID0gQXJyYXkuaXNBcnJheSB8fCBmdW5jdGlvbiAoeHMpIHtcbiAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh4cykgPT09ICdbb2JqZWN0IEFycmF5XSc7XG59O1xuIiwiLy8gQ29weXJpZ2h0IEpveWVudCwgSW5jLiBhbmQgb3RoZXIgTm9kZSBjb250cmlidXRvcnMuXG4vL1xuLy8gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGFcbi8vIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGVcbi8vIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZ1xuLy8gd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLFxuLy8gZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdFxuLy8gcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlXG4vLyBmb2xsb3dpbmcgY29uZGl0aW9uczpcbi8vXG4vLyBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZFxuLy8gaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4vL1xuLy8gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTU1xuLy8gT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRlxuLy8gTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTlxuLy8gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sXG4vLyBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1Jcbi8vIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEVcbi8vIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG5cbid1c2Ugc3RyaWN0JztcblxudmFyIHN0cmluZ2lmeVByaW1pdGl2ZSA9IGZ1bmN0aW9uKHYpIHtcbiAgc3dpdGNoICh0eXBlb2Ygdikge1xuICAgIGNhc2UgJ3N0cmluZyc6XG4gICAgICByZXR1cm4gdjtcblxuICAgIGNhc2UgJ2Jvb2xlYW4nOlxuICAgICAgcmV0dXJuIHYgPyAndHJ1ZScgOiAnZmFsc2UnO1xuXG4gICAgY2FzZSAnbnVtYmVyJzpcbiAgICAgIHJldHVybiBpc0Zpbml0ZSh2KSA/IHYgOiAnJztcblxuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gJyc7XG4gIH1cbn07XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24ob2JqLCBzZXAsIGVxLCBuYW1lKSB7XG4gIHNlcCA9IHNlcCB8fCAnJic7XG4gIGVxID0gZXEgfHwgJz0nO1xuICBpZiAob2JqID09PSBudWxsKSB7XG4gICAgb2JqID0gdW5kZWZpbmVkO1xuICB9XG5cbiAgaWYgKHR5cGVvZiBvYmogPT09ICdvYmplY3QnKSB7XG4gICAgcmV0dXJuIG1hcChvYmplY3RLZXlzKG9iaiksIGZ1bmN0aW9uKGspIHtcbiAgICAgIHZhciBrcyA9IGVuY29kZVVSSUNvbXBvbmVudChzdHJpbmdpZnlQcmltaXRpdmUoaykpICsgZXE7XG4gICAgICBpZiAoaXNBcnJheShvYmpba10pKSB7XG4gICAgICAgIHJldHVybiBtYXAob2JqW2tdLCBmdW5jdGlvbih2KSB7XG4gICAgICAgICAgcmV0dXJuIGtzICsgZW5jb2RlVVJJQ29tcG9uZW50KHN0cmluZ2lmeVByaW1pdGl2ZSh2KSk7XG4gICAgICAgIH0pLmpvaW4oc2VwKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBrcyArIGVuY29kZVVSSUNvbXBvbmVudChzdHJpbmdpZnlQcmltaXRpdmUob2JqW2tdKSk7XG4gICAgICB9XG4gICAgfSkuam9pbihzZXApO1xuXG4gIH1cblxuICBpZiAoIW5hbWUpIHJldHVybiAnJztcbiAgcmV0dXJuIGVuY29kZVVSSUNvbXBvbmVudChzdHJpbmdpZnlQcmltaXRpdmUobmFtZSkpICsgZXEgK1xuICAgICAgICAgZW5jb2RlVVJJQ29tcG9uZW50KHN0cmluZ2lmeVByaW1pdGl2ZShvYmopKTtcbn07XG5cbnZhciBpc0FycmF5ID0gQXJyYXkuaXNBcnJheSB8fCBmdW5jdGlvbiAoeHMpIHtcbiAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh4cykgPT09ICdbb2JqZWN0IEFycmF5XSc7XG59O1xuXG5mdW5jdGlvbiBtYXAgKHhzLCBmKSB7XG4gIGlmICh4cy5tYXApIHJldHVybiB4cy5tYXAoZik7XG4gIHZhciByZXMgPSBbXTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCB4cy5sZW5ndGg7IGkrKykge1xuICAgIHJlcy5wdXNoKGYoeHNbaV0sIGkpKTtcbiAgfVxuICByZXR1cm4gcmVzO1xufVxuXG52YXIgb2JqZWN0S2V5cyA9IE9iamVjdC5rZXlzIHx8IGZ1bmN0aW9uIChvYmopIHtcbiAgdmFyIHJlcyA9IFtdO1xuICBmb3IgKHZhciBrZXkgaW4gb2JqKSB7XG4gICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmosIGtleSkpIHJlcy5wdXNoKGtleSk7XG4gIH1cbiAgcmV0dXJuIHJlcztcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbmV4cG9ydHMuZGVjb2RlID0gZXhwb3J0cy5wYXJzZSA9IHJlcXVpcmUoJy4vZGVjb2RlJyk7XG5leHBvcnRzLmVuY29kZSA9IGV4cG9ydHMuc3RyaW5naWZ5ID0gcmVxdWlyZSgnLi9lbmNvZGUnKTtcbiIsIi8vIENvcHlyaWdodCBKb3llbnQsIEluYy4gYW5kIG90aGVyIE5vZGUgY29udHJpYnV0b3JzLlxuLy9cbi8vIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhXG4vLyBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlXG4vLyBcIlNvZnR3YXJlXCIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmdcbi8vIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCxcbi8vIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXRcbi8vIHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZVxuLy8gZm9sbG93aW5nIGNvbmRpdGlvbnM6XG4vL1xuLy8gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWRcbi8vIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuLy9cbi8vIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1Ncbi8vIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0Zcbi8vIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU5cbi8vIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLFxuLy8gREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SXG4vLyBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFXG4vLyBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLlxuXG52YXIgcHVueWNvZGUgPSByZXF1aXJlKCdwdW55Y29kZScpO1xuXG5leHBvcnRzLnBhcnNlID0gdXJsUGFyc2U7XG5leHBvcnRzLnJlc29sdmUgPSB1cmxSZXNvbHZlO1xuZXhwb3J0cy5yZXNvbHZlT2JqZWN0ID0gdXJsUmVzb2x2ZU9iamVjdDtcbmV4cG9ydHMuZm9ybWF0ID0gdXJsRm9ybWF0O1xuXG5leHBvcnRzLlVybCA9IFVybDtcblxuZnVuY3Rpb24gVXJsKCkge1xuICB0aGlzLnByb3RvY29sID0gbnVsbDtcbiAgdGhpcy5zbGFzaGVzID0gbnVsbDtcbiAgdGhpcy5hdXRoID0gbnVsbDtcbiAgdGhpcy5ob3N0ID0gbnVsbDtcbiAgdGhpcy5wb3J0ID0gbnVsbDtcbiAgdGhpcy5ob3N0bmFtZSA9IG51bGw7XG4gIHRoaXMuaGFzaCA9IG51bGw7XG4gIHRoaXMuc2VhcmNoID0gbnVsbDtcbiAgdGhpcy5xdWVyeSA9IG51bGw7XG4gIHRoaXMucGF0aG5hbWUgPSBudWxsO1xuICB0aGlzLnBhdGggPSBudWxsO1xuICB0aGlzLmhyZWYgPSBudWxsO1xufVxuXG4vLyBSZWZlcmVuY2U6IFJGQyAzOTg2LCBSRkMgMTgwOCwgUkZDIDIzOTZcblxuLy8gZGVmaW5lIHRoZXNlIGhlcmUgc28gYXQgbGVhc3QgdGhleSBvbmx5IGhhdmUgdG8gYmVcbi8vIGNvbXBpbGVkIG9uY2Ugb24gdGhlIGZpcnN0IG1vZHVsZSBsb2FkLlxudmFyIHByb3RvY29sUGF0dGVybiA9IC9eKFthLXowLTkuKy1dKzopL2ksXG4gICAgcG9ydFBhdHRlcm4gPSAvOlswLTldKiQvLFxuXG4gICAgLy8gUkZDIDIzOTY6IGNoYXJhY3RlcnMgcmVzZXJ2ZWQgZm9yIGRlbGltaXRpbmcgVVJMcy5cbiAgICAvLyBXZSBhY3R1YWxseSBqdXN0IGF1dG8tZXNjYXBlIHRoZXNlLlxuICAgIGRlbGltcyA9IFsnPCcsICc+JywgJ1wiJywgJ2AnLCAnICcsICdcXHInLCAnXFxuJywgJ1xcdCddLFxuXG4gICAgLy8gUkZDIDIzOTY6IGNoYXJhY3RlcnMgbm90IGFsbG93ZWQgZm9yIHZhcmlvdXMgcmVhc29ucy5cbiAgICB1bndpc2UgPSBbJ3snLCAnfScsICd8JywgJ1xcXFwnLCAnXicsICdgJ10uY29uY2F0KGRlbGltcyksXG5cbiAgICAvLyBBbGxvd2VkIGJ5IFJGQ3MsIGJ1dCBjYXVzZSBvZiBYU1MgYXR0YWNrcy4gIEFsd2F5cyBlc2NhcGUgdGhlc2UuXG4gICAgYXV0b0VzY2FwZSA9IFsnXFwnJ10uY29uY2F0KHVud2lzZSksXG4gICAgLy8gQ2hhcmFjdGVycyB0aGF0IGFyZSBuZXZlciBldmVyIGFsbG93ZWQgaW4gYSBob3N0bmFtZS5cbiAgICAvLyBOb3RlIHRoYXQgYW55IGludmFsaWQgY2hhcnMgYXJlIGFsc28gaGFuZGxlZCwgYnV0IHRoZXNlXG4gICAgLy8gYXJlIHRoZSBvbmVzIHRoYXQgYXJlICpleHBlY3RlZCogdG8gYmUgc2Vlbiwgc28gd2UgZmFzdC1wYXRoXG4gICAgLy8gdGhlbS5cbiAgICBub25Ib3N0Q2hhcnMgPSBbJyUnLCAnLycsICc/JywgJzsnLCAnIyddLmNvbmNhdChhdXRvRXNjYXBlKSxcbiAgICBob3N0RW5kaW5nQ2hhcnMgPSBbJy8nLCAnPycsICcjJ10sXG4gICAgaG9zdG5hbWVNYXhMZW4gPSAyNTUsXG4gICAgaG9zdG5hbWVQYXJ0UGF0dGVybiA9IC9eW2EtejAtOUEtWl8tXXswLDYzfSQvLFxuICAgIGhvc3RuYW1lUGFydFN0YXJ0ID0gL14oW2EtejAtOUEtWl8tXXswLDYzfSkoLiopJC8sXG4gICAgLy8gcHJvdG9jb2xzIHRoYXQgY2FuIGFsbG93IFwidW5zYWZlXCIgYW5kIFwidW53aXNlXCIgY2hhcnMuXG4gICAgdW5zYWZlUHJvdG9jb2wgPSB7XG4gICAgICAnamF2YXNjcmlwdCc6IHRydWUsXG4gICAgICAnamF2YXNjcmlwdDonOiB0cnVlXG4gICAgfSxcbiAgICAvLyBwcm90b2NvbHMgdGhhdCBuZXZlciBoYXZlIGEgaG9zdG5hbWUuXG4gICAgaG9zdGxlc3NQcm90b2NvbCA9IHtcbiAgICAgICdqYXZhc2NyaXB0JzogdHJ1ZSxcbiAgICAgICdqYXZhc2NyaXB0Oic6IHRydWVcbiAgICB9LFxuICAgIC8vIHByb3RvY29scyB0aGF0IGFsd2F5cyBjb250YWluIGEgLy8gYml0LlxuICAgIHNsYXNoZWRQcm90b2NvbCA9IHtcbiAgICAgICdodHRwJzogdHJ1ZSxcbiAgICAgICdodHRwcyc6IHRydWUsXG4gICAgICAnZnRwJzogdHJ1ZSxcbiAgICAgICdnb3BoZXInOiB0cnVlLFxuICAgICAgJ2ZpbGUnOiB0cnVlLFxuICAgICAgJ2h0dHA6JzogdHJ1ZSxcbiAgICAgICdodHRwczonOiB0cnVlLFxuICAgICAgJ2Z0cDonOiB0cnVlLFxuICAgICAgJ2dvcGhlcjonOiB0cnVlLFxuICAgICAgJ2ZpbGU6JzogdHJ1ZVxuICAgIH0sXG4gICAgcXVlcnlzdHJpbmcgPSByZXF1aXJlKCdxdWVyeXN0cmluZycpO1xuXG5mdW5jdGlvbiB1cmxQYXJzZSh1cmwsIHBhcnNlUXVlcnlTdHJpbmcsIHNsYXNoZXNEZW5vdGVIb3N0KSB7XG4gIGlmICh1cmwgJiYgaXNPYmplY3QodXJsKSAmJiB1cmwgaW5zdGFuY2VvZiBVcmwpIHJldHVybiB1cmw7XG5cbiAgdmFyIHUgPSBuZXcgVXJsO1xuICB1LnBhcnNlKHVybCwgcGFyc2VRdWVyeVN0cmluZywgc2xhc2hlc0Rlbm90ZUhvc3QpO1xuICByZXR1cm4gdTtcbn1cblxuVXJsLnByb3RvdHlwZS5wYXJzZSA9IGZ1bmN0aW9uKHVybCwgcGFyc2VRdWVyeVN0cmluZywgc2xhc2hlc0Rlbm90ZUhvc3QpIHtcbiAgaWYgKCFpc1N0cmluZyh1cmwpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlBhcmFtZXRlciAndXJsJyBtdXN0IGJlIGEgc3RyaW5nLCBub3QgXCIgKyB0eXBlb2YgdXJsKTtcbiAgfVxuXG4gIHZhciByZXN0ID0gdXJsO1xuXG4gIC8vIHRyaW0gYmVmb3JlIHByb2NlZWRpbmcuXG4gIC8vIFRoaXMgaXMgdG8gc3VwcG9ydCBwYXJzZSBzdHVmZiBsaWtlIFwiICBodHRwOi8vZm9vLmNvbSAgXFxuXCJcbiAgcmVzdCA9IHJlc3QudHJpbSgpO1xuXG4gIHZhciBwcm90byA9IHByb3RvY29sUGF0dGVybi5leGVjKHJlc3QpO1xuICBpZiAocHJvdG8pIHtcbiAgICBwcm90byA9IHByb3RvWzBdO1xuICAgIHZhciBsb3dlclByb3RvID0gcHJvdG8udG9Mb3dlckNhc2UoKTtcbiAgICB0aGlzLnByb3RvY29sID0gbG93ZXJQcm90bztcbiAgICByZXN0ID0gcmVzdC5zdWJzdHIocHJvdG8ubGVuZ3RoKTtcbiAgfVxuXG4gIC8vIGZpZ3VyZSBvdXQgaWYgaXQncyBnb3QgYSBob3N0XG4gIC8vIHVzZXJAc2VydmVyIGlzICphbHdheXMqIGludGVycHJldGVkIGFzIGEgaG9zdG5hbWUsIGFuZCB1cmxcbiAgLy8gcmVzb2x1dGlvbiB3aWxsIHRyZWF0IC8vZm9vL2JhciBhcyBob3N0PWZvbyxwYXRoPWJhciBiZWNhdXNlIHRoYXQnc1xuICAvLyBob3cgdGhlIGJyb3dzZXIgcmVzb2x2ZXMgcmVsYXRpdmUgVVJMcy5cbiAgaWYgKHNsYXNoZXNEZW5vdGVIb3N0IHx8IHByb3RvIHx8IHJlc3QubWF0Y2goL15cXC9cXC9bXkBcXC9dK0BbXkBcXC9dKy8pKSB7XG4gICAgdmFyIHNsYXNoZXMgPSByZXN0LnN1YnN0cigwLCAyKSA9PT0gJy8vJztcbiAgICBpZiAoc2xhc2hlcyAmJiAhKHByb3RvICYmIGhvc3RsZXNzUHJvdG9jb2xbcHJvdG9dKSkge1xuICAgICAgcmVzdCA9IHJlc3Quc3Vic3RyKDIpO1xuICAgICAgdGhpcy5zbGFzaGVzID0gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICBpZiAoIWhvc3RsZXNzUHJvdG9jb2xbcHJvdG9dICYmXG4gICAgICAoc2xhc2hlcyB8fCAocHJvdG8gJiYgIXNsYXNoZWRQcm90b2NvbFtwcm90b10pKSkge1xuXG4gICAgLy8gdGhlcmUncyBhIGhvc3RuYW1lLlxuICAgIC8vIHRoZSBmaXJzdCBpbnN0YW5jZSBvZiAvLCA/LCA7LCBvciAjIGVuZHMgdGhlIGhvc3QuXG4gICAgLy9cbiAgICAvLyBJZiB0aGVyZSBpcyBhbiBAIGluIHRoZSBob3N0bmFtZSwgdGhlbiBub24taG9zdCBjaGFycyAqYXJlKiBhbGxvd2VkXG4gICAgLy8gdG8gdGhlIGxlZnQgb2YgdGhlIGxhc3QgQCBzaWduLCB1bmxlc3Mgc29tZSBob3N0LWVuZGluZyBjaGFyYWN0ZXJcbiAgICAvLyBjb21lcyAqYmVmb3JlKiB0aGUgQC1zaWduLlxuICAgIC8vIFVSTHMgYXJlIG9ibm94aW91cy5cbiAgICAvL1xuICAgIC8vIGV4OlxuICAgIC8vIGh0dHA6Ly9hQGJAYy8gPT4gdXNlcjphQGIgaG9zdDpjXG4gICAgLy8gaHR0cDovL2FAYj9AYyA9PiB1c2VyOmEgaG9zdDpjIHBhdGg6Lz9AY1xuXG4gICAgLy8gdjAuMTIgVE9ETyhpc2FhY3MpOiBUaGlzIGlzIG5vdCBxdWl0ZSBob3cgQ2hyb21lIGRvZXMgdGhpbmdzLlxuICAgIC8vIFJldmlldyBvdXIgdGVzdCBjYXNlIGFnYWluc3QgYnJvd3NlcnMgbW9yZSBjb21wcmVoZW5zaXZlbHkuXG5cbiAgICAvLyBmaW5kIHRoZSBmaXJzdCBpbnN0YW5jZSBvZiBhbnkgaG9zdEVuZGluZ0NoYXJzXG4gICAgdmFyIGhvc3RFbmQgPSAtMTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGhvc3RFbmRpbmdDaGFycy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGhlYyA9IHJlc3QuaW5kZXhPZihob3N0RW5kaW5nQ2hhcnNbaV0pO1xuICAgICAgaWYgKGhlYyAhPT0gLTEgJiYgKGhvc3RFbmQgPT09IC0xIHx8IGhlYyA8IGhvc3RFbmQpKVxuICAgICAgICBob3N0RW5kID0gaGVjO1xuICAgIH1cblxuICAgIC8vIGF0IHRoaXMgcG9pbnQsIGVpdGhlciB3ZSBoYXZlIGFuIGV4cGxpY2l0IHBvaW50IHdoZXJlIHRoZVxuICAgIC8vIGF1dGggcG9ydGlvbiBjYW5ub3QgZ28gcGFzdCwgb3IgdGhlIGxhc3QgQCBjaGFyIGlzIHRoZSBkZWNpZGVyLlxuICAgIHZhciBhdXRoLCBhdFNpZ247XG4gICAgaWYgKGhvc3RFbmQgPT09IC0xKSB7XG4gICAgICAvLyBhdFNpZ24gY2FuIGJlIGFueXdoZXJlLlxuICAgICAgYXRTaWduID0gcmVzdC5sYXN0SW5kZXhPZignQCcpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBhdFNpZ24gbXVzdCBiZSBpbiBhdXRoIHBvcnRpb24uXG4gICAgICAvLyBodHRwOi8vYUBiL2NAZCA9PiBob3N0OmIgYXV0aDphIHBhdGg6L2NAZFxuICAgICAgYXRTaWduID0gcmVzdC5sYXN0SW5kZXhPZignQCcsIGhvc3RFbmQpO1xuICAgIH1cblxuICAgIC8vIE5vdyB3ZSBoYXZlIGEgcG9ydGlvbiB3aGljaCBpcyBkZWZpbml0ZWx5IHRoZSBhdXRoLlxuICAgIC8vIFB1bGwgdGhhdCBvZmYuXG4gICAgaWYgKGF0U2lnbiAhPT0gLTEpIHtcbiAgICAgIGF1dGggPSByZXN0LnNsaWNlKDAsIGF0U2lnbik7XG4gICAgICByZXN0ID0gcmVzdC5zbGljZShhdFNpZ24gKyAxKTtcbiAgICAgIHRoaXMuYXV0aCA9IGRlY29kZVVSSUNvbXBvbmVudChhdXRoKTtcbiAgICB9XG5cbiAgICAvLyB0aGUgaG9zdCBpcyB0aGUgcmVtYWluaW5nIHRvIHRoZSBsZWZ0IG9mIHRoZSBmaXJzdCBub24taG9zdCBjaGFyXG4gICAgaG9zdEVuZCA9IC0xO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbm9uSG9zdENoYXJzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgaGVjID0gcmVzdC5pbmRleE9mKG5vbkhvc3RDaGFyc1tpXSk7XG4gICAgICBpZiAoaGVjICE9PSAtMSAmJiAoaG9zdEVuZCA9PT0gLTEgfHwgaGVjIDwgaG9zdEVuZCkpXG4gICAgICAgIGhvc3RFbmQgPSBoZWM7XG4gICAgfVxuICAgIC8vIGlmIHdlIHN0aWxsIGhhdmUgbm90IGhpdCBpdCwgdGhlbiB0aGUgZW50aXJlIHRoaW5nIGlzIGEgaG9zdC5cbiAgICBpZiAoaG9zdEVuZCA9PT0gLTEpXG4gICAgICBob3N0RW5kID0gcmVzdC5sZW5ndGg7XG5cbiAgICB0aGlzLmhvc3QgPSByZXN0LnNsaWNlKDAsIGhvc3RFbmQpO1xuICAgIHJlc3QgPSByZXN0LnNsaWNlKGhvc3RFbmQpO1xuXG4gICAgLy8gcHVsbCBvdXQgcG9ydC5cbiAgICB0aGlzLnBhcnNlSG9zdCgpO1xuXG4gICAgLy8gd2UndmUgaW5kaWNhdGVkIHRoYXQgdGhlcmUgaXMgYSBob3N0bmFtZSxcbiAgICAvLyBzbyBldmVuIGlmIGl0J3MgZW1wdHksIGl0IGhhcyB0byBiZSBwcmVzZW50LlxuICAgIHRoaXMuaG9zdG5hbWUgPSB0aGlzLmhvc3RuYW1lIHx8ICcnO1xuXG4gICAgLy8gaWYgaG9zdG5hbWUgYmVnaW5zIHdpdGggWyBhbmQgZW5kcyB3aXRoIF1cbiAgICAvLyBhc3N1bWUgdGhhdCBpdCdzIGFuIElQdjYgYWRkcmVzcy5cbiAgICB2YXIgaXB2Nkhvc3RuYW1lID0gdGhpcy5ob3N0bmFtZVswXSA9PT0gJ1snICYmXG4gICAgICAgIHRoaXMuaG9zdG5hbWVbdGhpcy5ob3N0bmFtZS5sZW5ndGggLSAxXSA9PT0gJ10nO1xuXG4gICAgLy8gdmFsaWRhdGUgYSBsaXR0bGUuXG4gICAgaWYgKCFpcHY2SG9zdG5hbWUpIHtcbiAgICAgIHZhciBob3N0cGFydHMgPSB0aGlzLmhvc3RuYW1lLnNwbGl0KC9cXC4vKTtcbiAgICAgIGZvciAodmFyIGkgPSAwLCBsID0gaG9zdHBhcnRzLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgICAgICB2YXIgcGFydCA9IGhvc3RwYXJ0c1tpXTtcbiAgICAgICAgaWYgKCFwYXJ0KSBjb250aW51ZTtcbiAgICAgICAgaWYgKCFwYXJ0Lm1hdGNoKGhvc3RuYW1lUGFydFBhdHRlcm4pKSB7XG4gICAgICAgICAgdmFyIG5ld3BhcnQgPSAnJztcbiAgICAgICAgICBmb3IgKHZhciBqID0gMCwgayA9IHBhcnQubGVuZ3RoOyBqIDwgazsgaisrKSB7XG4gICAgICAgICAgICBpZiAocGFydC5jaGFyQ29kZUF0KGopID4gMTI3KSB7XG4gICAgICAgICAgICAgIC8vIHdlIHJlcGxhY2Ugbm9uLUFTQ0lJIGNoYXIgd2l0aCBhIHRlbXBvcmFyeSBwbGFjZWhvbGRlclxuICAgICAgICAgICAgICAvLyB3ZSBuZWVkIHRoaXMgdG8gbWFrZSBzdXJlIHNpemUgb2YgaG9zdG5hbWUgaXMgbm90XG4gICAgICAgICAgICAgIC8vIGJyb2tlbiBieSByZXBsYWNpbmcgbm9uLUFTQ0lJIGJ5IG5vdGhpbmdcbiAgICAgICAgICAgICAgbmV3cGFydCArPSAneCc7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBuZXdwYXJ0ICs9IHBhcnRbal07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIC8vIHdlIHRlc3QgYWdhaW4gd2l0aCBBU0NJSSBjaGFyIG9ubHlcbiAgICAgICAgICBpZiAoIW5ld3BhcnQubWF0Y2goaG9zdG5hbWVQYXJ0UGF0dGVybikpIHtcbiAgICAgICAgICAgIHZhciB2YWxpZFBhcnRzID0gaG9zdHBhcnRzLnNsaWNlKDAsIGkpO1xuICAgICAgICAgICAgdmFyIG5vdEhvc3QgPSBob3N0cGFydHMuc2xpY2UoaSArIDEpO1xuICAgICAgICAgICAgdmFyIGJpdCA9IHBhcnQubWF0Y2goaG9zdG5hbWVQYXJ0U3RhcnQpO1xuICAgICAgICAgICAgaWYgKGJpdCkge1xuICAgICAgICAgICAgICB2YWxpZFBhcnRzLnB1c2goYml0WzFdKTtcbiAgICAgICAgICAgICAgbm90SG9zdC51bnNoaWZ0KGJpdFsyXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAobm90SG9zdC5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgcmVzdCA9ICcvJyArIG5vdEhvc3Quam9pbignLicpICsgcmVzdDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuaG9zdG5hbWUgPSB2YWxpZFBhcnRzLmpvaW4oJy4nKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0aGlzLmhvc3RuYW1lLmxlbmd0aCA+IGhvc3RuYW1lTWF4TGVuKSB7XG4gICAgICB0aGlzLmhvc3RuYW1lID0gJyc7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIGhvc3RuYW1lcyBhcmUgYWx3YXlzIGxvd2VyIGNhc2UuXG4gICAgICB0aGlzLmhvc3RuYW1lID0gdGhpcy5ob3N0bmFtZS50b0xvd2VyQ2FzZSgpO1xuICAgIH1cblxuICAgIGlmICghaXB2Nkhvc3RuYW1lKSB7XG4gICAgICAvLyBJRE5BIFN1cHBvcnQ6IFJldHVybnMgYSBwdW55IGNvZGVkIHJlcHJlc2VudGF0aW9uIG9mIFwiZG9tYWluXCIuXG4gICAgICAvLyBJdCBvbmx5IGNvbnZlcnRzIHRoZSBwYXJ0IG9mIHRoZSBkb21haW4gbmFtZSB0aGF0XG4gICAgICAvLyBoYXMgbm9uIEFTQ0lJIGNoYXJhY3RlcnMuIEkuZS4gaXQgZG9zZW50IG1hdHRlciBpZlxuICAgICAgLy8geW91IGNhbGwgaXQgd2l0aCBhIGRvbWFpbiB0aGF0IGFscmVhZHkgaXMgaW4gQVNDSUkuXG4gICAgICB2YXIgZG9tYWluQXJyYXkgPSB0aGlzLmhvc3RuYW1lLnNwbGl0KCcuJyk7XG4gICAgICB2YXIgbmV3T3V0ID0gW107XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGRvbWFpbkFycmF5Lmxlbmd0aDsgKytpKSB7XG4gICAgICAgIHZhciBzID0gZG9tYWluQXJyYXlbaV07XG4gICAgICAgIG5ld091dC5wdXNoKHMubWF0Y2goL1teQS1aYS16MC05Xy1dLykgP1xuICAgICAgICAgICAgJ3huLS0nICsgcHVueWNvZGUuZW5jb2RlKHMpIDogcyk7XG4gICAgICB9XG4gICAgICB0aGlzLmhvc3RuYW1lID0gbmV3T3V0LmpvaW4oJy4nKTtcbiAgICB9XG5cbiAgICB2YXIgcCA9IHRoaXMucG9ydCA/ICc6JyArIHRoaXMucG9ydCA6ICcnO1xuICAgIHZhciBoID0gdGhpcy5ob3N0bmFtZSB8fCAnJztcbiAgICB0aGlzLmhvc3QgPSBoICsgcDtcbiAgICB0aGlzLmhyZWYgKz0gdGhpcy5ob3N0O1xuXG4gICAgLy8gc3RyaXAgWyBhbmQgXSBmcm9tIHRoZSBob3N0bmFtZVxuICAgIC8vIHRoZSBob3N0IGZpZWxkIHN0aWxsIHJldGFpbnMgdGhlbSwgdGhvdWdoXG4gICAgaWYgKGlwdjZIb3N0bmFtZSkge1xuICAgICAgdGhpcy5ob3N0bmFtZSA9IHRoaXMuaG9zdG5hbWUuc3Vic3RyKDEsIHRoaXMuaG9zdG5hbWUubGVuZ3RoIC0gMik7XG4gICAgICBpZiAocmVzdFswXSAhPT0gJy8nKSB7XG4gICAgICAgIHJlc3QgPSAnLycgKyByZXN0O1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIG5vdyByZXN0IGlzIHNldCB0byB0aGUgcG9zdC1ob3N0IHN0dWZmLlxuICAvLyBjaG9wIG9mZiBhbnkgZGVsaW0gY2hhcnMuXG4gIGlmICghdW5zYWZlUHJvdG9jb2xbbG93ZXJQcm90b10pIHtcblxuICAgIC8vIEZpcnN0LCBtYWtlIDEwMCUgc3VyZSB0aGF0IGFueSBcImF1dG9Fc2NhcGVcIiBjaGFycyBnZXRcbiAgICAvLyBlc2NhcGVkLCBldmVuIGlmIGVuY29kZVVSSUNvbXBvbmVudCBkb2Vzbid0IHRoaW5rIHRoZXlcbiAgICAvLyBuZWVkIHRvIGJlLlxuICAgIGZvciAodmFyIGkgPSAwLCBsID0gYXV0b0VzY2FwZS5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICAgIHZhciBhZSA9IGF1dG9Fc2NhcGVbaV07XG4gICAgICB2YXIgZXNjID0gZW5jb2RlVVJJQ29tcG9uZW50KGFlKTtcbiAgICAgIGlmIChlc2MgPT09IGFlKSB7XG4gICAgICAgIGVzYyA9IGVzY2FwZShhZSk7XG4gICAgICB9XG4gICAgICByZXN0ID0gcmVzdC5zcGxpdChhZSkuam9pbihlc2MpO1xuICAgIH1cbiAgfVxuXG5cbiAgLy8gY2hvcCBvZmYgZnJvbSB0aGUgdGFpbCBmaXJzdC5cbiAgdmFyIGhhc2ggPSByZXN0LmluZGV4T2YoJyMnKTtcbiAgaWYgKGhhc2ggIT09IC0xKSB7XG4gICAgLy8gZ290IGEgZnJhZ21lbnQgc3RyaW5nLlxuICAgIHRoaXMuaGFzaCA9IHJlc3Quc3Vic3RyKGhhc2gpO1xuICAgIHJlc3QgPSByZXN0LnNsaWNlKDAsIGhhc2gpO1xuICB9XG4gIHZhciBxbSA9IHJlc3QuaW5kZXhPZignPycpO1xuICBpZiAocW0gIT09IC0xKSB7XG4gICAgdGhpcy5zZWFyY2ggPSByZXN0LnN1YnN0cihxbSk7XG4gICAgdGhpcy5xdWVyeSA9IHJlc3Quc3Vic3RyKHFtICsgMSk7XG4gICAgaWYgKHBhcnNlUXVlcnlTdHJpbmcpIHtcbiAgICAgIHRoaXMucXVlcnkgPSBxdWVyeXN0cmluZy5wYXJzZSh0aGlzLnF1ZXJ5KTtcbiAgICB9XG4gICAgcmVzdCA9IHJlc3Quc2xpY2UoMCwgcW0pO1xuICB9IGVsc2UgaWYgKHBhcnNlUXVlcnlTdHJpbmcpIHtcbiAgICAvLyBubyBxdWVyeSBzdHJpbmcsIGJ1dCBwYXJzZVF1ZXJ5U3RyaW5nIHN0aWxsIHJlcXVlc3RlZFxuICAgIHRoaXMuc2VhcmNoID0gJyc7XG4gICAgdGhpcy5xdWVyeSA9IHt9O1xuICB9XG4gIGlmIChyZXN0KSB0aGlzLnBhdGhuYW1lID0gcmVzdDtcbiAgaWYgKHNsYXNoZWRQcm90b2NvbFtsb3dlclByb3RvXSAmJlxuICAgICAgdGhpcy5ob3N0bmFtZSAmJiAhdGhpcy5wYXRobmFtZSkge1xuICAgIHRoaXMucGF0aG5hbWUgPSAnLyc7XG4gIH1cblxuICAvL3RvIHN1cHBvcnQgaHR0cC5yZXF1ZXN0XG4gIGlmICh0aGlzLnBhdGhuYW1lIHx8IHRoaXMuc2VhcmNoKSB7XG4gICAgdmFyIHAgPSB0aGlzLnBhdGhuYW1lIHx8ICcnO1xuICAgIHZhciBzID0gdGhpcy5zZWFyY2ggfHwgJyc7XG4gICAgdGhpcy5wYXRoID0gcCArIHM7XG4gIH1cblxuICAvLyBmaW5hbGx5LCByZWNvbnN0cnVjdCB0aGUgaHJlZiBiYXNlZCBvbiB3aGF0IGhhcyBiZWVuIHZhbGlkYXRlZC5cbiAgdGhpcy5ocmVmID0gdGhpcy5mb3JtYXQoKTtcbiAgcmV0dXJuIHRoaXM7XG59O1xuXG4vLyBmb3JtYXQgYSBwYXJzZWQgb2JqZWN0IGludG8gYSB1cmwgc3RyaW5nXG5mdW5jdGlvbiB1cmxGb3JtYXQob2JqKSB7XG4gIC8vIGVuc3VyZSBpdCdzIGFuIG9iamVjdCwgYW5kIG5vdCBhIHN0cmluZyB1cmwuXG4gIC8vIElmIGl0J3MgYW4gb2JqLCB0aGlzIGlzIGEgbm8tb3AuXG4gIC8vIHRoaXMgd2F5LCB5b3UgY2FuIGNhbGwgdXJsX2Zvcm1hdCgpIG9uIHN0cmluZ3NcbiAgLy8gdG8gY2xlYW4gdXAgcG90ZW50aWFsbHkgd29ua3kgdXJscy5cbiAgaWYgKGlzU3RyaW5nKG9iaikpIG9iaiA9IHVybFBhcnNlKG9iaik7XG4gIGlmICghKG9iaiBpbnN0YW5jZW9mIFVybCkpIHJldHVybiBVcmwucHJvdG90eXBlLmZvcm1hdC5jYWxsKG9iaik7XG4gIHJldHVybiBvYmouZm9ybWF0KCk7XG59XG5cblVybC5wcm90b3R5cGUuZm9ybWF0ID0gZnVuY3Rpb24oKSB7XG4gIHZhciBhdXRoID0gdGhpcy5hdXRoIHx8ICcnO1xuICBpZiAoYXV0aCkge1xuICAgIGF1dGggPSBlbmNvZGVVUklDb21wb25lbnQoYXV0aCk7XG4gICAgYXV0aCA9IGF1dGgucmVwbGFjZSgvJTNBL2ksICc6Jyk7XG4gICAgYXV0aCArPSAnQCc7XG4gIH1cblxuICB2YXIgcHJvdG9jb2wgPSB0aGlzLnByb3RvY29sIHx8ICcnLFxuICAgICAgcGF0aG5hbWUgPSB0aGlzLnBhdGhuYW1lIHx8ICcnLFxuICAgICAgaGFzaCA9IHRoaXMuaGFzaCB8fCAnJyxcbiAgICAgIGhvc3QgPSBmYWxzZSxcbiAgICAgIHF1ZXJ5ID0gJyc7XG5cbiAgaWYgKHRoaXMuaG9zdCkge1xuICAgIGhvc3QgPSBhdXRoICsgdGhpcy5ob3N0O1xuICB9IGVsc2UgaWYgKHRoaXMuaG9zdG5hbWUpIHtcbiAgICBob3N0ID0gYXV0aCArICh0aGlzLmhvc3RuYW1lLmluZGV4T2YoJzonKSA9PT0gLTEgP1xuICAgICAgICB0aGlzLmhvc3RuYW1lIDpcbiAgICAgICAgJ1snICsgdGhpcy5ob3N0bmFtZSArICddJyk7XG4gICAgaWYgKHRoaXMucG9ydCkge1xuICAgICAgaG9zdCArPSAnOicgKyB0aGlzLnBvcnQ7XG4gICAgfVxuICB9XG5cbiAgaWYgKHRoaXMucXVlcnkgJiZcbiAgICAgIGlzT2JqZWN0KHRoaXMucXVlcnkpICYmXG4gICAgICBPYmplY3Qua2V5cyh0aGlzLnF1ZXJ5KS5sZW5ndGgpIHtcbiAgICBxdWVyeSA9IHF1ZXJ5c3RyaW5nLnN0cmluZ2lmeSh0aGlzLnF1ZXJ5KTtcbiAgfVxuXG4gIHZhciBzZWFyY2ggPSB0aGlzLnNlYXJjaCB8fCAocXVlcnkgJiYgKCc/JyArIHF1ZXJ5KSkgfHwgJyc7XG5cbiAgaWYgKHByb3RvY29sICYmIHByb3RvY29sLnN1YnN0cigtMSkgIT09ICc6JykgcHJvdG9jb2wgKz0gJzonO1xuXG4gIC8vIG9ubHkgdGhlIHNsYXNoZWRQcm90b2NvbHMgZ2V0IHRoZSAvLy4gIE5vdCBtYWlsdG86LCB4bXBwOiwgZXRjLlxuICAvLyB1bmxlc3MgdGhleSBoYWQgdGhlbSB0byBiZWdpbiB3aXRoLlxuICBpZiAodGhpcy5zbGFzaGVzIHx8XG4gICAgICAoIXByb3RvY29sIHx8IHNsYXNoZWRQcm90b2NvbFtwcm90b2NvbF0pICYmIGhvc3QgIT09IGZhbHNlKSB7XG4gICAgaG9zdCA9ICcvLycgKyAoaG9zdCB8fCAnJyk7XG4gICAgaWYgKHBhdGhuYW1lICYmIHBhdGhuYW1lLmNoYXJBdCgwKSAhPT0gJy8nKSBwYXRobmFtZSA9ICcvJyArIHBhdGhuYW1lO1xuICB9IGVsc2UgaWYgKCFob3N0KSB7XG4gICAgaG9zdCA9ICcnO1xuICB9XG5cbiAgaWYgKGhhc2ggJiYgaGFzaC5jaGFyQXQoMCkgIT09ICcjJykgaGFzaCA9ICcjJyArIGhhc2g7XG4gIGlmIChzZWFyY2ggJiYgc2VhcmNoLmNoYXJBdCgwKSAhPT0gJz8nKSBzZWFyY2ggPSAnPycgKyBzZWFyY2g7XG5cbiAgcGF0aG5hbWUgPSBwYXRobmFtZS5yZXBsYWNlKC9bPyNdL2csIGZ1bmN0aW9uKG1hdGNoKSB7XG4gICAgcmV0dXJuIGVuY29kZVVSSUNvbXBvbmVudChtYXRjaCk7XG4gIH0pO1xuICBzZWFyY2ggPSBzZWFyY2gucmVwbGFjZSgnIycsICclMjMnKTtcblxuICByZXR1cm4gcHJvdG9jb2wgKyBob3N0ICsgcGF0aG5hbWUgKyBzZWFyY2ggKyBoYXNoO1xufTtcblxuZnVuY3Rpb24gdXJsUmVzb2x2ZShzb3VyY2UsIHJlbGF0aXZlKSB7XG4gIHJldHVybiB1cmxQYXJzZShzb3VyY2UsIGZhbHNlLCB0cnVlKS5yZXNvbHZlKHJlbGF0aXZlKTtcbn1cblxuVXJsLnByb3RvdHlwZS5yZXNvbHZlID0gZnVuY3Rpb24ocmVsYXRpdmUpIHtcbiAgcmV0dXJuIHRoaXMucmVzb2x2ZU9iamVjdCh1cmxQYXJzZShyZWxhdGl2ZSwgZmFsc2UsIHRydWUpKS5mb3JtYXQoKTtcbn07XG5cbmZ1bmN0aW9uIHVybFJlc29sdmVPYmplY3Qoc291cmNlLCByZWxhdGl2ZSkge1xuICBpZiAoIXNvdXJjZSkgcmV0dXJuIHJlbGF0aXZlO1xuICByZXR1cm4gdXJsUGFyc2Uoc291cmNlLCBmYWxzZSwgdHJ1ZSkucmVzb2x2ZU9iamVjdChyZWxhdGl2ZSk7XG59XG5cblVybC5wcm90b3R5cGUucmVzb2x2ZU9iamVjdCA9IGZ1bmN0aW9uKHJlbGF0aXZlKSB7XG4gIGlmIChpc1N0cmluZyhyZWxhdGl2ZSkpIHtcbiAgICB2YXIgcmVsID0gbmV3IFVybCgpO1xuICAgIHJlbC5wYXJzZShyZWxhdGl2ZSwgZmFsc2UsIHRydWUpO1xuICAgIHJlbGF0aXZlID0gcmVsO1xuICB9XG5cbiAgdmFyIHJlc3VsdCA9IG5ldyBVcmwoKTtcbiAgT2JqZWN0LmtleXModGhpcykuZm9yRWFjaChmdW5jdGlvbihrKSB7XG4gICAgcmVzdWx0W2tdID0gdGhpc1trXTtcbiAgfSwgdGhpcyk7XG5cbiAgLy8gaGFzaCBpcyBhbHdheXMgb3ZlcnJpZGRlbiwgbm8gbWF0dGVyIHdoYXQuXG4gIC8vIGV2ZW4gaHJlZj1cIlwiIHdpbGwgcmVtb3ZlIGl0LlxuICByZXN1bHQuaGFzaCA9IHJlbGF0aXZlLmhhc2g7XG5cbiAgLy8gaWYgdGhlIHJlbGF0aXZlIHVybCBpcyBlbXB0eSwgdGhlbiB0aGVyZSdzIG5vdGhpbmcgbGVmdCB0byBkbyBoZXJlLlxuICBpZiAocmVsYXRpdmUuaHJlZiA9PT0gJycpIHtcbiAgICByZXN1bHQuaHJlZiA9IHJlc3VsdC5mb3JtYXQoKTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgLy8gaHJlZnMgbGlrZSAvL2Zvby9iYXIgYWx3YXlzIGN1dCB0byB0aGUgcHJvdG9jb2wuXG4gIGlmIChyZWxhdGl2ZS5zbGFzaGVzICYmICFyZWxhdGl2ZS5wcm90b2NvbCkge1xuICAgIC8vIHRha2UgZXZlcnl0aGluZyBleGNlcHQgdGhlIHByb3RvY29sIGZyb20gcmVsYXRpdmVcbiAgICBPYmplY3Qua2V5cyhyZWxhdGl2ZSkuZm9yRWFjaChmdW5jdGlvbihrKSB7XG4gICAgICBpZiAoayAhPT0gJ3Byb3RvY29sJylcbiAgICAgICAgcmVzdWx0W2tdID0gcmVsYXRpdmVba107XG4gICAgfSk7XG5cbiAgICAvL3VybFBhcnNlIGFwcGVuZHMgdHJhaWxpbmcgLyB0byB1cmxzIGxpa2UgaHR0cDovL3d3dy5leGFtcGxlLmNvbVxuICAgIGlmIChzbGFzaGVkUHJvdG9jb2xbcmVzdWx0LnByb3RvY29sXSAmJlxuICAgICAgICByZXN1bHQuaG9zdG5hbWUgJiYgIXJlc3VsdC5wYXRobmFtZSkge1xuICAgICAgcmVzdWx0LnBhdGggPSByZXN1bHQucGF0aG5hbWUgPSAnLyc7XG4gICAgfVxuXG4gICAgcmVzdWx0LmhyZWYgPSByZXN1bHQuZm9ybWF0KCk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIGlmIChyZWxhdGl2ZS5wcm90b2NvbCAmJiByZWxhdGl2ZS5wcm90b2NvbCAhPT0gcmVzdWx0LnByb3RvY29sKSB7XG4gICAgLy8gaWYgaXQncyBhIGtub3duIHVybCBwcm90b2NvbCwgdGhlbiBjaGFuZ2luZ1xuICAgIC8vIHRoZSBwcm90b2NvbCBkb2VzIHdlaXJkIHRoaW5nc1xuICAgIC8vIGZpcnN0LCBpZiBpdCdzIG5vdCBmaWxlOiwgdGhlbiB3ZSBNVVNUIGhhdmUgYSBob3N0LFxuICAgIC8vIGFuZCBpZiB0aGVyZSB3YXMgYSBwYXRoXG4gICAgLy8gdG8gYmVnaW4gd2l0aCwgdGhlbiB3ZSBNVVNUIGhhdmUgYSBwYXRoLlxuICAgIC8vIGlmIGl0IGlzIGZpbGU6LCB0aGVuIHRoZSBob3N0IGlzIGRyb3BwZWQsXG4gICAgLy8gYmVjYXVzZSB0aGF0J3Mga25vd24gdG8gYmUgaG9zdGxlc3MuXG4gICAgLy8gYW55dGhpbmcgZWxzZSBpcyBhc3N1bWVkIHRvIGJlIGFic29sdXRlLlxuICAgIGlmICghc2xhc2hlZFByb3RvY29sW3JlbGF0aXZlLnByb3RvY29sXSkge1xuICAgICAgT2JqZWN0LmtleXMocmVsYXRpdmUpLmZvckVhY2goZnVuY3Rpb24oaykge1xuICAgICAgICByZXN1bHRba10gPSByZWxhdGl2ZVtrXTtcbiAgICAgIH0pO1xuICAgICAgcmVzdWx0LmhyZWYgPSByZXN1bHQuZm9ybWF0KCk7XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIHJlc3VsdC5wcm90b2NvbCA9IHJlbGF0aXZlLnByb3RvY29sO1xuICAgIGlmICghcmVsYXRpdmUuaG9zdCAmJiAhaG9zdGxlc3NQcm90b2NvbFtyZWxhdGl2ZS5wcm90b2NvbF0pIHtcbiAgICAgIHZhciByZWxQYXRoID0gKHJlbGF0aXZlLnBhdGhuYW1lIHx8ICcnKS5zcGxpdCgnLycpO1xuICAgICAgd2hpbGUgKHJlbFBhdGgubGVuZ3RoICYmICEocmVsYXRpdmUuaG9zdCA9IHJlbFBhdGguc2hpZnQoKSkpO1xuICAgICAgaWYgKCFyZWxhdGl2ZS5ob3N0KSByZWxhdGl2ZS5ob3N0ID0gJyc7XG4gICAgICBpZiAoIXJlbGF0aXZlLmhvc3RuYW1lKSByZWxhdGl2ZS5ob3N0bmFtZSA9ICcnO1xuICAgICAgaWYgKHJlbFBhdGhbMF0gIT09ICcnKSByZWxQYXRoLnVuc2hpZnQoJycpO1xuICAgICAgaWYgKHJlbFBhdGgubGVuZ3RoIDwgMikgcmVsUGF0aC51bnNoaWZ0KCcnKTtcbiAgICAgIHJlc3VsdC5wYXRobmFtZSA9IHJlbFBhdGguam9pbignLycpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXN1bHQucGF0aG5hbWUgPSByZWxhdGl2ZS5wYXRobmFtZTtcbiAgICB9XG4gICAgcmVzdWx0LnNlYXJjaCA9IHJlbGF0aXZlLnNlYXJjaDtcbiAgICByZXN1bHQucXVlcnkgPSByZWxhdGl2ZS5xdWVyeTtcbiAgICByZXN1bHQuaG9zdCA9IHJlbGF0aXZlLmhvc3QgfHwgJyc7XG4gICAgcmVzdWx0LmF1dGggPSByZWxhdGl2ZS5hdXRoO1xuICAgIHJlc3VsdC5ob3N0bmFtZSA9IHJlbGF0aXZlLmhvc3RuYW1lIHx8IHJlbGF0aXZlLmhvc3Q7XG4gICAgcmVzdWx0LnBvcnQgPSByZWxhdGl2ZS5wb3J0O1xuICAgIC8vIHRvIHN1cHBvcnQgaHR0cC5yZXF1ZXN0XG4gICAgaWYgKHJlc3VsdC5wYXRobmFtZSB8fCByZXN1bHQuc2VhcmNoKSB7XG4gICAgICB2YXIgcCA9IHJlc3VsdC5wYXRobmFtZSB8fCAnJztcbiAgICAgIHZhciBzID0gcmVzdWx0LnNlYXJjaCB8fCAnJztcbiAgICAgIHJlc3VsdC5wYXRoID0gcCArIHM7XG4gICAgfVxuICAgIHJlc3VsdC5zbGFzaGVzID0gcmVzdWx0LnNsYXNoZXMgfHwgcmVsYXRpdmUuc2xhc2hlcztcbiAgICByZXN1bHQuaHJlZiA9IHJlc3VsdC5mb3JtYXQoKTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgdmFyIGlzU291cmNlQWJzID0gKHJlc3VsdC5wYXRobmFtZSAmJiByZXN1bHQucGF0aG5hbWUuY2hhckF0KDApID09PSAnLycpLFxuICAgICAgaXNSZWxBYnMgPSAoXG4gICAgICAgICAgcmVsYXRpdmUuaG9zdCB8fFxuICAgICAgICAgIHJlbGF0aXZlLnBhdGhuYW1lICYmIHJlbGF0aXZlLnBhdGhuYW1lLmNoYXJBdCgwKSA9PT0gJy8nXG4gICAgICApLFxuICAgICAgbXVzdEVuZEFicyA9IChpc1JlbEFicyB8fCBpc1NvdXJjZUFicyB8fFxuICAgICAgICAgICAgICAgICAgICAocmVzdWx0Lmhvc3QgJiYgcmVsYXRpdmUucGF0aG5hbWUpKSxcbiAgICAgIHJlbW92ZUFsbERvdHMgPSBtdXN0RW5kQWJzLFxuICAgICAgc3JjUGF0aCA9IHJlc3VsdC5wYXRobmFtZSAmJiByZXN1bHQucGF0aG5hbWUuc3BsaXQoJy8nKSB8fCBbXSxcbiAgICAgIHJlbFBhdGggPSByZWxhdGl2ZS5wYXRobmFtZSAmJiByZWxhdGl2ZS5wYXRobmFtZS5zcGxpdCgnLycpIHx8IFtdLFxuICAgICAgcHN5Y2hvdGljID0gcmVzdWx0LnByb3RvY29sICYmICFzbGFzaGVkUHJvdG9jb2xbcmVzdWx0LnByb3RvY29sXTtcblxuICAvLyBpZiB0aGUgdXJsIGlzIGEgbm9uLXNsYXNoZWQgdXJsLCB0aGVuIHJlbGF0aXZlXG4gIC8vIGxpbmtzIGxpa2UgLi4vLi4gc2hvdWxkIGJlIGFibGVcbiAgLy8gdG8gY3Jhd2wgdXAgdG8gdGhlIGhvc3RuYW1lLCBhcyB3ZWxsLiAgVGhpcyBpcyBzdHJhbmdlLlxuICAvLyByZXN1bHQucHJvdG9jb2wgaGFzIGFscmVhZHkgYmVlbiBzZXQgYnkgbm93LlxuICAvLyBMYXRlciBvbiwgcHV0IHRoZSBmaXJzdCBwYXRoIHBhcnQgaW50byB0aGUgaG9zdCBmaWVsZC5cbiAgaWYgKHBzeWNob3RpYykge1xuICAgIHJlc3VsdC5ob3N0bmFtZSA9ICcnO1xuICAgIHJlc3VsdC5wb3J0ID0gbnVsbDtcbiAgICBpZiAocmVzdWx0Lmhvc3QpIHtcbiAgICAgIGlmIChzcmNQYXRoWzBdID09PSAnJykgc3JjUGF0aFswXSA9IHJlc3VsdC5ob3N0O1xuICAgICAgZWxzZSBzcmNQYXRoLnVuc2hpZnQocmVzdWx0Lmhvc3QpO1xuICAgIH1cbiAgICByZXN1bHQuaG9zdCA9ICcnO1xuICAgIGlmIChyZWxhdGl2ZS5wcm90b2NvbCkge1xuICAgICAgcmVsYXRpdmUuaG9zdG5hbWUgPSBudWxsO1xuICAgICAgcmVsYXRpdmUucG9ydCA9IG51bGw7XG4gICAgICBpZiAocmVsYXRpdmUuaG9zdCkge1xuICAgICAgICBpZiAocmVsUGF0aFswXSA9PT0gJycpIHJlbFBhdGhbMF0gPSByZWxhdGl2ZS5ob3N0O1xuICAgICAgICBlbHNlIHJlbFBhdGgudW5zaGlmdChyZWxhdGl2ZS5ob3N0KTtcbiAgICAgIH1cbiAgICAgIHJlbGF0aXZlLmhvc3QgPSBudWxsO1xuICAgIH1cbiAgICBtdXN0RW5kQWJzID0gbXVzdEVuZEFicyAmJiAocmVsUGF0aFswXSA9PT0gJycgfHwgc3JjUGF0aFswXSA9PT0gJycpO1xuICB9XG5cbiAgaWYgKGlzUmVsQWJzKSB7XG4gICAgLy8gaXQncyBhYnNvbHV0ZS5cbiAgICByZXN1bHQuaG9zdCA9IChyZWxhdGl2ZS5ob3N0IHx8IHJlbGF0aXZlLmhvc3QgPT09ICcnKSA/XG4gICAgICAgICAgICAgICAgICByZWxhdGl2ZS5ob3N0IDogcmVzdWx0Lmhvc3Q7XG4gICAgcmVzdWx0Lmhvc3RuYW1lID0gKHJlbGF0aXZlLmhvc3RuYW1lIHx8IHJlbGF0aXZlLmhvc3RuYW1lID09PSAnJykgP1xuICAgICAgICAgICAgICAgICAgICAgIHJlbGF0aXZlLmhvc3RuYW1lIDogcmVzdWx0Lmhvc3RuYW1lO1xuICAgIHJlc3VsdC5zZWFyY2ggPSByZWxhdGl2ZS5zZWFyY2g7XG4gICAgcmVzdWx0LnF1ZXJ5ID0gcmVsYXRpdmUucXVlcnk7XG4gICAgc3JjUGF0aCA9IHJlbFBhdGg7XG4gICAgLy8gZmFsbCB0aHJvdWdoIHRvIHRoZSBkb3QtaGFuZGxpbmcgYmVsb3cuXG4gIH0gZWxzZSBpZiAocmVsUGF0aC5sZW5ndGgpIHtcbiAgICAvLyBpdCdzIHJlbGF0aXZlXG4gICAgLy8gdGhyb3cgYXdheSB0aGUgZXhpc3RpbmcgZmlsZSwgYW5kIHRha2UgdGhlIG5ldyBwYXRoIGluc3RlYWQuXG4gICAgaWYgKCFzcmNQYXRoKSBzcmNQYXRoID0gW107XG4gICAgc3JjUGF0aC5wb3AoKTtcbiAgICBzcmNQYXRoID0gc3JjUGF0aC5jb25jYXQocmVsUGF0aCk7XG4gICAgcmVzdWx0LnNlYXJjaCA9IHJlbGF0aXZlLnNlYXJjaDtcbiAgICByZXN1bHQucXVlcnkgPSByZWxhdGl2ZS5xdWVyeTtcbiAgfSBlbHNlIGlmICghaXNOdWxsT3JVbmRlZmluZWQocmVsYXRpdmUuc2VhcmNoKSkge1xuICAgIC8vIGp1c3QgcHVsbCBvdXQgdGhlIHNlYXJjaC5cbiAgICAvLyBsaWtlIGhyZWY9Jz9mb28nLlxuICAgIC8vIFB1dCB0aGlzIGFmdGVyIHRoZSBvdGhlciB0d28gY2FzZXMgYmVjYXVzZSBpdCBzaW1wbGlmaWVzIHRoZSBib29sZWFuc1xuICAgIGlmIChwc3ljaG90aWMpIHtcbiAgICAgIHJlc3VsdC5ob3N0bmFtZSA9IHJlc3VsdC5ob3N0ID0gc3JjUGF0aC5zaGlmdCgpO1xuICAgICAgLy9vY2NhdGlvbmFseSB0aGUgYXV0aCBjYW4gZ2V0IHN0dWNrIG9ubHkgaW4gaG9zdFxuICAgICAgLy90aGlzIGVzcGVjaWFseSBoYXBwZW5zIGluIGNhc2VzIGxpa2VcbiAgICAgIC8vdXJsLnJlc29sdmVPYmplY3QoJ21haWx0bzpsb2NhbDFAZG9tYWluMScsICdsb2NhbDJAZG9tYWluMicpXG4gICAgICB2YXIgYXV0aEluSG9zdCA9IHJlc3VsdC5ob3N0ICYmIHJlc3VsdC5ob3N0LmluZGV4T2YoJ0AnKSA+IDAgP1xuICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQuaG9zdC5zcGxpdCgnQCcpIDogZmFsc2U7XG4gICAgICBpZiAoYXV0aEluSG9zdCkge1xuICAgICAgICByZXN1bHQuYXV0aCA9IGF1dGhJbkhvc3Quc2hpZnQoKTtcbiAgICAgICAgcmVzdWx0Lmhvc3QgPSByZXN1bHQuaG9zdG5hbWUgPSBhdXRoSW5Ib3N0LnNoaWZ0KCk7XG4gICAgICB9XG4gICAgfVxuICAgIHJlc3VsdC5zZWFyY2ggPSByZWxhdGl2ZS5zZWFyY2g7XG4gICAgcmVzdWx0LnF1ZXJ5ID0gcmVsYXRpdmUucXVlcnk7XG4gICAgLy90byBzdXBwb3J0IGh0dHAucmVxdWVzdFxuICAgIGlmICghaXNOdWxsKHJlc3VsdC5wYXRobmFtZSkgfHwgIWlzTnVsbChyZXN1bHQuc2VhcmNoKSkge1xuICAgICAgcmVzdWx0LnBhdGggPSAocmVzdWx0LnBhdGhuYW1lID8gcmVzdWx0LnBhdGhuYW1lIDogJycpICtcbiAgICAgICAgICAgICAgICAgICAgKHJlc3VsdC5zZWFyY2ggPyByZXN1bHQuc2VhcmNoIDogJycpO1xuICAgIH1cbiAgICByZXN1bHQuaHJlZiA9IHJlc3VsdC5mb3JtYXQoKTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgaWYgKCFzcmNQYXRoLmxlbmd0aCkge1xuICAgIC8vIG5vIHBhdGggYXQgYWxsLiAgZWFzeS5cbiAgICAvLyB3ZSd2ZSBhbHJlYWR5IGhhbmRsZWQgdGhlIG90aGVyIHN0dWZmIGFib3ZlLlxuICAgIHJlc3VsdC5wYXRobmFtZSA9IG51bGw7XG4gICAgLy90byBzdXBwb3J0IGh0dHAucmVxdWVzdFxuICAgIGlmIChyZXN1bHQuc2VhcmNoKSB7XG4gICAgICByZXN1bHQucGF0aCA9ICcvJyArIHJlc3VsdC5zZWFyY2g7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJlc3VsdC5wYXRoID0gbnVsbDtcbiAgICB9XG4gICAgcmVzdWx0LmhyZWYgPSByZXN1bHQuZm9ybWF0KCk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIC8vIGlmIGEgdXJsIEVORHMgaW4gLiBvciAuLiwgdGhlbiBpdCBtdXN0IGdldCBhIHRyYWlsaW5nIHNsYXNoLlxuICAvLyBob3dldmVyLCBpZiBpdCBlbmRzIGluIGFueXRoaW5nIGVsc2Ugbm9uLXNsYXNoeSxcbiAgLy8gdGhlbiBpdCBtdXN0IE5PVCBnZXQgYSB0cmFpbGluZyBzbGFzaC5cbiAgdmFyIGxhc3QgPSBzcmNQYXRoLnNsaWNlKC0xKVswXTtcbiAgdmFyIGhhc1RyYWlsaW5nU2xhc2ggPSAoXG4gICAgICAocmVzdWx0Lmhvc3QgfHwgcmVsYXRpdmUuaG9zdCkgJiYgKGxhc3QgPT09ICcuJyB8fCBsYXN0ID09PSAnLi4nKSB8fFxuICAgICAgbGFzdCA9PT0gJycpO1xuXG4gIC8vIHN0cmlwIHNpbmdsZSBkb3RzLCByZXNvbHZlIGRvdWJsZSBkb3RzIHRvIHBhcmVudCBkaXJcbiAgLy8gaWYgdGhlIHBhdGggdHJpZXMgdG8gZ28gYWJvdmUgdGhlIHJvb3QsIGB1cGAgZW5kcyB1cCA+IDBcbiAgdmFyIHVwID0gMDtcbiAgZm9yICh2YXIgaSA9IHNyY1BhdGgubGVuZ3RoOyBpID49IDA7IGktLSkge1xuICAgIGxhc3QgPSBzcmNQYXRoW2ldO1xuICAgIGlmIChsYXN0ID09ICcuJykge1xuICAgICAgc3JjUGF0aC5zcGxpY2UoaSwgMSk7XG4gICAgfSBlbHNlIGlmIChsYXN0ID09PSAnLi4nKSB7XG4gICAgICBzcmNQYXRoLnNwbGljZShpLCAxKTtcbiAgICAgIHVwKys7XG4gICAgfSBlbHNlIGlmICh1cCkge1xuICAgICAgc3JjUGF0aC5zcGxpY2UoaSwgMSk7XG4gICAgICB1cC0tO1xuICAgIH1cbiAgfVxuXG4gIC8vIGlmIHRoZSBwYXRoIGlzIGFsbG93ZWQgdG8gZ28gYWJvdmUgdGhlIHJvb3QsIHJlc3RvcmUgbGVhZGluZyAuLnNcbiAgaWYgKCFtdXN0RW5kQWJzICYmICFyZW1vdmVBbGxEb3RzKSB7XG4gICAgZm9yICg7IHVwLS07IHVwKSB7XG4gICAgICBzcmNQYXRoLnVuc2hpZnQoJy4uJyk7XG4gICAgfVxuICB9XG5cbiAgaWYgKG11c3RFbmRBYnMgJiYgc3JjUGF0aFswXSAhPT0gJycgJiZcbiAgICAgICghc3JjUGF0aFswXSB8fCBzcmNQYXRoWzBdLmNoYXJBdCgwKSAhPT0gJy8nKSkge1xuICAgIHNyY1BhdGgudW5zaGlmdCgnJyk7XG4gIH1cblxuICBpZiAoaGFzVHJhaWxpbmdTbGFzaCAmJiAoc3JjUGF0aC5qb2luKCcvJykuc3Vic3RyKC0xKSAhPT0gJy8nKSkge1xuICAgIHNyY1BhdGgucHVzaCgnJyk7XG4gIH1cblxuICB2YXIgaXNBYnNvbHV0ZSA9IHNyY1BhdGhbMF0gPT09ICcnIHx8XG4gICAgICAoc3JjUGF0aFswXSAmJiBzcmNQYXRoWzBdLmNoYXJBdCgwKSA9PT0gJy8nKTtcblxuICAvLyBwdXQgdGhlIGhvc3QgYmFja1xuICBpZiAocHN5Y2hvdGljKSB7XG4gICAgcmVzdWx0Lmhvc3RuYW1lID0gcmVzdWx0Lmhvc3QgPSBpc0Fic29sdXRlID8gJycgOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjUGF0aC5sZW5ndGggPyBzcmNQYXRoLnNoaWZ0KCkgOiAnJztcbiAgICAvL29jY2F0aW9uYWx5IHRoZSBhdXRoIGNhbiBnZXQgc3R1Y2sgb25seSBpbiBob3N0XG4gICAgLy90aGlzIGVzcGVjaWFseSBoYXBwZW5zIGluIGNhc2VzIGxpa2VcbiAgICAvL3VybC5yZXNvbHZlT2JqZWN0KCdtYWlsdG86bG9jYWwxQGRvbWFpbjEnLCAnbG9jYWwyQGRvbWFpbjInKVxuICAgIHZhciBhdXRoSW5Ib3N0ID0gcmVzdWx0Lmhvc3QgJiYgcmVzdWx0Lmhvc3QuaW5kZXhPZignQCcpID4gMCA/XG4gICAgICAgICAgICAgICAgICAgICByZXN1bHQuaG9zdC5zcGxpdCgnQCcpIDogZmFsc2U7XG4gICAgaWYgKGF1dGhJbkhvc3QpIHtcbiAgICAgIHJlc3VsdC5hdXRoID0gYXV0aEluSG9zdC5zaGlmdCgpO1xuICAgICAgcmVzdWx0Lmhvc3QgPSByZXN1bHQuaG9zdG5hbWUgPSBhdXRoSW5Ib3N0LnNoaWZ0KCk7XG4gICAgfVxuICB9XG5cbiAgbXVzdEVuZEFicyA9IG11c3RFbmRBYnMgfHwgKHJlc3VsdC5ob3N0ICYmIHNyY1BhdGgubGVuZ3RoKTtcblxuICBpZiAobXVzdEVuZEFicyAmJiAhaXNBYnNvbHV0ZSkge1xuICAgIHNyY1BhdGgudW5zaGlmdCgnJyk7XG4gIH1cblxuICBpZiAoIXNyY1BhdGgubGVuZ3RoKSB7XG4gICAgcmVzdWx0LnBhdGhuYW1lID0gbnVsbDtcbiAgICByZXN1bHQucGF0aCA9IG51bGw7XG4gIH0gZWxzZSB7XG4gICAgcmVzdWx0LnBhdGhuYW1lID0gc3JjUGF0aC5qb2luKCcvJyk7XG4gIH1cblxuICAvL3RvIHN1cHBvcnQgcmVxdWVzdC5odHRwXG4gIGlmICghaXNOdWxsKHJlc3VsdC5wYXRobmFtZSkgfHwgIWlzTnVsbChyZXN1bHQuc2VhcmNoKSkge1xuICAgIHJlc3VsdC5wYXRoID0gKHJlc3VsdC5wYXRobmFtZSA/IHJlc3VsdC5wYXRobmFtZSA6ICcnKSArXG4gICAgICAgICAgICAgICAgICAocmVzdWx0LnNlYXJjaCA/IHJlc3VsdC5zZWFyY2ggOiAnJyk7XG4gIH1cbiAgcmVzdWx0LmF1dGggPSByZWxhdGl2ZS5hdXRoIHx8IHJlc3VsdC5hdXRoO1xuICByZXN1bHQuc2xhc2hlcyA9IHJlc3VsdC5zbGFzaGVzIHx8IHJlbGF0aXZlLnNsYXNoZXM7XG4gIHJlc3VsdC5ocmVmID0gcmVzdWx0LmZvcm1hdCgpO1xuICByZXR1cm4gcmVzdWx0O1xufTtcblxuVXJsLnByb3RvdHlwZS5wYXJzZUhvc3QgPSBmdW5jdGlvbigpIHtcbiAgdmFyIGhvc3QgPSB0aGlzLmhvc3Q7XG4gIHZhciBwb3J0ID0gcG9ydFBhdHRlcm4uZXhlYyhob3N0KTtcbiAgaWYgKHBvcnQpIHtcbiAgICBwb3J0ID0gcG9ydFswXTtcbiAgICBpZiAocG9ydCAhPT0gJzonKSB7XG4gICAgICB0aGlzLnBvcnQgPSBwb3J0LnN1YnN0cigxKTtcbiAgICB9XG4gICAgaG9zdCA9IGhvc3Quc3Vic3RyKDAsIGhvc3QubGVuZ3RoIC0gcG9ydC5sZW5ndGgpO1xuICB9XG4gIGlmIChob3N0KSB0aGlzLmhvc3RuYW1lID0gaG9zdDtcbn07XG5cbmZ1bmN0aW9uIGlzU3RyaW5nKGFyZykge1xuICByZXR1cm4gdHlwZW9mIGFyZyA9PT0gXCJzdHJpbmdcIjtcbn1cblxuZnVuY3Rpb24gaXNPYmplY3QoYXJnKSB7XG4gIHJldHVybiB0eXBlb2YgYXJnID09PSAnb2JqZWN0JyAmJiBhcmcgIT09IG51bGw7XG59XG5cbmZ1bmN0aW9uIGlzTnVsbChhcmcpIHtcbiAgcmV0dXJuIGFyZyA9PT0gbnVsbDtcbn1cbmZ1bmN0aW9uIGlzTnVsbE9yVW5kZWZpbmVkKGFyZykge1xuICByZXR1cm4gIGFyZyA9PSBudWxsO1xufVxuIiwiJ3VzZSBzdHJpY3QnO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGVhcmN1dDtcblxuZnVuY3Rpb24gZWFyY3V0KGRhdGEsIGhvbGVJbmRpY2VzLCBkaW0pIHtcblxuICAgIGRpbSA9IGRpbSB8fCAyO1xuXG4gICAgdmFyIGhhc0hvbGVzID0gaG9sZUluZGljZXMgJiYgaG9sZUluZGljZXMubGVuZ3RoLFxuICAgICAgICBvdXRlckxlbiA9IGhhc0hvbGVzID8gaG9sZUluZGljZXNbMF0gKiBkaW0gOiBkYXRhLmxlbmd0aCxcbiAgICAgICAgb3V0ZXJOb2RlID0gbGlua2VkTGlzdChkYXRhLCAwLCBvdXRlckxlbiwgZGltLCB0cnVlKSxcbiAgICAgICAgdHJpYW5nbGVzID0gW107XG5cbiAgICBpZiAoIW91dGVyTm9kZSkgcmV0dXJuIHRyaWFuZ2xlcztcblxuICAgIHZhciBtaW5YLCBtaW5ZLCBtYXhYLCBtYXhZLCB4LCB5LCBzaXplO1xuXG4gICAgaWYgKGhhc0hvbGVzKSBvdXRlck5vZGUgPSBlbGltaW5hdGVIb2xlcyhkYXRhLCBob2xlSW5kaWNlcywgb3V0ZXJOb2RlLCBkaW0pO1xuXG4gICAgLy8gaWYgdGhlIHNoYXBlIGlzIG5vdCB0b28gc2ltcGxlLCB3ZSdsbCB1c2Ugei1vcmRlciBjdXJ2ZSBoYXNoIGxhdGVyOyBjYWxjdWxhdGUgcG9seWdvbiBiYm94XG4gICAgaWYgKGRhdGEubGVuZ3RoID4gODAgKiBkaW0pIHtcbiAgICAgICAgbWluWCA9IG1heFggPSBkYXRhWzBdO1xuICAgICAgICBtaW5ZID0gbWF4WSA9IGRhdGFbMV07XG5cbiAgICAgICAgZm9yICh2YXIgaSA9IGRpbTsgaSA8IG91dGVyTGVuOyBpICs9IGRpbSkge1xuICAgICAgICAgICAgeCA9IGRhdGFbaV07XG4gICAgICAgICAgICB5ID0gZGF0YVtpICsgMV07XG4gICAgICAgICAgICBpZiAoeCA8IG1pblgpIG1pblggPSB4O1xuICAgICAgICAgICAgaWYgKHkgPCBtaW5ZKSBtaW5ZID0geTtcbiAgICAgICAgICAgIGlmICh4ID4gbWF4WCkgbWF4WCA9IHg7XG4gICAgICAgICAgICBpZiAoeSA+IG1heFkpIG1heFkgPSB5O1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gbWluWCwgbWluWSBhbmQgc2l6ZSBhcmUgbGF0ZXIgdXNlZCB0byB0cmFuc2Zvcm0gY29vcmRzIGludG8gaW50ZWdlcnMgZm9yIHotb3JkZXIgY2FsY3VsYXRpb25cbiAgICAgICAgc2l6ZSA9IE1hdGgubWF4KG1heFggLSBtaW5YLCBtYXhZIC0gbWluWSk7XG4gICAgfVxuXG4gICAgZWFyY3V0TGlua2VkKG91dGVyTm9kZSwgdHJpYW5nbGVzLCBkaW0sIG1pblgsIG1pblksIHNpemUpO1xuXG4gICAgcmV0dXJuIHRyaWFuZ2xlcztcbn1cblxuLy8gY3JlYXRlIGEgY2lyY3VsYXIgZG91Ymx5IGxpbmtlZCBsaXN0IGZyb20gcG9seWdvbiBwb2ludHMgaW4gdGhlIHNwZWNpZmllZCB3aW5kaW5nIG9yZGVyXG5mdW5jdGlvbiBsaW5rZWRMaXN0KGRhdGEsIHN0YXJ0LCBlbmQsIGRpbSwgY2xvY2t3aXNlKSB7XG4gICAgdmFyIHN1bSA9IDAsXG4gICAgICAgIGksIGosIGxhc3Q7XG5cbiAgICAvLyBjYWxjdWxhdGUgb3JpZ2luYWwgd2luZGluZyBvcmRlciBvZiBhIHBvbHlnb24gcmluZ1xuICAgIGZvciAoaSA9IHN0YXJ0LCBqID0gZW5kIC0gZGltOyBpIDwgZW5kOyBpICs9IGRpbSkge1xuICAgICAgICBzdW0gKz0gKGRhdGFbal0gLSBkYXRhW2ldKSAqIChkYXRhW2kgKyAxXSArIGRhdGFbaiArIDFdKTtcbiAgICAgICAgaiA9IGk7XG4gICAgfVxuXG4gICAgLy8gbGluayBwb2ludHMgaW50byBjaXJjdWxhciBkb3VibHktbGlua2VkIGxpc3QgaW4gdGhlIHNwZWNpZmllZCB3aW5kaW5nIG9yZGVyXG4gICAgaWYgKGNsb2Nrd2lzZSA9PT0gKHN1bSA+IDApKSB7XG4gICAgICAgIGZvciAoaSA9IHN0YXJ0OyBpIDwgZW5kOyBpICs9IGRpbSkgbGFzdCA9IGluc2VydE5vZGUoaSwgZGF0YVtpXSwgZGF0YVtpICsgMV0sIGxhc3QpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIGZvciAoaSA9IGVuZCAtIGRpbTsgaSA+PSBzdGFydDsgaSAtPSBkaW0pIGxhc3QgPSBpbnNlcnROb2RlKGksIGRhdGFbaV0sIGRhdGFbaSArIDFdLCBsYXN0KTtcbiAgICB9XG5cbiAgICByZXR1cm4gbGFzdDtcbn1cblxuLy8gZWxpbWluYXRlIGNvbGluZWFyIG9yIGR1cGxpY2F0ZSBwb2ludHNcbmZ1bmN0aW9uIGZpbHRlclBvaW50cyhzdGFydCwgZW5kKSB7XG4gICAgaWYgKCFzdGFydCkgcmV0dXJuIHN0YXJ0O1xuICAgIGlmICghZW5kKSBlbmQgPSBzdGFydDtcblxuICAgIHZhciBwID0gc3RhcnQsXG4gICAgICAgIGFnYWluO1xuICAgIGRvIHtcbiAgICAgICAgYWdhaW4gPSBmYWxzZTtcblxuICAgICAgICBpZiAoIXAuc3RlaW5lciAmJiAoZXF1YWxzKHAsIHAubmV4dCkgfHwgYXJlYShwLnByZXYsIHAsIHAubmV4dCkgPT09IDApKSB7XG4gICAgICAgICAgICByZW1vdmVOb2RlKHApO1xuICAgICAgICAgICAgcCA9IGVuZCA9IHAucHJldjtcbiAgICAgICAgICAgIGlmIChwID09PSBwLm5leHQpIHJldHVybiBudWxsO1xuICAgICAgICAgICAgYWdhaW4gPSB0cnVlO1xuXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBwID0gcC5uZXh0O1xuICAgICAgICB9XG4gICAgfSB3aGlsZSAoYWdhaW4gfHwgcCAhPT0gZW5kKTtcblxuICAgIHJldHVybiBlbmQ7XG59XG5cbi8vIG1haW4gZWFyIHNsaWNpbmcgbG9vcCB3aGljaCB0cmlhbmd1bGF0ZXMgYSBwb2x5Z29uIChnaXZlbiBhcyBhIGxpbmtlZCBsaXN0KVxuZnVuY3Rpb24gZWFyY3V0TGlua2VkKGVhciwgdHJpYW5nbGVzLCBkaW0sIG1pblgsIG1pblksIHNpemUsIHBhc3MpIHtcbiAgICBpZiAoIWVhcikgcmV0dXJuO1xuXG4gICAgLy8gaW50ZXJsaW5rIHBvbHlnb24gbm9kZXMgaW4gei1vcmRlclxuICAgIGlmICghcGFzcyAmJiBzaXplKSBpbmRleEN1cnZlKGVhciwgbWluWCwgbWluWSwgc2l6ZSk7XG5cbiAgICB2YXIgc3RvcCA9IGVhcixcbiAgICAgICAgcHJldiwgbmV4dDtcblxuICAgIC8vIGl0ZXJhdGUgdGhyb3VnaCBlYXJzLCBzbGljaW5nIHRoZW0gb25lIGJ5IG9uZVxuICAgIHdoaWxlIChlYXIucHJldiAhPT0gZWFyLm5leHQpIHtcbiAgICAgICAgcHJldiA9IGVhci5wcmV2O1xuICAgICAgICBuZXh0ID0gZWFyLm5leHQ7XG5cbiAgICAgICAgaWYgKHNpemUgPyBpc0Vhckhhc2hlZChlYXIsIG1pblgsIG1pblksIHNpemUpIDogaXNFYXIoZWFyKSkge1xuICAgICAgICAgICAgLy8gY3V0IG9mZiB0aGUgdHJpYW5nbGVcbiAgICAgICAgICAgIHRyaWFuZ2xlcy5wdXNoKHByZXYuaSAvIGRpbSk7XG4gICAgICAgICAgICB0cmlhbmdsZXMucHVzaChlYXIuaSAvIGRpbSk7XG4gICAgICAgICAgICB0cmlhbmdsZXMucHVzaChuZXh0LmkgLyBkaW0pO1xuXG4gICAgICAgICAgICByZW1vdmVOb2RlKGVhcik7XG5cbiAgICAgICAgICAgIC8vIHNraXBwaW5nIHRoZSBuZXh0IHZlcnRpY2UgbGVhZHMgdG8gbGVzcyBzbGl2ZXIgdHJpYW5nbGVzXG4gICAgICAgICAgICBlYXIgPSBuZXh0Lm5leHQ7XG4gICAgICAgICAgICBzdG9wID0gbmV4dC5uZXh0O1xuXG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGVhciA9IG5leHQ7XG5cbiAgICAgICAgLy8gaWYgd2UgbG9vcGVkIHRocm91Z2ggdGhlIHdob2xlIHJlbWFpbmluZyBwb2x5Z29uIGFuZCBjYW4ndCBmaW5kIGFueSBtb3JlIGVhcnNcbiAgICAgICAgaWYgKGVhciA9PT0gc3RvcCkge1xuICAgICAgICAgICAgLy8gdHJ5IGZpbHRlcmluZyBwb2ludHMgYW5kIHNsaWNpbmcgYWdhaW5cbiAgICAgICAgICAgIGlmICghcGFzcykge1xuICAgICAgICAgICAgICAgIGVhcmN1dExpbmtlZChmaWx0ZXJQb2ludHMoZWFyKSwgdHJpYW5nbGVzLCBkaW0sIG1pblgsIG1pblksIHNpemUsIDEpO1xuXG4gICAgICAgICAgICAvLyBpZiB0aGlzIGRpZG4ndCB3b3JrLCB0cnkgY3VyaW5nIGFsbCBzbWFsbCBzZWxmLWludGVyc2VjdGlvbnMgbG9jYWxseVxuICAgICAgICAgICAgfSBlbHNlIGlmIChwYXNzID09PSAxKSB7XG4gICAgICAgICAgICAgICAgZWFyID0gY3VyZUxvY2FsSW50ZXJzZWN0aW9ucyhlYXIsIHRyaWFuZ2xlcywgZGltKTtcbiAgICAgICAgICAgICAgICBlYXJjdXRMaW5rZWQoZWFyLCB0cmlhbmdsZXMsIGRpbSwgbWluWCwgbWluWSwgc2l6ZSwgMik7XG5cbiAgICAgICAgICAgIC8vIGFzIGEgbGFzdCByZXNvcnQsIHRyeSBzcGxpdHRpbmcgdGhlIHJlbWFpbmluZyBwb2x5Z29uIGludG8gdHdvXG4gICAgICAgICAgICB9IGVsc2UgaWYgKHBhc3MgPT09IDIpIHtcbiAgICAgICAgICAgICAgICBzcGxpdEVhcmN1dChlYXIsIHRyaWFuZ2xlcywgZGltLCBtaW5YLCBtaW5ZLCBzaXplKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbi8vIGNoZWNrIHdoZXRoZXIgYSBwb2x5Z29uIG5vZGUgZm9ybXMgYSB2YWxpZCBlYXIgd2l0aCBhZGphY2VudCBub2Rlc1xuZnVuY3Rpb24gaXNFYXIoZWFyKSB7XG4gICAgdmFyIGEgPSBlYXIucHJldixcbiAgICAgICAgYiA9IGVhcixcbiAgICAgICAgYyA9IGVhci5uZXh0O1xuXG4gICAgaWYgKGFyZWEoYSwgYiwgYykgPj0gMCkgcmV0dXJuIGZhbHNlOyAvLyByZWZsZXgsIGNhbid0IGJlIGFuIGVhclxuXG4gICAgLy8gbm93IG1ha2Ugc3VyZSB3ZSBkb24ndCBoYXZlIG90aGVyIHBvaW50cyBpbnNpZGUgdGhlIHBvdGVudGlhbCBlYXJcbiAgICB2YXIgcCA9IGVhci5uZXh0Lm5leHQ7XG5cbiAgICB3aGlsZSAocCAhPT0gZWFyLnByZXYpIHtcbiAgICAgICAgaWYgKHBvaW50SW5UcmlhbmdsZShhLngsIGEueSwgYi54LCBiLnksIGMueCwgYy55LCBwLngsIHAueSkgJiZcbiAgICAgICAgICAgIGFyZWEocC5wcmV2LCBwLCBwLm5leHQpID49IDApIHJldHVybiBmYWxzZTtcbiAgICAgICAgcCA9IHAubmV4dDtcbiAgICB9XG5cbiAgICByZXR1cm4gdHJ1ZTtcbn1cblxuZnVuY3Rpb24gaXNFYXJIYXNoZWQoZWFyLCBtaW5YLCBtaW5ZLCBzaXplKSB7XG4gICAgdmFyIGEgPSBlYXIucHJldixcbiAgICAgICAgYiA9IGVhcixcbiAgICAgICAgYyA9IGVhci5uZXh0O1xuXG4gICAgaWYgKGFyZWEoYSwgYiwgYykgPj0gMCkgcmV0dXJuIGZhbHNlOyAvLyByZWZsZXgsIGNhbid0IGJlIGFuIGVhclxuXG4gICAgLy8gdHJpYW5nbGUgYmJveDsgbWluICYgbWF4IGFyZSBjYWxjdWxhdGVkIGxpa2UgdGhpcyBmb3Igc3BlZWRcbiAgICB2YXIgbWluVFggPSBhLnggPCBiLnggPyAoYS54IDwgYy54ID8gYS54IDogYy54KSA6IChiLnggPCBjLnggPyBiLnggOiBjLngpLFxuICAgICAgICBtaW5UWSA9IGEueSA8IGIueSA/IChhLnkgPCBjLnkgPyBhLnkgOiBjLnkpIDogKGIueSA8IGMueSA/IGIueSA6IGMueSksXG4gICAgICAgIG1heFRYID0gYS54ID4gYi54ID8gKGEueCA+IGMueCA/IGEueCA6IGMueCkgOiAoYi54ID4gYy54ID8gYi54IDogYy54KSxcbiAgICAgICAgbWF4VFkgPSBhLnkgPiBiLnkgPyAoYS55ID4gYy55ID8gYS55IDogYy55KSA6IChiLnkgPiBjLnkgPyBiLnkgOiBjLnkpO1xuXG4gICAgLy8gei1vcmRlciByYW5nZSBmb3IgdGhlIGN1cnJlbnQgdHJpYW5nbGUgYmJveDtcbiAgICB2YXIgbWluWiA9IHpPcmRlcihtaW5UWCwgbWluVFksIG1pblgsIG1pblksIHNpemUpLFxuICAgICAgICBtYXhaID0gek9yZGVyKG1heFRYLCBtYXhUWSwgbWluWCwgbWluWSwgc2l6ZSk7XG5cbiAgICAvLyBmaXJzdCBsb29rIGZvciBwb2ludHMgaW5zaWRlIHRoZSB0cmlhbmdsZSBpbiBpbmNyZWFzaW5nIHotb3JkZXJcbiAgICB2YXIgcCA9IGVhci5uZXh0WjtcblxuICAgIHdoaWxlIChwICYmIHAueiA8PSBtYXhaKSB7XG4gICAgICAgIGlmIChwICE9PSBlYXIucHJldiAmJiBwICE9PSBlYXIubmV4dCAmJlxuICAgICAgICAgICAgcG9pbnRJblRyaWFuZ2xlKGEueCwgYS55LCBiLngsIGIueSwgYy54LCBjLnksIHAueCwgcC55KSAmJlxuICAgICAgICAgICAgYXJlYShwLnByZXYsIHAsIHAubmV4dCkgPj0gMCkgcmV0dXJuIGZhbHNlO1xuICAgICAgICBwID0gcC5uZXh0WjtcbiAgICB9XG5cbiAgICAvLyB0aGVuIGxvb2sgZm9yIHBvaW50cyBpbiBkZWNyZWFzaW5nIHotb3JkZXJcbiAgICBwID0gZWFyLnByZXZaO1xuXG4gICAgd2hpbGUgKHAgJiYgcC56ID49IG1pblopIHtcbiAgICAgICAgaWYgKHAgIT09IGVhci5wcmV2ICYmIHAgIT09IGVhci5uZXh0ICYmXG4gICAgICAgICAgICBwb2ludEluVHJpYW5nbGUoYS54LCBhLnksIGIueCwgYi55LCBjLngsIGMueSwgcC54LCBwLnkpICYmXG4gICAgICAgICAgICBhcmVhKHAucHJldiwgcCwgcC5uZXh0KSA+PSAwKSByZXR1cm4gZmFsc2U7XG4gICAgICAgIHAgPSBwLnByZXZaO1xuICAgIH1cblxuICAgIHJldHVybiB0cnVlO1xufVxuXG4vLyBnbyB0aHJvdWdoIGFsbCBwb2x5Z29uIG5vZGVzIGFuZCBjdXJlIHNtYWxsIGxvY2FsIHNlbGYtaW50ZXJzZWN0aW9uc1xuZnVuY3Rpb24gY3VyZUxvY2FsSW50ZXJzZWN0aW9ucyhzdGFydCwgdHJpYW5nbGVzLCBkaW0pIHtcbiAgICB2YXIgcCA9IHN0YXJ0O1xuICAgIGRvIHtcbiAgICAgICAgdmFyIGEgPSBwLnByZXYsXG4gICAgICAgICAgICBiID0gcC5uZXh0Lm5leHQ7XG5cbiAgICAgICAgLy8gYSBzZWxmLWludGVyc2VjdGlvbiB3aGVyZSBlZGdlICh2W2ktMV0sdltpXSkgaW50ZXJzZWN0cyAodltpKzFdLHZbaSsyXSlcbiAgICAgICAgaWYgKGludGVyc2VjdHMoYSwgcCwgcC5uZXh0LCBiKSAmJiBsb2NhbGx5SW5zaWRlKGEsIGIpICYmIGxvY2FsbHlJbnNpZGUoYiwgYSkpIHtcblxuICAgICAgICAgICAgdHJpYW5nbGVzLnB1c2goYS5pIC8gZGltKTtcbiAgICAgICAgICAgIHRyaWFuZ2xlcy5wdXNoKHAuaSAvIGRpbSk7XG4gICAgICAgICAgICB0cmlhbmdsZXMucHVzaChiLmkgLyBkaW0pO1xuXG4gICAgICAgICAgICAvLyByZW1vdmUgdHdvIG5vZGVzIGludm9sdmVkXG4gICAgICAgICAgICByZW1vdmVOb2RlKHApO1xuICAgICAgICAgICAgcmVtb3ZlTm9kZShwLm5leHQpO1xuXG4gICAgICAgICAgICBwID0gc3RhcnQgPSBiO1xuICAgICAgICB9XG4gICAgICAgIHAgPSBwLm5leHQ7XG4gICAgfSB3aGlsZSAocCAhPT0gc3RhcnQpO1xuXG4gICAgcmV0dXJuIHA7XG59XG5cbi8vIHRyeSBzcGxpdHRpbmcgcG9seWdvbiBpbnRvIHR3byBhbmQgdHJpYW5ndWxhdGUgdGhlbSBpbmRlcGVuZGVudGx5XG5mdW5jdGlvbiBzcGxpdEVhcmN1dChzdGFydCwgdHJpYW5nbGVzLCBkaW0sIG1pblgsIG1pblksIHNpemUpIHtcbiAgICAvLyBsb29rIGZvciBhIHZhbGlkIGRpYWdvbmFsIHRoYXQgZGl2aWRlcyB0aGUgcG9seWdvbiBpbnRvIHR3b1xuICAgIHZhciBhID0gc3RhcnQ7XG4gICAgZG8ge1xuICAgICAgICB2YXIgYiA9IGEubmV4dC5uZXh0O1xuICAgICAgICB3aGlsZSAoYiAhPT0gYS5wcmV2KSB7XG4gICAgICAgICAgICBpZiAoYS5pICE9PSBiLmkgJiYgaXNWYWxpZERpYWdvbmFsKGEsIGIpKSB7XG4gICAgICAgICAgICAgICAgLy8gc3BsaXQgdGhlIHBvbHlnb24gaW4gdHdvIGJ5IHRoZSBkaWFnb25hbFxuICAgICAgICAgICAgICAgIHZhciBjID0gc3BsaXRQb2x5Z29uKGEsIGIpO1xuXG4gICAgICAgICAgICAgICAgLy8gZmlsdGVyIGNvbGluZWFyIHBvaW50cyBhcm91bmQgdGhlIGN1dHNcbiAgICAgICAgICAgICAgICBhID0gZmlsdGVyUG9pbnRzKGEsIGEubmV4dCk7XG4gICAgICAgICAgICAgICAgYyA9IGZpbHRlclBvaW50cyhjLCBjLm5leHQpO1xuXG4gICAgICAgICAgICAgICAgLy8gcnVuIGVhcmN1dCBvbiBlYWNoIGhhbGZcbiAgICAgICAgICAgICAgICBlYXJjdXRMaW5rZWQoYSwgdHJpYW5nbGVzLCBkaW0sIG1pblgsIG1pblksIHNpemUpO1xuICAgICAgICAgICAgICAgIGVhcmN1dExpbmtlZChjLCB0cmlhbmdsZXMsIGRpbSwgbWluWCwgbWluWSwgc2l6ZSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYiA9IGIubmV4dDtcbiAgICAgICAgfVxuICAgICAgICBhID0gYS5uZXh0O1xuICAgIH0gd2hpbGUgKGEgIT09IHN0YXJ0KTtcbn1cblxuLy8gbGluayBldmVyeSBob2xlIGludG8gdGhlIG91dGVyIGxvb3AsIHByb2R1Y2luZyBhIHNpbmdsZS1yaW5nIHBvbHlnb24gd2l0aG91dCBob2xlc1xuZnVuY3Rpb24gZWxpbWluYXRlSG9sZXMoZGF0YSwgaG9sZUluZGljZXMsIG91dGVyTm9kZSwgZGltKSB7XG4gICAgdmFyIHF1ZXVlID0gW10sXG4gICAgICAgIGksIGxlbiwgc3RhcnQsIGVuZCwgbGlzdDtcblxuICAgIGZvciAoaSA9IDAsIGxlbiA9IGhvbGVJbmRpY2VzLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICAgIHN0YXJ0ID0gaG9sZUluZGljZXNbaV0gKiBkaW07XG4gICAgICAgIGVuZCA9IGkgPCBsZW4gLSAxID8gaG9sZUluZGljZXNbaSArIDFdICogZGltIDogZGF0YS5sZW5ndGg7XG4gICAgICAgIGxpc3QgPSBsaW5rZWRMaXN0KGRhdGEsIHN0YXJ0LCBlbmQsIGRpbSwgZmFsc2UpO1xuICAgICAgICBpZiAobGlzdCA9PT0gbGlzdC5uZXh0KSBsaXN0LnN0ZWluZXIgPSB0cnVlO1xuICAgICAgICBxdWV1ZS5wdXNoKGdldExlZnRtb3N0KGxpc3QpKTtcbiAgICB9XG5cbiAgICBxdWV1ZS5zb3J0KGNvbXBhcmVYKTtcblxuICAgIC8vIHByb2Nlc3MgaG9sZXMgZnJvbSBsZWZ0IHRvIHJpZ2h0XG4gICAgZm9yIChpID0gMDsgaSA8IHF1ZXVlLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGVsaW1pbmF0ZUhvbGUocXVldWVbaV0sIG91dGVyTm9kZSk7XG4gICAgICAgIG91dGVyTm9kZSA9IGZpbHRlclBvaW50cyhvdXRlck5vZGUsIG91dGVyTm9kZS5uZXh0KTtcbiAgICB9XG5cbiAgICByZXR1cm4gb3V0ZXJOb2RlO1xufVxuXG5mdW5jdGlvbiBjb21wYXJlWChhLCBiKSB7XG4gICAgcmV0dXJuIGEueCAtIGIueDtcbn1cblxuLy8gZmluZCBhIGJyaWRnZSBiZXR3ZWVuIHZlcnRpY2VzIHRoYXQgY29ubmVjdHMgaG9sZSB3aXRoIGFuIG91dGVyIHJpbmcgYW5kIGFuZCBsaW5rIGl0XG5mdW5jdGlvbiBlbGltaW5hdGVIb2xlKGhvbGUsIG91dGVyTm9kZSkge1xuICAgIG91dGVyTm9kZSA9IGZpbmRIb2xlQnJpZGdlKGhvbGUsIG91dGVyTm9kZSk7XG4gICAgaWYgKG91dGVyTm9kZSkge1xuICAgICAgICB2YXIgYiA9IHNwbGl0UG9seWdvbihvdXRlck5vZGUsIGhvbGUpO1xuICAgICAgICBmaWx0ZXJQb2ludHMoYiwgYi5uZXh0KTtcbiAgICB9XG59XG5cbi8vIERhdmlkIEViZXJseSdzIGFsZ29yaXRobSBmb3IgZmluZGluZyBhIGJyaWRnZSBiZXR3ZWVuIGhvbGUgYW5kIG91dGVyIHBvbHlnb25cbmZ1bmN0aW9uIGZpbmRIb2xlQnJpZGdlKGhvbGUsIG91dGVyTm9kZSkge1xuICAgIHZhciBwID0gb3V0ZXJOb2RlLFxuICAgICAgICBoeCA9IGhvbGUueCxcbiAgICAgICAgaHkgPSBob2xlLnksXG4gICAgICAgIHF4ID0gLUluZmluaXR5LFxuICAgICAgICBtO1xuXG4gICAgLy8gZmluZCBhIHNlZ21lbnQgaW50ZXJzZWN0ZWQgYnkgYSByYXkgZnJvbSB0aGUgaG9sZSdzIGxlZnRtb3N0IHBvaW50IHRvIHRoZSBsZWZ0O1xuICAgIC8vIHNlZ21lbnQncyBlbmRwb2ludCB3aXRoIGxlc3NlciB4IHdpbGwgYmUgcG90ZW50aWFsIGNvbm5lY3Rpb24gcG9pbnRcbiAgICBkbyB7XG4gICAgICAgIGlmIChoeSA8PSBwLnkgJiYgaHkgPj0gcC5uZXh0LnkpIHtcbiAgICAgICAgICAgIHZhciB4ID0gcC54ICsgKGh5IC0gcC55KSAqIChwLm5leHQueCAtIHAueCkgLyAocC5uZXh0LnkgLSBwLnkpO1xuICAgICAgICAgICAgaWYgKHggPD0gaHggJiYgeCA+IHF4KSB7XG4gICAgICAgICAgICAgICAgcXggPSB4O1xuICAgICAgICAgICAgICAgIG0gPSBwLnggPCBwLm5leHQueCA/IHAgOiBwLm5leHQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcCA9IHAubmV4dDtcbiAgICB9IHdoaWxlIChwICE9PSBvdXRlck5vZGUpO1xuXG4gICAgaWYgKCFtKSByZXR1cm4gbnVsbDtcblxuICAgIC8vIGxvb2sgZm9yIHBvaW50cyBpbnNpZGUgdGhlIHRyaWFuZ2xlIG9mIGhvbGUgcG9pbnQsIHNlZ21lbnQgaW50ZXJzZWN0aW9uIGFuZCBlbmRwb2ludDtcbiAgICAvLyBpZiB0aGVyZSBhcmUgbm8gcG9pbnRzIGZvdW5kLCB3ZSBoYXZlIGEgdmFsaWQgY29ubmVjdGlvbjtcbiAgICAvLyBvdGhlcndpc2UgY2hvb3NlIHRoZSBwb2ludCBvZiB0aGUgbWluaW11bSBhbmdsZSB3aXRoIHRoZSByYXkgYXMgY29ubmVjdGlvbiBwb2ludFxuXG4gICAgdmFyIHN0b3AgPSBtLFxuICAgICAgICB0YW5NaW4gPSBJbmZpbml0eSxcbiAgICAgICAgdGFuO1xuXG4gICAgcCA9IG0ubmV4dDtcblxuICAgIHdoaWxlIChwICE9PSBzdG9wKSB7XG4gICAgICAgIGlmIChoeCA+PSBwLnggJiYgcC54ID49IG0ueCAmJlxuICAgICAgICAgICAgICAgIHBvaW50SW5UcmlhbmdsZShoeSA8IG0ueSA/IGh4IDogcXgsIGh5LCBtLngsIG0ueSwgaHkgPCBtLnkgPyBxeCA6IGh4LCBoeSwgcC54LCBwLnkpKSB7XG5cbiAgICAgICAgICAgIHRhbiA9IE1hdGguYWJzKGh5IC0gcC55KSAvIChoeCAtIHAueCk7IC8vIHRhbmdlbnRpYWxcblxuICAgICAgICAgICAgaWYgKCh0YW4gPCB0YW5NaW4gfHwgKHRhbiA9PT0gdGFuTWluICYmIHAueCA+IG0ueCkpICYmIGxvY2FsbHlJbnNpZGUocCwgaG9sZSkpIHtcbiAgICAgICAgICAgICAgICBtID0gcDtcbiAgICAgICAgICAgICAgICB0YW5NaW4gPSB0YW47XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBwID0gcC5uZXh0O1xuICAgIH1cblxuICAgIHJldHVybiBtO1xufVxuXG4vLyBpbnRlcmxpbmsgcG9seWdvbiBub2RlcyBpbiB6LW9yZGVyXG5mdW5jdGlvbiBpbmRleEN1cnZlKHN0YXJ0LCBtaW5YLCBtaW5ZLCBzaXplKSB7XG4gICAgdmFyIHAgPSBzdGFydDtcbiAgICBkbyB7XG4gICAgICAgIGlmIChwLnogPT09IG51bGwpIHAueiA9IHpPcmRlcihwLngsIHAueSwgbWluWCwgbWluWSwgc2l6ZSk7XG4gICAgICAgIHAucHJldlogPSBwLnByZXY7XG4gICAgICAgIHAubmV4dFogPSBwLm5leHQ7XG4gICAgICAgIHAgPSBwLm5leHQ7XG4gICAgfSB3aGlsZSAocCAhPT0gc3RhcnQpO1xuXG4gICAgcC5wcmV2Wi5uZXh0WiA9IG51bGw7XG4gICAgcC5wcmV2WiA9IG51bGw7XG5cbiAgICBzb3J0TGlua2VkKHApO1xufVxuXG4vLyBTaW1vbiBUYXRoYW0ncyBsaW5rZWQgbGlzdCBtZXJnZSBzb3J0IGFsZ29yaXRobVxuLy8gaHR0cDovL3d3dy5jaGlhcmsuZ3JlZW5lbmQub3JnLnVrL35zZ3RhdGhhbS9hbGdvcml0aG1zL2xpc3Rzb3J0Lmh0bWxcbmZ1bmN0aW9uIHNvcnRMaW5rZWQobGlzdCkge1xuICAgIHZhciBpLCBwLCBxLCBlLCB0YWlsLCBudW1NZXJnZXMsIHBTaXplLCBxU2l6ZSxcbiAgICAgICAgaW5TaXplID0gMTtcblxuICAgIGRvIHtcbiAgICAgICAgcCA9IGxpc3Q7XG4gICAgICAgIGxpc3QgPSBudWxsO1xuICAgICAgICB0YWlsID0gbnVsbDtcbiAgICAgICAgbnVtTWVyZ2VzID0gMDtcblxuICAgICAgICB3aGlsZSAocCkge1xuICAgICAgICAgICAgbnVtTWVyZ2VzKys7XG4gICAgICAgICAgICBxID0gcDtcbiAgICAgICAgICAgIHBTaXplID0gMDtcbiAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBpblNpemU7IGkrKykge1xuICAgICAgICAgICAgICAgIHBTaXplKys7XG4gICAgICAgICAgICAgICAgcSA9IHEubmV4dFo7XG4gICAgICAgICAgICAgICAgaWYgKCFxKSBicmVhaztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcVNpemUgPSBpblNpemU7XG5cbiAgICAgICAgICAgIHdoaWxlIChwU2l6ZSA+IDAgfHwgKHFTaXplID4gMCAmJiBxKSkge1xuXG4gICAgICAgICAgICAgICAgaWYgKHBTaXplID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIGUgPSBxO1xuICAgICAgICAgICAgICAgICAgICBxID0gcS5uZXh0WjtcbiAgICAgICAgICAgICAgICAgICAgcVNpemUtLTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHFTaXplID09PSAwIHx8ICFxKSB7XG4gICAgICAgICAgICAgICAgICAgIGUgPSBwO1xuICAgICAgICAgICAgICAgICAgICBwID0gcC5uZXh0WjtcbiAgICAgICAgICAgICAgICAgICAgcFNpemUtLTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHAueiA8PSBxLnopIHtcbiAgICAgICAgICAgICAgICAgICAgZSA9IHA7XG4gICAgICAgICAgICAgICAgICAgIHAgPSBwLm5leHRaO1xuICAgICAgICAgICAgICAgICAgICBwU2l6ZS0tO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGUgPSBxO1xuICAgICAgICAgICAgICAgICAgICBxID0gcS5uZXh0WjtcbiAgICAgICAgICAgICAgICAgICAgcVNpemUtLTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAodGFpbCkgdGFpbC5uZXh0WiA9IGU7XG4gICAgICAgICAgICAgICAgZWxzZSBsaXN0ID0gZTtcblxuICAgICAgICAgICAgICAgIGUucHJldlogPSB0YWlsO1xuICAgICAgICAgICAgICAgIHRhaWwgPSBlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBwID0gcTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRhaWwubmV4dFogPSBudWxsO1xuICAgICAgICBpblNpemUgKj0gMjtcblxuICAgIH0gd2hpbGUgKG51bU1lcmdlcyA+IDEpO1xuXG4gICAgcmV0dXJuIGxpc3Q7XG59XG5cbi8vIHotb3JkZXIgb2YgYSBwb2ludCBnaXZlbiBjb29yZHMgYW5kIHNpemUgb2YgdGhlIGRhdGEgYm91bmRpbmcgYm94XG5mdW5jdGlvbiB6T3JkZXIoeCwgeSwgbWluWCwgbWluWSwgc2l6ZSkge1xuICAgIC8vIGNvb3JkcyBhcmUgdHJhbnNmb3JtZWQgaW50byBub24tbmVnYXRpdmUgMTUtYml0IGludGVnZXIgcmFuZ2VcbiAgICB4ID0gMzI3NjcgKiAoeCAtIG1pblgpIC8gc2l6ZTtcbiAgICB5ID0gMzI3NjcgKiAoeSAtIG1pblkpIC8gc2l6ZTtcblxuICAgIHggPSAoeCB8ICh4IDw8IDgpKSAmIDB4MDBGRjAwRkY7XG4gICAgeCA9ICh4IHwgKHggPDwgNCkpICYgMHgwRjBGMEYwRjtcbiAgICB4ID0gKHggfCAoeCA8PCAyKSkgJiAweDMzMzMzMzMzO1xuICAgIHggPSAoeCB8ICh4IDw8IDEpKSAmIDB4NTU1NTU1NTU7XG5cbiAgICB5ID0gKHkgfCAoeSA8PCA4KSkgJiAweDAwRkYwMEZGO1xuICAgIHkgPSAoeSB8ICh5IDw8IDQpKSAmIDB4MEYwRjBGMEY7XG4gICAgeSA9ICh5IHwgKHkgPDwgMikpICYgMHgzMzMzMzMzMztcbiAgICB5ID0gKHkgfCAoeSA8PCAxKSkgJiAweDU1NTU1NTU1O1xuXG4gICAgcmV0dXJuIHggfCAoeSA8PCAxKTtcbn1cblxuLy8gZmluZCB0aGUgbGVmdG1vc3Qgbm9kZSBvZiBhIHBvbHlnb24gcmluZ1xuZnVuY3Rpb24gZ2V0TGVmdG1vc3Qoc3RhcnQpIHtcbiAgICB2YXIgcCA9IHN0YXJ0LFxuICAgICAgICBsZWZ0bW9zdCA9IHN0YXJ0O1xuICAgIGRvIHtcbiAgICAgICAgaWYgKHAueCA8IGxlZnRtb3N0LngpIGxlZnRtb3N0ID0gcDtcbiAgICAgICAgcCA9IHAubmV4dDtcbiAgICB9IHdoaWxlIChwICE9PSBzdGFydCk7XG5cbiAgICByZXR1cm4gbGVmdG1vc3Q7XG59XG5cbi8vIGNoZWNrIGlmIGEgcG9pbnQgbGllcyB3aXRoaW4gYSBjb252ZXggdHJpYW5nbGVcbmZ1bmN0aW9uIHBvaW50SW5UcmlhbmdsZShheCwgYXksIGJ4LCBieSwgY3gsIGN5LCBweCwgcHkpIHtcbiAgICByZXR1cm4gKGN4IC0gcHgpICogKGF5IC0gcHkpIC0gKGF4IC0gcHgpICogKGN5IC0gcHkpID49IDAgJiZcbiAgICAgICAgICAgKGF4IC0gcHgpICogKGJ5IC0gcHkpIC0gKGJ4IC0gcHgpICogKGF5IC0gcHkpID49IDAgJiZcbiAgICAgICAgICAgKGJ4IC0gcHgpICogKGN5IC0gcHkpIC0gKGN4IC0gcHgpICogKGJ5IC0gcHkpID49IDA7XG59XG5cbi8vIGNoZWNrIGlmIGEgZGlhZ29uYWwgYmV0d2VlbiB0d28gcG9seWdvbiBub2RlcyBpcyB2YWxpZCAobGllcyBpbiBwb2x5Z29uIGludGVyaW9yKVxuZnVuY3Rpb24gaXNWYWxpZERpYWdvbmFsKGEsIGIpIHtcbiAgICByZXR1cm4gZXF1YWxzKGEsIGIpIHx8IGEubmV4dC5pICE9PSBiLmkgJiYgYS5wcmV2LmkgIT09IGIuaSAmJiAhaW50ZXJzZWN0c1BvbHlnb24oYSwgYikgJiZcbiAgICAgICAgICAgbG9jYWxseUluc2lkZShhLCBiKSAmJiBsb2NhbGx5SW5zaWRlKGIsIGEpICYmIG1pZGRsZUluc2lkZShhLCBiKTtcbn1cblxuLy8gc2lnbmVkIGFyZWEgb2YgYSB0cmlhbmdsZVxuZnVuY3Rpb24gYXJlYShwLCBxLCByKSB7XG4gICAgcmV0dXJuIChxLnkgLSBwLnkpICogKHIueCAtIHEueCkgLSAocS54IC0gcC54KSAqIChyLnkgLSBxLnkpO1xufVxuXG4vLyBjaGVjayBpZiB0d28gcG9pbnRzIGFyZSBlcXVhbFxuZnVuY3Rpb24gZXF1YWxzKHAxLCBwMikge1xuICAgIHJldHVybiBwMS54ID09PSBwMi54ICYmIHAxLnkgPT09IHAyLnk7XG59XG5cbi8vIGNoZWNrIGlmIHR3byBzZWdtZW50cyBpbnRlcnNlY3RcbmZ1bmN0aW9uIGludGVyc2VjdHMocDEsIHExLCBwMiwgcTIpIHtcbiAgICByZXR1cm4gYXJlYShwMSwgcTEsIHAyKSA+IDAgIT09IGFyZWEocDEsIHExLCBxMikgPiAwICYmXG4gICAgICAgICAgIGFyZWEocDIsIHEyLCBwMSkgPiAwICE9PSBhcmVhKHAyLCBxMiwgcTEpID4gMDtcbn1cblxuLy8gY2hlY2sgaWYgYSBwb2x5Z29uIGRpYWdvbmFsIGludGVyc2VjdHMgYW55IHBvbHlnb24gc2VnbWVudHNcbmZ1bmN0aW9uIGludGVyc2VjdHNQb2x5Z29uKGEsIGIpIHtcbiAgICB2YXIgcCA9IGE7XG4gICAgZG8ge1xuICAgICAgICBpZiAocC5pICE9PSBhLmkgJiYgcC5uZXh0LmkgIT09IGEuaSAmJiBwLmkgIT09IGIuaSAmJiBwLm5leHQuaSAhPT0gYi5pICYmXG4gICAgICAgICAgICAgICAgaW50ZXJzZWN0cyhwLCBwLm5leHQsIGEsIGIpKSByZXR1cm4gdHJ1ZTtcbiAgICAgICAgcCA9IHAubmV4dDtcbiAgICB9IHdoaWxlIChwICE9PSBhKTtcblxuICAgIHJldHVybiBmYWxzZTtcbn1cblxuLy8gY2hlY2sgaWYgYSBwb2x5Z29uIGRpYWdvbmFsIGlzIGxvY2FsbHkgaW5zaWRlIHRoZSBwb2x5Z29uXG5mdW5jdGlvbiBsb2NhbGx5SW5zaWRlKGEsIGIpIHtcbiAgICByZXR1cm4gYXJlYShhLnByZXYsIGEsIGEubmV4dCkgPCAwID9cbiAgICAgICAgYXJlYShhLCBiLCBhLm5leHQpID49IDAgJiYgYXJlYShhLCBhLnByZXYsIGIpID49IDAgOlxuICAgICAgICBhcmVhKGEsIGIsIGEucHJldikgPCAwIHx8IGFyZWEoYSwgYS5uZXh0LCBiKSA8IDA7XG59XG5cbi8vIGNoZWNrIGlmIHRoZSBtaWRkbGUgcG9pbnQgb2YgYSBwb2x5Z29uIGRpYWdvbmFsIGlzIGluc2lkZSB0aGUgcG9seWdvblxuZnVuY3Rpb24gbWlkZGxlSW5zaWRlKGEsIGIpIHtcbiAgICB2YXIgcCA9IGEsXG4gICAgICAgIGluc2lkZSA9IGZhbHNlLFxuICAgICAgICBweCA9IChhLnggKyBiLngpIC8gMixcbiAgICAgICAgcHkgPSAoYS55ICsgYi55KSAvIDI7XG4gICAgZG8ge1xuICAgICAgICBpZiAoKChwLnkgPiBweSkgIT09IChwLm5leHQueSA+IHB5KSkgJiYgKHB4IDwgKHAubmV4dC54IC0gcC54KSAqIChweSAtIHAueSkgLyAocC5uZXh0LnkgLSBwLnkpICsgcC54KSlcbiAgICAgICAgICAgIGluc2lkZSA9ICFpbnNpZGU7XG4gICAgICAgIHAgPSBwLm5leHQ7XG4gICAgfSB3aGlsZSAocCAhPT0gYSk7XG5cbiAgICByZXR1cm4gaW5zaWRlO1xufVxuXG4vLyBsaW5rIHR3byBwb2x5Z29uIHZlcnRpY2VzIHdpdGggYSBicmlkZ2U7IGlmIHRoZSB2ZXJ0aWNlcyBiZWxvbmcgdG8gdGhlIHNhbWUgcmluZywgaXQgc3BsaXRzIHBvbHlnb24gaW50byB0d287XG4vLyBpZiBvbmUgYmVsb25ncyB0byB0aGUgb3V0ZXIgcmluZyBhbmQgYW5vdGhlciB0byBhIGhvbGUsIGl0IG1lcmdlcyBpdCBpbnRvIGEgc2luZ2xlIHJpbmdcbmZ1bmN0aW9uIHNwbGl0UG9seWdvbihhLCBiKSB7XG4gICAgdmFyIGEyID0gbmV3IE5vZGUoYS5pLCBhLngsIGEueSksXG4gICAgICAgIGIyID0gbmV3IE5vZGUoYi5pLCBiLngsIGIueSksXG4gICAgICAgIGFuID0gYS5uZXh0LFxuICAgICAgICBicCA9IGIucHJldjtcblxuICAgIGEubmV4dCA9IGI7XG4gICAgYi5wcmV2ID0gYTtcblxuICAgIGEyLm5leHQgPSBhbjtcbiAgICBhbi5wcmV2ID0gYTI7XG5cbiAgICBiMi5uZXh0ID0gYTI7XG4gICAgYTIucHJldiA9IGIyO1xuXG4gICAgYnAubmV4dCA9IGIyO1xuICAgIGIyLnByZXYgPSBicDtcblxuICAgIHJldHVybiBiMjtcbn1cblxuLy8gY3JlYXRlIGEgbm9kZSBhbmQgb3B0aW9uYWxseSBsaW5rIGl0IHdpdGggcHJldmlvdXMgb25lIChpbiBhIGNpcmN1bGFyIGRvdWJseSBsaW5rZWQgbGlzdClcbmZ1bmN0aW9uIGluc2VydE5vZGUoaSwgeCwgeSwgbGFzdCkge1xuICAgIHZhciBwID0gbmV3IE5vZGUoaSwgeCwgeSk7XG5cbiAgICBpZiAoIWxhc3QpIHtcbiAgICAgICAgcC5wcmV2ID0gcDtcbiAgICAgICAgcC5uZXh0ID0gcDtcblxuICAgIH0gZWxzZSB7XG4gICAgICAgIHAubmV4dCA9IGxhc3QubmV4dDtcbiAgICAgICAgcC5wcmV2ID0gbGFzdDtcbiAgICAgICAgbGFzdC5uZXh0LnByZXYgPSBwO1xuICAgICAgICBsYXN0Lm5leHQgPSBwO1xuICAgIH1cbiAgICByZXR1cm4gcDtcbn1cblxuZnVuY3Rpb24gcmVtb3ZlTm9kZShwKSB7XG4gICAgcC5uZXh0LnByZXYgPSBwLnByZXY7XG4gICAgcC5wcmV2Lm5leHQgPSBwLm5leHQ7XG5cbiAgICBpZiAocC5wcmV2WikgcC5wcmV2Wi5uZXh0WiA9IHAubmV4dFo7XG4gICAgaWYgKHAubmV4dFopIHAubmV4dFoucHJldlogPSBwLnByZXZaO1xufVxuXG5mdW5jdGlvbiBOb2RlKGksIHgsIHkpIHtcbiAgICAvLyB2ZXJ0aWNlIGluZGV4IGluIGNvb3JkaW5hdGVzIGFycmF5XG4gICAgdGhpcy5pID0gaTtcblxuICAgIC8vIHZlcnRleCBjb29yZGluYXRlc1xuICAgIHRoaXMueCA9IHg7XG4gICAgdGhpcy55ID0geTtcblxuICAgIC8vIHByZXZpb3VzIGFuZCBuZXh0IHZlcnRpY2Ugbm9kZXMgaW4gYSBwb2x5Z29uIHJpbmdcbiAgICB0aGlzLnByZXYgPSBudWxsO1xuICAgIHRoaXMubmV4dCA9IG51bGw7XG5cbiAgICAvLyB6LW9yZGVyIGN1cnZlIHZhbHVlXG4gICAgdGhpcy56ID0gbnVsbDtcblxuICAgIC8vIHByZXZpb3VzIGFuZCBuZXh0IG5vZGVzIGluIHotb3JkZXJcbiAgICB0aGlzLnByZXZaID0gbnVsbDtcbiAgICB0aGlzLm5leHRaID0gbnVsbDtcblxuICAgIC8vIGluZGljYXRlcyB3aGV0aGVyIHRoaXMgaXMgYSBzdGVpbmVyIHBvaW50XG4gICAgdGhpcy5zdGVpbmVyID0gZmFsc2U7XG59XG4iLCIndXNlIHN0cmljdCc7XG5cbi8vXG4vLyBXZSBzdG9yZSBvdXIgRUUgb2JqZWN0cyBpbiBhIHBsYWluIG9iamVjdCB3aG9zZSBwcm9wZXJ0aWVzIGFyZSBldmVudCBuYW1lcy5cbi8vIElmIGBPYmplY3QuY3JlYXRlKG51bGwpYCBpcyBub3Qgc3VwcG9ydGVkIHdlIHByZWZpeCB0aGUgZXZlbnQgbmFtZXMgd2l0aCBhXG4vLyBgfmAgdG8gbWFrZSBzdXJlIHRoYXQgdGhlIGJ1aWx0LWluIG9iamVjdCBwcm9wZXJ0aWVzIGFyZSBub3Qgb3ZlcnJpZGRlbiBvclxuLy8gdXNlZCBhcyBhbiBhdHRhY2sgdmVjdG9yLlxuLy8gV2UgYWxzbyBhc3N1bWUgdGhhdCBgT2JqZWN0LmNyZWF0ZShudWxsKWAgaXMgYXZhaWxhYmxlIHdoZW4gdGhlIGV2ZW50IG5hbWVcbi8vIGlzIGFuIEVTNiBTeW1ib2wuXG4vL1xudmFyIHByZWZpeCA9IHR5cGVvZiBPYmplY3QuY3JlYXRlICE9PSAnZnVuY3Rpb24nID8gJ34nIDogZmFsc2U7XG5cbi8qKlxuICogUmVwcmVzZW50YXRpb24gb2YgYSBzaW5nbGUgRXZlbnRFbWl0dGVyIGZ1bmN0aW9uLlxuICpcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZuIEV2ZW50IGhhbmRsZXIgdG8gYmUgY2FsbGVkLlxuICogQHBhcmFtIHtNaXhlZH0gY29udGV4dCBDb250ZXh0IGZvciBmdW5jdGlvbiBleGVjdXRpb24uXG4gKiBAcGFyYW0ge0Jvb2xlYW59IG9uY2UgT25seSBlbWl0IG9uY2VcbiAqIEBhcGkgcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBFRShmbiwgY29udGV4dCwgb25jZSkge1xuICB0aGlzLmZuID0gZm47XG4gIHRoaXMuY29udGV4dCA9IGNvbnRleHQ7XG4gIHRoaXMub25jZSA9IG9uY2UgfHwgZmFsc2U7XG59XG5cbi8qKlxuICogTWluaW1hbCBFdmVudEVtaXR0ZXIgaW50ZXJmYWNlIHRoYXQgaXMgbW9sZGVkIGFnYWluc3QgdGhlIE5vZGUuanNcbiAqIEV2ZW50RW1pdHRlciBpbnRlcmZhY2UuXG4gKlxuICogQGNvbnN0cnVjdG9yXG4gKiBAYXBpIHB1YmxpY1xuICovXG5mdW5jdGlvbiBFdmVudEVtaXR0ZXIoKSB7IC8qIE5vdGhpbmcgdG8gc2V0ICovIH1cblxuLyoqXG4gKiBIb2xkcyB0aGUgYXNzaWduZWQgRXZlbnRFbWl0dGVycyBieSBuYW1lLlxuICpcbiAqIEB0eXBlIHtPYmplY3R9XG4gKiBAcHJpdmF0ZVxuICovXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLl9ldmVudHMgPSB1bmRlZmluZWQ7XG5cbi8qKlxuICogUmV0dXJuIGEgbGlzdCBvZiBhc3NpZ25lZCBldmVudCBsaXN0ZW5lcnMuXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IGV2ZW50IFRoZSBldmVudHMgdGhhdCBzaG91bGQgYmUgbGlzdGVkLlxuICogQHBhcmFtIHtCb29sZWFufSBleGlzdHMgV2Ugb25seSBuZWVkIHRvIGtub3cgaWYgdGhlcmUgYXJlIGxpc3RlbmVycy5cbiAqIEByZXR1cm5zIHtBcnJheXxCb29sZWFufVxuICogQGFwaSBwdWJsaWNcbiAqL1xuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5saXN0ZW5lcnMgPSBmdW5jdGlvbiBsaXN0ZW5lcnMoZXZlbnQsIGV4aXN0cykge1xuICB2YXIgZXZ0ID0gcHJlZml4ID8gcHJlZml4ICsgZXZlbnQgOiBldmVudFxuICAgICwgYXZhaWxhYmxlID0gdGhpcy5fZXZlbnRzICYmIHRoaXMuX2V2ZW50c1tldnRdO1xuXG4gIGlmIChleGlzdHMpIHJldHVybiAhIWF2YWlsYWJsZTtcbiAgaWYgKCFhdmFpbGFibGUpIHJldHVybiBbXTtcbiAgaWYgKGF2YWlsYWJsZS5mbikgcmV0dXJuIFthdmFpbGFibGUuZm5dO1xuXG4gIGZvciAodmFyIGkgPSAwLCBsID0gYXZhaWxhYmxlLmxlbmd0aCwgZWUgPSBuZXcgQXJyYXkobCk7IGkgPCBsOyBpKyspIHtcbiAgICBlZVtpXSA9IGF2YWlsYWJsZVtpXS5mbjtcbiAgfVxuXG4gIHJldHVybiBlZTtcbn07XG5cbi8qKlxuICogRW1pdCBhbiBldmVudCB0byBhbGwgcmVnaXN0ZXJlZCBldmVudCBsaXN0ZW5lcnMuXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IGV2ZW50IFRoZSBuYW1lIG9mIHRoZSBldmVudC5cbiAqIEByZXR1cm5zIHtCb29sZWFufSBJbmRpY2F0aW9uIGlmIHdlJ3ZlIGVtaXR0ZWQgYW4gZXZlbnQuXG4gKiBAYXBpIHB1YmxpY1xuICovXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLmVtaXQgPSBmdW5jdGlvbiBlbWl0KGV2ZW50LCBhMSwgYTIsIGEzLCBhNCwgYTUpIHtcbiAgdmFyIGV2dCA9IHByZWZpeCA/IHByZWZpeCArIGV2ZW50IDogZXZlbnQ7XG5cbiAgaWYgKCF0aGlzLl9ldmVudHMgfHwgIXRoaXMuX2V2ZW50c1tldnRdKSByZXR1cm4gZmFsc2U7XG5cbiAgdmFyIGxpc3RlbmVycyA9IHRoaXMuX2V2ZW50c1tldnRdXG4gICAgLCBsZW4gPSBhcmd1bWVudHMubGVuZ3RoXG4gICAgLCBhcmdzXG4gICAgLCBpO1xuXG4gIGlmICgnZnVuY3Rpb24nID09PSB0eXBlb2YgbGlzdGVuZXJzLmZuKSB7XG4gICAgaWYgKGxpc3RlbmVycy5vbmNlKSB0aGlzLnJlbW92ZUxpc3RlbmVyKGV2ZW50LCBsaXN0ZW5lcnMuZm4sIHVuZGVmaW5lZCwgdHJ1ZSk7XG5cbiAgICBzd2l0Y2ggKGxlbikge1xuICAgICAgY2FzZSAxOiByZXR1cm4gbGlzdGVuZXJzLmZuLmNhbGwobGlzdGVuZXJzLmNvbnRleHQpLCB0cnVlO1xuICAgICAgY2FzZSAyOiByZXR1cm4gbGlzdGVuZXJzLmZuLmNhbGwobGlzdGVuZXJzLmNvbnRleHQsIGExKSwgdHJ1ZTtcbiAgICAgIGNhc2UgMzogcmV0dXJuIGxpc3RlbmVycy5mbi5jYWxsKGxpc3RlbmVycy5jb250ZXh0LCBhMSwgYTIpLCB0cnVlO1xuICAgICAgY2FzZSA0OiByZXR1cm4gbGlzdGVuZXJzLmZuLmNhbGwobGlzdGVuZXJzLmNvbnRleHQsIGExLCBhMiwgYTMpLCB0cnVlO1xuICAgICAgY2FzZSA1OiByZXR1cm4gbGlzdGVuZXJzLmZuLmNhbGwobGlzdGVuZXJzLmNvbnRleHQsIGExLCBhMiwgYTMsIGE0KSwgdHJ1ZTtcbiAgICAgIGNhc2UgNjogcmV0dXJuIGxpc3RlbmVycy5mbi5jYWxsKGxpc3RlbmVycy5jb250ZXh0LCBhMSwgYTIsIGEzLCBhNCwgYTUpLCB0cnVlO1xuICAgIH1cblxuICAgIGZvciAoaSA9IDEsIGFyZ3MgPSBuZXcgQXJyYXkobGVuIC0xKTsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICBhcmdzW2kgLSAxXSA9IGFyZ3VtZW50c1tpXTtcbiAgICB9XG5cbiAgICBsaXN0ZW5lcnMuZm4uYXBwbHkobGlzdGVuZXJzLmNvbnRleHQsIGFyZ3MpO1xuICB9IGVsc2Uge1xuICAgIHZhciBsZW5ndGggPSBsaXN0ZW5lcnMubGVuZ3RoXG4gICAgICAsIGo7XG5cbiAgICBmb3IgKGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmIChsaXN0ZW5lcnNbaV0ub25jZSkgdGhpcy5yZW1vdmVMaXN0ZW5lcihldmVudCwgbGlzdGVuZXJzW2ldLmZuLCB1bmRlZmluZWQsIHRydWUpO1xuXG4gICAgICBzd2l0Y2ggKGxlbikge1xuICAgICAgICBjYXNlIDE6IGxpc3RlbmVyc1tpXS5mbi5jYWxsKGxpc3RlbmVyc1tpXS5jb250ZXh0KTsgYnJlYWs7XG4gICAgICAgIGNhc2UgMjogbGlzdGVuZXJzW2ldLmZuLmNhbGwobGlzdGVuZXJzW2ldLmNvbnRleHQsIGExKTsgYnJlYWs7XG4gICAgICAgIGNhc2UgMzogbGlzdGVuZXJzW2ldLmZuLmNhbGwobGlzdGVuZXJzW2ldLmNvbnRleHQsIGExLCBhMik7IGJyZWFrO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIGlmICghYXJncykgZm9yIChqID0gMSwgYXJncyA9IG5ldyBBcnJheShsZW4gLTEpOyBqIDwgbGVuOyBqKyspIHtcbiAgICAgICAgICAgIGFyZ3NbaiAtIDFdID0gYXJndW1lbnRzW2pdO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGxpc3RlbmVyc1tpXS5mbi5hcHBseShsaXN0ZW5lcnNbaV0uY29udGV4dCwgYXJncyk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHRydWU7XG59O1xuXG4vKipcbiAqIFJlZ2lzdGVyIGEgbmV3IEV2ZW50TGlzdGVuZXIgZm9yIHRoZSBnaXZlbiBldmVudC5cbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gZXZlbnQgTmFtZSBvZiB0aGUgZXZlbnQuXG4gKiBAcGFyYW0ge0Z1bmN0b259IGZuIENhbGxiYWNrIGZ1bmN0aW9uLlxuICogQHBhcmFtIHtNaXhlZH0gY29udGV4dCBUaGUgY29udGV4dCBvZiB0aGUgZnVuY3Rpb24uXG4gKiBAYXBpIHB1YmxpY1xuICovXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLm9uID0gZnVuY3Rpb24gb24oZXZlbnQsIGZuLCBjb250ZXh0KSB7XG4gIHZhciBsaXN0ZW5lciA9IG5ldyBFRShmbiwgY29udGV4dCB8fCB0aGlzKVxuICAgICwgZXZ0ID0gcHJlZml4ID8gcHJlZml4ICsgZXZlbnQgOiBldmVudDtcblxuICBpZiAoIXRoaXMuX2V2ZW50cykgdGhpcy5fZXZlbnRzID0gcHJlZml4ID8ge30gOiBPYmplY3QuY3JlYXRlKG51bGwpO1xuICBpZiAoIXRoaXMuX2V2ZW50c1tldnRdKSB0aGlzLl9ldmVudHNbZXZ0XSA9IGxpc3RlbmVyO1xuICBlbHNlIHtcbiAgICBpZiAoIXRoaXMuX2V2ZW50c1tldnRdLmZuKSB0aGlzLl9ldmVudHNbZXZ0XS5wdXNoKGxpc3RlbmVyKTtcbiAgICBlbHNlIHRoaXMuX2V2ZW50c1tldnRdID0gW1xuICAgICAgdGhpcy5fZXZlbnRzW2V2dF0sIGxpc3RlbmVyXG4gICAgXTtcbiAgfVxuXG4gIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBBZGQgYW4gRXZlbnRMaXN0ZW5lciB0aGF0J3Mgb25seSBjYWxsZWQgb25jZS5cbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gZXZlbnQgTmFtZSBvZiB0aGUgZXZlbnQuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmbiBDYWxsYmFjayBmdW5jdGlvbi5cbiAqIEBwYXJhbSB7TWl4ZWR9IGNvbnRleHQgVGhlIGNvbnRleHQgb2YgdGhlIGZ1bmN0aW9uLlxuICogQGFwaSBwdWJsaWNcbiAqL1xuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5vbmNlID0gZnVuY3Rpb24gb25jZShldmVudCwgZm4sIGNvbnRleHQpIHtcbiAgdmFyIGxpc3RlbmVyID0gbmV3IEVFKGZuLCBjb250ZXh0IHx8IHRoaXMsIHRydWUpXG4gICAgLCBldnQgPSBwcmVmaXggPyBwcmVmaXggKyBldmVudCA6IGV2ZW50O1xuXG4gIGlmICghdGhpcy5fZXZlbnRzKSB0aGlzLl9ldmVudHMgPSBwcmVmaXggPyB7fSA6IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gIGlmICghdGhpcy5fZXZlbnRzW2V2dF0pIHRoaXMuX2V2ZW50c1tldnRdID0gbGlzdGVuZXI7XG4gIGVsc2Uge1xuICAgIGlmICghdGhpcy5fZXZlbnRzW2V2dF0uZm4pIHRoaXMuX2V2ZW50c1tldnRdLnB1c2gobGlzdGVuZXIpO1xuICAgIGVsc2UgdGhpcy5fZXZlbnRzW2V2dF0gPSBbXG4gICAgICB0aGlzLl9ldmVudHNbZXZ0XSwgbGlzdGVuZXJcbiAgICBdO1xuICB9XG5cbiAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIFJlbW92ZSBldmVudCBsaXN0ZW5lcnMuXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IGV2ZW50IFRoZSBldmVudCB3ZSB3YW50IHRvIHJlbW92ZS5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZuIFRoZSBsaXN0ZW5lciB0aGF0IHdlIG5lZWQgdG8gZmluZC5cbiAqIEBwYXJhbSB7TWl4ZWR9IGNvbnRleHQgT25seSByZW1vdmUgbGlzdGVuZXJzIG1hdGNoaW5nIHRoaXMgY29udGV4dC5cbiAqIEBwYXJhbSB7Qm9vbGVhbn0gb25jZSBPbmx5IHJlbW92ZSBvbmNlIGxpc3RlbmVycy5cbiAqIEBhcGkgcHVibGljXG4gKi9cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUucmVtb3ZlTGlzdGVuZXIgPSBmdW5jdGlvbiByZW1vdmVMaXN0ZW5lcihldmVudCwgZm4sIGNvbnRleHQsIG9uY2UpIHtcbiAgdmFyIGV2dCA9IHByZWZpeCA/IHByZWZpeCArIGV2ZW50IDogZXZlbnQ7XG5cbiAgaWYgKCF0aGlzLl9ldmVudHMgfHwgIXRoaXMuX2V2ZW50c1tldnRdKSByZXR1cm4gdGhpcztcblxuICB2YXIgbGlzdGVuZXJzID0gdGhpcy5fZXZlbnRzW2V2dF1cbiAgICAsIGV2ZW50cyA9IFtdO1xuXG4gIGlmIChmbikge1xuICAgIGlmIChsaXN0ZW5lcnMuZm4pIHtcbiAgICAgIGlmIChcbiAgICAgICAgICAgbGlzdGVuZXJzLmZuICE9PSBmblxuICAgICAgICB8fCAob25jZSAmJiAhbGlzdGVuZXJzLm9uY2UpXG4gICAgICAgIHx8IChjb250ZXh0ICYmIGxpc3RlbmVycy5jb250ZXh0ICE9PSBjb250ZXh0KVxuICAgICAgKSB7XG4gICAgICAgIGV2ZW50cy5wdXNoKGxpc3RlbmVycyk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGZvciAodmFyIGkgPSAwLCBsZW5ndGggPSBsaXN0ZW5lcnMubGVuZ3RoOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgIGxpc3RlbmVyc1tpXS5mbiAhPT0gZm5cbiAgICAgICAgICB8fCAob25jZSAmJiAhbGlzdGVuZXJzW2ldLm9uY2UpXG4gICAgICAgICAgfHwgKGNvbnRleHQgJiYgbGlzdGVuZXJzW2ldLmNvbnRleHQgIT09IGNvbnRleHQpXG4gICAgICAgICkge1xuICAgICAgICAgIGV2ZW50cy5wdXNoKGxpc3RlbmVyc1tpXSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvL1xuICAvLyBSZXNldCB0aGUgYXJyYXksIG9yIHJlbW92ZSBpdCBjb21wbGV0ZWx5IGlmIHdlIGhhdmUgbm8gbW9yZSBsaXN0ZW5lcnMuXG4gIC8vXG4gIGlmIChldmVudHMubGVuZ3RoKSB7XG4gICAgdGhpcy5fZXZlbnRzW2V2dF0gPSBldmVudHMubGVuZ3RoID09PSAxID8gZXZlbnRzWzBdIDogZXZlbnRzO1xuICB9IGVsc2Uge1xuICAgIGRlbGV0ZSB0aGlzLl9ldmVudHNbZXZ0XTtcbiAgfVxuXG4gIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBSZW1vdmUgYWxsIGxpc3RlbmVycyBvciBvbmx5IHRoZSBsaXN0ZW5lcnMgZm9yIHRoZSBzcGVjaWZpZWQgZXZlbnQuXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IGV2ZW50IFRoZSBldmVudCB3YW50IHRvIHJlbW92ZSBhbGwgbGlzdGVuZXJzIGZvci5cbiAqIEBhcGkgcHVibGljXG4gKi9cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUucmVtb3ZlQWxsTGlzdGVuZXJzID0gZnVuY3Rpb24gcmVtb3ZlQWxsTGlzdGVuZXJzKGV2ZW50KSB7XG4gIGlmICghdGhpcy5fZXZlbnRzKSByZXR1cm4gdGhpcztcblxuICBpZiAoZXZlbnQpIGRlbGV0ZSB0aGlzLl9ldmVudHNbcHJlZml4ID8gcHJlZml4ICsgZXZlbnQgOiBldmVudF07XG4gIGVsc2UgdGhpcy5fZXZlbnRzID0gcHJlZml4ID8ge30gOiBPYmplY3QuY3JlYXRlKG51bGwpO1xuXG4gIHJldHVybiB0aGlzO1xufTtcblxuLy9cbi8vIEFsaWFzIG1ldGhvZHMgbmFtZXMgYmVjYXVzZSBwZW9wbGUgcm9sbCBsaWtlIHRoYXQuXG4vL1xuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5vZmYgPSBFdmVudEVtaXR0ZXIucHJvdG90eXBlLnJlbW92ZUxpc3RlbmVyO1xuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5hZGRMaXN0ZW5lciA9IEV2ZW50RW1pdHRlci5wcm90b3R5cGUub247XG5cbi8vXG4vLyBUaGlzIGZ1bmN0aW9uIGRvZXNuJ3QgYXBwbHkgYW55bW9yZS5cbi8vXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLnNldE1heExpc3RlbmVycyA9IGZ1bmN0aW9uIHNldE1heExpc3RlbmVycygpIHtcbiAgcmV0dXJuIHRoaXM7XG59O1xuXG4vL1xuLy8gRXhwb3NlIHRoZSBwcmVmaXguXG4vL1xuRXZlbnRFbWl0dGVyLnByZWZpeGVkID0gcHJlZml4O1xuXG4vL1xuLy8gRXhwb3NlIHRoZSBtb2R1bGUuXG4vL1xuaWYgKCd1bmRlZmluZWQnICE9PSB0eXBlb2YgbW9kdWxlKSB7XG4gIG1vZHVsZS5leHBvcnRzID0gRXZlbnRFbWl0dGVyO1xufVxuIiwiLyogZXNsaW50LWRpc2FibGUgbm8tdW51c2VkLXZhcnMgKi9cbid1c2Ugc3RyaWN0JztcbnZhciBoYXNPd25Qcm9wZXJ0eSA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7XG52YXIgcHJvcElzRW51bWVyYWJsZSA9IE9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGU7XG5cbmZ1bmN0aW9uIHRvT2JqZWN0KHZhbCkge1xuXHRpZiAodmFsID09PSBudWxsIHx8IHZhbCA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0dGhyb3cgbmV3IFR5cGVFcnJvcignT2JqZWN0LmFzc2lnbiBjYW5ub3QgYmUgY2FsbGVkIHdpdGggbnVsbCBvciB1bmRlZmluZWQnKTtcblx0fVxuXG5cdHJldHVybiBPYmplY3QodmFsKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQsIHNvdXJjZSkge1xuXHR2YXIgZnJvbTtcblx0dmFyIHRvID0gdG9PYmplY3QodGFyZ2V0KTtcblx0dmFyIHN5bWJvbHM7XG5cblx0Zm9yICh2YXIgcyA9IDE7IHMgPCBhcmd1bWVudHMubGVuZ3RoOyBzKyspIHtcblx0XHRmcm9tID0gT2JqZWN0KGFyZ3VtZW50c1tzXSk7XG5cblx0XHRmb3IgKHZhciBrZXkgaW4gZnJvbSkge1xuXHRcdFx0aWYgKGhhc093blByb3BlcnR5LmNhbGwoZnJvbSwga2V5KSkge1xuXHRcdFx0XHR0b1trZXldID0gZnJvbVtrZXldO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7XG5cdFx0XHRzeW1ib2xzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhmcm9tKTtcblx0XHRcdGZvciAodmFyIGkgPSAwOyBpIDwgc3ltYm9scy5sZW5ndGg7IGkrKykge1xuXHRcdFx0XHRpZiAocHJvcElzRW51bWVyYWJsZS5jYWxsKGZyb20sIHN5bWJvbHNbaV0pKSB7XG5cdFx0XHRcdFx0dG9bc3ltYm9sc1tpXV0gPSBmcm9tW3N5bWJvbHNbaV1dO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIHRvO1xufTtcbiIsIi8qIVxuICogYXN5bmNcbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS9jYW9sYW4vYXN5bmNcbiAqXG4gKiBDb3B5cmlnaHQgMjAxMC0yMDE0IENhb2xhbiBNY01haG9uXG4gKiBSZWxlYXNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2VcbiAqL1xuLypqc2hpbnQgb25ldmFyOiBmYWxzZSwgaW5kZW50OjQgKi9cbi8qZ2xvYmFsIHNldEltbWVkaWF0ZTogZmFsc2UsIHNldFRpbWVvdXQ6IGZhbHNlLCBjb25zb2xlOiBmYWxzZSAqL1xuKGZ1bmN0aW9uICgpIHtcblxuICAgIHZhciBhc3luYyA9IHt9O1xuXG4gICAgLy8gZ2xvYmFsIG9uIHRoZSBzZXJ2ZXIsIHdpbmRvdyBpbiB0aGUgYnJvd3NlclxuICAgIHZhciByb290LCBwcmV2aW91c19hc3luYztcblxuICAgIHJvb3QgPSB0aGlzO1xuICAgIGlmIChyb290ICE9IG51bGwpIHtcbiAgICAgIHByZXZpb3VzX2FzeW5jID0gcm9vdC5hc3luYztcbiAgICB9XG5cbiAgICBhc3luYy5ub0NvbmZsaWN0ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByb290LmFzeW5jID0gcHJldmlvdXNfYXN5bmM7XG4gICAgICAgIHJldHVybiBhc3luYztcbiAgICB9O1xuXG4gICAgZnVuY3Rpb24gb25seV9vbmNlKGZuKSB7XG4gICAgICAgIHZhciBjYWxsZWQgPSBmYWxzZTtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgaWYgKGNhbGxlZCkgdGhyb3cgbmV3IEVycm9yKFwiQ2FsbGJhY2sgd2FzIGFscmVhZHkgY2FsbGVkLlwiKTtcbiAgICAgICAgICAgIGNhbGxlZCA9IHRydWU7XG4gICAgICAgICAgICBmbi5hcHBseShyb290LCBhcmd1bWVudHMpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8vLyBjcm9zcy1icm93c2VyIGNvbXBhdGlibGl0eSBmdW5jdGlvbnMgLy8vL1xuXG4gICAgdmFyIF90b1N0cmluZyA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7XG5cbiAgICB2YXIgX2lzQXJyYXkgPSBBcnJheS5pc0FycmF5IHx8IGZ1bmN0aW9uIChvYmopIHtcbiAgICAgICAgcmV0dXJuIF90b1N0cmluZy5jYWxsKG9iaikgPT09ICdbb2JqZWN0IEFycmF5XSc7XG4gICAgfTtcblxuICAgIHZhciBfZWFjaCA9IGZ1bmN0aW9uIChhcnIsIGl0ZXJhdG9yKSB7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXJyLmxlbmd0aDsgaSArPSAxKSB7XG4gICAgICAgICAgICBpdGVyYXRvcihhcnJbaV0sIGksIGFycik7XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgdmFyIF9tYXAgPSBmdW5jdGlvbiAoYXJyLCBpdGVyYXRvcikge1xuICAgICAgICBpZiAoYXJyLm1hcCkge1xuICAgICAgICAgICAgcmV0dXJuIGFyci5tYXAoaXRlcmF0b3IpO1xuICAgICAgICB9XG4gICAgICAgIHZhciByZXN1bHRzID0gW107XG4gICAgICAgIF9lYWNoKGFyciwgZnVuY3Rpb24gKHgsIGksIGEpIHtcbiAgICAgICAgICAgIHJlc3VsdHMucHVzaChpdGVyYXRvcih4LCBpLCBhKSk7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gcmVzdWx0cztcbiAgICB9O1xuXG4gICAgdmFyIF9yZWR1Y2UgPSBmdW5jdGlvbiAoYXJyLCBpdGVyYXRvciwgbWVtbykge1xuICAgICAgICBpZiAoYXJyLnJlZHVjZSkge1xuICAgICAgICAgICAgcmV0dXJuIGFyci5yZWR1Y2UoaXRlcmF0b3IsIG1lbW8pO1xuICAgICAgICB9XG4gICAgICAgIF9lYWNoKGFyciwgZnVuY3Rpb24gKHgsIGksIGEpIHtcbiAgICAgICAgICAgIG1lbW8gPSBpdGVyYXRvcihtZW1vLCB4LCBpLCBhKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBtZW1vO1xuICAgIH07XG5cbiAgICB2YXIgX2tleXMgPSBmdW5jdGlvbiAob2JqKSB7XG4gICAgICAgIGlmIChPYmplY3Qua2V5cykge1xuICAgICAgICAgICAgcmV0dXJuIE9iamVjdC5rZXlzKG9iaik7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIGtleXMgPSBbXTtcbiAgICAgICAgZm9yICh2YXIgayBpbiBvYmopIHtcbiAgICAgICAgICAgIGlmIChvYmouaGFzT3duUHJvcGVydHkoaykpIHtcbiAgICAgICAgICAgICAgICBrZXlzLnB1c2goayk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGtleXM7XG4gICAgfTtcblxuICAgIC8vLy8gZXhwb3J0ZWQgYXN5bmMgbW9kdWxlIGZ1bmN0aW9ucyAvLy8vXG5cbiAgICAvLy8vIG5leHRUaWNrIGltcGxlbWVudGF0aW9uIHdpdGggYnJvd3Nlci1jb21wYXRpYmxlIGZhbGxiYWNrIC8vLy9cbiAgICBpZiAodHlwZW9mIHByb2Nlc3MgPT09ICd1bmRlZmluZWQnIHx8ICEocHJvY2Vzcy5uZXh0VGljaykpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBzZXRJbW1lZGlhdGUgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIGFzeW5jLm5leHRUaWNrID0gZnVuY3Rpb24gKGZuKSB7XG4gICAgICAgICAgICAgICAgLy8gbm90IGEgZGlyZWN0IGFsaWFzIGZvciBJRTEwIGNvbXBhdGliaWxpdHlcbiAgICAgICAgICAgICAgICBzZXRJbW1lZGlhdGUoZm4pO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGFzeW5jLnNldEltbWVkaWF0ZSA9IGFzeW5jLm5leHRUaWNrO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgYXN5bmMubmV4dFRpY2sgPSBmdW5jdGlvbiAoZm4pIHtcbiAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KGZuLCAwKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBhc3luYy5zZXRJbW1lZGlhdGUgPSBhc3luYy5uZXh0VGljaztcbiAgICAgICAgfVxuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgYXN5bmMubmV4dFRpY2sgPSBwcm9jZXNzLm5leHRUaWNrO1xuICAgICAgICBpZiAodHlwZW9mIHNldEltbWVkaWF0ZSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgIGFzeW5jLnNldEltbWVkaWF0ZSA9IGZ1bmN0aW9uIChmbikge1xuICAgICAgICAgICAgICAvLyBub3QgYSBkaXJlY3QgYWxpYXMgZm9yIElFMTAgY29tcGF0aWJpbGl0eVxuICAgICAgICAgICAgICBzZXRJbW1lZGlhdGUoZm4pO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGFzeW5jLnNldEltbWVkaWF0ZSA9IGFzeW5jLm5leHRUaWNrO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgYXN5bmMuZWFjaCA9IGZ1bmN0aW9uIChhcnIsIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICBjYWxsYmFjayA9IGNhbGxiYWNrIHx8IGZ1bmN0aW9uICgpIHt9O1xuICAgICAgICBpZiAoIWFyci5sZW5ndGgpIHtcbiAgICAgICAgICAgIHJldHVybiBjYWxsYmFjaygpO1xuICAgICAgICB9XG4gICAgICAgIHZhciBjb21wbGV0ZWQgPSAwO1xuICAgICAgICBfZWFjaChhcnIsIGZ1bmN0aW9uICh4KSB7XG4gICAgICAgICAgICBpdGVyYXRvcih4LCBvbmx5X29uY2UoZG9uZSkgKTtcbiAgICAgICAgfSk7XG4gICAgICAgIGZ1bmN0aW9uIGRvbmUoZXJyKSB7XG4gICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgICBjYWxsYmFjayA9IGZ1bmN0aW9uICgpIHt9O1xuICAgICAgICAgIH1cbiAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgY29tcGxldGVkICs9IDE7XG4gICAgICAgICAgICAgIGlmIChjb21wbGV0ZWQgPj0gYXJyLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgY2FsbGJhY2soKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH07XG4gICAgYXN5bmMuZm9yRWFjaCA9IGFzeW5jLmVhY2g7XG5cbiAgICBhc3luYy5lYWNoU2VyaWVzID0gZnVuY3Rpb24gKGFyciwgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgIGNhbGxiYWNrID0gY2FsbGJhY2sgfHwgZnVuY3Rpb24gKCkge307XG4gICAgICAgIGlmICghYXJyLmxlbmd0aCkge1xuICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKCk7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIGNvbXBsZXRlZCA9IDA7XG4gICAgICAgIHZhciBpdGVyYXRlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgaXRlcmF0b3IoYXJyW2NvbXBsZXRlZF0sIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrID0gZnVuY3Rpb24gKCkge307XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBjb21wbGV0ZWQgKz0gMTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNvbXBsZXRlZCA+PSBhcnIubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgaXRlcmF0ZSgpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH07XG4gICAgICAgIGl0ZXJhdGUoKTtcbiAgICB9O1xuICAgIGFzeW5jLmZvckVhY2hTZXJpZXMgPSBhc3luYy5lYWNoU2VyaWVzO1xuXG4gICAgYXN5bmMuZWFjaExpbWl0ID0gZnVuY3Rpb24gKGFyciwgbGltaXQsIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICB2YXIgZm4gPSBfZWFjaExpbWl0KGxpbWl0KTtcbiAgICAgICAgZm4uYXBwbHkobnVsbCwgW2FyciwgaXRlcmF0b3IsIGNhbGxiYWNrXSk7XG4gICAgfTtcbiAgICBhc3luYy5mb3JFYWNoTGltaXQgPSBhc3luYy5lYWNoTGltaXQ7XG5cbiAgICB2YXIgX2VhY2hMaW1pdCA9IGZ1bmN0aW9uIChsaW1pdCkge1xuXG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAoYXJyLCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIGNhbGxiYWNrID0gY2FsbGJhY2sgfHwgZnVuY3Rpb24gKCkge307XG4gICAgICAgICAgICBpZiAoIWFyci5sZW5ndGggfHwgbGltaXQgPD0gMCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBjYWxsYmFjaygpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdmFyIGNvbXBsZXRlZCA9IDA7XG4gICAgICAgICAgICB2YXIgc3RhcnRlZCA9IDA7XG4gICAgICAgICAgICB2YXIgcnVubmluZyA9IDA7XG5cbiAgICAgICAgICAgIChmdW5jdGlvbiByZXBsZW5pc2ggKCkge1xuICAgICAgICAgICAgICAgIGlmIChjb21wbGV0ZWQgPj0gYXJyLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gY2FsbGJhY2soKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB3aGlsZSAocnVubmluZyA8IGxpbWl0ICYmIHN0YXJ0ZWQgPCBhcnIubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgIHN0YXJ0ZWQgKz0gMTtcbiAgICAgICAgICAgICAgICAgICAgcnVubmluZyArPSAxO1xuICAgICAgICAgICAgICAgICAgICBpdGVyYXRvcihhcnJbc3RhcnRlZCAtIDFdLCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayA9IGZ1bmN0aW9uICgpIHt9O1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcGxldGVkICs9IDE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcnVubmluZyAtPSAxO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb21wbGV0ZWQgPj0gYXJyLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVwbGVuaXNoKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KSgpO1xuICAgICAgICB9O1xuICAgIH07XG5cblxuICAgIHZhciBkb1BhcmFsbGVsID0gZnVuY3Rpb24gKGZuKSB7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7XG4gICAgICAgICAgICByZXR1cm4gZm4uYXBwbHkobnVsbCwgW2FzeW5jLmVhY2hdLmNvbmNhdChhcmdzKSk7XG4gICAgICAgIH07XG4gICAgfTtcbiAgICB2YXIgZG9QYXJhbGxlbExpbWl0ID0gZnVuY3Rpb24obGltaXQsIGZuKSB7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7XG4gICAgICAgICAgICByZXR1cm4gZm4uYXBwbHkobnVsbCwgW19lYWNoTGltaXQobGltaXQpXS5jb25jYXQoYXJncykpO1xuICAgICAgICB9O1xuICAgIH07XG4gICAgdmFyIGRvU2VyaWVzID0gZnVuY3Rpb24gKGZuKSB7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7XG4gICAgICAgICAgICByZXR1cm4gZm4uYXBwbHkobnVsbCwgW2FzeW5jLmVhY2hTZXJpZXNdLmNvbmNhdChhcmdzKSk7XG4gICAgICAgIH07XG4gICAgfTtcblxuXG4gICAgdmFyIF9hc3luY01hcCA9IGZ1bmN0aW9uIChlYWNoZm4sIGFyciwgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgIGFyciA9IF9tYXAoYXJyLCBmdW5jdGlvbiAoeCwgaSkge1xuICAgICAgICAgICAgcmV0dXJuIHtpbmRleDogaSwgdmFsdWU6IHh9O1xuICAgICAgICB9KTtcbiAgICAgICAgaWYgKCFjYWxsYmFjaykge1xuICAgICAgICAgICAgZWFjaGZuKGFyciwgZnVuY3Rpb24gKHgsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICAgICAgaXRlcmF0b3IoeC52YWx1ZSwgZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB2YXIgcmVzdWx0cyA9IFtdO1xuICAgICAgICAgICAgZWFjaGZuKGFyciwgZnVuY3Rpb24gKHgsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICAgICAgaXRlcmF0b3IoeC52YWx1ZSwgZnVuY3Rpb24gKGVyciwgdikge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHRzW3guaW5kZXhdID0gdjtcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0sIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnIsIHJlc3VsdHMpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIGFzeW5jLm1hcCA9IGRvUGFyYWxsZWwoX2FzeW5jTWFwKTtcbiAgICBhc3luYy5tYXBTZXJpZXMgPSBkb1NlcmllcyhfYXN5bmNNYXApO1xuICAgIGFzeW5jLm1hcExpbWl0ID0gZnVuY3Rpb24gKGFyciwgbGltaXQsIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICByZXR1cm4gX21hcExpbWl0KGxpbWl0KShhcnIsIGl0ZXJhdG9yLCBjYWxsYmFjayk7XG4gICAgfTtcblxuICAgIHZhciBfbWFwTGltaXQgPSBmdW5jdGlvbihsaW1pdCkge1xuICAgICAgICByZXR1cm4gZG9QYXJhbGxlbExpbWl0KGxpbWl0LCBfYXN5bmNNYXApO1xuICAgIH07XG5cbiAgICAvLyByZWR1Y2Ugb25seSBoYXMgYSBzZXJpZXMgdmVyc2lvbiwgYXMgZG9pbmcgcmVkdWNlIGluIHBhcmFsbGVsIHdvbid0XG4gICAgLy8gd29yayBpbiBtYW55IHNpdHVhdGlvbnMuXG4gICAgYXN5bmMucmVkdWNlID0gZnVuY3Rpb24gKGFyciwgbWVtbywgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgIGFzeW5jLmVhY2hTZXJpZXMoYXJyLCBmdW5jdGlvbiAoeCwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIGl0ZXJhdG9yKG1lbW8sIHgsIGZ1bmN0aW9uIChlcnIsIHYpIHtcbiAgICAgICAgICAgICAgICBtZW1vID0gdjtcbiAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgIGNhbGxiYWNrKGVyciwgbWVtbyk7XG4gICAgICAgIH0pO1xuICAgIH07XG4gICAgLy8gaW5qZWN0IGFsaWFzXG4gICAgYXN5bmMuaW5qZWN0ID0gYXN5bmMucmVkdWNlO1xuICAgIC8vIGZvbGRsIGFsaWFzXG4gICAgYXN5bmMuZm9sZGwgPSBhc3luYy5yZWR1Y2U7XG5cbiAgICBhc3luYy5yZWR1Y2VSaWdodCA9IGZ1bmN0aW9uIChhcnIsIG1lbW8sIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICB2YXIgcmV2ZXJzZWQgPSBfbWFwKGFyciwgZnVuY3Rpb24gKHgpIHtcbiAgICAgICAgICAgIHJldHVybiB4O1xuICAgICAgICB9KS5yZXZlcnNlKCk7XG4gICAgICAgIGFzeW5jLnJlZHVjZShyZXZlcnNlZCwgbWVtbywgaXRlcmF0b3IsIGNhbGxiYWNrKTtcbiAgICB9O1xuICAgIC8vIGZvbGRyIGFsaWFzXG4gICAgYXN5bmMuZm9sZHIgPSBhc3luYy5yZWR1Y2VSaWdodDtcblxuICAgIHZhciBfZmlsdGVyID0gZnVuY3Rpb24gKGVhY2hmbiwgYXJyLCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgdmFyIHJlc3VsdHMgPSBbXTtcbiAgICAgICAgYXJyID0gX21hcChhcnIsIGZ1bmN0aW9uICh4LCBpKSB7XG4gICAgICAgICAgICByZXR1cm4ge2luZGV4OiBpLCB2YWx1ZTogeH07XG4gICAgICAgIH0pO1xuICAgICAgICBlYWNoZm4oYXJyLCBmdW5jdGlvbiAoeCwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIGl0ZXJhdG9yKHgudmFsdWUsIGZ1bmN0aW9uICh2KSB7XG4gICAgICAgICAgICAgICAgaWYgKHYpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0cy5wdXNoKHgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgIGNhbGxiYWNrKF9tYXAocmVzdWx0cy5zb3J0KGZ1bmN0aW9uIChhLCBiKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGEuaW5kZXggLSBiLmluZGV4O1xuICAgICAgICAgICAgfSksIGZ1bmN0aW9uICh4KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHgudmFsdWU7XG4gICAgICAgICAgICB9KSk7XG4gICAgICAgIH0pO1xuICAgIH07XG4gICAgYXN5bmMuZmlsdGVyID0gZG9QYXJhbGxlbChfZmlsdGVyKTtcbiAgICBhc3luYy5maWx0ZXJTZXJpZXMgPSBkb1NlcmllcyhfZmlsdGVyKTtcbiAgICAvLyBzZWxlY3QgYWxpYXNcbiAgICBhc3luYy5zZWxlY3QgPSBhc3luYy5maWx0ZXI7XG4gICAgYXN5bmMuc2VsZWN0U2VyaWVzID0gYXN5bmMuZmlsdGVyU2VyaWVzO1xuXG4gICAgdmFyIF9yZWplY3QgPSBmdW5jdGlvbiAoZWFjaGZuLCBhcnIsIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICB2YXIgcmVzdWx0cyA9IFtdO1xuICAgICAgICBhcnIgPSBfbWFwKGFyciwgZnVuY3Rpb24gKHgsIGkpIHtcbiAgICAgICAgICAgIHJldHVybiB7aW5kZXg6IGksIHZhbHVlOiB4fTtcbiAgICAgICAgfSk7XG4gICAgICAgIGVhY2hmbihhcnIsIGZ1bmN0aW9uICh4LCBjYWxsYmFjaykge1xuICAgICAgICAgICAgaXRlcmF0b3IoeC52YWx1ZSwgZnVuY3Rpb24gKHYpIHtcbiAgICAgICAgICAgICAgICBpZiAoIXYpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0cy5wdXNoKHgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgIGNhbGxiYWNrKF9tYXAocmVzdWx0cy5zb3J0KGZ1bmN0aW9uIChhLCBiKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGEuaW5kZXggLSBiLmluZGV4O1xuICAgICAgICAgICAgfSksIGZ1bmN0aW9uICh4KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHgudmFsdWU7XG4gICAgICAgICAgICB9KSk7XG4gICAgICAgIH0pO1xuICAgIH07XG4gICAgYXN5bmMucmVqZWN0ID0gZG9QYXJhbGxlbChfcmVqZWN0KTtcbiAgICBhc3luYy5yZWplY3RTZXJpZXMgPSBkb1NlcmllcyhfcmVqZWN0KTtcblxuICAgIHZhciBfZGV0ZWN0ID0gZnVuY3Rpb24gKGVhY2hmbiwgYXJyLCBpdGVyYXRvciwgbWFpbl9jYWxsYmFjaykge1xuICAgICAgICBlYWNoZm4oYXJyLCBmdW5jdGlvbiAoeCwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIGl0ZXJhdG9yKHgsIGZ1bmN0aW9uIChyZXN1bHQpIHtcbiAgICAgICAgICAgICAgICBpZiAocmVzdWx0KSB7XG4gICAgICAgICAgICAgICAgICAgIG1haW5fY2FsbGJhY2soeCk7XG4gICAgICAgICAgICAgICAgICAgIG1haW5fY2FsbGJhY2sgPSBmdW5jdGlvbiAoKSB7fTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgIG1haW5fY2FsbGJhY2soKTtcbiAgICAgICAgfSk7XG4gICAgfTtcbiAgICBhc3luYy5kZXRlY3QgPSBkb1BhcmFsbGVsKF9kZXRlY3QpO1xuICAgIGFzeW5jLmRldGVjdFNlcmllcyA9IGRvU2VyaWVzKF9kZXRlY3QpO1xuXG4gICAgYXN5bmMuc29tZSA9IGZ1bmN0aW9uIChhcnIsIGl0ZXJhdG9yLCBtYWluX2NhbGxiYWNrKSB7XG4gICAgICAgIGFzeW5jLmVhY2goYXJyLCBmdW5jdGlvbiAoeCwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIGl0ZXJhdG9yKHgsIGZ1bmN0aW9uICh2KSB7XG4gICAgICAgICAgICAgICAgaWYgKHYpIHtcbiAgICAgICAgICAgICAgICAgICAgbWFpbl9jYWxsYmFjayh0cnVlKTtcbiAgICAgICAgICAgICAgICAgICAgbWFpbl9jYWxsYmFjayA9IGZ1bmN0aW9uICgpIHt9O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgIG1haW5fY2FsbGJhY2soZmFsc2UpO1xuICAgICAgICB9KTtcbiAgICB9O1xuICAgIC8vIGFueSBhbGlhc1xuICAgIGFzeW5jLmFueSA9IGFzeW5jLnNvbWU7XG5cbiAgICBhc3luYy5ldmVyeSA9IGZ1bmN0aW9uIChhcnIsIGl0ZXJhdG9yLCBtYWluX2NhbGxiYWNrKSB7XG4gICAgICAgIGFzeW5jLmVhY2goYXJyLCBmdW5jdGlvbiAoeCwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIGl0ZXJhdG9yKHgsIGZ1bmN0aW9uICh2KSB7XG4gICAgICAgICAgICAgICAgaWYgKCF2KSB7XG4gICAgICAgICAgICAgICAgICAgIG1haW5fY2FsbGJhY2soZmFsc2UpO1xuICAgICAgICAgICAgICAgICAgICBtYWluX2NhbGxiYWNrID0gZnVuY3Rpb24gKCkge307XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhbGxiYWNrKCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSwgZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgbWFpbl9jYWxsYmFjayh0cnVlKTtcbiAgICAgICAgfSk7XG4gICAgfTtcbiAgICAvLyBhbGwgYWxpYXNcbiAgICBhc3luYy5hbGwgPSBhc3luYy5ldmVyeTtcblxuICAgIGFzeW5jLnNvcnRCeSA9IGZ1bmN0aW9uIChhcnIsIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICBhc3luYy5tYXAoYXJyLCBmdW5jdGlvbiAoeCwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIGl0ZXJhdG9yKHgsIGZ1bmN0aW9uIChlcnIsIGNyaXRlcmlhKSB7XG4gICAgICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2sobnVsbCwge3ZhbHVlOiB4LCBjcml0ZXJpYTogY3JpdGVyaWF9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSwgZnVuY3Rpb24gKGVyciwgcmVzdWx0cykge1xuICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAgIHJldHVybiBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgdmFyIGZuID0gZnVuY3Rpb24gKGxlZnQsIHJpZ2h0KSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBhID0gbGVmdC5jcml0ZXJpYSwgYiA9IHJpZ2h0LmNyaXRlcmlhO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYSA8IGIgPyAtMSA6IGEgPiBiID8gMSA6IDA7XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICBjYWxsYmFjayhudWxsLCBfbWFwKHJlc3VsdHMuc29ydChmbiksIGZ1bmN0aW9uICh4KSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB4LnZhbHVlO1xuICAgICAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfTtcblxuICAgIGFzeW5jLmF1dG8gPSBmdW5jdGlvbiAodGFza3MsIGNhbGxiYWNrKSB7XG4gICAgICAgIGNhbGxiYWNrID0gY2FsbGJhY2sgfHwgZnVuY3Rpb24gKCkge307XG4gICAgICAgIHZhciBrZXlzID0gX2tleXModGFza3MpO1xuICAgICAgICB2YXIgcmVtYWluaW5nVGFza3MgPSBrZXlzLmxlbmd0aFxuICAgICAgICBpZiAoIXJlbWFpbmluZ1Rhc2tzKSB7XG4gICAgICAgICAgICByZXR1cm4gY2FsbGJhY2soKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciByZXN1bHRzID0ge307XG5cbiAgICAgICAgdmFyIGxpc3RlbmVycyA9IFtdO1xuICAgICAgICB2YXIgYWRkTGlzdGVuZXIgPSBmdW5jdGlvbiAoZm4pIHtcbiAgICAgICAgICAgIGxpc3RlbmVycy51bnNoaWZ0KGZuKTtcbiAgICAgICAgfTtcbiAgICAgICAgdmFyIHJlbW92ZUxpc3RlbmVyID0gZnVuY3Rpb24gKGZuKSB7XG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxpc3RlbmVycy5sZW5ndGg7IGkgKz0gMSkge1xuICAgICAgICAgICAgICAgIGlmIChsaXN0ZW5lcnNbaV0gPT09IGZuKSB7XG4gICAgICAgICAgICAgICAgICAgIGxpc3RlbmVycy5zcGxpY2UoaSwgMSk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIHZhciB0YXNrQ29tcGxldGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZW1haW5pbmdUYXNrcy0tXG4gICAgICAgICAgICBfZWFjaChsaXN0ZW5lcnMuc2xpY2UoMCksIGZ1bmN0aW9uIChmbikge1xuICAgICAgICAgICAgICAgIGZuKCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfTtcblxuICAgICAgICBhZGRMaXN0ZW5lcihmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBpZiAoIXJlbWFpbmluZ1Rhc2tzKSB7XG4gICAgICAgICAgICAgICAgdmFyIHRoZUNhbGxiYWNrID0gY2FsbGJhY2s7XG4gICAgICAgICAgICAgICAgLy8gcHJldmVudCBmaW5hbCBjYWxsYmFjayBmcm9tIGNhbGxpbmcgaXRzZWxmIGlmIGl0IGVycm9yc1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrID0gZnVuY3Rpb24gKCkge307XG5cbiAgICAgICAgICAgICAgICB0aGVDYWxsYmFjayhudWxsLCByZXN1bHRzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgX2VhY2goa2V5cywgZnVuY3Rpb24gKGspIHtcbiAgICAgICAgICAgIHZhciB0YXNrID0gX2lzQXJyYXkodGFza3Nba10pID8gdGFza3Nba106IFt0YXNrc1trXV07XG4gICAgICAgICAgICB2YXIgdGFza0NhbGxiYWNrID0gZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgICAgIHZhciBhcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKTtcbiAgICAgICAgICAgICAgICBpZiAoYXJncy5sZW5ndGggPD0gMSkge1xuICAgICAgICAgICAgICAgICAgICBhcmdzID0gYXJnc1swXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAgICAgICB2YXIgc2FmZVJlc3VsdHMgPSB7fTtcbiAgICAgICAgICAgICAgICAgICAgX2VhY2goX2tleXMocmVzdWx0cyksIGZ1bmN0aW9uKHJrZXkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNhZmVSZXN1bHRzW3JrZXldID0gcmVzdWx0c1tya2V5XTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIHNhZmVSZXN1bHRzW2tdID0gYXJncztcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soZXJyLCBzYWZlUmVzdWx0cyk7XG4gICAgICAgICAgICAgICAgICAgIC8vIHN0b3Agc3Vic2VxdWVudCBlcnJvcnMgaGl0dGluZyBjYWxsYmFjayBtdWx0aXBsZSB0aW1lc1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayA9IGZ1bmN0aW9uICgpIHt9O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0c1trXSA9IGFyZ3M7XG4gICAgICAgICAgICAgICAgICAgIGFzeW5jLnNldEltbWVkaWF0ZSh0YXNrQ29tcGxldGUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICB2YXIgcmVxdWlyZXMgPSB0YXNrLnNsaWNlKDAsIE1hdGguYWJzKHRhc2subGVuZ3RoIC0gMSkpIHx8IFtdO1xuICAgICAgICAgICAgdmFyIHJlYWR5ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBfcmVkdWNlKHJlcXVpcmVzLCBmdW5jdGlvbiAoYSwgeCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gKGEgJiYgcmVzdWx0cy5oYXNPd25Qcm9wZXJ0eSh4KSk7XG4gICAgICAgICAgICAgICAgfSwgdHJ1ZSkgJiYgIXJlc3VsdHMuaGFzT3duUHJvcGVydHkoayk7XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgaWYgKHJlYWR5KCkpIHtcbiAgICAgICAgICAgICAgICB0YXNrW3Rhc2subGVuZ3RoIC0gMV0odGFza0NhbGxiYWNrLCByZXN1bHRzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHZhciBsaXN0ZW5lciA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlYWR5KCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlbW92ZUxpc3RlbmVyKGxpc3RlbmVyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRhc2tbdGFzay5sZW5ndGggLSAxXSh0YXNrQ2FsbGJhY2ssIHJlc3VsdHMpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICBhZGRMaXN0ZW5lcihsaXN0ZW5lcik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH07XG5cbiAgICBhc3luYy5yZXRyeSA9IGZ1bmN0aW9uKHRpbWVzLCB0YXNrLCBjYWxsYmFjaykge1xuICAgICAgICB2YXIgREVGQVVMVF9USU1FUyA9IDU7XG4gICAgICAgIHZhciBhdHRlbXB0cyA9IFtdO1xuICAgICAgICAvLyBVc2UgZGVmYXVsdHMgaWYgdGltZXMgbm90IHBhc3NlZFxuICAgICAgICBpZiAodHlwZW9mIHRpbWVzID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICBjYWxsYmFjayA9IHRhc2s7XG4gICAgICAgICAgICB0YXNrID0gdGltZXM7XG4gICAgICAgICAgICB0aW1lcyA9IERFRkFVTFRfVElNRVM7XG4gICAgICAgIH1cbiAgICAgICAgLy8gTWFrZSBzdXJlIHRpbWVzIGlzIGEgbnVtYmVyXG4gICAgICAgIHRpbWVzID0gcGFyc2VJbnQodGltZXMsIDEwKSB8fCBERUZBVUxUX1RJTUVTO1xuICAgICAgICB2YXIgd3JhcHBlZFRhc2sgPSBmdW5jdGlvbih3cmFwcGVkQ2FsbGJhY2ssIHdyYXBwZWRSZXN1bHRzKSB7XG4gICAgICAgICAgICB2YXIgcmV0cnlBdHRlbXB0ID0gZnVuY3Rpb24odGFzaywgZmluYWxBdHRlbXB0KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKHNlcmllc0NhbGxiYWNrKSB7XG4gICAgICAgICAgICAgICAgICAgIHRhc2soZnVuY3Rpb24oZXJyLCByZXN1bHQpe1xuICAgICAgICAgICAgICAgICAgICAgICAgc2VyaWVzQ2FsbGJhY2soIWVyciB8fCBmaW5hbEF0dGVtcHQsIHtlcnI6IGVyciwgcmVzdWx0OiByZXN1bHR9KTtcbiAgICAgICAgICAgICAgICAgICAgfSwgd3JhcHBlZFJlc3VsdHMpO1xuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgd2hpbGUgKHRpbWVzKSB7XG4gICAgICAgICAgICAgICAgYXR0ZW1wdHMucHVzaChyZXRyeUF0dGVtcHQodGFzaywgISh0aW1lcy09MSkpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGFzeW5jLnNlcmllcyhhdHRlbXB0cywgZnVuY3Rpb24oZG9uZSwgZGF0YSl7XG4gICAgICAgICAgICAgICAgZGF0YSA9IGRhdGFbZGF0YS5sZW5ndGggLSAxXTtcbiAgICAgICAgICAgICAgICAod3JhcHBlZENhbGxiYWNrIHx8IGNhbGxiYWNrKShkYXRhLmVyciwgZGF0YS5yZXN1bHQpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gSWYgYSBjYWxsYmFjayBpcyBwYXNzZWQsIHJ1biB0aGlzIGFzIGEgY29udHJvbGwgZmxvd1xuICAgICAgICByZXR1cm4gY2FsbGJhY2sgPyB3cmFwcGVkVGFzaygpIDogd3JhcHBlZFRhc2tcbiAgICB9O1xuXG4gICAgYXN5bmMud2F0ZXJmYWxsID0gZnVuY3Rpb24gKHRhc2tzLCBjYWxsYmFjaykge1xuICAgICAgICBjYWxsYmFjayA9IGNhbGxiYWNrIHx8IGZ1bmN0aW9uICgpIHt9O1xuICAgICAgICBpZiAoIV9pc0FycmF5KHRhc2tzKSkge1xuICAgICAgICAgIHZhciBlcnIgPSBuZXcgRXJyb3IoJ0ZpcnN0IGFyZ3VtZW50IHRvIHdhdGVyZmFsbCBtdXN0IGJlIGFuIGFycmF5IG9mIGZ1bmN0aW9ucycpO1xuICAgICAgICAgIHJldHVybiBjYWxsYmFjayhlcnIpO1xuICAgICAgICB9XG4gICAgICAgIGlmICghdGFza3MubGVuZ3RoKSB7XG4gICAgICAgICAgICByZXR1cm4gY2FsbGJhY2soKTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgd3JhcEl0ZXJhdG9yID0gZnVuY3Rpb24gKGl0ZXJhdG9yKSB7XG4gICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2suYXBwbHkobnVsbCwgYXJndW1lbnRzKTtcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2sgPSBmdW5jdGlvbiAoKSB7fTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBhcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKTtcbiAgICAgICAgICAgICAgICAgICAgdmFyIG5leHQgPSBpdGVyYXRvci5uZXh0KCk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChuZXh0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhcmdzLnB1c2god3JhcEl0ZXJhdG9yKG5leHQpKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3MucHVzaChjYWxsYmFjayk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgYXN5bmMuc2V0SW1tZWRpYXRlKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGl0ZXJhdG9yLmFwcGx5KG51bGwsIGFyZ3MpO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9O1xuICAgICAgICB9O1xuICAgICAgICB3cmFwSXRlcmF0b3IoYXN5bmMuaXRlcmF0b3IodGFza3MpKSgpO1xuICAgIH07XG5cbiAgICB2YXIgX3BhcmFsbGVsID0gZnVuY3Rpb24oZWFjaGZuLCB0YXNrcywgY2FsbGJhY2spIHtcbiAgICAgICAgY2FsbGJhY2sgPSBjYWxsYmFjayB8fCBmdW5jdGlvbiAoKSB7fTtcbiAgICAgICAgaWYgKF9pc0FycmF5KHRhc2tzKSkge1xuICAgICAgICAgICAgZWFjaGZuLm1hcCh0YXNrcywgZnVuY3Rpb24gKGZuLCBjYWxsYmFjaykge1xuICAgICAgICAgICAgICAgIGlmIChmbikge1xuICAgICAgICAgICAgICAgICAgICBmbihmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoYXJncy5sZW5ndGggPD0gMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3MgPSBhcmdzWzBdO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2suY2FsbChudWxsLCBlcnIsIGFyZ3MpO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LCBjYWxsYmFjayk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB2YXIgcmVzdWx0cyA9IHt9O1xuICAgICAgICAgICAgZWFjaGZuLmVhY2goX2tleXModGFza3MpLCBmdW5jdGlvbiAoaywgY2FsbGJhY2spIHtcbiAgICAgICAgICAgICAgICB0YXNrc1trXShmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBhcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGFyZ3MubGVuZ3RoIDw9IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3MgPSBhcmdzWzBdO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdHNba10gPSBhcmdzO1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSwgZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrKGVyciwgcmVzdWx0cyk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH07XG5cbiAgICBhc3luYy5wYXJhbGxlbCA9IGZ1bmN0aW9uICh0YXNrcywgY2FsbGJhY2spIHtcbiAgICAgICAgX3BhcmFsbGVsKHsgbWFwOiBhc3luYy5tYXAsIGVhY2g6IGFzeW5jLmVhY2ggfSwgdGFza3MsIGNhbGxiYWNrKTtcbiAgICB9O1xuXG4gICAgYXN5bmMucGFyYWxsZWxMaW1pdCA9IGZ1bmN0aW9uKHRhc2tzLCBsaW1pdCwgY2FsbGJhY2spIHtcbiAgICAgICAgX3BhcmFsbGVsKHsgbWFwOiBfbWFwTGltaXQobGltaXQpLCBlYWNoOiBfZWFjaExpbWl0KGxpbWl0KSB9LCB0YXNrcywgY2FsbGJhY2spO1xuICAgIH07XG5cbiAgICBhc3luYy5zZXJpZXMgPSBmdW5jdGlvbiAodGFza3MsIGNhbGxiYWNrKSB7XG4gICAgICAgIGNhbGxiYWNrID0gY2FsbGJhY2sgfHwgZnVuY3Rpb24gKCkge307XG4gICAgICAgIGlmIChfaXNBcnJheSh0YXNrcykpIHtcbiAgICAgICAgICAgIGFzeW5jLm1hcFNlcmllcyh0YXNrcywgZnVuY3Rpb24gKGZuLCBjYWxsYmFjaykge1xuICAgICAgICAgICAgICAgIGlmIChmbikge1xuICAgICAgICAgICAgICAgICAgICBmbihmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoYXJncy5sZW5ndGggPD0gMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3MgPSBhcmdzWzBdO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2suY2FsbChudWxsLCBlcnIsIGFyZ3MpO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LCBjYWxsYmFjayk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB2YXIgcmVzdWx0cyA9IHt9O1xuICAgICAgICAgICAgYXN5bmMuZWFjaFNlcmllcyhfa2V5cyh0YXNrcyksIGZ1bmN0aW9uIChrLCBjYWxsYmFjaykge1xuICAgICAgICAgICAgICAgIHRhc2tzW2tdKGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGFyZ3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsIDEpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoYXJncy5sZW5ndGggPD0gMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgYXJncyA9IGFyZ3NbMF07XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0c1trXSA9IGFyZ3M7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9LCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2soZXJyLCByZXN1bHRzKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIGFzeW5jLml0ZXJhdG9yID0gZnVuY3Rpb24gKHRhc2tzKSB7XG4gICAgICAgIHZhciBtYWtlQ2FsbGJhY2sgPSBmdW5jdGlvbiAoaW5kZXgpIHtcbiAgICAgICAgICAgIHZhciBmbiA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBpZiAodGFza3MubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgIHRhc2tzW2luZGV4XS5hcHBseShudWxsLCBhcmd1bWVudHMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gZm4ubmV4dCgpO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGZuLm5leHQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIChpbmRleCA8IHRhc2tzLmxlbmd0aCAtIDEpID8gbWFrZUNhbGxiYWNrKGluZGV4ICsgMSk6IG51bGw7XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgcmV0dXJuIGZuO1xuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gbWFrZUNhbGxiYWNrKDApO1xuICAgIH07XG5cbiAgICBhc3luYy5hcHBseSA9IGZ1bmN0aW9uIChmbikge1xuICAgICAgICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMSk7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gZm4uYXBwbHkoXG4gICAgICAgICAgICAgICAgbnVsbCwgYXJncy5jb25jYXQoQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKSlcbiAgICAgICAgICAgICk7XG4gICAgICAgIH07XG4gICAgfTtcblxuICAgIHZhciBfY29uY2F0ID0gZnVuY3Rpb24gKGVhY2hmbiwgYXJyLCBmbiwgY2FsbGJhY2spIHtcbiAgICAgICAgdmFyIHIgPSBbXTtcbiAgICAgICAgZWFjaGZuKGFyciwgZnVuY3Rpb24gKHgsIGNiKSB7XG4gICAgICAgICAgICBmbih4LCBmdW5jdGlvbiAoZXJyLCB5KSB7XG4gICAgICAgICAgICAgICAgciA9IHIuY29uY2F0KHkgfHwgW10pO1xuICAgICAgICAgICAgICAgIGNiKGVycik7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSwgZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgY2FsbGJhY2soZXJyLCByKTtcbiAgICAgICAgfSk7XG4gICAgfTtcbiAgICBhc3luYy5jb25jYXQgPSBkb1BhcmFsbGVsKF9jb25jYXQpO1xuICAgIGFzeW5jLmNvbmNhdFNlcmllcyA9IGRvU2VyaWVzKF9jb25jYXQpO1xuXG4gICAgYXN5bmMud2hpbHN0ID0gZnVuY3Rpb24gKHRlc3QsIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICBpZiAodGVzdCgpKSB7XG4gICAgICAgICAgICBpdGVyYXRvcihmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYXN5bmMud2hpbHN0KHRlc3QsIGl0ZXJhdG9yLCBjYWxsYmFjayk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGNhbGxiYWNrKCk7XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgYXN5bmMuZG9XaGlsc3QgPSBmdW5jdGlvbiAoaXRlcmF0b3IsIHRlc3QsIGNhbGxiYWNrKSB7XG4gICAgICAgIGl0ZXJhdG9yKGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHZhciBhcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKTtcbiAgICAgICAgICAgIGlmICh0ZXN0LmFwcGx5KG51bGwsIGFyZ3MpKSB7XG4gICAgICAgICAgICAgICAgYXN5bmMuZG9XaGlsc3QoaXRlcmF0b3IsIHRlc3QsIGNhbGxiYWNrKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH07XG5cbiAgICBhc3luYy51bnRpbCA9IGZ1bmN0aW9uICh0ZXN0LCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgaWYgKCF0ZXN0KCkpIHtcbiAgICAgICAgICAgIGl0ZXJhdG9yKGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBhc3luYy51bnRpbCh0ZXN0LCBpdGVyYXRvciwgY2FsbGJhY2spO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIGFzeW5jLmRvVW50aWwgPSBmdW5jdGlvbiAoaXRlcmF0b3IsIHRlc3QsIGNhbGxiYWNrKSB7XG4gICAgICAgIGl0ZXJhdG9yKGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHZhciBhcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKTtcbiAgICAgICAgICAgIGlmICghdGVzdC5hcHBseShudWxsLCBhcmdzKSkge1xuICAgICAgICAgICAgICAgIGFzeW5jLmRvVW50aWwoaXRlcmF0b3IsIHRlc3QsIGNhbGxiYWNrKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH07XG5cbiAgICBhc3luYy5xdWV1ZSA9IGZ1bmN0aW9uICh3b3JrZXIsIGNvbmN1cnJlbmN5KSB7XG4gICAgICAgIGlmIChjb25jdXJyZW5jeSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBjb25jdXJyZW5jeSA9IDE7XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gX2luc2VydChxLCBkYXRhLCBwb3MsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgaWYgKCFxLnN0YXJ0ZWQpe1xuICAgICAgICAgICAgcS5zdGFydGVkID0gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKCFfaXNBcnJheShkYXRhKSkge1xuICAgICAgICAgICAgICBkYXRhID0gW2RhdGFdO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZihkYXRhLmxlbmd0aCA9PSAwKSB7XG4gICAgICAgICAgICAgLy8gY2FsbCBkcmFpbiBpbW1lZGlhdGVseSBpZiB0aGVyZSBhcmUgbm8gdGFza3NcbiAgICAgICAgICAgICByZXR1cm4gYXN5bmMuc2V0SW1tZWRpYXRlKGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgICBpZiAocS5kcmFpbikge1xuICAgICAgICAgICAgICAgICAgICAgcS5kcmFpbigpO1xuICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIF9lYWNoKGRhdGEsIGZ1bmN0aW9uKHRhc2spIHtcbiAgICAgICAgICAgICAgdmFyIGl0ZW0gPSB7XG4gICAgICAgICAgICAgICAgICBkYXRhOiB0YXNrLFxuICAgICAgICAgICAgICAgICAgY2FsbGJhY2s6IHR5cGVvZiBjYWxsYmFjayA9PT0gJ2Z1bmN0aW9uJyA/IGNhbGxiYWNrIDogbnVsbFxuICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgIGlmIChwb3MpIHtcbiAgICAgICAgICAgICAgICBxLnRhc2tzLnVuc2hpZnQoaXRlbSk7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcS50YXNrcy5wdXNoKGl0ZW0pO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgaWYgKHEuc2F0dXJhdGVkICYmIHEudGFza3MubGVuZ3RoID09PSBxLmNvbmN1cnJlbmN5KSB7XG4gICAgICAgICAgICAgICAgICBxLnNhdHVyYXRlZCgpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGFzeW5jLnNldEltbWVkaWF0ZShxLnByb2Nlc3MpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIHdvcmtlcnMgPSAwO1xuICAgICAgICB2YXIgcSA9IHtcbiAgICAgICAgICAgIHRhc2tzOiBbXSxcbiAgICAgICAgICAgIGNvbmN1cnJlbmN5OiBjb25jdXJyZW5jeSxcbiAgICAgICAgICAgIHNhdHVyYXRlZDogbnVsbCxcbiAgICAgICAgICAgIGVtcHR5OiBudWxsLFxuICAgICAgICAgICAgZHJhaW46IG51bGwsXG4gICAgICAgICAgICBzdGFydGVkOiBmYWxzZSxcbiAgICAgICAgICAgIHBhdXNlZDogZmFsc2UsXG4gICAgICAgICAgICBwdXNoOiBmdW5jdGlvbiAoZGF0YSwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgICAgX2luc2VydChxLCBkYXRhLCBmYWxzZSwgY2FsbGJhY2spO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGtpbGw6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgcS5kcmFpbiA9IG51bGw7XG4gICAgICAgICAgICAgIHEudGFza3MgPSBbXTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB1bnNoaWZ0OiBmdW5jdGlvbiAoZGF0YSwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgICAgX2luc2VydChxLCBkYXRhLCB0cnVlLCBjYWxsYmFjayk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcHJvY2VzczogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGlmICghcS5wYXVzZWQgJiYgd29ya2VycyA8IHEuY29uY3VycmVuY3kgJiYgcS50YXNrcy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHRhc2sgPSBxLnRhc2tzLnNoaWZ0KCk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChxLmVtcHR5ICYmIHEudGFza3MubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBxLmVtcHR5KCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgd29ya2VycyArPSAxO1xuICAgICAgICAgICAgICAgICAgICB2YXIgbmV4dCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHdvcmtlcnMgLT0gMTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0YXNrLmNhbGxiYWNrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFzay5jYWxsYmFjay5hcHBseSh0YXNrLCBhcmd1bWVudHMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHEuZHJhaW4gJiYgcS50YXNrcy5sZW5ndGggKyB3b3JrZXJzID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcS5kcmFpbigpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgcS5wcm9jZXNzKCk7XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIHZhciBjYiA9IG9ubHlfb25jZShuZXh0KTtcbiAgICAgICAgICAgICAgICAgICAgd29ya2VyKHRhc2suZGF0YSwgY2IpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBsZW5ndGg6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcS50YXNrcy5sZW5ndGg7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcnVubmluZzogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB3b3JrZXJzO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGlkbGU6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBxLnRhc2tzLmxlbmd0aCArIHdvcmtlcnMgPT09IDA7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcGF1c2U6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBpZiAocS5wYXVzZWQgPT09IHRydWUpIHsgcmV0dXJuOyB9XG4gICAgICAgICAgICAgICAgcS5wYXVzZWQgPSB0cnVlO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHJlc3VtZTogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGlmIChxLnBhdXNlZCA9PT0gZmFsc2UpIHsgcmV0dXJuOyB9XG4gICAgICAgICAgICAgICAgcS5wYXVzZWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAvLyBOZWVkIHRvIGNhbGwgcS5wcm9jZXNzIG9uY2UgcGVyIGNvbmN1cnJlbnRcbiAgICAgICAgICAgICAgICAvLyB3b3JrZXIgdG8gcHJlc2VydmUgZnVsbCBjb25jdXJyZW5jeSBhZnRlciBwYXVzZVxuICAgICAgICAgICAgICAgIGZvciAodmFyIHcgPSAxOyB3IDw9IHEuY29uY3VycmVuY3k7IHcrKykge1xuICAgICAgICAgICAgICAgICAgICBhc3luYy5zZXRJbW1lZGlhdGUocS5wcm9jZXNzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiBxO1xuICAgIH07XG5cbiAgICBhc3luYy5wcmlvcml0eVF1ZXVlID0gZnVuY3Rpb24gKHdvcmtlciwgY29uY3VycmVuY3kpIHtcblxuICAgICAgICBmdW5jdGlvbiBfY29tcGFyZVRhc2tzKGEsIGIpe1xuICAgICAgICAgIHJldHVybiBhLnByaW9yaXR5IC0gYi5wcmlvcml0eTtcbiAgICAgICAgfTtcblxuICAgICAgICBmdW5jdGlvbiBfYmluYXJ5U2VhcmNoKHNlcXVlbmNlLCBpdGVtLCBjb21wYXJlKSB7XG4gICAgICAgICAgdmFyIGJlZyA9IC0xLFxuICAgICAgICAgICAgICBlbmQgPSBzZXF1ZW5jZS5sZW5ndGggLSAxO1xuICAgICAgICAgIHdoaWxlIChiZWcgPCBlbmQpIHtcbiAgICAgICAgICAgIHZhciBtaWQgPSBiZWcgKyAoKGVuZCAtIGJlZyArIDEpID4+PiAxKTtcbiAgICAgICAgICAgIGlmIChjb21wYXJlKGl0ZW0sIHNlcXVlbmNlW21pZF0pID49IDApIHtcbiAgICAgICAgICAgICAgYmVnID0gbWlkO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgZW5kID0gbWlkIC0gMTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIGJlZztcbiAgICAgICAgfVxuXG4gICAgICAgIGZ1bmN0aW9uIF9pbnNlcnQocSwgZGF0YSwgcHJpb3JpdHksIGNhbGxiYWNrKSB7XG4gICAgICAgICAgaWYgKCFxLnN0YXJ0ZWQpe1xuICAgICAgICAgICAgcS5zdGFydGVkID0gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKCFfaXNBcnJheShkYXRhKSkge1xuICAgICAgICAgICAgICBkYXRhID0gW2RhdGFdO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZihkYXRhLmxlbmd0aCA9PSAwKSB7XG4gICAgICAgICAgICAgLy8gY2FsbCBkcmFpbiBpbW1lZGlhdGVseSBpZiB0aGVyZSBhcmUgbm8gdGFza3NcbiAgICAgICAgICAgICByZXR1cm4gYXN5bmMuc2V0SW1tZWRpYXRlKGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgICBpZiAocS5kcmFpbikge1xuICAgICAgICAgICAgICAgICAgICAgcS5kcmFpbigpO1xuICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIF9lYWNoKGRhdGEsIGZ1bmN0aW9uKHRhc2spIHtcbiAgICAgICAgICAgICAgdmFyIGl0ZW0gPSB7XG4gICAgICAgICAgICAgICAgICBkYXRhOiB0YXNrLFxuICAgICAgICAgICAgICAgICAgcHJpb3JpdHk6IHByaW9yaXR5LFxuICAgICAgICAgICAgICAgICAgY2FsbGJhY2s6IHR5cGVvZiBjYWxsYmFjayA9PT0gJ2Z1bmN0aW9uJyA/IGNhbGxiYWNrIDogbnVsbFxuICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgIHEudGFza3Muc3BsaWNlKF9iaW5hcnlTZWFyY2gocS50YXNrcywgaXRlbSwgX2NvbXBhcmVUYXNrcykgKyAxLCAwLCBpdGVtKTtcblxuICAgICAgICAgICAgICBpZiAocS5zYXR1cmF0ZWQgJiYgcS50YXNrcy5sZW5ndGggPT09IHEuY29uY3VycmVuY3kpIHtcbiAgICAgICAgICAgICAgICAgIHEuc2F0dXJhdGVkKCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgYXN5bmMuc2V0SW1tZWRpYXRlKHEucHJvY2Vzcyk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBTdGFydCB3aXRoIGEgbm9ybWFsIHF1ZXVlXG4gICAgICAgIHZhciBxID0gYXN5bmMucXVldWUod29ya2VyLCBjb25jdXJyZW5jeSk7XG5cbiAgICAgICAgLy8gT3ZlcnJpZGUgcHVzaCB0byBhY2NlcHQgc2Vjb25kIHBhcmFtZXRlciByZXByZXNlbnRpbmcgcHJpb3JpdHlcbiAgICAgICAgcS5wdXNoID0gZnVuY3Rpb24gKGRhdGEsIHByaW9yaXR5LCBjYWxsYmFjaykge1xuICAgICAgICAgIF9pbnNlcnQocSwgZGF0YSwgcHJpb3JpdHksIGNhbGxiYWNrKTtcbiAgICAgICAgfTtcblxuICAgICAgICAvLyBSZW1vdmUgdW5zaGlmdCBmdW5jdGlvblxuICAgICAgICBkZWxldGUgcS51bnNoaWZ0O1xuXG4gICAgICAgIHJldHVybiBxO1xuICAgIH07XG5cbiAgICBhc3luYy5jYXJnbyA9IGZ1bmN0aW9uICh3b3JrZXIsIHBheWxvYWQpIHtcbiAgICAgICAgdmFyIHdvcmtpbmcgICAgID0gZmFsc2UsXG4gICAgICAgICAgICB0YXNrcyAgICAgICA9IFtdO1xuXG4gICAgICAgIHZhciBjYXJnbyA9IHtcbiAgICAgICAgICAgIHRhc2tzOiB0YXNrcyxcbiAgICAgICAgICAgIHBheWxvYWQ6IHBheWxvYWQsXG4gICAgICAgICAgICBzYXR1cmF0ZWQ6IG51bGwsXG4gICAgICAgICAgICBlbXB0eTogbnVsbCxcbiAgICAgICAgICAgIGRyYWluOiBudWxsLFxuICAgICAgICAgICAgZHJhaW5lZDogdHJ1ZSxcbiAgICAgICAgICAgIHB1c2g6IGZ1bmN0aW9uIChkYXRhLCBjYWxsYmFjaykge1xuICAgICAgICAgICAgICAgIGlmICghX2lzQXJyYXkoZGF0YSkpIHtcbiAgICAgICAgICAgICAgICAgICAgZGF0YSA9IFtkYXRhXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgX2VhY2goZGF0YSwgZnVuY3Rpb24odGFzaykge1xuICAgICAgICAgICAgICAgICAgICB0YXNrcy5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGE6IHRhc2ssXG4gICAgICAgICAgICAgICAgICAgICAgICBjYWxsYmFjazogdHlwZW9mIGNhbGxiYWNrID09PSAnZnVuY3Rpb24nID8gY2FsbGJhY2sgOiBudWxsXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICBjYXJnby5kcmFpbmVkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIGlmIChjYXJnby5zYXR1cmF0ZWQgJiYgdGFza3MubGVuZ3RoID09PSBwYXlsb2FkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjYXJnby5zYXR1cmF0ZWQoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGFzeW5jLnNldEltbWVkaWF0ZShjYXJnby5wcm9jZXNzKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBwcm9jZXNzOiBmdW5jdGlvbiBwcm9jZXNzKCkge1xuICAgICAgICAgICAgICAgIGlmICh3b3JraW5nKSByZXR1cm47XG4gICAgICAgICAgICAgICAgaWYgKHRhc2tzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICBpZihjYXJnby5kcmFpbiAmJiAhY2FyZ28uZHJhaW5lZCkgY2FyZ28uZHJhaW4oKTtcbiAgICAgICAgICAgICAgICAgICAgY2FyZ28uZHJhaW5lZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB2YXIgdHMgPSB0eXBlb2YgcGF5bG9hZCA9PT0gJ251bWJlcidcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IHRhc2tzLnNwbGljZSgwLCBwYXlsb2FkKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogdGFza3Muc3BsaWNlKDAsIHRhc2tzLmxlbmd0aCk7XG5cbiAgICAgICAgICAgICAgICB2YXIgZHMgPSBfbWFwKHRzLCBmdW5jdGlvbiAodGFzaykge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGFzay5kYXRhO1xuICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgaWYoY2FyZ28uZW1wdHkpIGNhcmdvLmVtcHR5KCk7XG4gICAgICAgICAgICAgICAgd29ya2luZyA9IHRydWU7XG4gICAgICAgICAgICAgICAgd29ya2VyKGRzLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIHdvcmtpbmcgPSBmYWxzZTtcblxuICAgICAgICAgICAgICAgICAgICB2YXIgYXJncyA9IGFyZ3VtZW50cztcbiAgICAgICAgICAgICAgICAgICAgX2VhY2godHMsIGZ1bmN0aW9uIChkYXRhKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZGF0YS5jYWxsYmFjaykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEuY2FsbGJhY2suYXBwbHkobnVsbCwgYXJncyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgICAgIHByb2Nlc3MoKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBsZW5ndGg6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGFza3MubGVuZ3RoO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHJ1bm5pbmc6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gd29ya2luZztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIGNhcmdvO1xuICAgIH07XG5cbiAgICB2YXIgX2NvbnNvbGVfZm4gPSBmdW5jdGlvbiAobmFtZSkge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKGZuKSB7XG4gICAgICAgICAgICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMSk7XG4gICAgICAgICAgICBmbi5hcHBseShudWxsLCBhcmdzLmNvbmNhdChbZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgICAgIHZhciBhcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKTtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGNvbnNvbGUgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb25zb2xlLmVycm9yKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihlcnIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKGNvbnNvbGVbbmFtZV0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIF9lYWNoKGFyZ3MsIGZ1bmN0aW9uICh4KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZVtuYW1lXSh4KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfV0pKTtcbiAgICAgICAgfTtcbiAgICB9O1xuICAgIGFzeW5jLmxvZyA9IF9jb25zb2xlX2ZuKCdsb2cnKTtcbiAgICBhc3luYy5kaXIgPSBfY29uc29sZV9mbignZGlyJyk7XG4gICAgLyphc3luYy5pbmZvID0gX2NvbnNvbGVfZm4oJ2luZm8nKTtcbiAgICBhc3luYy53YXJuID0gX2NvbnNvbGVfZm4oJ3dhcm4nKTtcbiAgICBhc3luYy5lcnJvciA9IF9jb25zb2xlX2ZuKCdlcnJvcicpOyovXG5cbiAgICBhc3luYy5tZW1vaXplID0gZnVuY3Rpb24gKGZuLCBoYXNoZXIpIHtcbiAgICAgICAgdmFyIG1lbW8gPSB7fTtcbiAgICAgICAgdmFyIHF1ZXVlcyA9IHt9O1xuICAgICAgICBoYXNoZXIgPSBoYXNoZXIgfHwgZnVuY3Rpb24gKHgpIHtcbiAgICAgICAgICAgIHJldHVybiB4O1xuICAgICAgICB9O1xuICAgICAgICB2YXIgbWVtb2l6ZWQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7XG4gICAgICAgICAgICB2YXIgY2FsbGJhY2sgPSBhcmdzLnBvcCgpO1xuICAgICAgICAgICAgdmFyIGtleSA9IGhhc2hlci5hcHBseShudWxsLCBhcmdzKTtcbiAgICAgICAgICAgIGlmIChrZXkgaW4gbWVtbykge1xuICAgICAgICAgICAgICAgIGFzeW5jLm5leHRUaWNrKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2suYXBwbHkobnVsbCwgbWVtb1trZXldKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGtleSBpbiBxdWV1ZXMpIHtcbiAgICAgICAgICAgICAgICBxdWV1ZXNba2V5XS5wdXNoKGNhbGxiYWNrKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHF1ZXVlc1trZXldID0gW2NhbGxiYWNrXTtcbiAgICAgICAgICAgICAgICBmbi5hcHBseShudWxsLCBhcmdzLmNvbmNhdChbZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICBtZW1vW2tleV0gPSBhcmd1bWVudHM7XG4gICAgICAgICAgICAgICAgICAgIHZhciBxID0gcXVldWVzW2tleV07XG4gICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBxdWV1ZXNba2V5XTtcbiAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDAsIGwgPSBxLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICAgIHFbaV0uYXBwbHkobnVsbCwgYXJndW1lbnRzKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1dKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIG1lbW9pemVkLm1lbW8gPSBtZW1vO1xuICAgICAgICBtZW1vaXplZC51bm1lbW9pemVkID0gZm47XG4gICAgICAgIHJldHVybiBtZW1vaXplZDtcbiAgICB9O1xuXG4gICAgYXN5bmMudW5tZW1vaXplID0gZnVuY3Rpb24gKGZuKSB7XG4gICAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gKGZuLnVubWVtb2l6ZWQgfHwgZm4pLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7XG4gICAgICB9O1xuICAgIH07XG5cbiAgICBhc3luYy50aW1lcyA9IGZ1bmN0aW9uIChjb3VudCwgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgIHZhciBjb3VudGVyID0gW107XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY291bnQ7IGkrKykge1xuICAgICAgICAgICAgY291bnRlci5wdXNoKGkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBhc3luYy5tYXAoY291bnRlciwgaXRlcmF0b3IsIGNhbGxiYWNrKTtcbiAgICB9O1xuXG4gICAgYXN5bmMudGltZXNTZXJpZXMgPSBmdW5jdGlvbiAoY291bnQsIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICB2YXIgY291bnRlciA9IFtdO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNvdW50OyBpKyspIHtcbiAgICAgICAgICAgIGNvdW50ZXIucHVzaChpKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYXN5bmMubWFwU2VyaWVzKGNvdW50ZXIsIGl0ZXJhdG9yLCBjYWxsYmFjayk7XG4gICAgfTtcblxuICAgIGFzeW5jLnNlcSA9IGZ1bmN0aW9uICgvKiBmdW5jdGlvbnMuLi4gKi8pIHtcbiAgICAgICAgdmFyIGZucyA9IGFyZ3VtZW50cztcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHZhciB0aGF0ID0gdGhpcztcbiAgICAgICAgICAgIHZhciBhcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKTtcbiAgICAgICAgICAgIHZhciBjYWxsYmFjayA9IGFyZ3MucG9wKCk7XG4gICAgICAgICAgICBhc3luYy5yZWR1Y2UoZm5zLCBhcmdzLCBmdW5jdGlvbiAobmV3YXJncywgZm4sIGNiKSB7XG4gICAgICAgICAgICAgICAgZm4uYXBwbHkodGhhdCwgbmV3YXJncy5jb25jYXQoW2Z1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGVyciA9IGFyZ3VtZW50c1swXTtcbiAgICAgICAgICAgICAgICAgICAgdmFyIG5leHRhcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKTtcbiAgICAgICAgICAgICAgICAgICAgY2IoZXJyLCBuZXh0YXJncyk7XG4gICAgICAgICAgICAgICAgfV0pKVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGZ1bmN0aW9uIChlcnIsIHJlc3VsdHMpIHtcbiAgICAgICAgICAgICAgICBjYWxsYmFjay5hcHBseSh0aGF0LCBbZXJyXS5jb25jYXQocmVzdWx0cykpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH07XG4gICAgfTtcblxuICAgIGFzeW5jLmNvbXBvc2UgPSBmdW5jdGlvbiAoLyogZnVuY3Rpb25zLi4uICovKSB7XG4gICAgICByZXR1cm4gYXN5bmMuc2VxLmFwcGx5KG51bGwsIEFycmF5LnByb3RvdHlwZS5yZXZlcnNlLmNhbGwoYXJndW1lbnRzKSk7XG4gICAgfTtcblxuICAgIHZhciBfYXBwbHlFYWNoID0gZnVuY3Rpb24gKGVhY2hmbiwgZm5zIC8qYXJncy4uLiovKSB7XG4gICAgICAgIHZhciBnbyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHZhciB0aGF0ID0gdGhpcztcbiAgICAgICAgICAgIHZhciBhcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKTtcbiAgICAgICAgICAgIHZhciBjYWxsYmFjayA9IGFyZ3MucG9wKCk7XG4gICAgICAgICAgICByZXR1cm4gZWFjaGZuKGZucywgZnVuY3Rpb24gKGZuLCBjYikge1xuICAgICAgICAgICAgICAgIGZuLmFwcGx5KHRoYXQsIGFyZ3MuY29uY2F0KFtjYl0pKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjYWxsYmFjayk7XG4gICAgICAgIH07XG4gICAgICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID4gMikge1xuICAgICAgICAgICAgdmFyIGFyZ3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsIDIpO1xuICAgICAgICAgICAgcmV0dXJuIGdvLmFwcGx5KHRoaXMsIGFyZ3MpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIGdvO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBhc3luYy5hcHBseUVhY2ggPSBkb1BhcmFsbGVsKF9hcHBseUVhY2gpO1xuICAgIGFzeW5jLmFwcGx5RWFjaFNlcmllcyA9IGRvU2VyaWVzKF9hcHBseUVhY2gpO1xuXG4gICAgYXN5bmMuZm9yZXZlciA9IGZ1bmN0aW9uIChmbiwgY2FsbGJhY2spIHtcbiAgICAgICAgZnVuY3Rpb24gbmV4dChlcnIpIHtcbiAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICBpZiAoY2FsbGJhY2spIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRocm93IGVycjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZuKG5leHQpO1xuICAgICAgICB9XG4gICAgICAgIG5leHQoKTtcbiAgICB9O1xuXG4gICAgLy8gTm9kZS5qc1xuICAgIGlmICh0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJyAmJiBtb2R1bGUuZXhwb3J0cykge1xuICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IGFzeW5jO1xuICAgIH1cbiAgICAvLyBBTUQgLyBSZXF1aXJlSlNcbiAgICBlbHNlIGlmICh0eXBlb2YgZGVmaW5lICE9PSAndW5kZWZpbmVkJyAmJiBkZWZpbmUuYW1kKSB7XG4gICAgICAgIGRlZmluZShbXSwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIGFzeW5jO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgLy8gaW5jbHVkZWQgZGlyZWN0bHkgdmlhIDxzY3JpcHQ+IHRhZ1xuICAgIGVsc2Uge1xuICAgICAgICByb290LmFzeW5jID0gYXN5bmM7XG4gICAgfVxuXG59KCkpO1xuIiwidmFyIGFzeW5jICAgICAgID0gcmVxdWlyZSgnYXN5bmMnKSxcbiAgICB1cmxQYXJzZXIgICA9IHJlcXVpcmUoJ3VybCcpLFxuICAgIFJlc291cmNlICAgID0gcmVxdWlyZSgnLi9SZXNvdXJjZScpLFxuICAgIEV2ZW50RW1pdHRlciA9IHJlcXVpcmUoJ2V2ZW50ZW1pdHRlcjMnKTtcblxuLyoqXG4gKiBNYW5hZ2VzIHRoZSBzdGF0ZSBhbmQgbG9hZGluZyBvZiBtdWx0aXBsZSByZXNvdXJjZXMgdG8gbG9hZC5cbiAqXG4gKiBAY2xhc3NcbiAqIEBwYXJhbSBbYmFzZVVybD0nJ10ge3N0cmluZ30gVGhlIGJhc2UgdXJsIGZvciBhbGwgcmVzb3VyY2VzIGxvYWRlZCBieSB0aGlzIGxvYWRlci5cbiAqIEBwYXJhbSBbY29uY3VycmVuY3k9MTBdIHtudW1iZXJ9IFRoZSBudW1iZXIgb2YgcmVzb3VyY2VzIHRvIGxvYWQgY29uY3VycmVudGx5LlxuICovXG5mdW5jdGlvbiBMb2FkZXIoYmFzZVVybCwgY29uY3VycmVuY3kpIHtcbiAgICBFdmVudEVtaXR0ZXIuY2FsbCh0aGlzKTtcblxuICAgIGNvbmN1cnJlbmN5ID0gY29uY3VycmVuY3kgfHwgMTA7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYmFzZSB1cmwgZm9yIGFsbCByZXNvdXJjZXMgbG9hZGVkIGJ5IHRoaXMgbG9hZGVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7c3RyaW5nfVxuICAgICAqL1xuICAgIHRoaXMuYmFzZVVybCA9IGJhc2VVcmwgfHwgJyc7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgcHJvZ3Jlc3MgcGVyY2VudCBvZiB0aGUgbG9hZGVyIGdvaW5nIHRocm91Z2ggdGhlIHF1ZXVlLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMucHJvZ3Jlc3MgPSAwO1xuXG4gICAgLyoqXG4gICAgICogTG9hZGluZyBzdGF0ZSBvZiB0aGUgbG9hZGVyLCB0cnVlIGlmIGl0IGlzIGN1cnJlbnRseSBsb2FkaW5nIHJlc291cmNlcy5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICovXG4gICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgcGVyY2VudGFnZSBvZiB0b3RhbCBwcm9ncmVzcyB0aGF0IGEgc2luZ2xlIHJlc291cmNlIHJlcHJlc2VudHMuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy5fcHJvZ3Jlc3NDaHVuayA9IDA7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgbWlkZGxld2FyZSB0byBydW4gYmVmb3JlIGxvYWRpbmcgZWFjaCByZXNvdXJjZS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Z1bmN0aW9uW119XG4gICAgICovXG4gICAgdGhpcy5fYmVmb3JlTWlkZGxld2FyZSA9IFtdO1xuXG4gICAgLyoqXG4gICAgICogVGhlIG1pZGRsZXdhcmUgdG8gcnVuIGFmdGVyIGxvYWRpbmcgZWFjaCByZXNvdXJjZS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Z1bmN0aW9uW119XG4gICAgICovXG4gICAgdGhpcy5fYWZ0ZXJNaWRkbGV3YXJlID0gW107XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYF9sb2FkUmVzb3VyY2VgIGZ1bmN0aW9uIGJvdW5kIHdpdGggdGhpcyBvYmplY3QgY29udGV4dC5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQG1lbWJlciB7ZnVuY3Rpb259XG4gICAgICovXG4gICAgdGhpcy5fYm91bmRMb2FkUmVzb3VyY2UgPSB0aGlzLl9sb2FkUmVzb3VyY2UuYmluZCh0aGlzKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBgX29uTG9hZGAgZnVuY3Rpb24gYm91bmQgd2l0aCB0aGlzIG9iamVjdCBjb250ZXh0LlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAbWVtYmVyIHtmdW5jdGlvbn1cbiAgICAgKi9cbiAgICB0aGlzLl9ib3VuZE9uTG9hZCA9IHRoaXMuX29uTG9hZC5iaW5kKHRoaXMpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHJlc291cmNlIGJ1ZmZlciB0aGF0IGZpbGxzIHVudGlsIGBsb2FkYCBpcyBjYWxsZWQgdG8gc3RhcnQgbG9hZGluZyByZXNvdXJjZXMuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBtZW1iZXIge1Jlc291cmNlW119XG4gICAgICovXG4gICAgdGhpcy5fYnVmZmVyID0gW107XG5cbiAgICAvKipcbiAgICAgKiBVc2VkIHRvIHRyYWNrIGxvYWQgY29tcGxldGlvbi5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMuX251bVRvTG9hZCA9IDA7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgcmVzb3VyY2VzIHdhaXRpbmcgdG8gYmUgbG9hZGVkLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAbWVtYmVyIHtSZXNvdXJjZVtdfVxuICAgICAqL1xuICAgIHRoaXMuX3F1ZXVlID0gYXN5bmMucXVldWUodGhpcy5fYm91bmRMb2FkUmVzb3VyY2UsIGNvbmN1cnJlbmN5KTtcblxuICAgIC8qKlxuICAgICAqIEFsbCB0aGUgcmVzb3VyY2VzIGZvciB0aGlzIGxvYWRlciBrZXllZCBieSBuYW1lLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7b2JqZWN0PHN0cmluZywgUmVzb3VyY2U+fVxuICAgICAqL1xuICAgIHRoaXMucmVzb3VyY2VzID0ge307XG5cbiAgICAvKipcbiAgICAgKiBFbWl0dGVkIG9uY2UgcGVyIGxvYWRlZCBvciBlcnJvcmVkIHJlc291cmNlLlxuICAgICAqXG4gICAgICogQGV2ZW50IHByb2dyZXNzXG4gICAgICogQG1lbWJlcm9mIExvYWRlciNcbiAgICAgKi9cblxuICAgIC8qKlxuICAgICAqIEVtaXR0ZWQgb25jZSBwZXIgZXJyb3JlZCByZXNvdXJjZS5cbiAgICAgKlxuICAgICAqIEBldmVudCBlcnJvclxuICAgICAqIEBtZW1iZXJvZiBMb2FkZXIjXG4gICAgICovXG5cbiAgICAvKipcbiAgICAgKiBFbWl0dGVkIG9uY2UgcGVyIGxvYWRlZCByZXNvdXJjZS5cbiAgICAgKlxuICAgICAqIEBldmVudCBsb2FkXG4gICAgICogQG1lbWJlcm9mIExvYWRlciNcbiAgICAgKi9cblxuICAgIC8qKlxuICAgICAqIEVtaXR0ZWQgd2hlbiB0aGUgbG9hZGVyIGJlZ2lucyB0byBwcm9jZXNzIHRoZSBxdWV1ZS5cbiAgICAgKlxuICAgICAqIEBldmVudCBzdGFydFxuICAgICAqIEBtZW1iZXJvZiBMb2FkZXIjXG4gICAgICovXG5cbiAgICAvKipcbiAgICAgKiBFbWl0dGVkIHdoZW4gdGhlIHF1ZXVlZCByZXNvdXJjZXMgYWxsIGxvYWQuXG4gICAgICpcbiAgICAgKiBAZXZlbnQgY29tcGxldGVcbiAgICAgKiBAbWVtYmVyb2YgTG9hZGVyI1xuICAgICAqL1xufVxuXG5Mb2FkZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShFdmVudEVtaXR0ZXIucHJvdG90eXBlKTtcbkxvYWRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBMb2FkZXI7XG5tb2R1bGUuZXhwb3J0cyA9IExvYWRlcjtcblxuLyoqXG4gKiBBZGRzIGEgcmVzb3VyY2UgKG9yIG11bHRpcGxlIHJlc291cmNlcykgdG8gdGhlIGxvYWRlciBxdWV1ZS5cbiAqXG4gKiBUaGlzIGZ1bmN0aW9uIGNhbiB0YWtlIGEgd2lkZSB2YXJpZXR5IG9mIGRpZmZlcmVudCBwYXJhbWV0ZXJzLiBUaGUgb25seSB0aGluZyB0aGF0IGlzIGFsd2F5c1xuICogcmVxdWlyZWQgdGhlIHVybCB0byBsb2FkLiBBbGwgdGhlIGZvbGxvd2luZyB3aWxsIHdvcms6XG4gKlxuICogYGBganNcbiAqIGxvYWRlclxuICogICAgIC8vIG5vcm1hbCBwYXJhbSBzeW50YXhcbiAqICAgICAuYWRkKCdrZXknLCAnaHR0cDovLy4uLicsIGZ1bmN0aW9uICgpIHt9KVxuICogICAgIC5hZGQoJ2h0dHA6Ly8uLi4nLCBmdW5jdGlvbiAoKSB7fSlcbiAqICAgICAuYWRkKCdodHRwOi8vLi4uJylcbiAqXG4gKiAgICAgLy8gb2JqZWN0IHN5bnRheFxuICogICAgIC5hZGQoe1xuICogICAgICAgICBuYW1lOiAna2V5MicsXG4gKiAgICAgICAgIHVybDogJ2h0dHA6Ly8uLi4nXG4gKiAgICAgfSwgZnVuY3Rpb24gKCkge30pXG4gKiAgICAgLmFkZCh7XG4gKiAgICAgICAgIHVybDogJ2h0dHA6Ly8uLi4nXG4gKiAgICAgfSwgZnVuY3Rpb24gKCkge30pXG4gKiAgICAgLmFkZCh7XG4gKiAgICAgICAgIG5hbWU6ICdrZXkzJyxcbiAqICAgICAgICAgdXJsOiAnaHR0cDovLy4uLidcbiAqICAgICAgICAgb25Db21wbGV0ZTogZnVuY3Rpb24gKCkge31cbiAqICAgICB9KVxuICogICAgIC5hZGQoe1xuICogICAgICAgICB1cmw6ICdodHRwczovLy4uLicsXG4gKiAgICAgICAgIG9uQ29tcGxldGU6IGZ1bmN0aW9uICgpIHt9LFxuICogICAgICAgICBjcm9zc09yaWdpbjogdHJ1ZVxuICogICAgIH0pXG4gKlxuICogICAgIC8vIHlvdSBjYW4gYWxzbyBwYXNzIGFuIGFycmF5IG9mIG9iamVjdHMgb3IgdXJscyBvciBib3RoXG4gKiAgICAgLmFkZChbXG4gKiAgICAgICAgIHsgbmFtZTogJ2tleTQnLCB1cmw6ICdodHRwOi8vLi4uJywgb25Db21wbGV0ZTogZnVuY3Rpb24gKCkge30gfSxcbiAqICAgICAgICAgeyB1cmw6ICdodHRwOi8vLi4uJywgb25Db21wbGV0ZTogZnVuY3Rpb24gKCkge30gfSxcbiAqICAgICAgICAgJ2h0dHA6Ly8uLi4nXG4gKiAgICAgXSk7XG4gKiBgYGBcbiAqXG4gKiBAYWxpYXMgZW5xdWV1ZVxuICogQHBhcmFtIFtuYW1lXSB7c3RyaW5nfSBUaGUgbmFtZSBvZiB0aGUgcmVzb3VyY2UgdG8gbG9hZCwgaWYgbm90IHBhc3NlZCB0aGUgdXJsIGlzIHVzZWQuXG4gKiBAcGFyYW0gdXJsIHtzdHJpbmd9IFRoZSB1cmwgZm9yIHRoaXMgcmVzb3VyY2UsIHJlbGF0aXZlIHRvIHRoZSBiYXNlVXJsIG9mIHRoaXMgbG9hZGVyLlxuICogQHBhcmFtIFtvcHRpb25zXSB7b2JqZWN0fSBUaGUgb3B0aW9ucyBmb3IgdGhlIGxvYWQuXG4gKiBAcGFyYW0gW29wdGlvbnMuY3Jvc3NPcmlnaW5dIHtib29sZWFufSBJcyB0aGlzIHJlcXVlc3QgY3Jvc3Mtb3JpZ2luPyBEZWZhdWx0IGlzIHRvIGRldGVybWluZSBhdXRvbWF0aWNhbGx5LlxuICogQHBhcmFtIFtvcHRpb25zLmxvYWRUeXBlPVJlc291cmNlLkxPQURfVFlQRS5YSFJdIHtSZXNvdXJjZS5YSFJfTE9BRF9UWVBFfSBIb3cgc2hvdWxkIHRoaXMgcmVzb3VyY2UgYmUgbG9hZGVkP1xuICogQHBhcmFtIFtvcHRpb25zLnhoclR5cGU9UmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuREVGQVVMVF0ge1Jlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFfSBIb3cgc2hvdWxkIHRoZSBkYXRhIGJlaW5nXG4gKiAgICAgIGxvYWRlZCBiZSBpbnRlcnByZXRlZCB3aGVuIHVzaW5nIFhIUj9cbiAqIEBwYXJhbSBbY2FsbGJhY2tdIHtmdW5jdGlvbn0gRnVuY3Rpb24gdG8gY2FsbCB3aGVuIHRoaXMgc3BlY2lmaWMgcmVzb3VyY2UgY29tcGxldGVzIGxvYWRpbmcuXG4gKiBAcmV0dXJuIHtMb2FkZXJ9XG4gKi9cbkxvYWRlci5wcm90b3R5cGUuYWRkID0gTG9hZGVyLnByb3RvdHlwZS5lbnF1ZXVlID0gZnVuY3Rpb24gKG5hbWUsIHVybCwgb3B0aW9ucywgY2IpIHtcbiAgICAvLyBzcGVjaWFsIGNhc2Ugb2YgYW4gYXJyYXkgb2Ygb2JqZWN0cyBvciB1cmxzXG4gICAgaWYgKEFycmF5LmlzQXJyYXkobmFtZSkpIHtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBuYW1lLmxlbmd0aDsgKytpKSB7XG4gICAgICAgICAgICB0aGlzLmFkZChuYW1lW2ldKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIC8vIGlmIGFuIG9iamVjdCBpcyBwYXNzZWQgaW5zdGVhZCBvZiBwYXJhbXNcbiAgICBpZiAodHlwZW9mIG5hbWUgPT09ICdvYmplY3QnKSB7XG4gICAgICAgIGNiID0gdXJsIHx8IG5hbWUuY2FsbGJhY2sgfHwgbmFtZS5vbkNvbXBsZXRlO1xuICAgICAgICBvcHRpb25zID0gbmFtZTtcbiAgICAgICAgdXJsID0gbmFtZS51cmw7XG4gICAgICAgIG5hbWUgPSBuYW1lLm5hbWUgfHwgbmFtZS5rZXkgfHwgbmFtZS51cmw7XG4gICAgfVxuXG4gICAgLy8gY2FzZSB3aGVyZSBubyBuYW1lIGlzIHBhc3NlZCBzaGlmdCBhbGwgYXJncyBvdmVyIGJ5IG9uZS5cbiAgICBpZiAodHlwZW9mIHVybCAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgY2IgPSBvcHRpb25zO1xuICAgICAgICBvcHRpb25zID0gdXJsO1xuICAgICAgICB1cmwgPSBuYW1lO1xuICAgIH1cblxuICAgIC8vIG5vdyB0aGF0IHdlIHNoaWZ0ZWQgbWFrZSBzdXJlIHdlIGhhdmUgYSBwcm9wZXIgdXJsLlxuICAgIGlmICh0eXBlb2YgdXJsICE9PSAnc3RyaW5nJykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ05vIHVybCBwYXNzZWQgdG8gYWRkIHJlc291cmNlIHRvIGxvYWRlci4nKTtcbiAgICB9XG5cbiAgICAvLyBvcHRpb25zIGFyZSBvcHRpb25hbCBzbyBwZW9wbGUgbWlnaHQgcGFzcyBhIGZ1bmN0aW9uIGFuZCBubyBvcHRpb25zXG4gICAgaWYgKHR5cGVvZiBvcHRpb25zID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIGNiID0gb3B0aW9ucztcbiAgICAgICAgb3B0aW9ucyA9IG51bGw7XG4gICAgfVxuXG4gICAgLy8gY2hlY2sgaWYgcmVzb3VyY2UgYWxyZWFkeSBleGlzdHMuXG4gICAgaWYgKHRoaXMucmVzb3VyY2VzW25hbWVdKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignUmVzb3VyY2Ugd2l0aCBuYW1lIFwiJyArIG5hbWUgKyAnXCIgYWxyZWFkeSBleGlzdHMuJyk7XG4gICAgfVxuXG4gICAgLy8gYWRkIGJhc2UgdXJsIGlmIHRoaXMgaXNuJ3QgYW4gYWJzb2x1dGUgdXJsXG4gICAgdXJsID0gdGhpcy5faGFuZGxlQmFzZVVybCh1cmwpO1xuXG4gICAgLy8gY3JlYXRlIHRoZSBzdG9yZSB0aGUgcmVzb3VyY2VcbiAgICB0aGlzLnJlc291cmNlc1tuYW1lXSA9IG5ldyBSZXNvdXJjZShuYW1lLCB1cmwsIG9wdGlvbnMpO1xuXG4gICAgaWYgKHR5cGVvZiBjYiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB0aGlzLnJlc291cmNlc1tuYW1lXS5vbmNlKCdhZnRlck1pZGRsZXdhcmUnLCBjYik7XG4gICAgfVxuXG4gICAgdGhpcy5fbnVtVG9Mb2FkKys7XG5cbiAgICAvLyBpZiBhbHJlYWR5IGxvYWRpbmcgYWRkIGl0IHRvIHRoZSB3b3JrZXIgcXVldWVcbiAgICBpZiAodGhpcy5fcXVldWUuc3RhcnRlZCkge1xuICAgICAgICB0aGlzLl9xdWV1ZS5wdXNoKHRoaXMucmVzb3VyY2VzW25hbWVdKTtcbiAgICAgICAgdGhpcy5fcHJvZ3Jlc3NDaHVuayA9ICgxMDAgLSB0aGlzLnByb2dyZXNzKSAvICh0aGlzLl9xdWV1ZS5sZW5ndGgoKSArIHRoaXMuX3F1ZXVlLnJ1bm5pbmcoKSk7XG4gICAgfVxuICAgIC8vIG90aGVyd2lzZSBidWZmZXIgaXQgdG8gYmUgYWRkZWQgdG8gdGhlIHF1ZXVlIGxhdGVyXG4gICAgZWxzZSB7XG4gICAgICAgIHRoaXMuX2J1ZmZlci5wdXNoKHRoaXMucmVzb3VyY2VzW25hbWVdKTtcbiAgICAgICAgdGhpcy5fcHJvZ3Jlc3NDaHVuayA9IDEwMCAvIHRoaXMuX2J1ZmZlci5sZW5ndGg7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG5Mb2FkZXIucHJvdG90eXBlLl9oYW5kbGVCYXNlVXJsID0gZnVuY3Rpb24gKHVybCkge1xuICAgIHZhciBwYXJzZWRVcmwgPSB1cmxQYXJzZXIucGFyc2UodXJsKTtcblxuICAgIC8vIGFic29sdXRlIHVybCwganVzdCB1c2UgaXQgYXMgaXMuXG4gICAgaWYgKHBhcnNlZFVybC5wcm90b2NvbCB8fCBwYXJzZWRVcmwucGF0aG5hbWUuaW5kZXhPZignLy8nKSA9PT0gMCkge1xuICAgICAgICByZXR1cm4gdXJsO1xuICAgIH1cblxuICAgIC8vIGlmIGJhc2VVcmwgZG9lc24ndCBlbmQgaW4gc2xhc2ggYW5kIHVybCBkb2Vzbid0IHN0YXJ0IHdpdGggc2xhc2gsIHRoZW4gYWRkIGEgc2xhc2ggaW5iZXR3ZWVuXG4gICAgaWYgKFxuICAgICAgICB0aGlzLmJhc2VVcmwubGVuZ3RoICYmXG4gICAgICAgIHRoaXMuYmFzZVVybC5sYXN0SW5kZXhPZignLycpICE9PSB0aGlzLmJhc2VVcmwubGVuZ3RoIC0gMSAmJlxuICAgICAgICB1cmwuY2hhckF0KDApICE9PSAnLydcbiAgICApIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYmFzZVVybCArICcvJyArIHVybDtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHJldHVybiB0aGlzLmJhc2VVcmwgKyB1cmw7XG4gICAgfVxufTtcblxuXG4vKipcbiAqIFNldHMgdXAgYSBtaWRkbGV3YXJlIGZ1bmN0aW9uIHRoYXQgd2lsbCBydW4gKmJlZm9yZSogdGhlXG4gKiByZXNvdXJjZSBpcyBsb2FkZWQuXG4gKlxuICogQGFsaWFzIHByZVxuICogQHBhcmFtIG1pZGRsZXdhcmUge2Z1bmN0aW9ufSBUaGUgbWlkZGxld2FyZSBmdW5jdGlvbiB0byByZWdpc3Rlci5cbiAqIEByZXR1cm4ge0xvYWRlcn1cbiAqL1xuTG9hZGVyLnByb3RvdHlwZS5iZWZvcmUgPSBMb2FkZXIucHJvdG90eXBlLnByZSA9IGZ1bmN0aW9uIChmbikge1xuICAgIHRoaXMuX2JlZm9yZU1pZGRsZXdhcmUucHVzaChmbik7XG5cbiAgICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogU2V0cyB1cCBhIG1pZGRsZXdhcmUgZnVuY3Rpb24gdGhhdCB3aWxsIHJ1biAqYWZ0ZXIqIHRoZVxuICogcmVzb3VyY2UgaXMgbG9hZGVkLlxuICpcbiAqIEBhbGlhcyB1c2VcbiAqIEBwYXJhbSBtaWRkbGV3YXJlIHtmdW5jdGlvbn0gVGhlIG1pZGRsZXdhcmUgZnVuY3Rpb24gdG8gcmVnaXN0ZXIuXG4gKiBAcmV0dXJuIHtMb2FkZXJ9XG4gKi9cbkxvYWRlci5wcm90b3R5cGUuYWZ0ZXIgPSBMb2FkZXIucHJvdG90eXBlLnVzZSA9IGZ1bmN0aW9uIChmbikge1xuICAgIHRoaXMuX2FmdGVyTWlkZGxld2FyZS5wdXNoKGZuKTtcblxuICAgIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBSZXNldHMgdGhlIHF1ZXVlIG9mIHRoZSBsb2FkZXIgdG8gcHJlcGFyZSBmb3IgYSBuZXcgbG9hZC5cbiAqXG4gKiBAcmV0dXJuIHtMb2FkZXJ9XG4gKi9cbkxvYWRlci5wcm90b3R5cGUucmVzZXQgPSBmdW5jdGlvbiAoKSB7XG4gICAgLy8gdGhpcy5iYXNlVXJsID0gYmFzZVVybCB8fCAnJztcblxuICAgIHRoaXMucHJvZ3Jlc3MgPSAwO1xuXG4gICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XG5cbiAgICB0aGlzLl9wcm9ncmVzc0NodW5rID0gMDtcblxuICAgIC8vIHRoaXMuX2JlZm9yZU1pZGRsZXdhcmUubGVuZ3RoID0gMDtcbiAgICAvLyB0aGlzLl9hZnRlck1pZGRsZXdhcmUubGVuZ3RoID0gMDtcblxuICAgIHRoaXMuX2J1ZmZlci5sZW5ndGggPSAwO1xuXG4gICAgdGhpcy5fbnVtVG9Mb2FkID0gMDtcblxuICAgIHRoaXMuX3F1ZXVlLmtpbGwoKTtcbiAgICB0aGlzLl9xdWV1ZS5zdGFydGVkID0gZmFsc2U7XG5cbiAgICB0aGlzLnJlc291cmNlcyA9IHt9O1xufTtcblxuLyoqXG4gKiBTdGFydHMgbG9hZGluZyB0aGUgcXVldWVkIHJlc291cmNlcy5cbiAqXG4gKiBAZmlyZXMgc3RhcnRcbiAqIEBwYXJhbSBbY2FsbGJhY2tdIHtmdW5jdGlvbn0gT3B0aW9uYWwgY2FsbGJhY2sgdGhhdCB3aWxsIGJlIGJvdW5kIHRvIHRoZSBgY29tcGxldGVgIGV2ZW50LlxuICogQHJldHVybiB7TG9hZGVyfVxuICovXG5Mb2FkZXIucHJvdG90eXBlLmxvYWQgPSBmdW5jdGlvbiAoY2IpIHtcbiAgICAvLyByZWdpc3RlciBjb21wbGV0ZSBjYWxsYmFjayBpZiB0aGV5IHBhc3Mgb25lXG4gICAgaWYgKHR5cGVvZiBjYiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB0aGlzLm9uY2UoJ2NvbXBsZXRlJywgY2IpO1xuICAgIH1cblxuICAgIC8vIGlmIHRoZSBxdWV1ZSBoYXMgYWxyZWFkeSBzdGFydGVkIHdlIGFyZSBkb25lIGhlcmVcbiAgICBpZiAodGhpcy5fcXVldWUuc3RhcnRlZCkge1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICAvLyBub3RpZnkgb2Ygc3RhcnRcbiAgICB0aGlzLmVtaXQoJ3N0YXJ0JywgdGhpcyk7XG5cbiAgICAvLyBzdGFydCB0aGUgaW50ZXJuYWwgcXVldWVcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuX2J1ZmZlci5sZW5ndGg7ICsraSkge1xuICAgICAgICB0aGlzLl9xdWV1ZS5wdXNoKHRoaXMuX2J1ZmZlcltpXSk7XG4gICAgfVxuXG4gICAgLy8gZW1wdHkgdGhlIGJ1ZmZlclxuICAgIHRoaXMuX2J1ZmZlci5sZW5ndGggPSAwO1xuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIExvYWRzIGEgc2luZ2xlIHJlc291cmNlLlxuICpcbiAqIEBmaXJlcyBwcm9ncmVzc1xuICogQHByaXZhdGVcbiAqL1xuTG9hZGVyLnByb3RvdHlwZS5fbG9hZFJlc291cmNlID0gZnVuY3Rpb24gKHJlc291cmNlLCBkZXF1ZXVlKSB7XG4gICAgdmFyIHNlbGYgPSB0aGlzO1xuXG4gICAgcmVzb3VyY2UuX2RlcXVldWUgPSBkZXF1ZXVlO1xuXG4gICAgdGhpcy5fcnVuTWlkZGxld2FyZShyZXNvdXJjZSwgdGhpcy5fYmVmb3JlTWlkZGxld2FyZSwgZnVuY3Rpb24gKCkge1xuICAgICAgICAvLyByZXNvdXJjZS5vbigncHJvZ3Jlc3MnLCBzZWxmLmVtaXQuYmluZChzZWxmLCAncHJvZ3Jlc3MnKSk7XG5cbiAgICAgICAgcmVzb3VyY2UubG9hZChzZWxmLl9ib3VuZE9uTG9hZCk7XG4gICAgfSk7XG59O1xuXG4vKipcbiAqIENhbGxlZCBvbmNlIGVhY2ggcmVzb3VyY2UgaGFzIGxvYWRlZC5cbiAqXG4gKiBAZmlyZXMgY29tcGxldGVcbiAqIEBwcml2YXRlXG4gKi9cbkxvYWRlci5wcm90b3R5cGUuX29uQ29tcGxldGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgdGhpcy5lbWl0KCdjb21wbGV0ZScsIHRoaXMsIHRoaXMucmVzb3VyY2VzKTtcbn07XG5cbi8qKlxuICogQ2FsbGVkIGVhY2ggdGltZSBhIHJlc291cmNlcyBpcyBsb2FkZWQuXG4gKlxuICogQGZpcmVzIHByb2dyZXNzXG4gKiBAZmlyZXMgZXJyb3JcbiAqIEBmaXJlcyBsb2FkXG4gKiBAcHJpdmF0ZVxuICovXG5Mb2FkZXIucHJvdG90eXBlLl9vbkxvYWQgPSBmdW5jdGlvbiAocmVzb3VyY2UpIHtcbiAgICB0aGlzLnByb2dyZXNzICs9IHRoaXMuX3Byb2dyZXNzQ2h1bms7XG5cbiAgICB0aGlzLmVtaXQoJ3Byb2dyZXNzJywgdGhpcywgcmVzb3VyY2UpO1xuXG4gICAgLy8gcnVuIG1pZGRsZXdhcmUsIHRoaXMgKm11c3QqIGhhcHBlbiBiZWZvcmUgZGVxdWV1ZSBzbyBzdWItYXNzZXRzIGdldCBhZGRlZCBwcm9wZXJseVxuICAgIHRoaXMuX3J1bk1pZGRsZXdhcmUocmVzb3VyY2UsIHRoaXMuX2FmdGVyTWlkZGxld2FyZSwgZnVuY3Rpb24gKCkge1xuICAgICAgICByZXNvdXJjZS5lbWl0KCdhZnRlck1pZGRsZXdhcmUnLCByZXNvdXJjZSk7XG5cbiAgICAgICAgdGhpcy5fbnVtVG9Mb2FkLS07XG5cbiAgICAgICAgLy8gZG8gY29tcGxldGlvbiBjaGVja1xuICAgICAgICBpZiAodGhpcy5fbnVtVG9Mb2FkID09PSAwKSB7XG4gICAgICAgICAgICB0aGlzLnByb2dyZXNzID0gMTAwO1xuICAgICAgICAgICAgdGhpcy5fb25Db21wbGV0ZSgpO1xuICAgICAgICB9XG4gICAgICAgIFxuICAgICAgICBpZiAocmVzb3VyY2UuZXJyb3IpIHtcbiAgICAgICAgICAgIHRoaXMuZW1pdCgnZXJyb3InLCByZXNvdXJjZS5lcnJvciwgdGhpcywgcmVzb3VyY2UpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5lbWl0KCdsb2FkJywgdGhpcywgcmVzb3VyY2UpO1xuICAgICAgICB9XG4gICAgfSk7XG4gICAgXG5cblxuICAgIC8vIHJlbW92ZSB0aGlzIHJlc291cmNlIGZyb20gdGhlIGFzeW5jIHF1ZXVlXG4gICAgcmVzb3VyY2UuX2RlcXVldWUoKTtcbn07XG5cbi8qKlxuICogUnVuIG1pZGRsZXdhcmUgZnVuY3Rpb25zIG9uIGEgcmVzb3VyY2UuXG4gKlxuICogQHByaXZhdGVcbiAqL1xuTG9hZGVyLnByb3RvdHlwZS5fcnVuTWlkZGxld2FyZSA9IGZ1bmN0aW9uIChyZXNvdXJjZSwgZm5zLCBjYikge1xuICAgIHZhciBzZWxmID0gdGhpcztcblxuICAgIGFzeW5jLmVhY2hTZXJpZXMoZm5zLCBmdW5jdGlvbiAoZm4sIG5leHQpIHtcbiAgICAgICAgZm4uY2FsbChzZWxmLCByZXNvdXJjZSwgbmV4dCk7XG4gICAgfSwgY2IuYmluZCh0aGlzLCByZXNvdXJjZSkpO1xufTtcblxuTG9hZGVyLkxPQURfVFlQRSA9IFJlc291cmNlLkxPQURfVFlQRTtcbkxvYWRlci5YSFJfUkVBRFlfU1RBVEUgPSBSZXNvdXJjZS5YSFJfUkVBRFlfU1RBVEU7XG5Mb2FkZXIuWEhSX1JFU1BPTlNFX1RZUEUgPSBSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRTtcbiIsInZhciBFdmVudEVtaXR0ZXIgPSByZXF1aXJlKCdldmVudGVtaXR0ZXIzJyksXG4gICAgX3VybCA9IHJlcXVpcmUoJ3VybCcpLFxuICAgIC8vIHRlc3RzIGlzIENPUlMgaXMgc3VwcG9ydGVkIGluIFhIUiwgaWYgbm90IHdlIG5lZWQgdG8gdXNlIFhEUlxuICAgIHVzZVhkciA9ICEhKHdpbmRvdy5YRG9tYWluUmVxdWVzdCAmJiAhKCd3aXRoQ3JlZGVudGlhbHMnIGluIChuZXcgWE1MSHR0cFJlcXVlc3QoKSkpKSxcbiAgICB0ZW1wQW5jaG9yID0gbnVsbDtcblxuLyoqXG4gKiBNYW5hZ2VzIHRoZSBzdGF0ZSBhbmQgbG9hZGluZyBvZiBhIHNpbmdsZSByZXNvdXJjZSByZXByZXNlbnRlZCBieVxuICogYSBzaW5nbGUgVVJMLlxuICpcbiAqIEBjbGFzc1xuICogQHBhcmFtIG5hbWUge3N0cmluZ30gVGhlIG5hbWUgb2YgdGhlIHJlc291cmNlIHRvIGxvYWQuXG4gKiBAcGFyYW0gdXJsIHtzdHJpbmd8c3RyaW5nW119IFRoZSB1cmwgZm9yIHRoaXMgcmVzb3VyY2UsIGZvciBhdWRpby92aWRlbyBsb2FkcyB5b3UgY2FuIHBhc3MgYW4gYXJyYXkgb2Ygc291cmNlcy5cbiAqIEBwYXJhbSBbb3B0aW9uc10ge29iamVjdH0gVGhlIG9wdGlvbnMgZm9yIHRoZSBsb2FkLlxuICogQHBhcmFtIFtvcHRpb25zLmNyb3NzT3JpZ2luXSB7c3RyaW5nfGJvb2xlYW59IElzIHRoaXMgcmVxdWVzdCBjcm9zcy1vcmlnaW4/IERlZmF1bHQgaXMgdG8gZGV0ZXJtaW5lIGF1dG9tYXRpY2FsbHkuXG4gKiBAcGFyYW0gW29wdGlvbnMubG9hZFR5cGU9UmVzb3VyY2UuTE9BRF9UWVBFLlhIUl0ge1Jlc291cmNlLkxPQURfVFlQRX0gSG93IHNob3VsZCB0aGlzIHJlc291cmNlIGJlIGxvYWRlZD9cbiAqIEBwYXJhbSBbb3B0aW9ucy54aHJUeXBlPVJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkRFRkFVTFRdIHtSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRX0gSG93IHNob3VsZCB0aGUgZGF0YSBiZWluZ1xuICogICAgICBsb2FkZWQgYmUgaW50ZXJwcmV0ZWQgd2hlbiB1c2luZyBYSFI/XG4gKiBAcGFyYW0gW29wdGlvbnMubWV0YWRhdGFdIHtvYmplY3R9IEV4dHJhIGluZm8gZm9yIG1pZGRsZXdhcmUuXG4gKi9cbmZ1bmN0aW9uIFJlc291cmNlKG5hbWUsIHVybCwgb3B0aW9ucykge1xuICAgIEV2ZW50RW1pdHRlci5jYWxsKHRoaXMpO1xuXG4gICAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG5cbiAgICBpZiAodHlwZW9mIG5hbWUgIT09ICdzdHJpbmcnIHx8IHR5cGVvZiB1cmwgIT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignQm90aCBuYW1lIGFuZCB1cmwgYXJlIHJlcXVpcmVkIGZvciBjb25zdHJ1Y3RpbmcgYSByZXNvdXJjZS4nKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGUgbmFtZSBvZiB0aGlzIHJlc291cmNlLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7c3RyaW5nfVxuICAgICAqIEByZWFkb25seVxuICAgICAqL1xuICAgIHRoaXMubmFtZSA9IG5hbWU7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgdXJsIHVzZWQgdG8gbG9hZCB0aGlzIHJlc291cmNlLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7c3RyaW5nfVxuICAgICAqIEByZWFkb25seVxuICAgICAqL1xuICAgIHRoaXMudXJsID0gdXJsO1xuXG4gICAgLyoqXG4gICAgICogU3RvcmVzIHdoZXRoZXIgb3Igbm90IHRoaXMgdXJsIGlzIGEgZGF0YSB1cmwuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqIEByZWFkb25seVxuICAgICAqL1xuICAgIHRoaXMuaXNEYXRhVXJsID0gdGhpcy51cmwuaW5kZXhPZignZGF0YTonKSA9PT0gMDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBkYXRhIHRoYXQgd2FzIGxvYWRlZCBieSB0aGUgcmVzb3VyY2UuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHthbnl9XG4gICAgICovXG4gICAgdGhpcy5kYXRhID0gbnVsbDtcblxuICAgIC8qKlxuICAgICAqIElzIHRoaXMgcmVxdWVzdCBjcm9zcy1vcmlnaW4/IElmIHVuc2V0LCBkZXRlcm1pbmVkIGF1dG9tYXRpY2FsbHkuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtzdHJpbmd9XG4gICAgICovXG4gICAgdGhpcy5jcm9zc09yaWdpbiA9IG9wdGlvbnMuY3Jvc3NPcmlnaW4gPT09IHRydWUgPyAnYW5vbnltb3VzJyA6IG9wdGlvbnMuY3Jvc3NPcmlnaW47XG5cbiAgICAvKipcbiAgICAgKiBUaGUgbWV0aG9kIG9mIGxvYWRpbmcgdG8gdXNlIGZvciB0aGlzIHJlc291cmNlLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UmVzb3VyY2UuTE9BRF9UWVBFfVxuICAgICAqL1xuICAgIHRoaXMubG9hZFR5cGUgPSBvcHRpb25zLmxvYWRUeXBlIHx8IHRoaXMuX2RldGVybWluZUxvYWRUeXBlKCk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgdHlwZSB1c2VkIHRvIGxvYWQgdGhlIHJlc291cmNlIHZpYSBYSFIuIElmIHVuc2V0LCBkZXRlcm1pbmVkIGF1dG9tYXRpY2FsbHkuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtzdHJpbmd9XG4gICAgICovXG4gICAgdGhpcy54aHJUeXBlID0gb3B0aW9ucy54aHJUeXBlO1xuXG4gICAgLyoqXG4gICAgICogRXh0cmEgaW5mbyBmb3IgbWlkZGxld2FyZVxuICAgICAqXG4gICAgICogQG1lbWJlciB7b2JqZWN0fVxuICAgICAqL1xuICAgIHRoaXMubWV0YWRhdGEgPSBvcHRpb25zLm1ldGFkYXRhIHx8IHt9O1xuXG4gICAgLyoqXG4gICAgICogVGhlIGVycm9yIHRoYXQgb2NjdXJyZWQgd2hpbGUgbG9hZGluZyAoaWYgYW55KS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge0Vycm9yfVxuICAgICAqIEByZWFkb25seVxuICAgICAqL1xuICAgIHRoaXMuZXJyb3IgPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogVGhlIFhIUiBvYmplY3QgdGhhdCB3YXMgdXNlZCB0byBsb2FkIHRoaXMgcmVzb3VyY2UuIFRoaXMgaXMgb25seSBzZXRcbiAgICAgKiB3aGVuIGBsb2FkVHlwZWAgaXMgYFJlc291cmNlLkxPQURfVFlQRS5YSFJgLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7WE1MSHR0cFJlcXVlc3R9XG4gICAgICovXG4gICAgdGhpcy54aHIgPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogRGVzY3JpYmVzIGlmIHRoaXMgcmVzb3VyY2Ugd2FzIGxvYWRlZCBhcyBqc29uLiBPbmx5IHZhbGlkIGFmdGVyIHRoZSByZXNvdXJjZVxuICAgICAqIGhhcyBjb21wbGV0ZWx5IGxvYWRlZC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICovXG4gICAgdGhpcy5pc0pzb24gPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIERlc2NyaWJlcyBpZiB0aGlzIHJlc291cmNlIHdhcyBsb2FkZWQgYXMgeG1sLiBPbmx5IHZhbGlkIGFmdGVyIHRoZSByZXNvdXJjZVxuICAgICAqIGhhcyBjb21wbGV0ZWx5IGxvYWRlZC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICovXG4gICAgdGhpcy5pc1htbCA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogRGVzY3JpYmVzIGlmIHRoaXMgcmVzb3VyY2Ugd2FzIGxvYWRlZCBhcyBhbiBpbWFnZSB0YWcuIE9ubHkgdmFsaWQgYWZ0ZXIgdGhlIHJlc291cmNlXG4gICAgICogaGFzIGNvbXBsZXRlbHkgbG9hZGVkLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKi9cbiAgICB0aGlzLmlzSW1hZ2UgPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIERlc2NyaWJlcyBpZiB0aGlzIHJlc291cmNlIHdhcyBsb2FkZWQgYXMgYW4gYXVkaW8gdGFnLiBPbmx5IHZhbGlkIGFmdGVyIHRoZSByZXNvdXJjZVxuICAgICAqIGhhcyBjb21wbGV0ZWx5IGxvYWRlZC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICovXG4gICAgdGhpcy5pc0F1ZGlvID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBEZXNjcmliZXMgaWYgdGhpcyByZXNvdXJjZSB3YXMgbG9hZGVkIGFzIGEgdmlkZW8gdGFnLiBPbmx5IHZhbGlkIGFmdGVyIHRoZSByZXNvdXJjZVxuICAgICAqIGhhcyBjb21wbGV0ZWx5IGxvYWRlZC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICovXG4gICAgdGhpcy5pc1ZpZGVvID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYGRlcXVldWVgIG1ldGhvZCB0aGF0IHdpbGwgYmUgdXNlZCBhIHN0b3JhZ2UgcGxhY2UgZm9yIHRoZSBhc3luYyBxdWV1ZSBkZXF1ZXVlIG1ldGhvZFxuICAgICAqIHVzZWQgcHJpdmF0ZWx5IGJ5IHRoZSBsb2FkZXIuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtmdW5jdGlvbn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX2RlcXVldWUgPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGBjb21wbGV0ZWAgZnVuY3Rpb24gYm91bmQgdG8gdGhpcyByZXNvdXJjZSdzIGNvbnRleHQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtmdW5jdGlvbn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX2JvdW5kQ29tcGxldGUgPSB0aGlzLmNvbXBsZXRlLmJpbmQodGhpcyk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYF9vbkVycm9yYCBmdW5jdGlvbiBib3VuZCB0byB0aGlzIHJlc291cmNlJ3MgY29udGV4dC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Z1bmN0aW9ufVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fYm91bmRPbkVycm9yID0gdGhpcy5fb25FcnJvci5iaW5kKHRoaXMpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGBfb25Qcm9ncmVzc2AgZnVuY3Rpb24gYm91bmQgdG8gdGhpcyByZXNvdXJjZSdzIGNvbnRleHQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtmdW5jdGlvbn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX2JvdW5kT25Qcm9ncmVzcyA9IHRoaXMuX29uUHJvZ3Jlc3MuYmluZCh0aGlzKTtcblxuICAgIC8vIHhociBjYWxsYmFja3NcbiAgICB0aGlzLl9ib3VuZFhock9uRXJyb3IgPSB0aGlzLl94aHJPbkVycm9yLmJpbmQodGhpcyk7XG4gICAgdGhpcy5fYm91bmRYaHJPbkFib3J0ID0gdGhpcy5feGhyT25BYm9ydC5iaW5kKHRoaXMpO1xuICAgIHRoaXMuX2JvdW5kWGhyT25Mb2FkID0gdGhpcy5feGhyT25Mb2FkLmJpbmQodGhpcyk7XG4gICAgdGhpcy5fYm91bmRYZHJPblRpbWVvdXQgPSB0aGlzLl94ZHJPblRpbWVvdXQuYmluZCh0aGlzKTtcblxuICAgIC8qKlxuICAgICAqIEVtaXR0ZWQgd2hlbiB0aGUgcmVzb3VyY2UgYmVpbmdzIHRvIGxvYWQuXG4gICAgICpcbiAgICAgKiBAZXZlbnQgc3RhcnRcbiAgICAgKiBAbWVtYmVyb2YgUmVzb3VyY2UjXG4gICAgICovXG5cbiAgICAvKipcbiAgICAgKiBFbWl0dGVkIGVhY2ggdGltZSBwcm9ncmVzcyBvZiB0aGlzIHJlc291cmNlIGxvYWQgdXBkYXRlcy5cbiAgICAgKiBOb3QgYWxsIHJlc291cmNlcyB0eXBlcyBhbmQgbG9hZGVyIHN5c3RlbXMgY2FuIHN1cHBvcnQgdGhpcyBldmVudFxuICAgICAqIHNvIHNvbWV0aW1lcyBpdCBtYXkgbm90IGJlIGF2YWlsYWJsZS4gSWYgdGhlIHJlc291cmNlXG4gICAgICogaXMgYmVpbmcgbG9hZGVkIG9uIGEgbW9kZXJuIGJyb3dzZXIsIHVzaW5nIFhIUiwgYW5kIHRoZSByZW1vdGUgc2VydmVyXG4gICAgICogcHJvcGVybHkgc2V0cyBDb250ZW50LUxlbmd0aCBoZWFkZXJzLCB0aGVuIHRoaXMgd2lsbCBiZSBhdmFpbGFibGUuXG4gICAgICpcbiAgICAgKiBAZXZlbnQgcHJvZ3Jlc3NcbiAgICAgKiBAbWVtYmVyb2YgUmVzb3VyY2UjXG4gICAgICovXG5cbiAgICAvKipcbiAgICAgKiBFbWl0dGVkIG9uY2UgdGhpcyByZXNvdXJjZSBoYXMgbG9hZGVkLCBpZiB0aGVyZSB3YXMgYW4gZXJyb3IgaXQgd2lsbFxuICAgICAqIGJlIGluIHRoZSBgZXJyb3JgIHByb3BlcnR5LlxuICAgICAqXG4gICAgICogQGV2ZW50IGNvbXBsZXRlXG4gICAgICogQG1lbWJlcm9mIFJlc291cmNlI1xuICAgICAqL1xufVxuXG5SZXNvdXJjZS5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKEV2ZW50RW1pdHRlci5wcm90b3R5cGUpO1xuUmVzb3VyY2UucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gUmVzb3VyY2U7XG5tb2R1bGUuZXhwb3J0cyA9IFJlc291cmNlO1xuXG4vKipcbiAqIE1hcmtzIHRoZSByZXNvdXJjZSBhcyBjb21wbGV0ZS5cbiAqXG4gKiBAZmlyZXMgY29tcGxldGVcbiAqL1xuUmVzb3VyY2UucHJvdG90eXBlLmNvbXBsZXRlID0gZnVuY3Rpb24gKCkge1xuICAgIC8vIFRPRE86IENsZWFuIHRoaXMgdXAgaW4gYSB3cmFwcGVyIG9yIHNvbWV0aGluZy4uLmdyb3NzLi4uLlxuICAgIGlmICh0aGlzLmRhdGEgJiYgdGhpcy5kYXRhLnJlbW92ZUV2ZW50TGlzdGVuZXIpIHtcbiAgICAgICAgdGhpcy5kYXRhLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2Vycm9yJywgdGhpcy5fYm91bmRPbkVycm9yKTtcbiAgICAgICAgdGhpcy5kYXRhLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2xvYWQnLCB0aGlzLl9ib3VuZENvbXBsZXRlKTtcbiAgICAgICAgdGhpcy5kYXRhLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3Byb2dyZXNzJywgdGhpcy5fYm91bmRPblByb2dyZXNzKTtcbiAgICAgICAgdGhpcy5kYXRhLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2NhbnBsYXl0aHJvdWdoJywgdGhpcy5fYm91bmRDb21wbGV0ZSk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMueGhyKSB7XG4gICAgICAgIGlmICh0aGlzLnhoci5yZW1vdmVFdmVudExpc3RlbmVyKSB7XG4gICAgICAgICAgICB0aGlzLnhoci5yZW1vdmVFdmVudExpc3RlbmVyKCdlcnJvcicsIHRoaXMuX2JvdW5kWGhyT25FcnJvcik7XG4gICAgICAgICAgICB0aGlzLnhoci5yZW1vdmVFdmVudExpc3RlbmVyKCdhYm9ydCcsIHRoaXMuX2JvdW5kWGhyT25BYm9ydCk7XG4gICAgICAgICAgICB0aGlzLnhoci5yZW1vdmVFdmVudExpc3RlbmVyKCdwcm9ncmVzcycsIHRoaXMuX2JvdW5kT25Qcm9ncmVzcyk7XG4gICAgICAgICAgICB0aGlzLnhoci5yZW1vdmVFdmVudExpc3RlbmVyKCdsb2FkJywgdGhpcy5fYm91bmRYaHJPbkxvYWQpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy54aHIub25lcnJvciA9IG51bGw7XG4gICAgICAgICAgICB0aGlzLnhoci5vbnRpbWVvdXQgPSBudWxsO1xuICAgICAgICAgICAgdGhpcy54aHIub25wcm9ncmVzcyA9IG51bGw7XG4gICAgICAgICAgICB0aGlzLnhoci5vbmxvYWQgPSBudWxsO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5lbWl0KCdjb21wbGV0ZScsIHRoaXMpO1xufTtcblxuLyoqXG4gKiBLaWNrcyBvZmYgbG9hZGluZyBvZiB0aGlzIHJlc291cmNlLlxuICpcbiAqIEBmaXJlcyBzdGFydFxuICogQHBhcmFtIFtjYWxsYmFja10ge2Z1bmN0aW9ufSBPcHRpb25hbCBjYWxsYmFjayB0byBjYWxsIG9uY2UgdGhlIHJlc291cmNlIGlzIGxvYWRlZC5cbiAqL1xuUmVzb3VyY2UucHJvdG90eXBlLmxvYWQgPSBmdW5jdGlvbiAoY2IpIHtcbiAgICB0aGlzLmVtaXQoJ3N0YXJ0JywgdGhpcyk7XG5cbiAgICAvLyBpZiBhIGNhbGxiYWNrIGlzIHNldCwgbGlzdGVuIGZvciBjb21wbGV0ZSBldmVudFxuICAgIGlmIChjYikge1xuICAgICAgICB0aGlzLm9uY2UoJ2NvbXBsZXRlJywgY2IpO1xuICAgIH1cblxuICAgIC8vIGlmIHVuc2V0LCBkZXRlcm1pbmUgdGhlIHZhbHVlXG4gICAgaWYgKHRoaXMuY3Jvc3NPcmlnaW4gPT09IGZhbHNlIHx8IHR5cGVvZiB0aGlzLmNyb3NzT3JpZ2luICE9PSAnc3RyaW5nJykge1xuICAgICAgICB0aGlzLmNyb3NzT3JpZ2luID0gdGhpcy5fZGV0ZXJtaW5lQ3Jvc3NPcmlnaW4odGhpcy51cmwpO1xuICAgIH1cblxuICAgIHN3aXRjaCh0aGlzLmxvYWRUeXBlKSB7XG4gICAgICAgIGNhc2UgUmVzb3VyY2UuTE9BRF9UWVBFLklNQUdFOlxuICAgICAgICAgICAgdGhpcy5fbG9hZEltYWdlKCk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIFJlc291cmNlLkxPQURfVFlQRS5BVURJTzpcbiAgICAgICAgICAgIHRoaXMuX2xvYWRFbGVtZW50KCdhdWRpbycpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSBSZXNvdXJjZS5MT0FEX1RZUEUuVklERU86XG4gICAgICAgICAgICB0aGlzLl9sb2FkRWxlbWVudCgndmlkZW8nKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgUmVzb3VyY2UuTE9BRF9UWVBFLlhIUjpcbiAgICAgICAgICAgIC8qIGZhbGxzIHRocm91Z2ggKi9cbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIGlmICh1c2VYZHIgJiYgdGhpcy5jcm9zc09yaWdpbikge1xuICAgICAgICAgICAgICAgIHRoaXMuX2xvYWRYZHIoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuX2xvYWRYaHIoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGJyZWFrO1xuICAgIH1cbn07XG5cbi8qKlxuICogTG9hZHMgdGhpcyByZXNvdXJjZXMgdXNpbmcgYW4gSW1hZ2Ugb2JqZWN0LlxuICpcbiAqIEBwcml2YXRlXG4gKi9cblJlc291cmNlLnByb3RvdHlwZS5fbG9hZEltYWdlID0gZnVuY3Rpb24gKCkge1xuICAgIHRoaXMuZGF0YSA9IG5ldyBJbWFnZSgpO1xuXG4gICAgaWYgKHRoaXMuY3Jvc3NPcmlnaW4pIHtcbiAgICAgICAgdGhpcy5kYXRhLmNyb3NzT3JpZ2luID0gdGhpcy5jcm9zc09yaWdpbjtcbiAgICB9XG5cbiAgICB0aGlzLmRhdGEuc3JjID0gdGhpcy51cmw7XG5cbiAgICB0aGlzLmlzSW1hZ2UgPSB0cnVlO1xuXG4gICAgdGhpcy5kYXRhLmFkZEV2ZW50TGlzdGVuZXIoJ2Vycm9yJywgdGhpcy5fYm91bmRPbkVycm9yLCBmYWxzZSk7XG4gICAgdGhpcy5kYXRhLmFkZEV2ZW50TGlzdGVuZXIoJ2xvYWQnLCB0aGlzLl9ib3VuZENvbXBsZXRlLCBmYWxzZSk7XG4gICAgdGhpcy5kYXRhLmFkZEV2ZW50TGlzdGVuZXIoJ3Byb2dyZXNzJywgdGhpcy5fYm91bmRPblByb2dyZXNzLCBmYWxzZSk7XG59O1xuXG4vKipcbiAqIExvYWRzIHRoaXMgcmVzb3VyY2VzIHVzaW5nIGFuIEhUTUxBdWRpb0VsZW1lbnQgb3IgSFRNTFZpZGVvRWxlbWVudC5cbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5SZXNvdXJjZS5wcm90b3R5cGUuX2xvYWRFbGVtZW50ID0gZnVuY3Rpb24gKHR5cGUpIHtcbiAgICBpZiAodHlwZSA9PT0gJ2F1ZGlvJyAmJiB0eXBlb2YgQXVkaW8gIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIHRoaXMuZGF0YSA9IG5ldyBBdWRpbygpO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgdGhpcy5kYXRhID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCh0eXBlKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5kYXRhID09PSBudWxsKSB7XG4gICAgICAgIHRoaXMuZXJyb3IgPSBuZXcgRXJyb3IoJ1Vuc3VwcG9ydGVkIGVsZW1lbnQgJyArIHR5cGUpO1xuICAgICAgICB0aGlzLmNvbXBsZXRlKCk7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBzdXBwb3J0IGZvciBDb2Nvb25KUyBDYW52YXMrIHJ1bnRpbWUsIGxhY2tzIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NvdXJjZScpXG4gICAgaWYgKG5hdmlnYXRvci5pc0NvY29vbkpTKSB7XG4gICAgICAgIHRoaXMuZGF0YS5zcmMgPSBBcnJheS5pc0FycmF5KHRoaXMudXJsKSA/IHRoaXMudXJsWzBdIDogdGhpcy51cmw7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSh0aGlzLnVybCkpIHtcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy51cmwubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmRhdGEuYXBwZW5kQ2hpbGQodGhpcy5fY3JlYXRlU291cmNlKHR5cGUsIHRoaXMudXJsW2ldKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmRhdGEuYXBwZW5kQ2hpbGQodGhpcy5fY3JlYXRlU291cmNlKHR5cGUsIHRoaXMudXJsKSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzWydpcycgKyB0eXBlWzBdLnRvVXBwZXJDYXNlKCkgKyB0eXBlLnN1YnN0cmluZygxKV0gPSB0cnVlO1xuXG4gICAgdGhpcy5kYXRhLmFkZEV2ZW50TGlzdGVuZXIoJ2Vycm9yJywgdGhpcy5fYm91bmRPbkVycm9yLCBmYWxzZSk7XG4gICAgdGhpcy5kYXRhLmFkZEV2ZW50TGlzdGVuZXIoJ2xvYWQnLCB0aGlzLl9ib3VuZENvbXBsZXRlLCBmYWxzZSk7XG4gICAgdGhpcy5kYXRhLmFkZEV2ZW50TGlzdGVuZXIoJ3Byb2dyZXNzJywgdGhpcy5fYm91bmRPblByb2dyZXNzLCBmYWxzZSk7XG4gICAgdGhpcy5kYXRhLmFkZEV2ZW50TGlzdGVuZXIoJ2NhbnBsYXl0aHJvdWdoJywgdGhpcy5fYm91bmRDb21wbGV0ZSwgZmFsc2UpO1xuXG4gICAgdGhpcy5kYXRhLmxvYWQoKTtcbn07XG5cbi8qKlxuICogTG9hZHMgdGhpcyByZXNvdXJjZXMgdXNpbmcgYW4gWE1MSHR0cFJlcXVlc3QuXG4gKlxuICogQHByaXZhdGVcbiAqL1xuUmVzb3VyY2UucHJvdG90eXBlLl9sb2FkWGhyID0gZnVuY3Rpb24gKCkge1xuICAgIC8vIGlmIHVuc2V0LCBkZXRlcm1pbmUgdGhlIHZhbHVlXG4gICAgaWYgKHR5cGVvZiB0aGlzLnhoclR5cGUgIT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHRoaXMueGhyVHlwZSA9IHRoaXMuX2RldGVybWluZVhoclR5cGUoKTtcbiAgICB9XG5cbiAgICB2YXIgeGhyID0gdGhpcy54aHIgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTtcblxuICAgIC8vIHNldCB0aGUgcmVxdWVzdCB0eXBlIGFuZCB1cmxcbiAgICB4aHIub3BlbignR0VUJywgdGhpcy51cmwsIHRydWUpO1xuXG4gICAgLy8gbG9hZCBqc29uIGFzIHRleHQgYW5kIHBhcnNlIGl0IG91cnNlbHZlcy4gV2UgZG8gdGhpcyBiZWNhdXNlIHNvbWUgYnJvd3NlcnNcbiAgICAvLyAqY291Z2gqIHNhZmFyaSAqY291Z2gqIGNhbid0IGRlYWwgd2l0aCBpdC5cbiAgICBpZiAodGhpcy54aHJUeXBlID09PSBSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRS5KU09OIHx8IHRoaXMueGhyVHlwZSA9PT0gUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuRE9DVU1FTlQpIHtcbiAgICAgICAgeGhyLnJlc3BvbnNlVHlwZSA9IFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLlRFWFQ7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICB4aHIucmVzcG9uc2VUeXBlID0gdGhpcy54aHJUeXBlO1xuICAgIH1cblxuICAgIHhoci5hZGRFdmVudExpc3RlbmVyKCdlcnJvcicsIHRoaXMuX2JvdW5kWGhyT25FcnJvciwgZmFsc2UpO1xuICAgIHhoci5hZGRFdmVudExpc3RlbmVyKCdhYm9ydCcsIHRoaXMuX2JvdW5kWGhyT25BYm9ydCwgZmFsc2UpO1xuICAgIHhoci5hZGRFdmVudExpc3RlbmVyKCdwcm9ncmVzcycsIHRoaXMuX2JvdW5kT25Qcm9ncmVzcywgZmFsc2UpO1xuICAgIHhoci5hZGRFdmVudExpc3RlbmVyKCdsb2FkJywgdGhpcy5fYm91bmRYaHJPbkxvYWQsIGZhbHNlKTtcblxuICAgIHhoci5zZW5kKCk7XG59O1xuXG4vKipcbiAqIExvYWRzIHRoaXMgcmVzb3VyY2VzIHVzaW5nIGFuIFhEb21haW5SZXF1ZXN0LiBUaGlzIGlzIGhlcmUgYmVjYXVzZSB3ZSBuZWVkIHRvIHN1cHBvcnQgSUU5IChncm9zcykuXG4gKlxuICogQHByaXZhdGVcbiAqL1xuUmVzb3VyY2UucHJvdG90eXBlLl9sb2FkWGRyID0gZnVuY3Rpb24gKCkge1xuICAgIC8vIGlmIHVuc2V0LCBkZXRlcm1pbmUgdGhlIHZhbHVlXG4gICAgaWYgKHR5cGVvZiB0aGlzLnhoclR5cGUgIT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHRoaXMueGhyVHlwZSA9IHRoaXMuX2RldGVybWluZVhoclR5cGUoKTtcbiAgICB9XG5cbiAgICB2YXIgeGRyID0gdGhpcy54aHIgPSBuZXcgWERvbWFpblJlcXVlc3QoKTtcblxuICAgIC8vIFhEb21haW5SZXF1ZXN0IGhhcyBhIGZldyBxdWlya3MuIE9jY2FzaW9uYWxseSBpdCB3aWxsIGFib3J0IHJlcXVlc3RzXG4gICAgLy8gQSB3YXkgdG8gYXZvaWQgdGhpcyBpcyB0byBtYWtlIHN1cmUgQUxMIGNhbGxiYWNrcyBhcmUgc2V0IGV2ZW4gaWYgbm90IHVzZWRcbiAgICAvLyBNb3JlIGluZm8gaGVyZTogaHR0cDovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy8xNTc4Njk2Ni94ZG9tYWlucmVxdWVzdC1hYm9ydHMtcG9zdC1vbi1pZS05XG4gICAgeGRyLnRpbWVvdXQgPSA1MDAwO1xuXG4gICAgeGRyLm9uZXJyb3IgPSB0aGlzLl9ib3VuZFhock9uRXJyb3I7XG4gICAgeGRyLm9udGltZW91dCA9IHRoaXMuX2JvdW5kWGRyT25UaW1lb3V0O1xuICAgIHhkci5vbnByb2dyZXNzID0gdGhpcy5fYm91bmRPblByb2dyZXNzO1xuICAgIHhkci5vbmxvYWQgPSB0aGlzLl9ib3VuZFhock9uTG9hZDtcblxuICAgIHhkci5vcGVuKCdHRVQnLCB0aGlzLnVybCwgdHJ1ZSk7XG5cbiAgICAvLyAgTm90ZTogVGhlIHhkci5zZW5kKCkgY2FsbCBpcyB3cmFwcGVkIGluIGEgdGltZW91dCB0byBwcmV2ZW50IGFuIGlzc3VlIHdpdGggdGhlIGludGVyZmFjZSB3aGVyZSBzb21lIHJlcXVlc3RzIGFyZSBsb3N0XG4gICAgLy8gIGlmIG11bHRpcGxlIFhEb21haW5SZXF1ZXN0cyBhcmUgYmVpbmcgc2VudCBhdCB0aGUgc2FtZSB0aW1lLlxuICAgIC8vIFNvbWUgaW5mbyBoZXJlOiBodHRwczovL2dpdGh1Yi5jb20vcGhvdG9uc3Rvcm0vcGhhc2VyL2lzc3Vlcy8xMjQ4XG4gICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICAgIHhkci5zZW5kKCk7XG4gICAgfSwgMCk7XG59O1xuXG4vKipcbiAqIENyZWF0ZXMgYSBzb3VyY2UgdXNlZCBpbiBsb2FkaW5nIHZpYSBhbiBlbGVtZW50LlxuICpcbiAqIEBwYXJhbSB0eXBlIHtzdHJpbmd9IFRoZSBlbGVtZW50IHR5cGUgKHZpZGVvIG9yIGF1ZGlvKS5cbiAqIEBwYXJhbSB1cmwge3N0cmluZ30gVGhlIHNvdXJjZSBVUkwgdG8gbG9hZCBmcm9tLlxuICogQHBhcmFtIFttaW1lXSB7c3RyaW5nfSBUaGUgbWltZSB0eXBlIG9mIHRoZSB2aWRlb1xuICogQHByaXZhdGVcbiAqL1xuUmVzb3VyY2UucHJvdG90eXBlLl9jcmVhdGVTb3VyY2UgPSBmdW5jdGlvbiAodHlwZSwgdXJsLCBtaW1lKSB7XG4gICAgaWYgKCFtaW1lKSB7XG4gICAgICAgIG1pbWUgPSB0eXBlICsgJy8nICsgdXJsLnN1YnN0cih1cmwubGFzdEluZGV4T2YoJy4nKSArIDEpO1xuICAgIH1cblxuICAgIHZhciBzb3VyY2UgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzb3VyY2UnKTtcblxuICAgIHNvdXJjZS5zcmMgPSB1cmw7XG4gICAgc291cmNlLnR5cGUgPSBtaW1lO1xuXG4gICAgcmV0dXJuIHNvdXJjZTtcbn07XG5cbi8qKlxuICogQ2FsbGVkIGlmIGEgbG9hZCBlcnJvcnMgb3V0LlxuICpcbiAqIEBwYXJhbSBldmVudCB7RXZlbnR9IFRoZSBlcnJvciBldmVudCBmcm9tIHRoZSBlbGVtZW50IHRoYXQgZW1pdHMgaXQuXG4gKiBAcHJpdmF0ZVxuICovXG5SZXNvdXJjZS5wcm90b3R5cGUuX29uRXJyb3IgPSBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICB0aGlzLmVycm9yID0gbmV3IEVycm9yKCdGYWlsZWQgdG8gbG9hZCBlbGVtZW50IHVzaW5nICcgKyBldmVudC50YXJnZXQubm9kZU5hbWUpO1xuICAgIHRoaXMuY29tcGxldGUoKTtcbn07XG5cbi8qKlxuICogQ2FsbGVkIGlmIGEgbG9hZCBwcm9ncmVzcyBldmVudCBmaXJlcyBmb3IgeGhyL3hkci5cbiAqXG4gKiBAZmlyZXMgcHJvZ3Jlc3NcbiAqIEBwYXJhbSBldmVudCB7WE1MSHR0cFJlcXVlc3RQcm9ncmVzc0V2ZW50fEV2ZW50fVxuICogQHByaXZhdGVcbiAqL1xuUmVzb3VyY2UucHJvdG90eXBlLl9vblByb2dyZXNzID0gIGZ1bmN0aW9uIChldmVudCkge1xuICAgIGlmIChldmVudCAmJiBldmVudC5sZW5ndGhDb21wdXRhYmxlKSB7XG4gICAgICAgIHRoaXMuZW1pdCgncHJvZ3Jlc3MnLCB0aGlzLCBldmVudC5sb2FkZWQgLyBldmVudC50b3RhbCk7XG4gICAgfVxufTtcblxuLyoqXG4gKiBDYWxsZWQgaWYgYW4gZXJyb3IgZXZlbnQgZmlyZXMgZm9yIHhoci94ZHIuXG4gKlxuICogQHBhcmFtIGV2ZW50IHtYTUxIdHRwUmVxdWVzdEVycm9yRXZlbnR8RXZlbnR9XG4gKiBAcHJpdmF0ZVxuICovXG5SZXNvdXJjZS5wcm90b3R5cGUuX3hock9uRXJyb3IgPSBmdW5jdGlvbiAoKSB7XG4gICAgdGhpcy5lcnJvciA9IG5ldyBFcnJvcihcbiAgICAgICAgcmVxVHlwZSh0aGlzLnhocikgKyAnIFJlcXVlc3QgZmFpbGVkLiAnICtcbiAgICAgICAgJ1N0YXR1czogJyArIHRoaXMueGhyLnN0YXR1cyArICcsIHRleHQ6IFwiJyArIHRoaXMueGhyLnN0YXR1c1RleHQgKyAnXCInXG4gICAgKTtcblxuICAgIHRoaXMuY29tcGxldGUoKTtcbn07XG5cbi8qKlxuICogQ2FsbGVkIGlmIGFuIGFib3J0IGV2ZW50IGZpcmVzIGZvciB4aHIuXG4gKlxuICogQHBhcmFtIGV2ZW50IHtYTUxIdHRwUmVxdWVzdEFib3J0RXZlbnR9XG4gKiBAcHJpdmF0ZVxuICovXG5SZXNvdXJjZS5wcm90b3R5cGUuX3hock9uQWJvcnQgPSBmdW5jdGlvbiAoKSB7XG4gICAgdGhpcy5lcnJvciA9IG5ldyBFcnJvcihyZXFUeXBlKHRoaXMueGhyKSArICcgUmVxdWVzdCB3YXMgYWJvcnRlZCBieSB0aGUgdXNlci4nKTtcbiAgICB0aGlzLmNvbXBsZXRlKCk7XG59O1xuXG4vKipcbiAqIENhbGxlZCBpZiBhIHRpbWVvdXQgZXZlbnQgZmlyZXMgZm9yIHhkci5cbiAqXG4gKiBAcGFyYW0gZXZlbnQge0V2ZW50fVxuICogQHByaXZhdGVcbiAqL1xuUmVzb3VyY2UucHJvdG90eXBlLl94ZHJPblRpbWVvdXQgPSBmdW5jdGlvbiAoKSB7XG4gICAgdGhpcy5lcnJvciA9IG5ldyBFcnJvcihyZXFUeXBlKHRoaXMueGhyKSArICcgUmVxdWVzdCB0aW1lZCBvdXQuJyk7XG4gICAgdGhpcy5jb21wbGV0ZSgpO1xufTtcblxuLyoqXG4gKiBDYWxsZWQgd2hlbiBkYXRhIHN1Y2Nlc3NmdWxseSBsb2FkcyBmcm9tIGFuIHhoci94ZHIgcmVxdWVzdC5cbiAqXG4gKiBAcGFyYW0gZXZlbnQge1hNTEh0dHBSZXF1ZXN0TG9hZEV2ZW50fEV2ZW50fVxuICogQHByaXZhdGVcbiAqL1xuUmVzb3VyY2UucHJvdG90eXBlLl94aHJPbkxvYWQgPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHhociA9IHRoaXMueGhyLFxuICAgICAgICBzdGF0dXMgPSB4aHIuc3RhdHVzICE9PSB1bmRlZmluZWQgPyB4aHIuc3RhdHVzIDogMjAwOyAvL1hEUiBoYXMgbm8gYC5zdGF0dXNgLCBhc3N1bWUgMjAwLlxuXG4gICAgLy8gc3RhdHVzIGNhbiBiZSAwIHdoZW4gdXNpbmcgdGhlIGZpbGU6Ly8gcHJvdG9jb2wsIGFsc28gY2hlY2sgaWYgYSByZXNwb25zZSB3YXMgZm91bmRcbiAgICBpZiAoc3RhdHVzID09PSAyMDAgfHwgc3RhdHVzID09PSAyMDQgfHwgKHN0YXR1cyA9PT0gMCAmJiB4aHIucmVzcG9uc2VUZXh0Lmxlbmd0aCA+IDApKSB7XG4gICAgICAgIC8vIGlmIHRleHQsIGp1c3QgcmV0dXJuIGl0XG4gICAgICAgIGlmICh0aGlzLnhoclR5cGUgPT09IFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLlRFWFQpIHtcbiAgICAgICAgICAgIHRoaXMuZGF0YSA9IHhoci5yZXNwb25zZVRleHQ7XG4gICAgICAgIH1cbiAgICAgICAgLy8gaWYganNvbiwgcGFyc2UgaW50byBqc29uIG9iamVjdFxuICAgICAgICBlbHNlIGlmICh0aGlzLnhoclR5cGUgPT09IFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkpTT04pIHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgdGhpcy5kYXRhID0gSlNPTi5wYXJzZSh4aHIucmVzcG9uc2VUZXh0KTtcbiAgICAgICAgICAgICAgICB0aGlzLmlzSnNvbiA9IHRydWU7XG4gICAgICAgICAgICB9IGNhdGNoKGUpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmVycm9yID0gbmV3IEVycm9yKCdFcnJvciB0cnlpbmcgdG8gcGFyc2UgbG9hZGVkIGpzb246JywgZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8gaWYgeG1sLCBwYXJzZSBpbnRvIGFuIHhtbCBkb2N1bWVudCBvciBkaXYgZWxlbWVudFxuICAgICAgICBlbHNlIGlmICh0aGlzLnhoclR5cGUgPT09IFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkRPQ1VNRU5UKSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGlmICh3aW5kb3cuRE9NUGFyc2VyKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBkb21wYXJzZXIgPSBuZXcgRE9NUGFyc2VyKCk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGF0YSA9IGRvbXBhcnNlci5wYXJzZUZyb21TdHJpbmcoeGhyLnJlc3BvbnNlVGV4dCwgJ3RleHQveG1sJyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB2YXIgZGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgICAgICAgICAgICAgIGRpdi5pbm5lckhUTUwgPSB4aHIucmVzcG9uc2VUZXh0O1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmRhdGEgPSBkaXY7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXMuaXNYbWwgPSB0cnVlO1xuICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgIHRoaXMuZXJyb3IgPSBuZXcgRXJyb3IoJ0Vycm9yIHRyeWluZyB0byBwYXJzZSBsb2FkZWQgeG1sOicsIGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIG90aGVyIHR5cGVzIGp1c3QgcmV0dXJuIHRoZSByZXNwb25zZVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuZGF0YSA9IHhoci5yZXNwb25zZSB8fCB4aHIucmVzcG9uc2VUZXh0O1xuICAgICAgICB9XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICB0aGlzLmVycm9yID0gbmV3IEVycm9yKCdbJyArIHhoci5zdGF0dXMgKyAnXScgKyB4aHIuc3RhdHVzVGV4dCArICc6JyArIHhoci5yZXNwb25zZVVSTCk7XG4gICAgfVxuXG4gICAgdGhpcy5jb21wbGV0ZSgpO1xufTtcblxuZnVuY3Rpb24gcmVxVHlwZSh4aHIpIHtcbiAgICByZXR1cm4geGhyLnRvU3RyaW5nKCkucmVwbGFjZSgnb2JqZWN0ICcsICcnKTtcbn1cblxuLyoqXG4gKiBTZXRzIHRoZSBgY3Jvc3NPcmlnaW5gIHByb3BlcnR5IGZvciB0aGlzIHJlc291cmNlIGJhc2VkIG9uIGlmIHRoZSB1cmxcbiAqIGZvciB0aGlzIHJlc291cmNlIGlzIGNyb3NzLW9yaWdpbi4gSWYgY3Jvc3NPcmlnaW4gd2FzIG1hbnVhbGx5IHNldCwgdGhpc1xuICogZnVuY3Rpb24gZG9lcyBub3RoaW5nLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0gdXJsIHtzdHJpbmd9IFRoZSB1cmwgdG8gdGVzdC5cbiAqIEBwYXJhbSBbbG9jYXRpb249d2luZG93LmxvY2F0aW9uXSB7b2JqZWN0fSBUaGUgbG9jYXRpb24gb2JqZWN0IHRvIHRlc3QgYWdhaW5zdC5cbiAqIEByZXR1cm4ge3N0cmluZ30gVGhlIGNyb3NzT3JpZ2luIHZhbHVlIHRvIHVzZSAob3IgZW1wdHkgc3RyaW5nIGZvciBub25lKS5cbiAqL1xuUmVzb3VyY2UucHJvdG90eXBlLl9kZXRlcm1pbmVDcm9zc09yaWdpbiA9IGZ1bmN0aW9uICh1cmwsIGxvYykge1xuICAgIC8vIGRhdGE6IGFuZCBqYXZhc2NyaXB0OiB1cmxzIGFyZSBjb25zaWRlcmVkIHNhbWUtb3JpZ2luXG4gICAgaWYgKHVybC5pbmRleE9mKCdkYXRhOicpID09PSAwKSB7XG4gICAgICAgIHJldHVybiAnJztcbiAgICB9XG5cbiAgICAvLyBkZWZhdWx0IGlzIHdpbmRvdy5sb2NhdGlvblxuICAgIGxvYyA9IGxvYyB8fCB3aW5kb3cubG9jYXRpb247XG5cbiAgICBpZiAoIXRlbXBBbmNob3IpIHtcbiAgICAgICAgdGVtcEFuY2hvciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2EnKTtcbiAgICB9XG5cbiAgICAvLyBsZXQgdGhlIGJyb3dzZXIgZGV0ZXJtaW5lIHRoZSBmdWxsIGhyZWYgZm9yIHRoZSB1cmwgb2YgdGhpcyByZXNvdXJjZSBhbmQgdGhlblxuICAgIC8vIHBhcnNlIHdpdGggdGhlIG5vZGUgdXJsIGxpYiwgd2UgY2FuJ3QgdXNlIHRoZSBwcm9wZXJ0aWVzIG9mIHRoZSBhbmNob3IgZWxlbWVudFxuICAgIC8vIGJlY2F1c2UgdGhleSBkb24ndCB3b3JrIGluIElFOSA6KFxuICAgIHRlbXBBbmNob3IuaHJlZiA9IHVybDtcbiAgICB1cmwgPSBfdXJsLnBhcnNlKHRlbXBBbmNob3IuaHJlZik7XG5cbiAgICB2YXIgc2FtZVBvcnQgPSAoIXVybC5wb3J0ICYmIGxvYy5wb3J0ID09PSAnJykgfHwgKHVybC5wb3J0ID09PSBsb2MucG9ydCk7XG5cbiAgICAvLyBpZiBjcm9zcyBvcmlnaW5cbiAgICBpZiAodXJsLmhvc3RuYW1lICE9PSBsb2MuaG9zdG5hbWUgfHwgIXNhbWVQb3J0IHx8IHVybC5wcm90b2NvbCAhPT0gbG9jLnByb3RvY29sKSB7XG4gICAgICAgIHJldHVybiAnYW5vbnltb3VzJztcbiAgICB9XG5cbiAgICByZXR1cm4gJyc7XG59O1xuXG4vKipcbiAqIERldGVybWluZXMgdGhlIHJlc3BvbnNlVHlwZSBvZiBhbiBYSFIgcmVxdWVzdCBiYXNlZCBvbiB0aGUgZXh0ZW5zaW9uIG9mIHRoZVxuICogcmVzb3VyY2UgYmVpbmcgbG9hZGVkLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcmV0dXJuIHtSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRX0gVGhlIHJlc3BvbnNlVHlwZSB0byB1c2UuXG4gKi9cblJlc291cmNlLnByb3RvdHlwZS5fZGV0ZXJtaW5lWGhyVHlwZSA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gUmVzb3VyY2UuX3hoclR5cGVNYXBbdGhpcy5fZ2V0RXh0ZW5zaW9uKCldIHx8IFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLlRFWFQ7XG59O1xuXG5SZXNvdXJjZS5wcm90b3R5cGUuX2RldGVybWluZUxvYWRUeXBlID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBSZXNvdXJjZS5fbG9hZFR5cGVNYXBbdGhpcy5fZ2V0RXh0ZW5zaW9uKCldIHx8IFJlc291cmNlLkxPQURfVFlQRS5YSFI7XG59O1xuXG5SZXNvdXJjZS5wcm90b3R5cGUuX2dldEV4dGVuc2lvbiA9IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgdXJsID0gdGhpcy51cmwsXG4gICAgICAgIGV4dDtcblxuICAgIGlmICh0aGlzLmlzRGF0YVVybCkge1xuICAgICAgICB2YXIgc2xhc2hJbmRleCA9IHVybC5pbmRleE9mKCcvJyk7XG4gICAgICAgIGV4dCA9IHVybC5zdWJzdHJpbmcoc2xhc2hJbmRleCArIDEsIHVybC5pbmRleE9mKCc7Jywgc2xhc2hJbmRleCkpO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgdmFyIHF1ZXJ5U3RhcnQgPSB1cmwuaW5kZXhPZignPycpO1xuICAgICAgICBpZiAocXVlcnlTdGFydCAhPT0gLTEpIHtcbiAgICAgICAgICAgIHVybCA9IHVybC5zdWJzdHJpbmcoMCwgcXVlcnlTdGFydCk7XG4gICAgICAgIH1cblxuICAgICAgICBleHQgPSB1cmwuc3Vic3RyaW5nKHVybC5sYXN0SW5kZXhPZignLicpICsgMSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGV4dDtcbn07XG5cbi8qKlxuICogRGV0ZXJtaW5lcyB0aGUgbWltZSB0eXBlIG9mIGFuIFhIUiByZXF1ZXN0IGJhc2VkIG9uIHRoZSByZXNwb25zZVR5cGUgb2ZcbiAqIHJlc291cmNlIGJlaW5nIGxvYWRlZC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHJldHVybiB7c3RyaW5nfSBUaGUgbWltZSB0eXBlIHRvIHVzZS5cbiAqL1xuUmVzb3VyY2UucHJvdG90eXBlLl9nZXRNaW1lRnJvbVhoclR5cGUgPSBmdW5jdGlvbiAodHlwZSkge1xuICAgIHN3aXRjaCh0eXBlKSB7XG4gICAgICAgIGNhc2UgUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuQlVGRkVSOlxuICAgICAgICAgICAgcmV0dXJuICdhcHBsaWNhdGlvbi9vY3RldC1iaW5hcnknO1xuXG4gICAgICAgIGNhc2UgUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuQkxPQjpcbiAgICAgICAgICAgIHJldHVybiAnYXBwbGljYXRpb24vYmxvYic7XG5cbiAgICAgICAgY2FzZSBSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRS5ET0NVTUVOVDpcbiAgICAgICAgICAgIHJldHVybiAnYXBwbGljYXRpb24veG1sJztcblxuICAgICAgICBjYXNlIFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkpTT046XG4gICAgICAgICAgICByZXR1cm4gJ2FwcGxpY2F0aW9uL2pzb24nO1xuXG4gICAgICAgIGNhc2UgUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuREVGQVVMVDpcbiAgICAgICAgY2FzZSBSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRS5URVhUOlxuICAgICAgICAgICAgLyogZmFsbHMgdGhyb3VnaCAqL1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgcmV0dXJuICd0ZXh0L3BsYWluJztcblxuICAgIH1cbn07XG5cbi8qKlxuICogVGhlIHR5cGVzIG9mIGxvYWRpbmcgYSByZXNvdXJjZSBjYW4gdXNlLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBjb25zdGFudFxuICogQHByb3BlcnR5IHtvYmplY3R9IExPQURfVFlQRVxuICogQHByb3BlcnR5IHtudW1iZXJ9IExPQURfVFlQRS5YSFIgLSBVc2VzIFhNTEh0dHBSZXF1ZXN0IHRvIGxvYWQgdGhlIHJlc291cmNlLlxuICogQHByb3BlcnR5IHtudW1iZXJ9IExPQURfVFlQRS5JTUFHRSAtIFVzZXMgYW4gYEltYWdlYCBvYmplY3QgdG8gbG9hZCB0aGUgcmVzb3VyY2UuXG4gKiBAcHJvcGVydHkge251bWJlcn0gTE9BRF9UWVBFLkFVRElPIC0gVXNlcyBhbiBgQXVkaW9gIG9iamVjdCB0byBsb2FkIHRoZSByZXNvdXJjZS5cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBMT0FEX1RZUEUuVklERU8gLSBVc2VzIGEgYFZpZGVvYCBvYmplY3QgdG8gbG9hZCB0aGUgcmVzb3VyY2UuXG4gKi9cblJlc291cmNlLkxPQURfVFlQRSA9IHtcbiAgICBYSFI6ICAgIDEsXG4gICAgSU1BR0U6ICAyLFxuICAgIEFVRElPOiAgMyxcbiAgICBWSURFTzogIDRcbn07XG5cbi8qKlxuICogVGhlIFhIUiByZWFkeSBzdGF0ZXMsIHVzZWQgaW50ZXJuYWxseS5cbiAqXG4gKiBAc3RhdGljXG4gKiBAY29uc3RhbnRcbiAqIEBwcm9wZXJ0eSB7b2JqZWN0fSBYSFJfUkVBRFlfU1RBVEVcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBYSFJfUkVBRFlfU1RBVEUuVU5TRU5UIC0gb3BlbigpaGFzIG5vdCBiZWVuIGNhbGxlZCB5ZXQuXG4gKiBAcHJvcGVydHkge251bWJlcn0gWEhSX1JFQURZX1NUQVRFLk9QRU5FRCAtIHNlbmQoKWhhcyBub3QgYmVlbiBjYWxsZWQgeWV0LlxuICogQHByb3BlcnR5IHtudW1iZXJ9IFhIUl9SRUFEWV9TVEFURS5IRUFERVJTX1JFQ0VJVkVEIC0gc2VuZCgpIGhhcyBiZWVuIGNhbGxlZCwgYW5kIGhlYWRlcnMgYW5kIHN0YXR1cyBhcmUgYXZhaWxhYmxlLlxuICogQHByb3BlcnR5IHtudW1iZXJ9IFhIUl9SRUFEWV9TVEFURS5MT0FESU5HIC0gRG93bmxvYWRpbmc7IHJlc3BvbnNlVGV4dCBob2xkcyBwYXJ0aWFsIGRhdGEuXG4gKiBAcHJvcGVydHkge251bWJlcn0gWEhSX1JFQURZX1NUQVRFLkRPTkUgLSBUaGUgb3BlcmF0aW9uIGlzIGNvbXBsZXRlLlxuICovXG5SZXNvdXJjZS5YSFJfUkVBRFlfU1RBVEUgPSB7XG4gICAgVU5TRU5UOiAwLFxuICAgIE9QRU5FRDogMSxcbiAgICBIRUFERVJTX1JFQ0VJVkVEOiAyLFxuICAgIExPQURJTkc6IDMsXG4gICAgRE9ORTogNFxufTtcblxuLyoqXG4gKiBUaGUgWEhSIHJlYWR5IHN0YXRlcywgdXNlZCBpbnRlcm5hbGx5LlxuICpcbiAqIEBzdGF0aWNcbiAqIEBjb25zdGFudFxuICogQHByb3BlcnR5IHtvYmplY3R9IFhIUl9SRVNQT05TRV9UWVBFXG4gKiBAcHJvcGVydHkge3N0cmluZ30gWEhSX1JFU1BPTlNFX1RZUEUuREVGQVVMVCAtIGRlZmF1bHRzIHRvIHRleHRcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBYSFJfUkVTUE9OU0VfVFlQRS5CVUZGRVIgLSBBcnJheUJ1ZmZlclxuICogQHByb3BlcnR5IHtzdHJpbmd9IFhIUl9SRVNQT05TRV9UWVBFLkJMT0IgLSBCbG9iXG4gKiBAcHJvcGVydHkge3N0cmluZ30gWEhSX1JFU1BPTlNFX1RZUEUuRE9DVU1FTlQgLSBEb2N1bWVudFxuICogQHByb3BlcnR5IHtzdHJpbmd9IFhIUl9SRVNQT05TRV9UWVBFLkpTT04gLSBPYmplY3RcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBYSFJfUkVTUE9OU0VfVFlQRS5URVhUIC0gU3RyaW5nXG4gKi9cblJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFID0ge1xuICAgIERFRkFVTFQ6ICAgICd0ZXh0JyxcbiAgICBCVUZGRVI6ICAgICAnYXJyYXlidWZmZXInLFxuICAgIEJMT0I6ICAgICAgICdibG9iJyxcbiAgICBET0NVTUVOVDogICAnZG9jdW1lbnQnLFxuICAgIEpTT046ICAgICAgICdqc29uJyxcbiAgICBURVhUOiAgICAgICAndGV4dCdcbn07XG5cblJlc291cmNlLl9sb2FkVHlwZU1hcCA9IHtcbiAgICAnZ2lmJzogICAgICBSZXNvdXJjZS5MT0FEX1RZUEUuSU1BR0UsXG4gICAgJ3BuZyc6ICAgICAgUmVzb3VyY2UuTE9BRF9UWVBFLklNQUdFLFxuICAgICdibXAnOiAgICAgIFJlc291cmNlLkxPQURfVFlQRS5JTUFHRSxcbiAgICAnanBnJzogICAgICBSZXNvdXJjZS5MT0FEX1RZUEUuSU1BR0UsXG4gICAgJ2pwZWcnOiAgICAgUmVzb3VyY2UuTE9BRF9UWVBFLklNQUdFLFxuICAgICd0aWYnOiAgICAgIFJlc291cmNlLkxPQURfVFlQRS5JTUFHRSxcbiAgICAndGlmZic6ICAgICBSZXNvdXJjZS5MT0FEX1RZUEUuSU1BR0UsXG4gICAgJ3dlYnAnOiAgICAgUmVzb3VyY2UuTE9BRF9UWVBFLklNQUdFLFxuICAgICd0Z2EnOiAgICAgIFJlc291cmNlLkxPQURfVFlQRS5JTUFHRVxufTtcblxuUmVzb3VyY2UuX3hoclR5cGVNYXAgPSB7XG4gICAgLy8geG1sXG4gICAgJ3hodG1sJzogICAgUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuRE9DVU1FTlQsXG4gICAgJ2h0bWwnOiAgICAgUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuRE9DVU1FTlQsXG4gICAgJ2h0bSc6ICAgICAgUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuRE9DVU1FTlQsXG4gICAgJ3htbCc6ICAgICAgUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuRE9DVU1FTlQsXG4gICAgJ3RteCc6ICAgICAgUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuRE9DVU1FTlQsXG4gICAgJ3RzeCc6ICAgICAgUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuRE9DVU1FTlQsXG4gICAgJ3N2Zyc6ICAgICAgUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuRE9DVU1FTlQsXG5cbiAgICAvLyBpbWFnZXNcbiAgICAnZ2lmJzogICAgICBSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRS5CTE9CLFxuICAgICdwbmcnOiAgICAgIFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkJMT0IsXG4gICAgJ2JtcCc6ICAgICAgUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuQkxPQixcbiAgICAnanBnJzogICAgICBSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRS5CTE9CLFxuICAgICdqcGVnJzogICAgIFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkJMT0IsXG4gICAgJ3RpZic6ICAgICAgUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuQkxPQixcbiAgICAndGlmZic6ICAgICBSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRS5CTE9CLFxuICAgICd3ZWJwJzogICAgIFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkJMT0IsXG4gICAgJ3RnYSc6ICAgICAgUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuQkxPQixcblxuICAgIC8vIGpzb25cbiAgICAnanNvbic6ICAgICBSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRS5KU09OLFxuXG4gICAgLy8gdGV4dFxuICAgICd0ZXh0JzogICAgIFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLlRFWFQsXG4gICAgJ3R4dCc6ICAgICAgUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuVEVYVFxufTtcblxuLyoqXG4gKiBTZXRzIHRoZSBsb2FkIHR5cGUgdG8gYmUgdXNlZCBmb3IgYSBzcGVjaWZpYyBleHRlbnNpb24uXG4gKlxuICogQHN0YXRpY1xuICogQHBhcmFtIGV4dG5hbWUge3N0cmluZ30gVGhlIGV4dGVuc2lvbiB0byBzZXQgdGhlIHR5cGUgZm9yLCBlLmcuIFwicG5nXCIgb3IgXCJmbnRcIlxuICogQHBhcmFtIGxvYWRUeXBlIHtSZXNvdXJjZS5MT0FEX1RZUEV9IFRoZSBsb2FkIHR5cGUgdG8gc2V0IGl0IHRvLlxuICovXG5SZXNvdXJjZS5zZXRFeHRlbnNpb25Mb2FkVHlwZSA9IGZ1bmN0aW9uIChleHRuYW1lLCBsb2FkVHlwZSkge1xuICAgIHNldEV4dE1hcChSZXNvdXJjZS5fbG9hZFR5cGVNYXAsIGV4dG5hbWUsIGxvYWRUeXBlKTtcbn07XG5cbi8qKlxuICogU2V0cyB0aGUgbG9hZCB0eXBlIHRvIGJlIHVzZWQgZm9yIGEgc3BlY2lmaWMgZXh0ZW5zaW9uLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBwYXJhbSBleHRuYW1lIHtzdHJpbmd9IFRoZSBleHRlbnNpb24gdG8gc2V0IHRoZSB0eXBlIGZvciwgZS5nLiBcInBuZ1wiIG9yIFwiZm50XCJcbiAqIEBwYXJhbSB4aHJUeXBlIHtSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRX0gVGhlIHhociB0eXBlIHRvIHNldCBpdCB0by5cbiAqL1xuUmVzb3VyY2Uuc2V0RXh0ZW5zaW9uWGhyVHlwZSA9IGZ1bmN0aW9uIChleHRuYW1lLCB4aHJUeXBlKSB7XG4gICAgc2V0RXh0TWFwKFJlc291cmNlLl94aHJUeXBlTWFwLCBleHRuYW1lLCB4aHJUeXBlKTtcbn07XG5cbmZ1bmN0aW9uIHNldEV4dE1hcChtYXAsIGV4dG5hbWUsIHZhbCkge1xuICAgIGlmIChleHRuYW1lICYmIGV4dG5hbWUuaW5kZXhPZignLicpID09PSAwKSB7XG4gICAgICAgIGV4dG5hbWUgPSBleHRuYW1lLnN1YnN0cmluZygxKTtcbiAgICB9XG5cbiAgICBpZiAoIWV4dG5hbWUpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIG1hcFtleHRuYW1lXSA9IHZhbDtcbn1cbiIsIm1vZHVsZS5leHBvcnRzID0ge1xuXG4gICAgLy8gcHJpdmF0ZSBwcm9wZXJ0eVxuICAgIF9rZXlTdHI6IFwiQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkrLz1cIixcblxuICAgIGVuY29kZUJpbmFyeTogZnVuY3Rpb24gKGlucHV0KSB7XG4gICAgICAgIHZhciBvdXRwdXQgPSBcIlwiO1xuICAgICAgICB2YXIgYnl0ZWJ1ZmZlcjtcbiAgICAgICAgdmFyIGVuY29kZWRDaGFySW5kZXhlcyA9IG5ldyBBcnJheSg0KTtcbiAgICAgICAgdmFyIGlueCA9IDA7XG4gICAgICAgIHZhciBqbnggPSAwO1xuICAgICAgICB2YXIgcGFkZGluZ0J5dGVzID0gMDtcblxuICAgICAgICB3aGlsZSAoaW54IDwgaW5wdXQubGVuZ3RoKSB7XG4gICAgICAgICAgICAvLyBGaWxsIGJ5dGUgYnVmZmVyIGFycmF5XG4gICAgICAgICAgICBieXRlYnVmZmVyID0gbmV3IEFycmF5KDMpO1xuICAgICAgICAgICAgZm9yIChqbnggPSAwOyBqbnggPCBieXRlYnVmZmVyLmxlbmd0aDsgam54KyspIHtcbiAgICAgICAgICAgICAgICBpZiAoaW54IDwgaW5wdXQubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIHRocm93IGF3YXkgaGlnaC1vcmRlciBieXRlLCBhcyBkb2N1bWVudGVkIGF0OlxuICAgICAgICAgICAgICAgICAgICAvLyBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9Fbi9Vc2luZ19YTUxIdHRwUmVxdWVzdCNIYW5kbGluZ19iaW5hcnlfZGF0YVxuICAgICAgICAgICAgICAgICAgICBieXRlYnVmZmVyW2pueF0gPSBpbnB1dC5jaGFyQ29kZUF0KGlueCsrKSAmIDB4ZmY7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBieXRlYnVmZmVyW2pueF0gPSAwO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gR2V0IGVhY2ggZW5jb2RlZCBjaGFyYWN0ZXIsIDYgYml0cyBhdCBhIHRpbWVcbiAgICAgICAgICAgIC8vIGluZGV4IDE6IGZpcnN0IDYgYml0c1xuICAgICAgICAgICAgZW5jb2RlZENoYXJJbmRleGVzWzBdID0gYnl0ZWJ1ZmZlclswXSA+PiAyO1xuICAgICAgICAgICAgLy8gaW5kZXggMjogc2Vjb25kIDYgYml0cyAoMiBsZWFzdCBzaWduaWZpY2FudCBiaXRzIGZyb20gaW5wdXQgYnl0ZSAxICsgNCBtb3N0IHNpZ25pZmljYW50IGJpdHMgZnJvbSBieXRlIDIpXG4gICAgICAgICAgICBlbmNvZGVkQ2hhckluZGV4ZXNbMV0gPSAoKGJ5dGVidWZmZXJbMF0gJiAweDMpIDw8IDQpIHwgKGJ5dGVidWZmZXJbMV0gPj4gNCk7XG4gICAgICAgICAgICAvLyBpbmRleCAzOiB0aGlyZCA2IGJpdHMgKDQgbGVhc3Qgc2lnbmlmaWNhbnQgYml0cyBmcm9tIGlucHV0IGJ5dGUgMiArIDIgbW9zdCBzaWduaWZpY2FudCBiaXRzIGZyb20gYnl0ZSAzKVxuICAgICAgICAgICAgZW5jb2RlZENoYXJJbmRleGVzWzJdID0gKChieXRlYnVmZmVyWzFdICYgMHgwZikgPDwgMikgfCAoYnl0ZWJ1ZmZlclsyXSA+PiA2KTtcbiAgICAgICAgICAgIC8vIGluZGV4IDM6IGZvcnRoIDYgYml0cyAoNiBsZWFzdCBzaWduaWZpY2FudCBiaXRzIGZyb20gaW5wdXQgYnl0ZSAzKVxuICAgICAgICAgICAgZW5jb2RlZENoYXJJbmRleGVzWzNdID0gYnl0ZWJ1ZmZlclsyXSAmIDB4M2Y7XG5cbiAgICAgICAgICAgIC8vIERldGVybWluZSB3aGV0aGVyIHBhZGRpbmcgaGFwcGVuZWQsIGFuZCBhZGp1c3QgYWNjb3JkaW5nbHlcbiAgICAgICAgICAgIHBhZGRpbmdCeXRlcyA9IGlueCAtIChpbnB1dC5sZW5ndGggLSAxKTtcbiAgICAgICAgICAgIHN3aXRjaCAocGFkZGluZ0J5dGVzKSB7XG4gICAgICAgICAgICAgICAgY2FzZSAyOlxuICAgICAgICAgICAgICAgICAgICAvLyBTZXQgbGFzdCAyIGNoYXJhY3RlcnMgdG8gcGFkZGluZyBjaGFyXG4gICAgICAgICAgICAgICAgICAgIGVuY29kZWRDaGFySW5kZXhlc1szXSA9IDY0O1xuICAgICAgICAgICAgICAgICAgICBlbmNvZGVkQ2hhckluZGV4ZXNbMl0gPSA2NDtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICAgICAgICAgIC8vIFNldCBsYXN0IGNoYXJhY3RlciB0byBwYWRkaW5nIGNoYXJcbiAgICAgICAgICAgICAgICAgICAgZW5jb2RlZENoYXJJbmRleGVzWzNdID0gNjQ7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7IC8vIE5vIHBhZGRpbmcgLSBwcm9jZWVkXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIE5vdyB3ZSB3aWxsIGdyYWIgZWFjaCBhcHByb3ByaWF0ZSBjaGFyYWN0ZXIgb3V0IG9mIG91ciBrZXlzdHJpbmdcbiAgICAgICAgICAgIC8vIGJhc2VkIG9uIG91ciBpbmRleCBhcnJheSBhbmQgYXBwZW5kIGl0IHRvIHRoZSBvdXRwdXQgc3RyaW5nXG4gICAgICAgICAgICBmb3IgKGpueCA9IDA7IGpueCA8IGVuY29kZWRDaGFySW5kZXhlcy5sZW5ndGg7IGpueCsrKSB7XG4gICAgICAgICAgICAgICAgb3V0cHV0ICs9IHRoaXMuX2tleVN0ci5jaGFyQXQoZW5jb2RlZENoYXJJbmRleGVzW2pueF0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBvdXRwdXQ7XG4gICAgfVxufTtcbiIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9Mb2FkZXInKTtcblxubW9kdWxlLmV4cG9ydHMuUmVzb3VyY2UgPSByZXF1aXJlKCcuL1Jlc291cmNlJyk7XG5cbm1vZHVsZS5leHBvcnRzLm1pZGRsZXdhcmUgPSB7XG4gICAgY2FjaGluZzoge1xuICAgICAgICBtZW1vcnk6IHJlcXVpcmUoJy4vbWlkZGxld2FyZXMvY2FjaGluZy9tZW1vcnknKVxuICAgIH0sXG4gICAgcGFyc2luZzoge1xuICAgICAgICBibG9iOiByZXF1aXJlKCcuL21pZGRsZXdhcmVzL3BhcnNpbmcvYmxvYicpXG4gICAgfVxufTtcbiIsIi8vIGEgc2ltcGxlIGluLW1lbW9yeSBjYWNoZSBmb3IgcmVzb3VyY2VzXG52YXIgY2FjaGUgPSB7fTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChyZXNvdXJjZSwgbmV4dCkge1xuICAgICAgICAvLyBpZiBjYWNoZWQsIHRoZW4gc2V0IGRhdGEgYW5kIGNvbXBsZXRlIHRoZSByZXNvdXJjZVxuICAgICAgICBpZiAoY2FjaGVbcmVzb3VyY2UudXJsXSkge1xuICAgICAgICAgICAgcmVzb3VyY2UuZGF0YSA9IGNhY2hlW3Jlc291cmNlLnVybF07XG4gICAgICAgICAgICByZXNvdXJjZS5jb21wbGV0ZSgpO1xuICAgICAgICB9XG4gICAgICAgIC8vIGlmIG5vdCBjYWNoZWQsIHdhaXQgZm9yIGNvbXBsZXRlIGFuZCBzdG9yZSBpdCBpbiB0aGUgY2FjaGUuXG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcmVzb3VyY2Uub25jZSgnY29tcGxldGUnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICBjYWNoZVt0aGlzLnVybF0gPSB0aGlzLmRhdGE7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBcbiAgICAgICAgbmV4dCgpO1xuICAgIH07XG59O1xuIiwidmFyIFJlc291cmNlID0gcmVxdWlyZSgnLi4vLi4vUmVzb3VyY2UnKSxcbiAgICBiNjQgPSByZXF1aXJlKCcuLi8uLi9iNjQnKTtcblxud2luZG93LlVSTCA9IHdpbmRvdy5VUkwgfHwgd2luZG93LndlYmtpdFVSTDtcblxuLy8gYSBtaWRkbGV3YXJlIGZvciB0cmFuc2Zvcm1pbmcgWEhSIGxvYWRlZCBCbG9icyBpbnRvIG1vcmUgdXNlZnVsIG9iamVjdHNcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChyZXNvdXJjZSwgbmV4dCkge1xuICAgICAgICBpZiAoIXJlc291cmNlLmRhdGEpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXh0KCk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBpZiB0aGlzIHdhcyBhbiBYSFIgbG9hZCBvZiBhIGJsb2JcbiAgICAgICAgaWYgKHJlc291cmNlLnhociAmJiByZXNvdXJjZS54aHJUeXBlID09PSBSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRS5CTE9CKSB7XG4gICAgICAgICAgICAvLyBpZiB0aGVyZSBpcyBubyBibG9iIHN1cHBvcnQgd2UgcHJvYmFibHkgZ290IGEgYmluYXJ5IHN0cmluZyBiYWNrXG4gICAgICAgICAgICBpZiAoIXdpbmRvdy5CbG9iIHx8IHR5cGVvZiByZXNvdXJjZS5kYXRhID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgICAgIHZhciB0eXBlID0gcmVzb3VyY2UueGhyLmdldFJlc3BvbnNlSGVhZGVyKCdjb250ZW50LXR5cGUnKTtcblxuICAgICAgICAgICAgICAgIC8vIHRoaXMgaXMgYW4gaW1hZ2UsIGNvbnZlcnQgdGhlIGJpbmFyeSBzdHJpbmcgaW50byBhIGRhdGEgdXJsXG4gICAgICAgICAgICAgICAgaWYgKHR5cGUgJiYgdHlwZS5pbmRleE9mKCdpbWFnZScpID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc291cmNlLmRhdGEgPSBuZXcgSW1hZ2UoKTtcbiAgICAgICAgICAgICAgICAgICAgcmVzb3VyY2UuZGF0YS5zcmMgPSAnZGF0YTonICsgdHlwZSArICc7YmFzZTY0LCcgKyBiNjQuZW5jb2RlQmluYXJ5KHJlc291cmNlLnhoci5yZXNwb25zZVRleHQpO1xuXG4gICAgICAgICAgICAgICAgICAgIHJlc291cmNlLmlzSW1hZ2UgPSB0cnVlO1xuXG4gICAgICAgICAgICAgICAgICAgIC8vIHdhaXQgdW50aWwgdGhlIGltYWdlIGxvYWRzIGFuZCB0aGVuIGNhbGxiYWNrXG4gICAgICAgICAgICAgICAgICAgIHJlc291cmNlLmRhdGEub25sb2FkID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVzb3VyY2UuZGF0YS5vbmxvYWQgPSBudWxsO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBuZXh0KCk7XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gaWYgY29udGVudCB0eXBlIHNheXMgdGhpcyBpcyBhbiBpbWFnZSwgdGhlbiB3ZSBzaG91bGQgdHJhbnNmb3JtIHRoZSBibG9iIGludG8gYW4gSW1hZ2Ugb2JqZWN0XG4gICAgICAgICAgICBlbHNlIGlmIChyZXNvdXJjZS5kYXRhLnR5cGUuaW5kZXhPZignaW1hZ2UnKSA9PT0gMCkge1xuICAgICAgICAgICAgICAgIHZhciBzcmMgPSBVUkwuY3JlYXRlT2JqZWN0VVJMKHJlc291cmNlLmRhdGEpO1xuXG4gICAgICAgICAgICAgICAgcmVzb3VyY2UuYmxvYiA9IHJlc291cmNlLmRhdGE7XG4gICAgICAgICAgICAgICAgcmVzb3VyY2UuZGF0YSA9IG5ldyBJbWFnZSgpO1xuICAgICAgICAgICAgICAgIHJlc291cmNlLmRhdGEuc3JjID0gc3JjO1xuXG4gICAgICAgICAgICAgICAgcmVzb3VyY2UuaXNJbWFnZSA9IHRydWU7XG5cbiAgICAgICAgICAgICAgICAvLyBjbGVhbnVwIHRoZSBubyBsb25nZXIgdXNlZCBibG9iIGFmdGVyIHRoZSBpbWFnZSBsb2Fkc1xuICAgICAgICAgICAgICAgIHJlc291cmNlLmRhdGEub25sb2FkID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICBVUkwucmV2b2tlT2JqZWN0VVJMKHNyYyk7XG4gICAgICAgICAgICAgICAgICAgIHJlc291cmNlLmRhdGEub25sb2FkID0gbnVsbDtcblxuICAgICAgICAgICAgICAgICAgICBuZXh0KCk7XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIG5leHQoKTtcbiAgICAgICAgfVxuICAgIH07XG59O1xuIiwibW9kdWxlLmV4cG9ydHM9e1xuICBcIm5hbWVcIjogXCJwaXhpLmpzXCIsXG4gIFwidmVyc2lvblwiOiBcIjMuMC4xMC1kZXZcIixcbiAgXCJkZXNjcmlwdGlvblwiOiBcIlBpeGkuanMgaXMgYSBmYXN0IGxpZ2h0d2VpZ2h0IDJEIGxpYnJhcnkgdGhhdCB3b3JrcyBhY3Jvc3MgYWxsIGRldmljZXMuXCIsXG4gIFwiYXV0aG9yXCI6IFwiTWF0IEdyb3Zlc1wiLFxuICBcImNvbnRyaWJ1dG9yc1wiOiBbXG4gICAgXCJDaGFkIEVuZ2xlciA8Y2hhZEBwYW50aGVyZGV2LmNvbT5cIixcbiAgICBcIlJpY2hhcmQgRGF2ZXkgPHJkYXZleUBnbWFpbC5jb20+XCJcbiAgXSxcbiAgXCJtYWluXCI6IFwiLi9zcmMvaW5kZXguanNcIixcbiAgXCJob21lcGFnZVwiOiBcImh0dHA6Ly9nb29kYm95ZGlnaXRhbC5jb20vXCIsXG4gIFwiYnVnc1wiOiBcImh0dHBzOi8vZ2l0aHViLmNvbS9waXhpanMvcGl4aS5qcy9pc3N1ZXNcIixcbiAgXCJsaWNlbnNlXCI6IFwiTUlUXCIsXG4gIFwicmVwb3NpdG9yeVwiOiB7XG4gICAgXCJ0eXBlXCI6IFwiZ2l0XCIsXG4gICAgXCJ1cmxcIjogXCJodHRwczovL2dpdGh1Yi5jb20vcGl4aWpzL3BpeGkuanMuZ2l0XCJcbiAgfSxcbiAgXCJzY3JpcHRzXCI6IHtcbiAgICBcInN0YXJ0XCI6IFwiZ3VscCAmJiBndWxwIHdhdGNoXCIsXG4gICAgXCJ0ZXN0XCI6IFwiZ3VscCAmJiB0ZXN0ZW0gY2lcIixcbiAgICBcImJ1aWxkXCI6IFwiZ3VscFwiLFxuICAgIFwiZG9jc1wiOiBcImpzZG9jIC1jIC4vZ3VscC91dGlsL2pzZG9jLmNvbmYuanNvbiAtUiBSRUFETUUubWRcIlxuICB9LFxuICBcImZpbGVzXCI6IFtcbiAgICBcImJpbi9cIixcbiAgICBcInNyYy9cIixcbiAgICBcIkNPTlRSSUJVVElORy5tZFwiLFxuICAgIFwiTElDRU5TRVwiLFxuICAgIFwicGFja2FnZS5qc29uXCIsXG4gICAgXCJSRUFETUUubWRcIlxuICBdLFxuICBcImRlcGVuZGVuY2llc1wiOiB7XG4gICAgXCJhc3luY1wiOiBcIl4xLjUuMFwiLFxuICAgIFwiYnJmc1wiOiBcIl4xLjQuMVwiLFxuICAgIFwiZWFyY3V0XCI6IFwiXjIuMC43XCIsXG4gICAgXCJldmVudGVtaXR0ZXIzXCI6IFwiXjEuMS4xXCIsXG4gICAgXCJvYmplY3QtYXNzaWduXCI6IFwiXjQuMC4xXCIsXG4gICAgXCJwaXhpLWdsLWNvcmVcIjogXCJnaXQraHR0cHM6Ly9naXRodWIuY29tL0dvb2RCb3lEaWdpdGFsL3BpeGktZ2wtY29yZS5naXRcIixcbiAgICBcInJlc291cmNlLWxvYWRlclwiOiBcIl4xLjYuNFwiXG4gIH0sXG4gIFwiZGV2RGVwZW5kZW5jaWVzXCI6IHtcbiAgICBcImJyb3dzZXJpZnlcIjogXCJeMTEuMS4wXCIsXG4gICAgXCJjaGFpXCI6IFwiXjMuMi4wXCIsXG4gICAgXCJkZWxcIjogXCJeMi4wLjJcIixcbiAgICBcImd1bHBcIjogXCJeMy45LjBcIixcbiAgICBcImd1bHAtY2FjaGVkXCI6IFwiXjEuMS4wXCIsXG4gICAgXCJndWxwLWNvbmNhdFwiOiBcIl4yLjYuMFwiLFxuICAgIFwiZ3VscC1kZWJ1Z1wiOiBcIl4yLjEuMFwiLFxuICAgIFwiZ3VscC1oZWFkZXJcIjogXCJeMS43LjFcIixcbiAgICBcImd1bHAtanNoaW50XCI6IFwiXjEuMTEuMlwiLFxuICAgIFwiZ3VscC1taXJyb3JcIjogXCJeMC40LjBcIixcbiAgICBcImd1bHAtcGx1bWJlclwiOiBcIl4xLjAuMVwiLFxuICAgIFwiZ3VscC1yZW5hbWVcIjogXCJeMS4yLjJcIixcbiAgICBcImd1bHAtc291cmNlbWFwc1wiOiBcIl4xLjUuMlwiLFxuICAgIFwiZ3VscC11Z2xpZnlcIjogXCJeMS40LjFcIixcbiAgICBcImd1bHAtdXRpbFwiOiBcIl4zLjAuNlwiLFxuICAgIFwiamFndWFyanMtanNkb2NcIjogXCJnaXQraHR0cHM6Ly9naXRodWIuY29tL2Rhdmlkc2hpbWpzL2phZ3VhcmpzLWpzZG9jLmdpdFwiLFxuICAgIFwianNkb2NcIjogXCJeMy4zLjJcIixcbiAgICBcImpzaGludC1zdW1tYXJ5XCI6IFwiXjAuNC4wXCIsXG4gICAgXCJtaW5pbWlzdFwiOiBcIl4xLjIuMFwiLFxuICAgIFwibW9jaGFcIjogXCJeMi4zLjJcIixcbiAgICBcInJlcXVpcmUtZGlyXCI6IFwiXjAuMy4wXCIsXG4gICAgXCJydW4tc2VxdWVuY2VcIjogXCJeMS4xLjJcIixcbiAgICBcInRlc3RlbVwiOiBcIl4wLjkuNFwiLFxuICAgIFwidmlueWwtYnVmZmVyXCI6IFwiXjEuMC4wXCIsXG4gICAgXCJ2aW55bC1zb3VyY2Utc3RyZWFtXCI6IFwiXjEuMS4wXCIsXG4gICAgXCJ3YXRjaGlmeVwiOiBcIl4zLjQuMFwiXG4gIH0sXG4gIFwiYnJvd3NlcmlmeVwiOiB7XG4gICAgXCJ0cmFuc2Zvcm1cIjogW1xuICAgICAgXCJicmZzXCJcbiAgICBdXG4gIH1cbn1cbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vY29yZScpO1xuXG4vLyBhZGQgc29tZSBleHRyYSB2YXJpYWJsZXMgdG8gdGhlIGNvbnRhaW5lci4uXG5PYmplY3QuYXNzaWduKFxuICAgIGNvcmUuRGlzcGxheU9iamVjdC5wcm90b3R5cGUsXG4gICAgcmVxdWlyZSgnLi9hY2Nlc3NpYmxlVGFyZ2V0Jylcbik7XG5cblxuLyoqXG4gKiBUaGUgQWNjZXNzaWJpbGl0eSBtYW5hZ2VyIHJlYWNyZWF0ZXMgdGhlIGFiaWxpdHkgdG8gdGFiIGFuZCBhbmQgaGF2ZSBjb250ZW50IHJlYWQgYnkgc2NyZWVuIHJlYWRlcnMuIFRoaXMgaXMgdmVyeSBpbXBvcnRhbnQgYXMgaXQgY2FuIHBvc3NpYmx5IGhlbHAgcGVvcGxlIHdpdGggZGlzYWJpbGl0aWVzIGFjY2VzcyBwaXhpIGNvbnRlbnQuXG4gKiBNdWNoIGxpa2UgaW50ZXJhY3Rpb24gYW55IERpc3BsYXlPYmplY3QgY2FuIGJlIG1hZGUgYWNjZXNzaWJsZS4gVGhpcyBtYW5hZ2VyIHdpbGwgbWFwIHRoZSBldmVudHMgYXMgaWYgdGhlIG1vdXNlIHdhcyBiZWluZyB1c2VkLCBtaW5pbWl6aW5nIHRoZSBlZmZlcm90IHJlcXVpcmVkIHRvIGltcGxlbWVudC5cbiAqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuQ2FudmFzUmVuZGVyZXJ8UElYSS5XZWJHTFJlbmRlcmVyfSBBIHJlZmVyZW5jZSB0byB0aGUgY3VycmVudCByZW5kZXJlclxuICovXG5mdW5jdGlvbiBBY2Nlc3NpYmlsaXR5TWFuYWdlcihyZW5kZXJlcilcbntcblx0Ly8gZmlyc3Qgd2UgY3JlYXRlIGEgZGl2IHRoYXQgd2lsbCBzaXQgb3ZlciB0aGUgcGl4aSBlbGVtZW50LiBUaGlzIGlzIHdoZXJlIHRoZSBkaXYgb3ZlcmxheXMgd2lsbCBnby5cbiAgICB2YXIgZGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgXG4gICAgZGl2LnN0eWxlLndpZHRoID0gMTAwICsgJ3B4JztcbiAgICBkaXYuc3R5bGUuaGVpZ2h0ID0gMTAwICsgJ3B4JztcbiAgICBkaXYuc3R5bGUucG9zaXRpb24gPSAnYWJzb2x1dGUnO1xuICAgIGRpdi5zdHlsZS50b3AgPSAwO1xuICAgIGRpdi5zdHlsZS5sZWZ0ID0gMDtcbiAgIC8vXG4gICAgZGl2LnN0eWxlLnpJbmRleCA9IDI7XG4gICBcdFxuICAgXHQvKipcbiAgIFx0ICogVGhpcyBpcyB0aGUgZG9tIGVsZW1lbnQgdGhhdCB3aWxsIHNpdCBvdmVyIHRoZSBwaXhpIGVsZW1lbnQuIFRoaXMgaXMgd2hlcmUgdGhlIGRpdiBvdmVybGF5cyB3aWxsIGdvLlxuICAgXHQgKiBcbiAgIFx0ICogQHR5cGUge0hUTUxFbGVtZW50fVxuICAgXHQgKiBAcHJpdmF0ZVxuICAgXHQgKi9cbiAgIFx0dGhpcy5kaXYgPSBkaXY7XG5cbiAgIFx0LyoqXG4gICBcdCAqIEEgc2ltcGxlIHBvb2wgZm9yIHN0b3JpbmcgZGl2cy5cbiAgIFx0ICogXG4gICBcdCAqIEB0eXBlIHtBcnJheX1cbiAgIFx0ICogQHByaXZhdGVcbiAgIFx0ICovXG4gXHR0aGlzLnBvb2wgPSBbXTtcblxuIFx0LyoqXG4gXHQgKiBUaGlzIGlzIGEgdGljayB1c2VkIHRvIGNoZWNrIGlmIGFuIG9iamVjdCBpcyBubyBsb25nZXIgYmVpbmcgcmVuZGVyZWQuXG4gXHQgKiBcbiBcdCAqIEB0eXBlIHtOdW1iZXJ9XG4gXHQgKiBAcHJpdmF0ZVxuIFx0ICovXG4gICBcdHRoaXMucmVuZGVySWQgPSAwO1xuXG4gICBcdC8qKlxuICAgXHQgKiBTZXR0aW5nIHRoaXMgdG8gdHJ1ZSB3aWxsIHZpc3VhbGx5IHNob3cgdGhlIGRpdnNcbiAgIFx0ICogXG4gICBcdCAqIEB0eXBlIHtCb29sZWFufVxuICAgXHQgKi9cbiAgIFx0dGhpcy5kZWJ1ZyA9IGZhbHNlO1xuXG4gIFx0LyoqXG4gICAgICogVGhlIHJlbmRlcmVyIHRoaXMgYWNjZXNzaWJpbGl0eSBtYW5hZ2VyIHdvcmtzIGZvci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuU3lzdGVtUmVuZGVyZXJ9XG4gICAgICovXG4gICBcdHRoaXMucmVuZGVyZXIgPSByZW5kZXJlcjtcblxuICAgXHQvKipcbiAgICAgKiBUaGUgYXJyYXkgb2YgY3VycmVudGx5IGFjdGl2ZSBhY2Nlc3NpYmxlIGl0ZW1zLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7QXJyYXl9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgIFx0dGhpcy5jaGlsZHJlbiA9IFtdO1xuICAgXHRcbiAgIFx0LyoqXG4gICAgICogcHJlIGJpbmQgdGhlIGZ1bmN0aW9ucy4uXG4gICAgICovXG4gICBcdHRoaXMuX29uS2V5RG93biA9IHRoaXMuX29uS2V5RG93bi5iaW5kKHRoaXMpO1xuICAgXHR0aGlzLl9vbk1vdXNlTW92ZSA9IHRoaXMuX29uTW91c2VNb3ZlLmJpbmQodGhpcyk7XG4gICBcdFxuICAgXHQvKipcbiAgICAgKiBzdG9yZXMgdGhlIHN0YXRlIG9mIHRoZSBtYW5hZ2VyLiBJZiB0aGVyZSBhcmUgbm8gYWNjZXNzaWJsZSBvYmplY3RzIG9yIHRoZSBtb3VzZSBpcyBtb3ZpbmcgdGhlIHdpbGwgYmUgZmFsc2UuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtBcnJheX1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgXHR0aGlzLmlzQWN0aXZlID0gZmFsc2U7XG5cblxuICAgXHQvLyBsZXQgbGlzdGVuIGZvciB0YWIuLiBvbmNlIHByZXNzZWQgd2UgY2FuIGZpcmUgdXAgYW5kIHNob3cgdGhlIGFjY2Vzc2liaWxpdHkgbGF5ZXJcbiAgIFx0d2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLCB0aGlzLl9vbktleURvd24sIGZhbHNlKTtcbn1cblxuXG5BY2Nlc3NpYmlsaXR5TWFuYWdlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBBY2Nlc3NpYmlsaXR5TWFuYWdlcjtcbm1vZHVsZS5leHBvcnRzID0gQWNjZXNzaWJpbGl0eU1hbmFnZXI7XG5cbi8qKlxuICogQWN0aXZhdGluZyB3aWxsIGNhdXNlIHRoZSBBY2Nlc3NpYmlsaXR5IGxheWVyIHRvIGJlIHNob3duLiBUaGlzIGlzIGNhbGxlZCB3aGVuIGEgdXNlciBwcmVzZXMgdGhlIHRhYiBrZXlcbiAqIEBwcml2YXRlXG4gKi9cbkFjY2Vzc2liaWxpdHlNYW5hZ2VyLnByb3RvdHlwZS5hY3RpdmF0ZSA9IGZ1bmN0aW9uKClcbntcblx0aWYodGhpcy5pc0FjdGl2ZSlcblx0e1xuXHRcdHJldHVybjtcblx0fVxuXG5cdHRoaXMuaXNBY3RpdmUgPSB0cnVlO1xuXG5cdHdpbmRvdy5kb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdtb3VzZW1vdmUnLCB0aGlzLl9vbk1vdXNlTW92ZSwgdHJ1ZSk7XG5cdHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdrZXlkb3duJywgdGhpcy5fb25LZXlEb3duLCBmYWxzZSk7XG5cblx0dGhpcy5yZW5kZXJlci5vbigncG9zdHJlbmRlcicsIHRoaXMudXBkYXRlLCB0aGlzKTtcblxuXHR0aGlzLnJlbmRlcmVyLnZpZXcucGFyZW50Tm9kZS5hcHBlbmRDaGlsZCh0aGlzLmRpdik7XHRcbn07XG5cbi8qKlxuICogRGVhY3RpdmF0aW5nIHdpbGwgY2F1c2UgdGhlIEFjY2Vzc2liaWxpdHkgbGF5ZXIgdG8gYmUgaGlkZGVuLiBUaGlzIGlzIGNhbGxlZCB3aGVuIGEgdXNlciBtb3ZlcyB0aGUgbW91c2VcbiAqIEBwcml2YXRlXG4gKi9cbkFjY2Vzc2liaWxpdHlNYW5hZ2VyLnByb3RvdHlwZS5kZWFjdGl2YXRlID0gZnVuY3Rpb24oKVxue1xuXHRpZighdGhpcy5pc0FjdGl2ZSlcblx0e1xuXHRcdHJldHVybjtcblx0fVxuXG5cdHRoaXMuaXNBY3RpdmUgPSBmYWxzZTtcblxuXHR3aW5kb3cuZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignbW91c2Vtb3ZlJywgdGhpcy5fb25Nb3VzZU1vdmUpO1xuXHR3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsIHRoaXMuX29uS2V5RG93biwgZmFsc2UpO1xuXG5cdHRoaXMucmVuZGVyZXIub2ZmKCdwb3N0cmVuZGVyJywgdGhpcy51cGRhdGUpO1xuXG5cdHRoaXMuZGl2LnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodGhpcy5kaXYpO1xuXG59O1xuXG4vKipcbiAqIFRoaXMgcmVjdXJzaXZlIGZ1bmN0aW9uIHdpbGwgcnVuIHRocm91Z2h0IGhlIHNjZW5lIGdyYXBoIGFuZCBhZGQgYW55IG5ldyBhY2Nlc3NpYmxlIG9iamVjdHMgdG8gdGhlIERPTSBsYXllci5cbiAqIEBwYXJhbSBlbGVtZW50IHtQSVhJLkNvbnRhaW5lcnxQSVhJLlNwcml0ZXxQSVhJLmV4dHJhcy5UaWxpbmdTcHJpdGV9IHRoZSBEaXNwbGF5T2JqZWN0IHRvIGNoZWNrLlxuICogQHByaXZhdGVcbiAqL1xuQWNjZXNzaWJpbGl0eU1hbmFnZXIucHJvdG90eXBlLnVwZGF0ZUFjY2Vzc2libGVPYmplY3RzID0gZnVuY3Rpb24oZGlzcGxheU9iamVjdClcbntcblx0aWYoIWRpc3BsYXlPYmplY3QudmlzaWJsZSlcblx0e1xuXHRcdHJldHVybjtcblx0fVxuXG5cdGlmKGRpc3BsYXlPYmplY3QuYWNjZXNzaWJsZSAmJiBkaXNwbGF5T2JqZWN0LmludGVyYWN0aXZlKVxuXHR7XG5cdFx0aWYoIWRpc3BsYXlPYmplY3QuX2FjY2Vzc2libGVBY3RpdmUpXG5cdFx0e1xuXHRcdFx0dGhpcy5hZGRDaGlsZChkaXNwbGF5T2JqZWN0KTtcblx0XHR9XG5cdCAgIFx0XG5cdCAgIFx0ZGlzcGxheU9iamVjdC5yZW5kZXJJZCA9IHRoaXMucmVuZGVySWQ7XG5cdH1cblxuXHR2YXIgY2hpbGRyZW4gPSBkaXNwbGF5T2JqZWN0LmNoaWxkcmVuO1xuXG5cdGZvciAodmFyIGkgPSBjaGlsZHJlbi5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuXHRcdFxuXHRcdHRoaXMudXBkYXRlQWNjZXNzaWJsZU9iamVjdHMoY2hpbGRyZW5baV0pO1xuXHR9XG59O1xuXG5cbi8qKlxuICogQmVmb3JlIGVhY2ggcmVuZGVyIHRoaXMgZnVuY3Rpb24gd2lsbCBlbnN1cmUgdGhhdCBhbGwgZGl2cyBhcmUgbWFwcGVkIGNvcnJlY3RseSB0byB0aGVpciBEaXNwbGF5T2JqZWN0c1xuICogQHByaXZhdGVcbiAqL1xuQWNjZXNzaWJpbGl0eU1hbmFnZXIucHJvdG90eXBlLnVwZGF0ZSA9IGZ1bmN0aW9uKClcbntcblxuXHQvLyB1cGRhdGUgY2hpbGRyZW4uLi5cblx0dGhpcy51cGRhdGVBY2Nlc3NpYmxlT2JqZWN0cyh0aGlzLnJlbmRlcmVyLl9sYXN0T2JqZWN0UmVuZGVyZWQpO1xuXG5cdHZhciByZWN0ID0gdGhpcy5yZW5kZXJlci52aWV3LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuXHR2YXIgc3ggPSByZWN0LndpZHRoICAvIHRoaXMucmVuZGVyZXIud2lkdGg7XG5cdHZhciBzeSA9IHJlY3QuaGVpZ2h0IC8gdGhpcy5yZW5kZXJlci5oZWlnaHQ7XG5cblx0dmFyIGRpdiA9IHRoaXMuZGl2O1xuXG5cdGRpdi5zdHlsZS5sZWZ0ID0gcmVjdC5sZWZ0ICsgJ3B4Jztcblx0ZGl2LnN0eWxlLnRvcCA9IHJlY3QudG9wICsgJ3B4Jztcblx0ZGl2LnN0eWxlLndpZHRoID0gdGhpcy5yZW5kZXJlci53aWR0aCArICdweCc7XG5cdGRpdi5zdHlsZS5oZWlnaHQgPSB0aGlzLnJlbmRlcmVyLmhlaWdodCArICdweCc7XG5cblx0Zm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmNoaWxkcmVuLmxlbmd0aDsgaSsrKVxuXHR7XG5cblx0XHR2YXIgY2hpbGQgPSB0aGlzLmNoaWxkcmVuW2ldO1xuXG5cdFx0aWYoY2hpbGQucmVuZGVySWQgIT09IHRoaXMucmVuZGVySWQpXG5cdFx0e1xuXHRcdFx0Y2hpbGQuX2FjY2Vzc2libGVBY3RpdmUgPSBmYWxzZTtcblxuICAgICAgICAgICAgY29yZS51dGlscy5yZW1vdmVJdGVtcyh0aGlzLmNoaWxkcmVuLCBpLCAxKTtcblx0XHRcdHRoaXMuZGl2LnJlbW92ZUNoaWxkKCBjaGlsZC5fYWNjZXNzaWJsZURpdiApO1xuXHRcdFx0dGhpcy5wb29sLnB1c2goY2hpbGQuX2FjY2Vzc2libGVEaXYpO1xuXHRcdFx0Y2hpbGQuX2FjY2Vzc2libGVEaXYgPSBudWxsO1xuXG5cdFx0XHRpLS07XG5cblx0XHRcdGlmKHRoaXMuY2hpbGRyZW4ubGVuZ3RoID09PSAwKVxuXHRcdFx0e1xuXHRcdFx0XHR0aGlzLmRlYWN0aXZhdGUoKTtcblx0XHRcdH1cblx0XHR9XG5cdFx0ZWxzZVxuXHRcdHtcblx0XHRcdC8vIG1hcCBkaXYgdG8gZGlzcGxheS4uXG5cdFx0XHRkaXYgPSBjaGlsZC5fYWNjZXNzaWJsZURpdjtcblx0XHRcdHZhciBoaXRBcmVhID0gY2hpbGQuaGl0QXJlYTtcblx0XHRcdHZhciB3dCA9IGNoaWxkLndvcmxkVHJhbnNmb3JtO1xuXG5cdFx0XHRpZihjaGlsZC5oaXRBcmVhKVxuXHRcdFx0e1xuXHRcdFx0XHRkaXYuc3R5bGUubGVmdCA9ICgod3QudHggKyAoaGl0QXJlYS54ICogd3QuYSkpICogc3gpICsgJ3B4Jztcblx0XHRcdFx0ZGl2LnN0eWxlLnRvcCA9ICAoKHd0LnR5ICsgKGhpdEFyZWEueSAqIHd0LmQpKSAqIHN5KSArICAncHgnO1xuXG5cdFx0XHRcdGRpdi5zdHlsZS53aWR0aCA9IChoaXRBcmVhLndpZHRoICogd3QuYSAqIHN4KSArICdweCc7XG5cdFx0XHRcdGRpdi5zdHlsZS5oZWlnaHQgPSAoaGl0QXJlYS5oZWlnaHQgKiB3dC5kICogc3kpICsgJ3B4Jztcblx0XHRcdFxuXHRcdFx0fVxuXHRcdFx0ZWxzZVxuXHRcdFx0e1xuXHRcdFx0XHRoaXRBcmVhID0gY2hpbGQuZ2V0Qm91bmRzKCk7XG5cblx0XHRcdFx0dGhpcy5jYXBIaXRBcmVhKGhpdEFyZWEpO1xuXG5cdFx0XHRcdGRpdi5zdHlsZS5sZWZ0ID0gKGhpdEFyZWEueCAqIHN4KSArICdweCc7XG5cdFx0XHRcdGRpdi5zdHlsZS50b3AgPSAgKGhpdEFyZWEueSAqIHN5KSArICAncHgnO1xuXG5cdFx0XHRcdGRpdi5zdHlsZS53aWR0aCA9IChoaXRBcmVhLndpZHRoICogc3gpICsgJ3B4Jztcblx0XHRcdFx0ZGl2LnN0eWxlLmhlaWdodCA9IChoaXRBcmVhLmhlaWdodCAqIHN5KSArICdweCc7XG5cdFx0XHR9XHRcdFxuXHRcdH1cblx0fVxuXG5cdC8vIGluY3JlbWVudCB0aGUgcmVuZGVyIGlkLi5cblx0dGhpcy5yZW5kZXJJZCsrO1xufTtcblxuQWNjZXNzaWJpbGl0eU1hbmFnZXIucHJvdG90eXBlLmNhcEhpdEFyZWEgPSBmdW5jdGlvbiAoaGl0QXJlYSlcbntcbiAgICBpZiAoaGl0QXJlYS54IDwgMClcbiAgICB7XG4gICAgICAgIGhpdEFyZWEud2lkdGggKz0gaGl0QXJlYS54O1xuICAgICAgICBoaXRBcmVhLnggPSAwO1xuICAgIH1cblxuICAgIGlmIChoaXRBcmVhLnkgPCAwKVxuICAgIHtcbiAgICAgICAgaGl0QXJlYS5oZWlnaHQgKz0gaGl0QXJlYS55O1xuICAgICAgICBoaXRBcmVhLnkgPSAwO1xuICAgIH1cblxuICAgIGlmICggaGl0QXJlYS54ICsgaGl0QXJlYS53aWR0aCA+IHRoaXMucmVuZGVyZXIud2lkdGggKVxuICAgIHtcbiAgICAgICAgaGl0QXJlYS53aWR0aCA9IHRoaXMucmVuZGVyZXIud2lkdGggLSBoaXRBcmVhLng7XG4gICAgfVxuXG4gICAgaWYgKCBoaXRBcmVhLnkgKyBoaXRBcmVhLmhlaWdodCA+IHRoaXMucmVuZGVyZXIuaGVpZ2h0IClcbiAgICB7XG4gICAgICAgIGhpdEFyZWEuaGVpZ2h0ID0gdGhpcy5yZW5kZXJlci5oZWlnaHQgLSBoaXRBcmVhLnk7XG4gICAgfVxufTtcblxuXG4vKipcbiAqIEFkZHMgYSBEaXNwbGF5T2JqZWN0IHRvIHRoZSBhY2Nlc3NpYmlsaXR5IG1hbmFnZXJcbiAqIEBwcml2YXRlXG4gKi9cbkFjY2Vzc2liaWxpdHlNYW5hZ2VyLnByb3RvdHlwZS5hZGRDaGlsZCA9IGZ1bmN0aW9uKGRpc3BsYXlPYmplY3QpXG57XG4vL1x0dGhpcy5hY3RpdmF0ZSgpO1xuXHRcblx0dmFyIGRpdiA9IHRoaXMucG9vbC5wb3AoKTtcblxuXHRpZighZGl2KVxuXHR7XG5cdFx0ZGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYnV0dG9uJyk7IFxuXG5cdCAgICBkaXYuc3R5bGUud2lkdGggPSAxMDAgKyAncHgnO1xuXHQgICAgZGl2LnN0eWxlLmhlaWdodCA9IDEwMCArICdweCc7XG5cdCAgICBkaXYuc3R5bGUuYmFja2dyb3VuZENvbG9yID0gdGhpcy5kZWJ1ZyA/ICdyZ2JhKDI1NSwwLDAsMC41KScgOiAndHJhbnNwYXJlbnQnO1xuXHQgICAgZGl2LnN0eWxlLnBvc2l0aW9uID0gJ2Fic29sdXRlJztcblx0ICAgIGRpdi5zdHlsZS56SW5kZXggPSAyO1xuXHQgICAgZGl2LnN0eWxlLmJvcmRlclN0eWxlID0gJ25vbmUnO1xuXG5cdCAgICBcblx0ICAgIGRpdi5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIHRoaXMuX29uQ2xpY2suYmluZCh0aGlzKSk7XG5cdCAgICBkaXYuYWRkRXZlbnRMaXN0ZW5lcignZm9jdXMnLCB0aGlzLl9vbkZvY3VzLmJpbmQodGhpcykpO1xuXHQgICAgZGl2LmFkZEV2ZW50TGlzdGVuZXIoJ2ZvY3Vzb3V0JywgdGhpcy5fb25Gb2N1c091dC5iaW5kKHRoaXMpKTtcblx0fVxuXHQgICBcdFxuXG5cblxuXHRkaXYudGl0bGUgPSBkaXNwbGF5T2JqZWN0LmFjY2Vzc2libGVUaXRsZSB8fCAnZGlzcGxheU9iamVjdCAnICsgdGhpcy50YWJJbmRleDtcblxuXHQvL1xuXHRcblx0ZGlzcGxheU9iamVjdC5fYWNjZXNzaWJsZUFjdGl2ZSA9IHRydWU7XG5cdGRpc3BsYXlPYmplY3QuX2FjY2Vzc2libGVEaXYgPSBkaXY7XG5cdGRpdi5kaXNwbGF5T2JqZWN0ID0gZGlzcGxheU9iamVjdDtcblxuXG5cdHRoaXMuY2hpbGRyZW4ucHVzaChkaXNwbGF5T2JqZWN0KTtcblx0dGhpcy5kaXYuYXBwZW5kQ2hpbGQoIGRpc3BsYXlPYmplY3QuX2FjY2Vzc2libGVEaXYgKTtcblx0ZGlzcGxheU9iamVjdC5fYWNjZXNzaWJsZURpdi50YWJJbmRleCA9IGRpc3BsYXlPYmplY3QudGFiSW5kZXg7XG59O1xuXG5cbi8qKlxuICogTWFwcyB0aGUgZGl2IGJ1dHRvbiBwcmVzcyB0byBwaXhpJ3MgSW50ZXJhY3Rpb25NYW5hZ2VyIChjbGljaylcbiAqIEBwcml2YXRlXG4gKi9cbkFjY2Vzc2liaWxpdHlNYW5hZ2VyLnByb3RvdHlwZS5fb25DbGljayA9IGZ1bmN0aW9uKGUpXG57XG5cdHZhciBpbnRlcmFjdGlvbk1hbmFnZXIgPSB0aGlzLnJlbmRlcmVyLnBsdWdpbnMuaW50ZXJhY3Rpb247XG5cdGludGVyYWN0aW9uTWFuYWdlci5kaXNwYXRjaEV2ZW50KGUudGFyZ2V0LmRpc3BsYXlPYmplY3QsICdjbGljaycsIGludGVyYWN0aW9uTWFuYWdlci5ldmVudERhdGEpO1xufTtcblxuLyoqXG4gKiBNYXBzIHRoZSBkaXYgZm9jdXMgZXZlbnRzIHRvIHBpeGlzIEludGVyYWN0aW9uTWFuYWdlciAobW91c2VvdmVyKVxuICogQHByaXZhdGVcbiAqL1xuQWNjZXNzaWJpbGl0eU1hbmFnZXIucHJvdG90eXBlLl9vbkZvY3VzID0gZnVuY3Rpb24oZSlcbntcblx0dmFyIGludGVyYWN0aW9uTWFuYWdlciA9IHRoaXMucmVuZGVyZXIucGx1Z2lucy5pbnRlcmFjdGlvbjtcblx0aW50ZXJhY3Rpb25NYW5hZ2VyLmRpc3BhdGNoRXZlbnQoZS50YXJnZXQuZGlzcGxheU9iamVjdCwgJ21vdXNlb3ZlcicsIGludGVyYWN0aW9uTWFuYWdlci5ldmVudERhdGEpO1xufTtcblxuLyoqXG4gKiBNYXBzIHRoZSBkaXYgZm9jdXMgZXZlbnRzIHRvIHBpeGlzIEludGVyYWN0aW9uTWFuYWdlciAobW91c2VvdXQpXG4gKiBAcHJpdmF0ZVxuICovXG5BY2Nlc3NpYmlsaXR5TWFuYWdlci5wcm90b3R5cGUuX29uRm9jdXNPdXQgPSBmdW5jdGlvbihlKVxue1xuXHR2YXIgaW50ZXJhY3Rpb25NYW5hZ2VyID0gdGhpcy5yZW5kZXJlci5wbHVnaW5zLmludGVyYWN0aW9uO1xuXHRpbnRlcmFjdGlvbk1hbmFnZXIuZGlzcGF0Y2hFdmVudChlLnRhcmdldC5kaXNwbGF5T2JqZWN0LCAnbW91c2VvdXQnLCBpbnRlcmFjdGlvbk1hbmFnZXIuZXZlbnREYXRhKTtcbn07XG5cbi8qKlxuICogSXMgY2FsbGVkIHdoZW4gYSBrZXkgaXMgcHJlc3NlZFxuICpcbiAqIEBwcml2YXRlXG4gKi9cbkFjY2Vzc2liaWxpdHlNYW5hZ2VyLnByb3RvdHlwZS5fb25LZXlEb3duID0gZnVuY3Rpb24oZSlcbntcblx0aWYoZS5rZXlDb2RlICE9PSA5KVxuXHR7XG5cdFx0cmV0dXJuO1xuXHR9XG5cblx0dGhpcy5hY3RpdmF0ZSgpO1xufTtcblxuLyoqXG4gKiBJcyBjYWxsZWQgd2hlbiB0aGUgbW91c2UgbW92ZXMgYWNyb3NzIHRoZSByZW5kZXJlciBlbGVtZW50XG4gKlxuICogQHByaXZhdGVcbiAqL1xuQWNjZXNzaWJpbGl0eU1hbmFnZXIucHJvdG90eXBlLl9vbk1vdXNlTW92ZSA9IGZ1bmN0aW9uKClcbntcblx0dGhpcy5kZWFjdGl2YXRlKCk7XG59O1xuXG5cbi8qKlxuICogRGVzdHJveXMgdGhlIGFjY2Vzc2liaWxpdHkgbWFuYWdlclxuICpcbiAqL1xuQWNjZXNzaWJpbGl0eU1hbmFnZXIucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoKSBcbntcblx0dGhpcy5kaXYgPSBudWxsO1xuXG5cdGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5jaGlsZHJlbi5sZW5ndGg7IGkrKylcblx0e1xuXHRcdHRoaXMuY2hpbGRyZW5baV0uZGl2ID0gbnVsbDtcblx0fVxuXG5cdFxuXHR3aW5kb3cuZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignbW91c2Vtb3ZlJywgdGhpcy5fb25Nb3VzZU1vdmUpO1xuXHR3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsIHRoaXMuX29uS2V5RG93bik7XG5cdFx0XG5cdHRoaXMucG9vbCA9IG51bGw7XG5cdHRoaXMuY2hpbGRyZW4gPSBudWxsO1xuXHR0aGlzLnJlbmRlcmVyID0gbnVsbDtcblxufTtcblxuY29yZS5XZWJHTFJlbmRlcmVyLnJlZ2lzdGVyUGx1Z2luKCdhY2Nlc3NpYmlsaXR5JywgQWNjZXNzaWJpbGl0eU1hbmFnZXIpO1xuY29yZS5DYW52YXNSZW5kZXJlci5yZWdpc3RlclBsdWdpbignYWNjZXNzaWJpbGl0eScsIEFjY2Vzc2liaWxpdHlNYW5hZ2VyKTtcblxuIiwiLyoqXG4gKiBEZWZhdWx0IHByb3BlcnR5IHZhbHVlcyBvZiBhY2Nlc3NpYmxlIG9iamVjdHNcbiAqIHVzZWQgYnkge0BsaW5rIFBJWEkuYWNjZXNzaWJpbGl0eS5BY2Nlc3NpYmlsaXR5TWFuYWdlcn0uXG4gKlxuICogQG1peGluXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQGV4YW1wbGVcbiAqICAgICAgZnVuY3Rpb24gTXlPYmplY3QoKSB7fVxuICpcbiAqICAgICAgT2JqZWN0LmFzc2lnbihcbiAqICAgICAgICAgIE15T2JqZWN0LnByb3RvdHlwZSxcbiAqICAgICAgICAgIFBJWEkuYWNjZXNzaWJpbGl0eS5hY2Nlc3NpYmxlVGFyZ2V0XG4gKiAgICAgICk7XG4gKi9cbnZhciBhY2Nlc3NpYmxlVGFyZ2V0ID0ge1xuICAgIFxuICAgIC8qKlxuICAgICAqIEB0b2RvIE5lZWRzIGRvY3MuXG4gICAgICovXG4gICAgYWNjZXNzaWJsZTpmYWxzZSxcblxuICAgIC8qKlxuICAgICAqIEB0b2RvIE5lZWRzIGRvY3MuXG4gICAgICovXG4gICAgYWNjZXNzaWJsZVRpdGxlOm51bGwsXG5cbiAgICAvKipcbiAgICAgKiBAdG9kbyBOZWVkcyBkb2NzLlxuICAgICAqL1xuICAgIHRhYkluZGV4OjAsXG5cbiAgICAvKipcbiAgICAgKiBAdG9kbyBOZWVkcyBkb2NzLlxuICAgICAqL1xuICAgIF9hY2Nlc3NpYmxlQWN0aXZlOmZhbHNlLFxuXG4gICAgLyoqXG4gICAgICogQHRvZG8gTmVlZHMgZG9jcy5cbiAgICAgKi9cbiAgICBfYWNjZXNzaWJsZURpdjpmYWxzZVxuXG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGFjY2Vzc2libGVUYXJnZXQ7XG4iLCIvKipcbiAqIEBmaWxlICAgICAgICBNYWluIGV4cG9ydCBvZiB0aGUgUElYSSBhY2Nlc3NpYmlsaXR5IGxpYnJhcnlcbiAqIEBhdXRob3IgICAgICBNYXQgR3JvdmVzIDxtYXRAZ29vZGJveWRpZ2l0YWwuY29tPlxuICogQGNvcHlyaWdodCAgIDIwMTMtMjAxNSBHb29kQm95RGlnaXRhbFxuICogQGxpY2Vuc2UgICAgIHtAbGluayBodHRwczovL2dpdGh1Yi5jb20vcGl4aWpzL3BpeGkuanMvYmxvYi9tYXN0ZXIvTElDRU5TRXxNSVQgTGljZW5zZX1cbiAqL1xuXG4vKipcbiAqIEBuYW1lc3BhY2UgUElYSS5pbnRlcmFjdGlvblxuICovXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgICBhY2Nlc3NpYmxlVGFyZ2V0OiAgICAgcmVxdWlyZSgnLi9hY2Nlc3NpYmxlVGFyZ2V0JyksXG4gICAgQWNjZXNzaWJpbGl0eU1hbmFnZXI6IHJlcXVpcmUoJy4vQWNjZXNzaWJpbGl0eU1hbmFnZXInKVxufTtcbiIsIi8qKlxuICogQ29uc3RhbnQgdmFsdWVzIHVzZWQgaW4gcGl4aVxuICpcbiAqIEBsZW5kcyBQSVhJXG4gKi9cbnZhciBDT05TVCA9IHtcbiAgICAvKipcbiAgICAgKiBTdHJpbmcgb2YgdGhlIGN1cnJlbnQgUElYSSB2ZXJzaW9uXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQGNvbnN0YW50XG4gICAgICogQHByb3BlcnR5IHtzdHJpbmd9IFZFUlNJT05cbiAgICAgKi9cbiAgICBWRVJTSU9OOiByZXF1aXJlKCcuLi8uLi9wYWNrYWdlLmpzb24nKS52ZXJzaW9uLFxuXG4gICAgLyoqXG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IFBJXzIgLSBUd28gUGlcbiAgICAgKiBAY29uc3RhbnRcbiAgICAgKiBAc3RhdGljXG4gICAgICovXG4gICAgUElfMjogTWF0aC5QSSAqIDIsXG5cbiAgICAvKipcbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gUkFEX1RPX0RFRyAtIENvbnN0YW50IGNvbnZlcnNpb24gZmFjdG9yIGZvciBjb252ZXJ0aW5nIHJhZGlhbnMgdG8gZGVncmVlc1xuICAgICAqIEBjb25zdGFudFxuICAgICAqIEBzdGF0aWNcbiAgICAgKi9cbiAgICBSQURfVE9fREVHOiAxODAgLyBNYXRoLlBJLFxuXG4gICAgLyoqXG4gICAgICogQHByb3BlcnR5IHtOdW1iZXJ9IERFR19UT19SQUQgLSBDb25zdGFudCBjb252ZXJzaW9uIGZhY3RvciBmb3IgY29udmVydGluZyBkZWdyZWVzIHRvIHJhZGlhbnNcbiAgICAgKiBAY29uc3RhbnRcbiAgICAgKiBAc3RhdGljXG4gICAgICovXG4gICAgREVHX1RPX1JBRDogTWF0aC5QSSAvIDE4MCxcblxuICAgIC8qKlxuICAgICAqIFRhcmdldCBmcmFtZXMgcGVyIG1pbGxpc2Vjb25kLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBjb25zdGFudFxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBUQVJHRVRfRlBNUz0wLjA2XG4gICAgICovXG4gICAgVEFSR0VUX0ZQTVM6IDAuMDYsXG5cbiAgICAvKipcbiAgICAgKiBDb25zdGFudCB0byBpZGVudGlmeSB0aGUgUmVuZGVyZXIgVHlwZS5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAY29uc3RhbnRcbiAgICAgKiBAcHJvcGVydHkge29iamVjdH0gUkVOREVSRVJfVFlQRVxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBSRU5ERVJFUl9UWVBFLlVOS05PV05cbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gUkVOREVSRVJfVFlQRS5XRUJHTFxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBSRU5ERVJFUl9UWVBFLkNBTlZBU1xuICAgICAqL1xuICAgIFJFTkRFUkVSX1RZUEU6IHtcbiAgICAgICAgVU5LTk9XTjogICAgMCxcbiAgICAgICAgV0VCR0w6ICAgICAgMSxcbiAgICAgICAgQ0FOVkFTOiAgICAgMlxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBWYXJpb3VzIGJsZW5kIG1vZGVzIHN1cHBvcnRlZCBieSBQSVhJLiBJTVBPUlRBTlQgLSBUaGUgV2ViR0wgcmVuZGVyZXIgb25seSBzdXBwb3J0c1xuICAgICAqIHRoZSBOT1JNQUwsIEFERCwgTVVMVElQTFkgYW5kIFNDUkVFTiBibGVuZCBtb2Rlcy4gQW55dGhpbmcgZWxzZSB3aWxsIHNpbGVudGx5IGFjdCBsaWtlXG4gICAgICogTk9STUFMLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBjb25zdGFudFxuICAgICAqIEBwcm9wZXJ0eSB7b2JqZWN0fSBCTEVORF9NT0RFU1xuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBCTEVORF9NT0RFUy5OT1JNQUxcbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gQkxFTkRfTU9ERVMuQUREXG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IEJMRU5EX01PREVTLk1VTFRJUExZXG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IEJMRU5EX01PREVTLlNDUkVFTlxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBCTEVORF9NT0RFUy5PVkVSTEFZXG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IEJMRU5EX01PREVTLkRBUktFTlxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBCTEVORF9NT0RFUy5MSUdIVEVOXG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IEJMRU5EX01PREVTLkNPTE9SX0RPREdFXG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IEJMRU5EX01PREVTLkNPTE9SX0JVUk5cbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gQkxFTkRfTU9ERVMuSEFSRF9MSUdIVFxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBCTEVORF9NT0RFUy5TT0ZUX0xJR0hUXG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IEJMRU5EX01PREVTLkRJRkZFUkVOQ0VcbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gQkxFTkRfTU9ERVMuRVhDTFVTSU9OXG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IEJMRU5EX01PREVTLkhVRVxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBCTEVORF9NT0RFUy5TQVRVUkFUSU9OXG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IEJMRU5EX01PREVTLkNPTE9SXG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IEJMRU5EX01PREVTLkxVTUlOT1NJVFlcbiAgICAgKi9cbiAgICBCTEVORF9NT0RFUzoge1xuICAgICAgICBOT1JNQUw6ICAgICAgICAgMCxcbiAgICAgICAgQUREOiAgICAgICAgICAgIDEsXG4gICAgICAgIE1VTFRJUExZOiAgICAgICAyLFxuICAgICAgICBTQ1JFRU46ICAgICAgICAgMyxcbiAgICAgICAgT1ZFUkxBWTogICAgICAgIDQsXG4gICAgICAgIERBUktFTjogICAgICAgICA1LFxuICAgICAgICBMSUdIVEVOOiAgICAgICAgNixcbiAgICAgICAgQ09MT1JfRE9ER0U6ICAgIDcsXG4gICAgICAgIENPTE9SX0JVUk46ICAgICA4LFxuICAgICAgICBIQVJEX0xJR0hUOiAgICAgOSxcbiAgICAgICAgU09GVF9MSUdIVDogICAgIDEwLFxuICAgICAgICBESUZGRVJFTkNFOiAgICAgMTEsXG4gICAgICAgIEVYQ0xVU0lPTjogICAgICAxMixcbiAgICAgICAgSFVFOiAgICAgICAgICAgIDEzLFxuICAgICAgICBTQVRVUkFUSU9OOiAgICAgMTQsXG4gICAgICAgIENPTE9SOiAgICAgICAgICAxNSxcbiAgICAgICAgTFVNSU5PU0lUWTogICAgIDE2XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFZhcmlvdXMgd2ViZ2wgZHJhdyBtb2Rlcy4gVGhlc2UgY2FuIGJlIHVzZWQgdG8gc3BlY2lmeSB3aGljaCBHTCBkcmF3TW9kZSB0byB1c2VcbiAgICAgKiB1bmRlciBjZXJ0YWluIHNpdHVhdGlvbnMgYW5kIHJlbmRlcmVycy5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAY29uc3RhbnRcbiAgICAgKiBAcHJvcGVydHkge29iamVjdH0gRFJBV19NT0RFU1xuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBEUkFXX01PREVTLlBPSU5UU1xuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBEUkFXX01PREVTLkxJTkVTXG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IERSQVdfTU9ERVMuTElORV9MT09QXG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IERSQVdfTU9ERVMuTElORV9TVFJJUFxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBEUkFXX01PREVTLlRSSUFOR0xFU1xuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBEUkFXX01PREVTLlRSSUFOR0xFX1NUUklQXG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IERSQVdfTU9ERVMuVFJJQU5HTEVfRkFOXG4gICAgICovXG4gICAgRFJBV19NT0RFUzoge1xuICAgICAgICBQT0lOVFM6ICAgICAgICAgMCxcbiAgICAgICAgTElORVM6ICAgICAgICAgIDEsXG4gICAgICAgIExJTkVfTE9PUDogICAgICAyLFxuICAgICAgICBMSU5FX1NUUklQOiAgICAgMyxcbiAgICAgICAgVFJJQU5HTEVTOiAgICAgIDQsXG4gICAgICAgIFRSSUFOR0xFX1NUUklQOiA1LFxuICAgICAgICBUUklBTkdMRV9GQU46ICAgNlxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBUaGUgc2NhbGUgbW9kZXMgdGhhdCBhcmUgc3VwcG9ydGVkIGJ5IHBpeGkuXG4gICAgICpcbiAgICAgKiBUaGUgREVGQVVMVCBzY2FsZSBtb2RlIGFmZmVjdHMgdGhlIGRlZmF1bHQgc2NhbGluZyBtb2RlIG9mIGZ1dHVyZSBvcGVyYXRpb25zLlxuICAgICAqIEl0IGNhbiBiZSByZS1hc3NpZ25lZCB0byBlaXRoZXIgTElORUFSIG9yIE5FQVJFU1QsIGRlcGVuZGluZyB1cG9uIHN1aXRhYmlsaXR5LlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBjb25zdGFudFxuICAgICAqIEBwcm9wZXJ0eSB7b2JqZWN0fSBTQ0FMRV9NT0RFU1xuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBTQ0FMRV9NT0RFUy5ERUZBVUxUPUxJTkVBUlxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBTQ0FMRV9NT0RFUy5MSU5FQVIgU21vb3RoIHNjYWxpbmdcbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gU0NBTEVfTU9ERVMuTkVBUkVTVCBQaXhlbGF0aW5nIHNjYWxpbmdcbiAgICAgKi9cbiAgICBTQ0FMRV9NT0RFUzoge1xuICAgICAgICBERUZBVUxUOiAgICAwLFxuICAgICAgICBMSU5FQVI6ICAgICAwLFxuICAgICAgICBORUFSRVNUOiAgICAxXG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFRoZSBwcmVmaXggdGhhdCBkZW5vdGVzIGEgVVJMIGlzIGZvciBhIHJldGluYSBhc3NldFxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBjb25zdGFudFxuICAgICAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBSRVRJTkFfUFJFRklYXG4gICAgICovXG4gICAgLy9leGFtcGxlOiAnQDJ4JyxcbiAgICBSRVRJTkFfUFJFRklYOiAvQCguKyl4LyxcblxuICAgIFJFU09MVVRJT046MSxcblxuICAgIEZJTFRFUl9SRVNPTFVUSU9OOjEsXG5cbiAgICAvKipcbiAgICAgKiBUaGUgZGVmYXVsdCByZW5kZXIgb3B0aW9ucyBpZiBub25lIGFyZSBzdXBwbGllZCB0byB7QGxpbmsgUElYSS5XZWJHTFJlbmRlcmVyfVxuICAgICAqIG9yIHtAbGluayBQSVhJLkNhbnZhc1JlbmRlcmVyfS5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAY29uc3RhbnRcbiAgICAgKiBAcHJvcGVydHkge29iamVjdH0gREVGQVVMVF9SRU5ERVJfT1BUSU9OU1xuICAgICAqIEBwcm9wZXJ0eSB7SFRNTENhbnZhc0VsZW1lbnR9IERFRkFVTFRfUkVOREVSX09QVElPTlMudmlldz1udWxsXG4gICAgICogQHByb3BlcnR5IHtib29sZWFufSBERUZBVUxUX1JFTkRFUl9PUFRJT05TLnRyYW5zcGFyZW50PWZhbHNlXG4gICAgICogQHByb3BlcnR5IHtib29sZWFufSBERUZBVUxUX1JFTkRFUl9PUFRJT05TLmFudGlhbGlhcz1mYWxzZVxuICAgICAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gREVGQVVMVF9SRU5ERVJfT1BUSU9OUy5mb3JjZUZYQUE9ZmFsc2VcbiAgICAgKiBAcHJvcGVydHkge2Jvb2xlYW59IERFRkFVTFRfUkVOREVSX09QVElPTlMucHJlc2VydmVEcmF3aW5nQnVmZmVyPWZhbHNlXG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IERFRkFVTFRfUkVOREVSX09QVElPTlMucmVzb2x1dGlvbj0xXG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IERFRkFVTFRfUkVOREVSX09QVElPTlMuYmFja2dyb3VuZENvbG9yPTB4MDAwMDAwXG4gICAgICogQHByb3BlcnR5IHtib29sZWFufSBERUZBVUxUX1JFTkRFUl9PUFRJT05TLmNsZWFyQmVmb3JlUmVuZGVyPXRydWVcbiAgICAgKiBAcHJvcGVydHkge2Jvb2xlYW59IERFRkFVTFRfUkVOREVSX09QVElPTlMuYXV0b1Jlc2l6ZT1mYWxzZVxuICAgICAqL1xuICAgIERFRkFVTFRfUkVOREVSX09QVElPTlM6IHtcbiAgICAgICAgdmlldzogbnVsbCxcbiAgICAgICAgcmVzb2x1dGlvbjogMSxcbiAgICAgICAgYW50aWFsaWFzOiBmYWxzZSxcbiAgICAgICAgZm9yY2VGWEFBOiBmYWxzZSxcbiAgICAgICAgYXV0b1Jlc2l6ZTogZmFsc2UsXG4gICAgICAgIHRyYW5zcGFyZW50OiBmYWxzZSxcbiAgICAgICAgYmFja2dyb3VuZENvbG9yOiAweDAwMDAwMCxcbiAgICAgICAgY2xlYXJCZWZvcmVSZW5kZXI6IHRydWUsXG4gICAgICAgIHByZXNlcnZlRHJhd2luZ0J1ZmZlcjogZmFsc2UsXG4gICAgICAgIHJvdW5kUGl4ZWxzOiBmYWxzZVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBDb25zdGFudHMgdGhhdCBpZGVudGlmeSBzaGFwZXMsIG1haW5seSB0byBwcmV2ZW50IGBpbnN0YW5jZW9mYCBjYWxscy5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAY29uc3RhbnRcbiAgICAgKiBAcHJvcGVydHkge29iamVjdH0gU0hBUEVTXG4gICAgICogQHByb3BlcnR5IHtvYmplY3R9IFNIQVBFUy5QT0xZPTBcbiAgICAgKiBAcHJvcGVydHkge29iamVjdH0gU0hBUEVTLlJFQ1Q9MVxuICAgICAqIEBwcm9wZXJ0eSB7b2JqZWN0fSBTSEFQRVMuQ0lSQz0yXG4gICAgICogQHByb3BlcnR5IHtvYmplY3R9IFNIQVBFUy5FTElQPTNcbiAgICAgKiBAcHJvcGVydHkge29iamVjdH0gU0hBUEVTLlJSRUM9NFxuICAgICAqL1xuICAgIFNIQVBFUzoge1xuICAgICAgICBQT0xZOiAwLFxuICAgICAgICBSRUNUOiAxLFxuICAgICAgICBDSVJDOiAyLFxuICAgICAgICBFTElQOiAzLFxuICAgICAgICBSUkVDOiA0XG4gICAgfSxcblxuICAgIC8vIFRPRE86IG1heWJlIGNoYW5nZSB0byBTUFJJVEUuQkFUQ0hfU0laRTogMjAwMFxuICAgIC8vIFRPRE86IG1heWJlIGFkZCBQQVJUSUNMRS5CQVRDSF9TSVpFOiAxNTAwMFxuICAgIFNQUklURV9CQVRDSF9TSVpFOiAyMDAwIC8vbmljZSBiYWxhbmNlIGJldHdlZW4gbW9iaWxlIGFuZCBkZXNrdG9wIG1hY2hpbmVzXG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IENPTlNUO1xuIiwidmFyIG1hdGggPSByZXF1aXJlKCcuLi9tYXRoJyksXG4gICAgdXRpbHMgPSByZXF1aXJlKCcuLi91dGlscycpLFxuICAgIERpc3BsYXlPYmplY3QgPSByZXF1aXJlKCcuL0Rpc3BsYXlPYmplY3QnKSxcbiAgICBSZW5kZXJUZXh0dXJlID0gcmVxdWlyZSgnLi4vdGV4dHVyZXMvUmVuZGVyVGV4dHVyZScpLFxuICAgIF90ZW1wTWF0cml4ID0gbmV3IG1hdGguTWF0cml4KCk7XG5cbi8qKlxuICogQSBDb250YWluZXIgcmVwcmVzZW50cyBhIGNvbGxlY3Rpb24gb2YgZGlzcGxheSBvYmplY3RzLlxuICogSXQgaXMgdGhlIGJhc2UgY2xhc3Mgb2YgYWxsIGRpc3BsYXkgb2JqZWN0cyB0aGF0IGFjdCBhcyBhIGNvbnRhaW5lciBmb3Igb3RoZXIgb2JqZWN0cy5cbiAqXG4gKmBgYGpzXG4gKiB2YXIgY29udGFpbmVyID0gbmV3IFBJWEkuQ29udGFpbmVyKCk7XG4gKiBjb250YWluZXIuYWRkQ2hpbGQoc3ByaXRlKTtcbiAqIGBgYFxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLkRpc3BsYXlPYmplY3RcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKi9cbmZ1bmN0aW9uIENvbnRhaW5lcigpXG57XG4gICAgRGlzcGxheU9iamVjdC5jYWxsKHRoaXMpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGFycmF5IG9mIGNoaWxkcmVuIG9mIHRoaXMgY29udGFpbmVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5EaXNwbGF5T2JqZWN0W119XG4gICAgICogQHJlYWRvbmx5XG4gICAgICovXG4gICAgdGhpcy5jaGlsZHJlbiA9IFtdO1xufVxuXG4vLyBjb25zdHJ1Y3RvclxuQ29udGFpbmVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoRGlzcGxheU9iamVjdC5wcm90b3R5cGUpO1xuQ29udGFpbmVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IENvbnRhaW5lcjtcbm1vZHVsZS5leHBvcnRzID0gQ29udGFpbmVyO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhDb250YWluZXIucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogVGhlIHdpZHRoIG9mIHRoZSBDb250YWluZXIsIHNldHRpbmcgdGhpcyB3aWxsIGFjdHVhbGx5IG1vZGlmeSB0aGUgc2NhbGUgdG8gYWNoaWV2ZSB0aGUgdmFsdWUgc2V0XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuQ29udGFpbmVyI1xuICAgICAqL1xuICAgIHdpZHRoOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuc2NhbGUueCAqIHRoaXMuZ2V0TG9jYWxCb3VuZHMoKS53aWR0aDtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcblxuICAgICAgICAgICAgdmFyIHdpZHRoID0gdGhpcy5nZXRMb2NhbEJvdW5kcygpLndpZHRoO1xuXG4gICAgICAgICAgICBpZiAod2lkdGggIT09IDApXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdGhpcy5zY2FsZS54ID0gdmFsdWUgLyB3aWR0aDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNjYWxlLnggPSAxO1xuICAgICAgICAgICAgfVxuXG5cbiAgICAgICAgICAgIHRoaXMuX3dpZHRoID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVGhlIGhlaWdodCBvZiB0aGUgQ29udGFpbmVyLCBzZXR0aW5nIHRoaXMgd2lsbCBhY3R1YWxseSBtb2RpZnkgdGhlIHNjYWxlIHRvIGFjaGlldmUgdGhlIHZhbHVlIHNldFxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLkNvbnRhaW5lciNcbiAgICAgKi9cbiAgICBoZWlnaHQ6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gIHRoaXMuc2NhbGUueSAqIHRoaXMuZ2V0TG9jYWxCb3VuZHMoKS5oZWlnaHQ7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG5cbiAgICAgICAgICAgIHZhciBoZWlnaHQgPSB0aGlzLmdldExvY2FsQm91bmRzKCkuaGVpZ2h0O1xuXG4gICAgICAgICAgICBpZiAoaGVpZ2h0ICE9PSAwKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHRoaXMuc2NhbGUueSA9IHZhbHVlIC8gaGVpZ2h0IDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNjYWxlLnkgPSAxO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLl9oZWlnaHQgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuXG4vKipcbiAqIE92ZXJyaWRhYmxlIG1ldGhvZCB0aGF0IGNhbiBiZSB1c2VkIGJ5IENvbnRhaW5lciBzdWJjbGFzc2VzIHdoZW5ldmVyIHRoZSBjaGlsZHJlbiBhcnJheSBpcyBtb2RpZmllZFxuICpcbiAqIEBwcml2YXRlXG4gKi9cbkNvbnRhaW5lci5wcm90b3R5cGUub25DaGlsZHJlbkNoYW5nZSA9IGZ1bmN0aW9uICgpIHt9O1xuXG4vKipcbiAqIEFkZHMgYSBjaGlsZCB0byB0aGUgY29udGFpbmVyLlxuICogXG4gKiBZb3UgY2FuIGFsc28gYWRkIG11bHRwbGUgaXRlbXMgbGlrZSBzbzogbXlDb250YWluZXIuYWRkQ2hpbGQodGhpbmtPbmUsIHRoaW5nVHdvLCB0aGluZ1RocmVlKVxuICogQHBhcmFtIGNoaWxkIHtQSVhJLkRpc3BsYXlPYmplY3R9IFRoZSBEaXNwbGF5T2JqZWN0IHRvIGFkZCB0byB0aGUgY29udGFpbmVyXG4gKiBAcmV0dXJuIHtQSVhJLkRpc3BsYXlPYmplY3R9IFRoZSBjaGlsZCB0aGF0IHdhcyBhZGRlZC5cbiAqL1xuQ29udGFpbmVyLnByb3RvdHlwZS5hZGRDaGlsZCA9IGZ1bmN0aW9uIChjaGlsZClcbnsgXG4gICAgdmFyIGFyZ3VtZW50c0xlbmd0aCA9IGFyZ3VtZW50cy5sZW5ndGg7XG5cbiAgICAvLyBpZiB0aGVyZSBpcyBvbmx5IG9uZSBhcmd1bWVudCB3ZSBjYW4gYnlwYXNzIGxvb3BpbmcgdGhyb3VnaCB0aGUgdGhlbVxuICAgIGlmKGFyZ3VtZW50c0xlbmd0aCA+IDEpXG4gICAge1xuICAgICAgICAvLyBsb29wIHRocm91Z2ggdGhlIGFyZ3VtZW50cyBwcm9wZXJ0eSBhbmQgYWRkIGFsbCBjaGlsZHJlblxuICAgICAgICAvLyB1c2UgaXQgdGhlIHJpZ2h0IHdheSAoLmxlbmd0aCBhbmQgW2ldKSBzbyB0aGF0IHRoaXMgZnVuY3Rpb24gY2FuIHN0aWxsIGJlIG9wdGltaXNlZCBieSBKUyBydW50aW1lc1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFyZ3VtZW50c0xlbmd0aDsgaSsrKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmFkZENoaWxkKCBhcmd1bWVudHNbaV0gKTtcbiAgICAgICAgfVxuICAgIH0gICAgIFxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIC8vIGlmIHRoZSBjaGlsZCBoYXMgYSBwYXJlbnQgdGhlbiBsZXRzIHJlbW92ZSBpdCBhcyBQaXhpIG9iamVjdHMgY2FuIG9ubHkgZXhpc3QgaW4gb25lIHBsYWNlXG4gICAgICAgIGlmIChjaGlsZC5wYXJlbnQpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNoaWxkLnBhcmVudC5yZW1vdmVDaGlsZChjaGlsZCk7XG4gICAgICAgIH1cblxuICAgICAgICBjaGlsZC5wYXJlbnQgPSB0aGlzO1xuICAgICAgICBcbiAgICAgICAgdGhpcy5jaGlsZHJlbi5wdXNoKGNoaWxkKTtcblxuICAgICAgICAvLyBUT0RPIC0gbGV0cyBlaXRoZXIgZG8gYWxsIGNhbGxiYWNrcyBvciBhbGwgZXZlbnRzLi4gbm90IGJvdGghXG4gICAgICAgIHRoaXMub25DaGlsZHJlbkNoYW5nZSh0aGlzLmNoaWxkcmVuLmxlbmd0aC0xKTtcbiAgICAgICAgY2hpbGQuZW1pdCgnYWRkZWQnLCB0aGlzKTtcbiAgICB9XG5cbiAgICByZXR1cm4gY2hpbGQ7XG59O1xuXG4vKipcbiAqIEFkZHMgYSBjaGlsZCB0byB0aGUgY29udGFpbmVyIGF0IGEgc3BlY2lmaWVkIGluZGV4LiBJZiB0aGUgaW5kZXggaXMgb3V0IG9mIGJvdW5kcyBhbiBlcnJvciB3aWxsIGJlIHRocm93blxuICpcbiAqIEBwYXJhbSBjaGlsZCB7UElYSS5EaXNwbGF5T2JqZWN0fSBUaGUgY2hpbGQgdG8gYWRkXG4gKiBAcGFyYW0gaW5kZXgge251bWJlcn0gVGhlIGluZGV4IHRvIHBsYWNlIHRoZSBjaGlsZCBpblxuICogQHJldHVybiB7UElYSS5EaXNwbGF5T2JqZWN0fSBUaGUgY2hpbGQgdGhhdCB3YXMgYWRkZWQuXG4gKi9cbkNvbnRhaW5lci5wcm90b3R5cGUuYWRkQ2hpbGRBdCA9IGZ1bmN0aW9uIChjaGlsZCwgaW5kZXgpXG57XG4gICAgaWYgKGluZGV4ID49IDAgJiYgaW5kZXggPD0gdGhpcy5jaGlsZHJlbi5sZW5ndGgpXG4gICAge1xuICAgICAgICBpZiAoY2hpbGQucGFyZW50KVxuICAgICAgICB7XG4gICAgICAgICAgICBjaGlsZC5wYXJlbnQucmVtb3ZlQ2hpbGQoY2hpbGQpO1xuICAgICAgICB9XG5cbiAgICAgICAgY2hpbGQucGFyZW50ID0gdGhpcztcblxuICAgICAgICB0aGlzLmNoaWxkcmVuLnNwbGljZShpbmRleCwgMCwgY2hpbGQpO1xuXG4gICAgICAgIC8vIFRPRE8gLSBsZXRzIGVpdGhlciBkbyBhbGwgY2FsbGJhY2tzIG9yIGFsbCBldmVudHMuLiBub3QgYm90aCFcbiAgICAgICAgdGhpcy5vbkNoaWxkcmVuQ2hhbmdlKGluZGV4KTtcbiAgICAgICAgY2hpbGQuZW1pdCgnYWRkZWQnLCB0aGlzKTtcblxuICAgICAgICByZXR1cm4gY2hpbGQ7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihjaGlsZCArICdhZGRDaGlsZEF0OiBUaGUgaW5kZXggJysgaW5kZXggKycgc3VwcGxpZWQgaXMgb3V0IG9mIGJvdW5kcyAnICsgdGhpcy5jaGlsZHJlbi5sZW5ndGgpO1xuICAgIH1cbn07XG5cbi8qKlxuICogU3dhcHMgdGhlIHBvc2l0aW9uIG9mIDIgRGlzcGxheSBPYmplY3RzIHdpdGhpbiB0aGlzIGNvbnRhaW5lci5cbiAqXG4gKiBAcGFyYW0gY2hpbGQge1BJWEkuRGlzcGxheU9iamVjdH1cbiAqIEBwYXJhbSBjaGlsZDIge1BJWEkuRGlzcGxheU9iamVjdH1cbiAqL1xuQ29udGFpbmVyLnByb3RvdHlwZS5zd2FwQ2hpbGRyZW4gPSBmdW5jdGlvbiAoY2hpbGQsIGNoaWxkMilcbntcbiAgICBpZiAoY2hpbGQgPT09IGNoaWxkMilcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB2YXIgaW5kZXgxID0gdGhpcy5nZXRDaGlsZEluZGV4KGNoaWxkKTtcbiAgICB2YXIgaW5kZXgyID0gdGhpcy5nZXRDaGlsZEluZGV4KGNoaWxkMik7XG5cbiAgICBpZiAoaW5kZXgxIDwgMCB8fCBpbmRleDIgPCAwKVxuICAgIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdzd2FwQ2hpbGRyZW46IEJvdGggdGhlIHN1cHBsaWVkIERpc3BsYXlPYmplY3RzIG11c3QgYmUgY2hpbGRyZW4gb2YgdGhlIGNhbGxlci4nKTtcbiAgICB9XG5cbiAgICB0aGlzLmNoaWxkcmVuW2luZGV4MV0gPSBjaGlsZDI7XG4gICAgdGhpcy5jaGlsZHJlbltpbmRleDJdID0gY2hpbGQ7XG4gICAgdGhpcy5vbkNoaWxkcmVuQ2hhbmdlKGluZGV4MSA8IGluZGV4MiA/IGluZGV4MSA6IGluZGV4Mik7XG59O1xuXG4vKipcbiAqIFJldHVybnMgdGhlIGluZGV4IHBvc2l0aW9uIG9mIGEgY2hpbGQgRGlzcGxheU9iamVjdCBpbnN0YW5jZVxuICpcbiAqIEBwYXJhbSBjaGlsZCB7UElYSS5EaXNwbGF5T2JqZWN0fSBUaGUgRGlzcGxheU9iamVjdCBpbnN0YW5jZSB0byBpZGVudGlmeVxuICogQHJldHVybiB7bnVtYmVyfSBUaGUgaW5kZXggcG9zaXRpb24gb2YgdGhlIGNoaWxkIGRpc3BsYXkgb2JqZWN0IHRvIGlkZW50aWZ5XG4gKi9cbkNvbnRhaW5lci5wcm90b3R5cGUuZ2V0Q2hpbGRJbmRleCA9IGZ1bmN0aW9uIChjaGlsZClcbntcbiAgICB2YXIgaW5kZXggPSB0aGlzLmNoaWxkcmVuLmluZGV4T2YoY2hpbGQpO1xuXG4gICAgaWYgKGluZGV4ID09PSAtMSlcbiAgICB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignVGhlIHN1cHBsaWVkIERpc3BsYXlPYmplY3QgbXVzdCBiZSBhIGNoaWxkIG9mIHRoZSBjYWxsZXInKTtcbiAgICB9XG5cbiAgICByZXR1cm4gaW5kZXg7XG59O1xuXG4vKipcbiAqIENoYW5nZXMgdGhlIHBvc2l0aW9uIG9mIGFuIGV4aXN0aW5nIGNoaWxkIGluIHRoZSBkaXNwbGF5IG9iamVjdCBjb250YWluZXJcbiAqXG4gKiBAcGFyYW0gY2hpbGQge1BJWEkuRGlzcGxheU9iamVjdH0gVGhlIGNoaWxkIERpc3BsYXlPYmplY3QgaW5zdGFuY2UgZm9yIHdoaWNoIHlvdSB3YW50IHRvIGNoYW5nZSB0aGUgaW5kZXggbnVtYmVyXG4gKiBAcGFyYW0gaW5kZXgge251bWJlcn0gVGhlIHJlc3VsdGluZyBpbmRleCBudW1iZXIgZm9yIHRoZSBjaGlsZCBkaXNwbGF5IG9iamVjdFxuICovXG5Db250YWluZXIucHJvdG90eXBlLnNldENoaWxkSW5kZXggPSBmdW5jdGlvbiAoY2hpbGQsIGluZGV4KVxue1xuICAgIGlmIChpbmRleCA8IDAgfHwgaW5kZXggPj0gdGhpcy5jaGlsZHJlbi5sZW5ndGgpXG4gICAge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RoZSBzdXBwbGllZCBpbmRleCBpcyBvdXQgb2YgYm91bmRzJyk7XG4gICAgfVxuXG4gICAgdmFyIGN1cnJlbnRJbmRleCA9IHRoaXMuZ2V0Q2hpbGRJbmRleChjaGlsZCk7XG5cbiAgICB1dGlscy5yZW1vdmVJdGVtcyh0aGlzLmNoaWxkcmVuLCBjdXJyZW50SW5kZXgsIDEpOyAvLyByZW1vdmUgZnJvbSBvbGQgcG9zaXRpb25cbiAgICB0aGlzLmNoaWxkcmVuLnNwbGljZShpbmRleCwgMCwgY2hpbGQpOyAvL2FkZCBhdCBuZXcgcG9zaXRpb25cbiAgICB0aGlzLm9uQ2hpbGRyZW5DaGFuZ2UoaW5kZXgpO1xufTtcblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBjaGlsZCBhdCB0aGUgc3BlY2lmaWVkIGluZGV4XG4gKlxuICogQHBhcmFtIGluZGV4IHtudW1iZXJ9IFRoZSBpbmRleCB0byBnZXQgdGhlIGNoaWxkIGF0XG4gKiBAcmV0dXJuIHtQSVhJLkRpc3BsYXlPYmplY3R9IFRoZSBjaGlsZCBhdCB0aGUgZ2l2ZW4gaW5kZXgsIGlmIGFueS5cbiAqL1xuQ29udGFpbmVyLnByb3RvdHlwZS5nZXRDaGlsZEF0ID0gZnVuY3Rpb24gKGluZGV4KVxue1xuICAgIGlmIChpbmRleCA8IDAgfHwgaW5kZXggPj0gdGhpcy5jaGlsZHJlbi5sZW5ndGgpXG4gICAge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2dldENoaWxkQXQ6IFN1cHBsaWVkIGluZGV4ICcgKyBpbmRleCArICcgZG9lcyBub3QgZXhpc3QgaW4gdGhlIGNoaWxkIGxpc3QsIG9yIHRoZSBzdXBwbGllZCBEaXNwbGF5T2JqZWN0IGlzIG5vdCBhIGNoaWxkIG9mIHRoZSBjYWxsZXInKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5jaGlsZHJlbltpbmRleF07XG59O1xuXG4vKipcbiAqIFJlbW92ZXMgYSBjaGlsZCBmcm9tIHRoZSBjb250YWluZXIuXG4gKlxuICogQHBhcmFtIGNoaWxkIHtQSVhJLkRpc3BsYXlPYmplY3R9IFRoZSBEaXNwbGF5T2JqZWN0IHRvIHJlbW92ZVxuICogQHJldHVybiB7UElYSS5EaXNwbGF5T2JqZWN0fSBUaGUgY2hpbGQgdGhhdCB3YXMgcmVtb3ZlZC5cbiAqL1xuQ29udGFpbmVyLnByb3RvdHlwZS5yZW1vdmVDaGlsZCA9IGZ1bmN0aW9uIChjaGlsZClcbntcbiAgICB2YXIgYXJndW1lbnRzTGVuZ3RoID0gYXJndW1lbnRzLmxlbmd0aDtcblxuICAgIC8vIGlmIHRoZXJlIGlzIG9ubHkgb25lIGFyZ3VtZW50IHdlIGNhbiBieXBhc3MgbG9vcGluZyB0aHJvdWdoIHRoZSB0aGVtXG4gICAgaWYoYXJndW1lbnRzTGVuZ3RoID4gMSlcbiAgICB7XG4gICAgICAgIC8vIGxvb3AgdGhyb3VnaCB0aGUgYXJndW1lbnRzIHByb3BlcnR5IGFuZCBhZGQgYWxsIGNoaWxkcmVuXG4gICAgICAgIC8vIHVzZSBpdCB0aGUgcmlnaHQgd2F5ICgubGVuZ3RoIGFuZCBbaV0pIHNvIHRoYXQgdGhpcyBmdW5jdGlvbiBjYW4gc3RpbGwgYmUgb3B0aW1pc2VkIGJ5IEpTIHJ1bnRpbWVzXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXJndW1lbnRzTGVuZ3RoOyBpKyspXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMucmVtb3ZlQ2hpbGQoIGFyZ3VtZW50c1tpXSApO1xuICAgICAgICB9XG4gICAgfSAgICAgXG4gICAgZWxzZVxuICAgIHsgICBcbiAgICAgICAgdmFyIGluZGV4ID0gdGhpcy5jaGlsZHJlbi5pbmRleE9mKGNoaWxkKTtcblxuICAgICAgICBpZiAoaW5kZXggPT09IC0xKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjaGlsZC5wYXJlbnQgPSBudWxsO1xuICAgICAgICB1dGlscy5yZW1vdmVJdGVtcyh0aGlzLmNoaWxkcmVuLCBpbmRleCwgMSk7XG5cbiAgICAgICAgLy8gVE9ETyAtIGxldHMgZWl0aGVyIGRvIGFsbCBjYWxsYmFja3Mgb3IgYWxsIGV2ZW50cy4uIG5vdCBib3RoIVxuICAgICAgICB0aGlzLm9uQ2hpbGRyZW5DaGFuZ2UoaW5kZXgpO1xuICAgICAgICBjaGlsZC5lbWl0KCdyZW1vdmVkJywgdGhpcyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGNoaWxkO1xufTtcblxuLyoqXG4gKiBSZW1vdmVzIGEgY2hpbGQgZnJvbSB0aGUgc3BlY2lmaWVkIGluZGV4IHBvc2l0aW9uLlxuICpcbiAqIEBwYXJhbSBpbmRleCB7bnVtYmVyfSBUaGUgaW5kZXggdG8gZ2V0IHRoZSBjaGlsZCBmcm9tXG4gKiBAcmV0dXJuIHtQSVhJLkRpc3BsYXlPYmplY3R9IFRoZSBjaGlsZCB0aGF0IHdhcyByZW1vdmVkLlxuICovXG5Db250YWluZXIucHJvdG90eXBlLnJlbW92ZUNoaWxkQXQgPSBmdW5jdGlvbiAoaW5kZXgpXG57XG4gICAgdmFyIGNoaWxkID0gdGhpcy5nZXRDaGlsZEF0KGluZGV4KTtcblxuICAgIGNoaWxkLnBhcmVudCA9IG51bGw7XG4gICAgdXRpbHMucmVtb3ZlSXRlbXModGhpcy5jaGlsZHJlbiwgaW5kZXgsIDEpO1xuXG4gICAgLy8gVE9ETyAtIGxldHMgZWl0aGVyIGRvIGFsbCBjYWxsYmFja3Mgb3IgYWxsIGV2ZW50cy4uIG5vdCBib3RoIVxuICAgIHRoaXMub25DaGlsZHJlbkNoYW5nZShpbmRleCk7XG4gICAgY2hpbGQuZW1pdCgncmVtb3ZlZCcsIHRoaXMpO1xuXG4gICAgcmV0dXJuIGNoaWxkO1xufTtcblxuLyoqXG4gKiBSZW1vdmVzIGFsbCBjaGlsZHJlbiBmcm9tIHRoaXMgY29udGFpbmVyIHRoYXQgYXJlIHdpdGhpbiB0aGUgYmVnaW4gYW5kIGVuZCBpbmRleGVzLlxuICpcbiAqIEBwYXJhbSBiZWdpbkluZGV4IHtudW1iZXJ9IFRoZSBiZWdpbm5pbmcgcG9zaXRpb24uIERlZmF1bHQgdmFsdWUgaXMgMC5cbiAqIEBwYXJhbSBlbmRJbmRleCB7bnVtYmVyfSBUaGUgZW5kaW5nIHBvc2l0aW9uLiBEZWZhdWx0IHZhbHVlIGlzIHNpemUgb2YgdGhlIGNvbnRhaW5lci5cbiAqL1xuQ29udGFpbmVyLnByb3RvdHlwZS5yZW1vdmVDaGlsZHJlbiA9IGZ1bmN0aW9uIChiZWdpbkluZGV4LCBlbmRJbmRleClcbntcbiAgICB2YXIgYmVnaW4gPSBiZWdpbkluZGV4IHx8IDA7XG4gICAgdmFyIGVuZCA9IHR5cGVvZiBlbmRJbmRleCA9PT0gJ251bWJlcicgPyBlbmRJbmRleCA6IHRoaXMuY2hpbGRyZW4ubGVuZ3RoO1xuICAgIHZhciByYW5nZSA9IGVuZCAtIGJlZ2luO1xuICAgIHZhciByZW1vdmVkLCBpO1xuXG4gICAgaWYgKHJhbmdlID4gMCAmJiByYW5nZSA8PSBlbmQpXG4gICAge1xuICAgICAgICByZW1vdmVkID0gdGhpcy5jaGlsZHJlbi5zcGxpY2UoYmVnaW4sIHJhbmdlKTtcblxuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgcmVtb3ZlZC5sZW5ndGg7ICsraSlcbiAgICAgICAge1xuICAgICAgICAgICAgcmVtb3ZlZFtpXS5wYXJlbnQgPSBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5vbkNoaWxkcmVuQ2hhbmdlKGJlZ2luSW5kZXgpO1xuXG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCByZW1vdmVkLmxlbmd0aDsgKytpKVxuICAgICAgICB7XG4gICAgICAgICAgICByZW1vdmVkW2ldLmVtaXQoJ3JlbW92ZWQnLCB0aGlzKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiByZW1vdmVkO1xuICAgIH1cbiAgICBlbHNlIGlmIChyYW5nZSA9PT0gMCAmJiB0aGlzLmNoaWxkcmVuLmxlbmd0aCA9PT0gMClcbiAgICB7XG4gICAgICAgIHJldHVybiBbXTtcbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ3JlbW92ZUNoaWxkcmVuOiBudW1lcmljIHZhbHVlcyBhcmUgb3V0c2lkZSB0aGUgYWNjZXB0YWJsZSByYW5nZS4nKTtcbiAgICB9XG59O1xuXG4vKipcbiAqIFVzZWZ1bCBmdW5jdGlvbiB0aGF0IHJldHVybnMgYSB0ZXh0dXJlIG9mIHRoZSBkaXNwbGF5IG9iamVjdCB0aGF0IGNhbiB0aGVuIGJlIHVzZWQgdG8gY3JlYXRlIHNwcml0ZXNcbiAqIFRoaXMgY2FuIGJlIHF1aXRlIHVzZWZ1bCBpZiB5b3VyIGRpc3BsYXlPYmplY3QgaXMgc3RhdGljIC8gY29tcGxpY2F0ZWQgYW5kIG5lZWRzIHRvIGJlIHJldXNlZCBtdWx0aXBsZSB0aW1lcy5cbiAqXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuQ2FudmFzUmVuZGVyZXJ8UElYSS5XZWJHTFJlbmRlcmVyfSBUaGUgcmVuZGVyZXIgdXNlZCB0byBnZW5lcmF0ZSB0aGUgdGV4dHVyZS5cbiAqIEBwYXJhbSByZXNvbHV0aW9uIHtudW1iZXJ9IFRoZSByZXNvbHV0aW9uIG9mIHRoZSB0ZXh0dXJlIGJlaW5nIGdlbmVyYXRlZFxuICogQHBhcmFtIHNjYWxlTW9kZSB7bnVtYmVyfSBTZWUge0BsaW5rIFBJWEkuU0NBTEVfTU9ERVN9IGZvciBwb3NzaWJsZSB2YWx1ZXNcbiAqIEByZXR1cm4ge1BJWEkuVGV4dHVyZX0gYSB0ZXh0dXJlIG9mIHRoZSBkaXNwbGF5IG9iamVjdFxuICovXG5Db250YWluZXIucHJvdG90eXBlLmdlbmVyYXRlVGV4dHVyZSA9IGZ1bmN0aW9uIChyZW5kZXJlciwgcmVzb2x1dGlvbiwgc2NhbGVNb2RlKVxue1xuICAgIHZhciBib3VuZHMgPSB0aGlzLmdldExvY2FsQm91bmRzKCk7XG5cbiAgICB2YXIgcmVuZGVyVGV4dHVyZSA9IG5ldyBSZW5kZXJUZXh0dXJlKHJlbmRlcmVyLCBib3VuZHMud2lkdGggfCAwLCBib3VuZHMuaGVpZ2h0IHwgMCwgc2NhbGVNb2RlLCByZXNvbHV0aW9uKTtcblxuICAgIF90ZW1wTWF0cml4LnR4ID0gLWJvdW5kcy54O1xuICAgIF90ZW1wTWF0cml4LnR5ID0gLWJvdW5kcy55O1xuXG4gICAgcmVuZGVyVGV4dHVyZS5yZW5kZXIodGhpcywgX3RlbXBNYXRyaXgpO1xuXG4gICAgcmV0dXJuIHJlbmRlclRleHR1cmU7XG59O1xuXG4vKlxuICogVXBkYXRlcyB0aGUgdHJhbnNmb3JtIG9uIGFsbCBjaGlsZHJlbiBvZiB0aGlzIGNvbnRhaW5lciBmb3IgcmVuZGVyaW5nXG4gKlxuICogQHByaXZhdGVcbiAqL1xuQ29udGFpbmVyLnByb3RvdHlwZS51cGRhdGVUcmFuc2Zvcm0gPSBmdW5jdGlvbiAoKVxue1xuICAgIGlmICghdGhpcy52aXNpYmxlKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuZGlzcGxheU9iamVjdFVwZGF0ZVRyYW5zZm9ybSgpO1xuXG4gICAgZm9yICh2YXIgaSA9IDAsIGogPSB0aGlzLmNoaWxkcmVuLmxlbmd0aDsgaSA8IGo7ICsraSlcbiAgICB7XG4gICAgICAgIHRoaXMuY2hpbGRyZW5baV0udXBkYXRlVHJhbnNmb3JtKCk7XG4gICAgfVxuXG4gICAgdGhpcy5kaXJ0eVRyYW5zZm9ybSA9IGZhbHNlO1xufTtcblxuLy8gcGVyZm9ybWFuY2UgaW5jcmVhc2UgdG8gYXZvaWQgdXNpbmcgY2FsbC4uICgxMHggZmFzdGVyKVxuQ29udGFpbmVyLnByb3RvdHlwZS5jb250YWluZXJVcGRhdGVUcmFuc2Zvcm0gPSBDb250YWluZXIucHJvdG90eXBlLnVwZGF0ZVRyYW5zZm9ybTtcblxuLyoqXG4gKiBSZXRyaWV2ZXMgdGhlIGJvdW5kcyBvZiB0aGUgQ29udGFpbmVyIGFzIGEgcmVjdGFuZ2xlLiBUaGUgYm91bmRzIGNhbGN1bGF0aW9uIHRha2VzIGFsbCB2aXNpYmxlIGNoaWxkcmVuIGludG8gY29uc2lkZXJhdGlvbi5cbiAqXG4gKiBAcmV0dXJuIHtQSVhJLlJlY3RhbmdsZX0gVGhlIHJlY3Rhbmd1bGFyIGJvdW5kaW5nIGFyZWFcbiAqL1xuQ29udGFpbmVyLnByb3RvdHlwZS5nZXRCb3VuZHMgPSBmdW5jdGlvbiAoKVxue1xuICAgIGlmKCF0aGlzLl9jdXJyZW50Qm91bmRzKVxuICAgIHtcblxuICAgICAgICBpZiAodGhpcy5jaGlsZHJlbi5sZW5ndGggPT09IDApXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiBtYXRoLlJlY3RhbmdsZS5FTVBUWTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFRPRE8gdGhlIGJvdW5kcyBoYXZlIGFscmVhZHkgYmVlbiBjYWxjdWxhdGVkIHRoaXMgcmVuZGVyIHNlc3Npb24gc28gcmV0dXJuIHdoYXQgd2UgaGF2ZVxuXG4gICAgICAgIHZhciBtaW5YID0gSW5maW5pdHk7XG4gICAgICAgIHZhciBtaW5ZID0gSW5maW5pdHk7XG5cbiAgICAgICAgdmFyIG1heFggPSAtSW5maW5pdHk7XG4gICAgICAgIHZhciBtYXhZID0gLUluZmluaXR5O1xuXG4gICAgICAgIHZhciBjaGlsZEJvdW5kcztcbiAgICAgICAgdmFyIGNoaWxkTWF4WDtcbiAgICAgICAgdmFyIGNoaWxkTWF4WTtcblxuICAgICAgICB2YXIgY2hpbGRWaXNpYmxlID0gZmFsc2U7XG5cbiAgICAgICAgZm9yICh2YXIgaSA9IDAsIGogPSB0aGlzLmNoaWxkcmVuLmxlbmd0aDsgaSA8IGo7ICsraSlcbiAgICAgICAge1xuICAgICAgICAgICAgdmFyIGNoaWxkID0gdGhpcy5jaGlsZHJlbltpXTtcblxuICAgICAgICAgICAgaWYgKCFjaGlsZC52aXNpYmxlKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjaGlsZFZpc2libGUgPSB0cnVlO1xuXG4gICAgICAgICAgICBjaGlsZEJvdW5kcyA9IHRoaXMuY2hpbGRyZW5baV0uZ2V0Qm91bmRzKCk7XG5cbiAgICAgICAgICAgIG1pblggPSBtaW5YIDwgY2hpbGRCb3VuZHMueCA/IG1pblggOiBjaGlsZEJvdW5kcy54O1xuICAgICAgICAgICAgbWluWSA9IG1pblkgPCBjaGlsZEJvdW5kcy55ID8gbWluWSA6IGNoaWxkQm91bmRzLnk7XG5cbiAgICAgICAgICAgIGNoaWxkTWF4WCA9IGNoaWxkQm91bmRzLndpZHRoICsgY2hpbGRCb3VuZHMueDtcbiAgICAgICAgICAgIGNoaWxkTWF4WSA9IGNoaWxkQm91bmRzLmhlaWdodCArIGNoaWxkQm91bmRzLnk7XG5cbiAgICAgICAgICAgIG1heFggPSBtYXhYID4gY2hpbGRNYXhYID8gbWF4WCA6IGNoaWxkTWF4WDtcbiAgICAgICAgICAgIG1heFkgPSBtYXhZID4gY2hpbGRNYXhZID8gbWF4WSA6IGNoaWxkTWF4WTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghY2hpbGRWaXNpYmxlKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gbWF0aC5SZWN0YW5nbGUuRU1QVFk7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgYm91bmRzID0gdGhpcy5fYm91bmRzO1xuXG4gICAgICAgIGJvdW5kcy54ID0gbWluWDtcbiAgICAgICAgYm91bmRzLnkgPSBtaW5ZO1xuICAgICAgICBib3VuZHMud2lkdGggPSBtYXhYIC0gbWluWDtcbiAgICAgICAgYm91bmRzLmhlaWdodCA9IG1heFkgLSBtaW5ZO1xuXG4gICAgICAgIHRoaXMuX2N1cnJlbnRCb3VuZHMgPSBib3VuZHM7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuX2N1cnJlbnRCb3VuZHM7XG59O1xuXG5Db250YWluZXIucHJvdG90eXBlLmNvbnRhaW5lckdldEJvdW5kcyA9IENvbnRhaW5lci5wcm90b3R5cGUuZ2V0Qm91bmRzO1xuXG4vKipcbiAqIFJldHJpZXZlcyB0aGUgbm9uLWdsb2JhbCBsb2NhbCBib3VuZHMgb2YgdGhlIENvbnRhaW5lciBhcyBhIHJlY3RhbmdsZS5cbiAqIFRoZSBjYWxjdWxhdGlvbiB0YWtlcyBhbGwgdmlzaWJsZSBjaGlsZHJlbiBpbnRvIGNvbnNpZGVyYXRpb24uXG4gKlxuICogQHJldHVybiB7UElYSS5SZWN0YW5nbGV9IFRoZSByZWN0YW5ndWxhciBib3VuZGluZyBhcmVhXG4gKi9cbkNvbnRhaW5lci5wcm90b3R5cGUuZ2V0TG9jYWxCb3VuZHMgPSBmdW5jdGlvbiAoKVxue1xuICAgIHZhciBtYXRyaXhDYWNoZSA9IHRoaXMud29ybGRUcmFuc2Zvcm07XG5cbiAgICB0aGlzLndvcmxkVHJhbnNmb3JtID0gbWF0aC5NYXRyaXguSURFTlRJVFk7XG5cbiAgICBmb3IgKHZhciBpID0gMCwgaiA9IHRoaXMuY2hpbGRyZW4ubGVuZ3RoOyBpIDwgajsgKytpKVxuICAgIHtcbiAgICAgICAgdGhpcy5jaGlsZHJlbltpXS51cGRhdGVUcmFuc2Zvcm0oKTtcbiAgICB9XG5cbiAgICB0aGlzLndvcmxkVHJhbnNmb3JtID0gbWF0cml4Q2FjaGU7XG5cbiAgICB0aGlzLl9jdXJyZW50Qm91bmRzID0gbnVsbDtcblxuICAgIHJldHVybiB0aGlzLmdldEJvdW5kcyggbWF0aC5NYXRyaXguSURFTlRJVFkgKTtcbn07XG5cbi8qKlxuICogUmVuZGVycyB0aGUgb2JqZWN0IHVzaW5nIHRoZSBXZWJHTCByZW5kZXJlclxuICpcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5XZWJHTFJlbmRlcmVyfSBUaGUgcmVuZGVyZXJcbiAqL1xuQ29udGFpbmVyLnByb3RvdHlwZS5yZW5kZXJXZWJHTCA9IGZ1bmN0aW9uIChyZW5kZXJlcilcbntcblxuICAgIC8vIGlmIHRoZSBvYmplY3QgaXMgbm90IHZpc2libGUgb3IgdGhlIGFscGhhIGlzIDAgdGhlbiBubyBuZWVkIHRvIHJlbmRlciB0aGlzIGVsZW1lbnRcbiAgICBpZiAoIXRoaXMudmlzaWJsZSB8fCB0aGlzLndvcmxkQWxwaGEgPD0gMCB8fCAhdGhpcy5yZW5kZXJhYmxlKVxuICAgIHtcbiAgICAgIFxuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFyIGksIGo7XG5cbiAgICAvLyBkbyBhIHF1aWNrIGNoZWNrIHRvIHNlZSBpZiB0aGlzIGVsZW1lbnQgaGFzIGEgbWFzayBvciBhIGZpbHRlci5cbiAgICBpZiAodGhpcy5fbWFzayB8fCB0aGlzLl9maWx0ZXJzKVxuICAgIHtcbiAgICAgICAgcmVuZGVyZXIuY3VycmVudFJlbmRlcmVyLmZsdXNoKCk7XG5cbiAgICAgICAgLy8gcHVzaCBmaWx0ZXIgZmlyc3QgYXMgd2UgbmVlZCB0byBlbnN1cmUgdGhlIHN0ZW5jaWwgYnVmZmVyIGlzIGNvcnJlY3QgZm9yIGFueSBtYXNraW5nXG4gICAgICAgIGlmICh0aGlzLl9maWx0ZXJzICYmIHRoaXMuX2ZpbHRlcnMubGVuZ3RoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLnB1c2hGaWx0ZXIodGhpcywgdGhpcy5fZmlsdGVycyk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5fbWFzaylcbiAgICAgICAge1xuICAgICAgICAgICAgcmVuZGVyZXIubWFza01hbmFnZXIucHVzaE1hc2sodGhpcywgdGhpcy5fbWFzayk7XG4gICAgICAgIH1cblxuICAgICAgICByZW5kZXJlci5jdXJyZW50UmVuZGVyZXIuc3RhcnQoKTtcblxuICAgICAgICAvLyBhZGQgdGhpcyBvYmplY3QgdG8gdGhlIGJhdGNoLCBvbmx5IHJlbmRlcmVkIGlmIGl0IGhhcyBhIHRleHR1cmUuXG4gICAgICAgIHRoaXMuX3JlbmRlcldlYkdMKHJlbmRlcmVyKTtcblxuICAgICAgICAvLyBub3cgbG9vcCB0aHJvdWdoIHRoZSBjaGlsZHJlbiBhbmQgbWFrZSBzdXJlIHRoZXkgZ2V0IHJlbmRlcmVkXG4gICAgICAgIGZvciAoaSA9IDAsIGogPSB0aGlzLmNoaWxkcmVuLmxlbmd0aDsgaSA8IGo7IGkrKylcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5jaGlsZHJlbltpXS5yZW5kZXJXZWJHTChyZW5kZXJlcik7XG4gICAgICAgIH1cblxuICAgICAgICByZW5kZXJlci5jdXJyZW50UmVuZGVyZXIuZmx1c2goKTtcblxuICAgICAgICBpZiAodGhpcy5fbWFzaylcbiAgICAgICAge1xuICAgICAgICAgICAgcmVuZGVyZXIubWFza01hbmFnZXIucG9wTWFzayh0aGlzLCB0aGlzLl9tYXNrKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLl9maWx0ZXJzKVxuICAgICAgICB7XG4gICAgICAgICAgICByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLnBvcEZpbHRlcigpO1xuXG4gICAgICAgIH1cbiAgICAgICAgcmVuZGVyZXIuY3VycmVudFJlbmRlcmVyLnN0YXJ0KCk7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHRoaXMuX3JlbmRlcldlYkdMKHJlbmRlcmVyKTtcblxuICAgICAgICAvLyBzaW1wbGUgcmVuZGVyIGNoaWxkcmVuIVxuICAgICAgICBmb3IgKGkgPSAwLCBqID0gdGhpcy5jaGlsZHJlbi5sZW5ndGg7IGkgPCBqOyArK2kpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuY2hpbGRyZW5baV0ucmVuZGVyV2ViR0wocmVuZGVyZXIpO1xuICAgICAgICB9XG4gICAgfVxufTtcblxuLyoqXG4gKiBUbyBiZSBvdmVycmlkZGVuIGJ5IHRoZSBzdWJjbGFzc1xuICpcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5XZWJHTFJlbmRlcmVyfSBUaGUgcmVuZGVyZXJcbiAqIEBwcml2YXRlXG4gKi9cbkNvbnRhaW5lci5wcm90b3R5cGUuX3JlbmRlcldlYkdMID0gZnVuY3Rpb24gKHJlbmRlcmVyKSAvLyBqc2hpbnQgdW51c2VkOmZhbHNlXG57XG4gICAgLy8gdGhpcyBpcyB3aGVyZSBjb250ZW50IGl0c2VsZiBnZXRzIHJlbmRlcmVkLi4uXG59O1xuXG4vKipcbiAqIFRvIGJlIG92ZXJyaWRkZW4gYnkgdGhlIHN1YmNsYXNzXG4gKlxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLkNhbnZhc1JlbmRlcmVyfSBUaGUgcmVuZGVyZXJcbiAqIEBwcml2YXRlXG4gKi9cbkNvbnRhaW5lci5wcm90b3R5cGUuX3JlbmRlckNhbnZhcyA9IGZ1bmN0aW9uIChyZW5kZXJlcikgLy8ganNoaW50IHVudXNlZDpmYWxzZVxue1xuICAgIC8vIHRoaXMgaXMgd2hlcmUgY29udGVudCBpdHNlbGYgZ2V0cyByZW5kZXJlZC4uLlxufTtcblxuXG4vKipcbiAqIFJlbmRlcnMgdGhlIG9iamVjdCB1c2luZyB0aGUgQ2FudmFzIHJlbmRlcmVyXG4gKlxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLkNhbnZhc1JlbmRlcmVyfSBUaGUgcmVuZGVyZXJcbiAqL1xuQ29udGFpbmVyLnByb3RvdHlwZS5yZW5kZXJDYW52YXMgPSBmdW5jdGlvbiAocmVuZGVyZXIpXG57XG4gICAgLy8gaWYgbm90IHZpc2libGUgb3IgdGhlIGFscGhhIGlzIDAgdGhlbiBubyBuZWVkIHRvIHJlbmRlciB0aGlzXG4gICAgaWYgKCF0aGlzLnZpc2libGUgfHwgdGhpcy5hbHBoYSA8PSAwIHx8ICF0aGlzLnJlbmRlcmFibGUpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX21hc2spXG4gICAge1xuICAgICAgICByZW5kZXJlci5tYXNrTWFuYWdlci5wdXNoTWFzayh0aGlzLl9tYXNrLCByZW5kZXJlcik7XG4gICAgfVxuXG4gICAgdGhpcy5fcmVuZGVyQ2FudmFzKHJlbmRlcmVyKTtcbiAgICBmb3IgKHZhciBpID0gMCwgaiA9IHRoaXMuY2hpbGRyZW4ubGVuZ3RoOyBpIDwgajsgKytpKVxuICAgIHtcbiAgICAgICAgdGhpcy5jaGlsZHJlbltpXS5yZW5kZXJDYW52YXMocmVuZGVyZXIpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLl9tYXNrKVxuICAgIHtcbiAgICAgICAgcmVuZGVyZXIubWFza01hbmFnZXIucG9wTWFzayhyZW5kZXJlcik7XG4gICAgfVxufTtcblxuLyoqXG4gKiBEZXN0cm95cyB0aGUgY29udGFpbmVyXG4gKiBAcGFyYW0gW2Rlc3Ryb3lDaGlsZHJlbj1mYWxzZV0ge2Jvb2xlYW59IGlmIHNldCB0byB0cnVlLCBhbGwgdGhlIGNoaWxkcmVuIHdpbGwgaGF2ZSB0aGVpciBkZXN0cm95IG1ldGhvZCBjYWxsZWQgYXMgd2VsbFxuICovXG5Db250YWluZXIucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoZGVzdHJveUNoaWxkcmVuKVxue1xuICAgIERpc3BsYXlPYmplY3QucHJvdG90eXBlLmRlc3Ryb3kuY2FsbCh0aGlzKTtcblxuICAgIGlmIChkZXN0cm95Q2hpbGRyZW4pXG4gICAge1xuICAgICAgICBmb3IgKHZhciBpID0gMCwgaiA9IHRoaXMuY2hpbGRyZW4ubGVuZ3RoOyBpIDwgajsgKytpKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmNoaWxkcmVuW2ldLmRlc3Ryb3koZGVzdHJveUNoaWxkcmVuKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMucmVtb3ZlQ2hpbGRyZW4oKTtcblxuICAgIHRoaXMuY2hpbGRyZW4gPSBudWxsO1xufTtcbiIsInZhciBtYXRoID0gcmVxdWlyZSgnLi4vbWF0aCcpLFxuICAgIFJlbmRlclRleHR1cmUgPSByZXF1aXJlKCcuLi90ZXh0dXJlcy9SZW5kZXJUZXh0dXJlJyksXG4gICAgRXZlbnRFbWl0dGVyID0gcmVxdWlyZSgnZXZlbnRlbWl0dGVyMycpLFxuICAgIENPTlNUID0gcmVxdWlyZSgnLi4vY29uc3QnKSxcbiAgICBfdGVtcE1hdHJpeCA9IG5ldyBtYXRoLk1hdHJpeCgpLFxuICAgIF90ZW1wRGlzcGxheU9iamVjdFBhcmVudCA9IHt3b3JsZFRyYW5zZm9ybTpuZXcgbWF0aC5NYXRyaXgoKSwgd29ybGRBbHBoYToxLCBjaGlsZHJlbjpbXX07XG5cblxuLyoqXG4gKiBUaGUgYmFzZSBjbGFzcyBmb3IgYWxsIG9iamVjdHMgdGhhdCBhcmUgcmVuZGVyZWQgb24gdGhlIHNjcmVlbi5cbiAqIFRoaXMgaXMgYW4gYWJzdHJhY3QgY2xhc3MgYW5kIHNob3VsZCBub3QgYmUgdXNlZCBvbiBpdHMgb3duIHJhdGhlciBpdCBzaG91bGQgYmUgZXh0ZW5kZWQuXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBFdmVudEVtaXR0ZXJcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKi9cbmZ1bmN0aW9uIERpc3BsYXlPYmplY3QoKVxue1xuICAgIEV2ZW50RW1pdHRlci5jYWxsKHRoaXMpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGNvb3JkaW5hdGUgb2YgdGhlIG9iamVjdCByZWxhdGl2ZSB0byB0aGUgbG9jYWwgY29vcmRpbmF0ZXMgb2YgdGhlIHBhcmVudC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuUG9pbnR9XG4gICAgICovXG4gICAgdGhpcy5wb3NpdGlvbiA9IG5ldyBtYXRoLlBvaW50KCk7XG4gICAgdGhpcy5fcG9zaXRpb24gPSBuZXcgQ2FjaGVQb2ludCh0aGlzKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBzY2FsZSBmYWN0b3Igb2YgdGhlIG9iamVjdC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuUG9pbnR9XG4gICAgICovXG4gICAgdGhpcy5zY2FsZSA9IG5ldyBtYXRoLlBvaW50KDEsIDEpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHBpdm90IHBvaW50IG9mIHRoZSBkaXNwbGF5T2JqZWN0IHRoYXQgaXQgcm90YXRlcyBhcm91bmRcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuUG9pbnR9XG4gICAgICovXG4gICAgdGhpcy5waXZvdCA9IG5ldyBtYXRoLlBvaW50KDAsIDApO1xuXG5cbiAgICAvKipcbiAgICAgKiBUaGUgc2tldyBmYWN0b3IgZm9yIHRoZSBvYmplY3QgaW4gcmFkaWFucy5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuUG9pbnR9XG4gICAgICovXG4gICAgdGhpcy5za2V3ID0gbmV3IG1hdGguUG9pbnQoMCwgMCk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgcm90YXRpb24gb2YgdGhlIG9iamVjdCBpbiByYWRpYW5zLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMuX3JvdGF0aW9uID0gMDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBvcGFjaXR5IG9mIHRoZSBvYmplY3QuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy5hbHBoYSA9IDE7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgdmlzaWJpbGl0eSBvZiB0aGUgb2JqZWN0LiBJZiBmYWxzZSB0aGUgb2JqZWN0IHdpbGwgbm90IGJlIGRyYXduLCBhbmRcbiAgICAgKiB0aGUgdXBkYXRlVHJhbnNmb3JtIGZ1bmN0aW9uIHdpbGwgbm90IGJlIGNhbGxlZC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICovXG4gICAgdGhpcy52aXNpYmxlID0gdHJ1ZTtcblxuICAgIC8qKlxuICAgICAqIENhbiB0aGlzIG9iamVjdCBiZSByZW5kZXJlZCwgaWYgZmFsc2UgdGhlIG9iamVjdCB3aWxsIG5vdCBiZSBkcmF3biBidXQgdGhlIHVwZGF0ZVRyYW5zZm9ybVxuICAgICAqIG1ldGhvZHMgd2lsbCBzdGlsbCBiZSBjYWxsZWQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqL1xuICAgIHRoaXMucmVuZGVyYWJsZSA9IHRydWU7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgZGlzcGxheSBvYmplY3QgY29udGFpbmVyIHRoYXQgY29udGFpbnMgdGhpcyBkaXNwbGF5IG9iamVjdC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuQ29udGFpbmVyfVxuICAgICAqIEByZWFkT25seVxuICAgICAqL1xuICAgIHRoaXMucGFyZW50ID0gbnVsbDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBtdWx0aXBsaWVkIGFscGhhIG9mIHRoZSBkaXNwbGF5T2JqZWN0XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQHJlYWRPbmx5XG4gICAgICovXG4gICAgdGhpcy53b3JsZEFscGhhID0gMTtcblxuICAgIC8qKlxuICAgICAqIEN1cnJlbnQgdHJhbnNmb3JtIG9mIHRoZSBvYmplY3QgYmFzZWQgb24gd29ybGQgKHBhcmVudCkgZmFjdG9yc1xuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5NYXRyaXh9XG4gICAgICogQHJlYWRPbmx5XG4gICAgICovXG4gICAgdGhpcy53b3JsZFRyYW5zZm9ybSA9IG5ldyBtYXRoLk1hdHJpeCgpO1xuICAgIHRoaXMubG9jYWxUcmFuc2Zvcm0gPSBuZXcgbWF0aC5NYXRyaXgoKTtcblxuXG4gICAgLyoqXG4gICAgICogVGhlIGFyZWEgdGhlIGZpbHRlciBpcyBhcHBsaWVkIHRvLiBUaGlzIGlzIHVzZWQgYXMgbW9yZSBvZiBhbiBvcHRpbWlzYXRpb25cbiAgICAgKiByYXRoZXIgdGhhbiBmaWd1cmluZyBvdXQgdGhlIGRpbWVuc2lvbnMgb2YgdGhlIGRpc3BsYXlPYmplY3QgZWFjaCBmcmFtZSB5b3UgY2FuIHNldCB0aGlzIHJlY3RhbmdsZVxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5SZWN0YW5nbGV9XG4gICAgICovXG4gICAgdGhpcy5maWx0ZXJBcmVhID0gbnVsbDtcblxuICAgIC8qKlxuICAgICAqIGNhY2hlZCBzaW4gcm90YXRpb25cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX3NyID0gMDtcblxuICAgIC8qKlxuICAgICAqIGNhY2hlZCBjb3Mgcm90YXRpb25cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX2NyID0gMTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBvcmlnaW5hbCwgY2FjaGVkIGJvdW5kcyBvZiB0aGUgb2JqZWN0XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlJlY3RhbmdsZX1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX2JvdW5kcyA9IG5ldyBtYXRoLlJlY3RhbmdsZSgwLCAwLCAxLCAxKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBtb3N0IHVwLXRvLWRhdGUgYm91bmRzIG9mIHRoZSBvYmplY3RcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuUmVjdGFuZ2xlfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fY3VycmVudEJvdW5kcyA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgb3JpZ2luYWwsIGNhY2hlZCBtYXNrIG9mIHRoZSBvYmplY3RcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuUmVjdGFuZ2xlfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fbWFzayA9IG51bGw7XG5cbiAgICB0aGlzLmRpcnR5VHJhbnNmb3JtID0gdHJ1ZTtcbn1cblxuLy8gY29uc3RydWN0b3JcbkRpc3BsYXlPYmplY3QucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShFdmVudEVtaXR0ZXIucHJvdG90eXBlKTtcbkRpc3BsYXlPYmplY3QucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gRGlzcGxheU9iamVjdDtcbm1vZHVsZS5leHBvcnRzID0gRGlzcGxheU9iamVjdDtcblxudmFyIENhY2hlUG9pbnQgPSBmdW5jdGlvbihkb2Mpe1xuICAgIFxuICAgIHRoaXMuZG9jID0gZG9jO1xuXG4gICAgdGhpcy54ID0gMDtcbiAgICB0aGlzLnkgPSAwO1xufVxuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhDYWNoZVBvaW50LnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFRoZSBwb3NpdGlvbiBvZiB0aGUgZGlzcGxheU9iamVjdCBvbiB0aGUgeCBheGlzIHJlbGF0aXZlIHRvIHRoZSBsb2NhbCBjb29yZGluYXRlcyBvZiB0aGUgcGFyZW50LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLkRpc3BsYXlPYmplY3QjXG4gICAgICovXG4gICAgeDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmRvYy5wb3NpdGlvbi54O1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5kb2MucG9zaXRpb24ueCA9IHZhbHVlO1xuICAgICAgICAgICAgdGhpcy5kb2MuZGlydHlUcmFuc2Zvcm0gPSB0cnVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIHk6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5kb2MucG9zaWl0b24ueTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuZG9jLnBvc2l0aW9uLnkgPSB2YWx1ZTtcbiAgICAgICAgICAgIHRoaXMuZG9jLmRpcnR5VHJhbnNmb3JtID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuXG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKERpc3BsYXlPYmplY3QucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogVGhlIHBvc2l0aW9uIG9mIHRoZSBkaXNwbGF5T2JqZWN0IG9uIHRoZSB4IGF4aXMgcmVsYXRpdmUgdG8gdGhlIGxvY2FsIGNvb3JkaW5hdGVzIG9mIHRoZSBwYXJlbnQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuRGlzcGxheU9iamVjdCNcbiAgICAgKi9cbiAgICB4OiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMucG9zaXRpb24ueDtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMucG9zaXRpb24ueCA9IHZhbHVlO1xuICAgICAgICAgICAgdGhpcy5kaXJ0eVRyYW5zZm9ybSA9IHRydWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVGhlIHBvc2l0aW9uIG9mIHRoZSBkaXNwbGF5T2JqZWN0IG9uIHRoZSB5IGF4aXMgcmVsYXRpdmUgdG8gdGhlIGxvY2FsIGNvb3JkaW5hdGVzIG9mIHRoZSBwYXJlbnQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuRGlzcGxheU9iamVjdCNcbiAgICAgKi9cbiAgICB5OiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMucG9zaXRpb24ueTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMucG9zaXRpb24ueSA9IHZhbHVlO1xuICAgICAgICAgICAgdGhpcy5kaXJ0eVRyYW5zZm9ybSA9IHRydWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgc2NhbGVYOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuc2NhbGUueDtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuc2NhbGUueCA9IHZhbHVlO1xuICAgICAgICAgICAgdGhpcy5kaXJ0eVRyYW5zZm9ybSA9IHRydWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVGhlIHBvc2l0aW9uIG9mIHRoZSBkaXNwbGF5T2JqZWN0IG9uIHRoZSB5IGF4aXMgcmVsYXRpdmUgdG8gdGhlIGxvY2FsIGNvb3JkaW5hdGVzIG9mIHRoZSBwYXJlbnQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuRGlzcGxheU9iamVjdCNcbiAgICAgKi9cbiAgICBzY2FsZVk6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5zY2FsZS55O1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5zY2FsZS55ID0gdmFsdWU7XG4gICAgICAgICAgICB0aGlzLmRpcnR5VHJhbnNmb3JtID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICByb3RhdGlvbjoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9yb3RhdGlvbjtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuX3JvdGF0aW9uID0gdmFsdWU7XG4gICAgICAgICAgICB0aGlzLmRpcnR5VHJhbnNmb3JtID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMuX3NyID0gTWF0aC5zaW4odmFsdWUpO1xuICAgICAgICAgICAgdGhpcy5fY3IgPSBNYXRoLmNvcyh2YWx1ZSk7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVGhlIHBvc2l0aW9uIG9mIHRoZSBkaXNwbGF5T2JqZWN0IG9uIHRoZSB5IGF4aXMgcmVsYXRpdmUgdG8gdGhlIGxvY2FsIGNvb3JkaW5hdGVzIG9mIHRoZSBwYXJlbnQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuRGlzcGxheU9iamVjdCNcbiAgICAgKi9cbiAgICBzY2FsZVk6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5zY2FsZS55O1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5zY2FsZS55ID0gdmFsdWU7XG4gICAgICAgICAgICB0aGlzLmRpcnR5VHJhbnNmb3JtID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBJbmRpY2F0ZXMgaWYgdGhlIHNwcml0ZSBpcyBnbG9iYWxseSB2aXNpYmxlLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5EaXNwbGF5T2JqZWN0I1xuICAgICAqIEByZWFkb25seVxuICAgICAqL1xuICAgIHdvcmxkVmlzaWJsZToge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHZhciBpdGVtID0gdGhpcztcblxuICAgICAgICAgICAgZG8ge1xuICAgICAgICAgICAgICAgIGlmICghaXRlbS52aXNpYmxlKVxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGl0ZW0gPSBpdGVtLnBhcmVudDtcbiAgICAgICAgICAgIH0gd2hpbGUgKGl0ZW0pO1xuXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBTZXRzIGEgbWFzayBmb3IgdGhlIGRpc3BsYXlPYmplY3QuIEEgbWFzayBpcyBhbiBvYmplY3QgdGhhdCBsaW1pdHMgdGhlIHZpc2liaWxpdHkgb2YgYW4gb2JqZWN0IHRvIHRoZSBzaGFwZSBvZiB0aGUgbWFzayBhcHBsaWVkIHRvIGl0LlxuICAgICAqIEluIFBJWEkgYSByZWd1bGFyIG1hc2sgbXVzdCBiZSBhIFBJWEkuR3JhcGhpY3Mgb3IgYSBQSVhJLlNwcml0ZSBvYmplY3QuIFRoaXMgYWxsb3dzIGZvciBtdWNoIGZhc3RlciBtYXNraW5nIGluIGNhbnZhcyBhcyBpdCB1dGlsaXNlcyBzaGFwZSBjbGlwcGluZy5cbiAgICAgKiBUbyByZW1vdmUgYSBtYXNrLCBzZXQgdGhpcyBwcm9wZXJ0eSB0byBudWxsLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5HcmFwaGljc3xQSVhJLlNwcml0ZX1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5EaXNwbGF5T2JqZWN0I1xuICAgICAqL1xuICAgIG1hc2s6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fbWFzaztcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGlmICh0aGlzLl9tYXNrKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHRoaXMuX21hc2sucmVuZGVyYWJsZSA9IHRydWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuX21hc2sgPSB2YWx1ZTtcblxuICAgICAgICAgICAgaWYgKHRoaXMuX21hc2spXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdGhpcy5fbWFzay5yZW5kZXJhYmxlID0gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgZmlsdGVycyBmb3IgdGhlIGRpc3BsYXlPYmplY3QuXG4gICAgICogKiBJTVBPUlRBTlQ6IFRoaXMgaXMgYSB3ZWJHTCBvbmx5IGZlYXR1cmUgYW5kIHdpbGwgYmUgaWdub3JlZCBieSB0aGUgY2FudmFzIHJlbmRlcmVyLlxuICAgICAqIFRvIHJlbW92ZSBmaWx0ZXJzIHNpbXBseSBzZXQgdGhpcyBwcm9wZXJ0eSB0byAnbnVsbCdcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuQWJzdHJhY3RGaWx0ZXJbXX1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5EaXNwbGF5T2JqZWN0I1xuICAgICAqL1xuICAgIGZpbHRlcnM6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fZmlsdGVycyAmJiB0aGlzLl9maWx0ZXJzLnNsaWNlKCk7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLl9maWx0ZXJzID0gdmFsdWUgJiYgdmFsdWUuc2xpY2UoKTtcbiAgICAgICAgfVxuICAgIH1cblxufSk7XG5cbi8qXG4gKiBVcGRhdGVzIHRoZSBvYmplY3QgdHJhbnNmb3JtIGZvciByZW5kZXJpbmdcbiAqXG4gKiBUT0RPIC0gT3B0aW1pemF0aW9uIHBhc3MhXG4gKi9cbkRpc3BsYXlPYmplY3QucHJvdG90eXBlLnVwZGF0ZVRyYW5zZm9ybSA9IGZ1bmN0aW9uICgpXG57XG4gICAgdmFyIHB0ID0gdGhpcy5wYXJlbnQud29ybGRUcmFuc2Zvcm07XG4gICAgdmFyIHd0ID0gdGhpcy53b3JsZFRyYW5zZm9ybTtcbiAgICB2YXIgbHQgPSB0aGlzLmxvY2FsVHJhbnNmb3JtO1xuXG4gICAgaWYodGhpcy5kaXJ0eVRyYW5zZm9ybSlcbiAgICB7XG4gICAgICAgIC8vIGdldCB0aGUgbWF0cml4IHZhbHVlcyBvZiB0aGUgZGlzcGxheW9iamVjdCBiYXNlZCBvbiBpdHMgdHJhbnNmb3JtIHByb3BlcnRpZXMuLlxuICAgICAgICBsdC5hICA9ICB0aGlzLl9jciAqIHRoaXMuc2NhbGUueDtcbiAgICAgICAgbHQuYiAgPSAgdGhpcy5fc3IgKiB0aGlzLnNjYWxlLng7XG4gICAgICAgIGx0LmMgID0gLXRoaXMuX3NyICogdGhpcy5zY2FsZS55O1xuICAgICAgICBsdC5kICA9ICB0aGlzLl9jciAqIHRoaXMuc2NhbGUueTtcbiAgICAgICAgbHQudHggPSAgdGhpcy5wb3NpdGlvbi54IC0gKHRoaXMucGl2b3QueCAqIGx0LmEgKyB0aGlzLnBpdm90LnkgKiBsdC5jKTtcbiAgICAgICAgbHQudHkgPSAgdGhpcy5wb3NpdGlvbi55IC0gKHRoaXMucGl2b3QueCAqIGx0LmIgKyB0aGlzLnBpdm90LnkgKiBsdC5kKTtcbiAgICB9XG5cbiAgICBpZih0aGlzLmRpcnR5VHJhbnNmb3JtIHx8IHRoaXMucGFyZW50LmRpcnR5VHJhbnNmb3JtKVxuICAgIHsgICAgICBcbiAgICAgICAgLy8gY29uY2F0IHRoZSBwYXJlbnQgbWF0cml4IHdpdGggdGhlIG9iamVjdHMgdHJhbnNmb3JtLlxuICAgICAgICB3dC5hICA9IGx0LmEgICogcHQuYSArIGx0LmIgICogcHQuYztcbiAgICAgICAgd3QuYiAgPSBsdC5hICAqIHB0LmIgKyBsdC5iICAqIHB0LmQ7XG4gICAgICAgIHd0LmMgID0gbHQuYyAgKiBwdC5hICsgbHQuZCAgKiBwdC5jO1xuICAgICAgICB3dC5kICA9IGx0LmMgICogcHQuYiArIGx0LmQgICogcHQuZDtcbiAgICAgICAgd3QudHggPSBsdC50eCAqIHB0LmEgKyBsdC50eSAqIHB0LmMgKyBwdC50eDtcbiAgICAgICAgd3QudHkgPSBsdC50eCAqIHB0LmIgKyBsdC50eSAqIHB0LmQgKyBwdC50eTsgICAgICAgXG4gICAgXG4gICAgICAgIHRoaXMuX2N1cnJlbnRCb3VuZHMgPSBudWxsO1xuICAgIH1cblxuICAgIC8vIG11bHRpcGx5IHRoZSBhbHBoYXMuLlxuICAgIHRoaXMud29ybGRBbHBoYSA9IHRoaXMuYWxwaGEgKiB0aGlzLnBhcmVudC53b3JsZEFscGhhO1xuXG4gICAgLy8gcmVzZXQgdGhlIGJvdW5kcyBlYWNoIHRpbWUgdGhpcyBpcyBjYWxsZWQhXG4gICAgXG59O1xuXG4vLyBwZXJmb3JtYW5jZSBpbmNyZWFzZSB0byBhdm9pZCB1c2luZyBjYWxsLi4gKDEweCBmYXN0ZXIpXG5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS5kaXNwbGF5T2JqZWN0VXBkYXRlVHJhbnNmb3JtID0gRGlzcGxheU9iamVjdC5wcm90b3R5cGUudXBkYXRlVHJhbnNmb3JtO1xuXG4vKipcbiAqXG4gKlxuICogUmV0cmlldmVzIHRoZSBib3VuZHMgb2YgdGhlIGRpc3BsYXlPYmplY3QgYXMgYSByZWN0YW5nbGUgb2JqZWN0XG4gKlxuICogQHBhcmFtIG1hdHJpeCB7UElYSS5NYXRyaXh9XG4gKiBAcmV0dXJuIHtQSVhJLlJlY3RhbmdsZX0gdGhlIHJlY3Rhbmd1bGFyIGJvdW5kaW5nIGFyZWFcbiAqL1xuRGlzcGxheU9iamVjdC5wcm90b3R5cGUuZ2V0Qm91bmRzID0gZnVuY3Rpb24gKG1hdHJpeCkgLy8ganNoaW50IHVudXNlZDpmYWxzZVxue1xuICAgIHJldHVybiBtYXRoLlJlY3RhbmdsZS5FTVBUWTtcbn07XG5cbi8qKlxuICogUmV0cmlldmVzIHRoZSBsb2NhbCBib3VuZHMgb2YgdGhlIGRpc3BsYXlPYmplY3QgYXMgYSByZWN0YW5nbGUgb2JqZWN0XG4gKlxuICogQHJldHVybiB7UElYSS5SZWN0YW5nbGV9IHRoZSByZWN0YW5ndWxhciBib3VuZGluZyBhcmVhXG4gKi9cbkRpc3BsYXlPYmplY3QucHJvdG90eXBlLmdldExvY2FsQm91bmRzID0gZnVuY3Rpb24gKClcbntcbiAgICByZXR1cm4gdGhpcy5nZXRCb3VuZHMobWF0aC5NYXRyaXguSURFTlRJVFkpO1xufTtcblxuLyoqXG4gKiBDYWxjdWxhdGVzIHRoZSBnbG9iYWwgcG9zaXRpb24gb2YgdGhlIGRpc3BsYXkgb2JqZWN0XG4gKlxuICogQHBhcmFtIHBvc2l0aW9uIHtQSVhJLlBvaW50fSBUaGUgd29ybGQgb3JpZ2luIHRvIGNhbGN1bGF0ZSBmcm9tXG4gKiBAcmV0dXJuIHtQSVhJLlBvaW50fSBBIHBvaW50IG9iamVjdCByZXByZXNlbnRpbmcgdGhlIHBvc2l0aW9uIG9mIHRoaXMgb2JqZWN0XG4gKi9cbkRpc3BsYXlPYmplY3QucHJvdG90eXBlLnRvR2xvYmFsID0gZnVuY3Rpb24gKHBvc2l0aW9uKVxue1xuICAgIC8vIHRoaXMgcGFyZW50IGNoZWNrIGlzIGZvciBqdXN0IGluIGNhc2UgdGhlIGl0ZW0gaXMgYSByb290IG9iamVjdC5cbiAgICAvLyBJZiBpdCBpcyB3ZSBuZWVkIHRvIGdpdmUgaXQgYSB0ZW1wb3JhcnkgcGFyZW50IHNvIHRoYXQgZGlzcGxheU9iamVjdFVwZGF0ZVRyYW5zZm9ybSB3b3JrcyBjb3JyZWN0bHlcbiAgICAvLyB0aGlzIGlzIG1haW5seSB0byBhdm9pZCBhIHBhcmVudCBjaGVjayBpbiB0aGUgbWFpbiBsb29wLiBFdmVyeSBsaXR0bGUgaGVscHMgZm9yIHBlcmZvcm1hbmNlIDopXG4gICAgaWYoIXRoaXMucGFyZW50KVxuICAgIHtcbiAgICAgICAgdGhpcy5wYXJlbnQgPSBfdGVtcERpc3BsYXlPYmplY3RQYXJlbnQ7XG4gICAgICAgIHRoaXMuZGlzcGxheU9iamVjdFVwZGF0ZVRyYW5zZm9ybSgpO1xuICAgICAgICB0aGlzLnBhcmVudCA9IG51bGw7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHRoaXMuZGlzcGxheU9iamVjdFVwZGF0ZVRyYW5zZm9ybSgpO1xuICAgIH1cblxuICAgIC8vIGRvbid0IG5lZWQgdG8gdXBkYXRlIHRoZSBsb3RcbiAgICByZXR1cm4gdGhpcy53b3JsZFRyYW5zZm9ybS5hcHBseShwb3NpdGlvbik7XG59O1xuXG4vKipcbiAqIENhbGN1bGF0ZXMgdGhlIGxvY2FsIHBvc2l0aW9uIG9mIHRoZSBkaXNwbGF5IG9iamVjdCByZWxhdGl2ZSB0byBhbm90aGVyIHBvaW50XG4gKlxuICogQHBhcmFtIHBvc2l0aW9uIHtQSVhJLlBvaW50fSBUaGUgd29ybGQgb3JpZ2luIHRvIGNhbGN1bGF0ZSBmcm9tXG4gKiBAcGFyYW0gW2Zyb21dIHtQSVhJLkRpc3BsYXlPYmplY3R9IFRoZSBEaXNwbGF5T2JqZWN0IHRvIGNhbGN1bGF0ZSB0aGUgZ2xvYmFsIHBvc2l0aW9uIGZyb21cbiAqIEBwYXJhbSBbcG9pbnRdIHtQSVhJLlBvaW50fSBBIFBvaW50IG9iamVjdCBpbiB3aGljaCB0byBzdG9yZSB0aGUgdmFsdWUsIG9wdGlvbmFsIChvdGhlcndpc2Ugd2lsbCBjcmVhdGUgYSBuZXcgUG9pbnQpXG4gKiBAcmV0dXJuIHtQSVhJLlBvaW50fSBBIHBvaW50IG9iamVjdCByZXByZXNlbnRpbmcgdGhlIHBvc2l0aW9uIG9mIHRoaXMgb2JqZWN0XG4gKi9cbkRpc3BsYXlPYmplY3QucHJvdG90eXBlLnRvTG9jYWwgPSBmdW5jdGlvbiAocG9zaXRpb24sIGZyb20sIHBvaW50KVxue1xuICAgIGlmIChmcm9tKVxuICAgIHtcbiAgICAgICAgcG9zaXRpb24gPSBmcm9tLnRvR2xvYmFsKHBvc2l0aW9uKTtcbiAgICB9XG5cbiAgICAvLyB0aGlzIHBhcmVudCBjaGVjayBpcyBmb3IganVzdCBpbiBjYXNlIHRoZSBpdGVtIGlzIGEgcm9vdCBvYmplY3QuXG4gICAgLy8gSWYgaXQgaXMgd2UgbmVlZCB0byBnaXZlIGl0IGEgdGVtcG9yYXJ5IHBhcmVudCBzbyB0aGF0IGRpc3BsYXlPYmplY3RVcGRhdGVUcmFuc2Zvcm0gd29ya3MgY29ycmVjdGx5XG4gICAgLy8gdGhpcyBpcyBtYWlubHkgdG8gYXZvaWQgYSBwYXJlbnQgY2hlY2sgaW4gdGhlIG1haW4gbG9vcC4gRXZlcnkgbGl0dGxlIGhlbHBzIGZvciBwZXJmb3JtYW5jZSA6KVxuICAgIGlmKCF0aGlzLnBhcmVudClcbiAgICB7XG4gICAgICAgIHRoaXMucGFyZW50ID0gX3RlbXBEaXNwbGF5T2JqZWN0UGFyZW50O1xuICAgICAgICB0aGlzLmRpc3BsYXlPYmplY3RVcGRhdGVUcmFuc2Zvcm0oKTtcbiAgICAgICAgdGhpcy5wYXJlbnQgPSBudWxsO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICB0aGlzLmRpc3BsYXlPYmplY3RVcGRhdGVUcmFuc2Zvcm0oKTtcbiAgICB9XG5cbiAgICAvLyBzaW1wbHkgYXBwbHkgdGhlIG1hdHJpeC4uXG4gICAgcmV0dXJuIHRoaXMud29ybGRUcmFuc2Zvcm0uYXBwbHlJbnZlcnNlKHBvc2l0aW9uLCBwb2ludCk7XG59O1xuXG4vKipcbiAqIFJlbmRlcnMgdGhlIG9iamVjdCB1c2luZyB0aGUgV2ViR0wgcmVuZGVyZXJcbiAqXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcn0gVGhlIHJlbmRlcmVyXG4gKiBAcHJpdmF0ZVxuICovXG5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS5yZW5kZXJXZWJHTCA9IGZ1bmN0aW9uIChyZW5kZXJlcikgLy8ganNoaW50IHVudXNlZDpmYWxzZVxue1xuICAgIC8vIE9WRVJXUklURTtcbn07XG5cbi8qKlxuICogUmVuZGVycyB0aGUgb2JqZWN0IHVzaW5nIHRoZSBDYW52YXMgcmVuZGVyZXJcbiAqXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuQ2FudmFzUmVuZGVyZXJ9IFRoZSByZW5kZXJlclxuICogQHByaXZhdGVcbiAqL1xuRGlzcGxheU9iamVjdC5wcm90b3R5cGUucmVuZGVyQ2FudmFzID0gZnVuY3Rpb24gKHJlbmRlcmVyKSAvLyBqc2hpbnQgdW51c2VkOmZhbHNlXG57XG4gICAgLy8gT1ZFUldSSVRFO1xufTtcbi8qKlxuICogVXNlZnVsIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyBhIHRleHR1cmUgb2YgdGhlIGRpc3BsYXkgb2JqZWN0IHRoYXQgY2FuIHRoZW4gYmUgdXNlZCB0byBjcmVhdGUgc3ByaXRlc1xuICogVGhpcyBjYW4gYmUgcXVpdGUgdXNlZnVsIGlmIHlvdXIgZGlzcGxheU9iamVjdCBpcyBzdGF0aWMgLyBjb21wbGljYXRlZCBhbmQgbmVlZHMgdG8gYmUgcmV1c2VkIG11bHRpcGxlIHRpbWVzLlxuICpcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5DYW52YXNSZW5kZXJlcnxQSVhJLldlYkdMUmVuZGVyZXJ9IFRoZSByZW5kZXJlciB1c2VkIHRvIGdlbmVyYXRlIHRoZSB0ZXh0dXJlLlxuICogQHBhcmFtIHNjYWxlTW9kZSB7bnVtYmVyfSBTZWUge0BsaW5rIFBJWEkuU0NBTEVfTU9ERVN9IGZvciBwb3NzaWJsZSB2YWx1ZXNcbiAqIEBwYXJhbSByZXNvbHV0aW9uIHtudW1iZXJ9IFRoZSByZXNvbHV0aW9uIG9mIHRoZSB0ZXh0dXJlIGJlaW5nIGdlbmVyYXRlZFxuICogQHJldHVybiB7UElYSS5UZXh0dXJlfSBhIHRleHR1cmUgb2YgdGhlIGRpc3BsYXkgb2JqZWN0XG4gKi9cbkRpc3BsYXlPYmplY3QucHJvdG90eXBlLmdlbmVyYXRlVGV4dHVyZSA9IGZ1bmN0aW9uIChyZW5kZXJlciwgc2NhbGVNb2RlLCByZXNvbHV0aW9uKVxue1xuICAgIHZhciBib3VuZHMgPSB0aGlzLmdldExvY2FsQm91bmRzKCk7XG5cbiAgICB2YXIgcmVuZGVyVGV4dHVyZSA9IG5ldyBSZW5kZXJUZXh0dXJlKHJlbmRlcmVyLCBib3VuZHMud2lkdGggfCAwLCBib3VuZHMuaGVpZ2h0IHwgMCwgc2NhbGVNb2RlLCByZXNvbHV0aW9uKTtcblxuICAgIF90ZW1wTWF0cml4LnR4ID0gLWJvdW5kcy54O1xuICAgIF90ZW1wTWF0cml4LnR5ID0gLWJvdW5kcy55O1xuXG4gICAgcmVuZGVyVGV4dHVyZS5yZW5kZXIodGhpcywgX3RlbXBNYXRyaXgpO1xuXG4gICAgcmV0dXJuIHJlbmRlclRleHR1cmU7XG59O1xuXG4vKipcbiAqIFNldCB0aGUgcGFyZW50IENvbnRhaW5lciBvZiB0aGlzIERpc3BsYXlPYmplY3RcbiAqXG4gKiBAcGFyYW0gY29udGFpbmVyIHtDb250YWluZXJ9IFRoZSBDb250YWluZXIgdG8gYWRkIHRoaXMgRGlzcGxheU9iamVjdCB0b1xuICogQHJldHVybiB7Q29udGFpbmVyfSBUaGUgQ29udGFpbmVyIHRoYXQgdGhpcyBEaXNwbGF5T2JqZWN0IHdhcyBhZGRlZCB0b1xuICovXG5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS5zZXRQYXJlbnQgPSBmdW5jdGlvbiAoY29udGFpbmVyKVxue1xuICAgIGlmICghY29udGFpbmVyIHx8ICFjb250YWluZXIuYWRkQ2hpbGQpXG4gICAge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3NldFBhcmVudDogQXJndW1lbnQgbXVzdCBiZSBhIENvbnRhaW5lcicpO1xuICAgIH1cblxuICAgIGNvbnRhaW5lci5hZGRDaGlsZCh0aGlzKTtcbiAgICByZXR1cm4gY29udGFpbmVyO1xufTtcblxuLyoqXG4gKiBDb252ZW5pZW5jZSBmdW5jdGlvbiB0byBzZXQgdGhlIHBvc3Rpb24sIHNjYWxlLCBza2V3IGFuZCBwaXZvdCBhdCBvbmNlLlxuICpcbiAqIEBwYXJhbSBbeD0wXSB7bnVtYmVyfSBUaGUgWCBwb3NpdGlvblxuICogQHBhcmFtIFt5PTBdIHtudW1iZXJ9IFRoZSBZIHBvc2l0aW9uXG4gKiBAcGFyYW0gW3NjYWxlWD0xXSB7bnVtYmVyfSBUaGUgWCBzY2FsZSB2YWx1ZVxuICogQHBhcmFtIFtzY2FsZVk9MV0ge251bWJlcn0gVGhlIFkgc2NhbGUgdmFsdWVcbiAqIEBwYXJhbSBbcm90YXRpb249MF0ge251bWJlcn0gVGhlIHJvdGF0aW9uXG4gKiBAcGFyYW0gW3NrZXdYPTBdIHtudW1iZXJ9IFRoZSBYIHNrZXcgdmFsdWVcbiAqIEBwYXJhbSBbc2tld1k9MF0ge251bWJlcn0gVGhlIFkgc2tldyB2YWx1ZVxuICogQHBhcmFtIFtwaXZvdFg9MF0ge251bWJlcn0gVGhlIFggcGl2b3QgdmFsdWVcbiAqIEBwYXJhbSBbcGl2b3RZPTBdIHtudW1iZXJ9IFRoZSBZIHBpdm90IHZhbHVlXG4gKiBAcmV0dXJuIHtQSVhJLkRpc3BsYXlPYmplY3R9XG4gKi9cbkRpc3BsYXlPYmplY3QucHJvdG90eXBlLnNldFRyYW5zZm9ybSA9IGZ1bmN0aW9uKHgsIHksIHNjYWxlWCwgc2NhbGVZLCByb3RhdGlvbiwgc2tld1gsIHNrZXdZLCBwaXZvdFgsIHBpdm90WSkgLy9qc2hpbnQgaWdub3JlOmxpbmVcbntcbiAgICB0aGlzLnBvc2l0aW9uLnggPSB4IHx8IDA7XG4gICAgdGhpcy5wb3NpdGlvbi55ID0geSB8fCAwO1xuICAgIHRoaXMuc2NhbGUueCA9ICFzY2FsZVggPyAxIDogc2NhbGVYO1xuICAgIHRoaXMuc2NhbGUueSA9ICFzY2FsZVkgPyAxIDogc2NhbGVZO1xuICAgIHRoaXMucm90YXRpb24gPSByb3RhdGlvbiB8fCAwO1xuICAgIHRoaXMuc2tldy54ID0gc2tld1ggfHwgMDtcbiAgICB0aGlzLnNrZXcueSA9IHNrZXdZIHx8IDA7XG4gICAgdGhpcy5waXZvdC54ID0gcGl2b3RYIHx8IDA7XG4gICAgdGhpcy5waXZvdC55ID0gcGl2b3RZIHx8IDA7XG4gICAgdGhpcy5kaXJ0eVRyYW5zZm9ybSA9IHRydWU7XG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIEJhc2UgZGVzdHJveSBtZXRob2QgZm9yIGdlbmVyaWMgZGlzcGxheSBvYmplY3RzXG4gKlxuICovXG5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKClcbntcblxuICAgIHRoaXMucG9zaXRpb24gPSBudWxsO1xuICAgIHRoaXMuc2NhbGUgPSBudWxsO1xuICAgIHRoaXMucGl2b3QgPSBudWxsO1xuICAgIHRoaXMuc2tldyA9IG51bGw7XG5cbiAgICB0aGlzLnBhcmVudCA9IG51bGw7XG5cbiAgICB0aGlzLl9ib3VuZHMgPSBudWxsO1xuICAgIHRoaXMuX2N1cnJlbnRCb3VuZHMgPSBudWxsO1xuICAgIHRoaXMuX21hc2sgPSBudWxsO1xuXG4gICAgdGhpcy53b3JsZFRyYW5zZm9ybSA9IG51bGw7XG4gICAgdGhpcy5maWx0ZXJBcmVhID0gbnVsbDtcbn07XG4iLCJ2YXIgQ29udGFpbmVyID0gcmVxdWlyZSgnLi4vZGlzcGxheS9Db250YWluZXInKSxcbiAgICBUZXh0dXJlID0gcmVxdWlyZSgnLi4vdGV4dHVyZXMvVGV4dHVyZScpLFxuICAgIENhbnZhc0J1ZmZlciA9IHJlcXVpcmUoJy4uL3JlbmRlcmVycy9jYW52YXMvdXRpbHMvQ2FudmFzQnVmZmVyJyksXG4gICAgQ2FudmFzR3JhcGhpY3MgPSByZXF1aXJlKCcuLi9yZW5kZXJlcnMvY2FudmFzL3V0aWxzL0NhbnZhc0dyYXBoaWNzJyksXG4gICAgR3JhcGhpY3NEYXRhID0gcmVxdWlyZSgnLi9HcmFwaGljc0RhdGEnKSxcbiAgICBtYXRoID0gcmVxdWlyZSgnLi4vbWF0aCcpLFxuICAgIENPTlNUID0gcmVxdWlyZSgnLi4vY29uc3QnKSxcbiAgICB0ZW1wUG9pbnQgPSBuZXcgbWF0aC5Qb2ludCgpO1xuXG4vKipcbiAqIFRoZSBHcmFwaGljcyBjbGFzcyBjb250YWlucyBtZXRob2RzIHVzZWQgdG8gZHJhdyBwcmltaXRpdmUgc2hhcGVzIHN1Y2ggYXMgbGluZXMsIGNpcmNsZXMgYW5kXG4gKiByZWN0YW5nbGVzIHRvIHRoZSBkaXNwbGF5LCBhbmQgdG8gY29sb3IgYW5kIGZpbGwgdGhlbS5cbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQ29udGFpbmVyXG4gKiBAbWVtYmVyb2YgUElYSVxuICovXG5mdW5jdGlvbiBHcmFwaGljcygpXG57XG4gICAgQ29udGFpbmVyLmNhbGwodGhpcyk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYWxwaGEgdmFsdWUgdXNlZCB3aGVuIGZpbGxpbmcgdGhlIEdyYXBoaWNzIG9iamVjdC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAxXG4gICAgICovXG4gICAgdGhpcy5maWxsQWxwaGEgPSAxO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHdpZHRoICh0aGlja25lc3MpIG9mIGFueSBsaW5lcyBkcmF3bi5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAwXG4gICAgICovXG4gICAgdGhpcy5saW5lV2lkdGggPSAwO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGNvbG9yIG9mIGFueSBsaW5lcyBkcmF3bi5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge3N0cmluZ31cbiAgICAgKiBAZGVmYXVsdCAwXG4gICAgICovXG4gICAgdGhpcy5saW5lQ29sb3IgPSAwO1xuXG4gICAgLyoqXG4gICAgICogR3JhcGhpY3MgZGF0YVxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5HcmFwaGljc0RhdGFbXX1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuZ3JhcGhpY3NEYXRhID0gW107XG5cbiAgICAvKipcbiAgICAgKiBUaGUgdGludCBhcHBsaWVkIHRvIHRoZSBncmFwaGljIHNoYXBlLiBUaGlzIGlzIGEgaGV4IHZhbHVlLiBBcHBseSBhIHZhbHVlIG9mIDB4RkZGRkZGIHRvIHJlc2V0IHRoZSB0aW50LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDB4RkZGRkZGXG4gICAgICovXG4gICAgdGhpcy50aW50ID0gMHhGRkZGRkY7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgcHJldmlvdXMgdGludCBhcHBsaWVkIHRvIHRoZSBncmFwaGljIHNoYXBlLiBVc2VkIHRvIGNvbXBhcmUgdG8gdGhlIGN1cnJlbnQgdGludCBhbmQgY2hlY2sgaWYgdGhlcmVzIGNoYW5nZS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBkZWZhdWx0IDB4RkZGRkZGXG4gICAgICovXG4gICAgdGhpcy5fcHJldlRpbnQgPSAweEZGRkZGRjtcblxuICAgIC8qKlxuICAgICAqIFRoZSBibGVuZCBtb2RlIHRvIGJlIGFwcGxpZWQgdG8gdGhlIGdyYXBoaWMgc2hhcGUuIEFwcGx5IGEgdmFsdWUgb2YgYFBJWEkuQkxFTkRfTU9ERVMuTk9STUFMYCB0byByZXNldCB0aGUgYmxlbmQgbW9kZS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCBQSVhJLkJMRU5EX01PREVTLk5PUk1BTDtcbiAgICAgKiBAc2VlIFBJWEkuQkxFTkRfTU9ERVNcbiAgICAgKi9cbiAgICB0aGlzLmJsZW5kTW9kZSA9IENPTlNULkJMRU5EX01PREVTLk5PUk1BTDtcblxuICAgIC8qKlxuICAgICAqIEN1cnJlbnQgcGF0aFxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5HcmFwaGljc0RhdGF9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLmN1cnJlbnRQYXRoID0gbnVsbDtcblxuICAgIC8qKlxuICAgICAqIEFycmF5IGNvbnRhaW5pbmcgc29tZSBXZWJHTC1yZWxhdGVkIHByb3BlcnRpZXMgdXNlZCBieSB0aGUgV2ViR0wgcmVuZGVyZXIuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtvYmplY3Q8bnVtYmVyLCBvYmplY3Q+fVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgLy8gVE9ETyAtIF93ZWJnbCBzaG91bGQgdXNlIGEgcHJvdG90eXBlIG9iamVjdCwgbm90IGEgcmFuZG9tIHVuZG9jdW1lbnRlZCBvYmplY3QuLi5cbiAgICB0aGlzLl93ZWJHTCA9IHt9O1xuXG4gICAgLyoqXG4gICAgICogV2hldGhlciB0aGlzIHNoYXBlIGlzIGJlaW5nIHVzZWQgYXMgYSBtYXNrLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKi9cbiAgICB0aGlzLmlzTWFzayA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGJvdW5kcycgcGFkZGluZyB1c2VkIGZvciBib3VuZHMgY2FsY3VsYXRpb24uXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy5ib3VuZHNQYWRkaW5nID0gMDtcblxuICAgIC8qKlxuICAgICAqIEEgY2FjaGUgb2YgdGhlIGxvY2FsIGJvdW5kcyB0byBwcmV2ZW50IHJlY2FsY3VsYXRpb24uXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlJlY3RhbmdsZX1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX2xvY2FsQm91bmRzID0gbmV3IG1hdGguUmVjdGFuZ2xlKDAsMCwxLDEpO1xuXG4gICAgLyoqXG4gICAgICogVXNlZCB0byBkZXRlY3QgaWYgdGhlIGdyYXBoaWNzIG9iamVjdCBoYXMgY2hhbmdlZC4gSWYgdGhpcyBpcyBzZXQgdG8gdHJ1ZSB0aGVuIHRoZSBncmFwaGljc1xuICAgICAqIG9iamVjdCB3aWxsIGJlIHJlY2FsY3VsYXRlZC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLmRpcnR5ID0gdHJ1ZTtcblxuICAgIC8qKlxuICAgICAqIFVzZWQgdG8gZGV0ZWN0IGlmIHRoZSBXZWJHTCBncmFwaGljcyBvYmplY3QgaGFzIGNoYW5nZWQuIElmIHRoaXMgaXMgc2V0IHRvIHRydWUgdGhlbiB0aGVcbiAgICAgKiBncmFwaGljcyBvYmplY3Qgd2lsbCBiZSByZWNhbGN1bGF0ZWQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5nbERpcnR5ID0gZmFsc2U7XG5cbiAgICB0aGlzLmJvdW5kc0RpcnR5ID0gdHJ1ZTtcblxuICAgIC8qKlxuICAgICAqIFVzZWQgdG8gZGV0ZWN0IGlmIHRoZSBjYWNoZWQgc3ByaXRlIG9iamVjdCBuZWVkcyB0byBiZSB1cGRhdGVkLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuY2FjaGVkU3ByaXRlRGlydHkgPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIFdoZW4gY2FjaGVBc0JpdG1hcCBpcyBzZXQgdG8gdHJ1ZSB0aGUgZ3JhcGhpY3Mgb2JqZWN0IHdpbGwgYmUgcmVuZGVyZWQgYXMgaWYgaXQgd2FzIGEgc3ByaXRlLlxuICAgICAqIFRoaXMgaXMgdXNlZnVsIGlmIHlvdXIgZ3JhcGhpY3MgZWxlbWVudCBkb2VzIG5vdCBjaGFuZ2Ugb2Z0ZW4sIGFzIGl0IHdpbGwgc3BlZWQgdXAgdGhlIHJlbmRlcmluZ1xuICAgICAqIG9mIHRoZSBvYmplY3QgaW4gZXhjaGFuZ2UgZm9yIHRha2luZyB1cCB0ZXh0dXJlIG1lbW9yeS4gSXQgaXMgYWxzbyB1c2VmdWwgaWYgeW91IG5lZWQgdGhlIGdyYXBoaWNzXG4gICAgICogb2JqZWN0IHRvIGJlIGFudGktYWxpYXNlZCwgYmVjYXVzZSBpdCB3aWxsIGJlIHJlbmRlcmVkIHVzaW5nIGNhbnZhcy4gVGhpcyBpcyBub3QgcmVjb21tZW5kZWQgaWZcbiAgICAgKiB5b3UgYXJlIGNvbnN0YW50bHkgcmVkcmF3aW5nIHRoZSBncmFwaGljcyBlbGVtZW50LlxuICAgICAqXG4gICAgICogQG5hbWUgY2FjaGVBc0JpdG1hcFxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICogQG1lbWJlcm9mIFBJWEkuR3JhcGhpY3MjXG4gICAgICogQGRlZmF1bHQgZmFsc2VcbiAgICAgKi9cbn1cblxuLy8gY29uc3RydWN0b3JcbkdyYXBoaWNzLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoQ29udGFpbmVyLnByb3RvdHlwZSk7XG5HcmFwaGljcy5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBHcmFwaGljcztcbm1vZHVsZS5leHBvcnRzID0gR3JhcGhpY3M7XG5cbi8qKlxuICogQ3JlYXRlcyBhIG5ldyBHcmFwaGljcyBvYmplY3Qgd2l0aCB0aGUgc2FtZSB2YWx1ZXMgYXMgdGhpcyBvbmUuXG4gKiBOb3RlIHRoYXQgdGhlIG9ubHkgdGhlIHByb3BlcnRpZXMgb2YgdGhlIG9iamVjdCBhcmUgY2xvbmVkLCBub3QgaXRzIHRyYW5zZm9ybSAocG9zaXRpb24sc2NhbGUsZXRjKVxuICpcbiAqIEByZXR1cm4ge1BJWEkuR3JhcGhpY3N9XG4gKi9cbkdyYXBoaWNzLnByb3RvdHlwZS5jbG9uZSA9IGZ1bmN0aW9uICgpXG57XG4gICAgdmFyIGNsb25lID0gbmV3IEdyYXBoaWNzKCk7XG5cbiAgICBjbG9uZS5yZW5kZXJhYmxlICAgID0gdGhpcy5yZW5kZXJhYmxlO1xuICAgIGNsb25lLmZpbGxBbHBoYSAgICAgPSB0aGlzLmZpbGxBbHBoYTtcbiAgICBjbG9uZS5saW5lV2lkdGggICAgID0gdGhpcy5saW5lV2lkdGg7XG4gICAgY2xvbmUubGluZUNvbG9yICAgICA9IHRoaXMubGluZUNvbG9yO1xuICAgIGNsb25lLnRpbnQgICAgICAgICAgPSB0aGlzLnRpbnQ7XG4gICAgY2xvbmUuYmxlbmRNb2RlICAgICA9IHRoaXMuYmxlbmRNb2RlO1xuICAgIGNsb25lLmlzTWFzayAgICAgICAgPSB0aGlzLmlzTWFzaztcbiAgICBjbG9uZS5ib3VuZHNQYWRkaW5nID0gdGhpcy5ib3VuZHNQYWRkaW5nO1xuICAgIGNsb25lLmRpcnR5ICAgICAgICAgPSB0cnVlO1xuICAgIGNsb25lLmdsRGlydHkgICAgICAgPSB0cnVlO1xuICAgIGNsb25lLmNhY2hlZFNwcml0ZURpcnR5ID0gdGhpcy5jYWNoZWRTcHJpdGVEaXJ0eTtcblxuICAgIC8vIGNvcHkgZ3JhcGhpY3MgZGF0YVxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5ncmFwaGljc0RhdGEubGVuZ3RoOyArK2kpXG4gICAge1xuICAgICAgICBjbG9uZS5ncmFwaGljc0RhdGEucHVzaCh0aGlzLmdyYXBoaWNzRGF0YVtpXS5jbG9uZSgpKTtcbiAgICB9XG5cbiAgICBjbG9uZS5jdXJyZW50UGF0aCA9IGNsb25lLmdyYXBoaWNzRGF0YVtjbG9uZS5ncmFwaGljc0RhdGEubGVuZ3RoIC0gMV07XG5cbiAgICBjbG9uZS51cGRhdGVMb2NhbEJvdW5kcygpO1xuXG4gICAgcmV0dXJuIGNsb25lO1xufTtcblxuLyoqXG4gKiBTcGVjaWZpZXMgdGhlIGxpbmUgc3R5bGUgdXNlZCBmb3Igc3Vic2VxdWVudCBjYWxscyB0byBHcmFwaGljcyBtZXRob2RzIHN1Y2ggYXMgdGhlIGxpbmVUbygpIG1ldGhvZCBvciB0aGUgZHJhd0NpcmNsZSgpIG1ldGhvZC5cbiAqXG4gKiBAcGFyYW0gbGluZVdpZHRoIHtudW1iZXJ9IHdpZHRoIG9mIHRoZSBsaW5lIHRvIGRyYXcsIHdpbGwgdXBkYXRlIHRoZSBvYmplY3RzIHN0b3JlZCBzdHlsZVxuICogQHBhcmFtIGNvbG9yIHtudW1iZXJ9IGNvbG9yIG9mIHRoZSBsaW5lIHRvIGRyYXcsIHdpbGwgdXBkYXRlIHRoZSBvYmplY3RzIHN0b3JlZCBzdHlsZVxuICogQHBhcmFtIGFscGhhIHtudW1iZXJ9IGFscGhhIG9mIHRoZSBsaW5lIHRvIGRyYXcsIHdpbGwgdXBkYXRlIHRoZSBvYmplY3RzIHN0b3JlZCBzdHlsZVxuICogQHJldHVybiB7UElYSS5HcmFwaGljc31cbiAqL1xuR3JhcGhpY3MucHJvdG90eXBlLmxpbmVTdHlsZSA9IGZ1bmN0aW9uIChsaW5lV2lkdGgsIGNvbG9yLCBhbHBoYSlcbntcbiAgICB0aGlzLmxpbmVXaWR0aCA9IGxpbmVXaWR0aCB8fCAwO1xuICAgIHRoaXMubGluZUNvbG9yID0gY29sb3IgfHwgMDtcbiAgICB0aGlzLmxpbmVBbHBoYSA9IChhbHBoYSA9PT0gdW5kZWZpbmVkKSA/IDEgOiBhbHBoYTtcblxuICAgIGlmICh0aGlzLmN1cnJlbnRQYXRoKVxuICAgIHtcbiAgICAgICAgaWYgKHRoaXMuY3VycmVudFBhdGguc2hhcGUucG9pbnRzLmxlbmd0aClcbiAgICAgICAge1xuICAgICAgICAgICAgLy8gaGFsZndheSB0aHJvdWdoIGEgbGluZT8gc3RhcnQgYSBuZXcgb25lIVxuICAgICAgICAgICAgdmFyIHNoYXBlID0gbmV3IG1hdGguUG9seWdvbih0aGlzLmN1cnJlbnRQYXRoLnNoYXBlLnBvaW50cy5zbGljZSgtMikpO1xuICAgICAgICAgICAgc2hhcGUuY2xvc2VkID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLmRyYXdTaGFwZShzaGFwZSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgICAvLyBvdGhlcndpc2UgaXRzIGVtcHR5IHNvIGxldHMganVzdCBzZXQgdGhlIGxpbmUgcHJvcGVydGllc1xuICAgICAgICAgICAgdGhpcy5jdXJyZW50UGF0aC5saW5lV2lkdGggPSB0aGlzLmxpbmVXaWR0aDtcbiAgICAgICAgICAgIHRoaXMuY3VycmVudFBhdGgubGluZUNvbG9yID0gdGhpcy5saW5lQ29sb3I7XG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRQYXRoLmxpbmVBbHBoYSA9IHRoaXMubGluZUFscGhhO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIE1vdmVzIHRoZSBjdXJyZW50IGRyYXdpbmcgcG9zaXRpb24gdG8geCwgeS5cbiAqXG4gKiBAcGFyYW0geCB7bnVtYmVyfSB0aGUgWCBjb29yZGluYXRlIHRvIG1vdmUgdG9cbiAqIEBwYXJhbSB5IHtudW1iZXJ9IHRoZSBZIGNvb3JkaW5hdGUgdG8gbW92ZSB0b1xuICogQHJldHVybiB7UElYSS5HcmFwaGljc31cbiAgKi9cbkdyYXBoaWNzLnByb3RvdHlwZS5tb3ZlVG8gPSBmdW5jdGlvbiAoeCwgeSlcbntcbiAgICB2YXIgc2hhcGUgPSBuZXcgbWF0aC5Qb2x5Z29uKFt4LHldKTtcbiAgICBzaGFwZS5jbG9zZWQgPSBmYWxzZTtcbiAgICB0aGlzLmRyYXdTaGFwZShzaGFwZSk7XG5cbiAgICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogRHJhd3MgYSBsaW5lIHVzaW5nIHRoZSBjdXJyZW50IGxpbmUgc3R5bGUgZnJvbSB0aGUgY3VycmVudCBkcmF3aW5nIHBvc2l0aW9uIHRvICh4LCB5KTtcbiAqIFRoZSBjdXJyZW50IGRyYXdpbmcgcG9zaXRpb24gaXMgdGhlbiBzZXQgdG8gKHgsIHkpLlxuICpcbiAqIEBwYXJhbSB4IHtudW1iZXJ9IHRoZSBYIGNvb3JkaW5hdGUgdG8gZHJhdyB0b1xuICogQHBhcmFtIHkge251bWJlcn0gdGhlIFkgY29vcmRpbmF0ZSB0byBkcmF3IHRvXG4gKiBAcmV0dXJuIHtQSVhJLkdyYXBoaWNzfVxuICovXG5HcmFwaGljcy5wcm90b3R5cGUubGluZVRvID0gZnVuY3Rpb24gKHgsIHkpXG57XG4gICAgdGhpcy5jdXJyZW50UGF0aC5zaGFwZS5wb2ludHMucHVzaCh4LCB5KTtcbiAgICB0aGlzLmRpcnR5ID0gdHJ1ZTtcblxuICAgIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBDYWxjdWxhdGUgdGhlIHBvaW50cyBmb3IgYSBxdWFkcmF0aWMgYmV6aWVyIGN1cnZlIGFuZCB0aGVuIGRyYXdzIGl0LlxuICogQmFzZWQgb246IGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vcXVlc3Rpb25zLzc4NTA5Ny9ob3ctZG8taS1pbXBsZW1lbnQtYS1iZXppZXItY3VydmUtaW4tY1xuICpcbiAqIEBwYXJhbSBjcFgge251bWJlcn0gQ29udHJvbCBwb2ludCB4XG4gKiBAcGFyYW0gY3BZIHtudW1iZXJ9IENvbnRyb2wgcG9pbnQgeVxuICogQHBhcmFtIHRvWCB7bnVtYmVyfSBEZXN0aW5hdGlvbiBwb2ludCB4XG4gKiBAcGFyYW0gdG9ZIHtudW1iZXJ9IERlc3RpbmF0aW9uIHBvaW50IHlcbiAqIEByZXR1cm4ge1BJWEkuR3JhcGhpY3N9XG4gKi9cbkdyYXBoaWNzLnByb3RvdHlwZS5xdWFkcmF0aWNDdXJ2ZVRvID0gZnVuY3Rpb24gKGNwWCwgY3BZLCB0b1gsIHRvWSlcbntcbiAgICBpZiAodGhpcy5jdXJyZW50UGF0aClcbiAgICB7XG4gICAgICAgIGlmICh0aGlzLmN1cnJlbnRQYXRoLnNoYXBlLnBvaW50cy5sZW5ndGggPT09IDApXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuY3VycmVudFBhdGguc2hhcGUucG9pbnRzID0gWzAsIDBdO1xuICAgICAgICB9XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHRoaXMubW92ZVRvKDAsMCk7XG4gICAgfVxuXG4gICAgdmFyIHhhLFxuICAgICAgICB5YSxcbiAgICAgICAgbiA9IDIwLFxuICAgICAgICBwb2ludHMgPSB0aGlzLmN1cnJlbnRQYXRoLnNoYXBlLnBvaW50cztcblxuICAgIGlmIChwb2ludHMubGVuZ3RoID09PSAwKVxuICAgIHtcbiAgICAgICAgdGhpcy5tb3ZlVG8oMCwgMCk7XG4gICAgfVxuXG4gICAgdmFyIGZyb21YID0gcG9pbnRzW3BvaW50cy5sZW5ndGgtMl07XG4gICAgdmFyIGZyb21ZID0gcG9pbnRzW3BvaW50cy5sZW5ndGgtMV07XG5cbiAgICB2YXIgaiA9IDA7XG4gICAgZm9yICh2YXIgaSA9IDE7IGkgPD0gbjsgKytpKVxuICAgIHtcbiAgICAgICAgaiA9IGkgLyBuO1xuXG4gICAgICAgIHhhID0gZnJvbVggKyAoIChjcFggLSBmcm9tWCkgKiBqICk7XG4gICAgICAgIHlhID0gZnJvbVkgKyAoIChjcFkgLSBmcm9tWSkgKiBqICk7XG5cbiAgICAgICAgcG9pbnRzLnB1c2goIHhhICsgKCAoKGNwWCArICggKHRvWCAtIGNwWCkgKiBqICkpIC0geGEpICogaiApLFxuICAgICAgICAgICAgICAgICAgICAgeWEgKyAoICgoY3BZICsgKCAodG9ZIC0gY3BZKSAqIGogKSkgLSB5YSkgKiBqICkgKTtcbiAgICB9XG5cbiAgICB0aGlzLmRpcnR5ID0gdGhpcy5ib3VuZHNEaXJ0eSA9IHRydWU7XG5cbiAgICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogQ2FsY3VsYXRlIHRoZSBwb2ludHMgZm9yIGEgYmV6aWVyIGN1cnZlIGFuZCB0aGVuIGRyYXdzIGl0LlxuICpcbiAqIEBwYXJhbSBjcFgge251bWJlcn0gQ29udHJvbCBwb2ludCB4XG4gKiBAcGFyYW0gY3BZIHtudW1iZXJ9IENvbnRyb2wgcG9pbnQgeVxuICogQHBhcmFtIGNwWDIge251bWJlcn0gU2Vjb25kIENvbnRyb2wgcG9pbnQgeFxuICogQHBhcmFtIGNwWTIge251bWJlcn0gU2Vjb25kIENvbnRyb2wgcG9pbnQgeVxuICogQHBhcmFtIHRvWCB7bnVtYmVyfSBEZXN0aW5hdGlvbiBwb2ludCB4XG4gKiBAcGFyYW0gdG9ZIHtudW1iZXJ9IERlc3RpbmF0aW9uIHBvaW50IHlcbiAqIEByZXR1cm4ge1BJWEkuR3JhcGhpY3N9XG4gKi9cbkdyYXBoaWNzLnByb3RvdHlwZS5iZXppZXJDdXJ2ZVRvID0gZnVuY3Rpb24gKGNwWCwgY3BZLCBjcFgyLCBjcFkyLCB0b1gsIHRvWSlcbntcbiAgICBpZiAodGhpcy5jdXJyZW50UGF0aClcbiAgICB7XG4gICAgICAgIGlmICh0aGlzLmN1cnJlbnRQYXRoLnNoYXBlLnBvaW50cy5sZW5ndGggPT09IDApXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuY3VycmVudFBhdGguc2hhcGUucG9pbnRzID0gWzAsIDBdO1xuICAgICAgICB9XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHRoaXMubW92ZVRvKDAsMCk7XG4gICAgfVxuXG4gICAgdmFyIG4gPSAyMCxcbiAgICAgICAgZHQsXG4gICAgICAgIGR0MixcbiAgICAgICAgZHQzLFxuICAgICAgICB0MixcbiAgICAgICAgdDMsXG4gICAgICAgIHBvaW50cyA9IHRoaXMuY3VycmVudFBhdGguc2hhcGUucG9pbnRzO1xuXG4gICAgdmFyIGZyb21YID0gcG9pbnRzW3BvaW50cy5sZW5ndGgtMl07XG4gICAgdmFyIGZyb21ZID0gcG9pbnRzW3BvaW50cy5sZW5ndGgtMV07XG5cbiAgICB2YXIgaiA9IDA7XG5cbiAgICBmb3IgKHZhciBpID0gMTsgaSA8PSBuOyArK2kpXG4gICAge1xuICAgICAgICBqID0gaSAvIG47XG5cbiAgICAgICAgZHQgPSAoMSAtIGopO1xuICAgICAgICBkdDIgPSBkdCAqIGR0O1xuICAgICAgICBkdDMgPSBkdDIgKiBkdDtcblxuICAgICAgICB0MiA9IGogKiBqO1xuICAgICAgICB0MyA9IHQyICogajtcblxuICAgICAgICBwb2ludHMucHVzaCggZHQzICogZnJvbVggKyAzICogZHQyICogaiAqIGNwWCArIDMgKiBkdCAqIHQyICogY3BYMiArIHQzICogdG9YLFxuICAgICAgICAgICAgICAgICAgICAgZHQzICogZnJvbVkgKyAzICogZHQyICogaiAqIGNwWSArIDMgKiBkdCAqIHQyICogY3BZMiArIHQzICogdG9ZKTtcbiAgICB9XG5cbiAgICB0aGlzLmRpcnR5ID0gdGhpcy5ib3VuZHNEaXJ0eSA9IHRydWU7XG5cbiAgICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogVGhlIGFyY1RvKCkgbWV0aG9kIGNyZWF0ZXMgYW4gYXJjL2N1cnZlIGJldHdlZW4gdHdvIHRhbmdlbnRzIG9uIHRoZSBjYW52YXMuXG4gKlxuICogXCJib3Jyb3dlZFwiIGZyb20gaHR0cHM6Ly9jb2RlLmdvb2dsZS5jb20vcC9meGNhbnZhcy8gLSB0aGFua3MgZ29vZ2xlIVxuICpcbiAqIEBwYXJhbSB4MSB7bnVtYmVyfSBUaGUgeC1jb29yZGluYXRlIG9mIHRoZSBiZWdpbm5pbmcgb2YgdGhlIGFyY1xuICogQHBhcmFtIHkxIHtudW1iZXJ9IFRoZSB5LWNvb3JkaW5hdGUgb2YgdGhlIGJlZ2lubmluZyBvZiB0aGUgYXJjXG4gKiBAcGFyYW0geDIge251bWJlcn0gVGhlIHgtY29vcmRpbmF0ZSBvZiB0aGUgZW5kIG9mIHRoZSBhcmNcbiAqIEBwYXJhbSB5MiB7bnVtYmVyfSBUaGUgeS1jb29yZGluYXRlIG9mIHRoZSBlbmQgb2YgdGhlIGFyY1xuICogQHBhcmFtIHJhZGl1cyB7bnVtYmVyfSBUaGUgcmFkaXVzIG9mIHRoZSBhcmNcbiAqIEByZXR1cm4ge1BJWEkuR3JhcGhpY3N9XG4gKi9cbkdyYXBoaWNzLnByb3RvdHlwZS5hcmNUbyA9IGZ1bmN0aW9uICh4MSwgeTEsIHgyLCB5MiwgcmFkaXVzKVxue1xuICAgIGlmICh0aGlzLmN1cnJlbnRQYXRoKVxuICAgIHtcbiAgICAgICAgaWYgKHRoaXMuY3VycmVudFBhdGguc2hhcGUucG9pbnRzLmxlbmd0aCA9PT0gMClcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5jdXJyZW50UGF0aC5zaGFwZS5wb2ludHMucHVzaCh4MSwgeTEpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHRoaXMubW92ZVRvKHgxLCB5MSk7XG4gICAgfVxuXG4gICAgdmFyIHBvaW50cyA9IHRoaXMuY3VycmVudFBhdGguc2hhcGUucG9pbnRzLFxuICAgICAgICBmcm9tWCA9IHBvaW50c1twb2ludHMubGVuZ3RoLTJdLFxuICAgICAgICBmcm9tWSA9IHBvaW50c1twb2ludHMubGVuZ3RoLTFdLFxuICAgICAgICBhMSA9IGZyb21ZIC0geTEsXG4gICAgICAgIGIxID0gZnJvbVggLSB4MSxcbiAgICAgICAgYTIgPSB5MiAgIC0geTEsXG4gICAgICAgIGIyID0geDIgICAtIHgxLFxuICAgICAgICBtbSA9IE1hdGguYWJzKGExICogYjIgLSBiMSAqIGEyKTtcblxuICAgIGlmIChtbSA8IDEuMGUtOCB8fCByYWRpdXMgPT09IDApXG4gICAge1xuICAgICAgICBpZiAocG9pbnRzW3BvaW50cy5sZW5ndGgtMl0gIT09IHgxIHx8IHBvaW50c1twb2ludHMubGVuZ3RoLTFdICE9PSB5MSlcbiAgICAgICAge1xuICAgICAgICAgICAgcG9pbnRzLnB1c2goeDEsIHkxKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICB2YXIgZGQgPSBhMSAqIGExICsgYjEgKiBiMSxcbiAgICAgICAgICAgIGNjID0gYTIgKiBhMiArIGIyICogYjIsXG4gICAgICAgICAgICB0dCA9IGExICogYTIgKyBiMSAqIGIyLFxuICAgICAgICAgICAgazEgPSByYWRpdXMgKiBNYXRoLnNxcnQoZGQpIC8gbW0sXG4gICAgICAgICAgICBrMiA9IHJhZGl1cyAqIE1hdGguc3FydChjYykgLyBtbSxcbiAgICAgICAgICAgIGoxID0gazEgKiB0dCAvIGRkLFxuICAgICAgICAgICAgajIgPSBrMiAqIHR0IC8gY2MsXG4gICAgICAgICAgICBjeCA9IGsxICogYjIgKyBrMiAqIGIxLFxuICAgICAgICAgICAgY3kgPSBrMSAqIGEyICsgazIgKiBhMSxcbiAgICAgICAgICAgIHB4ID0gYjEgKiAoazIgKyBqMSksXG4gICAgICAgICAgICBweSA9IGExICogKGsyICsgajEpLFxuICAgICAgICAgICAgcXggPSBiMiAqIChrMSArIGoyKSxcbiAgICAgICAgICAgIHF5ID0gYTIgKiAoazEgKyBqMiksXG4gICAgICAgICAgICBzdGFydEFuZ2xlID0gTWF0aC5hdGFuMihweSAtIGN5LCBweCAtIGN4KSxcbiAgICAgICAgICAgIGVuZEFuZ2xlICAgPSBNYXRoLmF0YW4yKHF5IC0gY3ksIHF4IC0gY3gpO1xuXG4gICAgICAgIHRoaXMuYXJjKGN4ICsgeDEsIGN5ICsgeTEsIHJhZGl1cywgc3RhcnRBbmdsZSwgZW5kQW5nbGUsIGIxICogYTIgPiBiMiAqIGExKTtcbiAgICB9XG5cbiAgICB0aGlzLmRpcnR5ID0gdGhpcy5ib3VuZHNEaXJ0eSA9IHRydWU7XG5cbiAgICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogVGhlIGFyYyBtZXRob2QgY3JlYXRlcyBhbiBhcmMvY3VydmUgKHVzZWQgdG8gY3JlYXRlIGNpcmNsZXMsIG9yIHBhcnRzIG9mIGNpcmNsZXMpLlxuICpcbiAqIEBwYXJhbSBjeCB7bnVtYmVyfSBUaGUgeC1jb29yZGluYXRlIG9mIHRoZSBjZW50ZXIgb2YgdGhlIGNpcmNsZVxuICogQHBhcmFtIGN5IHtudW1iZXJ9IFRoZSB5LWNvb3JkaW5hdGUgb2YgdGhlIGNlbnRlciBvZiB0aGUgY2lyY2xlXG4gKiBAcGFyYW0gcmFkaXVzIHtudW1iZXJ9IFRoZSByYWRpdXMgb2YgdGhlIGNpcmNsZVxuICogQHBhcmFtIHN0YXJ0QW5nbGUge251bWJlcn0gVGhlIHN0YXJ0aW5nIGFuZ2xlLCBpbiByYWRpYW5zICgwIGlzIGF0IHRoZSAzIG8nY2xvY2sgcG9zaXRpb24gb2YgdGhlIGFyYydzIGNpcmNsZSlcbiAqIEBwYXJhbSBlbmRBbmdsZSB7bnVtYmVyfSBUaGUgZW5kaW5nIGFuZ2xlLCBpbiByYWRpYW5zXG4gKiBAcGFyYW0gYW50aWNsb2Nrd2lzZSB7Ym9vbGVhbn0gT3B0aW9uYWwuIFNwZWNpZmllcyB3aGV0aGVyIHRoZSBkcmF3aW5nIHNob3VsZCBiZSBjb3VudGVyY2xvY2t3aXNlIG9yIGNsb2Nrd2lzZS4gRmFsc2UgaXMgZGVmYXVsdCwgYW5kIGluZGljYXRlcyBjbG9ja3dpc2UsIHdoaWxlIHRydWUgaW5kaWNhdGVzIGNvdW50ZXItY2xvY2t3aXNlLlxuICogQHJldHVybiB7UElYSS5HcmFwaGljc31cbiAqL1xuR3JhcGhpY3MucHJvdG90eXBlLmFyYyA9IGZ1bmN0aW9uKGN4LCBjeSwgcmFkaXVzLCBzdGFydEFuZ2xlLCBlbmRBbmdsZSwgYW50aWNsb2Nrd2lzZSlcbntcbiAgICBhbnRpY2xvY2t3aXNlID0gYW50aWNsb2Nrd2lzZSB8fCBmYWxzZTtcblxuICAgIGlmIChzdGFydEFuZ2xlID09PSBlbmRBbmdsZSlcbiAgICB7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIGlmKCAhYW50aWNsb2Nrd2lzZSAmJiBlbmRBbmdsZSA8PSBzdGFydEFuZ2xlIClcbiAgICB7XG4gICAgICAgIGVuZEFuZ2xlICs9IE1hdGguUEkgKiAyO1xuICAgIH1cbiAgICBlbHNlIGlmKCBhbnRpY2xvY2t3aXNlICYmIHN0YXJ0QW5nbGUgPD0gZW5kQW5nbGUgKVxuICAgIHtcbiAgICAgICAgc3RhcnRBbmdsZSArPSBNYXRoLlBJICogMjtcbiAgICB9XG5cbiAgICB2YXIgc3dlZXAgPSBhbnRpY2xvY2t3aXNlID8gKHN0YXJ0QW5nbGUgLSBlbmRBbmdsZSkgKiAtMSA6IChlbmRBbmdsZSAtIHN0YXJ0QW5nbGUpO1xuICAgIHZhciBzZWdzID0gIE1hdGguY2VpbChNYXRoLmFicyhzd2VlcCkgLyAoTWF0aC5QSSAqIDIpKSAqIDQwO1xuXG4gICAgaWYoc3dlZXAgPT09IDApXG4gICAge1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICB2YXIgc3RhcnRYID0gY3ggKyBNYXRoLmNvcyhzdGFydEFuZ2xlKSAqIHJhZGl1cztcbiAgICB2YXIgc3RhcnRZID0gY3kgKyBNYXRoLnNpbihzdGFydEFuZ2xlKSAqIHJhZGl1cztcblxuICAgIGlmICh0aGlzLmN1cnJlbnRQYXRoKVxuICAgIHtcbiAgICAgICAgdGhpcy5jdXJyZW50UGF0aC5zaGFwZS5wb2ludHMucHVzaChzdGFydFgsIHN0YXJ0WSk7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHRoaXMubW92ZVRvKHN0YXJ0WCwgc3RhcnRZKTtcbiAgICB9XG5cbiAgICB2YXIgcG9pbnRzID0gdGhpcy5jdXJyZW50UGF0aC5zaGFwZS5wb2ludHM7XG5cbiAgICB2YXIgdGhldGEgPSBzd2VlcC8oc2VncyoyKTtcbiAgICB2YXIgdGhldGEyID0gdGhldGEqMjtcblxuICAgIHZhciBjVGhldGEgPSBNYXRoLmNvcyh0aGV0YSk7XG4gICAgdmFyIHNUaGV0YSA9IE1hdGguc2luKHRoZXRhKTtcblxuICAgIHZhciBzZWdNaW51cyA9IHNlZ3MgLSAxO1xuXG4gICAgdmFyIHJlbWFpbmRlciA9ICggc2VnTWludXMgJSAxICkgLyBzZWdNaW51cztcblxuICAgIGZvcih2YXIgaT0wOyBpPD1zZWdNaW51czsgaSsrKVxuICAgIHtcbiAgICAgICAgdmFyIHJlYWwgPSAgaSArIHJlbWFpbmRlciAqIGk7XG5cblxuICAgICAgICB2YXIgYW5nbGUgPSAoKHRoZXRhKSArIHN0YXJ0QW5nbGUgKyAodGhldGEyICogcmVhbCkpO1xuXG4gICAgICAgIHZhciBjID0gTWF0aC5jb3MoYW5nbGUpO1xuICAgICAgICB2YXIgcyA9IC1NYXRoLnNpbihhbmdsZSk7XG5cbiAgICAgICAgcG9pbnRzLnB1c2goKCAoY1RoZXRhICogIGMpICsgKHNUaGV0YSAqIHMpICkgKiByYWRpdXMgKyBjeCxcbiAgICAgICAgICAgICAgICAgICAgKCAoY1RoZXRhICogLXMpICsgKHNUaGV0YSAqIGMpICkgKiByYWRpdXMgKyBjeSk7XG4gICAgfVxuXG4gICAgdGhpcy5kaXJ0eSA9IHRoaXMuYm91bmRzRGlydHkgPSB0cnVlO1xuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIFNwZWNpZmllcyBhIHNpbXBsZSBvbmUtY29sb3IgZmlsbCB0aGF0IHN1YnNlcXVlbnQgY2FsbHMgdG8gb3RoZXIgR3JhcGhpY3MgbWV0aG9kc1xuICogKHN1Y2ggYXMgbGluZVRvKCkgb3IgZHJhd0NpcmNsZSgpKSB1c2Ugd2hlbiBkcmF3aW5nLlxuICpcbiAqIEBwYXJhbSBjb2xvciB7bnVtYmVyfSB0aGUgY29sb3Igb2YgdGhlIGZpbGxcbiAqIEBwYXJhbSBhbHBoYSB7bnVtYmVyfSB0aGUgYWxwaGEgb2YgdGhlIGZpbGxcbiAqIEByZXR1cm4ge1BJWEkuR3JhcGhpY3N9XG4gKi9cbkdyYXBoaWNzLnByb3RvdHlwZS5iZWdpbkZpbGwgPSBmdW5jdGlvbiAoY29sb3IsIGFscGhhKVxue1xuICAgIHRoaXMuZmlsbGluZyA9IHRydWU7XG4gICAgdGhpcy5maWxsQ29sb3IgPSBjb2xvciB8fCAwO1xuICAgIHRoaXMuZmlsbEFscGhhID0gKGFscGhhID09PSB1bmRlZmluZWQpID8gMSA6IGFscGhhO1xuXG4gICAgaWYgKHRoaXMuY3VycmVudFBhdGgpXG4gICAge1xuICAgICAgICBpZiAodGhpcy5jdXJyZW50UGF0aC5zaGFwZS5wb2ludHMubGVuZ3RoIDw9IDIpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuY3VycmVudFBhdGguZmlsbCA9IHRoaXMuZmlsbGluZztcbiAgICAgICAgICAgIHRoaXMuY3VycmVudFBhdGguZmlsbENvbG9yID0gdGhpcy5maWxsQ29sb3I7XG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRQYXRoLmZpbGxBbHBoYSA9IHRoaXMuZmlsbEFscGhhO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBBcHBsaWVzIGEgZmlsbCB0byB0aGUgbGluZXMgYW5kIHNoYXBlcyB0aGF0IHdlcmUgYWRkZWQgc2luY2UgdGhlIGxhc3QgY2FsbCB0byB0aGUgYmVnaW5GaWxsKCkgbWV0aG9kLlxuICpcbiAqIEByZXR1cm4ge0dyYXBoaWNzfVxuICovXG5HcmFwaGljcy5wcm90b3R5cGUuZW5kRmlsbCA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy5maWxsaW5nID0gZmFsc2U7XG4gICAgdGhpcy5maWxsQ29sb3IgPSBudWxsO1xuICAgIHRoaXMuZmlsbEFscGhhID0gMTtcblxuICAgIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKlxuICogQHBhcmFtIHgge251bWJlcn0gVGhlIFggY29vcmQgb2YgdGhlIHRvcC1sZWZ0IG9mIHRoZSByZWN0YW5nbGVcbiAqIEBwYXJhbSB5IHtudW1iZXJ9IFRoZSBZIGNvb3JkIG9mIHRoZSB0b3AtbGVmdCBvZiB0aGUgcmVjdGFuZ2xlXG4gKiBAcGFyYW0gd2lkdGgge251bWJlcn0gVGhlIHdpZHRoIG9mIHRoZSByZWN0YW5nbGVcbiAqIEBwYXJhbSBoZWlnaHQge251bWJlcn0gVGhlIGhlaWdodCBvZiB0aGUgcmVjdGFuZ2xlXG4gKiBAcmV0dXJuIHtQSVhJLkdyYXBoaWNzfVxuICovXG5HcmFwaGljcy5wcm90b3R5cGUuZHJhd1JlY3QgPSBmdW5jdGlvbiAoIHgsIHksIHdpZHRoLCBoZWlnaHQgKVxue1xuICAgIHRoaXMuZHJhd1NoYXBlKG5ldyBtYXRoLlJlY3RhbmdsZSh4LHksIHdpZHRoLCBoZWlnaHQpKTtcblxuICAgIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKlxuICogQHBhcmFtIHgge251bWJlcn0gVGhlIFggY29vcmQgb2YgdGhlIHRvcC1sZWZ0IG9mIHRoZSByZWN0YW5nbGVcbiAqIEBwYXJhbSB5IHtudW1iZXJ9IFRoZSBZIGNvb3JkIG9mIHRoZSB0b3AtbGVmdCBvZiB0aGUgcmVjdGFuZ2xlXG4gKiBAcGFyYW0gd2lkdGgge251bWJlcn0gVGhlIHdpZHRoIG9mIHRoZSByZWN0YW5nbGVcbiAqIEBwYXJhbSBoZWlnaHQge251bWJlcn0gVGhlIGhlaWdodCBvZiB0aGUgcmVjdGFuZ2xlXG4gKiBAcGFyYW0gcmFkaXVzIHtudW1iZXJ9IFJhZGl1cyBvZiB0aGUgcmVjdGFuZ2xlIGNvcm5lcnNcbiAqIEByZXR1cm4ge1BJWEkuR3JhcGhpY3N9XG4gKi9cbkdyYXBoaWNzLnByb3RvdHlwZS5kcmF3Um91bmRlZFJlY3QgPSBmdW5jdGlvbiAoIHgsIHksIHdpZHRoLCBoZWlnaHQsIHJhZGl1cyApXG57XG4gICAgdGhpcy5kcmF3U2hhcGUobmV3IG1hdGguUm91bmRlZFJlY3RhbmdsZSh4LCB5LCB3aWR0aCwgaGVpZ2h0LCByYWRpdXMpKTtcblxuICAgIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBEcmF3cyBhIGNpcmNsZS5cbiAqXG4gKiBAcGFyYW0geCB7bnVtYmVyfSBUaGUgWCBjb29yZGluYXRlIG9mIHRoZSBjZW50ZXIgb2YgdGhlIGNpcmNsZVxuICogQHBhcmFtIHkge251bWJlcn0gVGhlIFkgY29vcmRpbmF0ZSBvZiB0aGUgY2VudGVyIG9mIHRoZSBjaXJjbGVcbiAqIEBwYXJhbSByYWRpdXMge251bWJlcn0gVGhlIHJhZGl1cyBvZiB0aGUgY2lyY2xlXG4gKiBAcmV0dXJuIHtQSVhJLkdyYXBoaWNzfVxuICovXG5HcmFwaGljcy5wcm90b3R5cGUuZHJhd0NpcmNsZSA9IGZ1bmN0aW9uICh4LCB5LCByYWRpdXMpXG57XG4gICAgdGhpcy5kcmF3U2hhcGUobmV3IG1hdGguQ2lyY2xlKHgseSwgcmFkaXVzKSk7XG5cbiAgICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogRHJhd3MgYW4gZWxsaXBzZS5cbiAqXG4gKiBAcGFyYW0geCB7bnVtYmVyfSBUaGUgWCBjb29yZGluYXRlIG9mIHRoZSBjZW50ZXIgb2YgdGhlIGVsbGlwc2VcbiAqIEBwYXJhbSB5IHtudW1iZXJ9IFRoZSBZIGNvb3JkaW5hdGUgb2YgdGhlIGNlbnRlciBvZiB0aGUgZWxsaXBzZVxuICogQHBhcmFtIHdpZHRoIHtudW1iZXJ9IFRoZSBoYWxmIHdpZHRoIG9mIHRoZSBlbGxpcHNlXG4gKiBAcGFyYW0gaGVpZ2h0IHtudW1iZXJ9IFRoZSBoYWxmIGhlaWdodCBvZiB0aGUgZWxsaXBzZVxuICogQHJldHVybiB7UElYSS5HcmFwaGljc31cbiAqL1xuR3JhcGhpY3MucHJvdG90eXBlLmRyYXdFbGxpcHNlID0gZnVuY3Rpb24gKHgsIHksIHdpZHRoLCBoZWlnaHQpXG57XG4gICAgdGhpcy5kcmF3U2hhcGUobmV3IG1hdGguRWxsaXBzZSh4LCB5LCB3aWR0aCwgaGVpZ2h0KSk7XG5cbiAgICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogRHJhd3MgYSBwb2x5Z29uIHVzaW5nIHRoZSBnaXZlbiBwYXRoLlxuICpcbiAqIEBwYXJhbSBwYXRoIHtudW1iZXJbXXxQSVhJLlBvaW50W119IFRoZSBwYXRoIGRhdGEgdXNlZCB0byBjb25zdHJ1Y3QgdGhlIHBvbHlnb24uXG4gKiBAcmV0dXJuIHtQSVhJLkdyYXBoaWNzfVxuICovXG5HcmFwaGljcy5wcm90b3R5cGUuZHJhd1BvbHlnb24gPSBmdW5jdGlvbiAocGF0aClcbntcbiAgICAvLyBwcmV2ZW50cyBhbiBhcmd1bWVudCBhc3NpZ25tZW50IGRlb3B0XG4gICAgLy8gc2VlIHNlY3Rpb24gMy4xOiBodHRwczovL2dpdGh1Yi5jb20vcGV0a2FhbnRvbm92L2JsdWViaXJkL3dpa2kvT3B0aW1pemF0aW9uLWtpbGxlcnMjMy1tYW5hZ2luZy1hcmd1bWVudHNcbiAgICB2YXIgcG9pbnRzID0gcGF0aDtcblxuICAgIHZhciBjbG9zZWQgPSB0cnVlO1xuXG4gICAgaWYgKHBvaW50cyBpbnN0YW5jZW9mIG1hdGguUG9seWdvbilcbiAgICB7XG4gICAgICAgIGNsb3NlZCA9IHBvaW50cy5jbG9zZWQ7XG4gICAgICAgIHBvaW50cyA9IHBvaW50cy5wb2ludHM7XG4gICAgfVxuXG4gICAgaWYgKCFBcnJheS5pc0FycmF5KHBvaW50cykpXG4gICAge1xuICAgICAgICAvLyBwcmV2ZW50cyBhbiBhcmd1bWVudCBsZWFrIGRlb3B0XG4gICAgICAgIC8vIHNlZSBzZWN0aW9uIDMuMjogaHR0cHM6Ly9naXRodWIuY29tL3BldGthYW50b25vdi9ibHVlYmlyZC93aWtpL09wdGltaXphdGlvbi1raWxsZXJzIzMtbWFuYWdpbmctYXJndW1lbnRzXG4gICAgICAgIHBvaW50cyA9IG5ldyBBcnJheShhcmd1bWVudHMubGVuZ3RoKTtcblxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHBvaW50cy5sZW5ndGg7ICsraSlcbiAgICAgICAge1xuICAgICAgICAgICAgcG9pbnRzW2ldID0gYXJndW1lbnRzW2ldO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgdmFyIHNoYXBlID0gbmV3IG1hdGguUG9seWdvbihwb2ludHMpO1xuICAgIHNoYXBlLmNsb3NlZCA9IGNsb3NlZDtcblxuICAgIHRoaXMuZHJhd1NoYXBlKHNoYXBlKTtcblxuICAgIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBDbGVhcnMgdGhlIGdyYXBoaWNzIHRoYXQgd2VyZSBkcmF3biB0byB0aGlzIEdyYXBoaWNzIG9iamVjdCwgYW5kIHJlc2V0cyBmaWxsIGFuZCBsaW5lIHN0eWxlIHNldHRpbmdzLlxuICpcbiAqIEByZXR1cm4ge1BJWEkuR3JhcGhpY3N9XG4gKi9cbkdyYXBoaWNzLnByb3RvdHlwZS5jbGVhciA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy5saW5lV2lkdGggPSAwO1xuICAgIHRoaXMuZmlsbGluZyA9IGZhbHNlO1xuXG4gICAgdGhpcy5kaXJ0eSA9IHRydWU7XG4gICAgdGhpcy5jbGVhckRpcnR5ID0gdHJ1ZTtcbiAgICB0aGlzLmdyYXBoaWNzRGF0YSA9IFtdO1xuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIFVzZWZ1bCBmdW5jdGlvbiB0aGF0IHJldHVybnMgYSB0ZXh0dXJlIG9mIHRoZSBncmFwaGljcyBvYmplY3QgdGhhdCBjYW4gdGhlbiBiZSB1c2VkIHRvIGNyZWF0ZSBzcHJpdGVzXG4gKiBUaGlzIGNhbiBiZSBxdWl0ZSB1c2VmdWwgaWYgeW91ciBnZW9tZXRyeSBpcyBjb21wbGljYXRlZCBhbmQgbmVlZHMgdG8gYmUgcmV1c2VkIG11bHRpcGxlIHRpbWVzLlxuICpcbiAqIEBwYXJhbSByZXNvbHV0aW9uIHtudW1iZXJ9IFRoZSByZXNvbHV0aW9uIG9mIHRoZSB0ZXh0dXJlIGJlaW5nIGdlbmVyYXRlZFxuICogQHBhcmFtIHNjYWxlTW9kZSB7bnVtYmVyfSBTaG91bGQgYmUgb25lIG9mIHRoZSBzY2FsZU1vZGUgY29uc3RzXG4gKiBAcmV0dXJuIHtQSVhJLlRleHR1cmV9IGEgdGV4dHVyZSBvZiB0aGUgZ3JhcGhpY3Mgb2JqZWN0XG4gKi9cbkdyYXBoaWNzLnByb3RvdHlwZS5nZW5lcmF0ZVRleHR1cmUgPSBmdW5jdGlvbiAocmVuZGVyZXIsIHJlc29sdXRpb24sIHNjYWxlTW9kZSlcbntcblxuICAgIHJlc29sdXRpb24gPSByZXNvbHV0aW9uIHx8IDE7XG5cbiAgICB2YXIgYm91bmRzID0gdGhpcy5nZXRMb2NhbEJvdW5kcygpO1xuXG4gICAgdmFyIGNhbnZhc0J1ZmZlciA9IG5ldyBDYW52YXNCdWZmZXIoYm91bmRzLndpZHRoICogcmVzb2x1dGlvbiwgYm91bmRzLmhlaWdodCAqIHJlc29sdXRpb24pO1xuXG4gICAgdmFyIHRleHR1cmUgPSBUZXh0dXJlLmZyb21DYW52YXMoY2FudmFzQnVmZmVyLmNhbnZhcywgc2NhbGVNb2RlKTtcbiAgICB0ZXh0dXJlLmJhc2VUZXh0dXJlLnJlc29sdXRpb24gPSByZXNvbHV0aW9uO1xuXG4gICAgY2FudmFzQnVmZmVyLmNvbnRleHQuc2NhbGUocmVzb2x1dGlvbiwgcmVzb2x1dGlvbik7XG5cbiAgICBjYW52YXNCdWZmZXIuY29udGV4dC50cmFuc2xhdGUoLWJvdW5kcy54LC1ib3VuZHMueSk7XG5cbiAgICBDYW52YXNHcmFwaGljcy5yZW5kZXJHcmFwaGljcyh0aGlzLCBjYW52YXNCdWZmZXIuY29udGV4dCk7XG5cbiAgICByZXR1cm4gdGV4dHVyZTtcbn07XG5cbi8qKlxuICogUmVuZGVycyB0aGUgb2JqZWN0IHVzaW5nIHRoZSBXZWJHTCByZW5kZXJlclxuICpcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5XZWJHTFJlbmRlcmVyfVxuICogQHByaXZhdGVcbiAqL1xuR3JhcGhpY3MucHJvdG90eXBlLl9yZW5kZXJXZWJHTCA9IGZ1bmN0aW9uIChyZW5kZXJlcilcbntcbiAgICAvLyBpZiB0aGUgc3ByaXRlIGlzIG5vdCB2aXNpYmxlIG9yIHRoZSBhbHBoYSBpcyAwIHRoZW4gbm8gbmVlZCB0byByZW5kZXIgdGhpcyBlbGVtZW50XG5cbiAgICBpZiAodGhpcy5nbERpcnR5KVxuICAgIHtcbiAgICAgICAgdGhpcy5kaXJ0eSA9IHRydWU7XG4gICAgICAgIHRoaXMuZ2xEaXJ0eSA9IGZhbHNlO1xuICAgIH1cblxuICAgIHJlbmRlcmVyLnNldE9iamVjdFJlbmRlcmVyKHJlbmRlcmVyLnBsdWdpbnMuZ3JhcGhpY3MpO1xuICAgIHJlbmRlcmVyLnBsdWdpbnMuZ3JhcGhpY3MucmVuZGVyKHRoaXMpO1xuXG59O1xuXG4vKipcbiAqIFJlbmRlcnMgdGhlIG9iamVjdCB1c2luZyB0aGUgQ2FudmFzIHJlbmRlcmVyXG4gKlxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLkNhbnZhc1JlbmRlcmVyfVxuICogQHByaXZhdGVcbiAqL1xuR3JhcGhpY3MucHJvdG90eXBlLl9yZW5kZXJDYW52YXMgPSBmdW5jdGlvbiAocmVuZGVyZXIpXG57XG4gICAgaWYgKHRoaXMuaXNNYXNrID09PSB0cnVlKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIGlmIHRoZSB0aW50IGhhcyBjaGFuZ2VkLCBzZXQgdGhlIGdyYXBoaWNzIG9iamVjdCB0byBkaXJ0eS5cbiAgICBpZiAodGhpcy5fcHJldlRpbnQgIT09IHRoaXMudGludCkge1xuICAgICAgICB0aGlzLmRpcnR5ID0gdHJ1ZTtcbiAgICB9XG5cbiAgICAvLyB0aGlzIGNvZGUgbWF5IHN0aWxsIGJlIG5lZWRlZCBzbyBsZWF2aW5nIGZvciBub3cuLlxuICAgIC8vXG4gICAgLypcbiAgICBpZiAodGhpcy5fY2FjaGVBc0JpdG1hcClcbiAgICB7XG4gICAgICAgIGlmICh0aGlzLmRpcnR5IHx8IHRoaXMuY2FjaGVkU3ByaXRlRGlydHkpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuX2dlbmVyYXRlQ2FjaGVkU3ByaXRlKCk7XG5cbiAgICAgICAgICAgIC8vIHdlIHdpbGwgYWxzbyBuZWVkIHRvIHVwZGF0ZSB0aGUgdGV4dHVyZVxuICAgICAgICAgICAgdGhpcy51cGRhdGVDYWNoZWRTcHJpdGVUZXh0dXJlKCk7XG5cbiAgICAgICAgICAgIHRoaXMuY2FjaGVkU3ByaXRlRGlydHkgPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMuZGlydHkgPSBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX2NhY2hlZFNwcml0ZS5hbHBoYSA9IHRoaXMuYWxwaGE7XG5cbiAgICAgICAgU3ByaXRlLnByb3RvdHlwZS5fcmVuZGVyQ2FudmFzLmNhbGwodGhpcy5fY2FjaGVkU3ByaXRlLCByZW5kZXJlcik7XG5cbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICAqL1xuICAgIHZhciBjb250ZXh0ID0gcmVuZGVyZXIuY29udGV4dDtcbiAgICB2YXIgdHJhbnNmb3JtID0gdGhpcy53b3JsZFRyYW5zZm9ybTtcblxuICAgIHZhciBjb21wb3NpdGVPcGVyYXRpb24gPSByZW5kZXJlci5ibGVuZE1vZGVzW3RoaXMuYmxlbmRNb2RlXTtcbiAgICBpZiAoY29tcG9zaXRlT3BlcmF0aW9uICE9PSBjb250ZXh0Lmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbilcbiAgICB7XG4gICAgICAgIGNvbnRleHQuZ2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uID0gY29tcG9zaXRlT3BlcmF0aW9uO1xuICAgIH1cblxuICAgIHZhciByZXNvbHV0aW9uID0gcmVuZGVyZXIucmVzb2x1dGlvbjtcbiAgICBjb250ZXh0LnNldFRyYW5zZm9ybShcbiAgICAgICAgdHJhbnNmb3JtLmEgKiByZXNvbHV0aW9uLFxuICAgICAgICB0cmFuc2Zvcm0uYiAqIHJlc29sdXRpb24sXG4gICAgICAgIHRyYW5zZm9ybS5jICogcmVzb2x1dGlvbixcbiAgICAgICAgdHJhbnNmb3JtLmQgKiByZXNvbHV0aW9uLFxuICAgICAgICB0cmFuc2Zvcm0udHggKiByZXNvbHV0aW9uLFxuICAgICAgICB0cmFuc2Zvcm0udHkgKiByZXNvbHV0aW9uXG4gICAgKTtcblxuICAgIENhbnZhc0dyYXBoaWNzLnJlbmRlckdyYXBoaWNzKHRoaXMsIGNvbnRleHQpO1xufTtcblxuLyoqXG4gKiBSZXRyaWV2ZXMgdGhlIGJvdW5kcyBvZiB0aGUgZ3JhcGhpYyBzaGFwZSBhcyBhIHJlY3RhbmdsZSBvYmplY3RcbiAqXG4gKiBAcGFyYW0gW21hdHJpeF0ge1BJWEkuTWF0cml4fSBUaGUgd29ybGQgdHJhbnNmb3JtIG1hdHJpeCB0byB1c2UsIGRlZmF1bHRzIHRvIHRoaXNcbiAqICBvYmplY3QncyB3b3JsZFRyYW5zZm9ybS5cbiAqIEByZXR1cm4ge1BJWEkuUmVjdGFuZ2xlfSB0aGUgcmVjdGFuZ3VsYXIgYm91bmRpbmcgYXJlYVxuICovXG5HcmFwaGljcy5wcm90b3R5cGUuZ2V0Qm91bmRzID0gZnVuY3Rpb24gKG1hdHJpeClcbntcbiAgICBpZighdGhpcy5fY3VycmVudEJvdW5kcylcbiAgICB7XG5cbiAgICAgICAgLy8gcmV0dXJuIGFuIGVtcHR5IG9iamVjdCBpZiB0aGUgaXRlbSBpcyBhIG1hc2shXG4gICAgICAgIGlmICghdGhpcy5yZW5kZXJhYmxlKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gbWF0aC5SZWN0YW5nbGUuRU1QVFk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5ib3VuZHNEaXJ0eSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51cGRhdGVMb2NhbEJvdW5kcygpO1xuXG4gICAgICAgICAgICB0aGlzLmdsRGlydHkgPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy5jYWNoZWRTcHJpdGVEaXJ0eSA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLmJvdW5kc0RpcnR5ID0gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgYm91bmRzID0gdGhpcy5fbG9jYWxCb3VuZHM7XG5cbiAgICAgICAgdmFyIHcwID0gYm91bmRzLng7XG4gICAgICAgIHZhciB3MSA9IGJvdW5kcy53aWR0aCArIGJvdW5kcy54O1xuXG4gICAgICAgIHZhciBoMCA9IGJvdW5kcy55O1xuICAgICAgICB2YXIgaDEgPSBib3VuZHMuaGVpZ2h0ICsgYm91bmRzLnk7XG5cbiAgICAgICAgdmFyIHdvcmxkVHJhbnNmb3JtID0gbWF0cml4IHx8IHRoaXMud29ybGRUcmFuc2Zvcm07XG5cbiAgICAgICAgdmFyIGEgPSB3b3JsZFRyYW5zZm9ybS5hO1xuICAgICAgICB2YXIgYiA9IHdvcmxkVHJhbnNmb3JtLmI7XG4gICAgICAgIHZhciBjID0gd29ybGRUcmFuc2Zvcm0uYztcbiAgICAgICAgdmFyIGQgPSB3b3JsZFRyYW5zZm9ybS5kO1xuICAgICAgICB2YXIgdHggPSB3b3JsZFRyYW5zZm9ybS50eDtcbiAgICAgICAgdmFyIHR5ID0gd29ybGRUcmFuc2Zvcm0udHk7XG5cbiAgICAgICAgdmFyIHgxID0gYSAqIHcxICsgYyAqIGgxICsgdHg7XG4gICAgICAgIHZhciB5MSA9IGQgKiBoMSArIGIgKiB3MSArIHR5O1xuXG4gICAgICAgIHZhciB4MiA9IGEgKiB3MCArIGMgKiBoMSArIHR4O1xuICAgICAgICB2YXIgeTIgPSBkICogaDEgKyBiICogdzAgKyB0eTtcblxuICAgICAgICB2YXIgeDMgPSBhICogdzAgKyBjICogaDAgKyB0eDtcbiAgICAgICAgdmFyIHkzID0gZCAqIGgwICsgYiAqIHcwICsgdHk7XG5cbiAgICAgICAgdmFyIHg0ID0gIGEgKiB3MSArIGMgKiBoMCArIHR4O1xuICAgICAgICB2YXIgeTQgPSAgZCAqIGgwICsgYiAqIHcxICsgdHk7XG5cbiAgICAgICAgdmFyIG1heFggPSB4MTtcbiAgICAgICAgdmFyIG1heFkgPSB5MTtcblxuICAgICAgICB2YXIgbWluWCA9IHgxO1xuICAgICAgICB2YXIgbWluWSA9IHkxO1xuXG4gICAgICAgIG1pblggPSB4MiA8IG1pblggPyB4MiA6IG1pblg7XG4gICAgICAgIG1pblggPSB4MyA8IG1pblggPyB4MyA6IG1pblg7XG4gICAgICAgIG1pblggPSB4NCA8IG1pblggPyB4NCA6IG1pblg7XG5cbiAgICAgICAgbWluWSA9IHkyIDwgbWluWSA/IHkyIDogbWluWTtcbiAgICAgICAgbWluWSA9IHkzIDwgbWluWSA/IHkzIDogbWluWTtcbiAgICAgICAgbWluWSA9IHk0IDwgbWluWSA/IHk0IDogbWluWTtcblxuICAgICAgICBtYXhYID0geDIgPiBtYXhYID8geDIgOiBtYXhYO1xuICAgICAgICBtYXhYID0geDMgPiBtYXhYID8geDMgOiBtYXhYO1xuICAgICAgICBtYXhYID0geDQgPiBtYXhYID8geDQgOiBtYXhYO1xuXG4gICAgICAgIG1heFkgPSB5MiA+IG1heFkgPyB5MiA6IG1heFk7XG4gICAgICAgIG1heFkgPSB5MyA+IG1heFkgPyB5MyA6IG1heFk7XG4gICAgICAgIG1heFkgPSB5NCA+IG1heFkgPyB5NCA6IG1heFk7XG5cbiAgICAgICAgdGhpcy5fYm91bmRzLnggPSBtaW5YO1xuICAgICAgICB0aGlzLl9ib3VuZHMud2lkdGggPSBtYXhYIC0gbWluWDtcblxuICAgICAgICB0aGlzLl9ib3VuZHMueSA9IG1pblk7XG4gICAgICAgIHRoaXMuX2JvdW5kcy5oZWlnaHQgPSBtYXhZIC0gbWluWTtcblxuICAgICAgICB0aGlzLl9jdXJyZW50Qm91bmRzID0gdGhpcy5fYm91bmRzO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLl9jdXJyZW50Qm91bmRzO1xufTtcblxuLyoqXG4qIFRlc3RzIGlmIGEgcG9pbnQgaXMgaW5zaWRlIHRoaXMgZ3JhcGhpY3Mgb2JqZWN0XG4qXG4qIEBwYXJhbSBwb2ludCB7UElYSS5Qb2ludH0gdGhlIHBvaW50IHRvIHRlc3RcbiogQHJldHVybiB7Ym9vbGVhbn0gdGhlIHJlc3VsdCBvZiB0aGUgdGVzdFxuKi9cbkdyYXBoaWNzLnByb3RvdHlwZS5jb250YWluc1BvaW50ID0gZnVuY3Rpb24oIHBvaW50IClcbntcbiAgICB0aGlzLndvcmxkVHJhbnNmb3JtLmFwcGx5SW52ZXJzZShwb2ludCwgIHRlbXBQb2ludCk7XG5cbiAgICB2YXIgZ3JhcGhpY3NEYXRhID0gdGhpcy5ncmFwaGljc0RhdGE7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGdyYXBoaWNzRGF0YS5sZW5ndGg7IGkrKylcbiAgICB7XG4gICAgICAgIHZhciBkYXRhID0gZ3JhcGhpY3NEYXRhW2ldO1xuXG4gICAgICAgIGlmICghZGF0YS5maWxsKVxuICAgICAgICB7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIG9ubHkgZGVhbCB3aXRoIGZpbGxzLi5cbiAgICAgICAgaWYgKGRhdGEuc2hhcGUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGlmICggZGF0YS5zaGFwZS5jb250YWlucyggdGVtcFBvaW50LngsIHRlbXBQb2ludC55ICkgKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xufTtcblxuLyoqXG4gKiBVcGRhdGUgdGhlIGJvdW5kcyBvZiB0aGUgb2JqZWN0XG4gKlxuICovXG5HcmFwaGljcy5wcm90b3R5cGUudXBkYXRlTG9jYWxCb3VuZHMgPSBmdW5jdGlvbiAoKVxue1xuICAgIHZhciBtaW5YID0gSW5maW5pdHk7XG4gICAgdmFyIG1heFggPSAtSW5maW5pdHk7XG5cbiAgICB2YXIgbWluWSA9IEluZmluaXR5O1xuICAgIHZhciBtYXhZID0gLUluZmluaXR5O1xuXG4gICAgaWYgKHRoaXMuZ3JhcGhpY3NEYXRhLmxlbmd0aClcbiAgICB7XG4gICAgICAgIHZhciBzaGFwZSwgcG9pbnRzLCB4LCB5LCB3LCBoO1xuXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5ncmFwaGljc0RhdGEubGVuZ3RoOyBpKyspXG4gICAgICAgIHtcbiAgICAgICAgICAgIHZhciBkYXRhID0gdGhpcy5ncmFwaGljc0RhdGFbaV07XG4gICAgICAgICAgICB2YXIgdHlwZSA9IGRhdGEudHlwZTtcbiAgICAgICAgICAgIHZhciBsaW5lV2lkdGggPSBkYXRhLmxpbmVXaWR0aDtcbiAgICAgICAgICAgIHNoYXBlID0gZGF0YS5zaGFwZTtcblxuICAgICAgICAgICAgaWYgKHR5cGUgPT09IENPTlNULlNIQVBFUy5SRUNUIHx8IHR5cGUgPT09IENPTlNULlNIQVBFUy5SUkVDKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHggPSBzaGFwZS54IC0gbGluZVdpZHRoLzI7XG4gICAgICAgICAgICAgICAgeSA9IHNoYXBlLnkgLSBsaW5lV2lkdGgvMjtcbiAgICAgICAgICAgICAgICB3ID0gc2hhcGUud2lkdGggKyBsaW5lV2lkdGg7XG4gICAgICAgICAgICAgICAgaCA9IHNoYXBlLmhlaWdodCArIGxpbmVXaWR0aDtcblxuICAgICAgICAgICAgICAgIG1pblggPSB4IDwgbWluWCA/IHggOiBtaW5YO1xuICAgICAgICAgICAgICAgIG1heFggPSB4ICsgdyA+IG1heFggPyB4ICsgdyA6IG1heFg7XG5cbiAgICAgICAgICAgICAgICBtaW5ZID0geSA8IG1pblkgPyB5IDogbWluWTtcbiAgICAgICAgICAgICAgICBtYXhZID0geSArIGggPiBtYXhZID8geSArIGggOiBtYXhZO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAodHlwZSA9PT0gQ09OU1QuU0hBUEVTLkNJUkMpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgeCA9IHNoYXBlLng7XG4gICAgICAgICAgICAgICAgeSA9IHNoYXBlLnk7XG4gICAgICAgICAgICAgICAgdyA9IHNoYXBlLnJhZGl1cyArIGxpbmVXaWR0aC8yO1xuICAgICAgICAgICAgICAgIGggPSBzaGFwZS5yYWRpdXMgKyBsaW5lV2lkdGgvMjtcblxuICAgICAgICAgICAgICAgIG1pblggPSB4IC0gdyA8IG1pblggPyB4IC0gdyA6IG1pblg7XG4gICAgICAgICAgICAgICAgbWF4WCA9IHggKyB3ID4gbWF4WCA/IHggKyB3IDogbWF4WDtcblxuICAgICAgICAgICAgICAgIG1pblkgPSB5IC0gaCA8IG1pblkgPyB5IC0gaCA6IG1pblk7XG4gICAgICAgICAgICAgICAgbWF4WSA9IHkgKyBoID4gbWF4WSA/IHkgKyBoIDogbWF4WTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKHR5cGUgPT09IENPTlNULlNIQVBFUy5FTElQKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHggPSBzaGFwZS54O1xuICAgICAgICAgICAgICAgIHkgPSBzaGFwZS55O1xuICAgICAgICAgICAgICAgIHcgPSBzaGFwZS53aWR0aCArIGxpbmVXaWR0aC8yO1xuICAgICAgICAgICAgICAgIGggPSBzaGFwZS5oZWlnaHQgKyBsaW5lV2lkdGgvMjtcblxuICAgICAgICAgICAgICAgIG1pblggPSB4IC0gdyA8IG1pblggPyB4IC0gdyA6IG1pblg7XG4gICAgICAgICAgICAgICAgbWF4WCA9IHggKyB3ID4gbWF4WCA/IHggKyB3IDogbWF4WDtcblxuICAgICAgICAgICAgICAgIG1pblkgPSB5IC0gaCA8IG1pblkgPyB5IC0gaCA6IG1pblk7XG4gICAgICAgICAgICAgICAgbWF4WSA9IHkgKyBoID4gbWF4WSA/IHkgKyBoIDogbWF4WTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAvLyBQT0xZXG4gICAgICAgICAgICAgICAgcG9pbnRzID0gc2hhcGUucG9pbnRzO1xuXG4gICAgICAgICAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBwb2ludHMubGVuZ3RoOyBqICs9IDIpXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICB4ID0gcG9pbnRzW2pdO1xuICAgICAgICAgICAgICAgICAgICB5ID0gcG9pbnRzW2orMV07XG5cbiAgICAgICAgICAgICAgICAgICAgbWluWCA9IHgtbGluZVdpZHRoIDwgbWluWCA/IHgtbGluZVdpZHRoIDogbWluWDtcbiAgICAgICAgICAgICAgICAgICAgbWF4WCA9IHgrbGluZVdpZHRoID4gbWF4WCA/IHgrbGluZVdpZHRoIDogbWF4WDtcblxuICAgICAgICAgICAgICAgICAgICBtaW5ZID0geS1saW5lV2lkdGggPCBtaW5ZID8geS1saW5lV2lkdGggOiBtaW5ZO1xuICAgICAgICAgICAgICAgICAgICBtYXhZID0geStsaW5lV2lkdGggPiBtYXhZID8geStsaW5lV2lkdGggOiBtYXhZO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICBtaW5YID0gMDtcbiAgICAgICAgbWF4WCA9IDA7XG4gICAgICAgIG1pblkgPSAwO1xuICAgICAgICBtYXhZID0gMDtcbiAgICB9XG5cbiAgICB2YXIgcGFkZGluZyA9IHRoaXMuYm91bmRzUGFkZGluZztcblxuICAgIHRoaXMuX2xvY2FsQm91bmRzLnggPSBtaW5YIC0gcGFkZGluZztcbiAgICB0aGlzLl9sb2NhbEJvdW5kcy53aWR0aCA9IChtYXhYIC0gbWluWCkgKyBwYWRkaW5nICogMjtcblxuICAgIHRoaXMuX2xvY2FsQm91bmRzLnkgPSBtaW5ZIC0gcGFkZGluZztcbiAgICB0aGlzLl9sb2NhbEJvdW5kcy5oZWlnaHQgPSAobWF4WSAtIG1pblkpICsgcGFkZGluZyAqIDI7XG59O1xuXG4vKipcbiAqIEdlbmVyYXRlcyB0aGUgY2FjaGVkIHNwcml0ZSB3aGVuIHRoZSBzcHJpdGUgaGFzIGNhY2hlQXNCaXRtYXAgPSB0cnVlXG4gKlxuICogQHByaXZhdGVcbiAqL1xuLypcbkdyYXBoaWNzLnByb3RvdHlwZS5fZ2VuZXJhdGVDYWNoZWRTcHJpdGUgPSBmdW5jdGlvbiAoKVxue1xuICAgIHZhciBib3VuZHMgPSB0aGlzLmdldExvY2FsQm91bmRzKCk7XG5cbiAgICBpZiAoIXRoaXMuX2NhY2hlZFNwcml0ZSlcbiAgICB7XG4gICAgICAgIHZhciBjYW52YXNCdWZmZXIgPSBuZXcgQ2FudmFzQnVmZmVyKGJvdW5kcy53aWR0aCwgYm91bmRzLmhlaWdodCk7XG4gICAgICAgIHZhciB0ZXh0dXJlID0gVGV4dHVyZS5mcm9tQ2FudmFzKGNhbnZhc0J1ZmZlci5jYW52YXMpO1xuXG4gICAgICAgIHRoaXMuX2NhY2hlZFNwcml0ZSA9IG5ldyBTcHJpdGUodGV4dHVyZSk7XG4gICAgICAgIHRoaXMuX2NhY2hlZFNwcml0ZS5idWZmZXIgPSBjYW52YXNCdWZmZXI7XG5cbiAgICAgICAgdGhpcy5fY2FjaGVkU3ByaXRlLndvcmxkVHJhbnNmb3JtID0gdGhpcy53b3JsZFRyYW5zZm9ybTtcbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgdGhpcy5fY2FjaGVkU3ByaXRlLmJ1ZmZlci5yZXNpemUoYm91bmRzLndpZHRoLCBib3VuZHMuaGVpZ2h0KTtcbiAgICB9XG5cbiAgICAvLyBsZXZlcmFnZSB0aGUgYW5jaG9yIHRvIGFjY291bnQgZm9yIHRoZSBvZmZzZXQgb2YgdGhlIGVsZW1lbnRcbiAgICB0aGlzLl9jYWNoZWRTcHJpdGUuYW5jaG9yLnggPSAtKCBib3VuZHMueCAvIGJvdW5kcy53aWR0aCApO1xuICAgIHRoaXMuX2NhY2hlZFNwcml0ZS5hbmNob3IueSA9IC0oIGJvdW5kcy55IC8gYm91bmRzLmhlaWdodCApO1xuXG4gICAgLy8gdGhpcy5fY2FjaGVkU3ByaXRlLmJ1ZmZlci5jb250ZXh0LnNhdmUoKTtcbiAgICB0aGlzLl9jYWNoZWRTcHJpdGUuYnVmZmVyLmNvbnRleHQudHJhbnNsYXRlKC1ib3VuZHMueCwtYm91bmRzLnkpO1xuXG4gICAgLy8gbWFrZSBzdXJlIHdlIHNldCB0aGUgYWxwaGEgb2YgdGhlIGdyYXBoaWNzIHRvIDEgZm9yIHRoZSByZW5kZXIuLlxuICAgIHRoaXMud29ybGRBbHBoYSA9IDE7XG5cbiAgICAvLyBub3cgcmVuZGVyIHRoZSBncmFwaGljLi5cbiAgICBDYW52YXNHcmFwaGljcy5yZW5kZXJHcmFwaGljcyh0aGlzLCB0aGlzLl9jYWNoZWRTcHJpdGUuYnVmZmVyLmNvbnRleHQpO1xuXG4gICAgdGhpcy5fY2FjaGVkU3ByaXRlLmFscGhhID0gdGhpcy5hbHBoYTtcbn07XG4qL1xuLyoqXG4gKiBVcGRhdGVzIHRleHR1cmUgc2l6ZSBiYXNlZCBvbiBjYW52YXMgc2l6ZVxuICpcbiAqIEBwcml2YXRlXG4gKi9cbi8qXG5HcmFwaGljcy5wcm90b3R5cGUudXBkYXRlQ2FjaGVkU3ByaXRlVGV4dHVyZSA9IGZ1bmN0aW9uICgpXG57XG4gICAgdmFyIGNhY2hlZFNwcml0ZSA9IHRoaXMuX2NhY2hlZFNwcml0ZTtcbiAgICB2YXIgdGV4dHVyZSA9IGNhY2hlZFNwcml0ZS50ZXh0dXJlO1xuICAgIHZhciBjYW52YXMgPSBjYWNoZWRTcHJpdGUuYnVmZmVyLmNhbnZhcztcblxuICAgIHRleHR1cmUuYmFzZVRleHR1cmUud2lkdGggPSBjYW52YXMud2lkdGg7XG4gICAgdGV4dHVyZS5iYXNlVGV4dHVyZS5oZWlnaHQgPSBjYW52YXMuaGVpZ2h0O1xuICAgIHRleHR1cmUuY3JvcC53aWR0aCA9IHRleHR1cmUuZnJhbWUud2lkdGggPSBjYW52YXMud2lkdGg7XG4gICAgdGV4dHVyZS5jcm9wLmhlaWdodCA9IHRleHR1cmUuZnJhbWUuaGVpZ2h0ID0gY2FudmFzLmhlaWdodDtcblxuICAgIGNhY2hlZFNwcml0ZS5fd2lkdGggPSBjYW52YXMud2lkdGg7XG4gICAgY2FjaGVkU3ByaXRlLl9oZWlnaHQgPSBjYW52YXMuaGVpZ2h0O1xuXG4gICAgLy8gdXBkYXRlIHRoZSBkaXJ0eSBiYXNlIHRleHR1cmVzXG4gICAgdGV4dHVyZS5iYXNlVGV4dHVyZS5kaXJ0eSgpO1xufTsqL1xuXG4vKipcbiAqIERlc3Ryb3lzIGEgcHJldmlvdXMgY2FjaGVkIHNwcml0ZS5cbiAqXG4gKi9cbi8qXG5HcmFwaGljcy5wcm90b3R5cGUuZGVzdHJveUNhY2hlZFNwcml0ZSA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy5fY2FjaGVkU3ByaXRlLnRleHR1cmUuZGVzdHJveSh0cnVlKTtcblxuICAgIC8vIGxldCB0aGUgZ2MgY29sbGVjdCB0aGUgdW51c2VkIHNwcml0ZVxuICAgIC8vIFRPRE8gY291bGQgYmUgb2JqZWN0IHBvb2xlZCFcbiAgICB0aGlzLl9jYWNoZWRTcHJpdGUgPSBudWxsO1xufTsqL1xuXG4vKipcbiAqIERyYXdzIHRoZSBnaXZlbiBzaGFwZSB0byB0aGlzIEdyYXBoaWNzIG9iamVjdC4gQ2FuIGJlIGFueSBvZiBDaXJjbGUsIFJlY3RhbmdsZSwgRWxsaXBzZSwgTGluZSBvciBQb2x5Z29uLlxuICpcbiAqIEBwYXJhbSBzaGFwZSB7UElYSS5DaXJjbGV8UElYSS5SZWN0YW5nbGV8UElYSS5FbGxpcHNlfFBJWEkuTGluZXxQSVhJLlBvbHlnb259IFRoZSBzaGFwZSBvYmplY3QgdG8gZHJhdy5cbiAqIEByZXR1cm4ge1BJWEkuR3JhcGhpY3NEYXRhfSBUaGUgZ2VuZXJhdGVkIEdyYXBoaWNzRGF0YSBvYmplY3QuXG4gKi9cbkdyYXBoaWNzLnByb3RvdHlwZS5kcmF3U2hhcGUgPSBmdW5jdGlvbiAoc2hhcGUpXG57XG4gICAgaWYgKHRoaXMuY3VycmVudFBhdGgpXG4gICAge1xuICAgICAgICAvLyBjaGVjayBjdXJyZW50IHBhdGghXG4gICAgICAgIGlmICh0aGlzLmN1cnJlbnRQYXRoLnNoYXBlLnBvaW50cy5sZW5ndGggPD0gMilcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5ncmFwaGljc0RhdGEucG9wKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLmN1cnJlbnRQYXRoID0gbnVsbDtcblxuICAgIHZhciBkYXRhID0gbmV3IEdyYXBoaWNzRGF0YSh0aGlzLmxpbmVXaWR0aCwgdGhpcy5saW5lQ29sb3IsIHRoaXMubGluZUFscGhhLCB0aGlzLmZpbGxDb2xvciwgdGhpcy5maWxsQWxwaGEsIHRoaXMuZmlsbGluZywgc2hhcGUpO1xuXG4gICAgdGhpcy5ncmFwaGljc0RhdGEucHVzaChkYXRhKTtcblxuICAgIGlmIChkYXRhLnR5cGUgPT09IENPTlNULlNIQVBFUy5QT0xZKVxuICAgIHtcbiAgICAgICAgZGF0YS5zaGFwZS5jbG9zZWQgPSBkYXRhLnNoYXBlLmNsb3NlZCB8fCB0aGlzLmZpbGxpbmc7XG4gICAgICAgIHRoaXMuY3VycmVudFBhdGggPSBkYXRhO1xuICAgIH1cblxuICAgIHRoaXMuZGlydHkgPSB0aGlzLmJvdW5kc0RpcnR5ID0gdHJ1ZTtcblxuICAgIHJldHVybiBkYXRhO1xufTtcblxuLyoqXG4gKiBEZXN0cm95cyB0aGUgR3JhcGhpY3Mgb2JqZWN0LlxuICovXG5HcmFwaGljcy5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uICgpIHtcbiAgICBDb250YWluZXIucHJvdG90eXBlLmRlc3Ryb3kuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcblxuICAgIC8vIGRlc3Ryb3kgZWFjaCBvZiB0aGUgR3JhcGhpY3NEYXRhIG9iamVjdHNcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuZ3JhcGhpY3NEYXRhLmxlbmd0aDsgKytpKSB7XG4gICAgICAgIHRoaXMuZ3JhcGhpY3NEYXRhW2ldLmRlc3Ryb3koKTtcbiAgICB9XG5cbiAgICAvLyBmb3IgZWFjaCB3ZWJnbCBkYXRhIGVudHJ5LCBkZXN0cm95IHRoZSBXZWJHTEdyYXBoaWNzRGF0YVxuICAgIGZvciAodmFyIGlkIGluIHRoaXMuX3dlYmdsKSB7XG4gICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgdGhpcy5fd2ViZ2xbaWRdLmRhdGEubGVuZ3RoOyArK2opIHtcbiAgICAgICAgICAgIHRoaXMuX3dlYmdsW2lkXS5kYXRhW2pdLmRlc3Ryb3koKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMuZ3JhcGhpY3NEYXRhID0gbnVsbDtcblxuICAgIHRoaXMuY3VycmVudFBhdGggPSBudWxsO1xuICAgIHRoaXMuX3dlYmdsID0gbnVsbDtcbiAgICB0aGlzLl9sb2NhbEJvdW5kcyA9IG51bGw7XG59O1xuIiwiLyoqXG4gKiBBIEdyYXBoaWNzRGF0YSBvYmplY3QuXG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIGxpbmVXaWR0aCB7bnVtYmVyfSB0aGUgd2lkdGggb2YgdGhlIGxpbmUgdG8gZHJhd1xuICogQHBhcmFtIGxpbmVDb2xvciB7bnVtYmVyfSB0aGUgY29sb3Igb2YgdGhlIGxpbmUgdG8gZHJhd1xuICogQHBhcmFtIGxpbmVBbHBoYSB7bnVtYmVyfSB0aGUgYWxwaGEgb2YgdGhlIGxpbmUgdG8gZHJhd1xuICogQHBhcmFtIGZpbGxDb2xvciB7bnVtYmVyfSB0aGUgY29sb3Igb2YgdGhlIGZpbGxcbiAqIEBwYXJhbSBmaWxsQWxwaGEge251bWJlcn0gdGhlIGFscGhhIG9mIHRoZSBmaWxsXG4gKiBAcGFyYW0gZmlsbCAgICAgIHtib29sZWFufSB3aGV0aGVyIG9yIG5vdCB0aGUgc2hhcGUgaXMgZmlsbGVkIHdpdGggYSBjb2xvdXJcbiAqIEBwYXJhbSBzaGFwZSAgICAge0NpcmNsZXxSZWN0YW5nbGV8RWxsaXBzZXxMaW5lfFBvbHlnb259IFRoZSBzaGFwZSBvYmplY3QgdG8gZHJhdy5cbiAqL1xuZnVuY3Rpb24gR3JhcGhpY3NEYXRhKGxpbmVXaWR0aCwgbGluZUNvbG9yLCBsaW5lQWxwaGEsIGZpbGxDb2xvciwgZmlsbEFscGhhLCBmaWxsLCBzaGFwZSlcbntcbiAgICAvKlxuICAgICAqIEBtZW1iZXIge251bWJlcn0gdGhlIHdpZHRoIG9mIHRoZSBsaW5lIHRvIGRyYXdcbiAgICAgKi9cbiAgICB0aGlzLmxpbmVXaWR0aCA9IGxpbmVXaWR0aDtcblxuICAgIC8qXG4gICAgICogQG1lbWJlciB7bnVtYmVyfSB0aGUgY29sb3Igb2YgdGhlIGxpbmUgdG8gZHJhd1xuICAgICAqL1xuICAgIHRoaXMubGluZUNvbG9yID0gbGluZUNvbG9yO1xuICAgIC8qXG4gICAgICogQG1lbWJlciB7bnVtYmVyfSB0aGUgYWxwaGEgb2YgdGhlIGxpbmUgdG8gZHJhd1xuICAgICAqL1xuICAgIHRoaXMubGluZUFscGhhID0gbGluZUFscGhhO1xuICAgIC8qXG4gICAgICogQG1lbWJlciB7bnVtYmVyfSBjYWNoZWQgdGludCBvZiB0aGUgbGluZSB0byBkcmF3XG4gICAgICovXG4gICAgdGhpcy5fbGluZVRpbnQgPSBsaW5lQ29sb3I7XG5cbiAgICAvKlxuICAgICAqIEBtZW1iZXIge251bWJlcn0gdGhlIGNvbG9yIG9mIHRoZSBmaWxsXG4gICAgICovXG4gICAgdGhpcy5maWxsQ29sb3IgPSBmaWxsQ29sb3I7XG5cbiAgICAvKlxuICAgICAqIEBtZW1iZXIge251bWJlcn0gdGhlIGFscGhhIG9mIHRoZSBmaWxsXG4gICAgICovXG4gICAgdGhpcy5maWxsQWxwaGEgPSBmaWxsQWxwaGE7XG5cbiAgICAvKlxuICAgICAqIEBtZW1iZXIge251bWJlcn0gY2FjaGVkIHRpbnQgb2YgdGhlIGZpbGxcbiAgICAgKi9cbiAgICB0aGlzLl9maWxsVGludCA9IGZpbGxDb2xvcjtcblxuICAgIC8qXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn0gd2hldGhlciBvciBub3QgdGhlIHNoYXBlIGlzIGZpbGxlZCB3aXRoIGEgY29sb3VyXG4gICAgICovXG4gICAgdGhpcy5maWxsID0gZmlsbDtcblxuICAgIC8qXG4gICAgICogQG1lbWJlciB7UElYSS5DaXJjbGV8UElYSS5SZWN0YW5nbGV8UElYSS5FbGxpcHNlfFBJWEkuTGluZXxQSVhJLlBvbHlnb259IFRoZSBzaGFwZSBvYmplY3QgdG8gZHJhdy5cbiAgICAgKi9cbiAgICB0aGlzLnNoYXBlID0gc2hhcGU7XG5cbiAgICAvKlxuICAgICAqIEBtZW1iZXIge251bWJlcn0gVGhlIHR5cGUgb2YgdGhlIHNoYXBlLCBzZWUgdGhlIENvbnN0LlNoYXBlcyBmaWxlIGZvciBhbGwgdGhlIGV4aXN0aW5nIHR5cGVzLFxuICAgICAqL1xuICAgIHRoaXMudHlwZSA9IHNoYXBlLnR5cGU7XG59XG5cbkdyYXBoaWNzRGF0YS5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBHcmFwaGljc0RhdGE7XG5tb2R1bGUuZXhwb3J0cyA9IEdyYXBoaWNzRGF0YTtcblxuLyoqXG4gKiBDcmVhdGVzIGEgbmV3IEdyYXBoaWNzRGF0YSBvYmplY3Qgd2l0aCB0aGUgc2FtZSB2YWx1ZXMgYXMgdGhpcyBvbmUuXG4gKlxuICogQHJldHVybiB7UElYSS5HcmFwaGljc0RhdGF9XG4gKi9cbkdyYXBoaWNzRGF0YS5wcm90b3R5cGUuY2xvbmUgPSBmdW5jdGlvbiAoKVxue1xuICAgIHJldHVybiBuZXcgR3JhcGhpY3NEYXRhKFxuICAgICAgICB0aGlzLmxpbmVXaWR0aCxcbiAgICAgICAgdGhpcy5saW5lQ29sb3IsXG4gICAgICAgIHRoaXMubGluZUFscGhhLFxuICAgICAgICB0aGlzLmZpbGxDb2xvcixcbiAgICAgICAgdGhpcy5maWxsQWxwaGEsXG4gICAgICAgIHRoaXMuZmlsbCxcbiAgICAgICAgdGhpcy5zaGFwZVxuICAgICk7XG59O1xuXG4vKipcbiAqIERlc3Ryb3lzIHRoZSBHcmFwaGljcyBkYXRhLlxuICovXG5HcmFwaGljc0RhdGEucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoKSB7XG4gICAgdGhpcy5zaGFwZSA9IG51bGw7XG59O1xuIiwidmFyIHV0aWxzID0gcmVxdWlyZSgnLi4vLi4vdXRpbHMnKSxcbiAgICBtYXRoID0gcmVxdWlyZSgnLi4vLi4vbWF0aCcpLFxuICAgIENPTlNUID0gcmVxdWlyZSgnLi4vLi4vY29uc3QnKSxcbiAgICBPYmplY3RSZW5kZXJlciA9IHJlcXVpcmUoJy4uLy4uL3JlbmRlcmVycy93ZWJnbC91dGlscy9PYmplY3RSZW5kZXJlcicpLFxuICAgIFdlYkdMUmVuZGVyZXIgPSByZXF1aXJlKCcuLi8uLi9yZW5kZXJlcnMvd2ViZ2wvV2ViR0xSZW5kZXJlcicpLFxuICAgIFdlYkdMR3JhcGhpY3NEYXRhID0gcmVxdWlyZSgnLi9XZWJHTEdyYXBoaWNzRGF0YScpLFxuICAgIFByaW1pdGl2ZVNoYWRlciA9IHJlcXVpcmUoJy4vc2hhZGVycy9QcmltaXRpdmVTaGFkZXInKSxcblxuICAgIC8vIHNvbWUgZHJhd2luZyBmdW5jdGlvbnMuLlxuICAgIGJ1aWxkTGluZSA9IHJlcXVpcmUoJy4vdXRpbHMvYnVpbGRMaW5lJyk7XG4gICAgYnVpbGRQb2x5ID0gcmVxdWlyZSgnLi91dGlscy9idWlsZFBvbHknKTtcbiAgICBidWlsZENvbXBsZXhQb2x5ID0gcmVxdWlyZSgnLi91dGlscy9idWlsZENvbXBsZXhQb2x5Jyk7XG4gICAgYnVpbGRSZWN0YW5nbGUgPSByZXF1aXJlKCcuL3V0aWxzL2J1aWxkUmVjdGFuZ2xlJyk7XG4gICAgYnVpbGRSb3VuZGVkUmVjdGFuZ2xlID0gcmVxdWlyZSgnLi91dGlscy9idWlsZFJvdW5kZWRSZWN0YW5nbGUnKTtcbiAgICBidWlsZENpcmNsZSA9IHJlcXVpcmUoJy4vdXRpbHMvYnVpbGRDaXJjbGUnKTtcblxuICAgIGVhcmN1dCA9IHJlcXVpcmUoJ2VhcmN1dCcpO1xuXG4vKipcbiAqIFJlbmRlcnMgdGhlIGdyYXBoaWNzIG9iamVjdC5cbiAqXG4gKiBAY2xhc3NcbiAqIEBwcml2YXRlXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQGV4dGVuZHMgUElYSS5PYmplY3RSZW5kZXJlclxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLldlYkdMUmVuZGVyZXJ9IFRoZSByZW5kZXJlciB0aGlzIG9iamVjdCByZW5kZXJlciB3b3JrcyBmb3IuXG4gKi9cbmZ1bmN0aW9uIEdyYXBoaWNzUmVuZGVyZXIocmVuZGVyZXIpXG57XG4gICAgT2JqZWN0UmVuZGVyZXIuY2FsbCh0aGlzLCByZW5kZXJlcik7XG5cbiAgICB0aGlzLmdyYXBoaWNzRGF0YVBvb2wgPSBbXTtcblxuICAgIHRoaXMucHJpbWl0aXZlU2hhZGVyID0gbnVsbDtcbiAgICB0aGlzLmNvbXBsZXhQcmltaXRpdmVTaGFkZXIgPSBudWxsO1xuXG4gICAgdGhpcy5nbCA9IHJlbmRlcmVyLmdsO1xuXG4gICAgLyoqXG4gICAgICogVGhpcyBpcyB0aGUgbWF4aW11bSBudW1iZXIgb2YgcG9pbnRzIGEgcG9seSBjYW4gY29udGFpbiBiZWZvcmUgaXQgaXMgcmVuZGVyZWQgYXMgYSBjb21wbGV4IHBvbHlnb24gKHVzaW5nIHRoZSBzdGVuY2lsIGJ1ZmZlcilcbiAgICAgKiBAdHlwZSB7TnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMubWF4aW11bVNpbXBsZVBvbHlTaXplID0gMjAwO1xufVxuXG5HcmFwaGljc1JlbmRlcmVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoT2JqZWN0UmVuZGVyZXIucHJvdG90eXBlKTtcbkdyYXBoaWNzUmVuZGVyZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gR3JhcGhpY3NSZW5kZXJlcjtcbm1vZHVsZS5leHBvcnRzID0gR3JhcGhpY3NSZW5kZXJlcjtcblxuV2ViR0xSZW5kZXJlci5yZWdpc3RlclBsdWdpbignZ3JhcGhpY3MnLCBHcmFwaGljc1JlbmRlcmVyKTtcblxuLyoqXG4gKiBDYWxsZWQgd2hlbiB0aGVyZSBpcyBhIFdlYkdMIGNvbnRleHQgY2hhbmdlXG4gKlxuICogQHByaXZhdGVcbiAqXG4gKi9cbkdyYXBoaWNzUmVuZGVyZXIucHJvdG90eXBlLm9uQ29udGV4dENoYW5nZSA9IGZ1bmN0aW9uKClcbntcbiAgICB0aGlzLmdsID0gdGhpcy5yZW5kZXJlci5nbDtcbiAgICB0aGlzLnByaW1pdGl2ZVNoYWRlciA9IG5ldyBQcmltaXRpdmVTaGFkZXIodGhpcy5nbClcbn07XG5cbi8qKlxuICogRGVzdHJveXMgdGhpcyByZW5kZXJlci5cbiAqXG4gKi9cbkdyYXBoaWNzUmVuZGVyZXIucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoKSB7XG4gICAgT2JqZWN0UmVuZGVyZXIucHJvdG90eXBlLmRlc3Ryb3kuY2FsbCh0aGlzKTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5ncmFwaGljc0RhdGFQb29sLmxlbmd0aDsgKytpKSB7XG4gICAgICAgIHRoaXMuZ3JhcGhpY3NEYXRhUG9vbFtpXS5kZXN0cm95KCk7XG4gICAgfVxuXG4gICAgdGhpcy5ncmFwaGljc0RhdGFQb29sID0gbnVsbDtcbn07XG5cbi8qKlxuICogUmVuZGVycyBhIGdyYXBoaWNzIG9iamVjdC5cbiAqXG4gKiBAcGFyYW0gZ3JhcGhpY3Mge1BJWEkuR3JhcGhpY3N9IFRoZSBncmFwaGljcyBvYmplY3QgdG8gcmVuZGVyLlxuICovXG5HcmFwaGljc1JlbmRlcmVyLnByb3RvdHlwZS5yZW5kZXIgPSBmdW5jdGlvbihncmFwaGljcylcbntcbiAgICB2YXIgcmVuZGVyZXIgPSB0aGlzLnJlbmRlcmVyO1xuICAgIHZhciBnbCA9IHJlbmRlcmVyLmdsO1xuXG4gICAgdmFyIHdlYkdMRGF0YTtcbiAgLy8gIGNvbnNvbGUubG9nKGdyYXBoaWNzKVxuICAgIGlmIChncmFwaGljcy5kaXJ0eSB8fCAhZ3JhcGhpY3MuX3dlYkdMW2dsLmlkXSlcbiAgICB7XG4gICAgICAgIHRoaXMudXBkYXRlR3JhcGhpY3MoZ3JhcGhpY3MpO1xuICAgIH1cblxuICAgIHZhciB3ZWJHTCA9IGdyYXBoaWNzLl93ZWJHTFtnbC5pZF07XG5cbiAgICAvLyBUaGlzICBjb3VsZCBiZSBzcGVlZGVkIHVwIGZvciBzdXJlIVxuXG4gICAgcmVuZGVyZXIuYmxlbmRNb2RlTWFuYWdlci5zZXRCbGVuZE1vZGUoIGdyYXBoaWNzLmJsZW5kTW9kZSApO1xuXG4vLyAgICB2YXIgbWF0cml4ID0gIGdyYXBoaWNzLndvcmxkVHJhbnNmb3JtLmNsb25lKCk7XG4vLyAgICB2YXIgbWF0cml4ID0gIHJlbmRlcmVyLmN1cnJlbnRSZW5kZXJUYXJnZXQucHJvamVjdGlvbk1hdHJpeC5jbG9uZSgpO1xuLy8gICAgbWF0cml4LmFwcGVuZChncmFwaGljcy53b3JsZFRyYW5zZm9ybSk7XG5cbiAgICBmb3IgKHZhciBpID0gMCwgbiA9IHdlYkdMLmRhdGEubGVuZ3RoOyBpIDwgbjsgaSsrKVxuICAgIHtcbiAgICAgICAgd2ViR0xEYXRhID0gd2ViR0wuZGF0YVtpXTtcblxuICAgICAgICBpZiAod2ViR0wuZGF0YVtpXS5tb2RlID09PSAxKVxuICAgICAgICB7XG4gICAgICAgICAgICAvL1RPRE8gZml4IHRoaXMgb25lIVxuICAgICAgICAgICAgXG4gICAgICAgICAgICAvKlxuICAgICAgICAgICAgcmVuZGVyZXIuc3RlbmNpbE1hbmFnZXIucHVzaFN0ZW5jaWwoZ3JhcGhpY3MsIHdlYkdMRGF0YSk7XG5cbiAgICAgICAgICAgIGdsLnVuaWZvcm0xZihyZW5kZXJlci5zaGFkZXJNYW5hZ2VyLmNvbXBsZXhQcmltaXRpdmVTaGFkZXIudW5pZm9ybXMuYWxwaGEuX2xvY2F0aW9uLCBncmFwaGljcy53b3JsZEFscGhhICogd2ViR0xEYXRhLmFscGhhKTtcblxuICAgICAgICAgICAgLy8gcmVuZGVyIHF1YWQuLlxuICAgICAgICAgICAgZ2wuZHJhd0VsZW1lbnRzKGdsLlRSSUFOR0xFX0ZBTiwgNCwgZ2wuVU5TSUdORURfU0hPUlQsICggd2ViR0xEYXRhLmluZGljZXMubGVuZ3RoIC0gNCApICogMiApO1xuXG4gICAgICAgICAgICByZW5kZXJlci5zdGVuY2lsTWFuYWdlci5wb3BTdGVuY2lsKGdyYXBoaWNzLCB3ZWJHTERhdGEpO1xuICAgICAgICAgICAgKi9cbiAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgIHtcblxuICAgICAgICAgICAgc2hhZGVyID0gdGhpcy5wcmltaXRpdmVTaGFkZXI7XG5cbiAgICAgICAgICAgIHJlbmRlcmVyLmJpbmRTaGFkZXIoc2hhZGVyKVxuXG4gICAgICAgICAgICBzaGFkZXIudW5pZm9ybXMudHJhbnNsYXRpb25NYXRyaXggPSBncmFwaGljcy53b3JsZFRyYW5zZm9ybS50b0FycmF5KHRydWUpO1xuICAgICAgICAgICAgc2hhZGVyLnVuaWZvcm1zLnRpbnQgPSB1dGlscy5oZXgycmdiKGdyYXBoaWNzLnRpbnQpO1xuICAgICAgICAgICAgc2hhZGVyLnVuaWZvcm1zLmFscGhhID0gZ3JhcGhpY3Mud29ybGRBbHBoYTtcblxuXG4gICAgICAgICAgICBnbC5iaW5kQnVmZmVyKGdsLkFSUkFZX0JVRkZFUiwgd2ViR0xEYXRhLmJ1ZmZlcik7XG5cbiAgICAgICAgICAgIHNoYWRlciA9IHRoaXMucHJpbWl0aXZlU2hhZGVyO1xuXG4gICAgICAgICAgICBzaGFkZXIuYXR0cmlidXRlcy5hVmVydGV4UG9zaXRpb24ucG9pbnRlcihnbC5GTE9BVCwgZmFsc2UsIDQgKiA2LCAwKTtcbiAgICAgICAgICAgIHNoYWRlci5hdHRyaWJ1dGVzLmFDb2xvci5wb2ludGVyKGdsLkZMT0FULCBmYWxzZSwgNCAqIDYsIDIgKiA0KTtcblxuICAgICAgICAgICAgZ2wuZW5hYmxlVmVydGV4QXR0cmliQXJyYXkoc2hhZGVyLmF0dHJpYnV0ZXMuYVZlcnRleFBvc2l0aW9uLmxvY2F0aW9uKTtcbiAgICAgICAgICAgIGdsLmVuYWJsZVZlcnRleEF0dHJpYkFycmF5KHNoYWRlci5hdHRyaWJ1dGVzLmFDb2xvci5sb2NhdGlvbik7XG5cbiAgICAgICAgICAgIC8vIHNldCB0aGUgaW5kZXggYnVmZmVyIVxuICAgICAgICAgICAgZ2wuYmluZEJ1ZmZlcihnbC5FTEVNRU5UX0FSUkFZX0JVRkZFUiwgd2ViR0xEYXRhLmluZGV4QnVmZmVyKTtcbiAgICAgICAgICAgIGdsLmRyYXdFbGVtZW50cyhnbC5UUklBTkdMRV9TVFJJUCwgIHdlYkdMRGF0YS5pbmRpY2VzLmxlbmd0aCwgZ2wuVU5TSUdORURfU0hPUlQsIDAgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJlbmRlcmVyLmRyYXdDb3VudCsrO1xuICAgIH1cbn07XG5cbi8qKlxuICogVXBkYXRlcyB0aGUgZ3JhcGhpY3Mgb2JqZWN0XG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSBncmFwaGljcyB7UElYSS5HcmFwaGljc30gVGhlIGdyYXBoaWNzIG9iamVjdCB0byB1cGRhdGVcbiAqL1xuR3JhcGhpY3NSZW5kZXJlci5wcm90b3R5cGUudXBkYXRlR3JhcGhpY3MgPSBmdW5jdGlvbihncmFwaGljcylcbntcbiAgICB2YXIgZ2wgPSB0aGlzLnJlbmRlcmVyLmdsO1xuXG4gICAgIC8vIGdldCB0aGUgY29udGV4dHMgZ3JhcGhpY3Mgb2JqZWN0XG4gICAgdmFyIHdlYkdMID0gZ3JhcGhpY3MuX3dlYkdMW2dsLmlkXTtcblxuICAgIC8vIGlmIHRoZSBncmFwaGljcyBvYmplY3QgZG9lcyBub3QgZXhpc3QgaW4gdGhlIHdlYkdMIGNvbnRleHQgdGltZSB0byBjcmVhdGUgaXQhXG4gICAgaWYgKCF3ZWJHTClcbiAgICB7XG4gICAgICAgIHdlYkdMID0gZ3JhcGhpY3MuX3dlYkdMW2dsLmlkXSA9IHtsYXN0SW5kZXg6MCwgZGF0YTpbXSwgZ2w6Z2x9O1xuICAgIH1cblxuICAgXG4gICAgLy8gZmxhZyB0aGUgZ3JhcGhpY3MgYXMgbm90IGRpcnR5IGFzIHdlIGFyZSBhYm91dCB0byB1cGRhdGUgaXQuLi5cbiAgICBncmFwaGljcy5kaXJ0eSA9IGZhbHNlO1xuXG4gICAgdmFyIGk7XG5cbiAgICAvLyBpZiB0aGUgdXNlciBjbGVhcmVkIHRoZSBncmFwaGljcyBvYmplY3Qgd2Ugd2lsbCBuZWVkIHRvIGNsZWFyIGV2ZXJ5IG9iamVjdFxuICAgIGlmIChncmFwaGljcy5jbGVhckRpcnR5KVxuICAgIHtcbiAgICAgICAgZ3JhcGhpY3MuY2xlYXJEaXJ0eSA9IGZhbHNlO1xuXG4gICAgICAgIC8vIGxvb3AgdGhyb3VnaCBhbmQgcmV0dXJuIGFsbCB0aGUgd2ViR0xEYXRhcyB0byB0aGUgb2JqZWN0IHBvb2wgc28gdGhhbiBjYW4gYmUgcmV1c2VkIGxhdGVyIG9uXG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCB3ZWJHTC5kYXRhLmxlbmd0aDsgaSsrKVxuICAgICAgICB7XG4gICAgICAgICAgICB2YXIgZ3JhcGhpY3NEYXRhID0gd2ViR0wuZGF0YVtpXTtcbiAgICAgICAgICAgIGdyYXBoaWNzRGF0YS5yZXNldCgpO1xuICAgICAgICAgICAgdGhpcy5ncmFwaGljc0RhdGFQb29sLnB1c2goIGdyYXBoaWNzRGF0YSApO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gY2xlYXIgdGhlIGFycmF5IGFuZCByZXNldCB0aGUgaW5kZXguLlxuICAgICAgICB3ZWJHTC5kYXRhID0gW107XG4gICAgICAgIHdlYkdMLmxhc3RJbmRleCA9IDA7XG4gICAgfVxuXG4gICAgdmFyIHdlYkdMRGF0YTtcblxuICAgIC8vIGxvb3AgdGhyb3VnaCB0aGUgZ3JhcGhpY3MgZGF0YXMgYW5kIGNvbnN0cnVjdCBlYWNoIG9uZS4uXG4gICAgLy8gaWYgdGhlIG9iamVjdCBpcyBhIGNvbXBsZXggZmlsbCB0aGVuIHRoZSBuZXcgc3RlbmNpbCBidWZmZXIgdGVjaG5pcXVlIHdpbGwgYmUgdXNlZFxuICAgIC8vIG90aGVyIHdpc2UgZ3JhcGhpY3Mgb2JqZWN0cyB3aWxsIGJlIHB1c2hlZCBpbnRvIGEgYmF0Y2guLlxuICAgIGZvciAoaSA9IHdlYkdMLmxhc3RJbmRleDsgaSA8IGdyYXBoaWNzLmdyYXBoaWNzRGF0YS5sZW5ndGg7IGkrKylcbiAgICB7XG4gICAgICAgIHZhciBkYXRhID0gZ3JhcGhpY3MuZ3JhcGhpY3NEYXRhW2ldO1xuXG4gICAgICAgIGlmIChkYXRhLnR5cGUgPT09IENPTlNULlNIQVBFUy5QT0xZKVxuICAgICAgICB7XG4gICAgICAgICAgICAvLyBuZWVkIHRvIGFkZCB0aGUgcG9pbnRzIHRoZSB0aGUgZ3JhcGhpY3Mgb2JqZWN0Li5cbiAgICAgICAgICAgIGRhdGEucG9pbnRzID0gZGF0YS5zaGFwZS5wb2ludHMuc2xpY2UoKTtcbiAgICAgICAgICAgIGlmIChkYXRhLnNoYXBlLmNsb3NlZClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAvLyBjbG9zZSB0aGUgcG9seSBpZiB0aGUgdmFsdWUgaXMgdHJ1ZSFcbiAgICAgICAgICAgICAgICBpZiAoZGF0YS5wb2ludHNbMF0gIT09IGRhdGEucG9pbnRzW2RhdGEucG9pbnRzLmxlbmd0aC0yXSB8fCBkYXRhLnBvaW50c1sxXSAhPT0gZGF0YS5wb2ludHNbZGF0YS5wb2ludHMubGVuZ3RoLTFdKVxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgZGF0YS5wb2ludHMucHVzaChkYXRhLnBvaW50c1swXSwgZGF0YS5wb2ludHNbMV0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gTUFLRSBTVVJFIFdFIEhBVkUgVEhFIENPUlJFQ1QgVFlQRS4uXG4gICAgICAgICAgICBpZiAoZGF0YS5maWxsKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGlmIChkYXRhLnBvaW50cy5sZW5ndGggPj0gNilcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChkYXRhLnBvaW50cy5sZW5ndGggPCB0aGlzLm1heGltdW1TaW1wbGVQb2x5U2l6ZSAqIDIpXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHdlYkdMRGF0YSA9IHRoaXMuc3dpdGNoTW9kZSh3ZWJHTCwgMCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjYW5EcmF3VXNpbmdTaW1wbGUgPSBidWlsZFBvbHkoZGF0YSwgd2ViR0xEYXRhKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFjYW5EcmF3VXNpbmdTaW1wbGUpXG4gICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd2ViR0xEYXRhID0gdGhpcy5zd2l0Y2hNb2RlKHdlYkdMLCAxKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWlsZENvbXBsZXhQb2x5KGRhdGEsIHdlYkdMRGF0YSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHdlYkdMRGF0YSA9IHRoaXMuc3dpdGNoTW9kZSh3ZWJHTCwgMSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBidWlsZENvbXBsZXhQb2x5KGRhdGEsIHdlYkdMRGF0YSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChkYXRhLmxpbmVXaWR0aCA+IDApXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgd2ViR0xEYXRhID0gdGhpcy5zd2l0Y2hNb2RlKHdlYkdMLCAwKTtcbiAgICAgICAgICAgICAgICBidWlsZExpbmUoZGF0YSwgd2ViR0xEYXRhKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgIHtcbiAgICAgICAgICAgIHdlYkdMRGF0YSA9IHRoaXMuc3dpdGNoTW9kZSh3ZWJHTCwgMCk7XG5cbiAgICAgICAgICAgIGlmIChkYXRhLnR5cGUgPT09IENPTlNULlNIQVBFUy5SRUNUKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGJ1aWxkUmVjdGFuZ2xlKGRhdGEsIHdlYkdMRGF0YSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChkYXRhLnR5cGUgPT09IENPTlNULlNIQVBFUy5DSVJDIHx8IGRhdGEudHlwZSA9PT0gQ09OU1QuU0hBUEVTLkVMSVApXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgYnVpbGRDaXJjbGUoZGF0YSwgd2ViR0xEYXRhKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGRhdGEudHlwZSA9PT0gQ09OU1QuU0hBUEVTLlJSRUMpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgYnVpbGRSb3VuZGVkUmVjdGFuZ2xlKGRhdGEsIHdlYkdMRGF0YSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICB3ZWJHTC5sYXN0SW5kZXgrKztcbiAgICB9XG5cbiAgICAvLyB1cGxvYWQgYWxsIHRoZSBkaXJ0eSBkYXRhLi4uXG4gICAgZm9yIChpID0gMDsgaSA8IHdlYkdMLmRhdGEubGVuZ3RoOyBpKyspXG4gICAge1xuICAgICAgICB3ZWJHTERhdGEgPSB3ZWJHTC5kYXRhW2ldO1xuXG4gICAgICAgIGlmICh3ZWJHTERhdGEuZGlydHkpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHdlYkdMRGF0YS51cGxvYWQoKTtcbiAgICAgICAgfVxuICAgIH1cbn07XG5cbi8qKlxuICpcbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHdlYkdMIHtXZWJHTFJlbmRlcmluZ0NvbnRleHR9IHRoZSBjdXJyZW50IFdlYkdMIGRyYXdpbmcgY29udGV4dFxuICogQHBhcmFtIHR5cGUge251bWJlcn0gVE9ETyBAQWx2aW5cbiAqL1xuR3JhcGhpY3NSZW5kZXJlci5wcm90b3R5cGUuc3dpdGNoTW9kZSA9IGZ1bmN0aW9uICh3ZWJHTCwgdHlwZSlcbntcbiAgICB2YXIgd2ViR0xEYXRhO1xuXG4gICAgaWYgKCF3ZWJHTC5kYXRhLmxlbmd0aClcbiAgICB7XG4gICAgICAgIHdlYkdMRGF0YSA9IHRoaXMuZ3JhcGhpY3NEYXRhUG9vbC5wb3AoKSB8fCBuZXcgV2ViR0xHcmFwaGljc0RhdGEod2ViR0wuZ2wpO1xuICAgICAgICB3ZWJHTERhdGEubW9kZSA9IHR5cGU7XG4gICAgICAgIHdlYkdMLmRhdGEucHVzaCh3ZWJHTERhdGEpO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICB3ZWJHTERhdGEgPSB3ZWJHTC5kYXRhW3dlYkdMLmRhdGEubGVuZ3RoLTFdO1xuXG4gICAgICAgIGlmICgod2ViR0xEYXRhLnBvaW50cy5sZW5ndGggPiAzMjAwMDApIHx8IHdlYkdMRGF0YS5tb2RlICE9PSB0eXBlIHx8IHR5cGUgPT09IDEpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHdlYkdMRGF0YSA9IHRoaXMuZ3JhcGhpY3NEYXRhUG9vbC5wb3AoKSB8fCBuZXcgV2ViR0xHcmFwaGljc0RhdGEod2ViR0wuZ2wpO1xuICAgICAgICAgICAgd2ViR0xEYXRhLm1vZGUgPSB0eXBlO1xuICAgICAgICAgICAgd2ViR0wuZGF0YS5wdXNoKHdlYkdMRGF0YSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB3ZWJHTERhdGEuZGlydHkgPSB0cnVlO1xuXG4gICAgcmV0dXJuIHdlYkdMRGF0YTtcbn07XG5cbiIsIi8qKlxuICogQW4gb2JqZWN0IGNvbnRhaW5pbmcgV2ViR0wgc3BlY2lmaWMgcHJvcGVydGllcyB0byBiZSB1c2VkIGJ5IHRoZSBXZWJHTCByZW5kZXJlclxuICpcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqIEBwYXJhbSBnbCB7V2ViR0xSZW5kZXJpbmdDb250ZXh0fSB0aGUgY3VycmVudCBXZWJHTCBkcmF3aW5nIGNvbnRleHRcbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIFdlYkdMR3JhcGhpY3NEYXRhKGdsKSB7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgY3VycmVudCBXZWJHTCBkcmF3aW5nIGNvbnRleHRcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1dlYkdMUmVuZGVyaW5nQ29udGV4dH1cbiAgICAgKi9cbiAgICB0aGlzLmdsID0gZ2w7XG5cbiAgICAvL1RPRE8gZG9lcyB0aGlzIG5lZWQgdG8gYmUgc3BsaXQgYmVmb3JlIHVwbG9kaW5nPz9cbiAgICAvKipcbiAgICAgKiBBbiBhcnJheSBvZiBjb2xvciBjb21wb25lbnRzIChyLGcsYilcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJbXX1cbiAgICAgKi9cbiAgICB0aGlzLmNvbG9yID0gWzAsMCwwXTsgLy8gY29sb3Igc3BsaXQhXG5cbiAgICAvKipcbiAgICAgKiBBbiBhcnJheSBvZiBwb2ludHMgdG8gZHJhd1xuICAgICAqIEBtZW1iZXIge1BJWEkuUG9pbnRbXX1cbiAgICAgKi9cbiAgICB0aGlzLnBvaW50cyA9IFtdO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGluZGljZXMgb2YgdGhlIHZlcnRpY2VzXG4gICAgICogQG1lbWJlciB7bnVtYmVyW119XG4gICAgICovXG4gICAgdGhpcy5pbmRpY2VzID0gW107XG4gICAgLyoqXG4gICAgICogVGhlIG1haW4gYnVmZmVyXG4gICAgICogQG1lbWJlciB7V2ViR0xCdWZmZXJ9XG4gICAgICovXG4gICAgdGhpcy5idWZmZXIgPSBnbC5jcmVhdGVCdWZmZXIoKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBpbmRleCBidWZmZXJcbiAgICAgKiBAbWVtYmVyIHtXZWJHTEJ1ZmZlcn1cbiAgICAgKi9cbiAgICB0aGlzLmluZGV4QnVmZmVyID0gZ2wuY3JlYXRlQnVmZmVyKCk7XG5cbiAgICAvKipcbiAgICAgKiB0b2RvIEBhbHZpblxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLm1vZGUgPSAxO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGFscGhhIG9mIHRoZSBncmFwaGljc1xuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLmFscGhhID0gMTtcblxuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgdGhpcyBncmFwaGljcyBpcyBkaXJ0eSBvciBub3RcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqL1xuICAgIHRoaXMuZGlydHkgPSB0cnVlO1xuXG4gICAgdGhpcy5nbFBvaW50cyA9IG51bGw7XG4gICAgdGhpcy5nbEluZGljZXMgPSBudWxsO1xufVxuXG5XZWJHTEdyYXBoaWNzRGF0YS5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBXZWJHTEdyYXBoaWNzRGF0YTtcbm1vZHVsZS5leHBvcnRzID0gV2ViR0xHcmFwaGljc0RhdGE7XG5cbi8qKlxuICogUmVzZXRzIHRoZSB2ZXJ0aWNlcyBhbmQgdGhlIGluZGljZXNcbiAqL1xuV2ViR0xHcmFwaGljc0RhdGEucHJvdG90eXBlLnJlc2V0ID0gZnVuY3Rpb24gKCkge1xuICAgIHRoaXMucG9pbnRzLmxlbmd0aCA9IDA7XG4gICAgdGhpcy5pbmRpY2VzLmxlbmd0aCA9IDA7XG59O1xuXG4vKipcbiAqIEJpbmRzIHRoZSBidWZmZXJzIGFuZCB1cGxvYWRzIHRoZSBkYXRhXG4gKi9cbldlYkdMR3JhcGhpY3NEYXRhLnByb3RvdHlwZS51cGxvYWQgPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGdsID0gdGhpcy5nbDtcblxuLy8gICAgdGhpcy5sYXN0SW5kZXggPSBncmFwaGljcy5ncmFwaGljc0RhdGEubGVuZ3RoO1xuICAgIHRoaXMuZ2xQb2ludHMgPSBuZXcgRmxvYXQzMkFycmF5KHRoaXMucG9pbnRzKTtcblxuICAgIGdsLmJpbmRCdWZmZXIoZ2wuQVJSQVlfQlVGRkVSLCB0aGlzLmJ1ZmZlcik7XG4gICAgZ2wuYnVmZmVyRGF0YShnbC5BUlJBWV9CVUZGRVIsIHRoaXMuZ2xQb2ludHMsIGdsLlNUQVRJQ19EUkFXKTtcblxuICAgIHRoaXMuZ2xJbmRpY2VzID0gbmV3IFVpbnQxNkFycmF5KHRoaXMuaW5kaWNlcyk7XG5cbiAgICBnbC5iaW5kQnVmZmVyKGdsLkVMRU1FTlRfQVJSQVlfQlVGRkVSLCB0aGlzLmluZGV4QnVmZmVyKTtcbiAgICBnbC5idWZmZXJEYXRhKGdsLkVMRU1FTlRfQVJSQVlfQlVGRkVSLCB0aGlzLmdsSW5kaWNlcywgZ2wuU1RBVElDX0RSQVcpO1xuXG4gICAgdGhpcy5kaXJ0eSA9IGZhbHNlO1xufTtcblxuV2ViR0xHcmFwaGljc0RhdGEucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoKSB7XG4gICAgdGhpcy5jb2xvciA9IG51bGw7XG4gICAgdGhpcy5wb2ludHMgPSBudWxsO1xuICAgIHRoaXMuaW5kaWNlcyA9IG51bGw7XG5cbiAgICB0aGlzLmdsLmRlbGV0ZUJ1ZmZlcih0aGlzLmJ1ZmZlcik7XG4gICAgdGhpcy5nbC5kZWxldGVCdWZmZXIodGhpcy5pbmRleEJ1ZmZlcik7XG4gICAgXG4gICAgdGhpcy5nbCA9IG51bGw7XG5cbiAgICB0aGlzLmJ1ZmZlciA9IG51bGw7XG4gICAgdGhpcy5pbmRleEJ1ZmZlciA9IG51bGw7XG5cbiAgICB0aGlzLmdsUG9pbnRzID0gbnVsbDtcbiAgICB0aGlzLmdsSW5kaWNlcyA9IG51bGw7XG59O1xuIiwidmFyIFNoYWRlciA9IHJlcXVpcmUoJ3BpeGktZ2wtY29yZScpLkdMU2hhZGVyO1xuXG4vKipcbiAqIFRoaXMgc2hhZGVyIGlzIHVzZWQgdG8gZHJhdyBzaW1wbGUgcHJpbWl0aXZlIHNoYXBlcyBmb3Ige0BsaW5rIFBJWEkuR3JhcGhpY3N9LlxuICpcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqIEBleHRlbmRzIFBJWEkuU2hhZGVyXG4gKiBAcGFyYW0gc2hhZGVyTWFuYWdlciB7U2hhZGVyTWFuYWdlcn0gVGhlIHdlYmdsIHNoYWRlciBtYW5hZ2VyIHRoaXMgc2hhZGVyIHdvcmtzIGZvci5cbiAqL1xuZnVuY3Rpb24gUHJpbWl0aXZlU2hhZGVyKGdsKVxue1xuICAgIFNoYWRlci5jYWxsKHRoaXMsXG4gICAgICAgIGdsLFxuICAgICAgICAvLyB2ZXJ0ZXggc2hhZGVyXG4gICAgICAgIFtcbiAgICAgICAgICAgICdhdHRyaWJ1dGUgdmVjMiBhVmVydGV4UG9zaXRpb247JyxcbiAgICAgICAgICAgICdhdHRyaWJ1dGUgdmVjNCBhQ29sb3I7JyxcblxuICAgICAgICAgICAgJ3VuaWZvcm0gbWF0MyB0cmFuc2xhdGlvbk1hdHJpeDsnLFxuICAgICAgICAgICAgJ3VuaWZvcm0gbWF0MyBwcm9qZWN0aW9uTWF0cml4OycsXG5cbiAgICAgICAgICAgICd1bmlmb3JtIGZsb2F0IGFscGhhOycsXG4gICAgICAgICAgICAndW5pZm9ybSBmbG9hdCBmbGlwWTsnLFxuICAgICAgICAgICAgJ3VuaWZvcm0gdmVjMyB0aW50OycsXG5cbiAgICAgICAgICAgICd2YXJ5aW5nIHZlYzQgdkNvbG9yOycsXG5cbiAgICAgICAgICAgICd2b2lkIG1haW4odm9pZCl7JyxcbiAgICAgICAgICAgICcgICBnbF9Qb3NpdGlvbiA9IHZlYzQoKHByb2plY3Rpb25NYXRyaXggKiB0cmFuc2xhdGlvbk1hdHJpeCAqIHZlYzMoYVZlcnRleFBvc2l0aW9uLCAxLjApKS54eSwgMC4wLCAxLjApOycsXG4gICAgICAgICAgICAnICAgdkNvbG9yID0gYUNvbG9yICogdmVjNCh0aW50ICogYWxwaGEsIGFscGhhKTsnLFxuICAgICAgICAgICAgJ30nXG4gICAgICAgIF0uam9pbignXFxuJyksXG4gICAgICAgIC8vIGZyYWdtZW50IHNoYWRlclxuICAgICAgICBbXG4gICAgICAgICAgICAncHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7JyxcblxuICAgICAgICAgICAgJ3ZhcnlpbmcgdmVjNCB2Q29sb3I7JyxcblxuICAgICAgICAgICAgJ3ZvaWQgbWFpbih2b2lkKXsnLFxuICAgICAgICAgICAgJyAgIGdsX0ZyYWdDb2xvciA9IHZDb2xvcjsnLFxuICAgICAgICAgICAgJ30nXG4gICAgICAgIF0uam9pbignXFxuJylcbiAgICApO1xufVxuXG5QcmltaXRpdmVTaGFkZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShTaGFkZXIucHJvdG90eXBlKTtcblByaW1pdGl2ZVNoYWRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBQcmltaXRpdmVTaGFkZXI7XG5cbm1vZHVsZS5leHBvcnRzID0gUHJpbWl0aXZlU2hhZGVyO1xuIiwidmFyIGJ1aWxkTGluZSA9IHJlcXVpcmUoJy4vYnVpbGRMaW5lJyksXG4gICAgdXRpbHMgPSByZXF1aXJlKCcuLi8uLi8uLi91dGlscycpO1xuXG4vKipcbiAqIEJ1aWxkcyBhIGNpcmNsZSB0byBkcmF3XG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSBncmFwaGljc0RhdGEge1BJWEkuR3JhcGhpY3N9IFRoZSBncmFwaGljcyBvYmplY3QgdG8gZHJhd1xuICogQHBhcmFtIHdlYkdMRGF0YSB7b2JqZWN0fSBhbiBvYmplY3QgY29udGFpbmluZyBhbGwgdGhlIHdlYkdMLXNwZWNpZmljIGluZm9ybWF0aW9uIHRvIGNyZWF0ZSB0aGlzIHNoYXBlXG4gKi9cbnZhciBidWlsZENpcmNsZSA9IGZ1bmN0aW9uIChncmFwaGljc0RhdGEsIHdlYkdMRGF0YSlcbntcbiAgICAvLyBuZWVkIHRvIGNvbnZlcnQgcG9pbnRzIHRvIGEgbmljZSByZWd1bGFyIGRhdGFcbiAgICB2YXIgY2lyY2xlRGF0YSA9IGdyYXBoaWNzRGF0YS5zaGFwZTtcbiAgICB2YXIgeCA9IGNpcmNsZURhdGEueDtcbiAgICB2YXIgeSA9IGNpcmNsZURhdGEueTtcbiAgICB2YXIgd2lkdGg7XG4gICAgdmFyIGhlaWdodDtcblxuICAgIC8vIFRPRE8gLSBiaXQgaGFja3k/P1xuICAgIGlmIChncmFwaGljc0RhdGEudHlwZSA9PT0gQ09OU1QuU0hBUEVTLkNJUkMpXG4gICAge1xuICAgICAgICB3aWR0aCA9IGNpcmNsZURhdGEucmFkaXVzO1xuICAgICAgICBoZWlnaHQgPSBjaXJjbGVEYXRhLnJhZGl1cztcbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgd2lkdGggPSBjaXJjbGVEYXRhLndpZHRoO1xuICAgICAgICBoZWlnaHQgPSBjaXJjbGVEYXRhLmhlaWdodDtcbiAgICB9XG5cbiAgICB2YXIgdG90YWxTZWdzID0gTWF0aC5mbG9vcigzMCAqIE1hdGguc3FydChjaXJjbGVEYXRhLnJhZGl1cykpIHx8IE1hdGguZmxvb3IoMTUgKiBNYXRoLnNxcnQoY2lyY2xlRGF0YS53aWR0aCArIGNpcmNsZURhdGEuaGVpZ2h0KSk7XG4gICAgdmFyIHNlZyA9IChNYXRoLlBJICogMikgLyB0b3RhbFNlZ3MgO1xuXG4gICAgdmFyIGkgPSAwO1xuXG4gICAgaWYgKGdyYXBoaWNzRGF0YS5maWxsKVxuICAgIHtcbiAgICAgICAgdmFyIGNvbG9yID0gdXRpbHMuaGV4MnJnYihncmFwaGljc0RhdGEuZmlsbENvbG9yKTtcbiAgICAgICAgdmFyIGFscGhhID0gZ3JhcGhpY3NEYXRhLmZpbGxBbHBoYTtcblxuICAgICAgICB2YXIgciA9IGNvbG9yWzBdICogYWxwaGE7XG4gICAgICAgIHZhciBnID0gY29sb3JbMV0gKiBhbHBoYTtcbiAgICAgICAgdmFyIGIgPSBjb2xvclsyXSAqIGFscGhhO1xuXG4gICAgICAgIHZhciB2ZXJ0cyA9IHdlYkdMRGF0YS5wb2ludHM7XG4gICAgICAgIHZhciBpbmRpY2VzID0gd2ViR0xEYXRhLmluZGljZXM7XG5cbiAgICAgICAgdmFyIHZlY1BvcyA9IHZlcnRzLmxlbmd0aC82O1xuXG4gICAgICAgIGluZGljZXMucHVzaCh2ZWNQb3MpO1xuXG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCB0b3RhbFNlZ3MgKyAxIDsgaSsrKVxuICAgICAgICB7XG4gICAgICAgICAgICB2ZXJ0cy5wdXNoKHgseSwgciwgZywgYiwgYWxwaGEpO1xuXG4gICAgICAgICAgICB2ZXJ0cy5wdXNoKHggKyBNYXRoLnNpbihzZWcgKiBpKSAqIHdpZHRoLFxuICAgICAgICAgICAgICAgICAgICAgICB5ICsgTWF0aC5jb3Moc2VnICogaSkgKiBoZWlnaHQsXG4gICAgICAgICAgICAgICAgICAgICAgIHIsIGcsIGIsIGFscGhhKTtcblxuICAgICAgICAgICAgaW5kaWNlcy5wdXNoKHZlY1BvcysrLCB2ZWNQb3MrKyk7XG4gICAgICAgIH1cblxuICAgICAgICBpbmRpY2VzLnB1c2godmVjUG9zLTEpO1xuICAgIH1cblxuICAgIGlmIChncmFwaGljc0RhdGEubGluZVdpZHRoKVxuICAgIHtcbiAgICAgICAgdmFyIHRlbXBQb2ludHMgPSBncmFwaGljc0RhdGEucG9pbnRzO1xuXG4gICAgICAgIGdyYXBoaWNzRGF0YS5wb2ludHMgPSBbXTtcblxuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgdG90YWxTZWdzICsgMTsgaSsrKVxuICAgICAgICB7XG4gICAgICAgICAgICBncmFwaGljc0RhdGEucG9pbnRzLnB1c2goeCArIE1hdGguc2luKHNlZyAqIGkpICogd2lkdGgsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeSArIE1hdGguY29zKHNlZyAqIGkpICogaGVpZ2h0KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGJ1aWxkTGluZShncmFwaGljc0RhdGEsIHdlYkdMRGF0YSk7XG5cbiAgICAgICAgZ3JhcGhpY3NEYXRhLnBvaW50cyA9IHRlbXBQb2ludHM7XG4gICAgfVxufTtcblxuXG5tb2R1bGUuZXhwb3J0cyA9IGJ1aWxkQ2lyY2xlOyIsInZhciBidWlsZExpbmUgPSByZXF1aXJlKCcuL2J1aWxkTGluZScpLFxuICAgIHV0aWxzID0gcmVxdWlyZSgnLi4vLi4vLi4vdXRpbHMnKTtcbiAgICBcblxuXG4vKipcbiAqIEJ1aWxkcyBhIGNvbXBsZXggcG9seWdvbiB0byBkcmF3XG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSBncmFwaGljc0RhdGEge1BJWEkuR3JhcGhpY3N9IFRoZSBncmFwaGljcyBvYmplY3QgY29udGFpbmluZyBhbGwgdGhlIG5lY2Vzc2FyeSBwcm9wZXJ0aWVzXG4gKiBAcGFyYW0gd2ViR0xEYXRhIHtvYmplY3R9IGFuIG9iamVjdCBjb250YWluaW5nIGFsbCB0aGUgd2ViR0wtc3BlY2lmaWMgaW5mb3JtYXRpb24gdG8gY3JlYXRlIHRoaXMgc2hhcGVcbiAqL1xudmFyIGJ1aWxkQ29tcGxleFBvbHkgPSBmdW5jdGlvbiAoZ3JhcGhpY3NEYXRhLCB3ZWJHTERhdGEpXG57XG4gICAgLy9UT0RPIC0gbm8gbmVlZCB0byBjb3B5IHRoaXMgYXMgaXQgZ2V0cyB0dXJuZWQgaW50byBhIEZMb2F0MzJBcnJheSBhbnl3YXlzLi5cbiAgICB2YXIgcG9pbnRzID0gZ3JhcGhpY3NEYXRhLnBvaW50cy5zbGljZSgpO1xuXG4gICAgaWYgKHBvaW50cy5sZW5ndGggPCA2KVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIGdldCBmaXJzdCBhbmQgbGFzdCBwb2ludC4uIGZpZ3VyZSBvdXQgdGhlIG1pZGRsZSFcbiAgICB2YXIgaW5kaWNlcyA9IHdlYkdMRGF0YS5pbmRpY2VzO1xuICAgIHdlYkdMRGF0YS5wb2ludHMgPSBwb2ludHM7XG4gICAgd2ViR0xEYXRhLmFscGhhID0gZ3JhcGhpY3NEYXRhLmZpbGxBbHBoYTtcbiAgICB3ZWJHTERhdGEuY29sb3IgPSB1dGlscy5oZXgycmdiKGdyYXBoaWNzRGF0YS5maWxsQ29sb3IpO1xuXG4gICAgLy8gY2FsY2xhdGUgdGhlIGJvdW5kcy4uXG4gICAgdmFyIG1pblggPSBJbmZpbml0eTtcbiAgICB2YXIgbWF4WCA9IC1JbmZpbml0eTtcblxuICAgIHZhciBtaW5ZID0gSW5maW5pdHk7XG4gICAgdmFyIG1heFkgPSAtSW5maW5pdHk7XG5cbiAgICB2YXIgeCx5O1xuXG4gICAgLy8gZ2V0IHNpemUuLlxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcG9pbnRzLmxlbmd0aDsgaSs9MilcbiAgICB7XG4gICAgICAgIHggPSBwb2ludHNbaV07XG4gICAgICAgIHkgPSBwb2ludHNbaSsxXTtcblxuICAgICAgICBtaW5YID0geCA8IG1pblggPyB4IDogbWluWDtcbiAgICAgICAgbWF4WCA9IHggPiBtYXhYID8geCA6IG1heFg7XG5cbiAgICAgICAgbWluWSA9IHkgPCBtaW5ZID8geSA6IG1pblk7XG4gICAgICAgIG1heFkgPSB5ID4gbWF4WSA/IHkgOiBtYXhZO1xuICAgIH1cblxuICAgIC8vIGFkZCBhIHF1YWQgdG8gdGhlIGVuZCBjb3MgdGhlcmUgaXMgbm8gcG9pbnQgbWFraW5nIGFub3RoZXIgYnVmZmVyIVxuICAgIHBvaW50cy5wdXNoKG1pblgsIG1pblksXG4gICAgICAgICAgICAgICAgbWF4WCwgbWluWSxcbiAgICAgICAgICAgICAgICBtYXhYLCBtYXhZLFxuICAgICAgICAgICAgICAgIG1pblgsIG1heFkpO1xuXG4gICAgLy8gcHVzaCBhIHF1YWQgb250byB0aGUgZW5kLi5cblxuICAgIC8vVE9ETyAtIHRoaXMgYWludCBuZWVkZWQhXG4gICAgdmFyIGxlbmd0aCA9IHBvaW50cy5sZW5ndGggLyAyO1xuICAgIGZvciAoaSA9IDA7IGkgPCBsZW5ndGg7IGkrKylcbiAgICB7XG4gICAgICAgIGluZGljZXMucHVzaCggaSApO1xuICAgIH1cblxufTtcblxuXG5cbm1vZHVsZS5leHBvcnRzID0gYnVpbGRDb21wbGV4UG9seTsiLCJ2YXIgbWF0aCA9IHJlcXVpcmUoJy4uLy4uLy4uL21hdGgnKSxcbiAgICB1dGlscyA9IHJlcXVpcmUoJy4uLy4uLy4uL3V0aWxzJyk7XG5cbi8qKlxuICogQnVpbGRzIGEgbGluZSB0byBkcmF3XG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSBncmFwaGljc0RhdGEge1BJWEkuR3JhcGhpY3N9IFRoZSBncmFwaGljcyBvYmplY3QgY29udGFpbmluZyBhbGwgdGhlIG5lY2Vzc2FyeSBwcm9wZXJ0aWVzXG4gKiBAcGFyYW0gd2ViR0xEYXRhIHtvYmplY3R9IGFuIG9iamVjdCBjb250YWluaW5nIGFsbCB0aGUgd2ViR0wtc3BlY2lmaWMgaW5mb3JtYXRpb24gdG8gY3JlYXRlIHRoaXMgc2hhcGVcbiAqL1xudmFyIGJ1aWxkTGluZSA9IGZ1bmN0aW9uIChncmFwaGljc0RhdGEsIHdlYkdMRGF0YSlcbntcbiAgICAvLyBUT0RPIE9QVElNSVNFIVxuICAgIHZhciBpID0gMDtcbiAgICB2YXIgcG9pbnRzID0gZ3JhcGhpY3NEYXRhLnBvaW50cztcblxuICAgIGlmIChwb2ludHMubGVuZ3RoID09PSAwKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICAvLyBpZiB0aGUgbGluZSB3aWR0aCBpcyBhbiBvZGQgbnVtYmVyIGFkZCAwLjUgdG8gYWxpZ24gdG8gYSB3aG9sZSBwaXhlbFxuICAgIC8vIGNvbW1lbnRpbmcgdGhpcyBvdXQgZml4ZXMgIzcxMSBhbmQgIzE2MjBcbiAgICAvLyBpZiAoZ3JhcGhpY3NEYXRhLmxpbmVXaWR0aCUyKVxuICAgIC8vIHtcbiAgICAvLyAgICAgZm9yIChpID0gMDsgaSA8IHBvaW50cy5sZW5ndGg7IGkrKylcbiAgICAvLyAgICAge1xuICAgIC8vICAgICAgICAgcG9pbnRzW2ldICs9IDAuNTtcbiAgICAvLyAgICAgfVxuICAgIC8vIH1cblxuICAgIC8vIGdldCBmaXJzdCBhbmQgbGFzdCBwb2ludC4uIGZpZ3VyZSBvdXQgdGhlIG1pZGRsZSFcbiAgICB2YXIgZmlyc3RQb2ludCA9IG5ldyBtYXRoLlBvaW50KHBvaW50c1swXSwgcG9pbnRzWzFdKTtcbiAgICB2YXIgbGFzdFBvaW50ID0gbmV3IG1hdGguUG9pbnQocG9pbnRzW3BvaW50cy5sZW5ndGggLSAyXSwgcG9pbnRzW3BvaW50cy5sZW5ndGggLSAxXSk7XG5cbiAgICAvLyBpZiB0aGUgZmlyc3QgcG9pbnQgaXMgdGhlIGxhc3QgcG9pbnQgLSBnb25uYSBoYXZlIGlzc3VlcyA6KVxuICAgIGlmIChmaXJzdFBvaW50LnggPT09IGxhc3RQb2ludC54ICYmIGZpcnN0UG9pbnQueSA9PT0gbGFzdFBvaW50LnkpXG4gICAge1xuICAgICAgICAvLyBuZWVkIHRvIGNsb25lIGFzIHdlIGFyZSBnb2luZyB0byBzbGlnaHRseSBtb2RpZnkgdGhlIHNoYXBlLi5cbiAgICAgICAgcG9pbnRzID0gcG9pbnRzLnNsaWNlKCk7XG5cbiAgICAgICAgcG9pbnRzLnBvcCgpO1xuICAgICAgICBwb2ludHMucG9wKCk7XG5cbiAgICAgICAgbGFzdFBvaW50ID0gbmV3IG1hdGguUG9pbnQocG9pbnRzW3BvaW50cy5sZW5ndGggLSAyXSwgcG9pbnRzW3BvaW50cy5sZW5ndGggLSAxXSk7XG5cbiAgICAgICAgdmFyIG1pZFBvaW50WCA9IGxhc3RQb2ludC54ICsgKGZpcnN0UG9pbnQueCAtIGxhc3RQb2ludC54KSAqMC41O1xuICAgICAgICB2YXIgbWlkUG9pbnRZID0gbGFzdFBvaW50LnkgKyAoZmlyc3RQb2ludC55IC0gbGFzdFBvaW50LnkpICowLjU7XG5cbiAgICAgICAgcG9pbnRzLnVuc2hpZnQobWlkUG9pbnRYLCBtaWRQb2ludFkpO1xuICAgICAgICBwb2ludHMucHVzaChtaWRQb2ludFgsIG1pZFBvaW50WSk7XG4gICAgfVxuXG4gICAgdmFyIHZlcnRzID0gd2ViR0xEYXRhLnBvaW50cztcbiAgICB2YXIgaW5kaWNlcyA9IHdlYkdMRGF0YS5pbmRpY2VzO1xuICAgIHZhciBsZW5ndGggPSBwb2ludHMubGVuZ3RoIC8gMjtcbiAgICB2YXIgaW5kZXhDb3VudCA9IHBvaW50cy5sZW5ndGg7XG4gICAgdmFyIGluZGV4U3RhcnQgPSB2ZXJ0cy5sZW5ndGgvNjtcblxuICAgIC8vIERSQVcgdGhlIExpbmVcbiAgICB2YXIgd2lkdGggPSBncmFwaGljc0RhdGEubGluZVdpZHRoIC8gMjtcblxuICAgIC8vIHNvcnQgY29sb3JcbiAgICB2YXIgY29sb3IgPSB1dGlscy5oZXgycmdiKGdyYXBoaWNzRGF0YS5saW5lQ29sb3IpO1xuICAgIHZhciBhbHBoYSA9IGdyYXBoaWNzRGF0YS5saW5lQWxwaGE7XG4gICAgdmFyIHIgPSBjb2xvclswXSAqIGFscGhhO1xuICAgIHZhciBnID0gY29sb3JbMV0gKiBhbHBoYTtcbiAgICB2YXIgYiA9IGNvbG9yWzJdICogYWxwaGE7XG5cbiAgICB2YXIgcHgsIHB5LCBwMXgsIHAxeSwgcDJ4LCBwMnksIHAzeCwgcDN5O1xuICAgIHZhciBwZXJweCwgcGVycHksIHBlcnAyeCwgcGVycDJ5LCBwZXJwM3gsIHBlcnAzeTtcbiAgICB2YXIgYTEsIGIxLCBjMSwgYTIsIGIyLCBjMjtcbiAgICB2YXIgZGVub20sIHBkaXN0LCBkaXN0O1xuXG4gICAgcDF4ID0gcG9pbnRzWzBdO1xuICAgIHAxeSA9IHBvaW50c1sxXTtcblxuICAgIHAyeCA9IHBvaW50c1syXTtcbiAgICBwMnkgPSBwb2ludHNbM107XG5cbiAgICBwZXJweCA9IC0ocDF5IC0gcDJ5KTtcbiAgICBwZXJweSA9ICBwMXggLSBwMng7XG5cbiAgICBkaXN0ID0gTWF0aC5zcXJ0KHBlcnB4KnBlcnB4ICsgcGVycHkqcGVycHkpO1xuXG4gICAgcGVycHggLz0gZGlzdDtcbiAgICBwZXJweSAvPSBkaXN0O1xuICAgIHBlcnB4ICo9IHdpZHRoO1xuICAgIHBlcnB5ICo9IHdpZHRoO1xuXG4gICAgLy8gc3RhcnRcbiAgICB2ZXJ0cy5wdXNoKHAxeCAtIHBlcnB4ICwgcDF5IC0gcGVycHksXG4gICAgICAgICAgICAgICAgciwgZywgYiwgYWxwaGEpO1xuXG4gICAgdmVydHMucHVzaChwMXggKyBwZXJweCAsIHAxeSArIHBlcnB5LFxuICAgICAgICAgICAgICAgIHIsIGcsIGIsIGFscGhhKTtcblxuICAgIGZvciAoaSA9IDE7IGkgPCBsZW5ndGgtMTsgaSsrKVxuICAgIHtcbiAgICAgICAgcDF4ID0gcG9pbnRzWyhpLTEpKjJdO1xuICAgICAgICBwMXkgPSBwb2ludHNbKGktMSkqMiArIDFdO1xuXG4gICAgICAgIHAyeCA9IHBvaW50c1soaSkqMl07XG4gICAgICAgIHAyeSA9IHBvaW50c1soaSkqMiArIDFdO1xuXG4gICAgICAgIHAzeCA9IHBvaW50c1soaSsxKSoyXTtcbiAgICAgICAgcDN5ID0gcG9pbnRzWyhpKzEpKjIgKyAxXTtcblxuICAgICAgICBwZXJweCA9IC0ocDF5IC0gcDJ5KTtcbiAgICAgICAgcGVycHkgPSBwMXggLSBwMng7XG5cbiAgICAgICAgZGlzdCA9IE1hdGguc3FydChwZXJweCpwZXJweCArIHBlcnB5KnBlcnB5KTtcbiAgICAgICAgcGVycHggLz0gZGlzdDtcbiAgICAgICAgcGVycHkgLz0gZGlzdDtcbiAgICAgICAgcGVycHggKj0gd2lkdGg7XG4gICAgICAgIHBlcnB5ICo9IHdpZHRoO1xuXG4gICAgICAgIHBlcnAyeCA9IC0ocDJ5IC0gcDN5KTtcbiAgICAgICAgcGVycDJ5ID0gcDJ4IC0gcDN4O1xuXG4gICAgICAgIGRpc3QgPSBNYXRoLnNxcnQocGVycDJ4KnBlcnAyeCArIHBlcnAyeSpwZXJwMnkpO1xuICAgICAgICBwZXJwMnggLz0gZGlzdDtcbiAgICAgICAgcGVycDJ5IC89IGRpc3Q7XG4gICAgICAgIHBlcnAyeCAqPSB3aWR0aDtcbiAgICAgICAgcGVycDJ5ICo9IHdpZHRoO1xuXG4gICAgICAgIGExID0gKC1wZXJweSArIHAxeSkgLSAoLXBlcnB5ICsgcDJ5KTtcbiAgICAgICAgYjEgPSAoLXBlcnB4ICsgcDJ4KSAtICgtcGVycHggKyBwMXgpO1xuICAgICAgICBjMSA9ICgtcGVycHggKyBwMXgpICogKC1wZXJweSArIHAyeSkgLSAoLXBlcnB4ICsgcDJ4KSAqICgtcGVycHkgKyBwMXkpO1xuICAgICAgICBhMiA9ICgtcGVycDJ5ICsgcDN5KSAtICgtcGVycDJ5ICsgcDJ5KTtcbiAgICAgICAgYjIgPSAoLXBlcnAyeCArIHAyeCkgLSAoLXBlcnAyeCArIHAzeCk7XG4gICAgICAgIGMyID0gKC1wZXJwMnggKyBwM3gpICogKC1wZXJwMnkgKyBwMnkpIC0gKC1wZXJwMnggKyBwMngpICogKC1wZXJwMnkgKyBwM3kpO1xuXG4gICAgICAgIGRlbm9tID0gYTEqYjIgLSBhMipiMTtcblxuICAgICAgICBpZiAoTWF0aC5hYnMoZGVub20pIDwgMC4xIClcbiAgICAgICAge1xuXG4gICAgICAgICAgICBkZW5vbSs9MTAuMTtcbiAgICAgICAgICAgIHZlcnRzLnB1c2gocDJ4IC0gcGVycHggLCBwMnkgLSBwZXJweSxcbiAgICAgICAgICAgICAgICByLCBnLCBiLCBhbHBoYSk7XG5cbiAgICAgICAgICAgIHZlcnRzLnB1c2gocDJ4ICsgcGVycHggLCBwMnkgKyBwZXJweSxcbiAgICAgICAgICAgICAgICByLCBnLCBiLCBhbHBoYSk7XG5cbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgcHggPSAoYjEqYzIgLSBiMipjMSkvZGVub207XG4gICAgICAgIHB5ID0gKGEyKmMxIC0gYTEqYzIpL2Rlbm9tO1xuXG5cbiAgICAgICAgcGRpc3QgPSAocHggLXAyeCkgKiAocHggLXAyeCkgKyAocHkgLXAyeSkgKiAocHkgLXAyeSk7XG5cblxuICAgICAgICBpZiAocGRpc3QgPiAxNDAgKiAxNDApXG4gICAgICAgIHtcbiAgICAgICAgICAgIHBlcnAzeCA9IHBlcnB4IC0gcGVycDJ4O1xuICAgICAgICAgICAgcGVycDN5ID0gcGVycHkgLSBwZXJwMnk7XG5cbiAgICAgICAgICAgIGRpc3QgPSBNYXRoLnNxcnQocGVycDN4KnBlcnAzeCArIHBlcnAzeSpwZXJwM3kpO1xuICAgICAgICAgICAgcGVycDN4IC89IGRpc3Q7XG4gICAgICAgICAgICBwZXJwM3kgLz0gZGlzdDtcbiAgICAgICAgICAgIHBlcnAzeCAqPSB3aWR0aDtcbiAgICAgICAgICAgIHBlcnAzeSAqPSB3aWR0aDtcblxuICAgICAgICAgICAgdmVydHMucHVzaChwMnggLSBwZXJwM3gsIHAyeSAtcGVycDN5KTtcbiAgICAgICAgICAgIHZlcnRzLnB1c2gociwgZywgYiwgYWxwaGEpO1xuXG4gICAgICAgICAgICB2ZXJ0cy5wdXNoKHAyeCArIHBlcnAzeCwgcDJ5ICtwZXJwM3kpO1xuICAgICAgICAgICAgdmVydHMucHVzaChyLCBnLCBiLCBhbHBoYSk7XG5cbiAgICAgICAgICAgIHZlcnRzLnB1c2gocDJ4IC0gcGVycDN4LCBwMnkgLXBlcnAzeSk7XG4gICAgICAgICAgICB2ZXJ0cy5wdXNoKHIsIGcsIGIsIGFscGhhKTtcblxuICAgICAgICAgICAgaW5kZXhDb3VudCsrO1xuICAgICAgICB9XG4gICAgICAgIGVsc2VcbiAgICAgICAge1xuXG4gICAgICAgICAgICB2ZXJ0cy5wdXNoKHB4ICwgcHkpO1xuICAgICAgICAgICAgdmVydHMucHVzaChyLCBnLCBiLCBhbHBoYSk7XG5cbiAgICAgICAgICAgIHZlcnRzLnB1c2gocDJ4IC0gKHB4LXAyeCksIHAyeSAtIChweSAtIHAyeSkpO1xuICAgICAgICAgICAgdmVydHMucHVzaChyLCBnLCBiLCBhbHBoYSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwMXggPSBwb2ludHNbKGxlbmd0aC0yKSoyXTtcbiAgICBwMXkgPSBwb2ludHNbKGxlbmd0aC0yKSoyICsgMV07XG5cbiAgICBwMnggPSBwb2ludHNbKGxlbmd0aC0xKSoyXTtcbiAgICBwMnkgPSBwb2ludHNbKGxlbmd0aC0xKSoyICsgMV07XG5cbiAgICBwZXJweCA9IC0ocDF5IC0gcDJ5KTtcbiAgICBwZXJweSA9IHAxeCAtIHAyeDtcblxuICAgIGRpc3QgPSBNYXRoLnNxcnQocGVycHgqcGVycHggKyBwZXJweSpwZXJweSk7XG4gICAgcGVycHggLz0gZGlzdDtcbiAgICBwZXJweSAvPSBkaXN0O1xuICAgIHBlcnB4ICo9IHdpZHRoO1xuICAgIHBlcnB5ICo9IHdpZHRoO1xuXG4gICAgdmVydHMucHVzaChwMnggLSBwZXJweCAsIHAyeSAtIHBlcnB5KTtcbiAgICB2ZXJ0cy5wdXNoKHIsIGcsIGIsIGFscGhhKTtcblxuICAgIHZlcnRzLnB1c2gocDJ4ICsgcGVycHggLCBwMnkgKyBwZXJweSk7XG4gICAgdmVydHMucHVzaChyLCBnLCBiLCBhbHBoYSk7XG5cbiAgICBpbmRpY2VzLnB1c2goaW5kZXhTdGFydCk7XG5cbiAgICBmb3IgKGkgPSAwOyBpIDwgaW5kZXhDb3VudDsgaSsrKVxuICAgIHtcbiAgICAgICAgaW5kaWNlcy5wdXNoKGluZGV4U3RhcnQrKyk7XG4gICAgfVxuXG4gICAgaW5kaWNlcy5wdXNoKGluZGV4U3RhcnQtMSk7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGJ1aWxkTGluZTsiLCJ2YXIgdXRpbHMgPSByZXF1aXJlKCcuLi8uLi8uLi91dGlscycpO1xuXG4vKipcbiAqIEJ1aWxkcyBhIHBvbHlnb24gdG8gZHJhd1xuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0gZ3JhcGhpY3NEYXRhIHtQSVhJLldlYkdMR3JhcGhpY3NEYXRhfSBUaGUgZ3JhcGhpY3Mgb2JqZWN0IGNvbnRhaW5pbmcgYWxsIHRoZSBuZWNlc3NhcnkgcHJvcGVydGllc1xuICogQHBhcmFtIHdlYkdMRGF0YSB7b2JqZWN0fSBhbiBvYmplY3QgY29udGFpbmluZyBhbGwgdGhlIHdlYkdMLXNwZWNpZmljIGluZm9ybWF0aW9uIHRvIGNyZWF0ZSB0aGlzIHNoYXBlXG4gKi9cbnZhciBidWlsZFBvbHkgPSBmdW5jdGlvbiAoZ3JhcGhpY3NEYXRhLCB3ZWJHTERhdGEpXG57XG4gICAgdmFyIHBvaW50cyA9IGdyYXBoaWNzRGF0YS5wb2ludHM7XG5cbiAgICBpZiAocG9pbnRzLmxlbmd0aCA8IDYpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gZ2V0IGZpcnN0IGFuZCBsYXN0IHBvaW50Li4gZmlndXJlIG91dCB0aGUgbWlkZGxlIVxuICAgIHZhciB2ZXJ0cyA9IHdlYkdMRGF0YS5wb2ludHM7XG4gICAgdmFyIGluZGljZXMgPSB3ZWJHTERhdGEuaW5kaWNlcztcblxuICAgIHZhciBsZW5ndGggPSBwb2ludHMubGVuZ3RoIC8gMjtcblxuICAgIC8vIHNvcnQgY29sb3JcbiAgICB2YXIgY29sb3IgPSB1dGlscy5oZXgycmdiKGdyYXBoaWNzRGF0YS5maWxsQ29sb3IpO1xuICAgIHZhciBhbHBoYSA9IGdyYXBoaWNzRGF0YS5maWxsQWxwaGE7XG4gICAgdmFyIHIgPSBjb2xvclswXSAqIGFscGhhO1xuICAgIHZhciBnID0gY29sb3JbMV0gKiBhbHBoYTtcbiAgICB2YXIgYiA9IGNvbG9yWzJdICogYWxwaGE7XG5cbiAgICB2YXIgdHJpYW5nbGVzID0gZWFyY3V0KHBvaW50cywgbnVsbCwgMik7XG5cbiAgICBpZiAoIXRyaWFuZ2xlcykge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgdmFyIHZlcnRQb3MgPSB2ZXJ0cy5sZW5ndGggLyA2O1xuXG4gICAgdmFyIGkgPSAwO1xuXG4gICAgZm9yIChpID0gMDsgaSA8IHRyaWFuZ2xlcy5sZW5ndGg7IGkrPTMpXG4gICAge1xuICAgICAgICBpbmRpY2VzLnB1c2godHJpYW5nbGVzW2ldICsgdmVydFBvcyk7XG4gICAgICAgIGluZGljZXMucHVzaCh0cmlhbmdsZXNbaV0gKyB2ZXJ0UG9zKTtcbiAgICAgICAgaW5kaWNlcy5wdXNoKHRyaWFuZ2xlc1tpKzFdICsgdmVydFBvcyk7XG4gICAgICAgIGluZGljZXMucHVzaCh0cmlhbmdsZXNbaSsyXSArdmVydFBvcyk7XG4gICAgICAgIGluZGljZXMucHVzaCh0cmlhbmdsZXNbaSsyXSArIHZlcnRQb3MpO1xuICAgIH1cblxuICAgIGZvciAoaSA9IDA7IGkgPCBsZW5ndGg7IGkrKylcbiAgICB7XG4gICAgICAgIHZlcnRzLnB1c2gocG9pbnRzW2kgKiAyXSwgcG9pbnRzW2kgKiAyICsgMV0sXG4gICAgICAgICAgICAgICAgICAgciwgZywgYiwgYWxwaGEpO1xuICAgIH1cblxuICAgIHJldHVybiB0cnVlO1xufTtcblxuXG5tb2R1bGUuZXhwb3J0cyA9IGJ1aWxkUG9seTtcbiIsInZhciBidWlsZExpbmUgPSByZXF1aXJlKCcuL2J1aWxkTGluZScpLFxuICAgIHV0aWxzID0gcmVxdWlyZSgnLi4vLi4vLi4vdXRpbHMnKTtcblxuLyoqXG4gKiBCdWlsZHMgYSByZWN0YW5nbGUgdG8gZHJhd1xuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0gZ3JhcGhpY3NEYXRhIHtQSVhJLkdyYXBoaWNzfSBUaGUgZ3JhcGhpY3Mgb2JqZWN0IGNvbnRhaW5pbmcgYWxsIHRoZSBuZWNlc3NhcnkgcHJvcGVydGllc1xuICogQHBhcmFtIHdlYkdMRGF0YSB7b2JqZWN0fSBhbiBvYmplY3QgY29udGFpbmluZyBhbGwgdGhlIHdlYkdMLXNwZWNpZmljIGluZm9ybWF0aW9uIHRvIGNyZWF0ZSB0aGlzIHNoYXBlXG4gKi9cbnZhciBidWlsZFJlY3RhbmdsZSA9IGZ1bmN0aW9uIChncmFwaGljc0RhdGEsIHdlYkdMRGF0YSlcbntcbiAgICAvLyAtLS0gLy9cbiAgICAvLyBuZWVkIHRvIGNvbnZlcnQgcG9pbnRzIHRvIGEgbmljZSByZWd1bGFyIGRhdGFcbiAgICAvL1xuICAgIHZhciByZWN0RGF0YSA9IGdyYXBoaWNzRGF0YS5zaGFwZTtcbiAgICB2YXIgeCA9IHJlY3REYXRhLng7XG4gICAgdmFyIHkgPSByZWN0RGF0YS55O1xuICAgIHZhciB3aWR0aCA9IHJlY3REYXRhLndpZHRoO1xuICAgIHZhciBoZWlnaHQgPSByZWN0RGF0YS5oZWlnaHQ7XG5cbiAgICBpZiAoZ3JhcGhpY3NEYXRhLmZpbGwpXG4gICAge1xuICAgICAgICB2YXIgY29sb3IgPSB1dGlscy5oZXgycmdiKGdyYXBoaWNzRGF0YS5maWxsQ29sb3IpO1xuICAgICAgICB2YXIgYWxwaGEgPSBncmFwaGljc0RhdGEuZmlsbEFscGhhO1xuXG4gICAgICAgIHZhciByID0gY29sb3JbMF0gKiBhbHBoYTtcbiAgICAgICAgdmFyIGcgPSBjb2xvclsxXSAqIGFscGhhO1xuICAgICAgICB2YXIgYiA9IGNvbG9yWzJdICogYWxwaGE7XG5cbiAgICAgICAgdmFyIHZlcnRzID0gd2ViR0xEYXRhLnBvaW50cztcbiAgICAgICAgdmFyIGluZGljZXMgPSB3ZWJHTERhdGEuaW5kaWNlcztcblxuICAgICAgICB2YXIgdmVydFBvcyA9IHZlcnRzLmxlbmd0aC82O1xuXG4gICAgICAgIC8vIHN0YXJ0XG4gICAgICAgIHZlcnRzLnB1c2goeCwgeSk7XG4gICAgICAgIHZlcnRzLnB1c2gociwgZywgYiwgYWxwaGEpO1xuXG4gICAgICAgIHZlcnRzLnB1c2goeCArIHdpZHRoLCB5KTtcbiAgICAgICAgdmVydHMucHVzaChyLCBnLCBiLCBhbHBoYSk7XG5cbiAgICAgICAgdmVydHMucHVzaCh4ICwgeSArIGhlaWdodCk7XG4gICAgICAgIHZlcnRzLnB1c2gociwgZywgYiwgYWxwaGEpO1xuXG4gICAgICAgIHZlcnRzLnB1c2goeCArIHdpZHRoLCB5ICsgaGVpZ2h0KTtcbiAgICAgICAgdmVydHMucHVzaChyLCBnLCBiLCBhbHBoYSk7XG5cbiAgICAgICAgLy8gaW5zZXJ0IDIgZGVhZCB0cmlhbmdsZXMuLlxuICAgICAgICBpbmRpY2VzLnB1c2godmVydFBvcywgdmVydFBvcywgdmVydFBvcysxLCB2ZXJ0UG9zKzIsIHZlcnRQb3MrMywgdmVydFBvcyszKTtcbiAgICB9XG5cbiAgICBpZiAoZ3JhcGhpY3NEYXRhLmxpbmVXaWR0aClcbiAgICB7XG4gICAgICAgIHZhciB0ZW1wUG9pbnRzID0gZ3JhcGhpY3NEYXRhLnBvaW50cztcblxuICAgICAgICBncmFwaGljc0RhdGEucG9pbnRzID0gW3gsIHksXG4gICAgICAgICAgICAgICAgICB4ICsgd2lkdGgsIHksXG4gICAgICAgICAgICAgICAgICB4ICsgd2lkdGgsIHkgKyBoZWlnaHQsXG4gICAgICAgICAgICAgICAgICB4LCB5ICsgaGVpZ2h0LFxuICAgICAgICAgICAgICAgICAgeCwgeV07XG5cblxuICAgICAgICBidWlsZExpbmUoZ3JhcGhpY3NEYXRhLCB3ZWJHTERhdGEpO1xuXG4gICAgICAgIGdyYXBoaWNzRGF0YS5wb2ludHMgPSB0ZW1wUG9pbnRzO1xuICAgIH1cbn07XG5cbm1vZHVsZS5leHBvcnRzID0gYnVpbGRSZWN0YW5nbGU7IiwidmFyIGJ1aWxkTGluZSA9IHJlcXVpcmUoJy4vYnVpbGRMaW5lJyksXG4gICAgdXRpbHMgPSByZXF1aXJlKCcuLi8uLi8uLi91dGlscycpO1xuICAgIFxuLyoqXG4gKiBCdWlsZHMgYSByb3VuZGVkIHJlY3RhbmdsZSB0byBkcmF3XG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSBncmFwaGljc0RhdGEge1BJWEkuR3JhcGhpY3N9IFRoZSBncmFwaGljcyBvYmplY3QgY29udGFpbmluZyBhbGwgdGhlIG5lY2Vzc2FyeSBwcm9wZXJ0aWVzXG4gKiBAcGFyYW0gd2ViR0xEYXRhIHtvYmplY3R9IGFuIG9iamVjdCBjb250YWluaW5nIGFsbCB0aGUgd2ViR0wtc3BlY2lmaWMgaW5mb3JtYXRpb24gdG8gY3JlYXRlIHRoaXMgc2hhcGVcbiAqL1xuYnVpbGRSb3VuZGVkUmVjdGFuZ2xlID0gZnVuY3Rpb24gKGdyYXBoaWNzRGF0YSwgd2ViR0xEYXRhKVxue1xuICAgIHZhciBycmVjdERhdGEgPSBncmFwaGljc0RhdGEuc2hhcGU7XG4gICAgdmFyIHggPSBycmVjdERhdGEueDtcbiAgICB2YXIgeSA9IHJyZWN0RGF0YS55O1xuICAgIHZhciB3aWR0aCA9IHJyZWN0RGF0YS53aWR0aDtcbiAgICB2YXIgaGVpZ2h0ID0gcnJlY3REYXRhLmhlaWdodDtcblxuICAgIHZhciByYWRpdXMgPSBycmVjdERhdGEucmFkaXVzO1xuXG4gICAgdmFyIHJlY1BvaW50cyA9IFtdO1xuICAgIHJlY1BvaW50cy5wdXNoKHgsIHkgKyByYWRpdXMpO1xuICAgIHRoaXMucXVhZHJhdGljQmV6aWVyQ3VydmUoeCwgeSArIGhlaWdodCAtIHJhZGl1cywgeCwgeSArIGhlaWdodCwgeCArIHJhZGl1cywgeSArIGhlaWdodCwgcmVjUG9pbnRzKTtcbiAgICB0aGlzLnF1YWRyYXRpY0JlemllckN1cnZlKHggKyB3aWR0aCAtIHJhZGl1cywgeSArIGhlaWdodCwgeCArIHdpZHRoLCB5ICsgaGVpZ2h0LCB4ICsgd2lkdGgsIHkgKyBoZWlnaHQgLSByYWRpdXMsIHJlY1BvaW50cyk7XG4gICAgdGhpcy5xdWFkcmF0aWNCZXppZXJDdXJ2ZSh4ICsgd2lkdGgsIHkgKyByYWRpdXMsIHggKyB3aWR0aCwgeSwgeCArIHdpZHRoIC0gcmFkaXVzLCB5LCByZWNQb2ludHMpO1xuICAgIHRoaXMucXVhZHJhdGljQmV6aWVyQ3VydmUoeCArIHJhZGl1cywgeSwgeCwgeSwgeCwgeSArIHJhZGl1cyArIDAuMDAwMDAwMDAwMSwgcmVjUG9pbnRzKTtcblxuICAgIC8vIHRoaXMgdGlueSBudW1iZXIgZGVhbHMgd2l0aCB0aGUgaXNzdWUgdGhhdCBvY2N1cnMgd2hlbiBwb2ludHMgb3ZlcmxhcCBhbmQgZWFyY3V0IGZhaWxzIHRvIHRyaWFuZ3VsYXRlIHRoZSBpdGVtLlxuICAgIC8vIFRPRE8gLSBmaXggdGhpcyBwcm9wZXJseSwgdGhpcyBpcyBub3QgdmVyeSBlbGVnYW50Li4gYnV0IGl0IHdvcmtzIGZvciBub3cuXG5cbiAgICBpZiAoZ3JhcGhpY3NEYXRhLmZpbGwpXG4gICAge1xuICAgICAgICB2YXIgY29sb3IgPSB1dGlscy5oZXgycmdiKGdyYXBoaWNzRGF0YS5maWxsQ29sb3IpO1xuICAgICAgICB2YXIgYWxwaGEgPSBncmFwaGljc0RhdGEuZmlsbEFscGhhO1xuXG4gICAgICAgIHZhciByID0gY29sb3JbMF0gKiBhbHBoYTtcbiAgICAgICAgdmFyIGcgPSBjb2xvclsxXSAqIGFscGhhO1xuICAgICAgICB2YXIgYiA9IGNvbG9yWzJdICogYWxwaGE7XG5cbiAgICAgICAgdmFyIHZlcnRzID0gd2ViR0xEYXRhLnBvaW50cztcbiAgICAgICAgdmFyIGluZGljZXMgPSB3ZWJHTERhdGEuaW5kaWNlcztcblxuICAgICAgICB2YXIgdmVjUG9zID0gdmVydHMubGVuZ3RoLzY7XG5cbiAgICAgICAgdmFyIHRyaWFuZ2xlcyA9IGVhcmN1dChyZWNQb2ludHMsIG51bGwsIDIpO1xuXG4gICAgICAgIHZhciBpID0gMDtcbiAgICAgICAgZm9yIChpID0gMDsgaSA8IHRyaWFuZ2xlcy5sZW5ndGg7IGkrPTMpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGluZGljZXMucHVzaCh0cmlhbmdsZXNbaV0gKyB2ZWNQb3MpO1xuICAgICAgICAgICAgaW5kaWNlcy5wdXNoKHRyaWFuZ2xlc1tpXSArIHZlY1Bvcyk7XG4gICAgICAgICAgICBpbmRpY2VzLnB1c2godHJpYW5nbGVzW2krMV0gKyB2ZWNQb3MpO1xuICAgICAgICAgICAgaW5kaWNlcy5wdXNoKHRyaWFuZ2xlc1tpKzJdICsgdmVjUG9zKTtcbiAgICAgICAgICAgIGluZGljZXMucHVzaCh0cmlhbmdsZXNbaSsyXSArIHZlY1Bvcyk7XG4gICAgICAgIH1cblxuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgcmVjUG9pbnRzLmxlbmd0aDsgaSsrKVxuICAgICAgICB7XG4gICAgICAgICAgICB2ZXJ0cy5wdXNoKHJlY1BvaW50c1tpXSwgcmVjUG9pbnRzWysraV0sIHIsIGcsIGIsIGFscGhhKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGlmIChncmFwaGljc0RhdGEubGluZVdpZHRoKVxuICAgIHtcbiAgICAgICAgdmFyIHRlbXBQb2ludHMgPSBncmFwaGljc0RhdGEucG9pbnRzO1xuXG4gICAgICAgIGdyYXBoaWNzRGF0YS5wb2ludHMgPSByZWNQb2ludHM7XG5cbiAgICAgICAgdGhpcy5idWlsZExpbmUoZ3JhcGhpY3NEYXRhLCB3ZWJHTERhdGEpO1xuXG4gICAgICAgIGdyYXBoaWNzRGF0YS5wb2ludHMgPSB0ZW1wUG9pbnRzO1xuICAgIH1cbn07XG5cbi8qKlxuICogQ2FsY3VsYXRlIHRoZSBwb2ludHMgZm9yIGEgcXVhZHJhdGljIGJlemllciBjdXJ2ZS4gKGhlbHBlciBmdW5jdGlvbi4uKVxuICogQmFzZWQgb246IGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vcXVlc3Rpb25zLzc4NTA5Ny9ob3ctZG8taS1pbXBsZW1lbnQtYS1iZXppZXItY3VydmUtaW4tY1xuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0gZnJvbVgge251bWJlcn0gT3JpZ2luIHBvaW50IHhcbiAqIEBwYXJhbSBmcm9tWSB7bnVtYmVyfSBPcmlnaW4gcG9pbnQgeFxuICogQHBhcmFtIGNwWCB7bnVtYmVyfSBDb250cm9sIHBvaW50IHhcbiAqIEBwYXJhbSBjcFkge251bWJlcn0gQ29udHJvbCBwb2ludCB5XG4gKiBAcGFyYW0gdG9YIHtudW1iZXJ9IERlc3RpbmF0aW9uIHBvaW50IHhcbiAqIEBwYXJhbSB0b1kge251bWJlcn0gRGVzdGluYXRpb24gcG9pbnQgeVxuICogQHBhcmFtIFtvdXRdIHtudW1iZXJbXX0gVGhlIG91dHB1dCBhcnJheSB0byBhZGQgcG9pbnRzIGludG8uIElmIG5vdCBwYXNzZWQsIGEgbmV3IGFycmF5IGlzIGNyZWF0ZWQuXG4gKiBAcmV0dXJuIHtudW1iZXJbXX0gYW4gYXJyYXkgb2YgcG9pbnRzXG4gKi9cbnF1YWRyYXRpY0JlemllckN1cnZlID0gZnVuY3Rpb24gKGZyb21YLCBmcm9tWSwgY3BYLCBjcFksIHRvWCwgdG9ZLCBvdXQpXG57XG4gICAgdmFyIHhhLFxuICAgICAgICB5YSxcbiAgICAgICAgeGIsXG4gICAgICAgIHliLFxuICAgICAgICB4LFxuICAgICAgICB5LFxuICAgICAgICBuID0gMjAsXG4gICAgICAgIHBvaW50cyA9IG91dCB8fCBbXTtcblxuICAgIGZ1bmN0aW9uIGdldFB0KG4xICwgbjIsIHBlcmMpIHtcbiAgICAgICAgdmFyIGRpZmYgPSBuMiAtIG4xO1xuXG4gICAgICAgIHJldHVybiBuMSArICggZGlmZiAqIHBlcmMgKTtcbiAgICB9XG5cbiAgICB2YXIgaiA9IDA7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPD0gbjsgaSsrICkge1xuICAgICAgICBqID0gaSAvIG47XG5cbiAgICAgICAgLy8gVGhlIEdyZWVuIExpbmVcbiAgICAgICAgeGEgPSBnZXRQdCggZnJvbVggLCBjcFggLCBqICk7XG4gICAgICAgIHlhID0gZ2V0UHQoIGZyb21ZICwgY3BZICwgaiApO1xuICAgICAgICB4YiA9IGdldFB0KCBjcFggLCB0b1ggLCBqICk7XG4gICAgICAgIHliID0gZ2V0UHQoIGNwWSAsIHRvWSAsIGogKTtcblxuICAgICAgICAvLyBUaGUgQmxhY2sgRG90XG4gICAgICAgIHggPSBnZXRQdCggeGEgLCB4YiAsIGogKTtcbiAgICAgICAgeSA9IGdldFB0KCB5YSAsIHliICwgaiApO1xuXG4gICAgICAgIHBvaW50cy5wdXNoKHgsIHkpO1xuICAgIH1cblxuICAgIHJldHVybiBwb2ludHM7XG59O1xuXG5cbm1vZHVsZS5leHBvcnRzID0gYnVpbGRSb3VuZGVkUmVjdGFuZ2xlOyIsIi8qKlxuICogQGZpbGUgICAgICAgIE1haW4gZXhwb3J0IG9mIHRoZSBQSVhJIGNvcmUgbGlicmFyeVxuICogQGF1dGhvciAgICAgIE1hdCBHcm92ZXMgPG1hdEBnb29kYm95ZGlnaXRhbC5jb20+XG4gKiBAY29weXJpZ2h0ICAgMjAxMy0yMDE1IEdvb2RCb3lEaWdpdGFsXG4gKiBAbGljZW5zZSAgICAge0BsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9waXhpanMvcGl4aS5qcy9ibG9iL21hc3Rlci9MSUNFTlNFfE1JVCBMaWNlbnNlfVxuICovXG5cbi8qKlxuICogQG5hbWVzcGFjZSBQSVhJXG4gKi9cbi8vIGV4cG9ydCBjb3JlIGFuZCBjb25zdC4gV2UgYXNzaWduIGNvcmUgdG8gY29uc3Qgc28gdGhhdCB0aGUgbm9uLXJlZmVyZW5jZSB0eXBlcyBpbiBjb25zdCByZW1haW4gaW4tdGFjdFxudmFyIGNvcmUgPSBtb2R1bGUuZXhwb3J0cyA9IE9iamVjdC5hc3NpZ24ocmVxdWlyZSgnLi9jb25zdCcpLCByZXF1aXJlKCcuL21hdGgnKSwge1xuICAgIC8vIHV0aWxzXG4gICAgdXRpbHM6IHJlcXVpcmUoJy4vdXRpbHMnKSxcbiAgICB0aWNrZXI6IHJlcXVpcmUoJy4vdGlja2VyJyksXG5cbiAgICAvLyBkaXNwbGF5XG4gICAgRGlzcGxheU9iamVjdDogICAgICAgICAgcmVxdWlyZSgnLi9kaXNwbGF5L0Rpc3BsYXlPYmplY3QnKSxcbiAgICBDb250YWluZXI6ICAgICAgICAgICAgICByZXF1aXJlKCcuL2Rpc3BsYXkvQ29udGFpbmVyJyksXG5cbiAgICAvLyBzcHJpdGVzXG4gICAgU3ByaXRlOiAgICAgICAgICAgICAgICAgcmVxdWlyZSgnLi9zcHJpdGVzL1Nwcml0ZScpLFxuICAgIFBhcnRpY2xlQ29udGFpbmVyOiAgICAgIHJlcXVpcmUoJy4vcGFydGljbGVzL1BhcnRpY2xlQ29udGFpbmVyJyksXG4gICAgU3ByaXRlUmVuZGVyZXI6ICAgICAgICAgcmVxdWlyZSgnLi9zcHJpdGVzL3dlYmdsL1Nwcml0ZVJlbmRlcmVyJyksXG4gICAgUGFydGljbGVSZW5kZXJlcjogICAgICAgcmVxdWlyZSgnLi9wYXJ0aWNsZXMvd2ViZ2wvUGFydGljbGVSZW5kZXJlcicpLFxuXG4gICAgLy8gdGV4dFxuICAgIFRleHQ6ICAgICAgICAgICAgICAgICAgIHJlcXVpcmUoJy4vdGV4dC9UZXh0JyksXG5cbiAgICAvLyBwcmltaXRpdmVzXG4gICAgR3JhcGhpY3M6ICAgICAgICAgICAgICAgcmVxdWlyZSgnLi9ncmFwaGljcy9HcmFwaGljcycpLFxuICAgIEdyYXBoaWNzRGF0YTogICAgICAgICAgIHJlcXVpcmUoJy4vZ3JhcGhpY3MvR3JhcGhpY3NEYXRhJyksXG4gICAgR3JhcGhpY3NSZW5kZXJlcjogICAgICAgcmVxdWlyZSgnLi9ncmFwaGljcy93ZWJnbC9HcmFwaGljc1JlbmRlcmVyJyksXG5cbiAgICAvLyB0ZXh0dXJlc1xuICAgIFRleHR1cmU6ICAgICAgICAgICAgICAgIHJlcXVpcmUoJy4vdGV4dHVyZXMvVGV4dHVyZScpLFxuICAgIEJhc2VUZXh0dXJlOiAgICAgICAgICAgIHJlcXVpcmUoJy4vdGV4dHVyZXMvQmFzZVRleHR1cmUnKSxcbiAgICBSZW5kZXJUZXh0dXJlOiAgICAgICAgICByZXF1aXJlKCcuL3RleHR1cmVzL1JlbmRlclRleHR1cmUnKSxcbiAgICBWaWRlb0Jhc2VUZXh0dXJlOiAgICAgICByZXF1aXJlKCcuL3RleHR1cmVzL1ZpZGVvQmFzZVRleHR1cmUnKSxcbiAgICBUZXh0dXJlVXZzOiAgICAgICAgICAgICByZXF1aXJlKCcuL3RleHR1cmVzL1RleHR1cmVVdnMnKSxcblxuICAgIC8vIHJlbmRlcmVycyAtIGNhbnZhc1xuICAgIENhbnZhc1JlbmRlcmVyOiAgICAgICAgIHJlcXVpcmUoJy4vcmVuZGVyZXJzL2NhbnZhcy9DYW52YXNSZW5kZXJlcicpLFxuICAgIENhbnZhc0dyYXBoaWNzOiAgICAgICAgIHJlcXVpcmUoJy4vcmVuZGVyZXJzL2NhbnZhcy91dGlscy9DYW52YXNHcmFwaGljcycpLFxuICAgIENhbnZhc0J1ZmZlcjogICAgICAgICAgIHJlcXVpcmUoJy4vcmVuZGVyZXJzL2NhbnZhcy91dGlscy9DYW52YXNCdWZmZXInKSxcblxuICAgIC8vIHJlbmRlcmVycyAtIHdlYmdsXG4gICAgV2ViR0xSZW5kZXJlcjogICAgICAgICAgcmVxdWlyZSgnLi9yZW5kZXJlcnMvd2ViZ2wvV2ViR0xSZW5kZXJlcicpLFxuICAgIFdlYkdMTWFuYWdlcjogICAgICAgICAgcmVxdWlyZSgnLi9yZW5kZXJlcnMvd2ViZ2wvbWFuYWdlcnMvV2ViR0xNYW5hZ2VyJyksXG4gICAgU2hhZGVyTWFuYWdlcjogICAgICAgICAgcmVxdWlyZSgnLi9yZW5kZXJlcnMvd2ViZ2wvbWFuYWdlcnMvU2hhZGVyTWFuYWdlcicpLFxuICAgIFNoYWRlcjogICAgICAgICAgICAgICAgIHJlcXVpcmUoJy4vcmVuZGVyZXJzL3dlYmdsL3NoYWRlcnMvU2hhZGVyJyksXG4gICAgT2JqZWN0UmVuZGVyZXI6ICAgICAgICAgcmVxdWlyZSgnLi9yZW5kZXJlcnMvd2ViZ2wvdXRpbHMvT2JqZWN0UmVuZGVyZXInKSxcbiAgICBSZW5kZXJUYXJnZXQ6ICAgICAgICAgICByZXF1aXJlKCcuL3JlbmRlcmVycy93ZWJnbC91dGlscy9SZW5kZXJUYXJnZXQnKSxcblxuICAgIC8vIGZpbHRlcnMgLSB3ZWJnbFxuICAgIEFic3RyYWN0RmlsdGVyOiAgICAgICAgIHJlcXVpcmUoJy4vcmVuZGVyZXJzL3dlYmdsL2ZpbHRlcnMvQWJzdHJhY3RGaWx0ZXInKSxcbiAgICBGWEFBRmlsdGVyOiAgICAgICAgICAgICByZXF1aXJlKCcuL3JlbmRlcmVycy93ZWJnbC9maWx0ZXJzL0ZYQUFGaWx0ZXInKSxcbiAgICBTcHJpdGVNYXNrRmlsdGVyOiAgICAgICByZXF1aXJlKCcuL3JlbmRlcmVycy93ZWJnbC9maWx0ZXJzL1Nwcml0ZU1hc2tGaWx0ZXInKSxcblxuICAgIGdsQ29yZTogICAgICAgICAgICAgICAgICAgcmVxdWlyZSgncGl4aS1nbC1jb3JlJyksXG5cbiAgICAvKipcbiAgICAgKiBUaGlzIGhlbHBlciBmdW5jdGlvbiB3aWxsIGF1dG9tYXRpY2FsbHkgZGV0ZWN0IHdoaWNoIHJlbmRlcmVyIHlvdSBzaG91bGQgYmUgdXNpbmcuXG4gICAgICogV2ViR0wgaXMgdGhlIHByZWZlcnJlZCByZW5kZXJlciBhcyBpdCBpcyBhIGxvdCBmYXN0ZXIuIElmIHdlYkdMIGlzIG5vdCBzdXBwb3J0ZWQgYnlcbiAgICAgKiB0aGUgYnJvd3NlciB0aGVuIHRoaXMgZnVuY3Rpb24gd2lsbCByZXR1cm4gYSBjYW52YXMgcmVuZGVyZXJcbiAgICAgKlxuICAgICAqIEBtZW1iZXJvZiBQSVhJXG4gICAgICogQHBhcmFtIHdpZHRoPTgwMCB7bnVtYmVyfSB0aGUgd2lkdGggb2YgdGhlIHJlbmRlcmVycyB2aWV3XG4gICAgICogQHBhcmFtIGhlaWdodD02MDAge251bWJlcn0gdGhlIGhlaWdodCBvZiB0aGUgcmVuZGVyZXJzIHZpZXdcbiAgICAgKiBAcGFyYW0gW29wdGlvbnNdIHtvYmplY3R9IFRoZSBvcHRpb25hbCByZW5kZXJlciBwYXJhbWV0ZXJzXG4gICAgICogQHBhcmFtIFtvcHRpb25zLnZpZXddIHtIVE1MQ2FudmFzRWxlbWVudH0gdGhlIGNhbnZhcyB0byB1c2UgYXMgYSB2aWV3LCBvcHRpb25hbFxuICAgICAqIEBwYXJhbSBbb3B0aW9ucy50cmFuc3BhcmVudD1mYWxzZV0ge2Jvb2xlYW59IElmIHRoZSByZW5kZXIgdmlldyBpcyB0cmFuc3BhcmVudCwgZGVmYXVsdCBmYWxzZVxuICAgICAqIEBwYXJhbSBbb3B0aW9ucy5hbnRpYWxpYXM9ZmFsc2VdIHtib29sZWFufSBzZXRzIGFudGlhbGlhcyAob25seSBhcHBsaWNhYmxlIGluIGNocm9tZSBhdCB0aGUgbW9tZW50KVxuICAgICAqIEBwYXJhbSBbb3B0aW9ucy5wcmVzZXJ2ZURyYXdpbmdCdWZmZXI9ZmFsc2VdIHtib29sZWFufSBlbmFibGVzIGRyYXdpbmcgYnVmZmVyIHByZXNlcnZhdGlvbiwgZW5hYmxlIHRoaXMgaWYgeW91XG4gICAgICogICAgICBuZWVkIHRvIGNhbGwgdG9EYXRhVXJsIG9uIHRoZSB3ZWJnbCBjb250ZXh0XG4gICAgICogQHBhcmFtIFtvcHRpb25zLnJlc29sdXRpb249MV0ge251bWJlcn0gdGhlIHJlc29sdXRpb24gb2YgdGhlIHJlbmRlcmVyLCByZXRpbmEgd291bGQgYmUgMlxuICAgICAqIEBwYXJhbSBbbm9XZWJHTD1mYWxzZV0ge2Jvb2xlYW59IHByZXZlbnRzIHNlbGVjdGlvbiBvZiBXZWJHTCByZW5kZXJlciwgZXZlbiBpZiBzdWNoIGlzIHByZXNlbnRcbiAgICAgKlxuICAgICAqIEByZXR1cm4ge1dlYkdMUmVuZGVyZXJ8Q2FudmFzUmVuZGVyZXJ9IFJldHVybnMgV2ViR0wgcmVuZGVyZXIgaWYgYXZhaWxhYmxlLCBvdGhlcndpc2UgQ2FudmFzUmVuZGVyZXJcbiAgICAgKi9cbiAgICBhdXRvRGV0ZWN0UmVuZGVyZXI6IGZ1bmN0aW9uICh3aWR0aCwgaGVpZ2h0LCBvcHRpb25zLCBub1dlYkdMKVxuICAgIHtcbiAgICAgICAgd2lkdGggPSB3aWR0aCB8fCA4MDA7XG4gICAgICAgIGhlaWdodCA9IGhlaWdodCB8fCA2MDA7XG5cbiAgICAgICAgaWYgKCFub1dlYkdMICYmIGNvcmUudXRpbHMuaXNXZWJHTFN1cHBvcnRlZCgpKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IGNvcmUuV2ViR0xSZW5kZXJlcih3aWR0aCwgaGVpZ2h0LCBvcHRpb25zKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBuZXcgY29yZS5DYW52YXNSZW5kZXJlcih3aWR0aCwgaGVpZ2h0LCBvcHRpb25zKTtcbiAgICB9XG59KTtcbiIsIi8vIEB0b2RvIC0gaWdub3JlIHRoZSB0b28gbWFueSBwYXJhbWV0ZXJzIHdhcm5pbmcgZm9yIG5vd1xuLy8gc2hvdWxkIGVpdGhlciBmaXggaXQgb3IgY2hhbmdlIHRoZSBqc2hpbnQgY29uZmlnXG4vLyBqc2hpbnQgLVcwNzJcblxudmFyIFBvaW50ID0gcmVxdWlyZSgnLi9Qb2ludCcpO1xuXG4vKipcbiAqIFRoZSBwaXhpIE1hdHJpeCBjbGFzcyBhcyBhbiBvYmplY3QsIHdoaWNoIG1ha2VzIGl0IGEgbG90IGZhc3RlcixcbiAqIGhlcmUgaXMgYSByZXByZXNlbnRhdGlvbiBvZiBpdCA6XG4gKiB8IGEgfCBiIHwgdHh8XG4gKiB8IGMgfCBkIHwgdHl8XG4gKiB8IDAgfCAwIHwgMSB8XG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICovXG5mdW5jdGlvbiBNYXRyaXgoKVxue1xuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAxXG4gICAgICovXG4gICAgdGhpcy5hID0gMTtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAwXG4gICAgICovXG4gICAgdGhpcy5iID0gMDtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAwXG4gICAgICovXG4gICAgdGhpcy5jID0gMDtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAxXG4gICAgICovXG4gICAgdGhpcy5kID0gMTtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAwXG4gICAgICovXG4gICAgdGhpcy50eCA9IDA7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMFxuICAgICAqL1xuICAgIHRoaXMudHkgPSAwO1xufVxuXG5NYXRyaXgucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gTWF0cml4O1xubW9kdWxlLmV4cG9ydHMgPSBNYXRyaXg7XG5cbi8qKlxuICogQ3JlYXRlcyBhIE1hdHJpeCBvYmplY3QgYmFzZWQgb24gdGhlIGdpdmVuIGFycmF5LiBUaGUgRWxlbWVudCB0byBNYXRyaXggbWFwcGluZyBvcmRlciBpcyBhcyBmb2xsb3dzOlxuICpcbiAqIGEgPSBhcnJheVswXVxuICogYiA9IGFycmF5WzFdXG4gKiBjID0gYXJyYXlbM11cbiAqIGQgPSBhcnJheVs0XVxuICogdHggPSBhcnJheVsyXVxuICogdHkgPSBhcnJheVs1XVxuICpcbiAqIEBwYXJhbSBhcnJheSB7bnVtYmVyW119IFRoZSBhcnJheSB0aGF0IHRoZSBtYXRyaXggd2lsbCBiZSBwb3B1bGF0ZWQgZnJvbS5cbiAqL1xuTWF0cml4LnByb3RvdHlwZS5mcm9tQXJyYXkgPSBmdW5jdGlvbiAoYXJyYXkpXG57XG4gICAgdGhpcy5hID0gYXJyYXlbMF07XG4gICAgdGhpcy5iID0gYXJyYXlbMV07XG4gICAgdGhpcy5jID0gYXJyYXlbM107XG4gICAgdGhpcy5kID0gYXJyYXlbNF07XG4gICAgdGhpcy50eCA9IGFycmF5WzJdO1xuICAgIHRoaXMudHkgPSBhcnJheVs1XTtcbn07XG5cblxuLyoqXG4gKiBzZXRzIHRoZSBtYXRyaXggcHJvcGVydGllc1xuICpcbiAqIEBwYXJhbSB7bnVtYmVyfSBhXG4gKiBAcGFyYW0ge251bWJlcn0gYlxuICogQHBhcmFtIHtudW1iZXJ9IGNcbiAqIEBwYXJhbSB7bnVtYmVyfSBkXG4gKiBAcGFyYW0ge251bWJlcn0gdHhcbiAqIEBwYXJhbSB7bnVtYmVyfSB0eVxuICpcbiAqIEByZXR1cm4ge1BJWEkuTWF0cml4fSBUaGlzIG1hdHJpeC4gR29vZCBmb3IgY2hhaW5pbmcgbWV0aG9kIGNhbGxzLlxuICovXG5NYXRyaXgucHJvdG90eXBlLnNldCA9IGZ1bmN0aW9uIChhLCBiLCBjLCBkLCB0eCwgdHkpXG57XG4gICAgdGhpcy5hID0gYTtcbiAgICB0aGlzLmIgPSBiO1xuICAgIHRoaXMuYyA9IGM7XG4gICAgdGhpcy5kID0gZDtcbiAgICB0aGlzLnR4ID0gdHg7XG4gICAgdGhpcy50eSA9IHR5O1xuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG5cbi8qKlxuICogQ3JlYXRlcyBhbiBhcnJheSBmcm9tIHRoZSBjdXJyZW50IE1hdHJpeCBvYmplY3QuXG4gKlxuICogQHBhcmFtIHRyYW5zcG9zZSB7Ym9vbGVhbn0gV2hldGhlciB3ZSBuZWVkIHRvIHRyYW5zcG9zZSB0aGUgbWF0cml4IG9yIG5vdFxuICogQHBhcmFtIFtvdXRdIHtBcnJheX0gSWYgcHJvdmlkZWQgdGhlIGFycmF5IHdpbGwgYmUgYXNzaWduZWQgdG8gb3V0XG4gKiBAcmV0dXJuIHtudW1iZXJbXX0gdGhlIG5ld2x5IGNyZWF0ZWQgYXJyYXkgd2hpY2ggY29udGFpbnMgdGhlIG1hdHJpeFxuICovXG5NYXRyaXgucHJvdG90eXBlLnRvQXJyYXkgPSBmdW5jdGlvbiAodHJhbnNwb3NlLCBvdXQpXG57XG4gICAgaWYgKCF0aGlzLmFycmF5KVxuICAgIHtcbiAgICAgICAgdGhpcy5hcnJheSA9IG5ldyBGbG9hdDMyQXJyYXkoOSk7XG4gICAgfVxuXG4gICAgdmFyIGFycmF5ID0gb3V0IHx8IHRoaXMuYXJyYXk7XG5cbiAgICBpZiAodHJhbnNwb3NlKVxuICAgIHtcbiAgICAgICAgYXJyYXlbMF0gPSB0aGlzLmE7XG4gICAgICAgIGFycmF5WzFdID0gdGhpcy5iO1xuICAgICAgICBhcnJheVsyXSA9IDA7XG4gICAgICAgIGFycmF5WzNdID0gdGhpcy5jO1xuICAgICAgICBhcnJheVs0XSA9IHRoaXMuZDtcbiAgICAgICAgYXJyYXlbNV0gPSAwO1xuICAgICAgICBhcnJheVs2XSA9IHRoaXMudHg7XG4gICAgICAgIGFycmF5WzddID0gdGhpcy50eTtcbiAgICAgICAgYXJyYXlbOF0gPSAxO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICBhcnJheVswXSA9IHRoaXMuYTtcbiAgICAgICAgYXJyYXlbMV0gPSB0aGlzLmM7XG4gICAgICAgIGFycmF5WzJdID0gdGhpcy50eDtcbiAgICAgICAgYXJyYXlbM10gPSB0aGlzLmI7XG4gICAgICAgIGFycmF5WzRdID0gdGhpcy5kO1xuICAgICAgICBhcnJheVs1XSA9IHRoaXMudHk7XG4gICAgICAgIGFycmF5WzZdID0gMDtcbiAgICAgICAgYXJyYXlbN10gPSAwO1xuICAgICAgICBhcnJheVs4XSA9IDE7XG4gICAgfVxuXG4gICAgcmV0dXJuIGFycmF5O1xufTtcblxuLyoqXG4gKiBHZXQgYSBuZXcgcG9zaXRpb24gd2l0aCB0aGUgY3VycmVudCB0cmFuc2Zvcm1hdGlvbiBhcHBsaWVkLlxuICogQ2FuIGJlIHVzZWQgdG8gZ28gZnJvbSBhIGNoaWxkJ3MgY29vcmRpbmF0ZSBzcGFjZSB0byB0aGUgd29ybGQgY29vcmRpbmF0ZSBzcGFjZS4gKGUuZy4gcmVuZGVyaW5nKVxuICpcbiAqIEBwYXJhbSBwb3Mge1BJWEkuUG9pbnR9IFRoZSBvcmlnaW5cbiAqIEBwYXJhbSBbbmV3UG9zXSB7UElYSS5Qb2ludH0gVGhlIHBvaW50IHRoYXQgdGhlIG5ldyBwb3NpdGlvbiBpcyBhc3NpZ25lZCB0byAoYWxsb3dlZCB0byBiZSBzYW1lIGFzIGlucHV0KVxuICogQHJldHVybiB7UElYSS5Qb2ludH0gVGhlIG5ldyBwb2ludCwgdHJhbnNmb3JtZWQgdGhyb3VnaCB0aGlzIG1hdHJpeFxuICovXG5NYXRyaXgucHJvdG90eXBlLmFwcGx5ID0gZnVuY3Rpb24gKHBvcywgbmV3UG9zKVxue1xuICAgIG5ld1BvcyA9IG5ld1BvcyB8fCBuZXcgUG9pbnQoKTtcblxuICAgIHZhciB4ID0gcG9zLng7XG4gICAgdmFyIHkgPSBwb3MueTtcblxuICAgIG5ld1Bvcy54ID0gdGhpcy5hICogeCArIHRoaXMuYyAqIHkgKyB0aGlzLnR4O1xuICAgIG5ld1Bvcy55ID0gdGhpcy5iICogeCArIHRoaXMuZCAqIHkgKyB0aGlzLnR5O1xuXG4gICAgcmV0dXJuIG5ld1Bvcztcbn07XG5cbi8qKlxuICogR2V0IGEgbmV3IHBvc2l0aW9uIHdpdGggdGhlIGludmVyc2Ugb2YgdGhlIGN1cnJlbnQgdHJhbnNmb3JtYXRpb24gYXBwbGllZC5cbiAqIENhbiBiZSB1c2VkIHRvIGdvIGZyb20gdGhlIHdvcmxkIGNvb3JkaW5hdGUgc3BhY2UgdG8gYSBjaGlsZCdzIGNvb3JkaW5hdGUgc3BhY2UuIChlLmcuIGlucHV0KVxuICpcbiAqIEBwYXJhbSBwb3Mge1BJWEkuUG9pbnR9IFRoZSBvcmlnaW5cbiAqIEBwYXJhbSBbbmV3UG9zXSB7UElYSS5Qb2ludH0gVGhlIHBvaW50IHRoYXQgdGhlIG5ldyBwb3NpdGlvbiBpcyBhc3NpZ25lZCB0byAoYWxsb3dlZCB0byBiZSBzYW1lIGFzIGlucHV0KVxuICogQHJldHVybiB7UElYSS5Qb2ludH0gVGhlIG5ldyBwb2ludCwgaW52ZXJzZS10cmFuc2Zvcm1lZCB0aHJvdWdoIHRoaXMgbWF0cml4XG4gKi9cbk1hdHJpeC5wcm90b3R5cGUuYXBwbHlJbnZlcnNlID0gZnVuY3Rpb24gKHBvcywgbmV3UG9zKVxue1xuICAgIG5ld1BvcyA9IG5ld1BvcyB8fCBuZXcgUG9pbnQoKTtcblxuICAgIHZhciBpZCA9IDEgLyAodGhpcy5hICogdGhpcy5kICsgdGhpcy5jICogLXRoaXMuYik7XG5cbiAgICB2YXIgeCA9IHBvcy54O1xuICAgIHZhciB5ID0gcG9zLnk7XG5cbiAgICBuZXdQb3MueCA9IHRoaXMuZCAqIGlkICogeCArIC10aGlzLmMgKiBpZCAqIHkgKyAodGhpcy50eSAqIHRoaXMuYyAtIHRoaXMudHggKiB0aGlzLmQpICogaWQ7XG4gICAgbmV3UG9zLnkgPSB0aGlzLmEgKiBpZCAqIHkgKyAtdGhpcy5iICogaWQgKiB4ICsgKC10aGlzLnR5ICogdGhpcy5hICsgdGhpcy50eCAqIHRoaXMuYikgKiBpZDtcblxuICAgIHJldHVybiBuZXdQb3M7XG59O1xuXG4vKipcbiAqIFRyYW5zbGF0ZXMgdGhlIG1hdHJpeCBvbiB0aGUgeCBhbmQgeS5cbiAqXG4gKiBAcGFyYW0ge251bWJlcn0geFxuICogQHBhcmFtIHtudW1iZXJ9IHlcbiAqIEByZXR1cm4ge1BJWEkuTWF0cml4fSBUaGlzIG1hdHJpeC4gR29vZCBmb3IgY2hhaW5pbmcgbWV0aG9kIGNhbGxzLlxuICovXG5NYXRyaXgucHJvdG90eXBlLnRyYW5zbGF0ZSA9IGZ1bmN0aW9uICh4LCB5KVxue1xuICAgIHRoaXMudHggKz0geDtcbiAgICB0aGlzLnR5ICs9IHk7XG5cbiAgICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogQXBwbGllcyBhIHNjYWxlIHRyYW5zZm9ybWF0aW9uIHRvIHRoZSBtYXRyaXguXG4gKlxuICogQHBhcmFtIHtudW1iZXJ9IHggVGhlIGFtb3VudCB0byBzY2FsZSBob3Jpem9udGFsbHlcbiAqIEBwYXJhbSB7bnVtYmVyfSB5IFRoZSBhbW91bnQgdG8gc2NhbGUgdmVydGljYWxseVxuICogQHJldHVybiB7UElYSS5NYXRyaXh9IFRoaXMgbWF0cml4LiBHb29kIGZvciBjaGFpbmluZyBtZXRob2QgY2FsbHMuXG4gKi9cbk1hdHJpeC5wcm90b3R5cGUuc2NhbGUgPSBmdW5jdGlvbiAoeCwgeSlcbntcbiAgICB0aGlzLmEgKj0geDtcbiAgICB0aGlzLmQgKj0geTtcbiAgICB0aGlzLmMgKj0geDtcbiAgICB0aGlzLmIgKj0geTtcbiAgICB0aGlzLnR4ICo9IHg7XG4gICAgdGhpcy50eSAqPSB5O1xuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG5cbi8qKlxuICogQXBwbGllcyBhIHJvdGF0aW9uIHRyYW5zZm9ybWF0aW9uIHRvIHRoZSBtYXRyaXguXG4gKlxuICogQHBhcmFtIHtudW1iZXJ9IGFuZ2xlIC0gVGhlIGFuZ2xlIGluIHJhZGlhbnMuXG4gKiBAcmV0dXJuIHtQSVhJLk1hdHJpeH0gVGhpcyBtYXRyaXguIEdvb2QgZm9yIGNoYWluaW5nIG1ldGhvZCBjYWxscy5cbiAqL1xuTWF0cml4LnByb3RvdHlwZS5yb3RhdGUgPSBmdW5jdGlvbiAoYW5nbGUpXG57XG4gICAgdmFyIGNvcyA9IE1hdGguY29zKCBhbmdsZSApO1xuICAgIHZhciBzaW4gPSBNYXRoLnNpbiggYW5nbGUgKTtcblxuICAgIHZhciBhMSA9IHRoaXMuYTtcbiAgICB2YXIgYzEgPSB0aGlzLmM7XG4gICAgdmFyIHR4MSA9IHRoaXMudHg7XG5cbiAgICB0aGlzLmEgPSBhMSAqIGNvcy10aGlzLmIgKiBzaW47XG4gICAgdGhpcy5iID0gYTEgKiBzaW4rdGhpcy5iICogY29zO1xuICAgIHRoaXMuYyA9IGMxICogY29zLXRoaXMuZCAqIHNpbjtcbiAgICB0aGlzLmQgPSBjMSAqIHNpbit0aGlzLmQgKiBjb3M7XG4gICAgdGhpcy50eCA9IHR4MSAqIGNvcyAtIHRoaXMudHkgKiBzaW47XG4gICAgdGhpcy50eSA9IHR4MSAqIHNpbiArIHRoaXMudHkgKiBjb3M7XG5cbiAgICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogQXBwZW5kcyB0aGUgZ2l2ZW4gTWF0cml4IHRvIHRoaXMgTWF0cml4LlxuICpcbiAqIEBwYXJhbSB7UElYSS5NYXRyaXh9IG1hdHJpeFxuICogQHJldHVybiB7UElYSS5NYXRyaXh9IFRoaXMgbWF0cml4LiBHb29kIGZvciBjaGFpbmluZyBtZXRob2QgY2FsbHMuXG4gKi9cbk1hdHJpeC5wcm90b3R5cGUuYXBwZW5kID0gZnVuY3Rpb24gKG1hdHJpeClcbntcbiAgICB2YXIgYTEgPSB0aGlzLmE7XG4gICAgdmFyIGIxID0gdGhpcy5iO1xuICAgIHZhciBjMSA9IHRoaXMuYztcbiAgICB2YXIgZDEgPSB0aGlzLmQ7XG5cbiAgICB0aGlzLmEgID0gbWF0cml4LmEgKiBhMSArIG1hdHJpeC5iICogYzE7XG4gICAgdGhpcy5iICA9IG1hdHJpeC5hICogYjEgKyBtYXRyaXguYiAqIGQxO1xuICAgIHRoaXMuYyAgPSBtYXRyaXguYyAqIGExICsgbWF0cml4LmQgKiBjMTtcbiAgICB0aGlzLmQgID0gbWF0cml4LmMgKiBiMSArIG1hdHJpeC5kICogZDE7XG5cbiAgICB0aGlzLnR4ID0gbWF0cml4LnR4ICogYTEgKyBtYXRyaXgudHkgKiBjMSArIHRoaXMudHg7XG4gICAgdGhpcy50eSA9IG1hdHJpeC50eCAqIGIxICsgbWF0cml4LnR5ICogZDEgKyB0aGlzLnR5O1xuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIFNldHMgdGhlIG1hdHJpeCBiYXNlZCBvbiBhbGwgdGhlIGF2YWlsYWJsZSBwcm9wZXJ0aWVzXG4gKlxuICogQHBhcmFtIHtudW1iZXJ9IHhcbiAqIEBwYXJhbSB7bnVtYmVyfSB5XG4gKiBAcGFyYW0ge251bWJlcn0gcGl2b3RYXG4gKiBAcGFyYW0ge251bWJlcn0gcGl2b3RZXG4gKiBAcGFyYW0ge251bWJlcn0gc2NhbGVYXG4gKiBAcGFyYW0ge251bWJlcn0gc2NhbGVZXG4gKiBAcGFyYW0ge251bWJlcn0gcm90YXRpb25cbiAqIEBwYXJhbSB7bnVtYmVyfSBza2V3WFxuICogQHBhcmFtIHtudW1iZXJ9IHNrZXdZXG4gKlxuICogQHJldHVybiB7UElYSS5NYXRyaXh9IFRoaXMgbWF0cml4LiBHb29kIGZvciBjaGFpbmluZyBtZXRob2QgY2FsbHMuXG4gKi9cbk1hdHJpeC5wcm90b3R5cGUuc2V0VHJhbnNmb3JtID0gZnVuY3Rpb24gKHgsIHksIHBpdm90WCwgcGl2b3RZLCBzY2FsZVgsIHNjYWxlWSwgcm90YXRpb24sIHNrZXdYLCBza2V3WSlcbntcbiAgICB2YXIgYSwgYiwgYywgZCwgc3IsIGNyLCBjeSwgc3ksIG5zeCwgY3g7XG5cbiAgICBzciAgPSBNYXRoLnNpbihyb3RhdGlvbik7XG4gICAgY3IgID0gTWF0aC5jb3Mocm90YXRpb24pO1xuICAgIGN5ICA9IE1hdGguY29zKHNrZXdZKTtcbiAgICBzeSAgPSBNYXRoLnNpbihza2V3WSk7XG4gICAgbnN4ID0gLU1hdGguc2luKHNrZXdYKTtcbiAgICBjeCAgPSAgTWF0aC5jb3Moc2tld1gpO1xuXG4gICAgYSAgPSAgY3IgKiBzY2FsZVg7XG4gICAgYiAgPSAgc3IgKiBzY2FsZVg7XG4gICAgYyAgPSAtc3IgKiBzY2FsZVk7XG4gICAgZCAgPSAgY3IgKiBzY2FsZVk7XG5cbiAgICB0aGlzLmEgID0gY3kgKiBhICsgc3kgKiBjO1xuICAgIHRoaXMuYiAgPSBjeSAqIGIgKyBzeSAqIGQ7XG4gICAgdGhpcy5jICA9IG5zeCAqIGEgKyBjeCAqIGM7XG4gICAgdGhpcy5kICA9IG5zeCAqIGIgKyBjeCAqIGQ7XG5cbiAgICB0aGlzLnR4ID0geCArICggcGl2b3RYICogYSArIHBpdm90WSAqIGMgKTtcbiAgICB0aGlzLnR5ID0geSArICggcGl2b3RYICogYiArIHBpdm90WSAqIGQgKTtcblxuICAgIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBQcmVwZW5kcyB0aGUgZ2l2ZW4gTWF0cml4IHRvIHRoaXMgTWF0cml4LlxuICpcbiAqIEBwYXJhbSB7UElYSS5NYXRyaXh9IG1hdHJpeFxuICogQHJldHVybiB7UElYSS5NYXRyaXh9IFRoaXMgbWF0cml4LiBHb29kIGZvciBjaGFpbmluZyBtZXRob2QgY2FsbHMuXG4gKi9cbk1hdHJpeC5wcm90b3R5cGUucHJlcGVuZCA9IGZ1bmN0aW9uKG1hdHJpeClcbntcbiAgICB2YXIgdHgxID0gdGhpcy50eDtcblxuICAgIGlmIChtYXRyaXguYSAhPT0gMSB8fCBtYXRyaXguYiAhPT0gMCB8fCBtYXRyaXguYyAhPT0gMCB8fCBtYXRyaXguZCAhPT0gMSlcbiAgICB7XG4gICAgICAgIHZhciBhMSA9IHRoaXMuYTtcbiAgICAgICAgdmFyIGMxID0gdGhpcy5jO1xuICAgICAgICB0aGlzLmEgID0gYTEqbWF0cml4LmErdGhpcy5iKm1hdHJpeC5jO1xuICAgICAgICB0aGlzLmIgID0gYTEqbWF0cml4LmIrdGhpcy5iKm1hdHJpeC5kO1xuICAgICAgICB0aGlzLmMgID0gYzEqbWF0cml4LmErdGhpcy5kKm1hdHJpeC5jO1xuICAgICAgICB0aGlzLmQgID0gYzEqbWF0cml4LmIrdGhpcy5kKm1hdHJpeC5kO1xuICAgIH1cblxuICAgIHRoaXMudHggPSB0eDEqbWF0cml4LmErdGhpcy50eSptYXRyaXguYyttYXRyaXgudHg7XG4gICAgdGhpcy50eSA9IHR4MSptYXRyaXguYit0aGlzLnR5Km1hdHJpeC5kK21hdHJpeC50eTtcblxuICAgIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBJbnZlcnRzIHRoaXMgbWF0cml4XG4gKlxuICogQHJldHVybiB7UElYSS5NYXRyaXh9IFRoaXMgbWF0cml4LiBHb29kIGZvciBjaGFpbmluZyBtZXRob2QgY2FsbHMuXG4gKi9cbk1hdHJpeC5wcm90b3R5cGUuaW52ZXJ0ID0gZnVuY3Rpb24oKVxue1xuICAgIHZhciBhMSA9IHRoaXMuYTtcbiAgICB2YXIgYjEgPSB0aGlzLmI7XG4gICAgdmFyIGMxID0gdGhpcy5jO1xuICAgIHZhciBkMSA9IHRoaXMuZDtcbiAgICB2YXIgdHgxID0gdGhpcy50eDtcbiAgICB2YXIgbiA9IGExKmQxLWIxKmMxO1xuXG4gICAgdGhpcy5hID0gZDEvbjtcbiAgICB0aGlzLmIgPSAtYjEvbjtcbiAgICB0aGlzLmMgPSAtYzEvbjtcbiAgICB0aGlzLmQgPSBhMS9uO1xuICAgIHRoaXMudHggPSAoYzEqdGhpcy50eS1kMSp0eDEpL247XG4gICAgdGhpcy50eSA9IC0oYTEqdGhpcy50eS1iMSp0eDEpL247XG5cbiAgICByZXR1cm4gdGhpcztcbn07XG5cblxuLyoqXG4gKiBSZXNldHMgdGhpcyBNYXRpeCB0byBhbiBpZGVudGl0eSAoZGVmYXVsdCkgbWF0cml4LlxuICpcbiAqIEByZXR1cm4ge1BJWEkuTWF0cml4fSBUaGlzIG1hdHJpeC4gR29vZCBmb3IgY2hhaW5pbmcgbWV0aG9kIGNhbGxzLlxuICovXG5NYXRyaXgucHJvdG90eXBlLmlkZW50aXR5ID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLmEgPSAxO1xuICAgIHRoaXMuYiA9IDA7XG4gICAgdGhpcy5jID0gMDtcbiAgICB0aGlzLmQgPSAxO1xuICAgIHRoaXMudHggPSAwO1xuICAgIHRoaXMudHkgPSAwO1xuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIENyZWF0ZXMgYSBuZXcgTWF0cml4IG9iamVjdCB3aXRoIHRoZSBzYW1lIHZhbHVlcyBhcyB0aGlzIG9uZS5cbiAqXG4gKiBAcmV0dXJuIHtQSVhJLk1hdHJpeH0gQSBjb3B5IG9mIHRoaXMgbWF0cml4LiBHb29kIGZvciBjaGFpbmluZyBtZXRob2QgY2FsbHMuXG4gKi9cbk1hdHJpeC5wcm90b3R5cGUuY2xvbmUgPSBmdW5jdGlvbiAoKVxue1xuICAgIHZhciBtYXRyaXggPSBuZXcgTWF0cml4KCk7XG4gICAgbWF0cml4LmEgPSB0aGlzLmE7XG4gICAgbWF0cml4LmIgPSB0aGlzLmI7XG4gICAgbWF0cml4LmMgPSB0aGlzLmM7XG4gICAgbWF0cml4LmQgPSB0aGlzLmQ7XG4gICAgbWF0cml4LnR4ID0gdGhpcy50eDtcbiAgICBtYXRyaXgudHkgPSB0aGlzLnR5O1xuXG4gICAgcmV0dXJuIG1hdHJpeDtcbn07XG5cbi8qKlxuICogQ2hhbmdlcyB0aGUgdmFsdWVzIG9mIHRoZSBnaXZlbiBtYXRyaXggdG8gYmUgdGhlIHNhbWUgYXMgdGhlIG9uZXMgaW4gdGhpcyBtYXRyaXhcbiAqXG4gKiBAcmV0dXJuIHtQSVhJLk1hdHJpeH0gVGhlIG1hdHJpeCBnaXZlbiBpbiBwYXJhbWV0ZXIgd2l0aCBpdHMgdmFsdWVzIHVwZGF0ZWQuXG4gKi9cbk1hdHJpeC5wcm90b3R5cGUuY29weSA9IGZ1bmN0aW9uIChtYXRyaXgpXG57XG4gICAgbWF0cml4LmEgPSB0aGlzLmE7XG4gICAgbWF0cml4LmIgPSB0aGlzLmI7XG4gICAgbWF0cml4LmMgPSB0aGlzLmM7XG4gICAgbWF0cml4LmQgPSB0aGlzLmQ7XG4gICAgbWF0cml4LnR4ID0gdGhpcy50eDtcbiAgICBtYXRyaXgudHkgPSB0aGlzLnR5O1xuXG4gICAgcmV0dXJuIG1hdHJpeDtcbn07XG5cbi8qKlxuICogQSBkZWZhdWx0IChpZGVudGl0eSkgbWF0cml4XG4gKlxuICogQHN0YXRpY1xuICogQGNvbnN0XG4gKi9cbk1hdHJpeC5JREVOVElUWSA9IG5ldyBNYXRyaXgoKTtcblxuLyoqXG4gKiBBIHRlbXAgbWF0cml4XG4gKlxuICogQHN0YXRpY1xuICogQGNvbnN0XG4gKi9cbk1hdHJpeC5URU1QX01BVFJJWCA9IG5ldyBNYXRyaXgoKTtcbiIsIi8qKlxuICogVGhlIFBvaW50IG9iamVjdCByZXByZXNlbnRzIGEgbG9jYXRpb24gaW4gYSB0d28tZGltZW5zaW9uYWwgY29vcmRpbmF0ZSBzeXN0ZW0sIHdoZXJlIHggcmVwcmVzZW50c1xuICogdGhlIGhvcml6b250YWwgYXhpcyBhbmQgeSByZXByZXNlbnRzIHRoZSB2ZXJ0aWNhbCBheGlzLlxuICpcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqIEBwYXJhbSBbeD0wXSB7bnVtYmVyfSBwb3NpdGlvbiBvZiB0aGUgcG9pbnQgb24gdGhlIHggYXhpc1xuICogQHBhcmFtIFt5PTBdIHtudW1iZXJ9IHBvc2l0aW9uIG9mIHRoZSBwb2ludCBvbiB0aGUgeSBheGlzXG4gKi9cbmZ1bmN0aW9uIFBvaW50KHgsIHkpXG57XG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDBcbiAgICAgKi9cbiAgICB0aGlzLnggPSB4IHx8IDA7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMFxuICAgICAqL1xuICAgIHRoaXMueSA9IHkgfHwgMDtcbn1cblxuUG9pbnQucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gUG9pbnQ7XG5tb2R1bGUuZXhwb3J0cyA9IFBvaW50O1xuXG4vKipcbiAqIENyZWF0ZXMgYSBjbG9uZSBvZiB0aGlzIHBvaW50XG4gKlxuICogQHJldHVybiB7UElYSS5Qb2ludH0gYSBjb3B5IG9mIHRoZSBwb2ludFxuICovXG5Qb2ludC5wcm90b3R5cGUuY2xvbmUgPSBmdW5jdGlvbiAoKVxue1xuICAgIHJldHVybiBuZXcgUG9pbnQodGhpcy54LCB0aGlzLnkpO1xufTtcblxuLyoqXG4gKiBDb3BpZXMgeCBhbmQgeSBmcm9tIHRoZSBnaXZlbiBwb2ludFxuICpcbiAqIEBwYXJhbSBwIHtQSVhJLlBvaW50fVxuICovXG5Qb2ludC5wcm90b3R5cGUuY29weSA9IGZ1bmN0aW9uIChwKSB7XG4gICAgdGhpcy5zZXQocC54LCBwLnkpO1xufTtcblxuLyoqXG4gKiBSZXR1cm5zIHRydWUgaWYgdGhlIGdpdmVuIHBvaW50IGlzIGVxdWFsIHRvIHRoaXMgcG9pbnRcbiAqXG4gKiBAcGFyYW0gcCB7UElYSS5Qb2ludH1cbiAqIEByZXR1cm5zIHtib29sZWFufVxuICovXG5Qb2ludC5wcm90b3R5cGUuZXF1YWxzID0gZnVuY3Rpb24gKHApIHtcbiAgICByZXR1cm4gKHAueCA9PT0gdGhpcy54KSAmJiAocC55ID09PSB0aGlzLnkpO1xufTtcblxuLyoqXG4gKiBTZXRzIHRoZSBwb2ludCB0byBhIG5ldyB4IGFuZCB5IHBvc2l0aW9uLlxuICogSWYgeSBpcyBvbWl0dGVkLCBib3RoIHggYW5kIHkgd2lsbCBiZSBzZXQgdG8geC5cbiAqXG4gKiBAcGFyYW0gW3g9MF0ge251bWJlcn0gcG9zaXRpb24gb2YgdGhlIHBvaW50IG9uIHRoZSB4IGF4aXNcbiAqIEBwYXJhbSBbeT0wXSB7bnVtYmVyfSBwb3NpdGlvbiBvZiB0aGUgcG9pbnQgb24gdGhlIHkgYXhpc1xuICovXG5Qb2ludC5wcm90b3R5cGUuc2V0ID0gZnVuY3Rpb24gKHgsIHkpXG57XG4gICAgdGhpcy54ID0geCB8fCAwO1xuICAgIHRoaXMueSA9IHkgfHwgKCAoeSAhPT0gMCkgPyB0aGlzLnggOiAwICkgO1xufTtcbiIsIi8qKlxuICogTWF0aCBjbGFzc2VzIGFuZCB1dGlsaXRpZXMgbWl4ZWQgaW50byBQSVhJIG5hbWVzcGFjZS5cbiAqXG4gKiBAbGVuZHMgUElYSVxuICovXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgICAvLyBUaGVzZSB3aWxsIGJlIG1peGVkIHRvIGJlIG1hZGUgcHVibGljbHkgYXZhaWxhYmxlLFxuICAgIC8vIHdoaWxlIHRoaXMgbW9kdWxlIGlzIHVzZWQgaW50ZXJuYWxseSBpbiBjb3JlXG4gICAgLy8gdG8gYXZvaWQgY2lyY3VsYXIgZGVwZW5kZW5jaWVzIGFuZCBjdXQgZG93biBvblxuICAgIC8vIGludGVybmFsIG1vZHVsZSByZXF1aXJlcy5cblxuICAgIFBvaW50OiAgICAgIHJlcXVpcmUoJy4vUG9pbnQnKSxcbiAgICBNYXRyaXg6ICAgICByZXF1aXJlKCcuL01hdHJpeCcpLFxuXG4gICAgQ2lyY2xlOiAgICAgcmVxdWlyZSgnLi9zaGFwZXMvQ2lyY2xlJyksXG4gICAgRWxsaXBzZTogICAgcmVxdWlyZSgnLi9zaGFwZXMvRWxsaXBzZScpLFxuICAgIFBvbHlnb246ICAgIHJlcXVpcmUoJy4vc2hhcGVzL1BvbHlnb24nKSxcbiAgICBSZWN0YW5nbGU6ICByZXF1aXJlKCcuL3NoYXBlcy9SZWN0YW5nbGUnKSxcbiAgICBSb3VuZGVkUmVjdGFuZ2xlOiByZXF1aXJlKCcuL3NoYXBlcy9Sb3VuZGVkUmVjdGFuZ2xlJylcbn07XG4iLCJ2YXIgUmVjdGFuZ2xlID0gcmVxdWlyZSgnLi9SZWN0YW5nbGUnKSxcbiAgICBDT05TVCA9IHJlcXVpcmUoJy4uLy4uL2NvbnN0Jyk7XG5cbi8qKlxuICogVGhlIENpcmNsZSBvYmplY3QgY2FuIGJlIHVzZWQgdG8gc3BlY2lmeSBhIGhpdCBhcmVhIGZvciBkaXNwbGF5T2JqZWN0c1xuICpcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqIEBwYXJhbSB4IHtudW1iZXJ9IFRoZSBYIGNvb3JkaW5hdGUgb2YgdGhlIGNlbnRlciBvZiB0aGlzIGNpcmNsZVxuICogQHBhcmFtIHkge251bWJlcn0gVGhlIFkgY29vcmRpbmF0ZSBvZiB0aGUgY2VudGVyIG9mIHRoaXMgY2lyY2xlXG4gKiBAcGFyYW0gcmFkaXVzIHtudW1iZXJ9IFRoZSByYWRpdXMgb2YgdGhlIGNpcmNsZVxuICovXG5mdW5jdGlvbiBDaXJjbGUoeCwgeSwgcmFkaXVzKVxue1xuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAwXG4gICAgICovXG4gICAgdGhpcy54ID0geCB8fCAwO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDBcbiAgICAgKi9cbiAgICB0aGlzLnkgPSB5IHx8IDA7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMFxuICAgICAqL1xuICAgIHRoaXMucmFkaXVzID0gcmFkaXVzIHx8IDA7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgdHlwZSBvZiB0aGUgb2JqZWN0LCBtYWlubHkgdXNlZCB0byBhdm9pZCBgaW5zdGFuY2VvZmAgY2hlY2tzXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy50eXBlID0gQ09OU1QuU0hBUEVTLkNJUkM7XG59XG5cbkNpcmNsZS5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBDaXJjbGU7XG5tb2R1bGUuZXhwb3J0cyA9IENpcmNsZTtcblxuLyoqXG4gKiBDcmVhdGVzIGEgY2xvbmUgb2YgdGhpcyBDaXJjbGUgaW5zdGFuY2VcbiAqXG4gKiBAcmV0dXJuIHtQSVhJLkNpcmNsZX0gYSBjb3B5IG9mIHRoZSBDaXJjbGVcbiAqL1xuQ2lyY2xlLnByb3RvdHlwZS5jbG9uZSA9IGZ1bmN0aW9uICgpXG57XG4gICAgcmV0dXJuIG5ldyBDaXJjbGUodGhpcy54LCB0aGlzLnksIHRoaXMucmFkaXVzKTtcbn07XG5cbi8qKlxuICogQ2hlY2tzIHdoZXRoZXIgdGhlIHggYW5kIHkgY29vcmRpbmF0ZXMgZ2l2ZW4gYXJlIGNvbnRhaW5lZCB3aXRoaW4gdGhpcyBjaXJjbGVcbiAqXG4gKiBAcGFyYW0geCB7bnVtYmVyfSBUaGUgWCBjb29yZGluYXRlIG9mIHRoZSBwb2ludCB0byB0ZXN0XG4gKiBAcGFyYW0geSB7bnVtYmVyfSBUaGUgWSBjb29yZGluYXRlIG9mIHRoZSBwb2ludCB0byB0ZXN0XG4gKiBAcmV0dXJuIHtib29sZWFufSBXaGV0aGVyIHRoZSB4L3kgY29vcmRpbmF0ZXMgYXJlIHdpdGhpbiB0aGlzIENpcmNsZVxuICovXG5DaXJjbGUucHJvdG90eXBlLmNvbnRhaW5zID0gZnVuY3Rpb24gKHgsIHkpXG57XG4gICAgaWYgKHRoaXMucmFkaXVzIDw9IDApXG4gICAge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgdmFyIGR4ID0gKHRoaXMueCAtIHgpLFxuICAgICAgICBkeSA9ICh0aGlzLnkgLSB5KSxcbiAgICAgICAgcjIgPSB0aGlzLnJhZGl1cyAqIHRoaXMucmFkaXVzO1xuXG4gICAgZHggKj0gZHg7XG4gICAgZHkgKj0gZHk7XG5cbiAgICByZXR1cm4gKGR4ICsgZHkgPD0gcjIpO1xufTtcblxuLyoqXG4qIFJldHVybnMgdGhlIGZyYW1pbmcgcmVjdGFuZ2xlIG9mIHRoZSBjaXJjbGUgYXMgYSBSZWN0YW5nbGUgb2JqZWN0XG4qXG4qIEByZXR1cm4ge1BJWEkuUmVjdGFuZ2xlfSB0aGUgZnJhbWluZyByZWN0YW5nbGVcbiovXG5DaXJjbGUucHJvdG90eXBlLmdldEJvdW5kcyA9IGZ1bmN0aW9uICgpXG57XG4gICAgcmV0dXJuIG5ldyBSZWN0YW5nbGUodGhpcy54IC0gdGhpcy5yYWRpdXMsIHRoaXMueSAtIHRoaXMucmFkaXVzLCB0aGlzLnJhZGl1cyAqIDIsIHRoaXMucmFkaXVzICogMik7XG59O1xuIiwidmFyIFJlY3RhbmdsZSA9IHJlcXVpcmUoJy4vUmVjdGFuZ2xlJyksXG4gICAgQ09OU1QgPSByZXF1aXJlKCcuLi8uLi9jb25zdCcpO1xuXG4vKipcbiAqIFRoZSBFbGxpcHNlIG9iamVjdCBjYW4gYmUgdXNlZCB0byBzcGVjaWZ5IGEgaGl0IGFyZWEgZm9yIGRpc3BsYXlPYmplY3RzXG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIHgge251bWJlcn0gVGhlIFggY29vcmRpbmF0ZSBvZiB0aGUgY2VudGVyIG9mIHRoZSBlbGxpcHNlXG4gKiBAcGFyYW0geSB7bnVtYmVyfSBUaGUgWSBjb29yZGluYXRlIG9mIHRoZSBjZW50ZXIgb2YgdGhlIGVsbGlwc2VcbiAqIEBwYXJhbSB3aWR0aCB7bnVtYmVyfSBUaGUgaGFsZiB3aWR0aCBvZiB0aGlzIGVsbGlwc2VcbiAqIEBwYXJhbSBoZWlnaHQge251bWJlcn0gVGhlIGhhbGYgaGVpZ2h0IG9mIHRoaXMgZWxsaXBzZVxuICovXG5mdW5jdGlvbiBFbGxpcHNlKHgsIHksIHdpZHRoLCBoZWlnaHQpXG57XG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDBcbiAgICAgKi9cbiAgICB0aGlzLnggPSB4IHx8IDA7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMFxuICAgICAqL1xuICAgIHRoaXMueSA9IHkgfHwgMDtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAwXG4gICAgICovXG4gICAgdGhpcy53aWR0aCA9IHdpZHRoIHx8IDA7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMFxuICAgICAqL1xuICAgIHRoaXMuaGVpZ2h0ID0gaGVpZ2h0IHx8IDA7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgdHlwZSBvZiB0aGUgb2JqZWN0LCBtYWlubHkgdXNlZCB0byBhdm9pZCBgaW5zdGFuY2VvZmAgY2hlY2tzXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy50eXBlID0gQ09OU1QuU0hBUEVTLkVMSVA7XG59XG5cbkVsbGlwc2UucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gRWxsaXBzZTtcbm1vZHVsZS5leHBvcnRzID0gRWxsaXBzZTtcblxuLyoqXG4gKiBDcmVhdGVzIGEgY2xvbmUgb2YgdGhpcyBFbGxpcHNlIGluc3RhbmNlXG4gKlxuICogQHJldHVybiB7UElYSS5FbGxpcHNlfSBhIGNvcHkgb2YgdGhlIGVsbGlwc2VcbiAqL1xuRWxsaXBzZS5wcm90b3R5cGUuY2xvbmUgPSBmdW5jdGlvbiAoKVxue1xuICAgIHJldHVybiBuZXcgRWxsaXBzZSh0aGlzLngsIHRoaXMueSwgdGhpcy53aWR0aCwgdGhpcy5oZWlnaHQpO1xufTtcblxuLyoqXG4gKiBDaGVja3Mgd2hldGhlciB0aGUgeCBhbmQgeSBjb29yZGluYXRlcyBnaXZlbiBhcmUgY29udGFpbmVkIHdpdGhpbiB0aGlzIGVsbGlwc2VcbiAqXG4gKiBAcGFyYW0geCB7bnVtYmVyfSBUaGUgWCBjb29yZGluYXRlIG9mIHRoZSBwb2ludCB0byB0ZXN0XG4gKiBAcGFyYW0geSB7bnVtYmVyfSBUaGUgWSBjb29yZGluYXRlIG9mIHRoZSBwb2ludCB0byB0ZXN0XG4gKiBAcmV0dXJuIHtib29sZWFufSBXaGV0aGVyIHRoZSB4L3kgY29vcmRzIGFyZSB3aXRoaW4gdGhpcyBlbGxpcHNlXG4gKi9cbkVsbGlwc2UucHJvdG90eXBlLmNvbnRhaW5zID0gZnVuY3Rpb24gKHgsIHkpXG57XG4gICAgaWYgKHRoaXMud2lkdGggPD0gMCB8fCB0aGlzLmhlaWdodCA8PSAwKVxuICAgIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIC8vbm9ybWFsaXplIHRoZSBjb29yZHMgdG8gYW4gZWxsaXBzZSB3aXRoIGNlbnRlciAwLDBcbiAgICB2YXIgbm9ybXggPSAoKHggLSB0aGlzLngpIC8gdGhpcy53aWR0aCksXG4gICAgICAgIG5vcm15ID0gKCh5IC0gdGhpcy55KSAvIHRoaXMuaGVpZ2h0KTtcblxuICAgIG5vcm14ICo9IG5vcm14O1xuICAgIG5vcm15ICo9IG5vcm15O1xuXG4gICAgcmV0dXJuIChub3JteCArIG5vcm15IDw9IDEpO1xufTtcblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBmcmFtaW5nIHJlY3RhbmdsZSBvZiB0aGUgZWxsaXBzZSBhcyBhIFJlY3RhbmdsZSBvYmplY3RcbiAqXG4gKiBAcmV0dXJuIHtQSVhJLlJlY3RhbmdsZX0gdGhlIGZyYW1pbmcgcmVjdGFuZ2xlXG4gKi9cbkVsbGlwc2UucHJvdG90eXBlLmdldEJvdW5kcyA9IGZ1bmN0aW9uICgpXG57XG4gICAgcmV0dXJuIG5ldyBSZWN0YW5nbGUodGhpcy54IC0gdGhpcy53aWR0aCwgdGhpcy55IC0gdGhpcy5oZWlnaHQsIHRoaXMud2lkdGgsIHRoaXMuaGVpZ2h0KTtcbn07XG4iLCJ2YXIgUG9pbnQgPSByZXF1aXJlKCcuLi9Qb2ludCcpLFxuICAgIENPTlNUID0gcmVxdWlyZSgnLi4vLi4vY29uc3QnKTtcblxuLyoqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gcG9pbnRzIHtQSVhJLlBvaW50W118bnVtYmVyW118Li4uUElYSS5Qb2ludHwuLi5udW1iZXJ9IFRoaXMgY2FuIGJlIGFuIGFycmF5IG9mIFBvaW50cyB0aGF0IGZvcm0gdGhlIHBvbHlnb24sXG4gKiAgICAgIGEgZmxhdCBhcnJheSBvZiBudW1iZXJzIHRoYXQgd2lsbCBiZSBpbnRlcnByZXRlZCBhcyBbeCx5LCB4LHksIC4uLl0sIG9yIHRoZSBhcmd1bWVudHMgcGFzc2VkIGNhbiBiZVxuICogICAgICBhbGwgdGhlIHBvaW50cyBvZiB0aGUgcG9seWdvbiBlLmcuIGBuZXcgUElYSS5Qb2x5Z29uKG5ldyBQSVhJLlBvaW50KCksIG5ldyBQSVhJLlBvaW50KCksIC4uLilgLCBvciB0aGVcbiAqICAgICAgYXJndW1lbnRzIHBhc3NlZCBjYW4gYmUgZmxhdCB4LHkgdmFsdWVzIGUuZy4gYG5ldyBQb2x5Z29uKHgseSwgeCx5LCB4LHksIC4uLilgIHdoZXJlIGB4YCBhbmQgYHlgIGFyZVxuICogICAgICBOdW1iZXJzLlxuICovXG5mdW5jdGlvbiBQb2x5Z29uKHBvaW50c18pXG57XG4gICAgLy8gcHJldmVudHMgYW4gYXJndW1lbnQgYXNzaWdubWVudCBkZW9wdFxuICAgIC8vIHNlZSBzZWN0aW9uIDMuMTogaHR0cHM6Ly9naXRodWIuY29tL3BldGthYW50b25vdi9ibHVlYmlyZC93aWtpL09wdGltaXphdGlvbi1raWxsZXJzIzMtbWFuYWdpbmctYXJndW1lbnRzXG4gICAgdmFyIHBvaW50cyA9IHBvaW50c187XG5cbiAgICAvL2lmIHBvaW50cyBpc24ndCBhbiBhcnJheSwgdXNlIGFyZ3VtZW50cyBhcyB0aGUgYXJyYXlcbiAgICBpZiAoIUFycmF5LmlzQXJyYXkocG9pbnRzKSlcbiAgICB7XG4gICAgICAgIC8vIHByZXZlbnRzIGFuIGFyZ3VtZW50IGxlYWsgZGVvcHRcbiAgICAgICAgLy8gc2VlIHNlY3Rpb24gMy4yOiBodHRwczovL2dpdGh1Yi5jb20vcGV0a2FhbnRvbm92L2JsdWViaXJkL3dpa2kvT3B0aW1pemF0aW9uLWtpbGxlcnMjMy1tYW5hZ2luZy1hcmd1bWVudHNcbiAgICAgICAgcG9pbnRzID0gbmV3IEFycmF5KGFyZ3VtZW50cy5sZW5ndGgpO1xuXG4gICAgICAgIGZvciAodmFyIGEgPSAwOyBhIDwgcG9pbnRzLmxlbmd0aDsgKythKSB7XG4gICAgICAgICAgICBwb2ludHNbYV0gPSBhcmd1bWVudHNbYV07XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBpZiB0aGlzIGlzIGFuIGFycmF5IG9mIHBvaW50cywgY29udmVydCBpdCB0byBhIGZsYXQgYXJyYXkgb2YgbnVtYmVyc1xuICAgIGlmIChwb2ludHNbMF0gaW5zdGFuY2VvZiBQb2ludClcbiAgICB7XG4gICAgICAgIHZhciBwID0gW107XG4gICAgICAgIGZvciAodmFyIGkgPSAwLCBpbCA9IHBvaW50cy5sZW5ndGg7IGkgPCBpbDsgaSsrKVxuICAgICAgICB7XG4gICAgICAgICAgICBwLnB1c2gocG9pbnRzW2ldLngsIHBvaW50c1tpXS55KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHBvaW50cyA9IHA7XG4gICAgfVxuXG4gICAgdGhpcy5jbG9zZWQgPSB0cnVlO1xuXG4gICAgLyoqXG4gICAgICogQW4gYXJyYXkgb2YgdGhlIHBvaW50cyBvZiB0aGlzIHBvbHlnb25cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcltdfVxuICAgICAqL1xuICAgIHRoaXMucG9pbnRzID0gcG9pbnRzO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHR5cGUgb2YgdGhlIG9iamVjdCwgbWFpbmx5IHVzZWQgdG8gYXZvaWQgYGluc3RhbmNlb2ZgIGNoZWNrc1xuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMudHlwZSA9IENPTlNULlNIQVBFUy5QT0xZO1xufVxuXG5Qb2x5Z29uLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFBvbHlnb247XG5tb2R1bGUuZXhwb3J0cyA9IFBvbHlnb247XG5cbi8qKlxuICogQ3JlYXRlcyBhIGNsb25lIG9mIHRoaXMgcG9seWdvblxuICpcbiAqIEByZXR1cm4ge1BJWEkuUG9seWdvbn0gYSBjb3B5IG9mIHRoZSBwb2x5Z29uXG4gKi9cblBvbHlnb24ucHJvdG90eXBlLmNsb25lID0gZnVuY3Rpb24gKClcbntcbiAgICByZXR1cm4gbmV3IFBvbHlnb24odGhpcy5wb2ludHMuc2xpY2UoKSk7XG59O1xuXG4vKipcbiAqIENoZWNrcyB3aGV0aGVyIHRoZSB4IGFuZCB5IGNvb3JkaW5hdGVzIHBhc3NlZCB0byB0aGlzIGZ1bmN0aW9uIGFyZSBjb250YWluZWQgd2l0aGluIHRoaXMgcG9seWdvblxuICpcbiAqIEBwYXJhbSB4IHtudW1iZXJ9IFRoZSBYIGNvb3JkaW5hdGUgb2YgdGhlIHBvaW50IHRvIHRlc3RcbiAqIEBwYXJhbSB5IHtudW1iZXJ9IFRoZSBZIGNvb3JkaW5hdGUgb2YgdGhlIHBvaW50IHRvIHRlc3RcbiAqIEByZXR1cm4ge2Jvb2xlYW59IFdoZXRoZXIgdGhlIHgveSBjb29yZGluYXRlcyBhcmUgd2l0aGluIHRoaXMgcG9seWdvblxuICovXG5Qb2x5Z29uLnByb3RvdHlwZS5jb250YWlucyA9IGZ1bmN0aW9uICh4LCB5KVxue1xuICAgIHZhciBpbnNpZGUgPSBmYWxzZTtcblxuICAgIC8vIHVzZSBzb21lIHJheWNhc3RpbmcgdG8gdGVzdCBoaXRzXG4gICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL3N1YnN0YWNrL3BvaW50LWluLXBvbHlnb24vYmxvYi9tYXN0ZXIvaW5kZXguanNcbiAgICB2YXIgbGVuZ3RoID0gdGhpcy5wb2ludHMubGVuZ3RoIC8gMjtcblxuICAgIGZvciAodmFyIGkgPSAwLCBqID0gbGVuZ3RoIC0gMTsgaSA8IGxlbmd0aDsgaiA9IGkrKylcbiAgICB7XG4gICAgICAgIHZhciB4aSA9IHRoaXMucG9pbnRzW2kgKiAyXSwgeWkgPSB0aGlzLnBvaW50c1tpICogMiArIDFdLFxuICAgICAgICAgICAgeGogPSB0aGlzLnBvaW50c1tqICogMl0sIHlqID0gdGhpcy5wb2ludHNbaiAqIDIgKyAxXSxcbiAgICAgICAgICAgIGludGVyc2VjdCA9ICgoeWkgPiB5KSAhPT0gKHlqID4geSkpICYmICh4IDwgKHhqIC0geGkpICogKHkgLSB5aSkgLyAoeWogLSB5aSkgKyB4aSk7XG5cbiAgICAgICAgaWYgKGludGVyc2VjdClcbiAgICAgICAge1xuICAgICAgICAgICAgaW5zaWRlID0gIWluc2lkZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBpbnNpZGU7XG59O1xuIiwidmFyIENPTlNUID0gcmVxdWlyZSgnLi4vLi4vY29uc3QnKTtcblxuLyoqXG4gKiB0aGUgUmVjdGFuZ2xlIG9iamVjdCBpcyBhbiBhcmVhIGRlZmluZWQgYnkgaXRzIHBvc2l0aW9uLCBhcyBpbmRpY2F0ZWQgYnkgaXRzIHRvcC1sZWZ0IGNvcm5lciBwb2ludCAoeCwgeSkgYW5kIGJ5IGl0cyB3aWR0aCBhbmQgaXRzIGhlaWdodC5cbiAqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0geCB7bnVtYmVyfSBUaGUgWCBjb29yZGluYXRlIG9mIHRoZSB1cHBlci1sZWZ0IGNvcm5lciBvZiB0aGUgcmVjdGFuZ2xlXG4gKiBAcGFyYW0geSB7bnVtYmVyfSBUaGUgWSBjb29yZGluYXRlIG9mIHRoZSB1cHBlci1sZWZ0IGNvcm5lciBvZiB0aGUgcmVjdGFuZ2xlXG4gKiBAcGFyYW0gd2lkdGgge251bWJlcn0gVGhlIG92ZXJhbGwgd2lkdGggb2YgdGhpcyByZWN0YW5nbGVcbiAqIEBwYXJhbSBoZWlnaHQge251bWJlcn0gVGhlIG92ZXJhbGwgaGVpZ2h0IG9mIHRoaXMgcmVjdGFuZ2xlXG4gKi9cbmZ1bmN0aW9uIFJlY3RhbmdsZSh4LCB5LCB3aWR0aCwgaGVpZ2h0KVxue1xuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAwXG4gICAgICovXG4gICAgdGhpcy54ID0geCB8fCAwO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDBcbiAgICAgKi9cbiAgICB0aGlzLnkgPSB5IHx8IDA7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMFxuICAgICAqL1xuICAgIHRoaXMud2lkdGggPSB3aWR0aCB8fCAwO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDBcbiAgICAgKi9cbiAgICB0aGlzLmhlaWdodCA9IGhlaWdodCB8fCAwO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHR5cGUgb2YgdGhlIG9iamVjdCwgbWFpbmx5IHVzZWQgdG8gYXZvaWQgYGluc3RhbmNlb2ZgIGNoZWNrc1xuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMudHlwZSA9IENPTlNULlNIQVBFUy5SRUNUO1xufVxuXG5SZWN0YW5nbGUucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gUmVjdGFuZ2xlO1xubW9kdWxlLmV4cG9ydHMgPSBSZWN0YW5nbGU7XG5cbi8qKlxuICogQSBjb25zdGFudCBlbXB0eSByZWN0YW5nbGUuXG4gKlxuICogQHN0YXRpY1xuICogQGNvbnN0YW50XG4gKi9cblJlY3RhbmdsZS5FTVBUWSA9IG5ldyBSZWN0YW5nbGUoMCwgMCwgMCwgMCk7XG5cblxuLyoqXG4gKiBDcmVhdGVzIGEgY2xvbmUgb2YgdGhpcyBSZWN0YW5nbGVcbiAqXG4gKiBAcmV0dXJuIHtQSVhJLlJlY3RhbmdsZX0gYSBjb3B5IG9mIHRoZSByZWN0YW5nbGVcbiAqL1xuUmVjdGFuZ2xlLnByb3RvdHlwZS5jbG9uZSA9IGZ1bmN0aW9uICgpXG57XG4gICAgcmV0dXJuIG5ldyBSZWN0YW5nbGUodGhpcy54LCB0aGlzLnksIHRoaXMud2lkdGgsIHRoaXMuaGVpZ2h0KTtcbn07XG5cbi8qKlxuICogQ2hlY2tzIHdoZXRoZXIgdGhlIHggYW5kIHkgY29vcmRpbmF0ZXMgZ2l2ZW4gYXJlIGNvbnRhaW5lZCB3aXRoaW4gdGhpcyBSZWN0YW5nbGVcbiAqXG4gKiBAcGFyYW0geCB7bnVtYmVyfSBUaGUgWCBjb29yZGluYXRlIG9mIHRoZSBwb2ludCB0byB0ZXN0XG4gKiBAcGFyYW0geSB7bnVtYmVyfSBUaGUgWSBjb29yZGluYXRlIG9mIHRoZSBwb2ludCB0byB0ZXN0XG4gKiBAcmV0dXJuIHtib29sZWFufSBXaGV0aGVyIHRoZSB4L3kgY29vcmRpbmF0ZXMgYXJlIHdpdGhpbiB0aGlzIFJlY3RhbmdsZVxuICovXG5SZWN0YW5nbGUucHJvdG90eXBlLmNvbnRhaW5zID0gZnVuY3Rpb24gKHgsIHkpXG57XG4gICAgaWYgKHRoaXMud2lkdGggPD0gMCB8fCB0aGlzLmhlaWdodCA8PSAwKVxuICAgIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGlmICh4ID49IHRoaXMueCAmJiB4IDwgdGhpcy54ICsgdGhpcy53aWR0aClcbiAgICB7XG4gICAgICAgIGlmICh5ID49IHRoaXMueSAmJiB5IDwgdGhpcy55ICsgdGhpcy5oZWlnaHQpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xufTtcbiIsInZhciBDT05TVCA9IHJlcXVpcmUoJy4uLy4uL2NvbnN0Jyk7XG5cbi8qKlxuICogVGhlIFJvdW5kZWQgUmVjdGFuZ2xlIG9iamVjdCBpcyBhbiBhcmVhIHRoYXQgaGFzIG5pY2Ugcm91bmRlZCBjb3JuZXJzLCBhcyBpbmRpY2F0ZWQgYnkgaXRzIHRvcC1sZWZ0IGNvcm5lciBwb2ludCAoeCwgeSkgYW5kIGJ5IGl0cyB3aWR0aCBhbmQgaXRzIGhlaWdodCBhbmQgaXRzIHJhZGl1cy5cbiAqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0geCB7bnVtYmVyfSBUaGUgWCBjb29yZGluYXRlIG9mIHRoZSB1cHBlci1sZWZ0IGNvcm5lciBvZiB0aGUgcm91bmRlZCByZWN0YW5nbGVcbiAqIEBwYXJhbSB5IHtudW1iZXJ9IFRoZSBZIGNvb3JkaW5hdGUgb2YgdGhlIHVwcGVyLWxlZnQgY29ybmVyIG9mIHRoZSByb3VuZGVkIHJlY3RhbmdsZVxuICogQHBhcmFtIHdpZHRoIHtudW1iZXJ9IFRoZSBvdmVyYWxsIHdpZHRoIG9mIHRoaXMgcm91bmRlZCByZWN0YW5nbGVcbiAqIEBwYXJhbSBoZWlnaHQge251bWJlcn0gVGhlIG92ZXJhbGwgaGVpZ2h0IG9mIHRoaXMgcm91bmRlZCByZWN0YW5nbGVcbiAqIEBwYXJhbSByYWRpdXMge251bWJlcn0gQ29udHJvbHMgdGhlIHJhZGl1cyBvZiB0aGUgcm91bmRlZCBjb3JuZXJzXG4gKi9cbmZ1bmN0aW9uIFJvdW5kZWRSZWN0YW5nbGUoeCwgeSwgd2lkdGgsIGhlaWdodCwgcmFkaXVzKVxue1xuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAwXG4gICAgICovXG4gICAgdGhpcy54ID0geCB8fCAwO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDBcbiAgICAgKi9cbiAgICB0aGlzLnkgPSB5IHx8IDA7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMFxuICAgICAqL1xuICAgIHRoaXMud2lkdGggPSB3aWR0aCB8fCAwO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDBcbiAgICAgKi9cbiAgICB0aGlzLmhlaWdodCA9IGhlaWdodCB8fCAwO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDIwXG4gICAgICovXG4gICAgdGhpcy5yYWRpdXMgPSByYWRpdXMgfHwgMjA7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgdHlwZSBvZiB0aGUgb2JqZWN0LCBtYWlubHkgdXNlZCB0byBhdm9pZCBgaW5zdGFuY2VvZmAgY2hlY2tzXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy50eXBlID0gQ09OU1QuU0hBUEVTLlJSRUM7XG59XG5cblJvdW5kZWRSZWN0YW5nbGUucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gUm91bmRlZFJlY3RhbmdsZTtcbm1vZHVsZS5leHBvcnRzID0gUm91bmRlZFJlY3RhbmdsZTtcblxuLyoqXG4gKiBDcmVhdGVzIGEgY2xvbmUgb2YgdGhpcyBSb3VuZGVkIFJlY3RhbmdsZVxuICpcbiAqIEByZXR1cm4ge1BJWEkuUm91bmRlZFJlY3RhbmdsZX0gYSBjb3B5IG9mIHRoZSByb3VuZGVkIHJlY3RhbmdsZVxuICovXG5Sb3VuZGVkUmVjdGFuZ2xlLnByb3RvdHlwZS5jbG9uZSA9IGZ1bmN0aW9uICgpXG57XG4gICAgcmV0dXJuIG5ldyBSb3VuZGVkUmVjdGFuZ2xlKHRoaXMueCwgdGhpcy55LCB0aGlzLndpZHRoLCB0aGlzLmhlaWdodCwgdGhpcy5yYWRpdXMpO1xufTtcblxuLyoqXG4gKiBDaGVja3Mgd2hldGhlciB0aGUgeCBhbmQgeSBjb29yZGluYXRlcyBnaXZlbiBhcmUgY29udGFpbmVkIHdpdGhpbiB0aGlzIFJvdW5kZWQgUmVjdGFuZ2xlXG4gKlxuICogQHBhcmFtIHgge251bWJlcn0gVGhlIFggY29vcmRpbmF0ZSBvZiB0aGUgcG9pbnQgdG8gdGVzdFxuICogQHBhcmFtIHkge251bWJlcn0gVGhlIFkgY29vcmRpbmF0ZSBvZiB0aGUgcG9pbnQgdG8gdGVzdFxuICogQHJldHVybiB7Ym9vbGVhbn0gV2hldGhlciB0aGUgeC95IGNvb3JkaW5hdGVzIGFyZSB3aXRoaW4gdGhpcyBSb3VuZGVkIFJlY3RhbmdsZVxuICovXG5Sb3VuZGVkUmVjdGFuZ2xlLnByb3RvdHlwZS5jb250YWlucyA9IGZ1bmN0aW9uICh4LCB5KVxue1xuICAgIGlmICh0aGlzLndpZHRoIDw9IDAgfHwgdGhpcy5oZWlnaHQgPD0gMClcbiAgICB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBpZiAoeCA+PSB0aGlzLnggJiYgeCA8PSB0aGlzLnggKyB0aGlzLndpZHRoKVxuICAgIHtcbiAgICAgICAgaWYgKHkgPj0gdGhpcy55ICYmIHkgPD0gdGhpcy55ICsgdGhpcy5oZWlnaHQpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xufTtcbiIsInZhciBDb250YWluZXIgPSByZXF1aXJlKCcuLi9kaXNwbGF5L0NvbnRhaW5lcicpLFxuICAgIENPTlNUID0gcmVxdWlyZSgnLi4vY29uc3QnKTtcblxuLyoqXG4gKiBUaGUgUGFydGljbGVDb250YWluZXIgY2xhc3MgaXMgYSByZWFsbHkgZmFzdCB2ZXJzaW9uIG9mIHRoZSBDb250YWluZXIgYnVpbHQgc29sZWx5IGZvciBzcGVlZCxcbiAqIHNvIHVzZSB3aGVuIHlvdSBuZWVkIGEgbG90IG9mIHNwcml0ZXMgb3IgcGFydGljbGVzLiBUaGUgdHJhZGVvZmYgb2YgdGhlIFBhcnRpY2xlQ29udGFpbmVyIGlzIHRoYXQgYWR2YW5jZWRcbiAqIGZ1bmN0aW9uYWxpdHkgd2lsbCBub3Qgd29yay4gUGFydGljbGVDb250YWluZXIgaW1wbGVtZW50cyBvbmx5IHRoZSBiYXNpYyBvYmplY3QgdHJhbnNmb3JtIChwb3NpdGlvbiwgc2NhbGUsIHJvdGF0aW9uKS5cbiAqIEFueSBvdGhlciBmdW5jdGlvbmFsaXR5IGxpa2UgdGludGluZywgbWFza2luZywgZXRjIHdpbGwgbm90IHdvcmsgb24gc3ByaXRlcyBpbiB0aGlzIGJhdGNoLlxuICpcbiAqIEl0J3MgZXh0cmVtZWx5IGVhc3kgdG8gdXNlIDpcbiAqXG4gKiBgYGBqc1xuICogdmFyIGNvbnRhaW5lciA9IG5ldyBQYXJ0aWNsZUNvbnRhaW5lcigpO1xuICpcbiAqIGZvciAodmFyIGkgPSAwOyBpIDwgMTAwOyArK2kpXG4gKiB7XG4gKiAgICAgdmFyIHNwcml0ZSA9IG5ldyBQSVhJLlNwcml0ZS5mcm9tSW1hZ2UoXCJteUltYWdlLnBuZ1wiKTtcbiAqICAgICBjb250YWluZXIuYWRkQ2hpbGQoc3ByaXRlKTtcbiAqIH1cbiAqIGBgYFxuICpcbiAqIEFuZCBoZXJlIHlvdSBoYXZlIGEgaHVuZHJlZCBzcHJpdGVzIHRoYXQgd2lsbCBiZSByZW5kZXJlciBhdCB0aGUgc3BlZWQgb2YgbGlnaHQuXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLkNvbnRhaW5lclxuICogQG1lbWJlcm9mIFBJWElcbiAqIEBwYXJhbSBbbWF4U2l6ZT0xNTAwMF0ge251bWJlcn0gVGhlIG1heGltdW0gbnVtYmVyIG9mIHBhcnRpY2xlcyB0aGF0IGNhbiBiZSByZW5kZXJlciBieSB0aGUgY29udGFpbmVyLlxuICogQHBhcmFtIFtwcm9wZXJ0aWVzXSB7b2JqZWN0fSBUaGUgcHJvcGVydGllcyBvZiBjaGlsZHJlbiB0aGF0IHNob3VsZCBiZSB1cGxvYWRlZCB0byB0aGUgZ3B1IGFuZCBhcHBsaWVkLlxuICogQHBhcmFtIFtwcm9wZXJ0aWVzLnNjYWxlPWZhbHNlXSB7Ym9vbGVhbn0gV2hlbiB0cnVlLCBzY2FsZSBiZSB1cGxvYWRlZCBhbmQgYXBwbGllZC5cbiAqIEBwYXJhbSBbcHJvcGVydGllcy5wb3NpdGlvbj10cnVlXSB7Ym9vbGVhbn0gV2hlbiB0cnVlLCBwb3NpdGlvbiBiZSB1cGxvYWRlZCBhbmQgYXBwbGllZC5cbiAqIEBwYXJhbSBbcHJvcGVydGllcy5yb3RhdGlvbj1mYWxzZV0ge2Jvb2xlYW59IFdoZW4gdHJ1ZSwgcm90YXRpb24gYmUgdXBsb2FkZWQgYW5kIGFwcGxpZWQuXG4gKiBAcGFyYW0gW3Byb3BlcnRpZXMudXZzPWZhbHNlXSB7Ym9vbGVhbn0gV2hlbiB0cnVlLCB1dnMgYmUgdXBsb2FkZWQgYW5kIGFwcGxpZWQuXG4gKiBAcGFyYW0gW3Byb3BlcnRpZXMuYWxwaGE9ZmFsc2VdIHtib29sZWFufSBXaGVuIHRydWUsIGFscGhhIGJlIHVwbG9hZGVkIGFuZCBhcHBsaWVkLlxuICogQHBhcmFtIFtiYXRjaFNpemU9MTUwMDBdIHtudW1iZXJ9IE51bWJlciBvZiBwYXJ0aWNsZXMgcGVyIGJhdGNoLlxuICovXG5mdW5jdGlvbiBQYXJ0aWNsZUNvbnRhaW5lcihtYXhTaXplLCBwcm9wZXJ0aWVzLCBiYXRjaFNpemUpXG57XG4gICAgQ29udGFpbmVyLmNhbGwodGhpcyk7XG5cbiAgICBiYXRjaFNpemUgPSBiYXRjaFNpemUgfHwgMTUwMDA7IC8vQ09OU1QuU1BSSVRFX0JBVENIX1NJWkU7IC8vIDIwMDAgaXMgYSBuaWNlIGJhbGFuY2UgYmV0d2VlbiBtb2JpbGUgLyBkZXNrdG9wXG4gICAgbWF4U2l6ZSA9IG1heFNpemUgfHwgMTUwMDA7XG5cbiAgICAvLyBNYWtpbmcgc3VyZSB0aGUgYmF0Y2ggc2l6ZSBpcyB2YWxpZFxuICAgIC8vIDY1NTM1IGlzIG1heCB2ZXJ0ZXggaW5kZXggaW4gdGhlIGluZGV4IGJ1ZmZlciAoc2VlIFBhcnRpY2xlUmVuZGVyZXIpXG4gICAgLy8gc28gbWF4IG51bWJlciBvZiBwYXJ0aWNsZXMgaXMgNjU1MzYgLyA0ID0gMTYzODRcbiAgICB2YXIgbWF4QmF0Y2hTaXplID0gMTYzODQ7XG4gICAgaWYgKGJhdGNoU2l6ZSA+IG1heEJhdGNoU2l6ZSkge1xuICAgICAgICBiYXRjaFNpemUgPSBtYXhCYXRjaFNpemU7XG4gICAgfVxuXG4gICAgaWYgKGJhdGNoU2l6ZSA+IG1heFNpemUpIHtcbiAgICAgICAgYmF0Y2hTaXplID0gbWF4U2l6ZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTZXQgcHJvcGVydGllcyB0byBiZSBkeW5hbWljICh0cnVlKSAvIHN0YXRpYyAoZmFsc2UpXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFuW119XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9wcm9wZXJ0aWVzID0gW2ZhbHNlLCB0cnVlLCBmYWxzZSwgZmFsc2UsIGZhbHNlXTtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX21heFNpemUgPSBtYXhTaXplO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fYmF0Y2hTaXplID0gYmF0Y2hTaXplO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7V2ViR0xCdWZmZXJ9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9idWZmZXJzID0gbnVsbDtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX2J1ZmZlclRvVXBkYXRlID0gMDtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICpcbiAgICAgKi9cbiAgICB0aGlzLmludGVyYWN0aXZlQ2hpbGRyZW4gPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBibGVuZCBtb2RlIHRvIGJlIGFwcGxpZWQgdG8gdGhlIHNwcml0ZS4gQXBwbHkgYSB2YWx1ZSBvZiBgUElYSS5CTEVORF9NT0RFUy5OT1JNQUxgIHRvIHJlc2V0IHRoZSBibGVuZCBtb2RlLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IFBJWEkuQkxFTkRfTU9ERVMuTk9STUFMXG4gICAgICogQHNlZSBQSVhJLkJMRU5EX01PREVTXG4gICAgICovXG4gICAgdGhpcy5ibGVuZE1vZGUgPSBDT05TVC5CTEVORF9NT0RFUy5OT1JNQUw7XG5cbiAgICAvKipcbiAgICAgKiBVc2VkIGZvciBjYW52YXMgcmVuZGVyZXJpbmcuIElmIHRydWUgdGhlbiB0aGUgZWxlbWVudHMgd2lsbCBiZSBwb3NpdGlvbmVkIGF0IHRoZSBuZWFyZXN0IHBpeGVsLiBUaGlzIHByb3ZpZGVzIGEgbmljZSBzcGVlZCBib29zdC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICogQGRlZmF1bHQgdHJ1ZTtcbiAgICAgKi9cbiAgICB0aGlzLnJvdW5kUGl4ZWxzID0gdHJ1ZTtcblxuICAgIHRoaXMuc2V0UHJvcGVydGllcyhwcm9wZXJ0aWVzKTtcbn1cblxuUGFydGljbGVDb250YWluZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShDb250YWluZXIucHJvdG90eXBlKTtcblBhcnRpY2xlQ29udGFpbmVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFBhcnRpY2xlQ29udGFpbmVyO1xubW9kdWxlLmV4cG9ydHMgPSBQYXJ0aWNsZUNvbnRhaW5lcjtcblxuLyoqXG4gKiBTZXRzIHRoZSBwcml2YXRlIHByb3BlcnRpZXMgYXJyYXkgdG8gZHluYW1pYyAvIHN0YXRpYyBiYXNlZCBvbiB0aGUgcGFzc2VkIHByb3BlcnRpZXMgb2JqZWN0XG4gKlxuICogQHBhcmFtIHByb3BlcnRpZXMge29iamVjdH0gVGhlIHByb3BlcnRpZXMgdG8gYmUgdXBsb2FkZWRcbiAqL1xuUGFydGljbGVDb250YWluZXIucHJvdG90eXBlLnNldFByb3BlcnRpZXMgPSBmdW5jdGlvbihwcm9wZXJ0aWVzKVxue1xuICAgIGlmICggcHJvcGVydGllcyApIHtcbiAgICAgICAgdGhpcy5fcHJvcGVydGllc1swXSA9ICdzY2FsZScgaW4gcHJvcGVydGllcyA/ICEhcHJvcGVydGllcy5zY2FsZSA6IHRoaXMuX3Byb3BlcnRpZXNbMF07XG4gICAgICAgIHRoaXMuX3Byb3BlcnRpZXNbMV0gPSAncG9zaXRpb24nIGluIHByb3BlcnRpZXMgPyAhIXByb3BlcnRpZXMucG9zaXRpb24gOiB0aGlzLl9wcm9wZXJ0aWVzWzFdO1xuICAgICAgICB0aGlzLl9wcm9wZXJ0aWVzWzJdID0gJ3JvdGF0aW9uJyBpbiBwcm9wZXJ0aWVzID8gISFwcm9wZXJ0aWVzLnJvdGF0aW9uIDogdGhpcy5fcHJvcGVydGllc1syXTtcbiAgICAgICAgdGhpcy5fcHJvcGVydGllc1szXSA9ICd1dnMnIGluIHByb3BlcnRpZXMgPyAhIXByb3BlcnRpZXMudXZzIDogdGhpcy5fcHJvcGVydGllc1szXTtcbiAgICAgICAgdGhpcy5fcHJvcGVydGllc1s0XSA9ICdhbHBoYScgaW4gcHJvcGVydGllcyA/ICEhcHJvcGVydGllcy5hbHBoYSA6IHRoaXMuX3Byb3BlcnRpZXNbNF07XG4gICAgfVxufTtcblxuLyoqXG4gKiBVcGRhdGVzIHRoZSBvYmplY3QgdHJhbnNmb3JtIGZvciByZW5kZXJpbmdcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5QYXJ0aWNsZUNvbnRhaW5lci5wcm90b3R5cGUudXBkYXRlVHJhbnNmb3JtID0gZnVuY3Rpb24gKClcbntcblxuICAgIC8vIFRPRE8gZG9uJ3QgbmVlZCB0byFcbiAgICB0aGlzLmRpc3BsYXlPYmplY3RVcGRhdGVUcmFuc2Zvcm0oKTtcbiAgICAvLyAgUElYSS5Db250YWluZXIucHJvdG90eXBlLnVwZGF0ZVRyYW5zZm9ybS5jYWxsKCB0aGlzICk7XG59O1xuXG4vKipcbiAqIFJlbmRlcnMgdGhlIGNvbnRhaW5lciB1c2luZyB0aGUgV2ViR0wgcmVuZGVyZXJcbiAqXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcn0gVGhlIHdlYmdsIHJlbmRlcmVyXG4gKiBAcHJpdmF0ZVxuICovXG5QYXJ0aWNsZUNvbnRhaW5lci5wcm90b3R5cGUucmVuZGVyV2ViR0wgPSBmdW5jdGlvbiAocmVuZGVyZXIpXG57XG4gICAgaWYgKCF0aGlzLnZpc2libGUgfHwgdGhpcy53b3JsZEFscGhhIDw9IDAgfHwgIXRoaXMuY2hpbGRyZW4ubGVuZ3RoIHx8ICF0aGlzLnJlbmRlcmFibGUpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgcmVuZGVyZXIuc2V0T2JqZWN0UmVuZGVyZXIoIHJlbmRlcmVyLnBsdWdpbnMucGFydGljbGUgKTtcbiAgICByZW5kZXJlci5wbHVnaW5zLnBhcnRpY2xlLnJlbmRlciggdGhpcyApO1xufTtcblxuLyoqXG4gKiBTZXQgdGhlIGZsYWcgdGhhdCBzdGF0aWMgZGF0YSBzaG91bGQgYmUgdXBkYXRlZCB0byB0cnVlXG4gKlxuICogQHByaXZhdGVcbiAqL1xuUGFydGljbGVDb250YWluZXIucHJvdG90eXBlLm9uQ2hpbGRyZW5DaGFuZ2UgPSBmdW5jdGlvbiAoc21hbGxlc3RDaGlsZEluZGV4KVxue1xuICAgIHZhciBidWZmZXJJbmRleCA9IE1hdGguZmxvb3Ioc21hbGxlc3RDaGlsZEluZGV4IC8gdGhpcy5fYmF0Y2hTaXplKTtcbiAgICBpZiAoYnVmZmVySW5kZXggPCB0aGlzLl9idWZmZXJUb1VwZGF0ZSkge1xuICAgICAgICB0aGlzLl9idWZmZXJUb1VwZGF0ZSA9IGJ1ZmZlckluZGV4O1xuICAgIH1cbn07XG5cbi8qKlxuICogUmVuZGVycyB0aGUgb2JqZWN0IHVzaW5nIHRoZSBDYW52YXMgcmVuZGVyZXJcbiAqXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuQ2FudmFzUmVuZGVyZXJ9IFRoZSBjYW52YXMgcmVuZGVyZXJcbiAqIEBwcml2YXRlXG4gKi9cblBhcnRpY2xlQ29udGFpbmVyLnByb3RvdHlwZS5yZW5kZXJDYW52YXMgPSBmdW5jdGlvbiAocmVuZGVyZXIpXG57XG4gICAgaWYgKCF0aGlzLnZpc2libGUgfHwgdGhpcy53b3JsZEFscGhhIDw9IDAgfHwgIXRoaXMuY2hpbGRyZW4ubGVuZ3RoIHx8ICF0aGlzLnJlbmRlcmFibGUpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFyIGNvbnRleHQgPSByZW5kZXJlci5jb250ZXh0O1xuICAgIHZhciB0cmFuc2Zvcm0gPSB0aGlzLndvcmxkVHJhbnNmb3JtO1xuICAgIHZhciBpc1JvdGF0ZWQgPSB0cnVlO1xuXG4gICAgdmFyIHBvc2l0aW9uWCA9IDA7XG4gICAgdmFyIHBvc2l0aW9uWSA9IDA7XG5cbiAgICB2YXIgZmluYWxXaWR0aCA9IDA7XG4gICAgdmFyIGZpbmFsSGVpZ2h0ID0gMDtcblxuICAgIHZhciBjb21wb3NpdGVPcGVyYXRpb24gPSByZW5kZXJlci5ibGVuZE1vZGVzW3RoaXMuYmxlbmRNb2RlXTtcbiAgICBpZiAoY29tcG9zaXRlT3BlcmF0aW9uICE9PSBjb250ZXh0Lmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbilcbiAgICB7XG4gICAgICAgIGNvbnRleHQuZ2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uID0gY29tcG9zaXRlT3BlcmF0aW9uO1xuICAgIH1cblxuICAgIGNvbnRleHQuZ2xvYmFsQWxwaGEgPSB0aGlzLndvcmxkQWxwaGE7XG5cbiAgICB0aGlzLmRpc3BsYXlPYmplY3RVcGRhdGVUcmFuc2Zvcm0oKTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5jaGlsZHJlbi5sZW5ndGg7ICsraSlcbiAgICB7XG4gICAgICAgIHZhciBjaGlsZCA9IHRoaXMuY2hpbGRyZW5baV07XG5cbiAgICAgICAgaWYgKCFjaGlsZC52aXNpYmxlKVxuICAgICAgICB7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBmcmFtZSA9IGNoaWxkLnRleHR1cmUuZnJhbWU7XG5cbiAgICAgICAgY29udGV4dC5nbG9iYWxBbHBoYSA9IHRoaXMud29ybGRBbHBoYSAqIGNoaWxkLmFscGhhO1xuXG4gICAgICAgIGlmIChjaGlsZC5yb3RhdGlvbiAlIChNYXRoLlBJICogMikgPT09IDApXG4gICAgICAgIHtcbiAgICAgICAgICAgIC8vIHRoaXMgaXMgdGhlIGZhc3Rlc3QgIHdheSB0byBvcHRpbWlzZSEgLSBpZiByb3RhdGlvbiBpcyAwIHRoZW4gd2UgY2FuIGF2b2lkIGFueSBraW5kIG9mIHNldFRyYW5zZm9ybSBjYWxsXG4gICAgICAgICAgICBpZiAoaXNSb3RhdGVkKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGNvbnRleHQuc2V0VHJhbnNmb3JtKFxuICAgICAgICAgICAgICAgICAgICB0cmFuc2Zvcm0uYSxcbiAgICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtLmIsXG4gICAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybS5jLFxuICAgICAgICAgICAgICAgICAgICB0cmFuc2Zvcm0uZCxcbiAgICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtLnR4LFxuICAgICAgICAgICAgICAgICAgICB0cmFuc2Zvcm0udHlcbiAgICAgICAgICAgICAgICApO1xuXG4gICAgICAgICAgICAgICAgaXNSb3RhdGVkID0gZmFsc2U7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHBvc2l0aW9uWCA9ICgoY2hpbGQuYW5jaG9yLngpICogKC1mcmFtZS53aWR0aCAqIGNoaWxkLnNjYWxlLngpICsgY2hpbGQucG9zaXRpb24ueCAgKyAwLjUpO1xuICAgICAgICAgICAgcG9zaXRpb25ZID0gKChjaGlsZC5hbmNob3IueSkgKiAoLWZyYW1lLmhlaWdodCAqIGNoaWxkLnNjYWxlLnkpICsgY2hpbGQucG9zaXRpb24ueSAgKyAwLjUpO1xuXG4gICAgICAgICAgICBmaW5hbFdpZHRoID0gZnJhbWUud2lkdGggKiBjaGlsZC5zY2FsZS54O1xuICAgICAgICAgICAgZmluYWxIZWlnaHQgPSBmcmFtZS5oZWlnaHQgKiBjaGlsZC5zY2FsZS55O1xuXG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgICBpZiAoIWlzUm90YXRlZClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBpc1JvdGF0ZWQgPSB0cnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjaGlsZC5kaXNwbGF5T2JqZWN0VXBkYXRlVHJhbnNmb3JtKCk7XG5cbiAgICAgICAgICAgIHZhciBjaGlsZFRyYW5zZm9ybSA9IGNoaWxkLndvcmxkVHJhbnNmb3JtO1xuXG4gICAgICAgICAgICBpZiAocmVuZGVyZXIucm91bmRQaXhlbHMpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29udGV4dC5zZXRUcmFuc2Zvcm0oXG4gICAgICAgICAgICAgICAgICAgIGNoaWxkVHJhbnNmb3JtLmEsXG4gICAgICAgICAgICAgICAgICAgIGNoaWxkVHJhbnNmb3JtLmIsXG4gICAgICAgICAgICAgICAgICAgIGNoaWxkVHJhbnNmb3JtLmMsXG4gICAgICAgICAgICAgICAgICAgIGNoaWxkVHJhbnNmb3JtLmQsXG4gICAgICAgICAgICAgICAgICAgIGNoaWxkVHJhbnNmb3JtLnR4IHwgMCxcbiAgICAgICAgICAgICAgICAgICAgY2hpbGRUcmFuc2Zvcm0udHkgfCAwXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb250ZXh0LnNldFRyYW5zZm9ybShcbiAgICAgICAgICAgICAgICAgICAgY2hpbGRUcmFuc2Zvcm0uYSxcbiAgICAgICAgICAgICAgICAgICAgY2hpbGRUcmFuc2Zvcm0uYixcbiAgICAgICAgICAgICAgICAgICAgY2hpbGRUcmFuc2Zvcm0uYyxcbiAgICAgICAgICAgICAgICAgICAgY2hpbGRUcmFuc2Zvcm0uZCxcbiAgICAgICAgICAgICAgICAgICAgY2hpbGRUcmFuc2Zvcm0udHgsXG4gICAgICAgICAgICAgICAgICAgIGNoaWxkVHJhbnNmb3JtLnR5XG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcG9zaXRpb25YID0gKChjaGlsZC5hbmNob3IueCkgKiAoLWZyYW1lLndpZHRoKSArIDAuNSk7XG4gICAgICAgICAgICBwb3NpdGlvblkgPSAoKGNoaWxkLmFuY2hvci55KSAqICgtZnJhbWUuaGVpZ2h0KSArIDAuNSk7XG5cbiAgICAgICAgICAgIGZpbmFsV2lkdGggPSBmcmFtZS53aWR0aDtcbiAgICAgICAgICAgIGZpbmFsSGVpZ2h0ID0gZnJhbWUuaGVpZ2h0O1xuICAgICAgICB9XG5cbiAgICAgICAgY29udGV4dC5kcmF3SW1hZ2UoXG4gICAgICAgICAgICBjaGlsZC50ZXh0dXJlLmJhc2VUZXh0dXJlLnNvdXJjZSxcbiAgICAgICAgICAgIGZyYW1lLngsXG4gICAgICAgICAgICBmcmFtZS55LFxuICAgICAgICAgICAgZnJhbWUud2lkdGgsXG4gICAgICAgICAgICBmcmFtZS5oZWlnaHQsXG4gICAgICAgICAgICBwb3NpdGlvblgsXG4gICAgICAgICAgICBwb3NpdGlvblksXG4gICAgICAgICAgICBmaW5hbFdpZHRoLFxuICAgICAgICAgICAgZmluYWxIZWlnaHRcbiAgICAgICAgKTtcbiAgICB9XG59O1xuXG4vKipcbiAqIERlc3Ryb3lzIHRoZSBjb250YWluZXJcbiAqXG4gKiBAcGFyYW0gW2Rlc3Ryb3lDaGlsZHJlbj1mYWxzZV0ge2Jvb2xlYW59IGlmIHNldCB0byB0cnVlLCBhbGwgdGhlIGNoaWxkcmVuIHdpbGwgaGF2ZSB0aGVpciBkZXN0cm95IG1ldGhvZCBjYWxsZWQgYXMgd2VsbFxuICovXG5QYXJ0aWNsZUNvbnRhaW5lci5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uICgpIHtcbiAgICBDb250YWluZXIucHJvdG90eXBlLmRlc3Ryb3kuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcblxuICAgIGlmICh0aGlzLl9idWZmZXJzKSB7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5fYnVmZmVycy5sZW5ndGg7ICsraSkge1xuICAgICAgICAgICAgdGhpcy5fYnVmZmVyc1tpXS5kZXN0cm95KCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLl9wcm9wZXJ0aWVzID0gbnVsbDtcbiAgICB0aGlzLl9idWZmZXJzID0gbnVsbDtcbn07XG4iLCJcbi8qKlxuICogQGF1dGhvciBNYXQgR3JvdmVzXG4gKlxuICogQmlnIHRoYW5rcyB0byB0aGUgdmVyeSBjbGV2ZXIgTWF0dCBEZXNMYXVyaWVycyA8bWF0dGRlc2w+IGh0dHBzOi8vZ2l0aHViLmNvbS9tYXR0ZGVzbC9cbiAqIGZvciBjcmVhdGluZyB0aGUgb3JpZ2luYWwgcGl4aSB2ZXJzaW9uIVxuICogQWxzbyBhIHRoYW5rcyB0byBodHRwczovL2dpdGh1Yi5jb20vYmNoZXZhbGllciBmb3IgdHdlYWtpbmcgdGhlIHRpbnQgYW5kIGFscGhhIHNvIHRoYXQgdGhleSBub3cgc2hhcmUgNCBieXRlcyBvbiB0aGUgdmVydGV4IGJ1ZmZlclxuICpcbiAqIEhlYXZpbHkgaW5zcGlyZWQgYnkgTGliR0RYJ3MgUGFydGljbGVCdWZmZXI6XG4gKiBodHRwczovL2dpdGh1Yi5jb20vbGliZ2R4L2xpYmdkeC9ibG9iL21hc3Rlci9nZHgvc3JjL2NvbS9iYWRsb2dpYy9nZHgvZ3JhcGhpY3MvZzJkL1BhcnRpY2xlQnVmZmVyLmphdmFcbiAqL1xuXG4vKipcbiAqIFRoZSBwYXJ0aWNsZSBidWZmZXIgbWFuYWdlcyB0aGUgc3RhdGljIGFuZCBkeW5hbWljIGJ1ZmZlcnMgZm9yIGEgcGFydGljbGUgY29udGFpbmVyLlxuICpcbiAqIEBjbGFzc1xuICogQHByaXZhdGVcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKi9cbmZ1bmN0aW9uIFBhcnRpY2xlQnVmZmVyKGdsLCBwcm9wZXJ0aWVzLCBkeW5hbWljUHJvcGVydHlGbGFncywgc2l6ZSlcbntcbiAgICAvKipcbiAgICAgKiBUaGUgY3VycmVudCBXZWJHTCBkcmF3aW5nIGNvbnRleHQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtXZWJHTFJlbmRlcmluZ0NvbnRleHR9XG4gICAgICovXG4gICAgdGhpcy5nbCA9IGdsO1xuXG4gICAgLyoqXG4gICAgICogU2l6ZSBvZiBhIHNpbmdsZSB2ZXJ0ZXguXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy52ZXJ0U2l6ZSA9IDI7XG5cbiAgICAvKipcbiAgICAgKiBTaXplIG9mIGEgc2luZ2xlIHZlcnRleCBpbiBieXRlcy5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLnZlcnRCeXRlU2l6ZSA9IHRoaXMudmVydFNpemUgKiA0O1xuXG4gICAgLyoqXG4gICAgICogVGhlIG51bWJlciBvZiBwYXJ0aWNsZXMgdGhlIGJ1ZmZlciBjYW4gaG9sZFxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMuc2l6ZSA9IHNpemU7XG5cbiAgICAvKipcbiAgICAgKiBBIGxpc3Qgb2YgdGhlIHByb3BlcnRpZXMgdGhhdCBhcmUgZHluYW1pYy5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge29iamVjdFtdfVxuICAgICAqL1xuICAgIHRoaXMuZHluYW1pY1Byb3BlcnRpZXMgPSBbXTtcblxuICAgIC8qKlxuICAgICAqIEEgbGlzdCBvZiB0aGUgcHJvcGVydGllcyB0aGF0IGFyZSBzdGF0aWMuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtvYmplY3RbXX1cbiAgICAgKi9cbiAgICB0aGlzLnN0YXRpY1Byb3BlcnRpZXMgPSBbXTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcGVydGllcy5sZW5ndGg7IGkrKylcbiAgICB7XG4gICAgICAgIHZhciBwcm9wZXJ0eSA9IHByb3BlcnRpZXNbaV07XG5cbiAgICAgICAgaWYoZHluYW1pY1Byb3BlcnR5RmxhZ3NbaV0pXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuZHluYW1pY1Byb3BlcnRpZXMucHVzaChwcm9wZXJ0eSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnN0YXRpY1Byb3BlcnRpZXMucHVzaChwcm9wZXJ0eSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLnN0YXRpY1N0cmlkZSA9IDA7XG4gICAgdGhpcy5zdGF0aWNCdWZmZXIgPSBudWxsO1xuICAgIHRoaXMuc3RhdGljRGF0YSA9IG51bGw7XG5cbiAgICB0aGlzLmR5bmFtaWNTdHJpZGUgPSAwO1xuICAgIHRoaXMuZHluYW1pY0J1ZmZlciA9IG51bGw7XG4gICAgdGhpcy5keW5hbWljRGF0YSA9IG51bGw7XG5cbiAgICB0aGlzLmluaXRCdWZmZXJzKCk7XG5cbn1cblxuUGFydGljbGVCdWZmZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gUGFydGljbGVCdWZmZXI7XG5tb2R1bGUuZXhwb3J0cyA9IFBhcnRpY2xlQnVmZmVyO1xuXG4vKipcbiAqIFNldHMgdXAgdGhlIHJlbmRlcmVyIGNvbnRleHQgYW5kIG5lY2Vzc2FyeSBidWZmZXJzLlxuICpcbiAqIEBwcml2YXRlXG4gKi9cblBhcnRpY2xlQnVmZmVyLnByb3RvdHlwZS5pbml0QnVmZmVycyA9IGZ1bmN0aW9uICgpXG57XG4gICAgdmFyIGdsID0gdGhpcy5nbDtcbiAgICB2YXIgaTtcbiAgICB2YXIgcHJvcGVydHk7XG5cbiAgICB2YXIgZHluYW1pY09mZnNldCA9IDA7XG4gICAgdGhpcy5keW5hbWljU3RyaWRlID0gMDtcblxuICAgIGZvciAoaSA9IDA7IGkgPCB0aGlzLmR5bmFtaWNQcm9wZXJ0aWVzLmxlbmd0aDsgaSsrKVxuICAgIHtcbiAgICAgICAgcHJvcGVydHkgPSB0aGlzLmR5bmFtaWNQcm9wZXJ0aWVzW2ldO1xuXG4gICAgICAgIHByb3BlcnR5Lm9mZnNldCA9IGR5bmFtaWNPZmZzZXQ7XG4gICAgICAgIGR5bmFtaWNPZmZzZXQgKz0gcHJvcGVydHkuc2l6ZTtcbiAgICAgICAgdGhpcy5keW5hbWljU3RyaWRlICs9IHByb3BlcnR5LnNpemU7XG4gICAgfVxuXG4gICAgdGhpcy5keW5hbWljRGF0YSA9IG5ldyBGbG9hdDMyQXJyYXkoIHRoaXMuc2l6ZSAqIHRoaXMuZHluYW1pY1N0cmlkZSAqIDQpO1xuICAgIHRoaXMuZHluYW1pY0J1ZmZlciA9IGdsLmNyZWF0ZUJ1ZmZlcigpO1xuXG4gICAgZ2wuYmluZEJ1ZmZlcihnbC5BUlJBWV9CVUZGRVIsIHRoaXMuZHluYW1pY0J1ZmZlcik7XG4gICAgZ2wuYnVmZmVyRGF0YShnbC5BUlJBWV9CVUZGRVIsIHRoaXMuZHluYW1pY0RhdGEsIGdsLkRZTkFNSUNfRFJBVyk7XG5cblxuICAgIC8vIHN0YXRpYyAvL1xuICAgIHZhciBzdGF0aWNPZmZzZXQgPSAwO1xuICAgIHRoaXMuc3RhdGljU3RyaWRlID0gMDtcblxuICAgIGZvciAoaSA9IDA7IGkgPCB0aGlzLnN0YXRpY1Byb3BlcnRpZXMubGVuZ3RoOyBpKyspXG4gICAge1xuICAgICAgICBwcm9wZXJ0eSA9IHRoaXMuc3RhdGljUHJvcGVydGllc1tpXTtcblxuICAgICAgICBwcm9wZXJ0eS5vZmZzZXQgPSBzdGF0aWNPZmZzZXQ7XG4gICAgICAgIHN0YXRpY09mZnNldCArPSBwcm9wZXJ0eS5zaXplO1xuICAgICAgICB0aGlzLnN0YXRpY1N0cmlkZSArPSBwcm9wZXJ0eS5zaXplO1xuICAgIH1cblxuICAgIHRoaXMuc3RhdGljRGF0YSA9IG5ldyBGbG9hdDMyQXJyYXkoIHRoaXMuc2l6ZSAqIHRoaXMuc3RhdGljU3RyaWRlICogNCk7XG4gICAgdGhpcy5zdGF0aWNCdWZmZXIgPSBnbC5jcmVhdGVCdWZmZXIoKTtcblxuICAgIGdsLmJpbmRCdWZmZXIoZ2wuQVJSQVlfQlVGRkVSLCB0aGlzLnN0YXRpY0J1ZmZlcik7XG4gICAgZ2wuYnVmZmVyRGF0YShnbC5BUlJBWV9CVUZGRVIsIHRoaXMuc3RhdGljRGF0YSwgZ2wuRFlOQU1JQ19EUkFXKTtcbn07XG5cbi8qKlxuICogVXBsb2FkcyB0aGUgZHluYW1pYyBwcm9wZXJ0aWVzLlxuICpcbiAqL1xuUGFydGljbGVCdWZmZXIucHJvdG90eXBlLnVwbG9hZER5bmFtaWMgPSBmdW5jdGlvbihjaGlsZHJlbiwgc3RhcnRJbmRleCwgYW1vdW50KVxue1xuICAgIHZhciBnbCA9IHRoaXMuZ2w7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuZHluYW1pY1Byb3BlcnRpZXMubGVuZ3RoOyBpKyspXG4gICAge1xuICAgICAgICB2YXIgcHJvcGVydHkgPSB0aGlzLmR5bmFtaWNQcm9wZXJ0aWVzW2ldO1xuICAgICAgICBwcm9wZXJ0eS51cGxvYWRGdW5jdGlvbihjaGlsZHJlbiwgc3RhcnRJbmRleCwgYW1vdW50LCB0aGlzLmR5bmFtaWNEYXRhLCB0aGlzLmR5bmFtaWNTdHJpZGUsIHByb3BlcnR5Lm9mZnNldCk7XG4gICAgfVxuXG4gICAgZ2wuYmluZEJ1ZmZlcihnbC5BUlJBWV9CVUZGRVIsIHRoaXMuZHluYW1pY0J1ZmZlcik7XG4gICAgZ2wuYnVmZmVyU3ViRGF0YShnbC5BUlJBWV9CVUZGRVIsIDAsIHRoaXMuZHluYW1pY0RhdGEpO1xufTtcblxuLyoqXG4gKiBVcGxvYWRzIHRoZSBzdGF0aWMgcHJvcGVydGllcy5cbiAqXG4gKi9cblBhcnRpY2xlQnVmZmVyLnByb3RvdHlwZS51cGxvYWRTdGF0aWMgPSBmdW5jdGlvbihjaGlsZHJlbiwgc3RhcnRJbmRleCwgYW1vdW50KVxue1xuICAgIHZhciBnbCA9IHRoaXMuZ2w7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuc3RhdGljUHJvcGVydGllcy5sZW5ndGg7IGkrKylcbiAgICB7XG4gICAgICAgIHZhciBwcm9wZXJ0eSA9IHRoaXMuc3RhdGljUHJvcGVydGllc1tpXTtcbiAgICAgICAgcHJvcGVydHkudXBsb2FkRnVuY3Rpb24oY2hpbGRyZW4sIHN0YXJ0SW5kZXgsIGFtb3VudCwgdGhpcy5zdGF0aWNEYXRhLCB0aGlzLnN0YXRpY1N0cmlkZSwgcHJvcGVydHkub2Zmc2V0KTtcbiAgICB9XG5cbiAgICBnbC5iaW5kQnVmZmVyKGdsLkFSUkFZX0JVRkZFUiwgdGhpcy5zdGF0aWNCdWZmZXIpO1xuICAgIGdsLmJ1ZmZlclN1YkRhdGEoZ2wuQVJSQVlfQlVGRkVSLCAwLCB0aGlzLnN0YXRpY0RhdGEpO1xufTtcblxuLyoqXG4gKiBCaW5kcyB0aGUgYnVmZmVycyB0byB0aGUgR1BVXG4gKlxuICovXG5QYXJ0aWNsZUJ1ZmZlci5wcm90b3R5cGUuYmluZCA9IGZ1bmN0aW9uICgpXG57XG4gICAgdmFyIGdsID0gdGhpcy5nbDtcbiAgICB2YXIgaSwgcHJvcGVydHk7XG5cbiAgICBnbC5iaW5kQnVmZmVyKGdsLkFSUkFZX0JVRkZFUiwgdGhpcy5keW5hbWljQnVmZmVyKTtcblxuICAgIGZvciAoaSA9IDA7IGkgPCB0aGlzLmR5bmFtaWNQcm9wZXJ0aWVzLmxlbmd0aDsgaSsrKVxuICAgIHtcbiAgICAgICAgcHJvcGVydHkgPSB0aGlzLmR5bmFtaWNQcm9wZXJ0aWVzW2ldO1xuICAgICAgICBnbC52ZXJ0ZXhBdHRyaWJQb2ludGVyKHByb3BlcnR5LmF0dHJpYnV0ZSwgcHJvcGVydHkuc2l6ZSwgZ2wuRkxPQVQsIGZhbHNlLCB0aGlzLmR5bmFtaWNTdHJpZGUgKiA0LCBwcm9wZXJ0eS5vZmZzZXQgKiA0KTtcbiAgICB9XG5cbiAgICBnbC5iaW5kQnVmZmVyKGdsLkFSUkFZX0JVRkZFUiwgdGhpcy5zdGF0aWNCdWZmZXIpO1xuXG4gICAgZm9yIChpID0gMDsgaSA8IHRoaXMuc3RhdGljUHJvcGVydGllcy5sZW5ndGg7IGkrKylcbiAgICB7XG4gICAgICAgIHByb3BlcnR5ID0gdGhpcy5zdGF0aWNQcm9wZXJ0aWVzW2ldO1xuICAgICAgICBnbC52ZXJ0ZXhBdHRyaWJQb2ludGVyKHByb3BlcnR5LmF0dHJpYnV0ZSwgcHJvcGVydHkuc2l6ZSwgZ2wuRkxPQVQsIGZhbHNlLCB0aGlzLnN0YXRpY1N0cmlkZSAqIDQsIHByb3BlcnR5Lm9mZnNldCAqIDQpO1xuICAgIH1cbn07XG5cbi8qKlxuICogRGVzdHJveXMgdGhlIFBhcnRpY2xlQnVmZmVyLlxuICpcbiAqL1xuUGFydGljbGVCdWZmZXIucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoKVxue1xuICAgIHRoaXMuZHluYW1pY1Byb3BlcnRpZXMgPSBudWxsO1xuICAgIHRoaXMuZHluYW1pY0RhdGEgPSBudWxsO1xuICAgIHRoaXMuZ2wuZGVsZXRlQnVmZmVyKHRoaXMuZHluYW1pY0J1ZmZlcik7XG5cbiAgICB0aGlzLnN0YXRpY1Byb3BlcnRpZXMgPSBudWxsO1xuICAgIHRoaXMuc3RhdGljRGF0YSA9IG51bGw7XG4gICAgdGhpcy5nbC5kZWxldGVCdWZmZXIodGhpcy5zdGF0aWNCdWZmZXIpO1xufTtcbiIsInZhciBPYmplY3RSZW5kZXJlciA9IHJlcXVpcmUoJy4uLy4uL3JlbmRlcmVycy93ZWJnbC91dGlscy9PYmplY3RSZW5kZXJlcicpLFxuICAgIFdlYkdMUmVuZGVyZXIgPSByZXF1aXJlKCcuLi8uLi9yZW5kZXJlcnMvd2ViZ2wvV2ViR0xSZW5kZXJlcicpLFxuICAgIFBhcnRpY2xlU2hhZGVyID0gcmVxdWlyZSgnLi9QYXJ0aWNsZVNoYWRlcicpLFxuICAgIFBhcnRpY2xlQnVmZmVyID0gcmVxdWlyZSgnLi9QYXJ0aWNsZUJ1ZmZlcicpLFxuICAgIG1hdGggICAgICAgICAgICA9IHJlcXVpcmUoJy4uLy4uL21hdGgnKTtcblxuLyoqXG4gKiBAYXV0aG9yIE1hdCBHcm92ZXNcbiAqXG4gKiBCaWcgdGhhbmtzIHRvIHRoZSB2ZXJ5IGNsZXZlciBNYXR0IERlc0xhdXJpZXJzIDxtYXR0ZGVzbD4gaHR0cHM6Ly9naXRodWIuY29tL21hdHRkZXNsL1xuICogZm9yIGNyZWF0aW5nIHRoZSBvcmlnaW5hbCBwaXhpIHZlcnNpb24hXG4gKiBBbHNvIGEgdGhhbmtzIHRvIGh0dHBzOi8vZ2l0aHViLmNvbS9iY2hldmFsaWVyIGZvciB0d2Vha2luZyB0aGUgdGludCBhbmQgYWxwaGEgc28gdGhhdCB0aGV5IG5vdyBzaGFyZSA0IGJ5dGVzIG9uIHRoZSB2ZXJ0ZXggYnVmZmVyXG4gKlxuICogSGVhdmlseSBpbnNwaXJlZCBieSBMaWJHRFgncyBQYXJ0aWNsZVJlbmRlcmVyOlxuICogaHR0cHM6Ly9naXRodWIuY29tL2xpYmdkeC9saWJnZHgvYmxvYi9tYXN0ZXIvZ2R4L3NyYy9jb20vYmFkbG9naWMvZ2R4L2dyYXBoaWNzL2cyZC9QYXJ0aWNsZVJlbmRlcmVyLmphdmFcbiAqL1xuXG4vKipcbiAqXG4gKiBAY2xhc3NcbiAqIEBwcml2YXRlXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLldlYkdMUmVuZGVyZXJ9IFRoZSByZW5kZXJlciB0aGlzIHNwcml0ZSBiYXRjaCB3b3JrcyBmb3IuXG4gKi9cbmZ1bmN0aW9uIFBhcnRpY2xlUmVuZGVyZXIocmVuZGVyZXIpXG57XG4gICAgT2JqZWN0UmVuZGVyZXIuY2FsbCh0aGlzLCByZW5kZXJlcik7XG5cbiAgICAvLyA2NTUzNSBpcyBtYXggdmVydGV4IGluZGV4IGluIHRoZSBpbmRleCBidWZmZXIgKHNlZSBQYXJ0aWNsZVJlbmRlcmVyKVxuICAgIC8vIHNvIG1heCBudW1iZXIgb2YgcGFydGljbGVzIGlzIDY1NTM2IC8gNCA9IDE2Mzg0XG4gICAgLy8gYW5kIG1heCBudW1iZXIgb2YgZWxlbWVudCBpbiB0aGUgaW5kZXggYnVmZmVyIGlzIDE2Mzg0ICogNiA9IDk4MzA0XG4gICAgLy8gQ3JlYXRpbmcgYSBmdWxsIGluZGV4IGJ1ZmZlciwgb3ZlcmhlYWQgaXMgOTgzMDQgKiAyID0gMTk2S29cbiAgICB2YXIgbnVtSW5kaWNlcyA9IDk4MzA0O1xuXG4gICAgLyoqXG4gICAgICogSG9sZHMgdGhlIGluZGljZXNcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1VpbnQxNkFycmF5fVxuICAgICAqL1xuICAgIHRoaXMuaW5kaWNlcyA9IG5ldyBVaW50MTZBcnJheShudW1JbmRpY2VzKTtcblxuICAgIGZvciAodmFyIGk9MCwgaj0wOyBpIDwgbnVtSW5kaWNlczsgaSArPSA2LCBqICs9IDQpXG4gICAge1xuICAgICAgICB0aGlzLmluZGljZXNbaSArIDBdID0gaiArIDA7XG4gICAgICAgIHRoaXMuaW5kaWNlc1tpICsgMV0gPSBqICsgMTtcbiAgICAgICAgdGhpcy5pbmRpY2VzW2kgKyAyXSA9IGogKyAyO1xuICAgICAgICB0aGlzLmluZGljZXNbaSArIDNdID0gaiArIDA7XG4gICAgICAgIHRoaXMuaW5kaWNlc1tpICsgNF0gPSBqICsgMjtcbiAgICAgICAgdGhpcy5pbmRpY2VzW2kgKyA1XSA9IGogKyAzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoZSBkZWZhdWx0IHNoYWRlciB0aGF0IGlzIHVzZWQgaWYgYSBzcHJpdGUgZG9lc24ndCBoYXZlIGEgbW9yZSBzcGVjaWZpYyBvbmUuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlNoYWRlcn1cbiAgICAgKi9cbiAgICB0aGlzLnNoYWRlciA9IG51bGw7XG5cbiAgICB0aGlzLmluZGV4QnVmZmVyID0gbnVsbDtcblxuICAgIHRoaXMucHJvcGVydGllcyA9IG51bGw7XG5cbiAgICB0aGlzLnRlbXBNYXRyaXggPSBuZXcgbWF0aC5NYXRyaXgoKTtcbn1cblxuUGFydGljbGVSZW5kZXJlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKE9iamVjdFJlbmRlcmVyLnByb3RvdHlwZSk7XG5QYXJ0aWNsZVJlbmRlcmVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFBhcnRpY2xlUmVuZGVyZXI7XG5tb2R1bGUuZXhwb3J0cyA9IFBhcnRpY2xlUmVuZGVyZXI7XG5cbldlYkdMUmVuZGVyZXIucmVnaXN0ZXJQbHVnaW4oJ3BhcnRpY2xlJywgUGFydGljbGVSZW5kZXJlcik7XG5cbi8qKlxuICogV2hlbiB0aGVyZSBpcyBhIFdlYkdMIGNvbnRleHQgY2hhbmdlXG4gKlxuICogQHByaXZhdGVcbiAqL1xuUGFydGljbGVSZW5kZXJlci5wcm90b3R5cGUub25Db250ZXh0Q2hhbmdlID0gZnVuY3Rpb24gKClcbntcbiAgICB2YXIgZ2wgPSB0aGlzLnJlbmRlcmVyLmdsO1xuXG4gICAgLy8gc2V0dXAgZGVmYXVsdCBzaGFkZXJcbiAgICB0aGlzLnNoYWRlciA9IG5ldyBQYXJ0aWNsZVNoYWRlcih0aGlzLnJlbmRlcmVyLnNoYWRlck1hbmFnZXIpO1xuXG4gICAgdGhpcy5pbmRleEJ1ZmZlciA9IGdsLmNyZWF0ZUJ1ZmZlcigpO1xuXG4gICAgLy8gNjU1MzUgaXMgbWF4IGluZGV4LCBzbyA2NTUzNSAvIDYgPSAxMDkyMi5cblxuICAgIC8vdXBsb2FkIHRoZSBpbmRleCBkYXRhXG4gICAgZ2wuYmluZEJ1ZmZlcihnbC5FTEVNRU5UX0FSUkFZX0JVRkZFUiwgdGhpcy5pbmRleEJ1ZmZlcik7XG4gICAgZ2wuYnVmZmVyRGF0YShnbC5FTEVNRU5UX0FSUkFZX0JVRkZFUiwgdGhpcy5pbmRpY2VzLCBnbC5TVEFUSUNfRFJBVyk7XG5cbiAgICB0aGlzLnByb3BlcnRpZXMgPSBbXG4gICAgICAgIC8vIHZlcnRpY2VzRGF0YVxuICAgICAgICB7XG4gICAgICAgICAgICBhdHRyaWJ1dGU6dGhpcy5zaGFkZXIuYXR0cmlidXRlcy5hVmVydGV4UG9zaXRpb24sXG4gICAgICAgICAgICBzaXplOjIsXG4gICAgICAgICAgICB1cGxvYWRGdW5jdGlvbjp0aGlzLnVwbG9hZFZlcnRpY2VzLFxuICAgICAgICAgICAgb2Zmc2V0OjBcbiAgICAgICAgfSxcbiAgICAgICAgLy8gcG9zaXRpb25EYXRhXG4gICAgICAgIHtcbiAgICAgICAgICAgIGF0dHJpYnV0ZTp0aGlzLnNoYWRlci5hdHRyaWJ1dGVzLmFQb3NpdGlvbkNvb3JkLFxuICAgICAgICAgICAgc2l6ZToyLFxuICAgICAgICAgICAgdXBsb2FkRnVuY3Rpb246dGhpcy51cGxvYWRQb3NpdGlvbixcbiAgICAgICAgICAgIG9mZnNldDowXG4gICAgICAgIH0sXG4gICAgICAgIC8vIHJvdGF0aW9uRGF0YVxuICAgICAgICB7XG4gICAgICAgICAgICBhdHRyaWJ1dGU6dGhpcy5zaGFkZXIuYXR0cmlidXRlcy5hUm90YXRpb24sXG4gICAgICAgICAgICBzaXplOjEsXG4gICAgICAgICAgICB1cGxvYWRGdW5jdGlvbjp0aGlzLnVwbG9hZFJvdGF0aW9uLFxuICAgICAgICAgICAgb2Zmc2V0OjBcbiAgICAgICAgfSxcbiAgICAgICAgLy8gdXZzRGF0YVxuICAgICAgICB7XG4gICAgICAgICAgICBhdHRyaWJ1dGU6dGhpcy5zaGFkZXIuYXR0cmlidXRlcy5hVGV4dHVyZUNvb3JkLFxuICAgICAgICAgICAgc2l6ZToyLFxuICAgICAgICAgICAgdXBsb2FkRnVuY3Rpb246dGhpcy51cGxvYWRVdnMsXG4gICAgICAgICAgICBvZmZzZXQ6MFxuICAgICAgICB9LFxuICAgICAgICAvLyBhbHBoYURhdGFcbiAgICAgICAge1xuICAgICAgICAgICAgYXR0cmlidXRlOnRoaXMuc2hhZGVyLmF0dHJpYnV0ZXMuYUNvbG9yLFxuICAgICAgICAgICAgc2l6ZToxLFxuICAgICAgICAgICAgdXBsb2FkRnVuY3Rpb246dGhpcy51cGxvYWRBbHBoYSxcbiAgICAgICAgICAgIG9mZnNldDowXG4gICAgICAgIH1cbiAgICBdO1xufTtcblxuLyoqXG4gKiBTdGFydHMgYSBuZXcgcGFydGljbGUgYmF0Y2guXG4gKlxuICovXG5QYXJ0aWNsZVJlbmRlcmVyLnByb3RvdHlwZS5zdGFydCA9IGZ1bmN0aW9uICgpXG57XG4gICAgdmFyIGdsID0gdGhpcy5yZW5kZXJlci5nbDtcblxuICAgIC8vIGJpbmQgdGhlIG1haW4gdGV4dHVyZVxuICAgIGdsLmFjdGl2ZVRleHR1cmUoZ2wuVEVYVFVSRTApO1xuXG4gICAgLy8gYmluZCB0aGUgYnVmZmVyc1xuXG4gICAgZ2wuYmluZEJ1ZmZlcihnbC5FTEVNRU5UX0FSUkFZX0JVRkZFUiwgdGhpcy5pbmRleEJ1ZmZlcik7XG5cbiAgICB2YXIgc2hhZGVyID0gdGhpcy5zaGFkZXI7XG5cbiAgICB0aGlzLnJlbmRlcmVyLnNoYWRlck1hbmFnZXIuc2V0U2hhZGVyKHNoYWRlcik7XG59O1xuXG5cbi8qKlxuICogUmVuZGVycyB0aGUgcGFydGljbGUgY29udGFpbmVyIG9iamVjdC5cbiAqXG4gKiBAcGFyYW0gY29udGFpbmVyIHtQSVhJLlBhcnRpY2xlQ29udGFpbmVyfSBUaGUgY29udGFpbmVyIHRvIHJlbmRlciB1c2luZyB0aGlzIFBhcnRpY2xlUmVuZGVyZXJcbiAqL1xuUGFydGljbGVSZW5kZXJlci5wcm90b3R5cGUucmVuZGVyID0gZnVuY3Rpb24gKGNvbnRhaW5lcilcbntcbiAgICB2YXIgY2hpbGRyZW4gPSBjb250YWluZXIuY2hpbGRyZW4sXG4gICAgICAgIHRvdGFsQ2hpbGRyZW4gPSBjaGlsZHJlbi5sZW5ndGgsXG4gICAgICAgIG1heFNpemUgPSBjb250YWluZXIuX21heFNpemUsXG4gICAgICAgIGJhdGNoU2l6ZSA9IGNvbnRhaW5lci5fYmF0Y2hTaXplO1xuXG4gICAgaWYodG90YWxDaGlsZHJlbiA9PT0gMClcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgZWxzZSBpZih0b3RhbENoaWxkcmVuID4gbWF4U2l6ZSlcbiAgICB7XG4gICAgICAgIHRvdGFsQ2hpbGRyZW4gPSBtYXhTaXplO1xuICAgIH1cblxuICAgIGlmKCFjb250YWluZXIuX2J1ZmZlcnMpXG4gICAge1xuICAgICAgICBjb250YWluZXIuX2J1ZmZlcnMgPSB0aGlzLmdlbmVyYXRlQnVmZmVycyggY29udGFpbmVyICk7XG4gICAgfVxuXG4gICAgLy8gaWYgdGhlIHV2cyBoYXZlIG5vdCB1cGRhdGVkIHRoZW4gbm8gcG9pbnQgcmVuZGVyaW5nIGp1c3QgeWV0IVxuICAgIHRoaXMucmVuZGVyZXIuYmxlbmRNb2RlTWFuYWdlci5zZXRCbGVuZE1vZGUoY29udGFpbmVyLmJsZW5kTW9kZSk7XG5cbiAgICB2YXIgZ2wgPSB0aGlzLnJlbmRlcmVyLmdsO1xuXG4gICAgdmFyIG0gPSAgY29udGFpbmVyLndvcmxkVHJhbnNmb3JtLmNvcHkoIHRoaXMudGVtcE1hdHJpeCApO1xuICAgIG0ucHJlcGVuZCggdGhpcy5yZW5kZXJlci5jdXJyZW50UmVuZGVyVGFyZ2V0LnByb2plY3Rpb25NYXRyaXggKTtcbiAgICBnbC51bmlmb3JtTWF0cml4M2Z2KHRoaXMuc2hhZGVyLnVuaWZvcm1zLnByb2plY3Rpb25NYXRyaXguX2xvY2F0aW9uLCBmYWxzZSwgbS50b0FycmF5KHRydWUpKTtcbiAgICBnbC51bmlmb3JtMWYodGhpcy5zaGFkZXIudW5pZm9ybXMudUFscGhhLl9sb2NhdGlvbiwgY29udGFpbmVyLndvcmxkQWxwaGEpO1xuXG5cbiAgICAvLyBtYWtlIHN1cmUgdGhlIHRleHR1cmUgaXMgYm91bmQuLlxuICAgIHZhciBiYXNlVGV4dHVyZSA9IGNoaWxkcmVuWzBdLl90ZXh0dXJlLmJhc2VUZXh0dXJlO1xuXG4gICAgaWYgKCFiYXNlVGV4dHVyZS5fZ2xUZXh0dXJlc1tnbC5pZF0pXG4gICAge1xuICAgICAgICAvLyBpZiB0aGUgdGV4dHVyZSBoYXMgbm90IHVwZGF0ZWQgdGhlbiBsZXRzIG5vdCB1cGxvYWQgYW55IHN0YXRpYyBwcm9wZXJ0aWVzXG4gICAgICAgIGlmKCF0aGlzLnJlbmRlcmVyLnVwZGF0ZVRleHR1cmUoYmFzZVRleHR1cmUpKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZighY29udGFpbmVyLl9wcm9wZXJ0aWVzWzBdIHx8ICFjb250YWluZXIuX3Byb3BlcnRpZXNbM10pXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNvbnRhaW5lci5fYnVmZmVyVG9VcGRhdGUgPSAwO1xuICAgICAgICB9XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIGdsLmJpbmRUZXh0dXJlKGdsLlRFWFRVUkVfMkQsIGJhc2VUZXh0dXJlLl9nbFRleHR1cmVzW2dsLmlkXSk7XG4gICAgfVxuXG4gICAgLy8gbm93IGxldHMgdXBsb2FkIGFuZCByZW5kZXIgdGhlIGJ1ZmZlcnMuLlxuICAgIGZvciAodmFyIGkgPSAwLCBqID0gMDsgaSA8IHRvdGFsQ2hpbGRyZW47IGkgKz0gYmF0Y2hTaXplLCBqICs9IDEpXG4gICAge1xuICAgICAgICB2YXIgYW1vdW50ID0gKCB0b3RhbENoaWxkcmVuIC0gaSk7XG4gICAgICAgIGlmKGFtb3VudCA+IGJhdGNoU2l6ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgYW1vdW50ID0gYmF0Y2hTaXplO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGJ1ZmZlciA9IGNvbnRhaW5lci5fYnVmZmVyc1tqXTtcblxuICAgICAgICAvLyB3ZSBhbHdheXMgdXBsb2FkIHRoZSBkeW5hbWljXG4gICAgICAgIGJ1ZmZlci51cGxvYWREeW5hbWljKGNoaWxkcmVuLCBpLCBhbW91bnQpO1xuXG4gICAgICAgIC8vIHdlIG9ubHkgdXBsb2FkIHRoZSBzdGF0aWMgY29udGVudCB3aGVuIHdlIGhhdmUgdG8hXG4gICAgICAgIGlmKGNvbnRhaW5lci5fYnVmZmVyVG9VcGRhdGUgPT09IGopXG4gICAgICAgIHtcbiAgICAgICAgICAgIGJ1ZmZlci51cGxvYWRTdGF0aWMoY2hpbGRyZW4sIGksIGFtb3VudCk7XG4gICAgICAgICAgICBjb250YWluZXIuX2J1ZmZlclRvVXBkYXRlID0gaiArIDE7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBiaW5kIHRoZSBidWZmZXJcbiAgICAgICAgYnVmZmVyLmJpbmQoIHRoaXMuc2hhZGVyICk7XG5cbiAgICAgICAgIC8vIG5vdyBkcmF3IHRob3NlIHN1Y2thcyFcbiAgICAgICAgZ2wuZHJhd0VsZW1lbnRzKGdsLlRSSUFOR0xFUywgYW1vdW50ICogNiwgZ2wuVU5TSUdORURfU0hPUlQsIDApO1xuICAgICAgICB0aGlzLnJlbmRlcmVyLmRyYXdDb3VudCsrO1xuICAgIH1cbn07XG5cbi8qKlxuICogQ3JlYXRlcyBvbmUgcGFydGljbGUgYnVmZmVyIGZvciBlYWNoIGNoaWxkIGluIHRoZSBjb250YWluZXIgd2Ugd2FudCB0byByZW5kZXIgYW5kIHVwZGF0ZXMgaW50ZXJuYWwgcHJvcGVydGllc1xuICpcbiAqIEBwYXJhbSBjb250YWluZXIge1BJWEkuUGFydGljbGVDb250YWluZXJ9IFRoZSBjb250YWluZXIgdG8gcmVuZGVyIHVzaW5nIHRoaXMgUGFydGljbGVSZW5kZXJlclxuICovXG5QYXJ0aWNsZVJlbmRlcmVyLnByb3RvdHlwZS5nZW5lcmF0ZUJ1ZmZlcnMgPSBmdW5jdGlvbiAoY29udGFpbmVyKVxue1xuICAgIHZhciBnbCA9IHRoaXMucmVuZGVyZXIuZ2wsXG4gICAgICAgIGJ1ZmZlcnMgPSBbXSxcbiAgICAgICAgc2l6ZSA9IGNvbnRhaW5lci5fbWF4U2l6ZSxcbiAgICAgICAgYmF0Y2hTaXplID0gY29udGFpbmVyLl9iYXRjaFNpemUsXG4gICAgICAgIGR5bmFtaWNQcm9wZXJ0eUZsYWdzID0gY29udGFpbmVyLl9wcm9wZXJ0aWVzLFxuICAgICAgICBpO1xuXG4gICAgZm9yIChpID0gMDsgaSA8IHNpemU7IGkgKz0gYmF0Y2hTaXplKVxuICAgIHtcbiAgICAgICAgYnVmZmVycy5wdXNoKG5ldyBQYXJ0aWNsZUJ1ZmZlcihnbCwgdGhpcy5wcm9wZXJ0aWVzLCBkeW5hbWljUHJvcGVydHlGbGFncywgYmF0Y2hTaXplKSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGJ1ZmZlcnM7XG59O1xuXG4vKipcbiAqIFVwbG9hZHMgdGhlIHZlcnRpY2llcy5cbiAqXG4gKiBAcGFyYW0gY2hpbGRyZW4ge1BJWEkuRGlzcGxheU9iamVjdFtdfSB0aGUgYXJyYXkgb2YgZGlzcGxheSBvYmplY3RzIHRvIHJlbmRlclxuICogQHBhcmFtIHN0YXJ0SW5kZXgge251bWJlcn0gdGhlIGluZGV4IHRvIHN0YXJ0IGZyb20gaW4gdGhlIGNoaWxkcmVuIGFycmF5XG4gKiBAcGFyYW0gYW1vdW50IHtudW1iZXJ9IHRoZSBhbW91bnQgb2YgY2hpbGRyZW4gdGhhdCB3aWxsIGhhdmUgdGhlaXIgdmVydGljZXMgdXBsb2FkZWRcbiAqIEBwYXJhbSBhcnJheSB7bnVtYmVyW119XG4gKiBAcGFyYW0gc3RyaWRlIHtudW1iZXJ9XG4gKiBAcGFyYW0gb2Zmc2V0IHtudW1iZXJ9XG4gKi9cblBhcnRpY2xlUmVuZGVyZXIucHJvdG90eXBlLnVwbG9hZFZlcnRpY2VzID0gZnVuY3Rpb24gKGNoaWxkcmVuLCBzdGFydEluZGV4LCBhbW91bnQsIGFycmF5LCBzdHJpZGUsIG9mZnNldClcbntcbiAgICB2YXIgc3ByaXRlLFxuICAgICAgICB0ZXh0dXJlLFxuICAgICAgICB0cmltLFxuICAgICAgICBzeCxcbiAgICAgICAgc3ksXG4gICAgICAgIHcwLCB3MSwgaDAsIGgxO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhbW91bnQ7IGkrKykge1xuXG4gICAgICAgIHNwcml0ZSA9IGNoaWxkcmVuW3N0YXJ0SW5kZXggKyBpXTtcbiAgICAgICAgdGV4dHVyZSA9IHNwcml0ZS5fdGV4dHVyZTtcbiAgICAgICAgc3ggPSBzcHJpdGUuc2NhbGUueDtcbiAgICAgICAgc3kgPSBzcHJpdGUuc2NhbGUueTtcblxuICAgICAgICBpZiAodGV4dHVyZS50cmltKVxuICAgICAgICB7XG4gICAgICAgICAgICAvLyBpZiB0aGUgc3ByaXRlIGlzIHRyaW1tZWQgdGhlbiB3ZSBuZWVkIHRvIGFkZCB0aGUgZXh0cmEgc3BhY2UgYmVmb3JlIHRyYW5zZm9ybWluZyB0aGUgc3ByaXRlIGNvb3Jkcy4uXG4gICAgICAgICAgICB0cmltID0gdGV4dHVyZS50cmltO1xuXG4gICAgICAgICAgICB3MSA9IHRyaW0ueCAtIHNwcml0ZS5hbmNob3IueCAqIHRyaW0ud2lkdGg7XG4gICAgICAgICAgICB3MCA9IHcxICsgdGV4dHVyZS5jcm9wLndpZHRoO1xuXG4gICAgICAgICAgICBoMSA9IHRyaW0ueSAtIHNwcml0ZS5hbmNob3IueSAqIHRyaW0uaGVpZ2h0O1xuICAgICAgICAgICAgaDAgPSBoMSArIHRleHR1cmUuY3JvcC5oZWlnaHQ7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgICB3MCA9ICh0ZXh0dXJlLl9mcmFtZS53aWR0aCApICogKDEtc3ByaXRlLmFuY2hvci54KTtcbiAgICAgICAgICAgIHcxID0gKHRleHR1cmUuX2ZyYW1lLndpZHRoICkgKiAtc3ByaXRlLmFuY2hvci54O1xuXG4gICAgICAgICAgICBoMCA9IHRleHR1cmUuX2ZyYW1lLmhlaWdodCAqICgxLXNwcml0ZS5hbmNob3IueSk7XG4gICAgICAgICAgICBoMSA9IHRleHR1cmUuX2ZyYW1lLmhlaWdodCAqIC1zcHJpdGUuYW5jaG9yLnk7XG4gICAgICAgIH1cblxuICAgICAgICBhcnJheVtvZmZzZXRdID0gdzEgKiBzeDtcbiAgICAgICAgYXJyYXlbb2Zmc2V0ICsgMV0gPSBoMSAqIHN5O1xuXG4gICAgICAgIGFycmF5W29mZnNldCArIHN0cmlkZV0gPSB3MCAqIHN4O1xuICAgICAgICBhcnJheVtvZmZzZXQgKyBzdHJpZGUgKyAxXSA9IGgxICogc3k7XG5cbiAgICAgICAgYXJyYXlbb2Zmc2V0ICsgc3RyaWRlICogMl0gPSB3MCAqIHN4O1xuICAgICAgICBhcnJheVtvZmZzZXQgKyBzdHJpZGUgKiAyICsgMV0gPSBoMCAqIHN5O1xuXG4gICAgICAgIGFycmF5W29mZnNldCArIHN0cmlkZSAqIDNdID0gdzEgKiBzeDtcbiAgICAgICAgYXJyYXlbb2Zmc2V0ICsgc3RyaWRlICogMyArIDFdID0gaDAgKiBzeTtcblxuICAgICAgICBvZmZzZXQgKz0gc3RyaWRlICogNDtcbiAgICB9XG5cbn07XG5cbi8qKlxuICpcbiAqIEBwYXJhbSBjaGlsZHJlbiB7UElYSS5EaXNwbGF5T2JqZWN0W119IHRoZSBhcnJheSBvZiBkaXNwbGF5IG9iamVjdHMgdG8gcmVuZGVyXG4gKiBAcGFyYW0gc3RhcnRJbmRleCB7bnVtYmVyfSB0aGUgaW5kZXggdG8gc3RhcnQgZnJvbSBpbiB0aGUgY2hpbGRyZW4gYXJyYXlcbiAqIEBwYXJhbSBhbW91bnQge251bWJlcn0gdGhlIGFtb3VudCBvZiBjaGlsZHJlbiB0aGF0IHdpbGwgaGF2ZSB0aGVpciBwb3NpdGlvbnMgdXBsb2FkZWRcbiAqIEBwYXJhbSBhcnJheSB7bnVtYmVyW119XG4gKiBAcGFyYW0gc3RyaWRlIHtudW1iZXJ9XG4gKiBAcGFyYW0gb2Zmc2V0IHtudW1iZXJ9XG4gKi9cblBhcnRpY2xlUmVuZGVyZXIucHJvdG90eXBlLnVwbG9hZFBvc2l0aW9uID0gZnVuY3Rpb24gKGNoaWxkcmVuLHN0YXJ0SW5kZXgsIGFtb3VudCwgYXJyYXksIHN0cmlkZSwgb2Zmc2V0KVxue1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYW1vdW50OyBpKyspXG4gICAge1xuICAgICAgICB2YXIgc3ByaXRlUG9zaXRpb24gPSBjaGlsZHJlbltzdGFydEluZGV4ICsgaV0ucG9zaXRpb247XG5cbiAgICAgICAgYXJyYXlbb2Zmc2V0XSA9IHNwcml0ZVBvc2l0aW9uLng7XG4gICAgICAgIGFycmF5W29mZnNldCArIDFdID0gc3ByaXRlUG9zaXRpb24ueTtcblxuICAgICAgICBhcnJheVtvZmZzZXQgKyBzdHJpZGVdID0gc3ByaXRlUG9zaXRpb24ueDtcbiAgICAgICAgYXJyYXlbb2Zmc2V0ICsgc3RyaWRlICsgMV0gPSBzcHJpdGVQb3NpdGlvbi55O1xuXG4gICAgICAgIGFycmF5W29mZnNldCArIHN0cmlkZSAqIDJdID0gc3ByaXRlUG9zaXRpb24ueDtcbiAgICAgICAgYXJyYXlbb2Zmc2V0ICsgc3RyaWRlICogMiArIDFdID0gc3ByaXRlUG9zaXRpb24ueTtcblxuICAgICAgICBhcnJheVtvZmZzZXQgKyBzdHJpZGUgKiAzXSA9IHNwcml0ZVBvc2l0aW9uLng7XG4gICAgICAgIGFycmF5W29mZnNldCArIHN0cmlkZSAqIDMgKyAxXSA9IHNwcml0ZVBvc2l0aW9uLnk7XG5cbiAgICAgICAgb2Zmc2V0ICs9IHN0cmlkZSAqIDQ7XG4gICAgfVxuXG59O1xuXG4vKipcbiAqXG4gKiBAcGFyYW0gY2hpbGRyZW4ge1BJWEkuRGlzcGxheU9iamVjdFtdfSB0aGUgYXJyYXkgb2YgZGlzcGxheSBvYmplY3RzIHRvIHJlbmRlclxuICogQHBhcmFtIHN0YXJ0SW5kZXgge251bWJlcn0gdGhlIGluZGV4IHRvIHN0YXJ0IGZyb20gaW4gdGhlIGNoaWxkcmVuIGFycmF5XG4gKiBAcGFyYW0gYW1vdW50IHtudW1iZXJ9IHRoZSBhbW91bnQgb2YgY2hpbGRyZW4gdGhhdCB3aWxsIGhhdmUgdGhlaXIgcm90YXRpb24gdXBsb2FkZWRcbiAqIEBwYXJhbSBhcnJheSB7bnVtYmVyW119XG4gKiBAcGFyYW0gc3RyaWRlIHtudW1iZXJ9XG4gKiBAcGFyYW0gb2Zmc2V0IHtudW1iZXJ9XG4gKi9cblBhcnRpY2xlUmVuZGVyZXIucHJvdG90eXBlLnVwbG9hZFJvdGF0aW9uID0gZnVuY3Rpb24gKGNoaWxkcmVuLHN0YXJ0SW5kZXgsIGFtb3VudCwgYXJyYXksIHN0cmlkZSwgb2Zmc2V0KVxue1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYW1vdW50OyBpKyspXG4gICAge1xuICAgICAgICB2YXIgc3ByaXRlUm90YXRpb24gPSBjaGlsZHJlbltzdGFydEluZGV4ICsgaV0ucm90YXRpb247XG5cblxuICAgICAgICBhcnJheVtvZmZzZXRdID0gc3ByaXRlUm90YXRpb247XG4gICAgICAgIGFycmF5W29mZnNldCArIHN0cmlkZV0gPSBzcHJpdGVSb3RhdGlvbjtcbiAgICAgICAgYXJyYXlbb2Zmc2V0ICsgc3RyaWRlICogMl0gPSBzcHJpdGVSb3RhdGlvbjtcbiAgICAgICAgYXJyYXlbb2Zmc2V0ICsgc3RyaWRlICogM10gPSBzcHJpdGVSb3RhdGlvbjtcblxuICAgICAgICBvZmZzZXQgKz0gc3RyaWRlICogNDtcbiAgICB9XG59O1xuXG4vKipcbiAqXG4gKiBAcGFyYW0gY2hpbGRyZW4ge1BJWEkuRGlzcGxheU9iamVjdFtdfSB0aGUgYXJyYXkgb2YgZGlzcGxheSBvYmplY3RzIHRvIHJlbmRlclxuICogQHBhcmFtIHN0YXJ0SW5kZXgge251bWJlcn0gdGhlIGluZGV4IHRvIHN0YXJ0IGZyb20gaW4gdGhlIGNoaWxkcmVuIGFycmF5XG4gKiBAcGFyYW0gYW1vdW50IHtudW1iZXJ9IHRoZSBhbW91bnQgb2YgY2hpbGRyZW4gdGhhdCB3aWxsIGhhdmUgdGhlaXIgVXZzIHVwbG9hZGVkXG4gKiBAcGFyYW0gYXJyYXkge251bWJlcltdfVxuICogQHBhcmFtIHN0cmlkZSB7bnVtYmVyfVxuICogQHBhcmFtIG9mZnNldCB7bnVtYmVyfVxuICovXG5QYXJ0aWNsZVJlbmRlcmVyLnByb3RvdHlwZS51cGxvYWRVdnMgPSBmdW5jdGlvbiAoY2hpbGRyZW4sc3RhcnRJbmRleCwgYW1vdW50LCBhcnJheSwgc3RyaWRlLCBvZmZzZXQpXG57XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhbW91bnQ7IGkrKylcbiAgICB7XG4gICAgICAgIHZhciB0ZXh0dXJlVXZzID0gY2hpbGRyZW5bc3RhcnRJbmRleCArIGldLl90ZXh0dXJlLl91dnM7XG5cbiAgICAgICAgaWYgKHRleHR1cmVVdnMpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGFycmF5W29mZnNldF0gPSB0ZXh0dXJlVXZzLngwO1xuICAgICAgICAgICAgYXJyYXlbb2Zmc2V0ICsgMV0gPSB0ZXh0dXJlVXZzLnkwO1xuXG4gICAgICAgICAgICBhcnJheVtvZmZzZXQgKyBzdHJpZGVdID0gdGV4dHVyZVV2cy54MTtcbiAgICAgICAgICAgIGFycmF5W29mZnNldCArIHN0cmlkZSArIDFdID0gdGV4dHVyZVV2cy55MTtcblxuICAgICAgICAgICAgYXJyYXlbb2Zmc2V0ICsgc3RyaWRlICogMl0gPSB0ZXh0dXJlVXZzLngyO1xuICAgICAgICAgICAgYXJyYXlbb2Zmc2V0ICsgc3RyaWRlICogMiArIDFdID0gdGV4dHVyZVV2cy55MjtcblxuICAgICAgICAgICAgYXJyYXlbb2Zmc2V0ICsgc3RyaWRlICogM10gPSB0ZXh0dXJlVXZzLngzO1xuICAgICAgICAgICAgYXJyYXlbb2Zmc2V0ICsgc3RyaWRlICogMyArIDFdID0gdGV4dHVyZVV2cy55MztcblxuICAgICAgICAgICAgb2Zmc2V0ICs9IHN0cmlkZSAqIDQ7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgICAvL1RPRE8geW91IGtub3cgdGhpcyBjYW4gYmUgZWFzaWVyIVxuICAgICAgICAgICAgYXJyYXlbb2Zmc2V0XSA9IDA7XG4gICAgICAgICAgICBhcnJheVtvZmZzZXQgKyAxXSA9IDA7XG5cbiAgICAgICAgICAgIGFycmF5W29mZnNldCArIHN0cmlkZV0gPSAwO1xuICAgICAgICAgICAgYXJyYXlbb2Zmc2V0ICsgc3RyaWRlICsgMV0gPSAwO1xuXG4gICAgICAgICAgICBhcnJheVtvZmZzZXQgKyBzdHJpZGUgKiAyXSA9IDA7XG4gICAgICAgICAgICBhcnJheVtvZmZzZXQgKyBzdHJpZGUgKiAyICsgMV0gPSAwO1xuXG4gICAgICAgICAgICBhcnJheVtvZmZzZXQgKyBzdHJpZGUgKiAzXSA9IDA7XG4gICAgICAgICAgICBhcnJheVtvZmZzZXQgKyBzdHJpZGUgKiAzICsgMV0gPSAwO1xuXG4gICAgICAgICAgICBvZmZzZXQgKz0gc3RyaWRlICogNDtcbiAgICAgICAgfVxuICAgIH1cbn07XG5cbi8qKlxuICpcbiAqIEBwYXJhbSBjaGlsZHJlbiB7UElYSS5EaXNwbGF5T2JqZWN0W119IHRoZSBhcnJheSBvZiBkaXNwbGF5IG9iamVjdHMgdG8gcmVuZGVyXG4gKiBAcGFyYW0gc3RhcnRJbmRleCB7bnVtYmVyfSB0aGUgaW5kZXggdG8gc3RhcnQgZnJvbSBpbiB0aGUgY2hpbGRyZW4gYXJyYXlcbiAqIEBwYXJhbSBhbW91bnQge251bWJlcn0gdGhlIGFtb3VudCBvZiBjaGlsZHJlbiB0aGF0IHdpbGwgaGF2ZSB0aGVpciBhbHBoYSB1cGxvYWRlZFxuICogQHBhcmFtIGFycmF5IHtudW1iZXJbXX1cbiAqIEBwYXJhbSBzdHJpZGUge251bWJlcn1cbiAqIEBwYXJhbSBvZmZzZXQge251bWJlcn1cbiAqL1xuUGFydGljbGVSZW5kZXJlci5wcm90b3R5cGUudXBsb2FkQWxwaGEgPSBmdW5jdGlvbiAoY2hpbGRyZW4sc3RhcnRJbmRleCwgYW1vdW50LCBhcnJheSwgc3RyaWRlLCBvZmZzZXQpXG57XG4gICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYW1vdW50OyBpKyspXG4gICAgIHtcbiAgICAgICAgdmFyIHNwcml0ZUFscGhhID0gY2hpbGRyZW5bc3RhcnRJbmRleCArIGldLmFscGhhO1xuXG4gICAgICAgIGFycmF5W29mZnNldF0gPSBzcHJpdGVBbHBoYTtcbiAgICAgICAgYXJyYXlbb2Zmc2V0ICsgc3RyaWRlXSA9IHNwcml0ZUFscGhhO1xuICAgICAgICBhcnJheVtvZmZzZXQgKyBzdHJpZGUgKiAyXSA9IHNwcml0ZUFscGhhO1xuICAgICAgICBhcnJheVtvZmZzZXQgKyBzdHJpZGUgKiAzXSA9IHNwcml0ZUFscGhhO1xuXG4gICAgICAgIG9mZnNldCArPSBzdHJpZGUgKiA0O1xuICAgIH1cbn07XG5cblxuLyoqXG4gKiBEZXN0cm95cyB0aGUgUGFydGljbGVSZW5kZXJlci5cbiAqXG4gKi9cblBhcnRpY2xlUmVuZGVyZXIucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoKVxue1xuICAgIGlmICh0aGlzLnJlbmRlcmVyLmdsKSB7XG4gICAgICAgIHRoaXMucmVuZGVyZXIuZ2wuZGVsZXRlQnVmZmVyKHRoaXMuaW5kZXhCdWZmZXIpO1xuICAgIH1cblxuICAgIE9iamVjdFJlbmRlcmVyLnByb3RvdHlwZS5kZXN0cm95LmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG5cbiAgICB0aGlzLnNoYWRlci5kZXN0cm95KCk7XG5cbiAgICB0aGlzLmluZGljZXMgPSBudWxsO1xuICAgIHRoaXMudGVtcE1hdHJpeCA9IG51bGw7XG59O1xuIiwidmFyIFRleHR1cmVTaGFkZXIgPSByZXF1aXJlKCcuLi8uLi9yZW5kZXJlcnMvd2ViZ2wvc2hhZGVycy9UZXh0dXJlU2hhZGVyJyk7XG5cbi8qKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLlRleHR1cmVTaGFkZXJcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gc2hhZGVyTWFuYWdlciB7U2hhZGVyTWFuYWdlcn0gVGhlIHdlYmdsIHNoYWRlciBtYW5hZ2VyIHRoaXMgc2hhZGVyIHdvcmtzIGZvci5cbiAqL1xuZnVuY3Rpb24gUGFydGljbGVTaGFkZXIoc2hhZGVyTWFuYWdlcilcbntcbiAgICBUZXh0dXJlU2hhZGVyLmNhbGwodGhpcyxcbiAgICAgICAgc2hhZGVyTWFuYWdlcixcbiAgICAgICAgLy8gdmVydGV4IHNoYWRlclxuICAgICAgICBbXG4gICAgICAgICAgICAnYXR0cmlidXRlIHZlYzIgYVZlcnRleFBvc2l0aW9uOycsXG4gICAgICAgICAgICAnYXR0cmlidXRlIHZlYzIgYVRleHR1cmVDb29yZDsnLFxuICAgICAgICAgICAgJ2F0dHJpYnV0ZSBmbG9hdCBhQ29sb3I7JyxcblxuICAgICAgICAgICAgJ2F0dHJpYnV0ZSB2ZWMyIGFQb3NpdGlvbkNvb3JkOycsXG4gICAgICAgICAgICAnYXR0cmlidXRlIHZlYzIgYVNjYWxlOycsXG4gICAgICAgICAgICAnYXR0cmlidXRlIGZsb2F0IGFSb3RhdGlvbjsnLFxuXG4gICAgICAgICAgICAndW5pZm9ybSBtYXQzIHByb2plY3Rpb25NYXRyaXg7JyxcblxuICAgICAgICAgICAgJ3ZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkOycsXG4gICAgICAgICAgICAndmFyeWluZyBmbG9hdCB2Q29sb3I7JyxcblxuICAgICAgICAgICAgJ3ZvaWQgbWFpbih2b2lkKXsnLFxuICAgICAgICAgICAgJyAgIHZlYzIgdiA9IGFWZXJ0ZXhQb3NpdGlvbjsnLFxuXG4gICAgICAgICAgICAnICAgdi54ID0gKGFWZXJ0ZXhQb3NpdGlvbi54KSAqIGNvcyhhUm90YXRpb24pIC0gKGFWZXJ0ZXhQb3NpdGlvbi55KSAqIHNpbihhUm90YXRpb24pOycsXG4gICAgICAgICAgICAnICAgdi55ID0gKGFWZXJ0ZXhQb3NpdGlvbi54KSAqIHNpbihhUm90YXRpb24pICsgKGFWZXJ0ZXhQb3NpdGlvbi55KSAqIGNvcyhhUm90YXRpb24pOycsXG4gICAgICAgICAgICAnICAgdiA9IHYgKyBhUG9zaXRpb25Db29yZDsnLFxuXG4gICAgICAgICAgICAnICAgZ2xfUG9zaXRpb24gPSB2ZWM0KChwcm9qZWN0aW9uTWF0cml4ICogdmVjMyh2LCAxLjApKS54eSwgMC4wLCAxLjApOycsXG5cbiAgICAgICAgICAgICcgICB2VGV4dHVyZUNvb3JkID0gYVRleHR1cmVDb29yZDsnLFxuICAgICAgICAgICAgJyAgIHZDb2xvciA9IGFDb2xvcjsnLFxuICAgICAgICAgICAgJ30nXG4gICAgICAgIF0uam9pbignXFxuJyksXG4gICAgICAgIC8vIGhlbGxvXG4gICAgICAgICBbXG4gICAgICAgICAgICAncHJlY2lzaW9uIGxvd3AgZmxvYXQ7JyxcblxuICAgICAgICAgICAgJ3ZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkOycsXG4gICAgICAgICAgICAndmFyeWluZyBmbG9hdCB2Q29sb3I7JyxcblxuICAgICAgICAgICAgJ3VuaWZvcm0gc2FtcGxlcjJEIHVTYW1wbGVyOycsXG4gICAgICAgICAgICAndW5pZm9ybSBmbG9hdCB1QWxwaGE7JyxcblxuICAgICAgICAgICAgJ3ZvaWQgbWFpbih2b2lkKXsnLFxuICAgICAgICAgICAgJyAgdmVjNCBjb2xvciA9IHRleHR1cmUyRCh1U2FtcGxlciwgdlRleHR1cmVDb29yZCkgKiB2Q29sb3IgKiB1QWxwaGE7JyxcbiAgICAgICAgICAgICcgIGlmIChjb2xvci5hID09IDAuMCkgZGlzY2FyZDsnLFxuICAgICAgICAgICAgJyAgZ2xfRnJhZ0NvbG9yID0gY29sb3I7JyxcbiAgICAgICAgICAgICd9J1xuICAgICAgICBdLmpvaW4oJ1xcbicpLFxuICAgICAgICAvLyBjdXN0b20gdW5pZm9ybXNcbiAgICAgICAge1xuICAgICAgICAgICAgdUFscGhhOiAgeyB0eXBlOiAnMWYnLCB2YWx1ZTogMSB9XG4gICAgICAgIH0sXG4gICAgICAgIC8vIGN1c3RvbSBhdHRyaWJ1dGVzXG4gICAgICAgIHtcbiAgICAgICAgICAgIGFQb3NpdGlvbkNvb3JkOiAwLFxuICAgICAgICAgICAvLyBhU2NhbGU6ICAgICAgICAgMCxcbiAgICAgICAgICAgIGFSb3RhdGlvbjogICAgICAwXG4gICAgICAgIH1cbiAgICApO1xuXG4gICAgLy8gVEVNUCBIQUNLXG5cbn1cblxuUGFydGljbGVTaGFkZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShUZXh0dXJlU2hhZGVyLnByb3RvdHlwZSk7XG5QYXJ0aWNsZVNoYWRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBQYXJ0aWNsZVNoYWRlcjtcblxubW9kdWxlLmV4cG9ydHMgPSBQYXJ0aWNsZVNoYWRlcjtcbiIsInZhciB1dGlscyA9IHJlcXVpcmUoJy4uL3V0aWxzJyksXG4gICAgbWF0aCA9IHJlcXVpcmUoJy4uL21hdGgnKSxcbiAgICBDT05TVCA9IHJlcXVpcmUoJy4uL2NvbnN0JyksXG4gICAgRXZlbnRFbWl0dGVyID0gcmVxdWlyZSgnZXZlbnRlbWl0dGVyMycpO1xuXG4vKipcbiAqIFRoZSBDYW52YXNSZW5kZXJlciBkcmF3cyB0aGUgc2NlbmUgYW5kIGFsbCBpdHMgY29udGVudCBvbnRvIGEgMmQgY2FudmFzLiBUaGlzIHJlbmRlcmVyIHNob3VsZCBiZSB1c2VkIGZvciBicm93c2VycyB0aGF0IGRvIG5vdCBzdXBwb3J0IHdlYkdMLlxuICogRG9uJ3QgZm9yZ2V0IHRvIGFkZCB0aGUgQ2FudmFzUmVuZGVyZXIudmlldyB0byB5b3VyIERPTSBvciB5b3Ugd2lsbCBub3Qgc2VlIGFueXRoaW5nIDopXG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIHN5c3RlbSB7c3RyaW5nfSBUaGUgbmFtZSBvZiB0aGUgc3lzdGVtIHRoaXMgcmVuZGVyZXIgaXMgZm9yLlxuICogQHBhcmFtIFt3aWR0aD04MDBdIHtudW1iZXJ9IHRoZSB3aWR0aCBvZiB0aGUgY2FudmFzIHZpZXdcbiAqIEBwYXJhbSBbaGVpZ2h0PTYwMF0ge251bWJlcn0gdGhlIGhlaWdodCBvZiB0aGUgY2FudmFzIHZpZXdcbiAqIEBwYXJhbSBbb3B0aW9uc10ge29iamVjdH0gVGhlIG9wdGlvbmFsIHJlbmRlcmVyIHBhcmFtZXRlcnNcbiAqIEBwYXJhbSBbb3B0aW9ucy52aWV3XSB7SFRNTENhbnZhc0VsZW1lbnR9IHRoZSBjYW52YXMgdG8gdXNlIGFzIGEgdmlldywgb3B0aW9uYWxcbiAqIEBwYXJhbSBbb3B0aW9ucy50cmFuc3BhcmVudD1mYWxzZV0ge2Jvb2xlYW59IElmIHRoZSByZW5kZXIgdmlldyBpcyB0cmFuc3BhcmVudCwgZGVmYXVsdCBmYWxzZVxuICogQHBhcmFtIFtvcHRpb25zLmF1dG9SZXNpemU9ZmFsc2VdIHtib29sZWFufSBJZiB0aGUgcmVuZGVyIHZpZXcgaXMgYXV0b21hdGljYWxseSByZXNpemVkLCBkZWZhdWx0IGZhbHNlXG4gKiBAcGFyYW0gW29wdGlvbnMuYW50aWFsaWFzPWZhbHNlXSB7Ym9vbGVhbn0gc2V0cyBhbnRpYWxpYXMgKG9ubHkgYXBwbGljYWJsZSBpbiBjaHJvbWUgYXQgdGhlIG1vbWVudClcbiAqIEBwYXJhbSBbb3B0aW9ucy5yZXNvbHV0aW9uPTFdIHtudW1iZXJ9IHRoZSByZXNvbHV0aW9uIG9mIHRoZSByZW5kZXJlciByZXRpbmEgd291bGQgYmUgMlxuICogQHBhcmFtIFtvcHRpb25zLmNsZWFyQmVmb3JlUmVuZGVyPXRydWVdIHtib29sZWFufSBUaGlzIHNldHMgaWYgdGhlIENhbnZhc1JlbmRlcmVyIHdpbGwgY2xlYXIgdGhlIGNhbnZhcyBvclxuICogICAgICBub3QgYmVmb3JlIHRoZSBuZXcgcmVuZGVyIHBhc3MuXG4gKiBAcGFyYW0gW29wdGlvbnMuYmFja2dyb3VuZENvbG9yPTB4MDAwMDAwXSB7bnVtYmVyfSBUaGUgYmFja2dyb3VuZCBjb2xvciBvZiB0aGUgcmVuZGVyZWQgYXJlYSAoc2hvd24gaWYgbm90IHRyYW5zcGFyZW50KS5cbiAqIEBwYXJhbSBbb3B0aW9ucy5yb3VuZFBpeGVscz1mYWxzZV0ge2Jvb2xlYW59IElmIHRydWUgUGl4aSB3aWxsIE1hdGguZmxvb3IoKSB4L3kgdmFsdWVzIHdoZW4gcmVuZGVyaW5nLCBzdG9wcGluZyBwaXhlbCBpbnRlcnBvbGF0aW9uLlxuICovXG5mdW5jdGlvbiBTeXN0ZW1SZW5kZXJlcihzeXN0ZW0sIHdpZHRoLCBoZWlnaHQsIG9wdGlvbnMpXG57XG4gICAgRXZlbnRFbWl0dGVyLmNhbGwodGhpcyk7XG5cbiAgICB1dGlscy5zYXlIZWxsbyhzeXN0ZW0pO1xuXG4gICAgLy8gcHJlcGFyZSBvcHRpb25zXG4gICAgaWYgKG9wdGlvbnMpXG4gICAge1xuICAgICAgICBmb3IgKHZhciBpIGluIENPTlNULkRFRkFVTFRfUkVOREVSX09QVElPTlMpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGlmICh0eXBlb2Ygb3B0aW9uc1tpXSA9PT0gJ3VuZGVmaW5lZCcpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgb3B0aW9uc1tpXSA9IENPTlNULkRFRkFVTFRfUkVOREVSX09QVElPTlNbaV07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgb3B0aW9ucyA9IENPTlNULkRFRkFVTFRfUkVOREVSX09QVElPTlM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhlIHR5cGUgb2YgdGhlIHJlbmRlcmVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IFBJWEkuUkVOREVSRVJfVFlQRS5VTktOT1dOXG4gICAgICogQHNlZSBQSVhJLlJFTkRFUkVSX1RZUEVcbiAgICAgKi9cbiAgICB0aGlzLnR5cGUgPSBDT05TVC5SRU5ERVJFUl9UWVBFLlVOS05PV047XG5cbiAgICAvKipcbiAgICAgKiBUaGUgd2lkdGggb2YgdGhlIGNhbnZhcyB2aWV3XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgODAwXG4gICAgICovXG4gICAgdGhpcy53aWR0aCA9IHdpZHRoIHx8IDgwMDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBoZWlnaHQgb2YgdGhlIGNhbnZhcyB2aWV3XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgNjAwXG4gICAgICovXG4gICAgdGhpcy5oZWlnaHQgPSBoZWlnaHQgfHwgNjAwO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGNhbnZhcyBlbGVtZW50IHRoYXQgZXZlcnl0aGluZyBpcyBkcmF3biB0b1xuICAgICAqXG4gICAgICogQG1lbWJlciB7SFRNTENhbnZhc0VsZW1lbnR9XG4gICAgICovXG4gICAgdGhpcy52aWV3ID0gb3B0aW9ucy52aWV3IHx8IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NhbnZhcycpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHJlc29sdXRpb24gb2YgdGhlIHJlbmRlcmVyXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMVxuICAgICAqL1xuICAgIHRoaXMucmVzb2x1dGlvbiA9IG9wdGlvbnMucmVzb2x1dGlvbjtcblxuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgdGhlIHJlbmRlciB2aWV3IGlzIHRyYW5zcGFyZW50XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqL1xuICAgIHRoaXMudHJhbnNwYXJlbnQgPSBvcHRpb25zLnRyYW5zcGFyZW50O1xuXG4gICAgLyoqXG4gICAgICogV2hldGhlciB0aGUgcmVuZGVyIHZpZXcgc2hvdWxkIGJlIHJlc2l6ZWQgYXV0b21hdGljYWxseVxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKi9cbiAgICB0aGlzLmF1dG9SZXNpemUgPSBvcHRpb25zLmF1dG9SZXNpemUgfHwgZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBUcmFja3MgdGhlIGJsZW5kIG1vZGVzIHVzZWZ1bCBmb3IgdGhpcyByZW5kZXJlci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge29iamVjdDxzdHJpbmcsIG1peGVkPn1cbiAgICAgKi9cbiAgICB0aGlzLmJsZW5kTW9kZXMgPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHZhbHVlIG9mIHRoZSBwcmVzZXJ2ZURyYXdpbmdCdWZmZXIgZmxhZyBhZmZlY3RzIHdoZXRoZXIgb3Igbm90IHRoZSBjb250ZW50cyBvZiB0aGUgc3RlbmNpbCBidWZmZXIgaXMgcmV0YWluZWQgYWZ0ZXIgcmVuZGVyaW5nLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKi9cbiAgICB0aGlzLnByZXNlcnZlRHJhd2luZ0J1ZmZlciA9IG9wdGlvbnMucHJlc2VydmVEcmF3aW5nQnVmZmVyO1xuXG4gICAgLyoqXG4gICAgICogVGhpcyBzZXRzIGlmIHRoZSBDYW52YXNSZW5kZXJlciB3aWxsIGNsZWFyIHRoZSBjYW52YXMgb3Igbm90IGJlZm9yZSB0aGUgbmV3IHJlbmRlciBwYXNzLlxuICAgICAqIElmIHRoZSBzY2VuZSBpcyBOT1QgdHJhbnNwYXJlbnQgUGl4aSB3aWxsIHVzZSBhIGNhbnZhcyBzaXplZCBmaWxsUmVjdCBvcGVyYXRpb24gZXZlcnkgZnJhbWUgdG8gc2V0IHRoZSBjYW52YXMgYmFja2dyb3VuZCBjb2xvci5cbiAgICAgKiBJZiB0aGUgc2NlbmUgaXMgdHJhbnNwYXJlbnQgUGl4aSB3aWxsIHVzZSBjbGVhclJlY3QgdG8gY2xlYXIgdGhlIGNhbnZhcyBldmVyeSBmcmFtZS5cbiAgICAgKiBEaXNhYmxlIHRoaXMgYnkgc2V0dGluZyB0aGlzIHRvIGZhbHNlLiBGb3IgZXhhbXBsZSBpZiB5b3VyIGdhbWUgaGFzIGEgY2FudmFzIGZpbGxpbmcgYmFja2dyb3VuZCBpbWFnZSB5b3Ugb2Z0ZW4gZG9uJ3QgbmVlZCB0aGlzIHNldC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICogQGRlZmF1bHRcbiAgICAgKi9cbiAgICB0aGlzLmNsZWFyQmVmb3JlUmVuZGVyID0gb3B0aW9ucy5jbGVhckJlZm9yZVJlbmRlcjtcblxuICAgIC8qKlxuICAgICAqIElmIHRydWUgUGl4aSB3aWxsIE1hdGguZmxvb3IoKSB4L3kgdmFsdWVzIHdoZW4gcmVuZGVyaW5nLCBzdG9wcGluZyBwaXhlbCBpbnRlcnBvbGF0aW9uLlxuICAgICAqIEhhbmR5IGZvciBjcmlzcCBwaXhlbCBhcnQgYW5kIHNwZWVkIG9uIGxlZ2FjeSBkZXZpY2VzLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKi9cbiAgICB0aGlzLnJvdW5kUGl4ZWxzID0gb3B0aW9ucy5yb3VuZFBpeGVscztcblxuICAgIC8qKlxuICAgICAqIFRoZSBiYWNrZ3JvdW5kIGNvbG9yIGFzIGEgbnVtYmVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fYmFja2dyb3VuZENvbG9yID0gMHgwMDAwMDA7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYmFja2dyb3VuZCBjb2xvciBhcyBhbiBbUiwgRywgQl0gYXJyYXkuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJbXX1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX2JhY2tncm91bmRDb2xvclJnYmEgPSBbMCwgMCwgMCwgMF07XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYmFja2dyb3VuZCBjb2xvciBhcyBhIHN0cmluZy5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge3N0cmluZ31cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX2JhY2tncm91bmRDb2xvclN0cmluZyA9ICcjMDAwMDAwJztcblxuICAgIHRoaXMuYmFja2dyb3VuZENvbG9yID0gb3B0aW9ucy5iYWNrZ3JvdW5kQ29sb3IgfHwgdGhpcy5fYmFja2dyb3VuZENvbG9yOyAvLyBydW4gYmcgY29sb3Igc2V0dGVyXG5cbiAgICAvKipcbiAgICAgKiBUaGlzIHRlbXBvcmFyeSBkaXNwbGF5IG9iamVjdCB1c2VkIGFzIHRoZSBwYXJlbnQgb2YgdGhlIGN1cnJlbnRseSBiZWluZyByZW5kZXJlZCBpdGVtXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLkRpc3BsYXlPYmplY3R9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl90ZW1wRGlzcGxheU9iamVjdFBhcmVudCA9IHt3b3JsZFRyYW5zZm9ybTpuZXcgbWF0aC5NYXRyaXgoKSwgd29ybGRBbHBoYToxLCBjaGlsZHJlbjpbXX07XG5cbiAgICAvKipcbiAgICAgKiBUaGUgbGFzdCByb290IG9iamVjdCB0aGF0IHRoZSByZW5kZXJlciB0cmllZCB0byByZW5kZXIuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLkRpc3BsYXlPYmplY3R9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9sYXN0T2JqZWN0UmVuZGVyZWQgPSB0aGlzLl90ZW1wRGlzcGxheU9iamVjdFBhcmVudDtcbn1cblxuLy8gY29uc3RydWN0b3JcblN5c3RlbVJlbmRlcmVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoRXZlbnRFbWl0dGVyLnByb3RvdHlwZSk7XG5TeXN0ZW1SZW5kZXJlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBTeXN0ZW1SZW5kZXJlcjtcbm1vZHVsZS5leHBvcnRzID0gU3lzdGVtUmVuZGVyZXI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKFN5c3RlbVJlbmRlcmVyLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFRoZSBiYWNrZ3JvdW5kIGNvbG9yIHRvIGZpbGwgaWYgbm90IHRyYW5zcGFyZW50XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuU3lzdGVtUmVuZGVyZXIjXG4gICAgICovXG4gICAgYmFja2dyb3VuZENvbG9yOlxuICAgIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fYmFja2dyb3VuZENvbG9yO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWwpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuX2JhY2tncm91bmRDb2xvciA9IHZhbDtcbiAgICAgICAgICAgIHRoaXMuX2JhY2tncm91bmRDb2xvclN0cmluZyA9IHV0aWxzLmhleDJzdHJpbmcodmFsKTtcbiAgICAgICAgICAgIHV0aWxzLmhleDJyZ2IodmFsLCB0aGlzLl9iYWNrZ3JvdW5kQ29sb3JSZ2JhKTtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuXG4vKipcbiAqIFJlc2l6ZXMgdGhlIGNhbnZhcyB2aWV3IHRvIHRoZSBzcGVjaWZpZWQgd2lkdGggYW5kIGhlaWdodFxuICpcbiAqIEBwYXJhbSB3aWR0aCB7bnVtYmVyfSB0aGUgbmV3IHdpZHRoIG9mIHRoZSBjYW52YXMgdmlld1xuICogQHBhcmFtIGhlaWdodCB7bnVtYmVyfSB0aGUgbmV3IGhlaWdodCBvZiB0aGUgY2FudmFzIHZpZXdcbiAqL1xuU3lzdGVtUmVuZGVyZXIucHJvdG90eXBlLnJlc2l6ZSA9IGZ1bmN0aW9uICh3aWR0aCwgaGVpZ2h0KSB7XG4gICAgdGhpcy53aWR0aCA9IHdpZHRoICogdGhpcy5yZXNvbHV0aW9uO1xuICAgIHRoaXMuaGVpZ2h0ID0gaGVpZ2h0ICogdGhpcy5yZXNvbHV0aW9uO1xuXG4gICAgdGhpcy52aWV3LndpZHRoID0gdGhpcy53aWR0aDtcbiAgICB0aGlzLnZpZXcuaGVpZ2h0ID0gdGhpcy5oZWlnaHQ7XG5cbiAgICBpZiAodGhpcy5hdXRvUmVzaXplKVxuICAgIHtcbiAgICAgICAgdGhpcy52aWV3LnN0eWxlLndpZHRoID0gdGhpcy53aWR0aCAvIHRoaXMucmVzb2x1dGlvbiArICdweCc7XG4gICAgICAgIHRoaXMudmlldy5zdHlsZS5oZWlnaHQgPSB0aGlzLmhlaWdodCAvIHRoaXMucmVzb2x1dGlvbiArICdweCc7XG4gICAgfVxufTtcblxuLyoqXG4gKiBSZW1vdmVzIGV2ZXJ5dGhpbmcgZnJvbSB0aGUgcmVuZGVyZXIgYW5kIG9wdGlvbmFsbHkgcmVtb3ZlcyB0aGUgQ2FudmFzIERPTSBlbGVtZW50LlxuICpcbiAqIEBwYXJhbSBbcmVtb3ZlVmlldz1mYWxzZV0ge2Jvb2xlYW59IFJlbW92ZXMgdGhlIENhbnZhcyBlbGVtZW50IGZyb20gdGhlIERPTS5cbiAqL1xuU3lzdGVtUmVuZGVyZXIucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAocmVtb3ZlVmlldykge1xuICAgIGlmIChyZW1vdmVWaWV3ICYmIHRoaXMudmlldy5wYXJlbnROb2RlKVxuICAgIHtcbiAgICAgICAgdGhpcy52aWV3LnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodGhpcy52aWV3KTtcbiAgICB9XG5cbiAgICB0aGlzLnR5cGUgPSBDT05TVC5SRU5ERVJFUl9UWVBFLlVOS05PV047XG5cbiAgICB0aGlzLndpZHRoID0gMDtcbiAgICB0aGlzLmhlaWdodCA9IDA7XG5cbiAgICB0aGlzLnZpZXcgPSBudWxsO1xuXG4gICAgdGhpcy5yZXNvbHV0aW9uID0gMDtcblxuICAgIHRoaXMudHJhbnNwYXJlbnQgPSBmYWxzZTtcblxuICAgIHRoaXMuYXV0b1Jlc2l6ZSA9IGZhbHNlO1xuXG4gICAgdGhpcy5ibGVuZE1vZGVzID0gbnVsbDtcblxuICAgIHRoaXMucHJlc2VydmVEcmF3aW5nQnVmZmVyID0gZmFsc2U7XG4gICAgdGhpcy5jbGVhckJlZm9yZVJlbmRlciA9IGZhbHNlO1xuXG4gICAgdGhpcy5yb3VuZFBpeGVscyA9IGZhbHNlO1xuXG4gICAgdGhpcy5fYmFja2dyb3VuZENvbG9yID0gMDtcbiAgICB0aGlzLl9iYWNrZ3JvdW5kQ29sb3JSZ2JhID0gbnVsbDtcbiAgICB0aGlzLl9iYWNrZ3JvdW5kQ29sb3JTdHJpbmcgPSBudWxsO1xufTtcbiIsInZhciBTeXN0ZW1SZW5kZXJlciA9IHJlcXVpcmUoJy4uL1N5c3RlbVJlbmRlcmVyJyksXG4gICAgQ2FudmFzTWFza01hbmFnZXIgPSByZXF1aXJlKCcuL3V0aWxzL0NhbnZhc01hc2tNYW5hZ2VyJyksXG4gICAgdXRpbHMgPSByZXF1aXJlKCcuLi8uLi91dGlscycpLFxuICAgIG1hdGggPSByZXF1aXJlKCcuLi8uLi9tYXRoJyksXG4gICAgQ09OU1QgPSByZXF1aXJlKCcuLi8uLi9jb25zdCcpO1xuXG4vKipcbiAqIFRoZSBDYW52YXNSZW5kZXJlciBkcmF3cyB0aGUgc2NlbmUgYW5kIGFsbCBpdHMgY29udGVudCBvbnRvIGEgMmQgY2FudmFzLiBUaGlzIHJlbmRlcmVyIHNob3VsZCBiZSB1c2VkIGZvciBicm93c2VycyB0aGF0IGRvIG5vdCBzdXBwb3J0IHdlYkdMLlxuICogRG9uJ3QgZm9yZ2V0IHRvIGFkZCB0aGUgQ2FudmFzUmVuZGVyZXIudmlldyB0byB5b3VyIERPTSBvciB5b3Ugd2lsbCBub3Qgc2VlIGFueXRoaW5nIDopXG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQGV4dGVuZHMgUElYSS5TeXN0ZW1SZW5kZXJlclxuICogQHBhcmFtIFt3aWR0aD04MDBdIHtudW1iZXJ9IHRoZSB3aWR0aCBvZiB0aGUgY2FudmFzIHZpZXdcbiAqIEBwYXJhbSBbaGVpZ2h0PTYwMF0ge251bWJlcn0gdGhlIGhlaWdodCBvZiB0aGUgY2FudmFzIHZpZXdcbiAqIEBwYXJhbSBbb3B0aW9uc10ge29iamVjdH0gVGhlIG9wdGlvbmFsIHJlbmRlcmVyIHBhcmFtZXRlcnNcbiAqIEBwYXJhbSBbb3B0aW9ucy52aWV3XSB7SFRNTENhbnZhc0VsZW1lbnR9IHRoZSBjYW52YXMgdG8gdXNlIGFzIGEgdmlldywgb3B0aW9uYWxcbiAqIEBwYXJhbSBbb3B0aW9ucy50cmFuc3BhcmVudD1mYWxzZV0ge2Jvb2xlYW59IElmIHRoZSByZW5kZXIgdmlldyBpcyB0cmFuc3BhcmVudCwgZGVmYXVsdCBmYWxzZVxuICogQHBhcmFtIFtvcHRpb25zLmF1dG9SZXNpemU9ZmFsc2VdIHtib29sZWFufSBJZiB0aGUgcmVuZGVyIHZpZXcgaXMgYXV0b21hdGljYWxseSByZXNpemVkLCBkZWZhdWx0IGZhbHNlXG4gKiBAcGFyYW0gW29wdGlvbnMuYW50aWFsaWFzPWZhbHNlXSB7Ym9vbGVhbn0gc2V0cyBhbnRpYWxpYXMgKG9ubHkgYXBwbGljYWJsZSBpbiBjaHJvbWUgYXQgdGhlIG1vbWVudClcbiAqIEBwYXJhbSBbb3B0aW9ucy5yZXNvbHV0aW9uPTFdIHtudW1iZXJ9IHRoZSByZXNvbHV0aW9uIG9mIHRoZSByZW5kZXJlciByZXRpbmEgd291bGQgYmUgMlxuICogQHBhcmFtIFtvcHRpb25zLmNsZWFyQmVmb3JlUmVuZGVyPXRydWVdIHtib29sZWFufSBUaGlzIHNldHMgaWYgdGhlIENhbnZhc1JlbmRlcmVyIHdpbGwgY2xlYXIgdGhlIGNhbnZhcyBvclxuICogICAgICBub3QgYmVmb3JlIHRoZSBuZXcgcmVuZGVyIHBhc3MuXG4gKiBAcGFyYW0gW29wdGlvbnMucm91bmRQaXhlbHM9ZmFsc2VdIHtib29sZWFufSBJZiB0cnVlIFBpeGkgd2lsbCBNYXRoLmZsb29yKCkgeC95IHZhbHVlcyB3aGVuIHJlbmRlcmluZywgc3RvcHBpbmcgcGl4ZWwgaW50ZXJwb2xhdGlvbi5cbiAqL1xuZnVuY3Rpb24gQ2FudmFzUmVuZGVyZXIod2lkdGgsIGhlaWdodCwgb3B0aW9ucylcbntcbiAgICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcblxuICAgIFN5c3RlbVJlbmRlcmVyLmNhbGwodGhpcywgJ0NhbnZhcycsIHdpZHRoLCBoZWlnaHQsIG9wdGlvbnMpO1xuXG4gICAgdGhpcy50eXBlID0gQ09OU1QuUkVOREVSRVJfVFlQRS5DQU5WQVM7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgY2FudmFzIDJkIGNvbnRleHQgdGhhdCBldmVyeXRoaW5nIGlzIGRyYXduIHdpdGguXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtDYW52YXNSZW5kZXJpbmdDb250ZXh0MkR9XG4gICAgICovXG4gICAgdGhpcy5jb250ZXh0ID0gdGhpcy52aWV3LmdldENvbnRleHQoJzJkJywgeyBhbHBoYTogdGhpcy50cmFuc3BhcmVudCB9KTtcblxuICAgIC8qKlxuICAgICAqIEJvb2xlYW4gZmxhZyBjb250cm9sbGluZyBjYW52YXMgcmVmcmVzaC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICovXG4gICAgdGhpcy5yZWZyZXNoID0gdHJ1ZTtcblxuICAgIC8qKlxuICAgICAqIEluc3RhbmNlIG9mIGEgQ2FudmFzTWFza01hbmFnZXIsIGhhbmRsZXMgbWFza2luZyB3aGVuIHVzaW5nIHRoZSBjYW52YXMgcmVuZGVyZXIuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLkNhbnZhc01hc2tNYW5hZ2VyfVxuICAgICAqL1xuICAgIHRoaXMubWFza01hbmFnZXIgPSBuZXcgQ2FudmFzTWFza01hbmFnZXIoKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBjYW52YXMgcHJvcGVydHkgdXNlZCB0byBzZXQgdGhlIGNhbnZhcyBzbW9vdGhpbmcgcHJvcGVydHkuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtzdHJpbmd9XG4gICAgICovXG4gICAgdGhpcy5zbW9vdGhQcm9wZXJ0eSA9ICdpbWFnZVNtb290aGluZ0VuYWJsZWQnO1xuXG4gICAgaWYgKCF0aGlzLmNvbnRleHQuaW1hZ2VTbW9vdGhpbmdFbmFibGVkKVxuICAgIHtcbiAgICAgICAgaWYgKHRoaXMuY29udGV4dC53ZWJraXRJbWFnZVNtb290aGluZ0VuYWJsZWQpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuc21vb3RoUHJvcGVydHkgPSAnd2Via2l0SW1hZ2VTbW9vdGhpbmdFbmFibGVkJztcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh0aGlzLmNvbnRleHQubW96SW1hZ2VTbW9vdGhpbmdFbmFibGVkKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnNtb290aFByb3BlcnR5ID0gJ21vekltYWdlU21vb3RoaW5nRW5hYmxlZCc7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodGhpcy5jb250ZXh0Lm9JbWFnZVNtb290aGluZ0VuYWJsZWQpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuc21vb3RoUHJvcGVydHkgPSAnb0ltYWdlU21vb3RoaW5nRW5hYmxlZCc7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodGhpcy5jb250ZXh0Lm1zSW1hZ2VTbW9vdGhpbmdFbmFibGVkKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnNtb290aFByb3BlcnR5ID0gJ21zSW1hZ2VTbW9vdGhpbmdFbmFibGVkJztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMuaW5pdFBsdWdpbnMoKTtcblxuICAgIHRoaXMuX21hcEJsZW5kTW9kZXMoKTtcblxuICAgIC8qKlxuICAgICAqIFRoaXMgdGVtcG9yYXJ5IGRpc3BsYXkgb2JqZWN0IHVzZWQgYXMgdGhlIHBhcmVudCBvZiB0aGUgY3VycmVudGx5IGJlaW5nIHJlbmRlcmVkIGl0ZW1cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuRGlzcGxheU9iamVjdH1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX3RlbXBEaXNwbGF5T2JqZWN0UGFyZW50ID0ge1xuICAgICAgICB3b3JsZFRyYW5zZm9ybTogbmV3IG1hdGguTWF0cml4KCksXG4gICAgICAgIHdvcmxkQWxwaGE6IDFcbiAgICB9O1xuXG5cbiAgICB0aGlzLnJlc2l6ZSh3aWR0aCwgaGVpZ2h0KTtcbn1cblxuLy8gY29uc3RydWN0b3JcbkNhbnZhc1JlbmRlcmVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoU3lzdGVtUmVuZGVyZXIucHJvdG90eXBlKTtcbkNhbnZhc1JlbmRlcmVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IENhbnZhc1JlbmRlcmVyO1xubW9kdWxlLmV4cG9ydHMgPSBDYW52YXNSZW5kZXJlcjtcbnV0aWxzLnBsdWdpblRhcmdldC5taXhpbihDYW52YXNSZW5kZXJlcik7XG5cbi8qKlxuICogUmVuZGVycyB0aGUgb2JqZWN0IHRvIHRoaXMgY2FudmFzIHZpZXdcbiAqXG4gKiBAcGFyYW0gb2JqZWN0IHtQSVhJLkRpc3BsYXlPYmplY3R9IHRoZSBvYmplY3QgdG8gYmUgcmVuZGVyZWRcbiAqL1xuQ2FudmFzUmVuZGVyZXIucHJvdG90eXBlLnJlbmRlciA9IGZ1bmN0aW9uIChvYmplY3QpXG57XG4gICAgdGhpcy5lbWl0KCdwcmVyZW5kZXInKTtcblxuICAgIHZhciBjYWNoZVBhcmVudCA9IG9iamVjdC5wYXJlbnQ7XG5cbiAgICB0aGlzLl9sYXN0T2JqZWN0UmVuZGVyZWQgPSBvYmplY3Q7XG5cbiAgICBvYmplY3QucGFyZW50ID0gdGhpcy5fdGVtcERpc3BsYXlPYmplY3RQYXJlbnQ7XG5cbiAgICAvLyB1cGRhdGUgdGhlIHNjZW5lIGdyYXBoXG4gICAgb2JqZWN0LnVwZGF0ZVRyYW5zZm9ybSgpO1xuXG4gICAgb2JqZWN0LnBhcmVudCA9IGNhY2hlUGFyZW50O1xuXG4gICAgdGhpcy5jb250ZXh0LnNldFRyYW5zZm9ybSgxLCAwLCAwLCAxLCAwLCAwKTtcblxuICAgIHRoaXMuY29udGV4dC5nbG9iYWxBbHBoYSA9IDE7XG5cbiAgICB0aGlzLmNvbnRleHQuZ2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uID0gdGhpcy5ibGVuZE1vZGVzW0NPTlNULkJMRU5EX01PREVTLk5PUk1BTF07XG5cbiAgICBpZiAobmF2aWdhdG9yLmlzQ29jb29uSlMgJiYgdGhpcy52aWV3LnNjcmVlbmNhbnZhcylcbiAgICB7XG4gICAgICAgIHRoaXMuY29udGV4dC5maWxsU3R5bGUgPSAnYmxhY2snO1xuICAgICAgICB0aGlzLmNvbnRleHQuY2xlYXIoKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5jbGVhckJlZm9yZVJlbmRlcilcbiAgICB7XG4gICAgICAgIGlmICh0aGlzLnRyYW5zcGFyZW50KVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmNvbnRleHQuY2xlYXJSZWN0KDAsIDAsIHRoaXMud2lkdGgsIHRoaXMuaGVpZ2h0KTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuY29udGV4dC5maWxsU3R5bGUgPSB0aGlzLl9iYWNrZ3JvdW5kQ29sb3JTdHJpbmc7XG4gICAgICAgICAgICB0aGlzLmNvbnRleHQuZmlsbFJlY3QoMCwgMCwgdGhpcy53aWR0aCAsIHRoaXMuaGVpZ2h0KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMucmVuZGVyRGlzcGxheU9iamVjdChvYmplY3QsIHRoaXMuY29udGV4dCk7XG5cbiAgICB0aGlzLmVtaXQoJ3Bvc3RyZW5kZXInKTtcbn07XG5cbi8qKlxuICogUmVtb3ZlcyBldmVyeXRoaW5nIGZyb20gdGhlIHJlbmRlcmVyIGFuZCBvcHRpb25hbGx5IHJlbW92ZXMgdGhlIENhbnZhcyBET00gZWxlbWVudC5cbiAqXG4gKiBAcGFyYW0gW3JlbW92ZVZpZXc9ZmFsc2VdIHtib29sZWFufSBSZW1vdmVzIHRoZSBDYW52YXMgZWxlbWVudCBmcm9tIHRoZSBET00uXG4gKi9cbkNhbnZhc1JlbmRlcmVyLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKHJlbW92ZVZpZXcpXG57XG4gICAgdGhpcy5kZXN0cm95UGx1Z2lucygpO1xuXG4gICAgLy8gY2FsbCB0aGUgYmFzZSBkZXN0cm95XG4gICAgU3lzdGVtUmVuZGVyZXIucHJvdG90eXBlLmRlc3Ryb3kuY2FsbCh0aGlzLCByZW1vdmVWaWV3KTtcblxuICAgIHRoaXMuY29udGV4dCA9IG51bGw7XG5cbiAgICB0aGlzLnJlZnJlc2ggPSB0cnVlO1xuXG4gICAgdGhpcy5tYXNrTWFuYWdlci5kZXN0cm95KCk7XG4gICAgdGhpcy5tYXNrTWFuYWdlciA9IG51bGw7XG5cbiAgICB0aGlzLnNtb290aFByb3BlcnR5ID0gbnVsbDtcbn07XG5cbi8qKlxuICogUmVuZGVycyBhIGRpc3BsYXkgb2JqZWN0XG4gKlxuICogQHBhcmFtIGRpc3BsYXlPYmplY3Qge1BJWEkuRGlzcGxheU9iamVjdH0gVGhlIGRpc3BsYXlPYmplY3QgdG8gcmVuZGVyXG4gKiBAcHJpdmF0ZVxuICovXG5DYW52YXNSZW5kZXJlci5wcm90b3R5cGUucmVuZGVyRGlzcGxheU9iamVjdCA9IGZ1bmN0aW9uIChkaXNwbGF5T2JqZWN0LCBjb250ZXh0KVxue1xuICAgIHZhciB0ZW1wQ29udGV4dCA9IHRoaXMuY29udGV4dDtcblxuICAgIHRoaXMuY29udGV4dCA9IGNvbnRleHQ7XG4gICAgZGlzcGxheU9iamVjdC5yZW5kZXJDYW52YXModGhpcyk7XG4gICAgdGhpcy5jb250ZXh0ID0gdGVtcENvbnRleHQ7XG59O1xuXG4vKipcbiAqIEBleHRlbmRzIFBJWEkuU3lzdGVtUmVuZGVyZXIjcmVzaXplXG4gKlxuICogQHBhcmFtIHtudW1iZXJ9IHdcbiAqIEBwYXJhbSB7bnVtYmVyfSBoXG4gKi9cbkNhbnZhc1JlbmRlcmVyLnByb3RvdHlwZS5yZXNpemUgPSBmdW5jdGlvbiAodywgaClcbntcbiAgICBTeXN0ZW1SZW5kZXJlci5wcm90b3R5cGUucmVzaXplLmNhbGwodGhpcywgdywgaCk7XG5cbiAgICAvL3Jlc2V0IHRoZSBzY2FsZSBtb2RlLi4gb2RkbHkgdGhpcyBzZWVtcyB0byBiZSByZXNldCB3aGVuIHRoZSBjYW52YXMgaXMgcmVzaXplZC5cbiAgICAvL3N1cmVseSBhIGJyb3dzZXIgYnVnPz8gTGV0IHBpeGkgZml4IHRoYXQgZm9yIHlvdS4uXG4gICAgaWYodGhpcy5zbW9vdGhQcm9wZXJ0eSlcbiAgICB7XG4gICAgICAgIHRoaXMuY29udGV4dFt0aGlzLnNtb290aFByb3BlcnR5XSA9IChDT05TVC5TQ0FMRV9NT0RFUy5ERUZBVUxUID09PSBDT05TVC5TQ0FMRV9NT0RFUy5MSU5FQVIpO1xuICAgIH1cblxufTtcblxuLyoqXG4gKiBNYXBzIFBpeGkgYmxlbmQgbW9kZXMgdG8gY2FudmFzIGJsZW5kIG1vZGVzLlxuICpcbiAqIEBwcml2YXRlXG4gKi9cbkNhbnZhc1JlbmRlcmVyLnByb3RvdHlwZS5fbWFwQmxlbmRNb2RlcyA9IGZ1bmN0aW9uICgpXG57XG4gICAgaWYgKCF0aGlzLmJsZW5kTW9kZXMpXG4gICAge1xuICAgICAgICB0aGlzLmJsZW5kTW9kZXMgPSB7fTtcblxuICAgICAgICBpZiAodXRpbHMuY2FuVXNlTmV3Q2FudmFzQmxlbmRNb2RlcygpKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuTk9STUFMXSAgICAgICAgPSAnc291cmNlLW92ZXInO1xuICAgICAgICAgICAgdGhpcy5ibGVuZE1vZGVzW0NPTlNULkJMRU5EX01PREVTLkFERF0gICAgICAgICAgID0gJ2xpZ2h0ZXInOyAvL0lTIFRISVMgT0s/Pz9cbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5NVUxUSVBMWV0gICAgICA9ICdtdWx0aXBseSc7XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuU0NSRUVOXSAgICAgICAgPSAnc2NyZWVuJztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5PVkVSTEFZXSAgICAgICA9ICdvdmVybGF5JztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5EQVJLRU5dICAgICAgICA9ICdkYXJrZW4nO1xuICAgICAgICAgICAgdGhpcy5ibGVuZE1vZGVzW0NPTlNULkJMRU5EX01PREVTLkxJR0hURU5dICAgICAgID0gJ2xpZ2h0ZW4nO1xuICAgICAgICAgICAgdGhpcy5ibGVuZE1vZGVzW0NPTlNULkJMRU5EX01PREVTLkNPTE9SX0RPREdFXSAgID0gJ2NvbG9yLWRvZGdlJztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5DT0xPUl9CVVJOXSAgICA9ICdjb2xvci1idXJuJztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5IQVJEX0xJR0hUXSAgICA9ICdoYXJkLWxpZ2h0JztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5TT0ZUX0xJR0hUXSAgICA9ICdzb2Z0LWxpZ2h0JztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5ESUZGRVJFTkNFXSAgICA9ICdkaWZmZXJlbmNlJztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5FWENMVVNJT05dICAgICA9ICdleGNsdXNpb24nO1xuICAgICAgICAgICAgdGhpcy5ibGVuZE1vZGVzW0NPTlNULkJMRU5EX01PREVTLkhVRV0gICAgICAgICAgID0gJ2h1ZSc7XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuU0FUVVJBVElPTl0gICAgPSAnc2F0dXJhdGUnO1xuICAgICAgICAgICAgdGhpcy5ibGVuZE1vZGVzW0NPTlNULkJMRU5EX01PREVTLkNPTE9SXSAgICAgICAgID0gJ2NvbG9yJztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5MVU1JTk9TSVRZXSAgICA9ICdsdW1pbm9zaXR5JztcbiAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgIHtcbiAgICAgICAgICAgIC8vIHRoaXMgbWVhbnMgdGhhdCB0aGUgYnJvd3NlciBkb2VzIG5vdCBzdXBwb3J0IHRoZSBjb29sIG5ldyBibGVuZCBtb2RlcyBpbiBjYW52YXMgJ2NvdWdoJyBpZSAnY291Z2gnXG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuTk9STUFMXSAgICAgICAgPSAnc291cmNlLW92ZXInO1xuICAgICAgICAgICAgdGhpcy5ibGVuZE1vZGVzW0NPTlNULkJMRU5EX01PREVTLkFERF0gICAgICAgICAgID0gJ2xpZ2h0ZXInOyAvL0lTIFRISVMgT0s/Pz9cbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5NVUxUSVBMWV0gICAgICA9ICdzb3VyY2Utb3Zlcic7XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuU0NSRUVOXSAgICAgICAgPSAnc291cmNlLW92ZXInO1xuICAgICAgICAgICAgdGhpcy5ibGVuZE1vZGVzW0NPTlNULkJMRU5EX01PREVTLk9WRVJMQVldICAgICAgID0gJ3NvdXJjZS1vdmVyJztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5EQVJLRU5dICAgICAgICA9ICdzb3VyY2Utb3Zlcic7XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuTElHSFRFTl0gICAgICAgPSAnc291cmNlLW92ZXInO1xuICAgICAgICAgICAgdGhpcy5ibGVuZE1vZGVzW0NPTlNULkJMRU5EX01PREVTLkNPTE9SX0RPREdFXSAgID0gJ3NvdXJjZS1vdmVyJztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5DT0xPUl9CVVJOXSAgICA9ICdzb3VyY2Utb3Zlcic7XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuSEFSRF9MSUdIVF0gICAgPSAnc291cmNlLW92ZXInO1xuICAgICAgICAgICAgdGhpcy5ibGVuZE1vZGVzW0NPTlNULkJMRU5EX01PREVTLlNPRlRfTElHSFRdICAgID0gJ3NvdXJjZS1vdmVyJztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5ESUZGRVJFTkNFXSAgICA9ICdzb3VyY2Utb3Zlcic7XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuRVhDTFVTSU9OXSAgICAgPSAnc291cmNlLW92ZXInO1xuICAgICAgICAgICAgdGhpcy5ibGVuZE1vZGVzW0NPTlNULkJMRU5EX01PREVTLkhVRV0gICAgICAgICAgID0gJ3NvdXJjZS1vdmVyJztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5TQVRVUkFUSU9OXSAgICA9ICdzb3VyY2Utb3Zlcic7XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuQ09MT1JdICAgICAgICAgPSAnc291cmNlLW92ZXInO1xuICAgICAgICAgICAgdGhpcy5ibGVuZE1vZGVzW0NPTlNULkJMRU5EX01PREVTLkxVTUlOT1NJVFldICAgID0gJ3NvdXJjZS1vdmVyJztcbiAgICAgICAgfVxuICAgIH1cbn07XG4iLCIvKipcbiAqIENyZWF0ZXMgYSBDYW52YXMgZWxlbWVudCBvZiB0aGUgZ2l2ZW4gc2l6ZS5cbiAqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gd2lkdGgge251bWJlcn0gdGhlIHdpZHRoIGZvciB0aGUgbmV3bHkgY3JlYXRlZCBjYW52YXNcbiAqIEBwYXJhbSBoZWlnaHQge251bWJlcn0gdGhlIGhlaWdodCBmb3IgdGhlIG5ld2x5IGNyZWF0ZWQgY2FudmFzXG4gKi9cbmZ1bmN0aW9uIENhbnZhc0J1ZmZlcih3aWR0aCwgaGVpZ2h0KVxue1xuICAgIC8qKlxuICAgICAqIFRoZSBDYW52YXMgb2JqZWN0IHRoYXQgYmVsb25ncyB0byB0aGlzIENhbnZhc0J1ZmZlci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge0hUTUxDYW52YXNFbGVtZW50fVxuICAgICAqL1xuICAgIHRoaXMuY2FudmFzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnY2FudmFzJyk7XG5cbiAgICAvKipcbiAgICAgKiBBIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRCBvYmplY3QgcmVwcmVzZW50aW5nIGEgdHdvLWRpbWVuc2lvbmFsIHJlbmRlcmluZyBjb250ZXh0LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEfVxuICAgICAqL1xuICAgIHRoaXMuY29udGV4dCA9IHRoaXMuY2FudmFzLmdldENvbnRleHQoJzJkJyk7XG5cbiAgICB0aGlzLmNhbnZhcy53aWR0aCA9IHdpZHRoO1xuICAgIHRoaXMuY2FudmFzLmhlaWdodCA9IGhlaWdodDtcbn1cblxuQ2FudmFzQnVmZmVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IENhbnZhc0J1ZmZlcjtcbm1vZHVsZS5leHBvcnRzID0gQ2FudmFzQnVmZmVyO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhDYW52YXNCdWZmZXIucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogVGhlIHdpZHRoIG9mIHRoZSBjYW52YXMgYnVmZmVyIGluIHBpeGVscy5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5DYW52YXNCdWZmZXIjXG4gICAgICovXG4gICAgd2lkdGg6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jYW52YXMud2lkdGg7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbClcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5jYW52YXMud2lkdGggPSB2YWw7XG4gICAgICAgIH1cbiAgICB9LFxuICAgIC8qKlxuICAgICAqIFRoZSBoZWlnaHQgb2YgdGhlIGNhbnZhcyBidWZmZXIgaW4gcGl4ZWxzLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLkNhbnZhc0J1ZmZlciNcbiAgICAgKi9cbiAgICBoZWlnaHQ6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jYW52YXMuaGVpZ2h0O1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWwpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuY2FudmFzLmhlaWdodCA9IHZhbDtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuXG4vKipcbiAqIENsZWFycyB0aGUgY2FudmFzIHRoYXQgd2FzIGNyZWF0ZWQgYnkgdGhlIENhbnZhc0J1ZmZlciBjbGFzcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5DYW52YXNCdWZmZXIucHJvdG90eXBlLmNsZWFyID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLmNvbnRleHQuc2V0VHJhbnNmb3JtKDEsIDAsIDAsIDEsIDAsIDApO1xuICAgIHRoaXMuY29udGV4dC5jbGVhclJlY3QoMCwwLCB0aGlzLmNhbnZhcy53aWR0aCwgdGhpcy5jYW52YXMuaGVpZ2h0KTtcbn07XG5cbi8qKlxuICogUmVzaXplcyB0aGUgY2FudmFzIHRvIHRoZSBzcGVjaWZpZWQgd2lkdGggYW5kIGhlaWdodC5cbiAqXG4gKiBAcGFyYW0gd2lkdGgge251bWJlcn0gdGhlIG5ldyB3aWR0aCBvZiB0aGUgY2FudmFzXG4gKiBAcGFyYW0gaGVpZ2h0IHtudW1iZXJ9IHRoZSBuZXcgaGVpZ2h0IG9mIHRoZSBjYW52YXNcbiAqL1xuQ2FudmFzQnVmZmVyLnByb3RvdHlwZS5yZXNpemUgPSBmdW5jdGlvbiAod2lkdGgsIGhlaWdodClcbntcbiAgICB0aGlzLmNhbnZhcy53aWR0aCA9IHdpZHRoO1xuICAgIHRoaXMuY2FudmFzLmhlaWdodCA9IGhlaWdodDtcbn07XG5cbi8qKlxuICogRGVzdHJveXMgdGhpcyBjYW52YXMuXG4gKlxuICovXG5DYW52YXNCdWZmZXIucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoKVxue1xuICAgIHRoaXMuY29udGV4dCA9IG51bGw7XG4gICAgdGhpcy5jYW52YXMgPSBudWxsO1xufTtcbiIsInZhciBDT05TVCA9IHJlcXVpcmUoJy4uLy4uLy4uL2NvbnN0Jyk7XG5cbi8qKlxuICogQSBzZXQgb2YgZnVuY3Rpb25zIHVzZWQgYnkgdGhlIGNhbnZhcyByZW5kZXJlciB0byBkcmF3IHRoZSBwcmltaXRpdmUgZ3JhcGhpY3MgZGF0YS5cbiAqIEBzdGF0aWNcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqL1xudmFyIENhbnZhc0dyYXBoaWNzID0ge307XG5tb2R1bGUuZXhwb3J0cyA9IENhbnZhc0dyYXBoaWNzO1xuXG4vKlxuICogUmVuZGVycyBhIEdyYXBoaWNzIG9iamVjdCB0byBhIGNhbnZhcy5cbiAqXG4gKiBAcGFyYW0gZ3JhcGhpY3Mge1BJWEkuR3JhcGhpY3N9IHRoZSBhY3R1YWwgZ3JhcGhpY3Mgb2JqZWN0IHRvIHJlbmRlclxuICogQHBhcmFtIGNvbnRleHQge0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRH0gdGhlIDJkIGRyYXdpbmcgbWV0aG9kIG9mIHRoZSBjYW52YXNcbiAqL1xuQ2FudmFzR3JhcGhpY3MucmVuZGVyR3JhcGhpY3MgPSBmdW5jdGlvbiAoZ3JhcGhpY3MsIGNvbnRleHQpXG57XG4gICAgdmFyIHdvcmxkQWxwaGEgPSBncmFwaGljcy53b3JsZEFscGhhO1xuXG4gICAgaWYgKGdyYXBoaWNzLmRpcnR5KVxuICAgIHtcbiAgICAgICAgdGhpcy51cGRhdGVHcmFwaGljc1RpbnQoZ3JhcGhpY3MpO1xuICAgICAgICBncmFwaGljcy5kaXJ0eSA9IGZhbHNlO1xuICAgIH1cblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZ3JhcGhpY3MuZ3JhcGhpY3NEYXRhLmxlbmd0aDsgaSsrKVxuICAgIHtcbiAgICAgICAgdmFyIGRhdGEgPSBncmFwaGljcy5ncmFwaGljc0RhdGFbaV07XG4gICAgICAgIHZhciBzaGFwZSA9IGRhdGEuc2hhcGU7XG5cbiAgICAgICAgdmFyIGZpbGxDb2xvciA9IGRhdGEuX2ZpbGxUaW50O1xuICAgICAgICB2YXIgbGluZUNvbG9yID0gZGF0YS5fbGluZVRpbnQ7XG5cbiAgICAgICAgY29udGV4dC5saW5lV2lkdGggPSBkYXRhLmxpbmVXaWR0aDtcblxuICAgICAgICBpZiAoZGF0YS50eXBlID09PSBDT05TVC5TSEFQRVMuUE9MWSlcbiAgICAgICAge1xuICAgICAgICAgICAgY29udGV4dC5iZWdpblBhdGgoKTtcblxuICAgICAgICAgICAgdmFyIHBvaW50cyA9IHNoYXBlLnBvaW50cztcblxuICAgICAgICAgICAgY29udGV4dC5tb3ZlVG8ocG9pbnRzWzBdLCBwb2ludHNbMV0pO1xuXG4gICAgICAgICAgICBmb3IgKHZhciBqPTE7IGogPCBwb2ludHMubGVuZ3RoLzI7IGorKylcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb250ZXh0LmxpbmVUbyhwb2ludHNbaiAqIDJdLCBwb2ludHNbaiAqIDIgKyAxXSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChzaGFwZS5jbG9zZWQpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29udGV4dC5saW5lVG8ocG9pbnRzWzBdLCBwb2ludHNbMV0pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBpZiB0aGUgZmlyc3QgYW5kIGxhc3QgcG9pbnQgYXJlIHRoZSBzYW1lIGNsb3NlIHRoZSBwYXRoIC0gbXVjaCBuZWF0ZXIgOilcbiAgICAgICAgICAgIGlmIChwb2ludHNbMF0gPT09IHBvaW50c1twb2ludHMubGVuZ3RoLTJdICYmIHBvaW50c1sxXSA9PT0gcG9pbnRzW3BvaW50cy5sZW5ndGgtMV0pXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29udGV4dC5jbG9zZVBhdGgoKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGRhdGEuZmlsbClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb250ZXh0Lmdsb2JhbEFscGhhID0gZGF0YS5maWxsQWxwaGEgKiB3b3JsZEFscGhhO1xuICAgICAgICAgICAgICAgIGNvbnRleHQuZmlsbFN0eWxlID0gJyMnICsgKCcwMDAwMCcgKyAoIGZpbGxDb2xvciB8IDApLnRvU3RyaW5nKDE2KSkuc3Vic3RyKC02KTtcbiAgICAgICAgICAgICAgICBjb250ZXh0LmZpbGwoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChkYXRhLmxpbmVXaWR0aClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb250ZXh0Lmdsb2JhbEFscGhhID0gZGF0YS5saW5lQWxwaGEgKiB3b3JsZEFscGhhO1xuICAgICAgICAgICAgICAgIGNvbnRleHQuc3Ryb2tlU3R5bGUgPSAnIycgKyAoJzAwMDAwJyArICggbGluZUNvbG9yIHwgMCkudG9TdHJpbmcoMTYpKS5zdWJzdHIoLTYpO1xuICAgICAgICAgICAgICAgIGNvbnRleHQuc3Ryb2tlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoZGF0YS50eXBlID09PSBDT05TVC5TSEFQRVMuUkVDVClcbiAgICAgICAge1xuXG4gICAgICAgICAgICBpZiAoZGF0YS5maWxsQ29sb3IgfHwgZGF0YS5maWxsQ29sb3IgPT09IDApXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29udGV4dC5nbG9iYWxBbHBoYSA9IGRhdGEuZmlsbEFscGhhICogd29ybGRBbHBoYTtcbiAgICAgICAgICAgICAgICBjb250ZXh0LmZpbGxTdHlsZSA9ICcjJyArICgnMDAwMDAnICsgKCBmaWxsQ29sb3IgfCAwKS50b1N0cmluZygxNikpLnN1YnN0cigtNik7XG4gICAgICAgICAgICAgICAgY29udGV4dC5maWxsUmVjdChzaGFwZS54LCBzaGFwZS55LCBzaGFwZS53aWR0aCwgc2hhcGUuaGVpZ2h0KTtcblxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGRhdGEubGluZVdpZHRoKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGNvbnRleHQuZ2xvYmFsQWxwaGEgPSBkYXRhLmxpbmVBbHBoYSAqIHdvcmxkQWxwaGE7XG4gICAgICAgICAgICAgICAgY29udGV4dC5zdHJva2VTdHlsZSA9ICcjJyArICgnMDAwMDAnICsgKCBsaW5lQ29sb3IgfCAwKS50b1N0cmluZygxNikpLnN1YnN0cigtNik7XG4gICAgICAgICAgICAgICAgY29udGV4dC5zdHJva2VSZWN0KHNoYXBlLngsIHNoYXBlLnksIHNoYXBlLndpZHRoLCBzaGFwZS5oZWlnaHQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGRhdGEudHlwZSA9PT0gQ09OU1QuU0hBUEVTLkNJUkMpXG4gICAgICAgIHtcbiAgICAgICAgICAgIC8vIFRPRE8gLSBuZWVkIHRvIGJlIFVuZGVmaW5lZCFcbiAgICAgICAgICAgIGNvbnRleHQuYmVnaW5QYXRoKCk7XG4gICAgICAgICAgICBjb250ZXh0LmFyYyhzaGFwZS54LCBzaGFwZS55LCBzaGFwZS5yYWRpdXMsMCwyKk1hdGguUEkpO1xuICAgICAgICAgICAgY29udGV4dC5jbG9zZVBhdGgoKTtcblxuICAgICAgICAgICAgaWYgKGRhdGEuZmlsbClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb250ZXh0Lmdsb2JhbEFscGhhID0gZGF0YS5maWxsQWxwaGEgKiB3b3JsZEFscGhhO1xuICAgICAgICAgICAgICAgIGNvbnRleHQuZmlsbFN0eWxlID0gJyMnICsgKCcwMDAwMCcgKyAoIGZpbGxDb2xvciB8IDApLnRvU3RyaW5nKDE2KSkuc3Vic3RyKC02KTtcbiAgICAgICAgICAgICAgICBjb250ZXh0LmZpbGwoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChkYXRhLmxpbmVXaWR0aClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb250ZXh0Lmdsb2JhbEFscGhhID0gZGF0YS5saW5lQWxwaGEgKiB3b3JsZEFscGhhO1xuICAgICAgICAgICAgICAgIGNvbnRleHQuc3Ryb2tlU3R5bGUgPSAnIycgKyAoJzAwMDAwJyArICggbGluZUNvbG9yIHwgMCkudG9TdHJpbmcoMTYpKS5zdWJzdHIoLTYpO1xuICAgICAgICAgICAgICAgIGNvbnRleHQuc3Ryb2tlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoZGF0YS50eXBlID09PSBDT05TVC5TSEFQRVMuRUxJUClcbiAgICAgICAge1xuICAgICAgICAgICAgLy8gZWxsaXBzZSBjb2RlIHRha2VuIGZyb206IGh0dHA6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvMjE3Mjc5OC9ob3ctdG8tZHJhdy1hbi1vdmFsLWluLWh0bWw1LWNhbnZhc1xuXG4gICAgICAgICAgICB2YXIgdyA9IHNoYXBlLndpZHRoICogMjtcbiAgICAgICAgICAgIHZhciBoID0gc2hhcGUuaGVpZ2h0ICogMjtcblxuICAgICAgICAgICAgdmFyIHggPSBzaGFwZS54IC0gdy8yO1xuICAgICAgICAgICAgdmFyIHkgPSBzaGFwZS55IC0gaC8yO1xuXG4gICAgICAgICAgICBjb250ZXh0LmJlZ2luUGF0aCgpO1xuXG4gICAgICAgICAgICB2YXIga2FwcGEgPSAwLjU1MjI4NDgsXG4gICAgICAgICAgICAgICAgb3ggPSAodyAvIDIpICoga2FwcGEsIC8vIGNvbnRyb2wgcG9pbnQgb2Zmc2V0IGhvcml6b250YWxcbiAgICAgICAgICAgICAgICBveSA9IChoIC8gMikgKiBrYXBwYSwgLy8gY29udHJvbCBwb2ludCBvZmZzZXQgdmVydGljYWxcbiAgICAgICAgICAgICAgICB4ZSA9IHggKyB3LCAgICAgICAgICAgLy8geC1lbmRcbiAgICAgICAgICAgICAgICB5ZSA9IHkgKyBoLCAgICAgICAgICAgLy8geS1lbmRcbiAgICAgICAgICAgICAgICB4bSA9IHggKyB3IC8gMiwgICAgICAgLy8geC1taWRkbGVcbiAgICAgICAgICAgICAgICB5bSA9IHkgKyBoIC8gMjsgICAgICAgLy8geS1taWRkbGVcblxuICAgICAgICAgICAgY29udGV4dC5tb3ZlVG8oeCwgeW0pO1xuICAgICAgICAgICAgY29udGV4dC5iZXppZXJDdXJ2ZVRvKHgsIHltIC0gb3ksIHhtIC0gb3gsIHksIHhtLCB5KTtcbiAgICAgICAgICAgIGNvbnRleHQuYmV6aWVyQ3VydmVUbyh4bSArIG94LCB5LCB4ZSwgeW0gLSBveSwgeGUsIHltKTtcbiAgICAgICAgICAgIGNvbnRleHQuYmV6aWVyQ3VydmVUbyh4ZSwgeW0gKyBveSwgeG0gKyBveCwgeWUsIHhtLCB5ZSk7XG4gICAgICAgICAgICBjb250ZXh0LmJlemllckN1cnZlVG8oeG0gLSBveCwgeWUsIHgsIHltICsgb3ksIHgsIHltKTtcblxuICAgICAgICAgICAgY29udGV4dC5jbG9zZVBhdGgoKTtcblxuICAgICAgICAgICAgaWYgKGRhdGEuZmlsbClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb250ZXh0Lmdsb2JhbEFscGhhID0gZGF0YS5maWxsQWxwaGEgKiB3b3JsZEFscGhhO1xuICAgICAgICAgICAgICAgIGNvbnRleHQuZmlsbFN0eWxlID0gJyMnICsgKCcwMDAwMCcgKyAoIGZpbGxDb2xvciB8IDApLnRvU3RyaW5nKDE2KSkuc3Vic3RyKC02KTtcbiAgICAgICAgICAgICAgICBjb250ZXh0LmZpbGwoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChkYXRhLmxpbmVXaWR0aClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb250ZXh0Lmdsb2JhbEFscGhhID0gZGF0YS5saW5lQWxwaGEgKiB3b3JsZEFscGhhO1xuICAgICAgICAgICAgICAgIGNvbnRleHQuc3Ryb2tlU3R5bGUgPSAnIycgKyAoJzAwMDAwJyArICggbGluZUNvbG9yIHwgMCkudG9TdHJpbmcoMTYpKS5zdWJzdHIoLTYpO1xuICAgICAgICAgICAgICAgIGNvbnRleHQuc3Ryb2tlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoZGF0YS50eXBlID09PSBDT05TVC5TSEFQRVMuUlJFQylcbiAgICAgICAge1xuICAgICAgICAgICAgdmFyIHJ4ID0gc2hhcGUueDtcbiAgICAgICAgICAgIHZhciByeSA9IHNoYXBlLnk7XG4gICAgICAgICAgICB2YXIgd2lkdGggPSBzaGFwZS53aWR0aDtcbiAgICAgICAgICAgIHZhciBoZWlnaHQgPSBzaGFwZS5oZWlnaHQ7XG4gICAgICAgICAgICB2YXIgcmFkaXVzID0gc2hhcGUucmFkaXVzO1xuXG4gICAgICAgICAgICB2YXIgbWF4UmFkaXVzID0gTWF0aC5taW4od2lkdGgsIGhlaWdodCkgLyAyIHwgMDtcbiAgICAgICAgICAgIHJhZGl1cyA9IHJhZGl1cyA+IG1heFJhZGl1cyA/IG1heFJhZGl1cyA6IHJhZGl1cztcblxuICAgICAgICAgICAgY29udGV4dC5iZWdpblBhdGgoKTtcbiAgICAgICAgICAgIGNvbnRleHQubW92ZVRvKHJ4LCByeSArIHJhZGl1cyk7XG4gICAgICAgICAgICBjb250ZXh0LmxpbmVUbyhyeCwgcnkgKyBoZWlnaHQgLSByYWRpdXMpO1xuICAgICAgICAgICAgY29udGV4dC5xdWFkcmF0aWNDdXJ2ZVRvKHJ4LCByeSArIGhlaWdodCwgcnggKyByYWRpdXMsIHJ5ICsgaGVpZ2h0KTtcbiAgICAgICAgICAgIGNvbnRleHQubGluZVRvKHJ4ICsgd2lkdGggLSByYWRpdXMsIHJ5ICsgaGVpZ2h0KTtcbiAgICAgICAgICAgIGNvbnRleHQucXVhZHJhdGljQ3VydmVUbyhyeCArIHdpZHRoLCByeSArIGhlaWdodCwgcnggKyB3aWR0aCwgcnkgKyBoZWlnaHQgLSByYWRpdXMpO1xuICAgICAgICAgICAgY29udGV4dC5saW5lVG8ocnggKyB3aWR0aCwgcnkgKyByYWRpdXMpO1xuICAgICAgICAgICAgY29udGV4dC5xdWFkcmF0aWNDdXJ2ZVRvKHJ4ICsgd2lkdGgsIHJ5LCByeCArIHdpZHRoIC0gcmFkaXVzLCByeSk7XG4gICAgICAgICAgICBjb250ZXh0LmxpbmVUbyhyeCArIHJhZGl1cywgcnkpO1xuICAgICAgICAgICAgY29udGV4dC5xdWFkcmF0aWNDdXJ2ZVRvKHJ4LCByeSwgcngsIHJ5ICsgcmFkaXVzKTtcbiAgICAgICAgICAgIGNvbnRleHQuY2xvc2VQYXRoKCk7XG5cbiAgICAgICAgICAgIGlmIChkYXRhLmZpbGxDb2xvciB8fCBkYXRhLmZpbGxDb2xvciA9PT0gMClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb250ZXh0Lmdsb2JhbEFscGhhID0gZGF0YS5maWxsQWxwaGEgKiB3b3JsZEFscGhhO1xuICAgICAgICAgICAgICAgIGNvbnRleHQuZmlsbFN0eWxlID0gJyMnICsgKCcwMDAwMCcgKyAoIGZpbGxDb2xvciB8IDApLnRvU3RyaW5nKDE2KSkuc3Vic3RyKC02KTtcbiAgICAgICAgICAgICAgICBjb250ZXh0LmZpbGwoKTtcblxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGRhdGEubGluZVdpZHRoKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGNvbnRleHQuZ2xvYmFsQWxwaGEgPSBkYXRhLmxpbmVBbHBoYSAqIHdvcmxkQWxwaGE7XG4gICAgICAgICAgICAgICAgY29udGV4dC5zdHJva2VTdHlsZSA9ICcjJyArICgnMDAwMDAnICsgKCBsaW5lQ29sb3IgfCAwKS50b1N0cmluZygxNikpLnN1YnN0cigtNik7XG4gICAgICAgICAgICAgICAgY29udGV4dC5zdHJva2UoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn07XG5cbi8qXG4gKiBSZW5kZXJzIGEgZ3JhcGhpY3MgbWFza1xuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0gZ3JhcGhpY3Mge1BJWEkuR3JhcGhpY3N9IHRoZSBncmFwaGljcyB3aGljaCB3aWxsIGJlIHVzZWQgYXMgYSBtYXNrXG4gKiBAcGFyYW0gY29udGV4dCB7Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEfSB0aGUgY29udGV4dCAyZCBtZXRob2Qgb2YgdGhlIGNhbnZhc1xuICovXG5DYW52YXNHcmFwaGljcy5yZW5kZXJHcmFwaGljc01hc2sgPSBmdW5jdGlvbiAoZ3JhcGhpY3MsIGNvbnRleHQpXG57XG4gICAgdmFyIGxlbiA9IGdyYXBoaWNzLmdyYXBoaWNzRGF0YS5sZW5ndGg7XG5cbiAgICBpZiAobGVuID09PSAwKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnRleHQuYmVnaW5QYXRoKCk7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgaSsrKVxuICAgIHtcbiAgICAgICAgdmFyIGRhdGEgPSBncmFwaGljcy5ncmFwaGljc0RhdGFbaV07XG4gICAgICAgIHZhciBzaGFwZSA9IGRhdGEuc2hhcGU7XG5cbiAgICAgICAgaWYgKGRhdGEudHlwZSA9PT0gQ09OU1QuU0hBUEVTLlBPTFkpXG4gICAgICAgIHtcblxuICAgICAgICAgICAgdmFyIHBvaW50cyA9IHNoYXBlLnBvaW50cztcblxuICAgICAgICAgICAgY29udGV4dC5tb3ZlVG8ocG9pbnRzWzBdLCBwb2ludHNbMV0pO1xuXG4gICAgICAgICAgICBmb3IgKHZhciBqPTE7IGogPCBwb2ludHMubGVuZ3RoLzI7IGorKylcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb250ZXh0LmxpbmVUbyhwb2ludHNbaiAqIDJdLCBwb2ludHNbaiAqIDIgKyAxXSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIGlmIHRoZSBmaXJzdCBhbmQgbGFzdCBwb2ludCBhcmUgdGhlIHNhbWUgY2xvc2UgdGhlIHBhdGggLSBtdWNoIG5lYXRlciA6KVxuICAgICAgICAgICAgaWYgKHBvaW50c1swXSA9PT0gcG9pbnRzW3BvaW50cy5sZW5ndGgtMl0gJiYgcG9pbnRzWzFdID09PSBwb2ludHNbcG9pbnRzLmxlbmd0aC0xXSlcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb250ZXh0LmNsb3NlUGF0aCgpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoZGF0YS50eXBlID09PSBDT05TVC5TSEFQRVMuUkVDVClcbiAgICAgICAge1xuICAgICAgICAgICAgY29udGV4dC5yZWN0KHNoYXBlLngsIHNoYXBlLnksIHNoYXBlLndpZHRoLCBzaGFwZS5oZWlnaHQpO1xuICAgICAgICAgICAgY29udGV4dC5jbG9zZVBhdGgoKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChkYXRhLnR5cGUgPT09IENPTlNULlNIQVBFUy5DSVJDKVxuICAgICAgICB7XG4gICAgICAgICAgICAvLyBUT0RPIC0gbmVlZCB0byBiZSBVbmRlZmluZWQhXG4gICAgICAgICAgICBjb250ZXh0LmFyYyhzaGFwZS54LCBzaGFwZS55LCBzaGFwZS5yYWRpdXMsIDAsIDIgKiBNYXRoLlBJKTtcbiAgICAgICAgICAgIGNvbnRleHQuY2xvc2VQYXRoKCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoZGF0YS50eXBlID09PSBDT05TVC5TSEFQRVMuRUxJUClcbiAgICAgICAge1xuXG4gICAgICAgICAgICAvLyBlbGxpcHNlIGNvZGUgdGFrZW4gZnJvbTogaHR0cDovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy8yMTcyNzk4L2hvdy10by1kcmF3LWFuLW92YWwtaW4taHRtbDUtY2FudmFzXG5cbiAgICAgICAgICAgIHZhciB3ID0gc2hhcGUud2lkdGggKiAyO1xuICAgICAgICAgICAgdmFyIGggPSBzaGFwZS5oZWlnaHQgKiAyO1xuXG4gICAgICAgICAgICB2YXIgeCA9IHNoYXBlLnggLSB3LzI7XG4gICAgICAgICAgICB2YXIgeSA9IHNoYXBlLnkgLSBoLzI7XG5cbiAgICAgICAgICAgIHZhciBrYXBwYSA9IDAuNTUyMjg0OCxcbiAgICAgICAgICAgICAgICBveCA9ICh3IC8gMikgKiBrYXBwYSwgLy8gY29udHJvbCBwb2ludCBvZmZzZXQgaG9yaXpvbnRhbFxuICAgICAgICAgICAgICAgIG95ID0gKGggLyAyKSAqIGthcHBhLCAvLyBjb250cm9sIHBvaW50IG9mZnNldCB2ZXJ0aWNhbFxuICAgICAgICAgICAgICAgIHhlID0geCArIHcsICAgICAgICAgICAvLyB4LWVuZFxuICAgICAgICAgICAgICAgIHllID0geSArIGgsICAgICAgICAgICAvLyB5LWVuZFxuICAgICAgICAgICAgICAgIHhtID0geCArIHcgLyAyLCAgICAgICAvLyB4LW1pZGRsZVxuICAgICAgICAgICAgICAgIHltID0geSArIGggLyAyOyAgICAgICAvLyB5LW1pZGRsZVxuXG4gICAgICAgICAgICBjb250ZXh0Lm1vdmVUbyh4LCB5bSk7XG4gICAgICAgICAgICBjb250ZXh0LmJlemllckN1cnZlVG8oeCwgeW0gLSBveSwgeG0gLSBveCwgeSwgeG0sIHkpO1xuICAgICAgICAgICAgY29udGV4dC5iZXppZXJDdXJ2ZVRvKHhtICsgb3gsIHksIHhlLCB5bSAtIG95LCB4ZSwgeW0pO1xuICAgICAgICAgICAgY29udGV4dC5iZXppZXJDdXJ2ZVRvKHhlLCB5bSArIG95LCB4bSArIG94LCB5ZSwgeG0sIHllKTtcbiAgICAgICAgICAgIGNvbnRleHQuYmV6aWVyQ3VydmVUbyh4bSAtIG94LCB5ZSwgeCwgeW0gKyBveSwgeCwgeW0pO1xuICAgICAgICAgICAgY29udGV4dC5jbG9zZVBhdGgoKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChkYXRhLnR5cGUgPT09IENPTlNULlNIQVBFUy5SUkVDKVxuICAgICAgICB7XG5cbiAgICAgICAgICAgIHZhciByeCA9IHNoYXBlLng7XG4gICAgICAgICAgICB2YXIgcnkgPSBzaGFwZS55O1xuICAgICAgICAgICAgdmFyIHdpZHRoID0gc2hhcGUud2lkdGg7XG4gICAgICAgICAgICB2YXIgaGVpZ2h0ID0gc2hhcGUuaGVpZ2h0O1xuICAgICAgICAgICAgdmFyIHJhZGl1cyA9IHNoYXBlLnJhZGl1cztcblxuICAgICAgICAgICAgdmFyIG1heFJhZGl1cyA9IE1hdGgubWluKHdpZHRoLCBoZWlnaHQpIC8gMiB8IDA7XG4gICAgICAgICAgICByYWRpdXMgPSByYWRpdXMgPiBtYXhSYWRpdXMgPyBtYXhSYWRpdXMgOiByYWRpdXM7XG5cbiAgICAgICAgICAgIGNvbnRleHQubW92ZVRvKHJ4LCByeSArIHJhZGl1cyk7XG4gICAgICAgICAgICBjb250ZXh0LmxpbmVUbyhyeCwgcnkgKyBoZWlnaHQgLSByYWRpdXMpO1xuICAgICAgICAgICAgY29udGV4dC5xdWFkcmF0aWNDdXJ2ZVRvKHJ4LCByeSArIGhlaWdodCwgcnggKyByYWRpdXMsIHJ5ICsgaGVpZ2h0KTtcbiAgICAgICAgICAgIGNvbnRleHQubGluZVRvKHJ4ICsgd2lkdGggLSByYWRpdXMsIHJ5ICsgaGVpZ2h0KTtcbiAgICAgICAgICAgIGNvbnRleHQucXVhZHJhdGljQ3VydmVUbyhyeCArIHdpZHRoLCByeSArIGhlaWdodCwgcnggKyB3aWR0aCwgcnkgKyBoZWlnaHQgLSByYWRpdXMpO1xuICAgICAgICAgICAgY29udGV4dC5saW5lVG8ocnggKyB3aWR0aCwgcnkgKyByYWRpdXMpO1xuICAgICAgICAgICAgY29udGV4dC5xdWFkcmF0aWNDdXJ2ZVRvKHJ4ICsgd2lkdGgsIHJ5LCByeCArIHdpZHRoIC0gcmFkaXVzLCByeSk7XG4gICAgICAgICAgICBjb250ZXh0LmxpbmVUbyhyeCArIHJhZGl1cywgcnkpO1xuICAgICAgICAgICAgY29udGV4dC5xdWFkcmF0aWNDdXJ2ZVRvKHJ4LCByeSwgcngsIHJ5ICsgcmFkaXVzKTtcbiAgICAgICAgICAgIGNvbnRleHQuY2xvc2VQYXRoKCk7XG4gICAgICAgIH1cbiAgICB9XG59O1xuXG4vKlxuICogVXBkYXRlcyB0aGUgdGludCBvZiBhIGdyYXBoaWNzIG9iamVjdFxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0gZ3JhcGhpY3Mge1BJWEkuR3JhcGhpY3N9IHRoZSBncmFwaGljcyB0aGF0IHdpbGwgaGF2ZSBpdHMgdGludCB1cGRhdGVkXG4gKlxuICovXG5DYW52YXNHcmFwaGljcy51cGRhdGVHcmFwaGljc1RpbnQgPSBmdW5jdGlvbiAoZ3JhcGhpY3MpXG57XG4gICAgaWYgKGdyYXBoaWNzLnRpbnQgPT09IDB4RkZGRkZGICYmIGdyYXBoaWNzLl9wcmV2VGludCA9PT0gZ3JhcGhpY3MudGludClcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgZ3JhcGhpY3MuX3ByZXZUaW50ID0gZ3JhcGhpY3MudGludDtcblxuICAgIHZhciB0aW50UiA9IChncmFwaGljcy50aW50ID4+IDE2ICYgMHhGRikgLyAyNTU7XG4gICAgdmFyIHRpbnRHID0gKGdyYXBoaWNzLnRpbnQgPj4gOCAmIDB4RkYpIC8gMjU1O1xuICAgIHZhciB0aW50QiA9IChncmFwaGljcy50aW50ICYgMHhGRikvIDI1NTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZ3JhcGhpY3MuZ3JhcGhpY3NEYXRhLmxlbmd0aDsgaSsrKVxuICAgIHtcbiAgICAgICAgdmFyIGRhdGEgPSBncmFwaGljcy5ncmFwaGljc0RhdGFbaV07XG5cbiAgICAgICAgdmFyIGZpbGxDb2xvciA9IGRhdGEuZmlsbENvbG9yIHwgMDtcbiAgICAgICAgdmFyIGxpbmVDb2xvciA9IGRhdGEubGluZUNvbG9yIHwgMDtcblxuICAgICAgICAvKlxuICAgICAgICB2YXIgY29sb3JSID0gKGZpbGxDb2xvciA+PiAxNiAmIDB4RkYpIC8gMjU1O1xuICAgICAgICB2YXIgY29sb3JHID0gKGZpbGxDb2xvciA+PiA4ICYgMHhGRikgLyAyNTU7XG4gICAgICAgIHZhciBjb2xvckIgPSAoZmlsbENvbG9yICYgMHhGRikgLyAyNTU7XG5cbiAgICAgICAgY29sb3JSICo9IHRpbnRSO1xuICAgICAgICBjb2xvckcgKj0gdGludEc7XG4gICAgICAgIGNvbG9yQiAqPSB0aW50QjtcblxuICAgICAgICBmaWxsQ29sb3IgPSAoKGNvbG9yUioyNTUgPDwgMTYpICsgKGNvbG9yRyoyNTUgPDwgOCkgKyBjb2xvckIqMjU1KTtcblxuICAgICAgICBjb2xvclIgPSAobGluZUNvbG9yID4+IDE2ICYgMHhGRikgLyAyNTU7XG4gICAgICAgIGNvbG9yRyA9IChsaW5lQ29sb3IgPj4gOCAmIDB4RkYpIC8gMjU1O1xuICAgICAgICBjb2xvckIgPSAobGluZUNvbG9yICYgMHhGRikgLyAyNTU7XG5cbiAgICAgICAgY29sb3JSICo9IHRpbnRSO1xuICAgICAgICBjb2xvckcgKj0gdGludEc7XG4gICAgICAgIGNvbG9yQiAqPSB0aW50QjtcblxuICAgICAgICBsaW5lQ29sb3IgPSAoKGNvbG9yUioyNTUgPDwgMTYpICsgKGNvbG9yRyoyNTUgPDwgOCkgKyBjb2xvckIqMjU1KTtcbiAgICAgICAgKi9cblxuICAgICAgICAvLyBzdXBlciBpbmxpbmUgY29zIGltIGFuIG9wdGltaXphdGlvbiBOQVpJIDopXG4gICAgICAgIGRhdGEuX2ZpbGxUaW50ID0gKCgoZmlsbENvbG9yID4+IDE2ICYgMHhGRikgLyAyNTUgKiB0aW50UioyNTUgPDwgMTYpICsgKChmaWxsQ29sb3IgPj4gOCAmIDB4RkYpIC8gMjU1ICogdGludEcqMjU1IDw8IDgpICsgIChmaWxsQ29sb3IgJiAweEZGKSAvIDI1NSAqIHRpbnRCKjI1NSk7XG4gICAgICAgIGRhdGEuX2xpbmVUaW50ID0gKCgobGluZUNvbG9yID4+IDE2ICYgMHhGRikgLyAyNTUgKiB0aW50UioyNTUgPDwgMTYpICsgKChsaW5lQ29sb3IgPj4gOCAmIDB4RkYpIC8gMjU1ICogdGludEcqMjU1IDw8IDgpICsgIChsaW5lQ29sb3IgJiAweEZGKSAvIDI1NSAqIHRpbnRCKjI1NSk7XG5cbiAgICB9XG59O1xuXG4iLCJ2YXIgQ2FudmFzR3JhcGhpY3MgPSByZXF1aXJlKCcuL0NhbnZhc0dyYXBoaWNzJyk7XG5cbi8qKlxuICogQSBzZXQgb2YgZnVuY3Rpb25zIHVzZWQgdG8gaGFuZGxlIG1hc2tpbmcuXG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICovXG5mdW5jdGlvbiBDYW52YXNNYXNrTWFuYWdlcigpXG57fVxuXG5DYW52YXNNYXNrTWFuYWdlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBDYW52YXNNYXNrTWFuYWdlcjtcbm1vZHVsZS5leHBvcnRzID0gQ2FudmFzTWFza01hbmFnZXI7XG5cbi8qKlxuICogVGhpcyBtZXRob2QgYWRkcyBpdCB0byB0aGUgY3VycmVudCBzdGFjayBvZiBtYXNrcy5cbiAqXG4gKiBAcGFyYW0gbWFza0RhdGEge29iamVjdH0gdGhlIG1hc2tEYXRhIHRoYXQgd2lsbCBiZSBwdXNoZWRcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5XZWJHTFJlbmRlcmVyfFBJWEkuQ2FudmFzUmVuZGVyZXJ9IFRoZSByZW5kZXJlciBjb250ZXh0IHRvIHVzZS5cbiAqL1xuQ2FudmFzTWFza01hbmFnZXIucHJvdG90eXBlLnB1c2hNYXNrID0gZnVuY3Rpb24gKG1hc2tEYXRhLCByZW5kZXJlcilcbntcblxuICAgIHJlbmRlcmVyLmNvbnRleHQuc2F2ZSgpO1xuXG4gICAgdmFyIGNhY2hlQWxwaGEgPSBtYXNrRGF0YS5hbHBoYTtcbiAgICB2YXIgdHJhbnNmb3JtID0gbWFza0RhdGEud29ybGRUcmFuc2Zvcm07XG4gICAgdmFyIHJlc29sdXRpb24gPSByZW5kZXJlci5yZXNvbHV0aW9uO1xuXG4gICAgcmVuZGVyZXIuY29udGV4dC5zZXRUcmFuc2Zvcm0oXG4gICAgICAgIHRyYW5zZm9ybS5hICogcmVzb2x1dGlvbixcbiAgICAgICAgdHJhbnNmb3JtLmIgKiByZXNvbHV0aW9uLFxuICAgICAgICB0cmFuc2Zvcm0uYyAqIHJlc29sdXRpb24sXG4gICAgICAgIHRyYW5zZm9ybS5kICogcmVzb2x1dGlvbixcbiAgICAgICAgdHJhbnNmb3JtLnR4ICogcmVzb2x1dGlvbixcbiAgICAgICAgdHJhbnNmb3JtLnR5ICogcmVzb2x1dGlvblxuICAgICk7XG5cbiAgICAvL1RPRE8gc3Vwb3J0IHNwcml0ZSBhbHBoYSBtYXNrcz8/XG4gICAgLy9sb3RzIG9mIGVmZm9ydCByZXF1aXJlZC4gSWYgZGVtYW5kIGlzIGdyZWF0IGVub3VnaC4uXG4gICAgaWYoIW1hc2tEYXRhLnRleHR1cmUpXG4gICAge1xuICAgICAgICBDYW52YXNHcmFwaGljcy5yZW5kZXJHcmFwaGljc01hc2sobWFza0RhdGEsIHJlbmRlcmVyLmNvbnRleHQpO1xuICAgICAgICByZW5kZXJlci5jb250ZXh0LmNsaXAoKTtcbiAgICB9XG5cbiAgICBtYXNrRGF0YS53b3JsZEFscGhhID0gY2FjaGVBbHBoYTtcbn07XG5cbi8qKlxuICogUmVzdG9yZXMgdGhlIGN1cnJlbnQgZHJhd2luZyBjb250ZXh0IHRvIHRoZSBzdGF0ZSBpdCB3YXMgYmVmb3JlIHRoZSBtYXNrIHdhcyBhcHBsaWVkLlxuICpcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5XZWJHTFJlbmRlcmVyfFBJWEkuQ2FudmFzUmVuZGVyZXJ9IFRoZSByZW5kZXJlciBjb250ZXh0IHRvIHVzZS5cbiAqL1xuQ2FudmFzTWFza01hbmFnZXIucHJvdG90eXBlLnBvcE1hc2sgPSBmdW5jdGlvbiAocmVuZGVyZXIpXG57XG4gICAgcmVuZGVyZXIuY29udGV4dC5yZXN0b3JlKCk7XG59O1xuXG5DYW52YXNNYXNrTWFuYWdlci5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uICgpIHt9O1xuIiwidmFyIHV0aWxzID0gcmVxdWlyZSgnLi4vLi4vLi4vdXRpbHMnKTtcblxuLyoqXG4gKiBVdGlsaXR5IG1ldGhvZHMgZm9yIFNwcml0ZS9UZXh0dXJlIHRpbnRpbmcuXG4gKiBAc3RhdGljXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKi9cbnZhciBDYW52YXNUaW50ZXIgPSB7fTtcbm1vZHVsZS5leHBvcnRzID0gQ2FudmFzVGludGVyO1xuXG4vKipcbiAqIEJhc2ljYWxseSB0aGlzIG1ldGhvZCBqdXN0IG5lZWRzIGEgc3ByaXRlIGFuZCBhIGNvbG9yIGFuZCB0aW50cyB0aGUgc3ByaXRlIHdpdGggdGhlIGdpdmVuIGNvbG9yLlxuICpcbiAqIEBwYXJhbSBzcHJpdGUge1BJWEkuU3ByaXRlfSB0aGUgc3ByaXRlIHRvIHRpbnRcbiAqIEBwYXJhbSBjb2xvciB7bnVtYmVyfSB0aGUgY29sb3IgdG8gdXNlIHRvIHRpbnQgdGhlIHNwcml0ZSB3aXRoXG4gKiBAcmV0dXJuIHtIVE1MQ2FudmFzRWxlbWVudH0gVGhlIHRpbnRlZCBjYW52YXNcbiAqL1xuQ2FudmFzVGludGVyLmdldFRpbnRlZFRleHR1cmUgPSBmdW5jdGlvbiAoc3ByaXRlLCBjb2xvcilcbntcbiAgICB2YXIgdGV4dHVyZSA9IHNwcml0ZS50ZXh0dXJlO1xuXG4gICAgY29sb3IgPSBDYW52YXNUaW50ZXIucm91bmRDb2xvcihjb2xvcik7XG5cbiAgICB2YXIgc3RyaW5nQ29sb3IgPSAnIycgKyAoJzAwMDAwJyArICggY29sb3IgfCAwKS50b1N0cmluZygxNikpLnN1YnN0cigtNik7XG5cbiAgICB0ZXh0dXJlLnRpbnRDYWNoZSA9IHRleHR1cmUudGludENhY2hlIHx8IHt9O1xuXG4gICAgaWYgKHRleHR1cmUudGludENhY2hlW3N0cmluZ0NvbG9yXSlcbiAgICB7XG4gICAgICAgIHJldHVybiB0ZXh0dXJlLnRpbnRDYWNoZVtzdHJpbmdDb2xvcl07XG4gICAgfVxuXG4gICAgIC8vIGNsb25lIHRleHR1cmUuLlxuICAgIHZhciBjYW52YXMgPSBDYW52YXNUaW50ZXIuY2FudmFzIHx8IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NhbnZhcycpO1xuXG4gICAgLy9DYW52YXNUaW50ZXIudGludFdpdGhQZXJQaXhlbCh0ZXh0dXJlLCBzdHJpbmdDb2xvciwgY2FudmFzKTtcbiAgICBDYW52YXNUaW50ZXIudGludE1ldGhvZCh0ZXh0dXJlLCBjb2xvciwgY2FudmFzKTtcblxuICAgIGlmIChDYW52YXNUaW50ZXIuY29udmVydFRpbnRUb0ltYWdlKVxuICAgIHtcbiAgICAgICAgLy8gaXMgdGhpcyBiZXR0ZXI/XG4gICAgICAgIHZhciB0aW50SW1hZ2UgPSBuZXcgSW1hZ2UoKTtcbiAgICAgICAgdGludEltYWdlLnNyYyA9IGNhbnZhcy50b0RhdGFVUkwoKTtcblxuICAgICAgICB0ZXh0dXJlLnRpbnRDYWNoZVtzdHJpbmdDb2xvcl0gPSB0aW50SW1hZ2U7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHRleHR1cmUudGludENhY2hlW3N0cmluZ0NvbG9yXSA9IGNhbnZhcztcbiAgICAgICAgLy8gaWYgd2UgYXJlIG5vdCBjb252ZXJ0aW5nIHRoZSB0ZXh0dXJlIHRvIGFuIGltYWdlIHRoZW4gd2UgbmVlZCB0byBsb3NlIHRoZSByZWZlcmVuY2UgdG8gdGhlIGNhbnZhc1xuICAgICAgICBDYW52YXNUaW50ZXIuY2FudmFzID0gbnVsbDtcbiAgICB9XG5cbiAgICByZXR1cm4gY2FudmFzO1xufTtcblxuLyoqXG4gKiBUaW50IGEgdGV4dHVyZSB1c2luZyB0aGUgJ211bHRpcGx5JyBvcGVyYXRpb24uXG4gKlxuICogQHBhcmFtIHRleHR1cmUge1BJWEkuVGV4dHVyZX0gdGhlIHRleHR1cmUgdG8gdGludFxuICogQHBhcmFtIGNvbG9yIHtudW1iZXJ9IHRoZSBjb2xvciB0byB1c2UgdG8gdGludCB0aGUgc3ByaXRlIHdpdGhcbiAqIEBwYXJhbSBjYW52YXMge0hUTUxDYW52YXNFbGVtZW50fSB0aGUgY3VycmVudCBjYW52YXNcbiAqL1xuQ2FudmFzVGludGVyLnRpbnRXaXRoTXVsdGlwbHkgPSBmdW5jdGlvbiAodGV4dHVyZSwgY29sb3IsIGNhbnZhcylcbntcbiAgICB2YXIgY29udGV4dCA9IGNhbnZhcy5nZXRDb250ZXh0KCAnMmQnICk7XG5cbiAgICB2YXIgcmVzb2x1dGlvbiA9IHRleHR1cmUuYmFzZVRleHR1cmUucmVzb2x1dGlvbjtcblxuICAgIHZhciBjcm9wID0gdGV4dHVyZS5jcm9wLmNsb25lKCk7XG4gICAgY3JvcC54ICo9IHJlc29sdXRpb247XG4gICAgY3JvcC55ICo9IHJlc29sdXRpb247XG4gICAgY3JvcC53aWR0aCAqPSByZXNvbHV0aW9uO1xuICAgIGNyb3AuaGVpZ2h0ICo9IHJlc29sdXRpb247XG5cbiAgICBjYW52YXMud2lkdGggPSBjcm9wLndpZHRoO1xuICAgIGNhbnZhcy5oZWlnaHQgPSBjcm9wLmhlaWdodDtcblxuICAgIGNvbnRleHQuZmlsbFN0eWxlID0gJyMnICsgKCcwMDAwMCcgKyAoIGNvbG9yIHwgMCkudG9TdHJpbmcoMTYpKS5zdWJzdHIoLTYpO1xuXG4gICAgY29udGV4dC5maWxsUmVjdCgwLCAwLCBjcm9wLndpZHRoLCBjcm9wLmhlaWdodCk7XG5cbiAgICBjb250ZXh0Lmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbiA9ICdtdWx0aXBseSc7XG5cbiAgICBjb250ZXh0LmRyYXdJbWFnZShcbiAgICAgICAgdGV4dHVyZS5iYXNlVGV4dHVyZS5zb3VyY2UsXG4gICAgICAgIGNyb3AueCxcbiAgICAgICAgY3JvcC55LFxuICAgICAgICBjcm9wLndpZHRoLFxuICAgICAgICBjcm9wLmhlaWdodCxcbiAgICAgICAgMCxcbiAgICAgICAgMCxcbiAgICAgICAgY3JvcC53aWR0aCxcbiAgICAgICAgY3JvcC5oZWlnaHRcbiAgICApO1xuXG4gICAgY29udGV4dC5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb24gPSAnZGVzdGluYXRpb24tYXRvcCc7XG5cbiAgICBjb250ZXh0LmRyYXdJbWFnZShcbiAgICAgICAgdGV4dHVyZS5iYXNlVGV4dHVyZS5zb3VyY2UsXG4gICAgICAgIGNyb3AueCxcbiAgICAgICAgY3JvcC55LFxuICAgICAgICBjcm9wLndpZHRoLFxuICAgICAgICBjcm9wLmhlaWdodCxcbiAgICAgICAgMCxcbiAgICAgICAgMCxcbiAgICAgICAgY3JvcC53aWR0aCxcbiAgICAgICAgY3JvcC5oZWlnaHRcbiAgICApO1xufTtcblxuLyoqXG4gKiBUaW50IGEgdGV4dHVyZSB1c2luZyB0aGUgJ292ZXJsYXknIG9wZXJhdGlvbi5cbiAqXG4gKiBAcGFyYW0gdGV4dHVyZSB7UElYSS5UZXh0dXJlfSB0aGUgdGV4dHVyZSB0byB0aW50XG4gKiBAcGFyYW0gY29sb3Ige251bWJlcn0gdGhlIGNvbG9yIHRvIHVzZSB0byB0aW50IHRoZSBzcHJpdGUgd2l0aFxuICogQHBhcmFtIGNhbnZhcyB7SFRNTENhbnZhc0VsZW1lbnR9IHRoZSBjdXJyZW50IGNhbnZhc1xuICovXG5DYW52YXNUaW50ZXIudGludFdpdGhPdmVybGF5ID0gZnVuY3Rpb24gKHRleHR1cmUsIGNvbG9yLCBjYW52YXMpXG57XG4gICAgdmFyIGNvbnRleHQgPSBjYW52YXMuZ2V0Q29udGV4dCggJzJkJyApO1xuXG4gICAgdmFyIHJlc29sdXRpb24gPSB0ZXh0dXJlLmJhc2VUZXh0dXJlLnJlc29sdXRpb247XG5cbiAgICB2YXIgY3JvcCA9IHRleHR1cmUuY3JvcC5jbG9uZSgpO1xuICAgIGNyb3AueCAqPSByZXNvbHV0aW9uO1xuICAgIGNyb3AueSAqPSByZXNvbHV0aW9uO1xuICAgIGNyb3Aud2lkdGggKj0gcmVzb2x1dGlvbjtcbiAgICBjcm9wLmhlaWdodCAqPSByZXNvbHV0aW9uO1xuXG4gICAgY2FudmFzLndpZHRoID0gY3JvcC53aWR0aDtcbiAgICBjYW52YXMuaGVpZ2h0ID0gY3JvcC5oZWlnaHQ7XG5cbiAgICBjb250ZXh0Lmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbiA9ICdjb3B5JztcbiAgICBjb250ZXh0LmZpbGxTdHlsZSA9ICcjJyArICgnMDAwMDAnICsgKCBjb2xvciB8IDApLnRvU3RyaW5nKDE2KSkuc3Vic3RyKC02KTtcbiAgICBjb250ZXh0LmZpbGxSZWN0KDAsIDAsIGNyb3Aud2lkdGgsIGNyb3AuaGVpZ2h0KTtcblxuICAgIGNvbnRleHQuZ2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uID0gJ2Rlc3RpbmF0aW9uLWF0b3AnO1xuICAgIGNvbnRleHQuZHJhd0ltYWdlKFxuICAgICAgICB0ZXh0dXJlLmJhc2VUZXh0dXJlLnNvdXJjZSxcbiAgICAgICAgY3JvcC54LFxuICAgICAgICBjcm9wLnksXG4gICAgICAgIGNyb3Aud2lkdGgsXG4gICAgICAgIGNyb3AuaGVpZ2h0LFxuICAgICAgICAwLFxuICAgICAgICAwLFxuICAgICAgICBjcm9wLndpZHRoLFxuICAgICAgICBjcm9wLmhlaWdodFxuICAgICk7XG5cbiAgICAvLyBjb250ZXh0Lmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbiA9ICdjb3B5Jztcbn07XG5cbi8qKlxuICogVGludCBhIHRleHR1cmUgcGl4ZWwgcGVyIHBpeGVsLlxuICpcbiAqIEBwYXJhbSB0ZXh0dXJlIHtQSVhJLlRleHR1cmV9IHRoZSB0ZXh0dXJlIHRvIHRpbnRcbiAqIEBwYXJhbSBjb2xvciB7bnVtYmVyfSB0aGUgY29sb3IgdG8gdXNlIHRvIHRpbnQgdGhlIHNwcml0ZSB3aXRoXG4gKiBAcGFyYW0gY2FudmFzIHtIVE1MQ2FudmFzRWxlbWVudH0gdGhlIGN1cnJlbnQgY2FudmFzXG4gKi9cbkNhbnZhc1RpbnRlci50aW50V2l0aFBlclBpeGVsID0gZnVuY3Rpb24gKHRleHR1cmUsIGNvbG9yLCBjYW52YXMpXG57XG4gICAgdmFyIGNvbnRleHQgPSBjYW52YXMuZ2V0Q29udGV4dCggJzJkJyApO1xuXG4gICAgdmFyIHJlc29sdXRpb24gPSB0ZXh0dXJlLmJhc2VUZXh0dXJlLnJlc29sdXRpb247XG5cbiAgICB2YXIgY3JvcCA9IHRleHR1cmUuY3JvcC5jbG9uZSgpO1xuICAgIGNyb3AueCAqPSByZXNvbHV0aW9uO1xuICAgIGNyb3AueSAqPSByZXNvbHV0aW9uO1xuICAgIGNyb3Aud2lkdGggKj0gcmVzb2x1dGlvbjtcbiAgICBjcm9wLmhlaWdodCAqPSByZXNvbHV0aW9uO1xuXG4gICAgY2FudmFzLndpZHRoID0gY3JvcC53aWR0aDtcbiAgICBjYW52YXMuaGVpZ2h0ID0gY3JvcC5oZWlnaHQ7XG5cbiAgICBjb250ZXh0Lmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbiA9ICdjb3B5JztcbiAgICBjb250ZXh0LmRyYXdJbWFnZShcbiAgICAgICAgdGV4dHVyZS5iYXNlVGV4dHVyZS5zb3VyY2UsXG4gICAgICAgIGNyb3AueCxcbiAgICAgICAgY3JvcC55LFxuICAgICAgICBjcm9wLndpZHRoLFxuICAgICAgICBjcm9wLmhlaWdodCxcbiAgICAgICAgMCxcbiAgICAgICAgMCxcbiAgICAgICAgY3JvcC53aWR0aCxcbiAgICAgICAgY3JvcC5oZWlnaHRcbiAgICApO1xuXG4gICAgdmFyIHJnYlZhbHVlcyA9IHV0aWxzLmhleDJyZ2IoY29sb3IpO1xuICAgIHZhciByID0gcmdiVmFsdWVzWzBdLCBnID0gcmdiVmFsdWVzWzFdLCBiID0gcmdiVmFsdWVzWzJdO1xuXG4gICAgdmFyIHBpeGVsRGF0YSA9IGNvbnRleHQuZ2V0SW1hZ2VEYXRhKDAsIDAsIGNyb3Aud2lkdGgsIGNyb3AuaGVpZ2h0KTtcblxuICAgIHZhciBwaXhlbHMgPSBwaXhlbERhdGEuZGF0YTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcGl4ZWxzLmxlbmd0aDsgaSArPSA0KVxuICAgIHtcbiAgICAgICAgcGl4ZWxzW2krMF0gKj0gcjtcbiAgICAgICAgcGl4ZWxzW2krMV0gKj0gZztcbiAgICAgICAgcGl4ZWxzW2krMl0gKj0gYjtcbiAgICB9XG5cbiAgICBjb250ZXh0LnB1dEltYWdlRGF0YShwaXhlbERhdGEsIDAsIDApO1xufTtcblxuLyoqXG4gKiBSb3VuZHMgdGhlIHNwZWNpZmllZCBjb2xvciBhY2NvcmRpbmcgdG8gdGhlIENhbnZhc1RpbnRlci5jYWNoZVN0ZXBzUGVyQ29sb3JDaGFubmVsLlxuICpcbiAqIEBwYXJhbSBjb2xvciB7bnVtYmVyfSB0aGUgY29sb3IgdG8gcm91bmQsIHNob3VsZCBiZSBhIGhleCBjb2xvclxuICovXG5DYW52YXNUaW50ZXIucm91bmRDb2xvciA9IGZ1bmN0aW9uIChjb2xvcilcbntcbiAgICB2YXIgc3RlcCA9IENhbnZhc1RpbnRlci5jYWNoZVN0ZXBzUGVyQ29sb3JDaGFubmVsO1xuXG4gICAgdmFyIHJnYlZhbHVlcyA9IHV0aWxzLmhleDJyZ2IoY29sb3IpO1xuXG4gICAgcmdiVmFsdWVzWzBdID0gTWF0aC5taW4oMjU1LCAocmdiVmFsdWVzWzBdIC8gc3RlcCkgKiBzdGVwKTtcbiAgICByZ2JWYWx1ZXNbMV0gPSBNYXRoLm1pbigyNTUsIChyZ2JWYWx1ZXNbMV0gLyBzdGVwKSAqIHN0ZXApO1xuICAgIHJnYlZhbHVlc1syXSA9IE1hdGgubWluKDI1NSwgKHJnYlZhbHVlc1syXSAvIHN0ZXApICogc3RlcCk7XG5cbiAgICByZXR1cm4gdXRpbHMucmdiMmhleChyZ2JWYWx1ZXMpO1xufTtcblxuLyoqXG4gKiBOdW1iZXIgb2Ygc3RlcHMgd2hpY2ggd2lsbCBiZSB1c2VkIGFzIGEgY2FwIHdoZW4gcm91bmRpbmcgY29sb3JzLlxuICpcbiAqIEBtZW1iZXJcbiAqL1xuQ2FudmFzVGludGVyLmNhY2hlU3RlcHNQZXJDb2xvckNoYW5uZWwgPSA4O1xuXG4vKipcbiAqIFRpbnQgY2FjaGUgYm9vbGVhbiBmbGFnLlxuICpcbiAqIEBtZW1iZXJcbiAqL1xuQ2FudmFzVGludGVyLmNvbnZlcnRUaW50VG9JbWFnZSA9IGZhbHNlO1xuXG4vKipcbiAqIFdoZXRoZXIgb3Igbm90IHRoZSBDYW52YXMgQmxlbmRNb2RlcyBhcmUgc3VwcG9ydGVkLCBjb25zZXF1ZW50bHkgdGhlIGFiaWxpdHkgdG8gdGludCB1c2luZyB0aGUgbXVsdGlwbHkgbWV0aG9kLlxuICpcbiAqIEBtZW1iZXJcbiAqL1xuQ2FudmFzVGludGVyLmNhblVzZU11bHRpcGx5ID0gdXRpbHMuY2FuVXNlTmV3Q2FudmFzQmxlbmRNb2RlcygpO1xuXG4vKipcbiAqIFRoZSB0aW50aW5nIG1ldGhvZCB0aGF0IHdpbGwgYmUgdXNlZC5cbiAqXG4gKi9cbkNhbnZhc1RpbnRlci50aW50TWV0aG9kID0gQ2FudmFzVGludGVyLmNhblVzZU11bHRpcGx5ID8gQ2FudmFzVGludGVyLnRpbnRXaXRoTXVsdGlwbHkgOiAgQ2FudmFzVGludGVyLnRpbnRXaXRoUGVyUGl4ZWw7XG4iLCJ2YXIgR0xUZXh0dXJlID0gcmVxdWlyZSgncGl4aS1nbC1jb3JlJykuR0xUZXh0dXJlLFxuXHR1dGlscyA9IHJlcXVpcmUoJy4uLy4uL3V0aWxzJyk7XG5cbi8qKlxuICogSGVscGVyIGNsYXNzIHRvIGNyZWF0ZSBhIHdlYkdMIFRleHR1cmVcbiAqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gZ2wge1dlYkdMUmVuZGVyaW5nQ29udGV4dH1cbiAqL1xuXG52YXIgVGV4dHVyZU1hbmFnZXIgPSBmdW5jdGlvbihnbClcbntcblx0dGhpcy5nbCA9IGdsO1xuXG5cdC8vIHRyYWNrIHRleHR1cmVzIGluIHRoZSByZW5kZXJlciBzbyB3ZSBjYW4gbm8gbG9uZ2VyIGxpc3RlbiB0byB0aGVtIG9uIGRlc3RydWN0aW9uLlxuXHR0aGlzLl9tYW5hZ2VkVGV4dHVyZXMgPSBbXTtcbiAgICB0aGlzLmdsVGV4dHVyZXMgPSB7fTtcblxufVxuXG5UZXh0dXJlTWFuYWdlci5wcm90b3R5cGUuYmluZFRleHR1cmUgPSBmdW5jdGlvbih0ZXh0dXJlKVxue1xuXG59XG5cblxuVGV4dHVyZU1hbmFnZXIucHJvdG90eXBlLmdldFRleHR1cmUgPSBmdW5jdGlvbih0ZXh0dXJlKVxue1xuXG59XG5cbi8qKlxuICogVXBkYXRlcyBhbmQvb3IgQ3JlYXRlcyBhIFdlYkdMIHRleHR1cmUgZm9yIHRoZSByZW5kZXJlcidzIGNvbnRleHQuXG4gKlxuICogQHBhcmFtIHRleHR1cmUge1BJWEkuQmFzZVRleHR1cmV8UElYSS5UZXh0dXJlfSB0aGUgdGV4dHVyZSB0byB1cGRhdGVcbiAqL1xuVGV4dHVyZU1hbmFnZXIucHJvdG90eXBlLnVwZGF0ZVRleHR1cmUgPSBmdW5jdGlvbih0ZXh0dXJlKVxue1xuXHR0ZXh0dXJlID0gdGV4dHVyZS5iYXNlVGV4dHVyZSB8fCB0ZXh0dXJlO1xuXG5cdGlmICghdGV4dHVyZS5oYXNMb2FkZWQpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgXG4gICAgdmFyIGdsID0gdGhpcy5nbDtcbiAgICB2YXIgZ2xUZXh0dXJlID0gdGhpcy5nbFRleHR1cmVzW3RleHR1cmUudWlkXS8vdGV4dHVyZS5fZ2xUZXh0dXJlc1tnbC5pZF07XG5cbiAgICBpZiAoIWdsVGV4dHVyZSlcbiAgICB7XG4gICAgICAgIGdsVGV4dHVyZSA9IG5ldyBHTFRleHR1cmUoZ2wpO1xuICAgICAgICBnbFRleHR1cmUucHJlbXVsdGlwbHlBbHBoYSA9IHRydWVcbiAgICAgICAgdGV4dHVyZS5fZ2xUZXh0dXJlc1tnbC5pZF0gPSBnbFRleHR1cmU7XG5cbiAgICAgICAvLyB0aGlzLmdsVGV4dHVyZXNbdGV4dHVyZS51aWRdID0gZ2xUZXh0dXJlO1xuXG4gICAgICAgIHRleHR1cmUub24oJ3VwZGF0ZScsIHRoaXMudXBkYXRlVGV4dHVyZSwgdGhpcyk7XG4gICAgICAgIHRleHR1cmUub24oJ2Rpc3Bvc2UnLCB0aGlzLmRlc3Ryb3lUZXh0dXJlLCB0aGlzKTtcbiAgICAgICAgXG4gICAgICAgIHRoaXMuX21hbmFnZWRUZXh0dXJlcy5wdXNoKHRleHR1cmUpO1xuICAgIH1cblxuICAgIGdsVGV4dHVyZS51cGxvYWQodGV4dHVyZS5zb3VyY2UpO1xuICAgIFxuICAgIC8vVE9ETyBjaGVjayBpcyBwb3dlciBvZiB0d28uLlxuICAgIGdsVGV4dHVyZS5lbmFibGVXcmFwQ2xhbXAoKTtcblxuXG4gICAgLy8gVE9ETyBjaGVjayBmb3Igc2NhbGluZyB0eXBlXG4gICAgZ2xUZXh0dXJlLmVuYWJsZUxpbmVhclNjYWxpbmcoKTtcblxuICAgIHJldHVybiAgdGV4dHVyZS5fZ2xUZXh0dXJlc1tnbC5pZF07XG59XG5cbi8qKlxuICogRGVsZXRlcyB0aGUgdGV4dHVyZSBmcm9tIFdlYkdMXG4gKlxuICogQHBhcmFtIHRleHR1cmUge1BJWEkuQmFzZVRleHR1cmV8UElYSS5UZXh0dXJlfSB0aGUgdGV4dHVyZSB0byBkZXN0cm95XG4gKi9cblRleHR1cmVNYW5hZ2VyLnByb3RvdHlwZS5kZXN0cm95VGV4dHVyZSA9IGZ1bmN0aW9uKHRleHR1cmUsIF9za2lwUmVtb3ZlKVxue1xuXHR0ZXh0dXJlID0gdGV4dHVyZS5iYXNlVGV4dHVyZSB8fCB0ZXh0dXJlO1xuXG4gICAgaWYgKCF0ZXh0dXJlLmhhc0xvYWRlZClcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAodGV4dHVyZS5fZ2xUZXh0dXJlc1t0aGlzLmdsLmlkXSlcbiAgICB7XG4gICAgICAgIHRleHR1cmUuX2dsVGV4dHVyZXNbdGhpcy5nbC5pZF0uZGVzdHJveSgpO1xuICAgICAgICB0ZXh0dXJlLm9mZigndXBkYXRlJywgdGhpcy51cGRhdGVUZXh0dXJlLCB0aGlzKTtcbiAgICAgICAgdGV4dHVyZS5vZmYoJ2Rpc3Bvc2UnLCB0aGlzLmRlc3Ryb3lUZXh0dXJlLCB0aGlzKTtcblxuXG4gICAgICAgIGRlbGV0ZSB0ZXh0dXJlLl9nbFRleHR1cmVzW3RoaXMuZ2wuaWRdO1xuXG4gICAgICAgIGlmICghX3NraXBSZW1vdmUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHZhciBpID0gdGhpcy5fbWFuYWdlZFRleHR1cmVzLmluZGV4T2YodGV4dHVyZSk7XG4gICAgICAgICAgICBpZiAoaSAhPT0gLTEpIHtcbiAgICAgICAgICAgICAgICB1dGlscy5yZW1vdmVJdGVtcyh0aGlzLl9tYW5hZ2VkVGV4dHVyZXMsIGksIDEpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxufVxuXG5UZXh0dXJlTWFuYWdlci5wcm90b3R5cGUucmVtb3ZlQWxsID0gZnVuY3Rpb24oKVxue1xuXHQvLyBlbXB0eSBhbGwgdGhlIG9sZCBnbCB0ZXh0dXJlcyBhcyB0aGV5IGFyZSB1c2VsZXNzIG5vd1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5fbWFuYWdlZFRleHR1cmVzLmxlbmd0aDsgKytpKVxuICAgIHtcbiAgICAgICAgdmFyIHRleHR1cmUgPSB0aGlzLl9tYW5hZ2VkVGV4dHVyZXNbaV07XG4gICAgICAgIGlmICh0ZXh0dXJlLl9nbFRleHR1cmVzW3RoaXMuZ2wuaWRdKVxuICAgICAgICB7XG4gICAgICAgICAgICBkZWxldGUgdGV4dHVyZS5fZ2xUZXh0dXJlc1t0aGlzLmdsLmlkXTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuVGV4dHVyZU1hbmFnZXIucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbigpXG57XG4gICAgLy8gZGVzdHJveSBtYW5hZ2VkIHRleHR1cmVzXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLl9tYW5hZ2VkVGV4dHVyZXMubGVuZ3RoOyArK2kpXG4gICAge1xuICAgICAgICB2YXIgdGV4dHVyZSA9IHRoaXMuX21hbmFnZWRUZXh0dXJlc1tpXTtcbiAgICAgICAgdGhpcy5kZXN0cm95VGV4dHVyZSh0ZXh0dXJlLCB0cnVlKTtcbiAgICAgICAgdGV4dHVyZS5vZmYoJ3VwZGF0ZScsIHRoaXMudXBkYXRlVGV4dHVyZSwgdGhpcyk7XG4gICAgICAgIHRleHR1cmUub2ZmKCdkaXNwb3NlJywgdGhpcy5kZXN0cm95VGV4dHVyZSwgdGhpcyk7XG4gICAgfVxuXG4gICAgdGhpcy5fbWFuYWdlZFRleHR1cmVzID0gbnVsbDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBUZXh0dXJlTWFuYWdlcjtcblxuIiwidmFyIFN5c3RlbVJlbmRlcmVyID0gcmVxdWlyZSgnLi4vU3lzdGVtUmVuZGVyZXInKSxcbiAgICBTaGFkZXJNYW5hZ2VyID0gcmVxdWlyZSgnLi9tYW5hZ2Vycy9TaGFkZXJNYW5hZ2VyJyksXG4gICAgTWFza01hbmFnZXIgPSByZXF1aXJlKCcuL21hbmFnZXJzL01hc2tNYW5hZ2VyJyksXG4gICAgU3RlbmNpbE1hbmFnZXIgPSByZXF1aXJlKCcuL21hbmFnZXJzL1N0ZW5jaWxNYW5hZ2VyJyksXG4gICAgRmlsdGVyTWFuYWdlciA9IHJlcXVpcmUoJy4vbWFuYWdlcnMvRmlsdGVyTWFuYWdlcicpLFxuICAgIEJsZW5kTW9kZU1hbmFnZXIgPSByZXF1aXJlKCcuL21hbmFnZXJzL0JsZW5kTW9kZU1hbmFnZXInKSxcbiAgICBSZW5kZXJUYXJnZXQgPSByZXF1aXJlKCcuL3V0aWxzL1JlbmRlclRhcmdldCcpLFxuICAgIE9iamVjdFJlbmRlcmVyID0gcmVxdWlyZSgnLi91dGlscy9PYmplY3RSZW5kZXJlcicpLFxuICAgIEZYQUFGaWx0ZXIgPSByZXF1aXJlKCcuL2ZpbHRlcnMvRlhBQUZpbHRlcicpLFxuICAgIFRleHR1cmVNYW5hZ2VyID0gcmVxdWlyZSgnLi9UZXh0dXJlTWFuYWdlcicpLFxuICAgIGNyZWF0ZUNvbnRleHQgPSByZXF1aXJlKCdwaXhpLWdsLWNvcmUnKS5jcmVhdGVDb250ZXh0LFxuICAgIG1hcFdlYkdMQmxlbmRNb2Rlc1RvUGl4aSA9IHJlcXVpcmUoJy4vdXRpbHMvbWFwV2ViR0xCbGVuZE1vZGVzVG9QaXhpJyksXG4gICAgbWFwV2ViR0xEcmF3TW9kZXNUb1BpeGkgPSByZXF1aXJlKCcuL3V0aWxzL21hcFdlYkdMRHJhd01vZGVzVG9QaXhpJyksXG4gICAgdXRpbHMgPSByZXF1aXJlKCcuLi8uLi91dGlscycpLFxuICAgIENPTlNUID0gcmVxdWlyZSgnLi4vLi4vY29uc3QnKTtcblxuLyoqXG4gKiBUaGUgV2ViR0xSZW5kZXJlciBkcmF3cyB0aGUgc2NlbmUgYW5kIGFsbCBpdHMgY29udGVudCBvbnRvIGEgd2ViR0wgZW5hYmxlZCBjYW52YXMuIFRoaXMgcmVuZGVyZXJcbiAqIHNob3VsZCBiZSB1c2VkIGZvciBicm93c2VycyB0aGF0IHN1cHBvcnQgd2ViR0wuIFRoaXMgUmVuZGVyIHdvcmtzIGJ5IGF1dG9tYXRpY2FsbHkgbWFuYWdpbmcgd2ViR0xCYXRjaHMuXG4gKiBTbyBubyBuZWVkIGZvciBTcHJpdGUgQmF0Y2hlcyBvciBTcHJpdGUgQ2xvdWRzLlxuICogRG9uJ3QgZm9yZ2V0IHRvIGFkZCB0aGUgdmlldyB0byB5b3VyIERPTSBvciB5b3Ugd2lsbCBub3Qgc2VlIGFueXRoaW5nIDopXG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQGV4dGVuZHMgUElYSS5TeXN0ZW1SZW5kZXJlclxuICogQHBhcmFtIFt3aWR0aD0wXSB7bnVtYmVyfSB0aGUgd2lkdGggb2YgdGhlIGNhbnZhcyB2aWV3XG4gKiBAcGFyYW0gW2hlaWdodD0wXSB7bnVtYmVyfSB0aGUgaGVpZ2h0IG9mIHRoZSBjYW52YXMgdmlld1xuICogQHBhcmFtIFtvcHRpb25zXSB7b2JqZWN0fSBUaGUgb3B0aW9uYWwgcmVuZGVyZXIgcGFyYW1ldGVyc1xuICogQHBhcmFtIFtvcHRpb25zLnZpZXddIHtIVE1MQ2FudmFzRWxlbWVudH0gdGhlIGNhbnZhcyB0byB1c2UgYXMgYSB2aWV3LCBvcHRpb25hbFxuICogQHBhcmFtIFtvcHRpb25zLnRyYW5zcGFyZW50PWZhbHNlXSB7Ym9vbGVhbn0gSWYgdGhlIHJlbmRlciB2aWV3IGlzIHRyYW5zcGFyZW50LCBkZWZhdWx0IGZhbHNlXG4gKiBAcGFyYW0gW29wdGlvbnMuYXV0b1Jlc2l6ZT1mYWxzZV0ge2Jvb2xlYW59IElmIHRoZSByZW5kZXIgdmlldyBpcyBhdXRvbWF0aWNhbGx5IHJlc2l6ZWQsIGRlZmF1bHQgZmFsc2VcbiAqIEBwYXJhbSBbb3B0aW9ucy5hbnRpYWxpYXM9ZmFsc2VdIHtib29sZWFufSBzZXRzIGFudGlhbGlhcy4gSWYgbm90IGF2YWlsYWJsZSBuYXRpdmVseSB0aGVuIEZYQUEgYW50aWFsaWFzaW5nIGlzIHVzZWRcbiAqIEBwYXJhbSBbb3B0aW9ucy5mb3JjZUZYQUE9ZmFsc2VdIHtib29sZWFufSBmb3JjZXMgRlhBQSBhbnRpYWxpYXNpbmcgdG8gYmUgdXNlZCBvdmVyIG5hdGl2ZS4gRlhBQSBpcyBmYXN0ZXIsIGJ1dCBtYXkgbm90IGFsd2F5cyBsb29rIGFzIGdyZWF0XG4gKiBAcGFyYW0gW29wdGlvbnMucmVzb2x1dGlvbj0xXSB7bnVtYmVyfSB0aGUgcmVzb2x1dGlvbiBvZiB0aGUgcmVuZGVyZXIgcmV0aW5hIHdvdWxkIGJlIDJcbiAqIEBwYXJhbSBbb3B0aW9ucy5jbGVhckJlZm9yZVJlbmRlcj10cnVlXSB7Ym9vbGVhbn0gVGhpcyBzZXRzIGlmIHRoZSBDYW52YXNSZW5kZXJlciB3aWxsIGNsZWFyIHRoZSBjYW52YXMgb3JcbiAqICAgICAgbm90IGJlZm9yZSB0aGUgbmV3IHJlbmRlciBwYXNzLiBJZiB5b3Ugd2lzaCB0byBzZXQgdGhpcyB0byBmYWxzZSwgeW91ICptdXN0KiBzZXQgcHJlc2VydmVEcmF3aW5nQnVmZmVyIHRvIGB0cnVlYC5cbiAqIEBwYXJhbSBbb3B0aW9ucy5wcmVzZXJ2ZURyYXdpbmdCdWZmZXI9ZmFsc2VdIHtib29sZWFufSBlbmFibGVzIGRyYXdpbmcgYnVmZmVyIHByZXNlcnZhdGlvbiwgZW5hYmxlIHRoaXMgaWZcbiAqICAgICAgeW91IG5lZWQgdG8gY2FsbCB0b0RhdGFVcmwgb24gdGhlIHdlYmdsIGNvbnRleHQuXG4gKiBAcGFyYW0gW29wdGlvbnMucm91bmRQaXhlbHM9ZmFsc2VdIHtib29sZWFufSBJZiB0cnVlIFBpeGkgd2lsbCBNYXRoLmZsb29yKCkgeC95IHZhbHVlcyB3aGVuIHJlbmRlcmluZywgc3RvcHBpbmcgcGl4ZWwgaW50ZXJwb2xhdGlvbi5cbiAqL1xuZnVuY3Rpb24gV2ViR0xSZW5kZXJlcih3aWR0aCwgaGVpZ2h0LCBvcHRpb25zKVxue1xuICAgIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuXG4gICAgU3lzdGVtUmVuZGVyZXIuY2FsbCh0aGlzLCAnV2ViR0wnLCB3aWR0aCwgaGVpZ2h0LCBvcHRpb25zKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSB0eXBlIG9mIHRoaXMgcmVuZGVyZXIgYXMgYSBzdGFuZGFyZGlzZWQgY29uc3RcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn0vL1xuICAgICAqXG4gICAgICovXG4gICAgdGhpcy50eXBlID0gQ09OU1QuUkVOREVSRVJfVFlQRS5XRUJHTDtcblxuICAgIHRoaXMuaGFuZGxlQ29udGV4dExvc3QgPSB0aGlzLmhhbmRsZUNvbnRleHRMb3N0LmJpbmQodGhpcyk7XG4gICAgdGhpcy5oYW5kbGVDb250ZXh0UmVzdG9yZWQgPSB0aGlzLmhhbmRsZUNvbnRleHRSZXN0b3JlZC5iaW5kKHRoaXMpO1xuXG4gICAgdGhpcy52aWV3LmFkZEV2ZW50TGlzdGVuZXIoJ3dlYmdsY29udGV4dGxvc3QnLCB0aGlzLmhhbmRsZUNvbnRleHRMb3N0LCBmYWxzZSk7XG4gICAgdGhpcy52aWV3LmFkZEV2ZW50TGlzdGVuZXIoJ3dlYmdsY29udGV4dHJlc3RvcmVkJywgdGhpcy5oYW5kbGVDb250ZXh0UmVzdG9yZWQsIGZhbHNlKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBvcHRpb25zIHBhc3NlZCBpbiB0byBjcmVhdGUgYSBuZXcgd2ViZ2wgY29udGV4dC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge29iamVjdH1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX2NvbnRleHRPcHRpb25zID0ge1xuICAgICAgICBhbHBoYTogdGhpcy50cmFuc3BhcmVudCxcbiAgICAgICAgYW50aWFsaWFzOiBvcHRpb25zLmFudGlhbGlhcyxcbiAgICAgICAgcHJlbXVsdGlwbGllZEFscGhhOiB0aGlzLnRyYW5zcGFyZW50ICYmIHRoaXMudHJhbnNwYXJlbnQgIT09ICdub3RNdWx0aXBsaWVkJyxcbiAgICAgICAgc3RlbmNpbDogdHJ1ZSxcbiAgICAgICAgcHJlc2VydmVEcmF3aW5nQnVmZmVyOiBvcHRpb25zLnByZXNlcnZlRHJhd2luZ0J1ZmZlclxuICAgIH07XG5cbiAgICB0aGlzLl9iYWNrZ3JvdW5kQ29sb3JSZ2JhWzNdID0gdGhpcy50cmFuc3BhcmVudCA/IDAgOiAxO1xuXG4gICAgLyoqXG4gICAgICogRGVhbHMgd2l0aCBtYW5hZ2luZyB0aGUgc2hhZGVyIHByb2dyYW1zIGFuZCB0aGVpciBhdHRyaWJzLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5TaGFkZXJNYW5hZ2VyfVxuICAgICAqL1xuICAgIHRoaXMuc2hhZGVyTWFuYWdlciA9IG5ldyBTaGFkZXJNYW5hZ2VyKHRoaXMpO1xuXG4gICAgLyoqXG4gICAgICogTWFuYWdlcyB0aGUgbWFza3MgdXNpbmcgdGhlIHN0ZW5jaWwgYnVmZmVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5NYXNrTWFuYWdlcn1cbiAgICAgKi9cbiAgICB0aGlzLm1hc2tNYW5hZ2VyID0gbmV3IE1hc2tNYW5hZ2VyKHRoaXMpO1xuXG4gICAgLyoqXG4gICAgICogTWFuYWdlcyB0aGUgc3RlbmNpbCBidWZmZXIuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlN0ZW5jaWxNYW5hZ2VyfVxuICAgICAqL1xuICAgIHRoaXMuc3RlbmNpbE1hbmFnZXIgPSBuZXcgU3RlbmNpbE1hbmFnZXIodGhpcyk7XG5cbiAgICAvKipcbiAgICAgKiBNYW5hZ2VzIHRoZSBmaWx0ZXJzLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5GaWx0ZXJNYW5hZ2VyfVxuICAgICAqL1xuICAgIHRoaXMuZmlsdGVyTWFuYWdlciA9IG5ldyBGaWx0ZXJNYW5hZ2VyKHRoaXMpO1xuXG4gICAgLyoqXG4gICAgICogTWFuYWdlcyB0aGUgYmxlbmRNb2Rlc1xuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5CbGVuZE1vZGVNYW5hZ2VyfVxuICAgICAqL1xuICAgIHRoaXMuYmxlbmRNb2RlTWFuYWdlciA9IG5ldyBCbGVuZE1vZGVNYW5hZ2VyKHRoaXMpO1xuXG4gICAgXG4gICAgLyoqXG4gICAgICogVGhlIGN1cnJlbnRseSBhY3RpdmUgT2JqZWN0UmVuZGVyZXIuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLk9iamVjdFJlbmRlcmVyfVxuICAgICAqL1xuICAgIHRoaXMuY3VycmVudFJlbmRlcmVyID0gbmV3IE9iamVjdFJlbmRlcmVyKHRoaXMpO1xuXG4gICAgdGhpcy5pbml0UGx1Z2lucygpO1xuXG4gICAgLy8gaW5pdGlhbGl6ZSB0aGUgY29udGV4dCBzbyBpdCBpcyByZWFkeSBmb3IgdGhlIG1hbmFnZXJzLlxuICAgIHRoaXMuZ2wgPSBjcmVhdGVDb250ZXh0KHRoaXMudmlldywgdGhpcy5fY29udGV4dE9wdGlvbnMpO1xuXG4gICAgdGhpcy5faW5pdENvbnRleHQoKTtcblxuICAgIC8vIG1hcCBzb21lIHdlYkdMIGJsZW5kIGFuZCBkcmF3bW9kZXMuLlxuICAgIHRoaXMuYmxlbmRNb2RlcyA9IG1hcFdlYkdMQmxlbmRNb2Rlc1RvUGl4aShnbCk7XG4gICAgdGhpcy5kcmF3TW9kZXMgPSBtYXBXZWJHTERyYXdNb2Rlc1RvUGl4aShnbClcblxuICAgIHRoaXMuX2FjdGl2ZVNoYWRlciA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBIb2xkcyB0aGUgY3VycmVudCByZW5kZXIgdGFyZ2V0XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlJlbmRlclRhcmdldH1cbiAgICAgKi9cbiAgICB0aGlzLl9hY3RpdmVSZW5kZXJUYXJnZXQgPSBudWxsO1xuICAgIHRoaXMuX2FjdGl2ZVRleHR1cmVMb2NhdGlvbiA9IG51bGw7XG4gICAgdGhpcy5fYWN0aXZlVGV4dHVyZSA9IG51bGw7XG59XG5cbi8vIGNvbnN0cnVjdG9yXG5XZWJHTFJlbmRlcmVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoU3lzdGVtUmVuZGVyZXIucHJvdG90eXBlKTtcbldlYkdMUmVuZGVyZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gV2ViR0xSZW5kZXJlcjtcbm1vZHVsZS5leHBvcnRzID0gV2ViR0xSZW5kZXJlcjtcbnV0aWxzLnBsdWdpblRhcmdldC5taXhpbihXZWJHTFJlbmRlcmVyKTtcblxuLyoqXG4gKiBDcmVhdGVzIHRoZSBXZWJHTCBjb250ZXh0XG4gKlxuICogQHByaXZhdGVcbiAqL1xuV2ViR0xSZW5kZXJlci5wcm90b3R5cGUuX2luaXRDb250ZXh0ID0gZnVuY3Rpb24gKClcbntcbiAgICB2YXIgZ2wgPSB0aGlzLmdsO1xuXG4gICAgLy8gY3JlYXRlIGEgdGV4dHVyZSBtYW5hZ2VyLi4uXG4gICAgdGhpcy50ZXh0dXJlTWFuYWdlciA9IG5ldyBUZXh0dXJlTWFuYWdlcihnbCk7XG5cbiAgICAvLyBzZXQgdXAgdGhlIGRlZmF1bHQgcGl4aSBzZXR0aW5ncy4uXG4gICAgZ2wuZGlzYWJsZShnbC5ERVBUSF9URVNUKTtcbiAgICBnbC5kaXNhYmxlKGdsLkNVTExfRkFDRSk7XG4gICAgZ2wuZW5hYmxlKGdsLkJMRU5EKTtcblxuXG4gICAgdGhpcy5yb290UmVuZGVyVGFyZ2V0ID0gbmV3IFJlbmRlclRhcmdldChnbCwgdGhpcy53aWR0aCwgdGhpcy5oZWlnaHQsIG51bGwsIHRoaXMucmVzb2x1dGlvbiwgdHJ1ZSk7XG4gICAgdGhpcy5yb290UmVuZGVyVGFyZ2V0LmNsZWFyQ29sb3IgPSB0aGlzLl9iYWNrZ3JvdW5kQ29sb3JSZ2JhO1xuICAgIFxuICAgIHRoaXMuYmluZFJlbmRlclRhcmdldCh0aGlzLnJvb3RSZW5kZXJUYXJnZXQpO1xuXG4gICAgdGhpcy5lbWl0KCdjb250ZXh0JywgZ2wpO1xuXG4gICAgLy8gc2V0dXAgdGhlIHdpZHRoL2hlaWdodCBwcm9wZXJ0aWVzIGFuZCBnbCB2aWV3cG9ydFxuICAgIHRoaXMucmVzaXplKHRoaXMud2lkdGgsIHRoaXMuaGVpZ2h0KTsgICAgXG59O1xuXG4vKipcbiAqIFJlbmRlcnMgdGhlIG9iamVjdCB0byBpdHMgd2ViR0wgdmlld1xuICpcbiAqIEBwYXJhbSBvYmplY3Qge1BJWEkuRGlzcGxheU9iamVjdH0gdGhlIG9iamVjdCB0byBiZSByZW5kZXJlZFxuICovXG5XZWJHTFJlbmRlcmVyLnByb3RvdHlwZS5yZW5kZXIgPSBmdW5jdGlvbiAoZGlzcGxheU9iamVjdClcbntcbiAgICB0aGlzLmVtaXQoJ3ByZXJlbmRlcicpO1xuXG4gICAgLy8gbm8gcG9pbnQgcmVuZGVyaW5nIGlmIG91ciBjb250ZXh0IGhhcyBiZWVuIGJsb3duIHVwIVxuICAgIGlmICh0aGlzLmdsLmlzQ29udGV4dExvc3QoKSlcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLl9sYXN0T2JqZWN0UmVuZGVyZWQgPSBkaXNwbGF5T2JqZWN0O1xuXG4gICAgdmFyIGNhY2hlUGFyZW50ID0gZGlzcGxheU9iamVjdC5wYXJlbnQ7XG4gICAgZGlzcGxheU9iamVjdC5wYXJlbnQgPSB0aGlzLl90ZW1wRGlzcGxheU9iamVjdFBhcmVudDtcbiAgICAvLyB1cGRhdGUgdGhlIHNjZW5lIGdyYXBoXG4gICAgZGlzcGxheU9iamVjdC51cGRhdGVUcmFuc2Zvcm0oKTtcbiAgICBkaXNwbGF5T2JqZWN0LnBhcmVudCA9IGNhY2hlUGFyZW50O1xuXG4gICAgdGhpcy5yZW5kZXJEaXNwbGF5T2JqZWN0KGRpc3BsYXlPYmplY3QsIHRoaXMucm9vdFJlbmRlclRhcmdldCwgdGhpcy5jbGVhckJlZm9yZVJlbmRlcik7Ly90aGlzLnByb2plY3Rpb24pO1xuXG4gICAgdGhpcy5lbWl0KCdwb3N0cmVuZGVyJyk7XG59O1xuXG4vKipcbiAqIFJlbmRlcnMgYSBEaXNwbGF5IE9iamVjdC5cbiAqXG4gKiBAcGFyYW0gZGlzcGxheU9iamVjdCB7UElYSS5EaXNwbGF5T2JqZWN0fSBUaGUgRGlzcGxheU9iamVjdCB0byByZW5kZXJcbiAqIEBwYXJhbSByZW5kZXJUYXJnZXQge1BJWEkuUmVuZGVyVGFyZ2V0fSBUaGUgcmVuZGVyIHRhcmdldCB0byB1c2UgdG8gcmVuZGVyIHRoaXMgZGlzcGxheSBvYmplY3RcbiAqXG4gKi9cbldlYkdMUmVuZGVyZXIucHJvdG90eXBlLnJlbmRlckRpc3BsYXlPYmplY3QgPSBmdW5jdGlvbiAoZGlzcGxheU9iamVjdCwgcmVuZGVyVGFyZ2V0LCBjbGVhcikvL3Byb2plY3Rpb24sIGJ1ZmZlcilcbntcbiAgICB0aGlzLmJpbmRSZW5kZXJUYXJnZXQocmVuZGVyVGFyZ2V0KTtcblxuICAgIGlmKGNsZWFyKVxuICAgIHtcbiAgICAgICAgcmVuZGVyVGFyZ2V0LmNsZWFyKCk7XG4gICAgfVxuXG4gICAgLy8gc3RhcnQgdGhlIGZpbHRlciBtYW5hZ2VyXG4gICAgdGhpcy5maWx0ZXJNYW5hZ2VyLnNldEZpbHRlclN0YWNrKCByZW5kZXJUYXJnZXQuZmlsdGVyU3RhY2sgKTtcblxuICAgIC8vIHJlbmRlciB0aGUgc2NlbmUhXG4gICAgZGlzcGxheU9iamVjdC5yZW5kZXJXZWJHTCh0aGlzKTtcblxuICAgIC8vIGZpbmlzaCB0aGUgY3VycmVudCByZW5kZXJlci4uXG4gICAgdGhpcy5jdXJyZW50UmVuZGVyZXIuZmx1c2goKTtcbn07XG5cbi8qKlxuICogQ2hhbmdlcyB0aGUgY3VycmVudCByZW5kZXJlciB0byB0aGUgb25lIGdpdmVuIGluIHBhcmFtZXRlclxuICpcbiAqIEBwYXJhbSBvYmplY3RSZW5kZXJlciB7UElYSS5PYmplY3RSZW5kZXJlcn0gVGhlIG9iamVjdCByZW5kZXJlciB0byB1c2UuXG4gKi9cbldlYkdMUmVuZGVyZXIucHJvdG90eXBlLnNldE9iamVjdFJlbmRlcmVyID0gZnVuY3Rpb24gKG9iamVjdFJlbmRlcmVyKVxue1xuICAgIGlmICh0aGlzLmN1cnJlbnRSZW5kZXJlciA9PT0gb2JqZWN0UmVuZGVyZXIpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5jdXJyZW50UmVuZGVyZXIuc3RvcCgpO1xuICAgIHRoaXMuY3VycmVudFJlbmRlcmVyID0gb2JqZWN0UmVuZGVyZXI7XG4gICAgdGhpcy5jdXJyZW50UmVuZGVyZXIuc3RhcnQoKTtcbn07XG5cbi8qKlxuICogUmVzaXplcyB0aGUgd2ViR0wgdmlldyB0byB0aGUgc3BlY2lmaWVkIHdpZHRoIGFuZCBoZWlnaHQuXG4gKlxuICogQHBhcmFtIHdpZHRoIHtudW1iZXJ9IHRoZSBuZXcgd2lkdGggb2YgdGhlIHdlYkdMIHZpZXdcbiAqIEBwYXJhbSBoZWlnaHQge251bWJlcn0gdGhlIG5ldyBoZWlnaHQgb2YgdGhlIHdlYkdMIHZpZXdcbiAqL1xuV2ViR0xSZW5kZXJlci5wcm90b3R5cGUucmVzaXplID0gZnVuY3Rpb24gKHdpZHRoLCBoZWlnaHQpXG57XG4gICAgU3lzdGVtUmVuZGVyZXIucHJvdG90eXBlLnJlc2l6ZS5jYWxsKHRoaXMsIHdpZHRoLCBoZWlnaHQpO1xuXG4gICAgdGhpcy5maWx0ZXJNYW5hZ2VyLnJlc2l6ZSh3aWR0aCwgaGVpZ2h0KTtcbiAgICB0aGlzLnJvb3RSZW5kZXJUYXJnZXQucmVzaXplKHdpZHRoLCBoZWlnaHQpO1xuXG4gICAgaWYodGhpcy5jdXJyZW50UmVuZGVyVGFyZ2V0ID09PSB0aGlzLnJlbmRlclRhcmdldClcbiAgICB7XG4gICAgICAgIHRoaXMucm9vdFJlbmRlclRhcmdldC5hY3RpdmF0ZSgpO1xuICAgIH1cbn07XG5cbi8qKlxuICogQ2hhbmdlcyB0aGUgY3VycmVudCByZW5kZXIgdGFyZ2V0IHRvIHRoZSBvbmUgZ2l2ZW4gaW4gcGFyYW1ldGVyXG4gKlxuICogQHBhcmFtIHJlbmRlclRhcmdldCB7UElYSS5SZW5kZXJUYXJnZXR9IHRoZSBuZXcgcmVuZGVyIHRhcmdldFxuICovXG5XZWJHTFJlbmRlcmVyLnByb3RvdHlwZS5iaW5kUmVuZGVyVGFyZ2V0ID0gZnVuY3Rpb24gKHJlbmRlclRhcmdldCkvL3Byb2plY3Rpb24sIGJ1ZmZlcilcbntcbiAgICBpZihyZW5kZXJUYXJnZXQgIT09IHRoaXMuX2FjdGl2ZVJlbmRlclRhcmdldClcbiAgICB7XG4gICAgICAgIHRoaXMuX2FjdGl2ZVJlbmRlclRhcmdldCA9IHJlbmRlclRhcmdldDtcblxuICAgICAgICBpZih0aGlzLl9hY3RpdmVTaGFkZXIpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuX2FjdGl2ZVNoYWRlci51bmlmb3Jtcy5wcm9qZWN0aW9uTWF0cml4ID0gcmVuZGVyVGFyZ2V0LnByb2plY3Rpb25NYXRyaXgudG9BcnJheSh0cnVlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJlbmRlclRhcmdldC5hY3RpdmF0ZSgpO1xuXG4gICAgICAgIHRoaXMuc3RlbmNpbE1hbmFnZXIuc2V0TWFza1N0YWNrKCByZW5kZXJUYXJnZXQuc3RlbmNpbE1hc2tTdGFjayApO1xuICAgIH1cbn1cblxuV2ViR0xSZW5kZXJlci5wcm90b3R5cGUuYmluZFNoYWRlciA9IGZ1bmN0aW9uIChzaGFkZXIpLy9wcm9qZWN0aW9uLCBidWZmZXIpXG57XG4gICAgLy9UT0RPIGNhY2hlXG4gICAgaWYodGhpcy5fYWN0aXZlU2hhZGVyICE9PSBzaGFkZXIpXG4gICAge1xuICAgICAgICB0aGlzLl9hY3RpdmVTaGFkZXIgPSBzaGFkZXI7XG4gICAgICAgIHNoYWRlci5iaW5kKCk7XG5cbiAgICAgICAgLy8gYXV0b21hdGljYWxseSBzZXQgdGhlIHByb2plY3Rpb24gbWF0cml4XG4gICAgICAgIHNoYWRlci51bmlmb3Jtcy5wcm9qZWN0aW9uTWF0cml4ID0gdGhpcy5fYWN0aXZlUmVuZGVyVGFyZ2V0LnByb2plY3Rpb25NYXRyaXgudG9BcnJheSh0cnVlKTtcbiAgICB9XG59XG5cblxuV2ViR0xSZW5kZXJlci5wcm90b3R5cGUuYmluZFRleHR1cmUgPSBmdW5jdGlvbiAodGV4dHVyZSwgbG9jYXRpb24pXG57XG4gICAgdmFyIGdsID0gdGhpcy5nbDtcblxuICAgIC8vVE9ETyB0ZXN0IHBlcmYgb2YgY2FjaGU/XG4gICAgbG9jYXRpb24gPSBsb2NhdGlvbiB8fCAwO1xuXG4gICAgaWYodGhpcy5fYWN0aXZlVGV4dHVyZUxvY2F0aW9uICE9PSBsb2NhdGlvbikvL1xuICAgIHtcbiAgICAgICAgdGhpcy5fYWN0aXZlVGV4dHVyZUxvY2F0aW9uID0gbG9jYXRpb25cbiAgICAgICAgZ2wuYWN0aXZlVGV4dHVyZShnbC5URVhUVVJFMCArIGxvY2F0aW9uICk7XG4gICAgfVxuXG4gICAgLy9UT0RPIC0gY2FuIHdlIGNhY2hlIHRoaXMgdGV4dHVyZSB0b28/XG4gICAgdGhpcy5fYWN0aXZlVGV4dHVyZSA9IHRleHR1cmU7ICAgICAgXG4gICAgXG4gICAgaWYgKCF0ZXh0dXJlLl9nbFRleHR1cmVzW2dsLmlkXSlcbiAgICB7XG4gICAgICAgIC8vIHRoaXMgd2lsbCBhbHNvIGJpbmQgdGhlIHRleHR1cmUuLlxuICAgICAgICB0aGlzLnRleHR1cmVNYW5hZ2VyLnVwZGF0ZVRleHR1cmUodGV4dHVyZSk7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7ICAgXG4gICAgICAgIC8vIGJpbmQgdGhlIGN1cnJlbnQgdGV4dHVyZVxuICAgICAgICB0ZXh0dXJlLl9nbFRleHR1cmVzW2dsLmlkXS5iaW5kKCk7XG4gICAgfVxufVxuXG5cbi8qKlxuICogSGFuZGxlcyBhIGxvc3Qgd2ViZ2wgY29udGV4dFxuICpcbiAqIEBwcml2YXRlXG4gKi9cbldlYkdMUmVuZGVyZXIucHJvdG90eXBlLmhhbmRsZUNvbnRleHRMb3N0ID0gZnVuY3Rpb24gKGV2ZW50KVxue1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG59O1xuXG4vKipcbiAqIEhhbmRsZXMgYSByZXN0b3JlZCB3ZWJnbCBjb250ZXh0XG4gKlxuICogQHByaXZhdGVcbiAqL1xuV2ViR0xSZW5kZXJlci5wcm90b3R5cGUuaGFuZGxlQ29udGV4dFJlc3RvcmVkID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLl9pbml0Q29udGV4dCgpO1xuICAgIHRoaXMudGV4dHVyZU1hbmFnZXIucmVtb3ZlQWxsKCk7XG59O1xuXG4vKipcbiAqIFJlbW92ZXMgZXZlcnl0aGluZyBmcm9tIHRoZSByZW5kZXJlciAoZXZlbnQgbGlzdGVuZXJzLCBzcHJpdGViYXRjaCwgZXRjLi4uKVxuICpcbiAqIEBwYXJhbSBbcmVtb3ZlVmlldz1mYWxzZV0ge2Jvb2xlYW59IFJlbW92ZXMgdGhlIENhbnZhcyBlbGVtZW50IGZyb20gdGhlIERPTS5cbiAqL1xuV2ViR0xSZW5kZXJlci5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uIChyZW1vdmVWaWV3KVxue1xuICAgIHRoaXMuZGVzdHJveVBsdWdpbnMoKTtcblxuICAgIC8vIHJlbW92ZSBsaXN0ZW5lcnNcbiAgICB0aGlzLnZpZXcucmVtb3ZlRXZlbnRMaXN0ZW5lcignd2ViZ2xjb250ZXh0bG9zdCcsIHRoaXMuaGFuZGxlQ29udGV4dExvc3QpO1xuICAgIHRoaXMudmlldy5yZW1vdmVFdmVudExpc3RlbmVyKCd3ZWJnbGNvbnRleHRyZXN0b3JlZCcsIHRoaXMuaGFuZGxlQ29udGV4dFJlc3RvcmVkKTtcblxuICAgIHRoaXMudGV4dHVyZU1hbmFnZXIuZGVzdHJveUFsbCgpO1xuXG4gICAgLy8gY2FsbCBiYXNlIGRlc3Ryb3lcbiAgICBTeXN0ZW1SZW5kZXJlci5wcm90b3R5cGUuZGVzdHJveS5jYWxsKHRoaXMsIHJlbW92ZVZpZXcpO1xuXG4gICAgdGhpcy51aWQgPSAwO1xuXG4gICAgLy8gZGVzdHJveSB0aGUgbWFuYWdlcnNcbiAgICB0aGlzLnNoYWRlck1hbmFnZXIuZGVzdHJveSgpO1xuICAgIHRoaXMubWFza01hbmFnZXIuZGVzdHJveSgpO1xuICAgIHRoaXMuc3RlbmNpbE1hbmFnZXIuZGVzdHJveSgpO1xuICAgIHRoaXMuZmlsdGVyTWFuYWdlci5kZXN0cm95KCk7XG4gICAgdGhpcy5ibGVuZE1vZGVNYW5hZ2VyLmRlc3Ryb3koKTtcblxuICAgIHRoaXMuc2hhZGVyTWFuYWdlciA9IG51bGw7XG4gICAgdGhpcy5tYXNrTWFuYWdlciA9IG51bGw7XG4gICAgdGhpcy5maWx0ZXJNYW5hZ2VyID0gbnVsbDtcbiAgICB0aGlzLmJsZW5kTW9kZU1hbmFnZXIgPSBudWxsO1xuICAgIHRoaXMuY3VycmVudFJlbmRlcmVyID0gbnVsbDtcblxuICAgIHRoaXMuaGFuZGxlQ29udGV4dExvc3QgPSBudWxsO1xuICAgIHRoaXMuaGFuZGxlQ29udGV4dFJlc3RvcmVkID0gbnVsbDtcblxuICAgIHRoaXMuX2NvbnRleHRPcHRpb25zID0gbnVsbDtcblxuICAgIHRoaXMuZ2wudXNlUHJvZ3JhbShudWxsKTtcbiAgICB0aGlzLmdsID0gbnVsbDtcbn07XG5cbiIsInZhciBEZWZhdWx0U2hhZGVyID0gcmVxdWlyZSgnLi4vc2hhZGVycy9UZXh0dXJlU2hhZGVyJyk7XG5cbi8qKlxuICogVGhpcyBpcyB0aGUgYmFzZSBjbGFzcyBmb3IgY3JlYXRpbmcgYSBQSVhJIGZpbHRlci4gQ3VycmVudGx5IG9ubHkgV2ViR0wgc3VwcG9ydHMgZmlsdGVycy5cbiAqIElmIHlvdSB3YW50IHRvIG1ha2UgYSBjdXN0b20gZmlsdGVyIHRoaXMgc2hvdWxkIGJlIHlvdXIgYmFzZSBjbGFzcy5cbiAqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gdmVydGV4U3JjIHtzdHJpbmd8c3RyaW5nW119IFRoZSB2ZXJ0ZXggc2hhZGVyIHNvdXJjZSBhcyBhbiBhcnJheSBvZiBzdHJpbmdzLlxuICogQHBhcmFtIGZyYWdtZW50U3JjIHtzdHJpbmd8c3RyaW5nW119IFRoZSBmcmFnbWVudCBzaGFkZXIgc291cmNlIGFzIGFuIGFycmF5IG9mIHN0cmluZ3MuXG4gKiBAcGFyYW0gdW5pZm9ybXMge29iamVjdH0gQW4gb2JqZWN0IGNvbnRhaW5pbmcgdGhlIHVuaWZvcm1zIGZvciB0aGlzIGZpbHRlci5cbiAqL1xuZnVuY3Rpb24gQWJzdHJhY3RGaWx0ZXIodmVydGV4U3JjLCBmcmFnbWVudFNyYywgdW5pZm9ybXMpXG57XG5cbiAgICAvKipcbiAgICAgKiBBbiBhcnJheSBvZiBzaGFkZXJzXG4gICAgICogQG1lbWJlciB7UElYSS5TaGFkZXJbXX1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuc2hhZGVycyA9IFtdO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGV4dHJhIHBhZGRpbmcgdGhhdCB0aGUgZmlsdGVyIG1pZ2h0IG5lZWRcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy5wYWRkaW5nID0gMDtcblxuICAgIC8qKlxuICAgICAqIFRoZSB1bmlmb3JtcyBhcyBhbiBvYmplY3RcbiAgICAgKiBAbWVtYmVyIHtvYmplY3R9XG4gICAgICovXG4gICAgdGhpcy51bmlmb3JtcyA9IHVuaWZvcm1zIHx8IHt9O1xuXG5cbiAgICAvKipcbiAgICAgKiBUaGUgY29kZSBvZiB0aGUgdmVydGV4IHNoYWRlclxuICAgICAqIEBtZW1iZXIge3N0cmluZ1tdfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy52ZXJ0ZXhTcmMgPSB2ZXJ0ZXhTcmMgfHwgRGVmYXVsdFNoYWRlci5kZWZhdWx0VmVydGV4U3JjO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGNvZGUgb2YgdGhlIGZyYW1lbnQgc2hhZGVyXG4gICAgICogQG1lbWJlciB7c3RyaW5nW119XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLmZyYWdtZW50U3JjID0gZnJhZ21lbnRTcmMgfHwgRGVmYXVsdFNoYWRlci5kZWZhdWx0RnJhZ21lbnRTcmM7XG5cbiAgICAvL1RPRE8gYSByZW1pbmRlciAtIHdvdWxkIGJlIGNvb2wgdG8gaGF2ZSBsb3dlciByZXMgZmlsdGVycyBhcyB0aGlzIHdvdWxkIGdpdmUgYmV0dGVyIHBlcmZvcm1hbmNlLlxuXG4gICAgLy90eXBlb2YgZnJhZ21lbnRTcmMgPT09ICdzdHJpbmcnID8gZnJhZ21lbnRTcmMuc3BsaXQoJycpIDogKGZyYWdtZW50U3JjIHx8IFtdKTtcblxufVxuXG5BYnN0cmFjdEZpbHRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBBYnN0cmFjdEZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gQWJzdHJhY3RGaWx0ZXI7XG5cbi8qKlxuICogR3JhYnMgYSBzaGFkZXIgZnJvbSB0aGUgY3VycmVudCByZW5kZXJlclxuICpcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5XZWJHTFJlbmRlcmVyfSBUaGUgcmVuZGVyZXIgdG8gcmV0cmlldmUgdGhlIHNoYWRlciBmcm9tXG4gKi9cbkFic3RyYWN0RmlsdGVyLnByb3RvdHlwZS5nZXRTaGFkZXIgPSBmdW5jdGlvbiAocmVuZGVyZXIpXG57XG4gICAgdmFyIGdsID0gcmVuZGVyZXIuZ2w7XG5cbiAgICB2YXIgc2hhZGVyID0gdGhpcy5zaGFkZXJzW2dsLmlkXTtcblxuICAgIGlmICghc2hhZGVyKVxuICAgIHtcbiAgICAgICAgc2hhZGVyID0gbmV3IERlZmF1bHRTaGFkZXIocmVuZGVyZXIuc2hhZGVyTWFuYWdlcixcbiAgICAgICAgICAgIHRoaXMudmVydGV4U3JjLFxuICAgICAgICAgICAgdGhpcy5mcmFnbWVudFNyYyxcbiAgICAgICAgICAgIHRoaXMudW5pZm9ybXMsXG4gICAgICAgICAgICB0aGlzLmF0dHJpYnV0ZXNcbiAgICAgICAgKTtcblxuICAgICAgICB0aGlzLnNoYWRlcnNbZ2wuaWRdID0gc2hhZGVyO1xuICAgIH1cblxuICAgIHJldHVybiBzaGFkZXI7XG59O1xuXG4vKipcbiAqIEFwcGxpZXMgdGhlIGZpbHRlclxuICpcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5XZWJHTFJlbmRlcmVyfSBUaGUgcmVuZGVyZXIgdG8gcmV0cmlldmUgdGhlIGZpbHRlciBmcm9tXG4gKiBAcGFyYW0gaW5wdXQge1BJWEkuUmVuZGVyVGFyZ2V0fVxuICogQHBhcmFtIG91dHB1dCB7UElYSS5SZW5kZXJUYXJnZXR9XG4gKiBAcGFyYW0gY2xlYXIge2Jvb2xlYW59IFdoZXRoZXIgb3Igbm90IHdlIHdhbnQgdG8gY2xlYXIgdGhlIG91dHB1dFRhcmdldFxuICovXG5BYnN0cmFjdEZpbHRlci5wcm90b3R5cGUuYXBwbHlGaWx0ZXIgPSBmdW5jdGlvbiAocmVuZGVyZXIsIGlucHV0LCBvdXRwdXQsIGNsZWFyKVxue1xuICAgIHZhciBzaGFkZXIgPSB0aGlzLmdldFNoYWRlcihyZW5kZXJlcik7XG5cbiAgICByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLmFwcGx5RmlsdGVyKHNoYWRlciwgaW5wdXQsIG91dHB1dCwgY2xlYXIpO1xufTtcblxuLyoqXG4gKiBTeW5jcyBhIHVuaWZvcm0gYmV0d2VlbiB0aGUgY2xhc3Mgb2JqZWN0IGFuZCB0aGUgc2hhZGVycy5cbiAqXG4gKi9cbkFic3RyYWN0RmlsdGVyLnByb3RvdHlwZS5zeW5jVW5pZm9ybSA9IGZ1bmN0aW9uICh1bmlmb3JtKVxue1xuICAgIGZvciAodmFyIGkgPSAwLCBqID0gdGhpcy5zaGFkZXJzLmxlbmd0aDsgaSA8IGo7ICsraSlcbiAgICB7XG4gICAgICAgIHRoaXMuc2hhZGVyc1tpXS5zeW5jVW5pZm9ybSh1bmlmb3JtKTtcbiAgICB9XG59O1xuIiwidmFyIEFic3RyYWN0RmlsdGVyID0gcmVxdWlyZSgnLi9BYnN0cmFjdEZpbHRlcicpO1xuLy8gQHNlZSBodHRwczovL2dpdGh1Yi5jb20vc3Vic3RhY2svYnJmcy9pc3N1ZXMvMjVcblxuXG4vKipcbiAqXG4gKiBCYXNpYyBGWEFBIGltcGxlbWVudGF0aW9uIGJhc2VkIG9uIHRoZSBjb2RlIG9uIGdlZWtzM2QuY29tIHdpdGggdGhlXG4gKiBtb2RpZmljYXRpb24gdGhhdCB0aGUgdGV4dHVyZTJETG9kIHN0dWZmIHdhcyByZW1vdmVkIHNpbmNlIGl0J3NcbiAqIHVuc3VwcG9ydGVkIGJ5IFdlYkdMLlxuICpcbiAqIC0tXG4gKiBGcm9tOlxuICogaHR0cHM6Ly9naXRodWIuY29tL21pdHN1aGlrby93ZWJnbC1tZWluY3JhZnRcbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQWJzdHJhY3RGaWx0ZXJcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKlxuICovXG5mdW5jdGlvbiBGWEFBRmlsdGVyKClcbntcbiAgICBBYnN0cmFjdEZpbHRlci5jYWxsKHRoaXMsXG4gICAgICAgIC8vIHZlcnRleCBzaGFkZXJcbiAgICAgICAgXCJcXG5wcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcXG5cXG5hdHRyaWJ1dGUgdmVjMiBhVmVydGV4UG9zaXRpb247XFxuYXR0cmlidXRlIHZlYzIgYVRleHR1cmVDb29yZDtcXG5hdHRyaWJ1dGUgdmVjNCBhQ29sb3I7XFxuXFxudW5pZm9ybSBtYXQzIHByb2plY3Rpb25NYXRyaXg7XFxudW5pZm9ybSB2ZWMyIHJlc29sdXRpb247XFxuXFxudmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7XFxudmFyeWluZyB2ZWM0IHZDb2xvcjtcXG5cXG52YXJ5aW5nIHZlYzIgdlJlc29sdXRpb247XFxuXFxuLy90ZXhjb29yZHMgY29tcHV0ZWQgaW4gdmVydGV4IHN0ZXBcXG4vL3RvIGF2b2lkIGRlcGVuZGVudCB0ZXh0dXJlIHJlYWRzXFxudmFyeWluZyB2ZWMyIHZfcmdiTlc7XFxudmFyeWluZyB2ZWMyIHZfcmdiTkU7XFxudmFyeWluZyB2ZWMyIHZfcmdiU1c7XFxudmFyeWluZyB2ZWMyIHZfcmdiU0U7XFxudmFyeWluZyB2ZWMyIHZfcmdiTTtcXG5cXG5cXG52b2lkIHRleGNvb3Jkcyh2ZWMyIGZyYWdDb29yZCwgdmVjMiByZXNvbHV0aW9uLFxcbiAgICAgICAgICAgIG91dCB2ZWMyIHZfcmdiTlcsIG91dCB2ZWMyIHZfcmdiTkUsXFxuICAgICAgICAgICAgb3V0IHZlYzIgdl9yZ2JTVywgb3V0IHZlYzIgdl9yZ2JTRSxcXG4gICAgICAgICAgICBvdXQgdmVjMiB2X3JnYk0pIHtcXG4gICAgdmVjMiBpbnZlcnNlVlAgPSAxLjAgLyByZXNvbHV0aW9uLnh5O1xcbiAgICB2X3JnYk5XID0gKGZyYWdDb29yZCArIHZlYzIoLTEuMCwgLTEuMCkpICogaW52ZXJzZVZQO1xcbiAgICB2X3JnYk5FID0gKGZyYWdDb29yZCArIHZlYzIoMS4wLCAtMS4wKSkgKiBpbnZlcnNlVlA7XFxuICAgIHZfcmdiU1cgPSAoZnJhZ0Nvb3JkICsgdmVjMigtMS4wLCAxLjApKSAqIGludmVyc2VWUDtcXG4gICAgdl9yZ2JTRSA9IChmcmFnQ29vcmQgKyB2ZWMyKDEuMCwgMS4wKSkgKiBpbnZlcnNlVlA7XFxuICAgIHZfcmdiTSA9IHZlYzIoZnJhZ0Nvb3JkICogaW52ZXJzZVZQKTtcXG59XFxuXFxudm9pZCBtYWluKHZvaWQpe1xcbiAgIGdsX1Bvc2l0aW9uID0gdmVjNCgocHJvamVjdGlvbk1hdHJpeCAqIHZlYzMoYVZlcnRleFBvc2l0aW9uLCAxLjApKS54eSwgMC4wLCAxLjApO1xcbiAgIHZUZXh0dXJlQ29vcmQgPSBhVGV4dHVyZUNvb3JkO1xcbiAgIHZDb2xvciA9IHZlYzQoYUNvbG9yLnJnYiAqIGFDb2xvci5hLCBhQ29sb3IuYSk7XFxuICAgdlJlc29sdXRpb24gPSByZXNvbHV0aW9uO1xcblxcbiAgIC8vY29tcHV0ZSB0aGUgdGV4dHVyZSBjb29yZHMgYW5kIHNlbmQgdGhlbSB0byB2YXJ5aW5nc1xcbiAgIHRleGNvb3JkcyhhVGV4dHVyZUNvb3JkICogcmVzb2x1dGlvbiwgcmVzb2x1dGlvbiwgdl9yZ2JOVywgdl9yZ2JORSwgdl9yZ2JTVywgdl9yZ2JTRSwgdl9yZ2JNKTtcXG59XFxuXCIsXG4gICAgICAgIC8vIGZyYWdtZW50IHNoYWRlclxuICAgICAgICBcInByZWNpc2lvbiBsb3dwIGZsb2F0O1xcblxcblxcbi8qKlxcbkJhc2ljIEZYQUEgaW1wbGVtZW50YXRpb24gYmFzZWQgb24gdGhlIGNvZGUgb24gZ2Vla3MzZC5jb20gd2l0aCB0aGVcXG5tb2RpZmljYXRpb24gdGhhdCB0aGUgdGV4dHVyZTJETG9kIHN0dWZmIHdhcyByZW1vdmVkIHNpbmNlIGl0J3NcXG51bnN1cHBvcnRlZCBieSBXZWJHTC5cXG5cXG4tLVxcblxcbkZyb206XFxuaHR0cHM6Ly9naXRodWIuY29tL21pdHN1aGlrby93ZWJnbC1tZWluY3JhZnRcXG5cXG5Db3B5cmlnaHQgKGMpIDIwMTEgYnkgQXJtaW4gUm9uYWNoZXIuXFxuXFxuU29tZSByaWdodHMgcmVzZXJ2ZWQuXFxuXFxuUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0XFxubW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZVxcbm1ldDpcXG5cXG4gICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodFxcbiAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci5cXG5cXG4gICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlXFxuICAgICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmdcXG4gICAgICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWRcXG4gICAgICB3aXRoIHRoZSBkaXN0cmlidXRpb24uXFxuXFxuICAgICogVGhlIG5hbWVzIG9mIHRoZSBjb250cmlidXRvcnMgbWF5IG5vdCBiZSB1c2VkIHRvIGVuZG9yc2Ugb3JcXG4gICAgICBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWNcXG4gICAgICBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uXFxuXFxuVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SU1xcblxcXCJBUyBJU1xcXCIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UXFxuTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SXFxuQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFRcXG5PV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCxcXG5TUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UXFxuTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsXFxuREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZXFxuVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVFxcbihJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRVxcbk9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuXFxuKi9cXG5cXG4jaWZuZGVmIEZYQUFfUkVEVUNFX01JTlxcbiAgICAjZGVmaW5lIEZYQUFfUkVEVUNFX01JTiAgICgxLjAvIDEyOC4wKVxcbiNlbmRpZlxcbiNpZm5kZWYgRlhBQV9SRURVQ0VfTVVMXFxuICAgICNkZWZpbmUgRlhBQV9SRURVQ0VfTVVMICAgKDEuMCAvIDguMClcXG4jZW5kaWZcXG4jaWZuZGVmIEZYQUFfU1BBTl9NQVhcXG4gICAgI2RlZmluZSBGWEFBX1NQQU5fTUFYICAgICA4LjBcXG4jZW5kaWZcXG5cXG4vL29wdGltaXplZCB2ZXJzaW9uIGZvciBtb2JpbGUsIHdoZXJlIGRlcGVuZGVudFxcbi8vdGV4dHVyZSByZWFkcyBjYW4gYmUgYSBib3R0bGVuZWNrXFxudmVjNCBmeGFhKHNhbXBsZXIyRCB0ZXgsIHZlYzIgZnJhZ0Nvb3JkLCB2ZWMyIHJlc29sdXRpb24sXFxuICAgICAgICAgICAgdmVjMiB2X3JnYk5XLCB2ZWMyIHZfcmdiTkUsXFxuICAgICAgICAgICAgdmVjMiB2X3JnYlNXLCB2ZWMyIHZfcmdiU0UsXFxuICAgICAgICAgICAgdmVjMiB2X3JnYk0pIHtcXG4gICAgdmVjNCBjb2xvcjtcXG4gICAgbWVkaXVtcCB2ZWMyIGludmVyc2VWUCA9IHZlYzIoMS4wIC8gcmVzb2x1dGlvbi54LCAxLjAgLyByZXNvbHV0aW9uLnkpO1xcbiAgICB2ZWMzIHJnYk5XID0gdGV4dHVyZTJEKHRleCwgdl9yZ2JOVykueHl6O1xcbiAgICB2ZWMzIHJnYk5FID0gdGV4dHVyZTJEKHRleCwgdl9yZ2JORSkueHl6O1xcbiAgICB2ZWMzIHJnYlNXID0gdGV4dHVyZTJEKHRleCwgdl9yZ2JTVykueHl6O1xcbiAgICB2ZWMzIHJnYlNFID0gdGV4dHVyZTJEKHRleCwgdl9yZ2JTRSkueHl6O1xcbiAgICB2ZWM0IHRleENvbG9yID0gdGV4dHVyZTJEKHRleCwgdl9yZ2JNKTtcXG4gICAgdmVjMyByZ2JNICA9IHRleENvbG9yLnh5ejtcXG4gICAgdmVjMyBsdW1hID0gdmVjMygwLjI5OSwgMC41ODcsIDAuMTE0KTtcXG4gICAgZmxvYXQgbHVtYU5XID0gZG90KHJnYk5XLCBsdW1hKTtcXG4gICAgZmxvYXQgbHVtYU5FID0gZG90KHJnYk5FLCBsdW1hKTtcXG4gICAgZmxvYXQgbHVtYVNXID0gZG90KHJnYlNXLCBsdW1hKTtcXG4gICAgZmxvYXQgbHVtYVNFID0gZG90KHJnYlNFLCBsdW1hKTtcXG4gICAgZmxvYXQgbHVtYU0gID0gZG90KHJnYk0sICBsdW1hKTtcXG4gICAgZmxvYXQgbHVtYU1pbiA9IG1pbihsdW1hTSwgbWluKG1pbihsdW1hTlcsIGx1bWFORSksIG1pbihsdW1hU1csIGx1bWFTRSkpKTtcXG4gICAgZmxvYXQgbHVtYU1heCA9IG1heChsdW1hTSwgbWF4KG1heChsdW1hTlcsIGx1bWFORSksIG1heChsdW1hU1csIGx1bWFTRSkpKTtcXG5cXG4gICAgbWVkaXVtcCB2ZWMyIGRpcjtcXG4gICAgZGlyLnggPSAtKChsdW1hTlcgKyBsdW1hTkUpIC0gKGx1bWFTVyArIGx1bWFTRSkpO1xcbiAgICBkaXIueSA9ICAoKGx1bWFOVyArIGx1bWFTVykgLSAobHVtYU5FICsgbHVtYVNFKSk7XFxuXFxuICAgIGZsb2F0IGRpclJlZHVjZSA9IG1heCgobHVtYU5XICsgbHVtYU5FICsgbHVtYVNXICsgbHVtYVNFKSAqXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAoMC4yNSAqIEZYQUFfUkVEVUNFX01VTCksIEZYQUFfUkVEVUNFX01JTik7XFxuXFxuICAgIGZsb2F0IHJjcERpck1pbiA9IDEuMCAvIChtaW4oYWJzKGRpci54KSwgYWJzKGRpci55KSkgKyBkaXJSZWR1Y2UpO1xcbiAgICBkaXIgPSBtaW4odmVjMihGWEFBX1NQQU5fTUFYLCBGWEFBX1NQQU5fTUFYKSxcXG4gICAgICAgICAgICAgIG1heCh2ZWMyKC1GWEFBX1NQQU5fTUFYLCAtRlhBQV9TUEFOX01BWCksXFxuICAgICAgICAgICAgICBkaXIgKiByY3BEaXJNaW4pKSAqIGludmVyc2VWUDtcXG5cXG4gICAgdmVjMyByZ2JBID0gMC41ICogKFxcbiAgICAgICAgdGV4dHVyZTJEKHRleCwgZnJhZ0Nvb3JkICogaW52ZXJzZVZQICsgZGlyICogKDEuMCAvIDMuMCAtIDAuNSkpLnh5eiArXFxuICAgICAgICB0ZXh0dXJlMkQodGV4LCBmcmFnQ29vcmQgKiBpbnZlcnNlVlAgKyBkaXIgKiAoMi4wIC8gMy4wIC0gMC41KSkueHl6KTtcXG4gICAgdmVjMyByZ2JCID0gcmdiQSAqIDAuNSArIDAuMjUgKiAoXFxuICAgICAgICB0ZXh0dXJlMkQodGV4LCBmcmFnQ29vcmQgKiBpbnZlcnNlVlAgKyBkaXIgKiAtMC41KS54eXogK1xcbiAgICAgICAgdGV4dHVyZTJEKHRleCwgZnJhZ0Nvb3JkICogaW52ZXJzZVZQICsgZGlyICogMC41KS54eXopO1xcblxcbiAgICBmbG9hdCBsdW1hQiA9IGRvdChyZ2JCLCBsdW1hKTtcXG4gICAgaWYgKChsdW1hQiA8IGx1bWFNaW4pIHx8IChsdW1hQiA+IGx1bWFNYXgpKVxcbiAgICAgICAgY29sb3IgPSB2ZWM0KHJnYkEsIHRleENvbG9yLmEpO1xcbiAgICBlbHNlXFxuICAgICAgICBjb2xvciA9IHZlYzQocmdiQiwgdGV4Q29sb3IuYSk7XFxuICAgIHJldHVybiBjb2xvcjtcXG59XFxuXFxuXFxudmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7XFxudmFyeWluZyB2ZWM0IHZDb2xvcjtcXG52YXJ5aW5nIHZlYzIgdlJlc29sdXRpb247XFxuXFxuLy90ZXhjb29yZHMgY29tcHV0ZWQgaW4gdmVydGV4IHN0ZXBcXG4vL3RvIGF2b2lkIGRlcGVuZGVudCB0ZXh0dXJlIHJlYWRzXFxudmFyeWluZyB2ZWMyIHZfcmdiTlc7XFxudmFyeWluZyB2ZWMyIHZfcmdiTkU7XFxudmFyeWluZyB2ZWMyIHZfcmdiU1c7XFxudmFyeWluZyB2ZWMyIHZfcmdiU0U7XFxudmFyeWluZyB2ZWMyIHZfcmdiTTtcXG5cXG51bmlmb3JtIHNhbXBsZXIyRCB1U2FtcGxlcjtcXG5cXG5cXG52b2lkIG1haW4odm9pZCl7XFxuXFxuICAgIGdsX0ZyYWdDb2xvciA9IGZ4YWEodVNhbXBsZXIsIHZUZXh0dXJlQ29vcmQgKiB2UmVzb2x1dGlvbiwgdlJlc29sdXRpb24sIHZfcmdiTlcsIHZfcmdiTkUsIHZfcmdiU1csIHZfcmdiU0UsIHZfcmdiTSk7XFxuXFxufVxcblwiLFxuICAgICAgICAvLyB1bmlmb3Jtc1xuICAgICAgICB7XG4gICAgICAgICAgICByZXNvbHV0aW9uOiB7IHR5cGU6ICd2MicsIHZhbHVlOiB7IHg6IDEsIHk6IDEgfSB9XG4gICAgICAgIH1cbiAgICApO1xuXG59XG5cbkZYQUFGaWx0ZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShBYnN0cmFjdEZpbHRlci5wcm90b3R5cGUpO1xuRlhBQUZpbHRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBGWEFBRmlsdGVyO1xubW9kdWxlLmV4cG9ydHMgPSBGWEFBRmlsdGVyO1xuXG4vKipcbiAqIEFwcGxpZXMgdGhlIGZpbHRlclxuICpcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5XZWJHTFJlbmRlcmVyfSBUaGUgcmVuZGVyZXIgdG8gcmV0cmlldmUgdGhlIGZpbHRlciBmcm9tXG4gKiBAcGFyYW0gaW5wdXQge1BJWEkuUmVuZGVyVGFyZ2V0fVxuICogQHBhcmFtIG91dHB1dCB7UElYSS5SZW5kZXJUYXJnZXR9XG4gKi9cbkZYQUFGaWx0ZXIucHJvdG90eXBlLmFwcGx5RmlsdGVyID0gZnVuY3Rpb24gKHJlbmRlcmVyLCBpbnB1dCwgb3V0cHV0KVxue1xuICAgIHZhciBmaWx0ZXJNYW5hZ2VyID0gcmVuZGVyZXIuZmlsdGVyTWFuYWdlcjtcblxuICAgIHZhciBzaGFkZXIgPSB0aGlzLmdldFNoYWRlciggcmVuZGVyZXIgKTtcbiAgICAgLy8gZHJhdyB0aGUgZmlsdGVyLi4uXG4gICAgZmlsdGVyTWFuYWdlci5hcHBseUZpbHRlcihzaGFkZXIsIGlucHV0LCBvdXRwdXQpO1xufTtcbiIsInZhciBBYnN0cmFjdEZpbHRlciA9IHJlcXVpcmUoJy4vQWJzdHJhY3RGaWx0ZXInKSxcbiAgICBtYXRoID0gIHJlcXVpcmUoJy4uLy4uLy4uL21hdGgnKTtcblxuLy8gQHNlZSBodHRwczovL2dpdGh1Yi5jb20vc3Vic3RhY2svYnJmcy9pc3N1ZXMvMjVcblxuXG4vKipcbiAqIFRoZSBTcHJpdGVNYXNrRmlsdGVyIGNsYXNzXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLkFic3RyYWN0RmlsdGVyXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIHNwcml0ZSB7UElYSS5TcHJpdGV9IHRoZSB0YXJnZXQgc3ByaXRlXG4gKi9cbmZ1bmN0aW9uIFNwcml0ZU1hc2tGaWx0ZXIoc3ByaXRlKVxue1xuICAgIHZhciBtYXNrTWF0cml4ID0gbmV3IG1hdGguTWF0cml4KCk7XG5cbiAgICBBYnN0cmFjdEZpbHRlci5jYWxsKHRoaXMsXG4gICAgICAgIFwiYXR0cmlidXRlIHZlYzIgYVZlcnRleFBvc2l0aW9uO1xcbmF0dHJpYnV0ZSB2ZWMyIGFUZXh0dXJlQ29vcmQ7XFxuYXR0cmlidXRlIHZlYzQgYUNvbG9yO1xcblxcbnVuaWZvcm0gbWF0MyBwcm9qZWN0aW9uTWF0cml4O1xcbnVuaWZvcm0gbWF0MyBvdGhlck1hdHJpeDtcXG5cXG52YXJ5aW5nIHZlYzIgdk1hc2tDb29yZDtcXG52YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDtcXG52YXJ5aW5nIHZlYzQgdkNvbG9yO1xcblxcbnZvaWQgbWFpbih2b2lkKVxcbntcXG4gICAgZ2xfUG9zaXRpb24gPSB2ZWM0KChwcm9qZWN0aW9uTWF0cml4ICogdmVjMyhhVmVydGV4UG9zaXRpb24sIDEuMCkpLnh5LCAwLjAsIDEuMCk7XFxuICAgIHZUZXh0dXJlQ29vcmQgPSBhVGV4dHVyZUNvb3JkO1xcbiAgICB2TWFza0Nvb3JkID0gKCBvdGhlck1hdHJpeCAqIHZlYzMoIGFUZXh0dXJlQ29vcmQsIDEuMCkgICkueHk7XFxuICAgIHZDb2xvciA9IHZlYzQoYUNvbG9yLnJnYiAqIGFDb2xvci5hLCBhQ29sb3IuYSk7XFxufVxcblwiLFxuICAgICAgICBcInByZWNpc2lvbiBsb3dwIGZsb2F0O1xcblxcbnZhcnlpbmcgdmVjMiB2TWFza0Nvb3JkO1xcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xcbnZhcnlpbmcgdmVjNCB2Q29sb3I7XFxuXFxudW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXI7XFxudW5pZm9ybSBmbG9hdCBhbHBoYTtcXG51bmlmb3JtIHNhbXBsZXIyRCBtYXNrO1xcblxcbnZvaWQgbWFpbih2b2lkKVxcbntcXG4gICAgLy8gY2hlY2sgY2xpcCEgdGhpcyB3aWxsIHN0b3AgdGhlIG1hc2sgYmxlZWRpbmcgb3V0IGZyb20gdGhlIGVkZ2VzXFxuICAgIHZlYzIgdGV4dCA9IGFicyggdk1hc2tDb29yZCAtIDAuNSApO1xcbiAgICB0ZXh0ID0gc3RlcCgwLjUsIHRleHQpO1xcbiAgICBmbG9hdCBjbGlwID0gMS4wIC0gbWF4KHRleHQueSwgdGV4dC54KTtcXG4gICAgdmVjNCBvcmlnaW5hbCA9IHRleHR1cmUyRCh1U2FtcGxlciwgdlRleHR1cmVDb29yZCk7XFxuICAgIHZlYzQgbWFza3kgPSB0ZXh0dXJlMkQobWFzaywgdk1hc2tDb29yZCk7XFxuICAgIG9yaWdpbmFsICo9IChtYXNreS5yICogbWFza3kuYSAqIGFscGhhICogY2xpcCk7XFxuICAgIGdsX0ZyYWdDb2xvciA9IG9yaWdpbmFsO1xcbn1cXG5cIixcbiAgICAgICAge1xuICAgICAgICAgICAgbWFzazogICAgICAgICAgIHsgdHlwZTogJ3NhbXBsZXIyRCcsIHZhbHVlOiBzcHJpdGUuX3RleHR1cmUgfSxcbiAgICAgICAgICAgIGFscGhhOiAgICAgICAgICB7IHR5cGU6ICdmJywgdmFsdWU6IDF9LFxuICAgICAgICAgICAgb3RoZXJNYXRyaXg6ICAgIHsgdHlwZTogJ21hdDMnLCB2YWx1ZTogbWFza01hdHJpeC50b0FycmF5KHRydWUpIH1cbiAgICAgICAgfVxuICAgICk7XG5cbiAgICB0aGlzLm1hc2tTcHJpdGUgPSBzcHJpdGU7XG4gICAgdGhpcy5tYXNrTWF0cml4ID0gbWFza01hdHJpeDtcbn1cblxuU3ByaXRlTWFza0ZpbHRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKEFic3RyYWN0RmlsdGVyLnByb3RvdHlwZSk7XG5TcHJpdGVNYXNrRmlsdGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFNwcml0ZU1hc2tGaWx0ZXI7XG5tb2R1bGUuZXhwb3J0cyA9IFNwcml0ZU1hc2tGaWx0ZXI7XG5cbi8qKlxuICogQXBwbGllcyB0aGUgZmlsdGVyXG4gKlxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLldlYkdMUmVuZGVyZXJ9IFRoZSByZW5kZXJlciB0byByZXRyaWV2ZSB0aGUgZmlsdGVyIGZyb21cbiAqIEBwYXJhbSBpbnB1dCB7UElYSS5SZW5kZXJUYXJnZXR9XG4gKiBAcGFyYW0gb3V0cHV0IHtQSVhJLlJlbmRlclRhcmdldH1cbiAqL1xuU3ByaXRlTWFza0ZpbHRlci5wcm90b3R5cGUuYXBwbHlGaWx0ZXIgPSBmdW5jdGlvbiAocmVuZGVyZXIsIGlucHV0LCBvdXRwdXQpXG57XG4gICAgdmFyIGZpbHRlck1hbmFnZXIgPSByZW5kZXJlci5maWx0ZXJNYW5hZ2VyO1xuXG4gICAgdGhpcy51bmlmb3Jtcy5tYXNrLnZhbHVlID0gdGhpcy5tYXNrU3ByaXRlLl90ZXh0dXJlO1xuXG4gICAgZmlsdGVyTWFuYWdlci5jYWxjdWxhdGVNYXBwZWRNYXRyaXgoaW5wdXQuZnJhbWUsIHRoaXMubWFza1Nwcml0ZSwgdGhpcy5tYXNrTWF0cml4KTtcblxuICAgIHRoaXMudW5pZm9ybXMub3RoZXJNYXRyaXgudmFsdWUgPSB0aGlzLm1hc2tNYXRyaXgudG9BcnJheSh0cnVlKTtcbiAgICB0aGlzLnVuaWZvcm1zLmFscGhhLnZhbHVlID0gdGhpcy5tYXNrU3ByaXRlLndvcmxkQWxwaGE7XG5cbiAgICB2YXIgc2hhZGVyID0gdGhpcy5nZXRTaGFkZXIocmVuZGVyZXIpO1xuICAgICAvLyBkcmF3IHRoZSBmaWx0ZXIuLi5cbiAgICBmaWx0ZXJNYW5hZ2VyLmFwcGx5RmlsdGVyKHNoYWRlciwgaW5wdXQsIG91dHB1dCk7XG59O1xuXG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKFNwcml0ZU1hc2tGaWx0ZXIucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogVGhlIHRleHR1cmUgdXNlZCBmb3IgdGhlIGRpc3BsYWNlbWVudCBtYXAuIE11c3QgYmUgcG93ZXIgb2YgMiBzaXplZCB0ZXh0dXJlLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5UZXh0dXJlfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLlNwcml0ZU1hc2tGaWx0ZXIjXG4gICAgICovXG4gICAgbWFwOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudW5pZm9ybXMubWFzay52YWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudW5pZm9ybXMubWFzay52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFRoZSBvZmZzZXQgdXNlZCB0byBtb3ZlIHRoZSBkaXNwbGFjZW1lbnQgbWFwLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5Qb2ludH1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5TcHJpdGVNYXNrRmlsdGVyI1xuICAgICAqL1xuICAgIG9mZnNldDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudW5pZm9ybXMub2Zmc2V0LnZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLm9mZnNldC52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfVxufSk7XG4iLCJ2YXIgV2ViR0xNYW5hZ2VyID0gcmVxdWlyZSgnLi9XZWJHTE1hbmFnZXInKTtcblxuLyoqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAZXh0ZW5kcyBQSVhJLldlYkdsTWFuYWdlclxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLldlYkdMUmVuZGVyZXJ9IFRoZSByZW5kZXJlciB0aGlzIG1hbmFnZXIgd29ya3MgZm9yLlxuICovXG5mdW5jdGlvbiBCbGVuZE1vZGVNYW5hZ2VyKHJlbmRlcmVyKVxue1xuICAgIFdlYkdMTWFuYWdlci5jYWxsKHRoaXMsIHJlbmRlcmVyKTtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLmN1cnJlbnRCbGVuZE1vZGUgPSA5OTk5OTtcbn1cblxuQmxlbmRNb2RlTWFuYWdlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFdlYkdMTWFuYWdlci5wcm90b3R5cGUpO1xuQmxlbmRNb2RlTWFuYWdlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBCbGVuZE1vZGVNYW5hZ2VyO1xubW9kdWxlLmV4cG9ydHMgPSBCbGVuZE1vZGVNYW5hZ2VyO1xuXG4vKipcbiAqIFNldHMtdXAgdGhlIGdpdmVuIGJsZW5kTW9kZSBmcm9tIFdlYkdMJ3MgcG9pbnQgb2Ygdmlldy5cbiAqXG4gKiBAcGFyYW0gYmxlbmRNb2RlIHtudW1iZXJ9IHRoZSBibGVuZE1vZGUsIHNob3VsZCBiZSBhIFBpeGkgY29uc3QsIHN1Y2ggYXMgYFBJWEkuQkxFTkRfTU9ERVMuQUREYC4gU2VlXG4gKiAge0BsaW5rIFBJWEkuQkxFTkRfTU9ERVN9IGZvciBwb3NzaWJsZSB2YWx1ZXMuXG4gKi9cbkJsZW5kTW9kZU1hbmFnZXIucHJvdG90eXBlLnNldEJsZW5kTW9kZSA9IGZ1bmN0aW9uIChibGVuZE1vZGUpXG57XG4gICAgaWYgKHRoaXMuY3VycmVudEJsZW5kTW9kZSA9PT0gYmxlbmRNb2RlKVxuICAgIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHRoaXMuY3VycmVudEJsZW5kTW9kZSA9IGJsZW5kTW9kZTtcblxuICAgIHZhciBtb2RlID0gdGhpcy5yZW5kZXJlci5ibGVuZE1vZGVzW3RoaXMuY3VycmVudEJsZW5kTW9kZV07XG4gICAgdGhpcy5yZW5kZXJlci5nbC5ibGVuZEZ1bmMobW9kZVswXSwgbW9kZVsxXSk7XG5cbiAgICByZXR1cm4gdHJ1ZTtcbn07XG4iLCJ2YXIgV2ViR0xNYW5hZ2VyID0gcmVxdWlyZSgnLi9XZWJHTE1hbmFnZXInKSxcbiAgICBSZW5kZXJUYXJnZXQgPSByZXF1aXJlKCcuLi91dGlscy9SZW5kZXJUYXJnZXQnKSxcbiAgICBDT05TVCA9IHJlcXVpcmUoJy4uLy4uLy4uL2NvbnN0JyksXG4gICAgUXVhZCA9IHJlcXVpcmUoJy4uL3V0aWxzL1F1YWQnKSxcbiAgICBtYXRoID0gIHJlcXVpcmUoJy4uLy4uLy4uL21hdGgnKTtcblxuLyoqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAZXh0ZW5kcyBQSVhJLldlYkdMTWFuYWdlclxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLldlYkdMUmVuZGVyZXJ9IFRoZSByZW5kZXJlciB0aGlzIG1hbmFnZXIgd29ya3MgZm9yLlxuICovXG5mdW5jdGlvbiBGaWx0ZXJNYW5hZ2VyKHJlbmRlcmVyKVxue1xuICAgIFdlYkdMTWFuYWdlci5jYWxsKHRoaXMsIHJlbmRlcmVyKTtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge29iamVjdFtdfVxuICAgICAqL1xuICAgIHRoaXMuZmlsdGVyU3RhY2sgPSBbXTtcblxuICAgIHRoaXMuZmlsdGVyU3RhY2sucHVzaCh7XG4gICAgICAgIHJlbmRlclRhcmdldDpyZW5kZXJlci5jdXJyZW50UmVuZGVyVGFyZ2V0LFxuICAgICAgICBmaWx0ZXI6W10sXG4gICAgICAgIGJvdW5kczpudWxsXG4gICAgfSk7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlJlbmRlclRhcmdldFtdfVxuICAgICAqL1xuICAgIHRoaXMudGV4dHVyZVBvb2wgPSBbXTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBzaXplIG9mIHRoZSB0ZXh0dXJlXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlJlY3RhbmdsZX1cbiAgICAgKi9cbiAgICAvLyBsaXN0ZW4gZm9yIGNvbnRleHQgYW5kIHVwZGF0ZSBuZWNlc3NhcnkgYnVmZmVyc1xuICAgIC8vVE9ETyBtYWtlIHRoaXMgZHluYW1pYyFcbiAgICAvL1RPRE8gdGVzdCB0aGlzIG91dCBieSBmb3JjZXMgcG93ZXIgb2YgdHdvP1xuICAgIHRoaXMudGV4dHVyZVNpemUgPSBuZXcgbWF0aC5SZWN0YW5nbGUoMCwgMCwgcmVuZGVyZXIud2lkdGgsIHJlbmRlcmVyLmhlaWdodCk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgY3VycmVudCBmcmFtZVxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5SZWN0YW5nbGV9XG4gICAgICovXG4gICAgdGhpcy5jdXJyZW50RnJhbWUgPSBudWxsO1xufVxuXG5GaWx0ZXJNYW5hZ2VyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoV2ViR0xNYW5hZ2VyLnByb3RvdHlwZSk7XG5GaWx0ZXJNYW5hZ2VyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IEZpbHRlck1hbmFnZXI7XG5tb2R1bGUuZXhwb3J0cyA9IEZpbHRlck1hbmFnZXI7XG5cblxuLyoqXG4gKiBDYWxsZWQgd2hlbiB0aGVyZSBpcyBhIFdlYkdMIGNvbnRleHQgY2hhbmdlLlxuICpcbiAqL1xuRmlsdGVyTWFuYWdlci5wcm90b3R5cGUub25Db250ZXh0Q2hhbmdlID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLnRleHR1cmVQb29sLmxlbmd0aCA9IDA7XG5cbiAgICB2YXIgZ2wgPSB0aGlzLnJlbmRlcmVyLmdsO1xuICAgIHRoaXMucXVhZCA9IG5ldyBRdWFkKGdsKTtcbn07XG5cbi8qKlxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLldlYkdMUmVuZGVyZXJ9XG4gKiBAcGFyYW0gYnVmZmVyIHtBcnJheUJ1ZmZlcn1cbiAqL1xuRmlsdGVyTWFuYWdlci5wcm90b3R5cGUuc2V0RmlsdGVyU3RhY2sgPSBmdW5jdGlvbiAoIGZpbHRlclN0YWNrIClcbntcbiAgICB0aGlzLmZpbHRlclN0YWNrID0gZmlsdGVyU3RhY2s7XG59O1xuXG4vKipcbiAqIEFwcGxpZXMgdGhlIGZpbHRlciBhbmQgYWRkcyBpdCB0byB0aGUgY3VycmVudCBmaWx0ZXIgc3RhY2suXG4gKlxuICogQHBhcmFtIHRhcmdldCB7UElYSS5EaXNwbGF5T2JqZWN0fVxuICogQHBhcmFtIGZpbHRlcnMge1BJWEkuQWJzdHJhY3RGaWxlcltdfSB0aGUgZmlsdGVycyB0aGF0IHdpbGwgYmUgcHVzaGVkIHRvIHRoZSBjdXJyZW50IGZpbHRlciBzdGFja1xuICovXG5GaWx0ZXJNYW5hZ2VyLnByb3RvdHlwZS5wdXNoRmlsdGVyID0gZnVuY3Rpb24gKHRhcmdldCwgZmlsdGVycylcbntcbiAgICAvLyBnZXQgdGhlIGJvdW5kcyBvZiB0aGUgb2JqZWN0Li5cbiAgICAvLyBUT0RPIHJlcGxhY2UgY2xvbmUgd2l0aCBhIGNvcHkgdG8gc2F2ZSBvYmplY3QgY3JlYXRpb25cbiAgICB2YXIgYm91bmRzID0gdGFyZ2V0LmZpbHRlckFyZWEgPyB0YXJnZXQuZmlsdGVyQXJlYS5jbG9uZSgpIDogdGFyZ2V0LmdldEJvdW5kcygpO1xuXG4gICAgLy9ib3VuZHMgPSBib3VuZHMuY2xvbmUoKTtcblxuICAgIC8vIHJvdW5kIG9mZiB0aGUgcmVjdGFuZ2xlIHRvIGdldCBhIG5pY2Ugc21vb29vb29vdGggZmlsdGVyIDopXG4gICAgYm91bmRzLnggPSBib3VuZHMueCB8IDA7XG4gICAgYm91bmRzLnkgPSBib3VuZHMueSB8IDA7XG4gICAgYm91bmRzLndpZHRoID0gYm91bmRzLndpZHRoIHwgMDtcbiAgICBib3VuZHMuaGVpZ2h0ID0gYm91bmRzLmhlaWdodCB8IDA7XG5cblxuICAgIC8vIHBhZGRpbmchXG4gICAgdmFyIHBhZGRpbmcgPSBmaWx0ZXJzWzBdLnBhZGRpbmcgfCAwO1xuICAgIGJvdW5kcy54IC09IHBhZGRpbmc7XG4gICAgYm91bmRzLnkgLT0gcGFkZGluZztcbiAgICBib3VuZHMud2lkdGggKz0gcGFkZGluZyAqIDI7XG4gICAgYm91bmRzLmhlaWdodCArPSBwYWRkaW5nICogMjtcblxuXG4gICAgaWYodGhpcy5yZW5kZXJlci5jdXJyZW50UmVuZGVyVGFyZ2V0LnRyYW5zZm9ybSlcbiAgICB7XG4gICAgICAgIC8vVE9ETyB0aGlzIHdpbGwgYnJlYWsgaWYgdGhlIHJlbmRlclRleHR1cmUgdHJhbnNmb3JtIGlzIGFueXRoaW5nIG90aGVyIHRoYW4gYSB0cmFuc2xhdGlvbi5cbiAgICAgICAgLy9XaWxsIG5lZWQgdG8gdGFrZSB0aGUgZnVsbCBtYXRyaXggdHJhbnNmb3JtIGludG8gYWNvdW50Li5cbiAgICAgICAgdmFyIHRyYW5zZm9ybSA9IHRoaXMucmVuZGVyZXIuY3VycmVudFJlbmRlclRhcmdldC50cmFuc2Zvcm07XG5cbiAgICAgICAgYm91bmRzLnggKz0gdHJhbnNmb3JtLnR4O1xuICAgICAgICBib3VuZHMueSArPSB0cmFuc2Zvcm0udHk7XG5cbiAgICAgICAgdGhpcy5jYXBGaWx0ZXJBcmVhKCBib3VuZHMgKTtcblxuICAgICAgICBib3VuZHMueCAtPSB0cmFuc2Zvcm0udHg7XG4gICAgICAgIGJvdW5kcy55IC09IHRyYW5zZm9ybS50eTtcbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgIHRoaXMuY2FwRmlsdGVyQXJlYSggYm91bmRzICk7XG4gICAgfVxuXG4gICAgaWYoYm91bmRzLndpZHRoID4gMCAmJiBib3VuZHMuaGVpZ2h0ID4gMClcbiAgICB7XG4gICAgICAgIHRoaXMuY3VycmVudEZyYW1lID0gYm91bmRzO1xuXG4gICAgICAgIHZhciB0ZXh0dXJlID0gdGhpcy5nZXRSZW5kZXJUYXJnZXQoKTtcblxuICAgICAgICB0aGlzLnJlbmRlcmVyLnNldFJlbmRlclRhcmdldCh0ZXh0dXJlKTtcblxuICAgICAgICAvLyBjbGVhciB0aGUgdGV4dHVyZS4uXG4gICAgICAgIHRleHR1cmUuY2xlYXIoKTtcblxuICAgICAgICAvLyBUT0RPIGdldCByaWQgb2Ygb2JqZWN0IGNyZWF0aW9uIVxuICAgICAgICB0aGlzLmZpbHRlclN0YWNrLnB1c2goe1xuICAgICAgICAgICAgcmVuZGVyVGFyZ2V0OiB0ZXh0dXJlLFxuICAgICAgICAgICAgZmlsdGVyOiBmaWx0ZXJzXG4gICAgICAgIH0pO1xuXG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIC8vIHB1c2ggc29tdGhpbmcgb24gdG8gdGhlIHN0YWNrIHRoYXQgaXMgZW1wdHlcbiAgICAgICAgdGhpcy5maWx0ZXJTdGFjay5wdXNoKHtcbiAgICAgICAgICAgIHJlbmRlclRhcmdldDogbnVsbCxcbiAgICAgICAgICAgIGZpbHRlcjogZmlsdGVyc1xuICAgICAgICB9KTtcbiAgICB9XG59O1xuXG5cbi8qKlxuICogUmVtb3ZlcyB0aGUgbGFzdCBmaWx0ZXIgZnJvbSB0aGUgZmlsdGVyIHN0YWNrIGFuZCByZXR1cm5zIGl0LlxuICpcbiAqL1xuRmlsdGVyTWFuYWdlci5wcm90b3R5cGUucG9wRmlsdGVyID0gZnVuY3Rpb24gKClcbntcbiAgICB2YXIgZmlsdGVyRGF0YSA9IHRoaXMuZmlsdGVyU3RhY2sucG9wKCk7XG4gICAgdmFyIHByZXZpb3VzRmlsdGVyRGF0YSA9IHRoaXMuZmlsdGVyU3RhY2tbdGhpcy5maWx0ZXJTdGFjay5sZW5ndGgtMV07XG5cbiAgICB2YXIgaW5wdXQgPSBmaWx0ZXJEYXRhLnJlbmRlclRhcmdldDtcblxuICAgIC8vIGlmIHRoZSByZW5kZXJUYXJnZXQgaXMgbnVsbCB0aGVuIHdlIGRvbid0IGFwcGx5IHRoZSBmaWx0ZXIgYXMgaXRzIG9mZnNjcmVlblxuICAgIGlmKCFmaWx0ZXJEYXRhLnJlbmRlclRhcmdldClcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB2YXIgb3V0cHV0ID0gcHJldmlvdXNGaWx0ZXJEYXRhLnJlbmRlclRhcmdldDtcblxuICAgIC8vIHVzZSBwcm9ncmFtXG4gICAgdmFyIGdsID0gdGhpcy5yZW5kZXJlci5nbDtcblxuXG4gICAgdGhpcy5jdXJyZW50RnJhbWUgPSBpbnB1dC5mcmFtZTtcblxuICAgIHRoaXMucXVhZC5tYXAodGhpcy50ZXh0dXJlU2l6ZSwgaW5wdXQuZnJhbWUpO1xuXG5cbiAgICAvLyBUT0RPLi4gdGhpcyBwcm9iYWJseSBvbmx5IG5lZWRzIHRvIGJlIGRvbmUgb25jZSFcbiAgICBnbC5iaW5kQnVmZmVyKGdsLkFSUkFZX0JVRkZFUiwgdGhpcy5xdWFkLnZlcnRleEJ1ZmZlcik7XG4gICAgZ2wuYmluZEJ1ZmZlcihnbC5FTEVNRU5UX0FSUkFZX0JVRkZFUiwgdGhpcy5xdWFkLmluZGV4QnVmZmVyKTtcblxuICAgIHZhciBmaWx0ZXJzID0gZmlsdGVyRGF0YS5maWx0ZXI7XG5cbiAgICAvLyBhc3N1bWluZyBhbGwgZmlsdGVycyBmb2xsb3cgdGhlIGNvcnJlY3QgZm9ybWF0Pz9cbiAgICBnbC52ZXJ0ZXhBdHRyaWJQb2ludGVyKHRoaXMucmVuZGVyZXIuc2hhZGVyTWFuYWdlci5kZWZhdWx0U2hhZGVyLmF0dHJpYnV0ZXMuYVZlcnRleFBvc2l0aW9uLCAyLCBnbC5GTE9BVCwgZmFsc2UsIDAsIDApO1xuICAgIGdsLnZlcnRleEF0dHJpYlBvaW50ZXIodGhpcy5yZW5kZXJlci5zaGFkZXJNYW5hZ2VyLmRlZmF1bHRTaGFkZXIuYXR0cmlidXRlcy5hVGV4dHVyZUNvb3JkLCAyLCBnbC5GTE9BVCwgZmFsc2UsIDAsIDIgKiA0ICogNCk7XG4gICAgZ2wudmVydGV4QXR0cmliUG9pbnRlcih0aGlzLnJlbmRlcmVyLnNoYWRlck1hbmFnZXIuZGVmYXVsdFNoYWRlci5hdHRyaWJ1dGVzLmFDb2xvciwgNCwgZ2wuRkxPQVQsIGZhbHNlLCAwLCA0ICogNCAqIDQpO1xuXG4gICAgLy8gcmVzdG9yZSB0aGUgbm9ybWFsIGJsZW5kbW9kZSFcbiAgICB0aGlzLnJlbmRlcmVyLmJsZW5kTW9kZU1hbmFnZXIuc2V0QmxlbmRNb2RlKENPTlNULkJMRU5EX01PREVTLk5PUk1BTCk7XG5cbiAgICBpZiAoZmlsdGVycy5sZW5ndGggPT09IDEpXG4gICAge1xuICAgICAgICAvLyBUT0RPIChjZW5nbGVyKSAtIFRoZXJlIGhhcyB0byBiZSBhIGJldHRlciB3YXkgdGhlbiBzZXR0aW5nIHRoaXMgZWFjaCB0aW1lP1xuICAgICAgICBpZiAoZmlsdGVyc1swXS51bmlmb3Jtcy5kaW1lbnNpb25zKVxuICAgICAgICB7XG4gICAgICAgICAgICBmaWx0ZXJzWzBdLnVuaWZvcm1zLmRpbWVuc2lvbnMudmFsdWVbMF0gPSB0aGlzLnJlbmRlcmVyLndpZHRoO1xuICAgICAgICAgICAgZmlsdGVyc1swXS51bmlmb3Jtcy5kaW1lbnNpb25zLnZhbHVlWzFdID0gdGhpcy5yZW5kZXJlci5oZWlnaHQ7XG4gICAgICAgICAgICBmaWx0ZXJzWzBdLnVuaWZvcm1zLmRpbWVuc2lvbnMudmFsdWVbMl0gPSB0aGlzLnF1YWQudmVydGljZXNbMF07XG4gICAgICAgICAgICBmaWx0ZXJzWzBdLnVuaWZvcm1zLmRpbWVuc2lvbnMudmFsdWVbM10gPSB0aGlzLnF1YWQudmVydGljZXNbNV07XG4gICAgICAgIH1cblxuICAgICAgICBmaWx0ZXJzWzBdLmFwcGx5RmlsdGVyKCB0aGlzLnJlbmRlcmVyLCBpbnB1dCwgb3V0cHV0ICk7XG4gICAgICAgIHRoaXMucmV0dXJuUmVuZGVyVGFyZ2V0KCBpbnB1dCApO1xuXG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHZhciBmbGlwVGV4dHVyZSA9IGlucHV0O1xuICAgICAgICB2YXIgZmxvcFRleHR1cmUgPSB0aGlzLmdldFJlbmRlclRhcmdldCh0cnVlKTtcblxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGZpbHRlcnMubGVuZ3RoLTE7IGkrKylcbiAgICAgICAge1xuICAgICAgICAgICAgdmFyIGZpbHRlciA9IGZpbHRlcnNbaV07XG5cbiAgICAgICAgICAgIC8vIFRPRE8gKGNlbmdsZXIpIC0gVGhlcmUgaGFzIHRvIGJlIGEgYmV0dGVyIHdheSB0aGVuIHNldHRpbmcgdGhpcyBlYWNoIHRpbWU/XG4gICAgICAgICAgICBpZiAoZmlsdGVyLnVuaWZvcm1zLmRpbWVuc2lvbnMpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgZmlsdGVyLnVuaWZvcm1zLmRpbWVuc2lvbnMudmFsdWVbMF0gPSB0aGlzLnJlbmRlcmVyLndpZHRoO1xuICAgICAgICAgICAgICAgIGZpbHRlci51bmlmb3Jtcy5kaW1lbnNpb25zLnZhbHVlWzFdID0gdGhpcy5yZW5kZXJlci5oZWlnaHQ7XG4gICAgICAgICAgICAgICAgZmlsdGVyLnVuaWZvcm1zLmRpbWVuc2lvbnMudmFsdWVbMl0gPSB0aGlzLnF1YWQudmVydGljZXNbMF07XG4gICAgICAgICAgICAgICAgZmlsdGVyLnVuaWZvcm1zLmRpbWVuc2lvbnMudmFsdWVbM10gPSB0aGlzLnF1YWQudmVydGljZXNbNV07XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGZpbHRlci5hcHBseUZpbHRlciggdGhpcy5yZW5kZXJlciwgZmxpcFRleHR1cmUsIGZsb3BUZXh0dXJlICk7XG5cbiAgICAgICAgICAgIHZhciB0ZW1wID0gZmxpcFRleHR1cmU7XG4gICAgICAgICAgICBmbGlwVGV4dHVyZSA9IGZsb3BUZXh0dXJlO1xuICAgICAgICAgICAgZmxvcFRleHR1cmUgPSB0ZW1wO1xuICAgICAgICB9XG5cbiAgICAgICAgZmlsdGVyc1tmaWx0ZXJzLmxlbmd0aC0xXS5hcHBseUZpbHRlciggdGhpcy5yZW5kZXJlciwgZmxpcFRleHR1cmUsIG91dHB1dCApO1xuXG4gICAgICAgIHRoaXMucmV0dXJuUmVuZGVyVGFyZ2V0KCBmbGlwVGV4dHVyZSApO1xuICAgICAgICB0aGlzLnJldHVyblJlbmRlclRhcmdldCggZmxvcFRleHR1cmUgKTtcbiAgICB9XG5cbiAgICByZXR1cm4gZmlsdGVyRGF0YS5maWx0ZXI7XG59O1xuXG4vKipcbiAqIEdyYWJzIGFuIHJlbmRlciB0YXJnZXQgZnJvbSB0aGUgaW50ZXJuYWwgcG9vbFxuICpcbiAqIEBwYXJhbSBjbGVhciB7Ym9vbGVhbn0gV2hldGhlciBvciBub3Qgd2UgbmVlZCB0byBjbGVhciB0aGUgUmVuZGVyVGFyZ2V0XG4gKiBAcmV0dXJuIHtSZW5kZXJUYXJnZXR9XG4gKi9cbkZpbHRlck1hbmFnZXIucHJvdG90eXBlLmdldFJlbmRlclRhcmdldCA9IGZ1bmN0aW9uICggY2xlYXIgKVxue1xuICAgIHZhciByZW5kZXJUYXJnZXQgPSB0aGlzLnRleHR1cmVQb29sLnBvcCgpIHx8IG5ldyBSZW5kZXJUYXJnZXQodGhpcy5yZW5kZXJlci5nbCwgdGhpcy50ZXh0dXJlU2l6ZS53aWR0aCwgdGhpcy50ZXh0dXJlU2l6ZS5oZWlnaHQsIENPTlNULlNDQUxFX01PREVTLkxJTkVBUiwgdGhpcy5yZW5kZXJlci5yZXNvbHV0aW9uICogQ09OU1QuRklMVEVSX1JFU09MVVRJT04pO1xuICAgIHJlbmRlclRhcmdldC5mcmFtZSA9IHRoaXMuY3VycmVudEZyYW1lO1xuXG4gICAgaWYgKGNsZWFyKVxuICAgIHtcbiAgICAgICAgcmVuZGVyVGFyZ2V0LmNsZWFyKHRydWUpO1xuICAgIH1cblxuICAgIHJldHVybiByZW5kZXJUYXJnZXQ7XG59O1xuXG4vKlxuICogUmV0dXJucyBhIFJlbmRlclRhcmdldCB0byB0aGUgaW50ZXJuYWwgcG9vbFxuICogQHBhcmFtIHJlbmRlclRhcmdldCB7UmVuZGVyVGFyZ2V0fSBUaGUgUmVuZGVyVGFyZ2V0IHdlIHdhbnQgdG8gcmV0dXJuIHRvIHRoZSBwb29sXG4gKi9cbkZpbHRlck1hbmFnZXIucHJvdG90eXBlLnJldHVyblJlbmRlclRhcmdldCA9IGZ1bmN0aW9uIChyZW5kZXJUYXJnZXQpXG57XG4gICAgdGhpcy50ZXh0dXJlUG9vbC5wdXNoKCByZW5kZXJUYXJnZXQgKTtcbn07XG5cbi8qXG4gKiBBcHBsaWVzIHRoZSBmaWx0ZXJcbiAqIEBwYXJhbSBzaGFkZXIge1NoYWRlcn0gVGhlIHNoYWRlciB0byB1cGxvYWRcbiAqIEBwYXJhbSBpbnB1dFRhcmdldCB7UmVuZGVyVGFyZ2V0fVxuICogQHBhcmFtIG91dHB1dFRhcmdldCB7UmVuZGVyVGFyZ2V0fVxuICogQHBhcmFtIGNsZWFyIHtib29sZWFufSBXaGV0aGVyIG9yIG5vdCB3ZSB3YW50IHRvIGNsZWFyIHRoZSBvdXRwdXRUYXJnZXRcbiAqL1xuRmlsdGVyTWFuYWdlci5wcm90b3R5cGUuYXBwbHlGaWx0ZXIgPSBmdW5jdGlvbiAoc2hhZGVyLCBpbnB1dFRhcmdldCwgb3V0cHV0VGFyZ2V0LCBjbGVhcilcbntcbiAgICB2YXIgZ2wgPSB0aGlzLnJlbmRlcmVyLmdsO1xuXG4gICAgdGhpcy5yZW5kZXJlci5zZXRSZW5kZXJUYXJnZXQob3V0cHV0VGFyZ2V0KTtcblxuICAgIGlmIChjbGVhcilcbiAgICB7XG4gICAgICAgIG91dHB1dFRhcmdldC5jbGVhcigpO1xuICAgIH1cblxuICAgIC8vIHNldCB0aGUgc2hhZGVyXG4gICAgdGhpcy5yZW5kZXJlci5zaGFkZXJNYW5hZ2VyLnNldFNoYWRlcihzaGFkZXIpO1xuXG4gICAgLy8gVE9ETyAoY2VuZ2xlcikgLSBDYW4gdGhpcyBiZSBjYWNoZWQgYW5kIG5vdCBgdG9BcnJheWBlZCBlYWNoIGZyYW1lP1xuICAgIHNoYWRlci51bmlmb3Jtcy5wcm9qZWN0aW9uTWF0cml4LnZhbHVlID0gdGhpcy5yZW5kZXJlci5jdXJyZW50UmVuZGVyVGFyZ2V0LnByb2plY3Rpb25NYXRyaXgudG9BcnJheSh0cnVlKTtcblxuICAgIC8vVE9ETyBjYW4gdGhpcyBiZSBvcHRpbWlzZWQ/XG4gICAgc2hhZGVyLnN5bmNVbmlmb3JtcygpO1xuLypcbiAgICBnbC52ZXJ0ZXhBdHRyaWJQb2ludGVyKHNoYWRlci5hdHRyaWJ1dGVzLmFWZXJ0ZXhQb3NpdGlvbiwgMiwgZ2wuRkxPQVQsIGZhbHNlLCAwLCAwKTtcbiAgICBnbC52ZXJ0ZXhBdHRyaWJQb2ludGVyKHNoYWRlci5hdHRyaWJ1dGVzLmFUZXh0dXJlQ29vcmQsIDIsIGdsLkZMT0FULCBmYWxzZSwgMCwgMiAqIDQgKiA0KTtcbiAgICBnbC52ZXJ0ZXhBdHRyaWJQb2ludGVyKHNoYWRlci5hdHRyaWJ1dGVzLmFDb2xvciwgNCwgZ2wuRkxPQVQsIGZhbHNlLCAwLCA0ICogNCAqIDQpO1xuKi9cblxuICAgIGdsLmFjdGl2ZVRleHR1cmUoZ2wuVEVYVFVSRTApO1xuICAgIGdsLmJpbmRUZXh0dXJlKGdsLlRFWFRVUkVfMkQsIGlucHV0VGFyZ2V0LnRleHR1cmUpO1xuXG4gICAgZ2wuZHJhd0VsZW1lbnRzKGdsLlRSSUFOR0xFUywgNiwgZ2wuVU5TSUdORURfU0hPUlQsIDAgKTtcbiAgICB0aGlzLnJlbmRlcmVyLmRyYXdDb3VudCsrO1xufTtcblxuLypcbiAqIENhbGN1bGF0ZXMgdGhlIG1hcHBlZCBtYXRyaXhcbiAqIEBwYXJhbSBmaWx0ZXJBcmVhIHtSZWN0YW5nbGV9IFRoZSBmaWx0ZXIgYXJlYVxuICogQHBhcmFtIHNwcml0ZSB7U3ByaXRlfSB0aGUgdGFyZ2V0IHNwcml0ZVxuICogQHBhcmFtIG91dHB1dE1hdHJpeCB7TWF0cml4fSBAYWx2aW5cbiAqL1xuLy8gVE9ETyBwbGF5aW5nIGFyb3VuZCBoZXJlLi4gdGhpcyBpcyB0ZW1wb3JhcnkgLSAod2lsbCBlbmQgdXAgaW4gdGhlIHNoYWRlcilcbkZpbHRlck1hbmFnZXIucHJvdG90eXBlLmNhbGN1bGF0ZU1hcHBlZE1hdHJpeCA9IGZ1bmN0aW9uIChmaWx0ZXJBcmVhLCBzcHJpdGUsIG91dHB1dE1hdHJpeClcbntcbiAgICB2YXIgd29ybGRUcmFuc2Zvcm0gPSBzcHJpdGUud29ybGRUcmFuc2Zvcm0uY29weShtYXRoLk1hdHJpeC5URU1QX01BVFJJWCksXG4gICAgdGV4dHVyZSA9IHNwcml0ZS5fdGV4dHVyZS5iYXNlVGV4dHVyZTtcblxuICAgIHZhciBtYXBwZWRNYXRyaXggPSBvdXRwdXRNYXRyaXguaWRlbnRpdHkoKTtcblxuICAgIC8vIHNjYWxlLi5cbiAgICB2YXIgcmF0aW8gPSB0aGlzLnRleHR1cmVTaXplLmhlaWdodCAvIHRoaXMudGV4dHVyZVNpemUud2lkdGg7XG5cbiAgICBtYXBwZWRNYXRyaXgudHJhbnNsYXRlKGZpbHRlckFyZWEueCAvIHRoaXMudGV4dHVyZVNpemUud2lkdGgsIGZpbHRlckFyZWEueSAvIHRoaXMudGV4dHVyZVNpemUuaGVpZ2h0ICk7XG5cbiAgICBtYXBwZWRNYXRyaXguc2NhbGUoMSAsIHJhdGlvKTtcblxuICAgIHZhciB0cmFuc2xhdGVTY2FsZVggPSAodGhpcy50ZXh0dXJlU2l6ZS53aWR0aCAvIHRleHR1cmUud2lkdGgpO1xuICAgIHZhciB0cmFuc2xhdGVTY2FsZVkgPSAodGhpcy50ZXh0dXJlU2l6ZS5oZWlnaHQgLyB0ZXh0dXJlLmhlaWdodCk7XG5cbiAgICB3b3JsZFRyYW5zZm9ybS50eCAvPSB0ZXh0dXJlLndpZHRoICogdHJhbnNsYXRlU2NhbGVYO1xuICAgIHdvcmxkVHJhbnNmb3JtLnR5IC89IHRleHR1cmUud2lkdGggKiB0cmFuc2xhdGVTY2FsZVg7XG5cbiAgICB3b3JsZFRyYW5zZm9ybS5pbnZlcnQoKTtcblxuICAgIG1hcHBlZE1hdHJpeC5wcmVwZW5kKHdvcmxkVHJhbnNmb3JtKTtcblxuICAgIC8vIGFwcGx5IGludmVyc2Ugc2NhbGUuLlxuICAgIG1hcHBlZE1hdHJpeC5zY2FsZSgxICwgMS9yYXRpbyk7XG5cbiAgICBtYXBwZWRNYXRyaXguc2NhbGUoIHRyYW5zbGF0ZVNjYWxlWCAsIHRyYW5zbGF0ZVNjYWxlWSApO1xuXG4gICAgbWFwcGVkTWF0cml4LnRyYW5zbGF0ZShzcHJpdGUuYW5jaG9yLngsIHNwcml0ZS5hbmNob3IueSk7XG5cbiAgICByZXR1cm4gbWFwcGVkTWF0cml4O1xuXG4gICAgLy8gS2VlcGluZyB0aGUgb3JnaW5hbCBhcyBhIHJlbWluZGVyIHRvIG1lIG9uIGhvdyB0aGlzIHdvcmtzIVxuICAgIC8vXG4gICAgLy8gdmFyIG0gPSBuZXcgbWF0aC5NYXRyaXgoKTtcblxuICAgIC8vIC8vIHNjYWxlLi5cbiAgICAvLyB2YXIgcmF0aW8gPSB0aGlzLnRleHR1cmVTaXplLmhlaWdodCAvIHRoaXMudGV4dHVyZVNpemUud2lkdGg7XG5cbiAgICAvLyBtLnRyYW5zbGF0ZShmaWx0ZXJBcmVhLnggLyB0aGlzLnRleHR1cmVTaXplLndpZHRoLCBmaWx0ZXJBcmVhLnkgLyB0aGlzLnRleHR1cmVTaXplLmhlaWdodCk7XG5cblxuICAgIC8vIG0uc2NhbGUoMSAsIHJhdGlvKTtcblxuXG4gICAgLy8gdmFyIHRyYW5zZm9ybSA9IHd0LmNsb25lKCk7XG5cbiAgICAvLyB2YXIgdHJhbnNsYXRlU2NhbGVYID0gKHRoaXMudGV4dHVyZVNpemUud2lkdGggLyA2MjApO1xuICAgIC8vIHZhciB0cmFuc2xhdGVTY2FsZVkgPSAodGhpcy50ZXh0dXJlU2l6ZS5oZWlnaHQgLyAzODApO1xuXG4gICAgLy8gdHJhbnNmb3JtLnR4IC89IDYyMCAqIHRyYW5zbGF0ZVNjYWxlWDtcbiAgICAvLyB0cmFuc2Zvcm0udHkgLz0gNjIwICogdHJhbnNsYXRlU2NhbGVYO1xuXG4gICAgLy8gdHJhbnNmb3JtLmludmVydCgpO1xuXG4gICAgLy8gdHJhbnNmb3JtLmFwcGVuZChtKTtcblxuICAgIC8vIC8vIGFwcGx5IGludmVyc2Ugc2NhbGUuLlxuICAgIC8vIHRyYW5zZm9ybS5zY2FsZSgxICwgMS9yYXRpbyk7XG5cbiAgICAvLyB0cmFuc2Zvcm0uc2NhbGUoIHRyYW5zbGF0ZVNjYWxlWCAsIHRyYW5zbGF0ZVNjYWxlWSApO1xuXG4gICAgLy8gcmV0dXJuIHRyYW5zZm9ybTtcbn07XG5cbi8qXG4gKiBDb25zdHJhaW5zIHRoZSBmaWx0ZXIgYXJlYSB0byB0aGUgdGV4dHVyZSBzaXplXG4gKiBAcGFyYW0gZmlsdGVyQXJlYSB7UmVjdGFuZ2xlfSBUaGUgZmlsdGVyIGFyZWEgd2Ugd2FudCB0byBjYXBcbiAqL1xuRmlsdGVyTWFuYWdlci5wcm90b3R5cGUuY2FwRmlsdGVyQXJlYSA9IGZ1bmN0aW9uIChmaWx0ZXJBcmVhKVxue1xuICAgIGlmIChmaWx0ZXJBcmVhLnggPCAwKVxuICAgIHtcbiAgICAgICAgZmlsdGVyQXJlYS53aWR0aCArPSBmaWx0ZXJBcmVhLng7XG4gICAgICAgIGZpbHRlckFyZWEueCA9IDA7XG4gICAgfVxuXG4gICAgaWYgKGZpbHRlckFyZWEueSA8IDApXG4gICAge1xuICAgICAgICBmaWx0ZXJBcmVhLmhlaWdodCArPSBmaWx0ZXJBcmVhLnk7XG4gICAgICAgIGZpbHRlckFyZWEueSA9IDA7XG4gICAgfVxuXG4gICAgaWYgKCBmaWx0ZXJBcmVhLnggKyBmaWx0ZXJBcmVhLndpZHRoID4gdGhpcy50ZXh0dXJlU2l6ZS53aWR0aCApXG4gICAge1xuICAgICAgICBmaWx0ZXJBcmVhLndpZHRoID0gdGhpcy50ZXh0dXJlU2l6ZS53aWR0aCAtIGZpbHRlckFyZWEueDtcbiAgICB9XG5cbiAgICBpZiAoIGZpbHRlckFyZWEueSArIGZpbHRlckFyZWEuaGVpZ2h0ID4gdGhpcy50ZXh0dXJlU2l6ZS5oZWlnaHQgKVxuICAgIHtcbiAgICAgICAgZmlsdGVyQXJlYS5oZWlnaHQgPSB0aGlzLnRleHR1cmVTaXplLmhlaWdodCAtIGZpbHRlckFyZWEueTtcbiAgICB9XG59O1xuXG4vKlxuICogUmVzaXplcyBhbGwgdGhlIHJlbmRlciB0YXJnZXRzIGluIHRoZSBwb29sXG4gKiBAcGFyYW0gd2lkdGgge251bWJlcn0gdGhlIG5ldyB3aWR0aFxuICogQHBhcmFtIGhlaWdodCB7bnVtYmVyfSB0aGUgbmV3IGhlaWdodFxuICovXG5GaWx0ZXJNYW5hZ2VyLnByb3RvdHlwZS5yZXNpemUgPSBmdW5jdGlvbiAoIHdpZHRoLCBoZWlnaHQgKVxue1xuICAgIHRoaXMudGV4dHVyZVNpemUud2lkdGggPSB3aWR0aDtcbiAgICB0aGlzLnRleHR1cmVTaXplLmhlaWdodCA9IGhlaWdodDtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy50ZXh0dXJlUG9vbC5sZW5ndGg7IGkrKylcbiAgICB7XG4gICAgICAgIHRoaXMudGV4dHVyZVBvb2xbaV0ucmVzaXplKCB3aWR0aCwgaGVpZ2h0ICk7XG4gICAgfVxufTtcblxuLyoqXG4gKiBEZXN0cm95cyB0aGUgZmlsdGVyIGFuZCByZW1vdmVzIGl0IGZyb20gdGhlIGZpbHRlciBzdGFjay5cbiAqXG4gKi9cbkZpbHRlck1hbmFnZXIucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoKVxue1xuICAgIHRoaXMucXVhZC5kZXN0cm95KCk7XG4gICAgXG4gICAgV2ViR0xNYW5hZ2VyLnByb3RvdHlwZS5kZXN0cm95LmNhbGwodGhpcyk7XG4gICAgXG4gICAgdGhpcy5maWx0ZXJTdGFjayA9IG51bGw7XG4gICAgdGhpcy5vZmZzZXRZID0gMDtcblxuICAgIC8vIGRlc3Ryb3kgdGV4dHVyZXNcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMudGV4dHVyZVBvb2wubGVuZ3RoOyBpKyspXG4gICAge1xuICAgICAgICB0aGlzLnRleHR1cmVQb29sW2ldLmRlc3Ryb3koKTtcbiAgICB9XG5cbiAgICB0aGlzLnRleHR1cmVQb29sID0gbnVsbDtcbn07XG4iLCJ2YXIgV2ViR0xNYW5hZ2VyID0gcmVxdWlyZSgnLi9XZWJHTE1hbmFnZXInKSxcbiAgICBBbHBoYU1hc2tGaWx0ZXIgPSByZXF1aXJlKCcuLi9maWx0ZXJzL1Nwcml0ZU1hc2tGaWx0ZXInKTtcblxuLyoqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcn0gVGhlIHJlbmRlcmVyIHRoaXMgbWFuYWdlciB3b3JrcyBmb3IuXG4gKi9cbmZ1bmN0aW9uIE1hc2tNYW5hZ2VyKHJlbmRlcmVyKVxue1xuICAgIFdlYkdMTWFuYWdlci5jYWxsKHRoaXMsIHJlbmRlcmVyKTtcblxuICAgIHRoaXMuc3RlbmNpbFN0YWNrID0gW107XG4gICAgdGhpcy5yZXZlcnNlID0gdHJ1ZTtcbiAgICB0aGlzLmNvdW50ID0gMDtcblxuICAgIHRoaXMuYWxwaGFNYXNrUG9vbCA9IFtdO1xufVxuXG5NYXNrTWFuYWdlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFdlYkdMTWFuYWdlci5wcm90b3R5cGUpO1xuTWFza01hbmFnZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gTWFza01hbmFnZXI7XG5tb2R1bGUuZXhwb3J0cyA9IE1hc2tNYW5hZ2VyO1xuXG4vKipcbiAqIEFwcGxpZXMgdGhlIE1hc2sgYW5kIGFkZHMgaXQgdG8gdGhlIGN1cnJlbnQgZmlsdGVyIHN0YWNrLlxuICpcbiAqIEBwYXJhbSBncmFwaGljcyB7UElYSS5HcmFwaGljc31cbiAqIEBwYXJhbSB3ZWJHTERhdGEge2FueVtdfVxuICovXG5NYXNrTWFuYWdlci5wcm90b3R5cGUucHVzaE1hc2sgPSBmdW5jdGlvbiAodGFyZ2V0LCBtYXNrRGF0YSlcbntcbiAgICBpZiAobWFza0RhdGEudGV4dHVyZSlcbiAgICB7XG4gICAgICAgIHRoaXMucHVzaFNwcml0ZU1hc2sodGFyZ2V0LCBtYXNrRGF0YSk7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHRoaXMucHVzaFN0ZW5jaWxNYXNrKHRhcmdldCwgbWFza0RhdGEpO1xuICAgIH1cblxufTtcblxuLyoqXG4gKiBSZW1vdmVzIHRoZSBsYXN0IG1hc2sgZnJvbSB0aGUgbWFzayBzdGFjayBhbmQgZG9lc24ndCByZXR1cm4gaXQuXG4gKlxuICogQHBhcmFtIHRhcmdldCB7UElYSS5SZW5kZXJUYXJnZXR9XG4gKiBAcGFyYW0gbWFza0RhdGEge2FueVtdfVxuICovXG5NYXNrTWFuYWdlci5wcm90b3R5cGUucG9wTWFzayA9IGZ1bmN0aW9uICh0YXJnZXQsIG1hc2tEYXRhKVxue1xuICAgIGlmIChtYXNrRGF0YS50ZXh0dXJlKVxuICAgIHtcbiAgICAgICAgdGhpcy5wb3BTcHJpdGVNYXNrKHRhcmdldCwgbWFza0RhdGEpO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICB0aGlzLnBvcFN0ZW5jaWxNYXNrKHRhcmdldCwgbWFza0RhdGEpO1xuICAgIH1cbn07XG5cbi8qKlxuICogQXBwbGllcyB0aGUgTWFzayBhbmQgYWRkcyBpdCB0byB0aGUgY3VycmVudCBmaWx0ZXIgc3RhY2suXG4gKlxuICogQHBhcmFtIHRhcmdldCB7UElYSS5SZW5kZXJUYXJnZXR9XG4gKiBAcGFyYW0gbWFza0RhdGEge2FueVtdfVxuICovXG5NYXNrTWFuYWdlci5wcm90b3R5cGUucHVzaFNwcml0ZU1hc2sgPSBmdW5jdGlvbiAodGFyZ2V0LCBtYXNrRGF0YSlcbntcbiAgICB2YXIgYWxwaGFNYXNrRmlsdGVyID0gdGhpcy5hbHBoYU1hc2tQb29sLnBvcCgpO1xuXG4gICAgaWYgKCFhbHBoYU1hc2tGaWx0ZXIpXG4gICAge1xuICAgICAgICBhbHBoYU1hc2tGaWx0ZXIgPSBbbmV3IEFscGhhTWFza0ZpbHRlcihtYXNrRGF0YSldO1xuICAgIH1cblxuICAgIGFscGhhTWFza0ZpbHRlclswXS5tYXNrU3ByaXRlID0gbWFza0RhdGE7XG4gICAgdGhpcy5yZW5kZXJlci5maWx0ZXJNYW5hZ2VyLnB1c2hGaWx0ZXIodGFyZ2V0LCBhbHBoYU1hc2tGaWx0ZXIpO1xufTtcblxuLyoqXG4gKiBSZW1vdmVzIHRoZSBsYXN0IGZpbHRlciBmcm9tIHRoZSBmaWx0ZXIgc3RhY2sgYW5kIGRvZXNuJ3QgcmV0dXJuIGl0LlxuICpcbiAqL1xuTWFza01hbmFnZXIucHJvdG90eXBlLnBvcFNwcml0ZU1hc2sgPSBmdW5jdGlvbiAoKVxue1xuICAgIHZhciBmaWx0ZXJzID0gdGhpcy5yZW5kZXJlci5maWx0ZXJNYW5hZ2VyLnBvcEZpbHRlcigpO1xuXG4gICAgdGhpcy5hbHBoYU1hc2tQb29sLnB1c2goZmlsdGVycyk7XG59O1xuXG5cbi8qKlxuICogQXBwbGllcyB0aGUgTWFzayBhbmQgYWRkcyBpdCB0byB0aGUgY3VycmVudCBmaWx0ZXIgc3RhY2suXG4gKlxuICogQHBhcmFtIHRhcmdldCB7UElYSS5SZW5kZXJUYXJnZXR9XG4gKiBAcGFyYW0gbWFza0RhdGEge2FueVtdfVxuICovXG5NYXNrTWFuYWdlci5wcm90b3R5cGUucHVzaFN0ZW5jaWxNYXNrID0gZnVuY3Rpb24gKHRhcmdldCwgbWFza0RhdGEpXG57XG4gICAgdGhpcy5yZW5kZXJlci5zdGVuY2lsTWFuYWdlci5wdXNoTWFzayhtYXNrRGF0YSk7XG59O1xuXG4vKipcbiAqIFJlbW92ZXMgdGhlIGxhc3QgZmlsdGVyIGZyb20gdGhlIGZpbHRlciBzdGFjayBhbmQgZG9lc24ndCByZXR1cm4gaXQuXG4gKlxuICogQHBhcmFtIHRhcmdldCB7UElYSS5SZW5kZXJUYXJnZXR9XG4gKiBAcGFyYW0gbWFza0RhdGEge2FueVtdfVxuICovXG5NYXNrTWFuYWdlci5wcm90b3R5cGUucG9wU3RlbmNpbE1hc2sgPSBmdW5jdGlvbiAodGFyZ2V0LCBtYXNrRGF0YSlcbntcbiAgICB0aGlzLnJlbmRlcmVyLnN0ZW5jaWxNYW5hZ2VyLnBvcE1hc2sobWFza0RhdGEpO1xufTtcblxuIiwidmFyIFdlYkdMTWFuYWdlciA9IHJlcXVpcmUoJy4vV2ViR0xNYW5hZ2VyJyksXG4gICAgVGV4dHVyZVNoYWRlciA9IHJlcXVpcmUoJy4uL3NoYWRlcnMvVGV4dHVyZVNoYWRlcicpLFxuICAgIENvbXBsZXhQcmltaXRpdmVTaGFkZXIgPSByZXF1aXJlKCcuLi9zaGFkZXJzL0NvbXBsZXhQcmltaXRpdmVTaGFkZXInKSxcbiAgICBQcmltaXRpdmVTaGFkZXIgPSByZXF1aXJlKCcuLi9zaGFkZXJzL1ByaW1pdGl2ZVNoYWRlcicpLFxuICAgIHV0aWxzID0gcmVxdWlyZSgnLi4vLi4vLi4vdXRpbHMnKTtcblxuLyoqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAZXh0ZW5kcyBQSVhJLldlYkdMTWFuYWdlclxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLldlYkdMUmVuZGVyZXJ9IFRoZSByZW5kZXJlciB0aGlzIG1hbmFnZXIgd29ya3MgZm9yLlxuICovXG5mdW5jdGlvbiBTaGFkZXJNYW5hZ2VyKHJlbmRlcmVyKVxue1xuICAgIFdlYkdMTWFuYWdlci5jYWxsKHRoaXMsIHJlbmRlcmVyKTtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLm1heEF0dGlicyA9IDEwO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7YW55W119XG4gICAgICovXG4gICAgdGhpcy5hdHRyaWJTdGF0ZSA9IFtdO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7YW55W119XG4gICAgICovXG4gICAgdGhpcy50ZW1wQXR0cmliU3RhdGUgPSBbXTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5tYXhBdHRpYnM7IGkrKylcbiAgICB7XG4gICAgICAgIHRoaXMuYXR0cmliU3RhdGVbaV0gPSBmYWxzZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHthbnlbXX1cbiAgICAgKi9cbiAgICB0aGlzLnN0YWNrID0gW107XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9jdXJyZW50SWQgPSAtMTtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge1BJWEkuU2hhZGVyfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5jdXJyZW50U2hhZGVyID0gbnVsbDtcblxuLy8gICAgdGhpcy5pbml0UGx1Z2lucygpO1xufVxuXG5TaGFkZXJNYW5hZ2VyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoV2ViR0xNYW5hZ2VyLnByb3RvdHlwZSk7XG5TaGFkZXJNYW5hZ2VyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFNoYWRlck1hbmFnZXI7XG51dGlscy5wbHVnaW5UYXJnZXQubWl4aW4oU2hhZGVyTWFuYWdlcik7XG5cbm1vZHVsZS5leHBvcnRzID0gU2hhZGVyTWFuYWdlcjtcblxuLyoqXG4gKiBDYWxsZWQgd2hlbiB0aGVyZSBpcyBhIFdlYkdMIGNvbnRleHQgY2hhbmdlLlxuICpcbiAqL1xuU2hhZGVyTWFuYWdlci5wcm90b3R5cGUub25Db250ZXh0Q2hhbmdlID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLmluaXRQbHVnaW5zKCk7XG5cbiAgICB2YXIgZ2wgPSB0aGlzLnJlbmRlcmVyLmdsO1xuXG4gICAgLy8gZ2V0IHRoZSBtYXhpbXVtIG51bWJlciBvZiBhdHRyaWJ1dGUgY29ycmVjdGx5IGFzIHRoaXMgdGVuZHMgdG8gdmFyeVxuICAgIHRoaXMubWF4QXR0aWJzID0gZ2wuZ2V0UGFyYW1ldGVyKGdsLk1BWF9WRVJURVhfQVRUUklCUyk7XG5cbiAgICB0aGlzLmF0dHJpYlN0YXRlID0gW107XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMubWF4QXR0aWJzOyBpKyspXG4gICAge1xuICAgICAgICB0aGlzLmF0dHJpYlN0YXRlW2ldID0gZmFsc2U7XG4gICAgfVxuXG4gICAgLy8gVE9ETyAtIFdoeSBhcmUgdGhlc2Ugbm90IHBsdWdpbnM/IFdlIGNhbid0IGRlY291cGxlIHByaW1pdGl2ZXMgdW5sZXNzIHRoZXkgYXJlLi4uLlxuICAgIHRoaXMuZGVmYXVsdFNoYWRlciA9IG5ldyBUZXh0dXJlU2hhZGVyKHRoaXMpO1xuICAgIHRoaXMucHJpbWl0aXZlU2hhZGVyID0gbmV3IFByaW1pdGl2ZVNoYWRlcih0aGlzKTtcbiAgICB0aGlzLmNvbXBsZXhQcmltaXRpdmVTaGFkZXIgPSBuZXcgQ29tcGxleFByaW1pdGl2ZVNoYWRlcih0aGlzKTtcbn07XG5cbi8qKlxuICogVGFrZXMgdGhlIGF0dHJpYnV0ZXMgZ2l2ZW4gaW4gcGFyYW1ldGVycyBhbmQgdXBsb2FkcyB0aGVtLlxuICpcbiAqIEBwYXJhbSBhdHRyaWJzIHthbnlbXX0gYXR0cmlic1xuICovXG5TaGFkZXJNYW5hZ2VyLnByb3RvdHlwZS5zZXRBdHRyaWJzID0gZnVuY3Rpb24gKGF0dHJpYnMpXG57XG4gICAgLy8gcmVzZXQgdGVtcCBzdGF0ZVxuICAgIHZhciBpO1xuXG4gICAgZm9yIChpID0gMDsgaSA8IHRoaXMudGVtcEF0dHJpYlN0YXRlLmxlbmd0aDsgaSsrKVxuICAgIHtcbiAgICAgICAgdGhpcy50ZW1wQXR0cmliU3RhdGVbaV0gPSBmYWxzZTtcbiAgICB9XG5cbiAgICAvLyBzZXQgdGhlIG5ldyBhdHRyaWJzXG4gICAgZm9yICh2YXIgYSBpbiBhdHRyaWJzKVxuICAgIHtcbiAgICAgICAgdGhpcy50ZW1wQXR0cmliU3RhdGVbYXR0cmlic1thXV0gPSB0cnVlO1xuICAgIH1cblxuICAgIHZhciBnbCA9IHRoaXMucmVuZGVyZXIuZ2w7XG5cbiAgICBmb3IgKGkgPSAwOyBpIDwgdGhpcy5hdHRyaWJTdGF0ZS5sZW5ndGg7IGkrKylcbiAgICB7XG4gICAgICAgIGlmICh0aGlzLmF0dHJpYlN0YXRlW2ldICE9PSB0aGlzLnRlbXBBdHRyaWJTdGF0ZVtpXSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5hdHRyaWJTdGF0ZVtpXSA9IHRoaXMudGVtcEF0dHJpYlN0YXRlW2ldO1xuXG4gICAgICAgICAgICBpZiAodGhpcy5hdHRyaWJTdGF0ZVtpXSlcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBnbC5lbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBnbC5kaXNhYmxlVmVydGV4QXR0cmliQXJyYXkoaSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG59O1xuXG4vKipcbiAqIFNldHMgdGhlIGN1cnJlbnQgc2hhZGVyLlxuICpcbiAqIEBwYXJhbSBzaGFkZXIge1BJWEkuU2hhZGVyfSB0aGUgc2hhZGVyIHRvIHVwbG9hZFxuICovXG5TaGFkZXJNYW5hZ2VyLnByb3RvdHlwZS5zZXRTaGFkZXIgPSBmdW5jdGlvbiAoc2hhZGVyKVxue1xuICAgIHJldHVybjtcbiAgICBpZiAodGhpcy5fY3VycmVudElkID09PSBzaGFkZXIudWlkKVxuICAgIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHRoaXMuX2N1cnJlbnRJZCA9IHNoYWRlci51aWQ7XG5cbiAgICB0aGlzLmN1cnJlbnRTaGFkZXIgPSBzaGFkZXI7XG5cbiAgICB0aGlzLnJlbmRlcmVyLmdsLnVzZVByb2dyYW0oc2hhZGVyLnByb2dyYW0pO1xuICAgIHRoaXMuc2V0QXR0cmlicyhzaGFkZXIuYXR0cmlidXRlcyk7XG5cbiAgICByZXR1cm4gdHJ1ZTtcbn07XG5cbi8qKlxuICogRGVzdHJveXMgdGhpcyBvYmplY3QuXG4gKlxuICovXG5TaGFkZXJNYW5hZ2VyLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLnByaW1pdGl2ZVNoYWRlci5kZXN0cm95KCk7XG4gICAgdGhpcy5jb21wbGV4UHJpbWl0aXZlU2hhZGVyLmRlc3Ryb3koKTtcbiAgICBXZWJHTE1hbmFnZXIucHJvdG90eXBlLmRlc3Ryb3kuY2FsbCh0aGlzKTtcblxuICAgIHRoaXMuZGVzdHJveVBsdWdpbnMoKTtcblxuICAgIHRoaXMuYXR0cmliU3RhdGUgPSBudWxsO1xuXG4gICAgdGhpcy50ZW1wQXR0cmliU3RhdGUgPSBudWxsO1xufTtcbiIsInZhciBXZWJHTE1hbmFnZXIgPSByZXF1aXJlKCcuL1dlYkdMTWFuYWdlcicpLFxuICAgIHV0aWxzID0gcmVxdWlyZSgnLi4vLi4vLi4vdXRpbHMnKTtcblxuLyoqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcn0gVGhlIHJlbmRlcmVyIHRoaXMgbWFuYWdlciB3b3JrcyBmb3IuXG4gKi9cbmZ1bmN0aW9uIFdlYkdMTWFza01hbmFnZXIocmVuZGVyZXIpXG57XG4gICAgV2ViR0xNYW5hZ2VyLmNhbGwodGhpcywgcmVuZGVyZXIpO1xuICAgIHRoaXMuc3RlbmNpbE1hc2tTdGFjayA9IG51bGw7XG59XG5cbldlYkdMTWFza01hbmFnZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShXZWJHTE1hbmFnZXIucHJvdG90eXBlKTtcbldlYkdMTWFza01hbmFnZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gV2ViR0xNYXNrTWFuYWdlcjtcbm1vZHVsZS5leHBvcnRzID0gV2ViR0xNYXNrTWFuYWdlcjtcblxuLyoqXG4gKiBDaGFuZ2VzIHRoZSBtYXNrIHN0YWNrIHRoYXQgaXMgdXNlZCBieSB0aGlzIG1hbmFnZXIuXG4gKlxuICogQHBhcmFtIHN0ZW5jaWxNYXNrU3RhY2sge1BJWEkuU3RlbmNpbE1hc2tTdGFja30gVGhlIG1hc2sgc3RhY2tcbiAqL1xuV2ViR0xNYXNrTWFuYWdlci5wcm90b3R5cGUuc2V0TWFza1N0YWNrID0gZnVuY3Rpb24gKCBzdGVuY2lsTWFza1N0YWNrIClcbntcbiAgICB0aGlzLnN0ZW5jaWxNYXNrU3RhY2sgPSBzdGVuY2lsTWFza1N0YWNrO1xuXG4gICAgdmFyIGdsID0gdGhpcy5yZW5kZXJlci5nbDtcblxuICAgIGlmIChzdGVuY2lsTWFza1N0YWNrLnN0ZW5jaWxTdGFjay5sZW5ndGggPT09IDApXG4gICAge1xuICAgICAgICBnbC5kaXNhYmxlKGdsLlNURU5DSUxfVEVTVCk7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIGdsLmVuYWJsZShnbC5TVEVOQ0lMX1RFU1QpO1xuICAgIH1cbn07XG5cbi8qKlxuICogQXBwbGllcyB0aGUgTWFzayBhbmQgYWRkcyBpdCB0byB0aGUgY3VycmVudCBmaWx0ZXIgc3RhY2suIEBhbHZpblxuICpcbiAqIEBwYXJhbSBncmFwaGljcyB7UElYSS5HcmFwaGljc31cbiAqIEBwYXJhbSB3ZWJHTERhdGEge2FueVtdfVxuICovXG5XZWJHTE1hc2tNYW5hZ2VyLnByb3RvdHlwZS5wdXNoU3RlbmNpbCA9IGZ1bmN0aW9uIChncmFwaGljcywgd2ViR0xEYXRhKVxue1xuICAgIHRoaXMucmVuZGVyZXIuX2FjdGl2ZVJlbmRlclRhcmdldC5hdHRhY2hTdGVuY2lsQnVmZmVyKCk7XG5cbiAgICB2YXIgZ2wgPSB0aGlzLnJlbmRlcmVyLmdsLFxuICAgICAgICBzbXMgPSB0aGlzLnN0ZW5jaWxNYXNrU3RhY2s7XG5cbiAgICB0aGlzLmJpbmRHcmFwaGljcyhncmFwaGljcywgd2ViR0xEYXRhKTtcblxuICAgIGlmIChzbXMuc3RlbmNpbFN0YWNrLmxlbmd0aCA9PT0gMClcbiAgICB7XG4gICAgICAgIGdsLmVuYWJsZShnbC5TVEVOQ0lMX1RFU1QpO1xuICAgICAgICBnbC5jbGVhcihnbC5TVEVOQ0lMX0JVRkZFUl9CSVQpO1xuICAgICAgICBzbXMucmV2ZXJzZSA9IHRydWU7XG4gICAgICAgIHNtcy5jb3VudCA9IDA7XG4gICAgfVxuXG4gICAgc21zLnN0ZW5jaWxTdGFjay5wdXNoKHdlYkdMRGF0YSk7XG5cbiAgICB2YXIgbGV2ZWwgPSBzbXMuY291bnQ7XG5cbiAgICBnbC5jb2xvck1hc2soZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UpO1xuXG4gICAgZ2wuc3RlbmNpbEZ1bmMoZ2wuQUxXQVlTLDAsMHhGRik7XG4gICAgZ2wuc3RlbmNpbE9wKGdsLktFRVAsZ2wuS0VFUCxnbC5JTlZFUlQpO1xuXG4gICAgLy8gZHJhdyB0aGUgdHJpYW5nbGUgc3RyaXAhXG5cbiAgICBpZiAod2ViR0xEYXRhLm1vZGUgPT09IDEpXG4gICAge1xuICAgICAgICBnbC5kcmF3RWxlbWVudHMoZ2wuVFJJQU5HTEVfRkFOLCAgd2ViR0xEYXRhLmluZGljZXMubGVuZ3RoIC0gNCwgZ2wuVU5TSUdORURfU0hPUlQsIDAgKTtcblxuICAgICAgICBpZiAoc21zLnJldmVyc2UpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGdsLnN0ZW5jaWxGdW5jKGdsLkVRVUFMLCAweEZGIC0gbGV2ZWwsIDB4RkYpO1xuICAgICAgICAgICAgZ2wuc3RlbmNpbE9wKGdsLktFRVAsZ2wuS0VFUCxnbC5ERUNSKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgIHtcbiAgICAgICAgICAgIGdsLnN0ZW5jaWxGdW5jKGdsLkVRVUFMLGxldmVsLCAweEZGKTtcbiAgICAgICAgICAgIGdsLnN0ZW5jaWxPcChnbC5LRUVQLGdsLktFRVAsZ2wuSU5DUik7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBkcmF3IGEgcXVhZCB0byBpbmNyZW1lbnQuLlxuICAgICAgICBnbC5kcmF3RWxlbWVudHMoZ2wuVFJJQU5HTEVfRkFOLCA0LCBnbC5VTlNJR05FRF9TSE9SVCwgKCB3ZWJHTERhdGEuaW5kaWNlcy5sZW5ndGggLSA0ICkgKiAyICk7XG5cbiAgICAgICAgaWYgKHNtcy5yZXZlcnNlKVxuICAgICAgICB7XG4gICAgICAgICAgICBnbC5zdGVuY2lsRnVuYyhnbC5FUVVBTCwweEZGLShsZXZlbCsxKSwgMHhGRik7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgICBnbC5zdGVuY2lsRnVuYyhnbC5FUVVBTCxsZXZlbCsxLCAweEZGKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHNtcy5yZXZlcnNlID0gIXNtcy5yZXZlcnNlO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICBpZiAoIXNtcy5yZXZlcnNlKVxuICAgICAgICB7XG4gICAgICAgICAgICBnbC5zdGVuY2lsRnVuYyhnbC5FUVVBTCwgMHhGRiAtIGxldmVsLCAweEZGKTtcbiAgICAgICAgICAgIGdsLnN0ZW5jaWxPcChnbC5LRUVQLGdsLktFRVAsZ2wuREVDUik7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgICBnbC5zdGVuY2lsRnVuYyhnbC5FUVVBTCxsZXZlbCwgMHhGRik7XG4gICAgICAgICAgICBnbC5zdGVuY2lsT3AoZ2wuS0VFUCxnbC5LRUVQLGdsLklOQ1IpO1xuICAgICAgICB9XG5cbiAgICAgICAgZ2wuZHJhd0VsZW1lbnRzKGdsLlRSSUFOR0xFX1NUUklQLCAgd2ViR0xEYXRhLmluZGljZXMubGVuZ3RoLCBnbC5VTlNJR05FRF9TSE9SVCwgMCApO1xuXG4gICAgICAgIGlmICghc21zLnJldmVyc2UpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGdsLnN0ZW5jaWxGdW5jKGdsLkVRVUFMLDB4RkYtKGxldmVsKzEpLCAweEZGKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgIHtcbiAgICAgICAgICAgIGdsLnN0ZW5jaWxGdW5jKGdsLkVRVUFMLGxldmVsKzEsIDB4RkYpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZ2wuY29sb3JNYXNrKHRydWUsIHRydWUsIHRydWUsIHRydWUpO1xuICAgIGdsLnN0ZW5jaWxPcChnbC5LRUVQLGdsLktFRVAsZ2wuS0VFUCk7XG5cbiAgICBzbXMuY291bnQrKztcbn07XG5cbi8qKlxuICogVE9ETyB0aGlzIGRvZXMgbm90IGJlbG9uZyBoZXJlIVxuICpcbiAqIEBwYXJhbSBncmFwaGljcyB7UElYSS5HcmFwaGljc31cbiAqIEBwYXJhbSB3ZWJHTERhdGEge2FueVtdfVxuICovXG5XZWJHTE1hc2tNYW5hZ2VyLnByb3RvdHlwZS5iaW5kR3JhcGhpY3MgPSBmdW5jdGlvbiAoZ3JhcGhpY3MsIHdlYkdMRGF0YSlcbntcbiAgICAvL2lmICh0aGlzLl9jdXJyZW50R3JhcGhpY3MgPT09IGdyYXBoaWNzKXJldHVybjtcbiAgICB2YXIgZ2wgPSB0aGlzLnJlbmRlcmVyLmdsO1xuXG4gICAgIC8vIGJpbmQgdGhlIGdyYXBoaWNzIG9iamVjdC4uXG4gICAgdmFyIHNoYWRlciA9IHRoaXMucmVuZGVyZXIucGx1Z2lucy5ncmFwaGljcy5wcmltaXRpdmVTaGFkZXI7XG5cbiAgICBpZiAod2ViR0xEYXRhLm1vZGUgPT09IDEpXG4gICAge1xuICAgICAgICAvKlxuICAgICAgICBzaGFkZXIgPSB0aGlzLnJlbmRlcmVyLnNoYWRlck1hbmFnZXIuY29tcGxleFByaW1pdGl2ZVNoYWRlcjtcblxuICAgICAgICB0aGlzLnJlbmRlcmVyLnNoYWRlck1hbmFnZXIuc2V0U2hhZGVyKHNoYWRlcik7XG5cbiAgICAgICAgZ2wudW5pZm9ybU1hdHJpeDNmdihzaGFkZXIudW5pZm9ybXMudHJhbnNsYXRpb25NYXRyaXguX2xvY2F0aW9uLCBmYWxzZSwgZ3JhcGhpY3Mud29ybGRUcmFuc2Zvcm0udG9BcnJheSh0cnVlKSk7XG5cbiAgICAgICAgZ2wudW5pZm9ybU1hdHJpeDNmdihzaGFkZXIudW5pZm9ybXMucHJvamVjdGlvbk1hdHJpeC5fbG9jYXRpb24sIGZhbHNlLCB0aGlzLnJlbmRlcmVyLmN1cnJlbnRSZW5kZXJUYXJnZXQucHJvamVjdGlvbk1hdHJpeC50b0FycmF5KHRydWUpKTtcblxuICAgICAgICBnbC51bmlmb3JtM2Z2KHNoYWRlci51bmlmb3Jtcy50aW50Ll9sb2NhdGlvbiwgdXRpbHMuaGV4MnJnYihncmFwaGljcy50aW50KSk7XG5cbiAgICAgICAgZ2wudW5pZm9ybTNmdihzaGFkZXIudW5pZm9ybXMuY29sb3IuX2xvY2F0aW9uLCB3ZWJHTERhdGEuY29sb3IpO1xuXG4gICAgICAgIGdsLnVuaWZvcm0xZihzaGFkZXIudW5pZm9ybXMuYWxwaGEuX2xvY2F0aW9uLCBncmFwaGljcy53b3JsZEFscGhhKTtcblxuICAgICAgICBnbC5iaW5kQnVmZmVyKGdsLkFSUkFZX0JVRkZFUiwgd2ViR0xEYXRhLmJ1ZmZlcik7XG5cbiAgICAgICAgZ2wudmVydGV4QXR0cmliUG9pbnRlcihzaGFkZXIuYXR0cmlidXRlcy5hVmVydGV4UG9zaXRpb24sIDIsIGdsLkZMT0FULCBmYWxzZSwgNCAqIDIsIDApO1xuXG4gICAgICAgIC8vIG5vdyBkbyB0aGUgcmVzdC4uXG4gICAgICAgIC8vIHNldCB0aGUgaW5kZXggYnVmZmVyIVxuICAgICAgICBnbC5iaW5kQnVmZmVyKGdsLkVMRU1FTlRfQVJSQVlfQlVGRkVSLCB3ZWJHTERhdGEuaW5kZXhCdWZmZXIpO1xuICAgICovXG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIC8vdGhpcy5yZW5kZXJlci5zaGFkZXJNYW5hZ2VyLmFjdGl2YXRlUHJpbWl0aXZlU2hhZGVyKCk7XG4vLyAgICAgICAgc2hhZGVyID0gdGhpcy5yZW5kZXJlci5zaGFkZXJNYW5hZ2VyLnByaW1pdGl2ZVNoYWRlcjtcbiAgICAgICBcbiAgICAgICAgdGhpcy5yZW5kZXJlci5iaW5kU2hhZGVyKHNoYWRlcilcblxuICAgICAgICBzaGFkZXIudW5pZm9ybXMudHJhbnNsYXRpb25NYXRyaXggPSBncmFwaGljcy53b3JsZFRyYW5zZm9ybS50b0FycmF5KHRydWUpO1xuICAgICAgICBzaGFkZXIudW5pZm9ybXMudGludCA9IHV0aWxzLmhleDJyZ2IoZ3JhcGhpY3MudGludCk7XG4gICAgICAgIHNoYWRlci51bmlmb3Jtcy5hbHBoYSA9IGdyYXBoaWNzLndvcmxkQWxwaGE7XG5cblxuICAgICAgICBnbC5iaW5kQnVmZmVyKGdsLkFSUkFZX0JVRkZFUiwgd2ViR0xEYXRhLmJ1ZmZlcik7XG5cblxuICAgICAgICBzaGFkZXIuYXR0cmlidXRlcy5hVmVydGV4UG9zaXRpb24ucG9pbnRlcihnbC5GTE9BVCwgZmFsc2UsIDQgKiA2LCAwKTtcbiAgICAgICAgc2hhZGVyLmF0dHJpYnV0ZXMuYUNvbG9yLnBvaW50ZXIoZ2wuRkxPQVQsIGZhbHNlLCA0ICogNiwgMiAqIDQpO1xuXG4gICAgICAgIGdsLmVuYWJsZVZlcnRleEF0dHJpYkFycmF5KHNoYWRlci5hdHRyaWJ1dGVzLmFWZXJ0ZXhQb3NpdGlvbi5sb2NhdGlvbik7XG4gICAgICAgIGdsLmVuYWJsZVZlcnRleEF0dHJpYkFycmF5KHNoYWRlci5hdHRyaWJ1dGVzLmFDb2xvci5sb2NhdGlvbik7XG5cbiAgICAgICAgLy8gc2V0IHRoZSBpbmRleCBidWZmZXIhXG4gICAgICAgIGdsLmJpbmRCdWZmZXIoZ2wuRUxFTUVOVF9BUlJBWV9CVUZGRVIsIHdlYkdMRGF0YS5pbmRleEJ1ZmZlcik7XG4vLyAgICAgICAgZ2wuZHJhd0VsZW1lbnRzKGdsLlRSSUFOR0xFX1NUUklQLCAgd2ViR0xEYXRhLmluZGljZXMubGVuZ3RoLCBnbC5VTlNJR05FRF9TSE9SVCwgMCApO1xuXG5cbiAgICAgIC8qICB0aGlzLnJlbmRlcmVyLnNoYWRlck1hbmFnZXIuc2V0U2hhZGVyKHNoYWRlcik7XG5cbiAgICAgICAgZ2wudW5pZm9ybU1hdHJpeDNmdihzaGFkZXIudW5pZm9ybXMudHJhbnNsYXRpb25NYXRyaXguX2xvY2F0aW9uLCBmYWxzZSwgZ3JhcGhpY3Mud29ybGRUcmFuc2Zvcm0udG9BcnJheSh0cnVlKSk7XG5cbiAgICAgICAgZ2wudW5pZm9ybU1hdHJpeDNmdihzaGFkZXIudW5pZm9ybXMucHJvamVjdGlvbk1hdHJpeC5fbG9jYXRpb24sIGZhbHNlLCB0aGlzLnJlbmRlcmVyLmN1cnJlbnRSZW5kZXJUYXJnZXQucHJvamVjdGlvbk1hdHJpeC50b0FycmF5KHRydWUpKTtcblxuICAgICAgICBnbC51bmlmb3JtM2Z2KHNoYWRlci51bmlmb3Jtcy50aW50Ll9sb2NhdGlvbiwgdXRpbHMuaGV4MnJnYihncmFwaGljcy50aW50KSk7XG5cbiAgICAgICAgZ2wudW5pZm9ybTFmKHNoYWRlci51bmlmb3Jtcy5hbHBoYS5fbG9jYXRpb24sIGdyYXBoaWNzLndvcmxkQWxwaGEpO1xuXG4gICAgICAgIGdsLmJpbmRCdWZmZXIoZ2wuQVJSQVlfQlVGRkVSLCB3ZWJHTERhdGEuYnVmZmVyKTtcblxuICAgICAgICBnbC52ZXJ0ZXhBdHRyaWJQb2ludGVyKHNoYWRlci5hdHRyaWJ1dGVzLmFWZXJ0ZXhQb3NpdGlvbiwgMiwgZ2wuRkxPQVQsIGZhbHNlLCA0ICogNiwgMCk7XG4gICAgICAgIGdsLnZlcnRleEF0dHJpYlBvaW50ZXIoc2hhZGVyLmF0dHJpYnV0ZXMuYUNvbG9yLCA0LCBnbC5GTE9BVCwgZmFsc2UsNCAqIDYsIDIgKiA0KTtcblxuICAgICAgICAvLyBzZXQgdGhlIGluZGV4IGJ1ZmZlciFcbiAgICAgICAgZ2wuYmluZEJ1ZmZlcihnbC5FTEVNRU5UX0FSUkFZX0JVRkZFUiwgd2ViR0xEYXRhLmluZGV4QnVmZmVyKTsqL1xuICAgIH1cbn07XG5cbi8qKlxuICogVE9ETyBAYWx2aW5cbiAqIEBwYXJhbSBncmFwaGljcyB7UElYSS5HcmFwaGljc31cbiAqIEBwYXJhbSB3ZWJHTERhdGEge2FueVtdfVxuICovXG5XZWJHTE1hc2tNYW5hZ2VyLnByb3RvdHlwZS5wb3BTdGVuY2lsID0gZnVuY3Rpb24gKGdyYXBoaWNzLCB3ZWJHTERhdGEpXG57XG4gICAgdmFyIGdsID0gdGhpcy5yZW5kZXJlci5nbCxcbiAgICAgICAgc21zID0gdGhpcy5zdGVuY2lsTWFza1N0YWNrO1xuXG4gICAgc21zLnN0ZW5jaWxTdGFjay5wb3AoKTtcblxuICAgIHNtcy5jb3VudC0tO1xuXG4gICAgaWYgKHNtcy5zdGVuY2lsU3RhY2subGVuZ3RoID09PSAwKVxuICAgIHtcbiAgICAgICAgLy8gdGhlIHN0YWNrIGlzIGVtcHR5IVxuICAgICAgICBnbC5kaXNhYmxlKGdsLlNURU5DSUxfVEVTVCk7XG5cbiAgICB9XG4gICAgZWxzZVxuICAgIHtcblxuICAgICAgICB2YXIgbGV2ZWwgPSBzbXMuY291bnQ7XG5cbiAgICAgICAgdGhpcy5iaW5kR3JhcGhpY3MoZ3JhcGhpY3MsIHdlYkdMRGF0YSk7XG5cbiAgICAgICAgZ2wuY29sb3JNYXNrKGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlKTtcblxuICAgICAgICBpZiAod2ViR0xEYXRhLm1vZGUgPT09IDEpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHNtcy5yZXZlcnNlID0gIXNtcy5yZXZlcnNlO1xuXG4gICAgICAgICAgICBpZiAoc21zLnJldmVyc2UpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgZ2wuc3RlbmNpbEZ1bmMoZ2wuRVFVQUwsIDB4RkYgLSAobGV2ZWwrMSksIDB4RkYpO1xuICAgICAgICAgICAgICAgIGdsLnN0ZW5jaWxPcChnbC5LRUVQLGdsLktFRVAsZ2wuSU5DUik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgZ2wuc3RlbmNpbEZ1bmMoZ2wuRVFVQUwsbGV2ZWwrMSwgMHhGRik7XG4gICAgICAgICAgICAgICAgZ2wuc3RlbmNpbE9wKGdsLktFRVAsZ2wuS0VFUCxnbC5ERUNSKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gZHJhdyBhIHF1YWQgdG8gaW5jcmVtZW50Li5cbiAgICAgICAgICAgIGdsLmRyYXdFbGVtZW50cyhnbC5UUklBTkdMRV9GQU4sIDQsIGdsLlVOU0lHTkVEX1NIT1JULCAoIHdlYkdMRGF0YS5pbmRpY2VzLmxlbmd0aCAtIDQgKSAqIDIgKTtcblxuICAgICAgICAgICAgZ2wuc3RlbmNpbEZ1bmMoZ2wuQUxXQVlTLDAsMHhGRik7XG4gICAgICAgICAgICBnbC5zdGVuY2lsT3AoZ2wuS0VFUCxnbC5LRUVQLGdsLklOVkVSVCk7XG5cbiAgICAgICAgICAgIC8vIGRyYXcgdGhlIHRyaWFuZ2xlIHN0cmlwIVxuICAgICAgICAgICAgZ2wuZHJhd0VsZW1lbnRzKGdsLlRSSUFOR0xFX0ZBTiwgIHdlYkdMRGF0YS5pbmRpY2VzLmxlbmd0aCAtIDQsIGdsLlVOU0lHTkVEX1NIT1JULCAwICk7XG5cbiAgICAgICAgICAgIHRoaXMucmVuZGVyZXIuZHJhd0NvdW50ICs9IDI7XG5cbiAgICAgICAgICAgIGlmICghc21zLnJldmVyc2UpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgZ2wuc3RlbmNpbEZ1bmMoZ2wuRVFVQUwsMHhGRi0obGV2ZWwpLCAweEZGKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBnbC5zdGVuY2lsRnVuYyhnbC5FUVVBTCxsZXZlbCwgMHhGRik7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgIHtcbiAgICAgICAgICAvLyAgY29uc29sZS5sb2coXCI8PD4+XCIpXG4gICAgICAgICAgICBpZiAoIXNtcy5yZXZlcnNlKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGdsLnN0ZW5jaWxGdW5jKGdsLkVRVUFMLCAweEZGIC0gKGxldmVsKzEpLCAweEZGKTtcbiAgICAgICAgICAgICAgICBnbC5zdGVuY2lsT3AoZ2wuS0VFUCxnbC5LRUVQLGdsLklOQ1IpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGdsLnN0ZW5jaWxGdW5jKGdsLkVRVUFMLGxldmVsKzEsIDB4RkYpO1xuICAgICAgICAgICAgICAgIGdsLnN0ZW5jaWxPcChnbC5LRUVQLGdsLktFRVAsZ2wuREVDUik7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGdsLmRyYXdFbGVtZW50cyhnbC5UUklBTkdMRV9TVFJJUCwgIHdlYkdMRGF0YS5pbmRpY2VzLmxlbmd0aCwgZ2wuVU5TSUdORURfU0hPUlQsIDAgKTtcblxuICAgICAgICAgICAgdGhpcy5yZW5kZXJlci5kcmF3Q291bnQrKztcblxuICAgICAgICAgICAgaWYgKCFzbXMucmV2ZXJzZSlcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBnbC5zdGVuY2lsRnVuYyhnbC5FUVVBTCwweEZGLShsZXZlbCksIDB4RkYpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGdsLnN0ZW5jaWxGdW5jKGdsLkVRVUFMLGxldmVsLCAweEZGKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGdsLmNvbG9yTWFzayh0cnVlLCB0cnVlLCB0cnVlLCB0cnVlKTtcbiAgICAgICAgZ2wuc3RlbmNpbE9wKGdsLktFRVAsZ2wuS0VFUCxnbC5LRUVQKTtcblxuXG4gICAgfVxufTtcblxuLyoqXG4gKiBEZXN0cm95cyB0aGUgbWFzayBzdGFjay5cbiAqXG4gKi9cbldlYkdMTWFza01hbmFnZXIucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoKVxue1xuICAgIFdlYkdMTWFuYWdlci5wcm90b3R5cGUuZGVzdHJveS5jYWxsKHRoaXMpO1xuXG4gICAgdGhpcy5zdGVuY2lsTWFza1N0YWNrLnN0ZW5jaWxTdGFjayA9IG51bGw7XG59O1xuXG4vKipcbiAqIEFwcGxpZXMgdGhlIE1hc2sgYW5kIGFkZHMgaXQgdG8gdGhlIGN1cnJlbnQgZmlsdGVyIHN0YWNrLlxuICpcbiAqIEBwYXJhbSBtYXNrRGF0YSB7YW55W119IFRoZSBtYXNrIGRhdGEgc3RydWN0dXJlIHRvIHVzZVxuICovXG5XZWJHTE1hc2tNYW5hZ2VyLnByb3RvdHlwZS5wdXNoTWFzayA9IGZ1bmN0aW9uIChtYXNrRGF0YSlcbntcbiAgICB0aGlzLnJlbmRlcmVyLnNldE9iamVjdFJlbmRlcmVyKHRoaXMucmVuZGVyZXIucGx1Z2lucy5ncmFwaGljcyk7XG4gICAgXG4gICAgLy9UT0RPIEZJWFxuICAgIGlmIChtYXNrRGF0YS5kaXJ0eSlcbiAgICB7XG4gICAgICAgIHRoaXMucmVuZGVyZXIucGx1Z2lucy5ncmFwaGljcy51cGRhdGVHcmFwaGljcyhtYXNrRGF0YSwgdGhpcy5yZW5kZXJlci5nbCk7XG4gICAgfVxuXG4gICAgaWYgKCFtYXNrRGF0YS5fd2ViR0xbdGhpcy5yZW5kZXJlci5nbC5pZF0uZGF0YS5sZW5ndGgpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5wdXNoU3RlbmNpbChtYXNrRGF0YSwgbWFza0RhdGEuX3dlYkdMW3RoaXMucmVuZGVyZXIuZ2wuaWRdLmRhdGFbMF0pO1xufTtcblxuLyoqXG4gKiBSZW1vdmVzIHRoZSBsYXN0IGZpbHRlciBmcm9tIHRoZSBmaWx0ZXIgc3RhY2sgYW5kIGRvZXNuJ3QgcmV0dXJuIGl0LlxuICpcbiAqIEBwYXJhbSBtYXNrRGF0YSB7YW55W119XG4gKi9cbldlYkdMTWFza01hbmFnZXIucHJvdG90eXBlLnBvcE1hc2sgPSBmdW5jdGlvbiAobWFza0RhdGEpXG57XG4gICAgdGhpcy5yZW5kZXJlci5zZXRPYmplY3RSZW5kZXJlcih0aGlzLnJlbmRlcmVyLnBsdWdpbnMuZ3JhcGhpY3MpO1xuXG4gICAgdGhpcy5wb3BTdGVuY2lsKG1hc2tEYXRhLCBtYXNrRGF0YS5fd2ViR0xbdGhpcy5yZW5kZXJlci5nbC5pZF0uZGF0YVswXSk7XG59O1xuXG4iLCIvKipcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5XZWJHTFJlbmRlcmVyfSBUaGUgcmVuZGVyZXIgdGhpcyBtYW5hZ2VyIHdvcmtzIGZvci5cbiAqL1xuZnVuY3Rpb24gV2ViR0xNYW5hZ2VyKHJlbmRlcmVyKVxue1xuICAgIC8qKlxuICAgICAqIFRoZSByZW5kZXJlciB0aGlzIG1hbmFnZXIgd29ya3MgZm9yLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5XZWJHTFJlbmRlcmVyfVxuICAgICAqL1xuICAgIHRoaXMucmVuZGVyZXIgPSByZW5kZXJlcjtcblxuICAgIHRoaXMucmVuZGVyZXIub24oJ2NvbnRleHQnLCB0aGlzLm9uQ29udGV4dENoYW5nZSwgdGhpcyk7XG59XG5cbldlYkdMTWFuYWdlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBXZWJHTE1hbmFnZXI7XG5tb2R1bGUuZXhwb3J0cyA9IFdlYkdMTWFuYWdlcjtcblxuLyoqXG4gKiBHZW5lcmljIG1ldGhvZCBjYWxsZWQgd2hlbiB0aGVyZSBpcyBhIFdlYkdMIGNvbnRleHQgY2hhbmdlLlxuICpcbiAqL1xuV2ViR0xNYW5hZ2VyLnByb3RvdHlwZS5vbkNvbnRleHRDaGFuZ2UgPSBmdW5jdGlvbiAoKVxue1xuXHQvLyBkbyBzb21lIGNvZGVzIGluaXQhXG59O1xuXG4vKipcbiAqIEdlbmVyaWMgZGVzdHJveSBtZXRob2RzIHRvIGJlIG92ZXJyaWRkZW4gYnkgdGhlIHN1YmNsYXNzXG4gKlxuICovXG5XZWJHTE1hbmFnZXIucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoKVxue1xuICAgIHRoaXMucmVuZGVyZXIub2ZmKCdjb250ZXh0JywgdGhpcy5vbkNvbnRleHRDaGFuZ2UsIHRoaXMpO1xuXG4gICAgdGhpcy5yZW5kZXJlciA9IG51bGw7XG59O1xuIiwidmFyIFNoYWRlciA9IHJlcXVpcmUoJy4vU2hhZGVyJyk7XG5cbi8qKlxuICogVGhpcyBzaGFkZXIgaXMgdXNlZCB0byBkcmF3IGNvbXBsZXggcHJpbWl0aXZlIHNoYXBlcyBmb3Ige0BsaW5rIFBJWEkuR3JhcGhpY3N9LlxuICpcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqIEBleHRlbmRzIFBJWEkuU2hhZGVyXG4gKiBAcGFyYW0gc2hhZGVyTWFuYWdlciB7UElYSS5TaGFkZXJNYW5hZ2VyfSBUaGUgd2ViZ2wgc2hhZGVyIG1hbmFnZXIgdGhpcyBzaGFkZXIgd29ya3MgZm9yLlxuICovXG5mdW5jdGlvbiBDb21wbGV4UHJpbWl0aXZlU2hhZGVyKHNoYWRlck1hbmFnZXIpXG57XG4gICAgU2hhZGVyLmNhbGwodGhpcyxcbiAgICAgICAgc2hhZGVyTWFuYWdlcixcbiAgICAgICAgLy8gdmVydGV4IHNoYWRlclxuICAgICAgICBbXG4gICAgICAgICAgICAnYXR0cmlidXRlIHZlYzIgYVZlcnRleFBvc2l0aW9uOycsXG5cbiAgICAgICAgICAgICd1bmlmb3JtIG1hdDMgdHJhbnNsYXRpb25NYXRyaXg7JyxcbiAgICAgICAgICAgICd1bmlmb3JtIG1hdDMgcHJvamVjdGlvbk1hdHJpeDsnLFxuXG4gICAgICAgICAgICAndW5pZm9ybSB2ZWMzIHRpbnQ7JyxcbiAgICAgICAgICAgICd1bmlmb3JtIGZsb2F0IGFscGhhOycsXG4gICAgICAgICAgICAndW5pZm9ybSB2ZWMzIGNvbG9yOycsXG5cbiAgICAgICAgICAgICd2YXJ5aW5nIHZlYzQgdkNvbG9yOycsXG5cbiAgICAgICAgICAgICd2b2lkIG1haW4odm9pZCl7JyxcbiAgICAgICAgICAgICcgICBnbF9Qb3NpdGlvbiA9IHZlYzQoKHByb2plY3Rpb25NYXRyaXggKiB0cmFuc2xhdGlvbk1hdHJpeCAqIHZlYzMoYVZlcnRleFBvc2l0aW9uLCAxLjApKS54eSwgMC4wLCAxLjApOycsXG4gICAgICAgICAgICAnICAgdkNvbG9yID0gdmVjNChjb2xvciAqIGFscGhhICogdGludCwgYWxwaGEpOycsLy9cIiAqIHZlYzQodGludCAqIGFscGhhLCBhbHBoYSk7JyxcbiAgICAgICAgICAgICd9J1xuICAgICAgICBdLmpvaW4oJ1xcbicpLFxuICAgICAgICAvLyBmcmFnbWVudCBzaGFkZXJcbiAgICAgICAgW1xuICAgICAgICAgICAgJ3ByZWNpc2lvbiBtZWRpdW1wIGZsb2F0OycsXG5cbiAgICAgICAgICAgICd2YXJ5aW5nIHZlYzQgdkNvbG9yOycsXG5cbiAgICAgICAgICAgICd2b2lkIG1haW4odm9pZCl7JyxcbiAgICAgICAgICAgICcgICBnbF9GcmFnQ29sb3IgPSB2Q29sb3I7JyxcbiAgICAgICAgICAgICd9J1xuICAgICAgICBdLmpvaW4oJ1xcbicpLFxuICAgICAgICAvLyBjdXN0b20gdW5pZm9ybXNcbiAgICAgICAge1xuICAgICAgICAgICAgdGludDogICB7IHR5cGU6ICczZicsIHZhbHVlOiBbMCwgMCwgMF0gfSxcbiAgICAgICAgICAgIGFscGhhOiAgeyB0eXBlOiAnMWYnLCB2YWx1ZTogMCB9LFxuICAgICAgICAgICAgY29sb3I6ICB7IHR5cGU6ICczZicsIHZhbHVlOiBbMCwwLDBdIH0sXG4gICAgICAgICAgICB0cmFuc2xhdGlvbk1hdHJpeDogeyB0eXBlOiAnbWF0MycsIHZhbHVlOiBuZXcgRmxvYXQzMkFycmF5KDkpIH0sXG4gICAgICAgICAgICBwcm9qZWN0aW9uTWF0cml4OiB7IHR5cGU6ICdtYXQzJywgdmFsdWU6IG5ldyBGbG9hdDMyQXJyYXkoOSkgfVxuICAgICAgICB9LFxuICAgICAgICAvLyBhdHRyaWJ1dGVzXG4gICAgICAgIHtcbiAgICAgICAgICAgIGFWZXJ0ZXhQb3NpdGlvbjowXG4gICAgICAgIH1cbiAgICApO1xufVxuXG5Db21wbGV4UHJpbWl0aXZlU2hhZGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoU2hhZGVyLnByb3RvdHlwZSk7XG5Db21wbGV4UHJpbWl0aXZlU2hhZGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IENvbXBsZXhQcmltaXRpdmVTaGFkZXI7XG5tb2R1bGUuZXhwb3J0cyA9IENvbXBsZXhQcmltaXRpdmVTaGFkZXI7XG4iLCJ2YXIgU2hhZGVyID0gcmVxdWlyZSgnLi9TaGFkZXInKTtcblxuLyoqXG4gKiBUaGlzIHNoYWRlciBpcyB1c2VkIHRvIGRyYXcgc2ltcGxlIHByaW1pdGl2ZSBzaGFwZXMgZm9yIHtAbGluayBQSVhJLkdyYXBoaWNzfS5cbiAqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAZXh0ZW5kcyBQSVhJLlNoYWRlclxuICogQHBhcmFtIHNoYWRlck1hbmFnZXIge1NoYWRlck1hbmFnZXJ9IFRoZSB3ZWJnbCBzaGFkZXIgbWFuYWdlciB0aGlzIHNoYWRlciB3b3JrcyBmb3IuXG4gKi9cbmZ1bmN0aW9uIFByaW1pdGl2ZVNoYWRlcihzaGFkZXJNYW5hZ2VyKVxue1xuICAgIFNoYWRlci5jYWxsKHRoaXMsXG4gICAgICAgIHNoYWRlck1hbmFnZXIsXG4gICAgICAgIC8vIHZlcnRleCBzaGFkZXJcbiAgICAgICAgW1xuICAgICAgICAgICAgJ2F0dHJpYnV0ZSB2ZWMyIGFWZXJ0ZXhQb3NpdGlvbjsnLFxuICAgICAgICAgICAgJ2F0dHJpYnV0ZSB2ZWM0IGFDb2xvcjsnLFxuXG4gICAgICAgICAgICAndW5pZm9ybSBtYXQzIHRyYW5zbGF0aW9uTWF0cml4OycsXG4gICAgICAgICAgICAndW5pZm9ybSBtYXQzIHByb2plY3Rpb25NYXRyaXg7JyxcblxuICAgICAgICAgICAgJ3VuaWZvcm0gZmxvYXQgYWxwaGE7JyxcbiAgICAgICAgICAgICd1bmlmb3JtIGZsb2F0IGZsaXBZOycsXG4gICAgICAgICAgICAndW5pZm9ybSB2ZWMzIHRpbnQ7JyxcblxuICAgICAgICAgICAgJ3ZhcnlpbmcgdmVjNCB2Q29sb3I7JyxcblxuICAgICAgICAgICAgJ3ZvaWQgbWFpbih2b2lkKXsnLFxuICAgICAgICAgICAgJyAgIGdsX1Bvc2l0aW9uID0gdmVjNCgocHJvamVjdGlvbk1hdHJpeCAqIHRyYW5zbGF0aW9uTWF0cml4ICogdmVjMyhhVmVydGV4UG9zaXRpb24sIDEuMCkpLnh5LCAwLjAsIDEuMCk7JyxcbiAgICAgICAgICAgICcgICB2Q29sb3IgPSBhQ29sb3IgKiB2ZWM0KHRpbnQgKiBhbHBoYSwgYWxwaGEpOycsXG4gICAgICAgICAgICAnfSdcbiAgICAgICAgXS5qb2luKCdcXG4nKSxcbiAgICAgICAgLy8gZnJhZ21lbnQgc2hhZGVyXG4gICAgICAgIFtcbiAgICAgICAgICAgICdwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDsnLFxuXG4gICAgICAgICAgICAndmFyeWluZyB2ZWM0IHZDb2xvcjsnLFxuXG4gICAgICAgICAgICAndm9pZCBtYWluKHZvaWQpeycsXG4gICAgICAgICAgICAnICAgZ2xfRnJhZ0NvbG9yID0gdkNvbG9yOycsXG4gICAgICAgICAgICAnfSdcbiAgICAgICAgXS5qb2luKCdcXG4nKSxcbiAgICAgICAgLy8gY3VzdG9tIHVuaWZvcm1zXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRpbnQ6ICAgeyB0eXBlOiAnM2YnLCB2YWx1ZTogWzAsIDAsIDBdIH0sXG4gICAgICAgICAgICBhbHBoYTogIHsgdHlwZTogJzFmJywgdmFsdWU6IDAgfSxcbiAgICAgICAgICAgIHRyYW5zbGF0aW9uTWF0cml4OiB7IHR5cGU6ICdtYXQzJywgdmFsdWU6IG5ldyBGbG9hdDMyQXJyYXkoOSkgfSxcbiAgICAgICAgICAgIHByb2plY3Rpb25NYXRyaXg6IHsgdHlwZTogJ21hdDMnLCB2YWx1ZTogbmV3IEZsb2F0MzJBcnJheSg5KSB9XG4gICAgICAgIH0sXG4gICAgICAgIC8vIGN1c3RvbSBhdHRyaWJ1dGVzXG4gICAgICAgIHtcbiAgICAgICAgICAgIGFWZXJ0ZXhQb3NpdGlvbjowLFxuICAgICAgICAgICAgYUNvbG9yOjBcbiAgICAgICAgfVxuICAgICk7XG59XG5cblByaW1pdGl2ZVNoYWRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFNoYWRlci5wcm90b3R5cGUpO1xuUHJpbWl0aXZlU2hhZGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFByaW1pdGl2ZVNoYWRlcjtcbm1vZHVsZS5leHBvcnRzID0gUHJpbWl0aXZlU2hhZGVyO1xuIiwiLypnbG9iYWwgY29uc29sZSAqL1xudmFyIHV0aWxzID0gcmVxdWlyZSgnLi4vLi4vLi4vdXRpbHMnKTtcblxuLyoqXG4gKiBCYXNlIHNoYWRlciBjbGFzcyBmb3IgUElYSSBtYW5hZ2VkIHNoYWRlcnMuXG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIHNoYWRlck1hbmFnZXIge1BJWEkuU2hhZGVyTWFuYWdlcn0gVGhlIHdlYmdsIHNoYWRlciBtYW5hZ2VyIHRoaXMgc2hhZGVyIHdvcmtzIGZvci5cbiAqIEBwYXJhbSBbdmVydGV4U3JjXSB7c3RyaW5nfSBUaGUgc291cmNlIG9mIHRoZSB2ZXJ0ZXggc2hhZGVyLlxuICogQHBhcmFtIFtmcmFnbWVudFNyY10ge3N0cmluZ30gVGhlIHNvdXJjZSBvZiB0aGUgZnJhZ21lbnQgc2hhZGVyLlxuICogQHBhcmFtIFt1bmlmb3Jtc10ge29iamVjdH0gVW5pZm9ybXMgZm9yIHRoaXMgc2hhZGVyLlxuICogQHBhcmFtIFthdHRyaWJ1dGVzXSB7b2JqZWN0fSBBdHRyaWJ1dGVzIGZvciB0aGlzIHNoYWRlci5cbiAqL1xuZnVuY3Rpb24gU2hhZGVyKHNoYWRlck1hbmFnZXIsIHZlcnRleFNyYywgZnJhZ21lbnRTcmMsIHVuaWZvcm1zLCBhdHRyaWJ1dGVzKVxue1xuICAgIGlmICghdmVydGV4U3JjIHx8ICFmcmFnbWVudFNyYylcbiAgICB7XG4gICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1BpeGkuanMgRXJyb3IuIFNoYWRlciByZXF1aXJlcyB2ZXJ0ZXhTcmMgYW5kIGZyYWdtZW50U3JjJyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQSB1bmlxdWUgaWRcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQHJlYWRvbmx5XG4gICAgICovXG4gICAgdGhpcy51aWQgPSB1dGlscy51aWQoKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBjdXJyZW50IFdlYkdMIGRyYXdpbmcgY29udGV4dFxuICAgICAqIEBtZW1iZXIge1dlYkdMUmVuZGVyaW5nQ29udGV4dH1cbiAgICAgKiBAcmVhZG9ubHlcbiAgICAgKi9cbiAgICB0aGlzLmdsID0gc2hhZGVyTWFuYWdlci5yZW5kZXJlci5nbDtcblxuICAgIC8vVE9ETyBtYXliZSB3ZSBzaG91bGQgcGFzcyByZW5kZXJlciByYXRoZXIgdGhhbiBzaGFkZXIgbWFuZ2VyPz8gZm9vZCBmb3IgdGhvdWdodC4uXG4gICAgdGhpcy5zaGFkZXJNYW5hZ2VyID0gc2hhZGVyTWFuYWdlcjtcblxuICAgIC8qKlxuICAgICAqIFRoZSBXZWJHTCBwcm9ncmFtLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7V2ViR0xQcm9ncmFtfVxuICAgICAqIEByZWFkb25seVxuICAgICAqL1xuICAgIHRoaXMucHJvZ3JhbSA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgdW5pZm9ybXMgYXMgYW4gb2JqZWN0XG4gICAgICogQG1lbWJlciB7b2JqZWN0fVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy51bmlmb3JtcyA9IHVuaWZvcm1zIHx8IHt9O1xuXG4gICAgLyoqXG4gICAgICogVGhlIGF0dHJpYnV0ZXMgYXMgYW4gb2JqZWN0XG4gICAgICogQG1lbWJlciB7b2JqZWN0fVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5hdHRyaWJ1dGVzID0gYXR0cmlidXRlcyB8fCB7fTtcblxuICAgIC8qKlxuICAgICAqIEludGVybmFsIHRleHR1cmUgY291bnRlclxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMudGV4dHVyZUNvdW50ID0gMTtcblxuICAgIC8qKlxuICAgICAqIFRoZSB2ZXJ0ZXggc2hhZGVyIGFzIGFuIGFycmF5IG9mIHN0cmluZ3NcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge3N0cmluZ31cbiAgICAgKi9cbiAgICB0aGlzLnZlcnRleFNyYyA9IHZlcnRleFNyYztcblxuICAgIC8qKlxuICAgICAqIFRoZSBmcmFnbWVudCBzaGFkZXIgYXMgYW4gYXJyYXkgb2Ygc3RyaW5nc1xuICAgICAqXG4gICAgICogQG1lbWJlciB7c3RyaW5nfVxuICAgICAqL1xuICAgIHRoaXMuZnJhZ21lbnRTcmMgPSBmcmFnbWVudFNyYztcblxuICAgIHRoaXMuaW5pdCgpO1xufVxuXG5TaGFkZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gU2hhZGVyO1xubW9kdWxlLmV4cG9ydHMgPSBTaGFkZXI7XG5cbi8qKlxuICogQ3JlYXRlcyB0aGUgc2hhZGVyIGFuZCB1c2VzIGl0XG4gKlxuICovXG5TaGFkZXIucHJvdG90eXBlLmluaXQgPSBmdW5jdGlvbiAoKVxue1xuICAgIHRoaXMuY29tcGlsZSgpO1xuXG4gICAgdGhpcy5nbC51c2VQcm9ncmFtKHRoaXMucHJvZ3JhbSk7XG5cbiAgICB0aGlzLmNhY2hlVW5pZm9ybUxvY2F0aW9ucyhPYmplY3Qua2V5cyh0aGlzLnVuaWZvcm1zKSk7XG4gICAgdGhpcy5jYWNoZUF0dHJpYnV0ZUxvY2F0aW9ucyhPYmplY3Qua2V5cyh0aGlzLmF0dHJpYnV0ZXMpKTtcbn07XG5cbi8qKlxuICogQ2FjaGVzIHRoZSBsb2NhdGlvbnMgb2YgdGhlIHVuaWZvcm0gZm9yIHJldXNlLlxuICpcbiAqIEBwYXJhbSBrZXlzIHtzdHJpbmd9IHRoZSB1bmlmb3JtcyB0byBjYWNoZVxuICovXG5TaGFkZXIucHJvdG90eXBlLmNhY2hlVW5pZm9ybUxvY2F0aW9ucyA9IGZ1bmN0aW9uIChrZXlzKVxue1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7ICsraSlcbiAgICB7XG4gICAgICAgIHRoaXMudW5pZm9ybXNba2V5c1tpXV0uX2xvY2F0aW9uID0gdGhpcy5nbC5nZXRVbmlmb3JtTG9jYXRpb24odGhpcy5wcm9ncmFtLCBrZXlzW2ldKTtcbiAgICB9XG59O1xuXG4vKipcbiAqIENhY2hlcyB0aGUgbG9jYXRpb25zIG9mIHRoZSBhdHRyaWJ1dGUgZm9yIHJldXNlLlxuICpcbiAqIEBwYXJhbSBrZXlzIHtzdHJpbmd9IHRoZSBhdHRyaWJ1dGVzIHRvIGNhY2hlXG4gKi9cblNoYWRlci5wcm90b3R5cGUuY2FjaGVBdHRyaWJ1dGVMb2NhdGlvbnMgPSBmdW5jdGlvbiAoa2V5cylcbntcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyArK2kpXG4gICAge1xuICAgICAgICB0aGlzLmF0dHJpYnV0ZXNba2V5c1tpXV0gPSB0aGlzLmdsLmdldEF0dHJpYkxvY2F0aW9uKHRoaXMucHJvZ3JhbSwga2V5c1tpXSk7XG4gICAgfVxuXG4gICAgLy8gVE9ETzogQ2hlY2sgaWYgdGhpcyBpcyBuZWVkZWQgYW55bW9yZS4uLlxuXG4gICAgLy8gQmVnaW4gd29yc3QgaGFjayBldmEgLy9cblxuICAgIC8vIFdIWT8/PyBPTkxZIG9uIG15IGNocm9tZSBwaXhlbCB0aGUgbGluZSBhYm92ZSByZXR1cm5zIC0xIHdoZW4gdXNpbmcgZmlsdGVycz9cbiAgICAvLyBtYXliZSBpdHMgc29tZXRoaW5nIHRvIGRvIHdpdGggdGhlIGN1cnJlbnQgc3RhdGUgb2YgdGhlIGdsIGNvbnRleHQuXG4gICAgLy8gSSdtIGNvbnZpbmNlZCB0aGlzIGlzIGEgYnVnIGluIHRoZSBjaHJvbWUgYnJvd3NlciBhcyB0aGVyZSBpcyBOTyByZWFzb24gd2h5IHRoaXMgc2hvdWxkIGJlIHJldHVybmluZyAtMSBlc3BlY2lhbGx5IGFzIGl0IG9ubHkgbWFuaWZlc3RzIG9uIG15IGNocm9tZSBwaXhlbFxuICAgIC8vIElmIHRoZXJlcyBhbnkgd2ViR0wgcGVvcGxlIHRoYXQga25vdyB3aHkgY291bGQgaGFwcGVuIHBsZWFzZSBoZWxwIDopXG4gICAgLy8gaWYgKHRoaXMuYXR0cmlidXRlcy5hQ29sb3IgPT09IC0xKXtcbiAgICAvLyAgICAgdGhpcy5hdHRyaWJ1dGVzLmFDb2xvciA9IDI7XG4gICAgLy8gfVxuXG4gICAgLy8gRW5kIHdvcnN0IGhhY2sgZXZhIC8vXG59O1xuXG4vKipcbiAqIEF0dGFjaGVzIHRoZSBzaGFkZXJzIGFuZCBjcmVhdGVzIHRoZSBwcm9ncmFtLlxuICpcbiAqIEByZXR1cm4ge1dlYkdMUHJvZ3JhbX1cbiAqL1xuU2hhZGVyLnByb3RvdHlwZS5jb21waWxlID0gZnVuY3Rpb24gKClcbntcbiAgICB2YXIgZ2wgPSB0aGlzLmdsO1xuXG4gICAgdmFyIGdsVmVydFNoYWRlciA9IHRoaXMuX2dsQ29tcGlsZShnbC5WRVJURVhfU0hBREVSLCB0aGlzLnZlcnRleFNyYyk7XG4gICAgdmFyIGdsRnJhZ1NoYWRlciA9IHRoaXMuX2dsQ29tcGlsZShnbC5GUkFHTUVOVF9TSEFERVIsIHRoaXMuZnJhZ21lbnRTcmMpO1xuXG4gICAgdmFyIHByb2dyYW0gPSBnbC5jcmVhdGVQcm9ncmFtKCk7XG5cbiAgICBnbC5hdHRhY2hTaGFkZXIocHJvZ3JhbSwgZ2xWZXJ0U2hhZGVyKTtcbiAgICBnbC5hdHRhY2hTaGFkZXIocHJvZ3JhbSwgZ2xGcmFnU2hhZGVyKTtcbiAgICBnbC5saW5rUHJvZ3JhbShwcm9ncmFtKTtcblxuICAgIC8vIGlmIGxpbmtpbmcgZmFpbHMsIHRoZW4gbG9nIGFuZCBjbGVhbnVwXG4gICAgaWYgKCFnbC5nZXRQcm9ncmFtUGFyYW1ldGVyKHByb2dyYW0sIGdsLkxJTktfU1RBVFVTKSlcbiAgICB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ1BpeGkuanMgRXJyb3I6IENvdWxkIG5vdCBpbml0aWFsaXplIHNoYWRlci4nKTtcbiAgICAgICAgY29uc29sZS5lcnJvcignZ2wuVkFMSURBVEVfU1RBVFVTJywgZ2wuZ2V0UHJvZ3JhbVBhcmFtZXRlcihwcm9ncmFtLCBnbC5WQUxJREFURV9TVEFUVVMpKTtcbiAgICAgICAgY29uc29sZS5lcnJvcignZ2wuZ2V0RXJyb3IoKScsIGdsLmdldEVycm9yKCkpO1xuXG4gICAgICAgIC8vIGlmIHRoZXJlIGlzIGEgcHJvZ3JhbSBpbmZvIGxvZywgbG9nIGl0XG4gICAgICAgIGlmIChnbC5nZXRQcm9ncmFtSW5mb0xvZyhwcm9ncmFtKSAhPT0gJycpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignUGl4aS5qcyBXYXJuaW5nOiBnbC5nZXRQcm9ncmFtSW5mb0xvZygpJywgZ2wuZ2V0UHJvZ3JhbUluZm9Mb2cocHJvZ3JhbSkpO1xuICAgICAgICB9XG5cbiAgICAgICAgZ2wuZGVsZXRlUHJvZ3JhbShwcm9ncmFtKTtcbiAgICAgICAgcHJvZ3JhbSA9IG51bGw7XG4gICAgfVxuXG4gICAgLy8gY2xlYW4gdXAgc29tZSBzaGFkZXJzXG4gICAgZ2wuZGVsZXRlU2hhZGVyKGdsVmVydFNoYWRlcik7XG4gICAgZ2wuZGVsZXRlU2hhZGVyKGdsRnJhZ1NoYWRlcik7XG5cbiAgICByZXR1cm4gKHRoaXMucHJvZ3JhbSA9IHByb2dyYW0pO1xufTtcblxuLyoqXG4qIEFkZHMgYSBuZXcgdW5pZm9ybVxuKlxuKiBAcGFyYW0gdW5pZm9ybSB7b2JqZWN0fSB0aGUgbmV3IHVuaWZvcm0gdG8gYXR0YWNoXG4qL1xuU2hhZGVyLnByb3RvdHlwZS5zeW5jVW5pZm9ybSA9IGZ1bmN0aW9uICh1bmlmb3JtKVxue1xuICAgIHZhciBsb2NhdGlvbiA9IHVuaWZvcm0uX2xvY2F0aW9uLFxuICAgICAgICB2YWx1ZSA9IHVuaWZvcm0udmFsdWUsXG4gICAgICAgIGdsID0gdGhpcy5nbCxcbiAgICAgICAgaSwgaWw7XG5cbiAgICBzd2l0Y2ggKHVuaWZvcm0udHlwZSlcbiAgICB7XG4gICAgICAgIGNhc2UgJ2InOlxuICAgICAgICBjYXNlICdib29sJzpcbiAgICAgICAgY2FzZSAnYm9vbGVhbic6XG4gICAgICAgICAgICBnbC51bmlmb3JtMWkobG9jYXRpb24sIHZhbHVlID8gMSA6IDApO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLy8gc2luZ2xlIGludCB2YWx1ZVxuICAgICAgICBjYXNlICdpJzpcbiAgICAgICAgY2FzZSAnMWknOlxuICAgICAgICAgICAgZ2wudW5pZm9ybTFpKGxvY2F0aW9uLCB2YWx1ZSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAvLyBzaW5nbGUgZmxvYXQgdmFsdWVcbiAgICAgICAgY2FzZSAnZic6XG4gICAgICAgIGNhc2UgJzFmJzpcbiAgICAgICAgICAgIGdsLnVuaWZvcm0xZihsb2NhdGlvbiwgdmFsdWUpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLy8gRmxvYXQzMkFycmF5KDIpIG9yIEpTIEFycnJheVxuICAgICAgICBjYXNlICcyZic6XG4gICAgICAgICAgICBnbC51bmlmb3JtMmYobG9jYXRpb24sIHZhbHVlWzBdLCB2YWx1ZVsxXSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAvLyBGbG9hdDMyQXJyYXkoMykgb3IgSlMgQXJycmF5XG4gICAgICAgIGNhc2UgJzNmJzpcbiAgICAgICAgICAgIGdsLnVuaWZvcm0zZihsb2NhdGlvbiwgdmFsdWVbMF0sIHZhbHVlWzFdLCB2YWx1ZVsyXSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAvLyBGbG9hdDMyQXJyYXkoNCkgb3IgSlMgQXJycmF5XG4gICAgICAgIGNhc2UgJzRmJzpcbiAgICAgICAgICAgIGdsLnVuaWZvcm00Zihsb2NhdGlvbiwgdmFsdWVbMF0sIHZhbHVlWzFdLCB2YWx1ZVsyXSwgdmFsdWVbM10pO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLy8gYSAyRCBQb2ludCBvYmplY3RcbiAgICAgICAgY2FzZSAndjInOlxuICAgICAgICAgICAgZ2wudW5pZm9ybTJmKGxvY2F0aW9uLCB2YWx1ZS54LCB2YWx1ZS55KTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIC8vIGEgM0QgUG9pbnQgb2JqZWN0XG4gICAgICAgIGNhc2UgJ3YzJzpcbiAgICAgICAgICAgIGdsLnVuaWZvcm0zZihsb2NhdGlvbiwgdmFsdWUueCwgdmFsdWUueSwgdmFsdWUueik7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAvLyBhIDREIFBvaW50IG9iamVjdFxuICAgICAgICBjYXNlICd2NCc6XG4gICAgICAgICAgICBnbC51bmlmb3JtNGYobG9jYXRpb24sIHZhbHVlLngsIHZhbHVlLnksIHZhbHVlLnosIHZhbHVlLncpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLy8gSW50MzJBcnJheSBvciBKUyBBcnJheVxuICAgICAgICBjYXNlICcxaXYnOlxuICAgICAgICAgICAgZ2wudW5pZm9ybTFpdihsb2NhdGlvbiwgdmFsdWUpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLy8gSW50MzJBcnJheSBvciBKUyBBcnJheVxuICAgICAgICBjYXNlICcyaXYnOlxuICAgICAgICAgICAgZ2wudW5pZm9ybTJpdihsb2NhdGlvbiwgdmFsdWUpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLy8gSW50MzJBcnJheSBvciBKUyBBcnJheVxuICAgICAgICBjYXNlICczaXYnOlxuICAgICAgICAgICAgZ2wudW5pZm9ybTNpdihsb2NhdGlvbiwgdmFsdWUpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLy8gSW50MzJBcnJheSBvciBKUyBBcnJheVxuICAgICAgICBjYXNlICc0aXYnOlxuICAgICAgICAgICAgZ2wudW5pZm9ybTRpdihsb2NhdGlvbiwgdmFsdWUpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLy8gRmxvYXQzMkFycmF5IG9yIEpTIEFycmF5XG4gICAgICAgIGNhc2UgJzFmdic6XG4gICAgICAgICAgICBnbC51bmlmb3JtMWZ2KGxvY2F0aW9uLCB2YWx1ZSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAvLyBGbG9hdDMyQXJyYXkgb3IgSlMgQXJyYXlcbiAgICAgICAgY2FzZSAnMmZ2JzpcbiAgICAgICAgICAgIGdsLnVuaWZvcm0yZnYobG9jYXRpb24sIHZhbHVlKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIC8vIEZsb2F0MzJBcnJheSBvciBKUyBBcnJheVxuICAgICAgICBjYXNlICczZnYnOlxuICAgICAgICAgICAgZ2wudW5pZm9ybTNmdihsb2NhdGlvbiwgdmFsdWUpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLy8gRmxvYXQzMkFycmF5IG9yIEpTIEFycmF5XG4gICAgICAgIGNhc2UgJzRmdic6XG4gICAgICAgICAgICBnbC51bmlmb3JtNGZ2KGxvY2F0aW9uLCB2YWx1ZSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAvLyBGbG9hdDMyQXJyYXkgb3IgSlMgQXJyYXlcbiAgICAgICAgY2FzZSAnbTInOlxuICAgICAgICBjYXNlICdtYXQyJzpcbiAgICAgICAgY2FzZSAnTWF0cml4MmZ2JzpcbiAgICAgICAgICAgIGdsLnVuaWZvcm1NYXRyaXgyZnYobG9jYXRpb24sIHVuaWZvcm0udHJhbnNwb3NlLCB2YWx1ZSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAvLyBGbG9hdDMyQXJyYXkgb3IgSlMgQXJyYXlcbiAgICAgICAgY2FzZSAnbTMnOlxuICAgICAgICBjYXNlICdtYXQzJzpcbiAgICAgICAgY2FzZSAnTWF0cml4M2Z2JzpcblxuICAgICAgICAgICAgZ2wudW5pZm9ybU1hdHJpeDNmdihsb2NhdGlvbiwgdW5pZm9ybS50cmFuc3Bvc2UsIHZhbHVlKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIC8vIEZsb2F0MzJBcnJheSBvciBKUyBBcnJheVxuICAgICAgICBjYXNlICdtNCc6XG4gICAgICAgIGNhc2UgJ21hdDQnOlxuICAgICAgICBjYXNlICdNYXRyaXg0ZnYnOlxuICAgICAgICAgICAgZ2wudW5pZm9ybU1hdHJpeDRmdihsb2NhdGlvbiwgdW5pZm9ybS50cmFuc3Bvc2UsIHZhbHVlKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIC8vIGEgQ29sb3IgVmFsdWVcbiAgICAgICAgY2FzZSAnYyc6XG4gICAgICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJylcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB2YWx1ZSA9IHV0aWxzLmhleDJyZ2IodmFsdWUpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBnbC51bmlmb3JtM2YobG9jYXRpb24sIHZhbHVlWzBdLCB2YWx1ZVsxXSwgdmFsdWVbMl0pO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLy8gZmxhdCBhcnJheSBvZiBpbnRlZ2VycyAoSlMgb3IgdHlwZWQgYXJyYXkpXG4gICAgICAgIGNhc2UgJ2l2MSc6XG4gICAgICAgICAgICBnbC51bmlmb3JtMWl2KGxvY2F0aW9uLCB2YWx1ZSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAvLyBmbGF0IGFycmF5IG9mIGludGVnZXJzIHdpdGggMyB4IE4gc2l6ZSAoSlMgb3IgdHlwZWQgYXJyYXkpXG4gICAgICAgIGNhc2UgJ2l2JzpcbiAgICAgICAgICAgIGdsLnVuaWZvcm0zaXYobG9jYXRpb24sIHZhbHVlKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIC8vIGZsYXQgYXJyYXkgb2YgZmxvYXRzIChKUyBvciB0eXBlZCBhcnJheSlcbiAgICAgICAgY2FzZSAnZnYxJzpcbiAgICAgICAgICAgIGdsLnVuaWZvcm0xZnYobG9jYXRpb24sIHZhbHVlKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIC8vIGZsYXQgYXJyYXkgb2YgZmxvYXRzIHdpdGggMyB4IE4gc2l6ZSAoSlMgb3IgdHlwZWQgYXJyYXkpXG4gICAgICAgIGNhc2UgJ2Z2JzpcbiAgICAgICAgICAgIGdsLnVuaWZvcm0zZnYobG9jYXRpb24sIHZhbHVlKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIC8vIGFycmF5IG9mIDJEIFBvaW50IG9iamVjdHNcbiAgICAgICAgY2FzZSAndjJ2JzpcbiAgICAgICAgICAgIGlmICghdW5pZm9ybS5fYXJyYXkpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdW5pZm9ybS5fYXJyYXkgPSBuZXcgRmxvYXQzMkFycmF5KDIgKiB2YWx1ZS5sZW5ndGgpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBmb3IgKGkgPSAwLCBpbCA9IHZhbHVlLmxlbmd0aDsgaSA8IGlsOyArK2kpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdW5pZm9ybS5fYXJyYXlbaSAqIDJdICAgICAgID0gdmFsdWVbaV0ueDtcbiAgICAgICAgICAgICAgICB1bmlmb3JtLl9hcnJheVtpICogMiArIDFdICAgPSB2YWx1ZVtpXS55O1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBnbC51bmlmb3JtMmZ2KGxvY2F0aW9uLCB1bmlmb3JtLl9hcnJheSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAvLyBhcnJheSBvZiAzRCBQb2ludCBvYmplY3RzXG4gICAgICAgIGNhc2UgJ3Yzdic6XG4gICAgICAgICAgICBpZiAoIXVuaWZvcm0uX2FycmF5KVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHVuaWZvcm0uX2FycmF5ID0gbmV3IEZsb2F0MzJBcnJheSgzICogdmFsdWUubGVuZ3RoKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZm9yIChpID0gMCwgaWwgPSB2YWx1ZS5sZW5ndGg7IGkgPCBpbDsgKytpKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHVuaWZvcm0uX2FycmF5W2kgKiAzXSAgICAgICA9IHZhbHVlW2ldLng7XG4gICAgICAgICAgICAgICAgdW5pZm9ybS5fYXJyYXlbaSAqIDMgKyAxXSAgID0gdmFsdWVbaV0ueTtcbiAgICAgICAgICAgICAgICB1bmlmb3JtLl9hcnJheVtpICogMyArIDJdICAgPSB2YWx1ZVtpXS56O1xuXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGdsLnVuaWZvcm0zZnYobG9jYXRpb24sIHVuaWZvcm0uX2FycmF5KTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIC8vIGFycmF5IG9mIDREIFBvaW50IG9iamVjdHNcbiAgICAgICAgY2FzZSAndjR2JzpcbiAgICAgICAgICAgIGlmICghdW5pZm9ybS5fYXJyYXkpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdW5pZm9ybS5fYXJyYXkgPSBuZXcgRmxvYXQzMkFycmF5KDQgKiB2YWx1ZS5sZW5ndGgpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBmb3IgKGkgPSAwLCBpbCA9IHZhbHVlLmxlbmd0aDsgaSA8IGlsOyArK2kpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdW5pZm9ybS5fYXJyYXlbaSAqIDRdICAgICAgID0gdmFsdWVbaV0ueDtcbiAgICAgICAgICAgICAgICB1bmlmb3JtLl9hcnJheVtpICogNCArIDFdICAgPSB2YWx1ZVtpXS55O1xuICAgICAgICAgICAgICAgIHVuaWZvcm0uX2FycmF5W2kgKiA0ICsgMl0gICA9IHZhbHVlW2ldLno7XG4gICAgICAgICAgICAgICAgdW5pZm9ybS5fYXJyYXlbaSAqIDQgKyAzXSAgID0gdmFsdWVbaV0udztcblxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBnbC51bmlmb3JtNGZ2KGxvY2F0aW9uLCB1bmlmb3JtLl9hcnJheSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAvLyBQSVhJLlRleHR1cmVcbiAgICAgICAgY2FzZSAndCc6XG4gICAgICAgIGNhc2UgJ3NhbXBsZXIyRCc6XG5cbiAgICAgICAgICAgIGlmICghdW5pZm9ybS52YWx1ZSB8fCAhdW5pZm9ybS52YWx1ZS5iYXNlVGV4dHVyZS5oYXNMb2FkZWQpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIGFjdGl2YXRlIHRoaXMgdGV4dHVyZVxuICAgICAgICAgICAgZ2wuYWN0aXZlVGV4dHVyZShnbFsnVEVYVFVSRScgKyB0aGlzLnRleHR1cmVDb3VudF0pO1xuXG4gICAgICAgICAgICB2YXIgdGV4dHVyZSA9IHVuaWZvcm0udmFsdWUuYmFzZVRleHR1cmUuX2dsVGV4dHVyZXNbZ2wuaWRdO1xuXG4gICAgICAgICAgICBpZiAoIXRleHR1cmUpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdGhpcy5pbml0U2FtcGxlcjJEKHVuaWZvcm0pO1xuXG4gICAgICAgICAgICAgICAgLy8gc2V0IHRoZSB0ZXh0dXIgdG8gdGhlIG5ld2x5IGNyZWF0ZWQgb25lLi5cbiAgICAgICAgICAgICAgICB0ZXh0dXJlID0gdW5pZm9ybS52YWx1ZS5iYXNlVGV4dHVyZS5fZ2xUZXh0dXJlc1tnbC5pZF07XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIGJpbmQgdGhlIHRleHR1cmVcbiAgICAgICAgICAgIGdsLmJpbmRUZXh0dXJlKGdsLlRFWFRVUkVfMkQsIHRleHR1cmUpO1xuXG4gICAgICAgICAgICAvLyBzZXQgdW5pZm9ybSB0byB0ZXh0dXJlIGluZGV4XG4gICAgICAgICAgICBnbC51bmlmb3JtMWkodW5pZm9ybS5fbG9jYXRpb24sIHRoaXMudGV4dHVyZUNvdW50KTtcblxuICAgICAgICAgICAgLy8gaW5jcmVtZW50IG5leHQgdGV4dHVyZSBpZFxuICAgICAgICAgICAgdGhpcy50ZXh0dXJlQ291bnQrKztcblxuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignUGl4aS5qcyBTaGFkZXIgV2FybmluZzogVW5rbm93biB1bmlmb3JtIHR5cGU6ICcgKyB1bmlmb3JtLnR5cGUpO1xuICAgIH1cbn07XG5cbi8qKlxuICogVXBkYXRlcyB0aGUgc2hhZGVyIHVuaWZvcm0gdmFsdWVzLlxuICpcbiAqL1xuU2hhZGVyLnByb3RvdHlwZS5zeW5jVW5pZm9ybXMgPSBmdW5jdGlvbiAoKVxue1xuICAgIHRoaXMudGV4dHVyZUNvdW50ID0gMTtcblxuICAgIGZvciAodmFyIGtleSBpbiB0aGlzLnVuaWZvcm1zKVxuICAgIHtcbiAgICAgICAgdGhpcy5zeW5jVW5pZm9ybSh0aGlzLnVuaWZvcm1zW2tleV0pO1xuICAgIH1cbn07XG5cblxuLyoqXG4gKiBJbml0aWFsaXNlcyBhIFNhbXBsZXIyRCB1bmlmb3JtICh3aGljaCBtYXkgb25seSBiZSBhdmFpbGFibGUgbGF0ZXIgb24gYWZ0ZXIgaW5pdFVuaWZvcm1zIG9uY2UgdGhlIHRleHR1cmUgaGFzIGxvYWRlZClcbiAqXG4gKi9cblNoYWRlci5wcm90b3R5cGUuaW5pdFNhbXBsZXIyRCA9IGZ1bmN0aW9uICh1bmlmb3JtKVxue1xuICAgIHZhciBnbCA9IHRoaXMuZ2w7XG5cbiAgICB2YXIgdGV4dHVyZSA9IHVuaWZvcm0udmFsdWUuYmFzZVRleHR1cmU7XG5cbiAgICBpZighdGV4dHVyZS5oYXNMb2FkZWQpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG5cblxuICAgIGlmICh1bmlmb3JtLnRleHR1cmVEYXRhKVxuICAgIHtcblxuICAgICAgICAvL1RPRE8gbW92ZSB0aGlzLi4uXG4gICAgICAgIHZhciBkYXRhID0gdW5pZm9ybS50ZXh0dXJlRGF0YTtcblxuICAgICAgICB0ZXh0dXJlLl9nbFRleHR1cmVzW2dsLmlkXSA9IGdsLmNyZWF0ZVRleHR1cmUoKTtcblxuICAgICAgICBnbC5iaW5kVGV4dHVyZShnbC5URVhUVVJFXzJELCB0ZXh0dXJlLl9nbFRleHR1cmVzW2dsLmlkXSk7XG5cbiAgICAgICAgZ2wucGl4ZWxTdG9yZWkoZ2wuVU5QQUNLX1BSRU1VTFRJUExZX0FMUEhBX1dFQkdMLCB0ZXh0dXJlLnByZW11bHRpcGxpZWRBbHBoYSk7XG4gICAgICAgIC8vIEdMVGV4dHVyZSA9IG1hZyBsaW5lYXIsIG1pbiBsaW5lYXJfbWlwbWFwX2xpbmVhciwgd3JhcCByZXBlYXQgKyBnbC5nZW5lcmF0ZU1pcG1hcChnbC5URVhUVVJFXzJEKTtcbiAgICAgICAgLy8gR0xUZXh0dXJlTGluZWFyID0gbWFnL21pbiBsaW5lYXIsIHdyYXAgY2xhbXBcbiAgICAgICAgLy8gR0xUZXh0dXJlTmVhcmVzdFJlcGVhdCA9IG1hZy9taW4gTkVBUkVTVCwgd3JhcCByZXBlYXRcbiAgICAgICAgLy8gR0xUZXh0dXJlTmVhcmVzdCA9IG1hZy9taW4gbmVhcmVzdCwgd3JhcCBjbGFtcFxuICAgICAgICAvLyBBdWRpb1RleHR1cmUgPSB3aGF0ZXZlciArIGx1bWluYW5jZSArIHdpZHRoIDUxMiwgaGVpZ2h0IDIsIGJvcmRlciAwXG4gICAgICAgIC8vIEtleVRleHR1cmUgPSB3aGF0ZXZlciArIGx1bWluYW5jZSArIHdpZHRoIDI1NiwgaGVpZ2h0IDIsIGJvcmRlciAwXG5cbiAgICAgICAgLy8gIG1hZ0ZpbHRlciBjYW4gYmU6IGdsLkxJTkVBUiwgZ2wuTElORUFSX01JUE1BUF9MSU5FQVIgb3IgZ2wuTkVBUkVTVFxuICAgICAgICAvLyAgd3JhcFMvVCBjYW4gYmU6IGdsLkNMQU1QX1RPX0VER0Ugb3IgZ2wuUkVQRUFUXG5cbiAgICAgICAgZ2wudGV4SW1hZ2UyRChnbC5URVhUVVJFXzJELCAwLCBkYXRhLmx1bWluYW5jZSA/IGdsLkxVTUlOQU5DRSA6IGdsLlJHQkEsIGdsLlJHQkEsIGdsLlVOU0lHTkVEX0JZVEUsIHRleHR1cmUuc291cmNlKTtcblxuICAgICAgICBnbC50ZXhQYXJhbWV0ZXJpKGdsLlRFWFRVUkVfMkQsIGdsLlRFWFRVUkVfTUFHX0ZJTFRFUiwgZGF0YS5tYWdGaWx0ZXIgPyBkYXRhLm1hZ0ZpbHRlciA6IGdsLkxJTkVBUiApO1xuICAgICAgICBnbC50ZXhQYXJhbWV0ZXJpKGdsLlRFWFRVUkVfMkQsIGdsLlRFWFRVUkVfTUlOX0ZJTFRFUiwgZGF0YS53cmFwUyA/IGRhdGEud3JhcFMgOiBnbC5DTEFNUF9UT19FREdFICk7XG5cbiAgICAgICAgZ2wudGV4UGFyYW1ldGVyaShnbC5URVhUVVJFXzJELCBnbC5URVhUVVJFX1dSQVBfVCwgZGF0YS53cmFwUyA/IGRhdGEud3JhcFMgOiBnbC5DTEFNUF9UT19FREdFKTtcbiAgICAgICAgZ2wudGV4UGFyYW1ldGVyaShnbC5URVhUVVJFXzJELCBnbC5URVhUVVJFX1dSQVBfUywgZGF0YS53cmFwVCA/IGRhdGEud3JhcFQgOiBnbC5DTEFNUF9UT19FREdFKTtcbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgdGhpcy5zaGFkZXJNYW5hZ2VyLnJlbmRlcmVyLnVwZGF0ZVRleHR1cmUodGV4dHVyZSk7XG4gICAgfVxufTtcblxuLyoqXG4gKiBEZXN0cm95cyB0aGUgc2hhZGVyLlxuICpcbiAqL1xuU2hhZGVyLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLmdsLmRlbGV0ZVByb2dyYW0odGhpcy5wcm9ncmFtKTtcblxuICAgIHRoaXMuZ2wgPSBudWxsO1xuICAgIHRoaXMudW5pZm9ybXMgPSBudWxsO1xuICAgIHRoaXMuYXR0cmlidXRlcyA9IG51bGw7XG5cbiAgICB0aGlzLnZlcnRleFNyYyA9IG51bGw7XG4gICAgdGhpcy5mcmFnbWVudFNyYyA9IG51bGw7XG59O1xuXG5TaGFkZXIucHJvdG90eXBlLl9nbENvbXBpbGUgPSBmdW5jdGlvbiAodHlwZSwgc3JjKVxue1xuICAgIHZhciBzaGFkZXIgPSB0aGlzLmdsLmNyZWF0ZVNoYWRlcih0eXBlKTtcblxuICAgIHRoaXMuZ2wuc2hhZGVyU291cmNlKHNoYWRlciwgc3JjKTtcbiAgICB0aGlzLmdsLmNvbXBpbGVTaGFkZXIoc2hhZGVyKTtcblxuICAgIGlmICghdGhpcy5nbC5nZXRTaGFkZXJQYXJhbWV0ZXIoc2hhZGVyLCB0aGlzLmdsLkNPTVBJTEVfU1RBVFVTKSlcbiAgICB7XG4gICAgICAgIGNvbnNvbGUubG9nKHRoaXMuZ2wuZ2V0U2hhZGVySW5mb0xvZyhzaGFkZXIpKTtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgcmV0dXJuIHNoYWRlcjtcbn07XG4iLCJ2YXIgU2hhZGVyID0gcmVxdWlyZSgnLi9TaGFkZXInKTtcblxuLyoqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAZXh0ZW5kcyBQSVhJLlNoYWRlclxuICogQHBhcmFtIHNoYWRlck1hbmFnZXIge1BJWEkuU2hhZGVyTWFuYWdlcn0gVGhlIHdlYmdsIHNoYWRlciBtYW5hZ2VyIHRoaXMgc2hhZGVyIHdvcmtzIGZvci5cbiAqIEBwYXJhbSBbdmVydGV4U3JjXSB7c3RyaW5nfSBUaGUgc291cmNlIG9mIHRoZSB2ZXJ0ZXggc2hhZGVyLlxuICogQHBhcmFtIFtmcmFnbWVudFNyY10ge3N0cmluZ30gVGhlIHNvdXJjZSBvZiB0aGUgZnJhZ21lbnQgc2hhZGVyLlxuICogQHBhcmFtIFtjdXN0b21Vbmlmb3Jtc10ge29iamVjdH0gQ3VzdG9tIHVuaWZvcm1zIHRvIHVzZSB0byBhdWdtZW50IHRoZSBidWlsdC1pbiBvbmVzLlxuICogQHBhcmFtIFtmcmFnbWVudFNyY10ge3N0cmluZ30gVGhlIHNvdXJjZSBvZiB0aGUgZnJhZ21lbnQgc2hhZGVyLlxuICovXG5mdW5jdGlvbiBUZXh0dXJlU2hhZGVyKHNoYWRlck1hbmFnZXIsIHZlcnRleFNyYywgZnJhZ21lbnRTcmMsIGN1c3RvbVVuaWZvcm1zLCBjdXN0b21BdHRyaWJ1dGVzKVxue1xuICAgIHZhciB1bmlmb3JtcyA9IHtcblxuICAgICAgICB1U2FtcGxlcjogICAgICAgICAgIHsgdHlwZTogJ3NhbXBsZXIyRCcsIHZhbHVlOiAwIH0sXG4gICAgICAgIHByb2plY3Rpb25NYXRyaXg6ICAgeyB0eXBlOiAnbWF0MycsIHZhbHVlOiBuZXcgRmxvYXQzMkFycmF5KFsxLCAwLCAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgMSwgMCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsIDAsIDFdKSB9XG4gICAgfTtcblxuICAgIGlmIChjdXN0b21Vbmlmb3JtcylcbiAgICB7XG4gICAgICAgIGZvciAodmFyIHUgaW4gY3VzdG9tVW5pZm9ybXMpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHVuaWZvcm1zW3VdID0gY3VzdG9tVW5pZm9ybXNbdV07XG4gICAgICAgIH1cbiAgICB9XG5cblxuICAgIHZhciBhdHRyaWJ1dGVzID0ge1xuICAgICAgICBhVmVydGV4UG9zaXRpb246ICAgIDAsXG4gICAgICAgIGFUZXh0dXJlQ29vcmQ6ICAgICAgMCxcbiAgICAgICAgYUNvbG9yOiAgICAgICAgICAgICAwXG4gICAgfTtcblxuICAgIGlmIChjdXN0b21BdHRyaWJ1dGVzKVxuICAgIHtcbiAgICAgICAgZm9yICh2YXIgYSBpbiBjdXN0b21BdHRyaWJ1dGVzKVxuICAgICAgICB7XG4gICAgICAgICAgICBhdHRyaWJ1dGVzW2FdID0gY3VzdG9tQXR0cmlidXRlc1thXTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoZSB2ZXJ0ZXggc2hhZGVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7c3RyaW5nfVxuICAgICAqL1xuICAgIHZlcnRleFNyYyA9IHZlcnRleFNyYyB8fCBUZXh0dXJlU2hhZGVyLmRlZmF1bHRWZXJ0ZXhTcmM7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgZnJhZ21lbnQgc2hhZGVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7c3RyaW5nfVxuICAgICAqL1xuICAgIGZyYWdtZW50U3JjID0gZnJhZ21lbnRTcmMgfHwgVGV4dHVyZVNoYWRlci5kZWZhdWx0RnJhZ21lbnRTcmM7XG5cbiAgICBTaGFkZXIuY2FsbCh0aGlzLCBzaGFkZXJNYW5hZ2VyLCB2ZXJ0ZXhTcmMsIGZyYWdtZW50U3JjLCB1bmlmb3JtcywgYXR0cmlidXRlcyk7XG59XG5cbi8vIGNvbnN0cnVjdG9yXG5UZXh0dXJlU2hhZGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoU2hhZGVyLnByb3RvdHlwZSk7XG5UZXh0dXJlU2hhZGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFRleHR1cmVTaGFkZXI7XG5tb2R1bGUuZXhwb3J0cyA9IFRleHR1cmVTaGFkZXI7XG5cbi8qKlxuICogVGhlIGRlZmF1bHQgdmVydGV4IHNoYWRlciBzb3VyY2VcbiAqXG4gKiBAc3RhdGljXG4gKiBAY29uc3RhbnRcbiAqL1xuVGV4dHVyZVNoYWRlci5kZWZhdWx0VmVydGV4U3JjID0gW1xuICAgICdwcmVjaXNpb24gbG93cCBmbG9hdDsnLFxuICAgICdhdHRyaWJ1dGUgdmVjMiBhVmVydGV4UG9zaXRpb247JyxcbiAgICAnYXR0cmlidXRlIHZlYzIgYVRleHR1cmVDb29yZDsnLFxuICAgICdhdHRyaWJ1dGUgdmVjNCBhQ29sb3I7JyxcblxuICAgICd1bmlmb3JtIG1hdDMgcHJvamVjdGlvbk1hdHJpeDsnLFxuXG4gICAgJ3ZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkOycsXG4gICAgJ3ZhcnlpbmcgdmVjNCB2Q29sb3I7JyxcblxuICAgICd2b2lkIG1haW4odm9pZCl7JyxcbiAgICAnICAgZ2xfUG9zaXRpb24gPSB2ZWM0KChwcm9qZWN0aW9uTWF0cml4ICogdmVjMyhhVmVydGV4UG9zaXRpb24sIDEuMCkpLnh5LCAwLjAsIDEuMCk7JyxcbiAgICAnICAgdlRleHR1cmVDb29yZCA9IGFUZXh0dXJlQ29vcmQ7JyxcbiAgICAnICAgdkNvbG9yID0gdmVjNChhQ29sb3IucmdiICogYUNvbG9yLmEsIGFDb2xvci5hKTsnLFxuICAgICd9J1xuXS5qb2luKCdcXG4nKTtcblxuLyoqXG4gKiBUaGUgZGVmYXVsdCBmcmFnbWVudCBzaGFkZXIgc291cmNlXG4gKlxuICogQHN0YXRpY1xuICogQGNvbnN0YW50XG4gKi9cblRleHR1cmVTaGFkZXIuZGVmYXVsdEZyYWdtZW50U3JjID0gW1xuICAgICdwcmVjaXNpb24gbG93cCBmbG9hdDsnLFxuXG4gICAgJ3ZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkOycsXG4gICAgJ3ZhcnlpbmcgdmVjNCB2Q29sb3I7JyxcblxuICAgICd1bmlmb3JtIHNhbXBsZXIyRCB1U2FtcGxlcjsnLFxuXG4gICAgJ3ZvaWQgbWFpbih2b2lkKXsnLFxuICAgICcgICBnbF9GcmFnQ29sb3IgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZUZXh0dXJlQ29vcmQpICogdkNvbG9yIDsnLFxuICAgICd9J1xuXS5qb2luKCdcXG4nKTtcbiIsInZhciBTaGFkZXIgPSByZXF1aXJlKCdwaXhpLWdsLWNvcmUnKS5HTFNoYWRlcjtcblxuLyoqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAZXh0ZW5kcyBQSVhJLlNoYWRlclxuICogQHBhcmFtIHNoYWRlck1hbmFnZXIge1BJWEkuU2hhZGVyTWFuYWdlcn0gVGhlIHdlYmdsIHNoYWRlciBtYW5hZ2VyIHRoaXMgc2hhZGVyIHdvcmtzIGZvci5cbiAqIEBwYXJhbSBbdmVydGV4U3JjXSB7c3RyaW5nfSBUaGUgc291cmNlIG9mIHRoZSB2ZXJ0ZXggc2hhZGVyLlxuICogQHBhcmFtIFtmcmFnbWVudFNyY10ge3N0cmluZ30gVGhlIHNvdXJjZSBvZiB0aGUgZnJhZ21lbnQgc2hhZGVyLlxuICogQHBhcmFtIFtjdXN0b21Vbmlmb3Jtc10ge29iamVjdH0gQ3VzdG9tIHVuaWZvcm1zIHRvIHVzZSB0byBhdWdtZW50IHRoZSBidWlsdC1pbiBvbmVzLlxuICogQHBhcmFtIFtmcmFnbWVudFNyY10ge3N0cmluZ30gVGhlIHNvdXJjZSBvZiB0aGUgZnJhZ21lbnQgc2hhZGVyLlxuICovXG5mdW5jdGlvbiBUZXh0dXJlU2hhZGVyKGdsKVxue1xuICAgIC8qKlxuICAgICAqIFRoZSB2ZXJ0ZXggc2hhZGVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7c3RyaW5nfVxuICAgICAqL1xuICAgIHZlcnRleFNyYyA9IFRleHR1cmVTaGFkZXIuZGVmYXVsdFZlcnRleFNyYztcblxuICAgIC8qKlxuICAgICAqIFRoZSBmcmFnbWVudCBzaGFkZXIuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtzdHJpbmd9XG4gICAgICovXG4gICAgZnJhZ21lbnRTcmMgPSBUZXh0dXJlU2hhZGVyLmRlZmF1bHRGcmFnbWVudFNyYztcblxuICAgIFNoYWRlci5jYWxsKHRoaXMsIGdsLCB2ZXJ0ZXhTcmMsIGZyYWdtZW50U3JjKTsvLywgdW5pZm9ybXMsIGF0dHJpYnV0ZXMpO1xuXG59XG5cbi8vIGNvbnN0cnVjdG9yXG5UZXh0dXJlU2hhZGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoU2hhZGVyLnByb3RvdHlwZSk7XG5UZXh0dXJlU2hhZGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFRleHR1cmVTaGFkZXI7XG5tb2R1bGUuZXhwb3J0cyA9IFRleHR1cmVTaGFkZXI7XG5cbi8qKlxuICogVGhlIGRlZmF1bHQgdmVydGV4IHNoYWRlciBzb3VyY2VcbiAqXG4gKiBAc3RhdGljXG4gKiBAY29uc3RhbnRcbiAqL1xuVGV4dHVyZVNoYWRlci5kZWZhdWx0VmVydGV4U3JjID0gW1xuICAgICdwcmVjaXNpb24gbG93cCBmbG9hdDsnLFxuICAgICdhdHRyaWJ1dGUgdmVjMiBhVmVydGV4UG9zaXRpb247JyxcbiAgICAnYXR0cmlidXRlIHZlYzIgYVRleHR1cmVDb29yZDsnLFxuICAgICdhdHRyaWJ1dGUgdmVjNCBhQ29sb3I7JyxcblxuICAgICd1bmlmb3JtIG1hdDMgcHJvamVjdGlvbk1hdHJpeDsnLFxuXG4gICAgJ3ZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkOycsXG4gICAgJ3ZhcnlpbmcgdmVjNCB2Q29sb3I7JyxcblxuICAgICd2b2lkIG1haW4odm9pZCl7JyxcbiAgICAnICAgZ2xfUG9zaXRpb24gPSB2ZWM0KChwcm9qZWN0aW9uTWF0cml4ICogdmVjMyhhVmVydGV4UG9zaXRpb24sIDEuMCkpLnh5LCAwLjAsIDEuMCk7JyxcbiAgICAnICAgdlRleHR1cmVDb29yZCA9IGFUZXh0dXJlQ29vcmQ7JyxcbiAgICAnICAgdkNvbG9yID0gdmVjNChhQ29sb3IucmdiICogYUNvbG9yLmEsIGFDb2xvci5hKTsnLFxuICAgICd9J1xuXS5qb2luKCdcXG4nKTtcblxuLyoqXG4gKiBUaGUgZGVmYXVsdCBmcmFnbWVudCBzaGFkZXIgc291cmNlXG4gKlxuICogQHN0YXRpY1xuICogQGNvbnN0YW50XG4gKi9cblRleHR1cmVTaGFkZXIuZGVmYXVsdEZyYWdtZW50U3JjID0gW1xuICAgICdwcmVjaXNpb24gbG93cCBmbG9hdDsnLFxuXG4gICAgJ3ZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkOycsXG4gICAgJ3ZhcnlpbmcgdmVjNCB2Q29sb3I7JyxcblxuICAgICd1bmlmb3JtIHNhbXBsZXIyRCB1U2FtcGxlcjsnLFxuXG4gICAgJ3ZvaWQgbWFpbih2b2lkKXsnLFxuICAgICcgICBnbF9GcmFnQ29sb3IgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZUZXh0dXJlQ29vcmQpICogdkNvbG9yIDsnLFxuICAgICd9J1xuXS5qb2luKCdcXG4nKTtcbiIsInZhciBXZWJHTE1hbmFnZXIgPSByZXF1aXJlKCcuLi9tYW5hZ2Vycy9XZWJHTE1hbmFnZXInKTtcblxuLyoqXG4gKiBCYXNlIGZvciBhIGNvbW1vbiBvYmplY3QgcmVuZGVyZXIgdGhhdCBjYW4gYmUgdXNlZCBhcyBhIHN5c3RlbSByZW5kZXJlciBwbHVnaW4uXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLldlYkdMTWFuYWdlclxuICogQG1lbWJlcm9mIFBJWElcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5XZWJHTFJlbmRlcmVyfSBUaGUgcmVuZGVyZXIgdGhpcyBvYmplY3QgcmVuZGVyZXIgd29ya3MgZm9yLlxuICovXG5mdW5jdGlvbiBPYmplY3RSZW5kZXJlcihyZW5kZXJlcilcbntcbiAgICBXZWJHTE1hbmFnZXIuY2FsbCh0aGlzLCByZW5kZXJlcik7XG59XG5cblxuT2JqZWN0UmVuZGVyZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShXZWJHTE1hbmFnZXIucHJvdG90eXBlKTtcbk9iamVjdFJlbmRlcmVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IE9iamVjdFJlbmRlcmVyO1xubW9kdWxlLmV4cG9ydHMgPSBPYmplY3RSZW5kZXJlcjtcblxuLyoqXG4gKiBTdGFydHMgdGhlIHJlbmRlcmVyIGFuZCBzZXRzIHRoZSBzaGFkZXJcbiAqXG4gKi9cbk9iamVjdFJlbmRlcmVyLnByb3RvdHlwZS5zdGFydCA9IGZ1bmN0aW9uICgpXG57XG4gICAgLy8gc2V0IHRoZSBzaGFkZXIuLlxufTtcblxuLyoqXG4gKiBTdG9wcyB0aGUgcmVuZGVyZXJcbiAqXG4gKi9cbk9iamVjdFJlbmRlcmVyLnByb3RvdHlwZS5zdG9wID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLmZsdXNoKCk7XG59O1xuXG4vKipcbiAqIGZsdXNoZXNcbiAqXG4gKi9cbk9iamVjdFJlbmRlcmVyLnByb3RvdHlwZS5mbHVzaCA9IGZ1bmN0aW9uICgpXG57XG4gICAgLy8gZmx1c2ghXG59O1xuXG4vKipcbiAqIFJlbmRlcnMgYW4gb2JqZWN0XG4gKlxuICogQHBhcmFtIG9iamVjdCB7UElYSS5EaXNwbGF5T2JqZWN0fSBUaGUgb2JqZWN0IHRvIHJlbmRlci5cbiAqL1xuT2JqZWN0UmVuZGVyZXIucHJvdG90eXBlLnJlbmRlciA9IGZ1bmN0aW9uIChvYmplY3QpIC8vIGpzaGludCB1bnVzZWQ6ZmFsc2VcbntcbiAgICAvLyByZW5kZXIgdGhlIG9iamVjdFxufTtcbiIsIi8qKlxuICogSGVscGVyIGNsYXNzIHRvIGNyZWF0ZSBhIHF1YWRcbiAqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gZ2wge1dlYkdMUmVuZGVyaW5nQ29udGV4dH0gVGhlIGdsIGNvbnRleHQgZm9yIHRoaXMgcXVhZCB0byB1c2UuXG4gKi9cbmZ1bmN0aW9uIFF1YWQoZ2wpXG57XG4gICAgLypcbiAgICAgKiB0aGUgY3VycmVudCBXZWJHTCBkcmF3aW5nIGNvbnRleHRcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1dlYkdMUmVuZGVyaW5nQ29udGV4dH1cbiAgICAgKi9cbiAgICB0aGlzLmdsID0gZ2w7XG5cbi8vICAgIHRoaXMudGV4dHVyZXMgPSBuZXcgVGV4dHVyZVV2cygpO1xuXG4gICAgLyoqXG4gICAgICogQW4gYXJyYXkgb2YgdmVydGljZXNcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge0Zsb2F0MzJBcnJheX1cbiAgICAgKi9cbiAgICB0aGlzLnZlcnRpY2VzID0gbmV3IEZsb2F0MzJBcnJheShbXG4gICAgICAgIDAsMCxcbiAgICAgICAgMjAwLDAsXG4gICAgICAgIDIwMCwyMDAsXG4gICAgICAgIDAsMjAwXG4gICAgXSk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgVXZzIG9mIHRoZSBxdWFkXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtGbG9hdDMyQXJyYXl9XG4gICAgICovXG4gICAgdGhpcy51dnMgPSBuZXcgRmxvYXQzMkFycmF5KFtcbiAgICAgICAgMCwwLFxuICAgICAgICAxLDAsXG4gICAgICAgIDEsMSxcbiAgICAgICAgMCwxXG4gICAgXSk7XG5cbi8vICAgIHZhciB3aGl0ZSA9ICgweEZGRkZGRiA+PiAxNikgKyAoMHhGRkZGRkYgJiAweGZmMDApICsgKCgweEZGRkZGRiAmIDB4ZmYpIDw8IDE2KSArICgxICogMjU1IDw8IDI0KTtcbiAgICAvL1RPRE8gY29udmVydCB0aGlzIHRvIGEgMzIgdW5zaWduZWQgaW50IGFycmF5XG4gICAgLyoqXG4gICAgICogVGhlIGNvbG9yIGNvbXBvbmVudHMgb2YgdGhlIHRyaWFuZ2xlc1xuICAgICAqXG4gICAgICogQG1lbWJlciB7RmxvYXQzMkFycmF5fVxuICAgICAqL1xuICAgIHRoaXMuY29sb3JzID0gbmV3IEZsb2F0MzJBcnJheShbXG4gICAgICAgIDEsMSwxLDEsXG4gICAgICAgIDEsMSwxLDEsXG4gICAgICAgIDEsMSwxLDEsXG4gICAgICAgIDEsMSwxLDFcbiAgICBdKTtcblxuICAgIC8qXG4gICAgICogQG1lbWJlciB7VWludDE2QXJyYXl9IEFuIGFycmF5IGNvbnRhaW5pbmcgdGhlIGluZGljZXMgb2YgdGhlIHZlcnRpY2VzXG4gICAgICovXG4gICAgdGhpcy5pbmRpY2VzID0gbmV3IFVpbnQxNkFycmF5KFtcbiAgICAgICAgMCwgMSwgMiwgMCwgMywgMlxuICAgIF0pO1xuXG4gICAgLypcbiAgICAgKiBAbWVtYmVyIHtXZWJHTEJ1ZmZlcn0gVGhlIHZlcnRleCBidWZmZXJcbiAgICAgKi9cbiAgICB0aGlzLnZlcnRleEJ1ZmZlciA9IGdsLmNyZWF0ZUJ1ZmZlcigpO1xuXG4gICAgLypcbiAgICAgKiBAbWVtYmVyIHtXZWJHTEJ1ZmZlcn0gVGhlIGluZGV4IGJ1ZmZlclxuICAgICAqL1xuICAgIHRoaXMuaW5kZXhCdWZmZXIgPSBnbC5jcmVhdGVCdWZmZXIoKTtcblxuICAgIGdsLmJpbmRCdWZmZXIoZ2wuQVJSQVlfQlVGRkVSLCB0aGlzLnZlcnRleEJ1ZmZlcik7XG4gICAgZ2wuYnVmZmVyRGF0YShnbC5BUlJBWV9CVUZGRVIsICg4ICsgOCArIDE2KSAqIDQsIGdsLkRZTkFNSUNfRFJBVyk7XG5cbiAgICBnbC5iaW5kQnVmZmVyKGdsLkVMRU1FTlRfQVJSQVlfQlVGRkVSLCB0aGlzLmluZGV4QnVmZmVyKTtcbiAgICBnbC5idWZmZXJEYXRhKGdsLkVMRU1FTlRfQVJSQVlfQlVGRkVSLCB0aGlzLmluZGljZXMsIGdsLlNUQVRJQ19EUkFXKTtcblxuICAgIHRoaXMudXBsb2FkKCk7XG59XG5cblF1YWQucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gUXVhZDtcblxuLyoqXG4gKiBNYXBzIHR3byBSZWN0YW5nbGUgdG8gdGhlIHF1YWRcbiAqIEBwYXJhbSByZWN0IHtQSVhJLlJlY3RhbmdsZX0gdGhlIGZpcnN0IHJlY3RhbmdsZVxuICogQHBhcmFtIHJlY3QyIHtQSVhJLlJlY3RhbmdsZX0gdGhlIHNlY29uZCByZWN0YW5nbGVcbiAqL1xuUXVhZC5wcm90b3R5cGUubWFwID0gZnVuY3Rpb24ocmVjdCwgcmVjdDIpXG57XG4gICAgdmFyIHggPSAwOyAvL3JlY3QyLnggLyByZWN0LndpZHRoO1xuICAgIHZhciB5ID0gMDsgLy9yZWN0Mi55IC8gcmVjdC5oZWlnaHQ7XG5cbiAgICB0aGlzLnV2c1swXSA9IHg7XG4gICAgdGhpcy51dnNbMV0gPSB5O1xuXG4gICAgdGhpcy51dnNbMl0gPSB4ICsgcmVjdDIud2lkdGggLyByZWN0LndpZHRoO1xuICAgIHRoaXMudXZzWzNdID0geTtcblxuICAgIHRoaXMudXZzWzRdID0geCArIHJlY3QyLndpZHRoIC8gcmVjdC53aWR0aDtcbiAgICB0aGlzLnV2c1s1XSA9IHkgKyByZWN0Mi5oZWlnaHQgLyByZWN0LmhlaWdodDtcblxuICAgIHRoaXMudXZzWzZdID0geDtcbiAgICB0aGlzLnV2c1s3XSA9IHkgKyByZWN0Mi5oZWlnaHQgLyByZWN0LmhlaWdodDtcblxuICAgIC8vLyAtLS0tLVxuICAgIHggPSByZWN0Mi54O1xuICAgIHkgPSByZWN0Mi55O1xuXG4gICAgdGhpcy52ZXJ0aWNlc1swXSA9IHg7XG4gICAgdGhpcy52ZXJ0aWNlc1sxXSA9IHk7XG5cbiAgICB0aGlzLnZlcnRpY2VzWzJdID0geCArIHJlY3QyLndpZHRoO1xuICAgIHRoaXMudmVydGljZXNbM10gPSB5O1xuXG4gICAgdGhpcy52ZXJ0aWNlc1s0XSA9IHggKyByZWN0Mi53aWR0aDtcbiAgICB0aGlzLnZlcnRpY2VzWzVdID0geSArIHJlY3QyLmhlaWdodDtcblxuICAgIHRoaXMudmVydGljZXNbNl0gPSB4O1xuICAgIHRoaXMudmVydGljZXNbN10gPSB5ICsgcmVjdDIuaGVpZ2h0O1xuXG4gICAgdGhpcy51cGxvYWQoKTtcbn07XG5cbi8qKlxuICogQmluZHMgdGhlIGJ1ZmZlciBhbmQgdXBsb2FkcyB0aGUgZGF0YVxuICovXG5RdWFkLnByb3RvdHlwZS51cGxvYWQgPSBmdW5jdGlvbigpXG57XG4gICAgdmFyIGdsID0gdGhpcy5nbDtcblxuICAgIC8vIFRPRE8gY291bGQgcHJvYmFibHkgYmUgcHVzaGVkIGludG8gb25lIHVwbG9hZCFcbiAgICBnbC5iaW5kQnVmZmVyKCBnbC5BUlJBWV9CVUZGRVIsIHRoaXMudmVydGV4QnVmZmVyICk7XG5cbiAgICBnbC5idWZmZXJTdWJEYXRhKGdsLkFSUkFZX0JVRkZFUiwgMCwgdGhpcy52ZXJ0aWNlcyk7XG5cbiAgICBnbC5idWZmZXJTdWJEYXRhKGdsLkFSUkFZX0JVRkZFUiwgOCAqIDQsIHRoaXMudXZzKTtcblxuICAgIGdsLmJ1ZmZlclN1YkRhdGEoZ2wuQVJSQVlfQlVGRkVSLCAoOCArIDgpICogNCwgdGhpcy5jb2xvcnMpO1xufTtcblxuUXVhZC5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uKClcbntcbiAgICB2YXIgZ2wgPSB0aGlzLmdsO1xuICAgIFxuICAgICBnbC5kZWxldGVCdWZmZXIodGhpcy52ZXJ0ZXhCdWZmZXIpO1xuICAgICBnbC5kZWxldGVCdWZmZXIodGhpcy5pbmRleEJ1ZmZlcik7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IFF1YWQ7XG5cblxuIiwidmFyIG1hdGggPSByZXF1aXJlKCcuLi8uLi8uLi9tYXRoJyksXG4gICAgdXRpbHMgPSByZXF1aXJlKCcuLi8uLi8uLi91dGlscycpLFxuICAgIENPTlNUID0gcmVxdWlyZSgnLi4vLi4vLi4vY29uc3QnKSxcbiAgICAgICAgXG4gICAgR0xUZXh0dXJlID0gcmVxdWlyZSgncGl4aS1nbC1jb3JlJykuR0xUZXh0dXJlLFxuICAgIEdMRnJhbWVidWZmZXIgPSByZXF1aXJlKCdwaXhpLWdsLWNvcmUnKS5HTEZyYW1lYnVmZmVyLFxuICAgIFxuICAgIFN0ZW5jaWxNYXNrU3RhY2sgPSByZXF1aXJlKCcuL1N0ZW5jaWxNYXNrU3RhY2snKTtcblxuLyoqXG4gKiBAYXV0aG9yIE1hdCBHcm92ZXMgaHR0cDovL21hdGdyb3Zlcy5jb20vIEBEb29ybWF0MjNcbiAqL1xuXG4vKipcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqIEBwYXJhbSBnbCB7V2ViR0xSZW5kZXJpbmdDb250ZXh0fSB0aGUgY3VycmVudCBXZWJHTCBkcmF3aW5nIGNvbnRleHRcbiAqIEBwYXJhbSB3aWR0aCB7bnVtYmVyfSB0aGUgaG9yaXpvbnRhbCByYW5nZSBvZiB0aGUgZmlsdGVyXG4gKiBAcGFyYW0gaGVpZ2h0IHtudW1iZXJ9IHRoZSB2ZXJ0aWNhbCByYW5nZSBvZiB0aGUgZmlsdGVyXG4gKiBAcGFyYW0gc2NhbGVNb2RlIHtudW1iZXJ9IFNlZSB7QGxpbmsgUElYSS5TQ0FMRV9NT0RFU30gZm9yIHBvc3NpYmxlIHZhbHVlc1xuICogQHBhcmFtIHJlc29sdXRpb24ge251bWJlcn0gdGhlIGN1cnJlbnQgcmVzb2x1dGlvblxuICogQHBhcmFtIHJvb3Qge2Jvb2xlYW59IFdoZXRoZXIgdGhpcyBvYmplY3QgaXMgdGhlIHJvb3QgZWxlbWVudCBvciBub3RcbiAqL1xudmFyIFJlbmRlclRhcmdldCA9IGZ1bmN0aW9uKGdsLCB3aWR0aCwgaGVpZ2h0LCBzY2FsZU1vZGUsIHJlc29sdXRpb24sIHJvb3QpXG57XG4gICAgLy9UT0RPIFJlc29sdXRpb24gY291bGQgZ28gaGVyZSAoIGVnIGxvdyByZXMgYmx1cnMgKVxuXG4gICAgLyoqXG4gICAgICogVGhlIGN1cnJlbnQgV2ViR0wgZHJhd2luZyBjb250ZXh0LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7V2ViR0xSZW5kZXJpbmdDb250ZXh0fVxuICAgICAqL1xuICAgIHRoaXMuZ2wgPSBnbDtcblxuICAgIC8vIG5leHQgdGltZSB0byBjcmVhdGUgYSBmcmFtZSBidWZmZXIgYW5kIHRleHR1cmVcblxuICAgIC8qKlxuICAgICAqIEEgZnJhbWUgYnVmZmVyXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtXZWJHTEZyYW1lQnVmZmVyfVxuICAgICAqL1xuICAgIHRoaXMuZnJhbWVCdWZmZXIgPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHRleHR1cmVcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuVGV4dHVyZX1cbiAgICAgKi9cbiAgICB0aGlzLnRleHR1cmUgPSBudWxsO1xuXG4gICAgdGhpcy5jbGVhckNvbG9yID0gWzAsIDAsIDAsIDBdO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHNpemUgb2YgdGhlIG9iamVjdCBhcyBhIHJlY3RhbmdsZVxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5SZWN0YW5nbGV9XG4gICAgICovXG4gICAgdGhpcy5zaXplID0gbmV3IG1hdGguUmVjdGFuZ2xlKDAsIDAsIDEsIDEpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGN1cnJlbnQgcmVzb2x1dGlvblxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMucmVzb2x1dGlvbiA9IHJlc29sdXRpb24gfHwgQ09OU1QuUkVTT0xVVElPTjtcblxuICAgIC8qKlxuICAgICAqIFRoZSBwcm9qZWN0aW9uIG1hdHJpeFxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5NYXRyaXh9XG4gICAgICovXG4gICAgdGhpcy5wcm9qZWN0aW9uTWF0cml4ID0gbmV3IG1hdGguTWF0cml4KCk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgb2JqZWN0J3MgdHJhbnNmb3JtXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLk1hdHJpeH1cbiAgICAgKi9cbiAgICB0aGlzLnRyYW5zZm9ybSA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgZnJhbWUuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlJlY3RhbmdsZX1cbiAgICAgKi9cbiAgICB0aGlzLmZyYW1lID0gbnVsbDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBzdGVuY2lsIGJ1ZmZlciBzdG9yZXMgbWFza2luZyBkYXRhIGZvciB0aGUgcmVuZGVyIHRhcmdldFxuICAgICAqXG4gICAgICogQG1lbWJlciB7V2ViR0xSZW5kZXJCdWZmZXJ9XG4gICAgICovXG4gICAgdGhpcy5zdGVuY2lsQnVmZmVyID0gbnVsbDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBkYXRhIHN0cnVjdHVyZSBmb3IgdGhlIHN0ZW5jaWwgbWFza3NcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuU3RlbmNpbE1hc2tTdGFja31cbiAgICAgKi9cbiAgICB0aGlzLnN0ZW5jaWxNYXNrU3RhY2sgPSBuZXcgU3RlbmNpbE1hc2tTdGFjaygpO1xuXG4gICAgLyoqXG4gICAgICogU3RvcmVzIGZpbHRlciBkYXRhIGZvciB0aGUgcmVuZGVyIHRhcmdldFxuICAgICAqXG4gICAgICogQG1lbWJlciB7b2JqZWN0W119XG4gICAgICovXG4gICAgdGhpcy5maWx0ZXJTdGFjayA9IFtcbiAgICAgICAge1xuICAgICAgICAgICAgcmVuZGVyVGFyZ2V0OnRoaXMsXG4gICAgICAgICAgICBmaWx0ZXI6W10sXG4gICAgICAgICAgICBib3VuZHM6dGhpcy5zaXplXG4gICAgICAgIH1cbiAgICBdO1xuXG5cbiAgICAvKipcbiAgICAgKiBUaGUgc2NhbGUgbW9kZS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCBQSVhJLlNDQUxFX01PREVTLkRFRkFVTFRcbiAgICAgKiBAc2VlIFBJWEkuU0NBTEVfTU9ERVNcbiAgICAgKi9cbiAgICB0aGlzLnNjYWxlTW9kZSA9IHNjYWxlTW9kZSB8fCBDT05TVC5TQ0FMRV9NT0RFUy5ERUZBVUxUO1xuXG4gICAgLyoqXG4gICAgICogV2hldGhlciB0aGlzIG9iamVjdCBpcyB0aGUgcm9vdCBlbGVtZW50IG9yIG5vdFxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKi9cbiAgICB0aGlzLnJvb3QgPSByb290O1xuXG4gICAgdGhpcy5mcmFtZUJ1ZmZlciA9IEdMRnJhbWVidWZmZXIuY3JlYXRlUkdCQShnbCwgMTAwLCAxMDApO1xuICAgIGlmKHRoaXMuZnJhbWVCdWZmZXIpdGhpcy5mcmFtZUJ1ZmZlci51bmJpbmQoKTtcblxuICAgLy8gdGhpcy5mcmFtZUJ1ZmZlciA9IHtmcmFtZWJ1ZmZlcjpudWxsLCBiaW5kOmZ1bmN0aW9uKCl7fSwgY2xlYXI6ZnVuY3Rpb24oKXt9LCByZXNpemU6ZnVuY3Rpb24oKXt9fS8vbmV3IEdMRnJhbWVidWZmZXIuY3JlYXRlUkdCQShnbCwgMTAwLCAxMDApO1xuXG5cblxuICAgIGlmICghdGhpcy5yb290KVxuICAgIHtcbiAgICAgICAgLypcbiAgICAgICAgICAgIEEgZnJhbWUgYnVmZmVyIG5lZWRzIGEgdGFyZ2V0IHRvIHJlbmRlciB0by4uXG4gICAgICAgICAgICBjcmVhdGUgYSB0ZXh0dXJlIGFuZCBiaW5kIGl0IGF0dGFjaCBpdCB0byB0aGUgZnJhbWVidWZmZXIuLlxuICAgICAgICAgKi9cbiAgICAgICAgXG4gICAgICAgIC8vIGNyZWF0ZSBhIHRleHR1cmUgdG8gYmluZCBhdHRhY2ggdG8gdGhlIGZyYW1lQnVmZmVyLi5cbiAgICAgICAgdmFyIHRleHR1cmUgPSBuZXcgR0xUZXh0dXJlKGdsKTtcblxuICAgICAgICB0ZXh0dXJlLmVuYWJsZUxpbmVhclNjYWxpbmcoKVxuICAgICAgICB0ZXh0dXJlLmVuYWJsZVdyYXBDbGFtcCgpXG5cbiAgICAgICAgdGhpcy5mcmFtZUJ1ZmZlci5lbmFibGVUZXh0dXJlKHRleHR1cmUpO1xuXG4gICAgICAgIC8vIFRPRE8gY2hhbmdlIVxuICAgICAgICAvLyB0aGlzIGlzIHVzZWQgYnkgdGhlIGJhc2UgdGV4dHVyZVxuICAgICAgICB0aGlzLnRleHR1cmUgPSB0ZXh0dXJlLnRleHR1cmU7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIC8vIG1ha2UgaXQgYSBudWxsIGZyYW1lYnVmZmVyLi5cbiAgICAgICAgdGhpcy5mcmFtZUJ1ZmZlci5mcmFtZWJ1ZmZlciA9IG51bGw7XG4gICAgfVxuXG4gICAgdGhpcy5yZXNpemUod2lkdGgsIGhlaWdodCk7XG59O1xuXG5SZW5kZXJUYXJnZXQucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gUmVuZGVyVGFyZ2V0O1xubW9kdWxlLmV4cG9ydHMgPSBSZW5kZXJUYXJnZXQ7XG5cbi8qKlxuICogQ2xlYXJzIHRoZSBmaWx0ZXIgdGV4dHVyZS5cbiAqXG4gKiBAcGFyYW0gW2JpbmQ9ZmFsc2VdIHtib29sZWFufSBTaG91bGQgd2UgYmluZCBvdXIgZnJhbWVidWZmZXIgYmVmb3JlIGNsZWFyaW5nP1xuICovXG5SZW5kZXJUYXJnZXQucHJvdG90eXBlLmNsZWFyID0gZnVuY3Rpb24oY2xlYXJDb2xvcilcbntcbiAgICB2YXIgY2MgPSBjbGVhckNvbG9yIHx8IHRoaXMuY2xlYXJDb2xvclxuICAgIHRoaXMuZnJhbWVCdWZmZXIuY2xlYXIoY2NbMF0sY2NbMV0sY2NbMl0sY2NbM10pLy9yLGcsYixhKTtcbn07XG5cbi8qKlxuICogQmluZHMgdGhlIHN0ZW5jaWwgYnVmZmVyLlxuICpcbiAqL1xuUmVuZGVyVGFyZ2V0LnByb3RvdHlwZS5hdHRhY2hTdGVuY2lsQnVmZmVyID0gZnVuY3Rpb24oKVxue1xuICAgIC8vVE9ETyBjaGVjayBpZiBzdGVuY2lsIGlzIGRvbmU/XG4gICAgLyoqXG4gICAgICogVGhlIHN0ZW5jaWwgYnVmZmVyIGlzIHVzZWQgZm9yIG1hc2tpbmcgaW4gcGl4aVxuICAgICAqIGxldHMgY3JlYXRlIG9uZSBhbmQgdGhlbiBhZGQgYXR0YWNoIGl0IHRvIHRoZSBmcmFtZWJ1ZmZlci4uXG4gICAgICovXG4gICAgaWYgKCF0aGlzLnJvb3QpXG4gICAge1xuICAgICAgICB0aGlzLmZyYW1lQnVmZmVyLmVuYWJsZVN0ZW5jaWwoKTtcbiAgICB9XG59O1xuXG4vKipcbiAqIEJpbmRzIHRoZSBidWZmZXJzIGFuZCBpbml0aWFsaXNlcyB0aGUgdmlld3BvcnQuXG4gKlxuICovXG5SZW5kZXJUYXJnZXQucHJvdG90eXBlLmFjdGl2YXRlID0gZnVuY3Rpb24oKVxue1xuICAgIC8vVE9PRCByZWZhY3RvciB1c2FnZSBvZiBmcmFtZS4uXG4gICAgdmFyIGdsID0gdGhpcy5nbDtcblxuICAgIHRoaXMuZnJhbWVCdWZmZXIuYmluZCgpO1xuXG5cbiAgICB2YXIgcHJvamVjdGlvbkZyYW1lID0gdGhpcy5mcmFtZSB8fCB0aGlzLnNpemU7XG5cbiAgICAvLyBUT0RPIGFkZCBhIGRpcnR5IGZsYWcgdG8gdGhpcyBvZiBhIHNldHRlciBmb3IgdGhlIGZyYW1lP1xuICAgIHRoaXMuY2FsY3VsYXRlUHJvamVjdGlvbiggcHJvamVjdGlvbkZyYW1lICk7XG5cbiAgICBpZih0aGlzLnRyYW5zZm9ybSlcbiAgICB7XG4gICAgICAgIHRoaXMucHJvamVjdGlvbk1hdHJpeC5hcHBlbmQodGhpcy50cmFuc2Zvcm0pO1xuICAgIH1cblxuICAgIGdsLnZpZXdwb3J0KDAsMCwgcHJvamVjdGlvbkZyYW1lLndpZHRoICogdGhpcy5yZXNvbHV0aW9uLCBwcm9qZWN0aW9uRnJhbWUuaGVpZ2h0ICogdGhpcy5yZXNvbHV0aW9uKTtcbn07XG5cbi8qKlxuICogVXBkYXRlcyB0aGUgcHJvamVjdGlvbiBtYXRyaXggYmFzZWQgb24gYSBwcm9qZWN0aW9uIGZyYW1lICh3aGljaCBpcyBhIHJlY3RhbmdsZSlcbiAqXG4gKi9cblJlbmRlclRhcmdldC5wcm90b3R5cGUuY2FsY3VsYXRlUHJvamVjdGlvbiA9IGZ1bmN0aW9uIChwcm9qZWN0aW9uRnJhbWUpXG57XG4gICAgdmFyIHBtID0gdGhpcy5wcm9qZWN0aW9uTWF0cml4O1xuXG4gICAgcG0uaWRlbnRpdHkoKTtcblxuICAgIGlmICghdGhpcy5yb290KVxuICAgIHtcbiAgICAgICAgcG0uYSA9IDEgLyBwcm9qZWN0aW9uRnJhbWUud2lkdGgqMjtcbiAgICAgICAgcG0uZCA9IDEgLyBwcm9qZWN0aW9uRnJhbWUuaGVpZ2h0KjI7XG5cbiAgICAgICAgcG0udHggPSAtMSAtIHByb2plY3Rpb25GcmFtZS54ICogcG0uYTtcbiAgICAgICAgcG0udHkgPSAtMSAtIHByb2plY3Rpb25GcmFtZS55ICogcG0uZDtcbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgcG0uYSA9IDEgLyBwcm9qZWN0aW9uRnJhbWUud2lkdGgqMjtcbiAgICAgICAgcG0uZCA9IC0xIC8gcHJvamVjdGlvbkZyYW1lLmhlaWdodCoyO1xuXG4gICAgICAgIHBtLnR4ID0gLTEgLSBwcm9qZWN0aW9uRnJhbWUueCAqIHBtLmE7XG4gICAgICAgIHBtLnR5ID0gMSAtIHByb2plY3Rpb25GcmFtZS55ICogcG0uZDtcbiAgICB9XG59O1xuXG4vKipcbiAqIFJlc2l6ZXMgdGhlIHRleHR1cmUgdG8gdGhlIHNwZWNpZmllZCB3aWR0aCBhbmQgaGVpZ2h0XG4gKlxuICogQHBhcmFtIHdpZHRoIHtOdW1iZXJ9IHRoZSBuZXcgd2lkdGggb2YgdGhlIHRleHR1cmVcbiAqIEBwYXJhbSBoZWlnaHQge051bWJlcn0gdGhlIG5ldyBoZWlnaHQgb2YgdGhlIHRleHR1cmVcbiAqL1xuUmVuZGVyVGFyZ2V0LnByb3RvdHlwZS5yZXNpemUgPSBmdW5jdGlvbiAod2lkdGgsIGhlaWdodClcbntcbiAgICB3aWR0aCA9IHdpZHRoIHwgMDtcbiAgICBoZWlnaHQgPSBoZWlnaHQgfCAwO1xuXG4gICAgaWYgKHRoaXMuc2l6ZS53aWR0aCA9PT0gd2lkdGggJiYgdGhpcy5zaXplLmhlaWdodCA9PT0gaGVpZ2h0KSBcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLnNpemUud2lkdGggPSB3aWR0aDtcbiAgICB0aGlzLnNpemUuaGVpZ2h0ID0gaGVpZ2h0O1xuXG4gICAgdGhpcy5mcmFtZUJ1ZmZlci5yZXNpemUod2lkdGggKiB0aGlzLnJlc29sdXRpb24sIGhlaWdodCAqIHRoaXMucmVzb2x1dGlvbik7XG4gICAgXG4gICAgdmFyIHByb2plY3Rpb25GcmFtZSA9IHRoaXMuZnJhbWUgfHwgdGhpcy5zaXplO1xuXG4gICAgdGhpcy5jYWxjdWxhdGVQcm9qZWN0aW9uKCBwcm9qZWN0aW9uRnJhbWUgKTtcbn07XG5cbi8qKlxuICogRGVzdHJveXMgdGhlIHJlbmRlciB0YXJnZXQuXG4gKlxuICovXG5SZW5kZXJUYXJnZXQucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoKVxue1xuICAgIHZhciBnbCA9IHRoaXMuZ2w7XG4gICAgXG4gICAgdGhpcy5mcmFtZUJ1ZmZlci5kZXN0cm95KCk7XG5cbiAgICB0aGlzLmZyYW1lQnVmZmVyID0gbnVsbDtcbiAgICB0aGlzLnRleHR1cmUgPSBudWxsO1xufTtcbiIsIi8qKlxuICogR2VuZXJpYyBNYXNrIFN0YWNrIGRhdGEgc3RydWN0dXJlXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKi9cbmZ1bmN0aW9uIFN0ZW5jaWxNYXNrU3RhY2soKVxue1xuXHQvKipcbiAgICAgKiBUaGUgYWN0dWFsIHN0YWNrXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHthbnlbXX1cbiAgICAgKi9cbiAgICB0aGlzLnN0ZW5jaWxTdGFjayA9IFtdO1xuXG4gICAgLyoqXG4gICAgICogVE9ETyBAYWx2aW5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICovXG4gICAgdGhpcy5yZXZlcnNlID0gdHJ1ZTtcblxuICAgIC8qKlxuICAgICAqIEludGVybmFsIGNvdW50XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy5jb3VudCA9IDA7XG59XG5cblN0ZW5jaWxNYXNrU3RhY2sucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gU3RlbmNpbE1hc2tTdGFjaztcbm1vZHVsZS5leHBvcnRzID0gU3RlbmNpbE1hc2tTdGFjaztcbiIsIkNPTlNUID0gcmVxdWlyZSgnLi4vLi4vLi4vY29uc3QnKTtcblxuLyoqXG4gKiBNYXBzIGdsIGJsZW5kIGNvbWJpbmF0aW9ucyB0byBXZWJHTFxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICovXG5mdW5jdGlvbiBtYXBXZWJHTEJsZW5kTW9kZXNUb1BpeGkoZ2wsIG9iamVjdClcbntcbiAgICBvYmplY3QgPSBvYmplY3QgfHwge307XG5cbiAgICAvL1RPRE8gLSBwcmVtdWx0aXBseSBhbHBoYSB3b3VsZCBiZSBkaWZmZXJlbnQuXG4gICAgLy9hZGQgYSBib29sZWFuIGZvciB0aGF0IVxuICAgIG9iamVjdFtDT05TVC5CTEVORF9NT0RFUy5OT1JNQUxdICAgICAgICA9IFtnbC5PTkUsICAgICAgIGdsLk9ORV9NSU5VU19TUkNfQUxQSEFdO1xuICAgIG9iamVjdFtDT05TVC5CTEVORF9NT0RFUy5BRERdICAgICAgICAgICA9IFtnbC5TUkNfQUxQSEEsIGdsLkRTVF9BTFBIQV07XG4gICAgb2JqZWN0W0NPTlNULkJMRU5EX01PREVTLk1VTFRJUExZXSAgICAgID0gW2dsLkRTVF9DT0xPUiwgZ2wuT05FX01JTlVTX1NSQ19BTFBIQV07XG4gICAgb2JqZWN0W0NPTlNULkJMRU5EX01PREVTLlNDUkVFTl0gICAgICAgID0gW2dsLlNSQ19BTFBIQSwgZ2wuT05FXTtcbiAgICBvYmplY3RbQ09OU1QuQkxFTkRfTU9ERVMuT1ZFUkxBWV0gICAgICAgPSBbZ2wuT05FLCAgICAgICBnbC5PTkVfTUlOVVNfU1JDX0FMUEhBXTtcbiAgICBvYmplY3RbQ09OU1QuQkxFTkRfTU9ERVMuREFSS0VOXSAgICAgICAgPSBbZ2wuT05FLCAgICAgICBnbC5PTkVfTUlOVVNfU1JDX0FMUEhBXTtcbiAgICBvYmplY3RbQ09OU1QuQkxFTkRfTU9ERVMuTElHSFRFTl0gICAgICAgPSBbZ2wuT05FLCAgICAgICBnbC5PTkVfTUlOVVNfU1JDX0FMUEhBXTtcbiAgICBvYmplY3RbQ09OU1QuQkxFTkRfTU9ERVMuQ09MT1JfRE9ER0VdICAgPSBbZ2wuT05FLCAgICAgICBnbC5PTkVfTUlOVVNfU1JDX0FMUEhBXTtcbiAgICBvYmplY3RbQ09OU1QuQkxFTkRfTU9ERVMuQ09MT1JfQlVSTl0gICAgPSBbZ2wuT05FLCAgICAgICBnbC5PTkVfTUlOVVNfU1JDX0FMUEhBXTtcbiAgICBvYmplY3RbQ09OU1QuQkxFTkRfTU9ERVMuSEFSRF9MSUdIVF0gICAgPSBbZ2wuT05FLCAgICAgICBnbC5PTkVfTUlOVVNfU1JDX0FMUEhBXTtcbiAgICBvYmplY3RbQ09OU1QuQkxFTkRfTU9ERVMuU09GVF9MSUdIVF0gICAgPSBbZ2wuT05FLCAgICAgICBnbC5PTkVfTUlOVVNfU1JDX0FMUEhBXTtcbiAgICBvYmplY3RbQ09OU1QuQkxFTkRfTU9ERVMuRElGRkVSRU5DRV0gICAgPSBbZ2wuT05FLCAgICAgICBnbC5PTkVfTUlOVVNfU1JDX0FMUEhBXTtcbiAgICBvYmplY3RbQ09OU1QuQkxFTkRfTU9ERVMuRVhDTFVTSU9OXSAgICAgPSBbZ2wuT05FLCAgICAgICBnbC5PTkVfTUlOVVNfU1JDX0FMUEhBXTtcbiAgICBvYmplY3RbQ09OU1QuQkxFTkRfTU9ERVMuSFVFXSAgICAgICAgICAgPSBbZ2wuT05FLCAgICAgICBnbC5PTkVfTUlOVVNfU1JDX0FMUEhBXTtcbiAgICBvYmplY3RbQ09OU1QuQkxFTkRfTU9ERVMuU0FUVVJBVElPTl0gICAgPSBbZ2wuT05FLCAgICAgICBnbC5PTkVfTUlOVVNfU1JDX0FMUEhBXTtcbiAgICBvYmplY3RbQ09OU1QuQkxFTkRfTU9ERVMuQ09MT1JdICAgICAgICAgPSBbZ2wuT05FLCAgICAgICBnbC5PTkVfTUlOVVNfU1JDX0FMUEhBXTtcbiAgICBvYmplY3RbQ09OU1QuQkxFTkRfTU9ERVMuTFVNSU5PU0lUWV0gICAgPSBbZ2wuT05FLCAgICAgICBnbC5PTkVfTUlOVVNfU1JDX0FMUEhBXTtcblxuICAgIHJldHVybiBvYmplY3Q7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gbWFwV2ViR0xCbGVuZE1vZGVzVG9QaXhpO1xuIiwiQ09OU1QgPSByZXF1aXJlKCcuLi8uLi8uLi9jb25zdCcpO1xuXG4vKipcbiAqIEdlbmVyaWMgTWFzayBTdGFjayBkYXRhIHN0cnVjdHVyZVxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICovXG5mdW5jdGlvbiBtYXBXZWJHTERyYXdNb2Rlc1RvUGl4aShnbCwgb2JqZWN0KVxue1xuXHRvYmplY3Q9IG9iamVjdCB8fCB7fTtcblxuICAgIG9iamVjdFtDT05TVC5EUkFXX01PREVTLlBPSU5UU10gICAgICAgICA9IGdsLlBPSU5UUztcbiAgICBvYmplY3RbQ09OU1QuRFJBV19NT0RFUy5MSU5FU10gICAgICAgICAgPSBnbC5MSU5FUztcbiAgICBvYmplY3RbQ09OU1QuRFJBV19NT0RFUy5MSU5FX0xPT1BdICAgICAgPSBnbC5MSU5FX0xPT1A7XG4gICAgb2JqZWN0W0NPTlNULkRSQVdfTU9ERVMuTElORV9TVFJJUF0gICAgID0gZ2wuTElORV9TVFJJUDtcbiAgICBvYmplY3RbQ09OU1QuRFJBV19NT0RFUy5UUklBTkdMRVNdICAgICAgPSBnbC5UUklBTkdMRVM7XG4gICAgb2JqZWN0W0NPTlNULkRSQVdfTU9ERVMuVFJJQU5HTEVfU1RSSVBdID0gZ2wuVFJJQU5HTEVfU1RSSVA7XG4gICAgb2JqZWN0W0NPTlNULkRSQVdfTU9ERVMuVFJJQU5HTEVfRkFOXSAgID0gZ2wuVFJJQU5HTEVfRkFOO1xuXG59XG5cbm1vZHVsZS5leHBvcnRzID0gbWFwV2ViR0xEcmF3TW9kZXNUb1BpeGk7XG4iLCJ2YXIgbWF0aCA9IHJlcXVpcmUoJy4uL21hdGgnKSxcbiAgICBUZXh0dXJlID0gcmVxdWlyZSgnLi4vdGV4dHVyZXMvVGV4dHVyZScpLFxuICAgIENvbnRhaW5lciA9IHJlcXVpcmUoJy4uL2Rpc3BsYXkvQ29udGFpbmVyJyksXG4gICAgQ2FudmFzVGludGVyID0gcmVxdWlyZSgnLi4vcmVuZGVyZXJzL2NhbnZhcy91dGlscy9DYW52YXNUaW50ZXInKSxcbiAgICB1dGlscyA9IHJlcXVpcmUoJy4uL3V0aWxzJyksXG4gICAgQ09OU1QgPSByZXF1aXJlKCcuLi9jb25zdCcpLFxuICAgIHRlbXBQb2ludCA9IG5ldyBtYXRoLlBvaW50KCk7XG5cbi8qKlxuICogVGhlIFNwcml0ZSBvYmplY3QgaXMgdGhlIGJhc2UgZm9yIGFsbCB0ZXh0dXJlZCBvYmplY3RzIHRoYXQgYXJlIHJlbmRlcmVkIHRvIHRoZSBzY3JlZW5cbiAqXG4gKiBBIHNwcml0ZSBjYW4gYmUgY3JlYXRlZCBkaXJlY3RseSBmcm9tIGFuIGltYWdlIGxpa2UgdGhpczpcbiAqXG4gKiBgYGBqc1xuICogdmFyIHNwcml0ZSA9IG5ldyBQSVhJLlNwcml0ZS5mcm9tSW1hZ2UoJ2Fzc2V0cy9pbWFnZS5wbmcnKTtcbiAqIGBgYFxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5Db250YWluZXJcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gdGV4dHVyZSB7UElYSS5UZXh0dXJlfSBUaGUgdGV4dHVyZSBmb3IgdGhpcyBzcHJpdGVcbiAqL1xuZnVuY3Rpb24gU3ByaXRlKHRleHR1cmUpXG57XG4gICAgQ29udGFpbmVyLmNhbGwodGhpcyk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYW5jaG9yIHNldHMgdGhlIG9yaWdpbiBwb2ludCBvZiB0aGUgdGV4dHVyZS5cbiAgICAgKiBUaGUgZGVmYXVsdCBpcyAwLDAgdGhpcyBtZWFucyB0aGUgdGV4dHVyZSdzIG9yaWdpbiBpcyB0aGUgdG9wIGxlZnRcbiAgICAgKiBTZXR0aW5nIHRoZSBhbmNob3IgdG8gMC41LDAuNSBtZWFucyB0aGUgdGV4dHVyZSdzIG9yaWdpbiBpcyBjZW50ZXJlZFxuICAgICAqIFNldHRpbmcgdGhlIGFuY2hvciB0byAxLDEgd291bGQgbWVhbiB0aGUgdGV4dHVyZSdzIG9yaWdpbiBwb2ludCB3aWxsIGJlIHRoZSBib3R0b20gcmlnaHQgY29ybmVyXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlBvaW50fVxuICAgICAqL1xuICAgIHRoaXMuYW5jaG9yID0gbmV3IG1hdGguUG9pbnQoKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSB0ZXh0dXJlIHRoYXQgdGhlIHNwcml0ZSBpcyB1c2luZ1xuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5UZXh0dXJlfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fdGV4dHVyZSA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgd2lkdGggb2YgdGhlIHNwcml0ZSAodGhpcyBpcyBpbml0aWFsbHkgc2V0IGJ5IHRoZSB0ZXh0dXJlKVxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fd2lkdGggPSAwO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGhlaWdodCBvZiB0aGUgc3ByaXRlICh0aGlzIGlzIGluaXRpYWxseSBzZXQgYnkgdGhlIHRleHR1cmUpXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9oZWlnaHQgPSAwO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHRpbnQgYXBwbGllZCB0byB0aGUgc3ByaXRlLiBUaGlzIGlzIGEgaGV4IHZhbHVlLiBBIHZhbHVlIG9mIDB4RkZGRkZGIHdpbGwgcmVtb3ZlIGFueSB0aW50IGVmZmVjdC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAweEZGRkZGRlxuICAgICAqL1xuICAgIHRoaXMudGludCA9IDB4RkZGRkZGO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGJsZW5kIG1vZGUgdG8gYmUgYXBwbGllZCB0byB0aGUgc3ByaXRlLiBBcHBseSBhIHZhbHVlIG9mIGBQSVhJLkJMRU5EX01PREVTLk5PUk1BTGAgdG8gcmVzZXQgdGhlIGJsZW5kIG1vZGUuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgUElYSS5CTEVORF9NT0RFUy5OT1JNQUxcbiAgICAgKiBAc2VlIFBJWEkuQkxFTkRfTU9ERVNcbiAgICAgKi9cbiAgICB0aGlzLmJsZW5kTW9kZSA9IENPTlNULkJMRU5EX01PREVTLk5PUk1BTDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBzaGFkZXIgdGhhdCB3aWxsIGJlIHVzZWQgdG8gcmVuZGVyIHRoZSBzcHJpdGUuIFNldCB0byBudWxsIHRvIHJlbW92ZSBhIGN1cnJlbnQgc2hhZGVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5BYnN0cmFjdEZpbHRlcnxQSVhJLlNoYWRlcn1cbiAgICAgKi9cbiAgICB0aGlzLnNoYWRlciA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBBbiBpbnRlcm5hbCBjYWNoZWQgdmFsdWUgb2YgdGhlIHRpbnQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMHhGRkZGRkZcbiAgICAgKi9cbiAgICB0aGlzLmNhY2hlZFRpbnQgPSAweEZGRkZGRjtcblxuICAgIC8vIGNhbGwgdGV4dHVyZSBzZXR0ZXJcbiAgICB0aGlzLnRleHR1cmUgPSB0ZXh0dXJlIHx8IFRleHR1cmUuRU1QVFk7XG4gICAgdGhpcy50ZXh0dXJlRGlydHkgPSB0cnVlXG4gICAgdGhpcy52ZXJ0ZXhEaXJ0eSA9IHRydWU7XG4gICAgdGhpcy52ZXJ0ZXhEYXRhID0gbmV3IEZsb2F0MzJBcnJheSg4KTtcbn1cblxuLy8gY29uc3RydWN0b3JcblNwcml0ZS5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKENvbnRhaW5lci5wcm90b3R5cGUpO1xuU3ByaXRlLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFNwcml0ZTtcbm1vZHVsZS5leHBvcnRzID0gU3ByaXRlO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhTcHJpdGUucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogVGhlIHdpZHRoIG9mIHRoZSBzcHJpdGUsIHNldHRpbmcgdGhpcyB3aWxsIGFjdHVhbGx5IG1vZGlmeSB0aGUgc2NhbGUgdG8gYWNoaWV2ZSB0aGUgdmFsdWUgc2V0XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuU3ByaXRlI1xuICAgICAqL1xuICAgIHdpZHRoOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIE1hdGguYWJzKHRoaXMuc2NhbGUueCkgKiB0aGlzLnRleHR1cmUuX2ZyYW1lLndpZHRoO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdmFyIHNpZ24gPSB1dGlscy5zaWduKHRoaXMuc2NhbGUueCkgfHwgMTtcbiAgICAgICAgICAgIHRoaXMuc2NhbGUueCA9IHNpZ24gKiB2YWx1ZSAvIHRoaXMudGV4dHVyZS5fZnJhbWUud2lkdGg7XG4gICAgICAgICAgICB0aGlzLl93aWR0aCA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFRoZSBoZWlnaHQgb2YgdGhlIHNwcml0ZSwgc2V0dGluZyB0aGlzIHdpbGwgYWN0dWFsbHkgbW9kaWZ5IHRoZSBzY2FsZSB0byBhY2hpZXZlIHRoZSB2YWx1ZSBzZXRcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5TcHJpdGUjXG4gICAgICovXG4gICAgaGVpZ2h0OiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuICBNYXRoLmFicyh0aGlzLnNjYWxlLnkpICogdGhpcy50ZXh0dXJlLl9mcmFtZS5oZWlnaHQ7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB2YXIgc2lnbiA9IHV0aWxzLnNpZ24odGhpcy5zY2FsZS55KSB8fCAxO1xuICAgICAgICAgICAgdGhpcy5zY2FsZS55ID0gc2lnbiAqIHZhbHVlIC8gdGhpcy50ZXh0dXJlLl9mcmFtZS5oZWlnaHQ7XG4gICAgICAgICAgICB0aGlzLl9oZWlnaHQgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBUaGUgdGV4dHVyZSB0aGF0IHRoZSBzcHJpdGUgaXMgdXNpbmdcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuVGV4dHVyZX1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5TcHJpdGUjXG4gICAgICovXG4gICAgdGV4dHVyZToge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiAgdGhpcy5fdGV4dHVyZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGlmICh0aGlzLl90ZXh0dXJlID09PSB2YWx1ZSlcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuX3RleHR1cmUgPSB2YWx1ZTtcbiAgICAgICAgICAgIHRoaXMuY2FjaGVkVGludCA9IDB4RkZGRkZGO1xuXG4gICAgICAgICAgICB0aGlzLnRleHR1cmVEaXJ0eSA9IHRydWU7XG5cbiAgICAgICAgICAgIGlmICh2YWx1ZSlcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAvLyB3YWl0IGZvciB0aGUgdGV4dHVyZSB0byBsb2FkXG4gICAgICAgICAgICAgICAgaWYgKHZhbHVlLmJhc2VUZXh0dXJlLmhhc0xvYWRlZClcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX29uVGV4dHVyZVVwZGF0ZSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICB2YWx1ZS5vbmNlKCd1cGRhdGUnLCB0aGlzLl9vblRleHR1cmVVcGRhdGUsIHRoaXMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn0pO1xuXG4vKipcbiAqIFdoZW4gdGhlIHRleHR1cmUgaXMgdXBkYXRlZCwgdGhpcyBldmVudCB3aWxsIGZpcmUgdG8gdXBkYXRlIHRoZSBzY2FsZSBhbmQgZnJhbWVcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5TcHJpdGUucHJvdG90eXBlLl9vblRleHR1cmVVcGRhdGUgPSBmdW5jdGlvbiAoKVxue1xuICAgIHRoaXMudGV4dHVyZURpcnR5ID0gdHJ1ZTtcblxuICAgIC8vIHNvIGlmIF93aWR0aCBpcyAwIHRoZW4gd2lkdGggd2FzIG5vdCBzZXQuLlxuICAgIGlmICh0aGlzLl93aWR0aClcbiAgICB7XG4gICAgICAgIHRoaXMuc2NhbGUueCA9IHV0aWxzLnNpZ24odGhpcy5zY2FsZS54KSAqIHRoaXMuX3dpZHRoIC8gdGhpcy50ZXh0dXJlLmZyYW1lLndpZHRoO1xuICAgIH1cblxuICAgIGlmICh0aGlzLl9oZWlnaHQpXG4gICAge1xuICAgICAgICB0aGlzLnNjYWxlLnkgPSB1dGlscy5zaWduKHRoaXMuc2NhbGUueSkgKiB0aGlzLl9oZWlnaHQgLyB0aGlzLnRleHR1cmUuZnJhbWUuaGVpZ2h0O1xuICAgIH1cbn07XG5cblNwcml0ZS5wcm90b3R5cGUuY2FjbHVsYXRlVmVydGljZXMgPSBmdW5jdGlvbiAoKVxue1xuXG4gICAgdmFyIHRleHR1cmUgPSB0aGlzLl90ZXh0dXJlLFxuICAgICAgICB3dCA9IHRoaXMud29ybGRUcmFuc2Zvcm0sXG4gICAgICAgIGEgPSB3dC5hLCBiID0gd3QuYiwgYyA9IHd0LmMsIGQgPSB3dC5kLCB0eCA9IHd0LnR4LCB0eSA9IHd0LnR5LFxuICAgICAgICB2ZXJ0ZXhEYXRhID0gdGhpcy52ZXJ0ZXhEYXRhLFxuICAgICAgICB3MCwgdzEsIGgwLCBoMSxcbiAgICAgICAgdHJpbSA9IHRleHR1cmUudHJpbTtcbiAgICBcbiAgICBpZiAodHJpbSlcbiAgICB7XG4gICAgICAgIC8vIGlmIHRoZSBzcHJpdGUgaXMgdHJpbW1lZCBhbmQgaXMgbm90IGEgdGlsaW5nc3ByaXRlIHRoZW4gd2UgbmVlZCB0byBhZGQgdGhlIGV4dHJhIHNwYWNlIGJlZm9yZSB0cmFuc2Zvcm1pbmcgdGhlIHNwcml0ZSBjb29yZHMuLlxuICAgICAgICB3MSA9IHRyaW0ueCAtIHRoaXMuYW5jaG9yLnggKiB0cmltLndpZHRoO1xuICAgICAgICB3MCA9IHcxICsgdGV4dHVyZS5jcm9wLndpZHRoO1xuXG4gICAgICAgIGgxID0gdHJpbS55IC0gdGhpcy5hbmNob3IueSAqIHRyaW0uaGVpZ2h0O1xuICAgICAgICBoMCA9IGgxICsgdGV4dHVyZS5jcm9wLmhlaWdodDtcblxuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICB3MCA9ICh0ZXh0dXJlLl9mcmFtZS53aWR0aCApICogKDEtdGhpcy5hbmNob3IueCk7XG4gICAgICAgIHcxID0gKHRleHR1cmUuX2ZyYW1lLndpZHRoICkgKiAtdGhpcy5hbmNob3IueDtcblxuICAgICAgICBoMCA9IHRleHR1cmUuX2ZyYW1lLmhlaWdodCAqICgxLXRoaXMuYW5jaG9yLnkpO1xuICAgICAgICBoMSA9IHRleHR1cmUuX2ZyYW1lLmhlaWdodCAqIC10aGlzLmFuY2hvci55O1xuICAgIH1cblxuICAgIC8vIHh5XG4gICAgdmVydGV4RGF0YVswXSA9IGEgKiB3MSArIGMgKiBoMSArIHR4O1xuICAgIHZlcnRleERhdGFbMV0gPSBkICogaDEgKyBiICogdzEgKyB0eTtcblxuICAgIC8vIHh5XG4gICAgdmVydGV4RGF0YVsyXSA9IGEgKiB3MCArIGMgKiBoMSArIHR4O1xuICAgIHZlcnRleERhdGFbM10gPSBkICogaDEgKyBiICogdzAgKyB0eTtcblxuICAgICAvLyB4eVxuICAgIHZlcnRleERhdGFbNF0gPSBhICogdzAgKyBjICogaDAgKyB0eDtcbiAgICB2ZXJ0ZXhEYXRhWzVdID0gZCAqIGgwICsgYiAqIHcwICsgdHk7XG5cbiAgICAvLyB4eVxuICAgIHZlcnRleERhdGFbNl0gPSBhICogdzEgKyBjICogaDAgKyB0eDtcbiAgICB2ZXJ0ZXhEYXRhWzddID0gZCAqIGgwICsgYiAqIHcxICsgdHk7XG5cblxufVxuXG4vKipcbipcbiogUmVuZGVycyB0aGUgb2JqZWN0IHVzaW5nIHRoZSBXZWJHTCByZW5kZXJlclxuKlxuKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcn1cbiogQHByaXZhdGVcbiovXG5TcHJpdGUucHJvdG90eXBlLl9yZW5kZXJXZWJHTCA9IGZ1bmN0aW9uIChyZW5kZXJlcilcbntcbiAgICBpZih0aGlzLnRleHR1cmVEaXJ0eSlcbiAgICB7XG4gICAgICAgIHRoaXMudGV4dHVyZURpcnR5ID0gZmFsc2U7XG5cbiAgICAgICAgdGhpcy5fb25UZXh0dXJlVXBkYXRlKCk7XG4gICAgICAgIFxuICAgICAgICB0aGlzLnZlcnRleERpcnR5ID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBpZih0aGlzLnZlcnRleERpcnR5KVxuICAgIHtcbiAgICAgICAgdGhpcy52ZXJ0ZXhEaXJ0eSA9IGZhbHNlO1xuXG4gICAgICAgIC8vIHNldCB0aGUgdmVydGV4IGRhdGFcbiAgICAgICAgdGhpcy5jYWNsdWxhdGVWZXJ0aWNlcygpO1xuXG4gICAgfVxuICAgIFxuICAgIHJlbmRlcmVyLnNldE9iamVjdFJlbmRlcmVyKHJlbmRlcmVyLnBsdWdpbnMuc3ByaXRlKTtcbiAgICByZW5kZXJlci5wbHVnaW5zLnNwcml0ZS5yZW5kZXIodGhpcyk7XG59O1xuXG4vKipcbiAqIFJldHVybnMgdGhlIGJvdW5kcyBvZiB0aGUgU3ByaXRlIGFzIGEgcmVjdGFuZ2xlLiBUaGUgYm91bmRzIGNhbGN1bGF0aW9uIHRha2VzIHRoZSB3b3JsZFRyYW5zZm9ybSBpbnRvIGFjY291bnQuXG4gKlxuICogQHBhcmFtIG1hdHJpeCB7UElYSS5NYXRyaXh9IHRoZSB0cmFuc2Zvcm1hdGlvbiBtYXRyaXggb2YgdGhlIHNwcml0ZVxuICogQHJldHVybiB7UElYSS5SZWN0YW5nbGV9IHRoZSBmcmFtaW5nIHJlY3RhbmdsZVxuICovXG5TcHJpdGUucHJvdG90eXBlLmdldEJvdW5kcyA9IGZ1bmN0aW9uIChtYXRyaXgpXG57XG4gICAgaWYoIXRoaXMuX2N1cnJlbnRCb3VuZHMpXG4gICAge1xuICAgICAgICBpZih0aGlzLnZlcnRleERpcnR5KVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnZlcnRleERpcnR5ID0gZmFsc2U7XG5cbiAgICAgICAgICAgIC8vIHNldCB0aGUgdmVydGV4IGRhdGFcbiAgICAgICAgICAgIHRoaXMuY2FjbHVsYXRlVmVydGljZXMoKTtcblxuICAgICAgICB9XG5cbiAgICAgICAgdmFyIG1pblgsXG4gICAgICAgICAgICBtYXhYLFxuICAgICAgICAgICAgbWluWSxcbiAgICAgICAgICAgIG1heFksXG4gICAgICAgICAgICB2ZXJ0ZXhEYXRhID0gdGhpcy52ZXJ0ZXhEYXRhO1xuXG4gICAgICAgIHZhciB4MSA9IHZlcnRleERhdGFbMF1cbiAgICAgICAgdmFyIHkxID0gdmVydGV4RGF0YVsxXVxuXG4gICAgICAgIHZhciB4MiA9IHZlcnRleERhdGFbMl1cbiAgICAgICAgdmFyIHkyID0gdmVydGV4RGF0YVszXVxuXG4gICAgICAgIHZhciB4MyA9IHZlcnRleERhdGFbNF1cbiAgICAgICAgdmFyIHkzID0gdmVydGV4RGF0YVs1XVxuXG4gICAgICAgIHZhciB4NCA9IHZlcnRleERhdGFbNl1cbiAgICAgICAgdmFyIHk0ID0gdmVydGV4RGF0YVs3XVxuXG4gICAgICAgIG1pblggPSB4MTtcbiAgICAgICAgbWluWCA9IHgyIDwgbWluWCA/IHgyIDogbWluWDtcbiAgICAgICAgbWluWCA9IHgzIDwgbWluWCA/IHgzIDogbWluWDtcbiAgICAgICAgbWluWCA9IHg0IDwgbWluWCA/IHg0IDogbWluWDtcblxuICAgICAgICBtaW5ZID0geTE7XG4gICAgICAgIG1pblkgPSB5MiA8IG1pblkgPyB5MiA6IG1pblk7XG4gICAgICAgIG1pblkgPSB5MyA8IG1pblkgPyB5MyA6IG1pblk7XG4gICAgICAgIG1pblkgPSB5NCA8IG1pblkgPyB5NCA6IG1pblk7XG5cbiAgICAgICAgbWF4WCA9IHgxO1xuICAgICAgICBtYXhYID0geDIgPiBtYXhYID8geDIgOiBtYXhYO1xuICAgICAgICBtYXhYID0geDMgPiBtYXhYID8geDMgOiBtYXhYO1xuICAgICAgICBtYXhYID0geDQgPiBtYXhYID8geDQgOiBtYXhYO1xuXG4gICAgICAgIG1heFkgPSB5MTtcbiAgICAgICAgbWF4WSA9IHkyID4gbWF4WSA/IHkyIDogbWF4WTtcbiAgICAgICAgbWF4WSA9IHkzID4gbWF4WSA/IHkzIDogbWF4WTtcbiAgICAgICAgbWF4WSA9IHk0ID4gbWF4WSA/IHk0IDogbWF4WTtcblxuICAgICAgICAvLyBjaGVjayBmb3IgY2hpbGRyZW5cbiAgICAgICAgaWYodGhpcy5jaGlsZHJlbi5sZW5ndGgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHZhciBjaGlsZEJvdW5kcyA9IHRoaXMuY29udGFpbmVyR2V0Qm91bmRzKCk7XG5cbiAgICAgICAgICAgIHcwID0gY2hpbGRCb3VuZHMueDtcbiAgICAgICAgICAgIHcxID0gY2hpbGRCb3VuZHMueCArIGNoaWxkQm91bmRzLndpZHRoO1xuICAgICAgICAgICAgaDAgPSBjaGlsZEJvdW5kcy55O1xuICAgICAgICAgICAgaDEgPSBjaGlsZEJvdW5kcy55ICsgY2hpbGRCb3VuZHMuaGVpZ2h0O1xuXG4gICAgICAgICAgICBtaW5YID0gKG1pblggPCB3MCkgPyBtaW5YIDogdzA7XG4gICAgICAgICAgICBtaW5ZID0gKG1pblkgPCBoMCkgPyBtaW5ZIDogaDA7XG5cbiAgICAgICAgICAgIG1heFggPSAobWF4WCA+IHcxKSA/IG1heFggOiB3MTtcbiAgICAgICAgICAgIG1heFkgPSAobWF4WSA+IGgxKSA/IG1heFkgOiBoMTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBib3VuZHMgPSB0aGlzLl9ib3VuZHM7XG5cbiAgICAgICAgYm91bmRzLnggPSBtaW5YO1xuICAgICAgICBib3VuZHMud2lkdGggPSBtYXhYIC0gbWluWDtcblxuICAgICAgICBib3VuZHMueSA9IG1pblk7XG4gICAgICAgIGJvdW5kcy5oZWlnaHQgPSBtYXhZIC0gbWluWTtcblxuICAgICAgICAvLyBzdG9yZSBhIHJlZmVyZW5jZSBzbyB0aGF0IGlmIHRoaXMgZnVuY3Rpb24gZ2V0cyBjYWxsZWQgYWdhaW4gaW4gdGhlIHJlbmRlciBjeWNsZSB3ZSBkbyBub3QgaGF2ZSB0byByZWNhbGN1bGF0ZVxuICAgICAgICB0aGlzLl9jdXJyZW50Qm91bmRzID0gYm91bmRzO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLl9jdXJyZW50Qm91bmRzO1xufTtcblxuLyoqXG4gKiBHZXRzIHRoZSBsb2NhbCBib3VuZHMgb2YgdGhlIHNwcml0ZSBvYmplY3QuXG4gKlxuICovXG5TcHJpdGUucHJvdG90eXBlLmdldExvY2FsQm91bmRzID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLl9ib3VuZHMueCA9IC10aGlzLl90ZXh0dXJlLl9mcmFtZS53aWR0aCAqIHRoaXMuYW5jaG9yLng7XG4gICAgdGhpcy5fYm91bmRzLnkgPSAtdGhpcy5fdGV4dHVyZS5fZnJhbWUuaGVpZ2h0ICogdGhpcy5hbmNob3IueTtcbiAgICB0aGlzLl9ib3VuZHMud2lkdGggPSB0aGlzLl90ZXh0dXJlLl9mcmFtZS53aWR0aDtcbiAgICB0aGlzLl9ib3VuZHMuaGVpZ2h0ID0gdGhpcy5fdGV4dHVyZS5fZnJhbWUuaGVpZ2h0O1xuICAgIHJldHVybiB0aGlzLl9ib3VuZHM7XG59O1xuXG4vKipcbiogVGVzdHMgaWYgYSBwb2ludCBpcyBpbnNpZGUgdGhpcyBzcHJpdGVcbipcbiogQHBhcmFtIHBvaW50IHtQSVhJLlBvaW50fSB0aGUgcG9pbnQgdG8gdGVzdFxuKiBAcmV0dXJuIHtib29sZWFufSB0aGUgcmVzdWx0IG9mIHRoZSB0ZXN0XG4qL1xuU3ByaXRlLnByb3RvdHlwZS5jb250YWluc1BvaW50ID0gZnVuY3Rpb24oIHBvaW50IClcbntcbiAgICB0aGlzLndvcmxkVHJhbnNmb3JtLmFwcGx5SW52ZXJzZShwb2ludCwgIHRlbXBQb2ludCk7XG5cbiAgICB2YXIgd2lkdGggPSB0aGlzLl90ZXh0dXJlLl9mcmFtZS53aWR0aDtcbiAgICB2YXIgaGVpZ2h0ID0gdGhpcy5fdGV4dHVyZS5fZnJhbWUuaGVpZ2h0O1xuICAgIHZhciB4MSA9IC13aWR0aCAqIHRoaXMuYW5jaG9yLng7XG4gICAgdmFyIHkxO1xuXG4gICAgaWYgKCB0ZW1wUG9pbnQueCA+IHgxICYmIHRlbXBQb2ludC54IDwgeDEgKyB3aWR0aCApXG4gICAge1xuICAgICAgICB5MSA9IC1oZWlnaHQgKiB0aGlzLmFuY2hvci55O1xuXG4gICAgICAgIGlmICggdGVtcFBvaW50LnkgPiB5MSAmJiB0ZW1wUG9pbnQueSA8IHkxICsgaGVpZ2h0IClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2U7XG59O1xuXG4vKipcbiogUmVuZGVycyB0aGUgb2JqZWN0IHVzaW5nIHRoZSBDYW52YXMgcmVuZGVyZXJcbipcbiogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLkNhbnZhc1JlbmRlcmVyfSBUaGUgcmVuZGVyZXJcbiogQHByaXZhdGVcbiovXG5TcHJpdGUucHJvdG90eXBlLl9yZW5kZXJDYW52YXMgPSBmdW5jdGlvbiAocmVuZGVyZXIpXG57XG4gICAgaWYgKHRoaXMudGV4dHVyZS5jcm9wLndpZHRoIDw9IDAgfHwgdGhpcy50ZXh0dXJlLmNyb3AuaGVpZ2h0IDw9IDApXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFyIGNvbXBvc2l0ZU9wZXJhdGlvbiA9IHJlbmRlcmVyLmJsZW5kTW9kZXNbdGhpcy5ibGVuZE1vZGVdO1xuICAgIGlmIChjb21wb3NpdGVPcGVyYXRpb24gIT09IHJlbmRlcmVyLmNvbnRleHQuZ2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uKVxuICAgIHtcbiAgICAgICAgcmVuZGVyZXIuY29udGV4dC5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb24gPSBjb21wb3NpdGVPcGVyYXRpb247XG4gICAgfVxuXG4gICAgLy8gIElnbm9yZSBudWxsIHNvdXJjZXNcbiAgICBpZiAodGhpcy50ZXh0dXJlLnZhbGlkKVxuICAgIHtcbiAgICAgICAgdmFyIHRleHR1cmUgPSB0aGlzLl90ZXh0dXJlLFxuICAgICAgICAgICAgd3QgPSB0aGlzLndvcmxkVHJhbnNmb3JtLFxuICAgICAgICAgICAgZHgsXG4gICAgICAgICAgICBkeSxcbiAgICAgICAgICAgIHdpZHRoLFxuICAgICAgICAgICAgaGVpZ2h0O1xuXG4gICAgICAgIHJlbmRlcmVyLmNvbnRleHQuZ2xvYmFsQWxwaGEgPSB0aGlzLndvcmxkQWxwaGE7XG5cbiAgICAgICAgLy8gSWYgc21vb3RoaW5nRW5hYmxlZCBpcyBzdXBwb3J0ZWQgYW5kIHdlIG5lZWQgdG8gY2hhbmdlIHRoZSBzbW9vdGhpbmcgcHJvcGVydHkgZm9yIHRoaXMgdGV4dHVyZVxuICAgICAgICB2YXIgc21vb3RoaW5nRW5hYmxlZCA9IHRleHR1cmUuYmFzZVRleHR1cmUuc2NhbGVNb2RlID09PSBDT05TVC5TQ0FMRV9NT0RFUy5MSU5FQVI7XG4gICAgICAgIGlmIChyZW5kZXJlci5zbW9vdGhQcm9wZXJ0eSAmJiByZW5kZXJlci5jb250ZXh0W3JlbmRlcmVyLnNtb290aFByb3BlcnR5XSAhPT0gc21vb3RoaW5nRW5hYmxlZClcbiAgICAgICAge1xuICAgICAgICAgICAgcmVuZGVyZXIuY29udGV4dFtyZW5kZXJlci5zbW9vdGhQcm9wZXJ0eV0gPSBzbW9vdGhpbmdFbmFibGVkO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gSWYgdGhlIHRleHR1cmUgaXMgdHJpbW1lZCB3ZSBvZmZzZXQgYnkgdGhlIHRyaW0geC95LCBvdGhlcndpc2Ugd2UgdXNlIHRoZSBmcmFtZSBkaW1lbnNpb25zXG5cbiAgICAgICAgaWYodGV4dHVyZS5yb3RhdGUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHdpZHRoID0gdGV4dHVyZS5jcm9wLmhlaWdodDtcbiAgICAgICAgICAgIGhlaWdodCA9IHRleHR1cmUuY3JvcC53aWR0aDtcblxuICAgICAgICAgICAgZHggPSAodGV4dHVyZS50cmltKSA/IHRleHR1cmUudHJpbS55IC0gdGhpcy5hbmNob3IueSAqIHRleHR1cmUudHJpbS5oZWlnaHQgOiB0aGlzLmFuY2hvci55ICogLXRleHR1cmUuX2ZyYW1lLmhlaWdodDtcbiAgICAgICAgICAgIGR5ID0gKHRleHR1cmUudHJpbSkgPyB0ZXh0dXJlLnRyaW0ueCAtIHRoaXMuYW5jaG9yLnggKiB0ZXh0dXJlLnRyaW0ud2lkdGggOiB0aGlzLmFuY2hvci54ICogLXRleHR1cmUuX2ZyYW1lLndpZHRoO1xuICAgICAgIFxuICAgICAgICAgICAgZHggKz0gd2lkdGg7XG5cbiAgICAgICAgICAgIHd0LnR4ID0gZHkgKiB3dC5hICsgZHggKiB3dC5jICsgd3QudHg7XG4gICAgICAgICAgICB3dC50eSA9IGR5ICogd3QuYiArIGR4ICogd3QuZCArIHd0LnR5O1xuXG4gICAgICAgICAgICB2YXIgdGVtcCA9IHd0LmE7XG4gICAgICAgICAgICB3dC5hICA9IC13dC5jO1xuICAgICAgICAgICAgd3QuYyAgPSAgdGVtcDtcblxuICAgICAgICAgICAgdGVtcCA9IHd0LmI7XG4gICAgICAgICAgICB3dC5iICA9IC13dC5kO1xuICAgICAgICAgICAgd3QuZCAgPSAgdGVtcDtcblxuICAgICAgICAgICAgLy8gdGhlIGFuY2hvciBoYXMgYWxyZWFkeSBiZWVuIGFwcGxpZWQgYWJvdmUsIHNvIGxldHMgc2V0IGl0IHRvIHplcm9cbiAgICAgICAgICAgIGR4ID0gMDtcbiAgICAgICAgICAgIGR5ID0gMDtcblxuICAgICAgICB9XG4gICAgICAgIGVsc2VcbiAgICAgICAge1xuICAgICAgICAgICAgd2lkdGggPSB0ZXh0dXJlLmNyb3Aud2lkdGg7XG4gICAgICAgICAgICBoZWlnaHQgPSB0ZXh0dXJlLmNyb3AuaGVpZ2h0O1xuXG4gICAgICAgICAgICBkeCA9ICh0ZXh0dXJlLnRyaW0pID8gdGV4dHVyZS50cmltLnggLSB0aGlzLmFuY2hvci54ICogdGV4dHVyZS50cmltLndpZHRoIDogdGhpcy5hbmNob3IueCAqIC10ZXh0dXJlLl9mcmFtZS53aWR0aDtcbiAgICAgICAgICAgIGR5ID0gKHRleHR1cmUudHJpbSkgPyB0ZXh0dXJlLnRyaW0ueSAtIHRoaXMuYW5jaG9yLnkgKiB0ZXh0dXJlLnRyaW0uaGVpZ2h0IDogdGhpcy5hbmNob3IueSAqIC10ZXh0dXJlLl9mcmFtZS5oZWlnaHQ7XG4gICAgICAgIH1cblxuXG5cbiAgICAgICAgLy8gQWxsb3cgZm9yIHBpeGVsIHJvdW5kaW5nXG4gICAgICAgIGlmIChyZW5kZXJlci5yb3VuZFBpeGVscylcbiAgICAgICAge1xuICAgICAgICAgICAgcmVuZGVyZXIuY29udGV4dC5zZXRUcmFuc2Zvcm0oXG4gICAgICAgICAgICAgICAgd3QuYSxcbiAgICAgICAgICAgICAgICB3dC5iLFxuICAgICAgICAgICAgICAgIHd0LmMsXG4gICAgICAgICAgICAgICAgd3QuZCxcbiAgICAgICAgICAgICAgICAod3QudHggKiByZW5kZXJlci5yZXNvbHV0aW9uKSB8IDAsXG4gICAgICAgICAgICAgICAgKHd0LnR5ICogcmVuZGVyZXIucmVzb2x1dGlvbikgfCAwXG4gICAgICAgICAgICApO1xuXG4gICAgICAgICAgICBkeCA9IGR4IHwgMDtcbiAgICAgICAgICAgIGR5ID0gZHkgfCAwO1xuICAgICAgICB9XG4gICAgICAgIGVsc2VcbiAgICAgICAge1xuXG4gICAgICAgICAgICByZW5kZXJlci5jb250ZXh0LnNldFRyYW5zZm9ybShcbiAgICAgICAgICAgICAgICB3dC5hLFxuICAgICAgICAgICAgICAgIHd0LmIsXG4gICAgICAgICAgICAgICAgd3QuYyxcbiAgICAgICAgICAgICAgICB3dC5kLFxuICAgICAgICAgICAgICAgIHd0LnR4ICogcmVuZGVyZXIucmVzb2x1dGlvbixcbiAgICAgICAgICAgICAgICB3dC50eSAqIHJlbmRlcmVyLnJlc29sdXRpb25cbiAgICAgICAgICAgICk7XG5cblxuICAgICAgICB9XG5cbiAgICAgICAgdmFyIHJlc29sdXRpb24gPSB0ZXh0dXJlLmJhc2VUZXh0dXJlLnJlc29sdXRpb247XG5cbiAgICAgICAgaWYgKHRoaXMudGludCAhPT0gMHhGRkZGRkYpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmNhY2hlZFRpbnQgIT09IHRoaXMudGludClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB0aGlzLmNhY2hlZFRpbnQgPSB0aGlzLnRpbnQ7XG5cbiAgICAgICAgICAgICAgICAvLyBUT0RPIGNsZWFuIHVwIGNhY2hpbmcgLSBob3cgdG8gY2xlYW4gdXAgdGhlIGNhY2hlcz9cbiAgICAgICAgICAgICAgICB0aGlzLnRpbnRlZFRleHR1cmUgPSBDYW52YXNUaW50ZXIuZ2V0VGludGVkVGV4dHVyZSh0aGlzLCB0aGlzLnRpbnQpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZW5kZXJlci5jb250ZXh0LmRyYXdJbWFnZShcbiAgICAgICAgICAgICAgICB0aGlzLnRpbnRlZFRleHR1cmUsXG4gICAgICAgICAgICAgICAgMCxcbiAgICAgICAgICAgICAgICAwLFxuICAgICAgICAgICAgICAgIHdpZHRoICogcmVzb2x1dGlvbixcbiAgICAgICAgICAgICAgICBoZWlnaHQgKiByZXNvbHV0aW9uLFxuICAgICAgICAgICAgICAgIGR4ICogcmVuZGVyZXIucmVzb2x1dGlvbixcbiAgICAgICAgICAgICAgICBkeSAqIHJlbmRlcmVyLnJlc29sdXRpb24sXG4gICAgICAgICAgICAgICAgd2lkdGggKiByZW5kZXJlci5yZXNvbHV0aW9uLFxuICAgICAgICAgICAgICAgIGhlaWdodCAqIHJlbmRlcmVyLnJlc29sdXRpb25cbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgICByZW5kZXJlci5jb250ZXh0LmRyYXdJbWFnZShcbiAgICAgICAgICAgICAgICB0ZXh0dXJlLmJhc2VUZXh0dXJlLnNvdXJjZSxcbiAgICAgICAgICAgICAgICB0ZXh0dXJlLmNyb3AueCAqIHJlc29sdXRpb24sXG4gICAgICAgICAgICAgICAgdGV4dHVyZS5jcm9wLnkgKiByZXNvbHV0aW9uLFxuICAgICAgICAgICAgICAgIHdpZHRoICogcmVzb2x1dGlvbixcbiAgICAgICAgICAgICAgICBoZWlnaHQgKiByZXNvbHV0aW9uLFxuICAgICAgICAgICAgICAgIGR4ICAqIHJlbmRlcmVyLnJlc29sdXRpb24sXG4gICAgICAgICAgICAgICAgZHkgICogcmVuZGVyZXIucmVzb2x1dGlvbixcbiAgICAgICAgICAgICAgICB3aWR0aCAqIHJlbmRlcmVyLnJlc29sdXRpb24sXG4gICAgICAgICAgICAgICAgaGVpZ2h0ICogcmVuZGVyZXIucmVzb2x1dGlvblxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgIH1cbn07XG5cbi8qKlxuICogRGVzdHJveXMgdGhpcyBzcHJpdGUgYW5kIG9wdGlvbmFsbHkgaXRzIHRleHR1cmVcbiAqXG4gKiBAcGFyYW0gW2Rlc3Ryb3lUZXh0dXJlPWZhbHNlXSB7Ym9vbGVhbn0gU2hvdWxkIGl0IGRlc3Ryb3kgdGhlIGN1cnJlbnQgdGV4dHVyZSBvZiB0aGUgc3ByaXRlIGFzIHdlbGxcbiAqIEBwYXJhbSBbZGVzdHJveUJhc2VUZXh0dXJlPWZhbHNlXSB7Ym9vbGVhbn0gU2hvdWxkIGl0IGRlc3Ryb3kgdGhlIGJhc2UgdGV4dHVyZSBvZiB0aGUgc3ByaXRlIGFzIHdlbGxcbiAqL1xuU3ByaXRlLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKGRlc3Ryb3lUZXh0dXJlLCBkZXN0cm95QmFzZVRleHR1cmUpXG57XG4gICAgQ29udGFpbmVyLnByb3RvdHlwZS5kZXN0cm95LmNhbGwodGhpcyk7XG5cbiAgICB0aGlzLmFuY2hvciA9IG51bGw7XG5cbiAgICBpZiAoZGVzdHJveVRleHR1cmUpXG4gICAge1xuICAgICAgICB0aGlzLl90ZXh0dXJlLmRlc3Ryb3koZGVzdHJveUJhc2VUZXh0dXJlKTtcbiAgICB9XG5cbiAgICB0aGlzLl90ZXh0dXJlID0gbnVsbDtcbiAgICB0aGlzLnNoYWRlciA9IG51bGw7XG59O1xuXG4vLyBzb21lIGhlbHBlciBmdW5jdGlvbnMuLlxuXG4vKipcbiAqIEhlbHBlciBmdW5jdGlvbiB0aGF0IGNyZWF0ZXMgYSBzcHJpdGUgdGhhdCB3aWxsIGNvbnRhaW4gYSB0ZXh0dXJlIGZyb20gdGhlIFRleHR1cmVDYWNoZSBiYXNlZCBvbiB0aGUgZnJhbWVJZFxuICogVGhlIGZyYW1lIGlkcyBhcmUgY3JlYXRlZCB3aGVuIGEgVGV4dHVyZSBwYWNrZXIgZmlsZSBoYXMgYmVlbiBsb2FkZWRcbiAqXG4gKiBAc3RhdGljXG4gKiBAcGFyYW0gZnJhbWVJZCB7c3RyaW5nfSBUaGUgZnJhbWUgSWQgb2YgdGhlIHRleHR1cmUgaW4gdGhlIGNhY2hlXG4gKiBAcGFyYW0gW2Nyb3Nzb3JpZ2luPShhdXRvKV0ge2Jvb2xlYW59IGlmIHlvdSB3YW50IHRvIHNwZWNpZnkgdGhlIGNyb3NzLW9yaWdpbiBwYXJhbWV0ZXJcbiAqIEBwYXJhbSBbc2NhbGVNb2RlPVBJWEkuU0NBTEVfTU9ERVMuREVGQVVMVF0ge251bWJlcn0gaWYgeW91IHdhbnQgdG8gc3BlY2lmeSB0aGUgc2NhbGUgbW9kZSwgc2VlIHtAbGluayBQSVhJLlNDQUxFX01PREVTfSBmb3IgcG9zc2libGUgdmFsdWVzXG4gKiBAcmV0dXJuIHtQSVhJLlNwcml0ZX0gQSBuZXcgU3ByaXRlIHVzaW5nIGEgdGV4dHVyZSBmcm9tIHRoZSB0ZXh0dXJlIGNhY2hlIG1hdGNoaW5nIHRoZSBmcmFtZUlkXG4gKi9cblNwcml0ZS5mcm9tRnJhbWUgPSBmdW5jdGlvbiAoZnJhbWVJZClcbntcbiAgICB2YXIgdGV4dHVyZSA9IHV0aWxzLlRleHR1cmVDYWNoZVtmcmFtZUlkXTtcblxuICAgIGlmICghdGV4dHVyZSlcbiAgICB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignVGhlIGZyYW1lSWQgXCInICsgZnJhbWVJZCArICdcIiBkb2VzIG5vdCBleGlzdCBpbiB0aGUgdGV4dHVyZSBjYWNoZScpO1xuICAgIH1cblxuICAgIHJldHVybiBuZXcgU3ByaXRlKHRleHR1cmUpO1xufTtcblxuLyoqXG4gKiBIZWxwZXIgZnVuY3Rpb24gdGhhdCBjcmVhdGVzIGEgc3ByaXRlIHRoYXQgd2lsbCBjb250YWluIGEgdGV4dHVyZSBiYXNlZCBvbiBhbiBpbWFnZSB1cmxcbiAqIElmIHRoZSBpbWFnZSBpcyBub3QgaW4gdGhlIHRleHR1cmUgY2FjaGUgaXQgd2lsbCBiZSBsb2FkZWRcbiAqXG4gKiBAc3RhdGljXG4gKiBAcGFyYW0gaW1hZ2VJZCB7c3RyaW5nfSBUaGUgaW1hZ2UgdXJsIG9mIHRoZSB0ZXh0dXJlXG4gKiBAcmV0dXJuIHtQSVhJLlNwcml0ZX0gQSBuZXcgU3ByaXRlIHVzaW5nIGEgdGV4dHVyZSBmcm9tIHRoZSB0ZXh0dXJlIGNhY2hlIG1hdGNoaW5nIHRoZSBpbWFnZSBpZFxuICovXG5TcHJpdGUuZnJvbUltYWdlID0gZnVuY3Rpb24gKGltYWdlSWQsIGNyb3Nzb3JpZ2luLCBzY2FsZU1vZGUpXG57XG4gICAgcmV0dXJuIG5ldyBTcHJpdGUoVGV4dHVyZS5mcm9tSW1hZ2UoaW1hZ2VJZCwgY3Jvc3NvcmlnaW4sIHNjYWxlTW9kZSkpO1xufTtcbiIsInZhciBPYmplY3RSZW5kZXJlciA9IHJlcXVpcmUoJy4uLy4uL3JlbmRlcmVycy93ZWJnbC91dGlscy9PYmplY3RSZW5kZXJlcicpLFxuICAgIFdlYkdMUmVuZGVyZXIgPSByZXF1aXJlKCcuLi8uLi9yZW5kZXJlcnMvd2ViZ2wvV2ViR0xSZW5kZXJlcicpLFxuICAgIFRleHR1cmVTaGFkZXIgPSByZXF1aXJlKCcuLi8uLi9yZW5kZXJlcnMvd2ViZ2wvc2hhZGVycy9fVGV4dHVyZVNoYWRlcicpLFxuICAgIGNyZWF0ZUluZGljZXNGb3JRdWFkcyA9IHJlcXVpcmUoJy4uLy4uL3V0aWxzL2NyZWF0ZUluZGljZXNGb3JRdWFkcycpLFxuICAgIGdlbmVyYXRlTXVsdGlUZXh0dXJlU2hhZGVyID0gcmVxdWlyZSgnLi9nZW5lcmF0ZU11bHRpVGV4dHVyZVNoYWRlcicpLFxuICAgIENPTlNUID0gcmVxdWlyZSgnLi4vLi4vY29uc3QnKSxcbiAgICBnbENvcmUgPSByZXF1aXJlKCdwaXhpLWdsLWNvcmUnKTtcblxuLyoqXG4gKiBAYXV0aG9yIE1hdCBHcm92ZXNcbiAqXG4gKiBCaWcgdGhhbmtzIHRvIHRoZSB2ZXJ5IGNsZXZlciBNYXR0IERlc0xhdXJpZXJzIDxtYXR0ZGVzbD4gaHR0cHM6Ly9naXRodWIuY29tL21hdHRkZXNsL1xuICogZm9yIGNyZWF0aW5nIHRoZSBvcmlnaW5hbCBwaXhpIHZlcnNpb24hXG4gKiBBbHNvIGEgdGhhbmtzIHRvIGh0dHBzOi8vZ2l0aHViLmNvbS9iY2hldmFsaWVyIGZvciB0d2Vha2luZyB0aGUgdGludCBhbmQgYWxwaGEgc28gdGhhdCB0aGV5IG5vdyBzaGFyZSA0IGJ5dGVzIG9uIHRoZSB2ZXJ0ZXggYnVmZmVyXG4gKlxuICogSGVhdmlseSBpbnNwaXJlZCBieSBMaWJHRFgncyBTcHJpdGVSZW5kZXJlcjpcbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS9saWJnZHgvbGliZ2R4L2Jsb2IvbWFzdGVyL2dkeC9zcmMvY29tL2JhZGxvZ2ljL2dkeC9ncmFwaGljcy9nMmQvU3ByaXRlUmVuZGVyZXIuamF2YVxuICovXG5cbi8qKlxuICogUmVuZGVyZXIgZGVkaWNhdGVkIHRvIGRyYXdpbmcgYW5kIGJhdGNoaW5nIHNwcml0ZXMuXG4gKlxuICogQGNsYXNzXG4gKiBAcHJpdmF0ZVxuICogQG1lbWJlcm9mIFBJWElcbiAqIEBleHRlbmRzIFBJWEkuT2JqZWN0UmVuZGVyZXJcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5XZWJHTFJlbmRlcmVyfSBUaGUgcmVuZGVyZXIgdGhpcyBzcHJpdGUgYmF0Y2ggd29ya3MgZm9yLlxuICovXG5mdW5jdGlvbiBTcHJpdGVSZW5kZXJlcihyZW5kZXJlcilcbntcbiAgICBPYmplY3RSZW5kZXJlci5jYWxsKHRoaXMsIHJlbmRlcmVyKTtcblxuICAgIC8qKlxuICAgICAqIE51bWJlciBvZiB2YWx1ZXMgc2VudCBpbiB0aGUgdmVydGV4IGJ1ZmZlci5cbiAgICAgKiBwb3NpdGlvblgsIHBvc2l0aW9uWSwgY29sb3JSLCBjb2xvckcsIGNvbG9yQiA9IDVcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLnZlcnRTaXplID0gNTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBzaXplIG9mIHRoZSB2ZXJ0ZXggaW5mb3JtYXRpb24gaW4gYnl0ZXMuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy52ZXJ0Qnl0ZVNpemUgPSB0aGlzLnZlcnRTaXplICogNDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBudW1iZXIgb2YgaW1hZ2VzIGluIHRoZSBTcHJpdGVCYXRjaCBiZWZvcmUgaXQgZmx1c2hlcy5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLnNpemUgPSBDT05TVC5TUFJJVEVfQkFUQ0hfU0laRTsgLy8gMjAwMCBpcyBhIG5pY2UgYmFsYW5jZSBiZXR3ZWVuIG1vYmlsZSAvIGRlc2t0b3BcblxuICAgIC8vIHRoZSB0b3RhbCBudW1iZXIgb2YgYnl0ZXMgaW4gb3VyIGJhdGNoXG4gICAgdmFyIG51bVZlcnRzID0gKHRoaXMuc2l6ZSAqIDQpICogdGhpcy52ZXJ0Qnl0ZVNpemU7XG5cbiAgICAvLyB0aGUgdG90YWwgbnVtYmVyIG9mIGluZGljZXMgaW4gb3VyIGJhdGNoLCB0aGVyZSBhcmUgNiBwb2ludHMgcGVyIHF1YWQuXG4gICAgdmFyIG51bUluZGljZXMgPSB0aGlzLnNpemUgKiA2O1xuXG4gICAgLyoqXG4gICAgICogSG9sZHMgdGhlIHZlcnRleCBkYXRhIHRoYXQgd2lsbCBiZSBzZW50IHRvIHRoZSB2ZXJ0ZXggc2hhZGVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7QXJyYXlCdWZmZXJ9XG4gICAgICovXG4gICAgdGhpcy52ZXJ0aWNlcyA9IG5ldyBBcnJheUJ1ZmZlcihudW1WZXJ0cyk7XG5cbiAgICAvKipcbiAgICAgKiBWaWV3IG9uIHRoZSB2ZXJ0aWNlcyBhcyBhIEZsb2F0MzJBcnJheSBmb3IgcG9zaXRpb25zXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtGbG9hdDMyQXJyYXl9XG4gICAgICovXG4gICAgdGhpcy5wb3NpdGlvbnMgPSBuZXcgRmxvYXQzMkFycmF5KHRoaXMudmVydGljZXMpO1xuICAgIFxuICAgIC8qKlxuICAgICAqIFZpZXcgb24gdGhlIHZlcnRpY2VzIGFzIGEgVWludDMyQXJyYXkgZm9yIHV2c1xuICAgICAqXG4gICAgICogQG1lbWJlciB7RmxvYXQzMkFycmF5fVxuICAgICAqL1xuICAgIHRoaXMudXZzID0gbmV3IFVpbnQzMkFycmF5KHRoaXMudmVydGljZXMpO1xuXG4gICAgLyoqXG4gICAgICogVmlldyBvbiB0aGUgdmVydGljZXMgYXMgYSBVaW50MzJBcnJheSBmb3IgY29sb3JzXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtVaW50MzJBcnJheX1cbiAgICAgKi9cbiAgICB0aGlzLmNvbG9ycyA9IG5ldyBVaW50MzJBcnJheSh0aGlzLnZlcnRpY2VzKTtcblxuICAgIC8qKlxuICAgICAqIEhvbGRzIHRoZSBpbmRpY2VzIG9mIHRoZSBnZW9tZXRyeSAocXVhZHMpIHRvIGRyYXdcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1VpbnQxNkFycmF5fVxuICAgICAqL1xuICAgIHRoaXMuaW5kaWNlcyA9IGNyZWF0ZUluZGljZXNGb3JRdWFkcyh0aGlzLnNpemUpXG5cbiAgICAvKipcbiAgICAgKiBUaGUgZGVmYXVsdCBzaGFkZXIgdGhhdCBpcyB1c2VkIGlmIGEgc3ByaXRlIGRvZXNuJ3QgaGF2ZSBhIG1vcmUgc3BlY2lmaWMgb25lLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5TaGFkZXJ9XG4gICAgICovXG4gICAgdGhpcy5zaGFkZXIgPSBudWxsO1xuXG4gICAgdGhpcy50ZXh0dXJlQ291bnQgPSAwO1xuICAgIHRoaXMuY3VycmVudEluZGV4ID0gMDtcbiAgXG4gICAgdGhpcy5ncm91cENvdW50ID0gMDtcbiAgICB0aGlzLmdyb3VwcyA9IFtdO1xuICAgIFxuICAgIC8vVE9ETyAtIDMwMCBpcyBhIGJpdCBtYWdpYywgZmlndXJlIG91dCBhIG5pY2VyIGFtb3VudCFcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuc2l6ZTsgaSsrKSBcbiAgICB7XG4gICAgICAgIHRoaXMuZ3JvdXBzW2ldID0ge3RleHR1cmVzOltdLCB0ZXh0dXJlQ291bnQ6MCwgaWRzOltdLCBzaXplOjAsIHN0YXJ0OjAsIGJsZW5kOjB9OyBcbiAgICB9O1xuICAgIFxuICAgIHRoaXMuY3VycmVudEdyb3VwID0gdGhpcy5ncm91cHNbdGhpcy5ncm91cENvdW50KytdO1xuXG4gICAgdGhpcy5jdXJyZW50VGV4dHVyZSA9IG51bGw7ICAgIFxufVxuXG5cblNwcml0ZVJlbmRlcmVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoT2JqZWN0UmVuZGVyZXIucHJvdG90eXBlKTtcblNwcml0ZVJlbmRlcmVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFNwcml0ZVJlbmRlcmVyO1xubW9kdWxlLmV4cG9ydHMgPSBTcHJpdGVSZW5kZXJlcjtcblxuV2ViR0xSZW5kZXJlci5yZWdpc3RlclBsdWdpbignc3ByaXRlJywgU3ByaXRlUmVuZGVyZXIpO1xuXG4vKipcbiAqIFNldHMgdXAgdGhlIHJlbmRlcmVyIGNvbnRleHQgYW5kIG5lY2Vzc2FyeSBidWZmZXJzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0gZ2wge1dlYkdMUmVuZGVyaW5nQ29udGV4dH0gdGhlIGN1cnJlbnQgV2ViR0wgZHJhd2luZyBjb250ZXh0XG4gKi9cblNwcml0ZVJlbmRlcmVyLnByb3RvdHlwZS5vbkNvbnRleHRDaGFuZ2UgPSBmdW5jdGlvbiAoKVxue1xuICAgIHZhciBnbCA9IHRoaXMucmVuZGVyZXIuZ2w7XG5cbiAgICB0aGlzLk1BWF9URVhUVUVTID0gZ2wuZ2V0UGFyYW1ldGVyKGdsLk1BWF9URVhUVVJFX0lNQUdFX1VOSVRTKTtcblxuICAgIHRoaXMuX3NoYWRlciA9IGdlbmVyYXRlTXVsdGlUZXh0dXJlU2hhZGVyKGdsLCB0aGlzLk1BWF9URVhUVUVTKS8vbmV3IFRleHR1cmVTaGFkZXIoZ2wpO1xuXG4gICAgLy8gc2V0dXAgZGVmYXVsdCBzaGFkZXJcbiAgICB0aGlzLnNoYWRlciA9IHRoaXMucmVuZGVyZXIuc2hhZGVyTWFuYWdlci5kZWZhdWx0U2hhZGVyO1xuXG4gICAgLy8gY3JlYXRlIGEgY291cGxlIG9mIGJ1ZmZlcnNcbiAgICB0aGlzLnZlcnRleEJ1ZmZlciA9IGdsQ29yZS5HTEJ1ZmZlci5jcmVhdGVWZXJ0ZXhCdWZmZXIoZ2wsIG51bGwsIGdsLkRZTkFNSUNfRFJBVyk7XG4gICAgdGhpcy5pbmRleEJ1ZmZlciA9IGdsQ29yZS5HTEJ1ZmZlci5jcmVhdGVJbmRleEJ1ZmZlcihnbCwgdGhpcy5pbmRpY2VzLCBnbC5TVEFUSUNfRFJBVyk7XG5cbiAgICAvLyBidWlsZCB0aGUgdmFvIG9iamVjdCB0aGF0IHdpbGwgcmVuZGVyLi5cbiAgICB0aGlzLnZhbyA9IG5ldyBnbENvcmUuVmVydGV4QXJyYXlPYmplY3QoZ2wpO1xuXG4gICAgdGhpcy52YW8uYWRkSW5kZXgodGhpcy5pbmRleEJ1ZmZlcik7XG4gICAgdGhpcy52YW8uYWRkQXR0cmlidXRlKHRoaXMudmVydGV4QnVmZmVyLCB0aGlzLl9zaGFkZXIuYXR0cmlidXRlcy5hVmVydGV4UG9zaXRpb24sIGdsLkZMT0FULCBmYWxzZSwgdGhpcy52ZXJ0Qnl0ZVNpemUsIDApO1xuICAgIHRoaXMudmFvLmFkZEF0dHJpYnV0ZSh0aGlzLnZlcnRleEJ1ZmZlciwgdGhpcy5fc2hhZGVyLmF0dHJpYnV0ZXMuYVRleHR1cmVDb29yZCwgZ2wuVU5TSUdORURfU0hPUlQsIHRydWUsIHRoaXMudmVydEJ5dGVTaXplLCAyICogNCk7XG4gICAgdGhpcy52YW8uYWRkQXR0cmlidXRlKHRoaXMudmVydGV4QnVmZmVyLCB0aGlzLl9zaGFkZXIuYXR0cmlidXRlcy5hQ29sb3IsIGdsLlVOU0lHTkVEX0JZVEUsIHRydWUsIHRoaXMudmVydEJ5dGVTaXplLCAzICogNCk7XG4gICAgdGhpcy52YW8uYWRkQXR0cmlidXRlKHRoaXMudmVydGV4QnVmZmVyLCB0aGlzLl9zaGFkZXIuYXR0cmlidXRlcy5hVGV4dHVyZUlkLCBnbC5GTE9BVCwgZmFsc2UsIHRoaXMudmVydEJ5dGVTaXplLCA0ICogNCk7XG5cbiAgICB0aGlzLmN1cnJlbnRCbGVuZE1vZGUgPSA5OTk5OTtcbn07XG5cbi8qKlxuICogUmVuZGVycyB0aGUgc3ByaXRlIG9iamVjdC5cbiAqXG4gKiBAcGFyYW0gc3ByaXRlIHtQSVhJLlNwcml0ZX0gdGhlIHNwcml0ZSB0byByZW5kZXIgd2hlbiB1c2luZyB0aGlzIHNwcml0ZWJhdGNoXG4gKi9cblNwcml0ZVJlbmRlcmVyLnByb3RvdHlwZS5yZW5kZXIgPSBmdW5jdGlvbiAoc3ByaXRlKVxue1xuICAgIC8vVE9ETyBzZXQgYmxlbmQgbW9kZXMuLlxuICAgIC8vIGNoZWNrIHRleHR1cmUuLlxuICAgIGlmICh0aGlzLmN1cnJlbnRJbmRleCA+PSB0aGlzLnNpemUpXG4gICAge1xuICAgICAgICB0aGlzLmZsdXNoKCk7XG4gICAgfVxuXG4gIFxuICAgIC8vIGdldCB0aGUgdXZzIGZvciB0aGUgdGV4dHVyZVxuICAgXG5cbiAgICAvLyBpZiB0aGUgdXZzIGhhdmUgbm90IHVwZGF0ZWQgdGhlbiBubyBwb2ludCByZW5kZXJpbmcganVzdCB5ZXQhXG4gICAgaWYgKCFzcHJpdGUudGV4dHVyZS5fdXZzKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgICAvLyBwdXNoIGEgdGV4dHVyZS5cbiAgICAvLyBpbmNyZW1lbnQgdGhlIGJhdGNoc2l6ZVxuICAgIHZhciBuZXh0VGV4dHVyZSA9ICBzcHJpdGUudGV4dHVyZS5iYXNlVGV4dHVyZTtcbiAgICB2YXIgY3VycmVudEdyb3VwID0gdGhpcy5jdXJyZW50R3JvdXA7XG4gICAgdmFyIGk7XG5cbiAgICBpZih0aGlzLmN1cnJlbnRUZXh0dXJlICE9PSBuZXh0VGV4dHVyZSlcbiAgICB7XG4gICAgICAgIHRoaXMuY3VycmVudFRleHR1cmUgPSBuZXh0VGV4dHVyZTtcbiAgICAgICAgXG4gICAgICAgIGlmKCFuZXh0VGV4dHVyZS5fZW5hYmxlZClcbiAgICAgICAge1xuICAgICAgICAgICAgbmV4dFRleHR1cmUuX2VuYWJsZWQgPSB0cnVlO1xuICAgICAgICAgICAgbmV4dFRleHR1cmUuX2lkID0gdGhpcy50ZXh0dXJlQ291bnQ7XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIGlmKHRoaXMudGV4dHVyZUNvdW50ID09PSB0aGlzLk1BWF9URVhUVUVTKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGZvciAoIGkgPSAwOyBpIDwgY3VycmVudEdyb3VwLnRleHR1cmVDb3VudDsgaSsrKSBcbiAgICAgICAgICAgICAgICB7ICAgICBcbiAgICAgICAgICAgICAgICAgICAgY3VycmVudEdyb3VwLnRleHR1cmVzW2ldLl9lbmFibGVkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgIHRoaXMudGV4dHVyZUNvdW50ID0gMDtcblxuICAgICAgICAgICAgICAgIGN1cnJlbnRHcm91cC5zaXplID0gdGhpcy5jdXJyZW50SW5kZXggLSBjdXJyZW50R3JvdXAuc3RhcnQ7XG4gICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICBjdXJyZW50R3JvdXAgPSB0aGlzLmN1cnJlbnRHcm91cCA9IHRoaXMuZ3JvdXBzW3RoaXMuZ3JvdXBDb3VudCsrXTtcbiAgICAgICAgICAgICAgICBjdXJyZW50R3JvdXAudGV4dHVyZUNvdW50ID0gMDtcbiAgICAgICAgICAgICAgICBjdXJyZW50R3JvdXAuc3RhcnQgPSB0aGlzLmN1cnJlbnRJbmRleDtcbiAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY3VycmVudEdyb3VwLnRleHR1cmVzW2N1cnJlbnRHcm91cC50ZXh0dXJlQ291bnQrK10gPSBuZXh0VGV4dHVyZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMudGV4dHVyZUNvdW50Kys7XG4gICAgfVxuXG4gICAgLy8gVE9ETyB0cmltPz9cbiAgICB2YXIgaW5kZXggPSB0aGlzLmN1cnJlbnRJbmRleCAqIHRoaXMudmVydEJ5dGVTaXplO1xuXG4gICAgdGhpcy5jdXJyZW50SW5kZXgrKztcblxuICAgIC8vIHVwbG9hZCB0aGUgc3ByaXRlIGVsZW1ldG5zLi4uXG4gICAgLy8gdGhleSBoYXZlIGFsbCByZWFkeSBiZWVuIGNhbGN1bGF0ZWQgc28gd2UganVzdCBuZWVkIHRvIHB1c2ggdGhlbSBpbnRvIHRoZSBidWZmZXIuXG4gICAgdmFyIGNvbG9ycyA9IHRoaXMuY29sb3JzO1xuICAgIHZhciBwb3NpdGlvbnMgPSB0aGlzLnBvc2l0aW9ucztcbiAgICB2YXIgdmVydGV4RGF0YSA9IHNwcml0ZS52ZXJ0ZXhEYXRhXG4gICAgdmFyIHRpbnQgPSAoc3ByaXRlLnRpbnQgPj4gMTYpICsgKHNwcml0ZS50aW50ICYgMHhmZjAwKSArICgoc3ByaXRlLnRpbnQgJiAweGZmKSA8PCAxNikgKyAoc3ByaXRlLndvcmxkQWxwaGEgKiAyNTUgPDwgMjQpO1xuICAgIHZhciB1dnMgPSBzcHJpdGUudGV4dHVyZS5fdXZzLnV2c191aW50MzI7XG4gICAgLy94eVxuICAgIHBvc2l0aW9uc1tpbmRleCsrXSA9IHZlcnRleERhdGFbMF07XG4gICAgcG9zaXRpb25zW2luZGV4KytdID0gdmVydGV4RGF0YVsxXTtcbiAgICB0aGlzLnV2c1tpbmRleCsrXSA9IHV2c1swXTtcbiAgICBjb2xvcnNbaW5kZXgrK10gPSB0aW50O1xuICAgIHBvc2l0aW9uc1tpbmRleCsrXSA9IG5leHRUZXh0dXJlLl9pZDsgXG4gICAgXG4gICAgLy8geHlcbiAgICBwb3NpdGlvbnNbaW5kZXgrK10gPSB2ZXJ0ZXhEYXRhWzJdO1xuICAgIHBvc2l0aW9uc1tpbmRleCsrXSA9IHZlcnRleERhdGFbM107XG4gICAgdGhpcy51dnNbaW5kZXgrK10gPSB1dnNbMV07XG4gICAgY29sb3JzW2luZGV4KytdID0gdGludDtcbiAgICBwb3NpdGlvbnNbaW5kZXgrK10gPSBuZXh0VGV4dHVyZS5faWQ7XG5cbiAgICAgLy8geHlcbiAgICBwb3NpdGlvbnNbaW5kZXgrK10gPSB2ZXJ0ZXhEYXRhWzRdO1xuICAgIHBvc2l0aW9uc1tpbmRleCsrXSA9IHZlcnRleERhdGFbNV07XG4gICAgdGhpcy51dnNbaW5kZXgrK10gPSB1dnNbMl07XG4gICAgY29sb3JzW2luZGV4KytdID0gdGludDtcbiAgICBwb3NpdGlvbnNbaW5kZXgrK10gPSBuZXh0VGV4dHVyZS5faWQ7XG5cbiAgICAvLyB4eVxuICAgIHBvc2l0aW9uc1tpbmRleCsrXSA9IHZlcnRleERhdGFbNl07XG4gICAgcG9zaXRpb25zW2luZGV4KytdID0gdmVydGV4RGF0YVs3XTtcbiAgICB0aGlzLnV2c1tpbmRleCsrXSA9IHV2c1szXTtcbiAgICBjb2xvcnNbaW5kZXgrK10gPSB0aW50O1xuICAgIHBvc2l0aW9uc1tpbmRleCsrXSA9IG5leHRUZXh0dXJlLl9pZDtcbn07XG5cbi8qKlxuICogUmVuZGVycyB0aGUgY29udGVudCBhbmQgZW1wdGllcyB0aGUgY3VycmVudCBiYXRjaC5cbiAqXG4gKi9cblNwcml0ZVJlbmRlcmVyLnByb3RvdHlwZS5mbHVzaCA9IGZ1bmN0aW9uICgpXG57XG4gICAgaWYgKHRoaXMuY3VycmVudEluZGV4ID09PSAwKXJldHVybjtcblxuICAgIHZhciBnbCA9IHRoaXMucmVuZGVyZXIuZ2w7XG5cblxuICAgIHRoaXMuY3VycmVudEdyb3VwLnNpemUgPSB0aGlzLmN1cnJlbnRJbmRleCAtIHRoaXMuY3VycmVudEdyb3VwLnN0YXJ0O1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5jdXJyZW50R3JvdXAudGV4dHVyZUNvdW50OyBpKyspIFxuICAgIHsgICAgIFxuICAgICAgICB0aGlzLmN1cnJlbnRHcm91cC50ZXh0dXJlc1tpXS5fZW5hYmxlZCA9IGZhbHNlO1xuICAgIH07XG4gICBcbiAgICAvLyBkbyBzb21lIHNtYXJ0IGFycmF5IHN0dWZmLi5cbiAgICAvLyBkb3VibGUgc2l6ZSBzbyB3ZSBkb250IGFsd2F5IHN1YmFycmF5IHRoZSBlbGVtZW50cy4uXG4gICAgLy8gdXBsb2FkIHRoZSB2ZXJ0cyB0byB0aGUgYnVmZmVyXG4gICAgaWYgKHRoaXMuY3VycmVudEJhdGNoU2l6ZSA+ICggdGhpcy5zaXplICogMC41ICkgKVxuICAgIHtcbiAgICAgICAgdGhpcy52ZXJ0ZXhCdWZmZXIudXBsb2FkKHRoaXMudmVydGljZXMsIDAsIHRydWUpO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICAvLyBvIGsgLi4gc3ViIGFycmF5IGlzIFNMT1c+P1xuICAgICAgICB2YXIgdmlldyA9IHRoaXMucG9zaXRpb25zLnN1YmFycmF5KDAsIHRoaXMuY3VycmVudEluZGV4ICogdGhpcy52ZXJ0Qnl0ZVNpemUpO1xuICAgICAgICB0aGlzLnZlcnRleEJ1ZmZlci51cGxvYWQodmlldywgMCwgdHJ1ZSk7XG4gICAgfVxuXG4gICAgLy8gYmluZCBzaGFkZXIuLlxuICAgIHRoaXMucmVuZGVyZXIuYmluZFNoYWRlcih0aGlzLl9zaGFkZXIpO1xuICAgIHRoaXMucmVuZGVyZXIuYmxlbmRNb2RlTWFuYWdlci5zZXRCbGVuZE1vZGUoIDAgKTtcblxuICAgIC8vLyByZW5kZXIgdGhlIGdyb3Vwcy4uXG4gICAgZm9yIChpID0gMDsgaSA8IHRoaXMuZ3JvdXBDb3VudDsgaSsrKSB7XG4gICAgICAgIFxuICAgICAgICB2YXIgZ3JvdXAgPSB0aGlzLmdyb3Vwc1tpXTtcblxuICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IGdyb3VwLnRleHR1cmVDb3VudDsgaisrKSB7XG4gICAgICAgICAgICB0aGlzLnJlbmRlcmVyLmJpbmRUZXh0dXJlKGdyb3VwLnRleHR1cmVzW2pdLCBqKTtcbiAgICAgICAgfTtcblxuICAgICAgICBnbC5kcmF3RWxlbWVudHMoZ2wuVFJJQU5HTEVTLCBncm91cC5zaXplICogNiwgZ2wuVU5TSUdORURfU0hPUlQsIGdyb3VwLnN0YXJ0ICogNiAqIDIpO1xuICAgIH07XG5cbiAgICAvLyByZXNldCBlbGVtZW50cyBmb3IgdGhlIG5leHQgZmx1c2hcbiAgICB0aGlzLmN1cnJlbnRUZXh0dXJlID0gbnVsbDtcbiAgICB0aGlzLmN1cnJlbnRJbmRleCA9IDA7XG4gICAgdGhpcy50ZXh0dXJlQ291bnQgPSAwO1xuICAgIHRoaXMuZ3JvdXBDb3VudCA9IDA7XG4gICAgXG4gICAgdGhpcy5jdXJyZW50R3JvdXAgPSB0aGlzLmdyb3Vwc1t0aGlzLmdyb3VwQ291bnQrK107XG4gICAgdGhpcy5jdXJyZW50R3JvdXAudGV4dHVyZUNvdW50ID0gMDtcbn07XG5cbi8qKlxuICogU3RhcnRzIGEgbmV3IHNwcml0ZSBiYXRjaC5cbiAqXG4gKi9cblNwcml0ZVJlbmRlcmVyLnByb3RvdHlwZS5zdGFydCA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy52YW8uYmluZCgpO1xufTtcblxuU3ByaXRlUmVuZGVyZXIucHJvdG90eXBlLnN0b3AgPSBmdW5jdGlvbiAoKVxue1xuICAgIHRoaXMuZmx1c2goKTtcbiAgICB0aGlzLnZhby51bmJpbmQoKTtcbn07XG4vKipcbiAqIERlc3Ryb3lzIHRoZSBTcHJpdGVCYXRjaC5cbiAqXG4gKi9cblNwcml0ZVJlbmRlcmVyLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLnZlcnRleEJ1ZmZlci5kZXN0cm95KCk7XG4gICAgdGhpcy5pbmRleEJ1ZmZlci5kZXN0cm95KCk7XG5cbiAgICBPYmplY3RSZW5kZXJlci5wcm90b3R5cGUuZGVzdHJveS5jYWxsKHRoaXMpO1xuXG4gICAgdGhpcy5zaGFkZXIuZGVzdHJveSgpO1xuXG4gICAgdGhpcy5yZW5kZXJlciA9IG51bGw7XG5cbiAgICB0aGlzLnZlcnRpY2VzID0gbnVsbDtcbiAgICB0aGlzLnBvc2l0aW9ucyA9IG51bGw7XG4gICAgdGhpcy5jb2xvcnMgPSBudWxsO1xuICAgIHRoaXMuaW5kaWNlcyA9IG51bGw7XG5cbiAgICB0aGlzLnZlcnRleEJ1ZmZlciA9IG51bGw7XG4gICAgdGhpcy5pbmRleEJ1ZmZlciA9IG51bGw7XG5cbiAgICB0aGlzLnNwcml0ZXMgPSBudWxsO1xuICAgIHRoaXMuc2hhZGVyID0gbnVsbDtcbn07XG4iLCJ2YXIgU2hhZGVyID0gcmVxdWlyZSgncGl4aS1nbC1jb3JlJykuR0xTaGFkZXI7XG5cblxuZnVuY3Rpb24gZ2VuZXJhdGVNdWx0aVRleHR1cmVTaGFkZXIoZ2wsIG1heFRleHR1cmVzKVxue1xuICAgIHZhciB2ZXJ0ZXhTcmMgPSBcInByZWNpc2lvbiBsb3dwIGZsb2F0O1xcbmF0dHJpYnV0ZSB2ZWMyIGFWZXJ0ZXhQb3NpdGlvbjtcXG5hdHRyaWJ1dGUgdmVjMiBhVGV4dHVyZUNvb3JkO1xcbmF0dHJpYnV0ZSB2ZWM0IGFDb2xvcjtcXG5hdHRyaWJ1dGUgZmxvYXQgYVRleHR1cmVJZDtcXG5cXG51bmlmb3JtIG1hdDMgcHJvamVjdGlvbk1hdHJpeDtcXG5cXG52YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDtcXG52YXJ5aW5nIHZlYzQgdkNvbG9yO1xcbnZhcnlpbmcgZmxvYXQgdlRleHR1cmVJZDtcXG5cXG52b2lkIG1haW4odm9pZCl7XFxuICAgZ2xfUG9zaXRpb24gPSB2ZWM0KChwcm9qZWN0aW9uTWF0cml4ICogdmVjMyhhVmVydGV4UG9zaXRpb24sIDEuMCkpLnh5LCAwLjAsIDEuMCk7XFxuICAgdlRleHR1cmVDb29yZCA9IGFUZXh0dXJlQ29vcmQ7XFxuICAgdlRleHR1cmVJZCA9IGFUZXh0dXJlSWQ7XFxuICAgdkNvbG9yID0gdmVjNChhQ29sb3IucmdiICogYUNvbG9yLmEsIGFDb2xvci5hKTtcXG59XCI7XG4gICAgdmFyIGZyYWdtZW50U3JjID0gJ3ByZWNpc2lvbiBsb3dwIGZsb2F0O1xcblxcbicgKyBnZW5lcmF0ZVNhbXBsZVNyYyhtYXhUZXh0dXJlcykgKyBcIlxcblxcblwiICsgZnJhZ1RlbXBsYXRlXG5cbiAgICBmcmFnbWVudFNyYyA9IGZyYWdtZW50U3JjLnJlcGxhY2UoL1xcJVxcJS9naSwgJzE2Jyk7XG5cbiAgICB2YXIgc2hhZGVyID0gbmV3IFNoYWRlcihnbCwgdmVydGV4U3JjLCBmcmFnbWVudFNyYyk7XG5cblxuICAgIHZhciBzYW1wbGVWYWx1ZXMgPSBbXTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG1heFRleHR1cmVzOyBpKyspIHtcbiAgICAgICAgc2FtcGxlVmFsdWVzW2ldID0gaTtcbiAgICB9O1xuXG4gICAgc2hhZGVyLmJpbmQoKTtcbiAgICBzaGFkZXIudW5pZm9ybXMudVNhbXBsZXJzID0gc2FtcGxlVmFsdWVzO1xuXG4gICAgcmV0dXJuIHNoYWRlcjtcbn1cblxuZnVuY3Rpb24gZ2VuZXJhdGVTYW1wbGVTcmMobWF4VGV4dHVyZXMpXG57XG4gICAgdmFyIHNyYyA9ICd2ZWM0IGdldFNhbXBsZUZyb21BcnJheShzYW1wbGVyMkQgdGV4dHVyZXNbJSVdLCBpbnQgbmR4LCB2ZWMyIHV2KSB7XFxuXFxudmVjNCBjb2xvcjsnXG5cbiAgICBzcmMgKz0gJ1xcbic7XG4gICAgc3JjICs9ICdcXG4nO1xuICAgIFxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbWF4VGV4dHVyZXM7IGkrKykgXG4gICAge1xuICAgICAgICBpZihpID4gMClzcmMgKz0gJ1xcbmVsc2UgJztcbiAgICAgICAgaWYoaSA8IG1heFRleHR1cmVzLTEpc3JjICs9ICdpZihuZHggPT0gJyArIGkgKyAnKSc7XG4gICAgICAgIHNyYyArPSAnXFxueyc7XG4gICAgICAgIHNyYyArPSAnXFxuXFx0Y29sb3IgPSB0ZXh0dXJlMkQodGV4dHVyZXNbJytpKyddLCB1dik7JztcbiAgICAgICAgc3JjICs9ICdcXG59JztcbiAgICB9O1xuXG4gICAgc3JjICs9ICdcXG4nO1xuICAgIHNyYyArPSAnXFxuJztcbiAgICBzcmMgKz0gJ3JldHVybiBjb2xvcjsnO1xuICAgIHNyYyArPSAnXFxufSc7XG5cbiAgICByZXR1cm4gc3JjO1xufVxuXG52YXIgZnJhZ1RlbXBsYXRlID0gW1xuXG4gICAgJ3ZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkOycsXG4gICAgJ3ZhcnlpbmcgdmVjNCB2Q29sb3I7JyxcbiAgICAndmFyeWluZyBmbG9hdCB2VGV4dHVyZUlkOycsXG4gICAgJ3VuaWZvcm0gc2FtcGxlcjJEIHVTYW1wbGVyc1slJV07JyxcblxuICAgICd2b2lkIG1haW4odm9pZCl7JyxcbiAgICAgICAgJ2dsX0ZyYWdDb2xvciA9IGdldFNhbXBsZUZyb21BcnJheSh1U2FtcGxlcnMsIGludCh2VGV4dHVyZUlkKSwgdlRleHR1cmVDb29yZCkgKiB2Q29sb3I7JyxcbiAgICAnfSdcbl0uam9pbignXFxuJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZ2VuZXJhdGVNdWx0aVRleHR1cmVTaGFkZXI7XG4iLCJ2YXIgU3ByaXRlID0gcmVxdWlyZSgnLi4vc3ByaXRlcy9TcHJpdGUnKSxcbiAgICBUZXh0dXJlID0gcmVxdWlyZSgnLi4vdGV4dHVyZXMvVGV4dHVyZScpLFxuICAgIG1hdGggPSByZXF1aXJlKCcuLi9tYXRoJyksXG4gICAgdXRpbHMgPSByZXF1aXJlKCcuLi91dGlscycpLFxuICAgIENPTlNUID0gcmVxdWlyZSgnLi4vY29uc3QnKTtcblxuLyoqXG4gKiBBIFRleHQgT2JqZWN0IHdpbGwgY3JlYXRlIGEgbGluZSBvciBtdWx0aXBsZSBsaW5lcyBvZiB0ZXh0LiBUbyBzcGxpdCBhIGxpbmUgeW91IGNhbiB1c2UgJ1xcbicgaW4geW91ciB0ZXh0IHN0cmluZyxcbiAqIG9yIGFkZCBhIHdvcmRXcmFwIHByb3BlcnR5IHNldCB0byB0cnVlIGFuZCBhbmQgd29yZFdyYXBXaWR0aCBwcm9wZXJ0eSB3aXRoIGEgdmFsdWUgaW4gdGhlIHN0eWxlIG9iamVjdC5cbiAqXG4gKiBBIFRleHQgY2FuIGJlIGNyZWF0ZWQgZGlyZWN0bHkgZnJvbSBhIHN0cmluZyBhbmQgYSBzdHlsZSBvYmplY3RcbiAqXG4gKiBgYGBqc1xuICogdmFyIHRleHQgPSBuZXcgUElYSS5UZXh0KCdUaGlzIGlzIGEgcGl4aSB0ZXh0Jyx7Zm9udCA6ICcyNHB4IEFyaWFsJywgZmlsbCA6IDB4ZmYxMDEwLCBhbGlnbiA6ICdjZW50ZXInfSk7XG4gKiBgYGBcbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuU3ByaXRlXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIHRleHQge3N0cmluZ30gVGhlIGNvcHkgdGhhdCB5b3Ugd291bGQgbGlrZSB0aGUgdGV4dCB0byBkaXNwbGF5XG4gKiBAcGFyYW0gW3N0eWxlXSB7b2JqZWN0fSBUaGUgc3R5bGUgcGFyYW1ldGVyc1xuICogQHBhcmFtIFtzdHlsZS5mb250XSB7c3RyaW5nfSBkZWZhdWx0ICdib2xkIDIwcHggQXJpYWwnIFRoZSBzdHlsZSBhbmQgc2l6ZSBvZiB0aGUgZm9udFxuICogQHBhcmFtIFtzdHlsZS5maWxsPSdibGFjayddIHtTdHJpbmd8TnVtYmVyfSBBIGNhbnZhcyBmaWxsc3R5bGUgdGhhdCB3aWxsIGJlIHVzZWQgb24gdGhlIHRleHQgZS5nICdyZWQnLCAnIzAwRkYwMCdcbiAqIEBwYXJhbSBbc3R5bGUuYWxpZ249J2xlZnQnXSB7c3RyaW5nfSBBbGlnbm1lbnQgZm9yIG11bHRpbGluZSB0ZXh0ICgnbGVmdCcsICdjZW50ZXInIG9yICdyaWdodCcpLCBkb2VzIG5vdCBhZmZlY3Qgc2luZ2xlIGxpbmUgdGV4dFxuICogQHBhcmFtIFtzdHlsZS5zdHJva2VdIHtTdHJpbmd8TnVtYmVyfSBBIGNhbnZhcyBmaWxsc3R5bGUgdGhhdCB3aWxsIGJlIHVzZWQgb24gdGhlIHRleHQgc3Ryb2tlIGUuZyAnYmx1ZScsICcjRkNGRjAwJ1xuICogQHBhcmFtIFtzdHlsZS5zdHJva2VUaGlja25lc3M9MF0ge251bWJlcn0gQSBudW1iZXIgdGhhdCByZXByZXNlbnRzIHRoZSB0aGlja25lc3Mgb2YgdGhlIHN0cm9rZS4gRGVmYXVsdCBpcyAwIChubyBzdHJva2UpXG4gKiBAcGFyYW0gW3N0eWxlLndvcmRXcmFwPWZhbHNlXSB7Ym9vbGVhbn0gSW5kaWNhdGVzIGlmIHdvcmQgd3JhcCBzaG91bGQgYmUgdXNlZFxuICogQHBhcmFtIFtzdHlsZS53b3JkV3JhcFdpZHRoPTEwMF0ge251bWJlcn0gVGhlIHdpZHRoIGF0IHdoaWNoIHRleHQgd2lsbCB3cmFwLCBpdCBuZWVkcyB3b3JkV3JhcCB0byBiZSBzZXQgdG8gdHJ1ZVxuICogQHBhcmFtIFtzdHlsZS5saW5lSGVpZ2h0XSB7bnVtYmVyfSBUaGUgbGluZSBoZWlnaHQsIGEgbnVtYmVyIHRoYXQgcmVwcmVzZW50cyB0aGUgdmVydGljYWwgc3BhY2UgdGhhdCBhIGxldHRlciB1c2VzXG4gKiBAcGFyYW0gW3N0eWxlLmRyb3BTaGFkb3c9ZmFsc2VdIHtib29sZWFufSBTZXQgYSBkcm9wIHNoYWRvdyBmb3IgdGhlIHRleHRcbiAqIEBwYXJhbSBbc3R5bGUuZHJvcFNoYWRvd0NvbG9yPScjMDAwMDAwJ10ge3N0cmluZ30gQSBmaWxsIHN0eWxlIHRvIGJlIHVzZWQgb24gdGhlIGRyb3BzaGFkb3cgZS5nICdyZWQnLCAnIzAwRkYwMCdcbiAqIEBwYXJhbSBbc3R5bGUuZHJvcFNoYWRvd0FuZ2xlPU1hdGguUEkvNF0ge251bWJlcn0gU2V0IGEgYW5nbGUgb2YgdGhlIGRyb3Agc2hhZG93XG4gKiBAcGFyYW0gW3N0eWxlLmRyb3BTaGFkb3dEaXN0YW5jZT01XSB7bnVtYmVyfSBTZXQgYSBkaXN0YW5jZSBvZiB0aGUgZHJvcCBzaGFkb3dcbiAqIEBwYXJhbSBbc3R5bGUuZHJvcFNoYWRvd0JsdXI9MF0ge251bWJlcn0gU2V0IGEgc2hhZG93IGJsdXIgcmFkaXVzXG4gKiBAcGFyYW0gW3N0eWxlLnBhZGRpbmc9MF0ge251bWJlcn0gT2NjYXNpb25hbGx5IHNvbWUgZm9udHMgYXJlIGNyb3BwZWQgb24gdG9wIG9yIGJvdHRvbS4gQWRkaW5nIHNvbWUgcGFkZGluZyB3aWxsXG4gKiAgICAgIHByZXZlbnQgdGhpcyBmcm9tIGhhcHBlbmluZyBieSBhZGRpbmcgcGFkZGluZyB0byB0aGUgdG9wIGFuZCBib3R0b20gb2YgdGV4dCBoZWlnaHQuXG4gKiBAcGFyYW0gW3N0eWxlLnRleHRCYXNlbGluZT0nYWxwaGFiZXRpYyddIHtzdHJpbmd9IFRoZSBiYXNlbGluZSBvZiB0aGUgdGV4dCB0aGF0IGlzIHJlbmRlcmVkLlxuICogQHBhcmFtIFtzdHlsZS5saW5lSm9pbj0nbWl0ZXInXSB7c3RyaW5nfSBUaGUgbGluZUpvaW4gcHJvcGVydHkgc2V0cyB0aGUgdHlwZSBvZiBjb3JuZXIgY3JlYXRlZCwgaXQgY2FuIHJlc29sdmVcbiAqICAgICAgc3Bpa2VkIHRleHQgaXNzdWVzLiBEZWZhdWx0IGlzICdtaXRlcicgKGNyZWF0ZXMgYSBzaGFycCBjb3JuZXIpLlxuICogQHBhcmFtIFtzdHlsZS5taXRlckxpbWl0PTEwXSB7bnVtYmVyfSBUaGUgbWl0ZXIgbGltaXQgdG8gdXNlIHdoZW4gdXNpbmcgdGhlICdtaXRlcicgbGluZUpvaW4gbW9kZS4gVGhpcyBjYW4gcmVkdWNlXG4gKiAgICAgIG9yIGluY3JlYXNlIHRoZSBzcGlraW5lc3Mgb2YgcmVuZGVyZWQgdGV4dC5cbiAqL1xuZnVuY3Rpb24gVGV4dCh0ZXh0LCBzdHlsZSwgcmVzb2x1dGlvbilcbntcbiAgICAvKipcbiAgICAgKiBUaGUgY2FudmFzIGVsZW1lbnQgdGhhdCBldmVyeXRoaW5nIGlzIGRyYXduIHRvXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtIVE1MQ2FudmFzRWxlbWVudH1cbiAgICAgKi9cbiAgICB0aGlzLmNhbnZhcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NhbnZhcycpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGNhbnZhcyAyZCBjb250ZXh0IHRoYXQgZXZlcnl0aGluZyBpcyBkcmF3biB3aXRoXG4gICAgICogQG1lbWJlciB7SFRNTENhbnZhc0VsZW1lbnR9XG4gICAgICovXG4gICAgdGhpcy5jb250ZXh0ID0gdGhpcy5jYW52YXMuZ2V0Q29udGV4dCgnMmQnKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSByZXNvbHV0aW9uIG9mIHRoZSBjYW52YXMuXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMucmVzb2x1dGlvbiA9IHJlc29sdXRpb24gfHwgQ09OU1QuUkVTT0xVVElPTjtcblxuICAgIC8qKlxuICAgICAqIFByaXZhdGUgdHJhY2tlciBmb3IgdGhlIGN1cnJlbnQgdGV4dC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge3N0cmluZ31cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX3RleHQgPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogUHJpdmF0ZSB0cmFja2VyIGZvciB0aGUgY3VycmVudCBzdHlsZS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge29iamVjdH1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX3N0eWxlID0gbnVsbDtcblxuICAgIHZhciB0ZXh0dXJlID0gVGV4dHVyZS5mcm9tQ2FudmFzKHRoaXMuY2FudmFzKTtcbiAgICB0ZXh0dXJlLnRyaW0gPSBuZXcgbWF0aC5SZWN0YW5nbGUoKTtcbiAgICBTcHJpdGUuY2FsbCh0aGlzLCB0ZXh0dXJlKTtcblxuICAgIHRoaXMudGV4dCA9IHRleHQ7XG4gICAgdGhpcy5zdHlsZSA9IHN0eWxlO1xufVxuXG4vLyBjb25zdHJ1Y3RvclxuVGV4dC5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFNwcml0ZS5wcm90b3R5cGUpO1xuVGV4dC5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBUZXh0O1xubW9kdWxlLmV4cG9ydHMgPSBUZXh0O1xuXG5UZXh0LmZvbnRQcm9wZXJ0aWVzQ2FjaGUgPSB7fTtcblRleHQuZm9udFByb3BlcnRpZXNDYW52YXMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdjYW52YXMnKTtcblRleHQuZm9udFByb3BlcnRpZXNDb250ZXh0ID0gVGV4dC5mb250UHJvcGVydGllc0NhbnZhcy5nZXRDb250ZXh0KCcyZCcpO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhUZXh0LnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFRoZSB3aWR0aCBvZiB0aGUgVGV4dCwgc2V0dGluZyB0aGlzIHdpbGwgYWN0dWFsbHkgbW9kaWZ5IHRoZSBzY2FsZSB0byBhY2hpZXZlIHRoZSB2YWx1ZSBzZXRcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5UZXh0I1xuICAgICAqL1xuICAgIHdpZHRoOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgaWYgKHRoaXMuZGlydHkpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdGhpcy51cGRhdGVUZXh0KCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiB0aGlzLnNjYWxlLnggKiB0aGlzLl90ZXh0dXJlLl9mcmFtZS53aWR0aDtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuc2NhbGUueCA9IHZhbHVlIC8gdGhpcy5fdGV4dHVyZS5fZnJhbWUud2lkdGg7XG4gICAgICAgICAgICB0aGlzLl93aWR0aCA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFRoZSBoZWlnaHQgb2YgdGhlIFRleHQsIHNldHRpbmcgdGhpcyB3aWxsIGFjdHVhbGx5IG1vZGlmeSB0aGUgc2NhbGUgdG8gYWNoaWV2ZSB0aGUgdmFsdWUgc2V0XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuVGV4dCNcbiAgICAgKi9cbiAgICBoZWlnaHQ6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICBpZiAodGhpcy5kaXJ0eSlcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZVRleHQoKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuICB0aGlzLnNjYWxlLnkgKiB0aGlzLl90ZXh0dXJlLl9mcmFtZS5oZWlnaHQ7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnNjYWxlLnkgPSB2YWx1ZSAvIHRoaXMuX3RleHR1cmUuX2ZyYW1lLmhlaWdodDtcbiAgICAgICAgICAgIHRoaXMuX2hlaWdodCA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFNldCB0aGUgc3R5bGUgb2YgdGhlIHRleHRcbiAgICAgKlxuICAgICAqIEBwYXJhbSBbc3R5bGVdIHtvYmplY3R9IFRoZSBzdHlsZSBwYXJhbWV0ZXJzXG4gICAgICogQHBhcmFtIFtzdHlsZS5mb250PSdib2xkIDIwcHQgQXJpYWwnXSB7c3RyaW5nfSBUaGUgc3R5bGUgYW5kIHNpemUgb2YgdGhlIGZvbnRcbiAgICAgKiBAcGFyYW0gW3N0eWxlLmZpbGw9J2JsYWNrJ10ge3N0cmluZ3xudW1iZXJ9IEEgY2FudmFzIGZpbGxzdHlsZSB0aGF0IHdpbGwgYmUgdXNlZCBvbiB0aGUgdGV4dCBlZyAncmVkJywgJyMwMEZGMDAnXG4gICAgICogQHBhcmFtIFtzdHlsZS5hbGlnbj0nbGVmdCddIHtzdHJpbmd9IEFsaWdubWVudCBmb3IgbXVsdGlsaW5lIHRleHQgKCdsZWZ0JywgJ2NlbnRlcicgb3IgJ3JpZ2h0JyksIGRvZXMgbm90IGFmZmVjdCBzaW5nbGUgbGluZSB0ZXh0XG4gICAgICogQHBhcmFtIFtzdHlsZS5zdHJva2U9J2JsYWNrJ10ge3N0cmluZ3xudW1iZXJ9IEEgY2FudmFzIGZpbGxzdHlsZSB0aGF0IHdpbGwgYmUgdXNlZCBvbiB0aGUgdGV4dCBzdHJva2UgZWcgJ2JsdWUnLCAnI0ZDRkYwMCdcbiAgICAgKiBAcGFyYW0gW3N0eWxlLnN0cm9rZVRoaWNrbmVzcz0wXSB7bnVtYmVyfSBBIG51bWJlciB0aGF0IHJlcHJlc2VudHMgdGhlIHRoaWNrbmVzcyBvZiB0aGUgc3Ryb2tlLiBEZWZhdWx0IGlzIDAgKG5vIHN0cm9rZSlcbiAgICAgKiBAcGFyYW0gW3N0eWxlLndvcmRXcmFwPWZhbHNlXSB7Ym9vbGVhbn0gSW5kaWNhdGVzIGlmIHdvcmQgd3JhcCBzaG91bGQgYmUgdXNlZFxuICAgICAqIEBwYXJhbSBbc3R5bGUud29yZFdyYXBXaWR0aD0xMDBdIHtudW1iZXJ9IFRoZSB3aWR0aCBhdCB3aGljaCB0ZXh0IHdpbGwgd3JhcFxuICAgICAqIEBwYXJhbSBbc3R5bGUubGluZUhlaWdodF0ge251bWJlcn0gVGhlIGxpbmUgaGVpZ2h0LCBhIG51bWJlciB0aGF0IHJlcHJlc2VudHMgdGhlIHZlcnRpY2FsIHNwYWNlIHRoYXQgYSBsZXR0ZXIgdXNlc1xuICAgICAqIEBwYXJhbSBbc3R5bGUuZHJvcFNoYWRvdz1mYWxzZV0ge2Jvb2xlYW59IFNldCBhIGRyb3Agc2hhZG93IGZvciB0aGUgdGV4dFxuICAgICAqIEBwYXJhbSBbc3R5bGUuZHJvcFNoYWRvd0NvbG9yPScjMDAwMDAwJ10ge3N0cmluZ3xudW1iZXJ9IEEgZmlsbCBzdHlsZSB0byBiZSB1c2VkIG9uIHRoZSBkcm9wc2hhZG93IGUuZyAncmVkJywgJyMwMEZGMDAnXG4gICAgICogQHBhcmFtIFtzdHlsZS5kcm9wU2hhZG93QW5nbGU9TWF0aC5QSS82XSB7bnVtYmVyfSBTZXQgYSBhbmdsZSBvZiB0aGUgZHJvcCBzaGFkb3dcbiAgICAgKiBAcGFyYW0gW3N0eWxlLmRyb3BTaGFkb3dEaXN0YW5jZT01XSB7bnVtYmVyfSBTZXQgYSBkaXN0YW5jZSBvZiB0aGUgZHJvcCBzaGFkb3dcbiAgICAgKiBAcGFyYW0gW3N0eWxlLmRyb3BTaGFkb3dCbHVyPTBdIHtudW1iZXJ9IFNldCBhIHNoYWRvdyBibHVyIHJhZGl1c1xuICAgICAqIEBwYXJhbSBbc3R5bGUucGFkZGluZz0wXSB7bnVtYmVyfSBPY2Nhc2lvbmFsbHkgc29tZSBmb250cyBhcmUgY3JvcHBlZCBvbiB0b3Agb3IgYm90dG9tLiBBZGRpbmcgc29tZSBwYWRkaW5nIHdpbGxcbiAgICAgKiAgICAgIHByZXZlbnQgdGhpcyBmcm9tIGhhcHBlbmluZyBieSBhZGRpbmcgcGFkZGluZyB0byB0aGUgdG9wIGFuZCBib3R0b20gb2YgdGV4dCBoZWlnaHQuXG4gICAgICogQHBhcmFtIFtzdHlsZS50ZXh0QmFzZWxpbmU9J2FscGhhYmV0aWMnXSB7c3RyaW5nfSBUaGUgYmFzZWxpbmUgb2YgdGhlIHRleHQgdGhhdCBpcyByZW5kZXJlZC5cbiAgICAgKiBAcGFyYW0gW3N0eWxlLmxpbmVKb2luPSdtaXRlciddIHtzdHJpbmd9IFRoZSBsaW5lSm9pbiBwcm9wZXJ0eSBzZXRzIHRoZSB0eXBlIG9mIGNvcm5lciBjcmVhdGVkLCBpdCBjYW4gcmVzb2x2ZVxuICAgICAqICAgICAgc3Bpa2VkIHRleHQgaXNzdWVzLiBEZWZhdWx0IGlzICdtaXRlcicgKGNyZWF0ZXMgYSBzaGFycCBjb3JuZXIpLlxuICAgICAqIEBwYXJhbSBbc3R5bGUubWl0ZXJMaW1pdD0xMF0ge251bWJlcn0gVGhlIG1pdGVyIGxpbWl0IHRvIHVzZSB3aGVuIHVzaW5nIHRoZSAnbWl0ZXInIGxpbmVKb2luIG1vZGUuIFRoaXMgY2FuIHJlZHVjZVxuICAgICAqICAgICAgb3IgaW5jcmVhc2UgdGhlIHNwaWtpbmVzcyBvZiByZW5kZXJlZCB0ZXh0LlxuICAgICAqIEBtZW1iZXJvZiBQSVhJLlRleHQjXG4gICAgICovXG4gICAgc3R5bGU6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fc3R5bGU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHN0eWxlKVxuICAgICAgICB7XG4gICAgICAgICAgICBzdHlsZSA9IHN0eWxlIHx8IHt9O1xuXG4gICAgICAgICAgICBpZiAodHlwZW9mIHN0eWxlLmZpbGwgPT09ICdudW1iZXInKSB7XG4gICAgICAgICAgICAgICAgc3R5bGUuZmlsbCA9IHV0aWxzLmhleDJzdHJpbmcoc3R5bGUuZmlsbCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICh0eXBlb2Ygc3R5bGUuc3Ryb2tlID09PSAnbnVtYmVyJykge1xuICAgICAgICAgICAgICAgIHN0eWxlLnN0cm9rZSA9IHV0aWxzLmhleDJzdHJpbmcoc3R5bGUuc3Ryb2tlKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHR5cGVvZiBzdHlsZS5kcm9wU2hhZG93Q29sb3IgPT09ICdudW1iZXInKSB7XG4gICAgICAgICAgICAgICAgc3R5bGUuZHJvcFNoYWRvd0NvbG9yID0gdXRpbHMuaGV4MnN0cmluZyhzdHlsZS5kcm9wU2hhZG93Q29sb3IpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBzdHlsZS5mb250ID0gc3R5bGUuZm9udCB8fCAnYm9sZCAyMHB0IEFyaWFsJztcbiAgICAgICAgICAgIHN0eWxlLmZpbGwgPSBzdHlsZS5maWxsIHx8ICdibGFjayc7XG4gICAgICAgICAgICBzdHlsZS5hbGlnbiA9IHN0eWxlLmFsaWduIHx8ICdsZWZ0JztcbiAgICAgICAgICAgIHN0eWxlLnN0cm9rZSA9IHN0eWxlLnN0cm9rZSB8fCAnYmxhY2snOyAvL3Byb3ZpZGUgYSBkZWZhdWx0LCBzZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9waXhpanMvcGl4aS5qcy9pc3N1ZXMvMTM2XG4gICAgICAgICAgICBzdHlsZS5zdHJva2VUaGlja25lc3MgPSBzdHlsZS5zdHJva2VUaGlja25lc3MgfHwgMDtcbiAgICAgICAgICAgIHN0eWxlLndvcmRXcmFwID0gc3R5bGUud29yZFdyYXAgfHwgZmFsc2U7XG4gICAgICAgICAgICBzdHlsZS53b3JkV3JhcFdpZHRoID0gc3R5bGUud29yZFdyYXBXaWR0aCB8fCAxMDA7XG5cbiAgICAgICAgICAgIHN0eWxlLmRyb3BTaGFkb3cgPSBzdHlsZS5kcm9wU2hhZG93IHx8IGZhbHNlO1xuICAgICAgICAgICAgc3R5bGUuZHJvcFNoYWRvd0NvbG9yID0gc3R5bGUuZHJvcFNoYWRvd0NvbG9yIHx8ICcjMDAwMDAwJztcbiAgICAgICAgICAgIHN0eWxlLmRyb3BTaGFkb3dBbmdsZSA9IHN0eWxlLmRyb3BTaGFkb3dBbmdsZSAhPT0gdW5kZWZpbmVkID8gc3R5bGUuZHJvcFNoYWRvd0FuZ2xlIDogTWF0aC5QSSAvIDY7XG4gICAgICAgICAgICBzdHlsZS5kcm9wU2hhZG93RGlzdGFuY2UgPSBzdHlsZS5kcm9wU2hhZG93RGlzdGFuY2UgIT09IHVuZGVmaW5lZCA/IHN0eWxlLmRyb3BTaGFkb3dEaXN0YW5jZSA6IDU7XG4gICAgICAgICAgICBzdHlsZS5kcm9wU2hhZG93Qmx1ciA9IHN0eWxlLmRyb3BTaGFkb3dCbHVyICE9PSB1bmRlZmluZWQgPyBzdHlsZS5kcm9wU2hhZG93Qmx1ciA6IDA7IC8vc2hhZG93Qmx1ciBpcyAnMCcgYnkgZGVmYXVsdCBhY2NvcmRpbmcgdG8gSFRNTFxuXG4gICAgICAgICAgICBzdHlsZS5wYWRkaW5nID0gc3R5bGUucGFkZGluZyB8fCAwO1xuXG4gICAgICAgICAgICBzdHlsZS50ZXh0QmFzZWxpbmUgPSBzdHlsZS50ZXh0QmFzZWxpbmUgfHwgJ2FscGhhYmV0aWMnO1xuXG4gICAgICAgICAgICBzdHlsZS5saW5lSm9pbiA9IHN0eWxlLmxpbmVKb2luIHx8ICdtaXRlcic7XG4gICAgICAgICAgICBzdHlsZS5taXRlckxpbWl0ID0gc3R5bGUubWl0ZXJMaW1pdCB8fCAxMDtcblxuICAgICAgICAgICAgdGhpcy5fc3R5bGUgPSBzdHlsZTtcbiAgICAgICAgICAgIHRoaXMuZGlydHkgPSB0cnVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFNldCB0aGUgY29weSBmb3IgdGhlIHRleHQgb2JqZWN0LiBUbyBzcGxpdCBhIGxpbmUgeW91IGNhbiB1c2UgJ1xcbicuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gdGV4dCB7c3RyaW5nfSBUaGUgY29weSB0aGF0IHlvdSB3b3VsZCBsaWtlIHRoZSB0ZXh0IHRvIGRpc3BsYXlcbiAgICAgKiBAbWVtYmVyb2YgUElYSS5UZXh0I1xuICAgICAqL1xuICAgIHRleHQ6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbigpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl90ZXh0O1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh0ZXh0KXtcbiAgICAgICAgICAgIHRleHQgPSB0ZXh0LnRvU3RyaW5nKCkgfHwgJyAnO1xuICAgICAgICAgICAgaWYgKHRoaXMuX3RleHQgPT09IHRleHQpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5fdGV4dCA9IHRleHQ7XG4gICAgICAgICAgICB0aGlzLmRpcnR5ID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuXG4vKipcbiAqIFJlbmRlcnMgdGV4dCBhbmQgdXBkYXRlcyBpdCB3aGVuIG5lZWRlZFxuICpcbiAqIEBwcml2YXRlXG4gKi9cblRleHQucHJvdG90eXBlLnVwZGF0ZVRleHQgPSBmdW5jdGlvbiAoKVxue1xuICAgIHZhciBzdHlsZSA9IHRoaXMuX3N0eWxlO1xuICAgIHRoaXMuY29udGV4dC5mb250ID0gc3R5bGUuZm9udDtcblxuICAgIC8vIHdvcmQgd3JhcFxuICAgIC8vIHByZXNlcnZlIG9yaWdpbmFsIHRleHRcbiAgICB2YXIgb3V0cHV0VGV4dCA9IHN0eWxlLndvcmRXcmFwID8gdGhpcy53b3JkV3JhcCh0aGlzLl90ZXh0KSA6IHRoaXMuX3RleHQ7XG5cbiAgICAvLyBzcGxpdCB0ZXh0IGludG8gbGluZXNcbiAgICB2YXIgbGluZXMgPSBvdXRwdXRUZXh0LnNwbGl0KC8oPzpcXHJcXG58XFxyfFxcbikvKTtcblxuICAgIC8vIGNhbGN1bGF0ZSB0ZXh0IHdpZHRoXG4gICAgdmFyIGxpbmVXaWR0aHMgPSBuZXcgQXJyYXkobGluZXMubGVuZ3RoKTtcbiAgICB2YXIgbWF4TGluZVdpZHRoID0gMDtcbiAgICB2YXIgZm9udFByb3BlcnRpZXMgPSB0aGlzLmRldGVybWluZUZvbnRQcm9wZXJ0aWVzKHN0eWxlLmZvbnQpO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGluZXMubGVuZ3RoOyBpKyspXG4gICAge1xuICAgICAgICB2YXIgbGluZVdpZHRoID0gdGhpcy5jb250ZXh0Lm1lYXN1cmVUZXh0KGxpbmVzW2ldKS53aWR0aDtcbiAgICAgICAgbGluZVdpZHRoc1tpXSA9IGxpbmVXaWR0aDtcbiAgICAgICAgbWF4TGluZVdpZHRoID0gTWF0aC5tYXgobWF4TGluZVdpZHRoLCBsaW5lV2lkdGgpO1xuICAgIH1cblxuICAgIHZhciB3aWR0aCA9IG1heExpbmVXaWR0aCArIHN0eWxlLnN0cm9rZVRoaWNrbmVzcztcbiAgICBpZiAoc3R5bGUuZHJvcFNoYWRvdylcbiAgICB7XG4gICAgICAgIHdpZHRoICs9IHN0eWxlLmRyb3BTaGFkb3dEaXN0YW5jZTtcbiAgICB9XG5cbiAgICB0aGlzLmNhbnZhcy53aWR0aCA9ICggd2lkdGggKyB0aGlzLmNvbnRleHQubGluZVdpZHRoICkgKiB0aGlzLnJlc29sdXRpb247XG5cbiAgICAvLyBjYWxjdWxhdGUgdGV4dCBoZWlnaHRcbiAgICB2YXIgbGluZUhlaWdodCA9IHRoaXMuc3R5bGUubGluZUhlaWdodCB8fCBmb250UHJvcGVydGllcy5mb250U2l6ZSArIHN0eWxlLnN0cm9rZVRoaWNrbmVzcztcblxuICAgIHZhciBoZWlnaHQgPSBsaW5lSGVpZ2h0ICogbGluZXMubGVuZ3RoO1xuICAgIGlmIChzdHlsZS5kcm9wU2hhZG93KVxuICAgIHtcbiAgICAgICAgaGVpZ2h0ICs9IHN0eWxlLmRyb3BTaGFkb3dEaXN0YW5jZTtcbiAgICB9XG5cbiAgICB0aGlzLmNhbnZhcy5oZWlnaHQgPSAoIGhlaWdodCArIHRoaXMuX3N0eWxlLnBhZGRpbmcgKiAyICkgKiB0aGlzLnJlc29sdXRpb247XG5cbiAgICB0aGlzLmNvbnRleHQuc2NhbGUoIHRoaXMucmVzb2x1dGlvbiwgdGhpcy5yZXNvbHV0aW9uKTtcblxuICAgIGlmIChuYXZpZ2F0b3IuaXNDb2Nvb25KUylcbiAgICB7XG4gICAgICAgIHRoaXMuY29udGV4dC5jbGVhclJlY3QoMCwgMCwgdGhpcy5jYW52YXMud2lkdGgsIHRoaXMuY2FudmFzLmhlaWdodCk7XG5cbiAgICB9XG5cbiAgICAvL3RoaXMuY29udGV4dC5maWxsU3R5bGU9XCIjRkYwMDAwXCI7XG4gICAgLy90aGlzLmNvbnRleHQuZmlsbFJlY3QoMCwgMCwgdGhpcy5jYW52YXMud2lkdGgsIHRoaXMuY2FudmFzLmhlaWdodCk7XG5cbiAgICB0aGlzLmNvbnRleHQuZm9udCA9IHN0eWxlLmZvbnQ7XG4gICAgdGhpcy5jb250ZXh0LnN0cm9rZVN0eWxlID0gc3R5bGUuc3Ryb2tlO1xuICAgIHRoaXMuY29udGV4dC5saW5lV2lkdGggPSBzdHlsZS5zdHJva2VUaGlja25lc3M7XG4gICAgdGhpcy5jb250ZXh0LnRleHRCYXNlbGluZSA9IHN0eWxlLnRleHRCYXNlbGluZTtcbiAgICB0aGlzLmNvbnRleHQubGluZUpvaW4gPSBzdHlsZS5saW5lSm9pbjtcbiAgICB0aGlzLmNvbnRleHQubWl0ZXJMaW1pdCA9IHN0eWxlLm1pdGVyTGltaXQ7XG5cbiAgICB2YXIgbGluZVBvc2l0aW9uWDtcbiAgICB2YXIgbGluZVBvc2l0aW9uWTtcblxuICAgIGlmIChzdHlsZS5kcm9wU2hhZG93KVxuICAgIHtcbiAgICAgICAgaWYgKHN0eWxlLmRyb3BTaGFkb3dCbHVyID4gMCkge1xuICAgICAgICAgICAgdGhpcy5jb250ZXh0LnNoYWRvd0NvbG9yID0gc3R5bGUuZHJvcFNoYWRvd0NvbG9yO1xuICAgICAgICAgICAgdGhpcy5jb250ZXh0LnNoYWRvd0JsdXIgPSBzdHlsZS5kcm9wU2hhZG93Qmx1cjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuY29udGV4dC5maWxsU3R5bGUgPSBzdHlsZS5kcm9wU2hhZG93Q29sb3I7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgeFNoYWRvd09mZnNldCA9IE1hdGguY29zKHN0eWxlLmRyb3BTaGFkb3dBbmdsZSkgKiBzdHlsZS5kcm9wU2hhZG93RGlzdGFuY2U7XG4gICAgICAgIHZhciB5U2hhZG93T2Zmc2V0ID0gTWF0aC5zaW4oc3R5bGUuZHJvcFNoYWRvd0FuZ2xlKSAqIHN0eWxlLmRyb3BTaGFkb3dEaXN0YW5jZTtcblxuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbGluZXMubGVuZ3RoOyBpKyspXG4gICAgICAgIHtcbiAgICAgICAgICAgIGxpbmVQb3NpdGlvblggPSBzdHlsZS5zdHJva2VUaGlja25lc3MgLyAyO1xuICAgICAgICAgICAgbGluZVBvc2l0aW9uWSA9IChzdHlsZS5zdHJva2VUaGlja25lc3MgLyAyICsgaSAqIGxpbmVIZWlnaHQpICsgZm9udFByb3BlcnRpZXMuYXNjZW50O1xuXG4gICAgICAgICAgICBpZiAoc3R5bGUuYWxpZ24gPT09ICdyaWdodCcpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgbGluZVBvc2l0aW9uWCArPSBtYXhMaW5lV2lkdGggLSBsaW5lV2lkdGhzW2ldO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoc3R5bGUuYWxpZ24gPT09ICdjZW50ZXInKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGxpbmVQb3NpdGlvblggKz0gKG1heExpbmVXaWR0aCAtIGxpbmVXaWR0aHNbaV0pIC8gMjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHN0eWxlLmZpbGwpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdGhpcy5jb250ZXh0LmZpbGxUZXh0KGxpbmVzW2ldLCBsaW5lUG9zaXRpb25YICsgeFNoYWRvd09mZnNldCwgbGluZVBvc2l0aW9uWSArIHlTaGFkb3dPZmZzZXQgKyB0aGlzLl9zdHlsZS5wYWRkaW5nKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vc2V0IGNhbnZhcyB0ZXh0IHN0eWxlc1xuICAgIHRoaXMuY29udGV4dC5maWxsU3R5bGUgPSBzdHlsZS5maWxsO1xuXG4gICAgLy9kcmF3IGxpbmVzIGxpbmUgYnkgbGluZVxuICAgIGZvciAoaSA9IDA7IGkgPCBsaW5lcy5sZW5ndGg7IGkrKylcbiAgICB7XG4gICAgICAgIGxpbmVQb3NpdGlvblggPSBzdHlsZS5zdHJva2VUaGlja25lc3MgLyAyO1xuICAgICAgICBsaW5lUG9zaXRpb25ZID0gKHN0eWxlLnN0cm9rZVRoaWNrbmVzcyAvIDIgKyBpICogbGluZUhlaWdodCkgKyBmb250UHJvcGVydGllcy5hc2NlbnQ7XG5cbiAgICAgICAgaWYgKHN0eWxlLmFsaWduID09PSAncmlnaHQnKVxuICAgICAgICB7XG4gICAgICAgICAgICBsaW5lUG9zaXRpb25YICs9IG1heExpbmVXaWR0aCAtIGxpbmVXaWR0aHNbaV07XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoc3R5bGUuYWxpZ24gPT09ICdjZW50ZXInKVxuICAgICAgICB7XG4gICAgICAgICAgICBsaW5lUG9zaXRpb25YICs9IChtYXhMaW5lV2lkdGggLSBsaW5lV2lkdGhzW2ldKSAvIDI7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoc3R5bGUuc3Ryb2tlICYmIHN0eWxlLnN0cm9rZVRoaWNrbmVzcylcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5jb250ZXh0LnN0cm9rZVRleHQobGluZXNbaV0sIGxpbmVQb3NpdGlvblgsIGxpbmVQb3NpdGlvblkgKyB0aGlzLl9zdHlsZS5wYWRkaW5nKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChzdHlsZS5maWxsKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmNvbnRleHQuZmlsbFRleHQobGluZXNbaV0sIGxpbmVQb3NpdGlvblgsIGxpbmVQb3NpdGlvblkgKyB0aGlzLl9zdHlsZS5wYWRkaW5nKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMudXBkYXRlVGV4dHVyZSgpO1xufTtcblxuLyoqXG4gKiBVcGRhdGVzIHRleHR1cmUgc2l6ZSBiYXNlZCBvbiBjYW52YXMgc2l6ZVxuICpcbiAqIEBwcml2YXRlXG4gKi9cblRleHQucHJvdG90eXBlLnVwZGF0ZVRleHR1cmUgPSBmdW5jdGlvbiAoKVxue1xuICAgIHZhciB0ZXh0dXJlID0gdGhpcy5fdGV4dHVyZTtcblxuICAgIHRleHR1cmUuYmFzZVRleHR1cmUuaGFzTG9hZGVkID0gdHJ1ZTtcbiAgICB0ZXh0dXJlLmJhc2VUZXh0dXJlLnJlc29sdXRpb24gPSB0aGlzLnJlc29sdXRpb247XG5cbiAgICB0ZXh0dXJlLmJhc2VUZXh0dXJlLndpZHRoID0gdGhpcy5jYW52YXMud2lkdGggLyB0aGlzLnJlc29sdXRpb247XG4gICAgdGV4dHVyZS5iYXNlVGV4dHVyZS5oZWlnaHQgPSB0aGlzLmNhbnZhcy5oZWlnaHQgLyB0aGlzLnJlc29sdXRpb247XG4gICAgdGV4dHVyZS5jcm9wLndpZHRoID0gdGV4dHVyZS5fZnJhbWUud2lkdGggPSB0aGlzLmNhbnZhcy53aWR0aCAvIHRoaXMucmVzb2x1dGlvbjtcbiAgICB0ZXh0dXJlLmNyb3AuaGVpZ2h0ID0gdGV4dHVyZS5fZnJhbWUuaGVpZ2h0ID0gdGhpcy5jYW52YXMuaGVpZ2h0IC8gdGhpcy5yZXNvbHV0aW9uO1xuXG4gICAgdGV4dHVyZS50cmltLnggPSAwO1xuICAgIHRleHR1cmUudHJpbS55ID0gLXRoaXMuX3N0eWxlLnBhZGRpbmc7XG5cbiAgICB0ZXh0dXJlLnRyaW0ud2lkdGggPSB0ZXh0dXJlLl9mcmFtZS53aWR0aDtcbiAgICB0ZXh0dXJlLnRyaW0uaGVpZ2h0ID0gdGV4dHVyZS5fZnJhbWUuaGVpZ2h0IC0gdGhpcy5fc3R5bGUucGFkZGluZyoyO1xuXG4gICAgdGhpcy5fd2lkdGggPSB0aGlzLmNhbnZhcy53aWR0aCAvIHRoaXMucmVzb2x1dGlvbjtcbiAgICB0aGlzLl9oZWlnaHQgPSB0aGlzLmNhbnZhcy5oZWlnaHQgLyB0aGlzLnJlc29sdXRpb247XG5cbiAgICB0ZXh0dXJlLmJhc2VUZXh0dXJlLmVtaXQoJ3VwZGF0ZScsICB0ZXh0dXJlLmJhc2VUZXh0dXJlKTtcblxuICAgIHRoaXMuZGlydHkgPSBmYWxzZTtcbn07XG5cbi8qKlxuICogUmVuZGVycyB0aGUgb2JqZWN0IHVzaW5nIHRoZSBXZWJHTCByZW5kZXJlclxuICpcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5XZWJHTFJlbmRlcmVyfVxuICovXG5UZXh0LnByb3RvdHlwZS5yZW5kZXJXZWJHTCA9IGZ1bmN0aW9uIChyZW5kZXJlcilcbntcbiAgICBpZiAodGhpcy5kaXJ0eSlcbiAgICB7XG4gICAgICAgIC8vdGhpcy5yZXNvbHV0aW9uID0gMS8vcmVuZGVyZXIucmVzb2x1dGlvbjtcblxuICAgICAgICB0aGlzLnVwZGF0ZVRleHQoKTtcbiAgICB9XG5cbiAgICBTcHJpdGUucHJvdG90eXBlLnJlbmRlcldlYkdMLmNhbGwodGhpcywgcmVuZGVyZXIpO1xufTtcblxuLyoqXG4gKiBSZW5kZXJzIHRoZSBvYmplY3QgdXNpbmcgdGhlIENhbnZhcyByZW5kZXJlclxuICpcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5DYW52YXNSZW5kZXJlcn1cbiAqIEBwcml2YXRlXG4gKi9cblRleHQucHJvdG90eXBlLl9yZW5kZXJDYW52YXMgPSBmdW5jdGlvbiAocmVuZGVyZXIpXG57XG4gICAgaWYgKHRoaXMuZGlydHkpXG4gICAge1xuICAgICAvLyAgIHRoaXMucmVzb2x1dGlvbiA9IDEvL3JlbmRlcmVyLnJlc29sdXRpb247XG5cbiAgICAgICAgdGhpcy51cGRhdGVUZXh0KCk7XG4gICAgfVxuXG4gICAgU3ByaXRlLnByb3RvdHlwZS5fcmVuZGVyQ2FudmFzLmNhbGwodGhpcywgcmVuZGVyZXIpO1xufTtcblxuLyoqXG4gKiBDYWxjdWxhdGVzIHRoZSBhc2NlbnQsIGRlc2NlbnQgYW5kIGZvbnRTaXplIG9mIGEgZ2l2ZW4gZm9udFN0eWxlXG4gKlxuICogQHBhcmFtIGZvbnRTdHlsZSB7b2JqZWN0fVxuICogQHByaXZhdGVcbiAqL1xuVGV4dC5wcm90b3R5cGUuZGV0ZXJtaW5lRm9udFByb3BlcnRpZXMgPSBmdW5jdGlvbiAoZm9udFN0eWxlKVxue1xuICAgIHZhciBwcm9wZXJ0aWVzID0gVGV4dC5mb250UHJvcGVydGllc0NhY2hlW2ZvbnRTdHlsZV07XG5cbiAgICBpZiAoIXByb3BlcnRpZXMpXG4gICAge1xuICAgICAgICBwcm9wZXJ0aWVzID0ge307XG5cbiAgICAgICAgdmFyIGNhbnZhcyA9IFRleHQuZm9udFByb3BlcnRpZXNDYW52YXM7XG4gICAgICAgIHZhciBjb250ZXh0ID0gVGV4dC5mb250UHJvcGVydGllc0NvbnRleHQ7XG5cbiAgICAgICAgY29udGV4dC5mb250ID0gZm9udFN0eWxlO1xuXG4gICAgICAgIHZhciB3aWR0aCA9IE1hdGguY2VpbChjb250ZXh0Lm1lYXN1cmVUZXh0KCd8TcOJcScpLndpZHRoKTtcbiAgICAgICAgdmFyIGJhc2VsaW5lID0gTWF0aC5jZWlsKGNvbnRleHQubWVhc3VyZVRleHQoJ00nKS53aWR0aCk7XG4gICAgICAgIHZhciBoZWlnaHQgPSAyICogYmFzZWxpbmU7XG5cbiAgICAgICAgYmFzZWxpbmUgPSBiYXNlbGluZSAqIDEuNCB8IDA7XG5cbiAgICAgICAgY2FudmFzLndpZHRoID0gd2lkdGg7XG4gICAgICAgIGNhbnZhcy5oZWlnaHQgPSBoZWlnaHQ7XG5cbiAgICAgICAgY29udGV4dC5maWxsU3R5bGUgPSAnI2YwMCc7XG4gICAgICAgIGNvbnRleHQuZmlsbFJlY3QoMCwgMCwgd2lkdGgsIGhlaWdodCk7XG5cbiAgICAgICAgY29udGV4dC5mb250ID0gZm9udFN0eWxlO1xuXG4gICAgICAgIGNvbnRleHQudGV4dEJhc2VsaW5lID0gJ2FscGhhYmV0aWMnO1xuICAgICAgICBjb250ZXh0LmZpbGxTdHlsZSA9ICcjMDAwJztcbiAgICAgICAgY29udGV4dC5maWxsVGV4dCgnfE3DiXEnLCAwLCBiYXNlbGluZSk7XG5cbiAgICAgICAgdmFyIGltYWdlZGF0YSA9IGNvbnRleHQuZ2V0SW1hZ2VEYXRhKDAsIDAsIHdpZHRoLCBoZWlnaHQpLmRhdGE7XG4gICAgICAgIHZhciBwaXhlbHMgPSBpbWFnZWRhdGEubGVuZ3RoO1xuICAgICAgICB2YXIgbGluZSA9IHdpZHRoICogNDtcblxuICAgICAgICB2YXIgaSwgajtcblxuICAgICAgICB2YXIgaWR4ID0gMDtcbiAgICAgICAgdmFyIHN0b3AgPSBmYWxzZTtcblxuICAgICAgICAvLyBhc2NlbnQuIHNjYW4gZnJvbSB0b3AgdG8gYm90dG9tIHVudGlsIHdlIGZpbmQgYSBub24gcmVkIHBpeGVsXG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCBiYXNlbGluZTsgaSsrKVxuICAgICAgICB7XG4gICAgICAgICAgICBmb3IgKGogPSAwOyBqIDwgbGluZTsgaiArPSA0KVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGlmIChpbWFnZWRhdGFbaWR4ICsgal0gIT09IDI1NSlcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIHN0b3AgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIXN0b3ApXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgaWR4ICs9IGxpbmU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBwcm9wZXJ0aWVzLmFzY2VudCA9IGJhc2VsaW5lIC0gaTtcblxuICAgICAgICBpZHggPSBwaXhlbHMgLSBsaW5lO1xuICAgICAgICBzdG9wID0gZmFsc2U7XG5cbiAgICAgICAgLy8gZGVzY2VudC4gc2NhbiBmcm9tIGJvdHRvbSB0byB0b3AgdW50aWwgd2UgZmluZCBhIG5vbiByZWQgcGl4ZWxcbiAgICAgICAgZm9yIChpID0gaGVpZ2h0OyBpID4gYmFzZWxpbmU7IGktLSlcbiAgICAgICAge1xuICAgICAgICAgICAgZm9yIChqID0gMDsgaiA8IGxpbmU7IGogKz0gNClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBpZiAoaW1hZ2VkYXRhW2lkeCArIGpdICE9PSAyNTUpXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBzdG9wID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCFzdG9wKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGlkeCAtPSBsaW5lO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcHJvcGVydGllcy5kZXNjZW50ID0gaSAtIGJhc2VsaW5lO1xuICAgICAgICBwcm9wZXJ0aWVzLmZvbnRTaXplID0gcHJvcGVydGllcy5hc2NlbnQgKyBwcm9wZXJ0aWVzLmRlc2NlbnQ7XG5cbiAgICAgICAgVGV4dC5mb250UHJvcGVydGllc0NhY2hlW2ZvbnRTdHlsZV0gPSBwcm9wZXJ0aWVzO1xuICAgIH1cblxuICAgIHJldHVybiBwcm9wZXJ0aWVzO1xufTtcblxuLyoqXG4gKiBBcHBsaWVzIG5ld2xpbmVzIHRvIGEgc3RyaW5nIHRvIGhhdmUgaXQgb3B0aW1hbGx5IGZpdCBpbnRvIHRoZSBob3Jpem9udGFsXG4gKiBib3VuZHMgc2V0IGJ5IHRoZSBUZXh0IG9iamVjdCdzIHdvcmRXcmFwV2lkdGggcHJvcGVydHkuXG4gKlxuICogQHBhcmFtIHRleHQge3N0cmluZ31cbiAqIEBwcml2YXRlXG4gKi9cblRleHQucHJvdG90eXBlLndvcmRXcmFwID0gZnVuY3Rpb24gKHRleHQpXG57XG4gICAgLy8gR3JlZWR5IHdyYXBwaW5nIGFsZ29yaXRobSB0aGF0IHdpbGwgd3JhcCB3b3JkcyBhcyB0aGUgbGluZSBncm93cyBsb25nZXJcbiAgICAvLyB0aGFuIGl0cyBob3Jpem9udGFsIGJvdW5kcy5cbiAgICB2YXIgcmVzdWx0ID0gJyc7XG4gICAgdmFyIGxpbmVzID0gdGV4dC5zcGxpdCgnXFxuJyk7XG4gICAgdmFyIHdvcmRXcmFwV2lkdGggPSB0aGlzLl9zdHlsZS53b3JkV3JhcFdpZHRoO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGluZXMubGVuZ3RoOyBpKyspXG4gICAge1xuICAgICAgICB2YXIgc3BhY2VMZWZ0ID0gd29yZFdyYXBXaWR0aDtcbiAgICAgICAgdmFyIHdvcmRzID0gbGluZXNbaV0uc3BsaXQoJyAnKTtcbiAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCB3b3Jkcy5sZW5ndGg7IGorKylcbiAgICAgICAge1xuICAgICAgICAgICAgdmFyIHdvcmRXaWR0aCA9IHRoaXMuY29udGV4dC5tZWFzdXJlVGV4dCh3b3Jkc1tqXSkud2lkdGg7XG4gICAgICAgICAgICB2YXIgd29yZFdpZHRoV2l0aFNwYWNlID0gd29yZFdpZHRoICsgdGhpcy5jb250ZXh0Lm1lYXN1cmVUZXh0KCcgJykud2lkdGg7XG4gICAgICAgICAgICBpZiAoaiA9PT0gMCB8fCB3b3JkV2lkdGhXaXRoU3BhY2UgPiBzcGFjZUxlZnQpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgLy8gU2tpcCBwcmludGluZyB0aGUgbmV3bGluZSBpZiBpdCdzIHRoZSBmaXJzdCB3b3JkIG9mIHRoZSBsaW5lIHRoYXQgaXNcbiAgICAgICAgICAgICAgICAvLyBncmVhdGVyIHRoYW4gdGhlIHdvcmQgd3JhcCB3aWR0aC5cbiAgICAgICAgICAgICAgICBpZiAoaiA+IDApXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQgKz0gJ1xcbic7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJlc3VsdCArPSB3b3Jkc1tqXTtcbiAgICAgICAgICAgICAgICBzcGFjZUxlZnQgPSB3b3JkV3JhcFdpZHRoIC0gd29yZFdpZHRoO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHNwYWNlTGVmdCAtPSB3b3JkV2lkdGhXaXRoU3BhY2U7XG4gICAgICAgICAgICAgICAgcmVzdWx0ICs9ICcgJyArIHdvcmRzW2pdO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGkgPCBsaW5lcy5sZW5ndGgtMSlcbiAgICAgICAge1xuICAgICAgICAgICAgcmVzdWx0ICs9ICdcXG4nO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG59O1xuXG4vKipcbiAqIFJldHVybnMgdGhlIGJvdW5kcyBvZiB0aGUgVGV4dCBhcyBhIHJlY3RhbmdsZS4gVGhlIGJvdW5kcyBjYWxjdWxhdGlvbiB0YWtlcyB0aGUgd29ybGRUcmFuc2Zvcm0gaW50byBhY2NvdW50LlxuICpcbiAqIEBwYXJhbSBtYXRyaXgge1BJWEkuTWF0cml4fSB0aGUgdHJhbnNmb3JtYXRpb24gbWF0cml4IG9mIHRoZSBUZXh0XG4gKiBAcmV0dXJuIHtQSVhJLlJlY3RhbmdsZX0gdGhlIGZyYW1pbmcgcmVjdGFuZ2xlXG4gKi9cblRleHQucHJvdG90eXBlLmdldEJvdW5kcyA9IGZ1bmN0aW9uIChtYXRyaXgpXG57XG4gICAgaWYgKHRoaXMuZGlydHkpXG4gICAge1xuICAgICAgICB0aGlzLnVwZGF0ZVRleHQoKTtcbiAgICB9XG5cbiAgICByZXR1cm4gU3ByaXRlLnByb3RvdHlwZS5nZXRCb3VuZHMuY2FsbCh0aGlzLCBtYXRyaXgpO1xufTtcblxuLyoqXG4gKiBEZXN0cm95cyB0aGlzIHRleHQgb2JqZWN0LlxuICpcbiAqIEBwYXJhbSBbZGVzdHJveUJhc2VUZXh0dXJlPXRydWVdIHtib29sZWFufSB3aGV0aGVyIHRvIGRlc3Ryb3kgdGhlIGJhc2UgdGV4dHVyZSBhcyB3ZWxsXG4gKi9cblRleHQucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoZGVzdHJveUJhc2VUZXh0dXJlKVxue1xuICAgIC8vIG1ha2Ugc3VyZSB0byByZXNldCB0aGUgdGhlIGNvbnRleHQgYW5kIGNhbnZhcy4uIGRvbnQgd2FudCB0aGlzIGhhbmdpbmcgYXJvdW5kIGluIG1lbW9yeSFcbiAgICB0aGlzLmNvbnRleHQgPSBudWxsO1xuICAgIHRoaXMuY2FudmFzID0gbnVsbDtcblxuICAgIHRoaXMuX3N0eWxlID0gbnVsbDtcblxuICAgIHRoaXMuX3RleHR1cmUuZGVzdHJveShkZXN0cm95QmFzZVRleHR1cmUgPT09IHVuZGVmaW5lZCA/IHRydWUgOiBkZXN0cm95QmFzZVRleHR1cmUpO1xufTtcbiIsInZhciB1dGlscyA9IHJlcXVpcmUoJy4uL3V0aWxzJyksXG4gICAgQ09OU1QgPSByZXF1aXJlKCcuLi9jb25zdCcpLFxuICAgIEV2ZW50RW1pdHRlciA9IHJlcXVpcmUoJ2V2ZW50ZW1pdHRlcjMnKTtcblxuLyoqXG4gKiBBIHRleHR1cmUgc3RvcmVzIHRoZSBpbmZvcm1hdGlvbiB0aGF0IHJlcHJlc2VudHMgYW4gaW1hZ2UuIEFsbCB0ZXh0dXJlcyBoYXZlIGEgYmFzZSB0ZXh0dXJlLlxuICpcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqIEBwYXJhbSBzb3VyY2Uge0ltYWdlfENhbnZhc30gdGhlIHNvdXJjZSBvYmplY3Qgb2YgdGhlIHRleHR1cmUuXG4gKiBAcGFyYW0gW3NjYWxlTW9kZT1QSVhJLlNDQUxFX01PREVTLkRFRkFVTFRdIHtudW1iZXJ9IFNlZSB7QGxpbmsgUElYSS5TQ0FMRV9NT0RFU30gZm9yIHBvc3NpYmxlIHZhbHVlc1xuICogQHBhcmFtIHJlc29sdXRpb24ge251bWJlcn0gdGhlIHJlc29sdXRpb24gb2YgdGhlIHRleHR1cmUgZm9yIGRldmljZXMgd2l0aCBkaWZmZXJlbnQgcGl4ZWwgcmF0aW9zXG4gKi9cbmZ1bmN0aW9uIEJhc2VUZXh0dXJlKHNvdXJjZSwgc2NhbGVNb2RlLCByZXNvbHV0aW9uKVxue1xuICAgIEV2ZW50RW1pdHRlci5jYWxsKHRoaXMpO1xuXG4gICAgdGhpcy51aWQgPSB1dGlscy51aWQoKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBSZXNvbHV0aW9uIG9mIHRoZSB0ZXh0dXJlLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMucmVzb2x1dGlvbiA9IHJlc29sdXRpb24gfHwgMTtcblxuICAgIC8qKlxuICAgICAqIFRoZSB3aWR0aCBvZiB0aGUgYmFzZSB0ZXh0dXJlIHNldCB3aGVuIHRoZSBpbWFnZSBoYXMgbG9hZGVkXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQHJlYWRPbmx5XG4gICAgICovXG4gICAgdGhpcy53aWR0aCA9IDEwMDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBoZWlnaHQgb2YgdGhlIGJhc2UgdGV4dHVyZSBzZXQgd2hlbiB0aGUgaW1hZ2UgaGFzIGxvYWRlZFxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEByZWFkT25seVxuICAgICAqL1xuICAgIHRoaXMuaGVpZ2h0ID0gMTAwO1xuXG4gICAgLy8gVE9ETyBkb2NzXG4gICAgLy8gdXNlZCB0byBzdG9yZSB0aGUgYWN0dWFsIGRpbWVuc2lvbnMgb2YgdGhlIHNvdXJjZVxuICAgIC8qKlxuICAgICAqIFVzZWQgdG8gc3RvcmUgdGhlIGFjdHVhbCB3aWR0aCBvZiB0aGUgc291cmNlIG9mIHRoaXMgdGV4dHVyZVxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEByZWFkT25seVxuICAgICAqL1xuICAgIHRoaXMucmVhbFdpZHRoID0gMTAwO1xuICAgIC8qKlxuICAgICAqIFVzZWQgdG8gc3RvcmUgdGhlIGFjdHVhbCBoZWlnaHQgb2YgdGhlIHNvdXJjZSBvZiB0aGlzIHRleHR1cmVcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAcmVhZE9ubHlcbiAgICAgKi9cbiAgICB0aGlzLnJlYWxIZWlnaHQgPSAxMDA7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgc2NhbGUgbW9kZSB0byBhcHBseSB3aGVuIHNjYWxpbmcgdGhpcyB0ZXh0dXJlXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgUElYSS5TQ0FMRV9NT0RFUy5MSU5FQVJcbiAgICAgKiBAc2VlIFBJWEkuU0NBTEVfTU9ERVNcbiAgICAgKi9cbiAgICB0aGlzLnNjYWxlTW9kZSA9IHNjYWxlTW9kZSB8fCBDT05TVC5TQ0FMRV9NT0RFUy5ERUZBVUxUO1xuXG4gICAgLyoqXG4gICAgICogU2V0IHRvIHRydWUgb25jZSB0aGUgYmFzZSB0ZXh0dXJlIGhhcyBzdWNjZXNzZnVsbHkgbG9hZGVkLlxuICAgICAqXG4gICAgICogVGhpcyBpcyBuZXZlciB0cnVlIGlmIHRoZSB1bmRlcmx5aW5nIHNvdXJjZSBmYWlscyB0byBsb2FkIG9yIGhhcyBubyB0ZXh0dXJlIGRhdGEuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqIEByZWFkT25seVxuICAgICAqL1xuICAgIHRoaXMuaGFzTG9hZGVkID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBTZXQgdG8gdHJ1ZSBpZiB0aGUgc291cmNlIGlzIGN1cnJlbnRseSBsb2FkaW5nLlxuICAgICAqXG4gICAgICogSWYgYW4gSW1hZ2Ugc291cmNlIGlzIGxvYWRpbmcgdGhlICdsb2FkZWQnIG9yICdlcnJvcicgZXZlbnQgd2lsbCBiZVxuICAgICAqIGRpc3BhdGNoZWQgd2hlbiB0aGUgb3BlcmF0aW9uIGVuZHMuIEFuIHVuZGVyeWxpbmcgc291cmNlIHRoYXQgaXNcbiAgICAgKiBpbW1lZGlhdGVseS1hdmFpbGFibGUgYnlwYXNzZXMgbG9hZGluZyBlbnRpcmVseS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICogQHJlYWRvbmx5XG4gICAgICovXG4gICAgdGhpcy5pc0xvYWRpbmcgPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBpbWFnZSBzb3VyY2UgdGhhdCBpcyB1c2VkIHRvIGNyZWF0ZSB0aGUgdGV4dHVyZS5cbiAgICAgKlxuICAgICAqIFRPRE86IE1ha2UgdGhpcyBhIHNldHRlciB0aGF0IGNhbGxzIGxvYWRTb3VyY2UoKTtcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge0ltYWdlfENhbnZhc31cbiAgICAgKiBAcmVhZG9ubHlcbiAgICAgKi9cbiAgICB0aGlzLnNvdXJjZSA9IG51bGw7IC8vIHNldCBpbiBsb2FkU291cmNlLCBpZiBhdCBhbGxcblxuICAgIC8qKlxuICAgICAqIENvbnRyb2xzIGlmIFJHQiBjaGFubmVscyBzaG91bGQgYmUgcHJlLW11bHRpcGxpZWQgYnkgQWxwaGEgIChXZWJHTCBvbmx5KVxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKiBAZGVmYXVsdCB0cnVlXG4gICAgICovXG4gICAgdGhpcy5wcmVtdWx0aXBsaWVkQWxwaGEgPSB0cnVlO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7c3RyaW5nfVxuICAgICAqL1xuICAgIHRoaXMuaW1hZ2VVcmwgPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogV2V0aGVyIG9yIG5vdCB0aGUgdGV4dHVyZSBpcyBhIHBvd2VyIG9mIHR3bywgdHJ5IHRvIHVzZSBwb3dlciBvZiB0d28gdGV4dHVyZXMgYXMgbXVjaCBhcyB5b3UgY2FuXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuaXNQb3dlck9mVHdvID0gZmFsc2U7XG5cbiAgICAvLyB1c2VkIGZvciB3ZWJHTFxuXG4gICAgLyoqXG4gICAgICpcbiAgICAgKiBTZXQgdGhpcyB0byB0cnVlIGlmIGEgbWlwbWFwIG9mIHRoaXMgdGV4dHVyZSBuZWVkcyB0byBiZSBnZW5lcmF0ZWQuIFRoaXMgdmFsdWUgbmVlZHMgdG8gYmUgc2V0IGJlZm9yZSB0aGUgdGV4dHVyZSBpcyB1c2VkXG4gICAgICogQWxzbyB0aGUgdGV4dHVyZSBtdXN0IGJlIGEgcG93ZXIgb2YgdHdvIHNpemUgdG8gd29ya1xuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKi9cbiAgICB0aGlzLm1pcG1hcCA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogQSBtYXAgb2YgcmVuZGVyZXIgSURzIHRvIHdlYmdsIHRleHR1cmVzXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtvYmplY3Q8bnVtYmVyLCBXZWJHTFRleHR1cmU+fVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fZ2xUZXh0dXJlcyA9IHt9O1xuICAgIHRoaXMuX2FjdGl2ZSA9IGZhbHNlO1xuICAgIHRoaXMuX2lkID0gMDtcbiAgICBcbiAgICAvLyBpZiBubyBzb3VyY2UgcGFzc2VkIGRvbid0IHRyeSB0byBsb2FkXG4gICAgaWYgKHNvdXJjZSlcbiAgICB7XG4gICAgICAgIHRoaXMubG9hZFNvdXJjZShzb3VyY2UpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEZpcmVkIHdoZW4gYSBub3QtaW1tZWRpYXRlbHktYXZhaWxhYmxlIHNvdXJjZSBmaW5pc2hlcyBsb2FkaW5nLlxuICAgICAqXG4gICAgICogQGV2ZW50IGxvYWRlZFxuICAgICAqIEBtZW1iZXJvZiBQSVhJLkJhc2VUZXh0dXJlI1xuICAgICAqIEBwcm90ZWN0ZWRcbiAgICAgKi9cblxuICAgIC8qKlxuICAgICAqIEZpcmVkIHdoZW4gYSBub3QtaW1tZWRpYXRlbHktYXZhaWxhYmxlIHNvdXJjZSBmYWlscyB0byBsb2FkLlxuICAgICAqXG4gICAgICogQGV2ZW50IGVycm9yXG4gICAgICogQG1lbWJlcm9mIFBJWEkuQmFzZVRleHR1cmUjXG4gICAgICogQHByb3RlY3RlZFxuICAgICAqL1xufVxuXG5CYXNlVGV4dHVyZS5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKEV2ZW50RW1pdHRlci5wcm90b3R5cGUpO1xuQmFzZVRleHR1cmUucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gQmFzZVRleHR1cmU7XG5tb2R1bGUuZXhwb3J0cyA9IEJhc2VUZXh0dXJlO1xuXG4vKipcbiAqIFVwZGF0ZXMgdGhlIHRleHR1cmUgb24gYWxsIHRoZSB3ZWJnbCByZW5kZXJlcnMsIHRoaXMgYWxzbyBhc3N1bWVzIHRoZSBzcmMgaGFzIGNoYW5nZWQuXG4gKlxuICogQGZpcmVzIHVwZGF0ZVxuICovXG5CYXNlVGV4dHVyZS5wcm90b3R5cGUudXBkYXRlID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLnJlYWxXaWR0aCA9IHRoaXMuc291cmNlLm5hdHVyYWxXaWR0aCB8fCB0aGlzLnNvdXJjZS53aWR0aDtcbiAgICB0aGlzLnJlYWxIZWlnaHQgPSB0aGlzLnNvdXJjZS5uYXR1cmFsSGVpZ2h0IHx8IHRoaXMuc291cmNlLmhlaWdodDtcblxuICAgIHRoaXMud2lkdGggPSB0aGlzLnJlYWxXaWR0aCAvIHRoaXMucmVzb2x1dGlvbjtcbiAgICB0aGlzLmhlaWdodCA9IHRoaXMucmVhbEhlaWdodCAvIHRoaXMucmVzb2x1dGlvbjtcblxuICAgIHRoaXMuaXNQb3dlck9mVHdvID0gdXRpbHMuaXNQb3dlck9mVHdvKHRoaXMucmVhbFdpZHRoLCB0aGlzLnJlYWxIZWlnaHQpO1xuXG4gICAgdGhpcy5lbWl0KCd1cGRhdGUnLCB0aGlzKTtcbn07XG5cbi8qKlxuICogTG9hZCBhIHNvdXJjZS5cbiAqXG4gKiBJZiB0aGUgc291cmNlIGlzIG5vdC1pbW1lZGlhdGVseS1hdmFpbGFibGUsIHN1Y2ggYXMgYW4gaW1hZ2UgdGhhdCBuZWVkcyB0byBiZVxuICogZG93bmxvYWRlZCwgdGhlbiB0aGUgJ2xvYWRlZCcgb3IgJ2Vycm9yJyBldmVudCB3aWxsIGJlIGRpc3BhdGNoZWQgaW4gdGhlIGZ1dHVyZVxuICogYW5kIGBoYXNMb2FkZWRgIHdpbGwgcmVtYWluIGZhbHNlIGFmdGVyIHRoaXMgY2FsbC5cbiAqXG4gKiBUaGUgbG9naWMgc3RhdGUgYWZ0ZXIgY2FsbGluZyBgbG9hZFNvdXJjZWAgZGlyZWN0bHkgb3IgaW5kaXJlY3RseSAoZWcuIGBmcm9tSW1hZ2VgLCBgbmV3IEJhc2VUZXh0dXJlYCkgaXM6XG4gKlxuICogICAgIGlmICh0ZXh0dXJlLmhhc0xvYWRlZClcbiB7XG4gKiAgICAgICAgLy8gdGV4dHVyZSByZWFkeSBmb3IgdXNlXG4gKiAgICAgfSBlbHNlIGlmICh0ZXh0dXJlLmlzTG9hZGluZylcbiB7XG4gKiAgICAgICAgLy8gbGlzdGVuIHRvICdsb2FkZWQnIGFuZC9vciAnZXJyb3InIGV2ZW50cyBvbiB0ZXh0dXJlXG4gKiAgICAgfSBlbHNlIHtcbiAqICAgICAgICAvLyBub3QgbG9hZGluZywgbm90IGdvaW5nIHRvIGxvYWQgVU5MRVNTIHRoZSBzb3VyY2UgaXMgcmVsb2FkZWRcbiAqICAgICAgICAvLyAoaXQgbWF5IHN0aWxsIG1ha2Ugc2Vuc2UgdG8gbGlzdGVuIHRvIHRoZSBldmVudHMpXG4gKiAgICAgfVxuICpcbiAqIEBwcm90ZWN0ZWRcbiAqIEBwYXJhbSBzb3VyY2Uge0ltYWdlfENhbnZhc30gdGhlIHNvdXJjZSBvYmplY3Qgb2YgdGhlIHRleHR1cmUuXG4gKi9cbkJhc2VUZXh0dXJlLnByb3RvdHlwZS5sb2FkU291cmNlID0gZnVuY3Rpb24gKHNvdXJjZSlcbntcbiAgICB2YXIgd2FzTG9hZGluZyA9IHRoaXMuaXNMb2FkaW5nO1xuICAgIHRoaXMuaGFzTG9hZGVkID0gZmFsc2U7XG4gICAgdGhpcy5pc0xvYWRpbmcgPSBmYWxzZTtcblxuICAgIGlmICh3YXNMb2FkaW5nICYmIHRoaXMuc291cmNlKVxuICAgIHtcbiAgICAgICAgdGhpcy5zb3VyY2Uub25sb2FkID0gbnVsbDtcbiAgICAgICAgdGhpcy5zb3VyY2Uub25lcnJvciA9IG51bGw7XG4gICAgfVxuXG4gICAgdGhpcy5zb3VyY2UgPSBzb3VyY2U7XG5cbiAgICAvLyBBcHBseSBzb3VyY2UgaWYgbG9hZGVkLiBPdGhlcndpc2Ugc2V0dXAgYXBwcm9wcmlhdGUgbG9hZGluZyBtb25pdG9ycy5cbiAgICBpZiAoKHRoaXMuc291cmNlLmNvbXBsZXRlIHx8IHRoaXMuc291cmNlLmdldENvbnRleHQpICYmIHRoaXMuc291cmNlLndpZHRoICYmIHRoaXMuc291cmNlLmhlaWdodClcbiAgICB7XG4gICAgICAgIHRoaXMuX3NvdXJjZUxvYWRlZCgpO1xuICAgIH1cbiAgICBlbHNlIGlmICghc291cmNlLmdldENvbnRleHQpXG4gICAge1xuXG4gICAgICAgIC8vIEltYWdlIGZhaWwgLyBub3QgcmVhZHlcbiAgICAgICAgdGhpcy5pc0xvYWRpbmcgPSB0cnVlO1xuXG4gICAgICAgIHZhciBzY29wZSA9IHRoaXM7XG5cbiAgICAgICAgc291cmNlLm9ubG9hZCA9IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHNvdXJjZS5vbmxvYWQgPSBudWxsO1xuICAgICAgICAgICAgc291cmNlLm9uZXJyb3IgPSBudWxsO1xuXG4gICAgICAgICAgICBpZiAoIXNjb3BlLmlzTG9hZGluZylcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHNjb3BlLmlzTG9hZGluZyA9IGZhbHNlO1xuICAgICAgICAgICAgc2NvcGUuX3NvdXJjZUxvYWRlZCgpO1xuXG4gICAgICAgICAgICBzY29wZS5lbWl0KCdsb2FkZWQnLCBzY29wZSk7XG4gICAgICAgIH07XG5cbiAgICAgICAgc291cmNlLm9uZXJyb3IgPSBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICBzb3VyY2Uub25sb2FkID0gbnVsbDtcbiAgICAgICAgICAgIHNvdXJjZS5vbmVycm9yID0gbnVsbDtcblxuICAgICAgICAgICAgaWYgKCFzY29wZS5pc0xvYWRpbmcpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBzY29wZS5pc0xvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgICAgIHNjb3BlLmVtaXQoJ2Vycm9yJywgc2NvcGUpO1xuICAgICAgICB9O1xuXG4gICAgICAgIC8vIFBlciBodHRwOi8vd3d3LnczLm9yZy9UUi9odG1sNS9lbWJlZGRlZC1jb250ZW50LTAuaHRtbCN0aGUtaW1nLWVsZW1lbnRcbiAgICAgICAgLy8gICBcIlRoZSB2YWx1ZSBvZiBgY29tcGxldGVgIGNhbiB0aHVzIGNoYW5nZSB3aGlsZSBhIHNjcmlwdCBpcyBleGVjdXRpbmcuXCJcbiAgICAgICAgLy8gU28gY29tcGxldGUgbmVlZHMgdG8gYmUgcmUtY2hlY2tlZCBhZnRlciB0aGUgY2FsbGJhY2tzIGhhdmUgYmVlbiBhZGRlZC4uXG4gICAgICAgIC8vIE5PVEU6IGNvbXBsZXRlIHdpbGwgYmUgdHJ1ZSBpZiB0aGUgaW1hZ2UgaGFzIG5vIHNyYyBzbyBiZXN0IHRvIGNoZWNrIGlmIHRoZSBzcmMgaXMgc2V0LlxuICAgICAgICBpZiAoc291cmNlLmNvbXBsZXRlICYmIHNvdXJjZS5zcmMpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuaXNMb2FkaW5nID0gZmFsc2U7XG5cbiAgICAgICAgICAgIC8vIC4uYW5kIGlmIHdlJ3JlIGNvbXBsZXRlIG5vdywgbm8gbmVlZCBmb3IgY2FsbGJhY2tzXG4gICAgICAgICAgICBzb3VyY2Uub25sb2FkID0gbnVsbDtcbiAgICAgICAgICAgIHNvdXJjZS5vbmVycm9yID0gbnVsbDtcblxuICAgICAgICAgICAgaWYgKHNvdXJjZS53aWR0aCAmJiBzb3VyY2UuaGVpZ2h0KVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHRoaXMuX3NvdXJjZUxvYWRlZCgpO1xuXG4gICAgICAgICAgICAgICAgLy8gSWYgYW55IHByZXZpb3VzIHN1YnNjcmliZXJzIHBvc3NpYmxlXG4gICAgICAgICAgICAgICAgaWYgKHdhc0xvYWRpbmcpXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmVtaXQoJ2xvYWRlZCcsIHRoaXMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAvLyBJZiBhbnkgcHJldmlvdXMgc3Vic2NyaWJlcnMgcG9zc2libGVcbiAgICAgICAgICAgICAgICBpZiAod2FzTG9hZGluZylcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZW1pdCgnZXJyb3InLCB0aGlzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG59O1xuXG4vKipcbiAqIFVzZWQgaW50ZXJuYWxseSB0byB1cGRhdGUgdGhlIHdpZHRoLCBoZWlnaHQsIGFuZCBzb21lIG90aGVyIHRyYWNraW5nIHZhcnMgb25jZVxuICogYSBzb3VyY2UgaGFzIHN1Y2Nlc3NmdWxseSBsb2FkZWQuXG4gKlxuICogQHByaXZhdGVcbiAqL1xuQmFzZVRleHR1cmUucHJvdG90eXBlLl9zb3VyY2VMb2FkZWQgPSBmdW5jdGlvbiAoKVxue1xuICAgIHRoaXMuaGFzTG9hZGVkID0gdHJ1ZTtcbiAgICB0aGlzLnVwZGF0ZSgpO1xufTtcblxuLyoqXG4gKiBEZXN0cm95cyB0aGlzIGJhc2UgdGV4dHVyZVxuICpcbiAqL1xuQmFzZVRleHR1cmUucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoKVxue1xuICAgIGlmICh0aGlzLmltYWdlVXJsKVxuICAgIHtcbiAgICAgICAgZGVsZXRlIHV0aWxzLkJhc2VUZXh0dXJlQ2FjaGVbdGhpcy5pbWFnZVVybF07XG4gICAgICAgIGRlbGV0ZSB1dGlscy5UZXh0dXJlQ2FjaGVbdGhpcy5pbWFnZVVybF07XG5cbiAgICAgICAgdGhpcy5pbWFnZVVybCA9IG51bGw7XG5cbiAgICAgICAgaWYgKCFuYXZpZ2F0b3IuaXNDb2Nvb25KUylcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5zb3VyY2Uuc3JjID0gJyc7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZWxzZSBpZiAodGhpcy5zb3VyY2UgJiYgdGhpcy5zb3VyY2UuX3BpeGlJZClcbiAgICB7XG4gICAgICAgIGRlbGV0ZSB1dGlscy5CYXNlVGV4dHVyZUNhY2hlW3RoaXMuc291cmNlLl9waXhpSWRdO1xuICAgIH1cblxuICAgIHRoaXMuc291cmNlID0gbnVsbDtcblxuICAgIHRoaXMuZGlzcG9zZSgpO1xufTtcblxuLyoqXG4gKiBGcmVlcyB0aGUgdGV4dHVyZSBmcm9tIFdlYkdMIG1lbW9yeSB3aXRob3V0IGRlc3Ryb3lpbmcgdGhpcyB0ZXh0dXJlIG9iamVjdC5cbiAqIFRoaXMgbWVhbnMgeW91IGNhbiBzdGlsbCB1c2UgdGhlIHRleHR1cmUgbGF0ZXIgd2hpY2ggd2lsbCB1cGxvYWQgaXQgdG8gR1BVXG4gKiBtZW1vcnkgYWdhaW4uXG4gKlxuICovXG5CYXNlVGV4dHVyZS5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy5lbWl0KCdkaXNwb3NlJywgdGhpcyk7XG5cbiAgICAvLyB0aGlzIHNob3VsZCBubyBsb25nZXIgYmUgbmVlZGVkLCB0aGUgcmVuZGVyZXJzIHNob3VsZCBjbGVhbnVwIGFsbCB0aGUgZ2wgdGV4dHVyZXMuXG4gICAgLy8gdGhpcy5fZ2xUZXh0dXJlcyA9IHt9O1xufTtcblxuLyoqXG4gKiBDaGFuZ2VzIHRoZSBzb3VyY2UgaW1hZ2Ugb2YgdGhlIHRleHR1cmUuXG4gKiBUaGUgb3JpZ2luYWwgc291cmNlIG11c3QgYmUgYW4gSW1hZ2UgZWxlbWVudC5cbiAqXG4gKiBAcGFyYW0gbmV3U3JjIHtzdHJpbmd9IHRoZSBwYXRoIG9mIHRoZSBpbWFnZVxuICovXG5CYXNlVGV4dHVyZS5wcm90b3R5cGUudXBkYXRlU291cmNlSW1hZ2UgPSBmdW5jdGlvbiAobmV3U3JjKVxue1xuICAgIHRoaXMuc291cmNlLnNyYyA9IG5ld1NyYztcblxuICAgIHRoaXMubG9hZFNvdXJjZSh0aGlzLnNvdXJjZSk7XG59O1xuXG4vKipcbiAqIEhlbHBlciBmdW5jdGlvbiB0aGF0IGNyZWF0ZXMgYSBiYXNlIHRleHR1cmUgZnJvbSB0aGUgZ2l2ZW4gaW1hZ2UgdXJsLlxuICogSWYgdGhlIGltYWdlIGlzIG5vdCBpbiB0aGUgYmFzZSB0ZXh0dXJlIGNhY2hlIGl0IHdpbGwgYmUgY3JlYXRlZCBhbmQgbG9hZGVkLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBwYXJhbSBpbWFnZVVybCB7c3RyaW5nfSBUaGUgaW1hZ2UgdXJsIG9mIHRoZSB0ZXh0dXJlXG4gKiBAcGFyYW0gW2Nyb3Nzb3JpZ2luPShhdXRvKV0ge2Jvb2xlYW59IFNob3VsZCB1c2UgYW5vbnltb3VzIENPUlM/IERlZmF1bHRzIHRvIHRydWUgaWYgdGhlIFVSTCBpcyBub3QgYSBkYXRhLVVSSS5cbiAqIEBwYXJhbSBbc2NhbGVNb2RlPVBJWEkuU0NBTEVfTU9ERVMuREVGQVVMVF0ge251bWJlcn0gU2VlIHtAbGluayBQSVhJLlNDQUxFX01PREVTfSBmb3IgcG9zc2libGUgdmFsdWVzXG4gKiBAcmV0dXJuIFBJWEkuQmFzZVRleHR1cmVcbiAqL1xuQmFzZVRleHR1cmUuZnJvbUltYWdlID0gZnVuY3Rpb24gKGltYWdlVXJsLCBjcm9zc29yaWdpbiwgc2NhbGVNb2RlKVxue1xuICAgIHZhciBiYXNlVGV4dHVyZSA9IHV0aWxzLkJhc2VUZXh0dXJlQ2FjaGVbaW1hZ2VVcmxdO1xuXG4gICAgaWYgKGNyb3Nzb3JpZ2luID09PSB1bmRlZmluZWQgJiYgaW1hZ2VVcmwuaW5kZXhPZignZGF0YTonKSAhPT0gMClcbiAgICB7XG4gICAgICAgIGNyb3Nzb3JpZ2luID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBpZiAoIWJhc2VUZXh0dXJlKVxuICAgIHtcbiAgICAgICAgLy8gbmV3IEltYWdlKCkgYnJlYWtzIHRleCBsb2FkaW5nIGluIHNvbWUgdmVyc2lvbnMgb2YgQ2hyb21lLlxuICAgICAgICAvLyBTZWUgaHR0cHM6Ly9jb2RlLmdvb2dsZS5jb20vcC9jaHJvbWl1bS9pc3N1ZXMvZGV0YWlsP2lkPTIzODA3MVxuICAgICAgICB2YXIgaW1hZ2UgPSBuZXcgSW1hZ2UoKTsvL2RvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2ltZycpO1xuICAgICAgICBpZiAoY3Jvc3NvcmlnaW4pXG4gICAgICAgIHtcbiAgICAgICAgICAgIGltYWdlLmNyb3NzT3JpZ2luID0gJyc7XG4gICAgICAgIH1cblxuICAgICAgICBiYXNlVGV4dHVyZSA9IG5ldyBCYXNlVGV4dHVyZShpbWFnZSwgc2NhbGVNb2RlKTtcbiAgICAgICAgYmFzZVRleHR1cmUuaW1hZ2VVcmwgPSBpbWFnZVVybDtcblxuICAgICAgICBpbWFnZS5zcmMgPSBpbWFnZVVybDtcblxuICAgICAgICB1dGlscy5CYXNlVGV4dHVyZUNhY2hlW2ltYWdlVXJsXSA9IGJhc2VUZXh0dXJlO1xuXG4gICAgICAgIC8vIGlmIHRoZXJlIGlzIGFuIEAyeCBhdCB0aGUgZW5kIG9mIHRoZSB1cmwgd2UgYXJlIGdvaW5nIHRvIGFzc3VtZSBpdHMgYSBoaWdocmVzIGltYWdlXG4gICAgICAgIGJhc2VUZXh0dXJlLnJlc29sdXRpb24gPSB1dGlscy5nZXRSZXNvbHV0aW9uT2ZVcmwoaW1hZ2VVcmwpO1xuICAgIH1cblxuICAgIHJldHVybiBiYXNlVGV4dHVyZTtcbn07XG5cbi8qKlxuICogSGVscGVyIGZ1bmN0aW9uIHRoYXQgY3JlYXRlcyBhIGJhc2UgdGV4dHVyZSBmcm9tIHRoZSBnaXZlbiBjYW52YXMgZWxlbWVudC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAcGFyYW0gY2FudmFzIHtDYW52YXN9IFRoZSBjYW52YXMgZWxlbWVudCBzb3VyY2Ugb2YgdGhlIHRleHR1cmVcbiAqIEBwYXJhbSBzY2FsZU1vZGUge251bWJlcn0gU2VlIHtAbGluayBQSVhJLlNDQUxFX01PREVTfSBmb3IgcG9zc2libGUgdmFsdWVzXG4gKiBAcmV0dXJuIFBJWEkuQmFzZVRleHR1cmVcbiAqL1xuQmFzZVRleHR1cmUuZnJvbUNhbnZhcyA9IGZ1bmN0aW9uIChjYW52YXMsIHNjYWxlTW9kZSlcbntcbiAgICBpZiAoIWNhbnZhcy5fcGl4aUlkKVxuICAgIHtcbiAgICAgICAgY2FudmFzLl9waXhpSWQgPSAnY2FudmFzXycgKyB1dGlscy51aWQoKTtcbiAgICB9XG5cbiAgICB2YXIgYmFzZVRleHR1cmUgPSB1dGlscy5CYXNlVGV4dHVyZUNhY2hlW2NhbnZhcy5fcGl4aUlkXTtcblxuICAgIGlmICghYmFzZVRleHR1cmUpXG4gICAge1xuICAgICAgICBiYXNlVGV4dHVyZSA9IG5ldyBCYXNlVGV4dHVyZShjYW52YXMsIHNjYWxlTW9kZSk7XG4gICAgICAgIHV0aWxzLkJhc2VUZXh0dXJlQ2FjaGVbY2FudmFzLl9waXhpSWRdID0gYmFzZVRleHR1cmU7XG4gICAgfVxuXG4gICAgcmV0dXJuIGJhc2VUZXh0dXJlO1xufTtcbiIsInZhciBCYXNlVGV4dHVyZSA9IHJlcXVpcmUoJy4vQmFzZVRleHR1cmUnKSxcbiAgICBUZXh0dXJlID0gcmVxdWlyZSgnLi9UZXh0dXJlJyksXG4gICAgUmVuZGVyVGFyZ2V0ID0gcmVxdWlyZSgnLi4vcmVuZGVyZXJzL3dlYmdsL3V0aWxzL1JlbmRlclRhcmdldCcpLFxuICAgIEZpbHRlck1hbmFnZXIgPSByZXF1aXJlKCcuLi9yZW5kZXJlcnMvd2ViZ2wvbWFuYWdlcnMvRmlsdGVyTWFuYWdlcicpLFxuICAgIENhbnZhc0J1ZmZlciA9IHJlcXVpcmUoJy4uL3JlbmRlcmVycy9jYW52YXMvdXRpbHMvQ2FudmFzQnVmZmVyJyksXG4gICAgbWF0aCA9IHJlcXVpcmUoJy4uL21hdGgnKSxcbiAgICBDT05TVCA9IHJlcXVpcmUoJy4uL2NvbnN0JyksXG4gICAgdGVtcE1hdHJpeCA9IG5ldyBtYXRoLk1hdHJpeCgpO1xuXG4vKipcbiAqIEEgUmVuZGVyVGV4dHVyZSBpcyBhIHNwZWNpYWwgdGV4dHVyZSB0aGF0IGFsbG93cyBhbnkgUGl4aSBkaXNwbGF5IG9iamVjdCB0byBiZSByZW5kZXJlZCB0byBpdC5cbiAqXG4gKiBfX0hpbnRfXzogQWxsIERpc3BsYXlPYmplY3RzIChpLmUuIFNwcml0ZXMpIHRoYXQgcmVuZGVyIHRvIGEgUmVuZGVyVGV4dHVyZSBzaG91bGQgYmUgcHJlbG9hZGVkXG4gKiBvdGhlcndpc2UgYmxhY2sgcmVjdGFuZ2xlcyB3aWxsIGJlIGRyYXduIGluc3RlYWQuXG4gKlxuICogQSBSZW5kZXJUZXh0dXJlIHRha2VzIGEgc25hcHNob3Qgb2YgYW55IERpc3BsYXkgT2JqZWN0IGdpdmVuIHRvIGl0cyByZW5kZXIgbWV0aG9kLiBUaGUgcG9zaXRpb25cbiAqIGFuZCByb3RhdGlvbiBvZiB0aGUgZ2l2ZW4gRGlzcGxheSBPYmplY3RzIGlzIGlnbm9yZWQuIEZvciBleGFtcGxlOlxuICpcbiAqIGBgYGpzXG4gKiB2YXIgcmVuZGVyZXIgPSBQSVhJLmF1dG9EZXRlY3RSZW5kZXJlcigxMDI0LCAxMDI0LCB7IHZpZXc6IGNhbnZhcywgcmF0aW86IDEgfSk7XG4gKiB2YXIgcmVuZGVyVGV4dHVyZSA9IG5ldyBQSVhJLlJlbmRlclRleHR1cmUocmVuZGVyZXIsIDgwMCwgNjAwKTtcbiAqIHZhciBzcHJpdGUgPSBQSVhJLlNwcml0ZS5mcm9tSW1hZ2UoXCJzcGluT2JqXzAxLnBuZ1wiKTtcbiAqXG4gKiBzcHJpdGUucG9zaXRpb24ueCA9IDgwMC8yO1xuICogc3ByaXRlLnBvc2l0aW9uLnkgPSA2MDAvMjtcbiAqIHNwcml0ZS5hbmNob3IueCA9IDAuNTtcbiAqIHNwcml0ZS5hbmNob3IueSA9IDAuNTtcbiAqXG4gKiByZW5kZXJUZXh0dXJlLnJlbmRlcihzcHJpdGUpO1xuICogYGBgXG4gKlxuICogVGhlIFNwcml0ZSBpbiB0aGlzIGNhc2Ugd2lsbCBiZSByZW5kZXJlZCB0byBhIHBvc2l0aW9uIG9mIDAsMC4gVG8gcmVuZGVyIHRoaXMgc3ByaXRlIGF0IGl0cyBhY3R1YWxcbiAqIHBvc2l0aW9uIGEgQ29udGFpbmVyIHNob3VsZCBiZSB1c2VkOlxuICpcbiAqIGBgYGpzXG4gKiB2YXIgZG9jID0gbmV3IFBJWEkuQ29udGFpbmVyKCk7XG4gKlxuICogZG9jLmFkZENoaWxkKHNwcml0ZSk7XG4gKlxuICogcmVuZGVyVGV4dHVyZS5yZW5kZXIoZG9jKTsgIC8vIFJlbmRlcnMgdG8gY2VudGVyIG9mIHJlbmRlclRleHR1cmVcbiAqIGBgYFxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5UZXh0dXJlXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLkNhbnZhc1JlbmRlcmVyfFBJWEkuV2ViR0xSZW5kZXJlcn0gVGhlIHJlbmRlcmVyIHVzZWQgZm9yIHRoaXMgUmVuZGVyVGV4dHVyZVxuICogQHBhcmFtIFt3aWR0aD0xMDBdIHtudW1iZXJ9IFRoZSB3aWR0aCBvZiB0aGUgcmVuZGVyIHRleHR1cmVcbiAqIEBwYXJhbSBbaGVpZ2h0PTEwMF0ge251bWJlcn0gVGhlIGhlaWdodCBvZiB0aGUgcmVuZGVyIHRleHR1cmVcbiAqIEBwYXJhbSBbc2NhbGVNb2RlXSB7bnVtYmVyfSBTZWUge0BsaW5rIFBJWEkuU0NBTEVfTU9ERVN9IGZvciBwb3NzaWJsZSB2YWx1ZXNcbiAqIEBwYXJhbSBbcmVzb2x1dGlvbj0xXSB7bnVtYmVyfSBUaGUgcmVzb2x1dGlvbiBvZiB0aGUgdGV4dHVyZSBiZWluZyBnZW5lcmF0ZWRcbiAqL1xuZnVuY3Rpb24gUmVuZGVyVGV4dHVyZShyZW5kZXJlciwgd2lkdGgsIGhlaWdodCwgc2NhbGVNb2RlLCByZXNvbHV0aW9uKVxue1xuICAgIGlmICghcmVuZGVyZXIpXG4gICAge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1VuYWJsZSB0byBjcmVhdGUgUmVuZGVyVGV4dHVyZSwgeW91IG11c3QgcGFzcyBhIHJlbmRlcmVyIGludG8gdGhlIGNvbnN0cnVjdG9yLicpO1xuICAgIH1cblxuICAgIHdpZHRoID0gd2lkdGggfHwgMTAwO1xuICAgIGhlaWdodCA9IGhlaWdodCB8fCAxMDA7XG4gICAgcmVzb2x1dGlvbiA9IHJlc29sdXRpb24gfHwgQ09OU1QuUkVTT0xVVElPTjtcblxuICAgIC8qKlxuICAgICAqIFRoZSBiYXNlIHRleHR1cmUgb2JqZWN0IHRoYXQgdGhpcyB0ZXh0dXJlIHVzZXNcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge0Jhc2VUZXh0dXJlfVxuICAgICAqL1xuICAgIHZhciBiYXNlVGV4dHVyZSA9IG5ldyBCYXNlVGV4dHVyZSgpO1xuICAgIGJhc2VUZXh0dXJlLndpZHRoID0gd2lkdGg7XG4gICAgYmFzZVRleHR1cmUuaGVpZ2h0ID0gaGVpZ2h0O1xuICAgIGJhc2VUZXh0dXJlLnJlc29sdXRpb24gPSByZXNvbHV0aW9uO1xuICAgIGJhc2VUZXh0dXJlLnNjYWxlTW9kZSA9IHNjYWxlTW9kZSB8fCBDT05TVC5TQ0FMRV9NT0RFUy5ERUZBVUxUO1xuICAgIGJhc2VUZXh0dXJlLmhhc0xvYWRlZCA9IHRydWU7XG5cblxuICAgIFRleHR1cmUuY2FsbCh0aGlzLFxuICAgICAgICBiYXNlVGV4dHVyZSxcbiAgICAgICAgbmV3IG1hdGguUmVjdGFuZ2xlKDAsIDAsIHdpZHRoLCBoZWlnaHQpXG4gICAgKTtcblxuXG4gICAgLyoqXG4gICAgICogVGhlIHdpdGggb2YgdGhlIHJlbmRlciB0ZXh0dXJlXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy53aWR0aCA9IHdpZHRoO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGhlaWdodCBvZiB0aGUgcmVuZGVyIHRleHR1cmVcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLmhlaWdodCA9IGhlaWdodDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBSZXNvbHV0aW9uIG9mIHRoZSB0ZXh0dXJlLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMucmVzb2x1dGlvbiA9IHJlc29sdXRpb247XG5cbiAgICAvKipcbiAgICAgKiBEcmF3L3JlbmRlciB0aGUgZ2l2ZW4gRGlzcGxheU9iamVjdCBvbnRvIHRoZSB0ZXh0dXJlLlxuICAgICAqXG4gICAgICogVGhlIGRpc3BsYXlPYmplY3QgYW5kIGRlc2NlbmRlbnRzIGFyZSB0cmFuc2Zvcm1lZCBkdXJpbmcgdGhpcyBvcGVyYXRpb24uXG4gICAgICogSWYgYHVwZGF0ZVRyYW5zZm9ybWAgaXMgdHJ1ZSB0aGVuIHRoZSB0cmFuc2Zvcm1hdGlvbnMgd2lsbCBiZSByZXN0b3JlZCBiZWZvcmUgdGhlXG4gICAgICogbWV0aG9kIHJldHVybnMuIE90aGVyd2lzZSBpdCBpcyB1cCB0byB0aGUgY2FsbGluZyBjb2RlIHRvIGNvcnJlY3RseSB1c2Ugb3IgcmVzZXRcbiAgICAgKiB0aGUgdHJhbnNmb3JtZWQgZGlzcGxheSBvYmplY3RzLlxuICAgICAqXG4gICAgICogVGhlIGRpc3BsYXkgb2JqZWN0IGlzIGFsd2F5cyByZW5kZXJlZCB3aXRoIGEgd29ybGRBbHBoYSB2YWx1ZSBvZiAxLlxuICAgICAqXG4gICAgICogQG1ldGhvZFxuICAgICAqIEBwYXJhbSBkaXNwbGF5T2JqZWN0IHtQSVhJLkRpc3BsYXlPYmplY3R9IFRoZSBkaXNwbGF5IG9iamVjdCB0byByZW5kZXIgdGhpcyB0ZXh0dXJlIG9uXG4gICAgICogQHBhcmFtIFttYXRyaXhdIHtQSVhJLk1hdHJpeH0gT3B0aW9uYWwgbWF0cml4IHRvIGFwcGx5IHRvIHRoZSBkaXNwbGF5IG9iamVjdCBiZWZvcmUgcmVuZGVyaW5nLlxuICAgICAqIEBwYXJhbSBbY2xlYXI9ZmFsc2VdIHtib29sZWFufSBJZiB0cnVlIHRoZSB0ZXh0dXJlIHdpbGwgYmUgY2xlYXJlZCBiZWZvcmUgdGhlIGRpc3BsYXlPYmplY3QgaXMgZHJhd25cbiAgICAgKiBAcGFyYW0gW3VwZGF0ZVRyYW5zZm9ybT10cnVlXSB7Ym9vbGVhbn0gSWYgdHJ1ZSB0aGUgZGlzcGxheU9iamVjdCdzIHdvcmxkVHJhbnNmb3JtL3dvcmxkQWxwaGEgYW5kIGFsbCBjaGlsZHJlblxuICAgICAqICB0cmFuc2Zvcm1hdGlvbnMgd2lsbCBiZSByZXN0b3JlZC4gTm90IHJlc3RvcmluZyB0aGlzIGluZm9ybWF0aW9uIHdpbGwgYmUgYSBsaXR0bGUgZmFzdGVyLlxuICAgICAqL1xuICAgIHRoaXMucmVuZGVyID0gbnVsbDtcblxuICAgIC8qKlxuICAgICAqIFRoZSByZW5kZXJlciB0aGlzIFJlbmRlclRleHR1cmUgdXNlcy4gQSBSZW5kZXJUZXh0dXJlIGNhbiBvbmx5IGJlbG9uZyB0byBvbmUgcmVuZGVyZXIgYXQgdGhlIG1vbWVudCBpZiBpdHMgd2ViR0wuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLkNhbnZhc1JlbmRlcmVyfFBJWEkuV2ViR0xSZW5kZXJlcn1cbiAgICAgKi9cbiAgICB0aGlzLnJlbmRlcmVyID0gcmVuZGVyZXI7XG5cbiAgICBpZiAodGhpcy5yZW5kZXJlci50eXBlID09PSBDT05TVC5SRU5ERVJFUl9UWVBFLldFQkdMKVxuICAgIHtcbiAgICAgICAgdmFyIGdsID0gdGhpcy5yZW5kZXJlci5nbDtcblxuICAgICAgICB0aGlzLnRleHR1cmVCdWZmZXIgPSBuZXcgUmVuZGVyVGFyZ2V0KGdsLCB0aGlzLndpZHRoLCB0aGlzLmhlaWdodCwgYmFzZVRleHR1cmUuc2NhbGVNb2RlLCB0aGlzLnJlc29sdXRpb24pOy8vLCB0aGlzLmJhc2VUZXh0dXJlLnNjYWxlTW9kZSk7XG4gICAgICAgIHRoaXMuYmFzZVRleHR1cmUuX2dsVGV4dHVyZXNbZ2wuaWRdID0gdGhpcy50ZXh0dXJlQnVmZmVyLnRleHR1cmU7XG5cbiAgICAgICAgLy9UT0RPIHJlZmFjdG9yIGZpbHRlciBtYW5hZ2VyLi4gYXMgcmVhbGx5IGl0cyBubyBsb25nZXIgYSBtYW5hZ2VyIGlmIHdlIHVzZSBpdCBoZXJlLi5cbiAgICAgICAgdGhpcy5maWx0ZXJNYW5hZ2VyID0gbmV3IEZpbHRlck1hbmFnZXIodGhpcy5yZW5kZXJlcik7XG4gICAgICAgIHRoaXMuZmlsdGVyTWFuYWdlci5vbkNvbnRleHRDaGFuZ2UoKTtcbiAgICAgICAgdGhpcy5maWx0ZXJNYW5hZ2VyLnJlc2l6ZSh3aWR0aCwgaGVpZ2h0KTtcbiAgICAgICAgdGhpcy5yZW5kZXIgPSB0aGlzLnJlbmRlcldlYkdMO1xuXG4gICAgICAgIC8vIHRoZSBjcmVhdGlvbiBvZiBhIGZpbHRlciBtYW5hZ2VyIHVuYmluZHMgdGhlIGJ1ZmZlcnMuLlxuICAgICAgICB0aGlzLnJlbmRlcmVyLmN1cnJlbnRSZW5kZXJlci5zdGFydCgpO1xuICAgICAgICB0aGlzLnJlbmRlcmVyLmN1cnJlbnRSZW5kZXJUYXJnZXQuYWN0aXZhdGUoKTtcbiAgICB9XG4gICAgZWxzZVxuICAgIHtcblxuICAgICAgICB0aGlzLnJlbmRlciA9IHRoaXMucmVuZGVyQ2FudmFzO1xuICAgICAgICB0aGlzLnRleHR1cmVCdWZmZXIgPSBuZXcgQ2FudmFzQnVmZmVyKHRoaXMud2lkdGgqIHRoaXMucmVzb2x1dGlvbiwgdGhpcy5oZWlnaHQqIHRoaXMucmVzb2x1dGlvbik7XG4gICAgICAgIHRoaXMuYmFzZVRleHR1cmUuc291cmNlID0gdGhpcy50ZXh0dXJlQnVmZmVyLmNhbnZhcztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqL1xuICAgIHRoaXMudmFsaWQgPSB0cnVlO1xuXG4gICAgdGhpcy5fdXBkYXRlVXZzKCk7XG59XG5cblJlbmRlclRleHR1cmUucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShUZXh0dXJlLnByb3RvdHlwZSk7XG5SZW5kZXJUZXh0dXJlLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFJlbmRlclRleHR1cmU7XG5tb2R1bGUuZXhwb3J0cyA9IFJlbmRlclRleHR1cmU7XG5cbi8qKlxuICogUmVzaXplcyB0aGUgUmVuZGVyVGV4dHVyZS5cbiAqXG4gKiBAcGFyYW0gd2lkdGgge251bWJlcn0gVGhlIHdpZHRoIHRvIHJlc2l6ZSB0by5cbiAqIEBwYXJhbSBoZWlnaHQge251bWJlcn0gVGhlIGhlaWdodCB0byByZXNpemUgdG8uXG4gKiBAcGFyYW0gdXBkYXRlQmFzZSB7Ym9vbGVhbn0gU2hvdWxkIHRoZSBiYXNlVGV4dHVyZS53aWR0aCBhbmQgaGVpZ2h0IHZhbHVlcyBiZSByZXNpemVkIGFzIHdlbGw/XG4gKi9cblJlbmRlclRleHR1cmUucHJvdG90eXBlLnJlc2l6ZSA9IGZ1bmN0aW9uICh3aWR0aCwgaGVpZ2h0LCB1cGRhdGVCYXNlKVxue1xuICAgIGlmICh3aWR0aCA9PT0gdGhpcy53aWR0aCAmJiBoZWlnaHQgPT09IHRoaXMuaGVpZ2h0KVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMudmFsaWQgPSAod2lkdGggPiAwICYmIGhlaWdodCA+IDApO1xuXG4gICAgdGhpcy53aWR0aCA9IHRoaXMuX2ZyYW1lLndpZHRoID0gdGhpcy5jcm9wLndpZHRoID0gd2lkdGg7XG4gICAgdGhpcy5oZWlnaHQgPSAgdGhpcy5fZnJhbWUuaGVpZ2h0ID0gdGhpcy5jcm9wLmhlaWdodCA9IGhlaWdodDtcblxuICAgIGlmICh1cGRhdGVCYXNlKVxuICAgIHtcbiAgICAgICAgdGhpcy5iYXNlVGV4dHVyZS53aWR0aCA9IHRoaXMud2lkdGg7XG4gICAgICAgIHRoaXMuYmFzZVRleHR1cmUuaGVpZ2h0ID0gdGhpcy5oZWlnaHQ7XG4gICAgfVxuXG4gICAgaWYgKCF0aGlzLnZhbGlkKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMudGV4dHVyZUJ1ZmZlci5yZXNpemUodGhpcy53aWR0aCwgdGhpcy5oZWlnaHQpO1xuXG4gICAgaWYodGhpcy5maWx0ZXJNYW5hZ2VyKVxuICAgIHtcbiAgICAgICAgdGhpcy5maWx0ZXJNYW5hZ2VyLnJlc2l6ZSh0aGlzLndpZHRoLCB0aGlzLmhlaWdodCk7XG4gICAgfVxufTtcblxuLyoqXG4gKiBDbGVhcnMgdGhlIFJlbmRlclRleHR1cmUuXG4gKlxuICovXG5SZW5kZXJUZXh0dXJlLnByb3RvdHlwZS5jbGVhciA9IGZ1bmN0aW9uICgpXG57XG4gICAgaWYgKCF0aGlzLnZhbGlkKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnJlbmRlcmVyLnR5cGUgPT09IENPTlNULlJFTkRFUkVSX1RZUEUuV0VCR0wpXG4gICAge1xuICAgICAgICB0aGlzLnJlbmRlcmVyLmdsLmJpbmRGcmFtZWJ1ZmZlcih0aGlzLnJlbmRlcmVyLmdsLkZSQU1FQlVGRkVSLCB0aGlzLnRleHR1cmVCdWZmZXIuZnJhbWVCdWZmZXIpO1xuICAgIH1cblxuICAgIHRoaXMudGV4dHVyZUJ1ZmZlci5jbGVhcigpO1xufTtcblxuLyoqXG4gKiBJbnRlcm5hbCBtZXRob2QgYXNzaWduZWQgdG8gdGhlIGByZW5kZXJgIHByb3BlcnR5IGlmIHVzaW5nIGEgQ2FudmFzUmVuZGVyZXIuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSBkaXNwbGF5T2JqZWN0IHtQSVhJLkRpc3BsYXlPYmplY3R9IFRoZSBkaXNwbGF5IG9iamVjdCB0byByZW5kZXIgdGhpcyB0ZXh0dXJlIG9uXG4gKiBAcGFyYW0gW21hdHJpeF0ge1BJWEkuTWF0cml4fSBPcHRpb25hbCBtYXRyaXggdG8gYXBwbHkgdG8gdGhlIGRpc3BsYXkgb2JqZWN0IGJlZm9yZSByZW5kZXJpbmcuXG4gKiBAcGFyYW0gW2NsZWFyPWZhbHNlXSB7Ym9vbGVhbn0gSWYgdHJ1ZSB0aGUgdGV4dHVyZSB3aWxsIGJlIGNsZWFyZWQgYmVmb3JlIHRoZSBkaXNwbGF5T2JqZWN0IGlzIGRyYXduXG4gKiBAcGFyYW0gW3VwZGF0ZVRyYW5zZm9ybT10cnVlXSB7Ym9vbGVhbn0gSWYgdHJ1ZSB0aGUgZGlzcGxheU9iamVjdCdzIHdvcmxkVHJhbnNmb3JtL3dvcmxkQWxwaGEgYW5kIGFsbCBjaGlsZHJlblxuICogIHRyYW5zZm9ybWF0aW9ucyB3aWxsIGJlIHJlc3RvcmVkLiBOb3QgcmVzdG9yaW5nIHRoaXMgaW5mb3JtYXRpb24gd2lsbCBiZSBhIGxpdHRsZSBmYXN0ZXIuXG4gKi9cblJlbmRlclRleHR1cmUucHJvdG90eXBlLnJlbmRlcldlYkdMID0gZnVuY3Rpb24gKGRpc3BsYXlPYmplY3QsIG1hdHJpeCwgY2xlYXIsIHVwZGF0ZVRyYW5zZm9ybSlcbntcbiAgICBpZiAoIXRoaXMudmFsaWQpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG5cbiAgICB1cGRhdGVUcmFuc2Zvcm0gPSAodXBkYXRlVHJhbnNmb3JtICE9PSB1bmRlZmluZWQpID8gdXBkYXRlVHJhbnNmb3JtIDogdHJ1ZTsvLyF1cGRhdGVUcmFuc2Zvcm07XG5cbiAgICB0aGlzLnRleHR1cmVCdWZmZXIudHJhbnNmb3JtID0gbWF0cml4O1xuXG4gICAgLy9UT0RPIG5vdCBhIGZhbiB0aGF0IHRoaXMgaXMgaGVyZS4uLiBpdCB3aWxsIG1vdmUhXG4gICAgdGhpcy50ZXh0dXJlQnVmZmVyLmFjdGl2YXRlKCk7XG5cbiAgICAvLyBzZXRXb3JsZCBBbHBoYSB0byBlbnN1cmUgdGhhdCB0aGUgb2JqZWN0IGlzIHJlbmRlcmVyIGF0IGZ1bGwgb3BhY2l0eVxuICAgIGRpc3BsYXlPYmplY3Qud29ybGRBbHBoYSA9IDE7XG5cbiAgICBpZiAodXBkYXRlVHJhbnNmb3JtKVxuICAgIHtcblxuICAgICAgICAvLyByZXNldCB0aGUgbWF0cml4IG9mIHRoZSBkaXNwbGF0eU9iamVjdC4uXG4gICAgICAgIGRpc3BsYXlPYmplY3Qud29ybGRUcmFuc2Zvcm0uaWRlbnRpdHkoKTtcblxuICAgICAgICBkaXNwbGF5T2JqZWN0LmN1cnJlbnRCb3VuZHMgPSBudWxsO1xuXG4gICAgICAgIC8vIFRpbWUgdG8gdXBkYXRlIGFsbCB0aGUgY2hpbGRyZW4gb2YgdGhlIGRpc3BsYXlPYmplY3Qgd2l0aCB0aGUgbmV3IG1hdHJpeC4uXG4gICAgICAgIHZhciBjaGlsZHJlbiA9IGRpc3BsYXlPYmplY3QuY2hpbGRyZW47XG4gICAgICAgIHZhciBpLCBqO1xuXG4gICAgICAgIGZvciAoaSA9IDAsIGogPSBjaGlsZHJlbi5sZW5ndGg7IGkgPCBqOyArK2kpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNoaWxkcmVuW2ldLnVwZGF0ZVRyYW5zZm9ybSgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy9UT0RPIHJlbmFtZSB0ZXh0dXJlQnVmZmVyIHRvIHJlbmRlclRhcmdldC4uXG4gICAgdmFyIHRlbXAgPSAgdGhpcy5yZW5kZXJlci5maWx0ZXJNYW5hZ2VyO1xuXG4gICAgdGhpcy5yZW5kZXJlci5maWx0ZXJNYW5hZ2VyID0gdGhpcy5maWx0ZXJNYW5hZ2VyO1xuICAgIHRoaXMucmVuZGVyZXIucmVuZGVyRGlzcGxheU9iamVjdChkaXNwbGF5T2JqZWN0LCB0aGlzLnRleHR1cmVCdWZmZXIsIGNsZWFyKTtcblxuICAgIHRoaXMucmVuZGVyZXIuZmlsdGVyTWFuYWdlciA9IHRlbXA7XG59O1xuXG5cbi8qKlxuICogSW50ZXJuYWwgbWV0aG9kIGFzc2lnbmVkIHRvIHRoZSBgcmVuZGVyYCBwcm9wZXJ0eSBpZiB1c2luZyBhIENhbnZhc1JlbmRlcmVyLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0gZGlzcGxheU9iamVjdCB7UElYSS5EaXNwbGF5T2JqZWN0fSBUaGUgZGlzcGxheSBvYmplY3QgdG8gcmVuZGVyIHRoaXMgdGV4dHVyZSBvblxuICogQHBhcmFtIFttYXRyaXhdIHtQSVhJLk1hdHJpeH0gT3B0aW9uYWwgbWF0cml4IHRvIGFwcGx5IHRvIHRoZSBkaXNwbGF5IG9iamVjdCBiZWZvcmUgcmVuZGVyaW5nLlxuICogQHBhcmFtIFtjbGVhcl0ge2Jvb2xlYW59IElmIHRydWUgdGhlIHRleHR1cmUgd2lsbCBiZSBjbGVhcmVkIGJlZm9yZSB0aGUgZGlzcGxheU9iamVjdCBpcyBkcmF3blxuICovXG5SZW5kZXJUZXh0dXJlLnByb3RvdHlwZS5yZW5kZXJDYW52YXMgPSBmdW5jdGlvbiAoZGlzcGxheU9iamVjdCwgbWF0cml4LCBjbGVhciwgdXBkYXRlVHJhbnNmb3JtKVxue1xuICAgIGlmICghdGhpcy52YWxpZClcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB1cGRhdGVUcmFuc2Zvcm0gPSAhIXVwZGF0ZVRyYW5zZm9ybTtcblxuICAgIHZhciB3dCA9IHRlbXBNYXRyaXg7XG5cbiAgICB3dC5pZGVudGl0eSgpO1xuXG4gICAgaWYgKG1hdHJpeClcbiAgICB7XG4gICAgICAgIHd0LmFwcGVuZChtYXRyaXgpO1xuICAgIH1cblxuICAgIHZhciBjYWNoZWRXdCA9IGRpc3BsYXlPYmplY3Qud29ybGRUcmFuc2Zvcm07XG4gICAgZGlzcGxheU9iamVjdC53b3JsZFRyYW5zZm9ybSA9IHd0O1xuXG4gICAgLy8gc2V0V29ybGQgQWxwaGEgdG8gZW5zdXJlIHRoYXQgdGhlIG9iamVjdCBpcyByZW5kZXJlciBhdCBmdWxsIG9wYWNpdHlcbiAgICBkaXNwbGF5T2JqZWN0LndvcmxkQWxwaGEgPSAxO1xuXG4gICAgLy8gVGltZSB0byB1cGRhdGUgYWxsIHRoZSBjaGlsZHJlbiBvZiB0aGUgZGlzcGxheU9iamVjdCB3aXRoIHRoZSBuZXcgbWF0cml4Li5cbiAgICB2YXIgY2hpbGRyZW4gPSBkaXNwbGF5T2JqZWN0LmNoaWxkcmVuO1xuICAgIHZhciBpLCBqO1xuXG4gICAgZm9yIChpID0gMCwgaiA9IGNoaWxkcmVuLmxlbmd0aDsgaSA8IGo7ICsraSlcbiAgICB7XG4gICAgICAgIGNoaWxkcmVuW2ldLnVwZGF0ZVRyYW5zZm9ybSgpO1xuICAgIH1cblxuICAgIGlmIChjbGVhcilcbiAgICB7XG4gICAgICAgIHRoaXMudGV4dHVyZUJ1ZmZlci5jbGVhcigpO1xuICAgIH1cblxuXG4vLyAgICB0aGlzLnRleHR1cmVCdWZmZXIuXG4gICAgdmFyIGNvbnRleHQgPSB0aGlzLnRleHR1cmVCdWZmZXIuY29udGV4dDtcblxuICAgIHZhciByZWFsUmVzb2x1dGlvbiA9IHRoaXMucmVuZGVyZXIucmVzb2x1dGlvbjtcblxuICAgIHRoaXMucmVuZGVyZXIucmVzb2x1dGlvbiA9IHRoaXMucmVzb2x1dGlvbjtcblxuICAgIHRoaXMucmVuZGVyZXIucmVuZGVyRGlzcGxheU9iamVjdChkaXNwbGF5T2JqZWN0LCBjb250ZXh0KTtcblxuICAgIHRoaXMucmVuZGVyZXIucmVzb2x1dGlvbiA9IHJlYWxSZXNvbHV0aW9uO1xuXG4gICAgaWYoZGlzcGxheU9iamVjdC53b3JsZFRyYW5zZm9ybSA9PT0gd3QpXG4gICAge1xuICAgICAgICAvLyBmaXhlcyBjYWNoZUFzQml0bWFwIEhhcHBlbmluZyBkdXJpbmcgdGhlIGFib3ZlLi5cbiAgICAgICAgZGlzcGxheU9iamVjdC53b3JsZFRyYW5zZm9ybSA9IGNhY2hlZFd0O1xuICAgIH1cblxufTtcblxuLyoqXG4gKiBEZXN0cm95cyB0aGlzIHRleHR1cmVcbiAqXG4gKiBAcGFyYW0gZGVzdHJveUJhc2Uge2Jvb2xlYW59IFdoZXRoZXIgdG8gZGVzdHJveSB0aGUgYmFzZSB0ZXh0dXJlIGFzIHdlbGxcbiAqL1xuUmVuZGVyVGV4dHVyZS5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uICgpXG57XG4gICAgVGV4dHVyZS5wcm90b3R5cGUuZGVzdHJveS5jYWxsKHRoaXMsIHRydWUpO1xuXG4gICAgdGhpcy50ZXh0dXJlQnVmZmVyLmRlc3Ryb3koKTtcblxuICAgIC8vIGRlc3Ryb3kgdGhlIGZpbHRlcm1hbmFnZXIuLlxuICAgIGlmKHRoaXMuZmlsdGVyTWFuYWdlcilcbiAgICB7XG4gICAgICAgIHRoaXMuZmlsdGVyTWFuYWdlci5kZXN0cm95KCk7XG4gICAgfVxuXG4gICAgdGhpcy5yZW5kZXJlciA9IG51bGw7XG59O1xuXG4vKipcbiAqIFdpbGwgcmV0dXJuIGEgSFRNTCBJbWFnZSBvZiB0aGUgdGV4dHVyZVxuICpcbiAqIEByZXR1cm4ge0ltYWdlfVxuICovXG5SZW5kZXJUZXh0dXJlLnByb3RvdHlwZS5nZXRJbWFnZSA9IGZ1bmN0aW9uICgpXG57XG4gICAgdmFyIGltYWdlID0gbmV3IEltYWdlKCk7XG4gICAgaW1hZ2Uuc3JjID0gdGhpcy5nZXRCYXNlNjQoKTtcbiAgICByZXR1cm4gaW1hZ2U7XG59O1xuXG4vKipcbiAqIFdpbGwgcmV0dXJuIGEgYSBiYXNlNjQgZW5jb2RlZCBzdHJpbmcgb2YgdGhpcyB0ZXh0dXJlLiBJdCB3b3JrcyBieSBjYWxsaW5nIFJlbmRlclRleHR1cmUuZ2V0Q2FudmFzIGFuZCB0aGVuIHJ1bm5pbmcgdG9EYXRhVVJMIG9uIHRoYXQuXG4gKlxuICogQHJldHVybiB7c3RyaW5nfSBBIGJhc2U2NCBlbmNvZGVkIHN0cmluZyBvZiB0aGUgdGV4dHVyZS5cbiAqL1xuUmVuZGVyVGV4dHVyZS5wcm90b3R5cGUuZ2V0QmFzZTY0ID0gZnVuY3Rpb24gKClcbntcbiAgICByZXR1cm4gdGhpcy5nZXRDYW52YXMoKS50b0RhdGFVUkwoKTtcbn07XG5cbi8qKlxuICogQ3JlYXRlcyBhIENhbnZhcyBlbGVtZW50LCByZW5kZXJzIHRoaXMgUmVuZGVyVGV4dHVyZSB0byBpdCBhbmQgdGhlbiByZXR1cm5zIGl0LlxuICpcbiAqIEByZXR1cm4ge0hUTUxDYW52YXNFbGVtZW50fSBBIENhbnZhcyBlbGVtZW50IHdpdGggdGhlIHRleHR1cmUgcmVuZGVyZWQgb24uXG4gKi9cblJlbmRlclRleHR1cmUucHJvdG90eXBlLmdldENhbnZhcyA9IGZ1bmN0aW9uICgpXG57XG4gICAgaWYgKHRoaXMucmVuZGVyZXIudHlwZSA9PT0gQ09OU1QuUkVOREVSRVJfVFlQRS5XRUJHTClcbiAgICB7XG4gICAgICAgIHZhciBnbCA9IHRoaXMucmVuZGVyZXIuZ2w7XG4gICAgICAgIHZhciB3aWR0aCA9IHRoaXMudGV4dHVyZUJ1ZmZlci5zaXplLndpZHRoO1xuICAgICAgICB2YXIgaGVpZ2h0ID0gdGhpcy50ZXh0dXJlQnVmZmVyLnNpemUuaGVpZ2h0O1xuXG4gICAgICAgIHZhciB3ZWJHTFBpeGVscyA9IG5ldyBVaW50OEFycmF5KDQgKiB3aWR0aCAqIGhlaWdodCk7XG5cbiAgICAgICAgZ2wuYmluZEZyYW1lYnVmZmVyKGdsLkZSQU1FQlVGRkVSLCB0aGlzLnRleHR1cmVCdWZmZXIuZnJhbWVCdWZmZXIpO1xuICAgICAgICBnbC5yZWFkUGl4ZWxzKDAsIDAsIHdpZHRoLCBoZWlnaHQsIGdsLlJHQkEsIGdsLlVOU0lHTkVEX0JZVEUsIHdlYkdMUGl4ZWxzKTtcbiAgICAgICAgZ2wuYmluZEZyYW1lYnVmZmVyKGdsLkZSQU1FQlVGRkVSLCBudWxsKTtcblxuICAgICAgICB2YXIgdGVtcENhbnZhcyA9IG5ldyBDYW52YXNCdWZmZXIod2lkdGgsIGhlaWdodCk7XG4gICAgICAgIHZhciBjYW52YXNEYXRhID0gdGVtcENhbnZhcy5jb250ZXh0LmdldEltYWdlRGF0YSgwLCAwLCB3aWR0aCwgaGVpZ2h0KTtcbiAgICAgICAgY2FudmFzRGF0YS5kYXRhLnNldCh3ZWJHTFBpeGVscyk7XG5cbiAgICAgICAgdGVtcENhbnZhcy5jb250ZXh0LnB1dEltYWdlRGF0YShjYW52YXNEYXRhLCAwLCAwKTtcblxuICAgICAgICByZXR1cm4gdGVtcENhbnZhcy5jYW52YXM7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHJldHVybiB0aGlzLnRleHR1cmVCdWZmZXIuY2FudmFzO1xuICAgIH1cbn07XG5cbi8qKlxuICogV2lsbCByZXR1cm4gYSBvbmUtZGltZW5zaW9uYWwgYXJyYXkgY29udGFpbmluZyB0aGUgcGl4ZWwgZGF0YSBvZiB0aGUgZW50aXJlIHRleHR1cmUgaW4gUkdCQSBvcmRlciwgd2l0aCBpbnRlZ2VyIHZhbHVlcyBiZXR3ZWVuIDAgYW5kIDI1NSAoaW5jbHVkZWQpLlxuICpcbiAqIEByZXR1cm4ge1VpbnQ4Q2xhbXBlZEFycmF5fVxuICovXG5SZW5kZXJUZXh0dXJlLnByb3RvdHlwZS5nZXRQaXhlbHMgPSBmdW5jdGlvbiAoKVxue1xuICAgIHZhciB3aWR0aCwgaGVpZ2h0O1xuXG4gICAgaWYgKHRoaXMucmVuZGVyZXIudHlwZSA9PT0gQ09OU1QuUkVOREVSRVJfVFlQRS5XRUJHTClcbiAgICB7XG4gICAgICAgIHZhciBnbCA9IHRoaXMucmVuZGVyZXIuZ2w7XG4gICAgICAgIHdpZHRoID0gdGhpcy50ZXh0dXJlQnVmZmVyLnNpemUud2lkdGg7XG4gICAgICAgIGhlaWdodCA9IHRoaXMudGV4dHVyZUJ1ZmZlci5zaXplLmhlaWdodDtcblxuICAgICAgICB2YXIgd2ViR0xQaXhlbHMgPSBuZXcgVWludDhBcnJheSg0ICogd2lkdGggKiBoZWlnaHQpO1xuXG4gICAgICAgIGdsLmJpbmRGcmFtZWJ1ZmZlcihnbC5GUkFNRUJVRkZFUiwgdGhpcy50ZXh0dXJlQnVmZmVyLmZyYW1lQnVmZmVyKTtcbiAgICAgICAgZ2wucmVhZFBpeGVscygwLCAwLCB3aWR0aCwgaGVpZ2h0LCBnbC5SR0JBLCBnbC5VTlNJR05FRF9CWVRFLCB3ZWJHTFBpeGVscyk7XG4gICAgICAgIGdsLmJpbmRGcmFtZWJ1ZmZlcihnbC5GUkFNRUJVRkZFUiwgbnVsbCk7XG5cbiAgICAgICAgcmV0dXJuIHdlYkdMUGl4ZWxzO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICB3aWR0aCA9IHRoaXMudGV4dHVyZUJ1ZmZlci5jYW52YXMud2lkdGg7XG4gICAgICAgIGhlaWdodCA9IHRoaXMudGV4dHVyZUJ1ZmZlci5jYW52YXMuaGVpZ2h0O1xuXG4gICAgICAgIHJldHVybiB0aGlzLnRleHR1cmVCdWZmZXIuY2FudmFzLmdldENvbnRleHQoJzJkJykuZ2V0SW1hZ2VEYXRhKDAsIDAsIHdpZHRoLCBoZWlnaHQpLmRhdGE7XG4gICAgfVxufTtcblxuLyoqXG4gKiBXaWxsIHJldHVybiBhIG9uZS1kaW1lbnNpb25hbCBhcnJheSBjb250YWluaW5nIHRoZSBwaXhlbCBkYXRhIG9mIGEgcGl4ZWwgd2l0aGluIHRoZSB0ZXh0dXJlIGluIFJHQkEgb3JkZXIsIHdpdGggaW50ZWdlciB2YWx1ZXMgYmV0d2VlbiAwIGFuZCAyNTUgKGluY2x1ZGVkKS5cbiAqXG4gKiBAcGFyYW0geCB7bnVtYmVyfSBUaGUgeCBjb29yZGluYXRlIG9mIHRoZSBwaXhlbCB0byByZXRyaWV2ZS5cbiAqIEBwYXJhbSB5IHtudW1iZXJ9IFRoZSB5IGNvb3JkaW5hdGUgb2YgdGhlIHBpeGVsIHRvIHJldHJpZXZlLlxuICogQHJldHVybiB7VWludDhDbGFtcGVkQXJyYXl9XG4gKi9cblJlbmRlclRleHR1cmUucHJvdG90eXBlLmdldFBpeGVsID0gZnVuY3Rpb24gKHgsIHkpXG57XG4gICAgaWYgKHRoaXMucmVuZGVyZXIudHlwZSA9PT0gQ09OU1QuUkVOREVSRVJfVFlQRS5XRUJHTClcbiAgICB7XG4gICAgICAgIHZhciBnbCA9IHRoaXMucmVuZGVyZXIuZ2w7XG5cbiAgICAgICAgdmFyIHdlYkdMUGl4ZWxzID0gbmV3IFVpbnQ4QXJyYXkoNCk7XG5cbiAgICAgICAgZ2wuYmluZEZyYW1lYnVmZmVyKGdsLkZSQU1FQlVGRkVSLCB0aGlzLnRleHR1cmVCdWZmZXIuZnJhbWVCdWZmZXIpO1xuICAgICAgICBnbC5yZWFkUGl4ZWxzKHgsIHksIDEsIDEsIGdsLlJHQkEsIGdsLlVOU0lHTkVEX0JZVEUsIHdlYkdMUGl4ZWxzKTtcbiAgICAgICAgZ2wuYmluZEZyYW1lYnVmZmVyKGdsLkZSQU1FQlVGRkVSLCBudWxsKTtcblxuICAgICAgICByZXR1cm4gd2ViR0xQaXhlbHM7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHJldHVybiB0aGlzLnRleHR1cmVCdWZmZXIuY2FudmFzLmdldENvbnRleHQoJzJkJykuZ2V0SW1hZ2VEYXRhKHgsIHksIDEsIDEpLmRhdGE7XG4gICAgfVxufTtcbiIsInZhciBCYXNlVGV4dHVyZSA9IHJlcXVpcmUoJy4vQmFzZVRleHR1cmUnKSxcbiAgICBWaWRlb0Jhc2VUZXh0dXJlID0gcmVxdWlyZSgnLi9WaWRlb0Jhc2VUZXh0dXJlJyksXG4gICAgVGV4dHVyZVV2cyA9IHJlcXVpcmUoJy4vVGV4dHVyZVV2cycpLFxuICAgIEV2ZW50RW1pdHRlciA9IHJlcXVpcmUoJ2V2ZW50ZW1pdHRlcjMnKSxcbiAgICBtYXRoID0gcmVxdWlyZSgnLi4vbWF0aCcpLFxuICAgIHV0aWxzID0gcmVxdWlyZSgnLi4vdXRpbHMnKTtcblxuLyoqXG4gKiBBIHRleHR1cmUgc3RvcmVzIHRoZSBpbmZvcm1hdGlvbiB0aGF0IHJlcHJlc2VudHMgYW4gaW1hZ2Ugb3IgcGFydCBvZiBhbiBpbWFnZS4gSXQgY2Fubm90IGJlIGFkZGVkXG4gKiB0byB0aGUgZGlzcGxheSBsaXN0IGRpcmVjdGx5LiBJbnN0ZWFkIHVzZSBpdCBhcyB0aGUgdGV4dHVyZSBmb3IgYSBTcHJpdGUuIElmIG5vIGZyYW1lIGlzIHByb3ZpZGVkIHRoZW4gdGhlIHdob2xlIGltYWdlIGlzIHVzZWQuXG4gKlxuICogWW91IGNhbiBkaXJlY3RseSBjcmVhdGUgYSB0ZXh0dXJlIGZyb20gYW4gaW1hZ2UgYW5kIHRoZW4gcmV1c2UgaXQgbXVsdGlwbGUgdGltZXMgbGlrZSB0aGlzIDpcbiAqXG4gKiBgYGBqc1xuICogdmFyIHRleHR1cmUgPSBQSVhJLlRleHR1cmUuZnJvbUltYWdlKCdhc3NldHMvaW1hZ2UucG5nJyk7XG4gKiB2YXIgc3ByaXRlMSA9IG5ldyBQSVhJLlNwcml0ZSh0ZXh0dXJlKTtcbiAqIHZhciBzcHJpdGUyID0gbmV3IFBJWEkuU3ByaXRlKHRleHR1cmUpO1xuICogYGBgXG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIGJhc2VUZXh0dXJlIHtQSVhJLkJhc2VUZXh0dXJlfSBUaGUgYmFzZSB0ZXh0dXJlIHNvdXJjZSB0byBjcmVhdGUgdGhlIHRleHR1cmUgZnJvbVxuICogQHBhcmFtIFtmcmFtZV0ge1BJWEkuUmVjdGFuZ2xlfSBUaGUgcmVjdGFuZ2xlIGZyYW1lIG9mIHRoZSB0ZXh0dXJlIHRvIHNob3dcbiAqIEBwYXJhbSBbY3JvcF0ge1BJWEkuUmVjdGFuZ2xlfSBUaGUgYXJlYSBvZiBvcmlnaW5hbCB0ZXh0dXJlXG4gKiBAcGFyYW0gW3RyaW1dIHtQSVhJLlJlY3RhbmdsZX0gVHJpbW1lZCB0ZXh0dXJlIHJlY3RhbmdsZVxuICogQHBhcmFtIFtyb3RhdGVdIHtib29sZWFufSBpbmRpY2F0ZXMgd2hldGhlciB0aGUgdGV4dHVyZSBzaG91bGQgYmUgcm90YXRlZCBieSA5MCBkZWdyZWVzICggdXNlZCBieSB0ZXh0dXJlIHBhY2tlciApXG4gKi9cbmZ1bmN0aW9uIFRleHR1cmUoYmFzZVRleHR1cmUsIGZyYW1lLCBjcm9wLCB0cmltLCByb3RhdGUpXG57XG4gICAgRXZlbnRFbWl0dGVyLmNhbGwodGhpcyk7XG5cbiAgICAvKipcbiAgICAgKiBEb2VzIHRoaXMgVGV4dHVyZSBoYXZlIGFueSBmcmFtZSBkYXRhIGFzc2lnbmVkIHRvIGl0P1xuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKi9cbiAgICB0aGlzLm5vRnJhbWUgPSBmYWxzZTtcblxuICAgIGlmICghZnJhbWUpXG4gICAge1xuICAgICAgICB0aGlzLm5vRnJhbWUgPSB0cnVlO1xuICAgICAgICBmcmFtZSA9IG5ldyBtYXRoLlJlY3RhbmdsZSgwLCAwLCAxLCAxKTtcbiAgICB9XG5cbiAgICBpZiAoYmFzZVRleHR1cmUgaW5zdGFuY2VvZiBUZXh0dXJlKVxuICAgIHtcbiAgICAgICAgYmFzZVRleHR1cmUgPSBiYXNlVGV4dHVyZS5iYXNlVGV4dHVyZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYmFzZSB0ZXh0dXJlIHRoYXQgdGhpcyB0ZXh0dXJlIHVzZXMuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLkJhc2VUZXh0dXJlfVxuICAgICAqL1xuICAgIHRoaXMuYmFzZVRleHR1cmUgPSBiYXNlVGV4dHVyZTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBmcmFtZSBzcGVjaWZpZXMgdGhlIHJlZ2lvbiBvZiB0aGUgYmFzZSB0ZXh0dXJlIHRoYXQgdGhpcyB0ZXh0dXJlIHVzZXNcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuUmVjdGFuZ2xlfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fZnJhbWUgPSBmcmFtZTtcblxuICAgIC8qKlxuICAgICAqIFRoZSB0ZXh0dXJlIHRyaW0gZGF0YS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuUmVjdGFuZ2xlfVxuICAgICAqL1xuICAgIHRoaXMudHJpbSA9IHRyaW07XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIHdpbGwgbGV0IHRoZSByZW5kZXJlciBrbm93IGlmIHRoZSB0ZXh0dXJlIGlzIHZhbGlkLiBJZiBpdCdzIG5vdCB0aGVuIGl0IGNhbm5vdCBiZSByZW5kZXJlZC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICovXG4gICAgdGhpcy52YWxpZCA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogVGhpcyB3aWxsIGxldCBhIHJlbmRlcmVyIGtub3cgdGhhdCBhIHRleHR1cmUgaGFzIGJlZW4gdXBkYXRlZCAodXNlZCBtYWlubHkgZm9yIHdlYkdMIHV2IHVwZGF0ZXMpXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqL1xuICAgIHRoaXMucmVxdWlyZXNVcGRhdGUgPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBXZWJHTCBVViBkYXRhIGNhY2hlLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5UZXh0dXJlVXZzfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fdXZzID0gbnVsbDtcblxuICAgIC8qKlxuICAgICAqIFRoZSB3aWR0aCBvZiB0aGUgVGV4dHVyZSBpbiBwaXhlbHMuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy53aWR0aCA9IDA7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgaGVpZ2h0IG9mIHRoZSBUZXh0dXJlIGluIHBpeGVscy5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLmhlaWdodCA9IDA7XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIGlzIHRoZSBhcmVhIG9mIHRoZSBCYXNlVGV4dHVyZSBpbWFnZSB0byBhY3R1YWxseSBjb3B5IHRvIHRoZSBDYW52YXMgLyBXZWJHTCB3aGVuIHJlbmRlcmluZyxcbiAgICAgKiBpcnJlc3BlY3RpdmUgb2YgdGhlIGFjdHVhbCBmcmFtZSBzaXplIG9yIHBsYWNlbWVudCAod2hpY2ggY2FuIGJlIGluZmx1ZW5jZWQgYnkgdHJpbW1lZCB0ZXh0dXJlIGF0bGFzZXMpXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlJlY3RhbmdsZX1cbiAgICAgKi9cbiAgICB0aGlzLmNyb3AgPSBjcm9wIHx8IGZyYW1lOy8vbmV3IG1hdGguUmVjdGFuZ2xlKDAsIDAsIDEsIDEpO1xuXG4gICAgLyoqXG4gICAgICogSW5kaWNhdGVzIHdoZXRoZXIgdGhlIHRleHR1cmUgc2hvdWxkIGJlIHJvdGF0ZWQgYnkgOTAgZGVncmVlc1xuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqL1xuICAgIHRoaXMucm90YXRlID0gISFyb3RhdGU7XG5cbiAgICBpZiAoYmFzZVRleHR1cmUuaGFzTG9hZGVkKVxuICAgIHtcbiAgICAgICAgaWYgKHRoaXMubm9GcmFtZSlcbiAgICAgICAge1xuICAgICAgICAgICAgZnJhbWUgPSBuZXcgbWF0aC5SZWN0YW5nbGUoMCwgMCwgYmFzZVRleHR1cmUud2lkdGgsIGJhc2VUZXh0dXJlLmhlaWdodCk7XG5cbiAgICAgICAgICAgIC8vIGlmIHRoZXJlIGlzIG5vIGZyYW1lIHdlIHNob3VsZCBtb25pdG9yIGZvciBhbnkgYmFzZSB0ZXh0dXJlIGNoYW5nZXMuLlxuICAgICAgICAgICAgYmFzZVRleHR1cmUub24oJ3VwZGF0ZScsIHRoaXMub25CYXNlVGV4dHVyZVVwZGF0ZWQsIHRoaXMpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZnJhbWUgPSBmcmFtZTtcbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgYmFzZVRleHR1cmUub25jZSgnbG9hZGVkJywgdGhpcy5vbkJhc2VUZXh0dXJlTG9hZGVkLCB0aGlzKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBGaXJlZCB3aGVuIHRoZSB0ZXh0dXJlIGlzIHVwZGF0ZWQuIFRoaXMgaGFwcGVucyBpZiB0aGUgZnJhbWUgb3IgdGhlIGJhc2VUZXh0dXJlIGlzIHVwZGF0ZWQuXG4gICAgICpcbiAgICAgKiBAZXZlbnQgdXBkYXRlXG4gICAgICogQG1lbWJlcm9mIFBJWEkuVGV4dHVyZSNcbiAgICAgKiBAcHJvdGVjdGVkXG4gICAgICovXG59XG5cblRleHR1cmUucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShFdmVudEVtaXR0ZXIucHJvdG90eXBlKTtcblRleHR1cmUucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gVGV4dHVyZTtcbm1vZHVsZS5leHBvcnRzID0gVGV4dHVyZTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoVGV4dHVyZS5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBUaGUgZnJhbWUgc3BlY2lmaWVzIHRoZSByZWdpb24gb2YgdGhlIGJhc2UgdGV4dHVyZSB0aGF0IHRoaXMgdGV4dHVyZSB1c2VzLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5SZWN0YW5nbGV9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuVGV4dHVyZSNcbiAgICAgKi9cbiAgICBmcmFtZToge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9mcmFtZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAoZnJhbWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuX2ZyYW1lID0gZnJhbWU7XG5cbiAgICAgICAgICAgIHRoaXMubm9GcmFtZSA9IGZhbHNlO1xuXG4gICAgICAgICAgICB0aGlzLndpZHRoID0gZnJhbWUud2lkdGg7XG4gICAgICAgICAgICB0aGlzLmhlaWdodCA9IGZyYW1lLmhlaWdodDtcblxuICAgICAgICAgICAgaWYgKCF0aGlzLnRyaW0gJiYgIXRoaXMucm90YXRlICYmIChmcmFtZS54ICsgZnJhbWUud2lkdGggPiB0aGlzLmJhc2VUZXh0dXJlLndpZHRoIHx8IGZyYW1lLnkgKyBmcmFtZS5oZWlnaHQgPiB0aGlzLmJhc2VUZXh0dXJlLmhlaWdodCkpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdUZXh0dXJlIEVycm9yOiBmcmFtZSBkb2VzIG5vdCBmaXQgaW5zaWRlIHRoZSBiYXNlIFRleHR1cmUgZGltZW5zaW9ucyAnICsgdGhpcyk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vdGhpcy52YWxpZCA9IGZyYW1lICYmIGZyYW1lLndpZHRoICYmIGZyYW1lLmhlaWdodCAmJiB0aGlzLmJhc2VUZXh0dXJlLnNvdXJjZSAmJiB0aGlzLmJhc2VUZXh0dXJlLmhhc0xvYWRlZDtcbiAgICAgICAgICAgIHRoaXMudmFsaWQgPSBmcmFtZSAmJiBmcmFtZS53aWR0aCAmJiBmcmFtZS5oZWlnaHQgJiYgdGhpcy5iYXNlVGV4dHVyZS5oYXNMb2FkZWQ7XG5cbiAgICAgICAgICAgIGlmICh0aGlzLnRyaW0pXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdGhpcy53aWR0aCA9IHRoaXMudHJpbS53aWR0aDtcbiAgICAgICAgICAgICAgICB0aGlzLmhlaWdodCA9IHRoaXMudHJpbS5oZWlnaHQ7XG4gICAgICAgICAgICAgICAgdGhpcy5fZnJhbWUud2lkdGggPSB0aGlzLnRyaW0ud2lkdGg7XG4gICAgICAgICAgICAgICAgdGhpcy5fZnJhbWUuaGVpZ2h0ID0gdGhpcy50cmltLmhlaWdodDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB0aGlzLmNyb3AgPSBmcmFtZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHRoaXMudmFsaWQpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdGhpcy5fdXBkYXRlVXZzKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG59KTtcblxuLyoqXG4gKiBVcGRhdGVzIHRoaXMgdGV4dHVyZSBvbiB0aGUgZ3B1LlxuICpcbiAqL1xuVGV4dHVyZS5wcm90b3R5cGUudXBkYXRlID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLmJhc2VUZXh0dXJlLnVwZGF0ZSgpO1xufTtcblxuLyoqXG4gKiBDYWxsZWQgd2hlbiB0aGUgYmFzZSB0ZXh0dXJlIGlzIGxvYWRlZFxuICpcbiAqIEBwcml2YXRlXG4gKi9cblRleHR1cmUucHJvdG90eXBlLm9uQmFzZVRleHR1cmVMb2FkZWQgPSBmdW5jdGlvbiAoYmFzZVRleHR1cmUpXG57XG4gICAgLy8gVE9ETyB0aGlzIGNvZGUgbG9va3MgY29uZnVzaW5nLi4gYm9vIHRvIGFidXNpbmcgZ2V0dGVycyBhbmQgc2V0dGVyc3MhXG4gICAgaWYgKHRoaXMubm9GcmFtZSlcbiAgICB7XG4gICAgICAgIHRoaXMuZnJhbWUgPSBuZXcgbWF0aC5SZWN0YW5nbGUoMCwgMCwgYmFzZVRleHR1cmUud2lkdGgsIGJhc2VUZXh0dXJlLmhlaWdodCk7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHRoaXMuZnJhbWUgPSB0aGlzLl9mcmFtZTtcbiAgICB9XG5cbiAgICB0aGlzLmVtaXQoJ3VwZGF0ZScsIHRoaXMpO1xufTtcblxuLyoqXG4gKiBDYWxsZWQgd2hlbiB0aGUgYmFzZSB0ZXh0dXJlIGlzIHVwZGF0ZWRcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5UZXh0dXJlLnByb3RvdHlwZS5vbkJhc2VUZXh0dXJlVXBkYXRlZCA9IGZ1bmN0aW9uIChiYXNlVGV4dHVyZSlcbntcbiAgICB0aGlzLl9mcmFtZS53aWR0aCA9IGJhc2VUZXh0dXJlLndpZHRoO1xuICAgIHRoaXMuX2ZyYW1lLmhlaWdodCA9IGJhc2VUZXh0dXJlLmhlaWdodDtcblxuICAgIHRoaXMuZW1pdCgndXBkYXRlJywgdGhpcyk7XG59O1xuXG4vKipcbiAqIERlc3Ryb3lzIHRoaXMgdGV4dHVyZVxuICpcbiAqIEBwYXJhbSBbZGVzdHJveUJhc2U9ZmFsc2VdIHtib29sZWFufSBXaGV0aGVyIHRvIGRlc3Ryb3kgdGhlIGJhc2UgdGV4dHVyZSBhcyB3ZWxsXG4gKi9cblRleHR1cmUucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoZGVzdHJveUJhc2UpXG57XG4gICAgaWYgKHRoaXMuYmFzZVRleHR1cmUpXG4gICAge1xuICAgICAgICBpZiAoZGVzdHJveUJhc2UpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuYmFzZVRleHR1cmUuZGVzdHJveSgpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5iYXNlVGV4dHVyZS5vZmYoJ3VwZGF0ZScsIHRoaXMub25CYXNlVGV4dHVyZVVwZGF0ZWQsIHRoaXMpO1xuICAgICAgICB0aGlzLmJhc2VUZXh0dXJlLm9mZignbG9hZGVkJywgdGhpcy5vbkJhc2VUZXh0dXJlTG9hZGVkLCB0aGlzKTtcblxuICAgICAgICB0aGlzLmJhc2VUZXh0dXJlID0gbnVsbDtcbiAgICB9XG5cbiAgICB0aGlzLl9mcmFtZSA9IG51bGw7XG4gICAgdGhpcy5fdXZzID0gbnVsbDtcbiAgICB0aGlzLnRyaW0gPSBudWxsO1xuICAgIHRoaXMuY3JvcCA9IG51bGw7XG5cbiAgICB0aGlzLnZhbGlkID0gZmFsc2U7XG5cbiAgICB0aGlzLm9mZignZGlzcG9zZScsIHRoaXMuZGlzcG9zZSwgdGhpcyk7XG4gICAgdGhpcy5vZmYoJ3VwZGF0ZScsIHRoaXMudXBkYXRlLCB0aGlzKTtcbn07XG5cbi8qKlxuICogQ3JlYXRlcyBhIG5ldyB0ZXh0dXJlIG9iamVjdCB0aGF0IGFjdHMgdGhlIHNhbWUgYXMgdGhpcyBvbmUuXG4gKlxuICogQHJldHVybiB7UElYSS5UZXh0dXJlfVxuICovXG5UZXh0dXJlLnByb3RvdHlwZS5jbG9uZSA9IGZ1bmN0aW9uICgpXG57XG4gICAgcmV0dXJuIG5ldyBUZXh0dXJlKHRoaXMuYmFzZVRleHR1cmUsIHRoaXMuZnJhbWUsIHRoaXMuY3JvcCwgdGhpcy50cmltLCB0aGlzLnJvdGF0ZSk7XG59O1xuXG4vKipcbiAqIFVwZGF0ZXMgdGhlIGludGVybmFsIFdlYkdMIFVWIGNhY2hlLlxuICpcbiAqIEBwcml2YXRlXG4gKi9cblRleHR1cmUucHJvdG90eXBlLl91cGRhdGVVdnMgPSBmdW5jdGlvbiAoKVxue1xuICAgIGlmICghdGhpcy5fdXZzKVxuICAgIHtcbiAgICAgICAgdGhpcy5fdXZzID0gbmV3IFRleHR1cmVVdnMoKTtcbiAgICB9XG5cbiAgICB0aGlzLl91dnMuc2V0KHRoaXMuY3JvcCwgdGhpcy5iYXNlVGV4dHVyZSwgdGhpcy5yb3RhdGUpO1xufTtcblxuLyoqXG4gKiBIZWxwZXIgZnVuY3Rpb24gdGhhdCBjcmVhdGVzIGEgVGV4dHVyZSBvYmplY3QgZnJvbSB0aGUgZ2l2ZW4gaW1hZ2UgdXJsLlxuICogSWYgdGhlIGltYWdlIGlzIG5vdCBpbiB0aGUgdGV4dHVyZSBjYWNoZSBpdCB3aWxsIGJlICBjcmVhdGVkIGFuZCBsb2FkZWQuXG4gKlxuICogQHN0YXRpY1xuICogQHBhcmFtIGltYWdlVXJsIHtzdHJpbmd9IFRoZSBpbWFnZSB1cmwgb2YgdGhlIHRleHR1cmVcbiAqIEBwYXJhbSBjcm9zc29yaWdpbiB7Ym9vbGVhbn0gV2hldGhlciByZXF1ZXN0cyBzaG91bGQgYmUgdHJlYXRlZCBhcyBjcm9zc29yaWdpblxuICogQHBhcmFtIHNjYWxlTW9kZSB7bnVtYmVyfSBTZWUge0BsaW5rIFBJWEkuU0NBTEVfTU9ERVN9IGZvciBwb3NzaWJsZSB2YWx1ZXNcbiAqIEByZXR1cm4ge1BJWEkuVGV4dHVyZX0gVGhlIG5ld2x5IGNyZWF0ZWQgdGV4dHVyZVxuICovXG5UZXh0dXJlLmZyb21JbWFnZSA9IGZ1bmN0aW9uIChpbWFnZVVybCwgY3Jvc3NvcmlnaW4sIHNjYWxlTW9kZSlcbntcbiAgICB2YXIgdGV4dHVyZSA9IHV0aWxzLlRleHR1cmVDYWNoZVtpbWFnZVVybF07XG5cbiAgICBpZiAoIXRleHR1cmUpXG4gICAge1xuICAgICAgICB0ZXh0dXJlID0gbmV3IFRleHR1cmUoQmFzZVRleHR1cmUuZnJvbUltYWdlKGltYWdlVXJsLCBjcm9zc29yaWdpbiwgc2NhbGVNb2RlKSk7XG4gICAgICAgIHV0aWxzLlRleHR1cmVDYWNoZVtpbWFnZVVybF0gPSB0ZXh0dXJlO1xuICAgIH1cblxuICAgIHJldHVybiB0ZXh0dXJlO1xufTtcblxuLyoqXG4gKiBIZWxwZXIgZnVuY3Rpb24gdGhhdCBjcmVhdGVzIGEgc3ByaXRlIHRoYXQgd2lsbCBjb250YWluIGEgdGV4dHVyZSBmcm9tIHRoZSBUZXh0dXJlQ2FjaGUgYmFzZWQgb24gdGhlIGZyYW1lSWRcbiAqIFRoZSBmcmFtZSBpZHMgYXJlIGNyZWF0ZWQgd2hlbiBhIFRleHR1cmUgcGFja2VyIGZpbGUgaGFzIGJlZW4gbG9hZGVkXG4gKlxuICogQHN0YXRpY1xuICogQHBhcmFtIGZyYW1lSWQge3N0cmluZ30gVGhlIGZyYW1lIElkIG9mIHRoZSB0ZXh0dXJlIGluIHRoZSBjYWNoZVxuICogQHJldHVybiB7UElYSS5UZXh0dXJlfSBUaGUgbmV3bHkgY3JlYXRlZCB0ZXh0dXJlXG4gKi9cblRleHR1cmUuZnJvbUZyYW1lID0gZnVuY3Rpb24gKGZyYW1lSWQpXG57XG4gICAgdmFyIHRleHR1cmUgPSB1dGlscy5UZXh0dXJlQ2FjaGVbZnJhbWVJZF07XG5cbiAgICBpZiAoIXRleHR1cmUpXG4gICAge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RoZSBmcmFtZUlkIFwiJyArIGZyYW1lSWQgKyAnXCIgZG9lcyBub3QgZXhpc3QgaW4gdGhlIHRleHR1cmUgY2FjaGUnKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGV4dHVyZTtcbn07XG5cbi8qKlxuICogSGVscGVyIGZ1bmN0aW9uIHRoYXQgY3JlYXRlcyBhIG5ldyBUZXh0dXJlIGJhc2VkIG9uIHRoZSBnaXZlbiBjYW52YXMgZWxlbWVudC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAcGFyYW0gY2FudmFzIHtDYW52YXN9IFRoZSBjYW52YXMgZWxlbWVudCBzb3VyY2Ugb2YgdGhlIHRleHR1cmVcbiAqIEBwYXJhbSBzY2FsZU1vZGUge251bWJlcn0gU2VlIHtAbGluayBQSVhJLlNDQUxFX01PREVTfSBmb3IgcG9zc2libGUgdmFsdWVzXG4gKiBAcmV0dXJuIHtQSVhJLlRleHR1cmV9XG4gKi9cblRleHR1cmUuZnJvbUNhbnZhcyA9IGZ1bmN0aW9uIChjYW52YXMsIHNjYWxlTW9kZSlcbntcbiAgICByZXR1cm4gbmV3IFRleHR1cmUoQmFzZVRleHR1cmUuZnJvbUNhbnZhcyhjYW52YXMsIHNjYWxlTW9kZSkpO1xufTtcblxuLyoqXG4gKiBIZWxwZXIgZnVuY3Rpb24gdGhhdCBjcmVhdGVzIGEgbmV3IFRleHR1cmUgYmFzZWQgb24gdGhlIGdpdmVuIHZpZGVvIGVsZW1lbnQuXG4gKlxuICogQHN0YXRpY1xuICogQHBhcmFtIHZpZGVvIHtIVE1MVmlkZW9FbGVtZW50fVxuICogQHBhcmFtIHNjYWxlTW9kZSB7bnVtYmVyfSBTZWUge0BsaW5rIFBJWEkuU0NBTEVfTU9ERVN9IGZvciBwb3NzaWJsZSB2YWx1ZXNcbiAqIEByZXR1cm4ge1BJWEkuVGV4dHVyZX0gQSBUZXh0dXJlXG4gKi9cblRleHR1cmUuZnJvbVZpZGVvID0gZnVuY3Rpb24gKHZpZGVvLCBzY2FsZU1vZGUpXG57XG4gICAgaWYgKHR5cGVvZiB2aWRlbyA9PT0gJ3N0cmluZycpXG4gICAge1xuICAgICAgICByZXR1cm4gVGV4dHVyZS5mcm9tVmlkZW9VcmwodmlkZW8sIHNjYWxlTW9kZSk7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHJldHVybiBuZXcgVGV4dHVyZShWaWRlb0Jhc2VUZXh0dXJlLmZyb21WaWRlbyh2aWRlbywgc2NhbGVNb2RlKSk7XG4gICAgfVxufTtcblxuLyoqXG4gKiBIZWxwZXIgZnVuY3Rpb24gdGhhdCBjcmVhdGVzIGEgbmV3IFRleHR1cmUgYmFzZWQgb24gdGhlIHZpZGVvIHVybC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAcGFyYW0gdmlkZW9Vcmwge3N0cmluZ31cbiAqIEBwYXJhbSBzY2FsZU1vZGUge251bWJlcn0gU2VlIHtAbGluayBQSVhJLlNDQUxFX01PREVTfSBmb3IgcG9zc2libGUgdmFsdWVzXG4gKiBAcmV0dXJuIHtQSVhJLlRleHR1cmV9IEEgVGV4dHVyZVxuICovXG5UZXh0dXJlLmZyb21WaWRlb1VybCA9IGZ1bmN0aW9uICh2aWRlb1VybCwgc2NhbGVNb2RlKVxue1xuICAgIHJldHVybiBuZXcgVGV4dHVyZShWaWRlb0Jhc2VUZXh0dXJlLmZyb21VcmwodmlkZW9VcmwsIHNjYWxlTW9kZSkpO1xufTtcblxuLyoqXG4gKiBBZGRzIGEgdGV4dHVyZSB0byB0aGUgZ2xvYmFsIHV0aWxzLlRleHR1cmVDYWNoZS4gVGhpcyBjYWNoZSBpcyBzaGFyZWQgYWNyb3NzIHRoZSB3aG9sZSBQSVhJIG9iamVjdC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAcGFyYW0gdGV4dHVyZSB7UElYSS5UZXh0dXJlfSBUaGUgVGV4dHVyZSB0byBhZGQgdG8gdGhlIGNhY2hlLlxuICogQHBhcmFtIGlkIHtzdHJpbmd9IFRoZSBpZCB0aGF0IHRoZSB0ZXh0dXJlIHdpbGwgYmUgc3RvcmVkIGFnYWluc3QuXG4gKi9cblRleHR1cmUuYWRkVGV4dHVyZVRvQ2FjaGUgPSBmdW5jdGlvbiAodGV4dHVyZSwgaWQpXG57XG4gICAgdXRpbHMuVGV4dHVyZUNhY2hlW2lkXSA9IHRleHR1cmU7XG59O1xuXG4vKipcbiAqIFJlbW92ZSBhIHRleHR1cmUgZnJvbSB0aGUgZ2xvYmFsIHV0aWxzLlRleHR1cmVDYWNoZS5cbiAqXG4gKiBAc3RhdGljXG4gKiBAcGFyYW0gaWQge3N0cmluZ30gVGhlIGlkIG9mIHRoZSB0ZXh0dXJlIHRvIGJlIHJlbW92ZWRcbiAqIEByZXR1cm4ge1BJWEkuVGV4dHVyZX0gVGhlIHRleHR1cmUgdGhhdCB3YXMgcmVtb3ZlZFxuICovXG5UZXh0dXJlLnJlbW92ZVRleHR1cmVGcm9tQ2FjaGUgPSBmdW5jdGlvbiAoaWQpXG57XG4gICAgdmFyIHRleHR1cmUgPSB1dGlscy5UZXh0dXJlQ2FjaGVbaWRdO1xuXG4gICAgZGVsZXRlIHV0aWxzLlRleHR1cmVDYWNoZVtpZF07XG4gICAgZGVsZXRlIHV0aWxzLkJhc2VUZXh0dXJlQ2FjaGVbaWRdO1xuXG4gICAgcmV0dXJuIHRleHR1cmU7XG59O1xuXG4vKipcbiAqIEFuIGVtcHR5IHRleHR1cmUsIHVzZWQgb2Z0ZW4gdG8gbm90IGhhdmUgdG8gY3JlYXRlIG11bHRpcGxlIGVtcHR5IHRleHR1cmVzLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBjb25zdGFudFxuICovXG5UZXh0dXJlLkVNUFRZID0gbmV3IFRleHR1cmUobmV3IEJhc2VUZXh0dXJlKCkpO1xuIiwiXG4vKipcbiAqIEEgc3RhbmRhcmQgb2JqZWN0IHRvIHN0b3JlIHRoZSBVdnMgb2YgYSB0ZXh0dXJlXG4gKlxuICogQGNsYXNzXG4gKiBAcHJpdmF0ZVxuICogQG1lbWJlcm9mIFBJWElcbiAqL1xuZnVuY3Rpb24gVGV4dHVyZVV2cygpXG57XG4gICAgdGhpcy54MCA9IDA7XG4gICAgdGhpcy55MCA9IDA7XG5cbiAgICB0aGlzLngxID0gMTtcbiAgICB0aGlzLnkxID0gMDtcblxuICAgIHRoaXMueDIgPSAxO1xuICAgIHRoaXMueTIgPSAxO1xuXG4gICAgdGhpcy54MyA9IDA7XG4gICAgdGhpcy55MyA9IDE7XG5cbiAgICB0aGlzLnh5MF91aW50MzIgPSAwO1xuICAgIHRoaXMueHkxX3VpbnQzMiA9IDA7XG4gICAgdGhpcy54eTJfdWludDMyID0gMDtcbiAgICB0aGlzLnh5M191aW50MzIgPSAwO1xuXG4gICAgdGhpcy51dnNfdWludDMyID0gbmV3IFVpbnQzMkFycmF5KDQpXG59XG5cbm1vZHVsZS5leHBvcnRzID0gVGV4dHVyZVV2cztcblxuLyoqXG4gKiBTZXRzIHRoZSB0ZXh0dXJlIFV2cyBiYXNlZCBvbiB0aGUgZ2l2ZW4gZnJhbWUgaW5mb3JtYXRpb25cbiAqIEBwYXJhbSBmcmFtZSB7UElYSS5SZWN0YW5nbGV9XG4gKiBAcGFyYW0gYmFzZUZyYW1lIHtQSVhJLlJlY3RhbmdsZX1cbiAqIEBwYXJhbSByb3RhdGUge2Jvb2xlYW59IFdoZXRoZXIgb3Igbm90IHRoZSBmcmFtZSBpcyByb3RhdGVkXG4gKiBAcHJpdmF0ZVxuICovXG5UZXh0dXJlVXZzLnByb3RvdHlwZS5zZXQgPSBmdW5jdGlvbiAoZnJhbWUsIGJhc2VGcmFtZSwgcm90YXRlKVxue1xuICAgIHZhciB0dyA9IGJhc2VGcmFtZS53aWR0aDtcbiAgICB2YXIgdGggPSBiYXNlRnJhbWUuaGVpZ2h0O1xuXG4gICAgaWYocm90YXRlKVxuICAgIHtcbiAgICAgICAgdGhpcy54MCA9IChmcmFtZS54ICsgZnJhbWUuaGVpZ2h0KSAvIHR3O1xuICAgICAgICB0aGlzLnkwID0gZnJhbWUueSAvIHRoO1xuXG4gICAgICAgIHRoaXMueDEgPSAoZnJhbWUueCArIGZyYW1lLmhlaWdodCkgLyB0dztcbiAgICAgICAgdGhpcy55MSA9IChmcmFtZS55ICsgZnJhbWUud2lkdGgpIC8gdGg7XG5cbiAgICAgICAgdGhpcy54MiA9IGZyYW1lLnggLyB0dztcbiAgICAgICAgdGhpcy55MiA9IChmcmFtZS55ICsgZnJhbWUud2lkdGgpIC8gdGg7XG5cbiAgICAgICAgdGhpcy54MyA9IGZyYW1lLnggLyB0dztcbiAgICAgICAgdGhpcy55MyA9IGZyYW1lLnkgLyB0aDtcbiAgICB9XG4gICAgZWxzZVxuICAgIHtcblxuICAgICAgICB0aGlzLngwID0gZnJhbWUueCAvIHR3O1xuICAgICAgICB0aGlzLnkwID0gZnJhbWUueSAvIHRoO1xuXG4gICAgICAgIHRoaXMueDEgPSAoZnJhbWUueCArIGZyYW1lLndpZHRoKSAvIHR3O1xuICAgICAgICB0aGlzLnkxID0gZnJhbWUueSAvIHRoO1xuXG4gICAgICAgIHRoaXMueDIgPSAoZnJhbWUueCArIGZyYW1lLndpZHRoKSAvIHR3O1xuICAgICAgICB0aGlzLnkyID0gKGZyYW1lLnkgKyBmcmFtZS5oZWlnaHQpIC8gdGg7XG5cbiAgICAgICAgdGhpcy54MyA9IGZyYW1lLnggLyB0dztcbiAgICAgICAgdGhpcy55MyA9IChmcmFtZS55ICsgZnJhbWUuaGVpZ2h0KSAvIHRoO1xuICAgIH1cblxuICAgIHRoaXMudXZzX3VpbnQzMlswXSA9ICgoKHRoaXMueTAgKiA2NTUzNSkgJiAweEZGRkYpIDw8IDE2KSB8ICgodGhpcy54MCAqIDY1NTM1KSAmIDB4RkZGRik7XG4gICAgdGhpcy51dnNfdWludDMyWzFdID0gKCgodGhpcy55MSAqIDY1NTM1KSAmIDB4RkZGRikgPDwgMTYpIHwgKCh0aGlzLngxICogNjU1MzUpICYgMHhGRkZGKTtcbiAgICB0aGlzLnV2c191aW50MzJbMl0gPSAoKCh0aGlzLnkyICogNjU1MzUpICYgMHhGRkZGKSA8PCAxNikgfCAoKHRoaXMueDIgKiA2NTUzNSkgJiAweEZGRkYpO1xuICAgIHRoaXMudXZzX3VpbnQzMlszXSA9ICgoKHRoaXMueTMgKiA2NTUzNSkgJiAweEZGRkYpIDw8IDE2KSB8ICgodGhpcy54MyAqIDY1NTM1KSAmIDB4RkZGRik7XG59O1xuIiwidmFyIEJhc2VUZXh0dXJlID0gcmVxdWlyZSgnLi9CYXNlVGV4dHVyZScpLFxuICAgIHV0aWxzID0gcmVxdWlyZSgnLi4vdXRpbHMnKTtcblxuLyoqXG4gKiBBIHRleHR1cmUgb2YgYSBbcGxheWluZ10gVmlkZW8uXG4gKlxuICogVmlkZW8gYmFzZSB0ZXh0dXJlcyBtaW1pYyBQaXhpIEJhc2VUZXh0dXJlLmZyb20uLi4uIG1ldGhvZCBpbiB0aGVpciBjcmVhdGlvbiBwcm9jZXNzLlxuICpcbiAqIFRoaXMgY2FuIGJlIHVzZWQgaW4gc2V2ZXJhbCB3YXlzLCBzdWNoIGFzOlxuICpcbiAqIGBgYGpzXG4gKiB2YXIgdGV4dHVyZSA9IFBJWEkuVmlkZW9CYXNlVGV4dHVyZS5mcm9tVXJsKCdodHRwOi8vbXlkb21haW4uY29tL3ZpZGVvLm1wNCcpO1xuICpcbiAqIHZhciB0ZXh0dXJlID0gUElYSS5WaWRlb0Jhc2VUZXh0dXJlLmZyb21VcmwoeyBzcmM6ICdodHRwOi8vbXlkb21haW4uY29tL3ZpZGVvLm1wNCcsIG1pbWU6ICd2aWRlby9tcDQnIH0pO1xuICpcbiAqIHZhciB0ZXh0dXJlID0gUElYSS5WaWRlb0Jhc2VUZXh0dXJlLmZyb21VcmxzKFsnL3ZpZGVvLndlYm0nLCAnL3ZpZGVvLm1wNCddKTtcbiAqXG4gKiB2YXIgdGV4dHVyZSA9IFBJWEkuVmlkZW9CYXNlVGV4dHVyZS5mcm9tVXJscyhbXG4gKiAgICAgeyBzcmM6ICcvdmlkZW8ud2VibScsIG1pbWU6ICd2aWRlby93ZWJtJyB9LFxuICogICAgIHsgc3JjOiAnL3ZpZGVvLm1wNCcsIG1pbWU6ICd2aWRlby9tcDQnIH1cbiAqIF0pO1xuICogYGBgXG4gKlxuICogU2VlIHRoZSBbXCJkZXVzXCIgZGVtb10oaHR0cDovL3d3dy5nb29kYm95ZGlnaXRhbC5jb20vcGl4aWpzL2V4YW1wbGVzL2RldXMvKS5cbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQmFzZVRleHR1cmVcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gc291cmNlIHtIVE1MVmlkZW9FbGVtZW50fVxuICogQHBhcmFtIFtzY2FsZU1vZGVdIHtudW1iZXJ9IFNlZSB7QGxpbmsgUElYSS5TQ0FMRV9NT0RFU30gZm9yIHBvc3NpYmxlIHZhbHVlc1xuICovXG5mdW5jdGlvbiBWaWRlb0Jhc2VUZXh0dXJlKHNvdXJjZSwgc2NhbGVNb2RlKVxue1xuICAgIGlmICghc291cmNlKVxuICAgIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdObyB2aWRlbyBzb3VyY2UgZWxlbWVudCBzcGVjaWZpZWQuJyk7XG4gICAgfVxuXG4gICAgLy8gaG9vayBpbiBoZXJlIHRvIGNoZWNrIGlmIHZpZGVvIGlzIGFscmVhZHkgYXZhaWxhYmxlLlxuICAgIC8vIEJhc2VUZXh0dXJlIGxvb2tzIGZvciBhIHNvdXJjZS5jb21wbGV0ZSBib29sZWFuLCBwbHVzIHdpZHRoICYgaGVpZ2h0LlxuXG4gICAgaWYgKChzb3VyY2UucmVhZHlTdGF0ZSA9PT0gc291cmNlLkhBVkVfRU5PVUdIX0RBVEEgfHwgc291cmNlLnJlYWR5U3RhdGUgPT09IHNvdXJjZS5IQVZFX0ZVVFVSRV9EQVRBKSAmJiBzb3VyY2Uud2lkdGggJiYgc291cmNlLmhlaWdodClcbiAgICB7XG4gICAgICAgIHNvdXJjZS5jb21wbGV0ZSA9IHRydWU7XG4gICAgfVxuXG4gICAgQmFzZVRleHR1cmUuY2FsbCh0aGlzLCBzb3VyY2UsIHNjYWxlTW9kZSk7XG5cbiAgICAvKipcbiAgICAgKiBTaG91bGQgdGhlIGJhc2UgdGV4dHVyZSBhdXRvbWF0aWNhbGx5IHVwZGF0ZSBpdHNlbGYsIHNldCB0byB0cnVlIGJ5IGRlZmF1bHRcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICogQGRlZmF1bHQgdHJ1ZVxuICAgICAqL1xuICAgIHRoaXMuYXV0b1VwZGF0ZSA9IGZhbHNlO1xuXG4gICAgdGhpcy5fb25VcGRhdGUgPSB0aGlzLl9vblVwZGF0ZS5iaW5kKHRoaXMpO1xuICAgIHRoaXMuX29uQ2FuUGxheSA9IHRoaXMuX29uQ2FuUGxheS5iaW5kKHRoaXMpO1xuXG4gICAgaWYgKCFzb3VyY2UuY29tcGxldGUpXG4gICAge1xuICAgICAgICBzb3VyY2UuYWRkRXZlbnRMaXN0ZW5lcignY2FucGxheScsIHRoaXMuX29uQ2FuUGxheSk7XG4gICAgICAgIHNvdXJjZS5hZGRFdmVudExpc3RlbmVyKCdjYW5wbGF5dGhyb3VnaCcsIHRoaXMuX29uQ2FuUGxheSk7XG5cbiAgICAgICAgLy8gc3RhcnRlZCBwbGF5aW5nLi5cbiAgICAgICAgc291cmNlLmFkZEV2ZW50TGlzdGVuZXIoJ3BsYXknLCB0aGlzLl9vblBsYXlTdGFydC5iaW5kKHRoaXMpKTtcbiAgICAgICAgc291cmNlLmFkZEV2ZW50TGlzdGVuZXIoJ3BhdXNlJywgdGhpcy5fb25QbGF5U3RvcC5iaW5kKHRoaXMpKTtcbiAgICB9XG5cbiAgICB0aGlzLl9fbG9hZGVkID0gZmFsc2U7XG59XG5cblZpZGVvQmFzZVRleHR1cmUucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShCYXNlVGV4dHVyZS5wcm90b3R5cGUpO1xuVmlkZW9CYXNlVGV4dHVyZS5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBWaWRlb0Jhc2VUZXh0dXJlO1xubW9kdWxlLmV4cG9ydHMgPSBWaWRlb0Jhc2VUZXh0dXJlO1xuXG4vKipcbiAqIFRoZSBpbnRlcm5hbCB1cGRhdGUgbG9vcCBvZiB0aGUgdmlkZW8gYmFzZSB0ZXh0dXJlLCBvbmx5IHJ1bnMgd2hlbiBhdXRvVXBkYXRlIGlzIHNldCB0byB0cnVlXG4gKlxuICogQHByaXZhdGVcbiAqL1xuVmlkZW9CYXNlVGV4dHVyZS5wcm90b3R5cGUuX29uVXBkYXRlID0gZnVuY3Rpb24gKClcbntcbiAgICBpZiAodGhpcy5hdXRvVXBkYXRlKVxuICAgIHtcbiAgICAgICAgd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZSh0aGlzLl9vblVwZGF0ZSk7XG4gICAgICAgIHRoaXMudXBkYXRlKCk7XG4gICAgfVxufTtcblxuLyoqXG4gKiBSdW5zIHRoZSB1cGRhdGUgbG9vcCB3aGVuIHRoZSB2aWRlbyBpcyByZWFkeSB0byBwbGF5XG4gKlxuICogQHByaXZhdGVcbiAqL1xuVmlkZW9CYXNlVGV4dHVyZS5wcm90b3R5cGUuX29uUGxheVN0YXJ0ID0gZnVuY3Rpb24gKClcbntcbiAgICBpZiAoIXRoaXMuYXV0b1VwZGF0ZSlcbiAgICB7XG4gICAgICAgIHdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUodGhpcy5fb25VcGRhdGUpO1xuICAgICAgICB0aGlzLmF1dG9VcGRhdGUgPSB0cnVlO1xuICAgIH1cbn07XG5cbi8qKlxuICogRmlyZWQgd2hlbiBhIHBhdXNlIGV2ZW50IGlzIHRyaWdnZXJlZCwgc3RvcHMgdGhlIHVwZGF0ZSBsb29wXG4gKlxuICogQHByaXZhdGVcbiAqL1xuVmlkZW9CYXNlVGV4dHVyZS5wcm90b3R5cGUuX29uUGxheVN0b3AgPSBmdW5jdGlvbiAoKVxue1xuICAgIHRoaXMuYXV0b1VwZGF0ZSA9IGZhbHNlO1xufTtcblxuLyoqXG4gKiBGaXJlZCB3aGVuIHRoZSB2aWRlbyBpcyBsb2FkZWQgYW5kIHJlYWR5IHRvIHBsYXlcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5WaWRlb0Jhc2VUZXh0dXJlLnByb3RvdHlwZS5fb25DYW5QbGF5ID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLmhhc0xvYWRlZCA9IHRydWU7XG5cbiAgICBpZiAodGhpcy5zb3VyY2UpXG4gICAge1xuICAgICAgICB0aGlzLnNvdXJjZS5yZW1vdmVFdmVudExpc3RlbmVyKCdjYW5wbGF5JywgdGhpcy5fb25DYW5QbGF5KTtcbiAgICAgICAgdGhpcy5zb3VyY2UucmVtb3ZlRXZlbnRMaXN0ZW5lcignY2FucGxheXRocm91Z2gnLCB0aGlzLl9vbkNhblBsYXkpO1xuXG4gICAgICAgIHRoaXMud2lkdGggPSB0aGlzLnNvdXJjZS52aWRlb1dpZHRoO1xuICAgICAgICB0aGlzLmhlaWdodCA9IHRoaXMuc291cmNlLnZpZGVvSGVpZ2h0O1xuXG4gICAgICAgIHRoaXMuc291cmNlLnBsYXkoKTtcblxuICAgICAgICAvLyBwcmV2ZW50IG11bHRpcGxlIGxvYWRlZCBkaXNwYXRjaGVzLi5cbiAgICAgICAgaWYgKCF0aGlzLl9fbG9hZGVkKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLl9fbG9hZGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMuZW1pdCgnbG9hZGVkJywgdGhpcyk7XG4gICAgICAgIH1cbiAgICB9XG59O1xuXG4vKipcbiAqIERlc3Ryb3lzIHRoaXMgdGV4dHVyZVxuICpcbiAqL1xuVmlkZW9CYXNlVGV4dHVyZS5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uICgpXG57XG4gICAgaWYgKHRoaXMuc291cmNlICYmIHRoaXMuc291cmNlLl9waXhpSWQpXG4gICAge1xuICAgICAgICBkZWxldGUgdXRpbHMuQmFzZVRleHR1cmVDYWNoZVsgdGhpcy5zb3VyY2UuX3BpeGlJZCBdO1xuICAgICAgICBkZWxldGUgdGhpcy5zb3VyY2UuX3BpeGlJZDtcbiAgICB9XG5cbiAgICBCYXNlVGV4dHVyZS5wcm90b3R5cGUuZGVzdHJveS5jYWxsKHRoaXMpO1xufTtcblxuLyoqXG4gKiBNaW1pYyBQaXhpIEJhc2VUZXh0dXJlLmZyb20uLi4uIG1ldGhvZC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAcGFyYW0gdmlkZW8ge0hUTUxWaWRlb0VsZW1lbnR9XG4gKiBAcGFyYW0gc2NhbGVNb2RlIHtudW1iZXJ9IFNlZSB7QGxpbmsgUElYSS5TQ0FMRV9NT0RFU30gZm9yIHBvc3NpYmxlIHZhbHVlc1xuICogQHJldHVybiB7UElYSS5WaWRlb0Jhc2VUZXh0dXJlfVxuICovXG5WaWRlb0Jhc2VUZXh0dXJlLmZyb21WaWRlbyA9IGZ1bmN0aW9uICh2aWRlbywgc2NhbGVNb2RlKVxue1xuICAgIGlmICghdmlkZW8uX3BpeGlJZClcbiAgICB7XG4gICAgICAgIHZpZGVvLl9waXhpSWQgPSAndmlkZW9fJyArIHV0aWxzLnVpZCgpO1xuICAgIH1cblxuICAgIHZhciBiYXNlVGV4dHVyZSA9IHV0aWxzLkJhc2VUZXh0dXJlQ2FjaGVbdmlkZW8uX3BpeGlJZF07XG5cbiAgICBpZiAoIWJhc2VUZXh0dXJlKVxuICAgIHtcbiAgICAgICAgYmFzZVRleHR1cmUgPSBuZXcgVmlkZW9CYXNlVGV4dHVyZSh2aWRlbywgc2NhbGVNb2RlKTtcbiAgICAgICAgdXRpbHMuQmFzZVRleHR1cmVDYWNoZVsgdmlkZW8uX3BpeGlJZCBdID0gYmFzZVRleHR1cmU7XG4gICAgfVxuXG4gICAgcmV0dXJuIGJhc2VUZXh0dXJlO1xufTtcblxuLyoqXG4gKiBIZWxwZXIgZnVuY3Rpb24gdGhhdCBjcmVhdGVzIGEgbmV3IEJhc2VUZXh0dXJlIGJhc2VkIG9uIHRoZSBnaXZlbiB2aWRlbyBlbGVtZW50LlxuICogVGhpcyBCYXNlVGV4dHVyZSBjYW4gdGhlbiBiZSB1c2VkIHRvIGNyZWF0ZSBhIHRleHR1cmVcbiAqXG4gKiBAc3RhdGljXG4gKiBAcGFyYW0gdmlkZW9TcmMge3N0cmluZ3xvYmplY3R8c3RyaW5nW118b2JqZWN0W119IFRoZSBVUkwocykgZm9yIHRoZSB2aWRlby5cbiAqIEBwYXJhbSBbdmlkZW9TcmMuc3JjXSB7c3RyaW5nfSBPbmUgb2YgdGhlIHNvdXJjZSB1cmxzIGZvciB0aGUgdmlkZW9cbiAqIEBwYXJhbSBbdmlkZW9TcmMubWltZV0ge3N0cmluZ30gVGhlIG1pbWV0eXBlIG9mIHRoZSB2aWRlbyAoZS5nLiAndmlkZW8vbXA0JykuIElmIG5vdCBzcGVjaWZpZWRcbiAqICB0aGUgdXJsJ3MgZXh0ZW5zaW9uIHdpbGwgYmUgdXNlZCBhcyB0aGUgc2Vjb25kIHBhcnQgb2YgdGhlIG1pbWUgdHlwZS5cbiAqIEBwYXJhbSBzY2FsZU1vZGUge251bWJlcn0gU2VlIHtAbGluayBQSVhJLlNDQUxFX01PREVTfSBmb3IgcG9zc2libGUgdmFsdWVzXG4gKiBAcmV0dXJuIHtQSVhJLlZpZGVvQmFzZVRleHR1cmV9XG4gKi9cblZpZGVvQmFzZVRleHR1cmUuZnJvbVVybCA9IGZ1bmN0aW9uICh2aWRlb1NyYywgc2NhbGVNb2RlKVxue1xuICAgIHZhciB2aWRlbyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3ZpZGVvJyk7XG5cbiAgICAvLyBhcnJheSBvZiBvYmplY3RzIG9yIHN0cmluZ3NcbiAgICBpZiAoQXJyYXkuaXNBcnJheSh2aWRlb1NyYykpXG4gICAge1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHZpZGVvU3JjLmxlbmd0aDsgKytpKVxuICAgICAgICB7XG4gICAgICAgICAgICB2aWRlby5hcHBlbmRDaGlsZChjcmVhdGVTb3VyY2UodmlkZW9TcmNbaV0uc3JjIHx8IHZpZGVvU3JjW2ldLCB2aWRlb1NyY1tpXS5taW1lKSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLy8gc2luZ2xlIG9iamVjdCBvciBzdHJpbmdcbiAgICBlbHNlXG4gICAge1xuICAgICAgICB2aWRlby5hcHBlbmRDaGlsZChjcmVhdGVTb3VyY2UodmlkZW9TcmMuc3JjIHx8IHZpZGVvU3JjLCB2aWRlb1NyYy5taW1lKSk7XG4gICAgfVxuXG4gICAgdmlkZW8ubG9hZCgpO1xuICAgIHZpZGVvLnBsYXkoKTtcblxuICAgIHJldHVybiBWaWRlb0Jhc2VUZXh0dXJlLmZyb21WaWRlbyh2aWRlbywgc2NhbGVNb2RlKTtcbn07XG5cblZpZGVvQmFzZVRleHR1cmUuZnJvbVVybHMgPSBWaWRlb0Jhc2VUZXh0dXJlLmZyb21Vcmw7XG5cbmZ1bmN0aW9uIGNyZWF0ZVNvdXJjZShwYXRoLCB0eXBlKVxue1xuICAgIGlmICghdHlwZSlcbiAgICB7XG4gICAgICAgIHR5cGUgPSAndmlkZW8vJyArIHBhdGguc3Vic3RyKHBhdGgubGFzdEluZGV4T2YoJy4nKSArIDEpO1xuICAgIH1cblxuICAgIHZhciBzb3VyY2UgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzb3VyY2UnKTtcblxuICAgIHNvdXJjZS5zcmMgPSBwYXRoO1xuICAgIHNvdXJjZS50eXBlID0gdHlwZTtcblxuICAgIHJldHVybiBzb3VyY2U7XG59XG4iLCJ2YXIgQ09OU1QgPSByZXF1aXJlKCcuLi9jb25zdCcpLFxuICAgIEV2ZW50RW1pdHRlciA9IHJlcXVpcmUoJ2V2ZW50ZW1pdHRlcjMnKSxcbiAgICAvLyBJbnRlcm5hbCBldmVudCB1c2VkIGJ5IGNvbXBvc2VkIGVtaXR0ZXJcbiAgICBUSUNLID0gJ3RpY2snO1xuXG4vKipcbiAqIEEgVGlja2VyIGNsYXNzIHRoYXQgcnVucyBhbiB1cGRhdGUgbG9vcCB0aGF0IG90aGVyIG9iamVjdHMgbGlzdGVuIHRvLlxuICogVGhpcyBjbGFzcyBpcyBjb21wb3NlZCBhcm91bmQgYW4gRXZlbnRFbWl0dGVyIG9iamVjdCB0byBhZGQgbGlzdGVuZXJzXG4gKiBtZWFudCBmb3IgZXhlY3V0aW9uIG9uIHRoZSBuZXh0IHJlcXVlc3RlZCBhbmltYXRpb24gZnJhbWUuXG4gKiBBbmltYXRpb24gZnJhbWVzIGFyZSByZXF1ZXN0ZWQgb25seSB3aGVuIG5lY2Vzc2FyeSxcbiAqIGUuZy4gV2hlbiB0aGUgdGlja2VyIGlzIHN0YXJ0ZWQgYW5kIHRoZSBlbWl0dGVyIGhhcyBsaXN0ZW5lcnMuXG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSS50aWNrZXJcbiAqL1xuZnVuY3Rpb24gVGlja2VyKClcbntcbiAgICB2YXIgX3RoaXMgPSB0aGlzO1xuXG4gICAgLyoqXG4gICAgICogSW50ZXJuYWwgdGljayBtZXRob2QgYm91bmQgdG8gdGlja2VyIGluc3RhbmNlLlxuICAgICAqIFRoaXMgaXMgYmVjYXVzZSBpbiBlYXJseSAyMDE1LCBGdW5jdGlvbi5iaW5kXG4gICAgICogaXMgc3RpbGwgNjAlIHNsb3dlciBpbiBoaWdoIHBlcmZvcm1hbmNlIHNjZW5hcmlvcy5cbiAgICAgKiBBbHNvIHNlcGFyYXRpbmcgZnJhbWUgcmVxdWVzdHMgZnJvbSB1cGRhdGUgbWV0aG9kXG4gICAgICogc28gbGlzdGVuZXJzIG1heSBiZSBjYWxsZWQgYXQgYW55IHRpbWUgYW5kIHdpdGhcbiAgICAgKiBhbnkgYW5pbWF0aW9uIEFQSSwganVzdCBpbnZva2UgdGlja2VyLnVwZGF0ZSh0aW1lKS5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fdGljayA9IGZ1bmN0aW9uIF90aWNrKHRpbWUpIHtcblxuICAgICAgICBfdGhpcy5fcmVxdWVzdElkID0gbnVsbDtcblxuICAgICAgICBpZiAoX3RoaXMuc3RhcnRlZClcbiAgICAgICAge1xuICAgICAgICAgICAgLy8gSW52b2tlIGxpc3RlbmVycyBub3dcbiAgICAgICAgICAgIF90aGlzLnVwZGF0ZSh0aW1lKTtcbiAgICAgICAgICAgIC8vIExpc3RlbmVyIHNpZGUgZWZmZWN0cyBtYXkgaGF2ZSBtb2RpZmllZCB0aWNrZXIgc3RhdGUuXG4gICAgICAgICAgICBpZiAoX3RoaXMuc3RhcnRlZCAmJiBfdGhpcy5fcmVxdWVzdElkID09PSBudWxsICYmIF90aGlzLl9lbWl0dGVyLmxpc3RlbmVycyhUSUNLLCB0cnVlKSlcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBfdGhpcy5fcmVxdWVzdElkID0gcmVxdWVzdEFuaW1hdGlvbkZyYW1lKF90aGlzLl90aWNrKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH07XG5cbiAgICAvKipcbiAgICAgKiBJbnRlcm5hbCBlbWl0dGVyIHVzZWQgdG8gZmlyZSAndGljaycgZXZlbnRcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX2VtaXR0ZXIgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgICAvKipcbiAgICAgKiBJbnRlcm5hbCBjdXJyZW50IGZyYW1lIHJlcXVlc3QgSURcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX3JlcXVlc3RJZCA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBJbnRlcm5hbCB2YWx1ZSBtYW5hZ2VkIGJ5IG1pbkZQUyBwcm9wZXJ0eSBzZXR0ZXIgYW5kIGdldHRlci5cbiAgICAgKiBUaGlzIGlzIHRoZSBtYXhpbXVtIGFsbG93ZWQgbWlsbGlzZWNvbmRzIGJldHdlZW4gdXBkYXRlcy5cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX21heEVsYXBzZWRNUyA9IDEwMDtcblxuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgb3Igbm90IHRoaXMgdGlja2VyIHNob3VsZCBpbnZva2UgdGhlIG1ldGhvZFxuICAgICAqIHtAbGluayBQSVhJLnRpY2tlci5UaWNrZXIjc3RhcnR9IGF1dG9tYXRpY2FsbHlcbiAgICAgKiB3aGVuIGEgbGlzdGVuZXIgaXMgYWRkZWQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqIEBkZWZhdWx0IGZhbHNlXG4gICAgICovXG4gICAgdGhpcy5hdXRvU3RhcnQgPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIFNjYWxhciB0aW1lIHZhbHVlIGZyb20gbGFzdCBmcmFtZSB0byB0aGlzIGZyYW1lLlxuICAgICAqIFRoaXMgdmFsdWUgaXMgY2FwcGVkIGJ5IHNldHRpbmcge0BsaW5rIFBJWEkudGlja2VyLlRpY2tlciNtaW5GUFN9XG4gICAgICogYW5kIGlzIHNjYWxlZCB3aXRoIHtAbGluayBQSVhJLnRpY2tlci5UaWNrZXIjc3BlZWR9LlxuICAgICAqICoqTm90ZToqKiBUaGUgY2FwIG1heSBiZSBleGNlZWRlZCBieSBzY2FsaW5nLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDFcbiAgICAgKi9cbiAgICB0aGlzLmRlbHRhVGltZSA9IDE7XG5cbiAgICAvKipcbiAgICAgKiBUaW1lIGVsYXBzZWQgaW4gbWlsbGlzZWNvbmRzIGZyb20gbGFzdCBmcmFtZSB0byB0aGlzIGZyYW1lLlxuICAgICAqIE9wcG9zZWQgdG8gd2hhdCB0aGUgc2NhbGFyIHtAbGluayBQSVhJLnRpY2tlci5UaWNrZXIjZGVsdGFUaW1lfVxuICAgICAqIGlzIGJhc2VkLCB0aGlzIHZhbHVlIGlzIG5laXRoZXIgY2FwcGVkIG5vciBzY2FsZWQuXG4gICAgICogSWYgdGhlIHBsYXRmb3JtIHN1cHBvcnRzIERPTUhpZ2hSZXNUaW1lU3RhbXAsXG4gICAgICogdGhpcyB2YWx1ZSB3aWxsIGhhdmUgYSBwcmVjaXNpb24gb2YgMSDCtXMuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtET01IaWdoUmVzVGltZVN0YW1wfG51bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAxIC8gVEFSR0VUX0ZQTVNcbiAgICAgKi9cbiAgICB0aGlzLmVsYXBzZWRNUyA9IDEgLyBDT05TVC5UQVJHRVRfRlBNUzsgLy8gZGVmYXVsdCB0byB0YXJnZXQgZnJhbWUgdGltZVxuXG4gICAgLyoqXG4gICAgICogVGhlIGxhc3QgdGltZSB7QGxpbmsgUElYSS50aWNrZXIuVGlja2VyI3VwZGF0ZX0gd2FzIGludm9rZWQuXG4gICAgICogVGhpcyB2YWx1ZSBpcyBhbHNvIHJlc2V0IGludGVybmFsbHkgb3V0c2lkZSBvZiBpbnZva2luZ1xuICAgICAqIHVwZGF0ZSwgYnV0IG9ubHkgd2hlbiBhIG5ldyBhbmltYXRpb24gZnJhbWUgaXMgcmVxdWVzdGVkLlxuICAgICAqIElmIHRoZSBwbGF0Zm9ybSBzdXBwb3J0cyBET01IaWdoUmVzVGltZVN0YW1wLFxuICAgICAqIHRoaXMgdmFsdWUgd2lsbCBoYXZlIGEgcHJlY2lzaW9uIG9mIDEgwrVzLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7RE9NSGlnaFJlc1RpbWVTdGFtcHxudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMFxuICAgICAqL1xuICAgIHRoaXMubGFzdFRpbWUgPSAwO1xuXG4gICAgLyoqXG4gICAgICogRmFjdG9yIG9mIGN1cnJlbnQge0BsaW5rIFBJWEkudGlja2VyLlRpY2tlciNkZWx0YVRpbWV9LlxuICAgICAqIEBleGFtcGxlXG4gICAgICogLy8gU2NhbGVzIHRpY2tlci5kZWx0YVRpbWUgdG8gd2hhdCB3b3VsZCBiZVxuICAgICAqIC8vIHRoZSBlcXVpdmFsZW50IG9mIGFwcHJveGltYXRlbHkgMTIwIEZQU1xuICAgICAqIHRpY2tlci5zcGVlZCA9IDI7XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMVxuICAgICAqL1xuICAgIHRoaXMuc3BlZWQgPSAxO1xuXG4gICAgLyoqXG4gICAgICogV2hldGhlciBvciBub3QgdGhpcyB0aWNrZXIgaGFzIGJlZW4gc3RhcnRlZC5cbiAgICAgKiBgdHJ1ZWAgaWYge0BsaW5rIFBJWEkudGlja2VyLlRpY2tlciNzdGFydH0gaGFzIGJlZW4gY2FsbGVkLlxuICAgICAqIGBmYWxzZWAgaWYge0BsaW5rIFBJWEkudGlja2VyLlRpY2tlciNzdG9wfSBoYXMgYmVlbiBjYWxsZWQuXG4gICAgICogV2hpbGUgYGZhbHNlYCwgdGhpcyB2YWx1ZSBtYXkgY2hhbmdlIHRvIGB0cnVlYCBpbiB0aGVcbiAgICAgKiBldmVudCBvZiB7QGxpbmsgUElYSS50aWNrZXIuVGlja2VyI2F1dG9TdGFydH0gYmVpbmcgYHRydWVgXG4gICAgICogYW5kIGEgbGlzdGVuZXIgaXMgYWRkZWQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqIEBkZWZhdWx0IGZhbHNlXG4gICAgICovXG4gICAgdGhpcy5zdGFydGVkID0gZmFsc2U7XG59XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKFRpY2tlci5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBUaGUgZnJhbWVzIHBlciBzZWNvbmQgYXQgd2hpY2ggdGhpcyB0aWNrZXIgaXMgcnVubmluZy5cbiAgICAgKiBUaGUgZGVmYXVsdCBpcyBhcHByb3hpbWF0ZWx5IDYwIGluIG1vc3QgbW9kZXJuIGJyb3dzZXJzLlxuICAgICAqICoqTm90ZToqKiBUaGlzIGRvZXMgbm90IGZhY3RvciBpbiB0aGUgdmFsdWUgb2ZcbiAgICAgKiB7QGxpbmsgUElYSS50aWNrZXIuVGlja2VyI3NwZWVkfSwgd2hpY2ggaXMgc3BlY2lmaWNcbiAgICAgKiB0byBzY2FsaW5nIHtAbGluayBQSVhJLnRpY2tlci5UaWNrZXIjZGVsdGFUaW1lfS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXJcbiAgICAgKiBAbWVtYmVyb2YgUElYSS50aWNrZXIuVGlja2VyI1xuICAgICAqIEByZWFkb25seVxuICAgICAqL1xuICAgIEZQUzoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIDEwMDAgLyB0aGlzLmVsYXBzZWRNUztcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBNYW5hZ2VzIHRoZSBtYXhpbXVtIGFtb3VudCBvZiBtaWxsaXNlY29uZHMgYWxsb3dlZCB0b1xuICAgICAqIGVsYXBzZSBiZXR3ZWVuIGludm9raW5nIHtAbGluayBQSVhJLnRpY2tlci5UaWNrZXIjdXBkYXRlfS5cbiAgICAgKiBUaGlzIHZhbHVlIGlzIHVzZWQgdG8gY2FwIHtAbGluayBQSVhJLnRpY2tlci5UaWNrZXIjZGVsdGFUaW1lfSxcbiAgICAgKiBidXQgZG9lcyBub3QgZWZmZWN0IHRoZSBtZWFzdXJlZCB2YWx1ZSBvZiB7QGxpbmsgUElYSS50aWNrZXIuVGlja2VyI0ZQU30uXG4gICAgICogV2hlbiBzZXR0aW5nIHRoaXMgcHJvcGVydHkgaXQgaXMgY2xhbXBlZCB0byBhIHZhbHVlIGJldHdlZW5cbiAgICAgKiBgMGAgYW5kIGBQSVhJLlRBUkdFVF9GUE1TICogMTAwMGAuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyXG4gICAgICogQG1lbWJlcm9mIFBJWEkudGlja2VyLlRpY2tlciNcbiAgICAgKiBAZGVmYXVsdCAxMFxuICAgICAqL1xuICAgIG1pbkZQUzoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIDEwMDAgLyB0aGlzLl9tYXhFbGFwc2VkTVM7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24oZnBzKVxuICAgICAgICB7XG4gICAgICAgICAgICAvLyBDbGFtcDogMCB0byBUQVJHRVRfRlBNU1xuICAgICAgICAgICAgdmFyIG1pbkZQTVMgPSBNYXRoLm1pbihNYXRoLm1heCgwLCBmcHMpIC8gMTAwMCwgQ09OU1QuVEFSR0VUX0ZQTVMpO1xuICAgICAgICAgICAgdGhpcy5fbWF4RWxhcHNlZE1TID0gMSAvIG1pbkZQTVM7XG4gICAgICAgIH1cbiAgICB9XG59KTtcblxuLyoqXG4gKiBDb25kaXRpb25hbGx5IHJlcXVlc3RzIGEgbmV3IGFuaW1hdGlvbiBmcmFtZS5cbiAqIElmIGEgZnJhbWUgaGFzIG5vdCBhbHJlYWR5IGJlZW4gcmVxdWVzdGVkLCBhbmQgaWYgdGhlIGludGVybmFsXG4gKiBlbWl0dGVyIGhhcyBsaXN0ZW5lcnMsIGEgbmV3IGZyYW1lIGlzIHJlcXVlc3RlZC5cbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5UaWNrZXIucHJvdG90eXBlLl9yZXF1ZXN0SWZOZWVkZWQgPSBmdW5jdGlvbiBfcmVxdWVzdElmTmVlZGVkKClcbntcbiAgICBpZiAodGhpcy5fcmVxdWVzdElkID09PSBudWxsICYmIHRoaXMuX2VtaXR0ZXIubGlzdGVuZXJzKFRJQ0ssIHRydWUpKVxuICAgIHtcbiAgICAgICAgLy8gZW5zdXJlIGNhbGxiYWNrcyBnZXQgY29ycmVjdCBkZWx0YVxuICAgICAgICB0aGlzLmxhc3RUaW1lID0gcGVyZm9ybWFuY2Uubm93KCk7XG4gICAgICAgIHRoaXMuX3JlcXVlc3RJZCA9IHJlcXVlc3RBbmltYXRpb25GcmFtZSh0aGlzLl90aWNrKTtcbiAgICB9XG59O1xuXG4vKipcbiAqIENvbmRpdGlvbmFsbHkgY2FuY2VscyBhIHBlbmRpbmcgYW5pbWF0aW9uIGZyYW1lLlxuICpcbiAqIEBwcml2YXRlXG4gKi9cblRpY2tlci5wcm90b3R5cGUuX2NhbmNlbElmTmVlZGVkID0gZnVuY3Rpb24gX2NhbmNlbElmTmVlZGVkKClcbntcbiAgICBpZiAodGhpcy5fcmVxdWVzdElkICE9PSBudWxsKVxuICAgIHtcbiAgICAgICAgY2FuY2VsQW5pbWF0aW9uRnJhbWUodGhpcy5fcmVxdWVzdElkKTtcbiAgICAgICAgdGhpcy5fcmVxdWVzdElkID0gbnVsbDtcbiAgICB9XG59O1xuXG4vKipcbiAqIENvbmRpdGlvbmFsbHkgcmVxdWVzdHMgYSBuZXcgYW5pbWF0aW9uIGZyYW1lLlxuICogSWYgdGhlIHRpY2tlciBoYXMgYmVlbiBzdGFydGVkIGl0IGNoZWNrcyBpZiBhIGZyYW1lIGhhcyBub3QgYWxyZWFkeVxuICogYmVlbiByZXF1ZXN0ZWQsIGFuZCBpZiB0aGUgaW50ZXJuYWwgZW1pdHRlciBoYXMgbGlzdGVuZXJzLiBJZiB0aGVzZVxuICogY29uZGl0aW9ucyBhcmUgbWV0LCBhIG5ldyBmcmFtZSBpcyByZXF1ZXN0ZWQuIElmIHRoZSB0aWNrZXIgaGFzIG5vdFxuICogYmVlbiBzdGFydGVkLCBidXQgYXV0b1N0YXJ0IGlzIGB0cnVlYCwgdGhlbiB0aGUgdGlja2VyIHN0YXJ0cyBub3csXG4gKiBhbmQgY29udGludWVzIHdpdGggdGhlIHByZXZpb3VzIGNvbmRpdGlvbnMgdG8gcmVxdWVzdCBhIG5ldyBmcmFtZS5cbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5UaWNrZXIucHJvdG90eXBlLl9zdGFydElmUG9zc2libGUgPSBmdW5jdGlvbiBfc3RhcnRJZlBvc3NpYmxlKClcbntcbiAgICBpZiAodGhpcy5zdGFydGVkKVxuICAgIHtcbiAgICAgICAgdGhpcy5fcmVxdWVzdElmTmVlZGVkKCk7XG4gICAgfVxuICAgIGVsc2UgaWYgKHRoaXMuYXV0b1N0YXJ0KVxuICAgIHtcbiAgICAgICAgdGhpcy5zdGFydCgpO1xuICAgIH1cbn07XG5cbi8qKlxuICogQ2FsbHMge0BsaW5rIG1vZHVsZTpldmVudGVtaXR0ZXIzLkV2ZW50RW1pdHRlciNvbn0gaW50ZXJuYWxseSBmb3IgdGhlXG4gKiBpbnRlcm5hbCAndGljaycgZXZlbnQuIEl0IGNoZWNrcyBpZiB0aGUgZW1pdHRlciBoYXMgbGlzdGVuZXJzLFxuICogYW5kIGlmIHNvIGl0IHJlcXVlc3RzIGEgbmV3IGFuaW1hdGlvbiBmcmFtZSBhdCB0aGlzIHBvaW50LlxuICpcbiAqIEBwYXJhbSBmbiB7RnVuY3Rpb259IFRoZSBsaXN0ZW5lciBmdW5jdGlvbiB0byBiZSBhZGRlZCBmb3IgdXBkYXRlc1xuICogQHBhcmFtIFtjb250ZXh0XSB7RnVuY3Rpb259IFRoZSBsaXN0ZW5lciBjb250ZXh0XG4gKiBAcmV0dXJucyB7UElYSS50aWNrZXIuVGlja2VyfSB0aGlzXG4gKi9cblRpY2tlci5wcm90b3R5cGUuYWRkID0gZnVuY3Rpb24gYWRkKGZuLCBjb250ZXh0KVxue1xuICAgIHRoaXMuX2VtaXR0ZXIub24oVElDSywgZm4sIGNvbnRleHQpO1xuXG4gICAgdGhpcy5fc3RhcnRJZlBvc3NpYmxlKCk7XG5cbiAgICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogQ2FsbHMge0BsaW5rIG1vZHVsZTpldmVudGVtaXR0ZXIzLkV2ZW50RW1pdHRlciNvbmNlfSBpbnRlcm5hbGx5IGZvciB0aGVcbiAqIGludGVybmFsICd0aWNrJyBldmVudC4gSXQgY2hlY2tzIGlmIHRoZSBlbWl0dGVyIGhhcyBsaXN0ZW5lcnMsXG4gKiBhbmQgaWYgc28gaXQgcmVxdWVzdHMgYSBuZXcgYW5pbWF0aW9uIGZyYW1lIGF0IHRoaXMgcG9pbnQuXG4gKlxuICogQHBhcmFtIGZuIHtGdW5jdGlvbn0gVGhlIGxpc3RlbmVyIGZ1bmN0aW9uIHRvIGJlIGFkZGVkIGZvciBvbmUgdXBkYXRlXG4gKiBAcGFyYW0gW2NvbnRleHRdIHtGdW5jdGlvbn0gVGhlIGxpc3RlbmVyIGNvbnRleHRcbiAqIEByZXR1cm5zIHtQSVhJLnRpY2tlci5UaWNrZXJ9IHRoaXNcbiAqL1xuVGlja2VyLnByb3RvdHlwZS5hZGRPbmNlID0gZnVuY3Rpb24gYWRkT25jZShmbiwgY29udGV4dClcbntcbiAgICB0aGlzLl9lbWl0dGVyLm9uY2UoVElDSywgZm4sIGNvbnRleHQpO1xuXG4gICAgdGhpcy5fc3RhcnRJZlBvc3NpYmxlKCk7XG5cbiAgICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogQ2FsbHMge0BsaW5rIG1vZHVsZTpldmVudGVtaXR0ZXIzLkV2ZW50RW1pdHRlciNvZmZ9IGludGVybmFsbHkgZm9yICd0aWNrJyBldmVudC5cbiAqIEl0IGNoZWNrcyBpZiB0aGUgZW1pdHRlciBoYXMgbGlzdGVuZXJzIGZvciAndGljaycgZXZlbnQuXG4gKiBJZiBpdCBkb2VzLCB0aGVuIGl0IGNhbmNlbHMgdGhlIGFuaW1hdGlvbiBmcmFtZS5cbiAqXG4gKiBAcGFyYW0gW2ZuXSB7RnVuY3Rpb259IFRoZSBsaXN0ZW5lciBmdW5jdGlvbiB0byBiZSByZW1vdmVkXG4gKiBAcGFyYW0gW2NvbnRleHRdIHtGdW5jdGlvbn0gVGhlIGxpc3RlbmVyIGNvbnRleHQgdG8gYmUgcmVtb3ZlZFxuICogQHJldHVybnMge1BJWEkudGlja2VyLlRpY2tlcn0gdGhpc1xuICovXG5UaWNrZXIucHJvdG90eXBlLnJlbW92ZSA9IGZ1bmN0aW9uIHJlbW92ZShmbiwgY29udGV4dClcbntcbiAgICB0aGlzLl9lbWl0dGVyLm9mZihUSUNLLCBmbiwgY29udGV4dCk7XG5cbiAgICBpZiAoIXRoaXMuX2VtaXR0ZXIubGlzdGVuZXJzKFRJQ0ssIHRydWUpKVxuICAgIHtcbiAgICAgICAgdGhpcy5fY2FuY2VsSWZOZWVkZWQoKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogU3RhcnRzIHRoZSB0aWNrZXIuIElmIHRoZSB0aWNrZXIgaGFzIGxpc3RlbmVyc1xuICogYSBuZXcgYW5pbWF0aW9uIGZyYW1lIGlzIHJlcXVlc3RlZCBhdCB0aGlzIHBvaW50LlxuICovXG5UaWNrZXIucHJvdG90eXBlLnN0YXJ0ID0gZnVuY3Rpb24gc3RhcnQoKVxue1xuICAgIGlmICghdGhpcy5zdGFydGVkKVxuICAgIHtcbiAgICAgICAgdGhpcy5zdGFydGVkID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5fcmVxdWVzdElmTmVlZGVkKCk7XG4gICAgfVxufTtcblxuLyoqXG4gKiBTdG9wcyB0aGUgdGlja2VyLiBJZiB0aGUgdGlja2VyIGhhcyByZXF1ZXN0ZWRcbiAqIGFuIGFuaW1hdGlvbiBmcmFtZSBpdCBpcyBjYW5jZWxlZCBhdCB0aGlzIHBvaW50LlxuICovXG5UaWNrZXIucHJvdG90eXBlLnN0b3AgPSBmdW5jdGlvbiBzdG9wKClcbntcbiAgICBpZiAodGhpcy5zdGFydGVkKVxuICAgIHtcbiAgICAgICAgdGhpcy5zdGFydGVkID0gZmFsc2U7XG4gICAgICAgIHRoaXMuX2NhbmNlbElmTmVlZGVkKCk7XG4gICAgfVxufTtcblxuLyoqXG4gKiBUcmlnZ2VycyBhbiB1cGRhdGUuIEFuIHVwZGF0ZSBlbnRhaWxzIHNldHRpbmcgdGhlXG4gKiBjdXJyZW50IHtAbGluayBQSVhJLnRpY2tlci5UaWNrZXIjZWxhcHNlZE1TfSxcbiAqIHRoZSBjdXJyZW50IHtAbGluayBQSVhJLnRpY2tlci5UaWNrZXIjZGVsdGFUaW1lfSxcbiAqIGludm9raW5nIGFsbCBsaXN0ZW5lcnMgd2l0aCBjdXJyZW50IGRlbHRhVGltZSxcbiAqIGFuZCB0aGVuIGZpbmFsbHkgc2V0dGluZyB7QGxpbmsgUElYSS50aWNrZXIuVGlja2VyI2xhc3RUaW1lfVxuICogd2l0aCB0aGUgdmFsdWUgb2YgY3VycmVudFRpbWUgdGhhdCB3YXMgcHJvdmlkZWQuXG4gKiBUaGlzIG1ldGhvZCB3aWxsIGJlIGNhbGxlZCBhdXRvbWF0aWNhbGx5IGJ5IGFuaW1hdGlvblxuICogZnJhbWUgY2FsbGJhY2tzIGlmIHRoZSB0aWNrZXIgaW5zdGFuY2UgaGFzIGJlZW4gc3RhcnRlZFxuICogYW5kIGxpc3RlbmVycyBhcmUgYWRkZWQuXG4gKlxuICogQHBhcmFtIFtjdXJyZW50VGltZT1wZXJmb3JtYW5jZS5ub3coKV0ge0RPTUhpZ2hSZXNUaW1lU3RhbXB8bnVtYmVyfSB0aGUgY3VycmVudCB0aW1lIG9mIGV4ZWN1dGlvblxuICovXG5UaWNrZXIucHJvdG90eXBlLnVwZGF0ZSA9IGZ1bmN0aW9uIHVwZGF0ZShjdXJyZW50VGltZSlcbntcbiAgICB2YXIgZWxhcHNlZE1TO1xuXG4gICAgLy8gQWxsb3cgY2FsbGluZyB1cGRhdGUgZGlyZWN0bHkgd2l0aCBkZWZhdWx0IGN1cnJlbnRUaW1lLlxuICAgIGN1cnJlbnRUaW1lID0gY3VycmVudFRpbWUgfHwgcGVyZm9ybWFuY2Uubm93KCk7XG4gICAgLy8gU2F2ZSB1bmNhcHBlZCBlbGFwc2VkTVMgZm9yIG1lYXN1cmVtZW50XG4gICAgZWxhcHNlZE1TID0gdGhpcy5lbGFwc2VkTVMgPSBjdXJyZW50VGltZSAtIHRoaXMubGFzdFRpbWU7XG5cbiAgICAvLyBjYXAgdGhlIG1pbGxpc2Vjb25kcyBlbGFwc2VkIHVzZWQgZm9yIGRlbHRhVGltZVxuICAgIGlmIChlbGFwc2VkTVMgPiB0aGlzLl9tYXhFbGFwc2VkTVMpXG4gICAge1xuICAgICAgICBlbGFwc2VkTVMgPSB0aGlzLl9tYXhFbGFwc2VkTVM7XG4gICAgfVxuXG4gICAgdGhpcy5kZWx0YVRpbWUgPSBlbGFwc2VkTVMgKiBDT05TVC5UQVJHRVRfRlBNUyAqIHRoaXMuc3BlZWQ7XG5cbiAgICAvLyBJbnZva2UgbGlzdGVuZXJzIGFkZGVkIHRvIGludGVybmFsIGVtaXR0ZXJcbiAgICB0aGlzLl9lbWl0dGVyLmVtaXQoVElDSywgdGhpcy5kZWx0YVRpbWUpO1xuXG4gICAgdGhpcy5sYXN0VGltZSA9IGN1cnJlbnRUaW1lO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBUaWNrZXI7XG4iLCJ2YXIgVGlja2VyID0gcmVxdWlyZSgnLi9UaWNrZXInKTtcblxuLyoqXG4gKiBUaGUgc2hhcmVkIHRpY2tlciBpbnN0YW5jZSB1c2VkIGJ5IHtAbGluayBQSVhJLmV4dHJhcy5Nb3ZpZUNsaXB9LlxuICogYW5kIGJ5IHtAbGluayBQSVhJLmludGVyYWN0aW9uLkludGVyYWN0aW9uTWFuYWdlcn0uXG4gKiBUaGUgcHJvcGVydHkge0BsaW5rIFBJWEkudGlja2VyLlRpY2tlciNhdXRvU3RhcnR9IGlzIHNldCB0byBgdHJ1ZWBcbiAqIGZvciB0aGlzIGluc3RhbmNlLiBQbGVhc2UgZm9sbG93IHRoZSBleGFtcGxlcyBmb3IgdXNhZ2UsIGluY2x1ZGluZ1xuICogaG93IHRvIG9wdC1vdXQgb2YgYXV0by1zdGFydGluZyB0aGUgc2hhcmVkIHRpY2tlci5cbiAqXG4gKiBAZXhhbXBsZVxuICogdmFyIHRpY2tlciA9IFBJWEkudGlja2VyLnNoYXJlZDtcbiAqIC8vIFNldCB0aGlzIHRvIHByZXZlbnQgc3RhcnRpbmcgdGhpcyB0aWNrZXIgd2hlbiBsaXN0ZW5lcnMgYXJlIGFkZGVkLlxuICogLy8gQnkgZGVmYXVsdCB0aGlzIGlzIHRydWUgb25seSBmb3IgdGhlIFBJWEkudGlja2VyLnNoYXJlZCBpbnN0YW5jZS5cbiAqIHRpY2tlci5hdXRvU3RhcnQgPSBmYWxzZTtcbiAqIC8vIEZZSSwgY2FsbCB0aGlzIHRvIGVuc3VyZSB0aGUgdGlja2VyIGlzIHN0b3BwZWQuIEl0IHNob3VsZCBiZSBzdG9wcGVkXG4gKiAvLyBpZiB5b3UgaGF2ZSBub3QgYXR0ZW1wdGVkIHRvIHJlbmRlciBhbnl0aGluZyB5ZXQuXG4gKiB0aWNrZXIuc3RvcCgpO1xuICogLy8gQ2FsbCB0aGlzIHdoZW4geW91IGFyZSByZWFkeSBmb3IgYSBydW5uaW5nIHNoYXJlZCB0aWNrZXIuXG4gKiB0aWNrZXIuc3RhcnQoKTtcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gWW91IG1heSB1c2UgdGhlIHNoYXJlZCB0aWNrZXIgdG8gcmVuZGVyLi4uXG4gKiB2YXIgcmVuZGVyZXIgPSBQSVhJLmF1dG9EZXRlY3RSZW5kZXJlcig4MDAsIDYwMCk7XG4gKiB2YXIgc3RhZ2UgPSBuZXcgUElYSS5Db250YWluZXIoKTtcbiAqIHZhciBpbnRlcmFjdGlvbk1hbmFnZXIgPSBQSVhJLmludGVyYWN0aW9uLkludGVyYWN0aW9uTWFuYWdlcihyZW5kZXJlcik7XG4gKiBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKHJlbmRlcmVyLnZpZXcpO1xuICogdGlja2VyLmFkZChmdW5jdGlvbiAodGltZSkge1xuICogICAgIHJlbmRlcmVyLnJlbmRlcihzdGFnZSk7XG4gKiB9KTtcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gT3IgeW91IGNhbiBqdXN0IHVwZGF0ZSBpdCBtYW51YWxseS5cbiAqIHRpY2tlci5hdXRvU3RhcnQgPSBmYWxzZTtcbiAqIHRpY2tlci5zdG9wKCk7XG4gKiBmdW5jdGlvbiBhbmltYXRlKHRpbWUpIHtcbiAqICAgICB0aWNrZXIudXBkYXRlKHRpbWUpO1xuICogICAgIHJlbmRlcmVyLnJlbmRlcihzdGFnZSk7XG4gKiAgICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKGFuaW1hdGUpO1xuICogfVxuICogYW5pbWF0ZShwZXJmb3JtYW5jZS5ub3coKSk7XG4gKlxuICogQHR5cGUge1BJWEkudGlja2VyLlRpY2tlcn1cbiAqIEBtZW1iZXJvZiBQSVhJLnRpY2tlclxuICovXG52YXIgc2hhcmVkID0gbmV3IFRpY2tlcigpO1xuc2hhcmVkLmF1dG9TdGFydCA9IHRydWU7XG5cbi8qKlxuICogQG5hbWVzcGFjZSBQSVhJLnRpY2tlclxuICovXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgICBzaGFyZWQ6IHNoYXJlZCxcbiAgICBUaWNrZXI6IFRpY2tlclxufTtcbiIsIi8qKlxuICogR2VuZXJpYyBNYXNrIFN0YWNrIGRhdGEgc3RydWN0dXJlXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKi9cblxudmFyIEdMX01BUCA9IHt9O1xuXG5cbnZhciBjcmVhdGVJbmRpY2VzRm9yUXVhZHMgPSBmdW5jdGlvbiAoc2l6ZSlcbntcbiAgICAvLyB0aGUgdG90YWwgbnVtYmVyIG9mIGluZGljZXMgaW4gb3VyIGFycmF5LCB0aGVyZSBhcmUgNiBwb2ludHMgcGVyIHF1YWQuXG4gICBcbiAgICB2YXIgdG90YWxJbmRpY2VzID0gc2l6ZSAqIDY7XG5cbiAgICB2YXIgaW5kaWNlcyA9IG5ldyBVaW50MTZBcnJheSh0b3RhbEluZGljZXMpO1xuXG5cdC8vIGZpbGwgdGhlIGluZGljZXMgd2l0aCB0aGUgcXVhZHMgdG8gZHJhd1xuICAgIGZvciAodmFyIGk9MCwgaj0wOyBpIDwgdG90YWxJbmRpY2VzOyBpICs9IDYsIGogKz0gNClcbiAgICB7XG4gICAgICAgIGluZGljZXNbaSArIDBdID0gaiArIDA7XG4gICAgICAgIGluZGljZXNbaSArIDFdID0gaiArIDE7XG4gICAgICAgIGluZGljZXNbaSArIDJdID0gaiArIDI7XG4gICAgICAgIGluZGljZXNbaSArIDNdID0gaiArIDA7XG4gICAgICAgIGluZGljZXNbaSArIDRdID0gaiArIDI7XG4gICAgICAgIGluZGljZXNbaSArIDVdID0gaiArIDM7XG4gICAgfVxuXG4gICAgcmV0dXJuIGluZGljZXM7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGNyZWF0ZUluZGljZXNGb3JRdWFkczsiLCJ2YXIgQ09OU1QgPSByZXF1aXJlKCcuLi9jb25zdCcpO1xuXG4vKipcbiAqIEBuYW1lc3BhY2UgUElYSS51dGlsc1xuICovXG52YXIgdXRpbHMgPSBtb2R1bGUuZXhwb3J0cyA9IHtcbiAgICBfdWlkOiAwLFxuICAgIF9zYWlkSGVsbG86IGZhbHNlLFxuXG4gICAgRXZlbnRFbWl0dGVyOiAgIHJlcXVpcmUoJ2V2ZW50ZW1pdHRlcjMnKSxcbiAgICBwbHVnaW5UYXJnZXQ6ICAgcmVxdWlyZSgnLi9wbHVnaW5UYXJnZXQnKSxcbiAgICBhc3luYzogICAgICAgICAgcmVxdWlyZSgnYXN5bmMnKSxcblxuICAgIC8qKlxuICAgICAqIEdldHMgdGhlIG5leHQgdW5pcXVlIGlkZW50aWZpZXJcbiAgICAgKlxuICAgICAqIEByZXR1cm4ge251bWJlcn0gVGhlIG5leHQgdW5pcXVlIGlkZW50aWZpZXIgdG8gdXNlLlxuICAgICAqL1xuICAgIHVpZDogZnVuY3Rpb24gKClcbiAgICB7XG4gICAgICAgIHJldHVybiArK3V0aWxzLl91aWQ7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIENvbnZlcnRzIGEgaGV4IGNvbG9yIG51bWJlciB0byBhbiBbUiwgRywgQl0gYXJyYXlcbiAgICAgKlxuICAgICAqIEBwYXJhbSBoZXgge251bWJlcn1cbiAgICAgKiBAcGFyYW0gIHtudW1iZXJbXX0gW291dD1bXV1cbiAgICAgKiBAcmV0dXJuIHtudW1iZXJbXX0gQW4gYXJyYXkgcmVwcmVzZW50aW5nIHRoZSBbUiwgRywgQl0gb2YgdGhlIGNvbG9yLlxuICAgICAqL1xuICAgIGhleDJyZ2I6IGZ1bmN0aW9uIChoZXgsIG91dClcbiAgICB7XG4gICAgICAgIG91dCA9IG91dCB8fCBbXTtcblxuICAgICAgICBvdXRbMF0gPSAoaGV4ID4+IDE2ICYgMHhGRikgLyAyNTU7XG4gICAgICAgIG91dFsxXSA9IChoZXggPj4gOCAmIDB4RkYpIC8gMjU1O1xuICAgICAgICBvdXRbMl0gPSAoaGV4ICYgMHhGRikgLyAyNTU7XG5cbiAgICAgICAgcmV0dXJuIG91dDtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQ29udmVydHMgYSBoZXggY29sb3IgbnVtYmVyIHRvIGEgc3RyaW5nLlxuICAgICAqXG4gICAgICogQHBhcmFtIGhleCB7bnVtYmVyfVxuICAgICAqIEByZXR1cm4ge3N0cmluZ30gVGhlIHN0cmluZyBjb2xvci5cbiAgICAgKi9cbiAgICBoZXgyc3RyaW5nOiBmdW5jdGlvbiAoaGV4KVxuICAgIHtcbiAgICAgICAgaGV4ID0gaGV4LnRvU3RyaW5nKDE2KTtcbiAgICAgICAgaGV4ID0gJzAwMDAwMCcuc3Vic3RyKDAsIDYgLSBoZXgubGVuZ3RoKSArIGhleDtcblxuICAgICAgICByZXR1cm4gJyMnICsgaGV4O1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBDb252ZXJ0cyBhIGNvbG9yIGFzIGFuIFtSLCBHLCBCXSBhcnJheSB0byBhIGhleCBudW1iZXJcbiAgICAgKlxuICAgICAqIEBwYXJhbSByZ2Ige251bWJlcltdfVxuICAgICAqIEByZXR1cm4ge251bWJlcn0gVGhlIGNvbG9yIG51bWJlclxuICAgICAqL1xuICAgIHJnYjJoZXg6IGZ1bmN0aW9uIChyZ2IpXG4gICAge1xuICAgICAgICByZXR1cm4gKChyZ2JbMF0qMjU1IDw8IDE2KSArIChyZ2JbMV0qMjU1IDw8IDgpICsgcmdiWzJdKjI1NSk7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIENoZWNrcyB3aGV0aGVyIHRoZSBDYW52YXMgQmxlbmRNb2RlcyBhcmUgc3VwcG9ydGVkIGJ5IHRoZSBjdXJyZW50IGJyb3dzZXJcbiAgICAgKlxuICAgICAqIEByZXR1cm4ge2Jvb2xlYW59IHdoZXRoZXIgdGhleSBhcmUgc3VwcG9ydGVkXG4gICAgICovXG4gICAgY2FuVXNlTmV3Q2FudmFzQmxlbmRNb2RlczogZnVuY3Rpb24gKClcbiAgICB7XG4gICAgICAgIGlmICh0eXBlb2YgZG9jdW1lbnQgPT09ICd1bmRlZmluZWQnKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgcG5nSGVhZCA9ICdkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQUFRQUFBQUJBUU1BQUFERDhwMk9BQUFBQTFCTVZFWC8nO1xuICAgICAgICB2YXIgcG5nRW5kID0gJ0FBQUFDa2xFUVZRSTEyTmdBQUFBQWdBQjRpRzhNd0FBQUFCSlJVNUVya0pnZ2c9PSc7XG5cbiAgICAgICAgdmFyIG1hZ2VudGEgPSBuZXcgSW1hZ2UoKTtcbiAgICAgICAgbWFnZW50YS5zcmMgPSBwbmdIZWFkICsgJ0FQODA0T2E2JyArIHBuZ0VuZDtcblxuICAgICAgICB2YXIgeWVsbG93ID0gbmV3IEltYWdlKCk7XG4gICAgICAgIHllbGxvdy5zcmMgPSBwbmdIZWFkICsgJy93Q0t4dlJGJyArIHBuZ0VuZDtcblxuICAgICAgICB2YXIgY2FudmFzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnY2FudmFzJyk7XG4gICAgICAgIGNhbnZhcy53aWR0aCA9IDY7XG4gICAgICAgIGNhbnZhcy5oZWlnaHQgPSAxO1xuXG4gICAgICAgIHZhciBjb250ZXh0ID0gY2FudmFzLmdldENvbnRleHQoJzJkJyk7XG4gICAgICAgIGNvbnRleHQuZ2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uID0gJ211bHRpcGx5JztcbiAgICAgICAgY29udGV4dC5kcmF3SW1hZ2UobWFnZW50YSwgMCwgMCk7XG4gICAgICAgIGNvbnRleHQuZHJhd0ltYWdlKHllbGxvdywgMiwgMCk7XG5cbiAgICAgICAgdmFyIGRhdGEgPSBjb250ZXh0LmdldEltYWdlRGF0YSgyLDAsMSwxKS5kYXRhO1xuXG4gICAgICAgIHJldHVybiAoZGF0YVswXSA9PT0gMjU1ICYmIGRhdGFbMV0gPT09IDAgJiYgZGF0YVsyXSA9PT0gMCk7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIEdpdmVuIGEgbnVtYmVyLCB0aGlzIGZ1bmN0aW9uIHJldHVybnMgdGhlIGNsb3Nlc3QgbnVtYmVyIHRoYXQgaXMgYSBwb3dlciBvZiB0d29cbiAgICAgKiB0aGlzIGZ1bmN0aW9uIGlzIHRha2VuIGZyb20gU3RhcmxpbmcgRnJhbWV3b3JrIGFzIGl0cyBwcmV0dHkgbmVhdCA7KVxuICAgICAqXG4gICAgICogQHBhcmFtIG51bWJlciB7bnVtYmVyfVxuICAgICAqIEByZXR1cm4ge251bWJlcn0gdGhlIGNsb3Nlc3QgbnVtYmVyIHRoYXQgaXMgYSBwb3dlciBvZiB0d29cbiAgICAgKi9cbiAgICBnZXROZXh0UG93ZXJPZlR3bzogZnVuY3Rpb24gKG51bWJlcilcbiAgICB7XG4gICAgICAgIC8vIHNlZTogaHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9Qb3dlcl9vZl90d28jRmFzdF9hbGdvcml0aG1fdG9fY2hlY2tfaWZfYV9wb3NpdGl2ZV9udW1iZXJfaXNfYV9wb3dlcl9vZl90d29cbiAgICAgICAgaWYgKG51bWJlciA+IDAgJiYgKG51bWJlciAmIChudW1iZXIgLSAxKSkgPT09IDApXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiBudW1iZXI7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgICB2YXIgcmVzdWx0ID0gMTtcblxuICAgICAgICAgICAgd2hpbGUgKHJlc3VsdCA8IG51bWJlcilcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICByZXN1bHQgPDw9IDE7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogY2hlY2tzIGlmIHRoZSBnaXZlbiB3aWR0aCBhbmQgaGVpZ2h0IG1ha2UgYSBwb3dlciBvZiB0d28gcmVjdGFuZ2xlXG4gICAgICpcbiAgICAgKiBAcGFyYW0gd2lkdGgge251bWJlcn1cbiAgICAgKiBAcGFyYW0gaGVpZ2h0IHtudW1iZXJ9XG4gICAgICogQHJldHVybiB7Ym9vbGVhbn1cbiAgICAgKi9cbiAgICBpc1Bvd2VyT2ZUd286IGZ1bmN0aW9uICh3aWR0aCwgaGVpZ2h0KVxuICAgIHtcbiAgICAgICAgcmV0dXJuICh3aWR0aCA+IDAgJiYgKHdpZHRoICYgKHdpZHRoIC0gMSkpID09PSAwICYmIGhlaWdodCA+IDAgJiYgKGhlaWdodCAmIChoZWlnaHQgLSAxKSkgPT09IDApO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBnZXQgdGhlIHJlc29sdXRpb24gb2YgYW4gYXNzZXQgYnkgbG9va2luZyBmb3IgdGhlIHByZWZpeFxuICAgICAqIHVzZWQgYnkgc3ByaXRlc2hlZXRzIGFuZCBpbWFnZSB1cmxzXG4gICAgICpcbiAgICAgKiBAcGFyYW0gdXJsIHtzdHJpbmd9IHRoZSBpbWFnZSBwYXRoXG4gICAgICogQHJldHVybiB7bnVtYmVyfVxuICAgICAqL1xuICAgIGdldFJlc29sdXRpb25PZlVybDogZnVuY3Rpb24gKHVybClcbiAgICB7XG4gICAgICAgIHZhciByZXNvbHV0aW9uID0gQ09OU1QuUkVUSU5BX1BSRUZJWC5leGVjKHVybCk7XG5cbiAgICAgICAgaWYgKHJlc29sdXRpb24pXG4gICAgICAgIHtcbiAgICAgICAgICAgcmV0dXJuIHBhcnNlRmxvYXQocmVzb2x1dGlvblsxXSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gMTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogTG9ncyBvdXQgdGhlIHZlcnNpb24gYW5kIHJlbmRlcmVyIGluZm9ybWF0aW9uIGZvciB0aGlzIHJ1bm5pbmcgaW5zdGFuY2Ugb2YgUElYSS5cbiAgICAgKiBJZiB5b3UgZG9uJ3Qgd2FudCB0byBzZWUgdGhpcyBtZXNzYWdlIHlvdSBjYW4gc2V0IGBQSVhJLnV0aWxzLl9zYWlkSGVsbG8gPSB0cnVlO2BcbiAgICAgKiBzbyB0aGUgbGlicmFyeSB0aGlua3MgaXQgYWxyZWFkeSBzYWlkIGl0LiBLZWVwIGluIG1pbmQgdGhhdCBkb2luZyB0aGF0IHdpbGwgZm9yZXZlclxuICAgICAqIG1ha2VzIHlvdSBhIGplcmsgZmFjZS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSB0eXBlIC0gVGhlIHN0cmluZyByZW5kZXJlciB0eXBlIHRvIGxvZy5cbiAgICAgKiBAY29uc3RhbnRcbiAgICAgKiBAc3RhdGljXG4gICAgICovXG4gICAgc2F5SGVsbG86IGZ1bmN0aW9uICh0eXBlKVxuICAgIHtcbiAgICAgICAgaWYgKHV0aWxzLl9zYWlkSGVsbG8pXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChuYXZpZ2F0b3IudXNlckFnZW50LnRvTG93ZXJDYXNlKCkuaW5kZXhPZignY2hyb21lJykgPiAtMSlcbiAgICAgICAge1xuICAgICAgICAgICAgdmFyIGFyZ3MgPSBbXG4gICAgICAgICAgICAgICAgJ1xcbiAlYyAlYyAlYyBQaXhpLmpzICcgKyBDT05TVC5WRVJTSU9OICsgJyAtIOKcsCAnICsgdHlwZSArICcg4pywICAlYyAnICsgJyAlYyAnICsgJyBodHRwOi8vd3d3LnBpeGlqcy5jb20vICAlYyAlYyDimaUlY+KZpSVj4pmlIFxcblxcbicsXG4gICAgICAgICAgICAgICAgJ2JhY2tncm91bmQ6ICNmZjY2YTU7IHBhZGRpbmc6NXB4IDA7JyxcbiAgICAgICAgICAgICAgICAnYmFja2dyb3VuZDogI2ZmNjZhNTsgcGFkZGluZzo1cHggMDsnLFxuICAgICAgICAgICAgICAgICdjb2xvcjogI2ZmNjZhNTsgYmFja2dyb3VuZDogIzAzMDMwNzsgcGFkZGluZzo1cHggMDsnLFxuICAgICAgICAgICAgICAgICdiYWNrZ3JvdW5kOiAjZmY2NmE1OyBwYWRkaW5nOjVweCAwOycsXG4gICAgICAgICAgICAgICAgJ2JhY2tncm91bmQ6ICNmZmMzZGM7IHBhZGRpbmc6NXB4IDA7JyxcbiAgICAgICAgICAgICAgICAnYmFja2dyb3VuZDogI2ZmNjZhNTsgcGFkZGluZzo1cHggMDsnLFxuICAgICAgICAgICAgICAgICdjb2xvcjogI2ZmMjQyNDsgYmFja2dyb3VuZDogI2ZmZjsgcGFkZGluZzo1cHggMDsnLFxuICAgICAgICAgICAgICAgICdjb2xvcjogI2ZmMjQyNDsgYmFja2dyb3VuZDogI2ZmZjsgcGFkZGluZzo1cHggMDsnLFxuICAgICAgICAgICAgICAgICdjb2xvcjogI2ZmMjQyNDsgYmFja2dyb3VuZDogI2ZmZjsgcGFkZGluZzo1cHggMDsnXG4gICAgICAgICAgICBdO1xuXG4gICAgICAgICAgICB3aW5kb3cuY29uc29sZS5sb2cuYXBwbHkoY29uc29sZSwgYXJncyk7IC8vanNoaW50IGlnbm9yZTpsaW5lXG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAod2luZG93LmNvbnNvbGUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHdpbmRvdy5jb25zb2xlLmxvZygnUGl4aS5qcyAnICsgQ09OU1QuVkVSU0lPTiArICcgLSAnICsgdHlwZSArICcgLSBodHRwOi8vd3d3LnBpeGlqcy5jb20vJyk7IC8vanNoaW50IGlnbm9yZTpsaW5lXG4gICAgICAgIH1cblxuICAgICAgICB1dGlscy5fc2FpZEhlbGxvID0gdHJ1ZTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogSGVscGVyIGZvciBjaGVja2luZyBmb3Igd2ViZ2wgc3VwcG9ydFxuICAgICAqXG4gICAgICogQHJldHVybiB7Ym9vbGVhbn1cbiAgICAgKi9cbiAgICBpc1dlYkdMU3VwcG9ydGVkOiBmdW5jdGlvbiAoKVxuICAgIHtcbiAgICAgICAgdmFyIGNvbnRleHRPcHRpb25zID0geyBzdGVuY2lsOiB0cnVlIH07XG4gICAgICAgIHRyeVxuICAgICAgICB7XG4gICAgICAgICAgICBpZiAoIXdpbmRvdy5XZWJHTFJlbmRlcmluZ0NvbnRleHQpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB2YXIgY2FudmFzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnY2FudmFzJyksXG4gICAgICAgICAgICAgICAgZ2wgPSBjYW52YXMuZ2V0Q29udGV4dCgnd2ViZ2wnLCBjb250ZXh0T3B0aW9ucykgfHwgY2FudmFzLmdldENvbnRleHQoJ2V4cGVyaW1lbnRhbC13ZWJnbCcsIGNvbnRleHRPcHRpb25zKTtcblxuICAgICAgICAgICAgcmV0dXJuICEhKGdsICYmIGdsLmdldENvbnRleHRBdHRyaWJ1dGVzKCkuc3RlbmNpbCk7XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHNpZ24gb2YgbnVtYmVyXG4gICAgICpcbiAgICAgKiBAcGFyYW0gbiB7bnVtYmVyfVxuICAgICAqIEByZXR1cm5zIHtudW1iZXJ9IDAgaWYgbiBpcyAwLCAtMSBpZiBuIGlzIG5lZ2F0aXZlLCAxIGlmIG4gaSBwb3NpdGl2ZVxuICAgICAqL1xuICAgIHNpZ246IGZ1bmN0aW9uIChuKVxuICAgIHtcbiAgICAgICAgcmV0dXJuIG4gPyAobiA8IDAgPyAtMSA6IDEpIDogMDtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogcmVtb3ZlSXRlbXNcbiAgICAgKlxuICAgICAqIEBwYXJhbSB7YXJyYXl9IGFyciBUaGUgdGFyZ2V0IGFycmF5XG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHN0YXJ0SWR4IFRoZSBpbmRleCB0byBiZWdpbiByZW1vdmluZyBmcm9tIChpbmNsdXNpdmUpXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHJlbW92ZUNvdW50IEhvdyBtYW55IGl0ZW1zIHRvIHJlbW92ZVxuICAgICAqL1xuICAgIHJlbW92ZUl0ZW1zOiBmdW5jdGlvbiAoYXJyLCBzdGFydElkeCwgcmVtb3ZlQ291bnQpXG4gICAge1xuICAgICAgICB2YXIgbGVuZ3RoID0gYXJyLmxlbmd0aDtcblxuICAgICAgICBpZiAoc3RhcnRJZHggPj0gbGVuZ3RoIHx8IHJlbW92ZUNvdW50ID09PSAwKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICByZW1vdmVDb3VudCA9IChzdGFydElkeCtyZW1vdmVDb3VudCA+IGxlbmd0aCA/IGxlbmd0aC1zdGFydElkeCA6IHJlbW92ZUNvdW50KTtcbiAgICAgICAgZm9yICh2YXIgaSA9IHN0YXJ0SWR4LCBsZW4gPSBsZW5ndGgtcmVtb3ZlQ291bnQ7IGkgPCBsZW47ICsraSlcbiAgICAgICAge1xuICAgICAgICAgICAgYXJyW2ldID0gYXJyW2kgKyByZW1vdmVDb3VudF07XG4gICAgICAgIH1cblxuICAgICAgICBhcnIubGVuZ3RoID0gbGVuO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBAdG9kbyBEZXNjcmliZSBwcm9wZXJ0eSB1c2FnZVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgVGV4dHVyZUNhY2hlOiB7fSxcblxuICAgIC8qKlxuICAgICAqIEB0b2RvIERlc2NyaWJlIHByb3BlcnR5IHVzYWdlXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICBCYXNlVGV4dHVyZUNhY2hlOiB7fVxufTtcbiIsIi8qKlxuICogTWl4aW5zIGZ1bmN0aW9uYWxpdHkgdG8gbWFrZSBhbiBvYmplY3QgaGF2ZSBcInBsdWdpbnNcIi5cbiAqXG4gKiBAbWl4aW5cbiAqIEBtZW1iZXJvZiBQSVhJLnV0aWxzXG4gKiBAcGFyYW0gb2JqIHtvYmplY3R9IFRoZSBvYmplY3QgdG8gbWl4IGludG8uXG4gKiBAZXhhbXBsZVxuICogICAgICBmdW5jdGlvbiBNeU9iamVjdCgpIHt9XG4gKlxuICogICAgICBwbHVnaW5UYXJnZXQubWl4aW4oTXlPYmplY3QpO1xuICovXG5mdW5jdGlvbiBwbHVnaW5UYXJnZXQob2JqKVxue1xuICAgIG9iai5fX3BsdWdpbnMgPSB7fTtcblxuICAgIC8qKlxuICAgICAqIEFkZHMgYSBwbHVnaW4gdG8gYW4gb2JqZWN0XG4gICAgICpcbiAgICAgKiBAcGFyYW0gcGx1Z2luTmFtZSB7c3RyaW5nfSBUaGUgZXZlbnRzIHRoYXQgc2hvdWxkIGJlIGxpc3RlZC5cbiAgICAgKiBAcGFyYW0gY3RvciB7RnVuY3Rpb259IFRoZSBjb25zdHJ1Y3RvciBmdW5jdGlvbiBmb3IgdGhlIHBsdWdpbi5cbiAgICAgKi9cbiAgICBvYmoucmVnaXN0ZXJQbHVnaW4gPSBmdW5jdGlvbiAocGx1Z2luTmFtZSwgY3RvcilcbiAgICB7XG4gICAgICAgIG9iai5fX3BsdWdpbnNbcGx1Z2luTmFtZV0gPSBjdG9yO1xuICAgIH07XG5cbiAgICAvKipcbiAgICAgKiBJbnN0YW50aWF0ZXMgYWxsIHRoZSBwbHVnaW5zIG9mIHRoaXMgb2JqZWN0XG4gICAgICpcbiAgICAgKi9cbiAgICBvYmoucHJvdG90eXBlLmluaXRQbHVnaW5zID0gZnVuY3Rpb24gKClcbiAgICB7XG4gICAgICAgIHRoaXMucGx1Z2lucyA9IHRoaXMucGx1Z2lucyB8fCB7fTtcblxuICAgICAgICBmb3IgKHZhciBvIGluIG9iai5fX3BsdWdpbnMpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMucGx1Z2luc1tvXSA9IG5ldyAob2JqLl9fcGx1Z2luc1tvXSkodGhpcyk7XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgLyoqXG4gICAgICogUmVtb3ZlcyBhbGwgdGhlIHBsdWdpbnMgb2YgdGhpcyBvYmplY3RcbiAgICAgKlxuICAgICAqL1xuICAgIG9iai5wcm90b3R5cGUuZGVzdHJveVBsdWdpbnMgPSBmdW5jdGlvbiAoKVxuICAgIHtcbiAgICAgICAgZm9yICh2YXIgbyBpbiB0aGlzLnBsdWdpbnMpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMucGx1Z2luc1tvXS5kZXN0cm95KCk7XG4gICAgICAgICAgICB0aGlzLnBsdWdpbnNbb10gPSBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5wbHVnaW5zID0gbnVsbDtcbiAgICB9O1xufVxuXG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICAgIC8qKlxuICAgICAqIE1peGVzIGluIHRoZSBwcm9wZXJ0aWVzIG9mIHRoZSBwbHVnaW5UYXJnZXQgaW50byBhbm90aGVyIG9iamVjdFxuICAgICAqXG4gICAgICogQHBhcmFtIG9iamVjdCB7b2JqZWN0fSBUaGUgb2JqIHRvIG1peCBpbnRvXG4gICAgICovXG4gICAgbWl4aW46IGZ1bmN0aW9uIG1peGluKG9iailcbiAgICB7XG4gICAgICAgIHBsdWdpblRhcmdldChvYmopO1xuICAgIH1cbn07XG4iLCIvKmdsb2JhbCBjb25zb2xlICovXG52YXIgY29yZSA9IHJlcXVpcmUoJy4vY29yZScpLFxuICAgIG1lc2ggPSByZXF1aXJlKCcuL21lc2gnKSxcbiAgICBleHRyYXMgPSByZXF1aXJlKCcuL2V4dHJhcycpLFxuICAgIGZpbHRlcnMgPSByZXF1aXJlKCcuL2ZpbHRlcnMnKTtcblxuLyoqXG4gKiBAY2xhc3NcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBTcHJpdGVCYXRjaFxuICogQG1lbWJlcm9mIFBJWElcbiAqIEBzZWUgUElYSS5QYXJ0aWNsZUNvbnRhaW5lclxuICogQHRocm93cyB7UmVmZXJlbmNlRXJyb3J9IFNwcml0ZUJhdGNoIGRvZXMgbm90IGV4aXN0IGFueSBtb3JlLCBwbGVhc2UgdXNlIHRoZSBuZXcgUGFydGljbGVDb250YWluZXIgaW5zdGVhZC5cbiAqIEBkZXByZWNhdGVkIHNpbmNlIHZlcnNpb24gMy4wLjBcbiAqL1xuY29yZS5TcHJpdGVCYXRjaCA9IGZ1bmN0aW9uKClcbntcbiAgICB0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoJ1Nwcml0ZUJhdGNoIGRvZXMgbm90IGV4aXN0IGFueSBtb3JlLCBwbGVhc2UgdXNlIHRoZSBuZXcgUGFydGljbGVDb250YWluZXIgaW5zdGVhZC4nKTtcbn07XG5cbi8qKlxuICogQGNsYXNzXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgQXNzZXRMb2FkZXJcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAc2VlIFBJWEkubG9hZGVycy5Mb2FkZXJcbiAqIEB0aHJvd3Mge1JlZmVyZW5jZUVycm9yfSBUaGUgbG9hZGVyIHN5c3RlbSB3YXMgb3ZlcmhhdWxlZCBpbiBwaXhpIHYzLCBwbGVhc2Ugc2VlIHRoZSBuZXcgUElYSS5sb2FkZXJzLkxvYWRlciBjbGFzcy5cbiAqIEBkZXByZWNhdGVkIHNpbmNlIHZlcnNpb24gMy4wLjBcbiAqL1xuY29yZS5Bc3NldExvYWRlciA9IGZ1bmN0aW9uKClcbntcbiAgICB0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoJ1RoZSBsb2FkZXIgc3lzdGVtIHdhcyBvdmVyaGF1bGVkIGluIHBpeGkgdjMsIHBsZWFzZSBzZWUgdGhlIG5ldyBQSVhJLmxvYWRlcnMuTG9hZGVyIGNsYXNzLicpO1xufTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoY29yZSwge1xuXG4gICAgLyoqXG4gICAgICogQGNsYXNzXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAbmFtZSBTdGFnZVxuICAgICAqIEBtZW1iZXJvZiBQSVhJXG4gICAgICogQHNlZSBQSVhJLkNvbnRhaW5lclxuICAgICAqIEBkZXByZWNhdGVkIHNpbmNlIHZlcnNpb24gMy4wLjBcbiAgICAgKi9cbiAgICBTdGFnZToge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uKClcbiAgICAgICAge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKCdZb3UgZG8gbm90IG5lZWQgdG8gdXNlIGEgUElYSSBTdGFnZSBhbnkgbW9yZSwgeW91IGNhbiBzaW1wbHkgcmVuZGVyIGFueSBjb250YWluZXIuJyk7XG4gICAgICAgICAgICByZXR1cm4gY29yZS5Db250YWluZXI7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQGNsYXNzXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAbmFtZSBEaXNwbGF5T2JqZWN0Q29udGFpbmVyXG4gICAgICogQG1lbWJlcm9mIFBJWElcbiAgICAgKiBAc2VlIFBJWEkuQ29udGFpbmVyXG4gICAgICogQGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiAzLjAuMFxuICAgICAqL1xuICAgIERpc3BsYXlPYmplY3RDb250YWluZXI6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbigpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignRGlzcGxheU9iamVjdENvbnRhaW5lciBoYXMgYmVlbiBzaG9ydGVuZWQgdG8gQ29udGFpbmVyLCBwbGVhc2UgdXNlIENvbnRhaW5lciBmcm9tIG5vdyBvbi4nKTtcbiAgICAgICAgICAgIHJldHVybiBjb3JlLkNvbnRhaW5lcjtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBAY2xhc3NcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBuYW1lIFN0cmlwXG4gICAgICogQG1lbWJlcm9mIFBJWElcbiAgICAgKiBAc2VlIFBJWEkubWVzaC5NZXNoXG4gICAgICogQGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiAzLjAuMFxuICAgICAqL1xuICAgIFN0cmlwOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24oKVxuICAgICAgICB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ1RoZSBTdHJpcCBjbGFzcyBoYXMgYmVlbiByZW5hbWVkIHRvIE1lc2ggYW5kIG1vdmVkIHRvIG1lc2guTWVzaCwgcGxlYXNlIHVzZSBtZXNoLk1lc2ggZnJvbSBub3cgb24uJyk7XG4gICAgICAgICAgICByZXR1cm4gbWVzaC5NZXNoO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIEBjbGFzc1xuICAgICAqIEBwcml2YXRlXG4gICAgICogQG5hbWUgUm9wZVxuICAgICAqIEBtZW1iZXJvZiBQSVhJXG4gICAgICogQHNlZSBQSVhJLm1lc2guUm9wZVxuICAgICAqIEBkZXByZWNhdGVkIHNpbmNlIHZlcnNpb24gMy4wLjBcbiAgICAgKi9cbiAgICBSb3BlOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24oKVxuICAgICAgICB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ1RoZSBSb3BlIGNsYXNzIGhhcyBiZWVuIG1vdmVkIHRvIG1lc2guUm9wZSwgcGxlYXNlIHVzZSBtZXNoLlJvcGUgZnJvbSBub3cgb24uJyk7XG4gICAgICAgICAgICByZXR1cm4gbWVzaC5Sb3BlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIEBjbGFzc1xuICAgICAqIEBwcml2YXRlXG4gICAgICogQG5hbWUgTW92aWVDbGlwXG4gICAgICogQG1lbWJlcm9mIFBJWElcbiAgICAgKiBAc2VlIFBJWEkuZXh0cmFzLk1vdmllQ2xpcFxuICAgICAqIEBkZXByZWNhdGVkIHNpbmNlIHZlcnNpb24gMy4wLjBcbiAgICAgKi9cbiAgICBNb3ZpZUNsaXA6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbigpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignVGhlIE1vdmllQ2xpcCBjbGFzcyBoYXMgYmVlbiBtb3ZlZCB0byBleHRyYXMuTW92aWVDbGlwLCBwbGVhc2UgdXNlIGV4dHJhcy5Nb3ZpZUNsaXAgZnJvbSBub3cgb24uJyk7XG4gICAgICAgICAgICByZXR1cm4gZXh0cmFzLk1vdmllQ2xpcDtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBAY2xhc3NcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBuYW1lIFRpbGluZ1Nwcml0ZVxuICAgICAqIEBtZW1iZXJvZiBQSVhJXG4gICAgICogQHNlZSBQSVhJLmV4dHJhcy5UaWxpbmdTcHJpdGVcbiAgICAgKiBAZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDMuMC4wXG4gICAgICovXG4gICAgVGlsaW5nU3ByaXRlOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24oKVxuICAgICAgICB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ1RoZSBUaWxpbmdTcHJpdGUgY2xhc3MgaGFzIGJlZW4gbW92ZWQgdG8gZXh0cmFzLlRpbGluZ1Nwcml0ZSwgcGxlYXNlIHVzZSBleHRyYXMuVGlsaW5nU3ByaXRlIGZyb20gbm93IG9uLicpO1xuICAgICAgICAgICAgcmV0dXJuIGV4dHJhcy5UaWxpbmdTcHJpdGU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQGNsYXNzXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAbmFtZSBCaXRtYXBUZXh0XG4gICAgICogQG1lbWJlcm9mIFBJWElcbiAgICAgKiBAc2VlIFBJWEkuZXh0cmFzLkJpdG1hcFRleHRcbiAgICAgKiBAZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDMuMC4wXG4gICAgICovXG4gICAgQml0bWFwVGV4dDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uKClcbiAgICAgICAge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKCdUaGUgQml0bWFwVGV4dCBjbGFzcyBoYXMgYmVlbiBtb3ZlZCB0byBleHRyYXMuQml0bWFwVGV4dCwgcGxlYXNlIHVzZSBleHRyYXMuQml0bWFwVGV4dCBmcm9tIG5vdyBvbi4nKTtcbiAgICAgICAgICAgIHJldHVybiBleHRyYXMuQml0bWFwVGV4dDtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBAY2xhc3NcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBuYW1lIGJsZW5kTW9kZXNcbiAgICAgKiBAbWVtYmVyb2YgUElYSVxuICAgICAqIEBzZWUgUElYSS5CTEVORF9NT0RFU1xuICAgICAqIEBkZXByZWNhdGVkIHNpbmNlIHZlcnNpb24gMy4wLjBcbiAgICAgKi9cbiAgICBibGVuZE1vZGVzOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24oKVxuICAgICAgICB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ1RoZSBibGVuZE1vZGVzIGhhcyBiZWVuIG1vdmVkIHRvIEJMRU5EX01PREVTLCBwbGVhc2UgdXNlIEJMRU5EX01PREVTIGZyb20gbm93IG9uLicpO1xuICAgICAgICAgICAgcmV0dXJuIGNvcmUuQkxFTkRfTU9ERVM7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQGNsYXNzXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAbmFtZSBzY2FsZU1vZGVzXG4gICAgICogQG1lbWJlcm9mIFBJWElcbiAgICAgKiBAc2VlIFBJWEkuU0NBTEVfTU9ERVNcbiAgICAgKiBAZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDMuMC4wXG4gICAgICovXG4gICAgc2NhbGVNb2Rlczoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uKClcbiAgICAgICAge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKCdUaGUgc2NhbGVNb2RlcyBoYXMgYmVlbiBtb3ZlZCB0byBTQ0FMRV9NT0RFUywgcGxlYXNlIHVzZSBTQ0FMRV9NT0RFUyBmcm9tIG5vdyBvbi4nKTtcbiAgICAgICAgICAgIHJldHVybiBjb3JlLlNDQUxFX01PREVTO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIEBjbGFzc1xuICAgICAqIEBwcml2YXRlXG4gICAgICogQG5hbWUgQmFzZVRleHR1cmVDYWNoZVxuICAgICAqIEBtZW1iZXJvZiBQSVhJXG4gICAgICogQHNlZSBQSVhJLnV0aWxzLkJhc2VUZXh0dXJlQ2FjaGVcbiAgICAgKiBAZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDMuMC4wXG4gICAgICovXG4gICAgQmFzZVRleHR1cmVDYWNoZToge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignVGhlIEJhc2VUZXh0dXJlQ2FjaGUgY2xhc3MgaGFzIGJlZW4gbW92ZWQgdG8gdXRpbHMuQmFzZVRleHR1cmVDYWNoZSwgcGxlYXNlIHVzZSB1dGlscy5CYXNlVGV4dHVyZUNhY2hlIGZyb20gbm93IG9uLicpO1xuICAgICAgICAgICAgcmV0dXJuIGNvcmUudXRpbHMuQmFzZVRleHR1cmVDYWNoZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBAY2xhc3NcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBuYW1lIFRleHR1cmVDYWNoZVxuICAgICAqIEBtZW1iZXJvZiBQSVhJXG4gICAgICogQHNlZSBQSVhJLnV0aWxzLlRleHR1cmVDYWNoZVxuICAgICAqIEBkZXByZWNhdGVkIHNpbmNlIHZlcnNpb24gMy4wLjBcbiAgICAgKi9cbiAgICBUZXh0dXJlQ2FjaGU6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ1RoZSBUZXh0dXJlQ2FjaGUgY2xhc3MgaGFzIGJlZW4gbW92ZWQgdG8gdXRpbHMuVGV4dHVyZUNhY2hlLCBwbGVhc2UgdXNlIHV0aWxzLlRleHR1cmVDYWNoZSBmcm9tIG5vdyBvbi4nKTtcbiAgICAgICAgICAgIHJldHVybiBjb3JlLnV0aWxzLlRleHR1cmVDYWNoZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBAbmFtZXNwYWNlXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAbmFtZSBtYXRoXG4gICAgICogQG1lbWJlcm9mIFBJWElcbiAgICAgKiBAc2VlIFBJWElcbiAgICAgKiBAZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDMuMC42XG4gICAgICovXG4gICAgbWF0aDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignVGhlIG1hdGggbmFtZXNwYWNlIGlzIGRlcHJlY2F0ZWQsIHBsZWFzZSBhY2Nlc3MgbWVtYmVycyBhbHJlYWR5IGFjY2Vzc2libGUgb24gUElYSS4nKTtcbiAgICAgICAgICAgIHJldHVybiBjb3JlO1xuICAgICAgICB9XG4gICAgfVxufSk7XG5cbi8qKlxuICogQG1ldGhvZFxuICogQHByaXZhdGVcbiAqIEBuYW1lIFBJWEkuU3ByaXRlI3NldFRleHR1cmVcbiAqIEBzZWUgUElYSS5TcHJpdGUjdGV4dHVyZVxuICogQGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiAzLjAuMFxuICovXG5jb3JlLlNwcml0ZS5wcm90b3R5cGUuc2V0VGV4dHVyZSA9IGZ1bmN0aW9uKHRleHR1cmUpXG57XG4gICAgdGhpcy50ZXh0dXJlID0gdGV4dHVyZTtcbiAgICBjb25zb2xlLndhcm4oJ3NldFRleHR1cmUgaXMgbm93IGRlcHJlY2F0ZWQsIHBsZWFzZSB1c2UgdGhlIHRleHR1cmUgcHJvcGVydHksIGUuZyA6IHNwcml0ZS50ZXh0dXJlID0gdGV4dHVyZTsnKTtcbn07XG5cbi8qKlxuICogQG1ldGhvZFxuICogQG5hbWUgUElYSS5leHRyYXMuQml0bWFwVGV4dCNzZXRUZXh0XG4gKiBAc2VlIFBJWEkuZXh0cmFzLkJpdG1hcFRleHQjdGV4dFxuICogQGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiAzLjAuMFxuICovXG5leHRyYXMuQml0bWFwVGV4dC5wcm90b3R5cGUuc2V0VGV4dCA9IGZ1bmN0aW9uKHRleHQpXG57XG4gICAgdGhpcy50ZXh0ID0gdGV4dDtcbiAgICBjb25zb2xlLndhcm4oJ3NldFRleHQgaXMgbm93IGRlcHJlY2F0ZWQsIHBsZWFzZSB1c2UgdGhlIHRleHQgcHJvcGVydHksIGUuZyA6IG15Qml0bWFwVGV4dC50ZXh0ID0gXFwnbXkgdGV4dFxcJzsnKTtcbn07XG5cbi8qKlxuICogQG1ldGhvZFxuICogQG5hbWUgUElYSS5UZXh0I3NldFRleHRcbiAqIEBzZWUgUElYSS5UZXh0I3RleHRcbiAqIEBkZXByZWNhdGVkIHNpbmNlIHZlcnNpb24gMy4wLjBcbiAqL1xuY29yZS5UZXh0LnByb3RvdHlwZS5zZXRUZXh0ID0gZnVuY3Rpb24odGV4dClcbntcbiAgICB0aGlzLnRleHQgPSB0ZXh0O1xuICAgIGNvbnNvbGUud2Fybignc2V0VGV4dCBpcyBub3cgZGVwcmVjYXRlZCwgcGxlYXNlIHVzZSB0aGUgdGV4dCBwcm9wZXJ0eSwgZS5nIDogbXlUZXh0LnRleHQgPSBcXCdteSB0ZXh0XFwnOycpO1xufTtcblxuLyoqXG4gKiBAbWV0aG9kXG4gKiBAbmFtZSBQSVhJLlRleHQjc2V0U3R5bGVcbiAqIEBzZWUgUElYSS5UZXh0I3N0eWxlXG4gKiBAZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDMuMC4wXG4gKi9cbmNvcmUuVGV4dC5wcm90b3R5cGUuc2V0U3R5bGUgPSBmdW5jdGlvbihzdHlsZSlcbntcbiAgICB0aGlzLnN0eWxlID0gc3R5bGU7XG4gICAgY29uc29sZS53YXJuKCdzZXRTdHlsZSBpcyBub3cgZGVwcmVjYXRlZCwgcGxlYXNlIHVzZSB0aGUgc3R5bGUgcHJvcGVydHksIGUuZyA6IG15VGV4dC5zdHlsZSA9IHN0eWxlOycpO1xufTtcblxuLyoqXG4gKiBAbWV0aG9kXG4gKiBAbmFtZSBQSVhJLlRleHR1cmUjc2V0RnJhbWVcbiAqIEBzZWUgUElYSS5UZXh0dXJlI3NldEZyYW1lXG4gKiBAZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDMuMC4wXG4gKi9cbmNvcmUuVGV4dHVyZS5wcm90b3R5cGUuc2V0RnJhbWUgPSBmdW5jdGlvbihmcmFtZSlcbntcbiAgICB0aGlzLmZyYW1lID0gZnJhbWU7XG4gICAgY29uc29sZS53YXJuKCdzZXRGcmFtZSBpcyBub3cgZGVwcmVjYXRlZCwgcGxlYXNlIHVzZSB0aGUgZnJhbWUgcHJvcGVydHksIGUuZyA6IG15VGV4dHVyZS5mcmFtZSA9IGZyYW1lOycpO1xufTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoZmlsdGVycywge1xuXG4gICAgLyoqXG4gICAgICogQGNsYXNzXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAbmFtZSBQSVhJLmZpbHRlcnMuQWJzdHJhY3RGaWx0ZXJcbiAgICAgKiBAc2VlIFBJWEkuQWJzdHJhY3RGaWx0ZXJcbiAgICAgKiBAZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDMuMC42XG4gICAgICovXG4gICAgQWJzdHJhY3RGaWx0ZXI6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbigpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignZmlsdGVycy5BYnN0cmFjdEZpbHRlciBpcyBhbiB1bmRvY3VtZW50ZWQgYWxpYXMsIHBsZWFzZSB1c2UgQWJzdHJhY3RGaWx0ZXIgZnJvbSBub3cgb24uJyk7XG4gICAgICAgICAgICByZXR1cm4gY29yZS5BYnN0cmFjdEZpbHRlcjtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBAY2xhc3NcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBuYW1lIFBJWEkuZmlsdGVycy5GWEFBRmlsdGVyXG4gICAgICogQHNlZSBQSVhJLkZYQUFGaWx0ZXJcbiAgICAgKiBAZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDMuMC42XG4gICAgICovXG4gICAgRlhBQUZpbHRlcjoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uKClcbiAgICAgICAge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKCdmaWx0ZXJzLkZYQUFGaWx0ZXIgaXMgYW4gdW5kb2N1bWVudGVkIGFsaWFzLCBwbGVhc2UgdXNlIEZYQUFGaWx0ZXIgZnJvbSBub3cgb24uJyk7XG4gICAgICAgICAgICByZXR1cm4gY29yZS5GWEFBRmlsdGVyO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIEBjbGFzc1xuICAgICAqIEBwcml2YXRlXG4gICAgICogQG5hbWUgUElYSS5maWx0ZXJzLlNwcml0ZU1hc2tGaWx0ZXJcbiAgICAgKiBAc2VlIFBJWEkuU3ByaXRlTWFza0ZpbHRlclxuICAgICAqIEBkZXByZWNhdGVkIHNpbmNlIHZlcnNpb24gMy4wLjZcbiAgICAgKi9cbiAgICBTcHJpdGVNYXNrRmlsdGVyOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24oKVxuICAgICAgICB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ2ZpbHRlcnMuU3ByaXRlTWFza0ZpbHRlciBpcyBhbiB1bmRvY3VtZW50ZWQgYWxpYXMsIHBsZWFzZSB1c2UgU3ByaXRlTWFza0ZpbHRlciBmcm9tIG5vdyBvbi4nKTtcbiAgICAgICAgICAgIHJldHVybiBjb3JlLlNwcml0ZU1hc2tGaWx0ZXI7XG4gICAgICAgIH1cbiAgICB9XG59KTtcblxuLyoqXG4gKiBAbWV0aG9kXG4gKiBAbmFtZSBQSVhJLnV0aWxzLnV1aWRcbiAqIEBzZWUgUElYSS51dGlscy51aWRcbiAqIEBkZXByZWNhdGVkIHNpbmNlIHZlcnNpb24gMy4wLjZcbiAqL1xuY29yZS51dGlscy51dWlkID0gZnVuY3Rpb24gKClcbntcbiAgICBjb25zb2xlLndhcm4oJ3V0aWxzLnV1aWQoKSBpcyBkZXByZWNhdGVkLCBwbGVhc2UgdXNlIHV0aWxzLnVpZCgpIGZyb20gbm93IG9uLicpO1xuICAgIHJldHVybiBjb3JlLnV0aWxzLnVpZCgpO1xufTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vY29yZScpO1xuXG4vKipcbiAqIEEgQml0bWFwVGV4dCBvYmplY3Qgd2lsbCBjcmVhdGUgYSBsaW5lIG9yIG11bHRpcGxlIGxpbmVzIG9mIHRleHQgdXNpbmcgYml0bWFwIGZvbnQuIFRvXG4gKiBzcGxpdCBhIGxpbmUgeW91IGNhbiB1c2UgJ1xcbicsICdcXHInIG9yICdcXHJcXG4nIGluIHlvdXIgc3RyaW5nLiBZb3UgY2FuIGdlbmVyYXRlIHRoZSBmbnQgZmlsZXMgdXNpbmc6XG4gKlxuICogQSBCaXRtYXBUZXh0IGNhbiBvbmx5IGJlIGNyZWF0ZWQgd2hlbiB0aGUgZm9udCBpcyBsb2FkZWRcbiAqXG4gKiBgYGBqc1xuICogLy8gaW4gdGhpcyBjYXNlIHRoZSBmb250IGlzIGluIGEgZmlsZSBjYWxsZWQgJ2Rlc3lyZWwuZm50J1xuICogdmFyIGJpdG1hcFRleHQgPSBuZXcgUElYSS5leHRyYXMuQml0bWFwVGV4dChcInRleHQgdXNpbmcgYSBmYW5jeSBmb250IVwiLCB7Zm9udDogXCIzNXB4IERlc3lyZWxcIiwgYWxpZ246IFwicmlnaHRcIn0pO1xuICogYGBgXG4gKlxuICpcbiAqIGh0dHA6Ly93d3cuYW5nZWxjb2RlLmNvbS9wcm9kdWN0cy9ibWZvbnQvIGZvciB3aW5kb3dzIG9yXG4gKiBodHRwOi8vd3d3LmJtZ2x5cGguY29tLyBmb3IgbWFjLlxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5Db250YWluZXJcbiAqIEBtZW1iZXJvZiBQSVhJLmV4dHJhc1xuICogQHBhcmFtIHRleHQge3N0cmluZ30gVGhlIGNvcHkgdGhhdCB5b3Ugd291bGQgbGlrZSB0aGUgdGV4dCB0byBkaXNwbGF5XG4gKiBAcGFyYW0gc3R5bGUge29iamVjdH0gVGhlIHN0eWxlIHBhcmFtZXRlcnNcbiAqIEBwYXJhbSBzdHlsZS5mb250IHtzdHJpbmd8b2JqZWN0fSBUaGUgZm9udCBkZXNjcmlwdG9yIGZvciB0aGUgb2JqZWN0LCBjYW4gYmUgcGFzc2VkIGFzIGEgc3RyaW5nIG9mIGZvcm1cbiAqICAgICAgXCIyNHB4IEZvbnROYW1lXCIgb3IgXCJGb250TmFtZVwiIG9yIGFzIGFuIG9iamVjdCB3aXRoIGV4cGxpY2l0IG5hbWUvc2l6ZSBwcm9wZXJ0aWVzLlxuICogQHBhcmFtIFtzdHlsZS5mb250Lm5hbWVdIHtzdHJpbmd9IFRoZSBiaXRtYXAgZm9udCBpZFxuICogQHBhcmFtIFtzdHlsZS5mb250LnNpemVdIHtudW1iZXJ9IFRoZSBzaXplIG9mIHRoZSBmb250IGluIHBpeGVscywgZS5nLiAyNFxuICogQHBhcmFtIFtzdHlsZS5hbGlnbj0nbGVmdCddIHtzdHJpbmd9IEFsaWdubWVudCBmb3IgbXVsdGlsaW5lIHRleHQgKCdsZWZ0JywgJ2NlbnRlcicgb3IgJ3JpZ2h0JyksIGRvZXMgbm90IGFmZmVjdFxuICogICAgICBzaW5nbGUgbGluZSB0ZXh0XG4gKiBAcGFyYW0gW3N0eWxlLnRpbnQ9MHhGRkZGRkZdIHtudW1iZXJ9IFRoZSB0aW50IGNvbG9yXG4gKi9cbmZ1bmN0aW9uIEJpdG1hcFRleHQodGV4dCwgc3R5bGUpXG57XG4gICAgY29yZS5Db250YWluZXIuY2FsbCh0aGlzKTtcblxuICAgIHN0eWxlID0gc3R5bGUgfHwge307XG5cbiAgICAvKipcbiAgICAgKiBUaGUgd2lkdGggb2YgdGhlIG92ZXJhbGwgdGV4dCwgZGlmZmVyZW50IGZyb20gZm9udFNpemUsXG4gICAgICogd2hpY2ggaXMgZGVmaW5lZCBpbiB0aGUgc3R5bGUgb2JqZWN0XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQHJlYWRPbmx5XG4gICAgICovXG4gICAgdGhpcy50ZXh0V2lkdGggPSAwO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGhlaWdodCBvZiB0aGUgb3ZlcmFsbCB0ZXh0LCBkaWZmZXJlbnQgZnJvbSBmb250U2l6ZSxcbiAgICAgKiB3aGljaCBpcyBkZWZpbmVkIGluIHRoZSBzdHlsZSBvYmplY3RcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAcmVhZE9ubHlcbiAgICAgKi9cbiAgICB0aGlzLnRleHRIZWlnaHQgPSAwO1xuXG4gICAgLyoqXG4gICAgICogUHJpdmF0ZSB0cmFja2VyIGZvciB0aGUgbGV0dGVyIHNwcml0ZSBwb29sLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5TcHJpdGVbXX1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX2dseXBocyA9IFtdO1xuXG4gICAgLyoqXG4gICAgICogUHJpdmF0ZSB0cmFja2VyIGZvciB0aGUgY3VycmVudCBzdHlsZS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge29iamVjdH1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX2ZvbnQgPSB7XG4gICAgICAgIHRpbnQ6IHN0eWxlLnRpbnQgIT09IHVuZGVmaW5lZCA/IHN0eWxlLnRpbnQgOiAweEZGRkZGRixcbiAgICAgICAgYWxpZ246IHN0eWxlLmFsaWduIHx8ICdsZWZ0JyxcbiAgICAgICAgbmFtZTogbnVsbCxcbiAgICAgICAgc2l6ZTogMFxuICAgIH07XG5cbiAgICAvKipcbiAgICAgKiBQcml2YXRlIHRyYWNrZXIgZm9yIHRoZSBjdXJyZW50IGZvbnQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtvYmplY3R9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLmZvbnQgPSBzdHlsZS5mb250OyAvLyBydW4gZm9udCBzZXR0ZXJcblxuICAgIC8qKlxuICAgICAqIFByaXZhdGUgdHJhY2tlciBmb3IgdGhlIGN1cnJlbnQgdGV4dC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge3N0cmluZ31cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX3RleHQgPSB0ZXh0O1xuXG4gICAgLyoqXG4gICAgICogVGhlIG1heCB3aWR0aCBvZiB0aGlzIGJpdG1hcCB0ZXh0IGluIHBpeGVscy4gSWYgdGhlIHRleHQgcHJvdmlkZWQgaXMgbG9uZ2VyIHRoYW4gdGhlIHZhbHVlIHByb3ZpZGVkLCBsaW5lIGJyZWFrcyB3aWxsIGJlIGF1dG9tYXRpY2FsbHkgaW5zZXJ0ZWQgaW4gdGhlIGxhc3Qgd2hpdGVzcGFjZS5cbiAgICAgKiBEaXNhYmxlIGJ5IHNldHRpbmcgdmFsdWUgdG8gMFxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMubWF4V2lkdGggPSAwO1xuXG4gICAgLyoqXG4gICAgICogVGhlIG1heCBsaW5lIGhlaWdodC4gVGhpcyBpcyB1c2VmdWwgd2hlbiB0cnlpbmcgdG8gdXNlIHRoZSB0b3RhbCBoZWlnaHQgb2YgdGhlIFRleHQsIGllOiB3aGVuIHRyeWluZyB0byB2ZXJ0aWNhbGx5IGFsaWduLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMubWF4TGluZUhlaWdodCA9IDA7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgZGlydHkgc3RhdGUgb2YgdGhpcyBvYmplY3QuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqL1xuICAgIHRoaXMuZGlydHkgPSBmYWxzZTtcblxuICAgIHRoaXMudXBkYXRlVGV4dCgpO1xufVxuXG4vLyBjb25zdHJ1Y3RvclxuQml0bWFwVGV4dC5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuQ29udGFpbmVyLnByb3RvdHlwZSk7XG5CaXRtYXBUZXh0LnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IEJpdG1hcFRleHQ7XG5tb2R1bGUuZXhwb3J0cyA9IEJpdG1hcFRleHQ7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKEJpdG1hcFRleHQucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogVGhlIHRpbnQgb2YgdGhlIEJpdG1hcFRleHQgb2JqZWN0XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZXh0cmFzLkJpdG1hcFRleHQjXG4gICAgICovXG4gICAgdGludDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9mb250LnRpbnQ7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLl9mb250LnRpbnQgPSAodHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJyAmJiB2YWx1ZSA+PSAwKSA/IHZhbHVlIDogMHhGRkZGRkY7XG5cbiAgICAgICAgICAgIHRoaXMuZGlydHkgPSB0cnVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFRoZSBhbGlnbm1lbnQgb2YgdGhlIEJpdG1hcFRleHQgb2JqZWN0XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtzdHJpbmd9XG4gICAgICogQGRlZmF1bHQgJ2xlZnQnXG4gICAgICogQG1lbWJlcm9mIFBJWEkuZXh0cmFzLkJpdG1hcFRleHQjXG4gICAgICovXG4gICAgYWxpZ246IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fZm9udC5hbGlnbjtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuX2ZvbnQuYWxpZ24gPSB2YWx1ZSB8fCAnbGVmdCc7XG5cbiAgICAgICAgICAgIHRoaXMuZGlydHkgPSB0cnVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFRoZSBmb250IGRlc2NyaXB0b3Igb2YgdGhlIEJpdG1hcFRleHQgb2JqZWN0XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtGb250fVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmV4dHJhcy5CaXRtYXBUZXh0I1xuICAgICAqL1xuICAgIGZvbnQ6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fZm9udDtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGlmICghdmFsdWUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICAgICAgdmFsdWUgPSB2YWx1ZS5zcGxpdCgnICcpO1xuXG4gICAgICAgICAgICAgICAgdGhpcy5fZm9udC5uYW1lID0gdmFsdWUubGVuZ3RoID09PSAxID8gdmFsdWVbMF0gOiB2YWx1ZS5zbGljZSgxKS5qb2luKCcgJyk7XG4gICAgICAgICAgICAgICAgdGhpcy5fZm9udC5zaXplID0gdmFsdWUubGVuZ3RoID49IDIgPyBwYXJzZUludCh2YWx1ZVswXSwgMTApIDogQml0bWFwVGV4dC5mb250c1t0aGlzLl9mb250Lm5hbWVdLnNpemU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9mb250Lm5hbWUgPSB2YWx1ZS5uYW1lO1xuICAgICAgICAgICAgICAgIHRoaXMuX2ZvbnQuc2l6ZSA9IHR5cGVvZiB2YWx1ZS5zaXplID09PSAnbnVtYmVyJyA/IHZhbHVlLnNpemUgOiBwYXJzZUludCh2YWx1ZS5zaXplLCAxMCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuZGlydHkgPSB0cnVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFRoZSB0ZXh0IG9mIHRoZSBCaXRtYXBUZXh0IG9iamVjdFxuICAgICAqXG4gICAgICogQG1lbWJlciB7c3RyaW5nfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmV4dHJhcy5CaXRtYXBUZXh0I1xuICAgICAqL1xuICAgIHRleHQ6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fdGV4dDtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHZhbHVlID0gdmFsdWUudG9TdHJpbmcoKSB8fCAnICc7XG4gICAgICAgICAgICBpZiAodGhpcy5fdGV4dCA9PT0gdmFsdWUpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5fdGV4dCA9IHZhbHVlO1xuICAgICAgICAgICAgdGhpcy5kaXJ0eSA9IHRydWU7XG4gICAgICAgIH1cbiAgICB9XG59KTtcblxuLyoqXG4gKiBSZW5kZXJzIHRleHQgYW5kIHVwZGF0ZXMgaXQgd2hlbiBuZWVkZWRcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5CaXRtYXBUZXh0LnByb3RvdHlwZS51cGRhdGVUZXh0ID0gZnVuY3Rpb24gKClcbntcbiAgICB2YXIgZGF0YSA9IEJpdG1hcFRleHQuZm9udHNbdGhpcy5fZm9udC5uYW1lXTtcbiAgICB2YXIgcG9zID0gbmV3IGNvcmUuUG9pbnQoKTtcbiAgICB2YXIgcHJldkNoYXJDb2RlID0gbnVsbDtcbiAgICB2YXIgY2hhcnMgPSBbXTtcbiAgICB2YXIgbGFzdExpbmVXaWR0aCA9IDA7XG4gICAgdmFyIG1heExpbmVXaWR0aCA9IDA7XG4gICAgdmFyIGxpbmVXaWR0aHMgPSBbXTtcbiAgICB2YXIgbGluZSA9IDA7XG4gICAgdmFyIHNjYWxlID0gdGhpcy5fZm9udC5zaXplIC8gZGF0YS5zaXplO1xuICAgIHZhciBsYXN0U3BhY2UgPSAtMTtcbiAgICB2YXIgbWF4TGluZUhlaWdodCA9IDA7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMudGV4dC5sZW5ndGg7IGkrKylcbiAgICB7XG4gICAgICAgIHZhciBjaGFyQ29kZSA9IHRoaXMudGV4dC5jaGFyQ29kZUF0KGkpO1xuICAgICAgICBsYXN0U3BhY2UgPSAvKFxccykvLnRlc3QodGhpcy50ZXh0LmNoYXJBdChpKSkgPyBpIDogbGFzdFNwYWNlO1xuXG4gICAgICAgIGlmICgvKD86XFxyXFxufFxccnxcXG4pLy50ZXN0KHRoaXMudGV4dC5jaGFyQXQoaSkpKVxuICAgICAgICB7XG4gICAgICAgICAgICBsaW5lV2lkdGhzLnB1c2gobGFzdExpbmVXaWR0aCk7XG4gICAgICAgICAgICBtYXhMaW5lV2lkdGggPSBNYXRoLm1heChtYXhMaW5lV2lkdGgsIGxhc3RMaW5lV2lkdGgpO1xuICAgICAgICAgICAgbGluZSsrO1xuXG4gICAgICAgICAgICBwb3MueCA9IDA7XG4gICAgICAgICAgICBwb3MueSArPSBkYXRhLmxpbmVIZWlnaHQ7XG4gICAgICAgICAgICBwcmV2Q2hhckNvZGUgPSBudWxsO1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAobGFzdFNwYWNlICE9PSAtMSAmJiB0aGlzLm1heFdpZHRoID4gMCAmJiBwb3MueCAqIHNjYWxlID4gdGhpcy5tYXhXaWR0aClcbiAgICAgICAge1xuICAgICAgICAgICAgY29yZS51dGlscy5yZW1vdmVJdGVtcyhjaGFycywgbGFzdFNwYWNlLCBpIC0gbGFzdFNwYWNlKTtcbiAgICAgICAgICAgIGkgPSBsYXN0U3BhY2U7XG4gICAgICAgICAgICBsYXN0U3BhY2UgPSAtMTtcblxuICAgICAgICAgICAgbGluZVdpZHRocy5wdXNoKGxhc3RMaW5lV2lkdGgpO1xuICAgICAgICAgICAgbWF4TGluZVdpZHRoID0gTWF0aC5tYXgobWF4TGluZVdpZHRoLCBsYXN0TGluZVdpZHRoKTtcbiAgICAgICAgICAgIGxpbmUrKztcblxuICAgICAgICAgICAgcG9zLnggPSAwO1xuICAgICAgICAgICAgcG9zLnkgKz0gZGF0YS5saW5lSGVpZ2h0O1xuICAgICAgICAgICAgcHJldkNoYXJDb2RlID0gbnVsbDtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGNoYXJEYXRhID0gZGF0YS5jaGFyc1tjaGFyQ29kZV07XG5cbiAgICAgICAgaWYgKCFjaGFyRGF0YSlcbiAgICAgICAge1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAocHJldkNoYXJDb2RlICYmIGNoYXJEYXRhLmtlcm5pbmdbcHJldkNoYXJDb2RlXSlcbiAgICAgICAge1xuICAgICAgICAgICAgcG9zLnggKz0gY2hhckRhdGEua2VybmluZ1twcmV2Q2hhckNvZGVdO1xuICAgICAgICB9XG5cbiAgICAgICAgY2hhcnMucHVzaCh7dGV4dHVyZTpjaGFyRGF0YS50ZXh0dXJlLCBsaW5lOiBsaW5lLCBjaGFyQ29kZTogY2hhckNvZGUsIHBvc2l0aW9uOiBuZXcgY29yZS5Qb2ludChwb3MueCArIGNoYXJEYXRhLnhPZmZzZXQsIHBvcy55ICsgY2hhckRhdGEueU9mZnNldCl9KTtcbiAgICAgICAgbGFzdExpbmVXaWR0aCA9IHBvcy54ICsgKGNoYXJEYXRhLnRleHR1cmUud2lkdGggKyBjaGFyRGF0YS54T2Zmc2V0KTtcbiAgICAgICAgcG9zLnggKz0gY2hhckRhdGEueEFkdmFuY2U7XG4gICAgICAgIG1heExpbmVIZWlnaHQgPSBNYXRoLm1heChtYXhMaW5lSGVpZ2h0LCAoY2hhckRhdGEueU9mZnNldCArIGNoYXJEYXRhLnRleHR1cmUuaGVpZ2h0KSk7XG4gICAgICAgIHByZXZDaGFyQ29kZSA9IGNoYXJDb2RlO1xuICAgIH1cblxuICAgIGxpbmVXaWR0aHMucHVzaChsYXN0TGluZVdpZHRoKTtcbiAgICBtYXhMaW5lV2lkdGggPSBNYXRoLm1heChtYXhMaW5lV2lkdGgsIGxhc3RMaW5lV2lkdGgpO1xuXG4gICAgdmFyIGxpbmVBbGlnbk9mZnNldHMgPSBbXTtcblxuICAgIGZvciAoaSA9IDA7IGkgPD0gbGluZTsgaSsrKVxuICAgIHtcbiAgICAgICAgdmFyIGFsaWduT2Zmc2V0ID0gMDtcblxuICAgICAgICBpZiAodGhpcy5fZm9udC5hbGlnbiA9PT0gJ3JpZ2h0JylcbiAgICAgICAge1xuICAgICAgICAgICAgYWxpZ25PZmZzZXQgPSBtYXhMaW5lV2lkdGggLSBsaW5lV2lkdGhzW2ldO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHRoaXMuX2ZvbnQuYWxpZ24gPT09ICdjZW50ZXInKVxuICAgICAgICB7XG4gICAgICAgICAgICBhbGlnbk9mZnNldCA9IChtYXhMaW5lV2lkdGggLSBsaW5lV2lkdGhzW2ldKSAvIDI7XG4gICAgICAgIH1cblxuICAgICAgICBsaW5lQWxpZ25PZmZzZXRzLnB1c2goYWxpZ25PZmZzZXQpO1xuICAgIH1cblxuICAgIHZhciBsZW5DaGFycyA9IGNoYXJzLmxlbmd0aDtcbiAgICB2YXIgdGludCA9IHRoaXMudGludDtcblxuICAgIGZvciAoaSA9IDA7IGkgPCBsZW5DaGFyczsgaSsrKVxuICAgIHtcbiAgICAgICAgdmFyIGMgPSB0aGlzLl9nbHlwaHNbaV07IC8vIGdldCB0aGUgbmV4dCBnbHlwaCBzcHJpdGVcblxuICAgICAgICBpZiAoYylcbiAgICAgICAge1xuICAgICAgICAgICAgYy50ZXh0dXJlID0gY2hhcnNbaV0udGV4dHVyZTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgIHtcbiAgICAgICAgICAgIGMgPSBuZXcgY29yZS5TcHJpdGUoY2hhcnNbaV0udGV4dHVyZSk7XG4gICAgICAgICAgICB0aGlzLl9nbHlwaHMucHVzaChjKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGMucG9zaXRpb24ueCA9IChjaGFyc1tpXS5wb3NpdGlvbi54ICsgbGluZUFsaWduT2Zmc2V0c1tjaGFyc1tpXS5saW5lXSkgKiBzY2FsZTtcbiAgICAgICAgYy5wb3NpdGlvbi55ID0gY2hhcnNbaV0ucG9zaXRpb24ueSAqIHNjYWxlO1xuICAgICAgICBjLnNjYWxlLnggPSBjLnNjYWxlLnkgPSBzY2FsZTtcbiAgICAgICAgYy50aW50ID0gdGludDtcblxuICAgICAgICBpZiAoIWMucGFyZW50KVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmFkZENoaWxkKGMpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gcmVtb3ZlIHVubmVjZXNzYXJ5IGNoaWxkcmVuLlxuICAgIGZvciAoaSA9IGxlbkNoYXJzOyBpIDwgdGhpcy5fZ2x5cGhzLmxlbmd0aDsgKytpKVxuICAgIHtcbiAgICAgICAgdGhpcy5yZW1vdmVDaGlsZCh0aGlzLl9nbHlwaHNbaV0pO1xuICAgIH1cblxuICAgIHRoaXMudGV4dFdpZHRoID0gbWF4TGluZVdpZHRoICogc2NhbGU7XG4gICAgdGhpcy50ZXh0SGVpZ2h0ID0gKHBvcy55ICsgZGF0YS5saW5lSGVpZ2h0KSAqIHNjYWxlO1xuICAgIHRoaXMubWF4TGluZUhlaWdodCA9IG1heExpbmVIZWlnaHQgKiBzY2FsZTtcbn07XG5cbi8qKlxuICogVXBkYXRlcyB0aGUgdHJhbnNmb3JtIG9mIHRoaXMgb2JqZWN0XG4gKlxuICogQHByaXZhdGVcbiAqL1xuQml0bWFwVGV4dC5wcm90b3R5cGUudXBkYXRlVHJhbnNmb3JtID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLnZhbGlkYXRlKCk7XG4gICAgdGhpcy5jb250YWluZXJVcGRhdGVUcmFuc2Zvcm0oKTtcbn07XG5cbi8qKlxuICogVmFsaWRhdGVzIHRleHQgYmVmb3JlIGNhbGxpbmcgcGFyZW50J3MgZ2V0TG9jYWxCb3VuZHNcbiAqXG4gKiBAcmV0dXJuIHtQSVhJLlJlY3RhbmdsZX0gVGhlIHJlY3Rhbmd1bGFyIGJvdW5kaW5nIGFyZWFcbiAqL1xuXG5CaXRtYXBUZXh0LnByb3RvdHlwZS5nZXRMb2NhbEJvdW5kcyA9IGZ1bmN0aW9uKClcbntcbiAgICB0aGlzLnZhbGlkYXRlKCk7XG4gICAgcmV0dXJuIGNvcmUuQ29udGFpbmVyLnByb3RvdHlwZS5nZXRMb2NhbEJvdW5kcy5jYWxsKHRoaXMpO1xufTtcblxuLyoqXG4gKiBVcGRhdGVzIHRleHQgd2hlbiBuZWVkZWRcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5CaXRtYXBUZXh0LnByb3RvdHlwZS52YWxpZGF0ZSA9IGZ1bmN0aW9uKClcbntcbiAgICBpZiAodGhpcy5kaXJ0eSlcbiAgICB7XG4gICAgICAgIHRoaXMudXBkYXRlVGV4dCgpO1xuICAgICAgICB0aGlzLmRpcnR5ID0gZmFsc2U7XG4gICAgfVxufTtcblxuQml0bWFwVGV4dC5mb250cyA9IHt9O1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi9jb3JlJyk7XG5cbi8qKlxuICogQSBNb3ZpZUNsaXAgaXMgYSBzaW1wbGUgd2F5IHRvIGRpc3BsYXkgYW4gYW5pbWF0aW9uIGRlcGljdGVkIGJ5IGEgbGlzdCBvZiB0ZXh0dXJlcy5cbiAqXG4gKiBgYGBqc1xuICogdmFyIGFsaWVuSW1hZ2VzID0gW1wiaW1hZ2Vfc2VxdWVuY2VfMDEucG5nXCIsXCJpbWFnZV9zZXF1ZW5jZV8wMi5wbmdcIixcImltYWdlX3NlcXVlbmNlXzAzLnBuZ1wiLFwiaW1hZ2Vfc2VxdWVuY2VfMDQucG5nXCJdO1xuICogdmFyIHRleHR1cmVBcnJheSA9IFtdO1xuICpcbiAqIGZvciAodmFyIGk9MDsgaSA8IDQ7IGkrKylcbiAqIHtcbiAqICAgICAgdmFyIHRleHR1cmUgPSBQSVhJLlRleHR1cmUuZnJvbUltYWdlKGFsaWVuSW1hZ2VzW2ldKTtcbiAqICAgICAgdGV4dHVyZUFycmF5LnB1c2godGV4dHVyZSk7XG4gKiB9O1xuICpcbiAqIHZhciBtYyA9IG5ldyBQSVhJLk1vdmllQ2xpcCh0ZXh0dXJlQXJyYXkpO1xuICogYGBgXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLlNwcml0ZVxuICogQG1lbWJlcm9mIFBJWEkuZXh0cmFzXG4gKiBAcGFyYW0gdGV4dHVyZXMge1BJWEkuVGV4dHVyZVtdfE9iamVjdFtdfSBhbiBhcnJheSBvZiB7QGxpbmsgUElYSS5UZXh0dXJlfSBvciBmcmFtZSBvYmplY3RzIHRoYXQgbWFrZSB1cCB0aGUgYW5pbWF0aW9uXG4gKiBAcGFyYW0gdGV4dHVyZXNbXS50ZXh0dXJlIHtQSVhJLlRleHR1cmV9IHRoZSB7QGxpbmsgUElYSS5UZXh0dXJlfSBvZiB0aGUgZnJhbWVcbiAqIEBwYXJhbSB0ZXh0dXJlc1tdLnRpbWUge251bWJlcn0gdGhlIGR1cmF0aW9uIG9mIHRoZSBmcmFtZSBpbiBtc1xuICovXG5mdW5jdGlvbiBNb3ZpZUNsaXAodGV4dHVyZXMpXG57XG4gICAgY29yZS5TcHJpdGUuY2FsbCh0aGlzLCB0ZXh0dXJlc1swXSBpbnN0YW5jZW9mIGNvcmUuVGV4dHVyZSA/IHRleHR1cmVzWzBdIDogdGV4dHVyZXNbMF0udGV4dHVyZSk7XG5cbiAgICAvKipcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX3RleHR1cmVzID0gbnVsbDtcblxuICAgIC8qKlxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fZHVyYXRpb25zID0gbnVsbDtcblxuICAgIHRoaXMudGV4dHVyZXMgPSB0ZXh0dXJlcztcblxuICAgIC8qKlxuICAgICAqIFRoZSBzcGVlZCB0aGF0IHRoZSBNb3ZpZUNsaXAgd2lsbCBwbGF5IGF0LiBIaWdoZXIgaXMgZmFzdGVyLCBsb3dlciBpcyBzbG93ZXJcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAxXG4gICAgICovXG4gICAgdGhpcy5hbmltYXRpb25TcGVlZCA9IDE7XG5cbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIG9yIG5vdCB0aGUgbW92aWUgY2xpcCByZXBlYXRzIGFmdGVyIHBsYXlpbmcuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqIEBkZWZhdWx0IHRydWVcbiAgICAgKi9cbiAgICB0aGlzLmxvb3AgPSB0cnVlO1xuXG4gICAgLyoqXG4gICAgICogRnVuY3Rpb24gdG8gY2FsbCB3aGVuIGEgTW92aWVDbGlwIGZpbmlzaGVzIHBsYXlpbmdcbiAgICAgKlxuICAgICAqIEBtZXRob2RcbiAgICAgKiBAbWVtYmVyb2YgUElYSS5leHRyYXMuTW92aWVDbGlwI1xuICAgICAqL1xuICAgIHRoaXMub25Db21wbGV0ZSA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBFbGFwc2VkIHRpbWUgc2luY2UgYW5pbWF0aW9uIGhhcyBiZWVuIHN0YXJ0ZWQsIHVzZWQgaW50ZXJuYWxseSB0byBkaXNwbGF5IGN1cnJlbnQgdGV4dHVyZVxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fY3VycmVudFRpbWUgPSAwO1xuXG4gICAgLyoqXG4gICAgICogSW5kaWNhdGVzIGlmIHRoZSBNb3ZpZUNsaXAgaXMgY3VycmVudGx5IHBsYXlpbmdcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICogQHJlYWRvbmx5XG4gICAgICovXG4gICAgdGhpcy5wbGF5aW5nID0gZmFsc2U7XG59XG5cbi8vIGNvbnN0cnVjdG9yXG5Nb3ZpZUNsaXAucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShjb3JlLlNwcml0ZS5wcm90b3R5cGUpO1xuTW92aWVDbGlwLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IE1vdmllQ2xpcDtcbm1vZHVsZS5leHBvcnRzID0gTW92aWVDbGlwO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhNb3ZpZUNsaXAucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogdG90YWxGcmFtZXMgaXMgdGhlIHRvdGFsIG51bWJlciBvZiBmcmFtZXMgaW4gdGhlIE1vdmllQ2xpcC4gVGhpcyBpcyB0aGUgc2FtZSBhcyBudW1iZXIgb2YgdGV4dHVyZXNcbiAgICAgKiBhc3NpZ25lZCB0byB0aGUgTW92aWVDbGlwLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmV4dHJhcy5Nb3ZpZUNsaXAjXG4gICAgICogQGRlZmF1bHQgMFxuICAgICAqIEByZWFkb25seVxuICAgICAqL1xuICAgIHRvdGFsRnJhbWVzOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24oKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fdGV4dHVyZXMubGVuZ3RoO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFRoZSBhcnJheSBvZiB0ZXh0dXJlcyB1c2VkIGZvciB0aGlzIE1vdmllQ2xpcFxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5UZXh0dXJlW119XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZXh0cmFzLk1vdmllQ2xpcCNcbiAgICAgKlxuICAgICAqL1xuICAgIHRleHR1cmVzOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3RleHR1cmVzO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgaWYodmFsdWVbMF0gaW5zdGFuY2VvZiBjb3JlLlRleHR1cmUpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdGhpcy5fdGV4dHVyZXMgPSB2YWx1ZTtcbiAgICAgICAgICAgICAgICB0aGlzLl9kdXJhdGlvbnMgPSBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHRoaXMuX3RleHR1cmVzID0gW107XG4gICAgICAgICAgICAgICAgdGhpcy5fZHVyYXRpb25zID0gW107XG4gICAgICAgICAgICAgICAgZm9yKHZhciBpID0gMDsgaSA8IHZhbHVlLmxlbmd0aDsgaSsrKVxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fdGV4dHVyZXMucHVzaCh2YWx1ZVtpXS50ZXh0dXJlKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fZHVyYXRpb25zLnB1c2godmFsdWVbaV0udGltZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICogVGhlIE1vdmllQ2xpcHMgY3VycmVudCBmcmFtZSBpbmRleFxuICAgICpcbiAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAqIEBtZW1iZXJvZiBQSVhJLmV4dHJhcy5Nb3ZpZUNsaXAjXG4gICAgKiBAcmVhZG9ubHlcbiAgICAqL1xuICAgIGN1cnJlbnRGcmFtZToge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHZhciBjdXJyZW50RnJhbWUgPSBNYXRoLmZsb29yKHRoaXMuX2N1cnJlbnRUaW1lKSAlIHRoaXMuX3RleHR1cmVzLmxlbmd0aDtcbiAgICAgICAgICAgIGlmIChjdXJyZW50RnJhbWUgPCAwKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGN1cnJlbnRGcmFtZSArPSB0aGlzLl90ZXh0dXJlcy5sZW5ndGg7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gY3VycmVudEZyYW1lO1xuICAgICAgICB9XG4gICAgfVxuXG59KTtcblxuLyoqXG4gKiBTdG9wcyB0aGUgTW92aWVDbGlwXG4gKlxuICovXG5Nb3ZpZUNsaXAucHJvdG90eXBlLnN0b3AgPSBmdW5jdGlvbiAoKVxue1xuICAgIGlmKCF0aGlzLnBsYXlpbmcpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5wbGF5aW5nID0gZmFsc2U7XG4gICAgY29yZS50aWNrZXIuc2hhcmVkLnJlbW92ZSh0aGlzLnVwZGF0ZSwgdGhpcyk7XG59O1xuXG4vKipcbiAqIFBsYXlzIHRoZSBNb3ZpZUNsaXBcbiAqXG4gKi9cbk1vdmllQ2xpcC5wcm90b3R5cGUucGxheSA9IGZ1bmN0aW9uICgpXG57XG4gICAgaWYodGhpcy5wbGF5aW5nKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMucGxheWluZyA9IHRydWU7XG4gICAgY29yZS50aWNrZXIuc2hhcmVkLmFkZCh0aGlzLnVwZGF0ZSwgdGhpcyk7XG59O1xuXG4vKipcbiAqIFN0b3BzIHRoZSBNb3ZpZUNsaXAgYW5kIGdvZXMgdG8gYSBzcGVjaWZpYyBmcmFtZVxuICpcbiAqIEBwYXJhbSBmcmFtZU51bWJlciB7bnVtYmVyfSBmcmFtZSBpbmRleCB0byBzdG9wIGF0XG4gKi9cbk1vdmllQ2xpcC5wcm90b3R5cGUuZ290b0FuZFN0b3AgPSBmdW5jdGlvbiAoZnJhbWVOdW1iZXIpXG57XG4gICAgdGhpcy5zdG9wKCk7XG5cbiAgICB0aGlzLl9jdXJyZW50VGltZSA9IGZyYW1lTnVtYmVyO1xuXG4gICAgdGhpcy5fdGV4dHVyZSA9IHRoaXMuX3RleHR1cmVzW3RoaXMuY3VycmVudEZyYW1lXTtcbn07XG5cbi8qKlxuICogR29lcyB0byBhIHNwZWNpZmljIGZyYW1lIGFuZCBiZWdpbnMgcGxheWluZyB0aGUgTW92aWVDbGlwXG4gKlxuICogQHBhcmFtIGZyYW1lTnVtYmVyIHtudW1iZXJ9IGZyYW1lIGluZGV4IHRvIHN0YXJ0IGF0XG4gKi9cbk1vdmllQ2xpcC5wcm90b3R5cGUuZ290b0FuZFBsYXkgPSBmdW5jdGlvbiAoZnJhbWVOdW1iZXIpXG57XG4gICAgdGhpcy5fY3VycmVudFRpbWUgPSBmcmFtZU51bWJlcjtcblxuICAgIHRoaXMucGxheSgpO1xufTtcblxuLypcbiAqIFVwZGF0ZXMgdGhlIG9iamVjdCB0cmFuc2Zvcm0gZm9yIHJlbmRlcmluZ1xuICogQHByaXZhdGVcbiAqL1xuTW92aWVDbGlwLnByb3RvdHlwZS51cGRhdGUgPSBmdW5jdGlvbiAoZGVsdGFUaW1lKVxue1xuICAgIHZhciBlbGFwc2VkID0gdGhpcy5hbmltYXRpb25TcGVlZCAqIGRlbHRhVGltZTtcblxuICAgIGlmICh0aGlzLl9kdXJhdGlvbnMgIT09IG51bGwpXG4gICAge1xuICAgICAgICB2YXIgbGFnID0gdGhpcy5fY3VycmVudFRpbWUgJSAxICogdGhpcy5fZHVyYXRpb25zW3RoaXMuY3VycmVudEZyYW1lXTtcblxuICAgICAgICBsYWcgKz0gZWxhcHNlZCAvIDYwICogMTAwMDtcblxuICAgICAgICB3aGlsZSAobGFnIDwgMClcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5fY3VycmVudFRpbWUtLTtcbiAgICAgICAgICAgIGxhZyArPSB0aGlzLl9kdXJhdGlvbnNbdGhpcy5jdXJyZW50RnJhbWVdO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIHNpZ24gPSBNYXRoLnNpZ24odGhpcy5hbmltYXRpb25TcGVlZCAqIGRlbHRhVGltZSk7XG4gICAgICAgIHRoaXMuX2N1cnJlbnRUaW1lID0gTWF0aC5mbG9vcih0aGlzLl9jdXJyZW50VGltZSk7XG5cbiAgICAgICAgd2hpbGUgKGxhZyA+PSB0aGlzLl9kdXJhdGlvbnNbdGhpcy5jdXJyZW50RnJhbWVdKVxuICAgICAgICB7XG4gICAgICAgICAgICBsYWcgLT0gdGhpcy5fZHVyYXRpb25zW3RoaXMuY3VycmVudEZyYW1lXSAqIHNpZ247XG4gICAgICAgICAgICB0aGlzLl9jdXJyZW50VGltZSArPSBzaWduO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fY3VycmVudFRpbWUgKz0gbGFnIC8gdGhpcy5fZHVyYXRpb25zW3RoaXMuY3VycmVudEZyYW1lXTtcbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgdGhpcy5fY3VycmVudFRpbWUgKz0gZWxhcHNlZDtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5fY3VycmVudFRpbWUgPCAwICYmICF0aGlzLmxvb3ApXG4gICAge1xuICAgICAgICB0aGlzLmdvdG9BbmRTdG9wKDApO1xuXG4gICAgICAgIGlmICh0aGlzLm9uQ29tcGxldGUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMub25Db21wbGV0ZSgpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGVsc2UgaWYgKHRoaXMuX2N1cnJlbnRUaW1lID49IHRoaXMuX3RleHR1cmVzLmxlbmd0aCAmJiAhdGhpcy5sb29wKVxuICAgIHtcbiAgICAgICAgdGhpcy5nb3RvQW5kU3RvcCh0aGlzLl90ZXh0dXJlcy5sZW5ndGggLSAxKTtcblxuICAgICAgICBpZiAodGhpcy5vbkNvbXBsZXRlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLm9uQ29tcGxldGUoKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICB0aGlzLl90ZXh0dXJlID0gdGhpcy5fdGV4dHVyZXNbdGhpcy5jdXJyZW50RnJhbWVdO1xuICAgIH1cblxufTtcblxuLypcbiAqIFN0b3BzIHRoZSBNb3ZpZUNsaXAgYW5kIGRlc3Ryb3lzIGl0XG4gKlxuICovXG5Nb3ZpZUNsaXAucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoIClcbntcbiAgICB0aGlzLnN0b3AoKTtcbiAgICBjb3JlLlNwcml0ZS5wcm90b3R5cGUuZGVzdHJveS5jYWxsKHRoaXMpO1xufTtcblxuLyoqXG4gKiBBIHNob3J0IGhhbmQgd2F5IG9mIGNyZWF0aW5nIGEgbW92aWVjbGlwIGZyb20gYW4gYXJyYXkgb2YgZnJhbWUgaWRzXG4gKlxuICogQHN0YXRpY1xuICogQHBhcmFtIGZyYW1lcyB7c3RyaW5nW119IHRoZSBhcnJheSBvZiBmcmFtZXMgaWRzIHRoZSBtb3ZpZWNsaXAgd2lsbCB1c2UgYXMgaXRzIHRleHR1cmUgZnJhbWVzXG4gKi9cbk1vdmllQ2xpcC5mcm9tRnJhbWVzID0gZnVuY3Rpb24gKGZyYW1lcylcbntcbiAgICB2YXIgdGV4dHVyZXMgPSBbXTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZnJhbWVzLmxlbmd0aDsgKytpKVxuICAgIHtcbiAgICAgICAgdGV4dHVyZXMucHVzaChuZXcgY29yZS5UZXh0dXJlLmZyb21GcmFtZShmcmFtZXNbaV0pKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IE1vdmllQ2xpcCh0ZXh0dXJlcyk7XG59O1xuXG4vKipcbiAqIEEgc2hvcnQgaGFuZCB3YXkgb2YgY3JlYXRpbmcgYSBtb3ZpZWNsaXAgZnJvbSBhbiBhcnJheSBvZiBpbWFnZSBpZHNcbiAqXG4gKiBAc3RhdGljXG4gKiBAcGFyYW0gaW1hZ2VzIHtzdHJpbmdbXX0gdGhlIGFycmF5IG9mIGltYWdlIHVybHMgdGhlIG1vdmllY2xpcCB3aWxsIHVzZSBhcyBpdHMgdGV4dHVyZSBmcmFtZXNcbiAqL1xuTW92aWVDbGlwLmZyb21JbWFnZXMgPSBmdW5jdGlvbiAoaW1hZ2VzKVxue1xuICAgIHZhciB0ZXh0dXJlcyA9IFtdO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBpbWFnZXMubGVuZ3RoOyArK2kpXG4gICAge1xuICAgICAgICB0ZXh0dXJlcy5wdXNoKG5ldyBjb3JlLlRleHR1cmUuZnJvbUltYWdlKGltYWdlc1tpXSkpO1xuICAgIH1cblxuICAgIHJldHVybiBuZXcgTW92aWVDbGlwKHRleHR1cmVzKTtcbn07IiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi9jb3JlJyksXG4gICAgLy8gYSBzcHJpdGUgdXNlIGRmb3IgcmVuZGVyaW5nIHRleHR1cmVzLi5cbiAgICB0ZW1wUG9pbnQgPSBuZXcgY29yZS5Qb2ludCgpLFxuICAgIENhbnZhc1RpbnRlciA9IHJlcXVpcmUoJy4uL2NvcmUvcmVuZGVyZXJzL2NhbnZhcy91dGlscy9DYW52YXNUaW50ZXInKTtcblxuLyoqXG4gKiBBIHRpbGluZyBzcHJpdGUgaXMgYSBmYXN0IHdheSBvZiByZW5kZXJpbmcgYSB0aWxpbmcgaW1hZ2VcbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuU3ByaXRlXG4gKiBAbWVtYmVyb2YgUElYSS5leHRyYXNcbiAqIEBwYXJhbSB0ZXh0dXJlIHtUZXh0dXJlfSB0aGUgdGV4dHVyZSBvZiB0aGUgdGlsaW5nIHNwcml0ZVxuICogQHBhcmFtIHdpZHRoIHtudW1iZXJ9ICB0aGUgd2lkdGggb2YgdGhlIHRpbGluZyBzcHJpdGVcbiAqIEBwYXJhbSBoZWlnaHQge251bWJlcn0gdGhlIGhlaWdodCBvZiB0aGUgdGlsaW5nIHNwcml0ZVxuICovXG5mdW5jdGlvbiBUaWxpbmdTcHJpdGUodGV4dHVyZSwgd2lkdGgsIGhlaWdodClcbntcbiAgICBjb3JlLlNwcml0ZS5jYWxsKHRoaXMsIHRleHR1cmUpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHNjYWxpbmcgb2YgdGhlIGltYWdlIHRoYXQgaXMgYmVpbmcgdGlsZWRcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuUG9pbnR9XG4gICAgICovXG4gICAgdGhpcy50aWxlU2NhbGUgPSBuZXcgY29yZS5Qb2ludCgxLDEpO1xuXG5cbiAgICAvKipcbiAgICAgKiBUaGUgb2Zmc2V0IHBvc2l0aW9uIG9mIHRoZSBpbWFnZSB0aGF0IGlzIGJlaW5nIHRpbGVkXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlBvaW50fVxuICAgICAqL1xuICAgIHRoaXMudGlsZVBvc2l0aW9uID0gbmV3IGNvcmUuUG9pbnQoMCwwKTtcblxuICAgIC8vLy8vIHByaXZhdGVcblxuICAgIC8qKlxuICAgICAqIFRoZSB3aXRoIG9mIHRoZSB0aWxpbmcgc3ByaXRlXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl93aWR0aCA9IHdpZHRoIHx8IDEwMDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBoZWlnaHQgb2YgdGhlIHRpbGluZyBzcHJpdGVcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX2hlaWdodCA9IGhlaWdodCB8fCAxMDA7XG5cbiAgICAvKipcbiAgICAgKiBBbiBpbnRlcm5hbCBXZWJHTCBVViBjYWNoZS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuVGV4dHVyZVV2c31cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX3V2cyA9IG5ldyBjb3JlLlRleHR1cmVVdnMoKTtcblxuICAgIHRoaXMuX2NhbnZhc1BhdHRlcm4gPSBudWxsO1xuXG4gICAgLy9UT0RPIG1vdmUuLlxuICAgIHRoaXMuc2hhZGVyID0gbmV3IGNvcmUuQWJzdHJhY3RGaWx0ZXIoXG5cbiAgICAgIFtcbiAgICAgICAgJ3ByZWNpc2lvbiBsb3dwIGZsb2F0OycsXG4gICAgICAgICdhdHRyaWJ1dGUgdmVjMiBhVmVydGV4UG9zaXRpb247JyxcbiAgICAgICAgJ2F0dHJpYnV0ZSB2ZWMyIGFUZXh0dXJlQ29vcmQ7JyxcbiAgICAgICAgJ2F0dHJpYnV0ZSB2ZWM0IGFDb2xvcjsnLFxuXG4gICAgICAgICd1bmlmb3JtIG1hdDMgcHJvamVjdGlvbk1hdHJpeDsnLFxuXG4gICAgICAgICd1bmlmb3JtIHZlYzQgdUZyYW1lOycsXG4gICAgICAgICd1bmlmb3JtIHZlYzQgdVRyYW5zZm9ybTsnLFxuXG4gICAgICAgICd2YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDsnLFxuICAgICAgICAndmFyeWluZyB2ZWM0IHZDb2xvcjsnLFxuXG4gICAgICAgICd2b2lkIG1haW4odm9pZCl7JyxcbiAgICAgICAgJyAgIGdsX1Bvc2l0aW9uID0gdmVjNCgocHJvamVjdGlvbk1hdHJpeCAqIHZlYzMoYVZlcnRleFBvc2l0aW9uLCAxLjApKS54eSwgMC4wLCAxLjApOycsXG5cbiAgICAgICAgJyAgIHZlYzIgY29vcmQgPSBhVGV4dHVyZUNvb3JkOycsXG4gICAgICAgICcgICBjb29yZCAtPSB1VHJhbnNmb3JtLnh5OycsXG4gICAgICAgICcgICBjb29yZCAvPSB1VHJhbnNmb3JtLnp3OycsXG4gICAgICAgICcgICB2VGV4dHVyZUNvb3JkID0gY29vcmQ7JyxcblxuICAgICAgICAnICAgdkNvbG9yID0gdmVjNChhQ29sb3IucmdiICogYUNvbG9yLmEsIGFDb2xvci5hKTsnLFxuICAgICAgICAnfSdcbiAgICAgIF0uam9pbignXFxuJyksXG4gICAgICBbXG4gICAgICAgICdwcmVjaXNpb24gbG93cCBmbG9hdDsnLFxuXG4gICAgICAgICd2YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDsnLFxuICAgICAgICAndmFyeWluZyB2ZWM0IHZDb2xvcjsnLFxuXG4gICAgICAgICd1bmlmb3JtIHNhbXBsZXIyRCB1U2FtcGxlcjsnLFxuICAgICAgICAndW5pZm9ybSB2ZWM0IHVGcmFtZTsnLFxuICAgICAgICAndW5pZm9ybSB2ZWMyIHVQaXhlbFNpemU7JyxcblxuICAgICAgICAndm9pZCBtYWluKHZvaWQpeycsXG5cbiAgICAgICAgJyAgIHZlYzIgY29vcmQgPSBtb2QodlRleHR1cmVDb29yZCwgdUZyYW1lLnp3KTsnLFxuICAgICAgICAnICAgY29vcmQgPSBjbGFtcChjb29yZCwgdVBpeGVsU2l6ZSwgdUZyYW1lLnp3IC0gdVBpeGVsU2l6ZSk7JyxcbiAgICAgICAgJyAgIGNvb3JkICs9IHVGcmFtZS54eTsnLFxuXG4gICAgICAgICcgICBnbF9GcmFnQ29sb3IgPSAgdGV4dHVyZTJEKHVTYW1wbGVyLCBjb29yZCkgKiB2Q29sb3IgOycsXG4gICAgICAgICd9J1xuICAgICAgXS5qb2luKCdcXG4nKSxcblxuICAgICAgICAgICAgLy8gc2V0IHRoZSB1bmlmb3Jtc1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHVGcmFtZTogeyB0eXBlOiAnNGZ2JywgdmFsdWU6IFswLDAsMSwxXSB9LFxuICAgICAgICAgICAgICAgIHVUcmFuc2Zvcm06IHsgdHlwZTogJzRmdicsIHZhbHVlOiBbMCwwLDEsMV0gfSxcbiAgICAgICAgICAgICAgICB1UGl4ZWxTaXplIDogeyB0eXBlIDogJzJmdicsIHZhbHVlOiBbMSwgMV19XG4gICAgICAgICAgICB9XG4gICAgICApO1xufVxuXG5UaWxpbmdTcHJpdGUucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShjb3JlLlNwcml0ZS5wcm90b3R5cGUpO1xuVGlsaW5nU3ByaXRlLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFRpbGluZ1Nwcml0ZTtcbm1vZHVsZS5leHBvcnRzID0gVGlsaW5nU3ByaXRlO1xuXG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKFRpbGluZ1Nwcml0ZS5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBUaGUgd2lkdGggb2YgdGhlIHNwcml0ZSwgc2V0dGluZyB0aGlzIHdpbGwgYWN0dWFsbHkgbW9kaWZ5IHRoZSBzY2FsZSB0byBhY2hpZXZlIHRoZSB2YWx1ZSBzZXRcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5leHRyYXMuVGlsaW5nU3ByaXRlI1xuICAgICAqL1xuICAgIHdpZHRoOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3dpZHRoO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5fd2lkdGggPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBUaGUgaGVpZ2h0IG9mIHRoZSBUaWxpbmdTcHJpdGUsIHNldHRpbmcgdGhpcyB3aWxsIGFjdHVhbGx5IG1vZGlmeSB0aGUgc2NhbGUgdG8gYWNoaWV2ZSB0aGUgdmFsdWUgc2V0XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZXh0cmFzLlRpbGluZ1Nwcml0ZSNcbiAgICAgKi9cbiAgICBoZWlnaHQ6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5faGVpZ2h0O1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5faGVpZ2h0ID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG59KTtcblxuVGlsaW5nU3ByaXRlLnByb3RvdHlwZS5fb25UZXh0dXJlVXBkYXRlID0gZnVuY3Rpb24gKClcbntcbiAgICByZXR1cm47XG59O1xuXG5cbi8qKlxuICogUmVuZGVycyB0aGUgb2JqZWN0IHVzaW5nIHRoZSBXZWJHTCByZW5kZXJlclxuICpcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5XZWJHTFJlbmRlcmVyfVxuICogQHByaXZhdGVcbiAqL1xuVGlsaW5nU3ByaXRlLnByb3RvdHlwZS5fcmVuZGVyV2ViR0wgPSBmdW5jdGlvbiAocmVuZGVyZXIpXG57XG4gICAgLy8gdHdlYWsgb3VyIHRleHR1cmUgdGVtcG9yYXJpbHkuLlxuICAgIHZhciB0ZXh0dXJlID0gdGhpcy5fdGV4dHVyZTtcblxuICAgIGlmKCF0ZXh0dXJlIHx8ICF0ZXh0dXJlLl91dnMpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFyIHRlbXBVdnMgPSB0ZXh0dXJlLl91dnMsXG4gICAgICAgIHRlbXBXaWR0aCA9IHRleHR1cmUuX2ZyYW1lLndpZHRoLFxuICAgICAgICB0ZW1wSGVpZ2h0ID0gdGV4dHVyZS5fZnJhbWUuaGVpZ2h0LFxuICAgICAgICB0dyA9IHRleHR1cmUuYmFzZVRleHR1cmUud2lkdGgsXG4gICAgICAgIHRoID0gdGV4dHVyZS5iYXNlVGV4dHVyZS5oZWlnaHQ7XG5cbiAgICB0ZXh0dXJlLl91dnMgPSB0aGlzLl91dnM7XG4gICAgdGV4dHVyZS5fZnJhbWUud2lkdGggPSB0aGlzLndpZHRoO1xuICAgIHRleHR1cmUuX2ZyYW1lLmhlaWdodCA9IHRoaXMuaGVpZ2h0O1xuXG4gICAgdGhpcy5zaGFkZXIudW5pZm9ybXMudVBpeGVsU2l6ZS52YWx1ZVswXSA9IDEuMC90dztcbiAgICB0aGlzLnNoYWRlci51bmlmb3Jtcy51UGl4ZWxTaXplLnZhbHVlWzFdID0gMS4wL3RoO1xuXG4gICAgdGhpcy5zaGFkZXIudW5pZm9ybXMudUZyYW1lLnZhbHVlWzBdID0gdGVtcFV2cy54MDtcbiAgICB0aGlzLnNoYWRlci51bmlmb3Jtcy51RnJhbWUudmFsdWVbMV0gPSB0ZW1wVXZzLnkwO1xuICAgIHRoaXMuc2hhZGVyLnVuaWZvcm1zLnVGcmFtZS52YWx1ZVsyXSA9IHRlbXBVdnMueDEgLSB0ZW1wVXZzLngwO1xuICAgIHRoaXMuc2hhZGVyLnVuaWZvcm1zLnVGcmFtZS52YWx1ZVszXSA9IHRlbXBVdnMueTIgLSB0ZW1wVXZzLnkwO1xuXG4gICAgdGhpcy5zaGFkZXIudW5pZm9ybXMudVRyYW5zZm9ybS52YWx1ZVswXSA9ICh0aGlzLnRpbGVQb3NpdGlvbi54ICUgKHRlbXBXaWR0aCAqIHRoaXMudGlsZVNjYWxlLngpKSAvIHRoaXMuX3dpZHRoO1xuICAgIHRoaXMuc2hhZGVyLnVuaWZvcm1zLnVUcmFuc2Zvcm0udmFsdWVbMV0gPSAodGhpcy50aWxlUG9zaXRpb24ueSAlICh0ZW1wSGVpZ2h0ICogdGhpcy50aWxlU2NhbGUueSkpIC8gdGhpcy5faGVpZ2h0O1xuICAgIHRoaXMuc2hhZGVyLnVuaWZvcm1zLnVUcmFuc2Zvcm0udmFsdWVbMl0gPSAoIHR3IC8gdGhpcy5fd2lkdGggKSAqIHRoaXMudGlsZVNjYWxlLng7XG4gICAgdGhpcy5zaGFkZXIudW5pZm9ybXMudVRyYW5zZm9ybS52YWx1ZVszXSA9ICggdGggLyB0aGlzLl9oZWlnaHQgKSAqIHRoaXMudGlsZVNjYWxlLnk7XG5cbiAgICByZW5kZXJlci5zZXRPYmplY3RSZW5kZXJlcihyZW5kZXJlci5wbHVnaW5zLnNwcml0ZSk7XG4gICAgcmVuZGVyZXIucGx1Z2lucy5zcHJpdGUucmVuZGVyKHRoaXMpO1xuXG4gICAgdGV4dHVyZS5fdXZzID0gdGVtcFV2cztcbiAgICB0ZXh0dXJlLl9mcmFtZS53aWR0aCA9IHRlbXBXaWR0aDtcbiAgICB0ZXh0dXJlLl9mcmFtZS5oZWlnaHQgPSB0ZW1wSGVpZ2h0O1xufTtcblxuLyoqXG4gKiBSZW5kZXJzIHRoZSBvYmplY3QgdXNpbmcgdGhlIENhbnZhcyByZW5kZXJlclxuICpcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5DYW52YXNSZW5kZXJlcn0gYSByZWZlcmVuY2UgdG8gdGhlIGNhbnZhcyByZW5kZXJlclxuICogQHByaXZhdGVcbiAqL1xuVGlsaW5nU3ByaXRlLnByb3RvdHlwZS5fcmVuZGVyQ2FudmFzID0gZnVuY3Rpb24gKHJlbmRlcmVyKVxue1xuICAgIHZhciB0ZXh0dXJlID0gdGhpcy5fdGV4dHVyZTtcblxuICAgIGlmICghdGV4dHVyZS5iYXNlVGV4dHVyZS5oYXNMb2FkZWQpXG4gICAge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHZhciBjb250ZXh0ID0gcmVuZGVyZXIuY29udGV4dCxcbiAgICAgICAgdHJhbnNmb3JtID0gdGhpcy53b3JsZFRyYW5zZm9ybSxcbiAgICAgICAgcmVzb2x1dGlvbiA9IHJlbmRlcmVyLnJlc29sdXRpb24sXG4gICAgICAgIGJhc2VUZXh0dXJlID0gdGV4dHVyZS5iYXNlVGV4dHVyZSxcbiAgICAgICAgbW9kWCA9ICh0aGlzLnRpbGVQb3NpdGlvbi54IC8gdGhpcy50aWxlU2NhbGUueCkgJSB0ZXh0dXJlLl9mcmFtZS53aWR0aCxcbiAgICAgICAgbW9kWSA9ICh0aGlzLnRpbGVQb3NpdGlvbi55IC8gdGhpcy50aWxlU2NhbGUueSkgJSB0ZXh0dXJlLl9mcmFtZS5oZWlnaHQ7XG5cbiAgICAvLyBjcmVhdGUgYSBuaWNlIHNoaW55IHBhdHRlcm4hXG4gICAgLy8gVE9ETyB0aGlzIG5lZWRzIHRvIGJlIHJlZnJlc2hlZCBpZiB0ZXh0dXJlIGNoYW5nZXMuLlxuICAgIGlmKCF0aGlzLl9jYW52YXNQYXR0ZXJuKVxuICAgIHtcbiAgICAgICAgLy8gY3V0IGFuIG9iamVjdCBmcm9tIGEgc3ByaXRlc2hlZXQuLlxuICAgICAgICB2YXIgdGVtcENhbnZhcyA9IG5ldyBjb3JlLkNhbnZhc0J1ZmZlcih0ZXh0dXJlLl9mcmFtZS53aWR0aCwgdGV4dHVyZS5fZnJhbWUuaGVpZ2h0KTtcblxuICAgICAgICAvLyBUaW50IHRoZSB0aWxpbmcgc3ByaXRlXG4gICAgICAgIGlmICh0aGlzLnRpbnQgIT09IDB4RkZGRkZGKVxuICAgICAgICB7XG4gICAgICAgICAgICBpZiAodGhpcy5jYWNoZWRUaW50ICE9PSB0aGlzLnRpbnQpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdGhpcy5jYWNoZWRUaW50ID0gdGhpcy50aW50O1xuXG4gICAgICAgICAgICAgICAgdGhpcy50aW50ZWRUZXh0dXJlID0gQ2FudmFzVGludGVyLmdldFRpbnRlZFRleHR1cmUodGhpcywgdGhpcy50aW50KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRlbXBDYW52YXMuY29udGV4dC5kcmF3SW1hZ2UodGhpcy50aW50ZWRUZXh0dXJlLCAwLCAwKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRlbXBDYW52YXMuY29udGV4dC5kcmF3SW1hZ2UoYmFzZVRleHR1cmUuc291cmNlLCAtdGV4dHVyZS5fZnJhbWUueCwgLXRleHR1cmUuX2ZyYW1lLnkpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX2NhbnZhc1BhdHRlcm4gPSB0ZW1wQ2FudmFzLmNvbnRleHQuY3JlYXRlUGF0dGVybiggdGVtcENhbnZhcy5jYW52YXMsICdyZXBlYXQnICk7XG4gICAgfVxuXG4gICAgLy8gc2V0IGNvbnRleHQgc3RhdGUuLlxuICAgIGNvbnRleHQuZ2xvYmFsQWxwaGEgPSB0aGlzLndvcmxkQWxwaGE7XG4gICAgY29udGV4dC5zZXRUcmFuc2Zvcm0odHJhbnNmb3JtLmEgKiByZXNvbHV0aW9uLFxuICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2Zvcm0uYiAqIHJlc29sdXRpb24sXG4gICAgICAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybS5jICogcmVzb2x1dGlvbixcbiAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtLmQgKiByZXNvbHV0aW9uLFxuICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2Zvcm0udHggKiByZXNvbHV0aW9uLFxuICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2Zvcm0udHkgKiByZXNvbHV0aW9uKTtcblxuICAgIC8vIFRPRE8gLSB0aGlzIHNob3VsZCBiZSByb2xsZWQgaW50byB0aGUgc2V0VHJhbnNmb3JtIGFib3ZlLi5cbiAgICBjb250ZXh0LnNjYWxlKHRoaXMudGlsZVNjYWxlLngsdGhpcy50aWxlU2NhbGUueSk7XG5cbiAgICBjb250ZXh0LnRyYW5zbGF0ZShtb2RYICsgKHRoaXMuYW5jaG9yLnggKiAtdGhpcy5fd2lkdGggKSxcbiAgICAgICAgICAgICAgICAgICAgICBtb2RZICsgKHRoaXMuYW5jaG9yLnkgKiAtdGhpcy5faGVpZ2h0KSk7XG5cbiAgICAvLyBjaGVjayBibGVuZCBtb2RlXG4gICAgdmFyIGNvbXBvc2l0ZU9wZXJhdGlvbiA9IHJlbmRlcmVyLmJsZW5kTW9kZXNbdGhpcy5ibGVuZE1vZGVdO1xuICAgIGlmIChjb21wb3NpdGVPcGVyYXRpb24gIT09IHJlbmRlcmVyLmNvbnRleHQuZ2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uKVxuICAgIHtcbiAgICAgICAgY29udGV4dC5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb24gPSBjb21wb3NpdGVPcGVyYXRpb247XG4gICAgfVxuXG4gICAgLy8gZmlsbCB0aGUgcGF0dGVybiFcbiAgICBjb250ZXh0LmZpbGxTdHlsZSA9IHRoaXMuX2NhbnZhc1BhdHRlcm47XG4gICAgY29udGV4dC5maWxsUmVjdCgtbW9kWCxcbiAgICAgICAgICAgICAgICAgICAgIC1tb2RZLFxuICAgICAgICAgICAgICAgICAgICAgdGhpcy5fd2lkdGggLyB0aGlzLnRpbGVTY2FsZS54LFxuICAgICAgICAgICAgICAgICAgICAgdGhpcy5faGVpZ2h0IC8gdGhpcy50aWxlU2NhbGUueSk7XG5cblxuICAgIC8vVE9ETyAtIHByZXR0eSBzdXJlIHRoaXMgY2FuIGJlIGRlbGV0ZWQuLi5cbiAgICAvL2NvbnRleHQudHJhbnNsYXRlKC10aGlzLnRpbGVQb3NpdGlvbi54ICsgKHRoaXMuYW5jaG9yLnggKiB0aGlzLl93aWR0aCksIC10aGlzLnRpbGVQb3NpdGlvbi55ICsgKHRoaXMuYW5jaG9yLnkgKiB0aGlzLl9oZWlnaHQpKTtcbiAgICAvL2NvbnRleHQuc2NhbGUoMSAvIHRoaXMudGlsZVNjYWxlLngsIDEgLyB0aGlzLnRpbGVTY2FsZS55KTtcbn07XG5cblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBmcmFtaW5nIHJlY3RhbmdsZSBvZiB0aGUgc3ByaXRlIGFzIGEgUmVjdGFuZ2xlIG9iamVjdFxuKlxuICogQHJldHVybiB7UElYSS5SZWN0YW5nbGV9IHRoZSBmcmFtaW5nIHJlY3RhbmdsZVxuICovXG5UaWxpbmdTcHJpdGUucHJvdG90eXBlLmdldEJvdW5kcyA9IGZ1bmN0aW9uICgpXG57XG4gICAgdmFyIHdpZHRoID0gdGhpcy5fd2lkdGg7XG4gICAgdmFyIGhlaWdodCA9IHRoaXMuX2hlaWdodDtcblxuICAgIHZhciB3MCA9IHdpZHRoICogKDEtdGhpcy5hbmNob3IueCk7XG4gICAgdmFyIHcxID0gd2lkdGggKiAtdGhpcy5hbmNob3IueDtcblxuICAgIHZhciBoMCA9IGhlaWdodCAqICgxLXRoaXMuYW5jaG9yLnkpO1xuICAgIHZhciBoMSA9IGhlaWdodCAqIC10aGlzLmFuY2hvci55O1xuXG4gICAgdmFyIHdvcmxkVHJhbnNmb3JtID0gdGhpcy53b3JsZFRyYW5zZm9ybTtcblxuICAgIHZhciBhID0gd29ybGRUcmFuc2Zvcm0uYTtcbiAgICB2YXIgYiA9IHdvcmxkVHJhbnNmb3JtLmI7XG4gICAgdmFyIGMgPSB3b3JsZFRyYW5zZm9ybS5jO1xuICAgIHZhciBkID0gd29ybGRUcmFuc2Zvcm0uZDtcbiAgICB2YXIgdHggPSB3b3JsZFRyYW5zZm9ybS50eDtcbiAgICB2YXIgdHkgPSB3b3JsZFRyYW5zZm9ybS50eTtcblxuICAgIHZhciB4MSA9IGEgKiB3MSArIGMgKiBoMSArIHR4O1xuICAgIHZhciB5MSA9IGQgKiBoMSArIGIgKiB3MSArIHR5O1xuXG4gICAgdmFyIHgyID0gYSAqIHcwICsgYyAqIGgxICsgdHg7XG4gICAgdmFyIHkyID0gZCAqIGgxICsgYiAqIHcwICsgdHk7XG5cbiAgICB2YXIgeDMgPSBhICogdzAgKyBjICogaDAgKyB0eDtcbiAgICB2YXIgeTMgPSBkICogaDAgKyBiICogdzAgKyB0eTtcblxuICAgIHZhciB4NCA9ICBhICogdzEgKyBjICogaDAgKyB0eDtcbiAgICB2YXIgeTQgPSAgZCAqIGgwICsgYiAqIHcxICsgdHk7XG5cbiAgICB2YXIgbWluWCxcbiAgICAgICAgbWF4WCxcbiAgICAgICAgbWluWSxcbiAgICAgICAgbWF4WTtcblxuICAgIG1pblggPSB4MTtcbiAgICBtaW5YID0geDIgPCBtaW5YID8geDIgOiBtaW5YO1xuICAgIG1pblggPSB4MyA8IG1pblggPyB4MyA6IG1pblg7XG4gICAgbWluWCA9IHg0IDwgbWluWCA/IHg0IDogbWluWDtcblxuICAgIG1pblkgPSB5MTtcbiAgICBtaW5ZID0geTIgPCBtaW5ZID8geTIgOiBtaW5ZO1xuICAgIG1pblkgPSB5MyA8IG1pblkgPyB5MyA6IG1pblk7XG4gICAgbWluWSA9IHk0IDwgbWluWSA/IHk0IDogbWluWTtcblxuICAgIG1heFggPSB4MTtcbiAgICBtYXhYID0geDIgPiBtYXhYID8geDIgOiBtYXhYO1xuICAgIG1heFggPSB4MyA+IG1heFggPyB4MyA6IG1heFg7XG4gICAgbWF4WCA9IHg0ID4gbWF4WCA/IHg0IDogbWF4WDtcblxuICAgIG1heFkgPSB5MTtcbiAgICBtYXhZID0geTIgPiBtYXhZID8geTIgOiBtYXhZO1xuICAgIG1heFkgPSB5MyA+IG1heFkgPyB5MyA6IG1heFk7XG4gICAgbWF4WSA9IHk0ID4gbWF4WSA/IHk0IDogbWF4WTtcblxuICAgIHZhciBib3VuZHMgPSB0aGlzLl9ib3VuZHM7XG5cbiAgICBib3VuZHMueCA9IG1pblg7XG4gICAgYm91bmRzLndpZHRoID0gbWF4WCAtIG1pblg7XG5cbiAgICBib3VuZHMueSA9IG1pblk7XG4gICAgYm91bmRzLmhlaWdodCA9IG1heFkgLSBtaW5ZO1xuXG4gICAgLy8gc3RvcmUgYSByZWZlcmVuY2Ugc28gdGhhdCBpZiB0aGlzIGZ1bmN0aW9uIGdldHMgY2FsbGVkIGFnYWluIGluIHRoZSByZW5kZXIgY3ljbGUgd2UgZG8gbm90IGhhdmUgdG8gcmVjYWxjdWxhdGVcbiAgICB0aGlzLl9jdXJyZW50Qm91bmRzID0gYm91bmRzO1xuXG4gICAgcmV0dXJuIGJvdW5kcztcbn07XG5cbi8qKlxuICogQ2hlY2tzIGlmIGEgcG9pbnQgaXMgaW5zaWRlIHRoaXMgdGlsaW5nIHNwcml0ZVxuICogQHBhcmFtIHBvaW50IHtQSVhJLlBvaW50fSB0aGUgcG9pbnQgdG8gY2hlY2tcbiAqL1xuVGlsaW5nU3ByaXRlLnByb3RvdHlwZS5jb250YWluc1BvaW50ID0gZnVuY3Rpb24oIHBvaW50IClcbntcbiAgICB0aGlzLndvcmxkVHJhbnNmb3JtLmFwcGx5SW52ZXJzZShwb2ludCwgIHRlbXBQb2ludCk7XG5cbiAgICB2YXIgd2lkdGggPSB0aGlzLl93aWR0aDtcbiAgICB2YXIgaGVpZ2h0ID0gdGhpcy5faGVpZ2h0O1xuICAgIHZhciB4MSA9IC13aWR0aCAqIHRoaXMuYW5jaG9yLng7XG4gICAgdmFyIHkxO1xuXG4gICAgaWYgKCB0ZW1wUG9pbnQueCA+IHgxICYmIHRlbXBQb2ludC54IDwgeDEgKyB3aWR0aCApXG4gICAge1xuICAgICAgICB5MSA9IC1oZWlnaHQgKiB0aGlzLmFuY2hvci55O1xuXG4gICAgICAgIGlmICggdGVtcFBvaW50LnkgPiB5MSAmJiB0ZW1wUG9pbnQueSA8IHkxICsgaGVpZ2h0IClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2U7XG59O1xuXG4vKipcbiAqIERlc3Ryb3lzIHRoaXMgdGlsaW5nIHNwcml0ZVxuICpcbiAqL1xuVGlsaW5nU3ByaXRlLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKCkge1xuICAgIGNvcmUuU3ByaXRlLnByb3RvdHlwZS5kZXN0cm95LmNhbGwodGhpcyk7XG5cbiAgICB0aGlzLnRpbGVTY2FsZSA9IG51bGw7XG4gICAgdGhpcy5fdGlsZVNjYWxlT2Zmc2V0ID0gbnVsbDtcbiAgICB0aGlzLnRpbGVQb3NpdGlvbiA9IG51bGw7XG5cbiAgICB0aGlzLl91dnMgPSBudWxsO1xufTtcblxuLyoqXG4gKiBIZWxwZXIgZnVuY3Rpb24gdGhhdCBjcmVhdGVzIGEgdGlsaW5nIHNwcml0ZSB0aGF0IHdpbGwgdXNlIGEgdGV4dHVyZSBmcm9tIHRoZSBUZXh0dXJlQ2FjaGUgYmFzZWQgb24gdGhlIGZyYW1lSWRcbiAqIFRoZSBmcmFtZSBpZHMgYXJlIGNyZWF0ZWQgd2hlbiBhIFRleHR1cmUgcGFja2VyIGZpbGUgaGFzIGJlZW4gbG9hZGVkXG4gKlxuICogQHN0YXRpY1xuICogQHBhcmFtIGZyYW1lSWQge3N0cmluZ30gVGhlIGZyYW1lIElkIG9mIHRoZSB0ZXh0dXJlIGluIHRoZSBjYWNoZVxuICogQHJldHVybiB7UElYSS5leHRyYXMuVGlsaW5nU3ByaXRlfSBBIG5ldyBUaWxpbmdTcHJpdGUgdXNpbmcgYSB0ZXh0dXJlIGZyb20gdGhlIHRleHR1cmUgY2FjaGUgbWF0Y2hpbmcgdGhlIGZyYW1lSWRcbiAqIEBwYXJhbSB3aWR0aCB7bnVtYmVyfSAgdGhlIHdpZHRoIG9mIHRoZSB0aWxpbmcgc3ByaXRlXG4gKiBAcGFyYW0gaGVpZ2h0IHtudW1iZXJ9IHRoZSBoZWlnaHQgb2YgdGhlIHRpbGluZyBzcHJpdGVcbiAqL1xuVGlsaW5nU3ByaXRlLmZyb21GcmFtZSA9IGZ1bmN0aW9uIChmcmFtZUlkLHdpZHRoLGhlaWdodClcbntcbiAgICB2YXIgdGV4dHVyZSA9IGNvcmUudXRpbHMuVGV4dHVyZUNhY2hlW2ZyYW1lSWRdO1xuXG4gICAgaWYgKCF0ZXh0dXJlKVxuICAgIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdUaGUgZnJhbWVJZCBcIicgKyBmcmFtZUlkICsgJ1wiIGRvZXMgbm90IGV4aXN0IGluIHRoZSB0ZXh0dXJlIGNhY2hlICcgKyB0aGlzKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IFRpbGluZ1Nwcml0ZSh0ZXh0dXJlLHdpZHRoLGhlaWdodCk7XG59O1xuXG4vKipcbiAqIEhlbHBlciBmdW5jdGlvbiB0aGF0IGNyZWF0ZXMgYSBzcHJpdGUgdGhhdCB3aWxsIGNvbnRhaW4gYSB0ZXh0dXJlIGJhc2VkIG9uIGFuIGltYWdlIHVybFxuICogSWYgdGhlIGltYWdlIGlzIG5vdCBpbiB0aGUgdGV4dHVyZSBjYWNoZSBpdCB3aWxsIGJlIGxvYWRlZFxuICpcbiAqIEBzdGF0aWNcbiAqIEBwYXJhbSBpbWFnZUlkIHtzdHJpbmd9IFRoZSBpbWFnZSB1cmwgb2YgdGhlIHRleHR1cmVcbiAqIEBwYXJhbSB3aWR0aCB7bnVtYmVyfSAgdGhlIHdpZHRoIG9mIHRoZSB0aWxpbmcgc3ByaXRlXG4gKiBAcGFyYW0gaGVpZ2h0IHtudW1iZXJ9IHRoZSBoZWlnaHQgb2YgdGhlIHRpbGluZyBzcHJpdGVcbiAqIEBwYXJhbSBbY3Jvc3NvcmlnaW49KGF1dG8pXSB7Ym9vbGVhbn0gaWYgeW91IHdhbnQgdG8gc3BlY2lmeSB0aGUgY3Jvc3Mtb3JpZ2luIHBhcmFtZXRlclxuICogQHBhcmFtIFtzY2FsZU1vZGU9UElYSS5TQ0FMRV9NT0RFUy5ERUZBVUxUXSB7bnVtYmVyfSBpZiB5b3Ugd2FudCB0byBzcGVjaWZ5IHRoZSBzY2FsZSBtb2RlLCBzZWUge0BsaW5rIFBJWEkuU0NBTEVfTU9ERVN9IGZvciBwb3NzaWJsZSB2YWx1ZXNcbiAqIEByZXR1cm4ge1BJWEkuZXh0cmFzLlRpbGluZ1Nwcml0ZX0gQSBuZXcgVGlsaW5nU3ByaXRlIHVzaW5nIGEgdGV4dHVyZSBmcm9tIHRoZSB0ZXh0dXJlIGNhY2hlIG1hdGNoaW5nIHRoZSBpbWFnZSBpZFxuICovXG5UaWxpbmdTcHJpdGUuZnJvbUltYWdlID0gZnVuY3Rpb24gKGltYWdlSWQsIHdpZHRoLCBoZWlnaHQsIGNyb3Nzb3JpZ2luLCBzY2FsZU1vZGUpXG57XG4gICAgcmV0dXJuIG5ldyBUaWxpbmdTcHJpdGUoY29yZS5UZXh0dXJlLmZyb21JbWFnZShpbWFnZUlkLCBjcm9zc29yaWdpbiwgc2NhbGVNb2RlKSx3aWR0aCxoZWlnaHQpO1xufTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vY29yZScpLFxuICAgIERpc3BsYXlPYmplY3QgPSBjb3JlLkRpc3BsYXlPYmplY3QsXG4gICAgX3RlbXBNYXRyaXggPSBuZXcgY29yZS5NYXRyaXgoKTtcblxuRGlzcGxheU9iamVjdC5wcm90b3R5cGUuX2NhY2hlQXNCaXRtYXAgPSBmYWxzZTtcbkRpc3BsYXlPYmplY3QucHJvdG90eXBlLl9vcmlnaW5hbFJlbmRlcldlYkdMID0gbnVsbDtcbkRpc3BsYXlPYmplY3QucHJvdG90eXBlLl9vcmlnaW5hbFJlbmRlckNhbnZhcyA9IG51bGw7XG5cbkRpc3BsYXlPYmplY3QucHJvdG90eXBlLl9vcmlnaW5hbFVwZGF0ZVRyYW5zZm9ybSA9IG51bGw7XG5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS5fb3JpZ2luYWxIaXRUZXN0ID0gbnVsbDtcbkRpc3BsYXlPYmplY3QucHJvdG90eXBlLl9vcmlnaW5hbERlc3Ryb3kgPSBudWxsO1xuRGlzcGxheU9iamVjdC5wcm90b3R5cGUuX2NhY2hlZFNwcml0ZSA9IG51bGw7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKERpc3BsYXlPYmplY3QucHJvdG90eXBlLCB7XG5cbiAgICAvKipcbiAgICAgKiBTZXQgdGhpcyB0byB0cnVlIGlmIHlvdSB3YW50IHRoaXMgZGlzcGxheSBvYmplY3QgdG8gYmUgY2FjaGVkIGFzIGEgYml0bWFwLlxuICAgICAqIFRoaXMgYmFzaWNhbGx5IHRha2VzIGEgc25hcCBzaG90IG9mIHRoZSBkaXNwbGF5IG9iamVjdCBhcyBpdCBpcyBhdCB0aGF0IG1vbWVudC4gSXQgY2FuIHByb3ZpZGUgYSBwZXJmb3JtYW5jZSBiZW5lZml0IGZvciBjb21wbGV4IHN0YXRpYyBkaXNwbGF5T2JqZWN0cy5cbiAgICAgKiBUbyByZW1vdmUgc2ltcGx5IHNldCB0aGlzIHByb3BlcnR5IHRvICdmYWxzZSdcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICogQG1lbWJlcm9mIFBJWEkuRGlzcGxheU9iamVjdCNcbiAgICAgKi9cbiAgICBjYWNoZUFzQml0bWFwOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2NhY2hlQXNCaXRtYXA7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICBpZiAodGhpcy5fY2FjaGVBc0JpdG1hcCA9PT0gdmFsdWUpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLl9jYWNoZUFzQml0bWFwID0gdmFsdWU7XG5cbiAgICAgICAgICAgIGlmICh2YWx1ZSlcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9vcmlnaW5hbFJlbmRlcldlYkdMID0gdGhpcy5yZW5kZXJXZWJHTDtcbiAgICAgICAgICAgICAgICB0aGlzLl9vcmlnaW5hbFJlbmRlckNhbnZhcyA9IHRoaXMucmVuZGVyQ2FudmFzO1xuXG4gICAgICAgICAgICAgICAgdGhpcy5fb3JpZ2luYWxVcGRhdGVUcmFuc2Zvcm0gPSB0aGlzLnVwZGF0ZVRyYW5zZm9ybTtcbiAgICAgICAgICAgICAgICB0aGlzLl9vcmlnaW5hbEdldEJvdW5kcyA9IHRoaXMuZ2V0Qm91bmRzO1xuXG4gICAgICAgICAgICAgICAgdGhpcy5fb3JpZ2luYWxEZXN0cm95ID0gdGhpcy5kZXN0cm95O1xuXG4gICAgICAgICAgICAgICAgdGhpcy5fb3JpZ2luYWxDb250YWluc1BvaW50ID0gdGhpcy5jb250YWluc1BvaW50O1xuXG4gICAgICAgICAgICAgICAgdGhpcy5yZW5kZXJXZWJHTCA9IHRoaXMuX3JlbmRlckNhY2hlZFdlYkdMO1xuICAgICAgICAgICAgICAgIHRoaXMucmVuZGVyQ2FudmFzID0gdGhpcy5fcmVuZGVyQ2FjaGVkQ2FudmFzO1xuXG4gICAgICAgICAgICAgICAgdGhpcy5kZXN0cm95ID0gdGhpcy5fY2FjaGVBc0JpdG1hcERlc3Ryb3k7XG5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5fY2FjaGVkU3ByaXRlKVxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fZGVzdHJveUNhY2hlZERpc3BsYXlPYmplY3QoKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB0aGlzLnJlbmRlcldlYkdMID0gdGhpcy5fb3JpZ2luYWxSZW5kZXJXZWJHTDtcbiAgICAgICAgICAgICAgICB0aGlzLnJlbmRlckNhbnZhcyA9IHRoaXMuX29yaWdpbmFsUmVuZGVyQ2FudmFzO1xuICAgICAgICAgICAgICAgIHRoaXMuZ2V0Qm91bmRzID0gdGhpcy5fb3JpZ2luYWxHZXRCb3VuZHM7XG5cbiAgICAgICAgICAgICAgICB0aGlzLmRlc3Ryb3kgPSB0aGlzLl9vcmlnaW5hbERlc3Ryb3k7XG5cbiAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZVRyYW5zZm9ybSA9IHRoaXMuX29yaWdpbmFsVXBkYXRlVHJhbnNmb3JtO1xuICAgICAgICAgICAgICAgIHRoaXMuY29udGFpbnNQb2ludCA9IHRoaXMuX29yaWdpbmFsQ29udGFpbnNQb2ludDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn0pO1xuLyoqXG4qIFJlbmRlcnMgYSBjYWNoZWQgdmVyc2lvbiBvZiB0aGUgc3ByaXRlIHdpdGggV2ViR0xcbipcbiogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLldlYkdMUmVuZGVyZXJ9IHRoZSBXZWJHTCByZW5kZXJlclxuKiBAcHJpdmF0ZVxuKi9cbkRpc3BsYXlPYmplY3QucHJvdG90eXBlLl9yZW5kZXJDYWNoZWRXZWJHTCA9IGZ1bmN0aW9uIChyZW5kZXJlcilcbntcbiAgICBpZiAoIXRoaXMudmlzaWJsZSB8fCB0aGlzLndvcmxkQWxwaGEgPD0gMCB8fCAhdGhpcy5yZW5kZXJhYmxlKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuX2luaXRDYWNoZWREaXNwbGF5T2JqZWN0KCByZW5kZXJlciApO1xuXG4gICAgdGhpcy5fY2FjaGVkU3ByaXRlLndvcmxkQWxwaGEgPSB0aGlzLndvcmxkQWxwaGE7XG5cbiAgICByZW5kZXJlci5zZXRPYmplY3RSZW5kZXJlcihyZW5kZXJlci5wbHVnaW5zLnNwcml0ZSk7XG4gICAgcmVuZGVyZXIucGx1Z2lucy5zcHJpdGUucmVuZGVyKCB0aGlzLl9jYWNoZWRTcHJpdGUgKTtcbn07XG5cbi8qKlxuKiBQcmVwYXJlcyB0aGUgV2ViR0wgcmVuZGVyZXIgdG8gY2FjaGUgdGhlIHNwcml0ZVxuKlxuKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcn0gdGhlIFdlYkdMIHJlbmRlcmVyXG4qIEBwcml2YXRlXG4qL1xuRGlzcGxheU9iamVjdC5wcm90b3R5cGUuX2luaXRDYWNoZWREaXNwbGF5T2JqZWN0ID0gZnVuY3Rpb24gKHJlbmRlcmVyKVxue1xuICAgIGlmKHRoaXMuX2NhY2hlZFNwcml0ZSlcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBmaXJzdCB3ZSBmbHVzaCBhbnl0aGluZyBsZWZ0IGluIHRoZSByZW5kZXJlciAob3RoZXJ3aXNlIGl0IHdvdWxkIGdldCByZW5kZXJlZCB0byB0aGUgY2FjaGVkIHRleHR1cmUpXG4gICAgcmVuZGVyZXIuY3VycmVudFJlbmRlcmVyLmZsdXNoKCk7XG4gICAgLy90aGlzLmZpbHRlcnM9IFtdO1xuICAgIC8vIG5leHQgd2UgZmluZCB0aGUgZGltZW5zaW9ucyBvZiB0aGUgdW50cmFuc2Zvcm1lZCBvYmplY3RcbiAgICAvLyB0aGlzIGZ1bmN0aW9uIGFsc28gY2FsbHMgdXBkYXRldHJhbnNmb3JtIG9uIGFsbCBpdHMgY2hpbGRyZW4gYXMgcGFydCBvZiB0aGUgbWVhc3VyaW5nLiBUaGlzIG1lYW5zIHdlIGRvbid0IG5lZWQgdG8gdXBkYXRlIHRoZSB0cmFuc2Zvcm0gYWdhaW4gaW4gdGhpcyBmdW5jdGlvblxuICAgIC8vIFRPRE8gcGFzcyBhbiBvYmplY3QgdG8gY2xvbmUgdG9vPyBzYXZlcyBoYXZpbmcgdG8gY3JlYXRlIGEgbmV3IG9uZSBlYWNoIHRpbWUhXG4gICAgdmFyIGJvdW5kcyA9IHRoaXMuZ2V0TG9jYWxCb3VuZHMoKS5jbG9uZSgpO1xuXG4gICAgLy8gYWRkIHNvbWUgcGFkZGluZyFcbiAgICBpZih0aGlzLl9maWx0ZXJzKVxuICAgIHtcbiAgICAgICAgdmFyIHBhZGRpbmcgPSB0aGlzLl9maWx0ZXJzWzBdLnBhZGRpbmc7XG4gICAgICAgIGJvdW5kcy54IC09IHBhZGRpbmc7XG4gICAgICAgIGJvdW5kcy55IC09IHBhZGRpbmc7XG5cbiAgICAgICAgYm91bmRzLndpZHRoICs9IHBhZGRpbmcgKiAyO1xuICAgICAgICBib3VuZHMuaGVpZ2h0ICs9IHBhZGRpbmcgKiAyO1xuICAgIH1cblxuICAgIC8vIGZvciBub3cgd2UgY2FjaGUgdGhlIGN1cnJlbnQgcmVuZGVyVGFyZ2V0IHRoYXQgdGhlIHdlYkdMIHJlbmRlcmVyIGlzIGN1cnJlbnRseSB1c2luZy5cbiAgICAvLyB0aGlzIGNvdWxkIGJlIG1vcmUgZWxlZ2VudC4uXG4gICAgdmFyIGNhY2hlZFJlbmRlclRhcmdldCA9IHJlbmRlcmVyLmN1cnJlbnRSZW5kZXJUYXJnZXQ7XG4gICAgLy8gV2UgYWxzbyBzdG9yZSB0aGUgZmlsdGVyIHN0YWNrIC0gSSB3aWxsIGRlZmluaXRlbHkgbG9vayB0byBjaGFuZ2UgaG93IHRoaXMgd29ya3MgYSBsaXR0bGUgbGF0ZXIgZG93biB0aGUgbGluZS5cbiAgICB2YXIgc3RhY2sgPSByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLmZpbHRlclN0YWNrO1xuXG4gICAgLy8gdGhpcyByZW5kZXJUZXh0dXJlIHdpbGwgYmUgdXNlZCB0byBzdG9yZSB0aGUgY2FjaGVkIERpc3BsYXlPYmplY3RcbiAgICB2YXIgcmVuZGVyVGV4dHVyZSA9IG5ldyBjb3JlLlJlbmRlclRleHR1cmUocmVuZGVyZXIsIGJvdW5kcy53aWR0aCB8IDAsIGJvdW5kcy5oZWlnaHQgfCAwKTtcblxuICAgIC8vIG5lZWQgdG8gc2V0IC8vXG4gICAgdmFyIG0gPSBfdGVtcE1hdHJpeDtcblxuICAgIG0udHggPSAtYm91bmRzLng7XG4gICAgbS50eSA9IC1ib3VuZHMueTtcblxuXG5cbiAgICAvLyBzZXQgYWxsIHByb3BlcnRpZXMgdG8gdGhlcmUgb3JpZ2luYWwgc28gd2UgY2FuIHJlbmRlciB0byBhIHRleHR1cmVcbiAgICB0aGlzLnJlbmRlcldlYkdMID0gdGhpcy5fb3JpZ2luYWxSZW5kZXJXZWJHTDtcblxuICAgIHJlbmRlclRleHR1cmUucmVuZGVyKHRoaXMsIG0sIHRydWUsIHRydWUpO1xuXG4gICAgLy8gbm93IHJlc3RvcmUgdGhlIHN0YXRlIGJlIHNldHRpbmcgdGhlIG5ldyBwcm9wZXJ0aWVzXG4gICAgcmVuZGVyZXIuc2V0UmVuZGVyVGFyZ2V0KGNhY2hlZFJlbmRlclRhcmdldCk7XG4gICAgcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5maWx0ZXJTdGFjayA9IHN0YWNrO1xuXG4gICAgdGhpcy5yZW5kZXJXZWJHTCAgICAgPSB0aGlzLl9yZW5kZXJDYWNoZWRXZWJHTDtcbiAgICB0aGlzLnVwZGF0ZVRyYW5zZm9ybSA9IHRoaXMuZGlzcGxheU9iamVjdFVwZGF0ZVRyYW5zZm9ybTtcbiAgICB0aGlzLmdldEJvdW5kcyAgICAgICA9IHRoaXMuX2dldENhY2hlZEJvdW5kcztcblxuXG4gICAgLy8gY3JlYXRlIG91ciBjYWNoZWQgc3ByaXRlXG4gICAgdGhpcy5fY2FjaGVkU3ByaXRlID0gbmV3IGNvcmUuU3ByaXRlKHJlbmRlclRleHR1cmUpO1xuICAgIHRoaXMuX2NhY2hlZFNwcml0ZS53b3JsZFRyYW5zZm9ybSA9IHRoaXMud29ybGRUcmFuc2Zvcm07XG4gICAgdGhpcy5fY2FjaGVkU3ByaXRlLmFuY2hvci54ID0gLSggYm91bmRzLnggLyBib3VuZHMud2lkdGggKTtcbiAgICB0aGlzLl9jYWNoZWRTcHJpdGUuYW5jaG9yLnkgPSAtKCBib3VuZHMueSAvIGJvdW5kcy5oZWlnaHQgKTtcblxuICAgIC8vIHJlc3RvcmUgdGhlIHRyYW5zZm9ybSBvZiB0aGUgY2FjaGVkIHNwcml0ZSB0byBhdm9pZCB0aGUgbmFzdHkgZmxpY2tlci4uXG4gICAgdGhpcy51cGRhdGVUcmFuc2Zvcm0oKTtcblxuICAgIC8vIG1hcCB0aGUgaGl0IHRlc3QuLlxuICAgIHRoaXMuY29udGFpbnNQb2ludCA9IHRoaXMuX2NhY2hlZFNwcml0ZS5jb250YWluc1BvaW50LmJpbmQodGhpcy5fY2FjaGVkU3ByaXRlKTtcbn07XG5cbi8qKlxuKiBSZW5kZXJzIGEgY2FjaGVkIHZlcnNpb24gb2YgdGhlIHNwcml0ZSB3aXRoIGNhbnZhc1xuKlxuKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuQ2FudmFzUmVuZGVyZXJ9IHRoZSBDYW52YXMgcmVuZGVyZXJcbiogQHByaXZhdGVcbiovXG5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS5fcmVuZGVyQ2FjaGVkQ2FudmFzID0gZnVuY3Rpb24gKHJlbmRlcmVyKVxue1xuICAgIGlmICghdGhpcy52aXNpYmxlIHx8IHRoaXMud29ybGRBbHBoYSA8PSAwIHx8ICF0aGlzLnJlbmRlcmFibGUpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5faW5pdENhY2hlZERpc3BsYXlPYmplY3RDYW52YXMoIHJlbmRlcmVyICk7XG5cbiAgICB0aGlzLl9jYWNoZWRTcHJpdGUud29ybGRBbHBoYSA9IHRoaXMud29ybGRBbHBoYTtcblxuICAgIHRoaXMuX2NhY2hlZFNwcml0ZS5yZW5kZXJDYW52YXMocmVuZGVyZXIpO1xufTtcblxuLy9UT0RPIHRoaXMgY2FuIGJlIHRoZSBzYW1lIGFzIHRoZSB3ZWJHTCB2ZXJpc29uLi4gd2lsbCBuZWVkIHRvIGRvIGEgbGl0dGxlIHR3ZWFraW5nIGZpcnN0IHRob3VnaC4uXG4vKipcbiogUHJlcGFyZXMgdGhlIENhbnZhcyByZW5kZXJlciB0byBjYWNoZSB0aGUgc3ByaXRlXG4qXG4qIEBwYXJhbSByZW5kZXJlciB7UElYSS5DYW52YXNSZW5kZXJlcn0gdGhlIENhbnZhcyByZW5kZXJlclxuKiBAcHJpdmF0ZVxuKi9cbkRpc3BsYXlPYmplY3QucHJvdG90eXBlLl9pbml0Q2FjaGVkRGlzcGxheU9iamVjdENhbnZhcyA9IGZ1bmN0aW9uIChyZW5kZXJlcilcbntcbiAgICBpZih0aGlzLl9jYWNoZWRTcHJpdGUpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy9nZXQgYm91bmRzIGFjdHVhbGx5IHRyYW5zZm9ybXMgdGhlIG9iamVjdCBmb3IgdXMgYWxyZWFkeSFcbiAgICB2YXIgYm91bmRzID0gdGhpcy5nZXRMb2NhbEJvdW5kcygpO1xuXG4gICAgdmFyIGNhY2hlZFJlbmRlclRhcmdldCA9IHJlbmRlcmVyLmNvbnRleHQ7XG5cbiAgICB2YXIgcmVuZGVyVGV4dHVyZSA9IG5ldyBjb3JlLlJlbmRlclRleHR1cmUocmVuZGVyZXIsIGJvdW5kcy53aWR0aCB8IDAsIGJvdW5kcy5oZWlnaHQgfCAwKTtcblxuICAgIC8vIG5lZWQgdG8gc2V0IC8vXG4gICAgdmFyIG0gPSBfdGVtcE1hdHJpeDtcblxuICAgIG0udHggPSAtYm91bmRzLng7XG4gICAgbS50eSA9IC1ib3VuZHMueTtcblxuICAgIC8vIHNldCBhbGwgcHJvcGVydGllcyB0byB0aGVyZSBvcmlnaW5hbCBzbyB3ZSBjYW4gcmVuZGVyIHRvIGEgdGV4dHVyZVxuICAgIHRoaXMucmVuZGVyQ2FudmFzID0gdGhpcy5fb3JpZ2luYWxSZW5kZXJDYW52YXM7XG5cbiAgICByZW5kZXJUZXh0dXJlLnJlbmRlcih0aGlzLCBtLCB0cnVlKTtcblxuICAgIC8vIG5vdyByZXN0b3JlIHRoZSBzdGF0ZSBiZSBzZXR0aW5nIHRoZSBuZXcgcHJvcGVydGllc1xuICAgIHJlbmRlcmVyLmNvbnRleHQgPSBjYWNoZWRSZW5kZXJUYXJnZXQ7XG5cbiAgICB0aGlzLnJlbmRlckNhbnZhcyA9IHRoaXMuX3JlbmRlckNhY2hlZENhbnZhcztcbiAgICB0aGlzLnVwZGF0ZVRyYW5zZm9ybSA9IHRoaXMuZGlzcGxheU9iamVjdFVwZGF0ZVRyYW5zZm9ybTtcbiAgICB0aGlzLmdldEJvdW5kcyAgPSB0aGlzLl9nZXRDYWNoZWRCb3VuZHM7XG5cblxuICAgIC8vIGNyZWF0ZSBvdXIgY2FjaGVkIHNwcml0ZVxuICAgIHRoaXMuX2NhY2hlZFNwcml0ZSA9IG5ldyBjb3JlLlNwcml0ZShyZW5kZXJUZXh0dXJlKTtcbiAgICB0aGlzLl9jYWNoZWRTcHJpdGUud29ybGRUcmFuc2Zvcm0gPSB0aGlzLndvcmxkVHJhbnNmb3JtO1xuICAgIHRoaXMuX2NhY2hlZFNwcml0ZS5hbmNob3IueCA9IC0oIGJvdW5kcy54IC8gYm91bmRzLndpZHRoICk7XG4gICAgdGhpcy5fY2FjaGVkU3ByaXRlLmFuY2hvci55ID0gLSggYm91bmRzLnkgLyBib3VuZHMuaGVpZ2h0ICk7XG5cbiAgICB0aGlzLnVwZGF0ZVRyYW5zZm9ybSgpO1xuXG4gICAgdGhpcy5jb250YWluc1BvaW50ID0gdGhpcy5fY2FjaGVkU3ByaXRlLmNvbnRhaW5zUG9pbnQuYmluZCh0aGlzLl9jYWNoZWRTcHJpdGUpO1xufTtcblxuLyoqXG4qIENhbGN1bGF0ZXMgdGhlIGJvdW5kcyBvZiB0aGUgY2FjaGVkIHNwcml0ZVxuKlxuKiBAcHJpdmF0ZVxuKi9cbkRpc3BsYXlPYmplY3QucHJvdG90eXBlLl9nZXRDYWNoZWRCb3VuZHMgPSBmdW5jdGlvbiAoKVxue1xuICAgIHRoaXMuX2NhY2hlZFNwcml0ZS5fY3VycmVudEJvdW5kcyA9IG51bGw7XG5cbiAgICByZXR1cm4gdGhpcy5fY2FjaGVkU3ByaXRlLmdldEJvdW5kcygpO1xufTtcblxuLyoqXG4qIERlc3Ryb3lzIHRoZSBjYWNoZWQgc3ByaXRlLlxuKlxuKiBAcHJpdmF0ZVxuKi9cbkRpc3BsYXlPYmplY3QucHJvdG90eXBlLl9kZXN0cm95Q2FjaGVkRGlzcGxheU9iamVjdCA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy5fY2FjaGVkU3ByaXRlLl90ZXh0dXJlLmRlc3Ryb3koKTtcbiAgICB0aGlzLl9jYWNoZWRTcHJpdGUgPSBudWxsO1xufTtcblxuRGlzcGxheU9iamVjdC5wcm90b3R5cGUuX2NhY2hlQXNCaXRtYXBEZXN0cm95ID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLmNhY2hlQXNCaXRtYXAgPSBmYWxzZTtcbiAgICB0aGlzLl9vcmlnaW5hbERlc3Ryb3koKTtcbn07XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uL2NvcmUnKTtcblxuLyoqXG4gKiBUaGUgaW5zdGFuY2UgbmFtZSBvZiB0aGUgb2JqZWN0LlxuICpcbiAqIEBtZW1iZXJvZiBQSVhJLkRpc3BsYXlPYmplY3QjXG4gKiBAbWVtYmVyIHtzdHJpbmd9XG4gKi9cbmNvcmUuRGlzcGxheU9iamVjdC5wcm90b3R5cGUubmFtZSA9IG51bGw7XG5cbi8qKlxuKiBSZXR1cm5zIHRoZSBkaXNwbGF5IG9iamVjdCBpbiB0aGUgY29udGFpbmVyXG4qXG4qIEBtZW1iZXJvZiBQSVhJLkNvbnRhaW5lciNcbiogQHBhcmFtIG5hbWUge3N0cmluZ30gaW5zdGFuY2UgbmFtZVxuKiBAcmV0dXJuIHtQSVhJLkRpc3BsYXlPYmplY3R9XG4qL1xuY29yZS5Db250YWluZXIucHJvdG90eXBlLmdldENoaWxkQnlOYW1lID0gZnVuY3Rpb24gKG5hbWUpXG57XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmNoaWxkcmVuLmxlbmd0aDsgaSsrKVxuICAgIHtcbiAgICAgICAgaWYgKHRoaXMuY2hpbGRyZW5baV0ubmFtZSA9PT0gbmFtZSlcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY2hpbGRyZW5baV07XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG59O1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi9jb3JlJyk7XG5cbi8qKlxuKiBSZXR1cm5zIHRoZSBnbG9iYWwgcG9zaXRpb24gb2YgdGhlIGRpc3BsYXlPYmplY3RcbipcbiogQG1lbWJlcm9mIFBJWEkuRGlzcGxheU9iamVjdCNcbiogQHBhcmFtIHBvaW50IHtQb2ludH0gdGhlIHBvaW50IHRvIHdyaXRlIHRoZSBnbG9iYWwgdmFsdWUgdG8uIElmIG51bGwgYSBuZXcgcG9pbnQgd2lsbCBiZSByZXR1cm5lZFxuKiBAcmV0dXJuIHtQb2ludH1cbiovXG5jb3JlLkRpc3BsYXlPYmplY3QucHJvdG90eXBlLmdldEdsb2JhbFBvc2l0aW9uID0gZnVuY3Rpb24gKHBvaW50KVxue1xuICAgIHBvaW50ID0gcG9pbnQgfHwgbmV3IGNvcmUuUG9pbnQoKTtcblxuICAgIGlmKHRoaXMucGFyZW50KVxuICAgIHtcbiAgICAgICAgdGhpcy5kaXNwbGF5T2JqZWN0VXBkYXRlVHJhbnNmb3JtKCk7XG5cbiAgICAgICAgcG9pbnQueCA9IHRoaXMud29ybGRUcmFuc2Zvcm0udHg7XG4gICAgICAgIHBvaW50LnkgPSB0aGlzLndvcmxkVHJhbnNmb3JtLnR5O1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICBwb2ludC54ID0gdGhpcy5wb3NpdGlvbi54O1xuICAgICAgICBwb2ludC55ID0gdGhpcy5wb3NpdGlvbi55O1xuICAgIH1cblxuICAgIHJldHVybiBwb2ludDtcbn07XG4iLCIvKipcbiAqIEBmaWxlICAgICAgICBNYWluIGV4cG9ydCBvZiB0aGUgUElYSSBleHRyYXMgbGlicmFyeVxuICogQGF1dGhvciAgICAgIE1hdCBHcm92ZXMgPG1hdEBnb29kYm95ZGlnaXRhbC5jb20+XG4gKiBAY29weXJpZ2h0ICAgMjAxMy0yMDE1IEdvb2RCb3lEaWdpdGFsXG4gKiBAbGljZW5zZSAgICAge0BsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9waXhpanMvcGl4aS5qcy9ibG9iL21hc3Rlci9MSUNFTlNFfE1JVCBMaWNlbnNlfVxuICovXG5cbnJlcXVpcmUoJy4vY2FjaGVBc0JpdG1hcCcpO1xucmVxdWlyZSgnLi9nZXRDaGlsZEJ5TmFtZScpO1xucmVxdWlyZSgnLi9nZXRHbG9iYWxQb3NpdGlvbicpO1xuXG4vKipcbiAqIEBuYW1lc3BhY2UgUElYSS5leHRyYXNcbiAqL1xubW9kdWxlLmV4cG9ydHMgPSB7XG4gICAgTW92aWVDbGlwOiAgICAgIHJlcXVpcmUoJy4vTW92aWVDbGlwJyksXG4gICAgVGlsaW5nU3ByaXRlOiAgIHJlcXVpcmUoJy4vVGlsaW5nU3ByaXRlJyksXG4gICAgQml0bWFwVGV4dDogICAgIHJlcXVpcmUoJy4vQml0bWFwVGV4dCcpXG59O1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi8uLi9jb3JlJyk7XG4vLyBAc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9zdWJzdGFjay9icmZzL2lzc3Vlcy8yNVxuXG5cbi8vIFRPRE8gKGNlbmdsZXIpIC0gVGhlIFkgaXMgZmxpcHBlZCBpbiB0aGlzIHNoYWRlciBmb3Igc29tZSByZWFzb24uXG5cbi8qKlxuICogQGF1dGhvciBWaWNvIEB2aWNvY290ZWFcbiAqIG9yaWdpbmFsIHNoYWRlciA6IGh0dHBzOi8vd3d3LnNoYWRlcnRveS5jb20vdmlldy9sc3NHRGogYnkgQG1vdkFYMTNoXG4gKi9cblxuLyoqXG4gKiBBbiBBU0NJSSBmaWx0ZXIuXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLkFic3RyYWN0RmlsdGVyXG4gKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzXG4gKi9cbmZ1bmN0aW9uIEFzY2lpRmlsdGVyKClcbntcbiAgICBjb3JlLkFic3RyYWN0RmlsdGVyLmNhbGwodGhpcyxcbiAgICAgICAgLy8gdmVydGV4IHNoYWRlclxuICAgICAgICBudWxsLFxuICAgICAgICAvLyBmcmFnbWVudCBzaGFkZXJcbiAgICAgICAgXCJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcXG5cXG51bmlmb3JtIHZlYzQgZGltZW5zaW9ucztcXG51bmlmb3JtIGZsb2F0IHBpeGVsU2l6ZTtcXG51bmlmb3JtIHNhbXBsZXIyRCB1U2FtcGxlcjtcXG5cXG5mbG9hdCBjaGFyYWN0ZXIoZmxvYXQgbiwgdmVjMiBwKVxcbntcXG4gICAgcCA9IGZsb29yKHAqdmVjMig0LjAsIC00LjApICsgMi41KTtcXG4gICAgaWYgKGNsYW1wKHAueCwgMC4wLCA0LjApID09IHAueCAmJiBjbGFtcChwLnksIDAuMCwgNC4wKSA9PSBwLnkpXFxuICAgIHtcXG4gICAgICAgIGlmIChpbnQobW9kKG4vZXhwMihwLnggKyA1LjAqcC55KSwgMi4wKSkgPT0gMSkgcmV0dXJuIDEuMDtcXG4gICAgfVxcbiAgICByZXR1cm4gMC4wO1xcbn1cXG5cXG52b2lkIG1haW4oKVxcbntcXG4gICAgdmVjMiB1diA9IGdsX0ZyYWdDb29yZC54eTtcXG5cXG4gICAgdmVjMyBjb2wgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIGZsb29yKCB1diAvIHBpeGVsU2l6ZSApICogcGl4ZWxTaXplIC8gZGltZW5zaW9ucy54eSkucmdiO1xcblxcbiAgICBmbG9hdCBncmF5ID0gKGNvbC5yICsgY29sLmcgKyBjb2wuYikgLyAzLjA7XFxuXFxuICAgIGZsb2F0IG4gPSAgNjU1MzYuMDsgICAgICAgICAgICAgLy8gLlxcbiAgICBpZiAoZ3JheSA+IDAuMikgbiA9IDY1NjAwLjA7ICAgIC8vIDpcXG4gICAgaWYgKGdyYXkgPiAwLjMpIG4gPSAzMzI3NzIuMDsgICAvLyAqXFxuICAgIGlmIChncmF5ID4gMC40KSBuID0gMTUyNTUwODYuMDsgLy8gb1xcbiAgICBpZiAoZ3JheSA+IDAuNSkgbiA9IDIzMzg1MTY0LjA7IC8vICZcXG4gICAgaWYgKGdyYXkgPiAwLjYpIG4gPSAxNTI1MjAxNC4wOyAvLyA4XFxuICAgIGlmIChncmF5ID4gMC43KSBuID0gMTMxOTk0NTIuMDsgLy8gQFxcbiAgICBpZiAoZ3JheSA+IDAuOCkgbiA9IDExNTEyODEwLjA7IC8vICNcXG5cXG4gICAgdmVjMiBwID0gbW9kKCB1diAvICggcGl4ZWxTaXplICogMC41ICksIDIuMCkgLSB2ZWMyKDEuMCk7XFxuICAgIGNvbCA9IGNvbCAqIGNoYXJhY3RlcihuLCBwKTtcXG5cXG4gICAgZ2xfRnJhZ0NvbG9yID0gdmVjNChjb2wsIDEuMCk7XFxufVxcblwiLFxuICAgICAgICAvLyBjdXN0b20gdW5pZm9ybXNcbiAgICAgICAge1xuICAgICAgICAgICAgZGltZW5zaW9uczogeyB0eXBlOiAnNGZ2JywgdmFsdWU6IG5ldyBGbG9hdDMyQXJyYXkoWzAsIDAsIDAsIDBdKSB9LFxuICAgICAgICAgICAgcGl4ZWxTaXplOiAgeyB0eXBlOiAnMWYnLCB2YWx1ZTogOCB9XG4gICAgICAgIH1cbiAgICApO1xufVxuXG5Bc2NpaUZpbHRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuQWJzdHJhY3RGaWx0ZXIucHJvdG90eXBlKTtcbkFzY2lpRmlsdGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IEFzY2lpRmlsdGVyO1xubW9kdWxlLmV4cG9ydHMgPSBBc2NpaUZpbHRlcjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoQXNjaWlGaWx0ZXIucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogVGhlIHBpeGVsIHNpemUgdXNlZCBieSB0aGUgZmlsdGVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuQXNjaWlGaWx0ZXIjXG4gICAgICovXG4gICAgc2l6ZToge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVuaWZvcm1zLnBpeGVsU2l6ZS52YWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudW5pZm9ybXMucGl4ZWxTaXplLnZhbHVlID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG59KTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vLi4vY29yZScpLFxuICAgIEJsdXJYRmlsdGVyID0gcmVxdWlyZSgnLi4vYmx1ci9CbHVyWEZpbHRlcicpLFxuICAgIEJsdXJZRmlsdGVyID0gcmVxdWlyZSgnLi4vYmx1ci9CbHVyWUZpbHRlcicpO1xuXG4vKipcbiAqIFRoZSBCbG9vbUZpbHRlciBhcHBsaWVzIGEgR2F1c3NpYW4gYmx1ciB0byBhbiBvYmplY3QuXG4gKiBUaGUgc3RyZW5ndGggb2YgdGhlIGJsdXIgY2FuIGJlIHNldCBmb3IgeC0gYW5kIHktYXhpcyBzZXBhcmF0ZWx5LlxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5BYnN0cmFjdEZpbHRlclxuICogQG1lbWJlcm9mIFBJWEkuZmlsdGVyc1xuICovXG5mdW5jdGlvbiBCbG9vbUZpbHRlcigpXG57XG4gICAgY29yZS5BYnN0cmFjdEZpbHRlci5jYWxsKHRoaXMpO1xuXG4gICAgdGhpcy5ibHVyWEZpbHRlciA9IG5ldyBCbHVyWEZpbHRlcigpO1xuICAgIHRoaXMuYmx1cllGaWx0ZXIgPSBuZXcgQmx1cllGaWx0ZXIoKTtcblxuICAgIHRoaXMuZGVmYXVsdEZpbHRlciA9IG5ldyBjb3JlLkFic3RyYWN0RmlsdGVyKCk7XG59XG5cbkJsb29tRmlsdGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoY29yZS5BYnN0cmFjdEZpbHRlci5wcm90b3R5cGUpO1xuQmxvb21GaWx0ZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gQmxvb21GaWx0ZXI7XG5tb2R1bGUuZXhwb3J0cyA9IEJsb29tRmlsdGVyO1xuXG5CbG9vbUZpbHRlci5wcm90b3R5cGUuYXBwbHlGaWx0ZXIgPSBmdW5jdGlvbiAocmVuZGVyZXIsIGlucHV0LCBvdXRwdXQpXG57XG4gICAgdmFyIHJlbmRlclRhcmdldCA9IHJlbmRlcmVyLmZpbHRlck1hbmFnZXIuZ2V0UmVuZGVyVGFyZ2V0KHRydWUpO1xuXG4gICAgLy9UT0RPIC0gY29weVRleFN1YkltYWdlMkQgY291bGQgYmUgdXNlZCBoZXJlP1xuICAgIHRoaXMuZGVmYXVsdEZpbHRlci5hcHBseUZpbHRlcihyZW5kZXJlciwgaW5wdXQsIG91dHB1dCk7XG5cbiAgICB0aGlzLmJsdXJYRmlsdGVyLmFwcGx5RmlsdGVyKHJlbmRlcmVyLCBpbnB1dCwgcmVuZGVyVGFyZ2V0KTtcblxuICAgIHJlbmRlcmVyLmJsZW5kTW9kZU1hbmFnZXIuc2V0QmxlbmRNb2RlKGNvcmUuQkxFTkRfTU9ERVMuU0NSRUVOKTtcblxuICAgIHRoaXMuYmx1cllGaWx0ZXIuYXBwbHlGaWx0ZXIocmVuZGVyZXIsIHJlbmRlclRhcmdldCwgb3V0cHV0KTtcblxuICAgIHJlbmRlcmVyLmJsZW5kTW9kZU1hbmFnZXIuc2V0QmxlbmRNb2RlKGNvcmUuQkxFTkRfTU9ERVMuTk9STUFMKTtcblxuICAgIHJlbmRlcmVyLmZpbHRlck1hbmFnZXIucmV0dXJuUmVuZGVyVGFyZ2V0KHJlbmRlclRhcmdldCk7XG59O1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhCbG9vbUZpbHRlci5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBzdHJlbmd0aCBvZiBib3RoIHRoZSBibHVyWCBhbmQgYmx1clkgcHJvcGVydGllcyBzaW11bHRhbmVvdXNseVxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJPZiBQSVhJLmZpbHRlcnMuQmxvb21GaWx0ZXIjXG4gICAgICogQGRlZmF1bHQgMlxuICAgICAqL1xuICAgIGJsdXI6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5ibHVyWEZpbHRlci5ibHVyO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5ibHVyWEZpbHRlci5ibHVyID0gdGhpcy5ibHVyWUZpbHRlci5ibHVyID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgc3RyZW5ndGggb2YgdGhlIGJsdXJYIHByb3BlcnR5XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlck9mIFBJWEkuZmlsdGVycy5CbG9vbUZpbHRlciNcbiAgICAgKiBAZGVmYXVsdCAyXG4gICAgICovXG4gICAgYmx1clg6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5ibHVyWEZpbHRlci5ibHVyO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5ibHVyWEZpbHRlci5ibHVyID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgc3RyZW5ndGggb2YgdGhlIGJsdXJZIHByb3BlcnR5XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlck9mIFBJWEkuZmlsdGVycy5CbG9vbUZpbHRlciNcbiAgICAgKiBAZGVmYXVsdCAyXG4gICAgICovXG4gICAgYmx1clk6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5ibHVyWUZpbHRlci5ibHVyO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5ibHVyWUZpbHRlci5ibHVyID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG59KTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vLi4vY29yZScpO1xuXG5cbi8qKlxuICogVGhlIEJsdXJEaXJGaWx0ZXIgYXBwbGllcyBhIEdhdXNzaWFuIGJsdXIgdG93YXJkIGEgZGlyZWN0aW9uIHRvIGFuIG9iamVjdC5cbiAqXG4gKiBAY2xhc3NcbiAqIEBwYXJhbSB7bnVtYmVyfSBkaXJYXG4gKiBAcGFyYW0ge251bWJlcn0gZGlyWVxuICogQGV4dGVuZHMgUElYSS5BYnN0cmFjdEZpbHRlclxuICogQG1lbWJlcm9mIFBJWEkuZmlsdGVyc1xuICovXG5mdW5jdGlvbiBCbHVyRGlyRmlsdGVyKGRpclgsIGRpclkpXG57XG4gICAgY29yZS5BYnN0cmFjdEZpbHRlci5jYWxsKHRoaXMsXG4gICAgICAgIC8vIHZlcnRleCBzaGFkZXJcbiAgICAgICAgXCJhdHRyaWJ1dGUgdmVjMiBhVmVydGV4UG9zaXRpb247XFxuYXR0cmlidXRlIHZlYzIgYVRleHR1cmVDb29yZDtcXG5hdHRyaWJ1dGUgdmVjNCBhQ29sb3I7XFxuXFxudW5pZm9ybSBmbG9hdCBzdHJlbmd0aDtcXG51bmlmb3JtIGZsb2F0IGRpclg7XFxudW5pZm9ybSBmbG9hdCBkaXJZO1xcbnVuaWZvcm0gbWF0MyBwcm9qZWN0aW9uTWF0cml4O1xcblxcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xcbnZhcnlpbmcgdmVjNCB2Q29sb3I7XFxudmFyeWluZyB2ZWMyIHZCbHVyVGV4Q29vcmRzWzNdO1xcblxcbnZvaWQgbWFpbih2b2lkKVxcbntcXG4gICAgZ2xfUG9zaXRpb24gPSB2ZWM0KChwcm9qZWN0aW9uTWF0cml4ICogdmVjMygoYVZlcnRleFBvc2l0aW9uKSwgMS4wKSkueHksIDAuMCwgMS4wKTtcXG4gICAgdlRleHR1cmVDb29yZCA9IGFUZXh0dXJlQ29vcmQ7XFxuXFxuICAgIHZCbHVyVGV4Q29vcmRzWzBdID0gYVRleHR1cmVDb29yZCArIHZlYzIoICgwLjAwNCAqIHN0cmVuZ3RoKSAqIGRpclgsICgwLjAwNCAqIHN0cmVuZ3RoKSAqIGRpclkgKTtcXG4gICAgdkJsdXJUZXhDb29yZHNbMV0gPSBhVGV4dHVyZUNvb3JkICsgdmVjMiggKDAuMDA4ICogc3RyZW5ndGgpICogZGlyWCwgKDAuMDA4ICogc3RyZW5ndGgpICogZGlyWSApO1xcbiAgICB2Qmx1clRleENvb3Jkc1syXSA9IGFUZXh0dXJlQ29vcmQgKyB2ZWMyKCAoMC4wMTIgKiBzdHJlbmd0aCkgKiBkaXJYLCAoMC4wMTIgKiBzdHJlbmd0aCkgKiBkaXJZICk7XFxuXFxuICAgIHZDb2xvciA9IHZlYzQoYUNvbG9yLnJnYiAqIGFDb2xvci5hLCBhQ29sb3IuYSk7XFxufVxcblwiLFxuICAgICAgICAvLyBmcmFnbWVudCBzaGFkZXJcbiAgICAgICAgXCJwcmVjaXNpb24gbG93cCBmbG9hdDtcXG5cXG52YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDtcXG52YXJ5aW5nIHZlYzIgdkJsdXJUZXhDb29yZHNbM107XFxudmFyeWluZyB2ZWM0IHZDb2xvcjtcXG5cXG51bmlmb3JtIHNhbXBsZXIyRCB1U2FtcGxlcjtcXG5cXG52b2lkIG1haW4odm9pZClcXG57XFxuICAgIGdsX0ZyYWdDb2xvciA9IHZlYzQoMC4wKTtcXG5cXG4gICAgZ2xfRnJhZ0NvbG9yICs9IHRleHR1cmUyRCh1U2FtcGxlciwgdlRleHR1cmVDb29yZCAgICAgKSAqIDAuMzk4OTQyMjgwNDAxNDMyNztcXG4gICAgZ2xfRnJhZ0NvbG9yICs9IHRleHR1cmUyRCh1U2FtcGxlciwgdkJsdXJUZXhDb29yZHNbIDBdKSAqIDAuMjQxOTcwNzI0NTE5MTQ1NDtcXG4gICAgZ2xfRnJhZ0NvbG9yICs9IHRleHR1cmUyRCh1U2FtcGxlciwgdkJsdXJUZXhDb29yZHNbIDFdKSAqIDAuMDUzOTkwOTY2NTEzMTg5ODU7XFxuICAgIGdsX0ZyYWdDb2xvciArPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZCbHVyVGV4Q29vcmRzWyAyXSkgKiAwLjAwNDQzMTg0ODQxMTkzODM0MTtcXG59XFxuXCIsXG4gICAgICAgIC8vIHNldCB0aGUgdW5pZm9ybXNcbiAgICAgICAge1xuICAgICAgICAgICAgc3RyZW5ndGg6IHsgdHlwZTogJzFmJywgdmFsdWU6IDEgfSxcbiAgICAgICAgICAgIGRpclg6IHsgdHlwZTogJzFmJywgdmFsdWU6IGRpclggfHwgMCB9LFxuICAgICAgICAgICAgZGlyWTogeyB0eXBlOiAnMWYnLCB2YWx1ZTogZGlyWSB8fCAwIH1cbiAgICAgICAgfVxuICAgICk7XG5cbiAgICB0aGlzLmRlZmF1bHRGaWx0ZXIgPSBuZXcgY29yZS5BYnN0cmFjdEZpbHRlcigpO1xuXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgbnVtYmVyIG9mIHBhc3NlcyBmb3IgYmx1ci4gTW9yZSBwYXNzZXMgbWVhbnMgaGlnaGVyIHF1YWlsaXR5IGJsdXJpbmcuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMVxuICAgICAqL1xuICAgIHRoaXMucGFzc2VzID0gMTtcblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIFggZGlyZWN0aW9uIG9mIHRoZSBibHVyXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMFxuICAgICAqL1xuICAgIHRoaXMuZGlyWCA9IGRpclggfHwgMDtcblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIFkgZGlyZWN0aW9uIG9mIHRoZSBibHVyXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMFxuICAgICAqL1xuICAgIHRoaXMuZGlyWSA9IGRpclkgfHwgMDtcblxuICAgIHRoaXMuc3RyZW5ndGggPSA0O1xufVxuXG5CbHVyRGlyRmlsdGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoY29yZS5BYnN0cmFjdEZpbHRlci5wcm90b3R5cGUpO1xuQmx1ckRpckZpbHRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBCbHVyRGlyRmlsdGVyO1xubW9kdWxlLmV4cG9ydHMgPSBCbHVyRGlyRmlsdGVyO1xuXG5CbHVyRGlyRmlsdGVyLnByb3RvdHlwZS5hcHBseUZpbHRlciA9IGZ1bmN0aW9uIChyZW5kZXJlciwgaW5wdXQsIG91dHB1dCwgY2xlYXIpIHtcblxuICAgIHZhciBzaGFkZXIgPSB0aGlzLmdldFNoYWRlcihyZW5kZXJlcik7XG5cbiAgICB0aGlzLnVuaWZvcm1zLnN0cmVuZ3RoLnZhbHVlID0gdGhpcy5zdHJlbmd0aCAvIDQgLyB0aGlzLnBhc3NlcyAqIChpbnB1dC5mcmFtZS53aWR0aCAvIGlucHV0LnNpemUud2lkdGgpO1xuXG4gICAgaWYgKHRoaXMucGFzc2VzID09PSAxKSB7XG4gICAgICAgIHJlbmRlcmVyLmZpbHRlck1hbmFnZXIuYXBwbHlGaWx0ZXIoc2hhZGVyLCBpbnB1dCwgb3V0cHV0LCBjbGVhcik7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgdmFyIHJlbmRlclRhcmdldCA9IHJlbmRlcmVyLmZpbHRlck1hbmFnZXIuZ2V0UmVuZGVyVGFyZ2V0KHRydWUpO1xuXG4gICAgICAgIHJlbmRlcmVyLmZpbHRlck1hbmFnZXIuYXBwbHlGaWx0ZXIoc2hhZGVyLCBpbnB1dCwgcmVuZGVyVGFyZ2V0LCBjbGVhcik7XG5cbiAgICAgICAgZm9yKHZhciBpID0gMDsgaSA8IHRoaXMucGFzc2VzLTI7IGkrKylcbiAgICAgICAge1xuICAgICAgICAgICAgLy90aGlzLnVuaWZvcm1zLnN0cmVuZ3RoLnZhbHVlID0gdGhpcy5zdHJlbmd0aCAvIDQgLyAodGhpcy5wYXNzZXMrKGkqMikpICogKGlucHV0LmZyYW1lLndpZHRoIC8gaW5wdXQuc2l6ZS53aWR0aCk7XG4gICAgICAgICAgICByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLmFwcGx5RmlsdGVyKHNoYWRlciwgcmVuZGVyVGFyZ2V0LCByZW5kZXJUYXJnZXQsIGNsZWFyKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJlbmRlcmVyLmZpbHRlck1hbmFnZXIuYXBwbHlGaWx0ZXIoc2hhZGVyLCByZW5kZXJUYXJnZXQsIG91dHB1dCwgY2xlYXIpO1xuXG4gICAgICAgIHJlbmRlcmVyLmZpbHRlck1hbmFnZXIucmV0dXJuUmVuZGVyVGFyZ2V0KHJlbmRlclRhcmdldCk7XG4gICAgfVxufTtcblxuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhCbHVyRGlyRmlsdGVyLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIHN0cmVuZ3RoIG9mIGJvdGggdGhlIGJsdXIuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5CbHVyRGlyRmlsdGVyI1xuICAgICAqIEBkZWZhdWx0IDJcbiAgICAgKi9cbiAgICBibHVyOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuc3RyZW5ndGg7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnBhZGRpbmcgPSB2YWx1ZSAqIDAuNTtcbiAgICAgICAgICAgIHRoaXMuc3RyZW5ndGggPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgWCBkaXJlY3Rpb24gb2YgdGhlIGJsdXIuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5CbHVyWUZpbHRlciNcbiAgICAgKiBAZGVmYXVsdCAwXG4gICAgICovXG4gICAgZGlyWDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmRpclg7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLmRpclgudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgWSBkaXJlY3Rpb24gb2YgdGhlIGJsdXIuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5CbHVyRGlyRmlsdGVyI1xuICAgICAqIEBkZWZhdWx0IDBcbiAgICAgKi9cbiAgICBkaXJZOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZGlyWTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudW5pZm9ybXMuZGlyWS52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfVxufSk7XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uLy4uL2NvcmUnKSxcbiAgICBCbHVyWEZpbHRlciA9IHJlcXVpcmUoJy4vQmx1clhGaWx0ZXInKSxcbiAgICBCbHVyWUZpbHRlciA9IHJlcXVpcmUoJy4vQmx1cllGaWx0ZXInKTtcblxuLyoqXG4gKiBUaGUgQmx1ckZpbHRlciBhcHBsaWVzIGEgR2F1c3NpYW4gYmx1ciB0byBhbiBvYmplY3QuXG4gKiBUaGUgc3RyZW5ndGggb2YgdGhlIGJsdXIgY2FuIGJlIHNldCBmb3IgeC0gYW5kIHktYXhpcyBzZXBhcmF0ZWx5LlxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5BYnN0cmFjdEZpbHRlclxuICogQG1lbWJlcm9mIFBJWEkuZmlsdGVyc1xuICovXG5mdW5jdGlvbiBCbHVyRmlsdGVyKClcbntcbiAgICBjb3JlLkFic3RyYWN0RmlsdGVyLmNhbGwodGhpcyk7XG5cbiAgICB0aGlzLmJsdXJYRmlsdGVyID0gbmV3IEJsdXJYRmlsdGVyKCk7XG4gICAgdGhpcy5ibHVyWUZpbHRlciA9IG5ldyBCbHVyWUZpbHRlcigpO1xufVxuXG5CbHVyRmlsdGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoY29yZS5BYnN0cmFjdEZpbHRlci5wcm90b3R5cGUpO1xuQmx1ckZpbHRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBCbHVyRmlsdGVyO1xubW9kdWxlLmV4cG9ydHMgPSBCbHVyRmlsdGVyO1xuXG5CbHVyRmlsdGVyLnByb3RvdHlwZS5hcHBseUZpbHRlciA9IGZ1bmN0aW9uIChyZW5kZXJlciwgaW5wdXQsIG91dHB1dClcbntcbiAgICB2YXIgcmVuZGVyVGFyZ2V0ID0gcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5nZXRSZW5kZXJUYXJnZXQodHJ1ZSk7XG5cbiAgICB0aGlzLmJsdXJYRmlsdGVyLmFwcGx5RmlsdGVyKHJlbmRlcmVyLCBpbnB1dCwgcmVuZGVyVGFyZ2V0KTtcbiAgICB0aGlzLmJsdXJZRmlsdGVyLmFwcGx5RmlsdGVyKHJlbmRlcmVyLCByZW5kZXJUYXJnZXQsIG91dHB1dCk7XG5cbiAgICByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLnJldHVyblJlbmRlclRhcmdldChyZW5kZXJUYXJnZXQpO1xufTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoQmx1ckZpbHRlci5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBzdHJlbmd0aCBvZiBib3RoIHRoZSBibHVyWCBhbmQgYmx1clkgcHJvcGVydGllcyBzaW11bHRhbmVvdXNseVxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJPZiBQSVhJLmZpbHRlcnMuQmx1ckZpbHRlciNcbiAgICAgKiBAZGVmYXVsdCAyXG4gICAgICovXG4gICAgYmx1cjoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmJsdXJYRmlsdGVyLmJsdXI7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnBhZGRpbmcgPSBNYXRoLmFicyh2YWx1ZSkgKiAwLjU7XG4gICAgICAgICAgICB0aGlzLmJsdXJYRmlsdGVyLmJsdXIgPSB0aGlzLmJsdXJZRmlsdGVyLmJsdXIgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBudW1iZXIgb2YgcGFzc2VzIGZvciBibHVyLiBNb3JlIHBhc3NlcyBtZWFucyBoaWdoZXIgcXVhaWxpdHkgYmx1cmluZy5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLkJsdXJZRmlsdGVyI1xuICAgICAqIEBkZWZhdWx0IDFcbiAgICAgKi9cbiAgICBwYXNzZXM6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gIHRoaXMuYmx1clhGaWx0ZXIucGFzc2VzO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5ibHVyWEZpbHRlci5wYXNzZXMgPSB0aGlzLmJsdXJZRmlsdGVyLnBhc3NlcyA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIHN0cmVuZ3RoIG9mIHRoZSBibHVyWCBwcm9wZXJ0eVxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJPZiBQSVhJLmZpbHRlcnMuQmx1ckZpbHRlciNcbiAgICAgKiBAZGVmYXVsdCAyXG4gICAgICovXG4gICAgYmx1clg6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5ibHVyWEZpbHRlci5ibHVyO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5ibHVyWEZpbHRlci5ibHVyID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgc3RyZW5ndGggb2YgdGhlIGJsdXJZIHByb3BlcnR5XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlck9mIFBJWEkuZmlsdGVycy5CbHVyRmlsdGVyI1xuICAgICAqIEBkZWZhdWx0IDJcbiAgICAgKi9cbiAgICBibHVyWToge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmJsdXJZRmlsdGVyLmJsdXI7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmJsdXJZRmlsdGVyLmJsdXIgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi8uLi9jb3JlJyk7XG4vLyBAc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9zdWJzdGFjay9icmZzL2lzc3Vlcy8yNVxuXG5cbi8qKlxuICogVGhlIEJsdXJYRmlsdGVyIGFwcGxpZXMgYSBob3Jpem9udGFsIEdhdXNzaWFuIGJsdXIgdG8gYW4gb2JqZWN0LlxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5BYnN0cmFjdEZpbHRlclxuICogQG1lbWJlcm9mIFBJWEkuZmlsdGVyc1xuICovXG5mdW5jdGlvbiBCbHVyWEZpbHRlcigpXG57XG4gICAgY29yZS5BYnN0cmFjdEZpbHRlci5jYWxsKHRoaXMsXG4gICAgICAgIC8vIHZlcnRleCBzaGFkZXJcbiAgICAgICAgXCJhdHRyaWJ1dGUgdmVjMiBhVmVydGV4UG9zaXRpb247XFxuYXR0cmlidXRlIHZlYzIgYVRleHR1cmVDb29yZDtcXG5hdHRyaWJ1dGUgdmVjNCBhQ29sb3I7XFxuXFxudW5pZm9ybSBmbG9hdCBzdHJlbmd0aDtcXG51bmlmb3JtIG1hdDMgcHJvamVjdGlvbk1hdHJpeDtcXG5cXG52YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDtcXG52YXJ5aW5nIHZlYzQgdkNvbG9yO1xcbnZhcnlpbmcgdmVjMiB2Qmx1clRleENvb3Jkc1s2XTtcXG5cXG52b2lkIG1haW4odm9pZClcXG57XFxuICAgIGdsX1Bvc2l0aW9uID0gdmVjNCgocHJvamVjdGlvbk1hdHJpeCAqIHZlYzMoKGFWZXJ0ZXhQb3NpdGlvbiksIDEuMCkpLnh5LCAwLjAsIDEuMCk7XFxuICAgIHZUZXh0dXJlQ29vcmQgPSBhVGV4dHVyZUNvb3JkO1xcblxcbiAgICB2Qmx1clRleENvb3Jkc1sgMF0gPSBhVGV4dHVyZUNvb3JkICsgdmVjMigtMC4wMTIgKiBzdHJlbmd0aCwgMC4wKTtcXG4gICAgdkJsdXJUZXhDb29yZHNbIDFdID0gYVRleHR1cmVDb29yZCArIHZlYzIoLTAuMDA4ICogc3RyZW5ndGgsIDAuMCk7XFxuICAgIHZCbHVyVGV4Q29vcmRzWyAyXSA9IGFUZXh0dXJlQ29vcmQgKyB2ZWMyKC0wLjAwNCAqIHN0cmVuZ3RoLCAwLjApO1xcbiAgICB2Qmx1clRleENvb3Jkc1sgM10gPSBhVGV4dHVyZUNvb3JkICsgdmVjMiggMC4wMDQgKiBzdHJlbmd0aCwgMC4wKTtcXG4gICAgdkJsdXJUZXhDb29yZHNbIDRdID0gYVRleHR1cmVDb29yZCArIHZlYzIoIDAuMDA4ICogc3RyZW5ndGgsIDAuMCk7XFxuICAgIHZCbHVyVGV4Q29vcmRzWyA1XSA9IGFUZXh0dXJlQ29vcmQgKyB2ZWMyKCAwLjAxMiAqIHN0cmVuZ3RoLCAwLjApO1xcblxcbiAgICB2Q29sb3IgPSB2ZWM0KGFDb2xvci5yZ2IgKiBhQ29sb3IuYSwgYUNvbG9yLmEpO1xcbn1cXG5cIixcbiAgICAgICAgLy8gZnJhZ21lbnQgc2hhZGVyXG4gICAgICAgIFwicHJlY2lzaW9uIGxvd3AgZmxvYXQ7XFxuXFxudmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7XFxudmFyeWluZyB2ZWMyIHZCbHVyVGV4Q29vcmRzWzZdO1xcbnZhcnlpbmcgdmVjNCB2Q29sb3I7XFxuXFxudW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXI7XFxuXFxudm9pZCBtYWluKHZvaWQpXFxue1xcbiAgICBnbF9GcmFnQ29sb3IgPSB2ZWM0KDAuMCk7XFxuXFxuICAgIGdsX0ZyYWdDb2xvciArPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZCbHVyVGV4Q29vcmRzWyAwXSkqMC4wMDQ0MzE4NDg0MTE5MzgzNDE7XFxuICAgIGdsX0ZyYWdDb2xvciArPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZCbHVyVGV4Q29vcmRzWyAxXSkqMC4wNTM5OTA5NjY1MTMxODk4NTtcXG4gICAgZ2xfRnJhZ0NvbG9yICs9IHRleHR1cmUyRCh1U2FtcGxlciwgdkJsdXJUZXhDb29yZHNbIDJdKSowLjI0MTk3MDcyNDUxOTE0NTQ7XFxuICAgIGdsX0ZyYWdDb2xvciArPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZUZXh0dXJlQ29vcmQgICAgICkqMC4zOTg5NDIyODA0MDE0MzI3O1xcbiAgICBnbF9GcmFnQ29sb3IgKz0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2Qmx1clRleENvb3Jkc1sgM10pKjAuMjQxOTcwNzI0NTE5MTQ1NDtcXG4gICAgZ2xfRnJhZ0NvbG9yICs9IHRleHR1cmUyRCh1U2FtcGxlciwgdkJsdXJUZXhDb29yZHNbIDRdKSowLjA1Mzk5MDk2NjUxMzE4OTg1O1xcbiAgICBnbF9GcmFnQ29sb3IgKz0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2Qmx1clRleENvb3Jkc1sgNV0pKjAuMDA0NDMxODQ4NDExOTM4MzQxO1xcbn1cXG5cIixcbiAgICAgICAgLy8gc2V0IHRoZSB1bmlmb3Jtc1xuICAgICAgICB7XG4gICAgICAgICAgICBzdHJlbmd0aDogeyB0eXBlOiAnMWYnLCB2YWx1ZTogMSB9XG4gICAgICAgIH1cbiAgICApO1xuXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgbnVtYmVyIG9mIHBhc3NlcyBmb3IgYmx1ci4gTW9yZSBwYXNzZXMgbWVhbnMgaGlnaGVyIHF1YWlsaXR5IGJsdXJpbmcuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMVxuICAgICAqL1xuICAgIHRoaXMucGFzc2VzID0gMTtcblxuICAgIHRoaXMuc3RyZW5ndGggPSA0O1xufVxuXG5CbHVyWEZpbHRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuQWJzdHJhY3RGaWx0ZXIucHJvdG90eXBlKTtcbkJsdXJYRmlsdGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IEJsdXJYRmlsdGVyO1xubW9kdWxlLmV4cG9ydHMgPSBCbHVyWEZpbHRlcjtcblxuQmx1clhGaWx0ZXIucHJvdG90eXBlLmFwcGx5RmlsdGVyID0gZnVuY3Rpb24gKHJlbmRlcmVyLCBpbnB1dCwgb3V0cHV0LCBjbGVhcilcbntcbiAgICB2YXIgc2hhZGVyID0gdGhpcy5nZXRTaGFkZXIocmVuZGVyZXIpO1xuXG4gICAgdGhpcy51bmlmb3Jtcy5zdHJlbmd0aC52YWx1ZSA9IHRoaXMuc3RyZW5ndGggLyA0IC8gdGhpcy5wYXNzZXMgKiAoaW5wdXQuZnJhbWUud2lkdGggLyBpbnB1dC5zaXplLndpZHRoKTtcblxuICAgIGlmKHRoaXMucGFzc2VzID09PSAxKVxuICAgIHtcbiAgICAgICAgcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5hcHBseUZpbHRlcihzaGFkZXIsIGlucHV0LCBvdXRwdXQsIGNsZWFyKTtcbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgdmFyIHJlbmRlclRhcmdldCA9IHJlbmRlcmVyLmZpbHRlck1hbmFnZXIuZ2V0UmVuZGVyVGFyZ2V0KHRydWUpO1xuICAgICAgICB2YXIgZmxpcCA9IGlucHV0O1xuICAgICAgICB2YXIgZmxvcCA9IHJlbmRlclRhcmdldDtcblxuICAgICAgICBmb3IodmFyIGkgPSAwOyBpIDwgdGhpcy5wYXNzZXMtMTsgaSsrKVxuICAgICAgICB7XG4gICAgICAgICAgICByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLmFwcGx5RmlsdGVyKHNoYWRlciwgZmxpcCwgZmxvcCwgdHJ1ZSk7XG5cbiAgICAgICAgICAgdmFyIHRlbXAgPSBmbG9wO1xuICAgICAgICAgICBmbG9wID0gZmxpcDtcbiAgICAgICAgICAgZmxpcCA9IHRlbXA7XG4gICAgICAgIH1cblxuICAgICAgICByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLmFwcGx5RmlsdGVyKHNoYWRlciwgZmxpcCwgb3V0cHV0LCBjbGVhcik7XG5cbiAgICAgICAgcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5yZXR1cm5SZW5kZXJUYXJnZXQocmVuZGVyVGFyZ2V0KTtcbiAgICB9XG59O1xuXG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKEJsdXJYRmlsdGVyLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIHN0cmVuZ3RoIG9mIGJvdGggdGhlIGJsdXIuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5CbHVyWEZpbHRlciNcbiAgICAgKiBAZGVmYXVsdCAyXG4gICAgICovXG4gICAgYmx1cjoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiAgdGhpcy5zdHJlbmd0aDtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMucGFkZGluZyA9ICBNYXRoLmFicyh2YWx1ZSkgKiAwLjU7XG4gICAgICAgICAgICB0aGlzLnN0cmVuZ3RoID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG59KTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vLi4vY29yZScpO1xuLy8gQHNlZSBodHRwczovL2dpdGh1Yi5jb20vc3Vic3RhY2svYnJmcy9pc3N1ZXMvMjVcblxuXG4vKipcbiAqIFRoZSBCbHVyWUZpbHRlciBhcHBsaWVzIGEgaG9yaXpvbnRhbCBHYXVzc2lhbiBibHVyIHRvIGFuIG9iamVjdC5cbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQWJzdHJhY3RGaWx0ZXJcbiAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnNcbiAqL1xuZnVuY3Rpb24gQmx1cllGaWx0ZXIoKVxue1xuICAgIGNvcmUuQWJzdHJhY3RGaWx0ZXIuY2FsbCh0aGlzLFxuICAgICAgICAvLyB2ZXJ0ZXggc2hhZGVyXG4gICAgICAgIFwiYXR0cmlidXRlIHZlYzIgYVZlcnRleFBvc2l0aW9uO1xcbmF0dHJpYnV0ZSB2ZWMyIGFUZXh0dXJlQ29vcmQ7XFxuYXR0cmlidXRlIHZlYzQgYUNvbG9yO1xcblxcbnVuaWZvcm0gZmxvYXQgc3RyZW5ndGg7XFxudW5pZm9ybSBtYXQzIHByb2plY3Rpb25NYXRyaXg7XFxuXFxudmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7XFxudmFyeWluZyB2ZWM0IHZDb2xvcjtcXG52YXJ5aW5nIHZlYzIgdkJsdXJUZXhDb29yZHNbNl07XFxuXFxudm9pZCBtYWluKHZvaWQpXFxue1xcbiAgICBnbF9Qb3NpdGlvbiA9IHZlYzQoKHByb2plY3Rpb25NYXRyaXggKiB2ZWMzKChhVmVydGV4UG9zaXRpb24pLCAxLjApKS54eSwgMC4wLCAxLjApO1xcbiAgICB2VGV4dHVyZUNvb3JkID0gYVRleHR1cmVDb29yZDtcXG5cXG4gICAgdkJsdXJUZXhDb29yZHNbIDBdID0gYVRleHR1cmVDb29yZCArIHZlYzIoMC4wLCAtMC4wMTIgKiBzdHJlbmd0aCk7XFxuICAgIHZCbHVyVGV4Q29vcmRzWyAxXSA9IGFUZXh0dXJlQ29vcmQgKyB2ZWMyKDAuMCwgLTAuMDA4ICogc3RyZW5ndGgpO1xcbiAgICB2Qmx1clRleENvb3Jkc1sgMl0gPSBhVGV4dHVyZUNvb3JkICsgdmVjMigwLjAsIC0wLjAwNCAqIHN0cmVuZ3RoKTtcXG4gICAgdkJsdXJUZXhDb29yZHNbIDNdID0gYVRleHR1cmVDb29yZCArIHZlYzIoMC4wLCAgMC4wMDQgKiBzdHJlbmd0aCk7XFxuICAgIHZCbHVyVGV4Q29vcmRzWyA0XSA9IGFUZXh0dXJlQ29vcmQgKyB2ZWMyKDAuMCwgIDAuMDA4ICogc3RyZW5ndGgpO1xcbiAgICB2Qmx1clRleENvb3Jkc1sgNV0gPSBhVGV4dHVyZUNvb3JkICsgdmVjMigwLjAsICAwLjAxMiAqIHN0cmVuZ3RoKTtcXG5cXG4gICB2Q29sb3IgPSB2ZWM0KGFDb2xvci5yZ2IgKiBhQ29sb3IuYSwgYUNvbG9yLmEpO1xcbn1cXG5cIixcbiAgICAgICAgLy8gZnJhZ21lbnQgc2hhZGVyXG4gICAgICAgIFwicHJlY2lzaW9uIGxvd3AgZmxvYXQ7XFxuXFxudmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7XFxudmFyeWluZyB2ZWMyIHZCbHVyVGV4Q29vcmRzWzZdO1xcbnZhcnlpbmcgdmVjNCB2Q29sb3I7XFxuXFxudW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXI7XFxuXFxudm9pZCBtYWluKHZvaWQpXFxue1xcbiAgICBnbF9GcmFnQ29sb3IgPSB2ZWM0KDAuMCk7XFxuXFxuICAgIGdsX0ZyYWdDb2xvciArPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZCbHVyVGV4Q29vcmRzWyAwXSkqMC4wMDQ0MzE4NDg0MTE5MzgzNDE7XFxuICAgIGdsX0ZyYWdDb2xvciArPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZCbHVyVGV4Q29vcmRzWyAxXSkqMC4wNTM5OTA5NjY1MTMxODk4NTtcXG4gICAgZ2xfRnJhZ0NvbG9yICs9IHRleHR1cmUyRCh1U2FtcGxlciwgdkJsdXJUZXhDb29yZHNbIDJdKSowLjI0MTk3MDcyNDUxOTE0NTQ7XFxuICAgIGdsX0ZyYWdDb2xvciArPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZUZXh0dXJlQ29vcmQgICAgICkqMC4zOTg5NDIyODA0MDE0MzI3O1xcbiAgICBnbF9GcmFnQ29sb3IgKz0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2Qmx1clRleENvb3Jkc1sgM10pKjAuMjQxOTcwNzI0NTE5MTQ1NDtcXG4gICAgZ2xfRnJhZ0NvbG9yICs9IHRleHR1cmUyRCh1U2FtcGxlciwgdkJsdXJUZXhDb29yZHNbIDRdKSowLjA1Mzk5MDk2NjUxMzE4OTg1O1xcbiAgICBnbF9GcmFnQ29sb3IgKz0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2Qmx1clRleENvb3Jkc1sgNV0pKjAuMDA0NDMxODQ4NDExOTM4MzQxO1xcbn1cXG5cIixcbiAgICAgICAgLy8gc2V0IHRoZSB1bmlmb3Jtc1xuICAgICAgICB7XG4gICAgICAgICAgICBzdHJlbmd0aDogeyB0eXBlOiAnMWYnLCB2YWx1ZTogMSB9XG4gICAgICAgIH1cbiAgICApO1xuXG4gICAgdGhpcy5wYXNzZXMgPSAxO1xuICAgIHRoaXMuc3RyZW5ndGggPSA0O1xufVxuXG5CbHVyWUZpbHRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuQWJzdHJhY3RGaWx0ZXIucHJvdG90eXBlKTtcbkJsdXJZRmlsdGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IEJsdXJZRmlsdGVyO1xubW9kdWxlLmV4cG9ydHMgPSBCbHVyWUZpbHRlcjtcblxuQmx1cllGaWx0ZXIucHJvdG90eXBlLmFwcGx5RmlsdGVyID0gZnVuY3Rpb24gKHJlbmRlcmVyLCBpbnB1dCwgb3V0cHV0LCBjbGVhcilcbntcbiAgICB2YXIgc2hhZGVyID0gdGhpcy5nZXRTaGFkZXIocmVuZGVyZXIpO1xuXG4gICAgdGhpcy51bmlmb3Jtcy5zdHJlbmd0aC52YWx1ZSA9IE1hdGguYWJzKHRoaXMuc3RyZW5ndGgpIC8gNCAvIHRoaXMucGFzc2VzICogKGlucHV0LmZyYW1lLmhlaWdodCAvIGlucHV0LnNpemUuaGVpZ2h0KTtcblxuICAgIGlmKHRoaXMucGFzc2VzID09PSAxKVxuICAgIHtcbiAgICAgICAgcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5hcHBseUZpbHRlcihzaGFkZXIsIGlucHV0LCBvdXRwdXQsIGNsZWFyKTtcbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgdmFyIHJlbmRlclRhcmdldCA9IHJlbmRlcmVyLmZpbHRlck1hbmFnZXIuZ2V0UmVuZGVyVGFyZ2V0KHRydWUpO1xuICAgICAgICB2YXIgZmxpcCA9IGlucHV0O1xuICAgICAgICB2YXIgZmxvcCA9IHJlbmRlclRhcmdldDtcblxuICAgICAgICBmb3IodmFyIGkgPSAwOyBpIDwgdGhpcy5wYXNzZXMtMTsgaSsrKVxuICAgICAgICB7XG4gICAgICAgICAgICByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLmFwcGx5RmlsdGVyKHNoYWRlciwgZmxpcCwgZmxvcCwgdHJ1ZSk7XG5cbiAgICAgICAgICAgdmFyIHRlbXAgPSBmbG9wO1xuICAgICAgICAgICBmbG9wID0gZmxpcDtcbiAgICAgICAgICAgZmxpcCA9IHRlbXA7XG4gICAgICAgIH1cblxuICAgICAgICByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLmFwcGx5RmlsdGVyKHNoYWRlciwgZmxpcCwgb3V0cHV0LCBjbGVhcik7XG5cbiAgICAgICAgcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5yZXR1cm5SZW5kZXJUYXJnZXQocmVuZGVyVGFyZ2V0KTtcbiAgICB9XG59O1xuXG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKEJsdXJZRmlsdGVyLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIHN0cmVuZ3RoIG9mIGJvdGggdGhlIGJsdXIuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5CbHVyWUZpbHRlciNcbiAgICAgKiBAZGVmYXVsdCAyXG4gICAgICovXG4gICAgYmx1cjoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiAgdGhpcy5zdHJlbmd0aDtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMucGFkZGluZyA9IE1hdGguYWJzKHZhbHVlKSAqIDAuNTtcbiAgICAgICAgICAgIHRoaXMuc3RyZW5ndGggPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi8uLi9jb3JlJyk7XG4vLyBAc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9zdWJzdGFjay9icmZzL2lzc3Vlcy8yNVxuXG5cbi8qKlxuICogQSBTbWFydCBCbHVyIEZpbHRlci5cbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQWJzdHJhY3RGaWx0ZXJcbiAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnNcbiAqL1xuZnVuY3Rpb24gU21hcnRCbHVyRmlsdGVyKClcbntcbiAgICBjb3JlLkFic3RyYWN0RmlsdGVyLmNhbGwodGhpcyxcbiAgICAgICAgLy8gdmVydGV4IHNoYWRlclxuICAgICAgICBudWxsLFxuICAgICAgICAvLyBmcmFnbWVudCBzaGFkZXJcbiAgICAgICAgXCJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcXG5cXG52YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDtcXG5cXG51bmlmb3JtIHNhbXBsZXIyRCB1U2FtcGxlcjtcXG51bmlmb3JtIHZlYzIgZGVsdGE7XFxuXFxuZmxvYXQgcmFuZG9tKHZlYzMgc2NhbGUsIGZsb2F0IHNlZWQpXFxue1xcbiAgICByZXR1cm4gZnJhY3Qoc2luKGRvdChnbF9GcmFnQ29vcmQueHl6ICsgc2VlZCwgc2NhbGUpKSAqIDQzNzU4LjU0NTMgKyBzZWVkKTtcXG59XFxuXFxudm9pZCBtYWluKHZvaWQpXFxue1xcbiAgICB2ZWM0IGNvbG9yID0gdmVjNCgwLjApO1xcbiAgICBmbG9hdCB0b3RhbCA9IDAuMDtcXG5cXG4gICAgZmxvYXQgb2Zmc2V0ID0gcmFuZG9tKHZlYzMoMTIuOTg5OCwgNzguMjMzLCAxNTEuNzE4MiksIDAuMCk7XFxuXFxuICAgIGZvciAoZmxvYXQgdCA9IC0zMC4wOyB0IDw9IDMwLjA7IHQrKylcXG4gICAge1xcbiAgICAgICAgZmxvYXQgcGVyY2VudCA9ICh0ICsgb2Zmc2V0IC0gMC41KSAvIDMwLjA7XFxuICAgICAgICBmbG9hdCB3ZWlnaHQgPSAxLjAgLSBhYnMocGVyY2VudCk7XFxuICAgICAgICB2ZWM0IHNhbXBsZSA9IHRleHR1cmUyRCh1U2FtcGxlciwgdlRleHR1cmVDb29yZCArIGRlbHRhICogcGVyY2VudCk7XFxuICAgICAgICBzYW1wbGUucmdiICo9IHNhbXBsZS5hO1xcbiAgICAgICAgY29sb3IgKz0gc2FtcGxlICogd2VpZ2h0O1xcbiAgICAgICAgdG90YWwgKz0gd2VpZ2h0O1xcbiAgICB9XFxuXFxuICAgIGdsX0ZyYWdDb2xvciA9IGNvbG9yIC8gdG90YWw7XFxuICAgIGdsX0ZyYWdDb2xvci5yZ2IgLz0gZ2xfRnJhZ0NvbG9yLmEgKyAwLjAwMDAxO1xcbn1cXG5cIixcbiAgICAgICAgLy8gdW5pZm9ybXNcbiAgICAgICAge1xuICAgICAgICAgIGRlbHRhOiB7IHR5cGU6ICd2MicsIHZhbHVlOiB7IHg6IDAuMSwgeTogMC4wIH0gfVxuICAgICAgICB9XG4gICAgKTtcbn1cblxuU21hcnRCbHVyRmlsdGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoY29yZS5BYnN0cmFjdEZpbHRlci5wcm90b3R5cGUpO1xuU21hcnRCbHVyRmlsdGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFNtYXJ0Qmx1ckZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gU21hcnRCbHVyRmlsdGVyO1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi8uLi9jb3JlJyk7XG4vLyBAc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9zdWJzdGFjay9icmZzL2lzc3Vlcy8yNVxuXG5cbi8qKlxuICogVGhlIENvbG9yTWF0cml4RmlsdGVyIGNsYXNzIGxldHMgeW91IGFwcGx5IGEgNXg0IG1hdHJpeCB0cmFuc2Zvcm1hdGlvbiBvbiB0aGUgUkdCQVxuICogY29sb3IgYW5kIGFscGhhIHZhbHVlcyBvZiBldmVyeSBwaXhlbCBvbiB5b3VyIGRpc3BsYXlPYmplY3QgdG8gcHJvZHVjZSBhIHJlc3VsdFxuICogd2l0aCBhIG5ldyBzZXQgb2YgUkdCQSBjb2xvciBhbmQgYWxwaGEgdmFsdWVzLiBJdCdzIHByZXR0eSBwb3dlcmZ1bCFcbiAqXG4gKiBgYGBqc1xuICogIHZhciBjb2xvck1hdHJpeCA9IG5ldyBQSVhJLkNvbG9yTWF0cml4RmlsdGVyKCk7XG4gKiAgY29udGFpbmVyLmZpbHRlcnMgPSBbY29sb3JNYXRyaXhdO1xuICogIGNvbG9yTWF0cml4LmNvbnRyYXN0KDIpO1xuICogYGBgXG4gKiBAYXV0aG9yIENsw6ltZW50IENoZW5lYmF1bHQgPGNsZW1lbnRAZ29vZGJveWRpZ2l0YWwuY29tPlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLkFic3RyYWN0RmlsdGVyXG4gKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzXG4gKi9cbmZ1bmN0aW9uIENvbG9yTWF0cml4RmlsdGVyKClcbntcbiAgICBjb3JlLkFic3RyYWN0RmlsdGVyLmNhbGwodGhpcyxcbiAgICAgICAgLy8gdmVydGV4IHNoYWRlclxuICAgICAgICBudWxsLFxuICAgICAgICAvLyBmcmFnbWVudCBzaGFkZXJcbiAgICAgICAgXCJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcXG5cXG52YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDtcXG51bmlmb3JtIHNhbXBsZXIyRCB1U2FtcGxlcjtcXG51bmlmb3JtIGZsb2F0IG1bMjVdO1xcblxcbnZvaWQgbWFpbih2b2lkKVxcbntcXG5cXG4gICAgdmVjNCBjID0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2VGV4dHVyZUNvb3JkKTtcXG5cXG4gICAgZ2xfRnJhZ0NvbG9yLnIgPSAobVswXSAqIGMucik7XFxuICAgICAgICBnbF9GcmFnQ29sb3IuciArPSAobVsxXSAqIGMuZyk7XFxuICAgICAgICBnbF9GcmFnQ29sb3IuciArPSAobVsyXSAqIGMuYik7XFxuICAgICAgICBnbF9GcmFnQ29sb3IuciArPSAobVszXSAqIGMuYSk7XFxuICAgICAgICBnbF9GcmFnQ29sb3IuciArPSBtWzRdO1xcblxcbiAgICBnbF9GcmFnQ29sb3IuZyA9IChtWzVdICogYy5yKTtcXG4gICAgICAgIGdsX0ZyYWdDb2xvci5nICs9IChtWzZdICogYy5nKTtcXG4gICAgICAgIGdsX0ZyYWdDb2xvci5nICs9IChtWzddICogYy5iKTtcXG4gICAgICAgIGdsX0ZyYWdDb2xvci5nICs9IChtWzhdICogYy5hKTtcXG4gICAgICAgIGdsX0ZyYWdDb2xvci5nICs9IG1bOV07XFxuXFxuICAgICBnbF9GcmFnQ29sb3IuYiA9IChtWzEwXSAqIGMucik7XFxuICAgICAgICBnbF9GcmFnQ29sb3IuYiArPSAobVsxMV0gKiBjLmcpO1xcbiAgICAgICAgZ2xfRnJhZ0NvbG9yLmIgKz0gKG1bMTJdICogYy5iKTtcXG4gICAgICAgIGdsX0ZyYWdDb2xvci5iICs9IChtWzEzXSAqIGMuYSk7XFxuICAgICAgICBnbF9GcmFnQ29sb3IuYiArPSBtWzE0XTtcXG5cXG4gICAgIGdsX0ZyYWdDb2xvci5hID0gKG1bMTVdICogYy5yKTtcXG4gICAgICAgIGdsX0ZyYWdDb2xvci5hICs9IChtWzE2XSAqIGMuZyk7XFxuICAgICAgICBnbF9GcmFnQ29sb3IuYSArPSAobVsxN10gKiBjLmIpO1xcbiAgICAgICAgZ2xfRnJhZ0NvbG9yLmEgKz0gKG1bMThdICogYy5hKTtcXG4gICAgICAgIGdsX0ZyYWdDb2xvci5hICs9IG1bMTldO1xcblxcbn1cXG5cIixcbiAgICAgICAgLy8gY3VzdG9tIHVuaWZvcm1zXG4gICAgICAgIHtcbiAgICAgICAgICAgIG06IHtcbiAgICAgICAgICAgICAgICB0eXBlOiAnMWZ2JywgdmFsdWU6IFtcbiAgICAgICAgICAgICAgICAgICAgMSwgMCwgMCwgMCwgMCxcbiAgICAgICAgICAgICAgICAgICAgMCwgMSwgMCwgMCwgMCxcbiAgICAgICAgICAgICAgICAgICAgMCwgMCwgMSwgMCwgMCxcbiAgICAgICAgICAgICAgICAgICAgMCwgMCwgMCwgMSwgMFxuICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICk7XG59XG5cbkNvbG9yTWF0cml4RmlsdGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoY29yZS5BYnN0cmFjdEZpbHRlci5wcm90b3R5cGUpO1xuQ29sb3JNYXRyaXhGaWx0ZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gQ29sb3JNYXRyaXhGaWx0ZXI7XG5tb2R1bGUuZXhwb3J0cyA9IENvbG9yTWF0cml4RmlsdGVyO1xuXG5cbi8qKlxuICogVHJhbnNmb3JtcyBjdXJyZW50IG1hdHJpeCBhbmQgc2V0IHRoZSBuZXcgb25lXG4gKlxuICogQHBhcmFtIG1hdHJpeCB7bnVtYmVyW119IChtYXQgNXg0KVxuICogQHBhcmFtIG11bHRpcGx5IHtib29sZWFufSBpZiB0cnVlLCBjdXJyZW50IG1hdHJpeCBhbmQgbWF0cml4IGFyZSBtdWx0aXBsaWVkLiBJZiBmYWxzZSwganVzdCBzZXQgdGhlIGN1cnJlbnQgbWF0cml4IHdpdGggQHBhcmFtIG1hdHJpeFxuICovXG5Db2xvck1hdHJpeEZpbHRlci5wcm90b3R5cGUuX2xvYWRNYXRyaXggPSBmdW5jdGlvbiAobWF0cml4LCBtdWx0aXBseSlcbntcbiAgICBtdWx0aXBseSA9ICEhbXVsdGlwbHk7XG5cbiAgICB2YXIgbmV3TWF0cml4ID0gbWF0cml4O1xuXG4gICAgaWYgKG11bHRpcGx5KSB7XG4gICAgICAgIHRoaXMuX211bHRpcGx5KG5ld01hdHJpeCwgdGhpcy51bmlmb3Jtcy5tLnZhbHVlLCBtYXRyaXgpO1xuICAgICAgICBuZXdNYXRyaXggPSB0aGlzLl9jb2xvck1hdHJpeChuZXdNYXRyaXgpO1xuICAgIH1cblxuICAgIC8vIHNldCB0aGUgbmV3IG1hdHJpeFxuICAgIHRoaXMudW5pZm9ybXMubS52YWx1ZSA9IG5ld01hdHJpeDtcbn07XG5cbi8qKlxuICogTXVsdGlwbGllcyB0d28gbWF0NSdzXG4gKlxuICogQHBhcmFtIG91dCB7bnVtYmVyW119IChtYXQgNXg0KSB0aGUgcmVjZWl2aW5nIG1hdHJpeFxuICogQHBhcmFtIGEge251bWJlcltdfSAobWF0IDV4NCkgdGhlIGZpcnN0IG9wZXJhbmRcbiAqIEBwYXJhbSBiIHtudW1iZXJbXX0gKG1hdCA1eDQpIHRoZSBzZWNvbmQgb3BlcmFuZFxuICogQHJldHVybnMgb3V0IHtudW1iZXJbXX0gKG1hdCA1eDQpXG4gKi9cbkNvbG9yTWF0cml4RmlsdGVyLnByb3RvdHlwZS5fbXVsdGlwbHkgPSBmdW5jdGlvbiAob3V0LCBhLCBiKVxue1xuXG4gICAgLy8gUmVkIENoYW5uZWxcbiAgICBvdXRbMF0gPSAoYVswXSAqIGJbMF0pICsgKGFbMV0gKiBiWzVdKSArIChhWzJdICogYlsxMF0pICsgKGFbM10gKiBiWzE1XSk7XG4gICAgb3V0WzFdID0gKGFbMF0gKiBiWzFdKSArIChhWzFdICogYls2XSkgKyAoYVsyXSAqIGJbMTFdKSArIChhWzNdICogYlsxNl0pO1xuICAgIG91dFsyXSA9IChhWzBdICogYlsyXSkgKyAoYVsxXSAqIGJbN10pICsgKGFbMl0gKiBiWzEyXSkgKyAoYVszXSAqIGJbMTddKTtcbiAgICBvdXRbM10gPSAoYVswXSAqIGJbM10pICsgKGFbMV0gKiBiWzhdKSArIChhWzJdICogYlsxM10pICsgKGFbM10gKiBiWzE4XSk7XG4gICAgb3V0WzRdID0gKGFbMF0gKiBiWzRdKSArIChhWzFdICogYls5XSkgKyAoYVsyXSAqIGJbMTRdKSArIChhWzNdICogYlsxOV0pO1xuXG4gICAgLy8gR3JlZW4gQ2hhbm5lbFxuICAgIG91dFs1XSA9IChhWzVdICogYlswXSkgKyAoYVs2XSAqIGJbNV0pICsgKGFbN10gKiBiWzEwXSkgKyAoYVs4XSAqIGJbMTVdKTtcbiAgICBvdXRbNl0gPSAoYVs1XSAqIGJbMV0pICsgKGFbNl0gKiBiWzZdKSArIChhWzddICogYlsxMV0pICsgKGFbOF0gKiBiWzE2XSk7XG4gICAgb3V0WzddID0gKGFbNV0gKiBiWzJdKSArIChhWzZdICogYls3XSkgKyAoYVs3XSAqIGJbMTJdKSArIChhWzhdICogYlsxN10pO1xuICAgIG91dFs4XSA9IChhWzVdICogYlszXSkgKyAoYVs2XSAqIGJbOF0pICsgKGFbN10gKiBiWzEzXSkgKyAoYVs4XSAqIGJbMThdKTtcbiAgICBvdXRbOV0gPSAoYVs1XSAqIGJbNF0pICsgKGFbNl0gKiBiWzldKSArIChhWzddICogYlsxNF0pICsgKGFbOF0gKiBiWzE5XSk7XG5cbiAgICAvLyBCbHVlIENoYW5uZWxcbiAgICBvdXRbMTBdID0gKGFbMTBdICogYlswXSkgKyAoYVsxMV0gKiBiWzVdKSArIChhWzEyXSAqIGJbMTBdKSArIChhWzEzXSAqIGJbMTVdKTtcbiAgICBvdXRbMTFdID0gKGFbMTBdICogYlsxXSkgKyAoYVsxMV0gKiBiWzZdKSArIChhWzEyXSAqIGJbMTFdKSArIChhWzEzXSAqIGJbMTZdKTtcbiAgICBvdXRbMTJdID0gKGFbMTBdICogYlsyXSkgKyAoYVsxMV0gKiBiWzddKSArIChhWzEyXSAqIGJbMTJdKSArIChhWzEzXSAqIGJbMTddKTtcbiAgICBvdXRbMTNdID0gKGFbMTBdICogYlszXSkgKyAoYVsxMV0gKiBiWzhdKSArIChhWzEyXSAqIGJbMTNdKSArIChhWzEzXSAqIGJbMThdKTtcbiAgICBvdXRbMTRdID0gKGFbMTBdICogYls0XSkgKyAoYVsxMV0gKiBiWzldKSArIChhWzEyXSAqIGJbMTRdKSArIChhWzEzXSAqIGJbMTldKTtcblxuICAgIC8vIEFscGhhIENoYW5uZWxcbiAgICBvdXRbMTVdID0gKGFbMTVdICogYlswXSkgKyAoYVsxNl0gKiBiWzVdKSArIChhWzE3XSAqIGJbMTBdKSArIChhWzE4XSAqIGJbMTVdKTtcbiAgICBvdXRbMTZdID0gKGFbMTVdICogYlsxXSkgKyAoYVsxNl0gKiBiWzZdKSArIChhWzE3XSAqIGJbMTFdKSArIChhWzE4XSAqIGJbMTZdKTtcbiAgICBvdXRbMTddID0gKGFbMTVdICogYlsyXSkgKyAoYVsxNl0gKiBiWzddKSArIChhWzE3XSAqIGJbMTJdKSArIChhWzE4XSAqIGJbMTddKTtcbiAgICBvdXRbMThdID0gKGFbMTVdICogYlszXSkgKyAoYVsxNl0gKiBiWzhdKSArIChhWzE3XSAqIGJbMTNdKSArIChhWzE4XSAqIGJbMThdKTtcbiAgICBvdXRbMTldID0gKGFbMTVdICogYls0XSkgKyAoYVsxNl0gKiBiWzldKSArIChhWzE3XSAqIGJbMTRdKSArIChhWzE4XSAqIGJbMTldKTtcblxuICAgIHJldHVybiBvdXQ7XG59O1xuXG4vKipcbiAqIENyZWF0ZSBhIEZsb2F0MzIgQXJyYXkgYW5kIG5vcm1hbGl6ZSB0aGUgb2Zmc2V0IGNvbXBvbmVudCB0byAwLTFcbiAqXG4gKiBAcGFyYW0gbWF0cml4IHtudW1iZXJbXX0gKG1hdCA1eDQpXG4gKiBAcmV0dXJuIG0ge251bWJlcltdfSAobWF0IDV4NCkgd2l0aCBhbGwgdmFsdWVzIGJldHdlZW4gMC0xXG4gKi9cbkNvbG9yTWF0cml4RmlsdGVyLnByb3RvdHlwZS5fY29sb3JNYXRyaXggPSBmdW5jdGlvbiAobWF0cml4KVxue1xuICAgIC8vIENyZWF0ZSBhIEZsb2F0MzIgQXJyYXkgYW5kIG5vcm1hbGl6ZSB0aGUgb2Zmc2V0IGNvbXBvbmVudCB0byAwLTFcbiAgICB2YXIgbSA9IG5ldyBGbG9hdDMyQXJyYXkobWF0cml4KTtcbiAgICBtWzRdIC89IDI1NTtcbiAgICBtWzldIC89IDI1NTtcbiAgICBtWzE0XSAvPSAyNTU7XG4gICAgbVsxOV0gLz0gMjU1O1xuXG4gICAgcmV0dXJuIG07XG59O1xuXG4vKipcbiAqIEFkanVzdHMgYnJpZ2h0bmVzc1xuICpcbiAqIEBwYXJhbSBiIHtudW1iZXJ9IHZhbHVlIG9mIHRoZSBicmlndGhuZXNzICgwIGlzIGJsYWNrKVxuICogQHBhcmFtIG11bHRpcGx5IHtib29sZWFufSByZWZlciB0byAuX2xvYWRNYXRyaXgoKSBtZXRob2RcbiAqL1xuQ29sb3JNYXRyaXhGaWx0ZXIucHJvdG90eXBlLmJyaWdodG5lc3MgPSBmdW5jdGlvbiAoYiwgbXVsdGlwbHkpXG57XG4gICAgdmFyIG1hdHJpeCA9IFtcbiAgICAgICAgYiwgMCwgMCwgMCwgMCxcbiAgICAgICAgMCwgYiwgMCwgMCwgMCxcbiAgICAgICAgMCwgMCwgYiwgMCwgMCxcbiAgICAgICAgMCwgMCwgMCwgMSwgMFxuICAgIF07XG5cbiAgICB0aGlzLl9sb2FkTWF0cml4KG1hdHJpeCwgbXVsdGlwbHkpO1xufTtcblxuLyoqXG4gKiBTZXQgdGhlIG1hdHJpY2VzIGluIGdyZXkgc2NhbGVzXG4gKlxuICogQHBhcmFtIHNjYWxlIHtudW1iZXJ9IHZhbHVlIG9mIHRoZSBncmV5ICgwIGlzIGJsYWNrKVxuICogQHBhcmFtIG11bHRpcGx5IHtib29sZWFufSByZWZlciB0byAuX2xvYWRNYXRyaXgoKSBtZXRob2RcbiAqL1xuQ29sb3JNYXRyaXhGaWx0ZXIucHJvdG90eXBlLmdyZXlzY2FsZSA9IGZ1bmN0aW9uIChzY2FsZSwgbXVsdGlwbHkpXG57XG4gICAgdmFyIG1hdHJpeCA9IFtcbiAgICAgICAgc2NhbGUsIHNjYWxlLCBzY2FsZSwgMCwgMCxcbiAgICAgICAgc2NhbGUsIHNjYWxlLCBzY2FsZSwgMCwgMCxcbiAgICAgICAgc2NhbGUsIHNjYWxlLCBzY2FsZSwgMCwgMCxcbiAgICAgICAgMCwgMCwgMCwgMSwgMFxuICAgIF07XG5cbiAgICB0aGlzLl9sb2FkTWF0cml4KG1hdHJpeCwgbXVsdGlwbHkpO1xufTtcbi8vQW1lcmljYW5pemVkIGFsaWFzXG5Db2xvck1hdHJpeEZpbHRlci5wcm90b3R5cGUuZ3JheXNjYWxlID0gQ29sb3JNYXRyaXhGaWx0ZXIucHJvdG90eXBlLmdyZXlzY2FsZTtcblxuLyoqXG4gKiBTZXQgdGhlIGJsYWNrIGFuZCB3aGl0ZSBtYXRyaWNlXG4gKiBNdWx0aXBseSB0aGUgY3VycmVudCBtYXRyaXhcbiAqXG4gKiBAcGFyYW0gbXVsdGlwbHkge2Jvb2xlYW59IHJlZmVyIHRvIC5fbG9hZE1hdHJpeCgpIG1ldGhvZFxuICovXG5Db2xvck1hdHJpeEZpbHRlci5wcm90b3R5cGUuYmxhY2tBbmRXaGl0ZSA9IGZ1bmN0aW9uIChtdWx0aXBseSlcbntcbiAgICB2YXIgbWF0cml4ID0gW1xuICAgICAgICAwLjMsIDAuNiwgMC4xLCAwLCAwLFxuICAgICAgICAwLjMsIDAuNiwgMC4xLCAwLCAwLFxuICAgICAgICAwLjMsIDAuNiwgMC4xLCAwLCAwLFxuICAgICAgICAwLCAwLCAwLCAxLCAwXG4gICAgXTtcblxuICAgIHRoaXMuX2xvYWRNYXRyaXgobWF0cml4LCBtdWx0aXBseSk7XG59O1xuXG4vKipcbiAqIFNldCB0aGUgaHVlIHByb3BlcnR5IG9mIHRoZSBjb2xvclxuICpcbiAqIEBwYXJhbSByb3RhdGlvbiB7bnVtYmVyfSBpbiBkZWdyZWVzXG4gKiBAcGFyYW0gbXVsdGlwbHkge2Jvb2xlYW59IHJlZmVyIHRvIC5fbG9hZE1hdHJpeCgpIG1ldGhvZFxuICovXG5Db2xvck1hdHJpeEZpbHRlci5wcm90b3R5cGUuaHVlID0gZnVuY3Rpb24gKHJvdGF0aW9uLCBtdWx0aXBseSlcbntcbiAgICByb3RhdGlvbiA9IChyb3RhdGlvbiB8fCAwKSAvIDE4MCAqIE1hdGguUEk7XG4gICAgdmFyIGNvcyA9IE1hdGguY29zKHJvdGF0aW9uKSxcbiAgICAgICAgc2luID0gTWF0aC5zaW4ocm90YXRpb24pO1xuXG4gICAgLy8gbHVtaW5hbmNlUmVkLCBsdW1pbmFuY2VHcmVlbiwgbHVtaW5hbmNlQmx1ZVxuICAgIHZhciBsdW1SID0gMC4yMTMsIC8vIG9yIDAuMzA4NlxuICAgICAgICBsdW1HID0gMC43MTUsIC8vIG9yIDAuNjA5NFxuICAgICAgICBsdW1CID0gMC4wNzI7IC8vIG9yIDAuMDgyMFxuXG4gICAgdmFyIG1hdHJpeCA9IFtcbiAgICAgICAgbHVtUiArIGNvcyAqICgxIC0gbHVtUikgKyBzaW4gKiAoLWx1bVIpLCBsdW1HICsgY29zICogKC1sdW1HKSArIHNpbiAqICgtbHVtRyksIGx1bUIgKyBjb3MgKiAoLWx1bUIpICsgc2luICogKDEgLSBsdW1CKSwgMCwgMCxcbiAgICAgICAgbHVtUiArIGNvcyAqICgtbHVtUikgKyBzaW4gKiAoMC4xNDMpLCBsdW1HICsgY29zICogKDEgLSBsdW1HKSArIHNpbiAqICgwLjE0MCksIGx1bUIgKyBjb3MgKiAoLWx1bUIpICsgc2luICogKC0wLjI4MyksIDAsIDAsXG4gICAgICAgIGx1bVIgKyBjb3MgKiAoLWx1bVIpICsgc2luICogKC0oMSAtIGx1bVIpKSwgbHVtRyArIGNvcyAqICgtbHVtRykgKyBzaW4gKiAobHVtRyksIGx1bUIgKyBjb3MgKiAoMSAtIGx1bUIpICsgc2luICogKGx1bUIpLCAwLCAwLFxuICAgICAgICAwLCAwLCAwLCAxLCAwXG4gICAgXTtcblxuICAgIHRoaXMuX2xvYWRNYXRyaXgobWF0cml4LCBtdWx0aXBseSk7XG59O1xuXG5cbi8qKlxuICogU2V0IHRoZSBjb250cmFzdCBtYXRyaXgsIGluY3JlYXNlIHRoZSBzZXBhcmF0aW9uIGJldHdlZW4gZGFyayBhbmQgYnJpZ2h0XG4gKiBJbmNyZWFzZSBjb250cmFzdCA6IHNoYWRvd3MgZGFya2VyIGFuZCBoaWdobGlnaHRzIGJyaWdodGVyXG4gKiBEZWNyZWFzZSBjb250cmFzdCA6IGJyaW5nIHRoZSBzaGFkb3dzIHVwIGFuZCB0aGUgaGlnaGxpZ2h0cyBkb3duXG4gKlxuICogQHBhcmFtIGFtb3VudCB7bnVtYmVyfSB2YWx1ZSBvZiB0aGUgY29udHJhc3RcbiAqIEBwYXJhbSBtdWx0aXBseSB7Ym9vbGVhbn0gcmVmZXIgdG8gLl9sb2FkTWF0cml4KCkgbWV0aG9kXG4gKi9cbkNvbG9yTWF0cml4RmlsdGVyLnByb3RvdHlwZS5jb250cmFzdCA9IGZ1bmN0aW9uIChhbW91bnQsIG11bHRpcGx5KVxue1xuICAgIHZhciB2ID0gKGFtb3VudCB8fCAwKSArIDE7XG4gICAgdmFyIG8gPSAtMTI4ICogKHYgLSAxKTtcblxuICAgIHZhciBtYXRyaXggPSBbXG4gICAgICAgIHYsIDAsIDAsIDAsIG8sXG4gICAgICAgIDAsIHYsIDAsIDAsIG8sXG4gICAgICAgIDAsIDAsIHYsIDAsIG8sXG4gICAgICAgIDAsIDAsIDAsIDEsIDBcbiAgICBdO1xuXG4gICAgdGhpcy5fbG9hZE1hdHJpeChtYXRyaXgsIG11bHRpcGx5KTtcbn07XG5cbi8qKlxuICogU2V0IHRoZSBzYXR1cmF0aW9uIG1hdHJpeCwgaW5jcmVhc2UgdGhlIHNlcGFyYXRpb24gYmV0d2VlbiBjb2xvcnNcbiAqIEluY3JlYXNlIHNhdHVyYXRpb24gOiBpbmNyZWFzZSBjb250cmFzdCwgYnJpZ2h0bmVzcywgYW5kIHNoYXJwbmVzc1xuICpcbiAqIEBwYXJhbSBhbW91bnQge251bWJlcn1cbiAqIEBwYXJhbSBtdWx0aXBseSB7Ym9vbGVhbn0gcmVmZXIgdG8gLl9sb2FkTWF0cml4KCkgbWV0aG9kXG4gKi9cbkNvbG9yTWF0cml4RmlsdGVyLnByb3RvdHlwZS5zYXR1cmF0ZSA9IGZ1bmN0aW9uIChhbW91bnQsIG11bHRpcGx5KVxue1xuICAgIHZhciB4ID0gKGFtb3VudCB8fCAwKSAqIDIgLyAzICsgMTtcbiAgICB2YXIgeSA9ICgoeCAtIDEpICogLTAuNSk7XG5cbiAgICB2YXIgbWF0cml4ID0gW1xuICAgICAgICB4LCB5LCB5LCAwLCAwLFxuICAgICAgICB5LCB4LCB5LCAwLCAwLFxuICAgICAgICB5LCB5LCB4LCAwLCAwLFxuICAgICAgICAwLCAwLCAwLCAxLCAwXG4gICAgXTtcblxuICAgIHRoaXMuX2xvYWRNYXRyaXgobWF0cml4LCBtdWx0aXBseSk7XG59O1xuXG4vKipcbiAqIERlc2F0dXJhdGUgaW1hZ2UgKHJlbW92ZSBjb2xvcilcbiAqXG4gKiBDYWxsIHRoZSBzYXR1cmF0ZSBmdW5jdGlvblxuICpcbiAqIEBwYXJhbSBtdWx0aXBseSB7Ym9vbGVhbn0gcmVmZXIgdG8gLl9sb2FkTWF0cml4KCkgbWV0aG9kXG4gKi9cbkNvbG9yTWF0cml4RmlsdGVyLnByb3RvdHlwZS5kZXNhdHVyYXRlID0gZnVuY3Rpb24gKG11bHRpcGx5KSAvLyBqc2hpbnQgdW51c2VkOmZhbHNlXG57XG4gICAgdGhpcy5zYXR1cmF0ZSgtMSk7XG59O1xuXG4vKipcbiAqIE5lZ2F0aXZlIGltYWdlIChpbnZlcnNlIG9mIGNsYXNzaWMgcmdiIG1hdHJpeClcbiAqXG4gKiBAcGFyYW0gbXVsdGlwbHkge2Jvb2xlYW59IHJlZmVyIHRvIC5fbG9hZE1hdHJpeCgpIG1ldGhvZFxuICovXG5Db2xvck1hdHJpeEZpbHRlci5wcm90b3R5cGUubmVnYXRpdmUgPSBmdW5jdGlvbiAobXVsdGlwbHkpXG57XG4gICAgdmFyIG1hdHJpeCA9IFtcbiAgICAgICAgMCwgMSwgMSwgMCwgMCxcbiAgICAgICAgMSwgMCwgMSwgMCwgMCxcbiAgICAgICAgMSwgMSwgMCwgMCwgMCxcbiAgICAgICAgMCwgMCwgMCwgMSwgMFxuICAgIF07XG5cbiAgICB0aGlzLl9sb2FkTWF0cml4KG1hdHJpeCwgbXVsdGlwbHkpO1xufTtcblxuLyoqXG4gKiBTZXBpYSBpbWFnZVxuICpcbiAqIEBwYXJhbSBtdWx0aXBseSB7Ym9vbGVhbn0gcmVmZXIgdG8gLl9sb2FkTWF0cml4KCkgbWV0aG9kXG4gKi9cbkNvbG9yTWF0cml4RmlsdGVyLnByb3RvdHlwZS5zZXBpYSA9IGZ1bmN0aW9uIChtdWx0aXBseSlcbntcbiAgICB2YXIgbWF0cml4ID0gW1xuICAgICAgICAwLjM5MywgMC43Njg5OTk5LCAwLjE4ODk5OTk5LCAwLCAwLFxuICAgICAgICAwLjM0OSwgMC42ODU5OTk5LCAwLjE2Nzk5OTk5LCAwLCAwLFxuICAgICAgICAwLjI3MiwgMC41MzM5OTk5LCAwLjEzMDk5OTk5LCAwLCAwLFxuICAgICAgICAwLCAwLCAwLCAxLCAwXG4gICAgXTtcblxuICAgIHRoaXMuX2xvYWRNYXRyaXgobWF0cml4LCBtdWx0aXBseSk7XG59O1xuXG4vKipcbiAqIENvbG9yIG1vdGlvbiBwaWN0dXJlIHByb2Nlc3MgaW52ZW50ZWQgaW4gMTkxNiAodGhhbmtzIERvbWluaWMgU3phYmxld3NraSlcbiAqXG4gKiBAcGFyYW0gbXVsdGlwbHkge2Jvb2xlYW59IHJlZmVyIHRvIC5fbG9hZE1hdHJpeCgpIG1ldGhvZFxuICovXG5Db2xvck1hdHJpeEZpbHRlci5wcm90b3R5cGUudGVjaG5pY29sb3IgPSBmdW5jdGlvbiAobXVsdGlwbHkpXG57XG4gICAgdmFyIG1hdHJpeCA9IFtcbiAgICAgICAgMS45MTI1Mjc3ODkxNDU2MDgzLCAtMC44NTQ1MzQ0OTc2OTUxNjQ1LCAtMC4wOTE1NTUwODQ4Mjc1NTU4NSwgMCwgMTEuNzkzNjAzNDM0Mzc3MzM3LFxuICAgICAgICAtMC4zMDg3ODMzMzg1OTI4MDk3LCAxLjc2NTg5MDg1NTU0NTg0MjgsIC0wLjEwNjAxNzQzMDc0NzIyMjQ1LCAwLCAtNzAuMzUyMDUxNjE0NjEzOTgsXG4gICAgICAgIC0wLjIzMTEwMzM3NzU0ODYxNiwgLTAuNzUwMTg5OTE5NzQ0MDIxMiwgMS44NDc1OTc4MTYxMDgxODksIDAsIDMwLjk1MDk0MDg2OTQ5MTEzOCxcbiAgICAgICAgMCwgMCwgMCwgMSwgMFxuICAgIF07XG5cbiAgICB0aGlzLl9sb2FkTWF0cml4KG1hdHJpeCwgbXVsdGlwbHkpO1xufTtcblxuLyoqXG4gKiBQb2xhcm9pZCBmaWx0ZXJcbiAqXG4gKiBAcGFyYW0gbXVsdGlwbHkge2Jvb2xlYW59IHJlZmVyIHRvIC5fbG9hZE1hdHJpeCgpIG1ldGhvZFxuICovXG5Db2xvck1hdHJpeEZpbHRlci5wcm90b3R5cGUucG9sYXJvaWQgPSBmdW5jdGlvbiAobXVsdGlwbHkpXG57XG4gICAgdmFyIG1hdHJpeCA9IFtcbiAgICAgICAgMS40MzgsIC0wLjA2MiwgLTAuMDYyLCAwLCAwLFxuICAgICAgICAtMC4xMjIsIDEuMzc4LCAtMC4xMjIsIDAsIDAsXG4gICAgICAgIC0wLjAxNiwgLTAuMDE2LCAxLjQ4MywgMCwgMCxcbiAgICAgICAgMCwgMCwgMCwgMSwgMFxuICAgIF07XG5cbiAgICB0aGlzLl9sb2FkTWF0cml4KG1hdHJpeCwgbXVsdGlwbHkpO1xufTtcblxuLyoqXG4gKiBGaWx0ZXIgd2hvIHRyYW5zZm9ybXMgOiBSZWQgLT4gQmx1ZSBhbmQgQmx1ZSAtPiBSZWRcbiAqXG4gKiBAcGFyYW0gbXVsdGlwbHkge2Jvb2xlYW59IHJlZmVyIHRvIC5fbG9hZE1hdHJpeCgpIG1ldGhvZFxuICovXG5Db2xvck1hdHJpeEZpbHRlci5wcm90b3R5cGUudG9CR1IgPSBmdW5jdGlvbiAobXVsdGlwbHkpXG57XG4gICAgdmFyIG1hdHJpeCA9IFtcbiAgICAgICAgMCwgMCwgMSwgMCwgMCxcbiAgICAgICAgMCwgMSwgMCwgMCwgMCxcbiAgICAgICAgMSwgMCwgMCwgMCwgMCxcbiAgICAgICAgMCwgMCwgMCwgMSwgMFxuICAgIF07XG5cbiAgICB0aGlzLl9sb2FkTWF0cml4KG1hdHJpeCwgbXVsdGlwbHkpO1xufTtcblxuLyoqXG4gKiBDb2xvciByZXZlcnNhbCBmaWxtIGludHJvZHVjZWQgYnkgRWFzdG1hbiBLb2RhayBpbiAxOTM1LiAodGhhbmtzIERvbWluaWMgU3phYmxld3NraSlcbiAqXG4gKiBAcGFyYW0gbXVsdGlwbHkge2Jvb2xlYW59IHJlZmVyIHRvIC5fbG9hZE1hdHJpeCgpIG1ldGhvZFxuICovXG5Db2xvck1hdHJpeEZpbHRlci5wcm90b3R5cGUua29kYWNocm9tZSA9IGZ1bmN0aW9uIChtdWx0aXBseSlcbntcbiAgICB2YXIgbWF0cml4ID0gW1xuICAgICAgICAxLjEyODU1ODIzOTY1OTM1MjUsIC0wLjM5NjczODIyODM2MDEzNDgsIC0wLjAzOTkyNTU5MTcyOTIxNzkzLCAwLCA2My43Mjk1ODc2MjE5NjUwMixcbiAgICAgICAgLTAuMTY0MDQzMzk5NjIyNDQ2MTYsIDEuMDgzNTI1MTU2NjI5MTMwNCwgLTAuMDU0OTg4MDUxMTU2MzMxMzIsIDAsIDI0LjczMjQwNzg5NjcwNjIwMyxcbiAgICAgICAgLTAuMTY3ODYwMTA3MDYxNTU3NjMsIC0wLjU2MDM0MTYyNzc2OTUyNDgsIDEuNjAxNDg1MDc2MTk2NDk0MywgMCwgMzUuNjI5ODI4MDc0NjA5NDYsXG4gICAgICAgIDAsIDAsIDAsIDEsIDBcbiAgICBdO1xuXG4gICAgdGhpcy5fbG9hZE1hdHJpeChtYXRyaXgsIG11bHRpcGx5KTtcbn07XG5cbi8qKlxuICogQnJvd24gZGVsaWNpb3VzIGJyb3duaSBmaWx0ZXIgKHRoYW5rcyBEb21pbmljIFN6YWJsZXdza2kpXG4gKlxuICogQHBhcmFtIG11bHRpcGx5IHtib29sZWFufSByZWZlciB0byAuX2xvYWRNYXRyaXgoKSBtZXRob2RcbiAqL1xuQ29sb3JNYXRyaXhGaWx0ZXIucHJvdG90eXBlLmJyb3duaSA9IGZ1bmN0aW9uIChtdWx0aXBseSlcbntcbiAgICB2YXIgbWF0cml4ID0gW1xuICAgICAgICAwLjU5OTcwMjM0OTgxNTk3MTUsIDAuMzQ1NTMyNDMwNDgzOTEyNjMsIC0wLjI3MDgyOTg2NzQ1MzgwNDIsIDAsIDQ3LjQzMTkyODU1NjAwODczLFxuICAgICAgICAtMC4wMzc3MDMyNDk4Mzc3ODMxNTcsIDAuODYwOTU3NzU4Nzk5MjY0MSwgMC4xNTA1OTU1MjM4ODQ1OTkxMywgMCwgLTM2Ljk2ODQxNDk4MzE5MTI3LFxuICAgICAgICAwLjI0MTEzNjM1MTI4MTUzMzM1LCAtMC4wNzQ0MTAzNzkwODQyMjQ5MiwgMC40NDk3MjE4MjA2NDg3NzE1MywgMCwgLTcuNTYyMDc1Mjc3NTkxMjgzLFxuICAgICAgICAwLCAwLCAwLCAxLCAwXG4gICAgXTtcblxuICAgIHRoaXMuX2xvYWRNYXRyaXgobWF0cml4LCBtdWx0aXBseSk7XG59O1xuXG4vKlxuICogVmludGFnZSBmaWx0ZXIgKHRoYW5rcyBEb21pbmljIFN6YWJsZXdza2kpXG4gKlxuICogQHBhcmFtIG11bHRpcGx5IHtib29sZWFufSByZWZlciB0byAuX2xvYWRNYXRyaXgoKSBtZXRob2RcbiAqL1xuQ29sb3JNYXRyaXhGaWx0ZXIucHJvdG90eXBlLnZpbnRhZ2UgPSBmdW5jdGlvbiAobXVsdGlwbHkpXG57XG4gICAgdmFyIG1hdHJpeCA9IFtcbiAgICAgICAgMC42Mjc5MzQ1NjM1NjA1OTk0LCAwLjMyMDIxODM0MjA4MTkzNjcsIC0wLjAzOTY1NDA4MjExMzEyNDUzLCAwLCA5LjY1MTI4NTgzNTI5NDEyMyxcbiAgICAgICAgMC4wMjU3ODM5NzcwNDgwODg2OCwgMC42NDQxMTg4NjQ0Mzc0NzcxLCAwLjAzMjU5MTI3NjE2MTQ5Mjk0LCAwLCA3LjQ2MjgyOTE3NjQ3MDU5MSxcbiAgICAgICAgMC4wNDY2MDU1NTU2NzgyNzE5LCAtMC4wODUxMjMyOTg3MjQ3ODkxLCAwLjUyNDE2NDgwMTg3MDA0NjUsIDAsIDUuMTU5MTkwNTg4MjM1Mjk2LFxuICAgICAgICAwLCAwLCAwLCAxLCAwXG4gICAgXTtcblxuICAgIHRoaXMuX2xvYWRNYXRyaXgobWF0cml4LCBtdWx0aXBseSk7XG59O1xuXG4vKlxuICogV2UgZG9uJ3Qga25vdyBleGFjdGx5IHdoYXQgaXQgZG9lcywga2luZCBvZiBncmFkaWVudCBtYXAsIGJ1dCBmdW5ueSB0byBwbGF5IHdpdGghXG4gKlxuICogQHBhcmFtIGRlc2F0dXJhdGlvbiB7bnVtYmVyfVxuICogQHBhcmFtIHRvbmVkIHtudW1iZXJ9XG4gKiBAcGFyYW0gbGlnaHRDb2xvciB7c3RyaW5nfSAoZXhhbXBsZSA6IFwiMHhGRkU1ODBcIilcbiAqIEBwYXJhbSBkYXJrQ29sb3Ige3N0cmluZ30gIChleGFtcGxlIDogXCIweEZGRTU4MFwiKVxuICpcbiAqIEBwYXJhbSBtdWx0aXBseSB7Ym9vbGVhbn0gcmVmZXIgdG8gLl9sb2FkTWF0cml4KCkgbWV0aG9kXG4gKi9cbkNvbG9yTWF0cml4RmlsdGVyLnByb3RvdHlwZS5jb2xvclRvbmUgPSBmdW5jdGlvbiAoZGVzYXR1cmF0aW9uLCB0b25lZCwgbGlnaHRDb2xvciwgZGFya0NvbG9yLCBtdWx0aXBseSlcbntcbiAgICBkZXNhdHVyYXRpb24gPSBkZXNhdHVyYXRpb24gfHwgMC4yO1xuICAgIHRvbmVkID0gdG9uZWQgfHwgMC4xNTtcbiAgICBsaWdodENvbG9yID0gbGlnaHRDb2xvciB8fCAweEZGRTU4MDtcbiAgICBkYXJrQ29sb3IgPSBkYXJrQ29sb3IgfHwgMHgzMzgwMDA7XG5cbiAgICB2YXIgbFIgPSAoKGxpZ2h0Q29sb3IgPj4gMTYpICYgMHhGRikgLyAyNTU7XG4gICAgdmFyIGxHID0gKChsaWdodENvbG9yID4+IDgpICYgMHhGRikgLyAyNTU7XG4gICAgdmFyIGxCID0gKGxpZ2h0Q29sb3IgJiAweEZGKSAvIDI1NTtcblxuICAgIHZhciBkUiA9ICgoZGFya0NvbG9yID4+IDE2KSAmIDB4RkYpIC8gMjU1O1xuICAgIHZhciBkRyA9ICgoZGFya0NvbG9yID4+IDgpICYgMHhGRikgLyAyNTU7XG4gICAgdmFyIGRCID0gKGRhcmtDb2xvciAmIDB4RkYpIC8gMjU1O1xuXG4gICAgdmFyIG1hdHJpeCA9IFtcbiAgICAgICAgMC4zLCAwLjU5LCAwLjExLCAwLCAwLFxuICAgICAgICBsUiwgbEcsIGxCLCBkZXNhdHVyYXRpb24sIDAsXG4gICAgICAgIGRSLCBkRywgZEIsIHRvbmVkLCAwLFxuICAgICAgICBsUiAtIGRSLCBsRyAtIGRHLCBsQiAtIGRCLCAwLCAwXG4gICAgXTtcblxuICAgIHRoaXMuX2xvYWRNYXRyaXgobWF0cml4LCBtdWx0aXBseSk7XG59O1xuXG4vKlxuICogTmlnaHQgZWZmZWN0XG4gKlxuICogQHBhcmFtIGludGVuc2l0eSB7bnVtYmVyfVxuICogQHBhcmFtIG11bHRpcGx5IHtib29sZWFufSByZWZlciB0byAuX2xvYWRNYXRyaXgoKSBtZXRob2RcbiAqL1xuQ29sb3JNYXRyaXhGaWx0ZXIucHJvdG90eXBlLm5pZ2h0ID0gZnVuY3Rpb24gKGludGVuc2l0eSwgbXVsdGlwbHkpXG57XG4gICAgaW50ZW5zaXR5ID0gaW50ZW5zaXR5IHx8IDAuMTtcbiAgICB2YXIgbWF0cml4ID0gW1xuICAgICAgICBpbnRlbnNpdHkgKiAoIC0yLjApLCAtaW50ZW5zaXR5LCAwLCAwLCAwLFxuICAgICAgICAtaW50ZW5zaXR5LCAwLCBpbnRlbnNpdHksIDAsIDAsXG4gICAgICAgIDAsIGludGVuc2l0eSwgaW50ZW5zaXR5ICogMi4wLCAwLCAwLFxuICAgICAgICAwLCAwLCAwLCAxLCAwXG4gICAgXTtcblxuICAgIHRoaXMuX2xvYWRNYXRyaXgobWF0cml4LCBtdWx0aXBseSk7XG59O1xuXG5cbi8qXG4gKiBQcmVkYXRvciBlZmZlY3RcbiAqXG4gKiBFcmFzZSB0aGUgY3VycmVudCBtYXRyaXggYnkgc2V0dGluZyBhIG5ldyBpbmRlcGVudCBvbmVcbiAqXG4gKiBAcGFyYW0gYW1vdW50IHtudW1iZXJ9IGhvdyBtdWNoIHRoZSBwcmVkYXRvciBmZWVscyBoaXMgZnV0dXJlIHZpY3RpbVxuICogQHBhcmFtIG11bHRpcGx5IHtib29sZWFufSByZWZlciB0byAuX2xvYWRNYXRyaXgoKSBtZXRob2RcbiAqL1xuQ29sb3JNYXRyaXhGaWx0ZXIucHJvdG90eXBlLnByZWRhdG9yID0gZnVuY3Rpb24gKGFtb3VudCwgbXVsdGlwbHkpXG57XG4gICAgdmFyIG1hdHJpeCA9IFtcbiAgICAgICAgMTEuMjI0MTMwNjMwNDkzMTY0ICogYW1vdW50LCAtNC43OTQ0ODY5OTk1MTE3MTkgKiBhbW91bnQsIC0yLjg3NDYxMTg1NDU1MzIyMjcgKiBhbW91bnQsIDAgKiBhbW91bnQsIDAuNDAzNDI0MzgyMjA5Nzc3ODMgKiBhbW91bnQsXG4gICAgICAgIC0zLjYzMzA2OTc1MzY0Njg1MDYgKiBhbW91bnQsIDkuMTkzMTU3MTk2MDQ0OTIyICogYW1vdW50LCAtMi45NTE4MTA4MzY3OTE5OTIgKiBhbW91bnQsIDAgKiBhbW91bnQsIC0xLjMxNjEzNTA0ODg2NjI3MiAqIGFtb3VudCxcbiAgICAgICAgLTMuMjE4NDE5NzkwMjY3OTQ0MyAqIGFtb3VudCwgLTQuMjM3NTAzMDUxNzU3ODEyNSAqIGFtb3VudCwgNy40NzY0NDgwNTkwODIwMzEgKiBhbW91bnQsIDAgKiBhbW91bnQsIDAuODA0NDQ1OTIyMzc0NzI1MyAqIGFtb3VudCxcbiAgICAgICAgMCwgMCwgMCwgMSwgMFxuICAgIF07XG5cbiAgICB0aGlzLl9sb2FkTWF0cml4KG1hdHJpeCwgbXVsdGlwbHkpO1xufTtcblxuLypcbiAqIExTRCBlZmZlY3RcbiAqXG4gKiBNdWx0aXBseSB0aGUgY3VycmVudCBtYXRyaXhcbiAqXG4gKiBAcGFyYW0gYW1vdW50IHtudW1iZXJ9IEhvdyBjcmF6eSBpcyB5b3VyIGVmZmVjdFxuICogQHBhcmFtIG11bHRpcGx5IHtib29sZWFufSByZWZlciB0byAuX2xvYWRNYXRyaXgoKSBtZXRob2RcbiAqL1xuQ29sb3JNYXRyaXhGaWx0ZXIucHJvdG90eXBlLmxzZCA9IGZ1bmN0aW9uIChtdWx0aXBseSlcbntcbiAgICB2YXIgbWF0cml4ID0gW1xuICAgICAgICAyLCAtMC40LCAwLjUsIDAsIDAsXG4gICAgICAgIC0wLjUsIDIsIC0wLjQsIDAsIDAsXG4gICAgICAgIC0wLjQsIC0wLjUsIDMsIDAsIDAsXG4gICAgICAgIDAsIDAsIDAsIDEsIDBcbiAgICBdO1xuXG4gICAgdGhpcy5fbG9hZE1hdHJpeChtYXRyaXgsIG11bHRpcGx5KTtcbn07XG5cbi8qXG4gKiBFcmFzZSB0aGUgY3VycmVudCBtYXRyaXggYnkgc2V0dGluZyB0aGUgZGVmYXVsdCBvbmVcbiAqXG4gKi9cbkNvbG9yTWF0cml4RmlsdGVyLnByb3RvdHlwZS5yZXNldCA9IGZ1bmN0aW9uICgpXG57XG4gICAgdmFyIG1hdHJpeCA9IFtcbiAgICAgICAgMSwgMCwgMCwgMCwgMCxcbiAgICAgICAgMCwgMSwgMCwgMCwgMCxcbiAgICAgICAgMCwgMCwgMSwgMCwgMCxcbiAgICAgICAgMCwgMCwgMCwgMSwgMFxuICAgIF07XG5cbiAgICB0aGlzLl9sb2FkTWF0cml4KG1hdHJpeCwgZmFsc2UpO1xufTtcblxuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhDb2xvck1hdHJpeEZpbHRlci5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBtYXRyaXggb2YgdGhlIGNvbG9yIG1hdHJpeCBmaWx0ZXJcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcltdfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuQ29sb3JNYXRyaXhGaWx0ZXIjXG4gICAgICogQGRlZmF1bHQgWzEsIDAsIDAsIDAsIDAsIDAsIDEsIDAsIDAsIDAsIDAsIDAsIDEsIDAsIDAsIDAsIDAsIDAsIDEsIDBdXG4gICAgICovXG4gICAgbWF0cml4OiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudW5pZm9ybXMubS52YWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudW5pZm9ybXMubS52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfVxufSk7XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uLy4uL2NvcmUnKTtcbi8vIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL3N1YnN0YWNrL2JyZnMvaXNzdWVzLzI1XG5cblxuLyoqXG4gKiBUaGlzIGxvd2VycyB0aGUgY29sb3IgZGVwdGggb2YgeW91ciBpbWFnZSBieSB0aGUgZ2l2ZW4gYW1vdW50LCBwcm9kdWNpbmcgYW4gaW1hZ2Ugd2l0aCBhIHNtYWxsZXIgcGFsZXR0ZS5cbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQWJzdHJhY3RGaWx0ZXJcbiAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnNcbiAqL1xuZnVuY3Rpb24gQ29sb3JTdGVwRmlsdGVyKClcbntcbiAgICBjb3JlLkFic3RyYWN0RmlsdGVyLmNhbGwodGhpcyxcbiAgICAgICAgLy8gdmVydGV4IHNoYWRlclxuICAgICAgICBudWxsLFxuICAgICAgICAvLyBmcmFnbWVudCBzaGFkZXJcbiAgICAgICAgXCJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcXG5cXG52YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDtcXG5cXG51bmlmb3JtIHNhbXBsZXIyRCB1U2FtcGxlcjtcXG51bmlmb3JtIGZsb2F0IHN0ZXA7XFxuXFxudm9pZCBtYWluKHZvaWQpXFxue1xcbiAgICB2ZWM0IGNvbG9yID0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2VGV4dHVyZUNvb3JkKTtcXG5cXG4gICAgY29sb3IgPSBmbG9vcihjb2xvciAqIHN0ZXApIC8gc3RlcDtcXG5cXG4gICAgZ2xfRnJhZ0NvbG9yID0gY29sb3I7XFxufVxcblwiLFxuICAgICAgICAvLyBjdXN0b20gdW5pZm9ybXNcbiAgICAgICAge1xuICAgICAgICAgICAgc3RlcDogeyB0eXBlOiAnMWYnLCB2YWx1ZTogNSB9XG4gICAgICAgIH1cbiAgICApO1xufVxuXG5Db2xvclN0ZXBGaWx0ZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShjb3JlLkFic3RyYWN0RmlsdGVyLnByb3RvdHlwZSk7XG5Db2xvclN0ZXBGaWx0ZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gQ29sb3JTdGVwRmlsdGVyO1xubW9kdWxlLmV4cG9ydHMgPSBDb2xvclN0ZXBGaWx0ZXI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKENvbG9yU3RlcEZpbHRlci5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBUaGUgbnVtYmVyIG9mIHN0ZXBzIHRvIHJlZHVjZSB0aGUgcGFsZXR0ZSBieS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLkNvbG9yU3RlcEZpbHRlciNcbiAgICAgKi9cbiAgICBzdGVwOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudW5pZm9ybXMuc3RlcC52YWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudW5pZm9ybXMuc3RlcC52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfVxufSk7XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uLy4uL2NvcmUnKTtcbi8vIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL3N1YnN0YWNrL2JyZnMvaXNzdWVzLzI1XG5cblxuLyoqXG4gKiBUaGUgQ29udm9sdXRpb25GaWx0ZXIgY2xhc3MgYXBwbGllcyBhIG1hdHJpeCBjb252b2x1dGlvbiBmaWx0ZXIgZWZmZWN0LlxuICogQSBjb252b2x1dGlvbiBjb21iaW5lcyBwaXhlbHMgaW4gdGhlIGlucHV0IGltYWdlIHdpdGggbmVpZ2hib3JpbmcgcGl4ZWxzIHRvIHByb2R1Y2UgYSBuZXcgaW1hZ2UuXG4gKiBBIHdpZGUgdmFyaWV0eSBvZiBpbWFnZSBlZmZlY3RzIGNhbiBiZSBhY2hpZXZlZCB0aHJvdWdoIGNvbnZvbHV0aW9ucywgaW5jbHVkaW5nIGJsdXJyaW5nLCBlZGdlXG4gKiBkZXRlY3Rpb24sIHNoYXJwZW5pbmcsIGVtYm9zc2luZywgYW5kIGJldmVsaW5nLiBUaGUgbWF0cml4IHNob3VsZCBiZSBzcGVjaWZpZWQgYXMgYSA5IHBvaW50IEFycmF5LlxuICogU2VlIGh0dHA6Ly9kb2NzLmdpbXAub3JnL2VuL3BsdWctaW4tY29udm1hdHJpeC5odG1sIGZvciBtb3JlIGluZm8uXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLkFic3RyYWN0RmlsdGVyXG4gKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzXG4gKiBAcGFyYW0gbWF0cml4IHtudW1iZXJbXX0gQW4gYXJyYXkgb2YgdmFsdWVzIHVzZWQgZm9yIG1hdHJpeCB0cmFuc2Zvcm1hdGlvbi4gU3BlY2lmaWVkIGFzIGEgOSBwb2ludCBBcnJheS5cbiAqIEBwYXJhbSB3aWR0aCB7bnVtYmVyfSBXaWR0aCBvZiB0aGUgb2JqZWN0IHlvdSBhcmUgdHJhbnNmb3JtaW5nXG4gKiBAcGFyYW0gaGVpZ2h0IHtudW1iZXJ9IEhlaWdodCBvZiB0aGUgb2JqZWN0IHlvdSBhcmUgdHJhbnNmb3JtaW5nXG4gKi9cbmZ1bmN0aW9uIENvbnZvbHV0aW9uRmlsdGVyKG1hdHJpeCwgd2lkdGgsIGhlaWdodClcbntcbiAgICBjb3JlLkFic3RyYWN0RmlsdGVyLmNhbGwodGhpcyxcbiAgICAgICAgLy8gdmVydGV4IHNoYWRlclxuICAgICAgICBudWxsLFxuICAgICAgICAvLyBmcmFnbWVudCBzaGFkZXJcbiAgICAgICAgXCJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcXG5cXG52YXJ5aW5nIG1lZGl1bXAgdmVjMiB2VGV4dHVyZUNvb3JkO1xcblxcbnVuaWZvcm0gc2FtcGxlcjJEIHVTYW1wbGVyO1xcbnVuaWZvcm0gdmVjMiB0ZXhlbFNpemU7XFxudW5pZm9ybSBmbG9hdCBtYXRyaXhbOV07XFxuXFxudm9pZCBtYWluKHZvaWQpXFxue1xcbiAgIHZlYzQgYzExID0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2VGV4dHVyZUNvb3JkIC0gdGV4ZWxTaXplKTsgLy8gdG9wIGxlZnRcXG4gICB2ZWM0IGMxMiA9IHRleHR1cmUyRCh1U2FtcGxlciwgdmVjMih2VGV4dHVyZUNvb3JkLngsIHZUZXh0dXJlQ29vcmQueSAtIHRleGVsU2l6ZS55KSk7IC8vIHRvcCBjZW50ZXJcXG4gICB2ZWM0IGMxMyA9IHRleHR1cmUyRCh1U2FtcGxlciwgdmVjMih2VGV4dHVyZUNvb3JkLnggKyB0ZXhlbFNpemUueCwgdlRleHR1cmVDb29yZC55IC0gdGV4ZWxTaXplLnkpKTsgLy8gdG9wIHJpZ2h0XFxuXFxuICAgdmVjNCBjMjEgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZlYzIodlRleHR1cmVDb29yZC54IC0gdGV4ZWxTaXplLngsIHZUZXh0dXJlQ29vcmQueSkpOyAvLyBtaWQgbGVmdFxcbiAgIHZlYzQgYzIyID0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2VGV4dHVyZUNvb3JkKTsgLy8gbWlkIGNlbnRlclxcbiAgIHZlYzQgYzIzID0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2ZWMyKHZUZXh0dXJlQ29vcmQueCArIHRleGVsU2l6ZS54LCB2VGV4dHVyZUNvb3JkLnkpKTsgLy8gbWlkIHJpZ2h0XFxuXFxuICAgdmVjNCBjMzEgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZlYzIodlRleHR1cmVDb29yZC54IC0gdGV4ZWxTaXplLngsIHZUZXh0dXJlQ29vcmQueSArIHRleGVsU2l6ZS55KSk7IC8vIGJvdHRvbSBsZWZ0XFxuICAgdmVjNCBjMzIgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZlYzIodlRleHR1cmVDb29yZC54LCB2VGV4dHVyZUNvb3JkLnkgKyB0ZXhlbFNpemUueSkpOyAvLyBib3R0b20gY2VudGVyXFxuICAgdmVjNCBjMzMgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZUZXh0dXJlQ29vcmQgKyB0ZXhlbFNpemUpOyAvLyBib3R0b20gcmlnaHRcXG5cXG4gICBnbF9GcmFnQ29sb3IgPVxcbiAgICAgICBjMTEgKiBtYXRyaXhbMF0gKyBjMTIgKiBtYXRyaXhbMV0gKyBjMTMgKiBtYXRyaXhbMl0gK1xcbiAgICAgICBjMjEgKiBtYXRyaXhbM10gKyBjMjIgKiBtYXRyaXhbNF0gKyBjMjMgKiBtYXRyaXhbNV0gK1xcbiAgICAgICBjMzEgKiBtYXRyaXhbNl0gKyBjMzIgKiBtYXRyaXhbN10gKyBjMzMgKiBtYXRyaXhbOF07XFxuXFxuICAgZ2xfRnJhZ0NvbG9yLmEgPSBjMjIuYTtcXG59XFxuXCIsXG4gICAgICAgIC8vIGN1c3RvbSB1bmlmb3Jtc1xuICAgICAgICB7XG4gICAgICAgICAgICBtYXRyaXg6ICAgICB7IHR5cGU6ICcxZnYnLCB2YWx1ZTogbmV3IEZsb2F0MzJBcnJheShtYXRyaXgpIH0sXG4gICAgICAgICAgICB0ZXhlbFNpemU6ICB7IHR5cGU6ICd2MicsIHZhbHVlOiB7IHg6IDEgLyB3aWR0aCwgeTogMSAvIGhlaWdodCB9IH1cbiAgICAgICAgfVxuICAgICk7XG59XG5cbkNvbnZvbHV0aW9uRmlsdGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoY29yZS5BYnN0cmFjdEZpbHRlci5wcm90b3R5cGUpO1xuQ29udm9sdXRpb25GaWx0ZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gQ29udm9sdXRpb25GaWx0ZXI7XG5tb2R1bGUuZXhwb3J0cyA9IENvbnZvbHV0aW9uRmlsdGVyO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhDb252b2x1dGlvbkZpbHRlci5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBBbiBhcnJheSBvZiB2YWx1ZXMgdXNlZCBmb3IgbWF0cml4IHRyYW5zZm9ybWF0aW9uLiBTcGVjaWZpZWQgYXMgYSA5IHBvaW50IEFycmF5LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyW119XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5Db252b2x1dGlvbkZpbHRlciNcbiAgICAgKi9cbiAgICBtYXRyaXg6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy51bmlmb3Jtcy5tYXRyaXgudmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLm1hdHJpeC52YWx1ZSA9IG5ldyBGbG9hdDMyQXJyYXkodmFsdWUpO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFdpZHRoIG9mIHRoZSBvYmplY3QgeW91IGFyZSB0cmFuc2Zvcm1pbmdcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLkNvbnZvbHV0aW9uRmlsdGVyI1xuICAgICAqL1xuICAgIHdpZHRoOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIDEvdGhpcy51bmlmb3Jtcy50ZXhlbFNpemUudmFsdWUueDtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudW5pZm9ybXMudGV4ZWxTaXplLnZhbHVlLnggPSAxL3ZhbHVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIEhlaWdodCBvZiB0aGUgb2JqZWN0IHlvdSBhcmUgdHJhbnNmb3JtaW5nXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5Db252b2x1dGlvbkZpbHRlciNcbiAgICAgKi9cbiAgICBoZWlnaHQ6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gMS90aGlzLnVuaWZvcm1zLnRleGVsU2l6ZS52YWx1ZS55O1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy50ZXhlbFNpemUudmFsdWUueSA9IDEvdmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG59KTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vLi4vY29yZScpO1xuLy8gQHNlZSBodHRwczovL2dpdGh1Yi5jb20vc3Vic3RhY2svYnJmcy9pc3N1ZXMvMjVcblxuXG4vKipcbiAqIEEgQ3Jvc3MgSGF0Y2ggZWZmZWN0IGZpbHRlci5cbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQWJzdHJhY3RGaWx0ZXJcbiAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnNcbiAqL1xuZnVuY3Rpb24gQ3Jvc3NIYXRjaEZpbHRlcigpXG57XG4gICAgY29yZS5BYnN0cmFjdEZpbHRlci5jYWxsKHRoaXMsXG4gICAgICAgIC8vIHZlcnRleCBzaGFkZXJcbiAgICAgICAgbnVsbCxcbiAgICAgICAgLy8gZnJhZ21lbnQgc2hhZGVyXG4gICAgICAgIFwicHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XFxuXFxudmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7XFxuXFxudW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXI7XFxuXFxudm9pZCBtYWluKHZvaWQpXFxue1xcbiAgICBmbG9hdCBsdW0gPSBsZW5ndGgodGV4dHVyZTJEKHVTYW1wbGVyLCB2VGV4dHVyZUNvb3JkLnh5KS5yZ2IpO1xcblxcbiAgICBnbF9GcmFnQ29sb3IgPSB2ZWM0KDEuMCwgMS4wLCAxLjAsIDEuMCk7XFxuXFxuICAgIGlmIChsdW0gPCAxLjAwKVxcbiAgICB7XFxuICAgICAgICBpZiAobW9kKGdsX0ZyYWdDb29yZC54ICsgZ2xfRnJhZ0Nvb3JkLnksIDEwLjApID09IDAuMClcXG4gICAgICAgIHtcXG4gICAgICAgICAgICBnbF9GcmFnQ29sb3IgPSB2ZWM0KDAuMCwgMC4wLCAwLjAsIDEuMCk7XFxuICAgICAgICB9XFxuICAgIH1cXG5cXG4gICAgaWYgKGx1bSA8IDAuNzUpXFxuICAgIHtcXG4gICAgICAgIGlmIChtb2QoZ2xfRnJhZ0Nvb3JkLnggLSBnbF9GcmFnQ29vcmQueSwgMTAuMCkgPT0gMC4wKVxcbiAgICAgICAge1xcbiAgICAgICAgICAgIGdsX0ZyYWdDb2xvciA9IHZlYzQoMC4wLCAwLjAsIDAuMCwgMS4wKTtcXG4gICAgICAgIH1cXG4gICAgfVxcblxcbiAgICBpZiAobHVtIDwgMC41MClcXG4gICAge1xcbiAgICAgICAgaWYgKG1vZChnbF9GcmFnQ29vcmQueCArIGdsX0ZyYWdDb29yZC55IC0gNS4wLCAxMC4wKSA9PSAwLjApXFxuICAgICAgICB7XFxuICAgICAgICAgICAgZ2xfRnJhZ0NvbG9yID0gdmVjNCgwLjAsIDAuMCwgMC4wLCAxLjApO1xcbiAgICAgICAgfVxcbiAgICB9XFxuXFxuICAgIGlmIChsdW0gPCAwLjMpXFxuICAgIHtcXG4gICAgICAgIGlmIChtb2QoZ2xfRnJhZ0Nvb3JkLnggLSBnbF9GcmFnQ29vcmQueSAtIDUuMCwgMTAuMCkgPT0gMC4wKVxcbiAgICAgICAge1xcbiAgICAgICAgICAgIGdsX0ZyYWdDb2xvciA9IHZlYzQoMC4wLCAwLjAsIDAuMCwgMS4wKTtcXG4gICAgICAgIH1cXG4gICAgfVxcbn1cXG5cIlxuICAgICk7XG59XG5cbkNyb3NzSGF0Y2hGaWx0ZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShjb3JlLkFic3RyYWN0RmlsdGVyLnByb3RvdHlwZSk7XG5Dcm9zc0hhdGNoRmlsdGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IENyb3NzSGF0Y2hGaWx0ZXI7XG5tb2R1bGUuZXhwb3J0cyA9IENyb3NzSGF0Y2hGaWx0ZXI7XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uLy4uL2NvcmUnKTtcbi8vIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL3N1YnN0YWNrL2JyZnMvaXNzdWVzLzI1XG5cblxuLyoqXG4gKiBUaGUgRGlzcGxhY2VtZW50RmlsdGVyIGNsYXNzIHVzZXMgdGhlIHBpeGVsIHZhbHVlcyBmcm9tIHRoZSBzcGVjaWZpZWQgdGV4dHVyZSAoY2FsbGVkIHRoZSBkaXNwbGFjZW1lbnQgbWFwKSB0byBwZXJmb3JtIGEgZGlzcGxhY2VtZW50IG9mIGFuIG9iamVjdC5cbiAqIFlvdSBjYW4gdXNlIHRoaXMgZmlsdGVyIHRvIGFwcGx5IGFsbCBtYW5vciBvZiBjcmF6eSB3YXJwaW5nIGVmZmVjdHNcbiAqIEN1cnJlbnRseSB0aGUgciBwcm9wZXJ0eSBvZiB0aGUgdGV4dHVyZSBpcyB1c2VkIHRvIG9mZnNldCB0aGUgeCBhbmQgdGhlIGcgcHJvcGVydHkgb2YgdGhlIHRleHR1cmUgaXMgdXNlZCB0byBvZmZzZXQgdGhlIHkuXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLkFic3RyYWN0RmlsdGVyXG4gKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzXG4gKiBAcGFyYW0gc3ByaXRlIHtQSVhJLlNwcml0ZX0gdGhlIHNwcml0ZSB1c2VkIGZvciB0aGUgZGlzcGxhY2VtZW50IG1hcC4gKG1ha2Ugc3VyZSBpdHMgYWRkZWQgdG8gdGhlIHNjZW5lISlcbiAqL1xuZnVuY3Rpb24gRGlzcGxhY2VtZW50RmlsdGVyKHNwcml0ZSwgc2NhbGUpXG57XG4gICAgdmFyIG1hc2tNYXRyaXggPSBuZXcgY29yZS5NYXRyaXgoKTtcbiAgICBzcHJpdGUucmVuZGVyYWJsZSA9IGZhbHNlO1xuXG4gICAgY29yZS5BYnN0cmFjdEZpbHRlci5jYWxsKHRoaXMsXG4gICAgICAgIC8vIHZlcnRleCBzaGFkZXJcbiAgICAgICAgXCJhdHRyaWJ1dGUgdmVjMiBhVmVydGV4UG9zaXRpb247XFxuYXR0cmlidXRlIHZlYzIgYVRleHR1cmVDb29yZDtcXG5hdHRyaWJ1dGUgdmVjNCBhQ29sb3I7XFxuXFxudW5pZm9ybSBtYXQzIHByb2plY3Rpb25NYXRyaXg7XFxudW5pZm9ybSBtYXQzIG90aGVyTWF0cml4O1xcblxcbnZhcnlpbmcgdmVjMiB2TWFwQ29vcmQ7XFxudmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7XFxudmFyeWluZyB2ZWM0IHZDb2xvcjtcXG5cXG52b2lkIG1haW4odm9pZClcXG57XFxuICAgZ2xfUG9zaXRpb24gPSB2ZWM0KChwcm9qZWN0aW9uTWF0cml4ICogdmVjMyhhVmVydGV4UG9zaXRpb24sIDEuMCkpLnh5LCAwLjAsIDEuMCk7XFxuICAgdlRleHR1cmVDb29yZCA9IGFUZXh0dXJlQ29vcmQ7XFxuICAgdk1hcENvb3JkID0gKCBvdGhlck1hdHJpeCAqIHZlYzMoIGFUZXh0dXJlQ29vcmQsIDEuMCkgICkueHk7XFxuICAgdkNvbG9yID0gdmVjNChhQ29sb3IucmdiICogYUNvbG9yLmEsIGFDb2xvci5hKTtcXG59XFxuXCIsXG4gICAgICAgIC8vIGZyYWdtZW50IHNoYWRlclxuICAgICAgICBcInByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xcblxcbnZhcnlpbmcgdmVjMiB2TWFwQ29vcmQ7XFxudmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7XFxudmFyeWluZyB2ZWM0IHZDb2xvcjtcXG5cXG51bmlmb3JtIHZlYzIgc2NhbGU7XFxuXFxudW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXI7XFxudW5pZm9ybSBzYW1wbGVyMkQgbWFwU2FtcGxlcjtcXG5cXG52b2lkIG1haW4odm9pZClcXG57XFxuICAgdmVjNCBtYXAgPSAgdGV4dHVyZTJEKG1hcFNhbXBsZXIsIHZNYXBDb29yZCk7XFxuXFxuICAgbWFwIC09IDAuNTtcXG4gICBtYXAueHkgKj0gc2NhbGU7XFxuXFxuICAgZ2xfRnJhZ0NvbG9yID0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2ZWMyKHZUZXh0dXJlQ29vcmQueCArIG1hcC54LCB2VGV4dHVyZUNvb3JkLnkgKyBtYXAueSkpO1xcbn1cXG5cIixcbiAgICAgICAgLy8gdW5pZm9ybXNcbiAgICAgICAge1xuICAgICAgICAgICAgbWFwU2FtcGxlcjogICAgIHsgdHlwZTogJ3NhbXBsZXIyRCcsIHZhbHVlOiBzcHJpdGUudGV4dHVyZSB9LFxuICAgICAgICAgICAgb3RoZXJNYXRyaXg6ICAgIHsgdHlwZTogJ21hdDMnLCB2YWx1ZTogbWFza01hdHJpeC50b0FycmF5KHRydWUpIH0sXG4gICAgICAgICAgICBzY2FsZTogICAgICAgICAgeyB0eXBlOiAndjInLCB2YWx1ZTogeyB4OiAxLCB5OiAxIH0gfVxuICAgICAgICB9XG4gICAgKTtcblxuICAgIHRoaXMubWFza1Nwcml0ZSA9IHNwcml0ZTtcbiAgICB0aGlzLm1hc2tNYXRyaXggPSBtYXNrTWF0cml4O1xuXG4gICAgaWYgKHNjYWxlID09PSBudWxsIHx8IHNjYWxlID09PSB1bmRlZmluZWQpXG4gICAge1xuICAgICAgICBzY2FsZSA9IDIwO1xuICAgIH1cblxuICAgIHRoaXMuc2NhbGUgPSBuZXcgY29yZS5Qb2ludChzY2FsZSwgc2NhbGUpO1xufVxuXG5EaXNwbGFjZW1lbnRGaWx0ZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShjb3JlLkFic3RyYWN0RmlsdGVyLnByb3RvdHlwZSk7XG5EaXNwbGFjZW1lbnRGaWx0ZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gRGlzcGxhY2VtZW50RmlsdGVyO1xubW9kdWxlLmV4cG9ydHMgPSBEaXNwbGFjZW1lbnRGaWx0ZXI7XG5cbkRpc3BsYWNlbWVudEZpbHRlci5wcm90b3R5cGUuYXBwbHlGaWx0ZXIgPSBmdW5jdGlvbiAocmVuZGVyZXIsIGlucHV0LCBvdXRwdXQpXG57XG4gICAgdmFyIGZpbHRlck1hbmFnZXIgPSByZW5kZXJlci5maWx0ZXJNYW5hZ2VyO1xuXG4gICAgZmlsdGVyTWFuYWdlci5jYWxjdWxhdGVNYXBwZWRNYXRyaXgoaW5wdXQuZnJhbWUsIHRoaXMubWFza1Nwcml0ZSwgdGhpcy5tYXNrTWF0cml4KTtcblxuICAgIHRoaXMudW5pZm9ybXMub3RoZXJNYXRyaXgudmFsdWUgPSB0aGlzLm1hc2tNYXRyaXgudG9BcnJheSh0cnVlKTtcbiAgICB0aGlzLnVuaWZvcm1zLnNjYWxlLnZhbHVlLnggPSB0aGlzLnNjYWxlLnggKiAoMS9pbnB1dC5mcmFtZS53aWR0aCk7XG4gICAgdGhpcy51bmlmb3Jtcy5zY2FsZS52YWx1ZS55ID0gdGhpcy5zY2FsZS55ICogKDEvaW5wdXQuZnJhbWUuaGVpZ2h0KTtcblxuICAgIHZhciBzaGFkZXIgPSB0aGlzLmdldFNoYWRlcihyZW5kZXJlcik7XG4gICAgIC8vIGRyYXcgdGhlIGZpbHRlci4uLlxuICAgIGZpbHRlck1hbmFnZXIuYXBwbHlGaWx0ZXIoc2hhZGVyLCBpbnB1dCwgb3V0cHV0KTtcbn07XG5cblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoRGlzcGxhY2VtZW50RmlsdGVyLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFRoZSB0ZXh0dXJlIHVzZWQgZm9yIHRoZSBkaXNwbGFjZW1lbnQgbWFwLiBNdXN0IGJlIHBvd2VyIG9mIDIgc2l6ZWQgdGV4dHVyZS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuVGV4dHVyZX1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLkRpc3BsYWNlbWVudEZpbHRlciNcbiAgICAgKi9cbiAgICBtYXA6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy51bmlmb3Jtcy5tYXBTYW1wbGVyLnZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy5tYXBTYW1wbGVyLnZhbHVlID0gdmFsdWU7XG5cbiAgICAgICAgfVxuICAgIH1cbn0pO1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi8uLi9jb3JlJyk7XG4vLyBAc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9zdWJzdGFjay9icmZzL2lzc3Vlcy8yNVxuXG5cbi8qKlxuICogQGF1dGhvciBNYXQgR3JvdmVzIGh0dHA6Ly9tYXRncm92ZXMuY29tLyBARG9vcm1hdDIzXG4gKiBvcmlnaW5hbCBmaWx0ZXI6IGh0dHBzOi8vZ2l0aHViLmNvbS9ldmFudy9nbGZ4LmpzL2Jsb2IvbWFzdGVyL3NyYy9maWx0ZXJzL2Z1bi9kb3RzY3JlZW4uanNcbiAqL1xuXG4vKipcbiAqIFRoaXMgZmlsdGVyIGFwcGxpZXMgYSBkb3RzY3JlZW4gZWZmZWN0IG1ha2luZyBkaXNwbGF5IG9iamVjdHMgYXBwZWFyIHRvIGJlIG1hZGUgb3V0IG9mXG4gKiBibGFjayBhbmQgd2hpdGUgaGFsZnRvbmUgZG90cyBsaWtlIGFuIG9sZCBwcmludGVyLlxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5BYnN0cmFjdEZpbHRlclxuICogQG1lbWJlcm9mIFBJWEkuZmlsdGVyc1xuICovXG5mdW5jdGlvbiBEb3RTY3JlZW5GaWx0ZXIoKVxue1xuICAgIGNvcmUuQWJzdHJhY3RGaWx0ZXIuY2FsbCh0aGlzLFxuICAgICAgICAvLyB2ZXJ0ZXggc2hhZGVyXG4gICAgICAgIG51bGwsXG4gICAgICAgIC8vIGZyYWdtZW50IHNoYWRlclxuICAgICAgICBcInByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xcblxcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xcbnZhcnlpbmcgdmVjNCB2Q29sb3I7XFxuXFxudW5pZm9ybSB2ZWM0IGRpbWVuc2lvbnM7XFxudW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXI7XFxuXFxudW5pZm9ybSBmbG9hdCBhbmdsZTtcXG51bmlmb3JtIGZsb2F0IHNjYWxlO1xcblxcbmZsb2F0IHBhdHRlcm4oKVxcbntcXG4gICBmbG9hdCBzID0gc2luKGFuZ2xlKSwgYyA9IGNvcyhhbmdsZSk7XFxuICAgdmVjMiB0ZXggPSB2VGV4dHVyZUNvb3JkICogZGltZW5zaW9ucy54eTtcXG4gICB2ZWMyIHBvaW50ID0gdmVjMihcXG4gICAgICAgYyAqIHRleC54IC0gcyAqIHRleC55LFxcbiAgICAgICBzICogdGV4LnggKyBjICogdGV4LnlcXG4gICApICogc2NhbGU7XFxuICAgcmV0dXJuIChzaW4ocG9pbnQueCkgKiBzaW4ocG9pbnQueSkpICogNC4wO1xcbn1cXG5cXG52b2lkIG1haW4oKVxcbntcXG4gICB2ZWM0IGNvbG9yID0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2VGV4dHVyZUNvb3JkKTtcXG4gICBmbG9hdCBhdmVyYWdlID0gKGNvbG9yLnIgKyBjb2xvci5nICsgY29sb3IuYikgLyAzLjA7XFxuICAgZ2xfRnJhZ0NvbG9yID0gdmVjNCh2ZWMzKGF2ZXJhZ2UgKiAxMC4wIC0gNS4wICsgcGF0dGVybigpKSwgY29sb3IuYSk7XFxufVxcblwiLFxuICAgICAgICAvLyBjdXN0b20gdW5pZm9ybXNcbiAgICAgICAge1xuICAgICAgICAgICAgc2NhbGU6ICAgICAgeyB0eXBlOiAnMWYnLCB2YWx1ZTogMSB9LFxuICAgICAgICAgICAgYW5nbGU6ICAgICAgeyB0eXBlOiAnMWYnLCB2YWx1ZTogNSB9LFxuICAgICAgICAgICAgZGltZW5zaW9uczogeyB0eXBlOiAnNGZ2JywgdmFsdWU6IFswLCAwLCAwLCAwXSB9XG4gICAgICAgIH1cbiAgICApO1xufVxuXG5Eb3RTY3JlZW5GaWx0ZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShjb3JlLkFic3RyYWN0RmlsdGVyLnByb3RvdHlwZSk7XG5Eb3RTY3JlZW5GaWx0ZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gRG90U2NyZWVuRmlsdGVyO1xubW9kdWxlLmV4cG9ydHMgPSBEb3RTY3JlZW5GaWx0ZXI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKERvdFNjcmVlbkZpbHRlci5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBUaGUgc2NhbGUgb2YgdGhlIGVmZmVjdC5cbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5Eb3RTY3JlZW5GaWx0ZXIjXG4gICAgICovXG4gICAgc2NhbGU6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy51bmlmb3Jtcy5zY2FsZS52YWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudW5pZm9ybXMuc2NhbGUudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBUaGUgcmFkaXVzIG9mIHRoZSBlZmZlY3QuXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuRG90U2NyZWVuRmlsdGVyI1xuICAgICAqL1xuICAgIGFuZ2xlOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudW5pZm9ybXMuYW5nbGUudmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLmFuZ2xlLnZhbHVlID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG59KTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vLi4vY29yZScpO1xuXG4vLyBAc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9zdWJzdGFjay9icmZzL2lzc3Vlcy8yNVxuXG5cbi8qKlxuICogVGhlIEJsdXJZVGludEZpbHRlciBhcHBsaWVzIGEgdmVydGljYWwgR2F1c3NpYW4gYmx1ciB0byBhbiBvYmplY3QuXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLkFic3RyYWN0RmlsdGVyXG4gKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzXG4gKi9cbmZ1bmN0aW9uIEJsdXJZVGludEZpbHRlcigpXG57XG4gICAgY29yZS5BYnN0cmFjdEZpbHRlci5jYWxsKHRoaXMsXG4gICAgICAgIC8vIHZlcnRleCBzaGFkZXJcbiAgICAgICAgXCJhdHRyaWJ1dGUgdmVjMiBhVmVydGV4UG9zaXRpb247XFxuYXR0cmlidXRlIHZlYzIgYVRleHR1cmVDb29yZDtcXG5hdHRyaWJ1dGUgdmVjNCBhQ29sb3I7XFxuXFxudW5pZm9ybSBmbG9hdCBzdHJlbmd0aDtcXG51bmlmb3JtIHZlYzIgb2Zmc2V0O1xcblxcbnVuaWZvcm0gbWF0MyBwcm9qZWN0aW9uTWF0cml4O1xcblxcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xcbnZhcnlpbmcgdmVjNCB2Q29sb3I7XFxudmFyeWluZyB2ZWMyIHZCbHVyVGV4Q29vcmRzWzZdO1xcblxcbnZvaWQgbWFpbih2b2lkKVxcbntcXG4gICAgZ2xfUG9zaXRpb24gPSB2ZWM0KChwcm9qZWN0aW9uTWF0cml4ICogdmVjMygoYVZlcnRleFBvc2l0aW9uK29mZnNldCksIDEuMCkpLnh5LCAwLjAsIDEuMCk7XFxuICAgIHZUZXh0dXJlQ29vcmQgPSBhVGV4dHVyZUNvb3JkO1xcblxcbiAgICB2Qmx1clRleENvb3Jkc1sgMF0gPSBhVGV4dHVyZUNvb3JkICsgdmVjMigwLjAsIC0wLjAxMiAqIHN0cmVuZ3RoKTtcXG4gICAgdkJsdXJUZXhDb29yZHNbIDFdID0gYVRleHR1cmVDb29yZCArIHZlYzIoMC4wLCAtMC4wMDggKiBzdHJlbmd0aCk7XFxuICAgIHZCbHVyVGV4Q29vcmRzWyAyXSA9IGFUZXh0dXJlQ29vcmQgKyB2ZWMyKDAuMCwgLTAuMDA0ICogc3RyZW5ndGgpO1xcbiAgICB2Qmx1clRleENvb3Jkc1sgM10gPSBhVGV4dHVyZUNvb3JkICsgdmVjMigwLjAsICAwLjAwNCAqIHN0cmVuZ3RoKTtcXG4gICAgdkJsdXJUZXhDb29yZHNbIDRdID0gYVRleHR1cmVDb29yZCArIHZlYzIoMC4wLCAgMC4wMDggKiBzdHJlbmd0aCk7XFxuICAgIHZCbHVyVGV4Q29vcmRzWyA1XSA9IGFUZXh0dXJlQ29vcmQgKyB2ZWMyKDAuMCwgIDAuMDEyICogc3RyZW5ndGgpO1xcblxcbiAgIHZDb2xvciA9IHZlYzQoYUNvbG9yLnJnYiAqIGFDb2xvci5hLCBhQ29sb3IuYSk7XFxufVxcblwiLFxuICAgICAgICAvLyBmcmFnbWVudCBzaGFkZXJcbiAgICAgICAgXCJwcmVjaXNpb24gbG93cCBmbG9hdDtcXG5cXG52YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDtcXG52YXJ5aW5nIHZlYzIgdkJsdXJUZXhDb29yZHNbNl07XFxudmFyeWluZyB2ZWM0IHZDb2xvcjtcXG5cXG51bmlmb3JtIHZlYzMgY29sb3I7XFxudW5pZm9ybSBmbG9hdCBhbHBoYTtcXG5cXG51bmlmb3JtIHNhbXBsZXIyRCB1U2FtcGxlcjtcXG5cXG52b2lkIG1haW4odm9pZClcXG57XFxuICAgIHZlYzQgc3VtID0gdmVjNCgwLjApO1xcblxcbiAgICBzdW0gKz0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2Qmx1clRleENvb3Jkc1sgMF0pKjAuMDA0NDMxODQ4NDExOTM4MzQxO1xcbiAgICBzdW0gKz0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2Qmx1clRleENvb3Jkc1sgMV0pKjAuMDUzOTkwOTY2NTEzMTg5ODU7XFxuICAgIHN1bSArPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZCbHVyVGV4Q29vcmRzWyAyXSkqMC4yNDE5NzA3MjQ1MTkxNDU0O1xcbiAgICBzdW0gKz0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2VGV4dHVyZUNvb3JkICAgICApKjAuMzk4OTQyMjgwNDAxNDMyNztcXG4gICAgc3VtICs9IHRleHR1cmUyRCh1U2FtcGxlciwgdkJsdXJUZXhDb29yZHNbIDNdKSowLjI0MTk3MDcyNDUxOTE0NTQ7XFxuICAgIHN1bSArPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZCbHVyVGV4Q29vcmRzWyA0XSkqMC4wNTM5OTA5NjY1MTMxODk4NTtcXG4gICAgc3VtICs9IHRleHR1cmUyRCh1U2FtcGxlciwgdkJsdXJUZXhDb29yZHNbIDVdKSowLjAwNDQzMTg0ODQxMTkzODM0MTtcXG5cXG4gICAgZ2xfRnJhZ0NvbG9yID0gdmVjNCggY29sb3IucmdiICogc3VtLmEgKiBhbHBoYSwgc3VtLmEgKiBhbHBoYSApO1xcbn1cXG5cIixcbiAgICAgICAgLy8gc2V0IHRoZSB1bmlmb3Jtc1xuICAgICAgICB7XG4gICAgICAgICAgICBibHVyOiB7IHR5cGU6ICcxZicsIHZhbHVlOiAxIC8gNTEyIH0sXG4gICAgICAgICAgICBjb2xvcjogeyB0eXBlOiAnYycsIHZhbHVlOiBbMCwwLDBdfSxcbiAgICAgICAgICAgIGFscGhhOiB7IHR5cGU6ICcxZicsIHZhbHVlOiAwLjcgfSxcbiAgICAgICAgICAgIG9mZnNldDogeyB0eXBlOiAnMmYnLCB2YWx1ZTpbNSwgNV19LFxuICAgICAgICAgICAgc3RyZW5ndGg6IHsgdHlwZTogJzFmJywgdmFsdWU6MX1cbiAgICAgICAgfVxuICAgICk7XG5cbiAgICB0aGlzLnBhc3NlcyA9IDE7XG4gICAgdGhpcy5zdHJlbmd0aCA9IDQ7XG59XG5cbkJsdXJZVGludEZpbHRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuQWJzdHJhY3RGaWx0ZXIucHJvdG90eXBlKTtcbkJsdXJZVGludEZpbHRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBCbHVyWVRpbnRGaWx0ZXI7XG5tb2R1bGUuZXhwb3J0cyA9IEJsdXJZVGludEZpbHRlcjtcblxuQmx1cllUaW50RmlsdGVyLnByb3RvdHlwZS5hcHBseUZpbHRlciA9IGZ1bmN0aW9uIChyZW5kZXJlciwgaW5wdXQsIG91dHB1dCwgY2xlYXIpXG57XG4gICAgdmFyIHNoYWRlciA9IHRoaXMuZ2V0U2hhZGVyKHJlbmRlcmVyKTtcblxuICAgIHRoaXMudW5pZm9ybXMuc3RyZW5ndGgudmFsdWUgPSB0aGlzLnN0cmVuZ3RoIC8gNCAvIHRoaXMucGFzc2VzICogKGlucHV0LmZyYW1lLmhlaWdodCAvIGlucHV0LnNpemUuaGVpZ2h0KTtcblxuICAgIGlmKHRoaXMucGFzc2VzID09PSAxKVxuICAgIHtcbiAgICAgICAgcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5hcHBseUZpbHRlcihzaGFkZXIsIGlucHV0LCBvdXRwdXQsIGNsZWFyKTtcbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgdmFyIHJlbmRlclRhcmdldCA9IHJlbmRlcmVyLmZpbHRlck1hbmFnZXIuZ2V0UmVuZGVyVGFyZ2V0KHRydWUpO1xuICAgICAgICB2YXIgZmxpcCA9IGlucHV0O1xuICAgICAgICB2YXIgZmxvcCA9IHJlbmRlclRhcmdldDtcblxuICAgICAgICBmb3IodmFyIGkgPSAwOyBpIDwgdGhpcy5wYXNzZXMtMTsgaSsrKVxuICAgICAgICB7XG4gICAgICAgICAgICByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLmFwcGx5RmlsdGVyKHNoYWRlciwgZmxpcCwgZmxvcCwgY2xlYXIpO1xuXG4gICAgICAgICAgIHZhciB0ZW1wID0gZmxvcDtcbiAgICAgICAgICAgZmxvcCA9IGZsaXA7XG4gICAgICAgICAgIGZsaXAgPSB0ZW1wO1xuICAgICAgICB9XG5cbiAgICAgICAgcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5hcHBseUZpbHRlcihzaGFkZXIsIGZsaXAsIG91dHB1dCwgY2xlYXIpO1xuXG4gICAgICAgIHJlbmRlcmVyLmZpbHRlck1hbmFnZXIucmV0dXJuUmVuZGVyVGFyZ2V0KHJlbmRlclRhcmdldCk7XG4gICAgfVxufTtcblxuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhCbHVyWVRpbnRGaWx0ZXIucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgc3RyZW5ndGggb2YgYm90aCB0aGUgYmx1ci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLkJsdXJZVGludEZpbHRlciNcbiAgICAgKiBAZGVmYXVsdCAyXG4gICAgICovXG4gICAgYmx1cjoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiAgdGhpcy5zdHJlbmd0aDtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMucGFkZGluZyA9IHZhbHVlICogMC41O1xuICAgICAgICAgICAgdGhpcy5zdHJlbmd0aCA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfVxufSk7XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uLy4uL2NvcmUnKSxcbiAgICBCbHVyWEZpbHRlciA9IHJlcXVpcmUoJy4uL2JsdXIvQmx1clhGaWx0ZXInKSxcbiAgICBCbHVyWVRpbnRGaWx0ZXIgPSByZXF1aXJlKCcuL0JsdXJZVGludEZpbHRlcicpO1xuXG4vKipcbiAqIFRoZSBEcm9wU2hhZG93RmlsdGVyIGFwcGxpZXMgYSBHYXVzc2lhbiBibHVyIHRvIGFuIG9iamVjdC5cbiAqIFRoZSBzdHJlbmd0aCBvZiB0aGUgYmx1ciBjYW4gYmUgc2V0IGZvciB4LSBhbmQgeS1heGlzIHNlcGFyYXRlbHkuXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLkFic3RyYWN0RmlsdGVyXG4gKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzXG4gKi9cbmZ1bmN0aW9uIERyb3BTaGFkb3dGaWx0ZXIoKVxue1xuICAgIGNvcmUuQWJzdHJhY3RGaWx0ZXIuY2FsbCh0aGlzKTtcblxuICAgIHRoaXMuYmx1clhGaWx0ZXIgPSBuZXcgQmx1clhGaWx0ZXIoKTtcbiAgICB0aGlzLmJsdXJZVGludEZpbHRlciA9IG5ldyBCbHVyWVRpbnRGaWx0ZXIoKTtcblxuICAgIHRoaXMuZGVmYXVsdEZpbHRlciA9IG5ldyBjb3JlLkFic3RyYWN0RmlsdGVyKCk7XG5cbiAgICB0aGlzLnBhZGRpbmcgPSAzMDtcblxuICAgIHRoaXMuX2RpcnR5UG9zaXRpb24gPSB0cnVlO1xuICAgIHRoaXMuX2FuZ2xlID0gNDUgKiBNYXRoLlBJIC8gMTgwO1xuICAgIHRoaXMuX2Rpc3RhbmNlID0gMTA7XG4gICAgdGhpcy5hbHBoYSA9IDAuNzU7XG4gICAgdGhpcy5oaWRlT2JqZWN0ID0gZmFsc2U7XG4gICAgdGhpcy5ibGVuZE1vZGUgPSBjb3JlLkJMRU5EX01PREVTLk1VTFRJUExZO1xufVxuXG5Ecm9wU2hhZG93RmlsdGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoY29yZS5BYnN0cmFjdEZpbHRlci5wcm90b3R5cGUpO1xuRHJvcFNoYWRvd0ZpbHRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBEcm9wU2hhZG93RmlsdGVyO1xubW9kdWxlLmV4cG9ydHMgPSBEcm9wU2hhZG93RmlsdGVyO1xuXG5Ecm9wU2hhZG93RmlsdGVyLnByb3RvdHlwZS5hcHBseUZpbHRlciA9IGZ1bmN0aW9uIChyZW5kZXJlciwgaW5wdXQsIG91dHB1dClcbntcbiAgICB2YXIgcmVuZGVyVGFyZ2V0ID0gcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5nZXRSZW5kZXJUYXJnZXQodHJ1ZSk7XG5cbiAgICAvL1RPRE8gLSBjb3B5VGV4U3ViSW1hZ2UyRCBjb3VsZCBiZSB1c2VkIGhlcmU/XG4gICAgaWYodGhpcy5fZGlydHlQb3NpdGlvbilcbiAgICB7XG4gICAgICAgIHRoaXMuX2RpcnR5UG9zaXRpb24gPSBmYWxzZTtcblxuICAgICAgICB0aGlzLmJsdXJZVGludEZpbHRlci51bmlmb3Jtcy5vZmZzZXQudmFsdWVbMF0gPSBNYXRoLnNpbih0aGlzLl9hbmdsZSkgKiB0aGlzLl9kaXN0YW5jZTtcbiAgICAgICAgdGhpcy5ibHVyWVRpbnRGaWx0ZXIudW5pZm9ybXMub2Zmc2V0LnZhbHVlWzFdID0gTWF0aC5jb3ModGhpcy5fYW5nbGUpICogdGhpcy5fZGlzdGFuY2U7XG4gICAgfVxuXG4gICAgdGhpcy5ibHVyWEZpbHRlci5hcHBseUZpbHRlcihyZW5kZXJlciwgaW5wdXQsIHJlbmRlclRhcmdldCk7XG5cbiAgICByZW5kZXJlci5ibGVuZE1vZGVNYW5hZ2VyLnNldEJsZW5kTW9kZSh0aGlzLmJsZW5kTW9kZSk7XG5cbiAgICB0aGlzLmJsdXJZVGludEZpbHRlci5hcHBseUZpbHRlcihyZW5kZXJlciwgcmVuZGVyVGFyZ2V0LCBvdXRwdXQpO1xuXG4gICAgcmVuZGVyZXIuYmxlbmRNb2RlTWFuYWdlci5zZXRCbGVuZE1vZGUoY29yZS5CTEVORF9NT0RFUy5OT1JNQUwpO1xuXG4gICAgaWYoIXRoaXMuaGlkZU9iamVjdClcbiAgICB7XG5cbiAgICAgICAgdGhpcy5kZWZhdWx0RmlsdGVyLmFwcGx5RmlsdGVyKHJlbmRlcmVyLCBpbnB1dCwgb3V0cHV0KTtcbiAgICB9XG5cblxuICAgIHJlbmRlcmVyLmZpbHRlck1hbmFnZXIucmV0dXJuUmVuZGVyVGFyZ2V0KHJlbmRlclRhcmdldCk7XG59O1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhEcm9wU2hhZG93RmlsdGVyLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIHN0cmVuZ3RoIG9mIGJvdGggdGhlIGJsdXJYIGFuZCBibHVyWSBwcm9wZXJ0aWVzIHNpbXVsdGFuZW91c2x5XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlck9mIFBJWEkuZmlsdGVycy5Ecm9wU2hhZG93RmlsdGVyI1xuICAgICAqIEBkZWZhdWx0IDJcbiAgICAgKi9cbiAgICBibHVyOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuYmx1clhGaWx0ZXIuYmx1cjtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuYmx1clhGaWx0ZXIuYmx1ciA9IHRoaXMuYmx1cllUaW50RmlsdGVyLmJsdXIgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBzdHJlbmd0aCBvZiB0aGUgYmx1clggcHJvcGVydHlcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyT2YgUElYSS5maWx0ZXJzLkRyb3BTaGFkb3dGaWx0ZXIjXG4gICAgICogQGRlZmF1bHQgMlxuICAgICAqL1xuICAgIGJsdXJYOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuYmx1clhGaWx0ZXIuYmx1cjtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuYmx1clhGaWx0ZXIuYmx1ciA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIHN0cmVuZ3RoIG9mIHRoZSBibHVyWSBwcm9wZXJ0eVxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJPZiBQSVhJLmZpbHRlcnMuRHJvcFNoYWRvd0ZpbHRlciNcbiAgICAgKiBAZGVmYXVsdCAyXG4gICAgICovXG4gICAgYmx1clk6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5ibHVyWVRpbnRGaWx0ZXIuYmx1cjtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuYmx1cllUaW50RmlsdGVyLmJsdXIgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBjb2xvciBvZiB0aGUgc2hhZG93XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlck9mIFBJWEkuZmlsdGVycy5Ecm9wU2hhZG93RmlsdGVyI1xuICAgICAqL1xuICAgIGNvbG9yOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuICBjb3JlLnV0aWxzLnJnYjJoZXgoIHRoaXMuYmx1cllUaW50RmlsdGVyLnVuaWZvcm1zLmNvbG9yLnZhbHVlICk7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmJsdXJZVGludEZpbHRlci51bmlmb3Jtcy5jb2xvci52YWx1ZSA9IGNvcmUudXRpbHMuaGV4MnJnYih2YWx1ZSk7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgYWxwaGEgb2YgdGhlIHNoYWRvd1xuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJPZiBQSVhJLmZpbHRlcnMuRHJvcFNoYWRvd0ZpbHRlciNcbiAgICAgKi9cbiAgICBhbHBoYToge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiAgdGhpcy5ibHVyWVRpbnRGaWx0ZXIudW5pZm9ybXMuYWxwaGEudmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmJsdXJZVGludEZpbHRlci51bmlmb3Jtcy5hbHBoYS52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIGRpc3RhbmNlIG9mIHRoZSBzaGFkb3dcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyT2YgUElYSS5maWx0ZXJzLkRyb3BTaGFkb3dGaWx0ZXIjXG4gICAgICovXG4gICAgZGlzdGFuY2U6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gIHRoaXMuX2Rpc3RhbmNlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5fZGlydHlQb3NpdGlvbiA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLl9kaXN0YW5jZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIGFuZ2xlIG9mIHRoZSBzaGFkb3dcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyT2YgUElYSS5maWx0ZXJzLkRyb3BTaGFkb3dGaWx0ZXIjXG4gICAgICovXG4gICAgYW5nbGU6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gIHRoaXMuX2FuZ2xlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5fZGlydHlQb3NpdGlvbiA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLl9hbmdsZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfVxufSk7XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uLy4uL2NvcmUnKTtcbi8vIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL3N1YnN0YWNrL2JyZnMvaXNzdWVzLzI1XG5cblxuLyoqXG4gKiBUaGlzIGdyZXlzY2FsZXMgdGhlIHBhbGV0dGUgb2YgeW91ciBEaXNwbGF5IE9iamVjdHMuXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLkFic3RyYWN0RmlsdGVyXG4gKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzXG4gKi9cbmZ1bmN0aW9uIEdyYXlGaWx0ZXIoKVxue1xuICAgIGNvcmUuQWJzdHJhY3RGaWx0ZXIuY2FsbCh0aGlzLFxuICAgICAgICAvLyB2ZXJ0ZXggc2hhZGVyXG4gICAgICAgIG51bGwsXG4gICAgICAgIC8vIGZyYWdtZW50IHNoYWRlclxuICAgICAgICBcInByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xcblxcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xcbnZhcnlpbmcgdmVjNCB2Q29sb3I7XFxuXFxudW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXI7XFxudW5pZm9ybSBmbG9hdCBncmF5O1xcblxcbnZvaWQgbWFpbih2b2lkKVxcbntcXG4gICBnbF9GcmFnQ29sb3IgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZUZXh0dXJlQ29vcmQpO1xcbiAgIGdsX0ZyYWdDb2xvci5yZ2IgPSBtaXgoZ2xfRnJhZ0NvbG9yLnJnYiwgdmVjMygwLjIxMjYqZ2xfRnJhZ0NvbG9yLnIgKyAwLjcxNTIqZ2xfRnJhZ0NvbG9yLmcgKyAwLjA3MjIqZ2xfRnJhZ0NvbG9yLmIpLCBncmF5KTtcXG59XFxuXCIsXG4gICAgICAgIC8vIHNldCB0aGUgdW5pZm9ybXNcbiAgICAgICAge1xuICAgICAgICAgICAgZ3JheTogeyB0eXBlOiAnMWYnLCB2YWx1ZTogMSB9XG4gICAgICAgIH1cbiAgICApO1xufVxuXG5HcmF5RmlsdGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoY29yZS5BYnN0cmFjdEZpbHRlci5wcm90b3R5cGUpO1xuR3JheUZpbHRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBHcmF5RmlsdGVyO1xubW9kdWxlLmV4cG9ydHMgPSBHcmF5RmlsdGVyO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhHcmF5RmlsdGVyLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFRoZSBzdHJlbmd0aCBvZiB0aGUgZ3JheS4gMSB3aWxsIG1ha2UgdGhlIG9iamVjdCBibGFjayBhbmQgd2hpdGUsIDAgd2lsbCBtYWtlIHRoZSBvYmplY3QgaXRzIG5vcm1hbCBjb2xvci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLkdyYXlGaWx0ZXIjXG4gICAgICovXG4gICAgZ3JheToge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVuaWZvcm1zLmdyYXkudmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLmdyYXkudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuIiwiLyoqXG4gKiBAZmlsZSAgICAgICAgTWFpbiBleHBvcnQgb2YgdGhlIFBJWEkgZmlsdGVycyBsaWJyYXJ5XG4gKiBAYXV0aG9yICAgICAgTWF0IEdyb3ZlcyA8bWF0QGdvb2Rib3lkaWdpdGFsLmNvbT5cbiAqIEBjb3B5cmlnaHQgICAyMDEzLTIwMTUgR29vZEJveURpZ2l0YWxcbiAqIEBsaWNlbnNlICAgICB7QGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL3BpeGlqcy9waXhpLmpzL2Jsb2IvbWFzdGVyL0xJQ0VOU0V8TUlUIExpY2Vuc2V9XG4gKi9cblxuLyoqXG4gKiBAbmFtZXNwYWNlIFBJWEkuZmlsdGVyc1xuICovXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgICBBc2NpaUZpbHRlcjogICAgICAgIHJlcXVpcmUoJy4vYXNjaWkvQXNjaWlGaWx0ZXInKSxcbiAgICBCbG9vbUZpbHRlcjogICAgICAgIHJlcXVpcmUoJy4vYmxvb20vQmxvb21GaWx0ZXInKSxcbiAgICBCbHVyRmlsdGVyOiAgICAgICAgIHJlcXVpcmUoJy4vYmx1ci9CbHVyRmlsdGVyJyksXG4gICAgQmx1clhGaWx0ZXI6ICAgICAgICByZXF1aXJlKCcuL2JsdXIvQmx1clhGaWx0ZXInKSxcbiAgICBCbHVyWUZpbHRlcjogICAgICAgIHJlcXVpcmUoJy4vYmx1ci9CbHVyWUZpbHRlcicpLFxuICAgIEJsdXJEaXJGaWx0ZXI6ICAgICAgcmVxdWlyZSgnLi9ibHVyL0JsdXJEaXJGaWx0ZXInKSxcbiAgICBDb2xvck1hdHJpeEZpbHRlcjogIHJlcXVpcmUoJy4vY29sb3IvQ29sb3JNYXRyaXhGaWx0ZXInKSxcbiAgICBDb2xvclN0ZXBGaWx0ZXI6ICAgIHJlcXVpcmUoJy4vY29sb3IvQ29sb3JTdGVwRmlsdGVyJyksXG4gICAgQ29udm9sdXRpb25GaWx0ZXI6ICByZXF1aXJlKCcuL2NvbnZvbHV0aW9uL0NvbnZvbHV0aW9uRmlsdGVyJyksXG4gICAgQ3Jvc3NIYXRjaEZpbHRlcjogICByZXF1aXJlKCcuL2Nyb3NzaGF0Y2gvQ3Jvc3NIYXRjaEZpbHRlcicpLFxuICAgIERpc3BsYWNlbWVudEZpbHRlcjogcmVxdWlyZSgnLi9kaXNwbGFjZW1lbnQvRGlzcGxhY2VtZW50RmlsdGVyJyksXG4gICAgRG90U2NyZWVuRmlsdGVyOiAgICByZXF1aXJlKCcuL2RvdC9Eb3RTY3JlZW5GaWx0ZXInKSxcbiAgICBHcmF5RmlsdGVyOiAgICAgICAgIHJlcXVpcmUoJy4vZ3JheS9HcmF5RmlsdGVyJyksXG4gICAgRHJvcFNoYWRvd0ZpbHRlcjogICByZXF1aXJlKCcuL2Ryb3BzaGFkb3cvRHJvcFNoYWRvd0ZpbHRlcicpLFxuICAgIEludmVydEZpbHRlcjogICAgICAgcmVxdWlyZSgnLi9pbnZlcnQvSW52ZXJ0RmlsdGVyJyksXG4gICAgTm9pc2VGaWx0ZXI6ICAgICAgICByZXF1aXJlKCcuL25vaXNlL05vaXNlRmlsdGVyJyksXG4gICAgUGl4ZWxhdGVGaWx0ZXI6ICAgICByZXF1aXJlKCcuL3BpeGVsYXRlL1BpeGVsYXRlRmlsdGVyJyksXG4gICAgUkdCU3BsaXRGaWx0ZXI6ICAgICByZXF1aXJlKCcuL3JnYi9SR0JTcGxpdEZpbHRlcicpLFxuICAgIFNob2Nrd2F2ZUZpbHRlcjogICAgcmVxdWlyZSgnLi9zaG9ja3dhdmUvU2hvY2t3YXZlRmlsdGVyJyksXG4gICAgU2VwaWFGaWx0ZXI6ICAgICAgICByZXF1aXJlKCcuL3NlcGlhL1NlcGlhRmlsdGVyJyksXG4gICAgU21hcnRCbHVyRmlsdGVyOiAgICByZXF1aXJlKCcuL2JsdXIvU21hcnRCbHVyRmlsdGVyJyksXG4gICAgVGlsdFNoaWZ0RmlsdGVyOiAgICByZXF1aXJlKCcuL3RpbHRzaGlmdC9UaWx0U2hpZnRGaWx0ZXInKSxcbiAgICBUaWx0U2hpZnRYRmlsdGVyOiAgIHJlcXVpcmUoJy4vdGlsdHNoaWZ0L1RpbHRTaGlmdFhGaWx0ZXInKSxcbiAgICBUaWx0U2hpZnRZRmlsdGVyOiAgIHJlcXVpcmUoJy4vdGlsdHNoaWZ0L1RpbHRTaGlmdFlGaWx0ZXInKSxcbiAgICBUd2lzdEZpbHRlcjogICAgICAgIHJlcXVpcmUoJy4vdHdpc3QvVHdpc3RGaWx0ZXInKVxufTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vLi4vY29yZScpO1xuLy8gQHNlZSBodHRwczovL2dpdGh1Yi5jb20vc3Vic3RhY2svYnJmcy9pc3N1ZXMvMjVcblxuXG4vKipcbiAqIFRoaXMgaW52ZXJ0cyB5b3VyIERpc3BsYXkgT2JqZWN0cyBjb2xvcnMuXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLkFic3RyYWN0RmlsdGVyXG4gKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzXG4gKi9cbmZ1bmN0aW9uIEludmVydEZpbHRlcigpXG57XG4gICAgY29yZS5BYnN0cmFjdEZpbHRlci5jYWxsKHRoaXMsXG4gICAgICAgIC8vIHZlcnRleCBzaGFkZXJcbiAgICAgICAgbnVsbCxcbiAgICAgICAgLy8gZnJhZ21lbnQgc2hhZGVyXG4gICAgICAgIFwicHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XFxuXFxudmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7XFxuXFxudW5pZm9ybSBmbG9hdCBpbnZlcnQ7XFxudW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXI7XFxuXFxudm9pZCBtYWluKHZvaWQpXFxue1xcbiAgICBnbF9GcmFnQ29sb3IgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZUZXh0dXJlQ29vcmQpO1xcblxcbiAgICBnbF9GcmFnQ29sb3IucmdiID0gbWl4KCAodmVjMygxKS1nbF9GcmFnQ29sb3IucmdiKSAqIGdsX0ZyYWdDb2xvci5hLCBnbF9GcmFnQ29sb3IucmdiLCAxLjAgLSBpbnZlcnQpO1xcbn1cXG5cIixcbiAgICAgICAgLy8gY3VzdG9tIHVuaWZvcm1zXG4gICAgICAgIHtcbiAgICAgICAgICAgIGludmVydDogeyB0eXBlOiAnMWYnLCB2YWx1ZTogMSB9XG4gICAgICAgIH1cbiAgICApO1xufVxuXG5JbnZlcnRGaWx0ZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShjb3JlLkFic3RyYWN0RmlsdGVyLnByb3RvdHlwZSk7XG5JbnZlcnRGaWx0ZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gSW52ZXJ0RmlsdGVyO1xubW9kdWxlLmV4cG9ydHMgPSBJbnZlcnRGaWx0ZXI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKEludmVydEZpbHRlci5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBUaGUgc3RyZW5ndGggb2YgdGhlIGludmVydC4gYDFgIHdpbGwgZnVsbHkgaW52ZXJ0IHRoZSBjb2xvcnMsIGFuZFxuICAgICAqIGAwYCB3aWxsIG1ha2UgdGhlIG9iamVjdCBpdHMgbm9ybWFsIGNvbG9yLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuSW52ZXJ0RmlsdGVyI1xuICAgICAqL1xuICAgIGludmVydDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVuaWZvcm1zLmludmVydC52YWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudW5pZm9ybXMuaW52ZXJ0LnZhbHVlID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG59KTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vLi4vY29yZScpO1xuLy8gQHNlZSBodHRwczovL2dpdGh1Yi5jb20vc3Vic3RhY2svYnJmcy9pc3N1ZXMvMjVcblxuXG4vKipcbiAqIEBhdXRob3IgVmljbyBAdmljb2NvdGVhXG4gKiBvcmlnaW5hbCBmaWx0ZXI6IGh0dHBzOi8vZ2l0aHViLmNvbS9ldmFudy9nbGZ4LmpzL2Jsb2IvbWFzdGVyL3NyYy9maWx0ZXJzL2FkanVzdC9ub2lzZS5qc1xuICovXG5cbi8qKlxuICogQSBOb2lzZSBlZmZlY3QgZmlsdGVyLlxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5BYnN0cmFjdEZpbHRlclxuICogQG1lbWJlcm9mIFBJWEkuZmlsdGVyc1xuICovXG5mdW5jdGlvbiBOb2lzZUZpbHRlcigpXG57XG4gICAgY29yZS5BYnN0cmFjdEZpbHRlci5jYWxsKHRoaXMsXG4gICAgICAgIC8vIHZlcnRleCBzaGFkZXJcbiAgICAgICAgbnVsbCxcbiAgICAgICAgLy8gZnJhZ21lbnQgc2hhZGVyXG4gICAgICAgIFwicHJlY2lzaW9uIGhpZ2hwIGZsb2F0O1xcblxcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xcbnZhcnlpbmcgdmVjNCB2Q29sb3I7XFxuXFxudW5pZm9ybSBmbG9hdCBub2lzZTtcXG51bmlmb3JtIHNhbXBsZXIyRCB1U2FtcGxlcjtcXG5cXG5mbG9hdCByYW5kKHZlYzIgY28pXFxue1xcbiAgICByZXR1cm4gZnJhY3Qoc2luKGRvdChjby54eSwgdmVjMigxMi45ODk4LCA3OC4yMzMpKSkgKiA0Mzc1OC41NDUzKTtcXG59XFxuXFxudm9pZCBtYWluKClcXG57XFxuICAgIHZlYzQgY29sb3IgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZUZXh0dXJlQ29vcmQpO1xcblxcbiAgICBmbG9hdCBkaWZmID0gKHJhbmQodlRleHR1cmVDb29yZCkgLSAwLjUpICogbm9pc2U7XFxuXFxuICAgIGNvbG9yLnIgKz0gZGlmZjtcXG4gICAgY29sb3IuZyArPSBkaWZmO1xcbiAgICBjb2xvci5iICs9IGRpZmY7XFxuXFxuICAgIGdsX0ZyYWdDb2xvciA9IGNvbG9yO1xcbn1cXG5cIixcbiAgICAgICAgLy8gY3VzdG9tIHVuaWZvcm1zXG4gICAgICAgIHtcbiAgICAgICAgICAgIG5vaXNlOiB7IHR5cGU6ICcxZicsIHZhbHVlOiAwLjUgfVxuICAgICAgICB9XG4gICAgKTtcbn1cblxuTm9pc2VGaWx0ZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShjb3JlLkFic3RyYWN0RmlsdGVyLnByb3RvdHlwZSk7XG5Ob2lzZUZpbHRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBOb2lzZUZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gTm9pc2VGaWx0ZXI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKE5vaXNlRmlsdGVyLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFRoZSBhbW91bnQgb2Ygbm9pc2UgdG8gYXBwbHkuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5Ob2lzZUZpbHRlciNcbiAgICAgKiBAZGVmYXVsdCAwLjVcbiAgICAgKi9cbiAgICBub2lzZToge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVuaWZvcm1zLm5vaXNlLnZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy5ub2lzZS52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfVxufSk7XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uLy4uL2NvcmUnKTtcbi8vIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL3N1YnN0YWNrL2JyZnMvaXNzdWVzLzI1XG5cblxuLyoqXG4gKiBUaGlzIGZpbHRlciBhcHBsaWVzIGEgcGl4ZWxhdGUgZWZmZWN0IG1ha2luZyBkaXNwbGF5IG9iamVjdHMgYXBwZWFyICdibG9ja3knLlxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5BYnN0cmFjdEZpbHRlclxuICogQG1lbWJlcm9mIFBJWEkuZmlsdGVyc1xuICovXG5mdW5jdGlvbiBQaXhlbGF0ZUZpbHRlcigpXG57XG4gICAgY29yZS5BYnN0cmFjdEZpbHRlci5jYWxsKHRoaXMsXG4gICAgICAgIC8vIHZlcnRleCBzaGFkZXJcbiAgICAgICAgbnVsbCxcbiAgICAgICAgLy8gZnJhZ21lbnQgc2hhZGVyXG4gICAgICAgIFwicHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XFxuXFxudmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7XFxuXFxudW5pZm9ybSB2ZWM0IGRpbWVuc2lvbnM7XFxudW5pZm9ybSB2ZWMyIHBpeGVsU2l6ZTtcXG51bmlmb3JtIHNhbXBsZXIyRCB1U2FtcGxlcjtcXG5cXG52b2lkIG1haW4odm9pZClcXG57XFxuICAgIHZlYzIgY29vcmQgPSB2VGV4dHVyZUNvb3JkO1xcblxcbiAgICB2ZWMyIHNpemUgPSBkaW1lbnNpb25zLnh5IC8gcGl4ZWxTaXplO1xcblxcbiAgICB2ZWMyIGNvbG9yID0gZmxvb3IoICggdlRleHR1cmVDb29yZCAqIHNpemUgKSApIC8gc2l6ZSArIHBpeGVsU2l6ZS9kaW1lbnNpb25zLnh5ICogMC41O1xcblxcbiAgICBnbF9GcmFnQ29sb3IgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIGNvbG9yKTtcXG59XFxuXCIsXG4gICAgICAgIC8vIGN1c3RvbSB1bmlmb3Jtc1xuICAgICAgICB7XG4gICAgICAgICAgICBkaW1lbnNpb25zOiB7IHR5cGU6ICc0ZnYnLCAgdmFsdWU6IG5ldyBGbG9hdDMyQXJyYXkoWzAsIDAsIDAsIDBdKSB9LFxuICAgICAgICAgICAgcGl4ZWxTaXplOiAgeyB0eXBlOiAndjInLCAgIHZhbHVlOiB7IHg6IDEwLCB5OiAxMCB9IH1cbiAgICAgICAgfVxuICAgICk7XG59XG5cblBpeGVsYXRlRmlsdGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoY29yZS5BYnN0cmFjdEZpbHRlci5wcm90b3R5cGUpO1xuUGl4ZWxhdGVGaWx0ZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gUGl4ZWxhdGVGaWx0ZXI7XG5tb2R1bGUuZXhwb3J0cyA9IFBpeGVsYXRlRmlsdGVyO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhQaXhlbGF0ZUZpbHRlci5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBUaGlzIGEgcG9pbnQgdGhhdCBkZXNjcmliZXMgdGhlIHNpemUgb2YgdGhlIGJsb2Nrcy5cbiAgICAgKiB4IGlzIHRoZSB3aWR0aCBvZiB0aGUgYmxvY2sgYW5kIHkgaXMgdGhlIGhlaWdodC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuUG9pbnR9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5QaXhlbGF0ZUZpbHRlciNcbiAgICAgKi9cbiAgICBzaXplOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudW5pZm9ybXMucGl4ZWxTaXplLnZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy5waXhlbFNpemUudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi8uLi9jb3JlJyk7XG4vLyBAc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9zdWJzdGFjay9icmZzL2lzc3Vlcy8yNVxuXG5cbi8qKlxuICogQW4gUkdCIFNwbGl0IEZpbHRlci5cbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQWJzdHJhY3RGaWx0ZXJcbiAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnNcbiAqL1xuZnVuY3Rpb24gUkdCU3BsaXRGaWx0ZXIoKVxue1xuICAgIGNvcmUuQWJzdHJhY3RGaWx0ZXIuY2FsbCh0aGlzLFxuICAgICAgICAvLyB2ZXJ0ZXggc2hhZGVyXG4gICAgICAgIG51bGwsXG4gICAgICAgIC8vIGZyYWdtZW50IHNoYWRlclxuICAgICAgICBcInByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xcblxcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xcblxcbnVuaWZvcm0gc2FtcGxlcjJEIHVTYW1wbGVyO1xcbnVuaWZvcm0gdmVjNCBkaW1lbnNpb25zO1xcbnVuaWZvcm0gdmVjMiByZWQ7XFxudW5pZm9ybSB2ZWMyIGdyZWVuO1xcbnVuaWZvcm0gdmVjMiBibHVlO1xcblxcbnZvaWQgbWFpbih2b2lkKVxcbntcXG4gICBnbF9GcmFnQ29sb3IuciA9IHRleHR1cmUyRCh1U2FtcGxlciwgdlRleHR1cmVDb29yZCArIHJlZC9kaW1lbnNpb25zLnh5KS5yO1xcbiAgIGdsX0ZyYWdDb2xvci5nID0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2VGV4dHVyZUNvb3JkICsgZ3JlZW4vZGltZW5zaW9ucy54eSkuZztcXG4gICBnbF9GcmFnQ29sb3IuYiA9IHRleHR1cmUyRCh1U2FtcGxlciwgdlRleHR1cmVDb29yZCArIGJsdWUvZGltZW5zaW9ucy54eSkuYjtcXG4gICBnbF9GcmFnQ29sb3IuYSA9IHRleHR1cmUyRCh1U2FtcGxlciwgdlRleHR1cmVDb29yZCkuYTtcXG59XFxuXCIsXG4gICAgICAgIC8vIGN1c3RvbSB1bmlmb3Jtc1xuICAgICAgICB7XG4gICAgICAgICAgICByZWQ6ICAgICAgICB7IHR5cGU6ICd2MicsIHZhbHVlOiB7IHg6IDIwLCB5OiAyMCB9IH0sXG4gICAgICAgICAgICBncmVlbjogICAgICB7IHR5cGU6ICd2MicsIHZhbHVlOiB7IHg6IC0yMCwgeTogMjAgfSB9LFxuICAgICAgICAgICAgYmx1ZTogICAgICAgeyB0eXBlOiAndjInLCB2YWx1ZTogeyB4OiAyMCwgeTogLTIwIH0gfSxcbiAgICAgICAgICAgIGRpbWVuc2lvbnM6IHsgdHlwZTogJzRmdicsIHZhbHVlOiBbMCwgMCwgMCwgMF0gfVxuICAgICAgICB9XG4gICAgKTtcbn1cblxuUkdCU3BsaXRGaWx0ZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShjb3JlLkFic3RyYWN0RmlsdGVyLnByb3RvdHlwZSk7XG5SR0JTcGxpdEZpbHRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBSR0JTcGxpdEZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gUkdCU3BsaXRGaWx0ZXI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKFJHQlNwbGl0RmlsdGVyLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFJlZCBjaGFubmVsIG9mZnNldC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuUG9pbnR9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5SR0JTcGxpdEZpbHRlciNcbiAgICAgKi9cbiAgICByZWQ6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy51bmlmb3Jtcy5yZWQudmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLnJlZC52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIEdyZWVuIGNoYW5uZWwgb2Zmc2V0LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5Qb2ludH1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLlJHQlNwbGl0RmlsdGVyI1xuICAgICAqL1xuICAgIGdyZWVuOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudW5pZm9ybXMuZ3JlZW4udmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLmdyZWVuLnZhbHVlID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQmx1ZSBvZmZzZXQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlBvaW50fVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuUkdCU3BsaXRGaWx0ZXIjXG4gICAgICovXG4gICAgYmx1ZToge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVuaWZvcm1zLmJsdWUudmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLmJsdWUudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi8uLi9jb3JlJyk7XG4vLyBAc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9zdWJzdGFjay9icmZzL2lzc3Vlcy8yNVxuXG5cbi8qKlxuICogVGhpcyBhcHBsaWVzIGEgc2VwaWEgZWZmZWN0IHRvIHlvdXIgRGlzcGxheSBPYmplY3RzLlxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5BYnN0cmFjdEZpbHRlclxuICogQG1lbWJlcm9mIFBJWEkuZmlsdGVyc1xuICovXG5mdW5jdGlvbiBTZXBpYUZpbHRlcigpXG57XG4gICAgY29yZS5BYnN0cmFjdEZpbHRlci5jYWxsKHRoaXMsXG4gICAgICAgIC8vIHZlcnRleCBzaGFkZXJcbiAgICAgICAgbnVsbCxcbiAgICAgICAgLy8gZnJhZ21lbnQgc2hhZGVyXG4gICAgICAgIFwicHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XFxuXFxudmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7XFxuXFxudW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXI7XFxudW5pZm9ybSBmbG9hdCBzZXBpYTtcXG5cXG5jb25zdCBtYXQzIHNlcGlhTWF0cml4ID0gbWF0MygwLjM1ODgsIDAuNzA0NCwgMC4xMzY4LCAwLjI5OTAsIDAuNTg3MCwgMC4xMTQwLCAwLjIzOTIsIDAuNDY5NiwgMC4wOTEyKTtcXG5cXG52b2lkIG1haW4odm9pZClcXG57XFxuICAgZ2xfRnJhZ0NvbG9yID0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2VGV4dHVyZUNvb3JkKTtcXG4gICBnbF9GcmFnQ29sb3IucmdiID0gbWl4KCBnbF9GcmFnQ29sb3IucmdiLCBnbF9GcmFnQ29sb3IucmdiICogc2VwaWFNYXRyaXgsIHNlcGlhKTtcXG59XFxuXCIsXG4gICAgICAgIC8vIGN1c3RvbSB1bmlmb3Jtc1xuICAgICAgICB7XG4gICAgICAgICAgICBzZXBpYTogeyB0eXBlOiAnMWYnLCB2YWx1ZTogMSB9XG4gICAgICAgIH1cbiAgICApO1xufVxuXG5TZXBpYUZpbHRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuQWJzdHJhY3RGaWx0ZXIucHJvdG90eXBlKTtcblNlcGlhRmlsdGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFNlcGlhRmlsdGVyO1xubW9kdWxlLmV4cG9ydHMgPSBTZXBpYUZpbHRlcjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoU2VwaWFGaWx0ZXIucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogVGhlIHN0cmVuZ3RoIG9mIHRoZSBzZXBpYS4gYDFgIHdpbGwgYXBwbHkgdGhlIGZ1bGwgc2VwaWEgZWZmZWN0LCBhbmRcbiAgICAgKiBgMGAgd2lsbCBtYWtlIHRoZSBvYmplY3QgaXRzIG5vcm1hbCBjb2xvci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLlNlcGlhRmlsdGVyI1xuICAgICAqL1xuICAgIHNlcGlhOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudW5pZm9ybXMuc2VwaWEudmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLnNlcGlhLnZhbHVlID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG59KTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vLi4vY29yZScpO1xuLy8gQHNlZSBodHRwczovL2dpdGh1Yi5jb20vc3Vic3RhY2svYnJmcy9pc3N1ZXMvMjVcblxuXG4vKipcbiAqIFRoZSBDb2xvck1hdHJpeEZpbHRlciBjbGFzcyBsZXRzIHlvdSBhcHBseSBhIDR4NCBtYXRyaXggdHJhbnNmb3JtYXRpb24gb24gdGhlIFJHQkFcbiAqIGNvbG9yIGFuZCBhbHBoYSB2YWx1ZXMgb2YgZXZlcnkgcGl4ZWwgb24geW91ciBkaXNwbGF5T2JqZWN0IHRvIHByb2R1Y2UgYSByZXN1bHRcbiAqIHdpdGggYSBuZXcgc2V0IG9mIFJHQkEgY29sb3IgYW5kIGFscGhhIHZhbHVlcy4gSXQncyBwcmV0dHkgcG93ZXJmdWwhXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLkFic3RyYWN0RmlsdGVyXG4gKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzXG4gKi9cbmZ1bmN0aW9uIFNob2Nrd2F2ZUZpbHRlcigpXG57XG4gICAgY29yZS5BYnN0cmFjdEZpbHRlci5jYWxsKHRoaXMsXG4gICAgICAgIC8vIHZlcnRleCBzaGFkZXJcbiAgICAgICAgbnVsbCxcbiAgICAgICAgLy8gZnJhZ21lbnQgc2hhZGVyXG4gICAgICAgIFwicHJlY2lzaW9uIGxvd3AgZmxvYXQ7XFxuXFxudmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7XFxuXFxudW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXI7XFxuXFxudW5pZm9ybSB2ZWMyIGNlbnRlcjtcXG51bmlmb3JtIHZlYzMgcGFyYW1zOyAvLyAxMC4wLCAwLjgsIDAuMVxcbnVuaWZvcm0gZmxvYXQgdGltZTtcXG5cXG52b2lkIG1haW4oKVxcbntcXG4gICAgdmVjMiB1diA9IHZUZXh0dXJlQ29vcmQ7XFxuICAgIHZlYzIgdGV4Q29vcmQgPSB1djtcXG5cXG4gICAgZmxvYXQgZGlzdCA9IGRpc3RhbmNlKHV2LCBjZW50ZXIpO1xcblxcbiAgICBpZiAoIChkaXN0IDw9ICh0aW1lICsgcGFyYW1zLnopKSAmJiAoZGlzdCA+PSAodGltZSAtIHBhcmFtcy56KSkgKVxcbiAgICB7XFxuICAgICAgICBmbG9hdCBkaWZmID0gKGRpc3QgLSB0aW1lKTtcXG4gICAgICAgIGZsb2F0IHBvd0RpZmYgPSAxLjAgLSBwb3coYWJzKGRpZmYqcGFyYW1zLngpLCBwYXJhbXMueSk7XFxuXFxuICAgICAgICBmbG9hdCBkaWZmVGltZSA9IGRpZmYgICogcG93RGlmZjtcXG4gICAgICAgIHZlYzIgZGlmZlVWID0gbm9ybWFsaXplKHV2IC0gY2VudGVyKTtcXG4gICAgICAgIHRleENvb3JkID0gdXYgKyAoZGlmZlVWICogZGlmZlRpbWUpO1xcbiAgICB9XFxuXFxuICAgIGdsX0ZyYWdDb2xvciA9IHRleHR1cmUyRCh1U2FtcGxlciwgdGV4Q29vcmQpO1xcbn1cXG5cIixcbiAgICAgICAgLy8gY3VzdG9tIHVuaWZvcm1zXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNlbnRlcjogeyB0eXBlOiAndjInLCB2YWx1ZTogeyB4OiAwLjUsIHk6IDAuNSB9IH0sXG4gICAgICAgICAgICBwYXJhbXM6IHsgdHlwZTogJ3YzJywgdmFsdWU6IHsgeDogMTAsIHk6IDAuOCwgejogMC4xIH0gfSxcbiAgICAgICAgICAgIHRpbWU6IHsgdHlwZTogJzFmJywgdmFsdWU6IDAgfVxuICAgICAgICB9XG4gICAgKTtcbn1cblxuU2hvY2t3YXZlRmlsdGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoY29yZS5BYnN0cmFjdEZpbHRlci5wcm90b3R5cGUpO1xuU2hvY2t3YXZlRmlsdGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFNob2Nrd2F2ZUZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gU2hvY2t3YXZlRmlsdGVyO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhTaG9ja3dhdmVGaWx0ZXIucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgY2VudGVyIG9mIHRoZSBzaG9ja3dhdmUgaW4gbm9ybWFsaXplZCBzY3JlZW4gY29vcmRzLiBUaGF0IGlzXG4gICAgICogKDAsMCkgaXMgdGhlIHRvcC1sZWZ0IGFuZCAoMSwxKSBpcyB0aGUgYm90dG9tIHJpZ2h0LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7b2JqZWN0PHN0cmluZywgbnVtYmVyPn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLlNob2Nrd2F2ZUZpbHRlciNcbiAgICAgKi9cbiAgICBjZW50ZXI6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy51bmlmb3Jtcy5jZW50ZXIudmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLmNlbnRlci52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfSxcbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBwYXJhbXMgb2YgdGhlIHNob2Nrd2F2ZS4gVGhlc2UgbW9kaWZ5IHRoZSBsb29rIGFuZCBiZWhhdmlvciBvZlxuICAgICAqIHRoZSBzaG9ja3dhdmUgYXMgaXQgcmlwcGxlcyBvdXQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtvYmplY3Q8c3RyaW5nLCBudW1iZXI+fVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuU2hvY2t3YXZlRmlsdGVyI1xuICAgICAqL1xuICAgIHBhcmFtczoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVuaWZvcm1zLnBhcmFtcy52YWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudW5pZm9ybXMucGFyYW1zLnZhbHVlID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9LFxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIGVsYXBzZWQgdGltZSBvZiB0aGUgc2hvY2t3YXZlLiBUaGlzIGNvbnRyb2xzIHRoZSBzcGVlZCBhdCB3aGljaFxuICAgICAqIHRoZSBzaG9ja3dhdmUgcmlwcGxlcyBvdXQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5TaG9ja3dhdmVGaWx0ZXIjXG4gICAgICovXG4gICAgdGltZToge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVuaWZvcm1zLnRpbWUudmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLnRpbWUudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi8uLi9jb3JlJyk7XG4vLyBAc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9zdWJzdGFjay9icmZzL2lzc3Vlcy8yNVxuXG5cbi8qKlxuICogQGF1dGhvciBWaWNvIEB2aWNvY290ZWFcbiAqIG9yaWdpbmFsIGZpbHRlciBodHRwczovL2dpdGh1Yi5jb20vZXZhbncvZ2xmeC5qcy9ibG9iL21hc3Rlci9zcmMvZmlsdGVycy9ibHVyL3RpbHRzaGlmdC5qcyBieSBFdmFuIFdhbGxhY2UgOiBodHRwOi8vbWFkZWJ5ZXZhbi5jb20vXG4gKi9cblxuLyoqXG4gKiBBIFRpbHRTaGlmdEF4aXNGaWx0ZXIuXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLkFic3RyYWN0RmlsdGVyXG4gKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzXG4gKi9cbmZ1bmN0aW9uIFRpbHRTaGlmdEF4aXNGaWx0ZXIoKVxue1xuICAgIGNvcmUuQWJzdHJhY3RGaWx0ZXIuY2FsbCh0aGlzLFxuICAgICAgICAvLyB2ZXJ0ZXggc2hhZGVyXG4gICAgICAgIG51bGwsXG4gICAgICAgIC8vIGZyYWdtZW50IHNoYWRlclxuICAgICAgICBcInByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xcblxcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xcblxcbnVuaWZvcm0gc2FtcGxlcjJEIHVTYW1wbGVyO1xcbnVuaWZvcm0gZmxvYXQgYmx1cjtcXG51bmlmb3JtIGZsb2F0IGdyYWRpZW50Qmx1cjtcXG51bmlmb3JtIHZlYzIgc3RhcnQ7XFxudW5pZm9ybSB2ZWMyIGVuZDtcXG51bmlmb3JtIHZlYzIgZGVsdGE7XFxudW5pZm9ybSB2ZWMyIHRleFNpemU7XFxuXFxuZmxvYXQgcmFuZG9tKHZlYzMgc2NhbGUsIGZsb2F0IHNlZWQpXFxue1xcbiAgICByZXR1cm4gZnJhY3Qoc2luKGRvdChnbF9GcmFnQ29vcmQueHl6ICsgc2VlZCwgc2NhbGUpKSAqIDQzNzU4LjU0NTMgKyBzZWVkKTtcXG59XFxuXFxudm9pZCBtYWluKHZvaWQpXFxue1xcbiAgICB2ZWM0IGNvbG9yID0gdmVjNCgwLjApO1xcbiAgICBmbG9hdCB0b3RhbCA9IDAuMDtcXG5cXG4gICAgZmxvYXQgb2Zmc2V0ID0gcmFuZG9tKHZlYzMoMTIuOTg5OCwgNzguMjMzLCAxNTEuNzE4MiksIDAuMCk7XFxuICAgIHZlYzIgbm9ybWFsID0gbm9ybWFsaXplKHZlYzIoc3RhcnQueSAtIGVuZC55LCBlbmQueCAtIHN0YXJ0LngpKTtcXG4gICAgZmxvYXQgcmFkaXVzID0gc21vb3Roc3RlcCgwLjAsIDEuMCwgYWJzKGRvdCh2VGV4dHVyZUNvb3JkICogdGV4U2l6ZSAtIHN0YXJ0LCBub3JtYWwpKSAvIGdyYWRpZW50Qmx1cikgKiBibHVyO1xcblxcbiAgICBmb3IgKGZsb2F0IHQgPSAtMzAuMDsgdCA8PSAzMC4wOyB0KyspXFxuICAgIHtcXG4gICAgICAgIGZsb2F0IHBlcmNlbnQgPSAodCArIG9mZnNldCAtIDAuNSkgLyAzMC4wO1xcbiAgICAgICAgZmxvYXQgd2VpZ2h0ID0gMS4wIC0gYWJzKHBlcmNlbnQpO1xcbiAgICAgICAgdmVjNCBzYW1wbGUgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZUZXh0dXJlQ29vcmQgKyBkZWx0YSAvIHRleFNpemUgKiBwZXJjZW50ICogcmFkaXVzKTtcXG4gICAgICAgIHNhbXBsZS5yZ2IgKj0gc2FtcGxlLmE7XFxuICAgICAgICBjb2xvciArPSBzYW1wbGUgKiB3ZWlnaHQ7XFxuICAgICAgICB0b3RhbCArPSB3ZWlnaHQ7XFxuICAgIH1cXG5cXG4gICAgZ2xfRnJhZ0NvbG9yID0gY29sb3IgLyB0b3RhbDtcXG4gICAgZ2xfRnJhZ0NvbG9yLnJnYiAvPSBnbF9GcmFnQ29sb3IuYSArIDAuMDAwMDE7XFxufVxcblwiLFxuICAgICAgICAvLyBjdXN0b20gdW5pZm9ybXNcbiAgICAgICAge1xuICAgICAgICAgICAgYmx1cjogICAgICAgICAgIHsgdHlwZTogJzFmJywgdmFsdWU6IDEwMCB9LFxuICAgICAgICAgICAgZ3JhZGllbnRCbHVyOiAgIHsgdHlwZTogJzFmJywgdmFsdWU6IDYwMCB9LFxuICAgICAgICAgICAgc3RhcnQ6ICAgICAgICAgIHsgdHlwZTogJ3YyJywgdmFsdWU6IHsgeDogMCwgICAgeTogd2luZG93LmlubmVySGVpZ2h0IC8gMiB9IH0sXG4gICAgICAgICAgICBlbmQ6ICAgICAgICAgICAgeyB0eXBlOiAndjInLCB2YWx1ZTogeyB4OiA2MDAsICB5OiB3aW5kb3cuaW5uZXJIZWlnaHQgLyAyIH0gfSxcbiAgICAgICAgICAgIGRlbHRhOiAgICAgICAgICB7IHR5cGU6ICd2MicsIHZhbHVlOiB7IHg6IDMwLCAgIHk6IDMwIH0gfSxcbiAgICAgICAgICAgIHRleFNpemU6ICAgICAgICB7IHR5cGU6ICd2MicsIHZhbHVlOiB7IHg6IHdpbmRvdy5pbm5lcldpZHRoLCB5OiB3aW5kb3cuaW5uZXJIZWlnaHQgfSB9XG4gICAgICAgIH1cbiAgICApO1xuXG4gICAgdGhpcy51cGRhdGVEZWx0YSgpO1xufVxuXG5UaWx0U2hpZnRBeGlzRmlsdGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoY29yZS5BYnN0cmFjdEZpbHRlci5wcm90b3R5cGUpO1xuVGlsdFNoaWZ0QXhpc0ZpbHRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBUaWx0U2hpZnRBeGlzRmlsdGVyO1xubW9kdWxlLmV4cG9ydHMgPSBUaWx0U2hpZnRBeGlzRmlsdGVyO1xuXG4vKipcbiAqIFVwZGF0ZXMgdGhlIGZpbHRlciBkZWx0YSB2YWx1ZXMuXG4gKiBUaGlzIGlzIG92ZXJyaWRkZW4gaW4gdGhlIFggYW5kIFkgZmlsdGVycywgZG9lcyBub3RoaW5nIGZvciB0aGlzIGNsYXNzLlxuICpcbiAqL1xuVGlsdFNoaWZ0QXhpc0ZpbHRlci5wcm90b3R5cGUudXBkYXRlRGVsdGEgPSBmdW5jdGlvbiAoKVxue1xuICAgIHRoaXMudW5pZm9ybXMuZGVsdGEudmFsdWUueCA9IDA7XG4gICAgdGhpcy51bmlmb3Jtcy5kZWx0YS52YWx1ZS55ID0gMDtcbn07XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKFRpbHRTaGlmdEF4aXNGaWx0ZXIucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogVGhlIHN0cmVuZ3RoIG9mIHRoZSBibHVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuVGlsdFNoaWZ0QXhpc0ZpbHRlciNcbiAgICAgKi9cbiAgICBibHVyOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudW5pZm9ybXMuYmx1ci52YWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudW5pZm9ybXMuYmx1ci52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFRoZSBzdHJlbmd0aCBvZiB0aGUgZ3JhZGllbnQgYmx1ci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLlRpbHRTaGlmdEF4aXNGaWx0ZXIjXG4gICAgICovXG4gICAgZ3JhZGllbnRCbHVyOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudW5pZm9ybXMuZ3JhZGllbnRCbHVyLnZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy5ncmFkaWVudEJsdXIudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBUaGUgWCB2YWx1ZSB0byBzdGFydCB0aGUgZWZmZWN0IGF0LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5Qb2ludH1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLlRpbHRTaGlmdEF4aXNGaWx0ZXIjXG4gICAgICovXG4gICAgc3RhcnQ6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy51bmlmb3Jtcy5zdGFydC52YWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudW5pZm9ybXMuc3RhcnQudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlRGVsdGEoKTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBUaGUgWCB2YWx1ZSB0byBlbmQgdGhlIGVmZmVjdCBhdC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuUG9pbnR9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5UaWx0U2hpZnRBeGlzRmlsdGVyI1xuICAgICAqL1xuICAgIGVuZDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVuaWZvcm1zLmVuZC52YWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudW5pZm9ybXMuZW5kLnZhbHVlID0gdmFsdWU7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZURlbHRhKCk7XG4gICAgICAgIH1cbiAgICB9XG59KTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vLi4vY29yZScpLFxuICAgIFRpbHRTaGlmdFhGaWx0ZXIgPSByZXF1aXJlKCcuL1RpbHRTaGlmdFhGaWx0ZXInKSxcbiAgICBUaWx0U2hpZnRZRmlsdGVyID0gcmVxdWlyZSgnLi9UaWx0U2hpZnRZRmlsdGVyJyk7XG5cbi8qKlxuICogQGF1dGhvciBWaWNvIEB2aWNvY290ZWFcbiAqIG9yaWdpbmFsIGZpbHRlciBodHRwczovL2dpdGh1Yi5jb20vZXZhbncvZ2xmeC5qcy9ibG9iL21hc3Rlci9zcmMvZmlsdGVycy9ibHVyL3RpbHRzaGlmdC5qcyBieSBFdmFuIFdhbGxhY2UgOiBodHRwOi8vbWFkZWJ5ZXZhbi5jb20vXG4gKi9cblxuLyoqXG4gKiBBIFRpbHRTaGlmdCBGaWx0ZXIuIE1hbmFnZXMgdGhlIHBhc3Mgb2YgYm90aCBhIFRpbHRTaGlmdFhGaWx0ZXIgYW5kIFRpbHRTaGlmdFlGaWx0ZXIuXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLkFic3RyYWN0RmlsdGVyXG4gKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzXG4gKi9cbmZ1bmN0aW9uIFRpbHRTaGlmdEZpbHRlcigpXG57XG4gICAgY29yZS5BYnN0cmFjdEZpbHRlci5jYWxsKHRoaXMpO1xuXG4gICAgdGhpcy50aWx0U2hpZnRYRmlsdGVyID0gbmV3IFRpbHRTaGlmdFhGaWx0ZXIoKTtcbiAgICB0aGlzLnRpbHRTaGlmdFlGaWx0ZXIgPSBuZXcgVGlsdFNoaWZ0WUZpbHRlcigpO1xufVxuXG5UaWx0U2hpZnRGaWx0ZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShjb3JlLkFic3RyYWN0RmlsdGVyLnByb3RvdHlwZSk7XG5UaWx0U2hpZnRGaWx0ZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gVGlsdFNoaWZ0RmlsdGVyO1xubW9kdWxlLmV4cG9ydHMgPSBUaWx0U2hpZnRGaWx0ZXI7XG5cblRpbHRTaGlmdEZpbHRlci5wcm90b3R5cGUuYXBwbHlGaWx0ZXIgPSBmdW5jdGlvbiAocmVuZGVyZXIsIGlucHV0LCBvdXRwdXQpXG57XG4gICAgdmFyIHJlbmRlclRhcmdldCA9IHJlbmRlcmVyLmZpbHRlck1hbmFnZXIuZ2V0UmVuZGVyVGFyZ2V0KHRydWUpO1xuXG4gICAgdGhpcy50aWx0U2hpZnRYRmlsdGVyLmFwcGx5RmlsdGVyKHJlbmRlcmVyLCBpbnB1dCwgcmVuZGVyVGFyZ2V0KTtcblxuICAgIHRoaXMudGlsdFNoaWZ0WUZpbHRlci5hcHBseUZpbHRlcihyZW5kZXJlciwgcmVuZGVyVGFyZ2V0LCBvdXRwdXQpO1xuXG4gICAgcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5yZXR1cm5SZW5kZXJUYXJnZXQocmVuZGVyVGFyZ2V0KTtcbn07XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKFRpbHRTaGlmdEZpbHRlci5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBUaGUgc3RyZW5ndGggb2YgdGhlIGJsdXIuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5UaWx0U2hpZnRGaWx0ZXIjXG4gICAgICovXG4gICAgYmx1cjoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnRpbHRTaGlmdFhGaWx0ZXIuYmx1cjtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudGlsdFNoaWZ0WEZpbHRlci5ibHVyID0gdGhpcy50aWx0U2hpZnRZRmlsdGVyLmJsdXIgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBUaGUgc3RyZW5ndGggb2YgdGhlIGdyYWRpZW50IGJsdXIuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5UaWx0U2hpZnRGaWx0ZXIjXG4gICAgICovXG4gICAgZ3JhZGllbnRCbHVyOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudGlsdFNoaWZ0WEZpbHRlci5ncmFkaWVudEJsdXI7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnRpbHRTaGlmdFhGaWx0ZXIuZ3JhZGllbnRCbHVyID0gdGhpcy50aWx0U2hpZnRZRmlsdGVyLmdyYWRpZW50Qmx1ciA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFRoZSBZIHZhbHVlIHRvIHN0YXJ0IHRoZSBlZmZlY3QgYXQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5UaWx0U2hpZnRGaWx0ZXIjXG4gICAgICovXG4gICAgc3RhcnQ6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy50aWx0U2hpZnRYRmlsdGVyLnN0YXJ0O1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy50aWx0U2hpZnRYRmlsdGVyLnN0YXJ0ID0gdGhpcy50aWx0U2hpZnRZRmlsdGVyLnN0YXJ0ID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVGhlIFkgdmFsdWUgdG8gZW5kIHRoZSBlZmZlY3QgYXQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5UaWx0U2hpZnRGaWx0ZXIjXG4gICAgICovXG4gICAgZW5kOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudGlsdFNoaWZ0WEZpbHRlci5lbmQ7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnRpbHRTaGlmdFhGaWx0ZXIuZW5kID0gdGhpcy50aWx0U2hpZnRZRmlsdGVyLmVuZCA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfVxufSk7XG4iLCJ2YXIgVGlsdFNoaWZ0QXhpc0ZpbHRlciA9IHJlcXVpcmUoJy4vVGlsdFNoaWZ0QXhpc0ZpbHRlcicpO1xuXG4vKipcbiAqIEBhdXRob3IgVmljbyBAdmljb2NvdGVhXG4gKiBvcmlnaW5hbCBmaWx0ZXIgaHR0cHM6Ly9naXRodWIuY29tL2V2YW53L2dsZnguanMvYmxvYi9tYXN0ZXIvc3JjL2ZpbHRlcnMvYmx1ci90aWx0c2hpZnQuanMgYnkgRXZhbiBXYWxsYWNlIDogaHR0cDovL21hZGVieWV2YW4uY29tL1xuICovXG5cbi8qKlxuICogQSBUaWx0U2hpZnRYRmlsdGVyLlxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5UaWx0U2hpZnRBeGlzRmlsdGVyXG4gKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzXG4gKi9cbmZ1bmN0aW9uIFRpbHRTaGlmdFhGaWx0ZXIoKVxue1xuICAgIFRpbHRTaGlmdEF4aXNGaWx0ZXIuY2FsbCh0aGlzKTtcbn1cblxuVGlsdFNoaWZ0WEZpbHRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFRpbHRTaGlmdEF4aXNGaWx0ZXIucHJvdG90eXBlKTtcblRpbHRTaGlmdFhGaWx0ZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gVGlsdFNoaWZ0WEZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gVGlsdFNoaWZ0WEZpbHRlcjtcblxuLyoqXG4gKiBVcGRhdGVzIHRoZSBmaWx0ZXIgZGVsdGEgdmFsdWVzLlxuICpcbiAqL1xuVGlsdFNoaWZ0WEZpbHRlci5wcm90b3R5cGUudXBkYXRlRGVsdGEgPSBmdW5jdGlvbiAoKVxue1xuICAgIHZhciBkeCA9IHRoaXMudW5pZm9ybXMuZW5kLnZhbHVlLnggLSB0aGlzLnVuaWZvcm1zLnN0YXJ0LnZhbHVlLng7XG4gICAgdmFyIGR5ID0gdGhpcy51bmlmb3Jtcy5lbmQudmFsdWUueSAtIHRoaXMudW5pZm9ybXMuc3RhcnQudmFsdWUueTtcbiAgICB2YXIgZCA9IE1hdGguc3FydChkeCAqIGR4ICsgZHkgKiBkeSk7XG5cbiAgICB0aGlzLnVuaWZvcm1zLmRlbHRhLnZhbHVlLnggPSBkeCAvIGQ7XG4gICAgdGhpcy51bmlmb3Jtcy5kZWx0YS52YWx1ZS55ID0gZHkgLyBkO1xufTtcbiIsInZhciBUaWx0U2hpZnRBeGlzRmlsdGVyID0gcmVxdWlyZSgnLi9UaWx0U2hpZnRBeGlzRmlsdGVyJyk7XG5cbi8qKlxuICogQGF1dGhvciBWaWNvIEB2aWNvY290ZWFcbiAqIG9yaWdpbmFsIGZpbHRlciBodHRwczovL2dpdGh1Yi5jb20vZXZhbncvZ2xmeC5qcy9ibG9iL21hc3Rlci9zcmMvZmlsdGVycy9ibHVyL3RpbHRzaGlmdC5qcyBieSBFdmFuIFdhbGxhY2UgOiBodHRwOi8vbWFkZWJ5ZXZhbi5jb20vXG4gKi9cblxuLyoqXG4gKiBBIFRpbHRTaGlmdFlGaWx0ZXIuXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLlRpbHRTaGlmdEF4aXNGaWx0ZXJcbiAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnNcbiAqL1xuZnVuY3Rpb24gVGlsdFNoaWZ0WUZpbHRlcigpXG57XG4gICAgVGlsdFNoaWZ0QXhpc0ZpbHRlci5jYWxsKHRoaXMpO1xufVxuXG5UaWx0U2hpZnRZRmlsdGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoVGlsdFNoaWZ0QXhpc0ZpbHRlci5wcm90b3R5cGUpO1xuVGlsdFNoaWZ0WUZpbHRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBUaWx0U2hpZnRZRmlsdGVyO1xubW9kdWxlLmV4cG9ydHMgPSBUaWx0U2hpZnRZRmlsdGVyO1xuXG4vKipcbiAqIFVwZGF0ZXMgdGhlIGZpbHRlciBkZWx0YSB2YWx1ZXMuXG4gKlxuICovXG5UaWx0U2hpZnRZRmlsdGVyLnByb3RvdHlwZS51cGRhdGVEZWx0YSA9IGZ1bmN0aW9uICgpXG57XG4gICAgdmFyIGR4ID0gdGhpcy51bmlmb3Jtcy5lbmQudmFsdWUueCAtIHRoaXMudW5pZm9ybXMuc3RhcnQudmFsdWUueDtcbiAgICB2YXIgZHkgPSB0aGlzLnVuaWZvcm1zLmVuZC52YWx1ZS55IC0gdGhpcy51bmlmb3Jtcy5zdGFydC52YWx1ZS55O1xuICAgIHZhciBkID0gTWF0aC5zcXJ0KGR4ICogZHggKyBkeSAqIGR5KTtcblxuICAgIHRoaXMudW5pZm9ybXMuZGVsdGEudmFsdWUueCA9IC1keSAvIGQ7XG4gICAgdGhpcy51bmlmb3Jtcy5kZWx0YS52YWx1ZS55ID0gZHggLyBkO1xufTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vLi4vY29yZScpO1xuLy8gQHNlZSBodHRwczovL2dpdGh1Yi5jb20vc3Vic3RhY2svYnJmcy9pc3N1ZXMvMjVcblxuXG4vKipcbiAqIFRoaXMgZmlsdGVyIGFwcGxpZXMgYSB0d2lzdCBlZmZlY3QgbWFraW5nIGRpc3BsYXkgb2JqZWN0cyBhcHBlYXIgdHdpc3RlZCBpbiB0aGUgZ2l2ZW4gZGlyZWN0aW9uLlxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5BYnN0cmFjdEZpbHRlclxuICogQG1lbWJlcm9mIFBJWEkuZmlsdGVyc1xuICovXG5mdW5jdGlvbiBUd2lzdEZpbHRlcigpXG57XG4gICAgY29yZS5BYnN0cmFjdEZpbHRlci5jYWxsKHRoaXMsXG4gICAgICAgIC8vIHZlcnRleCBzaGFkZXJcbiAgICAgICAgbnVsbCxcbiAgICAgICAgLy8gZnJhZ21lbnQgc2hhZGVyXG4gICAgICAgIFwicHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XFxuXFxudmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7XFxuXFxudW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXI7XFxudW5pZm9ybSBmbG9hdCByYWRpdXM7XFxudW5pZm9ybSBmbG9hdCBhbmdsZTtcXG51bmlmb3JtIHZlYzIgb2Zmc2V0O1xcblxcbnZvaWQgbWFpbih2b2lkKVxcbntcXG4gICB2ZWMyIGNvb3JkID0gdlRleHR1cmVDb29yZCAtIG9mZnNldDtcXG4gICBmbG9hdCBkaXN0ID0gbGVuZ3RoKGNvb3JkKTtcXG5cXG4gICBpZiAoZGlzdCA8IHJhZGl1cylcXG4gICB7XFxuICAgICAgIGZsb2F0IHJhdGlvID0gKHJhZGl1cyAtIGRpc3QpIC8gcmFkaXVzO1xcbiAgICAgICBmbG9hdCBhbmdsZU1vZCA9IHJhdGlvICogcmF0aW8gKiBhbmdsZTtcXG4gICAgICAgZmxvYXQgcyA9IHNpbihhbmdsZU1vZCk7XFxuICAgICAgIGZsb2F0IGMgPSBjb3MoYW5nbGVNb2QpO1xcbiAgICAgICBjb29yZCA9IHZlYzIoY29vcmQueCAqIGMgLSBjb29yZC55ICogcywgY29vcmQueCAqIHMgKyBjb29yZC55ICogYyk7XFxuICAgfVxcblxcbiAgIGdsX0ZyYWdDb2xvciA9IHRleHR1cmUyRCh1U2FtcGxlciwgY29vcmQrb2Zmc2V0KTtcXG59XFxuXCIsXG4gICAgICAgIC8vIGN1c3RvbSB1bmlmb3Jtc1xuICAgICAgICB7XG4gICAgICAgICAgICByYWRpdXM6ICAgICB7IHR5cGU6ICcxZicsIHZhbHVlOiAwLjUgfSxcbiAgICAgICAgICAgIGFuZ2xlOiAgICAgIHsgdHlwZTogJzFmJywgdmFsdWU6IDUgfSxcbiAgICAgICAgICAgIG9mZnNldDogICAgIHsgdHlwZTogJ3YyJywgdmFsdWU6IHsgeDogMC41LCB5OiAwLjUgfSB9XG4gICAgICAgIH1cbiAgICApO1xufVxuXG5Ud2lzdEZpbHRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuQWJzdHJhY3RGaWx0ZXIucHJvdG90eXBlKTtcblR3aXN0RmlsdGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFR3aXN0RmlsdGVyO1xubW9kdWxlLmV4cG9ydHMgPSBUd2lzdEZpbHRlcjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoVHdpc3RGaWx0ZXIucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogVGhpcyBwb2ludCBkZXNjcmliZXMgdGhlIHRoZSBvZmZzZXQgb2YgdGhlIHR3aXN0LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5Qb2ludH1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLlR3aXN0RmlsdGVyI1xuICAgICAqL1xuICAgIG9mZnNldDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVuaWZvcm1zLm9mZnNldC52YWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudW5pZm9ybXMub2Zmc2V0LnZhbHVlID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVGhpcyByYWRpdXMgb2YgdGhlIHR3aXN0LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuVHdpc3RGaWx0ZXIjXG4gICAgICovXG4gICAgcmFkaXVzOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudW5pZm9ybXMucmFkaXVzLnZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy5yYWRpdXMudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBUaGlzIGFuZ2xlIG9mIHRoZSB0d2lzdC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLlR3aXN0RmlsdGVyI1xuICAgICAqL1xuICAgIGFuZ2xlOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudW5pZm9ybXMuYW5nbGUudmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLmFuZ2xlLnZhbHVlID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG59KTtcbiIsIi8vIHJ1biB0aGUgcG9seWZpbGxzXG5yZXF1aXJlKCcuL3BvbHlmaWxsJyk7XG5cbnZhciBjb3JlID0gbW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL2NvcmUnKTtcblxuLy8gYWRkIGNvcmUgcGx1Z2lucy5cbmNvcmUuZXh0cmFzICAgICAgICAgPSByZXF1aXJlKCcuL2V4dHJhcycpO1xuY29yZS5maWx0ZXJzICAgICAgICA9IHJlcXVpcmUoJy4vZmlsdGVycycpO1xuY29yZS5pbnRlcmFjdGlvbiAgICA9IHJlcXVpcmUoJy4vaW50ZXJhY3Rpb24nKTtcbmNvcmUubG9hZGVycyAgICAgICAgPSByZXF1aXJlKCcuL2xvYWRlcnMnKTtcbmNvcmUubWVzaCAgICAgICAgICAgPSByZXF1aXJlKCcuL21lc2gnKTtcbmNvcmUuYWNjZXNzaWJpbGl0eSAgPSByZXF1aXJlKCcuL2FjY2Vzc2liaWxpdHknKTtcblxuLy8gZXhwb3J0IGEgcHJlbWFkZSBsb2FkZXIgaW5zdGFuY2Vcbi8qKlxuICogQSBwcmVtYWRlIGluc3RhbmNlIG9mIHRoZSBsb2FkZXIgdGhhdCBjYW4gYmUgdXNlZCB0byBsb2FkZXIgcmVzb3VyY2VzLlxuICpcbiAqIEBuYW1lIGxvYWRlclxuICogQG1lbWJlcm9mIFBJWElcbiAqIEBwcm9wZXJ0eSB7UElYSS5sb2FkZXJzLkxvYWRlcn1cbiAqL1xuY29yZS5sb2FkZXIgPSBuZXcgY29yZS5sb2FkZXJzLkxvYWRlcigpO1xuXG4vLyBtaXhpbiB0aGUgZGVwcmVjYXRpb24gZmVhdHVyZXMuXG5PYmplY3QuYXNzaWduKGNvcmUsIHJlcXVpcmUoJy4vZGVwcmVjYXRpb24nKSk7XG5cbi8vIEFsd2F5cyBleHBvcnQgcGl4aSBnbG9iYWxseS5cbmdsb2JhbC5QSVhJID0gY29yZTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vY29yZScpO1xuXG4vKipcbiAqIEhvbGRzIGFsbCBpbmZvcm1hdGlvbiByZWxhdGVkIHRvIGFuIEludGVyYWN0aW9uIGV2ZW50XG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSS5pbnRlcmFjdGlvblxuICovXG5mdW5jdGlvbiBJbnRlcmFjdGlvbkRhdGEoKVxue1xuICAgIC8qKlxuICAgICAqIFRoaXMgcG9pbnQgc3RvcmVzIHRoZSBnbG9iYWwgY29vcmRzIG9mIHdoZXJlIHRoZSB0b3VjaC9tb3VzZSBldmVudCBoYXBwZW5lZFxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5Qb2ludH1cbiAgICAgKi9cbiAgICB0aGlzLmdsb2JhbCA9IG5ldyBjb3JlLlBvaW50KCk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgdGFyZ2V0IFNwcml0ZSB0aGF0IHdhcyBpbnRlcmFjdGVkIHdpdGhcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuU3ByaXRlfVxuICAgICAqL1xuICAgIHRoaXMudGFyZ2V0ID0gbnVsbDtcblxuICAgIC8qKlxuICAgICAqIFdoZW4gcGFzc2VkIHRvIGFuIGV2ZW50IGhhbmRsZXIsIHRoaXMgd2lsbCBiZSB0aGUgb3JpZ2luYWwgRE9NIEV2ZW50IHRoYXQgd2FzIGNhcHR1cmVkXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtFdmVudH1cbiAgICAgKi9cbiAgICB0aGlzLm9yaWdpbmFsRXZlbnQgPSBudWxsO1xufVxuXG5JbnRlcmFjdGlvbkRhdGEucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gSW50ZXJhY3Rpb25EYXRhO1xubW9kdWxlLmV4cG9ydHMgPSBJbnRlcmFjdGlvbkRhdGE7XG5cbi8qKlxuICogVGhpcyB3aWxsIHJldHVybiB0aGUgbG9jYWwgY29vcmRpbmF0ZXMgb2YgdGhlIHNwZWNpZmllZCBkaXNwbGF5T2JqZWN0IGZvciB0aGlzIEludGVyYWN0aW9uRGF0YVxuICpcbiAqIEBwYXJhbSBkaXNwbGF5T2JqZWN0IHtQSVhJLkRpc3BsYXlPYmplY3R9IFRoZSBEaXNwbGF5T2JqZWN0IHRoYXQgeW91IHdvdWxkIGxpa2UgdGhlIGxvY2FsIGNvb3JkcyBvZmZcbiAqIEBwYXJhbSBbcG9pbnRdIHtQSVhJLlBvaW50fSBBIFBvaW50IG9iamVjdCBpbiB3aGljaCB0byBzdG9yZSB0aGUgdmFsdWUsIG9wdGlvbmFsIChvdGhlcndpc2Ugd2lsbCBjcmVhdGUgYSBuZXcgcG9pbnQpXG4gKiBAcGFyYW0gW2dsb2JhbFBvc10ge1BJWEkuUG9pbnR9IEEgUG9pbnQgb2JqZWN0IGNvbnRhaW5pbmcgeW91ciBjdXN0b20gZ2xvYmFsIGNvb3Jkcywgb3B0aW9uYWwgKG90aGVyd2lzZSB3aWxsIHVzZSB0aGUgY3VycmVudCBnbG9iYWwgY29vcmRzKVxuICogQHJldHVybiB7UElYSS5Qb2ludH0gQSBwb2ludCBjb250YWluaW5nIHRoZSBjb29yZGluYXRlcyBvZiB0aGUgSW50ZXJhY3Rpb25EYXRhIHBvc2l0aW9uIHJlbGF0aXZlIHRvIHRoZSBEaXNwbGF5T2JqZWN0XG4gKi9cbkludGVyYWN0aW9uRGF0YS5wcm90b3R5cGUuZ2V0TG9jYWxQb3NpdGlvbiA9IGZ1bmN0aW9uIChkaXNwbGF5T2JqZWN0LCBwb2ludCwgZ2xvYmFsUG9zKVxue1xuICAgIHJldHVybiBkaXNwbGF5T2JqZWN0LndvcmxkVHJhbnNmb3JtLmFwcGx5SW52ZXJzZShnbG9iYWxQb3MgfHwgdGhpcy5nbG9iYWwsIHBvaW50KTtcbn07XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uL2NvcmUnKSxcbiAgICBJbnRlcmFjdGlvbkRhdGEgPSByZXF1aXJlKCcuL0ludGVyYWN0aW9uRGF0YScpO1xuXG4vLyBNaXggaW50ZXJhY3RpdmVUYXJnZXQgaW50byBjb3JlLkRpc3BsYXlPYmplY3QucHJvdG90eXBlXG5PYmplY3QuYXNzaWduKFxuICAgIGNvcmUuRGlzcGxheU9iamVjdC5wcm90b3R5cGUsXG4gICAgcmVxdWlyZSgnLi9pbnRlcmFjdGl2ZVRhcmdldCcpXG4pO1xuXG4vKipcbiAqIFRoZSBpbnRlcmFjdGlvbiBtYW5hZ2VyIGRlYWxzIHdpdGggbW91c2UgYW5kIHRvdWNoIGV2ZW50cy4gQW55IERpc3BsYXlPYmplY3QgY2FuIGJlIGludGVyYWN0aXZlXG4gKiBpZiBpdHMgaW50ZXJhY3RpdmUgcGFyYW1ldGVyIGlzIHNldCB0byB0cnVlXG4gKiBUaGlzIG1hbmFnZXIgYWxzbyBzdXBwb3J0cyBtdWx0aXRvdWNoLlxuICpcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWEkuaW50ZXJhY3Rpb25cbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5DYW52YXNSZW5kZXJlcnxQSVhJLldlYkdMUmVuZGVyZXJ9IEEgcmVmZXJlbmNlIHRvIHRoZSBjdXJyZW50IHJlbmRlcmVyXG4gKiBAcGFyYW0gW29wdGlvbnNdIHtvYmplY3R9XG4gKiBAcGFyYW0gW29wdGlvbnMuYXV0b1ByZXZlbnREZWZhdWx0PXRydWVdIHtib29sZWFufSBTaG91bGQgdGhlIG1hbmFnZXIgYXV0b21hdGljYWxseSBwcmV2ZW50IGRlZmF1bHQgYnJvd3NlciBhY3Rpb25zLlxuICogQHBhcmFtIFtvcHRpb25zLmludGVyYWN0aW9uRnJlcXVlbmN5PTEwXSB7bnVtYmVyfSBGcmVxdWVuY3kgaW5jcmVhc2VzIHRoZSBpbnRlcmFjdGlvbiBldmVudHMgd2lsbCBiZSBjaGVja2VkLlxuICovXG5mdW5jdGlvbiBJbnRlcmFjdGlvbk1hbmFnZXIocmVuZGVyZXIsIG9wdGlvbnMpXG57XG4gICAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG5cbiAgICAvKipcbiAgICAgKiBUaGUgcmVuZGVyZXIgdGhpcyBpbnRlcmFjdGlvbiBtYW5hZ2VyIHdvcmtzIGZvci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuU3lzdGVtUmVuZGVyZXJ9XG4gICAgICovXG4gICAgdGhpcy5yZW5kZXJlciA9IHJlbmRlcmVyO1xuXG4gICAgLyoqXG4gICAgICogU2hvdWxkIGRlZmF1bHQgYnJvd3NlciBhY3Rpb25zIGF1dG9tYXRpY2FsbHkgYmUgcHJldmVudGVkLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKiBAZGVmYXVsdCB0cnVlXG4gICAgICovXG4gICAgdGhpcy5hdXRvUHJldmVudERlZmF1bHQgPSBvcHRpb25zLmF1dG9QcmV2ZW50RGVmYXVsdCAhPT0gdW5kZWZpbmVkID8gb3B0aW9ucy5hdXRvUHJldmVudERlZmF1bHQgOiB0cnVlO1xuXG4gICAgLyoqXG4gICAgICogQXMgdGhpcyBmcmVxdWVuY3kgaW5jcmVhc2VzIHRoZSBpbnRlcmFjdGlvbiBldmVudHMgd2lsbCBiZSBjaGVja2VkIG1vcmUgb2Z0ZW4uXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMTBcbiAgICAgKi9cbiAgICB0aGlzLmludGVyYWN0aW9uRnJlcXVlbmN5ID0gb3B0aW9ucy5pbnRlcmFjdGlvbkZyZXF1ZW5jeSB8fCAxMDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBtb3VzZSBkYXRhXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLmludGVyYWN0aW9uLkludGVyYWN0aW9uRGF0YX1cbiAgICAgKi9cbiAgICB0aGlzLm1vdXNlID0gbmV3IEludGVyYWN0aW9uRGF0YSgpO1xuXG4gICAgLyoqXG4gICAgICogQW4gZXZlbnQgZGF0YSBvYmplY3QgdG8gaGFuZGxlIGFsbCB0aGUgZXZlbnQgdHJhY2tpbmcvZGlzcGF0Y2hpbmdcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge29iamVjdH1cbiAgICAgKi9cbiAgICB0aGlzLmV2ZW50RGF0YSA9IHtcbiAgICAgICAgc3RvcHBlZDogZmFsc2UsXG4gICAgICAgIHRhcmdldDogbnVsbCxcbiAgICAgICAgdHlwZTogbnVsbCxcbiAgICAgICAgZGF0YTogdGhpcy5tb3VzZSxcbiAgICAgICAgc3RvcFByb3BhZ2F0aW9uOmZ1bmN0aW9uKCl7XG4gICAgICAgICAgICB0aGlzLnN0b3BwZWQgPSB0cnVlO1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIC8qKlxuICAgICAqIFRpbnkgbGl0dGxlIGludGVyYWN0aXZlRGF0YSBwb29sICFcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuaW50ZXJhY3Rpb24uSW50ZXJhY3Rpb25EYXRhW119XG4gICAgICovXG4gICAgdGhpcy5pbnRlcmFjdGl2ZURhdGFQb29sID0gW107XG5cbiAgICAvKipcbiAgICAgKiBUaGUgRE9NIGVsZW1lbnQgdG8gYmluZCB0by5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge0hUTUxFbGVtZW50fVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5pbnRlcmFjdGlvbkRPTUVsZW1lbnQgPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogSGF2ZSBldmVudHMgYmVlbiBhdHRhY2hlZCB0byB0aGUgZG9tIGVsZW1lbnQ/XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5ldmVudHNBZGRlZCA9IGZhbHNlO1xuXG4gICAgLy90aGlzIHdpbGwgbWFrZSBpdCBzbyB0aGF0IHlvdSBkb24ndCBoYXZlIHRvIGNhbGwgYmluZCBhbGwgdGhlIHRpbWVcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge0Z1bmN0aW9ufVxuICAgICAqL1xuICAgIHRoaXMub25Nb3VzZVVwID0gdGhpcy5vbk1vdXNlVXAuYmluZCh0aGlzKTtcbiAgICB0aGlzLnByb2Nlc3NNb3VzZVVwID0gdGhpcy5wcm9jZXNzTW91c2VVcC5iaW5kKCB0aGlzICk7XG5cblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge0Z1bmN0aW9ufVxuICAgICAqL1xuICAgIHRoaXMub25Nb3VzZURvd24gPSB0aGlzLm9uTW91c2VEb3duLmJpbmQodGhpcyk7XG4gICAgdGhpcy5wcm9jZXNzTW91c2VEb3duID0gdGhpcy5wcm9jZXNzTW91c2VEb3duLmJpbmQoIHRoaXMgKTtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge0Z1bmN0aW9ufVxuICAgICAqL1xuICAgIHRoaXMub25Nb3VzZU1vdmUgPSB0aGlzLm9uTW91c2VNb3ZlLmJpbmQoIHRoaXMgKTtcbiAgICB0aGlzLnByb2Nlc3NNb3VzZU1vdmUgPSB0aGlzLnByb2Nlc3NNb3VzZU1vdmUuYmluZCggdGhpcyApO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7RnVuY3Rpb259XG4gICAgICovXG4gICAgdGhpcy5vbk1vdXNlT3V0ID0gdGhpcy5vbk1vdXNlT3V0LmJpbmQodGhpcyk7XG4gICAgdGhpcy5wcm9jZXNzTW91c2VPdmVyT3V0ID0gdGhpcy5wcm9jZXNzTW91c2VPdmVyT3V0LmJpbmQoIHRoaXMgKTtcblxuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7RnVuY3Rpb259XG4gICAgICovXG4gICAgdGhpcy5vblRvdWNoU3RhcnQgPSB0aGlzLm9uVG91Y2hTdGFydC5iaW5kKHRoaXMpO1xuICAgIHRoaXMucHJvY2Vzc1RvdWNoU3RhcnQgPSB0aGlzLnByb2Nlc3NUb3VjaFN0YXJ0LmJpbmQodGhpcyk7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtGdW5jdGlvbn1cbiAgICAgKi9cbiAgICB0aGlzLm9uVG91Y2hFbmQgPSB0aGlzLm9uVG91Y2hFbmQuYmluZCh0aGlzKTtcbiAgICB0aGlzLnByb2Nlc3NUb3VjaEVuZCA9IHRoaXMucHJvY2Vzc1RvdWNoRW5kLmJpbmQodGhpcyk7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtGdW5jdGlvbn1cbiAgICAgKi9cbiAgICB0aGlzLm9uVG91Y2hNb3ZlID0gdGhpcy5vblRvdWNoTW92ZS5iaW5kKHRoaXMpO1xuICAgIHRoaXMucHJvY2Vzc1RvdWNoTW92ZSA9IHRoaXMucHJvY2Vzc1RvdWNoTW92ZS5iaW5kKHRoaXMpO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMubGFzdCA9IDA7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgY3NzIHN0eWxlIG9mIHRoZSBjdXJzb3IgdGhhdCBpcyBiZWluZyB1c2VkXG4gICAgICogQG1lbWJlciB7c3RyaW5nfVxuICAgICAqL1xuICAgIHRoaXMuY3VycmVudEN1cnNvclN0eWxlID0gJ2luaGVyaXQnO1xuXG4gICAgLyoqXG4gICAgICogSW50ZXJuYWwgY2FjaGVkIHZhclxuICAgICAqIEBtZW1iZXIge1BJWEkuUG9pbnR9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl90ZW1wUG9pbnQgPSBuZXcgY29yZS5Qb2ludCgpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGN1cnJlbnQgcmVzb2x1dGlvblxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLnJlc29sdXRpb24gPSAxO1xuXG4gICAgdGhpcy5zZXRUYXJnZXRFbGVtZW50KHRoaXMucmVuZGVyZXIudmlldywgdGhpcy5yZW5kZXJlci5yZXNvbHV0aW9uKTtcbn1cblxuSW50ZXJhY3Rpb25NYW5hZ2VyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IEludGVyYWN0aW9uTWFuYWdlcjtcbm1vZHVsZS5leHBvcnRzID0gSW50ZXJhY3Rpb25NYW5hZ2VyO1xuXG4vKipcbiAqIFNldHMgdGhlIERPTSBlbGVtZW50IHdoaWNoIHdpbGwgcmVjZWl2ZSBtb3VzZS90b3VjaCBldmVudHMuIFRoaXMgaXMgdXNlZnVsIGZvciB3aGVuIHlvdSBoYXZlXG4gKiBvdGhlciBET00gZWxlbWVudHMgb24gdG9wIG9mIHRoZSByZW5kZXJlcnMgQ2FudmFzIGVsZW1lbnQuIFdpdGggdGhpcyB5b3UnbGwgYmUgYmFsZSB0byBkZWxldGVnYXRlXG4gKiBhbm90aGVyIERPTSBlbGVtZW50IHRvIHJlY2VpdmUgdGhvc2UgZXZlbnRzLlxuICpcbiAqIEBwYXJhbSBlbGVtZW50IHtIVE1MRWxlbWVudH0gdGhlIERPTSBlbGVtZW50IHdoaWNoIHdpbGwgcmVjZWl2ZSBtb3VzZSBhbmQgdG91Y2ggZXZlbnRzLlxuICogQHBhcmFtIFtyZXNvbHV0aW9uPTFdIHtudW1iZXJ9IFRIZSByZXNvbHV0aW9uIG9mIHRoZSBuZXcgZWxlbWVudCAocmVsYXRpdmUgdG8gdGhlIGNhbnZhcykuXG4gKiBAcHJpdmF0ZVxuICovXG5JbnRlcmFjdGlvbk1hbmFnZXIucHJvdG90eXBlLnNldFRhcmdldEVsZW1lbnQgPSBmdW5jdGlvbiAoZWxlbWVudCwgcmVzb2x1dGlvbilcbntcbiAgICB0aGlzLnJlbW92ZUV2ZW50cygpO1xuXG4gICAgdGhpcy5pbnRlcmFjdGlvbkRPTUVsZW1lbnQgPSBlbGVtZW50O1xuXG4gICAgdGhpcy5yZXNvbHV0aW9uID0gcmVzb2x1dGlvbiB8fCAxO1xuXG4gICAgdGhpcy5hZGRFdmVudHMoKTtcbn07XG5cbi8qKlxuICogUmVnaXN0ZXJzIGFsbCB0aGUgRE9NIGV2ZW50c1xuICpcbiAqIEBwcml2YXRlXG4gKi9cbkludGVyYWN0aW9uTWFuYWdlci5wcm90b3R5cGUuYWRkRXZlbnRzID0gZnVuY3Rpb24gKClcbntcbiAgICBpZiAoIXRoaXMuaW50ZXJhY3Rpb25ET01FbGVtZW50KVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvcmUudGlja2VyLnNoYXJlZC5hZGQodGhpcy51cGRhdGUsIHRoaXMpO1xuXG4gICAgaWYgKHdpbmRvdy5uYXZpZ2F0b3IubXNQb2ludGVyRW5hYmxlZClcbiAgICB7XG4gICAgICAgIHRoaXMuaW50ZXJhY3Rpb25ET01FbGVtZW50LnN0eWxlWyctbXMtY29udGVudC16b29taW5nJ10gPSAnbm9uZSc7XG4gICAgICAgIHRoaXMuaW50ZXJhY3Rpb25ET01FbGVtZW50LnN0eWxlWyctbXMtdG91Y2gtYWN0aW9uJ10gPSAnbm9uZSc7XG4gICAgfVxuXG4gICAgd2luZG93LmRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlbW92ZScsICAgIHRoaXMub25Nb3VzZU1vdmUsIHRydWUpO1xuICAgIHRoaXMuaW50ZXJhY3Rpb25ET01FbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlZG93bicsICAgIHRoaXMub25Nb3VzZURvd24sIHRydWUpO1xuICAgIHRoaXMuaW50ZXJhY3Rpb25ET01FbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlb3V0JywgICAgIHRoaXMub25Nb3VzZU91dCwgdHJ1ZSk7XG5cbiAgICB0aGlzLmludGVyYWN0aW9uRE9NRWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCd0b3VjaHN0YXJ0JywgICB0aGlzLm9uVG91Y2hTdGFydCwgdHJ1ZSk7XG4gICAgdGhpcy5pbnRlcmFjdGlvbkRPTUVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigndG91Y2hlbmQnLCAgICAgdGhpcy5vblRvdWNoRW5kLCB0cnVlKTtcbiAgICB0aGlzLmludGVyYWN0aW9uRE9NRWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCd0b3VjaG1vdmUnLCAgICB0aGlzLm9uVG91Y2hNb3ZlLCB0cnVlKTtcblxuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdtb3VzZXVwJywgIHRoaXMub25Nb3VzZVVwLCB0cnVlKTtcblxuICAgIHRoaXMuZXZlbnRzQWRkZWQgPSB0cnVlO1xufTtcblxuLyoqXG4gKiBSZW1vdmVzIGFsbCB0aGUgRE9NIGV2ZW50cyB0aGF0IHdlcmUgcHJldmlvdXNseSByZWdpc3RlcmVkXG4gKlxuICogQHByaXZhdGVcbiAqL1xuSW50ZXJhY3Rpb25NYW5hZ2VyLnByb3RvdHlwZS5yZW1vdmVFdmVudHMgPSBmdW5jdGlvbiAoKVxue1xuICAgIGlmICghdGhpcy5pbnRlcmFjdGlvbkRPTUVsZW1lbnQpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29yZS50aWNrZXIuc2hhcmVkLnJlbW92ZSh0aGlzLnVwZGF0ZSk7XG5cbiAgICBpZiAod2luZG93Lm5hdmlnYXRvci5tc1BvaW50ZXJFbmFibGVkKVxuICAgIHtcbiAgICAgICAgdGhpcy5pbnRlcmFjdGlvbkRPTUVsZW1lbnQuc3R5bGVbJy1tcy1jb250ZW50LXpvb21pbmcnXSA9ICcnO1xuICAgICAgICB0aGlzLmludGVyYWN0aW9uRE9NRWxlbWVudC5zdHlsZVsnLW1zLXRvdWNoLWFjdGlvbiddID0gJyc7XG4gICAgfVxuXG4gICAgd2luZG93LmRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21vdXNlbW92ZScsIHRoaXMub25Nb3VzZU1vdmUsIHRydWUpO1xuICAgIHRoaXMuaW50ZXJhY3Rpb25ET01FbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21vdXNlZG93bicsIHRoaXMub25Nb3VzZURvd24sIHRydWUpO1xuICAgIHRoaXMuaW50ZXJhY3Rpb25ET01FbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21vdXNlb3V0JywgIHRoaXMub25Nb3VzZU91dCwgdHJ1ZSk7XG5cbiAgICB0aGlzLmludGVyYWN0aW9uRE9NRWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCd0b3VjaHN0YXJ0JywgdGhpcy5vblRvdWNoU3RhcnQsIHRydWUpO1xuICAgIHRoaXMuaW50ZXJhY3Rpb25ET01FbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3RvdWNoZW5kJywgIHRoaXMub25Ub3VjaEVuZCwgdHJ1ZSk7XG4gICAgdGhpcy5pbnRlcmFjdGlvbkRPTUVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigndG91Y2htb3ZlJywgdGhpcy5vblRvdWNoTW92ZSwgdHJ1ZSk7XG5cbiAgICB0aGlzLmludGVyYWN0aW9uRE9NRWxlbWVudCA9IG51bGw7XG5cbiAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcignbW91c2V1cCcsICB0aGlzLm9uTW91c2VVcCwgdHJ1ZSk7XG5cbiAgICB0aGlzLmV2ZW50c0FkZGVkID0gZmFsc2U7XG59O1xuXG4vKipcbiAqIFVwZGF0ZXMgdGhlIHN0YXRlIG9mIGludGVyYWN0aXZlIG9iamVjdHMuXG4gKiBJbnZva2VkIGJ5IGEgdGhyb3R0bGVkIHRpY2tlciB1cGRhdGUgZnJvbVxuICoge0BsaW5rIFBJWEkudGlja2VyLnNoYXJlZH0uXG4gKlxuICogQHBhcmFtIGRlbHRhVGltZSB7bnVtYmVyfVxuICovXG5JbnRlcmFjdGlvbk1hbmFnZXIucHJvdG90eXBlLnVwZGF0ZSA9IGZ1bmN0aW9uIChkZWx0YVRpbWUpXG57XG4gICAgdGhpcy5fZGVsdGFUaW1lICs9IGRlbHRhVGltZTtcblxuICAgIGlmICh0aGlzLl9kZWx0YVRpbWUgPCB0aGlzLmludGVyYWN0aW9uRnJlcXVlbmN5KVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuX2RlbHRhVGltZSA9IDA7XG5cbiAgICBpZiAoIXRoaXMuaW50ZXJhY3Rpb25ET01FbGVtZW50KVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIGlmIHRoZSB1c2VyIG1vdmUgdGhlIG1vdXNlIHRoaXMgY2hlY2sgaGFzIGFscmVhZHkgYmVlbiBkZm9uZSB1c2luZyB0aGUgbW91c2UgbW92ZSFcbiAgICBpZih0aGlzLmRpZE1vdmUpXG4gICAge1xuICAgICAgICB0aGlzLmRpZE1vdmUgPSBmYWxzZTtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuY3Vyc29yID0gJ2luaGVyaXQnO1xuXG4gICAgdGhpcy5wcm9jZXNzSW50ZXJhY3RpdmUodGhpcy5tb3VzZS5nbG9iYWwsIHRoaXMucmVuZGVyZXIuX2xhc3RPYmplY3RSZW5kZXJlZCwgdGhpcy5wcm9jZXNzTW91c2VPdmVyT3V0LCB0cnVlICk7XG5cbiAgICBpZiAodGhpcy5jdXJyZW50Q3Vyc29yU3R5bGUgIT09IHRoaXMuY3Vyc29yKVxuICAgIHtcbiAgICAgICAgdGhpcy5jdXJyZW50Q3Vyc29yU3R5bGUgPSB0aGlzLmN1cnNvcjtcbiAgICAgICAgdGhpcy5pbnRlcmFjdGlvbkRPTUVsZW1lbnQuc3R5bGUuY3Vyc29yID0gdGhpcy5jdXJzb3I7XG4gICAgfVxuXG4gICAgLy9UT0RPXG59O1xuXG4vKipcbiAqIERpc3BhdGNoZXMgYW4gZXZlbnQgb24gdGhlIGRpc3BsYXkgb2JqZWN0IHRoYXQgd2FzIGludGVyYWN0ZWQgd2l0aFxuICpcbiAqIEBwYXJhbSBkaXNwbGF5T2JqZWN0IHtQSVhJLkNvbnRhaW5lcnxQSVhJLlNwcml0ZXxQSVhJLmV4dHJhcy5UaWxpbmdTcHJpdGV9IHRoZSBkaXNwbGF5IG9iamVjdCBpbiBxdWVzdGlvblxuICogQHBhcmFtIGV2ZW50U3RyaW5nIHtzdHJpbmd9IHRoZSBuYW1lIG9mIHRoZSBldmVudCAoZS5nLCBtb3VzZWRvd24pXG4gKiBAcGFyYW0gZXZlbnREYXRhIHtvYmplY3R9IHRoZSBldmVudCBkYXRhIG9iamVjdFxuICogQHByaXZhdGVcbiAqL1xuSW50ZXJhY3Rpb25NYW5hZ2VyLnByb3RvdHlwZS5kaXNwYXRjaEV2ZW50ID0gZnVuY3Rpb24gKCBkaXNwbGF5T2JqZWN0LCBldmVudFN0cmluZywgZXZlbnREYXRhIClcbntcbiAgICBpZighZXZlbnREYXRhLnN0b3BwZWQpXG4gICAge1xuICAgICAgICBldmVudERhdGEudGFyZ2V0ID0gZGlzcGxheU9iamVjdDtcbiAgICAgICAgZXZlbnREYXRhLnR5cGUgPSBldmVudFN0cmluZztcblxuICAgICAgICBkaXNwbGF5T2JqZWN0LmVtaXQoIGV2ZW50U3RyaW5nLCBldmVudERhdGEgKTtcblxuICAgICAgICBpZiggZGlzcGxheU9iamVjdFtldmVudFN0cmluZ10gKVxuICAgICAgICB7XG4gICAgICAgICAgICBkaXNwbGF5T2JqZWN0W2V2ZW50U3RyaW5nXSggZXZlbnREYXRhICk7XG4gICAgICAgIH1cbiAgICB9XG59O1xuXG4vKipcbiAqIE1hcHMgeCBhbmQgeSBjb29yZHMgZnJvbSBhIERPTSBvYmplY3QgYW5kIG1hcHMgdGhlbSBjb3JyZWN0bHkgdG8gdGhlIHBpeGkgdmlldy4gVGhlIHJlc3VsdGluZyB2YWx1ZSBpcyBzdG9yZWQgaW4gdGhlIHBvaW50LlxuICogVGhpcyB0YWtlcyBpbnRvIGFjY291bnQgdGhlIGZhY3QgdGhhdCB0aGUgRE9NIGVsZW1lbnQgY291bGQgYmUgc2NhbGVkIGFuZCBwb3NpdGlvbmVkIGFueXdoZXJlIG9uIHRoZSBzY3JlZW4uXG4gKlxuICogQHBhcmFtICB7UElYSS5Qb2ludH0gcG9pbnQgdGhlIHBvaW50IHRoYXQgdGhlIHJlc3VsdCB3aWxsIGJlIHN0b3JlZCBpblxuICogQHBhcmFtICB7bnVtYmVyfSB4ICAgICB0aGUgeCBjb29yZCBvZiB0aGUgcG9zaXRpb24gdG8gbWFwXG4gKiBAcGFyYW0gIHtudW1iZXJ9IHkgICAgIHRoZSB5IGNvb3JkIG9mIHRoZSBwb3NpdGlvbiB0byBtYXBcbiAqL1xuSW50ZXJhY3Rpb25NYW5hZ2VyLnByb3RvdHlwZS5tYXBQb3NpdGlvblRvUG9pbnQgPSBmdW5jdGlvbiAoIHBvaW50LCB4LCB5IClcbntcbiAgICB2YXIgcmVjdCA9IHRoaXMuaW50ZXJhY3Rpb25ET01FbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgIHBvaW50LnggPSAoICggeCAtIHJlY3QubGVmdCApICogKHRoaXMuaW50ZXJhY3Rpb25ET01FbGVtZW50LndpZHRoICAvIHJlY3Qud2lkdGggICkgKSAvIHRoaXMucmVzb2x1dGlvbjtcbiAgICBwb2ludC55ID0gKCAoIHkgLSByZWN0LnRvcCAgKSAqICh0aGlzLmludGVyYWN0aW9uRE9NRWxlbWVudC5oZWlnaHQgLyByZWN0LmhlaWdodCApICkgLyB0aGlzLnJlc29sdXRpb247XG59O1xuXG4vKipcbiAqIFRoaXMgZnVuY3Rpb24gaXMgcHJvdmlkZXMgYSBuZWF0IHdheSBvZiBjcmF3bGluZyB0aHJvdWdoIHRoZSBzY2VuZSBncmFwaCBhbmQgcnVubmluZyBhIHNwZWNpZmllZCBmdW5jdGlvbiBvbiBhbGwgaW50ZXJhY3RpdmUgb2JqZWN0cyBpdCBmaW5kcy5cbiAqIEl0IHdpbGwgYWxzbyB0YWtlIGNhcmUgb2YgaGl0IHRlc3RpbmcgdGhlIGludGVyYWN0aXZlIG9iamVjdHMgYW5kIHBhc3NlcyB0aGUgaGl0IGFjcm9zcyBpbiB0aGUgZnVuY3Rpb24uXG4gKlxuICogQHBhcmFtICB7UElYSS5Qb2ludH0gcG9pbnQgdGhlIHBvaW50IHRoYXQgaXMgdGVzdGVkIGZvciBjb2xsaXNpb25cbiAqIEBwYXJhbSAge1BJWEkuQ29udGFpbmVyfFBJWEkuU3ByaXRlfFBJWEkuZXh0cmFzLlRpbGluZ1Nwcml0ZX0gZGlzcGxheU9iamVjdCB0aGUgZGlzcGxheU9iamVjdCB0aGF0IHdpbGwgYmUgaGl0IHRlc3QgKHJlY3VyY3Npdmx5IGNyYXdscyBpdHMgY2hpbGRyZW4pXG4gKiBAcGFyYW0gIHtGdW5jdGlvbn0gZnVuYyB0aGUgZnVuY3Rpb24gdGhhdCB3aWxsIGJlIGNhbGxlZCBvbiBlYWNoIGludGVyYWN0aXZlIG9iamVjdC4gVGhlIGRpc3BsYXlPYmplY3QgYW5kIGhpdCB3aWxsIGJlIHBhc3NlZCB0byB0aGUgZnVuY3Rpb25cbiAqIEBwYXJhbSAge2Jvb2xlYW59IGhpdFRlc3QgdGhpcyBpbmRpY2F0ZXMgaWYgdGhlIG9iamVjdHMgaW5zaWRlIHNob3VsZCBiZSBoaXQgdGVzdCBhZ2FpbnN0IHRoZSBwb2ludFxuICogQHJldHVybiB7Ym9vbGVhbn0gcmV0dXJucyB0cnVlIGlmIHRoZSBkaXNwbGF5T2JqZWN0IGhpdCB0aGUgcG9pbnRcbiAqL1xuSW50ZXJhY3Rpb25NYW5hZ2VyLnByb3RvdHlwZS5wcm9jZXNzSW50ZXJhY3RpdmUgPSBmdW5jdGlvbiAocG9pbnQsIGRpc3BsYXlPYmplY3QsIGZ1bmMsIGhpdFRlc3QsIGludGVyYWN0aXZlKVxue1xuICAgIGlmKCFkaXNwbGF5T2JqZWN0IHx8ICFkaXNwbGF5T2JqZWN0LnZpc2libGUpXG4gICAge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgLy8gVG9vayBhIGxpdHRsZSB3aGlsZSB0byByZXdvcmsgdGhpcyBmdW5jdGlvbiBjb3JyZWN0bHkhIEJ1dCBub3cgaXQgaXMgZG9uZSBhbmQgbmljZSBhbmQgb3B0aW1pc2VkLiBeX15cbiAgICAvLyBcbiAgICAvLyBUaGlzIGZ1bmN0aW9uIHdpbGwgbm93IGxvb3AgdGhyb3VnaCBhbGwgb2JqZWN0cyBhbmQgdGhlbiBvbmx5IGhpdCB0ZXN0IHRoZSBvYmplY3RzIGl0IEhBUyB0bywgbm90IGFsbCBvZiB0aGVtLiBNVUNIIGZhc3Rlci4uXG4gICAgLy8gQW4gb2JqZWN0IHdpbGwgYmUgaGl0IHRlc3QgaWYgdGhlIGZvbGxvd2luZyBpcyB0cnVlOlxuICAgIC8vIFxuICAgIC8vIDE6IEl0IGlzIGludGVyYWN0aXZlLlxuICAgIC8vIDI6IEl0IGJlbG9uZ3MgdG8gYSBwYXJlbnQgdGhhdCBpcyBpbnRlcmFjdGl2ZSBBTkQgb25lIG9mIHRoZSBwYXJlbnRzIGNoaWxkcmVuIGhhdmUgbm90IGFscmVhZHkgYmVlbiBoaXQuXG4gICAgLy8gXG4gICAgLy8gQXMgYW5vdGhlciBsaXR0bGUgb3B0aW1pc2F0aW9uIG9uY2UgYW4gaW50ZXJhY3RpdmUgb2JqZWN0IGhhcyBiZWVuIGhpdCB3ZSBjYW4gY2Fycnkgb24gdGhyb3VnaCB0aGUgc2NlbmVncmFwaCwgYnV0IHdlIGtub3cgdGhhdCB0aGVyZSB3aWxsIGJlIG5vIG1vcmUgaGl0cyEgU28gd2UgY2FuIGF2b2lkIGV4dHJhIGhpdCB0ZXN0c1xuICAgIC8vIEEgZmluYWwgb3B0aW1pc2F0aW9uIGlzIHRoYXQgYW4gb2JqZWN0IGlzIG5vdCBoaXQgdGVzdCBkaXJlY3RseSBpZiBhIGNoaWxkIGhhcyBhbHJlYWR5IGJlZW4gaGl0LlxuICAgIFxuICAgIHZhciBoaXQgPSBmYWxzZSxcbiAgICAgICAgaW50ZXJhY3RpdmVQYXJlbnQgPSBpbnRlcmFjdGl2ZSA9IGRpc3BsYXlPYmplY3QuaW50ZXJhY3RpdmUgfHwgaW50ZXJhY3RpdmU7XG5cbiAgICAvLyBpZiB0aGUgZGlzcGxheW9iamVjdCBoYXMgYSBoaXRBcmVhLCB0aGVuIGl0IGRvZXMgbm90IG5lZWQgdG8gaGl0VGVzdCBjaGlsZHJlbi5cbiAgICBpZihkaXNwbGF5T2JqZWN0LmhpdEFyZWEpXG4gICAge1xuICAgICAgICBpbnRlcmFjdGl2ZVBhcmVudCA9IGZhbHNlO1xuICAgIH1cblxuICAgIC8vICoqIEZSRUUgVElQICoqISBJZiBhbiBvYmplY3QgaXMgbm90IGludGVyYWN0dGl2ZSBvciBoYXMgbm8gYnV0dG9ucyBpbiBpdCAoc3VjaCBhcyBhIGdhbWUgc2NlbmUhKSBzZXQgaW50ZXJhY3RpdmVDaGlsZHJlbiB0byBmYWxzZSBmb3IgdGhhdCBkaXNwbGF5T2JqZWN0LlxuICAgIC8vIFRoaXMgd2lsbCBhbGxvdyBwaXhpIHRvIGNvbXBsZXRseSBpZ25vcmUgYW5kIGJ5cGFzcyBjaGVja2luZyB0aGUgZGlzcGxheU9iamVjdHMgY2hpbGRyZW4uXG4gICAgaWYoZGlzcGxheU9iamVjdC5pbnRlcmFjdGl2ZUNoaWxkcmVuKVxuICAgIHsgICAgICAgXG4gICAgICAgIHZhciBjaGlsZHJlbiA9IGRpc3BsYXlPYmplY3QuY2hpbGRyZW47XG4gICAgICAgIFxuICAgICAgICBmb3IgKHZhciBpID0gY2hpbGRyZW4ubGVuZ3RoLTE7IGkgPj0gMDsgaS0tKVxuICAgICAgICB7XG4gICAgICAgICAgICAvLyB0aW1lIHRvIGdldCByZWN1cnNpdmUuLiBpZiB0aGlzIGZ1bmN0aW9uIHdpbGwgcmV0dXJuIGlmIHNvbXRoaW5nIGlzIGhpdC4uXG4gICAgICAgICAgICBpZiggdGhpcy5wcm9jZXNzSW50ZXJhY3RpdmUocG9pbnQsIGNoaWxkcmVuW2ldLCBmdW5jLCBoaXRUZXN0LCBpbnRlcmFjdGl2ZVBhcmVudCkgKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGhpdCA9IHRydWU7XG5cbiAgICAgICAgICAgICAgICAvLyB3ZSBubyBsb25nZXIgbmVlZCB0byBoaXQgdGVzdCBhbnkgbW9yZSBvYmplY3RzIGluIHRoaXMgY29udGFpbmVyIGFzIHdlIHdlIG5vdyBrbm93IHRoZSBwYXJlbnQgaGFzIGJlZW4gaGl0XG4gICAgICAgICAgICAgICAgaW50ZXJhY3RpdmVQYXJlbnQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAvLyBJZiB0aGUgY2hpbGQgaXMgaW50ZXJhY3RpdmUgLCB0aGF0IG1lYW5zIHRoYXQgdGhlIG9iamVjdCBoaXQgd2FzIGFjdHVhbGx5IGludGVyYWN0aXZlIGFuZCBub3QganVzdCB0aGUgY2hpbGQgb2YgYW4gaW50ZXJhY3RpdmUgb2JqZWN0LiBcbiAgICAgICAgICAgICAgICAvLyBUaGlzIG1lYW5zIHdlIG5vIGxvbmdlciBuZWVkIHRvIGhpdCB0ZXN0IGFueXRoaW5nIGVsc2UuIFdlIHN0aWxsIG5lZWQgdG8gcnVuIHRocm91Z2ggYWxsIG9iamVjdHMsIGJ1dCB3ZSBkb24ndCBuZWVkIHRvIHBlcmZvcm0gYW55IGhpdCB0ZXN0cy5cbiAgICAgICAgICAgICAgICBpZihjaGlsZHJlbltpXS5pbnRlcmFjdGl2ZSlcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIGhpdFRlc3QgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBubyBwb2ludCBydW5uaW5nIHRoaXMgaWYgdGhlIGl0ZW0gaXMgbm90IGludGVyYWN0aXZlIG9yIGRvZXMgbm90IGhhdmUgYW4gaW50ZXJhY3RpdmUgcGFyZW50LlxuICAgIGlmKGludGVyYWN0aXZlKVxuICAgIHtcbiAgICAgICAgLy8gaWYgd2UgYXJlIGhpdCB0ZXN0aW5nIChhcyBpbiB3ZSBoYXZlIG5vIGhpdCBhbnkgb2JqZWN0cyB5ZXQpXG4gICAgICAgIC8vIFdlIGFsc28gZG9uJ3QgbmVlZCB0byB3b3JyeSBhYm91dCBoaXQgdGVzdGluZyBpZiBvbmNlIG9mIHRoZSBkaXNwbGF5T2JqZWN0cyBjaGlsZHJlbiBoYXMgYWxyZWFkeSBiZWVuIGhpdCFcbiAgICAgICAgaWYoaGl0VGVzdCAmJiAhaGl0KVxuICAgICAgICB7ICBcbiAgICAgICAgICAgIGlmKGRpc3BsYXlPYmplY3QuaGl0QXJlYSlcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBkaXNwbGF5T2JqZWN0LndvcmxkVHJhbnNmb3JtLmFwcGx5SW52ZXJzZShwb2ludCwgIHRoaXMuX3RlbXBQb2ludCk7XG4gICAgICAgICAgICAgICAgaGl0ID0gZGlzcGxheU9iamVjdC5oaXRBcmVhLmNvbnRhaW5zKCB0aGlzLl90ZW1wUG9pbnQueCwgdGhpcy5fdGVtcFBvaW50LnkgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYoZGlzcGxheU9iamVjdC5jb250YWluc1BvaW50KVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGhpdCA9IGRpc3BsYXlPYmplY3QuY29udGFpbnNQb2ludChwb2ludCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZihkaXNwbGF5T2JqZWN0LmludGVyYWN0aXZlKVxuICAgICAgICB7XG4gICAgICAgICAgICBmdW5jKGRpc3BsYXlPYmplY3QsIGhpdCk7IFxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGhpdDtcbiAgXG59O1xuXG5cbi8qKlxuICogSXMgY2FsbGVkIHdoZW4gdGhlIG1vdXNlIGJ1dHRvbiBpcyBwcmVzc2VkIGRvd24gb24gdGhlIHJlbmRlcmVyIGVsZW1lbnRcbiAqXG4gKiBAcGFyYW0gZXZlbnQge0V2ZW50fSBUaGUgRE9NIGV2ZW50IG9mIGEgbW91c2UgYnV0dG9uIGJlaW5nIHByZXNzZWQgZG93blxuICogQHByaXZhdGVcbiAqL1xuSW50ZXJhY3Rpb25NYW5hZ2VyLnByb3RvdHlwZS5vbk1vdXNlRG93biA9IGZ1bmN0aW9uIChldmVudClcbntcbiAgICB0aGlzLm1vdXNlLm9yaWdpbmFsRXZlbnQgPSBldmVudDtcbiAgICB0aGlzLmV2ZW50RGF0YS5kYXRhID0gdGhpcy5tb3VzZTtcbiAgICB0aGlzLmV2ZW50RGF0YS5zdG9wcGVkID0gZmFsc2U7XG5cbiAgICAvLyBVcGRhdGUgaW50ZXJuYWwgbW91c2UgcmVmZXJlbmNlXG4gICAgdGhpcy5tYXBQb3NpdGlvblRvUG9pbnQoIHRoaXMubW91c2UuZ2xvYmFsLCBldmVudC5jbGllbnRYLCBldmVudC5jbGllbnRZKTtcblxuICAgIGlmICh0aGlzLmF1dG9QcmV2ZW50RGVmYXVsdClcbiAgICB7XG4gICAgICAgIHRoaXMubW91c2Uub3JpZ2luYWxFdmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIH1cblxuICAgIHRoaXMucHJvY2Vzc0ludGVyYWN0aXZlKHRoaXMubW91c2UuZ2xvYmFsLCB0aGlzLnJlbmRlcmVyLl9sYXN0T2JqZWN0UmVuZGVyZWQsIHRoaXMucHJvY2Vzc01vdXNlRG93biwgdHJ1ZSApO1xufTtcblxuLyoqXG4gKiBQcm9jZXNzZXMgdGhlIHJlc3VsdCBvZiB0aGUgbW91c2UgZG93biBjaGVjayBhbmQgZGlzcGF0Y2hlcyB0aGUgZXZlbnQgaWYgbmVlZCBiZVxuICpcbiAqIEBwYXJhbSBkaXNwbGF5T2JqZWN0IHtQSVhJLkNvbnRhaW5lcnxQSVhJLlNwcml0ZXxQSVhJLmV4dHJhcy5UaWxpbmdTcHJpdGV9IFRoZSBkaXNwbGF5IG9iamVjdCB0aGF0IHdhcyB0ZXN0ZWRcbiAqIEBwYXJhbSBoaXQge2Jvb2xlYW59IHRoZSByZXN1bHQgb2YgdGhlIGhpdCB0ZXN0IG9uIHRoZSBkaXNwYXkgb2JqZWN0XG4gKiBAcHJpdmF0ZVxuICovXG5JbnRlcmFjdGlvbk1hbmFnZXIucHJvdG90eXBlLnByb2Nlc3NNb3VzZURvd24gPSBmdW5jdGlvbiAoIGRpc3BsYXlPYmplY3QsIGhpdCApXG57XG4gICAgdmFyIGUgPSB0aGlzLm1vdXNlLm9yaWdpbmFsRXZlbnQ7XG4gICAgXG4gICAgdmFyIGlzUmlnaHRCdXR0b24gPSBlLmJ1dHRvbiA9PT0gMiB8fCBlLndoaWNoID09PSAzO1xuXG4gICAgaWYoaGl0KVxuICAgIHtcbiAgICAgICAgZGlzcGxheU9iamVjdFsgaXNSaWdodEJ1dHRvbiA/ICdfaXNSaWdodERvd24nIDogJ19pc0xlZnREb3duJyBdID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50KCBkaXNwbGF5T2JqZWN0LCBpc1JpZ2h0QnV0dG9uID8gJ3JpZ2h0ZG93bicgOiAnbW91c2Vkb3duJywgdGhpcy5ldmVudERhdGEgKTtcbiAgICB9XG59O1xuXG5cblxuLyoqXG4gKiBJcyBjYWxsZWQgd2hlbiB0aGUgbW91c2UgYnV0dG9uIGlzIHJlbGVhc2VkIG9uIHRoZSByZW5kZXJlciBlbGVtZW50XG4gKlxuICogQHBhcmFtIGV2ZW50IHtFdmVudH0gVGhlIERPTSBldmVudCBvZiBhIG1vdXNlIGJ1dHRvbiBiZWluZyByZWxlYXNlZFxuICogQHByaXZhdGVcbiAqL1xuSW50ZXJhY3Rpb25NYW5hZ2VyLnByb3RvdHlwZS5vbk1vdXNlVXAgPSBmdW5jdGlvbiAoZXZlbnQpXG57XG4gICAgdGhpcy5tb3VzZS5vcmlnaW5hbEV2ZW50ID0gZXZlbnQ7XG4gICAgdGhpcy5ldmVudERhdGEuZGF0YSA9IHRoaXMubW91c2U7XG4gICAgdGhpcy5ldmVudERhdGEuc3RvcHBlZCA9IGZhbHNlO1xuXG4gICAgLy8gVXBkYXRlIGludGVybmFsIG1vdXNlIHJlZmVyZW5jZVxuICAgIHRoaXMubWFwUG9zaXRpb25Ub1BvaW50KCB0aGlzLm1vdXNlLmdsb2JhbCwgZXZlbnQuY2xpZW50WCwgZXZlbnQuY2xpZW50WSk7XG5cbiAgICB0aGlzLnByb2Nlc3NJbnRlcmFjdGl2ZSh0aGlzLm1vdXNlLmdsb2JhbCwgdGhpcy5yZW5kZXJlci5fbGFzdE9iamVjdFJlbmRlcmVkLCB0aGlzLnByb2Nlc3NNb3VzZVVwLCB0cnVlICk7XG59O1xuXG4vKipcbiAqIFByb2Nlc3NlcyB0aGUgcmVzdWx0IG9mIHRoZSBtb3VzZSB1cCBjaGVjayBhbmQgZGlzcGF0Y2hlcyB0aGUgZXZlbnQgaWYgbmVlZCBiZVxuICpcbiAqIEBwYXJhbSBkaXNwbGF5T2JqZWN0IHtQSVhJLkNvbnRhaW5lcnxQSVhJLlNwcml0ZXxQSVhJLmV4dHJhcy5UaWxpbmdTcHJpdGV9IFRoZSBkaXNwbGF5IG9iamVjdCB0aGF0IHdhcyB0ZXN0ZWRcbiAqIEBwYXJhbSBoaXQge2Jvb2xlYW59IHRoZSByZXN1bHQgb2YgdGhlIGhpdCB0ZXN0IG9uIHRoZSBkaXNwbGF5IG9iamVjdFxuICogQHByaXZhdGVcbiAqL1xuSW50ZXJhY3Rpb25NYW5hZ2VyLnByb3RvdHlwZS5wcm9jZXNzTW91c2VVcCA9IGZ1bmN0aW9uICggZGlzcGxheU9iamVjdCwgaGl0IClcbntcbiAgICB2YXIgZSA9IHRoaXMubW91c2Uub3JpZ2luYWxFdmVudDtcblxuICAgIHZhciBpc1JpZ2h0QnV0dG9uID0gZS5idXR0b24gPT09IDIgfHwgZS53aGljaCA9PT0gMztcbiAgICB2YXIgaXNEb3duID0gIGlzUmlnaHRCdXR0b24gPyAnX2lzUmlnaHREb3duJyA6ICdfaXNMZWZ0RG93bic7XG5cbiAgICBpZihoaXQpXG4gICAge1xuICAgICAgICB0aGlzLmRpc3BhdGNoRXZlbnQoIGRpc3BsYXlPYmplY3QsIGlzUmlnaHRCdXR0b24gPyAncmlnaHR1cCcgOiAnbW91c2V1cCcsIHRoaXMuZXZlbnREYXRhICk7XG5cbiAgICAgICAgaWYoIGRpc3BsYXlPYmplY3RbIGlzRG93biBdIClcbiAgICAgICAge1xuICAgICAgICAgICAgZGlzcGxheU9iamVjdFsgaXNEb3duIF0gPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudCggZGlzcGxheU9iamVjdCwgaXNSaWdodEJ1dHRvbiA/ICdyaWdodGNsaWNrJyA6ICdjbGljaycsIHRoaXMuZXZlbnREYXRhICk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgaWYoIGRpc3BsYXlPYmplY3RbIGlzRG93biBdIClcbiAgICAgICAge1xuICAgICAgICAgICAgZGlzcGxheU9iamVjdFsgaXNEb3duIF0gPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudCggZGlzcGxheU9iamVjdCwgaXNSaWdodEJ1dHRvbiA/ICdyaWdodHVwb3V0c2lkZScgOiAnbW91c2V1cG91dHNpZGUnLCB0aGlzLmV2ZW50RGF0YSApO1xuICAgICAgICB9XG4gICAgfVxufTtcblxuXG4vKipcbiAqIElzIGNhbGxlZCB3aGVuIHRoZSBtb3VzZSBtb3ZlcyBhY3Jvc3MgdGhlIHJlbmRlcmVyIGVsZW1lbnRcbiAqXG4gKiBAcGFyYW0gZXZlbnQge0V2ZW50fSBUaGUgRE9NIGV2ZW50IG9mIHRoZSBtb3VzZSBtb3ZpbmdcbiAqIEBwcml2YXRlXG4gKi9cbkludGVyYWN0aW9uTWFuYWdlci5wcm90b3R5cGUub25Nb3VzZU1vdmUgPSBmdW5jdGlvbiAoZXZlbnQpXG57XG4gICAgdGhpcy5tb3VzZS5vcmlnaW5hbEV2ZW50ID0gZXZlbnQ7XG4gICAgdGhpcy5ldmVudERhdGEuZGF0YSA9IHRoaXMubW91c2U7XG4gICAgdGhpcy5ldmVudERhdGEuc3RvcHBlZCA9IGZhbHNlO1xuXG4gICAgdGhpcy5tYXBQb3NpdGlvblRvUG9pbnQoIHRoaXMubW91c2UuZ2xvYmFsLCBldmVudC5jbGllbnRYLCBldmVudC5jbGllbnRZKTtcblxuICAgIHRoaXMuZGlkTW92ZSA9IHRydWU7XG5cbiAgICB0aGlzLmN1cnNvciA9ICdpbmhlcml0JztcblxuICAgIHRoaXMucHJvY2Vzc0ludGVyYWN0aXZlKHRoaXMubW91c2UuZ2xvYmFsLCB0aGlzLnJlbmRlcmVyLl9sYXN0T2JqZWN0UmVuZGVyZWQsIHRoaXMucHJvY2Vzc01vdXNlTW92ZSwgdHJ1ZSApO1xuXG4gICAgaWYgKHRoaXMuY3VycmVudEN1cnNvclN0eWxlICE9PSB0aGlzLmN1cnNvcilcbiAgICB7XG4gICAgICAgIHRoaXMuY3VycmVudEN1cnNvclN0eWxlID0gdGhpcy5jdXJzb3I7XG4gICAgICAgIHRoaXMuaW50ZXJhY3Rpb25ET01FbGVtZW50LnN0eWxlLmN1cnNvciA9IHRoaXMuY3Vyc29yO1xuICAgIH1cblxuICAgIC8vVE9ETyBCVUcgZm9yIHBhcmVudHMgaW5lcmFjdGl2ZSBvYmplY3QgKGJvcmRlciBvcmRlciBpc3N1ZSlcbn07XG5cbi8qKlxuICogUHJvY2Vzc2VzIHRoZSByZXN1bHQgb2YgdGhlIG1vdXNlIG1vdmUgY2hlY2sgYW5kIGRpc3BhdGNoZXMgdGhlIGV2ZW50IGlmIG5lZWQgYmVcbiAqXG4gKiBAcGFyYW0gZGlzcGxheU9iamVjdCB7UElYSS5Db250YWluZXJ8UElYSS5TcHJpdGV8UElYSS5leHRyYXMuVGlsaW5nU3ByaXRlfSBUaGUgZGlzcGxheSBvYmplY3QgdGhhdCB3YXMgdGVzdGVkXG4gKiBAcGFyYW0gaGl0IHtib29sZWFufSB0aGUgcmVzdWx0IG9mIHRoZSBoaXQgdGVzdCBvbiB0aGUgZGlzcGxheSBvYmplY3RcbiAqIEBwcml2YXRlXG4gKi9cbkludGVyYWN0aW9uTWFuYWdlci5wcm90b3R5cGUucHJvY2Vzc01vdXNlTW92ZSA9IGZ1bmN0aW9uICggZGlzcGxheU9iamVjdCwgaGl0IClcbntcbiAgICB0aGlzLmRpc3BhdGNoRXZlbnQoIGRpc3BsYXlPYmplY3QsICdtb3VzZW1vdmUnLCB0aGlzLmV2ZW50RGF0YSk7XG4gICAgdGhpcy5wcm9jZXNzTW91c2VPdmVyT3V0KGRpc3BsYXlPYmplY3QsIGhpdCk7XG59O1xuXG5cbi8qKlxuICogSXMgY2FsbGVkIHdoZW4gdGhlIG1vdXNlIGlzIG1vdmVkIG91dCBvZiB0aGUgcmVuZGVyZXIgZWxlbWVudFxuICpcbiAqIEBwYXJhbSBldmVudCB7RXZlbnR9IFRoZSBET00gZXZlbnQgb2YgYSBtb3VzZSBiZWluZyBtb3ZlZCBvdXRcbiAqIEBwcml2YXRlXG4gKi9cbkludGVyYWN0aW9uTWFuYWdlci5wcm90b3R5cGUub25Nb3VzZU91dCA9IGZ1bmN0aW9uIChldmVudClcbntcbiAgICB0aGlzLm1vdXNlLm9yaWdpbmFsRXZlbnQgPSBldmVudDtcbiAgICB0aGlzLmV2ZW50RGF0YS5zdG9wcGVkID0gZmFsc2U7XG5cbiAgICAvLyBVcGRhdGUgaW50ZXJuYWwgbW91c2UgcmVmZXJlbmNlXG4gICAgdGhpcy5tYXBQb3NpdGlvblRvUG9pbnQoIHRoaXMubW91c2UuZ2xvYmFsLCBldmVudC5jbGllbnRYLCBldmVudC5jbGllbnRZKTtcblxuICAgIHRoaXMuaW50ZXJhY3Rpb25ET01FbGVtZW50LnN0eWxlLmN1cnNvciA9ICdpbmhlcml0JztcblxuICAgIC8vIFRPRE8gb3B0aW1pemUgYnkgbm90IGNoZWNrIEVWRVJZIFRJTUUhIG1heWJlIGhhbGYgYXMgb2Z0ZW4/IC8vXG4gICAgdGhpcy5tYXBQb3NpdGlvblRvUG9pbnQoIHRoaXMubW91c2UuZ2xvYmFsLCBldmVudC5jbGllbnRYLCBldmVudC5jbGllbnRZICk7XG5cbiAgICB0aGlzLnByb2Nlc3NJbnRlcmFjdGl2ZSggdGhpcy5tb3VzZS5nbG9iYWwsIHRoaXMucmVuZGVyZXIuX2xhc3RPYmplY3RSZW5kZXJlZCwgdGhpcy5wcm9jZXNzTW91c2VPdmVyT3V0LCBmYWxzZSApO1xufTtcblxuLyoqXG4gKiBQcm9jZXNzZXMgdGhlIHJlc3VsdCBvZiB0aGUgbW91c2Ugb3Zlci9vdXQgY2hlY2sgYW5kIGRpc3BhdGNoZXMgdGhlIGV2ZW50IGlmIG5lZWQgYmVcbiAqXG4gKiBAcGFyYW0gZGlzcGxheU9iamVjdCB7UElYSS5Db250YWluZXJ8UElYSS5TcHJpdGV8UElYSS5leHRyYXMuVGlsaW5nU3ByaXRlfSBUaGUgZGlzcGxheSBvYmplY3QgdGhhdCB3YXMgdGVzdGVkXG4gKiBAcGFyYW0gaGl0IHtib29sZWFufSB0aGUgcmVzdWx0IG9mIHRoZSBoaXQgdGVzdCBvbiB0aGUgZGlzcGxheSBvYmplY3RcbiAqIEBwcml2YXRlXG4gKi9cbkludGVyYWN0aW9uTWFuYWdlci5wcm90b3R5cGUucHJvY2Vzc01vdXNlT3Zlck91dCA9IGZ1bmN0aW9uICggZGlzcGxheU9iamVjdCwgaGl0IClcbntcbiAgICBpZihoaXQpXG4gICAge1xuICAgICAgICBpZighZGlzcGxheU9iamVjdC5fb3ZlcilcbiAgICAgICAge1xuICAgICAgICAgICAgZGlzcGxheU9iamVjdC5fb3ZlciA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLmRpc3BhdGNoRXZlbnQoIGRpc3BsYXlPYmplY3QsICdtb3VzZW92ZXInLCB0aGlzLmV2ZW50RGF0YSApO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGRpc3BsYXlPYmplY3QuYnV0dG9uTW9kZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5jdXJzb3IgPSBkaXNwbGF5T2JqZWN0LmRlZmF1bHRDdXJzb3I7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgaWYoZGlzcGxheU9iamVjdC5fb3ZlcilcbiAgICAgICAge1xuICAgICAgICAgICAgZGlzcGxheU9iamVjdC5fb3ZlciA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50KCBkaXNwbGF5T2JqZWN0LCAnbW91c2VvdXQnLCB0aGlzLmV2ZW50RGF0YSk7XG4gICAgICAgIH1cbiAgICB9XG59O1xuXG5cbi8qKlxuICogSXMgY2FsbGVkIHdoZW4gYSB0b3VjaCBpcyBzdGFydGVkIG9uIHRoZSByZW5kZXJlciBlbGVtZW50XG4gKlxuICogQHBhcmFtIGV2ZW50IHtFdmVudH0gVGhlIERPTSBldmVudCBvZiBhIHRvdWNoIHN0YXJ0aW5nIG9uIHRoZSByZW5kZXJlciB2aWV3XG4gKiBAcHJpdmF0ZVxuICovXG5JbnRlcmFjdGlvbk1hbmFnZXIucHJvdG90eXBlLm9uVG91Y2hTdGFydCA9IGZ1bmN0aW9uIChldmVudClcbntcbiAgICBpZiAodGhpcy5hdXRvUHJldmVudERlZmF1bHQpXG4gICAge1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIH1cblxuICAgIHZhciBjaGFuZ2VkVG91Y2hlcyA9IGV2ZW50LmNoYW5nZWRUb3VjaGVzO1xuICAgIHZhciBjTGVuZ3RoID0gY2hhbmdlZFRvdWNoZXMubGVuZ3RoO1xuXG4gICAgZm9yICh2YXIgaT0wOyBpIDwgY0xlbmd0aDsgaSsrKVxuICAgIHtcbiAgICAgICAgdmFyIHRvdWNoRXZlbnQgPSBjaGFuZ2VkVG91Y2hlc1tpXTtcbiAgICAgICAgLy9UT0RPIFBPT0xcbiAgICAgICAgdmFyIHRvdWNoRGF0YSA9IHRoaXMuZ2V0VG91Y2hEYXRhKCB0b3VjaEV2ZW50ICk7XG5cbiAgICAgICAgdG91Y2hEYXRhLm9yaWdpbmFsRXZlbnQgPSBldmVudDtcblxuICAgICAgICB0aGlzLmV2ZW50RGF0YS5kYXRhID0gdG91Y2hEYXRhO1xuICAgICAgICB0aGlzLmV2ZW50RGF0YS5zdG9wcGVkID0gZmFsc2U7XG5cbiAgICAgICAgdGhpcy5wcm9jZXNzSW50ZXJhY3RpdmUoIHRvdWNoRGF0YS5nbG9iYWwsIHRoaXMucmVuZGVyZXIuX2xhc3RPYmplY3RSZW5kZXJlZCwgdGhpcy5wcm9jZXNzVG91Y2hTdGFydCwgdHJ1ZSApO1xuXG4gICAgICAgIHRoaXMucmV0dXJuVG91Y2hEYXRhKCB0b3VjaERhdGEgKTtcbiAgICB9XG59O1xuXG4vKipcbiAqIFByb2Nlc3NlcyB0aGUgcmVzdWx0IG9mIGEgdG91Y2ggY2hlY2sgYW5kIGRpc3BhdGNoZXMgdGhlIGV2ZW50IGlmIG5lZWQgYmVcbiAqXG4gKiBAcGFyYW0gZGlzcGxheU9iamVjdCB7UElYSS5Db250YWluZXJ8UElYSS5TcHJpdGV8UElYSS5leHRyYXMuVGlsaW5nU3ByaXRlfSBUaGUgZGlzcGxheSBvYmplY3QgdGhhdCB3YXMgdGVzdGVkXG4gKiBAcGFyYW0gaGl0IHtib29sZWFufSB0aGUgcmVzdWx0IG9mIHRoZSBoaXQgdGVzdCBvbiB0aGUgZGlzcGxheSBvYmplY3RcbiAqIEBwcml2YXRlXG4gKi9cbkludGVyYWN0aW9uTWFuYWdlci5wcm90b3R5cGUucHJvY2Vzc1RvdWNoU3RhcnQgPSBmdW5jdGlvbiAoIGRpc3BsYXlPYmplY3QsIGhpdCApXG57XG4gICAgaWYoaGl0KVxuICAgIHtcbiAgICAgICAgZGlzcGxheU9iamVjdC5fdG91Y2hEb3duID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50KCBkaXNwbGF5T2JqZWN0LCAndG91Y2hzdGFydCcsIHRoaXMuZXZlbnREYXRhICk7XG4gICAgfVxufTtcblxuXG4vKipcbiAqIElzIGNhbGxlZCB3aGVuIGEgdG91Y2ggZW5kcyBvbiB0aGUgcmVuZGVyZXIgZWxlbWVudFxuICpcbiAqIEBwYXJhbSBldmVudCB7RXZlbnR9IFRoZSBET00gZXZlbnQgb2YgYSB0b3VjaCBlbmRpbmcgb24gdGhlIHJlbmRlcmVyIHZpZXdcbiAqL1xuSW50ZXJhY3Rpb25NYW5hZ2VyLnByb3RvdHlwZS5vblRvdWNoRW5kID0gZnVuY3Rpb24gKGV2ZW50KVxue1xuICAgIGlmICh0aGlzLmF1dG9QcmV2ZW50RGVmYXVsdClcbiAgICB7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgfVxuXG4gICAgdmFyIGNoYW5nZWRUb3VjaGVzID0gZXZlbnQuY2hhbmdlZFRvdWNoZXM7XG4gICAgdmFyIGNMZW5ndGggPSBjaGFuZ2VkVG91Y2hlcy5sZW5ndGg7XG5cbiAgICBmb3IgKHZhciBpPTA7IGkgPCBjTGVuZ3RoOyBpKyspXG4gICAge1xuICAgICAgICB2YXIgdG91Y2hFdmVudCA9IGNoYW5nZWRUb3VjaGVzW2ldO1xuXG4gICAgICAgIHZhciB0b3VjaERhdGEgPSB0aGlzLmdldFRvdWNoRGF0YSggdG91Y2hFdmVudCApO1xuXG4gICAgICAgIHRvdWNoRGF0YS5vcmlnaW5hbEV2ZW50ID0gZXZlbnQ7XG5cbiAgICAgICAgLy9UT0RPIHRoaXMgc2hvdWxkIGJlIHBhc3NlZCBhbG9uZy4uIG5vIHNldFxuICAgICAgICB0aGlzLmV2ZW50RGF0YS5kYXRhID0gdG91Y2hEYXRhO1xuICAgICAgICB0aGlzLmV2ZW50RGF0YS5zdG9wcGVkID0gZmFsc2U7XG5cblxuICAgICAgICB0aGlzLnByb2Nlc3NJbnRlcmFjdGl2ZSggdG91Y2hEYXRhLmdsb2JhbCwgdGhpcy5yZW5kZXJlci5fbGFzdE9iamVjdFJlbmRlcmVkLCB0aGlzLnByb2Nlc3NUb3VjaEVuZCwgdHJ1ZSApO1xuXG4gICAgICAgIHRoaXMucmV0dXJuVG91Y2hEYXRhKCB0b3VjaERhdGEgKTtcbiAgICB9XG59O1xuXG4vKipcbiAqIFByb2Nlc3NlcyB0aGUgcmVzdWx0IG9mIHRoZSBlbmQgb2YgYSB0b3VjaCBhbmQgZGlzcGF0Y2hlcyB0aGUgZXZlbnQgaWYgbmVlZCBiZVxuICpcbiAqIEBwYXJhbSBkaXNwbGF5T2JqZWN0IHtQSVhJLkNvbnRhaW5lcnxQSVhJLlNwcml0ZXxQSVhJLmV4dHJhcy5UaWxpbmdTcHJpdGV9IFRoZSBkaXNwbGF5IG9iamVjdCB0aGF0IHdhcyB0ZXN0ZWRcbiAqIEBwYXJhbSBoaXQge2Jvb2xlYW59IHRoZSByZXN1bHQgb2YgdGhlIGhpdCB0ZXN0IG9uIHRoZSBkaXNwbGF5IG9iamVjdFxuICogQHByaXZhdGVcbiAqL1xuSW50ZXJhY3Rpb25NYW5hZ2VyLnByb3RvdHlwZS5wcm9jZXNzVG91Y2hFbmQgPSBmdW5jdGlvbiAoIGRpc3BsYXlPYmplY3QsIGhpdCApXG57XG4gICAgaWYoaGl0KVxuICAgIHtcbiAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50KCBkaXNwbGF5T2JqZWN0LCAndG91Y2hlbmQnLCB0aGlzLmV2ZW50RGF0YSApO1xuXG4gICAgICAgIGlmKCBkaXNwbGF5T2JqZWN0Ll90b3VjaERvd24gKVxuICAgICAgICB7XG4gICAgICAgICAgICBkaXNwbGF5T2JqZWN0Ll90b3VjaERvd24gPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudCggZGlzcGxheU9iamVjdCwgJ3RhcCcsIHRoaXMuZXZlbnREYXRhICk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgaWYoIGRpc3BsYXlPYmplY3QuX3RvdWNoRG93biApXG4gICAgICAgIHtcbiAgICAgICAgICAgIGRpc3BsYXlPYmplY3QuX3RvdWNoRG93biA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50KCBkaXNwbGF5T2JqZWN0LCAndG91Y2hlbmRvdXRzaWRlJywgdGhpcy5ldmVudERhdGEgKTtcbiAgICAgICAgfVxuICAgIH1cbn07XG5cbi8qKlxuICogSXMgY2FsbGVkIHdoZW4gYSB0b3VjaCBpcyBtb3ZlZCBhY3Jvc3MgdGhlIHJlbmRlcmVyIGVsZW1lbnRcbiAqXG4gKiBAcGFyYW0gZXZlbnQge0V2ZW50fSBUaGUgRE9NIGV2ZW50IG9mIGEgdG91Y2ggbW92aW5nIGFjcm9zcyB0aGUgcmVuZGVyZXIgdmlld1xuICogQHByaXZhdGVcbiAqL1xuSW50ZXJhY3Rpb25NYW5hZ2VyLnByb3RvdHlwZS5vblRvdWNoTW92ZSA9IGZ1bmN0aW9uIChldmVudClcbntcbiAgICBpZiAodGhpcy5hdXRvUHJldmVudERlZmF1bHQpXG4gICAge1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIH1cblxuICAgIHZhciBjaGFuZ2VkVG91Y2hlcyA9IGV2ZW50LmNoYW5nZWRUb3VjaGVzO1xuICAgIHZhciBjTGVuZ3RoID0gY2hhbmdlZFRvdWNoZXMubGVuZ3RoO1xuXG4gICAgZm9yICh2YXIgaT0wOyBpIDwgY0xlbmd0aDsgaSsrKVxuICAgIHtcbiAgICAgICAgdmFyIHRvdWNoRXZlbnQgPSBjaGFuZ2VkVG91Y2hlc1tpXTtcblxuICAgICAgICB2YXIgdG91Y2hEYXRhID0gdGhpcy5nZXRUb3VjaERhdGEoIHRvdWNoRXZlbnQgKTtcblxuICAgICAgICB0b3VjaERhdGEub3JpZ2luYWxFdmVudCA9IGV2ZW50O1xuXG4gICAgICAgIHRoaXMuZXZlbnREYXRhLmRhdGEgPSB0b3VjaERhdGE7XG4gICAgICAgIHRoaXMuZXZlbnREYXRhLnN0b3BwZWQgPSBmYWxzZTtcblxuICAgICAgICB0aGlzLnByb2Nlc3NJbnRlcmFjdGl2ZSggdG91Y2hEYXRhLmdsb2JhbCwgdGhpcy5yZW5kZXJlci5fbGFzdE9iamVjdFJlbmRlcmVkLCB0aGlzLnByb2Nlc3NUb3VjaE1vdmUsIHRydWUgKTtcblxuICAgICAgICB0aGlzLnJldHVyblRvdWNoRGF0YSggdG91Y2hEYXRhICk7XG4gICAgfVxufTtcblxuLyoqXG4gKiBQcm9jZXNzZXMgdGhlIHJlc3VsdCBvZiBhIHRvdWNoIG1vdmUgY2hlY2sgYW5kIGRpc3BhdGNoZXMgdGhlIGV2ZW50IGlmIG5lZWQgYmVcbiAqXG4gKiBAcGFyYW0gZGlzcGxheU9iamVjdCB7UElYSS5Db250YWluZXJ8UElYSS5TcHJpdGV8UElYSS5leHRyYXMuVGlsaW5nU3ByaXRlfSBUaGUgZGlzcGxheSBvYmplY3QgdGhhdCB3YXMgdGVzdGVkXG4gKiBAcGFyYW0gaGl0IHtib29sZWFufSB0aGUgcmVzdWx0IG9mIHRoZSBoaXQgdGVzdCBvbiB0aGUgZGlzcGxheSBvYmplY3RcbiAqIEBwcml2YXRlXG4gKi9cbkludGVyYWN0aW9uTWFuYWdlci5wcm90b3R5cGUucHJvY2Vzc1RvdWNoTW92ZSA9IGZ1bmN0aW9uICggZGlzcGxheU9iamVjdCwgaGl0IClcbntcbiAgICBoaXQgPSBoaXQ7XG4gICAgdGhpcy5kaXNwYXRjaEV2ZW50KCBkaXNwbGF5T2JqZWN0LCAndG91Y2htb3ZlJywgdGhpcy5ldmVudERhdGEpO1xufTtcblxuLyoqXG4gKiBHcmFicyBhbiBpbnRlcmFjdGlvbiBkYXRhIG9iamVjdCBmcm9tIHRoZSBpbnRlcm5hbCBwb29sXG4gKlxuICogQHBhcmFtIHRvdWNoRXZlbnQge0V2ZW50RGF0YX0gVGhlIHRvdWNoIGV2ZW50IHdlIG5lZWQgdG8gcGFpciB3aXRoIGFuIGludGVyYWN0aW9uRGF0YSBvYmplY3RcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5JbnRlcmFjdGlvbk1hbmFnZXIucHJvdG90eXBlLmdldFRvdWNoRGF0YSA9IGZ1bmN0aW9uICh0b3VjaEV2ZW50KVxue1xuICAgIHZhciB0b3VjaERhdGEgPSB0aGlzLmludGVyYWN0aXZlRGF0YVBvb2wucG9wKCk7XG5cbiAgICBpZighdG91Y2hEYXRhKVxuICAgIHtcbiAgICAgICAgdG91Y2hEYXRhID0gbmV3IEludGVyYWN0aW9uRGF0YSgpO1xuICAgIH1cblxuICAgIHRvdWNoRGF0YS5pZGVudGlmaWVyID0gdG91Y2hFdmVudC5pZGVudGlmaWVyO1xuICAgIHRoaXMubWFwUG9zaXRpb25Ub1BvaW50KCB0b3VjaERhdGEuZ2xvYmFsLCB0b3VjaEV2ZW50LmNsaWVudFgsIHRvdWNoRXZlbnQuY2xpZW50WSApO1xuXG4gICAgaWYobmF2aWdhdG9yLmlzQ29jb29uSlMpXG4gICAge1xuICAgICAgICB0b3VjaERhdGEuZ2xvYmFsLnggPSB0b3VjaERhdGEuZ2xvYmFsLnggLyB0aGlzLnJlc29sdXRpb247XG4gICAgICAgIHRvdWNoRGF0YS5nbG9iYWwueSA9IHRvdWNoRGF0YS5nbG9iYWwueSAvIHRoaXMucmVzb2x1dGlvbjtcbiAgICB9XG5cbiAgICB0b3VjaEV2ZW50Lmdsb2JhbFggPSB0b3VjaERhdGEuZ2xvYmFsLng7XG4gICAgdG91Y2hFdmVudC5nbG9iYWxZID0gdG91Y2hEYXRhLmdsb2JhbC55O1xuXG4gICAgcmV0dXJuIHRvdWNoRGF0YTtcbn07XG5cbi8qKlxuICogUmV0dXJucyBhbiBpbnRlcmFjdGlvbiBkYXRhIG9iamVjdCB0byB0aGUgaW50ZXJuYWwgcG9vbFxuICpcbiAqIEBwYXJhbSB0b3VjaERhdGEge1BJWEkuaW50ZXJhY3Rpb24uSW50ZXJhY3Rpb25EYXRhfSBUaGUgdG91Y2ggZGF0YSBvYmplY3Qgd2Ugd2FudCB0byByZXR1cm4gdG8gdGhlIHBvb2xcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5JbnRlcmFjdGlvbk1hbmFnZXIucHJvdG90eXBlLnJldHVyblRvdWNoRGF0YSA9IGZ1bmN0aW9uICggdG91Y2hEYXRhIClcbntcbiAgICB0aGlzLmludGVyYWN0aXZlRGF0YVBvb2wucHVzaCggdG91Y2hEYXRhICk7XG59O1xuXG4vKipcbiAqIERlc3Ryb3lzIHRoZSBpbnRlcmFjdGlvbiBtYW5hZ2VyXG4gKlxuICovXG5JbnRlcmFjdGlvbk1hbmFnZXIucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoKSB7XG4gICAgdGhpcy5yZW1vdmVFdmVudHMoKTtcblxuICAgIHRoaXMucmVuZGVyZXIgPSBudWxsO1xuXG4gICAgdGhpcy5tb3VzZSA9IG51bGw7XG5cbiAgICB0aGlzLmV2ZW50RGF0YSA9IG51bGw7XG5cbiAgICB0aGlzLmludGVyYWN0aXZlRGF0YVBvb2wgPSBudWxsO1xuXG4gICAgdGhpcy5pbnRlcmFjdGlvbkRPTUVsZW1lbnQgPSBudWxsO1xuXG4gICAgdGhpcy5vbk1vdXNlVXAgPSBudWxsO1xuICAgIHRoaXMucHJvY2Vzc01vdXNlVXAgPSBudWxsO1xuXG5cbiAgICB0aGlzLm9uTW91c2VEb3duID0gbnVsbDtcbiAgICB0aGlzLnByb2Nlc3NNb3VzZURvd24gPSBudWxsO1xuXG4gICAgdGhpcy5vbk1vdXNlTW92ZSA9IG51bGw7XG4gICAgdGhpcy5wcm9jZXNzTW91c2VNb3ZlID0gbnVsbDtcblxuICAgIHRoaXMub25Nb3VzZU91dCA9IG51bGw7XG4gICAgdGhpcy5wcm9jZXNzTW91c2VPdmVyT3V0ID0gbnVsbDtcblxuXG4gICAgdGhpcy5vblRvdWNoU3RhcnQgPSBudWxsO1xuICAgIHRoaXMucHJvY2Vzc1RvdWNoU3RhcnQgPSBudWxsO1xuXG4gICAgdGhpcy5vblRvdWNoRW5kID0gbnVsbDtcbiAgICB0aGlzLnByb2Nlc3NUb3VjaEVuZCA9IG51bGw7XG5cbiAgICB0aGlzLm9uVG91Y2hNb3ZlID0gbnVsbDtcbiAgICB0aGlzLnByb2Nlc3NUb3VjaE1vdmUgPSBudWxsO1xuXG4gICAgdGhpcy5fdGVtcFBvaW50ID0gbnVsbDtcbn07XG5cbmNvcmUuV2ViR0xSZW5kZXJlci5yZWdpc3RlclBsdWdpbignaW50ZXJhY3Rpb24nLCBJbnRlcmFjdGlvbk1hbmFnZXIpO1xuY29yZS5DYW52YXNSZW5kZXJlci5yZWdpc3RlclBsdWdpbignaW50ZXJhY3Rpb24nLCBJbnRlcmFjdGlvbk1hbmFnZXIpO1xuIiwiLyoqXG4gKiBAZmlsZSAgICAgICAgTWFpbiBleHBvcnQgb2YgdGhlIFBJWEkgaW50ZXJhY3Rpb25zIGxpYnJhcnlcbiAqIEBhdXRob3IgICAgICBNYXQgR3JvdmVzIDxtYXRAZ29vZGJveWRpZ2l0YWwuY29tPlxuICogQGNvcHlyaWdodCAgIDIwMTMtMjAxNSBHb29kQm95RGlnaXRhbFxuICogQGxpY2Vuc2UgICAgIHtAbGluayBodHRwczovL2dpdGh1Yi5jb20vcGl4aWpzL3BpeGkuanMvYmxvYi9tYXN0ZXIvTElDRU5TRXxNSVQgTGljZW5zZX1cbiAqL1xuXG4vKipcbiAqIEBuYW1lc3BhY2UgUElYSS5pbnRlcmFjdGlvblxuICovXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgICBJbnRlcmFjdGlvbkRhdGE6ICAgIHJlcXVpcmUoJy4vSW50ZXJhY3Rpb25EYXRhJyksXG4gICAgSW50ZXJhY3Rpb25NYW5hZ2VyOiByZXF1aXJlKCcuL0ludGVyYWN0aW9uTWFuYWdlcicpLFxuICAgIGludGVyYWN0aXZlVGFyZ2V0OiAgcmVxdWlyZSgnLi9pbnRlcmFjdGl2ZVRhcmdldCcpXG59O1xuIiwiLyoqXG4gKiBEZWZhdWx0IHByb3BlcnR5IHZhbHVlcyBvZiBpbnRlcmFjdGl2ZSBvYmplY3RzXG4gKiB1c2VkIGJ5IHtAbGluayBQSVhJLmludGVyYWN0aW9uLkludGVyYWN0aW9uTWFuYWdlcn0uXG4gKlxuICogQG1peGluXG4gKiBAbWVtYmVyb2YgUElYSS5pbnRlcmFjdGlvblxuICogQGV4YW1wbGVcbiAqICAgICAgZnVuY3Rpb24gTXlPYmplY3QoKSB7fVxuICpcbiAqICAgICAgT2JqZWN0LmFzc2lnbihcbiAqICAgICAgICAgIE15T2JqZWN0LnByb3RvdHlwZSxcbiAqICAgICAgICAgIFBJWEkuaW50ZXJhY3Rpb24uaW50ZXJhY3RpdmVUYXJnZXRcbiAqICAgICAgKTtcbiAqL1xudmFyIGludGVyYWN0aXZlVGFyZ2V0ID0ge1xuICAgIC8qKlxuICAgICAqIEB0b2RvIE5lZWRzIGRvY3MuXG4gICAgICovXG4gICAgaW50ZXJhY3RpdmU6IGZhbHNlLFxuICAgIC8qKlxuICAgICAqIEB0b2RvIE5lZWRzIGRvY3MuXG4gICAgICovXG4gICAgYnV0dG9uTW9kZTogZmFsc2UsXG4gICAgLyoqXG4gICAgICogQHRvZG8gTmVlZHMgZG9jcy5cbiAgICAgKi9cbiAgICBpbnRlcmFjdGl2ZUNoaWxkcmVuOiB0cnVlLFxuICAgIC8qKlxuICAgICAqIEB0b2RvIE5lZWRzIGRvY3MuXG4gICAgICovXG4gICAgZGVmYXVsdEN1cnNvcjogJ3BvaW50ZXInLFxuXG4gICAgLy8gc29tZSBpbnRlcm5hbCBjaGVja3MuLlxuXG4gICAgLyoqXG4gICAgICogQHRvZG8gTmVlZHMgZG9jcy5cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIF9vdmVyOiBmYWxzZSxcbiAgICAvKipcbiAgICAgKiBAdG9kbyBOZWVkcyBkb2NzLlxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgX3RvdWNoRG93bjogZmFsc2Vcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gaW50ZXJhY3RpdmVUYXJnZXQ7XG4iLCJ2YXIgUmVzb3VyY2UgPSByZXF1aXJlKCdyZXNvdXJjZS1sb2FkZXInKS5SZXNvdXJjZSxcbiAgICBjb3JlID0gcmVxdWlyZSgnLi4vY29yZScpLFxuICAgIGV4dHJhcyA9IHJlcXVpcmUoJy4uL2V4dHJhcycpLFxuICAgIHBhdGggPSByZXF1aXJlKCdwYXRoJyk7XG5cblxuZnVuY3Rpb24gcGFyc2UocmVzb3VyY2UsIHRleHR1cmUpIHtcbiAgICB2YXIgZGF0YSA9IHt9O1xuICAgIHZhciBpbmZvID0gcmVzb3VyY2UuZGF0YS5nZXRFbGVtZW50c0J5VGFnTmFtZSgnaW5mbycpWzBdO1xuICAgIHZhciBjb21tb24gPSByZXNvdXJjZS5kYXRhLmdldEVsZW1lbnRzQnlUYWdOYW1lKCdjb21tb24nKVswXTtcblxuICAgIGRhdGEuZm9udCA9IGluZm8uZ2V0QXR0cmlidXRlKCdmYWNlJyk7XG4gICAgZGF0YS5zaXplID0gcGFyc2VJbnQoaW5mby5nZXRBdHRyaWJ1dGUoJ3NpemUnKSwgMTApO1xuICAgIGRhdGEubGluZUhlaWdodCA9IHBhcnNlSW50KGNvbW1vbi5nZXRBdHRyaWJ1dGUoJ2xpbmVIZWlnaHQnKSwgMTApO1xuICAgIGRhdGEuY2hhcnMgPSB7fTtcblxuICAgIC8vcGFyc2UgbGV0dGVyc1xuICAgIHZhciBsZXR0ZXJzID0gcmVzb3VyY2UuZGF0YS5nZXRFbGVtZW50c0J5VGFnTmFtZSgnY2hhcicpO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZXR0ZXJzLmxlbmd0aDsgaSsrKVxuICAgIHtcbiAgICAgICAgdmFyIGNoYXJDb2RlID0gcGFyc2VJbnQobGV0dGVyc1tpXS5nZXRBdHRyaWJ1dGUoJ2lkJyksIDEwKTtcblxuICAgICAgICB2YXIgdGV4dHVyZVJlY3QgPSBuZXcgY29yZS5SZWN0YW5nbGUoXG4gICAgICAgICAgICBwYXJzZUludChsZXR0ZXJzW2ldLmdldEF0dHJpYnV0ZSgneCcpLCAxMCkgKyB0ZXh0dXJlLmZyYW1lLngsXG4gICAgICAgICAgICBwYXJzZUludChsZXR0ZXJzW2ldLmdldEF0dHJpYnV0ZSgneScpLCAxMCkgKyB0ZXh0dXJlLmZyYW1lLnksXG4gICAgICAgICAgICBwYXJzZUludChsZXR0ZXJzW2ldLmdldEF0dHJpYnV0ZSgnd2lkdGgnKSwgMTApLFxuICAgICAgICAgICAgcGFyc2VJbnQobGV0dGVyc1tpXS5nZXRBdHRyaWJ1dGUoJ2hlaWdodCcpLCAxMClcbiAgICAgICAgKTtcblxuICAgICAgICBkYXRhLmNoYXJzW2NoYXJDb2RlXSA9IHtcbiAgICAgICAgICAgIHhPZmZzZXQ6IHBhcnNlSW50KGxldHRlcnNbaV0uZ2V0QXR0cmlidXRlKCd4b2Zmc2V0JyksIDEwKSxcbiAgICAgICAgICAgIHlPZmZzZXQ6IHBhcnNlSW50KGxldHRlcnNbaV0uZ2V0QXR0cmlidXRlKCd5b2Zmc2V0JyksIDEwKSxcbiAgICAgICAgICAgIHhBZHZhbmNlOiBwYXJzZUludChsZXR0ZXJzW2ldLmdldEF0dHJpYnV0ZSgneGFkdmFuY2UnKSwgMTApLFxuICAgICAgICAgICAga2VybmluZzoge30sXG4gICAgICAgICAgICB0ZXh0dXJlOiBuZXcgY29yZS5UZXh0dXJlKHRleHR1cmUuYmFzZVRleHR1cmUsIHRleHR1cmVSZWN0KVxuXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgLy9wYXJzZSBrZXJuaW5nc1xuICAgIHZhciBrZXJuaW5ncyA9IHJlc291cmNlLmRhdGEuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2tlcm5pbmcnKTtcbiAgICBmb3IgKGkgPSAwOyBpIDwga2VybmluZ3MubGVuZ3RoOyBpKyspXG4gICAge1xuICAgICAgICB2YXIgZmlyc3QgPSBwYXJzZUludChrZXJuaW5nc1tpXS5nZXRBdHRyaWJ1dGUoJ2ZpcnN0JyksIDEwKTtcbiAgICAgICAgdmFyIHNlY29uZCA9IHBhcnNlSW50KGtlcm5pbmdzW2ldLmdldEF0dHJpYnV0ZSgnc2Vjb25kJyksIDEwKTtcbiAgICAgICAgdmFyIGFtb3VudCA9IHBhcnNlSW50KGtlcm5pbmdzW2ldLmdldEF0dHJpYnV0ZSgnYW1vdW50JyksIDEwKTtcblxuICAgICAgICBkYXRhLmNoYXJzW3NlY29uZF0ua2VybmluZ1tmaXJzdF0gPSBhbW91bnQ7XG4gICAgfVxuXG4gICAgcmVzb3VyY2UuYml0bWFwRm9udCA9IGRhdGE7XG5cbiAgICAvLyBJJ20gbGVhdmluZyB0aGlzIGFzIGEgdGVtcG9yYXJ5IGZpeCBzbyB3ZSBjYW4gdGVzdCB0aGUgYml0bWFwIGZvbnRzIGluIHYzXG4gICAgLy8gYnV0IGl0J3MgdmVyeSBsaWtlbHkgdG8gY2hhbmdlXG4gICAgZXh0cmFzLkJpdG1hcFRleHQuZm9udHNbZGF0YS5mb250XSA9IGRhdGE7XG59XG5cblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoKVxue1xuICAgIHJldHVybiBmdW5jdGlvbiAocmVzb3VyY2UsIG5leHQpXG4gICAge1xuICAgICAgICAvLyBza2lwIGlmIG5vIGRhdGEgb3Igbm90IHhtbCBkYXRhXG4gICAgICAgIGlmICghcmVzb3VyY2UuZGF0YSB8fCAhcmVzb3VyY2UuaXNYbWwpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiBuZXh0KCk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBza2lwIGlmIG5vdCBiaXRtYXAgZm9udCBkYXRhLCB1c2luZyBzb21lIHNpbGx5IGR1Y2stdHlwaW5nXG4gICAgICAgIGlmIChcbiAgICAgICAgICAgIHJlc291cmNlLmRhdGEuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ3BhZ2UnKS5sZW5ndGggPT09IDAgfHxcbiAgICAgICAgICAgIHJlc291cmNlLmRhdGEuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2luZm8nKS5sZW5ndGggPT09IDAgfHxcbiAgICAgICAgICAgIHJlc291cmNlLmRhdGEuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2luZm8nKVswXS5nZXRBdHRyaWJ1dGUoJ2ZhY2UnKSA9PT0gbnVsbFxuICAgICAgICAgICAgKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gbmV4dCgpO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIHhtbFVybCA9IHBhdGguZGlybmFtZShyZXNvdXJjZS51cmwpO1xuXG4gICAgICAgIGlmICh4bWxVcmwgPT09ICcuJykge1xuICAgICAgICAgICAgeG1sVXJsID0gJyc7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5iYXNlVXJsICYmIHhtbFVybCkge1xuICAgICAgICAgICAgLy8gaWYgYmFzZXVybCBoYXMgYSB0cmFpbGluZyBzbGFzaCB0aGVuIGFkZCBvbmUgdG8geG1sVXJsIHNvIHRoZSByZXBsYWNlIHdvcmtzIGJlbG93XG4gICAgICAgICAgICBpZiAodGhpcy5iYXNlVXJsLmNoYXJBdCh0aGlzLmJhc2VVcmwubGVuZ3RoIC0gMSkgPT09ICcvJykge1xuICAgICAgICAgICAgICAgIHhtbFVybCArPSAnLyc7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIHJlbW92ZSBiYXNlVXJsIGZyb20geG1sVXJsXG4gICAgICAgICAgICB4bWxVcmwgPSB4bWxVcmwucmVwbGFjZSh0aGlzLmJhc2VVcmwsICcnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGlmIHRoZXJlIGlzIGFuIHhtbFVybCBub3csIGl0IG5lZWRzIGEgdHJhaWxpbmcgc2xhc2guIEVuc3VyZSB0aGF0IGl0IGRvZXMgaWYgdGhlIHN0cmluZyBpc24ndCBlbXB0eS5cbiAgICAgICAgaWYgKHhtbFVybCAmJiB4bWxVcmwuY2hhckF0KHhtbFVybC5sZW5ndGggLSAxKSAhPT0gJy8nKSB7XG4gICAgICAgICAgICB4bWxVcmwgKz0gJy8nO1xuICAgICAgICB9XG4gICAgICAgIHZhciB0ZXh0dXJlVXJsID0geG1sVXJsICsgcmVzb3VyY2UuZGF0YS5nZXRFbGVtZW50c0J5VGFnTmFtZSgncGFnZScpWzBdLmdldEF0dHJpYnV0ZSgnZmlsZScpO1xuICAgICAgICBpZiAoY29yZS51dGlscy5UZXh0dXJlQ2FjaGVbdGV4dHVyZVVybF0pIHtcbiAgICAgICAgICAgIC8vcmV1c2UgZXhpc3RpbmcgdGV4dHVyZVxuICAgICAgICAgICAgcGFyc2UocmVzb3VyY2UsIGNvcmUudXRpbHMuVGV4dHVyZUNhY2hlW3RleHR1cmVVcmxdKTtcbiAgICAgICAgICAgIG5leHQoKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHZhciBsb2FkT3B0aW9ucyA9IHtcbiAgICAgICAgICAgICAgICBjcm9zc09yaWdpbjogcmVzb3VyY2UuY3Jvc3NPcmlnaW4sXG4gICAgICAgICAgICAgICAgbG9hZFR5cGU6IFJlc291cmNlLkxPQURfVFlQRS5JTUFHRSxcbiAgICAgICAgICAgICAgICBtZXRhZGF0YTogcmVzb3VyY2UubWV0YWRhdGEuaW1hZ2VNZXRhZGF0YVxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIC8vIGxvYWQgdGhlIHRleHR1cmUgZm9yIHRoZSBmb250XG4gICAgICAgICAgICB0aGlzLmFkZChyZXNvdXJjZS5uYW1lICsgJ19pbWFnZScsIHRleHR1cmVVcmwsIGxvYWRPcHRpb25zLCBmdW5jdGlvbiAocmVzKSB7XG4gICAgICAgICAgICAgICAgcGFyc2UocmVzb3VyY2UsIHJlcy50ZXh0dXJlKTtcbiAgICAgICAgICAgICAgICBuZXh0KCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH07XG59O1xuIiwiLyoqXG4gKiBAZmlsZSAgICAgICAgTWFpbiBleHBvcnQgb2YgdGhlIFBJWEkgbG9hZGVycyBsaWJyYXJ5XG4gKiBAYXV0aG9yICAgICAgTWF0IEdyb3ZlcyA8bWF0QGdvb2Rib3lkaWdpdGFsLmNvbT5cbiAqIEBjb3B5cmlnaHQgICAyMDEzLTIwMTUgR29vZEJveURpZ2l0YWxcbiAqIEBsaWNlbnNlICAgICB7QGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL3BpeGlqcy9waXhpLmpzL2Jsb2IvbWFzdGVyL0xJQ0VOU0V8TUlUIExpY2Vuc2V9XG4gKi9cblxuLyoqXG4gKiBAbmFtZXNwYWNlIFBJWEkubG9hZGVyc1xuICovXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgICBMb2FkZXI6ICAgICAgICAgICAgIHJlcXVpcmUoJy4vbG9hZGVyJyksXG5cbiAgICAvLyBwYXJzZXJzXG4gICAgYml0bWFwRm9udFBhcnNlcjogICByZXF1aXJlKCcuL2JpdG1hcEZvbnRQYXJzZXInKSxcbiAgICBzcHJpdGVzaGVldFBhcnNlcjogIHJlcXVpcmUoJy4vc3ByaXRlc2hlZXRQYXJzZXInKSxcbiAgICB0ZXh0dXJlUGFyc2VyOiAgICAgIHJlcXVpcmUoJy4vdGV4dHVyZVBhcnNlcicpLFxuICAgIFJlc291cmNlOiAgICAgICAgICAgcmVxdWlyZSgncmVzb3VyY2UtbG9hZGVyJykuUmVzb3VyY2Vcbn07XG4iLCJ2YXIgUmVzb3VyY2VMb2FkZXIgPSByZXF1aXJlKCdyZXNvdXJjZS1sb2FkZXInKSxcbiAgICB0ZXh0dXJlUGFyc2VyID0gcmVxdWlyZSgnLi90ZXh0dXJlUGFyc2VyJyksXG4gICAgc3ByaXRlc2hlZXRQYXJzZXIgPSByZXF1aXJlKCcuL3Nwcml0ZXNoZWV0UGFyc2VyJyksXG4gICAgYml0bWFwRm9udFBhcnNlciA9IHJlcXVpcmUoJy4vYml0bWFwRm9udFBhcnNlcicpO1xuXG4vKipcbiAqXG4gKiBUaGUgbmV3IGxvYWRlciwgZXh0ZW5kcyBSZXNvdXJjZSBMb2FkZXIgYnkgQ2hhZCBFbmdsZXIgOiBodHRwczovL2dpdGh1Yi5jb20vZW5nbGVyY2ovcmVzb3VyY2UtbG9hZGVyXG4gKlxuICogYGBganNcbiAqIHZhciBsb2FkZXIgPSBQSVhJLmxvYWRlcjsgLy8gcGl4aSBleHBvc2VzIGEgcHJlbWFkZSBpbnN0YW5jZSBmb3IgeW91IHRvIHVzZS5cbiAqIC8vb3JcbiAqIHZhciBsb2FkZXIgPSBuZXcgUElYSS5sb2FkZXJzLkxvYWRlcigpOyAvLyB5b3UgY2FuIGFsc28gY3JlYXRlIHlvdXIgb3duIGlmIHlvdSB3YW50XG4gKlxuICogbG9hZGVyLmFkZCgnYnVubnknLFwiZGF0YS9idW5ueS5wbmdcIik7XG4gKlxuICogbG9hZGVyLm9uY2UoJ2NvbXBsZXRlJyxvbkFzc2V0c0xvYWRlZCk7XG4gKlxuICogbG9hZGVyLmxvYWQoKTtcbiAqIGBgYFxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5SZXNvdXJjZUxvYWRlclxuICogQG1lbWJlcm9mIFBJWEkubG9hZGVyc1xuICogQHBhcmFtIFtiYXNlVXJsPScnXSB7c3RyaW5nfSBUaGUgYmFzZSB1cmwgZm9yIGFsbCByZXNvdXJjZXMgbG9hZGVkIGJ5IHRoaXMgbG9hZGVyLlxuICogQHBhcmFtIFtjb25jdXJyZW5jeT0xMF0ge251bWJlcn0gVGhlIG51bWJlciBvZiByZXNvdXJjZXMgdG8gbG9hZCBjb25jdXJyZW50bHkuXG4gKi9cbmZ1bmN0aW9uIExvYWRlcihiYXNlVXJsLCBjb25jdXJyZW5jeSlcbntcbiAgICBSZXNvdXJjZUxvYWRlci5jYWxsKHRoaXMsIGJhc2VVcmwsIGNvbmN1cnJlbmN5KTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgTG9hZGVyLl9waXhpTWlkZGxld2FyZS5sZW5ndGg7ICsraSkge1xuICAgICAgICB0aGlzLnVzZShMb2FkZXIuX3BpeGlNaWRkbGV3YXJlW2ldKCkpO1xuICAgIH1cbn1cblxuTG9hZGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoUmVzb3VyY2VMb2FkZXIucHJvdG90eXBlKTtcbkxvYWRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBMb2FkZXI7XG5cbm1vZHVsZS5leHBvcnRzID0gTG9hZGVyO1xuXG5Mb2FkZXIuX3BpeGlNaWRkbGV3YXJlID0gW1xuICAgIC8vIHBhcnNlIGFueSBibG9iIGludG8gbW9yZSB1c2FibGUgb2JqZWN0cyAoZS5nLiBJbWFnZSlcbiAgICBSZXNvdXJjZUxvYWRlci5taWRkbGV3YXJlLnBhcnNpbmcuYmxvYixcbiAgICAvLyBwYXJzZSBhbnkgSW1hZ2Ugb2JqZWN0cyBpbnRvIHRleHR1cmVzXG4gICAgdGV4dHVyZVBhcnNlcixcbiAgICAvLyBwYXJzZSBhbnkgc3ByaXRlc2hlZXQgZGF0YSBpbnRvIG11bHRpcGxlIHRleHR1cmVzXG4gICAgc3ByaXRlc2hlZXRQYXJzZXIsXG4gICAgLy8gcGFyc2UgYW55IHNwcml0ZXNoZWV0IGRhdGEgaW50byBtdWx0aXBsZSB0ZXh0dXJlc1xuICAgIGJpdG1hcEZvbnRQYXJzZXJcbl07XG5cbkxvYWRlci5hZGRQaXhpTWlkZGxld2FyZSA9IGZ1bmN0aW9uIChmbikge1xuICAgIExvYWRlci5fcGl4aU1pZGRsZXdhcmUucHVzaChmbik7XG59O1xuXG4vLyBBZGQgY3VzdG9tIGV4dGVudGlvbnNcbnZhciBSZXNvdXJjZSA9IFJlc291cmNlTG9hZGVyLlJlc291cmNlO1xuXG5SZXNvdXJjZS5zZXRFeHRlbnNpb25YaHJUeXBlKCdmbnQnLCBSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRS5ET0NVTUVOVCk7XG4iLCJ2YXIgUmVzb3VyY2UgPSByZXF1aXJlKCdyZXNvdXJjZS1sb2FkZXInKS5SZXNvdXJjZSxcbiAgICBwYXRoID0gcmVxdWlyZSgncGF0aCcpLFxuICAgIGNvcmUgPSByZXF1aXJlKCcuLi9jb3JlJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKClcbntcbiAgICByZXR1cm4gZnVuY3Rpb24gKHJlc291cmNlLCBuZXh0KVxuICAgIHtcbiAgICAgICAgLy8gc2tpcCBpZiBubyBkYXRhLCBpdHMgbm90IGpzb24sIG9yIGl0IGlzbid0IHNwcml0ZXNoZWV0IGRhdGFcbiAgICAgICAgaWYgKCFyZXNvdXJjZS5kYXRhIHx8ICFyZXNvdXJjZS5pc0pzb24gfHwgIXJlc291cmNlLmRhdGEuZnJhbWVzKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gbmV4dCgpO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGxvYWRPcHRpb25zID0ge1xuICAgICAgICAgICAgY3Jvc3NPcmlnaW46IHJlc291cmNlLmNyb3NzT3JpZ2luLFxuICAgICAgICAgICAgbG9hZFR5cGU6IFJlc291cmNlLkxPQURfVFlQRS5JTUFHRSxcbiAgICAgICAgICAgIG1ldGFkYXRhOiByZXNvdXJjZS5tZXRhZGF0YS5pbWFnZU1ldGFkYXRhXG4gICAgICAgIH07XG5cbiAgICAgICAgdmFyIHJvdXRlID0gcGF0aC5kaXJuYW1lKHJlc291cmNlLnVybC5yZXBsYWNlKHRoaXMuYmFzZVVybCwgJycpKTtcblxuICAgICAgICB2YXIgcmVzb2x1dGlvbiA9IGNvcmUudXRpbHMuZ2V0UmVzb2x1dGlvbk9mVXJsKCByZXNvdXJjZS51cmwgKTtcblxuICAgICAgICAvLyBsb2FkIHRoZSBpbWFnZSBmb3IgdGhpcyBzaGVldFxuICAgICAgICB0aGlzLmFkZChyZXNvdXJjZS5uYW1lICsgJ19pbWFnZScsIHJvdXRlICsgJy8nICsgcmVzb3VyY2UuZGF0YS5tZXRhLmltYWdlLCBsb2FkT3B0aW9ucywgZnVuY3Rpb24gKHJlcylcbiAgICAgICAge1xuICAgICAgICAgICAgcmVzb3VyY2UudGV4dHVyZXMgPSB7fTtcblxuICAgICAgICAgICAgdmFyIGZyYW1lcyA9IHJlc291cmNlLmRhdGEuZnJhbWVzO1xuXG4gICAgICAgICAgICBmb3IgKHZhciBpIGluIGZyYW1lcylcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB2YXIgcmVjdCA9IGZyYW1lc1tpXS5mcmFtZTtcblxuICAgICAgICAgICAgICAgIGlmIChyZWN0KVxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHNpemUgPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICB2YXIgdHJpbSA9IG51bGw7XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKGZyYW1lc1tpXS5yb3RhdGVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzaXplID0gbmV3IGNvcmUuUmVjdGFuZ2xlKHJlY3QueCwgcmVjdC55LCByZWN0LmgsIHJlY3Qudyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzaXplID0gbmV3IGNvcmUuUmVjdGFuZ2xlKHJlY3QueCwgcmVjdC55LCByZWN0LncsIHJlY3QuaCk7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAvLyAgQ2hlY2sgdG8gc2VlIGlmIHRoZSBzcHJpdGUgaXMgdHJpbW1lZFxuICAgICAgICAgICAgICAgICAgICBpZiAoZnJhbWVzW2ldLnRyaW1tZWQpXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRyaW0gPSBuZXcgY29yZS5SZWN0YW5nbGUoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJhbWVzW2ldLnNwcml0ZVNvdXJjZVNpemUueCAvIHJlc29sdXRpb24sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJhbWVzW2ldLnNwcml0ZVNvdXJjZVNpemUueSAvIHJlc29sdXRpb24sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJhbWVzW2ldLnNvdXJjZVNpemUudyAvIHJlc29sdXRpb24sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJhbWVzW2ldLnNvdXJjZVNpemUuaCAvIHJlc29sdXRpb25cbiAgICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgLy8gZmxpcCB0aGUgd2lkdGggYW5kIGhlaWdodCFcbiAgICAgICAgICAgICAgICAgICAgaWYgKGZyYW1lc1tpXS5yb3RhdGVkKVxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgdGVtcCA9IHNpemUud2lkdGg7XG4gICAgICAgICAgICAgICAgICAgICAgICBzaXplLndpZHRoID0gc2l6ZS5oZWlnaHQ7XG4gICAgICAgICAgICAgICAgICAgICAgICBzaXplLmhlaWdodCA9IHRlbXA7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBzaXplLnggLz0gcmVzb2x1dGlvbjtcbiAgICAgICAgICAgICAgICAgICAgc2l6ZS55IC89IHJlc29sdXRpb247XG4gICAgICAgICAgICAgICAgICAgIHNpemUud2lkdGggLz0gcmVzb2x1dGlvbjtcbiAgICAgICAgICAgICAgICAgICAgc2l6ZS5oZWlnaHQgLz0gcmVzb2x1dGlvbjtcblxuICAgICAgICAgICAgICAgICAgICByZXNvdXJjZS50ZXh0dXJlc1tpXSA9IG5ldyBjb3JlLlRleHR1cmUocmVzLnRleHR1cmUuYmFzZVRleHR1cmUsIHNpemUsIHNpemUuY2xvbmUoKSwgdHJpbSwgZnJhbWVzW2ldLnJvdGF0ZWQpO1xuXG4gICAgICAgICAgICAgICAgICAgIC8vIGxldHMgYWxzbyBhZGQgdGhlIGZyYW1lIHRvIHBpeGkncyBnbG9iYWwgY2FjaGUgZm9yIGZyb21GcmFtZSBhbmQgZnJvbUltYWdlIGZ1bmN0aW9uc1xuICAgICAgICAgICAgICAgICAgICBjb3JlLnV0aWxzLlRleHR1cmVDYWNoZVtpXSA9IHJlc291cmNlLnRleHR1cmVzW2ldO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgbmV4dCgpO1xuICAgICAgICB9KTtcbiAgICB9O1xufTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vY29yZScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICgpXG57XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChyZXNvdXJjZSwgbmV4dClcbiAgICB7XG4gICAgICAgIC8vIGNyZWF0ZSBhIG5ldyB0ZXh0dXJlIGlmIHRoZSBkYXRhIGlzIGFuIEltYWdlIG9iamVjdFxuICAgICAgICBpZiAocmVzb3VyY2UuZGF0YSAmJiByZXNvdXJjZS5pc0ltYWdlKVxuICAgICAgICB7XG4gICAgICAgICAgICB2YXIgYmFzZVRleHR1cmUgPSBuZXcgY29yZS5CYXNlVGV4dHVyZShyZXNvdXJjZS5kYXRhLCBudWxsLCBjb3JlLnV0aWxzLmdldFJlc29sdXRpb25PZlVybChyZXNvdXJjZS51cmwpKTtcbiAgICAgICAgICAgIGJhc2VUZXh0dXJlLmltYWdlVXJsID0gcmVzb3VyY2UudXJsO1xuICAgICAgICAgICAgcmVzb3VyY2UudGV4dHVyZSA9IG5ldyBjb3JlLlRleHR1cmUoYmFzZVRleHR1cmUpO1xuICAgICAgICAgICAgLy8gbGV0cyBhbHNvIGFkZCB0aGUgZnJhbWUgdG8gcGl4aSdzIGdsb2JhbCBjYWNoZSBmb3IgZnJvbUZyYW1lIGFuZCBmcm9tSW1hZ2UgZnVjbnRpb25zXG4gICAgICAgICAgICBjb3JlLnV0aWxzLkJhc2VUZXh0dXJlQ2FjaGVbcmVzb3VyY2UudXJsXSA9IGJhc2VUZXh0dXJlO1xuICAgICAgICAgICAgY29yZS51dGlscy5UZXh0dXJlQ2FjaGVbcmVzb3VyY2UudXJsXSA9IHJlc291cmNlLnRleHR1cmU7XG4gICAgICAgIH1cblxuICAgICAgICBuZXh0KCk7XG4gICAgfTtcbn07XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uL2NvcmUnKSxcbiAgICB0ZW1wUG9pbnQgPSBuZXcgY29yZS5Qb2ludCgpLFxuICAgIHRlbXBQb2x5Z29uID0gbmV3IGNvcmUuUG9seWdvbigpO1xuXG4vKipcbiAqIEJhc2UgbWVzaCBjbGFzc1xuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLkNvbnRhaW5lclxuICogQG1lbWJlcm9mIFBJWEkubWVzaFxuICogQHBhcmFtIHRleHR1cmUge1BJWEkuVGV4dHVyZX0gVGhlIHRleHR1cmUgdG8gdXNlXG4gKiBAcGFyYW0gW3ZlcnRpY2VzXSB7RmxvYXQzMkFycmF5fSBpZiB5b3Ugd2FudCB0byBzcGVjaWZ5IHRoZSB2ZXJ0aWNlc1xuICogQHBhcmFtIFt1dnNdIHtGbG9hdDMyQXJyYXl9IGlmIHlvdSB3YW50IHRvIHNwZWNpZnkgdGhlIHV2c1xuICogQHBhcmFtIFtpbmRpY2VzXSB7VWludDE2QXJyYXl9IGlmIHlvdSB3YW50IHRvIHNwZWNpZnkgdGhlIGluZGljZXNcbiAqIEBwYXJhbSBbZHJhd01vZGVdIHtudW1iZXJ9IHRoZSBkcmF3TW9kZSwgY2FuIGJlIGFueSBvZiB0aGUgTWVzaC5EUkFXX01PREVTIGNvbnN0c1xuICovXG5mdW5jdGlvbiBNZXNoKHRleHR1cmUsIHZlcnRpY2VzLCB1dnMsIGluZGljZXMsIGRyYXdNb2RlKVxue1xuICAgIGNvcmUuQ29udGFpbmVyLmNhbGwodGhpcyk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgdGV4dHVyZSBvZiB0aGUgTWVzaFxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5UZXh0dXJlfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fdGV4dHVyZSA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgVXZzIG9mIHRoZSBNZXNoXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtGbG9hdDMyQXJyYXl9XG4gICAgICovXG4gICAgdGhpcy51dnMgPSB1dnMgfHwgbmV3IEZsb2F0MzJBcnJheShbMCwgMCxcbiAgICAgICAgMSwgMCxcbiAgICAgICAgMSwgMSxcbiAgICAgICAgMCwgMV0pO1xuXG4gICAgLyoqXG4gICAgICogQW4gYXJyYXkgb2YgdmVydGljZXNcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge0Zsb2F0MzJBcnJheX1cbiAgICAgKi9cbiAgICB0aGlzLnZlcnRpY2VzID0gdmVydGljZXMgfHwgbmV3IEZsb2F0MzJBcnJheShbMCwgMCxcbiAgICAgICAgMTAwLCAwLFxuICAgICAgICAxMDAsIDEwMCxcbiAgICAgICAgMCwgMTAwXSk7XG5cbiAgICAvKlxuICAgICAqIEBtZW1iZXIge1VpbnQxNkFycmF5fSBBbiBhcnJheSBjb250YWluaW5nIHRoZSBpbmRpY2VzIG9mIHRoZSB2ZXJ0aWNlc1xuICAgICAqL1xuICAgIC8vICBUT0RPIGF1dG8gZ2VuZXJhdGUgdGhpcyBiYXNlZCBvbiBkcmF3IG1vZGUhXG4gICAgdGhpcy5pbmRpY2VzID0gaW5kaWNlcyB8fCBuZXcgVWludDE2QXJyYXkoWzAsIDEsIDMsIDJdKTtcblxuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgdGhlIE1lc2ggaXMgZGlydHkgb3Igbm90XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqL1xuICAgIHRoaXMuZGlydHkgPSB0cnVlO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGJsZW5kIG1vZGUgdG8gYmUgYXBwbGllZCB0byB0aGUgc3ByaXRlLiBTZXQgdG8gYFBJWEkuQkxFTkRfTU9ERVMuTk9STUFMYCB0byByZW1vdmUgYW55IGJsZW5kIG1vZGUuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgUElYSS5CTEVORF9NT0RFUy5OT1JNQUxcbiAgICAgKiBAc2VlIFBJWEkuQkxFTkRfTU9ERVNcbiAgICAgKi9cbiAgICB0aGlzLmJsZW5kTW9kZSA9IGNvcmUuQkxFTkRfTU9ERVMuTk9STUFMO1xuXG4gICAgLyoqXG4gICAgICogVHJpYW5nbGVzIGluIGNhbnZhcyBtb2RlIGFyZSBhdXRvbWF0aWNhbGx5IGFudGlhbGlhc2VkLCB1c2UgdGhpcyB2YWx1ZSB0byBmb3JjZSB0cmlhbmdsZXMgdG8gb3ZlcmxhcCBhIGJpdCB3aXRoIGVhY2ggb3RoZXIuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy5jYW52YXNQYWRkaW5nID0gMDtcblxuICAgIC8qKlxuICAgICAqIFRoZSB3YXkgdGhlIE1lc2ggc2hvdWxkIGJlIGRyYXduLCBjYW4gYmUgYW55IG9mIHRoZSB7QGxpbmsgUElYSS5tZXNoLk1lc2guRFJBV19NT0RFU30gY29uc3RzXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQHNlZSBQSVhJLm1lc2guTWVzaC5EUkFXX01PREVTXG4gICAgICovXG4gICAgdGhpcy5kcmF3TW9kZSA9IGRyYXdNb2RlIHx8IE1lc2guRFJBV19NT0RFUy5UUklBTkdMRV9NRVNIO1xuXG4gICAgLy8gcnVuIHRleHR1cmUgc2V0dGVyO1xuICAgIHRoaXMudGV4dHVyZSA9IHRleHR1cmU7XG5cbiAgICAgLyoqXG4gICAgICogVGhlIGRlZmF1bHQgc2hhZGVyIHRoYXQgaXMgdXNlZCBpZiBhIG1lc2ggZG9lc24ndCBoYXZlIGEgbW9yZSBzcGVjaWZpYyBvbmUuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlNoYWRlcn1cbiAgICAgKi9cbiAgICB0aGlzLnNoYWRlciA9IG51bGw7XG59XG5cbi8vIGNvbnN0cnVjdG9yXG5NZXNoLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoY29yZS5Db250YWluZXIucHJvdG90eXBlKTtcbk1lc2gucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gTWVzaDtcbm1vZHVsZS5leHBvcnRzID0gTWVzaDtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoTWVzaC5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBUaGUgdGV4dHVyZSB0aGF0IHRoZSBzcHJpdGUgaXMgdXNpbmdcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuVGV4dHVyZX1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5tZXNoLk1lc2gjXG4gICAgICovXG4gICAgdGV4dHVyZToge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiAgdGhpcy5fdGV4dHVyZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGlmICh0aGlzLl90ZXh0dXJlID09PSB2YWx1ZSlcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuX3RleHR1cmUgPSB2YWx1ZTtcblxuICAgICAgICAgICAgaWYgKHZhbHVlKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIC8vIHdhaXQgZm9yIHRoZSB0ZXh0dXJlIHRvIGxvYWRcbiAgICAgICAgICAgICAgICBpZiAodmFsdWUuYmFzZVRleHR1cmUuaGFzTG9hZGVkKVxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fb25UZXh0dXJlVXBkYXRlKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlLm9uY2UoJ3VwZGF0ZScsIHRoaXMuX29uVGV4dHVyZVVwZGF0ZSwgdGhpcyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxufSk7XG5cbi8qKlxuICogUmVuZGVycyB0aGUgb2JqZWN0IHVzaW5nIHRoZSBXZWJHTCByZW5kZXJlclxuICpcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5XZWJHTFJlbmRlcmVyfSBhIHJlZmVyZW5jZSB0byB0aGUgV2ViR0wgcmVuZGVyZXJcbiAqIEBwcml2YXRlXG4gKi9cbk1lc2gucHJvdG90eXBlLl9yZW5kZXJXZWJHTCA9IGZ1bmN0aW9uIChyZW5kZXJlcilcbntcbiAgICByZW5kZXJlci5zZXRPYmplY3RSZW5kZXJlcihyZW5kZXJlci5wbHVnaW5zLm1lc2gpO1xuICAgIHJlbmRlcmVyLnBsdWdpbnMubWVzaC5yZW5kZXIodGhpcyk7XG59O1xuXG4vKipcbiAqIFJlbmRlcnMgdGhlIG9iamVjdCB1c2luZyB0aGUgQ2FudmFzIHJlbmRlcmVyXG4gKlxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLkNhbnZhc1JlbmRlcmVyfVxuICogQHByaXZhdGVcbiAqL1xuTWVzaC5wcm90b3R5cGUuX3JlbmRlckNhbnZhcyA9IGZ1bmN0aW9uIChyZW5kZXJlcilcbntcbiAgICB2YXIgY29udGV4dCA9IHJlbmRlcmVyLmNvbnRleHQ7XG5cbiAgICB2YXIgdHJhbnNmb3JtID0gdGhpcy53b3JsZFRyYW5zZm9ybTtcblxuICAgIGlmIChyZW5kZXJlci5yb3VuZFBpeGVscylcbiAgICB7XG4gICAgICAgIGNvbnRleHQuc2V0VHJhbnNmb3JtKHRyYW5zZm9ybS5hLCB0cmFuc2Zvcm0uYiwgdHJhbnNmb3JtLmMsIHRyYW5zZm9ybS5kLCB0cmFuc2Zvcm0udHggfCAwLCB0cmFuc2Zvcm0udHkgfCAwKTtcbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgY29udGV4dC5zZXRUcmFuc2Zvcm0odHJhbnNmb3JtLmEsIHRyYW5zZm9ybS5iLCB0cmFuc2Zvcm0uYywgdHJhbnNmb3JtLmQsIHRyYW5zZm9ybS50eCwgdHJhbnNmb3JtLnR5KTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5kcmF3TW9kZSA9PT0gTWVzaC5EUkFXX01PREVTLlRSSUFOR0xFX01FU0gpXG4gICAge1xuICAgICAgICB0aGlzLl9yZW5kZXJDYW52YXNUcmlhbmdsZU1lc2goY29udGV4dCk7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHRoaXMuX3JlbmRlckNhbnZhc1RyaWFuZ2xlcyhjb250ZXh0KTtcbiAgICB9XG59O1xuXG4vKipcbiAqIERyYXdzIHRoZSBvYmplY3QgaW4gVHJpYW5nbGUgTWVzaCBtb2RlIHVzaW5nIGNhbnZhc1xuICpcbiAqIEBwYXJhbSBjb250ZXh0IHtDYW52YXNSZW5kZXJpbmdDb250ZXh0MkR9IHRoZSBjdXJyZW50IGRyYXdpbmcgY29udGV4dFxuICogQHByaXZhdGVcbiAqL1xuTWVzaC5wcm90b3R5cGUuX3JlbmRlckNhbnZhc1RyaWFuZ2xlTWVzaCA9IGZ1bmN0aW9uIChjb250ZXh0KVxue1xuICAgIC8vIGRyYXcgdHJpYW5nbGVzISFcbiAgICB2YXIgdmVydGljZXMgPSB0aGlzLnZlcnRpY2VzO1xuICAgIHZhciB1dnMgPSB0aGlzLnV2cztcblxuICAgIHZhciBsZW5ndGggPSB2ZXJ0aWNlcy5sZW5ndGggLyAyO1xuICAgIC8vIHRoaXMuY291bnQrKztcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoIC0gMjsgaSsrKVxuICAgIHtcbiAgICAgICAgLy8gZHJhdyBzb21lIHRyaWFuZ2xlcyFcbiAgICAgICAgdmFyIGluZGV4ID0gaSAqIDI7XG4gICAgICAgIHRoaXMuX3JlbmRlckNhbnZhc0RyYXdUcmlhbmdsZShjb250ZXh0LCB2ZXJ0aWNlcywgdXZzLCBpbmRleCwgKGluZGV4ICsgMiksIChpbmRleCArIDQpKTtcbiAgICB9XG59O1xuXG4vKipcbiAqIERyYXdzIHRoZSBvYmplY3QgaW4gdHJpYW5nbGUgbW9kZSB1c2luZyBjYW52YXNcbiAqXG4gKiBAcGFyYW0gY29udGV4dCB7Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEfSB0aGUgY3VycmVudCBkcmF3aW5nIGNvbnRleHRcbiAqIEBwcml2YXRlXG4gKi9cbk1lc2gucHJvdG90eXBlLl9yZW5kZXJDYW52YXNUcmlhbmdsZXMgPSBmdW5jdGlvbiAoY29udGV4dClcbntcbiAgICAvLyBkcmF3IHRyaWFuZ2xlcyEhXG4gICAgdmFyIHZlcnRpY2VzID0gdGhpcy52ZXJ0aWNlcztcbiAgICB2YXIgdXZzID0gdGhpcy51dnM7XG4gICAgdmFyIGluZGljZXMgPSB0aGlzLmluZGljZXM7XG5cbiAgICB2YXIgbGVuZ3RoID0gaW5kaWNlcy5sZW5ndGg7XG4gICAgLy8gdGhpcy5jb3VudCsrO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7IGkgKz0gMylcbiAgICB7XG4gICAgICAgIC8vIGRyYXcgc29tZSB0cmlhbmdsZXMhXG4gICAgICAgIHZhciBpbmRleDAgPSBpbmRpY2VzW2ldICogMiwgaW5kZXgxID0gaW5kaWNlc1tpICsgMV0gKiAyLCBpbmRleDIgPSBpbmRpY2VzW2kgKyAyXSAqIDI7XG4gICAgICAgIHRoaXMuX3JlbmRlckNhbnZhc0RyYXdUcmlhbmdsZShjb250ZXh0LCB2ZXJ0aWNlcywgdXZzLCBpbmRleDAsIGluZGV4MSwgaW5kZXgyKTtcbiAgICB9XG59O1xuXG4vKipcbiAqIERyYXdzIG9uZSBvZiB0aGUgdHJpYW5nbGVzIHRoYXQgZm9ybSB0aGlzIE1lc2hcbiAqXG4gKiBAcGFyYW0gY29udGV4dCB7Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEfSB0aGUgY3VycmVudCBkcmF3aW5nIGNvbnRleHRcbiAqIEBwYXJhbSB2ZXJ0aWNlcyB7RmxvYXQzMkFycmF5fSBhIHJlZmVyZW5jZSB0byB0aGUgdmVydGljZXMgb2YgdGhlIE1lc2hcbiAqIEBwYXJhbSB1dnMge0Zsb2F0MzJBcnJheX0gYSByZWZlcmVuY2UgdG8gdGhlIHV2cyBvZiB0aGUgTWVzaFxuICogQHBhcmFtIGluZGV4MCB7bnVtYmVyfSB0aGUgaW5kZXggb2YgdGhlIGZpcnN0IHZlcnRleFxuICogQHBhcmFtIGluZGV4MSB7bnVtYmVyfSB0aGUgaW5kZXggb2YgdGhlIHNlY29uZCB2ZXJ0ZXhcbiAqIEBwYXJhbSBpbmRleDIge251bWJlcn0gdGhlIGluZGV4IG9mIHRoZSB0aGlyZCB2ZXJ0ZXhcbiAqIEBwcml2YXRlXG4gKi9cbk1lc2gucHJvdG90eXBlLl9yZW5kZXJDYW52YXNEcmF3VHJpYW5nbGUgPSBmdW5jdGlvbiAoY29udGV4dCwgdmVydGljZXMsIHV2cywgaW5kZXgwLCBpbmRleDEsIGluZGV4MilcbntcbiAgICB2YXIgdGV4dHVyZVNvdXJjZSA9IHRoaXMuX3RleHR1cmUuYmFzZVRleHR1cmUuc291cmNlO1xuICAgIHZhciB0ZXh0dXJlV2lkdGggPSB0aGlzLl90ZXh0dXJlLmJhc2VUZXh0dXJlLndpZHRoO1xuICAgIHZhciB0ZXh0dXJlSGVpZ2h0ID0gdGhpcy5fdGV4dHVyZS5iYXNlVGV4dHVyZS5oZWlnaHQ7XG5cbiAgICB2YXIgeDAgPSB2ZXJ0aWNlc1tpbmRleDBdLCB4MSA9IHZlcnRpY2VzW2luZGV4MV0sIHgyID0gdmVydGljZXNbaW5kZXgyXTtcbiAgICB2YXIgeTAgPSB2ZXJ0aWNlc1tpbmRleDAgKyAxXSwgeTEgPSB2ZXJ0aWNlc1tpbmRleDEgKyAxXSwgeTIgPSB2ZXJ0aWNlc1tpbmRleDIgKyAxXTtcblxuICAgIHZhciB1MCA9IHV2c1tpbmRleDBdICogdGV4dHVyZVdpZHRoLCB1MSA9IHV2c1tpbmRleDFdICogdGV4dHVyZVdpZHRoLCB1MiA9IHV2c1tpbmRleDJdICogdGV4dHVyZVdpZHRoO1xuICAgIHZhciB2MCA9IHV2c1tpbmRleDAgKyAxXSAqIHRleHR1cmVIZWlnaHQsIHYxID0gdXZzW2luZGV4MSArIDFdICogdGV4dHVyZUhlaWdodCwgdjIgPSB1dnNbaW5kZXgyICsgMV0gKiB0ZXh0dXJlSGVpZ2h0O1xuXG4gICAgaWYgKHRoaXMuY2FudmFzUGFkZGluZyA+IDApXG4gICAge1xuICAgICAgICB2YXIgcGFkZGluZ1ggPSB0aGlzLmNhbnZhc1BhZGRpbmcgLyB0aGlzLndvcmxkVHJhbnNmb3JtLmE7XG4gICAgICAgIHZhciBwYWRkaW5nWSA9IHRoaXMuY2FudmFzUGFkZGluZyAvIHRoaXMud29ybGRUcmFuc2Zvcm0uZDtcbiAgICAgICAgdmFyIGNlbnRlclggPSAoeDAgKyB4MSArIHgyKSAvIDM7XG4gICAgICAgIHZhciBjZW50ZXJZID0gKHkwICsgeTEgKyB5MikgLyAzO1xuXG4gICAgICAgIHZhciBub3JtWCA9IHgwIC0gY2VudGVyWDtcbiAgICAgICAgdmFyIG5vcm1ZID0geTAgLSBjZW50ZXJZO1xuXG4gICAgICAgIHZhciBkaXN0ID0gTWF0aC5zcXJ0KG5vcm1YICogbm9ybVggKyBub3JtWSAqIG5vcm1ZKTtcbiAgICAgICAgeDAgPSBjZW50ZXJYICsgKG5vcm1YIC8gZGlzdCkgKiAoZGlzdCArIHBhZGRpbmdYKTtcbiAgICAgICAgeTAgPSBjZW50ZXJZICsgKG5vcm1ZIC8gZGlzdCkgKiAoZGlzdCArIHBhZGRpbmdZKTtcblxuICAgICAgICAvL1xuXG4gICAgICAgIG5vcm1YID0geDEgLSBjZW50ZXJYO1xuICAgICAgICBub3JtWSA9IHkxIC0gY2VudGVyWTtcblxuICAgICAgICBkaXN0ID0gTWF0aC5zcXJ0KG5vcm1YICogbm9ybVggKyBub3JtWSAqIG5vcm1ZKTtcbiAgICAgICAgeDEgPSBjZW50ZXJYICsgKG5vcm1YIC8gZGlzdCkgKiAoZGlzdCArIHBhZGRpbmdYKTtcbiAgICAgICAgeTEgPSBjZW50ZXJZICsgKG5vcm1ZIC8gZGlzdCkgKiAoZGlzdCArIHBhZGRpbmdZKTtcblxuICAgICAgICBub3JtWCA9IHgyIC0gY2VudGVyWDtcbiAgICAgICAgbm9ybVkgPSB5MiAtIGNlbnRlclk7XG5cbiAgICAgICAgZGlzdCA9IE1hdGguc3FydChub3JtWCAqIG5vcm1YICsgbm9ybVkgKiBub3JtWSk7XG4gICAgICAgIHgyID0gY2VudGVyWCArIChub3JtWCAvIGRpc3QpICogKGRpc3QgKyBwYWRkaW5nWCk7XG4gICAgICAgIHkyID0gY2VudGVyWSArIChub3JtWSAvIGRpc3QpICogKGRpc3QgKyBwYWRkaW5nWSk7XG4gICAgfVxuXG4gICAgY29udGV4dC5zYXZlKCk7XG4gICAgY29udGV4dC5iZWdpblBhdGgoKTtcblxuXG4gICAgY29udGV4dC5tb3ZlVG8oeDAsIHkwKTtcbiAgICBjb250ZXh0LmxpbmVUbyh4MSwgeTEpO1xuICAgIGNvbnRleHQubGluZVRvKHgyLCB5Mik7XG5cbiAgICBjb250ZXh0LmNsb3NlUGF0aCgpO1xuXG4gICAgY29udGV4dC5jbGlwKCk7XG5cbiAgICAvLyBDb21wdXRlIG1hdHJpeCB0cmFuc2Zvcm1cbiAgICB2YXIgZGVsdGEgPSAgKHUwICogdjEpICAgICAgKyAodjAgKiB1MikgICAgICArICh1MSAqIHYyKSAgICAgIC0gKHYxICogdTIpICAgICAgLSAodjAgKiB1MSkgICAgICAtICh1MCAqIHYyKTtcbiAgICB2YXIgZGVsdGFBID0gKHgwICogdjEpICAgICAgKyAodjAgKiB4MikgICAgICArICh4MSAqIHYyKSAgICAgIC0gKHYxICogeDIpICAgICAgLSAodjAgKiB4MSkgICAgICAtICh4MCAqIHYyKTtcbiAgICB2YXIgZGVsdGFCID0gKHUwICogeDEpICAgICAgKyAoeDAgKiB1MikgICAgICArICh1MSAqIHgyKSAgICAgIC0gKHgxICogdTIpICAgICAgLSAoeDAgKiB1MSkgICAgICAtICh1MCAqIHgyKTtcbiAgICB2YXIgZGVsdGFDID0gKHUwICogdjEgKiB4MikgKyAodjAgKiB4MSAqIHUyKSArICh4MCAqIHUxICogdjIpIC0gKHgwICogdjEgKiB1MikgLSAodjAgKiB1MSAqIHgyKSAtICh1MCAqIHgxICogdjIpO1xuICAgIHZhciBkZWx0YUQgPSAoeTAgKiB2MSkgICAgICArICh2MCAqIHkyKSAgICAgICsgKHkxICogdjIpICAgICAgLSAodjEgKiB5MikgICAgICAtICh2MCAqIHkxKSAgICAgIC0gKHkwICogdjIpO1xuICAgIHZhciBkZWx0YUUgPSAodTAgKiB5MSkgICAgICArICh5MCAqIHUyKSAgICAgICsgKHUxICogeTIpICAgICAgLSAoeTEgKiB1MikgICAgICAtICh5MCAqIHUxKSAgICAgIC0gKHUwICogeTIpO1xuICAgIHZhciBkZWx0YUYgPSAodTAgKiB2MSAqIHkyKSArICh2MCAqIHkxICogdTIpICsgKHkwICogdTEgKiB2MikgLSAoeTAgKiB2MSAqIHUyKSAtICh2MCAqIHUxICogeTIpIC0gKHUwICogeTEgKiB2Mik7XG5cbiAgICBjb250ZXh0LnRyYW5zZm9ybShkZWx0YUEgLyBkZWx0YSwgZGVsdGFEIC8gZGVsdGEsXG4gICAgICAgIGRlbHRhQiAvIGRlbHRhLCBkZWx0YUUgLyBkZWx0YSxcbiAgICAgICAgZGVsdGFDIC8gZGVsdGEsIGRlbHRhRiAvIGRlbHRhKTtcblxuICAgIGNvbnRleHQuZHJhd0ltYWdlKHRleHR1cmVTb3VyY2UsIDAsIDApO1xuICAgIGNvbnRleHQucmVzdG9yZSgpO1xufTtcblxuXG5cbi8qKlxuICogUmVuZGVycyBhIGZsYXQgTWVzaFxuICpcbiAqIEBwYXJhbSBNZXNoIHtQSVhJLm1lc2guTWVzaH0gVGhlIE1lc2ggdG8gcmVuZGVyXG4gKiBAcHJpdmF0ZVxuICovXG5NZXNoLnByb3RvdHlwZS5yZW5kZXJNZXNoRmxhdCA9IGZ1bmN0aW9uIChNZXNoKVxue1xuICAgIHZhciBjb250ZXh0ID0gdGhpcy5jb250ZXh0O1xuICAgIHZhciB2ZXJ0aWNlcyA9IE1lc2gudmVydGljZXM7XG5cbiAgICB2YXIgbGVuZ3RoID0gdmVydGljZXMubGVuZ3RoLzI7XG4gICAgLy8gdGhpcy5jb3VudCsrO1xuXG4gICAgY29udGV4dC5iZWdpblBhdGgoKTtcbiAgICBmb3IgKHZhciBpPTE7IGkgPCBsZW5ndGgtMjsgaSsrKVxuICAgIHtcbiAgICAgICAgLy8gZHJhdyBzb21lIHRyaWFuZ2xlcyFcbiAgICAgICAgdmFyIGluZGV4ID0gaSoyO1xuXG4gICAgICAgIHZhciB4MCA9IHZlcnRpY2VzW2luZGV4XSwgICB4MSA9IHZlcnRpY2VzW2luZGV4KzJdLCB4MiA9IHZlcnRpY2VzW2luZGV4KzRdO1xuICAgICAgICB2YXIgeTAgPSB2ZXJ0aWNlc1tpbmRleCsxXSwgeTEgPSB2ZXJ0aWNlc1tpbmRleCszXSwgeTIgPSB2ZXJ0aWNlc1tpbmRleCs1XTtcblxuICAgICAgICBjb250ZXh0Lm1vdmVUbyh4MCwgeTApO1xuICAgICAgICBjb250ZXh0LmxpbmVUbyh4MSwgeTEpO1xuICAgICAgICBjb250ZXh0LmxpbmVUbyh4MiwgeTIpO1xuICAgIH1cblxuICAgIGNvbnRleHQuZmlsbFN0eWxlID0gJyNGRjAwMDAnO1xuICAgIGNvbnRleHQuZmlsbCgpO1xuICAgIGNvbnRleHQuY2xvc2VQYXRoKCk7XG59O1xuXG4vKipcbiAqIFdoZW4gdGhlIHRleHR1cmUgaXMgdXBkYXRlZCwgdGhpcyBldmVudCB3aWxsIGZpcmUgdG8gdXBkYXRlIHRoZSBzY2FsZSBhbmQgZnJhbWVcbiAqXG4gKiBAcGFyYW0gZXZlbnRcbiAqIEBwcml2YXRlXG4gKi9cbk1lc2gucHJvdG90eXBlLl9vblRleHR1cmVVcGRhdGUgPSBmdW5jdGlvbiAoKVxue1xuICAgIHRoaXMudXBkYXRlRnJhbWUgPSB0cnVlO1xufTtcblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBib3VuZHMgb2YgdGhlIG1lc2ggYXMgYSByZWN0YW5nbGUuIFRoZSBib3VuZHMgY2FsY3VsYXRpb24gdGFrZXMgdGhlIHdvcmxkVHJhbnNmb3JtIGludG8gYWNjb3VudC5cbiAqXG4gKiBAcGFyYW0gbWF0cml4IHtQSVhJLk1hdHJpeH0gdGhlIHRyYW5zZm9ybWF0aW9uIG1hdHJpeCBvZiB0aGUgc3ByaXRlXG4gKiBAcmV0dXJuIHtQSVhJLlJlY3RhbmdsZX0gdGhlIGZyYW1pbmcgcmVjdGFuZ2xlXG4gKi9cbk1lc2gucHJvdG90eXBlLmdldEJvdW5kcyA9IGZ1bmN0aW9uIChtYXRyaXgpXG57XG4gICAgaWYgKCF0aGlzLl9jdXJyZW50Qm91bmRzKSB7XG4gICAgICAgIHZhciB3b3JsZFRyYW5zZm9ybSA9IG1hdHJpeCB8fCB0aGlzLndvcmxkVHJhbnNmb3JtO1xuXG4gICAgICAgIHZhciBhID0gd29ybGRUcmFuc2Zvcm0uYTtcbiAgICAgICAgdmFyIGIgPSB3b3JsZFRyYW5zZm9ybS5iO1xuICAgICAgICB2YXIgYyA9IHdvcmxkVHJhbnNmb3JtLmM7XG4gICAgICAgIHZhciBkID0gd29ybGRUcmFuc2Zvcm0uZDtcbiAgICAgICAgdmFyIHR4ID0gd29ybGRUcmFuc2Zvcm0udHg7XG4gICAgICAgIHZhciB0eSA9IHdvcmxkVHJhbnNmb3JtLnR5O1xuXG4gICAgICAgIHZhciBtYXhYID0gLUluZmluaXR5O1xuICAgICAgICB2YXIgbWF4WSA9IC1JbmZpbml0eTtcblxuICAgICAgICB2YXIgbWluWCA9IEluZmluaXR5O1xuICAgICAgICB2YXIgbWluWSA9IEluZmluaXR5O1xuXG4gICAgICAgIHZhciB2ZXJ0aWNlcyA9IHRoaXMudmVydGljZXM7XG4gICAgICAgIGZvciAodmFyIGkgPSAwLCBuID0gdmVydGljZXMubGVuZ3RoOyBpIDwgbjsgaSArPSAyKSB7XG4gICAgICAgICAgICB2YXIgcmF3WCA9IHZlcnRpY2VzW2ldLCByYXdZID0gdmVydGljZXNbaSArIDFdO1xuICAgICAgICAgICAgdmFyIHggPSAoYSAqIHJhd1gpICsgKGMgKiByYXdZKSArIHR4O1xuICAgICAgICAgICAgdmFyIHkgPSAoZCAqIHJhd1kpICsgKGIgKiByYXdYKSArIHR5O1xuXG4gICAgICAgICAgICBtaW5YID0geCA8IG1pblggPyB4IDogbWluWDtcbiAgICAgICAgICAgIG1pblkgPSB5IDwgbWluWSA/IHkgOiBtaW5ZO1xuXG4gICAgICAgICAgICBtYXhYID0geCA+IG1heFggPyB4IDogbWF4WDtcbiAgICAgICAgICAgIG1heFkgPSB5ID4gbWF4WSA/IHkgOiBtYXhZO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG1pblggPT09IC1JbmZpbml0eSB8fCBtYXhZID09PSBJbmZpbml0eSkge1xuICAgICAgICAgICAgcmV0dXJuIGNvcmUuUmVjdGFuZ2xlLkVNUFRZO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGJvdW5kcyA9IHRoaXMuX2JvdW5kcztcblxuICAgICAgICBib3VuZHMueCA9IG1pblg7XG4gICAgICAgIGJvdW5kcy53aWR0aCA9IG1heFggLSBtaW5YO1xuXG4gICAgICAgIGJvdW5kcy55ID0gbWluWTtcbiAgICAgICAgYm91bmRzLmhlaWdodCA9IG1heFkgLSBtaW5ZO1xuXG4gICAgICAgIC8vIHN0b3JlIGEgcmVmZXJlbmNlIHNvIHRoYXQgaWYgdGhpcyBmdW5jdGlvbiBnZXRzIGNhbGxlZCBhZ2FpbiBpbiB0aGUgcmVuZGVyIGN5Y2xlIHdlIGRvIG5vdCBoYXZlIHRvIHJlY2FsY3VsYXRlXG4gICAgICAgIHRoaXMuX2N1cnJlbnRCb3VuZHMgPSBib3VuZHM7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuX2N1cnJlbnRCb3VuZHM7XG59O1xuXG4vKipcbiAqIFRlc3RzIGlmIGEgcG9pbnQgaXMgaW5zaWRlIHRoaXMgbWVzaC4gV29ya3Mgb25seSBmb3IgVFJJQU5HTEVfTUVTSFxuICpcbiAqIEBwYXJhbSBwb2ludCB7UElYSS5Qb2ludH0gdGhlIHBvaW50IHRvIHRlc3RcbiAqIEByZXR1cm4ge2Jvb2xlYW59IHRoZSByZXN1bHQgb2YgdGhlIHRlc3RcbiAqL1xuTWVzaC5wcm90b3R5cGUuY29udGFpbnNQb2ludCA9IGZ1bmN0aW9uKCBwb2ludCApIHtcbiAgICBpZiAoIXRoaXMuZ2V0Qm91bmRzKCkuY29udGFpbnMocG9pbnQueCwgcG9pbnQueSkpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICB0aGlzLndvcmxkVHJhbnNmb3JtLmFwcGx5SW52ZXJzZShwb2ludCwgIHRlbXBQb2ludCk7XG5cbiAgICB2YXIgdmVydGljZXMgPSB0aGlzLnZlcnRpY2VzO1xuICAgIHZhciBwb2ludHMgPSB0ZW1wUG9seWdvbi5wb2ludHM7XG4gICAgdmFyIGksIGxlbjtcblxuICAgIGlmICh0aGlzLmRyYXdNb2RlID09PSBNZXNoLkRSQVdfTU9ERVMuVFJJQU5HTEVTKSB7XG4gICAgICAgIHZhciBpbmRpY2VzID0gdGhpcy5pbmRpY2VzO1xuICAgICAgICBsZW4gPSB0aGlzLmluZGljZXMubGVuZ3RoO1xuICAgICAgICAvL1RPRE86IGlubGluZSB0aGlzLlxuICAgICAgICBmb3IgKGk9MDtpPGxlbjtpKz0zKSB7XG4gICAgICAgICAgICB2YXIgaW5kMCA9IGluZGljZXNbaV0qMiwgaW5kMSA9IGluZGljZXNbaSsxXSoyLCBpbmQyID0gaW5kaWNlc1tpKzJdKjI7XG4gICAgICAgICAgICBwb2ludHNbMF0gPSB2ZXJ0aWNlc1tpbmQwXTtcbiAgICAgICAgICAgIHBvaW50c1sxXSA9IHZlcnRpY2VzW2luZDArMV07XG4gICAgICAgICAgICBwb2ludHNbMl0gPSB2ZXJ0aWNlc1tpbmQxXTtcbiAgICAgICAgICAgIHBvaW50c1szXSA9IHZlcnRpY2VzW2luZDErMV07XG4gICAgICAgICAgICBwb2ludHNbNF0gPSB2ZXJ0aWNlc1tpbmQyXTtcbiAgICAgICAgICAgIHBvaW50c1s1XSA9IHZlcnRpY2VzW2luZDIrMV07XG4gICAgICAgICAgICBpZiAodGVtcFBvbHlnb24uY29udGFpbnModGVtcFBvaW50LngsIHRlbXBQb2ludC55KSkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgICAgbGVuID0gdmVydGljZXMubGVuZ3RoO1xuICAgICAgICBmb3IgKGk9MDtpPGxlbjtpKz02KSB7XG4gICAgICAgICAgICBwb2ludHNbMF0gPSB2ZXJ0aWNlc1tpXTtcbiAgICAgICAgICAgIHBvaW50c1sxXSA9IHZlcnRpY2VzW2krMV07XG4gICAgICAgICAgICBwb2ludHNbMl0gPSB2ZXJ0aWNlc1tpKzJdO1xuICAgICAgICAgICAgcG9pbnRzWzNdID0gdmVydGljZXNbaSszXTtcbiAgICAgICAgICAgIHBvaW50c1s0XSA9IHZlcnRpY2VzW2krNF07XG4gICAgICAgICAgICBwb2ludHNbNV0gPSB2ZXJ0aWNlc1tpKzVdO1xuICAgICAgICAgICAgaWYgKHRlbXBQb2x5Z29uLmNvbnRhaW5zKHRlbXBQb2ludC54LCB0ZW1wUG9pbnQueSkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG59O1xuXG4vKipcbiAqIERpZmZlcmVudCBkcmF3aW5nIGJ1ZmZlciBtb2RlcyBzdXBwb3J0ZWRcbiAqXG4gKiBAc3RhdGljXG4gKiBAY29uc3RhbnRcbiAqIEBwcm9wZXJ0eSB7b2JqZWN0fSBEUkFXX01PREVTXG4gKiBAcHJvcGVydHkge251bWJlcn0gRFJBV19NT0RFUy5UUklBTkdMRV9NRVNIXG4gKiBAcHJvcGVydHkge251bWJlcn0gRFJBV19NT0RFUy5UUklBTkdMRVNcbiAqL1xuTWVzaC5EUkFXX01PREVTID0ge1xuICAgIFRSSUFOR0xFX01FU0g6IDAsXG4gICAgVFJJQU5HTEVTOiAxXG59O1xuIiwidmFyIE1lc2ggPSByZXF1aXJlKCcuL01lc2gnKTtcblxuLyoqXG4gKiBUaGUgUGxhbmUgYWxsb3dzIHlvdSB0byBkcmF3IGEgdGV4dHVyZSBhY3Jvc3Mgc2V2ZXJhbCBwb2ludHMgYW5kIHRoZW0gbWFuaXB1bGF0ZSB0aGVzZSBwb2ludHNcbiAqXG4gKmBgYGpzXG4gKiBmb3IgKHZhciBpID0gMDsgaSA8IDIwOyBpKyspIHtcbiAqICAgICBwb2ludHMucHVzaChuZXcgUElYSS5Qb2ludChpICogNTAsIDApKTtcbiAqIH07XG4gKiB2YXIgUGxhbmUgPSBuZXcgUElYSS5QbGFuZShQSVhJLlRleHR1cmUuZnJvbUltYWdlKFwic25ha2UucG5nXCIpLCBwb2ludHMpO1xuICogIGBgYFxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5tZXNoLk1lc2hcbiAqIEBtZW1iZXJvZiBQSVhJLm1lc2hcbiAqIEBwYXJhbSB7UElYSS5UZXh0dXJlfSB0ZXh0dXJlIC0gVGhlIHRleHR1cmUgdG8gdXNlIG9uIHRoZSBQbGFuZS5cbiAqIEBwYXJhbSB7aW50fSBzZWdtZW50c1ggLSBUaGUgbnVtYmVyIG94IHggc2VnbWVudHNcbiAqIEBwYXJhbSB7aW50fSBzZWdtZW50c1kgLSBUaGUgbnVtYmVyIG9mIHkgc2VnbWVudHNcbiAqXG4gKi9cbmZ1bmN0aW9uIFBsYW5lKHRleHR1cmUsIHNlZ21lbnRzWCwgc2VnbWVudHNZKVxue1xuICAgIE1lc2guY2FsbCh0aGlzLCB0ZXh0dXJlKTtcblxuICAgIC8qKlxuICAgICAqIFRyYWNrZXIgZm9yIGlmIHRoZSBQbGFuZSBpcyByZWFkeSB0byBiZSBkcmF3bi4gTmVlZGVkIGJlY2F1c2UgTWVzaCBjdG9yIGNhblxuICAgICAqIGNhbGwgX29uVGV4dHVyZVVwZGF0ZWQgd2hpY2ggY291bGQgY2FsbCByZWZyZXNoIHRvbyBlYXJseS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9yZWFkeSA9IHRydWU7XG5cbiAgICB0aGlzLnNlZ21lbnRzWCA9ICBzZWdtZW50c1ggfHwgMTA7XG4gICAgdGhpcy5zZWdtZW50c1kgPSBzZWdtZW50c1kgfHwgMTA7XG5cbiAgICB0aGlzLmRyYXdNb2RlID0gTWVzaC5EUkFXX01PREVTLlRSSUFOR0xFUztcbiAgICB0aGlzLnJlZnJlc2goKTtcblxufVxuXG5cbi8vIGNvbnN0cnVjdG9yXG5QbGFuZS5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKCBNZXNoLnByb3RvdHlwZSApO1xuUGxhbmUucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gUGxhbmU7XG5tb2R1bGUuZXhwb3J0cyA9IFBsYW5lO1xuXG4vKipcbiAqIFJlZnJlc2hlc1xuICpcbiAqL1xuUGxhbmUucHJvdG90eXBlLnJlZnJlc2ggPSBmdW5jdGlvbigpXG57XG4gICAgdmFyIHRvdGFsID0gdGhpcy5zZWdtZW50c1ggKiB0aGlzLnNlZ21lbnRzWTtcbiAgICB2YXIgdmVydHMgPSBbXTtcbiAgICB2YXIgY29sb3JzID0gW107XG4gICAgdmFyIHV2cyA9IFtdO1xuICAgIHZhciBpbmRpY2VzID0gW107XG4gICAgdmFyIHRleHR1cmUgPSB0aGlzLnRleHR1cmU7XG5cbiAgLy8gIHRleHR1cmUud2lkdGggPSA4MDAgdGV4dHVyZS53aWR0aCB8fCA4MDA7XG4gLy8gICB0ZXh0dXJlLmhlaWdodCA9IDgwMC8vdGV4dHVyZS5oZWlnaHQgfHwgODAwO1xuXG4gICAgdmFyIHNlZ21lbnRzWFN1YiA9IHRoaXMuc2VnbWVudHNYIC0gMTtcbiAgICB2YXIgc2VnbWVudHNZU3ViID0gdGhpcy5zZWdtZW50c1kgLSAxO1xuICAgIHZhciBpID0gMDtcblxuICAgIHZhciBzaXplWCA9IHRleHR1cmUud2lkdGggLyBzZWdtZW50c1hTdWI7XG4gICAgdmFyIHNpemVZID0gdGV4dHVyZS5oZWlnaHQgLyBzZWdtZW50c1lTdWI7XG5cbiAgICBmb3IgKGkgPSAwOyBpIDwgdG90YWw7IGkrKykge1xuXG4gICAgICAgIHZhciB4ID0gKGkgJSB0aGlzLnNlZ21lbnRzWCk7XG4gICAgICAgIHZhciB5ID0gKCAoaSAvIHRoaXMuc2VnbWVudHNYICkgfCAwICk7XG5cblxuICAgICAgICB2ZXJ0cy5wdXNoKCh4ICogc2l6ZVgpLFxuICAgICAgICAgICAgICAgICAgICh5ICogc2l6ZVkpKTtcblxuICAgICAgICAvLyB0aGlzIHdvcmtzIGZvciByZWN0YW5ndWxhciB0ZXh0dXJlcy4gXG4gICAgICAgIHV2cy5wdXNoKHRleHR1cmUuX3V2cy54MCArICh0ZXh0dXJlLl91dnMueDEgLSB0ZXh0dXJlLl91dnMueDApICogKHggLyAodGhpcy5zZWdtZW50c1gtMSkpLCB0ZXh0dXJlLl91dnMueTAgKyAodGV4dHVyZS5fdXZzLnkzLXRleHR1cmUuX3V2cy55MCkgKiAoeS8gKHRoaXMuc2VnbWVudHNZLTEpKSk7XG4gICAgICB9XG5cbiAgICAvLyAgY29uc1xuXG4gICAgdmFyIHRvdGFsU3ViID0gc2VnbWVudHNYU3ViICogc2VnbWVudHNZU3ViO1xuXG4gICAgZm9yIChpID0gMDsgaSA8IHRvdGFsU3ViOyBpKyspIHtcblxuICAgICAgICB2YXIgeHBvcyA9IGkgJSBzZWdtZW50c1hTdWI7XG4gICAgICAgIHZhciB5cG9zID0gKGkgLyBzZWdtZW50c1hTdWIgKSB8IDA7XG5cblxuICAgICAgICB2YXIgIHZhbHVlID0gKHlwb3MgKiB0aGlzLnNlZ21lbnRzWCkgKyB4cG9zO1xuICAgICAgICB2YXIgIHZhbHVlMiA9ICh5cG9zICogdGhpcy5zZWdtZW50c1gpICsgeHBvcyArIDE7XG4gICAgICAgIHZhciAgdmFsdWUzID0gKCh5cG9zKzEpICogdGhpcy5zZWdtZW50c1gpICsgeHBvcztcbiAgICAgICAgdmFyICB2YWx1ZTQgPSAoKHlwb3MrMSkgKiB0aGlzLnNlZ21lbnRzWCkgKyB4cG9zICsgMTtcblxuICAgICAgICBpbmRpY2VzLnB1c2godmFsdWUsIHZhbHVlMiwgdmFsdWUzKTtcbiAgICAgICAgaW5kaWNlcy5wdXNoKHZhbHVlMiwgdmFsdWU0LCB2YWx1ZTMpO1xuICAgIH1cblxuXG4gICAgLy9jb25zb2xlLmxvZyhpbmRpY2VzKVxuICAgIHRoaXMudmVydGljZXMgPSBuZXcgRmxvYXQzMkFycmF5KHZlcnRzKTtcbiAgICB0aGlzLnV2cyA9IG5ldyBGbG9hdDMyQXJyYXkodXZzKTtcbiAgICB0aGlzLmNvbG9ycyA9IG5ldyBGbG9hdDMyQXJyYXkoY29sb3JzKTtcbiAgICB0aGlzLmluZGljZXMgPSBuZXcgVWludDE2QXJyYXkoaW5kaWNlcyk7XG59O1xuXG4vKipcbiAqIENsZWFyIHRleHR1cmUgVVZzIHdoZW4gbmV3IHRleHR1cmUgaXMgc2V0XG4gKlxuICogQHByaXZhdGVcbiAqL1xuUGxhbmUucHJvdG90eXBlLl9vblRleHR1cmVVcGRhdGUgPSBmdW5jdGlvbiAoKVxue1xuICAgIE1lc2gucHJvdG90eXBlLl9vblRleHR1cmVVcGRhdGUuY2FsbCh0aGlzKTtcblxuICAgIC8vIHdhaXQgZm9yIHRoZSBQbGFuZSBjdG9yIHRvIGZpbmlzaCBiZWZvcmUgY2FsbGluZyByZWZyZXNoXG4gICAgaWYgKHRoaXMuX3JlYWR5KSB7XG4gICAgICAgIHRoaXMucmVmcmVzaCgpO1xuICAgIH1cbn07XG4iLCJ2YXIgTWVzaCA9IHJlcXVpcmUoJy4vTWVzaCcpO1xudmFyIGNvcmUgPSByZXF1aXJlKCcuLi9jb3JlJyk7XG5cbi8qKlxuICogVGhlIHJvcGUgYWxsb3dzIHlvdSB0byBkcmF3IGEgdGV4dHVyZSBhY3Jvc3Mgc2V2ZXJhbCBwb2ludHMgYW5kIHRoZW0gbWFuaXB1bGF0ZSB0aGVzZSBwb2ludHNcbiAqXG4gKmBgYGpzXG4gKiBmb3IgKHZhciBpID0gMDsgaSA8IDIwOyBpKyspIHtcbiAqICAgICBwb2ludHMucHVzaChuZXcgUElYSS5Qb2ludChpICogNTAsIDApKTtcbiAqIH07XG4gKiB2YXIgcm9wZSA9IG5ldyBQSVhJLlJvcGUoUElYSS5UZXh0dXJlLmZyb21JbWFnZShcInNuYWtlLnBuZ1wiKSwgcG9pbnRzKTtcbiAqICBgYGBcbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkubWVzaC5NZXNoXG4gKiBAbWVtYmVyb2YgUElYSS5tZXNoXG4gKiBAcGFyYW0ge1BJWEkuVGV4dHVyZX0gdGV4dHVyZSAtIFRoZSB0ZXh0dXJlIHRvIHVzZSBvbiB0aGUgcm9wZS5cbiAqIEBwYXJhbSB7UElYSS5Qb2ludFtdfSBwb2ludHMgLSBBbiBhcnJheSBvZiB7QGxpbmsgUElYSS5Qb2ludH0gb2JqZWN0cyB0byBjb25zdHJ1Y3QgdGhpcyByb3BlLlxuICpcbiAqL1xuZnVuY3Rpb24gUm9wZSh0ZXh0dXJlLCBwb2ludHMpXG57XG4gICAgTWVzaC5jYWxsKHRoaXMsIHRleHR1cmUpO1xuXG4gICAgLypcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlBvaW50W119IEFuIGFycmF5IG9mIHBvaW50cyB0aGF0IGRldGVybWluZSB0aGUgcm9wZVxuICAgICAqL1xuICAgIHRoaXMucG9pbnRzID0gcG9pbnRzO1xuXG4gICAgLypcbiAgICAgKiBAbWVtYmVyIHtGbG9hdDMyQXJyYXl9IEFuIGFycmF5IG9mIHZlcnRpY2VzIHVzZWQgdG8gY29uc3RydWN0IHRoaXMgcm9wZS5cbiAgICAgKi9cbiAgICB0aGlzLnZlcnRpY2VzID0gbmV3IEZsb2F0MzJBcnJheShwb2ludHMubGVuZ3RoICogNCk7XG5cbiAgICAvKlxuICAgICAqIEBtZW1iZXIge0Zsb2F0MzJBcnJheX0gVGhlIFdlYkdMIFV2cyBvZiB0aGUgcm9wZS5cbiAgICAgKi9cbiAgICB0aGlzLnV2cyA9IG5ldyBGbG9hdDMyQXJyYXkocG9pbnRzLmxlbmd0aCAqIDQpO1xuXG4gICAgLypcbiAgICAgKiBAbWVtYmVyIHtGbG9hdDMyQXJyYXl9IEFuIGFycmF5IGNvbnRhaW5pbmcgdGhlIGNvbG9yIGNvbXBvbmVudHNcbiAgICAgKi9cbiAgICB0aGlzLmNvbG9ycyA9IG5ldyBGbG9hdDMyQXJyYXkocG9pbnRzLmxlbmd0aCAqIDIpO1xuXG4gICAgLypcbiAgICAgKiBAbWVtYmVyIHtVaW50MTZBcnJheX0gQW4gYXJyYXkgY29udGFpbmluZyB0aGUgaW5kaWNlcyBvZiB0aGUgdmVydGljZXNcbiAgICAgKi9cbiAgICB0aGlzLmluZGljZXMgPSBuZXcgVWludDE2QXJyYXkocG9pbnRzLmxlbmd0aCAqIDIpO1xuXG4gICAgLyoqXG4gICAgICogVHJhY2tlciBmb3IgaWYgdGhlIHJvcGUgaXMgcmVhZHkgdG8gYmUgZHJhd24uIE5lZWRlZCBiZWNhdXNlIE1lc2ggY3RvciBjYW5cbiAgICAgKiBjYWxsIF9vblRleHR1cmVVcGRhdGVkIHdoaWNoIGNvdWxkIGNhbGwgcmVmcmVzaCB0b28gZWFybHkuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgIHRoaXMuX3JlYWR5ID0gdHJ1ZTtcblxuICAgICB0aGlzLnJlZnJlc2goKTtcbn1cblxuXG4vLyBjb25zdHJ1Y3RvclxuUm9wZS5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKE1lc2gucHJvdG90eXBlKTtcblJvcGUucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gUm9wZTtcbm1vZHVsZS5leHBvcnRzID0gUm9wZTtcblxuLyoqXG4gKiBSZWZyZXNoZXNcbiAqXG4gKi9cblJvcGUucHJvdG90eXBlLnJlZnJlc2ggPSBmdW5jdGlvbiAoKVxue1xuICAgIHZhciBwb2ludHMgPSB0aGlzLnBvaW50cztcblxuICAgIC8vIGlmIHRvbyBsaXR0bGUgcG9pbnRzLCBvciB0ZXh0dXJlIGhhc24ndCBnb3QgVVZzIHNldCB5ZXQganVzdCBtb3ZlIG9uLlxuICAgIGlmIChwb2ludHMubGVuZ3RoIDwgMSB8fCAhdGhpcy5fdGV4dHVyZS5fdXZzKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHZhciB1dnMgPSB0aGlzLnV2cztcblxuICAgIHZhciBpbmRpY2VzID0gdGhpcy5pbmRpY2VzO1xuICAgIHZhciBjb2xvcnMgPSB0aGlzLmNvbG9ycztcblxuICAgIHZhciB0ZXh0dXJlVXZzID0gdGhpcy5fdGV4dHVyZS5fdXZzO1xuICAgIHZhciBvZmZzZXQgPSBuZXcgY29yZS5Qb2ludCh0ZXh0dXJlVXZzLngwLCB0ZXh0dXJlVXZzLnkwKTtcbiAgICB2YXIgZmFjdG9yID0gbmV3IGNvcmUuUG9pbnQodGV4dHVyZVV2cy54MiAtIHRleHR1cmVVdnMueDAsIHRleHR1cmVVdnMueTIgLSB0ZXh0dXJlVXZzLnkwKTtcblxuICAgIHV2c1swXSA9IDAgKyBvZmZzZXQueDtcbiAgICB1dnNbMV0gPSAwICsgb2Zmc2V0Lnk7XG4gICAgdXZzWzJdID0gMCArIG9mZnNldC54O1xuICAgIHV2c1szXSA9IDEgKiBmYWN0b3IueSArIG9mZnNldC55O1xuXG4gICAgY29sb3JzWzBdID0gMTtcbiAgICBjb2xvcnNbMV0gPSAxO1xuXG4gICAgaW5kaWNlc1swXSA9IDA7XG4gICAgaW5kaWNlc1sxXSA9IDE7XG5cbiAgICB2YXIgdG90YWwgPSBwb2ludHMubGVuZ3RoLFxuICAgICAgICBwb2ludCwgaW5kZXgsIGFtb3VudDtcblxuICAgIGZvciAodmFyIGkgPSAxOyBpIDwgdG90YWw7IGkrKylcbiAgICB7XG4gICAgICAgIHBvaW50ID0gcG9pbnRzW2ldO1xuICAgICAgICBpbmRleCA9IGkgKiA0O1xuICAgICAgICAvLyB0aW1lIHRvIGRvIHNvbWUgc21hcnQgZHJhd2luZyFcbiAgICAgICAgYW1vdW50ID0gaSAvICh0b3RhbC0xKTtcblxuICAgICAgICB1dnNbaW5kZXhdID0gYW1vdW50ICogZmFjdG9yLnggKyBvZmZzZXQueDtcbiAgICAgICAgdXZzW2luZGV4KzFdID0gMCArIG9mZnNldC55O1xuXG4gICAgICAgIHV2c1tpbmRleCsyXSA9IGFtb3VudCAqIGZhY3Rvci54ICsgb2Zmc2V0Lng7XG4gICAgICAgIHV2c1tpbmRleCszXSA9IDEgKiBmYWN0b3IueSArIG9mZnNldC55O1xuXG4gICAgICAgIGluZGV4ID0gaSAqIDI7XG4gICAgICAgIGNvbG9yc1tpbmRleF0gPSAxO1xuICAgICAgICBjb2xvcnNbaW5kZXgrMV0gPSAxO1xuXG4gICAgICAgIGluZGV4ID0gaSAqIDI7XG4gICAgICAgIGluZGljZXNbaW5kZXhdID0gaW5kZXg7XG4gICAgICAgIGluZGljZXNbaW5kZXggKyAxXSA9IGluZGV4ICsgMTtcbiAgICB9XG5cbiAgICB0aGlzLmRpcnR5ID0gdHJ1ZTtcbn07XG5cbi8qKlxuICogQ2xlYXIgdGV4dHVyZSBVVnMgd2hlbiBuZXcgdGV4dHVyZSBpcyBzZXRcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5Sb3BlLnByb3RvdHlwZS5fb25UZXh0dXJlVXBkYXRlID0gZnVuY3Rpb24gKClcbntcbiAgICBNZXNoLnByb3RvdHlwZS5fb25UZXh0dXJlVXBkYXRlLmNhbGwodGhpcyk7XG5cbiAgICAvLyB3YWl0IGZvciB0aGUgUm9wZSBjdG9yIHRvIGZpbmlzaCBiZWZvcmUgY2FsbGluZyByZWZyZXNoXG4gICAgaWYgKHRoaXMuX3JlYWR5KSB7XG4gICAgICAgIHRoaXMucmVmcmVzaCgpO1xuICAgIH1cbn07XG5cbi8qKlxuICogVXBkYXRlcyB0aGUgb2JqZWN0IHRyYW5zZm9ybSBmb3IgcmVuZGVyaW5nXG4gKlxuICogQHByaXZhdGVcbiAqL1xuUm9wZS5wcm90b3R5cGUudXBkYXRlVHJhbnNmb3JtID0gZnVuY3Rpb24gKClcbntcbiAgICB2YXIgcG9pbnRzID0gdGhpcy5wb2ludHM7XG5cbiAgICBpZiAocG9pbnRzLmxlbmd0aCA8IDEpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFyIGxhc3RQb2ludCA9IHBvaW50c1swXTtcbiAgICB2YXIgbmV4dFBvaW50O1xuICAgIHZhciBwZXJwWCA9IDA7XG4gICAgdmFyIHBlcnBZID0gMDtcblxuICAgIC8vIHRoaXMuY291bnQgLT0gMC4yO1xuXG4gICAgdmFyIHZlcnRpY2VzID0gdGhpcy52ZXJ0aWNlcztcbiAgICB2YXIgdG90YWwgPSBwb2ludHMubGVuZ3RoLFxuICAgICAgICBwb2ludCwgaW5kZXgsIHJhdGlvLCBwZXJwTGVuZ3RoLCBudW07XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRvdGFsOyBpKyspXG4gICAge1xuICAgICAgICBwb2ludCA9IHBvaW50c1tpXTtcbiAgICAgICAgaW5kZXggPSBpICogNDtcblxuICAgICAgICBpZiAoaSA8IHBvaW50cy5sZW5ndGgtMSlcbiAgICAgICAge1xuICAgICAgICAgICAgbmV4dFBvaW50ID0gcG9pbnRzW2krMV07XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgICBuZXh0UG9pbnQgPSBwb2ludDtcbiAgICAgICAgfVxuXG4gICAgICAgIHBlcnBZID0gLShuZXh0UG9pbnQueCAtIGxhc3RQb2ludC54KTtcbiAgICAgICAgcGVycFggPSBuZXh0UG9pbnQueSAtIGxhc3RQb2ludC55O1xuXG4gICAgICAgIHJhdGlvID0gKDEgLSAoaSAvICh0b3RhbC0xKSkpICogMTA7XG5cbiAgICAgICAgaWYgKHJhdGlvID4gMSlcbiAgICAgICAge1xuICAgICAgICAgICAgcmF0aW8gPSAxO1xuICAgICAgICB9XG5cbiAgICAgICAgcGVycExlbmd0aCA9IE1hdGguc3FydChwZXJwWCAqIHBlcnBYICsgcGVycFkgKiBwZXJwWSk7XG4gICAgICAgIG51bSA9IHRoaXMuX3RleHR1cmUuaGVpZ2h0IC8gMjsgLy8oMjAgKyBNYXRoLmFicyhNYXRoLnNpbigoaSArIHRoaXMuY291bnQpICogMC4zKSAqIDUwKSApKiByYXRpbztcbiAgICAgICAgcGVycFggLz0gcGVycExlbmd0aDtcbiAgICAgICAgcGVycFkgLz0gcGVycExlbmd0aDtcblxuICAgICAgICBwZXJwWCAqPSBudW07XG4gICAgICAgIHBlcnBZICo9IG51bTtcblxuICAgICAgICB2ZXJ0aWNlc1tpbmRleF0gPSBwb2ludC54ICsgcGVycFg7XG4gICAgICAgIHZlcnRpY2VzW2luZGV4KzFdID0gcG9pbnQueSArIHBlcnBZO1xuICAgICAgICB2ZXJ0aWNlc1tpbmRleCsyXSA9IHBvaW50LnggLSBwZXJwWDtcbiAgICAgICAgdmVydGljZXNbaW5kZXgrM10gPSBwb2ludC55IC0gcGVycFk7XG5cbiAgICAgICAgbGFzdFBvaW50ID0gcG9pbnQ7XG4gICAgfVxuXG4gICAgdGhpcy5jb250YWluZXJVcGRhdGVUcmFuc2Zvcm0oKTtcbn07XG4iLCIvKipcbiAqIEBmaWxlICAgICAgICBNYWluIGV4cG9ydCBvZiB0aGUgUElYSSBleHRyYXMgbGlicmFyeVxuICogQGF1dGhvciAgICAgIE1hdCBHcm92ZXMgPG1hdEBnb29kYm95ZGlnaXRhbC5jb20+XG4gKiBAY29weXJpZ2h0ICAgMjAxMy0yMDE1IEdvb2RCb3lEaWdpdGFsXG4gKiBAbGljZW5zZSAgICAge0BsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9waXhpanMvcGl4aS5qcy9ibG9iL21hc3Rlci9MSUNFTlNFfE1JVCBMaWNlbnNlfVxuICovXG5cbi8qKlxuICogQG5hbWVzcGFjZSBQSVhJLm1lc2hcbiAqL1xubW9kdWxlLmV4cG9ydHMgPSB7XG4gICAgTWVzaDogICAgICAgICAgIHJlcXVpcmUoJy4vTWVzaCcpLFxuICAgIFBsYW5lOiAgICAgICAgICAgcmVxdWlyZSgnLi9QbGFuZScpLFxuICAgIFJvcGU6ICAgICAgICAgICByZXF1aXJlKCcuL1JvcGUnKSxcbiAgICBNZXNoUmVuZGVyZXI6ICAgcmVxdWlyZSgnLi93ZWJnbC9NZXNoUmVuZGVyZXInKSxcbiAgICBNZXNoU2hhZGVyOiAgICAgcmVxdWlyZSgnLi93ZWJnbC9NZXNoU2hhZGVyJylcbn07XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uLy4uL2NvcmUnKSxcbiAgICBNZXNoID0gcmVxdWlyZSgnLi4vTWVzaCcpO1xuXG4vKipcbiAqIEBhdXRob3IgTWF0IEdyb3Zlc1xuICpcbiAqIEJpZyB0aGFua3MgdG8gdGhlIHZlcnkgY2xldmVyIE1hdHQgRGVzTGF1cmllcnMgPG1hdHRkZXNsPiBodHRwczovL2dpdGh1Yi5jb20vbWF0dGRlc2wvXG4gKiBmb3IgY3JlYXRpbmcgdGhlIG9yaWdpbmFsIHBpeGkgdmVyc2lvbiFcbiAqIEFsc28gYSB0aGFua3MgdG8gaHR0cHM6Ly9naXRodWIuY29tL2JjaGV2YWxpZXIgZm9yIHR3ZWFraW5nIHRoZSB0aW50IGFuZCBhbHBoYSBzbyB0aGF0IHRoZXkgbm93IHNoYXJlIDQgYnl0ZXMgb24gdGhlIHZlcnRleCBidWZmZXJcbiAqXG4gKiBIZWF2aWx5IGluc3BpcmVkIGJ5IExpYkdEWCdzIE1lc2hSZW5kZXJlcjpcbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS9saWJnZHgvbGliZ2R4L2Jsb2IvbWFzdGVyL2dkeC9zcmMvY29tL2JhZGxvZ2ljL2dkeC9ncmFwaGljcy9nMmQvTWVzaFJlbmRlcmVyLmphdmFcbiAqL1xuXG4vKipcbiAqXG4gKiBAY2xhc3NcbiAqIEBwcml2YXRlXG4gKiBAbWVtYmVyb2YgUElYSS5tZXNoXG4gKiBAZXh0ZW5kcyBQSVhJLk9iamVjdFJlbmRlcmVyXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcn0gVGhlIHJlbmRlcmVyIHRoaXMgc3ByaXRlIGJhdGNoIHdvcmtzIGZvci5cbiAqL1xuZnVuY3Rpb24gTWVzaFJlbmRlcmVyKHJlbmRlcmVyKVxue1xuICAgIGNvcmUuT2JqZWN0UmVuZGVyZXIuY2FsbCh0aGlzLCByZW5kZXJlcik7XG5cblxuICAgIC8qKlxuICAgICAqIEhvbGRzIHRoZSBpbmRpY2VzXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtVaW50MTZBcnJheX1cbiAgICAgKi9cbiAgICBcbiAgICB0aGlzLmluZGljZXMgPSBuZXcgVWludDE2QXJyYXkoMTUwMDApO1xuXG4gICAgLy9UT0RPIHRoaXMgY291bGQgYmUgYSBzaW5nbGUgYnVmZmVyIHNoYXJlZCBhbW9uZ3N0IGFsbCByZW5kZXJlcnMgYXMgd2UgcmV1c2UgdGhpcyBzZXQgdXAgaW4gbW9zdCByZW5kZXJlcnNcbiAgICBmb3IgKHZhciBpPTAsIGo9MDsgaSA8IDE1MDAwOyBpICs9IDYsIGogKz0gNClcbiAgICB7XG4gICAgICAgIHRoaXMuaW5kaWNlc1tpICsgMF0gPSBqICsgMDtcbiAgICAgICAgdGhpcy5pbmRpY2VzW2kgKyAxXSA9IGogKyAxO1xuICAgICAgICB0aGlzLmluZGljZXNbaSArIDJdID0gaiArIDI7XG4gICAgICAgIHRoaXMuaW5kaWNlc1tpICsgM10gPSBqICsgMDtcbiAgICAgICAgdGhpcy5pbmRpY2VzW2kgKyA0XSA9IGogKyAyO1xuICAgICAgICB0aGlzLmluZGljZXNbaSArIDVdID0gaiArIDM7XG4gICAgfVxuXG4gICAgdGhpcy5jdXJyZW50U2hhZGVyID0gbnVsbDtcbn1cblxuTWVzaFJlbmRlcmVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoY29yZS5PYmplY3RSZW5kZXJlci5wcm90b3R5cGUpO1xuTWVzaFJlbmRlcmVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IE1lc2hSZW5kZXJlcjtcbm1vZHVsZS5leHBvcnRzID0gTWVzaFJlbmRlcmVyO1xuXG5jb3JlLldlYkdMUmVuZGVyZXIucmVnaXN0ZXJQbHVnaW4oJ21lc2gnLCBNZXNoUmVuZGVyZXIpO1xuXG4vKipcbiAqIFNldHMgdXAgdGhlIHJlbmRlcmVyIGNvbnRleHQgYW5kIG5lY2Vzc2FyeSBidWZmZXJzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0gZ2wge1dlYkdMUmVuZGVyaW5nQ29udGV4dH0gdGhlIGN1cnJlbnQgV2ViR0wgZHJhd2luZyBjb250ZXh0XG4gKi9cbk1lc2hSZW5kZXJlci5wcm90b3R5cGUub25Db250ZXh0Q2hhbmdlID0gZnVuY3Rpb24gKClcbntcblxufTtcblxuLyoqXG4gKiBSZW5kZXJzIHRoZSBzcHJpdGUgb2JqZWN0LlxuICpcbiAqIEBwYXJhbSBtZXNoIHtQSVhJLm1lc2guTWVzaH0gdGhlIG1lc2ggdG8gcmVuZGVyXG4gKi9cbk1lc2hSZW5kZXJlci5wcm90b3R5cGUucmVuZGVyID0gZnVuY3Rpb24gKG1lc2gpXG57XG4gICAgaWYoIW1lc2guX3ZlcnRleEJ1ZmZlcilcbiAgICB7XG4gICAgICAgIHRoaXMuX2luaXRXZWJHTChtZXNoKTtcbiAgICB9XG5cbiAgICB2YXIgcmVuZGVyZXIgPSB0aGlzLnJlbmRlcmVyLFxuICAgICAgICBnbCA9IHJlbmRlcmVyLmdsLFxuICAgICAgICB0ZXh0dXJlID0gbWVzaC5fdGV4dHVyZS5iYXNlVGV4dHVyZSxcbiAgICAgICAgc2hhZGVyID0gbWVzaC5zaGFkZXI7Ly8gfHwgcmVuZGVyZXIuc2hhZGVyTWFuYWdlci5wbHVnaW5zLm1lc2hTaGFkZXI7XG5cbiAgICB2YXIgZHJhd01vZGUgPSBtZXNoLmRyYXdNb2RlID09PSBNZXNoLkRSQVdfTU9ERVMuVFJJQU5HTEVfTUVTSCA/IGdsLlRSSUFOR0xFX1NUUklQIDogZ2wuVFJJQU5HTEVTO1xuXG4gICAgcmVuZGVyZXIuYmxlbmRNb2RlTWFuYWdlci5zZXRCbGVuZE1vZGUobWVzaC5ibGVuZE1vZGUpO1xuXG4gICAgLy9UT0RPIGNhY2hlIGN1c3RvbSBzdGF0ZS4uXG4gICAgaWYgKCFzaGFkZXIpXG4gICAge1xuICAgICAgICBzaGFkZXIgPSByZW5kZXJlci5zaGFkZXJNYW5hZ2VyLnBsdWdpbnMubWVzaFNoYWRlcjtcbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgc2hhZGVyID0gc2hhZGVyLnNoYWRlcnNbZ2wuaWRdIHx8IHNoYWRlci5nZXRTaGFkZXIocmVuZGVyZXIpOy8vIDogc2hhZGVyO1xuICAgIH1cblxuICAgIHRoaXMucmVuZGVyZXIuc2hhZGVyTWFuYWdlci5zZXRTaGFkZXIoc2hhZGVyKTtcblxuICAgIHNoYWRlci51bmlmb3Jtcy50cmFuc2xhdGlvbk1hdHJpeC52YWx1ZSA9IG1lc2gud29ybGRUcmFuc2Zvcm0udG9BcnJheSh0cnVlKTtcbiAgICBzaGFkZXIudW5pZm9ybXMucHJvamVjdGlvbk1hdHJpeC52YWx1ZSA9IHJlbmRlcmVyLmN1cnJlbnRSZW5kZXJUYXJnZXQucHJvamVjdGlvbk1hdHJpeC50b0FycmF5KHRydWUpO1xuICAgIHNoYWRlci51bmlmb3Jtcy5hbHBoYS52YWx1ZSA9IG1lc2gud29ybGRBbHBoYTtcblxuICAgIHNoYWRlci5zeW5jVW5pZm9ybXMoKTtcblxuICAgIGlmICghbWVzaC5kaXJ0eSlcbiAgICB7XG5cbiAgICAgICAgZ2wuYmluZEJ1ZmZlcihnbC5BUlJBWV9CVUZGRVIsIG1lc2guX3ZlcnRleEJ1ZmZlcik7XG4gICAgICAgIGdsLmJ1ZmZlclN1YkRhdGEoZ2wuQVJSQVlfQlVGRkVSLCAwLCBtZXNoLnZlcnRpY2VzKTtcbiAgICAgICAgZ2wudmVydGV4QXR0cmliUG9pbnRlcihzaGFkZXIuYXR0cmlidXRlcy5hVmVydGV4UG9zaXRpb24sIDIsIGdsLkZMT0FULCBmYWxzZSwgMCwgMCk7XG5cbiAgICAgICAgLy8gdXBkYXRlIHRoZSB1dnNcbiAgICAgICAgZ2wuYmluZEJ1ZmZlcihnbC5BUlJBWV9CVUZGRVIsIG1lc2guX3V2QnVmZmVyKTtcbiAgICAgICAgZ2wudmVydGV4QXR0cmliUG9pbnRlcihzaGFkZXIuYXR0cmlidXRlcy5hVGV4dHVyZUNvb3JkLCAyLCBnbC5GTE9BVCwgZmFsc2UsIDAsIDApO1xuXG5cbiAgICAgICAgZ2wuYWN0aXZlVGV4dHVyZShnbC5URVhUVVJFMCk7XG5cbiAgICAgICBpZiAoIXRleHR1cmUuX2dsVGV4dHVyZXNbZ2wuaWRdKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnJlbmRlcmVyLnVwZGF0ZVRleHR1cmUodGV4dHVyZSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgICAvLyBiaW5kIHRoZSBjdXJyZW50IHRleHR1cmVcbiAgICAgICAgICAgIGdsLmJpbmRUZXh0dXJlKGdsLlRFWFRVUkVfMkQsIHRleHR1cmUuX2dsVGV4dHVyZXNbZ2wuaWRdKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGdsLmJpbmRCdWZmZXIoZ2wuRUxFTUVOVF9BUlJBWV9CVUZGRVIsIG1lc2guX2luZGV4QnVmZmVyKTtcbiAgICAgICAgZ2wuYnVmZmVyU3ViRGF0YShnbC5FTEVNRU5UX0FSUkFZX0JVRkZFUiwgMCwgbWVzaC5pbmRpY2VzKTtcbiAgICB9XG4gICAgZWxzZVxuICAgIHtcblxuICAgICAgICBtZXNoLmRpcnR5ID0gZmFsc2U7XG4gICAgICAgIGdsLmJpbmRCdWZmZXIoZ2wuQVJSQVlfQlVGRkVSLCBtZXNoLl92ZXJ0ZXhCdWZmZXIpO1xuICAgICAgICBnbC5idWZmZXJEYXRhKGdsLkFSUkFZX0JVRkZFUiwgbWVzaC52ZXJ0aWNlcywgZ2wuU1RBVElDX0RSQVcpO1xuICAgICAgICBnbC52ZXJ0ZXhBdHRyaWJQb2ludGVyKHNoYWRlci5hdHRyaWJ1dGVzLmFWZXJ0ZXhQb3NpdGlvbiwgMiwgZ2wuRkxPQVQsIGZhbHNlLCAwLCAwKTtcblxuICAgICAgICAvLyB1cGRhdGUgdGhlIHV2c1xuICAgICAgICBnbC5iaW5kQnVmZmVyKGdsLkFSUkFZX0JVRkZFUiwgbWVzaC5fdXZCdWZmZXIpO1xuICAgICAgICBnbC5idWZmZXJEYXRhKGdsLkFSUkFZX0JVRkZFUiwgbWVzaC51dnMsIGdsLlNUQVRJQ19EUkFXKTtcbiAgICAgICAgZ2wudmVydGV4QXR0cmliUG9pbnRlcihzaGFkZXIuYXR0cmlidXRlcy5hVGV4dHVyZUNvb3JkLCAyLCBnbC5GTE9BVCwgZmFsc2UsIDAsIDApO1xuXG4gICAgICAgICBnbC5hY3RpdmVUZXh0dXJlKGdsLlRFWFRVUkUwKTtcblxuICAgICAgICBpZiAoIXRleHR1cmUuX2dsVGV4dHVyZXNbZ2wuaWRdKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnJlbmRlcmVyLnVwZGF0ZVRleHR1cmUodGV4dHVyZSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgICAvLyBiaW5kIHRoZSBjdXJyZW50IHRleHR1cmVcbiAgICAgICAgICAgIGdsLmJpbmRUZXh0dXJlKGdsLlRFWFRVUkVfMkQsIHRleHR1cmUuX2dsVGV4dHVyZXNbZ2wuaWRdKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGRvbnQgbmVlZCB0byB1cGxvYWQhXG4gICAgICAgIGdsLmJpbmRCdWZmZXIoZ2wuRUxFTUVOVF9BUlJBWV9CVUZGRVIsIG1lc2guX2luZGV4QnVmZmVyKTtcbiAgICAgICAgZ2wuYnVmZmVyRGF0YShnbC5FTEVNRU5UX0FSUkFZX0JVRkZFUiwgbWVzaC5pbmRpY2VzLCBnbC5TVEFUSUNfRFJBVyk7XG5cbiAgICB9XG5cbiAgICBnbC5kcmF3RWxlbWVudHMoZHJhd01vZGUsIG1lc2guaW5kaWNlcy5sZW5ndGgsIGdsLlVOU0lHTkVEX1NIT1JULCAwKTtcblxufTtcblxuLyoqXG4gKiBQcmVwYXJlcyBhbGwgdGhlIGJ1ZmZlcnMgdG8gcmVuZGVyIHRoaXMgbWVzaFxuICogQHBhcmFtIG1lc2gge1BJWEkubWVzaC5NZXNofSB0aGUgbWVzaCB0byByZW5kZXJcbiAqL1xuTWVzaFJlbmRlcmVyLnByb3RvdHlwZS5faW5pdFdlYkdMID0gZnVuY3Rpb24gKG1lc2gpXG57XG4gICAgLy8gYnVpbGQgdGhlIHN0cmlwIVxuICAgIHZhciBnbCA9IHRoaXMucmVuZGVyZXIuZ2w7XG5cbiAgICBtZXNoLl92ZXJ0ZXhCdWZmZXIgPSBnbC5jcmVhdGVCdWZmZXIoKTtcbiAgICBtZXNoLl9pbmRleEJ1ZmZlciA9IGdsLmNyZWF0ZUJ1ZmZlcigpO1xuICAgIG1lc2guX3V2QnVmZmVyID0gZ2wuY3JlYXRlQnVmZmVyKCk7XG5cblxuXG4gICAgZ2wuYmluZEJ1ZmZlcihnbC5BUlJBWV9CVUZGRVIsIG1lc2guX3ZlcnRleEJ1ZmZlcik7XG4gICAgZ2wuYnVmZmVyRGF0YShnbC5BUlJBWV9CVUZGRVIsIG1lc2gudmVydGljZXMsIGdsLkRZTkFNSUNfRFJBVyk7XG5cbiAgICBnbC5iaW5kQnVmZmVyKGdsLkFSUkFZX0JVRkZFUiwgbWVzaC5fdXZCdWZmZXIpO1xuICAgIGdsLmJ1ZmZlckRhdGEoZ2wuQVJSQVlfQlVGRkVSLCAgbWVzaC51dnMsIGdsLlNUQVRJQ19EUkFXKTtcblxuICAgIGlmKG1lc2guY29sb3JzKXtcbiAgICAgICAgbWVzaC5fY29sb3JCdWZmZXIgPSBnbC5jcmVhdGVCdWZmZXIoKTtcbiAgICAgICAgZ2wuYmluZEJ1ZmZlcihnbC5BUlJBWV9CVUZGRVIsIG1lc2guX2NvbG9yQnVmZmVyKTtcbiAgICAgICAgZ2wuYnVmZmVyRGF0YShnbC5BUlJBWV9CVUZGRVIsIG1lc2guY29sb3JzLCBnbC5TVEFUSUNfRFJBVyk7XG4gICAgfVxuXG4gICAgZ2wuYmluZEJ1ZmZlcihnbC5FTEVNRU5UX0FSUkFZX0JVRkZFUiwgbWVzaC5faW5kZXhCdWZmZXIpO1xuICAgIGdsLmJ1ZmZlckRhdGEoZ2wuRUxFTUVOVF9BUlJBWV9CVUZGRVIsIG1lc2guaW5kaWNlcywgZ2wuU1RBVElDX0RSQVcpO1xufTtcblxuXG4vKipcbiAqIEVtcHRpZXMgdGhlIGN1cnJlbnQgYmF0Y2guXG4gKlxuICovXG5NZXNoUmVuZGVyZXIucHJvdG90eXBlLmZsdXNoID0gZnVuY3Rpb24gKClcbntcblxufTtcblxuLyoqXG4gKiBTdGFydHMgYSBuZXcgbWVzaCByZW5kZXJlci5cbiAqXG4gKi9cbk1lc2hSZW5kZXJlci5wcm90b3R5cGUuc3RhcnQgPSBmdW5jdGlvbiAoKVxue1xuICAgIFxuXG4gICAgdGhpcy5jdXJyZW50U2hhZGVyID0gbnVsbDtcbn07XG5cbi8qKlxuICogRGVzdHJveXMgdGhlIE1lc2ggcmVuZGVyZXJcbiAqXG4gKi9cbk1lc2hSZW5kZXJlci5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uICgpXG57XG4gICAgY29yZS5PYmplY3RSZW5kZXJlci5wcm90b3R5cGUuZGVzdHJveS5jYWxsKHRoaXMpO1xufTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vLi4vY29yZScpO1xuXG4vKipcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5TaGFkZXJcbiAqIEBtZW1iZXJvZiBQSVhJLm1lc2hcbiAqIEBwYXJhbSBzaGFkZXJNYW5hZ2VyIHtQSVhJLlNoYWRlck1hbmFnZXJ9IFRoZSBXZWJHTCBzaGFkZXIgbWFuYWdlciB0aGlzIHNoYWRlciB3b3JrcyBmb3IuXG4gKi9cbmZ1bmN0aW9uIE1lc2hTaGFkZXIoc2hhZGVyTWFuYWdlcilcbntcbiAgICBjb3JlLlNoYWRlci5jYWxsKHRoaXMsXG4gICAgICAgIHNoYWRlck1hbmFnZXIsXG4gICAgICAgIC8vIHZlcnRleCBzaGFkZXJcbiAgICAgICAgW1xuICAgICAgICAgICAgJ3ByZWNpc2lvbiBsb3dwIGZsb2F0OycsXG4gICAgICAgICAgICAnYXR0cmlidXRlIHZlYzIgYVZlcnRleFBvc2l0aW9uOycsXG4gICAgICAgICAgICAnYXR0cmlidXRlIHZlYzIgYVRleHR1cmVDb29yZDsnLFxuXG4gICAgICAgICAgICAndW5pZm9ybSBtYXQzIHRyYW5zbGF0aW9uTWF0cml4OycsXG4gICAgICAgICAgICAndW5pZm9ybSBtYXQzIHByb2plY3Rpb25NYXRyaXg7JyxcblxuICAgICAgICAgICAgJ3ZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkOycsXG5cbiAgICAgICAgICAgICd2b2lkIG1haW4odm9pZCl7JyxcbiAgICAgICAgICAgICcgICBnbF9Qb3NpdGlvbiA9IHZlYzQoKHByb2plY3Rpb25NYXRyaXggKiB0cmFuc2xhdGlvbk1hdHJpeCAqIHZlYzMoYVZlcnRleFBvc2l0aW9uLCAxLjApKS54eSwgMC4wLCAxLjApOycsXG4gICAgICAgICAgICAnICAgdlRleHR1cmVDb29yZCA9IGFUZXh0dXJlQ29vcmQ7JyxcbiAgICAgICAgICAgICd9J1xuICAgICAgICBdLmpvaW4oJ1xcbicpLFxuICAgICAgICBbXG4gICAgICAgICAgICAncHJlY2lzaW9uIGxvd3AgZmxvYXQ7JyxcblxuICAgICAgICAgICAgJ3ZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkOycsXG4gICAgICAgICAgICAndW5pZm9ybSBmbG9hdCBhbHBoYTsnLFxuXG4gICAgICAgICAgICAndW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXI7JyxcblxuICAgICAgICAgICAgJ3ZvaWQgbWFpbih2b2lkKXsnLFxuICAgICAgICAgICAgJyAgIGdsX0ZyYWdDb2xvciA9IHRleHR1cmUyRCh1U2FtcGxlciwgdlRleHR1cmVDb29yZCkgKiBhbHBoYSA7JyxcbiAgICAgICAgICAgICd9J1xuICAgICAgICBdLmpvaW4oJ1xcbicpLFxuICAgICAgICAvLyBjdXN0b20gdW5pZm9ybXNcbiAgICAgICAge1xuICAgICAgICAgICAgYWxwaGE6ICB7IHR5cGU6ICcxZicsIHZhbHVlOiAwIH0sXG4gICAgICAgICAgICB0cmFuc2xhdGlvbk1hdHJpeDogeyB0eXBlOiAnbWF0MycsIHZhbHVlOiBuZXcgRmxvYXQzMkFycmF5KDkpIH0sXG4gICAgICAgICAgICBwcm9qZWN0aW9uTWF0cml4OiB7IHR5cGU6ICdtYXQzJywgdmFsdWU6IG5ldyBGbG9hdDMyQXJyYXkoOSkgfVxuICAgICAgICB9LFxuICAgICAgICAvLyBjdXN0b20gYXR0cmlidXRlc1xuICAgICAgICB7XG4gICAgICAgICAgICBhVmVydGV4UG9zaXRpb246MCxcbiAgICAgICAgICAgIGFUZXh0dXJlQ29vcmQ6MFxuICAgICAgICB9XG4gICAgKTtcbn1cblxuTWVzaFNoYWRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuU2hhZGVyLnByb3RvdHlwZSk7XG5NZXNoU2hhZGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IE1lc2hTaGFkZXI7XG5tb2R1bGUuZXhwb3J0cyA9IE1lc2hTaGFkZXI7XG5cbmNvcmUuU2hhZGVyTWFuYWdlci5yZWdpc3RlclBsdWdpbignbWVzaFNoYWRlcicsIE1lc2hTaGFkZXIpO1xuIiwiLy8gUmVmZXJlbmNlczpcbi8vIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0phdmFTY3JpcHQvUmVmZXJlbmNlL0dsb2JhbF9PYmplY3RzL01hdGgvc2lnblxuXG5pZiAoIU1hdGguc2lnbilcbntcbiAgICBNYXRoLnNpZ24gPSBmdW5jdGlvbiAoeCkge1xuICAgICAgICB4ID0gK3g7XG4gICAgICAgIGlmICh4ID09PSAwIHx8IGlzTmFOKHgpKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4geDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4geCA+IDAgPyAxIDogLTE7XG4gICAgfTtcbn1cbiIsIi8vIFJlZmVyZW5jZXM6XG4vLyBodHRwczovL2dpdGh1Yi5jb20vc2luZHJlc29yaHVzL29iamVjdC1hc3NpZ25cbi8vIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0phdmFTY3JpcHQvUmVmZXJlbmNlL0dsb2JhbF9PYmplY3RzL09iamVjdC9hc3NpZ25cblxuaWYgKCFPYmplY3QuYXNzaWduKVxue1xuICAgIE9iamVjdC5hc3NpZ24gPSByZXF1aXJlKCdvYmplY3QtYXNzaWduJyk7XG59XG4iLCJyZXF1aXJlKCcuL09iamVjdC5hc3NpZ24nKTtcbnJlcXVpcmUoJy4vcmVxdWVzdEFuaW1hdGlvbkZyYW1lJyk7XG5yZXF1aXJlKCcuL01hdGguc2lnbicpO1xuIiwiLy8gUmVmZXJlbmNlczpcbi8vIGh0dHA6Ly9wYXVsaXJpc2guY29tLzIwMTEvcmVxdWVzdGFuaW1hdGlvbmZyYW1lLWZvci1zbWFydC1hbmltYXRpbmcvXG4vLyBodHRwczovL2dpc3QuZ2l0aHViLmNvbS8xNTc5NjcxXG4vLyBodHRwOi8vdXBkYXRlcy5odG1sNXJvY2tzLmNvbS8yMDEyLzA1L3JlcXVlc3RBbmltYXRpb25GcmFtZS1BUEktbm93LXdpdGgtc3ViLW1pbGxpc2Vjb25kLXByZWNpc2lvblxuLy8gaHR0cHM6Ly9naXN0LmdpdGh1Yi5jb20vdGltaGFsbC80MDc4NjE0XG4vLyBodHRwczovL2dpdGh1Yi5jb20vRmluYW5jaWFsLVRpbWVzL3BvbHlmaWxsLXNlcnZpY2UvdHJlZS9tYXN0ZXIvcG9seWZpbGxzL3JlcXVlc3RBbmltYXRpb25GcmFtZVxuXG4vLyBFeHBlY3RlZCB0byBiZSB1c2VkIHdpdGggQnJvd3NlcmZpeVxuLy8gQnJvd3NlcmlmeSBhdXRvbWF0aWNhbGx5IGRldGVjdHMgdGhlIHVzZSBvZiBgZ2xvYmFsYCBhbmQgcGFzc2VzIHRoZVxuLy8gY29ycmVjdCByZWZlcmVuY2Ugb2YgYGdsb2JhbGAsIGBzZWxmYCwgYW5kIGZpbmFsbHkgYHdpbmRvd2BcblxuLy8gRGF0ZS5ub3dcbmlmICghKERhdGUubm93ICYmIERhdGUucHJvdG90eXBlLmdldFRpbWUpKSB7XG4gICAgRGF0ZS5ub3cgPSBmdW5jdGlvbiBub3coKSB7XG4gICAgICAgIHJldHVybiBuZXcgRGF0ZSgpLmdldFRpbWUoKTtcbiAgICB9O1xufVxuXG4vLyBwZXJmb3JtYW5jZS5ub3dcbmlmICghKGdsb2JhbC5wZXJmb3JtYW5jZSAmJiBnbG9iYWwucGVyZm9ybWFuY2Uubm93KSkge1xuICAgIHZhciBzdGFydFRpbWUgPSBEYXRlLm5vdygpO1xuICAgIGlmICghZ2xvYmFsLnBlcmZvcm1hbmNlKSB7XG4gICAgICAgIGdsb2JhbC5wZXJmb3JtYW5jZSA9IHt9O1xuICAgIH1cbiAgICBnbG9iYWwucGVyZm9ybWFuY2Uubm93ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gRGF0ZS5ub3coKSAtIHN0YXJ0VGltZTtcbiAgICB9O1xufVxuXG4vLyByZXF1ZXN0QW5pbWF0aW9uRnJhbWVcbnZhciBsYXN0VGltZSA9IERhdGUubm93KCk7XG52YXIgdmVuZG9ycyA9IFsnbXMnLCAnbW96JywgJ3dlYmtpdCcsICdvJ107XG5cbmZvcih2YXIgeCA9IDA7IHggPCB2ZW5kb3JzLmxlbmd0aCAmJiAhZ2xvYmFsLnJlcXVlc3RBbmltYXRpb25GcmFtZTsgKyt4KSB7XG4gICAgZ2xvYmFsLnJlcXVlc3RBbmltYXRpb25GcmFtZSA9IGdsb2JhbFt2ZW5kb3JzW3hdICsgJ1JlcXVlc3RBbmltYXRpb25GcmFtZSddO1xuICAgIGdsb2JhbC5jYW5jZWxBbmltYXRpb25GcmFtZSA9IGdsb2JhbFt2ZW5kb3JzW3hdICsgJ0NhbmNlbEFuaW1hdGlvbkZyYW1lJ10gfHxcbiAgICAgICAgZ2xvYmFsW3ZlbmRvcnNbeF0gKyAnQ2FuY2VsUmVxdWVzdEFuaW1hdGlvbkZyYW1lJ107XG59XG5cbmlmICghZ2xvYmFsLnJlcXVlc3RBbmltYXRpb25GcmFtZSkge1xuICAgIGdsb2JhbC5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUgPSBmdW5jdGlvbiAoY2FsbGJhY2spIHtcbiAgICAgICAgaWYgKHR5cGVvZiBjYWxsYmFjayAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihjYWxsYmFjayArICdpcyBub3QgYSBmdW5jdGlvbicpO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGN1cnJlbnRUaW1lID0gRGF0ZS5ub3coKSxcbiAgICAgICAgICAgIGRlbGF5ID0gMTYgKyBsYXN0VGltZSAtIGN1cnJlbnRUaW1lO1xuXG4gICAgICAgIGlmIChkZWxheSA8IDApIHtcbiAgICAgICAgICAgIGRlbGF5ID0gMDtcbiAgICAgICAgfVxuXG4gICAgICAgIGxhc3RUaW1lID0gY3VycmVudFRpbWU7XG5cbiAgICAgICAgcmV0dXJuIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgbGFzdFRpbWUgPSBEYXRlLm5vdygpO1xuICAgICAgICAgICAgY2FsbGJhY2socGVyZm9ybWFuY2Uubm93KCkpO1xuICAgICAgICB9LCBkZWxheSk7XG4gICAgfTtcbn1cblxuaWYgKCFnbG9iYWwuY2FuY2VsQW5pbWF0aW9uRnJhbWUpIHtcbiAgICBnbG9iYWwuY2FuY2VsQW5pbWF0aW9uRnJhbWUgPSBmdW5jdGlvbihpZCkge1xuICAgICAgICBjbGVhclRpbWVvdXQoaWQpO1xuICAgIH07XG59XG4iXX0= //# sourceMappingURL=pixi.js.map diff --git a/bin/pixi.min.js b/bin/pixi.min.js index f7a788e..d59cd98 100644 --- a/bin/pixi.min.js +++ b/bin/pixi.min.js @@ -1,11 +1,11 @@ -!function(t){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=t();else if("function"==typeof define&&define.amd)define([],t);else{var e;e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:this,e.PIXI=t()}}(function(){var t;return function e(t,r,i){function n(s,a){if(!r[s]){if(!t[s]){var h="function"==typeof require&&require;if(!a&&h)return h(s,!0);if(o)return o(s,!0);var u=new Error("Cannot find module '"+s+"'");throw u.code="MODULE_NOT_FOUND",u}var l=r[s]={exports:{}};t[s][0].call(l.exports,function(e){var r=t[s][1][e];return n(r?r:e)},l,l.exports,e,t,r,i)}return r[s].exports}for(var o="function"==typeof require&&require,s=0;s=t.byteLength?i.bufferSubData(this.type,e,t):i.bufferData(this.type,t,this.drawType),this.data=t},n.prototype.bind=function(){var t=this.gl;t.bindBuffer(this.type,this.buffer)},n.createVertexBuffer=function(t,e,r){return new n(t,t.ARRAY_BUFFER,e,r)},n.createIndexBuffer=function(t,e,r){return new n(t,t.ELEMENT_ARRAY_BUFFER,e,r)},n.create=function(t,e,r,i){return new n(t,e,i)},e.exports=n},{}],3:[function(t,e,r){var i=t("./GLTexture"),n=function(t,e,r){this.gl=t,this.framebuffer=t.createFramebuffer(),this.stencil=null,this.texture=null,this.width=e||100,this.height=r||100};n.prototype.enableTexture=function(t){var e=this.gl;this.texture=t||new i(e),this.texture.bind(),this.bind(),e.framebufferTexture2D(e.FRAMEBUFFER,e.COLOR_ATTACHMENT0,e.TEXTURE_2D,this.texture.texture,0)},n.prototype.enableStencil=function(){if(!this.stencil){var t=this.gl;this.stencil=t.createRenderbuffer(),t.bindRenderbuffer(t.RENDERBUFFER,this.stencil),t.framebufferRenderbuffer(t.FRAMEBUFFER,t.DEPTH_STENCIL_ATTACHMENT,t.RENDERBUFFER,this.stencil),t.renderbufferStorage(t.RENDERBUFFER,t.DEPTH_STENCIL,this.width,this.height)}},n.prototype.clear=function(t,e,r,i){this.bind();var n=this.gl;n.clearColor(t,e,r,i),n.clear(n.COLOR_BUFFER_BIT)},n.prototype.bind=function(){var t=this.gl;t.bindFramebuffer(t.FRAMEBUFFER,this.framebuffer)},n.prototype.unbind=function(){gl.bindFramebuffer(gl.FRAMEBUFFER,null)},n.prototype.resize=function(t,e){var r=this.gl;this.width=t,this.height=e,this.texture&&(this.texture.bind(),r.texImage2D(r.TEXTURE_2D,0,this.format,t,e,0,this.format,this.type,null)),this.stencil&&(r.bindRenderbuffer(r.RENDERBUFFER,this.stencil),r.renderbufferStorage(r.RENDERBUFFER,r.DEPTH_STENCIL,t,e))},n.prototype.destroy=function(){var t=this.gl;t.deleteFramebuffer(this.framebuffer)},n.createRGBA=function(t,e,r,o){var s=new i(t,e,r);s.enableNearestScaling(),s.enableWrapClamp(),t.texImage2D(t.TEXTURE_2D,0,t.RGBA,e,r,0,t.RGBA,t.UNSIGNED_BYTE,o);var a=new n(t,e,r);return a.enableTexture(s),a},n.createFloat32=function(t,e,r,o){var s=new i.fromData(t,o,e,r);s.enableNearestScaling(),s.enableWrapClamp();var a=new n(t,e,r);return a.enableTexture(s),a},e.exports=n},{"./GLTexture":5}],4:[function(t,e,r){var i=t("./shader/compileProgram"),n=t("./shader/extractAttributes"),o=t("./shader/extractUniforms"),s=t("./shader/generateUniformAccessObject"),a=function(t,e,r){this.gl=t,this.program=i(t,e,r),this.attributes=n(t,this.program);var a=o(t,this.program);this.uniforms=s(t,a)};a.prototype.bind=function(){this.gl.useProgram(this.program)},a.prototype.destroy=function(){this.gl},e.exports=a},{"./shader/compileProgram":9,"./shader/extractAttributes":11,"./shader/extractUniforms":12,"./shader/generateUniformAccessObject":13}],5:[function(t,e,r){var i=function(t,e,r,i,n){this.gl=t,this.texture=t.createTexture(),this.mipmap=!1,this.premultiplyAlpha=!1,this.width=e||0,this.height=r||0,this.format=i||t.RGBA,this.type=n||t.UNSIGNED_BYTE};i.prototype.upload=function(t){this.bind();var e=this.gl;this.width=t.width,this.height=t.height,e.pixelStorei(e.UNPACK_PREMULTIPLY_ALPHA_WEBGL,this.premultiplyAlpha),e.texImage2D(e.TEXTURE_2D,0,this.format,this.format,this.type,t)};var n=!1;i.prototype.uploadData=function(t,e,r){if(this.bind(),this.width=e||this.width,this.height=r||this.height,t instanceof Float32Array){if(!n){var i=gl.getExtension("OES_texture_float");if(!i)throw new Error("floating point textures not available");n=!0}this.type=gl.FLOAT}else this.type=gl.UNSIGNED_BYTE;gl.pixelStorei(gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL,this.premultiplyAlpha),gl.texImage2D(gl.TEXTURE_2D,0,this.format,this.width,this.height,0,this.format,this.type,t)},i.prototype.bind=function(t){var e=this.gl;void 0!==t&&e.activeTexture(e.TEXTURE0+t),e.bindTexture(e.TEXTURE_2D,this.texture)},i.prototype.unbind=function(){var t=this.gl;t.bindTexture(t.TEXTURE_2D,null)},i.prototype.minFilter=function(t){var e=this.gl;this.bind(),this.mipmap?e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MIN_FILTER,t?e.LINEAR_MIPMAP_LINEAR:e.NEAREST_MIPMAP_NEAREST):e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MIN_FILTER,t?e.LINEAR:e.NEAREST)},i.prototype.magFilter=function(t){var e=this.gl;this.bind(),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MAG_FILTER,t?e.LINEAR:e.NEAREST)},i.prototype.enableMipmap=function(){this.bind(),this.mipmap=!0,gl.generateMipmap(gl.TEXTURE_2D)},i.prototype.enableLinearScaling=function(){this.minFilter(!0),this.magFilter(!0)},i.prototype.enableNearestScaling=function(){this.minFilter(!1),this.magFilter(!1)},i.prototype.enableWrapClamp=function(){var t=this.gl;this.bind(),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_WRAP_S,t.CLAMP_TO_EDGE),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_WRAP_T,t.CLAMP_TO_EDGE)},i.prototype.enableWrapRepeat=function(){var t=this.gl;this.bind(),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_WRAP_S,t.REPEAT),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_WRAP_T,t.REPEAT)},i.prototype.destroy=function(){var t=this.gl;t.deleteTexture(this.texture)},i.fromSource=function(t,e,r){var n=new i(t);return n.premultiplyAlpha=r||!1,n.upload(e),n},i.fromData=function(t,e,r,n){var o=new i(t);return o.uploadData(e,r,n),o},e.exports=i},{}],6:[function(t,e,r){function i(t){this.nativeVaoExtension=t.getExtension("OES_vertex_array_object")||t.getExtension("MOZ_OES_vertex_array_object")||t.getExtension("WEBKIT_OES_vertex_array_object"),this.nativeVaoExtension&&(this.nativeVao=this.nativeVaoExtension.createVertexArrayOES()),this.gl=t,this.attributes=[],this.indexBuffer=null,this.dirty=!1}i.prototype.constructor=i,e.exports=i,i.prototype.bind=function(){this.nativeVao?(this.nativeVaoExtension.bindVertexArrayOES(this.nativeVao),this.dirty&&(this.dirty=!1,this.activate())):this.activate()},i.prototype.unbind=function(){this.nativeVao&&this.nativeVaoExtension.bindVertexArrayOES(null)},i.prototype.activate=function(){for(var t=this.gl,e=0;es;s++){var a=t.getActiveAttrib(e,s),h=i(t,a.type);r[a.name]={type:h,size:n(h),location:t.getAttribLocation(e,a.name),pointer:function(e,r,i,n){t.vertexAttribPointer(this.location,this.size,e||t.FLOAT,r||!1,i||0,n||0)}}}return r};e.exports=o},{"./mapSize":14,"./mapType":15}],12:[function(t,e,r){var i=t("./mapType"),n=t("./defaultValue"),o=function(t,e){for(var r={},o=t.getProgramParameter(e,t.ACTIVE_UNIFORMS),s=0;o>s;s++){var a=t.getActiveUniform(e,s),h=a.name.replace(/\[.*?\]/,""),u=i(t,a.type);r[h]={type:u,size:a.size,location:t.getUniformLocation(e,h),value:n(u,a.size)}}return r};e.exports=o},{"./defaultValue":10,"./mapType":15}],13:[function(t,e,r){var i=function(t,e){var r={data:{}};r.gl=t;for(var i=Object.keys(e),a=0;a=0&&t.length%1===0}function c(t,e){for(var r=-1,i=t.length;++ri?i:null}):(r=Y(t),e=r.length,function(){return i++,e>i?r[i]:null})}function y(t,e){return e=null==e?t.length-1:+e,function(){for(var r=Math.max(arguments.length-e,0),i=Array(r),n=0;r>n;n++)i[n]=arguments[n+e];switch(e){case 0:return t.call(this,i);case 1:return t.call(this,arguments[0],i)}}}function x(t){return function(e,r,i){return t(e,i)}}function b(t){return function(e,r,i){i=u(i||n),e=e||[];var o=m(e);if(0>=t)return i(null);var s=!1,a=0,l=!1;!function c(){if(s&&0>=a)return i(null);for(;t>a&&!l;){var n=o();if(null===n)return s=!0,void(0>=a&&i(null));a+=1,r(e[n],n,h(function(t){a-=1,t?(i(t),l=!0):c()}))}}()}}function _(t){return function(e,r,i){return t(N.eachOf,e,r,i)}}function T(t){return function(e,r,i,n){return t(b(r),e,i,n)}}function E(t){return function(e,r,i){return t(N.eachOfSeries,e,r,i)}}function S(t,e,r,i){i=u(i||n),e=e||[];var o=l(e)?[]:{};t(e,function(t,e,i){r(t,function(t,r){o[e]=r,i(t)})},function(t){i(t,o)})}function w(t,e,r,i){var n=[];t(e,function(t,e,i){r(t,function(r){r&&n.push({index:e,value:t}),i()})},function(){i(p(n.sort(function(t,e){return t.index-e.index}),function(t){return t.value}))})}function C(t,e,r,i){w(t,e,function(t,e){r(t,function(t){e(!t)})},i)}function A(t,e,r){return function(i,n,o,s){function a(){s&&s(r(!1,void 0))}function h(t,i,n){return s?void o(t,function(i){s&&e(i)&&(s(r(!0,t)),s=o=!1),n()}):n()}arguments.length>3?t(i,n,h,a):(s=o,o=n,t(i,h,a))}}function M(t,e){return e}function R(t,e,r){r=r||n;var i=l(e)?[]:{};t(e,function(t,e,r){t(y(function(t,n){n.length<=1&&(n=n[0]),i[e]=n,r(t)}))},function(t){r(t,i)})}function O(t,e,r,i){var n=[];t(e,function(t,e,i){r(t,function(t,e){n=n.concat(e||[]),i(t)})},function(t){i(t,n)})}function D(t,e,r){function i(t,e,r,i){if(null!=i&&"function"!=typeof i)throw new Error("task callback must be a function");return t.started=!0,j(e)||(e=[e]),0===e.length&&t.idle()?N.setImmediate(function(){t.drain()}):(c(e,function(e){var o={data:e,callback:i||n};r?t.tasks.unshift(o):t.tasks.push(o),t.tasks.length===t.concurrency&&t.saturated()}),void N.setImmediate(t.process))}function o(t,e){return function(){s-=1;var r=!1,i=arguments;c(e,function(t){c(a,function(e,i){e!==t||r||(a.splice(i,1),r=!0)}),t.callback.apply(t,i)}),t.tasks.length+s===0&&t.drain(),t.process()}}if(null==e)e=1;else if(0===e)throw new Error("Concurrency must not be zero");var s=0,a=[],u={tasks:[],concurrency:e,payload:r,saturated:n,empty:n,drain:n,started:!1,paused:!1,push:function(t,e){i(u,t,!1,e)},kill:function(){u.drain=n,u.tasks=[]},unshift:function(t,e){i(u,t,!0,e)},process:function(){if(!u.paused&&s=e;e++)N.setImmediate(u.process)}}};return u}function P(t){return y(function(e,r){e.apply(null,r.concat([y(function(e,r){"object"==typeof console&&(e?console.error&&console.error(e):console[t]&&c(r,function(e){console[t](e)}))})]))})}function F(t){return function(e,r,i){t(d(e),r,i)}}function L(t){return y(function(e,r){var i=y(function(r){var i=this,n=r.pop();return t(e,function(t,e,n){t.apply(i,r.concat([n]))},n)});return r.length?i.apply(this,r):i})}function B(t){return y(function(e){var r=e.pop();e.push(function(){var t=arguments;i?N.setImmediate(function(){r.apply(null,t)}):r.apply(null,t)});var i=!0;t.apply(this,e),i=!1})}var I,N={},U="object"==typeof self&&self.self===self&&self||"object"==typeof i&&i.global===i&&i||this;null!=U&&(I=U.async),N.noConflict=function(){return U.async=I,N};var k=Object.prototype.toString,j=Array.isArray||function(t){return"[object Array]"===k.call(t)},G=function(t){var e=typeof t;return"function"===e||"object"===e&&!!t},Y=Object.keys||function(t){var e=[];for(var r in t)t.hasOwnProperty(r)&&e.push(r);return e},X="function"==typeof setImmediate&&setImmediate,z=X?function(t){X(t)}:function(t){setTimeout(t,0)};"object"==typeof e&&"function"==typeof e.nextTick?N.nextTick=e.nextTick:N.nextTick=z,N.setImmediate=X?z:N.nextTick,N.forEach=N.each=function(t,e,r){return N.eachOf(t,x(e),r)},N.forEachSeries=N.eachSeries=function(t,e,r){return N.eachOfSeries(t,x(e),r)},N.forEachLimit=N.eachLimit=function(t,e,r,i){return b(e)(t,x(r),i)},N.forEachOf=N.eachOf=function(t,e,r){function i(t){a--,t?r(t):null===o&&0>=a&&r(null)}r=u(r||n),t=t||[];for(var o,s=m(t),a=0;null!=(o=s());)a+=1,e(t[o],o,h(i));0===a&&r(null)},N.forEachOfSeries=N.eachOfSeries=function(t,e,r){function i(){var n=!0;return null===s?r(null):(e(t[s],s,h(function(t){if(t)r(t);else{if(s=o(),null===s)return r(null);n?N.setImmediate(i):i()}})),void(n=!1))}r=u(r||n),t=t||[];var o=m(t),s=o();i()},N.forEachOfLimit=N.eachOfLimit=function(t,e,r,i){b(e)(t,r,i)},N.map=_(S),N.mapSeries=E(S),N.mapLimit=T(S),N.inject=N.foldl=N.reduce=function(t,e,r,i){N.eachOfSeries(t,function(t,i,n){r(e,t,function(t,r){e=r,n(t)})},function(t){i(t,e)})},N.foldr=N.reduceRight=function(t,e,r,i){var n=p(t,o).reverse();N.reduce(n,e,r,i)},N.transform=function(t,e,r,i){3===arguments.length&&(i=r,r=e,e=j(t)?[]:{}),N.eachOf(t,function(t,i,n){r(e,t,i,n)},function(t){i(t,e)})},N.select=N.filter=_(w),N.selectLimit=N.filterLimit=T(w),N.selectSeries=N.filterSeries=E(w),N.reject=_(C),N.rejectLimit=T(C),N.rejectSeries=E(C),N.any=N.some=A(N.eachOf,s,o),N.someLimit=A(N.eachOfLimit,s,o),N.all=N.every=A(N.eachOf,a,a),N.everyLimit=A(N.eachOfLimit,a,a),N.detect=A(N.eachOf,o,M),N.detectSeries=A(N.eachOfSeries,o,M),N.detectLimit=A(N.eachOfLimit,o,M),N.sortBy=function(t,e,r){function i(t,e){var r=t.criteria,i=e.criteria;return i>r?-1:r>i?1:0}N.map(t,function(t,r){e(t,function(e,i){e?r(e):r(null,{value:t,criteria:i})})},function(t,e){return t?r(t):void r(null,p(e.sort(i),function(t){return t.value}))})},N.auto=function(t,e,r){function i(t){d.unshift(t)}function o(t){var e=g(d,t);e>=0&&d.splice(e,1)}function s(){h--,c(d.slice(0),function(t){t()})}r||(r=e,e=null),r=u(r||n);var a=Y(t),h=a.length;if(!h)return r(null);e||(e=h);var l={},p=0,d=[];i(function(){h||r(null,l)}),c(a,function(n){function a(){return e>p&&f(m,function(t,e){return t&&l.hasOwnProperty(e)},!0)&&!l.hasOwnProperty(n)}function h(){a()&&(p++,o(h),c[c.length-1](d,l))}for(var u,c=j(t[n])?t[n]:[t[n]],d=y(function(t,e){if(p--,e.length<=1&&(e=e[0]),t){var i={};v(l,function(t,e){i[e]=t}),i[n]=e,r(t,i)}else l[n]=e,N.setImmediate(s)}),m=c.slice(0,c.length-1),x=m.length;x--;){if(!(u=t[m[x]]))throw new Error("Has inexistant dependency");if(j(u)&&g(u,n)>=0)throw new Error("Has cyclic dependencies")}a()?(p++,c[c.length-1](d,l)):i(h)})},N.retry=function(t,e,r){function i(t,e){if("number"==typeof e)t.times=parseInt(e,10)||o;else{if("object"!=typeof e)throw new Error("Unsupported argument type for 'times': "+typeof e);t.times=parseInt(e.times,10)||o,t.interval=parseInt(e.interval,10)||s}}function n(t,e){function r(t,r){return function(i){t(function(t,e){i(!t||r,{err:t,result:e})},e)}}function i(t){return function(e){setTimeout(function(){e(null)},t)}}for(;h.times;){var n=!(h.times-=1);a.push(r(h.task,n)),!n&&h.interval>0&&a.push(i(h.interval))}N.series(a,function(e,r){r=r[r.length-1],(t||h.callback)(r.err,r.result)})}var o=5,s=0,a=[],h={times:o,interval:s},u=arguments.length;if(1>u||u>3)throw new Error("Invalid arguments - must be either (task), (task, callback), (times, task) or (times, task, callback)");return 2>=u&&"function"==typeof t&&(r=e,e=t),"function"!=typeof t&&i(h,t),h.callback=r,h.task=e,h.callback?n():n},N.waterfall=function(t,e){function r(t){return y(function(i,n){if(i)e.apply(null,[i].concat(n));else{var o=t.next();o?n.push(r(o)):n.push(e),B(t).apply(null,n)}})}if(e=u(e||n),!j(t)){var i=new Error("First argument to waterfall must be an array of functions");return e(i)}return t.length?void r(N.iterator(t))():e()},N.parallel=function(t,e){R(N.eachOf,t,e)},N.parallelLimit=function(t,e,r){R(b(e),t,r)},N.series=function(t,e){R(N.eachOfSeries,t,e)},N.iterator=function(t){function e(r){function i(){return t.length&&t[r].apply(null,arguments),i.next()}return i.next=function(){return ri;){var o=i+(n-i+1>>>1);r(e,t[o])>=0?i=o:n=o-1}return i}function o(t,e,o,s){if(null!=s&&"function"!=typeof s)throw new Error("task callback must be a function");return t.started=!0,j(e)||(e=[e]),0===e.length?N.setImmediate(function(){t.drain()}):void c(e,function(e){var a={data:e,priority:o,callback:"function"==typeof s?s:n};t.tasks.splice(i(t.tasks,a,r)+1,0,a),t.tasks.length===t.concurrency&&t.saturated(),N.setImmediate(t.process)})}var s=N.queue(t,e);return s.push=function(t,e,r){o(s,t,e,r)},delete s.unshift,s},N.cargo=function(t,e){return D(t,1,e)},N.log=P("log"),N.dir=P("dir"),N.memoize=function(t,e){var r={},i={};e=e||o;var n=y(function(n){var o=n.pop(),s=e.apply(null,n);s in r?N.setImmediate(function(){o.apply(null,r[s])}):s in i?i[s].push(o):(i[s]=[o],t.apply(null,n.concat([y(function(t){r[s]=t;var e=i[s];delete i[s];for(var n=0,o=e.length;o>n;n++)e[n].apply(null,t)})])))});return n.memo=r,n.unmemoized=t,n},N.unmemoize=function(t){return function(){return(t.unmemoized||t).apply(null,arguments)}},N.times=F(N.map),N.timesSeries=F(N.mapSeries),N.timesLimit=function(t,e,r,i){return N.mapLimit(d(t),e,r,i)},N.seq=function(){var t=arguments;return y(function(e){var r=this,i=e[e.length-1];"function"==typeof i?e.pop():i=n,N.reduce(t,e,function(t,e,i){e.apply(r,t.concat([y(function(t,e){i(t,e)})]))},function(t,e){i.apply(r,[t].concat(e))})})},N.compose=function(){return N.seq.apply(null,Array.prototype.reverse.call(arguments))},N.applyEach=L(N.eachOf),N.applyEachSeries=L(N.eachOfSeries),N.forever=function(t,e){function r(t){return t?i(t):void o(r)}var i=h(e||n),o=B(t);r()},N.ensureAsync=B,N.constant=y(function(t){var e=[null].concat(t);return function(t){return t.apply(this,e)}}),N.wrapSync=N.asyncify=function(t){return y(function(e){var r,i=e.pop();try{r=t.apply(this,e)}catch(n){return i(n)}G(r)&&"function"==typeof r.then?r.then(function(t){i(null,t)})["catch"](function(t){i(t.message?t:new Error(t))}):i(null,r)})},"object"==typeof r&&r.exports?r.exports=N:"function"==typeof t&&t.amd?t([],function(){return N}):U.async=N}()}).call(this,e("_process"),"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{_process:18}],17:[function(t,e,r){(function(t){function e(t,e){for(var r=0,i=t.length-1;i>=0;i--){var n=t[i];"."===n?t.splice(i,1):".."===n?(t.splice(i,1),r++):r&&(t.splice(i,1),r--)}if(e)for(;r--;r)t.unshift("..");return t}function i(t,e){if(t.filter)return t.filter(e);for(var r=[],i=0;i=-1&&!n;o--){var s=o>=0?arguments[o]:t.cwd();if("string"!=typeof s)throw new TypeError("Arguments to path.resolve must be strings");s&&(r=s+"/"+r,n="/"===s.charAt(0))}return r=e(i(r.split("/"),function(t){return!!t}),!n).join("/"),(n?"/":"")+r||"."},r.normalize=function(t){var n=r.isAbsolute(t),o="/"===s(t,-1);return t=e(i(t.split("/"),function(t){return!!t}),!n).join("/"),t||n||(t="."),t&&o&&(t+="/"),(n?"/":"")+t},r.isAbsolute=function(t){return"/"===t.charAt(0)},r.join=function(){var t=Array.prototype.slice.call(arguments,0);return r.normalize(i(t,function(t,e){if("string"!=typeof t)throw new TypeError("Arguments to path.join must be strings");return t}).join("/"))},r.relative=function(t,e){function i(t){for(var e=0;e=0&&""===t[r];r--);return e>r?[]:t.slice(e,r-e+1)}t=r.resolve(t).substr(1),e=r.resolve(e).substr(1);for(var n=i(t.split("/")),o=i(e.split("/")),s=Math.min(n.length,o.length),a=s,h=0;s>h;h++)if(n[h]!==o[h]){a=h;break}for(var u=[],h=a;he&&(e=t.length+e),t.substr(e,r)}}).call(this,t("_process"))},{_process:18}],18:[function(t,e,r){function i(){l=!1,a.length?u=a.concat(u):c=-1,u.length&&n()}function n(){if(!l){var t=setTimeout(i);l=!0;for(var e=u.length;e;){for(a=u,u=[];++c1)for(var r=1;r1&&(i=r[0]+"@",t=r[1]),t=t.replace(F,".");var n=t.split("."),o=s(n,e).join(".");return i+o}function h(t){for(var e,r,i=[],n=0,o=t.length;o>n;)e=t.charCodeAt(n++),e>=55296&&56319>=e&&o>n?(r=t.charCodeAt(n++),56320==(64512&r)?i.push(((1023&e)<<10)+(1023&r)+65536):(i.push(e),n--)):i.push(e);return i}function u(t){return s(t,function(t){var e="";return t>65535&&(t-=65536,e+=N(t>>>10&1023|55296),t=56320|1023&t),e+=N(t)}).join("")}function l(t){return 10>t-48?t-22:26>t-65?t-65:26>t-97?t-97:E}function c(t,e){return t+22+75*(26>t)-((0!=e)<<5)}function p(t,e,r){var i=0;for(t=r?I(t/A):t>>1,t+=I(t/e);t>B*w>>1;i+=E)t=I(t/B);return I(i+(B+1)*t/(t+C))}function d(t){var e,r,i,n,s,a,h,c,d,f,v=[],g=t.length,m=0,y=R,x=M;for(r=t.lastIndexOf(O),0>r&&(r=0),i=0;r>i;++i)t.charCodeAt(i)>=128&&o("not-basic"),v.push(t.charCodeAt(i));for(n=r>0?r+1:0;g>n;){for(s=m,a=1,h=E;n>=g&&o("invalid-input"),c=l(t.charCodeAt(n++)),(c>=E||c>I((T-m)/a))&&o("overflow"),m+=c*a,d=x>=h?S:h>=x+w?w:h-x,!(d>c);h+=E)f=E-d,a>I(T/f)&&o("overflow"),a*=f;e=v.length+1,x=p(m-s,e,0==s),I(m/e)>T-y&&o("overflow"),y+=I(m/e),m%=e,v.splice(m++,0,y)}return u(v)}function f(t){var e,r,i,n,s,a,u,l,d,f,v,g,m,y,x,b=[];for(t=h(t),g=t.length,e=R,r=0,s=M,a=0;g>a;++a)v=t[a],128>v&&b.push(N(v));for(i=n=b.length,n&&b.push(O);g>i;){for(u=T,a=0;g>a;++a)v=t[a],v>=e&&u>v&&(u=v);for(m=i+1,u-e>I((T-r)/m)&&o("overflow"),r+=(u-e)*m,e=u,a=0;g>a;++a)if(v=t[a],e>v&&++r>T&&o("overflow"),v==e){for(l=r,d=E;f=s>=d?S:d>=s+w?w:d-s,!(f>l);d+=E)x=l-f,y=E-f,b.push(N(c(f+x%y,0))),l=I(x/y);b.push(N(c(l,0))),s=p(r,m,i==n),r=0,++i}++r,++e}return b.join("")}function v(t){return a(t,function(t){return D.test(t)?d(t.slice(4).toLowerCase()):t})}function g(t){return a(t,function(t){return P.test(t)?"xn--"+f(t):t})}var m="object"==typeof i&&i&&!i.nodeType&&i,y="object"==typeof r&&r&&!r.nodeType&&r,x="object"==typeof e&&e;(x.global===x||x.window===x||x.self===x)&&(n=x);var b,_,T=2147483647,E=36,S=1,w=26,C=38,A=700,M=72,R=128,O="-",D=/^xn--/,P=/[^\x20-\x7E]/,F=/[\x2E\u3002\uFF0E\uFF61]/g,L={overflow:"Overflow: input needs wider integers to process","not-basic":"Illegal input >= 0x80 (not a basic code point)","invalid-input":"Invalid input"},B=E-S,I=Math.floor,N=String.fromCharCode;if(b={version:"1.3.2",ucs2:{decode:h,encode:u},decode:d,encode:f,toASCII:g,toUnicode:v},"function"==typeof t&&"object"==typeof t.amd&&t.amd)t("punycode",function(){return b});else if(m&&y)if(r.exports==m)y.exports=b;else for(_ in b)b.hasOwnProperty(_)&&(m[_]=b[_]);else n.punycode=b}(this)}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{}],20:[function(t,e,r){"use strict";function i(t,e){return Object.prototype.hasOwnProperty.call(t,e)}e.exports=function(t,e,r,o){e=e||"&",r=r||"=";var s={};if("string"!=typeof t||0===t.length)return s;var a=/\+/g;t=t.split(e);var h=1e3;o&&"number"==typeof o.maxKeys&&(h=o.maxKeys);var u=t.length;h>0&&u>h&&(u=h);for(var l=0;u>l;++l){var c,p,d,f,v=t[l].replace(a,"%20"),g=v.indexOf(r);g>=0?(c=v.substr(0,g),p=v.substr(g+1)):(c=v, -p=""),d=decodeURIComponent(c),f=decodeURIComponent(p),i(s,d)?n(s[d])?s[d].push(f):s[d]=[s[d],f]:s[d]=f}return s};var n=Array.isArray||function(t){return"[object Array]"===Object.prototype.toString.call(t)}},{}],21:[function(t,e,r){"use strict";function i(t,e){if(t.map)return t.map(e);for(var r=[],i=0;i",'"',"`"," ","\r","\n"," "],g=["{","}","|","\\","^","`"].concat(v),m=["'"].concat(g),y=["%","/","?",";","#"].concat(m),x=["/","?","#"],b=255,_=/^[a-z0-9A-Z_-]{0,63}$/,T=/^([a-z0-9A-Z_-]{0,63})(.*)$/,E={javascript:!0,"javascript:":!0},S={javascript:!0,"javascript:":!0},w={http:!0,https:!0,ftp:!0,gopher:!0,file:!0,"http:":!0,"https:":!0,"ftp:":!0,"gopher:":!0,"file:":!0},C=t("querystring");i.prototype.parse=function(t,e,r){if(!h(t))throw new TypeError("Parameter 'url' must be a string, not "+typeof t);var i=t;i=i.trim();var n=d.exec(i);if(n){n=n[0];var o=n.toLowerCase();this.protocol=o,i=i.substr(n.length)}if(r||n||i.match(/^\/\/[^@\/]+@[^@\/]+/)){var s="//"===i.substr(0,2);!s||n&&S[n]||(i=i.substr(2),this.slashes=!0)}if(!S[n]&&(s||n&&!w[n])){for(var a=-1,u=0;ul)&&(a=l)}var c,f;f=-1===a?i.lastIndexOf("@"):i.lastIndexOf("@",a),-1!==f&&(c=i.slice(0,f),i=i.slice(f+1),this.auth=decodeURIComponent(c)),a=-1;for(var u=0;ul)&&(a=l)}-1===a&&(a=i.length),this.host=i.slice(0,a),i=i.slice(a),this.parseHost(),this.hostname=this.hostname||"";var v="["===this.hostname[0]&&"]"===this.hostname[this.hostname.length-1];if(!v)for(var g=this.hostname.split(/\./),u=0,A=g.length;A>u;u++){var M=g[u];if(M&&!M.match(_)){for(var R="",O=0,D=M.length;D>O;O++)R+=M.charCodeAt(O)>127?"x":M[O];if(!R.match(_)){var P=g.slice(0,u),F=g.slice(u+1),L=M.match(T);L&&(P.push(L[1]),F.unshift(L[2])),F.length&&(i="/"+F.join(".")+i),this.hostname=P.join(".");break}}}if(this.hostname.length>b?this.hostname="":this.hostname=this.hostname.toLowerCase(),!v){for(var B=this.hostname.split("."),I=[],u=0;uu;u++){var j=m[u],G=encodeURIComponent(j);G===j&&(G=escape(j)),i=i.split(j).join(G)}var Y=i.indexOf("#");-1!==Y&&(this.hash=i.substr(Y),i=i.slice(0,Y));var X=i.indexOf("?");if(-1!==X?(this.search=i.substr(X),this.query=i.substr(X+1),e&&(this.query=C.parse(this.query)),i=i.slice(0,X)):e&&(this.search="",this.query={}),i&&(this.pathname=i),w[o]&&this.hostname&&!this.pathname&&(this.pathname="/"),this.pathname||this.search){var U=this.pathname||"",N=this.search||"";this.path=U+N}return this.href=this.format(),this},i.prototype.format=function(){var t=this.auth||"";t&&(t=encodeURIComponent(t),t=t.replace(/%3A/i,":"),t+="@");var e=this.protocol||"",r=this.pathname||"",i=this.hash||"",n=!1,o="";this.host?n=t+this.host:this.hostname&&(n=t+(-1===this.hostname.indexOf(":")?this.hostname:"["+this.hostname+"]"),this.port&&(n+=":"+this.port)),this.query&&u(this.query)&&Object.keys(this.query).length&&(o=C.stringify(this.query));var s=this.search||o&&"?"+o||"";return e&&":"!==e.substr(-1)&&(e+=":"),this.slashes||(!e||w[e])&&n!==!1?(n="//"+(n||""),r&&"/"!==r.charAt(0)&&(r="/"+r)):n||(n=""),i&&"#"!==i.charAt(0)&&(i="#"+i),s&&"?"!==s.charAt(0)&&(s="?"+s),r=r.replace(/[?#]/g,function(t){return encodeURIComponent(t)}),s=s.replace("#","%23"),e+n+r+s+i},i.prototype.resolve=function(t){return this.resolveObject(n(t,!1,!0)).format()},i.prototype.resolveObject=function(t){if(h(t)){var e=new i;e.parse(t,!1,!0),t=e}var r=new i;if(Object.keys(this).forEach(function(t){r[t]=this[t]},this),r.hash=t.hash,""===t.href)return r.href=r.format(),r;if(t.slashes&&!t.protocol)return Object.keys(t).forEach(function(e){"protocol"!==e&&(r[e]=t[e])}),w[r.protocol]&&r.hostname&&!r.pathname&&(r.path=r.pathname="/"),r.href=r.format(),r;if(t.protocol&&t.protocol!==r.protocol){if(!w[t.protocol])return Object.keys(t).forEach(function(e){r[e]=t[e]}),r.href=r.format(),r;if(r.protocol=t.protocol,t.host||S[t.protocol])r.pathname=t.pathname;else{for(var n=(t.pathname||"").split("/");n.length&&!(t.host=n.shift()););t.host||(t.host=""),t.hostname||(t.hostname=""),""!==n[0]&&n.unshift(""),n.length<2&&n.unshift(""),r.pathname=n.join("/")}if(r.search=t.search,r.query=t.query,r.host=t.host||"",r.auth=t.auth,r.hostname=t.hostname||t.host,r.port=t.port,r.pathname||r.search){var o=r.pathname||"",s=r.search||"";r.path=o+s}return r.slashes=r.slashes||t.slashes,r.href=r.format(),r}var a=r.pathname&&"/"===r.pathname.charAt(0),u=t.host||t.pathname&&"/"===t.pathname.charAt(0),p=u||a||r.host&&t.pathname,d=p,f=r.pathname&&r.pathname.split("/")||[],n=t.pathname&&t.pathname.split("/")||[],v=r.protocol&&!w[r.protocol];if(v&&(r.hostname="",r.port=null,r.host&&(""===f[0]?f[0]=r.host:f.unshift(r.host)),r.host="",t.protocol&&(t.hostname=null,t.port=null,t.host&&(""===n[0]?n[0]=t.host:n.unshift(t.host)),t.host=null),p=p&&(""===n[0]||""===f[0])),u)r.host=t.host||""===t.host?t.host:r.host,r.hostname=t.hostname||""===t.hostname?t.hostname:r.hostname,r.search=t.search,r.query=t.query,f=n;else if(n.length)f||(f=[]),f.pop(),f=f.concat(n),r.search=t.search,r.query=t.query;else if(!c(t.search)){if(v){r.hostname=r.host=f.shift();var g=r.host&&r.host.indexOf("@")>0?r.host.split("@"):!1;g&&(r.auth=g.shift(),r.host=r.hostname=g.shift())}return r.search=t.search,r.query=t.query,l(r.pathname)&&l(r.search)||(r.path=(r.pathname?r.pathname:"")+(r.search?r.search:"")),r.href=r.format(),r}if(!f.length)return r.pathname=null,r.search?r.path="/"+r.search:r.path=null,r.href=r.format(),r;for(var m=f.slice(-1)[0],y=(r.host||t.host)&&("."===m||".."===m)||""===m,x=0,b=f.length;b>=0;b--)m=f[b],"."==m?f.splice(b,1):".."===m?(f.splice(b,1),x++):x&&(f.splice(b,1),x--);if(!p&&!d)for(;x--;x)f.unshift("..");!p||""===f[0]||f[0]&&"/"===f[0].charAt(0)||f.unshift(""),y&&"/"!==f.join("/").substr(-1)&&f.push("");var _=""===f[0]||f[0]&&"/"===f[0].charAt(0);if(v){r.hostname=r.host=_?"":f.length?f.shift():"";var g=r.host&&r.host.indexOf("@")>0?r.host.split("@"):!1;g&&(r.auth=g.shift(),r.host=r.hostname=g.shift())}return p=p||r.host&&f.length,p&&!_&&f.unshift(""),f.length?r.pathname=f.join("/"):(r.pathname=null,r.path=null),l(r.pathname)&&l(r.search)||(r.path=(r.pathname?r.pathname:"")+(r.search?r.search:"")),r.auth=t.auth||r.auth,r.slashes=r.slashes||t.slashes,r.href=r.format(),r},i.prototype.parseHost=function(){var t=this.host,e=f.exec(t);e&&(e=e[0],":"!==e&&(this.port=e.substr(1)),t=t.substr(0,t.length-e.length)),t&&(this.hostname=t)}},{punycode:19,querystring:22}],24:[function(t,e,r){"use strict";function i(t,e,r){r=r||2;var i=e&&e.length,o=i?e[0]*r:t.length,a=n(t,0,o,r,!0),h=[];if(!a)return h;var u,l,p,d,f,v,g;if(i&&(a=c(t,e,a,r)),t.length>80*r){u=p=t[0],l=d=t[1];for(var m=r;o>m;m+=r)f=t[m],v=t[m+1],u>f&&(u=f),l>v&&(l=v),f>p&&(p=f),v>d&&(d=v);g=Math.max(p-u,d-l)}return s(a,h,r,u,l,g),h}function n(t,e,r,i,n){var o,s,a,h=0;for(o=e,s=r-i;r>o;o+=i)h+=(t[s]-t[o])*(t[o+1]+t[s+1]),s=o;if(n===h>0)for(o=e;r>o;o+=i)a=M(o,t[o],t[o+1],a);else for(o=r-i;o>=e;o-=i)a=M(o,t[o],t[o+1],a);return a}function o(t,e){if(!t)return t;e||(e=t);var r,i=t;do if(r=!1,i.steiner||!T(i,i.next)&&0!==_(i.prev,i,i.next))i=i.next;else{if(R(i),i=e=i.prev,i===i.next)return null;r=!0}while(r||i!==e);return e}function s(t,e,r,i,n,c,p){if(t){!p&&c&&v(t,i,n,c);for(var d,f,g=t;t.prev!==t.next;)if(d=t.prev,f=t.next,c?h(t,i,n,c):a(t))e.push(d.i/r),e.push(t.i/r),e.push(f.i/r),R(t),t=f.next,g=f.next;else if(t=f,t===g){p?1===p?(t=u(t,e,r),s(t,e,r,i,n,c,2)):2===p&&l(t,e,r,i,n,c):s(o(t),e,r,i,n,c,1);break}}}function a(t){var e=t.prev,r=t,i=t.next;if(_(e,r,i)>=0)return!1;for(var n=t.next.next;n!==t.prev;){if(x(e.x,e.y,r.x,r.y,i.x,i.y,n.x,n.y)&&_(n.prev,n,n.next)>=0)return!1;n=n.next}return!0}function h(t,e,r,i){var n=t.prev,o=t,s=t.next;if(_(n,o,s)>=0)return!1;for(var a=n.xo.x?n.x>s.x?n.x:s.x:o.x>s.x?o.x:s.x,l=n.y>o.y?n.y>s.y?n.y:s.y:o.y>s.y?o.y:s.y,c=m(a,h,e,r,i),p=m(u,l,e,r,i),d=t.nextZ;d&&d.z<=p;){if(d!==t.prev&&d!==t.next&&x(n.x,n.y,o.x,o.y,s.x,s.y,d.x,d.y)&&_(d.prev,d,d.next)>=0)return!1;d=d.nextZ}for(d=t.prevZ;d&&d.z>=c;){if(d!==t.prev&&d!==t.next&&x(n.x,n.y,o.x,o.y,s.x,s.y,d.x,d.y)&&_(d.prev,d,d.next)>=0)return!1;d=d.prevZ}return!0}function u(t,e,r){var i=t;do{var n=i.prev,o=i.next.next;E(n,i,i.next,o)&&w(n,o)&&w(o,n)&&(e.push(n.i/r),e.push(i.i/r),e.push(o.i/r),R(i),R(i.next),i=t=o),i=i.next}while(i!==t);return i}function l(t,e,r,i,n,a){var h=t;do{for(var u=h.next.next;u!==h.prev;){if(h.i!==u.i&&b(h,u)){var l=A(h,u);return h=o(h,h.next),l=o(l,l.next),s(h,e,r,i,n,a),void s(l,e,r,i,n,a)}u=u.next}h=h.next}while(h!==t)}function c(t,e,r,i){var s,a,h,u,l,c=[];for(s=0,a=e.length;a>s;s++)h=e[s]*i,u=a-1>s?e[s+1]*i:t.length,l=n(t,h,u,i,!1),l===l.next&&(l.steiner=!0),c.push(y(l));for(c.sort(p),s=0;s=i.next.y){var a=i.x+(o-i.y)*(i.next.x-i.x)/(i.next.y-i.y);n>=a&&a>s&&(s=a,r=i.x=i.x&&i.x>=r.x&&x(oh||h===l&&i.x>r.x)&&w(i,t)&&(r=i,l=h)),i=i.next;return r}function v(t,e,r,i){var n=t;do null===n.z&&(n.z=m(n.x,n.y,e,r,i)),n.prevZ=n.prev,n.nextZ=n.next,n=n.next;while(n!==t);n.prevZ.nextZ=null,n.prevZ=null,g(n)}function g(t){var e,r,i,n,o,s,a,h,u=1;do{for(r=t,t=null,o=null,s=0;r;){for(s++,i=r,a=0,e=0;u>e&&(a++,i=i.nextZ,i);e++);for(h=u;a>0||h>0&&i;)0===a?(n=i,i=i.nextZ,h--):0!==h&&i?r.z<=i.z?(n=r,r=r.nextZ,a--):(n=i,i=i.nextZ,h--):(n=r,r=r.nextZ,a--),o?o.nextZ=n:t=n,n.prevZ=o,o=n;r=i}o.nextZ=null,u*=2}while(s>1);return t}function m(t,e,r,i,n){return t=32767*(t-r)/n,e=32767*(e-i)/n,t=16711935&(t|t<<8),t=252645135&(t|t<<4),t=858993459&(t|t<<2),t=1431655765&(t|t<<1),e=16711935&(e|e<<8),e=252645135&(e|e<<4),e=858993459&(e|e<<2),e=1431655765&(e|e<<1),t|e<<1}function y(t){var e=t,r=t;do e.x=0&&(t-s)*(i-a)-(r-s)*(e-a)>=0&&(r-s)*(o-a)-(n-s)*(i-a)>=0}function b(t,e){return T(t,e)||t.next.i!==e.i&&t.prev.i!==e.i&&!S(t,e)&&w(t,e)&&w(e,t)&&C(t,e)}function _(t,e,r){return(e.y-t.y)*(r.x-e.x)-(e.x-t.x)*(r.y-e.y)}function T(t,e){return t.x===e.x&&t.y===e.y}function E(t,e,r,i){return _(t,e,r)>0!=_(t,e,i)>0&&_(r,i,t)>0!=_(r,i,e)>0}function S(t,e){var r=t;do{if(r.i!==t.i&&r.next.i!==t.i&&r.i!==e.i&&r.next.i!==e.i&&E(r,r.next,t,e))return!0;r=r.next}while(r!==t);return!1}function w(t,e){return _(t.prev,t,t.next)<0?_(t,e,t.next)>=0&&_(t,t.prev,e)>=0:_(t,e,t.prev)<0||_(t,t.next,e)<0}function C(t,e){var r=t,i=!1,n=(t.x+e.x)/2,o=(t.y+e.y)/2;do r.y>o!=r.next.y>o&&n<(r.next.x-r.x)*(o-r.y)/(r.next.y-r.y)+r.x&&(i=!i),r=r.next;while(r!==t);return i}function A(t,e){var r=new O(t.i,t.x,t.y),i=new O(e.i,e.x,e.y),n=t.next,o=e.prev;return t.next=e,e.prev=t,r.next=n,n.prev=r,i.next=r,r.prev=i,o.next=i,i.prev=o,i}function M(t,e,r,i){var n=new O(t,e,r);return i?(n.next=i.next,n.prev=i,i.next.prev=n,i.next=n):(n.prev=n,n.next=n),n}function R(t){t.next.prev=t.prev,t.prev.next=t.next,t.prevZ&&(t.prevZ.nextZ=t.nextZ),t.nextZ&&(t.nextZ.prevZ=t.prevZ)}function O(t,e,r){this.i=t,this.x=e,this.y=r,this.prev=null,this.next=null,this.z=null,this.prevZ=null,this.nextZ=null,this.steiner=!1}e.exports=i},{}],25:[function(t,e,r){"use strict";function i(t,e,r){this.fn=t,this.context=e,this.once=r||!1}function n(){}var o="function"!=typeof Object.create?"~":!1;n.prototype._events=void 0,n.prototype.listeners=function(t,e){var r=o?o+t:t,i=this._events&&this._events[r];if(e)return!!i;if(!i)return[];if(i.fn)return[i.fn];for(var n=0,s=i.length,a=new Array(s);s>n;n++)a[n]=i[n].fn;return a},n.prototype.emit=function(t,e,r,i,n,s){var a=o?o+t:t;if(!this._events||!this._events[a])return!1;var h,u,l=this._events[a],c=arguments.length;if("function"==typeof l.fn){switch(l.once&&this.removeListener(t,l.fn,void 0,!0),c){case 1:return l.fn.call(l.context),!0;case 2:return l.fn.call(l.context,e),!0;case 3:return l.fn.call(l.context,e,r),!0;case 4:return l.fn.call(l.context,e,r,i),!0;case 5:return l.fn.call(l.context,e,r,i,n),!0;case 6:return l.fn.call(l.context,e,r,i,n,s),!0}for(u=1,h=new Array(c-1);c>u;u++)h[u-1]=arguments[u];l.fn.apply(l.context,h)}else{var p,d=l.length;for(u=0;d>u;u++)switch(l[u].once&&this.removeListener(t,l[u].fn,void 0,!0),c){case 1:l[u].fn.call(l[u].context);break;case 2:l[u].fn.call(l[u].context,e);break;case 3:l[u].fn.call(l[u].context,e,r);break;default:if(!h)for(p=1,h=new Array(c-1);c>p;p++)h[p-1]=arguments[p];l[u].fn.apply(l[u].context,h)}}return!0},n.prototype.on=function(t,e,r){var n=new i(e,r||this),s=o?o+t:t;return this._events||(this._events=o?{}:Object.create(null)),this._events[s]?this._events[s].fn?this._events[s]=[this._events[s],n]:this._events[s].push(n):this._events[s]=n,this},n.prototype.once=function(t,e,r){var n=new i(e,r||this,!0),s=o?o+t:t;return this._events||(this._events=o?{}:Object.create(null)),this._events[s]?this._events[s].fn?this._events[s]=[this._events[s],n]:this._events[s].push(n):this._events[s]=n,this},n.prototype.removeListener=function(t,e,r,i){var n=o?o+t:t;if(!this._events||!this._events[n])return this;var s=this._events[n],a=[];if(e)if(s.fn)(s.fn!==e||i&&!s.once||r&&s.context!==r)&&a.push(s);else for(var h=0,u=s.length;u>h;h++)(s[h].fn!==e||i&&!s[h].once||r&&s[h].context!==r)&&a.push(s[h]);return a.length?this._events[n]=1===a.length?a[0]:a:delete this._events[n],this},n.prototype.removeAllListeners=function(t){return this._events?(t?delete this._events[o?o+t:t]:this._events=o?{}:Object.create(null),this):this},n.prototype.off=n.prototype.removeListener,n.prototype.addListener=n.prototype.on,n.prototype.setMaxListeners=function(){return this},n.prefixed=o,"undefined"!=typeof e&&(e.exports=n)},{}],26:[function(t,e,r){"use strict";function i(t){if(null===t||void 0===t)throw new TypeError("Object.assign cannot be called with null or undefined");return Object(t)}var n=Object.prototype.hasOwnProperty,o=Object.prototype.propertyIsEnumerable;e.exports=Object.assign||function(t,e){for(var r,s,a=i(t),h=1;h=t.length&&r())}if(r=r||function(){},!t.length)return r();var o=0;u(t,function(t){e(t,i(n))})},s.forEach=s.each,s.eachSeries=function(t,e,r){if(r=r||function(){},!t.length)return r();var i=0,n=function(){e(t[i],function(e){e?(r(e),r=function(){}):(i+=1,i>=t.length?r():n())})};n()},s.forEachSeries=s.eachSeries,s.eachLimit=function(t,e,r,i){var n=d(e);n.apply(null,[t,r,i])},s.forEachLimit=s.eachLimit;var d=function(t){return function(e,r,i){if(i=i||function(){},!e.length||0>=t)return i();var n=0,o=0,s=0;!function a(){if(n>=e.length)return i();for(;t>s&&o=e.length?i():a())})}()}},f=function(t){return function(){var e=Array.prototype.slice.call(arguments);return t.apply(null,[s.each].concat(e))}},v=function(t,e){return function(){var r=Array.prototype.slice.call(arguments);return e.apply(null,[d(t)].concat(r))}},g=function(t){return function(){var e=Array.prototype.slice.call(arguments);return t.apply(null,[s.eachSeries].concat(e))}},m=function(t,e,r,i){if(e=l(e,function(t,e){return{index:e,value:t}}),i){var n=[];t(e,function(t,e){r(t.value,function(r,i){n[t.index]=i,e(r)})},function(t){i(t,n)})}else t(e,function(t,e){r(t.value,function(t){e(t)})})};s.map=f(m),s.mapSeries=g(m),s.mapLimit=function(t,e,r,i){return y(e)(t,r,i)};var y=function(t){return v(t,m)};s.reduce=function(t,e,r,i){s.eachSeries(t,function(t,i){r(e,t,function(t,r){e=r,i(t)})},function(t){i(t,e)})},s.inject=s.reduce,s.foldl=s.reduce,s.reduceRight=function(t,e,r,i){var n=l(t,function(t){return t}).reverse();s.reduce(n,e,r,i)},s.foldr=s.reduceRight;var x=function(t,e,r,i){var n=[];e=l(e,function(t,e){return{index:e,value:t}}),t(e,function(t,e){r(t.value,function(r){r&&n.push(t),e()})},function(t){i(l(n.sort(function(t,e){return t.index-e.index}),function(t){return t.value}))})};s.filter=f(x),s.filterSeries=g(x),s.select=s.filter,s.selectSeries=s.filterSeries;var b=function(t,e,r,i){var n=[];e=l(e,function(t,e){return{index:e,value:t}}),t(e,function(t,e){r(t.value,function(r){r||n.push(t),e()})},function(t){i(l(n.sort(function(t,e){return t.index-e.index}),function(t){return t.value}))})};s.reject=f(b),s.rejectSeries=g(b);var _=function(t,e,r,i){t(e,function(t,e){r(t,function(r){r?(i(t),i=function(){}):e()})},function(t){i()})};s.detect=f(_),s.detectSeries=g(_),s.some=function(t,e,r){s.each(t,function(t,i){e(t,function(t){t&&(r(!0),r=function(){}),i()})},function(t){r(!1)})},s.any=s.some,s.every=function(t,e,r){s.each(t,function(t,i){e(t,function(t){t||(r(!1),r=function(){}),i()})},function(t){r(!0)})},s.all=s.every,s.sortBy=function(t,e,r){s.map(t,function(t,r){e(t,function(e,i){e?r(e):r(null,{value:t,criteria:i})})},function(t,e){if(t)return r(t);var i=function(t,e){var r=t.criteria,i=e.criteria;return i>r?-1:r>i?1:0};r(null,l(e.sort(i),function(t){return t.value}))})},s.auto=function(t,e){e=e||function(){};var r=p(t),i=r.length;if(!i)return e();var n={},o=[],a=function(t){o.unshift(t)},l=function(t){for(var e=0;ei;){var o=i+(n-i+1>>>1);r(e,t[o])>=0?i=o:n=o-1}return i}function n(t,e,n,o){return t.started||(t.started=!0),h(e)||(e=[e]),0==e.length?s.setImmediate(function(){t.drain&&t.drain()}):void u(e,function(e){var a={data:e,priority:n,callback:"function"==typeof o?o:null};t.tasks.splice(i(t.tasks,a,r)+1,0,a),t.saturated&&t.tasks.length===t.concurrency&&t.saturated(),s.setImmediate(t.process)})}var o=s.queue(t,e);return o.push=function(t,e,r){n(o,t,e,r)},delete o.unshift,o},s.cargo=function(t,e){var r=!1,i=[],n={tasks:i,payload:e,saturated:null,empty:null,drain:null,drained:!0,push:function(t,r){h(t)||(t=[t]),u(t,function(t){i.push({data:t,callback:"function"==typeof r?r:null}),n.drained=!1,n.saturated&&i.length===e&&n.saturated()}),s.setImmediate(n.process)},process:function o(){if(!r){if(0===i.length)return n.drain&&!n.drained&&n.drain(),void(n.drained=!0);var s="number"==typeof e?i.splice(0,e):i.splice(0,i.length),a=l(s,function(t){return t.data});n.empty&&n.empty(),r=!0,t(a,function(){r=!1;var t=arguments;u(s,function(e){e.callback&&e.callback.apply(null,t)}),o()})}},length:function(){return i.length},running:function(){return r}};return n};var S=function(t){return function(e){var r=Array.prototype.slice.call(arguments,1);e.apply(null,r.concat([function(e){var r=Array.prototype.slice.call(arguments,1);"undefined"!=typeof console&&(e?console.error&&console.error(e):console[t]&&u(r,function(e){console[t](e)}))}]))}};s.log=S("log"),s.dir=S("dir"),s.memoize=function(t,e){var r={},i={};e=e||function(t){return t};var n=function(){var n=Array.prototype.slice.call(arguments),o=n.pop(),a=e.apply(null,n);a in r?s.nextTick(function(){o.apply(null,r[a])}):a in i?i[a].push(o):(i[a]=[o],t.apply(null,n.concat([function(){r[a]=arguments;var t=i[a];delete i[a];for(var e=0,n=t.length;n>e;e++)t[e].apply(null,arguments)}])))};return n.memo=r,n.unmemoized=t,n},s.unmemoize=function(t){return function(){return(t.unmemoized||t).apply(null,arguments)}},s.times=function(t,e,r){for(var i=[],n=0;t>n;n++)i.push(n);return s.map(i,e,r)},s.timesSeries=function(t,e,r){for(var i=[],n=0;t>n;n++)i.push(n);return s.mapSeries(i,e,r)},s.seq=function(){var t=arguments;return function(){var e=this,r=Array.prototype.slice.call(arguments),i=r.pop();s.reduce(t,r,function(t,r,i){r.apply(e,t.concat([function(){var t=arguments[0],e=Array.prototype.slice.call(arguments,1);i(t,e)}]))},function(t,r){i.apply(e,[t].concat(r))})}},s.compose=function(){return s.seq.apply(null,Array.prototype.reverse.call(arguments))};var w=function(t,e){var r=function(){var r=this,i=Array.prototype.slice.call(arguments),n=i.pop();return t(e,function(t,e){t.apply(r,i.concat([e]))},n)};if(arguments.length>2){var i=Array.prototype.slice.call(arguments,2);return r.apply(this,i)}return r};s.applyEach=f(w),s.applyEachSeries=g(w),s.forever=function(t,e){function r(i){if(i){if(e)return e(i);throw i}t(r)}r()},"undefined"!=typeof r&&r.exports?r.exports=s:"undefined"!=typeof t&&t.amd?t([],function(){return s}):n.async=s}()}).call(this,e("_process"))},{_process:18}],28:[function(t,e,r){function i(t,e){a.call(this),e=e||10,this.baseUrl=t||"",this.progress=0,this.loading=!1,this._progressChunk=0,this._beforeMiddleware=[],this._afterMiddleware=[],this._boundLoadResource=this._loadResource.bind(this),this._boundOnLoad=this._onLoad.bind(this),this._buffer=[],this._numToLoad=0,this._queue=n.queue(this._boundLoadResource,e),this.resources={}}var n=t("async"),o=t("url"),s=t("./Resource"),a=t("eventemitter3");i.prototype=Object.create(a.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.add=i.prototype.enqueue=function(t,e,r,i){if(Array.isArray(t)){for(var n=0;n0)if(this.xhrType===i.XHR_RESPONSE_TYPE.TEXT)this.data=t.responseText;else if(this.xhrType===i.XHR_RESPONSE_TYPE.JSON)try{this.data=JSON.parse(t.responseText),this.isJson=!0}catch(r){this.error=new Error("Error trying to parse loaded json:",r)}else if(this.xhrType===i.XHR_RESPONSE_TYPE.DOCUMENT)try{if(window.DOMParser){var n=new DOMParser;this.data=n.parseFromString(t.responseText,"text/xml")}else{var o=document.createElement("div");o.innerHTML=t.responseText,this.data=o}this.isXml=!0}catch(r){this.error=new Error("Error trying to parse loaded xml:",r)}else this.data=t.response||t.responseText;else this.error=new Error("["+t.status+"]"+t.statusText+":"+t.responseURL);this.complete()},i.prototype._determineCrossOrigin=function(t,e){if(0===t.indexOf("data:"))return"";e=e||window.location,u||(u=document.createElement("a")),u.href=t,t=a.parse(u.href);var r=!t.port&&""===e.port||t.port===e.port;return t.hostname===e.hostname&&r&&t.protocol===e.protocol?"":"anonymous"},i.prototype._determineXhrType=function(){return i._xhrTypeMap[this._getExtension()]||i.XHR_RESPONSE_TYPE.TEXT},i.prototype._determineLoadType=function(){return i._loadTypeMap[this._getExtension()]||i.LOAD_TYPE.XHR},i.prototype._getExtension=function(){var t,e=this.url;if(this.isDataUrl){var r=e.indexOf("/");t=e.substring(r+1,e.indexOf(";",r))}else{var i=e.indexOf("?");-1!==i&&(e=e.substring(0,i)),t=e.substring(e.lastIndexOf(".")+1)}return t},i.prototype._getMimeFromXhrType=function(t){switch(t){case i.XHR_RESPONSE_TYPE.BUFFER:return"application/octet-binary";case i.XHR_RESPONSE_TYPE.BLOB:return"application/blob";case i.XHR_RESPONSE_TYPE.DOCUMENT:return"application/xml";case i.XHR_RESPONSE_TYPE.JSON:return"application/json";case i.XHR_RESPONSE_TYPE.DEFAULT:case i.XHR_RESPONSE_TYPE.TEXT:default:return"text/plain"}},i.LOAD_TYPE={XHR:1,IMAGE:2,AUDIO:3,VIDEO:4},i.XHR_READY_STATE={UNSENT:0,OPENED:1,HEADERS_RECEIVED:2,LOADING:3,DONE:4},i.XHR_RESPONSE_TYPE={DEFAULT:"text",BUFFER:"arraybuffer",BLOB:"blob",DOCUMENT:"document",JSON:"json",TEXT:"text"},i._loadTypeMap={gif:i.LOAD_TYPE.IMAGE,png:i.LOAD_TYPE.IMAGE,bmp:i.LOAD_TYPE.IMAGE,jpg:i.LOAD_TYPE.IMAGE,jpeg:i.LOAD_TYPE.IMAGE,tif:i.LOAD_TYPE.IMAGE,tiff:i.LOAD_TYPE.IMAGE,webp:i.LOAD_TYPE.IMAGE,tga:i.LOAD_TYPE.IMAGE},i._xhrTypeMap={xhtml:i.XHR_RESPONSE_TYPE.DOCUMENT,html:i.XHR_RESPONSE_TYPE.DOCUMENT,htm:i.XHR_RESPONSE_TYPE.DOCUMENT,xml:i.XHR_RESPONSE_TYPE.DOCUMENT,tmx:i.XHR_RESPONSE_TYPE.DOCUMENT,tsx:i.XHR_RESPONSE_TYPE.DOCUMENT,svg:i.XHR_RESPONSE_TYPE.DOCUMENT,gif:i.XHR_RESPONSE_TYPE.BLOB,png:i.XHR_RESPONSE_TYPE.BLOB,bmp:i.XHR_RESPONSE_TYPE.BLOB,jpg:i.XHR_RESPONSE_TYPE.BLOB,jpeg:i.XHR_RESPONSE_TYPE.BLOB,tif:i.XHR_RESPONSE_TYPE.BLOB,tiff:i.XHR_RESPONSE_TYPE.BLOB,webp:i.XHR_RESPONSE_TYPE.BLOB,tga:i.XHR_RESPONSE_TYPE.BLOB,json:i.XHR_RESPONSE_TYPE.JSON,text:i.XHR_RESPONSE_TYPE.TEXT,txt:i.XHR_RESPONSE_TYPE.TEXT},i.setExtensionLoadType=function(t,e){o(i._loadTypeMap,t,e)},i.setExtensionXhrType=function(t,e){o(i._xhrTypeMap,t,e)}},{eventemitter3:25,url:23}],30:[function(t,e,r){e.exports={_keyStr:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",encodeBinary:function(t){for(var e,r="",i=new Array(4),n=0,o=0,s=0;n>2,i[1]=(3&e[0])<<4|e[1]>>4,i[2]=(15&e[1])<<2|e[2]>>6,i[3]=63&e[2],s=n-(t.length-1)){case 2:i[3]=64,i[2]=64;break;case 1:i[3]=64}for(o=0;o","Richard Davey "],main:"./src/index.js",homepage:"http://goodboydigital.com/",bugs:"https://github.com/pixijs/pixi.js/issues",license:"MIT",repository:{type:"git",url:"https://github.com/pixijs/pixi.js.git"},scripts:{start:"gulp && gulp watch",test:"gulp && testem ci",build:"gulp",docs:"jsdoc -c ./gulp/util/jsdoc.conf.json -R README.md"},files:["bin/","src/","CONTRIBUTING.md","LICENSE","package.json","README.md"],dependencies:{async:"^1.5.0",brfs:"^1.4.1",earcut:"^2.0.7",eventemitter3:"^1.1.1","object-assign":"^4.0.1","pixi-gl-core":"git+https://github.com/GoodBoyDigital/pixi-gl-core.git","resource-loader":"^1.6.4"},devDependencies:{browserify:"^11.1.0",chai:"^3.2.0",del:"^2.0.2",gulp:"^3.9.0","gulp-cached":"^1.1.0","gulp-concat":"^2.6.0","gulp-debug":"^2.1.0","gulp-header":"^1.7.1","gulp-jshint":"^1.11.2","gulp-mirror":"^0.4.0","gulp-plumber":"^1.0.1","gulp-rename":"^1.2.2","gulp-sourcemaps":"^1.5.2","gulp-uglify":"^1.4.1","gulp-util":"^3.0.6","jaguarjs-jsdoc":"git+https://github.com/davidshimjs/jaguarjs-jsdoc.git",jsdoc:"^3.3.2","jshint-summary":"^0.4.0",minimist:"^1.2.0",mocha:"^2.3.2","require-dir":"^0.3.0","run-sequence":"^1.1.2",testem:"^0.9.4","vinyl-buffer":"^1.0.0","vinyl-source-stream":"^1.1.0",watchify:"^3.4.0"},browserify:{transform:["brfs"]}}},{}],35:[function(t,e,r){function i(t){var e=document.createElement("div");e.style.width="100px",e.style.height="100px",e.style.position="absolute",e.style.top=0,e.style.left=0,e.style.zIndex=2,this.div=e,this.pool=[],this.renderId=0,this.debug=!1,this.renderer=t,this.children=[],this._onKeyDown=this._onKeyDown.bind(this),this._onMouseMove=this._onMouseMove.bind(this),this.isActive=!1,window.addEventListener("keydown",this._onKeyDown,!1)}var n=t("../core");Object.assign(n.DisplayObject.prototype,t("./accessibleTarget")),i.prototype.constructor=i,e.exports=i,i.prototype.activate=function(){this.isActive||(this.isActive=!0,window.document.addEventListener("mousemove",this._onMouseMove,!0),window.removeEventListener("keydown",this._onKeyDown,!1),this.renderer.on("postrender",this.update,this),this.renderer.view.parentNode.appendChild(this.div))},i.prototype.deactivate=function(){this.isActive&&(this.isActive=!1,window.document.removeEventListener("mousemove",this._onMouseMove),window.addEventListener("keydown",this._onKeyDown,!1),this.renderer.off("postrender",this.update),this.div.parentNode.removeChild(this.div))},i.prototype.updateAccessibleObjects=function(t){if(t.visible){t.accessible&&t.interactive&&(t._accessibleActive||this.addChild(t),t.renderId=this.renderId);for(var e=t.children,r=e.length-1;r>=0;r--)this.updateAccessibleObjects(e[r])}},i.prototype.update=function(){this.updateAccessibleObjects(this.renderer._lastObjectRendered);var t=this.renderer.view.getBoundingClientRect(),e=t.width/this.renderer.width,r=t.height/this.renderer.height,i=this.div;i.style.left=t.left+"px",i.style.top=t.top+"px",i.style.width=this.renderer.width+"px",i.style.height=this.renderer.height+"px";for(var o=0;othis.renderer.width&&(t.width=this.renderer.width-t.x),t.y+t.height>this.renderer.height&&(t.height=this.renderer.height-t.y)},i.prototype.addChild=function(t){var e=this.pool.pop();e||(e=document.createElement("button"),e.style.width="100px",e.style.height="100px",e.style.backgroundColor=this.debug?"rgba(255,0,0,0.5)":"transparent",e.style.position="absolute",e.style.zIndex=2,e.style.borderStyle="none",e.addEventListener("click",this._onClick.bind(this)),e.addEventListener("focus",this._onFocus.bind(this)),e.addEventListener("focusout",this._onFocusOut.bind(this))),e.title=t.accessibleTitle||"displayObject "+this.tabIndex,t._accessibleActive=!0,t._accessibleDiv=e,e.displayObject=t,this.children.push(t),this.div.appendChild(t._accessibleDiv),t._accessibleDiv.tabIndex=t.tabIndex},i.prototype._onClick=function(t){var e=this.renderer.plugins.interaction;e.dispatchEvent(t.target.displayObject,"click",e.eventData)},i.prototype._onFocus=function(t){var e=this.renderer.plugins.interaction;e.dispatchEvent(t.target.displayObject,"mouseover",e.eventData)},i.prototype._onFocusOut=function(t){var e=this.renderer.plugins.interaction;e.dispatchEvent(t.target.displayObject,"mouseout",e.eventData)},i.prototype._onKeyDown=function(t){9===t.keyCode&&this.activate()},i.prototype._onMouseMove=function(){this.deactivate()},i.prototype.destroy=function(){this.div=null;for(var t=0;t1)for(var r=0;e>r;r++)this.addChild(arguments[r]);else t.parent&&t.parent.removeChild(t),t.parent=this,this.children.push(t),this.onChildrenChange(this.children.length-1),t.emit("added",this);return t},i.prototype.addChildAt=function(t,e){if(e>=0&&e<=this.children.length)return t.parent&&t.parent.removeChild(t),t.parent=this,this.children.splice(e,0,t),this.onChildrenChange(e),t.emit("added",this),t;throw new Error(t+"addChildAt: The index "+e+" supplied is out of bounds "+this.children.length)},i.prototype.swapChildren=function(t,e){if(t!==e){var r=this.getChildIndex(t),i=this.getChildIndex(e);if(0>r||0>i)throw new Error("swapChildren: Both the supplied DisplayObjects must be children of the caller.");this.children[r]=e,this.children[i]=t,this.onChildrenChange(i>r?r:i)}},i.prototype.getChildIndex=function(t){var e=this.children.indexOf(t);if(-1===e)throw new Error("The supplied DisplayObject must be a child of the caller");return e},i.prototype.setChildIndex=function(t,e){if(0>e||e>=this.children.length)throw new Error("The supplied index is out of bounds");var r=this.getChildIndex(t);o.removeItems(this.children,r,1),this.children.splice(e,0,t),this.onChildrenChange(e)},i.prototype.getChildAt=function(t){if(0>t||t>=this.children.length)throw new Error("getChildAt: Supplied index "+t+" does not exist in the child list, or the supplied DisplayObject is not a child of the caller");return this.children[t]},i.prototype.removeChild=function(t){var e=arguments.length;if(e>1)for(var r=0;e>r;r++)this.removeChild(arguments[r]);else{var i=this.children.indexOf(t);if(-1===i)return;t.parent=null,o.removeItems(this.children,i,1),this.onChildrenChange(i),t.emit("removed",this)}return t},i.prototype.removeChildAt=function(t){var e=this.getChildAt(t);return e.parent=null,o.removeItems(this.children,t,1),this.onChildrenChange(t),e.emit("removed",this),e},i.prototype.removeChildren=function(t,e){var r,i,n=t||0,o="number"==typeof e?e:this.children.length,s=o-n;if(s>0&&o>=s){for(r=this.children.splice(n,s),i=0;it;++t)this.children[t].updateTransform();this.dirty=!1}},i.prototype.containerUpdateTransform=i.prototype.updateTransform,i.prototype.getBounds=function(){if(!this._currentBounds){if(0===this.children.length)return n.Rectangle.EMPTY;for(var t,e,r,i=1/0,o=1/0,s=-(1/0),a=-(1/0),h=!1,u=0,l=this.children.length;l>u;++u){var c=this.children[u];c.visible&&(h=!0,t=this.children[u].getBounds(),i=ie?s:e,a=a>r?a:r)}if(!h)return n.Rectangle.EMPTY;var p=this._bounds;p.x=i,p.y=o,p.width=s-i,p.height=a-o,this._currentBounds=p}return this._currentBounds},i.prototype.containerGetBounds=i.prototype.getBounds,i.prototype.getLocalBounds=function(){var t=this.worldTransform;this.worldTransform=n.Matrix.IDENTITY;for(var e=0,r=this.children.length;r>e;++e)this.children[e].updateTransform();return this.worldTransform=t,this._currentBounds=null,this.getBounds(n.Matrix.IDENTITY)},i.prototype.renderWebGL=function(t){if(this.visible&&!(this.worldAlpha<=0)&&this.renderable){var e,r;if(this._mask||this._filters){for(t.currentRenderer.flush(),this._filters&&this._filters.length&&t.filterManager.pushFilter(this,this._filters),this._mask&&t.maskManager.pushMask(this,this._mask),t.currentRenderer.start(),this._renderWebGL(t),e=0,r=this.children.length;r>e;e++)this.children[e].renderWebGL(t);t.currentRenderer.flush(),this._mask&&t.maskManager.popMask(this,this._mask),this._filters&&t.filterManager.popFilter(),t.currentRenderer.start()}else for(this._renderWebGL(t),e=0,r=this.children.length;r>e;++e)this.children[e].renderWebGL(t)}},i.prototype._renderWebGL=function(t){},i.prototype._renderCanvas=function(t){},i.prototype.renderCanvas=function(t){if(this.visible&&!(this.alpha<=0)&&this.renderable){this._mask&&t.maskManager.pushMask(this._mask,t),this._renderCanvas(t);for(var e=0,r=this.children.length;r>e;++e)this.children[e].renderCanvas(t);this._mask&&t.maskManager.popMask(t)}},i.prototype.destroy=function(t){if(s.prototype.destroy.call(this),t)for(var e=0,r=this.children.length;r>e;++e)this.children[e].destroy(t);this.removeChildren(),this.children=null}},{"../math":48,"../textures/RenderTexture":91,"../utils":98,"./DisplayObject":40}],40:[function(t,e,r){function i(){s.call(this),this.position=new n.Point,this.scale=new n.Point(1,1),this.pivot=new n.Point(0,0),this.skew=new n.Point(0,0),this._rotation=0,this.alpha=1,this.visible=!0,this.renderable=!0,this.parent=null,this.worldAlpha=1,this.worldTransform=new n.Matrix,this.localTransform=new n.Matrix,this.filterArea=null,this._sr=0,this._cr=1,this._bounds=new n.Rectangle(0,0,1,1),this._currentBounds=null,this._mask=null,this.dirty=!0}var n=t("../math"),o=t("../textures/RenderTexture"),s=t("eventemitter3"),a=(t("../const"),new n.Matrix),h={worldTransform:new n.Matrix,worldAlpha:1,children:[]};i.prototype=Object.create(s.prototype),i.prototype.constructor=i,e.exports=i,Object.defineProperties(i.prototype,{x:{get:function(){return this.position.x},set:function(t){this.position.x=t,this.dirty=!0}},y:{get:function(){return this.position.y},set:function(t){this.position.y=t,this.dirty=!0}},scaleX:{get:function(){return this.scale.x},set:function(t){this.scale.x=t,this.dirty=!0}},scaleY:{get:function(){return this.scale.y},set:function(t){this.scale.y=t,this.dirty=!0}},rotation:{get:function(){return this._rotation},set:function(t){this._rotation=t,this.dirty=!0,this._sr=Math.sin(t),this._cr=Math.cos(t)}},scaleY:{get:function(){return this.scale.y},set:function(t){this.scale.y=t,this.dirty=!0}},worldVisible:{get:function(){var t=this;do{if(!t.visible)return!1;t=t.parent}while(t);return!0}},mask:{get:function(){return this._mask},set:function(t){this._mask&&(this._mask.renderable=!0),this._mask=t,this._mask&&(this._mask.renderable=!1)}},filters:{get:function(){return this._filters&&this._filters.slice()},set:function(t){this._filters=t&&t.slice()}}}),i.prototype.updateTransform=function(){var t=this.parent.worldTransform,e=this.worldTransform,r=this.localTransform;this.dirty&&(r.a=this._cr*this.scale.x,r.b=this._sr*this.scale.x,r.c=-this._sr*this.scale.y,r.d=this._cr*this.scale.y,r.tx=this.position.x-(this.pivot.x*r.a+this.pivot.y*r.c),r.ty=this.position.y-(this.pivot.x*r.b+this.pivot.y*r.d)),(this.dirty||this.parent.dirty)&&(e.a=r.a*t.a+r.b*t.c,e.b=r.a*t.b+r.b*t.d,e.c=r.c*t.a+r.d*t.c,e.d=r.c*t.b+r.d*t.d,e.tx=r.tx*t.a+r.ty*t.c+t.tx,e.ty=r.tx*t.b+r.ty*t.d+t.ty,this._currentBounds=null),this.worldAlpha=this.alpha*this.parent.worldAlpha},i.prototype.displayObjectUpdateTransform=i.prototype.updateTransform,i.prototype.getBounds=function(t){return n.Rectangle.EMPTY},i.prototype.getLocalBounds=function(){return this.getBounds(n.Matrix.IDENTITY)},i.prototype.toGlobal=function(t){return this.parent?this.displayObjectUpdateTransform():(this.parent=h,this.displayObjectUpdateTransform(),this.parent=null),this.worldTransform.apply(t)},i.prototype.toLocal=function(t,e,r){return e&&(t=e.toGlobal(t)),this.parent?this.displayObjectUpdateTransform():(this.parent=h,this.displayObjectUpdateTransform(),this.parent=null),this.worldTransform.applyInverse(t,r)},i.prototype.renderWebGL=function(t){},i.prototype.renderCanvas=function(t){},i.prototype.generateTexture=function(t,e,r){var i=this.getLocalBounds(),n=new o(t,0|i.width,0|i.height,e,r);return a.tx=-i.x,a.ty=-i.y,n.render(this,a),n},i.prototype.setParent=function(t){if(!t||!t.addChild)throw new Error("setParent: Argument must be a Container");return t.addChild(this),t},i.prototype.setTransform=function(t,e,r,i,n,o,s,a,h){return this.position.x=t||0,this.position.y=e||0,this.scale.x=r?r:1,this.scale.y=i?i:1,this.rotation=n||0,this.skew.x=o||0,this.skew.y=s||0,this.pivot.x=a||0,this.pivot.y=h||0,this.dirty=!0,this},i.prototype.destroy=function(){this.position=null,this.scale=null,this.pivot=null,this.skew=null,this.parent=null,this._bounds=null,this._currentBounds=null,this._mask=null,this.worldTransform=null,this.filterArea=null}},{"../const":38,"../math":48,"../textures/RenderTexture":91,eventemitter3:25}],41:[function(t,e,r){function i(){n.call(this),this.fillAlpha=1,this.lineWidth=0,this.lineColor=0,this.graphicsData=[],this.tint=16777215,this._prevTint=16777215,this.blendMode=l.BLEND_MODES.NORMAL,this.currentPath=null,this._webGL={},this.isMask=!1,this.boundsPadding=0,this._localBounds=new u.Rectangle(0,0,1,1),this.dirty=!0,this.glDirty=!1,this.boundsDirty=!0,this.cachedSpriteDirty=!1}var n=t("../display/Container"),o=t("../textures/Texture"),s=t("../renderers/canvas/utils/CanvasBuffer"),a=t("../renderers/canvas/utils/CanvasGraphics"),h=t("./GraphicsData"),u=t("../math"),l=t("../const"),c=new u.Point;i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.clone=function(){var t=new i;t.renderable=this.renderable,t.fillAlpha=this.fillAlpha,t.lineWidth=this.lineWidth,t.lineColor=this.lineColor,t.tint=this.tint,t.blendMode=this.blendMode,t.isMask=this.isMask,t.boundsPadding=this.boundsPadding,t.dirty=!0,t.glDirty=!0,t.cachedSpriteDirty=this.cachedSpriteDirty;for(var e=0;e=c;++c)l=c/s,n=h+(t-h)*l,o=u+(e-u)*l,a.push(n+(t+(r-t)*l-n)*l,o+(e+(i-e)*l-o)*l);return this.dirty=this.boundsDirty=!0,this},i.prototype.bezierCurveTo=function(t,e,r,i,n,o){this.currentPath?0===this.currentPath.shape.points.length&&(this.currentPath.shape.points=[0,0]):this.moveTo(0,0);for(var s,a,h,u,l,c=20,p=this.currentPath.shape.points,d=p[p.length-2],f=p[p.length-1],v=0,g=1;c>=g;++g)v=g/c,s=1-v,a=s*s,h=a*s,u=v*v,l=u*v,p.push(h*d+3*a*v*t+3*s*u*r+l*n,h*f+3*a*v*e+3*s*u*i+l*o);return this.dirty=this.boundsDirty=!0,this},i.prototype.arcTo=function(t,e,r,i,n){this.currentPath?0===this.currentPath.shape.points.length&&this.currentPath.shape.points.push(t,e):this.moveTo(t,e);var o=this.currentPath.shape.points,s=o[o.length-2],a=o[o.length-1],h=a-e,u=s-t,l=i-e,c=r-t,p=Math.abs(h*c-u*l);if(1e-8>p||0===n)(o[o.length-2]!==t||o[o.length-1]!==e)&&o.push(t,e);else{var d=h*h+u*u,f=l*l+c*c,v=h*l+u*c,g=n*Math.sqrt(d)/p,m=n*Math.sqrt(f)/p,y=g*v/d,x=m*v/f,b=g*c+m*u,_=g*l+m*h,T=u*(m+y),E=h*(m+y),S=c*(g+x),w=l*(g+x),C=Math.atan2(E-_,T-b),A=Math.atan2(w-_,S-b);this.arc(b+t,_+e,n,C,A,u*l>c*h)}return this.dirty=this.boundsDirty=!0,this},i.prototype.arc=function(t,e,r,i,n,o){if(o=o||!1,i===n)return this;!o&&i>=n?n+=2*Math.PI:o&&n>=i&&(i+=2*Math.PI);var s=o?-1*(i-n):n-i,a=40*Math.ceil(Math.abs(s)/(2*Math.PI));if(0===s)return this;var h=t+Math.cos(i)*r,u=e+Math.sin(i)*r;this.currentPath?this.currentPath.shape.points.push(h,u):this.moveTo(h,u);for(var l=this.currentPath.shape.points,c=s/(2*a),p=2*c,d=Math.cos(c),f=Math.sin(c),v=a-1,g=v%1/v,m=0;v>=m;m++){var y=m+g*m,x=c+i+p*y,b=Math.cos(x),_=-Math.sin(x);l.push((d*b+f*_)*r+t,(d*-_+f*b)*r+e)}return this.dirty=this.boundsDirty=!0,this},i.prototype.beginFill=function(t,e){return this.filling=!0,this.fillColor=t||0,this.fillAlpha=void 0===e?1:e,this.currentPath&&this.currentPath.shape.points.length<=2&&(this.currentPath.fill=this.filling,this.currentPath.fillColor=this.fillColor,this.currentPath.fillAlpha=this.fillAlpha),this},i.prototype.endFill=function(){return this.filling=!1,this.fillColor=null,this.fillAlpha=1,this},i.prototype.drawRect=function(t,e,r,i){return this.drawShape(new u.Rectangle(t,e,r,i)),this},i.prototype.drawRoundedRect=function(t,e,r,i,n){return this.drawShape(new u.RoundedRectangle(t,e,r,i,n)),this},i.prototype.drawCircle=function(t,e,r){return this.drawShape(new u.Circle(t,e,r)),this},i.prototype.drawEllipse=function(t,e,r,i){return this.drawShape(new u.Ellipse(t,e,r,i)),this},i.prototype.drawPolygon=function(t){var e=t,r=!0;if(e instanceof u.Polygon&&(r=e.closed,e=e.points),!Array.isArray(e)){e=new Array(arguments.length);for(var i=0;ig?g:S,S=S>y?y:S,S=S>b?b:S,w=w>m?m:w,w=w>x?x:w,w=w>_?_:w,T=g>T?g:T,T=y>T?y:T,T=b>T?b:T,E=m>E?m:E,E=x>E?x:E,E=_>E?_:E,this._bounds.x=S,this._bounds.width=T-S,this._bounds.y=w,this._bounds.height=E-w,this._currentBounds=this._bounds}return this._currentBounds},i.prototype.containsPoint=function(t){this.worldTransform.applyInverse(t,c);for(var e=this.graphicsData,r=0;rs?s:t,e=s+h>e?s+h:e,r=r>a?a:r,i=a+u>i?a+u:i;else if(d===l.SHAPES.CIRC)s=n.x,a=n.y,h=n.radius+f/2,u=n.radius+f/2,t=t>s-h?s-h:t,e=s+h>e?s+h:e,r=r>a-u?a-u:r,i=a+u>i?a+u:i;else if(d===l.SHAPES.ELIP)s=n.x,a=n.y,h=n.width+f/2,u=n.height+f/2,t=t>s-h?s-h:t,e=s+h>e?s+h:e,r=r>a-u?a-u:r,i=a+u>i?a+u:i;else{o=n.points;for(var v=0;vs-f?s-f:t,e=s+f>e?s+f:e,r=r>a-f?a-f:r,i=a+f>i?a+f:i}}else t=0,e=0,r=0,i=0;var g=this.boundsPadding;this._localBounds.x=t-g,this._localBounds.width=e-t+2*g,this._localBounds.y=r-g,this._localBounds.height=i-r+2*g},i.prototype.drawShape=function(t){this.currentPath&&this.currentPath.shape.points.length<=2&&this.graphicsData.pop(),this.currentPath=null;var e=new h(this.lineWidth,this.lineColor,this.lineAlpha,this.fillColor,this.fillAlpha,this.filling,t);return this.graphicsData.push(e),e.type===l.SHAPES.POLY&&(e.shape.closed=e.shape.closed||this.filling,this.currentPath=e),this.dirty=this.boundsDirty=!0,e},i.prototype.destroy=function(){n.prototype.destroy.apply(this,arguments);for(var t=0;ta;a++)e=s.data[a],1===s.data[a].mode?(r.stencilManager.pushStencil(t,e),i.uniform1f(r.shaderManager.complexPrimitiveShader.uniforms.alpha._location,t.worldAlpha*e.alpha),i.drawElements(i.TRIANGLE_FAN,4,i.UNSIGNED_SHORT,2*(e.indices.length-4)),r.stencilManager.popStencil(t,e)):(o=r.shaderManager.primitiveShader,r.shaderManager.setShader(o),i.uniformMatrix3fv(o.uniforms.translationMatrix._location,!1,t.worldTransform.toArray(!0)),i.uniformMatrix3fv(o.uniforms.projectionMatrix._location,!1,r.currentRenderTarget.projectionMatrix.toArray(!0)),i.uniform3fv(o.uniforms.tint._location,n.hex2rgb(t.tint)),i.uniform1f(o.uniforms.alpha._location,t.worldAlpha),i.bindBuffer(i.ARRAY_BUFFER,e.buffer),i.vertexAttribPointer(o.attributes.aVertexPosition,2,i.FLOAT,!1,24,0),i.vertexAttribPointer(o.attributes.aColor,4,i.FLOAT,!1,24,8),i.bindBuffer(i.ELEMENT_ARRAY_BUFFER,e.indexBuffer),i.drawElements(i.TRIANGLE_STRIP,e.indices.length,i.UNSIGNED_SHORT,0)),r.drawCount++},i.prototype.updateGraphics=function(t){var e=this.renderer.gl,r=t._webGL[e.id];r||(r=t._webGL[e.id]={lastIndex:0,data:[],gl:e}),t.dirty=!1;var i;if(t.clearDirty){for(t.clearDirty=!1,i=0;i=6)if(a.points.length<2*this.maximumSimplePolySize){o=this.switchMode(r,0);var h=this.buildPoly(a,o);h||(o=this.switchMode(r,1),this.buildComplexPoly(a,o))}else o=this.switchMode(r,1),this.buildComplexPoly(a,o);a.lineWidth>0&&(o=this.switchMode(r,0),this.buildLine(a,o))}else o=this.switchMode(r,0),a.type===s.SHAPES.RECT?this.buildRectangle(a,o):a.type===s.SHAPES.CIRC||a.type===s.SHAPES.ELIP?this.buildCircle(a,o):a.type===s.SHAPES.RREC&&this.buildRoundedRectangle(a,o);r.lastIndex++}for(i=0;i32e4||r.mode!==e||1===e)&&(r=this.graphicsDataPool.pop()||new u(t.gl),r.mode=e,t.data.push(r))):(r=this.graphicsDataPool.pop()||new u(t.gl),r.mode=e,t.data.push(r)),r.dirty=!0,r},i.prototype.buildRectangle=function(t,e){var r=t.shape,i=r.x,o=r.y,s=r.width,a=r.height;if(t.fill){var h=n.hex2rgb(t.fillColor),u=t.fillAlpha,l=h[0]*u,c=h[1]*u,p=h[2]*u,d=e.points,f=e.indices,v=d.length/6;d.push(i,o),d.push(l,c,p,u),d.push(i+s,o),d.push(l,c,p,u),d.push(i,o+a),d.push(l,c,p,u),d.push(i+s,o+a),d.push(l,c,p,u),f.push(v,v,v+1,v+2,v+3,v+3)}if(t.lineWidth){var g=t.points;t.points=[i,o,i+s,o,i+s,o+a,i,o+a,i,o],this.buildLine(t,e),t.points=g}},i.prototype.buildRoundedRectangle=function(t,e){var r=t.shape,i=r.x,o=r.y,s=r.width,a=r.height,h=r.radius,u=[];if(u.push(i,o+h),this.quadraticBezierCurve(i,o+a-h,i,o+a,i+h,o+a,u),this.quadraticBezierCurve(i+s-h,o+a,i+s,o+a,i+s,o+a-h,u),this.quadraticBezierCurve(i+s,o+h,i+s,o,i+s-h,o,u),this.quadraticBezierCurve(i+h,o,i,o,i,o+h+1e-10,u),t.fill){var c=n.hex2rgb(t.fillColor),p=t.fillAlpha,d=c[0]*p,f=c[1]*p,v=c[2]*p,g=e.points,m=e.indices,y=g.length/6,x=l(u,null,2),b=0;for(b=0;b=m;m++)g=m/f,h=a(t,r,g),u=a(e,i,g),l=a(r,n,g),c=a(i,o,g),p=a(h,l,g),d=a(u,c,g),v.push(p,d);return v},i.prototype.buildCircle=function(t,e){var r,i,o=t.shape,a=o.x,h=o.y;t.type===s.SHAPES.CIRC?(r=o.radius,i=o.radius):(r=o.width,i=o.height);var u=Math.floor(30*Math.sqrt(o.radius))||Math.floor(15*Math.sqrt(o.width+o.height)),l=2*Math.PI/u,c=0;if(t.fill){var p=n.hex2rgb(t.fillColor),d=t.fillAlpha,f=p[0]*d,v=p[1]*d,g=p[2]*d,m=e.points,y=e.indices,x=m.length/6;for(y.push(x),c=0;u+1>c;c++)m.push(a,h,f,v,g,d),m.push(a+Math.sin(l*c)*r,h+Math.cos(l*c)*i,f,v,g,d),y.push(x++,x++);y.push(x-1)}if(t.lineWidth){var b=t.points;for(t.points=[],c=0;u+1>c;c++)t.points.push(a+Math.sin(l*c)*r,h+Math.cos(l*c)*i);this.buildLine(t,e),t.points=b}},i.prototype.buildLine=function(t,e){var r=0,i=t.points;if(0!==i.length){var s=new o.Point(i[0],i[1]),a=new o.Point(i[i.length-2],i[i.length-1]);if(s.x===a.x&&s.y===a.y){i=i.slice(),i.pop(),i.pop(),a=new o.Point(i[i.length-2],i[i.length-1]);var h=a.x+.5*(s.x-a.x),u=a.y+.5*(s.y-a.y);i.unshift(h,u),i.push(h,u)}var l,c,p,d,f,v,g,m,y,x,b,_,T,E,S,w,C,A,M,R,O,D,P,F=e.points,L=e.indices,B=i.length/2,I=i.length,N=F.length/6,U=t.lineWidth/2,k=n.hex2rgb(t.lineColor),j=t.lineAlpha,G=k[0]*j,Y=k[1]*j,X=k[2]*j;for(p=i[0],d=i[1],f=i[2],v=i[3],y=-(d-v),x=p-f,P=Math.sqrt(y*y+x*x),y/=P,x/=P,y*=U,x*=U,F.push(p-y,d-x,G,Y,X,j),F.push(p+y,d+x,G,Y,X,j),r=1;B-1>r;r++)p=i[2*(r-1)],d=i[2*(r-1)+1],f=i[2*r],v=i[2*r+1],g=i[2*(r+1)],m=i[2*(r+1)+1],y=-(d-v),x=p-f,P=Math.sqrt(y*y+x*x),y/=P,x/=P,y*=U,x*=U,b=-(v-m),_=f-g,P=Math.sqrt(b*b+_*_),b/=P,_/=P,b*=U,_*=U,S=-x+d-(-x+v),w=-y+f-(-y+p),C=(-y+p)*(-x+v)-(-y+f)*(-x+d),A=-_+m-(-_+v),M=-b+f-(-b+g),R=(-b+g)*(-_+v)-(-b+f)*(-_+m),O=S*M-A*w,Math.abs(O)<.1?(O+=10.1,F.push(f-y,v-x,G,Y,X,j),F.push(f+y,v+x,G,Y,X,j)):(l=(w*R-M*C)/O,c=(A*C-S*R)/O,D=(l-f)*(l-f)+(c-v)*(c-v),D>19600?(T=y-b,E=x-_,P=Math.sqrt(T*T+E*E),T/=P,E/=P,T*=U,E*=U,F.push(f-T,v-E),F.push(G,Y,X,j),F.push(f+T,v+E),F.push(G,Y,X,j),F.push(f-T,v-E),F.push(G,Y,X,j),I++):(F.push(l,c),F.push(G,Y,X,j),F.push(f-(l-f),v-(c-v)),F.push(G,Y,X,j)));for(p=i[2*(B-2)],d=i[2*(B-2)+1],f=i[2*(B-1)],v=i[2*(B-1)+1],y=-(d-v),x=p-f,P=Math.sqrt(y*y+x*x),y/=P,x/=P,y*=U,x*=U,F.push(f-y,v-x),F.push(G,Y,X,j),F.push(f+y,v+x),F.push(G,Y,X,j),L.push(N),r=0;I>r;r++)L.push(N++);L.push(N-1)}},i.prototype.buildComplexPoly=function(t,e){var r=t.points.slice();if(!(r.length<6)){var i=e.indices;e.points=r,e.alpha=t.fillAlpha,e.color=n.hex2rgb(t.fillColor);for(var o,s,a=1/0,h=-(1/0),u=1/0,l=-(1/0),c=0;co?o:a,h=o>h?o:h,u=u>s?s:u,l=s>l?s:l;r.push(a,u,h,u,h,l,a,l);var p=r.length/2;for(c=0;p>c;c++)i.push(c)}},i.prototype.buildPoly=function(t,e){var r=t.points;if(!(r.length<6)){var i=e.points,o=e.indices,s=r.length/2,a=n.hex2rgb(t.fillColor),h=t.fillAlpha,u=a[0]*h,c=a[1]*h,p=a[2]*h,d=l(r,null,2);if(!d)return!1;var f=i.length/6,v=0;for(v=0;vv;v++)i.push(r[2*v],r[2*v+1],u,c,p,h);return!0}}},{"../../const":38,"../../math":48,"../../renderers/webgl/WebGLRenderer":65,"../../renderers/webgl/utils/ObjectRenderer":80,"../../utils":98,"./WebGLGraphicsData":44,earcut:24}],44:[function(t,e,r){function i(t){this.gl=t,this.color=[0,0,0],this.points=[],this.indices=[],this.buffer=t.createBuffer(),this.indexBuffer=t.createBuffer(),this.mode=1,this.alpha=1,this.dirty=!0,this.glPoints=null,this.glIndices=null}i.prototype.constructor=i,e.exports=i,i.prototype.reset=function(){this.points.length=0,this.indices.length=0},i.prototype.upload=function(){var t=this.gl;this.glPoints=new Float32Array(this.points),t.bindBuffer(t.ARRAY_BUFFER,this.buffer),t.bufferData(t.ARRAY_BUFFER,this.glPoints,t.STATIC_DRAW),this.glIndices=new Uint16Array(this.indices),t.bindBuffer(t.ELEMENT_ARRAY_BUFFER,this.indexBuffer),t.bufferData(t.ELEMENT_ARRAY_BUFFER,this.glIndices,t.STATIC_DRAW),this.dirty=!1},i.prototype.destroy=function(){this.color=null,this.points=null,this.indices=null,this.gl.deleteBuffer(this.buffer),this.gl.deleteBuffer(this.indexBuffer),this.gl=null,this.buffer=null,this.indexBuffer=null,this.glPoints=null,this.glIndices=null}},{}],45:[function(t,e,r){var i=e.exports=Object.assign(t("./const"),t("./math"),{utils:t("./utils"),ticker:t("./ticker"),DisplayObject:t("./display/DisplayObject"),Container:t("./display/Container"),Sprite:t("./sprites/Sprite"),ParticleContainer:t("./particles/ParticleContainer"),SpriteRenderer:t("./sprites/webgl/SpriteRenderer"),ParticleRenderer:t("./particles/webgl/ParticleRenderer"),Text:t("./text/Text"),Graphics:t("./graphics/Graphics"),GraphicsData:t("./graphics/GraphicsData"),GraphicsRenderer:t("./graphics/webgl/GraphicsRenderer"),Texture:t("./textures/Texture"),BaseTexture:t("./textures/BaseTexture"),RenderTexture:t("./textures/RenderTexture"),VideoBaseTexture:t("./textures/VideoBaseTexture"),TextureUvs:t("./textures/TextureUvs"),CanvasRenderer:t("./renderers/canvas/CanvasRenderer"),CanvasGraphics:t("./renderers/canvas/utils/CanvasGraphics"),CanvasBuffer:t("./renderers/canvas/utils/CanvasBuffer"),WebGLRenderer:t("./renderers/webgl/WebGLRenderer"),WebGLManager:t("./renderers/webgl/managers/WebGLManager"),ShaderManager:t("./renderers/webgl/managers/ShaderManager"),Shader:t("./renderers/webgl/shaders/Shader"),ObjectRenderer:t("./renderers/webgl/utils/ObjectRenderer"),RenderTarget:t("./renderers/webgl/utils/RenderTarget"),AbstractFilter:t("./renderers/webgl/filters/AbstractFilter"),FXAAFilter:t("./renderers/webgl/filters/FXAAFilter"),SpriteMaskFilter:t("./renderers/webgl/filters/SpriteMaskFilter"),glCore:t("pixi-gl-core"),autoDetectRenderer:function(t,e,r,n){return t=t||800,e=e||600,!n&&i.utils.isWebGLSupported()?new i.WebGLRenderer(t,e,r):new i.CanvasRenderer(t,e,r)}})},{"./const":38,"./display/Container":39,"./display/DisplayObject":40,"./graphics/Graphics":41,"./graphics/GraphicsData":42,"./graphics/webgl/GraphicsRenderer":43,"./math":48,"./particles/ParticleContainer":54,"./particles/webgl/ParticleRenderer":56,"./renderers/canvas/CanvasRenderer":59,"./renderers/canvas/utils/CanvasBuffer":60,"./renderers/canvas/utils/CanvasGraphics":61,"./renderers/webgl/WebGLRenderer":65,"./renderers/webgl/filters/AbstractFilter":66,"./renderers/webgl/filters/FXAAFilter":67,"./renderers/webgl/filters/SpriteMaskFilter":68,"./renderers/webgl/managers/ShaderManager":72,"./renderers/webgl/managers/WebGLManager":74,"./renderers/webgl/shaders/Shader":77,"./renderers/webgl/utils/ObjectRenderer":80,"./renderers/webgl/utils/RenderTarget":82,"./sprites/Sprite":86,"./sprites/webgl/SpriteRenderer":87,"./text/Text":89,"./textures/BaseTexture":90,"./textures/RenderTexture":91,"./textures/Texture":92,"./textures/TextureUvs":93,"./textures/VideoBaseTexture":94,"./ticker":96,"./utils":98,"pixi-gl-core":1}],46:[function(t,e,r){function i(){this.a=1,this.b=0,this.c=0,this.d=1,this.tx=0,this.ty=0}var n=t("./Point");i.prototype.constructor=i,e.exports=i,i.prototype.fromArray=function(t){this.a=t[0],this.b=t[1],this.c=t[3],this.d=t[4],this.tx=t[2],this.ty=t[5]},i.prototype.set=function(t,e,r,i,n,o){return this.a=t,this.b=e,this.c=r,this.d=i,this.tx=n,this.ty=o,this},i.prototype.toArray=function(t,e){this.array||(this.array=new Float32Array(9));var r=e||this.array;return t?(r[0]=this.a,r[1]=this.b,r[2]=0,r[3]=this.c,r[4]=this.d,r[5]=0,r[6]=this.tx,r[7]=this.ty,r[8]=1):(r[0]=this.a,r[1]=this.c,r[2]=this.tx,r[3]=this.b,r[4]=this.d,r[5]=this.ty,r[6]=0,r[7]=0,r[8]=1),r},i.prototype.apply=function(t,e){e=e||new n;var r=t.x,i=t.y;return e.x=this.a*r+this.c*i+this.tx,e.y=this.b*r+this.d*i+this.ty,e},i.prototype.applyInverse=function(t,e){e=e||new n;var r=1/(this.a*this.d+this.c*-this.b),i=t.x,o=t.y;return e.x=this.d*r*i+-this.c*r*o+(this.ty*this.c-this.tx*this.d)*r,e.y=this.a*r*o+-this.b*r*i+(-this.ty*this.a+this.tx*this.b)*r,e},i.prototype.translate=function(t,e){return this.tx+=t,this.ty+=e,this},i.prototype.scale=function(t,e){return this.a*=t,this.d*=e,this.c*=t,this.b*=e,this.tx*=t,this.ty*=e,this},i.prototype.rotate=function(t){var e=Math.cos(t),r=Math.sin(t),i=this.a,n=this.c,o=this.tx;return this.a=i*e-this.b*r,this.b=i*r+this.b*e,this.c=n*e-this.d*r,this.d=n*r+this.d*e,this.tx=o*e-this.ty*r,this.ty=o*r+this.ty*e,this},i.prototype.append=function(t){var e=this.a,r=this.b,i=this.c,n=this.d;return this.a=t.a*e+t.b*i,this.b=t.a*r+t.b*n,this.c=t.c*e+t.d*i,this.d=t.c*r+t.d*n,this.tx=t.tx*e+t.ty*i+this.tx,this.ty=t.tx*r+t.ty*n+this.ty,this},i.prototype.setTransform=function(t,e,r,i,n,o,s,a,h){var u,l,c,p,d,f,v,g,m,y;return d=Math.sin(s),f=Math.cos(s),v=Math.cos(h),g=Math.sin(h),m=-Math.sin(a),y=Math.cos(a),u=f*n,l=d*n,c=-d*o,p=f*o,this.a=v*u+g*c,this.b=v*l+g*p,this.c=m*u+y*c,this.d=m*l+y*p,this.tx=t+(r*u+i*c),this.ty=e+(r*l+i*p),this},i.prototype.prepend=function(t){var e=this.tx;if(1!==t.a||0!==t.b||0!==t.c||1!==t.d){var r=this.a,i=this.c;this.a=r*t.a+this.b*t.c,this.b=r*t.b+this.b*t.d,this.c=i*t.a+this.d*t.c,this.d=i*t.b+this.d*t.d}return this.tx=e*t.a+this.ty*t.c+t.tx,this.ty=e*t.b+this.ty*t.d+t.ty,this},i.prototype.invert=function(){var t=this.a,e=this.b,r=this.c,i=this.d,n=this.tx,o=t*i-e*r;return this.a=i/o,this.b=-e/o,this.c=-r/o,this.d=t/o,this.tx=(r*this.ty-i*n)/o,this.ty=-(t*this.ty-e*n)/o,this},i.prototype.identity=function(){return this.a=1,this.b=0,this.c=0,this.d=1,this.tx=0,this.ty=0,this},i.prototype.clone=function(){var t=new i;return t.a=this.a,t.b=this.b,t.c=this.c,t.d=this.d,t.tx=this.tx,t.ty=this.ty,t},i.prototype.copy=function(t){return t.a=this.a,t.b=this.b,t.c=this.c,t.d=this.d,t.tx=this.tx,t.ty=this.ty,t},i.IDENTITY=new i,i.TEMP_MATRIX=new i},{"./Point":47}],47:[function(t,e,r){function i(t,e){this.x=t||0,this.y=e||0}i.prototype.constructor=i,e.exports=i,i.prototype.clone=function(){return new i(this.x,this.y)},i.prototype.copy=function(t){this.set(t.x,t.y)},i.prototype.equals=function(t){return t.x===this.x&&t.y===this.y},i.prototype.set=function(t,e){this.x=t||0,this.y=e||(0!==e?this.x:0)}},{}],48:[function(t,e,r){e.exports={Point:t("./Point"),Matrix:t("./Matrix"),Circle:t("./shapes/Circle"),Ellipse:t("./shapes/Ellipse"),Polygon:t("./shapes/Polygon"),Rectangle:t("./shapes/Rectangle"),RoundedRectangle:t("./shapes/RoundedRectangle")}},{"./Matrix":46,"./Point":47,"./shapes/Circle":49,"./shapes/Ellipse":50,"./shapes/Polygon":51,"./shapes/Rectangle":52,"./shapes/RoundedRectangle":53}],49:[function(t,e,r){function i(t,e,r){this.x=t||0,this.y=e||0,this.radius=r||0,this.type=o.SHAPES.CIRC}var n=t("./Rectangle"),o=t("../../const");i.prototype.constructor=i,e.exports=i,i.prototype.clone=function(){return new i(this.x,this.y,this.radius)},i.prototype.contains=function(t,e){if(this.radius<=0)return!1;var r=this.x-t,i=this.y-e,n=this.radius*this.radius;return r*=r,i*=i,n>=r+i},i.prototype.getBounds=function(){return new n(this.x-this.radius,this.y-this.radius,2*this.radius,2*this.radius)}},{"../../const":38,"./Rectangle":52}],50:[function(t,e,r){function i(t,e,r,i){this.x=t||0,this.y=e||0,this.width=r||0,this.height=i||0,this.type=o.SHAPES.ELIP}var n=t("./Rectangle"),o=t("../../const");i.prototype.constructor=i,e.exports=i,i.prototype.clone=function(){return new i(this.x,this.y,this.width,this.height)},i.prototype.contains=function(t,e){if(this.width<=0||this.height<=0)return!1;var r=(t-this.x)/this.width,i=(e-this.y)/this.height;return r*=r,i*=i,1>=r+i},i.prototype.getBounds=function(){return new n(this.x-this.width,this.y-this.height,this.width,this.height)}},{"../../const":38,"./Rectangle":52}],51:[function(t,e,r){function i(t){var e=t;if(!Array.isArray(e)){e=new Array(arguments.length);for(var r=0;rs;s++)i.push(e[s].x,e[s].y);e=i}this.closed=!0,this.points=e,this.type=o.SHAPES.POLY}var n=t("../Point"),o=t("../../const");i.prototype.constructor=i,e.exports=i,i.prototype.clone=function(){return new i(this.points.slice())},i.prototype.contains=function(t,e){for(var r=!1,i=this.points.length/2,n=0,o=i-1;i>n;o=n++){var s=this.points[2*n],a=this.points[2*n+1],h=this.points[2*o],u=this.points[2*o+1],l=a>e!=u>e&&(h-s)*(e-a)/(u-a)+s>t;l&&(r=!r)}return r}},{"../../const":38,"../Point":47}],52:[function(t,e,r){function i(t,e,r,i){this.x=t||0,this.y=e||0,this.width=r||0,this.height=i||0,this.type=n.SHAPES.RECT}var n=t("../../const");i.prototype.constructor=i,e.exports=i,i.EMPTY=new i(0,0,0,0),i.prototype.clone=function(){return new i(this.x,this.y,this.width,this.height)},i.prototype.contains=function(t,e){return this.width<=0||this.height<=0?!1:t>=this.x&&t=this.y&&e=this.x&&t<=this.x+this.width&&e>=this.y&&e<=this.y+this.height?!0:!1}},{"../../const":38}],54:[function(t,e,r){function i(t,e,r){n.call(this),r=r||15e3,t=t||15e3;var i=16384;r>i&&(r=i),r>t&&(r=t),this._properties=[!1,!0,!1,!1,!1],this._maxSize=t,this._batchSize=r,this._buffers=null,this._bufferToUpdate=0,this.interactiveChildren=!1,this.blendMode=o.BLEND_MODES.NORMAL,this.roundPixels=!0,this.setProperties(e)}var n=t("../display/Container"),o=t("../const");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.setProperties=function(t){t&&(this._properties[0]="scale"in t?!!t.scale:this._properties[0],this._properties[1]="position"in t?!!t.position:this._properties[1],this._properties[2]="rotation"in t?!!t.rotation:this._properties[2],this._properties[3]="uvs"in t?!!t.uvs:this._properties[3],this._properties[4]="alpha"in t?!!t.alpha:this._properties[4])},i.prototype.updateTransform=function(){this.displayObjectUpdateTransform()},i.prototype.renderWebGL=function(t){this.visible&&!(this.worldAlpha<=0)&&this.children.length&&this.renderable&&(t.setObjectRenderer(t.plugins.particle),t.plugins.particle.render(this))},i.prototype.onChildrenChange=function(t){var e=Math.floor(t/this._batchSize);er;r+=6,i+=4)this.indices[r+0]=i+0,this.indices[r+1]=i+1,this.indices[r+2]=i+2,this.indices[r+3]=i+0,this.indices[r+4]=i+2,this.indices[r+5]=i+3;this.shader=null,this.indexBuffer=null,this.properties=null,this.tempMatrix=new h.Matrix}var n=t("../../renderers/webgl/utils/ObjectRenderer"),o=t("../../renderers/webgl/WebGLRenderer"),s=t("./ParticleShader"),a=t("./ParticleBuffer"),h=t("../../math");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,o.registerPlugin("particle",i),i.prototype.onContextChange=function(){var t=this.renderer.gl;this.shader=new s(this.renderer.shaderManager),this.indexBuffer=t.createBuffer(),t.bindBuffer(t.ELEMENT_ARRAY_BUFFER,this.indexBuffer),t.bufferData(t.ELEMENT_ARRAY_BUFFER,this.indices,t.STATIC_DRAW),this.properties=[{attribute:this.shader.attributes.aVertexPosition,size:2,uploadFunction:this.uploadVertices,offset:0},{attribute:this.shader.attributes.aPositionCoord,size:2,uploadFunction:this.uploadPosition,offset:0},{attribute:this.shader.attributes.aRotation,size:1,uploadFunction:this.uploadRotation,offset:0},{attribute:this.shader.attributes.aTextureCoord,size:2,uploadFunction:this.uploadUvs,offset:0},{attribute:this.shader.attributes.aColor,size:1,uploadFunction:this.uploadAlpha,offset:0}]},i.prototype.start=function(){var t=this.renderer.gl;t.activeTexture(t.TEXTURE0),t.bindBuffer(t.ELEMENT_ARRAY_BUFFER,this.indexBuffer);var e=this.shader;this.renderer.shaderManager.setShader(e)},i.prototype.render=function(t){var e=t.children,r=e.length,i=t._maxSize,n=t._batchSize;if(0!==r){r>i&&(r=i),t._buffers||(t._buffers=this.generateBuffers(t)),this.renderer.blendModeManager.setBlendMode(t.blendMode);var o=this.renderer.gl,s=t.worldTransform.copy(this.tempMatrix);s.prepend(this.renderer.currentRenderTarget.projectionMatrix),o.uniformMatrix3fv(this.shader.uniforms.projectionMatrix._location,!1,s.toArray(!0)),o.uniform1f(this.shader.uniforms.uAlpha._location,t.worldAlpha);var a=e[0]._texture.baseTexture;if(a._glTextures[o.id])o.bindTexture(o.TEXTURE_2D,a._glTextures[o.id]);else{if(!this.renderer.updateTexture(a))return;t._properties[0]&&t._properties[3]||(t._bufferToUpdate=0)}for(var h=0,u=0;r>h;h+=n,u+=1){var l=r-h;l>n&&(l=n);var c=t._buffers[u];c.uploadDynamic(e,h,l),t._bufferToUpdate===u&&(c.uploadStatic(e,h,l),t._bufferToUpdate=u+1),c.bind(this.shader),o.drawElements(o.TRIANGLES,6*l,o.UNSIGNED_SHORT,0),this.renderer.drawCount++}}},i.prototype.generateBuffers=function(t){var e,r=this.renderer.gl,i=[],n=t._maxSize,o=t._batchSize,s=t._properties;for(e=0;n>e;e+=o)i.push(new a(r,this.properties,s,o));return i},i.prototype.uploadVertices=function(t,e,r,i,n,o){for(var s,a,h,u,l,c,p,d,f,v=0;r>v;v++)s=t[e+v],a=s._texture,u=s.scale.x,l=s.scale.y,a.trim?(h=a.trim,p=h.x-s.anchor.x*h.width,c=p+a.crop.width,f=h.y-s.anchor.y*h.height,d=f+a.crop.height):(c=a._frame.width*(1-s.anchor.x),p=a._frame.width*-s.anchor.x,d=a._frame.height*(1-s.anchor.y),f=a._frame.height*-s.anchor.y),i[o]=p*u,i[o+1]=f*l,i[o+n]=c*u,i[o+n+1]=f*l,i[o+2*n]=c*u,i[o+2*n+1]=d*l,i[o+3*n]=p*u,i[o+3*n+1]=d*l,o+=4*n},i.prototype.uploadPosition=function(t,e,r,i,n,o){for(var s=0;r>s;s++){var a=t[e+s].position;i[o]=a.x,i[o+1]=a.y,i[o+n]=a.x,i[o+n+1]=a.y,i[o+2*n]=a.x,i[o+2*n+1]=a.y,i[o+3*n]=a.x,i[o+3*n+1]=a.y,o+=4*n}},i.prototype.uploadRotation=function(t,e,r,i,n,o){for(var s=0;r>s;s++){var a=t[e+s].rotation;i[o]=a,i[o+n]=a,i[o+2*n]=a,i[o+3*n]=a,o+=4*n}},i.prototype.uploadUvs=function(t,e,r,i,n,o){for(var s=0;r>s;s++){var a=t[e+s]._texture._uvs;a?(i[o]=a.x0,i[o+1]=a.y0,i[o+n]=a.x1,i[o+n+1]=a.y1,i[o+2*n]=a.x2,i[o+2*n+1]=a.y2,i[o+3*n]=a.x3,i[o+3*n+1]=a.y3,o+=4*n):(i[o]=0,i[o+1]=0,i[o+n]=0,i[o+n+1]=0,i[o+2*n]=0,i[o+2*n+1]=0,i[o+3*n]=0,i[o+3*n+1]=0,o+=4*n)}},i.prototype.uploadAlpha=function(t,e,r,i,n,o){for(var s=0;r>s;s++){var a=t[e+s].alpha;i[o]=a,i[o+n]=a,i[o+2*n]=a,i[o+3*n]=a,o+=4*n}},i.prototype.destroy=function(){this.renderer.gl&&this.renderer.gl.deleteBuffer(this.indexBuffer),n.prototype.destroy.apply(this,arguments),this.shader.destroy(),this.indices=null,this.tempMatrix=null}},{"../../math":48,"../../renderers/webgl/WebGLRenderer":65,"../../renderers/webgl/utils/ObjectRenderer":80,"./ParticleBuffer":55,"./ParticleShader":57}],57:[function(t,e,r){function i(t){n.call(this,t,["attribute vec2 aVertexPosition;","attribute vec2 aTextureCoord;","attribute float aColor;","attribute vec2 aPositionCoord;","attribute vec2 aScale;","attribute float aRotation;","uniform mat3 projectionMatrix;","varying vec2 vTextureCoord;","varying float vColor;","void main(void){"," vec2 v = aVertexPosition;"," v.x = (aVertexPosition.x) * cos(aRotation) - (aVertexPosition.y) * sin(aRotation);"," v.y = (aVertexPosition.x) * sin(aRotation) + (aVertexPosition.y) * cos(aRotation);"," v = v + aPositionCoord;"," gl_Position = vec4((projectionMatrix * vec3(v, 1.0)).xy, 0.0, 1.0);"," vTextureCoord = aTextureCoord;"," vColor = aColor;","}"].join("\n"),["precision lowp float;","varying vec2 vTextureCoord;","varying float vColor;","uniform sampler2D uSampler;","uniform float uAlpha;","void main(void){"," vec4 color = texture2D(uSampler, vTextureCoord) * vColor * uAlpha;"," if (color.a == 0.0) discard;"," gl_FragColor = color;","}"].join("\n"),{uAlpha:{type:"1f",value:1}},{aPositionCoord:0,aRotation:0})}var n=t("../../renderers/webgl/shaders/TextureShader");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i},{"../../renderers/webgl/shaders/TextureShader":78}],58:[function(t,e,r){function i(t,e,r,i){if(a.call(this),n.sayHello(t),i)for(var h in s.DEFAULT_RENDER_OPTIONS)"undefined"==typeof i[h]&&(i[h]=s.DEFAULT_RENDER_OPTIONS[h]);else i=s.DEFAULT_RENDER_OPTIONS;this.type=s.RENDERER_TYPE.UNKNOWN,this.width=e||800,this.height=r||600,this.view=i.view||document.createElement("canvas"),this.resolution=i.resolution,this.transparent=i.transparent,this.autoResize=i.autoResize||!1,this.blendModes=null,this.preserveDrawingBuffer=i.preserveDrawingBuffer,this.clearBeforeRender=i.clearBeforeRender,this.roundPixels=i.roundPixels,this._backgroundColor=0,this._backgroundColorRgba=[0,0,0,0],this._backgroundColorString="#000000",this.backgroundColor=i.backgroundColor||this._backgroundColor,this._tempDisplayObjectParent={worldTransform:new o.Matrix,worldAlpha:1,children:[]},this._lastObjectRendered=this._tempDisplayObjectParent}var n=t("../utils"),o=t("../math"),s=t("../const"),a=t("eventemitter3");i.prototype=Object.create(a.prototype),i.prototype.constructor=i,e.exports=i,Object.defineProperties(i.prototype,{backgroundColor:{get:function(){return this._backgroundColor},set:function(t){this._backgroundColor=t,this._backgroundColorString=n.hex2string(t),n.hex2rgb(t,this._backgroundColorRgba)}}}),i.prototype.resize=function(t,e){this.width=t*this.resolution,this.height=e*this.resolution,this.view.width=this.width,this.view.height=this.height,this.autoResize&&(this.view.style.width=this.width/this.resolution+"px",this.view.style.height=this.height/this.resolution+"px")},i.prototype.destroy=function(t){t&&this.view.parentNode&&this.view.parentNode.removeChild(this.view),this.type=s.RENDERER_TYPE.UNKNOWN,this.width=0,this.height=0,this.view=null,this.resolution=0,this.transparent=!1,this.autoResize=!1,this.blendModes=null,this.preserveDrawingBuffer=!1,this.clearBeforeRender=!1,this.roundPixels=!1,this._backgroundColor=0, -this._backgroundColorRgba=null,this._backgroundColorString=null}},{"../const":38,"../math":48,"../utils":98,eventemitter3:25}],59:[function(t,e,r){function i(t,e,r){r=r||{},n.call(this,"Canvas",t,e,r),this.type=h.RENDERER_TYPE.CANVAS,this.context=this.view.getContext("2d",{alpha:this.transparent}),this.refresh=!0,this.maskManager=new o,this.smoothProperty="imageSmoothingEnabled",this.context.imageSmoothingEnabled||(this.context.webkitImageSmoothingEnabled?this.smoothProperty="webkitImageSmoothingEnabled":this.context.mozImageSmoothingEnabled?this.smoothProperty="mozImageSmoothingEnabled":this.context.oImageSmoothingEnabled?this.smoothProperty="oImageSmoothingEnabled":this.context.msImageSmoothingEnabled&&(this.smoothProperty="msImageSmoothingEnabled")),this.initPlugins(),this._mapBlendModes(),this._tempDisplayObjectParent={worldTransform:new a.Matrix,worldAlpha:1},this.resize(t,e)}var n=t("../SystemRenderer"),o=t("./utils/CanvasMaskManager"),s=t("../../utils"),a=t("../../math"),h=t("../../const");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,s.pluginTarget.mixin(i),i.prototype.render=function(t){this.emit("prerender");var e=t.parent;this._lastObjectRendered=t,t.parent=this._tempDisplayObjectParent,t.updateTransform(),t.parent=e,this.context.setTransform(1,0,0,1,0,0),this.context.globalAlpha=1,this.context.globalCompositeOperation=this.blendModes[h.BLEND_MODES.NORMAL],navigator.isCocoonJS&&this.view.screencanvas&&(this.context.fillStyle="black",this.context.clear()),this.clearBeforeRender&&(this.transparent?this.context.clearRect(0,0,this.width,this.height):(this.context.fillStyle=this._backgroundColorString,this.context.fillRect(0,0,this.width,this.height))),this.renderDisplayObject(t,this.context),this.emit("postrender")},i.prototype.destroy=function(t){this.destroyPlugins(),n.prototype.destroy.call(this,t),this.context=null,this.refresh=!0,this.maskManager.destroy(),this.maskManager=null,this.smoothProperty=null},i.prototype.renderDisplayObject=function(t,e){var r=this.context;this.context=e,t.renderCanvas(this),this.context=r},i.prototype.resize=function(t,e){n.prototype.resize.call(this,t,e),this.smoothProperty&&(this.context[this.smoothProperty]=h.SCALE_MODES.DEFAULT===h.SCALE_MODES.LINEAR)},i.prototype._mapBlendModes=function(){this.blendModes||(this.blendModes={},s.canUseNewCanvasBlendModes()?(this.blendModes[h.BLEND_MODES.NORMAL]="source-over",this.blendModes[h.BLEND_MODES.ADD]="lighter",this.blendModes[h.BLEND_MODES.MULTIPLY]="multiply",this.blendModes[h.BLEND_MODES.SCREEN]="screen",this.blendModes[h.BLEND_MODES.OVERLAY]="overlay",this.blendModes[h.BLEND_MODES.DARKEN]="darken",this.blendModes[h.BLEND_MODES.LIGHTEN]="lighten",this.blendModes[h.BLEND_MODES.COLOR_DODGE]="color-dodge",this.blendModes[h.BLEND_MODES.COLOR_BURN]="color-burn",this.blendModes[h.BLEND_MODES.HARD_LIGHT]="hard-light",this.blendModes[h.BLEND_MODES.SOFT_LIGHT]="soft-light",this.blendModes[h.BLEND_MODES.DIFFERENCE]="difference",this.blendModes[h.BLEND_MODES.EXCLUSION]="exclusion",this.blendModes[h.BLEND_MODES.HUE]="hue",this.blendModes[h.BLEND_MODES.SATURATION]="saturate",this.blendModes[h.BLEND_MODES.COLOR]="color",this.blendModes[h.BLEND_MODES.LUMINOSITY]="luminosity"):(this.blendModes[h.BLEND_MODES.NORMAL]="source-over",this.blendModes[h.BLEND_MODES.ADD]="lighter",this.blendModes[h.BLEND_MODES.MULTIPLY]="source-over",this.blendModes[h.BLEND_MODES.SCREEN]="source-over",this.blendModes[h.BLEND_MODES.OVERLAY]="source-over",this.blendModes[h.BLEND_MODES.DARKEN]="source-over",this.blendModes[h.BLEND_MODES.LIGHTEN]="source-over",this.blendModes[h.BLEND_MODES.COLOR_DODGE]="source-over",this.blendModes[h.BLEND_MODES.COLOR_BURN]="source-over",this.blendModes[h.BLEND_MODES.HARD_LIGHT]="source-over",this.blendModes[h.BLEND_MODES.SOFT_LIGHT]="source-over",this.blendModes[h.BLEND_MODES.DIFFERENCE]="source-over",this.blendModes[h.BLEND_MODES.EXCLUSION]="source-over",this.blendModes[h.BLEND_MODES.HUE]="source-over",this.blendModes[h.BLEND_MODES.SATURATION]="source-over",this.blendModes[h.BLEND_MODES.COLOR]="source-over",this.blendModes[h.BLEND_MODES.LUMINOSITY]="source-over"))}},{"../../const":38,"../../math":48,"../../utils":98,"../SystemRenderer":58,"./utils/CanvasMaskManager":62}],60:[function(t,e,r){function i(t,e){this.canvas=document.createElement("canvas"),this.context=this.canvas.getContext("2d"),this.canvas.width=t,this.canvas.height=e}i.prototype.constructor=i,e.exports=i,Object.defineProperties(i.prototype,{width:{get:function(){return this.canvas.width},set:function(t){this.canvas.width=t}},height:{get:function(){return this.canvas.height},set:function(t){this.canvas.height=t}}}),i.prototype.clear=function(){this.context.setTransform(1,0,0,1,0,0),this.context.clearRect(0,0,this.canvas.width,this.canvas.height)},i.prototype.resize=function(t,e){this.canvas.width=t,this.canvas.height=e},i.prototype.destroy=function(){this.context=null,this.canvas=null}},{}],61:[function(t,e,r){var i=t("../../../const"),n={};e.exports=n,n.renderGraphics=function(t,e){var r=t.worldAlpha;t.dirty&&(this.updateGraphicsTint(t),t.dirty=!1);for(var n=0;nA?A:C,e.beginPath(),e.moveTo(T,E+C),e.lineTo(T,E+w-C),e.quadraticCurveTo(T,E+w,T+C,E+w),e.lineTo(T+S-C,E+w),e.quadraticCurveTo(T+S,E+w,T+S,E+w-C),e.lineTo(T+S,E+C),e.quadraticCurveTo(T+S,E,T+S-C,E),e.lineTo(T+C,E),e.quadraticCurveTo(T,E,T,E+C),e.closePath(),(o.fillColor||0===o.fillColor)&&(e.globalAlpha=o.fillAlpha*r,e.fillStyle="#"+("00000"+(0|a).toString(16)).substr(-6),e.fill()),o.lineWidth&&(e.globalAlpha=o.lineAlpha*r,e.strokeStyle="#"+("00000"+(0|h).toString(16)).substr(-6),e.stroke())}}},n.renderGraphicsMask=function(t,e){var r=t.graphicsData.length;if(0!==r){e.beginPath();for(var n=0;r>n;n++){var o=t.graphicsData[n],s=o.shape;if(o.type===i.SHAPES.POLY){var a=s.points;e.moveTo(a[0],a[1]);for(var h=1;hw?w:S,e.moveTo(b,_+S),e.lineTo(b,_+E-S),e.quadraticCurveTo(b,_+E,b+S,_+E),e.lineTo(b+T-S,_+E),e.quadraticCurveTo(b+T,_+E,b+T,_+E-S),e.lineTo(b+T,_+S),e.quadraticCurveTo(b+T,_,b+T-S,_),e.lineTo(b+S,_),e.quadraticCurveTo(b,_,b,_+S),e.closePath()}}}},n.updateGraphicsTint=function(t){if(16777215!==t.tint||t._prevTint!==t.tint){t._prevTint=t.tint;for(var e=(t.tint>>16&255)/255,r=(t.tint>>8&255)/255,i=(255&t.tint)/255,n=0;n>16&255)/255*e*255<<16)+((s>>8&255)/255*r*255<<8)+(255&s)/255*i*255,o._lineTint=((a>>16&255)/255*e*255<<16)+((a>>8&255)/255*r*255<<8)+(255&a)/255*i*255}}}},{"../../../const":38}],62:[function(t,e,r){function i(){}var n=t("./CanvasGraphics");i.prototype.constructor=i,e.exports=i,i.prototype.pushMask=function(t,e){e.context.save();var r=t.alpha,i=t.worldTransform,o=e.resolution;e.context.setTransform(i.a*o,i.b*o,i.c*o,i.d*o,i.tx*o,i.ty*o),t.texture||(n.renderGraphicsMask(t,e.context),e.context.clip()),t.worldAlpha=r},i.prototype.popMask=function(t){t.context.restore()},i.prototype.destroy=function(){}},{"./CanvasGraphics":61}],63:[function(t,e,r){var i=t("../../../utils"),n={};e.exports=n,n.getTintedTexture=function(t,e){var r=t.texture;e=n.roundColor(e);var i="#"+("00000"+(0|e).toString(16)).substr(-6);if(r.tintCache=r.tintCache||{},r.tintCache[i])return r.tintCache[i];var o=n.canvas||document.createElement("canvas");if(n.tintMethod(r,e,o),n.convertTintToImage){var s=new Image;s.src=o.toDataURL(),r.tintCache[i]=s}else r.tintCache[i]=o,n.canvas=null;return o},n.tintWithMultiply=function(t,e,r){var i=r.getContext("2d"),n=t.baseTexture.resolution,o=t.crop.clone();o.x*=n,o.y*=n,o.width*=n,o.height*=n,r.width=o.width,r.height=o.height,i.fillStyle="#"+("00000"+(0|e).toString(16)).substr(-6),i.fillRect(0,0,o.width,o.height),i.globalCompositeOperation="multiply",i.drawImage(t.baseTexture.source,o.x,o.y,o.width,o.height,0,0,o.width,o.height),i.globalCompositeOperation="destination-atop",i.drawImage(t.baseTexture.source,o.x,o.y,o.width,o.height,0,0,o.width,o.height)},n.tintWithOverlay=function(t,e,r){var i=r.getContext("2d"),n=t.baseTexture.resolution,o=t.crop.clone();o.x*=n,o.y*=n,o.width*=n,o.height*=n,r.width=o.width,r.height=o.height,i.globalCompositeOperation="copy",i.fillStyle="#"+("00000"+(0|e).toString(16)).substr(-6),i.fillRect(0,0,o.width,o.height),i.globalCompositeOperation="destination-atop",i.drawImage(t.baseTexture.source,o.x,o.y,o.width,o.height,0,0,o.width,o.height)},n.tintWithPerPixel=function(t,e,r){var n=r.getContext("2d"),o=t.baseTexture.resolution,s=t.crop.clone();s.x*=o,s.y*=o,s.width*=o,s.height*=o,r.width=s.width,r.height=s.height,n.globalCompositeOperation="copy",n.drawImage(t.baseTexture.source,s.x,s.y,s.width,s.height,0,0,s.width,s.height);for(var a=i.hex2rgb(e),h=a[0],u=a[1],l=a[2],c=n.getImageData(0,0,s.width,s.height),p=c.data,d=0;de;++e)this.shaders[e].syncUniform(t)}},{"../shaders/TextureShader":78}],67:[function(t,e,r){function i(){n.call(this,"\nprecision mediump float;\n\nattribute vec2 aVertexPosition;\nattribute vec2 aTextureCoord;\nattribute vec4 aColor;\n\nuniform mat3 projectionMatrix;\nuniform vec2 resolution;\n\nvarying vec2 vTextureCoord;\nvarying vec4 vColor;\n\nvarying vec2 vResolution;\n\n//texcoords computed in vertex step\n//to avoid dependent texture reads\nvarying vec2 v_rgbNW;\nvarying vec2 v_rgbNE;\nvarying vec2 v_rgbSW;\nvarying vec2 v_rgbSE;\nvarying vec2 v_rgbM;\n\n\nvoid texcoords(vec2 fragCoord, vec2 resolution,\n out vec2 v_rgbNW, out vec2 v_rgbNE,\n out vec2 v_rgbSW, out vec2 v_rgbSE,\n out vec2 v_rgbM) {\n vec2 inverseVP = 1.0 / resolution.xy;\n v_rgbNW = (fragCoord + vec2(-1.0, -1.0)) * inverseVP;\n v_rgbNE = (fragCoord + vec2(1.0, -1.0)) * inverseVP;\n v_rgbSW = (fragCoord + vec2(-1.0, 1.0)) * inverseVP;\n v_rgbSE = (fragCoord + vec2(1.0, 1.0)) * inverseVP;\n v_rgbM = vec2(fragCoord * inverseVP);\n}\n\nvoid main(void){\n gl_Position = vec4((projectionMatrix * vec3(aVertexPosition, 1.0)).xy, 0.0, 1.0);\n vTextureCoord = aTextureCoord;\n vColor = vec4(aColor.rgb * aColor.a, aColor.a);\n vResolution = resolution;\n\n //compute the texture coords and send them to varyings\n texcoords(aTextureCoord * resolution, resolution, v_rgbNW, v_rgbNE, v_rgbSW, v_rgbSE, v_rgbM);\n}\n",'precision lowp float;\n\n\n/**\nBasic FXAA implementation based on the code on geeks3d.com with the\nmodification that the texture2DLod stuff was removed since it\'s\nunsupported by WebGL.\n\n--\n\nFrom:\nhttps://github.com/mitsuhiko/webgl-meincraft\n\nCopyright (c) 2011 by Armin Ronacher.\n\nSome rights reserved.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are\nmet:\n\n * Redistributions of source code must retain the above copyright\n notice, this list of conditions and the following disclaimer.\n\n * Redistributions in binary form must reproduce the above\n copyright notice, this list of conditions and the following\n disclaimer in the documentation and/or other materials provided\n with the distribution.\n\n * The names of the contributors may not be used to endorse or\n promote products derived from this software without specific\n prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\nLIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\nA PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\nOWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\nSPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\nLIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\nDATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\nTHEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\nOF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n*/\n\n#ifndef FXAA_REDUCE_MIN\n #define FXAA_REDUCE_MIN (1.0/ 128.0)\n#endif\n#ifndef FXAA_REDUCE_MUL\n #define FXAA_REDUCE_MUL (1.0 / 8.0)\n#endif\n#ifndef FXAA_SPAN_MAX\n #define FXAA_SPAN_MAX 8.0\n#endif\n\n//optimized version for mobile, where dependent\n//texture reads can be a bottleneck\nvec4 fxaa(sampler2D tex, vec2 fragCoord, vec2 resolution,\n vec2 v_rgbNW, vec2 v_rgbNE,\n vec2 v_rgbSW, vec2 v_rgbSE,\n vec2 v_rgbM) {\n vec4 color;\n mediump vec2 inverseVP = vec2(1.0 / resolution.x, 1.0 / resolution.y);\n vec3 rgbNW = texture2D(tex, v_rgbNW).xyz;\n vec3 rgbNE = texture2D(tex, v_rgbNE).xyz;\n vec3 rgbSW = texture2D(tex, v_rgbSW).xyz;\n vec3 rgbSE = texture2D(tex, v_rgbSE).xyz;\n vec4 texColor = texture2D(tex, v_rgbM);\n vec3 rgbM = texColor.xyz;\n vec3 luma = vec3(0.299, 0.587, 0.114);\n float lumaNW = dot(rgbNW, luma);\n float lumaNE = dot(rgbNE, luma);\n float lumaSW = dot(rgbSW, luma);\n float lumaSE = dot(rgbSE, luma);\n float lumaM = dot(rgbM, luma);\n float lumaMin = min(lumaM, min(min(lumaNW, lumaNE), min(lumaSW, lumaSE)));\n float lumaMax = max(lumaM, max(max(lumaNW, lumaNE), max(lumaSW, lumaSE)));\n\n mediump vec2 dir;\n dir.x = -((lumaNW + lumaNE) - (lumaSW + lumaSE));\n dir.y = ((lumaNW + lumaSW) - (lumaNE + lumaSE));\n\n float dirReduce = max((lumaNW + lumaNE + lumaSW + lumaSE) *\n (0.25 * FXAA_REDUCE_MUL), FXAA_REDUCE_MIN);\n\n float rcpDirMin = 1.0 / (min(abs(dir.x), abs(dir.y)) + dirReduce);\n dir = min(vec2(FXAA_SPAN_MAX, FXAA_SPAN_MAX),\n max(vec2(-FXAA_SPAN_MAX, -FXAA_SPAN_MAX),\n dir * rcpDirMin)) * inverseVP;\n\n vec3 rgbA = 0.5 * (\n texture2D(tex, fragCoord * inverseVP + dir * (1.0 / 3.0 - 0.5)).xyz +\n texture2D(tex, fragCoord * inverseVP + dir * (2.0 / 3.0 - 0.5)).xyz);\n vec3 rgbB = rgbA * 0.5 + 0.25 * (\n texture2D(tex, fragCoord * inverseVP + dir * -0.5).xyz +\n texture2D(tex, fragCoord * inverseVP + dir * 0.5).xyz);\n\n float lumaB = dot(rgbB, luma);\n if ((lumaB < lumaMin) || (lumaB > lumaMax))\n color = vec4(rgbA, texColor.a);\n else\n color = vec4(rgbB, texColor.a);\n return color;\n}\n\n\nvarying vec2 vTextureCoord;\nvarying vec4 vColor;\nvarying vec2 vResolution;\n\n//texcoords computed in vertex step\n//to avoid dependent texture reads\nvarying vec2 v_rgbNW;\nvarying vec2 v_rgbNE;\nvarying vec2 v_rgbSW;\nvarying vec2 v_rgbSE;\nvarying vec2 v_rgbM;\n\nuniform sampler2D uSampler;\n\n\nvoid main(void){\n\n gl_FragColor = fxaa(uSampler, vTextureCoord * vResolution, vResolution, v_rgbNW, v_rgbNE, v_rgbSW, v_rgbSE, v_rgbM);\n\n}\n',{resolution:{type:"v2",value:{x:1,y:1}}})}var n=t("./AbstractFilter");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.applyFilter=function(t,e,r){var i=t.filterManager,n=this.getShader(t);i.applyFilter(n,e,r)}},{"./AbstractFilter":66}],68:[function(t,e,r){function i(t){var e=new o.Matrix;n.call(this,"attribute vec2 aVertexPosition;\nattribute vec2 aTextureCoord;\nattribute vec4 aColor;\n\nuniform mat3 projectionMatrix;\nuniform mat3 otherMatrix;\n\nvarying vec2 vMaskCoord;\nvarying vec2 vTextureCoord;\nvarying vec4 vColor;\n\nvoid main(void)\n{\n gl_Position = vec4((projectionMatrix * vec3(aVertexPosition, 1.0)).xy, 0.0, 1.0);\n vTextureCoord = aTextureCoord;\n vMaskCoord = ( otherMatrix * vec3( aTextureCoord, 1.0) ).xy;\n vColor = vec4(aColor.rgb * aColor.a, aColor.a);\n}\n","precision lowp float;\n\nvarying vec2 vMaskCoord;\nvarying vec2 vTextureCoord;\nvarying vec4 vColor;\n\nuniform sampler2D uSampler;\nuniform float alpha;\nuniform sampler2D mask;\n\nvoid main(void)\n{\n // check clip! this will stop the mask bleeding out from the edges\n vec2 text = abs( vMaskCoord - 0.5 );\n text = step(0.5, text);\n float clip = 1.0 - max(text.y, text.x);\n vec4 original = texture2D(uSampler, vTextureCoord);\n vec4 masky = texture2D(mask, vMaskCoord);\n original *= (masky.r * masky.a * alpha * clip);\n gl_FragColor = original;\n}\n",{mask:{type:"sampler2D",value:t._texture},alpha:{type:"f",value:1},otherMatrix:{type:"mat3",value:e.toArray(!0)}}),this.maskSprite=t,this.maskMatrix=e}var n=t("./AbstractFilter"),o=t("../../../math");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.applyFilter=function(t,e,r){var i=t.filterManager;this.uniforms.mask.value=this.maskSprite._texture,i.calculateMappedMatrix(e.frame,this.maskSprite,this.maskMatrix),this.uniforms.otherMatrix.value=this.maskMatrix.toArray(!0),this.uniforms.alpha.value=this.maskSprite.worldAlpha;var n=this.getShader(t);i.applyFilter(n,e,r)},Object.defineProperties(i.prototype,{map:{get:function(){return this.uniforms.mask.value},set:function(t){this.uniforms.mask.value=t}},offset:{get:function(){return this.uniforms.offset.value},set:function(t){this.uniforms.offset.value=t}}})},{"../../../math":48,"./AbstractFilter":66}],69:[function(t,e,r){function i(t){n.call(this,t),this.currentBlendMode=99999}var n=t("./WebGLManager");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.setBlendMode=function(t){if(this.currentBlendMode===t)return!1;this.currentBlendMode=t;var e=this.renderer.blendModes[this.currentBlendMode];return this.renderer.gl.blendFunc(e[0],e[1]),!0}},{"./WebGLManager":74}],70:[function(t,e,r){function i(t){n.call(this,t),this.filterStack=[],this.filterStack.push({renderTarget:t.currentRenderTarget,filter:[],bounds:null}),this.texturePool=[],this.textureSize=new h.Rectangle(0,0,t.width,t.height),this.currentFrame=null}var n=t("./WebGLManager"),o=t("../utils/RenderTarget"),s=t("../../../const"),a=t("../utils/Quad"),h=t("../../../math");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.onContextChange=function(){this.texturePool.length=0;var t=this.renderer.gl;this.quad=new a(t)},i.prototype.setFilterStack=function(t){this.filterStack=t},i.prototype.pushFilter=function(t,e){var r=t.filterArea?t.filterArea.clone():t.getBounds();r.x=0|r.x,r.y=0|r.y,r.width=0|r.width,r.height=0|r.height;var i=0|e[0].padding;if(r.x-=i,r.y-=i,r.width+=2*i,r.height+=2*i,this.renderer.currentRenderTarget.transform){var n=this.renderer.currentRenderTarget.transform;r.x+=n.tx,r.y+=n.ty,this.capFilterArea(r),r.x-=n.tx,r.y-=n.ty}else this.capFilterArea(r);if(r.width>0&&r.height>0){this.currentFrame=r;var o=this.getRenderTarget();this.renderer.setRenderTarget(o),o.clear(),this.filterStack.push({renderTarget:o,filter:e})}else this.filterStack.push({renderTarget:null,filter:e})},i.prototype.popFilter=function(){var t=this.filterStack.pop(),e=this.filterStack[this.filterStack.length-1],r=t.renderTarget;if(t.renderTarget){var i=e.renderTarget,n=this.renderer.gl;this.currentFrame=r.frame,this.quad.map(this.textureSize,r.frame),n.bindBuffer(n.ARRAY_BUFFER,this.quad.vertexBuffer),n.bindBuffer(n.ELEMENT_ARRAY_BUFFER,this.quad.indexBuffer);var o=t.filter;if(n.vertexAttribPointer(this.renderer.shaderManager.defaultShader.attributes.aVertexPosition,2,n.FLOAT,!1,0,0),n.vertexAttribPointer(this.renderer.shaderManager.defaultShader.attributes.aTextureCoord,2,n.FLOAT,!1,0,32),n.vertexAttribPointer(this.renderer.shaderManager.defaultShader.attributes.aColor,4,n.FLOAT,!1,0,64),this.renderer.blendModeManager.setBlendMode(s.BLEND_MODES.NORMAL),1===o.length)o[0].uniforms.dimensions&&(o[0].uniforms.dimensions.value[0]=this.renderer.width,o[0].uniforms.dimensions.value[1]=this.renderer.height,o[0].uniforms.dimensions.value[2]=this.quad.vertices[0],o[0].uniforms.dimensions.value[3]=this.quad.vertices[5]),o[0].applyFilter(this.renderer,r,i),this.returnRenderTarget(r);else{for(var a=r,h=this.getRenderTarget(!0),u=0;uthis.textureSize.width&&(t.width=this.textureSize.width-t.x),t.y+t.height>this.textureSize.height&&(t.height=this.textureSize.height-t.y)},i.prototype.resize=function(t,e){this.textureSize.width=t,this.textureSize.height=e;for(var r=0;re;++e)t._array[2*e]=o[e].x,t._array[2*e+1]=o[e].y;s.uniform2fv(i,t._array);break;case"v3v":for(t._array||(t._array=new Float32Array(3*o.length)),e=0,r=o.length;r>e;++e)t._array[3*e]=o[e].x,t._array[3*e+1]=o[e].y,t._array[3*e+2]=o[e].z;s.uniform3fv(i,t._array);break;case"v4v":for(t._array||(t._array=new Float32Array(4*o.length)),e=0,r=o.length;r>e;++e)t._array[4*e]=o[e].x,t._array[4*e+1]=o[e].y,t._array[4*e+2]=o[e].z,t._array[4*e+3]=o[e].w;s.uniform4fv(i,t._array);break;case"t":case"sampler2D":if(!t.value||!t.value.baseTexture.hasLoaded)break;s.activeTexture(s["TEXTURE"+this.textureCount]);var a=t.value.baseTexture._glTextures[s.id];a||(this.initSampler2D(t),a=t.value.baseTexture._glTextures[s.id]),s.bindTexture(s.TEXTURE_2D,a),s.uniform1i(t._location,this.textureCount),this.textureCount++;break;default:console.warn("Pixi.js Shader Warning: Unknown uniform type: "+t.type)}},i.prototype.syncUniforms=function(){this.textureCount=1;for(var t in this.uniforms)this.syncUniform(this.uniforms[t])},i.prototype.initSampler2D=function(t){var e=this.gl,r=t.value.baseTexture;if(r.hasLoaded)if(t.textureData){var i=t.textureData;r._glTextures[e.id]=e.createTexture(),e.bindTexture(e.TEXTURE_2D,r._glTextures[e.id]),e.pixelStorei(e.UNPACK_PREMULTIPLY_ALPHA_WEBGL,r.premultipliedAlpha),e.texImage2D(e.TEXTURE_2D,0,i.luminance?e.LUMINANCE:e.RGBA,e.RGBA,e.UNSIGNED_BYTE,r.source),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MAG_FILTER,i.magFilter?i.magFilter:e.LINEAR),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MIN_FILTER,i.wrapS?i.wrapS:e.CLAMP_TO_EDGE),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,i.wrapS?i.wrapS:e.CLAMP_TO_EDGE),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,i.wrapT?i.wrapT:e.CLAMP_TO_EDGE)}else this.shaderManager.renderer.updateTexture(r)},i.prototype.destroy=function(){this.gl.deleteProgram(this.program),this.gl=null,this.uniforms=null,this.attributes=null,this.vertexSrc=null,this.fragmentSrc=null},i.prototype._glCompile=function(t,e){var r=this.gl.createShader(t);return this.gl.shaderSource(r,e),this.gl.compileShader(r),this.gl.getShaderParameter(r,this.gl.COMPILE_STATUS)?r:(console.log(this.gl.getShaderInfoLog(r)),null)}},{"../../../utils":98}],78:[function(t,e,r){function i(t,e,r,o,s){var a={uSampler:{type:"sampler2D",value:0},projectionMatrix:{type:"mat3",value:new Float32Array([1,0,0,0,1,0,0,0,1])}};if(o)for(var h in o)a[h]=o[h];var u={aVertexPosition:0,aTextureCoord:0,aColor:0};if(s)for(var l in s)u[l]=s[l];e=e||i.defaultVertexSrc,r=r||i.defaultFragmentSrc,n.call(this,t,e,r,a,u)}var n=t("./Shader");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.defaultVertexSrc=["precision lowp float;","attribute vec2 aVertexPosition;","attribute vec2 aTextureCoord;","attribute vec4 aColor;","uniform mat3 projectionMatrix;","varying vec2 vTextureCoord;","varying vec4 vColor;","void main(void){"," gl_Position = vec4((projectionMatrix * vec3(aVertexPosition, 1.0)).xy, 0.0, 1.0);"," vTextureCoord = aTextureCoord;"," vColor = vec4(aColor.rgb * aColor.a, aColor.a);","}"].join("\n"),i.defaultFragmentSrc=["precision lowp float;","varying vec2 vTextureCoord;","varying vec4 vColor;","uniform sampler2D uSampler;","void main(void){"," gl_FragColor = texture2D(uSampler, vTextureCoord) * vColor ;","}"].join("\n")},{"./Shader":77}],79:[function(t,e,r){function i(t){vertexSrc=i.defaultVertexSrc,fragmentSrc=i.defaultFragmentSrc,console.log(fragmentSrc),n.call(this,t,vertexSrc,fragmentSrc)}var n=t("pixi-gl-core").GLShader;i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.defaultVertexSrc=["precision lowp float;","attribute vec2 aVertexPosition;","attribute vec2 aTextureCoord;","attribute vec4 aColor;","uniform mat3 projectionMatrix;","varying vec2 vTextureCoord;","varying vec4 vColor;","void main(void){"," gl_Position = vec4((projectionMatrix * vec3(aVertexPosition, 1.0)).xy, 0.0, 1.0);"," vTextureCoord = aTextureCoord;"," vColor = vec4(aColor.rgb * aColor.a, aColor.a);","}"].join("\n"),i.defaultFragmentSrc=["precision lowp float;","varying vec2 vTextureCoord;","varying vec4 vColor;","uniform sampler2D uSampler;","void main(void){"," gl_FragColor = texture2D(uSampler, vTextureCoord) * vColor ;","}"].join("\n")},{"pixi-gl-core":1}],80:[function(t,e,r){function i(t){n.call(this,t)}var n=t("../managers/WebGLManager");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.start=function(){},i.prototype.stop=function(){this.flush()},i.prototype.flush=function(){},i.prototype.render=function(t){}},{"../managers/WebGLManager":74}],81:[function(t,e,r){function i(t){this.gl=t,this.vertices=new Float32Array([0,0,200,0,200,200,0,200]),this.uvs=new Float32Array([0,0,1,0,1,1,0,1]),this.colors=new Float32Array([1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]),this.indices=new Uint16Array([0,1,2,0,3,2]),this.vertexBuffer=t.createBuffer(),this.indexBuffer=t.createBuffer(),t.bindBuffer(t.ARRAY_BUFFER,this.vertexBuffer),t.bufferData(t.ARRAY_BUFFER,128,t.DYNAMIC_DRAW),t.bindBuffer(t.ELEMENT_ARRAY_BUFFER,this.indexBuffer),t.bufferData(t.ELEMENT_ARRAY_BUFFER,this.indices,t.STATIC_DRAW),this.upload()}i.prototype.constructor=i,i.prototype.map=function(t,e){var r=0,i=0;this.uvs[0]=r,this.uvs[1]=i,this.uvs[2]=r+e.width/t.width,this.uvs[3]=i,this.uvs[4]=r+e.width/t.width,this.uvs[5]=i+e.height/t.height,this.uvs[6]=r,this.uvs[7]=i+e.height/t.height,r=e.x,i=e.y,this.vertices[0]=r,this.vertices[1]=i,this.vertices[2]=r+e.width,this.vertices[3]=i,this.vertices[4]=r+e.width,this.vertices[5]=i+e.height,this.vertices[6]=r,this.vertices[7]=i+e.height,this.upload()},i.prototype.upload=function(){var t=this.gl;t.bindBuffer(t.ARRAY_BUFFER,this.vertexBuffer),t.bufferSubData(t.ARRAY_BUFFER,0,this.vertices),t.bufferSubData(t.ARRAY_BUFFER,32,this.uvs),t.bufferSubData(t.ARRAY_BUFFER,64,this.colors)},i.prototype.destroy=function(){var t=this.gl;t.deleteBuffer(this.vertexBuffer),t.deleteBuffer(this.indexBuffer)},e.exports=i},{}],82:[function(t,e,r){var i=t("../../../math"),n=(t("../../../utils"),t("../../../const")),o=t("pixi-gl-core").GLTexture,s=t("pixi-gl-core").GLFramebuffer,a=t("./StencilMaskStack"),h=function(t,e,r,h,u,l){if(this.gl=t,this.frameBuffer=null,this.texture=null,this.clearColor=[0,0,0,0],this.size=new i.Rectangle(0,0,1,1),this.resolution=u||n.RESOLUTION,this.projectionMatrix=new i.Matrix,this.transform=null,this.frame=null,this.stencilBuffer=null,this.stencilMaskStack=new a,this.filterStack=[{renderTarget:this,filter:[],bounds:this.size}],this.scaleMode=h||n.SCALE_MODES.DEFAULT,this.root=l,this.frameBuffer=new s.createRGBA(t,100,100),this.root)this.frameBuffer.framebuffer=null;else{var c=new o(t);c.enableLinearScaling(),c.enableWrapClamp(),this.frameBuffer.enableTexture(c),this.texture=c.texture}this.resize(e,r)};h.prototype.constructor=h,e.exports=h,h.prototype.clear=function(t){var e=t||this.clearColor;this.frameBuffer.clear(e[0],e[1],e[2],e[3])},h.prototype.attachStencilBuffer=function(){this.root||this.frameBuffer.enableStencil()},h.prototype.activate=function(){var t=this.gl;this.frameBuffer.bind();var e=this.frame||this.size;this.calculateProjection(e),this.transform&&this.projectionMatrix.append(this.transform),t.viewport(0,0,e.width*this.resolution,e.height*this.resolution)},h.prototype.calculateProjection=function(t){var e=this.projectionMatrix;e.identity(),this.root?(e.a=1/t.width*2,e.d=-1/t.height*2,e.tx=-1-t.x*e.a,e.ty=1-t.y*e.d):(e.a=1/t.width*2,e.d=1/t.height*2,e.tx=-1-t.x*e.a,e.ty=-1-t.y*e.d)},h.prototype.resize=function(t,e){if(t=0|t,e=0|e,this.size.width!==t||this.size.height!==e){this.size.width=t,this.size.height=e,this.frameBuffer.resize(t*this.resolution,e*this.resolution);var r=this.frame||this.size;this.calculateProjection(r)}},h.prototype.destroy=function(){this.gl;this.frameBuffer.destroy(),this.frameBuffer=null,this.texture=null}},{"../../../const":38,"../../../math":48,"../../../utils":98,"./StencilMaskStack":83,"pixi-gl-core":1}],83:[function(t,e,r){function i(){this.stencilStack=[],this.reverse=!0,this.count=0}i.prototype.constructor=i,e.exports=i},{}],84:[function(t,e,r){function i(t,e){return e=e||{},e[CONST.BLEND_MODES.NORMAL]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.ADD]=[t.SRC_ALPHA,t.DST_ALPHA],e[CONST.BLEND_MODES.MULTIPLY]=[t.DST_COLOR,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.SCREEN]=[t.SRC_ALPHA,t.ONE],e[CONST.BLEND_MODES.OVERLAY]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.DARKEN]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.LIGHTEN]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.COLOR_DODGE]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.COLOR_BURN]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.HARD_LIGHT]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.SOFT_LIGHT]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.DIFFERENCE]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.EXCLUSION]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.HUE]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.SATURATION]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.COLOR]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.LUMINOSITY]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e}CONST=t("../../../const"),e.exports=i},{"../../../const":38}],85:[function(t,e,r){function i(t,e){e=e||{},e[CONST.DRAW_MODES.POINTS]=t.POINTS,e[CONST.DRAW_MODES.LINES]=t.LINES,e[CONST.DRAW_MODES.LINE_LOOP]=t.LINE_LOOP,e[CONST.DRAW_MODES.LINE_STRIP]=t.LINE_STRIP,e[CONST.DRAW_MODES.TRIANGLES]=t.TRIANGLES,e[CONST.DRAW_MODES.TRIANGLE_STRIP]=t.TRIANGLE_STRIP,e[CONST.DRAW_MODES.TRIANGLE_FAN]=t.TRIANGLE_FAN}CONST=t("../../../const"),e.exports=i},{"../../../const":38}],86:[function(t,e,r){function i(t){s.call(this),this.anchor=new n.Point,this._texture=null,this._width=0,this._height=0,this.tint=16777215,this.blendMode=u.BLEND_MODES.NORMAL,this.shader=null,this.cachedTint=16777215,this.texture=t||o.EMPTY,this.textureDirty=!0,this.vertexDirty=!0,this.vertexData=new Float32Array(8)}var n=t("../math"),o=t("../textures/Texture"),s=t("../display/Container"),a=t("../renderers/canvas/utils/CanvasTinter"),h=t("../utils"),u=t("../const"),l=new n.Point;i.prototype=Object.create(s.prototype),i.prototype.constructor=i,e.exports=i,Object.defineProperties(i.prototype,{width:{get:function(){return Math.abs(this.scale.x)*this.texture._frame.width},set:function(t){var e=h.sign(this.scale.x)||1;this.scale.x=e*t/this.texture._frame.width,this._width=t}},height:{get:function(){return Math.abs(this.scale.y)*this.texture._frame.height},set:function(t){var e=h.sign(this.scale.y)||1;this.scale.y=e*t/this.texture._frame.height,this._height=t}},texture:{get:function(){return this._texture},set:function(t){this._texture!==t&&(this._texture=t,this.cachedTint=16777215,this.textureDirty=!0,t&&(t.baseTexture.hasLoaded?this._onTextureUpdate():t.once("update",this._onTextureUpdate,this)))}}}),i.prototype._onTextureUpdate=function(){this.textureDirty=!0,this._width&&(this.scale.x=h.sign(this.scale.x)*this._width/this.texture.frame.width),this._height&&(this.scale.y=h.sign(this.scale.y)*this._height/this.texture.frame.height)},i.prototype.caclulateVertices=function(){var t,e,r,i,n=this._texture,o=this.worldTransform,s=o.a,a=o.b,h=o.c,u=o.d,l=o.tx,c=o.ty,p=this.vertexData,d=n.trim;d?(e=d.x-this.anchor.x*d.width,t=e+n.crop.width,i=d.y-this.anchor.y*d.height,r=i+n.crop.height):(t=n._frame.width*(1-this.anchor.x),e=n._frame.width*-this.anchor.x,r=n._frame.height*(1-this.anchor.y),i=n._frame.height*-this.anchor.y),p[0]=s*e+h*i+l,p[1]=u*i+a*e+c,p[2]=s*t+h*i+l,p[3]=u*i+a*t+c,p[4]=s*t+h*r+l,p[5]=u*r+a*t+c,p[6]=s*e+h*r+l,p[7]=u*r+a*e+c},i.prototype._renderWebGL=function(t){this.textureDirty&&(this.textureDirty=!1,this._onTextureUpdate(),this.vertexDirty=!0),this.vertexDirty&&(this.vertexDirty=!1,this.caclulateVertices()),t.setObjectRenderer(t.plugins.sprite),t.plugins.sprite.render(this)},i.prototype.getBounds=function(t){if(!this._currentBounds){this.vertexDirty&&(this.vertexDirty=!1,this.caclulateVertices());var e,r,i,n,o=this.vertexData,s=o[0],a=o[1],h=o[2],u=o[3],l=o[4],c=o[5],p=o[6],d=o[7];if(e=s,e=e>h?h:e,e=e>l?l:e,e=e>p?p:e,i=a,i=i>u?u:i,i=i>c?c:i,i=i>d?d:i,r=s,r=h>r?h:r,r=l>r?l:r,r=p>r?p:r,n=a,n=u>n?u:n,n=c>n?c:n,n=d>n?d:n,this.children.length){var f=this.containerGetBounds();w0=f.x,w1=f.x+f.width,h0=f.y,h1=f.y+f.height,e=ew1?r:w1,n=n>h1?n:h1}var v=this._bounds;v.x=e,v.width=r-e,v.y=i,v.height=n-i,this._currentBounds=v}return this._currentBounds},i.prototype.getLocalBounds=function(){return this._bounds.x=-this._texture._frame.width*this.anchor.x,this._bounds.y=-this._texture._frame.height*this.anchor.y,this._bounds.width=this._texture._frame.width,this._bounds.height=this._texture._frame.height,this._bounds},i.prototype.containsPoint=function(t){this.worldTransform.applyInverse(t,l);var e,r=this._texture._frame.width,i=this._texture._frame.height,n=-r*this.anchor.x;return l.x>n&&l.xe&&l.yr;r++)this.groups[r]={textures:[],textureCount:0,ids:[],size:0,start:0,blend:0};this.currentGroup=this.groups[this.groupCount++],this.currentTexture=null}var n=t("../../renderers/webgl/utils/ObjectRenderer"),o=t("../../renderers/webgl/WebGLRenderer"),s=(t("../../renderers/webgl/shaders/_TextureShader"),t("../../utils/createIndicesForQuads")),a=t("./generateMultiTextureShader"),h=t("../../const"),u=t("pixi-gl-core"),l=2;i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,o.registerPlugin("sprite",i),i.prototype.onContextChange=function(){var t=this.renderer.gl;this._shader=a(t,l),this.shader=this.renderer.shaderManager.defaultShader,this.vertexBuffer=u.GLBuffer.createVertexBuffer(t,null,t.DYNAMIC_DRAW),this.indexBuffer=u.GLBuffer.createIndexBuffer(t,this.indices,t.STATIC_DRAW),this.vao=new u.VertexArrayObject(t),this.vao.addIndex(this.indexBuffer),this.vao.addAttribute(this.vertexBuffer,this._shader.attributes.aVertexPosition,t.FLOAT,!1,this.vertByteSize,0),this.vao.addAttribute(this.vertexBuffer,this._shader.attributes.aTextureCoord,t.UNSIGNED_SHORT,!0,this.vertByteSize,8),this.vao.addAttribute(this.vertexBuffer,this._shader.attributes.aColor,t.UNSIGNED_BYTE,!0,this.vertByteSize,12),this.vao.addAttribute(this.vertexBuffer,this._shader.attributes.aTextureId,t.FLOAT,!1,this.vertByteSize,16),this.currentBlendMode=99999},i.prototype.render=function(t){this.currentIndex>=this.size&&this.flush();var e=t.texture._uvs;if(e){var r=(this.groups,t.texture.baseTexture),i=this.currentGroup;if(this.currentTexture!==r&&(this.currentTexture=r,!r._enabled)){if(r._enabled=!0,r._id=this.textureCount,this.textureCount===l){for(var n=0;n>16)+(65280&t.tint)+((255&t.tint)<<16)+(255*t.worldAlpha<<24);a[o++]=h[0],a[o++]=h[1],this.uvs[o++]=e.uvs_uint32[0],s[o++]=u,a[o++]=r._id,a[o++]=h[2],a[o++]=h[3],this.uvs[o++]=e.uvs_uint32[1],s[o++]=u,a[o++]=r._id,a[o++]=h[4],a[o++]=h[5],this.uvs[o++]=e.uvs_uint32[2],s[o++]=u,a[o++]=r._id,a[o++]=h[6],a[o++]=h[7],this.uvs[o++]=e.uvs_uint32[3],s[o++]=u,a[o++]=r._id,this.sprites[this.currentBatchSize++]=t}},i.prototype.renderSprites=function(t){for(var e=0;e.5*this.size)this.vertexBuffer.upload(this.vertices,0,!0);else{var e=this.positions.subarray(0,this.currentIndex*this.vertByteSize);this.vertexBuffer.upload(e,0,!0)}for(this.renderer.bindShader(this._shader),this.renderer.blendModeManager.setBlendMode(0),t=0;tu;u++)h[u]=u;return a.bind(),a.uniforms.uSamplers=h,a}function n(t){var e="vec4 getSampleFromArray(sampler2D textures[%%], int ndx, vec2 uv) {\n\nvec4 color;";e+="\n", -e+="\n";for(var r=0;t>r;r++)r>0&&(e+="\nelse "),t-1>r&&(e+="if(ndx == "+r+")"),e+="\n{",e+="\n color = texture2D(textures["+r+"], uv);",e+="\n}";return e+="\n",e+="\n",e+="return color;",e+="\n}"}var o=t("pixi-gl-core").GLShader,s=["varying vec2 vTextureCoord;","varying vec4 vColor;","varying float vTextureId;","uniform sampler2D uSamplers[%%];","void main(void){","gl_FragColor = getSampleFromArray(uSamplers, int(vTextureId), vTextureCoord) * vColor;","}"].join("\n");e.exports=i},{"pixi-gl-core":1}],89:[function(t,e,r){function i(t,e,r){this.canvas=document.createElement("canvas"),this.context=this.canvas.getContext("2d"),this.resolution=r||h.RESOLUTION,this._text=null,this._style=null;var i=o.fromCanvas(this.canvas);i.trim=new s.Rectangle,n.call(this,i),this.text=t,this.style=e}var n=t("../sprites/Sprite"),o=t("../textures/Texture"),s=t("../math"),a=t("../utils"),h=t("../const");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.fontPropertiesCache={},i.fontPropertiesCanvas=document.createElement("canvas"),i.fontPropertiesContext=i.fontPropertiesCanvas.getContext("2d"),Object.defineProperties(i.prototype,{width:{get:function(){return this.dirty&&this.updateText(),this.scale.x*this._texture._frame.width},set:function(t){this.scale.x=t/this._texture._frame.width,this._width=t}},height:{get:function(){return this.dirty&&this.updateText(),this.scale.y*this._texture._frame.height},set:function(t){this.scale.y=t/this._texture._frame.height,this._height=t}},style:{get:function(){return this._style},set:function(t){t=t||{},"number"==typeof t.fill&&(t.fill=a.hex2string(t.fill)),"number"==typeof t.stroke&&(t.stroke=a.hex2string(t.stroke)),"number"==typeof t.dropShadowColor&&(t.dropShadowColor=a.hex2string(t.dropShadowColor)),t.font=t.font||"bold 20pt Arial",t.fill=t.fill||"black",t.align=t.align||"left",t.stroke=t.stroke||"black",t.strokeThickness=t.strokeThickness||0,t.wordWrap=t.wordWrap||!1,t.wordWrapWidth=t.wordWrapWidth||100,t.dropShadow=t.dropShadow||!1,t.dropShadowColor=t.dropShadowColor||"#000000",t.dropShadowAngle=void 0!==t.dropShadowAngle?t.dropShadowAngle:Math.PI/6,t.dropShadowDistance=void 0!==t.dropShadowDistance?t.dropShadowDistance:5,t.dropShadowBlur=void 0!==t.dropShadowBlur?t.dropShadowBlur:0,t.padding=t.padding||0,t.textBaseline=t.textBaseline||"alphabetic",t.lineJoin=t.lineJoin||"miter",t.miterLimit=t.miterLimit||10,this._style=t,this.dirty=!0}},text:{get:function(){return this._text},set:function(t){t=t.toString()||" ",this._text!==t&&(this._text=t,this.dirty=!0)}}}),i.prototype.updateText=function(){var t=this._style;this.context.font=t.font;for(var e=t.wordWrap?this.wordWrap(this._text):this._text,r=e.split(/(?:\r\n|\r|\n)/),i=new Array(r.length),n=0,o=this.determineFontProperties(t.font),s=0;s0?(this.context.shadowColor=t.dropShadowColor,this.context.shadowBlur=t.dropShadowBlur):this.context.fillStyle=t.dropShadowColor;var d=Math.cos(t.dropShadowAngle)*t.dropShadowDistance,f=Math.sin(t.dropShadowAngle)*t.dropShadowDistance;for(s=0;sh;h++){for(u=0;p>u;u+=4)if(255!==l[d+u]){f=!0;break}if(f)break;d+=p}for(e.ascent=s-h,d=c-p,f=!1,h=a;h>s;h--){for(u=0;p>u;u+=4)if(255!==l[d+u]){f=!0;break}if(f)break;d-=p}e.descent=h-s,e.fontSize=e.ascent+e.descent,i.fontPropertiesCache[t]=e}return e},i.prototype.wordWrap=function(t){for(var e="",r=t.split("\n"),i=this._style.wordWrapWidth,n=0;no?(a>0&&(e+="\n"),e+=s[a],o=i-h):(o-=u,e+=" "+s[a])}n0&&e>0,this.width=this._frame.width=this.crop.width=t,this.height=this._frame.height=this.crop.height=e,r&&(this.baseTexture.width=this.width,this.baseTexture.height=this.height),this.valid&&(this.textureBuffer.resize(this.width,this.height),this.filterManager&&this.filterManager.resize(this.width,this.height)))},i.prototype.clear=function(){this.valid&&(this.renderer.type===l.RENDERER_TYPE.WEBGL&&this.renderer.gl.bindFramebuffer(this.renderer.gl.FRAMEBUFFER,this.textureBuffer.frameBuffer),this.textureBuffer.clear())},i.prototype.renderWebGL=function(t,e,r,i){if(this.valid){if(i=void 0!==i?i:!0,this.textureBuffer.transform=e,this.textureBuffer.activate(),t.worldAlpha=1,i){t.worldTransform.identity(),t.currentBounds=null;var n,o,s=t.children;for(n=0,o=s.length;o>n;++n)s[n].updateTransform()}var a=this.renderer.filterManager;this.renderer.filterManager=this.filterManager,this.renderer.renderDisplayObject(t,this.textureBuffer,r),this.renderer.filterManager=a}},i.prototype.renderCanvas=function(t,e,r,i){if(this.valid){i=!!i;var n=c;n.identity(),e&&n.append(e);var o=t.worldTransform;t.worldTransform=n,t.worldAlpha=1;var s,a,h=t.children;for(s=0,a=h.length;a>s;++s)h[s].updateTransform();r&&this.textureBuffer.clear();var u=this.textureBuffer.context,l=this.renderer.resolution;this.renderer.resolution=this.resolution,this.renderer.renderDisplayObject(t,u),this.renderer.resolution=l,t.worldTransform===n&&(t.worldTransform=o)}},i.prototype.destroy=function(){o.prototype.destroy.call(this,!0),this.textureBuffer.destroy(),this.filterManager&&this.filterManager.destroy(),this.renderer=null},i.prototype.getImage=function(){var t=new Image;return t.src=this.getBase64(),t},i.prototype.getBase64=function(){return this.getCanvas().toDataURL()},i.prototype.getCanvas=function(){if(this.renderer.type===l.RENDERER_TYPE.WEBGL){var t=this.renderer.gl,e=this.textureBuffer.size.width,r=this.textureBuffer.size.height,i=new Uint8Array(4*e*r);t.bindFramebuffer(t.FRAMEBUFFER,this.textureBuffer.frameBuffer),t.readPixels(0,0,e,r,t.RGBA,t.UNSIGNED_BYTE,i),t.bindFramebuffer(t.FRAMEBUFFER,null);var n=new h(e,r),o=n.context.getImageData(0,0,e,r);return o.data.set(i),n.context.putImageData(o,0,0),n.canvas}return this.textureBuffer.canvas},i.prototype.getPixels=function(){var t,e;if(this.renderer.type===l.RENDERER_TYPE.WEBGL){var r=this.renderer.gl;t=this.textureBuffer.size.width,e=this.textureBuffer.size.height;var i=new Uint8Array(4*t*e);return r.bindFramebuffer(r.FRAMEBUFFER,this.textureBuffer.frameBuffer),r.readPixels(0,0,t,e,r.RGBA,r.UNSIGNED_BYTE,i),r.bindFramebuffer(r.FRAMEBUFFER,null),i}return t=this.textureBuffer.canvas.width,e=this.textureBuffer.canvas.height,this.textureBuffer.canvas.getContext("2d").getImageData(0,0,t,e).data},i.prototype.getPixel=function(t,e){if(this.renderer.type===l.RENDERER_TYPE.WEBGL){var r=this.renderer.gl,i=new Uint8Array(4);return r.bindFramebuffer(r.FRAMEBUFFER,this.textureBuffer.frameBuffer),r.readPixels(t,e,1,1,r.RGBA,r.UNSIGNED_BYTE,i),r.bindFramebuffer(r.FRAMEBUFFER,null),i}return this.textureBuffer.canvas.getContext("2d").getImageData(t,e,1,1).data}},{"../const":38,"../math":48,"../renderers/canvas/utils/CanvasBuffer":60,"../renderers/webgl/managers/FilterManager":70,"../renderers/webgl/utils/RenderTarget":82,"./BaseTexture":90,"./Texture":92}],92:[function(t,e,r){function i(t,e,r,n,o){a.call(this),this.noFrame=!1,e||(this.noFrame=!0,e=new h.Rectangle(0,0,1,1)),t instanceof i&&(t=t.baseTexture),this.baseTexture=t,this._frame=e,this.trim=n,this.valid=!1,this.requiresUpdate=!1,this._uvs=null,this.width=0,this.height=0,this.crop=r||e,this.rotate=!!o,t.hasLoaded?(this.noFrame&&(e=new h.Rectangle(0,0,t.width,t.height),t.on("update",this.onBaseTextureUpdated,this)),this.frame=e):t.once("loaded",this.onBaseTextureLoaded,this)}var n=t("./BaseTexture"),o=t("./VideoBaseTexture"),s=t("./TextureUvs"),a=t("eventemitter3"),h=t("../math"),u=t("../utils");i.prototype=Object.create(a.prototype),i.prototype.constructor=i,e.exports=i,Object.defineProperties(i.prototype,{frame:{get:function(){return this._frame},set:function(t){if(this._frame=t,this.noFrame=!1,this.width=t.width,this.height=t.height,!this.trim&&!this.rotate&&(t.x+t.width>this.baseTexture.width||t.y+t.height>this.baseTexture.height))throw new Error("Texture Error: frame does not fit inside the base Texture dimensions "+this);this.valid=t&&t.width&&t.height&&this.baseTexture.hasLoaded,this.trim?(this.width=this.trim.width,this.height=this.trim.height,this._frame.width=this.trim.width,this._frame.height=this.trim.height):this.crop=t,this.valid&&this._updateUvs()}}}),i.prototype.update=function(){this.baseTexture.update()},i.prototype.onBaseTextureLoaded=function(t){this.noFrame?this.frame=new h.Rectangle(0,0,t.width,t.height):this.frame=this._frame,this.emit("update",this)},i.prototype.onBaseTextureUpdated=function(t){this._frame.width=t.width,this._frame.height=t.height,this.emit("update",this)},i.prototype.destroy=function(t){this.baseTexture&&(t&&this.baseTexture.destroy(),this.baseTexture.off("update",this.onBaseTextureUpdated,this),this.baseTexture.off("loaded",this.onBaseTextureLoaded,this),this.baseTexture=null),this._frame=null,this._uvs=null,this.trim=null,this.crop=null,this.valid=!1,this.off("dispose",this.dispose,this),this.off("update",this.update,this)},i.prototype.clone=function(){return new i(this.baseTexture,this.frame,this.crop,this.trim,this.rotate)},i.prototype._updateUvs=function(){this._uvs||(this._uvs=new s),this._uvs.set(this.crop,this.baseTexture,this.rotate)},i.fromImage=function(t,e,r){var o=u.TextureCache[t];return o||(o=new i(n.fromImage(t,e,r)),u.TextureCache[t]=o),o},i.fromFrame=function(t){var e=u.TextureCache[t];if(!e)throw new Error('The frameId "'+t+'" does not exist in the texture cache');return e},i.fromCanvas=function(t,e){return new i(n.fromCanvas(t,e))},i.fromVideo=function(t,e){return"string"==typeof t?i.fromVideoUrl(t,e):new i(o.fromVideo(t,e))},i.fromVideoUrl=function(t,e){return new i(o.fromUrl(t,e))},i.addTextureToCache=function(t,e){u.TextureCache[e]=t},i.removeTextureFromCache=function(t){var e=u.TextureCache[t];return delete u.TextureCache[t],delete u.BaseTextureCache[t],e},i.EMPTY=new i(new n)},{"../math":48,"../utils":98,"./BaseTexture":90,"./TextureUvs":93,"./VideoBaseTexture":94,eventemitter3:25}],93:[function(t,e,r){function i(){this.x0=0,this.y0=0,this.x1=1,this.y1=0,this.x2=1,this.y2=1,this.x3=0,this.y3=1,this.xy0_uint32=0,this.xy1_uint32=0,this.xy2_uint32=0,this.xy3_uint32=0,this.uvs_uint32=new Uint32Array(4)}e.exports=i,i.prototype.set=function(t,e,r){var i=e.width,n=e.height;r?(this.x0=(t.x+t.height)/i,this.y0=t.y/n,this.x1=(t.x+t.height)/i,this.y1=(t.y+t.width)/n,this.x2=t.x/i,this.y2=(t.y+t.width)/n,this.x3=t.x/i,this.y3=t.y/n):(this.x0=t.x/i,this.y0=t.y/n,this.x1=(t.x+t.width)/i,this.y1=t.y/n,this.x2=(t.x+t.width)/i,this.y2=(t.y+t.height)/n,this.x3=t.x/i,this.y3=(t.y+t.height)/n),this.uvs_uint32[0]=(65535*this.y0&65535)<<16|65535*this.x0&65535,this.uvs_uint32[1]=(65535*this.y1&65535)<<16|65535*this.x1&65535,this.uvs_uint32[2]=(65535*this.y2&65535)<<16|65535*this.x2&65535,this.uvs_uint32[3]=(65535*this.y3&65535)<<16|65535*this.x3&65535}},{}],94:[function(t,e,r){function i(t,e){if(!t)throw new Error("No video source element specified.");(t.readyState===t.HAVE_ENOUGH_DATA||t.readyState===t.HAVE_FUTURE_DATA)&&t.width&&t.height&&(t.complete=!0),o.call(this,t,e),this.autoUpdate=!1,this._onUpdate=this._onUpdate.bind(this),this._onCanPlay=this._onCanPlay.bind(this),t.complete||(t.addEventListener("canplay",this._onCanPlay),t.addEventListener("canplaythrough",this._onCanPlay),t.addEventListener("play",this._onPlayStart.bind(this)),t.addEventListener("pause",this._onPlayStop.bind(this))),this.__loaded=!1}function n(t,e){e||(e="video/"+t.substr(t.lastIndexOf(".")+1));var r=document.createElement("source");return r.src=t,r.type=e,r}var o=t("./BaseTexture"),s=t("../utils");i.prototype=Object.create(o.prototype),i.prototype.constructor=i,e.exports=i,i.prototype._onUpdate=function(){this.autoUpdate&&(window.requestAnimationFrame(this._onUpdate),this.update())},i.prototype._onPlayStart=function(){this.autoUpdate||(window.requestAnimationFrame(this._onUpdate),this.autoUpdate=!0)},i.prototype._onPlayStop=function(){this.autoUpdate=!1},i.prototype._onCanPlay=function(){this.hasLoaded=!0,this.source&&(this.source.removeEventListener("canplay",this._onCanPlay),this.source.removeEventListener("canplaythrough",this._onCanPlay),this.width=this.source.videoWidth,this.height=this.source.videoHeight,this.source.play(),this.__loaded||(this.__loaded=!0,this.emit("loaded",this)))},i.prototype.destroy=function(){this.source&&this.source._pixiId&&(delete s.BaseTextureCache[this.source._pixiId],delete this.source._pixiId),o.prototype.destroy.call(this)},i.fromVideo=function(t,e){t._pixiId||(t._pixiId="video_"+s.uid());var r=s.BaseTextureCache[t._pixiId];return r||(r=new i(t,e),s.BaseTextureCache[t._pixiId]=r),r},i.fromUrl=function(t,e){var r=document.createElement("video");if(Array.isArray(t))for(var o=0;othis._maxElapsedMS&&(e=this._maxElapsedMS),this.deltaTime=e*n.TARGET_FPMS*this.speed,this._emitter.emit(s,this.deltaTime),this.lastTime=t},e.exports=i},{"../const":38,eventemitter3:25}],96:[function(t,e,r){var i=t("./Ticker"),n=new i;n.autoStart=!0,e.exports={shared:n,Ticker:i}},{"./Ticker":95}],97:[function(t,e,r){var i=function(t){for(var e=6*t,r=new Uint16Array(e),i=0,n=0;e>i;i+=6,n+=4)r[i+0]=n+0,r[i+1]=n+1,r[i+2]=n+2,r[i+3]=n+0,r[i+4]=n+2,r[i+5]=n+3;return r};e.exports=i},{}],98:[function(t,e,r){var i=t("../const"),n=e.exports={_uid:0,_saidHello:!1,EventEmitter:t("eventemitter3"),pluginTarget:t("./pluginTarget"),async:t("async"),uid:function(){return++n._uid},hex2rgb:function(t,e){return e=e||[],e[0]=(t>>16&255)/255,e[1]=(t>>8&255)/255,e[2]=(255&t)/255,e},hex2string:function(t){return t=t.toString(16),t="000000".substr(0,6-t.length)+t,"#"+t},rgb2hex:function(t){return(255*t[0]<<16)+(255*t[1]<<8)+255*t[2]},canUseNewCanvasBlendModes:function(){if("undefined"==typeof document)return!1;var t="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAQAAAABAQMAAADD8p2OAAAAA1BMVEX/",e="AAAACklEQVQI12NgAAAAAgAB4iG8MwAAAABJRU5ErkJggg==",r=new Image;r.src=t+"AP804Oa6"+e;var i=new Image;i.src=t+"/wCKxvRF"+e;var n=document.createElement("canvas");n.width=6,n.height=1;var o=n.getContext("2d");o.globalCompositeOperation="multiply",o.drawImage(r,0,0),o.drawImage(i,2,0);var s=o.getImageData(2,0,1,1).data;return 255===s[0]&&0===s[1]&&0===s[2]},getNextPowerOfTwo:function(t){if(t>0&&0===(t&t-1))return t;for(var e=1;t>e;)e<<=1;return e},isPowerOfTwo:function(t,e){return t>0&&0===(t&t-1)&&e>0&&0===(e&e-1)},getResolutionOfUrl:function(t){var e=i.RETINA_PREFIX.exec(t);return e?parseFloat(e[1]):1},sayHello:function(t){if(!n._saidHello){if(navigator.userAgent.toLowerCase().indexOf("chrome")>-1){var e=["\n %c %c %c Pixi.js "+i.VERSION+" - ✰ "+t+" ✰ %c %c http://www.pixijs.com/ %c %c ♥%c♥%c♥ \n\n","background: #ff66a5; padding:5px 0;","background: #ff66a5; padding:5px 0;","color: #ff66a5; background: #030307; padding:5px 0;","background: #ff66a5; padding:5px 0;","background: #ffc3dc; padding:5px 0;","background: #ff66a5; padding:5px 0;","color: #ff2424; background: #fff; padding:5px 0;","color: #ff2424; background: #fff; padding:5px 0;","color: #ff2424; background: #fff; padding:5px 0;"];window.console.log.apply(console,e)}else window.console&&window.console.log("Pixi.js "+i.VERSION+" - "+t+" - http://www.pixijs.com/");n._saidHello=!0}},isWebGLSupported:function(){var t={stencil:!0};try{if(!window.WebGLRenderingContext)return!1;var e=document.createElement("canvas"),r=e.getContext("webgl",t)||e.getContext("experimental-webgl",t);return!(!r||!r.getContextAttributes().stencil)}catch(i){return!1}},sign:function(t){return t?0>t?-1:1:0},removeItems:function(t,e,r){var i=t.length;if(!(e>=i||0===r)){r=e+r>i?i-e:r;for(var n=e,o=i-r;o>n;++n)t[n]=t[n+r];t.length=o}},TextureCache:{},BaseTextureCache:{}}},{"../const":38,"./pluginTarget":99,async:16,eventemitter3:25}],99:[function(t,e,r){function i(t){t.__plugins={},t.registerPlugin=function(e,r){t.__plugins[e]=r},t.prototype.initPlugins=function(){this.plugins=this.plugins||{};for(var e in t.__plugins)this.plugins[e]=new t.__plugins[e](this)},t.prototype.destroyPlugins=function(){for(var t in this.plugins)this.plugins[t].destroy(),this.plugins[t]=null;this.plugins=null}}e.exports={mixin:function(t){i(t)}}},{}],100:[function(t,e,r){var i=t("./core"),n=t("./mesh"),o=t("./extras"),s=t("./filters");i.SpriteBatch=function(){throw new ReferenceError("SpriteBatch does not exist any more, please use the new ParticleContainer instead.")},i.AssetLoader=function(){throw new ReferenceError("The loader system was overhauled in pixi v3, please see the new PIXI.loaders.Loader class.")},Object.defineProperties(i,{Stage:{get:function(){return console.warn("You do not need to use a PIXI Stage any more, you can simply render any container."),i.Container}},DisplayObjectContainer:{get:function(){return console.warn("DisplayObjectContainer has been shortened to Container, please use Container from now on."),i.Container}},Strip:{get:function(){return console.warn("The Strip class has been renamed to Mesh and moved to mesh.Mesh, please use mesh.Mesh from now on."),n.Mesh}},Rope:{get:function(){return console.warn("The Rope class has been moved to mesh.Rope, please use mesh.Rope from now on."),n.Rope}},MovieClip:{get:function(){return console.warn("The MovieClip class has been moved to extras.MovieClip, please use extras.MovieClip from now on."),o.MovieClip}},TilingSprite:{get:function(){return console.warn("The TilingSprite class has been moved to extras.TilingSprite, please use extras.TilingSprite from now on."),o.TilingSprite}},BitmapText:{get:function(){return console.warn("The BitmapText class has been moved to extras.BitmapText, please use extras.BitmapText from now on."),o.BitmapText}},blendModes:{get:function(){return console.warn("The blendModes has been moved to BLEND_MODES, please use BLEND_MODES from now on."),i.BLEND_MODES}},scaleModes:{get:function(){return console.warn("The scaleModes has been moved to SCALE_MODES, please use SCALE_MODES from now on."),i.SCALE_MODES}},BaseTextureCache:{get:function(){return console.warn("The BaseTextureCache class has been moved to utils.BaseTextureCache, please use utils.BaseTextureCache from now on."),i.utils.BaseTextureCache}},TextureCache:{get:function(){return console.warn("The TextureCache class has been moved to utils.TextureCache, please use utils.TextureCache from now on."),i.utils.TextureCache}},math:{get:function(){return console.warn("The math namespace is deprecated, please access members already accessible on PIXI."),i}}}),i.Sprite.prototype.setTexture=function(t){this.texture=t,console.warn("setTexture is now deprecated, please use the texture property, e.g : sprite.texture = texture;")},o.BitmapText.prototype.setText=function(t){this.text=t,console.warn("setText is now deprecated, please use the text property, e.g : myBitmapText.text = 'my text';")},i.Text.prototype.setText=function(t){this.text=t,console.warn("setText is now deprecated, please use the text property, e.g : myText.text = 'my text';")},i.Text.prototype.setStyle=function(t){this.style=t,console.warn("setStyle is now deprecated, please use the style property, e.g : myText.style = style;")},i.Texture.prototype.setFrame=function(t){this.frame=t,console.warn("setFrame is now deprecated, please use the frame property, e.g : myTexture.frame = frame;")},Object.defineProperties(s,{AbstractFilter:{get:function(){return console.warn("filters.AbstractFilter is an undocumented alias, please use AbstractFilter from now on."),i.AbstractFilter}},FXAAFilter:{get:function(){return console.warn("filters.FXAAFilter is an undocumented alias, please use FXAAFilter from now on."),i.FXAAFilter}},SpriteMaskFilter:{get:function(){return console.warn("filters.SpriteMaskFilter is an undocumented alias, please use SpriteMaskFilter from now on."),i.SpriteMaskFilter}}}),i.utils.uuid=function(){return console.warn("utils.uuid() is deprecated, please use utils.uid() from now on."),i.utils.uid()}},{"./core":45,"./extras":107,"./filters":124,"./mesh":149}],101:[function(t,e,r){function i(t,e){n.Container.call(this),e=e||{},this.textWidth=0,this.textHeight=0,this._glyphs=[],this._font={tint:void 0!==e.tint?e.tint:16777215,align:e.align||"left",name:null,size:0},this.font=e.font,this._text=t,this.maxWidth=0,this.maxLineHeight=0,this.dirty=!1,this.updateText()}var n=t("../core");i.prototype=Object.create(n.Container.prototype),i.prototype.constructor=i,e.exports=i,Object.defineProperties(i.prototype,{tint:{get:function(){return this._font.tint},set:function(t){this._font.tint="number"==typeof t&&t>=0?t:16777215,this.dirty=!0}},align:{get:function(){return this._font.align},set:function(t){this._font.align=t||"left",this.dirty=!0}},font:{get:function(){return this._font},set:function(t){t&&("string"==typeof t?(t=t.split(" "),this._font.name=1===t.length?t[0]:t.slice(1).join(" "),this._font.size=t.length>=2?parseInt(t[0],10):i.fonts[this._font.name].size):(this._font.name=t.name,this._font.size="number"==typeof t.size?t.size:parseInt(t.size,10)),this.dirty=!0)}},text:{get:function(){return this._text},set:function(t){t=t.toString()||" ",this._text!==t&&(this._text=t,this.dirty=!0)}}}),i.prototype.updateText=function(){for(var t=i.fonts[this._font.name],e=new n.Point,r=null,o=[],s=0,a=0,h=[],u=0,l=this._font.size/t.size,c=-1,p=0,d=0;d0&&e.x*l>this.maxWidth)n.utils.removeItems(o,c,d-c),d=c,c=-1,h.push(s),a=Math.max(a,s),u++,e.x=0,e.y+=t.lineHeight,r=null;else{var v=t.chars[f];v&&(r&&v.kerning[r]&&(e.x+=v.kerning[r]),o.push({texture:v.texture,line:u,charCode:f,position:new n.Point(e.x+v.xOffset,e.y+v.yOffset)}),s=e.x+(v.texture.width+v.xOffset),e.x+=v.xAdvance,p=Math.max(p,v.yOffset+v.texture.height),r=f)}}h.push(s),a=Math.max(a,s);var g=[];for(d=0;u>=d;d++){var m=0;"right"===this._font.align?m=a-h[d]:"center"===this._font.align&&(m=(a-h[d])/2),g.push(m)}var y=o.length,x=this.tint;for(d=0;y>d;d++){var b=this._glyphs[d];b?b.texture=o[d].texture:(b=new n.Sprite(o[d].texture),this._glyphs.push(b)),b.position.x=(o[d].position.x+g[o[d].line])*l,b.position.y=o[d].position.y*l,b.scale.x=b.scale.y=l,b.tint=x,b.parent||this.addChild(b)}for(d=y;dt&&(t+=this._textures.length),t}}}),i.prototype.stop=function(){this.playing&&(this.playing=!1,n.ticker.shared.remove(this.update,this))},i.prototype.play=function(){this.playing||(this.playing=!0,n.ticker.shared.add(this.update,this))},i.prototype.gotoAndStop=function(t){this.stop(),this._currentTime=t,this._texture=this._textures[this.currentFrame]},i.prototype.gotoAndPlay=function(t){this._currentTime=t,this.play()},i.prototype.update=function(t){var e=this.animationSpeed*t;if(null!==this._durations){var r=this._currentTime%1*this._durations[this.currentFrame];for(r+=e/60*1e3;0>r;)this._currentTime--,r+=this._durations[this.currentFrame];var i=Math.sign(this.animationSpeed*t);for(this._currentTime=Math.floor(this._currentTime);r>=this._durations[this.currentFrame];)r-=this._durations[this.currentFrame]*i,this._currentTime+=i;this._currentTime+=r/this._durations[this.currentFrame]}else this._currentTime+=e;this._currentTime<0&&!this.loop?(this.gotoAndStop(0),this.onComplete&&this.onComplete()):this._currentTime>=this._textures.length&&!this.loop?(this.gotoAndStop(this._textures.length-1),this.onComplete&&this.onComplete()):this._texture=this._textures[this.currentFrame]},i.prototype.destroy=function(){this.stop(),n.Sprite.prototype.destroy.call(this)},i.fromFrames=function(t){for(var e=[],r=0;rx?x:t,t=t>_?_:t,t=t>E?E:t,r=y,r=r>b?b:r,r=r>T?T:r,r=r>S?S:r,e=m,e=x>e?x:e,e=_>e?_:e,e=E>e?E:e,i=y,i=b>i?b:i,i=T>i?T:i,i=S>i?S:i;var w=this._bounds;return w.x=t,w.width=e-t,w.y=r,w.height=i-r,this._currentBounds=w,w},i.prototype.containsPoint=function(t){this.worldTransform.applyInverse(t,o);var e,r=this._width,i=this._height,n=-r*this.anchor.x;return o.x>n&&o.xe&&o.y 0.2) n = 65600.0; // :\n if (gray > 0.3) n = 332772.0; // *\n if (gray > 0.4) n = 15255086.0; // o\n if (gray > 0.5) n = 23385164.0; // &\n if (gray > 0.6) n = 15252014.0; // 8\n if (gray > 0.7) n = 13199452.0; // @\n if (gray > 0.8) n = 11512810.0; // #\n\n vec2 p = mod( uv / ( pixelSize * 0.5 ), 2.0) - vec2(1.0);\n col = col * character(n, p);\n\n gl_FragColor = vec4(col, 1.0);\n}\n",{dimensions:{type:"4fv",value:new Float32Array([0,0,0,0])},pixelSize:{type:"1f",value:8}})}var n=t("../../core");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i,Object.defineProperties(i.prototype,{size:{get:function(){return this.uniforms.pixelSize.value},set:function(t){this.uniforms.pixelSize.value=t}}})},{"../../core":45}],109:[function(t,e,r){function i(){n.AbstractFilter.call(this),this.blurXFilter=new o,this.blurYFilter=new s,this.defaultFilter=new n.AbstractFilter}var n=t("../../core"),o=t("../blur/BlurXFilter"),s=t("../blur/BlurYFilter");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.applyFilter=function(t,e,r){var i=t.filterManager.getRenderTarget(!0);this.defaultFilter.applyFilter(t,e,r),this.blurXFilter.applyFilter(t,e,i),t.blendModeManager.setBlendMode(n.BLEND_MODES.SCREEN),this.blurYFilter.applyFilter(t,i,r),t.blendModeManager.setBlendMode(n.BLEND_MODES.NORMAL),t.filterManager.returnRenderTarget(i)},Object.defineProperties(i.prototype,{blur:{get:function(){return this.blurXFilter.blur},set:function(t){this.blurXFilter.blur=this.blurYFilter.blur=t}},blurX:{get:function(){return this.blurXFilter.blur},set:function(t){this.blurXFilter.blur=t}},blurY:{get:function(){return this.blurYFilter.blur},set:function(t){this.blurYFilter.blur=t}}})},{"../../core":45,"../blur/BlurXFilter":112,"../blur/BlurYFilter":113}],110:[function(t,e,r){function i(t,e){n.AbstractFilter.call(this,"attribute vec2 aVertexPosition;\nattribute vec2 aTextureCoord;\nattribute vec4 aColor;\n\nuniform float strength;\nuniform float dirX;\nuniform float dirY;\nuniform mat3 projectionMatrix;\n\nvarying vec2 vTextureCoord;\nvarying vec4 vColor;\nvarying vec2 vBlurTexCoords[3];\n\nvoid main(void)\n{\n gl_Position = vec4((projectionMatrix * vec3((aVertexPosition), 1.0)).xy, 0.0, 1.0);\n vTextureCoord = aTextureCoord;\n\n vBlurTexCoords[0] = aTextureCoord + vec2( (0.004 * strength) * dirX, (0.004 * strength) * dirY );\n vBlurTexCoords[1] = aTextureCoord + vec2( (0.008 * strength) * dirX, (0.008 * strength) * dirY );\n vBlurTexCoords[2] = aTextureCoord + vec2( (0.012 * strength) * dirX, (0.012 * strength) * dirY );\n\n vColor = vec4(aColor.rgb * aColor.a, aColor.a);\n}\n","precision lowp float;\n\nvarying vec2 vTextureCoord;\nvarying vec2 vBlurTexCoords[3];\nvarying vec4 vColor;\n\nuniform sampler2D uSampler;\n\nvoid main(void)\n{\n gl_FragColor = vec4(0.0);\n\n gl_FragColor += texture2D(uSampler, vTextureCoord ) * 0.3989422804014327;\n gl_FragColor += texture2D(uSampler, vBlurTexCoords[ 0]) * 0.2419707245191454;\n gl_FragColor += texture2D(uSampler, vBlurTexCoords[ 1]) * 0.05399096651318985;\n gl_FragColor += texture2D(uSampler, vBlurTexCoords[ 2]) * 0.004431848411938341;\n}\n",{strength:{type:"1f",value:1},dirX:{type:"1f",value:t||0},dirY:{type:"1f",value:e||0}}),this.defaultFilter=new n.AbstractFilter,this.passes=1,this.dirX=t||0,this.dirY=e||0,this.strength=4}var n=t("../../core");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.applyFilter=function(t,e,r,i){var n=this.getShader(t);if(this.uniforms.strength.value=this.strength/4/this.passes*(e.frame.width/e.size.width),1===this.passes)t.filterManager.applyFilter(n,e,r,i);else{var o=t.filterManager.getRenderTarget(!0);t.filterManager.applyFilter(n,e,o,i);for(var s=0;s>16&255)/255,s=(r>>8&255)/255,a=(255&r)/255,h=(i>>16&255)/255,u=(i>>8&255)/255,l=(255&i)/255,c=[.3,.59,.11,0,0,o,s,a,t,0,h,u,l,e,0,o-h,s-u,a-l,0,0];this._loadMatrix(c,n)},i.prototype.night=function(t,e){t=t||.1;var r=[-2*t,-t,0,0,0,-t,0,t,0,0,0,t,2*t,0,0,0,0,0,1,0];this._loadMatrix(r,e)},i.prototype.predator=function(t,e){var r=[11.224130630493164*t,-4.794486999511719*t,-2.8746118545532227*t,0*t,.40342438220977783*t,-3.6330697536468506*t,9.193157196044922*t,-2.951810836791992*t,0*t,-1.316135048866272*t,-3.2184197902679443*t,-4.2375030517578125*t,7.476448059082031*t,0*t,.8044459223747253*t,0,0,0,1,0];this._loadMatrix(r,e)},i.prototype.lsd=function(t){var e=[2,-.4,.5,0,0,-.5,2,-.4,0,0,-.4,-.5,3,0,0,0,0,0,1,0];this._loadMatrix(e,t)},i.prototype.reset=function(){var t=[1,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,1,0];this._loadMatrix(t,!1)},Object.defineProperties(i.prototype,{matrix:{get:function(){return this.uniforms.m.value},set:function(t){this.uniforms.m.value=t}}})},{"../../core":45}],116:[function(t,e,r){function i(){n.AbstractFilter.call(this,null,"precision mediump float;\n\nvarying vec2 vTextureCoord;\n\nuniform sampler2D uSampler;\nuniform float step;\n\nvoid main(void)\n{\n vec4 color = texture2D(uSampler, vTextureCoord);\n\n color = floor(color * step) / step;\n\n gl_FragColor = color;\n}\n",{step:{type:"1f",value:5}})}var n=t("../../core");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i,Object.defineProperties(i.prototype,{step:{get:function(){return this.uniforms.step.value},set:function(t){this.uniforms.step.value=t}}})},{"../../core":45}],117:[function(t,e,r){function i(t,e,r){n.AbstractFilter.call(this,null,"precision mediump float;\n\nvarying mediump vec2 vTextureCoord;\n\nuniform sampler2D uSampler;\nuniform vec2 texelSize;\nuniform float matrix[9];\n\nvoid main(void)\n{\n vec4 c11 = texture2D(uSampler, vTextureCoord - texelSize); // top left\n vec4 c12 = texture2D(uSampler, vec2(vTextureCoord.x, vTextureCoord.y - texelSize.y)); // top center\n vec4 c13 = texture2D(uSampler, vec2(vTextureCoord.x + texelSize.x, vTextureCoord.y - texelSize.y)); // top right\n\n vec4 c21 = texture2D(uSampler, vec2(vTextureCoord.x - texelSize.x, vTextureCoord.y)); // mid left\n vec4 c22 = texture2D(uSampler, vTextureCoord); // mid center\n vec4 c23 = texture2D(uSampler, vec2(vTextureCoord.x + texelSize.x, vTextureCoord.y)); // mid right\n\n vec4 c31 = texture2D(uSampler, vec2(vTextureCoord.x - texelSize.x, vTextureCoord.y + texelSize.y)); // bottom left\n vec4 c32 = texture2D(uSampler, vec2(vTextureCoord.x, vTextureCoord.y + texelSize.y)); // bottom center\n vec4 c33 = texture2D(uSampler, vTextureCoord + texelSize); // bottom right\n\n gl_FragColor =\n c11 * matrix[0] + c12 * matrix[1] + c13 * matrix[2] +\n c21 * matrix[3] + c22 * matrix[4] + c23 * matrix[5] +\n c31 * matrix[6] + c32 * matrix[7] + c33 * matrix[8];\n\n gl_FragColor.a = c22.a;\n}\n",{matrix:{type:"1fv",value:new Float32Array(t)},texelSize:{type:"v2",value:{x:1/e,y:1/r}}})}var n=t("../../core");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i,Object.defineProperties(i.prototype,{matrix:{get:function(){return this.uniforms.matrix.value},set:function(t){this.uniforms.matrix.value=new Float32Array(t)}},width:{get:function(){return 1/this.uniforms.texelSize.value.x},set:function(t){this.uniforms.texelSize.value.x=1/t}},height:{get:function(){return 1/this.uniforms.texelSize.value.y},set:function(t){this.uniforms.texelSize.value.y=1/t}}})},{"../../core":45 -}],118:[function(t,e,r){function i(){n.AbstractFilter.call(this,null,"precision mediump float;\n\nvarying vec2 vTextureCoord;\n\nuniform sampler2D uSampler;\n\nvoid main(void)\n{\n float lum = length(texture2D(uSampler, vTextureCoord.xy).rgb);\n\n gl_FragColor = vec4(1.0, 1.0, 1.0, 1.0);\n\n if (lum < 1.00)\n {\n if (mod(gl_FragCoord.x + gl_FragCoord.y, 10.0) == 0.0)\n {\n gl_FragColor = vec4(0.0, 0.0, 0.0, 1.0);\n }\n }\n\n if (lum < 0.75)\n {\n if (mod(gl_FragCoord.x - gl_FragCoord.y, 10.0) == 0.0)\n {\n gl_FragColor = vec4(0.0, 0.0, 0.0, 1.0);\n }\n }\n\n if (lum < 0.50)\n {\n if (mod(gl_FragCoord.x + gl_FragCoord.y - 5.0, 10.0) == 0.0)\n {\n gl_FragColor = vec4(0.0, 0.0, 0.0, 1.0);\n }\n }\n\n if (lum < 0.3)\n {\n if (mod(gl_FragCoord.x - gl_FragCoord.y - 5.0, 10.0) == 0.0)\n {\n gl_FragColor = vec4(0.0, 0.0, 0.0, 1.0);\n }\n }\n}\n")}var n=t("../../core");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i},{"../../core":45}],119:[function(t,e,r){function i(t,e){var r=new n.Matrix;t.renderable=!1,n.AbstractFilter.call(this,"attribute vec2 aVertexPosition;\nattribute vec2 aTextureCoord;\nattribute vec4 aColor;\n\nuniform mat3 projectionMatrix;\nuniform mat3 otherMatrix;\n\nvarying vec2 vMapCoord;\nvarying vec2 vTextureCoord;\nvarying vec4 vColor;\n\nvoid main(void)\n{\n gl_Position = vec4((projectionMatrix * vec3(aVertexPosition, 1.0)).xy, 0.0, 1.0);\n vTextureCoord = aTextureCoord;\n vMapCoord = ( otherMatrix * vec3( aTextureCoord, 1.0) ).xy;\n vColor = vec4(aColor.rgb * aColor.a, aColor.a);\n}\n","precision mediump float;\n\nvarying vec2 vMapCoord;\nvarying vec2 vTextureCoord;\nvarying vec4 vColor;\n\nuniform vec2 scale;\n\nuniform sampler2D uSampler;\nuniform sampler2D mapSampler;\n\nvoid main(void)\n{\n vec4 map = texture2D(mapSampler, vMapCoord);\n\n map -= 0.5;\n map.xy *= scale;\n\n gl_FragColor = texture2D(uSampler, vec2(vTextureCoord.x + map.x, vTextureCoord.y + map.y));\n}\n",{mapSampler:{type:"sampler2D",value:t.texture},otherMatrix:{type:"mat3",value:r.toArray(!0)},scale:{type:"v2",value:{x:1,y:1}}}),this.maskSprite=t,this.maskMatrix=r,(null===e||void 0===e)&&(e=20),this.scale=new n.Point(e,e)}var n=t("../../core");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.applyFilter=function(t,e,r){var i=t.filterManager;i.calculateMappedMatrix(e.frame,this.maskSprite,this.maskMatrix),this.uniforms.otherMatrix.value=this.maskMatrix.toArray(!0),this.uniforms.scale.value.x=this.scale.x*(1/e.frame.width),this.uniforms.scale.value.y=this.scale.y*(1/e.frame.height);var n=this.getShader(t);i.applyFilter(n,e,r)},Object.defineProperties(i.prototype,{map:{get:function(){return this.uniforms.mapSampler.value},set:function(t){this.uniforms.mapSampler.value=t}}})},{"../../core":45}],120:[function(t,e,r){function i(){n.AbstractFilter.call(this,null,"precision mediump float;\n\nvarying vec2 vTextureCoord;\nvarying vec4 vColor;\n\nuniform vec4 dimensions;\nuniform sampler2D uSampler;\n\nuniform float angle;\nuniform float scale;\n\nfloat pattern()\n{\n float s = sin(angle), c = cos(angle);\n vec2 tex = vTextureCoord * dimensions.xy;\n vec2 point = vec2(\n c * tex.x - s * tex.y,\n s * tex.x + c * tex.y\n ) * scale;\n return (sin(point.x) * sin(point.y)) * 4.0;\n}\n\nvoid main()\n{\n vec4 color = texture2D(uSampler, vTextureCoord);\n float average = (color.r + color.g + color.b) / 3.0;\n gl_FragColor = vec4(vec3(average * 10.0 - 5.0 + pattern()), color.a);\n}\n",{scale:{type:"1f",value:1},angle:{type:"1f",value:5},dimensions:{type:"4fv",value:[0,0,0,0]}})}var n=t("../../core");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i,Object.defineProperties(i.prototype,{scale:{get:function(){return this.uniforms.scale.value},set:function(t){this.uniforms.scale.value=t}},angle:{get:function(){return this.uniforms.angle.value},set:function(t){this.uniforms.angle.value=t}}})},{"../../core":45}],121:[function(t,e,r){function i(){n.AbstractFilter.call(this,"attribute vec2 aVertexPosition;\nattribute vec2 aTextureCoord;\nattribute vec4 aColor;\n\nuniform float strength;\nuniform vec2 offset;\n\nuniform mat3 projectionMatrix;\n\nvarying vec2 vTextureCoord;\nvarying vec4 vColor;\nvarying vec2 vBlurTexCoords[6];\n\nvoid main(void)\n{\n gl_Position = vec4((projectionMatrix * vec3((aVertexPosition+offset), 1.0)).xy, 0.0, 1.0);\n vTextureCoord = aTextureCoord;\n\n vBlurTexCoords[ 0] = aTextureCoord + vec2(0.0, -0.012 * strength);\n vBlurTexCoords[ 1] = aTextureCoord + vec2(0.0, -0.008 * strength);\n vBlurTexCoords[ 2] = aTextureCoord + vec2(0.0, -0.004 * strength);\n vBlurTexCoords[ 3] = aTextureCoord + vec2(0.0, 0.004 * strength);\n vBlurTexCoords[ 4] = aTextureCoord + vec2(0.0, 0.008 * strength);\n vBlurTexCoords[ 5] = aTextureCoord + vec2(0.0, 0.012 * strength);\n\n vColor = vec4(aColor.rgb * aColor.a, aColor.a);\n}\n","precision lowp float;\n\nvarying vec2 vTextureCoord;\nvarying vec2 vBlurTexCoords[6];\nvarying vec4 vColor;\n\nuniform vec3 color;\nuniform float alpha;\n\nuniform sampler2D uSampler;\n\nvoid main(void)\n{\n vec4 sum = vec4(0.0);\n\n sum += texture2D(uSampler, vBlurTexCoords[ 0])*0.004431848411938341;\n sum += texture2D(uSampler, vBlurTexCoords[ 1])*0.05399096651318985;\n sum += texture2D(uSampler, vBlurTexCoords[ 2])*0.2419707245191454;\n sum += texture2D(uSampler, vTextureCoord )*0.3989422804014327;\n sum += texture2D(uSampler, vBlurTexCoords[ 3])*0.2419707245191454;\n sum += texture2D(uSampler, vBlurTexCoords[ 4])*0.05399096651318985;\n sum += texture2D(uSampler, vBlurTexCoords[ 5])*0.004431848411938341;\n\n gl_FragColor = vec4( color.rgb * sum.a * alpha, sum.a * alpha );\n}\n",{blur:{type:"1f",value:1/512},color:{type:"c",value:[0,0,0]},alpha:{type:"1f",value:.7},offset:{type:"2f",value:[5,5]},strength:{type:"1f",value:1}}),this.passes=1,this.strength=4}var n=t("../../core");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.applyFilter=function(t,e,r,i){var n=this.getShader(t);if(this.uniforms.strength.value=this.strength/4/this.passes*(e.frame.height/e.size.height),1===this.passes)t.filterManager.applyFilter(n,e,r,i);else{for(var o=t.filterManager.getRenderTarget(!0),s=e,a=o,h=0;h= (time - params.z)) )\n {\n float diff = (dist - time);\n float powDiff = 1.0 - pow(abs(diff*params.x), params.y);\n\n float diffTime = diff * powDiff;\n vec2 diffUV = normalize(uv - center);\n texCoord = uv + (diffUV * diffTime);\n }\n\n gl_FragColor = texture2D(uSampler, texCoord);\n}\n",{center:{type:"v2",value:{x:.5,y:.5}},params:{type:"v3",value:{x:10,y:.8,z:.1}},time:{type:"1f",value:0}})}var n=t("../../core");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i,Object.defineProperties(i.prototype,{center:{get:function(){return this.uniforms.center.value},set:function(t){this.uniforms.center.value=t}},params:{get:function(){return this.uniforms.params.value},set:function(t){this.uniforms.params.value=t}},time:{get:function(){return this.uniforms.time.value},set:function(t){this.uniforms.time.value=t}}})},{"../../core":45}],131:[function(t,e,r){function i(){n.AbstractFilter.call(this,null,"precision mediump float;\n\nvarying vec2 vTextureCoord;\n\nuniform sampler2D uSampler;\nuniform float blur;\nuniform float gradientBlur;\nuniform vec2 start;\nuniform vec2 end;\nuniform vec2 delta;\nuniform vec2 texSize;\n\nfloat random(vec3 scale, float seed)\n{\n return fract(sin(dot(gl_FragCoord.xyz + seed, scale)) * 43758.5453 + seed);\n}\n\nvoid main(void)\n{\n vec4 color = vec4(0.0);\n float total = 0.0;\n\n float offset = random(vec3(12.9898, 78.233, 151.7182), 0.0);\n vec2 normal = normalize(vec2(start.y - end.y, end.x - start.x));\n float radius = smoothstep(0.0, 1.0, abs(dot(vTextureCoord * texSize - start, normal)) / gradientBlur) * blur;\n\n for (float t = -30.0; t <= 30.0; t++)\n {\n float percent = (t + offset - 0.5) / 30.0;\n float weight = 1.0 - abs(percent);\n vec4 sample = texture2D(uSampler, vTextureCoord + delta / texSize * percent * radius);\n sample.rgb *= sample.a;\n color += sample * weight;\n total += weight;\n }\n\n gl_FragColor = color / total;\n gl_FragColor.rgb /= gl_FragColor.a + 0.00001;\n}\n",{blur:{type:"1f",value:100},gradientBlur:{type:"1f",value:600},start:{type:"v2",value:{x:0,y:window.innerHeight/2}},end:{type:"v2",value:{x:600,y:window.innerHeight/2}},delta:{type:"v2",value:{x:30,y:30}},texSize:{type:"v2",value:{x:window.innerWidth,y:window.innerHeight}}}),this.updateDelta()}var n=t("../../core");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.updateDelta=function(){this.uniforms.delta.value.x=0,this.uniforms.delta.value.y=0},Object.defineProperties(i.prototype,{blur:{get:function(){return this.uniforms.blur.value},set:function(t){this.uniforms.blur.value=t}},gradientBlur:{get:function(){return this.uniforms.gradientBlur.value},set:function(t){this.uniforms.gradientBlur.value=t}},start:{get:function(){return this.uniforms.start.value},set:function(t){this.uniforms.start.value=t,this.updateDelta()}},end:{get:function(){return this.uniforms.end.value},set:function(t){this.uniforms.end.value=t,this.updateDelta()}}})},{"../../core":45}],132:[function(t,e,r){function i(){n.AbstractFilter.call(this),this.tiltShiftXFilter=new o,this.tiltShiftYFilter=new s}var n=t("../../core"),o=t("./TiltShiftXFilter"),s=t("./TiltShiftYFilter");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.applyFilter=function(t,e,r){var i=t.filterManager.getRenderTarget(!0);this.tiltShiftXFilter.applyFilter(t,e,i),this.tiltShiftYFilter.applyFilter(t,i,r),t.filterManager.returnRenderTarget(i)},Object.defineProperties(i.prototype,{blur:{get:function(){return this.tiltShiftXFilter.blur},set:function(t){this.tiltShiftXFilter.blur=this.tiltShiftYFilter.blur=t}},gradientBlur:{get:function(){return this.tiltShiftXFilter.gradientBlur},set:function(t){this.tiltShiftXFilter.gradientBlur=this.tiltShiftYFilter.gradientBlur=t}},start:{get:function(){return this.tiltShiftXFilter.start},set:function(t){this.tiltShiftXFilter.start=this.tiltShiftYFilter.start=t}},end:{get:function(){return this.tiltShiftXFilter.end},set:function(t){this.tiltShiftXFilter.end=this.tiltShiftYFilter.end=t}}})},{"../../core":45,"./TiltShiftXFilter":133,"./TiltShiftYFilter":134}],133:[function(t,e,r){function i(){n.call(this)}var n=t("./TiltShiftAxisFilter");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.updateDelta=function(){var t=this.uniforms.end.value.x-this.uniforms.start.value.x,e=this.uniforms.end.value.y-this.uniforms.start.value.y,r=Math.sqrt(t*t+e*e);this.uniforms.delta.value.x=t/r,this.uniforms.delta.value.y=e/r}},{"./TiltShiftAxisFilter":131}],134:[function(t,e,r){function i(){n.call(this)}var n=t("./TiltShiftAxisFilter");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.updateDelta=function(){var t=this.uniforms.end.value.x-this.uniforms.start.value.x,e=this.uniforms.end.value.y-this.uniforms.start.value.y,r=Math.sqrt(t*t+e*e);this.uniforms.delta.value.x=-e/r,this.uniforms.delta.value.y=t/r}},{"./TiltShiftAxisFilter":131}],135:[function(t,e,r){function i(){n.AbstractFilter.call(this,null,"precision mediump float;\n\nvarying vec2 vTextureCoord;\n\nuniform sampler2D uSampler;\nuniform float radius;\nuniform float angle;\nuniform vec2 offset;\n\nvoid main(void)\n{\n vec2 coord = vTextureCoord - offset;\n float dist = length(coord);\n\n if (dist < radius)\n {\n float ratio = (radius - dist) / radius;\n float angleMod = ratio * ratio * angle;\n float s = sin(angleMod);\n float c = cos(angleMod);\n coord = vec2(coord.x * c - coord.y * s, coord.x * s + coord.y * c);\n }\n\n gl_FragColor = texture2D(uSampler, coord+offset);\n}\n",{radius:{type:"1f",value:.5},angle:{type:"1f",value:5},offset:{type:"v2",value:{x:.5,y:.5}}})}var n=t("../../core");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i,Object.defineProperties(i.prototype,{offset:{get:function(){return this.uniforms.offset.value},set:function(t){this.uniforms.offset.value=t}},radius:{get:function(){return this.uniforms.radius.value},set:function(t){this.uniforms.radius.value=t}},angle:{get:function(){return this.uniforms.angle.value},set:function(t){this.uniforms.angle.value=t}}})},{"../../core":45}],136:[function(t,e,r){(function(r){t("./polyfill");var i=e.exports=t("./core");i.extras=t("./extras"),i.filters=t("./filters"),i.interaction=t("./interaction"),i.loaders=t("./loaders"),i.mesh=t("./mesh"),i.accessibility=t("./accessibility"),i.loader=new i.loaders.Loader,Object.assign(i,t("./deprecation")),r.PIXI=i}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{"./accessibility":37,"./core":45,"./deprecation":100,"./extras":107,"./filters":124,"./interaction":139,"./loaders":142,"./mesh":149,"./polyfill":154}],137:[function(t,e,r){function i(){this.global=new n.Point,this.target=null,this.originalEvent=null}var n=t("../core");i.prototype.constructor=i,e.exports=i,i.prototype.getLocalPosition=function(t,e,r){return t.worldTransform.applyInverse(r||this.global,e)}},{"../core":45}],138:[function(t,e,r){function i(t,e){e=e||{},this.renderer=t,this.autoPreventDefault=void 0!==e.autoPreventDefault?e.autoPreventDefault:!0,this.interactionFrequency=e.interactionFrequency||10,this.mouse=new o,this.eventData={stopped:!1,target:null,type:null,data:this.mouse,stopPropagation:function(){this.stopped=!0}},this.interactiveDataPool=[],this.interactionDOMElement=null,this.eventsAdded=!1,this.onMouseUp=this.onMouseUp.bind(this),this.processMouseUp=this.processMouseUp.bind(this),this.onMouseDown=this.onMouseDown.bind(this),this.processMouseDown=this.processMouseDown.bind(this),this.onMouseMove=this.onMouseMove.bind(this),this.processMouseMove=this.processMouseMove.bind(this),this.onMouseOut=this.onMouseOut.bind(this),this.processMouseOverOut=this.processMouseOverOut.bind(this),this.onTouchStart=this.onTouchStart.bind(this),this.processTouchStart=this.processTouchStart.bind(this),this.onTouchEnd=this.onTouchEnd.bind(this),this.processTouchEnd=this.processTouchEnd.bind(this),this.onTouchMove=this.onTouchMove.bind(this),this.processTouchMove=this.processTouchMove.bind(this),this.last=0,this.currentCursorStyle="inherit",this._tempPoint=new n.Point,this.resolution=1,this.setTargetElement(this.renderer.view,this.renderer.resolution)}var n=t("../core"),o=t("./InteractionData");Object.assign(n.DisplayObject.prototype,t("./interactiveTarget")),i.prototype.constructor=i,e.exports=i,i.prototype.setTargetElement=function(t,e){this.removeEvents(),this.interactionDOMElement=t,this.resolution=e||1,this.addEvents()},i.prototype.addEvents=function(){this.interactionDOMElement&&(n.ticker.shared.add(this.update,this),window.navigator.msPointerEnabled&&(this.interactionDOMElement.style["-ms-content-zooming"]="none",this.interactionDOMElement.style["-ms-touch-action"]="none"),window.document.addEventListener("mousemove",this.onMouseMove,!0),this.interactionDOMElement.addEventListener("mousedown",this.onMouseDown,!0),this.interactionDOMElement.addEventListener("mouseout",this.onMouseOut,!0),this.interactionDOMElement.addEventListener("touchstart",this.onTouchStart,!0),this.interactionDOMElement.addEventListener("touchend",this.onTouchEnd,!0),this.interactionDOMElement.addEventListener("touchmove",this.onTouchMove,!0),window.addEventListener("mouseup",this.onMouseUp,!0),this.eventsAdded=!0)},i.prototype.removeEvents=function(){this.interactionDOMElement&&(n.ticker.shared.remove(this.update),window.navigator.msPointerEnabled&&(this.interactionDOMElement.style["-ms-content-zooming"]="",this.interactionDOMElement.style["-ms-touch-action"]=""),window.document.removeEventListener("mousemove",this.onMouseMove,!0),this.interactionDOMElement.removeEventListener("mousedown",this.onMouseDown,!0),this.interactionDOMElement.removeEventListener("mouseout",this.onMouseOut,!0),this.interactionDOMElement.removeEventListener("touchstart",this.onTouchStart,!0),this.interactionDOMElement.removeEventListener("touchend",this.onTouchEnd,!0),this.interactionDOMElement.removeEventListener("touchmove",this.onTouchMove,!0),this.interactionDOMElement=null,window.removeEventListener("mouseup",this.onMouseUp,!0),this.eventsAdded=!1)},i.prototype.update=function(t){if(this._deltaTime+=t,!(this._deltaTime=0;h--)this.processInteractive(t,a[h],r,i,s)&&(o=!0,s=!1,a[h].interactive&&(i=!1));return n&&(i&&!o&&(e.hitArea?(e.worldTransform.applyInverse(t,this._tempPoint),o=e.hitArea.contains(this._tempPoint.x,this._tempPoint.y)):e.containsPoint&&(o=e.containsPoint(t))),e.interactive&&r(e,o)),o},i.prototype.onMouseDown=function(t){this.mouse.originalEvent=t,this.eventData.data=this.mouse,this.eventData.stopped=!1,this.mapPositionToPoint(this.mouse.global,t.clientX,t.clientY),this.autoPreventDefault&&this.mouse.originalEvent.preventDefault(),this.processInteractive(this.mouse.global,this.renderer._lastObjectRendered,this.processMouseDown,!0)},i.prototype.processMouseDown=function(t,e){var r=this.mouse.originalEvent,i=2===r.button||3===r.which;e&&(t[i?"_isRightDown":"_isLeftDown"]=!0,this.dispatchEvent(t,i?"rightdown":"mousedown",this.eventData))},i.prototype.onMouseUp=function(t){this.mouse.originalEvent=t,this.eventData.data=this.mouse,this.eventData.stopped=!1,this.mapPositionToPoint(this.mouse.global,t.clientX,t.clientY),this.processInteractive(this.mouse.global,this.renderer._lastObjectRendered,this.processMouseUp,!0)},i.prototype.processMouseUp=function(t,e){var r=this.mouse.originalEvent,i=2===r.button||3===r.which,n=i?"_isRightDown":"_isLeftDown";e?(this.dispatchEvent(t,i?"rightup":"mouseup",this.eventData),t[n]&&(t[n]=!1,this.dispatchEvent(t,i?"rightclick":"click",this.eventData))):t[n]&&(t[n]=!1,this.dispatchEvent(t,i?"rightupoutside":"mouseupoutside",this.eventData))},i.prototype.onMouseMove=function(t){this.mouse.originalEvent=t,this.eventData.data=this.mouse,this.eventData.stopped=!1,this.mapPositionToPoint(this.mouse.global,t.clientX,t.clientY),this.didMove=!0,this.cursor="inherit",this.processInteractive(this.mouse.global,this.renderer._lastObjectRendered,this.processMouseMove,!0),this.currentCursorStyle!==this.cursor&&(this.currentCursorStyle=this.cursor,this.interactionDOMElement.style.cursor=this.cursor)},i.prototype.processMouseMove=function(t,e){this.dispatchEvent(t,"mousemove",this.eventData),this.processMouseOverOut(t,e)},i.prototype.onMouseOut=function(t){this.mouse.originalEvent=t,this.eventData.stopped=!1,this.mapPositionToPoint(this.mouse.global,t.clientX,t.clientY),this.interactionDOMElement.style.cursor="inherit",this.mapPositionToPoint(this.mouse.global,t.clientX,t.clientY),this.processInteractive(this.mouse.global,this.renderer._lastObjectRendered,this.processMouseOverOut,!1)},i.prototype.processMouseOverOut=function(t,e){e?(t._over||(t._over=!0,this.dispatchEvent(t,"mouseover",this.eventData)),t.buttonMode&&(this.cursor=t.defaultCursor)):t._over&&(t._over=!1,this.dispatchEvent(t,"mouseout",this.eventData))},i.prototype.onTouchStart=function(t){this.autoPreventDefault&&t.preventDefault();for(var e=t.changedTouches,r=e.length,i=0;r>i;i++){var n=e[i],o=this.getTouchData(n);o.originalEvent=t,this.eventData.data=o,this.eventData.stopped=!1,this.processInteractive(o.global,this.renderer._lastObjectRendered,this.processTouchStart,!0),this.returnTouchData(o)}},i.prototype.processTouchStart=function(t,e){e&&(t._touchDown=!0,this.dispatchEvent(t,"touchstart",this.eventData))},i.prototype.onTouchEnd=function(t){this.autoPreventDefault&&t.preventDefault();for(var e=t.changedTouches,r=e.length,i=0;r>i;i++){var n=e[i],o=this.getTouchData(n);o.originalEvent=t,this.eventData.data=o,this.eventData.stopped=!1,this.processInteractive(o.global,this.renderer._lastObjectRendered,this.processTouchEnd,!0),this.returnTouchData(o)}},i.prototype.processTouchEnd=function(t,e){e?(this.dispatchEvent(t,"touchend",this.eventData),t._touchDown&&(t._touchDown=!1,this.dispatchEvent(t,"tap",this.eventData))):t._touchDown&&(t._touchDown=!1,this.dispatchEvent(t,"touchendoutside",this.eventData))},i.prototype.onTouchMove=function(t){this.autoPreventDefault&&t.preventDefault();for(var e=t.changedTouches,r=e.length,i=0;r>i;i++){var n=e[i],o=this.getTouchData(n);o.originalEvent=t,this.eventData.data=o,this.eventData.stopped=!1,this.processInteractive(o.global,this.renderer._lastObjectRendered,this.processTouchMove,!0),this.returnTouchData(o)}},i.prototype.processTouchMove=function(t,e){e=e,this.dispatchEvent(t,"touchmove",this.eventData)},i.prototype.getTouchData=function(t){var e=this.interactiveDataPool.pop();return e||(e=new o),e.identifier=t.identifier,this.mapPositionToPoint(e.global,t.clientX,t.clientY),navigator.isCocoonJS&&(e.global.x=e.global.x/this.resolution,e.global.y=e.global.y/this.resolution),t.globalX=e.global.x,t.globalY=e.global.y,e},i.prototype.returnTouchData=function(t){ -this.interactiveDataPool.push(t)},i.prototype.destroy=function(){this.removeEvents(),this.renderer=null,this.mouse=null,this.eventData=null,this.interactiveDataPool=null,this.interactionDOMElement=null,this.onMouseUp=null,this.processMouseUp=null,this.onMouseDown=null,this.processMouseDown=null,this.onMouseMove=null,this.processMouseMove=null,this.onMouseOut=null,this.processMouseOverOut=null,this.onTouchStart=null,this.processTouchStart=null,this.onTouchEnd=null,this.processTouchEnd=null,this.onTouchMove=null,this.processTouchMove=null,this._tempPoint=null},n.WebGLRenderer.registerPlugin("interaction",i),n.CanvasRenderer.registerPlugin("interaction",i)},{"../core":45,"./InteractionData":137,"./interactiveTarget":140}],139:[function(t,e,r){e.exports={InteractionData:t("./InteractionData"),InteractionManager:t("./InteractionManager"),interactiveTarget:t("./interactiveTarget")}},{"./InteractionData":137,"./InteractionManager":138,"./interactiveTarget":140}],140:[function(t,e,r){var i={interactive:!1,buttonMode:!1,interactiveChildren:!0,defaultCursor:"pointer",_over:!1,_touchDown:!1};e.exports=i},{}],141:[function(t,e,r){function i(t,e){var r={},i=t.data.getElementsByTagName("info")[0],n=t.data.getElementsByTagName("common")[0];r.font=i.getAttribute("face"),r.size=parseInt(i.getAttribute("size"),10),r.lineHeight=parseInt(n.getAttribute("lineHeight"),10),r.chars={};for(var a=t.data.getElementsByTagName("char"),h=0;hn;n++){var o=2*n;this._renderCanvasDrawTriangle(t,e,r,o,o+2,o+4)}},i.prototype._renderCanvasTriangles=function(t){for(var e=this.vertices,r=this.uvs,i=this.indices,n=i.length,o=0;n>o;o+=3){var s=2*i[o],a=2*i[o+1],h=2*i[o+2];this._renderCanvasDrawTriangle(t,e,r,s,a,h)}},i.prototype._renderCanvasDrawTriangle=function(t,e,r,i,n,o){var s=this._texture.baseTexture.source,a=this._texture.baseTexture.width,h=this._texture.baseTexture.height,u=e[i],l=e[n],c=e[o],p=e[i+1],d=e[n+1],f=e[o+1],v=r[i]*a,g=r[n]*a,m=r[o]*a,y=r[i+1]*h,x=r[n+1]*h,b=r[o+1]*h;if(this.canvasPadding>0){var _=this.canvasPadding/this.worldTransform.a,T=this.canvasPadding/this.worldTransform.d,E=(u+l+c)/3,S=(p+d+f)/3,w=u-E,C=p-S,A=Math.sqrt(w*w+C*C);u=E+w/A*(A+_),p=S+C/A*(A+T),w=l-E,C=d-S,A=Math.sqrt(w*w+C*C),l=E+w/A*(A+_),d=S+C/A*(A+T),w=c-E,C=f-S,A=Math.sqrt(w*w+C*C),c=E+w/A*(A+_),f=S+C/A*(A+T)}t.save(),t.beginPath(),t.moveTo(u,p),t.lineTo(l,d),t.lineTo(c,f),t.closePath(),t.clip();var M=v*x+y*m+g*b-x*m-y*g-v*b,R=u*x+y*c+l*b-x*c-y*l-u*b,O=v*l+u*m+g*c-l*m-u*g-v*c,D=v*x*c+y*l*m+u*g*b-u*x*m-y*g*c-v*l*b,P=p*x+y*f+d*b-x*f-y*d-p*b,F=v*d+p*m+g*f-d*m-p*g-v*f,L=v*x*f+y*d*m+p*g*b-p*x*m-y*g*f-v*d*b;t.transform(R/M,P/M,O/M,F/M,D/M,L/M),t.drawImage(s,0,0),t.restore()},i.prototype.renderMeshFlat=function(t){var e=this.context,r=t.vertices,i=r.length/2;e.beginPath();for(var n=1;i-2>n;n++){var o=2*n,s=r[o],a=r[o+2],h=r[o+4],u=r[o+1],l=r[o+3],c=r[o+5];e.moveTo(s,u),e.lineTo(a,l),e.lineTo(h,c)}e.fillStyle="#FF0000",e.fill(),e.closePath()},i.prototype._onTextureUpdate=function(){this.updateFrame=!0},i.prototype.getBounds=function(t){if(!this._currentBounds){for(var e=t||this.worldTransform,r=e.a,i=e.b,o=e.c,s=e.d,a=e.tx,h=e.ty,u=-(1/0),l=-(1/0),c=1/0,p=1/0,d=this.vertices,f=0,v=d.length;v>f;f+=2){var g=d[f],m=d[f+1],y=r*g+o*m+a,x=s*m+i*g+h;c=c>y?y:c,p=p>x?x:p,u=y>u?y:u,l=x>l?x:l}if(c===-(1/0)||l===1/0)return n.Rectangle.EMPTY;var b=this._bounds;b.x=c,b.width=u-c,b.y=p,b.height=l-p,this._currentBounds=b}return this._currentBounds},i.prototype.containsPoint=function(t){if(!this.getBounds().contains(t.x,t.y))return!1;this.worldTransform.applyInverse(t,o);var e,r,n=this.vertices,a=s.points;if(this.drawMode===i.DRAW_MODES.TRIANGLES){var h=this.indices;for(r=this.indices.length,e=0;r>e;e+=3){var u=2*h[e],l=2*h[e+1],c=2*h[e+2];if(a[0]=n[u],a[1]=n[u+1],a[2]=n[l],a[3]=n[l+1],a[4]=n[c],a[5]=n[c+1],s.contains(o.x,o.y))return!0}}else for(r=n.length,e=0;r>e;e+=6)if(a[0]=n[e],a[1]=n[e+1],a[2]=n[e+2],a[3]=n[e+3],a[4]=n[e+4],a[5]=n[e+5],s.contains(o.x,o.y))return!0;return!1},i.DRAW_MODES={TRIANGLE_MESH:0,TRIANGLES:1}},{"../core":45}],147:[function(t,e,r){function i(t,e,r){n.call(this,t),this._ready=!0,this.segmentsX=e||10,this.segmentsY=r||10,this.drawMode=n.DRAW_MODES.TRIANGLES,this.refresh()}var n=t("./Mesh");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.refresh=function(){var t=this.segmentsX*this.segmentsY,e=[],r=[],i=[],n=[],o=this.texture,s=this.segmentsX-1,a=this.segmentsY-1,h=0,u=o.width/s,l=o.height/a;for(h=0;t>h;h++){var c=h%this.segmentsX,p=h/this.segmentsX|0;e.push(c*u,p*l),i.push(o._uvs.x0+(o._uvs.x1-o._uvs.x0)*(c/(this.segmentsX-1)),o._uvs.y0+(o._uvs.y3-o._uvs.y0)*(p/(this.segmentsY-1)))}var d=s*a;for(h=0;d>h;h++){var f=h%s,v=h/s|0,g=v*this.segmentsX+f,m=v*this.segmentsX+f+1,y=(v+1)*this.segmentsX+f,x=(v+1)*this.segmentsX+f+1;n.push(g,m,y),n.push(m,x,y)}this.vertices=new Float32Array(e),this.uvs=new Float32Array(i),this.colors=new Float32Array(r),this.indices=new Uint16Array(n)},i.prototype._onTextureUpdate=function(){n.prototype._onTextureUpdate.call(this),this._ready&&this.refresh()}},{"./Mesh":146}],148:[function(t,e,r){function i(t,e){n.call(this,t),this.points=e,this.vertices=new Float32Array(4*e.length),this.uvs=new Float32Array(4*e.length),this.colors=new Float32Array(2*e.length),this.indices=new Uint16Array(2*e.length),this._ready=!0,this.refresh()}var n=t("./Mesh"),o=t("../core");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.refresh=function(){var t=this.points;if(!(t.length<1)&&this._texture._uvs){var e=this.uvs,r=this.indices,i=this.colors,n=this._texture._uvs,s=new o.Point(n.x0,n.y0),a=new o.Point(n.x2-n.x0,n.y2-n.y0);e[0]=0+s.x,e[1]=0+s.y,e[2]=0+s.x,e[3]=1*a.y+s.y,i[0]=1,i[1]=1,r[0]=0,r[1]=1;for(var h,u,l,c=t.length,p=1;c>p;p++)h=t[p],u=4*p,l=p/(c-1),e[u]=l*a.x+s.x,e[u+1]=0+s.y,e[u+2]=l*a.x+s.x,e[u+3]=1*a.y+s.y,u=2*p,i[u]=1,i[u+1]=1,u=2*p,r[u]=u,r[u+1]=u+1;this.dirty=!0}},i.prototype._onTextureUpdate=function(){n.prototype._onTextureUpdate.call(this),this._ready&&this.refresh()},i.prototype.updateTransform=function(){var t=this.points;if(!(t.length<1)){for(var e,r,i,n,o,s,a=t[0],h=0,u=0,l=this.vertices,c=t.length,p=0;c>p;p++)r=t[p],i=4*p,e=p1&&(n=1),o=Math.sqrt(h*h+u*u),s=this._texture.height/2,h/=o,u/=o,h*=s,u*=s,l[i]=r.x+h,l[i+1]=r.y+u,l[i+2]=r.x-h,l[i+3]=r.y-u,a=r;this.containerUpdateTransform()}}},{"../core":45,"./Mesh":146}],149:[function(t,e,r){e.exports={Mesh:t("./Mesh"),Plane:t("./Plane"),Rope:t("./Rope"),MeshRenderer:t("./webgl/MeshRenderer"),MeshShader:t("./webgl/MeshShader")}},{"./Mesh":146,"./Plane":147,"./Rope":148,"./webgl/MeshRenderer":150,"./webgl/MeshShader":151}],150:[function(t,e,r){function i(t){n.ObjectRenderer.call(this,t),this.indices=new Uint16Array(15e3);for(var e=0,r=0;15e3>e;e+=6,r+=4)this.indices[e+0]=r+0,this.indices[e+1]=r+1,this.indices[e+2]=r+2,this.indices[e+3]=r+0,this.indices[e+4]=r+2,this.indices[e+5]=r+3;this.currentShader=null}var n=t("../../core"),o=t("../Mesh");i.prototype=Object.create(n.ObjectRenderer.prototype),i.prototype.constructor=i,e.exports=i,n.WebGLRenderer.registerPlugin("mesh",i),i.prototype.onContextChange=function(){},i.prototype.render=function(t){t._vertexBuffer||this._initWebGL(t);var e=this.renderer,r=e.gl,i=t._texture.baseTexture,n=t.shader,s=t.drawMode===o.DRAW_MODES.TRIANGLE_MESH?r.TRIANGLE_STRIP:r.TRIANGLES;e.blendModeManager.setBlendMode(t.blendMode),n=n?n.shaders[r.id]||n.getShader(e):e.shaderManager.plugins.meshShader,this.renderer.shaderManager.setShader(n),n.uniforms.translationMatrix.value=t.worldTransform.toArray(!0),n.uniforms.projectionMatrix.value=e.currentRenderTarget.projectionMatrix.toArray(!0),n.uniforms.alpha.value=t.worldAlpha,n.syncUniforms(),t.dirty?(t.dirty=!1,r.bindBuffer(r.ARRAY_BUFFER,t._vertexBuffer),r.bufferData(r.ARRAY_BUFFER,t.vertices,r.STATIC_DRAW),r.vertexAttribPointer(n.attributes.aVertexPosition,2,r.FLOAT,!1,0,0),r.bindBuffer(r.ARRAY_BUFFER,t._uvBuffer),r.bufferData(r.ARRAY_BUFFER,t.uvs,r.STATIC_DRAW),r.vertexAttribPointer(n.attributes.aTextureCoord,2,r.FLOAT,!1,0,0),r.activeTexture(r.TEXTURE0),i._glTextures[r.id]?r.bindTexture(r.TEXTURE_2D,i._glTextures[r.id]):this.renderer.updateTexture(i),r.bindBuffer(r.ELEMENT_ARRAY_BUFFER,t._indexBuffer),r.bufferData(r.ELEMENT_ARRAY_BUFFER,t.indices,r.STATIC_DRAW)):(r.bindBuffer(r.ARRAY_BUFFER,t._vertexBuffer),r.bufferSubData(r.ARRAY_BUFFER,0,t.vertices),r.vertexAttribPointer(n.attributes.aVertexPosition,2,r.FLOAT,!1,0,0),r.bindBuffer(r.ARRAY_BUFFER,t._uvBuffer),r.vertexAttribPointer(n.attributes.aTextureCoord,2,r.FLOAT,!1,0,0),r.activeTexture(r.TEXTURE0),i._glTextures[r.id]?r.bindTexture(r.TEXTURE_2D,i._glTextures[r.id]):this.renderer.updateTexture(i),r.bindBuffer(r.ELEMENT_ARRAY_BUFFER,t._indexBuffer),r.bufferSubData(r.ELEMENT_ARRAY_BUFFER,0,t.indices)),r.drawElements(s,t.indices.length,r.UNSIGNED_SHORT,0)},i.prototype._initWebGL=function(t){var e=this.renderer.gl;t._vertexBuffer=e.createBuffer(),t._indexBuffer=e.createBuffer(),t._uvBuffer=e.createBuffer(),e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferData(e.ARRAY_BUFFER,t.vertices,e.DYNAMIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferData(e.ARRAY_BUFFER,t.uvs,e.STATIC_DRAW),t.colors&&(t._colorBuffer=e.createBuffer(),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.bufferData(e.ARRAY_BUFFER,t.colors,e.STATIC_DRAW)),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer),e.bufferData(e.ELEMENT_ARRAY_BUFFER,t.indices,e.STATIC_DRAW)},i.prototype.flush=function(){},i.prototype.start=function(){this.currentShader=null},i.prototype.destroy=function(){n.ObjectRenderer.prototype.destroy.call(this)}},{"../../core":45,"../Mesh":146}],151:[function(t,e,r){function i(t){n.Shader.call(this,t,["precision lowp float;","attribute vec2 aVertexPosition;","attribute vec2 aTextureCoord;","uniform mat3 translationMatrix;","uniform mat3 projectionMatrix;","varying vec2 vTextureCoord;","void main(void){"," gl_Position = vec4((projectionMatrix * translationMatrix * vec3(aVertexPosition, 1.0)).xy, 0.0, 1.0);"," vTextureCoord = aTextureCoord;","}"].join("\n"),["precision lowp float;","varying vec2 vTextureCoord;","uniform float alpha;","uniform sampler2D uSampler;","void main(void){"," gl_FragColor = texture2D(uSampler, vTextureCoord) * alpha ;","}"].join("\n"),{alpha:{type:"1f",value:0},translationMatrix:{type:"mat3",value:new Float32Array(9)},projectionMatrix:{type:"mat3",value:new Float32Array(9)}},{aVertexPosition:0,aTextureCoord:0})}var n=t("../../core");i.prototype=Object.create(n.Shader.prototype),i.prototype.constructor=i,e.exports=i,n.ShaderManager.registerPlugin("meshShader",i)},{"../../core":45}],152:[function(t,e,r){Math.sign||(Math.sign=function(t){return t=+t,0===t||isNaN(t)?t:t>0?1:-1})},{}],153:[function(t,e,r){Object.assign||(Object.assign=t("object-assign"))},{"object-assign":26}],154:[function(t,e,r){t("./Object.assign"),t("./requestAnimationFrame"),t("./Math.sign")},{"./Math.sign":152,"./Object.assign":153,"./requestAnimationFrame":155}],155:[function(t,e,r){(function(t){if(Date.now&&Date.prototype.getTime||(Date.now=function(){return(new Date).getTime()}),!t.performance||!t.performance.now){var e=Date.now();t.performance||(t.performance={}),t.performance.now=function(){return Date.now()-e}}for(var r=Date.now(),i=["ms","moz","webkit","o"],n=0;ni&&(i=0),r=e,setTimeout(function(){r=Date.now(),t(performance.now())},i)}),t.cancelAnimationFrame||(t.cancelAnimationFrame=function(t){clearTimeout(t)})}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{}]},{},[136])(136)}); +!function(t){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=t();else if("function"==typeof define&&define.amd)define([],t);else{var e;e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:this,e.PIXI=t()}}(function(){var t;return function e(t,r,i){function n(s,a){if(!r[s]){if(!t[s]){var h="function"==typeof require&&require;if(!a&&h)return h(s,!0);if(o)return o(s,!0);var u=new Error("Cannot find module '"+s+"'");throw u.code="MODULE_NOT_FOUND",u}var l=r[s]={exports:{}};t[s][0].call(l.exports,function(e){var r=t[s][1][e];return n(r?r:e)},l,l.exports,e,t,r,i)}return r[s].exports}for(var o="function"==typeof require&&require,s=0;s=t.byteLength?i.bufferSubData(this.type,e,t):i.bufferData(this.type,t,this.drawType),this.data=t},n.prototype.bind=function(){var t=this.gl;t.bindBuffer(this.type,this.buffer)},n.createVertexBuffer=function(t,e,r){return new n(t,t.ARRAY_BUFFER,e,r)},n.createIndexBuffer=function(t,e,r){return new n(t,t.ELEMENT_ARRAY_BUFFER,e,r)},n.create=function(t,e,r,i){return new n(t,e,i)},e.exports=n},{}],3:[function(t,e,r){var i=t("./GLTexture"),n=function(t,e,r){this.gl=t,this.framebuffer=t.createFramebuffer(),this.stencil=null,this.texture=null,this.width=e||100,this.height=r||100};n.prototype.enableTexture=function(t){var e=this.gl;this.texture=t||new i(e),this.texture.bind(),this.bind(),e.framebufferTexture2D(e.FRAMEBUFFER,e.COLOR_ATTACHMENT0,e.TEXTURE_2D,this.texture.texture,0)},n.prototype.enableStencil=function(){if(!this.stencil){var t=this.gl;this.stencil=t.createRenderbuffer(),t.bindRenderbuffer(t.RENDERBUFFER,this.stencil),t.framebufferRenderbuffer(t.FRAMEBUFFER,t.DEPTH_STENCIL_ATTACHMENT,t.RENDERBUFFER,this.stencil),t.renderbufferStorage(t.RENDERBUFFER,t.DEPTH_STENCIL,this.width,this.height)}},n.prototype.clear=function(t,e,r,i){this.bind();var n=this.gl;n.clearColor(t,e,r,i),n.clear(n.COLOR_BUFFER_BIT)},n.prototype.bind=function(){var t=this.gl;t.bindFramebuffer(t.FRAMEBUFFER,this.framebuffer)},n.prototype.unbind=function(){gl.bindFramebuffer(gl.FRAMEBUFFER,null)},n.prototype.resize=function(t,e){var r=this.gl;this.width=t,this.height=e,this.texture&&this.texture.uploadData(null,t,e),this.stencil&&(r.bindRenderbuffer(r.RENDERBUFFER,this.stencil),r.renderbufferStorage(r.RENDERBUFFER,r.DEPTH_STENCIL,t,e))},n.prototype.destroy=function(){var t=this.gl;t.deleteFramebuffer(this.framebuffer)},n.createRGBA=function(t,e,r,o){var s=i.fromData(t,null,e,r);s.enableNearestScaling(),s.enableWrapClamp();var a=new n(t,e,r);return a.enableTexture(s),a},n.createFloat32=function(t,e,r,o){var s=new i.fromData(t,o,e,r);s.enableNearestScaling(),s.enableWrapClamp();var a=new n(t,e,r);return a.enableTexture(s),a},e.exports=n},{"./GLTexture":5}],4:[function(t,e,r){var i=t("./shader/compileProgram"),n=t("./shader/extractAttributes"),o=t("./shader/extractUniforms"),s=t("./shader/generateUniformAccessObject"),a=function(t,e,r){this.gl=t,this.program=i(t,e,r),this.attributes=n(t,this.program);var a=o(t,this.program);this.uniforms=s(t,a)};a.prototype.bind=function(){this.gl.useProgram(this.program)},a.prototype.destroy=function(){this.gl},e.exports=a},{"./shader/compileProgram":9,"./shader/extractAttributes":11,"./shader/extractUniforms":12,"./shader/generateUniformAccessObject":13}],5:[function(t,e,r){var i=function(t,e,r,i,n){this.gl=t,this.texture=t.createTexture(),this.mipmap=!1,this.premultiplyAlpha=!1,this.width=e||0,this.height=r||0,this.format=i||t.RGBA,this.type=n||t.UNSIGNED_BYTE};i.prototype.upload=function(t){this.bind();var e=this.gl;this.width=t.width,this.height=t.height,e.pixelStorei(e.UNPACK_PREMULTIPLY_ALPHA_WEBGL,this.premultiplyAlpha),e.texImage2D(e.TEXTURE_2D,0,this.format,this.format,this.type,t)};var n=!1;i.prototype.uploadData=function(t,e,r){if(this.bind(),this.width=e||this.width,this.height=r||this.height,t instanceof Float32Array){if(!n){var i=gl.getExtension("OES_texture_float");if(!i)throw new Error("floating point textures not available");n=!0}this.type=gl.FLOAT}else this.type=gl.UNSIGNED_BYTE;gl.pixelStorei(gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL,this.premultiplyAlpha),gl.texImage2D(gl.TEXTURE_2D,0,this.format,this.width,this.height,0,this.format,this.type,t||null)},i.prototype.bind=function(t){var e=this.gl;void 0!==t&&e.activeTexture(e.TEXTURE0+t),e.bindTexture(e.TEXTURE_2D,this.texture)},i.prototype.unbind=function(){var t=this.gl;t.bindTexture(t.TEXTURE_2D,null)},i.prototype.minFilter=function(t){var e=this.gl;this.bind(),this.mipmap?e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MIN_FILTER,t?e.LINEAR_MIPMAP_LINEAR:e.NEAREST_MIPMAP_NEAREST):e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MIN_FILTER,t?e.LINEAR:e.NEAREST)},i.prototype.magFilter=function(t){var e=this.gl;this.bind(),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MAG_FILTER,t?e.LINEAR:e.NEAREST)},i.prototype.enableMipmap=function(){this.bind(),this.mipmap=!0,gl.generateMipmap(gl.TEXTURE_2D)},i.prototype.enableLinearScaling=function(){this.minFilter(!0),this.magFilter(!0)},i.prototype.enableNearestScaling=function(){this.minFilter(!1),this.magFilter(!1)},i.prototype.enableWrapClamp=function(){var t=this.gl;this.bind(),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_WRAP_S,t.CLAMP_TO_EDGE),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_WRAP_T,t.CLAMP_TO_EDGE)},i.prototype.enableWrapRepeat=function(){var t=this.gl;this.bind(),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_WRAP_S,t.REPEAT),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_WRAP_T,t.REPEAT)},i.prototype.destroy=function(){var t=this.gl;t.deleteTexture(this.texture)},i.fromSource=function(t,e,r){var n=new i(t);return n.premultiplyAlpha=r||!1,n.upload(e),n},i.fromData=function(t,e,r,n){var o=new i(t);return o.uploadData(e,r,n),o},e.exports=i},{}],6:[function(t,e,r){function i(t){this.nativeVaoExtension=t.getExtension("OES_vertex_array_object")||t.getExtension("MOZ_OES_vertex_array_object")||t.getExtension("WEBKIT_OES_vertex_array_object"),this.nativeVaoExtension&&(this.nativeVao=this.nativeVaoExtension.createVertexArrayOES()),this.gl=t,this.attributes=[],this.indexBuffer=null,this.dirty=!1}i.prototype.constructor=i,e.exports=i,i.prototype.bind=function(){this.nativeVao?(this.nativeVaoExtension.bindVertexArrayOES(this.nativeVao),this.dirty&&(this.dirty=!1,this.activate())):this.activate()},i.prototype.unbind=function(){this.nativeVao&&this.nativeVaoExtension.bindVertexArrayOES(null)},i.prototype.activate=function(){for(var t=this.gl,e=0;es;s++){var a=t.getActiveAttrib(e,s),h=i(t,a.type);r[a.name]={type:h,size:n(h),location:t.getAttribLocation(e,a.name),pointer:function(e,r,i,n){t.vertexAttribPointer(this.location,this.size,e||t.FLOAT,r||!1,i||0,n||0)}}}return r};e.exports=o},{"./mapSize":14,"./mapType":15}],12:[function(t,e,r){var i=t("./mapType"),n=t("./defaultValue"),o=function(t,e){for(var r={},o=t.getProgramParameter(e,t.ACTIVE_UNIFORMS),s=0;o>s;s++){var a=t.getActiveUniform(e,s),h=a.name.replace(/\[.*?\]/,""),u=i(t,a.type);r[h]={type:u,size:a.size,location:t.getUniformLocation(e,h),value:n(u,a.size)}}return r};e.exports=o},{"./defaultValue":10,"./mapType":15}],13:[function(t,e,r){var i=function(t,e){var r={data:{}};r.gl=t;for(var i=Object.keys(e),a=0;a=0&&t.length%1===0}function c(t,e){for(var r=-1,i=t.length;++ri?i:null}):(r=X(t),e=r.length,function(){return i++,e>i?r[i]:null})}function y(t,e){return e=null==e?t.length-1:+e,function(){for(var r=Math.max(arguments.length-e,0),i=Array(r),n=0;r>n;n++)i[n]=arguments[n+e];switch(e){case 0:return t.call(this,i);case 1:return t.call(this,arguments[0],i)}}}function x(t){return function(e,r,i){return t(e,i)}}function b(t){return function(e,r,i){i=u(i||n),e=e||[];var o=m(e);if(0>=t)return i(null);var s=!1,a=0,l=!1;!function c(){if(s&&0>=a)return i(null);for(;t>a&&!l;){var n=o();if(null===n)return s=!0,void(0>=a&&i(null));a+=1,r(e[n],n,h(function(t){a-=1,t?(i(t),l=!0):c()}))}}()}}function _(t){return function(e,r,i){return t(N.eachOf,e,r,i)}}function T(t){return function(e,r,i,n){return t(b(r),e,i,n)}}function E(t){return function(e,r,i){return t(N.eachOfSeries,e,r,i)}}function S(t,e,r,i){i=u(i||n),e=e||[];var o=l(e)?[]:{};t(e,function(t,e,i){r(t,function(t,r){o[e]=r,i(t)})},function(t){i(t,o)})}function w(t,e,r,i){var n=[];t(e,function(t,e,i){r(t,function(r){r&&n.push({index:e,value:t}),i()})},function(){i(p(n.sort(function(t,e){return t.index-e.index}),function(t){return t.value}))})}function C(t,e,r,i){w(t,e,function(t,e){r(t,function(t){e(!t)})},i)}function A(t,e,r){return function(i,n,o,s){function a(){s&&s(r(!1,void 0))}function h(t,i,n){return s?void o(t,function(i){s&&e(i)&&(s(r(!0,t)),s=o=!1),n()}):n()}arguments.length>3?t(i,n,h,a):(s=o,o=n,t(i,h,a))}}function M(t,e){return e}function R(t,e,r){r=r||n;var i=l(e)?[]:{};t(e,function(t,e,r){t(y(function(t,n){n.length<=1&&(n=n[0]),i[e]=n,r(t)}))},function(t){r(t,i)})}function O(t,e,r,i){var n=[];t(e,function(t,e,i){r(t,function(t,e){n=n.concat(e||[]),i(t)})},function(t){i(t,n)})}function P(t,e,r){function i(t,e,r,i){if(null!=i&&"function"!=typeof i)throw new Error("task callback must be a function");return t.started=!0,j(e)||(e=[e]),0===e.length&&t.idle()?N.setImmediate(function(){t.drain()}):(c(e,function(e){var o={data:e,callback:i||n};r?t.tasks.unshift(o):t.tasks.push(o),t.tasks.length===t.concurrency&&t.saturated()}),void N.setImmediate(t.process))}function o(t,e){return function(){s-=1;var r=!1,i=arguments;c(e,function(t){c(a,function(e,i){e!==t||r||(a.splice(i,1),r=!0)}),t.callback.apply(t,i)}),t.tasks.length+s===0&&t.drain(),t.process()}}if(null==e)e=1;else if(0===e)throw new Error("Concurrency must not be zero");var s=0,a=[],u={tasks:[],concurrency:e,payload:r,saturated:n,empty:n,drain:n,started:!1,paused:!1,push:function(t,e){i(u,t,!1,e)},kill:function(){u.drain=n,u.tasks=[]},unshift:function(t,e){i(u,t,!0,e)},process:function(){if(!u.paused&&s=e;e++)N.setImmediate(u.process)}}};return u}function D(t){return y(function(e,r){e.apply(null,r.concat([y(function(e,r){"object"==typeof console&&(e?console.error&&console.error(e):console[t]&&c(r,function(e){console[t](e)}))})]))})}function F(t){return function(e,r,i){t(d(e),r,i)}}function L(t){return y(function(e,r){var i=y(function(r){var i=this,n=r.pop();return t(e,function(t,e,n){t.apply(i,r.concat([n]))},n)});return r.length?i.apply(this,r):i})}function B(t){return y(function(e){var r=e.pop();e.push(function(){var t=arguments;i?N.setImmediate(function(){r.apply(null,t)}):r.apply(null,t)});var i=!0;t.apply(this,e),i=!1})}var I,N={},U="object"==typeof self&&self.self===self&&self||"object"==typeof i&&i.global===i&&i||this;null!=U&&(I=U.async),N.noConflict=function(){return U.async=I,N};var k=Object.prototype.toString,j=Array.isArray||function(t){return"[object Array]"===k.call(t)},G=function(t){var e=typeof t;return"function"===e||"object"===e&&!!t},X=Object.keys||function(t){var e=[];for(var r in t)t.hasOwnProperty(r)&&e.push(r);return e},Y="function"==typeof setImmediate&&setImmediate,z=Y?function(t){Y(t)}:function(t){setTimeout(t,0)};"object"==typeof e&&"function"==typeof e.nextTick?N.nextTick=e.nextTick:N.nextTick=z,N.setImmediate=Y?z:N.nextTick,N.forEach=N.each=function(t,e,r){return N.eachOf(t,x(e),r)},N.forEachSeries=N.eachSeries=function(t,e,r){return N.eachOfSeries(t,x(e),r)},N.forEachLimit=N.eachLimit=function(t,e,r,i){return b(e)(t,x(r),i)},N.forEachOf=N.eachOf=function(t,e,r){function i(t){a--,t?r(t):null===o&&0>=a&&r(null)}r=u(r||n),t=t||[];for(var o,s=m(t),a=0;null!=(o=s());)a+=1,e(t[o],o,h(i));0===a&&r(null)},N.forEachOfSeries=N.eachOfSeries=function(t,e,r){function i(){var n=!0;return null===s?r(null):(e(t[s],s,h(function(t){if(t)r(t);else{if(s=o(),null===s)return r(null);n?N.setImmediate(i):i()}})),void(n=!1))}r=u(r||n),t=t||[];var o=m(t),s=o();i()},N.forEachOfLimit=N.eachOfLimit=function(t,e,r,i){b(e)(t,r,i)},N.map=_(S),N.mapSeries=E(S),N.mapLimit=T(S),N.inject=N.foldl=N.reduce=function(t,e,r,i){N.eachOfSeries(t,function(t,i,n){r(e,t,function(t,r){e=r,n(t)})},function(t){i(t,e)})},N.foldr=N.reduceRight=function(t,e,r,i){var n=p(t,o).reverse();N.reduce(n,e,r,i)},N.transform=function(t,e,r,i){3===arguments.length&&(i=r,r=e,e=j(t)?[]:{}),N.eachOf(t,function(t,i,n){r(e,t,i,n)},function(t){i(t,e)})},N.select=N.filter=_(w),N.selectLimit=N.filterLimit=T(w),N.selectSeries=N.filterSeries=E(w),N.reject=_(C),N.rejectLimit=T(C),N.rejectSeries=E(C),N.any=N.some=A(N.eachOf,s,o),N.someLimit=A(N.eachOfLimit,s,o),N.all=N.every=A(N.eachOf,a,a),N.everyLimit=A(N.eachOfLimit,a,a),N.detect=A(N.eachOf,o,M),N.detectSeries=A(N.eachOfSeries,o,M),N.detectLimit=A(N.eachOfLimit,o,M),N.sortBy=function(t,e,r){function i(t,e){var r=t.criteria,i=e.criteria;return i>r?-1:r>i?1:0}N.map(t,function(t,r){e(t,function(e,i){e?r(e):r(null,{value:t,criteria:i})})},function(t,e){return t?r(t):void r(null,p(e.sort(i),function(t){return t.value}))})},N.auto=function(t,e,r){function i(t){d.unshift(t)}function o(t){var e=g(d,t);e>=0&&d.splice(e,1)}function s(){h--,c(d.slice(0),function(t){t()})}r||(r=e,e=null),r=u(r||n);var a=X(t),h=a.length;if(!h)return r(null);e||(e=h);var l={},p=0,d=[];i(function(){h||r(null,l)}),c(a,function(n){function a(){return e>p&&f(m,function(t,e){return t&&l.hasOwnProperty(e)},!0)&&!l.hasOwnProperty(n)}function h(){a()&&(p++,o(h),c[c.length-1](d,l))}for(var u,c=j(t[n])?t[n]:[t[n]],d=y(function(t,e){if(p--,e.length<=1&&(e=e[0]),t){var i={};v(l,function(t,e){i[e]=t}),i[n]=e,r(t,i)}else l[n]=e,N.setImmediate(s)}),m=c.slice(0,c.length-1),x=m.length;x--;){if(!(u=t[m[x]]))throw new Error("Has inexistant dependency");if(j(u)&&g(u,n)>=0)throw new Error("Has cyclic dependencies")}a()?(p++,c[c.length-1](d,l)):i(h)})},N.retry=function(t,e,r){function i(t,e){if("number"==typeof e)t.times=parseInt(e,10)||o;else{if("object"!=typeof e)throw new Error("Unsupported argument type for 'times': "+typeof e);t.times=parseInt(e.times,10)||o,t.interval=parseInt(e.interval,10)||s}}function n(t,e){function r(t,r){return function(i){t(function(t,e){i(!t||r,{err:t,result:e})},e)}}function i(t){return function(e){setTimeout(function(){e(null)},t)}}for(;h.times;){var n=!(h.times-=1);a.push(r(h.task,n)),!n&&h.interval>0&&a.push(i(h.interval))}N.series(a,function(e,r){r=r[r.length-1],(t||h.callback)(r.err,r.result)})}var o=5,s=0,a=[],h={times:o,interval:s},u=arguments.length;if(1>u||u>3)throw new Error("Invalid arguments - must be either (task), (task, callback), (times, task) or (times, task, callback)");return 2>=u&&"function"==typeof t&&(r=e,e=t),"function"!=typeof t&&i(h,t),h.callback=r,h.task=e,h.callback?n():n},N.waterfall=function(t,e){function r(t){return y(function(i,n){if(i)e.apply(null,[i].concat(n));else{var o=t.next();o?n.push(r(o)):n.push(e),B(t).apply(null,n)}})}if(e=u(e||n),!j(t)){var i=new Error("First argument to waterfall must be an array of functions");return e(i)}return t.length?void r(N.iterator(t))():e()},N.parallel=function(t,e){R(N.eachOf,t,e)},N.parallelLimit=function(t,e,r){R(b(e),t,r)},N.series=function(t,e){R(N.eachOfSeries,t,e)},N.iterator=function(t){function e(r){function i(){return t.length&&t[r].apply(null,arguments),i.next()}return i.next=function(){return ri;){var o=i+(n-i+1>>>1);r(e,t[o])>=0?i=o:n=o-1}return i}function o(t,e,o,s){if(null!=s&&"function"!=typeof s)throw new Error("task callback must be a function");return t.started=!0,j(e)||(e=[e]),0===e.length?N.setImmediate(function(){t.drain()}):void c(e,function(e){var a={data:e,priority:o,callback:"function"==typeof s?s:n};t.tasks.splice(i(t.tasks,a,r)+1,0,a),t.tasks.length===t.concurrency&&t.saturated(),N.setImmediate(t.process)})}var s=N.queue(t,e);return s.push=function(t,e,r){o(s,t,e,r)},delete s.unshift,s},N.cargo=function(t,e){return P(t,1,e)},N.log=D("log"),N.dir=D("dir"),N.memoize=function(t,e){var r={},i={};e=e||o;var n=y(function(n){var o=n.pop(),s=e.apply(null,n);s in r?N.setImmediate(function(){o.apply(null,r[s])}):s in i?i[s].push(o):(i[s]=[o],t.apply(null,n.concat([y(function(t){r[s]=t;var e=i[s];delete i[s];for(var n=0,o=e.length;o>n;n++)e[n].apply(null,t)})])))});return n.memo=r,n.unmemoized=t,n},N.unmemoize=function(t){return function(){return(t.unmemoized||t).apply(null,arguments)}},N.times=F(N.map),N.timesSeries=F(N.mapSeries),N.timesLimit=function(t,e,r,i){return N.mapLimit(d(t),e,r,i)},N.seq=function(){var t=arguments;return y(function(e){var r=this,i=e[e.length-1];"function"==typeof i?e.pop():i=n,N.reduce(t,e,function(t,e,i){e.apply(r,t.concat([y(function(t,e){i(t,e)})]))},function(t,e){i.apply(r,[t].concat(e))})})},N.compose=function(){return N.seq.apply(null,Array.prototype.reverse.call(arguments))},N.applyEach=L(N.eachOf),N.applyEachSeries=L(N.eachOfSeries),N.forever=function(t,e){function r(t){return t?i(t):void o(r)}var i=h(e||n),o=B(t);r()},N.ensureAsync=B,N.constant=y(function(t){var e=[null].concat(t);return function(t){return t.apply(this,e)}}),N.wrapSync=N.asyncify=function(t){return y(function(e){var r,i=e.pop();try{r=t.apply(this,e)}catch(n){return i(n)}G(r)&&"function"==typeof r.then?r.then(function(t){i(null,t)})["catch"](function(t){i(t.message?t:new Error(t))}):i(null,r)})},"object"==typeof r&&r.exports?r.exports=N:"function"==typeof t&&t.amd?t([],function(){return N}):U.async=N}()}).call(this,e("_process"),"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{_process:18}],17:[function(t,e,r){(function(t){function e(t,e){for(var r=0,i=t.length-1;i>=0;i--){var n=t[i];"."===n?t.splice(i,1):".."===n?(t.splice(i,1),r++):r&&(t.splice(i,1),r--)}if(e)for(;r--;r)t.unshift("..");return t}function i(t,e){if(t.filter)return t.filter(e);for(var r=[],i=0;i=-1&&!n;o--){var s=o>=0?arguments[o]:t.cwd();if("string"!=typeof s)throw new TypeError("Arguments to path.resolve must be strings");s&&(r=s+"/"+r,n="/"===s.charAt(0))}return r=e(i(r.split("/"),function(t){return!!t}),!n).join("/"),(n?"/":"")+r||"."},r.normalize=function(t){var n=r.isAbsolute(t),o="/"===s(t,-1);return t=e(i(t.split("/"),function(t){return!!t}),!n).join("/"),t||n||(t="."),t&&o&&(t+="/"),(n?"/":"")+t},r.isAbsolute=function(t){return"/"===t.charAt(0)},r.join=function(){var t=Array.prototype.slice.call(arguments,0);return r.normalize(i(t,function(t,e){if("string"!=typeof t)throw new TypeError("Arguments to path.join must be strings");return t}).join("/"))},r.relative=function(t,e){function i(t){for(var e=0;e=0&&""===t[r];r--);return e>r?[]:t.slice(e,r-e+1)}t=r.resolve(t).substr(1),e=r.resolve(e).substr(1);for(var n=i(t.split("/")),o=i(e.split("/")),s=Math.min(n.length,o.length),a=s,h=0;s>h;h++)if(n[h]!==o[h]){a=h;break}for(var u=[],h=a;he&&(e=t.length+e),t.substr(e,r)}}).call(this,t("_process"))},{_process:18}],18:[function(t,e,r){function i(){l=!1,a.length?u=a.concat(u):c=-1,u.length&&n()}function n(){if(!l){var t=setTimeout(i);l=!0;for(var e=u.length;e;){for(a=u,u=[];++c1)for(var r=1;r1&&(i=r[0]+"@",t=r[1]),t=t.replace(F,".");var n=t.split("."),o=s(n,e).join(".");return i+o}function h(t){for(var e,r,i=[],n=0,o=t.length;o>n;)e=t.charCodeAt(n++),e>=55296&&56319>=e&&o>n?(r=t.charCodeAt(n++),56320==(64512&r)?i.push(((1023&e)<<10)+(1023&r)+65536):(i.push(e),n--)):i.push(e);return i}function u(t){return s(t,function(t){var e="";return t>65535&&(t-=65536,e+=N(t>>>10&1023|55296),t=56320|1023&t),e+=N(t)}).join("")}function l(t){return 10>t-48?t-22:26>t-65?t-65:26>t-97?t-97:E}function c(t,e){return t+22+75*(26>t)-((0!=e)<<5)}function p(t,e,r){var i=0;for(t=r?I(t/A):t>>1,t+=I(t/e);t>B*w>>1;i+=E)t=I(t/B);return I(i+(B+1)*t/(t+C))}function d(t){var e,r,i,n,s,a,h,c,d,f,v=[],g=t.length,m=0,y=R,x=M;for(r=t.lastIndexOf(O),0>r&&(r=0),i=0;r>i;++i)t.charCodeAt(i)>=128&&o("not-basic"),v.push(t.charCodeAt(i));for(n=r>0?r+1:0;g>n;){for(s=m,a=1,h=E;n>=g&&o("invalid-input"),c=l(t.charCodeAt(n++)),(c>=E||c>I((T-m)/a))&&o("overflow"),m+=c*a,d=x>=h?S:h>=x+w?w:h-x,!(d>c);h+=E)f=E-d,a>I(T/f)&&o("overflow"),a*=f;e=v.length+1,x=p(m-s,e,0==s),I(m/e)>T-y&&o("overflow"),y+=I(m/e),m%=e,v.splice(m++,0,y)}return u(v)}function f(t){var e,r,i,n,s,a,u,l,d,f,v,g,m,y,x,b=[];for(t=h(t),g=t.length,e=R,r=0,s=M,a=0;g>a;++a)v=t[a],128>v&&b.push(N(v));for(i=n=b.length,n&&b.push(O);g>i;){for(u=T,a=0;g>a;++a)v=t[a],v>=e&&u>v&&(u=v);for(m=i+1,u-e>I((T-r)/m)&&o("overflow"),r+=(u-e)*m,e=u,a=0;g>a;++a)if(v=t[a],e>v&&++r>T&&o("overflow"),v==e){for(l=r,d=E;f=s>=d?S:d>=s+w?w:d-s,!(f>l);d+=E)x=l-f,y=E-f,b.push(N(c(f+x%y,0))),l=I(x/y);b.push(N(c(l,0))),s=p(r,m,i==n),r=0,++i}++r,++e}return b.join("")}function v(t){return a(t,function(t){return P.test(t)?d(t.slice(4).toLowerCase()):t})}function g(t){return a(t,function(t){return D.test(t)?"xn--"+f(t):t})}var m="object"==typeof i&&i&&!i.nodeType&&i,y="object"==typeof r&&r&&!r.nodeType&&r,x="object"==typeof e&&e;(x.global===x||x.window===x||x.self===x)&&(n=x);var b,_,T=2147483647,E=36,S=1,w=26,C=38,A=700,M=72,R=128,O="-",P=/^xn--/,D=/[^\x20-\x7E]/,F=/[\x2E\u3002\uFF0E\uFF61]/g,L={overflow:"Overflow: input needs wider integers to process","not-basic":"Illegal input >= 0x80 (not a basic code point)","invalid-input":"Invalid input"},B=E-S,I=Math.floor,N=String.fromCharCode;if(b={version:"1.3.2",ucs2:{decode:h,encode:u},decode:d,encode:f,toASCII:g,toUnicode:v},"function"==typeof t&&"object"==typeof t.amd&&t.amd)t("punycode",function(){return b});else if(m&&y)if(r.exports==m)y.exports=b;else for(_ in b)b.hasOwnProperty(_)&&(m[_]=b[_]);else n.punycode=b}(this)}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{}],20:[function(t,e,r){"use strict";function i(t,e){return Object.prototype.hasOwnProperty.call(t,e)}e.exports=function(t,e,r,o){e=e||"&",r=r||"=";var s={};if("string"!=typeof t||0===t.length)return s;var a=/\+/g;t=t.split(e);var h=1e3;o&&"number"==typeof o.maxKeys&&(h=o.maxKeys);var u=t.length;h>0&&u>h&&(u=h);for(var l=0;u>l;++l){var c,p,d,f,v=t[l].replace(a,"%20"),g=v.indexOf(r);g>=0?(c=v.substr(0,g),p=v.substr(g+1)):(c=v,p=""),d=decodeURIComponent(c), +f=decodeURIComponent(p),i(s,d)?n(s[d])?s[d].push(f):s[d]=[s[d],f]:s[d]=f}return s};var n=Array.isArray||function(t){return"[object Array]"===Object.prototype.toString.call(t)}},{}],21:[function(t,e,r){"use strict";function i(t,e){if(t.map)return t.map(e);for(var r=[],i=0;i",'"',"`"," ","\r","\n"," "],g=["{","}","|","\\","^","`"].concat(v),m=["'"].concat(g),y=["%","/","?",";","#"].concat(m),x=["/","?","#"],b=255,_=/^[a-z0-9A-Z_-]{0,63}$/,T=/^([a-z0-9A-Z_-]{0,63})(.*)$/,E={javascript:!0,"javascript:":!0},S={javascript:!0,"javascript:":!0},w={http:!0,https:!0,ftp:!0,gopher:!0,file:!0,"http:":!0,"https:":!0,"ftp:":!0,"gopher:":!0,"file:":!0},C=t("querystring");i.prototype.parse=function(t,e,r){if(!h(t))throw new TypeError("Parameter 'url' must be a string, not "+typeof t);var i=t;i=i.trim();var n=d.exec(i);if(n){n=n[0];var o=n.toLowerCase();this.protocol=o,i=i.substr(n.length)}if(r||n||i.match(/^\/\/[^@\/]+@[^@\/]+/)){var s="//"===i.substr(0,2);!s||n&&S[n]||(i=i.substr(2),this.slashes=!0)}if(!S[n]&&(s||n&&!w[n])){for(var a=-1,u=0;ul)&&(a=l)}var c,f;f=-1===a?i.lastIndexOf("@"):i.lastIndexOf("@",a),-1!==f&&(c=i.slice(0,f),i=i.slice(f+1),this.auth=decodeURIComponent(c)),a=-1;for(var u=0;ul)&&(a=l)}-1===a&&(a=i.length),this.host=i.slice(0,a),i=i.slice(a),this.parseHost(),this.hostname=this.hostname||"";var v="["===this.hostname[0]&&"]"===this.hostname[this.hostname.length-1];if(!v)for(var g=this.hostname.split(/\./),u=0,A=g.length;A>u;u++){var M=g[u];if(M&&!M.match(_)){for(var R="",O=0,P=M.length;P>O;O++)R+=M.charCodeAt(O)>127?"x":M[O];if(!R.match(_)){var D=g.slice(0,u),F=g.slice(u+1),L=M.match(T);L&&(D.push(L[1]),F.unshift(L[2])),F.length&&(i="/"+F.join(".")+i),this.hostname=D.join(".");break}}}if(this.hostname.length>b?this.hostname="":this.hostname=this.hostname.toLowerCase(),!v){for(var B=this.hostname.split("."),I=[],u=0;uu;u++){var j=m[u],G=encodeURIComponent(j);G===j&&(G=escape(j)),i=i.split(j).join(G)}var X=i.indexOf("#");-1!==X&&(this.hash=i.substr(X),i=i.slice(0,X));var Y=i.indexOf("?");if(-1!==Y?(this.search=i.substr(Y),this.query=i.substr(Y+1),e&&(this.query=C.parse(this.query)),i=i.slice(0,Y)):e&&(this.search="",this.query={}),i&&(this.pathname=i),w[o]&&this.hostname&&!this.pathname&&(this.pathname="/"),this.pathname||this.search){var U=this.pathname||"",N=this.search||"";this.path=U+N}return this.href=this.format(),this},i.prototype.format=function(){var t=this.auth||"";t&&(t=encodeURIComponent(t),t=t.replace(/%3A/i,":"),t+="@");var e=this.protocol||"",r=this.pathname||"",i=this.hash||"",n=!1,o="";this.host?n=t+this.host:this.hostname&&(n=t+(-1===this.hostname.indexOf(":")?this.hostname:"["+this.hostname+"]"),this.port&&(n+=":"+this.port)),this.query&&u(this.query)&&Object.keys(this.query).length&&(o=C.stringify(this.query));var s=this.search||o&&"?"+o||"";return e&&":"!==e.substr(-1)&&(e+=":"),this.slashes||(!e||w[e])&&n!==!1?(n="//"+(n||""),r&&"/"!==r.charAt(0)&&(r="/"+r)):n||(n=""),i&&"#"!==i.charAt(0)&&(i="#"+i),s&&"?"!==s.charAt(0)&&(s="?"+s),r=r.replace(/[?#]/g,function(t){return encodeURIComponent(t)}),s=s.replace("#","%23"),e+n+r+s+i},i.prototype.resolve=function(t){return this.resolveObject(n(t,!1,!0)).format()},i.prototype.resolveObject=function(t){if(h(t)){var e=new i;e.parse(t,!1,!0),t=e}var r=new i;if(Object.keys(this).forEach(function(t){r[t]=this[t]},this),r.hash=t.hash,""===t.href)return r.href=r.format(),r;if(t.slashes&&!t.protocol)return Object.keys(t).forEach(function(e){"protocol"!==e&&(r[e]=t[e])}),w[r.protocol]&&r.hostname&&!r.pathname&&(r.path=r.pathname="/"),r.href=r.format(),r;if(t.protocol&&t.protocol!==r.protocol){if(!w[t.protocol])return Object.keys(t).forEach(function(e){r[e]=t[e]}),r.href=r.format(),r;if(r.protocol=t.protocol,t.host||S[t.protocol])r.pathname=t.pathname;else{for(var n=(t.pathname||"").split("/");n.length&&!(t.host=n.shift()););t.host||(t.host=""),t.hostname||(t.hostname=""),""!==n[0]&&n.unshift(""),n.length<2&&n.unshift(""),r.pathname=n.join("/")}if(r.search=t.search,r.query=t.query,r.host=t.host||"",r.auth=t.auth,r.hostname=t.hostname||t.host,r.port=t.port,r.pathname||r.search){var o=r.pathname||"",s=r.search||"";r.path=o+s}return r.slashes=r.slashes||t.slashes,r.href=r.format(),r}var a=r.pathname&&"/"===r.pathname.charAt(0),u=t.host||t.pathname&&"/"===t.pathname.charAt(0),p=u||a||r.host&&t.pathname,d=p,f=r.pathname&&r.pathname.split("/")||[],n=t.pathname&&t.pathname.split("/")||[],v=r.protocol&&!w[r.protocol];if(v&&(r.hostname="",r.port=null,r.host&&(""===f[0]?f[0]=r.host:f.unshift(r.host)),r.host="",t.protocol&&(t.hostname=null,t.port=null,t.host&&(""===n[0]?n[0]=t.host:n.unshift(t.host)),t.host=null),p=p&&(""===n[0]||""===f[0])),u)r.host=t.host||""===t.host?t.host:r.host,r.hostname=t.hostname||""===t.hostname?t.hostname:r.hostname,r.search=t.search,r.query=t.query,f=n;else if(n.length)f||(f=[]),f.pop(),f=f.concat(n),r.search=t.search,r.query=t.query;else if(!c(t.search)){if(v){r.hostname=r.host=f.shift();var g=r.host&&r.host.indexOf("@")>0?r.host.split("@"):!1;g&&(r.auth=g.shift(),r.host=r.hostname=g.shift())}return r.search=t.search,r.query=t.query,l(r.pathname)&&l(r.search)||(r.path=(r.pathname?r.pathname:"")+(r.search?r.search:"")),r.href=r.format(),r}if(!f.length)return r.pathname=null,r.search?r.path="/"+r.search:r.path=null,r.href=r.format(),r;for(var m=f.slice(-1)[0],y=(r.host||t.host)&&("."===m||".."===m)||""===m,x=0,b=f.length;b>=0;b--)m=f[b],"."==m?f.splice(b,1):".."===m?(f.splice(b,1),x++):x&&(f.splice(b,1),x--);if(!p&&!d)for(;x--;x)f.unshift("..");!p||""===f[0]||f[0]&&"/"===f[0].charAt(0)||f.unshift(""),y&&"/"!==f.join("/").substr(-1)&&f.push("");var _=""===f[0]||f[0]&&"/"===f[0].charAt(0);if(v){r.hostname=r.host=_?"":f.length?f.shift():"";var g=r.host&&r.host.indexOf("@")>0?r.host.split("@"):!1;g&&(r.auth=g.shift(),r.host=r.hostname=g.shift())}return p=p||r.host&&f.length,p&&!_&&f.unshift(""),f.length?r.pathname=f.join("/"):(r.pathname=null,r.path=null),l(r.pathname)&&l(r.search)||(r.path=(r.pathname?r.pathname:"")+(r.search?r.search:"")),r.auth=t.auth||r.auth,r.slashes=r.slashes||t.slashes,r.href=r.format(),r},i.prototype.parseHost=function(){var t=this.host,e=f.exec(t);e&&(e=e[0],":"!==e&&(this.port=e.substr(1)),t=t.substr(0,t.length-e.length)),t&&(this.hostname=t)}},{punycode:19,querystring:22}],24:[function(t,e,r){"use strict";function i(t,e,r){r=r||2;var i=e&&e.length,o=i?e[0]*r:t.length,a=n(t,0,o,r,!0),h=[];if(!a)return h;var u,l,p,d,f,v,g;if(i&&(a=c(t,e,a,r)),t.length>80*r){u=p=t[0],l=d=t[1];for(var m=r;o>m;m+=r)f=t[m],v=t[m+1],u>f&&(u=f),l>v&&(l=v),f>p&&(p=f),v>d&&(d=v);g=Math.max(p-u,d-l)}return s(a,h,r,u,l,g),h}function n(t,e,r,i,n){var o,s,a,h=0;for(o=e,s=r-i;r>o;o+=i)h+=(t[s]-t[o])*(t[o+1]+t[s+1]),s=o;if(n===h>0)for(o=e;r>o;o+=i)a=M(o,t[o],t[o+1],a);else for(o=r-i;o>=e;o-=i)a=M(o,t[o],t[o+1],a);return a}function o(t,e){if(!t)return t;e||(e=t);var r,i=t;do if(r=!1,i.steiner||!T(i,i.next)&&0!==_(i.prev,i,i.next))i=i.next;else{if(R(i),i=e=i.prev,i===i.next)return null;r=!0}while(r||i!==e);return e}function s(t,e,r,i,n,c,p){if(t){!p&&c&&v(t,i,n,c);for(var d,f,g=t;t.prev!==t.next;)if(d=t.prev,f=t.next,c?h(t,i,n,c):a(t))e.push(d.i/r),e.push(t.i/r),e.push(f.i/r),R(t),t=f.next,g=f.next;else if(t=f,t===g){p?1===p?(t=u(t,e,r),s(t,e,r,i,n,c,2)):2===p&&l(t,e,r,i,n,c):s(o(t),e,r,i,n,c,1);break}}}function a(t){var e=t.prev,r=t,i=t.next;if(_(e,r,i)>=0)return!1;for(var n=t.next.next;n!==t.prev;){if(x(e.x,e.y,r.x,r.y,i.x,i.y,n.x,n.y)&&_(n.prev,n,n.next)>=0)return!1;n=n.next}return!0}function h(t,e,r,i){var n=t.prev,o=t,s=t.next;if(_(n,o,s)>=0)return!1;for(var a=n.xo.x?n.x>s.x?n.x:s.x:o.x>s.x?o.x:s.x,l=n.y>o.y?n.y>s.y?n.y:s.y:o.y>s.y?o.y:s.y,c=m(a,h,e,r,i),p=m(u,l,e,r,i),d=t.nextZ;d&&d.z<=p;){if(d!==t.prev&&d!==t.next&&x(n.x,n.y,o.x,o.y,s.x,s.y,d.x,d.y)&&_(d.prev,d,d.next)>=0)return!1;d=d.nextZ}for(d=t.prevZ;d&&d.z>=c;){if(d!==t.prev&&d!==t.next&&x(n.x,n.y,o.x,o.y,s.x,s.y,d.x,d.y)&&_(d.prev,d,d.next)>=0)return!1;d=d.prevZ}return!0}function u(t,e,r){var i=t;do{var n=i.prev,o=i.next.next;E(n,i,i.next,o)&&w(n,o)&&w(o,n)&&(e.push(n.i/r),e.push(i.i/r),e.push(o.i/r),R(i),R(i.next),i=t=o),i=i.next}while(i!==t);return i}function l(t,e,r,i,n,a){var h=t;do{for(var u=h.next.next;u!==h.prev;){if(h.i!==u.i&&b(h,u)){var l=A(h,u);return h=o(h,h.next),l=o(l,l.next),s(h,e,r,i,n,a),void s(l,e,r,i,n,a)}u=u.next}h=h.next}while(h!==t)}function c(t,e,r,i){var s,a,h,u,l,c=[];for(s=0,a=e.length;a>s;s++)h=e[s]*i,u=a-1>s?e[s+1]*i:t.length,l=n(t,h,u,i,!1),l===l.next&&(l.steiner=!0),c.push(y(l));for(c.sort(p),s=0;s=i.next.y){var a=i.x+(o-i.y)*(i.next.x-i.x)/(i.next.y-i.y);n>=a&&a>s&&(s=a,r=i.x=i.x&&i.x>=r.x&&x(oh||h===l&&i.x>r.x)&&w(i,t)&&(r=i,l=h)),i=i.next;return r}function v(t,e,r,i){var n=t;do null===n.z&&(n.z=m(n.x,n.y,e,r,i)),n.prevZ=n.prev,n.nextZ=n.next,n=n.next;while(n!==t);n.prevZ.nextZ=null,n.prevZ=null,g(n)}function g(t){var e,r,i,n,o,s,a,h,u=1;do{for(r=t,t=null,o=null,s=0;r;){for(s++,i=r,a=0,e=0;u>e&&(a++,i=i.nextZ,i);e++);for(h=u;a>0||h>0&&i;)0===a?(n=i,i=i.nextZ,h--):0!==h&&i?r.z<=i.z?(n=r,r=r.nextZ,a--):(n=i,i=i.nextZ,h--):(n=r,r=r.nextZ,a--),o?o.nextZ=n:t=n,n.prevZ=o,o=n;r=i}o.nextZ=null,u*=2}while(s>1);return t}function m(t,e,r,i,n){return t=32767*(t-r)/n,e=32767*(e-i)/n,t=16711935&(t|t<<8),t=252645135&(t|t<<4),t=858993459&(t|t<<2),t=1431655765&(t|t<<1),e=16711935&(e|e<<8),e=252645135&(e|e<<4),e=858993459&(e|e<<2),e=1431655765&(e|e<<1),t|e<<1}function y(t){var e=t,r=t;do e.x=0&&(t-s)*(i-a)-(r-s)*(e-a)>=0&&(r-s)*(o-a)-(n-s)*(i-a)>=0}function b(t,e){return T(t,e)||t.next.i!==e.i&&t.prev.i!==e.i&&!S(t,e)&&w(t,e)&&w(e,t)&&C(t,e)}function _(t,e,r){return(e.y-t.y)*(r.x-e.x)-(e.x-t.x)*(r.y-e.y)}function T(t,e){return t.x===e.x&&t.y===e.y}function E(t,e,r,i){return _(t,e,r)>0!=_(t,e,i)>0&&_(r,i,t)>0!=_(r,i,e)>0}function S(t,e){var r=t;do{if(r.i!==t.i&&r.next.i!==t.i&&r.i!==e.i&&r.next.i!==e.i&&E(r,r.next,t,e))return!0;r=r.next}while(r!==t);return!1}function w(t,e){return _(t.prev,t,t.next)<0?_(t,e,t.next)>=0&&_(t,t.prev,e)>=0:_(t,e,t.prev)<0||_(t,t.next,e)<0}function C(t,e){var r=t,i=!1,n=(t.x+e.x)/2,o=(t.y+e.y)/2;do r.y>o!=r.next.y>o&&n<(r.next.x-r.x)*(o-r.y)/(r.next.y-r.y)+r.x&&(i=!i),r=r.next;while(r!==t);return i}function A(t,e){var r=new O(t.i,t.x,t.y),i=new O(e.i,e.x,e.y),n=t.next,o=e.prev;return t.next=e,e.prev=t,r.next=n,n.prev=r,i.next=r,r.prev=i,o.next=i,i.prev=o,i}function M(t,e,r,i){var n=new O(t,e,r);return i?(n.next=i.next,n.prev=i,i.next.prev=n,i.next=n):(n.prev=n,n.next=n),n}function R(t){t.next.prev=t.prev,t.prev.next=t.next,t.prevZ&&(t.prevZ.nextZ=t.nextZ),t.nextZ&&(t.nextZ.prevZ=t.prevZ)}function O(t,e,r){this.i=t,this.x=e,this.y=r,this.prev=null,this.next=null,this.z=null,this.prevZ=null,this.nextZ=null,this.steiner=!1}e.exports=i},{}],25:[function(t,e,r){"use strict";function i(t,e,r){this.fn=t,this.context=e,this.once=r||!1}function n(){}var o="function"!=typeof Object.create?"~":!1;n.prototype._events=void 0,n.prototype.listeners=function(t,e){var r=o?o+t:t,i=this._events&&this._events[r];if(e)return!!i;if(!i)return[];if(i.fn)return[i.fn];for(var n=0,s=i.length,a=new Array(s);s>n;n++)a[n]=i[n].fn;return a},n.prototype.emit=function(t,e,r,i,n,s){var a=o?o+t:t;if(!this._events||!this._events[a])return!1;var h,u,l=this._events[a],c=arguments.length;if("function"==typeof l.fn){switch(l.once&&this.removeListener(t,l.fn,void 0,!0),c){case 1:return l.fn.call(l.context),!0;case 2:return l.fn.call(l.context,e),!0;case 3:return l.fn.call(l.context,e,r),!0;case 4:return l.fn.call(l.context,e,r,i),!0;case 5:return l.fn.call(l.context,e,r,i,n),!0;case 6:return l.fn.call(l.context,e,r,i,n,s),!0}for(u=1,h=new Array(c-1);c>u;u++)h[u-1]=arguments[u];l.fn.apply(l.context,h)}else{var p,d=l.length;for(u=0;d>u;u++)switch(l[u].once&&this.removeListener(t,l[u].fn,void 0,!0),c){case 1:l[u].fn.call(l[u].context);break;case 2:l[u].fn.call(l[u].context,e);break;case 3:l[u].fn.call(l[u].context,e,r);break;default:if(!h)for(p=1,h=new Array(c-1);c>p;p++)h[p-1]=arguments[p];l[u].fn.apply(l[u].context,h)}}return!0},n.prototype.on=function(t,e,r){var n=new i(e,r||this),s=o?o+t:t;return this._events||(this._events=o?{}:Object.create(null)),this._events[s]?this._events[s].fn?this._events[s]=[this._events[s],n]:this._events[s].push(n):this._events[s]=n,this},n.prototype.once=function(t,e,r){var n=new i(e,r||this,!0),s=o?o+t:t;return this._events||(this._events=o?{}:Object.create(null)),this._events[s]?this._events[s].fn?this._events[s]=[this._events[s],n]:this._events[s].push(n):this._events[s]=n,this},n.prototype.removeListener=function(t,e,r,i){var n=o?o+t:t;if(!this._events||!this._events[n])return this;var s=this._events[n],a=[];if(e)if(s.fn)(s.fn!==e||i&&!s.once||r&&s.context!==r)&&a.push(s);else for(var h=0,u=s.length;u>h;h++)(s[h].fn!==e||i&&!s[h].once||r&&s[h].context!==r)&&a.push(s[h]);return a.length?this._events[n]=1===a.length?a[0]:a:delete this._events[n],this},n.prototype.removeAllListeners=function(t){return this._events?(t?delete this._events[o?o+t:t]:this._events=o?{}:Object.create(null),this):this},n.prototype.off=n.prototype.removeListener,n.prototype.addListener=n.prototype.on,n.prototype.setMaxListeners=function(){return this},n.prefixed=o,"undefined"!=typeof e&&(e.exports=n)},{}],26:[function(t,e,r){"use strict";function i(t){if(null===t||void 0===t)throw new TypeError("Object.assign cannot be called with null or undefined");return Object(t)}var n=Object.prototype.hasOwnProperty,o=Object.prototype.propertyIsEnumerable;e.exports=Object.assign||function(t,e){for(var r,s,a=i(t),h=1;h=t.length&&r())}if(r=r||function(){},!t.length)return r();var o=0;u(t,function(t){e(t,i(n))})},s.forEach=s.each,s.eachSeries=function(t,e,r){if(r=r||function(){},!t.length)return r();var i=0,n=function(){e(t[i],function(e){e?(r(e),r=function(){}):(i+=1,i>=t.length?r():n())})};n()},s.forEachSeries=s.eachSeries,s.eachLimit=function(t,e,r,i){var n=d(e);n.apply(null,[t,r,i])},s.forEachLimit=s.eachLimit;var d=function(t){return function(e,r,i){if(i=i||function(){},!e.length||0>=t)return i();var n=0,o=0,s=0;!function a(){if(n>=e.length)return i();for(;t>s&&o=e.length?i():a())})}()}},f=function(t){return function(){var e=Array.prototype.slice.call(arguments);return t.apply(null,[s.each].concat(e))}},v=function(t,e){return function(){var r=Array.prototype.slice.call(arguments);return e.apply(null,[d(t)].concat(r))}},g=function(t){return function(){var e=Array.prototype.slice.call(arguments);return t.apply(null,[s.eachSeries].concat(e))}},m=function(t,e,r,i){if(e=l(e,function(t,e){return{index:e,value:t}}),i){var n=[];t(e,function(t,e){r(t.value,function(r,i){n[t.index]=i,e(r)})},function(t){i(t,n)})}else t(e,function(t,e){r(t.value,function(t){e(t)})})};s.map=f(m),s.mapSeries=g(m),s.mapLimit=function(t,e,r,i){return y(e)(t,r,i)};var y=function(t){return v(t,m)};s.reduce=function(t,e,r,i){s.eachSeries(t,function(t,i){r(e,t,function(t,r){e=r,i(t)})},function(t){i(t,e)})},s.inject=s.reduce,s.foldl=s.reduce,s.reduceRight=function(t,e,r,i){var n=l(t,function(t){return t}).reverse();s.reduce(n,e,r,i)},s.foldr=s.reduceRight;var x=function(t,e,r,i){var n=[];e=l(e,function(t,e){return{index:e,value:t}}),t(e,function(t,e){r(t.value,function(r){r&&n.push(t),e()})},function(t){i(l(n.sort(function(t,e){return t.index-e.index}),function(t){return t.value}))})};s.filter=f(x),s.filterSeries=g(x),s.select=s.filter,s.selectSeries=s.filterSeries;var b=function(t,e,r,i){var n=[];e=l(e,function(t,e){return{index:e,value:t}}),t(e,function(t,e){r(t.value,function(r){r||n.push(t),e()})},function(t){i(l(n.sort(function(t,e){return t.index-e.index}),function(t){return t.value}))})};s.reject=f(b),s.rejectSeries=g(b);var _=function(t,e,r,i){t(e,function(t,e){r(t,function(r){r?(i(t),i=function(){}):e()})},function(t){i()})};s.detect=f(_),s.detectSeries=g(_),s.some=function(t,e,r){s.each(t,function(t,i){e(t,function(t){t&&(r(!0),r=function(){}),i()})},function(t){r(!1)})},s.any=s.some,s.every=function(t,e,r){s.each(t,function(t,i){e(t,function(t){t||(r(!1),r=function(){}),i()})},function(t){r(!0)})},s.all=s.every,s.sortBy=function(t,e,r){s.map(t,function(t,r){e(t,function(e,i){e?r(e):r(null,{value:t,criteria:i})})},function(t,e){if(t)return r(t);var i=function(t,e){var r=t.criteria,i=e.criteria;return i>r?-1:r>i?1:0};r(null,l(e.sort(i),function(t){return t.value}))})},s.auto=function(t,e){e=e||function(){};var r=p(t),i=r.length;if(!i)return e();var n={},o=[],a=function(t){o.unshift(t)},l=function(t){for(var e=0;ei;){var o=i+(n-i+1>>>1);r(e,t[o])>=0?i=o:n=o-1}return i}function n(t,e,n,o){return t.started||(t.started=!0),h(e)||(e=[e]),0==e.length?s.setImmediate(function(){t.drain&&t.drain()}):void u(e,function(e){var a={data:e,priority:n,callback:"function"==typeof o?o:null};t.tasks.splice(i(t.tasks,a,r)+1,0,a),t.saturated&&t.tasks.length===t.concurrency&&t.saturated(),s.setImmediate(t.process)})}var o=s.queue(t,e);return o.push=function(t,e,r){n(o,t,e,r)},delete o.unshift,o},s.cargo=function(t,e){var r=!1,i=[],n={tasks:i,payload:e,saturated:null,empty:null,drain:null,drained:!0,push:function(t,r){h(t)||(t=[t]),u(t,function(t){i.push({data:t,callback:"function"==typeof r?r:null}),n.drained=!1,n.saturated&&i.length===e&&n.saturated()}),s.setImmediate(n.process)},process:function o(){if(!r){if(0===i.length)return n.drain&&!n.drained&&n.drain(),void(n.drained=!0);var s="number"==typeof e?i.splice(0,e):i.splice(0,i.length),a=l(s,function(t){return t.data});n.empty&&n.empty(),r=!0,t(a,function(){r=!1;var t=arguments;u(s,function(e){e.callback&&e.callback.apply(null,t)}),o()})}},length:function(){return i.length},running:function(){return r}};return n};var S=function(t){return function(e){var r=Array.prototype.slice.call(arguments,1);e.apply(null,r.concat([function(e){var r=Array.prototype.slice.call(arguments,1);"undefined"!=typeof console&&(e?console.error&&console.error(e):console[t]&&u(r,function(e){console[t](e)}))}]))}};s.log=S("log"),s.dir=S("dir"),s.memoize=function(t,e){var r={},i={};e=e||function(t){return t};var n=function(){var n=Array.prototype.slice.call(arguments),o=n.pop(),a=e.apply(null,n);a in r?s.nextTick(function(){o.apply(null,r[a])}):a in i?i[a].push(o):(i[a]=[o],t.apply(null,n.concat([function(){r[a]=arguments;var t=i[a];delete i[a];for(var e=0,n=t.length;n>e;e++)t[e].apply(null,arguments)}])))};return n.memo=r,n.unmemoized=t,n},s.unmemoize=function(t){return function(){return(t.unmemoized||t).apply(null,arguments)}},s.times=function(t,e,r){for(var i=[],n=0;t>n;n++)i.push(n);return s.map(i,e,r)},s.timesSeries=function(t,e,r){for(var i=[],n=0;t>n;n++)i.push(n);return s.mapSeries(i,e,r)},s.seq=function(){var t=arguments;return function(){var e=this,r=Array.prototype.slice.call(arguments),i=r.pop();s.reduce(t,r,function(t,r,i){r.apply(e,t.concat([function(){var t=arguments[0],e=Array.prototype.slice.call(arguments,1);i(t,e)}]))},function(t,r){i.apply(e,[t].concat(r))})}},s.compose=function(){return s.seq.apply(null,Array.prototype.reverse.call(arguments))};var w=function(t,e){var r=function(){var r=this,i=Array.prototype.slice.call(arguments),n=i.pop();return t(e,function(t,e){t.apply(r,i.concat([e]))},n)};if(arguments.length>2){var i=Array.prototype.slice.call(arguments,2);return r.apply(this,i)}return r};s.applyEach=f(w),s.applyEachSeries=g(w),s.forever=function(t,e){function r(i){if(i){if(e)return e(i);throw i}t(r)}r()},"undefined"!=typeof r&&r.exports?r.exports=s:"undefined"!=typeof t&&t.amd?t([],function(){return s}):n.async=s}()}).call(this,e("_process"))},{_process:18}],28:[function(t,e,r){function i(t,e){a.call(this),e=e||10,this.baseUrl=t||"",this.progress=0,this.loading=!1,this._progressChunk=0,this._beforeMiddleware=[],this._afterMiddleware=[],this._boundLoadResource=this._loadResource.bind(this),this._boundOnLoad=this._onLoad.bind(this),this._buffer=[],this._numToLoad=0,this._queue=n.queue(this._boundLoadResource,e),this.resources={}}var n=t("async"),o=t("url"),s=t("./Resource"),a=t("eventemitter3");i.prototype=Object.create(a.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.add=i.prototype.enqueue=function(t,e,r,i){if(Array.isArray(t)){for(var n=0;n0)if(this.xhrType===i.XHR_RESPONSE_TYPE.TEXT)this.data=t.responseText;else if(this.xhrType===i.XHR_RESPONSE_TYPE.JSON)try{this.data=JSON.parse(t.responseText),this.isJson=!0}catch(r){this.error=new Error("Error trying to parse loaded json:",r)}else if(this.xhrType===i.XHR_RESPONSE_TYPE.DOCUMENT)try{if(window.DOMParser){var n=new DOMParser;this.data=n.parseFromString(t.responseText,"text/xml")}else{var o=document.createElement("div");o.innerHTML=t.responseText,this.data=o}this.isXml=!0}catch(r){this.error=new Error("Error trying to parse loaded xml:",r)}else this.data=t.response||t.responseText;else this.error=new Error("["+t.status+"]"+t.statusText+":"+t.responseURL);this.complete()},i.prototype._determineCrossOrigin=function(t,e){if(0===t.indexOf("data:"))return"";e=e||window.location,u||(u=document.createElement("a")),u.href=t,t=a.parse(u.href);var r=!t.port&&""===e.port||t.port===e.port;return t.hostname===e.hostname&&r&&t.protocol===e.protocol?"":"anonymous"},i.prototype._determineXhrType=function(){return i._xhrTypeMap[this._getExtension()]||i.XHR_RESPONSE_TYPE.TEXT},i.prototype._determineLoadType=function(){return i._loadTypeMap[this._getExtension()]||i.LOAD_TYPE.XHR},i.prototype._getExtension=function(){var t,e=this.url;if(this.isDataUrl){var r=e.indexOf("/");t=e.substring(r+1,e.indexOf(";",r))}else{var i=e.indexOf("?");-1!==i&&(e=e.substring(0,i)),t=e.substring(e.lastIndexOf(".")+1)}return t},i.prototype._getMimeFromXhrType=function(t){switch(t){case i.XHR_RESPONSE_TYPE.BUFFER:return"application/octet-binary";case i.XHR_RESPONSE_TYPE.BLOB:return"application/blob";case i.XHR_RESPONSE_TYPE.DOCUMENT:return"application/xml";case i.XHR_RESPONSE_TYPE.JSON:return"application/json";case i.XHR_RESPONSE_TYPE.DEFAULT:case i.XHR_RESPONSE_TYPE.TEXT:default:return"text/plain"}},i.LOAD_TYPE={XHR:1,IMAGE:2,AUDIO:3,VIDEO:4},i.XHR_READY_STATE={UNSENT:0,OPENED:1,HEADERS_RECEIVED:2,LOADING:3,DONE:4},i.XHR_RESPONSE_TYPE={DEFAULT:"text",BUFFER:"arraybuffer",BLOB:"blob",DOCUMENT:"document",JSON:"json",TEXT:"text"},i._loadTypeMap={gif:i.LOAD_TYPE.IMAGE,png:i.LOAD_TYPE.IMAGE,bmp:i.LOAD_TYPE.IMAGE,jpg:i.LOAD_TYPE.IMAGE,jpeg:i.LOAD_TYPE.IMAGE,tif:i.LOAD_TYPE.IMAGE,tiff:i.LOAD_TYPE.IMAGE,webp:i.LOAD_TYPE.IMAGE,tga:i.LOAD_TYPE.IMAGE},i._xhrTypeMap={xhtml:i.XHR_RESPONSE_TYPE.DOCUMENT,html:i.XHR_RESPONSE_TYPE.DOCUMENT,htm:i.XHR_RESPONSE_TYPE.DOCUMENT,xml:i.XHR_RESPONSE_TYPE.DOCUMENT,tmx:i.XHR_RESPONSE_TYPE.DOCUMENT,tsx:i.XHR_RESPONSE_TYPE.DOCUMENT,svg:i.XHR_RESPONSE_TYPE.DOCUMENT,gif:i.XHR_RESPONSE_TYPE.BLOB,png:i.XHR_RESPONSE_TYPE.BLOB,bmp:i.XHR_RESPONSE_TYPE.BLOB,jpg:i.XHR_RESPONSE_TYPE.BLOB,jpeg:i.XHR_RESPONSE_TYPE.BLOB,tif:i.XHR_RESPONSE_TYPE.BLOB,tiff:i.XHR_RESPONSE_TYPE.BLOB,webp:i.XHR_RESPONSE_TYPE.BLOB,tga:i.XHR_RESPONSE_TYPE.BLOB,json:i.XHR_RESPONSE_TYPE.JSON,text:i.XHR_RESPONSE_TYPE.TEXT,txt:i.XHR_RESPONSE_TYPE.TEXT},i.setExtensionLoadType=function(t,e){o(i._loadTypeMap,t,e)},i.setExtensionXhrType=function(t,e){o(i._xhrTypeMap,t,e)}},{eventemitter3:25,url:23}],30:[function(t,e,r){e.exports={_keyStr:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",encodeBinary:function(t){for(var e,r="",i=new Array(4),n=0,o=0,s=0;n>2,i[1]=(3&e[0])<<4|e[1]>>4,i[2]=(15&e[1])<<2|e[2]>>6,i[3]=63&e[2],s=n-(t.length-1)){case 2:i[3]=64,i[2]=64;break;case 1:i[3]=64}for(o=0;o","Richard Davey "],main:"./src/index.js",homepage:"http://goodboydigital.com/",bugs:"https://github.com/pixijs/pixi.js/issues",license:"MIT",repository:{type:"git",url:"https://github.com/pixijs/pixi.js.git"},scripts:{start:"gulp && gulp watch",test:"gulp && testem ci",build:"gulp",docs:"jsdoc -c ./gulp/util/jsdoc.conf.json -R README.md"},files:["bin/","src/","CONTRIBUTING.md","LICENSE","package.json","README.md"],dependencies:{async:"^1.5.0",brfs:"^1.4.1",earcut:"^2.0.7",eventemitter3:"^1.1.1","object-assign":"^4.0.1","pixi-gl-core":"git+https://github.com/GoodBoyDigital/pixi-gl-core.git","resource-loader":"^1.6.4"},devDependencies:{browserify:"^11.1.0",chai:"^3.2.0",del:"^2.0.2",gulp:"^3.9.0","gulp-cached":"^1.1.0","gulp-concat":"^2.6.0","gulp-debug":"^2.1.0","gulp-header":"^1.7.1","gulp-jshint":"^1.11.2","gulp-mirror":"^0.4.0","gulp-plumber":"^1.0.1","gulp-rename":"^1.2.2","gulp-sourcemaps":"^1.5.2","gulp-uglify":"^1.4.1","gulp-util":"^3.0.6","jaguarjs-jsdoc":"git+https://github.com/davidshimjs/jaguarjs-jsdoc.git",jsdoc:"^3.3.2","jshint-summary":"^0.4.0",minimist:"^1.2.0",mocha:"^2.3.2","require-dir":"^0.3.0","run-sequence":"^1.1.2",testem:"^0.9.4","vinyl-buffer":"^1.0.0","vinyl-source-stream":"^1.1.0",watchify:"^3.4.0"},browserify:{transform:["brfs"]}}},{}],35:[function(t,e,r){function i(t){var e=document.createElement("div");e.style.width="100px",e.style.height="100px",e.style.position="absolute",e.style.top=0,e.style.left=0,e.style.zIndex=2,this.div=e,this.pool=[],this.renderId=0,this.debug=!1,this.renderer=t,this.children=[],this._onKeyDown=this._onKeyDown.bind(this),this._onMouseMove=this._onMouseMove.bind(this),this.isActive=!1,window.addEventListener("keydown",this._onKeyDown,!1)}var n=t("../core");Object.assign(n.DisplayObject.prototype,t("./accessibleTarget")),i.prototype.constructor=i,e.exports=i,i.prototype.activate=function(){this.isActive||(this.isActive=!0,window.document.addEventListener("mousemove",this._onMouseMove,!0),window.removeEventListener("keydown",this._onKeyDown,!1),this.renderer.on("postrender",this.update,this),this.renderer.view.parentNode.appendChild(this.div))},i.prototype.deactivate=function(){this.isActive&&(this.isActive=!1,window.document.removeEventListener("mousemove",this._onMouseMove),window.addEventListener("keydown",this._onKeyDown,!1),this.renderer.off("postrender",this.update),this.div.parentNode.removeChild(this.div))},i.prototype.updateAccessibleObjects=function(t){if(t.visible){t.accessible&&t.interactive&&(t._accessibleActive||this.addChild(t),t.renderId=this.renderId);for(var e=t.children,r=e.length-1;r>=0;r--)this.updateAccessibleObjects(e[r])}},i.prototype.update=function(){this.updateAccessibleObjects(this.renderer._lastObjectRendered);var t=this.renderer.view.getBoundingClientRect(),e=t.width/this.renderer.width,r=t.height/this.renderer.height,i=this.div;i.style.left=t.left+"px",i.style.top=t.top+"px",i.style.width=this.renderer.width+"px",i.style.height=this.renderer.height+"px";for(var o=0;othis.renderer.width&&(t.width=this.renderer.width-t.x),t.y+t.height>this.renderer.height&&(t.height=this.renderer.height-t.y)},i.prototype.addChild=function(t){var e=this.pool.pop();e||(e=document.createElement("button"),e.style.width="100px",e.style.height="100px",e.style.backgroundColor=this.debug?"rgba(255,0,0,0.5)":"transparent",e.style.position="absolute",e.style.zIndex=2,e.style.borderStyle="none",e.addEventListener("click",this._onClick.bind(this)),e.addEventListener("focus",this._onFocus.bind(this)),e.addEventListener("focusout",this._onFocusOut.bind(this))),e.title=t.accessibleTitle||"displayObject "+this.tabIndex,t._accessibleActive=!0,t._accessibleDiv=e,e.displayObject=t,this.children.push(t),this.div.appendChild(t._accessibleDiv),t._accessibleDiv.tabIndex=t.tabIndex},i.prototype._onClick=function(t){var e=this.renderer.plugins.interaction;e.dispatchEvent(t.target.displayObject,"click",e.eventData)},i.prototype._onFocus=function(t){var e=this.renderer.plugins.interaction;e.dispatchEvent(t.target.displayObject,"mouseover",e.eventData)},i.prototype._onFocusOut=function(t){var e=this.renderer.plugins.interaction;e.dispatchEvent(t.target.displayObject,"mouseout",e.eventData)},i.prototype._onKeyDown=function(t){9===t.keyCode&&this.activate()},i.prototype._onMouseMove=function(){this.deactivate()},i.prototype.destroy=function(){this.div=null;for(var t=0;t1)for(var r=0;e>r;r++)this.addChild(arguments[r]);else t.parent&&t.parent.removeChild(t),t.parent=this,this.children.push(t),this.onChildrenChange(this.children.length-1),t.emit("added",this);return t},i.prototype.addChildAt=function(t,e){if(e>=0&&e<=this.children.length)return t.parent&&t.parent.removeChild(t),t.parent=this,this.children.splice(e,0,t),this.onChildrenChange(e),t.emit("added",this),t;throw new Error(t+"addChildAt: The index "+e+" supplied is out of bounds "+this.children.length)},i.prototype.swapChildren=function(t,e){if(t!==e){var r=this.getChildIndex(t),i=this.getChildIndex(e);if(0>r||0>i)throw new Error("swapChildren: Both the supplied DisplayObjects must be children of the caller.");this.children[r]=e,this.children[i]=t,this.onChildrenChange(i>r?r:i)}},i.prototype.getChildIndex=function(t){var e=this.children.indexOf(t);if(-1===e)throw new Error("The supplied DisplayObject must be a child of the caller");return e},i.prototype.setChildIndex=function(t,e){if(0>e||e>=this.children.length)throw new Error("The supplied index is out of bounds");var r=this.getChildIndex(t);o.removeItems(this.children,r,1),this.children.splice(e,0,t),this.onChildrenChange(e)},i.prototype.getChildAt=function(t){if(0>t||t>=this.children.length)throw new Error("getChildAt: Supplied index "+t+" does not exist in the child list, or the supplied DisplayObject is not a child of the caller");return this.children[t]},i.prototype.removeChild=function(t){var e=arguments.length;if(e>1)for(var r=0;e>r;r++)this.removeChild(arguments[r]);else{var i=this.children.indexOf(t);if(-1===i)return;t.parent=null,o.removeItems(this.children,i,1),this.onChildrenChange(i),t.emit("removed",this)}return t},i.prototype.removeChildAt=function(t){var e=this.getChildAt(t);return e.parent=null,o.removeItems(this.children,t,1),this.onChildrenChange(t),e.emit("removed",this),e},i.prototype.removeChildren=function(t,e){var r,i,n=t||0,o="number"==typeof e?e:this.children.length,s=o-n;if(s>0&&o>=s){for(r=this.children.splice(n,s),i=0;it;++t)this.children[t].updateTransform();this.dirtyTransform=!1}},i.prototype.containerUpdateTransform=i.prototype.updateTransform,i.prototype.getBounds=function(){if(!this._currentBounds){if(0===this.children.length)return n.Rectangle.EMPTY;for(var t,e,r,i=1/0,o=1/0,s=-(1/0),a=-(1/0),h=!1,u=0,l=this.children.length;l>u;++u){var c=this.children[u];c.visible&&(h=!0,t=this.children[u].getBounds(),i=ie?s:e,a=a>r?a:r)}if(!h)return n.Rectangle.EMPTY;var p=this._bounds;p.x=i,p.y=o,p.width=s-i,p.height=a-o,this._currentBounds=p}return this._currentBounds},i.prototype.containerGetBounds=i.prototype.getBounds,i.prototype.getLocalBounds=function(){var t=this.worldTransform;this.worldTransform=n.Matrix.IDENTITY;for(var e=0,r=this.children.length;r>e;++e)this.children[e].updateTransform();return this.worldTransform=t,this._currentBounds=null,this.getBounds(n.Matrix.IDENTITY)},i.prototype.renderWebGL=function(t){if(this.visible&&!(this.worldAlpha<=0)&&this.renderable){var e,r;if(this._mask||this._filters){for(t.currentRenderer.flush(),this._filters&&this._filters.length&&t.filterManager.pushFilter(this,this._filters),this._mask&&t.maskManager.pushMask(this,this._mask),t.currentRenderer.start(),this._renderWebGL(t),e=0,r=this.children.length;r>e;e++)this.children[e].renderWebGL(t);t.currentRenderer.flush(),this._mask&&t.maskManager.popMask(this,this._mask),this._filters&&t.filterManager.popFilter(),t.currentRenderer.start()}else for(this._renderWebGL(t),e=0,r=this.children.length;r>e;++e)this.children[e].renderWebGL(t)}},i.prototype._renderWebGL=function(t){},i.prototype._renderCanvas=function(t){},i.prototype.renderCanvas=function(t){if(this.visible&&!(this.alpha<=0)&&this.renderable){this._mask&&t.maskManager.pushMask(this._mask,t),this._renderCanvas(t);for(var e=0,r=this.children.length;r>e;++e)this.children[e].renderCanvas(t);this._mask&&t.maskManager.popMask(t)}},i.prototype.destroy=function(t){if(s.prototype.destroy.call(this),t)for(var e=0,r=this.children.length;r>e;++e)this.children[e].destroy(t);this.removeChildren(),this.children=null}},{"../math":55,"../textures/RenderTexture":98,"../utils":105,"./DisplayObject":40}],40:[function(t,e,r){function i(){s.call(this),this.position=new n.Point,this._position=new u(this),this.scale=new n.Point(1,1),this.pivot=new n.Point(0,0),this.skew=new n.Point(0,0),this._rotation=0,this.alpha=1,this.visible=!0,this.renderable=!0,this.parent=null,this.worldAlpha=1,this.worldTransform=new n.Matrix,this.localTransform=new n.Matrix,this.filterArea=null,this._sr=0,this._cr=1,this._bounds=new n.Rectangle(0,0,1,1),this._currentBounds=null,this._mask=null,this.dirtyTransform=!0}var n=t("../math"),o=t("../textures/RenderTexture"),s=t("eventemitter3"),a=(t("../const"),new n.Matrix),h={worldTransform:new n.Matrix,worldAlpha:1,children:[]};i.prototype=Object.create(s.prototype),i.prototype.constructor=i,e.exports=i;var u=function(t){this.doc=t,this.x=0,this.y=0};Object.defineProperties(u.prototype,{x:{get:function(){return this.doc.position.x},set:function(t){this.doc.position.x=t,this.doc.dirtyTransform=!0}},y:{get:function(){return this.doc.posiiton.y},set:function(t){this.doc.position.y=t,this.doc.dirtyTransform=!0}}}),Object.defineProperties(i.prototype,{x:{get:function(){return this.position.x},set:function(t){this.position.x=t,this.dirtyTransform=!0}},y:{get:function(){return this.position.y},set:function(t){this.position.y=t,this.dirtyTransform=!0}},scaleX:{get:function(){return this.scale.x},set:function(t){this.scale.x=t,this.dirtyTransform=!0}},scaleY:{get:function(){return this.scale.y},set:function(t){this.scale.y=t,this.dirtyTransform=!0}},rotation:{get:function(){return this._rotation},set:function(t){this._rotation=t,this.dirtyTransform=!0,this._sr=Math.sin(t),this._cr=Math.cos(t)}},scaleY:{get:function(){return this.scale.y},set:function(t){this.scale.y=t,this.dirtyTransform=!0}},worldVisible:{get:function(){var t=this;do{if(!t.visible)return!1;t=t.parent}while(t);return!0}},mask:{get:function(){return this._mask},set:function(t){this._mask&&(this._mask.renderable=!0),this._mask=t,this._mask&&(this._mask.renderable=!1)}},filters:{get:function(){return this._filters&&this._filters.slice()},set:function(t){this._filters=t&&t.slice()}}}),i.prototype.updateTransform=function(){var t=this.parent.worldTransform,e=this.worldTransform,r=this.localTransform;this.dirtyTransform&&(r.a=this._cr*this.scale.x,r.b=this._sr*this.scale.x,r.c=-this._sr*this.scale.y,r.d=this._cr*this.scale.y,r.tx=this.position.x-(this.pivot.x*r.a+this.pivot.y*r.c),r.ty=this.position.y-(this.pivot.x*r.b+this.pivot.y*r.d)),(this.dirtyTransform||this.parent.dirtyTransform)&&(e.a=r.a*t.a+r.b*t.c,e.b=r.a*t.b+r.b*t.d,e.c=r.c*t.a+r.d*t.c,e.d=r.c*t.b+r.d*t.d,e.tx=r.tx*t.a+r.ty*t.c+t.tx,e.ty=r.tx*t.b+r.ty*t.d+t.ty,this._currentBounds=null),this.worldAlpha=this.alpha*this.parent.worldAlpha},i.prototype.displayObjectUpdateTransform=i.prototype.updateTransform,i.prototype.getBounds=function(t){return n.Rectangle.EMPTY},i.prototype.getLocalBounds=function(){return this.getBounds(n.Matrix.IDENTITY)},i.prototype.toGlobal=function(t){return this.parent?this.displayObjectUpdateTransform():(this.parent=h,this.displayObjectUpdateTransform(),this.parent=null),this.worldTransform.apply(t)},i.prototype.toLocal=function(t,e,r){return e&&(t=e.toGlobal(t)),this.parent?this.displayObjectUpdateTransform():(this.parent=h,this.displayObjectUpdateTransform(),this.parent=null),this.worldTransform.applyInverse(t,r)},i.prototype.renderWebGL=function(t){},i.prototype.renderCanvas=function(t){},i.prototype.generateTexture=function(t,e,r){var i=this.getLocalBounds(),n=new o(t,0|i.width,0|i.height,e,r);return a.tx=-i.x,a.ty=-i.y,n.render(this,a),n},i.prototype.setParent=function(t){if(!t||!t.addChild)throw new Error("setParent: Argument must be a Container");return t.addChild(this),t},i.prototype.setTransform=function(t,e,r,i,n,o,s,a,h){return this.position.x=t||0,this.position.y=e||0,this.scale.x=r?r:1,this.scale.y=i?i:1,this.rotation=n||0,this.skew.x=o||0,this.skew.y=s||0,this.pivot.x=a||0,this.pivot.y=h||0,this.dirtyTransform=!0,this},i.prototype.destroy=function(){this.position=null,this.scale=null,this.pivot=null,this.skew=null,this.parent=null,this._bounds=null,this._currentBounds=null,this._mask=null,this.worldTransform=null,this.filterArea=null}},{"../const":38,"../math":55,"../textures/RenderTexture":98,eventemitter3:25}],41:[function(t,e,r){function i(){n.call(this),this.fillAlpha=1,this.lineWidth=0,this.lineColor=0,this.graphicsData=[],this.tint=16777215,this._prevTint=16777215,this.blendMode=l.BLEND_MODES.NORMAL,this.currentPath=null,this._webGL={},this.isMask=!1,this.boundsPadding=0,this._localBounds=new u.Rectangle(0,0,1,1),this.dirty=!0,this.glDirty=!1,this.boundsDirty=!0,this.cachedSpriteDirty=!1}var n=t("../display/Container"),o=t("../textures/Texture"),s=t("../renderers/canvas/utils/CanvasBuffer"),a=t("../renderers/canvas/utils/CanvasGraphics"),h=t("./GraphicsData"),u=t("../math"),l=t("../const"),c=new u.Point;i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.clone=function(){var t=new i;t.renderable=this.renderable,t.fillAlpha=this.fillAlpha,t.lineWidth=this.lineWidth,t.lineColor=this.lineColor,t.tint=this.tint,t.blendMode=this.blendMode,t.isMask=this.isMask,t.boundsPadding=this.boundsPadding,t.dirty=!0,t.glDirty=!0,t.cachedSpriteDirty=this.cachedSpriteDirty;for(var e=0;e=c;++c)l=c/s,n=h+(t-h)*l,o=u+(e-u)*l,a.push(n+(t+(r-t)*l-n)*l,o+(e+(i-e)*l-o)*l);return this.dirty=this.boundsDirty=!0,this},i.prototype.bezierCurveTo=function(t,e,r,i,n,o){this.currentPath?0===this.currentPath.shape.points.length&&(this.currentPath.shape.points=[0,0]):this.moveTo(0,0);for(var s,a,h,u,l,c=20,p=this.currentPath.shape.points,d=p[p.length-2],f=p[p.length-1],v=0,g=1;c>=g;++g)v=g/c,s=1-v,a=s*s,h=a*s,u=v*v,l=u*v,p.push(h*d+3*a*v*t+3*s*u*r+l*n,h*f+3*a*v*e+3*s*u*i+l*o);return this.dirty=this.boundsDirty=!0,this},i.prototype.arcTo=function(t,e,r,i,n){this.currentPath?0===this.currentPath.shape.points.length&&this.currentPath.shape.points.push(t,e):this.moveTo(t,e);var o=this.currentPath.shape.points,s=o[o.length-2],a=o[o.length-1],h=a-e,u=s-t,l=i-e,c=r-t,p=Math.abs(h*c-u*l);if(1e-8>p||0===n)(o[o.length-2]!==t||o[o.length-1]!==e)&&o.push(t,e);else{var d=h*h+u*u,f=l*l+c*c,v=h*l+u*c,g=n*Math.sqrt(d)/p,m=n*Math.sqrt(f)/p,y=g*v/d,x=m*v/f,b=g*c+m*u,_=g*l+m*h,T=u*(m+y),E=h*(m+y),S=c*(g+x),w=l*(g+x),C=Math.atan2(E-_,T-b),A=Math.atan2(w-_,S-b);this.arc(b+t,_+e,n,C,A,u*l>c*h)}return this.dirty=this.boundsDirty=!0,this},i.prototype.arc=function(t,e,r,i,n,o){if(o=o||!1,i===n)return this;!o&&i>=n?n+=2*Math.PI:o&&n>=i&&(i+=2*Math.PI);var s=o?-1*(i-n):n-i,a=40*Math.ceil(Math.abs(s)/(2*Math.PI));if(0===s)return this;var h=t+Math.cos(i)*r,u=e+Math.sin(i)*r;this.currentPath?this.currentPath.shape.points.push(h,u):this.moveTo(h,u);for(var l=this.currentPath.shape.points,c=s/(2*a),p=2*c,d=Math.cos(c),f=Math.sin(c),v=a-1,g=v%1/v,m=0;v>=m;m++){var y=m+g*m,x=c+i+p*y,b=Math.cos(x),_=-Math.sin(x);l.push((d*b+f*_)*r+t,(d*-_+f*b)*r+e)}return this.dirty=this.boundsDirty=!0,this},i.prototype.beginFill=function(t,e){return this.filling=!0,this.fillColor=t||0,this.fillAlpha=void 0===e?1:e,this.currentPath&&this.currentPath.shape.points.length<=2&&(this.currentPath.fill=this.filling,this.currentPath.fillColor=this.fillColor,this.currentPath.fillAlpha=this.fillAlpha),this},i.prototype.endFill=function(){return this.filling=!1,this.fillColor=null,this.fillAlpha=1,this},i.prototype.drawRect=function(t,e,r,i){return this.drawShape(new u.Rectangle(t,e,r,i)),this},i.prototype.drawRoundedRect=function(t,e,r,i,n){return this.drawShape(new u.RoundedRectangle(t,e,r,i,n)),this},i.prototype.drawCircle=function(t,e,r){return this.drawShape(new u.Circle(t,e,r)),this},i.prototype.drawEllipse=function(t,e,r,i){return this.drawShape(new u.Ellipse(t,e,r,i)),this},i.prototype.drawPolygon=function(t){var e=t,r=!0;if(e instanceof u.Polygon&&(r=e.closed,e=e.points),!Array.isArray(e)){e=new Array(arguments.length);for(var i=0;ig?g:S,S=S>y?y:S,S=S>b?b:S,w=w>m?m:w,w=w>x?x:w,w=w>_?_:w,T=g>T?g:T,T=y>T?y:T,T=b>T?b:T,E=m>E?m:E,E=x>E?x:E,E=_>E?_:E,this._bounds.x=S,this._bounds.width=T-S,this._bounds.y=w,this._bounds.height=E-w,this._currentBounds=this._bounds}return this._currentBounds},i.prototype.containsPoint=function(t){this.worldTransform.applyInverse(t,c); +for(var e=this.graphicsData,r=0;rs?s:t,e=s+h>e?s+h:e,r=r>a?a:r,i=a+u>i?a+u:i;else if(d===l.SHAPES.CIRC)s=n.x,a=n.y,h=n.radius+f/2,u=n.radius+f/2,t=t>s-h?s-h:t,e=s+h>e?s+h:e,r=r>a-u?a-u:r,i=a+u>i?a+u:i;else if(d===l.SHAPES.ELIP)s=n.x,a=n.y,h=n.width+f/2,u=n.height+f/2,t=t>s-h?s-h:t,e=s+h>e?s+h:e,r=r>a-u?a-u:r,i=a+u>i?a+u:i;else{o=n.points;for(var v=0;vs-f?s-f:t,e=s+f>e?s+f:e,r=r>a-f?a-f:r,i=a+f>i?a+f:i}}else t=0,e=0,r=0,i=0;var g=this.boundsPadding;this._localBounds.x=t-g,this._localBounds.width=e-t+2*g,this._localBounds.y=r-g,this._localBounds.height=i-r+2*g},i.prototype.drawShape=function(t){this.currentPath&&this.currentPath.shape.points.length<=2&&this.graphicsData.pop(),this.currentPath=null;var e=new h(this.lineWidth,this.lineColor,this.lineAlpha,this.fillColor,this.fillAlpha,this.filling,t);return this.graphicsData.push(e),e.type===l.SHAPES.POLY&&(e.shape.closed=e.shape.closed||this.filling,this.currentPath=e),this.dirty=this.boundsDirty=!0,e},i.prototype.destroy=function(){n.prototype.destroy.apply(this,arguments);for(var t=0;ts;s++)e=o.data[s],1===o.data[s].mode||(shader=this.primitiveShader,r.bindShader(shader),shader.uniforms.translationMatrix=t.worldTransform.toArray(!0),shader.uniforms.tint=n.hex2rgb(t.tint),shader.uniforms.alpha=t.worldAlpha,i.bindBuffer(i.ARRAY_BUFFER,e.buffer),shader=this.primitiveShader,shader.attributes.aVertexPosition.pointer(i.FLOAT,!1,24,0),shader.attributes.aColor.pointer(i.FLOAT,!1,24,8),i.enableVertexAttribArray(shader.attributes.aVertexPosition.location),i.enableVertexAttribArray(shader.attributes.aColor.location),i.bindBuffer(i.ELEMENT_ARRAY_BUFFER,e.indexBuffer),i.drawElements(i.TRIANGLE_STRIP,e.indices.length,i.UNSIGNED_SHORT,0)),r.drawCount++},i.prototype.updateGraphics=function(t){var e=this.renderer.gl,r=t._webGL[e.id];r||(r=t._webGL[e.id]={lastIndex:0,data:[],gl:e}),t.dirty=!1;var i;if(t.clearDirty){for(t.clearDirty=!1,i=0;i=6)if(a.points.length<2*this.maximumSimplePolySize){s=this.switchMode(r,0);var h=buildPoly(a,s);h||(s=this.switchMode(r,1),buildComplexPoly(a,s))}else s=this.switchMode(r,1),buildComplexPoly(a,s);a.lineWidth>0&&(s=this.switchMode(r,0),l(a,s))}else s=this.switchMode(r,0),a.type===o.SHAPES.RECT?buildRectangle(a,s):a.type===o.SHAPES.CIRC||a.type===o.SHAPES.ELIP?buildCircle(a,s):a.type===o.SHAPES.RREC&&buildRoundedRectangle(a,s);r.lastIndex++}for(i=0;i32e4||r.mode!==e||1===e)&&(r=this.graphicsDataPool.pop()||new h(t.gl),r.mode=e,t.data.push(r))):(r=this.graphicsDataPool.pop()||new h(t.gl),r.mode=e,t.data.push(r)),r.dirty=!0,r}},{"../../const":38,"../../math":55,"../../renderers/webgl/WebGLRenderer":72,"../../renderers/webgl/utils/ObjectRenderer":87,"../../utils":105,"./WebGLGraphicsData":44,"./shaders/PrimitiveShader":45,"./utils/buildCircle":46,"./utils/buildComplexPoly":47,"./utils/buildLine":48,"./utils/buildPoly":49,"./utils/buildRectangle":50,"./utils/buildRoundedRectangle":51,earcut:24}],44:[function(t,e,r){function i(t){this.gl=t,this.color=[0,0,0],this.points=[],this.indices=[],this.buffer=t.createBuffer(),this.indexBuffer=t.createBuffer(),this.mode=1,this.alpha=1,this.dirty=!0,this.glPoints=null,this.glIndices=null}i.prototype.constructor=i,e.exports=i,i.prototype.reset=function(){this.points.length=0,this.indices.length=0},i.prototype.upload=function(){var t=this.gl;this.glPoints=new Float32Array(this.points),t.bindBuffer(t.ARRAY_BUFFER,this.buffer),t.bufferData(t.ARRAY_BUFFER,this.glPoints,t.STATIC_DRAW),this.glIndices=new Uint16Array(this.indices),t.bindBuffer(t.ELEMENT_ARRAY_BUFFER,this.indexBuffer),t.bufferData(t.ELEMENT_ARRAY_BUFFER,this.glIndices,t.STATIC_DRAW),this.dirty=!1},i.prototype.destroy=function(){this.color=null,this.points=null,this.indices=null,this.gl.deleteBuffer(this.buffer),this.gl.deleteBuffer(this.indexBuffer),this.gl=null,this.buffer=null,this.indexBuffer=null,this.glPoints=null,this.glIndices=null}},{}],45:[function(t,e,r){function i(t){n.call(this,t,["attribute vec2 aVertexPosition;","attribute vec4 aColor;","uniform mat3 translationMatrix;","uniform mat3 projectionMatrix;","uniform float alpha;","uniform float flipY;","uniform vec3 tint;","varying vec4 vColor;","void main(void){"," gl_Position = vec4((projectionMatrix * translationMatrix * vec3(aVertexPosition, 1.0)).xy, 0.0, 1.0);"," vColor = aColor * vec4(tint * alpha, alpha);","}"].join("\n"),["precision mediump float;","varying vec4 vColor;","void main(void){"," gl_FragColor = vColor;","}"].join("\n"))}var n=t("pixi-gl-core").GLShader;i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i},{"pixi-gl-core":1}],46:[function(t,e,r){var i=t("./buildLine"),n=t("../../../utils"),o=function(t,e){var r,o,s=t.shape,a=s.x,h=s.y;t.type===CONST.SHAPES.CIRC?(r=s.radius,o=s.radius):(r=s.width,o=s.height);var u=Math.floor(30*Math.sqrt(s.radius))||Math.floor(15*Math.sqrt(s.width+s.height)),l=2*Math.PI/u,c=0;if(t.fill){var p=n.hex2rgb(t.fillColor),d=t.fillAlpha,f=p[0]*d,v=p[1]*d,g=p[2]*d,m=e.points,y=e.indices,x=m.length/6;for(y.push(x),c=0;u+1>c;c++)m.push(a,h,f,v,g,d),m.push(a+Math.sin(l*c)*r,h+Math.cos(l*c)*o,f,v,g,d),y.push(x++,x++);y.push(x-1)}if(t.lineWidth){var b=t.points;for(t.points=[],c=0;u+1>c;c++)t.points.push(a+Math.sin(l*c)*r,h+Math.cos(l*c)*o);i(t,e),t.points=b}};e.exports=o},{"../../../utils":105,"./buildLine":48}],47:[function(t,e,r){var i=(t("./buildLine"),t("../../../utils")),n=function(t,e){var r=t.points.slice();if(!(r.length<6)){var n=e.indices;e.points=r,e.alpha=t.fillAlpha,e.color=i.hex2rgb(t.fillColor);for(var o,s,a=1/0,h=-(1/0),u=1/0,l=-(1/0),c=0;co?o:a,h=o>h?o:h,u=u>s?s:u,l=s>l?s:l;r.push(a,u,h,u,h,l,a,l);var p=r.length/2;for(c=0;p>c;c++)n.push(c)}};e.exports=n},{"../../../utils":105,"./buildLine":48}],48:[function(t,e,r){var i=t("../../../math"),n=t("../../../utils"),o=function(t,e){var r=0,o=t.points;if(0!==o.length){var s=new i.Point(o[0],o[1]),a=new i.Point(o[o.length-2],o[o.length-1]);if(s.x===a.x&&s.y===a.y){o=o.slice(),o.pop(),o.pop(),a=new i.Point(o[o.length-2],o[o.length-1]);var h=a.x+.5*(s.x-a.x),u=a.y+.5*(s.y-a.y);o.unshift(h,u),o.push(h,u)}var l,c,p,d,f,v,g,m,y,x,b,_,T,E,S,w,C,A,M,R,O,P,D,F=e.points,L=e.indices,B=o.length/2,I=o.length,N=F.length/6,U=t.lineWidth/2,k=n.hex2rgb(t.lineColor),j=t.lineAlpha,G=k[0]*j,X=k[1]*j,Y=k[2]*j;for(p=o[0],d=o[1],f=o[2],v=o[3],y=-(d-v),x=p-f,D=Math.sqrt(y*y+x*x),y/=D,x/=D,y*=U,x*=U,F.push(p-y,d-x,G,X,Y,j),F.push(p+y,d+x,G,X,Y,j),r=1;B-1>r;r++)p=o[2*(r-1)],d=o[2*(r-1)+1],f=o[2*r],v=o[2*r+1],g=o[2*(r+1)],m=o[2*(r+1)+1],y=-(d-v),x=p-f,D=Math.sqrt(y*y+x*x),y/=D,x/=D,y*=U,x*=U,b=-(v-m),_=f-g,D=Math.sqrt(b*b+_*_),b/=D,_/=D,b*=U,_*=U,S=-x+d-(-x+v),w=-y+f-(-y+p),C=(-y+p)*(-x+v)-(-y+f)*(-x+d),A=-_+m-(-_+v),M=-b+f-(-b+g),R=(-b+g)*(-_+v)-(-b+f)*(-_+m),O=S*M-A*w,Math.abs(O)<.1?(O+=10.1,F.push(f-y,v-x,G,X,Y,j),F.push(f+y,v+x,G,X,Y,j)):(l=(w*R-M*C)/O,c=(A*C-S*R)/O,P=(l-f)*(l-f)+(c-v)*(c-v),P>19600?(T=y-b,E=x-_,D=Math.sqrt(T*T+E*E),T/=D,E/=D,T*=U,E*=U,F.push(f-T,v-E),F.push(G,X,Y,j),F.push(f+T,v+E),F.push(G,X,Y,j),F.push(f-T,v-E),F.push(G,X,Y,j),I++):(F.push(l,c),F.push(G,X,Y,j),F.push(f-(l-f),v-(c-v)),F.push(G,X,Y,j)));for(p=o[2*(B-2)],d=o[2*(B-2)+1],f=o[2*(B-1)],v=o[2*(B-1)+1],y=-(d-v),x=p-f,D=Math.sqrt(y*y+x*x),y/=D,x/=D,y*=U,x*=U,F.push(f-y,v-x),F.push(G,X,Y,j),F.push(f+y,v+x),F.push(G,X,Y,j),L.push(N),r=0;I>r;r++)L.push(N++);L.push(N-1)}};e.exports=o},{"../../../math":55,"../../../utils":105}],49:[function(t,e,r){var i=t("../../../utils"),n=function(t,e){var r=t.points;if(!(r.length<6)){var n=e.points,o=e.indices,s=r.length/2,a=i.hex2rgb(t.fillColor),h=t.fillAlpha,u=a[0]*h,l=a[1]*h,c=a[2]*h,p=earcut(r,null,2);if(!p)return!1;var d=n.length/6,f=0;for(f=0;ff;f++)n.push(r[2*f],r[2*f+1],u,l,c,h);return!0}};e.exports=n},{"../../../utils":105}],50:[function(t,e,r){var i=t("./buildLine"),n=t("../../../utils"),o=function(t,e){var r=t.shape,o=r.x,s=r.y,a=r.width,h=r.height;if(t.fill){var u=n.hex2rgb(t.fillColor),l=t.fillAlpha,c=u[0]*l,p=u[1]*l,d=u[2]*l,f=e.points,v=e.indices,g=f.length/6;f.push(o,s),f.push(c,p,d,l),f.push(o+a,s),f.push(c,p,d,l),f.push(o,s+h),f.push(c,p,d,l),f.push(o+a,s+h),f.push(c,p,d,l),v.push(g,g,g+1,g+2,g+3,g+3)}if(t.lineWidth){var m=t.points;t.points=[o,s,o+a,s,o+a,s+h,o,s+h,o,s],i(t,e),t.points=m}};e.exports=o},{"../../../utils":105,"./buildLine":48}],51:[function(t,e,r){var i=(t("./buildLine"),t("../../../utils"));buildRoundedRectangle=function(t,e){var r=t.shape,n=r.x,o=r.y,s=r.width,a=r.height,h=r.radius,u=[];if(u.push(n,o+h),this.quadraticBezierCurve(n,o+a-h,n,o+a,n+h,o+a,u),this.quadraticBezierCurve(n+s-h,o+a,n+s,o+a,n+s,o+a-h,u),this.quadraticBezierCurve(n+s,o+h,n+s,o,n+s-h,o,u),this.quadraticBezierCurve(n+h,o,n,o,n,o+h+1e-10,u),t.fill){var l=i.hex2rgb(t.fillColor),c=t.fillAlpha,p=l[0]*c,d=l[1]*c,f=l[2]*c,v=e.points,g=e.indices,m=v.length/6,y=earcut(u,null,2),x=0;for(x=0;x=m;m++)g=m/f,h=a(t,r,g),u=a(e,i,g),l=a(r,n,g),c=a(i,o,g),p=a(h,l,g),d=a(u,c,g),v.push(p,d);return v},e.exports=buildRoundedRectangle},{"../../../utils":105,"./buildLine":48}],52:[function(t,e,r){var i=e.exports=Object.assign(t("./const"),t("./math"),{utils:t("./utils"),ticker:t("./ticker"),DisplayObject:t("./display/DisplayObject"),Container:t("./display/Container"),Sprite:t("./sprites/Sprite"),ParticleContainer:t("./particles/ParticleContainer"),SpriteRenderer:t("./sprites/webgl/SpriteRenderer"),ParticleRenderer:t("./particles/webgl/ParticleRenderer"),Text:t("./text/Text"),Graphics:t("./graphics/Graphics"),GraphicsData:t("./graphics/GraphicsData"),GraphicsRenderer:t("./graphics/webgl/GraphicsRenderer"),Texture:t("./textures/Texture"),BaseTexture:t("./textures/BaseTexture"),RenderTexture:t("./textures/RenderTexture"),VideoBaseTexture:t("./textures/VideoBaseTexture"),TextureUvs:t("./textures/TextureUvs"),CanvasRenderer:t("./renderers/canvas/CanvasRenderer"),CanvasGraphics:t("./renderers/canvas/utils/CanvasGraphics"),CanvasBuffer:t("./renderers/canvas/utils/CanvasBuffer"),WebGLRenderer:t("./renderers/webgl/WebGLRenderer"),WebGLManager:t("./renderers/webgl/managers/WebGLManager"),ShaderManager:t("./renderers/webgl/managers/ShaderManager"),Shader:t("./renderers/webgl/shaders/Shader"),ObjectRenderer:t("./renderers/webgl/utils/ObjectRenderer"),RenderTarget:t("./renderers/webgl/utils/RenderTarget"),AbstractFilter:t("./renderers/webgl/filters/AbstractFilter"),FXAAFilter:t("./renderers/webgl/filters/FXAAFilter"),SpriteMaskFilter:t("./renderers/webgl/filters/SpriteMaskFilter"),glCore:t("pixi-gl-core"),autoDetectRenderer:function(t,e,r,n){return t=t||800,e=e||600,!n&&i.utils.isWebGLSupported()?new i.WebGLRenderer(t,e,r):new i.CanvasRenderer(t,e,r)}})},{"./const":38,"./display/Container":39,"./display/DisplayObject":40,"./graphics/Graphics":41,"./graphics/GraphicsData":42,"./graphics/webgl/GraphicsRenderer":43,"./math":55,"./particles/ParticleContainer":61,"./particles/webgl/ParticleRenderer":63,"./renderers/canvas/CanvasRenderer":66,"./renderers/canvas/utils/CanvasBuffer":67,"./renderers/canvas/utils/CanvasGraphics":68,"./renderers/webgl/WebGLRenderer":72,"./renderers/webgl/filters/AbstractFilter":73,"./renderers/webgl/filters/FXAAFilter":74,"./renderers/webgl/filters/SpriteMaskFilter":75,"./renderers/webgl/managers/ShaderManager":79,"./renderers/webgl/managers/WebGLManager":81,"./renderers/webgl/shaders/Shader":84,"./renderers/webgl/utils/ObjectRenderer":87,"./renderers/webgl/utils/RenderTarget":89,"./sprites/Sprite":93,"./sprites/webgl/SpriteRenderer":94,"./text/Text":96,"./textures/BaseTexture":97,"./textures/RenderTexture":98,"./textures/Texture":99,"./textures/TextureUvs":100,"./textures/VideoBaseTexture":101,"./ticker":103,"./utils":105,"pixi-gl-core":1}],53:[function(t,e,r){function i(){this.a=1,this.b=0,this.c=0,this.d=1,this.tx=0,this.ty=0}var n=t("./Point");i.prototype.constructor=i,e.exports=i,i.prototype.fromArray=function(t){this.a=t[0],this.b=t[1],this.c=t[3],this.d=t[4],this.tx=t[2],this.ty=t[5]},i.prototype.set=function(t,e,r,i,n,o){return this.a=t,this.b=e,this.c=r,this.d=i,this.tx=n,this.ty=o,this},i.prototype.toArray=function(t,e){this.array||(this.array=new Float32Array(9));var r=e||this.array;return t?(r[0]=this.a,r[1]=this.b,r[2]=0,r[3]=this.c,r[4]=this.d,r[5]=0,r[6]=this.tx,r[7]=this.ty,r[8]=1):(r[0]=this.a,r[1]=this.c,r[2]=this.tx,r[3]=this.b,r[4]=this.d,r[5]=this.ty,r[6]=0,r[7]=0,r[8]=1),r},i.prototype.apply=function(t,e){e=e||new n;var r=t.x,i=t.y;return e.x=this.a*r+this.c*i+this.tx,e.y=this.b*r+this.d*i+this.ty,e},i.prototype.applyInverse=function(t,e){e=e||new n;var r=1/(this.a*this.d+this.c*-this.b),i=t.x,o=t.y;return e.x=this.d*r*i+-this.c*r*o+(this.ty*this.c-this.tx*this.d)*r,e.y=this.a*r*o+-this.b*r*i+(-this.ty*this.a+this.tx*this.b)*r,e},i.prototype.translate=function(t,e){return this.tx+=t,this.ty+=e,this},i.prototype.scale=function(t,e){return this.a*=t,this.d*=e,this.c*=t,this.b*=e,this.tx*=t,this.ty*=e,this},i.prototype.rotate=function(t){var e=Math.cos(t),r=Math.sin(t),i=this.a,n=this.c,o=this.tx;return this.a=i*e-this.b*r,this.b=i*r+this.b*e,this.c=n*e-this.d*r,this.d=n*r+this.d*e,this.tx=o*e-this.ty*r,this.ty=o*r+this.ty*e,this},i.prototype.append=function(t){var e=this.a,r=this.b,i=this.c,n=this.d;return this.a=t.a*e+t.b*i,this.b=t.a*r+t.b*n,this.c=t.c*e+t.d*i,this.d=t.c*r+t.d*n,this.tx=t.tx*e+t.ty*i+this.tx,this.ty=t.tx*r+t.ty*n+this.ty,this},i.prototype.setTransform=function(t,e,r,i,n,o,s,a,h){var u,l,c,p,d,f,v,g,m,y;return d=Math.sin(s),f=Math.cos(s),v=Math.cos(h),g=Math.sin(h),m=-Math.sin(a),y=Math.cos(a),u=f*n,l=d*n,c=-d*o,p=f*o,this.a=v*u+g*c,this.b=v*l+g*p,this.c=m*u+y*c,this.d=m*l+y*p,this.tx=t+(r*u+i*c),this.ty=e+(r*l+i*p),this},i.prototype.prepend=function(t){var e=this.tx;if(1!==t.a||0!==t.b||0!==t.c||1!==t.d){var r=this.a,i=this.c;this.a=r*t.a+this.b*t.c,this.b=r*t.b+this.b*t.d,this.c=i*t.a+this.d*t.c,this.d=i*t.b+this.d*t.d}return this.tx=e*t.a+this.ty*t.c+t.tx,this.ty=e*t.b+this.ty*t.d+t.ty,this},i.prototype.invert=function(){var t=this.a,e=this.b,r=this.c,i=this.d,n=this.tx,o=t*i-e*r;return this.a=i/o,this.b=-e/o,this.c=-r/o,this.d=t/o,this.tx=(r*this.ty-i*n)/o,this.ty=-(t*this.ty-e*n)/o,this},i.prototype.identity=function(){return this.a=1,this.b=0,this.c=0,this.d=1,this.tx=0,this.ty=0,this},i.prototype.clone=function(){var t=new i;return t.a=this.a,t.b=this.b,t.c=this.c,t.d=this.d,t.tx=this.tx,t.ty=this.ty,t},i.prototype.copy=function(t){return t.a=this.a,t.b=this.b,t.c=this.c,t.d=this.d,t.tx=this.tx,t.ty=this.ty,t},i.IDENTITY=new i,i.TEMP_MATRIX=new i},{"./Point":54}],54:[function(t,e,r){function i(t,e){this.x=t||0,this.y=e||0}i.prototype.constructor=i,e.exports=i,i.prototype.clone=function(){return new i(this.x,this.y)},i.prototype.copy=function(t){this.set(t.x,t.y)},i.prototype.equals=function(t){return t.x===this.x&&t.y===this.y},i.prototype.set=function(t,e){this.x=t||0,this.y=e||(0!==e?this.x:0)}},{}],55:[function(t,e,r){e.exports={Point:t("./Point"),Matrix:t("./Matrix"),Circle:t("./shapes/Circle"),Ellipse:t("./shapes/Ellipse"),Polygon:t("./shapes/Polygon"),Rectangle:t("./shapes/Rectangle"),RoundedRectangle:t("./shapes/RoundedRectangle")}},{"./Matrix":53,"./Point":54,"./shapes/Circle":56,"./shapes/Ellipse":57,"./shapes/Polygon":58,"./shapes/Rectangle":59,"./shapes/RoundedRectangle":60}],56:[function(t,e,r){function i(t,e,r){this.x=t||0,this.y=e||0,this.radius=r||0,this.type=o.SHAPES.CIRC}var n=t("./Rectangle"),o=t("../../const");i.prototype.constructor=i,e.exports=i,i.prototype.clone=function(){return new i(this.x,this.y,this.radius)},i.prototype.contains=function(t,e){if(this.radius<=0)return!1;var r=this.x-t,i=this.y-e,n=this.radius*this.radius;return r*=r,i*=i,n>=r+i},i.prototype.getBounds=function(){return new n(this.x-this.radius,this.y-this.radius,2*this.radius,2*this.radius)}},{"../../const":38,"./Rectangle":59}],57:[function(t,e,r){function i(t,e,r,i){this.x=t||0,this.y=e||0,this.width=r||0,this.height=i||0,this.type=o.SHAPES.ELIP}var n=t("./Rectangle"),o=t("../../const");i.prototype.constructor=i,e.exports=i,i.prototype.clone=function(){return new i(this.x,this.y,this.width,this.height)},i.prototype.contains=function(t,e){if(this.width<=0||this.height<=0)return!1;var r=(t-this.x)/this.width,i=(e-this.y)/this.height;return r*=r,i*=i,1>=r+i},i.prototype.getBounds=function(){return new n(this.x-this.width,this.y-this.height,this.width,this.height)}},{"../../const":38,"./Rectangle":59}],58:[function(t,e,r){function i(t){var e=t;if(!Array.isArray(e)){e=new Array(arguments.length);for(var r=0;rs;s++)i.push(e[s].x,e[s].y);e=i}this.closed=!0,this.points=e,this.type=o.SHAPES.POLY}var n=t("../Point"),o=t("../../const");i.prototype.constructor=i,e.exports=i,i.prototype.clone=function(){return new i(this.points.slice())},i.prototype.contains=function(t,e){for(var r=!1,i=this.points.length/2,n=0,o=i-1;i>n;o=n++){var s=this.points[2*n],a=this.points[2*n+1],h=this.points[2*o],u=this.points[2*o+1],l=a>e!=u>e&&(h-s)*(e-a)/(u-a)+s>t;l&&(r=!r)}return r}},{"../../const":38,"../Point":54}],59:[function(t,e,r){function i(t,e,r,i){this.x=t||0,this.y=e||0,this.width=r||0,this.height=i||0,this.type=n.SHAPES.RECT}var n=t("../../const");i.prototype.constructor=i,e.exports=i,i.EMPTY=new i(0,0,0,0),i.prototype.clone=function(){return new i(this.x,this.y,this.width,this.height)},i.prototype.contains=function(t,e){return this.width<=0||this.height<=0?!1:t>=this.x&&t=this.y&&e=this.x&&t<=this.x+this.width&&e>=this.y&&e<=this.y+this.height?!0:!1}},{"../../const":38}],61:[function(t,e,r){function i(t,e,r){n.call(this),r=r||15e3,t=t||15e3;var i=16384;r>i&&(r=i),r>t&&(r=t),this._properties=[!1,!0,!1,!1,!1],this._maxSize=t,this._batchSize=r,this._buffers=null,this._bufferToUpdate=0,this.interactiveChildren=!1,this.blendMode=o.BLEND_MODES.NORMAL,this.roundPixels=!0,this.setProperties(e)}var n=t("../display/Container"),o=t("../const");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.setProperties=function(t){t&&(this._properties[0]="scale"in t?!!t.scale:this._properties[0],this._properties[1]="position"in t?!!t.position:this._properties[1],this._properties[2]="rotation"in t?!!t.rotation:this._properties[2],this._properties[3]="uvs"in t?!!t.uvs:this._properties[3],this._properties[4]="alpha"in t?!!t.alpha:this._properties[4])},i.prototype.updateTransform=function(){this.displayObjectUpdateTransform()},i.prototype.renderWebGL=function(t){this.visible&&!(this.worldAlpha<=0)&&this.children.length&&this.renderable&&(t.setObjectRenderer(t.plugins.particle),t.plugins.particle.render(this))},i.prototype.onChildrenChange=function(t){var e=Math.floor(t/this._batchSize);er;r+=6,i+=4)this.indices[r+0]=i+0,this.indices[r+1]=i+1,this.indices[r+2]=i+2,this.indices[r+3]=i+0,this.indices[r+4]=i+2,this.indices[r+5]=i+3;this.shader=null,this.indexBuffer=null,this.properties=null,this.tempMatrix=new h.Matrix}var n=t("../../renderers/webgl/utils/ObjectRenderer"),o=t("../../renderers/webgl/WebGLRenderer"),s=t("./ParticleShader"),a=t("./ParticleBuffer"),h=t("../../math");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,o.registerPlugin("particle",i),i.prototype.onContextChange=function(){var t=this.renderer.gl;this.shader=new s(this.renderer.shaderManager),this.indexBuffer=t.createBuffer(),t.bindBuffer(t.ELEMENT_ARRAY_BUFFER,this.indexBuffer),t.bufferData(t.ELEMENT_ARRAY_BUFFER,this.indices,t.STATIC_DRAW),this.properties=[{attribute:this.shader.attributes.aVertexPosition,size:2,uploadFunction:this.uploadVertices,offset:0},{attribute:this.shader.attributes.aPositionCoord,size:2,uploadFunction:this.uploadPosition,offset:0},{attribute:this.shader.attributes.aRotation,size:1,uploadFunction:this.uploadRotation,offset:0},{attribute:this.shader.attributes.aTextureCoord,size:2,uploadFunction:this.uploadUvs,offset:0},{attribute:this.shader.attributes.aColor,size:1,uploadFunction:this.uploadAlpha,offset:0}]},i.prototype.start=function(){var t=this.renderer.gl;t.activeTexture(t.TEXTURE0),t.bindBuffer(t.ELEMENT_ARRAY_BUFFER,this.indexBuffer);var e=this.shader;this.renderer.shaderManager.setShader(e)},i.prototype.render=function(t){var e=t.children,r=e.length,i=t._maxSize,n=t._batchSize;if(0!==r){r>i&&(r=i),t._buffers||(t._buffers=this.generateBuffers(t)),this.renderer.blendModeManager.setBlendMode(t.blendMode);var o=this.renderer.gl,s=t.worldTransform.copy(this.tempMatrix);s.prepend(this.renderer.currentRenderTarget.projectionMatrix),o.uniformMatrix3fv(this.shader.uniforms.projectionMatrix._location,!1,s.toArray(!0)),o.uniform1f(this.shader.uniforms.uAlpha._location,t.worldAlpha);var a=e[0]._texture.baseTexture;if(a._glTextures[o.id])o.bindTexture(o.TEXTURE_2D,a._glTextures[o.id]);else{if(!this.renderer.updateTexture(a))return;t._properties[0]&&t._properties[3]||(t._bufferToUpdate=0)}for(var h=0,u=0;r>h;h+=n,u+=1){var l=r-h;l>n&&(l=n);var c=t._buffers[u];c.uploadDynamic(e,h,l),t._bufferToUpdate===u&&(c.uploadStatic(e,h,l),t._bufferToUpdate=u+1),c.bind(this.shader),o.drawElements(o.TRIANGLES,6*l,o.UNSIGNED_SHORT,0),this.renderer.drawCount++}}},i.prototype.generateBuffers=function(t){var e,r=this.renderer.gl,i=[],n=t._maxSize,o=t._batchSize,s=t._properties;for(e=0;n>e;e+=o)i.push(new a(r,this.properties,s,o));return i},i.prototype.uploadVertices=function(t,e,r,i,n,o){for(var s,a,h,u,l,c,p,d,f,v=0;r>v;v++)s=t[e+v],a=s._texture,u=s.scale.x,l=s.scale.y,a.trim?(h=a.trim,p=h.x-s.anchor.x*h.width,c=p+a.crop.width,f=h.y-s.anchor.y*h.height,d=f+a.crop.height):(c=a._frame.width*(1-s.anchor.x),p=a._frame.width*-s.anchor.x,d=a._frame.height*(1-s.anchor.y),f=a._frame.height*-s.anchor.y),i[o]=p*u,i[o+1]=f*l,i[o+n]=c*u,i[o+n+1]=f*l,i[o+2*n]=c*u,i[o+2*n+1]=d*l,i[o+3*n]=p*u,i[o+3*n+1]=d*l,o+=4*n},i.prototype.uploadPosition=function(t,e,r,i,n,o){for(var s=0;r>s;s++){var a=t[e+s].position;i[o]=a.x,i[o+1]=a.y,i[o+n]=a.x,i[o+n+1]=a.y,i[o+2*n]=a.x,i[o+2*n+1]=a.y,i[o+3*n]=a.x,i[o+3*n+1]=a.y,o+=4*n}},i.prototype.uploadRotation=function(t,e,r,i,n,o){for(var s=0;r>s;s++){var a=t[e+s].rotation;i[o]=a,i[o+n]=a,i[o+2*n]=a,i[o+3*n]=a,o+=4*n}},i.prototype.uploadUvs=function(t,e,r,i,n,o){for(var s=0;r>s;s++){var a=t[e+s]._texture._uvs;a?(i[o]=a.x0,i[o+1]=a.y0,i[o+n]=a.x1,i[o+n+1]=a.y1,i[o+2*n]=a.x2,i[o+2*n+1]=a.y2,i[o+3*n]=a.x3,i[o+3*n+1]=a.y3,o+=4*n):(i[o]=0,i[o+1]=0,i[o+n]=0,i[o+n+1]=0,i[o+2*n]=0,i[o+2*n+1]=0,i[o+3*n]=0,i[o+3*n+1]=0,o+=4*n)}},i.prototype.uploadAlpha=function(t,e,r,i,n,o){for(var s=0;r>s;s++){var a=t[e+s].alpha;i[o]=a,i[o+n]=a,i[o+2*n]=a,i[o+3*n]=a,o+=4*n}},i.prototype.destroy=function(){this.renderer.gl&&this.renderer.gl.deleteBuffer(this.indexBuffer),n.prototype.destroy.apply(this,arguments),this.shader.destroy(),this.indices=null,this.tempMatrix=null}},{"../../math":55,"../../renderers/webgl/WebGLRenderer":72,"../../renderers/webgl/utils/ObjectRenderer":87,"./ParticleBuffer":62,"./ParticleShader":64}],64:[function(t,e,r){function i(t){n.call(this,t,["attribute vec2 aVertexPosition;","attribute vec2 aTextureCoord;","attribute float aColor;","attribute vec2 aPositionCoord;","attribute vec2 aScale;","attribute float aRotation;","uniform mat3 projectionMatrix;","varying vec2 vTextureCoord;","varying float vColor;","void main(void){"," vec2 v = aVertexPosition;"," v.x = (aVertexPosition.x) * cos(aRotation) - (aVertexPosition.y) * sin(aRotation);"," v.y = (aVertexPosition.x) * sin(aRotation) + (aVertexPosition.y) * cos(aRotation);"," v = v + aPositionCoord;"," gl_Position = vec4((projectionMatrix * vec3(v, 1.0)).xy, 0.0, 1.0);"," vTextureCoord = aTextureCoord;"," vColor = aColor;","}"].join("\n"),["precision lowp float;","varying vec2 vTextureCoord;","varying float vColor;","uniform sampler2D uSampler;","uniform float uAlpha;","void main(void){"," vec4 color = texture2D(uSampler, vTextureCoord) * vColor * uAlpha;"," if (color.a == 0.0) discard;"," gl_FragColor = color;","}"].join("\n"),{uAlpha:{type:"1f",value:1}},{aPositionCoord:0,aRotation:0})}var n=t("../../renderers/webgl/shaders/TextureShader");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i},{"../../renderers/webgl/shaders/TextureShader":85}],65:[function(t,e,r){ +function i(t,e,r,i){if(a.call(this),n.sayHello(t),i)for(var h in s.DEFAULT_RENDER_OPTIONS)"undefined"==typeof i[h]&&(i[h]=s.DEFAULT_RENDER_OPTIONS[h]);else i=s.DEFAULT_RENDER_OPTIONS;this.type=s.RENDERER_TYPE.UNKNOWN,this.width=e||800,this.height=r||600,this.view=i.view||document.createElement("canvas"),this.resolution=i.resolution,this.transparent=i.transparent,this.autoResize=i.autoResize||!1,this.blendModes=null,this.preserveDrawingBuffer=i.preserveDrawingBuffer,this.clearBeforeRender=i.clearBeforeRender,this.roundPixels=i.roundPixels,this._backgroundColor=0,this._backgroundColorRgba=[0,0,0,0],this._backgroundColorString="#000000",this.backgroundColor=i.backgroundColor||this._backgroundColor,this._tempDisplayObjectParent={worldTransform:new o.Matrix,worldAlpha:1,children:[]},this._lastObjectRendered=this._tempDisplayObjectParent}var n=t("../utils"),o=t("../math"),s=t("../const"),a=t("eventemitter3");i.prototype=Object.create(a.prototype),i.prototype.constructor=i,e.exports=i,Object.defineProperties(i.prototype,{backgroundColor:{get:function(){return this._backgroundColor},set:function(t){this._backgroundColor=t,this._backgroundColorString=n.hex2string(t),n.hex2rgb(t,this._backgroundColorRgba)}}}),i.prototype.resize=function(t,e){this.width=t*this.resolution,this.height=e*this.resolution,this.view.width=this.width,this.view.height=this.height,this.autoResize&&(this.view.style.width=this.width/this.resolution+"px",this.view.style.height=this.height/this.resolution+"px")},i.prototype.destroy=function(t){t&&this.view.parentNode&&this.view.parentNode.removeChild(this.view),this.type=s.RENDERER_TYPE.UNKNOWN,this.width=0,this.height=0,this.view=null,this.resolution=0,this.transparent=!1,this.autoResize=!1,this.blendModes=null,this.preserveDrawingBuffer=!1,this.clearBeforeRender=!1,this.roundPixels=!1,this._backgroundColor=0,this._backgroundColorRgba=null,this._backgroundColorString=null}},{"../const":38,"../math":55,"../utils":105,eventemitter3:25}],66:[function(t,e,r){function i(t,e,r){r=r||{},n.call(this,"Canvas",t,e,r),this.type=h.RENDERER_TYPE.CANVAS,this.context=this.view.getContext("2d",{alpha:this.transparent}),this.refresh=!0,this.maskManager=new o,this.smoothProperty="imageSmoothingEnabled",this.context.imageSmoothingEnabled||(this.context.webkitImageSmoothingEnabled?this.smoothProperty="webkitImageSmoothingEnabled":this.context.mozImageSmoothingEnabled?this.smoothProperty="mozImageSmoothingEnabled":this.context.oImageSmoothingEnabled?this.smoothProperty="oImageSmoothingEnabled":this.context.msImageSmoothingEnabled&&(this.smoothProperty="msImageSmoothingEnabled")),this.initPlugins(),this._mapBlendModes(),this._tempDisplayObjectParent={worldTransform:new a.Matrix,worldAlpha:1},this.resize(t,e)}var n=t("../SystemRenderer"),o=t("./utils/CanvasMaskManager"),s=t("../../utils"),a=t("../../math"),h=t("../../const");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,s.pluginTarget.mixin(i),i.prototype.render=function(t){this.emit("prerender");var e=t.parent;this._lastObjectRendered=t,t.parent=this._tempDisplayObjectParent,t.updateTransform(),t.parent=e,this.context.setTransform(1,0,0,1,0,0),this.context.globalAlpha=1,this.context.globalCompositeOperation=this.blendModes[h.BLEND_MODES.NORMAL],navigator.isCocoonJS&&this.view.screencanvas&&(this.context.fillStyle="black",this.context.clear()),this.clearBeforeRender&&(this.transparent?this.context.clearRect(0,0,this.width,this.height):(this.context.fillStyle=this._backgroundColorString,this.context.fillRect(0,0,this.width,this.height))),this.renderDisplayObject(t,this.context),this.emit("postrender")},i.prototype.destroy=function(t){this.destroyPlugins(),n.prototype.destroy.call(this,t),this.context=null,this.refresh=!0,this.maskManager.destroy(),this.maskManager=null,this.smoothProperty=null},i.prototype.renderDisplayObject=function(t,e){var r=this.context;this.context=e,t.renderCanvas(this),this.context=r},i.prototype.resize=function(t,e){n.prototype.resize.call(this,t,e),this.smoothProperty&&(this.context[this.smoothProperty]=h.SCALE_MODES.DEFAULT===h.SCALE_MODES.LINEAR)},i.prototype._mapBlendModes=function(){this.blendModes||(this.blendModes={},s.canUseNewCanvasBlendModes()?(this.blendModes[h.BLEND_MODES.NORMAL]="source-over",this.blendModes[h.BLEND_MODES.ADD]="lighter",this.blendModes[h.BLEND_MODES.MULTIPLY]="multiply",this.blendModes[h.BLEND_MODES.SCREEN]="screen",this.blendModes[h.BLEND_MODES.OVERLAY]="overlay",this.blendModes[h.BLEND_MODES.DARKEN]="darken",this.blendModes[h.BLEND_MODES.LIGHTEN]="lighten",this.blendModes[h.BLEND_MODES.COLOR_DODGE]="color-dodge",this.blendModes[h.BLEND_MODES.COLOR_BURN]="color-burn",this.blendModes[h.BLEND_MODES.HARD_LIGHT]="hard-light",this.blendModes[h.BLEND_MODES.SOFT_LIGHT]="soft-light",this.blendModes[h.BLEND_MODES.DIFFERENCE]="difference",this.blendModes[h.BLEND_MODES.EXCLUSION]="exclusion",this.blendModes[h.BLEND_MODES.HUE]="hue",this.blendModes[h.BLEND_MODES.SATURATION]="saturate",this.blendModes[h.BLEND_MODES.COLOR]="color",this.blendModes[h.BLEND_MODES.LUMINOSITY]="luminosity"):(this.blendModes[h.BLEND_MODES.NORMAL]="source-over",this.blendModes[h.BLEND_MODES.ADD]="lighter",this.blendModes[h.BLEND_MODES.MULTIPLY]="source-over",this.blendModes[h.BLEND_MODES.SCREEN]="source-over",this.blendModes[h.BLEND_MODES.OVERLAY]="source-over",this.blendModes[h.BLEND_MODES.DARKEN]="source-over",this.blendModes[h.BLEND_MODES.LIGHTEN]="source-over",this.blendModes[h.BLEND_MODES.COLOR_DODGE]="source-over",this.blendModes[h.BLEND_MODES.COLOR_BURN]="source-over",this.blendModes[h.BLEND_MODES.HARD_LIGHT]="source-over",this.blendModes[h.BLEND_MODES.SOFT_LIGHT]="source-over",this.blendModes[h.BLEND_MODES.DIFFERENCE]="source-over",this.blendModes[h.BLEND_MODES.EXCLUSION]="source-over",this.blendModes[h.BLEND_MODES.HUE]="source-over",this.blendModes[h.BLEND_MODES.SATURATION]="source-over",this.blendModes[h.BLEND_MODES.COLOR]="source-over",this.blendModes[h.BLEND_MODES.LUMINOSITY]="source-over"))}},{"../../const":38,"../../math":55,"../../utils":105,"../SystemRenderer":65,"./utils/CanvasMaskManager":69}],67:[function(t,e,r){function i(t,e){this.canvas=document.createElement("canvas"),this.context=this.canvas.getContext("2d"),this.canvas.width=t,this.canvas.height=e}i.prototype.constructor=i,e.exports=i,Object.defineProperties(i.prototype,{width:{get:function(){return this.canvas.width},set:function(t){this.canvas.width=t}},height:{get:function(){return this.canvas.height},set:function(t){this.canvas.height=t}}}),i.prototype.clear=function(){this.context.setTransform(1,0,0,1,0,0),this.context.clearRect(0,0,this.canvas.width,this.canvas.height)},i.prototype.resize=function(t,e){this.canvas.width=t,this.canvas.height=e},i.prototype.destroy=function(){this.context=null,this.canvas=null}},{}],68:[function(t,e,r){var i=t("../../../const"),n={};e.exports=n,n.renderGraphics=function(t,e){var r=t.worldAlpha;t.dirty&&(this.updateGraphicsTint(t),t.dirty=!1);for(var n=0;nA?A:C,e.beginPath(),e.moveTo(T,E+C),e.lineTo(T,E+w-C),e.quadraticCurveTo(T,E+w,T+C,E+w),e.lineTo(T+S-C,E+w),e.quadraticCurveTo(T+S,E+w,T+S,E+w-C),e.lineTo(T+S,E+C),e.quadraticCurveTo(T+S,E,T+S-C,E),e.lineTo(T+C,E),e.quadraticCurveTo(T,E,T,E+C),e.closePath(),(o.fillColor||0===o.fillColor)&&(e.globalAlpha=o.fillAlpha*r,e.fillStyle="#"+("00000"+(0|a).toString(16)).substr(-6),e.fill()),o.lineWidth&&(e.globalAlpha=o.lineAlpha*r,e.strokeStyle="#"+("00000"+(0|h).toString(16)).substr(-6),e.stroke())}}},n.renderGraphicsMask=function(t,e){var r=t.graphicsData.length;if(0!==r){e.beginPath();for(var n=0;r>n;n++){var o=t.graphicsData[n],s=o.shape;if(o.type===i.SHAPES.POLY){var a=s.points;e.moveTo(a[0],a[1]);for(var h=1;hw?w:S,e.moveTo(b,_+S),e.lineTo(b,_+E-S),e.quadraticCurveTo(b,_+E,b+S,_+E),e.lineTo(b+T-S,_+E),e.quadraticCurveTo(b+T,_+E,b+T,_+E-S),e.lineTo(b+T,_+S),e.quadraticCurveTo(b+T,_,b+T-S,_),e.lineTo(b+S,_),e.quadraticCurveTo(b,_,b,_+S),e.closePath()}}}},n.updateGraphicsTint=function(t){if(16777215!==t.tint||t._prevTint!==t.tint){t._prevTint=t.tint;for(var e=(t.tint>>16&255)/255,r=(t.tint>>8&255)/255,i=(255&t.tint)/255,n=0;n>16&255)/255*e*255<<16)+((s>>8&255)/255*r*255<<8)+(255&s)/255*i*255,o._lineTint=((a>>16&255)/255*e*255<<16)+((a>>8&255)/255*r*255<<8)+(255&a)/255*i*255}}}},{"../../../const":38}],69:[function(t,e,r){function i(){}var n=t("./CanvasGraphics");i.prototype.constructor=i,e.exports=i,i.prototype.pushMask=function(t,e){e.context.save();var r=t.alpha,i=t.worldTransform,o=e.resolution;e.context.setTransform(i.a*o,i.b*o,i.c*o,i.d*o,i.tx*o,i.ty*o),t.texture||(n.renderGraphicsMask(t,e.context),e.context.clip()),t.worldAlpha=r},i.prototype.popMask=function(t){t.context.restore()},i.prototype.destroy=function(){}},{"./CanvasGraphics":68}],70:[function(t,e,r){var i=t("../../../utils"),n={};e.exports=n,n.getTintedTexture=function(t,e){var r=t.texture;e=n.roundColor(e);var i="#"+("00000"+(0|e).toString(16)).substr(-6);if(r.tintCache=r.tintCache||{},r.tintCache[i])return r.tintCache[i];var o=n.canvas||document.createElement("canvas");if(n.tintMethod(r,e,o),n.convertTintToImage){var s=new Image;s.src=o.toDataURL(),r.tintCache[i]=s}else r.tintCache[i]=o,n.canvas=null;return o},n.tintWithMultiply=function(t,e,r){var i=r.getContext("2d"),n=t.baseTexture.resolution,o=t.crop.clone();o.x*=n,o.y*=n,o.width*=n,o.height*=n,r.width=o.width,r.height=o.height,i.fillStyle="#"+("00000"+(0|e).toString(16)).substr(-6),i.fillRect(0,0,o.width,o.height),i.globalCompositeOperation="multiply",i.drawImage(t.baseTexture.source,o.x,o.y,o.width,o.height,0,0,o.width,o.height),i.globalCompositeOperation="destination-atop",i.drawImage(t.baseTexture.source,o.x,o.y,o.width,o.height,0,0,o.width,o.height)},n.tintWithOverlay=function(t,e,r){var i=r.getContext("2d"),n=t.baseTexture.resolution,o=t.crop.clone();o.x*=n,o.y*=n,o.width*=n,o.height*=n,r.width=o.width,r.height=o.height,i.globalCompositeOperation="copy",i.fillStyle="#"+("00000"+(0|e).toString(16)).substr(-6),i.fillRect(0,0,o.width,o.height),i.globalCompositeOperation="destination-atop",i.drawImage(t.baseTexture.source,o.x,o.y,o.width,o.height,0,0,o.width,o.height)},n.tintWithPerPixel=function(t,e,r){var n=r.getContext("2d"),o=t.baseTexture.resolution,s=t.crop.clone();s.x*=o,s.y*=o,s.width*=o,s.height*=o,r.width=s.width,r.height=s.height,n.globalCompositeOperation="copy",n.drawImage(t.baseTexture.source,s.x,s.y,s.width,s.height,0,0,s.width,s.height);for(var a=i.hex2rgb(e),h=a[0],u=a[1],l=a[2],c=n.getImageData(0,0,s.width,s.height),p=c.data,d=0;de;++e)this.shaders[e].syncUniform(t)}},{"../shaders/TextureShader":85}],74:[function(t,e,r){function i(){n.call(this,"\nprecision mediump float;\n\nattribute vec2 aVertexPosition;\nattribute vec2 aTextureCoord;\nattribute vec4 aColor;\n\nuniform mat3 projectionMatrix;\nuniform vec2 resolution;\n\nvarying vec2 vTextureCoord;\nvarying vec4 vColor;\n\nvarying vec2 vResolution;\n\n//texcoords computed in vertex step\n//to avoid dependent texture reads\nvarying vec2 v_rgbNW;\nvarying vec2 v_rgbNE;\nvarying vec2 v_rgbSW;\nvarying vec2 v_rgbSE;\nvarying vec2 v_rgbM;\n\n\nvoid texcoords(vec2 fragCoord, vec2 resolution,\n out vec2 v_rgbNW, out vec2 v_rgbNE,\n out vec2 v_rgbSW, out vec2 v_rgbSE,\n out vec2 v_rgbM) {\n vec2 inverseVP = 1.0 / resolution.xy;\n v_rgbNW = (fragCoord + vec2(-1.0, -1.0)) * inverseVP;\n v_rgbNE = (fragCoord + vec2(1.0, -1.0)) * inverseVP;\n v_rgbSW = (fragCoord + vec2(-1.0, 1.0)) * inverseVP;\n v_rgbSE = (fragCoord + vec2(1.0, 1.0)) * inverseVP;\n v_rgbM = vec2(fragCoord * inverseVP);\n}\n\nvoid main(void){\n gl_Position = vec4((projectionMatrix * vec3(aVertexPosition, 1.0)).xy, 0.0, 1.0);\n vTextureCoord = aTextureCoord;\n vColor = vec4(aColor.rgb * aColor.a, aColor.a);\n vResolution = resolution;\n\n //compute the texture coords and send them to varyings\n texcoords(aTextureCoord * resolution, resolution, v_rgbNW, v_rgbNE, v_rgbSW, v_rgbSE, v_rgbM);\n}\n",'precision lowp float;\n\n\n/**\nBasic FXAA implementation based on the code on geeks3d.com with the\nmodification that the texture2DLod stuff was removed since it\'s\nunsupported by WebGL.\n\n--\n\nFrom:\nhttps://github.com/mitsuhiko/webgl-meincraft\n\nCopyright (c) 2011 by Armin Ronacher.\n\nSome rights reserved.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are\nmet:\n\n * Redistributions of source code must retain the above copyright\n notice, this list of conditions and the following disclaimer.\n\n * Redistributions in binary form must reproduce the above\n copyright notice, this list of conditions and the following\n disclaimer in the documentation and/or other materials provided\n with the distribution.\n\n * The names of the contributors may not be used to endorse or\n promote products derived from this software without specific\n prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\nLIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\nA PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\nOWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\nSPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\nLIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\nDATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\nTHEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\nOF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n*/\n\n#ifndef FXAA_REDUCE_MIN\n #define FXAA_REDUCE_MIN (1.0/ 128.0)\n#endif\n#ifndef FXAA_REDUCE_MUL\n #define FXAA_REDUCE_MUL (1.0 / 8.0)\n#endif\n#ifndef FXAA_SPAN_MAX\n #define FXAA_SPAN_MAX 8.0\n#endif\n\n//optimized version for mobile, where dependent\n//texture reads can be a bottleneck\nvec4 fxaa(sampler2D tex, vec2 fragCoord, vec2 resolution,\n vec2 v_rgbNW, vec2 v_rgbNE,\n vec2 v_rgbSW, vec2 v_rgbSE,\n vec2 v_rgbM) {\n vec4 color;\n mediump vec2 inverseVP = vec2(1.0 / resolution.x, 1.0 / resolution.y);\n vec3 rgbNW = texture2D(tex, v_rgbNW).xyz;\n vec3 rgbNE = texture2D(tex, v_rgbNE).xyz;\n vec3 rgbSW = texture2D(tex, v_rgbSW).xyz;\n vec3 rgbSE = texture2D(tex, v_rgbSE).xyz;\n vec4 texColor = texture2D(tex, v_rgbM);\n vec3 rgbM = texColor.xyz;\n vec3 luma = vec3(0.299, 0.587, 0.114);\n float lumaNW = dot(rgbNW, luma);\n float lumaNE = dot(rgbNE, luma);\n float lumaSW = dot(rgbSW, luma);\n float lumaSE = dot(rgbSE, luma);\n float lumaM = dot(rgbM, luma);\n float lumaMin = min(lumaM, min(min(lumaNW, lumaNE), min(lumaSW, lumaSE)));\n float lumaMax = max(lumaM, max(max(lumaNW, lumaNE), max(lumaSW, lumaSE)));\n\n mediump vec2 dir;\n dir.x = -((lumaNW + lumaNE) - (lumaSW + lumaSE));\n dir.y = ((lumaNW + lumaSW) - (lumaNE + lumaSE));\n\n float dirReduce = max((lumaNW + lumaNE + lumaSW + lumaSE) *\n (0.25 * FXAA_REDUCE_MUL), FXAA_REDUCE_MIN);\n\n float rcpDirMin = 1.0 / (min(abs(dir.x), abs(dir.y)) + dirReduce);\n dir = min(vec2(FXAA_SPAN_MAX, FXAA_SPAN_MAX),\n max(vec2(-FXAA_SPAN_MAX, -FXAA_SPAN_MAX),\n dir * rcpDirMin)) * inverseVP;\n\n vec3 rgbA = 0.5 * (\n texture2D(tex, fragCoord * inverseVP + dir * (1.0 / 3.0 - 0.5)).xyz +\n texture2D(tex, fragCoord * inverseVP + dir * (2.0 / 3.0 - 0.5)).xyz);\n vec3 rgbB = rgbA * 0.5 + 0.25 * (\n texture2D(tex, fragCoord * inverseVP + dir * -0.5).xyz +\n texture2D(tex, fragCoord * inverseVP + dir * 0.5).xyz);\n\n float lumaB = dot(rgbB, luma);\n if ((lumaB < lumaMin) || (lumaB > lumaMax))\n color = vec4(rgbA, texColor.a);\n else\n color = vec4(rgbB, texColor.a);\n return color;\n}\n\n\nvarying vec2 vTextureCoord;\nvarying vec4 vColor;\nvarying vec2 vResolution;\n\n//texcoords computed in vertex step\n//to avoid dependent texture reads\nvarying vec2 v_rgbNW;\nvarying vec2 v_rgbNE;\nvarying vec2 v_rgbSW;\nvarying vec2 v_rgbSE;\nvarying vec2 v_rgbM;\n\nuniform sampler2D uSampler;\n\n\nvoid main(void){\n\n gl_FragColor = fxaa(uSampler, vTextureCoord * vResolution, vResolution, v_rgbNW, v_rgbNE, v_rgbSW, v_rgbSE, v_rgbM);\n\n}\n',{resolution:{type:"v2",value:{x:1,y:1}}})}var n=t("./AbstractFilter");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.applyFilter=function(t,e,r){var i=t.filterManager,n=this.getShader(t);i.applyFilter(n,e,r)}},{"./AbstractFilter":73}],75:[function(t,e,r){function i(t){var e=new o.Matrix;n.call(this,"attribute vec2 aVertexPosition;\nattribute vec2 aTextureCoord;\nattribute vec4 aColor;\n\nuniform mat3 projectionMatrix;\nuniform mat3 otherMatrix;\n\nvarying vec2 vMaskCoord;\nvarying vec2 vTextureCoord;\nvarying vec4 vColor;\n\nvoid main(void)\n{\n gl_Position = vec4((projectionMatrix * vec3(aVertexPosition, 1.0)).xy, 0.0, 1.0);\n vTextureCoord = aTextureCoord;\n vMaskCoord = ( otherMatrix * vec3( aTextureCoord, 1.0) ).xy;\n vColor = vec4(aColor.rgb * aColor.a, aColor.a);\n}\n","precision lowp float;\n\nvarying vec2 vMaskCoord;\nvarying vec2 vTextureCoord;\nvarying vec4 vColor;\n\nuniform sampler2D uSampler;\nuniform float alpha;\nuniform sampler2D mask;\n\nvoid main(void)\n{\n // check clip! this will stop the mask bleeding out from the edges\n vec2 text = abs( vMaskCoord - 0.5 );\n text = step(0.5, text);\n float clip = 1.0 - max(text.y, text.x);\n vec4 original = texture2D(uSampler, vTextureCoord);\n vec4 masky = texture2D(mask, vMaskCoord);\n original *= (masky.r * masky.a * alpha * clip);\n gl_FragColor = original;\n}\n",{mask:{type:"sampler2D",value:t._texture},alpha:{type:"f",value:1},otherMatrix:{type:"mat3",value:e.toArray(!0)}}),this.maskSprite=t,this.maskMatrix=e}var n=t("./AbstractFilter"),o=t("../../../math");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.applyFilter=function(t,e,r){var i=t.filterManager;this.uniforms.mask.value=this.maskSprite._texture,i.calculateMappedMatrix(e.frame,this.maskSprite,this.maskMatrix),this.uniforms.otherMatrix.value=this.maskMatrix.toArray(!0),this.uniforms.alpha.value=this.maskSprite.worldAlpha;var n=this.getShader(t);i.applyFilter(n,e,r)},Object.defineProperties(i.prototype,{map:{get:function(){return this.uniforms.mask.value},set:function(t){this.uniforms.mask.value=t}},offset:{get:function(){return this.uniforms.offset.value},set:function(t){this.uniforms.offset.value=t}}})},{"../../../math":55,"./AbstractFilter":73}],76:[function(t,e,r){function i(t){n.call(this,t),this.currentBlendMode=99999}var n=t("./WebGLManager");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.setBlendMode=function(t){if(this.currentBlendMode===t)return!1;this.currentBlendMode=t;var e=this.renderer.blendModes[this.currentBlendMode];return this.renderer.gl.blendFunc(e[0],e[1]),!0}},{"./WebGLManager":81}],77:[function(t,e,r){function i(t){n.call(this,t),this.filterStack=[],this.filterStack.push({renderTarget:t.currentRenderTarget,filter:[],bounds:null}),this.texturePool=[],this.textureSize=new h.Rectangle(0,0,t.width,t.height),this.currentFrame=null}var n=t("./WebGLManager"),o=t("../utils/RenderTarget"),s=t("../../../const"),a=t("../utils/Quad"),h=t("../../../math");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.onContextChange=function(){this.texturePool.length=0;var t=this.renderer.gl;this.quad=new a(t)},i.prototype.setFilterStack=function(t){this.filterStack=t},i.prototype.pushFilter=function(t,e){var r=t.filterArea?t.filterArea.clone():t.getBounds();r.x=0|r.x,r.y=0|r.y,r.width=0|r.width,r.height=0|r.height;var i=0|e[0].padding;if(r.x-=i,r.y-=i,r.width+=2*i,r.height+=2*i,this.renderer.currentRenderTarget.transform){var n=this.renderer.currentRenderTarget.transform;r.x+=n.tx,r.y+=n.ty,this.capFilterArea(r),r.x-=n.tx,r.y-=n.ty}else this.capFilterArea(r);if(r.width>0&&r.height>0){this.currentFrame=r;var o=this.getRenderTarget();this.renderer.setRenderTarget(o),o.clear(),this.filterStack.push({renderTarget:o,filter:e})}else this.filterStack.push({renderTarget:null,filter:e})},i.prototype.popFilter=function(){var t=this.filterStack.pop(),e=this.filterStack[this.filterStack.length-1],r=t.renderTarget;if(t.renderTarget){var i=e.renderTarget,n=this.renderer.gl;this.currentFrame=r.frame,this.quad.map(this.textureSize,r.frame),n.bindBuffer(n.ARRAY_BUFFER,this.quad.vertexBuffer),n.bindBuffer(n.ELEMENT_ARRAY_BUFFER,this.quad.indexBuffer);var o=t.filter;if(n.vertexAttribPointer(this.renderer.shaderManager.defaultShader.attributes.aVertexPosition,2,n.FLOAT,!1,0,0),n.vertexAttribPointer(this.renderer.shaderManager.defaultShader.attributes.aTextureCoord,2,n.FLOAT,!1,0,32),n.vertexAttribPointer(this.renderer.shaderManager.defaultShader.attributes.aColor,4,n.FLOAT,!1,0,64),this.renderer.blendModeManager.setBlendMode(s.BLEND_MODES.NORMAL),1===o.length)o[0].uniforms.dimensions&&(o[0].uniforms.dimensions.value[0]=this.renderer.width,o[0].uniforms.dimensions.value[1]=this.renderer.height,o[0].uniforms.dimensions.value[2]=this.quad.vertices[0],o[0].uniforms.dimensions.value[3]=this.quad.vertices[5]),o[0].applyFilter(this.renderer,r,i),this.returnRenderTarget(r);else{for(var a=r,h=this.getRenderTarget(!0),u=0;uthis.textureSize.width&&(t.width=this.textureSize.width-t.x),t.y+t.height>this.textureSize.height&&(t.height=this.textureSize.height-t.y)},i.prototype.resize=function(t,e){this.textureSize.width=t,this.textureSize.height=e;for(var r=0;re;++e)t._array[2*e]=o[e].x,t._array[2*e+1]=o[e].y;s.uniform2fv(i,t._array);break;case"v3v":for(t._array||(t._array=new Float32Array(3*o.length)),e=0,r=o.length;r>e;++e)t._array[3*e]=o[e].x,t._array[3*e+1]=o[e].y,t._array[3*e+2]=o[e].z;s.uniform3fv(i,t._array);break;case"v4v":for(t._array||(t._array=new Float32Array(4*o.length)),e=0,r=o.length;r>e;++e)t._array[4*e]=o[e].x,t._array[4*e+1]=o[e].y,t._array[4*e+2]=o[e].z,t._array[4*e+3]=o[e].w;s.uniform4fv(i,t._array);break;case"t":case"sampler2D":if(!t.value||!t.value.baseTexture.hasLoaded)break;s.activeTexture(s["TEXTURE"+this.textureCount]);var a=t.value.baseTexture._glTextures[s.id];a||(this.initSampler2D(t),a=t.value.baseTexture._glTextures[s.id]),s.bindTexture(s.TEXTURE_2D,a),s.uniform1i(t._location,this.textureCount),this.textureCount++;break;default:console.warn("Pixi.js Shader Warning: Unknown uniform type: "+t.type)}},i.prototype.syncUniforms=function(){this.textureCount=1;for(var t in this.uniforms)this.syncUniform(this.uniforms[t])},i.prototype.initSampler2D=function(t){var e=this.gl,r=t.value.baseTexture;if(r.hasLoaded)if(t.textureData){var i=t.textureData;r._glTextures[e.id]=e.createTexture(),e.bindTexture(e.TEXTURE_2D,r._glTextures[e.id]),e.pixelStorei(e.UNPACK_PREMULTIPLY_ALPHA_WEBGL,r.premultipliedAlpha),e.texImage2D(e.TEXTURE_2D,0,i.luminance?e.LUMINANCE:e.RGBA,e.RGBA,e.UNSIGNED_BYTE,r.source),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MAG_FILTER,i.magFilter?i.magFilter:e.LINEAR),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MIN_FILTER,i.wrapS?i.wrapS:e.CLAMP_TO_EDGE),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,i.wrapS?i.wrapS:e.CLAMP_TO_EDGE),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,i.wrapT?i.wrapT:e.CLAMP_TO_EDGE)}else this.shaderManager.renderer.updateTexture(r)},i.prototype.destroy=function(){this.gl.deleteProgram(this.program),this.gl=null,this.uniforms=null,this.attributes=null,this.vertexSrc=null,this.fragmentSrc=null},i.prototype._glCompile=function(t,e){var r=this.gl.createShader(t);return this.gl.shaderSource(r,e),this.gl.compileShader(r),this.gl.getShaderParameter(r,this.gl.COMPILE_STATUS)?r:(console.log(this.gl.getShaderInfoLog(r)),null)}},{"../../../utils":105}],85:[function(t,e,r){function i(t,e,r,o,s){var a={uSampler:{type:"sampler2D",value:0},projectionMatrix:{type:"mat3",value:new Float32Array([1,0,0,0,1,0,0,0,1])}};if(o)for(var h in o)a[h]=o[h];var u={aVertexPosition:0,aTextureCoord:0,aColor:0};if(s)for(var l in s)u[l]=s[l];e=e||i.defaultVertexSrc,r=r||i.defaultFragmentSrc,n.call(this,t,e,r,a,u)}var n=t("./Shader");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.defaultVertexSrc=["precision lowp float;","attribute vec2 aVertexPosition;","attribute vec2 aTextureCoord;","attribute vec4 aColor;","uniform mat3 projectionMatrix;","varying vec2 vTextureCoord;","varying vec4 vColor;","void main(void){"," gl_Position = vec4((projectionMatrix * vec3(aVertexPosition, 1.0)).xy, 0.0, 1.0);"," vTextureCoord = aTextureCoord;"," vColor = vec4(aColor.rgb * aColor.a, aColor.a);","}"].join("\n"),i.defaultFragmentSrc=["precision lowp float;","varying vec2 vTextureCoord;","varying vec4 vColor;","uniform sampler2D uSampler;","void main(void){"," gl_FragColor = texture2D(uSampler, vTextureCoord) * vColor ;","}"].join("\n")},{"./Shader":84}],86:[function(t,e,r){function i(t){vertexSrc=i.defaultVertexSrc,fragmentSrc=i.defaultFragmentSrc,n.call(this,t,vertexSrc,fragmentSrc)}var n=t("pixi-gl-core").GLShader;i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.defaultVertexSrc=["precision lowp float;","attribute vec2 aVertexPosition;","attribute vec2 aTextureCoord;","attribute vec4 aColor;","uniform mat3 projectionMatrix;","varying vec2 vTextureCoord;","varying vec4 vColor;","void main(void){"," gl_Position = vec4((projectionMatrix * vec3(aVertexPosition, 1.0)).xy, 0.0, 1.0);"," vTextureCoord = aTextureCoord;"," vColor = vec4(aColor.rgb * aColor.a, aColor.a);","}"].join("\n"),i.defaultFragmentSrc=["precision lowp float;","varying vec2 vTextureCoord;","varying vec4 vColor;","uniform sampler2D uSampler;","void main(void){"," gl_FragColor = texture2D(uSampler, vTextureCoord) * vColor ;","}"].join("\n")},{"pixi-gl-core":1}],87:[function(t,e,r){function i(t){n.call(this,t)}var n=t("../managers/WebGLManager");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.start=function(){},i.prototype.stop=function(){this.flush()},i.prototype.flush=function(){},i.prototype.render=function(t){}},{"../managers/WebGLManager":81}],88:[function(t,e,r){function i(t){this.gl=t,this.vertices=new Float32Array([0,0,200,0,200,200,0,200]),this.uvs=new Float32Array([0,0,1,0,1,1,0,1]),this.colors=new Float32Array([1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]),this.indices=new Uint16Array([0,1,2,0,3,2]),this.vertexBuffer=t.createBuffer(),this.indexBuffer=t.createBuffer(),t.bindBuffer(t.ARRAY_BUFFER,this.vertexBuffer),t.bufferData(t.ARRAY_BUFFER,128,t.DYNAMIC_DRAW),t.bindBuffer(t.ELEMENT_ARRAY_BUFFER,this.indexBuffer),t.bufferData(t.ELEMENT_ARRAY_BUFFER,this.indices,t.STATIC_DRAW),this.upload()}i.prototype.constructor=i,i.prototype.map=function(t,e){var r=0,i=0;this.uvs[0]=r,this.uvs[1]=i,this.uvs[2]=r+e.width/t.width,this.uvs[3]=i,this.uvs[4]=r+e.width/t.width,this.uvs[5]=i+e.height/t.height,this.uvs[6]=r,this.uvs[7]=i+e.height/t.height,r=e.x,i=e.y,this.vertices[0]=r,this.vertices[1]=i,this.vertices[2]=r+e.width,this.vertices[3]=i,this.vertices[4]=r+e.width,this.vertices[5]=i+e.height,this.vertices[6]=r,this.vertices[7]=i+e.height,this.upload()},i.prototype.upload=function(){var t=this.gl;t.bindBuffer(t.ARRAY_BUFFER,this.vertexBuffer),t.bufferSubData(t.ARRAY_BUFFER,0,this.vertices),t.bufferSubData(t.ARRAY_BUFFER,32,this.uvs),t.bufferSubData(t.ARRAY_BUFFER,64,this.colors)},i.prototype.destroy=function(){var t=this.gl;t.deleteBuffer(this.vertexBuffer),t.deleteBuffer(this.indexBuffer)},e.exports=i},{}],89:[function(t,e,r){var i=t("../../../math"),n=(t("../../../utils"),t("../../../const")),o=t("pixi-gl-core").GLTexture,s=t("pixi-gl-core").GLFramebuffer,a=t("./StencilMaskStack"),h=function(t,e,r,h,u,l){if(this.gl=t,this.frameBuffer=null,this.texture=null,this.clearColor=[0,0,0,0],this.size=new i.Rectangle(0,0,1,1),this.resolution=u||n.RESOLUTION,this.projectionMatrix=new i.Matrix,this.transform=null,this.frame=null,this.stencilBuffer=null,this.stencilMaskStack=new a,this.filterStack=[{renderTarget:this,filter:[],bounds:this.size}],this.scaleMode=h||n.SCALE_MODES.DEFAULT,this.root=l,this.frameBuffer=s.createRGBA(t,100,100),this.frameBuffer&&this.frameBuffer.unbind(),this.root)this.frameBuffer.framebuffer=null;else{var c=new o(t);c.enableLinearScaling(),c.enableWrapClamp(),this.frameBuffer.enableTexture(c),this.texture=c.texture}this.resize(e,r)};h.prototype.constructor=h,e.exports=h,h.prototype.clear=function(t){var e=t||this.clearColor;this.frameBuffer.clear(e[0],e[1],e[2],e[3])},h.prototype.attachStencilBuffer=function(){this.root||this.frameBuffer.enableStencil()},h.prototype.activate=function(){var t=this.gl;this.frameBuffer.bind();var e=this.frame||this.size;this.calculateProjection(e),this.transform&&this.projectionMatrix.append(this.transform),t.viewport(0,0,e.width*this.resolution,e.height*this.resolution)},h.prototype.calculateProjection=function(t){var e=this.projectionMatrix;e.identity(),this.root?(e.a=1/t.width*2,e.d=-1/t.height*2,e.tx=-1-t.x*e.a,e.ty=1-t.y*e.d):(e.a=1/t.width*2,e.d=1/t.height*2,e.tx=-1-t.x*e.a,e.ty=-1-t.y*e.d)},h.prototype.resize=function(t,e){if(t=0|t,e=0|e,this.size.width!==t||this.size.height!==e){this.size.width=t,this.size.height=e,this.frameBuffer.resize(t*this.resolution,e*this.resolution);var r=this.frame||this.size;this.calculateProjection(r)}},h.prototype.destroy=function(){this.gl;this.frameBuffer.destroy(),this.frameBuffer=null,this.texture=null}},{"../../../const":38,"../../../math":55,"../../../utils":105,"./StencilMaskStack":90,"pixi-gl-core":1}],90:[function(t,e,r){function i(){this.stencilStack=[],this.reverse=!0,this.count=0}i.prototype.constructor=i,e.exports=i},{}],91:[function(t,e,r){function i(t,e){return e=e||{},e[CONST.BLEND_MODES.NORMAL]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.ADD]=[t.SRC_ALPHA,t.DST_ALPHA],e[CONST.BLEND_MODES.MULTIPLY]=[t.DST_COLOR,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.SCREEN]=[t.SRC_ALPHA,t.ONE],e[CONST.BLEND_MODES.OVERLAY]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.DARKEN]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.LIGHTEN]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.COLOR_DODGE]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.COLOR_BURN]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.HARD_LIGHT]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.SOFT_LIGHT]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.DIFFERENCE]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.EXCLUSION]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.HUE]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.SATURATION]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.COLOR]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.LUMINOSITY]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e}CONST=t("../../../const"),e.exports=i},{"../../../const":38}],92:[function(t,e,r){function i(t,e){e=e||{},e[CONST.DRAW_MODES.POINTS]=t.POINTS,e[CONST.DRAW_MODES.LINES]=t.LINES,e[CONST.DRAW_MODES.LINE_LOOP]=t.LINE_LOOP,e[CONST.DRAW_MODES.LINE_STRIP]=t.LINE_STRIP,e[CONST.DRAW_MODES.TRIANGLES]=t.TRIANGLES,e[CONST.DRAW_MODES.TRIANGLE_STRIP]=t.TRIANGLE_STRIP,e[CONST.DRAW_MODES.TRIANGLE_FAN]=t.TRIANGLE_FAN}CONST=t("../../../const"),e.exports=i},{"../../../const":38}],93:[function(t,e,r){function i(t){s.call(this),this.anchor=new n.Point,this._texture=null,this._width=0,this._height=0,this.tint=16777215,this.blendMode=u.BLEND_MODES.NORMAL,this.shader=null,this.cachedTint=16777215,this.texture=t||o.EMPTY,this.textureDirty=!0,this.vertexDirty=!0,this.vertexData=new Float32Array(8)}var n=t("../math"),o=t("../textures/Texture"),s=t("../display/Container"),a=t("../renderers/canvas/utils/CanvasTinter"),h=t("../utils"),u=t("../const"),l=new n.Point;i.prototype=Object.create(s.prototype),i.prototype.constructor=i,e.exports=i,Object.defineProperties(i.prototype,{width:{get:function(){return Math.abs(this.scale.x)*this.texture._frame.width},set:function(t){var e=h.sign(this.scale.x)||1;this.scale.x=e*t/this.texture._frame.width,this._width=t}},height:{get:function(){return Math.abs(this.scale.y)*this.texture._frame.height},set:function(t){var e=h.sign(this.scale.y)||1;this.scale.y=e*t/this.texture._frame.height,this._height=t}},texture:{get:function(){return this._texture},set:function(t){this._texture!==t&&(this._texture=t,this.cachedTint=16777215,this.textureDirty=!0,t&&(t.baseTexture.hasLoaded?this._onTextureUpdate():t.once("update",this._onTextureUpdate,this)))}}}),i.prototype._onTextureUpdate=function(){this.textureDirty=!0,this._width&&(this.scale.x=h.sign(this.scale.x)*this._width/this.texture.frame.width),this._height&&(this.scale.y=h.sign(this.scale.y)*this._height/this.texture.frame.height)},i.prototype.caclulateVertices=function(){var t,e,r,i,n=this._texture,o=this.worldTransform,s=o.a,a=o.b,h=o.c,u=o.d,l=o.tx,c=o.ty,p=this.vertexData,d=n.trim;d?(e=d.x-this.anchor.x*d.width,t=e+n.crop.width,i=d.y-this.anchor.y*d.height,r=i+n.crop.height):(t=n._frame.width*(1-this.anchor.x),e=n._frame.width*-this.anchor.x,r=n._frame.height*(1-this.anchor.y),i=n._frame.height*-this.anchor.y),p[0]=s*e+h*i+l,p[1]=u*i+a*e+c,p[2]=s*t+h*i+l,p[3]=u*i+a*t+c,p[4]=s*t+h*r+l,p[5]=u*r+a*t+c,p[6]=s*e+h*r+l,p[7]=u*r+a*e+c},i.prototype._renderWebGL=function(t){this.textureDirty&&(this.textureDirty=!1,this._onTextureUpdate(),this.vertexDirty=!0),this.vertexDirty&&(this.vertexDirty=!1,this.caclulateVertices()),t.setObjectRenderer(t.plugins.sprite),t.plugins.sprite.render(this)},i.prototype.getBounds=function(t){if(!this._currentBounds){this.vertexDirty&&(this.vertexDirty=!1,this.caclulateVertices());var e,r,i,n,o=this.vertexData,s=o[0],a=o[1],h=o[2],u=o[3],l=o[4],c=o[5],p=o[6],d=o[7];if(e=s,e=e>h?h:e,e=e>l?l:e,e=e>p?p:e,i=a,i=i>u?u:i,i=i>c?c:i,i=i>d?d:i,r=s,r=h>r?h:r,r=l>r?l:r,r=p>r?p:r,n=a,n=u>n?u:n,n=c>n?c:n,n=d>n?d:n,this.children.length){var f=this.containerGetBounds();w0=f.x,w1=f.x+f.width,h0=f.y,h1=f.y+f.height,e=ew1?r:w1,n=n>h1?n:h1}var v=this._bounds;v.x=e,v.width=r-e,v.y=i,v.height=n-i,this._currentBounds=v}return this._currentBounds},i.prototype.getLocalBounds=function(){return this._bounds.x=-this._texture._frame.width*this.anchor.x,this._bounds.y=-this._texture._frame.height*this.anchor.y,this._bounds.width=this._texture._frame.width,this._bounds.height=this._texture._frame.height,this._bounds},i.prototype.containsPoint=function(t){this.worldTransform.applyInverse(t,l);var e,r=this._texture._frame.width,i=this._texture._frame.height,n=-r*this.anchor.x;return l.x>n&&l.xe&&l.y=this.size&&this.flush(),t.texture._uvs){var e,r=t.texture.baseTexture,i=this.currentGroup;if(this.currentTexture!==r){if(this.currentTexture=r,!r._enabled){if(r._enabled=!0,r._id=this.textureCount,this.textureCount===this.MAX_TEXTUES){for(e=0;e>16)+(65280&t.tint)+((255&t.tint)<<16)+(255*t.worldAlpha<<24),u=t.texture._uvs.uvs_uint32;s[n++]=a[0],s[n++]=a[1],this.uvs[n++]=u[0],o[n++]=h,s[n++]=r._id,s[n++]=a[2],s[n++]=a[3],this.uvs[n++]=u[1],o[n++]=h,s[n++]=r._id,s[n++]=a[4],s[n++]=a[5],this.uvs[n++]=u[2],o[n++]=h,s[n++]=r._id,s[n++]=a[6],s[n++]=a[7],this.uvs[n++]=u[3],o[n++]=h,s[n++]=r._id}},i.prototype.flush=function(){if(0!==this.currentIndex){var t=this.renderer.gl;this.currentGroup.size=this.currentIndex-this.currentGroup.start;for(var e=0;e.5*this.size)this.vertexBuffer.upload(this.vertices,0,!0);else{var r=this.positions.subarray(0,this.currentIndex*this.vertByteSize);this.vertexBuffer.upload(r,0,!0)}for(this.renderer.bindShader(this._shader),this.renderer.blendModeManager.setBlendMode(0),e=0;eu;u++)h[u]=u;return a.bind(),a.uniforms.uSamplers=h,a}function n(t){var e="vec4 getSampleFromArray(sampler2D textures[%%], int ndx, vec2 uv) {\n\nvec4 color;";e+="\n",e+="\n";for(var r=0;t>r;r++)r>0&&(e+="\nelse "),t-1>r&&(e+="if(ndx == "+r+")"),e+="\n{",e+="\n color = texture2D(textures["+r+"], uv);",e+="\n}";return e+="\n",e+="\n",e+="return color;",e+="\n}"}var o=t("pixi-gl-core").GLShader,s=["varying vec2 vTextureCoord;","varying vec4 vColor;","varying float vTextureId;","uniform sampler2D uSamplers[%%];","void main(void){","gl_FragColor = getSampleFromArray(uSamplers, int(vTextureId), vTextureCoord) * vColor;","}"].join("\n");e.exports=i},{"pixi-gl-core":1}],96:[function(t,e,r){function i(t,e,r){this.canvas=document.createElement("canvas"),this.context=this.canvas.getContext("2d"),this.resolution=r||h.RESOLUTION,this._text=null,this._style=null;var i=o.fromCanvas(this.canvas);i.trim=new s.Rectangle,n.call(this,i),this.text=t,this.style=e}var n=t("../sprites/Sprite"),o=t("../textures/Texture"),s=t("../math"),a=t("../utils"),h=t("../const");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.fontPropertiesCache={},i.fontPropertiesCanvas=document.createElement("canvas"),i.fontPropertiesContext=i.fontPropertiesCanvas.getContext("2d"),Object.defineProperties(i.prototype,{width:{get:function(){return this.dirty&&this.updateText(),this.scale.x*this._texture._frame.width},set:function(t){this.scale.x=t/this._texture._frame.width,this._width=t}},height:{get:function(){return this.dirty&&this.updateText(),this.scale.y*this._texture._frame.height},set:function(t){this.scale.y=t/this._texture._frame.height,this._height=t}},style:{get:function(){return this._style},set:function(t){t=t||{},"number"==typeof t.fill&&(t.fill=a.hex2string(t.fill)),"number"==typeof t.stroke&&(t.stroke=a.hex2string(t.stroke)),"number"==typeof t.dropShadowColor&&(t.dropShadowColor=a.hex2string(t.dropShadowColor)),t.font=t.font||"bold 20pt Arial",t.fill=t.fill||"black",t.align=t.align||"left",t.stroke=t.stroke||"black",t.strokeThickness=t.strokeThickness||0,t.wordWrap=t.wordWrap||!1,t.wordWrapWidth=t.wordWrapWidth||100,t.dropShadow=t.dropShadow||!1,t.dropShadowColor=t.dropShadowColor||"#000000",t.dropShadowAngle=void 0!==t.dropShadowAngle?t.dropShadowAngle:Math.PI/6,t.dropShadowDistance=void 0!==t.dropShadowDistance?t.dropShadowDistance:5,t.dropShadowBlur=void 0!==t.dropShadowBlur?t.dropShadowBlur:0,t.padding=t.padding||0,t.textBaseline=t.textBaseline||"alphabetic",t.lineJoin=t.lineJoin||"miter",t.miterLimit=t.miterLimit||10,this._style=t,this.dirty=!0}},text:{get:function(){return this._text},set:function(t){t=t.toString()||" ",this._text!==t&&(this._text=t,this.dirty=!0)}}}),i.prototype.updateText=function(){var t=this._style;this.context.font=t.font;for(var e=t.wordWrap?this.wordWrap(this._text):this._text,r=e.split(/(?:\r\n|\r|\n)/),i=new Array(r.length),n=0,o=this.determineFontProperties(t.font),s=0;s0?(this.context.shadowColor=t.dropShadowColor,this.context.shadowBlur=t.dropShadowBlur):this.context.fillStyle=t.dropShadowColor;var d=Math.cos(t.dropShadowAngle)*t.dropShadowDistance,f=Math.sin(t.dropShadowAngle)*t.dropShadowDistance;for(s=0;sh;h++){for(u=0;p>u;u+=4)if(255!==l[d+u]){f=!0;break}if(f)break;d+=p}for(e.ascent=s-h,d=c-p,f=!1,h=a;h>s;h--){for(u=0;p>u;u+=4)if(255!==l[d+u]){f=!0;break}if(f)break;d-=p}e.descent=h-s,e.fontSize=e.ascent+e.descent,i.fontPropertiesCache[t]=e}return e},i.prototype.wordWrap=function(t){for(var e="",r=t.split("\n"),i=this._style.wordWrapWidth,n=0;no?(a>0&&(e+="\n"),e+=s[a],o=i-h):(o-=u,e+=" "+s[a])}n0&&e>0,this.width=this._frame.width=this.crop.width=t,this.height=this._frame.height=this.crop.height=e,r&&(this.baseTexture.width=this.width,this.baseTexture.height=this.height),this.valid&&(this.textureBuffer.resize(this.width,this.height),this.filterManager&&this.filterManager.resize(this.width,this.height)))},i.prototype.clear=function(){this.valid&&(this.renderer.type===l.RENDERER_TYPE.WEBGL&&this.renderer.gl.bindFramebuffer(this.renderer.gl.FRAMEBUFFER,this.textureBuffer.frameBuffer),this.textureBuffer.clear())},i.prototype.renderWebGL=function(t,e,r,i){if(this.valid){if(i=void 0!==i?i:!0,this.textureBuffer.transform=e,this.textureBuffer.activate(),t.worldAlpha=1,i){t.worldTransform.identity(),t.currentBounds=null;var n,o,s=t.children;for(n=0,o=s.length;o>n;++n)s[n].updateTransform()}var a=this.renderer.filterManager;this.renderer.filterManager=this.filterManager,this.renderer.renderDisplayObject(t,this.textureBuffer,r),this.renderer.filterManager=a}},i.prototype.renderCanvas=function(t,e,r,i){if(this.valid){i=!!i;var n=c;n.identity(),e&&n.append(e);var o=t.worldTransform;t.worldTransform=n,t.worldAlpha=1;var s,a,h=t.children;for(s=0,a=h.length;a>s;++s)h[s].updateTransform();r&&this.textureBuffer.clear();var u=this.textureBuffer.context,l=this.renderer.resolution;this.renderer.resolution=this.resolution,this.renderer.renderDisplayObject(t,u),this.renderer.resolution=l,t.worldTransform===n&&(t.worldTransform=o)}},i.prototype.destroy=function(){o.prototype.destroy.call(this,!0),this.textureBuffer.destroy(),this.filterManager&&this.filterManager.destroy(),this.renderer=null},i.prototype.getImage=function(){var t=new Image;return t.src=this.getBase64(),t},i.prototype.getBase64=function(){return this.getCanvas().toDataURL()},i.prototype.getCanvas=function(){if(this.renderer.type===l.RENDERER_TYPE.WEBGL){var t=this.renderer.gl,e=this.textureBuffer.size.width,r=this.textureBuffer.size.height,i=new Uint8Array(4*e*r);t.bindFramebuffer(t.FRAMEBUFFER,this.textureBuffer.frameBuffer),t.readPixels(0,0,e,r,t.RGBA,t.UNSIGNED_BYTE,i),t.bindFramebuffer(t.FRAMEBUFFER,null);var n=new h(e,r),o=n.context.getImageData(0,0,e,r);return o.data.set(i),n.context.putImageData(o,0,0),n.canvas}return this.textureBuffer.canvas},i.prototype.getPixels=function(){var t,e;if(this.renderer.type===l.RENDERER_TYPE.WEBGL){var r=this.renderer.gl;t=this.textureBuffer.size.width,e=this.textureBuffer.size.height;var i=new Uint8Array(4*t*e);return r.bindFramebuffer(r.FRAMEBUFFER,this.textureBuffer.frameBuffer),r.readPixels(0,0,t,e,r.RGBA,r.UNSIGNED_BYTE,i),r.bindFramebuffer(r.FRAMEBUFFER,null),i}return t=this.textureBuffer.canvas.width,e=this.textureBuffer.canvas.height,this.textureBuffer.canvas.getContext("2d").getImageData(0,0,t,e).data},i.prototype.getPixel=function(t,e){if(this.renderer.type===l.RENDERER_TYPE.WEBGL){var r=this.renderer.gl,i=new Uint8Array(4);return r.bindFramebuffer(r.FRAMEBUFFER,this.textureBuffer.frameBuffer),r.readPixels(t,e,1,1,r.RGBA,r.UNSIGNED_BYTE,i),r.bindFramebuffer(r.FRAMEBUFFER,null),i}return this.textureBuffer.canvas.getContext("2d").getImageData(t,e,1,1).data}},{"../const":38,"../math":55,"../renderers/canvas/utils/CanvasBuffer":67,"../renderers/webgl/managers/FilterManager":77,"../renderers/webgl/utils/RenderTarget":89,"./BaseTexture":97,"./Texture":99}],99:[function(t,e,r){function i(t,e,r,n,o){a.call(this),this.noFrame=!1,e||(this.noFrame=!0,e=new h.Rectangle(0,0,1,1)),t instanceof i&&(t=t.baseTexture),this.baseTexture=t,this._frame=e,this.trim=n,this.valid=!1,this.requiresUpdate=!1,this._uvs=null,this.width=0,this.height=0,this.crop=r||e,this.rotate=!!o,t.hasLoaded?(this.noFrame&&(e=new h.Rectangle(0,0,t.width,t.height),t.on("update",this.onBaseTextureUpdated,this)),this.frame=e):t.once("loaded",this.onBaseTextureLoaded,this)}var n=t("./BaseTexture"),o=t("./VideoBaseTexture"),s=t("./TextureUvs"),a=t("eventemitter3"),h=t("../math"),u=t("../utils");i.prototype=Object.create(a.prototype),i.prototype.constructor=i,e.exports=i,Object.defineProperties(i.prototype,{frame:{get:function(){return this._frame},set:function(t){if(this._frame=t,this.noFrame=!1,this.width=t.width,this.height=t.height,!this.trim&&!this.rotate&&(t.x+t.width>this.baseTexture.width||t.y+t.height>this.baseTexture.height))throw new Error("Texture Error: frame does not fit inside the base Texture dimensions "+this);this.valid=t&&t.width&&t.height&&this.baseTexture.hasLoaded,this.trim?(this.width=this.trim.width,this.height=this.trim.height,this._frame.width=this.trim.width,this._frame.height=this.trim.height):this.crop=t,this.valid&&this._updateUvs()}}}),i.prototype.update=function(){this.baseTexture.update()},i.prototype.onBaseTextureLoaded=function(t){this.noFrame?this.frame=new h.Rectangle(0,0,t.width,t.height):this.frame=this._frame,this.emit("update",this)},i.prototype.onBaseTextureUpdated=function(t){this._frame.width=t.width,this._frame.height=t.height,this.emit("update",this)},i.prototype.destroy=function(t){this.baseTexture&&(t&&this.baseTexture.destroy(),this.baseTexture.off("update",this.onBaseTextureUpdated,this),this.baseTexture.off("loaded",this.onBaseTextureLoaded,this),this.baseTexture=null),this._frame=null,this._uvs=null,this.trim=null,this.crop=null,this.valid=!1,this.off("dispose",this.dispose,this),this.off("update",this.update,this)},i.prototype.clone=function(){return new i(this.baseTexture,this.frame,this.crop,this.trim,this.rotate)},i.prototype._updateUvs=function(){this._uvs||(this._uvs=new s),this._uvs.set(this.crop,this.baseTexture,this.rotate)},i.fromImage=function(t,e,r){var o=u.TextureCache[t];return o||(o=new i(n.fromImage(t,e,r)),u.TextureCache[t]=o),o},i.fromFrame=function(t){var e=u.TextureCache[t];if(!e)throw new Error('The frameId "'+t+'" does not exist in the texture cache');return e},i.fromCanvas=function(t,e){return new i(n.fromCanvas(t,e))},i.fromVideo=function(t,e){return"string"==typeof t?i.fromVideoUrl(t,e):new i(o.fromVideo(t,e))},i.fromVideoUrl=function(t,e){return new i(o.fromUrl(t,e))},i.addTextureToCache=function(t,e){u.TextureCache[e]=t},i.removeTextureFromCache=function(t){var e=u.TextureCache[t];return delete u.TextureCache[t],delete u.BaseTextureCache[t],e},i.EMPTY=new i(new n)},{"../math":55,"../utils":105,"./BaseTexture":97,"./TextureUvs":100,"./VideoBaseTexture":101,eventemitter3:25}],100:[function(t,e,r){function i(){this.x0=0,this.y0=0,this.x1=1,this.y1=0,this.x2=1,this.y2=1,this.x3=0,this.y3=1,this.xy0_uint32=0,this.xy1_uint32=0,this.xy2_uint32=0,this.xy3_uint32=0,this.uvs_uint32=new Uint32Array(4)}e.exports=i,i.prototype.set=function(t,e,r){var i=e.width,n=e.height;r?(this.x0=(t.x+t.height)/i,this.y0=t.y/n,this.x1=(t.x+t.height)/i,this.y1=(t.y+t.width)/n,this.x2=t.x/i,this.y2=(t.y+t.width)/n,this.x3=t.x/i,this.y3=t.y/n):(this.x0=t.x/i,this.y0=t.y/n,this.x1=(t.x+t.width)/i,this.y1=t.y/n,this.x2=(t.x+t.width)/i,this.y2=(t.y+t.height)/n,this.x3=t.x/i,this.y3=(t.y+t.height)/n),this.uvs_uint32[0]=(65535*this.y0&65535)<<16|65535*this.x0&65535,this.uvs_uint32[1]=(65535*this.y1&65535)<<16|65535*this.x1&65535,this.uvs_uint32[2]=(65535*this.y2&65535)<<16|65535*this.x2&65535,this.uvs_uint32[3]=(65535*this.y3&65535)<<16|65535*this.x3&65535}},{}],101:[function(t,e,r){function i(t,e){if(!t)throw new Error("No video source element specified.");(t.readyState===t.HAVE_ENOUGH_DATA||t.readyState===t.HAVE_FUTURE_DATA)&&t.width&&t.height&&(t.complete=!0),o.call(this,t,e),this.autoUpdate=!1,this._onUpdate=this._onUpdate.bind(this),this._onCanPlay=this._onCanPlay.bind(this),t.complete||(t.addEventListener("canplay",this._onCanPlay),t.addEventListener("canplaythrough",this._onCanPlay),t.addEventListener("play",this._onPlayStart.bind(this)),t.addEventListener("pause",this._onPlayStop.bind(this))),this.__loaded=!1}function n(t,e){e||(e="video/"+t.substr(t.lastIndexOf(".")+1));var r=document.createElement("source");return r.src=t,r.type=e,r}var o=t("./BaseTexture"),s=t("../utils");i.prototype=Object.create(o.prototype),i.prototype.constructor=i,e.exports=i,i.prototype._onUpdate=function(){this.autoUpdate&&(window.requestAnimationFrame(this._onUpdate),this.update())},i.prototype._onPlayStart=function(){this.autoUpdate||(window.requestAnimationFrame(this._onUpdate),this.autoUpdate=!0)},i.prototype._onPlayStop=function(){this.autoUpdate=!1},i.prototype._onCanPlay=function(){this.hasLoaded=!0,this.source&&(this.source.removeEventListener("canplay",this._onCanPlay),this.source.removeEventListener("canplaythrough",this._onCanPlay),this.width=this.source.videoWidth,this.height=this.source.videoHeight,this.source.play(),this.__loaded||(this.__loaded=!0,this.emit("loaded",this)))},i.prototype.destroy=function(){this.source&&this.source._pixiId&&(delete s.BaseTextureCache[this.source._pixiId],delete this.source._pixiId),o.prototype.destroy.call(this)},i.fromVideo=function(t,e){t._pixiId||(t._pixiId="video_"+s.uid());var r=s.BaseTextureCache[t._pixiId];return r||(r=new i(t,e),s.BaseTextureCache[t._pixiId]=r),r},i.fromUrl=function(t,e){var r=document.createElement("video");if(Array.isArray(t))for(var o=0;othis._maxElapsedMS&&(e=this._maxElapsedMS),this.deltaTime=e*n.TARGET_FPMS*this.speed,this._emitter.emit(s,this.deltaTime),this.lastTime=t},e.exports=i},{"../const":38,eventemitter3:25}],103:[function(t,e,r){var i=t("./Ticker"),n=new i;n.autoStart=!0,e.exports={shared:n,Ticker:i}},{"./Ticker":102}],104:[function(t,e,r){var i=function(t){for(var e=6*t,r=new Uint16Array(e),i=0,n=0;e>i;i+=6,n+=4)r[i+0]=n+0,r[i+1]=n+1,r[i+2]=n+2,r[i+3]=n+0,r[i+4]=n+2,r[i+5]=n+3;return r};e.exports=i},{}],105:[function(t,e,r){var i=t("../const"),n=e.exports={_uid:0,_saidHello:!1,EventEmitter:t("eventemitter3"),pluginTarget:t("./pluginTarget"),async:t("async"),uid:function(){return++n._uid},hex2rgb:function(t,e){return e=e||[],e[0]=(t>>16&255)/255,e[1]=(t>>8&255)/255,e[2]=(255&t)/255,e},hex2string:function(t){return t=t.toString(16),t="000000".substr(0,6-t.length)+t,"#"+t},rgb2hex:function(t){return(255*t[0]<<16)+(255*t[1]<<8)+255*t[2]},canUseNewCanvasBlendModes:function(){if("undefined"==typeof document)return!1;var t="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAQAAAABAQMAAADD8p2OAAAAA1BMVEX/",e="AAAACklEQVQI12NgAAAAAgAB4iG8MwAAAABJRU5ErkJggg==",r=new Image;r.src=t+"AP804Oa6"+e;var i=new Image;i.src=t+"/wCKxvRF"+e;var n=document.createElement("canvas");n.width=6,n.height=1;var o=n.getContext("2d");o.globalCompositeOperation="multiply",o.drawImage(r,0,0),o.drawImage(i,2,0);var s=o.getImageData(2,0,1,1).data;return 255===s[0]&&0===s[1]&&0===s[2]},getNextPowerOfTwo:function(t){if(t>0&&0===(t&t-1))return t;for(var e=1;t>e;)e<<=1;return e},isPowerOfTwo:function(t,e){return t>0&&0===(t&t-1)&&e>0&&0===(e&e-1)},getResolutionOfUrl:function(t){var e=i.RETINA_PREFIX.exec(t);return e?parseFloat(e[1]):1},sayHello:function(t){if(!n._saidHello){if(navigator.userAgent.toLowerCase().indexOf("chrome")>-1){var e=["\n %c %c %c Pixi.js "+i.VERSION+" - ✰ "+t+" ✰ %c %c http://www.pixijs.com/ %c %c ♥%c♥%c♥ \n\n","background: #ff66a5; padding:5px 0;","background: #ff66a5; padding:5px 0;","color: #ff66a5; background: #030307; padding:5px 0;","background: #ff66a5; padding:5px 0;","background: #ffc3dc; padding:5px 0;","background: #ff66a5; padding:5px 0;","color: #ff2424; background: #fff; padding:5px 0;","color: #ff2424; background: #fff; padding:5px 0;","color: #ff2424; background: #fff; padding:5px 0;"];window.console.log.apply(console,e)}else window.console&&window.console.log("Pixi.js "+i.VERSION+" - "+t+" - http://www.pixijs.com/");n._saidHello=!0}},isWebGLSupported:function(){var t={stencil:!0};try{if(!window.WebGLRenderingContext)return!1;var e=document.createElement("canvas"),r=e.getContext("webgl",t)||e.getContext("experimental-webgl",t);return!(!r||!r.getContextAttributes().stencil)}catch(i){return!1}},sign:function(t){return t?0>t?-1:1:0},removeItems:function(t,e,r){var i=t.length;if(!(e>=i||0===r)){r=e+r>i?i-e:r;for(var n=e,o=i-r;o>n;++n)t[n]=t[n+r];t.length=o}},TextureCache:{},BaseTextureCache:{}}},{"../const":38,"./pluginTarget":106,async:16,eventemitter3:25}],106:[function(t,e,r){function i(t){t.__plugins={},t.registerPlugin=function(e,r){t.__plugins[e]=r},t.prototype.initPlugins=function(){this.plugins=this.plugins||{};for(var e in t.__plugins)this.plugins[e]=new t.__plugins[e](this)},t.prototype.destroyPlugins=function(){for(var t in this.plugins)this.plugins[t].destroy(),this.plugins[t]=null;this.plugins=null}}e.exports={mixin:function(t){i(t)}}},{}],107:[function(t,e,r){var i=t("./core"),n=t("./mesh"),o=t("./extras"),s=t("./filters");i.SpriteBatch=function(){throw new ReferenceError("SpriteBatch does not exist any more, please use the new ParticleContainer instead.")},i.AssetLoader=function(){throw new ReferenceError("The loader system was overhauled in pixi v3, please see the new PIXI.loaders.Loader class.")},Object.defineProperties(i,{Stage:{get:function(){return console.warn("You do not need to use a PIXI Stage any more, you can simply render any container."),i.Container}},DisplayObjectContainer:{get:function(){return console.warn("DisplayObjectContainer has been shortened to Container, please use Container from now on."),i.Container}},Strip:{get:function(){return console.warn("The Strip class has been renamed to Mesh and moved to mesh.Mesh, please use mesh.Mesh from now on."),n.Mesh}},Rope:{get:function(){return console.warn("The Rope class has been moved to mesh.Rope, please use mesh.Rope from now on."),n.Rope}},MovieClip:{get:function(){return console.warn("The MovieClip class has been moved to extras.MovieClip, please use extras.MovieClip from now on."),o.MovieClip}},TilingSprite:{get:function(){return console.warn("The TilingSprite class has been moved to extras.TilingSprite, please use extras.TilingSprite from now on."),o.TilingSprite}},BitmapText:{get:function(){return console.warn("The BitmapText class has been moved to extras.BitmapText, please use extras.BitmapText from now on."),o.BitmapText}},blendModes:{get:function(){return console.warn("The blendModes has been moved to BLEND_MODES, please use BLEND_MODES from now on."),i.BLEND_MODES}},scaleModes:{get:function(){return console.warn("The scaleModes has been moved to SCALE_MODES, please use SCALE_MODES from now on."),i.SCALE_MODES}},BaseTextureCache:{get:function(){return console.warn("The BaseTextureCache class has been moved to utils.BaseTextureCache, please use utils.BaseTextureCache from now on."),i.utils.BaseTextureCache}},TextureCache:{get:function(){return console.warn("The TextureCache class has been moved to utils.TextureCache, please use utils.TextureCache from now on."),i.utils.TextureCache}},math:{get:function(){return console.warn("The math namespace is deprecated, please access members already accessible on PIXI."),i}}}),i.Sprite.prototype.setTexture=function(t){this.texture=t,console.warn("setTexture is now deprecated, please use the texture property, e.g : sprite.texture = texture;")},o.BitmapText.prototype.setText=function(t){this.text=t,console.warn("setText is now deprecated, please use the text property, e.g : myBitmapText.text = 'my text';")},i.Text.prototype.setText=function(t){this.text=t,console.warn("setText is now deprecated, please use the text property, e.g : myText.text = 'my text';")},i.Text.prototype.setStyle=function(t){this.style=t,console.warn("setStyle is now deprecated, please use the style property, e.g : myText.style = style;")},i.Texture.prototype.setFrame=function(t){this.frame=t,console.warn("setFrame is now deprecated, please use the frame property, e.g : myTexture.frame = frame;")},Object.defineProperties(s,{AbstractFilter:{get:function(){return console.warn("filters.AbstractFilter is an undocumented alias, please use AbstractFilter from now on."),i.AbstractFilter}},FXAAFilter:{get:function(){return console.warn("filters.FXAAFilter is an undocumented alias, please use FXAAFilter from now on."),i.FXAAFilter}},SpriteMaskFilter:{get:function(){return console.warn("filters.SpriteMaskFilter is an undocumented alias, please use SpriteMaskFilter from now on."),i.SpriteMaskFilter}}}),i.utils.uuid=function(){return console.warn("utils.uuid() is deprecated, please use utils.uid() from now on."),i.utils.uid()}},{"./core":52,"./extras":114,"./filters":131,"./mesh":156}],108:[function(t,e,r){function i(t,e){n.Container.call(this),e=e||{},this.textWidth=0,this.textHeight=0,this._glyphs=[],this._font={tint:void 0!==e.tint?e.tint:16777215,align:e.align||"left",name:null,size:0},this.font=e.font,this._text=t,this.maxWidth=0,this.maxLineHeight=0,this.dirty=!1,this.updateText()}var n=t("../core");i.prototype=Object.create(n.Container.prototype),i.prototype.constructor=i,e.exports=i,Object.defineProperties(i.prototype,{tint:{get:function(){return this._font.tint},set:function(t){this._font.tint="number"==typeof t&&t>=0?t:16777215,this.dirty=!0}},align:{get:function(){return this._font.align},set:function(t){this._font.align=t||"left",this.dirty=!0}},font:{get:function(){return this._font},set:function(t){t&&("string"==typeof t?(t=t.split(" "),this._font.name=1===t.length?t[0]:t.slice(1).join(" "),this._font.size=t.length>=2?parseInt(t[0],10):i.fonts[this._font.name].size):(this._font.name=t.name,this._font.size="number"==typeof t.size?t.size:parseInt(t.size,10)),this.dirty=!0)}},text:{get:function(){return this._text},set:function(t){t=t.toString()||" ",this._text!==t&&(this._text=t,this.dirty=!0)}}}),i.prototype.updateText=function(){for(var t=i.fonts[this._font.name],e=new n.Point,r=null,o=[],s=0,a=0,h=[],u=0,l=this._font.size/t.size,c=-1,p=0,d=0;d0&&e.x*l>this.maxWidth)n.utils.removeItems(o,c,d-c),d=c,c=-1,h.push(s),a=Math.max(a,s),u++,e.x=0,e.y+=t.lineHeight,r=null;else{var v=t.chars[f];v&&(r&&v.kerning[r]&&(e.x+=v.kerning[r]),o.push({texture:v.texture,line:u,charCode:f,position:new n.Point(e.x+v.xOffset,e.y+v.yOffset)}),s=e.x+(v.texture.width+v.xOffset),e.x+=v.xAdvance,p=Math.max(p,v.yOffset+v.texture.height),r=f)}}h.push(s),a=Math.max(a,s);var g=[];for(d=0;u>=d;d++){var m=0;"right"===this._font.align?m=a-h[d]:"center"===this._font.align&&(m=(a-h[d])/2),g.push(m)}var y=o.length,x=this.tint;for(d=0;y>d;d++){var b=this._glyphs[d];b?b.texture=o[d].texture:(b=new n.Sprite(o[d].texture),this._glyphs.push(b)),b.position.x=(o[d].position.x+g[o[d].line])*l,b.position.y=o[d].position.y*l, +b.scale.x=b.scale.y=l,b.tint=x,b.parent||this.addChild(b)}for(d=y;dt&&(t+=this._textures.length),t}}}),i.prototype.stop=function(){this.playing&&(this.playing=!1,n.ticker.shared.remove(this.update,this))},i.prototype.play=function(){this.playing||(this.playing=!0,n.ticker.shared.add(this.update,this))},i.prototype.gotoAndStop=function(t){this.stop(),this._currentTime=t,this._texture=this._textures[this.currentFrame]},i.prototype.gotoAndPlay=function(t){this._currentTime=t,this.play()},i.prototype.update=function(t){var e=this.animationSpeed*t;if(null!==this._durations){var r=this._currentTime%1*this._durations[this.currentFrame];for(r+=e/60*1e3;0>r;)this._currentTime--,r+=this._durations[this.currentFrame];var i=Math.sign(this.animationSpeed*t);for(this._currentTime=Math.floor(this._currentTime);r>=this._durations[this.currentFrame];)r-=this._durations[this.currentFrame]*i,this._currentTime+=i;this._currentTime+=r/this._durations[this.currentFrame]}else this._currentTime+=e;this._currentTime<0&&!this.loop?(this.gotoAndStop(0),this.onComplete&&this.onComplete()):this._currentTime>=this._textures.length&&!this.loop?(this.gotoAndStop(this._textures.length-1),this.onComplete&&this.onComplete()):this._texture=this._textures[this.currentFrame]},i.prototype.destroy=function(){this.stop(),n.Sprite.prototype.destroy.call(this)},i.fromFrames=function(t){for(var e=[],r=0;rx?x:t,t=t>_?_:t,t=t>E?E:t,r=y,r=r>b?b:r,r=r>T?T:r,r=r>S?S:r,e=m,e=x>e?x:e,e=_>e?_:e,e=E>e?E:e,i=y,i=b>i?b:i,i=T>i?T:i,i=S>i?S:i;var w=this._bounds;return w.x=t,w.width=e-t,w.y=r,w.height=i-r,this._currentBounds=w,w},i.prototype.containsPoint=function(t){this.worldTransform.applyInverse(t,o);var e,r=this._width,i=this._height,n=-r*this.anchor.x;return o.x>n&&o.xe&&o.y 0.2) n = 65600.0; // :\n if (gray > 0.3) n = 332772.0; // *\n if (gray > 0.4) n = 15255086.0; // o\n if (gray > 0.5) n = 23385164.0; // &\n if (gray > 0.6) n = 15252014.0; // 8\n if (gray > 0.7) n = 13199452.0; // @\n if (gray > 0.8) n = 11512810.0; // #\n\n vec2 p = mod( uv / ( pixelSize * 0.5 ), 2.0) - vec2(1.0);\n col = col * character(n, p);\n\n gl_FragColor = vec4(col, 1.0);\n}\n",{dimensions:{type:"4fv",value:new Float32Array([0,0,0,0])},pixelSize:{type:"1f",value:8}})}var n=t("../../core");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i,Object.defineProperties(i.prototype,{size:{get:function(){return this.uniforms.pixelSize.value},set:function(t){this.uniforms.pixelSize.value=t}}})},{"../../core":52}],116:[function(t,e,r){function i(){n.AbstractFilter.call(this),this.blurXFilter=new o,this.blurYFilter=new s,this.defaultFilter=new n.AbstractFilter}var n=t("../../core"),o=t("../blur/BlurXFilter"),s=t("../blur/BlurYFilter");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.applyFilter=function(t,e,r){var i=t.filterManager.getRenderTarget(!0);this.defaultFilter.applyFilter(t,e,r),this.blurXFilter.applyFilter(t,e,i),t.blendModeManager.setBlendMode(n.BLEND_MODES.SCREEN),this.blurYFilter.applyFilter(t,i,r),t.blendModeManager.setBlendMode(n.BLEND_MODES.NORMAL),t.filterManager.returnRenderTarget(i)},Object.defineProperties(i.prototype,{blur:{get:function(){return this.blurXFilter.blur},set:function(t){this.blurXFilter.blur=this.blurYFilter.blur=t}},blurX:{get:function(){return this.blurXFilter.blur},set:function(t){this.blurXFilter.blur=t}},blurY:{get:function(){return this.blurYFilter.blur},set:function(t){this.blurYFilter.blur=t}}})},{"../../core":52,"../blur/BlurXFilter":119,"../blur/BlurYFilter":120}],117:[function(t,e,r){function i(t,e){n.AbstractFilter.call(this,"attribute vec2 aVertexPosition;\nattribute vec2 aTextureCoord;\nattribute vec4 aColor;\n\nuniform float strength;\nuniform float dirX;\nuniform float dirY;\nuniform mat3 projectionMatrix;\n\nvarying vec2 vTextureCoord;\nvarying vec4 vColor;\nvarying vec2 vBlurTexCoords[3];\n\nvoid main(void)\n{\n gl_Position = vec4((projectionMatrix * vec3((aVertexPosition), 1.0)).xy, 0.0, 1.0);\n vTextureCoord = aTextureCoord;\n\n vBlurTexCoords[0] = aTextureCoord + vec2( (0.004 * strength) * dirX, (0.004 * strength) * dirY );\n vBlurTexCoords[1] = aTextureCoord + vec2( (0.008 * strength) * dirX, (0.008 * strength) * dirY );\n vBlurTexCoords[2] = aTextureCoord + vec2( (0.012 * strength) * dirX, (0.012 * strength) * dirY );\n\n vColor = vec4(aColor.rgb * aColor.a, aColor.a);\n}\n","precision lowp float;\n\nvarying vec2 vTextureCoord;\nvarying vec2 vBlurTexCoords[3];\nvarying vec4 vColor;\n\nuniform sampler2D uSampler;\n\nvoid main(void)\n{\n gl_FragColor = vec4(0.0);\n\n gl_FragColor += texture2D(uSampler, vTextureCoord ) * 0.3989422804014327;\n gl_FragColor += texture2D(uSampler, vBlurTexCoords[ 0]) * 0.2419707245191454;\n gl_FragColor += texture2D(uSampler, vBlurTexCoords[ 1]) * 0.05399096651318985;\n gl_FragColor += texture2D(uSampler, vBlurTexCoords[ 2]) * 0.004431848411938341;\n}\n",{strength:{type:"1f",value:1},dirX:{type:"1f",value:t||0},dirY:{type:"1f",value:e||0}}),this.defaultFilter=new n.AbstractFilter,this.passes=1,this.dirX=t||0,this.dirY=e||0,this.strength=4}var n=t("../../core");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.applyFilter=function(t,e,r,i){var n=this.getShader(t);if(this.uniforms.strength.value=this.strength/4/this.passes*(e.frame.width/e.size.width),1===this.passes)t.filterManager.applyFilter(n,e,r,i);else{var o=t.filterManager.getRenderTarget(!0);t.filterManager.applyFilter(n,e,o,i);for(var s=0;s>16&255)/255,s=(r>>8&255)/255,a=(255&r)/255,h=(i>>16&255)/255,u=(i>>8&255)/255,l=(255&i)/255,c=[.3,.59,.11,0,0,o,s,a,t,0,h,u,l,e,0,o-h,s-u,a-l,0,0];this._loadMatrix(c,n)},i.prototype.night=function(t,e){t=t||.1;var r=[-2*t,-t,0,0,0,-t,0,t,0,0,0,t,2*t,0,0,0,0,0,1,0];this._loadMatrix(r,e)},i.prototype.predator=function(t,e){var r=[11.224130630493164*t,-4.794486999511719*t,-2.8746118545532227*t,0*t,.40342438220977783*t,-3.6330697536468506*t,9.193157196044922*t,-2.951810836791992*t,0*t,-1.316135048866272*t,-3.2184197902679443*t,-4.2375030517578125*t,7.476448059082031*t,0*t,.8044459223747253*t,0,0,0,1,0];this._loadMatrix(r,e)},i.prototype.lsd=function(t){var e=[2,-.4,.5,0,0,-.5,2,-.4,0,0,-.4,-.5,3,0,0,0,0,0,1,0];this._loadMatrix(e,t)},i.prototype.reset=function(){var t=[1,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,1,0];this._loadMatrix(t,!1)},Object.defineProperties(i.prototype,{matrix:{get:function(){return this.uniforms.m.value},set:function(t){this.uniforms.m.value=t}}})},{"../../core":52}],123:[function(t,e,r){function i(){n.AbstractFilter.call(this,null,"precision mediump float;\n\nvarying vec2 vTextureCoord;\n\nuniform sampler2D uSampler;\nuniform float step;\n\nvoid main(void)\n{\n vec4 color = texture2D(uSampler, vTextureCoord);\n\n color = floor(color * step) / step;\n\n gl_FragColor = color;\n}\n",{step:{type:"1f",value:5}})}var n=t("../../core");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i,Object.defineProperties(i.prototype,{step:{get:function(){return this.uniforms.step.value},set:function(t){this.uniforms.step.value=t}}})},{"../../core":52}],124:[function(t,e,r){function i(t,e,r){n.AbstractFilter.call(this,null,"precision mediump float;\n\nvarying mediump vec2 vTextureCoord;\n\nuniform sampler2D uSampler;\nuniform vec2 texelSize;\nuniform float matrix[9];\n\nvoid main(void)\n{\n vec4 c11 = texture2D(uSampler, vTextureCoord - texelSize); // top left\n vec4 c12 = texture2D(uSampler, vec2(vTextureCoord.x, vTextureCoord.y - texelSize.y)); // top center\n vec4 c13 = texture2D(uSampler, vec2(vTextureCoord.x + texelSize.x, vTextureCoord.y - texelSize.y)); // top right\n\n vec4 c21 = texture2D(uSampler, vec2(vTextureCoord.x - texelSize.x, vTextureCoord.y)); // mid left\n vec4 c22 = texture2D(uSampler, vTextureCoord); // mid center\n vec4 c23 = texture2D(uSampler, vec2(vTextureCoord.x + texelSize.x, vTextureCoord.y)); // mid right\n\n vec4 c31 = texture2D(uSampler, vec2(vTextureCoord.x - texelSize.x, vTextureCoord.y + texelSize.y)); // bottom left\n vec4 c32 = texture2D(uSampler, vec2(vTextureCoord.x, vTextureCoord.y + texelSize.y)); // bottom center\n vec4 c33 = texture2D(uSampler, vTextureCoord + texelSize); // bottom right\n\n gl_FragColor =\n c11 * matrix[0] + c12 * matrix[1] + c13 * matrix[2] +\n c21 * matrix[3] + c22 * matrix[4] + c23 * matrix[5] +\n c31 * matrix[6] + c32 * matrix[7] + c33 * matrix[8];\n\n gl_FragColor.a = c22.a;\n}\n",{ +matrix:{type:"1fv",value:new Float32Array(t)},texelSize:{type:"v2",value:{x:1/e,y:1/r}}})}var n=t("../../core");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i,Object.defineProperties(i.prototype,{matrix:{get:function(){return this.uniforms.matrix.value},set:function(t){this.uniforms.matrix.value=new Float32Array(t)}},width:{get:function(){return 1/this.uniforms.texelSize.value.x},set:function(t){this.uniforms.texelSize.value.x=1/t}},height:{get:function(){return 1/this.uniforms.texelSize.value.y},set:function(t){this.uniforms.texelSize.value.y=1/t}}})},{"../../core":52}],125:[function(t,e,r){function i(){n.AbstractFilter.call(this,null,"precision mediump float;\n\nvarying vec2 vTextureCoord;\n\nuniform sampler2D uSampler;\n\nvoid main(void)\n{\n float lum = length(texture2D(uSampler, vTextureCoord.xy).rgb);\n\n gl_FragColor = vec4(1.0, 1.0, 1.0, 1.0);\n\n if (lum < 1.00)\n {\n if (mod(gl_FragCoord.x + gl_FragCoord.y, 10.0) == 0.0)\n {\n gl_FragColor = vec4(0.0, 0.0, 0.0, 1.0);\n }\n }\n\n if (lum < 0.75)\n {\n if (mod(gl_FragCoord.x - gl_FragCoord.y, 10.0) == 0.0)\n {\n gl_FragColor = vec4(0.0, 0.0, 0.0, 1.0);\n }\n }\n\n if (lum < 0.50)\n {\n if (mod(gl_FragCoord.x + gl_FragCoord.y - 5.0, 10.0) == 0.0)\n {\n gl_FragColor = vec4(0.0, 0.0, 0.0, 1.0);\n }\n }\n\n if (lum < 0.3)\n {\n if (mod(gl_FragCoord.x - gl_FragCoord.y - 5.0, 10.0) == 0.0)\n {\n gl_FragColor = vec4(0.0, 0.0, 0.0, 1.0);\n }\n }\n}\n")}var n=t("../../core");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i},{"../../core":52}],126:[function(t,e,r){function i(t,e){var r=new n.Matrix;t.renderable=!1,n.AbstractFilter.call(this,"attribute vec2 aVertexPosition;\nattribute vec2 aTextureCoord;\nattribute vec4 aColor;\n\nuniform mat3 projectionMatrix;\nuniform mat3 otherMatrix;\n\nvarying vec2 vMapCoord;\nvarying vec2 vTextureCoord;\nvarying vec4 vColor;\n\nvoid main(void)\n{\n gl_Position = vec4((projectionMatrix * vec3(aVertexPosition, 1.0)).xy, 0.0, 1.0);\n vTextureCoord = aTextureCoord;\n vMapCoord = ( otherMatrix * vec3( aTextureCoord, 1.0) ).xy;\n vColor = vec4(aColor.rgb * aColor.a, aColor.a);\n}\n","precision mediump float;\n\nvarying vec2 vMapCoord;\nvarying vec2 vTextureCoord;\nvarying vec4 vColor;\n\nuniform vec2 scale;\n\nuniform sampler2D uSampler;\nuniform sampler2D mapSampler;\n\nvoid main(void)\n{\n vec4 map = texture2D(mapSampler, vMapCoord);\n\n map -= 0.5;\n map.xy *= scale;\n\n gl_FragColor = texture2D(uSampler, vec2(vTextureCoord.x + map.x, vTextureCoord.y + map.y));\n}\n",{mapSampler:{type:"sampler2D",value:t.texture},otherMatrix:{type:"mat3",value:r.toArray(!0)},scale:{type:"v2",value:{x:1,y:1}}}),this.maskSprite=t,this.maskMatrix=r,(null===e||void 0===e)&&(e=20),this.scale=new n.Point(e,e)}var n=t("../../core");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.applyFilter=function(t,e,r){var i=t.filterManager;i.calculateMappedMatrix(e.frame,this.maskSprite,this.maskMatrix),this.uniforms.otherMatrix.value=this.maskMatrix.toArray(!0),this.uniforms.scale.value.x=this.scale.x*(1/e.frame.width),this.uniforms.scale.value.y=this.scale.y*(1/e.frame.height);var n=this.getShader(t);i.applyFilter(n,e,r)},Object.defineProperties(i.prototype,{map:{get:function(){return this.uniforms.mapSampler.value},set:function(t){this.uniforms.mapSampler.value=t}}})},{"../../core":52}],127:[function(t,e,r){function i(){n.AbstractFilter.call(this,null,"precision mediump float;\n\nvarying vec2 vTextureCoord;\nvarying vec4 vColor;\n\nuniform vec4 dimensions;\nuniform sampler2D uSampler;\n\nuniform float angle;\nuniform float scale;\n\nfloat pattern()\n{\n float s = sin(angle), c = cos(angle);\n vec2 tex = vTextureCoord * dimensions.xy;\n vec2 point = vec2(\n c * tex.x - s * tex.y,\n s * tex.x + c * tex.y\n ) * scale;\n return (sin(point.x) * sin(point.y)) * 4.0;\n}\n\nvoid main()\n{\n vec4 color = texture2D(uSampler, vTextureCoord);\n float average = (color.r + color.g + color.b) / 3.0;\n gl_FragColor = vec4(vec3(average * 10.0 - 5.0 + pattern()), color.a);\n}\n",{scale:{type:"1f",value:1},angle:{type:"1f",value:5},dimensions:{type:"4fv",value:[0,0,0,0]}})}var n=t("../../core");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i,Object.defineProperties(i.prototype,{scale:{get:function(){return this.uniforms.scale.value},set:function(t){this.uniforms.scale.value=t}},angle:{get:function(){return this.uniforms.angle.value},set:function(t){this.uniforms.angle.value=t}}})},{"../../core":52}],128:[function(t,e,r){function i(){n.AbstractFilter.call(this,"attribute vec2 aVertexPosition;\nattribute vec2 aTextureCoord;\nattribute vec4 aColor;\n\nuniform float strength;\nuniform vec2 offset;\n\nuniform mat3 projectionMatrix;\n\nvarying vec2 vTextureCoord;\nvarying vec4 vColor;\nvarying vec2 vBlurTexCoords[6];\n\nvoid main(void)\n{\n gl_Position = vec4((projectionMatrix * vec3((aVertexPosition+offset), 1.0)).xy, 0.0, 1.0);\n vTextureCoord = aTextureCoord;\n\n vBlurTexCoords[ 0] = aTextureCoord + vec2(0.0, -0.012 * strength);\n vBlurTexCoords[ 1] = aTextureCoord + vec2(0.0, -0.008 * strength);\n vBlurTexCoords[ 2] = aTextureCoord + vec2(0.0, -0.004 * strength);\n vBlurTexCoords[ 3] = aTextureCoord + vec2(0.0, 0.004 * strength);\n vBlurTexCoords[ 4] = aTextureCoord + vec2(0.0, 0.008 * strength);\n vBlurTexCoords[ 5] = aTextureCoord + vec2(0.0, 0.012 * strength);\n\n vColor = vec4(aColor.rgb * aColor.a, aColor.a);\n}\n","precision lowp float;\n\nvarying vec2 vTextureCoord;\nvarying vec2 vBlurTexCoords[6];\nvarying vec4 vColor;\n\nuniform vec3 color;\nuniform float alpha;\n\nuniform sampler2D uSampler;\n\nvoid main(void)\n{\n vec4 sum = vec4(0.0);\n\n sum += texture2D(uSampler, vBlurTexCoords[ 0])*0.004431848411938341;\n sum += texture2D(uSampler, vBlurTexCoords[ 1])*0.05399096651318985;\n sum += texture2D(uSampler, vBlurTexCoords[ 2])*0.2419707245191454;\n sum += texture2D(uSampler, vTextureCoord )*0.3989422804014327;\n sum += texture2D(uSampler, vBlurTexCoords[ 3])*0.2419707245191454;\n sum += texture2D(uSampler, vBlurTexCoords[ 4])*0.05399096651318985;\n sum += texture2D(uSampler, vBlurTexCoords[ 5])*0.004431848411938341;\n\n gl_FragColor = vec4( color.rgb * sum.a * alpha, sum.a * alpha );\n}\n",{blur:{type:"1f",value:1/512},color:{type:"c",value:[0,0,0]},alpha:{type:"1f",value:.7},offset:{type:"2f",value:[5,5]},strength:{type:"1f",value:1}}),this.passes=1,this.strength=4}var n=t("../../core");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.applyFilter=function(t,e,r,i){var n=this.getShader(t);if(this.uniforms.strength.value=this.strength/4/this.passes*(e.frame.height/e.size.height),1===this.passes)t.filterManager.applyFilter(n,e,r,i);else{for(var o=t.filterManager.getRenderTarget(!0),s=e,a=o,h=0;h= (time - params.z)) )\n {\n float diff = (dist - time);\n float powDiff = 1.0 - pow(abs(diff*params.x), params.y);\n\n float diffTime = diff * powDiff;\n vec2 diffUV = normalize(uv - center);\n texCoord = uv + (diffUV * diffTime);\n }\n\n gl_FragColor = texture2D(uSampler, texCoord);\n}\n",{center:{type:"v2",value:{x:.5,y:.5}},params:{type:"v3",value:{x:10,y:.8,z:.1}},time:{type:"1f",value:0}})}var n=t("../../core");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i,Object.defineProperties(i.prototype,{center:{get:function(){return this.uniforms.center.value},set:function(t){this.uniforms.center.value=t}},params:{get:function(){return this.uniforms.params.value},set:function(t){this.uniforms.params.value=t}},time:{get:function(){return this.uniforms.time.value},set:function(t){this.uniforms.time.value=t}}})},{"../../core":52}],138:[function(t,e,r){function i(){n.AbstractFilter.call(this,null,"precision mediump float;\n\nvarying vec2 vTextureCoord;\n\nuniform sampler2D uSampler;\nuniform float blur;\nuniform float gradientBlur;\nuniform vec2 start;\nuniform vec2 end;\nuniform vec2 delta;\nuniform vec2 texSize;\n\nfloat random(vec3 scale, float seed)\n{\n return fract(sin(dot(gl_FragCoord.xyz + seed, scale)) * 43758.5453 + seed);\n}\n\nvoid main(void)\n{\n vec4 color = vec4(0.0);\n float total = 0.0;\n\n float offset = random(vec3(12.9898, 78.233, 151.7182), 0.0);\n vec2 normal = normalize(vec2(start.y - end.y, end.x - start.x));\n float radius = smoothstep(0.0, 1.0, abs(dot(vTextureCoord * texSize - start, normal)) / gradientBlur) * blur;\n\n for (float t = -30.0; t <= 30.0; t++)\n {\n float percent = (t + offset - 0.5) / 30.0;\n float weight = 1.0 - abs(percent);\n vec4 sample = texture2D(uSampler, vTextureCoord + delta / texSize * percent * radius);\n sample.rgb *= sample.a;\n color += sample * weight;\n total += weight;\n }\n\n gl_FragColor = color / total;\n gl_FragColor.rgb /= gl_FragColor.a + 0.00001;\n}\n",{blur:{type:"1f",value:100},gradientBlur:{type:"1f",value:600},start:{type:"v2",value:{x:0,y:window.innerHeight/2}},end:{type:"v2",value:{x:600,y:window.innerHeight/2}},delta:{type:"v2",value:{x:30,y:30}},texSize:{type:"v2",value:{x:window.innerWidth,y:window.innerHeight}}}),this.updateDelta()}var n=t("../../core");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.updateDelta=function(){this.uniforms.delta.value.x=0,this.uniforms.delta.value.y=0},Object.defineProperties(i.prototype,{blur:{get:function(){return this.uniforms.blur.value},set:function(t){this.uniforms.blur.value=t}},gradientBlur:{get:function(){return this.uniforms.gradientBlur.value},set:function(t){this.uniforms.gradientBlur.value=t}},start:{get:function(){return this.uniforms.start.value},set:function(t){this.uniforms.start.value=t,this.updateDelta()}},end:{get:function(){return this.uniforms.end.value},set:function(t){this.uniforms.end.value=t,this.updateDelta()}}})},{"../../core":52}],139:[function(t,e,r){function i(){n.AbstractFilter.call(this),this.tiltShiftXFilter=new o,this.tiltShiftYFilter=new s}var n=t("../../core"),o=t("./TiltShiftXFilter"),s=t("./TiltShiftYFilter");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.applyFilter=function(t,e,r){var i=t.filterManager.getRenderTarget(!0);this.tiltShiftXFilter.applyFilter(t,e,i),this.tiltShiftYFilter.applyFilter(t,i,r),t.filterManager.returnRenderTarget(i)},Object.defineProperties(i.prototype,{blur:{get:function(){return this.tiltShiftXFilter.blur},set:function(t){this.tiltShiftXFilter.blur=this.tiltShiftYFilter.blur=t}},gradientBlur:{get:function(){return this.tiltShiftXFilter.gradientBlur},set:function(t){this.tiltShiftXFilter.gradientBlur=this.tiltShiftYFilter.gradientBlur=t}},start:{get:function(){return this.tiltShiftXFilter.start},set:function(t){this.tiltShiftXFilter.start=this.tiltShiftYFilter.start=t}},end:{get:function(){return this.tiltShiftXFilter.end},set:function(t){this.tiltShiftXFilter.end=this.tiltShiftYFilter.end=t}}})},{"../../core":52,"./TiltShiftXFilter":140,"./TiltShiftYFilter":141}],140:[function(t,e,r){function i(){n.call(this)}var n=t("./TiltShiftAxisFilter");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.updateDelta=function(){var t=this.uniforms.end.value.x-this.uniforms.start.value.x,e=this.uniforms.end.value.y-this.uniforms.start.value.y,r=Math.sqrt(t*t+e*e);this.uniforms.delta.value.x=t/r,this.uniforms.delta.value.y=e/r}},{"./TiltShiftAxisFilter":138}],141:[function(t,e,r){function i(){n.call(this)}var n=t("./TiltShiftAxisFilter");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.updateDelta=function(){var t=this.uniforms.end.value.x-this.uniforms.start.value.x,e=this.uniforms.end.value.y-this.uniforms.start.value.y,r=Math.sqrt(t*t+e*e);this.uniforms.delta.value.x=-e/r,this.uniforms.delta.value.y=t/r}},{"./TiltShiftAxisFilter":138}],142:[function(t,e,r){function i(){n.AbstractFilter.call(this,null,"precision mediump float;\n\nvarying vec2 vTextureCoord;\n\nuniform sampler2D uSampler;\nuniform float radius;\nuniform float angle;\nuniform vec2 offset;\n\nvoid main(void)\n{\n vec2 coord = vTextureCoord - offset;\n float dist = length(coord);\n\n if (dist < radius)\n {\n float ratio = (radius - dist) / radius;\n float angleMod = ratio * ratio * angle;\n float s = sin(angleMod);\n float c = cos(angleMod);\n coord = vec2(coord.x * c - coord.y * s, coord.x * s + coord.y * c);\n }\n\n gl_FragColor = texture2D(uSampler, coord+offset);\n}\n",{radius:{type:"1f",value:.5},angle:{type:"1f",value:5},offset:{type:"v2",value:{x:.5,y:.5}}})}var n=t("../../core");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i,Object.defineProperties(i.prototype,{offset:{get:function(){return this.uniforms.offset.value},set:function(t){this.uniforms.offset.value=t}},radius:{get:function(){return this.uniforms.radius.value},set:function(t){this.uniforms.radius.value=t}},angle:{get:function(){return this.uniforms.angle.value},set:function(t){this.uniforms.angle.value=t}}})},{"../../core":52}],143:[function(t,e,r){(function(r){t("./polyfill");var i=e.exports=t("./core");i.extras=t("./extras"),i.filters=t("./filters"),i.interaction=t("./interaction"),i.loaders=t("./loaders"),i.mesh=t("./mesh"),i.accessibility=t("./accessibility"),i.loader=new i.loaders.Loader,Object.assign(i,t("./deprecation")),r.PIXI=i}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{"./accessibility":37,"./core":52,"./deprecation":107,"./extras":114,"./filters":131,"./interaction":146,"./loaders":149,"./mesh":156,"./polyfill":161}],144:[function(t,e,r){function i(){this.global=new n.Point,this.target=null,this.originalEvent=null}var n=t("../core");i.prototype.constructor=i,e.exports=i,i.prototype.getLocalPosition=function(t,e,r){return t.worldTransform.applyInverse(r||this.global,e)}},{"../core":52}],145:[function(t,e,r){function i(t,e){e=e||{},this.renderer=t,this.autoPreventDefault=void 0!==e.autoPreventDefault?e.autoPreventDefault:!0,this.interactionFrequency=e.interactionFrequency||10,this.mouse=new o,this.eventData={stopped:!1,target:null,type:null,data:this.mouse,stopPropagation:function(){this.stopped=!0}},this.interactiveDataPool=[],this.interactionDOMElement=null,this.eventsAdded=!1,this.onMouseUp=this.onMouseUp.bind(this),this.processMouseUp=this.processMouseUp.bind(this),this.onMouseDown=this.onMouseDown.bind(this),this.processMouseDown=this.processMouseDown.bind(this),this.onMouseMove=this.onMouseMove.bind(this),this.processMouseMove=this.processMouseMove.bind(this),this.onMouseOut=this.onMouseOut.bind(this),this.processMouseOverOut=this.processMouseOverOut.bind(this),this.onTouchStart=this.onTouchStart.bind(this),this.processTouchStart=this.processTouchStart.bind(this),this.onTouchEnd=this.onTouchEnd.bind(this),this.processTouchEnd=this.processTouchEnd.bind(this),this.onTouchMove=this.onTouchMove.bind(this),this.processTouchMove=this.processTouchMove.bind(this),this.last=0,this.currentCursorStyle="inherit",this._tempPoint=new n.Point,this.resolution=1,this.setTargetElement(this.renderer.view,this.renderer.resolution)}var n=t("../core"),o=t("./InteractionData");Object.assign(n.DisplayObject.prototype,t("./interactiveTarget")),i.prototype.constructor=i,e.exports=i,i.prototype.setTargetElement=function(t,e){this.removeEvents(),this.interactionDOMElement=t,this.resolution=e||1,this.addEvents()},i.prototype.addEvents=function(){this.interactionDOMElement&&(n.ticker.shared.add(this.update,this),window.navigator.msPointerEnabled&&(this.interactionDOMElement.style["-ms-content-zooming"]="none",this.interactionDOMElement.style["-ms-touch-action"]="none"),window.document.addEventListener("mousemove",this.onMouseMove,!0),this.interactionDOMElement.addEventListener("mousedown",this.onMouseDown,!0),this.interactionDOMElement.addEventListener("mouseout",this.onMouseOut,!0),this.interactionDOMElement.addEventListener("touchstart",this.onTouchStart,!0),this.interactionDOMElement.addEventListener("touchend",this.onTouchEnd,!0),this.interactionDOMElement.addEventListener("touchmove",this.onTouchMove,!0),window.addEventListener("mouseup",this.onMouseUp,!0),this.eventsAdded=!0)},i.prototype.removeEvents=function(){this.interactionDOMElement&&(n.ticker.shared.remove(this.update),window.navigator.msPointerEnabled&&(this.interactionDOMElement.style["-ms-content-zooming"]="",this.interactionDOMElement.style["-ms-touch-action"]=""),window.document.removeEventListener("mousemove",this.onMouseMove,!0),this.interactionDOMElement.removeEventListener("mousedown",this.onMouseDown,!0),this.interactionDOMElement.removeEventListener("mouseout",this.onMouseOut,!0),this.interactionDOMElement.removeEventListener("touchstart",this.onTouchStart,!0),this.interactionDOMElement.removeEventListener("touchend",this.onTouchEnd,!0),this.interactionDOMElement.removeEventListener("touchmove",this.onTouchMove,!0),this.interactionDOMElement=null,window.removeEventListener("mouseup",this.onMouseUp,!0),this.eventsAdded=!1)},i.prototype.update=function(t){if(this._deltaTime+=t,!(this._deltaTime=0;h--)this.processInteractive(t,a[h],r,i,s)&&(o=!0,s=!1,a[h].interactive&&(i=!1));return n&&(i&&!o&&(e.hitArea?(e.worldTransform.applyInverse(t,this._tempPoint),o=e.hitArea.contains(this._tempPoint.x,this._tempPoint.y)):e.containsPoint&&(o=e.containsPoint(t))),e.interactive&&r(e,o)),o},i.prototype.onMouseDown=function(t){this.mouse.originalEvent=t,this.eventData.data=this.mouse,this.eventData.stopped=!1,this.mapPositionToPoint(this.mouse.global,t.clientX,t.clientY),this.autoPreventDefault&&this.mouse.originalEvent.preventDefault(),this.processInteractive(this.mouse.global,this.renderer._lastObjectRendered,this.processMouseDown,!0)},i.prototype.processMouseDown=function(t,e){var r=this.mouse.originalEvent,i=2===r.button||3===r.which;e&&(t[i?"_isRightDown":"_isLeftDown"]=!0,this.dispatchEvent(t,i?"rightdown":"mousedown",this.eventData))},i.prototype.onMouseUp=function(t){this.mouse.originalEvent=t,this.eventData.data=this.mouse,this.eventData.stopped=!1,this.mapPositionToPoint(this.mouse.global,t.clientX,t.clientY),this.processInteractive(this.mouse.global,this.renderer._lastObjectRendered,this.processMouseUp,!0)},i.prototype.processMouseUp=function(t,e){var r=this.mouse.originalEvent,i=2===r.button||3===r.which,n=i?"_isRightDown":"_isLeftDown";e?(this.dispatchEvent(t,i?"rightup":"mouseup",this.eventData),t[n]&&(t[n]=!1,this.dispatchEvent(t,i?"rightclick":"click",this.eventData))):t[n]&&(t[n]=!1,this.dispatchEvent(t,i?"rightupoutside":"mouseupoutside",this.eventData))},i.prototype.onMouseMove=function(t){this.mouse.originalEvent=t,this.eventData.data=this.mouse,this.eventData.stopped=!1,this.mapPositionToPoint(this.mouse.global,t.clientX,t.clientY),this.didMove=!0,this.cursor="inherit",this.processInteractive(this.mouse.global,this.renderer._lastObjectRendered,this.processMouseMove,!0),this.currentCursorStyle!==this.cursor&&(this.currentCursorStyle=this.cursor,this.interactionDOMElement.style.cursor=this.cursor)},i.prototype.processMouseMove=function(t,e){this.dispatchEvent(t,"mousemove",this.eventData),this.processMouseOverOut(t,e)},i.prototype.onMouseOut=function(t){this.mouse.originalEvent=t,this.eventData.stopped=!1,this.mapPositionToPoint(this.mouse.global,t.clientX,t.clientY),this.interactionDOMElement.style.cursor="inherit",this.mapPositionToPoint(this.mouse.global,t.clientX,t.clientY),this.processInteractive(this.mouse.global,this.renderer._lastObjectRendered,this.processMouseOverOut,!1)},i.prototype.processMouseOverOut=function(t,e){e?(t._over||(t._over=!0,this.dispatchEvent(t,"mouseover",this.eventData)),t.buttonMode&&(this.cursor=t.defaultCursor)):t._over&&(t._over=!1,this.dispatchEvent(t,"mouseout",this.eventData))},i.prototype.onTouchStart=function(t){this.autoPreventDefault&&t.preventDefault();for(var e=t.changedTouches,r=e.length,i=0;r>i;i++){var n=e[i],o=this.getTouchData(n);o.originalEvent=t,this.eventData.data=o,this.eventData.stopped=!1,this.processInteractive(o.global,this.renderer._lastObjectRendered,this.processTouchStart,!0),this.returnTouchData(o)}},i.prototype.processTouchStart=function(t,e){e&&(t._touchDown=!0,this.dispatchEvent(t,"touchstart",this.eventData))},i.prototype.onTouchEnd=function(t){this.autoPreventDefault&&t.preventDefault();for(var e=t.changedTouches,r=e.length,i=0;r>i;i++){var n=e[i],o=this.getTouchData(n);o.originalEvent=t,this.eventData.data=o,this.eventData.stopped=!1,this.processInteractive(o.global,this.renderer._lastObjectRendered,this.processTouchEnd,!0),this.returnTouchData(o)}},i.prototype.processTouchEnd=function(t,e){e?(this.dispatchEvent(t,"touchend",this.eventData),t._touchDown&&(t._touchDown=!1,this.dispatchEvent(t,"tap",this.eventData))):t._touchDown&&(t._touchDown=!1,this.dispatchEvent(t,"touchendoutside",this.eventData))},i.prototype.onTouchMove=function(t){this.autoPreventDefault&&t.preventDefault();for(var e=t.changedTouches,r=e.length,i=0;r>i;i++){var n=e[i],o=this.getTouchData(n);o.originalEvent=t, +this.eventData.data=o,this.eventData.stopped=!1,this.processInteractive(o.global,this.renderer._lastObjectRendered,this.processTouchMove,!0),this.returnTouchData(o)}},i.prototype.processTouchMove=function(t,e){e=e,this.dispatchEvent(t,"touchmove",this.eventData)},i.prototype.getTouchData=function(t){var e=this.interactiveDataPool.pop();return e||(e=new o),e.identifier=t.identifier,this.mapPositionToPoint(e.global,t.clientX,t.clientY),navigator.isCocoonJS&&(e.global.x=e.global.x/this.resolution,e.global.y=e.global.y/this.resolution),t.globalX=e.global.x,t.globalY=e.global.y,e},i.prototype.returnTouchData=function(t){this.interactiveDataPool.push(t)},i.prototype.destroy=function(){this.removeEvents(),this.renderer=null,this.mouse=null,this.eventData=null,this.interactiveDataPool=null,this.interactionDOMElement=null,this.onMouseUp=null,this.processMouseUp=null,this.onMouseDown=null,this.processMouseDown=null,this.onMouseMove=null,this.processMouseMove=null,this.onMouseOut=null,this.processMouseOverOut=null,this.onTouchStart=null,this.processTouchStart=null,this.onTouchEnd=null,this.processTouchEnd=null,this.onTouchMove=null,this.processTouchMove=null,this._tempPoint=null},n.WebGLRenderer.registerPlugin("interaction",i),n.CanvasRenderer.registerPlugin("interaction",i)},{"../core":52,"./InteractionData":144,"./interactiveTarget":147}],146:[function(t,e,r){e.exports={InteractionData:t("./InteractionData"),InteractionManager:t("./InteractionManager"),interactiveTarget:t("./interactiveTarget")}},{"./InteractionData":144,"./InteractionManager":145,"./interactiveTarget":147}],147:[function(t,e,r){var i={interactive:!1,buttonMode:!1,interactiveChildren:!0,defaultCursor:"pointer",_over:!1,_touchDown:!1};e.exports=i},{}],148:[function(t,e,r){function i(t,e){var r={},i=t.data.getElementsByTagName("info")[0],n=t.data.getElementsByTagName("common")[0];r.font=i.getAttribute("face"),r.size=parseInt(i.getAttribute("size"),10),r.lineHeight=parseInt(n.getAttribute("lineHeight"),10),r.chars={};for(var a=t.data.getElementsByTagName("char"),h=0;hn;n++){var o=2*n;this._renderCanvasDrawTriangle(t,e,r,o,o+2,o+4)}},i.prototype._renderCanvasTriangles=function(t){for(var e=this.vertices,r=this.uvs,i=this.indices,n=i.length,o=0;n>o;o+=3){var s=2*i[o],a=2*i[o+1],h=2*i[o+2];this._renderCanvasDrawTriangle(t,e,r,s,a,h)}},i.prototype._renderCanvasDrawTriangle=function(t,e,r,i,n,o){var s=this._texture.baseTexture.source,a=this._texture.baseTexture.width,h=this._texture.baseTexture.height,u=e[i],l=e[n],c=e[o],p=e[i+1],d=e[n+1],f=e[o+1],v=r[i]*a,g=r[n]*a,m=r[o]*a,y=r[i+1]*h,x=r[n+1]*h,b=r[o+1]*h;if(this.canvasPadding>0){var _=this.canvasPadding/this.worldTransform.a,T=this.canvasPadding/this.worldTransform.d,E=(u+l+c)/3,S=(p+d+f)/3,w=u-E,C=p-S,A=Math.sqrt(w*w+C*C);u=E+w/A*(A+_),p=S+C/A*(A+T),w=l-E,C=d-S,A=Math.sqrt(w*w+C*C),l=E+w/A*(A+_),d=S+C/A*(A+T),w=c-E,C=f-S,A=Math.sqrt(w*w+C*C),c=E+w/A*(A+_),f=S+C/A*(A+T)}t.save(),t.beginPath(),t.moveTo(u,p),t.lineTo(l,d),t.lineTo(c,f),t.closePath(),t.clip();var M=v*x+y*m+g*b-x*m-y*g-v*b,R=u*x+y*c+l*b-x*c-y*l-u*b,O=v*l+u*m+g*c-l*m-u*g-v*c,P=v*x*c+y*l*m+u*g*b-u*x*m-y*g*c-v*l*b,D=p*x+y*f+d*b-x*f-y*d-p*b,F=v*d+p*m+g*f-d*m-p*g-v*f,L=v*x*f+y*d*m+p*g*b-p*x*m-y*g*f-v*d*b;t.transform(R/M,D/M,O/M,F/M,P/M,L/M),t.drawImage(s,0,0),t.restore()},i.prototype.renderMeshFlat=function(t){var e=this.context,r=t.vertices,i=r.length/2;e.beginPath();for(var n=1;i-2>n;n++){var o=2*n,s=r[o],a=r[o+2],h=r[o+4],u=r[o+1],l=r[o+3],c=r[o+5];e.moveTo(s,u),e.lineTo(a,l),e.lineTo(h,c)}e.fillStyle="#FF0000",e.fill(),e.closePath()},i.prototype._onTextureUpdate=function(){this.updateFrame=!0},i.prototype.getBounds=function(t){if(!this._currentBounds){for(var e=t||this.worldTransform,r=e.a,i=e.b,o=e.c,s=e.d,a=e.tx,h=e.ty,u=-(1/0),l=-(1/0),c=1/0,p=1/0,d=this.vertices,f=0,v=d.length;v>f;f+=2){var g=d[f],m=d[f+1],y=r*g+o*m+a,x=s*m+i*g+h;c=c>y?y:c,p=p>x?x:p,u=y>u?y:u,l=x>l?x:l}if(c===-(1/0)||l===1/0)return n.Rectangle.EMPTY;var b=this._bounds;b.x=c,b.width=u-c,b.y=p,b.height=l-p,this._currentBounds=b}return this._currentBounds},i.prototype.containsPoint=function(t){if(!this.getBounds().contains(t.x,t.y))return!1;this.worldTransform.applyInverse(t,o);var e,r,n=this.vertices,a=s.points;if(this.drawMode===i.DRAW_MODES.TRIANGLES){var h=this.indices;for(r=this.indices.length,e=0;r>e;e+=3){var u=2*h[e],l=2*h[e+1],c=2*h[e+2];if(a[0]=n[u],a[1]=n[u+1],a[2]=n[l],a[3]=n[l+1],a[4]=n[c],a[5]=n[c+1],s.contains(o.x,o.y))return!0}}else for(r=n.length,e=0;r>e;e+=6)if(a[0]=n[e],a[1]=n[e+1],a[2]=n[e+2],a[3]=n[e+3],a[4]=n[e+4],a[5]=n[e+5],s.contains(o.x,o.y))return!0;return!1},i.DRAW_MODES={TRIANGLE_MESH:0,TRIANGLES:1}},{"../core":52}],154:[function(t,e,r){function i(t,e,r){n.call(this,t),this._ready=!0,this.segmentsX=e||10,this.segmentsY=r||10,this.drawMode=n.DRAW_MODES.TRIANGLES,this.refresh()}var n=t("./Mesh");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.refresh=function(){var t=this.segmentsX*this.segmentsY,e=[],r=[],i=[],n=[],o=this.texture,s=this.segmentsX-1,a=this.segmentsY-1,h=0,u=o.width/s,l=o.height/a;for(h=0;t>h;h++){var c=h%this.segmentsX,p=h/this.segmentsX|0;e.push(c*u,p*l),i.push(o._uvs.x0+(o._uvs.x1-o._uvs.x0)*(c/(this.segmentsX-1)),o._uvs.y0+(o._uvs.y3-o._uvs.y0)*(p/(this.segmentsY-1)))}var d=s*a;for(h=0;d>h;h++){var f=h%s,v=h/s|0,g=v*this.segmentsX+f,m=v*this.segmentsX+f+1,y=(v+1)*this.segmentsX+f,x=(v+1)*this.segmentsX+f+1;n.push(g,m,y),n.push(m,x,y)}this.vertices=new Float32Array(e),this.uvs=new Float32Array(i),this.colors=new Float32Array(r),this.indices=new Uint16Array(n)},i.prototype._onTextureUpdate=function(){n.prototype._onTextureUpdate.call(this),this._ready&&this.refresh()}},{"./Mesh":153}],155:[function(t,e,r){function i(t,e){n.call(this,t),this.points=e,this.vertices=new Float32Array(4*e.length),this.uvs=new Float32Array(4*e.length),this.colors=new Float32Array(2*e.length),this.indices=new Uint16Array(2*e.length),this._ready=!0,this.refresh()}var n=t("./Mesh"),o=t("../core");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.refresh=function(){var t=this.points;if(!(t.length<1)&&this._texture._uvs){var e=this.uvs,r=this.indices,i=this.colors,n=this._texture._uvs,s=new o.Point(n.x0,n.y0),a=new o.Point(n.x2-n.x0,n.y2-n.y0);e[0]=0+s.x,e[1]=0+s.y,e[2]=0+s.x,e[3]=1*a.y+s.y,i[0]=1,i[1]=1,r[0]=0,r[1]=1;for(var h,u,l,c=t.length,p=1;c>p;p++)h=t[p],u=4*p,l=p/(c-1),e[u]=l*a.x+s.x,e[u+1]=0+s.y,e[u+2]=l*a.x+s.x,e[u+3]=1*a.y+s.y,u=2*p,i[u]=1,i[u+1]=1,u=2*p,r[u]=u,r[u+1]=u+1;this.dirty=!0}},i.prototype._onTextureUpdate=function(){n.prototype._onTextureUpdate.call(this),this._ready&&this.refresh()},i.prototype.updateTransform=function(){var t=this.points;if(!(t.length<1)){for(var e,r,i,n,o,s,a=t[0],h=0,u=0,l=this.vertices,c=t.length,p=0;c>p;p++)r=t[p],i=4*p,e=p1&&(n=1),o=Math.sqrt(h*h+u*u),s=this._texture.height/2,h/=o,u/=o,h*=s,u*=s,l[i]=r.x+h,l[i+1]=r.y+u,l[i+2]=r.x-h,l[i+3]=r.y-u,a=r;this.containerUpdateTransform()}}},{"../core":52,"./Mesh":153}],156:[function(t,e,r){e.exports={Mesh:t("./Mesh"),Plane:t("./Plane"),Rope:t("./Rope"),MeshRenderer:t("./webgl/MeshRenderer"),MeshShader:t("./webgl/MeshShader")}},{"./Mesh":153,"./Plane":154,"./Rope":155,"./webgl/MeshRenderer":157,"./webgl/MeshShader":158}],157:[function(t,e,r){function i(t){n.ObjectRenderer.call(this,t),this.indices=new Uint16Array(15e3);for(var e=0,r=0;15e3>e;e+=6,r+=4)this.indices[e+0]=r+0,this.indices[e+1]=r+1,this.indices[e+2]=r+2,this.indices[e+3]=r+0,this.indices[e+4]=r+2,this.indices[e+5]=r+3;this.currentShader=null}var n=t("../../core"),o=t("../Mesh");i.prototype=Object.create(n.ObjectRenderer.prototype),i.prototype.constructor=i,e.exports=i,n.WebGLRenderer.registerPlugin("mesh",i),i.prototype.onContextChange=function(){},i.prototype.render=function(t){t._vertexBuffer||this._initWebGL(t);var e=this.renderer,r=e.gl,i=t._texture.baseTexture,n=t.shader,s=t.drawMode===o.DRAW_MODES.TRIANGLE_MESH?r.TRIANGLE_STRIP:r.TRIANGLES;e.blendModeManager.setBlendMode(t.blendMode),n=n?n.shaders[r.id]||n.getShader(e):e.shaderManager.plugins.meshShader,this.renderer.shaderManager.setShader(n),n.uniforms.translationMatrix.value=t.worldTransform.toArray(!0),n.uniforms.projectionMatrix.value=e.currentRenderTarget.projectionMatrix.toArray(!0),n.uniforms.alpha.value=t.worldAlpha,n.syncUniforms(),t.dirty?(t.dirty=!1,r.bindBuffer(r.ARRAY_BUFFER,t._vertexBuffer),r.bufferData(r.ARRAY_BUFFER,t.vertices,r.STATIC_DRAW),r.vertexAttribPointer(n.attributes.aVertexPosition,2,r.FLOAT,!1,0,0),r.bindBuffer(r.ARRAY_BUFFER,t._uvBuffer),r.bufferData(r.ARRAY_BUFFER,t.uvs,r.STATIC_DRAW),r.vertexAttribPointer(n.attributes.aTextureCoord,2,r.FLOAT,!1,0,0),r.activeTexture(r.TEXTURE0),i._glTextures[r.id]?r.bindTexture(r.TEXTURE_2D,i._glTextures[r.id]):this.renderer.updateTexture(i),r.bindBuffer(r.ELEMENT_ARRAY_BUFFER,t._indexBuffer),r.bufferData(r.ELEMENT_ARRAY_BUFFER,t.indices,r.STATIC_DRAW)):(r.bindBuffer(r.ARRAY_BUFFER,t._vertexBuffer),r.bufferSubData(r.ARRAY_BUFFER,0,t.vertices),r.vertexAttribPointer(n.attributes.aVertexPosition,2,r.FLOAT,!1,0,0),r.bindBuffer(r.ARRAY_BUFFER,t._uvBuffer),r.vertexAttribPointer(n.attributes.aTextureCoord,2,r.FLOAT,!1,0,0),r.activeTexture(r.TEXTURE0),i._glTextures[r.id]?r.bindTexture(r.TEXTURE_2D,i._glTextures[r.id]):this.renderer.updateTexture(i),r.bindBuffer(r.ELEMENT_ARRAY_BUFFER,t._indexBuffer),r.bufferSubData(r.ELEMENT_ARRAY_BUFFER,0,t.indices)),r.drawElements(s,t.indices.length,r.UNSIGNED_SHORT,0)},i.prototype._initWebGL=function(t){var e=this.renderer.gl;t._vertexBuffer=e.createBuffer(),t._indexBuffer=e.createBuffer(),t._uvBuffer=e.createBuffer(),e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferData(e.ARRAY_BUFFER,t.vertices,e.DYNAMIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferData(e.ARRAY_BUFFER,t.uvs,e.STATIC_DRAW),t.colors&&(t._colorBuffer=e.createBuffer(),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.bufferData(e.ARRAY_BUFFER,t.colors,e.STATIC_DRAW)),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer),e.bufferData(e.ELEMENT_ARRAY_BUFFER,t.indices,e.STATIC_DRAW)},i.prototype.flush=function(){},i.prototype.start=function(){this.currentShader=null},i.prototype.destroy=function(){n.ObjectRenderer.prototype.destroy.call(this)}},{"../../core":52,"../Mesh":153}],158:[function(t,e,r){function i(t){n.Shader.call(this,t,["precision lowp float;","attribute vec2 aVertexPosition;","attribute vec2 aTextureCoord;","uniform mat3 translationMatrix;","uniform mat3 projectionMatrix;","varying vec2 vTextureCoord;","void main(void){"," gl_Position = vec4((projectionMatrix * translationMatrix * vec3(aVertexPosition, 1.0)).xy, 0.0, 1.0);"," vTextureCoord = aTextureCoord;","}"].join("\n"),["precision lowp float;","varying vec2 vTextureCoord;","uniform float alpha;","uniform sampler2D uSampler;","void main(void){"," gl_FragColor = texture2D(uSampler, vTextureCoord) * alpha ;","}"].join("\n"),{alpha:{type:"1f",value:0},translationMatrix:{type:"mat3",value:new Float32Array(9)},projectionMatrix:{type:"mat3",value:new Float32Array(9)}},{aVertexPosition:0,aTextureCoord:0})}var n=t("../../core");i.prototype=Object.create(n.Shader.prototype),i.prototype.constructor=i,e.exports=i,n.ShaderManager.registerPlugin("meshShader",i)},{"../../core":52}],159:[function(t,e,r){Math.sign||(Math.sign=function(t){return t=+t,0===t||isNaN(t)?t:t>0?1:-1})},{}],160:[function(t,e,r){Object.assign||(Object.assign=t("object-assign"))},{"object-assign":26}],161:[function(t,e,r){t("./Object.assign"),t("./requestAnimationFrame"),t("./Math.sign")},{"./Math.sign":159,"./Object.assign":160,"./requestAnimationFrame":162}],162:[function(t,e,r){(function(t){if(Date.now&&Date.prototype.getTime||(Date.now=function(){return(new Date).getTime()}),!t.performance||!t.performance.now){var e=Date.now();t.performance||(t.performance={}),t.performance.now=function(){return Date.now()-e}}for(var r=Date.now(),i=["ms","moz","webkit","o"],n=0;ni&&(i=0),r=e,setTimeout(function(){r=Date.now(),t(performance.now())},i)}),t.cancelAnimationFrame||(t.cancelAnimationFrame=function(t){clearTimeout(t)})}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{}]},{},[143])(143)}); //# sourceMappingURL=pixi.min.js.map diff --git a/bin/pixi.min.js.map b/bin/pixi.min.js.map index 857d92a..419daff 100644 --- a/bin/pixi.min.js.map +++ b/bin/pixi.min.js.map @@ -1 +1 @@ -{"version":3,"sources":["pixi.js"],"names":["f","exports","module","define","amd","g","window","global","self","this","PIXI","e","t","n","r","s","o","u","a","require","i","Error","code","l","call","length",1,"createContext","setVertexAttribArrays","GLBuffer","GLFramebuffer","GLShader","GLTexture","VertexArrayObject","./lib/GLBuffer","./lib/GLFramebuffer","./lib/GLShader","./lib/GLTexture","./lib/VertexArrayObject","./lib/createContext","./lib/setVertexAttribArrays",2,"EMPTY_ARRAY_BUFFER","ArrayBuffer","Buffer","gl","type","data","drawType","buffer","createBuffer","ARRAY_BUFFER","STATIC_DRAW","upload","prototype","offset","dontBind","bind","byteLength","bufferSubData","bufferData","bindBuffer","createVertexBuffer","createIndexBuffer","ELEMENT_ARRAY_BUFFER","create",3,"Texture","Framebuffer","width","height","framebuffer","createFramebuffer","stencil","texture","enableTexture","framebufferTexture2D","FRAMEBUFFER","COLOR_ATTACHMENT0","TEXTURE_2D","enableStencil","createRenderbuffer","bindRenderbuffer","RENDERBUFFER","framebufferRenderbuffer","DEPTH_STENCIL_ATTACHMENT","renderbufferStorage","DEPTH_STENCIL","clear","b","clearColor","COLOR_BUFFER_BIT","bindFramebuffer","unbind","resize","texImage2D","format","destroy","deleteFramebuffer","createRGBA","enableNearestScaling","enableWrapClamp","RGBA","UNSIGNED_BYTE","fbo","createFloat32","fromData","./GLTexture",4,"compileProgram","extractAttributes","extractUniforms","generateUniformAccessObject","Shader","vertexSrc","fragmentSrc","program","attributes","uniformData","uniforms","useProgram","./shader/compileProgram","./shader/extractAttributes","./shader/extractUniforms","./shader/generateUniformAccessObject",5,"createTexture","mipmap","premultiplyAlpha","source","pixelStorei","UNPACK_PREMULTIPLY_ALPHA_WEBGL","FLOATING_POINT_AVAILABLE","uploadData","Float32Array","ext","getExtension","FLOAT","location","undefined","activeTexture","TEXTURE0","bindTexture","minFilter","linear","texParameteri","TEXTURE_MIN_FILTER","LINEAR_MIPMAP_LINEAR","NEAREST_MIPMAP_NEAREST","LINEAR","NEAREST","magFilter","TEXTURE_MAG_FILTER","enableMipmap","generateMipmap","enableLinearScaling","TEXTURE_WRAP_S","CLAMP_TO_EDGE","TEXTURE_WRAP_T","enableWrapRepeat","REPEAT","deleteTexture","fromSource",6,"nativeVaoExtension","nativeVao","createVertexArrayOES","indexBuffer","dirty","constructor","bindVertexArrayOES","activate","attrib","attribute","pointer","normalized","stride","start","enableVertexAttribArray","addAttribute","push","addIndex","options",7,"CONTEXT_UID","canvas","getContext","id",8,"GL_MAP","attribs","maxAttribs","getParameter","MAX_VERTEX_ATTRIBS","tempAttribState","Array","attribState","disableVertexAttribArray",9,"glVertShader","compileShader","VERTEX_SHADER","glFragShader","FRAGMENT_SHADER","createProgram","attachShader","linkProgram","getProgramParameter","LINK_STATUS","console","error","VALIDATE_STATUS","getError","getProgramInfoLog","warn","deleteProgram","deleteShader","src","shader","createShader","shaderSource","getShaderParameter","COMPILE_STATUS","log","getShaderInfoLog",10,"defaultValue","size","Int32Array","booleanArray","array",11,"mapType","mapSize","totalAttributes","ACTIVE_ATTRIBUTES","attribData","getActiveAttrib","name","getAttribLocation","vertexAttribPointer","./mapSize","./mapType",12,"totalUniforms","ACTIVE_UNIFORMS","getActiveUniform","replace","getUniformLocation","value","./defaultValue",13,"uniformKeys","Object","keys","fullName","nameTokens","split","uniformGroup","getUniformGroup","uniform","defineProperty","get","generateGetter","set","generateSetter","template","getterTemplate","Function","setTemplate","setterTemplate","GLSL_TO_SINGLE_SETTERS","GLSL_TO_ARRAY_SETTERS","cur","join","float","vec2","vec3","vec4","int","ivec2","ivec3","ivec4","bool","bvec2","bvec3","bvec4","mat2","mat3","mat4","sampler2D",14,"GLSL_TO_SIZE",15,"GL_TABLE","typeNames","GL_TO_GLSL_TYPES","tn","FLOAT_VEC2","FLOAT_VEC3","FLOAT_VEC4","INT","INT_VEC2","INT_VEC3","INT_VEC4","BOOL","BOOL_VEC2","BOOL_VEC3","BOOL_VEC4","FLOAT_MAT2","FLOAT_MAT3","FLOAT_MAT4","SAMPLER_2D",16,"process","noop","identity","v","toBool","notId","only_once","fn","apply","arguments","_once","_isArrayLike","arr","_isArray","_arrayEach","iterator","index","_map","result","_range","count","_reduce","memo","x","_forEachOf","object","_keys","key","_indexOf","item","_keyIterator","coll","len","_restParam","func","startIndex","Math","max","rest","_withoutIndex","callback","_eachOfLimit","limit","obj","nextKey","done","running","errored","replenish","err","doParallel","async","eachOf","doParallelLimit","doSeries","eachOfSeries","_asyncMap","eachfn","results","_filter","sort","_reject","cb","_createTester","check","getResult","iteratee","_","_findGetResult","_parallel","tasks","task","args","_concat","y","concat","_queue","worker","concurrency","payload","_insert","q","pos","started","idle","setImmediate","drain","unshift","saturated","_next","workers","removed","workersList","splice","empty","paused","kill","pause","resume","resumeCount","min","w","_console_fn","_times","mapper","_applyEach","fns","go","that","pop","ensureAsync","innerArgs","sync","previous_async","root","noConflict","_toString","toString","isArray","_isObject","k","hasOwnProperty","_setImmediate","_delay","setTimeout","nextTick","forEach","each","forEachSeries","eachSeries","forEachLimit","eachLimit","forEachOf","completed","iter","forEachOfSeries","iterate","forEachOfLimit","eachOfLimit","map","mapSeries","mapLimit","inject","foldl","reduce","foldr","reduceRight","reversed","reverse","transform","select","filter","selectLimit","filterLimit","selectSeries","filterSeries","reject","rejectLimit","rejectSeries","any","some","someLimit","all","every","everyLimit","detect","detectSeries","detectLimit","sortBy","comparator","left","right","criteria","auto","addListener","listeners","removeListener","idx","taskComplete","remainingTasks","slice","runningTasks","ready","requires","listener","taskCallback","dep","safeResults","val","rkey","retry","times","parseTimes","acc","parseInt","DEFAULT_TIMES","interval","DEFAULT_INTERVAL","wrappedTask","wrappedCallback","wrappedResults","retryAttempt","finalAttempt","seriesCallback","retryInterval","opts","attempts","series","waterfall","wrapIterator","next","parallel","parallelLimit","makeCallback","callArgs","concatSeries","whilst","test","doWhilst","calls","until","doUntil","during","truth","doDuring","queue","items","priorityQueue","_compareTasks","priority","_binarySearch","sequence","compare","beg","end","mid","cargo","dir","memoize","hasher","queues","memoized","unmemoized","unmemoize","timesSeries","timesLimit","seq","newargs","nextargs","compose","applyEach","applyEachSeries","forever","constant","values","wrapSync","asyncify","then","message","_process",17,"normalizeArray","parts","allowAboveRoot","up","last","xs","res","splitPathRe","splitPath","filename","exec","resolve","resolvedPath","resolvedAbsolute","path","cwd","TypeError","charAt","p","normalize","isAbsolute","trailingSlash","substr","paths","relative","from","to","trim","fromParts","toParts","samePartsLength","outputParts","sep","delimiter","dirname","basename","extname","str",18,"cleanUpNextTick","draining","currentQueue","queueIndex","drainQueue","timeout","run","clearTimeout","Item","fun","title","browser","env","argv","version","versions","on","once","off","removeAllListeners","emit","binding","chdir","umask",19,"RangeError","errors","mapDomain","string","regexSeparators","labels","encoded","ucs2decode","extra","output","counter","charCodeAt","ucs2encode","stringFromCharCode","basicToDigit","codePoint","base","digitToBasic","digit","flag","adapt","delta","numPoints","firstTime","floor","damp","baseMinusTMin","tMax","skew","decode","input","out","basic","j","oldi","baseMinusT","inputLength","initialN","bias","initialBias","lastIndexOf","maxInt","tMin","encode","handledCPCount","basicLength","m","currentValue","handledCPCountPlusOne","qMinusT","toUnicode","regexPunycode","toLowerCase","toASCII","regexNonASCII","freeExports","nodeType","freeModule","freeGlobal","punycode","overflow","not-basic","invalid-input","String","fromCharCode","ucs2",20,"prop","qs","eq","regexp","maxKeys","kstr","vstr","indexOf","decodeURIComponent",21,"stringifyPrimitive","isFinite","objectKeys","ks","encodeURIComponent",22,"parse","stringify","./decode","./encode",23,"Url","protocol","slashes","auth","host","port","hostname","hash","search","query","pathname","href","urlParse","url","parseQueryString","slashesDenoteHost","isObject","urlFormat","isString","urlResolve","urlResolveObject","resolveObject","arg","isNull","isNullOrUndefined","protocolPattern","portPattern","delims","unwise","autoEscape","nonHostChars","hostEndingChars","hostnameMaxLen","hostnamePartPattern","hostnamePartStart","unsafeProtocol","javascript","javascript:","hostlessProtocol","slashedProtocol","http","https","ftp","gopher","file","http:","https:","ftp:","gopher:","file:","querystring","proto","lowerProto","match","hostEnd","hec","atSign","parseHost","ipv6Hostname","hostparts","part","newpart","validParts","notHost","bit","domainArray","newOut","h","ae","esc","escape","qm","rel","relPath","shift","isSourceAbs","isRelAbs","mustEndAbs","removeAllDots","srcPath","psychotic","authInHost","hasTrailingSlash",24,"earcut","holeIndices","dim","hasHoles","outerLen","outerNode","linkedList","triangles","minX","minY","maxX","maxY","eliminateHoles","earcutLinked","clockwise","sum","insertNode","filterPoints","again","steiner","equals","area","prev","removeNode","ear","pass","indexCurve","stop","isEarHashed","isEar","cureLocalIntersections","splitEarcut","c","pointInTriangle","minTX","minTY","maxTX","maxTY","minZ","zOrder","maxZ","nextZ","z","prevZ","intersects","locallyInside","isValidDiagonal","splitPolygon","list","getLeftmost","compareX","eliminateHole","hole","findHoleBridge","hx","hy","qx","Infinity","tan","tanMin","abs","sortLinked","tail","numMerges","pSize","qSize","inSize","leftmost","ax","ay","bx","by","cx","cy","px","py","intersectsPolygon","middleInside","p1","p2","q1","q2","inside","a2","Node","b2","an","bp",25,"EE","context","EventEmitter","prefix","_events","event","exists","evt","available","ee","a1","a3","a4","a5","events","setMaxListeners","prefixed",26,"toObject","propIsEnumerable","propertyIsEnumerable","assign","target","symbols","getOwnPropertySymbols",27,"called","_each","_eachLimit","_mapLimit","_detect","main_callback","theCallback","working","drained","ts","ds",28,"Loader","baseUrl","progress","loading","_progressChunk","_beforeMiddleware","_afterMiddleware","_boundLoadResource","_loadResource","_boundOnLoad","_onLoad","_buffer","_numToLoad","resources","urlParser","Resource","add","enqueue","onComplete","_handleBaseUrl","parsedUrl","before","pre","after","use","reset","load","resource","dequeue","_dequeue","_runMiddleware","_onComplete","LOAD_TYPE","XHR_READY_STATE","XHR_RESPONSE_TYPE","./Resource","eventemitter3",29,"isDataUrl","crossOrigin","loadType","_determineLoadType","xhrType","metadata","xhr","isJson","isXml","isImage","isAudio","isVideo","_boundComplete","complete","_boundOnError","_onError","_boundOnProgress","_onProgress","_boundXhrOnError","_xhrOnError","_boundXhrOnAbort","_xhrOnAbort","_boundXhrOnLoad","_xhrOnLoad","_boundXdrOnTimeout","_xdrOnTimeout","reqType","setExtMap","substring","_url","useXdr","XDomainRequest","XMLHttpRequest","tempAnchor","removeEventListener","onerror","ontimeout","onprogress","onload","_determineCrossOrigin","IMAGE","_loadImage","AUDIO","_loadElement","VIDEO","XHR","_loadXdr","_loadXhr","Image","addEventListener","Audio","document","createElement","navigator","isCocoonJS","appendChild","_createSource","toUpperCase","_determineXhrType","open","JSON","DOCUMENT","responseType","TEXT","send","xdr","mime","nodeName","lengthComputable","loaded","total","status","statusText","responseText","DOMParser","domparser","parseFromString","div","innerHTML","response","responseURL","loc","samePort","_xhrTypeMap","_getExtension","_loadTypeMap","slashIndex","queryStart","_getMimeFromXhrType","BUFFER","BLOB","DEFAULT","UNSENT","OPENED","HEADERS_RECEIVED","LOADING","DONE","gif","png","bmp","jpg","jpeg","tif","tiff","webp","tga","xhtml","html","htm","xml","tmx","tsx","svg","json","text","txt","setExtensionLoadType","setExtensionXhrType",30,"_keyStr","encodeBinary","bytebuffer","encodedCharIndexes","inx","jnx","paddingBytes",31,"middleware","caching","memory","parsing","blob","./Loader","./middlewares/caching/memory","./middlewares/parsing/blob",32,"cache",33,"b64","URL","webkitURL","Blob","createObjectURL","revokeObjectURL","getResponseHeader","../../Resource","../../b64",34,"description","author","contributors","main","homepage","bugs","license","repository","scripts","build","docs","files","dependencies","brfs","object-assign","pixi-gl-core","resource-loader","devDependencies","browserify","chai","del","gulp","gulp-cached","gulp-concat","gulp-debug","gulp-header","gulp-jshint","gulp-mirror","gulp-plumber","gulp-rename","gulp-sourcemaps","gulp-uglify","gulp-util","jaguarjs-jsdoc","jsdoc","jshint-summary","minimist","mocha","require-dir","run-sequence","testem","vinyl-buffer","vinyl-source-stream","watchify",35,"AccessibilityManager","renderer","style","position","top","zIndex","pool","renderId","debug","children","_onKeyDown","_onMouseMove","isActive","core","DisplayObject","update","view","parentNode","deactivate","removeChild","updateAccessibleObjects","displayObject","visible","accessible","interactive","_accessibleActive","addChild","_lastObjectRendered","rect","getBoundingClientRect","sx","sy","child","utils","removeItems","_accessibleDiv","hitArea","wt","worldTransform","tx","ty","d","getBounds","capHitArea","backgroundColor","borderStyle","_onClick","_onFocus","_onFocusOut","accessibleTitle","tabIndex","interactionManager","plugins","interaction","dispatchEvent","eventData","keyCode","WebGLRenderer","registerPlugin","CanvasRenderer","../core","./accessibleTarget",36,"accessibleTarget",37,"./AccessibilityManager",38,"CONST","VERSION","PI_2","PI","RAD_TO_DEG","DEG_TO_RAD","TARGET_FPMS","RENDERER_TYPE","UNKNOWN","WEBGL","CANVAS","BLEND_MODES","NORMAL","ADD","MULTIPLY","SCREEN","OVERLAY","DARKEN","LIGHTEN","COLOR_DODGE","COLOR_BURN","HARD_LIGHT","SOFT_LIGHT","DIFFERENCE","EXCLUSION","HUE","SATURATION","COLOR","LUMINOSITY","DRAW_MODES","POINTS","LINES","LINE_LOOP","LINE_STRIP","TRIANGLES","TRIANGLE_STRIP","TRIANGLE_FAN","SCALE_MODES","RETINA_PREFIX","RESOLUTION","FILTER_RESOLUTION","DEFAULT_RENDER_OPTIONS","resolution","antialias","forceFXAA","autoResize","transparent","clearBeforeRender","preserveDrawingBuffer","roundPixels","SHAPES","POLY","RECT","CIRC","ELIP","RREC","SPRITE_BATCH_SIZE","../../package.json",39,"Container","math","RenderTexture","_tempMatrix","Matrix","defineProperties","scale","getLocalBounds","_width","_height","onChildrenChange","argumentsLength","parent","addChildAt","swapChildren","child2","index1","getChildIndex","index2","setChildIndex","currentIndex","getChildAt","removeChildAt","removeChildren","beginIndex","endIndex","begin","range","generateTexture","scaleMode","bounds","renderTexture","render","updateTransform","displayObjectUpdateTransform","containerUpdateTransform","_currentBounds","Rectangle","EMPTY","childBounds","childMaxX","childMaxY","childVisible","_bounds","containerGetBounds","matrixCache","IDENTITY","renderWebGL","worldAlpha","renderable","_mask","_filters","currentRenderer","flush","filterManager","pushFilter","maskManager","pushMask","_renderWebGL","popMask","popFilter","_renderCanvas","renderCanvas","alpha","destroyChildren","../math","../textures/RenderTexture","../utils","./DisplayObject",40,"Point","pivot","_rotation","localTransform","filterArea","_sr","_cr","_tempDisplayObjectParent","scaleX","scaleY","rotation","sin","cos","worldVisible","mask","filters","pt","lt","matrix","toGlobal","toLocal","point","applyInverse","setParent","container","setTransform","skewX","skewY","pivotX","pivotY","../const",41,"Graphics","fillAlpha","lineWidth","lineColor","graphicsData","tint","_prevTint","blendMode","currentPath","_webGL","isMask","boundsPadding","_localBounds","glDirty","boundsDirty","cachedSpriteDirty","CanvasBuffer","CanvasGraphics","GraphicsData","tempPoint","clone","updateLocalBounds","lineStyle","color","lineAlpha","shape","points","Polygon","closed","drawShape","moveTo","lineTo","quadraticCurveTo","cpX","cpY","toX","toY","xa","ya","fromX","fromY","bezierCurveTo","cpX2","cpY2","dt","dt2","dt3","t2","t3","arcTo","x1","y1","x2","y2","radius","b1","mm","dd","cc","tt","k1","sqrt","k2","j1","j2","qy","startAngle","atan2","endAngle","arc","anticlockwise","sweep","segs","ceil","startX","startY","theta","theta2","cTheta","sTheta","segMinus","remainder","real","angle","beginFill","filling","fillColor","fill","endFill","drawRect","drawRoundedRect","RoundedRectangle","drawCircle","Circle","drawEllipse","Ellipse","drawPolygon","clearDirty","canvasBuffer","fromCanvas","baseTexture","translate","renderGraphics","setObjectRenderer","graphics","compositeOperation","blendModes","globalCompositeOperation","w0","w1","h0","h1","x3","y3","x4","y4","containsPoint","contains","padding","_webgl","../display/Container","../renderers/canvas/utils/CanvasBuffer","../renderers/canvas/utils/CanvasGraphics","../textures/Texture","./GraphicsData",42,"_lineTint","_fillTint",43,"GraphicsRenderer","ObjectRenderer","graphicsDataPool","primitiveShader","complexPrimitiveShader","maximumSimplePolySize","WebGLGraphicsData","onContextChange","webGLData","shaderManager","updateGraphics","webGL","blendModeManager","setBlendMode","mode","stencilManager","pushStencil","uniform1f","_location","drawElements","UNSIGNED_SHORT","indices","popStencil","setShader","uniformMatrix3fv","translationMatrix","toArray","projectionMatrix","currentRenderTarget","uniform3fv","hex2rgb","aVertexPosition","aColor","drawCount","lastIndex","switchMode","canDrawUsingSimple","buildPoly","buildComplexPoly","buildLine","buildRectangle","buildCircle","buildRoundedRectangle","rectData","verts","vertPos","tempPoints","rrectData","recPoints","quadraticBezierCurve","vecPos","getPt","n1","n2","perc","diff","xb","yb","circleData","totalSegs","seg","firstPoint","lastPoint","midPointX","midPointY","p1x","p1y","p2x","p2y","p3x","p3y","perpx","perpy","perp2x","perp2y","perp3x","perp3y","c1","c2","denom","pdist","dist","indexCount","indexStart","../../const","../../math","../../renderers/webgl/WebGLRenderer","../../renderers/webgl/utils/ObjectRenderer","../../utils","./WebGLGraphicsData",44,"glPoints","glIndices","Uint16Array","deleteBuffer",45,"ticker","Sprite","ParticleContainer","SpriteRenderer","ParticleRenderer","Text","BaseTexture","VideoBaseTexture","TextureUvs","WebGLManager","ShaderManager","RenderTarget","AbstractFilter","FXAAFilter","SpriteMaskFilter","glCore","autoDetectRenderer","noWebGL","isWebGLSupported","./const","./display/Container","./display/DisplayObject","./graphics/Graphics","./graphics/GraphicsData","./graphics/webgl/GraphicsRenderer","./math","./particles/ParticleContainer","./particles/webgl/ParticleRenderer","./renderers/canvas/CanvasRenderer","./renderers/canvas/utils/CanvasBuffer","./renderers/canvas/utils/CanvasGraphics","./renderers/webgl/WebGLRenderer","./renderers/webgl/filters/AbstractFilter","./renderers/webgl/filters/FXAAFilter","./renderers/webgl/filters/SpriteMaskFilter","./renderers/webgl/managers/ShaderManager","./renderers/webgl/managers/WebGLManager","./renderers/webgl/shaders/Shader","./renderers/webgl/utils/ObjectRenderer","./renderers/webgl/utils/RenderTarget","./sprites/Sprite","./sprites/webgl/SpriteRenderer","./text/Text","./textures/BaseTexture","./textures/RenderTexture","./textures/Texture","./textures/TextureUvs","./textures/VideoBaseTexture","./ticker","./utils",46,"fromArray","transpose","newPos","rotate","tx1","append","d1","sr","cr","nsx","prepend","invert","copy","TEMP_MATRIX","./Point",47,48,"./Matrix","./shapes/Circle","./shapes/Ellipse","./shapes/Polygon","./shapes/Rectangle","./shapes/RoundedRectangle",49,"dx","dy","r2","./Rectangle",50,"normx","normy",51,"points_","il","xi","yi","xj","yj","intersect","../Point",52,53,54,"maxSize","properties","batchSize","maxBatchSize","_properties","_maxSize","_batchSize","_buffers","_bufferToUpdate","interactiveChildren","setProperties","uvs","particle","smallestChildIndex","bufferIndex","isRotated","positionX","positionY","finalWidth","finalHeight","globalAlpha","frame","anchor","childTransform","drawImage",55,"ParticleBuffer","dynamicPropertyFlags","vertSize","vertByteSize","dynamicProperties","staticProperties","property","staticStride","staticBuffer","staticData","dynamicStride","dynamicBuffer","dynamicData","initBuffers","dynamicOffset","DYNAMIC_DRAW","staticOffset","uploadDynamic","amount","uploadFunction","uploadStatic",56,"numIndices","tempMatrix","ParticleShader","uploadVertices","aPositionCoord","uploadPosition","aRotation","uploadRotation","aTextureCoord","uploadUvs","uploadAlpha","totalChildren","generateBuffers","uAlpha","_texture","_glTextures","updateTexture","buffers","sprite","crop","_frame","spritePosition","spriteRotation","textureUvs","_uvs","x0","y0","spriteAlpha","./ParticleBuffer","./ParticleShader",57,"TextureShader","../../renderers/webgl/shaders/TextureShader",58,"SystemRenderer","system","sayHello","_backgroundColor","_backgroundColorRgba","_backgroundColorString","hex2string","removeView",59,"refresh","CanvasMaskManager","smoothProperty","imageSmoothingEnabled","webkitImageSmoothingEnabled","mozImageSmoothingEnabled","oImageSmoothingEnabled","msImageSmoothingEnabled","initPlugins","_mapBlendModes","pluginTarget","mixin","cacheParent","screencanvas","fillStyle","clearRect","fillRect","renderDisplayObject","destroyPlugins","tempContext","canUseNewCanvasBlendModes","../SystemRenderer","./utils/CanvasMaskManager",60,61,"updateGraphicsTint","beginPath","closePath","strokeStyle","stroke","strokeRect","kappa","ox","oy","xe","ye","xm","ym","rx","ry","maxRadius","renderGraphicsMask","tintR","tintG","tintB","../../../const",62,"maskData","save","cacheAlpha","clip","restore","./CanvasGraphics",63,"CanvasTinter","getTintedTexture","roundColor","stringColor","tintCache","tintMethod","convertTintToImage","tintImage","toDataURL","tintWithMultiply","tintWithOverlay","tintWithPerPixel","rgbValues","pixelData","getImageData","pixels","putImageData","step","cacheStepsPerColorChannel","rgb2hex","canUseMultiply","../../../utils",64,"TextureManager","_managedTextures","glTextures","getTexture","hasLoaded","glTexture","uid","destroyTexture","_skipRemove","removeAll",65,"handleContextLost","handleContextRestored","_contextOptions","premultipliedAlpha","MaskManager","StencilManager","FilterManager","BlendModeManager","_initContext","mapWebGLBlendModesToPixi","drawModes","mapWebGLDrawModesToPixi","_activeShader","_activeRenderTarget","_activeTextureLocation","_activeTexture","textureManager","disable","DEPTH_TEST","CULL_FACE","enable","BLEND","rootRenderTarget","bindRenderTarget","isContextLost","renderTarget","setFilterStack","filterStack","objectRenderer","setMaskStack","stencilMaskStack","bindShader","preventDefault","destroyAll","./TextureManager","./filters/FXAAFilter","./managers/BlendModeManager","./managers/FilterManager","./managers/MaskManager","./managers/ShaderManager","./managers/StencilManager","./utils/ObjectRenderer","./utils/RenderTarget","./utils/mapWebGLBlendModesToPixi","./utils/mapWebGLDrawModesToPixi",66,"shaders","DefaultShader","defaultVertexSrc","defaultFragmentSrc","getShader","applyFilter","syncUniform","../shaders/TextureShader",67,"./AbstractFilter",68,"maskMatrix","otherMatrix","maskSprite","calculateMappedMatrix","../../../math",69,"currentBlendMode","blendFunc","./WebGLManager",70,"texturePool","textureSize","currentFrame","Quad","quad","capFilterArea","getRenderTarget","setRenderTarget","filterData","previousFilterData","vertexBuffer","defaultShader","dimensions","vertices","returnRenderTarget","flipTexture","flopTexture","temp","inputTarget","outputTarget","syncUniforms","outputMatrix","mappedMatrix","ratio","translateScaleX","translateScaleY","offsetY","../utils/Quad","../utils/RenderTarget",71,"stencilStack","alphaMaskPool","AlphaMaskFilter","pushSpriteMask","pushStencilMask","popSpriteMask","popStencilMask","alphaMaskFilter","../filters/SpriteMaskFilter",72,"maxAttibs","stack","_currentId","currentShader","ComplexPrimitiveShader","PrimitiveShader","setAttribs","../shaders/ComplexPrimitiveShader","../shaders/PrimitiveShader",73,"WebGLMaskManager","STENCIL_TEST","attachStencilBuffer","sms","bindGraphics","STENCIL_BUFFER_BIT","level","colorMask","stencilFunc","ALWAYS","stencilOp","KEEP","INVERT","EQUAL","DECR","INCR",74,75,"./Shader",76,77,"textureCount","init","compile","cacheUniformLocations","cacheAttributeLocations","_glCompile","uniform1i","uniform2f","uniform3f","uniform4f","uniform1iv","uniform2iv","uniform3iv","uniform4iv","uniform1fv","uniform2fv","uniform4fv","uniformMatrix2fv","uniformMatrix4fv","_array","initSampler2D","textureData","luminance","LUMINANCE","wrapS","wrapT",78,"customUniforms","customAttributes","uSampler",79,80,"../managers/WebGLManager",81,"colors","rect2",82,"StencilMaskStack","frameBuffer","stencilBuffer","projectionFrame","calculateProjection","viewport","pm","./StencilMaskStack",83,84,"ONE","ONE_MINUS_SRC_ALPHA","SRC_ALPHA","DST_ALPHA","DST_COLOR",85,86,"cachedTint","textureDirty","vertexDirty","vertexData","sign","_onTextureUpdate","caclulateVertices","valid","smoothingEnabled","tintedTexture","destroyBaseTexture","fromFrame","frameId","TextureCache","fromImage","imageId","crossorigin","../renderers/canvas/utils/CanvasTinter",87,"numVerts","positions","Uint32Array","createIndicesForQuads","currentBatchSize","sprites","groupCount","groups","textures","ids","blend","currentGroup","currentTexture","generateMultiTextureShader","MAX_TEXTUES","_shader","vao","aTextureId","nextTexture","_enabled","_id","uvs_uint32","renderSprites","subarray","group","../../renderers/webgl/shaders/_TextureShader","../../utils/createIndicesForQuads","./generateMultiTextureShader",88,"maxTextures","generateSampleSrc","fragTemplate","sampleValues","uSamplers",89,"_text","_style","fontPropertiesCache","fontPropertiesCanvas","fontPropertiesContext","updateText","dropShadowColor","font","align","strokeThickness","wordWrap","wordWrapWidth","dropShadow","dropShadowAngle","dropShadowDistance","dropShadowBlur","textBaseline","lineJoin","miterLimit","outputText","lines","lineWidths","maxLineWidth","fontProperties","determineFontProperties","measureText","lineHeight","fontSize","linePositionX","linePositionY","shadowColor","shadowBlur","xShadowOffset","yShadowOffset","ascent","fillText","strokeText","fontStyle","baseline","imagedata","line","descent","spaceLeft","words","wordWidth","wordWidthWithSpace","../sprites/Sprite",90,"realWidth","realHeight","isLoading","imageUrl","isPowerOfTwo","_active","loadSource","naturalWidth","naturalHeight","wasLoading","_sourceLoaded","scope","BaseTextureCache","_pixiId","dispose","updateSourceImage","newSrc","image","getResolutionOfUrl",91,"textureBuffer","_updateUvs","updateBase","currentBounds","cachedWt","realResolution","getImage","getBase64","getCanvas","webGLPixels","Uint8Array","readPixels","tempCanvas","canvasData","getPixels","getPixel","../renderers/webgl/managers/FilterManager","../renderers/webgl/utils/RenderTarget","./BaseTexture","./Texture",92,"noFrame","requiresUpdate","onBaseTextureUpdated","onBaseTextureLoaded","destroyBase","fromVideo","video","fromVideoUrl","videoUrl","fromUrl","addTextureToCache","removeTextureFromCache","./TextureUvs","./VideoBaseTexture",93,"xy0_uint32","xy1_uint32","xy2_uint32","xy3_uint32","baseFrame","tw","th",94,"readyState","HAVE_ENOUGH_DATA","HAVE_FUTURE_DATA","autoUpdate","_onUpdate","_onCanPlay","_onPlayStart","_onPlayStop","__loaded","createSource","requestAnimationFrame","videoWidth","videoHeight","play","videoSrc","fromUrls",95,"Ticker","_this","_tick","time","_requestId","_emitter","TICK","_maxElapsedMS","autoStart","deltaTime","elapsedMS","lastTime","speed","FPS","minFPS","fps","minFPMS","_requestIfNeeded","performance","now","_cancelIfNeeded","cancelAnimationFrame","_startIfPossible","addOnce","remove","currentTime",96,"shared","./Ticker",97,"totalIndices",98,"_uid","_saidHello","hex","rgb","pngHead","pngEnd","magenta","yellow","getNextPowerOfTwo","number","parseFloat","userAgent","contextOptions","WebGLRenderingContext","getContextAttributes","startIdx","removeCount","./pluginTarget",99,"__plugins","pluginName","ctor",100,"mesh","extras","SpriteBatch","ReferenceError","AssetLoader","Stage","DisplayObjectContainer","Strip","Mesh","Rope","MovieClip","TilingSprite","BitmapText","scaleModes","setTexture","setText","setStyle","setFrame","uuid","./core","./extras","./filters","./mesh",101,"textWidth","textHeight","_glyphs","_font","maxWidth","maxLineHeight","fonts","prevCharCode","chars","lastLineWidth","lastSpace","charCode","charData","kerning","xOffset","yOffset","xAdvance","lineAlignOffsets","alignOffset","lenChars","validate",102,"_textures","_durations","animationSpeed","loop","_currentTime","playing","totalFrames","gotoAndStop","frameNumber","gotoAndPlay","elapsed","lag","fromFrames","frames","fromImages","images",103,"tileScale","tilePosition","_canvasPattern","uFrame","uTransform","uPixelSize","tempUvs","tempWidth","tempHeight","modX","modY","createPattern","_tileScaleOffset","../core/renderers/canvas/utils/CanvasTinter",104,"_cacheAsBitmap","_originalRenderWebGL","_originalRenderCanvas","_originalUpdateTransform","_originalHitTest","_originalDestroy","_cachedSprite","cacheAsBitmap","_originalGetBounds","_originalContainsPoint","_renderCachedWebGL","_renderCachedCanvas","_cacheAsBitmapDestroy","_destroyCachedDisplayObject","_initCachedDisplayObject","cachedRenderTarget","_getCachedBounds","_initCachedDisplayObjectCanvas",105,"getChildByName",106,"getGlobalPosition",107,"./BitmapText","./MovieClip","./TilingSprite","./cacheAsBitmap","./getChildByName","./getGlobalPosition",108,"AsciiFilter","pixelSize","../../core",109,"BloomFilter","blurXFilter","BlurXFilter","blurYFilter","BlurYFilter","defaultFilter","blur","blurX","blurY","../blur/BlurXFilter","../blur/BlurYFilter",110,"BlurDirFilter","dirX","dirY","strength","passes",111,"BlurFilter","./BlurXFilter","./BlurYFilter",112,"flip","flop",113,114,"SmartBlurFilter",115,"ColorMatrixFilter","_loadMatrix","multiply","newMatrix","_multiply","_colorMatrix","brightness","greyscale","grayscale","blackAndWhite","hue","lumR","lumG","lumB","contrast","saturate","desaturate","negative","sepia","technicolor","polaroid","toBGR","kodachrome","browni","vintage","colorTone","desaturation","toned","lightColor","darkColor","lR","lG","lB","dR","dG","dB","night","intensity","predator","lsd",116,"ColorStepFilter",117,"ConvolutionFilter","texelSize",118,"CrossHatchFilter",119,"DisplacementFilter","mapSampler",120,"DotScreenFilter",121,"BlurYTintFilter",122,"DropShadowFilter","blurYTintFilter","_dirtyPosition","_angle","_distance","hideObject","distance","./BlurYTintFilter",123,"GrayFilter","gray",124,"InvertFilter","NoiseFilter","PixelateFilter","RGBSplitFilter","ShockwaveFilter","SepiaFilter","TiltShiftFilter","TiltShiftXFilter","TiltShiftYFilter","TwistFilter","./ascii/AsciiFilter","./bloom/BloomFilter","./blur/BlurDirFilter","./blur/BlurFilter","./blur/BlurXFilter","./blur/BlurYFilter","./blur/SmartBlurFilter","./color/ColorMatrixFilter","./color/ColorStepFilter","./convolution/ConvolutionFilter","./crosshatch/CrossHatchFilter","./displacement/DisplacementFilter","./dot/DotScreenFilter","./dropshadow/DropShadowFilter","./gray/GrayFilter","./invert/InvertFilter","./noise/NoiseFilter","./pixelate/PixelateFilter","./rgb/RGBSplitFilter","./sepia/SepiaFilter","./shockwave/ShockwaveFilter","./tiltshift/TiltShiftFilter","./tiltshift/TiltShiftXFilter","./tiltshift/TiltShiftYFilter","./twist/TwistFilter",125,126,"noise",127,128,"red","green","blue",129,130,"center","params",131,"TiltShiftAxisFilter","gradientBlur","innerHeight","texSize","innerWidth","updateDelta",132,"tiltShiftXFilter","tiltShiftYFilter","./TiltShiftXFilter","./TiltShiftYFilter",133,"./TiltShiftAxisFilter",134,135,136,"loaders","accessibility","loader","./accessibility","./deprecation","./interaction","./loaders","./polyfill",137,"InteractionData","originalEvent","getLocalPosition","globalPos",138,"InteractionManager","autoPreventDefault","interactionFrequency","mouse","stopped","stopPropagation","interactiveDataPool","interactionDOMElement","eventsAdded","onMouseUp","processMouseUp","onMouseDown","processMouseDown","onMouseMove","processMouseMove","onMouseOut","processMouseOverOut","onTouchStart","processTouchStart","onTouchEnd","processTouchEnd","onTouchMove","processTouchMove","currentCursorStyle","_tempPoint","setTargetElement","element","removeEvents","addEvents","msPointerEnabled","_deltaTime","didMove","cursor","processInteractive","eventString","mapPositionToPoint","hitTest","hit","interactiveParent","clientX","clientY","isRightButton","button","which","isDown","_over","buttonMode","defaultCursor","changedTouches","cLength","touchEvent","touchData","getTouchData","returnTouchData","_touchDown","identifier","globalX","globalY","./InteractionData","./interactiveTarget",139,"interactiveTarget","./InteractionManager",140,141,"info","getElementsByTagName","common","getAttribute","letters","textureRect","kernings","first","second","bitmapFont","xmlUrl","textureUrl","loadOptions","imageMetadata","../extras",142,"bitmapFontParser","spritesheetParser","textureParser","./bitmapFontParser","./loader","./spritesheetParser","./textureParser",143,"ResourceLoader","_pixiMiddleware","addPixiMiddleware",144,"route","meta","rotated","trimmed","spriteSourceSize","sourceSize",145,146,"drawMode","canvasPadding","TRIANGLE_MESH","tempPolygon","_renderCanvasTriangleMesh","_renderCanvasTriangles","_renderCanvasDrawTriangle","index0","textureSource","textureWidth","textureHeight","u0","u1","u2","v0","v1","v2","paddingX","paddingY","centerX","centerY","normX","normY","deltaA","deltaB","deltaC","deltaD","deltaE","deltaF","renderMeshFlat","updateFrame","rawX","rawY","ind0","ind1","ind2",147,"Plane","segmentsX","segmentsY","_ready","segmentsXSub","segmentsYSub","sizeX","sizeY","totalSub","xpos","ypos","value2","value3","value4","./Mesh",148,"factor","nextPoint","perpLength","num","perpX","perpY",149,"MeshRenderer","MeshShader","./Plane","./Rope","./webgl/MeshRenderer","./webgl/MeshShader",150,"_vertexBuffer","_initWebGL","meshShader","_uvBuffer","_indexBuffer","_colorBuffer","../Mesh",151,152,"isNaN",153,154,"./Math.sign","./Object.assign","./requestAnimationFrame",155,"Date","getTime","startTime","vendors","delay"],"mappings":"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EAAA,GAAAuE,EAAA,GAAAvE,EAAA,GAAAuE,EAAA,GAAAvE,EAAA,GAAAuE,EAAA,IAAAvE,EAAA,GAAAuE,EAAA,IACAqkB,EAAA,GAAA5oB,EAAA,GAAAuE,EAAA,GAAAvE,EAAA,GAAAuE,EAAA,GAAAvE,EAAA,GAAAuE,EAAA,IAAAvE,EAAA,GAAAuE,EAAA,IAGAqkB,EAAA,IAAA5oB,EAAA,IAAAuE,EAAA,GAAAvE,EAAA,IAAAuE,EAAA,GAAAvE,EAAA,IAAAuE,EAAA,IAAAvE,EAAA,IAAAuE,EAAA,IACAqkB,EAAA,IAAA5oB,EAAA,IAAAuE,EAAA,GAAAvE,EAAA,IAAAuE,EAAA,GAAAvE,EAAA,IAAAuE,EAAA,IAAAvE,EAAA,IAAAuE,EAAA,IACAqkB,EAAA,IAAA5oB,EAAA,IAAAuE,EAAA,GAAAvE,EAAA,IAAAuE,EAAA,GAAAvE,EAAA,IAAAuE,EAAA,IAAAvE,EAAA,IAAAuE,EAAA,IACAqkB,EAAA,IAAA5oB,EAAA,IAAAuE,EAAA,GAAAvE,EAAA,IAAAuE,EAAA,GAAAvE,EAAA,IAAAuE,EAAA,IAAAvE,EAAA,IAAAuE,EAAA,IACAqkB,EAAA,IAAA5oB,EAAA,IAAAuE,EAAA,GAAAvE,EAAA,IAAAuE,EAAA,GAAAvE,EAAA,IAAAuE,EAAA,IAAAvE,EAAA,IAAAuE,EAAA,IAGAqkB,EAAA,IAAA5oB,EAAA,IAAAuE,EAAA,GAAAvE,EAAA,IAAAuE,EAAA,GAAAvE,EAAA,IAAAuE,EAAA,IAAAvE,EAAA,IAAAuE,EAAA,IACAqkB,EAAA,IAAA5oB,EAAA,IAAAuE,EAAA,GAAAvE,EAAA,IAAAuE,EAAA,GAAAvE,EAAA,IAAAuE,EAAA,IAAAvE,EAAA,IAAAuE,EAAA,IACAqkB,EAAA,IAAA5oB,EAAA,IAAAuE,EAAA,GAAAvE,EAAA,IAAAuE,EAAA,GAAAvE,EAAA,IAAAuE,EAAA,IAAAvE,EAAA,IAAAuE,EAAA,IACAqkB,EAAA,IAAA5oB,EAAA,IAAAuE,EAAA,GAAAvE,EAAA,IAAAuE,EAAA,GAAAvE,EAAA,IAAAuE,EAAA,IAAAvE,EAAA,IAAAuE,EAAA,IACAqkB,EAA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","file":"pixi.min.js","sourcesContent":[null],"sourceRoot":"./"} \ No newline at end of file +{"version":3,"sources":["pixi.js"],"names":["f","exports","module","define","amd","g","window","global","self","this","PIXI","e","t","n","r","s","o","u","a","require","i","Error","code","l","call","length",1,"createContext","setVertexAttribArrays","GLBuffer","GLFramebuffer","GLShader","GLTexture","VertexArrayObject","./lib/GLBuffer","./lib/GLFramebuffer","./lib/GLShader","./lib/GLTexture","./lib/VertexArrayObject","./lib/createContext","./lib/setVertexAttribArrays",2,"EMPTY_ARRAY_BUFFER","ArrayBuffer","Buffer","gl","type","data","drawType","buffer","createBuffer","ARRAY_BUFFER","STATIC_DRAW","upload","prototype","offset","dontBind","bind","byteLength","bufferSubData","bufferData","bindBuffer","createVertexBuffer","createIndexBuffer","ELEMENT_ARRAY_BUFFER","create",3,"Texture","Framebuffer","width","height","framebuffer","createFramebuffer","stencil","texture","enableTexture","framebufferTexture2D","FRAMEBUFFER","COLOR_ATTACHMENT0","TEXTURE_2D","enableStencil","createRenderbuffer","bindRenderbuffer","RENDERBUFFER","framebufferRenderbuffer","DEPTH_STENCIL_ATTACHMENT","renderbufferStorage","DEPTH_STENCIL","clear","b","clearColor","COLOR_BUFFER_BIT","bindFramebuffer","unbind","resize","uploadData","destroy","deleteFramebuffer","createRGBA","fromData","enableNearestScaling","enableWrapClamp","fbo","createFloat32","./GLTexture",4,"compileProgram","extractAttributes","extractUniforms","generateUniformAccessObject","Shader","vertexSrc","fragmentSrc","program","attributes","uniformData","uniforms","useProgram","./shader/compileProgram","./shader/extractAttributes","./shader/extractUniforms","./shader/generateUniformAccessObject",5,"format","createTexture","mipmap","premultiplyAlpha","RGBA","UNSIGNED_BYTE","source","pixelStorei","UNPACK_PREMULTIPLY_ALPHA_WEBGL","texImage2D","FLOATING_POINT_AVAILABLE","Float32Array","ext","getExtension","FLOAT","location","undefined","activeTexture","TEXTURE0","bindTexture","minFilter","linear","texParameteri","TEXTURE_MIN_FILTER","LINEAR_MIPMAP_LINEAR","NEAREST_MIPMAP_NEAREST","LINEAR","NEAREST","magFilter","TEXTURE_MAG_FILTER","enableMipmap","generateMipmap","enableLinearScaling","TEXTURE_WRAP_S","CLAMP_TO_EDGE","TEXTURE_WRAP_T","enableWrapRepeat","REPEAT","deleteTexture","fromSource",6,"nativeVaoExtension","nativeVao","createVertexArrayOES","indexBuffer","dirty","constructor","bindVertexArrayOES","activate","attrib","attribute","pointer","normalized","stride","start","enableVertexAttribArray","addAttribute","push","addIndex","options","draw","size","drawElements","UNSIGNED_SHORT",7,"CONTEXT_UID","canvas","getContext","id",8,"GL_MAP","attribs","maxAttribs","getParameter","MAX_VERTEX_ATTRIBS","tempAttribState","Array","attribState","disableVertexAttribArray",9,"glVertShader","compileShader","VERTEX_SHADER","glFragShader","FRAGMENT_SHADER","createProgram","attachShader","linkProgram","getProgramParameter","LINK_STATUS","console","error","VALIDATE_STATUS","getError","getProgramInfoLog","warn","deleteProgram","deleteShader","src","shader","createShader","shaderSource","getShaderParameter","COMPILE_STATUS","log","getShaderInfoLog",10,"defaultValue","Int32Array","booleanArray","array",11,"mapType","mapSize","totalAttributes","ACTIVE_ATTRIBUTES","attribData","getActiveAttrib","name","getAttribLocation","vertexAttribPointer","./mapSize","./mapType",12,"totalUniforms","ACTIVE_UNIFORMS","getActiveUniform","replace","getUniformLocation","value","./defaultValue",13,"uniformKeys","Object","keys","fullName","nameTokens","split","uniformGroup","getUniformGroup","uniform","defineProperty","get","generateGetter","set","generateSetter","template","getterTemplate","Function","setTemplate","setterTemplate","GLSL_TO_SINGLE_SETTERS","GLSL_TO_ARRAY_SETTERS","cur","join","float","vec2","vec3","vec4","int","ivec2","ivec3","ivec4","bool","bvec2","bvec3","bvec4","mat2","mat3","mat4","sampler2D",14,"GLSL_TO_SIZE",15,"GL_TABLE","typeNames","GL_TO_GLSL_TYPES","tn","FLOAT_VEC2","FLOAT_VEC3","FLOAT_VEC4","INT","INT_VEC2","INT_VEC3","INT_VEC4","BOOL","BOOL_VEC2","BOOL_VEC3","BOOL_VEC4","FLOAT_MAT2","FLOAT_MAT3","FLOAT_MAT4","SAMPLER_2D",16,"process","noop","identity","v","toBool","notId","only_once","fn","apply","arguments","_once","_isArrayLike","arr","_isArray","_arrayEach","iterator","index","_map","result","_range","count","_reduce","memo","x","_forEachOf","object","_keys","key","_indexOf","item","_keyIterator","coll","len","_restParam","func","startIndex","Math","max","rest","_withoutIndex","callback","_eachOfLimit","limit","obj","nextKey","done","running","errored","replenish","err","doParallel","async","eachOf","doParallelLimit","doSeries","eachOfSeries","_asyncMap","eachfn","results","_filter","sort","_reject","cb","_createTester","check","getResult","iteratee","_","_findGetResult","_parallel","tasks","task","args","_concat","y","concat","_queue","worker","concurrency","payload","_insert","q","pos","started","idle","setImmediate","drain","unshift","saturated","_next","workers","removed","workersList","splice","empty","paused","kill","pause","resume","resumeCount","min","w","_console_fn","_times","mapper","_applyEach","fns","go","that","pop","ensureAsync","innerArgs","sync","previous_async","root","noConflict","_toString","toString","isArray","_isObject","k","hasOwnProperty","_setImmediate","_delay","setTimeout","nextTick","forEach","each","forEachSeries","eachSeries","forEachLimit","eachLimit","forEachOf","completed","iter","forEachOfSeries","iterate","forEachOfLimit","eachOfLimit","map","mapSeries","mapLimit","inject","foldl","reduce","foldr","reduceRight","reversed","reverse","transform","select","filter","selectLimit","filterLimit","selectSeries","filterSeries","reject","rejectLimit","rejectSeries","any","some","someLimit","all","every","everyLimit","detect","detectSeries","detectLimit","sortBy","comparator","left","right","criteria","auto","addListener","listeners","removeListener","idx","taskComplete","remainingTasks","slice","runningTasks","ready","requires","listener","taskCallback","dep","safeResults","val","rkey","retry","times","parseTimes","acc","parseInt","DEFAULT_TIMES","interval","DEFAULT_INTERVAL","wrappedTask","wrappedCallback","wrappedResults","retryAttempt","finalAttempt","seriesCallback","retryInterval","opts","attempts","series","waterfall","wrapIterator","next","parallel","parallelLimit","makeCallback","callArgs","concatSeries","whilst","test","doWhilst","calls","until","doUntil","during","truth","doDuring","queue","items","priorityQueue","_compareTasks","priority","_binarySearch","sequence","compare","beg","end","mid","cargo","dir","memoize","hasher","queues","memoized","unmemoized","unmemoize","timesSeries","timesLimit","seq","newargs","nextargs","compose","applyEach","applyEachSeries","forever","constant","values","wrapSync","asyncify","then","message","_process",17,"normalizeArray","parts","allowAboveRoot","up","last","xs","res","splitPathRe","splitPath","filename","exec","resolve","resolvedPath","resolvedAbsolute","path","cwd","TypeError","charAt","p","normalize","isAbsolute","trailingSlash","substr","paths","relative","from","to","trim","fromParts","toParts","samePartsLength","outputParts","sep","delimiter","dirname","basename","extname","str",18,"cleanUpNextTick","draining","currentQueue","queueIndex","drainQueue","timeout","run","clearTimeout","Item","fun","title","browser","env","argv","version","versions","on","once","off","removeAllListeners","emit","binding","chdir","umask",19,"RangeError","errors","mapDomain","string","regexSeparators","labels","encoded","ucs2decode","extra","output","counter","charCodeAt","ucs2encode","stringFromCharCode","basicToDigit","codePoint","base","digitToBasic","digit","flag","adapt","delta","numPoints","firstTime","floor","damp","baseMinusTMin","tMax","skew","decode","input","out","basic","j","oldi","baseMinusT","inputLength","initialN","bias","initialBias","lastIndexOf","maxInt","tMin","encode","handledCPCount","basicLength","m","currentValue","handledCPCountPlusOne","qMinusT","toUnicode","regexPunycode","toLowerCase","toASCII","regexNonASCII","freeExports","nodeType","freeModule","freeGlobal","punycode","overflow","not-basic","invalid-input","String","fromCharCode","ucs2",20,"prop","qs","eq","regexp","maxKeys","kstr","vstr","indexOf","decodeURIComponent",21,"stringifyPrimitive","isFinite","objectKeys","ks","encodeURIComponent",22,"parse","stringify","./decode","./encode",23,"Url","protocol","slashes","auth","host","port","hostname","hash","search","query","pathname","href","urlParse","url","parseQueryString","slashesDenoteHost","isObject","urlFormat","isString","urlResolve","urlResolveObject","resolveObject","arg","isNull","isNullOrUndefined","protocolPattern","portPattern","delims","unwise","autoEscape","nonHostChars","hostEndingChars","hostnameMaxLen","hostnamePartPattern","hostnamePartStart","unsafeProtocol","javascript","javascript:","hostlessProtocol","slashedProtocol","http","https","ftp","gopher","file","http:","https:","ftp:","gopher:","file:","querystring","proto","lowerProto","match","hostEnd","hec","atSign","parseHost","ipv6Hostname","hostparts","part","newpart","validParts","notHost","bit","domainArray","newOut","h","ae","esc","escape","qm","rel","relPath","shift","isSourceAbs","isRelAbs","mustEndAbs","removeAllDots","srcPath","psychotic","authInHost","hasTrailingSlash",24,"earcut","holeIndices","dim","hasHoles","outerLen","outerNode","linkedList","triangles","minX","minY","maxX","maxY","eliminateHoles","earcutLinked","clockwise","sum","insertNode","filterPoints","again","steiner","equals","area","prev","removeNode","ear","pass","indexCurve","stop","isEarHashed","isEar","cureLocalIntersections","splitEarcut","c","pointInTriangle","minTX","minTY","maxTX","maxTY","minZ","zOrder","maxZ","nextZ","z","prevZ","intersects","locallyInside","isValidDiagonal","splitPolygon","list","getLeftmost","compareX","eliminateHole","hole","findHoleBridge","hx","hy","qx","Infinity","tan","tanMin","abs","sortLinked","tail","numMerges","pSize","qSize","inSize","leftmost","ax","ay","bx","by","cx","cy","px","py","intersectsPolygon","middleInside","p1","p2","q1","q2","inside","a2","Node","b2","an","bp",25,"EE","context","EventEmitter","prefix","_events","event","exists","evt","available","ee","a1","a3","a4","a5","events","setMaxListeners","prefixed",26,"toObject","propIsEnumerable","propertyIsEnumerable","assign","target","symbols","getOwnPropertySymbols",27,"called","_each","_eachLimit","_mapLimit","_detect","main_callback","theCallback","working","drained","ts","ds",28,"Loader","baseUrl","progress","loading","_progressChunk","_beforeMiddleware","_afterMiddleware","_boundLoadResource","_loadResource","_boundOnLoad","_onLoad","_buffer","_numToLoad","resources","urlParser","Resource","add","enqueue","onComplete","_handleBaseUrl","parsedUrl","before","pre","after","use","reset","load","resource","dequeue","_dequeue","_runMiddleware","_onComplete","LOAD_TYPE","XHR_READY_STATE","XHR_RESPONSE_TYPE","./Resource","eventemitter3",29,"isDataUrl","crossOrigin","loadType","_determineLoadType","xhrType","metadata","xhr","isJson","isXml","isImage","isAudio","isVideo","_boundComplete","complete","_boundOnError","_onError","_boundOnProgress","_onProgress","_boundXhrOnError","_xhrOnError","_boundXhrOnAbort","_xhrOnAbort","_boundXhrOnLoad","_xhrOnLoad","_boundXdrOnTimeout","_xdrOnTimeout","reqType","setExtMap","substring","_url","useXdr","XDomainRequest","XMLHttpRequest","tempAnchor","removeEventListener","onerror","ontimeout","onprogress","onload","_determineCrossOrigin","IMAGE","_loadImage","AUDIO","_loadElement","VIDEO","XHR","_loadXdr","_loadXhr","Image","addEventListener","Audio","document","createElement","navigator","isCocoonJS","appendChild","_createSource","toUpperCase","_determineXhrType","open","JSON","DOCUMENT","responseType","TEXT","send","xdr","mime","nodeName","lengthComputable","loaded","total","status","statusText","responseText","DOMParser","domparser","parseFromString","div","innerHTML","response","responseURL","loc","samePort","_xhrTypeMap","_getExtension","_loadTypeMap","slashIndex","queryStart","_getMimeFromXhrType","BUFFER","BLOB","DEFAULT","UNSENT","OPENED","HEADERS_RECEIVED","LOADING","DONE","gif","png","bmp","jpg","jpeg","tif","tiff","webp","tga","xhtml","html","htm","xml","tmx","tsx","svg","json","text","txt","setExtensionLoadType","setExtensionXhrType",30,"_keyStr","encodeBinary","bytebuffer","encodedCharIndexes","inx","jnx","paddingBytes",31,"middleware","caching","memory","parsing","blob","./Loader","./middlewares/caching/memory","./middlewares/parsing/blob",32,"cache",33,"b64","URL","webkitURL","Blob","createObjectURL","revokeObjectURL","getResponseHeader","../../Resource","../../b64",34,"description","author","contributors","main","homepage","bugs","license","repository","scripts","build","docs","files","dependencies","brfs","object-assign","pixi-gl-core","resource-loader","devDependencies","browserify","chai","del","gulp","gulp-cached","gulp-concat","gulp-debug","gulp-header","gulp-jshint","gulp-mirror","gulp-plumber","gulp-rename","gulp-sourcemaps","gulp-uglify","gulp-util","jaguarjs-jsdoc","jsdoc","jshint-summary","minimist","mocha","require-dir","run-sequence","testem","vinyl-buffer","vinyl-source-stream","watchify",35,"AccessibilityManager","renderer","style","position","top","zIndex","pool","renderId","debug","children","_onKeyDown","_onMouseMove","isActive","core","DisplayObject","update","view","parentNode","deactivate","removeChild","updateAccessibleObjects","displayObject","visible","accessible","interactive","_accessibleActive","addChild","_lastObjectRendered","rect","getBoundingClientRect","sx","sy","child","utils","removeItems","_accessibleDiv","hitArea","wt","worldTransform","tx","ty","d","getBounds","capHitArea","backgroundColor","borderStyle","_onClick","_onFocus","_onFocusOut","accessibleTitle","tabIndex","interactionManager","plugins","interaction","dispatchEvent","eventData","keyCode","WebGLRenderer","registerPlugin","CanvasRenderer","../core","./accessibleTarget",36,"accessibleTarget",37,"./AccessibilityManager",38,"CONST","VERSION","PI_2","PI","RAD_TO_DEG","DEG_TO_RAD","TARGET_FPMS","RENDERER_TYPE","UNKNOWN","WEBGL","CANVAS","BLEND_MODES","NORMAL","ADD","MULTIPLY","SCREEN","OVERLAY","DARKEN","LIGHTEN","COLOR_DODGE","COLOR_BURN","HARD_LIGHT","SOFT_LIGHT","DIFFERENCE","EXCLUSION","HUE","SATURATION","COLOR","LUMINOSITY","DRAW_MODES","POINTS","LINES","LINE_LOOP","LINE_STRIP","TRIANGLES","TRIANGLE_STRIP","TRIANGLE_FAN","SCALE_MODES","RETINA_PREFIX","RESOLUTION","FILTER_RESOLUTION","DEFAULT_RENDER_OPTIONS","resolution","antialias","forceFXAA","autoResize","transparent","clearBeforeRender","preserveDrawingBuffer","roundPixels","SHAPES","POLY","RECT","CIRC","ELIP","RREC","SPRITE_BATCH_SIZE","../../package.json",39,"Container","math","RenderTexture","_tempMatrix","Matrix","defineProperties","scale","getLocalBounds","_width","_height","onChildrenChange","argumentsLength","parent","addChildAt","swapChildren","child2","index1","getChildIndex","index2","setChildIndex","currentIndex","getChildAt","removeChildAt","removeChildren","beginIndex","endIndex","begin","range","generateTexture","scaleMode","bounds","renderTexture","render","updateTransform","displayObjectUpdateTransform","dirtyTransform","containerUpdateTransform","_currentBounds","Rectangle","EMPTY","childBounds","childMaxX","childMaxY","childVisible","_bounds","containerGetBounds","matrixCache","IDENTITY","renderWebGL","worldAlpha","renderable","_mask","_filters","currentRenderer","flush","filterManager","pushFilter","maskManager","pushMask","_renderWebGL","popMask","popFilter","_renderCanvas","renderCanvas","alpha","destroyChildren","../math","../textures/RenderTexture","../utils","./DisplayObject",40,"Point","_position","CachePoint","pivot","_rotation","localTransform","filterArea","_sr","_cr","_tempDisplayObjectParent","doc","posiiton","scaleX","scaleY","rotation","sin","cos","worldVisible","mask","filters","pt","lt","matrix","toGlobal","toLocal","point","applyInverse","setParent","container","setTransform","skewX","skewY","pivotX","pivotY","../const",41,"Graphics","fillAlpha","lineWidth","lineColor","graphicsData","tint","_prevTint","blendMode","currentPath","_webGL","isMask","boundsPadding","_localBounds","glDirty","boundsDirty","cachedSpriteDirty","CanvasBuffer","CanvasGraphics","GraphicsData","tempPoint","clone","updateLocalBounds","lineStyle","color","lineAlpha","shape","points","Polygon","closed","drawShape","moveTo","lineTo","quadraticCurveTo","cpX","cpY","toX","toY","xa","ya","fromX","fromY","bezierCurveTo","cpX2","cpY2","dt","dt2","dt3","t2","t3","arcTo","x1","y1","x2","y2","radius","b1","mm","dd","cc","tt","k1","sqrt","k2","j1","j2","qy","startAngle","atan2","endAngle","arc","anticlockwise","sweep","segs","ceil","startX","startY","theta","theta2","cTheta","sTheta","segMinus","remainder","real","angle","beginFill","filling","fillColor","fill","endFill","drawRect","drawRoundedRect","RoundedRectangle","drawCircle","Circle","drawEllipse","Ellipse","drawPolygon","clearDirty","canvasBuffer","fromCanvas","baseTexture","translate","renderGraphics","setObjectRenderer","graphics","compositeOperation","blendModes","globalCompositeOperation","w0","w1","h0","h1","x3","y3","x4","y4","containsPoint","contains","padding","_webgl","../display/Container","../renderers/canvas/utils/CanvasBuffer","../renderers/canvas/utils/CanvasGraphics","../textures/Texture","./GraphicsData",42,"_lineTint","_fillTint",43,"GraphicsRenderer","ObjectRenderer","graphicsDataPool","primitiveShader","complexPrimitiveShader","maximumSimplePolySize","WebGLGraphicsData","PrimitiveShader","buildLine","buildPoly","buildComplexPoly","buildRectangle","buildRoundedRectangle","buildCircle","onContextChange","webGLData","updateGraphics","webGL","blendModeManager","setBlendMode","mode","bindShader","translationMatrix","toArray","hex2rgb","aVertexPosition","aColor","indices","drawCount","lastIndex","switchMode","canDrawUsingSimple","../../const","../../math","../../renderers/webgl/WebGLRenderer","../../renderers/webgl/utils/ObjectRenderer","../../utils","./WebGLGraphicsData","./shaders/PrimitiveShader","./utils/buildCircle","./utils/buildComplexPoly","./utils/buildLine","./utils/buildPoly","./utils/buildRectangle","./utils/buildRoundedRectangle",44,"glPoints","glIndices","Uint16Array","deleteBuffer",45,46,"circleData","totalSegs","seg","verts","vecPos","tempPoints","../../../utils","./buildLine",47,48,"firstPoint","lastPoint","midPointX","midPointY","p1x","p1y","p2x","p2y","p3x","p3y","perpx","perpy","perp2x","perp2y","perp3x","perp3y","c1","c2","denom","pdist","dist","indexCount","indexStart","../../../math",49,"vertPos",50,"rectData",51,"rrectData","recPoints","quadraticBezierCurve","getPt","n1","n2","perc","diff","xb","yb",52,"ticker","Sprite","ParticleContainer","SpriteRenderer","ParticleRenderer","Text","BaseTexture","VideoBaseTexture","TextureUvs","WebGLManager","ShaderManager","RenderTarget","AbstractFilter","FXAAFilter","SpriteMaskFilter","glCore","autoDetectRenderer","noWebGL","isWebGLSupported","./const","./display/Container","./display/DisplayObject","./graphics/Graphics","./graphics/GraphicsData","./graphics/webgl/GraphicsRenderer","./math","./particles/ParticleContainer","./particles/webgl/ParticleRenderer","./renderers/canvas/CanvasRenderer","./renderers/canvas/utils/CanvasBuffer","./renderers/canvas/utils/CanvasGraphics","./renderers/webgl/WebGLRenderer","./renderers/webgl/filters/AbstractFilter","./renderers/webgl/filters/FXAAFilter","./renderers/webgl/filters/SpriteMaskFilter","./renderers/webgl/managers/ShaderManager","./renderers/webgl/managers/WebGLManager","./renderers/webgl/shaders/Shader","./renderers/webgl/utils/ObjectRenderer","./renderers/webgl/utils/RenderTarget","./sprites/Sprite","./sprites/webgl/SpriteRenderer","./text/Text","./textures/BaseTexture","./textures/RenderTexture","./textures/Texture","./textures/TextureUvs","./textures/VideoBaseTexture","./ticker","./utils",53,"fromArray","transpose","newPos","rotate","tx1","append","d1","sr","cr","nsx","prepend","invert","copy","TEMP_MATRIX","./Point",54,55,"./Matrix","./shapes/Circle","./shapes/Ellipse","./shapes/Polygon","./shapes/Rectangle","./shapes/RoundedRectangle",56,"dx","dy","r2","./Rectangle",57,"normx","normy",58,"points_","il","xi","yi","xj","yj","intersect","../Point",59,60,61,"maxSize","properties","batchSize","maxBatchSize","_properties","_maxSize","_batchSize","_buffers","_bufferToUpdate","interactiveChildren","setProperties","uvs","particle","smallestChildIndex","bufferIndex","isRotated","positionX","positionY","finalWidth","finalHeight","globalAlpha","frame","anchor","childTransform","drawImage",62,"ParticleBuffer","dynamicPropertyFlags","vertSize","vertByteSize","dynamicProperties","staticProperties","property","staticStride","staticBuffer","staticData","dynamicStride","dynamicBuffer","dynamicData","initBuffers","dynamicOffset","DYNAMIC_DRAW","staticOffset","uploadDynamic","amount","uploadFunction","uploadStatic",63,"numIndices","tempMatrix","ParticleShader","shaderManager","uploadVertices","aPositionCoord","uploadPosition","aRotation","uploadRotation","aTextureCoord","uploadUvs","uploadAlpha","setShader","totalChildren","generateBuffers","currentRenderTarget","projectionMatrix","uniformMatrix3fv","_location","uniform1f","uAlpha","_texture","_glTextures","updateTexture","buffers","sprite","crop","_frame","spritePosition","spriteRotation","textureUvs","_uvs","x0","y0","spriteAlpha","./ParticleBuffer","./ParticleShader",64,"TextureShader","../../renderers/webgl/shaders/TextureShader",65,"SystemRenderer","system","sayHello","_backgroundColor","_backgroundColorRgba","_backgroundColorString","hex2string","removeView",66,"refresh","CanvasMaskManager","smoothProperty","imageSmoothingEnabled","webkitImageSmoothingEnabled","mozImageSmoothingEnabled","oImageSmoothingEnabled","msImageSmoothingEnabled","initPlugins","_mapBlendModes","pluginTarget","mixin","cacheParent","screencanvas","fillStyle","clearRect","fillRect","renderDisplayObject","destroyPlugins","tempContext","canUseNewCanvasBlendModes","../SystemRenderer","./utils/CanvasMaskManager",67,68,"updateGraphicsTint","beginPath","closePath","strokeStyle","stroke","strokeRect","kappa","ox","oy","xe","ye","xm","ym","rx","ry","maxRadius","renderGraphicsMask","tintR","tintG","tintB","../../../const",69,"maskData","save","cacheAlpha","clip","restore","./CanvasGraphics",70,"CanvasTinter","getTintedTexture","roundColor","stringColor","tintCache","tintMethod","convertTintToImage","tintImage","toDataURL","tintWithMultiply","tintWithOverlay","tintWithPerPixel","rgbValues","pixelData","getImageData","pixels","putImageData","step","cacheStepsPerColorChannel","rgb2hex","canUseMultiply",71,"TextureManager","_managedTextures","glTextures","getTexture","hasLoaded","glTexture","uid","destroyTexture","_skipRemove","removeAll",72,"handleContextLost","handleContextRestored","_contextOptions","premultipliedAlpha","MaskManager","stencilManager","StencilManager","FilterManager","BlendModeManager","_initContext","mapWebGLBlendModesToPixi","drawModes","mapWebGLDrawModesToPixi","_activeShader","_activeRenderTarget","_activeTextureLocation","_activeTexture","textureManager","disable","DEPTH_TEST","CULL_FACE","enable","BLEND","rootRenderTarget","bindRenderTarget","isContextLost","renderTarget","setFilterStack","filterStack","objectRenderer","setMaskStack","stencilMaskStack","preventDefault","destroyAll","./TextureManager","./filters/FXAAFilter","./managers/BlendModeManager","./managers/FilterManager","./managers/MaskManager","./managers/ShaderManager","./managers/StencilManager","./utils/ObjectRenderer","./utils/RenderTarget","./utils/mapWebGLBlendModesToPixi","./utils/mapWebGLDrawModesToPixi",73,"shaders","DefaultShader","defaultVertexSrc","defaultFragmentSrc","getShader","applyFilter","syncUniform","../shaders/TextureShader",74,"./AbstractFilter",75,"maskMatrix","otherMatrix","maskSprite","calculateMappedMatrix",76,"currentBlendMode","blendFunc","./WebGLManager",77,"texturePool","textureSize","currentFrame","Quad","quad","capFilterArea","getRenderTarget","setRenderTarget","filterData","previousFilterData","vertexBuffer","defaultShader","dimensions","vertices","returnRenderTarget","flipTexture","flopTexture","temp","inputTarget","outputTarget","syncUniforms","outputMatrix","mappedMatrix","ratio","translateScaleX","translateScaleY","offsetY","../utils/Quad","../utils/RenderTarget",78,"stencilStack","alphaMaskPool","AlphaMaskFilter","pushSpriteMask","pushStencilMask","popSpriteMask","popStencilMask","alphaMaskFilter","../filters/SpriteMaskFilter",79,"maxAttibs","stack","_currentId","currentShader","ComplexPrimitiveShader","setAttribs","../shaders/ComplexPrimitiveShader","../shaders/PrimitiveShader",80,"WebGLMaskManager","STENCIL_TEST","pushStencil","attachStencilBuffer","sms","bindGraphics","STENCIL_BUFFER_BIT","level","colorMask","stencilFunc","ALWAYS","stencilOp","KEEP","INVERT","EQUAL","DECR","INCR","popStencil",81,82,"./Shader",83,84,"textureCount","init","compile","cacheUniformLocations","cacheAttributeLocations","_glCompile","uniform1i","uniform2f","uniform3f","uniform4f","uniform1iv","uniform2iv","uniform3iv","uniform4iv","uniform1fv","uniform2fv","uniform3fv","uniform4fv","uniformMatrix2fv","uniformMatrix4fv","_array","initSampler2D","textureData","luminance","LUMINANCE","wrapS","wrapT",85,"customUniforms","customAttributes","uSampler",86,87,"../managers/WebGLManager",88,"colors","rect2",89,"StencilMaskStack","frameBuffer","stencilBuffer","projectionFrame","calculateProjection","viewport","pm","./StencilMaskStack",90,91,"ONE","ONE_MINUS_SRC_ALPHA","SRC_ALPHA","DST_ALPHA","DST_COLOR",92,93,"cachedTint","textureDirty","vertexDirty","vertexData","sign","_onTextureUpdate","caclulateVertices","valid","smoothingEnabled","tintedTexture","destroyBaseTexture","fromFrame","frameId","TextureCache","fromImage","imageId","crossorigin","../renderers/canvas/utils/CanvasTinter",94,"numVerts","positions","Uint32Array","createIndicesForQuads","groupCount","groups","textures","ids","blend","currentGroup","currentTexture","generateMultiTextureShader","MAX_TEXTUES","MAX_TEXTURE_IMAGE_UNITS","_shader","vao","aTextureId","nextTexture","_enabled","_id","uvs_uint32","currentBatchSize","subarray","group","sprites","../../renderers/webgl/shaders/_TextureShader","../../utils/createIndicesForQuads","./generateMultiTextureShader",95,"maxTextures","generateSampleSrc","fragTemplate","sampleValues","uSamplers",96,"_text","_style","fontPropertiesCache","fontPropertiesCanvas","fontPropertiesContext","updateText","dropShadowColor","font","align","strokeThickness","wordWrap","wordWrapWidth","dropShadow","dropShadowAngle","dropShadowDistance","dropShadowBlur","textBaseline","lineJoin","miterLimit","outputText","lines","lineWidths","maxLineWidth","fontProperties","determineFontProperties","measureText","lineHeight","fontSize","linePositionX","linePositionY","shadowColor","shadowBlur","xShadowOffset","yShadowOffset","ascent","fillText","strokeText","fontStyle","baseline","imagedata","line","descent","spaceLeft","words","wordWidth","wordWidthWithSpace","../sprites/Sprite",97,"realWidth","realHeight","isLoading","imageUrl","isPowerOfTwo","_active","loadSource","naturalWidth","naturalHeight","wasLoading","_sourceLoaded","scope","BaseTextureCache","_pixiId","dispose","updateSourceImage","newSrc","image","getResolutionOfUrl",98,"textureBuffer","_updateUvs","updateBase","currentBounds","cachedWt","realResolution","getImage","getBase64","getCanvas","webGLPixels","Uint8Array","readPixels","tempCanvas","canvasData","getPixels","getPixel","../renderers/webgl/managers/FilterManager","../renderers/webgl/utils/RenderTarget","./BaseTexture","./Texture",99,"noFrame","requiresUpdate","onBaseTextureUpdated","onBaseTextureLoaded","destroyBase","fromVideo","video","fromVideoUrl","videoUrl","fromUrl","addTextureToCache","removeTextureFromCache","./TextureUvs","./VideoBaseTexture",100,"xy0_uint32","xy1_uint32","xy2_uint32","xy3_uint32","baseFrame","tw","th",101,"readyState","HAVE_ENOUGH_DATA","HAVE_FUTURE_DATA","autoUpdate","_onUpdate","_onCanPlay","_onPlayStart","_onPlayStop","__loaded","createSource","requestAnimationFrame","videoWidth","videoHeight","play","videoSrc","fromUrls",102,"Ticker","_this","_tick","time","_requestId","_emitter","TICK","_maxElapsedMS","autoStart","deltaTime","elapsedMS","lastTime","speed","FPS","minFPS","fps","minFPMS","_requestIfNeeded","performance","now","_cancelIfNeeded","cancelAnimationFrame","_startIfPossible","addOnce","remove","currentTime",103,"shared","./Ticker",104,"totalIndices",105,"_uid","_saidHello","hex","rgb","pngHead","pngEnd","magenta","yellow","getNextPowerOfTwo","number","parseFloat","userAgent","contextOptions","WebGLRenderingContext","getContextAttributes","startIdx","removeCount","./pluginTarget",106,"__plugins","pluginName","ctor",107,"mesh","extras","SpriteBatch","ReferenceError","AssetLoader","Stage","DisplayObjectContainer","Strip","Mesh","Rope","MovieClip","TilingSprite","BitmapText","scaleModes","setTexture","setText","setStyle","setFrame","uuid","./core","./extras","./filters","./mesh",108,"textWidth","textHeight","_glyphs","_font","maxWidth","maxLineHeight","fonts","prevCharCode","chars","lastLineWidth","lastSpace","charCode","charData","kerning","xOffset","yOffset","xAdvance","lineAlignOffsets","alignOffset","lenChars","validate",109,"_textures","_durations","animationSpeed","loop","_currentTime","playing","totalFrames","gotoAndStop","frameNumber","gotoAndPlay","elapsed","lag","fromFrames","frames","fromImages","images",110,"tileScale","tilePosition","_canvasPattern","uFrame","uTransform","uPixelSize","tempUvs","tempWidth","tempHeight","modX","modY","createPattern","_tileScaleOffset","../core/renderers/canvas/utils/CanvasTinter",111,"_cacheAsBitmap","_originalRenderWebGL","_originalRenderCanvas","_originalUpdateTransform","_originalHitTest","_originalDestroy","_cachedSprite","cacheAsBitmap","_originalGetBounds","_originalContainsPoint","_renderCachedWebGL","_renderCachedCanvas","_cacheAsBitmapDestroy","_destroyCachedDisplayObject","_initCachedDisplayObject","cachedRenderTarget","_getCachedBounds","_initCachedDisplayObjectCanvas",112,"getChildByName",113,"getGlobalPosition",114,"./BitmapText","./MovieClip","./TilingSprite","./cacheAsBitmap","./getChildByName","./getGlobalPosition",115,"AsciiFilter","pixelSize","../../core",116,"BloomFilter","blurXFilter","BlurXFilter","blurYFilter","BlurYFilter","defaultFilter","blur","blurX","blurY","../blur/BlurXFilter","../blur/BlurYFilter",117,"BlurDirFilter","dirX","dirY","strength","passes",118,"BlurFilter","./BlurXFilter","./BlurYFilter",119,"flip","flop",120,121,"SmartBlurFilter",122,"ColorMatrixFilter","_loadMatrix","multiply","newMatrix","_multiply","_colorMatrix","brightness","greyscale","grayscale","blackAndWhite","hue","lumR","lumG","lumB","contrast","saturate","desaturate","negative","sepia","technicolor","polaroid","toBGR","kodachrome","browni","vintage","colorTone","desaturation","toned","lightColor","darkColor","lR","lG","lB","dR","dG","dB","night","intensity","predator","lsd",123,"ColorStepFilter",124,"ConvolutionFilter","texelSize",125,"CrossHatchFilter",126,"DisplacementFilter","mapSampler",127,"DotScreenFilter",128,"BlurYTintFilter",129,"DropShadowFilter","blurYTintFilter","_dirtyPosition","_angle","_distance","hideObject","distance","./BlurYTintFilter",130,"GrayFilter","gray",131,"InvertFilter","NoiseFilter","PixelateFilter","RGBSplitFilter","ShockwaveFilter","SepiaFilter","TiltShiftFilter","TiltShiftXFilter","TiltShiftYFilter","TwistFilter","./ascii/AsciiFilter","./bloom/BloomFilter","./blur/BlurDirFilter","./blur/BlurFilter","./blur/BlurXFilter","./blur/BlurYFilter","./blur/SmartBlurFilter","./color/ColorMatrixFilter","./color/ColorStepFilter","./convolution/ConvolutionFilter","./crosshatch/CrossHatchFilter","./displacement/DisplacementFilter","./dot/DotScreenFilter","./dropshadow/DropShadowFilter","./gray/GrayFilter","./invert/InvertFilter","./noise/NoiseFilter","./pixelate/PixelateFilter","./rgb/RGBSplitFilter","./sepia/SepiaFilter","./shockwave/ShockwaveFilter","./tiltshift/TiltShiftFilter","./tiltshift/TiltShiftXFilter","./tiltshift/TiltShiftYFilter","./twist/TwistFilter",132,133,"noise",134,135,"red","green","blue",136,137,"center","params",138,"TiltShiftAxisFilter","gradientBlur","innerHeight","texSize","innerWidth","updateDelta",139,"tiltShiftXFilter","tiltShiftYFilter","./TiltShiftXFilter","./TiltShiftYFilter",140,"./TiltShiftAxisFilter",141,142,143,"loaders","accessibility","loader","./accessibility","./deprecation","./interaction","./loaders","./polyfill",144,"InteractionData","originalEvent","getLocalPosition","globalPos",145,"InteractionManager","autoPreventDefault","interactionFrequency","mouse","stopped","stopPropagation","interactiveDataPool","interactionDOMElement","eventsAdded","onMouseUp","processMouseUp","onMouseDown","processMouseDown","onMouseMove","processMouseMove","onMouseOut","processMouseOverOut","onTouchStart","processTouchStart","onTouchEnd","processTouchEnd","onTouchMove","processTouchMove","currentCursorStyle","_tempPoint","setTargetElement","element","removeEvents","addEvents","msPointerEnabled","_deltaTime","didMove","cursor","processInteractive","eventString","mapPositionToPoint","hitTest","hit","interactiveParent","clientX","clientY","isRightButton","button","which","isDown","_over","buttonMode","defaultCursor","changedTouches","cLength","touchEvent","touchData","getTouchData","returnTouchData","_touchDown","identifier","globalX","globalY","./InteractionData","./interactiveTarget",146,"interactiveTarget","./InteractionManager",147,148,"info","getElementsByTagName","common","getAttribute","letters","textureRect","kernings","first","second","bitmapFont","xmlUrl","textureUrl","loadOptions","imageMetadata","../extras",149,"bitmapFontParser","spritesheetParser","textureParser","./bitmapFontParser","./loader","./spritesheetParser","./textureParser",150,"ResourceLoader","_pixiMiddleware","addPixiMiddleware",151,"route","meta","rotated","trimmed","spriteSourceSize","sourceSize",152,153,"drawMode","canvasPadding","TRIANGLE_MESH","tempPolygon","_renderCanvasTriangleMesh","_renderCanvasTriangles","_renderCanvasDrawTriangle","index0","textureSource","textureWidth","textureHeight","u0","u1","u2","v0","v1","v2","paddingX","paddingY","centerX","centerY","normX","normY","deltaA","deltaB","deltaC","deltaD","deltaE","deltaF","renderMeshFlat","updateFrame","rawX","rawY","ind0","ind1","ind2",154,"Plane","segmentsX","segmentsY","_ready","segmentsXSub","segmentsYSub","sizeX","sizeY","totalSub","xpos","ypos","value2","value3","value4","./Mesh",155,"factor","nextPoint","perpLength","num","perpX","perpY",156,"MeshRenderer","MeshShader","./Plane","./Rope","./webgl/MeshRenderer","./webgl/MeshShader",157,"_vertexBuffer","_initWebGL","meshShader","_uvBuffer","_indexBuffer","_colorBuffer","../Mesh",158,159,"isNaN",160,161,"./Math.sign","./Object.assign","./requestAnimationFrame",162,"Date","getTime","startTime","vendors","delay"],"mappings":"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E,EAAA,GAAAuE,EAAA,GAAAvE,EAAA,GAAAuE,EAAA,IAAAvE,EAAA,GAAAuE,EAAA,IACAwkB,EAAA,GAAA/oB,EAAA,GAAAuE,EAAA,GAAAvE,EAAA,GAAAuE,EAAA,GAAAvE,EAAA,GAAAuE,EAAA,IAAAvE,EAAA,GAAAuE,EAAA,IACAwkB,EAAA,GAAA/oB,EAAA,GAAAuE,EAAA,GAAAvE,EAAA,GAAAuE,EAAA,GAAAvE,EAAA,GAAAuE,EAAA,IAAAvE,EAAA,GAAAuE,EAAA,IAGAwkB,EAAA,GAAA/oB,EAAA,GAAAuE,EAAA,GAAAvE,EAAA,GAAAuE,EAAA,GAAAvE,EAAA,GAAAuE,EAAA,IAAAvE,EAAA,GAAAuE,EAAA,IACAwkB,EAAA,GAAA/oB,EAAA,GAAAuE,EAAA,GAAAvE,EAAA,GAAAuE,EAAA,GAAAvE,EAAA,GAAAuE,EAAA,IAAAvE,EAAA,GAAAuE,EAAA,IACAwkB,EAAA,GAAA/oB,EAAA,GAAAuE,EAAA,GAAAvE,EAAA,GAAAuE,EAAA,GAAAvE,EAAA,GAAAuE,EAAA,IAAAvE,EAAA,GAAAuE,EAAA,IACAwkB,EAAA,GAAA/oB,EAAA,GAAAuE,EAAA,GAAAvE,EAAA,GAAAuE,EAAA,GAAAvE,EAAA,GAAAuE,EAAA,IAAAvE,EAAA,GAAAuE,EAAA,IACAwkB,EAAA,GAAA/oB,EAAA,GAAAuE,EAAA,GAAAvE,EAAA,GAAAuE,EAAA,GAAAvE,EAAA,GAAAuE,EAAA,IAAAvE,EAAA,GAAAuE,EAAA,IAGAwkB,EAAA,IAAA/oB,EAAA,IAAAuE,EAAA,GAAAvE,EAAA,IAAAuE,EAAA,GAAAvE,EAAA,IAAAuE,EAAA,IAAAvE,EAAA,IAAAuE,EAAA,IACAwkB,EAAA,IAAA/oB,EAAA,IAAAuE,EAAA,GAAAvE,EAAA,IAAAuE,EAAA,GAAAvE,EAAA,IAAAuE,EAAA,IAAAvE,EAAA,IAAAuE,EAAA,IACAwkB,EAAA,IAAA/oB,EAAA,IAAAuE,EAAA,GAAAvE,EAAA,IAAAuE,EAAA,GAAAvE,EAAA,IAAAuE,EAAA,IAAAvE,EAAA,IAAAuE,EAAA,IACAwkB,EAAA,IAAA/oB,EAAA,IAAAuE,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","file":"pixi.min.js","sourcesContent":[null],"sourceRoot":"./"} \ No newline at end of file diff --git a/src/core/graphics/webgl/GraphicsRenderer.js b/src/core/graphics/webgl/GraphicsRenderer.js index 279525e..12d80c0 100644 --- a/src/core/graphics/webgl/GraphicsRenderer.js +++ b/src/core/graphics/webgl/GraphicsRenderer.js @@ -4,15 +4,15 @@ ObjectRenderer = require('../../renderers/webgl/utils/ObjectRenderer'), WebGLRenderer = require('../../renderers/webgl/WebGLRenderer'), WebGLGraphicsData = require('./WebGLGraphicsData'), - PrimitiveShader = require('./PrimitiveShader'), + PrimitiveShader = require('./shaders/PrimitiveShader'), // some drawing functions.. - buildLine = require('../buildLine'); - buildPoly = require('../buildPoly'); - buildComplexPoly = require('../buildComplexPoly'); - buildRectangle = require('../buildRectangle'); - buildRoundedRectangle = require('../buildRoundedRectangle'); - buildCircle = require('../buildCircle'); + buildLine = require('./utils/buildLine'); + buildPoly = require('./utils/buildPoly'); + buildComplexPoly = require('./utils/buildComplexPoly'); + buildRectangle = require('./utils/buildRectangle'); + buildRoundedRectangle = require('./utils/buildRoundedRectangle'); + buildCircle = require('./utils/buildCircle'); earcut = require('earcut'); diff --git a/src/core/graphics/webgl/PrimitiveShader.js b/src/core/graphics/webgl/PrimitiveShader.js deleted file mode 100644 index 44166b3..0000000 --- a/src/core/graphics/webgl/PrimitiveShader.js +++ /dev/null @@ -1,50 +0,0 @@ -var Shader = require('pixi-gl-core').GLShader; - -/** - * This shader is used to draw simple primitive shapes for {@link PIXI.Graphics}. - * - * @class - * @memberof PIXI - * @extends PIXI.Shader - * @param shaderManager {ShaderManager} The webgl shader manager this shader works for. - */ -function PrimitiveShader(gl) -{ - Shader.call(this, - gl, - // vertex shader - [ - 'attribute vec2 aVertexPosition;', - 'attribute vec4 aColor;', - - 'uniform mat3 translationMatrix;', - 'uniform mat3 projectionMatrix;', - - 'uniform float alpha;', - 'uniform float flipY;', - 'uniform vec3 tint;', - - 'varying vec4 vColor;', - - 'void main(void){', - ' gl_Position = vec4((projectionMatrix * translationMatrix * vec3(aVertexPosition, 1.0)).xy, 0.0, 1.0);', - ' vColor = aColor * vec4(tint * alpha, alpha);', - '}' - ].join('\n'), - // fragment shader - [ - 'precision mediump float;', - - 'varying vec4 vColor;', - - 'void main(void){', - ' gl_FragColor = vColor;', - '}' - ].join('\n') - ); -} - -PrimitiveShader.prototype = Object.create(Shader.prototype); -PrimitiveShader.prototype.constructor = PrimitiveShader; - -module.exports = PrimitiveShader; diff --git a/src/core/graphics/webgl/buildRoundedRectangle.js b/src/core/graphics/webgl/buildRoundedRectangle.js deleted file mode 100644 index 55bb1b4..0000000 --- a/src/core/graphics/webgl/buildRoundedRectangle.js +++ /dev/null @@ -1,127 +0,0 @@ -var buildLine = require('./buildLine'), - utils = require('../../utils'); - -/** - * Builds a rounded rectangle to draw - * - * @private - * @param graphicsData {PIXI.Graphics} The graphics object containing all the necessary properties - * @param webGLData {object} an object containing all the webGL-specific information to create this shape - */ -buildRoundedRectangle = function (graphicsData, webGLData) -{ - var rrectData = graphicsData.shape; - var x = rrectData.x; - var y = rrectData.y; - var width = rrectData.width; - var height = rrectData.height; - - var radius = rrectData.radius; - - var recPoints = []; - recPoints.push(x, y + radius); - this.quadraticBezierCurve(x, y + height - radius, x, y + height, x + radius, y + height, recPoints); - this.quadraticBezierCurve(x + width - radius, y + height, x + width, y + height, x + width, y + height - radius, recPoints); - this.quadraticBezierCurve(x + width, y + radius, x + width, y, x + width - radius, y, recPoints); - this.quadraticBezierCurve(x + radius, y, x, y, x, y + radius + 0.0000000001, recPoints); - - // this tiny number deals with the issue that occurs when points overlap and earcut fails to triangulate the item. - // TODO - fix this properly, this is not very elegant.. but it works for now. - - if (graphicsData.fill) - { - var color = utils.hex2rgb(graphicsData.fillColor); - var alpha = graphicsData.fillAlpha; - - var r = color[0] * alpha; - var g = color[1] * alpha; - var b = color[2] * alpha; - - var verts = webGLData.points; - var indices = webGLData.indices; - - var vecPos = verts.length/6; - - var triangles = earcut(recPoints, null, 2); - - var i = 0; - for (i = 0; i < triangles.length; i+=3) - { - indices.push(triangles[i] + vecPos); - indices.push(triangles[i] + vecPos); - indices.push(triangles[i+1] + vecPos); - indices.push(triangles[i+2] + vecPos); - indices.push(triangles[i+2] + vecPos); - } - - for (i = 0; i < recPoints.length; i++) - { - verts.push(recPoints[i], recPoints[++i], r, g, b, alpha); - } - } - - if (graphicsData.lineWidth) - { - var tempPoints = graphicsData.points; - - graphicsData.points = recPoints; - - this.buildLine(graphicsData, webGLData); - - graphicsData.points = tempPoints; - } -}; - -/** - * Calculate the points for a quadratic bezier curve. (helper function..) - * Based on: https://stackoverflow.com/questions/785097/how-do-i-implement-a-bezier-curve-in-c - * - * @private - * @param fromX {number} Origin point x - * @param fromY {number} Origin point x - * @param cpX {number} Control point x - * @param cpY {number} Control point y - * @param toX {number} Destination point x - * @param toY {number} Destination point y - * @param [out] {number[]} The output array to add points into. If not passed, a new array is created. - * @return {number[]} an array of points - */ -quadraticBezierCurve = function (fromX, fromY, cpX, cpY, toX, toY, out) -{ - var xa, - ya, - xb, - yb, - x, - y, - n = 20, - points = out || []; - - function getPt(n1 , n2, perc) { - var diff = n2 - n1; - - return n1 + ( diff * perc ); - } - - var j = 0; - for (var i = 0; i <= n; i++ ) { - j = i / n; - - // The Green Line - xa = getPt( fromX , cpX , j ); - ya = getPt( fromY , cpY , j ); - xb = getPt( cpX , toX , j ); - yb = getPt( cpY , toY , j ); - - // The Black Dot - x = getPt( xa , xb , j ); - y = getPt( ya , yb , j ); - - points.push(x, y); - } - - return points; -}; - - -module.exports = buildRoundedRectangle; \ No newline at end of file diff --git a/src/core/graphics/webgl/shaders/PrimitiveShader.js b/src/core/graphics/webgl/shaders/PrimitiveShader.js new file mode 100644 index 0000000..44166b3 --- /dev/null +++ b/src/core/graphics/webgl/shaders/PrimitiveShader.js @@ -0,0 +1,50 @@ +var Shader = require('pixi-gl-core').GLShader; + +/** + * This shader is used to draw simple primitive shapes for {@link PIXI.Graphics}. + * + * @class + * @memberof PIXI + * @extends PIXI.Shader + * @param shaderManager {ShaderManager} The webgl shader manager this shader works for. + */ +function PrimitiveShader(gl) +{ + Shader.call(this, + gl, + // vertex shader + [ + 'attribute vec2 aVertexPosition;', + 'attribute vec4 aColor;', + + 'uniform mat3 translationMatrix;', + 'uniform mat3 projectionMatrix;', + + 'uniform float alpha;', + 'uniform float flipY;', + 'uniform vec3 tint;', + + 'varying vec4 vColor;', + + 'void main(void){', + ' gl_Position = vec4((projectionMatrix * translationMatrix * vec3(aVertexPosition, 1.0)).xy, 0.0, 1.0);', + ' vColor = aColor * vec4(tint * alpha, alpha);', + '}' + ].join('\n'), + // fragment shader + [ + 'precision mediump float;', + + 'varying vec4 vColor;', + + 'void main(void){', + ' gl_FragColor = vColor;', + '}' + ].join('\n') + ); +} + +PrimitiveShader.prototype = Object.create(Shader.prototype); +PrimitiveShader.prototype.constructor = PrimitiveShader; + +module.exports = PrimitiveShader; diff --git a/src/core/graphics/webgl/utils/buildCircle.js b/src/core/graphics/webgl/utils/buildCircle.js index cc39fe0..f7d9eeb 100644 --- a/src/core/graphics/webgl/utils/buildCircle.js +++ b/src/core/graphics/webgl/utils/buildCircle.js @@ -76,7 +76,7 @@ y + Math.cos(seg * i) * height); } - this.buildLine(graphicsData, webGLData); + buildLine(graphicsData, webGLData); graphicsData.points = tempPoints; } diff --git a/src/core/graphics/webgl/utils/buildLine.js b/src/core/graphics/webgl/utils/buildLine.js index 6b73ac5..8d76567 100644 --- a/src/core/graphics/webgl/utils/buildLine.js +++ b/src/core/graphics/webgl/utils/buildLine.js @@ -1,4 +1,4 @@ -var math = require('../../math'), +var math = require('../../../math'), utils = require('../../../utils'); /** diff --git a/bin/pixi.js b/bin/pixi.js index b57ad10..40862ec 100644 --- a/bin/pixi.js +++ b/bin/pixi.js @@ -1,7 +1,7 @@ /** * @license * pixi.js - v3.0.10-dev - * Compiled 2016-01-17T18:07:22.522Z + * Compiled 2016-01-17T18:16:46.120Z * * pixi.js is licensed under the MIT License. * http://www.opensource.org/licenses/mit-license.php @@ -10864,15 +10864,15 @@ ObjectRenderer = require('../../renderers/webgl/utils/ObjectRenderer'), WebGLRenderer = require('../../renderers/webgl/WebGLRenderer'), WebGLGraphicsData = require('./WebGLGraphicsData'), - PrimitiveShader = require('./PrimitiveShader'), + PrimitiveShader = require('./shaders/PrimitiveShader'), // some drawing functions.. - buildLine = require('./buildLine'); - buildPoly = require('./buildPoly'); - buildComplexPoly = require('./buildComplexPoly'); - buildRectangle = require('./buildRectangle'); - buildRoundedRectangle = require('./buildRoundedRectangle'); - buildCircle = require('./buildCircle'); + buildLine = require('./utils/buildLine'); + buildPoly = require('./utils/buildPoly'); + buildComplexPoly = require('./utils/buildComplexPoly'); + buildRectangle = require('./utils/buildRectangle'); + buildRoundedRectangle = require('./utils/buildRoundedRectangle'); + buildCircle = require('./utils/buildCircle'); earcut = require('earcut'); @@ -11177,59 +11177,7 @@ }; -},{"../../const":38,"../../math":55,"../../renderers/webgl/WebGLRenderer":72,"../../renderers/webgl/utils/ObjectRenderer":87,"../../utils":105,"./PrimitiveShader":44,"./WebGLGraphicsData":45,"./buildCircle":46,"./buildComplexPoly":47,"./buildLine":48,"./buildPoly":49,"./buildRectangle":50,"./buildRoundedRectangle":51,"earcut":24}],44:[function(require,module,exports){ -var Shader = require('pixi-gl-core').GLShader; - -/** - * This shader is used to draw simple primitive shapes for {@link PIXI.Graphics}. - * - * @class - * @memberof PIXI - * @extends PIXI.Shader - * @param shaderManager {ShaderManager} The webgl shader manager this shader works for. - */ -function PrimitiveShader(gl) -{ - Shader.call(this, - gl, - // vertex shader - [ - 'attribute vec2 aVertexPosition;', - 'attribute vec4 aColor;', - - 'uniform mat3 translationMatrix;', - 'uniform mat3 projectionMatrix;', - - 'uniform float alpha;', - 'uniform float flipY;', - 'uniform vec3 tint;', - - 'varying vec4 vColor;', - - 'void main(void){', - ' gl_Position = vec4((projectionMatrix * translationMatrix * vec3(aVertexPosition, 1.0)).xy, 0.0, 1.0);', - ' vColor = aColor * vec4(tint * alpha, alpha);', - '}' - ].join('\n'), - // fragment shader - [ - 'precision mediump float;', - - 'varying vec4 vColor;', - - 'void main(void){', - ' gl_FragColor = vColor;', - '}' - ].join('\n') - ); -} - -PrimitiveShader.prototype = Object.create(Shader.prototype); -PrimitiveShader.prototype.constructor = PrimitiveShader; - -module.exports = PrimitiveShader; - -},{"pixi-gl-core":1}],45:[function(require,module,exports){ +},{"../../const":38,"../../math":55,"../../renderers/webgl/WebGLRenderer":72,"../../renderers/webgl/utils/ObjectRenderer":87,"../../utils":105,"./WebGLGraphicsData":44,"./shaders/PrimitiveShader":45,"./utils/buildCircle":46,"./utils/buildComplexPoly":47,"./utils/buildLine":48,"./utils/buildPoly":49,"./utils/buildRectangle":50,"./utils/buildRoundedRectangle":51,"earcut":24}],44:[function(require,module,exports){ /** * An object containing WebGL specific properties to be used by the WebGL renderer * @@ -11347,9 +11295,61 @@ this.glIndices = null; }; -},{}],46:[function(require,module,exports){ +},{}],45:[function(require,module,exports){ +var Shader = require('pixi-gl-core').GLShader; + +/** + * This shader is used to draw simple primitive shapes for {@link PIXI.Graphics}. + * + * @class + * @memberof PIXI + * @extends PIXI.Shader + * @param shaderManager {ShaderManager} The webgl shader manager this shader works for. + */ +function PrimitiveShader(gl) +{ + Shader.call(this, + gl, + // vertex shader + [ + 'attribute vec2 aVertexPosition;', + 'attribute vec4 aColor;', + + 'uniform mat3 translationMatrix;', + 'uniform mat3 projectionMatrix;', + + 'uniform float alpha;', + 'uniform float flipY;', + 'uniform vec3 tint;', + + 'varying vec4 vColor;', + + 'void main(void){', + ' gl_Position = vec4((projectionMatrix * translationMatrix * vec3(aVertexPosition, 1.0)).xy, 0.0, 1.0);', + ' vColor = aColor * vec4(tint * alpha, alpha);', + '}' + ].join('\n'), + // fragment shader + [ + 'precision mediump float;', + + 'varying vec4 vColor;', + + 'void main(void){', + ' gl_FragColor = vColor;', + '}' + ].join('\n') + ); +} + +PrimitiveShader.prototype = Object.create(Shader.prototype); +PrimitiveShader.prototype.constructor = PrimitiveShader; + +module.exports = PrimitiveShader; + +},{"pixi-gl-core":1}],46:[function(require,module,exports){ var buildLine = require('./buildLine'), - utils = require('../../utils'); + utils = require('../../../utils'); /** * Builds a circle to draw @@ -11426,7 +11426,7 @@ y + Math.cos(seg * i) * height); } - this.buildLine(graphicsData, webGLData); + buildLine(graphicsData, webGLData); graphicsData.points = tempPoints; } @@ -11434,9 +11434,9 @@ module.exports = buildCircle; -},{"../../utils":105,"./buildLine":48}],47:[function(require,module,exports){ +},{"../../../utils":105,"./buildLine":48}],47:[function(require,module,exports){ var buildLine = require('./buildLine'), - utils = require('../../utils'); + utils = require('../../../utils'); @@ -11505,9 +11505,9 @@ module.exports = buildComplexPoly; -},{"../../utils":105,"./buildLine":48}],48:[function(require,module,exports){ -var math = require('../../math'), - utils = require('../../utils'); +},{"../../../utils":105,"./buildLine":48}],48:[function(require,module,exports){ +var math = require('../../../math'), + utils = require('../../../utils'); /** * Builds a line to draw @@ -11725,8 +11725,8 @@ }; module.exports = buildLine; -},{"../../math":55,"../../utils":105}],49:[function(require,module,exports){ -var utils = require('../../utils'); +},{"../../../math":55,"../../../utils":105}],49:[function(require,module,exports){ +var utils = require('../../../utils'); /** * Builds a polygon to draw @@ -11788,9 +11788,9 @@ module.exports = buildPoly; -},{"../../utils":105}],50:[function(require,module,exports){ +},{"../../../utils":105}],50:[function(require,module,exports){ var buildLine = require('./buildLine'), - utils = require('../../utils'); + utils = require('../../../utils'); /** * Builds a rectangle to draw @@ -11859,9 +11859,9 @@ }; module.exports = buildRectangle; -},{"../../utils":105,"./buildLine":48}],51:[function(require,module,exports){ +},{"../../../utils":105,"./buildLine":48}],51:[function(require,module,exports){ var buildLine = require('./buildLine'), - utils = require('../../utils'); + utils = require('../../../utils'); /** * Builds a rounded rectangle to draw @@ -11987,7 +11987,7 @@ module.exports = buildRoundedRectangle; -},{"../../utils":105,"./buildLine":48}],52:[function(require,module,exports){ +},{"../../../utils":105,"./buildLine":48}],52:[function(require,module,exports){ /** * @file Main export of the PIXI core library * @author Mat Groves @@ -30075,6 +30075,6 @@ },{}]},{},[143])(143) }); -//# sourceMappingURL=data:application/json;charset:utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIm5vZGVfbW9kdWxlcy9icm93c2VyaWZ5L25vZGVfbW9kdWxlcy9icm93c2VyLXBhY2svX3ByZWx1ZGUuanMiLCIuLi9waXhpLWdsLWNvcmUvaW5kZXguanMiLCIuLi9waXhpLWdsLWNvcmUvbGliL0dMQnVmZmVyLmpzIiwiLi4vcGl4aS1nbC1jb3JlL2xpYi9HTEZyYW1lYnVmZmVyLmpzIiwiLi4vcGl4aS1nbC1jb3JlL2xpYi9HTFNoYWRlci5qcyIsIi4uL3BpeGktZ2wtY29yZS9saWIvR0xUZXh0dXJlLmpzIiwiLi4vcGl4aS1nbC1jb3JlL2xpYi9WZXJ0ZXhBcnJheU9iamVjdC5qcyIsIi4uL3BpeGktZ2wtY29yZS9saWIvY3JlYXRlQ29udGV4dC5qcyIsIi4uL3BpeGktZ2wtY29yZS9saWIvc2V0VmVydGV4QXR0cmliQXJyYXlzLmpzIiwiLi4vcGl4aS1nbC1jb3JlL2xpYi9zaGFkZXIvY29tcGlsZVByb2dyYW0uanMiLCIuLi9waXhpLWdsLWNvcmUvbGliL3NoYWRlci9kZWZhdWx0VmFsdWUuanMiLCIuLi9waXhpLWdsLWNvcmUvbGliL3NoYWRlci9leHRyYWN0QXR0cmlidXRlcy5qcyIsIi4uL3BpeGktZ2wtY29yZS9saWIvc2hhZGVyL2V4dHJhY3RVbmlmb3Jtcy5qcyIsIi4uL3BpeGktZ2wtY29yZS9saWIvc2hhZGVyL2dlbmVyYXRlVW5pZm9ybUFjY2Vzc09iamVjdC5qcyIsIi4uL3BpeGktZ2wtY29yZS9saWIvc2hhZGVyL21hcFNpemUuanMiLCIuLi9waXhpLWdsLWNvcmUvbGliL3NoYWRlci9tYXBUeXBlLmpzIiwibm9kZV9tb2R1bGVzL2FzeW5jL2xpYi9hc3luYy5qcyIsIm5vZGVfbW9kdWxlcy9icm93c2VyaWZ5L25vZGVfbW9kdWxlcy9wYXRoLWJyb3dzZXJpZnkvaW5kZXguanMiLCJub2RlX21vZHVsZXMvYnJvd3NlcmlmeS9ub2RlX21vZHVsZXMvcHJvY2Vzcy9icm93c2VyLmpzIiwibm9kZV9tb2R1bGVzL2Jyb3dzZXJpZnkvbm9kZV9tb2R1bGVzL3B1bnljb2RlL3B1bnljb2RlLmpzIiwibm9kZV9tb2R1bGVzL2Jyb3dzZXJpZnkvbm9kZV9tb2R1bGVzL3F1ZXJ5c3RyaW5nLWVzMy9kZWNvZGUuanMiLCJub2RlX21vZHVsZXMvYnJvd3NlcmlmeS9ub2RlX21vZHVsZXMvcXVlcnlzdHJpbmctZXMzL2VuY29kZS5qcyIsIm5vZGVfbW9kdWxlcy9icm93c2VyaWZ5L25vZGVfbW9kdWxlcy9xdWVyeXN0cmluZy1lczMvaW5kZXguanMiLCJub2RlX21vZHVsZXMvYnJvd3NlcmlmeS9ub2RlX21vZHVsZXMvdXJsL3VybC5qcyIsIm5vZGVfbW9kdWxlcy9lYXJjdXQvc3JjL2VhcmN1dC5qcyIsIm5vZGVfbW9kdWxlcy9ldmVudGVtaXR0ZXIzL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL29iamVjdC1hc3NpZ24vaW5kZXguanMiLCJub2RlX21vZHVsZXMvcmVzb3VyY2UtbG9hZGVyL25vZGVfbW9kdWxlcy9hc3luYy9saWIvYXN5bmMuanMiLCJub2RlX21vZHVsZXMvcmVzb3VyY2UtbG9hZGVyL3NyYy9Mb2FkZXIuanMiLCJub2RlX21vZHVsZXMvcmVzb3VyY2UtbG9hZGVyL3NyYy9SZXNvdXJjZS5qcyIsIm5vZGVfbW9kdWxlcy9yZXNvdXJjZS1sb2FkZXIvc3JjL2I2NC5qcyIsIm5vZGVfbW9kdWxlcy9yZXNvdXJjZS1sb2FkZXIvc3JjL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL3Jlc291cmNlLWxvYWRlci9zcmMvbWlkZGxld2FyZXMvY2FjaGluZy9tZW1vcnkuanMiLCJub2RlX21vZHVsZXMvcmVzb3VyY2UtbG9hZGVyL3NyYy9taWRkbGV3YXJlcy9wYXJzaW5nL2Jsb2IuanMiLCJwYWNrYWdlLmpzb24iLCJzcmMvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5TWFuYWdlci5qcyIsInNyYy9hY2Nlc3NpYmlsaXR5L2FjY2Vzc2libGVUYXJnZXQuanMiLCJzcmMvYWNjZXNzaWJpbGl0eS9pbmRleC5qcyIsInNyYy9jb3JlL2NvbnN0LmpzIiwic3JjL2NvcmUvZGlzcGxheS9Db250YWluZXIuanMiLCJzcmMvY29yZS9kaXNwbGF5L0Rpc3BsYXlPYmplY3QuanMiLCJzcmMvY29yZS9ncmFwaGljcy9HcmFwaGljcy5qcyIsInNyYy9jb3JlL2dyYXBoaWNzL0dyYXBoaWNzRGF0YS5qcyIsInNyYy9jb3JlL2dyYXBoaWNzL3dlYmdsL0dyYXBoaWNzUmVuZGVyZXIuanMiLCJzcmMvY29yZS9ncmFwaGljcy93ZWJnbC9QcmltaXRpdmVTaGFkZXIuanMiLCJzcmMvY29yZS9ncmFwaGljcy93ZWJnbC9XZWJHTEdyYXBoaWNzRGF0YS5qcyIsInNyYy9jb3JlL2dyYXBoaWNzL3dlYmdsL2J1aWxkQ2lyY2xlLmpzIiwic3JjL2NvcmUvZ3JhcGhpY3Mvd2ViZ2wvYnVpbGRDb21wbGV4UG9seS5qcyIsInNyYy9jb3JlL2dyYXBoaWNzL3dlYmdsL2J1aWxkTGluZS5qcyIsInNyYy9jb3JlL2dyYXBoaWNzL3dlYmdsL2J1aWxkUG9seS5qcyIsInNyYy9jb3JlL2dyYXBoaWNzL3dlYmdsL2J1aWxkUmVjdGFuZ2xlLmpzIiwic3JjL2NvcmUvZ3JhcGhpY3Mvd2ViZ2wvYnVpbGRSb3VuZGVkUmVjdGFuZ2xlLmpzIiwic3JjL2NvcmUvaW5kZXguanMiLCJzcmMvY29yZS9tYXRoL01hdHJpeC5qcyIsInNyYy9jb3JlL21hdGgvUG9pbnQuanMiLCJzcmMvY29yZS9tYXRoL2luZGV4LmpzIiwic3JjL2NvcmUvbWF0aC9zaGFwZXMvQ2lyY2xlLmpzIiwic3JjL2NvcmUvbWF0aC9zaGFwZXMvRWxsaXBzZS5qcyIsInNyYy9jb3JlL21hdGgvc2hhcGVzL1BvbHlnb24uanMiLCJzcmMvY29yZS9tYXRoL3NoYXBlcy9SZWN0YW5nbGUuanMiLCJzcmMvY29yZS9tYXRoL3NoYXBlcy9Sb3VuZGVkUmVjdGFuZ2xlLmpzIiwic3JjL2NvcmUvcGFydGljbGVzL1BhcnRpY2xlQ29udGFpbmVyLmpzIiwic3JjL2NvcmUvcGFydGljbGVzL3dlYmdsL1BhcnRpY2xlQnVmZmVyLmpzIiwic3JjL2NvcmUvcGFydGljbGVzL3dlYmdsL1BhcnRpY2xlUmVuZGVyZXIuanMiLCJzcmMvY29yZS9wYXJ0aWNsZXMvd2ViZ2wvUGFydGljbGVTaGFkZXIuanMiLCJzcmMvY29yZS9yZW5kZXJlcnMvU3lzdGVtUmVuZGVyZXIuanMiLCJzcmMvY29yZS9yZW5kZXJlcnMvY2FudmFzL0NhbnZhc1JlbmRlcmVyLmpzIiwic3JjL2NvcmUvcmVuZGVyZXJzL2NhbnZhcy91dGlscy9DYW52YXNCdWZmZXIuanMiLCJzcmMvY29yZS9yZW5kZXJlcnMvY2FudmFzL3V0aWxzL0NhbnZhc0dyYXBoaWNzLmpzIiwic3JjL2NvcmUvcmVuZGVyZXJzL2NhbnZhcy91dGlscy9DYW52YXNNYXNrTWFuYWdlci5qcyIsInNyYy9jb3JlL3JlbmRlcmVycy9jYW52YXMvdXRpbHMvQ2FudmFzVGludGVyLmpzIiwic3JjL2NvcmUvcmVuZGVyZXJzL3dlYmdsL1RleHR1cmVNYW5hZ2VyLmpzIiwic3JjL2NvcmUvcmVuZGVyZXJzL3dlYmdsL1dlYkdMUmVuZGVyZXIuanMiLCJzcmMvY29yZS9yZW5kZXJlcnMvd2ViZ2wvZmlsdGVycy9BYnN0cmFjdEZpbHRlci5qcyIsInNyYy9jb3JlL3JlbmRlcmVycy93ZWJnbC9maWx0ZXJzL0ZYQUFGaWx0ZXIuanMiLCJzcmMvY29yZS9yZW5kZXJlcnMvd2ViZ2wvZmlsdGVycy9TcHJpdGVNYXNrRmlsdGVyLmpzIiwic3JjL2NvcmUvcmVuZGVyZXJzL3dlYmdsL21hbmFnZXJzL0JsZW5kTW9kZU1hbmFnZXIuanMiLCJzcmMvY29yZS9yZW5kZXJlcnMvd2ViZ2wvbWFuYWdlcnMvRmlsdGVyTWFuYWdlci5qcyIsInNyYy9jb3JlL3JlbmRlcmVycy93ZWJnbC9tYW5hZ2Vycy9NYXNrTWFuYWdlci5qcyIsInNyYy9jb3JlL3JlbmRlcmVycy93ZWJnbC9tYW5hZ2Vycy9TaGFkZXJNYW5hZ2VyLmpzIiwic3JjL2NvcmUvcmVuZGVyZXJzL3dlYmdsL21hbmFnZXJzL1N0ZW5jaWxNYW5hZ2VyLmpzIiwic3JjL2NvcmUvcmVuZGVyZXJzL3dlYmdsL21hbmFnZXJzL1dlYkdMTWFuYWdlci5qcyIsInNyYy9jb3JlL3JlbmRlcmVycy93ZWJnbC9zaGFkZXJzL0NvbXBsZXhQcmltaXRpdmVTaGFkZXIuanMiLCJzcmMvY29yZS9yZW5kZXJlcnMvd2ViZ2wvc2hhZGVycy9QcmltaXRpdmVTaGFkZXIuanMiLCJzcmMvY29yZS9yZW5kZXJlcnMvd2ViZ2wvc2hhZGVycy9TaGFkZXIuanMiLCJzcmMvY29yZS9yZW5kZXJlcnMvd2ViZ2wvc2hhZGVycy9UZXh0dXJlU2hhZGVyLmpzIiwic3JjL2NvcmUvcmVuZGVyZXJzL3dlYmdsL3NoYWRlcnMvX1RleHR1cmVTaGFkZXIuanMiLCJzcmMvY29yZS9yZW5kZXJlcnMvd2ViZ2wvdXRpbHMvT2JqZWN0UmVuZGVyZXIuanMiLCJzcmMvY29yZS9yZW5kZXJlcnMvd2ViZ2wvdXRpbHMvUXVhZC5qcyIsInNyYy9jb3JlL3JlbmRlcmVycy93ZWJnbC91dGlscy9SZW5kZXJUYXJnZXQuanMiLCJzcmMvY29yZS9yZW5kZXJlcnMvd2ViZ2wvdXRpbHMvU3RlbmNpbE1hc2tTdGFjay5qcyIsInNyYy9jb3JlL3JlbmRlcmVycy93ZWJnbC91dGlscy9tYXBXZWJHTEJsZW5kTW9kZXNUb1BpeGkuanMiLCJzcmMvY29yZS9yZW5kZXJlcnMvd2ViZ2wvdXRpbHMvbWFwV2ViR0xEcmF3TW9kZXNUb1BpeGkuanMiLCJzcmMvY29yZS9zcHJpdGVzL1Nwcml0ZS5qcyIsInNyYy9jb3JlL3Nwcml0ZXMvd2ViZ2wvU3ByaXRlUmVuZGVyZXIuanMiLCJzcmMvY29yZS9zcHJpdGVzL3dlYmdsL2dlbmVyYXRlTXVsdGlUZXh0dXJlU2hhZGVyLmpzIiwic3JjL2NvcmUvdGV4dC9UZXh0LmpzIiwic3JjL2NvcmUvdGV4dHVyZXMvQmFzZVRleHR1cmUuanMiLCJzcmMvY29yZS90ZXh0dXJlcy9SZW5kZXJUZXh0dXJlLmpzIiwic3JjL2NvcmUvdGV4dHVyZXMvVGV4dHVyZS5qcyIsInNyYy9jb3JlL3RleHR1cmVzL1RleHR1cmVVdnMuanMiLCJzcmMvY29yZS90ZXh0dXJlcy9WaWRlb0Jhc2VUZXh0dXJlLmpzIiwic3JjL2NvcmUvdGlja2VyL1RpY2tlci5qcyIsInNyYy9jb3JlL3RpY2tlci9pbmRleC5qcyIsInNyYy9jb3JlL3V0aWxzL2NyZWF0ZUluZGljZXNGb3JRdWFkcy5qcyIsInNyYy9jb3JlL3V0aWxzL2luZGV4LmpzIiwic3JjL2NvcmUvdXRpbHMvcGx1Z2luVGFyZ2V0LmpzIiwic3JjL2RlcHJlY2F0aW9uLmpzIiwic3JjL2V4dHJhcy9CaXRtYXBUZXh0LmpzIiwic3JjL2V4dHJhcy9Nb3ZpZUNsaXAuanMiLCJzcmMvZXh0cmFzL1RpbGluZ1Nwcml0ZS5qcyIsInNyYy9leHRyYXMvY2FjaGVBc0JpdG1hcC5qcyIsInNyYy9leHRyYXMvZ2V0Q2hpbGRCeU5hbWUuanMiLCJzcmMvZXh0cmFzL2dldEdsb2JhbFBvc2l0aW9uLmpzIiwic3JjL2V4dHJhcy9pbmRleC5qcyIsInNyYy9maWx0ZXJzL2FzY2lpL0FzY2lpRmlsdGVyLmpzIiwic3JjL2ZpbHRlcnMvYmxvb20vQmxvb21GaWx0ZXIuanMiLCJzcmMvZmlsdGVycy9ibHVyL0JsdXJEaXJGaWx0ZXIuanMiLCJzcmMvZmlsdGVycy9ibHVyL0JsdXJGaWx0ZXIuanMiLCJzcmMvZmlsdGVycy9ibHVyL0JsdXJYRmlsdGVyLmpzIiwic3JjL2ZpbHRlcnMvYmx1ci9CbHVyWUZpbHRlci5qcyIsInNyYy9maWx0ZXJzL2JsdXIvU21hcnRCbHVyRmlsdGVyLmpzIiwic3JjL2ZpbHRlcnMvY29sb3IvQ29sb3JNYXRyaXhGaWx0ZXIuanMiLCJzcmMvZmlsdGVycy9jb2xvci9Db2xvclN0ZXBGaWx0ZXIuanMiLCJzcmMvZmlsdGVycy9jb252b2x1dGlvbi9Db252b2x1dGlvbkZpbHRlci5qcyIsInNyYy9maWx0ZXJzL2Nyb3NzaGF0Y2gvQ3Jvc3NIYXRjaEZpbHRlci5qcyIsInNyYy9maWx0ZXJzL2Rpc3BsYWNlbWVudC9EaXNwbGFjZW1lbnRGaWx0ZXIuanMiLCJzcmMvZmlsdGVycy9kb3QvRG90U2NyZWVuRmlsdGVyLmpzIiwic3JjL2ZpbHRlcnMvZHJvcHNoYWRvdy9CbHVyWVRpbnRGaWx0ZXIuanMiLCJzcmMvZmlsdGVycy9kcm9wc2hhZG93L0Ryb3BTaGFkb3dGaWx0ZXIuanMiLCJzcmMvZmlsdGVycy9ncmF5L0dyYXlGaWx0ZXIuanMiLCJzcmMvZmlsdGVycy9pbmRleC5qcyIsInNyYy9maWx0ZXJzL2ludmVydC9JbnZlcnRGaWx0ZXIuanMiLCJzcmMvZmlsdGVycy9ub2lzZS9Ob2lzZUZpbHRlci5qcyIsInNyYy9maWx0ZXJzL3BpeGVsYXRlL1BpeGVsYXRlRmlsdGVyLmpzIiwic3JjL2ZpbHRlcnMvcmdiL1JHQlNwbGl0RmlsdGVyLmpzIiwic3JjL2ZpbHRlcnMvc2VwaWEvU2VwaWFGaWx0ZXIuanMiLCJzcmMvZmlsdGVycy9zaG9ja3dhdmUvU2hvY2t3YXZlRmlsdGVyLmpzIiwic3JjL2ZpbHRlcnMvdGlsdHNoaWZ0L1RpbHRTaGlmdEF4aXNGaWx0ZXIuanMiLCJzcmMvZmlsdGVycy90aWx0c2hpZnQvVGlsdFNoaWZ0RmlsdGVyLmpzIiwic3JjL2ZpbHRlcnMvdGlsdHNoaWZ0L1RpbHRTaGlmdFhGaWx0ZXIuanMiLCJzcmMvZmlsdGVycy90aWx0c2hpZnQvVGlsdFNoaWZ0WUZpbHRlci5qcyIsInNyYy9maWx0ZXJzL3R3aXN0L1R3aXN0RmlsdGVyLmpzIiwic3JjL3NyYy9pbmRleC5qcyIsInNyYy9pbnRlcmFjdGlvbi9JbnRlcmFjdGlvbkRhdGEuanMiLCJzcmMvaW50ZXJhY3Rpb24vSW50ZXJhY3Rpb25NYW5hZ2VyLmpzIiwic3JjL2ludGVyYWN0aW9uL2luZGV4LmpzIiwic3JjL2ludGVyYWN0aW9uL2ludGVyYWN0aXZlVGFyZ2V0LmpzIiwic3JjL2xvYWRlcnMvYml0bWFwRm9udFBhcnNlci5qcyIsInNyYy9sb2FkZXJzL2luZGV4LmpzIiwic3JjL2xvYWRlcnMvbG9hZGVyLmpzIiwic3JjL2xvYWRlcnMvc3ByaXRlc2hlZXRQYXJzZXIuanMiLCJzcmMvbG9hZGVycy90ZXh0dXJlUGFyc2VyLmpzIiwic3JjL21lc2gvTWVzaC5qcyIsInNyYy9tZXNoL1BsYW5lLmpzIiwic3JjL21lc2gvUm9wZS5qcyIsInNyYy9tZXNoL2luZGV4LmpzIiwic3JjL21lc2gvd2ViZ2wvTWVzaFJlbmRlcmVyLmpzIiwic3JjL21lc2gvd2ViZ2wvTWVzaFNoYWRlci5qcyIsInNyYy9wb2x5ZmlsbC9NYXRoLnNpZ24uanMiLCJzcmMvcG9seWZpbGwvT2JqZWN0LmFzc2lnbi5qcyIsInNyYy9wb2x5ZmlsbC9pbmRleC5qcyIsInNyYy9wb2x5ZmlsbC9yZXF1ZXN0QW5pbWF0aW9uRnJhbWUuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUNBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbklBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDeENBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdk1BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNqSEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDOUJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3REQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN6REE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2xDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDN0JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0SUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2hDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUM5Q0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7O0FDNXVDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7QUNoT0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FDM0ZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7OztBQ3JoQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDcEZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDckZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDSkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ25zQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdGtCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3RRQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FDdkNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7QUNubUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3hjQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDaHlCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2hFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNaQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDcEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDMURBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMxRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuWkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzVDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzdOQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNyb0JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3ZtQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdG9DQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzNGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM5VEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2xEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDcEhBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDckZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3JFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDMU5BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDN0RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3JFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM5SEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDN0ZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3RiQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDcEVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNwQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3RGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM3RkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3JHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNUZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzFGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDN1RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMxTkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDMWRBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDblFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMxUUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2xHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2hXQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM1REE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMxUEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDMUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMzWUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzlHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDckRBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMvRkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDMUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2xjQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDakhBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3hLQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDN1dBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3ZDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM1REE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM3REE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM5Z0JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDN0dBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDL0VBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN4REE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDekpBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDalNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDL0JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3ptQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3ZXQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzdEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzNtQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbmJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzdkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3hhQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQy9FQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzNPQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDaldBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3REQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQy9CQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDblJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNwRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM3VkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2xZQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM5VEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbGNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzlRQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzVCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzVCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ25CQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3ZEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzVJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM1R0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMzRkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDcEZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNUJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3RoQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQy9DQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDekZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3hCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2xGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3RFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDekZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMvTEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQy9DQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3JDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNoREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3JEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2pEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNwRkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDaERBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0RkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDM0hBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzVHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNwQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDcENBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FDbkZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7QUM1QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQy9DQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzEyQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQy9DQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdkhBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbkJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzVEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2xGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDcEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzFkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzVIQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ25OQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDakJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuT0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzNEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ1JBO0FBQ0E7QUFDQTtBQUNBOzs7QUNIQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsImZpbGUiOiJnZW5lcmF0ZWQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlc0NvbnRlbnQiOlsiKGZ1bmN0aW9uIGUodCxuLHIpe2Z1bmN0aW9uIHMobyx1KXtpZighbltvXSl7aWYoIXRbb10pe3ZhciBhPXR5cGVvZiByZXF1aXJlPT1cImZ1bmN0aW9uXCImJnJlcXVpcmU7aWYoIXUmJmEpcmV0dXJuIGEobywhMCk7aWYoaSlyZXR1cm4gaShvLCEwKTt2YXIgZj1uZXcgRXJyb3IoXCJDYW5ub3QgZmluZCBtb2R1bGUgJ1wiK28rXCInXCIpO3Rocm93IGYuY29kZT1cIk1PRFVMRV9OT1RfRk9VTkRcIixmfXZhciBsPW5bb109e2V4cG9ydHM6e319O3Rbb11bMF0uY2FsbChsLmV4cG9ydHMsZnVuY3Rpb24oZSl7dmFyIG49dFtvXVsxXVtlXTtyZXR1cm4gcyhuP246ZSl9LGwsbC5leHBvcnRzLGUsdCxuLHIpfXJldHVybiBuW29dLmV4cG9ydHN9dmFyIGk9dHlwZW9mIHJlcXVpcmU9PVwiZnVuY3Rpb25cIiYmcmVxdWlyZTtmb3IodmFyIG89MDtvPHIubGVuZ3RoO28rKylzKHJbb10pO3JldHVybiBzfSkiLCJcblxubW9kdWxlLmV4cG9ydHMgPSB7XG5cbiAgICBjcmVhdGVDb250ZXh0OiBcdFx0XHRyZXF1aXJlKCcuL2xpYi9jcmVhdGVDb250ZXh0JyksXG4gICAgc2V0VmVydGV4QXR0cmliQXJyYXlzOiBcdHJlcXVpcmUoJy4vbGliL3NldFZlcnRleEF0dHJpYkFycmF5cycpLFxuICAgIFxuICAgIEdMQnVmZmVyOiBcdFx0XHRcdHJlcXVpcmUoJy4vbGliL0dMQnVmZmVyJyksXG4gICAgR0xGcmFtZWJ1ZmZlcjogXHRcdFx0cmVxdWlyZSgnLi9saWIvR0xGcmFtZWJ1ZmZlcicpLFxuICAgIEdMU2hhZGVyOiBcdFx0XHRcdHJlcXVpcmUoJy4vbGliL0dMU2hhZGVyJyksXG4gICAgR0xUZXh0dXJlOiBcdFx0XHRcdHJlcXVpcmUoJy4vbGliL0dMVGV4dHVyZScpLFxuICAgIFxuICAgIFZlcnRleEFycmF5T2JqZWN0OiBcdFx0cmVxdWlyZSgnLi9saWIvVmVydGV4QXJyYXlPYmplY3QnKVxuXG59OyIsIlxuLyoqXG4gKiBIZWxwZXIgY2xhc3MgdG8gY3JlYXRlIGEgd2ViR0wgYnVmZmVyXG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIGdsIHtXZWJHTFJlbmRlcmluZ0NvbnRleHR9XG4gKi9cblxudmFyIEVNUFRZX0FSUkFZX0JVRkZFUiA9IG5ldyBBcnJheUJ1ZmZlcigwKTtcblxudmFyIEJ1ZmZlciA9IGZ1bmN0aW9uKGdsLCB0eXBlLCBkYXRhLCBkcmF3VHlwZSlcbntcblx0dGhpcy5nbCA9IGdsO1xuXG5cdHRoaXMuYnVmZmVyID0gZ2wuY3JlYXRlQnVmZmVyKCk7XG5cdHRoaXMudHlwZSA9IHR5cGUgfHwgZ2wuQVJSQVlfQlVGRkVSO1xuXHR0aGlzLmRyYXdUeXBlID0gZHJhd1R5cGUgfHwgZ2wuU1RBVElDX0RSQVc7XG5cdHRoaXMuZGF0YSA9IEVNUFRZX0FSUkFZX0JVRkZFUjtcblxuXHRpZihkYXRhKVxuXHR7XG5cdFx0dGhpcy51cGxvYWQoZGF0YSk7XG5cdH1cbn1cblxuQnVmZmVyLnByb3RvdHlwZS51cGxvYWQgPSBmdW5jdGlvbihkYXRhLCBvZmZzZXQsIGRvbnRCaW5kKVxue1xuXHQvLyB0b2RvIC0gbmVlZGVkP1xuXHQvL2lmKCFkb250QmluZClcblx0dGhpcy5iaW5kKCk7XG5cblx0dmFyIGdsID0gdGhpcy5nbDtcblx0XG5cdGRhdGEgPSBkYXRhIHx8IHRoaXMuZGF0YTtcblx0b2Zmc2V0ID0gb2Zmc2V0IHx8IDA7XG5cblx0aWYodGhpcy5kYXRhLmJ5dGVMZW5ndGggPj0gZGF0YS5ieXRlTGVuZ3RoKVxuXHR7XHRcblx0XHRnbC5idWZmZXJTdWJEYXRhKHRoaXMudHlwZSwgb2Zmc2V0LCBkYXRhKTtcblx0fVxuXHRlbHNlXG5cdHtcblx0XHRnbC5idWZmZXJEYXRhKHRoaXMudHlwZSwgZGF0YSwgdGhpcy5kcmF3VHlwZSk7XG5cdH1cblxuXHR0aGlzLmRhdGEgPSBkYXRhO1xufVxuXG5CdWZmZXIucHJvdG90eXBlLmJpbmQgPSBmdW5jdGlvbigpXG57XG5cdHZhciBnbCA9IHRoaXMuZ2w7XG5cdGdsLmJpbmRCdWZmZXIodGhpcy50eXBlLCB0aGlzLmJ1ZmZlcik7XG59XG5cbkJ1ZmZlci5jcmVhdGVWZXJ0ZXhCdWZmZXIgPSBmdW5jdGlvbihnbCwgZGF0YSwgZHJhd1R5cGUpXG57XG5cdHJldHVybiBuZXcgQnVmZmVyKGdsLCBnbC5BUlJBWV9CVUZGRVIsIGRhdGEsIGRyYXdUeXBlKTtcbn1cblxuQnVmZmVyLmNyZWF0ZUluZGV4QnVmZmVyID0gZnVuY3Rpb24oZ2wsIGRhdGEsIGRyYXdUeXBlKVxue1xuXHRyZXR1cm4gbmV3IEJ1ZmZlcihnbCwgZ2wuRUxFTUVOVF9BUlJBWV9CVUZGRVIsIGRhdGEsIGRyYXdUeXBlKTtcbn1cblxuQnVmZmVyLmNyZWF0ZSA9IGZ1bmN0aW9uKGdsLCB0eXBlLCBkYXRhLCBkcmF3VHlwZSlcbntcblx0cmV0dXJuIG5ldyBCdWZmZXIoZ2wsIHR5cGUsIGRyYXdUeXBlKTtcbn1cblxuLy9UT0RPIERlc3Ryb3kuLlxuXG5tb2R1bGUuZXhwb3J0cyA9IEJ1ZmZlcjtcblxuIiwiXG52YXIgVGV4dHVyZSA9IHJlcXVpcmUoJy4vR0xUZXh0dXJlJyk7XG5cbi8qKlxuICogSGVscGVyIGNsYXNzIHRvIGNyZWF0ZSBhIHdlYkdMIEZyYW1lYnVmZmVyXG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIGdsIHtXZWJHTFJlbmRlcmluZ0NvbnRleHR9XG4gKi9cblxudmFyIEZyYW1lYnVmZmVyID0gZnVuY3Rpb24oZ2wsIHdpZHRoLCBoZWlnaHQpXG57XG5cdHRoaXMuZ2wgPSBnbDtcblxuXHR0aGlzLmZyYW1lYnVmZmVyID0gZ2wuY3JlYXRlRnJhbWVidWZmZXIoKTtcblx0XG5cdHRoaXMuc3RlbmNpbCA9IG51bGw7XG5cdHRoaXMudGV4dHVyZSA9IG51bGw7XG5cblx0dGhpcy53aWR0aCA9IHdpZHRoIHx8IDEwMDtcblx0dGhpcy5oZWlnaHQgPSBoZWlnaHQgfHwgMTAwO1xufVxuXG5GcmFtZWJ1ZmZlci5wcm90b3R5cGUuZW5hYmxlVGV4dHVyZSA9IGZ1bmN0aW9uKHRleHR1cmUpXG57XG5cdHZhciBnbCA9IHRoaXMuZ2w7XG5cblx0dGhpcy50ZXh0dXJlID0gdGV4dHVyZSB8fCBuZXcgVGV4dHVyZShnbCk7XG5cblx0dGhpcy50ZXh0dXJlLmJpbmQoKTtcblxuXHQvL2dsLnRleEltYWdlMkQoZ2wuVEVYVFVSRV8yRCwgMCwgZ2wuUkdCQSwgIHRoaXMud2lkdGgsIHRoaXMuaGVpZ2h0LCAwLCBnbC5SR0JBLCBnbC5VTlNJR05FRF9CWVRFLCBudWxsKTtcblxuXHR0aGlzLmJpbmQoKTtcblxuXHRnbC5mcmFtZWJ1ZmZlclRleHR1cmUyRChnbC5GUkFNRUJVRkZFUiwgZ2wuQ09MT1JfQVRUQUNITUVOVDAsIGdsLlRFWFRVUkVfMkQsIHRoaXMudGV4dHVyZS50ZXh0dXJlLCAwKTtcbn1cblxuRnJhbWVidWZmZXIucHJvdG90eXBlLmVuYWJsZVN0ZW5jaWwgPSBmdW5jdGlvbigpXG57XG5cdGlmKHRoaXMuc3RlbmNpbClyZXR1cm47XG5cblx0dmFyIGdsID0gdGhpcy5nbDtcblxuXHR0aGlzLnN0ZW5jaWwgPSBnbC5jcmVhdGVSZW5kZXJidWZmZXIoKTtcbiAgICBcbiAgICBnbC5iaW5kUmVuZGVyYnVmZmVyKGdsLlJFTkRFUkJVRkZFUiwgdGhpcy5zdGVuY2lsKTtcbiAgICBcbiAgICAvLyBUT0RPLi4gdGhpcyBpcyBkZXB0aCBBTkQgc3RlbmNpbD9cbiAgICBnbC5mcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcihnbC5GUkFNRUJVRkZFUiwgZ2wuREVQVEhfU1RFTkNJTF9BVFRBQ0hNRU5ULCBnbC5SRU5ERVJCVUZGRVIsIHRoaXMuc3RlbmNpbCk7XG4gICAgZ2wucmVuZGVyYnVmZmVyU3RvcmFnZShnbC5SRU5ERVJCVUZGRVIsIGdsLkRFUFRIX1NURU5DSUwsICB0aGlzLndpZHRoICAsIHRoaXMuaGVpZ2h0ICk7XG59XG5cbkZyYW1lYnVmZmVyLnByb3RvdHlwZS5jbGVhciA9IGZ1bmN0aW9uKCByLCBnLCBiLCBhIClcbntcblx0dGhpcy5iaW5kKCk7XG5cblx0dmFyIGdsID0gdGhpcy5nbDtcbiAgICBcbiAgICBnbC5jbGVhckNvbG9yKHIsIGcsIGIsIGEpO1xuICAgIGdsLmNsZWFyKGdsLkNPTE9SX0JVRkZFUl9CSVQpO1xufVxuXG5GcmFtZWJ1ZmZlci5wcm90b3R5cGUuYmluZCA9IGZ1bmN0aW9uKClcbntcblx0dmFyIGdsID0gdGhpcy5nbDtcblx0Z2wuYmluZEZyYW1lYnVmZmVyKGdsLkZSQU1FQlVGRkVSLCB0aGlzLmZyYW1lYnVmZmVyICk7XHRcbn1cblxuRnJhbWVidWZmZXIucHJvdG90eXBlLnVuYmluZCA9IGZ1bmN0aW9uKClcbntcblx0Z2wuYmluZEZyYW1lYnVmZmVyKGdsLkZSQU1FQlVGRkVSLCBudWxsICk7XHRcbn1cblxuRnJhbWVidWZmZXIucHJvdG90eXBlLnJlc2l6ZSA9IGZ1bmN0aW9uKHdpZHRoLCBoZWlnaHQpXG57XG5cdHZhciBnbCA9IHRoaXMuZ2w7XG5cblx0dGhpcy53aWR0aCA9IHdpZHRoO1xuXHR0aGlzLmhlaWdodCA9IGhlaWdodDtcblxuXHRpZiAoIHRoaXMudGV4dHVyZSApXG4gICAge1xuICAgIFx0dGhpcy50ZXh0dXJlLnVwbG9hZERhdGEobnVsbCwgd2lkdGgsIGhlaWdodCk7XG5cdH1cblxuXHRpZiAoIHRoaXMuc3RlbmNpbCApXG4gICAge1xuICAgICAgICAvLyB1cGRhdGUgdGhlIHN0ZW5jaWwgYnVmZmVyIHdpZHRoIGFuZCBoZWlnaHRcbiAgICAgICAgZ2wuYmluZFJlbmRlcmJ1ZmZlcihnbC5SRU5ERVJCVUZGRVIsIHRoaXMuc3RlbmNpbCk7XG4gICAgICAgIGdsLnJlbmRlcmJ1ZmZlclN0b3JhZ2UoZ2wuUkVOREVSQlVGRkVSLCBnbC5ERVBUSF9TVEVOQ0lMLCB3aWR0aCwgaGVpZ2h0KTtcbiAgICB9XG59XG5cbkZyYW1lYnVmZmVyLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24oKVxue1xuXHR2YXIgZ2wgPSB0aGlzLmdsO1xuXHQvL1RPRE9cblx0Z2wuZGVsZXRlRnJhbWVidWZmZXIodGhpcy5mcmFtZWJ1ZmZlcik7XG59XG5cbkZyYW1lYnVmZmVyLmNyZWF0ZVJHQkEgPSBmdW5jdGlvbihnbCwgd2lkdGgsIGhlaWdodCwgZGF0YSlcbntcblx0dmFyIHRleHR1cmUgPSBUZXh0dXJlLmZyb21EYXRhKGdsLCBudWxsLCB3aWR0aCwgaGVpZ2h0KTtcblx0dGV4dHVyZS5lbmFibGVOZWFyZXN0U2NhbGluZygpO1xuICAgIHRleHR1cmUuZW5hYmxlV3JhcENsYW1wKCk7XG5cbiAgICAvL25vdyBjcmVhdGUgdGhlIGZyYW1lYnVmZmVyIG9iamVjdCBhbmQgYXR0YWNoIHRoZSB0ZXh0dXJlIHRvIGl0LlxuICAgIHZhciBmYm8gPSBuZXcgRnJhbWVidWZmZXIoZ2wsIHdpZHRoLCBoZWlnaHQpO1xuICAgIGZiby5lbmFibGVUZXh0dXJlKHRleHR1cmUpO1xuXG4gICAgcmV0dXJuIGZibztcbn1cblxuRnJhbWVidWZmZXIuY3JlYXRlRmxvYXQzMiA9IGZ1bmN0aW9uKGdsLCB3aWR0aCwgaGVpZ2h0LCBkYXRhKVxue1xuXHQvLyBjcmVhdGUgYSBuZXcgdGV4dHVyZS4uXG4gICAgdmFyIHRleHR1cmUgPSBuZXcgVGV4dHVyZS5mcm9tRGF0YShnbCwgZGF0YSwgd2lkdGgsIGhlaWdodCk7XG4gICAgdGV4dHVyZS5lbmFibGVOZWFyZXN0U2NhbGluZygpO1xuICAgIHRleHR1cmUuZW5hYmxlV3JhcENsYW1wKCk7XG5cbiAgICAvL25vdyBjcmVhdGUgdGhlIGZyYW1lYnVmZmVyIG9iamVjdCBhbmQgYXR0YWNoIHRoZSB0ZXh0dXJlIHRvIGl0LlxuICAgIHZhciBmYm8gPSBuZXcgRnJhbWVidWZmZXIoZ2wsIHdpZHRoLCBoZWlnaHQpO1xuICAgIGZiby5lbmFibGVUZXh0dXJlKHRleHR1cmUpXG5cbiAgICByZXR1cm4gZmJvO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IEZyYW1lYnVmZmVyO1xuXG4iLCJcbnZhciBjb21waWxlUHJvZ3JhbSA9IHJlcXVpcmUoJy4vc2hhZGVyL2NvbXBpbGVQcm9ncmFtJyksXG5cdGV4dHJhY3RBdHRyaWJ1dGVzID0gcmVxdWlyZSgnLi9zaGFkZXIvZXh0cmFjdEF0dHJpYnV0ZXMnKSxcblx0ZXh0cmFjdFVuaWZvcm1zID0gcmVxdWlyZSgnLi9zaGFkZXIvZXh0cmFjdFVuaWZvcm1zJyksXG5cdGdlbmVyYXRlVW5pZm9ybUFjY2Vzc09iamVjdCA9IHJlcXVpcmUoJy4vc2hhZGVyL2dlbmVyYXRlVW5pZm9ybUFjY2Vzc09iamVjdCcpO1xuXG4vKipcbiAqIEhlbHBlciBjbGFzcyB0byBjcmVhdGUgYSB3ZWJHTCBTaGFkZXJcbiAqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gZ2wge1dlYkdMUmVuZGVyaW5nQ29udGV4dH1cbiAqL1xudmFyIFNoYWRlciA9IGZ1bmN0aW9uKGdsLCB2ZXJ0ZXhTcmMsIGZyYWdtZW50U3JjKVxue1xuXHR0aGlzLmdsID0gZ2w7XG5cblx0Ly8gRmlyc3QgY29tcGlsZSB0aGUgcHJvZ3JhbS4uXG5cdHRoaXMucHJvZ3JhbSA9IGNvbXBpbGVQcm9ncmFtKGdsLCB2ZXJ0ZXhTcmMsIGZyYWdtZW50U3JjKTtcblxuXHQvLyBuZXh0IGV4dHJhY3QgdGhlIGF0dHJpYnV0ZXNcblx0dGhpcy5hdHRyaWJ1dGVzID0gZXh0cmFjdEF0dHJpYnV0ZXMoZ2wsIHRoaXMucHJvZ3JhbSk7IFxuXG4gICAgdmFyIHVuaWZvcm1EYXRhID0gZXh0cmFjdFVuaWZvcm1zKGdsLCB0aGlzLnByb2dyYW0pO1xuXG4gICAgdGhpcy51bmlmb3JtcyA9IGdlbmVyYXRlVW5pZm9ybUFjY2Vzc09iamVjdCggZ2wsIHVuaWZvcm1EYXRhICk7XG59XG5cblNoYWRlci5wcm90b3R5cGUuYmluZCA9IGZ1bmN0aW9uKClcbntcblx0dGhpcy5nbC51c2VQcm9ncmFtKHRoaXMucHJvZ3JhbSk7XG59XG5cblNoYWRlci5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uKClcbntcblx0dmFyIGdsID0gdGhpcy5nbDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBTaGFkZXI7XG5cbiIsIlxuLyoqXG4gKiBIZWxwZXIgY2xhc3MgdG8gY3JlYXRlIGEgd2ViR0wgVGV4dHVyZVxuICpcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqIEBwYXJhbSBnbCB7V2ViR0xSZW5kZXJpbmdDb250ZXh0fSBhIFdlYkdMIGNvbnRleHRcbiAqIEBwYXJhbSB3aWR0aCB7bnVtYmVyfSB0aGUgd2lkdGggb2YgdGhlIHRleHR1cmUgXG4gKiBAcGFyYW0gaGVpZ2h0IHtudW1iZXJ9IHRoZSBoZWlnaHQgb2YgdGhlIHRleHR1cmUgXG4gKiBAcGFyYW0gZm9ybWF0IHtudW1iZXJ9IHRoZSBwaXhlbCBmb3JtYXQgb2YgdGhlIHRleHR1cmUuIGRlZmF1bHRzIHRvIGdsLlJHQkFcbiAqIEBwYXJhbSB0eXBlIHtudW1iZXJ9IHRoZSBnbCB0eXBlIG9mIHRoZSB0ZXh0dXJlLiBkZWZhdWx0cyB0byBnbC5VTlNJR05FRF9CWVRFXG4gKi9cbnZhciBUZXh0dXJlID0gZnVuY3Rpb24oZ2wsIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgdHlwZSlcbntcblx0dGhpcy5nbCA9IGdsO1xuXG5cdHRoaXMudGV4dHVyZSA9IGdsLmNyZWF0ZVRleHR1cmUoKTtcblxuXHQvLyBzb21lIHNldHRpbmdzLi5cblx0dGhpcy5taXBtYXAgPSBmYWxzZTtcblxuXHR0aGlzLnByZW11bHRpcGx5QWxwaGEgPSBmYWxzZTtcblxuXHR0aGlzLndpZHRoID0gd2lkdGggfHwgMDtcblx0dGhpcy5oZWlnaHQgPSBoZWlnaHQgfHwgMDtcblxuXHR0aGlzLmZvcm1hdCA9IGZvcm1hdCB8fCBnbC5SR0JBO1xuXHR0aGlzLnR5cGUgPSB0eXBlIHx8IGdsLlVOU0lHTkVEX0JZVEU7XG5cblxufVxuXG4vKipcbiAqIEBwYXJhbSB7UElYSS5nbENvcmUuVGV4dHVyZX0gW3Zhcm5hbWVdIFtkZXNjcmlwdGlvbl1cbiAqL1xuVGV4dHVyZS5wcm90b3R5cGUudXBsb2FkID0gZnVuY3Rpb24oc291cmNlKVxue1xuXHR0aGlzLmJpbmQoKTtcblxuXHR2YXIgZ2wgPSB0aGlzLmdsO1xuXG5cdHRoaXMud2lkdGggPSBzb3VyY2Uud2lkdGg7XG5cdHRoaXMuaGVpZ2h0ID0gc291cmNlLmhlaWdodDtcblxuXHRnbC5waXhlbFN0b3JlaShnbC5VTlBBQ0tfUFJFTVVMVElQTFlfQUxQSEFfV0VCR0wsIHRoaXMucHJlbXVsdGlwbHlBbHBoYSk7XG4gICAgZ2wudGV4SW1hZ2UyRChnbC5URVhUVVJFXzJELCAwLCB0aGlzLmZvcm1hdCwgdGhpcy5mb3JtYXQsIHRoaXMudHlwZSwgc291cmNlKTtcbn1cblxudmFyIEZMT0FUSU5HX1BPSU5UX0FWQUlMQUJMRSA9IGZhbHNlO1xuXG5UZXh0dXJlLnByb3RvdHlwZS51cGxvYWREYXRhID0gZnVuY3Rpb24oZGF0YSwgd2lkdGgsIGhlaWdodClcbntcblx0dGhpcy5iaW5kKCk7XG5cdFxuXHR0aGlzLndpZHRoID0gd2lkdGggfHwgdGhpcy53aWR0aDtcblx0dGhpcy5oZWlnaHQgPSBoZWlnaHQgfHwgdGhpcy5oZWlnaHQ7XG5cblx0aWYoZGF0YSBpbnN0YW5jZW9mIEZsb2F0MzJBcnJheSlcblx0e1xuXHRcdGlmKCFGTE9BVElOR19QT0lOVF9BVkFJTEFCTEUpXG5cdFx0e1xuXHRcdFx0dmFyIGV4dCA9IGdsLmdldEV4dGVuc2lvbihcIk9FU190ZXh0dXJlX2Zsb2F0XCIpO1xuXHRcdFx0XG5cdFx0XHRpZihleHQpXG5cdFx0XHR7XG5cdFx0XHRcdEZMT0FUSU5HX1BPSU5UX0FWQUlMQUJMRSA9IHRydWU7XG5cdFx0XHR9XG5cdFx0XHRlbHNlXG5cdFx0XHR7XG5cdFx0XHRcdHRocm93IG5ldyBFcnJvcignZmxvYXRpbmcgcG9pbnQgdGV4dHVyZXMgbm90IGF2YWlsYWJsZScpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHRoaXMudHlwZSA9IGdsLkZMT0FUO1xuXHR9XG5cdGVsc2Vcblx0e1xuXHRcdC8vIFRPRE8gc3VwcG9ydCBmb3Igb3RoZXIgdHlwZXNcblx0XHR0aGlzLnR5cGUgPSBnbC5VTlNJR05FRF9CWVRFO1xuXHR9XG5cblx0Ly8gd2hhdCB0eXBlIG9mIGRhdGE/XG5cdGdsLnBpeGVsU3RvcmVpKGdsLlVOUEFDS19QUkVNVUxUSVBMWV9BTFBIQV9XRUJHTCwgdGhpcy5wcmVtdWx0aXBseUFscGhhKTtcblx0Z2wudGV4SW1hZ2UyRChnbC5URVhUVVJFXzJELCAwLCB0aGlzLmZvcm1hdCwgIHRoaXMud2lkdGgsIHRoaXMuaGVpZ2h0LCAwLCB0aGlzLmZvcm1hdCwgdGhpcy50eXBlLCBkYXRhIHx8IG51bGwpO1xuXG59XG5cblRleHR1cmUucHJvdG90eXBlLmJpbmQgPSBmdW5jdGlvbihsb2NhdGlvbilcbntcblx0dmFyIGdsID0gdGhpcy5nbDtcblxuXHRpZihsb2NhdGlvbiAhPT0gdW5kZWZpbmVkKVxuXHR7XG5cdFx0Z2wuYWN0aXZlVGV4dHVyZShnbC5URVhUVVJFMCArIGxvY2F0aW9uKTtcblx0fVxuXG5cdGdsLmJpbmRUZXh0dXJlKGdsLlRFWFRVUkVfMkQsIHRoaXMudGV4dHVyZSk7XG59XG5cblRleHR1cmUucHJvdG90eXBlLnVuYmluZCA9IGZ1bmN0aW9uKClcbntcblx0dmFyIGdsID0gdGhpcy5nbDtcblx0Z2wuYmluZFRleHR1cmUoZ2wuVEVYVFVSRV8yRCwgbnVsbCk7XG59XG5cblRleHR1cmUucHJvdG90eXBlLm1pbkZpbHRlciA9IGZ1bmN0aW9uKCBsaW5lYXIgKVxue1xuXHR2YXIgZ2wgPSB0aGlzLmdsO1xuXG5cdHRoaXMuYmluZCgpO1xuXG5cdGlmKHRoaXMubWlwbWFwKVxuXHR7XG5cdFx0Z2wudGV4UGFyYW1ldGVyaShnbC5URVhUVVJFXzJELCBnbC5URVhUVVJFX01JTl9GSUxURVIsIGxpbmVhciA/IGdsLkxJTkVBUl9NSVBNQVBfTElORUFSIDogZ2wuTkVBUkVTVF9NSVBNQVBfTkVBUkVTVCk7XG5cdH1cblx0ZWxzZVxuXHR7XG5cdFx0Z2wudGV4UGFyYW1ldGVyaShnbC5URVhUVVJFXzJELCBnbC5URVhUVVJFX01JTl9GSUxURVIsIGxpbmVhciA/IGdsLkxJTkVBUiA6IGdsLk5FQVJFU1QpO1xuXHR9XHRcbn1cblxuVGV4dHVyZS5wcm90b3R5cGUubWFnRmlsdGVyID0gZnVuY3Rpb24oIGxpbmVhciApXG57XG5cdHZhciBnbCA9IHRoaXMuZ2w7XG5cblx0dGhpcy5iaW5kKCk7XG5cblx0Z2wudGV4UGFyYW1ldGVyaShnbC5URVhUVVJFXzJELCBnbC5URVhUVVJFX01BR19GSUxURVIsIGxpbmVhciA/IGdsLkxJTkVBUiA6IGdsLk5FQVJFU1QpO1xufVxuXG5UZXh0dXJlLnByb3RvdHlwZS5lbmFibGVNaXBtYXAgPSBmdW5jdGlvbigpXG57XG5cdHRoaXMuYmluZCgpO1xuXG5cdHRoaXMubWlwbWFwID0gdHJ1ZTtcblx0Z2wuZ2VuZXJhdGVNaXBtYXAoZ2wuVEVYVFVSRV8yRCk7XG59XG5cblRleHR1cmUucHJvdG90eXBlLmVuYWJsZUxpbmVhclNjYWxpbmcgPSBmdW5jdGlvbigpXG57XG5cdHRoaXMubWluRmlsdGVyKHRydWUpO1xuXHR0aGlzLm1hZ0ZpbHRlcih0cnVlKTtcbn1cblxuVGV4dHVyZS5wcm90b3R5cGUuZW5hYmxlTmVhcmVzdFNjYWxpbmcgPSBmdW5jdGlvbigpXG57XG5cdHRoaXMubWluRmlsdGVyKGZhbHNlKTtcblx0dGhpcy5tYWdGaWx0ZXIoZmFsc2UpO1xufVxuXG5UZXh0dXJlLnByb3RvdHlwZS5lbmFibGVXcmFwQ2xhbXAgPSBmdW5jdGlvbigpXG57XG5cdHZhciBnbCA9IHRoaXMuZ2w7XG5cblx0dGhpcy5iaW5kKCk7XG5cblx0Z2wudGV4UGFyYW1ldGVyaShnbC5URVhUVVJFXzJELCBnbC5URVhUVVJFX1dSQVBfUywgZ2wuQ0xBTVBfVE9fRURHRSk7XG4gICAgZ2wudGV4UGFyYW1ldGVyaShnbC5URVhUVVJFXzJELCBnbC5URVhUVVJFX1dSQVBfVCwgZ2wuQ0xBTVBfVE9fRURHRSk7XG59XG5cblRleHR1cmUucHJvdG90eXBlLmVuYWJsZVdyYXBSZXBlYXQgPSBmdW5jdGlvbigpXG57XG5cdHZhciBnbCA9IHRoaXMuZ2w7XG5cblx0dGhpcy5iaW5kKCk7XG5cdFxuXHRnbC50ZXhQYXJhbWV0ZXJpKGdsLlRFWFRVUkVfMkQsIGdsLlRFWFRVUkVfV1JBUF9TLCBnbC5SRVBFQVQpO1xuICAgIGdsLnRleFBhcmFtZXRlcmkoZ2wuVEVYVFVSRV8yRCwgZ2wuVEVYVFVSRV9XUkFQX1QsIGdsLlJFUEVBVCk7XG59XG5cblRleHR1cmUucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbigpXG57XG5cdHZhciBnbCA9IHRoaXMuZ2w7XG5cdC8vVE9ET1xuXHRnbC5kZWxldGVUZXh0dXJlKHRoaXMudGV4dHVyZSk7XG59XG5cbi8vVGV4dHVyZS5cblRleHR1cmUuZnJvbVNvdXJjZSA9IGZ1bmN0aW9uKGdsLCBzb3VyY2UsIHByZW11bHRpcGx5QWxwaGEpXG57XG5cdHZhciB0ZXh0dXJlID0gbmV3IFRleHR1cmUoZ2wpO1xuXHR0ZXh0dXJlLnByZW11bHRpcGx5QWxwaGEgPSBwcmVtdWx0aXBseUFscGhhIHx8IGZhbHNlO1xuXHR0ZXh0dXJlLnVwbG9hZChzb3VyY2UpO1xuXG5cdHJldHVybiB0ZXh0dXJlO1xufVxuXG5UZXh0dXJlLmZyb21EYXRhID0gZnVuY3Rpb24oZ2wsIGRhdGEsIHdpZHRoLCBoZWlnaHQpXG57XG5cdC8vY29uc29sZS5sb2coZGF0YSwgd2lkdGgsIGhlaWdodCk7XG5cdHZhciB0ZXh0dXJlID0gbmV3IFRleHR1cmUoZ2wpO1xuXHR0ZXh0dXJlLnVwbG9hZERhdGEoZGF0YSwgd2lkdGgsIGhlaWdodCk7XG5cblx0cmV0dXJuIHRleHR1cmU7XG59XG5cblxubW9kdWxlLmV4cG9ydHMgPSBUZXh0dXJlO1xuXG4iLCJcbi8qKlxuICogR2VuZXJpYyBNYXNrIFN0YWNrIGRhdGEgc3RydWN0dXJlXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKi9cblxuLy8gc3RhdGUgb2JqZWN0Ly9cblxuXG5mdW5jdGlvbiBWZXJ0ZXhBcnJheU9iamVjdChnbClcbntcblx0XG5cdHRoaXMubmF0aXZlVmFvRXh0ZW5zaW9uID0gKFxuICAgICAgZ2wuZ2V0RXh0ZW5zaW9uKCdPRVNfdmVydGV4X2FycmF5X29iamVjdCcpIHx8XG4gICAgICBnbC5nZXRFeHRlbnNpb24oJ01PWl9PRVNfdmVydGV4X2FycmF5X29iamVjdCcpIHx8XG4gICAgICBnbC5nZXRFeHRlbnNpb24oJ1dFQktJVF9PRVNfdmVydGV4X2FycmF5X29iamVjdCcpXG4gICAgKTtcblxuLy9cdHRoaXMubmF0aXZlVmFvRXh0ZW5zaW9uID0gbnVsbDtcblxuXHRpZih0aGlzLm5hdGl2ZVZhb0V4dGVuc2lvbilcblx0e1xuXHRcdHRoaXMubmF0aXZlVmFvID0gdGhpcy5uYXRpdmVWYW9FeHRlbnNpb24uY3JlYXRlVmVydGV4QXJyYXlPRVMoKTsgIFxuXHR9XG5cblx0dGhpcy5nbCA9IGdsO1xuXG5cdHRoaXMuYXR0cmlidXRlcyA9IFtdO1xuXG5cdHRoaXMuaW5kZXhCdWZmZXIgPSBudWxsO1xuXG5cdHRoaXMuZGlydHkgPSBmYWxzZTtcblxuXHRcbn1cblxuVmVydGV4QXJyYXlPYmplY3QucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gVmVydGV4QXJyYXlPYmplY3Q7XG5tb2R1bGUuZXhwb3J0cyA9IFZlcnRleEFycmF5T2JqZWN0O1xuXG5WZXJ0ZXhBcnJheU9iamVjdC5wcm90b3R5cGUuYmluZCA9IGZ1bmN0aW9uKClcbntcblx0aWYodGhpcy5uYXRpdmVWYW8pXG5cdHtcblx0XHR0aGlzLm5hdGl2ZVZhb0V4dGVuc2lvbi5iaW5kVmVydGV4QXJyYXlPRVModGhpcy5uYXRpdmVWYW8pOyAgXG5cblx0XHRpZih0aGlzLmRpcnR5KVxuXHRcdHtcblx0XHRcdHRoaXMuZGlydHkgPSBmYWxzZTtcblx0XHRcdHRoaXMuYWN0aXZhdGUoKTtcblx0XHR9XG5cdH1cblx0ZWxzZVxuXHR7XG5cdFx0dGhpcy5hY3RpdmF0ZSgpO1xuXHR9XG59XG5cblZlcnRleEFycmF5T2JqZWN0LnByb3RvdHlwZS51bmJpbmQgPSBmdW5jdGlvbigpXG57XG5cdGlmKHRoaXMubmF0aXZlVmFvKVxuXHR7XG5cdFx0dGhpcy5uYXRpdmVWYW9FeHRlbnNpb24uYmluZFZlcnRleEFycmF5T0VTKG51bGwpO1xuXHR9XG59XG5cblZlcnRleEFycmF5T2JqZWN0LnByb3RvdHlwZS5hY3RpdmF0ZSA9IGZ1bmN0aW9uKClcbntcblx0dmFyIGdsID0gdGhpcy5nbDtcblxuXHRmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuYXR0cmlidXRlcy5sZW5ndGg7IGkrKykgXG5cdHtcblx0XHR2YXIgYXR0cmliID0gdGhpcy5hdHRyaWJ1dGVzW2ldO1xuXHRcdGF0dHJpYi5idWZmZXIuYmluZCgpO1x0XG5cblx0XHRhdHRyaWIuYXR0cmlidXRlLnBvaW50ZXIoYXR0cmliLnR5cGUsIGF0dHJpYi5ub3JtYWxpemVkLCBhdHRyaWIuc3RyaWRlLCBhdHRyaWIuc3RhcnQpOyBcblx0XHRcblx0XHRnbC5lbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShhdHRyaWIuYXR0cmlidXRlLmxvY2F0aW9uKTtcblx0fTtcblxuXHR0aGlzLmluZGV4QnVmZmVyLmJpbmQoKTtcbn1cblxuVmVydGV4QXJyYXlPYmplY3QucHJvdG90eXBlLmFkZEF0dHJpYnV0ZSA9IGZ1bmN0aW9uKGJ1ZmZlciwgYXR0cmlidXRlLCB0eXBlLCBub3JtYWxpemVkLCBzdHJpZGUsIHN0YXJ0KVxue1xuICAgIHRoaXMuYXR0cmlidXRlcy5wdXNoKHtcbiAgICBcdGJ1ZmZlcjogXHRidWZmZXIsXG4gICAgXHRhdHRyaWJ1dGU6IFx0YXR0cmlidXRlLFxuXG4gICAgXHRsb2NhdGlvbjogXHRhdHRyaWJ1dGUubG9jYXRpb24sXG5cdCBcdHR5cGU6IFx0XHR0eXBlIHx8IHRoaXMuZ2wuRkxPQVQsXG5cdCBcdG5vcm1hbGl6ZWQ6IG5vcm1hbGl6ZWQgfHwgZmFsc2UsXG5cdCBcdHN0cmlkZTogXHRzdHJpZGUgfHwgMCxcblx0IFx0c3RhcnQ6IFx0XHRzdGFydCB8fCAwXG5cdH0pXG5cblx0dGhpcy5kaXJ0eSA9IHRydWU7XG59XG5cblxuVmVydGV4QXJyYXlPYmplY3QucHJvdG90eXBlLmFkZEluZGV4ID0gZnVuY3Rpb24oYnVmZmVyLCBvcHRpb25zKVxue1xuICAgIHRoaXMuaW5kZXhCdWZmZXIgPSBidWZmZXI7XG5cbiAgICB0aGlzLmRpcnR5ID0gdHJ1ZTtcbn1cblxuVmVydGV4QXJyYXlPYmplY3QucHJvdG90eXBlLmRyYXcgPSBmdW5jdGlvbih0eXBlLCBzaXplLCBzdGFydClcbntcblx0dmFyIGdsID0gdGhpcy5nbDtcblx0Z2wuZHJhd0VsZW1lbnRzKHR5cGUsIHNpemUsIGdsLlVOU0lHTkVEX1NIT1JULCBzdGFydCk7XG59XG5cbiIsIlxuLyoqXG4gKiBIZWxwZXIgY2xhc3MgdG8gY3JlYXRlIGEgd2ViR0wgQ29udGV4dFxuICpcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqIEBwYXJhbSBnbCB7V2ViR0xSZW5kZXJpbmdDb250ZXh0fVxuICovXG5cbnZhciBDT05URVhUX1VJRCA9IDA7XG5cbnZhciBjcmVhdGVDb250ZXh0ID0gZnVuY3Rpb24oY2FudmFzLCBvcHRpb25zKVxue1xuICAgIGdsID0gY2FudmFzLmdldENvbnRleHQoJ3dlYmdsJywgb3B0aW9ucykgfHwgXG4gICAgXHQgY2FudmFzLmdldENvbnRleHQoJ2V4cGVyaW1lbnRhbC13ZWJnbCcsIG9wdGlvbnMpO1xuXG4gICAgaWYgKCFnbClcbiAgICB7XG4gICAgICAgIC8vIGZhaWwsIG5vdCBhYmxlIHRvIGdldCBhIGNvbnRleHRcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdUaGlzIGJyb3dzZXIgZG9lcyBub3Qgc3VwcG9ydCB3ZWJHTC4gVHJ5IHVzaW5nIHRoZSBjYW52YXMgcmVuZGVyZXInKTtcbiAgICB9XG5cbiAgICAvLyBtaWdodCB3YW50IHRvIHBoYXNlIHRoaXMgb3V0P1xuICAgIGdsLmlkID0gQ09OVEVYVF9VSUQrKztcblxuICAgIHJldHVybiBnbDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBjcmVhdGVDb250ZXh0O1xuXG4iLCIvKipcbiAqIEdlbmVyaWMgTWFzayBTdGFjayBkYXRhIHN0cnVjdHVyZVxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICovXG5cbnZhciBHTF9NQVAgPSB7fTtcblxuXG52YXIgc2V0VmVydGV4QXR0cmliQXJyYXlzID0gZnVuY3Rpb24gKGdsLCBhdHRyaWJzKVxue1x0XG4gICAvLyBjb25zb2xlLmxvZyhnbC5pZClcbiAgICB2YXIgZGF0YSA9IEdMX01BUFtnbC5pZF07XG5cbiAgICBpZighZGF0YSlcbiAgICB7XG5cdCAgIHZhciBtYXhBdHRyaWJzID0gZ2wuZ2V0UGFyYW1ldGVyKGdsLk1BWF9WRVJURVhfQVRUUklCUyk7XG5cdFx0ZGF0YSA9IEdMX01BUFtnbC5pZF0gPSB7dGVtcEF0dHJpYlN0YXRlOm5ldyBBcnJheShtYXhBdHRyaWJzKVxuXHRcdFx0XHQgXHQgXHRcdCAgICxhdHRyaWJTdGF0ZTpuZXcgQXJyYXkobWF4QXR0cmlicyl9O1xuXHR9XG5cdFxuICAgIHZhciBpLFxuICAgIFx0dGVtcEF0dHJpYlN0YXRlID0gZGF0YS50ZW1wQXR0cmliU3RhdGUsXG4gICAgXHRhdHRyaWJTdGF0ZSA9IGRhdGEuYXR0cmliU3RhdGU7XG5cbiAgICBmb3IgKGkgPSAwOyBpIDwgdGVtcEF0dHJpYlN0YXRlLmxlbmd0aDsgaSsrKVxuICAgIHtcbiAgICAgICAgdGVtcEF0dHJpYlN0YXRlW2ldID0gZmFsc2U7XG4gICAgfVxuXG4gICAgLy8gc2V0IHRoZSBuZXcgYXR0cmlic1xuICAgIGZvciAoaSBpbiBhdHRyaWJzKVxuICAgIHtcbiAgICAgICAgdGVtcEF0dHJpYlN0YXRlW2F0dHJpYnNbaV0ubG9jYXRpb25dID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBmb3IgKGkgPSAxOyBpIDwgYXR0cmliU3RhdGUubGVuZ3RoOyBpKyspXG4gICAge1xuICAgICAgICBpZiAoYXR0cmliU3RhdGVbaV0gIT09IHRlbXBBdHRyaWJTdGF0ZVtpXSlcbiAgICAgICAge1xuICAgICAgICAgICAgYXR0cmliU3RhdGVbaV0gPSB0ZW1wQXR0cmliU3RhdGVbaV07XG5cbiAgICAgICAgICAgIGlmIChkYXRhLmF0dHJpYlN0YXRlW2ldKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGdsLmVuYWJsZVZlcnRleEF0dHJpYkFycmF5KGkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGdsLmRpc2FibGVWZXJ0ZXhBdHRyaWJBcnJheShpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn07XG5cbm1vZHVsZS5leHBvcnRzID0gc2V0VmVydGV4QXR0cmliQXJyYXlzOyIsIlxuXG5cblxuY29tcGlsZVByb2dyYW0gPSBmdW5jdGlvbihnbCwgdmVydGV4U3JjLCBmcmFnbWVudFNyYylcbntcbiAgICB2YXIgZ2xWZXJ0U2hhZGVyID0gY29tcGlsZVNoYWRlcihnbCwgZ2wuVkVSVEVYX1NIQURFUiwgdmVydGV4U3JjKTtcbiAgICB2YXIgZ2xGcmFnU2hhZGVyID0gY29tcGlsZVNoYWRlcihnbCwgZ2wuRlJBR01FTlRfU0hBREVSLCBmcmFnbWVudFNyYyk7XG5cbiAgICB2YXIgcHJvZ3JhbSA9IGdsLmNyZWF0ZVByb2dyYW0oKTtcblxuICAgIGdsLmF0dGFjaFNoYWRlcihwcm9ncmFtLCBnbFZlcnRTaGFkZXIpO1xuICAgIGdsLmF0dGFjaFNoYWRlcihwcm9ncmFtLCBnbEZyYWdTaGFkZXIpO1xuICAgIGdsLmxpbmtQcm9ncmFtKHByb2dyYW0pO1xuXG4gICAgLy8gaWYgbGlua2luZyBmYWlscywgdGhlbiBsb2cgYW5kIGNsZWFudXBcbiAgICBpZiAoIWdsLmdldFByb2dyYW1QYXJhbWV0ZXIocHJvZ3JhbSwgZ2wuTElOS19TVEFUVVMpKVxuICAgIHtcbiAgICAgICAgY29uc29sZS5lcnJvcignUGl4aS5qcyBFcnJvcjogQ291bGQgbm90IGluaXRpYWxpemUgc2hhZGVyLicpO1xuICAgICAgICBjb25zb2xlLmVycm9yKCdnbC5WQUxJREFURV9TVEFUVVMnLCBnbC5nZXRQcm9ncmFtUGFyYW1ldGVyKHByb2dyYW0sIGdsLlZBTElEQVRFX1NUQVRVUykpO1xuICAgICAgICBjb25zb2xlLmVycm9yKCdnbC5nZXRFcnJvcigpJywgZ2wuZ2V0RXJyb3IoKSk7XG5cbiAgICAgICAgLy8gaWYgdGhlcmUgaXMgYSBwcm9ncmFtIGluZm8gbG9nLCBsb2cgaXRcbiAgICAgICAgaWYgKGdsLmdldFByb2dyYW1JbmZvTG9nKHByb2dyYW0pICE9PSAnJylcbiAgICAgICAge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKCdQaXhpLmpzIFdhcm5pbmc6IGdsLmdldFByb2dyYW1JbmZvTG9nKCknLCBnbC5nZXRQcm9ncmFtSW5mb0xvZyhwcm9ncmFtKSk7XG4gICAgICAgIH1cblxuICAgICAgICBnbC5kZWxldGVQcm9ncmFtKHByb2dyYW0pO1xuICAgICAgICBwcm9ncmFtID0gbnVsbDtcbiAgICB9XG5cbiAgICAvLyBjbGVhbiB1cCBzb21lIHNoYWRlcnNcbiAgICBnbC5kZWxldGVTaGFkZXIoZ2xWZXJ0U2hhZGVyKTtcbiAgICBnbC5kZWxldGVTaGFkZXIoZ2xGcmFnU2hhZGVyKTtcblxuICAgIHJldHVybiBwcm9ncmFtO1xufVxuXG52YXIgY29tcGlsZVNoYWRlciA9IGZ1bmN0aW9uIChnbCwgdHlwZSwgc3JjKVxue1xuICAgIHZhciBzaGFkZXIgPSBnbC5jcmVhdGVTaGFkZXIodHlwZSk7XG5cbiAgICBnbC5zaGFkZXJTb3VyY2Uoc2hhZGVyLCBzcmMpO1xuICAgIGdsLmNvbXBpbGVTaGFkZXIoc2hhZGVyKTtcblxuICAgIGlmICghZ2wuZ2V0U2hhZGVyUGFyYW1ldGVyKHNoYWRlciwgZ2wuQ09NUElMRV9TVEFUVVMpKVxuICAgIHtcbiAgICAgICAgY29uc29sZS5sb2coZ2wuZ2V0U2hhZGVySW5mb0xvZyhzaGFkZXIpKTtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgcmV0dXJuIHNoYWRlcjtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gY29tcGlsZVByb2dyYW07XG5cbiIsIlxuXG52YXIgZGVmYXVsdFZhbHVlID0gZnVuY3Rpb24odHlwZSwgc2l6ZSkgXG57XG4gICAgc3dpdGNoICh0eXBlKVxuICAgIHtcbiAgICAgICAgY2FzZSAnZmxvYXQnOlxuICAgICAgICAgICAgcmV0dXJuIDA7XG5cbiAgICAgICAgY2FzZSAndmVjMic6IFxuICAgICAgICAgICAgcmV0dXJuIG5ldyBGbG9hdDMyQXJyYXkoMiAqIHNpemUpO1xuXG4gICAgICAgIGNhc2UgJ3ZlYzMnOlxuICAgICAgICAgICAgcmV0dXJuIG5ldyBGbG9hdDMyQXJyYXkoMyAqIHNpemUpO1xuXG4gICAgICAgIGNhc2UgJ3ZlYzQnOiAgICAgXG4gICAgICAgICAgICByZXR1cm4gbmV3IEZsb2F0MzJBcnJheSg0ICogc2l6ZSk7XG4gICAgICAgICAgICBcbiAgICAgICAgY2FzZSAnaW50JzpcbiAgICAgICAgY2FzZSAnc2FtcGxlcjJEJzpcbiAgICAgICAgICAgIHJldHVybiAwO1xuXG4gICAgICAgIGNhc2UgJ2l2ZWMyJzogICBcbiAgICAgICAgICAgIHJldHVybiBuZXcgSW50MzJBcnJheSgyICogc2l6ZSk7XG5cbiAgICAgICAgY2FzZSAnaXZlYzMnOlxuICAgICAgICAgICAgcmV0dXJuIG5ldyBJbnQzMkFycmF5KDMgKiBzaXplKTtcblxuICAgICAgICBjYXNlICdpdmVjNCc6IFxuICAgICAgICAgICAgcmV0dXJuIG5ldyBJbnQzMkFycmF5KDQgKiBzaXplKTtcblxuICAgICAgICBjYXNlICdib29sJzogICAgIFxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuXG4gICAgICAgIGNhc2UgJ2J2ZWMyJzpcblxuICAgICAgICAgICAgcmV0dXJuIGJvb2xlYW5BcnJheSggMiAqIHNpemUpO1xuXG4gICAgICAgIGNhc2UgJ2J2ZWMzJzpcbiAgICAgICAgICAgIHJldHVybiBib29sZWFuQXJyYXkoMyAqIHNpemUpO1xuXG4gICAgICAgIGNhc2UgJ2J2ZWM0JzpcbiAgICAgICAgICAgIHJldHVybiBib29sZWFuQXJyYXkoNCAqIHNpemUpO1xuXG4gICAgICAgIGNhc2UgJ21hdDInOlxuICAgICAgICAgICAgcmV0dXJuIG5ldyBGbG9hdDMyQXJyYXkoWzEsIDBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwwLCAxXSk7XG5cbiAgICAgICAgY2FzZSAnbWF0Myc6IFxuICAgICAgICAgICAgcmV0dXJuIG5ldyBGbG9hdDMyQXJyYXkoWzEsIDAsIDBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwwLCAxLCAwXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsMCwgMCwgMV0pO1xuXG4gICAgICAgIGNhc2UgJ21hdDQnOlxuICAgICAgICAgICAgcmV0dXJuIG5ldyBGbG9hdDMyQXJyYXkoWzEsIDAsIDAsIDBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwwLCAxLCAwLCAwXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsMCwgMCwgMSwgMFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLDAsIDAsIDAsIDFdKTtcbiAgICB9XG59XG5cbnZhciBib29sZWFuQXJyYXkgPSBmdW5jdGlvbihzaXplKVxue1xuICAgIHZhciBhcnJheSA9IG5ldyBBcnJheShzaXplKTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXJyYXkubGVuZ3RoOyBpKyspIFxuICAgIHtcbiAgICAgICAgYXJyYXlbaV0gPSBmYWxzZTtcbiAgICB9O1xuXG4gICAgcmV0dXJuIGFycmF5O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGRlZmF1bHRWYWx1ZTtcbiIsIlxudmFyIG1hcFR5cGUgPSByZXF1aXJlKCcuL21hcFR5cGUnKTtcbnZhciBtYXBTaXplID0gcmVxdWlyZSgnLi9tYXBTaXplJyk7XG5cbnZhciBleHRyYWN0QXR0cmlidXRlcyA9IGZ1bmN0aW9uKGdsLCBwcm9ncmFtKVxue1xuICAgIHZhciBhdHRyaWJ1dGVzID0ge307XG5cbiAgICB2YXIgdG90YWxBdHRyaWJ1dGVzID0gZ2wuZ2V0UHJvZ3JhbVBhcmFtZXRlcihwcm9ncmFtLCBnbC5BQ1RJVkVfQVRUUklCVVRFUylcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdG90YWxBdHRyaWJ1dGVzOyBpKyspIFxuICAgIHtcbiAgICAgICAgdmFyIGF0dHJpYkRhdGEgPSBnbC5nZXRBY3RpdmVBdHRyaWIocHJvZ3JhbSwgaSk7XG4gICAgICAgIHZhciB0eXBlID0gbWFwVHlwZShnbCwgYXR0cmliRGF0YS50eXBlKTtcblxuICAgICAgICBhdHRyaWJ1dGVzW2F0dHJpYkRhdGEubmFtZV0gPSB7XG4gICAgICAgICAgICB0eXBlOnR5cGUsXG4gICAgICAgICAgICBzaXplOm1hcFNpemUodHlwZSksXG4gICAgICAgICAgICBsb2NhdGlvbjpnbC5nZXRBdHRyaWJMb2NhdGlvbihwcm9ncmFtLCBhdHRyaWJEYXRhLm5hbWUpLFxuICAgICAgICAgICAgLy9UT0RPIC0gbWFrZSBhbiBhdHRyaWJ1dGUgb2JqZWN0XG4gICAgICAgICAgICBwb2ludGVyOmZ1bmN0aW9uKHR5cGUsIG5vcm1hbGl6ZWQsIHN0cmlkZSwgc3RhcnQpe1xuXG4gICAgICAgICAgICAgLy8gICBjb25zb2xlLmxvZyh0aGlzLmxvY2F0aW9uKVxuICAgICAgICAgICAgICAgIGdsLnZlcnRleEF0dHJpYlBvaW50ZXIodGhpcy5sb2NhdGlvbix0aGlzLnNpemUsIHR5cGUgfHwgZ2wuRkxPQVQsIG5vcm1hbGl6ZWQgfHwgZmFsc2UsIHN0cmlkZSB8fCAwLCBzdGFydCB8fCAwKTsgXG5cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH07XG5cbiAgICByZXR1cm4gYXR0cmlidXRlczsgIFxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGV4dHJhY3RBdHRyaWJ1dGVzO1xuXG4iLCJ2YXIgbWFwVHlwZSA9IHJlcXVpcmUoJy4vbWFwVHlwZScpO1xudmFyIGRlZmF1bHRWYWx1ZSA9IHJlcXVpcmUoJy4vZGVmYXVsdFZhbHVlJyk7XG5cblxudmFyIGV4dHJhY3RVbmlmb3JtcyA9IGZ1bmN0aW9uKGdsLCBwcm9ncmFtKVxue1xuXHR2YXIgdW5pZm9ybXMgPSB7fTtcblx0XG4gICAgdmFyIHRvdGFsVW5pZm9ybXMgPSBnbC5nZXRQcm9ncmFtUGFyYW1ldGVyKHByb2dyYW0sIGdsLkFDVElWRV9VTklGT1JNUylcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdG90YWxVbmlmb3JtczsgaSsrKSBcbiAgICB7XG4gICAgXHR2YXIgdW5pZm9ybURhdGEgPSBnbC5nZXRBY3RpdmVVbmlmb3JtKHByb2dyYW0sIGkpO1xuICAgIFx0dmFyIG5hbWUgPSB1bmlmb3JtRGF0YS5uYW1lLnJlcGxhY2UoL1xcWy4qP1xcXS8sIFwiXCIpO1xuICAgICAgICB2YXIgdHlwZSA9IG1hcFR5cGUoZ2wsIHVuaWZvcm1EYXRhLnR5cGUgKTtcblxuICAgIFx0dW5pZm9ybXNbbmFtZV0gPSB7XG4gICAgXHRcdHR5cGU6dHlwZSxcbiAgICBcdFx0c2l6ZTp1bmlmb3JtRGF0YS5zaXplLFxuICAgIFx0XHRsb2NhdGlvbjpnbC5nZXRVbmlmb3JtTG9jYXRpb24ocHJvZ3JhbSwgbmFtZSksXG4gICAgXHRcdHZhbHVlOmRlZmF1bHRWYWx1ZSh0eXBlLCB1bmlmb3JtRGF0YS5zaXplKVxuICAgIFx0fVxuICAgIH07XG5cdFxuXHRyZXR1cm4gdW5pZm9ybXM7XHRcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBleHRyYWN0VW5pZm9ybXM7XG5cbiIsIlxudmFyIGdlbmVyYXRlVW5pZm9ybUFjY2Vzc09iamVjdCA9IGZ1bmN0aW9uKGdsLCB1bmlmb3JtRGF0YSlcbntcbiAgICAvLyB0aGlzIGlzIHRoZSBvYmplY3Qgd2Ugd2lsbCBiZSBzZW5kaW5nIGJhY2suXG4gICAgLy8gYW4gb2JqZWN0IGhpZXJhY2h5IHdpbGwgYmUgY3JlYXRlZCBmb3Igc3RydWN0c1xuICAgIHZhciB1bmlmb3JtcyA9IHtkYXRhOnt9fTtcblxuICAgIHVuaWZvcm1zLmdsID0gZ2w7XG4gICAgXG4gICAgdmFyIHVuaWZvcm1LZXlzPSBPYmplY3Qua2V5cyh1bmlmb3JtRGF0YSk7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHVuaWZvcm1LZXlzLmxlbmd0aDsgaSsrKSBcbiAgICB7XG4gICAgICAgIHZhciBmdWxsTmFtZSA9IHVuaWZvcm1LZXlzW2ldXG5cbiAgICAgICAgdmFyIG5hbWVUb2tlbnMgPSBmdWxsTmFtZS5zcGxpdCgnLicpO1xuICAgICAgICB2YXIgbmFtZSA9IG5hbWVUb2tlbnNbbmFtZVRva2Vucy5sZW5ndGggLSAxXTtcblxuICAgICAgICB2YXIgdW5pZm9ybUdyb3VwID0gZ2V0VW5pZm9ybUdyb3VwKG5hbWVUb2tlbnMsIHVuaWZvcm1zKTtcblxuICAgICAgICB2YXIgdW5pZm9ybSA9ICB1bmlmb3JtRGF0YVtmdWxsTmFtZV07XG4gICAgICAgIHVuaWZvcm1Hcm91cC5kYXRhW25hbWVdID0gdW5pZm9ybTtcblxuICAgICAgICB1bmlmb3JtR3JvdXAuZ2wgPSBnbDtcblxuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodW5pZm9ybUdyb3VwLCBuYW1lLCB7XG4gICAgICAgICAgICBnZXQ6IGdlbmVyYXRlR2V0dGVyKG5hbWUpLFxuICAgICAgICAgICAgc2V0OiBnZW5lcmF0ZVNldHRlcihuYW1lLCB1bmlmb3JtKVxuICAgICAgICB9KVxuICAgIH07XG5cbiAgICByZXR1cm4gdW5pZm9ybXM7XG59XG5cbnZhciBnZW5lcmF0ZUdldHRlciA9IGZ1bmN0aW9uKG5hbWUpXG57XG5cdHZhciB0ZW1wbGF0ZSA9IGdldHRlclRlbXBsYXRlLnJlcGxhY2UoJyUlJywgbmFtZSk7XG5cdHJldHVybiBuZXcgRnVuY3Rpb24odGVtcGxhdGUpO1xufVxuXG52YXIgZ2VuZXJhdGVTZXR0ZXIgPSBmdW5jdGlvbihuYW1lLCB1bmlmb3JtKVxue1xuICAgIHZhciB0ZW1wbGF0ZSA9IHNldHRlclRlbXBsYXRlLnJlcGxhY2UoLyUlL2csIG5hbWUpO1xuICAgIHZhciBzZXRUZW1wbGF0ZVxuICAgIFxuICAgIGlmKHVuaWZvcm0uc2l6ZSA9PT0gMSlcbiAgICB7XG4gICAgICAgIHNldFRlbXBsYXRlID0gR0xTTF9UT19TSU5HTEVfU0VUVEVSU1t1bmlmb3JtLnR5cGVdO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICBzZXRUZW1wbGF0ZSA9IEdMU0xfVE9fQVJSQVlfU0VUVEVSU1t1bmlmb3JtLnR5cGVdO1xuICAgIH1cblxuICAgIGlmKHNldFRlbXBsYXRlKVxuICAgIHtcbiAgICAgICAgdGVtcGxhdGUgKz0gXCJcXG50aGlzLmdsLlwiICsgc2V0VGVtcGxhdGUgKyBcIjtcIjtcbiAgICB9XG5cbiAgXHRyZXR1cm4gbmV3IEZ1bmN0aW9uKCd2YWx1ZScsIHRlbXBsYXRlKTtcbn1cblxudmFyIGdldFVuaWZvcm1Hcm91cCA9IGZ1bmN0aW9uKG5hbWVUb2tlbnMsIHVuaWZvcm0pXG57XG4gICAgdmFyIGN1ciA9IHVuaWZvcm07XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG5hbWVUb2tlbnMubGVuZ3RoIC0gMTsgaSsrKSBcbiAgICB7XG4gICAgICAgIHZhciBvID0gY3VyW25hbWVUb2tlbnNbaV1dIHx8IHtkYXRhOnt9fTtcbiAgICAgICAgY3VyW25hbWVUb2tlbnNbaV1dID0gbztcbiAgICAgICAgY3VyID0gbztcbiAgICB9O1xuXG4gICAgcmV0dXJuIGN1clxufVxuXG52YXIgZ2V0dGVyVGVtcGxhdGUgPSBbXG4gICAgJ3JldHVybiB0aGlzLmRhdGEuJSUudmFsdWU7Jyxcbl0uam9pbignXFxuJyk7XG5cbnZhciBzZXR0ZXJUZW1wbGF0ZSA9IFtcbiAgICAndGhpcy5kYXRhLiUlLnZhbHVlID0gdmFsdWU7JyxcbiAgICAndmFyIGxvY2F0aW9uID0gdGhpcy5kYXRhLiUlLmxvY2F0aW9uOydcbl0uam9pbignXFxuJyk7XG5cblxudmFyIEdMU0xfVE9fU0lOR0xFX1NFVFRFUlMgPSB7XG5cbiAgICAnZmxvYXQnOiAgICAndW5pZm9ybTFmKGxvY2F0aW9uLCB2YWx1ZSknLFxuXG4gICAgJ3ZlYzInOiAgICAgJ3VuaWZvcm0yZihsb2NhdGlvbiwgdmFsdWVbMF0sIHZhbHVlWzFdKScsXG4gICAgJ3ZlYzMnOiAgICAgJ3VuaWZvcm0zZihsb2NhdGlvbiwgdmFsdWVbMF0sIHZhbHVlWzFdLCB2YWx1ZVsyXSknLFxuICAgICd2ZWM0JzogICAgICd1bmlmb3JtNGYobG9jYXRpb24sIHZhbHVlWzBdLCB2YWx1ZVsxXSwgdmFsdWVbMl0sIHZhbHVlWzNdKScsXG4gICAgXHRcbiAgICAnaW50JzogICAgICAndW5pZm9ybTFpKGxvY2F0aW9uLCB2YWx1ZSknLFxuICAgICdpdmVjMic6ICAgICd1bmlmb3JtMmkobG9jYXRpb24sIHZhbHVlWzBdLCB2YWx1ZVsxXSknLFxuICAgICdpdmVjMyc6ICAgICd1bmlmb3JtM2kobG9jYXRpb24sIHZhbHVlWzBdLCB2YWx1ZVsxXSwgdmFsdWVbMl0pJyxcbiAgICAnaXZlYzQnOiAgICAndW5pZm9ybTRpKGxvY2F0aW9uLCB2YWx1ZVswXSwgdmFsdWVbMV0sIHZhbHVlWzJdLCB2YWx1ZVszXSknLFxuXG4gICAgJ2Jvb2wnOiAgICAgJ3VuaWZvcm0xaShsb2NhdGlvbiwgdmFsdWUpJyxcbiAgICAnYnZlYzInOiAgICAndW5pZm9ybTJpKGxvY2F0aW9uLCB2YWx1ZVswXSwgdmFsdWVbMV0pJyxcbiAgICAnYnZlYzMnOiAgICAndW5pZm9ybTNpKGxvY2F0aW9uLCB2YWx1ZVswXSwgdmFsdWVbMV0sIHZhbHVlWzJdKScsXG4gICAgJ2J2ZWM0JzogICAgJ3VuaWZvcm00aShsb2NhdGlvbiwgdmFsdWVbMF0sIHZhbHVlWzFdLCB2YWx1ZVsyXSwgdmFsdWVbM10pJyxcblxuICAgICdtYXQyJzogICAgICd1bmlmb3JtTWF0cml4MmZ2KGxvY2F0aW9uLCBmYWxzZSwgdmFsdWUpJyxcbiAgICAnbWF0Myc6ICAgICAndW5pZm9ybU1hdHJpeDNmdihsb2NhdGlvbiwgZmFsc2UsIHZhbHVlKScsXG4gICAgJ21hdDQnOiAgICAgJ3VuaWZvcm1NYXRyaXg0ZnYobG9jYXRpb24sIGZhbHNlLCB2YWx1ZSknLFxuXG4gICAgJ3NhbXBsZXIyRCc6J3VuaWZvcm0xaShsb2NhdGlvbiwgdmFsdWUpJ1xufVxuXG52YXIgR0xTTF9UT19BUlJBWV9TRVRURVJTID0ge1xuXG4gICAgJ2Zsb2F0JzogICAgJ3VuaWZvcm0xZnYobG9jYXRpb24sIHZhbHVlKScsXG5cbiAgICAndmVjMic6ICAgICAndW5pZm9ybTJmdihsb2NhdGlvbiwgdmFsdWUpJyxcbiAgICAndmVjMyc6ICAgICAndW5pZm9ybTNmdihsb2NhdGlvbiwgdmFsdWUpJyxcbiAgICAndmVjNCc6ICAgICAndW5pZm9ybTRmdihsb2NhdGlvbiwgdmFsdWUpJyxcbiAgICBcdFxuICAgICdpbnQnOiAgICAgICd1bmlmb3JtMWl2KGxvY2F0aW9uLCB2YWx1ZSknLFxuICAgICdpdmVjMic6ICAgICd1bmlmb3JtMml2KGxvY2F0aW9uLCB2YWx1ZSknLFxuICAgICdpdmVjMyc6ICAgICd1bmlmb3JtM2l2KGxvY2F0aW9uLCB2YWx1ZSknLFxuICAgICdpdmVjNCc6ICAgICd1bmlmb3JtNGl2KGxvY2F0aW9uLCB2YWx1ZSknLFxuXG4gICAgJ2Jvb2wnOiAgICAgJ3VuaWZvcm0xaXYobG9jYXRpb24sIHZhbHVlKScsXG4gICAgJ2J2ZWMyJzogICAgJ3VuaWZvcm0yaXYobG9jYXRpb24sIHZhbHVlKScsXG4gICAgJ2J2ZWMzJzogICAgJ3VuaWZvcm0zaXYobG9jYXRpb24sIHZhbHVlKScsXG4gICAgJ2J2ZWM0JzogICAgJ3VuaWZvcm00aXYobG9jYXRpb24sIHZhbHVlKScsXG4gICBcbiAgICAnc2FtcGxlcjJEJzondW5pZm9ybTFpdihsb2NhdGlvbiwgdmFsdWUpJ1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGdlbmVyYXRlVW5pZm9ybUFjY2Vzc09iamVjdDtcblxuIiwiXG5cbnZhciBtYXBTaXplID0gZnVuY3Rpb24odHlwZSkgXG57IFxuICAgIHJldHVybiBHTFNMX1RPX1NJWkVbdHlwZV07XG59XG5cblxudmFyIEdMU0xfVE9fU0laRSA9IHtcbiAgICAnZmxvYXQnOiAgICAxLFxuICAgICd2ZWMyJzogICAgIDIsXG4gICAgJ3ZlYzMnOiAgICAgMyxcbiAgICAndmVjNCc6ICAgICA0LFxuXG4gICAgJ2ludCc6ICAgICAgMSxcbiAgICAnaXZlYzInOiAgICAyLFxuICAgICdpdmVjMyc6ICAgIDMsXG4gICAgJ2l2ZWM0JzogICAgNCxcblxuICAgICdib29sJzogICAgIDEsXG4gICAgJ2J2ZWMyJzogICAgMixcbiAgICAnYnZlYzMnOiAgICAzLFxuICAgICdidmVjNCc6ICAgIDQsXG5cbiAgICAnbWF0Mic6ICAgICA0LFxuICAgICdtYXQzJzogICAgIDksXG4gICAgJ21hdDQnOiAgICAgMTYsXG5cbiAgICAnc2FtcGxlcjJEJzogIDFcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBtYXBTaXplO1xuIiwiXG5cbnZhciBtYXBTaXplID0gZnVuY3Rpb24oZ2wsIHR5cGUpIFxue1xuICAgIGlmKCFHTF9UQUJMRSkgXG4gICAge1xuICAgICAgICB2YXIgdHlwZU5hbWVzID0gT2JqZWN0LmtleXMoR0xfVE9fR0xTTF9UWVBFUyk7XG5cbiAgICAgICAgR0xfVEFCTEUgPSB7fTtcblxuICAgICAgICBmb3IodmFyIGkgPSAwOyBpIDwgdHlwZU5hbWVzLmxlbmd0aDsgKytpKSBcbiAgICAgICAge1xuICAgICAgICAgICAgdmFyIHRuID0gdHlwZU5hbWVzW2ldO1xuICAgICAgICAgICAgR0xfVEFCTEVbIGdsW3RuXSBdID0gR0xfVE9fR0xTTF9UWVBFU1t0bl07XG4gICAgICAgIH1cbiAgICB9XG5cbiAgcmV0dXJuIEdMX1RBQkxFW3R5cGVdO1xufVxuXG52YXIgR0xfVEFCTEUgPSBudWxsO1xuXG52YXIgR0xfVE9fR0xTTF9UWVBFUyA9IHtcbiAgJ0ZMT0FUJzogICAgICAgJ2Zsb2F0JyxcbiAgJ0ZMT0FUX1ZFQzInOiAgJ3ZlYzInLFxuICAnRkxPQVRfVkVDMyc6ICAndmVjMycsXG4gICdGTE9BVF9WRUM0JzogICd2ZWM0JyxcblxuICAnSU5UJzogICAgICAgICAnaW50JyxcbiAgJ0lOVF9WRUMyJzogICAgJ2l2ZWMyJyxcbiAgJ0lOVF9WRUMzJzogICAgJ2l2ZWMzJyxcbiAgJ0lOVF9WRUM0JzogICAgJ2l2ZWM0JyxcbiAgXG4gICdCT09MJzogICAgICAgICdib29sJyxcbiAgJ0JPT0xfVkVDMic6ICAgJ2J2ZWMyJyxcbiAgJ0JPT0xfVkVDMyc6ICAgJ2J2ZWMzJyxcbiAgJ0JPT0xfVkVDNCc6ICAgJ2J2ZWM0JyxcbiAgXG4gICdGTE9BVF9NQVQyJzogICdtYXQyJyxcbiAgJ0ZMT0FUX01BVDMnOiAgJ21hdDMnLFxuICAnRkxPQVRfTUFUNCc6ICAnbWF0NCcsXG4gIFxuICAnU0FNUExFUl8yRCc6ICAnc2FtcGxlcjJEJyAgXG59XG5cbm1vZHVsZS5leHBvcnRzID0gbWFwU2l6ZTtcbiIsIi8qIVxuICogYXN5bmNcbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS9jYW9sYW4vYXN5bmNcbiAqXG4gKiBDb3B5cmlnaHQgMjAxMC0yMDE0IENhb2xhbiBNY01haG9uXG4gKiBSZWxlYXNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2VcbiAqL1xuKGZ1bmN0aW9uICgpIHtcblxuICAgIHZhciBhc3luYyA9IHt9O1xuICAgIGZ1bmN0aW9uIG5vb3AoKSB7fVxuICAgIGZ1bmN0aW9uIGlkZW50aXR5KHYpIHtcbiAgICAgICAgcmV0dXJuIHY7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHRvQm9vbCh2KSB7XG4gICAgICAgIHJldHVybiAhIXY7XG4gICAgfVxuICAgIGZ1bmN0aW9uIG5vdElkKHYpIHtcbiAgICAgICAgcmV0dXJuICF2O1xuICAgIH1cblxuICAgIC8vIGdsb2JhbCBvbiB0aGUgc2VydmVyLCB3aW5kb3cgaW4gdGhlIGJyb3dzZXJcbiAgICB2YXIgcHJldmlvdXNfYXN5bmM7XG5cbiAgICAvLyBFc3RhYmxpc2ggdGhlIHJvb3Qgb2JqZWN0LCBgd2luZG93YCAoYHNlbGZgKSBpbiB0aGUgYnJvd3NlciwgYGdsb2JhbGBcbiAgICAvLyBvbiB0aGUgc2VydmVyLCBvciBgdGhpc2AgaW4gc29tZSB2aXJ0dWFsIG1hY2hpbmVzLiBXZSB1c2UgYHNlbGZgXG4gICAgLy8gaW5zdGVhZCBvZiBgd2luZG93YCBmb3IgYFdlYldvcmtlcmAgc3VwcG9ydC5cbiAgICB2YXIgcm9vdCA9IHR5cGVvZiBzZWxmID09PSAnb2JqZWN0JyAmJiBzZWxmLnNlbGYgPT09IHNlbGYgJiYgc2VsZiB8fFxuICAgICAgICAgICAgdHlwZW9mIGdsb2JhbCA9PT0gJ29iamVjdCcgJiYgZ2xvYmFsLmdsb2JhbCA9PT0gZ2xvYmFsICYmIGdsb2JhbCB8fFxuICAgICAgICAgICAgdGhpcztcblxuICAgIGlmIChyb290ICE9IG51bGwpIHtcbiAgICAgICAgcHJldmlvdXNfYXN5bmMgPSByb290LmFzeW5jO1xuICAgIH1cblxuICAgIGFzeW5jLm5vQ29uZmxpY3QgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJvb3QuYXN5bmMgPSBwcmV2aW91c19hc3luYztcbiAgICAgICAgcmV0dXJuIGFzeW5jO1xuICAgIH07XG5cbiAgICBmdW5jdGlvbiBvbmx5X29uY2UoZm4pIHtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgaWYgKGZuID09PSBudWxsKSB0aHJvdyBuZXcgRXJyb3IoXCJDYWxsYmFjayB3YXMgYWxyZWFkeSBjYWxsZWQuXCIpO1xuICAgICAgICAgICAgZm4uYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICAgICAgICAgIGZuID0gbnVsbDtcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBfb25jZShmbikge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICBpZiAoZm4gPT09IG51bGwpIHJldHVybjtcbiAgICAgICAgICAgIGZuLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgICAgICAgICBmbiA9IG51bGw7XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgLy8vLyBjcm9zcy1icm93c2VyIGNvbXBhdGlibGl0eSBmdW5jdGlvbnMgLy8vL1xuXG4gICAgdmFyIF90b1N0cmluZyA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7XG5cbiAgICB2YXIgX2lzQXJyYXkgPSBBcnJheS5pc0FycmF5IHx8IGZ1bmN0aW9uIChvYmopIHtcbiAgICAgICAgcmV0dXJuIF90b1N0cmluZy5jYWxsKG9iaikgPT09ICdbb2JqZWN0IEFycmF5XSc7XG4gICAgfTtcblxuICAgIC8vIFBvcnRlZCBmcm9tIHVuZGVyc2NvcmUuanMgaXNPYmplY3RcbiAgICB2YXIgX2lzT2JqZWN0ID0gZnVuY3Rpb24ob2JqKSB7XG4gICAgICAgIHZhciB0eXBlID0gdHlwZW9mIG9iajtcbiAgICAgICAgcmV0dXJuIHR5cGUgPT09ICdmdW5jdGlvbicgfHwgdHlwZSA9PT0gJ29iamVjdCcgJiYgISFvYmo7XG4gICAgfTtcblxuICAgIGZ1bmN0aW9uIF9pc0FycmF5TGlrZShhcnIpIHtcbiAgICAgICAgcmV0dXJuIF9pc0FycmF5KGFycikgfHwgKFxuICAgICAgICAgICAgLy8gaGFzIGEgcG9zaXRpdmUgaW50ZWdlciBsZW5ndGggcHJvcGVydHlcbiAgICAgICAgICAgIHR5cGVvZiBhcnIubGVuZ3RoID09PSBcIm51bWJlclwiICYmXG4gICAgICAgICAgICBhcnIubGVuZ3RoID49IDAgJiZcbiAgICAgICAgICAgIGFyci5sZW5ndGggJSAxID09PSAwXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gX2FycmF5RWFjaChhcnIsIGl0ZXJhdG9yKSB7XG4gICAgICAgIHZhciBpbmRleCA9IC0xLFxuICAgICAgICAgICAgbGVuZ3RoID0gYXJyLmxlbmd0aDtcblxuICAgICAgICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgICAgICAgICAgaXRlcmF0b3IoYXJyW2luZGV4XSwgaW5kZXgsIGFycik7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBfbWFwKGFyciwgaXRlcmF0b3IpIHtcbiAgICAgICAgdmFyIGluZGV4ID0gLTEsXG4gICAgICAgICAgICBsZW5ndGggPSBhcnIubGVuZ3RoLFxuICAgICAgICAgICAgcmVzdWx0ID0gQXJyYXkobGVuZ3RoKTtcblxuICAgICAgICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgICAgICAgICAgcmVzdWx0W2luZGV4XSA9IGl0ZXJhdG9yKGFycltpbmRleF0sIGluZGV4LCBhcnIpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gX3JhbmdlKGNvdW50KSB7XG4gICAgICAgIHJldHVybiBfbWFwKEFycmF5KGNvdW50KSwgZnVuY3Rpb24gKHYsIGkpIHsgcmV0dXJuIGk7IH0pO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIF9yZWR1Y2UoYXJyLCBpdGVyYXRvciwgbWVtbykge1xuICAgICAgICBfYXJyYXlFYWNoKGFyciwgZnVuY3Rpb24gKHgsIGksIGEpIHtcbiAgICAgICAgICAgIG1lbW8gPSBpdGVyYXRvcihtZW1vLCB4LCBpLCBhKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBtZW1vO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIF9mb3JFYWNoT2Yob2JqZWN0LCBpdGVyYXRvcikge1xuICAgICAgICBfYXJyYXlFYWNoKF9rZXlzKG9iamVjdCksIGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgICAgIGl0ZXJhdG9yKG9iamVjdFtrZXldLCBrZXkpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBfaW5kZXhPZihhcnIsIGl0ZW0pIHtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcnIubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGlmIChhcnJbaV0gPT09IGl0ZW0pIHJldHVybiBpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiAtMTtcbiAgICB9XG5cbiAgICB2YXIgX2tleXMgPSBPYmplY3Qua2V5cyB8fCBmdW5jdGlvbiAob2JqKSB7XG4gICAgICAgIHZhciBrZXlzID0gW107XG4gICAgICAgIGZvciAodmFyIGsgaW4gb2JqKSB7XG4gICAgICAgICAgICBpZiAob2JqLmhhc093blByb3BlcnR5KGspKSB7XG4gICAgICAgICAgICAgICAga2V5cy5wdXNoKGspO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBrZXlzO1xuICAgIH07XG5cbiAgICBmdW5jdGlvbiBfa2V5SXRlcmF0b3IoY29sbCkge1xuICAgICAgICB2YXIgaSA9IC0xO1xuICAgICAgICB2YXIgbGVuO1xuICAgICAgICB2YXIga2V5cztcbiAgICAgICAgaWYgKF9pc0FycmF5TGlrZShjb2xsKSkge1xuICAgICAgICAgICAgbGVuID0gY29sbC5sZW5ndGg7XG4gICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24gbmV4dCgpIHtcbiAgICAgICAgICAgICAgICBpKys7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGkgPCBsZW4gPyBpIDogbnVsbDtcbiAgICAgICAgICAgIH07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBrZXlzID0gX2tleXMoY29sbCk7XG4gICAgICAgICAgICBsZW4gPSBrZXlzLmxlbmd0aDtcbiAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbiBuZXh0KCkge1xuICAgICAgICAgICAgICAgIGkrKztcbiAgICAgICAgICAgICAgICByZXR1cm4gaSA8IGxlbiA/IGtleXNbaV0gOiBudWxsO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIFNpbWlsYXIgdG8gRVM2J3MgcmVzdCBwYXJhbSAoaHR0cDovL2FyaXlhLm9maWxhYnMuY29tLzIwMTMvMDMvZXM2LWFuZC1yZXN0LXBhcmFtZXRlci5odG1sKVxuICAgIC8vIFRoaXMgYWNjdW11bGF0ZXMgdGhlIGFyZ3VtZW50cyBwYXNzZWQgaW50byBhbiBhcnJheSwgYWZ0ZXIgYSBnaXZlbiBpbmRleC5cbiAgICAvLyBGcm9tIHVuZGVyc2NvcmUuanMgKGh0dHBzOi8vZ2l0aHViLmNvbS9qYXNoa2VuYXMvdW5kZXJzY29yZS9wdWxsLzIxNDApLlxuICAgIGZ1bmN0aW9uIF9yZXN0UGFyYW0oZnVuYywgc3RhcnRJbmRleCkge1xuICAgICAgICBzdGFydEluZGV4ID0gc3RhcnRJbmRleCA9PSBudWxsID8gZnVuYy5sZW5ndGggLSAxIDogK3N0YXJ0SW5kZXg7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIHZhciBsZW5ndGggPSBNYXRoLm1heChhcmd1bWVudHMubGVuZ3RoIC0gc3RhcnRJbmRleCwgMCk7XG4gICAgICAgICAgICB2YXIgcmVzdCA9IEFycmF5KGxlbmd0aCk7XG4gICAgICAgICAgICBmb3IgKHZhciBpbmRleCA9IDA7IGluZGV4IDwgbGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgICAgICAgICAgICAgcmVzdFtpbmRleF0gPSBhcmd1bWVudHNbaW5kZXggKyBzdGFydEluZGV4XTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHN3aXRjaCAoc3RhcnRJbmRleCkge1xuICAgICAgICAgICAgICAgIGNhc2UgMDogcmV0dXJuIGZ1bmMuY2FsbCh0aGlzLCByZXN0KTtcbiAgICAgICAgICAgICAgICBjYXNlIDE6IHJldHVybiBmdW5jLmNhbGwodGhpcywgYXJndW1lbnRzWzBdLCByZXN0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIEN1cnJlbnRseSB1bnVzZWQgYnV0IGhhbmRsZSBjYXNlcyBvdXRzaWRlIG9mIHRoZSBzd2l0Y2ggc3RhdGVtZW50OlxuICAgICAgICAgICAgLy8gdmFyIGFyZ3MgPSBBcnJheShzdGFydEluZGV4ICsgMSk7XG4gICAgICAgICAgICAvLyBmb3IgKGluZGV4ID0gMDsgaW5kZXggPCBzdGFydEluZGV4OyBpbmRleCsrKSB7XG4gICAgICAgICAgICAvLyAgICAgYXJnc1tpbmRleF0gPSBhcmd1bWVudHNbaW5kZXhdO1xuICAgICAgICAgICAgLy8gfVxuICAgICAgICAgICAgLy8gYXJnc1tzdGFydEluZGV4XSA9IHJlc3Q7XG4gICAgICAgICAgICAvLyByZXR1cm4gZnVuYy5hcHBseSh0aGlzLCBhcmdzKTtcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBfd2l0aG91dEluZGV4KGl0ZXJhdG9yKSB7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAodmFsdWUsIGluZGV4LCBjYWxsYmFjaykge1xuICAgICAgICAgICAgcmV0dXJuIGl0ZXJhdG9yKHZhbHVlLCBjYWxsYmFjayk7XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgLy8vLyBleHBvcnRlZCBhc3luYyBtb2R1bGUgZnVuY3Rpb25zIC8vLy9cblxuICAgIC8vLy8gbmV4dFRpY2sgaW1wbGVtZW50YXRpb24gd2l0aCBicm93c2VyLWNvbXBhdGlibGUgZmFsbGJhY2sgLy8vL1xuXG4gICAgLy8gY2FwdHVyZSB0aGUgZ2xvYmFsIHJlZmVyZW5jZSB0byBndWFyZCBhZ2FpbnN0IGZha2VUaW1lciBtb2Nrc1xuICAgIHZhciBfc2V0SW1tZWRpYXRlID0gdHlwZW9mIHNldEltbWVkaWF0ZSA9PT0gJ2Z1bmN0aW9uJyAmJiBzZXRJbW1lZGlhdGU7XG5cbiAgICB2YXIgX2RlbGF5ID0gX3NldEltbWVkaWF0ZSA/IGZ1bmN0aW9uKGZuKSB7XG4gICAgICAgIC8vIG5vdCBhIGRpcmVjdCBhbGlhcyBmb3IgSUUxMCBjb21wYXRpYmlsaXR5XG4gICAgICAgIF9zZXRJbW1lZGlhdGUoZm4pO1xuICAgIH0gOiBmdW5jdGlvbihmbikge1xuICAgICAgICBzZXRUaW1lb3V0KGZuLCAwKTtcbiAgICB9O1xuXG4gICAgaWYgKHR5cGVvZiBwcm9jZXNzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgcHJvY2Vzcy5uZXh0VGljayA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBhc3luYy5uZXh0VGljayA9IHByb2Nlc3MubmV4dFRpY2s7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgYXN5bmMubmV4dFRpY2sgPSBfZGVsYXk7XG4gICAgfVxuICAgIGFzeW5jLnNldEltbWVkaWF0ZSA9IF9zZXRJbW1lZGlhdGUgPyBfZGVsYXkgOiBhc3luYy5uZXh0VGljaztcblxuXG4gICAgYXN5bmMuZm9yRWFjaCA9XG4gICAgYXN5bmMuZWFjaCA9IGZ1bmN0aW9uIChhcnIsIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICByZXR1cm4gYXN5bmMuZWFjaE9mKGFyciwgX3dpdGhvdXRJbmRleChpdGVyYXRvciksIGNhbGxiYWNrKTtcbiAgICB9O1xuXG4gICAgYXN5bmMuZm9yRWFjaFNlcmllcyA9XG4gICAgYXN5bmMuZWFjaFNlcmllcyA9IGZ1bmN0aW9uIChhcnIsIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICByZXR1cm4gYXN5bmMuZWFjaE9mU2VyaWVzKGFyciwgX3dpdGhvdXRJbmRleChpdGVyYXRvciksIGNhbGxiYWNrKTtcbiAgICB9O1xuXG5cbiAgICBhc3luYy5mb3JFYWNoTGltaXQgPVxuICAgIGFzeW5jLmVhY2hMaW1pdCA9IGZ1bmN0aW9uIChhcnIsIGxpbWl0LCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgcmV0dXJuIF9lYWNoT2ZMaW1pdChsaW1pdCkoYXJyLCBfd2l0aG91dEluZGV4KGl0ZXJhdG9yKSwgY2FsbGJhY2spO1xuICAgIH07XG5cbiAgICBhc3luYy5mb3JFYWNoT2YgPVxuICAgIGFzeW5jLmVhY2hPZiA9IGZ1bmN0aW9uIChvYmplY3QsIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICBjYWxsYmFjayA9IF9vbmNlKGNhbGxiYWNrIHx8IG5vb3ApO1xuICAgICAgICBvYmplY3QgPSBvYmplY3QgfHwgW107XG5cbiAgICAgICAgdmFyIGl0ZXIgPSBfa2V5SXRlcmF0b3Iob2JqZWN0KTtcbiAgICAgICAgdmFyIGtleSwgY29tcGxldGVkID0gMDtcblxuICAgICAgICB3aGlsZSAoKGtleSA9IGl0ZXIoKSkgIT0gbnVsbCkge1xuICAgICAgICAgICAgY29tcGxldGVkICs9IDE7XG4gICAgICAgICAgICBpdGVyYXRvcihvYmplY3Rba2V5XSwga2V5LCBvbmx5X29uY2UoZG9uZSkpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGNvbXBsZXRlZCA9PT0gMCkgY2FsbGJhY2sobnVsbCk7XG5cbiAgICAgICAgZnVuY3Rpb24gZG9uZShlcnIpIHtcbiAgICAgICAgICAgIGNvbXBsZXRlZC0tO1xuICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBDaGVjayBrZXkgaXMgbnVsbCBpbiBjYXNlIGl0ZXJhdG9yIGlzbid0IGV4aGF1c3RlZFxuICAgICAgICAgICAgLy8gYW5kIGRvbmUgcmVzb2x2ZWQgc3luY2hyb25vdXNseS5cbiAgICAgICAgICAgIGVsc2UgaWYgKGtleSA9PT0gbnVsbCAmJiBjb21wbGV0ZWQgPD0gMCkge1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrKG51bGwpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfTtcblxuICAgIGFzeW5jLmZvckVhY2hPZlNlcmllcyA9XG4gICAgYXN5bmMuZWFjaE9mU2VyaWVzID0gZnVuY3Rpb24gKG9iaiwgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgIGNhbGxiYWNrID0gX29uY2UoY2FsbGJhY2sgfHwgbm9vcCk7XG4gICAgICAgIG9iaiA9IG9iaiB8fCBbXTtcbiAgICAgICAgdmFyIG5leHRLZXkgPSBfa2V5SXRlcmF0b3Iob2JqKTtcbiAgICAgICAgdmFyIGtleSA9IG5leHRLZXkoKTtcbiAgICAgICAgZnVuY3Rpb24gaXRlcmF0ZSgpIHtcbiAgICAgICAgICAgIHZhciBzeW5jID0gdHJ1ZTtcbiAgICAgICAgICAgIGlmIChrZXkgPT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gY2FsbGJhY2sobnVsbCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpdGVyYXRvcihvYmpba2V5XSwga2V5LCBvbmx5X29uY2UoZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGtleSA9IG5leHRLZXkoKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGtleSA9PT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKG51bGwpO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN5bmMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhc3luYy5zZXRJbW1lZGlhdGUoaXRlcmF0ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZXJhdGUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgIHN5bmMgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBpdGVyYXRlKCk7XG4gICAgfTtcblxuXG5cbiAgICBhc3luYy5mb3JFYWNoT2ZMaW1pdCA9XG4gICAgYXN5bmMuZWFjaE9mTGltaXQgPSBmdW5jdGlvbiAob2JqLCBsaW1pdCwgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgIF9lYWNoT2ZMaW1pdChsaW1pdCkob2JqLCBpdGVyYXRvciwgY2FsbGJhY2spO1xuICAgIH07XG5cbiAgICBmdW5jdGlvbiBfZWFjaE9mTGltaXQobGltaXQpIHtcblxuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKG9iaiwgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICBjYWxsYmFjayA9IF9vbmNlKGNhbGxiYWNrIHx8IG5vb3ApO1xuICAgICAgICAgICAgb2JqID0gb2JqIHx8IFtdO1xuICAgICAgICAgICAgdmFyIG5leHRLZXkgPSBfa2V5SXRlcmF0b3Iob2JqKTtcbiAgICAgICAgICAgIGlmIChsaW1pdCA8PSAwKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKG51bGwpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdmFyIGRvbmUgPSBmYWxzZTtcbiAgICAgICAgICAgIHZhciBydW5uaW5nID0gMDtcbiAgICAgICAgICAgIHZhciBlcnJvcmVkID0gZmFsc2U7XG5cbiAgICAgICAgICAgIChmdW5jdGlvbiByZXBsZW5pc2ggKCkge1xuICAgICAgICAgICAgICAgIGlmIChkb25lICYmIHJ1bm5pbmcgPD0gMCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gY2FsbGJhY2sobnVsbCk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgd2hpbGUgKHJ1bm5pbmcgPCBsaW1pdCAmJiAhZXJyb3JlZCkge1xuICAgICAgICAgICAgICAgICAgICB2YXIga2V5ID0gbmV4dEtleSgpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoa2V5ID09PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBkb25lID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChydW5uaW5nIDw9IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhudWxsKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBydW5uaW5nICs9IDE7XG4gICAgICAgICAgICAgICAgICAgIGl0ZXJhdG9yKG9ialtrZXldLCBrZXksIG9ubHlfb25jZShmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBydW5uaW5nIC09IDE7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvcmVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcGxlbmlzaCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSkoKTtcbiAgICAgICAgfTtcbiAgICB9XG5cblxuICAgIGZ1bmN0aW9uIGRvUGFyYWxsZWwoZm4pIHtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChvYmosIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICAgICAgcmV0dXJuIGZuKGFzeW5jLmVhY2hPZiwgb2JqLCBpdGVyYXRvciwgY2FsbGJhY2spO1xuICAgICAgICB9O1xuICAgIH1cbiAgICBmdW5jdGlvbiBkb1BhcmFsbGVsTGltaXQoZm4pIHtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChvYmosIGxpbWl0LCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIHJldHVybiBmbihfZWFjaE9mTGltaXQobGltaXQpLCBvYmosIGl0ZXJhdG9yLCBjYWxsYmFjayk7XG4gICAgICAgIH07XG4gICAgfVxuICAgIGZ1bmN0aW9uIGRvU2VyaWVzKGZuKSB7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAob2JqLCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIHJldHVybiBmbihhc3luYy5lYWNoT2ZTZXJpZXMsIG9iaiwgaXRlcmF0b3IsIGNhbGxiYWNrKTtcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBfYXN5bmNNYXAoZWFjaGZuLCBhcnIsIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICBjYWxsYmFjayA9IF9vbmNlKGNhbGxiYWNrIHx8IG5vb3ApO1xuICAgICAgICBhcnIgPSBhcnIgfHwgW107XG4gICAgICAgIHZhciByZXN1bHRzID0gX2lzQXJyYXlMaWtlKGFycikgPyBbXSA6IHt9O1xuICAgICAgICBlYWNoZm4oYXJyLCBmdW5jdGlvbiAodmFsdWUsIGluZGV4LCBjYWxsYmFjaykge1xuICAgICAgICAgICAgaXRlcmF0b3IodmFsdWUsIGZ1bmN0aW9uIChlcnIsIHYpIHtcbiAgICAgICAgICAgICAgICByZXN1bHRzW2luZGV4XSA9IHY7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICBjYWxsYmFjayhlcnIsIHJlc3VsdHMpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBhc3luYy5tYXAgPSBkb1BhcmFsbGVsKF9hc3luY01hcCk7XG4gICAgYXN5bmMubWFwU2VyaWVzID0gZG9TZXJpZXMoX2FzeW5jTWFwKTtcbiAgICBhc3luYy5tYXBMaW1pdCA9IGRvUGFyYWxsZWxMaW1pdChfYXN5bmNNYXApO1xuXG4gICAgLy8gcmVkdWNlIG9ubHkgaGFzIGEgc2VyaWVzIHZlcnNpb24sIGFzIGRvaW5nIHJlZHVjZSBpbiBwYXJhbGxlbCB3b24ndFxuICAgIC8vIHdvcmsgaW4gbWFueSBzaXR1YXRpb25zLlxuICAgIGFzeW5jLmluamVjdCA9XG4gICAgYXN5bmMuZm9sZGwgPVxuICAgIGFzeW5jLnJlZHVjZSA9IGZ1bmN0aW9uIChhcnIsIG1lbW8sIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICBhc3luYy5lYWNoT2ZTZXJpZXMoYXJyLCBmdW5jdGlvbiAoeCwgaSwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIGl0ZXJhdG9yKG1lbW8sIHgsIGZ1bmN0aW9uIChlcnIsIHYpIHtcbiAgICAgICAgICAgICAgICBtZW1vID0gdjtcbiAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgIGNhbGxiYWNrKGVyciwgbWVtbyk7XG4gICAgICAgIH0pO1xuICAgIH07XG5cbiAgICBhc3luYy5mb2xkciA9XG4gICAgYXN5bmMucmVkdWNlUmlnaHQgPSBmdW5jdGlvbiAoYXJyLCBtZW1vLCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgdmFyIHJldmVyc2VkID0gX21hcChhcnIsIGlkZW50aXR5KS5yZXZlcnNlKCk7XG4gICAgICAgIGFzeW5jLnJlZHVjZShyZXZlcnNlZCwgbWVtbywgaXRlcmF0b3IsIGNhbGxiYWNrKTtcbiAgICB9O1xuXG4gICAgYXN5bmMudHJhbnNmb3JtID0gZnVuY3Rpb24gKGFyciwgbWVtbywgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAzKSB7XG4gICAgICAgICAgICBjYWxsYmFjayA9IGl0ZXJhdG9yO1xuICAgICAgICAgICAgaXRlcmF0b3IgPSBtZW1vO1xuICAgICAgICAgICAgbWVtbyA9IF9pc0FycmF5KGFycikgPyBbXSA6IHt9O1xuICAgICAgICB9XG5cbiAgICAgICAgYXN5bmMuZWFjaE9mKGFyciwgZnVuY3Rpb24odiwgaywgY2IpIHtcbiAgICAgICAgICAgIGl0ZXJhdG9yKG1lbW8sIHYsIGssIGNiKTtcbiAgICAgICAgfSwgZnVuY3Rpb24oZXJyKSB7XG4gICAgICAgICAgICBjYWxsYmFjayhlcnIsIG1lbW8pO1xuICAgICAgICB9KTtcbiAgICB9O1xuXG4gICAgZnVuY3Rpb24gX2ZpbHRlcihlYWNoZm4sIGFyciwgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgIHZhciByZXN1bHRzID0gW107XG4gICAgICAgIGVhY2hmbihhcnIsIGZ1bmN0aW9uICh4LCBpbmRleCwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIGl0ZXJhdG9yKHgsIGZ1bmN0aW9uICh2KSB7XG4gICAgICAgICAgICAgICAgaWYgKHYpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0cy5wdXNoKHtpbmRleDogaW5kZXgsIHZhbHVlOiB4fSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhbGxiYWNrKCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgY2FsbGJhY2soX21hcChyZXN1bHRzLnNvcnQoZnVuY3Rpb24gKGEsIGIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gYS5pbmRleCAtIGIuaW5kZXg7XG4gICAgICAgICAgICB9KSwgZnVuY3Rpb24gKHgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4geC52YWx1ZTtcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgYXN5bmMuc2VsZWN0ID1cbiAgICBhc3luYy5maWx0ZXIgPSBkb1BhcmFsbGVsKF9maWx0ZXIpO1xuXG4gICAgYXN5bmMuc2VsZWN0TGltaXQgPVxuICAgIGFzeW5jLmZpbHRlckxpbWl0ID0gZG9QYXJhbGxlbExpbWl0KF9maWx0ZXIpO1xuXG4gICAgYXN5bmMuc2VsZWN0U2VyaWVzID1cbiAgICBhc3luYy5maWx0ZXJTZXJpZXMgPSBkb1NlcmllcyhfZmlsdGVyKTtcblxuICAgIGZ1bmN0aW9uIF9yZWplY3QoZWFjaGZuLCBhcnIsIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICBfZmlsdGVyKGVhY2hmbiwgYXJyLCBmdW5jdGlvbih2YWx1ZSwgY2IpIHtcbiAgICAgICAgICAgIGl0ZXJhdG9yKHZhbHVlLCBmdW5jdGlvbih2KSB7XG4gICAgICAgICAgICAgICAgY2IoIXYpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sIGNhbGxiYWNrKTtcbiAgICB9XG4gICAgYXN5bmMucmVqZWN0ID0gZG9QYXJhbGxlbChfcmVqZWN0KTtcbiAgICBhc3luYy5yZWplY3RMaW1pdCA9IGRvUGFyYWxsZWxMaW1pdChfcmVqZWN0KTtcbiAgICBhc3luYy5yZWplY3RTZXJpZXMgPSBkb1NlcmllcyhfcmVqZWN0KTtcblxuICAgIGZ1bmN0aW9uIF9jcmVhdGVUZXN0ZXIoZWFjaGZuLCBjaGVjaywgZ2V0UmVzdWx0KSB7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbihhcnIsIGxpbWl0LCBpdGVyYXRvciwgY2IpIHtcbiAgICAgICAgICAgIGZ1bmN0aW9uIGRvbmUoKSB7XG4gICAgICAgICAgICAgICAgaWYgKGNiKSBjYihnZXRSZXN1bHQoZmFsc2UsIHZvaWQgMCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZnVuY3Rpb24gaXRlcmF0ZWUoeCwgXywgY2FsbGJhY2spIHtcbiAgICAgICAgICAgICAgICBpZiAoIWNiKSByZXR1cm4gY2FsbGJhY2soKTtcbiAgICAgICAgICAgICAgICBpdGVyYXRvcih4LCBmdW5jdGlvbiAodikge1xuICAgICAgICAgICAgICAgICAgICBpZiAoY2IgJiYgY2hlY2sodikpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNiKGdldFJlc3VsdCh0cnVlLCB4KSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBjYiA9IGl0ZXJhdG9yID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID4gMykge1xuICAgICAgICAgICAgICAgIGVhY2hmbihhcnIsIGxpbWl0LCBpdGVyYXRlZSwgZG9uZSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGNiID0gaXRlcmF0b3I7XG4gICAgICAgICAgICAgICAgaXRlcmF0b3IgPSBsaW1pdDtcbiAgICAgICAgICAgICAgICBlYWNoZm4oYXJyLCBpdGVyYXRlZSwgZG9uZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgYXN5bmMuYW55ID1cbiAgICBhc3luYy5zb21lID0gX2NyZWF0ZVRlc3Rlcihhc3luYy5lYWNoT2YsIHRvQm9vbCwgaWRlbnRpdHkpO1xuXG4gICAgYXN5bmMuc29tZUxpbWl0ID0gX2NyZWF0ZVRlc3Rlcihhc3luYy5lYWNoT2ZMaW1pdCwgdG9Cb29sLCBpZGVudGl0eSk7XG5cbiAgICBhc3luYy5hbGwgPVxuICAgIGFzeW5jLmV2ZXJ5ID0gX2NyZWF0ZVRlc3Rlcihhc3luYy5lYWNoT2YsIG5vdElkLCBub3RJZCk7XG5cbiAgICBhc3luYy5ldmVyeUxpbWl0ID0gX2NyZWF0ZVRlc3Rlcihhc3luYy5lYWNoT2ZMaW1pdCwgbm90SWQsIG5vdElkKTtcblxuICAgIGZ1bmN0aW9uIF9maW5kR2V0UmVzdWx0KHYsIHgpIHtcbiAgICAgICAgcmV0dXJuIHg7XG4gICAgfVxuICAgIGFzeW5jLmRldGVjdCA9IF9jcmVhdGVUZXN0ZXIoYXN5bmMuZWFjaE9mLCBpZGVudGl0eSwgX2ZpbmRHZXRSZXN1bHQpO1xuICAgIGFzeW5jLmRldGVjdFNlcmllcyA9IF9jcmVhdGVUZXN0ZXIoYXN5bmMuZWFjaE9mU2VyaWVzLCBpZGVudGl0eSwgX2ZpbmRHZXRSZXN1bHQpO1xuICAgIGFzeW5jLmRldGVjdExpbWl0ID0gX2NyZWF0ZVRlc3Rlcihhc3luYy5lYWNoT2ZMaW1pdCwgaWRlbnRpdHksIF9maW5kR2V0UmVzdWx0KTtcblxuICAgIGFzeW5jLnNvcnRCeSA9IGZ1bmN0aW9uIChhcnIsIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICBhc3luYy5tYXAoYXJyLCBmdW5jdGlvbiAoeCwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIGl0ZXJhdG9yKHgsIGZ1bmN0aW9uIChlcnIsIGNyaXRlcmlhKSB7XG4gICAgICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2sobnVsbCwge3ZhbHVlOiB4LCBjcml0ZXJpYTogY3JpdGVyaWF9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSwgZnVuY3Rpb24gKGVyciwgcmVzdWx0cykge1xuICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAgIHJldHVybiBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2sobnVsbCwgX21hcChyZXN1bHRzLnNvcnQoY29tcGFyYXRvciksIGZ1bmN0aW9uICh4KSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB4LnZhbHVlO1xuICAgICAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICB9KTtcblxuICAgICAgICBmdW5jdGlvbiBjb21wYXJhdG9yKGxlZnQsIHJpZ2h0KSB7XG4gICAgICAgICAgICB2YXIgYSA9IGxlZnQuY3JpdGVyaWEsIGIgPSByaWdodC5jcml0ZXJpYTtcbiAgICAgICAgICAgIHJldHVybiBhIDwgYiA/IC0xIDogYSA+IGIgPyAxIDogMDtcbiAgICAgICAgfVxuICAgIH07XG5cbiAgICBhc3luYy5hdXRvID0gZnVuY3Rpb24gKHRhc2tzLCBjb25jdXJyZW5jeSwgY2FsbGJhY2spIHtcbiAgICAgICAgaWYgKCFjYWxsYmFjaykge1xuICAgICAgICAgICAgLy8gY29uY3VycmVuY3kgaXMgb3B0aW9uYWwsIHNoaWZ0IHRoZSBhcmdzLlxuICAgICAgICAgICAgY2FsbGJhY2sgPSBjb25jdXJyZW5jeTtcbiAgICAgICAgICAgIGNvbmN1cnJlbmN5ID0gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBjYWxsYmFjayA9IF9vbmNlKGNhbGxiYWNrIHx8IG5vb3ApO1xuICAgICAgICB2YXIga2V5cyA9IF9rZXlzKHRhc2tzKTtcbiAgICAgICAgdmFyIHJlbWFpbmluZ1Rhc2tzID0ga2V5cy5sZW5ndGg7XG4gICAgICAgIGlmICghcmVtYWluaW5nVGFza3MpIHtcbiAgICAgICAgICAgIHJldHVybiBjYWxsYmFjayhudWxsKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWNvbmN1cnJlbmN5KSB7XG4gICAgICAgICAgICBjb25jdXJyZW5jeSA9IHJlbWFpbmluZ1Rhc2tzO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIHJlc3VsdHMgPSB7fTtcbiAgICAgICAgdmFyIHJ1bm5pbmdUYXNrcyA9IDA7XG5cbiAgICAgICAgdmFyIGxpc3RlbmVycyA9IFtdO1xuICAgICAgICBmdW5jdGlvbiBhZGRMaXN0ZW5lcihmbikge1xuICAgICAgICAgICAgbGlzdGVuZXJzLnVuc2hpZnQoZm4pO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIHJlbW92ZUxpc3RlbmVyKGZuKSB7XG4gICAgICAgICAgICB2YXIgaWR4ID0gX2luZGV4T2YobGlzdGVuZXJzLCBmbik7XG4gICAgICAgICAgICBpZiAoaWR4ID49IDApIGxpc3RlbmVycy5zcGxpY2UoaWR4LCAxKTtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiB0YXNrQ29tcGxldGUoKSB7XG4gICAgICAgICAgICByZW1haW5pbmdUYXNrcy0tO1xuICAgICAgICAgICAgX2FycmF5RWFjaChsaXN0ZW5lcnMuc2xpY2UoMCksIGZ1bmN0aW9uIChmbikge1xuICAgICAgICAgICAgICAgIGZuKCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGFkZExpc3RlbmVyKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGlmICghcmVtYWluaW5nVGFza3MpIHtcbiAgICAgICAgICAgICAgICBjYWxsYmFjayhudWxsLCByZXN1bHRzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgX2FycmF5RWFjaChrZXlzLCBmdW5jdGlvbiAoaykge1xuICAgICAgICAgICAgdmFyIHRhc2sgPSBfaXNBcnJheSh0YXNrc1trXSkgPyB0YXNrc1trXTogW3Rhc2tzW2tdXTtcbiAgICAgICAgICAgIHZhciB0YXNrQ2FsbGJhY2sgPSBfcmVzdFBhcmFtKGZ1bmN0aW9uKGVyciwgYXJncykge1xuICAgICAgICAgICAgICAgIHJ1bm5pbmdUYXNrcy0tO1xuICAgICAgICAgICAgICAgIGlmIChhcmdzLmxlbmd0aCA8PSAxKSB7XG4gICAgICAgICAgICAgICAgICAgIGFyZ3MgPSBhcmdzWzBdO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBzYWZlUmVzdWx0cyA9IHt9O1xuICAgICAgICAgICAgICAgICAgICBfZm9yRWFjaE9mKHJlc3VsdHMsIGZ1bmN0aW9uKHZhbCwgcmtleSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgc2FmZVJlc3VsdHNbcmtleV0gPSB2YWw7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICBzYWZlUmVzdWx0c1trXSA9IGFyZ3M7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKGVyciwgc2FmZVJlc3VsdHMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0c1trXSA9IGFyZ3M7XG4gICAgICAgICAgICAgICAgICAgIGFzeW5jLnNldEltbWVkaWF0ZSh0YXNrQ29tcGxldGUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdmFyIHJlcXVpcmVzID0gdGFzay5zbGljZSgwLCB0YXNrLmxlbmd0aCAtIDEpO1xuICAgICAgICAgICAgLy8gcHJldmVudCBkZWFkLWxvY2tzXG4gICAgICAgICAgICB2YXIgbGVuID0gcmVxdWlyZXMubGVuZ3RoO1xuICAgICAgICAgICAgdmFyIGRlcDtcbiAgICAgICAgICAgIHdoaWxlIChsZW4tLSkge1xuICAgICAgICAgICAgICAgIGlmICghKGRlcCA9IHRhc2tzW3JlcXVpcmVzW2xlbl1dKSkge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0hhcyBpbmV4aXN0YW50IGRlcGVuZGVuY3knKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKF9pc0FycmF5KGRlcCkgJiYgX2luZGV4T2YoZGVwLCBrKSA+PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignSGFzIGN5Y2xpYyBkZXBlbmRlbmNpZXMnKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmdW5jdGlvbiByZWFkeSgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcnVubmluZ1Rhc2tzIDwgY29uY3VycmVuY3kgJiYgX3JlZHVjZShyZXF1aXJlcywgZnVuY3Rpb24gKGEsIHgpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChhICYmIHJlc3VsdHMuaGFzT3duUHJvcGVydHkoeCkpO1xuICAgICAgICAgICAgICAgIH0sIHRydWUpICYmICFyZXN1bHRzLmhhc093blByb3BlcnR5KGspO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHJlYWR5KCkpIHtcbiAgICAgICAgICAgICAgICBydW5uaW5nVGFza3MrKztcbiAgICAgICAgICAgICAgICB0YXNrW3Rhc2subGVuZ3RoIC0gMV0odGFza0NhbGxiYWNrLCByZXN1bHRzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGFkZExpc3RlbmVyKGxpc3RlbmVyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZ1bmN0aW9uIGxpc3RlbmVyKCkge1xuICAgICAgICAgICAgICAgIGlmIChyZWFkeSgpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJ1bm5pbmdUYXNrcysrO1xuICAgICAgICAgICAgICAgICAgICByZW1vdmVMaXN0ZW5lcihsaXN0ZW5lcik7XG4gICAgICAgICAgICAgICAgICAgIHRhc2tbdGFzay5sZW5ndGggLSAxXSh0YXNrQ2FsbGJhY2ssIHJlc3VsdHMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfTtcblxuXG5cbiAgICBhc3luYy5yZXRyeSA9IGZ1bmN0aW9uKHRpbWVzLCB0YXNrLCBjYWxsYmFjaykge1xuICAgICAgICB2YXIgREVGQVVMVF9USU1FUyA9IDU7XG4gICAgICAgIHZhciBERUZBVUxUX0lOVEVSVkFMID0gMDtcblxuICAgICAgICB2YXIgYXR0ZW1wdHMgPSBbXTtcblxuICAgICAgICB2YXIgb3B0cyA9IHtcbiAgICAgICAgICAgIHRpbWVzOiBERUZBVUxUX1RJTUVTLFxuICAgICAgICAgICAgaW50ZXJ2YWw6IERFRkFVTFRfSU5URVJWQUxcbiAgICAgICAgfTtcblxuICAgICAgICBmdW5jdGlvbiBwYXJzZVRpbWVzKGFjYywgdCl7XG4gICAgICAgICAgICBpZih0eXBlb2YgdCA9PT0gJ251bWJlcicpe1xuICAgICAgICAgICAgICAgIGFjYy50aW1lcyA9IHBhcnNlSW50KHQsIDEwKSB8fCBERUZBVUxUX1RJTUVTO1xuICAgICAgICAgICAgfSBlbHNlIGlmKHR5cGVvZiB0ID09PSAnb2JqZWN0Jyl7XG4gICAgICAgICAgICAgICAgYWNjLnRpbWVzID0gcGFyc2VJbnQodC50aW1lcywgMTApIHx8IERFRkFVTFRfVElNRVM7XG4gICAgICAgICAgICAgICAgYWNjLmludGVydmFsID0gcGFyc2VJbnQodC5pbnRlcnZhbCwgMTApIHx8IERFRkFVTFRfSU5URVJWQUw7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignVW5zdXBwb3J0ZWQgYXJndW1lbnQgdHlwZSBmb3IgXFwndGltZXNcXCc6ICcgKyB0eXBlb2YgdCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgbGVuZ3RoID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgICAgICAgaWYgKGxlbmd0aCA8IDEgfHwgbGVuZ3RoID4gMykge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIGFyZ3VtZW50cyAtIG11c3QgYmUgZWl0aGVyICh0YXNrKSwgKHRhc2ssIGNhbGxiYWNrKSwgKHRpbWVzLCB0YXNrKSBvciAodGltZXMsIHRhc2ssIGNhbGxiYWNrKScpO1xuICAgICAgICB9IGVsc2UgaWYgKGxlbmd0aCA8PSAyICYmIHR5cGVvZiB0aW1lcyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgY2FsbGJhY2sgPSB0YXNrO1xuICAgICAgICAgICAgdGFzayA9IHRpbWVzO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0eXBlb2YgdGltZXMgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIHBhcnNlVGltZXMob3B0cywgdGltZXMpO1xuICAgICAgICB9XG4gICAgICAgIG9wdHMuY2FsbGJhY2sgPSBjYWxsYmFjaztcbiAgICAgICAgb3B0cy50YXNrID0gdGFzaztcblxuICAgICAgICBmdW5jdGlvbiB3cmFwcGVkVGFzayh3cmFwcGVkQ2FsbGJhY2ssIHdyYXBwZWRSZXN1bHRzKSB7XG4gICAgICAgICAgICBmdW5jdGlvbiByZXRyeUF0dGVtcHQodGFzaywgZmluYWxBdHRlbXB0KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKHNlcmllc0NhbGxiYWNrKSB7XG4gICAgICAgICAgICAgICAgICAgIHRhc2soZnVuY3Rpb24oZXJyLCByZXN1bHQpe1xuICAgICAgICAgICAgICAgICAgICAgICAgc2VyaWVzQ2FsbGJhY2soIWVyciB8fCBmaW5hbEF0dGVtcHQsIHtlcnI6IGVyciwgcmVzdWx0OiByZXN1bHR9KTtcbiAgICAgICAgICAgICAgICAgICAgfSwgd3JhcHBlZFJlc3VsdHMpO1xuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGZ1bmN0aW9uIHJldHJ5SW50ZXJ2YWwoaW50ZXJ2YWwpe1xuICAgICAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbihzZXJpZXNDYWxsYmFjayl7XG4gICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKXtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlcmllc0NhbGxiYWNrKG51bGwpO1xuICAgICAgICAgICAgICAgICAgICB9LCBpbnRlcnZhbCk7XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgd2hpbGUgKG9wdHMudGltZXMpIHtcblxuICAgICAgICAgICAgICAgIHZhciBmaW5hbEF0dGVtcHQgPSAhKG9wdHMudGltZXMtPTEpO1xuICAgICAgICAgICAgICAgIGF0dGVtcHRzLnB1c2gocmV0cnlBdHRlbXB0KG9wdHMudGFzaywgZmluYWxBdHRlbXB0KSk7XG4gICAgICAgICAgICAgICAgaWYoIWZpbmFsQXR0ZW1wdCAmJiBvcHRzLmludGVydmFsID4gMCl7XG4gICAgICAgICAgICAgICAgICAgIGF0dGVtcHRzLnB1c2gocmV0cnlJbnRlcnZhbChvcHRzLmludGVydmFsKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBhc3luYy5zZXJpZXMoYXR0ZW1wdHMsIGZ1bmN0aW9uKGRvbmUsIGRhdGEpe1xuICAgICAgICAgICAgICAgIGRhdGEgPSBkYXRhW2RhdGEubGVuZ3RoIC0gMV07XG4gICAgICAgICAgICAgICAgKHdyYXBwZWRDYWxsYmFjayB8fCBvcHRzLmNhbGxiYWNrKShkYXRhLmVyciwgZGF0YS5yZXN1bHQpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBJZiBhIGNhbGxiYWNrIGlzIHBhc3NlZCwgcnVuIHRoaXMgYXMgYSBjb250cm9sbCBmbG93XG4gICAgICAgIHJldHVybiBvcHRzLmNhbGxiYWNrID8gd3JhcHBlZFRhc2soKSA6IHdyYXBwZWRUYXNrO1xuICAgIH07XG5cbiAgICBhc3luYy53YXRlcmZhbGwgPSBmdW5jdGlvbiAodGFza3MsIGNhbGxiYWNrKSB7XG4gICAgICAgIGNhbGxiYWNrID0gX29uY2UoY2FsbGJhY2sgfHwgbm9vcCk7XG4gICAgICAgIGlmICghX2lzQXJyYXkodGFza3MpKSB7XG4gICAgICAgICAgICB2YXIgZXJyID0gbmV3IEVycm9yKCdGaXJzdCBhcmd1bWVudCB0byB3YXRlcmZhbGwgbXVzdCBiZSBhbiBhcnJheSBvZiBmdW5jdGlvbnMnKTtcbiAgICAgICAgICAgIHJldHVybiBjYWxsYmFjayhlcnIpO1xuICAgICAgICB9XG4gICAgICAgIGlmICghdGFza3MubGVuZ3RoKSB7XG4gICAgICAgICAgICByZXR1cm4gY2FsbGJhY2soKTtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiB3cmFwSXRlcmF0b3IoaXRlcmF0b3IpIHtcbiAgICAgICAgICAgIHJldHVybiBfcmVzdFBhcmFtKGZ1bmN0aW9uIChlcnIsIGFyZ3MpIHtcbiAgICAgICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrLmFwcGx5KG51bGwsIFtlcnJdLmNvbmNhdChhcmdzKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB2YXIgbmV4dCA9IGl0ZXJhdG9yLm5leHQoKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKG5leHQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3MucHVzaCh3cmFwSXRlcmF0b3IobmV4dCkpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgYXJncy5wdXNoKGNhbGxiYWNrKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbnN1cmVBc3luYyhpdGVyYXRvcikuYXBwbHkobnVsbCwgYXJncyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgd3JhcEl0ZXJhdG9yKGFzeW5jLml0ZXJhdG9yKHRhc2tzKSkoKTtcbiAgICB9O1xuXG4gICAgZnVuY3Rpb24gX3BhcmFsbGVsKGVhY2hmbiwgdGFza3MsIGNhbGxiYWNrKSB7XG4gICAgICAgIGNhbGxiYWNrID0gY2FsbGJhY2sgfHwgbm9vcDtcbiAgICAgICAgdmFyIHJlc3VsdHMgPSBfaXNBcnJheUxpa2UodGFza3MpID8gW10gOiB7fTtcblxuICAgICAgICBlYWNoZm4odGFza3MsIGZ1bmN0aW9uICh0YXNrLCBrZXksIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICB0YXNrKF9yZXN0UGFyYW0oZnVuY3Rpb24gKGVyciwgYXJncykge1xuICAgICAgICAgICAgICAgIGlmIChhcmdzLmxlbmd0aCA8PSAxKSB7XG4gICAgICAgICAgICAgICAgICAgIGFyZ3MgPSBhcmdzWzBdO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXN1bHRzW2tleV0gPSBhcmdzO1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgICB9KSk7XG4gICAgICAgIH0sIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgIGNhbGxiYWNrKGVyciwgcmVzdWx0cyk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGFzeW5jLnBhcmFsbGVsID0gZnVuY3Rpb24gKHRhc2tzLCBjYWxsYmFjaykge1xuICAgICAgICBfcGFyYWxsZWwoYXN5bmMuZWFjaE9mLCB0YXNrcywgY2FsbGJhY2spO1xuICAgIH07XG5cbiAgICBhc3luYy5wYXJhbGxlbExpbWl0ID0gZnVuY3Rpb24odGFza3MsIGxpbWl0LCBjYWxsYmFjaykge1xuICAgICAgICBfcGFyYWxsZWwoX2VhY2hPZkxpbWl0KGxpbWl0KSwgdGFza3MsIGNhbGxiYWNrKTtcbiAgICB9O1xuXG4gICAgYXN5bmMuc2VyaWVzID0gZnVuY3Rpb24odGFza3MsIGNhbGxiYWNrKSB7XG4gICAgICAgIF9wYXJhbGxlbChhc3luYy5lYWNoT2ZTZXJpZXMsIHRhc2tzLCBjYWxsYmFjayk7XG4gICAgfTtcblxuICAgIGFzeW5jLml0ZXJhdG9yID0gZnVuY3Rpb24gKHRhc2tzKSB7XG4gICAgICAgIGZ1bmN0aW9uIG1ha2VDYWxsYmFjayhpbmRleCkge1xuICAgICAgICAgICAgZnVuY3Rpb24gZm4oKSB7XG4gICAgICAgICAgICAgICAgaWYgKHRhc2tzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICB0YXNrc1tpbmRleF0uYXBwbHkobnVsbCwgYXJndW1lbnRzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZuLm5leHQoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZuLm5leHQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIChpbmRleCA8IHRhc2tzLmxlbmd0aCAtIDEpID8gbWFrZUNhbGxiYWNrKGluZGV4ICsgMSk6IG51bGw7XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgcmV0dXJuIGZuO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBtYWtlQ2FsbGJhY2soMCk7XG4gICAgfTtcblxuICAgIGFzeW5jLmFwcGx5ID0gX3Jlc3RQYXJhbShmdW5jdGlvbiAoZm4sIGFyZ3MpIHtcbiAgICAgICAgcmV0dXJuIF9yZXN0UGFyYW0oZnVuY3Rpb24gKGNhbGxBcmdzKSB7XG4gICAgICAgICAgICByZXR1cm4gZm4uYXBwbHkoXG4gICAgICAgICAgICAgICAgbnVsbCwgYXJncy5jb25jYXQoY2FsbEFyZ3MpXG4gICAgICAgICAgICApO1xuICAgICAgICB9KTtcbiAgICB9KTtcblxuICAgIGZ1bmN0aW9uIF9jb25jYXQoZWFjaGZuLCBhcnIsIGZuLCBjYWxsYmFjaykge1xuICAgICAgICB2YXIgcmVzdWx0ID0gW107XG4gICAgICAgIGVhY2hmbihhcnIsIGZ1bmN0aW9uICh4LCBpbmRleCwgY2IpIHtcbiAgICAgICAgICAgIGZuKHgsIGZ1bmN0aW9uIChlcnIsIHkpIHtcbiAgICAgICAgICAgICAgICByZXN1bHQgPSByZXN1bHQuY29uY2F0KHkgfHwgW10pO1xuICAgICAgICAgICAgICAgIGNiKGVycik7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSwgZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgY2FsbGJhY2soZXJyLCByZXN1bHQpO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgYXN5bmMuY29uY2F0ID0gZG9QYXJhbGxlbChfY29uY2F0KTtcbiAgICBhc3luYy5jb25jYXRTZXJpZXMgPSBkb1NlcmllcyhfY29uY2F0KTtcblxuICAgIGFzeW5jLndoaWxzdCA9IGZ1bmN0aW9uICh0ZXN0LCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgY2FsbGJhY2sgPSBjYWxsYmFjayB8fCBub29wO1xuICAgICAgICBpZiAodGVzdCgpKSB7XG4gICAgICAgICAgICB2YXIgbmV4dCA9IF9yZXN0UGFyYW0oZnVuY3Rpb24oZXJyLCBhcmdzKSB7XG4gICAgICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodGVzdC5hcHBseSh0aGlzLCBhcmdzKSkge1xuICAgICAgICAgICAgICAgICAgICBpdGVyYXRvcihuZXh0KTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhudWxsKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGl0ZXJhdG9yKG5leHQpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY2FsbGJhY2sobnVsbCk7XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgYXN5bmMuZG9XaGlsc3QgPSBmdW5jdGlvbiAoaXRlcmF0b3IsIHRlc3QsIGNhbGxiYWNrKSB7XG4gICAgICAgIHZhciBjYWxscyA9IDA7XG4gICAgICAgIHJldHVybiBhc3luYy53aGlsc3QoZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICByZXR1cm4gKytjYWxscyA8PSAxIHx8IHRlc3QuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICAgICAgfSwgaXRlcmF0b3IsIGNhbGxiYWNrKTtcbiAgICB9O1xuXG4gICAgYXN5bmMudW50aWwgPSBmdW5jdGlvbiAodGVzdCwgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgIHJldHVybiBhc3luYy53aGlsc3QoZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICByZXR1cm4gIXRlc3QuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICAgICAgfSwgaXRlcmF0b3IsIGNhbGxiYWNrKTtcbiAgICB9O1xuXG4gICAgYXN5bmMuZG9VbnRpbCA9IGZ1bmN0aW9uIChpdGVyYXRvciwgdGVzdCwgY2FsbGJhY2spIHtcbiAgICAgICAgcmV0dXJuIGFzeW5jLmRvV2hpbHN0KGl0ZXJhdG9yLCBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIHJldHVybiAhdGVzdC5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgICAgICB9LCBjYWxsYmFjayk7XG4gICAgfTtcblxuICAgIGFzeW5jLmR1cmluZyA9IGZ1bmN0aW9uICh0ZXN0LCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgY2FsbGJhY2sgPSBjYWxsYmFjayB8fCBub29wO1xuXG4gICAgICAgIHZhciBuZXh0ID0gX3Jlc3RQYXJhbShmdW5jdGlvbihlcnIsIGFyZ3MpIHtcbiAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBhcmdzLnB1c2goY2hlY2spO1xuICAgICAgICAgICAgICAgIHRlc3QuYXBwbHkodGhpcywgYXJncyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHZhciBjaGVjayA9IGZ1bmN0aW9uKGVyciwgdHJ1dGgpIHtcbiAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh0cnV0aCkge1xuICAgICAgICAgICAgICAgIGl0ZXJhdG9yKG5leHQpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBjYWxsYmFjayhudWxsKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcblxuICAgICAgICB0ZXN0KGNoZWNrKTtcbiAgICB9O1xuXG4gICAgYXN5bmMuZG9EdXJpbmcgPSBmdW5jdGlvbiAoaXRlcmF0b3IsIHRlc3QsIGNhbGxiYWNrKSB7XG4gICAgICAgIHZhciBjYWxscyA9IDA7XG4gICAgICAgIGFzeW5jLmR1cmluZyhmdW5jdGlvbihuZXh0KSB7XG4gICAgICAgICAgICBpZiAoY2FsbHMrKyA8IDEpIHtcbiAgICAgICAgICAgICAgICBuZXh0KG51bGwsIHRydWUpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0ZXN0LmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sIGl0ZXJhdG9yLCBjYWxsYmFjayk7XG4gICAgfTtcblxuICAgIGZ1bmN0aW9uIF9xdWV1ZSh3b3JrZXIsIGNvbmN1cnJlbmN5LCBwYXlsb2FkKSB7XG4gICAgICAgIGlmIChjb25jdXJyZW5jeSA9PSBudWxsKSB7XG4gICAgICAgICAgICBjb25jdXJyZW5jeSA9IDE7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZihjb25jdXJyZW5jeSA9PT0gMCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdDb25jdXJyZW5jeSBtdXN0IG5vdCBiZSB6ZXJvJyk7XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gX2luc2VydChxLCBkYXRhLCBwb3MsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICBpZiAoY2FsbGJhY2sgIT0gbnVsbCAmJiB0eXBlb2YgY2FsbGJhY2sgIT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcInRhc2sgY2FsbGJhY2sgbXVzdCBiZSBhIGZ1bmN0aW9uXCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcS5zdGFydGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIGlmICghX2lzQXJyYXkoZGF0YSkpIHtcbiAgICAgICAgICAgICAgICBkYXRhID0gW2RhdGFdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYoZGF0YS5sZW5ndGggPT09IDAgJiYgcS5pZGxlKCkpIHtcbiAgICAgICAgICAgICAgICAvLyBjYWxsIGRyYWluIGltbWVkaWF0ZWx5IGlmIHRoZXJlIGFyZSBubyB0YXNrc1xuICAgICAgICAgICAgICAgIHJldHVybiBhc3luYy5zZXRJbW1lZGlhdGUoZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgICAgIHEuZHJhaW4oKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIF9hcnJheUVhY2goZGF0YSwgZnVuY3Rpb24odGFzaykge1xuICAgICAgICAgICAgICAgIHZhciBpdGVtID0ge1xuICAgICAgICAgICAgICAgICAgICBkYXRhOiB0YXNrLFxuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjazogY2FsbGJhY2sgfHwgbm9vcFxuICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICBpZiAocG9zKSB7XG4gICAgICAgICAgICAgICAgICAgIHEudGFza3MudW5zaGlmdChpdGVtKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBxLnRhc2tzLnB1c2goaXRlbSk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKHEudGFza3MubGVuZ3RoID09PSBxLmNvbmN1cnJlbmN5KSB7XG4gICAgICAgICAgICAgICAgICAgIHEuc2F0dXJhdGVkKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBhc3luYy5zZXRJbW1lZGlhdGUocS5wcm9jZXNzKTtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBfbmV4dChxLCB0YXNrcykge1xuICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKCl7XG4gICAgICAgICAgICAgICAgd29ya2VycyAtPSAxO1xuXG4gICAgICAgICAgICAgICAgdmFyIHJlbW92ZWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB2YXIgYXJncyA9IGFyZ3VtZW50cztcbiAgICAgICAgICAgICAgICBfYXJyYXlFYWNoKHRhc2tzLCBmdW5jdGlvbiAodGFzaykge1xuICAgICAgICAgICAgICAgICAgICBfYXJyYXlFYWNoKHdvcmtlcnNMaXN0LCBmdW5jdGlvbiAod29ya2VyLCBpbmRleCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHdvcmtlciA9PT0gdGFzayAmJiAhcmVtb3ZlZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdvcmtlcnNMaXN0LnNwbGljZShpbmRleCwgMSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVtb3ZlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgICAgIHRhc2suY2FsbGJhY2suYXBwbHkodGFzaywgYXJncyk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgaWYgKHEudGFza3MubGVuZ3RoICsgd29ya2VycyA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICBxLmRyYWluKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHEucHJvY2VzcygpO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciB3b3JrZXJzID0gMDtcbiAgICAgICAgdmFyIHdvcmtlcnNMaXN0ID0gW107XG4gICAgICAgIHZhciBxID0ge1xuICAgICAgICAgICAgdGFza3M6IFtdLFxuICAgICAgICAgICAgY29uY3VycmVuY3k6IGNvbmN1cnJlbmN5LFxuICAgICAgICAgICAgcGF5bG9hZDogcGF5bG9hZCxcbiAgICAgICAgICAgIHNhdHVyYXRlZDogbm9vcCxcbiAgICAgICAgICAgIGVtcHR5OiBub29wLFxuICAgICAgICAgICAgZHJhaW46IG5vb3AsXG4gICAgICAgICAgICBzdGFydGVkOiBmYWxzZSxcbiAgICAgICAgICAgIHBhdXNlZDogZmFsc2UsXG4gICAgICAgICAgICBwdXNoOiBmdW5jdGlvbiAoZGF0YSwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgICAgICBfaW5zZXJ0KHEsIGRhdGEsIGZhbHNlLCBjYWxsYmFjayk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAga2lsbDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHEuZHJhaW4gPSBub29wO1xuICAgICAgICAgICAgICAgIHEudGFza3MgPSBbXTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB1bnNoaWZ0OiBmdW5jdGlvbiAoZGF0YSwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgICAgICBfaW5zZXJ0KHEsIGRhdGEsIHRydWUsIGNhbGxiYWNrKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBwcm9jZXNzOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgaWYgKCFxLnBhdXNlZCAmJiB3b3JrZXJzIDwgcS5jb25jdXJyZW5jeSAmJiBxLnRhc2tzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICB3aGlsZSh3b3JrZXJzIDwgcS5jb25jdXJyZW5jeSAmJiBxLnRhc2tzLmxlbmd0aCl7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgdGFza3MgPSBxLnBheWxvYWQgP1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHEudGFza3Muc3BsaWNlKDAsIHEucGF5bG9hZCkgOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHEudGFza3Muc3BsaWNlKDAsIHEudGFza3MubGVuZ3RoKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGRhdGEgPSBfbWFwKHRhc2tzLCBmdW5jdGlvbiAodGFzaykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0YXNrLmRhdGE7XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHEudGFza3MubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcS5lbXB0eSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgd29ya2VycyArPSAxO1xuICAgICAgICAgICAgICAgICAgICAgICAgd29ya2Vyc0xpc3QucHVzaCh0YXNrc1swXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgY2IgPSBvbmx5X29uY2UoX25leHQocSwgdGFza3MpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHdvcmtlcihkYXRhLCBjYik7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbGVuZ3RoOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHEudGFza3MubGVuZ3RoO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHJ1bm5pbmc6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gd29ya2VycztcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB3b3JrZXJzTGlzdDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB3b3JrZXJzTGlzdDtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBpZGxlOiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcS50YXNrcy5sZW5ndGggKyB3b3JrZXJzID09PSAwO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHBhdXNlOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgcS5wYXVzZWQgPSB0cnVlO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHJlc3VtZTogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGlmIChxLnBhdXNlZCA9PT0gZmFsc2UpIHsgcmV0dXJuOyB9XG4gICAgICAgICAgICAgICAgcS5wYXVzZWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB2YXIgcmVzdW1lQ291bnQgPSBNYXRoLm1pbihxLmNvbmN1cnJlbmN5LCBxLnRhc2tzLmxlbmd0aCk7XG4gICAgICAgICAgICAgICAgLy8gTmVlZCB0byBjYWxsIHEucHJvY2VzcyBvbmNlIHBlciBjb25jdXJyZW50XG4gICAgICAgICAgICAgICAgLy8gd29ya2VyIHRvIHByZXNlcnZlIGZ1bGwgY29uY3VycmVuY3kgYWZ0ZXIgcGF1c2VcbiAgICAgICAgICAgICAgICBmb3IgKHZhciB3ID0gMTsgdyA8PSByZXN1bWVDb3VudDsgdysrKSB7XG4gICAgICAgICAgICAgICAgICAgIGFzeW5jLnNldEltbWVkaWF0ZShxLnByb2Nlc3MpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIHE7XG4gICAgfVxuXG4gICAgYXN5bmMucXVldWUgPSBmdW5jdGlvbiAod29ya2VyLCBjb25jdXJyZW5jeSkge1xuICAgICAgICB2YXIgcSA9IF9xdWV1ZShmdW5jdGlvbiAoaXRlbXMsIGNiKSB7XG4gICAgICAgICAgICB3b3JrZXIoaXRlbXNbMF0sIGNiKTtcbiAgICAgICAgfSwgY29uY3VycmVuY3ksIDEpO1xuXG4gICAgICAgIHJldHVybiBxO1xuICAgIH07XG5cbiAgICBhc3luYy5wcmlvcml0eVF1ZXVlID0gZnVuY3Rpb24gKHdvcmtlciwgY29uY3VycmVuY3kpIHtcblxuICAgICAgICBmdW5jdGlvbiBfY29tcGFyZVRhc2tzKGEsIGIpe1xuICAgICAgICAgICAgcmV0dXJuIGEucHJpb3JpdHkgLSBiLnByaW9yaXR5O1xuICAgICAgICB9XG5cbiAgICAgICAgZnVuY3Rpb24gX2JpbmFyeVNlYXJjaChzZXF1ZW5jZSwgaXRlbSwgY29tcGFyZSkge1xuICAgICAgICAgICAgdmFyIGJlZyA9IC0xLFxuICAgICAgICAgICAgICAgIGVuZCA9IHNlcXVlbmNlLmxlbmd0aCAtIDE7XG4gICAgICAgICAgICB3aGlsZSAoYmVnIDwgZW5kKSB7XG4gICAgICAgICAgICAgICAgdmFyIG1pZCA9IGJlZyArICgoZW5kIC0gYmVnICsgMSkgPj4+IDEpO1xuICAgICAgICAgICAgICAgIGlmIChjb21wYXJlKGl0ZW0sIHNlcXVlbmNlW21pZF0pID49IDApIHtcbiAgICAgICAgICAgICAgICAgICAgYmVnID0gbWlkO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGVuZCA9IG1pZCAtIDE7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGJlZztcbiAgICAgICAgfVxuXG4gICAgICAgIGZ1bmN0aW9uIF9pbnNlcnQocSwgZGF0YSwgcHJpb3JpdHksIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICBpZiAoY2FsbGJhY2sgIT0gbnVsbCAmJiB0eXBlb2YgY2FsbGJhY2sgIT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcInRhc2sgY2FsbGJhY2sgbXVzdCBiZSBhIGZ1bmN0aW9uXCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcS5zdGFydGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIGlmICghX2lzQXJyYXkoZGF0YSkpIHtcbiAgICAgICAgICAgICAgICBkYXRhID0gW2RhdGFdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYoZGF0YS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgICAvLyBjYWxsIGRyYWluIGltbWVkaWF0ZWx5IGlmIHRoZXJlIGFyZSBubyB0YXNrc1xuICAgICAgICAgICAgICAgIHJldHVybiBhc3luYy5zZXRJbW1lZGlhdGUoZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgICAgIHEuZHJhaW4oKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIF9hcnJheUVhY2goZGF0YSwgZnVuY3Rpb24odGFzaykge1xuICAgICAgICAgICAgICAgIHZhciBpdGVtID0ge1xuICAgICAgICAgICAgICAgICAgICBkYXRhOiB0YXNrLFxuICAgICAgICAgICAgICAgICAgICBwcmlvcml0eTogcHJpb3JpdHksXG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrOiB0eXBlb2YgY2FsbGJhY2sgPT09ICdmdW5jdGlvbicgPyBjYWxsYmFjayA6IG5vb3BcbiAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgcS50YXNrcy5zcGxpY2UoX2JpbmFyeVNlYXJjaChxLnRhc2tzLCBpdGVtLCBfY29tcGFyZVRhc2tzKSArIDEsIDAsIGl0ZW0pO1xuXG4gICAgICAgICAgICAgICAgaWYgKHEudGFza3MubGVuZ3RoID09PSBxLmNvbmN1cnJlbmN5KSB7XG4gICAgICAgICAgICAgICAgICAgIHEuc2F0dXJhdGVkKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGFzeW5jLnNldEltbWVkaWF0ZShxLnByb2Nlc3MpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBTdGFydCB3aXRoIGEgbm9ybWFsIHF1ZXVlXG4gICAgICAgIHZhciBxID0gYXN5bmMucXVldWUod29ya2VyLCBjb25jdXJyZW5jeSk7XG5cbiAgICAgICAgLy8gT3ZlcnJpZGUgcHVzaCB0byBhY2NlcHQgc2Vjb25kIHBhcmFtZXRlciByZXByZXNlbnRpbmcgcHJpb3JpdHlcbiAgICAgICAgcS5wdXNoID0gZnVuY3Rpb24gKGRhdGEsIHByaW9yaXR5LCBjYWxsYmFjaykge1xuICAgICAgICAgICAgX2luc2VydChxLCBkYXRhLCBwcmlvcml0eSwgY2FsbGJhY2spO1xuICAgICAgICB9O1xuXG4gICAgICAgIC8vIFJlbW92ZSB1bnNoaWZ0IGZ1bmN0aW9uXG4gICAgICAgIGRlbGV0ZSBxLnVuc2hpZnQ7XG5cbiAgICAgICAgcmV0dXJuIHE7XG4gICAgfTtcblxuICAgIGFzeW5jLmNhcmdvID0gZnVuY3Rpb24gKHdvcmtlciwgcGF5bG9hZCkge1xuICAgICAgICByZXR1cm4gX3F1ZXVlKHdvcmtlciwgMSwgcGF5bG9hZCk7XG4gICAgfTtcblxuICAgIGZ1bmN0aW9uIF9jb25zb2xlX2ZuKG5hbWUpIHtcbiAgICAgICAgcmV0dXJuIF9yZXN0UGFyYW0oZnVuY3Rpb24gKGZuLCBhcmdzKSB7XG4gICAgICAgICAgICBmbi5hcHBseShudWxsLCBhcmdzLmNvbmNhdChbX3Jlc3RQYXJhbShmdW5jdGlvbiAoZXJyLCBhcmdzKSB7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBjb25zb2xlID09PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoY29uc29sZS5lcnJvcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChjb25zb2xlW25hbWVdKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBfYXJyYXlFYWNoKGFyZ3MsIGZ1bmN0aW9uICh4KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZVtuYW1lXSh4KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSldKSk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBhc3luYy5sb2cgPSBfY29uc29sZV9mbignbG9nJyk7XG4gICAgYXN5bmMuZGlyID0gX2NvbnNvbGVfZm4oJ2RpcicpO1xuICAgIC8qYXN5bmMuaW5mbyA9IF9jb25zb2xlX2ZuKCdpbmZvJyk7XG4gICAgYXN5bmMud2FybiA9IF9jb25zb2xlX2ZuKCd3YXJuJyk7XG4gICAgYXN5bmMuZXJyb3IgPSBfY29uc29sZV9mbignZXJyb3InKTsqL1xuXG4gICAgYXN5bmMubWVtb2l6ZSA9IGZ1bmN0aW9uIChmbiwgaGFzaGVyKSB7XG4gICAgICAgIHZhciBtZW1vID0ge307XG4gICAgICAgIHZhciBxdWV1ZXMgPSB7fTtcbiAgICAgICAgaGFzaGVyID0gaGFzaGVyIHx8IGlkZW50aXR5O1xuICAgICAgICB2YXIgbWVtb2l6ZWQgPSBfcmVzdFBhcmFtKGZ1bmN0aW9uIG1lbW9pemVkKGFyZ3MpIHtcbiAgICAgICAgICAgIHZhciBjYWxsYmFjayA9IGFyZ3MucG9wKCk7XG4gICAgICAgICAgICB2YXIga2V5ID0gaGFzaGVyLmFwcGx5KG51bGwsIGFyZ3MpO1xuICAgICAgICAgICAgaWYgKGtleSBpbiBtZW1vKSB7XG4gICAgICAgICAgICAgICAgYXN5bmMuc2V0SW1tZWRpYXRlKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2suYXBwbHkobnVsbCwgbWVtb1trZXldKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGtleSBpbiBxdWV1ZXMpIHtcbiAgICAgICAgICAgICAgICBxdWV1ZXNba2V5XS5wdXNoKGNhbGxiYWNrKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHF1ZXVlc1trZXldID0gW2NhbGxiYWNrXTtcbiAgICAgICAgICAgICAgICBmbi5hcHBseShudWxsLCBhcmdzLmNvbmNhdChbX3Jlc3RQYXJhbShmdW5jdGlvbiAoYXJncykge1xuICAgICAgICAgICAgICAgICAgICBtZW1vW2tleV0gPSBhcmdzO1xuICAgICAgICAgICAgICAgICAgICB2YXIgcSA9IHF1ZXVlc1trZXldO1xuICAgICAgICAgICAgICAgICAgICBkZWxldGUgcXVldWVzW2tleV07XG4gICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwLCBsID0gcS5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHFbaV0uYXBwbHkobnVsbCwgYXJncyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KV0pKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIG1lbW9pemVkLm1lbW8gPSBtZW1vO1xuICAgICAgICBtZW1vaXplZC51bm1lbW9pemVkID0gZm47XG4gICAgICAgIHJldHVybiBtZW1vaXplZDtcbiAgICB9O1xuXG4gICAgYXN5bmMudW5tZW1vaXplID0gZnVuY3Rpb24gKGZuKSB7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gKGZuLnVubWVtb2l6ZWQgfHwgZm4pLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7XG4gICAgICAgIH07XG4gICAgfTtcblxuICAgIGZ1bmN0aW9uIF90aW1lcyhtYXBwZXIpIHtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChjb3VudCwgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICBtYXBwZXIoX3JhbmdlKGNvdW50KSwgaXRlcmF0b3IsIGNhbGxiYWNrKTtcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBhc3luYy50aW1lcyA9IF90aW1lcyhhc3luYy5tYXApO1xuICAgIGFzeW5jLnRpbWVzU2VyaWVzID0gX3RpbWVzKGFzeW5jLm1hcFNlcmllcyk7XG4gICAgYXN5bmMudGltZXNMaW1pdCA9IGZ1bmN0aW9uIChjb3VudCwgbGltaXQsIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICByZXR1cm4gYXN5bmMubWFwTGltaXQoX3JhbmdlKGNvdW50KSwgbGltaXQsIGl0ZXJhdG9yLCBjYWxsYmFjayk7XG4gICAgfTtcblxuICAgIGFzeW5jLnNlcSA9IGZ1bmN0aW9uICgvKiBmdW5jdGlvbnMuLi4gKi8pIHtcbiAgICAgICAgdmFyIGZucyA9IGFyZ3VtZW50cztcbiAgICAgICAgcmV0dXJuIF9yZXN0UGFyYW0oZnVuY3Rpb24gKGFyZ3MpIHtcbiAgICAgICAgICAgIHZhciB0aGF0ID0gdGhpcztcblxuICAgICAgICAgICAgdmFyIGNhbGxiYWNrID0gYXJnc1thcmdzLmxlbmd0aCAtIDFdO1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBjYWxsYmFjayA9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgYXJncy5wb3AoKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2sgPSBub29wO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBhc3luYy5yZWR1Y2UoZm5zLCBhcmdzLCBmdW5jdGlvbiAobmV3YXJncywgZm4sIGNiKSB7XG4gICAgICAgICAgICAgICAgZm4uYXBwbHkodGhhdCwgbmV3YXJncy5jb25jYXQoW19yZXN0UGFyYW0oZnVuY3Rpb24gKGVyciwgbmV4dGFyZ3MpIHtcbiAgICAgICAgICAgICAgICAgICAgY2IoZXJyLCBuZXh0YXJncyk7XG4gICAgICAgICAgICAgICAgfSldKSk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZnVuY3Rpb24gKGVyciwgcmVzdWx0cykge1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrLmFwcGx5KHRoYXQsIFtlcnJdLmNvbmNhdChyZXN1bHRzKSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfTtcblxuICAgIGFzeW5jLmNvbXBvc2UgPSBmdW5jdGlvbiAoLyogZnVuY3Rpb25zLi4uICovKSB7XG4gICAgICAgIHJldHVybiBhc3luYy5zZXEuYXBwbHkobnVsbCwgQXJyYXkucHJvdG90eXBlLnJldmVyc2UuY2FsbChhcmd1bWVudHMpKTtcbiAgICB9O1xuXG5cbiAgICBmdW5jdGlvbiBfYXBwbHlFYWNoKGVhY2hmbikge1xuICAgICAgICByZXR1cm4gX3Jlc3RQYXJhbShmdW5jdGlvbihmbnMsIGFyZ3MpIHtcbiAgICAgICAgICAgIHZhciBnbyA9IF9yZXN0UGFyYW0oZnVuY3Rpb24oYXJncykge1xuICAgICAgICAgICAgICAgIHZhciB0aGF0ID0gdGhpcztcbiAgICAgICAgICAgICAgICB2YXIgY2FsbGJhY2sgPSBhcmdzLnBvcCgpO1xuICAgICAgICAgICAgICAgIHJldHVybiBlYWNoZm4oZm5zLCBmdW5jdGlvbiAoZm4sIF8sIGNiKSB7XG4gICAgICAgICAgICAgICAgICAgIGZuLmFwcGx5KHRoYXQsIGFyZ3MuY29uY2F0KFtjYl0pKTtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIGNhbGxiYWNrKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgaWYgKGFyZ3MubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGdvLmFwcGx5KHRoaXMsIGFyZ3MpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGdvO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBhc3luYy5hcHBseUVhY2ggPSBfYXBwbHlFYWNoKGFzeW5jLmVhY2hPZik7XG4gICAgYXN5bmMuYXBwbHlFYWNoU2VyaWVzID0gX2FwcGx5RWFjaChhc3luYy5lYWNoT2ZTZXJpZXMpO1xuXG5cbiAgICBhc3luYy5mb3JldmVyID0gZnVuY3Rpb24gKGZuLCBjYWxsYmFjaykge1xuICAgICAgICB2YXIgZG9uZSA9IG9ubHlfb25jZShjYWxsYmFjayB8fCBub29wKTtcbiAgICAgICAgdmFyIHRhc2sgPSBlbnN1cmVBc3luYyhmbik7XG4gICAgICAgIGZ1bmN0aW9uIG5leHQoZXJyKSB7XG4gICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGRvbmUoZXJyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRhc2sobmV4dCk7XG4gICAgICAgIH1cbiAgICAgICAgbmV4dCgpO1xuICAgIH07XG5cbiAgICBmdW5jdGlvbiBlbnN1cmVBc3luYyhmbikge1xuICAgICAgICByZXR1cm4gX3Jlc3RQYXJhbShmdW5jdGlvbiAoYXJncykge1xuICAgICAgICAgICAgdmFyIGNhbGxiYWNrID0gYXJncy5wb3AoKTtcbiAgICAgICAgICAgIGFyZ3MucHVzaChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgdmFyIGlubmVyQXJncyA9IGFyZ3VtZW50cztcbiAgICAgICAgICAgICAgICBpZiAoc3luYykge1xuICAgICAgICAgICAgICAgICAgICBhc3luYy5zZXRJbW1lZGlhdGUoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2suYXBwbHkobnVsbCwgaW5uZXJBcmdzKTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2suYXBwbHkobnVsbCwgaW5uZXJBcmdzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHZhciBzeW5jID0gdHJ1ZTtcbiAgICAgICAgICAgIGZuLmFwcGx5KHRoaXMsIGFyZ3MpO1xuICAgICAgICAgICAgc3luYyA9IGZhbHNlO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBhc3luYy5lbnN1cmVBc3luYyA9IGVuc3VyZUFzeW5jO1xuXG4gICAgYXN5bmMuY29uc3RhbnQgPSBfcmVzdFBhcmFtKGZ1bmN0aW9uKHZhbHVlcykge1xuICAgICAgICB2YXIgYXJncyA9IFtudWxsXS5jb25jYXQodmFsdWVzKTtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChjYWxsYmFjaykge1xuICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrLmFwcGx5KHRoaXMsIGFyZ3MpO1xuICAgICAgICB9O1xuICAgIH0pO1xuXG4gICAgYXN5bmMud3JhcFN5bmMgPVxuICAgIGFzeW5jLmFzeW5jaWZ5ID0gZnVuY3Rpb24gYXN5bmNpZnkoZnVuYykge1xuICAgICAgICByZXR1cm4gX3Jlc3RQYXJhbShmdW5jdGlvbiAoYXJncykge1xuICAgICAgICAgICAgdmFyIGNhbGxiYWNrID0gYXJncy5wb3AoKTtcbiAgICAgICAgICAgIHZhciByZXN1bHQ7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIHJlc3VsdCA9IGZ1bmMuYXBwbHkodGhpcywgYXJncyk7XG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gaWYgcmVzdWx0IGlzIFByb21pc2Ugb2JqZWN0XG4gICAgICAgICAgICBpZiAoX2lzT2JqZWN0KHJlc3VsdCkgJiYgdHlwZW9mIHJlc3VsdC50aGVuID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgICAgICAgICByZXN1bHQudGhlbihmdW5jdGlvbih2YWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhudWxsLCB2YWx1ZSk7XG4gICAgICAgICAgICAgICAgfSlbXCJjYXRjaFwiXShmdW5jdGlvbihlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soZXJyLm1lc3NhZ2UgPyBlcnIgOiBuZXcgRXJyb3IoZXJyKSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrKG51bGwsIHJlc3VsdCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH07XG5cbiAgICAvLyBOb2RlLmpzXG4gICAgaWYgKHR5cGVvZiBtb2R1bGUgPT09ICdvYmplY3QnICYmIG1vZHVsZS5leHBvcnRzKSB7XG4gICAgICAgIG1vZHVsZS5leHBvcnRzID0gYXN5bmM7XG4gICAgfVxuICAgIC8vIEFNRCAvIFJlcXVpcmVKU1xuICAgIGVsc2UgaWYgKHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCkge1xuICAgICAgICBkZWZpbmUoW10sIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiBhc3luYztcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8vIGluY2x1ZGVkIGRpcmVjdGx5IHZpYSA8c2NyaXB0PiB0YWdcbiAgICBlbHNlIHtcbiAgICAgICAgcm9vdC5hc3luYyA9IGFzeW5jO1xuICAgIH1cblxufSgpKTtcbiIsIi8vIENvcHlyaWdodCBKb3llbnQsIEluYy4gYW5kIG90aGVyIE5vZGUgY29udHJpYnV0b3JzLlxuLy9cbi8vIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhXG4vLyBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlXG4vLyBcIlNvZnR3YXJlXCIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmdcbi8vIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCxcbi8vIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXRcbi8vIHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZVxuLy8gZm9sbG93aW5nIGNvbmRpdGlvbnM6XG4vL1xuLy8gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWRcbi8vIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuLy9cbi8vIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1Ncbi8vIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0Zcbi8vIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU5cbi8vIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLFxuLy8gREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SXG4vLyBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFXG4vLyBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLlxuXG4vLyByZXNvbHZlcyAuIGFuZCAuLiBlbGVtZW50cyBpbiBhIHBhdGggYXJyYXkgd2l0aCBkaXJlY3RvcnkgbmFtZXMgdGhlcmVcbi8vIG11c3QgYmUgbm8gc2xhc2hlcywgZW1wdHkgZWxlbWVudHMsIG9yIGRldmljZSBuYW1lcyAoYzpcXCkgaW4gdGhlIGFycmF5XG4vLyAoc28gYWxzbyBubyBsZWFkaW5nIGFuZCB0cmFpbGluZyBzbGFzaGVzIC0gaXQgZG9lcyBub3QgZGlzdGluZ3Vpc2hcbi8vIHJlbGF0aXZlIGFuZCBhYnNvbHV0ZSBwYXRocylcbmZ1bmN0aW9uIG5vcm1hbGl6ZUFycmF5KHBhcnRzLCBhbGxvd0Fib3ZlUm9vdCkge1xuICAvLyBpZiB0aGUgcGF0aCB0cmllcyB0byBnbyBhYm92ZSB0aGUgcm9vdCwgYHVwYCBlbmRzIHVwID4gMFxuICB2YXIgdXAgPSAwO1xuICBmb3IgKHZhciBpID0gcGFydHMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICB2YXIgbGFzdCA9IHBhcnRzW2ldO1xuICAgIGlmIChsYXN0ID09PSAnLicpIHtcbiAgICAgIHBhcnRzLnNwbGljZShpLCAxKTtcbiAgICB9IGVsc2UgaWYgKGxhc3QgPT09ICcuLicpIHtcbiAgICAgIHBhcnRzLnNwbGljZShpLCAxKTtcbiAgICAgIHVwKys7XG4gICAgfSBlbHNlIGlmICh1cCkge1xuICAgICAgcGFydHMuc3BsaWNlKGksIDEpO1xuICAgICAgdXAtLTtcbiAgICB9XG4gIH1cblxuICAvLyBpZiB0aGUgcGF0aCBpcyBhbGxvd2VkIHRvIGdvIGFib3ZlIHRoZSByb290LCByZXN0b3JlIGxlYWRpbmcgLi5zXG4gIGlmIChhbGxvd0Fib3ZlUm9vdCkge1xuICAgIGZvciAoOyB1cC0tOyB1cCkge1xuICAgICAgcGFydHMudW5zaGlmdCgnLi4nKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gcGFydHM7XG59XG5cbi8vIFNwbGl0IGEgZmlsZW5hbWUgaW50byBbcm9vdCwgZGlyLCBiYXNlbmFtZSwgZXh0XSwgdW5peCB2ZXJzaW9uXG4vLyAncm9vdCcgaXMganVzdCBhIHNsYXNoLCBvciBub3RoaW5nLlxudmFyIHNwbGl0UGF0aFJlID1cbiAgICAvXihcXC8/fCkoW1xcc1xcU10qPykoKD86XFwuezEsMn18W15cXC9dKz98KShcXC5bXi5cXC9dKnwpKSg/OltcXC9dKikkLztcbnZhciBzcGxpdFBhdGggPSBmdW5jdGlvbihmaWxlbmFtZSkge1xuICByZXR1cm4gc3BsaXRQYXRoUmUuZXhlYyhmaWxlbmFtZSkuc2xpY2UoMSk7XG59O1xuXG4vLyBwYXRoLnJlc29sdmUoW2Zyb20gLi4uXSwgdG8pXG4vLyBwb3NpeCB2ZXJzaW9uXG5leHBvcnRzLnJlc29sdmUgPSBmdW5jdGlvbigpIHtcbiAgdmFyIHJlc29sdmVkUGF0aCA9ICcnLFxuICAgICAgcmVzb2x2ZWRBYnNvbHV0ZSA9IGZhbHNlO1xuXG4gIGZvciAodmFyIGkgPSBhcmd1bWVudHMubGVuZ3RoIC0gMTsgaSA+PSAtMSAmJiAhcmVzb2x2ZWRBYnNvbHV0ZTsgaS0tKSB7XG4gICAgdmFyIHBhdGggPSAoaSA+PSAwKSA/IGFyZ3VtZW50c1tpXSA6IHByb2Nlc3MuY3dkKCk7XG5cbiAgICAvLyBTa2lwIGVtcHR5IGFuZCBpbnZhbGlkIGVudHJpZXNcbiAgICBpZiAodHlwZW9mIHBhdGggIT09ICdzdHJpbmcnKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdBcmd1bWVudHMgdG8gcGF0aC5yZXNvbHZlIG11c3QgYmUgc3RyaW5ncycpO1xuICAgIH0gZWxzZSBpZiAoIXBhdGgpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIHJlc29sdmVkUGF0aCA9IHBhdGggKyAnLycgKyByZXNvbHZlZFBhdGg7XG4gICAgcmVzb2x2ZWRBYnNvbHV0ZSA9IHBhdGguY2hhckF0KDApID09PSAnLyc7XG4gIH1cblxuICAvLyBBdCB0aGlzIHBvaW50IHRoZSBwYXRoIHNob3VsZCBiZSByZXNvbHZlZCB0byBhIGZ1bGwgYWJzb2x1dGUgcGF0aCwgYnV0XG4gIC8vIGhhbmRsZSByZWxhdGl2ZSBwYXRocyB0byBiZSBzYWZlIChtaWdodCBoYXBwZW4gd2hlbiBwcm9jZXNzLmN3ZCgpIGZhaWxzKVxuXG4gIC8vIE5vcm1hbGl6ZSB0aGUgcGF0aFxuICByZXNvbHZlZFBhdGggPSBub3JtYWxpemVBcnJheShmaWx0ZXIocmVzb2x2ZWRQYXRoLnNwbGl0KCcvJyksIGZ1bmN0aW9uKHApIHtcbiAgICByZXR1cm4gISFwO1xuICB9KSwgIXJlc29sdmVkQWJzb2x1dGUpLmpvaW4oJy8nKTtcblxuICByZXR1cm4gKChyZXNvbHZlZEFic29sdXRlID8gJy8nIDogJycpICsgcmVzb2x2ZWRQYXRoKSB8fCAnLic7XG59O1xuXG4vLyBwYXRoLm5vcm1hbGl6ZShwYXRoKVxuLy8gcG9zaXggdmVyc2lvblxuZXhwb3J0cy5ub3JtYWxpemUgPSBmdW5jdGlvbihwYXRoKSB7XG4gIHZhciBpc0Fic29sdXRlID0gZXhwb3J0cy5pc0Fic29sdXRlKHBhdGgpLFxuICAgICAgdHJhaWxpbmdTbGFzaCA9IHN1YnN0cihwYXRoLCAtMSkgPT09ICcvJztcblxuICAvLyBOb3JtYWxpemUgdGhlIHBhdGhcbiAgcGF0aCA9IG5vcm1hbGl6ZUFycmF5KGZpbHRlcihwYXRoLnNwbGl0KCcvJyksIGZ1bmN0aW9uKHApIHtcbiAgICByZXR1cm4gISFwO1xuICB9KSwgIWlzQWJzb2x1dGUpLmpvaW4oJy8nKTtcblxuICBpZiAoIXBhdGggJiYgIWlzQWJzb2x1dGUpIHtcbiAgICBwYXRoID0gJy4nO1xuICB9XG4gIGlmIChwYXRoICYmIHRyYWlsaW5nU2xhc2gpIHtcbiAgICBwYXRoICs9ICcvJztcbiAgfVxuXG4gIHJldHVybiAoaXNBYnNvbHV0ZSA/ICcvJyA6ICcnKSArIHBhdGg7XG59O1xuXG4vLyBwb3NpeCB2ZXJzaW9uXG5leHBvcnRzLmlzQWJzb2x1dGUgPSBmdW5jdGlvbihwYXRoKSB7XG4gIHJldHVybiBwYXRoLmNoYXJBdCgwKSA9PT0gJy8nO1xufTtcblxuLy8gcG9zaXggdmVyc2lvblxuZXhwb3J0cy5qb2luID0gZnVuY3Rpb24oKSB7XG4gIHZhciBwYXRocyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMCk7XG4gIHJldHVybiBleHBvcnRzLm5vcm1hbGl6ZShmaWx0ZXIocGF0aHMsIGZ1bmN0aW9uKHAsIGluZGV4KSB7XG4gICAgaWYgKHR5cGVvZiBwICE9PSAnc3RyaW5nJykge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignQXJndW1lbnRzIHRvIHBhdGguam9pbiBtdXN0IGJlIHN0cmluZ3MnKTtcbiAgICB9XG4gICAgcmV0dXJuIHA7XG4gIH0pLmpvaW4oJy8nKSk7XG59O1xuXG5cbi8vIHBhdGgucmVsYXRpdmUoZnJvbSwgdG8pXG4vLyBwb3NpeCB2ZXJzaW9uXG5leHBvcnRzLnJlbGF0aXZlID0gZnVuY3Rpb24oZnJvbSwgdG8pIHtcbiAgZnJvbSA9IGV4cG9ydHMucmVzb2x2ZShmcm9tKS5zdWJzdHIoMSk7XG4gIHRvID0gZXhwb3J0cy5yZXNvbHZlKHRvKS5zdWJzdHIoMSk7XG5cbiAgZnVuY3Rpb24gdHJpbShhcnIpIHtcbiAgICB2YXIgc3RhcnQgPSAwO1xuICAgIGZvciAoOyBzdGFydCA8IGFyci5sZW5ndGg7IHN0YXJ0KyspIHtcbiAgICAgIGlmIChhcnJbc3RhcnRdICE9PSAnJykgYnJlYWs7XG4gICAgfVxuXG4gICAgdmFyIGVuZCA9IGFyci5sZW5ndGggLSAxO1xuICAgIGZvciAoOyBlbmQgPj0gMDsgZW5kLS0pIHtcbiAgICAgIGlmIChhcnJbZW5kXSAhPT0gJycpIGJyZWFrO1xuICAgIH1cblxuICAgIGlmIChzdGFydCA+IGVuZCkgcmV0dXJuIFtdO1xuICAgIHJldHVybiBhcnIuc2xpY2Uoc3RhcnQsIGVuZCAtIHN0YXJ0ICsgMSk7XG4gIH1cblxuICB2YXIgZnJvbVBhcnRzID0gdHJpbShmcm9tLnNwbGl0KCcvJykpO1xuICB2YXIgdG9QYXJ0cyA9IHRyaW0odG8uc3BsaXQoJy8nKSk7XG5cbiAgdmFyIGxlbmd0aCA9IE1hdGgubWluKGZyb21QYXJ0cy5sZW5ndGgsIHRvUGFydHMubGVuZ3RoKTtcbiAgdmFyIHNhbWVQYXJ0c0xlbmd0aCA9IGxlbmd0aDtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgIGlmIChmcm9tUGFydHNbaV0gIT09IHRvUGFydHNbaV0pIHtcbiAgICAgIHNhbWVQYXJ0c0xlbmd0aCA9IGk7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICB2YXIgb3V0cHV0UGFydHMgPSBbXTtcbiAgZm9yICh2YXIgaSA9IHNhbWVQYXJ0c0xlbmd0aDsgaSA8IGZyb21QYXJ0cy5sZW5ndGg7IGkrKykge1xuICAgIG91dHB1dFBhcnRzLnB1c2goJy4uJyk7XG4gIH1cblxuICBvdXRwdXRQYXJ0cyA9IG91dHB1dFBhcnRzLmNvbmNhdCh0b1BhcnRzLnNsaWNlKHNhbWVQYXJ0c0xlbmd0aCkpO1xuXG4gIHJldHVybiBvdXRwdXRQYXJ0cy5qb2luKCcvJyk7XG59O1xuXG5leHBvcnRzLnNlcCA9ICcvJztcbmV4cG9ydHMuZGVsaW1pdGVyID0gJzonO1xuXG5leHBvcnRzLmRpcm5hbWUgPSBmdW5jdGlvbihwYXRoKSB7XG4gIHZhciByZXN1bHQgPSBzcGxpdFBhdGgocGF0aCksXG4gICAgICByb290ID0gcmVzdWx0WzBdLFxuICAgICAgZGlyID0gcmVzdWx0WzFdO1xuXG4gIGlmICghcm9vdCAmJiAhZGlyKSB7XG4gICAgLy8gTm8gZGlybmFtZSB3aGF0c29ldmVyXG4gICAgcmV0dXJuICcuJztcbiAgfVxuXG4gIGlmIChkaXIpIHtcbiAgICAvLyBJdCBoYXMgYSBkaXJuYW1lLCBzdHJpcCB0cmFpbGluZyBzbGFzaFxuICAgIGRpciA9IGRpci5zdWJzdHIoMCwgZGlyLmxlbmd0aCAtIDEpO1xuICB9XG5cbiAgcmV0dXJuIHJvb3QgKyBkaXI7XG59O1xuXG5cbmV4cG9ydHMuYmFzZW5hbWUgPSBmdW5jdGlvbihwYXRoLCBleHQpIHtcbiAgdmFyIGYgPSBzcGxpdFBhdGgocGF0aClbMl07XG4gIC8vIFRPRE86IG1ha2UgdGhpcyBjb21wYXJpc29uIGNhc2UtaW5zZW5zaXRpdmUgb24gd2luZG93cz9cbiAgaWYgKGV4dCAmJiBmLnN1YnN0cigtMSAqIGV4dC5sZW5ndGgpID09PSBleHQpIHtcbiAgICBmID0gZi5zdWJzdHIoMCwgZi5sZW5ndGggLSBleHQubGVuZ3RoKTtcbiAgfVxuICByZXR1cm4gZjtcbn07XG5cblxuZXhwb3J0cy5leHRuYW1lID0gZnVuY3Rpb24ocGF0aCkge1xuICByZXR1cm4gc3BsaXRQYXRoKHBhdGgpWzNdO1xufTtcblxuZnVuY3Rpb24gZmlsdGVyICh4cywgZikge1xuICAgIGlmICh4cy5maWx0ZXIpIHJldHVybiB4cy5maWx0ZXIoZik7XG4gICAgdmFyIHJlcyA9IFtdO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgeHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgaWYgKGYoeHNbaV0sIGksIHhzKSkgcmVzLnB1c2goeHNbaV0pO1xuICAgIH1cbiAgICByZXR1cm4gcmVzO1xufVxuXG4vLyBTdHJpbmcucHJvdG90eXBlLnN1YnN0ciAtIG5lZ2F0aXZlIGluZGV4IGRvbid0IHdvcmsgaW4gSUU4XG52YXIgc3Vic3RyID0gJ2FiJy5zdWJzdHIoLTEpID09PSAnYidcbiAgICA/IGZ1bmN0aW9uIChzdHIsIHN0YXJ0LCBsZW4pIHsgcmV0dXJuIHN0ci5zdWJzdHIoc3RhcnQsIGxlbikgfVxuICAgIDogZnVuY3Rpb24gKHN0ciwgc3RhcnQsIGxlbikge1xuICAgICAgICBpZiAoc3RhcnQgPCAwKSBzdGFydCA9IHN0ci5sZW5ndGggKyBzdGFydDtcbiAgICAgICAgcmV0dXJuIHN0ci5zdWJzdHIoc3RhcnQsIGxlbik7XG4gICAgfVxuO1xuIiwiLy8gc2hpbSBmb3IgdXNpbmcgcHJvY2VzcyBpbiBicm93c2VyXG5cbnZhciBwcm9jZXNzID0gbW9kdWxlLmV4cG9ydHMgPSB7fTtcbnZhciBxdWV1ZSA9IFtdO1xudmFyIGRyYWluaW5nID0gZmFsc2U7XG52YXIgY3VycmVudFF1ZXVlO1xudmFyIHF1ZXVlSW5kZXggPSAtMTtcblxuZnVuY3Rpb24gY2xlYW5VcE5leHRUaWNrKCkge1xuICAgIGRyYWluaW5nID0gZmFsc2U7XG4gICAgaWYgKGN1cnJlbnRRdWV1ZS5sZW5ndGgpIHtcbiAgICAgICAgcXVldWUgPSBjdXJyZW50UXVldWUuY29uY2F0KHF1ZXVlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICBxdWV1ZUluZGV4ID0gLTE7XG4gICAgfVxuICAgIGlmIChxdWV1ZS5sZW5ndGgpIHtcbiAgICAgICAgZHJhaW5RdWV1ZSgpO1xuICAgIH1cbn1cblxuZnVuY3Rpb24gZHJhaW5RdWV1ZSgpIHtcbiAgICBpZiAoZHJhaW5pbmcpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB2YXIgdGltZW91dCA9IHNldFRpbWVvdXQoY2xlYW5VcE5leHRUaWNrKTtcbiAgICBkcmFpbmluZyA9IHRydWU7XG5cbiAgICB2YXIgbGVuID0gcXVldWUubGVuZ3RoO1xuICAgIHdoaWxlKGxlbikge1xuICAgICAgICBjdXJyZW50UXVldWUgPSBxdWV1ZTtcbiAgICAgICAgcXVldWUgPSBbXTtcbiAgICAgICAgd2hpbGUgKCsrcXVldWVJbmRleCA8IGxlbikge1xuICAgICAgICAgICAgaWYgKGN1cnJlbnRRdWV1ZSkge1xuICAgICAgICAgICAgICAgIGN1cnJlbnRRdWV1ZVtxdWV1ZUluZGV4XS5ydW4oKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBxdWV1ZUluZGV4ID0gLTE7XG4gICAgICAgIGxlbiA9IHF1ZXVlLmxlbmd0aDtcbiAgICB9XG4gICAgY3VycmVudFF1ZXVlID0gbnVsbDtcbiAgICBkcmFpbmluZyA9IGZhbHNlO1xuICAgIGNsZWFyVGltZW91dCh0aW1lb3V0KTtcbn1cblxucHJvY2Vzcy5uZXh0VGljayA9IGZ1bmN0aW9uIChmdW4pIHtcbiAgICB2YXIgYXJncyA9IG5ldyBBcnJheShhcmd1bWVudHMubGVuZ3RoIC0gMSk7XG4gICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPiAxKSB7XG4gICAgICAgIGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBhcmdzW2kgLSAxXSA9IGFyZ3VtZW50c1tpXTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBxdWV1ZS5wdXNoKG5ldyBJdGVtKGZ1biwgYXJncykpO1xuICAgIGlmIChxdWV1ZS5sZW5ndGggPT09IDEgJiYgIWRyYWluaW5nKSB7XG4gICAgICAgIHNldFRpbWVvdXQoZHJhaW5RdWV1ZSwgMCk7XG4gICAgfVxufTtcblxuLy8gdjggbGlrZXMgcHJlZGljdGlibGUgb2JqZWN0c1xuZnVuY3Rpb24gSXRlbShmdW4sIGFycmF5KSB7XG4gICAgdGhpcy5mdW4gPSBmdW47XG4gICAgdGhpcy5hcnJheSA9IGFycmF5O1xufVxuSXRlbS5wcm90b3R5cGUucnVuID0gZnVuY3Rpb24gKCkge1xuICAgIHRoaXMuZnVuLmFwcGx5KG51bGwsIHRoaXMuYXJyYXkpO1xufTtcbnByb2Nlc3MudGl0bGUgPSAnYnJvd3Nlcic7XG5wcm9jZXNzLmJyb3dzZXIgPSB0cnVlO1xucHJvY2Vzcy5lbnYgPSB7fTtcbnByb2Nlc3MuYXJndiA9IFtdO1xucHJvY2Vzcy52ZXJzaW9uID0gJyc7IC8vIGVtcHR5IHN0cmluZyB0byBhdm9pZCByZWdleHAgaXNzdWVzXG5wcm9jZXNzLnZlcnNpb25zID0ge307XG5cbmZ1bmN0aW9uIG5vb3AoKSB7fVxuXG5wcm9jZXNzLm9uID0gbm9vcDtcbnByb2Nlc3MuYWRkTGlzdGVuZXIgPSBub29wO1xucHJvY2Vzcy5vbmNlID0gbm9vcDtcbnByb2Nlc3Mub2ZmID0gbm9vcDtcbnByb2Nlc3MucmVtb3ZlTGlzdGVuZXIgPSBub29wO1xucHJvY2Vzcy5yZW1vdmVBbGxMaXN0ZW5lcnMgPSBub29wO1xucHJvY2Vzcy5lbWl0ID0gbm9vcDtcblxucHJvY2Vzcy5iaW5kaW5nID0gZnVuY3Rpb24gKG5hbWUpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3Byb2Nlc3MuYmluZGluZyBpcyBub3Qgc3VwcG9ydGVkJyk7XG59O1xuXG5wcm9jZXNzLmN3ZCA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuICcvJyB9O1xucHJvY2Vzcy5jaGRpciA9IGZ1bmN0aW9uIChkaXIpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3Byb2Nlc3MuY2hkaXIgaXMgbm90IHN1cHBvcnRlZCcpO1xufTtcbnByb2Nlc3MudW1hc2sgPSBmdW5jdGlvbigpIHsgcmV0dXJuIDA7IH07XG4iLCIvKiEgaHR0cHM6Ly9tdGhzLmJlL3B1bnljb2RlIHYxLjQuMCBieSBAbWF0aGlhcyAqL1xuOyhmdW5jdGlvbihyb290KSB7XG5cblx0LyoqIERldGVjdCBmcmVlIHZhcmlhYmxlcyAqL1xuXHR2YXIgZnJlZUV4cG9ydHMgPSB0eXBlb2YgZXhwb3J0cyA9PSAnb2JqZWN0JyAmJiBleHBvcnRzICYmXG5cdFx0IWV4cG9ydHMubm9kZVR5cGUgJiYgZXhwb3J0cztcblx0dmFyIGZyZWVNb2R1bGUgPSB0eXBlb2YgbW9kdWxlID09ICdvYmplY3QnICYmIG1vZHVsZSAmJlxuXHRcdCFtb2R1bGUubm9kZVR5cGUgJiYgbW9kdWxlO1xuXHR2YXIgZnJlZUdsb2JhbCA9IHR5cGVvZiBnbG9iYWwgPT0gJ29iamVjdCcgJiYgZ2xvYmFsO1xuXHRpZiAoXG5cdFx0ZnJlZUdsb2JhbC5nbG9iYWwgPT09IGZyZWVHbG9iYWwgfHxcblx0XHRmcmVlR2xvYmFsLndpbmRvdyA9PT0gZnJlZUdsb2JhbCB8fFxuXHRcdGZyZWVHbG9iYWwuc2VsZiA9PT0gZnJlZUdsb2JhbFxuXHQpIHtcblx0XHRyb290ID0gZnJlZUdsb2JhbDtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGUgYHB1bnljb2RlYCBvYmplY3QuXG5cdCAqIEBuYW1lIHB1bnljb2RlXG5cdCAqIEB0eXBlIE9iamVjdFxuXHQgKi9cblx0dmFyIHB1bnljb2RlLFxuXG5cdC8qKiBIaWdoZXN0IHBvc2l0aXZlIHNpZ25lZCAzMi1iaXQgZmxvYXQgdmFsdWUgKi9cblx0bWF4SW50ID0gMjE0NzQ4MzY0NywgLy8gYWthLiAweDdGRkZGRkZGIG9yIDJeMzEtMVxuXG5cdC8qKiBCb290c3RyaW5nIHBhcmFtZXRlcnMgKi9cblx0YmFzZSA9IDM2LFxuXHR0TWluID0gMSxcblx0dE1heCA9IDI2LFxuXHRza2V3ID0gMzgsXG5cdGRhbXAgPSA3MDAsXG5cdGluaXRpYWxCaWFzID0gNzIsXG5cdGluaXRpYWxOID0gMTI4LCAvLyAweDgwXG5cdGRlbGltaXRlciA9ICctJywgLy8gJ1xceDJEJ1xuXG5cdC8qKiBSZWd1bGFyIGV4cHJlc3Npb25zICovXG5cdHJlZ2V4UHVueWNvZGUgPSAvXnhuLS0vLFxuXHRyZWdleE5vbkFTQ0lJID0gL1teXFx4MjAtXFx4N0VdLywgLy8gdW5wcmludGFibGUgQVNDSUkgY2hhcnMgKyBub24tQVNDSUkgY2hhcnNcblx0cmVnZXhTZXBhcmF0b3JzID0gL1tcXHgyRVxcdTMwMDJcXHVGRjBFXFx1RkY2MV0vZywgLy8gUkZDIDM0OTAgc2VwYXJhdG9yc1xuXG5cdC8qKiBFcnJvciBtZXNzYWdlcyAqL1xuXHRlcnJvcnMgPSB7XG5cdFx0J292ZXJmbG93JzogJ092ZXJmbG93OiBpbnB1dCBuZWVkcyB3aWRlciBpbnRlZ2VycyB0byBwcm9jZXNzJyxcblx0XHQnbm90LWJhc2ljJzogJ0lsbGVnYWwgaW5wdXQgPj0gMHg4MCAobm90IGEgYmFzaWMgY29kZSBwb2ludCknLFxuXHRcdCdpbnZhbGlkLWlucHV0JzogJ0ludmFsaWQgaW5wdXQnXG5cdH0sXG5cblx0LyoqIENvbnZlbmllbmNlIHNob3J0Y3V0cyAqL1xuXHRiYXNlTWludXNUTWluID0gYmFzZSAtIHRNaW4sXG5cdGZsb29yID0gTWF0aC5mbG9vcixcblx0c3RyaW5nRnJvbUNoYXJDb2RlID0gU3RyaW5nLmZyb21DaGFyQ29kZSxcblxuXHQvKiogVGVtcG9yYXJ5IHZhcmlhYmxlICovXG5cdGtleTtcblxuXHQvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cblxuXHQvKipcblx0ICogQSBnZW5lcmljIGVycm9yIHV0aWxpdHkgZnVuY3Rpb24uXG5cdCAqIEBwcml2YXRlXG5cdCAqIEBwYXJhbSB7U3RyaW5nfSB0eXBlIFRoZSBlcnJvciB0eXBlLlxuXHQgKiBAcmV0dXJucyB7RXJyb3J9IFRocm93cyBhIGBSYW5nZUVycm9yYCB3aXRoIHRoZSBhcHBsaWNhYmxlIGVycm9yIG1lc3NhZ2UuXG5cdCAqL1xuXHRmdW5jdGlvbiBlcnJvcih0eXBlKSB7XG5cdFx0dGhyb3cgbmV3IFJhbmdlRXJyb3IoZXJyb3JzW3R5cGVdKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBBIGdlbmVyaWMgYEFycmF5I21hcGAgdXRpbGl0eSBmdW5jdGlvbi5cblx0ICogQHByaXZhdGVcblx0ICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIGl0ZXJhdGUgb3Zlci5cblx0ICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2sgVGhlIGZ1bmN0aW9uIHRoYXQgZ2V0cyBjYWxsZWQgZm9yIGV2ZXJ5IGFycmF5XG5cdCAqIGl0ZW0uXG5cdCAqIEByZXR1cm5zIHtBcnJheX0gQSBuZXcgYXJyYXkgb2YgdmFsdWVzIHJldHVybmVkIGJ5IHRoZSBjYWxsYmFjayBmdW5jdGlvbi5cblx0ICovXG5cdGZ1bmN0aW9uIG1hcChhcnJheSwgZm4pIHtcblx0XHR2YXIgbGVuZ3RoID0gYXJyYXkubGVuZ3RoO1xuXHRcdHZhciByZXN1bHQgPSBbXTtcblx0XHR3aGlsZSAobGVuZ3RoLS0pIHtcblx0XHRcdHJlc3VsdFtsZW5ndGhdID0gZm4oYXJyYXlbbGVuZ3RoXSk7XG5cdFx0fVxuXHRcdHJldHVybiByZXN1bHQ7XG5cdH1cblxuXHQvKipcblx0ICogQSBzaW1wbGUgYEFycmF5I21hcGAtbGlrZSB3cmFwcGVyIHRvIHdvcmsgd2l0aCBkb21haW4gbmFtZSBzdHJpbmdzIG9yIGVtYWlsXG5cdCAqIGFkZHJlc3Nlcy5cblx0ICogQHByaXZhdGVcblx0ICogQHBhcmFtIHtTdHJpbmd9IGRvbWFpbiBUaGUgZG9tYWluIG5hbWUgb3IgZW1haWwgYWRkcmVzcy5cblx0ICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2sgVGhlIGZ1bmN0aW9uIHRoYXQgZ2V0cyBjYWxsZWQgZm9yIGV2ZXJ5XG5cdCAqIGNoYXJhY3Rlci5cblx0ICogQHJldHVybnMge0FycmF5fSBBIG5ldyBzdHJpbmcgb2YgY2hhcmFjdGVycyByZXR1cm5lZCBieSB0aGUgY2FsbGJhY2tcblx0ICogZnVuY3Rpb24uXG5cdCAqL1xuXHRmdW5jdGlvbiBtYXBEb21haW4oc3RyaW5nLCBmbikge1xuXHRcdHZhciBwYXJ0cyA9IHN0cmluZy5zcGxpdCgnQCcpO1xuXHRcdHZhciByZXN1bHQgPSAnJztcblx0XHRpZiAocGFydHMubGVuZ3RoID4gMSkge1xuXHRcdFx0Ly8gSW4gZW1haWwgYWRkcmVzc2VzLCBvbmx5IHRoZSBkb21haW4gbmFtZSBzaG91bGQgYmUgcHVueWNvZGVkLiBMZWF2ZVxuXHRcdFx0Ly8gdGhlIGxvY2FsIHBhcnQgKGkuZS4gZXZlcnl0aGluZyB1cCB0byBgQGApIGludGFjdC5cblx0XHRcdHJlc3VsdCA9IHBhcnRzWzBdICsgJ0AnO1xuXHRcdFx0c3RyaW5nID0gcGFydHNbMV07XG5cdFx0fVxuXHRcdC8vIEF2b2lkIGBzcGxpdChyZWdleClgIGZvciBJRTggY29tcGF0aWJpbGl0eS4gU2VlICMxNy5cblx0XHRzdHJpbmcgPSBzdHJpbmcucmVwbGFjZShyZWdleFNlcGFyYXRvcnMsICdcXHgyRScpO1xuXHRcdHZhciBsYWJlbHMgPSBzdHJpbmcuc3BsaXQoJy4nKTtcblx0XHR2YXIgZW5jb2RlZCA9IG1hcChsYWJlbHMsIGZuKS5qb2luKCcuJyk7XG5cdFx0cmV0dXJuIHJlc3VsdCArIGVuY29kZWQ7XG5cdH1cblxuXHQvKipcblx0ICogQ3JlYXRlcyBhbiBhcnJheSBjb250YWluaW5nIHRoZSBudW1lcmljIGNvZGUgcG9pbnRzIG9mIGVhY2ggVW5pY29kZVxuXHQgKiBjaGFyYWN0ZXIgaW4gdGhlIHN0cmluZy4gV2hpbGUgSmF2YVNjcmlwdCB1c2VzIFVDUy0yIGludGVybmFsbHksXG5cdCAqIHRoaXMgZnVuY3Rpb24gd2lsbCBjb252ZXJ0IGEgcGFpciBvZiBzdXJyb2dhdGUgaGFsdmVzIChlYWNoIG9mIHdoaWNoXG5cdCAqIFVDUy0yIGV4cG9zZXMgYXMgc2VwYXJhdGUgY2hhcmFjdGVycykgaW50byBhIHNpbmdsZSBjb2RlIHBvaW50LFxuXHQgKiBtYXRjaGluZyBVVEYtMTYuXG5cdCAqIEBzZWUgYHB1bnljb2RlLnVjczIuZW5jb2RlYFxuXHQgKiBAc2VlIDxodHRwczovL21hdGhpYXNieW5lbnMuYmUvbm90ZXMvamF2YXNjcmlwdC1lbmNvZGluZz5cblx0ICogQG1lbWJlck9mIHB1bnljb2RlLnVjczJcblx0ICogQG5hbWUgZGVjb2RlXG5cdCAqIEBwYXJhbSB7U3RyaW5nfSBzdHJpbmcgVGhlIFVuaWNvZGUgaW5wdXQgc3RyaW5nIChVQ1MtMikuXG5cdCAqIEByZXR1cm5zIHtBcnJheX0gVGhlIG5ldyBhcnJheSBvZiBjb2RlIHBvaW50cy5cblx0ICovXG5cdGZ1bmN0aW9uIHVjczJkZWNvZGUoc3RyaW5nKSB7XG5cdFx0dmFyIG91dHB1dCA9IFtdLFxuXHRcdCAgICBjb3VudGVyID0gMCxcblx0XHQgICAgbGVuZ3RoID0gc3RyaW5nLmxlbmd0aCxcblx0XHQgICAgdmFsdWUsXG5cdFx0ICAgIGV4dHJhO1xuXHRcdHdoaWxlIChjb3VudGVyIDwgbGVuZ3RoKSB7XG5cdFx0XHR2YWx1ZSA9IHN0cmluZy5jaGFyQ29kZUF0KGNvdW50ZXIrKyk7XG5cdFx0XHRpZiAodmFsdWUgPj0gMHhEODAwICYmIHZhbHVlIDw9IDB4REJGRiAmJiBjb3VudGVyIDwgbGVuZ3RoKSB7XG5cdFx0XHRcdC8vIGhpZ2ggc3Vycm9nYXRlLCBhbmQgdGhlcmUgaXMgYSBuZXh0IGNoYXJhY3RlclxuXHRcdFx0XHRleHRyYSA9IHN0cmluZy5jaGFyQ29kZUF0KGNvdW50ZXIrKyk7XG5cdFx0XHRcdGlmICgoZXh0cmEgJiAweEZDMDApID09IDB4REMwMCkgeyAvLyBsb3cgc3Vycm9nYXRlXG5cdFx0XHRcdFx0b3V0cHV0LnB1c2goKCh2YWx1ZSAmIDB4M0ZGKSA8PCAxMCkgKyAoZXh0cmEgJiAweDNGRikgKyAweDEwMDAwKTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHQvLyB1bm1hdGNoZWQgc3Vycm9nYXRlOyBvbmx5IGFwcGVuZCB0aGlzIGNvZGUgdW5pdCwgaW4gY2FzZSB0aGUgbmV4dFxuXHRcdFx0XHRcdC8vIGNvZGUgdW5pdCBpcyB0aGUgaGlnaCBzdXJyb2dhdGUgb2YgYSBzdXJyb2dhdGUgcGFpclxuXHRcdFx0XHRcdG91dHB1dC5wdXNoKHZhbHVlKTtcblx0XHRcdFx0XHRjb3VudGVyLS07XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdG91dHB1dC5wdXNoKHZhbHVlKTtcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIG91dHB1dDtcblx0fVxuXG5cdC8qKlxuXHQgKiBDcmVhdGVzIGEgc3RyaW5nIGJhc2VkIG9uIGFuIGFycmF5IG9mIG51bWVyaWMgY29kZSBwb2ludHMuXG5cdCAqIEBzZWUgYHB1bnljb2RlLnVjczIuZGVjb2RlYFxuXHQgKiBAbWVtYmVyT2YgcHVueWNvZGUudWNzMlxuXHQgKiBAbmFtZSBlbmNvZGVcblx0ICogQHBhcmFtIHtBcnJheX0gY29kZVBvaW50cyBUaGUgYXJyYXkgb2YgbnVtZXJpYyBjb2RlIHBvaW50cy5cblx0ICogQHJldHVybnMge1N0cmluZ30gVGhlIG5ldyBVbmljb2RlIHN0cmluZyAoVUNTLTIpLlxuXHQgKi9cblx0ZnVuY3Rpb24gdWNzMmVuY29kZShhcnJheSkge1xuXHRcdHJldHVybiBtYXAoYXJyYXksIGZ1bmN0aW9uKHZhbHVlKSB7XG5cdFx0XHR2YXIgb3V0cHV0ID0gJyc7XG5cdFx0XHRpZiAodmFsdWUgPiAweEZGRkYpIHtcblx0XHRcdFx0dmFsdWUgLT0gMHgxMDAwMDtcblx0XHRcdFx0b3V0cHV0ICs9IHN0cmluZ0Zyb21DaGFyQ29kZSh2YWx1ZSA+Pj4gMTAgJiAweDNGRiB8IDB4RDgwMCk7XG5cdFx0XHRcdHZhbHVlID0gMHhEQzAwIHwgdmFsdWUgJiAweDNGRjtcblx0XHRcdH1cblx0XHRcdG91dHB1dCArPSBzdHJpbmdGcm9tQ2hhckNvZGUodmFsdWUpO1xuXHRcdFx0cmV0dXJuIG91dHB1dDtcblx0XHR9KS5qb2luKCcnKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBDb252ZXJ0cyBhIGJhc2ljIGNvZGUgcG9pbnQgaW50byBhIGRpZ2l0L2ludGVnZXIuXG5cdCAqIEBzZWUgYGRpZ2l0VG9CYXNpYygpYFxuXHQgKiBAcHJpdmF0ZVxuXHQgKiBAcGFyYW0ge051bWJlcn0gY29kZVBvaW50IFRoZSBiYXNpYyBudW1lcmljIGNvZGUgcG9pbnQgdmFsdWUuXG5cdCAqIEByZXR1cm5zIHtOdW1iZXJ9IFRoZSBudW1lcmljIHZhbHVlIG9mIGEgYmFzaWMgY29kZSBwb2ludCAoZm9yIHVzZSBpblxuXHQgKiByZXByZXNlbnRpbmcgaW50ZWdlcnMpIGluIHRoZSByYW5nZSBgMGAgdG8gYGJhc2UgLSAxYCwgb3IgYGJhc2VgIGlmXG5cdCAqIHRoZSBjb2RlIHBvaW50IGRvZXMgbm90IHJlcHJlc2VudCBhIHZhbHVlLlxuXHQgKi9cblx0ZnVuY3Rpb24gYmFzaWNUb0RpZ2l0KGNvZGVQb2ludCkge1xuXHRcdGlmIChjb2RlUG9pbnQgLSA0OCA8IDEwKSB7XG5cdFx0XHRyZXR1cm4gY29kZVBvaW50IC0gMjI7XG5cdFx0fVxuXHRcdGlmIChjb2RlUG9pbnQgLSA2NSA8IDI2KSB7XG5cdFx0XHRyZXR1cm4gY29kZVBvaW50IC0gNjU7XG5cdFx0fVxuXHRcdGlmIChjb2RlUG9pbnQgLSA5NyA8IDI2KSB7XG5cdFx0XHRyZXR1cm4gY29kZVBvaW50IC0gOTc7XG5cdFx0fVxuXHRcdHJldHVybiBiYXNlO1xuXHR9XG5cblx0LyoqXG5cdCAqIENvbnZlcnRzIGEgZGlnaXQvaW50ZWdlciBpbnRvIGEgYmFzaWMgY29kZSBwb2ludC5cblx0ICogQHNlZSBgYmFzaWNUb0RpZ2l0KClgXG5cdCAqIEBwcml2YXRlXG5cdCAqIEBwYXJhbSB7TnVtYmVyfSBkaWdpdCBUaGUgbnVtZXJpYyB2YWx1ZSBvZiBhIGJhc2ljIGNvZGUgcG9pbnQuXG5cdCAqIEByZXR1cm5zIHtOdW1iZXJ9IFRoZSBiYXNpYyBjb2RlIHBvaW50IHdob3NlIHZhbHVlICh3aGVuIHVzZWQgZm9yXG5cdCAqIHJlcHJlc2VudGluZyBpbnRlZ2VycykgaXMgYGRpZ2l0YCwgd2hpY2ggbmVlZHMgdG8gYmUgaW4gdGhlIHJhbmdlXG5cdCAqIGAwYCB0byBgYmFzZSAtIDFgLiBJZiBgZmxhZ2AgaXMgbm9uLXplcm8sIHRoZSB1cHBlcmNhc2UgZm9ybSBpc1xuXHQgKiB1c2VkOyBlbHNlLCB0aGUgbG93ZXJjYXNlIGZvcm0gaXMgdXNlZC4gVGhlIGJlaGF2aW9yIGlzIHVuZGVmaW5lZFxuXHQgKiBpZiBgZmxhZ2AgaXMgbm9uLXplcm8gYW5kIGBkaWdpdGAgaGFzIG5vIHVwcGVyY2FzZSBmb3JtLlxuXHQgKi9cblx0ZnVuY3Rpb24gZGlnaXRUb0Jhc2ljKGRpZ2l0LCBmbGFnKSB7XG5cdFx0Ly8gIDAuLjI1IG1hcCB0byBBU0NJSSBhLi56IG9yIEEuLlpcblx0XHQvLyAyNi4uMzUgbWFwIHRvIEFTQ0lJIDAuLjlcblx0XHRyZXR1cm4gZGlnaXQgKyAyMiArIDc1ICogKGRpZ2l0IDwgMjYpIC0gKChmbGFnICE9IDApIDw8IDUpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEJpYXMgYWRhcHRhdGlvbiBmdW5jdGlvbiBhcyBwZXIgc2VjdGlvbiAzLjQgb2YgUkZDIDM0OTIuXG5cdCAqIGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmMzNDkyI3NlY3Rpb24tMy40XG5cdCAqIEBwcml2YXRlXG5cdCAqL1xuXHRmdW5jdGlvbiBhZGFwdChkZWx0YSwgbnVtUG9pbnRzLCBmaXJzdFRpbWUpIHtcblx0XHR2YXIgayA9IDA7XG5cdFx0ZGVsdGEgPSBmaXJzdFRpbWUgPyBmbG9vcihkZWx0YSAvIGRhbXApIDogZGVsdGEgPj4gMTtcblx0XHRkZWx0YSArPSBmbG9vcihkZWx0YSAvIG51bVBvaW50cyk7XG5cdFx0Zm9yICgvKiBubyBpbml0aWFsaXphdGlvbiAqLzsgZGVsdGEgPiBiYXNlTWludXNUTWluICogdE1heCA+PiAxOyBrICs9IGJhc2UpIHtcblx0XHRcdGRlbHRhID0gZmxvb3IoZGVsdGEgLyBiYXNlTWludXNUTWluKTtcblx0XHR9XG5cdFx0cmV0dXJuIGZsb29yKGsgKyAoYmFzZU1pbnVzVE1pbiArIDEpICogZGVsdGEgLyAoZGVsdGEgKyBza2V3KSk7XG5cdH1cblxuXHQvKipcblx0ICogQ29udmVydHMgYSBQdW55Y29kZSBzdHJpbmcgb2YgQVNDSUktb25seSBzeW1ib2xzIHRvIGEgc3RyaW5nIG9mIFVuaWNvZGVcblx0ICogc3ltYm9scy5cblx0ICogQG1lbWJlck9mIHB1bnljb2RlXG5cdCAqIEBwYXJhbSB7U3RyaW5nfSBpbnB1dCBUaGUgUHVueWNvZGUgc3RyaW5nIG9mIEFTQ0lJLW9ubHkgc3ltYm9scy5cblx0ICogQHJldHVybnMge1N0cmluZ30gVGhlIHJlc3VsdGluZyBzdHJpbmcgb2YgVW5pY29kZSBzeW1ib2xzLlxuXHQgKi9cblx0ZnVuY3Rpb24gZGVjb2RlKGlucHV0KSB7XG5cdFx0Ly8gRG9uJ3QgdXNlIFVDUy0yXG5cdFx0dmFyIG91dHB1dCA9IFtdLFxuXHRcdCAgICBpbnB1dExlbmd0aCA9IGlucHV0Lmxlbmd0aCxcblx0XHQgICAgb3V0LFxuXHRcdCAgICBpID0gMCxcblx0XHQgICAgbiA9IGluaXRpYWxOLFxuXHRcdCAgICBiaWFzID0gaW5pdGlhbEJpYXMsXG5cdFx0ICAgIGJhc2ljLFxuXHRcdCAgICBqLFxuXHRcdCAgICBpbmRleCxcblx0XHQgICAgb2xkaSxcblx0XHQgICAgdyxcblx0XHQgICAgayxcblx0XHQgICAgZGlnaXQsXG5cdFx0ICAgIHQsXG5cdFx0ICAgIC8qKiBDYWNoZWQgY2FsY3VsYXRpb24gcmVzdWx0cyAqL1xuXHRcdCAgICBiYXNlTWludXNUO1xuXG5cdFx0Ly8gSGFuZGxlIHRoZSBiYXNpYyBjb2RlIHBvaW50czogbGV0IGBiYXNpY2AgYmUgdGhlIG51bWJlciBvZiBpbnB1dCBjb2RlXG5cdFx0Ly8gcG9pbnRzIGJlZm9yZSB0aGUgbGFzdCBkZWxpbWl0ZXIsIG9yIGAwYCBpZiB0aGVyZSBpcyBub25lLCB0aGVuIGNvcHlcblx0XHQvLyB0aGUgZmlyc3QgYmFzaWMgY29kZSBwb2ludHMgdG8gdGhlIG91dHB1dC5cblxuXHRcdGJhc2ljID0gaW5wdXQubGFzdEluZGV4T2YoZGVsaW1pdGVyKTtcblx0XHRpZiAoYmFzaWMgPCAwKSB7XG5cdFx0XHRiYXNpYyA9IDA7XG5cdFx0fVxuXG5cdFx0Zm9yIChqID0gMDsgaiA8IGJhc2ljOyArK2opIHtcblx0XHRcdC8vIGlmIGl0J3Mgbm90IGEgYmFzaWMgY29kZSBwb2ludFxuXHRcdFx0aWYgKGlucHV0LmNoYXJDb2RlQXQoaikgPj0gMHg4MCkge1xuXHRcdFx0XHRlcnJvcignbm90LWJhc2ljJyk7XG5cdFx0XHR9XG5cdFx0XHRvdXRwdXQucHVzaChpbnB1dC5jaGFyQ29kZUF0KGopKTtcblx0XHR9XG5cblx0XHQvLyBNYWluIGRlY29kaW5nIGxvb3A6IHN0YXJ0IGp1c3QgYWZ0ZXIgdGhlIGxhc3QgZGVsaW1pdGVyIGlmIGFueSBiYXNpYyBjb2RlXG5cdFx0Ly8gcG9pbnRzIHdlcmUgY29waWVkOyBzdGFydCBhdCB0aGUgYmVnaW5uaW5nIG90aGVyd2lzZS5cblxuXHRcdGZvciAoaW5kZXggPSBiYXNpYyA+IDAgPyBiYXNpYyArIDEgOiAwOyBpbmRleCA8IGlucHV0TGVuZ3RoOyAvKiBubyBmaW5hbCBleHByZXNzaW9uICovKSB7XG5cblx0XHRcdC8vIGBpbmRleGAgaXMgdGhlIGluZGV4IG9mIHRoZSBuZXh0IGNoYXJhY3RlciB0byBiZSBjb25zdW1lZC5cblx0XHRcdC8vIERlY29kZSBhIGdlbmVyYWxpemVkIHZhcmlhYmxlLWxlbmd0aCBpbnRlZ2VyIGludG8gYGRlbHRhYCxcblx0XHRcdC8vIHdoaWNoIGdldHMgYWRkZWQgdG8gYGlgLiBUaGUgb3ZlcmZsb3cgY2hlY2tpbmcgaXMgZWFzaWVyXG5cdFx0XHQvLyBpZiB3ZSBpbmNyZWFzZSBgaWAgYXMgd2UgZ28sIHRoZW4gc3VidHJhY3Qgb2ZmIGl0cyBzdGFydGluZ1xuXHRcdFx0Ly8gdmFsdWUgYXQgdGhlIGVuZCB0byBvYnRhaW4gYGRlbHRhYC5cblx0XHRcdGZvciAob2xkaSA9IGksIHcgPSAxLCBrID0gYmFzZTsgLyogbm8gY29uZGl0aW9uICovOyBrICs9IGJhc2UpIHtcblxuXHRcdFx0XHRpZiAoaW5kZXggPj0gaW5wdXRMZW5ndGgpIHtcblx0XHRcdFx0XHRlcnJvcignaW52YWxpZC1pbnB1dCcpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0ZGlnaXQgPSBiYXNpY1RvRGlnaXQoaW5wdXQuY2hhckNvZGVBdChpbmRleCsrKSk7XG5cblx0XHRcdFx0aWYgKGRpZ2l0ID49IGJhc2UgfHwgZGlnaXQgPiBmbG9vcigobWF4SW50IC0gaSkgLyB3KSkge1xuXHRcdFx0XHRcdGVycm9yKCdvdmVyZmxvdycpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0aSArPSBkaWdpdCAqIHc7XG5cdFx0XHRcdHQgPSBrIDw9IGJpYXMgPyB0TWluIDogKGsgPj0gYmlhcyArIHRNYXggPyB0TWF4IDogayAtIGJpYXMpO1xuXG5cdFx0XHRcdGlmIChkaWdpdCA8IHQpIHtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGJhc2VNaW51c1QgPSBiYXNlIC0gdDtcblx0XHRcdFx0aWYgKHcgPiBmbG9vcihtYXhJbnQgLyBiYXNlTWludXNUKSkge1xuXHRcdFx0XHRcdGVycm9yKCdvdmVyZmxvdycpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0dyAqPSBiYXNlTWludXNUO1xuXG5cdFx0XHR9XG5cblx0XHRcdG91dCA9IG91dHB1dC5sZW5ndGggKyAxO1xuXHRcdFx0YmlhcyA9IGFkYXB0KGkgLSBvbGRpLCBvdXQsIG9sZGkgPT0gMCk7XG5cblx0XHRcdC8vIGBpYCB3YXMgc3VwcG9zZWQgdG8gd3JhcCBhcm91bmQgZnJvbSBgb3V0YCB0byBgMGAsXG5cdFx0XHQvLyBpbmNyZW1lbnRpbmcgYG5gIGVhY2ggdGltZSwgc28gd2UnbGwgZml4IHRoYXQgbm93OlxuXHRcdFx0aWYgKGZsb29yKGkgLyBvdXQpID4gbWF4SW50IC0gbikge1xuXHRcdFx0XHRlcnJvcignb3ZlcmZsb3cnKTtcblx0XHRcdH1cblxuXHRcdFx0biArPSBmbG9vcihpIC8gb3V0KTtcblx0XHRcdGkgJT0gb3V0O1xuXG5cdFx0XHQvLyBJbnNlcnQgYG5gIGF0IHBvc2l0aW9uIGBpYCBvZiB0aGUgb3V0cHV0XG5cdFx0XHRvdXRwdXQuc3BsaWNlKGkrKywgMCwgbik7XG5cblx0XHR9XG5cblx0XHRyZXR1cm4gdWNzMmVuY29kZShvdXRwdXQpO1xuXHR9XG5cblx0LyoqXG5cdCAqIENvbnZlcnRzIGEgc3RyaW5nIG9mIFVuaWNvZGUgc3ltYm9scyAoZS5nLiBhIGRvbWFpbiBuYW1lIGxhYmVsKSB0byBhXG5cdCAqIFB1bnljb2RlIHN0cmluZyBvZiBBU0NJSS1vbmx5IHN5bWJvbHMuXG5cdCAqIEBtZW1iZXJPZiBwdW55Y29kZVxuXHQgKiBAcGFyYW0ge1N0cmluZ30gaW5wdXQgVGhlIHN0cmluZyBvZiBVbmljb2RlIHN5bWJvbHMuXG5cdCAqIEByZXR1cm5zIHtTdHJpbmd9IFRoZSByZXN1bHRpbmcgUHVueWNvZGUgc3RyaW5nIG9mIEFTQ0lJLW9ubHkgc3ltYm9scy5cblx0ICovXG5cdGZ1bmN0aW9uIGVuY29kZShpbnB1dCkge1xuXHRcdHZhciBuLFxuXHRcdCAgICBkZWx0YSxcblx0XHQgICAgaGFuZGxlZENQQ291bnQsXG5cdFx0ICAgIGJhc2ljTGVuZ3RoLFxuXHRcdCAgICBiaWFzLFxuXHRcdCAgICBqLFxuXHRcdCAgICBtLFxuXHRcdCAgICBxLFxuXHRcdCAgICBrLFxuXHRcdCAgICB0LFxuXHRcdCAgICBjdXJyZW50VmFsdWUsXG5cdFx0ICAgIG91dHB1dCA9IFtdLFxuXHRcdCAgICAvKiogYGlucHV0TGVuZ3RoYCB3aWxsIGhvbGQgdGhlIG51bWJlciBvZiBjb2RlIHBvaW50cyBpbiBgaW5wdXRgLiAqL1xuXHRcdCAgICBpbnB1dExlbmd0aCxcblx0XHQgICAgLyoqIENhY2hlZCBjYWxjdWxhdGlvbiByZXN1bHRzICovXG5cdFx0ICAgIGhhbmRsZWRDUENvdW50UGx1c09uZSxcblx0XHQgICAgYmFzZU1pbnVzVCxcblx0XHQgICAgcU1pbnVzVDtcblxuXHRcdC8vIENvbnZlcnQgdGhlIGlucHV0IGluIFVDUy0yIHRvIFVuaWNvZGVcblx0XHRpbnB1dCA9IHVjczJkZWNvZGUoaW5wdXQpO1xuXG5cdFx0Ly8gQ2FjaGUgdGhlIGxlbmd0aFxuXHRcdGlucHV0TGVuZ3RoID0gaW5wdXQubGVuZ3RoO1xuXG5cdFx0Ly8gSW5pdGlhbGl6ZSB0aGUgc3RhdGVcblx0XHRuID0gaW5pdGlhbE47XG5cdFx0ZGVsdGEgPSAwO1xuXHRcdGJpYXMgPSBpbml0aWFsQmlhcztcblxuXHRcdC8vIEhhbmRsZSB0aGUgYmFzaWMgY29kZSBwb2ludHNcblx0XHRmb3IgKGogPSAwOyBqIDwgaW5wdXRMZW5ndGg7ICsraikge1xuXHRcdFx0Y3VycmVudFZhbHVlID0gaW5wdXRbal07XG5cdFx0XHRpZiAoY3VycmVudFZhbHVlIDwgMHg4MCkge1xuXHRcdFx0XHRvdXRwdXQucHVzaChzdHJpbmdGcm9tQ2hhckNvZGUoY3VycmVudFZhbHVlKSk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0aGFuZGxlZENQQ291bnQgPSBiYXNpY0xlbmd0aCA9IG91dHB1dC5sZW5ndGg7XG5cblx0XHQvLyBgaGFuZGxlZENQQ291bnRgIGlzIHRoZSBudW1iZXIgb2YgY29kZSBwb2ludHMgdGhhdCBoYXZlIGJlZW4gaGFuZGxlZDtcblx0XHQvLyBgYmFzaWNMZW5ndGhgIGlzIHRoZSBudW1iZXIgb2YgYmFzaWMgY29kZSBwb2ludHMuXG5cblx0XHQvLyBGaW5pc2ggdGhlIGJhc2ljIHN0cmluZyAtIGlmIGl0IGlzIG5vdCBlbXB0eSAtIHdpdGggYSBkZWxpbWl0ZXJcblx0XHRpZiAoYmFzaWNMZW5ndGgpIHtcblx0XHRcdG91dHB1dC5wdXNoKGRlbGltaXRlcik7XG5cdFx0fVxuXG5cdFx0Ly8gTWFpbiBlbmNvZGluZyBsb29wOlxuXHRcdHdoaWxlIChoYW5kbGVkQ1BDb3VudCA8IGlucHV0TGVuZ3RoKSB7XG5cblx0XHRcdC8vIEFsbCBub24tYmFzaWMgY29kZSBwb2ludHMgPCBuIGhhdmUgYmVlbiBoYW5kbGVkIGFscmVhZHkuIEZpbmQgdGhlIG5leHRcblx0XHRcdC8vIGxhcmdlciBvbmU6XG5cdFx0XHRmb3IgKG0gPSBtYXhJbnQsIGogPSAwOyBqIDwgaW5wdXRMZW5ndGg7ICsraikge1xuXHRcdFx0XHRjdXJyZW50VmFsdWUgPSBpbnB1dFtqXTtcblx0XHRcdFx0aWYgKGN1cnJlbnRWYWx1ZSA+PSBuICYmIGN1cnJlbnRWYWx1ZSA8IG0pIHtcblx0XHRcdFx0XHRtID0gY3VycmVudFZhbHVlO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdC8vIEluY3JlYXNlIGBkZWx0YWAgZW5vdWdoIHRvIGFkdmFuY2UgdGhlIGRlY29kZXIncyA8bixpPiBzdGF0ZSB0byA8bSwwPixcblx0XHRcdC8vIGJ1dCBndWFyZCBhZ2FpbnN0IG92ZXJmbG93XG5cdFx0XHRoYW5kbGVkQ1BDb3VudFBsdXNPbmUgPSBoYW5kbGVkQ1BDb3VudCArIDE7XG5cdFx0XHRpZiAobSAtIG4gPiBmbG9vcigobWF4SW50IC0gZGVsdGEpIC8gaGFuZGxlZENQQ291bnRQbHVzT25lKSkge1xuXHRcdFx0XHRlcnJvcignb3ZlcmZsb3cnKTtcblx0XHRcdH1cblxuXHRcdFx0ZGVsdGEgKz0gKG0gLSBuKSAqIGhhbmRsZWRDUENvdW50UGx1c09uZTtcblx0XHRcdG4gPSBtO1xuXG5cdFx0XHRmb3IgKGogPSAwOyBqIDwgaW5wdXRMZW5ndGg7ICsraikge1xuXHRcdFx0XHRjdXJyZW50VmFsdWUgPSBpbnB1dFtqXTtcblxuXHRcdFx0XHRpZiAoY3VycmVudFZhbHVlIDwgbiAmJiArK2RlbHRhID4gbWF4SW50KSB7XG5cdFx0XHRcdFx0ZXJyb3IoJ292ZXJmbG93Jyk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZiAoY3VycmVudFZhbHVlID09IG4pIHtcblx0XHRcdFx0XHQvLyBSZXByZXNlbnQgZGVsdGEgYXMgYSBnZW5lcmFsaXplZCB2YXJpYWJsZS1sZW5ndGggaW50ZWdlclxuXHRcdFx0XHRcdGZvciAocSA9IGRlbHRhLCBrID0gYmFzZTsgLyogbm8gY29uZGl0aW9uICovOyBrICs9IGJhc2UpIHtcblx0XHRcdFx0XHRcdHQgPSBrIDw9IGJpYXMgPyB0TWluIDogKGsgPj0gYmlhcyArIHRNYXggPyB0TWF4IDogayAtIGJpYXMpO1xuXHRcdFx0XHRcdFx0aWYgKHEgPCB0KSB7XG5cdFx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0cU1pbnVzVCA9IHEgLSB0O1xuXHRcdFx0XHRcdFx0YmFzZU1pbnVzVCA9IGJhc2UgLSB0O1xuXHRcdFx0XHRcdFx0b3V0cHV0LnB1c2goXG5cdFx0XHRcdFx0XHRcdHN0cmluZ0Zyb21DaGFyQ29kZShkaWdpdFRvQmFzaWModCArIHFNaW51c1QgJSBiYXNlTWludXNULCAwKSlcblx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0XHRxID0gZmxvb3IocU1pbnVzVCAvIGJhc2VNaW51c1QpO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdG91dHB1dC5wdXNoKHN0cmluZ0Zyb21DaGFyQ29kZShkaWdpdFRvQmFzaWMocSwgMCkpKTtcblx0XHRcdFx0XHRiaWFzID0gYWRhcHQoZGVsdGEsIGhhbmRsZWRDUENvdW50UGx1c09uZSwgaGFuZGxlZENQQ291bnQgPT0gYmFzaWNMZW5ndGgpO1xuXHRcdFx0XHRcdGRlbHRhID0gMDtcblx0XHRcdFx0XHQrK2hhbmRsZWRDUENvdW50O1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdCsrZGVsdGE7XG5cdFx0XHQrK247XG5cblx0XHR9XG5cdFx0cmV0dXJuIG91dHB1dC5qb2luKCcnKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBDb252ZXJ0cyBhIFB1bnljb2RlIHN0cmluZyByZXByZXNlbnRpbmcgYSBkb21haW4gbmFtZSBvciBhbiBlbWFpbCBhZGRyZXNzXG5cdCAqIHRvIFVuaWNvZGUuIE9ubHkgdGhlIFB1bnljb2RlZCBwYXJ0cyBvZiB0aGUgaW5wdXQgd2lsbCBiZSBjb252ZXJ0ZWQsIGkuZS5cblx0ICogaXQgZG9lc24ndCBtYXR0ZXIgaWYgeW91IGNhbGwgaXQgb24gYSBzdHJpbmcgdGhhdCBoYXMgYWxyZWFkeSBiZWVuXG5cdCAqIGNvbnZlcnRlZCB0byBVbmljb2RlLlxuXHQgKiBAbWVtYmVyT2YgcHVueWNvZGVcblx0ICogQHBhcmFtIHtTdHJpbmd9IGlucHV0IFRoZSBQdW55Y29kZWQgZG9tYWluIG5hbWUgb3IgZW1haWwgYWRkcmVzcyB0b1xuXHQgKiBjb252ZXJ0IHRvIFVuaWNvZGUuXG5cdCAqIEByZXR1cm5zIHtTdHJpbmd9IFRoZSBVbmljb2RlIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBnaXZlbiBQdW55Y29kZVxuXHQgKiBzdHJpbmcuXG5cdCAqL1xuXHRmdW5jdGlvbiB0b1VuaWNvZGUoaW5wdXQpIHtcblx0XHRyZXR1cm4gbWFwRG9tYWluKGlucHV0LCBmdW5jdGlvbihzdHJpbmcpIHtcblx0XHRcdHJldHVybiByZWdleFB1bnljb2RlLnRlc3Qoc3RyaW5nKVxuXHRcdFx0XHQ/IGRlY29kZShzdHJpbmcuc2xpY2UoNCkudG9Mb3dlckNhc2UoKSlcblx0XHRcdFx0OiBzdHJpbmc7XG5cdFx0fSk7XG5cdH1cblxuXHQvKipcblx0ICogQ29udmVydHMgYSBVbmljb2RlIHN0cmluZyByZXByZXNlbnRpbmcgYSBkb21haW4gbmFtZSBvciBhbiBlbWFpbCBhZGRyZXNzIHRvXG5cdCAqIFB1bnljb2RlLiBPbmx5IHRoZSBub24tQVNDSUkgcGFydHMgb2YgdGhlIGRvbWFpbiBuYW1lIHdpbGwgYmUgY29udmVydGVkLFxuXHQgKiBpLmUuIGl0IGRvZXNuJ3QgbWF0dGVyIGlmIHlvdSBjYWxsIGl0IHdpdGggYSBkb21haW4gdGhhdCdzIGFscmVhZHkgaW5cblx0ICogQVNDSUkuXG5cdCAqIEBtZW1iZXJPZiBwdW55Y29kZVxuXHQgKiBAcGFyYW0ge1N0cmluZ30gaW5wdXQgVGhlIGRvbWFpbiBuYW1lIG9yIGVtYWlsIGFkZHJlc3MgdG8gY29udmVydCwgYXMgYVxuXHQgKiBVbmljb2RlIHN0cmluZy5cblx0ICogQHJldHVybnMge1N0cmluZ30gVGhlIFB1bnljb2RlIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBnaXZlbiBkb21haW4gbmFtZSBvclxuXHQgKiBlbWFpbCBhZGRyZXNzLlxuXHQgKi9cblx0ZnVuY3Rpb24gdG9BU0NJSShpbnB1dCkge1xuXHRcdHJldHVybiBtYXBEb21haW4oaW5wdXQsIGZ1bmN0aW9uKHN0cmluZykge1xuXHRcdFx0cmV0dXJuIHJlZ2V4Tm9uQVNDSUkudGVzdChzdHJpbmcpXG5cdFx0XHRcdD8gJ3huLS0nICsgZW5jb2RlKHN0cmluZylcblx0XHRcdFx0OiBzdHJpbmc7XG5cdFx0fSk7XG5cdH1cblxuXHQvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cblxuXHQvKiogRGVmaW5lIHRoZSBwdWJsaWMgQVBJICovXG5cdHB1bnljb2RlID0ge1xuXHRcdC8qKlxuXHRcdCAqIEEgc3RyaW5nIHJlcHJlc2VudGluZyB0aGUgY3VycmVudCBQdW55Y29kZS5qcyB2ZXJzaW9uIG51bWJlci5cblx0XHQgKiBAbWVtYmVyT2YgcHVueWNvZGVcblx0XHQgKiBAdHlwZSBTdHJpbmdcblx0XHQgKi9cblx0XHQndmVyc2lvbic6ICcxLjMuMicsXG5cdFx0LyoqXG5cdFx0ICogQW4gb2JqZWN0IG9mIG1ldGhvZHMgdG8gY29udmVydCBmcm9tIEphdmFTY3JpcHQncyBpbnRlcm5hbCBjaGFyYWN0ZXJcblx0XHQgKiByZXByZXNlbnRhdGlvbiAoVUNTLTIpIHRvIFVuaWNvZGUgY29kZSBwb2ludHMsIGFuZCBiYWNrLlxuXHRcdCAqIEBzZWUgPGh0dHBzOi8vbWF0aGlhc2J5bmVucy5iZS9ub3Rlcy9qYXZhc2NyaXB0LWVuY29kaW5nPlxuXHRcdCAqIEBtZW1iZXJPZiBwdW55Y29kZVxuXHRcdCAqIEB0eXBlIE9iamVjdFxuXHRcdCAqL1xuXHRcdCd1Y3MyJzoge1xuXHRcdFx0J2RlY29kZSc6IHVjczJkZWNvZGUsXG5cdFx0XHQnZW5jb2RlJzogdWNzMmVuY29kZVxuXHRcdH0sXG5cdFx0J2RlY29kZSc6IGRlY29kZSxcblx0XHQnZW5jb2RlJzogZW5jb2RlLFxuXHRcdCd0b0FTQ0lJJzogdG9BU0NJSSxcblx0XHQndG9Vbmljb2RlJzogdG9Vbmljb2RlXG5cdH07XG5cblx0LyoqIEV4cG9zZSBgcHVueWNvZGVgICovXG5cdC8vIFNvbWUgQU1EIGJ1aWxkIG9wdGltaXplcnMsIGxpa2Ugci5qcywgY2hlY2sgZm9yIHNwZWNpZmljIGNvbmRpdGlvbiBwYXR0ZXJuc1xuXHQvLyBsaWtlIHRoZSBmb2xsb3dpbmc6XG5cdGlmIChcblx0XHR0eXBlb2YgZGVmaW5lID09ICdmdW5jdGlvbicgJiZcblx0XHR0eXBlb2YgZGVmaW5lLmFtZCA9PSAnb2JqZWN0JyAmJlxuXHRcdGRlZmluZS5hbWRcblx0KSB7XG5cdFx0ZGVmaW5lKCdwdW55Y29kZScsIGZ1bmN0aW9uKCkge1xuXHRcdFx0cmV0dXJuIHB1bnljb2RlO1xuXHRcdH0pO1xuXHR9IGVsc2UgaWYgKGZyZWVFeHBvcnRzICYmIGZyZWVNb2R1bGUpIHtcblx0XHRpZiAobW9kdWxlLmV4cG9ydHMgPT0gZnJlZUV4cG9ydHMpIHtcblx0XHRcdC8vIGluIE5vZGUuanMsIGlvLmpzLCBvciBSaW5nb0pTIHYwLjguMCtcblx0XHRcdGZyZWVNb2R1bGUuZXhwb3J0cyA9IHB1bnljb2RlO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHQvLyBpbiBOYXJ3aGFsIG9yIFJpbmdvSlMgdjAuNy4wLVxuXHRcdFx0Zm9yIChrZXkgaW4gcHVueWNvZGUpIHtcblx0XHRcdFx0cHVueWNvZGUuaGFzT3duUHJvcGVydHkoa2V5KSAmJiAoZnJlZUV4cG9ydHNba2V5XSA9IHB1bnljb2RlW2tleV0pO1xuXHRcdFx0fVxuXHRcdH1cblx0fSBlbHNlIHtcblx0XHQvLyBpbiBSaGlubyBvciBhIHdlYiBicm93c2VyXG5cdFx0cm9vdC5wdW55Y29kZSA9IHB1bnljb2RlO1xuXHR9XG5cbn0odGhpcykpO1xuIiwiLy8gQ29weXJpZ2h0IEpveWVudCwgSW5jLiBhbmQgb3RoZXIgTm9kZSBjb250cmlidXRvcnMuXG4vL1xuLy8gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGFcbi8vIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGVcbi8vIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZ1xuLy8gd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLFxuLy8gZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdFxuLy8gcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlXG4vLyBmb2xsb3dpbmcgY29uZGl0aW9uczpcbi8vXG4vLyBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZFxuLy8gaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4vL1xuLy8gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTU1xuLy8gT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRlxuLy8gTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTlxuLy8gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sXG4vLyBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1Jcbi8vIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEVcbi8vIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG5cbid1c2Ugc3RyaWN0JztcblxuLy8gSWYgb2JqLmhhc093blByb3BlcnR5IGhhcyBiZWVuIG92ZXJyaWRkZW4sIHRoZW4gY2FsbGluZ1xuLy8gb2JqLmhhc093blByb3BlcnR5KHByb3ApIHdpbGwgYnJlYWsuXG4vLyBTZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9qb3llbnQvbm9kZS9pc3N1ZXMvMTcwN1xuZnVuY3Rpb24gaGFzT3duUHJvcGVydHkob2JqLCBwcm9wKSB7XG4gIHJldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqLCBwcm9wKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihxcywgc2VwLCBlcSwgb3B0aW9ucykge1xuICBzZXAgPSBzZXAgfHwgJyYnO1xuICBlcSA9IGVxIHx8ICc9JztcbiAgdmFyIG9iaiA9IHt9O1xuXG4gIGlmICh0eXBlb2YgcXMgIT09ICdzdHJpbmcnIHx8IHFzLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiBvYmo7XG4gIH1cblxuICB2YXIgcmVnZXhwID0gL1xcKy9nO1xuICBxcyA9IHFzLnNwbGl0KHNlcCk7XG5cbiAgdmFyIG1heEtleXMgPSAxMDAwO1xuICBpZiAob3B0aW9ucyAmJiB0eXBlb2Ygb3B0aW9ucy5tYXhLZXlzID09PSAnbnVtYmVyJykge1xuICAgIG1heEtleXMgPSBvcHRpb25zLm1heEtleXM7XG4gIH1cblxuICB2YXIgbGVuID0gcXMubGVuZ3RoO1xuICAvLyBtYXhLZXlzIDw9IDAgbWVhbnMgdGhhdCB3ZSBzaG91bGQgbm90IGxpbWl0IGtleXMgY291bnRcbiAgaWYgKG1heEtleXMgPiAwICYmIGxlbiA+IG1heEtleXMpIHtcbiAgICBsZW4gPSBtYXhLZXlzO1xuICB9XG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47ICsraSkge1xuICAgIHZhciB4ID0gcXNbaV0ucmVwbGFjZShyZWdleHAsICclMjAnKSxcbiAgICAgICAgaWR4ID0geC5pbmRleE9mKGVxKSxcbiAgICAgICAga3N0ciwgdnN0ciwgaywgdjtcblxuICAgIGlmIChpZHggPj0gMCkge1xuICAgICAga3N0ciA9IHguc3Vic3RyKDAsIGlkeCk7XG4gICAgICB2c3RyID0geC5zdWJzdHIoaWR4ICsgMSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGtzdHIgPSB4O1xuICAgICAgdnN0ciA9ICcnO1xuICAgIH1cblxuICAgIGsgPSBkZWNvZGVVUklDb21wb25lbnQoa3N0cik7XG4gICAgdiA9IGRlY29kZVVSSUNvbXBvbmVudCh2c3RyKTtcblxuICAgIGlmICghaGFzT3duUHJvcGVydHkob2JqLCBrKSkge1xuICAgICAgb2JqW2tdID0gdjtcbiAgICB9IGVsc2UgaWYgKGlzQXJyYXkob2JqW2tdKSkge1xuICAgICAgb2JqW2tdLnB1c2godik7XG4gICAgfSBlbHNlIHtcbiAgICAgIG9ialtrXSA9IFtvYmpba10sIHZdO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBvYmo7XG59O1xuXG52YXIgaXNBcnJheSA9IEFycmF5LmlzQXJyYXkgfHwgZnVuY3Rpb24gKHhzKSB7XG4gIHJldHVybiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoeHMpID09PSAnW29iamVjdCBBcnJheV0nO1xufTtcbiIsIi8vIENvcHlyaWdodCBKb3llbnQsIEluYy4gYW5kIG90aGVyIE5vZGUgY29udHJpYnV0b3JzLlxuLy9cbi8vIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhXG4vLyBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlXG4vLyBcIlNvZnR3YXJlXCIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmdcbi8vIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCxcbi8vIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXRcbi8vIHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZVxuLy8gZm9sbG93aW5nIGNvbmRpdGlvbnM6XG4vL1xuLy8gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWRcbi8vIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuLy9cbi8vIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1Ncbi8vIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0Zcbi8vIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU5cbi8vIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLFxuLy8gREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SXG4vLyBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFXG4vLyBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLlxuXG4ndXNlIHN0cmljdCc7XG5cbnZhciBzdHJpbmdpZnlQcmltaXRpdmUgPSBmdW5jdGlvbih2KSB7XG4gIHN3aXRjaCAodHlwZW9mIHYpIHtcbiAgICBjYXNlICdzdHJpbmcnOlxuICAgICAgcmV0dXJuIHY7XG5cbiAgICBjYXNlICdib29sZWFuJzpcbiAgICAgIHJldHVybiB2ID8gJ3RydWUnIDogJ2ZhbHNlJztcblxuICAgIGNhc2UgJ251bWJlcic6XG4gICAgICByZXR1cm4gaXNGaW5pdGUodikgPyB2IDogJyc7XG5cbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuICcnO1xuICB9XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKG9iaiwgc2VwLCBlcSwgbmFtZSkge1xuICBzZXAgPSBzZXAgfHwgJyYnO1xuICBlcSA9IGVxIHx8ICc9JztcbiAgaWYgKG9iaiA9PT0gbnVsbCkge1xuICAgIG9iaiA9IHVuZGVmaW5lZDtcbiAgfVxuXG4gIGlmICh0eXBlb2Ygb2JqID09PSAnb2JqZWN0Jykge1xuICAgIHJldHVybiBtYXAob2JqZWN0S2V5cyhvYmopLCBmdW5jdGlvbihrKSB7XG4gICAgICB2YXIga3MgPSBlbmNvZGVVUklDb21wb25lbnQoc3RyaW5naWZ5UHJpbWl0aXZlKGspKSArIGVxO1xuICAgICAgaWYgKGlzQXJyYXkob2JqW2tdKSkge1xuICAgICAgICByZXR1cm4gbWFwKG9ialtrXSwgZnVuY3Rpb24odikge1xuICAgICAgICAgIHJldHVybiBrcyArIGVuY29kZVVSSUNvbXBvbmVudChzdHJpbmdpZnlQcmltaXRpdmUodikpO1xuICAgICAgICB9KS5qb2luKHNlcCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4ga3MgKyBlbmNvZGVVUklDb21wb25lbnQoc3RyaW5naWZ5UHJpbWl0aXZlKG9ialtrXSkpO1xuICAgICAgfVxuICAgIH0pLmpvaW4oc2VwKTtcblxuICB9XG5cbiAgaWYgKCFuYW1lKSByZXR1cm4gJyc7XG4gIHJldHVybiBlbmNvZGVVUklDb21wb25lbnQoc3RyaW5naWZ5UHJpbWl0aXZlKG5hbWUpKSArIGVxICtcbiAgICAgICAgIGVuY29kZVVSSUNvbXBvbmVudChzdHJpbmdpZnlQcmltaXRpdmUob2JqKSk7XG59O1xuXG52YXIgaXNBcnJheSA9IEFycmF5LmlzQXJyYXkgfHwgZnVuY3Rpb24gKHhzKSB7XG4gIHJldHVybiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoeHMpID09PSAnW29iamVjdCBBcnJheV0nO1xufTtcblxuZnVuY3Rpb24gbWFwICh4cywgZikge1xuICBpZiAoeHMubWFwKSByZXR1cm4geHMubWFwKGYpO1xuICB2YXIgcmVzID0gW107XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgeHMubGVuZ3RoOyBpKyspIHtcbiAgICByZXMucHVzaChmKHhzW2ldLCBpKSk7XG4gIH1cbiAgcmV0dXJuIHJlcztcbn1cblxudmFyIG9iamVjdEtleXMgPSBPYmplY3Qua2V5cyB8fCBmdW5jdGlvbiAob2JqKSB7XG4gIHZhciByZXMgPSBbXTtcbiAgZm9yICh2YXIga2V5IGluIG9iaikge1xuICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqLCBrZXkpKSByZXMucHVzaChrZXkpO1xuICB9XG4gIHJldHVybiByZXM7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG5leHBvcnRzLmRlY29kZSA9IGV4cG9ydHMucGFyc2UgPSByZXF1aXJlKCcuL2RlY29kZScpO1xuZXhwb3J0cy5lbmNvZGUgPSBleHBvcnRzLnN0cmluZ2lmeSA9IHJlcXVpcmUoJy4vZW5jb2RlJyk7XG4iLCIvLyBDb3B5cmlnaHQgSm95ZW50LCBJbmMuIGFuZCBvdGhlciBOb2RlIGNvbnRyaWJ1dG9ycy5cbi8vXG4vLyBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYVxuLy8gY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZVxuLy8gXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nXG4vLyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsXG4vLyBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0XG4vLyBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGVcbi8vIGZvbGxvd2luZyBjb25kaXRpb25zOlxuLy9cbi8vIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkXG4vLyBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbi8vXG4vLyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTXG4vLyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GXG4vLyBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOXG4vLyBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSxcbi8vIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUlxuLy8gT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRVxuLy8gVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cblxudmFyIHB1bnljb2RlID0gcmVxdWlyZSgncHVueWNvZGUnKTtcblxuZXhwb3J0cy5wYXJzZSA9IHVybFBhcnNlO1xuZXhwb3J0cy5yZXNvbHZlID0gdXJsUmVzb2x2ZTtcbmV4cG9ydHMucmVzb2x2ZU9iamVjdCA9IHVybFJlc29sdmVPYmplY3Q7XG5leHBvcnRzLmZvcm1hdCA9IHVybEZvcm1hdDtcblxuZXhwb3J0cy5VcmwgPSBVcmw7XG5cbmZ1bmN0aW9uIFVybCgpIHtcbiAgdGhpcy5wcm90b2NvbCA9IG51bGw7XG4gIHRoaXMuc2xhc2hlcyA9IG51bGw7XG4gIHRoaXMuYXV0aCA9IG51bGw7XG4gIHRoaXMuaG9zdCA9IG51bGw7XG4gIHRoaXMucG9ydCA9IG51bGw7XG4gIHRoaXMuaG9zdG5hbWUgPSBudWxsO1xuICB0aGlzLmhhc2ggPSBudWxsO1xuICB0aGlzLnNlYXJjaCA9IG51bGw7XG4gIHRoaXMucXVlcnkgPSBudWxsO1xuICB0aGlzLnBhdGhuYW1lID0gbnVsbDtcbiAgdGhpcy5wYXRoID0gbnVsbDtcbiAgdGhpcy5ocmVmID0gbnVsbDtcbn1cblxuLy8gUmVmZXJlbmNlOiBSRkMgMzk4NiwgUkZDIDE4MDgsIFJGQyAyMzk2XG5cbi8vIGRlZmluZSB0aGVzZSBoZXJlIHNvIGF0IGxlYXN0IHRoZXkgb25seSBoYXZlIHRvIGJlXG4vLyBjb21waWxlZCBvbmNlIG9uIHRoZSBmaXJzdCBtb2R1bGUgbG9hZC5cbnZhciBwcm90b2NvbFBhdHRlcm4gPSAvXihbYS16MC05ListXSs6KS9pLFxuICAgIHBvcnRQYXR0ZXJuID0gLzpbMC05XSokLyxcblxuICAgIC8vIFJGQyAyMzk2OiBjaGFyYWN0ZXJzIHJlc2VydmVkIGZvciBkZWxpbWl0aW5nIFVSTHMuXG4gICAgLy8gV2UgYWN0dWFsbHkganVzdCBhdXRvLWVzY2FwZSB0aGVzZS5cbiAgICBkZWxpbXMgPSBbJzwnLCAnPicsICdcIicsICdgJywgJyAnLCAnXFxyJywgJ1xcbicsICdcXHQnXSxcblxuICAgIC8vIFJGQyAyMzk2OiBjaGFyYWN0ZXJzIG5vdCBhbGxvd2VkIGZvciB2YXJpb3VzIHJlYXNvbnMuXG4gICAgdW53aXNlID0gWyd7JywgJ30nLCAnfCcsICdcXFxcJywgJ14nLCAnYCddLmNvbmNhdChkZWxpbXMpLFxuXG4gICAgLy8gQWxsb3dlZCBieSBSRkNzLCBidXQgY2F1c2Ugb2YgWFNTIGF0dGFja3MuICBBbHdheXMgZXNjYXBlIHRoZXNlLlxuICAgIGF1dG9Fc2NhcGUgPSBbJ1xcJyddLmNvbmNhdCh1bndpc2UpLFxuICAgIC8vIENoYXJhY3RlcnMgdGhhdCBhcmUgbmV2ZXIgZXZlciBhbGxvd2VkIGluIGEgaG9zdG5hbWUuXG4gICAgLy8gTm90ZSB0aGF0IGFueSBpbnZhbGlkIGNoYXJzIGFyZSBhbHNvIGhhbmRsZWQsIGJ1dCB0aGVzZVxuICAgIC8vIGFyZSB0aGUgb25lcyB0aGF0IGFyZSAqZXhwZWN0ZWQqIHRvIGJlIHNlZW4sIHNvIHdlIGZhc3QtcGF0aFxuICAgIC8vIHRoZW0uXG4gICAgbm9uSG9zdENoYXJzID0gWyclJywgJy8nLCAnPycsICc7JywgJyMnXS5jb25jYXQoYXV0b0VzY2FwZSksXG4gICAgaG9zdEVuZGluZ0NoYXJzID0gWycvJywgJz8nLCAnIyddLFxuICAgIGhvc3RuYW1lTWF4TGVuID0gMjU1LFxuICAgIGhvc3RuYW1lUGFydFBhdHRlcm4gPSAvXlthLXowLTlBLVpfLV17MCw2M30kLyxcbiAgICBob3N0bmFtZVBhcnRTdGFydCA9IC9eKFthLXowLTlBLVpfLV17MCw2M30pKC4qKSQvLFxuICAgIC8vIHByb3RvY29scyB0aGF0IGNhbiBhbGxvdyBcInVuc2FmZVwiIGFuZCBcInVud2lzZVwiIGNoYXJzLlxuICAgIHVuc2FmZVByb3RvY29sID0ge1xuICAgICAgJ2phdmFzY3JpcHQnOiB0cnVlLFxuICAgICAgJ2phdmFzY3JpcHQ6JzogdHJ1ZVxuICAgIH0sXG4gICAgLy8gcHJvdG9jb2xzIHRoYXQgbmV2ZXIgaGF2ZSBhIGhvc3RuYW1lLlxuICAgIGhvc3RsZXNzUHJvdG9jb2wgPSB7XG4gICAgICAnamF2YXNjcmlwdCc6IHRydWUsXG4gICAgICAnamF2YXNjcmlwdDonOiB0cnVlXG4gICAgfSxcbiAgICAvLyBwcm90b2NvbHMgdGhhdCBhbHdheXMgY29udGFpbiBhIC8vIGJpdC5cbiAgICBzbGFzaGVkUHJvdG9jb2wgPSB7XG4gICAgICAnaHR0cCc6IHRydWUsXG4gICAgICAnaHR0cHMnOiB0cnVlLFxuICAgICAgJ2Z0cCc6IHRydWUsXG4gICAgICAnZ29waGVyJzogdHJ1ZSxcbiAgICAgICdmaWxlJzogdHJ1ZSxcbiAgICAgICdodHRwOic6IHRydWUsXG4gICAgICAnaHR0cHM6JzogdHJ1ZSxcbiAgICAgICdmdHA6JzogdHJ1ZSxcbiAgICAgICdnb3BoZXI6JzogdHJ1ZSxcbiAgICAgICdmaWxlOic6IHRydWVcbiAgICB9LFxuICAgIHF1ZXJ5c3RyaW5nID0gcmVxdWlyZSgncXVlcnlzdHJpbmcnKTtcblxuZnVuY3Rpb24gdXJsUGFyc2UodXJsLCBwYXJzZVF1ZXJ5U3RyaW5nLCBzbGFzaGVzRGVub3RlSG9zdCkge1xuICBpZiAodXJsICYmIGlzT2JqZWN0KHVybCkgJiYgdXJsIGluc3RhbmNlb2YgVXJsKSByZXR1cm4gdXJsO1xuXG4gIHZhciB1ID0gbmV3IFVybDtcbiAgdS5wYXJzZSh1cmwsIHBhcnNlUXVlcnlTdHJpbmcsIHNsYXNoZXNEZW5vdGVIb3N0KTtcbiAgcmV0dXJuIHU7XG59XG5cblVybC5wcm90b3R5cGUucGFyc2UgPSBmdW5jdGlvbih1cmwsIHBhcnNlUXVlcnlTdHJpbmcsIHNsYXNoZXNEZW5vdGVIb3N0KSB7XG4gIGlmICghaXNTdHJpbmcodXJsKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJQYXJhbWV0ZXIgJ3VybCcgbXVzdCBiZSBhIHN0cmluZywgbm90IFwiICsgdHlwZW9mIHVybCk7XG4gIH1cblxuICB2YXIgcmVzdCA9IHVybDtcblxuICAvLyB0cmltIGJlZm9yZSBwcm9jZWVkaW5nLlxuICAvLyBUaGlzIGlzIHRvIHN1cHBvcnQgcGFyc2Ugc3R1ZmYgbGlrZSBcIiAgaHR0cDovL2Zvby5jb20gIFxcblwiXG4gIHJlc3QgPSByZXN0LnRyaW0oKTtcblxuICB2YXIgcHJvdG8gPSBwcm90b2NvbFBhdHRlcm4uZXhlYyhyZXN0KTtcbiAgaWYgKHByb3RvKSB7XG4gICAgcHJvdG8gPSBwcm90b1swXTtcbiAgICB2YXIgbG93ZXJQcm90byA9IHByb3RvLnRvTG93ZXJDYXNlKCk7XG4gICAgdGhpcy5wcm90b2NvbCA9IGxvd2VyUHJvdG87XG4gICAgcmVzdCA9IHJlc3Quc3Vic3RyKHByb3RvLmxlbmd0aCk7XG4gIH1cblxuICAvLyBmaWd1cmUgb3V0IGlmIGl0J3MgZ290IGEgaG9zdFxuICAvLyB1c2VyQHNlcnZlciBpcyAqYWx3YXlzKiBpbnRlcnByZXRlZCBhcyBhIGhvc3RuYW1lLCBhbmQgdXJsXG4gIC8vIHJlc29sdXRpb24gd2lsbCB0cmVhdCAvL2Zvby9iYXIgYXMgaG9zdD1mb28scGF0aD1iYXIgYmVjYXVzZSB0aGF0J3NcbiAgLy8gaG93IHRoZSBicm93c2VyIHJlc29sdmVzIHJlbGF0aXZlIFVSTHMuXG4gIGlmIChzbGFzaGVzRGVub3RlSG9zdCB8fCBwcm90byB8fCByZXN0Lm1hdGNoKC9eXFwvXFwvW15AXFwvXStAW15AXFwvXSsvKSkge1xuICAgIHZhciBzbGFzaGVzID0gcmVzdC5zdWJzdHIoMCwgMikgPT09ICcvLyc7XG4gICAgaWYgKHNsYXNoZXMgJiYgIShwcm90byAmJiBob3N0bGVzc1Byb3RvY29sW3Byb3RvXSkpIHtcbiAgICAgIHJlc3QgPSByZXN0LnN1YnN0cigyKTtcbiAgICAgIHRoaXMuc2xhc2hlcyA9IHRydWU7XG4gICAgfVxuICB9XG5cbiAgaWYgKCFob3N0bGVzc1Byb3RvY29sW3Byb3RvXSAmJlxuICAgICAgKHNsYXNoZXMgfHwgKHByb3RvICYmICFzbGFzaGVkUHJvdG9jb2xbcHJvdG9dKSkpIHtcblxuICAgIC8vIHRoZXJlJ3MgYSBob3N0bmFtZS5cbiAgICAvLyB0aGUgZmlyc3QgaW5zdGFuY2Ugb2YgLywgPywgOywgb3IgIyBlbmRzIHRoZSBob3N0LlxuICAgIC8vXG4gICAgLy8gSWYgdGhlcmUgaXMgYW4gQCBpbiB0aGUgaG9zdG5hbWUsIHRoZW4gbm9uLWhvc3QgY2hhcnMgKmFyZSogYWxsb3dlZFxuICAgIC8vIHRvIHRoZSBsZWZ0IG9mIHRoZSBsYXN0IEAgc2lnbiwgdW5sZXNzIHNvbWUgaG9zdC1lbmRpbmcgY2hhcmFjdGVyXG4gICAgLy8gY29tZXMgKmJlZm9yZSogdGhlIEAtc2lnbi5cbiAgICAvLyBVUkxzIGFyZSBvYm5veGlvdXMuXG4gICAgLy9cbiAgICAvLyBleDpcbiAgICAvLyBodHRwOi8vYUBiQGMvID0+IHVzZXI6YUBiIGhvc3Q6Y1xuICAgIC8vIGh0dHA6Ly9hQGI/QGMgPT4gdXNlcjphIGhvc3Q6YyBwYXRoOi8/QGNcblxuICAgIC8vIHYwLjEyIFRPRE8oaXNhYWNzKTogVGhpcyBpcyBub3QgcXVpdGUgaG93IENocm9tZSBkb2VzIHRoaW5ncy5cbiAgICAvLyBSZXZpZXcgb3VyIHRlc3QgY2FzZSBhZ2FpbnN0IGJyb3dzZXJzIG1vcmUgY29tcHJlaGVuc2l2ZWx5LlxuXG4gICAgLy8gZmluZCB0aGUgZmlyc3QgaW5zdGFuY2Ugb2YgYW55IGhvc3RFbmRpbmdDaGFyc1xuICAgIHZhciBob3N0RW5kID0gLTE7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBob3N0RW5kaW5nQ2hhcnMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBoZWMgPSByZXN0LmluZGV4T2YoaG9zdEVuZGluZ0NoYXJzW2ldKTtcbiAgICAgIGlmIChoZWMgIT09IC0xICYmIChob3N0RW5kID09PSAtMSB8fCBoZWMgPCBob3N0RW5kKSlcbiAgICAgICAgaG9zdEVuZCA9IGhlYztcbiAgICB9XG5cbiAgICAvLyBhdCB0aGlzIHBvaW50LCBlaXRoZXIgd2UgaGF2ZSBhbiBleHBsaWNpdCBwb2ludCB3aGVyZSB0aGVcbiAgICAvLyBhdXRoIHBvcnRpb24gY2Fubm90IGdvIHBhc3QsIG9yIHRoZSBsYXN0IEAgY2hhciBpcyB0aGUgZGVjaWRlci5cbiAgICB2YXIgYXV0aCwgYXRTaWduO1xuICAgIGlmIChob3N0RW5kID09PSAtMSkge1xuICAgICAgLy8gYXRTaWduIGNhbiBiZSBhbnl3aGVyZS5cbiAgICAgIGF0U2lnbiA9IHJlc3QubGFzdEluZGV4T2YoJ0AnKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gYXRTaWduIG11c3QgYmUgaW4gYXV0aCBwb3J0aW9uLlxuICAgICAgLy8gaHR0cDovL2FAYi9jQGQgPT4gaG9zdDpiIGF1dGg6YSBwYXRoOi9jQGRcbiAgICAgIGF0U2lnbiA9IHJlc3QubGFzdEluZGV4T2YoJ0AnLCBob3N0RW5kKTtcbiAgICB9XG5cbiAgICAvLyBOb3cgd2UgaGF2ZSBhIHBvcnRpb24gd2hpY2ggaXMgZGVmaW5pdGVseSB0aGUgYXV0aC5cbiAgICAvLyBQdWxsIHRoYXQgb2ZmLlxuICAgIGlmIChhdFNpZ24gIT09IC0xKSB7XG4gICAgICBhdXRoID0gcmVzdC5zbGljZSgwLCBhdFNpZ24pO1xuICAgICAgcmVzdCA9IHJlc3Quc2xpY2UoYXRTaWduICsgMSk7XG4gICAgICB0aGlzLmF1dGggPSBkZWNvZGVVUklDb21wb25lbnQoYXV0aCk7XG4gICAgfVxuXG4gICAgLy8gdGhlIGhvc3QgaXMgdGhlIHJlbWFpbmluZyB0byB0aGUgbGVmdCBvZiB0aGUgZmlyc3Qgbm9uLWhvc3QgY2hhclxuICAgIGhvc3RFbmQgPSAtMTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG5vbkhvc3RDaGFycy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGhlYyA9IHJlc3QuaW5kZXhPZihub25Ib3N0Q2hhcnNbaV0pO1xuICAgICAgaWYgKGhlYyAhPT0gLTEgJiYgKGhvc3RFbmQgPT09IC0xIHx8IGhlYyA8IGhvc3RFbmQpKVxuICAgICAgICBob3N0RW5kID0gaGVjO1xuICAgIH1cbiAgICAvLyBpZiB3ZSBzdGlsbCBoYXZlIG5vdCBoaXQgaXQsIHRoZW4gdGhlIGVudGlyZSB0aGluZyBpcyBhIGhvc3QuXG4gICAgaWYgKGhvc3RFbmQgPT09IC0xKVxuICAgICAgaG9zdEVuZCA9IHJlc3QubGVuZ3RoO1xuXG4gICAgdGhpcy5ob3N0ID0gcmVzdC5zbGljZSgwLCBob3N0RW5kKTtcbiAgICByZXN0ID0gcmVzdC5zbGljZShob3N0RW5kKTtcblxuICAgIC8vIHB1bGwgb3V0IHBvcnQuXG4gICAgdGhpcy5wYXJzZUhvc3QoKTtcblxuICAgIC8vIHdlJ3ZlIGluZGljYXRlZCB0aGF0IHRoZXJlIGlzIGEgaG9zdG5hbWUsXG4gICAgLy8gc28gZXZlbiBpZiBpdCdzIGVtcHR5LCBpdCBoYXMgdG8gYmUgcHJlc2VudC5cbiAgICB0aGlzLmhvc3RuYW1lID0gdGhpcy5ob3N0bmFtZSB8fCAnJztcblxuICAgIC8vIGlmIGhvc3RuYW1lIGJlZ2lucyB3aXRoIFsgYW5kIGVuZHMgd2l0aCBdXG4gICAgLy8gYXNzdW1lIHRoYXQgaXQncyBhbiBJUHY2IGFkZHJlc3MuXG4gICAgdmFyIGlwdjZIb3N0bmFtZSA9IHRoaXMuaG9zdG5hbWVbMF0gPT09ICdbJyAmJlxuICAgICAgICB0aGlzLmhvc3RuYW1lW3RoaXMuaG9zdG5hbWUubGVuZ3RoIC0gMV0gPT09ICddJztcblxuICAgIC8vIHZhbGlkYXRlIGEgbGl0dGxlLlxuICAgIGlmICghaXB2Nkhvc3RuYW1lKSB7XG4gICAgICB2YXIgaG9zdHBhcnRzID0gdGhpcy5ob3N0bmFtZS5zcGxpdCgvXFwuLyk7XG4gICAgICBmb3IgKHZhciBpID0gMCwgbCA9IGhvc3RwYXJ0cy5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICAgICAgdmFyIHBhcnQgPSBob3N0cGFydHNbaV07XG4gICAgICAgIGlmICghcGFydCkgY29udGludWU7XG4gICAgICAgIGlmICghcGFydC5tYXRjaChob3N0bmFtZVBhcnRQYXR0ZXJuKSkge1xuICAgICAgICAgIHZhciBuZXdwYXJ0ID0gJyc7XG4gICAgICAgICAgZm9yICh2YXIgaiA9IDAsIGsgPSBwYXJ0Lmxlbmd0aDsgaiA8IGs7IGorKykge1xuICAgICAgICAgICAgaWYgKHBhcnQuY2hhckNvZGVBdChqKSA+IDEyNykge1xuICAgICAgICAgICAgICAvLyB3ZSByZXBsYWNlIG5vbi1BU0NJSSBjaGFyIHdpdGggYSB0ZW1wb3JhcnkgcGxhY2Vob2xkZXJcbiAgICAgICAgICAgICAgLy8gd2UgbmVlZCB0aGlzIHRvIG1ha2Ugc3VyZSBzaXplIG9mIGhvc3RuYW1lIGlzIG5vdFxuICAgICAgICAgICAgICAvLyBicm9rZW4gYnkgcmVwbGFjaW5nIG5vbi1BU0NJSSBieSBub3RoaW5nXG4gICAgICAgICAgICAgIG5ld3BhcnQgKz0gJ3gnO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgbmV3cGFydCArPSBwYXJ0W2pdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICAvLyB3ZSB0ZXN0IGFnYWluIHdpdGggQVNDSUkgY2hhciBvbmx5XG4gICAgICAgICAgaWYgKCFuZXdwYXJ0Lm1hdGNoKGhvc3RuYW1lUGFydFBhdHRlcm4pKSB7XG4gICAgICAgICAgICB2YXIgdmFsaWRQYXJ0cyA9IGhvc3RwYXJ0cy5zbGljZSgwLCBpKTtcbiAgICAgICAgICAgIHZhciBub3RIb3N0ID0gaG9zdHBhcnRzLnNsaWNlKGkgKyAxKTtcbiAgICAgICAgICAgIHZhciBiaXQgPSBwYXJ0Lm1hdGNoKGhvc3RuYW1lUGFydFN0YXJ0KTtcbiAgICAgICAgICAgIGlmIChiaXQpIHtcbiAgICAgICAgICAgICAgdmFsaWRQYXJ0cy5wdXNoKGJpdFsxXSk7XG4gICAgICAgICAgICAgIG5vdEhvc3QudW5zaGlmdChiaXRbMl0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKG5vdEhvc3QubGVuZ3RoKSB7XG4gICAgICAgICAgICAgIHJlc3QgPSAnLycgKyBub3RIb3N0LmpvaW4oJy4nKSArIHJlc3Q7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmhvc3RuYW1lID0gdmFsaWRQYXJ0cy5qb2luKCcuJyk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodGhpcy5ob3N0bmFtZS5sZW5ndGggPiBob3N0bmFtZU1heExlbikge1xuICAgICAgdGhpcy5ob3N0bmFtZSA9ICcnO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBob3N0bmFtZXMgYXJlIGFsd2F5cyBsb3dlciBjYXNlLlxuICAgICAgdGhpcy5ob3N0bmFtZSA9IHRoaXMuaG9zdG5hbWUudG9Mb3dlckNhc2UoKTtcbiAgICB9XG5cbiAgICBpZiAoIWlwdjZIb3N0bmFtZSkge1xuICAgICAgLy8gSUROQSBTdXBwb3J0OiBSZXR1cm5zIGEgcHVueSBjb2RlZCByZXByZXNlbnRhdGlvbiBvZiBcImRvbWFpblwiLlxuICAgICAgLy8gSXQgb25seSBjb252ZXJ0cyB0aGUgcGFydCBvZiB0aGUgZG9tYWluIG5hbWUgdGhhdFxuICAgICAgLy8gaGFzIG5vbiBBU0NJSSBjaGFyYWN0ZXJzLiBJLmUuIGl0IGRvc2VudCBtYXR0ZXIgaWZcbiAgICAgIC8vIHlvdSBjYWxsIGl0IHdpdGggYSBkb21haW4gdGhhdCBhbHJlYWR5IGlzIGluIEFTQ0lJLlxuICAgICAgdmFyIGRvbWFpbkFycmF5ID0gdGhpcy5ob3N0bmFtZS5zcGxpdCgnLicpO1xuICAgICAgdmFyIG5ld091dCA9IFtdO1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBkb21haW5BcnJheS5sZW5ndGg7ICsraSkge1xuICAgICAgICB2YXIgcyA9IGRvbWFpbkFycmF5W2ldO1xuICAgICAgICBuZXdPdXQucHVzaChzLm1hdGNoKC9bXkEtWmEtejAtOV8tXS8pID9cbiAgICAgICAgICAgICd4bi0tJyArIHB1bnljb2RlLmVuY29kZShzKSA6IHMpO1xuICAgICAgfVxuICAgICAgdGhpcy5ob3N0bmFtZSA9IG5ld091dC5qb2luKCcuJyk7XG4gICAgfVxuXG4gICAgdmFyIHAgPSB0aGlzLnBvcnQgPyAnOicgKyB0aGlzLnBvcnQgOiAnJztcbiAgICB2YXIgaCA9IHRoaXMuaG9zdG5hbWUgfHwgJyc7XG4gICAgdGhpcy5ob3N0ID0gaCArIHA7XG4gICAgdGhpcy5ocmVmICs9IHRoaXMuaG9zdDtcblxuICAgIC8vIHN0cmlwIFsgYW5kIF0gZnJvbSB0aGUgaG9zdG5hbWVcbiAgICAvLyB0aGUgaG9zdCBmaWVsZCBzdGlsbCByZXRhaW5zIHRoZW0sIHRob3VnaFxuICAgIGlmIChpcHY2SG9zdG5hbWUpIHtcbiAgICAgIHRoaXMuaG9zdG5hbWUgPSB0aGlzLmhvc3RuYW1lLnN1YnN0cigxLCB0aGlzLmhvc3RuYW1lLmxlbmd0aCAtIDIpO1xuICAgICAgaWYgKHJlc3RbMF0gIT09ICcvJykge1xuICAgICAgICByZXN0ID0gJy8nICsgcmVzdDtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyBub3cgcmVzdCBpcyBzZXQgdG8gdGhlIHBvc3QtaG9zdCBzdHVmZi5cbiAgLy8gY2hvcCBvZmYgYW55IGRlbGltIGNoYXJzLlxuICBpZiAoIXVuc2FmZVByb3RvY29sW2xvd2VyUHJvdG9dKSB7XG5cbiAgICAvLyBGaXJzdCwgbWFrZSAxMDAlIHN1cmUgdGhhdCBhbnkgXCJhdXRvRXNjYXBlXCIgY2hhcnMgZ2V0XG4gICAgLy8gZXNjYXBlZCwgZXZlbiBpZiBlbmNvZGVVUklDb21wb25lbnQgZG9lc24ndCB0aGluayB0aGV5XG4gICAgLy8gbmVlZCB0byBiZS5cbiAgICBmb3IgKHZhciBpID0gMCwgbCA9IGF1dG9Fc2NhcGUubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgICB2YXIgYWUgPSBhdXRvRXNjYXBlW2ldO1xuICAgICAgdmFyIGVzYyA9IGVuY29kZVVSSUNvbXBvbmVudChhZSk7XG4gICAgICBpZiAoZXNjID09PSBhZSkge1xuICAgICAgICBlc2MgPSBlc2NhcGUoYWUpO1xuICAgICAgfVxuICAgICAgcmVzdCA9IHJlc3Quc3BsaXQoYWUpLmpvaW4oZXNjKTtcbiAgICB9XG4gIH1cblxuXG4gIC8vIGNob3Agb2ZmIGZyb20gdGhlIHRhaWwgZmlyc3QuXG4gIHZhciBoYXNoID0gcmVzdC5pbmRleE9mKCcjJyk7XG4gIGlmIChoYXNoICE9PSAtMSkge1xuICAgIC8vIGdvdCBhIGZyYWdtZW50IHN0cmluZy5cbiAgICB0aGlzLmhhc2ggPSByZXN0LnN1YnN0cihoYXNoKTtcbiAgICByZXN0ID0gcmVzdC5zbGljZSgwLCBoYXNoKTtcbiAgfVxuICB2YXIgcW0gPSByZXN0LmluZGV4T2YoJz8nKTtcbiAgaWYgKHFtICE9PSAtMSkge1xuICAgIHRoaXMuc2VhcmNoID0gcmVzdC5zdWJzdHIocW0pO1xuICAgIHRoaXMucXVlcnkgPSByZXN0LnN1YnN0cihxbSArIDEpO1xuICAgIGlmIChwYXJzZVF1ZXJ5U3RyaW5nKSB7XG4gICAgICB0aGlzLnF1ZXJ5ID0gcXVlcnlzdHJpbmcucGFyc2UodGhpcy5xdWVyeSk7XG4gICAgfVxuICAgIHJlc3QgPSByZXN0LnNsaWNlKDAsIHFtKTtcbiAgfSBlbHNlIGlmIChwYXJzZVF1ZXJ5U3RyaW5nKSB7XG4gICAgLy8gbm8gcXVlcnkgc3RyaW5nLCBidXQgcGFyc2VRdWVyeVN0cmluZyBzdGlsbCByZXF1ZXN0ZWRcbiAgICB0aGlzLnNlYXJjaCA9ICcnO1xuICAgIHRoaXMucXVlcnkgPSB7fTtcbiAgfVxuICBpZiAocmVzdCkgdGhpcy5wYXRobmFtZSA9IHJlc3Q7XG4gIGlmIChzbGFzaGVkUHJvdG9jb2xbbG93ZXJQcm90b10gJiZcbiAgICAgIHRoaXMuaG9zdG5hbWUgJiYgIXRoaXMucGF0aG5hbWUpIHtcbiAgICB0aGlzLnBhdGhuYW1lID0gJy8nO1xuICB9XG5cbiAgLy90byBzdXBwb3J0IGh0dHAucmVxdWVzdFxuICBpZiAodGhpcy5wYXRobmFtZSB8fCB0aGlzLnNlYXJjaCkge1xuICAgIHZhciBwID0gdGhpcy5wYXRobmFtZSB8fCAnJztcbiAgICB2YXIgcyA9IHRoaXMuc2VhcmNoIHx8ICcnO1xuICAgIHRoaXMucGF0aCA9IHAgKyBzO1xuICB9XG5cbiAgLy8gZmluYWxseSwgcmVjb25zdHJ1Y3QgdGhlIGhyZWYgYmFzZWQgb24gd2hhdCBoYXMgYmVlbiB2YWxpZGF0ZWQuXG4gIHRoaXMuaHJlZiA9IHRoaXMuZm9ybWF0KCk7XG4gIHJldHVybiB0aGlzO1xufTtcblxuLy8gZm9ybWF0IGEgcGFyc2VkIG9iamVjdCBpbnRvIGEgdXJsIHN0cmluZ1xuZnVuY3Rpb24gdXJsRm9ybWF0KG9iaikge1xuICAvLyBlbnN1cmUgaXQncyBhbiBvYmplY3QsIGFuZCBub3QgYSBzdHJpbmcgdXJsLlxuICAvLyBJZiBpdCdzIGFuIG9iaiwgdGhpcyBpcyBhIG5vLW9wLlxuICAvLyB0aGlzIHdheSwgeW91IGNhbiBjYWxsIHVybF9mb3JtYXQoKSBvbiBzdHJpbmdzXG4gIC8vIHRvIGNsZWFuIHVwIHBvdGVudGlhbGx5IHdvbmt5IHVybHMuXG4gIGlmIChpc1N0cmluZyhvYmopKSBvYmogPSB1cmxQYXJzZShvYmopO1xuICBpZiAoIShvYmogaW5zdGFuY2VvZiBVcmwpKSByZXR1cm4gVXJsLnByb3RvdHlwZS5mb3JtYXQuY2FsbChvYmopO1xuICByZXR1cm4gb2JqLmZvcm1hdCgpO1xufVxuXG5VcmwucHJvdG90eXBlLmZvcm1hdCA9IGZ1bmN0aW9uKCkge1xuICB2YXIgYXV0aCA9IHRoaXMuYXV0aCB8fCAnJztcbiAgaWYgKGF1dGgpIHtcbiAgICBhdXRoID0gZW5jb2RlVVJJQ29tcG9uZW50KGF1dGgpO1xuICAgIGF1dGggPSBhdXRoLnJlcGxhY2UoLyUzQS9pLCAnOicpO1xuICAgIGF1dGggKz0gJ0AnO1xuICB9XG5cbiAgdmFyIHByb3RvY29sID0gdGhpcy5wcm90b2NvbCB8fCAnJyxcbiAgICAgIHBhdGhuYW1lID0gdGhpcy5wYXRobmFtZSB8fCAnJyxcbiAgICAgIGhhc2ggPSB0aGlzLmhhc2ggfHwgJycsXG4gICAgICBob3N0ID0gZmFsc2UsXG4gICAgICBxdWVyeSA9ICcnO1xuXG4gIGlmICh0aGlzLmhvc3QpIHtcbiAgICBob3N0ID0gYXV0aCArIHRoaXMuaG9zdDtcbiAgfSBlbHNlIGlmICh0aGlzLmhvc3RuYW1lKSB7XG4gICAgaG9zdCA9IGF1dGggKyAodGhpcy5ob3N0bmFtZS5pbmRleE9mKCc6JykgPT09IC0xID9cbiAgICAgICAgdGhpcy5ob3N0bmFtZSA6XG4gICAgICAgICdbJyArIHRoaXMuaG9zdG5hbWUgKyAnXScpO1xuICAgIGlmICh0aGlzLnBvcnQpIHtcbiAgICAgIGhvc3QgKz0gJzonICsgdGhpcy5wb3J0O1xuICAgIH1cbiAgfVxuXG4gIGlmICh0aGlzLnF1ZXJ5ICYmXG4gICAgICBpc09iamVjdCh0aGlzLnF1ZXJ5KSAmJlxuICAgICAgT2JqZWN0LmtleXModGhpcy5xdWVyeSkubGVuZ3RoKSB7XG4gICAgcXVlcnkgPSBxdWVyeXN0cmluZy5zdHJpbmdpZnkodGhpcy5xdWVyeSk7XG4gIH1cblxuICB2YXIgc2VhcmNoID0gdGhpcy5zZWFyY2ggfHwgKHF1ZXJ5ICYmICgnPycgKyBxdWVyeSkpIHx8ICcnO1xuXG4gIGlmIChwcm90b2NvbCAmJiBwcm90b2NvbC5zdWJzdHIoLTEpICE9PSAnOicpIHByb3RvY29sICs9ICc6JztcblxuICAvLyBvbmx5IHRoZSBzbGFzaGVkUHJvdG9jb2xzIGdldCB0aGUgLy8uICBOb3QgbWFpbHRvOiwgeG1wcDosIGV0Yy5cbiAgLy8gdW5sZXNzIHRoZXkgaGFkIHRoZW0gdG8gYmVnaW4gd2l0aC5cbiAgaWYgKHRoaXMuc2xhc2hlcyB8fFxuICAgICAgKCFwcm90b2NvbCB8fCBzbGFzaGVkUHJvdG9jb2xbcHJvdG9jb2xdKSAmJiBob3N0ICE9PSBmYWxzZSkge1xuICAgIGhvc3QgPSAnLy8nICsgKGhvc3QgfHwgJycpO1xuICAgIGlmIChwYXRobmFtZSAmJiBwYXRobmFtZS5jaGFyQXQoMCkgIT09ICcvJykgcGF0aG5hbWUgPSAnLycgKyBwYXRobmFtZTtcbiAgfSBlbHNlIGlmICghaG9zdCkge1xuICAgIGhvc3QgPSAnJztcbiAgfVxuXG4gIGlmIChoYXNoICYmIGhhc2guY2hhckF0KDApICE9PSAnIycpIGhhc2ggPSAnIycgKyBoYXNoO1xuICBpZiAoc2VhcmNoICYmIHNlYXJjaC5jaGFyQXQoMCkgIT09ICc/Jykgc2VhcmNoID0gJz8nICsgc2VhcmNoO1xuXG4gIHBhdGhuYW1lID0gcGF0aG5hbWUucmVwbGFjZSgvWz8jXS9nLCBmdW5jdGlvbihtYXRjaCkge1xuICAgIHJldHVybiBlbmNvZGVVUklDb21wb25lbnQobWF0Y2gpO1xuICB9KTtcbiAgc2VhcmNoID0gc2VhcmNoLnJlcGxhY2UoJyMnLCAnJTIzJyk7XG5cbiAgcmV0dXJuIHByb3RvY29sICsgaG9zdCArIHBhdGhuYW1lICsgc2VhcmNoICsgaGFzaDtcbn07XG5cbmZ1bmN0aW9uIHVybFJlc29sdmUoc291cmNlLCByZWxhdGl2ZSkge1xuICByZXR1cm4gdXJsUGFyc2Uoc291cmNlLCBmYWxzZSwgdHJ1ZSkucmVzb2x2ZShyZWxhdGl2ZSk7XG59XG5cblVybC5wcm90b3R5cGUucmVzb2x2ZSA9IGZ1bmN0aW9uKHJlbGF0aXZlKSB7XG4gIHJldHVybiB0aGlzLnJlc29sdmVPYmplY3QodXJsUGFyc2UocmVsYXRpdmUsIGZhbHNlLCB0cnVlKSkuZm9ybWF0KCk7XG59O1xuXG5mdW5jdGlvbiB1cmxSZXNvbHZlT2JqZWN0KHNvdXJjZSwgcmVsYXRpdmUpIHtcbiAgaWYgKCFzb3VyY2UpIHJldHVybiByZWxhdGl2ZTtcbiAgcmV0dXJuIHVybFBhcnNlKHNvdXJjZSwgZmFsc2UsIHRydWUpLnJlc29sdmVPYmplY3QocmVsYXRpdmUpO1xufVxuXG5VcmwucHJvdG90eXBlLnJlc29sdmVPYmplY3QgPSBmdW5jdGlvbihyZWxhdGl2ZSkge1xuICBpZiAoaXNTdHJpbmcocmVsYXRpdmUpKSB7XG4gICAgdmFyIHJlbCA9IG5ldyBVcmwoKTtcbiAgICByZWwucGFyc2UocmVsYXRpdmUsIGZhbHNlLCB0cnVlKTtcbiAgICByZWxhdGl2ZSA9IHJlbDtcbiAgfVxuXG4gIHZhciByZXN1bHQgPSBuZXcgVXJsKCk7XG4gIE9iamVjdC5rZXlzKHRoaXMpLmZvckVhY2goZnVuY3Rpb24oaykge1xuICAgIHJlc3VsdFtrXSA9IHRoaXNba107XG4gIH0sIHRoaXMpO1xuXG4gIC8vIGhhc2ggaXMgYWx3YXlzIG92ZXJyaWRkZW4sIG5vIG1hdHRlciB3aGF0LlxuICAvLyBldmVuIGhyZWY9XCJcIiB3aWxsIHJlbW92ZSBpdC5cbiAgcmVzdWx0Lmhhc2ggPSByZWxhdGl2ZS5oYXNoO1xuXG4gIC8vIGlmIHRoZSByZWxhdGl2ZSB1cmwgaXMgZW1wdHksIHRoZW4gdGhlcmUncyBub3RoaW5nIGxlZnQgdG8gZG8gaGVyZS5cbiAgaWYgKHJlbGF0aXZlLmhyZWYgPT09ICcnKSB7XG4gICAgcmVzdWx0LmhyZWYgPSByZXN1bHQuZm9ybWF0KCk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIC8vIGhyZWZzIGxpa2UgLy9mb28vYmFyIGFsd2F5cyBjdXQgdG8gdGhlIHByb3RvY29sLlxuICBpZiAocmVsYXRpdmUuc2xhc2hlcyAmJiAhcmVsYXRpdmUucHJvdG9jb2wpIHtcbiAgICAvLyB0YWtlIGV2ZXJ5dGhpbmcgZXhjZXB0IHRoZSBwcm90b2NvbCBmcm9tIHJlbGF0aXZlXG4gICAgT2JqZWN0LmtleXMocmVsYXRpdmUpLmZvckVhY2goZnVuY3Rpb24oaykge1xuICAgICAgaWYgKGsgIT09ICdwcm90b2NvbCcpXG4gICAgICAgIHJlc3VsdFtrXSA9IHJlbGF0aXZlW2tdO1xuICAgIH0pO1xuXG4gICAgLy91cmxQYXJzZSBhcHBlbmRzIHRyYWlsaW5nIC8gdG8gdXJscyBsaWtlIGh0dHA6Ly93d3cuZXhhbXBsZS5jb21cbiAgICBpZiAoc2xhc2hlZFByb3RvY29sW3Jlc3VsdC5wcm90b2NvbF0gJiZcbiAgICAgICAgcmVzdWx0Lmhvc3RuYW1lICYmICFyZXN1bHQucGF0aG5hbWUpIHtcbiAgICAgIHJlc3VsdC5wYXRoID0gcmVzdWx0LnBhdGhuYW1lID0gJy8nO1xuICAgIH1cblxuICAgIHJlc3VsdC5ocmVmID0gcmVzdWx0LmZvcm1hdCgpO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICBpZiAocmVsYXRpdmUucHJvdG9jb2wgJiYgcmVsYXRpdmUucHJvdG9jb2wgIT09IHJlc3VsdC5wcm90b2NvbCkge1xuICAgIC8vIGlmIGl0J3MgYSBrbm93biB1cmwgcHJvdG9jb2wsIHRoZW4gY2hhbmdpbmdcbiAgICAvLyB0aGUgcHJvdG9jb2wgZG9lcyB3ZWlyZCB0aGluZ3NcbiAgICAvLyBmaXJzdCwgaWYgaXQncyBub3QgZmlsZTosIHRoZW4gd2UgTVVTVCBoYXZlIGEgaG9zdCxcbiAgICAvLyBhbmQgaWYgdGhlcmUgd2FzIGEgcGF0aFxuICAgIC8vIHRvIGJlZ2luIHdpdGgsIHRoZW4gd2UgTVVTVCBoYXZlIGEgcGF0aC5cbiAgICAvLyBpZiBpdCBpcyBmaWxlOiwgdGhlbiB0aGUgaG9zdCBpcyBkcm9wcGVkLFxuICAgIC8vIGJlY2F1c2UgdGhhdCdzIGtub3duIHRvIGJlIGhvc3RsZXNzLlxuICAgIC8vIGFueXRoaW5nIGVsc2UgaXMgYXNzdW1lZCB0byBiZSBhYnNvbHV0ZS5cbiAgICBpZiAoIXNsYXNoZWRQcm90b2NvbFtyZWxhdGl2ZS5wcm90b2NvbF0pIHtcbiAgICAgIE9iamVjdC5rZXlzKHJlbGF0aXZlKS5mb3JFYWNoKGZ1bmN0aW9uKGspIHtcbiAgICAgICAgcmVzdWx0W2tdID0gcmVsYXRpdmVba107XG4gICAgICB9KTtcbiAgICAgIHJlc3VsdC5ocmVmID0gcmVzdWx0LmZvcm1hdCgpO1xuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICByZXN1bHQucHJvdG9jb2wgPSByZWxhdGl2ZS5wcm90b2NvbDtcbiAgICBpZiAoIXJlbGF0aXZlLmhvc3QgJiYgIWhvc3RsZXNzUHJvdG9jb2xbcmVsYXRpdmUucHJvdG9jb2xdKSB7XG4gICAgICB2YXIgcmVsUGF0aCA9IChyZWxhdGl2ZS5wYXRobmFtZSB8fCAnJykuc3BsaXQoJy8nKTtcbiAgICAgIHdoaWxlIChyZWxQYXRoLmxlbmd0aCAmJiAhKHJlbGF0aXZlLmhvc3QgPSByZWxQYXRoLnNoaWZ0KCkpKTtcbiAgICAgIGlmICghcmVsYXRpdmUuaG9zdCkgcmVsYXRpdmUuaG9zdCA9ICcnO1xuICAgICAgaWYgKCFyZWxhdGl2ZS5ob3N0bmFtZSkgcmVsYXRpdmUuaG9zdG5hbWUgPSAnJztcbiAgICAgIGlmIChyZWxQYXRoWzBdICE9PSAnJykgcmVsUGF0aC51bnNoaWZ0KCcnKTtcbiAgICAgIGlmIChyZWxQYXRoLmxlbmd0aCA8IDIpIHJlbFBhdGgudW5zaGlmdCgnJyk7XG4gICAgICByZXN1bHQucGF0aG5hbWUgPSByZWxQYXRoLmpvaW4oJy8nKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmVzdWx0LnBhdGhuYW1lID0gcmVsYXRpdmUucGF0aG5hbWU7XG4gICAgfVxuICAgIHJlc3VsdC5zZWFyY2ggPSByZWxhdGl2ZS5zZWFyY2g7XG4gICAgcmVzdWx0LnF1ZXJ5ID0gcmVsYXRpdmUucXVlcnk7XG4gICAgcmVzdWx0Lmhvc3QgPSByZWxhdGl2ZS5ob3N0IHx8ICcnO1xuICAgIHJlc3VsdC5hdXRoID0gcmVsYXRpdmUuYXV0aDtcbiAgICByZXN1bHQuaG9zdG5hbWUgPSByZWxhdGl2ZS5ob3N0bmFtZSB8fCByZWxhdGl2ZS5ob3N0O1xuICAgIHJlc3VsdC5wb3J0ID0gcmVsYXRpdmUucG9ydDtcbiAgICAvLyB0byBzdXBwb3J0IGh0dHAucmVxdWVzdFxuICAgIGlmIChyZXN1bHQucGF0aG5hbWUgfHwgcmVzdWx0LnNlYXJjaCkge1xuICAgICAgdmFyIHAgPSByZXN1bHQucGF0aG5hbWUgfHwgJyc7XG4gICAgICB2YXIgcyA9IHJlc3VsdC5zZWFyY2ggfHwgJyc7XG4gICAgICByZXN1bHQucGF0aCA9IHAgKyBzO1xuICAgIH1cbiAgICByZXN1bHQuc2xhc2hlcyA9IHJlc3VsdC5zbGFzaGVzIHx8IHJlbGF0aXZlLnNsYXNoZXM7XG4gICAgcmVzdWx0LmhyZWYgPSByZXN1bHQuZm9ybWF0KCk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIHZhciBpc1NvdXJjZUFicyA9IChyZXN1bHQucGF0aG5hbWUgJiYgcmVzdWx0LnBhdGhuYW1lLmNoYXJBdCgwKSA9PT0gJy8nKSxcbiAgICAgIGlzUmVsQWJzID0gKFxuICAgICAgICAgIHJlbGF0aXZlLmhvc3QgfHxcbiAgICAgICAgICByZWxhdGl2ZS5wYXRobmFtZSAmJiByZWxhdGl2ZS5wYXRobmFtZS5jaGFyQXQoMCkgPT09ICcvJ1xuICAgICAgKSxcbiAgICAgIG11c3RFbmRBYnMgPSAoaXNSZWxBYnMgfHwgaXNTb3VyY2VBYnMgfHxcbiAgICAgICAgICAgICAgICAgICAgKHJlc3VsdC5ob3N0ICYmIHJlbGF0aXZlLnBhdGhuYW1lKSksXG4gICAgICByZW1vdmVBbGxEb3RzID0gbXVzdEVuZEFicyxcbiAgICAgIHNyY1BhdGggPSByZXN1bHQucGF0aG5hbWUgJiYgcmVzdWx0LnBhdGhuYW1lLnNwbGl0KCcvJykgfHwgW10sXG4gICAgICByZWxQYXRoID0gcmVsYXRpdmUucGF0aG5hbWUgJiYgcmVsYXRpdmUucGF0aG5hbWUuc3BsaXQoJy8nKSB8fCBbXSxcbiAgICAgIHBzeWNob3RpYyA9IHJlc3VsdC5wcm90b2NvbCAmJiAhc2xhc2hlZFByb3RvY29sW3Jlc3VsdC5wcm90b2NvbF07XG5cbiAgLy8gaWYgdGhlIHVybCBpcyBhIG5vbi1zbGFzaGVkIHVybCwgdGhlbiByZWxhdGl2ZVxuICAvLyBsaW5rcyBsaWtlIC4uLy4uIHNob3VsZCBiZSBhYmxlXG4gIC8vIHRvIGNyYXdsIHVwIHRvIHRoZSBob3N0bmFtZSwgYXMgd2VsbC4gIFRoaXMgaXMgc3RyYW5nZS5cbiAgLy8gcmVzdWx0LnByb3RvY29sIGhhcyBhbHJlYWR5IGJlZW4gc2V0IGJ5IG5vdy5cbiAgLy8gTGF0ZXIgb24sIHB1dCB0aGUgZmlyc3QgcGF0aCBwYXJ0IGludG8gdGhlIGhvc3QgZmllbGQuXG4gIGlmIChwc3ljaG90aWMpIHtcbiAgICByZXN1bHQuaG9zdG5hbWUgPSAnJztcbiAgICByZXN1bHQucG9ydCA9IG51bGw7XG4gICAgaWYgKHJlc3VsdC5ob3N0KSB7XG4gICAgICBpZiAoc3JjUGF0aFswXSA9PT0gJycpIHNyY1BhdGhbMF0gPSByZXN1bHQuaG9zdDtcbiAgICAgIGVsc2Ugc3JjUGF0aC51bnNoaWZ0KHJlc3VsdC5ob3N0KTtcbiAgICB9XG4gICAgcmVzdWx0Lmhvc3QgPSAnJztcbiAgICBpZiAocmVsYXRpdmUucHJvdG9jb2wpIHtcbiAgICAgIHJlbGF0aXZlLmhvc3RuYW1lID0gbnVsbDtcbiAgICAgIHJlbGF0aXZlLnBvcnQgPSBudWxsO1xuICAgICAgaWYgKHJlbGF0aXZlLmhvc3QpIHtcbiAgICAgICAgaWYgKHJlbFBhdGhbMF0gPT09ICcnKSByZWxQYXRoWzBdID0gcmVsYXRpdmUuaG9zdDtcbiAgICAgICAgZWxzZSByZWxQYXRoLnVuc2hpZnQocmVsYXRpdmUuaG9zdCk7XG4gICAgICB9XG4gICAgICByZWxhdGl2ZS5ob3N0ID0gbnVsbDtcbiAgICB9XG4gICAgbXVzdEVuZEFicyA9IG11c3RFbmRBYnMgJiYgKHJlbFBhdGhbMF0gPT09ICcnIHx8IHNyY1BhdGhbMF0gPT09ICcnKTtcbiAgfVxuXG4gIGlmIChpc1JlbEFicykge1xuICAgIC8vIGl0J3MgYWJzb2x1dGUuXG4gICAgcmVzdWx0Lmhvc3QgPSAocmVsYXRpdmUuaG9zdCB8fCByZWxhdGl2ZS5ob3N0ID09PSAnJykgP1xuICAgICAgICAgICAgICAgICAgcmVsYXRpdmUuaG9zdCA6IHJlc3VsdC5ob3N0O1xuICAgIHJlc3VsdC5ob3N0bmFtZSA9IChyZWxhdGl2ZS5ob3N0bmFtZSB8fCByZWxhdGl2ZS5ob3N0bmFtZSA9PT0gJycpID9cbiAgICAgICAgICAgICAgICAgICAgICByZWxhdGl2ZS5ob3N0bmFtZSA6IHJlc3VsdC5ob3N0bmFtZTtcbiAgICByZXN1bHQuc2VhcmNoID0gcmVsYXRpdmUuc2VhcmNoO1xuICAgIHJlc3VsdC5xdWVyeSA9IHJlbGF0aXZlLnF1ZXJ5O1xuICAgIHNyY1BhdGggPSByZWxQYXRoO1xuICAgIC8vIGZhbGwgdGhyb3VnaCB0byB0aGUgZG90LWhhbmRsaW5nIGJlbG93LlxuICB9IGVsc2UgaWYgKHJlbFBhdGgubGVuZ3RoKSB7XG4gICAgLy8gaXQncyByZWxhdGl2ZVxuICAgIC8vIHRocm93IGF3YXkgdGhlIGV4aXN0aW5nIGZpbGUsIGFuZCB0YWtlIHRoZSBuZXcgcGF0aCBpbnN0ZWFkLlxuICAgIGlmICghc3JjUGF0aCkgc3JjUGF0aCA9IFtdO1xuICAgIHNyY1BhdGgucG9wKCk7XG4gICAgc3JjUGF0aCA9IHNyY1BhdGguY29uY2F0KHJlbFBhdGgpO1xuICAgIHJlc3VsdC5zZWFyY2ggPSByZWxhdGl2ZS5zZWFyY2g7XG4gICAgcmVzdWx0LnF1ZXJ5ID0gcmVsYXRpdmUucXVlcnk7XG4gIH0gZWxzZSBpZiAoIWlzTnVsbE9yVW5kZWZpbmVkKHJlbGF0aXZlLnNlYXJjaCkpIHtcbiAgICAvLyBqdXN0IHB1bGwgb3V0IHRoZSBzZWFyY2guXG4gICAgLy8gbGlrZSBocmVmPSc/Zm9vJy5cbiAgICAvLyBQdXQgdGhpcyBhZnRlciB0aGUgb3RoZXIgdHdvIGNhc2VzIGJlY2F1c2UgaXQgc2ltcGxpZmllcyB0aGUgYm9vbGVhbnNcbiAgICBpZiAocHN5Y2hvdGljKSB7XG4gICAgICByZXN1bHQuaG9zdG5hbWUgPSByZXN1bHQuaG9zdCA9IHNyY1BhdGguc2hpZnQoKTtcbiAgICAgIC8vb2NjYXRpb25hbHkgdGhlIGF1dGggY2FuIGdldCBzdHVjayBvbmx5IGluIGhvc3RcbiAgICAgIC8vdGhpcyBlc3BlY2lhbHkgaGFwcGVucyBpbiBjYXNlcyBsaWtlXG4gICAgICAvL3VybC5yZXNvbHZlT2JqZWN0KCdtYWlsdG86bG9jYWwxQGRvbWFpbjEnLCAnbG9jYWwyQGRvbWFpbjInKVxuICAgICAgdmFyIGF1dGhJbkhvc3QgPSByZXN1bHQuaG9zdCAmJiByZXN1bHQuaG9zdC5pbmRleE9mKCdAJykgPiAwID9cbiAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0Lmhvc3Quc3BsaXQoJ0AnKSA6IGZhbHNlO1xuICAgICAgaWYgKGF1dGhJbkhvc3QpIHtcbiAgICAgICAgcmVzdWx0LmF1dGggPSBhdXRoSW5Ib3N0LnNoaWZ0KCk7XG4gICAgICAgIHJlc3VsdC5ob3N0ID0gcmVzdWx0Lmhvc3RuYW1lID0gYXV0aEluSG9zdC5zaGlmdCgpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXN1bHQuc2VhcmNoID0gcmVsYXRpdmUuc2VhcmNoO1xuICAgIHJlc3VsdC5xdWVyeSA9IHJlbGF0aXZlLnF1ZXJ5O1xuICAgIC8vdG8gc3VwcG9ydCBodHRwLnJlcXVlc3RcbiAgICBpZiAoIWlzTnVsbChyZXN1bHQucGF0aG5hbWUpIHx8ICFpc051bGwocmVzdWx0LnNlYXJjaCkpIHtcbiAgICAgIHJlc3VsdC5wYXRoID0gKHJlc3VsdC5wYXRobmFtZSA/IHJlc3VsdC5wYXRobmFtZSA6ICcnKSArXG4gICAgICAgICAgICAgICAgICAgIChyZXN1bHQuc2VhcmNoID8gcmVzdWx0LnNlYXJjaCA6ICcnKTtcbiAgICB9XG4gICAgcmVzdWx0LmhyZWYgPSByZXN1bHQuZm9ybWF0KCk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIGlmICghc3JjUGF0aC5sZW5ndGgpIHtcbiAgICAvLyBubyBwYXRoIGF0IGFsbC4gIGVhc3kuXG4gICAgLy8gd2UndmUgYWxyZWFkeSBoYW5kbGVkIHRoZSBvdGhlciBzdHVmZiBhYm92ZS5cbiAgICByZXN1bHQucGF0aG5hbWUgPSBudWxsO1xuICAgIC8vdG8gc3VwcG9ydCBodHRwLnJlcXVlc3RcbiAgICBpZiAocmVzdWx0LnNlYXJjaCkge1xuICAgICAgcmVzdWx0LnBhdGggPSAnLycgKyByZXN1bHQuc2VhcmNoO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXN1bHQucGF0aCA9IG51bGw7XG4gICAgfVxuICAgIHJlc3VsdC5ocmVmID0gcmVzdWx0LmZvcm1hdCgpO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICAvLyBpZiBhIHVybCBFTkRzIGluIC4gb3IgLi4sIHRoZW4gaXQgbXVzdCBnZXQgYSB0cmFpbGluZyBzbGFzaC5cbiAgLy8gaG93ZXZlciwgaWYgaXQgZW5kcyBpbiBhbnl0aGluZyBlbHNlIG5vbi1zbGFzaHksXG4gIC8vIHRoZW4gaXQgbXVzdCBOT1QgZ2V0IGEgdHJhaWxpbmcgc2xhc2guXG4gIHZhciBsYXN0ID0gc3JjUGF0aC5zbGljZSgtMSlbMF07XG4gIHZhciBoYXNUcmFpbGluZ1NsYXNoID0gKFxuICAgICAgKHJlc3VsdC5ob3N0IHx8IHJlbGF0aXZlLmhvc3QpICYmIChsYXN0ID09PSAnLicgfHwgbGFzdCA9PT0gJy4uJykgfHxcbiAgICAgIGxhc3QgPT09ICcnKTtcblxuICAvLyBzdHJpcCBzaW5nbGUgZG90cywgcmVzb2x2ZSBkb3VibGUgZG90cyB0byBwYXJlbnQgZGlyXG4gIC8vIGlmIHRoZSBwYXRoIHRyaWVzIHRvIGdvIGFib3ZlIHRoZSByb290LCBgdXBgIGVuZHMgdXAgPiAwXG4gIHZhciB1cCA9IDA7XG4gIGZvciAodmFyIGkgPSBzcmNQYXRoLmxlbmd0aDsgaSA+PSAwOyBpLS0pIHtcbiAgICBsYXN0ID0gc3JjUGF0aFtpXTtcbiAgICBpZiAobGFzdCA9PSAnLicpIHtcbiAgICAgIHNyY1BhdGguc3BsaWNlKGksIDEpO1xuICAgIH0gZWxzZSBpZiAobGFzdCA9PT0gJy4uJykge1xuICAgICAgc3JjUGF0aC5zcGxpY2UoaSwgMSk7XG4gICAgICB1cCsrO1xuICAgIH0gZWxzZSBpZiAodXApIHtcbiAgICAgIHNyY1BhdGguc3BsaWNlKGksIDEpO1xuICAgICAgdXAtLTtcbiAgICB9XG4gIH1cblxuICAvLyBpZiB0aGUgcGF0aCBpcyBhbGxvd2VkIHRvIGdvIGFib3ZlIHRoZSByb290LCByZXN0b3JlIGxlYWRpbmcgLi5zXG4gIGlmICghbXVzdEVuZEFicyAmJiAhcmVtb3ZlQWxsRG90cykge1xuICAgIGZvciAoOyB1cC0tOyB1cCkge1xuICAgICAgc3JjUGF0aC51bnNoaWZ0KCcuLicpO1xuICAgIH1cbiAgfVxuXG4gIGlmIChtdXN0RW5kQWJzICYmIHNyY1BhdGhbMF0gIT09ICcnICYmXG4gICAgICAoIXNyY1BhdGhbMF0gfHwgc3JjUGF0aFswXS5jaGFyQXQoMCkgIT09ICcvJykpIHtcbiAgICBzcmNQYXRoLnVuc2hpZnQoJycpO1xuICB9XG5cbiAgaWYgKGhhc1RyYWlsaW5nU2xhc2ggJiYgKHNyY1BhdGguam9pbignLycpLnN1YnN0cigtMSkgIT09ICcvJykpIHtcbiAgICBzcmNQYXRoLnB1c2goJycpO1xuICB9XG5cbiAgdmFyIGlzQWJzb2x1dGUgPSBzcmNQYXRoWzBdID09PSAnJyB8fFxuICAgICAgKHNyY1BhdGhbMF0gJiYgc3JjUGF0aFswXS5jaGFyQXQoMCkgPT09ICcvJyk7XG5cbiAgLy8gcHV0IHRoZSBob3N0IGJhY2tcbiAgaWYgKHBzeWNob3RpYykge1xuICAgIHJlc3VsdC5ob3N0bmFtZSA9IHJlc3VsdC5ob3N0ID0gaXNBYnNvbHV0ZSA/ICcnIDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyY1BhdGgubGVuZ3RoID8gc3JjUGF0aC5zaGlmdCgpIDogJyc7XG4gICAgLy9vY2NhdGlvbmFseSB0aGUgYXV0aCBjYW4gZ2V0IHN0dWNrIG9ubHkgaW4gaG9zdFxuICAgIC8vdGhpcyBlc3BlY2lhbHkgaGFwcGVucyBpbiBjYXNlcyBsaWtlXG4gICAgLy91cmwucmVzb2x2ZU9iamVjdCgnbWFpbHRvOmxvY2FsMUBkb21haW4xJywgJ2xvY2FsMkBkb21haW4yJylcbiAgICB2YXIgYXV0aEluSG9zdCA9IHJlc3VsdC5ob3N0ICYmIHJlc3VsdC5ob3N0LmluZGV4T2YoJ0AnKSA+IDAgP1xuICAgICAgICAgICAgICAgICAgICAgcmVzdWx0Lmhvc3Quc3BsaXQoJ0AnKSA6IGZhbHNlO1xuICAgIGlmIChhdXRoSW5Ib3N0KSB7XG4gICAgICByZXN1bHQuYXV0aCA9IGF1dGhJbkhvc3Quc2hpZnQoKTtcbiAgICAgIHJlc3VsdC5ob3N0ID0gcmVzdWx0Lmhvc3RuYW1lID0gYXV0aEluSG9zdC5zaGlmdCgpO1xuICAgIH1cbiAgfVxuXG4gIG11c3RFbmRBYnMgPSBtdXN0RW5kQWJzIHx8IChyZXN1bHQuaG9zdCAmJiBzcmNQYXRoLmxlbmd0aCk7XG5cbiAgaWYgKG11c3RFbmRBYnMgJiYgIWlzQWJzb2x1dGUpIHtcbiAgICBzcmNQYXRoLnVuc2hpZnQoJycpO1xuICB9XG5cbiAgaWYgKCFzcmNQYXRoLmxlbmd0aCkge1xuICAgIHJlc3VsdC5wYXRobmFtZSA9IG51bGw7XG4gICAgcmVzdWx0LnBhdGggPSBudWxsO1xuICB9IGVsc2Uge1xuICAgIHJlc3VsdC5wYXRobmFtZSA9IHNyY1BhdGguam9pbignLycpO1xuICB9XG5cbiAgLy90byBzdXBwb3J0IHJlcXVlc3QuaHR0cFxuICBpZiAoIWlzTnVsbChyZXN1bHQucGF0aG5hbWUpIHx8ICFpc051bGwocmVzdWx0LnNlYXJjaCkpIHtcbiAgICByZXN1bHQucGF0aCA9IChyZXN1bHQucGF0aG5hbWUgPyByZXN1bHQucGF0aG5hbWUgOiAnJykgK1xuICAgICAgICAgICAgICAgICAgKHJlc3VsdC5zZWFyY2ggPyByZXN1bHQuc2VhcmNoIDogJycpO1xuICB9XG4gIHJlc3VsdC5hdXRoID0gcmVsYXRpdmUuYXV0aCB8fCByZXN1bHQuYXV0aDtcbiAgcmVzdWx0LnNsYXNoZXMgPSByZXN1bHQuc2xhc2hlcyB8fCByZWxhdGl2ZS5zbGFzaGVzO1xuICByZXN1bHQuaHJlZiA9IHJlc3VsdC5mb3JtYXQoKTtcbiAgcmV0dXJuIHJlc3VsdDtcbn07XG5cblVybC5wcm90b3R5cGUucGFyc2VIb3N0ID0gZnVuY3Rpb24oKSB7XG4gIHZhciBob3N0ID0gdGhpcy5ob3N0O1xuICB2YXIgcG9ydCA9IHBvcnRQYXR0ZXJuLmV4ZWMoaG9zdCk7XG4gIGlmIChwb3J0KSB7XG4gICAgcG9ydCA9IHBvcnRbMF07XG4gICAgaWYgKHBvcnQgIT09ICc6Jykge1xuICAgICAgdGhpcy5wb3J0ID0gcG9ydC5zdWJzdHIoMSk7XG4gICAgfVxuICAgIGhvc3QgPSBob3N0LnN1YnN0cigwLCBob3N0Lmxlbmd0aCAtIHBvcnQubGVuZ3RoKTtcbiAgfVxuICBpZiAoaG9zdCkgdGhpcy5ob3N0bmFtZSA9IGhvc3Q7XG59O1xuXG5mdW5jdGlvbiBpc1N0cmluZyhhcmcpIHtcbiAgcmV0dXJuIHR5cGVvZiBhcmcgPT09IFwic3RyaW5nXCI7XG59XG5cbmZ1bmN0aW9uIGlzT2JqZWN0KGFyZykge1xuICByZXR1cm4gdHlwZW9mIGFyZyA9PT0gJ29iamVjdCcgJiYgYXJnICE9PSBudWxsO1xufVxuXG5mdW5jdGlvbiBpc051bGwoYXJnKSB7XG4gIHJldHVybiBhcmcgPT09IG51bGw7XG59XG5mdW5jdGlvbiBpc051bGxPclVuZGVmaW5lZChhcmcpIHtcbiAgcmV0dXJuICBhcmcgPT0gbnVsbDtcbn1cbiIsIid1c2Ugc3RyaWN0JztcblxubW9kdWxlLmV4cG9ydHMgPSBlYXJjdXQ7XG5cbmZ1bmN0aW9uIGVhcmN1dChkYXRhLCBob2xlSW5kaWNlcywgZGltKSB7XG5cbiAgICBkaW0gPSBkaW0gfHwgMjtcblxuICAgIHZhciBoYXNIb2xlcyA9IGhvbGVJbmRpY2VzICYmIGhvbGVJbmRpY2VzLmxlbmd0aCxcbiAgICAgICAgb3V0ZXJMZW4gPSBoYXNIb2xlcyA/IGhvbGVJbmRpY2VzWzBdICogZGltIDogZGF0YS5sZW5ndGgsXG4gICAgICAgIG91dGVyTm9kZSA9IGxpbmtlZExpc3QoZGF0YSwgMCwgb3V0ZXJMZW4sIGRpbSwgdHJ1ZSksXG4gICAgICAgIHRyaWFuZ2xlcyA9IFtdO1xuXG4gICAgaWYgKCFvdXRlck5vZGUpIHJldHVybiB0cmlhbmdsZXM7XG5cbiAgICB2YXIgbWluWCwgbWluWSwgbWF4WCwgbWF4WSwgeCwgeSwgc2l6ZTtcblxuICAgIGlmIChoYXNIb2xlcykgb3V0ZXJOb2RlID0gZWxpbWluYXRlSG9sZXMoZGF0YSwgaG9sZUluZGljZXMsIG91dGVyTm9kZSwgZGltKTtcblxuICAgIC8vIGlmIHRoZSBzaGFwZSBpcyBub3QgdG9vIHNpbXBsZSwgd2UnbGwgdXNlIHotb3JkZXIgY3VydmUgaGFzaCBsYXRlcjsgY2FsY3VsYXRlIHBvbHlnb24gYmJveFxuICAgIGlmIChkYXRhLmxlbmd0aCA+IDgwICogZGltKSB7XG4gICAgICAgIG1pblggPSBtYXhYID0gZGF0YVswXTtcbiAgICAgICAgbWluWSA9IG1heFkgPSBkYXRhWzFdO1xuXG4gICAgICAgIGZvciAodmFyIGkgPSBkaW07IGkgPCBvdXRlckxlbjsgaSArPSBkaW0pIHtcbiAgICAgICAgICAgIHggPSBkYXRhW2ldO1xuICAgICAgICAgICAgeSA9IGRhdGFbaSArIDFdO1xuICAgICAgICAgICAgaWYgKHggPCBtaW5YKSBtaW5YID0geDtcbiAgICAgICAgICAgIGlmICh5IDwgbWluWSkgbWluWSA9IHk7XG4gICAgICAgICAgICBpZiAoeCA+IG1heFgpIG1heFggPSB4O1xuICAgICAgICAgICAgaWYgKHkgPiBtYXhZKSBtYXhZID0geTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIG1pblgsIG1pblkgYW5kIHNpemUgYXJlIGxhdGVyIHVzZWQgdG8gdHJhbnNmb3JtIGNvb3JkcyBpbnRvIGludGVnZXJzIGZvciB6LW9yZGVyIGNhbGN1bGF0aW9uXG4gICAgICAgIHNpemUgPSBNYXRoLm1heChtYXhYIC0gbWluWCwgbWF4WSAtIG1pblkpO1xuICAgIH1cblxuICAgIGVhcmN1dExpbmtlZChvdXRlck5vZGUsIHRyaWFuZ2xlcywgZGltLCBtaW5YLCBtaW5ZLCBzaXplKTtcblxuICAgIHJldHVybiB0cmlhbmdsZXM7XG59XG5cbi8vIGNyZWF0ZSBhIGNpcmN1bGFyIGRvdWJseSBsaW5rZWQgbGlzdCBmcm9tIHBvbHlnb24gcG9pbnRzIGluIHRoZSBzcGVjaWZpZWQgd2luZGluZyBvcmRlclxuZnVuY3Rpb24gbGlua2VkTGlzdChkYXRhLCBzdGFydCwgZW5kLCBkaW0sIGNsb2Nrd2lzZSkge1xuICAgIHZhciBzdW0gPSAwLFxuICAgICAgICBpLCBqLCBsYXN0O1xuXG4gICAgLy8gY2FsY3VsYXRlIG9yaWdpbmFsIHdpbmRpbmcgb3JkZXIgb2YgYSBwb2x5Z29uIHJpbmdcbiAgICBmb3IgKGkgPSBzdGFydCwgaiA9IGVuZCAtIGRpbTsgaSA8IGVuZDsgaSArPSBkaW0pIHtcbiAgICAgICAgc3VtICs9IChkYXRhW2pdIC0gZGF0YVtpXSkgKiAoZGF0YVtpICsgMV0gKyBkYXRhW2ogKyAxXSk7XG4gICAgICAgIGogPSBpO1xuICAgIH1cblxuICAgIC8vIGxpbmsgcG9pbnRzIGludG8gY2lyY3VsYXIgZG91Ymx5LWxpbmtlZCBsaXN0IGluIHRoZSBzcGVjaWZpZWQgd2luZGluZyBvcmRlclxuICAgIGlmIChjbG9ja3dpc2UgPT09IChzdW0gPiAwKSkge1xuICAgICAgICBmb3IgKGkgPSBzdGFydDsgaSA8IGVuZDsgaSArPSBkaW0pIGxhc3QgPSBpbnNlcnROb2RlKGksIGRhdGFbaV0sIGRhdGFbaSArIDFdLCBsYXN0KTtcbiAgICB9IGVsc2Uge1xuICAgICAgICBmb3IgKGkgPSBlbmQgLSBkaW07IGkgPj0gc3RhcnQ7IGkgLT0gZGltKSBsYXN0ID0gaW5zZXJ0Tm9kZShpLCBkYXRhW2ldLCBkYXRhW2kgKyAxXSwgbGFzdCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGxhc3Q7XG59XG5cbi8vIGVsaW1pbmF0ZSBjb2xpbmVhciBvciBkdXBsaWNhdGUgcG9pbnRzXG5mdW5jdGlvbiBmaWx0ZXJQb2ludHMoc3RhcnQsIGVuZCkge1xuICAgIGlmICghc3RhcnQpIHJldHVybiBzdGFydDtcbiAgICBpZiAoIWVuZCkgZW5kID0gc3RhcnQ7XG5cbiAgICB2YXIgcCA9IHN0YXJ0LFxuICAgICAgICBhZ2FpbjtcbiAgICBkbyB7XG4gICAgICAgIGFnYWluID0gZmFsc2U7XG5cbiAgICAgICAgaWYgKCFwLnN0ZWluZXIgJiYgKGVxdWFscyhwLCBwLm5leHQpIHx8IGFyZWEocC5wcmV2LCBwLCBwLm5leHQpID09PSAwKSkge1xuICAgICAgICAgICAgcmVtb3ZlTm9kZShwKTtcbiAgICAgICAgICAgIHAgPSBlbmQgPSBwLnByZXY7XG4gICAgICAgICAgICBpZiAocCA9PT0gcC5uZXh0KSByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIGFnYWluID0gdHJ1ZTtcblxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcCA9IHAubmV4dDtcbiAgICAgICAgfVxuICAgIH0gd2hpbGUgKGFnYWluIHx8IHAgIT09IGVuZCk7XG5cbiAgICByZXR1cm4gZW5kO1xufVxuXG4vLyBtYWluIGVhciBzbGljaW5nIGxvb3Agd2hpY2ggdHJpYW5ndWxhdGVzIGEgcG9seWdvbiAoZ2l2ZW4gYXMgYSBsaW5rZWQgbGlzdClcbmZ1bmN0aW9uIGVhcmN1dExpbmtlZChlYXIsIHRyaWFuZ2xlcywgZGltLCBtaW5YLCBtaW5ZLCBzaXplLCBwYXNzKSB7XG4gICAgaWYgKCFlYXIpIHJldHVybjtcblxuICAgIC8vIGludGVybGluayBwb2x5Z29uIG5vZGVzIGluIHotb3JkZXJcbiAgICBpZiAoIXBhc3MgJiYgc2l6ZSkgaW5kZXhDdXJ2ZShlYXIsIG1pblgsIG1pblksIHNpemUpO1xuXG4gICAgdmFyIHN0b3AgPSBlYXIsXG4gICAgICAgIHByZXYsIG5leHQ7XG5cbiAgICAvLyBpdGVyYXRlIHRocm91Z2ggZWFycywgc2xpY2luZyB0aGVtIG9uZSBieSBvbmVcbiAgICB3aGlsZSAoZWFyLnByZXYgIT09IGVhci5uZXh0KSB7XG4gICAgICAgIHByZXYgPSBlYXIucHJldjtcbiAgICAgICAgbmV4dCA9IGVhci5uZXh0O1xuXG4gICAgICAgIGlmIChzaXplID8gaXNFYXJIYXNoZWQoZWFyLCBtaW5YLCBtaW5ZLCBzaXplKSA6IGlzRWFyKGVhcikpIHtcbiAgICAgICAgICAgIC8vIGN1dCBvZmYgdGhlIHRyaWFuZ2xlXG4gICAgICAgICAgICB0cmlhbmdsZXMucHVzaChwcmV2LmkgLyBkaW0pO1xuICAgICAgICAgICAgdHJpYW5nbGVzLnB1c2goZWFyLmkgLyBkaW0pO1xuICAgICAgICAgICAgdHJpYW5nbGVzLnB1c2gobmV4dC5pIC8gZGltKTtcblxuICAgICAgICAgICAgcmVtb3ZlTm9kZShlYXIpO1xuXG4gICAgICAgICAgICAvLyBza2lwcGluZyB0aGUgbmV4dCB2ZXJ0aWNlIGxlYWRzIHRvIGxlc3Mgc2xpdmVyIHRyaWFuZ2xlc1xuICAgICAgICAgICAgZWFyID0gbmV4dC5uZXh0O1xuICAgICAgICAgICAgc3RvcCA9IG5leHQubmV4dDtcblxuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICBlYXIgPSBuZXh0O1xuXG4gICAgICAgIC8vIGlmIHdlIGxvb3BlZCB0aHJvdWdoIHRoZSB3aG9sZSByZW1haW5pbmcgcG9seWdvbiBhbmQgY2FuJ3QgZmluZCBhbnkgbW9yZSBlYXJzXG4gICAgICAgIGlmIChlYXIgPT09IHN0b3ApIHtcbiAgICAgICAgICAgIC8vIHRyeSBmaWx0ZXJpbmcgcG9pbnRzIGFuZCBzbGljaW5nIGFnYWluXG4gICAgICAgICAgICBpZiAoIXBhc3MpIHtcbiAgICAgICAgICAgICAgICBlYXJjdXRMaW5rZWQoZmlsdGVyUG9pbnRzKGVhciksIHRyaWFuZ2xlcywgZGltLCBtaW5YLCBtaW5ZLCBzaXplLCAxKTtcblxuICAgICAgICAgICAgLy8gaWYgdGhpcyBkaWRuJ3Qgd29yaywgdHJ5IGN1cmluZyBhbGwgc21hbGwgc2VsZi1pbnRlcnNlY3Rpb25zIGxvY2FsbHlcbiAgICAgICAgICAgIH0gZWxzZSBpZiAocGFzcyA9PT0gMSkge1xuICAgICAgICAgICAgICAgIGVhciA9IGN1cmVMb2NhbEludGVyc2VjdGlvbnMoZWFyLCB0cmlhbmdsZXMsIGRpbSk7XG4gICAgICAgICAgICAgICAgZWFyY3V0TGlua2VkKGVhciwgdHJpYW5nbGVzLCBkaW0sIG1pblgsIG1pblksIHNpemUsIDIpO1xuXG4gICAgICAgICAgICAvLyBhcyBhIGxhc3QgcmVzb3J0LCB0cnkgc3BsaXR0aW5nIHRoZSByZW1haW5pbmcgcG9seWdvbiBpbnRvIHR3b1xuICAgICAgICAgICAgfSBlbHNlIGlmIChwYXNzID09PSAyKSB7XG4gICAgICAgICAgICAgICAgc3BsaXRFYXJjdXQoZWFyLCB0cmlhbmdsZXMsIGRpbSwgbWluWCwgbWluWSwgc2l6ZSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgfVxufVxuXG4vLyBjaGVjayB3aGV0aGVyIGEgcG9seWdvbiBub2RlIGZvcm1zIGEgdmFsaWQgZWFyIHdpdGggYWRqYWNlbnQgbm9kZXNcbmZ1bmN0aW9uIGlzRWFyKGVhcikge1xuICAgIHZhciBhID0gZWFyLnByZXYsXG4gICAgICAgIGIgPSBlYXIsXG4gICAgICAgIGMgPSBlYXIubmV4dDtcblxuICAgIGlmIChhcmVhKGEsIGIsIGMpID49IDApIHJldHVybiBmYWxzZTsgLy8gcmVmbGV4LCBjYW4ndCBiZSBhbiBlYXJcblxuICAgIC8vIG5vdyBtYWtlIHN1cmUgd2UgZG9uJ3QgaGF2ZSBvdGhlciBwb2ludHMgaW5zaWRlIHRoZSBwb3RlbnRpYWwgZWFyXG4gICAgdmFyIHAgPSBlYXIubmV4dC5uZXh0O1xuXG4gICAgd2hpbGUgKHAgIT09IGVhci5wcmV2KSB7XG4gICAgICAgIGlmIChwb2ludEluVHJpYW5nbGUoYS54LCBhLnksIGIueCwgYi55LCBjLngsIGMueSwgcC54LCBwLnkpICYmXG4gICAgICAgICAgICBhcmVhKHAucHJldiwgcCwgcC5uZXh0KSA+PSAwKSByZXR1cm4gZmFsc2U7XG4gICAgICAgIHAgPSBwLm5leHQ7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRydWU7XG59XG5cbmZ1bmN0aW9uIGlzRWFySGFzaGVkKGVhciwgbWluWCwgbWluWSwgc2l6ZSkge1xuICAgIHZhciBhID0gZWFyLnByZXYsXG4gICAgICAgIGIgPSBlYXIsXG4gICAgICAgIGMgPSBlYXIubmV4dDtcblxuICAgIGlmIChhcmVhKGEsIGIsIGMpID49IDApIHJldHVybiBmYWxzZTsgLy8gcmVmbGV4LCBjYW4ndCBiZSBhbiBlYXJcblxuICAgIC8vIHRyaWFuZ2xlIGJib3g7IG1pbiAmIG1heCBhcmUgY2FsY3VsYXRlZCBsaWtlIHRoaXMgZm9yIHNwZWVkXG4gICAgdmFyIG1pblRYID0gYS54IDwgYi54ID8gKGEueCA8IGMueCA/IGEueCA6IGMueCkgOiAoYi54IDwgYy54ID8gYi54IDogYy54KSxcbiAgICAgICAgbWluVFkgPSBhLnkgPCBiLnkgPyAoYS55IDwgYy55ID8gYS55IDogYy55KSA6IChiLnkgPCBjLnkgPyBiLnkgOiBjLnkpLFxuICAgICAgICBtYXhUWCA9IGEueCA+IGIueCA/IChhLnggPiBjLnggPyBhLnggOiBjLngpIDogKGIueCA+IGMueCA/IGIueCA6IGMueCksXG4gICAgICAgIG1heFRZID0gYS55ID4gYi55ID8gKGEueSA+IGMueSA/IGEueSA6IGMueSkgOiAoYi55ID4gYy55ID8gYi55IDogYy55KTtcblxuICAgIC8vIHotb3JkZXIgcmFuZ2UgZm9yIHRoZSBjdXJyZW50IHRyaWFuZ2xlIGJib3g7XG4gICAgdmFyIG1pblogPSB6T3JkZXIobWluVFgsIG1pblRZLCBtaW5YLCBtaW5ZLCBzaXplKSxcbiAgICAgICAgbWF4WiA9IHpPcmRlcihtYXhUWCwgbWF4VFksIG1pblgsIG1pblksIHNpemUpO1xuXG4gICAgLy8gZmlyc3QgbG9vayBmb3IgcG9pbnRzIGluc2lkZSB0aGUgdHJpYW5nbGUgaW4gaW5jcmVhc2luZyB6LW9yZGVyXG4gICAgdmFyIHAgPSBlYXIubmV4dFo7XG5cbiAgICB3aGlsZSAocCAmJiBwLnogPD0gbWF4Wikge1xuICAgICAgICBpZiAocCAhPT0gZWFyLnByZXYgJiYgcCAhPT0gZWFyLm5leHQgJiZcbiAgICAgICAgICAgIHBvaW50SW5UcmlhbmdsZShhLngsIGEueSwgYi54LCBiLnksIGMueCwgYy55LCBwLngsIHAueSkgJiZcbiAgICAgICAgICAgIGFyZWEocC5wcmV2LCBwLCBwLm5leHQpID49IDApIHJldHVybiBmYWxzZTtcbiAgICAgICAgcCA9IHAubmV4dFo7XG4gICAgfVxuXG4gICAgLy8gdGhlbiBsb29rIGZvciBwb2ludHMgaW4gZGVjcmVhc2luZyB6LW9yZGVyXG4gICAgcCA9IGVhci5wcmV2WjtcblxuICAgIHdoaWxlIChwICYmIHAueiA+PSBtaW5aKSB7XG4gICAgICAgIGlmIChwICE9PSBlYXIucHJldiAmJiBwICE9PSBlYXIubmV4dCAmJlxuICAgICAgICAgICAgcG9pbnRJblRyaWFuZ2xlKGEueCwgYS55LCBiLngsIGIueSwgYy54LCBjLnksIHAueCwgcC55KSAmJlxuICAgICAgICAgICAgYXJlYShwLnByZXYsIHAsIHAubmV4dCkgPj0gMCkgcmV0dXJuIGZhbHNlO1xuICAgICAgICBwID0gcC5wcmV2WjtcbiAgICB9XG5cbiAgICByZXR1cm4gdHJ1ZTtcbn1cblxuLy8gZ28gdGhyb3VnaCBhbGwgcG9seWdvbiBub2RlcyBhbmQgY3VyZSBzbWFsbCBsb2NhbCBzZWxmLWludGVyc2VjdGlvbnNcbmZ1bmN0aW9uIGN1cmVMb2NhbEludGVyc2VjdGlvbnMoc3RhcnQsIHRyaWFuZ2xlcywgZGltKSB7XG4gICAgdmFyIHAgPSBzdGFydDtcbiAgICBkbyB7XG4gICAgICAgIHZhciBhID0gcC5wcmV2LFxuICAgICAgICAgICAgYiA9IHAubmV4dC5uZXh0O1xuXG4gICAgICAgIC8vIGEgc2VsZi1pbnRlcnNlY3Rpb24gd2hlcmUgZWRnZSAodltpLTFdLHZbaV0pIGludGVyc2VjdHMgKHZbaSsxXSx2W2krMl0pXG4gICAgICAgIGlmIChpbnRlcnNlY3RzKGEsIHAsIHAubmV4dCwgYikgJiYgbG9jYWxseUluc2lkZShhLCBiKSAmJiBsb2NhbGx5SW5zaWRlKGIsIGEpKSB7XG5cbiAgICAgICAgICAgIHRyaWFuZ2xlcy5wdXNoKGEuaSAvIGRpbSk7XG4gICAgICAgICAgICB0cmlhbmdsZXMucHVzaChwLmkgLyBkaW0pO1xuICAgICAgICAgICAgdHJpYW5nbGVzLnB1c2goYi5pIC8gZGltKTtcblxuICAgICAgICAgICAgLy8gcmVtb3ZlIHR3byBub2RlcyBpbnZvbHZlZFxuICAgICAgICAgICAgcmVtb3ZlTm9kZShwKTtcbiAgICAgICAgICAgIHJlbW92ZU5vZGUocC5uZXh0KTtcblxuICAgICAgICAgICAgcCA9IHN0YXJ0ID0gYjtcbiAgICAgICAgfVxuICAgICAgICBwID0gcC5uZXh0O1xuICAgIH0gd2hpbGUgKHAgIT09IHN0YXJ0KTtcblxuICAgIHJldHVybiBwO1xufVxuXG4vLyB0cnkgc3BsaXR0aW5nIHBvbHlnb24gaW50byB0d28gYW5kIHRyaWFuZ3VsYXRlIHRoZW0gaW5kZXBlbmRlbnRseVxuZnVuY3Rpb24gc3BsaXRFYXJjdXQoc3RhcnQsIHRyaWFuZ2xlcywgZGltLCBtaW5YLCBtaW5ZLCBzaXplKSB7XG4gICAgLy8gbG9vayBmb3IgYSB2YWxpZCBkaWFnb25hbCB0aGF0IGRpdmlkZXMgdGhlIHBvbHlnb24gaW50byB0d29cbiAgICB2YXIgYSA9IHN0YXJ0O1xuICAgIGRvIHtcbiAgICAgICAgdmFyIGIgPSBhLm5leHQubmV4dDtcbiAgICAgICAgd2hpbGUgKGIgIT09IGEucHJldikge1xuICAgICAgICAgICAgaWYgKGEuaSAhPT0gYi5pICYmIGlzVmFsaWREaWFnb25hbChhLCBiKSkge1xuICAgICAgICAgICAgICAgIC8vIHNwbGl0IHRoZSBwb2x5Z29uIGluIHR3byBieSB0aGUgZGlhZ29uYWxcbiAgICAgICAgICAgICAgICB2YXIgYyA9IHNwbGl0UG9seWdvbihhLCBiKTtcblxuICAgICAgICAgICAgICAgIC8vIGZpbHRlciBjb2xpbmVhciBwb2ludHMgYXJvdW5kIHRoZSBjdXRzXG4gICAgICAgICAgICAgICAgYSA9IGZpbHRlclBvaW50cyhhLCBhLm5leHQpO1xuICAgICAgICAgICAgICAgIGMgPSBmaWx0ZXJQb2ludHMoYywgYy5uZXh0KTtcblxuICAgICAgICAgICAgICAgIC8vIHJ1biBlYXJjdXQgb24gZWFjaCBoYWxmXG4gICAgICAgICAgICAgICAgZWFyY3V0TGlua2VkKGEsIHRyaWFuZ2xlcywgZGltLCBtaW5YLCBtaW5ZLCBzaXplKTtcbiAgICAgICAgICAgICAgICBlYXJjdXRMaW5rZWQoYywgdHJpYW5nbGVzLCBkaW0sIG1pblgsIG1pblksIHNpemUpO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGIgPSBiLm5leHQ7XG4gICAgICAgIH1cbiAgICAgICAgYSA9IGEubmV4dDtcbiAgICB9IHdoaWxlIChhICE9PSBzdGFydCk7XG59XG5cbi8vIGxpbmsgZXZlcnkgaG9sZSBpbnRvIHRoZSBvdXRlciBsb29wLCBwcm9kdWNpbmcgYSBzaW5nbGUtcmluZyBwb2x5Z29uIHdpdGhvdXQgaG9sZXNcbmZ1bmN0aW9uIGVsaW1pbmF0ZUhvbGVzKGRhdGEsIGhvbGVJbmRpY2VzLCBvdXRlck5vZGUsIGRpbSkge1xuICAgIHZhciBxdWV1ZSA9IFtdLFxuICAgICAgICBpLCBsZW4sIHN0YXJ0LCBlbmQsIGxpc3Q7XG5cbiAgICBmb3IgKGkgPSAwLCBsZW4gPSBob2xlSW5kaWNlcy5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuICAgICAgICBzdGFydCA9IGhvbGVJbmRpY2VzW2ldICogZGltO1xuICAgICAgICBlbmQgPSBpIDwgbGVuIC0gMSA/IGhvbGVJbmRpY2VzW2kgKyAxXSAqIGRpbSA6IGRhdGEubGVuZ3RoO1xuICAgICAgICBsaXN0ID0gbGlua2VkTGlzdChkYXRhLCBzdGFydCwgZW5kLCBkaW0sIGZhbHNlKTtcbiAgICAgICAgaWYgKGxpc3QgPT09IGxpc3QubmV4dCkgbGlzdC5zdGVpbmVyID0gdHJ1ZTtcbiAgICAgICAgcXVldWUucHVzaChnZXRMZWZ0bW9zdChsaXN0KSk7XG4gICAgfVxuXG4gICAgcXVldWUuc29ydChjb21wYXJlWCk7XG5cbiAgICAvLyBwcm9jZXNzIGhvbGVzIGZyb20gbGVmdCB0byByaWdodFxuICAgIGZvciAoaSA9IDA7IGkgPCBxdWV1ZS5sZW5ndGg7IGkrKykge1xuICAgICAgICBlbGltaW5hdGVIb2xlKHF1ZXVlW2ldLCBvdXRlck5vZGUpO1xuICAgICAgICBvdXRlck5vZGUgPSBmaWx0ZXJQb2ludHMob3V0ZXJOb2RlLCBvdXRlck5vZGUubmV4dCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG91dGVyTm9kZTtcbn1cblxuZnVuY3Rpb24gY29tcGFyZVgoYSwgYikge1xuICAgIHJldHVybiBhLnggLSBiLng7XG59XG5cbi8vIGZpbmQgYSBicmlkZ2UgYmV0d2VlbiB2ZXJ0aWNlcyB0aGF0IGNvbm5lY3RzIGhvbGUgd2l0aCBhbiBvdXRlciByaW5nIGFuZCBhbmQgbGluayBpdFxuZnVuY3Rpb24gZWxpbWluYXRlSG9sZShob2xlLCBvdXRlck5vZGUpIHtcbiAgICBvdXRlck5vZGUgPSBmaW5kSG9sZUJyaWRnZShob2xlLCBvdXRlck5vZGUpO1xuICAgIGlmIChvdXRlck5vZGUpIHtcbiAgICAgICAgdmFyIGIgPSBzcGxpdFBvbHlnb24ob3V0ZXJOb2RlLCBob2xlKTtcbiAgICAgICAgZmlsdGVyUG9pbnRzKGIsIGIubmV4dCk7XG4gICAgfVxufVxuXG4vLyBEYXZpZCBFYmVybHkncyBhbGdvcml0aG0gZm9yIGZpbmRpbmcgYSBicmlkZ2UgYmV0d2VlbiBob2xlIGFuZCBvdXRlciBwb2x5Z29uXG5mdW5jdGlvbiBmaW5kSG9sZUJyaWRnZShob2xlLCBvdXRlck5vZGUpIHtcbiAgICB2YXIgcCA9IG91dGVyTm9kZSxcbiAgICAgICAgaHggPSBob2xlLngsXG4gICAgICAgIGh5ID0gaG9sZS55LFxuICAgICAgICBxeCA9IC1JbmZpbml0eSxcbiAgICAgICAgbTtcblxuICAgIC8vIGZpbmQgYSBzZWdtZW50IGludGVyc2VjdGVkIGJ5IGEgcmF5IGZyb20gdGhlIGhvbGUncyBsZWZ0bW9zdCBwb2ludCB0byB0aGUgbGVmdDtcbiAgICAvLyBzZWdtZW50J3MgZW5kcG9pbnQgd2l0aCBsZXNzZXIgeCB3aWxsIGJlIHBvdGVudGlhbCBjb25uZWN0aW9uIHBvaW50XG4gICAgZG8ge1xuICAgICAgICBpZiAoaHkgPD0gcC55ICYmIGh5ID49IHAubmV4dC55KSB7XG4gICAgICAgICAgICB2YXIgeCA9IHAueCArIChoeSAtIHAueSkgKiAocC5uZXh0LnggLSBwLngpIC8gKHAubmV4dC55IC0gcC55KTtcbiAgICAgICAgICAgIGlmICh4IDw9IGh4ICYmIHggPiBxeCkge1xuICAgICAgICAgICAgICAgIHF4ID0geDtcbiAgICAgICAgICAgICAgICBtID0gcC54IDwgcC5uZXh0LnggPyBwIDogcC5uZXh0O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHAgPSBwLm5leHQ7XG4gICAgfSB3aGlsZSAocCAhPT0gb3V0ZXJOb2RlKTtcblxuICAgIGlmICghbSkgcmV0dXJuIG51bGw7XG5cbiAgICAvLyBsb29rIGZvciBwb2ludHMgaW5zaWRlIHRoZSB0cmlhbmdsZSBvZiBob2xlIHBvaW50LCBzZWdtZW50IGludGVyc2VjdGlvbiBhbmQgZW5kcG9pbnQ7XG4gICAgLy8gaWYgdGhlcmUgYXJlIG5vIHBvaW50cyBmb3VuZCwgd2UgaGF2ZSBhIHZhbGlkIGNvbm5lY3Rpb247XG4gICAgLy8gb3RoZXJ3aXNlIGNob29zZSB0aGUgcG9pbnQgb2YgdGhlIG1pbmltdW0gYW5nbGUgd2l0aCB0aGUgcmF5IGFzIGNvbm5lY3Rpb24gcG9pbnRcblxuICAgIHZhciBzdG9wID0gbSxcbiAgICAgICAgdGFuTWluID0gSW5maW5pdHksXG4gICAgICAgIHRhbjtcblxuICAgIHAgPSBtLm5leHQ7XG5cbiAgICB3aGlsZSAocCAhPT0gc3RvcCkge1xuICAgICAgICBpZiAoaHggPj0gcC54ICYmIHAueCA+PSBtLnggJiZcbiAgICAgICAgICAgICAgICBwb2ludEluVHJpYW5nbGUoaHkgPCBtLnkgPyBoeCA6IHF4LCBoeSwgbS54LCBtLnksIGh5IDwgbS55ID8gcXggOiBoeCwgaHksIHAueCwgcC55KSkge1xuXG4gICAgICAgICAgICB0YW4gPSBNYXRoLmFicyhoeSAtIHAueSkgLyAoaHggLSBwLngpOyAvLyB0YW5nZW50aWFsXG5cbiAgICAgICAgICAgIGlmICgodGFuIDwgdGFuTWluIHx8ICh0YW4gPT09IHRhbk1pbiAmJiBwLnggPiBtLngpKSAmJiBsb2NhbGx5SW5zaWRlKHAsIGhvbGUpKSB7XG4gICAgICAgICAgICAgICAgbSA9IHA7XG4gICAgICAgICAgICAgICAgdGFuTWluID0gdGFuO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcCA9IHAubmV4dDtcbiAgICB9XG5cbiAgICByZXR1cm4gbTtcbn1cblxuLy8gaW50ZXJsaW5rIHBvbHlnb24gbm9kZXMgaW4gei1vcmRlclxuZnVuY3Rpb24gaW5kZXhDdXJ2ZShzdGFydCwgbWluWCwgbWluWSwgc2l6ZSkge1xuICAgIHZhciBwID0gc3RhcnQ7XG4gICAgZG8ge1xuICAgICAgICBpZiAocC56ID09PSBudWxsKSBwLnogPSB6T3JkZXIocC54LCBwLnksIG1pblgsIG1pblksIHNpemUpO1xuICAgICAgICBwLnByZXZaID0gcC5wcmV2O1xuICAgICAgICBwLm5leHRaID0gcC5uZXh0O1xuICAgICAgICBwID0gcC5uZXh0O1xuICAgIH0gd2hpbGUgKHAgIT09IHN0YXJ0KTtcblxuICAgIHAucHJldloubmV4dFogPSBudWxsO1xuICAgIHAucHJldlogPSBudWxsO1xuXG4gICAgc29ydExpbmtlZChwKTtcbn1cblxuLy8gU2ltb24gVGF0aGFtJ3MgbGlua2VkIGxpc3QgbWVyZ2Ugc29ydCBhbGdvcml0aG1cbi8vIGh0dHA6Ly93d3cuY2hpYXJrLmdyZWVuZW5kLm9yZy51ay9+c2d0YXRoYW0vYWxnb3JpdGhtcy9saXN0c29ydC5odG1sXG5mdW5jdGlvbiBzb3J0TGlua2VkKGxpc3QpIHtcbiAgICB2YXIgaSwgcCwgcSwgZSwgdGFpbCwgbnVtTWVyZ2VzLCBwU2l6ZSwgcVNpemUsXG4gICAgICAgIGluU2l6ZSA9IDE7XG5cbiAgICBkbyB7XG4gICAgICAgIHAgPSBsaXN0O1xuICAgICAgICBsaXN0ID0gbnVsbDtcbiAgICAgICAgdGFpbCA9IG51bGw7XG4gICAgICAgIG51bU1lcmdlcyA9IDA7XG5cbiAgICAgICAgd2hpbGUgKHApIHtcbiAgICAgICAgICAgIG51bU1lcmdlcysrO1xuICAgICAgICAgICAgcSA9IHA7XG4gICAgICAgICAgICBwU2l6ZSA9IDA7XG4gICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgaW5TaXplOyBpKyspIHtcbiAgICAgICAgICAgICAgICBwU2l6ZSsrO1xuICAgICAgICAgICAgICAgIHEgPSBxLm5leHRaO1xuICAgICAgICAgICAgICAgIGlmICghcSkgYnJlYWs7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHFTaXplID0gaW5TaXplO1xuXG4gICAgICAgICAgICB3aGlsZSAocFNpemUgPiAwIHx8IChxU2l6ZSA+IDAgJiYgcSkpIHtcblxuICAgICAgICAgICAgICAgIGlmIChwU2l6ZSA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICBlID0gcTtcbiAgICAgICAgICAgICAgICAgICAgcSA9IHEubmV4dFo7XG4gICAgICAgICAgICAgICAgICAgIHFTaXplLS07XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChxU2l6ZSA9PT0gMCB8fCAhcSkge1xuICAgICAgICAgICAgICAgICAgICBlID0gcDtcbiAgICAgICAgICAgICAgICAgICAgcCA9IHAubmV4dFo7XG4gICAgICAgICAgICAgICAgICAgIHBTaXplLS07XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChwLnogPD0gcS56KSB7XG4gICAgICAgICAgICAgICAgICAgIGUgPSBwO1xuICAgICAgICAgICAgICAgICAgICBwID0gcC5uZXh0WjtcbiAgICAgICAgICAgICAgICAgICAgcFNpemUtLTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBlID0gcTtcbiAgICAgICAgICAgICAgICAgICAgcSA9IHEubmV4dFo7XG4gICAgICAgICAgICAgICAgICAgIHFTaXplLS07XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKHRhaWwpIHRhaWwubmV4dFogPSBlO1xuICAgICAgICAgICAgICAgIGVsc2UgbGlzdCA9IGU7XG5cbiAgICAgICAgICAgICAgICBlLnByZXZaID0gdGFpbDtcbiAgICAgICAgICAgICAgICB0YWlsID0gZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcCA9IHE7XG4gICAgICAgIH1cblxuICAgICAgICB0YWlsLm5leHRaID0gbnVsbDtcbiAgICAgICAgaW5TaXplICo9IDI7XG5cbiAgICB9IHdoaWxlIChudW1NZXJnZXMgPiAxKTtcblxuICAgIHJldHVybiBsaXN0O1xufVxuXG4vLyB6LW9yZGVyIG9mIGEgcG9pbnQgZ2l2ZW4gY29vcmRzIGFuZCBzaXplIG9mIHRoZSBkYXRhIGJvdW5kaW5nIGJveFxuZnVuY3Rpb24gek9yZGVyKHgsIHksIG1pblgsIG1pblksIHNpemUpIHtcbiAgICAvLyBjb29yZHMgYXJlIHRyYW5zZm9ybWVkIGludG8gbm9uLW5lZ2F0aXZlIDE1LWJpdCBpbnRlZ2VyIHJhbmdlXG4gICAgeCA9IDMyNzY3ICogKHggLSBtaW5YKSAvIHNpemU7XG4gICAgeSA9IDMyNzY3ICogKHkgLSBtaW5ZKSAvIHNpemU7XG5cbiAgICB4ID0gKHggfCAoeCA8PCA4KSkgJiAweDAwRkYwMEZGO1xuICAgIHggPSAoeCB8ICh4IDw8IDQpKSAmIDB4MEYwRjBGMEY7XG4gICAgeCA9ICh4IHwgKHggPDwgMikpICYgMHgzMzMzMzMzMztcbiAgICB4ID0gKHggfCAoeCA8PCAxKSkgJiAweDU1NTU1NTU1O1xuXG4gICAgeSA9ICh5IHwgKHkgPDwgOCkpICYgMHgwMEZGMDBGRjtcbiAgICB5ID0gKHkgfCAoeSA8PCA0KSkgJiAweDBGMEYwRjBGO1xuICAgIHkgPSAoeSB8ICh5IDw8IDIpKSAmIDB4MzMzMzMzMzM7XG4gICAgeSA9ICh5IHwgKHkgPDwgMSkpICYgMHg1NTU1NTU1NTtcblxuICAgIHJldHVybiB4IHwgKHkgPDwgMSk7XG59XG5cbi8vIGZpbmQgdGhlIGxlZnRtb3N0IG5vZGUgb2YgYSBwb2x5Z29uIHJpbmdcbmZ1bmN0aW9uIGdldExlZnRtb3N0KHN0YXJ0KSB7XG4gICAgdmFyIHAgPSBzdGFydCxcbiAgICAgICAgbGVmdG1vc3QgPSBzdGFydDtcbiAgICBkbyB7XG4gICAgICAgIGlmIChwLnggPCBsZWZ0bW9zdC54KSBsZWZ0bW9zdCA9IHA7XG4gICAgICAgIHAgPSBwLm5leHQ7XG4gICAgfSB3aGlsZSAocCAhPT0gc3RhcnQpO1xuXG4gICAgcmV0dXJuIGxlZnRtb3N0O1xufVxuXG4vLyBjaGVjayBpZiBhIHBvaW50IGxpZXMgd2l0aGluIGEgY29udmV4IHRyaWFuZ2xlXG5mdW5jdGlvbiBwb2ludEluVHJpYW5nbGUoYXgsIGF5LCBieCwgYnksIGN4LCBjeSwgcHgsIHB5KSB7XG4gICAgcmV0dXJuIChjeCAtIHB4KSAqIChheSAtIHB5KSAtIChheCAtIHB4KSAqIChjeSAtIHB5KSA+PSAwICYmXG4gICAgICAgICAgIChheCAtIHB4KSAqIChieSAtIHB5KSAtIChieCAtIHB4KSAqIChheSAtIHB5KSA+PSAwICYmXG4gICAgICAgICAgIChieCAtIHB4KSAqIChjeSAtIHB5KSAtIChjeCAtIHB4KSAqIChieSAtIHB5KSA+PSAwO1xufVxuXG4vLyBjaGVjayBpZiBhIGRpYWdvbmFsIGJldHdlZW4gdHdvIHBvbHlnb24gbm9kZXMgaXMgdmFsaWQgKGxpZXMgaW4gcG9seWdvbiBpbnRlcmlvcilcbmZ1bmN0aW9uIGlzVmFsaWREaWFnb25hbChhLCBiKSB7XG4gICAgcmV0dXJuIGVxdWFscyhhLCBiKSB8fCBhLm5leHQuaSAhPT0gYi5pICYmIGEucHJldi5pICE9PSBiLmkgJiYgIWludGVyc2VjdHNQb2x5Z29uKGEsIGIpICYmXG4gICAgICAgICAgIGxvY2FsbHlJbnNpZGUoYSwgYikgJiYgbG9jYWxseUluc2lkZShiLCBhKSAmJiBtaWRkbGVJbnNpZGUoYSwgYik7XG59XG5cbi8vIHNpZ25lZCBhcmVhIG9mIGEgdHJpYW5nbGVcbmZ1bmN0aW9uIGFyZWEocCwgcSwgcikge1xuICAgIHJldHVybiAocS55IC0gcC55KSAqIChyLnggLSBxLngpIC0gKHEueCAtIHAueCkgKiAoci55IC0gcS55KTtcbn1cblxuLy8gY2hlY2sgaWYgdHdvIHBvaW50cyBhcmUgZXF1YWxcbmZ1bmN0aW9uIGVxdWFscyhwMSwgcDIpIHtcbiAgICByZXR1cm4gcDEueCA9PT0gcDIueCAmJiBwMS55ID09PSBwMi55O1xufVxuXG4vLyBjaGVjayBpZiB0d28gc2VnbWVudHMgaW50ZXJzZWN0XG5mdW5jdGlvbiBpbnRlcnNlY3RzKHAxLCBxMSwgcDIsIHEyKSB7XG4gICAgcmV0dXJuIGFyZWEocDEsIHExLCBwMikgPiAwICE9PSBhcmVhKHAxLCBxMSwgcTIpID4gMCAmJlxuICAgICAgICAgICBhcmVhKHAyLCBxMiwgcDEpID4gMCAhPT0gYXJlYShwMiwgcTIsIHExKSA+IDA7XG59XG5cbi8vIGNoZWNrIGlmIGEgcG9seWdvbiBkaWFnb25hbCBpbnRlcnNlY3RzIGFueSBwb2x5Z29uIHNlZ21lbnRzXG5mdW5jdGlvbiBpbnRlcnNlY3RzUG9seWdvbihhLCBiKSB7XG4gICAgdmFyIHAgPSBhO1xuICAgIGRvIHtcbiAgICAgICAgaWYgKHAuaSAhPT0gYS5pICYmIHAubmV4dC5pICE9PSBhLmkgJiYgcC5pICE9PSBiLmkgJiYgcC5uZXh0LmkgIT09IGIuaSAmJlxuICAgICAgICAgICAgICAgIGludGVyc2VjdHMocCwgcC5uZXh0LCBhLCBiKSkgcmV0dXJuIHRydWU7XG4gICAgICAgIHAgPSBwLm5leHQ7XG4gICAgfSB3aGlsZSAocCAhPT0gYSk7XG5cbiAgICByZXR1cm4gZmFsc2U7XG59XG5cbi8vIGNoZWNrIGlmIGEgcG9seWdvbiBkaWFnb25hbCBpcyBsb2NhbGx5IGluc2lkZSB0aGUgcG9seWdvblxuZnVuY3Rpb24gbG9jYWxseUluc2lkZShhLCBiKSB7XG4gICAgcmV0dXJuIGFyZWEoYS5wcmV2LCBhLCBhLm5leHQpIDwgMCA/XG4gICAgICAgIGFyZWEoYSwgYiwgYS5uZXh0KSA+PSAwICYmIGFyZWEoYSwgYS5wcmV2LCBiKSA+PSAwIDpcbiAgICAgICAgYXJlYShhLCBiLCBhLnByZXYpIDwgMCB8fCBhcmVhKGEsIGEubmV4dCwgYikgPCAwO1xufVxuXG4vLyBjaGVjayBpZiB0aGUgbWlkZGxlIHBvaW50IG9mIGEgcG9seWdvbiBkaWFnb25hbCBpcyBpbnNpZGUgdGhlIHBvbHlnb25cbmZ1bmN0aW9uIG1pZGRsZUluc2lkZShhLCBiKSB7XG4gICAgdmFyIHAgPSBhLFxuICAgICAgICBpbnNpZGUgPSBmYWxzZSxcbiAgICAgICAgcHggPSAoYS54ICsgYi54KSAvIDIsXG4gICAgICAgIHB5ID0gKGEueSArIGIueSkgLyAyO1xuICAgIGRvIHtcbiAgICAgICAgaWYgKCgocC55ID4gcHkpICE9PSAocC5uZXh0LnkgPiBweSkpICYmIChweCA8IChwLm5leHQueCAtIHAueCkgKiAocHkgLSBwLnkpIC8gKHAubmV4dC55IC0gcC55KSArIHAueCkpXG4gICAgICAgICAgICBpbnNpZGUgPSAhaW5zaWRlO1xuICAgICAgICBwID0gcC5uZXh0O1xuICAgIH0gd2hpbGUgKHAgIT09IGEpO1xuXG4gICAgcmV0dXJuIGluc2lkZTtcbn1cblxuLy8gbGluayB0d28gcG9seWdvbiB2ZXJ0aWNlcyB3aXRoIGEgYnJpZGdlOyBpZiB0aGUgdmVydGljZXMgYmVsb25nIHRvIHRoZSBzYW1lIHJpbmcsIGl0IHNwbGl0cyBwb2x5Z29uIGludG8gdHdvO1xuLy8gaWYgb25lIGJlbG9uZ3MgdG8gdGhlIG91dGVyIHJpbmcgYW5kIGFub3RoZXIgdG8gYSBob2xlLCBpdCBtZXJnZXMgaXQgaW50byBhIHNpbmdsZSByaW5nXG5mdW5jdGlvbiBzcGxpdFBvbHlnb24oYSwgYikge1xuICAgIHZhciBhMiA9IG5ldyBOb2RlKGEuaSwgYS54LCBhLnkpLFxuICAgICAgICBiMiA9IG5ldyBOb2RlKGIuaSwgYi54LCBiLnkpLFxuICAgICAgICBhbiA9IGEubmV4dCxcbiAgICAgICAgYnAgPSBiLnByZXY7XG5cbiAgICBhLm5leHQgPSBiO1xuICAgIGIucHJldiA9IGE7XG5cbiAgICBhMi5uZXh0ID0gYW47XG4gICAgYW4ucHJldiA9IGEyO1xuXG4gICAgYjIubmV4dCA9IGEyO1xuICAgIGEyLnByZXYgPSBiMjtcblxuICAgIGJwLm5leHQgPSBiMjtcbiAgICBiMi5wcmV2ID0gYnA7XG5cbiAgICByZXR1cm4gYjI7XG59XG5cbi8vIGNyZWF0ZSBhIG5vZGUgYW5kIG9wdGlvbmFsbHkgbGluayBpdCB3aXRoIHByZXZpb3VzIG9uZSAoaW4gYSBjaXJjdWxhciBkb3VibHkgbGlua2VkIGxpc3QpXG5mdW5jdGlvbiBpbnNlcnROb2RlKGksIHgsIHksIGxhc3QpIHtcbiAgICB2YXIgcCA9IG5ldyBOb2RlKGksIHgsIHkpO1xuXG4gICAgaWYgKCFsYXN0KSB7XG4gICAgICAgIHAucHJldiA9IHA7XG4gICAgICAgIHAubmV4dCA9IHA7XG5cbiAgICB9IGVsc2Uge1xuICAgICAgICBwLm5leHQgPSBsYXN0Lm5leHQ7XG4gICAgICAgIHAucHJldiA9IGxhc3Q7XG4gICAgICAgIGxhc3QubmV4dC5wcmV2ID0gcDtcbiAgICAgICAgbGFzdC5uZXh0ID0gcDtcbiAgICB9XG4gICAgcmV0dXJuIHA7XG59XG5cbmZ1bmN0aW9uIHJlbW92ZU5vZGUocCkge1xuICAgIHAubmV4dC5wcmV2ID0gcC5wcmV2O1xuICAgIHAucHJldi5uZXh0ID0gcC5uZXh0O1xuXG4gICAgaWYgKHAucHJldlopIHAucHJldloubmV4dFogPSBwLm5leHRaO1xuICAgIGlmIChwLm5leHRaKSBwLm5leHRaLnByZXZaID0gcC5wcmV2Wjtcbn1cblxuZnVuY3Rpb24gTm9kZShpLCB4LCB5KSB7XG4gICAgLy8gdmVydGljZSBpbmRleCBpbiBjb29yZGluYXRlcyBhcnJheVxuICAgIHRoaXMuaSA9IGk7XG5cbiAgICAvLyB2ZXJ0ZXggY29vcmRpbmF0ZXNcbiAgICB0aGlzLnggPSB4O1xuICAgIHRoaXMueSA9IHk7XG5cbiAgICAvLyBwcmV2aW91cyBhbmQgbmV4dCB2ZXJ0aWNlIG5vZGVzIGluIGEgcG9seWdvbiByaW5nXG4gICAgdGhpcy5wcmV2ID0gbnVsbDtcbiAgICB0aGlzLm5leHQgPSBudWxsO1xuXG4gICAgLy8gei1vcmRlciBjdXJ2ZSB2YWx1ZVxuICAgIHRoaXMueiA9IG51bGw7XG5cbiAgICAvLyBwcmV2aW91cyBhbmQgbmV4dCBub2RlcyBpbiB6LW9yZGVyXG4gICAgdGhpcy5wcmV2WiA9IG51bGw7XG4gICAgdGhpcy5uZXh0WiA9IG51bGw7XG5cbiAgICAvLyBpbmRpY2F0ZXMgd2hldGhlciB0aGlzIGlzIGEgc3RlaW5lciBwb2ludFxuICAgIHRoaXMuc3RlaW5lciA9IGZhbHNlO1xufVxuIiwiJ3VzZSBzdHJpY3QnO1xuXG4vL1xuLy8gV2Ugc3RvcmUgb3VyIEVFIG9iamVjdHMgaW4gYSBwbGFpbiBvYmplY3Qgd2hvc2UgcHJvcGVydGllcyBhcmUgZXZlbnQgbmFtZXMuXG4vLyBJZiBgT2JqZWN0LmNyZWF0ZShudWxsKWAgaXMgbm90IHN1cHBvcnRlZCB3ZSBwcmVmaXggdGhlIGV2ZW50IG5hbWVzIHdpdGggYVxuLy8gYH5gIHRvIG1ha2Ugc3VyZSB0aGF0IHRoZSBidWlsdC1pbiBvYmplY3QgcHJvcGVydGllcyBhcmUgbm90IG92ZXJyaWRkZW4gb3Jcbi8vIHVzZWQgYXMgYW4gYXR0YWNrIHZlY3Rvci5cbi8vIFdlIGFsc28gYXNzdW1lIHRoYXQgYE9iamVjdC5jcmVhdGUobnVsbClgIGlzIGF2YWlsYWJsZSB3aGVuIHRoZSBldmVudCBuYW1lXG4vLyBpcyBhbiBFUzYgU3ltYm9sLlxuLy9cbnZhciBwcmVmaXggPSB0eXBlb2YgT2JqZWN0LmNyZWF0ZSAhPT0gJ2Z1bmN0aW9uJyA/ICd+JyA6IGZhbHNlO1xuXG4vKipcbiAqIFJlcHJlc2VudGF0aW9uIG9mIGEgc2luZ2xlIEV2ZW50RW1pdHRlciBmdW5jdGlvbi5cbiAqXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmbiBFdmVudCBoYW5kbGVyIHRvIGJlIGNhbGxlZC5cbiAqIEBwYXJhbSB7TWl4ZWR9IGNvbnRleHQgQ29udGV4dCBmb3IgZnVuY3Rpb24gZXhlY3V0aW9uLlxuICogQHBhcmFtIHtCb29sZWFufSBvbmNlIE9ubHkgZW1pdCBvbmNlXG4gKiBAYXBpIHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gRUUoZm4sIGNvbnRleHQsIG9uY2UpIHtcbiAgdGhpcy5mbiA9IGZuO1xuICB0aGlzLmNvbnRleHQgPSBjb250ZXh0O1xuICB0aGlzLm9uY2UgPSBvbmNlIHx8IGZhbHNlO1xufVxuXG4vKipcbiAqIE1pbmltYWwgRXZlbnRFbWl0dGVyIGludGVyZmFjZSB0aGF0IGlzIG1vbGRlZCBhZ2FpbnN0IHRoZSBOb2RlLmpzXG4gKiBFdmVudEVtaXR0ZXIgaW50ZXJmYWNlLlxuICpcbiAqIEBjb25zdHJ1Y3RvclxuICogQGFwaSBwdWJsaWNcbiAqL1xuZnVuY3Rpb24gRXZlbnRFbWl0dGVyKCkgeyAvKiBOb3RoaW5nIHRvIHNldCAqLyB9XG5cbi8qKlxuICogSG9sZHMgdGhlIGFzc2lnbmVkIEV2ZW50RW1pdHRlcnMgYnkgbmFtZS5cbiAqXG4gKiBAdHlwZSB7T2JqZWN0fVxuICogQHByaXZhdGVcbiAqL1xuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5fZXZlbnRzID0gdW5kZWZpbmVkO1xuXG4vKipcbiAqIFJldHVybiBhIGxpc3Qgb2YgYXNzaWduZWQgZXZlbnQgbGlzdGVuZXJzLlxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBldmVudCBUaGUgZXZlbnRzIHRoYXQgc2hvdWxkIGJlIGxpc3RlZC5cbiAqIEBwYXJhbSB7Qm9vbGVhbn0gZXhpc3RzIFdlIG9ubHkgbmVlZCB0byBrbm93IGlmIHRoZXJlIGFyZSBsaXN0ZW5lcnMuXG4gKiBAcmV0dXJucyB7QXJyYXl8Qm9vbGVhbn1cbiAqIEBhcGkgcHVibGljXG4gKi9cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUubGlzdGVuZXJzID0gZnVuY3Rpb24gbGlzdGVuZXJzKGV2ZW50LCBleGlzdHMpIHtcbiAgdmFyIGV2dCA9IHByZWZpeCA/IHByZWZpeCArIGV2ZW50IDogZXZlbnRcbiAgICAsIGF2YWlsYWJsZSA9IHRoaXMuX2V2ZW50cyAmJiB0aGlzLl9ldmVudHNbZXZ0XTtcblxuICBpZiAoZXhpc3RzKSByZXR1cm4gISFhdmFpbGFibGU7XG4gIGlmICghYXZhaWxhYmxlKSByZXR1cm4gW107XG4gIGlmIChhdmFpbGFibGUuZm4pIHJldHVybiBbYXZhaWxhYmxlLmZuXTtcblxuICBmb3IgKHZhciBpID0gMCwgbCA9IGF2YWlsYWJsZS5sZW5ndGgsIGVlID0gbmV3IEFycmF5KGwpOyBpIDwgbDsgaSsrKSB7XG4gICAgZWVbaV0gPSBhdmFpbGFibGVbaV0uZm47XG4gIH1cblxuICByZXR1cm4gZWU7XG59O1xuXG4vKipcbiAqIEVtaXQgYW4gZXZlbnQgdG8gYWxsIHJlZ2lzdGVyZWQgZXZlbnQgbGlzdGVuZXJzLlxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBldmVudCBUaGUgbmFtZSBvZiB0aGUgZXZlbnQuXG4gKiBAcmV0dXJucyB7Qm9vbGVhbn0gSW5kaWNhdGlvbiBpZiB3ZSd2ZSBlbWl0dGVkIGFuIGV2ZW50LlxuICogQGFwaSBwdWJsaWNcbiAqL1xuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5lbWl0ID0gZnVuY3Rpb24gZW1pdChldmVudCwgYTEsIGEyLCBhMywgYTQsIGE1KSB7XG4gIHZhciBldnQgPSBwcmVmaXggPyBwcmVmaXggKyBldmVudCA6IGV2ZW50O1xuXG4gIGlmICghdGhpcy5fZXZlbnRzIHx8ICF0aGlzLl9ldmVudHNbZXZ0XSkgcmV0dXJuIGZhbHNlO1xuXG4gIHZhciBsaXN0ZW5lcnMgPSB0aGlzLl9ldmVudHNbZXZ0XVxuICAgICwgbGVuID0gYXJndW1lbnRzLmxlbmd0aFxuICAgICwgYXJnc1xuICAgICwgaTtcblxuICBpZiAoJ2Z1bmN0aW9uJyA9PT0gdHlwZW9mIGxpc3RlbmVycy5mbikge1xuICAgIGlmIChsaXN0ZW5lcnMub25jZSkgdGhpcy5yZW1vdmVMaXN0ZW5lcihldmVudCwgbGlzdGVuZXJzLmZuLCB1bmRlZmluZWQsIHRydWUpO1xuXG4gICAgc3dpdGNoIChsZW4pIHtcbiAgICAgIGNhc2UgMTogcmV0dXJuIGxpc3RlbmVycy5mbi5jYWxsKGxpc3RlbmVycy5jb250ZXh0KSwgdHJ1ZTtcbiAgICAgIGNhc2UgMjogcmV0dXJuIGxpc3RlbmVycy5mbi5jYWxsKGxpc3RlbmVycy5jb250ZXh0LCBhMSksIHRydWU7XG4gICAgICBjYXNlIDM6IHJldHVybiBsaXN0ZW5lcnMuZm4uY2FsbChsaXN0ZW5lcnMuY29udGV4dCwgYTEsIGEyKSwgdHJ1ZTtcbiAgICAgIGNhc2UgNDogcmV0dXJuIGxpc3RlbmVycy5mbi5jYWxsKGxpc3RlbmVycy5jb250ZXh0LCBhMSwgYTIsIGEzKSwgdHJ1ZTtcbiAgICAgIGNhc2UgNTogcmV0dXJuIGxpc3RlbmVycy5mbi5jYWxsKGxpc3RlbmVycy5jb250ZXh0LCBhMSwgYTIsIGEzLCBhNCksIHRydWU7XG4gICAgICBjYXNlIDY6IHJldHVybiBsaXN0ZW5lcnMuZm4uY2FsbChsaXN0ZW5lcnMuY29udGV4dCwgYTEsIGEyLCBhMywgYTQsIGE1KSwgdHJ1ZTtcbiAgICB9XG5cbiAgICBmb3IgKGkgPSAxLCBhcmdzID0gbmV3IEFycmF5KGxlbiAtMSk7IGkgPCBsZW47IGkrKykge1xuICAgICAgYXJnc1tpIC0gMV0gPSBhcmd1bWVudHNbaV07XG4gICAgfVxuXG4gICAgbGlzdGVuZXJzLmZuLmFwcGx5KGxpc3RlbmVycy5jb250ZXh0LCBhcmdzKTtcbiAgfSBlbHNlIHtcbiAgICB2YXIgbGVuZ3RoID0gbGlzdGVuZXJzLmxlbmd0aFxuICAgICAgLCBqO1xuXG4gICAgZm9yIChpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAobGlzdGVuZXJzW2ldLm9uY2UpIHRoaXMucmVtb3ZlTGlzdGVuZXIoZXZlbnQsIGxpc3RlbmVyc1tpXS5mbiwgdW5kZWZpbmVkLCB0cnVlKTtcblxuICAgICAgc3dpdGNoIChsZW4pIHtcbiAgICAgICAgY2FzZSAxOiBsaXN0ZW5lcnNbaV0uZm4uY2FsbChsaXN0ZW5lcnNbaV0uY29udGV4dCk7IGJyZWFrO1xuICAgICAgICBjYXNlIDI6IGxpc3RlbmVyc1tpXS5mbi5jYWxsKGxpc3RlbmVyc1tpXS5jb250ZXh0LCBhMSk7IGJyZWFrO1xuICAgICAgICBjYXNlIDM6IGxpc3RlbmVyc1tpXS5mbi5jYWxsKGxpc3RlbmVyc1tpXS5jb250ZXh0LCBhMSwgYTIpOyBicmVhaztcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICBpZiAoIWFyZ3MpIGZvciAoaiA9IDEsIGFyZ3MgPSBuZXcgQXJyYXkobGVuIC0xKTsgaiA8IGxlbjsgaisrKSB7XG4gICAgICAgICAgICBhcmdzW2ogLSAxXSA9IGFyZ3VtZW50c1tqXTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBsaXN0ZW5lcnNbaV0uZm4uYXBwbHkobGlzdGVuZXJzW2ldLmNvbnRleHQsIGFyZ3MpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiB0cnVlO1xufTtcblxuLyoqXG4gKiBSZWdpc3RlciBhIG5ldyBFdmVudExpc3RlbmVyIGZvciB0aGUgZ2l2ZW4gZXZlbnQuXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IGV2ZW50IE5hbWUgb2YgdGhlIGV2ZW50LlxuICogQHBhcmFtIHtGdW5jdG9ufSBmbiBDYWxsYmFjayBmdW5jdGlvbi5cbiAqIEBwYXJhbSB7TWl4ZWR9IGNvbnRleHQgVGhlIGNvbnRleHQgb2YgdGhlIGZ1bmN0aW9uLlxuICogQGFwaSBwdWJsaWNcbiAqL1xuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5vbiA9IGZ1bmN0aW9uIG9uKGV2ZW50LCBmbiwgY29udGV4dCkge1xuICB2YXIgbGlzdGVuZXIgPSBuZXcgRUUoZm4sIGNvbnRleHQgfHwgdGhpcylcbiAgICAsIGV2dCA9IHByZWZpeCA/IHByZWZpeCArIGV2ZW50IDogZXZlbnQ7XG5cbiAgaWYgKCF0aGlzLl9ldmVudHMpIHRoaXMuX2V2ZW50cyA9IHByZWZpeCA/IHt9IDogT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgaWYgKCF0aGlzLl9ldmVudHNbZXZ0XSkgdGhpcy5fZXZlbnRzW2V2dF0gPSBsaXN0ZW5lcjtcbiAgZWxzZSB7XG4gICAgaWYgKCF0aGlzLl9ldmVudHNbZXZ0XS5mbikgdGhpcy5fZXZlbnRzW2V2dF0ucHVzaChsaXN0ZW5lcik7XG4gICAgZWxzZSB0aGlzLl9ldmVudHNbZXZ0XSA9IFtcbiAgICAgIHRoaXMuX2V2ZW50c1tldnRdLCBsaXN0ZW5lclxuICAgIF07XG4gIH1cblxuICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogQWRkIGFuIEV2ZW50TGlzdGVuZXIgdGhhdCdzIG9ubHkgY2FsbGVkIG9uY2UuXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IGV2ZW50IE5hbWUgb2YgdGhlIGV2ZW50LlxuICogQHBhcmFtIHtGdW5jdGlvbn0gZm4gQ2FsbGJhY2sgZnVuY3Rpb24uXG4gKiBAcGFyYW0ge01peGVkfSBjb250ZXh0IFRoZSBjb250ZXh0IG9mIHRoZSBmdW5jdGlvbi5cbiAqIEBhcGkgcHVibGljXG4gKi9cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUub25jZSA9IGZ1bmN0aW9uIG9uY2UoZXZlbnQsIGZuLCBjb250ZXh0KSB7XG4gIHZhciBsaXN0ZW5lciA9IG5ldyBFRShmbiwgY29udGV4dCB8fCB0aGlzLCB0cnVlKVxuICAgICwgZXZ0ID0gcHJlZml4ID8gcHJlZml4ICsgZXZlbnQgOiBldmVudDtcblxuICBpZiAoIXRoaXMuX2V2ZW50cykgdGhpcy5fZXZlbnRzID0gcHJlZml4ID8ge30gOiBPYmplY3QuY3JlYXRlKG51bGwpO1xuICBpZiAoIXRoaXMuX2V2ZW50c1tldnRdKSB0aGlzLl9ldmVudHNbZXZ0XSA9IGxpc3RlbmVyO1xuICBlbHNlIHtcbiAgICBpZiAoIXRoaXMuX2V2ZW50c1tldnRdLmZuKSB0aGlzLl9ldmVudHNbZXZ0XS5wdXNoKGxpc3RlbmVyKTtcbiAgICBlbHNlIHRoaXMuX2V2ZW50c1tldnRdID0gW1xuICAgICAgdGhpcy5fZXZlbnRzW2V2dF0sIGxpc3RlbmVyXG4gICAgXTtcbiAgfVxuXG4gIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBSZW1vdmUgZXZlbnQgbGlzdGVuZXJzLlxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBldmVudCBUaGUgZXZlbnQgd2Ugd2FudCB0byByZW1vdmUuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmbiBUaGUgbGlzdGVuZXIgdGhhdCB3ZSBuZWVkIHRvIGZpbmQuXG4gKiBAcGFyYW0ge01peGVkfSBjb250ZXh0IE9ubHkgcmVtb3ZlIGxpc3RlbmVycyBtYXRjaGluZyB0aGlzIGNvbnRleHQuXG4gKiBAcGFyYW0ge0Jvb2xlYW59IG9uY2UgT25seSByZW1vdmUgb25jZSBsaXN0ZW5lcnMuXG4gKiBAYXBpIHB1YmxpY1xuICovXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLnJlbW92ZUxpc3RlbmVyID0gZnVuY3Rpb24gcmVtb3ZlTGlzdGVuZXIoZXZlbnQsIGZuLCBjb250ZXh0LCBvbmNlKSB7XG4gIHZhciBldnQgPSBwcmVmaXggPyBwcmVmaXggKyBldmVudCA6IGV2ZW50O1xuXG4gIGlmICghdGhpcy5fZXZlbnRzIHx8ICF0aGlzLl9ldmVudHNbZXZ0XSkgcmV0dXJuIHRoaXM7XG5cbiAgdmFyIGxpc3RlbmVycyA9IHRoaXMuX2V2ZW50c1tldnRdXG4gICAgLCBldmVudHMgPSBbXTtcblxuICBpZiAoZm4pIHtcbiAgICBpZiAobGlzdGVuZXJzLmZuKSB7XG4gICAgICBpZiAoXG4gICAgICAgICAgIGxpc3RlbmVycy5mbiAhPT0gZm5cbiAgICAgICAgfHwgKG9uY2UgJiYgIWxpc3RlbmVycy5vbmNlKVxuICAgICAgICB8fCAoY29udGV4dCAmJiBsaXN0ZW5lcnMuY29udGV4dCAhPT0gY29udGV4dClcbiAgICAgICkge1xuICAgICAgICBldmVudHMucHVzaChsaXN0ZW5lcnMpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBmb3IgKHZhciBpID0gMCwgbGVuZ3RoID0gbGlzdGVuZXJzLmxlbmd0aDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICAgICBsaXN0ZW5lcnNbaV0uZm4gIT09IGZuXG4gICAgICAgICAgfHwgKG9uY2UgJiYgIWxpc3RlbmVyc1tpXS5vbmNlKVxuICAgICAgICAgIHx8IChjb250ZXh0ICYmIGxpc3RlbmVyc1tpXS5jb250ZXh0ICE9PSBjb250ZXh0KVxuICAgICAgICApIHtcbiAgICAgICAgICBldmVudHMucHVzaChsaXN0ZW5lcnNbaV0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLy9cbiAgLy8gUmVzZXQgdGhlIGFycmF5LCBvciByZW1vdmUgaXQgY29tcGxldGVseSBpZiB3ZSBoYXZlIG5vIG1vcmUgbGlzdGVuZXJzLlxuICAvL1xuICBpZiAoZXZlbnRzLmxlbmd0aCkge1xuICAgIHRoaXMuX2V2ZW50c1tldnRdID0gZXZlbnRzLmxlbmd0aCA9PT0gMSA/IGV2ZW50c1swXSA6IGV2ZW50cztcbiAgfSBlbHNlIHtcbiAgICBkZWxldGUgdGhpcy5fZXZlbnRzW2V2dF07XG4gIH1cblxuICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogUmVtb3ZlIGFsbCBsaXN0ZW5lcnMgb3Igb25seSB0aGUgbGlzdGVuZXJzIGZvciB0aGUgc3BlY2lmaWVkIGV2ZW50LlxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBldmVudCBUaGUgZXZlbnQgd2FudCB0byByZW1vdmUgYWxsIGxpc3RlbmVycyBmb3IuXG4gKiBAYXBpIHB1YmxpY1xuICovXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLnJlbW92ZUFsbExpc3RlbmVycyA9IGZ1bmN0aW9uIHJlbW92ZUFsbExpc3RlbmVycyhldmVudCkge1xuICBpZiAoIXRoaXMuX2V2ZW50cykgcmV0dXJuIHRoaXM7XG5cbiAgaWYgKGV2ZW50KSBkZWxldGUgdGhpcy5fZXZlbnRzW3ByZWZpeCA/IHByZWZpeCArIGV2ZW50IDogZXZlbnRdO1xuICBlbHNlIHRoaXMuX2V2ZW50cyA9IHByZWZpeCA/IHt9IDogT2JqZWN0LmNyZWF0ZShudWxsKTtcblxuICByZXR1cm4gdGhpcztcbn07XG5cbi8vXG4vLyBBbGlhcyBtZXRob2RzIG5hbWVzIGJlY2F1c2UgcGVvcGxlIHJvbGwgbGlrZSB0aGF0LlxuLy9cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUub2ZmID0gRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5yZW1vdmVMaXN0ZW5lcjtcbkV2ZW50RW1pdHRlci5wcm90b3R5cGUuYWRkTGlzdGVuZXIgPSBFdmVudEVtaXR0ZXIucHJvdG90eXBlLm9uO1xuXG4vL1xuLy8gVGhpcyBmdW5jdGlvbiBkb2Vzbid0IGFwcGx5IGFueW1vcmUuXG4vL1xuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5zZXRNYXhMaXN0ZW5lcnMgPSBmdW5jdGlvbiBzZXRNYXhMaXN0ZW5lcnMoKSB7XG4gIHJldHVybiB0aGlzO1xufTtcblxuLy9cbi8vIEV4cG9zZSB0aGUgcHJlZml4LlxuLy9cbkV2ZW50RW1pdHRlci5wcmVmaXhlZCA9IHByZWZpeDtcblxuLy9cbi8vIEV4cG9zZSB0aGUgbW9kdWxlLlxuLy9cbmlmICgndW5kZWZpbmVkJyAhPT0gdHlwZW9mIG1vZHVsZSkge1xuICBtb2R1bGUuZXhwb3J0cyA9IEV2ZW50RW1pdHRlcjtcbn1cbiIsIi8qIGVzbGludC1kaXNhYmxlIG5vLXVudXNlZC12YXJzICovXG4ndXNlIHN0cmljdCc7XG52YXIgaGFzT3duUHJvcGVydHkgPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O1xudmFyIHByb3BJc0VudW1lcmFibGUgPSBPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlO1xuXG5mdW5jdGlvbiB0b09iamVjdCh2YWwpIHtcblx0aWYgKHZhbCA9PT0gbnVsbCB8fCB2YWwgPT09IHVuZGVmaW5lZCkge1xuXHRcdHRocm93IG5ldyBUeXBlRXJyb3IoJ09iamVjdC5hc3NpZ24gY2Fubm90IGJlIGNhbGxlZCB3aXRoIG51bGwgb3IgdW5kZWZpbmVkJyk7XG5cdH1cblxuXHRyZXR1cm4gT2JqZWN0KHZhbCk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0LCBzb3VyY2UpIHtcblx0dmFyIGZyb207XG5cdHZhciB0byA9IHRvT2JqZWN0KHRhcmdldCk7XG5cdHZhciBzeW1ib2xzO1xuXG5cdGZvciAodmFyIHMgPSAxOyBzIDwgYXJndW1lbnRzLmxlbmd0aDsgcysrKSB7XG5cdFx0ZnJvbSA9IE9iamVjdChhcmd1bWVudHNbc10pO1xuXG5cdFx0Zm9yICh2YXIga2V5IGluIGZyb20pIHtcblx0XHRcdGlmIChoYXNPd25Qcm9wZXJ0eS5jYWxsKGZyb20sIGtleSkpIHtcblx0XHRcdFx0dG9ba2V5XSA9IGZyb21ba2V5XTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykge1xuXHRcdFx0c3ltYm9scyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZnJvbSk7XG5cdFx0XHRmb3IgKHZhciBpID0gMDsgaSA8IHN5bWJvbHMubGVuZ3RoOyBpKyspIHtcblx0XHRcdFx0aWYgKHByb3BJc0VudW1lcmFibGUuY2FsbChmcm9tLCBzeW1ib2xzW2ldKSkge1xuXHRcdFx0XHRcdHRvW3N5bWJvbHNbaV1dID0gZnJvbVtzeW1ib2xzW2ldXTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdHJldHVybiB0bztcbn07XG4iLCIvKiFcbiAqIGFzeW5jXG4gKiBodHRwczovL2dpdGh1Yi5jb20vY2FvbGFuL2FzeW5jXG4gKlxuICogQ29weXJpZ2h0IDIwMTAtMjAxNCBDYW9sYW4gTWNNYWhvblxuICogUmVsZWFzZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlXG4gKi9cbi8qanNoaW50IG9uZXZhcjogZmFsc2UsIGluZGVudDo0ICovXG4vKmdsb2JhbCBzZXRJbW1lZGlhdGU6IGZhbHNlLCBzZXRUaW1lb3V0OiBmYWxzZSwgY29uc29sZTogZmFsc2UgKi9cbihmdW5jdGlvbiAoKSB7XG5cbiAgICB2YXIgYXN5bmMgPSB7fTtcblxuICAgIC8vIGdsb2JhbCBvbiB0aGUgc2VydmVyLCB3aW5kb3cgaW4gdGhlIGJyb3dzZXJcbiAgICB2YXIgcm9vdCwgcHJldmlvdXNfYXN5bmM7XG5cbiAgICByb290ID0gdGhpcztcbiAgICBpZiAocm9vdCAhPSBudWxsKSB7XG4gICAgICBwcmV2aW91c19hc3luYyA9IHJvb3QuYXN5bmM7XG4gICAgfVxuXG4gICAgYXN5bmMubm9Db25mbGljdCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcm9vdC5hc3luYyA9IHByZXZpb3VzX2FzeW5jO1xuICAgICAgICByZXR1cm4gYXN5bmM7XG4gICAgfTtcblxuICAgIGZ1bmN0aW9uIG9ubHlfb25jZShmbikge1xuICAgICAgICB2YXIgY2FsbGVkID0gZmFsc2U7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIGlmIChjYWxsZWQpIHRocm93IG5ldyBFcnJvcihcIkNhbGxiYWNrIHdhcyBhbHJlYWR5IGNhbGxlZC5cIik7XG4gICAgICAgICAgICBjYWxsZWQgPSB0cnVlO1xuICAgICAgICAgICAgZm4uYXBwbHkocm9vdCwgYXJndW1lbnRzKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vLy8gY3Jvc3MtYnJvd3NlciBjb21wYXRpYmxpdHkgZnVuY3Rpb25zIC8vLy9cblxuICAgIHZhciBfdG9TdHJpbmcgPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nO1xuXG4gICAgdmFyIF9pc0FycmF5ID0gQXJyYXkuaXNBcnJheSB8fCBmdW5jdGlvbiAob2JqKSB7XG4gICAgICAgIHJldHVybiBfdG9TdHJpbmcuY2FsbChvYmopID09PSAnW29iamVjdCBBcnJheV0nO1xuICAgIH07XG5cbiAgICB2YXIgX2VhY2ggPSBmdW5jdGlvbiAoYXJyLCBpdGVyYXRvcikge1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFyci5sZW5ndGg7IGkgKz0gMSkge1xuICAgICAgICAgICAgaXRlcmF0b3IoYXJyW2ldLCBpLCBhcnIpO1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIHZhciBfbWFwID0gZnVuY3Rpb24gKGFyciwgaXRlcmF0b3IpIHtcbiAgICAgICAgaWYgKGFyci5tYXApIHtcbiAgICAgICAgICAgIHJldHVybiBhcnIubWFwKGl0ZXJhdG9yKTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgcmVzdWx0cyA9IFtdO1xuICAgICAgICBfZWFjaChhcnIsIGZ1bmN0aW9uICh4LCBpLCBhKSB7XG4gICAgICAgICAgICByZXN1bHRzLnB1c2goaXRlcmF0b3IoeCwgaSwgYSkpO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdHM7XG4gICAgfTtcblxuICAgIHZhciBfcmVkdWNlID0gZnVuY3Rpb24gKGFyciwgaXRlcmF0b3IsIG1lbW8pIHtcbiAgICAgICAgaWYgKGFyci5yZWR1Y2UpIHtcbiAgICAgICAgICAgIHJldHVybiBhcnIucmVkdWNlKGl0ZXJhdG9yLCBtZW1vKTtcbiAgICAgICAgfVxuICAgICAgICBfZWFjaChhcnIsIGZ1bmN0aW9uICh4LCBpLCBhKSB7XG4gICAgICAgICAgICBtZW1vID0gaXRlcmF0b3IobWVtbywgeCwgaSwgYSk7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gbWVtbztcbiAgICB9O1xuXG4gICAgdmFyIF9rZXlzID0gZnVuY3Rpb24gKG9iaikge1xuICAgICAgICBpZiAoT2JqZWN0LmtleXMpIHtcbiAgICAgICAgICAgIHJldHVybiBPYmplY3Qua2V5cyhvYmopO1xuICAgICAgICB9XG4gICAgICAgIHZhciBrZXlzID0gW107XG4gICAgICAgIGZvciAodmFyIGsgaW4gb2JqKSB7XG4gICAgICAgICAgICBpZiAob2JqLmhhc093blByb3BlcnR5KGspKSB7XG4gICAgICAgICAgICAgICAga2V5cy5wdXNoKGspO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBrZXlzO1xuICAgIH07XG5cbiAgICAvLy8vIGV4cG9ydGVkIGFzeW5jIG1vZHVsZSBmdW5jdGlvbnMgLy8vL1xuXG4gICAgLy8vLyBuZXh0VGljayBpbXBsZW1lbnRhdGlvbiB3aXRoIGJyb3dzZXItY29tcGF0aWJsZSBmYWxsYmFjayAvLy8vXG4gICAgaWYgKHR5cGVvZiBwcm9jZXNzID09PSAndW5kZWZpbmVkJyB8fCAhKHByb2Nlc3MubmV4dFRpY2spKSB7XG4gICAgICAgIGlmICh0eXBlb2Ygc2V0SW1tZWRpYXRlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICBhc3luYy5uZXh0VGljayA9IGZ1bmN0aW9uIChmbikge1xuICAgICAgICAgICAgICAgIC8vIG5vdCBhIGRpcmVjdCBhbGlhcyBmb3IgSUUxMCBjb21wYXRpYmlsaXR5XG4gICAgICAgICAgICAgICAgc2V0SW1tZWRpYXRlKGZuKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBhc3luYy5zZXRJbW1lZGlhdGUgPSBhc3luYy5uZXh0VGljaztcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGFzeW5jLm5leHRUaWNrID0gZnVuY3Rpb24gKGZuKSB7XG4gICAgICAgICAgICAgICAgc2V0VGltZW91dChmbiwgMCk7XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgYXN5bmMuc2V0SW1tZWRpYXRlID0gYXN5bmMubmV4dFRpY2s7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIGFzeW5jLm5leHRUaWNrID0gcHJvY2Vzcy5uZXh0VGljaztcbiAgICAgICAgaWYgKHR5cGVvZiBzZXRJbW1lZGlhdGUgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICBhc3luYy5zZXRJbW1lZGlhdGUgPSBmdW5jdGlvbiAoZm4pIHtcbiAgICAgICAgICAgICAgLy8gbm90IGEgZGlyZWN0IGFsaWFzIGZvciBJRTEwIGNvbXBhdGliaWxpdHlcbiAgICAgICAgICAgICAgc2V0SW1tZWRpYXRlKGZuKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBhc3luYy5zZXRJbW1lZGlhdGUgPSBhc3luYy5uZXh0VGljaztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGFzeW5jLmVhY2ggPSBmdW5jdGlvbiAoYXJyLCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgY2FsbGJhY2sgPSBjYWxsYmFjayB8fCBmdW5jdGlvbiAoKSB7fTtcbiAgICAgICAgaWYgKCFhcnIubGVuZ3RoKSB7XG4gICAgICAgICAgICByZXR1cm4gY2FsbGJhY2soKTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgY29tcGxldGVkID0gMDtcbiAgICAgICAgX2VhY2goYXJyLCBmdW5jdGlvbiAoeCkge1xuICAgICAgICAgICAgaXRlcmF0b3IoeCwgb25seV9vbmNlKGRvbmUpICk7XG4gICAgICAgIH0pO1xuICAgICAgICBmdW5jdGlvbiBkb25lKGVycikge1xuICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgICAgY2FsbGJhY2sgPSBmdW5jdGlvbiAoKSB7fTtcbiAgICAgICAgICB9XG4gICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgIGNvbXBsZXRlZCArPSAxO1xuICAgICAgICAgICAgICBpZiAoY29tcGxldGVkID49IGFyci5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9O1xuICAgIGFzeW5jLmZvckVhY2ggPSBhc3luYy5lYWNoO1xuXG4gICAgYXN5bmMuZWFjaFNlcmllcyA9IGZ1bmN0aW9uIChhcnIsIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICBjYWxsYmFjayA9IGNhbGxiYWNrIHx8IGZ1bmN0aW9uICgpIHt9O1xuICAgICAgICBpZiAoIWFyci5sZW5ndGgpIHtcbiAgICAgICAgICAgIHJldHVybiBjYWxsYmFjaygpO1xuICAgICAgICB9XG4gICAgICAgIHZhciBjb21wbGV0ZWQgPSAwO1xuICAgICAgICB2YXIgaXRlcmF0ZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGl0ZXJhdG9yKGFycltjb21wbGV0ZWRdLCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayA9IGZ1bmN0aW9uICgpIHt9O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgY29tcGxldGVkICs9IDE7XG4gICAgICAgICAgICAgICAgICAgIGlmIChjb21wbGV0ZWQgPj0gYXJyLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGl0ZXJhdGUoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9O1xuICAgICAgICBpdGVyYXRlKCk7XG4gICAgfTtcbiAgICBhc3luYy5mb3JFYWNoU2VyaWVzID0gYXN5bmMuZWFjaFNlcmllcztcblxuICAgIGFzeW5jLmVhY2hMaW1pdCA9IGZ1bmN0aW9uIChhcnIsIGxpbWl0LCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgdmFyIGZuID0gX2VhY2hMaW1pdChsaW1pdCk7XG4gICAgICAgIGZuLmFwcGx5KG51bGwsIFthcnIsIGl0ZXJhdG9yLCBjYWxsYmFja10pO1xuICAgIH07XG4gICAgYXN5bmMuZm9yRWFjaExpbWl0ID0gYXN5bmMuZWFjaExpbWl0O1xuXG4gICAgdmFyIF9lYWNoTGltaXQgPSBmdW5jdGlvbiAobGltaXQpIHtcblxuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKGFyciwgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICBjYWxsYmFjayA9IGNhbGxiYWNrIHx8IGZ1bmN0aW9uICgpIHt9O1xuICAgICAgICAgICAgaWYgKCFhcnIubGVuZ3RoIHx8IGxpbWl0IDw9IDApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gY2FsbGJhY2soKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHZhciBjb21wbGV0ZWQgPSAwO1xuICAgICAgICAgICAgdmFyIHN0YXJ0ZWQgPSAwO1xuICAgICAgICAgICAgdmFyIHJ1bm5pbmcgPSAwO1xuXG4gICAgICAgICAgICAoZnVuY3Rpb24gcmVwbGVuaXNoICgpIHtcbiAgICAgICAgICAgICAgICBpZiAoY29tcGxldGVkID49IGFyci5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKCk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgd2hpbGUgKHJ1bm5pbmcgPCBsaW1pdCAmJiBzdGFydGVkIDwgYXJyLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICBzdGFydGVkICs9IDE7XG4gICAgICAgICAgICAgICAgICAgIHJ1bm5pbmcgKz0gMTtcbiAgICAgICAgICAgICAgICAgICAgaXRlcmF0b3IoYXJyW3N0YXJ0ZWQgLSAxXSwgZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2sgPSBmdW5jdGlvbiAoKSB7fTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBsZXRlZCArPSAxO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJ1bm5pbmcgLT0gMTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY29tcGxldGVkID49IGFyci5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcGxlbmlzaCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSkoKTtcbiAgICAgICAgfTtcbiAgICB9O1xuXG5cbiAgICB2YXIgZG9QYXJhbGxlbCA9IGZ1bmN0aW9uIChmbikge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIGFyZ3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMpO1xuICAgICAgICAgICAgcmV0dXJuIGZuLmFwcGx5KG51bGwsIFthc3luYy5lYWNoXS5jb25jYXQoYXJncykpO1xuICAgICAgICB9O1xuICAgIH07XG4gICAgdmFyIGRvUGFyYWxsZWxMaW1pdCA9IGZ1bmN0aW9uKGxpbWl0LCBmbikge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIGFyZ3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMpO1xuICAgICAgICAgICAgcmV0dXJuIGZuLmFwcGx5KG51bGwsIFtfZWFjaExpbWl0KGxpbWl0KV0uY29uY2F0KGFyZ3MpKTtcbiAgICAgICAgfTtcbiAgICB9O1xuICAgIHZhciBkb1NlcmllcyA9IGZ1bmN0aW9uIChmbikge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIGFyZ3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMpO1xuICAgICAgICAgICAgcmV0dXJuIGZuLmFwcGx5KG51bGwsIFthc3luYy5lYWNoU2VyaWVzXS5jb25jYXQoYXJncykpO1xuICAgICAgICB9O1xuICAgIH07XG5cblxuICAgIHZhciBfYXN5bmNNYXAgPSBmdW5jdGlvbiAoZWFjaGZuLCBhcnIsIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICBhcnIgPSBfbWFwKGFyciwgZnVuY3Rpb24gKHgsIGkpIHtcbiAgICAgICAgICAgIHJldHVybiB7aW5kZXg6IGksIHZhbHVlOiB4fTtcbiAgICAgICAgfSk7XG4gICAgICAgIGlmICghY2FsbGJhY2spIHtcbiAgICAgICAgICAgIGVhY2hmbihhcnIsIGZ1bmN0aW9uICh4LCBjYWxsYmFjaykge1xuICAgICAgICAgICAgICAgIGl0ZXJhdG9yKHgudmFsdWUsIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdmFyIHJlc3VsdHMgPSBbXTtcbiAgICAgICAgICAgIGVhY2hmbihhcnIsIGZ1bmN0aW9uICh4LCBjYWxsYmFjaykge1xuICAgICAgICAgICAgICAgIGl0ZXJhdG9yKHgudmFsdWUsIGZ1bmN0aW9uIChlcnIsIHYpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0c1t4LmluZGV4XSA9IHY7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9LCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2soZXJyLCByZXN1bHRzKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBhc3luYy5tYXAgPSBkb1BhcmFsbGVsKF9hc3luY01hcCk7XG4gICAgYXN5bmMubWFwU2VyaWVzID0gZG9TZXJpZXMoX2FzeW5jTWFwKTtcbiAgICBhc3luYy5tYXBMaW1pdCA9IGZ1bmN0aW9uIChhcnIsIGxpbWl0LCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgcmV0dXJuIF9tYXBMaW1pdChsaW1pdCkoYXJyLCBpdGVyYXRvciwgY2FsbGJhY2spO1xuICAgIH07XG5cbiAgICB2YXIgX21hcExpbWl0ID0gZnVuY3Rpb24obGltaXQpIHtcbiAgICAgICAgcmV0dXJuIGRvUGFyYWxsZWxMaW1pdChsaW1pdCwgX2FzeW5jTWFwKTtcbiAgICB9O1xuXG4gICAgLy8gcmVkdWNlIG9ubHkgaGFzIGEgc2VyaWVzIHZlcnNpb24sIGFzIGRvaW5nIHJlZHVjZSBpbiBwYXJhbGxlbCB3b24ndFxuICAgIC8vIHdvcmsgaW4gbWFueSBzaXR1YXRpb25zLlxuICAgIGFzeW5jLnJlZHVjZSA9IGZ1bmN0aW9uIChhcnIsIG1lbW8sIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICBhc3luYy5lYWNoU2VyaWVzKGFyciwgZnVuY3Rpb24gKHgsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICBpdGVyYXRvcihtZW1vLCB4LCBmdW5jdGlvbiAoZXJyLCB2KSB7XG4gICAgICAgICAgICAgICAgbWVtbyA9IHY7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICBjYWxsYmFjayhlcnIsIG1lbW8pO1xuICAgICAgICB9KTtcbiAgICB9O1xuICAgIC8vIGluamVjdCBhbGlhc1xuICAgIGFzeW5jLmluamVjdCA9IGFzeW5jLnJlZHVjZTtcbiAgICAvLyBmb2xkbCBhbGlhc1xuICAgIGFzeW5jLmZvbGRsID0gYXN5bmMucmVkdWNlO1xuXG4gICAgYXN5bmMucmVkdWNlUmlnaHQgPSBmdW5jdGlvbiAoYXJyLCBtZW1vLCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgdmFyIHJldmVyc2VkID0gX21hcChhcnIsIGZ1bmN0aW9uICh4KSB7XG4gICAgICAgICAgICByZXR1cm4geDtcbiAgICAgICAgfSkucmV2ZXJzZSgpO1xuICAgICAgICBhc3luYy5yZWR1Y2UocmV2ZXJzZWQsIG1lbW8sIGl0ZXJhdG9yLCBjYWxsYmFjayk7XG4gICAgfTtcbiAgICAvLyBmb2xkciBhbGlhc1xuICAgIGFzeW5jLmZvbGRyID0gYXN5bmMucmVkdWNlUmlnaHQ7XG5cbiAgICB2YXIgX2ZpbHRlciA9IGZ1bmN0aW9uIChlYWNoZm4sIGFyciwgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgIHZhciByZXN1bHRzID0gW107XG4gICAgICAgIGFyciA9IF9tYXAoYXJyLCBmdW5jdGlvbiAoeCwgaSkge1xuICAgICAgICAgICAgcmV0dXJuIHtpbmRleDogaSwgdmFsdWU6IHh9O1xuICAgICAgICB9KTtcbiAgICAgICAgZWFjaGZuKGFyciwgZnVuY3Rpb24gKHgsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICBpdGVyYXRvcih4LnZhbHVlLCBmdW5jdGlvbiAodikge1xuICAgICAgICAgICAgICAgIGlmICh2KSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdHMucHVzaCh4KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2FsbGJhY2soKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICBjYWxsYmFjayhfbWFwKHJlc3VsdHMuc29ydChmdW5jdGlvbiAoYSwgYikge1xuICAgICAgICAgICAgICAgIHJldHVybiBhLmluZGV4IC0gYi5pbmRleDtcbiAgICAgICAgICAgIH0pLCBmdW5jdGlvbiAoeCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB4LnZhbHVlO1xuICAgICAgICAgICAgfSkpO1xuICAgICAgICB9KTtcbiAgICB9O1xuICAgIGFzeW5jLmZpbHRlciA9IGRvUGFyYWxsZWwoX2ZpbHRlcik7XG4gICAgYXN5bmMuZmlsdGVyU2VyaWVzID0gZG9TZXJpZXMoX2ZpbHRlcik7XG4gICAgLy8gc2VsZWN0IGFsaWFzXG4gICAgYXN5bmMuc2VsZWN0ID0gYXN5bmMuZmlsdGVyO1xuICAgIGFzeW5jLnNlbGVjdFNlcmllcyA9IGFzeW5jLmZpbHRlclNlcmllcztcblxuICAgIHZhciBfcmVqZWN0ID0gZnVuY3Rpb24gKGVhY2hmbiwgYXJyLCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgdmFyIHJlc3VsdHMgPSBbXTtcbiAgICAgICAgYXJyID0gX21hcChhcnIsIGZ1bmN0aW9uICh4LCBpKSB7XG4gICAgICAgICAgICByZXR1cm4ge2luZGV4OiBpLCB2YWx1ZTogeH07XG4gICAgICAgIH0pO1xuICAgICAgICBlYWNoZm4oYXJyLCBmdW5jdGlvbiAoeCwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIGl0ZXJhdG9yKHgudmFsdWUsIGZ1bmN0aW9uICh2KSB7XG4gICAgICAgICAgICAgICAgaWYgKCF2KSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdHMucHVzaCh4KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2FsbGJhY2soKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICBjYWxsYmFjayhfbWFwKHJlc3VsdHMuc29ydChmdW5jdGlvbiAoYSwgYikge1xuICAgICAgICAgICAgICAgIHJldHVybiBhLmluZGV4IC0gYi5pbmRleDtcbiAgICAgICAgICAgIH0pLCBmdW5jdGlvbiAoeCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB4LnZhbHVlO1xuICAgICAgICAgICAgfSkpO1xuICAgICAgICB9KTtcbiAgICB9O1xuICAgIGFzeW5jLnJlamVjdCA9IGRvUGFyYWxsZWwoX3JlamVjdCk7XG4gICAgYXN5bmMucmVqZWN0U2VyaWVzID0gZG9TZXJpZXMoX3JlamVjdCk7XG5cbiAgICB2YXIgX2RldGVjdCA9IGZ1bmN0aW9uIChlYWNoZm4sIGFyciwgaXRlcmF0b3IsIG1haW5fY2FsbGJhY2spIHtcbiAgICAgICAgZWFjaGZuKGFyciwgZnVuY3Rpb24gKHgsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICBpdGVyYXRvcih4LCBmdW5jdGlvbiAocmVzdWx0KSB7XG4gICAgICAgICAgICAgICAgaWYgKHJlc3VsdCkge1xuICAgICAgICAgICAgICAgICAgICBtYWluX2NhbGxiYWNrKHgpO1xuICAgICAgICAgICAgICAgICAgICBtYWluX2NhbGxiYWNrID0gZnVuY3Rpb24gKCkge307XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICBtYWluX2NhbGxiYWNrKCk7XG4gICAgICAgIH0pO1xuICAgIH07XG4gICAgYXN5bmMuZGV0ZWN0ID0gZG9QYXJhbGxlbChfZGV0ZWN0KTtcbiAgICBhc3luYy5kZXRlY3RTZXJpZXMgPSBkb1NlcmllcyhfZGV0ZWN0KTtcblxuICAgIGFzeW5jLnNvbWUgPSBmdW5jdGlvbiAoYXJyLCBpdGVyYXRvciwgbWFpbl9jYWxsYmFjaykge1xuICAgICAgICBhc3luYy5lYWNoKGFyciwgZnVuY3Rpb24gKHgsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICBpdGVyYXRvcih4LCBmdW5jdGlvbiAodikge1xuICAgICAgICAgICAgICAgIGlmICh2KSB7XG4gICAgICAgICAgICAgICAgICAgIG1haW5fY2FsbGJhY2sodHJ1ZSk7XG4gICAgICAgICAgICAgICAgICAgIG1haW5fY2FsbGJhY2sgPSBmdW5jdGlvbiAoKSB7fTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2FsbGJhY2soKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICBtYWluX2NhbGxiYWNrKGZhbHNlKTtcbiAgICAgICAgfSk7XG4gICAgfTtcbiAgICAvLyBhbnkgYWxpYXNcbiAgICBhc3luYy5hbnkgPSBhc3luYy5zb21lO1xuXG4gICAgYXN5bmMuZXZlcnkgPSBmdW5jdGlvbiAoYXJyLCBpdGVyYXRvciwgbWFpbl9jYWxsYmFjaykge1xuICAgICAgICBhc3luYy5lYWNoKGFyciwgZnVuY3Rpb24gKHgsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICBpdGVyYXRvcih4LCBmdW5jdGlvbiAodikge1xuICAgICAgICAgICAgICAgIGlmICghdikge1xuICAgICAgICAgICAgICAgICAgICBtYWluX2NhbGxiYWNrKGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgICAgbWFpbl9jYWxsYmFjayA9IGZ1bmN0aW9uICgpIHt9O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgIG1haW5fY2FsbGJhY2sodHJ1ZSk7XG4gICAgICAgIH0pO1xuICAgIH07XG4gICAgLy8gYWxsIGFsaWFzXG4gICAgYXN5bmMuYWxsID0gYXN5bmMuZXZlcnk7XG5cbiAgICBhc3luYy5zb3J0QnkgPSBmdW5jdGlvbiAoYXJyLCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgYXN5bmMubWFwKGFyciwgZnVuY3Rpb24gKHgsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICBpdGVyYXRvcih4LCBmdW5jdGlvbiAoZXJyLCBjcml0ZXJpYSkge1xuICAgICAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKG51bGwsIHt2YWx1ZTogeCwgY3JpdGVyaWE6IGNyaXRlcmlhfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sIGZ1bmN0aW9uIChlcnIsIHJlc3VsdHMpIHtcbiAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHZhciBmbiA9IGZ1bmN0aW9uIChsZWZ0LCByaWdodCkge1xuICAgICAgICAgICAgICAgICAgICB2YXIgYSA9IGxlZnQuY3JpdGVyaWEsIGIgPSByaWdodC5jcml0ZXJpYTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGEgPCBiID8gLTEgOiBhID4gYiA/IDEgOiAwO1xuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgY2FsbGJhY2sobnVsbCwgX21hcChyZXN1bHRzLnNvcnQoZm4pLCBmdW5jdGlvbiAoeCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4geC52YWx1ZTtcbiAgICAgICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH07XG5cbiAgICBhc3luYy5hdXRvID0gZnVuY3Rpb24gKHRhc2tzLCBjYWxsYmFjaykge1xuICAgICAgICBjYWxsYmFjayA9IGNhbGxiYWNrIHx8IGZ1bmN0aW9uICgpIHt9O1xuICAgICAgICB2YXIga2V5cyA9IF9rZXlzKHRhc2tzKTtcbiAgICAgICAgdmFyIHJlbWFpbmluZ1Rhc2tzID0ga2V5cy5sZW5ndGhcbiAgICAgICAgaWYgKCFyZW1haW5pbmdUYXNrcykge1xuICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKCk7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgcmVzdWx0cyA9IHt9O1xuXG4gICAgICAgIHZhciBsaXN0ZW5lcnMgPSBbXTtcbiAgICAgICAgdmFyIGFkZExpc3RlbmVyID0gZnVuY3Rpb24gKGZuKSB7XG4gICAgICAgICAgICBsaXN0ZW5lcnMudW5zaGlmdChmbik7XG4gICAgICAgIH07XG4gICAgICAgIHZhciByZW1vdmVMaXN0ZW5lciA9IGZ1bmN0aW9uIChmbikge1xuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsaXN0ZW5lcnMubGVuZ3RoOyBpICs9IDEpIHtcbiAgICAgICAgICAgICAgICBpZiAobGlzdGVuZXJzW2ldID09PSBmbikge1xuICAgICAgICAgICAgICAgICAgICBsaXN0ZW5lcnMuc3BsaWNlKGksIDEpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICB2YXIgdGFza0NvbXBsZXRlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmVtYWluaW5nVGFza3MtLVxuICAgICAgICAgICAgX2VhY2gobGlzdGVuZXJzLnNsaWNlKDApLCBmdW5jdGlvbiAoZm4pIHtcbiAgICAgICAgICAgICAgICBmbigpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH07XG5cbiAgICAgICAgYWRkTGlzdGVuZXIoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgaWYgKCFyZW1haW5pbmdUYXNrcykge1xuICAgICAgICAgICAgICAgIHZhciB0aGVDYWxsYmFjayA9IGNhbGxiYWNrO1xuICAgICAgICAgICAgICAgIC8vIHByZXZlbnQgZmluYWwgY2FsbGJhY2sgZnJvbSBjYWxsaW5nIGl0c2VsZiBpZiBpdCBlcnJvcnNcbiAgICAgICAgICAgICAgICBjYWxsYmFjayA9IGZ1bmN0aW9uICgpIHt9O1xuXG4gICAgICAgICAgICAgICAgdGhlQ2FsbGJhY2sobnVsbCwgcmVzdWx0cyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIF9lYWNoKGtleXMsIGZ1bmN0aW9uIChrKSB7XG4gICAgICAgICAgICB2YXIgdGFzayA9IF9pc0FycmF5KHRhc2tzW2tdKSA/IHRhc2tzW2tdOiBbdGFza3Nba11dO1xuICAgICAgICAgICAgdmFyIHRhc2tDYWxsYmFjayA9IGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgICAgICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMSk7XG4gICAgICAgICAgICAgICAgaWYgKGFyZ3MubGVuZ3RoIDw9IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgYXJncyA9IGFyZ3NbMF07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHNhZmVSZXN1bHRzID0ge307XG4gICAgICAgICAgICAgICAgICAgIF9lYWNoKF9rZXlzKHJlc3VsdHMpLCBmdW5jdGlvbihya2V5KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzYWZlUmVzdWx0c1tya2V5XSA9IHJlc3VsdHNbcmtleV07XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICBzYWZlUmVzdWx0c1trXSA9IGFyZ3M7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKGVyciwgc2FmZVJlc3VsdHMpO1xuICAgICAgICAgICAgICAgICAgICAvLyBzdG9wIHN1YnNlcXVlbnQgZXJyb3JzIGhpdHRpbmcgY2FsbGJhY2sgbXVsdGlwbGUgdGltZXNcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2sgPSBmdW5jdGlvbiAoKSB7fTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdHNba10gPSBhcmdzO1xuICAgICAgICAgICAgICAgICAgICBhc3luYy5zZXRJbW1lZGlhdGUodGFza0NvbXBsZXRlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgdmFyIHJlcXVpcmVzID0gdGFzay5zbGljZSgwLCBNYXRoLmFicyh0YXNrLmxlbmd0aCAtIDEpKSB8fCBbXTtcbiAgICAgICAgICAgIHZhciByZWFkeSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gX3JlZHVjZShyZXF1aXJlcywgZnVuY3Rpb24gKGEsIHgpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChhICYmIHJlc3VsdHMuaGFzT3duUHJvcGVydHkoeCkpO1xuICAgICAgICAgICAgICAgIH0sIHRydWUpICYmICFyZXN1bHRzLmhhc093blByb3BlcnR5KGspO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGlmIChyZWFkeSgpKSB7XG4gICAgICAgICAgICAgICAgdGFza1t0YXNrLmxlbmd0aCAtIDFdKHRhc2tDYWxsYmFjaywgcmVzdWx0cyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICB2YXIgbGlzdGVuZXIgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChyZWFkeSgpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZW1vdmVMaXN0ZW5lcihsaXN0ZW5lcik7XG4gICAgICAgICAgICAgICAgICAgICAgICB0YXNrW3Rhc2subGVuZ3RoIC0gMV0odGFza0NhbGxiYWNrLCByZXN1bHRzKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgYWRkTGlzdGVuZXIobGlzdGVuZXIpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9O1xuXG4gICAgYXN5bmMucmV0cnkgPSBmdW5jdGlvbih0aW1lcywgdGFzaywgY2FsbGJhY2spIHtcbiAgICAgICAgdmFyIERFRkFVTFRfVElNRVMgPSA1O1xuICAgICAgICB2YXIgYXR0ZW1wdHMgPSBbXTtcbiAgICAgICAgLy8gVXNlIGRlZmF1bHRzIGlmIHRpbWVzIG5vdCBwYXNzZWRcbiAgICAgICAgaWYgKHR5cGVvZiB0aW1lcyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgY2FsbGJhY2sgPSB0YXNrO1xuICAgICAgICAgICAgdGFzayA9IHRpbWVzO1xuICAgICAgICAgICAgdGltZXMgPSBERUZBVUxUX1RJTUVTO1xuICAgICAgICB9XG4gICAgICAgIC8vIE1ha2Ugc3VyZSB0aW1lcyBpcyBhIG51bWJlclxuICAgICAgICB0aW1lcyA9IHBhcnNlSW50KHRpbWVzLCAxMCkgfHwgREVGQVVMVF9USU1FUztcbiAgICAgICAgdmFyIHdyYXBwZWRUYXNrID0gZnVuY3Rpb24od3JhcHBlZENhbGxiYWNrLCB3cmFwcGVkUmVzdWx0cykge1xuICAgICAgICAgICAgdmFyIHJldHJ5QXR0ZW1wdCA9IGZ1bmN0aW9uKHRhc2ssIGZpbmFsQXR0ZW1wdCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbihzZXJpZXNDYWxsYmFjaykge1xuICAgICAgICAgICAgICAgICAgICB0YXNrKGZ1bmN0aW9uKGVyciwgcmVzdWx0KXtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlcmllc0NhbGxiYWNrKCFlcnIgfHwgZmluYWxBdHRlbXB0LCB7ZXJyOiBlcnIsIHJlc3VsdDogcmVzdWx0fSk7XG4gICAgICAgICAgICAgICAgICAgIH0sIHdyYXBwZWRSZXN1bHRzKTtcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIHdoaWxlICh0aW1lcykge1xuICAgICAgICAgICAgICAgIGF0dGVtcHRzLnB1c2gocmV0cnlBdHRlbXB0KHRhc2ssICEodGltZXMtPTEpKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBhc3luYy5zZXJpZXMoYXR0ZW1wdHMsIGZ1bmN0aW9uKGRvbmUsIGRhdGEpe1xuICAgICAgICAgICAgICAgIGRhdGEgPSBkYXRhW2RhdGEubGVuZ3RoIC0gMV07XG4gICAgICAgICAgICAgICAgKHdyYXBwZWRDYWxsYmFjayB8fCBjYWxsYmFjaykoZGF0YS5lcnIsIGRhdGEucmVzdWx0KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIC8vIElmIGEgY2FsbGJhY2sgaXMgcGFzc2VkLCBydW4gdGhpcyBhcyBhIGNvbnRyb2xsIGZsb3dcbiAgICAgICAgcmV0dXJuIGNhbGxiYWNrID8gd3JhcHBlZFRhc2soKSA6IHdyYXBwZWRUYXNrXG4gICAgfTtcblxuICAgIGFzeW5jLndhdGVyZmFsbCA9IGZ1bmN0aW9uICh0YXNrcywgY2FsbGJhY2spIHtcbiAgICAgICAgY2FsbGJhY2sgPSBjYWxsYmFjayB8fCBmdW5jdGlvbiAoKSB7fTtcbiAgICAgICAgaWYgKCFfaXNBcnJheSh0YXNrcykpIHtcbiAgICAgICAgICB2YXIgZXJyID0gbmV3IEVycm9yKCdGaXJzdCBhcmd1bWVudCB0byB3YXRlcmZhbGwgbXVzdCBiZSBhbiBhcnJheSBvZiBmdW5jdGlvbnMnKTtcbiAgICAgICAgICByZXR1cm4gY2FsbGJhY2soZXJyKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIXRhc2tzLmxlbmd0aCkge1xuICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKCk7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIHdyYXBJdGVyYXRvciA9IGZ1bmN0aW9uIChpdGVyYXRvcikge1xuICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrID0gZnVuY3Rpb24gKCkge307XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMSk7XG4gICAgICAgICAgICAgICAgICAgIHZhciBuZXh0ID0gaXRlcmF0b3IubmV4dCgpO1xuICAgICAgICAgICAgICAgICAgICBpZiAobmV4dCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgYXJncy5wdXNoKHdyYXBJdGVyYXRvcihuZXh0KSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhcmdzLnB1c2goY2FsbGJhY2spO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGFzeW5jLnNldEltbWVkaWF0ZShmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpdGVyYXRvci5hcHBseShudWxsLCBhcmdzKTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfTtcbiAgICAgICAgfTtcbiAgICAgICAgd3JhcEl0ZXJhdG9yKGFzeW5jLml0ZXJhdG9yKHRhc2tzKSkoKTtcbiAgICB9O1xuXG4gICAgdmFyIF9wYXJhbGxlbCA9IGZ1bmN0aW9uKGVhY2hmbiwgdGFza3MsIGNhbGxiYWNrKSB7XG4gICAgICAgIGNhbGxiYWNrID0gY2FsbGJhY2sgfHwgZnVuY3Rpb24gKCkge307XG4gICAgICAgIGlmIChfaXNBcnJheSh0YXNrcykpIHtcbiAgICAgICAgICAgIGVhY2hmbi5tYXAodGFza3MsIGZ1bmN0aW9uIChmbiwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgICAgICBpZiAoZm4pIHtcbiAgICAgICAgICAgICAgICAgICAgZm4oZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGFyZ3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsIDEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFyZ3MubGVuZ3RoIDw9IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmdzID0gYXJnc1swXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrLmNhbGwobnVsbCwgZXJyLCBhcmdzKTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSwgY2FsbGJhY2spO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdmFyIHJlc3VsdHMgPSB7fTtcbiAgICAgICAgICAgIGVhY2hmbi5lYWNoKF9rZXlzKHRhc2tzKSwgZnVuY3Rpb24gKGssIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICAgICAgdGFza3Nba10oZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgICAgICAgICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMSk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChhcmdzLmxlbmd0aCA8PSAxKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhcmdzID0gYXJnc1swXTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICByZXN1bHRzW2tdID0gYXJncztcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0sIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnIsIHJlc3VsdHMpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgYXN5bmMucGFyYWxsZWwgPSBmdW5jdGlvbiAodGFza3MsIGNhbGxiYWNrKSB7XG4gICAgICAgIF9wYXJhbGxlbCh7IG1hcDogYXN5bmMubWFwLCBlYWNoOiBhc3luYy5lYWNoIH0sIHRhc2tzLCBjYWxsYmFjayk7XG4gICAgfTtcblxuICAgIGFzeW5jLnBhcmFsbGVsTGltaXQgPSBmdW5jdGlvbih0YXNrcywgbGltaXQsIGNhbGxiYWNrKSB7XG4gICAgICAgIF9wYXJhbGxlbCh7IG1hcDogX21hcExpbWl0KGxpbWl0KSwgZWFjaDogX2VhY2hMaW1pdChsaW1pdCkgfSwgdGFza3MsIGNhbGxiYWNrKTtcbiAgICB9O1xuXG4gICAgYXN5bmMuc2VyaWVzID0gZnVuY3Rpb24gKHRhc2tzLCBjYWxsYmFjaykge1xuICAgICAgICBjYWxsYmFjayA9IGNhbGxiYWNrIHx8IGZ1bmN0aW9uICgpIHt9O1xuICAgICAgICBpZiAoX2lzQXJyYXkodGFza3MpKSB7XG4gICAgICAgICAgICBhc3luYy5tYXBTZXJpZXModGFza3MsIGZ1bmN0aW9uIChmbiwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgICAgICBpZiAoZm4pIHtcbiAgICAgICAgICAgICAgICAgICAgZm4oZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGFyZ3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsIDEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFyZ3MubGVuZ3RoIDw9IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmdzID0gYXJnc1swXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrLmNhbGwobnVsbCwgZXJyLCBhcmdzKTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSwgY2FsbGJhY2spO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdmFyIHJlc3VsdHMgPSB7fTtcbiAgICAgICAgICAgIGFzeW5jLmVhY2hTZXJpZXMoX2tleXModGFza3MpLCBmdW5jdGlvbiAoaywgY2FsbGJhY2spIHtcbiAgICAgICAgICAgICAgICB0YXNrc1trXShmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBhcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGFyZ3MubGVuZ3RoIDw9IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3MgPSBhcmdzWzBdO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdHNba10gPSBhcmdzO1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSwgZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrKGVyciwgcmVzdWx0cyk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH07XG5cbiAgICBhc3luYy5pdGVyYXRvciA9IGZ1bmN0aW9uICh0YXNrcykge1xuICAgICAgICB2YXIgbWFrZUNhbGxiYWNrID0gZnVuY3Rpb24gKGluZGV4KSB7XG4gICAgICAgICAgICB2YXIgZm4gPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgaWYgKHRhc2tzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICB0YXNrc1tpbmRleF0uYXBwbHkobnVsbCwgYXJndW1lbnRzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZuLm5leHQoKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBmbi5uZXh0ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiAoaW5kZXggPCB0YXNrcy5sZW5ndGggLSAxKSA/IG1ha2VDYWxsYmFjayhpbmRleCArIDEpOiBudWxsO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIHJldHVybiBmbjtcbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIG1ha2VDYWxsYmFjaygwKTtcbiAgICB9O1xuXG4gICAgYXN5bmMuYXBwbHkgPSBmdW5jdGlvbiAoZm4pIHtcbiAgICAgICAgdmFyIGFyZ3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsIDEpO1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIGZuLmFwcGx5KFxuICAgICAgICAgICAgICAgIG51bGwsIGFyZ3MuY29uY2F0KEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cykpXG4gICAgICAgICAgICApO1xuICAgICAgICB9O1xuICAgIH07XG5cbiAgICB2YXIgX2NvbmNhdCA9IGZ1bmN0aW9uIChlYWNoZm4sIGFyciwgZm4sIGNhbGxiYWNrKSB7XG4gICAgICAgIHZhciByID0gW107XG4gICAgICAgIGVhY2hmbihhcnIsIGZ1bmN0aW9uICh4LCBjYikge1xuICAgICAgICAgICAgZm4oeCwgZnVuY3Rpb24gKGVyciwgeSkge1xuICAgICAgICAgICAgICAgIHIgPSByLmNvbmNhdCh5IHx8IFtdKTtcbiAgICAgICAgICAgICAgICBjYihlcnIpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgIGNhbGxiYWNrKGVyciwgcik7XG4gICAgICAgIH0pO1xuICAgIH07XG4gICAgYXN5bmMuY29uY2F0ID0gZG9QYXJhbGxlbChfY29uY2F0KTtcbiAgICBhc3luYy5jb25jYXRTZXJpZXMgPSBkb1NlcmllcyhfY29uY2F0KTtcblxuICAgIGFzeW5jLndoaWxzdCA9IGZ1bmN0aW9uICh0ZXN0LCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgaWYgKHRlc3QoKSkge1xuICAgICAgICAgICAgaXRlcmF0b3IoZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGFzeW5jLndoaWxzdCh0ZXN0LCBpdGVyYXRvciwgY2FsbGJhY2spO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIGFzeW5jLmRvV2hpbHN0ID0gZnVuY3Rpb24gKGl0ZXJhdG9yLCB0ZXN0LCBjYWxsYmFjaykge1xuICAgICAgICBpdGVyYXRvcihmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMSk7XG4gICAgICAgICAgICBpZiAodGVzdC5hcHBseShudWxsLCBhcmdzKSkge1xuICAgICAgICAgICAgICAgIGFzeW5jLmRvV2hpbHN0KGl0ZXJhdG9yLCB0ZXN0LCBjYWxsYmFjayk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9O1xuXG4gICAgYXN5bmMudW50aWwgPSBmdW5jdGlvbiAodGVzdCwgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgIGlmICghdGVzdCgpKSB7XG4gICAgICAgICAgICBpdGVyYXRvcihmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYXN5bmMudW50aWwodGVzdCwgaXRlcmF0b3IsIGNhbGxiYWNrKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgY2FsbGJhY2soKTtcbiAgICAgICAgfVxuICAgIH07XG5cbiAgICBhc3luYy5kb1VudGlsID0gZnVuY3Rpb24gKGl0ZXJhdG9yLCB0ZXN0LCBjYWxsYmFjaykge1xuICAgICAgICBpdGVyYXRvcihmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMSk7XG4gICAgICAgICAgICBpZiAoIXRlc3QuYXBwbHkobnVsbCwgYXJncykpIHtcbiAgICAgICAgICAgICAgICBhc3luYy5kb1VudGlsKGl0ZXJhdG9yLCB0ZXN0LCBjYWxsYmFjayk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9O1xuXG4gICAgYXN5bmMucXVldWUgPSBmdW5jdGlvbiAod29ya2VyLCBjb25jdXJyZW5jeSkge1xuICAgICAgICBpZiAoY29uY3VycmVuY3kgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgY29uY3VycmVuY3kgPSAxO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIF9pbnNlcnQocSwgZGF0YSwgcG9zLCBjYWxsYmFjaykge1xuICAgICAgICAgIGlmICghcS5zdGFydGVkKXtcbiAgICAgICAgICAgIHEuc3RhcnRlZCA9IHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICghX2lzQXJyYXkoZGF0YSkpIHtcbiAgICAgICAgICAgICAgZGF0YSA9IFtkYXRhXTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYoZGF0YS5sZW5ndGggPT0gMCkge1xuICAgICAgICAgICAgIC8vIGNhbGwgZHJhaW4gaW1tZWRpYXRlbHkgaWYgdGhlcmUgYXJlIG5vIHRhc2tzXG4gICAgICAgICAgICAgcmV0dXJuIGFzeW5jLnNldEltbWVkaWF0ZShmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgaWYgKHEuZHJhaW4pIHtcbiAgICAgICAgICAgICAgICAgICAgIHEuZHJhaW4oKTtcbiAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgICBfZWFjaChkYXRhLCBmdW5jdGlvbih0YXNrKSB7XG4gICAgICAgICAgICAgIHZhciBpdGVtID0ge1xuICAgICAgICAgICAgICAgICAgZGF0YTogdGFzayxcbiAgICAgICAgICAgICAgICAgIGNhbGxiYWNrOiB0eXBlb2YgY2FsbGJhY2sgPT09ICdmdW5jdGlvbicgPyBjYWxsYmFjayA6IG51bGxcbiAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICBpZiAocG9zKSB7XG4gICAgICAgICAgICAgICAgcS50YXNrcy51bnNoaWZ0KGl0ZW0pO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHEudGFza3MucHVzaChpdGVtKTtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGlmIChxLnNhdHVyYXRlZCAmJiBxLnRhc2tzLmxlbmd0aCA9PT0gcS5jb25jdXJyZW5jeSkge1xuICAgICAgICAgICAgICAgICAgcS5zYXR1cmF0ZWQoKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBhc3luYy5zZXRJbW1lZGlhdGUocS5wcm9jZXNzKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciB3b3JrZXJzID0gMDtcbiAgICAgICAgdmFyIHEgPSB7XG4gICAgICAgICAgICB0YXNrczogW10sXG4gICAgICAgICAgICBjb25jdXJyZW5jeTogY29uY3VycmVuY3ksXG4gICAgICAgICAgICBzYXR1cmF0ZWQ6IG51bGwsXG4gICAgICAgICAgICBlbXB0eTogbnVsbCxcbiAgICAgICAgICAgIGRyYWluOiBudWxsLFxuICAgICAgICAgICAgc3RhcnRlZDogZmFsc2UsXG4gICAgICAgICAgICBwYXVzZWQ6IGZhbHNlLFxuICAgICAgICAgICAgcHVzaDogZnVuY3Rpb24gKGRhdGEsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICAgIF9pbnNlcnQocSwgZGF0YSwgZmFsc2UsIGNhbGxiYWNrKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBraWxsOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgIHEuZHJhaW4gPSBudWxsO1xuICAgICAgICAgICAgICBxLnRhc2tzID0gW107XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdW5zaGlmdDogZnVuY3Rpb24gKGRhdGEsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICAgIF9pbnNlcnQocSwgZGF0YSwgdHJ1ZSwgY2FsbGJhY2spO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHByb2Nlc3M6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBpZiAoIXEucGF1c2VkICYmIHdvcmtlcnMgPCBxLmNvbmN1cnJlbmN5ICYmIHEudGFza3MubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciB0YXNrID0gcS50YXNrcy5zaGlmdCgpO1xuICAgICAgICAgICAgICAgICAgICBpZiAocS5lbXB0eSAmJiBxLnRhc2tzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcS5lbXB0eSgpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHdvcmtlcnMgKz0gMTtcbiAgICAgICAgICAgICAgICAgICAgdmFyIG5leHQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB3b3JrZXJzIC09IDE7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodGFzay5jYWxsYmFjaykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhc2suY2FsbGJhY2suYXBwbHkodGFzaywgYXJndW1lbnRzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChxLmRyYWluICYmIHEudGFza3MubGVuZ3RoICsgd29ya2VycyA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHEuZHJhaW4oKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHEucHJvY2VzcygpO1xuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICB2YXIgY2IgPSBvbmx5X29uY2UobmV4dCk7XG4gICAgICAgICAgICAgICAgICAgIHdvcmtlcih0YXNrLmRhdGEsIGNiKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbGVuZ3RoOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHEudGFza3MubGVuZ3RoO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHJ1bm5pbmc6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gd29ya2VycztcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBpZGxlOiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcS50YXNrcy5sZW5ndGggKyB3b3JrZXJzID09PSAwO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHBhdXNlOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgaWYgKHEucGF1c2VkID09PSB0cnVlKSB7IHJldHVybjsgfVxuICAgICAgICAgICAgICAgIHEucGF1c2VkID0gdHJ1ZTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICByZXN1bWU6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBpZiAocS5wYXVzZWQgPT09IGZhbHNlKSB7IHJldHVybjsgfVxuICAgICAgICAgICAgICAgIHEucGF1c2VkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgLy8gTmVlZCB0byBjYWxsIHEucHJvY2VzcyBvbmNlIHBlciBjb25jdXJyZW50XG4gICAgICAgICAgICAgICAgLy8gd29ya2VyIHRvIHByZXNlcnZlIGZ1bGwgY29uY3VycmVuY3kgYWZ0ZXIgcGF1c2VcbiAgICAgICAgICAgICAgICBmb3IgKHZhciB3ID0gMTsgdyA8PSBxLmNvbmN1cnJlbmN5OyB3KyspIHtcbiAgICAgICAgICAgICAgICAgICAgYXN5bmMuc2V0SW1tZWRpYXRlKHEucHJvY2Vzcyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gcTtcbiAgICB9O1xuXG4gICAgYXN5bmMucHJpb3JpdHlRdWV1ZSA9IGZ1bmN0aW9uICh3b3JrZXIsIGNvbmN1cnJlbmN5KSB7XG5cbiAgICAgICAgZnVuY3Rpb24gX2NvbXBhcmVUYXNrcyhhLCBiKXtcbiAgICAgICAgICByZXR1cm4gYS5wcmlvcml0eSAtIGIucHJpb3JpdHk7XG4gICAgICAgIH07XG5cbiAgICAgICAgZnVuY3Rpb24gX2JpbmFyeVNlYXJjaChzZXF1ZW5jZSwgaXRlbSwgY29tcGFyZSkge1xuICAgICAgICAgIHZhciBiZWcgPSAtMSxcbiAgICAgICAgICAgICAgZW5kID0gc2VxdWVuY2UubGVuZ3RoIC0gMTtcbiAgICAgICAgICB3aGlsZSAoYmVnIDwgZW5kKSB7XG4gICAgICAgICAgICB2YXIgbWlkID0gYmVnICsgKChlbmQgLSBiZWcgKyAxKSA+Pj4gMSk7XG4gICAgICAgICAgICBpZiAoY29tcGFyZShpdGVtLCBzZXF1ZW5jZVttaWRdKSA+PSAwKSB7XG4gICAgICAgICAgICAgIGJlZyA9IG1pZDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGVuZCA9IG1pZCAtIDE7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBiZWc7XG4gICAgICAgIH1cblxuICAgICAgICBmdW5jdGlvbiBfaW5zZXJ0KHEsIGRhdGEsIHByaW9yaXR5LCBjYWxsYmFjaykge1xuICAgICAgICAgIGlmICghcS5zdGFydGVkKXtcbiAgICAgICAgICAgIHEuc3RhcnRlZCA9IHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICghX2lzQXJyYXkoZGF0YSkpIHtcbiAgICAgICAgICAgICAgZGF0YSA9IFtkYXRhXTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYoZGF0YS5sZW5ndGggPT0gMCkge1xuICAgICAgICAgICAgIC8vIGNhbGwgZHJhaW4gaW1tZWRpYXRlbHkgaWYgdGhlcmUgYXJlIG5vIHRhc2tzXG4gICAgICAgICAgICAgcmV0dXJuIGFzeW5jLnNldEltbWVkaWF0ZShmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgaWYgKHEuZHJhaW4pIHtcbiAgICAgICAgICAgICAgICAgICAgIHEuZHJhaW4oKTtcbiAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgICBfZWFjaChkYXRhLCBmdW5jdGlvbih0YXNrKSB7XG4gICAgICAgICAgICAgIHZhciBpdGVtID0ge1xuICAgICAgICAgICAgICAgICAgZGF0YTogdGFzayxcbiAgICAgICAgICAgICAgICAgIHByaW9yaXR5OiBwcmlvcml0eSxcbiAgICAgICAgICAgICAgICAgIGNhbGxiYWNrOiB0eXBlb2YgY2FsbGJhY2sgPT09ICdmdW5jdGlvbicgPyBjYWxsYmFjayA6IG51bGxcbiAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICBxLnRhc2tzLnNwbGljZShfYmluYXJ5U2VhcmNoKHEudGFza3MsIGl0ZW0sIF9jb21wYXJlVGFza3MpICsgMSwgMCwgaXRlbSk7XG5cbiAgICAgICAgICAgICAgaWYgKHEuc2F0dXJhdGVkICYmIHEudGFza3MubGVuZ3RoID09PSBxLmNvbmN1cnJlbmN5KSB7XG4gICAgICAgICAgICAgICAgICBxLnNhdHVyYXRlZCgpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGFzeW5jLnNldEltbWVkaWF0ZShxLnByb2Nlc3MpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gU3RhcnQgd2l0aCBhIG5vcm1hbCBxdWV1ZVxuICAgICAgICB2YXIgcSA9IGFzeW5jLnF1ZXVlKHdvcmtlciwgY29uY3VycmVuY3kpO1xuXG4gICAgICAgIC8vIE92ZXJyaWRlIHB1c2ggdG8gYWNjZXB0IHNlY29uZCBwYXJhbWV0ZXIgcmVwcmVzZW50aW5nIHByaW9yaXR5XG4gICAgICAgIHEucHVzaCA9IGZ1bmN0aW9uIChkYXRhLCBwcmlvcml0eSwgY2FsbGJhY2spIHtcbiAgICAgICAgICBfaW5zZXJ0KHEsIGRhdGEsIHByaW9yaXR5LCBjYWxsYmFjayk7XG4gICAgICAgIH07XG5cbiAgICAgICAgLy8gUmVtb3ZlIHVuc2hpZnQgZnVuY3Rpb25cbiAgICAgICAgZGVsZXRlIHEudW5zaGlmdDtcblxuICAgICAgICByZXR1cm4gcTtcbiAgICB9O1xuXG4gICAgYXN5bmMuY2FyZ28gPSBmdW5jdGlvbiAod29ya2VyLCBwYXlsb2FkKSB7XG4gICAgICAgIHZhciB3b3JraW5nICAgICA9IGZhbHNlLFxuICAgICAgICAgICAgdGFza3MgICAgICAgPSBbXTtcblxuICAgICAgICB2YXIgY2FyZ28gPSB7XG4gICAgICAgICAgICB0YXNrczogdGFza3MsXG4gICAgICAgICAgICBwYXlsb2FkOiBwYXlsb2FkLFxuICAgICAgICAgICAgc2F0dXJhdGVkOiBudWxsLFxuICAgICAgICAgICAgZW1wdHk6IG51bGwsXG4gICAgICAgICAgICBkcmFpbjogbnVsbCxcbiAgICAgICAgICAgIGRyYWluZWQ6IHRydWUsXG4gICAgICAgICAgICBwdXNoOiBmdW5jdGlvbiAoZGF0YSwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgICAgICBpZiAoIV9pc0FycmF5KGRhdGEpKSB7XG4gICAgICAgICAgICAgICAgICAgIGRhdGEgPSBbZGF0YV07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIF9lYWNoKGRhdGEsIGZ1bmN0aW9uKHRhc2spIHtcbiAgICAgICAgICAgICAgICAgICAgdGFza3MucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgICAgICBkYXRhOiB0YXNrLFxuICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2s6IHR5cGVvZiBjYWxsYmFjayA9PT0gJ2Z1bmN0aW9uJyA/IGNhbGxiYWNrIDogbnVsbFxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgY2FyZ28uZHJhaW5lZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICBpZiAoY2FyZ28uc2F0dXJhdGVkICYmIHRhc2tzLmxlbmd0aCA9PT0gcGF5bG9hZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY2FyZ28uc2F0dXJhdGVkKCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBhc3luYy5zZXRJbW1lZGlhdGUoY2FyZ28ucHJvY2Vzcyk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcHJvY2VzczogZnVuY3Rpb24gcHJvY2VzcygpIHtcbiAgICAgICAgICAgICAgICBpZiAod29ya2luZykgcmV0dXJuO1xuICAgICAgICAgICAgICAgIGlmICh0YXNrcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgaWYoY2FyZ28uZHJhaW4gJiYgIWNhcmdvLmRyYWluZWQpIGNhcmdvLmRyYWluKCk7XG4gICAgICAgICAgICAgICAgICAgIGNhcmdvLmRyYWluZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgdmFyIHRzID0gdHlwZW9mIHBheWxvYWQgPT09ICdudW1iZXInXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPyB0YXNrcy5zcGxpY2UoMCwgcGF5bG9hZClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IHRhc2tzLnNwbGljZSgwLCB0YXNrcy5sZW5ndGgpO1xuXG4gICAgICAgICAgICAgICAgdmFyIGRzID0gX21hcCh0cywgZnVuY3Rpb24gKHRhc2spIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRhc2suZGF0YTtcbiAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgIGlmKGNhcmdvLmVtcHR5KSBjYXJnby5lbXB0eSgpO1xuICAgICAgICAgICAgICAgIHdvcmtpbmcgPSB0cnVlO1xuICAgICAgICAgICAgICAgIHdvcmtlcihkcywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICB3b3JraW5nID0gZmFsc2U7XG5cbiAgICAgICAgICAgICAgICAgICAgdmFyIGFyZ3MgPSBhcmd1bWVudHM7XG4gICAgICAgICAgICAgICAgICAgIF9lYWNoKHRzLCBmdW5jdGlvbiAoZGF0YSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRhdGEuY2FsbGJhY2spIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLmNhbGxiYWNrLmFwcGx5KG51bGwsIGFyZ3MpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgICAgICBwcm9jZXNzKCk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbGVuZ3RoOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRhc2tzLmxlbmd0aDtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBydW5uaW5nOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHdvcmtpbmc7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiBjYXJnbztcbiAgICB9O1xuXG4gICAgdmFyIF9jb25zb2xlX2ZuID0gZnVuY3Rpb24gKG5hbWUpIHtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChmbikge1xuICAgICAgICAgICAgdmFyIGFyZ3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsIDEpO1xuICAgICAgICAgICAgZm4uYXBwbHkobnVsbCwgYXJncy5jb25jYXQoW2Z1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgICAgICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMSk7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBjb25zb2xlICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoY29uc29sZS5lcnJvcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChjb25zb2xlW25hbWVdKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBfZWFjaChhcmdzLCBmdW5jdGlvbiAoeCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGVbbmFtZV0oeCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1dKSk7XG4gICAgICAgIH07XG4gICAgfTtcbiAgICBhc3luYy5sb2cgPSBfY29uc29sZV9mbignbG9nJyk7XG4gICAgYXN5bmMuZGlyID0gX2NvbnNvbGVfZm4oJ2RpcicpO1xuICAgIC8qYXN5bmMuaW5mbyA9IF9jb25zb2xlX2ZuKCdpbmZvJyk7XG4gICAgYXN5bmMud2FybiA9IF9jb25zb2xlX2ZuKCd3YXJuJyk7XG4gICAgYXN5bmMuZXJyb3IgPSBfY29uc29sZV9mbignZXJyb3InKTsqL1xuXG4gICAgYXN5bmMubWVtb2l6ZSA9IGZ1bmN0aW9uIChmbiwgaGFzaGVyKSB7XG4gICAgICAgIHZhciBtZW1vID0ge307XG4gICAgICAgIHZhciBxdWV1ZXMgPSB7fTtcbiAgICAgICAgaGFzaGVyID0gaGFzaGVyIHx8IGZ1bmN0aW9uICh4KSB7XG4gICAgICAgICAgICByZXR1cm4geDtcbiAgICAgICAgfTtcbiAgICAgICAgdmFyIG1lbW9pemVkID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIGFyZ3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMpO1xuICAgICAgICAgICAgdmFyIGNhbGxiYWNrID0gYXJncy5wb3AoKTtcbiAgICAgICAgICAgIHZhciBrZXkgPSBoYXNoZXIuYXBwbHkobnVsbCwgYXJncyk7XG4gICAgICAgICAgICBpZiAoa2V5IGluIG1lbW8pIHtcbiAgICAgICAgICAgICAgICBhc3luYy5uZXh0VGljayhmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrLmFwcGx5KG51bGwsIG1lbW9ba2V5XSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChrZXkgaW4gcXVldWVzKSB7XG4gICAgICAgICAgICAgICAgcXVldWVzW2tleV0ucHVzaChjYWxsYmFjayk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBxdWV1ZXNba2V5XSA9IFtjYWxsYmFja107XG4gICAgICAgICAgICAgICAgZm4uYXBwbHkobnVsbCwgYXJncy5jb25jYXQoW2Z1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgbWVtb1trZXldID0gYXJndW1lbnRzO1xuICAgICAgICAgICAgICAgICAgICB2YXIgcSA9IHF1ZXVlc1trZXldO1xuICAgICAgICAgICAgICAgICAgICBkZWxldGUgcXVldWVzW2tleV07XG4gICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwLCBsID0gcS5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICBxW2ldLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICBtZW1vaXplZC5tZW1vID0gbWVtbztcbiAgICAgICAgbWVtb2l6ZWQudW5tZW1vaXplZCA9IGZuO1xuICAgICAgICByZXR1cm4gbWVtb2l6ZWQ7XG4gICAgfTtcblxuICAgIGFzeW5jLnVubWVtb2l6ZSA9IGZ1bmN0aW9uIChmbikge1xuICAgICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIChmbi51bm1lbW9pemVkIHx8IGZuKS5hcHBseShudWxsLCBhcmd1bWVudHMpO1xuICAgICAgfTtcbiAgICB9O1xuXG4gICAgYXN5bmMudGltZXMgPSBmdW5jdGlvbiAoY291bnQsIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICB2YXIgY291bnRlciA9IFtdO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNvdW50OyBpKyspIHtcbiAgICAgICAgICAgIGNvdW50ZXIucHVzaChpKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYXN5bmMubWFwKGNvdW50ZXIsIGl0ZXJhdG9yLCBjYWxsYmFjayk7XG4gICAgfTtcblxuICAgIGFzeW5jLnRpbWVzU2VyaWVzID0gZnVuY3Rpb24gKGNvdW50LCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgdmFyIGNvdW50ZXIgPSBbXTtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7XG4gICAgICAgICAgICBjb3VudGVyLnB1c2goaSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGFzeW5jLm1hcFNlcmllcyhjb3VudGVyLCBpdGVyYXRvciwgY2FsbGJhY2spO1xuICAgIH07XG5cbiAgICBhc3luYy5zZXEgPSBmdW5jdGlvbiAoLyogZnVuY3Rpb25zLi4uICovKSB7XG4gICAgICAgIHZhciBmbnMgPSBhcmd1bWVudHM7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgdGhhdCA9IHRoaXM7XG4gICAgICAgICAgICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7XG4gICAgICAgICAgICB2YXIgY2FsbGJhY2sgPSBhcmdzLnBvcCgpO1xuICAgICAgICAgICAgYXN5bmMucmVkdWNlKGZucywgYXJncywgZnVuY3Rpb24gKG5ld2FyZ3MsIGZuLCBjYikge1xuICAgICAgICAgICAgICAgIGZuLmFwcGx5KHRoYXQsIG5ld2FyZ3MuY29uY2F0KFtmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBlcnIgPSBhcmd1bWVudHNbMF07XG4gICAgICAgICAgICAgICAgICAgIHZhciBuZXh0YXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMSk7XG4gICAgICAgICAgICAgICAgICAgIGNiKGVyciwgbmV4dGFyZ3MpO1xuICAgICAgICAgICAgICAgIH1dKSlcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBmdW5jdGlvbiAoZXJyLCByZXN1bHRzKSB7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2suYXBwbHkodGhhdCwgW2Vycl0uY29uY2F0KHJlc3VsdHMpKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9O1xuICAgIH07XG5cbiAgICBhc3luYy5jb21wb3NlID0gZnVuY3Rpb24gKC8qIGZ1bmN0aW9ucy4uLiAqLykge1xuICAgICAgcmV0dXJuIGFzeW5jLnNlcS5hcHBseShudWxsLCBBcnJheS5wcm90b3R5cGUucmV2ZXJzZS5jYWxsKGFyZ3VtZW50cykpO1xuICAgIH07XG5cbiAgICB2YXIgX2FwcGx5RWFjaCA9IGZ1bmN0aW9uIChlYWNoZm4sIGZucyAvKmFyZ3MuLi4qLykge1xuICAgICAgICB2YXIgZ28gPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgdGhhdCA9IHRoaXM7XG4gICAgICAgICAgICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7XG4gICAgICAgICAgICB2YXIgY2FsbGJhY2sgPSBhcmdzLnBvcCgpO1xuICAgICAgICAgICAgcmV0dXJuIGVhY2hmbihmbnMsIGZ1bmN0aW9uIChmbiwgY2IpIHtcbiAgICAgICAgICAgICAgICBmbi5hcHBseSh0aGF0LCBhcmdzLmNvbmNhdChbY2JdKSk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY2FsbGJhY2spO1xuICAgICAgICB9O1xuICAgICAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA+IDIpIHtcbiAgICAgICAgICAgIHZhciBhcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAyKTtcbiAgICAgICAgICAgIHJldHVybiBnby5hcHBseSh0aGlzLCBhcmdzKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBnbztcbiAgICAgICAgfVxuICAgIH07XG4gICAgYXN5bmMuYXBwbHlFYWNoID0gZG9QYXJhbGxlbChfYXBwbHlFYWNoKTtcbiAgICBhc3luYy5hcHBseUVhY2hTZXJpZXMgPSBkb1NlcmllcyhfYXBwbHlFYWNoKTtcblxuICAgIGFzeW5jLmZvcmV2ZXIgPSBmdW5jdGlvbiAoZm4sIGNhbGxiYWNrKSB7XG4gICAgICAgIGZ1bmN0aW9uIG5leHQoZXJyKSB7XG4gICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgaWYgKGNhbGxiYWNrKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aHJvdyBlcnI7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmbihuZXh0KTtcbiAgICAgICAgfVxuICAgICAgICBuZXh0KCk7XG4gICAgfTtcblxuICAgIC8vIE5vZGUuanNcbiAgICBpZiAodHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCcgJiYgbW9kdWxlLmV4cG9ydHMpIHtcbiAgICAgICAgbW9kdWxlLmV4cG9ydHMgPSBhc3luYztcbiAgICB9XG4gICAgLy8gQU1EIC8gUmVxdWlyZUpTXG4gICAgZWxzZSBpZiAodHlwZW9mIGRlZmluZSAhPT0gJ3VuZGVmaW5lZCcgJiYgZGVmaW5lLmFtZCkge1xuICAgICAgICBkZWZpbmUoW10sIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiBhc3luYztcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8vIGluY2x1ZGVkIGRpcmVjdGx5IHZpYSA8c2NyaXB0PiB0YWdcbiAgICBlbHNlIHtcbiAgICAgICAgcm9vdC5hc3luYyA9IGFzeW5jO1xuICAgIH1cblxufSgpKTtcbiIsInZhciBhc3luYyAgICAgICA9IHJlcXVpcmUoJ2FzeW5jJyksXG4gICAgdXJsUGFyc2VyICAgPSByZXF1aXJlKCd1cmwnKSxcbiAgICBSZXNvdXJjZSAgICA9IHJlcXVpcmUoJy4vUmVzb3VyY2UnKSxcbiAgICBFdmVudEVtaXR0ZXIgPSByZXF1aXJlKCdldmVudGVtaXR0ZXIzJyk7XG5cbi8qKlxuICogTWFuYWdlcyB0aGUgc3RhdGUgYW5kIGxvYWRpbmcgb2YgbXVsdGlwbGUgcmVzb3VyY2VzIHRvIGxvYWQuXG4gKlxuICogQGNsYXNzXG4gKiBAcGFyYW0gW2Jhc2VVcmw9JyddIHtzdHJpbmd9IFRoZSBiYXNlIHVybCBmb3IgYWxsIHJlc291cmNlcyBsb2FkZWQgYnkgdGhpcyBsb2FkZXIuXG4gKiBAcGFyYW0gW2NvbmN1cnJlbmN5PTEwXSB7bnVtYmVyfSBUaGUgbnVtYmVyIG9mIHJlc291cmNlcyB0byBsb2FkIGNvbmN1cnJlbnRseS5cbiAqL1xuZnVuY3Rpb24gTG9hZGVyKGJhc2VVcmwsIGNvbmN1cnJlbmN5KSB7XG4gICAgRXZlbnRFbWl0dGVyLmNhbGwodGhpcyk7XG5cbiAgICBjb25jdXJyZW5jeSA9IGNvbmN1cnJlbmN5IHx8IDEwO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGJhc2UgdXJsIGZvciBhbGwgcmVzb3VyY2VzIGxvYWRlZCBieSB0aGlzIGxvYWRlci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge3N0cmluZ31cbiAgICAgKi9cbiAgICB0aGlzLmJhc2VVcmwgPSBiYXNlVXJsIHx8ICcnO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHByb2dyZXNzIHBlcmNlbnQgb2YgdGhlIGxvYWRlciBnb2luZyB0aHJvdWdoIHRoZSBxdWV1ZS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLnByb2dyZXNzID0gMDtcblxuICAgIC8qKlxuICAgICAqIExvYWRpbmcgc3RhdGUgb2YgdGhlIGxvYWRlciwgdHJ1ZSBpZiBpdCBpcyBjdXJyZW50bHkgbG9hZGluZyByZXNvdXJjZXMuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqL1xuICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHBlcmNlbnRhZ2Ugb2YgdG90YWwgcHJvZ3Jlc3MgdGhhdCBhIHNpbmdsZSByZXNvdXJjZSByZXByZXNlbnRzLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMuX3Byb2dyZXNzQ2h1bmsgPSAwO1xuXG4gICAgLyoqXG4gICAgICogVGhlIG1pZGRsZXdhcmUgdG8gcnVuIGJlZm9yZSBsb2FkaW5nIGVhY2ggcmVzb3VyY2UuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtmdW5jdGlvbltdfVxuICAgICAqL1xuICAgIHRoaXMuX2JlZm9yZU1pZGRsZXdhcmUgPSBbXTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBtaWRkbGV3YXJlIHRvIHJ1biBhZnRlciBsb2FkaW5nIGVhY2ggcmVzb3VyY2UuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtmdW5jdGlvbltdfVxuICAgICAqL1xuICAgIHRoaXMuX2FmdGVyTWlkZGxld2FyZSA9IFtdO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGBfbG9hZFJlc291cmNlYCBmdW5jdGlvbiBib3VuZCB3aXRoIHRoaXMgb2JqZWN0IGNvbnRleHQuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBtZW1iZXIge2Z1bmN0aW9ufVxuICAgICAqL1xuICAgIHRoaXMuX2JvdW5kTG9hZFJlc291cmNlID0gdGhpcy5fbG9hZFJlc291cmNlLmJpbmQodGhpcyk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYF9vbkxvYWRgIGZ1bmN0aW9uIGJvdW5kIHdpdGggdGhpcyBvYmplY3QgY29udGV4dC5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQG1lbWJlciB7ZnVuY3Rpb259XG4gICAgICovXG4gICAgdGhpcy5fYm91bmRPbkxvYWQgPSB0aGlzLl9vbkxvYWQuYmluZCh0aGlzKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSByZXNvdXJjZSBidWZmZXIgdGhhdCBmaWxscyB1bnRpbCBgbG9hZGAgaXMgY2FsbGVkIHRvIHN0YXJ0IGxvYWRpbmcgcmVzb3VyY2VzLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAbWVtYmVyIHtSZXNvdXJjZVtdfVxuICAgICAqL1xuICAgIHRoaXMuX2J1ZmZlciA9IFtdO1xuXG4gICAgLyoqXG4gICAgICogVXNlZCB0byB0cmFjayBsb2FkIGNvbXBsZXRpb24uXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLl9udW1Ub0xvYWQgPSAwO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHJlc291cmNlcyB3YWl0aW5nIHRvIGJlIGxvYWRlZC5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQG1lbWJlciB7UmVzb3VyY2VbXX1cbiAgICAgKi9cbiAgICB0aGlzLl9xdWV1ZSA9IGFzeW5jLnF1ZXVlKHRoaXMuX2JvdW5kTG9hZFJlc291cmNlLCBjb25jdXJyZW5jeSk7XG5cbiAgICAvKipcbiAgICAgKiBBbGwgdGhlIHJlc291cmNlcyBmb3IgdGhpcyBsb2FkZXIga2V5ZWQgYnkgbmFtZS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge29iamVjdDxzdHJpbmcsIFJlc291cmNlPn1cbiAgICAgKi9cbiAgICB0aGlzLnJlc291cmNlcyA9IHt9O1xuXG4gICAgLyoqXG4gICAgICogRW1pdHRlZCBvbmNlIHBlciBsb2FkZWQgb3IgZXJyb3JlZCByZXNvdXJjZS5cbiAgICAgKlxuICAgICAqIEBldmVudCBwcm9ncmVzc1xuICAgICAqIEBtZW1iZXJvZiBMb2FkZXIjXG4gICAgICovXG5cbiAgICAvKipcbiAgICAgKiBFbWl0dGVkIG9uY2UgcGVyIGVycm9yZWQgcmVzb3VyY2UuXG4gICAgICpcbiAgICAgKiBAZXZlbnQgZXJyb3JcbiAgICAgKiBAbWVtYmVyb2YgTG9hZGVyI1xuICAgICAqL1xuXG4gICAgLyoqXG4gICAgICogRW1pdHRlZCBvbmNlIHBlciBsb2FkZWQgcmVzb3VyY2UuXG4gICAgICpcbiAgICAgKiBAZXZlbnQgbG9hZFxuICAgICAqIEBtZW1iZXJvZiBMb2FkZXIjXG4gICAgICovXG5cbiAgICAvKipcbiAgICAgKiBFbWl0dGVkIHdoZW4gdGhlIGxvYWRlciBiZWdpbnMgdG8gcHJvY2VzcyB0aGUgcXVldWUuXG4gICAgICpcbiAgICAgKiBAZXZlbnQgc3RhcnRcbiAgICAgKiBAbWVtYmVyb2YgTG9hZGVyI1xuICAgICAqL1xuXG4gICAgLyoqXG4gICAgICogRW1pdHRlZCB3aGVuIHRoZSBxdWV1ZWQgcmVzb3VyY2VzIGFsbCBsb2FkLlxuICAgICAqXG4gICAgICogQGV2ZW50IGNvbXBsZXRlXG4gICAgICogQG1lbWJlcm9mIExvYWRlciNcbiAgICAgKi9cbn1cblxuTG9hZGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoRXZlbnRFbWl0dGVyLnByb3RvdHlwZSk7XG5Mb2FkZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gTG9hZGVyO1xubW9kdWxlLmV4cG9ydHMgPSBMb2FkZXI7XG5cbi8qKlxuICogQWRkcyBhIHJlc291cmNlIChvciBtdWx0aXBsZSByZXNvdXJjZXMpIHRvIHRoZSBsb2FkZXIgcXVldWUuXG4gKlxuICogVGhpcyBmdW5jdGlvbiBjYW4gdGFrZSBhIHdpZGUgdmFyaWV0eSBvZiBkaWZmZXJlbnQgcGFyYW1ldGVycy4gVGhlIG9ubHkgdGhpbmcgdGhhdCBpcyBhbHdheXNcbiAqIHJlcXVpcmVkIHRoZSB1cmwgdG8gbG9hZC4gQWxsIHRoZSBmb2xsb3dpbmcgd2lsbCB3b3JrOlxuICpcbiAqIGBgYGpzXG4gKiBsb2FkZXJcbiAqICAgICAvLyBub3JtYWwgcGFyYW0gc3ludGF4XG4gKiAgICAgLmFkZCgna2V5JywgJ2h0dHA6Ly8uLi4nLCBmdW5jdGlvbiAoKSB7fSlcbiAqICAgICAuYWRkKCdodHRwOi8vLi4uJywgZnVuY3Rpb24gKCkge30pXG4gKiAgICAgLmFkZCgnaHR0cDovLy4uLicpXG4gKlxuICogICAgIC8vIG9iamVjdCBzeW50YXhcbiAqICAgICAuYWRkKHtcbiAqICAgICAgICAgbmFtZTogJ2tleTInLFxuICogICAgICAgICB1cmw6ICdodHRwOi8vLi4uJ1xuICogICAgIH0sIGZ1bmN0aW9uICgpIHt9KVxuICogICAgIC5hZGQoe1xuICogICAgICAgICB1cmw6ICdodHRwOi8vLi4uJ1xuICogICAgIH0sIGZ1bmN0aW9uICgpIHt9KVxuICogICAgIC5hZGQoe1xuICogICAgICAgICBuYW1lOiAna2V5MycsXG4gKiAgICAgICAgIHVybDogJ2h0dHA6Ly8uLi4nXG4gKiAgICAgICAgIG9uQ29tcGxldGU6IGZ1bmN0aW9uICgpIHt9XG4gKiAgICAgfSlcbiAqICAgICAuYWRkKHtcbiAqICAgICAgICAgdXJsOiAnaHR0cHM6Ly8uLi4nLFxuICogICAgICAgICBvbkNvbXBsZXRlOiBmdW5jdGlvbiAoKSB7fSxcbiAqICAgICAgICAgY3Jvc3NPcmlnaW46IHRydWVcbiAqICAgICB9KVxuICpcbiAqICAgICAvLyB5b3UgY2FuIGFsc28gcGFzcyBhbiBhcnJheSBvZiBvYmplY3RzIG9yIHVybHMgb3IgYm90aFxuICogICAgIC5hZGQoW1xuICogICAgICAgICB7IG5hbWU6ICdrZXk0JywgdXJsOiAnaHR0cDovLy4uLicsIG9uQ29tcGxldGU6IGZ1bmN0aW9uICgpIHt9IH0sXG4gKiAgICAgICAgIHsgdXJsOiAnaHR0cDovLy4uLicsIG9uQ29tcGxldGU6IGZ1bmN0aW9uICgpIHt9IH0sXG4gKiAgICAgICAgICdodHRwOi8vLi4uJ1xuICogICAgIF0pO1xuICogYGBgXG4gKlxuICogQGFsaWFzIGVucXVldWVcbiAqIEBwYXJhbSBbbmFtZV0ge3N0cmluZ30gVGhlIG5hbWUgb2YgdGhlIHJlc291cmNlIHRvIGxvYWQsIGlmIG5vdCBwYXNzZWQgdGhlIHVybCBpcyB1c2VkLlxuICogQHBhcmFtIHVybCB7c3RyaW5nfSBUaGUgdXJsIGZvciB0aGlzIHJlc291cmNlLCByZWxhdGl2ZSB0byB0aGUgYmFzZVVybCBvZiB0aGlzIGxvYWRlci5cbiAqIEBwYXJhbSBbb3B0aW9uc10ge29iamVjdH0gVGhlIG9wdGlvbnMgZm9yIHRoZSBsb2FkLlxuICogQHBhcmFtIFtvcHRpb25zLmNyb3NzT3JpZ2luXSB7Ym9vbGVhbn0gSXMgdGhpcyByZXF1ZXN0IGNyb3NzLW9yaWdpbj8gRGVmYXVsdCBpcyB0byBkZXRlcm1pbmUgYXV0b21hdGljYWxseS5cbiAqIEBwYXJhbSBbb3B0aW9ucy5sb2FkVHlwZT1SZXNvdXJjZS5MT0FEX1RZUEUuWEhSXSB7UmVzb3VyY2UuWEhSX0xPQURfVFlQRX0gSG93IHNob3VsZCB0aGlzIHJlc291cmNlIGJlIGxvYWRlZD9cbiAqIEBwYXJhbSBbb3B0aW9ucy54aHJUeXBlPVJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkRFRkFVTFRdIHtSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRX0gSG93IHNob3VsZCB0aGUgZGF0YSBiZWluZ1xuICogICAgICBsb2FkZWQgYmUgaW50ZXJwcmV0ZWQgd2hlbiB1c2luZyBYSFI/XG4gKiBAcGFyYW0gW2NhbGxiYWNrXSB7ZnVuY3Rpb259IEZ1bmN0aW9uIHRvIGNhbGwgd2hlbiB0aGlzIHNwZWNpZmljIHJlc291cmNlIGNvbXBsZXRlcyBsb2FkaW5nLlxuICogQHJldHVybiB7TG9hZGVyfVxuICovXG5Mb2FkZXIucHJvdG90eXBlLmFkZCA9IExvYWRlci5wcm90b3R5cGUuZW5xdWV1ZSA9IGZ1bmN0aW9uIChuYW1lLCB1cmwsIG9wdGlvbnMsIGNiKSB7XG4gICAgLy8gc3BlY2lhbCBjYXNlIG9mIGFuIGFycmF5IG9mIG9iamVjdHMgb3IgdXJsc1xuICAgIGlmIChBcnJheS5pc0FycmF5KG5hbWUpKSB7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbmFtZS5sZW5ndGg7ICsraSkge1xuICAgICAgICAgICAgdGhpcy5hZGQobmFtZVtpXSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICAvLyBpZiBhbiBvYmplY3QgaXMgcGFzc2VkIGluc3RlYWQgb2YgcGFyYW1zXG4gICAgaWYgKHR5cGVvZiBuYW1lID09PSAnb2JqZWN0Jykge1xuICAgICAgICBjYiA9IHVybCB8fCBuYW1lLmNhbGxiYWNrIHx8IG5hbWUub25Db21wbGV0ZTtcbiAgICAgICAgb3B0aW9ucyA9IG5hbWU7XG4gICAgICAgIHVybCA9IG5hbWUudXJsO1xuICAgICAgICBuYW1lID0gbmFtZS5uYW1lIHx8IG5hbWUua2V5IHx8IG5hbWUudXJsO1xuICAgIH1cblxuICAgIC8vIGNhc2Ugd2hlcmUgbm8gbmFtZSBpcyBwYXNzZWQgc2hpZnQgYWxsIGFyZ3Mgb3ZlciBieSBvbmUuXG4gICAgaWYgKHR5cGVvZiB1cmwgIT09ICdzdHJpbmcnKSB7XG4gICAgICAgIGNiID0gb3B0aW9ucztcbiAgICAgICAgb3B0aW9ucyA9IHVybDtcbiAgICAgICAgdXJsID0gbmFtZTtcbiAgICB9XG5cbiAgICAvLyBub3cgdGhhdCB3ZSBzaGlmdGVkIG1ha2Ugc3VyZSB3ZSBoYXZlIGEgcHJvcGVyIHVybC5cbiAgICBpZiAodHlwZW9mIHVybCAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdObyB1cmwgcGFzc2VkIHRvIGFkZCByZXNvdXJjZSB0byBsb2FkZXIuJyk7XG4gICAgfVxuXG4gICAgLy8gb3B0aW9ucyBhcmUgb3B0aW9uYWwgc28gcGVvcGxlIG1pZ2h0IHBhc3MgYSBmdW5jdGlvbiBhbmQgbm8gb3B0aW9uc1xuICAgIGlmICh0eXBlb2Ygb3B0aW9ucyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBjYiA9IG9wdGlvbnM7XG4gICAgICAgIG9wdGlvbnMgPSBudWxsO1xuICAgIH1cblxuICAgIC8vIGNoZWNrIGlmIHJlc291cmNlIGFscmVhZHkgZXhpc3RzLlxuICAgIGlmICh0aGlzLnJlc291cmNlc1tuYW1lXSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1Jlc291cmNlIHdpdGggbmFtZSBcIicgKyBuYW1lICsgJ1wiIGFscmVhZHkgZXhpc3RzLicpO1xuICAgIH1cblxuICAgIC8vIGFkZCBiYXNlIHVybCBpZiB0aGlzIGlzbid0IGFuIGFic29sdXRlIHVybFxuICAgIHVybCA9IHRoaXMuX2hhbmRsZUJhc2VVcmwodXJsKTtcblxuICAgIC8vIGNyZWF0ZSB0aGUgc3RvcmUgdGhlIHJlc291cmNlXG4gICAgdGhpcy5yZXNvdXJjZXNbbmFtZV0gPSBuZXcgUmVzb3VyY2UobmFtZSwgdXJsLCBvcHRpb25zKTtcblxuICAgIGlmICh0eXBlb2YgY2IgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgdGhpcy5yZXNvdXJjZXNbbmFtZV0ub25jZSgnYWZ0ZXJNaWRkbGV3YXJlJywgY2IpO1xuICAgIH1cblxuICAgIHRoaXMuX251bVRvTG9hZCsrO1xuXG4gICAgLy8gaWYgYWxyZWFkeSBsb2FkaW5nIGFkZCBpdCB0byB0aGUgd29ya2VyIHF1ZXVlXG4gICAgaWYgKHRoaXMuX3F1ZXVlLnN0YXJ0ZWQpIHtcbiAgICAgICAgdGhpcy5fcXVldWUucHVzaCh0aGlzLnJlc291cmNlc1tuYW1lXSk7XG4gICAgICAgIHRoaXMuX3Byb2dyZXNzQ2h1bmsgPSAoMTAwIC0gdGhpcy5wcm9ncmVzcykgLyAodGhpcy5fcXVldWUubGVuZ3RoKCkgKyB0aGlzLl9xdWV1ZS5ydW5uaW5nKCkpO1xuICAgIH1cbiAgICAvLyBvdGhlcndpc2UgYnVmZmVyIGl0IHRvIGJlIGFkZGVkIHRvIHRoZSBxdWV1ZSBsYXRlclxuICAgIGVsc2Uge1xuICAgICAgICB0aGlzLl9idWZmZXIucHVzaCh0aGlzLnJlc291cmNlc1tuYW1lXSk7XG4gICAgICAgIHRoaXMuX3Byb2dyZXNzQ2h1bmsgPSAxMDAgLyB0aGlzLl9idWZmZXIubGVuZ3RoO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzO1xufTtcblxuTG9hZGVyLnByb3RvdHlwZS5faGFuZGxlQmFzZVVybCA9IGZ1bmN0aW9uICh1cmwpIHtcbiAgICB2YXIgcGFyc2VkVXJsID0gdXJsUGFyc2VyLnBhcnNlKHVybCk7XG5cbiAgICAvLyBhYnNvbHV0ZSB1cmwsIGp1c3QgdXNlIGl0IGFzIGlzLlxuICAgIGlmIChwYXJzZWRVcmwucHJvdG9jb2wgfHwgcGFyc2VkVXJsLnBhdGhuYW1lLmluZGV4T2YoJy8vJykgPT09IDApIHtcbiAgICAgICAgcmV0dXJuIHVybDtcbiAgICB9XG5cbiAgICAvLyBpZiBiYXNlVXJsIGRvZXNuJ3QgZW5kIGluIHNsYXNoIGFuZCB1cmwgZG9lc24ndCBzdGFydCB3aXRoIHNsYXNoLCB0aGVuIGFkZCBhIHNsYXNoIGluYmV0d2VlblxuICAgIGlmIChcbiAgICAgICAgdGhpcy5iYXNlVXJsLmxlbmd0aCAmJlxuICAgICAgICB0aGlzLmJhc2VVcmwubGFzdEluZGV4T2YoJy8nKSAhPT0gdGhpcy5iYXNlVXJsLmxlbmd0aCAtIDEgJiZcbiAgICAgICAgdXJsLmNoYXJBdCgwKSAhPT0gJy8nXG4gICAgKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmJhc2VVcmwgKyAnLycgKyB1cmw7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICByZXR1cm4gdGhpcy5iYXNlVXJsICsgdXJsO1xuICAgIH1cbn07XG5cblxuLyoqXG4gKiBTZXRzIHVwIGEgbWlkZGxld2FyZSBmdW5jdGlvbiB0aGF0IHdpbGwgcnVuICpiZWZvcmUqIHRoZVxuICogcmVzb3VyY2UgaXMgbG9hZGVkLlxuICpcbiAqIEBhbGlhcyBwcmVcbiAqIEBwYXJhbSBtaWRkbGV3YXJlIHtmdW5jdGlvbn0gVGhlIG1pZGRsZXdhcmUgZnVuY3Rpb24gdG8gcmVnaXN0ZXIuXG4gKiBAcmV0dXJuIHtMb2FkZXJ9XG4gKi9cbkxvYWRlci5wcm90b3R5cGUuYmVmb3JlID0gTG9hZGVyLnByb3RvdHlwZS5wcmUgPSBmdW5jdGlvbiAoZm4pIHtcbiAgICB0aGlzLl9iZWZvcmVNaWRkbGV3YXJlLnB1c2goZm4pO1xuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIFNldHMgdXAgYSBtaWRkbGV3YXJlIGZ1bmN0aW9uIHRoYXQgd2lsbCBydW4gKmFmdGVyKiB0aGVcbiAqIHJlc291cmNlIGlzIGxvYWRlZC5cbiAqXG4gKiBAYWxpYXMgdXNlXG4gKiBAcGFyYW0gbWlkZGxld2FyZSB7ZnVuY3Rpb259IFRoZSBtaWRkbGV3YXJlIGZ1bmN0aW9uIHRvIHJlZ2lzdGVyLlxuICogQHJldHVybiB7TG9hZGVyfVxuICovXG5Mb2FkZXIucHJvdG90eXBlLmFmdGVyID0gTG9hZGVyLnByb3RvdHlwZS51c2UgPSBmdW5jdGlvbiAoZm4pIHtcbiAgICB0aGlzLl9hZnRlck1pZGRsZXdhcmUucHVzaChmbik7XG5cbiAgICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogUmVzZXRzIHRoZSBxdWV1ZSBvZiB0aGUgbG9hZGVyIHRvIHByZXBhcmUgZm9yIGEgbmV3IGxvYWQuXG4gKlxuICogQHJldHVybiB7TG9hZGVyfVxuICovXG5Mb2FkZXIucHJvdG90eXBlLnJlc2V0ID0gZnVuY3Rpb24gKCkge1xuICAgIC8vIHRoaXMuYmFzZVVybCA9IGJhc2VVcmwgfHwgJyc7XG5cbiAgICB0aGlzLnByb2dyZXNzID0gMDtcblxuICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xuXG4gICAgdGhpcy5fcHJvZ3Jlc3NDaHVuayA9IDA7XG5cbiAgICAvLyB0aGlzLl9iZWZvcmVNaWRkbGV3YXJlLmxlbmd0aCA9IDA7XG4gICAgLy8gdGhpcy5fYWZ0ZXJNaWRkbGV3YXJlLmxlbmd0aCA9IDA7XG5cbiAgICB0aGlzLl9idWZmZXIubGVuZ3RoID0gMDtcblxuICAgIHRoaXMuX251bVRvTG9hZCA9IDA7XG5cbiAgICB0aGlzLl9xdWV1ZS5raWxsKCk7XG4gICAgdGhpcy5fcXVldWUuc3RhcnRlZCA9IGZhbHNlO1xuXG4gICAgdGhpcy5yZXNvdXJjZXMgPSB7fTtcbn07XG5cbi8qKlxuICogU3RhcnRzIGxvYWRpbmcgdGhlIHF1ZXVlZCByZXNvdXJjZXMuXG4gKlxuICogQGZpcmVzIHN0YXJ0XG4gKiBAcGFyYW0gW2NhbGxiYWNrXSB7ZnVuY3Rpb259IE9wdGlvbmFsIGNhbGxiYWNrIHRoYXQgd2lsbCBiZSBib3VuZCB0byB0aGUgYGNvbXBsZXRlYCBldmVudC5cbiAqIEByZXR1cm4ge0xvYWRlcn1cbiAqL1xuTG9hZGVyLnByb3RvdHlwZS5sb2FkID0gZnVuY3Rpb24gKGNiKSB7XG4gICAgLy8gcmVnaXN0ZXIgY29tcGxldGUgY2FsbGJhY2sgaWYgdGhleSBwYXNzIG9uZVxuICAgIGlmICh0eXBlb2YgY2IgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgdGhpcy5vbmNlKCdjb21wbGV0ZScsIGNiKTtcbiAgICB9XG5cbiAgICAvLyBpZiB0aGUgcXVldWUgaGFzIGFscmVhZHkgc3RhcnRlZCB3ZSBhcmUgZG9uZSBoZXJlXG4gICAgaWYgKHRoaXMuX3F1ZXVlLnN0YXJ0ZWQpIHtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLy8gbm90aWZ5IG9mIHN0YXJ0XG4gICAgdGhpcy5lbWl0KCdzdGFydCcsIHRoaXMpO1xuXG4gICAgLy8gc3RhcnQgdGhlIGludGVybmFsIHF1ZXVlXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLl9idWZmZXIubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgdGhpcy5fcXVldWUucHVzaCh0aGlzLl9idWZmZXJbaV0pO1xuICAgIH1cblxuICAgIC8vIGVtcHR5IHRoZSBidWZmZXJcbiAgICB0aGlzLl9idWZmZXIubGVuZ3RoID0gMDtcblxuICAgIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBMb2FkcyBhIHNpbmdsZSByZXNvdXJjZS5cbiAqXG4gKiBAZmlyZXMgcHJvZ3Jlc3NcbiAqIEBwcml2YXRlXG4gKi9cbkxvYWRlci5wcm90b3R5cGUuX2xvYWRSZXNvdXJjZSA9IGZ1bmN0aW9uIChyZXNvdXJjZSwgZGVxdWV1ZSkge1xuICAgIHZhciBzZWxmID0gdGhpcztcblxuICAgIHJlc291cmNlLl9kZXF1ZXVlID0gZGVxdWV1ZTtcblxuICAgIHRoaXMuX3J1bk1pZGRsZXdhcmUocmVzb3VyY2UsIHRoaXMuX2JlZm9yZU1pZGRsZXdhcmUsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgLy8gcmVzb3VyY2Uub24oJ3Byb2dyZXNzJywgc2VsZi5lbWl0LmJpbmQoc2VsZiwgJ3Byb2dyZXNzJykpO1xuXG4gICAgICAgIHJlc291cmNlLmxvYWQoc2VsZi5fYm91bmRPbkxvYWQpO1xuICAgIH0pO1xufTtcblxuLyoqXG4gKiBDYWxsZWQgb25jZSBlYWNoIHJlc291cmNlIGhhcyBsb2FkZWQuXG4gKlxuICogQGZpcmVzIGNvbXBsZXRlXG4gKiBAcHJpdmF0ZVxuICovXG5Mb2FkZXIucHJvdG90eXBlLl9vbkNvbXBsZXRlID0gZnVuY3Rpb24gKCkge1xuICAgIHRoaXMuZW1pdCgnY29tcGxldGUnLCB0aGlzLCB0aGlzLnJlc291cmNlcyk7XG59O1xuXG4vKipcbiAqIENhbGxlZCBlYWNoIHRpbWUgYSByZXNvdXJjZXMgaXMgbG9hZGVkLlxuICpcbiAqIEBmaXJlcyBwcm9ncmVzc1xuICogQGZpcmVzIGVycm9yXG4gKiBAZmlyZXMgbG9hZFxuICogQHByaXZhdGVcbiAqL1xuTG9hZGVyLnByb3RvdHlwZS5fb25Mb2FkID0gZnVuY3Rpb24gKHJlc291cmNlKSB7XG4gICAgdGhpcy5wcm9ncmVzcyArPSB0aGlzLl9wcm9ncmVzc0NodW5rO1xuXG4gICAgdGhpcy5lbWl0KCdwcm9ncmVzcycsIHRoaXMsIHJlc291cmNlKTtcblxuICAgIC8vIHJ1biBtaWRkbGV3YXJlLCB0aGlzICptdXN0KiBoYXBwZW4gYmVmb3JlIGRlcXVldWUgc28gc3ViLWFzc2V0cyBnZXQgYWRkZWQgcHJvcGVybHlcbiAgICB0aGlzLl9ydW5NaWRkbGV3YXJlKHJlc291cmNlLCB0aGlzLl9hZnRlck1pZGRsZXdhcmUsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmVzb3VyY2UuZW1pdCgnYWZ0ZXJNaWRkbGV3YXJlJywgcmVzb3VyY2UpO1xuXG4gICAgICAgIHRoaXMuX251bVRvTG9hZC0tO1xuXG4gICAgICAgIC8vIGRvIGNvbXBsZXRpb24gY2hlY2tcbiAgICAgICAgaWYgKHRoaXMuX251bVRvTG9hZCA9PT0gMCkge1xuICAgICAgICAgICAgdGhpcy5wcm9ncmVzcyA9IDEwMDtcbiAgICAgICAgICAgIHRoaXMuX29uQ29tcGxldGUoKTtcbiAgICAgICAgfVxuICAgICAgICBcbiAgICAgICAgaWYgKHJlc291cmNlLmVycm9yKSB7XG4gICAgICAgICAgICB0aGlzLmVtaXQoJ2Vycm9yJywgcmVzb3VyY2UuZXJyb3IsIHRoaXMsIHJlc291cmNlKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuZW1pdCgnbG9hZCcsIHRoaXMsIHJlc291cmNlKTtcbiAgICAgICAgfVxuICAgIH0pO1xuICAgIFxuXG5cbiAgICAvLyByZW1vdmUgdGhpcyByZXNvdXJjZSBmcm9tIHRoZSBhc3luYyBxdWV1ZVxuICAgIHJlc291cmNlLl9kZXF1ZXVlKCk7XG59O1xuXG4vKipcbiAqIFJ1biBtaWRkbGV3YXJlIGZ1bmN0aW9ucyBvbiBhIHJlc291cmNlLlxuICpcbiAqIEBwcml2YXRlXG4gKi9cbkxvYWRlci5wcm90b3R5cGUuX3J1bk1pZGRsZXdhcmUgPSBmdW5jdGlvbiAocmVzb3VyY2UsIGZucywgY2IpIHtcbiAgICB2YXIgc2VsZiA9IHRoaXM7XG5cbiAgICBhc3luYy5lYWNoU2VyaWVzKGZucywgZnVuY3Rpb24gKGZuLCBuZXh0KSB7XG4gICAgICAgIGZuLmNhbGwoc2VsZiwgcmVzb3VyY2UsIG5leHQpO1xuICAgIH0sIGNiLmJpbmQodGhpcywgcmVzb3VyY2UpKTtcbn07XG5cbkxvYWRlci5MT0FEX1RZUEUgPSBSZXNvdXJjZS5MT0FEX1RZUEU7XG5Mb2FkZXIuWEhSX1JFQURZX1NUQVRFID0gUmVzb3VyY2UuWEhSX1JFQURZX1NUQVRFO1xuTG9hZGVyLlhIUl9SRVNQT05TRV9UWVBFID0gUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEU7XG4iLCJ2YXIgRXZlbnRFbWl0dGVyID0gcmVxdWlyZSgnZXZlbnRlbWl0dGVyMycpLFxuICAgIF91cmwgPSByZXF1aXJlKCd1cmwnKSxcbiAgICAvLyB0ZXN0cyBpcyBDT1JTIGlzIHN1cHBvcnRlZCBpbiBYSFIsIGlmIG5vdCB3ZSBuZWVkIHRvIHVzZSBYRFJcbiAgICB1c2VYZHIgPSAhISh3aW5kb3cuWERvbWFpblJlcXVlc3QgJiYgISgnd2l0aENyZWRlbnRpYWxzJyBpbiAobmV3IFhNTEh0dHBSZXF1ZXN0KCkpKSksXG4gICAgdGVtcEFuY2hvciA9IG51bGw7XG5cbi8qKlxuICogTWFuYWdlcyB0aGUgc3RhdGUgYW5kIGxvYWRpbmcgb2YgYSBzaW5nbGUgcmVzb3VyY2UgcmVwcmVzZW50ZWQgYnlcbiAqIGEgc2luZ2xlIFVSTC5cbiAqXG4gKiBAY2xhc3NcbiAqIEBwYXJhbSBuYW1lIHtzdHJpbmd9IFRoZSBuYW1lIG9mIHRoZSByZXNvdXJjZSB0byBsb2FkLlxuICogQHBhcmFtIHVybCB7c3RyaW5nfHN0cmluZ1tdfSBUaGUgdXJsIGZvciB0aGlzIHJlc291cmNlLCBmb3IgYXVkaW8vdmlkZW8gbG9hZHMgeW91IGNhbiBwYXNzIGFuIGFycmF5IG9mIHNvdXJjZXMuXG4gKiBAcGFyYW0gW29wdGlvbnNdIHtvYmplY3R9IFRoZSBvcHRpb25zIGZvciB0aGUgbG9hZC5cbiAqIEBwYXJhbSBbb3B0aW9ucy5jcm9zc09yaWdpbl0ge3N0cmluZ3xib29sZWFufSBJcyB0aGlzIHJlcXVlc3QgY3Jvc3Mtb3JpZ2luPyBEZWZhdWx0IGlzIHRvIGRldGVybWluZSBhdXRvbWF0aWNhbGx5LlxuICogQHBhcmFtIFtvcHRpb25zLmxvYWRUeXBlPVJlc291cmNlLkxPQURfVFlQRS5YSFJdIHtSZXNvdXJjZS5MT0FEX1RZUEV9IEhvdyBzaG91bGQgdGhpcyByZXNvdXJjZSBiZSBsb2FkZWQ/XG4gKiBAcGFyYW0gW29wdGlvbnMueGhyVHlwZT1SZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRS5ERUZBVUxUXSB7UmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEV9IEhvdyBzaG91bGQgdGhlIGRhdGEgYmVpbmdcbiAqICAgICAgbG9hZGVkIGJlIGludGVycHJldGVkIHdoZW4gdXNpbmcgWEhSP1xuICogQHBhcmFtIFtvcHRpb25zLm1ldGFkYXRhXSB7b2JqZWN0fSBFeHRyYSBpbmZvIGZvciBtaWRkbGV3YXJlLlxuICovXG5mdW5jdGlvbiBSZXNvdXJjZShuYW1lLCB1cmwsIG9wdGlvbnMpIHtcbiAgICBFdmVudEVtaXR0ZXIuY2FsbCh0aGlzKTtcblxuICAgIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuXG4gICAgaWYgKHR5cGVvZiBuYW1lICE9PSAnc3RyaW5nJyB8fCB0eXBlb2YgdXJsICE9PSAnc3RyaW5nJykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0JvdGggbmFtZSBhbmQgdXJsIGFyZSByZXF1aXJlZCBmb3IgY29uc3RydWN0aW5nIGEgcmVzb3VyY2UuJyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhlIG5hbWUgb2YgdGhpcyByZXNvdXJjZS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge3N0cmluZ31cbiAgICAgKiBAcmVhZG9ubHlcbiAgICAgKi9cbiAgICB0aGlzLm5hbWUgPSBuYW1lO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHVybCB1c2VkIHRvIGxvYWQgdGhpcyByZXNvdXJjZS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge3N0cmluZ31cbiAgICAgKiBAcmVhZG9ubHlcbiAgICAgKi9cbiAgICB0aGlzLnVybCA9IHVybDtcblxuICAgIC8qKlxuICAgICAqIFN0b3JlcyB3aGV0aGVyIG9yIG5vdCB0aGlzIHVybCBpcyBhIGRhdGEgdXJsLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKiBAcmVhZG9ubHlcbiAgICAgKi9cbiAgICB0aGlzLmlzRGF0YVVybCA9IHRoaXMudXJsLmluZGV4T2YoJ2RhdGE6JykgPT09IDA7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgZGF0YSB0aGF0IHdhcyBsb2FkZWQgYnkgdGhlIHJlc291cmNlLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7YW55fVxuICAgICAqL1xuICAgIHRoaXMuZGF0YSA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBJcyB0aGlzIHJlcXVlc3QgY3Jvc3Mtb3JpZ2luPyBJZiB1bnNldCwgZGV0ZXJtaW5lZCBhdXRvbWF0aWNhbGx5LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7c3RyaW5nfVxuICAgICAqL1xuICAgIHRoaXMuY3Jvc3NPcmlnaW4gPSBvcHRpb25zLmNyb3NzT3JpZ2luID09PSB0cnVlID8gJ2Fub255bW91cycgOiBvcHRpb25zLmNyb3NzT3JpZ2luO1xuXG4gICAgLyoqXG4gICAgICogVGhlIG1ldGhvZCBvZiBsb2FkaW5nIHRvIHVzZSBmb3IgdGhpcyByZXNvdXJjZS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1Jlc291cmNlLkxPQURfVFlQRX1cbiAgICAgKi9cbiAgICB0aGlzLmxvYWRUeXBlID0gb3B0aW9ucy5sb2FkVHlwZSB8fCB0aGlzLl9kZXRlcm1pbmVMb2FkVHlwZSgpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHR5cGUgdXNlZCB0byBsb2FkIHRoZSByZXNvdXJjZSB2aWEgWEhSLiBJZiB1bnNldCwgZGV0ZXJtaW5lZCBhdXRvbWF0aWNhbGx5LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7c3RyaW5nfVxuICAgICAqL1xuICAgIHRoaXMueGhyVHlwZSA9IG9wdGlvbnMueGhyVHlwZTtcblxuICAgIC8qKlxuICAgICAqIEV4dHJhIGluZm8gZm9yIG1pZGRsZXdhcmVcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge29iamVjdH1cbiAgICAgKi9cbiAgICB0aGlzLm1ldGFkYXRhID0gb3B0aW9ucy5tZXRhZGF0YSB8fCB7fTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBlcnJvciB0aGF0IG9jY3VycmVkIHdoaWxlIGxvYWRpbmcgKGlmIGFueSkuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtFcnJvcn1cbiAgICAgKiBAcmVhZG9ubHlcbiAgICAgKi9cbiAgICB0aGlzLmVycm9yID0gbnVsbDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBYSFIgb2JqZWN0IHRoYXQgd2FzIHVzZWQgdG8gbG9hZCB0aGlzIHJlc291cmNlLiBUaGlzIGlzIG9ubHkgc2V0XG4gICAgICogd2hlbiBgbG9hZFR5cGVgIGlzIGBSZXNvdXJjZS5MT0FEX1RZUEUuWEhSYC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1hNTEh0dHBSZXF1ZXN0fVxuICAgICAqL1xuICAgIHRoaXMueGhyID0gbnVsbDtcblxuICAgIC8qKlxuICAgICAqIERlc2NyaWJlcyBpZiB0aGlzIHJlc291cmNlIHdhcyBsb2FkZWQgYXMganNvbi4gT25seSB2YWxpZCBhZnRlciB0aGUgcmVzb3VyY2VcbiAgICAgKiBoYXMgY29tcGxldGVseSBsb2FkZWQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqL1xuICAgIHRoaXMuaXNKc29uID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBEZXNjcmliZXMgaWYgdGhpcyByZXNvdXJjZSB3YXMgbG9hZGVkIGFzIHhtbC4gT25seSB2YWxpZCBhZnRlciB0aGUgcmVzb3VyY2VcbiAgICAgKiBoYXMgY29tcGxldGVseSBsb2FkZWQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqL1xuICAgIHRoaXMuaXNYbWwgPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIERlc2NyaWJlcyBpZiB0aGlzIHJlc291cmNlIHdhcyBsb2FkZWQgYXMgYW4gaW1hZ2UgdGFnLiBPbmx5IHZhbGlkIGFmdGVyIHRoZSByZXNvdXJjZVxuICAgICAqIGhhcyBjb21wbGV0ZWx5IGxvYWRlZC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICovXG4gICAgdGhpcy5pc0ltYWdlID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBEZXNjcmliZXMgaWYgdGhpcyByZXNvdXJjZSB3YXMgbG9hZGVkIGFzIGFuIGF1ZGlvIHRhZy4gT25seSB2YWxpZCBhZnRlciB0aGUgcmVzb3VyY2VcbiAgICAgKiBoYXMgY29tcGxldGVseSBsb2FkZWQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqL1xuICAgIHRoaXMuaXNBdWRpbyA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogRGVzY3JpYmVzIGlmIHRoaXMgcmVzb3VyY2Ugd2FzIGxvYWRlZCBhcyBhIHZpZGVvIHRhZy4gT25seSB2YWxpZCBhZnRlciB0aGUgcmVzb3VyY2VcbiAgICAgKiBoYXMgY29tcGxldGVseSBsb2FkZWQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqL1xuICAgIHRoaXMuaXNWaWRlbyA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGBkZXF1ZXVlYCBtZXRob2QgdGhhdCB3aWxsIGJlIHVzZWQgYSBzdG9yYWdlIHBsYWNlIGZvciB0aGUgYXN5bmMgcXVldWUgZGVxdWV1ZSBtZXRob2RcbiAgICAgKiB1c2VkIHByaXZhdGVseSBieSB0aGUgbG9hZGVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7ZnVuY3Rpb259XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9kZXF1ZXVlID0gbnVsbDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBgY29tcGxldGVgIGZ1bmN0aW9uIGJvdW5kIHRvIHRoaXMgcmVzb3VyY2UncyBjb250ZXh0LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7ZnVuY3Rpb259XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9ib3VuZENvbXBsZXRlID0gdGhpcy5jb21wbGV0ZS5iaW5kKHRoaXMpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGBfb25FcnJvcmAgZnVuY3Rpb24gYm91bmQgdG8gdGhpcyByZXNvdXJjZSdzIGNvbnRleHQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtmdW5jdGlvbn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX2JvdW5kT25FcnJvciA9IHRoaXMuX29uRXJyb3IuYmluZCh0aGlzKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBgX29uUHJvZ3Jlc3NgIGZ1bmN0aW9uIGJvdW5kIHRvIHRoaXMgcmVzb3VyY2UncyBjb250ZXh0LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7ZnVuY3Rpb259XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9ib3VuZE9uUHJvZ3Jlc3MgPSB0aGlzLl9vblByb2dyZXNzLmJpbmQodGhpcyk7XG5cbiAgICAvLyB4aHIgY2FsbGJhY2tzXG4gICAgdGhpcy5fYm91bmRYaHJPbkVycm9yID0gdGhpcy5feGhyT25FcnJvci5iaW5kKHRoaXMpO1xuICAgIHRoaXMuX2JvdW5kWGhyT25BYm9ydCA9IHRoaXMuX3hock9uQWJvcnQuYmluZCh0aGlzKTtcbiAgICB0aGlzLl9ib3VuZFhock9uTG9hZCA9IHRoaXMuX3hock9uTG9hZC5iaW5kKHRoaXMpO1xuICAgIHRoaXMuX2JvdW5kWGRyT25UaW1lb3V0ID0gdGhpcy5feGRyT25UaW1lb3V0LmJpbmQodGhpcyk7XG5cbiAgICAvKipcbiAgICAgKiBFbWl0dGVkIHdoZW4gdGhlIHJlc291cmNlIGJlaW5ncyB0byBsb2FkLlxuICAgICAqXG4gICAgICogQGV2ZW50IHN0YXJ0XG4gICAgICogQG1lbWJlcm9mIFJlc291cmNlI1xuICAgICAqL1xuXG4gICAgLyoqXG4gICAgICogRW1pdHRlZCBlYWNoIHRpbWUgcHJvZ3Jlc3Mgb2YgdGhpcyByZXNvdXJjZSBsb2FkIHVwZGF0ZXMuXG4gICAgICogTm90IGFsbCByZXNvdXJjZXMgdHlwZXMgYW5kIGxvYWRlciBzeXN0ZW1zIGNhbiBzdXBwb3J0IHRoaXMgZXZlbnRcbiAgICAgKiBzbyBzb21ldGltZXMgaXQgbWF5IG5vdCBiZSBhdmFpbGFibGUuIElmIHRoZSByZXNvdXJjZVxuICAgICAqIGlzIGJlaW5nIGxvYWRlZCBvbiBhIG1vZGVybiBicm93c2VyLCB1c2luZyBYSFIsIGFuZCB0aGUgcmVtb3RlIHNlcnZlclxuICAgICAqIHByb3Blcmx5IHNldHMgQ29udGVudC1MZW5ndGggaGVhZGVycywgdGhlbiB0aGlzIHdpbGwgYmUgYXZhaWxhYmxlLlxuICAgICAqXG4gICAgICogQGV2ZW50IHByb2dyZXNzXG4gICAgICogQG1lbWJlcm9mIFJlc291cmNlI1xuICAgICAqL1xuXG4gICAgLyoqXG4gICAgICogRW1pdHRlZCBvbmNlIHRoaXMgcmVzb3VyY2UgaGFzIGxvYWRlZCwgaWYgdGhlcmUgd2FzIGFuIGVycm9yIGl0IHdpbGxcbiAgICAgKiBiZSBpbiB0aGUgYGVycm9yYCBwcm9wZXJ0eS5cbiAgICAgKlxuICAgICAqIEBldmVudCBjb21wbGV0ZVxuICAgICAqIEBtZW1iZXJvZiBSZXNvdXJjZSNcbiAgICAgKi9cbn1cblxuUmVzb3VyY2UucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShFdmVudEVtaXR0ZXIucHJvdG90eXBlKTtcblJlc291cmNlLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFJlc291cmNlO1xubW9kdWxlLmV4cG9ydHMgPSBSZXNvdXJjZTtcblxuLyoqXG4gKiBNYXJrcyB0aGUgcmVzb3VyY2UgYXMgY29tcGxldGUuXG4gKlxuICogQGZpcmVzIGNvbXBsZXRlXG4gKi9cblJlc291cmNlLnByb3RvdHlwZS5jb21wbGV0ZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAvLyBUT0RPOiBDbGVhbiB0aGlzIHVwIGluIGEgd3JhcHBlciBvciBzb21ldGhpbmcuLi5ncm9zcy4uLi5cbiAgICBpZiAodGhpcy5kYXRhICYmIHRoaXMuZGF0YS5yZW1vdmVFdmVudExpc3RlbmVyKSB7XG4gICAgICAgIHRoaXMuZGF0YS5yZW1vdmVFdmVudExpc3RlbmVyKCdlcnJvcicsIHRoaXMuX2JvdW5kT25FcnJvcik7XG4gICAgICAgIHRoaXMuZGF0YS5yZW1vdmVFdmVudExpc3RlbmVyKCdsb2FkJywgdGhpcy5fYm91bmRDb21wbGV0ZSk7XG4gICAgICAgIHRoaXMuZGF0YS5yZW1vdmVFdmVudExpc3RlbmVyKCdwcm9ncmVzcycsIHRoaXMuX2JvdW5kT25Qcm9ncmVzcyk7XG4gICAgICAgIHRoaXMuZGF0YS5yZW1vdmVFdmVudExpc3RlbmVyKCdjYW5wbGF5dGhyb3VnaCcsIHRoaXMuX2JvdW5kQ29tcGxldGUpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnhocikge1xuICAgICAgICBpZiAodGhpcy54aHIucmVtb3ZlRXZlbnRMaXN0ZW5lcikge1xuICAgICAgICAgICAgdGhpcy54aHIucmVtb3ZlRXZlbnRMaXN0ZW5lcignZXJyb3InLCB0aGlzLl9ib3VuZFhock9uRXJyb3IpO1xuICAgICAgICAgICAgdGhpcy54aHIucmVtb3ZlRXZlbnRMaXN0ZW5lcignYWJvcnQnLCB0aGlzLl9ib3VuZFhock9uQWJvcnQpO1xuICAgICAgICAgICAgdGhpcy54aHIucmVtb3ZlRXZlbnRMaXN0ZW5lcigncHJvZ3Jlc3MnLCB0aGlzLl9ib3VuZE9uUHJvZ3Jlc3MpO1xuICAgICAgICAgICAgdGhpcy54aHIucmVtb3ZlRXZlbnRMaXN0ZW5lcignbG9hZCcsIHRoaXMuX2JvdW5kWGhyT25Mb2FkKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMueGhyLm9uZXJyb3IgPSBudWxsO1xuICAgICAgICAgICAgdGhpcy54aHIub250aW1lb3V0ID0gbnVsbDtcbiAgICAgICAgICAgIHRoaXMueGhyLm9ucHJvZ3Jlc3MgPSBudWxsO1xuICAgICAgICAgICAgdGhpcy54aHIub25sb2FkID0gbnVsbDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMuZW1pdCgnY29tcGxldGUnLCB0aGlzKTtcbn07XG5cbi8qKlxuICogS2lja3Mgb2ZmIGxvYWRpbmcgb2YgdGhpcyByZXNvdXJjZS5cbiAqXG4gKiBAZmlyZXMgc3RhcnRcbiAqIEBwYXJhbSBbY2FsbGJhY2tdIHtmdW5jdGlvbn0gT3B0aW9uYWwgY2FsbGJhY2sgdG8gY2FsbCBvbmNlIHRoZSByZXNvdXJjZSBpcyBsb2FkZWQuXG4gKi9cblJlc291cmNlLnByb3RvdHlwZS5sb2FkID0gZnVuY3Rpb24gKGNiKSB7XG4gICAgdGhpcy5lbWl0KCdzdGFydCcsIHRoaXMpO1xuXG4gICAgLy8gaWYgYSBjYWxsYmFjayBpcyBzZXQsIGxpc3RlbiBmb3IgY29tcGxldGUgZXZlbnRcbiAgICBpZiAoY2IpIHtcbiAgICAgICAgdGhpcy5vbmNlKCdjb21wbGV0ZScsIGNiKTtcbiAgICB9XG5cbiAgICAvLyBpZiB1bnNldCwgZGV0ZXJtaW5lIHRoZSB2YWx1ZVxuICAgIGlmICh0aGlzLmNyb3NzT3JpZ2luID09PSBmYWxzZSB8fCB0eXBlb2YgdGhpcy5jcm9zc09yaWdpbiAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgdGhpcy5jcm9zc09yaWdpbiA9IHRoaXMuX2RldGVybWluZUNyb3NzT3JpZ2luKHRoaXMudXJsKTtcbiAgICB9XG5cbiAgICBzd2l0Y2godGhpcy5sb2FkVHlwZSkge1xuICAgICAgICBjYXNlIFJlc291cmNlLkxPQURfVFlQRS5JTUFHRTpcbiAgICAgICAgICAgIHRoaXMuX2xvYWRJbWFnZSgpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSBSZXNvdXJjZS5MT0FEX1RZUEUuQVVESU86XG4gICAgICAgICAgICB0aGlzLl9sb2FkRWxlbWVudCgnYXVkaW8nKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgUmVzb3VyY2UuTE9BRF9UWVBFLlZJREVPOlxuICAgICAgICAgICAgdGhpcy5fbG9hZEVsZW1lbnQoJ3ZpZGVvJyk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIFJlc291cmNlLkxPQURfVFlQRS5YSFI6XG4gICAgICAgICAgICAvKiBmYWxscyB0aHJvdWdoICovXG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICBpZiAodXNlWGRyICYmIHRoaXMuY3Jvc3NPcmlnaW4pIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9sb2FkWGRyKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9sb2FkWGhyKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBicmVhaztcbiAgICB9XG59O1xuXG4vKipcbiAqIExvYWRzIHRoaXMgcmVzb3VyY2VzIHVzaW5nIGFuIEltYWdlIG9iamVjdC5cbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5SZXNvdXJjZS5wcm90b3R5cGUuX2xvYWRJbWFnZSA9IGZ1bmN0aW9uICgpIHtcbiAgICB0aGlzLmRhdGEgPSBuZXcgSW1hZ2UoKTtcblxuICAgIGlmICh0aGlzLmNyb3NzT3JpZ2luKSB7XG4gICAgICAgIHRoaXMuZGF0YS5jcm9zc09yaWdpbiA9IHRoaXMuY3Jvc3NPcmlnaW47XG4gICAgfVxuXG4gICAgdGhpcy5kYXRhLnNyYyA9IHRoaXMudXJsO1xuXG4gICAgdGhpcy5pc0ltYWdlID0gdHJ1ZTtcblxuICAgIHRoaXMuZGF0YS5hZGRFdmVudExpc3RlbmVyKCdlcnJvcicsIHRoaXMuX2JvdW5kT25FcnJvciwgZmFsc2UpO1xuICAgIHRoaXMuZGF0YS5hZGRFdmVudExpc3RlbmVyKCdsb2FkJywgdGhpcy5fYm91bmRDb21wbGV0ZSwgZmFsc2UpO1xuICAgIHRoaXMuZGF0YS5hZGRFdmVudExpc3RlbmVyKCdwcm9ncmVzcycsIHRoaXMuX2JvdW5kT25Qcm9ncmVzcywgZmFsc2UpO1xufTtcblxuLyoqXG4gKiBMb2FkcyB0aGlzIHJlc291cmNlcyB1c2luZyBhbiBIVE1MQXVkaW9FbGVtZW50IG9yIEhUTUxWaWRlb0VsZW1lbnQuXG4gKlxuICogQHByaXZhdGVcbiAqL1xuUmVzb3VyY2UucHJvdG90eXBlLl9sb2FkRWxlbWVudCA9IGZ1bmN0aW9uICh0eXBlKSB7XG4gICAgaWYgKHR5cGUgPT09ICdhdWRpbycgJiYgdHlwZW9mIEF1ZGlvICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICB0aGlzLmRhdGEgPSBuZXcgQXVkaW8oKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHRoaXMuZGF0YSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQodHlwZSk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuZGF0YSA9PT0gbnVsbCkge1xuICAgICAgICB0aGlzLmVycm9yID0gbmV3IEVycm9yKCdVbnN1cHBvcnRlZCBlbGVtZW50ICcgKyB0eXBlKTtcbiAgICAgICAgdGhpcy5jb21wbGV0ZSgpO1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gc3VwcG9ydCBmb3IgQ29jb29uSlMgQ2FudmFzKyBydW50aW1lLCBsYWNrcyBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzb3VyY2UnKVxuICAgIGlmIChuYXZpZ2F0b3IuaXNDb2Nvb25KUykge1xuICAgICAgICB0aGlzLmRhdGEuc3JjID0gQXJyYXkuaXNBcnJheSh0aGlzLnVybCkgPyB0aGlzLnVybFswXSA6IHRoaXMudXJsO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkodGhpcy51cmwpKSB7XG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMudXJsLmxlbmd0aDsgKytpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5kYXRhLmFwcGVuZENoaWxkKHRoaXMuX2NyZWF0ZVNvdXJjZSh0eXBlLCB0aGlzLnVybFtpXSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5kYXRhLmFwcGVuZENoaWxkKHRoaXMuX2NyZWF0ZVNvdXJjZSh0eXBlLCB0aGlzLnVybCkpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgdGhpc1snaXMnICsgdHlwZVswXS50b1VwcGVyQ2FzZSgpICsgdHlwZS5zdWJzdHJpbmcoMSldID0gdHJ1ZTtcblxuICAgIHRoaXMuZGF0YS5hZGRFdmVudExpc3RlbmVyKCdlcnJvcicsIHRoaXMuX2JvdW5kT25FcnJvciwgZmFsc2UpO1xuICAgIHRoaXMuZGF0YS5hZGRFdmVudExpc3RlbmVyKCdsb2FkJywgdGhpcy5fYm91bmRDb21wbGV0ZSwgZmFsc2UpO1xuICAgIHRoaXMuZGF0YS5hZGRFdmVudExpc3RlbmVyKCdwcm9ncmVzcycsIHRoaXMuX2JvdW5kT25Qcm9ncmVzcywgZmFsc2UpO1xuICAgIHRoaXMuZGF0YS5hZGRFdmVudExpc3RlbmVyKCdjYW5wbGF5dGhyb3VnaCcsIHRoaXMuX2JvdW5kQ29tcGxldGUsIGZhbHNlKTtcblxuICAgIHRoaXMuZGF0YS5sb2FkKCk7XG59O1xuXG4vKipcbiAqIExvYWRzIHRoaXMgcmVzb3VyY2VzIHVzaW5nIGFuIFhNTEh0dHBSZXF1ZXN0LlxuICpcbiAqIEBwcml2YXRlXG4gKi9cblJlc291cmNlLnByb3RvdHlwZS5fbG9hZFhociA9IGZ1bmN0aW9uICgpIHtcbiAgICAvLyBpZiB1bnNldCwgZGV0ZXJtaW5lIHRoZSB2YWx1ZVxuICAgIGlmICh0eXBlb2YgdGhpcy54aHJUeXBlICE9PSAnc3RyaW5nJykge1xuICAgICAgICB0aGlzLnhoclR5cGUgPSB0aGlzLl9kZXRlcm1pbmVYaHJUeXBlKCk7XG4gICAgfVxuXG4gICAgdmFyIHhociA9IHRoaXMueGhyID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7XG5cbiAgICAvLyBzZXQgdGhlIHJlcXVlc3QgdHlwZSBhbmQgdXJsXG4gICAgeGhyLm9wZW4oJ0dFVCcsIHRoaXMudXJsLCB0cnVlKTtcblxuICAgIC8vIGxvYWQganNvbiBhcyB0ZXh0IGFuZCBwYXJzZSBpdCBvdXJzZWx2ZXMuIFdlIGRvIHRoaXMgYmVjYXVzZSBzb21lIGJyb3dzZXJzXG4gICAgLy8gKmNvdWdoKiBzYWZhcmkgKmNvdWdoKiBjYW4ndCBkZWFsIHdpdGggaXQuXG4gICAgaWYgKHRoaXMueGhyVHlwZSA9PT0gUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuSlNPTiB8fCB0aGlzLnhoclR5cGUgPT09IFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkRPQ1VNRU5UKSB7XG4gICAgICAgIHhoci5yZXNwb25zZVR5cGUgPSBSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRS5URVhUO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgeGhyLnJlc3BvbnNlVHlwZSA9IHRoaXMueGhyVHlwZTtcbiAgICB9XG5cbiAgICB4aHIuYWRkRXZlbnRMaXN0ZW5lcignZXJyb3InLCB0aGlzLl9ib3VuZFhock9uRXJyb3IsIGZhbHNlKTtcbiAgICB4aHIuYWRkRXZlbnRMaXN0ZW5lcignYWJvcnQnLCB0aGlzLl9ib3VuZFhock9uQWJvcnQsIGZhbHNlKTtcbiAgICB4aHIuYWRkRXZlbnRMaXN0ZW5lcigncHJvZ3Jlc3MnLCB0aGlzLl9ib3VuZE9uUHJvZ3Jlc3MsIGZhbHNlKTtcbiAgICB4aHIuYWRkRXZlbnRMaXN0ZW5lcignbG9hZCcsIHRoaXMuX2JvdW5kWGhyT25Mb2FkLCBmYWxzZSk7XG5cbiAgICB4aHIuc2VuZCgpO1xufTtcblxuLyoqXG4gKiBMb2FkcyB0aGlzIHJlc291cmNlcyB1c2luZyBhbiBYRG9tYWluUmVxdWVzdC4gVGhpcyBpcyBoZXJlIGJlY2F1c2Ugd2UgbmVlZCB0byBzdXBwb3J0IElFOSAoZ3Jvc3MpLlxuICpcbiAqIEBwcml2YXRlXG4gKi9cblJlc291cmNlLnByb3RvdHlwZS5fbG9hZFhkciA9IGZ1bmN0aW9uICgpIHtcbiAgICAvLyBpZiB1bnNldCwgZGV0ZXJtaW5lIHRoZSB2YWx1ZVxuICAgIGlmICh0eXBlb2YgdGhpcy54aHJUeXBlICE9PSAnc3RyaW5nJykge1xuICAgICAgICB0aGlzLnhoclR5cGUgPSB0aGlzLl9kZXRlcm1pbmVYaHJUeXBlKCk7XG4gICAgfVxuXG4gICAgdmFyIHhkciA9IHRoaXMueGhyID0gbmV3IFhEb21haW5SZXF1ZXN0KCk7XG5cbiAgICAvLyBYRG9tYWluUmVxdWVzdCBoYXMgYSBmZXcgcXVpcmtzLiBPY2Nhc2lvbmFsbHkgaXQgd2lsbCBhYm9ydCByZXF1ZXN0c1xuICAgIC8vIEEgd2F5IHRvIGF2b2lkIHRoaXMgaXMgdG8gbWFrZSBzdXJlIEFMTCBjYWxsYmFja3MgYXJlIHNldCBldmVuIGlmIG5vdCB1c2VkXG4gICAgLy8gTW9yZSBpbmZvIGhlcmU6IGh0dHA6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvMTU3ODY5NjYveGRvbWFpbnJlcXVlc3QtYWJvcnRzLXBvc3Qtb24taWUtOVxuICAgIHhkci50aW1lb3V0ID0gNTAwMDtcblxuICAgIHhkci5vbmVycm9yID0gdGhpcy5fYm91bmRYaHJPbkVycm9yO1xuICAgIHhkci5vbnRpbWVvdXQgPSB0aGlzLl9ib3VuZFhkck9uVGltZW91dDtcbiAgICB4ZHIub25wcm9ncmVzcyA9IHRoaXMuX2JvdW5kT25Qcm9ncmVzcztcbiAgICB4ZHIub25sb2FkID0gdGhpcy5fYm91bmRYaHJPbkxvYWQ7XG5cbiAgICB4ZHIub3BlbignR0VUJywgdGhpcy51cmwsIHRydWUpO1xuXG4gICAgLy8gIE5vdGU6IFRoZSB4ZHIuc2VuZCgpIGNhbGwgaXMgd3JhcHBlZCBpbiBhIHRpbWVvdXQgdG8gcHJldmVudCBhbiBpc3N1ZSB3aXRoIHRoZSBpbnRlcmZhY2Ugd2hlcmUgc29tZSByZXF1ZXN0cyBhcmUgbG9zdFxuICAgIC8vICBpZiBtdWx0aXBsZSBYRG9tYWluUmVxdWVzdHMgYXJlIGJlaW5nIHNlbnQgYXQgdGhlIHNhbWUgdGltZS5cbiAgICAvLyBTb21lIGluZm8gaGVyZTogaHR0cHM6Ly9naXRodWIuY29tL3Bob3RvbnN0b3JtL3BoYXNlci9pc3N1ZXMvMTI0OFxuICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgICB4ZHIuc2VuZCgpO1xuICAgIH0sIDApO1xufTtcblxuLyoqXG4gKiBDcmVhdGVzIGEgc291cmNlIHVzZWQgaW4gbG9hZGluZyB2aWEgYW4gZWxlbWVudC5cbiAqXG4gKiBAcGFyYW0gdHlwZSB7c3RyaW5nfSBUaGUgZWxlbWVudCB0eXBlICh2aWRlbyBvciBhdWRpbykuXG4gKiBAcGFyYW0gdXJsIHtzdHJpbmd9IFRoZSBzb3VyY2UgVVJMIHRvIGxvYWQgZnJvbS5cbiAqIEBwYXJhbSBbbWltZV0ge3N0cmluZ30gVGhlIG1pbWUgdHlwZSBvZiB0aGUgdmlkZW9cbiAqIEBwcml2YXRlXG4gKi9cblJlc291cmNlLnByb3RvdHlwZS5fY3JlYXRlU291cmNlID0gZnVuY3Rpb24gKHR5cGUsIHVybCwgbWltZSkge1xuICAgIGlmICghbWltZSkge1xuICAgICAgICBtaW1lID0gdHlwZSArICcvJyArIHVybC5zdWJzdHIodXJsLmxhc3RJbmRleE9mKCcuJykgKyAxKTtcbiAgICB9XG5cbiAgICB2YXIgc291cmNlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc291cmNlJyk7XG5cbiAgICBzb3VyY2Uuc3JjID0gdXJsO1xuICAgIHNvdXJjZS50eXBlID0gbWltZTtcblxuICAgIHJldHVybiBzb3VyY2U7XG59O1xuXG4vKipcbiAqIENhbGxlZCBpZiBhIGxvYWQgZXJyb3JzIG91dC5cbiAqXG4gKiBAcGFyYW0gZXZlbnQge0V2ZW50fSBUaGUgZXJyb3IgZXZlbnQgZnJvbSB0aGUgZWxlbWVudCB0aGF0IGVtaXRzIGl0LlxuICogQHByaXZhdGVcbiAqL1xuUmVzb3VyY2UucHJvdG90eXBlLl9vbkVycm9yID0gZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgdGhpcy5lcnJvciA9IG5ldyBFcnJvcignRmFpbGVkIHRvIGxvYWQgZWxlbWVudCB1c2luZyAnICsgZXZlbnQudGFyZ2V0Lm5vZGVOYW1lKTtcbiAgICB0aGlzLmNvbXBsZXRlKCk7XG59O1xuXG4vKipcbiAqIENhbGxlZCBpZiBhIGxvYWQgcHJvZ3Jlc3MgZXZlbnQgZmlyZXMgZm9yIHhoci94ZHIuXG4gKlxuICogQGZpcmVzIHByb2dyZXNzXG4gKiBAcGFyYW0gZXZlbnQge1hNTEh0dHBSZXF1ZXN0UHJvZ3Jlc3NFdmVudHxFdmVudH1cbiAqIEBwcml2YXRlXG4gKi9cblJlc291cmNlLnByb3RvdHlwZS5fb25Qcm9ncmVzcyA9ICBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICBpZiAoZXZlbnQgJiYgZXZlbnQubGVuZ3RoQ29tcHV0YWJsZSkge1xuICAgICAgICB0aGlzLmVtaXQoJ3Byb2dyZXNzJywgdGhpcywgZXZlbnQubG9hZGVkIC8gZXZlbnQudG90YWwpO1xuICAgIH1cbn07XG5cbi8qKlxuICogQ2FsbGVkIGlmIGFuIGVycm9yIGV2ZW50IGZpcmVzIGZvciB4aHIveGRyLlxuICpcbiAqIEBwYXJhbSBldmVudCB7WE1MSHR0cFJlcXVlc3RFcnJvckV2ZW50fEV2ZW50fVxuICogQHByaXZhdGVcbiAqL1xuUmVzb3VyY2UucHJvdG90eXBlLl94aHJPbkVycm9yID0gZnVuY3Rpb24gKCkge1xuICAgIHRoaXMuZXJyb3IgPSBuZXcgRXJyb3IoXG4gICAgICAgIHJlcVR5cGUodGhpcy54aHIpICsgJyBSZXF1ZXN0IGZhaWxlZC4gJyArXG4gICAgICAgICdTdGF0dXM6ICcgKyB0aGlzLnhoci5zdGF0dXMgKyAnLCB0ZXh0OiBcIicgKyB0aGlzLnhoci5zdGF0dXNUZXh0ICsgJ1wiJ1xuICAgICk7XG5cbiAgICB0aGlzLmNvbXBsZXRlKCk7XG59O1xuXG4vKipcbiAqIENhbGxlZCBpZiBhbiBhYm9ydCBldmVudCBmaXJlcyBmb3IgeGhyLlxuICpcbiAqIEBwYXJhbSBldmVudCB7WE1MSHR0cFJlcXVlc3RBYm9ydEV2ZW50fVxuICogQHByaXZhdGVcbiAqL1xuUmVzb3VyY2UucHJvdG90eXBlLl94aHJPbkFib3J0ID0gZnVuY3Rpb24gKCkge1xuICAgIHRoaXMuZXJyb3IgPSBuZXcgRXJyb3IocmVxVHlwZSh0aGlzLnhocikgKyAnIFJlcXVlc3Qgd2FzIGFib3J0ZWQgYnkgdGhlIHVzZXIuJyk7XG4gICAgdGhpcy5jb21wbGV0ZSgpO1xufTtcblxuLyoqXG4gKiBDYWxsZWQgaWYgYSB0aW1lb3V0IGV2ZW50IGZpcmVzIGZvciB4ZHIuXG4gKlxuICogQHBhcmFtIGV2ZW50IHtFdmVudH1cbiAqIEBwcml2YXRlXG4gKi9cblJlc291cmNlLnByb3RvdHlwZS5feGRyT25UaW1lb3V0ID0gZnVuY3Rpb24gKCkge1xuICAgIHRoaXMuZXJyb3IgPSBuZXcgRXJyb3IocmVxVHlwZSh0aGlzLnhocikgKyAnIFJlcXVlc3QgdGltZWQgb3V0LicpO1xuICAgIHRoaXMuY29tcGxldGUoKTtcbn07XG5cbi8qKlxuICogQ2FsbGVkIHdoZW4gZGF0YSBzdWNjZXNzZnVsbHkgbG9hZHMgZnJvbSBhbiB4aHIveGRyIHJlcXVlc3QuXG4gKlxuICogQHBhcmFtIGV2ZW50IHtYTUxIdHRwUmVxdWVzdExvYWRFdmVudHxFdmVudH1cbiAqIEBwcml2YXRlXG4gKi9cblJlc291cmNlLnByb3RvdHlwZS5feGhyT25Mb2FkID0gZnVuY3Rpb24gKCkge1xuICAgIHZhciB4aHIgPSB0aGlzLnhocixcbiAgICAgICAgc3RhdHVzID0geGhyLnN0YXR1cyAhPT0gdW5kZWZpbmVkID8geGhyLnN0YXR1cyA6IDIwMDsgLy9YRFIgaGFzIG5vIGAuc3RhdHVzYCwgYXNzdW1lIDIwMC5cblxuICAgIC8vIHN0YXR1cyBjYW4gYmUgMCB3aGVuIHVzaW5nIHRoZSBmaWxlOi8vIHByb3RvY29sLCBhbHNvIGNoZWNrIGlmIGEgcmVzcG9uc2Ugd2FzIGZvdW5kXG4gICAgaWYgKHN0YXR1cyA9PT0gMjAwIHx8IHN0YXR1cyA9PT0gMjA0IHx8IChzdGF0dXMgPT09IDAgJiYgeGhyLnJlc3BvbnNlVGV4dC5sZW5ndGggPiAwKSkge1xuICAgICAgICAvLyBpZiB0ZXh0LCBqdXN0IHJldHVybiBpdFxuICAgICAgICBpZiAodGhpcy54aHJUeXBlID09PSBSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRS5URVhUKSB7XG4gICAgICAgICAgICB0aGlzLmRhdGEgPSB4aHIucmVzcG9uc2VUZXh0O1xuICAgICAgICB9XG4gICAgICAgIC8vIGlmIGpzb24sIHBhcnNlIGludG8ganNvbiBvYmplY3RcbiAgICAgICAgZWxzZSBpZiAodGhpcy54aHJUeXBlID09PSBSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRS5KU09OKSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIHRoaXMuZGF0YSA9IEpTT04ucGFyc2UoeGhyLnJlc3BvbnNlVGV4dCk7XG4gICAgICAgICAgICAgICAgdGhpcy5pc0pzb24gPSB0cnVlO1xuICAgICAgICAgICAgfSBjYXRjaChlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5lcnJvciA9IG5ldyBFcnJvcignRXJyb3IgdHJ5aW5nIHRvIHBhcnNlIGxvYWRlZCBqc29uOicsIGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIGlmIHhtbCwgcGFyc2UgaW50byBhbiB4bWwgZG9jdW1lbnQgb3IgZGl2IGVsZW1lbnRcbiAgICAgICAgZWxzZSBpZiAodGhpcy54aHJUeXBlID09PSBSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRS5ET0NVTUVOVCkge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBpZiAod2luZG93LkRPTVBhcnNlcikge1xuICAgICAgICAgICAgICAgICAgICB2YXIgZG9tcGFyc2VyID0gbmV3IERPTVBhcnNlcigpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmRhdGEgPSBkb21wYXJzZXIucGFyc2VGcm9tU3RyaW5nKHhoci5yZXNwb25zZVRleHQsICd0ZXh0L3htbCcpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICAgICAgICAgICAgICBkaXYuaW5uZXJIVE1MID0geGhyLnJlc3BvbnNlVGV4dDtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kYXRhID0gZGl2O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzLmlzWG1sID0gdHJ1ZTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmVycm9yID0gbmV3IEVycm9yKCdFcnJvciB0cnlpbmcgdG8gcGFyc2UgbG9hZGVkIHhtbDonLCBlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvLyBvdGhlciB0eXBlcyBqdXN0IHJldHVybiB0aGUgcmVzcG9uc2VcbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmRhdGEgPSB4aHIucmVzcG9uc2UgfHwgeGhyLnJlc3BvbnNlVGV4dDtcbiAgICAgICAgfVxuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgdGhpcy5lcnJvciA9IG5ldyBFcnJvcignWycgKyB4aHIuc3RhdHVzICsgJ10nICsgeGhyLnN0YXR1c1RleHQgKyAnOicgKyB4aHIucmVzcG9uc2VVUkwpO1xuICAgIH1cblxuICAgIHRoaXMuY29tcGxldGUoKTtcbn07XG5cbmZ1bmN0aW9uIHJlcVR5cGUoeGhyKSB7XG4gICAgcmV0dXJuIHhoci50b1N0cmluZygpLnJlcGxhY2UoJ29iamVjdCAnLCAnJyk7XG59XG5cbi8qKlxuICogU2V0cyB0aGUgYGNyb3NzT3JpZ2luYCBwcm9wZXJ0eSBmb3IgdGhpcyByZXNvdXJjZSBiYXNlZCBvbiBpZiB0aGUgdXJsXG4gKiBmb3IgdGhpcyByZXNvdXJjZSBpcyBjcm9zcy1vcmlnaW4uIElmIGNyb3NzT3JpZ2luIHdhcyBtYW51YWxseSBzZXQsIHRoaXNcbiAqIGZ1bmN0aW9uIGRvZXMgbm90aGluZy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHVybCB7c3RyaW5nfSBUaGUgdXJsIHRvIHRlc3QuXG4gKiBAcGFyYW0gW2xvY2F0aW9uPXdpbmRvdy5sb2NhdGlvbl0ge29iamVjdH0gVGhlIGxvY2F0aW9uIG9iamVjdCB0byB0ZXN0IGFnYWluc3QuXG4gKiBAcmV0dXJuIHtzdHJpbmd9IFRoZSBjcm9zc09yaWdpbiB2YWx1ZSB0byB1c2UgKG9yIGVtcHR5IHN0cmluZyBmb3Igbm9uZSkuXG4gKi9cblJlc291cmNlLnByb3RvdHlwZS5fZGV0ZXJtaW5lQ3Jvc3NPcmlnaW4gPSBmdW5jdGlvbiAodXJsLCBsb2MpIHtcbiAgICAvLyBkYXRhOiBhbmQgamF2YXNjcmlwdDogdXJscyBhcmUgY29uc2lkZXJlZCBzYW1lLW9yaWdpblxuICAgIGlmICh1cmwuaW5kZXhPZignZGF0YTonKSA9PT0gMCkge1xuICAgICAgICByZXR1cm4gJyc7XG4gICAgfVxuXG4gICAgLy8gZGVmYXVsdCBpcyB3aW5kb3cubG9jYXRpb25cbiAgICBsb2MgPSBsb2MgfHwgd2luZG93LmxvY2F0aW9uO1xuXG4gICAgaWYgKCF0ZW1wQW5jaG9yKSB7XG4gICAgICAgIHRlbXBBbmNob3IgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdhJyk7XG4gICAgfVxuXG4gICAgLy8gbGV0IHRoZSBicm93c2VyIGRldGVybWluZSB0aGUgZnVsbCBocmVmIGZvciB0aGUgdXJsIG9mIHRoaXMgcmVzb3VyY2UgYW5kIHRoZW5cbiAgICAvLyBwYXJzZSB3aXRoIHRoZSBub2RlIHVybCBsaWIsIHdlIGNhbid0IHVzZSB0aGUgcHJvcGVydGllcyBvZiB0aGUgYW5jaG9yIGVsZW1lbnRcbiAgICAvLyBiZWNhdXNlIHRoZXkgZG9uJ3Qgd29yayBpbiBJRTkgOihcbiAgICB0ZW1wQW5jaG9yLmhyZWYgPSB1cmw7XG4gICAgdXJsID0gX3VybC5wYXJzZSh0ZW1wQW5jaG9yLmhyZWYpO1xuXG4gICAgdmFyIHNhbWVQb3J0ID0gKCF1cmwucG9ydCAmJiBsb2MucG9ydCA9PT0gJycpIHx8ICh1cmwucG9ydCA9PT0gbG9jLnBvcnQpO1xuXG4gICAgLy8gaWYgY3Jvc3Mgb3JpZ2luXG4gICAgaWYgKHVybC5ob3N0bmFtZSAhPT0gbG9jLmhvc3RuYW1lIHx8ICFzYW1lUG9ydCB8fCB1cmwucHJvdG9jb2wgIT09IGxvYy5wcm90b2NvbCkge1xuICAgICAgICByZXR1cm4gJ2Fub255bW91cyc7XG4gICAgfVxuXG4gICAgcmV0dXJuICcnO1xufTtcblxuLyoqXG4gKiBEZXRlcm1pbmVzIHRoZSByZXNwb25zZVR5cGUgb2YgYW4gWEhSIHJlcXVlc3QgYmFzZWQgb24gdGhlIGV4dGVuc2lvbiBvZiB0aGVcbiAqIHJlc291cmNlIGJlaW5nIGxvYWRlZC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHJldHVybiB7UmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEV9IFRoZSByZXNwb25zZVR5cGUgdG8gdXNlLlxuICovXG5SZXNvdXJjZS5wcm90b3R5cGUuX2RldGVybWluZVhoclR5cGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIFJlc291cmNlLl94aHJUeXBlTWFwW3RoaXMuX2dldEV4dGVuc2lvbigpXSB8fCBSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRS5URVhUO1xufTtcblxuUmVzb3VyY2UucHJvdG90eXBlLl9kZXRlcm1pbmVMb2FkVHlwZSA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gUmVzb3VyY2UuX2xvYWRUeXBlTWFwW3RoaXMuX2dldEV4dGVuc2lvbigpXSB8fCBSZXNvdXJjZS5MT0FEX1RZUEUuWEhSO1xufTtcblxuUmVzb3VyY2UucHJvdG90eXBlLl9nZXRFeHRlbnNpb24gPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHVybCA9IHRoaXMudXJsLFxuICAgICAgICBleHQ7XG5cbiAgICBpZiAodGhpcy5pc0RhdGFVcmwpIHtcbiAgICAgICAgdmFyIHNsYXNoSW5kZXggPSB1cmwuaW5kZXhPZignLycpO1xuICAgICAgICBleHQgPSB1cmwuc3Vic3RyaW5nKHNsYXNoSW5kZXggKyAxLCB1cmwuaW5kZXhPZignOycsIHNsYXNoSW5kZXgpKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHZhciBxdWVyeVN0YXJ0ID0gdXJsLmluZGV4T2YoJz8nKTtcbiAgICAgICAgaWYgKHF1ZXJ5U3RhcnQgIT09IC0xKSB7XG4gICAgICAgICAgICB1cmwgPSB1cmwuc3Vic3RyaW5nKDAsIHF1ZXJ5U3RhcnQpO1xuICAgICAgICB9XG5cbiAgICAgICAgZXh0ID0gdXJsLnN1YnN0cmluZyh1cmwubGFzdEluZGV4T2YoJy4nKSArIDEpO1xuICAgIH1cblxuICAgIHJldHVybiBleHQ7XG59O1xuXG4vKipcbiAqIERldGVybWluZXMgdGhlIG1pbWUgdHlwZSBvZiBhbiBYSFIgcmVxdWVzdCBiYXNlZCBvbiB0aGUgcmVzcG9uc2VUeXBlIG9mXG4gKiByZXNvdXJjZSBiZWluZyBsb2FkZWQuXG4gKlxuICogQHByaXZhdGVcbiAqIEByZXR1cm4ge3N0cmluZ30gVGhlIG1pbWUgdHlwZSB0byB1c2UuXG4gKi9cblJlc291cmNlLnByb3RvdHlwZS5fZ2V0TWltZUZyb21YaHJUeXBlID0gZnVuY3Rpb24gKHR5cGUpIHtcbiAgICBzd2l0Y2godHlwZSkge1xuICAgICAgICBjYXNlIFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkJVRkZFUjpcbiAgICAgICAgICAgIHJldHVybiAnYXBwbGljYXRpb24vb2N0ZXQtYmluYXJ5JztcblxuICAgICAgICBjYXNlIFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkJMT0I6XG4gICAgICAgICAgICByZXR1cm4gJ2FwcGxpY2F0aW9uL2Jsb2InO1xuXG4gICAgICAgIGNhc2UgUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuRE9DVU1FTlQ6XG4gICAgICAgICAgICByZXR1cm4gJ2FwcGxpY2F0aW9uL3htbCc7XG5cbiAgICAgICAgY2FzZSBSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRS5KU09OOlxuICAgICAgICAgICAgcmV0dXJuICdhcHBsaWNhdGlvbi9qc29uJztcblxuICAgICAgICBjYXNlIFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkRFRkFVTFQ6XG4gICAgICAgIGNhc2UgUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuVEVYVDpcbiAgICAgICAgICAgIC8qIGZhbGxzIHRocm91Z2ggKi9cbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIHJldHVybiAndGV4dC9wbGFpbic7XG5cbiAgICB9XG59O1xuXG4vKipcbiAqIFRoZSB0eXBlcyBvZiBsb2FkaW5nIGEgcmVzb3VyY2UgY2FuIHVzZS5cbiAqXG4gKiBAc3RhdGljXG4gKiBAY29uc3RhbnRcbiAqIEBwcm9wZXJ0eSB7b2JqZWN0fSBMT0FEX1RZUEVcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBMT0FEX1RZUEUuWEhSIC0gVXNlcyBYTUxIdHRwUmVxdWVzdCB0byBsb2FkIHRoZSByZXNvdXJjZS5cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBMT0FEX1RZUEUuSU1BR0UgLSBVc2VzIGFuIGBJbWFnZWAgb2JqZWN0IHRvIGxvYWQgdGhlIHJlc291cmNlLlxuICogQHByb3BlcnR5IHtudW1iZXJ9IExPQURfVFlQRS5BVURJTyAtIFVzZXMgYW4gYEF1ZGlvYCBvYmplY3QgdG8gbG9hZCB0aGUgcmVzb3VyY2UuXG4gKiBAcHJvcGVydHkge251bWJlcn0gTE9BRF9UWVBFLlZJREVPIC0gVXNlcyBhIGBWaWRlb2Agb2JqZWN0IHRvIGxvYWQgdGhlIHJlc291cmNlLlxuICovXG5SZXNvdXJjZS5MT0FEX1RZUEUgPSB7XG4gICAgWEhSOiAgICAxLFxuICAgIElNQUdFOiAgMixcbiAgICBBVURJTzogIDMsXG4gICAgVklERU86ICA0XG59O1xuXG4vKipcbiAqIFRoZSBYSFIgcmVhZHkgc3RhdGVzLCB1c2VkIGludGVybmFsbHkuXG4gKlxuICogQHN0YXRpY1xuICogQGNvbnN0YW50XG4gKiBAcHJvcGVydHkge29iamVjdH0gWEhSX1JFQURZX1NUQVRFXG4gKiBAcHJvcGVydHkge251bWJlcn0gWEhSX1JFQURZX1NUQVRFLlVOU0VOVCAtIG9wZW4oKWhhcyBub3QgYmVlbiBjYWxsZWQgeWV0LlxuICogQHByb3BlcnR5IHtudW1iZXJ9IFhIUl9SRUFEWV9TVEFURS5PUEVORUQgLSBzZW5kKCloYXMgbm90IGJlZW4gY2FsbGVkIHlldC5cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBYSFJfUkVBRFlfU1RBVEUuSEVBREVSU19SRUNFSVZFRCAtIHNlbmQoKSBoYXMgYmVlbiBjYWxsZWQsIGFuZCBoZWFkZXJzIGFuZCBzdGF0dXMgYXJlIGF2YWlsYWJsZS5cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBYSFJfUkVBRFlfU1RBVEUuTE9BRElORyAtIERvd25sb2FkaW5nOyByZXNwb25zZVRleHQgaG9sZHMgcGFydGlhbCBkYXRhLlxuICogQHByb3BlcnR5IHtudW1iZXJ9IFhIUl9SRUFEWV9TVEFURS5ET05FIC0gVGhlIG9wZXJhdGlvbiBpcyBjb21wbGV0ZS5cbiAqL1xuUmVzb3VyY2UuWEhSX1JFQURZX1NUQVRFID0ge1xuICAgIFVOU0VOVDogMCxcbiAgICBPUEVORUQ6IDEsXG4gICAgSEVBREVSU19SRUNFSVZFRDogMixcbiAgICBMT0FESU5HOiAzLFxuICAgIERPTkU6IDRcbn07XG5cbi8qKlxuICogVGhlIFhIUiByZWFkeSBzdGF0ZXMsIHVzZWQgaW50ZXJuYWxseS5cbiAqXG4gKiBAc3RhdGljXG4gKiBAY29uc3RhbnRcbiAqIEBwcm9wZXJ0eSB7b2JqZWN0fSBYSFJfUkVTUE9OU0VfVFlQRVxuICogQHByb3BlcnR5IHtzdHJpbmd9IFhIUl9SRVNQT05TRV9UWVBFLkRFRkFVTFQgLSBkZWZhdWx0cyB0byB0ZXh0XG4gKiBAcHJvcGVydHkge3N0cmluZ30gWEhSX1JFU1BPTlNFX1RZUEUuQlVGRkVSIC0gQXJyYXlCdWZmZXJcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBYSFJfUkVTUE9OU0VfVFlQRS5CTE9CIC0gQmxvYlxuICogQHByb3BlcnR5IHtzdHJpbmd9IFhIUl9SRVNQT05TRV9UWVBFLkRPQ1VNRU5UIC0gRG9jdW1lbnRcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBYSFJfUkVTUE9OU0VfVFlQRS5KU09OIC0gT2JqZWN0XG4gKiBAcHJvcGVydHkge3N0cmluZ30gWEhSX1JFU1BPTlNFX1RZUEUuVEVYVCAtIFN0cmluZ1xuICovXG5SZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRSA9IHtcbiAgICBERUZBVUxUOiAgICAndGV4dCcsXG4gICAgQlVGRkVSOiAgICAgJ2FycmF5YnVmZmVyJyxcbiAgICBCTE9COiAgICAgICAnYmxvYicsXG4gICAgRE9DVU1FTlQ6ICAgJ2RvY3VtZW50JyxcbiAgICBKU09OOiAgICAgICAnanNvbicsXG4gICAgVEVYVDogICAgICAgJ3RleHQnXG59O1xuXG5SZXNvdXJjZS5fbG9hZFR5cGVNYXAgPSB7XG4gICAgJ2dpZic6ICAgICAgUmVzb3VyY2UuTE9BRF9UWVBFLklNQUdFLFxuICAgICdwbmcnOiAgICAgIFJlc291cmNlLkxPQURfVFlQRS5JTUFHRSxcbiAgICAnYm1wJzogICAgICBSZXNvdXJjZS5MT0FEX1RZUEUuSU1BR0UsXG4gICAgJ2pwZyc6ICAgICAgUmVzb3VyY2UuTE9BRF9UWVBFLklNQUdFLFxuICAgICdqcGVnJzogICAgIFJlc291cmNlLkxPQURfVFlQRS5JTUFHRSxcbiAgICAndGlmJzogICAgICBSZXNvdXJjZS5MT0FEX1RZUEUuSU1BR0UsXG4gICAgJ3RpZmYnOiAgICAgUmVzb3VyY2UuTE9BRF9UWVBFLklNQUdFLFxuICAgICd3ZWJwJzogICAgIFJlc291cmNlLkxPQURfVFlQRS5JTUFHRSxcbiAgICAndGdhJzogICAgICBSZXNvdXJjZS5MT0FEX1RZUEUuSU1BR0Vcbn07XG5cblJlc291cmNlLl94aHJUeXBlTWFwID0ge1xuICAgIC8vIHhtbFxuICAgICd4aHRtbCc6ICAgIFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkRPQ1VNRU5ULFxuICAgICdodG1sJzogICAgIFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkRPQ1VNRU5ULFxuICAgICdodG0nOiAgICAgIFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkRPQ1VNRU5ULFxuICAgICd4bWwnOiAgICAgIFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkRPQ1VNRU5ULFxuICAgICd0bXgnOiAgICAgIFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkRPQ1VNRU5ULFxuICAgICd0c3gnOiAgICAgIFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkRPQ1VNRU5ULFxuICAgICdzdmcnOiAgICAgIFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkRPQ1VNRU5ULFxuXG4gICAgLy8gaW1hZ2VzXG4gICAgJ2dpZic6ICAgICAgUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuQkxPQixcbiAgICAncG5nJzogICAgICBSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRS5CTE9CLFxuICAgICdibXAnOiAgICAgIFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkJMT0IsXG4gICAgJ2pwZyc6ICAgICAgUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuQkxPQixcbiAgICAnanBlZyc6ICAgICBSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRS5CTE9CLFxuICAgICd0aWYnOiAgICAgIFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkJMT0IsXG4gICAgJ3RpZmYnOiAgICAgUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuQkxPQixcbiAgICAnd2VicCc6ICAgICBSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRS5CTE9CLFxuICAgICd0Z2EnOiAgICAgIFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkJMT0IsXG5cbiAgICAvLyBqc29uXG4gICAgJ2pzb24nOiAgICAgUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuSlNPTixcblxuICAgIC8vIHRleHRcbiAgICAndGV4dCc6ICAgICBSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRS5URVhULFxuICAgICd0eHQnOiAgICAgIFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLlRFWFRcbn07XG5cbi8qKlxuICogU2V0cyB0aGUgbG9hZCB0eXBlIHRvIGJlIHVzZWQgZm9yIGEgc3BlY2lmaWMgZXh0ZW5zaW9uLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBwYXJhbSBleHRuYW1lIHtzdHJpbmd9IFRoZSBleHRlbnNpb24gdG8gc2V0IHRoZSB0eXBlIGZvciwgZS5nLiBcInBuZ1wiIG9yIFwiZm50XCJcbiAqIEBwYXJhbSBsb2FkVHlwZSB7UmVzb3VyY2UuTE9BRF9UWVBFfSBUaGUgbG9hZCB0eXBlIHRvIHNldCBpdCB0by5cbiAqL1xuUmVzb3VyY2Uuc2V0RXh0ZW5zaW9uTG9hZFR5cGUgPSBmdW5jdGlvbiAoZXh0bmFtZSwgbG9hZFR5cGUpIHtcbiAgICBzZXRFeHRNYXAoUmVzb3VyY2UuX2xvYWRUeXBlTWFwLCBleHRuYW1lLCBsb2FkVHlwZSk7XG59O1xuXG4vKipcbiAqIFNldHMgdGhlIGxvYWQgdHlwZSB0byBiZSB1c2VkIGZvciBhIHNwZWNpZmljIGV4dGVuc2lvbi5cbiAqXG4gKiBAc3RhdGljXG4gKiBAcGFyYW0gZXh0bmFtZSB7c3RyaW5nfSBUaGUgZXh0ZW5zaW9uIHRvIHNldCB0aGUgdHlwZSBmb3IsIGUuZy4gXCJwbmdcIiBvciBcImZudFwiXG4gKiBAcGFyYW0geGhyVHlwZSB7UmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEV9IFRoZSB4aHIgdHlwZSB0byBzZXQgaXQgdG8uXG4gKi9cblJlc291cmNlLnNldEV4dGVuc2lvblhoclR5cGUgPSBmdW5jdGlvbiAoZXh0bmFtZSwgeGhyVHlwZSkge1xuICAgIHNldEV4dE1hcChSZXNvdXJjZS5feGhyVHlwZU1hcCwgZXh0bmFtZSwgeGhyVHlwZSk7XG59O1xuXG5mdW5jdGlvbiBzZXRFeHRNYXAobWFwLCBleHRuYW1lLCB2YWwpIHtcbiAgICBpZiAoZXh0bmFtZSAmJiBleHRuYW1lLmluZGV4T2YoJy4nKSA9PT0gMCkge1xuICAgICAgICBleHRuYW1lID0gZXh0bmFtZS5zdWJzdHJpbmcoMSk7XG4gICAgfVxuXG4gICAgaWYgKCFleHRuYW1lKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBtYXBbZXh0bmFtZV0gPSB2YWw7XG59XG4iLCJtb2R1bGUuZXhwb3J0cyA9IHtcblxuICAgIC8vIHByaXZhdGUgcHJvcGVydHlcbiAgICBfa2V5U3RyOiBcIkFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5Ky89XCIsXG5cbiAgICBlbmNvZGVCaW5hcnk6IGZ1bmN0aW9uIChpbnB1dCkge1xuICAgICAgICB2YXIgb3V0cHV0ID0gXCJcIjtcbiAgICAgICAgdmFyIGJ5dGVidWZmZXI7XG4gICAgICAgIHZhciBlbmNvZGVkQ2hhckluZGV4ZXMgPSBuZXcgQXJyYXkoNCk7XG4gICAgICAgIHZhciBpbnggPSAwO1xuICAgICAgICB2YXIgam54ID0gMDtcbiAgICAgICAgdmFyIHBhZGRpbmdCeXRlcyA9IDA7XG5cbiAgICAgICAgd2hpbGUgKGlueCA8IGlucHV0Lmxlbmd0aCkge1xuICAgICAgICAgICAgLy8gRmlsbCBieXRlIGJ1ZmZlciBhcnJheVxuICAgICAgICAgICAgYnl0ZWJ1ZmZlciA9IG5ldyBBcnJheSgzKTtcbiAgICAgICAgICAgIGZvciAoam54ID0gMDsgam54IDwgYnl0ZWJ1ZmZlci5sZW5ndGg7IGpueCsrKSB7XG4gICAgICAgICAgICAgICAgaWYgKGlueCA8IGlucHV0Lmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICAvLyB0aHJvdyBhd2F5IGhpZ2gtb3JkZXIgYnl0ZSwgYXMgZG9jdW1lbnRlZCBhdDpcbiAgICAgICAgICAgICAgICAgICAgLy8gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvRW4vVXNpbmdfWE1MSHR0cFJlcXVlc3QjSGFuZGxpbmdfYmluYXJ5X2RhdGFcbiAgICAgICAgICAgICAgICAgICAgYnl0ZWJ1ZmZlcltqbnhdID0gaW5wdXQuY2hhckNvZGVBdChpbngrKykgJiAweGZmO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgYnl0ZWJ1ZmZlcltqbnhdID0gMDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIEdldCBlYWNoIGVuY29kZWQgY2hhcmFjdGVyLCA2IGJpdHMgYXQgYSB0aW1lXG4gICAgICAgICAgICAvLyBpbmRleCAxOiBmaXJzdCA2IGJpdHNcbiAgICAgICAgICAgIGVuY29kZWRDaGFySW5kZXhlc1swXSA9IGJ5dGVidWZmZXJbMF0gPj4gMjtcbiAgICAgICAgICAgIC8vIGluZGV4IDI6IHNlY29uZCA2IGJpdHMgKDIgbGVhc3Qgc2lnbmlmaWNhbnQgYml0cyBmcm9tIGlucHV0IGJ5dGUgMSArIDQgbW9zdCBzaWduaWZpY2FudCBiaXRzIGZyb20gYnl0ZSAyKVxuICAgICAgICAgICAgZW5jb2RlZENoYXJJbmRleGVzWzFdID0gKChieXRlYnVmZmVyWzBdICYgMHgzKSA8PCA0KSB8IChieXRlYnVmZmVyWzFdID4+IDQpO1xuICAgICAgICAgICAgLy8gaW5kZXggMzogdGhpcmQgNiBiaXRzICg0IGxlYXN0IHNpZ25pZmljYW50IGJpdHMgZnJvbSBpbnB1dCBieXRlIDIgKyAyIG1vc3Qgc2lnbmlmaWNhbnQgYml0cyBmcm9tIGJ5dGUgMylcbiAgICAgICAgICAgIGVuY29kZWRDaGFySW5kZXhlc1syXSA9ICgoYnl0ZWJ1ZmZlclsxXSAmIDB4MGYpIDw8IDIpIHwgKGJ5dGVidWZmZXJbMl0gPj4gNik7XG4gICAgICAgICAgICAvLyBpbmRleCAzOiBmb3J0aCA2IGJpdHMgKDYgbGVhc3Qgc2lnbmlmaWNhbnQgYml0cyBmcm9tIGlucHV0IGJ5dGUgMylcbiAgICAgICAgICAgIGVuY29kZWRDaGFySW5kZXhlc1szXSA9IGJ5dGVidWZmZXJbMl0gJiAweDNmO1xuXG4gICAgICAgICAgICAvLyBEZXRlcm1pbmUgd2hldGhlciBwYWRkaW5nIGhhcHBlbmVkLCBhbmQgYWRqdXN0IGFjY29yZGluZ2x5XG4gICAgICAgICAgICBwYWRkaW5nQnl0ZXMgPSBpbnggLSAoaW5wdXQubGVuZ3RoIC0gMSk7XG4gICAgICAgICAgICBzd2l0Y2ggKHBhZGRpbmdCeXRlcykge1xuICAgICAgICAgICAgICAgIGNhc2UgMjpcbiAgICAgICAgICAgICAgICAgICAgLy8gU2V0IGxhc3QgMiBjaGFyYWN0ZXJzIHRvIHBhZGRpbmcgY2hhclxuICAgICAgICAgICAgICAgICAgICBlbmNvZGVkQ2hhckluZGV4ZXNbM10gPSA2NDtcbiAgICAgICAgICAgICAgICAgICAgZW5jb2RlZENoYXJJbmRleGVzWzJdID0gNjQ7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgY2FzZSAxOlxuICAgICAgICAgICAgICAgICAgICAvLyBTZXQgbGFzdCBjaGFyYWN0ZXIgdG8gcGFkZGluZyBjaGFyXG4gICAgICAgICAgICAgICAgICAgIGVuY29kZWRDaGFySW5kZXhlc1szXSA9IDY0O1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrOyAvLyBObyBwYWRkaW5nIC0gcHJvY2VlZFxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBOb3cgd2Ugd2lsbCBncmFiIGVhY2ggYXBwcm9wcmlhdGUgY2hhcmFjdGVyIG91dCBvZiBvdXIga2V5c3RyaW5nXG4gICAgICAgICAgICAvLyBiYXNlZCBvbiBvdXIgaW5kZXggYXJyYXkgYW5kIGFwcGVuZCBpdCB0byB0aGUgb3V0cHV0IHN0cmluZ1xuICAgICAgICAgICAgZm9yIChqbnggPSAwOyBqbnggPCBlbmNvZGVkQ2hhckluZGV4ZXMubGVuZ3RoOyBqbngrKykge1xuICAgICAgICAgICAgICAgIG91dHB1dCArPSB0aGlzLl9rZXlTdHIuY2hhckF0KGVuY29kZWRDaGFySW5kZXhlc1tqbnhdKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gb3V0cHV0O1xuICAgIH1cbn07XG4iLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vTG9hZGVyJyk7XG5cbm1vZHVsZS5leHBvcnRzLlJlc291cmNlID0gcmVxdWlyZSgnLi9SZXNvdXJjZScpO1xuXG5tb2R1bGUuZXhwb3J0cy5taWRkbGV3YXJlID0ge1xuICAgIGNhY2hpbmc6IHtcbiAgICAgICAgbWVtb3J5OiByZXF1aXJlKCcuL21pZGRsZXdhcmVzL2NhY2hpbmcvbWVtb3J5JylcbiAgICB9LFxuICAgIHBhcnNpbmc6IHtcbiAgICAgICAgYmxvYjogcmVxdWlyZSgnLi9taWRkbGV3YXJlcy9wYXJzaW5nL2Jsb2InKVxuICAgIH1cbn07XG4iLCIvLyBhIHNpbXBsZSBpbi1tZW1vcnkgY2FjaGUgZm9yIHJlc291cmNlc1xudmFyIGNhY2hlID0ge307XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBmdW5jdGlvbiAocmVzb3VyY2UsIG5leHQpIHtcbiAgICAgICAgLy8gaWYgY2FjaGVkLCB0aGVuIHNldCBkYXRhIGFuZCBjb21wbGV0ZSB0aGUgcmVzb3VyY2VcbiAgICAgICAgaWYgKGNhY2hlW3Jlc291cmNlLnVybF0pIHtcbiAgICAgICAgICAgIHJlc291cmNlLmRhdGEgPSBjYWNoZVtyZXNvdXJjZS51cmxdO1xuICAgICAgICAgICAgcmVzb3VyY2UuY29tcGxldGUoKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBpZiBub3QgY2FjaGVkLCB3YWl0IGZvciBjb21wbGV0ZSBhbmQgc3RvcmUgaXQgaW4gdGhlIGNhY2hlLlxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJlc291cmNlLm9uY2UoJ2NvbXBsZXRlJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgY2FjaGVbdGhpcy51cmxdID0gdGhpcy5kYXRhO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgXG4gICAgICAgIG5leHQoKTtcbiAgICB9O1xufTtcbiIsInZhciBSZXNvdXJjZSA9IHJlcXVpcmUoJy4uLy4uL1Jlc291cmNlJyksXG4gICAgYjY0ID0gcmVxdWlyZSgnLi4vLi4vYjY0Jyk7XG5cbndpbmRvdy5VUkwgPSB3aW5kb3cuVVJMIHx8IHdpbmRvdy53ZWJraXRVUkw7XG5cbi8vIGEgbWlkZGxld2FyZSBmb3IgdHJhbnNmb3JtaW5nIFhIUiBsb2FkZWQgQmxvYnMgaW50byBtb3JlIHVzZWZ1bCBvYmplY3RzXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBmdW5jdGlvbiAocmVzb3VyY2UsIG5leHQpIHtcbiAgICAgICAgaWYgKCFyZXNvdXJjZS5kYXRhKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV4dCgpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gaWYgdGhpcyB3YXMgYW4gWEhSIGxvYWQgb2YgYSBibG9iXG4gICAgICAgIGlmIChyZXNvdXJjZS54aHIgJiYgcmVzb3VyY2UueGhyVHlwZSA9PT0gUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuQkxPQikge1xuICAgICAgICAgICAgLy8gaWYgdGhlcmUgaXMgbm8gYmxvYiBzdXBwb3J0IHdlIHByb2JhYmx5IGdvdCBhIGJpbmFyeSBzdHJpbmcgYmFja1xuICAgICAgICAgICAgaWYgKCF3aW5kb3cuQmxvYiB8fCB0eXBlb2YgcmVzb3VyY2UuZGF0YSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgICAgICB2YXIgdHlwZSA9IHJlc291cmNlLnhoci5nZXRSZXNwb25zZUhlYWRlcignY29udGVudC10eXBlJyk7XG5cbiAgICAgICAgICAgICAgICAvLyB0aGlzIGlzIGFuIGltYWdlLCBjb252ZXJ0IHRoZSBiaW5hcnkgc3RyaW5nIGludG8gYSBkYXRhIHVybFxuICAgICAgICAgICAgICAgIGlmICh0eXBlICYmIHR5cGUuaW5kZXhPZignaW1hZ2UnKSA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICByZXNvdXJjZS5kYXRhID0gbmV3IEltYWdlKCk7XG4gICAgICAgICAgICAgICAgICAgIHJlc291cmNlLmRhdGEuc3JjID0gJ2RhdGE6JyArIHR5cGUgKyAnO2Jhc2U2NCwnICsgYjY0LmVuY29kZUJpbmFyeShyZXNvdXJjZS54aHIucmVzcG9uc2VUZXh0KTtcblxuICAgICAgICAgICAgICAgICAgICByZXNvdXJjZS5pc0ltYWdlID0gdHJ1ZTtcblxuICAgICAgICAgICAgICAgICAgICAvLyB3YWl0IHVudGlsIHRoZSBpbWFnZSBsb2FkcyBhbmQgdGhlbiBjYWxsYmFja1xuICAgICAgICAgICAgICAgICAgICByZXNvdXJjZS5kYXRhLm9ubG9hZCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc291cmNlLmRhdGEub25sb2FkID0gbnVsbDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgbmV4dCgpO1xuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIGlmIGNvbnRlbnQgdHlwZSBzYXlzIHRoaXMgaXMgYW4gaW1hZ2UsIHRoZW4gd2Ugc2hvdWxkIHRyYW5zZm9ybSB0aGUgYmxvYiBpbnRvIGFuIEltYWdlIG9iamVjdFxuICAgICAgICAgICAgZWxzZSBpZiAocmVzb3VyY2UuZGF0YS50eXBlLmluZGV4T2YoJ2ltYWdlJykgPT09IDApIHtcbiAgICAgICAgICAgICAgICB2YXIgc3JjID0gVVJMLmNyZWF0ZU9iamVjdFVSTChyZXNvdXJjZS5kYXRhKTtcblxuICAgICAgICAgICAgICAgIHJlc291cmNlLmJsb2IgPSByZXNvdXJjZS5kYXRhO1xuICAgICAgICAgICAgICAgIHJlc291cmNlLmRhdGEgPSBuZXcgSW1hZ2UoKTtcbiAgICAgICAgICAgICAgICByZXNvdXJjZS5kYXRhLnNyYyA9IHNyYztcblxuICAgICAgICAgICAgICAgIHJlc291cmNlLmlzSW1hZ2UgPSB0cnVlO1xuXG4gICAgICAgICAgICAgICAgLy8gY2xlYW51cCB0aGUgbm8gbG9uZ2VyIHVzZWQgYmxvYiBhZnRlciB0aGUgaW1hZ2UgbG9hZHNcbiAgICAgICAgICAgICAgICByZXNvdXJjZS5kYXRhLm9ubG9hZCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgVVJMLnJldm9rZU9iamVjdFVSTChzcmMpO1xuICAgICAgICAgICAgICAgICAgICByZXNvdXJjZS5kYXRhLm9ubG9hZCA9IG51bGw7XG5cbiAgICAgICAgICAgICAgICAgICAgbmV4dCgpO1xuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBuZXh0KCk7XG4gICAgICAgIH1cbiAgICB9O1xufTtcbiIsIm1vZHVsZS5leHBvcnRzPXtcbiAgXCJuYW1lXCI6IFwicGl4aS5qc1wiLFxuICBcInZlcnNpb25cIjogXCIzLjAuMTAtZGV2XCIsXG4gIFwiZGVzY3JpcHRpb25cIjogXCJQaXhpLmpzIGlzIGEgZmFzdCBsaWdodHdlaWdodCAyRCBsaWJyYXJ5IHRoYXQgd29ya3MgYWNyb3NzIGFsbCBkZXZpY2VzLlwiLFxuICBcImF1dGhvclwiOiBcIk1hdCBHcm92ZXNcIixcbiAgXCJjb250cmlidXRvcnNcIjogW1xuICAgIFwiQ2hhZCBFbmdsZXIgPGNoYWRAcGFudGhlcmRldi5jb20+XCIsXG4gICAgXCJSaWNoYXJkIERhdmV5IDxyZGF2ZXlAZ21haWwuY29tPlwiXG4gIF0sXG4gIFwibWFpblwiOiBcIi4vc3JjL2luZGV4LmpzXCIsXG4gIFwiaG9tZXBhZ2VcIjogXCJodHRwOi8vZ29vZGJveWRpZ2l0YWwuY29tL1wiLFxuICBcImJ1Z3NcIjogXCJodHRwczovL2dpdGh1Yi5jb20vcGl4aWpzL3BpeGkuanMvaXNzdWVzXCIsXG4gIFwibGljZW5zZVwiOiBcIk1JVFwiLFxuICBcInJlcG9zaXRvcnlcIjoge1xuICAgIFwidHlwZVwiOiBcImdpdFwiLFxuICAgIFwidXJsXCI6IFwiaHR0cHM6Ly9naXRodWIuY29tL3BpeGlqcy9waXhpLmpzLmdpdFwiXG4gIH0sXG4gIFwic2NyaXB0c1wiOiB7XG4gICAgXCJzdGFydFwiOiBcImd1bHAgJiYgZ3VscCB3YXRjaFwiLFxuICAgIFwidGVzdFwiOiBcImd1bHAgJiYgdGVzdGVtIGNpXCIsXG4gICAgXCJidWlsZFwiOiBcImd1bHBcIixcbiAgICBcImRvY3NcIjogXCJqc2RvYyAtYyAuL2d1bHAvdXRpbC9qc2RvYy5jb25mLmpzb24gLVIgUkVBRE1FLm1kXCJcbiAgfSxcbiAgXCJmaWxlc1wiOiBbXG4gICAgXCJiaW4vXCIsXG4gICAgXCJzcmMvXCIsXG4gICAgXCJDT05UUklCVVRJTkcubWRcIixcbiAgICBcIkxJQ0VOU0VcIixcbiAgICBcInBhY2thZ2UuanNvblwiLFxuICAgIFwiUkVBRE1FLm1kXCJcbiAgXSxcbiAgXCJkZXBlbmRlbmNpZXNcIjoge1xuICAgIFwiYXN5bmNcIjogXCJeMS41LjBcIixcbiAgICBcImJyZnNcIjogXCJeMS40LjFcIixcbiAgICBcImVhcmN1dFwiOiBcIl4yLjAuN1wiLFxuICAgIFwiZXZlbnRlbWl0dGVyM1wiOiBcIl4xLjEuMVwiLFxuICAgIFwib2JqZWN0LWFzc2lnblwiOiBcIl40LjAuMVwiLFxuICAgIFwicGl4aS1nbC1jb3JlXCI6IFwiZ2l0K2h0dHBzOi8vZ2l0aHViLmNvbS9Hb29kQm95RGlnaXRhbC9waXhpLWdsLWNvcmUuZ2l0XCIsXG4gICAgXCJyZXNvdXJjZS1sb2FkZXJcIjogXCJeMS42LjRcIlxuICB9LFxuICBcImRldkRlcGVuZGVuY2llc1wiOiB7XG4gICAgXCJicm93c2VyaWZ5XCI6IFwiXjExLjEuMFwiLFxuICAgIFwiY2hhaVwiOiBcIl4zLjIuMFwiLFxuICAgIFwiZGVsXCI6IFwiXjIuMC4yXCIsXG4gICAgXCJndWxwXCI6IFwiXjMuOS4wXCIsXG4gICAgXCJndWxwLWNhY2hlZFwiOiBcIl4xLjEuMFwiLFxuICAgIFwiZ3VscC1jb25jYXRcIjogXCJeMi42LjBcIixcbiAgICBcImd1bHAtZGVidWdcIjogXCJeMi4xLjBcIixcbiAgICBcImd1bHAtaGVhZGVyXCI6IFwiXjEuNy4xXCIsXG4gICAgXCJndWxwLWpzaGludFwiOiBcIl4xLjExLjJcIixcbiAgICBcImd1bHAtbWlycm9yXCI6IFwiXjAuNC4wXCIsXG4gICAgXCJndWxwLXBsdW1iZXJcIjogXCJeMS4wLjFcIixcbiAgICBcImd1bHAtcmVuYW1lXCI6IFwiXjEuMi4yXCIsXG4gICAgXCJndWxwLXNvdXJjZW1hcHNcIjogXCJeMS41LjJcIixcbiAgICBcImd1bHAtdWdsaWZ5XCI6IFwiXjEuNC4xXCIsXG4gICAgXCJndWxwLXV0aWxcIjogXCJeMy4wLjZcIixcbiAgICBcImphZ3VhcmpzLWpzZG9jXCI6IFwiZ2l0K2h0dHBzOi8vZ2l0aHViLmNvbS9kYXZpZHNoaW1qcy9qYWd1YXJqcy1qc2RvYy5naXRcIixcbiAgICBcImpzZG9jXCI6IFwiXjMuMy4yXCIsXG4gICAgXCJqc2hpbnQtc3VtbWFyeVwiOiBcIl4wLjQuMFwiLFxuICAgIFwibWluaW1pc3RcIjogXCJeMS4yLjBcIixcbiAgICBcIm1vY2hhXCI6IFwiXjIuMy4yXCIsXG4gICAgXCJyZXF1aXJlLWRpclwiOiBcIl4wLjMuMFwiLFxuICAgIFwicnVuLXNlcXVlbmNlXCI6IFwiXjEuMS4yXCIsXG4gICAgXCJ0ZXN0ZW1cIjogXCJeMC45LjRcIixcbiAgICBcInZpbnlsLWJ1ZmZlclwiOiBcIl4xLjAuMFwiLFxuICAgIFwidmlueWwtc291cmNlLXN0cmVhbVwiOiBcIl4xLjEuMFwiLFxuICAgIFwid2F0Y2hpZnlcIjogXCJeMy40LjBcIlxuICB9LFxuICBcImJyb3dzZXJpZnlcIjoge1xuICAgIFwidHJhbnNmb3JtXCI6IFtcbiAgICAgIFwiYnJmc1wiXG4gICAgXVxuICB9XG59XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uL2NvcmUnKTtcblxuLy8gYWRkIHNvbWUgZXh0cmEgdmFyaWFibGVzIHRvIHRoZSBjb250YWluZXIuLlxuT2JqZWN0LmFzc2lnbihcbiAgICBjb3JlLkRpc3BsYXlPYmplY3QucHJvdG90eXBlLFxuICAgIHJlcXVpcmUoJy4vYWNjZXNzaWJsZVRhcmdldCcpXG4pO1xuXG5cbi8qKlxuICogVGhlIEFjY2Vzc2liaWxpdHkgbWFuYWdlciByZWFjcmVhdGVzIHRoZSBhYmlsaXR5IHRvIHRhYiBhbmQgYW5kIGhhdmUgY29udGVudCByZWFkIGJ5IHNjcmVlbiByZWFkZXJzLiBUaGlzIGlzIHZlcnkgaW1wb3J0YW50IGFzIGl0IGNhbiBwb3NzaWJseSBoZWxwIHBlb3BsZSB3aXRoIGRpc2FiaWxpdGllcyBhY2Nlc3MgcGl4aSBjb250ZW50LlxuICogTXVjaCBsaWtlIGludGVyYWN0aW9uIGFueSBEaXNwbGF5T2JqZWN0IGNhbiBiZSBtYWRlIGFjY2Vzc2libGUuIFRoaXMgbWFuYWdlciB3aWxsIG1hcCB0aGUgZXZlbnRzIGFzIGlmIHRoZSBtb3VzZSB3YXMgYmVpbmcgdXNlZCwgbWluaW1pemluZyB0aGUgZWZmZXJvdCByZXF1aXJlZCB0byBpbXBsZW1lbnQuXG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLkNhbnZhc1JlbmRlcmVyfFBJWEkuV2ViR0xSZW5kZXJlcn0gQSByZWZlcmVuY2UgdG8gdGhlIGN1cnJlbnQgcmVuZGVyZXJcbiAqL1xuZnVuY3Rpb24gQWNjZXNzaWJpbGl0eU1hbmFnZXIocmVuZGVyZXIpXG57XG5cdC8vIGZpcnN0IHdlIGNyZWF0ZSBhIGRpdiB0aGF0IHdpbGwgc2l0IG92ZXIgdGhlIHBpeGkgZWxlbWVudC4gVGhpcyBpcyB3aGVyZSB0aGUgZGl2IG92ZXJsYXlzIHdpbGwgZ28uXG4gICAgdmFyIGRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgIFxuICAgIGRpdi5zdHlsZS53aWR0aCA9IDEwMCArICdweCc7XG4gICAgZGl2LnN0eWxlLmhlaWdodCA9IDEwMCArICdweCc7XG4gICAgZGl2LnN0eWxlLnBvc2l0aW9uID0gJ2Fic29sdXRlJztcbiAgICBkaXYuc3R5bGUudG9wID0gMDtcbiAgICBkaXYuc3R5bGUubGVmdCA9IDA7XG4gICAvL1xuICAgIGRpdi5zdHlsZS56SW5kZXggPSAyO1xuICAgXHRcbiAgIFx0LyoqXG4gICBcdCAqIFRoaXMgaXMgdGhlIGRvbSBlbGVtZW50IHRoYXQgd2lsbCBzaXQgb3ZlciB0aGUgcGl4aSBlbGVtZW50LiBUaGlzIGlzIHdoZXJlIHRoZSBkaXYgb3ZlcmxheXMgd2lsbCBnby5cbiAgIFx0ICogXG4gICBcdCAqIEB0eXBlIHtIVE1MRWxlbWVudH1cbiAgIFx0ICogQHByaXZhdGVcbiAgIFx0ICovXG4gICBcdHRoaXMuZGl2ID0gZGl2O1xuXG4gICBcdC8qKlxuICAgXHQgKiBBIHNpbXBsZSBwb29sIGZvciBzdG9yaW5nIGRpdnMuXG4gICBcdCAqIFxuICAgXHQgKiBAdHlwZSB7QXJyYXl9XG4gICBcdCAqIEBwcml2YXRlXG4gICBcdCAqL1xuIFx0dGhpcy5wb29sID0gW107XG5cbiBcdC8qKlxuIFx0ICogVGhpcyBpcyBhIHRpY2sgdXNlZCB0byBjaGVjayBpZiBhbiBvYmplY3QgaXMgbm8gbG9uZ2VyIGJlaW5nIHJlbmRlcmVkLlxuIFx0ICogXG4gXHQgKiBAdHlwZSB7TnVtYmVyfVxuIFx0ICogQHByaXZhdGVcbiBcdCAqL1xuICAgXHR0aGlzLnJlbmRlcklkID0gMDtcblxuICAgXHQvKipcbiAgIFx0ICogU2V0dGluZyB0aGlzIHRvIHRydWUgd2lsbCB2aXN1YWxseSBzaG93IHRoZSBkaXZzXG4gICBcdCAqIFxuICAgXHQgKiBAdHlwZSB7Qm9vbGVhbn1cbiAgIFx0ICovXG4gICBcdHRoaXMuZGVidWcgPSBmYWxzZTtcblxuICBcdC8qKlxuICAgICAqIFRoZSByZW5kZXJlciB0aGlzIGFjY2Vzc2liaWxpdHkgbWFuYWdlciB3b3JrcyBmb3IuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlN5c3RlbVJlbmRlcmVyfVxuICAgICAqL1xuICAgXHR0aGlzLnJlbmRlcmVyID0gcmVuZGVyZXI7XG5cbiAgIFx0LyoqXG4gICAgICogVGhlIGFycmF5IG9mIGN1cnJlbnRseSBhY3RpdmUgYWNjZXNzaWJsZSBpdGVtcy5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge0FycmF5fVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICBcdHRoaXMuY2hpbGRyZW4gPSBbXTtcbiAgIFx0XG4gICBcdC8qKlxuICAgICAqIHByZSBiaW5kIHRoZSBmdW5jdGlvbnMuLlxuICAgICAqL1xuICAgXHR0aGlzLl9vbktleURvd24gPSB0aGlzLl9vbktleURvd24uYmluZCh0aGlzKTtcbiAgIFx0dGhpcy5fb25Nb3VzZU1vdmUgPSB0aGlzLl9vbk1vdXNlTW92ZS5iaW5kKHRoaXMpO1xuICAgXHRcbiAgIFx0LyoqXG4gICAgICogc3RvcmVzIHRoZSBzdGF0ZSBvZiB0aGUgbWFuYWdlci4gSWYgdGhlcmUgYXJlIG5vIGFjY2Vzc2libGUgb2JqZWN0cyBvciB0aGUgbW91c2UgaXMgbW92aW5nIHRoZSB3aWxsIGJlIGZhbHNlLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7QXJyYXl9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgIFx0dGhpcy5pc0FjdGl2ZSA9IGZhbHNlO1xuXG5cbiAgIFx0Ly8gbGV0IGxpc3RlbiBmb3IgdGFiLi4gb25jZSBwcmVzc2VkIHdlIGNhbiBmaXJlIHVwIGFuZCBzaG93IHRoZSBhY2Nlc3NpYmlsaXR5IGxheWVyXG4gICBcdHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdrZXlkb3duJywgdGhpcy5fb25LZXlEb3duLCBmYWxzZSk7XG59XG5cblxuQWNjZXNzaWJpbGl0eU1hbmFnZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gQWNjZXNzaWJpbGl0eU1hbmFnZXI7XG5tb2R1bGUuZXhwb3J0cyA9IEFjY2Vzc2liaWxpdHlNYW5hZ2VyO1xuXG4vKipcbiAqIEFjdGl2YXRpbmcgd2lsbCBjYXVzZSB0aGUgQWNjZXNzaWJpbGl0eSBsYXllciB0byBiZSBzaG93bi4gVGhpcyBpcyBjYWxsZWQgd2hlbiBhIHVzZXIgcHJlc2VzIHRoZSB0YWIga2V5XG4gKiBAcHJpdmF0ZVxuICovXG5BY2Nlc3NpYmlsaXR5TWFuYWdlci5wcm90b3R5cGUuYWN0aXZhdGUgPSBmdW5jdGlvbigpXG57XG5cdGlmKHRoaXMuaXNBY3RpdmUpXG5cdHtcblx0XHRyZXR1cm47XG5cdH1cblxuXHR0aGlzLmlzQWN0aXZlID0gdHJ1ZTtcblxuXHR3aW5kb3cuZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignbW91c2Vtb3ZlJywgdGhpcy5fb25Nb3VzZU1vdmUsIHRydWUpO1xuXHR3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsIHRoaXMuX29uS2V5RG93biwgZmFsc2UpO1xuXG5cdHRoaXMucmVuZGVyZXIub24oJ3Bvc3RyZW5kZXInLCB0aGlzLnVwZGF0ZSwgdGhpcyk7XG5cblx0dGhpcy5yZW5kZXJlci52aWV3LnBhcmVudE5vZGUuYXBwZW5kQ2hpbGQodGhpcy5kaXYpO1x0XG59O1xuXG4vKipcbiAqIERlYWN0aXZhdGluZyB3aWxsIGNhdXNlIHRoZSBBY2Nlc3NpYmlsaXR5IGxheWVyIHRvIGJlIGhpZGRlbi4gVGhpcyBpcyBjYWxsZWQgd2hlbiBhIHVzZXIgbW92ZXMgdGhlIG1vdXNlXG4gKiBAcHJpdmF0ZVxuICovXG5BY2Nlc3NpYmlsaXR5TWFuYWdlci5wcm90b3R5cGUuZGVhY3RpdmF0ZSA9IGZ1bmN0aW9uKClcbntcblx0aWYoIXRoaXMuaXNBY3RpdmUpXG5cdHtcblx0XHRyZXR1cm47XG5cdH1cblxuXHR0aGlzLmlzQWN0aXZlID0gZmFsc2U7XG5cblx0d2luZG93LmRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21vdXNlbW92ZScsIHRoaXMuX29uTW91c2VNb3ZlKTtcblx0d2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLCB0aGlzLl9vbktleURvd24sIGZhbHNlKTtcblxuXHR0aGlzLnJlbmRlcmVyLm9mZigncG9zdHJlbmRlcicsIHRoaXMudXBkYXRlKTtcblxuXHR0aGlzLmRpdi5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHRoaXMuZGl2KTtcblxufTtcblxuLyoqXG4gKiBUaGlzIHJlY3Vyc2l2ZSBmdW5jdGlvbiB3aWxsIHJ1biB0aHJvdWdodCBoZSBzY2VuZSBncmFwaCBhbmQgYWRkIGFueSBuZXcgYWNjZXNzaWJsZSBvYmplY3RzIHRvIHRoZSBET00gbGF5ZXIuXG4gKiBAcGFyYW0gZWxlbWVudCB7UElYSS5Db250YWluZXJ8UElYSS5TcHJpdGV8UElYSS5leHRyYXMuVGlsaW5nU3ByaXRlfSB0aGUgRGlzcGxheU9iamVjdCB0byBjaGVjay5cbiAqIEBwcml2YXRlXG4gKi9cbkFjY2Vzc2liaWxpdHlNYW5hZ2VyLnByb3RvdHlwZS51cGRhdGVBY2Nlc3NpYmxlT2JqZWN0cyA9IGZ1bmN0aW9uKGRpc3BsYXlPYmplY3QpXG57XG5cdGlmKCFkaXNwbGF5T2JqZWN0LnZpc2libGUpXG5cdHtcblx0XHRyZXR1cm47XG5cdH1cblxuXHRpZihkaXNwbGF5T2JqZWN0LmFjY2Vzc2libGUgJiYgZGlzcGxheU9iamVjdC5pbnRlcmFjdGl2ZSlcblx0e1xuXHRcdGlmKCFkaXNwbGF5T2JqZWN0Ll9hY2Nlc3NpYmxlQWN0aXZlKVxuXHRcdHtcblx0XHRcdHRoaXMuYWRkQ2hpbGQoZGlzcGxheU9iamVjdCk7XG5cdFx0fVxuXHQgICBcdFxuXHQgICBcdGRpc3BsYXlPYmplY3QucmVuZGVySWQgPSB0aGlzLnJlbmRlcklkO1xuXHR9XG5cblx0dmFyIGNoaWxkcmVuID0gZGlzcGxheU9iamVjdC5jaGlsZHJlbjtcblxuXHRmb3IgKHZhciBpID0gY2hpbGRyZW4ubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcblx0XHRcblx0XHR0aGlzLnVwZGF0ZUFjY2Vzc2libGVPYmplY3RzKGNoaWxkcmVuW2ldKTtcblx0fVxufTtcblxuXG4vKipcbiAqIEJlZm9yZSBlYWNoIHJlbmRlciB0aGlzIGZ1bmN0aW9uIHdpbGwgZW5zdXJlIHRoYXQgYWxsIGRpdnMgYXJlIG1hcHBlZCBjb3JyZWN0bHkgdG8gdGhlaXIgRGlzcGxheU9iamVjdHNcbiAqIEBwcml2YXRlXG4gKi9cbkFjY2Vzc2liaWxpdHlNYW5hZ2VyLnByb3RvdHlwZS51cGRhdGUgPSBmdW5jdGlvbigpXG57XG5cblx0Ly8gdXBkYXRlIGNoaWxkcmVuLi4uXG5cdHRoaXMudXBkYXRlQWNjZXNzaWJsZU9iamVjdHModGhpcy5yZW5kZXJlci5fbGFzdE9iamVjdFJlbmRlcmVkKTtcblxuXHR2YXIgcmVjdCA9IHRoaXMucmVuZGVyZXIudmlldy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcblx0dmFyIHN4ID0gcmVjdC53aWR0aCAgLyB0aGlzLnJlbmRlcmVyLndpZHRoO1xuXHR2YXIgc3kgPSByZWN0LmhlaWdodCAvIHRoaXMucmVuZGVyZXIuaGVpZ2h0O1xuXG5cdHZhciBkaXYgPSB0aGlzLmRpdjtcblxuXHRkaXYuc3R5bGUubGVmdCA9IHJlY3QubGVmdCArICdweCc7XG5cdGRpdi5zdHlsZS50b3AgPSByZWN0LnRvcCArICdweCc7XG5cdGRpdi5zdHlsZS53aWR0aCA9IHRoaXMucmVuZGVyZXIud2lkdGggKyAncHgnO1xuXHRkaXYuc3R5bGUuaGVpZ2h0ID0gdGhpcy5yZW5kZXJlci5oZWlnaHQgKyAncHgnO1xuXG5cdGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5jaGlsZHJlbi5sZW5ndGg7IGkrKylcblx0e1xuXG5cdFx0dmFyIGNoaWxkID0gdGhpcy5jaGlsZHJlbltpXTtcblxuXHRcdGlmKGNoaWxkLnJlbmRlcklkICE9PSB0aGlzLnJlbmRlcklkKVxuXHRcdHtcblx0XHRcdGNoaWxkLl9hY2Nlc3NpYmxlQWN0aXZlID0gZmFsc2U7XG5cbiAgICAgICAgICAgIGNvcmUudXRpbHMucmVtb3ZlSXRlbXModGhpcy5jaGlsZHJlbiwgaSwgMSk7XG5cdFx0XHR0aGlzLmRpdi5yZW1vdmVDaGlsZCggY2hpbGQuX2FjY2Vzc2libGVEaXYgKTtcblx0XHRcdHRoaXMucG9vbC5wdXNoKGNoaWxkLl9hY2Nlc3NpYmxlRGl2KTtcblx0XHRcdGNoaWxkLl9hY2Nlc3NpYmxlRGl2ID0gbnVsbDtcblxuXHRcdFx0aS0tO1xuXG5cdFx0XHRpZih0aGlzLmNoaWxkcmVuLmxlbmd0aCA9PT0gMClcblx0XHRcdHtcblx0XHRcdFx0dGhpcy5kZWFjdGl2YXRlKCk7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdGVsc2Vcblx0XHR7XG5cdFx0XHQvLyBtYXAgZGl2IHRvIGRpc3BsYXkuLlxuXHRcdFx0ZGl2ID0gY2hpbGQuX2FjY2Vzc2libGVEaXY7XG5cdFx0XHR2YXIgaGl0QXJlYSA9IGNoaWxkLmhpdEFyZWE7XG5cdFx0XHR2YXIgd3QgPSBjaGlsZC53b3JsZFRyYW5zZm9ybTtcblxuXHRcdFx0aWYoY2hpbGQuaGl0QXJlYSlcblx0XHRcdHtcblx0XHRcdFx0ZGl2LnN0eWxlLmxlZnQgPSAoKHd0LnR4ICsgKGhpdEFyZWEueCAqIHd0LmEpKSAqIHN4KSArICdweCc7XG5cdFx0XHRcdGRpdi5zdHlsZS50b3AgPSAgKCh3dC50eSArIChoaXRBcmVhLnkgKiB3dC5kKSkgKiBzeSkgKyAgJ3B4JztcblxuXHRcdFx0XHRkaXYuc3R5bGUud2lkdGggPSAoaGl0QXJlYS53aWR0aCAqIHd0LmEgKiBzeCkgKyAncHgnO1xuXHRcdFx0XHRkaXYuc3R5bGUuaGVpZ2h0ID0gKGhpdEFyZWEuaGVpZ2h0ICogd3QuZCAqIHN5KSArICdweCc7XG5cdFx0XHRcblx0XHRcdH1cblx0XHRcdGVsc2Vcblx0XHRcdHtcblx0XHRcdFx0aGl0QXJlYSA9IGNoaWxkLmdldEJvdW5kcygpO1xuXG5cdFx0XHRcdHRoaXMuY2FwSGl0QXJlYShoaXRBcmVhKTtcblxuXHRcdFx0XHRkaXYuc3R5bGUubGVmdCA9IChoaXRBcmVhLnggKiBzeCkgKyAncHgnO1xuXHRcdFx0XHRkaXYuc3R5bGUudG9wID0gIChoaXRBcmVhLnkgKiBzeSkgKyAgJ3B4JztcblxuXHRcdFx0XHRkaXYuc3R5bGUud2lkdGggPSAoaGl0QXJlYS53aWR0aCAqIHN4KSArICdweCc7XG5cdFx0XHRcdGRpdi5zdHlsZS5oZWlnaHQgPSAoaGl0QXJlYS5oZWlnaHQgKiBzeSkgKyAncHgnO1xuXHRcdFx0fVx0XHRcblx0XHR9XG5cdH1cblxuXHQvLyBpbmNyZW1lbnQgdGhlIHJlbmRlciBpZC4uXG5cdHRoaXMucmVuZGVySWQrKztcbn07XG5cbkFjY2Vzc2liaWxpdHlNYW5hZ2VyLnByb3RvdHlwZS5jYXBIaXRBcmVhID0gZnVuY3Rpb24gKGhpdEFyZWEpXG57XG4gICAgaWYgKGhpdEFyZWEueCA8IDApXG4gICAge1xuICAgICAgICBoaXRBcmVhLndpZHRoICs9IGhpdEFyZWEueDtcbiAgICAgICAgaGl0QXJlYS54ID0gMDtcbiAgICB9XG5cbiAgICBpZiAoaGl0QXJlYS55IDwgMClcbiAgICB7XG4gICAgICAgIGhpdEFyZWEuaGVpZ2h0ICs9IGhpdEFyZWEueTtcbiAgICAgICAgaGl0QXJlYS55ID0gMDtcbiAgICB9XG5cbiAgICBpZiAoIGhpdEFyZWEueCArIGhpdEFyZWEud2lkdGggPiB0aGlzLnJlbmRlcmVyLndpZHRoIClcbiAgICB7XG4gICAgICAgIGhpdEFyZWEud2lkdGggPSB0aGlzLnJlbmRlcmVyLndpZHRoIC0gaGl0QXJlYS54O1xuICAgIH1cblxuICAgIGlmICggaGl0QXJlYS55ICsgaGl0QXJlYS5oZWlnaHQgPiB0aGlzLnJlbmRlcmVyLmhlaWdodCApXG4gICAge1xuICAgICAgICBoaXRBcmVhLmhlaWdodCA9IHRoaXMucmVuZGVyZXIuaGVpZ2h0IC0gaGl0QXJlYS55O1xuICAgIH1cbn07XG5cblxuLyoqXG4gKiBBZGRzIGEgRGlzcGxheU9iamVjdCB0byB0aGUgYWNjZXNzaWJpbGl0eSBtYW5hZ2VyXG4gKiBAcHJpdmF0ZVxuICovXG5BY2Nlc3NpYmlsaXR5TWFuYWdlci5wcm90b3R5cGUuYWRkQ2hpbGQgPSBmdW5jdGlvbihkaXNwbGF5T2JqZWN0KVxue1xuLy9cdHRoaXMuYWN0aXZhdGUoKTtcblx0XG5cdHZhciBkaXYgPSB0aGlzLnBvb2wucG9wKCk7XG5cblx0aWYoIWRpdilcblx0e1xuXHRcdGRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2J1dHRvbicpOyBcblxuXHQgICAgZGl2LnN0eWxlLndpZHRoID0gMTAwICsgJ3B4Jztcblx0ICAgIGRpdi5zdHlsZS5oZWlnaHQgPSAxMDAgKyAncHgnO1xuXHQgICAgZGl2LnN0eWxlLmJhY2tncm91bmRDb2xvciA9IHRoaXMuZGVidWcgPyAncmdiYSgyNTUsMCwwLDAuNSknIDogJ3RyYW5zcGFyZW50Jztcblx0ICAgIGRpdi5zdHlsZS5wb3NpdGlvbiA9ICdhYnNvbHV0ZSc7XG5cdCAgICBkaXYuc3R5bGUuekluZGV4ID0gMjtcblx0ICAgIGRpdi5zdHlsZS5ib3JkZXJTdHlsZSA9ICdub25lJztcblxuXHQgICAgXG5cdCAgICBkaXYuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCB0aGlzLl9vbkNsaWNrLmJpbmQodGhpcykpO1xuXHQgICAgZGl2LmFkZEV2ZW50TGlzdGVuZXIoJ2ZvY3VzJywgdGhpcy5fb25Gb2N1cy5iaW5kKHRoaXMpKTtcblx0ICAgIGRpdi5hZGRFdmVudExpc3RlbmVyKCdmb2N1c291dCcsIHRoaXMuX29uRm9jdXNPdXQuYmluZCh0aGlzKSk7XG5cdH1cblx0ICAgXHRcblxuXG5cblx0ZGl2LnRpdGxlID0gZGlzcGxheU9iamVjdC5hY2Nlc3NpYmxlVGl0bGUgfHwgJ2Rpc3BsYXlPYmplY3QgJyArIHRoaXMudGFiSW5kZXg7XG5cblx0Ly9cblx0XG5cdGRpc3BsYXlPYmplY3QuX2FjY2Vzc2libGVBY3RpdmUgPSB0cnVlO1xuXHRkaXNwbGF5T2JqZWN0Ll9hY2Nlc3NpYmxlRGl2ID0gZGl2O1xuXHRkaXYuZGlzcGxheU9iamVjdCA9IGRpc3BsYXlPYmplY3Q7XG5cblxuXHR0aGlzLmNoaWxkcmVuLnB1c2goZGlzcGxheU9iamVjdCk7XG5cdHRoaXMuZGl2LmFwcGVuZENoaWxkKCBkaXNwbGF5T2JqZWN0Ll9hY2Nlc3NpYmxlRGl2ICk7XG5cdGRpc3BsYXlPYmplY3QuX2FjY2Vzc2libGVEaXYudGFiSW5kZXggPSBkaXNwbGF5T2JqZWN0LnRhYkluZGV4O1xufTtcblxuXG4vKipcbiAqIE1hcHMgdGhlIGRpdiBidXR0b24gcHJlc3MgdG8gcGl4aSdzIEludGVyYWN0aW9uTWFuYWdlciAoY2xpY2spXG4gKiBAcHJpdmF0ZVxuICovXG5BY2Nlc3NpYmlsaXR5TWFuYWdlci5wcm90b3R5cGUuX29uQ2xpY2sgPSBmdW5jdGlvbihlKVxue1xuXHR2YXIgaW50ZXJhY3Rpb25NYW5hZ2VyID0gdGhpcy5yZW5kZXJlci5wbHVnaW5zLmludGVyYWN0aW9uO1xuXHRpbnRlcmFjdGlvbk1hbmFnZXIuZGlzcGF0Y2hFdmVudChlLnRhcmdldC5kaXNwbGF5T2JqZWN0LCAnY2xpY2snLCBpbnRlcmFjdGlvbk1hbmFnZXIuZXZlbnREYXRhKTtcbn07XG5cbi8qKlxuICogTWFwcyB0aGUgZGl2IGZvY3VzIGV2ZW50cyB0byBwaXhpcyBJbnRlcmFjdGlvbk1hbmFnZXIgKG1vdXNlb3ZlcilcbiAqIEBwcml2YXRlXG4gKi9cbkFjY2Vzc2liaWxpdHlNYW5hZ2VyLnByb3RvdHlwZS5fb25Gb2N1cyA9IGZ1bmN0aW9uKGUpXG57XG5cdHZhciBpbnRlcmFjdGlvbk1hbmFnZXIgPSB0aGlzLnJlbmRlcmVyLnBsdWdpbnMuaW50ZXJhY3Rpb247XG5cdGludGVyYWN0aW9uTWFuYWdlci5kaXNwYXRjaEV2ZW50KGUudGFyZ2V0LmRpc3BsYXlPYmplY3QsICdtb3VzZW92ZXInLCBpbnRlcmFjdGlvbk1hbmFnZXIuZXZlbnREYXRhKTtcbn07XG5cbi8qKlxuICogTWFwcyB0aGUgZGl2IGZvY3VzIGV2ZW50cyB0byBwaXhpcyBJbnRlcmFjdGlvbk1hbmFnZXIgKG1vdXNlb3V0KVxuICogQHByaXZhdGVcbiAqL1xuQWNjZXNzaWJpbGl0eU1hbmFnZXIucHJvdG90eXBlLl9vbkZvY3VzT3V0ID0gZnVuY3Rpb24oZSlcbntcblx0dmFyIGludGVyYWN0aW9uTWFuYWdlciA9IHRoaXMucmVuZGVyZXIucGx1Z2lucy5pbnRlcmFjdGlvbjtcblx0aW50ZXJhY3Rpb25NYW5hZ2VyLmRpc3BhdGNoRXZlbnQoZS50YXJnZXQuZGlzcGxheU9iamVjdCwgJ21vdXNlb3V0JywgaW50ZXJhY3Rpb25NYW5hZ2VyLmV2ZW50RGF0YSk7XG59O1xuXG4vKipcbiAqIElzIGNhbGxlZCB3aGVuIGEga2V5IGlzIHByZXNzZWRcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5BY2Nlc3NpYmlsaXR5TWFuYWdlci5wcm90b3R5cGUuX29uS2V5RG93biA9IGZ1bmN0aW9uKGUpXG57XG5cdGlmKGUua2V5Q29kZSAhPT0gOSlcblx0e1xuXHRcdHJldHVybjtcblx0fVxuXG5cdHRoaXMuYWN0aXZhdGUoKTtcbn07XG5cbi8qKlxuICogSXMgY2FsbGVkIHdoZW4gdGhlIG1vdXNlIG1vdmVzIGFjcm9zcyB0aGUgcmVuZGVyZXIgZWxlbWVudFxuICpcbiAqIEBwcml2YXRlXG4gKi9cbkFjY2Vzc2liaWxpdHlNYW5hZ2VyLnByb3RvdHlwZS5fb25Nb3VzZU1vdmUgPSBmdW5jdGlvbigpXG57XG5cdHRoaXMuZGVhY3RpdmF0ZSgpO1xufTtcblxuXG4vKipcbiAqIERlc3Ryb3lzIHRoZSBhY2Nlc3NpYmlsaXR5IG1hbmFnZXJcbiAqXG4gKi9cbkFjY2Vzc2liaWxpdHlNYW5hZ2VyLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKCkgXG57XG5cdHRoaXMuZGl2ID0gbnVsbDtcblxuXHRmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuY2hpbGRyZW4ubGVuZ3RoOyBpKyspXG5cdHtcblx0XHR0aGlzLmNoaWxkcmVuW2ldLmRpdiA9IG51bGw7XG5cdH1cblxuXHRcblx0d2luZG93LmRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21vdXNlbW92ZScsIHRoaXMuX29uTW91c2VNb3ZlKTtcblx0d2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLCB0aGlzLl9vbktleURvd24pO1xuXHRcdFxuXHR0aGlzLnBvb2wgPSBudWxsO1xuXHR0aGlzLmNoaWxkcmVuID0gbnVsbDtcblx0dGhpcy5yZW5kZXJlciA9IG51bGw7XG5cbn07XG5cbmNvcmUuV2ViR0xSZW5kZXJlci5yZWdpc3RlclBsdWdpbignYWNjZXNzaWJpbGl0eScsIEFjY2Vzc2liaWxpdHlNYW5hZ2VyKTtcbmNvcmUuQ2FudmFzUmVuZGVyZXIucmVnaXN0ZXJQbHVnaW4oJ2FjY2Vzc2liaWxpdHknLCBBY2Nlc3NpYmlsaXR5TWFuYWdlcik7XG5cbiIsIi8qKlxuICogRGVmYXVsdCBwcm9wZXJ0eSB2YWx1ZXMgb2YgYWNjZXNzaWJsZSBvYmplY3RzXG4gKiB1c2VkIGJ5IHtAbGluayBQSVhJLmFjY2Vzc2liaWxpdHkuQWNjZXNzaWJpbGl0eU1hbmFnZXJ9LlxuICpcbiAqIEBtaXhpblxuICogQG1lbWJlcm9mIFBJWElcbiAqIEBleGFtcGxlXG4gKiAgICAgIGZ1bmN0aW9uIE15T2JqZWN0KCkge31cbiAqXG4gKiAgICAgIE9iamVjdC5hc3NpZ24oXG4gKiAgICAgICAgICBNeU9iamVjdC5wcm90b3R5cGUsXG4gKiAgICAgICAgICBQSVhJLmFjY2Vzc2liaWxpdHkuYWNjZXNzaWJsZVRhcmdldFxuICogICAgICApO1xuICovXG52YXIgYWNjZXNzaWJsZVRhcmdldCA9IHtcbiAgICBcbiAgICAvKipcbiAgICAgKiBAdG9kbyBOZWVkcyBkb2NzLlxuICAgICAqL1xuICAgIGFjY2Vzc2libGU6ZmFsc2UsXG5cbiAgICAvKipcbiAgICAgKiBAdG9kbyBOZWVkcyBkb2NzLlxuICAgICAqL1xuICAgIGFjY2Vzc2libGVUaXRsZTpudWxsLFxuXG4gICAgLyoqXG4gICAgICogQHRvZG8gTmVlZHMgZG9jcy5cbiAgICAgKi9cbiAgICB0YWJJbmRleDowLFxuXG4gICAgLyoqXG4gICAgICogQHRvZG8gTmVlZHMgZG9jcy5cbiAgICAgKi9cbiAgICBfYWNjZXNzaWJsZUFjdGl2ZTpmYWxzZSxcblxuICAgIC8qKlxuICAgICAqIEB0b2RvIE5lZWRzIGRvY3MuXG4gICAgICovXG4gICAgX2FjY2Vzc2libGVEaXY6ZmFsc2VcblxufTtcblxubW9kdWxlLmV4cG9ydHMgPSBhY2Nlc3NpYmxlVGFyZ2V0O1xuIiwiLyoqXG4gKiBAZmlsZSAgICAgICAgTWFpbiBleHBvcnQgb2YgdGhlIFBJWEkgYWNjZXNzaWJpbGl0eSBsaWJyYXJ5XG4gKiBAYXV0aG9yICAgICAgTWF0IEdyb3ZlcyA8bWF0QGdvb2Rib3lkaWdpdGFsLmNvbT5cbiAqIEBjb3B5cmlnaHQgICAyMDEzLTIwMTUgR29vZEJveURpZ2l0YWxcbiAqIEBsaWNlbnNlICAgICB7QGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL3BpeGlqcy9waXhpLmpzL2Jsb2IvbWFzdGVyL0xJQ0VOU0V8TUlUIExpY2Vuc2V9XG4gKi9cblxuLyoqXG4gKiBAbmFtZXNwYWNlIFBJWEkuaW50ZXJhY3Rpb25cbiAqL1xubW9kdWxlLmV4cG9ydHMgPSB7XG4gICAgYWNjZXNzaWJsZVRhcmdldDogICAgIHJlcXVpcmUoJy4vYWNjZXNzaWJsZVRhcmdldCcpLFxuICAgIEFjY2Vzc2liaWxpdHlNYW5hZ2VyOiByZXF1aXJlKCcuL0FjY2Vzc2liaWxpdHlNYW5hZ2VyJylcbn07XG4iLCIvKipcbiAqIENvbnN0YW50IHZhbHVlcyB1c2VkIGluIHBpeGlcbiAqXG4gKiBAbGVuZHMgUElYSVxuICovXG52YXIgQ09OU1QgPSB7XG4gICAgLyoqXG4gICAgICogU3RyaW5nIG9mIHRoZSBjdXJyZW50IFBJWEkgdmVyc2lvblxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBjb25zdGFudFxuICAgICAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBWRVJTSU9OXG4gICAgICovXG4gICAgVkVSU0lPTjogcmVxdWlyZSgnLi4vLi4vcGFja2FnZS5qc29uJykudmVyc2lvbixcblxuICAgIC8qKlxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBQSV8yIC0gVHdvIFBpXG4gICAgICogQGNvbnN0YW50XG4gICAgICogQHN0YXRpY1xuICAgICAqL1xuICAgIFBJXzI6IE1hdGguUEkgKiAyLFxuXG4gICAgLyoqXG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IFJBRF9UT19ERUcgLSBDb25zdGFudCBjb252ZXJzaW9uIGZhY3RvciBmb3IgY29udmVydGluZyByYWRpYW5zIHRvIGRlZ3JlZXNcbiAgICAgKiBAY29uc3RhbnRcbiAgICAgKiBAc3RhdGljXG4gICAgICovXG4gICAgUkFEX1RPX0RFRzogMTgwIC8gTWF0aC5QSSxcblxuICAgIC8qKlxuICAgICAqIEBwcm9wZXJ0eSB7TnVtYmVyfSBERUdfVE9fUkFEIC0gQ29uc3RhbnQgY29udmVyc2lvbiBmYWN0b3IgZm9yIGNvbnZlcnRpbmcgZGVncmVlcyB0byByYWRpYW5zXG4gICAgICogQGNvbnN0YW50XG4gICAgICogQHN0YXRpY1xuICAgICAqL1xuICAgIERFR19UT19SQUQ6IE1hdGguUEkgLyAxODAsXG5cbiAgICAvKipcbiAgICAgKiBUYXJnZXQgZnJhbWVzIHBlciBtaWxsaXNlY29uZC5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAY29uc3RhbnRcbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gVEFSR0VUX0ZQTVM9MC4wNlxuICAgICAqL1xuICAgIFRBUkdFVF9GUE1TOiAwLjA2LFxuXG4gICAgLyoqXG4gICAgICogQ29uc3RhbnQgdG8gaWRlbnRpZnkgdGhlIFJlbmRlcmVyIFR5cGUuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQGNvbnN0YW50XG4gICAgICogQHByb3BlcnR5IHtvYmplY3R9IFJFTkRFUkVSX1RZUEVcbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gUkVOREVSRVJfVFlQRS5VTktOT1dOXG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IFJFTkRFUkVSX1RZUEUuV0VCR0xcbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gUkVOREVSRVJfVFlQRS5DQU5WQVNcbiAgICAgKi9cbiAgICBSRU5ERVJFUl9UWVBFOiB7XG4gICAgICAgIFVOS05PV046ICAgIDAsXG4gICAgICAgIFdFQkdMOiAgICAgIDEsXG4gICAgICAgIENBTlZBUzogICAgIDJcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVmFyaW91cyBibGVuZCBtb2RlcyBzdXBwb3J0ZWQgYnkgUElYSS4gSU1QT1JUQU5UIC0gVGhlIFdlYkdMIHJlbmRlcmVyIG9ubHkgc3VwcG9ydHNcbiAgICAgKiB0aGUgTk9STUFMLCBBREQsIE1VTFRJUExZIGFuZCBTQ1JFRU4gYmxlbmQgbW9kZXMuIEFueXRoaW5nIGVsc2Ugd2lsbCBzaWxlbnRseSBhY3QgbGlrZVxuICAgICAqIE5PUk1BTC5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAY29uc3RhbnRcbiAgICAgKiBAcHJvcGVydHkge29iamVjdH0gQkxFTkRfTU9ERVNcbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gQkxFTkRfTU9ERVMuTk9STUFMXG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IEJMRU5EX01PREVTLkFERFxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBCTEVORF9NT0RFUy5NVUxUSVBMWVxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBCTEVORF9NT0RFUy5TQ1JFRU5cbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gQkxFTkRfTU9ERVMuT1ZFUkxBWVxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBCTEVORF9NT0RFUy5EQVJLRU5cbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gQkxFTkRfTU9ERVMuTElHSFRFTlxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBCTEVORF9NT0RFUy5DT0xPUl9ET0RHRVxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBCTEVORF9NT0RFUy5DT0xPUl9CVVJOXG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IEJMRU5EX01PREVTLkhBUkRfTElHSFRcbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gQkxFTkRfTU9ERVMuU09GVF9MSUdIVFxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBCTEVORF9NT0RFUy5ESUZGRVJFTkNFXG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IEJMRU5EX01PREVTLkVYQ0xVU0lPTlxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBCTEVORF9NT0RFUy5IVUVcbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gQkxFTkRfTU9ERVMuU0FUVVJBVElPTlxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBCTEVORF9NT0RFUy5DT0xPUlxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBCTEVORF9NT0RFUy5MVU1JTk9TSVRZXG4gICAgICovXG4gICAgQkxFTkRfTU9ERVM6IHtcbiAgICAgICAgTk9STUFMOiAgICAgICAgIDAsXG4gICAgICAgIEFERDogICAgICAgICAgICAxLFxuICAgICAgICBNVUxUSVBMWTogICAgICAgMixcbiAgICAgICAgU0NSRUVOOiAgICAgICAgIDMsXG4gICAgICAgIE9WRVJMQVk6ICAgICAgICA0LFxuICAgICAgICBEQVJLRU46ICAgICAgICAgNSxcbiAgICAgICAgTElHSFRFTjogICAgICAgIDYsXG4gICAgICAgIENPTE9SX0RPREdFOiAgICA3LFxuICAgICAgICBDT0xPUl9CVVJOOiAgICAgOCxcbiAgICAgICAgSEFSRF9MSUdIVDogICAgIDksXG4gICAgICAgIFNPRlRfTElHSFQ6ICAgICAxMCxcbiAgICAgICAgRElGRkVSRU5DRTogICAgIDExLFxuICAgICAgICBFWENMVVNJT046ICAgICAgMTIsXG4gICAgICAgIEhVRTogICAgICAgICAgICAxMyxcbiAgICAgICAgU0FUVVJBVElPTjogICAgIDE0LFxuICAgICAgICBDT0xPUjogICAgICAgICAgMTUsXG4gICAgICAgIExVTUlOT1NJVFk6ICAgICAxNlxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBWYXJpb3VzIHdlYmdsIGRyYXcgbW9kZXMuIFRoZXNlIGNhbiBiZSB1c2VkIHRvIHNwZWNpZnkgd2hpY2ggR0wgZHJhd01vZGUgdG8gdXNlXG4gICAgICogdW5kZXIgY2VydGFpbiBzaXR1YXRpb25zIGFuZCByZW5kZXJlcnMuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQGNvbnN0YW50XG4gICAgICogQHByb3BlcnR5IHtvYmplY3R9IERSQVdfTU9ERVNcbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gRFJBV19NT0RFUy5QT0lOVFNcbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gRFJBV19NT0RFUy5MSU5FU1xuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBEUkFXX01PREVTLkxJTkVfTE9PUFxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBEUkFXX01PREVTLkxJTkVfU1RSSVBcbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gRFJBV19NT0RFUy5UUklBTkdMRVNcbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gRFJBV19NT0RFUy5UUklBTkdMRV9TVFJJUFxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBEUkFXX01PREVTLlRSSUFOR0xFX0ZBTlxuICAgICAqL1xuICAgIERSQVdfTU9ERVM6IHtcbiAgICAgICAgUE9JTlRTOiAgICAgICAgIDAsXG4gICAgICAgIExJTkVTOiAgICAgICAgICAxLFxuICAgICAgICBMSU5FX0xPT1A6ICAgICAgMixcbiAgICAgICAgTElORV9TVFJJUDogICAgIDMsXG4gICAgICAgIFRSSUFOR0xFUzogICAgICA0LFxuICAgICAgICBUUklBTkdMRV9TVFJJUDogNSxcbiAgICAgICAgVFJJQU5HTEVfRkFOOiAgIDZcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVGhlIHNjYWxlIG1vZGVzIHRoYXQgYXJlIHN1cHBvcnRlZCBieSBwaXhpLlxuICAgICAqXG4gICAgICogVGhlIERFRkFVTFQgc2NhbGUgbW9kZSBhZmZlY3RzIHRoZSBkZWZhdWx0IHNjYWxpbmcgbW9kZSBvZiBmdXR1cmUgb3BlcmF0aW9ucy5cbiAgICAgKiBJdCBjYW4gYmUgcmUtYXNzaWduZWQgdG8gZWl0aGVyIExJTkVBUiBvciBORUFSRVNULCBkZXBlbmRpbmcgdXBvbiBzdWl0YWJpbGl0eS5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAY29uc3RhbnRcbiAgICAgKiBAcHJvcGVydHkge29iamVjdH0gU0NBTEVfTU9ERVNcbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gU0NBTEVfTU9ERVMuREVGQVVMVD1MSU5FQVJcbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gU0NBTEVfTU9ERVMuTElORUFSIFNtb290aCBzY2FsaW5nXG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IFNDQUxFX01PREVTLk5FQVJFU1QgUGl4ZWxhdGluZyBzY2FsaW5nXG4gICAgICovXG4gICAgU0NBTEVfTU9ERVM6IHtcbiAgICAgICAgREVGQVVMVDogICAgMCxcbiAgICAgICAgTElORUFSOiAgICAgMCxcbiAgICAgICAgTkVBUkVTVDogICAgMVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBUaGUgcHJlZml4IHRoYXQgZGVub3RlcyBhIFVSTCBpcyBmb3IgYSByZXRpbmEgYXNzZXRcbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAY29uc3RhbnRcbiAgICAgKiBAcHJvcGVydHkge3N0cmluZ30gUkVUSU5BX1BSRUZJWFxuICAgICAqL1xuICAgIC8vZXhhbXBsZTogJ0AyeCcsXG4gICAgUkVUSU5BX1BSRUZJWDogL0AoLispeC8sXG5cbiAgICBSRVNPTFVUSU9OOjEsXG5cbiAgICBGSUxURVJfUkVTT0xVVElPTjoxLFxuXG4gICAgLyoqXG4gICAgICogVGhlIGRlZmF1bHQgcmVuZGVyIG9wdGlvbnMgaWYgbm9uZSBhcmUgc3VwcGxpZWQgdG8ge0BsaW5rIFBJWEkuV2ViR0xSZW5kZXJlcn1cbiAgICAgKiBvciB7QGxpbmsgUElYSS5DYW52YXNSZW5kZXJlcn0uXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQGNvbnN0YW50XG4gICAgICogQHByb3BlcnR5IHtvYmplY3R9IERFRkFVTFRfUkVOREVSX09QVElPTlNcbiAgICAgKiBAcHJvcGVydHkge0hUTUxDYW52YXNFbGVtZW50fSBERUZBVUxUX1JFTkRFUl9PUFRJT05TLnZpZXc9bnVsbFxuICAgICAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gREVGQVVMVF9SRU5ERVJfT1BUSU9OUy50cmFuc3BhcmVudD1mYWxzZVxuICAgICAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gREVGQVVMVF9SRU5ERVJfT1BUSU9OUy5hbnRpYWxpYXM9ZmFsc2VcbiAgICAgKiBAcHJvcGVydHkge2Jvb2xlYW59IERFRkFVTFRfUkVOREVSX09QVElPTlMuZm9yY2VGWEFBPWZhbHNlXG4gICAgICogQHByb3BlcnR5IHtib29sZWFufSBERUZBVUxUX1JFTkRFUl9PUFRJT05TLnByZXNlcnZlRHJhd2luZ0J1ZmZlcj1mYWxzZVxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBERUZBVUxUX1JFTkRFUl9PUFRJT05TLnJlc29sdXRpb249MVxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBERUZBVUxUX1JFTkRFUl9PUFRJT05TLmJhY2tncm91bmRDb2xvcj0weDAwMDAwMFxuICAgICAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gREVGQVVMVF9SRU5ERVJfT1BUSU9OUy5jbGVhckJlZm9yZVJlbmRlcj10cnVlXG4gICAgICogQHByb3BlcnR5IHtib29sZWFufSBERUZBVUxUX1JFTkRFUl9PUFRJT05TLmF1dG9SZXNpemU9ZmFsc2VcbiAgICAgKi9cbiAgICBERUZBVUxUX1JFTkRFUl9PUFRJT05TOiB7XG4gICAgICAgIHZpZXc6IG51bGwsXG4gICAgICAgIHJlc29sdXRpb246IDEsXG4gICAgICAgIGFudGlhbGlhczogZmFsc2UsXG4gICAgICAgIGZvcmNlRlhBQTogZmFsc2UsXG4gICAgICAgIGF1dG9SZXNpemU6IGZhbHNlLFxuICAgICAgICB0cmFuc3BhcmVudDogZmFsc2UsXG4gICAgICAgIGJhY2tncm91bmRDb2xvcjogMHgwMDAwMDAsXG4gICAgICAgIGNsZWFyQmVmb3JlUmVuZGVyOiB0cnVlLFxuICAgICAgICBwcmVzZXJ2ZURyYXdpbmdCdWZmZXI6IGZhbHNlLFxuICAgICAgICByb3VuZFBpeGVsczogZmFsc2VcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQ29uc3RhbnRzIHRoYXQgaWRlbnRpZnkgc2hhcGVzLCBtYWlubHkgdG8gcHJldmVudCBgaW5zdGFuY2VvZmAgY2FsbHMuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQGNvbnN0YW50XG4gICAgICogQHByb3BlcnR5IHtvYmplY3R9IFNIQVBFU1xuICAgICAqIEBwcm9wZXJ0eSB7b2JqZWN0fSBTSEFQRVMuUE9MWT0wXG4gICAgICogQHByb3BlcnR5IHtvYmplY3R9IFNIQVBFUy5SRUNUPTFcbiAgICAgKiBAcHJvcGVydHkge29iamVjdH0gU0hBUEVTLkNJUkM9MlxuICAgICAqIEBwcm9wZXJ0eSB7b2JqZWN0fSBTSEFQRVMuRUxJUD0zXG4gICAgICogQHByb3BlcnR5IHtvYmplY3R9IFNIQVBFUy5SUkVDPTRcbiAgICAgKi9cbiAgICBTSEFQRVM6IHtcbiAgICAgICAgUE9MWTogMCxcbiAgICAgICAgUkVDVDogMSxcbiAgICAgICAgQ0lSQzogMixcbiAgICAgICAgRUxJUDogMyxcbiAgICAgICAgUlJFQzogNFxuICAgIH0sXG5cbiAgICAvLyBUT0RPOiBtYXliZSBjaGFuZ2UgdG8gU1BSSVRFLkJBVENIX1NJWkU6IDIwMDBcbiAgICAvLyBUT0RPOiBtYXliZSBhZGQgUEFSVElDTEUuQkFUQ0hfU0laRTogMTUwMDBcbiAgICBTUFJJVEVfQkFUQ0hfU0laRTogMjAwMCAvL25pY2UgYmFsYW5jZSBiZXR3ZWVuIG1vYmlsZSBhbmQgZGVza3RvcCBtYWNoaW5lc1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBDT05TVDtcbiIsInZhciBtYXRoID0gcmVxdWlyZSgnLi4vbWF0aCcpLFxuICAgIHV0aWxzID0gcmVxdWlyZSgnLi4vdXRpbHMnKSxcbiAgICBEaXNwbGF5T2JqZWN0ID0gcmVxdWlyZSgnLi9EaXNwbGF5T2JqZWN0JyksXG4gICAgUmVuZGVyVGV4dHVyZSA9IHJlcXVpcmUoJy4uL3RleHR1cmVzL1JlbmRlclRleHR1cmUnKSxcbiAgICBfdGVtcE1hdHJpeCA9IG5ldyBtYXRoLk1hdHJpeCgpO1xuXG4vKipcbiAqIEEgQ29udGFpbmVyIHJlcHJlc2VudHMgYSBjb2xsZWN0aW9uIG9mIGRpc3BsYXkgb2JqZWN0cy5cbiAqIEl0IGlzIHRoZSBiYXNlIGNsYXNzIG9mIGFsbCBkaXNwbGF5IG9iamVjdHMgdGhhdCBhY3QgYXMgYSBjb250YWluZXIgZm9yIG90aGVyIG9iamVjdHMuXG4gKlxuICpgYGBqc1xuICogdmFyIGNvbnRhaW5lciA9IG5ldyBQSVhJLkNvbnRhaW5lcigpO1xuICogY29udGFpbmVyLmFkZENoaWxkKHNwcml0ZSk7XG4gKiBgYGBcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5EaXNwbGF5T2JqZWN0XG4gKiBAbWVtYmVyb2YgUElYSVxuICovXG5mdW5jdGlvbiBDb250YWluZXIoKVxue1xuICAgIERpc3BsYXlPYmplY3QuY2FsbCh0aGlzKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBhcnJheSBvZiBjaGlsZHJlbiBvZiB0aGlzIGNvbnRhaW5lci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuRGlzcGxheU9iamVjdFtdfVxuICAgICAqIEByZWFkb25seVxuICAgICAqL1xuICAgIHRoaXMuY2hpbGRyZW4gPSBbXTtcbn1cblxuLy8gY29uc3RydWN0b3JcbkNvbnRhaW5lci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKERpc3BsYXlPYmplY3QucHJvdG90eXBlKTtcbkNvbnRhaW5lci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBDb250YWluZXI7XG5tb2R1bGUuZXhwb3J0cyA9IENvbnRhaW5lcjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoQ29udGFpbmVyLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFRoZSB3aWR0aCBvZiB0aGUgQ29udGFpbmVyLCBzZXR0aW5nIHRoaXMgd2lsbCBhY3R1YWxseSBtb2RpZnkgdGhlIHNjYWxlIHRvIGFjaGlldmUgdGhlIHZhbHVlIHNldFxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLkNvbnRhaW5lciNcbiAgICAgKi9cbiAgICB3aWR0aDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnNjYWxlLnggKiB0aGlzLmdldExvY2FsQm91bmRzKCkud2lkdGg7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG5cbiAgICAgICAgICAgIHZhciB3aWR0aCA9IHRoaXMuZ2V0TG9jYWxCb3VuZHMoKS53aWR0aDtcblxuICAgICAgICAgICAgaWYgKHdpZHRoICE9PSAwKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHRoaXMuc2NhbGUueCA9IHZhbHVlIC8gd2lkdGg7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdGhpcy5zY2FsZS54ID0gMTtcbiAgICAgICAgICAgIH1cblxuXG4gICAgICAgICAgICB0aGlzLl93aWR0aCA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFRoZSBoZWlnaHQgb2YgdGhlIENvbnRhaW5lciwgc2V0dGluZyB0aGlzIHdpbGwgYWN0dWFsbHkgbW9kaWZ5IHRoZSBzY2FsZSB0byBhY2hpZXZlIHRoZSB2YWx1ZSBzZXRcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5Db250YWluZXIjXG4gICAgICovXG4gICAgaGVpZ2h0OiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuICB0aGlzLnNjYWxlLnkgKiB0aGlzLmdldExvY2FsQm91bmRzKCkuaGVpZ2h0O1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuXG4gICAgICAgICAgICB2YXIgaGVpZ2h0ID0gdGhpcy5nZXRMb2NhbEJvdW5kcygpLmhlaWdodDtcblxuICAgICAgICAgICAgaWYgKGhlaWdodCAhPT0gMClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNjYWxlLnkgPSB2YWx1ZSAvIGhlaWdodCA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdGhpcy5zY2FsZS55ID0gMTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5faGVpZ2h0ID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG59KTtcblxuLyoqXG4gKiBPdmVycmlkYWJsZSBtZXRob2QgdGhhdCBjYW4gYmUgdXNlZCBieSBDb250YWluZXIgc3ViY2xhc3NlcyB3aGVuZXZlciB0aGUgY2hpbGRyZW4gYXJyYXkgaXMgbW9kaWZpZWRcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5Db250YWluZXIucHJvdG90eXBlLm9uQ2hpbGRyZW5DaGFuZ2UgPSBmdW5jdGlvbiAoKSB7fTtcblxuLyoqXG4gKiBBZGRzIGEgY2hpbGQgdG8gdGhlIGNvbnRhaW5lci5cbiAqIFxuICogWW91IGNhbiBhbHNvIGFkZCBtdWx0cGxlIGl0ZW1zIGxpa2Ugc286IG15Q29udGFpbmVyLmFkZENoaWxkKHRoaW5rT25lLCB0aGluZ1R3bywgdGhpbmdUaHJlZSlcbiAqIEBwYXJhbSBjaGlsZCB7UElYSS5EaXNwbGF5T2JqZWN0fSBUaGUgRGlzcGxheU9iamVjdCB0byBhZGQgdG8gdGhlIGNvbnRhaW5lclxuICogQHJldHVybiB7UElYSS5EaXNwbGF5T2JqZWN0fSBUaGUgY2hpbGQgdGhhdCB3YXMgYWRkZWQuXG4gKi9cbkNvbnRhaW5lci5wcm90b3R5cGUuYWRkQ2hpbGQgPSBmdW5jdGlvbiAoY2hpbGQpXG57IFxuICAgIHZhciBhcmd1bWVudHNMZW5ndGggPSBhcmd1bWVudHMubGVuZ3RoO1xuXG4gICAgLy8gaWYgdGhlcmUgaXMgb25seSBvbmUgYXJndW1lbnQgd2UgY2FuIGJ5cGFzcyBsb29waW5nIHRocm91Z2ggdGhlIHRoZW1cbiAgICBpZihhcmd1bWVudHNMZW5ndGggPiAxKVxuICAgIHtcbiAgICAgICAgLy8gbG9vcCB0aHJvdWdoIHRoZSBhcmd1bWVudHMgcHJvcGVydHkgYW5kIGFkZCBhbGwgY2hpbGRyZW5cbiAgICAgICAgLy8gdXNlIGl0IHRoZSByaWdodCB3YXkgKC5sZW5ndGggYW5kIFtpXSkgc28gdGhhdCB0aGlzIGZ1bmN0aW9uIGNhbiBzdGlsbCBiZSBvcHRpbWlzZWQgYnkgSlMgcnVudGltZXNcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcmd1bWVudHNMZW5ndGg7IGkrKylcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5hZGRDaGlsZCggYXJndW1lbnRzW2ldICk7XG4gICAgICAgIH1cbiAgICB9ICAgICBcbiAgICBlbHNlXG4gICAge1xuICAgICAgICAvLyBpZiB0aGUgY2hpbGQgaGFzIGEgcGFyZW50IHRoZW4gbGV0cyByZW1vdmUgaXQgYXMgUGl4aSBvYmplY3RzIGNhbiBvbmx5IGV4aXN0IGluIG9uZSBwbGFjZVxuICAgICAgICBpZiAoY2hpbGQucGFyZW50KVxuICAgICAgICB7XG4gICAgICAgICAgICBjaGlsZC5wYXJlbnQucmVtb3ZlQ2hpbGQoY2hpbGQpO1xuICAgICAgICB9XG5cbiAgICAgICAgY2hpbGQucGFyZW50ID0gdGhpcztcbiAgICAgICAgXG4gICAgICAgIHRoaXMuY2hpbGRyZW4ucHVzaChjaGlsZCk7XG5cbiAgICAgICAgLy8gVE9ETyAtIGxldHMgZWl0aGVyIGRvIGFsbCBjYWxsYmFja3Mgb3IgYWxsIGV2ZW50cy4uIG5vdCBib3RoIVxuICAgICAgICB0aGlzLm9uQ2hpbGRyZW5DaGFuZ2UodGhpcy5jaGlsZHJlbi5sZW5ndGgtMSk7XG4gICAgICAgIGNoaWxkLmVtaXQoJ2FkZGVkJywgdGhpcyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGNoaWxkO1xufTtcblxuLyoqXG4gKiBBZGRzIGEgY2hpbGQgdG8gdGhlIGNvbnRhaW5lciBhdCBhIHNwZWNpZmllZCBpbmRleC4gSWYgdGhlIGluZGV4IGlzIG91dCBvZiBib3VuZHMgYW4gZXJyb3Igd2lsbCBiZSB0aHJvd25cbiAqXG4gKiBAcGFyYW0gY2hpbGQge1BJWEkuRGlzcGxheU9iamVjdH0gVGhlIGNoaWxkIHRvIGFkZFxuICogQHBhcmFtIGluZGV4IHtudW1iZXJ9IFRoZSBpbmRleCB0byBwbGFjZSB0aGUgY2hpbGQgaW5cbiAqIEByZXR1cm4ge1BJWEkuRGlzcGxheU9iamVjdH0gVGhlIGNoaWxkIHRoYXQgd2FzIGFkZGVkLlxuICovXG5Db250YWluZXIucHJvdG90eXBlLmFkZENoaWxkQXQgPSBmdW5jdGlvbiAoY2hpbGQsIGluZGV4KVxue1xuICAgIGlmIChpbmRleCA+PSAwICYmIGluZGV4IDw9IHRoaXMuY2hpbGRyZW4ubGVuZ3RoKVxuICAgIHtcbiAgICAgICAgaWYgKGNoaWxkLnBhcmVudClcbiAgICAgICAge1xuICAgICAgICAgICAgY2hpbGQucGFyZW50LnJlbW92ZUNoaWxkKGNoaWxkKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNoaWxkLnBhcmVudCA9IHRoaXM7XG5cbiAgICAgICAgdGhpcy5jaGlsZHJlbi5zcGxpY2UoaW5kZXgsIDAsIGNoaWxkKTtcblxuICAgICAgICAvLyBUT0RPIC0gbGV0cyBlaXRoZXIgZG8gYWxsIGNhbGxiYWNrcyBvciBhbGwgZXZlbnRzLi4gbm90IGJvdGghXG4gICAgICAgIHRoaXMub25DaGlsZHJlbkNoYW5nZShpbmRleCk7XG4gICAgICAgIGNoaWxkLmVtaXQoJ2FkZGVkJywgdGhpcyk7XG5cbiAgICAgICAgcmV0dXJuIGNoaWxkO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoY2hpbGQgKyAnYWRkQ2hpbGRBdDogVGhlIGluZGV4ICcrIGluZGV4ICsnIHN1cHBsaWVkIGlzIG91dCBvZiBib3VuZHMgJyArIHRoaXMuY2hpbGRyZW4ubGVuZ3RoKTtcbiAgICB9XG59O1xuXG4vKipcbiAqIFN3YXBzIHRoZSBwb3NpdGlvbiBvZiAyIERpc3BsYXkgT2JqZWN0cyB3aXRoaW4gdGhpcyBjb250YWluZXIuXG4gKlxuICogQHBhcmFtIGNoaWxkIHtQSVhJLkRpc3BsYXlPYmplY3R9XG4gKiBAcGFyYW0gY2hpbGQyIHtQSVhJLkRpc3BsYXlPYmplY3R9XG4gKi9cbkNvbnRhaW5lci5wcm90b3R5cGUuc3dhcENoaWxkcmVuID0gZnVuY3Rpb24gKGNoaWxkLCBjaGlsZDIpXG57XG4gICAgaWYgKGNoaWxkID09PSBjaGlsZDIpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFyIGluZGV4MSA9IHRoaXMuZ2V0Q2hpbGRJbmRleChjaGlsZCk7XG4gICAgdmFyIGluZGV4MiA9IHRoaXMuZ2V0Q2hpbGRJbmRleChjaGlsZDIpO1xuXG4gICAgaWYgKGluZGV4MSA8IDAgfHwgaW5kZXgyIDwgMClcbiAgICB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignc3dhcENoaWxkcmVuOiBCb3RoIHRoZSBzdXBwbGllZCBEaXNwbGF5T2JqZWN0cyBtdXN0IGJlIGNoaWxkcmVuIG9mIHRoZSBjYWxsZXIuJyk7XG4gICAgfVxuXG4gICAgdGhpcy5jaGlsZHJlbltpbmRleDFdID0gY2hpbGQyO1xuICAgIHRoaXMuY2hpbGRyZW5baW5kZXgyXSA9IGNoaWxkO1xuICAgIHRoaXMub25DaGlsZHJlbkNoYW5nZShpbmRleDEgPCBpbmRleDIgPyBpbmRleDEgOiBpbmRleDIpO1xufTtcblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBpbmRleCBwb3NpdGlvbiBvZiBhIGNoaWxkIERpc3BsYXlPYmplY3QgaW5zdGFuY2VcbiAqXG4gKiBAcGFyYW0gY2hpbGQge1BJWEkuRGlzcGxheU9iamVjdH0gVGhlIERpc3BsYXlPYmplY3QgaW5zdGFuY2UgdG8gaWRlbnRpZnlcbiAqIEByZXR1cm4ge251bWJlcn0gVGhlIGluZGV4IHBvc2l0aW9uIG9mIHRoZSBjaGlsZCBkaXNwbGF5IG9iamVjdCB0byBpZGVudGlmeVxuICovXG5Db250YWluZXIucHJvdG90eXBlLmdldENoaWxkSW5kZXggPSBmdW5jdGlvbiAoY2hpbGQpXG57XG4gICAgdmFyIGluZGV4ID0gdGhpcy5jaGlsZHJlbi5pbmRleE9mKGNoaWxkKTtcblxuICAgIGlmIChpbmRleCA9PT0gLTEpXG4gICAge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RoZSBzdXBwbGllZCBEaXNwbGF5T2JqZWN0IG11c3QgYmUgYSBjaGlsZCBvZiB0aGUgY2FsbGVyJyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGluZGV4O1xufTtcblxuLyoqXG4gKiBDaGFuZ2VzIHRoZSBwb3NpdGlvbiBvZiBhbiBleGlzdGluZyBjaGlsZCBpbiB0aGUgZGlzcGxheSBvYmplY3QgY29udGFpbmVyXG4gKlxuICogQHBhcmFtIGNoaWxkIHtQSVhJLkRpc3BsYXlPYmplY3R9IFRoZSBjaGlsZCBEaXNwbGF5T2JqZWN0IGluc3RhbmNlIGZvciB3aGljaCB5b3Ugd2FudCB0byBjaGFuZ2UgdGhlIGluZGV4IG51bWJlclxuICogQHBhcmFtIGluZGV4IHtudW1iZXJ9IFRoZSByZXN1bHRpbmcgaW5kZXggbnVtYmVyIGZvciB0aGUgY2hpbGQgZGlzcGxheSBvYmplY3RcbiAqL1xuQ29udGFpbmVyLnByb3RvdHlwZS5zZXRDaGlsZEluZGV4ID0gZnVuY3Rpb24gKGNoaWxkLCBpbmRleClcbntcbiAgICBpZiAoaW5kZXggPCAwIHx8IGluZGV4ID49IHRoaXMuY2hpbGRyZW4ubGVuZ3RoKVxuICAgIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdUaGUgc3VwcGxpZWQgaW5kZXggaXMgb3V0IG9mIGJvdW5kcycpO1xuICAgIH1cblxuICAgIHZhciBjdXJyZW50SW5kZXggPSB0aGlzLmdldENoaWxkSW5kZXgoY2hpbGQpO1xuXG4gICAgdXRpbHMucmVtb3ZlSXRlbXModGhpcy5jaGlsZHJlbiwgY3VycmVudEluZGV4LCAxKTsgLy8gcmVtb3ZlIGZyb20gb2xkIHBvc2l0aW9uXG4gICAgdGhpcy5jaGlsZHJlbi5zcGxpY2UoaW5kZXgsIDAsIGNoaWxkKTsgLy9hZGQgYXQgbmV3IHBvc2l0aW9uXG4gICAgdGhpcy5vbkNoaWxkcmVuQ2hhbmdlKGluZGV4KTtcbn07XG5cbi8qKlxuICogUmV0dXJucyB0aGUgY2hpbGQgYXQgdGhlIHNwZWNpZmllZCBpbmRleFxuICpcbiAqIEBwYXJhbSBpbmRleCB7bnVtYmVyfSBUaGUgaW5kZXggdG8gZ2V0IHRoZSBjaGlsZCBhdFxuICogQHJldHVybiB7UElYSS5EaXNwbGF5T2JqZWN0fSBUaGUgY2hpbGQgYXQgdGhlIGdpdmVuIGluZGV4LCBpZiBhbnkuXG4gKi9cbkNvbnRhaW5lci5wcm90b3R5cGUuZ2V0Q2hpbGRBdCA9IGZ1bmN0aW9uIChpbmRleClcbntcbiAgICBpZiAoaW5kZXggPCAwIHx8IGluZGV4ID49IHRoaXMuY2hpbGRyZW4ubGVuZ3RoKVxuICAgIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdnZXRDaGlsZEF0OiBTdXBwbGllZCBpbmRleCAnICsgaW5kZXggKyAnIGRvZXMgbm90IGV4aXN0IGluIHRoZSBjaGlsZCBsaXN0LCBvciB0aGUgc3VwcGxpZWQgRGlzcGxheU9iamVjdCBpcyBub3QgYSBjaGlsZCBvZiB0aGUgY2FsbGVyJyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuY2hpbGRyZW5baW5kZXhdO1xufTtcblxuLyoqXG4gKiBSZW1vdmVzIGEgY2hpbGQgZnJvbSB0aGUgY29udGFpbmVyLlxuICpcbiAqIEBwYXJhbSBjaGlsZCB7UElYSS5EaXNwbGF5T2JqZWN0fSBUaGUgRGlzcGxheU9iamVjdCB0byByZW1vdmVcbiAqIEByZXR1cm4ge1BJWEkuRGlzcGxheU9iamVjdH0gVGhlIGNoaWxkIHRoYXQgd2FzIHJlbW92ZWQuXG4gKi9cbkNvbnRhaW5lci5wcm90b3R5cGUucmVtb3ZlQ2hpbGQgPSBmdW5jdGlvbiAoY2hpbGQpXG57XG4gICAgdmFyIGFyZ3VtZW50c0xlbmd0aCA9IGFyZ3VtZW50cy5sZW5ndGg7XG5cbiAgICAvLyBpZiB0aGVyZSBpcyBvbmx5IG9uZSBhcmd1bWVudCB3ZSBjYW4gYnlwYXNzIGxvb3BpbmcgdGhyb3VnaCB0aGUgdGhlbVxuICAgIGlmKGFyZ3VtZW50c0xlbmd0aCA+IDEpXG4gICAge1xuICAgICAgICAvLyBsb29wIHRocm91Z2ggdGhlIGFyZ3VtZW50cyBwcm9wZXJ0eSBhbmQgYWRkIGFsbCBjaGlsZHJlblxuICAgICAgICAvLyB1c2UgaXQgdGhlIHJpZ2h0IHdheSAoLmxlbmd0aCBhbmQgW2ldKSBzbyB0aGF0IHRoaXMgZnVuY3Rpb24gY2FuIHN0aWxsIGJlIG9wdGltaXNlZCBieSBKUyBydW50aW1lc1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFyZ3VtZW50c0xlbmd0aDsgaSsrKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnJlbW92ZUNoaWxkKCBhcmd1bWVudHNbaV0gKTtcbiAgICAgICAgfVxuICAgIH0gICAgIFxuICAgIGVsc2VcbiAgICB7ICAgXG4gICAgICAgIHZhciBpbmRleCA9IHRoaXMuY2hpbGRyZW4uaW5kZXhPZihjaGlsZCk7XG5cbiAgICAgICAgaWYgKGluZGV4ID09PSAtMSlcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY2hpbGQucGFyZW50ID0gbnVsbDtcbiAgICAgICAgdXRpbHMucmVtb3ZlSXRlbXModGhpcy5jaGlsZHJlbiwgaW5kZXgsIDEpO1xuXG4gICAgICAgIC8vIFRPRE8gLSBsZXRzIGVpdGhlciBkbyBhbGwgY2FsbGJhY2tzIG9yIGFsbCBldmVudHMuLiBub3QgYm90aCFcbiAgICAgICAgdGhpcy5vbkNoaWxkcmVuQ2hhbmdlKGluZGV4KTtcbiAgICAgICAgY2hpbGQuZW1pdCgncmVtb3ZlZCcsIHRoaXMpO1xuICAgIH1cblxuICAgIHJldHVybiBjaGlsZDtcbn07XG5cbi8qKlxuICogUmVtb3ZlcyBhIGNoaWxkIGZyb20gdGhlIHNwZWNpZmllZCBpbmRleCBwb3NpdGlvbi5cbiAqXG4gKiBAcGFyYW0gaW5kZXgge251bWJlcn0gVGhlIGluZGV4IHRvIGdldCB0aGUgY2hpbGQgZnJvbVxuICogQHJldHVybiB7UElYSS5EaXNwbGF5T2JqZWN0fSBUaGUgY2hpbGQgdGhhdCB3YXMgcmVtb3ZlZC5cbiAqL1xuQ29udGFpbmVyLnByb3RvdHlwZS5yZW1vdmVDaGlsZEF0ID0gZnVuY3Rpb24gKGluZGV4KVxue1xuICAgIHZhciBjaGlsZCA9IHRoaXMuZ2V0Q2hpbGRBdChpbmRleCk7XG5cbiAgICBjaGlsZC5wYXJlbnQgPSBudWxsO1xuICAgIHV0aWxzLnJlbW92ZUl0ZW1zKHRoaXMuY2hpbGRyZW4sIGluZGV4LCAxKTtcblxuICAgIC8vIFRPRE8gLSBsZXRzIGVpdGhlciBkbyBhbGwgY2FsbGJhY2tzIG9yIGFsbCBldmVudHMuLiBub3QgYm90aCFcbiAgICB0aGlzLm9uQ2hpbGRyZW5DaGFuZ2UoaW5kZXgpO1xuICAgIGNoaWxkLmVtaXQoJ3JlbW92ZWQnLCB0aGlzKTtcblxuICAgIHJldHVybiBjaGlsZDtcbn07XG5cbi8qKlxuICogUmVtb3ZlcyBhbGwgY2hpbGRyZW4gZnJvbSB0aGlzIGNvbnRhaW5lciB0aGF0IGFyZSB3aXRoaW4gdGhlIGJlZ2luIGFuZCBlbmQgaW5kZXhlcy5cbiAqXG4gKiBAcGFyYW0gYmVnaW5JbmRleCB7bnVtYmVyfSBUaGUgYmVnaW5uaW5nIHBvc2l0aW9uLiBEZWZhdWx0IHZhbHVlIGlzIDAuXG4gKiBAcGFyYW0gZW5kSW5kZXgge251bWJlcn0gVGhlIGVuZGluZyBwb3NpdGlvbi4gRGVmYXVsdCB2YWx1ZSBpcyBzaXplIG9mIHRoZSBjb250YWluZXIuXG4gKi9cbkNvbnRhaW5lci5wcm90b3R5cGUucmVtb3ZlQ2hpbGRyZW4gPSBmdW5jdGlvbiAoYmVnaW5JbmRleCwgZW5kSW5kZXgpXG57XG4gICAgdmFyIGJlZ2luID0gYmVnaW5JbmRleCB8fCAwO1xuICAgIHZhciBlbmQgPSB0eXBlb2YgZW5kSW5kZXggPT09ICdudW1iZXInID8gZW5kSW5kZXggOiB0aGlzLmNoaWxkcmVuLmxlbmd0aDtcbiAgICB2YXIgcmFuZ2UgPSBlbmQgLSBiZWdpbjtcbiAgICB2YXIgcmVtb3ZlZCwgaTtcblxuICAgIGlmIChyYW5nZSA+IDAgJiYgcmFuZ2UgPD0gZW5kKVxuICAgIHtcbiAgICAgICAgcmVtb3ZlZCA9IHRoaXMuY2hpbGRyZW4uc3BsaWNlKGJlZ2luLCByYW5nZSk7XG5cbiAgICAgICAgZm9yIChpID0gMDsgaSA8IHJlbW92ZWQubGVuZ3RoOyArK2kpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJlbW92ZWRbaV0ucGFyZW50ID0gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMub25DaGlsZHJlbkNoYW5nZShiZWdpbkluZGV4KTtcblxuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgcmVtb3ZlZC5sZW5ndGg7ICsraSlcbiAgICAgICAge1xuICAgICAgICAgICAgcmVtb3ZlZFtpXS5lbWl0KCdyZW1vdmVkJywgdGhpcyk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gcmVtb3ZlZDtcbiAgICB9XG4gICAgZWxzZSBpZiAocmFuZ2UgPT09IDAgJiYgdGhpcy5jaGlsZHJlbi5sZW5ndGggPT09IDApXG4gICAge1xuICAgICAgICByZXR1cm4gW107XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdyZW1vdmVDaGlsZHJlbjogbnVtZXJpYyB2YWx1ZXMgYXJlIG91dHNpZGUgdGhlIGFjY2VwdGFibGUgcmFuZ2UuJyk7XG4gICAgfVxufTtcblxuLyoqXG4gKiBVc2VmdWwgZnVuY3Rpb24gdGhhdCByZXR1cm5zIGEgdGV4dHVyZSBvZiB0aGUgZGlzcGxheSBvYmplY3QgdGhhdCBjYW4gdGhlbiBiZSB1c2VkIHRvIGNyZWF0ZSBzcHJpdGVzXG4gKiBUaGlzIGNhbiBiZSBxdWl0ZSB1c2VmdWwgaWYgeW91ciBkaXNwbGF5T2JqZWN0IGlzIHN0YXRpYyAvIGNvbXBsaWNhdGVkIGFuZCBuZWVkcyB0byBiZSByZXVzZWQgbXVsdGlwbGUgdGltZXMuXG4gKlxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLkNhbnZhc1JlbmRlcmVyfFBJWEkuV2ViR0xSZW5kZXJlcn0gVGhlIHJlbmRlcmVyIHVzZWQgdG8gZ2VuZXJhdGUgdGhlIHRleHR1cmUuXG4gKiBAcGFyYW0gcmVzb2x1dGlvbiB7bnVtYmVyfSBUaGUgcmVzb2x1dGlvbiBvZiB0aGUgdGV4dHVyZSBiZWluZyBnZW5lcmF0ZWRcbiAqIEBwYXJhbSBzY2FsZU1vZGUge251bWJlcn0gU2VlIHtAbGluayBQSVhJLlNDQUxFX01PREVTfSBmb3IgcG9zc2libGUgdmFsdWVzXG4gKiBAcmV0dXJuIHtQSVhJLlRleHR1cmV9IGEgdGV4dHVyZSBvZiB0aGUgZGlzcGxheSBvYmplY3RcbiAqL1xuQ29udGFpbmVyLnByb3RvdHlwZS5nZW5lcmF0ZVRleHR1cmUgPSBmdW5jdGlvbiAocmVuZGVyZXIsIHJlc29sdXRpb24sIHNjYWxlTW9kZSlcbntcbiAgICB2YXIgYm91bmRzID0gdGhpcy5nZXRMb2NhbEJvdW5kcygpO1xuXG4gICAgdmFyIHJlbmRlclRleHR1cmUgPSBuZXcgUmVuZGVyVGV4dHVyZShyZW5kZXJlciwgYm91bmRzLndpZHRoIHwgMCwgYm91bmRzLmhlaWdodCB8IDAsIHNjYWxlTW9kZSwgcmVzb2x1dGlvbik7XG5cbiAgICBfdGVtcE1hdHJpeC50eCA9IC1ib3VuZHMueDtcbiAgICBfdGVtcE1hdHJpeC50eSA9IC1ib3VuZHMueTtcblxuICAgIHJlbmRlclRleHR1cmUucmVuZGVyKHRoaXMsIF90ZW1wTWF0cml4KTtcblxuICAgIHJldHVybiByZW5kZXJUZXh0dXJlO1xufTtcblxuLypcbiAqIFVwZGF0ZXMgdGhlIHRyYW5zZm9ybSBvbiBhbGwgY2hpbGRyZW4gb2YgdGhpcyBjb250YWluZXIgZm9yIHJlbmRlcmluZ1xuICpcbiAqIEBwcml2YXRlXG4gKi9cbkNvbnRhaW5lci5wcm90b3R5cGUudXBkYXRlVHJhbnNmb3JtID0gZnVuY3Rpb24gKClcbntcbiAgICBpZiAoIXRoaXMudmlzaWJsZSlcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLmRpc3BsYXlPYmplY3RVcGRhdGVUcmFuc2Zvcm0oKTtcblxuICAgIGZvciAodmFyIGkgPSAwLCBqID0gdGhpcy5jaGlsZHJlbi5sZW5ndGg7IGkgPCBqOyArK2kpXG4gICAge1xuICAgICAgICB0aGlzLmNoaWxkcmVuW2ldLnVwZGF0ZVRyYW5zZm9ybSgpO1xuICAgIH1cblxuICAgIHRoaXMuZGlydHlUcmFuc2Zvcm0gPSBmYWxzZTtcbn07XG5cbi8vIHBlcmZvcm1hbmNlIGluY3JlYXNlIHRvIGF2b2lkIHVzaW5nIGNhbGwuLiAoMTB4IGZhc3RlcilcbkNvbnRhaW5lci5wcm90b3R5cGUuY29udGFpbmVyVXBkYXRlVHJhbnNmb3JtID0gQ29udGFpbmVyLnByb3RvdHlwZS51cGRhdGVUcmFuc2Zvcm07XG5cbi8qKlxuICogUmV0cmlldmVzIHRoZSBib3VuZHMgb2YgdGhlIENvbnRhaW5lciBhcyBhIHJlY3RhbmdsZS4gVGhlIGJvdW5kcyBjYWxjdWxhdGlvbiB0YWtlcyBhbGwgdmlzaWJsZSBjaGlsZHJlbiBpbnRvIGNvbnNpZGVyYXRpb24uXG4gKlxuICogQHJldHVybiB7UElYSS5SZWN0YW5nbGV9IFRoZSByZWN0YW5ndWxhciBib3VuZGluZyBhcmVhXG4gKi9cbkNvbnRhaW5lci5wcm90b3R5cGUuZ2V0Qm91bmRzID0gZnVuY3Rpb24gKClcbntcbiAgICBpZighdGhpcy5fY3VycmVudEJvdW5kcylcbiAgICB7XG5cbiAgICAgICAgaWYgKHRoaXMuY2hpbGRyZW4ubGVuZ3RoID09PSAwKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gbWF0aC5SZWN0YW5nbGUuRU1QVFk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBUT0RPIHRoZSBib3VuZHMgaGF2ZSBhbHJlYWR5IGJlZW4gY2FsY3VsYXRlZCB0aGlzIHJlbmRlciBzZXNzaW9uIHNvIHJldHVybiB3aGF0IHdlIGhhdmVcblxuICAgICAgICB2YXIgbWluWCA9IEluZmluaXR5O1xuICAgICAgICB2YXIgbWluWSA9IEluZmluaXR5O1xuXG4gICAgICAgIHZhciBtYXhYID0gLUluZmluaXR5O1xuICAgICAgICB2YXIgbWF4WSA9IC1JbmZpbml0eTtcblxuICAgICAgICB2YXIgY2hpbGRCb3VuZHM7XG4gICAgICAgIHZhciBjaGlsZE1heFg7XG4gICAgICAgIHZhciBjaGlsZE1heFk7XG5cbiAgICAgICAgdmFyIGNoaWxkVmlzaWJsZSA9IGZhbHNlO1xuXG4gICAgICAgIGZvciAodmFyIGkgPSAwLCBqID0gdGhpcy5jaGlsZHJlbi5sZW5ndGg7IGkgPCBqOyArK2kpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHZhciBjaGlsZCA9IHRoaXMuY2hpbGRyZW5baV07XG5cbiAgICAgICAgICAgIGlmICghY2hpbGQudmlzaWJsZSlcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY2hpbGRWaXNpYmxlID0gdHJ1ZTtcblxuICAgICAgICAgICAgY2hpbGRCb3VuZHMgPSB0aGlzLmNoaWxkcmVuW2ldLmdldEJvdW5kcygpO1xuXG4gICAgICAgICAgICBtaW5YID0gbWluWCA8IGNoaWxkQm91bmRzLnggPyBtaW5YIDogY2hpbGRCb3VuZHMueDtcbiAgICAgICAgICAgIG1pblkgPSBtaW5ZIDwgY2hpbGRCb3VuZHMueSA/IG1pblkgOiBjaGlsZEJvdW5kcy55O1xuXG4gICAgICAgICAgICBjaGlsZE1heFggPSBjaGlsZEJvdW5kcy53aWR0aCArIGNoaWxkQm91bmRzLng7XG4gICAgICAgICAgICBjaGlsZE1heFkgPSBjaGlsZEJvdW5kcy5oZWlnaHQgKyBjaGlsZEJvdW5kcy55O1xuXG4gICAgICAgICAgICBtYXhYID0gbWF4WCA+IGNoaWxkTWF4WCA/IG1heFggOiBjaGlsZE1heFg7XG4gICAgICAgICAgICBtYXhZID0gbWF4WSA+IGNoaWxkTWF4WSA/IG1heFkgOiBjaGlsZE1heFk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIWNoaWxkVmlzaWJsZSlcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIG1hdGguUmVjdGFuZ2xlLkVNUFRZO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGJvdW5kcyA9IHRoaXMuX2JvdW5kcztcblxuICAgICAgICBib3VuZHMueCA9IG1pblg7XG4gICAgICAgIGJvdW5kcy55ID0gbWluWTtcbiAgICAgICAgYm91bmRzLndpZHRoID0gbWF4WCAtIG1pblg7XG4gICAgICAgIGJvdW5kcy5oZWlnaHQgPSBtYXhZIC0gbWluWTtcblxuICAgICAgICB0aGlzLl9jdXJyZW50Qm91bmRzID0gYm91bmRzO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLl9jdXJyZW50Qm91bmRzO1xufTtcblxuQ29udGFpbmVyLnByb3RvdHlwZS5jb250YWluZXJHZXRCb3VuZHMgPSBDb250YWluZXIucHJvdG90eXBlLmdldEJvdW5kcztcblxuLyoqXG4gKiBSZXRyaWV2ZXMgdGhlIG5vbi1nbG9iYWwgbG9jYWwgYm91bmRzIG9mIHRoZSBDb250YWluZXIgYXMgYSByZWN0YW5nbGUuXG4gKiBUaGUgY2FsY3VsYXRpb24gdGFrZXMgYWxsIHZpc2libGUgY2hpbGRyZW4gaW50byBjb25zaWRlcmF0aW9uLlxuICpcbiAqIEByZXR1cm4ge1BJWEkuUmVjdGFuZ2xlfSBUaGUgcmVjdGFuZ3VsYXIgYm91bmRpbmcgYXJlYVxuICovXG5Db250YWluZXIucHJvdG90eXBlLmdldExvY2FsQm91bmRzID0gZnVuY3Rpb24gKClcbntcbiAgICB2YXIgbWF0cml4Q2FjaGUgPSB0aGlzLndvcmxkVHJhbnNmb3JtO1xuXG4gICAgdGhpcy53b3JsZFRyYW5zZm9ybSA9IG1hdGguTWF0cml4LklERU5USVRZO1xuXG4gICAgZm9yICh2YXIgaSA9IDAsIGogPSB0aGlzLmNoaWxkcmVuLmxlbmd0aDsgaSA8IGo7ICsraSlcbiAgICB7XG4gICAgICAgIHRoaXMuY2hpbGRyZW5baV0udXBkYXRlVHJhbnNmb3JtKCk7XG4gICAgfVxuXG4gICAgdGhpcy53b3JsZFRyYW5zZm9ybSA9IG1hdHJpeENhY2hlO1xuXG4gICAgdGhpcy5fY3VycmVudEJvdW5kcyA9IG51bGw7XG5cbiAgICByZXR1cm4gdGhpcy5nZXRCb3VuZHMoIG1hdGguTWF0cml4LklERU5USVRZICk7XG59O1xuXG4vKipcbiAqIFJlbmRlcnMgdGhlIG9iamVjdCB1c2luZyB0aGUgV2ViR0wgcmVuZGVyZXJcbiAqXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcn0gVGhlIHJlbmRlcmVyXG4gKi9cbkNvbnRhaW5lci5wcm90b3R5cGUucmVuZGVyV2ViR0wgPSBmdW5jdGlvbiAocmVuZGVyZXIpXG57XG5cbiAgICAvLyBpZiB0aGUgb2JqZWN0IGlzIG5vdCB2aXNpYmxlIG9yIHRoZSBhbHBoYSBpcyAwIHRoZW4gbm8gbmVlZCB0byByZW5kZXIgdGhpcyBlbGVtZW50XG4gICAgaWYgKCF0aGlzLnZpc2libGUgfHwgdGhpcy53b3JsZEFscGhhIDw9IDAgfHwgIXRoaXMucmVuZGVyYWJsZSlcbiAgICB7XG4gICAgICBcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHZhciBpLCBqO1xuXG4gICAgLy8gZG8gYSBxdWljayBjaGVjayB0byBzZWUgaWYgdGhpcyBlbGVtZW50IGhhcyBhIG1hc2sgb3IgYSBmaWx0ZXIuXG4gICAgaWYgKHRoaXMuX21hc2sgfHwgdGhpcy5fZmlsdGVycylcbiAgICB7XG4gICAgICAgIHJlbmRlcmVyLmN1cnJlbnRSZW5kZXJlci5mbHVzaCgpO1xuXG4gICAgICAgIC8vIHB1c2ggZmlsdGVyIGZpcnN0IGFzIHdlIG5lZWQgdG8gZW5zdXJlIHRoZSBzdGVuY2lsIGJ1ZmZlciBpcyBjb3JyZWN0IGZvciBhbnkgbWFza2luZ1xuICAgICAgICBpZiAodGhpcy5fZmlsdGVycyAmJiB0aGlzLl9maWx0ZXJzLmxlbmd0aClcbiAgICAgICAge1xuICAgICAgICAgICAgcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5wdXNoRmlsdGVyKHRoaXMsIHRoaXMuX2ZpbHRlcnMpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuX21hc2spXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJlbmRlcmVyLm1hc2tNYW5hZ2VyLnB1c2hNYXNrKHRoaXMsIHRoaXMuX21hc2spO1xuICAgICAgICB9XG5cbiAgICAgICAgcmVuZGVyZXIuY3VycmVudFJlbmRlcmVyLnN0YXJ0KCk7XG5cbiAgICAgICAgLy8gYWRkIHRoaXMgb2JqZWN0IHRvIHRoZSBiYXRjaCwgb25seSByZW5kZXJlZCBpZiBpdCBoYXMgYSB0ZXh0dXJlLlxuICAgICAgICB0aGlzLl9yZW5kZXJXZWJHTChyZW5kZXJlcik7XG5cbiAgICAgICAgLy8gbm93IGxvb3AgdGhyb3VnaCB0aGUgY2hpbGRyZW4gYW5kIG1ha2Ugc3VyZSB0aGV5IGdldCByZW5kZXJlZFxuICAgICAgICBmb3IgKGkgPSAwLCBqID0gdGhpcy5jaGlsZHJlbi5sZW5ndGg7IGkgPCBqOyBpKyspXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuY2hpbGRyZW5baV0ucmVuZGVyV2ViR0wocmVuZGVyZXIpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmVuZGVyZXIuY3VycmVudFJlbmRlcmVyLmZsdXNoKCk7XG5cbiAgICAgICAgaWYgKHRoaXMuX21hc2spXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJlbmRlcmVyLm1hc2tNYW5hZ2VyLnBvcE1hc2sodGhpcywgdGhpcy5fbWFzayk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5fZmlsdGVycylcbiAgICAgICAge1xuICAgICAgICAgICAgcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5wb3BGaWx0ZXIoKTtcblxuICAgICAgICB9XG4gICAgICAgIHJlbmRlcmVyLmN1cnJlbnRSZW5kZXJlci5zdGFydCgpO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICB0aGlzLl9yZW5kZXJXZWJHTChyZW5kZXJlcik7XG5cbiAgICAgICAgLy8gc2ltcGxlIHJlbmRlciBjaGlsZHJlbiFcbiAgICAgICAgZm9yIChpID0gMCwgaiA9IHRoaXMuY2hpbGRyZW4ubGVuZ3RoOyBpIDwgajsgKytpKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmNoaWxkcmVuW2ldLnJlbmRlcldlYkdMKHJlbmRlcmVyKTtcbiAgICAgICAgfVxuICAgIH1cbn07XG5cbi8qKlxuICogVG8gYmUgb3ZlcnJpZGRlbiBieSB0aGUgc3ViY2xhc3NcbiAqXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcn0gVGhlIHJlbmRlcmVyXG4gKiBAcHJpdmF0ZVxuICovXG5Db250YWluZXIucHJvdG90eXBlLl9yZW5kZXJXZWJHTCA9IGZ1bmN0aW9uIChyZW5kZXJlcikgLy8ganNoaW50IHVudXNlZDpmYWxzZVxue1xuICAgIC8vIHRoaXMgaXMgd2hlcmUgY29udGVudCBpdHNlbGYgZ2V0cyByZW5kZXJlZC4uLlxufTtcblxuLyoqXG4gKiBUbyBiZSBvdmVycmlkZGVuIGJ5IHRoZSBzdWJjbGFzc1xuICpcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5DYW52YXNSZW5kZXJlcn0gVGhlIHJlbmRlcmVyXG4gKiBAcHJpdmF0ZVxuICovXG5Db250YWluZXIucHJvdG90eXBlLl9yZW5kZXJDYW52YXMgPSBmdW5jdGlvbiAocmVuZGVyZXIpIC8vIGpzaGludCB1bnVzZWQ6ZmFsc2VcbntcbiAgICAvLyB0aGlzIGlzIHdoZXJlIGNvbnRlbnQgaXRzZWxmIGdldHMgcmVuZGVyZWQuLi5cbn07XG5cblxuLyoqXG4gKiBSZW5kZXJzIHRoZSBvYmplY3QgdXNpbmcgdGhlIENhbnZhcyByZW5kZXJlclxuICpcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5DYW52YXNSZW5kZXJlcn0gVGhlIHJlbmRlcmVyXG4gKi9cbkNvbnRhaW5lci5wcm90b3R5cGUucmVuZGVyQ2FudmFzID0gZnVuY3Rpb24gKHJlbmRlcmVyKVxue1xuICAgIC8vIGlmIG5vdCB2aXNpYmxlIG9yIHRoZSBhbHBoYSBpcyAwIHRoZW4gbm8gbmVlZCB0byByZW5kZXIgdGhpc1xuICAgIGlmICghdGhpcy52aXNpYmxlIHx8IHRoaXMuYWxwaGEgPD0gMCB8fCAhdGhpcy5yZW5kZXJhYmxlKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICh0aGlzLl9tYXNrKVxuICAgIHtcbiAgICAgICAgcmVuZGVyZXIubWFza01hbmFnZXIucHVzaE1hc2sodGhpcy5fbWFzaywgcmVuZGVyZXIpO1xuICAgIH1cblxuICAgIHRoaXMuX3JlbmRlckNhbnZhcyhyZW5kZXJlcik7XG4gICAgZm9yICh2YXIgaSA9IDAsIGogPSB0aGlzLmNoaWxkcmVuLmxlbmd0aDsgaSA8IGo7ICsraSlcbiAgICB7XG4gICAgICAgIHRoaXMuY2hpbGRyZW5baV0ucmVuZGVyQ2FudmFzKHJlbmRlcmVyKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5fbWFzaylcbiAgICB7XG4gICAgICAgIHJlbmRlcmVyLm1hc2tNYW5hZ2VyLnBvcE1hc2socmVuZGVyZXIpO1xuICAgIH1cbn07XG5cbi8qKlxuICogRGVzdHJveXMgdGhlIGNvbnRhaW5lclxuICogQHBhcmFtIFtkZXN0cm95Q2hpbGRyZW49ZmFsc2VdIHtib29sZWFufSBpZiBzZXQgdG8gdHJ1ZSwgYWxsIHRoZSBjaGlsZHJlbiB3aWxsIGhhdmUgdGhlaXIgZGVzdHJveSBtZXRob2QgY2FsbGVkIGFzIHdlbGxcbiAqL1xuQ29udGFpbmVyLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKGRlc3Ryb3lDaGlsZHJlbilcbntcbiAgICBEaXNwbGF5T2JqZWN0LnByb3RvdHlwZS5kZXN0cm95LmNhbGwodGhpcyk7XG5cbiAgICBpZiAoZGVzdHJveUNoaWxkcmVuKVxuICAgIHtcbiAgICAgICAgZm9yICh2YXIgaSA9IDAsIGogPSB0aGlzLmNoaWxkcmVuLmxlbmd0aDsgaSA8IGo7ICsraSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5jaGlsZHJlbltpXS5kZXN0cm95KGRlc3Ryb3lDaGlsZHJlbik7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLnJlbW92ZUNoaWxkcmVuKCk7XG5cbiAgICB0aGlzLmNoaWxkcmVuID0gbnVsbDtcbn07XG4iLCJ2YXIgbWF0aCA9IHJlcXVpcmUoJy4uL21hdGgnKSxcbiAgICBSZW5kZXJUZXh0dXJlID0gcmVxdWlyZSgnLi4vdGV4dHVyZXMvUmVuZGVyVGV4dHVyZScpLFxuICAgIEV2ZW50RW1pdHRlciA9IHJlcXVpcmUoJ2V2ZW50ZW1pdHRlcjMnKSxcbiAgICBDT05TVCA9IHJlcXVpcmUoJy4uL2NvbnN0JyksXG4gICAgX3RlbXBNYXRyaXggPSBuZXcgbWF0aC5NYXRyaXgoKSxcbiAgICBfdGVtcERpc3BsYXlPYmplY3RQYXJlbnQgPSB7d29ybGRUcmFuc2Zvcm06bmV3IG1hdGguTWF0cml4KCksIHdvcmxkQWxwaGE6MSwgY2hpbGRyZW46W119O1xuXG5cbi8qKlxuICogVGhlIGJhc2UgY2xhc3MgZm9yIGFsbCBvYmplY3RzIHRoYXQgYXJlIHJlbmRlcmVkIG9uIHRoZSBzY3JlZW4uXG4gKiBUaGlzIGlzIGFuIGFic3RyYWN0IGNsYXNzIGFuZCBzaG91bGQgbm90IGJlIHVzZWQgb24gaXRzIG93biByYXRoZXIgaXQgc2hvdWxkIGJlIGV4dGVuZGVkLlxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgRXZlbnRFbWl0dGVyXG4gKiBAbWVtYmVyb2YgUElYSVxuICovXG5mdW5jdGlvbiBEaXNwbGF5T2JqZWN0KClcbntcbiAgICBFdmVudEVtaXR0ZXIuY2FsbCh0aGlzKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBjb29yZGluYXRlIG9mIHRoZSBvYmplY3QgcmVsYXRpdmUgdG8gdGhlIGxvY2FsIGNvb3JkaW5hdGVzIG9mIHRoZSBwYXJlbnQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlBvaW50fVxuICAgICAqL1xuICAgIHRoaXMucG9zaXRpb24gPSBuZXcgbWF0aC5Qb2ludCgpO1xuICAgIHRoaXMuX3Bvc2l0aW9uID0gbmV3IENhY2hlUG9pbnQodGhpcyk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgc2NhbGUgZmFjdG9yIG9mIHRoZSBvYmplY3QuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlBvaW50fVxuICAgICAqL1xuICAgIHRoaXMuc2NhbGUgPSBuZXcgbWF0aC5Qb2ludCgxLCAxKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBwaXZvdCBwb2ludCBvZiB0aGUgZGlzcGxheU9iamVjdCB0aGF0IGl0IHJvdGF0ZXMgYXJvdW5kXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlBvaW50fVxuICAgICAqL1xuICAgIHRoaXMucGl2b3QgPSBuZXcgbWF0aC5Qb2ludCgwLCAwKTtcblxuXG4gICAgLyoqXG4gICAgICogVGhlIHNrZXcgZmFjdG9yIGZvciB0aGUgb2JqZWN0IGluIHJhZGlhbnMuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlBvaW50fVxuICAgICAqL1xuICAgIHRoaXMuc2tldyA9IG5ldyBtYXRoLlBvaW50KDAsIDApO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHJvdGF0aW9uIG9mIHRoZSBvYmplY3QgaW4gcmFkaWFucy5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLl9yb3RhdGlvbiA9IDA7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgb3BhY2l0eSBvZiB0aGUgb2JqZWN0LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMuYWxwaGEgPSAxO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHZpc2liaWxpdHkgb2YgdGhlIG9iamVjdC4gSWYgZmFsc2UgdGhlIG9iamVjdCB3aWxsIG5vdCBiZSBkcmF3biwgYW5kXG4gICAgICogdGhlIHVwZGF0ZVRyYW5zZm9ybSBmdW5jdGlvbiB3aWxsIG5vdCBiZSBjYWxsZWQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqL1xuICAgIHRoaXMudmlzaWJsZSA9IHRydWU7XG5cbiAgICAvKipcbiAgICAgKiBDYW4gdGhpcyBvYmplY3QgYmUgcmVuZGVyZWQsIGlmIGZhbHNlIHRoZSBvYmplY3Qgd2lsbCBub3QgYmUgZHJhd24gYnV0IHRoZSB1cGRhdGVUcmFuc2Zvcm1cbiAgICAgKiBtZXRob2RzIHdpbGwgc3RpbGwgYmUgY2FsbGVkLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKi9cbiAgICB0aGlzLnJlbmRlcmFibGUgPSB0cnVlO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGRpc3BsYXkgb2JqZWN0IGNvbnRhaW5lciB0aGF0IGNvbnRhaW5zIHRoaXMgZGlzcGxheSBvYmplY3QuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLkNvbnRhaW5lcn1cbiAgICAgKiBAcmVhZE9ubHlcbiAgICAgKi9cbiAgICB0aGlzLnBhcmVudCA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgbXVsdGlwbGllZCBhbHBoYSBvZiB0aGUgZGlzcGxheU9iamVjdFxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEByZWFkT25seVxuICAgICAqL1xuICAgIHRoaXMud29ybGRBbHBoYSA9IDE7XG5cbiAgICAvKipcbiAgICAgKiBDdXJyZW50IHRyYW5zZm9ybSBvZiB0aGUgb2JqZWN0IGJhc2VkIG9uIHdvcmxkIChwYXJlbnQpIGZhY3RvcnNcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuTWF0cml4fVxuICAgICAqIEByZWFkT25seVxuICAgICAqL1xuICAgIHRoaXMud29ybGRUcmFuc2Zvcm0gPSBuZXcgbWF0aC5NYXRyaXgoKTtcbiAgICB0aGlzLmxvY2FsVHJhbnNmb3JtID0gbmV3IG1hdGguTWF0cml4KCk7XG5cblxuICAgIC8qKlxuICAgICAqIFRoZSBhcmVhIHRoZSBmaWx0ZXIgaXMgYXBwbGllZCB0by4gVGhpcyBpcyB1c2VkIGFzIG1vcmUgb2YgYW4gb3B0aW1pc2F0aW9uXG4gICAgICogcmF0aGVyIHRoYW4gZmlndXJpbmcgb3V0IHRoZSBkaW1lbnNpb25zIG9mIHRoZSBkaXNwbGF5T2JqZWN0IGVhY2ggZnJhbWUgeW91IGNhbiBzZXQgdGhpcyByZWN0YW5nbGVcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuUmVjdGFuZ2xlfVxuICAgICAqL1xuICAgIHRoaXMuZmlsdGVyQXJlYSA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBjYWNoZWQgc2luIHJvdGF0aW9uXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9zciA9IDA7XG5cbiAgICAvKipcbiAgICAgKiBjYWNoZWQgY29zIHJvdGF0aW9uXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9jciA9IDE7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgb3JpZ2luYWwsIGNhY2hlZCBib3VuZHMgb2YgdGhlIG9iamVjdFxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5SZWN0YW5nbGV9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9ib3VuZHMgPSBuZXcgbWF0aC5SZWN0YW5nbGUoMCwgMCwgMSwgMSk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgbW9zdCB1cC10by1kYXRlIGJvdW5kcyBvZiB0aGUgb2JqZWN0XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlJlY3RhbmdsZX1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX2N1cnJlbnRCb3VuZHMgPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogVGhlIG9yaWdpbmFsLCBjYWNoZWQgbWFzayBvZiB0aGUgb2JqZWN0XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlJlY3RhbmdsZX1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX21hc2sgPSBudWxsO1xuXG4gICAgdGhpcy5kaXJ0eVRyYW5zZm9ybSA9IHRydWU7XG59XG5cbi8vIGNvbnN0cnVjdG9yXG5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoRXZlbnRFbWl0dGVyLnByb3RvdHlwZSk7XG5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IERpc3BsYXlPYmplY3Q7XG5tb2R1bGUuZXhwb3J0cyA9IERpc3BsYXlPYmplY3Q7XG5cbnZhciBDYWNoZVBvaW50ID0gZnVuY3Rpb24oZG9jKXtcbiAgICBcbiAgICB0aGlzLmRvYyA9IGRvYztcblxuICAgIHRoaXMueCA9IDA7XG4gICAgdGhpcy55ID0gMDtcbn1cblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoQ2FjaGVQb2ludC5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBUaGUgcG9zaXRpb24gb2YgdGhlIGRpc3BsYXlPYmplY3Qgb24gdGhlIHggYXhpcyByZWxhdGl2ZSB0byB0aGUgbG9jYWwgY29vcmRpbmF0ZXMgb2YgdGhlIHBhcmVudC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5EaXNwbGF5T2JqZWN0I1xuICAgICAqL1xuICAgIHg6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5kb2MucG9zaXRpb24ueDtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuZG9jLnBvc2l0aW9uLnggPSB2YWx1ZTtcbiAgICAgICAgICAgIHRoaXMuZG9jLmRpcnR5VHJhbnNmb3JtID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICB5OiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZG9jLnBvc2lpdG9uLnk7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmRvYy5wb3NpdGlvbi55ID0gdmFsdWU7XG4gICAgICAgICAgICB0aGlzLmRvYy5kaXJ0eVRyYW5zZm9ybSA9IHRydWU7XG4gICAgICAgIH1cbiAgICB9XG59KTtcblxuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhEaXNwbGF5T2JqZWN0LnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFRoZSBwb3NpdGlvbiBvZiB0aGUgZGlzcGxheU9iamVjdCBvbiB0aGUgeCBheGlzIHJlbGF0aXZlIHRvIHRoZSBsb2NhbCBjb29yZGluYXRlcyBvZiB0aGUgcGFyZW50LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLkRpc3BsYXlPYmplY3QjXG4gICAgICovXG4gICAgeDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnBvc2l0aW9uLng7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnBvc2l0aW9uLnggPSB2YWx1ZTtcbiAgICAgICAgICAgIHRoaXMuZGlydHlUcmFuc2Zvcm0gPSB0cnVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFRoZSBwb3NpdGlvbiBvZiB0aGUgZGlzcGxheU9iamVjdCBvbiB0aGUgeSBheGlzIHJlbGF0aXZlIHRvIHRoZSBsb2NhbCBjb29yZGluYXRlcyBvZiB0aGUgcGFyZW50LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLkRpc3BsYXlPYmplY3QjXG4gICAgICovXG4gICAgeToge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnBvc2l0aW9uLnk7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnBvc2l0aW9uLnkgPSB2YWx1ZTtcbiAgICAgICAgICAgIHRoaXMuZGlydHlUcmFuc2Zvcm0gPSB0cnVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIHNjYWxlWDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnNjYWxlLng7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnNjYWxlLnggPSB2YWx1ZTtcbiAgICAgICAgICAgIHRoaXMuZGlydHlUcmFuc2Zvcm0gPSB0cnVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFRoZSBwb3NpdGlvbiBvZiB0aGUgZGlzcGxheU9iamVjdCBvbiB0aGUgeSBheGlzIHJlbGF0aXZlIHRvIHRoZSBsb2NhbCBjb29yZGluYXRlcyBvZiB0aGUgcGFyZW50LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLkRpc3BsYXlPYmplY3QjXG4gICAgICovXG4gICAgc2NhbGVZOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuc2NhbGUueTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuc2NhbGUueSA9IHZhbHVlO1xuICAgICAgICAgICAgdGhpcy5kaXJ0eVRyYW5zZm9ybSA9IHRydWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgcm90YXRpb246IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fcm90YXRpb247XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLl9yb3RhdGlvbiA9IHZhbHVlO1xuICAgICAgICAgICAgdGhpcy5kaXJ0eVRyYW5zZm9ybSA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLl9zciA9IE1hdGguc2luKHZhbHVlKTtcbiAgICAgICAgICAgIHRoaXMuX2NyID0gTWF0aC5jb3ModmFsdWUpO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFRoZSBwb3NpdGlvbiBvZiB0aGUgZGlzcGxheU9iamVjdCBvbiB0aGUgeSBheGlzIHJlbGF0aXZlIHRvIHRoZSBsb2NhbCBjb29yZGluYXRlcyBvZiB0aGUgcGFyZW50LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLkRpc3BsYXlPYmplY3QjXG4gICAgICovXG4gICAgc2NhbGVZOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuc2NhbGUueTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuc2NhbGUueSA9IHZhbHVlO1xuICAgICAgICAgICAgdGhpcy5kaXJ0eVRyYW5zZm9ybSA9IHRydWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogSW5kaWNhdGVzIGlmIHRoZSBzcHJpdGUgaXMgZ2xvYmFsbHkgdmlzaWJsZS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICogQG1lbWJlcm9mIFBJWEkuRGlzcGxheU9iamVjdCNcbiAgICAgKiBAcmVhZG9ubHlcbiAgICAgKi9cbiAgICB3b3JsZFZpc2libGU6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICB2YXIgaXRlbSA9IHRoaXM7XG5cbiAgICAgICAgICAgIGRvIHtcbiAgICAgICAgICAgICAgICBpZiAoIWl0ZW0udmlzaWJsZSlcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpdGVtID0gaXRlbS5wYXJlbnQ7XG4gICAgICAgICAgICB9IHdoaWxlIChpdGVtKTtcblxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogU2V0cyBhIG1hc2sgZm9yIHRoZSBkaXNwbGF5T2JqZWN0LiBBIG1hc2sgaXMgYW4gb2JqZWN0IHRoYXQgbGltaXRzIHRoZSB2aXNpYmlsaXR5IG9mIGFuIG9iamVjdCB0byB0aGUgc2hhcGUgb2YgdGhlIG1hc2sgYXBwbGllZCB0byBpdC5cbiAgICAgKiBJbiBQSVhJIGEgcmVndWxhciBtYXNrIG11c3QgYmUgYSBQSVhJLkdyYXBoaWNzIG9yIGEgUElYSS5TcHJpdGUgb2JqZWN0LiBUaGlzIGFsbG93cyBmb3IgbXVjaCBmYXN0ZXIgbWFza2luZyBpbiBjYW52YXMgYXMgaXQgdXRpbGlzZXMgc2hhcGUgY2xpcHBpbmcuXG4gICAgICogVG8gcmVtb3ZlIGEgbWFzaywgc2V0IHRoaXMgcHJvcGVydHkgdG8gbnVsbC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuR3JhcGhpY3N8UElYSS5TcHJpdGV9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuRGlzcGxheU9iamVjdCNcbiAgICAgKi9cbiAgICBtYXNrOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX21hc2s7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICBpZiAodGhpcy5fbWFzaylcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9tYXNrLnJlbmRlcmFibGUgPSB0cnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLl9tYXNrID0gdmFsdWU7XG5cbiAgICAgICAgICAgIGlmICh0aGlzLl9tYXNrKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHRoaXMuX21hc2sucmVuZGVyYWJsZSA9IGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIGZpbHRlcnMgZm9yIHRoZSBkaXNwbGF5T2JqZWN0LlxuICAgICAqICogSU1QT1JUQU5UOiBUaGlzIGlzIGEgd2ViR0wgb25seSBmZWF0dXJlIGFuZCB3aWxsIGJlIGlnbm9yZWQgYnkgdGhlIGNhbnZhcyByZW5kZXJlci5cbiAgICAgKiBUbyByZW1vdmUgZmlsdGVycyBzaW1wbHkgc2V0IHRoaXMgcHJvcGVydHkgdG8gJ251bGwnXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLkFic3RyYWN0RmlsdGVyW119XG4gICAgICogQG1lbWJlcm9mIFBJWEkuRGlzcGxheU9iamVjdCNcbiAgICAgKi9cbiAgICBmaWx0ZXJzOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2ZpbHRlcnMgJiYgdGhpcy5fZmlsdGVycy5zbGljZSgpO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5fZmlsdGVycyA9IHZhbHVlICYmIHZhbHVlLnNsaWNlKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbn0pO1xuXG4vKlxuICogVXBkYXRlcyB0aGUgb2JqZWN0IHRyYW5zZm9ybSBmb3IgcmVuZGVyaW5nXG4gKlxuICogVE9ETyAtIE9wdGltaXphdGlvbiBwYXNzIVxuICovXG5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS51cGRhdGVUcmFuc2Zvcm0gPSBmdW5jdGlvbiAoKVxue1xuICAgIHZhciBwdCA9IHRoaXMucGFyZW50LndvcmxkVHJhbnNmb3JtO1xuICAgIHZhciB3dCA9IHRoaXMud29ybGRUcmFuc2Zvcm07XG4gICAgdmFyIGx0ID0gdGhpcy5sb2NhbFRyYW5zZm9ybTtcblxuICAgIGlmKHRoaXMuZGlydHlUcmFuc2Zvcm0pXG4gICAge1xuICAgICAgICAvLyBnZXQgdGhlIG1hdHJpeCB2YWx1ZXMgb2YgdGhlIGRpc3BsYXlvYmplY3QgYmFzZWQgb24gaXRzIHRyYW5zZm9ybSBwcm9wZXJ0aWVzLi5cbiAgICAgICAgbHQuYSAgPSAgdGhpcy5fY3IgKiB0aGlzLnNjYWxlLng7XG4gICAgICAgIGx0LmIgID0gIHRoaXMuX3NyICogdGhpcy5zY2FsZS54O1xuICAgICAgICBsdC5jICA9IC10aGlzLl9zciAqIHRoaXMuc2NhbGUueTtcbiAgICAgICAgbHQuZCAgPSAgdGhpcy5fY3IgKiB0aGlzLnNjYWxlLnk7XG4gICAgICAgIGx0LnR4ID0gIHRoaXMucG9zaXRpb24ueCAtICh0aGlzLnBpdm90LnggKiBsdC5hICsgdGhpcy5waXZvdC55ICogbHQuYyk7XG4gICAgICAgIGx0LnR5ID0gIHRoaXMucG9zaXRpb24ueSAtICh0aGlzLnBpdm90LnggKiBsdC5iICsgdGhpcy5waXZvdC55ICogbHQuZCk7XG4gICAgfVxuXG4gICAgaWYodGhpcy5kaXJ0eVRyYW5zZm9ybSB8fCB0aGlzLnBhcmVudC5kaXJ0eVRyYW5zZm9ybSlcbiAgICB7ICAgICAgXG4gICAgICAgIC8vIGNvbmNhdCB0aGUgcGFyZW50IG1hdHJpeCB3aXRoIHRoZSBvYmplY3RzIHRyYW5zZm9ybS5cbiAgICAgICAgd3QuYSAgPSBsdC5hICAqIHB0LmEgKyBsdC5iICAqIHB0LmM7XG4gICAgICAgIHd0LmIgID0gbHQuYSAgKiBwdC5iICsgbHQuYiAgKiBwdC5kO1xuICAgICAgICB3dC5jICA9IGx0LmMgICogcHQuYSArIGx0LmQgICogcHQuYztcbiAgICAgICAgd3QuZCAgPSBsdC5jICAqIHB0LmIgKyBsdC5kICAqIHB0LmQ7XG4gICAgICAgIHd0LnR4ID0gbHQudHggKiBwdC5hICsgbHQudHkgKiBwdC5jICsgcHQudHg7XG4gICAgICAgIHd0LnR5ID0gbHQudHggKiBwdC5iICsgbHQudHkgKiBwdC5kICsgcHQudHk7ICAgICAgIFxuICAgIFxuICAgICAgICB0aGlzLl9jdXJyZW50Qm91bmRzID0gbnVsbDtcbiAgICB9XG5cbiAgICAvLyBtdWx0aXBseSB0aGUgYWxwaGFzLi5cbiAgICB0aGlzLndvcmxkQWxwaGEgPSB0aGlzLmFscGhhICogdGhpcy5wYXJlbnQud29ybGRBbHBoYTtcblxuICAgIC8vIHJlc2V0IHRoZSBib3VuZHMgZWFjaCB0aW1lIHRoaXMgaXMgY2FsbGVkIVxuICAgIFxufTtcblxuLy8gcGVyZm9ybWFuY2UgaW5jcmVhc2UgdG8gYXZvaWQgdXNpbmcgY2FsbC4uICgxMHggZmFzdGVyKVxuRGlzcGxheU9iamVjdC5wcm90b3R5cGUuZGlzcGxheU9iamVjdFVwZGF0ZVRyYW5zZm9ybSA9IERpc3BsYXlPYmplY3QucHJvdG90eXBlLnVwZGF0ZVRyYW5zZm9ybTtcblxuLyoqXG4gKlxuICpcbiAqIFJldHJpZXZlcyB0aGUgYm91bmRzIG9mIHRoZSBkaXNwbGF5T2JqZWN0IGFzIGEgcmVjdGFuZ2xlIG9iamVjdFxuICpcbiAqIEBwYXJhbSBtYXRyaXgge1BJWEkuTWF0cml4fVxuICogQHJldHVybiB7UElYSS5SZWN0YW5nbGV9IHRoZSByZWN0YW5ndWxhciBib3VuZGluZyBhcmVhXG4gKi9cbkRpc3BsYXlPYmplY3QucHJvdG90eXBlLmdldEJvdW5kcyA9IGZ1bmN0aW9uIChtYXRyaXgpIC8vIGpzaGludCB1bnVzZWQ6ZmFsc2VcbntcbiAgICByZXR1cm4gbWF0aC5SZWN0YW5nbGUuRU1QVFk7XG59O1xuXG4vKipcbiAqIFJldHJpZXZlcyB0aGUgbG9jYWwgYm91bmRzIG9mIHRoZSBkaXNwbGF5T2JqZWN0IGFzIGEgcmVjdGFuZ2xlIG9iamVjdFxuICpcbiAqIEByZXR1cm4ge1BJWEkuUmVjdGFuZ2xlfSB0aGUgcmVjdGFuZ3VsYXIgYm91bmRpbmcgYXJlYVxuICovXG5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS5nZXRMb2NhbEJvdW5kcyA9IGZ1bmN0aW9uICgpXG57XG4gICAgcmV0dXJuIHRoaXMuZ2V0Qm91bmRzKG1hdGguTWF0cml4LklERU5USVRZKTtcbn07XG5cbi8qKlxuICogQ2FsY3VsYXRlcyB0aGUgZ2xvYmFsIHBvc2l0aW9uIG9mIHRoZSBkaXNwbGF5IG9iamVjdFxuICpcbiAqIEBwYXJhbSBwb3NpdGlvbiB7UElYSS5Qb2ludH0gVGhlIHdvcmxkIG9yaWdpbiB0byBjYWxjdWxhdGUgZnJvbVxuICogQHJldHVybiB7UElYSS5Qb2ludH0gQSBwb2ludCBvYmplY3QgcmVwcmVzZW50aW5nIHRoZSBwb3NpdGlvbiBvZiB0aGlzIG9iamVjdFxuICovXG5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS50b0dsb2JhbCA9IGZ1bmN0aW9uIChwb3NpdGlvbilcbntcbiAgICAvLyB0aGlzIHBhcmVudCBjaGVjayBpcyBmb3IganVzdCBpbiBjYXNlIHRoZSBpdGVtIGlzIGEgcm9vdCBvYmplY3QuXG4gICAgLy8gSWYgaXQgaXMgd2UgbmVlZCB0byBnaXZlIGl0IGEgdGVtcG9yYXJ5IHBhcmVudCBzbyB0aGF0IGRpc3BsYXlPYmplY3RVcGRhdGVUcmFuc2Zvcm0gd29ya3MgY29ycmVjdGx5XG4gICAgLy8gdGhpcyBpcyBtYWlubHkgdG8gYXZvaWQgYSBwYXJlbnQgY2hlY2sgaW4gdGhlIG1haW4gbG9vcC4gRXZlcnkgbGl0dGxlIGhlbHBzIGZvciBwZXJmb3JtYW5jZSA6KVxuICAgIGlmKCF0aGlzLnBhcmVudClcbiAgICB7XG4gICAgICAgIHRoaXMucGFyZW50ID0gX3RlbXBEaXNwbGF5T2JqZWN0UGFyZW50O1xuICAgICAgICB0aGlzLmRpc3BsYXlPYmplY3RVcGRhdGVUcmFuc2Zvcm0oKTtcbiAgICAgICAgdGhpcy5wYXJlbnQgPSBudWxsO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICB0aGlzLmRpc3BsYXlPYmplY3RVcGRhdGVUcmFuc2Zvcm0oKTtcbiAgICB9XG5cbiAgICAvLyBkb24ndCBuZWVkIHRvIHVwZGF0ZSB0aGUgbG90XG4gICAgcmV0dXJuIHRoaXMud29ybGRUcmFuc2Zvcm0uYXBwbHkocG9zaXRpb24pO1xufTtcblxuLyoqXG4gKiBDYWxjdWxhdGVzIHRoZSBsb2NhbCBwb3NpdGlvbiBvZiB0aGUgZGlzcGxheSBvYmplY3QgcmVsYXRpdmUgdG8gYW5vdGhlciBwb2ludFxuICpcbiAqIEBwYXJhbSBwb3NpdGlvbiB7UElYSS5Qb2ludH0gVGhlIHdvcmxkIG9yaWdpbiB0byBjYWxjdWxhdGUgZnJvbVxuICogQHBhcmFtIFtmcm9tXSB7UElYSS5EaXNwbGF5T2JqZWN0fSBUaGUgRGlzcGxheU9iamVjdCB0byBjYWxjdWxhdGUgdGhlIGdsb2JhbCBwb3NpdGlvbiBmcm9tXG4gKiBAcGFyYW0gW3BvaW50XSB7UElYSS5Qb2ludH0gQSBQb2ludCBvYmplY3QgaW4gd2hpY2ggdG8gc3RvcmUgdGhlIHZhbHVlLCBvcHRpb25hbCAob3RoZXJ3aXNlIHdpbGwgY3JlYXRlIGEgbmV3IFBvaW50KVxuICogQHJldHVybiB7UElYSS5Qb2ludH0gQSBwb2ludCBvYmplY3QgcmVwcmVzZW50aW5nIHRoZSBwb3NpdGlvbiBvZiB0aGlzIG9iamVjdFxuICovXG5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS50b0xvY2FsID0gZnVuY3Rpb24gKHBvc2l0aW9uLCBmcm9tLCBwb2ludClcbntcbiAgICBpZiAoZnJvbSlcbiAgICB7XG4gICAgICAgIHBvc2l0aW9uID0gZnJvbS50b0dsb2JhbChwb3NpdGlvbik7XG4gICAgfVxuXG4gICAgLy8gdGhpcyBwYXJlbnQgY2hlY2sgaXMgZm9yIGp1c3QgaW4gY2FzZSB0aGUgaXRlbSBpcyBhIHJvb3Qgb2JqZWN0LlxuICAgIC8vIElmIGl0IGlzIHdlIG5lZWQgdG8gZ2l2ZSBpdCBhIHRlbXBvcmFyeSBwYXJlbnQgc28gdGhhdCBkaXNwbGF5T2JqZWN0VXBkYXRlVHJhbnNmb3JtIHdvcmtzIGNvcnJlY3RseVxuICAgIC8vIHRoaXMgaXMgbWFpbmx5IHRvIGF2b2lkIGEgcGFyZW50IGNoZWNrIGluIHRoZSBtYWluIGxvb3AuIEV2ZXJ5IGxpdHRsZSBoZWxwcyBmb3IgcGVyZm9ybWFuY2UgOilcbiAgICBpZighdGhpcy5wYXJlbnQpXG4gICAge1xuICAgICAgICB0aGlzLnBhcmVudCA9IF90ZW1wRGlzcGxheU9iamVjdFBhcmVudDtcbiAgICAgICAgdGhpcy5kaXNwbGF5T2JqZWN0VXBkYXRlVHJhbnNmb3JtKCk7XG4gICAgICAgIHRoaXMucGFyZW50ID0gbnVsbDtcbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgdGhpcy5kaXNwbGF5T2JqZWN0VXBkYXRlVHJhbnNmb3JtKCk7XG4gICAgfVxuXG4gICAgLy8gc2ltcGx5IGFwcGx5IHRoZSBtYXRyaXguLlxuICAgIHJldHVybiB0aGlzLndvcmxkVHJhbnNmb3JtLmFwcGx5SW52ZXJzZShwb3NpdGlvbiwgcG9pbnQpO1xufTtcblxuLyoqXG4gKiBSZW5kZXJzIHRoZSBvYmplY3QgdXNpbmcgdGhlIFdlYkdMIHJlbmRlcmVyXG4gKlxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLldlYkdMUmVuZGVyZXJ9IFRoZSByZW5kZXJlclxuICogQHByaXZhdGVcbiAqL1xuRGlzcGxheU9iamVjdC5wcm90b3R5cGUucmVuZGVyV2ViR0wgPSBmdW5jdGlvbiAocmVuZGVyZXIpIC8vIGpzaGludCB1bnVzZWQ6ZmFsc2VcbntcbiAgICAvLyBPVkVSV1JJVEU7XG59O1xuXG4vKipcbiAqIFJlbmRlcnMgdGhlIG9iamVjdCB1c2luZyB0aGUgQ2FudmFzIHJlbmRlcmVyXG4gKlxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLkNhbnZhc1JlbmRlcmVyfSBUaGUgcmVuZGVyZXJcbiAqIEBwcml2YXRlXG4gKi9cbkRpc3BsYXlPYmplY3QucHJvdG90eXBlLnJlbmRlckNhbnZhcyA9IGZ1bmN0aW9uIChyZW5kZXJlcikgLy8ganNoaW50IHVudXNlZDpmYWxzZVxue1xuICAgIC8vIE9WRVJXUklURTtcbn07XG4vKipcbiAqIFVzZWZ1bCBmdW5jdGlvbiB0aGF0IHJldHVybnMgYSB0ZXh0dXJlIG9mIHRoZSBkaXNwbGF5IG9iamVjdCB0aGF0IGNhbiB0aGVuIGJlIHVzZWQgdG8gY3JlYXRlIHNwcml0ZXNcbiAqIFRoaXMgY2FuIGJlIHF1aXRlIHVzZWZ1bCBpZiB5b3VyIGRpc3BsYXlPYmplY3QgaXMgc3RhdGljIC8gY29tcGxpY2F0ZWQgYW5kIG5lZWRzIHRvIGJlIHJldXNlZCBtdWx0aXBsZSB0aW1lcy5cbiAqXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuQ2FudmFzUmVuZGVyZXJ8UElYSS5XZWJHTFJlbmRlcmVyfSBUaGUgcmVuZGVyZXIgdXNlZCB0byBnZW5lcmF0ZSB0aGUgdGV4dHVyZS5cbiAqIEBwYXJhbSBzY2FsZU1vZGUge251bWJlcn0gU2VlIHtAbGluayBQSVhJLlNDQUxFX01PREVTfSBmb3IgcG9zc2libGUgdmFsdWVzXG4gKiBAcGFyYW0gcmVzb2x1dGlvbiB7bnVtYmVyfSBUaGUgcmVzb2x1dGlvbiBvZiB0aGUgdGV4dHVyZSBiZWluZyBnZW5lcmF0ZWRcbiAqIEByZXR1cm4ge1BJWEkuVGV4dHVyZX0gYSB0ZXh0dXJlIG9mIHRoZSBkaXNwbGF5IG9iamVjdFxuICovXG5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS5nZW5lcmF0ZVRleHR1cmUgPSBmdW5jdGlvbiAocmVuZGVyZXIsIHNjYWxlTW9kZSwgcmVzb2x1dGlvbilcbntcbiAgICB2YXIgYm91bmRzID0gdGhpcy5nZXRMb2NhbEJvdW5kcygpO1xuXG4gICAgdmFyIHJlbmRlclRleHR1cmUgPSBuZXcgUmVuZGVyVGV4dHVyZShyZW5kZXJlciwgYm91bmRzLndpZHRoIHwgMCwgYm91bmRzLmhlaWdodCB8IDAsIHNjYWxlTW9kZSwgcmVzb2x1dGlvbik7XG5cbiAgICBfdGVtcE1hdHJpeC50eCA9IC1ib3VuZHMueDtcbiAgICBfdGVtcE1hdHJpeC50eSA9IC1ib3VuZHMueTtcblxuICAgIHJlbmRlclRleHR1cmUucmVuZGVyKHRoaXMsIF90ZW1wTWF0cml4KTtcblxuICAgIHJldHVybiByZW5kZXJUZXh0dXJlO1xufTtcblxuLyoqXG4gKiBTZXQgdGhlIHBhcmVudCBDb250YWluZXIgb2YgdGhpcyBEaXNwbGF5T2JqZWN0XG4gKlxuICogQHBhcmFtIGNvbnRhaW5lciB7Q29udGFpbmVyfSBUaGUgQ29udGFpbmVyIHRvIGFkZCB0aGlzIERpc3BsYXlPYmplY3QgdG9cbiAqIEByZXR1cm4ge0NvbnRhaW5lcn0gVGhlIENvbnRhaW5lciB0aGF0IHRoaXMgRGlzcGxheU9iamVjdCB3YXMgYWRkZWQgdG9cbiAqL1xuRGlzcGxheU9iamVjdC5wcm90b3R5cGUuc2V0UGFyZW50ID0gZnVuY3Rpb24gKGNvbnRhaW5lcilcbntcbiAgICBpZiAoIWNvbnRhaW5lciB8fCAhY29udGFpbmVyLmFkZENoaWxkKVxuICAgIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdzZXRQYXJlbnQ6IEFyZ3VtZW50IG11c3QgYmUgYSBDb250YWluZXInKTtcbiAgICB9XG5cbiAgICBjb250YWluZXIuYWRkQ2hpbGQodGhpcyk7XG4gICAgcmV0dXJuIGNvbnRhaW5lcjtcbn07XG5cbi8qKlxuICogQ29udmVuaWVuY2UgZnVuY3Rpb24gdG8gc2V0IHRoZSBwb3N0aW9uLCBzY2FsZSwgc2tldyBhbmQgcGl2b3QgYXQgb25jZS5cbiAqXG4gKiBAcGFyYW0gW3g9MF0ge251bWJlcn0gVGhlIFggcG9zaXRpb25cbiAqIEBwYXJhbSBbeT0wXSB7bnVtYmVyfSBUaGUgWSBwb3NpdGlvblxuICogQHBhcmFtIFtzY2FsZVg9MV0ge251bWJlcn0gVGhlIFggc2NhbGUgdmFsdWVcbiAqIEBwYXJhbSBbc2NhbGVZPTFdIHtudW1iZXJ9IFRoZSBZIHNjYWxlIHZhbHVlXG4gKiBAcGFyYW0gW3JvdGF0aW9uPTBdIHtudW1iZXJ9IFRoZSByb3RhdGlvblxuICogQHBhcmFtIFtza2V3WD0wXSB7bnVtYmVyfSBUaGUgWCBza2V3IHZhbHVlXG4gKiBAcGFyYW0gW3NrZXdZPTBdIHtudW1iZXJ9IFRoZSBZIHNrZXcgdmFsdWVcbiAqIEBwYXJhbSBbcGl2b3RYPTBdIHtudW1iZXJ9IFRoZSBYIHBpdm90IHZhbHVlXG4gKiBAcGFyYW0gW3Bpdm90WT0wXSB7bnVtYmVyfSBUaGUgWSBwaXZvdCB2YWx1ZVxuICogQHJldHVybiB7UElYSS5EaXNwbGF5T2JqZWN0fVxuICovXG5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS5zZXRUcmFuc2Zvcm0gPSBmdW5jdGlvbih4LCB5LCBzY2FsZVgsIHNjYWxlWSwgcm90YXRpb24sIHNrZXdYLCBza2V3WSwgcGl2b3RYLCBwaXZvdFkpIC8vanNoaW50IGlnbm9yZTpsaW5lXG57XG4gICAgdGhpcy5wb3NpdGlvbi54ID0geCB8fCAwO1xuICAgIHRoaXMucG9zaXRpb24ueSA9IHkgfHwgMDtcbiAgICB0aGlzLnNjYWxlLnggPSAhc2NhbGVYID8gMSA6IHNjYWxlWDtcbiAgICB0aGlzLnNjYWxlLnkgPSAhc2NhbGVZID8gMSA6IHNjYWxlWTtcbiAgICB0aGlzLnJvdGF0aW9uID0gcm90YXRpb24gfHwgMDtcbiAgICB0aGlzLnNrZXcueCA9IHNrZXdYIHx8IDA7XG4gICAgdGhpcy5za2V3LnkgPSBza2V3WSB8fCAwO1xuICAgIHRoaXMucGl2b3QueCA9IHBpdm90WCB8fCAwO1xuICAgIHRoaXMucGl2b3QueSA9IHBpdm90WSB8fCAwO1xuICAgIHRoaXMuZGlydHlUcmFuc2Zvcm0gPSB0cnVlO1xuICAgIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBCYXNlIGRlc3Ryb3kgbWV0aG9kIGZvciBnZW5lcmljIGRpc3BsYXkgb2JqZWN0c1xuICpcbiAqL1xuRGlzcGxheU9iamVjdC5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uICgpXG57XG5cbiAgICB0aGlzLnBvc2l0aW9uID0gbnVsbDtcbiAgICB0aGlzLnNjYWxlID0gbnVsbDtcbiAgICB0aGlzLnBpdm90ID0gbnVsbDtcbiAgICB0aGlzLnNrZXcgPSBudWxsO1xuXG4gICAgdGhpcy5wYXJlbnQgPSBudWxsO1xuXG4gICAgdGhpcy5fYm91bmRzID0gbnVsbDtcbiAgICB0aGlzLl9jdXJyZW50Qm91bmRzID0gbnVsbDtcbiAgICB0aGlzLl9tYXNrID0gbnVsbDtcblxuICAgIHRoaXMud29ybGRUcmFuc2Zvcm0gPSBudWxsO1xuICAgIHRoaXMuZmlsdGVyQXJlYSA9IG51bGw7XG59O1xuIiwidmFyIENvbnRhaW5lciA9IHJlcXVpcmUoJy4uL2Rpc3BsYXkvQ29udGFpbmVyJyksXG4gICAgVGV4dHVyZSA9IHJlcXVpcmUoJy4uL3RleHR1cmVzL1RleHR1cmUnKSxcbiAgICBDYW52YXNCdWZmZXIgPSByZXF1aXJlKCcuLi9yZW5kZXJlcnMvY2FudmFzL3V0aWxzL0NhbnZhc0J1ZmZlcicpLFxuICAgIENhbnZhc0dyYXBoaWNzID0gcmVxdWlyZSgnLi4vcmVuZGVyZXJzL2NhbnZhcy91dGlscy9DYW52YXNHcmFwaGljcycpLFxuICAgIEdyYXBoaWNzRGF0YSA9IHJlcXVpcmUoJy4vR3JhcGhpY3NEYXRhJyksXG4gICAgbWF0aCA9IHJlcXVpcmUoJy4uL21hdGgnKSxcbiAgICBDT05TVCA9IHJlcXVpcmUoJy4uL2NvbnN0JyksXG4gICAgdGVtcFBvaW50ID0gbmV3IG1hdGguUG9pbnQoKTtcblxuLyoqXG4gKiBUaGUgR3JhcGhpY3MgY2xhc3MgY29udGFpbnMgbWV0aG9kcyB1c2VkIHRvIGRyYXcgcHJpbWl0aXZlIHNoYXBlcyBzdWNoIGFzIGxpbmVzLCBjaXJjbGVzIGFuZFxuICogcmVjdGFuZ2xlcyB0byB0aGUgZGlzcGxheSwgYW5kIHRvIGNvbG9yIGFuZCBmaWxsIHRoZW0uXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLkNvbnRhaW5lclxuICogQG1lbWJlcm9mIFBJWElcbiAqL1xuZnVuY3Rpb24gR3JhcGhpY3MoKVxue1xuICAgIENvbnRhaW5lci5jYWxsKHRoaXMpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGFscGhhIHZhbHVlIHVzZWQgd2hlbiBmaWxsaW5nIHRoZSBHcmFwaGljcyBvYmplY3QuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMVxuICAgICAqL1xuICAgIHRoaXMuZmlsbEFscGhhID0gMTtcblxuICAgIC8qKlxuICAgICAqIFRoZSB3aWR0aCAodGhpY2tuZXNzKSBvZiBhbnkgbGluZXMgZHJhd24uXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMFxuICAgICAqL1xuICAgIHRoaXMubGluZVdpZHRoID0gMDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBjb2xvciBvZiBhbnkgbGluZXMgZHJhd24uXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtzdHJpbmd9XG4gICAgICogQGRlZmF1bHQgMFxuICAgICAqL1xuICAgIHRoaXMubGluZUNvbG9yID0gMDtcblxuICAgIC8qKlxuICAgICAqIEdyYXBoaWNzIGRhdGFcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuR3JhcGhpY3NEYXRhW119XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLmdyYXBoaWNzRGF0YSA9IFtdO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHRpbnQgYXBwbGllZCB0byB0aGUgZ3JhcGhpYyBzaGFwZS4gVGhpcyBpcyBhIGhleCB2YWx1ZS4gQXBwbHkgYSB2YWx1ZSBvZiAweEZGRkZGRiB0byByZXNldCB0aGUgdGludC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAweEZGRkZGRlxuICAgICAqL1xuICAgIHRoaXMudGludCA9IDB4RkZGRkZGO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHByZXZpb3VzIHRpbnQgYXBwbGllZCB0byB0aGUgZ3JhcGhpYyBzaGFwZS4gVXNlZCB0byBjb21wYXJlIHRvIHRoZSBjdXJyZW50IHRpbnQgYW5kIGNoZWNrIGlmIHRoZXJlcyBjaGFuZ2UuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAZGVmYXVsdCAweEZGRkZGRlxuICAgICAqL1xuICAgIHRoaXMuX3ByZXZUaW50ID0gMHhGRkZGRkY7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYmxlbmQgbW9kZSB0byBiZSBhcHBsaWVkIHRvIHRoZSBncmFwaGljIHNoYXBlLiBBcHBseSBhIHZhbHVlIG9mIGBQSVhJLkJMRU5EX01PREVTLk5PUk1BTGAgdG8gcmVzZXQgdGhlIGJsZW5kIG1vZGUuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgUElYSS5CTEVORF9NT0RFUy5OT1JNQUw7XG4gICAgICogQHNlZSBQSVhJLkJMRU5EX01PREVTXG4gICAgICovXG4gICAgdGhpcy5ibGVuZE1vZGUgPSBDT05TVC5CTEVORF9NT0RFUy5OT1JNQUw7XG5cbiAgICAvKipcbiAgICAgKiBDdXJyZW50IHBhdGhcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuR3JhcGhpY3NEYXRhfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5jdXJyZW50UGF0aCA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBBcnJheSBjb250YWluaW5nIHNvbWUgV2ViR0wtcmVsYXRlZCBwcm9wZXJ0aWVzIHVzZWQgYnkgdGhlIFdlYkdMIHJlbmRlcmVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7b2JqZWN0PG51bWJlciwgb2JqZWN0Pn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIC8vIFRPRE8gLSBfd2ViZ2wgc2hvdWxkIHVzZSBhIHByb3RvdHlwZSBvYmplY3QsIG5vdCBhIHJhbmRvbSB1bmRvY3VtZW50ZWQgb2JqZWN0Li4uXG4gICAgdGhpcy5fd2ViR0wgPSB7fTtcblxuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgdGhpcyBzaGFwZSBpcyBiZWluZyB1c2VkIGFzIGEgbWFzay5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICovXG4gICAgdGhpcy5pc01hc2sgPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBib3VuZHMnIHBhZGRpbmcgdXNlZCBmb3IgYm91bmRzIGNhbGN1bGF0aW9uLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMuYm91bmRzUGFkZGluZyA9IDA7XG5cbiAgICAvKipcbiAgICAgKiBBIGNhY2hlIG9mIHRoZSBsb2NhbCBib3VuZHMgdG8gcHJldmVudCByZWNhbGN1bGF0aW9uLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5SZWN0YW5nbGV9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9sb2NhbEJvdW5kcyA9IG5ldyBtYXRoLlJlY3RhbmdsZSgwLDAsMSwxKTtcblxuICAgIC8qKlxuICAgICAqIFVzZWQgdG8gZGV0ZWN0IGlmIHRoZSBncmFwaGljcyBvYmplY3QgaGFzIGNoYW5nZWQuIElmIHRoaXMgaXMgc2V0IHRvIHRydWUgdGhlbiB0aGUgZ3JhcGhpY3NcbiAgICAgKiBvYmplY3Qgd2lsbCBiZSByZWNhbGN1bGF0ZWQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5kaXJ0eSA9IHRydWU7XG5cbiAgICAvKipcbiAgICAgKiBVc2VkIHRvIGRldGVjdCBpZiB0aGUgV2ViR0wgZ3JhcGhpY3Mgb2JqZWN0IGhhcyBjaGFuZ2VkLiBJZiB0aGlzIGlzIHNldCB0byB0cnVlIHRoZW4gdGhlXG4gICAgICogZ3JhcGhpY3Mgb2JqZWN0IHdpbGwgYmUgcmVjYWxjdWxhdGVkLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuZ2xEaXJ0eSA9IGZhbHNlO1xuXG4gICAgdGhpcy5ib3VuZHNEaXJ0eSA9IHRydWU7XG5cbiAgICAvKipcbiAgICAgKiBVc2VkIHRvIGRldGVjdCBpZiB0aGUgY2FjaGVkIHNwcml0ZSBvYmplY3QgbmVlZHMgdG8gYmUgdXBkYXRlZC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLmNhY2hlZFNwcml0ZURpcnR5ID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBXaGVuIGNhY2hlQXNCaXRtYXAgaXMgc2V0IHRvIHRydWUgdGhlIGdyYXBoaWNzIG9iamVjdCB3aWxsIGJlIHJlbmRlcmVkIGFzIGlmIGl0IHdhcyBhIHNwcml0ZS5cbiAgICAgKiBUaGlzIGlzIHVzZWZ1bCBpZiB5b3VyIGdyYXBoaWNzIGVsZW1lbnQgZG9lcyBub3QgY2hhbmdlIG9mdGVuLCBhcyBpdCB3aWxsIHNwZWVkIHVwIHRoZSByZW5kZXJpbmdcbiAgICAgKiBvZiB0aGUgb2JqZWN0IGluIGV4Y2hhbmdlIGZvciB0YWtpbmcgdXAgdGV4dHVyZSBtZW1vcnkuIEl0IGlzIGFsc28gdXNlZnVsIGlmIHlvdSBuZWVkIHRoZSBncmFwaGljc1xuICAgICAqIG9iamVjdCB0byBiZSBhbnRpLWFsaWFzZWQsIGJlY2F1c2UgaXQgd2lsbCBiZSByZW5kZXJlZCB1c2luZyBjYW52YXMuIFRoaXMgaXMgbm90IHJlY29tbWVuZGVkIGlmXG4gICAgICogeW91IGFyZSBjb25zdGFudGx5IHJlZHJhd2luZyB0aGUgZ3JhcGhpY3MgZWxlbWVudC5cbiAgICAgKlxuICAgICAqIEBuYW1lIGNhY2hlQXNCaXRtYXBcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLkdyYXBoaWNzI1xuICAgICAqIEBkZWZhdWx0IGZhbHNlXG4gICAgICovXG59XG5cbi8vIGNvbnN0cnVjdG9yXG5HcmFwaGljcy5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKENvbnRhaW5lci5wcm90b3R5cGUpO1xuR3JhcGhpY3MucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gR3JhcGhpY3M7XG5tb2R1bGUuZXhwb3J0cyA9IEdyYXBoaWNzO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBuZXcgR3JhcGhpY3Mgb2JqZWN0IHdpdGggdGhlIHNhbWUgdmFsdWVzIGFzIHRoaXMgb25lLlxuICogTm90ZSB0aGF0IHRoZSBvbmx5IHRoZSBwcm9wZXJ0aWVzIG9mIHRoZSBvYmplY3QgYXJlIGNsb25lZCwgbm90IGl0cyB0cmFuc2Zvcm0gKHBvc2l0aW9uLHNjYWxlLGV0YylcbiAqXG4gKiBAcmV0dXJuIHtQSVhJLkdyYXBoaWNzfVxuICovXG5HcmFwaGljcy5wcm90b3R5cGUuY2xvbmUgPSBmdW5jdGlvbiAoKVxue1xuICAgIHZhciBjbG9uZSA9IG5ldyBHcmFwaGljcygpO1xuXG4gICAgY2xvbmUucmVuZGVyYWJsZSAgICA9IHRoaXMucmVuZGVyYWJsZTtcbiAgICBjbG9uZS5maWxsQWxwaGEgICAgID0gdGhpcy5maWxsQWxwaGE7XG4gICAgY2xvbmUubGluZVdpZHRoICAgICA9IHRoaXMubGluZVdpZHRoO1xuICAgIGNsb25lLmxpbmVDb2xvciAgICAgPSB0aGlzLmxpbmVDb2xvcjtcbiAgICBjbG9uZS50aW50ICAgICAgICAgID0gdGhpcy50aW50O1xuICAgIGNsb25lLmJsZW5kTW9kZSAgICAgPSB0aGlzLmJsZW5kTW9kZTtcbiAgICBjbG9uZS5pc01hc2sgICAgICAgID0gdGhpcy5pc01hc2s7XG4gICAgY2xvbmUuYm91bmRzUGFkZGluZyA9IHRoaXMuYm91bmRzUGFkZGluZztcbiAgICBjbG9uZS5kaXJ0eSAgICAgICAgID0gdHJ1ZTtcbiAgICBjbG9uZS5nbERpcnR5ICAgICAgID0gdHJ1ZTtcbiAgICBjbG9uZS5jYWNoZWRTcHJpdGVEaXJ0eSA9IHRoaXMuY2FjaGVkU3ByaXRlRGlydHk7XG5cbiAgICAvLyBjb3B5IGdyYXBoaWNzIGRhdGFcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuZ3JhcGhpY3NEYXRhLmxlbmd0aDsgKytpKVxuICAgIHtcbiAgICAgICAgY2xvbmUuZ3JhcGhpY3NEYXRhLnB1c2godGhpcy5ncmFwaGljc0RhdGFbaV0uY2xvbmUoKSk7XG4gICAgfVxuXG4gICAgY2xvbmUuY3VycmVudFBhdGggPSBjbG9uZS5ncmFwaGljc0RhdGFbY2xvbmUuZ3JhcGhpY3NEYXRhLmxlbmd0aCAtIDFdO1xuXG4gICAgY2xvbmUudXBkYXRlTG9jYWxCb3VuZHMoKTtcblxuICAgIHJldHVybiBjbG9uZTtcbn07XG5cbi8qKlxuICogU3BlY2lmaWVzIHRoZSBsaW5lIHN0eWxlIHVzZWQgZm9yIHN1YnNlcXVlbnQgY2FsbHMgdG8gR3JhcGhpY3MgbWV0aG9kcyBzdWNoIGFzIHRoZSBsaW5lVG8oKSBtZXRob2Qgb3IgdGhlIGRyYXdDaXJjbGUoKSBtZXRob2QuXG4gKlxuICogQHBhcmFtIGxpbmVXaWR0aCB7bnVtYmVyfSB3aWR0aCBvZiB0aGUgbGluZSB0byBkcmF3LCB3aWxsIHVwZGF0ZSB0aGUgb2JqZWN0cyBzdG9yZWQgc3R5bGVcbiAqIEBwYXJhbSBjb2xvciB7bnVtYmVyfSBjb2xvciBvZiB0aGUgbGluZSB0byBkcmF3LCB3aWxsIHVwZGF0ZSB0aGUgb2JqZWN0cyBzdG9yZWQgc3R5bGVcbiAqIEBwYXJhbSBhbHBoYSB7bnVtYmVyfSBhbHBoYSBvZiB0aGUgbGluZSB0byBkcmF3LCB3aWxsIHVwZGF0ZSB0aGUgb2JqZWN0cyBzdG9yZWQgc3R5bGVcbiAqIEByZXR1cm4ge1BJWEkuR3JhcGhpY3N9XG4gKi9cbkdyYXBoaWNzLnByb3RvdHlwZS5saW5lU3R5bGUgPSBmdW5jdGlvbiAobGluZVdpZHRoLCBjb2xvciwgYWxwaGEpXG57XG4gICAgdGhpcy5saW5lV2lkdGggPSBsaW5lV2lkdGggfHwgMDtcbiAgICB0aGlzLmxpbmVDb2xvciA9IGNvbG9yIHx8IDA7XG4gICAgdGhpcy5saW5lQWxwaGEgPSAoYWxwaGEgPT09IHVuZGVmaW5lZCkgPyAxIDogYWxwaGE7XG5cbiAgICBpZiAodGhpcy5jdXJyZW50UGF0aClcbiAgICB7XG4gICAgICAgIGlmICh0aGlzLmN1cnJlbnRQYXRoLnNoYXBlLnBvaW50cy5sZW5ndGgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIC8vIGhhbGZ3YXkgdGhyb3VnaCBhIGxpbmU/IHN0YXJ0IGEgbmV3IG9uZSFcbiAgICAgICAgICAgIHZhciBzaGFwZSA9IG5ldyBtYXRoLlBvbHlnb24odGhpcy5jdXJyZW50UGF0aC5zaGFwZS5wb2ludHMuc2xpY2UoLTIpKTtcbiAgICAgICAgICAgIHNoYXBlLmNsb3NlZCA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5kcmF3U2hhcGUoc2hhcGUpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2VcbiAgICAgICAge1xuICAgICAgICAgICAgLy8gb3RoZXJ3aXNlIGl0cyBlbXB0eSBzbyBsZXRzIGp1c3Qgc2V0IHRoZSBsaW5lIHByb3BlcnRpZXNcbiAgICAgICAgICAgIHRoaXMuY3VycmVudFBhdGgubGluZVdpZHRoID0gdGhpcy5saW5lV2lkdGg7XG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRQYXRoLmxpbmVDb2xvciA9IHRoaXMubGluZUNvbG9yO1xuICAgICAgICAgICAgdGhpcy5jdXJyZW50UGF0aC5saW5lQWxwaGEgPSB0aGlzLmxpbmVBbHBoYTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBNb3ZlcyB0aGUgY3VycmVudCBkcmF3aW5nIHBvc2l0aW9uIHRvIHgsIHkuXG4gKlxuICogQHBhcmFtIHgge251bWJlcn0gdGhlIFggY29vcmRpbmF0ZSB0byBtb3ZlIHRvXG4gKiBAcGFyYW0geSB7bnVtYmVyfSB0aGUgWSBjb29yZGluYXRlIHRvIG1vdmUgdG9cbiAqIEByZXR1cm4ge1BJWEkuR3JhcGhpY3N9XG4gICovXG5HcmFwaGljcy5wcm90b3R5cGUubW92ZVRvID0gZnVuY3Rpb24gKHgsIHkpXG57XG4gICAgdmFyIHNoYXBlID0gbmV3IG1hdGguUG9seWdvbihbeCx5XSk7XG4gICAgc2hhcGUuY2xvc2VkID0gZmFsc2U7XG4gICAgdGhpcy5kcmF3U2hhcGUoc2hhcGUpO1xuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIERyYXdzIGEgbGluZSB1c2luZyB0aGUgY3VycmVudCBsaW5lIHN0eWxlIGZyb20gdGhlIGN1cnJlbnQgZHJhd2luZyBwb3NpdGlvbiB0byAoeCwgeSk7XG4gKiBUaGUgY3VycmVudCBkcmF3aW5nIHBvc2l0aW9uIGlzIHRoZW4gc2V0IHRvICh4LCB5KS5cbiAqXG4gKiBAcGFyYW0geCB7bnVtYmVyfSB0aGUgWCBjb29yZGluYXRlIHRvIGRyYXcgdG9cbiAqIEBwYXJhbSB5IHtudW1iZXJ9IHRoZSBZIGNvb3JkaW5hdGUgdG8gZHJhdyB0b1xuICogQHJldHVybiB7UElYSS5HcmFwaGljc31cbiAqL1xuR3JhcGhpY3MucHJvdG90eXBlLmxpbmVUbyA9IGZ1bmN0aW9uICh4LCB5KVxue1xuICAgIHRoaXMuY3VycmVudFBhdGguc2hhcGUucG9pbnRzLnB1c2goeCwgeSk7XG4gICAgdGhpcy5kaXJ0eSA9IHRydWU7XG5cbiAgICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogQ2FsY3VsYXRlIHRoZSBwb2ludHMgZm9yIGEgcXVhZHJhdGljIGJlemllciBjdXJ2ZSBhbmQgdGhlbiBkcmF3cyBpdC5cbiAqIEJhc2VkIG9uOiBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy83ODUwOTcvaG93LWRvLWktaW1wbGVtZW50LWEtYmV6aWVyLWN1cnZlLWluLWNcbiAqXG4gKiBAcGFyYW0gY3BYIHtudW1iZXJ9IENvbnRyb2wgcG9pbnQgeFxuICogQHBhcmFtIGNwWSB7bnVtYmVyfSBDb250cm9sIHBvaW50IHlcbiAqIEBwYXJhbSB0b1gge251bWJlcn0gRGVzdGluYXRpb24gcG9pbnQgeFxuICogQHBhcmFtIHRvWSB7bnVtYmVyfSBEZXN0aW5hdGlvbiBwb2ludCB5XG4gKiBAcmV0dXJuIHtQSVhJLkdyYXBoaWNzfVxuICovXG5HcmFwaGljcy5wcm90b3R5cGUucXVhZHJhdGljQ3VydmVUbyA9IGZ1bmN0aW9uIChjcFgsIGNwWSwgdG9YLCB0b1kpXG57XG4gICAgaWYgKHRoaXMuY3VycmVudFBhdGgpXG4gICAge1xuICAgICAgICBpZiAodGhpcy5jdXJyZW50UGF0aC5zaGFwZS5wb2ludHMubGVuZ3RoID09PSAwKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRQYXRoLnNoYXBlLnBvaW50cyA9IFswLCAwXTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICB0aGlzLm1vdmVUbygwLDApO1xuICAgIH1cblxuICAgIHZhciB4YSxcbiAgICAgICAgeWEsXG4gICAgICAgIG4gPSAyMCxcbiAgICAgICAgcG9pbnRzID0gdGhpcy5jdXJyZW50UGF0aC5zaGFwZS5wb2ludHM7XG5cbiAgICBpZiAocG9pbnRzLmxlbmd0aCA9PT0gMClcbiAgICB7XG4gICAgICAgIHRoaXMubW92ZVRvKDAsIDApO1xuICAgIH1cblxuICAgIHZhciBmcm9tWCA9IHBvaW50c1twb2ludHMubGVuZ3RoLTJdO1xuICAgIHZhciBmcm9tWSA9IHBvaW50c1twb2ludHMubGVuZ3RoLTFdO1xuXG4gICAgdmFyIGogPSAwO1xuICAgIGZvciAodmFyIGkgPSAxOyBpIDw9IG47ICsraSlcbiAgICB7XG4gICAgICAgIGogPSBpIC8gbjtcblxuICAgICAgICB4YSA9IGZyb21YICsgKCAoY3BYIC0gZnJvbVgpICogaiApO1xuICAgICAgICB5YSA9IGZyb21ZICsgKCAoY3BZIC0gZnJvbVkpICogaiApO1xuXG4gICAgICAgIHBvaW50cy5wdXNoKCB4YSArICggKChjcFggKyAoICh0b1ggLSBjcFgpICogaiApKSAtIHhhKSAqIGogKSxcbiAgICAgICAgICAgICAgICAgICAgIHlhICsgKCAoKGNwWSArICggKHRvWSAtIGNwWSkgKiBqICkpIC0geWEpICogaiApICk7XG4gICAgfVxuXG4gICAgdGhpcy5kaXJ0eSA9IHRoaXMuYm91bmRzRGlydHkgPSB0cnVlO1xuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIENhbGN1bGF0ZSB0aGUgcG9pbnRzIGZvciBhIGJlemllciBjdXJ2ZSBhbmQgdGhlbiBkcmF3cyBpdC5cbiAqXG4gKiBAcGFyYW0gY3BYIHtudW1iZXJ9IENvbnRyb2wgcG9pbnQgeFxuICogQHBhcmFtIGNwWSB7bnVtYmVyfSBDb250cm9sIHBvaW50IHlcbiAqIEBwYXJhbSBjcFgyIHtudW1iZXJ9IFNlY29uZCBDb250cm9sIHBvaW50IHhcbiAqIEBwYXJhbSBjcFkyIHtudW1iZXJ9IFNlY29uZCBDb250cm9sIHBvaW50IHlcbiAqIEBwYXJhbSB0b1gge251bWJlcn0gRGVzdGluYXRpb24gcG9pbnQgeFxuICogQHBhcmFtIHRvWSB7bnVtYmVyfSBEZXN0aW5hdGlvbiBwb2ludCB5XG4gKiBAcmV0dXJuIHtQSVhJLkdyYXBoaWNzfVxuICovXG5HcmFwaGljcy5wcm90b3R5cGUuYmV6aWVyQ3VydmVUbyA9IGZ1bmN0aW9uIChjcFgsIGNwWSwgY3BYMiwgY3BZMiwgdG9YLCB0b1kpXG57XG4gICAgaWYgKHRoaXMuY3VycmVudFBhdGgpXG4gICAge1xuICAgICAgICBpZiAodGhpcy5jdXJyZW50UGF0aC5zaGFwZS5wb2ludHMubGVuZ3RoID09PSAwKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRQYXRoLnNoYXBlLnBvaW50cyA9IFswLCAwXTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICB0aGlzLm1vdmVUbygwLDApO1xuICAgIH1cblxuICAgIHZhciBuID0gMjAsXG4gICAgICAgIGR0LFxuICAgICAgICBkdDIsXG4gICAgICAgIGR0MyxcbiAgICAgICAgdDIsXG4gICAgICAgIHQzLFxuICAgICAgICBwb2ludHMgPSB0aGlzLmN1cnJlbnRQYXRoLnNoYXBlLnBvaW50cztcblxuICAgIHZhciBmcm9tWCA9IHBvaW50c1twb2ludHMubGVuZ3RoLTJdO1xuICAgIHZhciBmcm9tWSA9IHBvaW50c1twb2ludHMubGVuZ3RoLTFdO1xuXG4gICAgdmFyIGogPSAwO1xuXG4gICAgZm9yICh2YXIgaSA9IDE7IGkgPD0gbjsgKytpKVxuICAgIHtcbiAgICAgICAgaiA9IGkgLyBuO1xuXG4gICAgICAgIGR0ID0gKDEgLSBqKTtcbiAgICAgICAgZHQyID0gZHQgKiBkdDtcbiAgICAgICAgZHQzID0gZHQyICogZHQ7XG5cbiAgICAgICAgdDIgPSBqICogajtcbiAgICAgICAgdDMgPSB0MiAqIGo7XG5cbiAgICAgICAgcG9pbnRzLnB1c2goIGR0MyAqIGZyb21YICsgMyAqIGR0MiAqIGogKiBjcFggKyAzICogZHQgKiB0MiAqIGNwWDIgKyB0MyAqIHRvWCxcbiAgICAgICAgICAgICAgICAgICAgIGR0MyAqIGZyb21ZICsgMyAqIGR0MiAqIGogKiBjcFkgKyAzICogZHQgKiB0MiAqIGNwWTIgKyB0MyAqIHRvWSk7XG4gICAgfVxuXG4gICAgdGhpcy5kaXJ0eSA9IHRoaXMuYm91bmRzRGlydHkgPSB0cnVlO1xuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIFRoZSBhcmNUbygpIG1ldGhvZCBjcmVhdGVzIGFuIGFyYy9jdXJ2ZSBiZXR3ZWVuIHR3byB0YW5nZW50cyBvbiB0aGUgY2FudmFzLlxuICpcbiAqIFwiYm9ycm93ZWRcIiBmcm9tIGh0dHBzOi8vY29kZS5nb29nbGUuY29tL3AvZnhjYW52YXMvIC0gdGhhbmtzIGdvb2dsZSFcbiAqXG4gKiBAcGFyYW0geDEge251bWJlcn0gVGhlIHgtY29vcmRpbmF0ZSBvZiB0aGUgYmVnaW5uaW5nIG9mIHRoZSBhcmNcbiAqIEBwYXJhbSB5MSB7bnVtYmVyfSBUaGUgeS1jb29yZGluYXRlIG9mIHRoZSBiZWdpbm5pbmcgb2YgdGhlIGFyY1xuICogQHBhcmFtIHgyIHtudW1iZXJ9IFRoZSB4LWNvb3JkaW5hdGUgb2YgdGhlIGVuZCBvZiB0aGUgYXJjXG4gKiBAcGFyYW0geTIge251bWJlcn0gVGhlIHktY29vcmRpbmF0ZSBvZiB0aGUgZW5kIG9mIHRoZSBhcmNcbiAqIEBwYXJhbSByYWRpdXMge251bWJlcn0gVGhlIHJhZGl1cyBvZiB0aGUgYXJjXG4gKiBAcmV0dXJuIHtQSVhJLkdyYXBoaWNzfVxuICovXG5HcmFwaGljcy5wcm90b3R5cGUuYXJjVG8gPSBmdW5jdGlvbiAoeDEsIHkxLCB4MiwgeTIsIHJhZGl1cylcbntcbiAgICBpZiAodGhpcy5jdXJyZW50UGF0aClcbiAgICB7XG4gICAgICAgIGlmICh0aGlzLmN1cnJlbnRQYXRoLnNoYXBlLnBvaW50cy5sZW5ndGggPT09IDApXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuY3VycmVudFBhdGguc2hhcGUucG9pbnRzLnB1c2goeDEsIHkxKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICB0aGlzLm1vdmVUbyh4MSwgeTEpO1xuICAgIH1cblxuICAgIHZhciBwb2ludHMgPSB0aGlzLmN1cnJlbnRQYXRoLnNoYXBlLnBvaW50cyxcbiAgICAgICAgZnJvbVggPSBwb2ludHNbcG9pbnRzLmxlbmd0aC0yXSxcbiAgICAgICAgZnJvbVkgPSBwb2ludHNbcG9pbnRzLmxlbmd0aC0xXSxcbiAgICAgICAgYTEgPSBmcm9tWSAtIHkxLFxuICAgICAgICBiMSA9IGZyb21YIC0geDEsXG4gICAgICAgIGEyID0geTIgICAtIHkxLFxuICAgICAgICBiMiA9IHgyICAgLSB4MSxcbiAgICAgICAgbW0gPSBNYXRoLmFicyhhMSAqIGIyIC0gYjEgKiBhMik7XG5cbiAgICBpZiAobW0gPCAxLjBlLTggfHwgcmFkaXVzID09PSAwKVxuICAgIHtcbiAgICAgICAgaWYgKHBvaW50c1twb2ludHMubGVuZ3RoLTJdICE9PSB4MSB8fCBwb2ludHNbcG9pbnRzLmxlbmd0aC0xXSAhPT0geTEpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHBvaW50cy5wdXNoKHgxLCB5MSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgdmFyIGRkID0gYTEgKiBhMSArIGIxICogYjEsXG4gICAgICAgICAgICBjYyA9IGEyICogYTIgKyBiMiAqIGIyLFxuICAgICAgICAgICAgdHQgPSBhMSAqIGEyICsgYjEgKiBiMixcbiAgICAgICAgICAgIGsxID0gcmFkaXVzICogTWF0aC5zcXJ0KGRkKSAvIG1tLFxuICAgICAgICAgICAgazIgPSByYWRpdXMgKiBNYXRoLnNxcnQoY2MpIC8gbW0sXG4gICAgICAgICAgICBqMSA9IGsxICogdHQgLyBkZCxcbiAgICAgICAgICAgIGoyID0gazIgKiB0dCAvIGNjLFxuICAgICAgICAgICAgY3ggPSBrMSAqIGIyICsgazIgKiBiMSxcbiAgICAgICAgICAgIGN5ID0gazEgKiBhMiArIGsyICogYTEsXG4gICAgICAgICAgICBweCA9IGIxICogKGsyICsgajEpLFxuICAgICAgICAgICAgcHkgPSBhMSAqIChrMiArIGoxKSxcbiAgICAgICAgICAgIHF4ID0gYjIgKiAoazEgKyBqMiksXG4gICAgICAgICAgICBxeSA9IGEyICogKGsxICsgajIpLFxuICAgICAgICAgICAgc3RhcnRBbmdsZSA9IE1hdGguYXRhbjIocHkgLSBjeSwgcHggLSBjeCksXG4gICAgICAgICAgICBlbmRBbmdsZSAgID0gTWF0aC5hdGFuMihxeSAtIGN5LCBxeCAtIGN4KTtcblxuICAgICAgICB0aGlzLmFyYyhjeCArIHgxLCBjeSArIHkxLCByYWRpdXMsIHN0YXJ0QW5nbGUsIGVuZEFuZ2xlLCBiMSAqIGEyID4gYjIgKiBhMSk7XG4gICAgfVxuXG4gICAgdGhpcy5kaXJ0eSA9IHRoaXMuYm91bmRzRGlydHkgPSB0cnVlO1xuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIFRoZSBhcmMgbWV0aG9kIGNyZWF0ZXMgYW4gYXJjL2N1cnZlICh1c2VkIHRvIGNyZWF0ZSBjaXJjbGVzLCBvciBwYXJ0cyBvZiBjaXJjbGVzKS5cbiAqXG4gKiBAcGFyYW0gY3gge251bWJlcn0gVGhlIHgtY29vcmRpbmF0ZSBvZiB0aGUgY2VudGVyIG9mIHRoZSBjaXJjbGVcbiAqIEBwYXJhbSBjeSB7bnVtYmVyfSBUaGUgeS1jb29yZGluYXRlIG9mIHRoZSBjZW50ZXIgb2YgdGhlIGNpcmNsZVxuICogQHBhcmFtIHJhZGl1cyB7bnVtYmVyfSBUaGUgcmFkaXVzIG9mIHRoZSBjaXJjbGVcbiAqIEBwYXJhbSBzdGFydEFuZ2xlIHtudW1iZXJ9IFRoZSBzdGFydGluZyBhbmdsZSwgaW4gcmFkaWFucyAoMCBpcyBhdCB0aGUgMyBvJ2Nsb2NrIHBvc2l0aW9uIG9mIHRoZSBhcmMncyBjaXJjbGUpXG4gKiBAcGFyYW0gZW5kQW5nbGUge251bWJlcn0gVGhlIGVuZGluZyBhbmdsZSwgaW4gcmFkaWFuc1xuICogQHBhcmFtIGFudGljbG9ja3dpc2Uge2Jvb2xlYW59IE9wdGlvbmFsLiBTcGVjaWZpZXMgd2hldGhlciB0aGUgZHJhd2luZyBzaG91bGQgYmUgY291bnRlcmNsb2Nrd2lzZSBvciBjbG9ja3dpc2UuIEZhbHNlIGlzIGRlZmF1bHQsIGFuZCBpbmRpY2F0ZXMgY2xvY2t3aXNlLCB3aGlsZSB0cnVlIGluZGljYXRlcyBjb3VudGVyLWNsb2Nrd2lzZS5cbiAqIEByZXR1cm4ge1BJWEkuR3JhcGhpY3N9XG4gKi9cbkdyYXBoaWNzLnByb3RvdHlwZS5hcmMgPSBmdW5jdGlvbihjeCwgY3ksIHJhZGl1cywgc3RhcnRBbmdsZSwgZW5kQW5nbGUsIGFudGljbG9ja3dpc2UpXG57XG4gICAgYW50aWNsb2Nrd2lzZSA9IGFudGljbG9ja3dpc2UgfHwgZmFsc2U7XG5cbiAgICBpZiAoc3RhcnRBbmdsZSA9PT0gZW5kQW5nbGUpXG4gICAge1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBpZiggIWFudGljbG9ja3dpc2UgJiYgZW5kQW5nbGUgPD0gc3RhcnRBbmdsZSApXG4gICAge1xuICAgICAgICBlbmRBbmdsZSArPSBNYXRoLlBJICogMjtcbiAgICB9XG4gICAgZWxzZSBpZiggYW50aWNsb2Nrd2lzZSAmJiBzdGFydEFuZ2xlIDw9IGVuZEFuZ2xlIClcbiAgICB7XG4gICAgICAgIHN0YXJ0QW5nbGUgKz0gTWF0aC5QSSAqIDI7XG4gICAgfVxuXG4gICAgdmFyIHN3ZWVwID0gYW50aWNsb2Nrd2lzZSA/IChzdGFydEFuZ2xlIC0gZW5kQW5nbGUpICogLTEgOiAoZW5kQW5nbGUgLSBzdGFydEFuZ2xlKTtcbiAgICB2YXIgc2VncyA9ICBNYXRoLmNlaWwoTWF0aC5hYnMoc3dlZXApIC8gKE1hdGguUEkgKiAyKSkgKiA0MDtcblxuICAgIGlmKHN3ZWVwID09PSAwKVxuICAgIHtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgdmFyIHN0YXJ0WCA9IGN4ICsgTWF0aC5jb3Moc3RhcnRBbmdsZSkgKiByYWRpdXM7XG4gICAgdmFyIHN0YXJ0WSA9IGN5ICsgTWF0aC5zaW4oc3RhcnRBbmdsZSkgKiByYWRpdXM7XG5cbiAgICBpZiAodGhpcy5jdXJyZW50UGF0aClcbiAgICB7XG4gICAgICAgIHRoaXMuY3VycmVudFBhdGguc2hhcGUucG9pbnRzLnB1c2goc3RhcnRYLCBzdGFydFkpO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICB0aGlzLm1vdmVUbyhzdGFydFgsIHN0YXJ0WSk7XG4gICAgfVxuXG4gICAgdmFyIHBvaW50cyA9IHRoaXMuY3VycmVudFBhdGguc2hhcGUucG9pbnRzO1xuXG4gICAgdmFyIHRoZXRhID0gc3dlZXAvKHNlZ3MqMik7XG4gICAgdmFyIHRoZXRhMiA9IHRoZXRhKjI7XG5cbiAgICB2YXIgY1RoZXRhID0gTWF0aC5jb3ModGhldGEpO1xuICAgIHZhciBzVGhldGEgPSBNYXRoLnNpbih0aGV0YSk7XG5cbiAgICB2YXIgc2VnTWludXMgPSBzZWdzIC0gMTtcblxuICAgIHZhciByZW1haW5kZXIgPSAoIHNlZ01pbnVzICUgMSApIC8gc2VnTWludXM7XG5cbiAgICBmb3IodmFyIGk9MDsgaTw9c2VnTWludXM7IGkrKylcbiAgICB7XG4gICAgICAgIHZhciByZWFsID0gIGkgKyByZW1haW5kZXIgKiBpO1xuXG5cbiAgICAgICAgdmFyIGFuZ2xlID0gKCh0aGV0YSkgKyBzdGFydEFuZ2xlICsgKHRoZXRhMiAqIHJlYWwpKTtcblxuICAgICAgICB2YXIgYyA9IE1hdGguY29zKGFuZ2xlKTtcbiAgICAgICAgdmFyIHMgPSAtTWF0aC5zaW4oYW5nbGUpO1xuXG4gICAgICAgIHBvaW50cy5wdXNoKCggKGNUaGV0YSAqICBjKSArIChzVGhldGEgKiBzKSApICogcmFkaXVzICsgY3gsXG4gICAgICAgICAgICAgICAgICAgICggKGNUaGV0YSAqIC1zKSArIChzVGhldGEgKiBjKSApICogcmFkaXVzICsgY3kpO1xuICAgIH1cblxuICAgIHRoaXMuZGlydHkgPSB0aGlzLmJvdW5kc0RpcnR5ID0gdHJ1ZTtcblxuICAgIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBTcGVjaWZpZXMgYSBzaW1wbGUgb25lLWNvbG9yIGZpbGwgdGhhdCBzdWJzZXF1ZW50IGNhbGxzIHRvIG90aGVyIEdyYXBoaWNzIG1ldGhvZHNcbiAqIChzdWNoIGFzIGxpbmVUbygpIG9yIGRyYXdDaXJjbGUoKSkgdXNlIHdoZW4gZHJhd2luZy5cbiAqXG4gKiBAcGFyYW0gY29sb3Ige251bWJlcn0gdGhlIGNvbG9yIG9mIHRoZSBmaWxsXG4gKiBAcGFyYW0gYWxwaGEge251bWJlcn0gdGhlIGFscGhhIG9mIHRoZSBmaWxsXG4gKiBAcmV0dXJuIHtQSVhJLkdyYXBoaWNzfVxuICovXG5HcmFwaGljcy5wcm90b3R5cGUuYmVnaW5GaWxsID0gZnVuY3Rpb24gKGNvbG9yLCBhbHBoYSlcbntcbiAgICB0aGlzLmZpbGxpbmcgPSB0cnVlO1xuICAgIHRoaXMuZmlsbENvbG9yID0gY29sb3IgfHwgMDtcbiAgICB0aGlzLmZpbGxBbHBoYSA9IChhbHBoYSA9PT0gdW5kZWZpbmVkKSA/IDEgOiBhbHBoYTtcblxuICAgIGlmICh0aGlzLmN1cnJlbnRQYXRoKVxuICAgIHtcbiAgICAgICAgaWYgKHRoaXMuY3VycmVudFBhdGguc2hhcGUucG9pbnRzLmxlbmd0aCA8PSAyKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRQYXRoLmZpbGwgPSB0aGlzLmZpbGxpbmc7XG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRQYXRoLmZpbGxDb2xvciA9IHRoaXMuZmlsbENvbG9yO1xuICAgICAgICAgICAgdGhpcy5jdXJyZW50UGF0aC5maWxsQWxwaGEgPSB0aGlzLmZpbGxBbHBoYTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogQXBwbGllcyBhIGZpbGwgdG8gdGhlIGxpbmVzIGFuZCBzaGFwZXMgdGhhdCB3ZXJlIGFkZGVkIHNpbmNlIHRoZSBsYXN0IGNhbGwgdG8gdGhlIGJlZ2luRmlsbCgpIG1ldGhvZC5cbiAqXG4gKiBAcmV0dXJuIHtHcmFwaGljc31cbiAqL1xuR3JhcGhpY3MucHJvdG90eXBlLmVuZEZpbGwgPSBmdW5jdGlvbiAoKVxue1xuICAgIHRoaXMuZmlsbGluZyA9IGZhbHNlO1xuICAgIHRoaXMuZmlsbENvbG9yID0gbnVsbDtcbiAgICB0aGlzLmZpbGxBbHBoYSA9IDE7XG5cbiAgICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICpcbiAqIEBwYXJhbSB4IHtudW1iZXJ9IFRoZSBYIGNvb3JkIG9mIHRoZSB0b3AtbGVmdCBvZiB0aGUgcmVjdGFuZ2xlXG4gKiBAcGFyYW0geSB7bnVtYmVyfSBUaGUgWSBjb29yZCBvZiB0aGUgdG9wLWxlZnQgb2YgdGhlIHJlY3RhbmdsZVxuICogQHBhcmFtIHdpZHRoIHtudW1iZXJ9IFRoZSB3aWR0aCBvZiB0aGUgcmVjdGFuZ2xlXG4gKiBAcGFyYW0gaGVpZ2h0IHtudW1iZXJ9IFRoZSBoZWlnaHQgb2YgdGhlIHJlY3RhbmdsZVxuICogQHJldHVybiB7UElYSS5HcmFwaGljc31cbiAqL1xuR3JhcGhpY3MucHJvdG90eXBlLmRyYXdSZWN0ID0gZnVuY3Rpb24gKCB4LCB5LCB3aWR0aCwgaGVpZ2h0IClcbntcbiAgICB0aGlzLmRyYXdTaGFwZShuZXcgbWF0aC5SZWN0YW5nbGUoeCx5LCB3aWR0aCwgaGVpZ2h0KSk7XG5cbiAgICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICpcbiAqIEBwYXJhbSB4IHtudW1iZXJ9IFRoZSBYIGNvb3JkIG9mIHRoZSB0b3AtbGVmdCBvZiB0aGUgcmVjdGFuZ2xlXG4gKiBAcGFyYW0geSB7bnVtYmVyfSBUaGUgWSBjb29yZCBvZiB0aGUgdG9wLWxlZnQgb2YgdGhlIHJlY3RhbmdsZVxuICogQHBhcmFtIHdpZHRoIHtudW1iZXJ9IFRoZSB3aWR0aCBvZiB0aGUgcmVjdGFuZ2xlXG4gKiBAcGFyYW0gaGVpZ2h0IHtudW1iZXJ9IFRoZSBoZWlnaHQgb2YgdGhlIHJlY3RhbmdsZVxuICogQHBhcmFtIHJhZGl1cyB7bnVtYmVyfSBSYWRpdXMgb2YgdGhlIHJlY3RhbmdsZSBjb3JuZXJzXG4gKiBAcmV0dXJuIHtQSVhJLkdyYXBoaWNzfVxuICovXG5HcmFwaGljcy5wcm90b3R5cGUuZHJhd1JvdW5kZWRSZWN0ID0gZnVuY3Rpb24gKCB4LCB5LCB3aWR0aCwgaGVpZ2h0LCByYWRpdXMgKVxue1xuICAgIHRoaXMuZHJhd1NoYXBlKG5ldyBtYXRoLlJvdW5kZWRSZWN0YW5nbGUoeCwgeSwgd2lkdGgsIGhlaWdodCwgcmFkaXVzKSk7XG5cbiAgICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogRHJhd3MgYSBjaXJjbGUuXG4gKlxuICogQHBhcmFtIHgge251bWJlcn0gVGhlIFggY29vcmRpbmF0ZSBvZiB0aGUgY2VudGVyIG9mIHRoZSBjaXJjbGVcbiAqIEBwYXJhbSB5IHtudW1iZXJ9IFRoZSBZIGNvb3JkaW5hdGUgb2YgdGhlIGNlbnRlciBvZiB0aGUgY2lyY2xlXG4gKiBAcGFyYW0gcmFkaXVzIHtudW1iZXJ9IFRoZSByYWRpdXMgb2YgdGhlIGNpcmNsZVxuICogQHJldHVybiB7UElYSS5HcmFwaGljc31cbiAqL1xuR3JhcGhpY3MucHJvdG90eXBlLmRyYXdDaXJjbGUgPSBmdW5jdGlvbiAoeCwgeSwgcmFkaXVzKVxue1xuICAgIHRoaXMuZHJhd1NoYXBlKG5ldyBtYXRoLkNpcmNsZSh4LHksIHJhZGl1cykpO1xuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIERyYXdzIGFuIGVsbGlwc2UuXG4gKlxuICogQHBhcmFtIHgge251bWJlcn0gVGhlIFggY29vcmRpbmF0ZSBvZiB0aGUgY2VudGVyIG9mIHRoZSBlbGxpcHNlXG4gKiBAcGFyYW0geSB7bnVtYmVyfSBUaGUgWSBjb29yZGluYXRlIG9mIHRoZSBjZW50ZXIgb2YgdGhlIGVsbGlwc2VcbiAqIEBwYXJhbSB3aWR0aCB7bnVtYmVyfSBUaGUgaGFsZiB3aWR0aCBvZiB0aGUgZWxsaXBzZVxuICogQHBhcmFtIGhlaWdodCB7bnVtYmVyfSBUaGUgaGFsZiBoZWlnaHQgb2YgdGhlIGVsbGlwc2VcbiAqIEByZXR1cm4ge1BJWEkuR3JhcGhpY3N9XG4gKi9cbkdyYXBoaWNzLnByb3RvdHlwZS5kcmF3RWxsaXBzZSA9IGZ1bmN0aW9uICh4LCB5LCB3aWR0aCwgaGVpZ2h0KVxue1xuICAgIHRoaXMuZHJhd1NoYXBlKG5ldyBtYXRoLkVsbGlwc2UoeCwgeSwgd2lkdGgsIGhlaWdodCkpO1xuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIERyYXdzIGEgcG9seWdvbiB1c2luZyB0aGUgZ2l2ZW4gcGF0aC5cbiAqXG4gKiBAcGFyYW0gcGF0aCB7bnVtYmVyW118UElYSS5Qb2ludFtdfSBUaGUgcGF0aCBkYXRhIHVzZWQgdG8gY29uc3RydWN0IHRoZSBwb2x5Z29uLlxuICogQHJldHVybiB7UElYSS5HcmFwaGljc31cbiAqL1xuR3JhcGhpY3MucHJvdG90eXBlLmRyYXdQb2x5Z29uID0gZnVuY3Rpb24gKHBhdGgpXG57XG4gICAgLy8gcHJldmVudHMgYW4gYXJndW1lbnQgYXNzaWdubWVudCBkZW9wdFxuICAgIC8vIHNlZSBzZWN0aW9uIDMuMTogaHR0cHM6Ly9naXRodWIuY29tL3BldGthYW50b25vdi9ibHVlYmlyZC93aWtpL09wdGltaXphdGlvbi1raWxsZXJzIzMtbWFuYWdpbmctYXJndW1lbnRzXG4gICAgdmFyIHBvaW50cyA9IHBhdGg7XG5cbiAgICB2YXIgY2xvc2VkID0gdHJ1ZTtcblxuICAgIGlmIChwb2ludHMgaW5zdGFuY2VvZiBtYXRoLlBvbHlnb24pXG4gICAge1xuICAgICAgICBjbG9zZWQgPSBwb2ludHMuY2xvc2VkO1xuICAgICAgICBwb2ludHMgPSBwb2ludHMucG9pbnRzO1xuICAgIH1cblxuICAgIGlmICghQXJyYXkuaXNBcnJheShwb2ludHMpKVxuICAgIHtcbiAgICAgICAgLy8gcHJldmVudHMgYW4gYXJndW1lbnQgbGVhayBkZW9wdFxuICAgICAgICAvLyBzZWUgc2VjdGlvbiAzLjI6IGh0dHBzOi8vZ2l0aHViLmNvbS9wZXRrYWFudG9ub3YvYmx1ZWJpcmQvd2lraS9PcHRpbWl6YXRpb24ta2lsbGVycyMzLW1hbmFnaW5nLWFyZ3VtZW50c1xuICAgICAgICBwb2ludHMgPSBuZXcgQXJyYXkoYXJndW1lbnRzLmxlbmd0aCk7XG5cbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwb2ludHMubGVuZ3RoOyArK2kpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHBvaW50c1tpXSA9IGFyZ3VtZW50c1tpXTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHZhciBzaGFwZSA9IG5ldyBtYXRoLlBvbHlnb24ocG9pbnRzKTtcbiAgICBzaGFwZS5jbG9zZWQgPSBjbG9zZWQ7XG5cbiAgICB0aGlzLmRyYXdTaGFwZShzaGFwZSk7XG5cbiAgICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogQ2xlYXJzIHRoZSBncmFwaGljcyB0aGF0IHdlcmUgZHJhd24gdG8gdGhpcyBHcmFwaGljcyBvYmplY3QsIGFuZCByZXNldHMgZmlsbCBhbmQgbGluZSBzdHlsZSBzZXR0aW5ncy5cbiAqXG4gKiBAcmV0dXJuIHtQSVhJLkdyYXBoaWNzfVxuICovXG5HcmFwaGljcy5wcm90b3R5cGUuY2xlYXIgPSBmdW5jdGlvbiAoKVxue1xuICAgIHRoaXMubGluZVdpZHRoID0gMDtcbiAgICB0aGlzLmZpbGxpbmcgPSBmYWxzZTtcblxuICAgIHRoaXMuZGlydHkgPSB0cnVlO1xuICAgIHRoaXMuY2xlYXJEaXJ0eSA9IHRydWU7XG4gICAgdGhpcy5ncmFwaGljc0RhdGEgPSBbXTtcblxuICAgIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBVc2VmdWwgZnVuY3Rpb24gdGhhdCByZXR1cm5zIGEgdGV4dHVyZSBvZiB0aGUgZ3JhcGhpY3Mgb2JqZWN0IHRoYXQgY2FuIHRoZW4gYmUgdXNlZCB0byBjcmVhdGUgc3ByaXRlc1xuICogVGhpcyBjYW4gYmUgcXVpdGUgdXNlZnVsIGlmIHlvdXIgZ2VvbWV0cnkgaXMgY29tcGxpY2F0ZWQgYW5kIG5lZWRzIHRvIGJlIHJldXNlZCBtdWx0aXBsZSB0aW1lcy5cbiAqXG4gKiBAcGFyYW0gcmVzb2x1dGlvbiB7bnVtYmVyfSBUaGUgcmVzb2x1dGlvbiBvZiB0aGUgdGV4dHVyZSBiZWluZyBnZW5lcmF0ZWRcbiAqIEBwYXJhbSBzY2FsZU1vZGUge251bWJlcn0gU2hvdWxkIGJlIG9uZSBvZiB0aGUgc2NhbGVNb2RlIGNvbnN0c1xuICogQHJldHVybiB7UElYSS5UZXh0dXJlfSBhIHRleHR1cmUgb2YgdGhlIGdyYXBoaWNzIG9iamVjdFxuICovXG5HcmFwaGljcy5wcm90b3R5cGUuZ2VuZXJhdGVUZXh0dXJlID0gZnVuY3Rpb24gKHJlbmRlcmVyLCByZXNvbHV0aW9uLCBzY2FsZU1vZGUpXG57XG5cbiAgICByZXNvbHV0aW9uID0gcmVzb2x1dGlvbiB8fCAxO1xuXG4gICAgdmFyIGJvdW5kcyA9IHRoaXMuZ2V0TG9jYWxCb3VuZHMoKTtcblxuICAgIHZhciBjYW52YXNCdWZmZXIgPSBuZXcgQ2FudmFzQnVmZmVyKGJvdW5kcy53aWR0aCAqIHJlc29sdXRpb24sIGJvdW5kcy5oZWlnaHQgKiByZXNvbHV0aW9uKTtcblxuICAgIHZhciB0ZXh0dXJlID0gVGV4dHVyZS5mcm9tQ2FudmFzKGNhbnZhc0J1ZmZlci5jYW52YXMsIHNjYWxlTW9kZSk7XG4gICAgdGV4dHVyZS5iYXNlVGV4dHVyZS5yZXNvbHV0aW9uID0gcmVzb2x1dGlvbjtcblxuICAgIGNhbnZhc0J1ZmZlci5jb250ZXh0LnNjYWxlKHJlc29sdXRpb24sIHJlc29sdXRpb24pO1xuXG4gICAgY2FudmFzQnVmZmVyLmNvbnRleHQudHJhbnNsYXRlKC1ib3VuZHMueCwtYm91bmRzLnkpO1xuXG4gICAgQ2FudmFzR3JhcGhpY3MucmVuZGVyR3JhcGhpY3ModGhpcywgY2FudmFzQnVmZmVyLmNvbnRleHQpO1xuXG4gICAgcmV0dXJuIHRleHR1cmU7XG59O1xuXG4vKipcbiAqIFJlbmRlcnMgdGhlIG9iamVjdCB1c2luZyB0aGUgV2ViR0wgcmVuZGVyZXJcbiAqXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcn1cbiAqIEBwcml2YXRlXG4gKi9cbkdyYXBoaWNzLnByb3RvdHlwZS5fcmVuZGVyV2ViR0wgPSBmdW5jdGlvbiAocmVuZGVyZXIpXG57XG4gICAgLy8gaWYgdGhlIHNwcml0ZSBpcyBub3QgdmlzaWJsZSBvciB0aGUgYWxwaGEgaXMgMCB0aGVuIG5vIG5lZWQgdG8gcmVuZGVyIHRoaXMgZWxlbWVudFxuXG4gICAgaWYgKHRoaXMuZ2xEaXJ0eSlcbiAgICB7XG4gICAgICAgIHRoaXMuZGlydHkgPSB0cnVlO1xuICAgICAgICB0aGlzLmdsRGlydHkgPSBmYWxzZTtcbiAgICB9XG5cbiAgICByZW5kZXJlci5zZXRPYmplY3RSZW5kZXJlcihyZW5kZXJlci5wbHVnaW5zLmdyYXBoaWNzKTtcbiAgICByZW5kZXJlci5wbHVnaW5zLmdyYXBoaWNzLnJlbmRlcih0aGlzKTtcblxufTtcblxuLyoqXG4gKiBSZW5kZXJzIHRoZSBvYmplY3QgdXNpbmcgdGhlIENhbnZhcyByZW5kZXJlclxuICpcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5DYW52YXNSZW5kZXJlcn1cbiAqIEBwcml2YXRlXG4gKi9cbkdyYXBoaWNzLnByb3RvdHlwZS5fcmVuZGVyQ2FudmFzID0gZnVuY3Rpb24gKHJlbmRlcmVyKVxue1xuICAgIGlmICh0aGlzLmlzTWFzayA9PT0gdHJ1ZSlcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBpZiB0aGUgdGludCBoYXMgY2hhbmdlZCwgc2V0IHRoZSBncmFwaGljcyBvYmplY3QgdG8gZGlydHkuXG4gICAgaWYgKHRoaXMuX3ByZXZUaW50ICE9PSB0aGlzLnRpbnQpIHtcbiAgICAgICAgdGhpcy5kaXJ0eSA9IHRydWU7XG4gICAgfVxuXG4gICAgLy8gdGhpcyBjb2RlIG1heSBzdGlsbCBiZSBuZWVkZWQgc28gbGVhdmluZyBmb3Igbm93Li5cbiAgICAvL1xuICAgIC8qXG4gICAgaWYgKHRoaXMuX2NhY2hlQXNCaXRtYXApXG4gICAge1xuICAgICAgICBpZiAodGhpcy5kaXJ0eSB8fCB0aGlzLmNhY2hlZFNwcml0ZURpcnR5KVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLl9nZW5lcmF0ZUNhY2hlZFNwcml0ZSgpO1xuXG4gICAgICAgICAgICAvLyB3ZSB3aWxsIGFsc28gbmVlZCB0byB1cGRhdGUgdGhlIHRleHR1cmVcbiAgICAgICAgICAgIHRoaXMudXBkYXRlQ2FjaGVkU3ByaXRlVGV4dHVyZSgpO1xuXG4gICAgICAgICAgICB0aGlzLmNhY2hlZFNwcml0ZURpcnR5ID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLmRpcnR5ID0gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9jYWNoZWRTcHJpdGUuYWxwaGEgPSB0aGlzLmFscGhhO1xuXG4gICAgICAgIFNwcml0ZS5wcm90b3R5cGUuX3JlbmRlckNhbnZhcy5jYWxsKHRoaXMuX2NhY2hlZFNwcml0ZSwgcmVuZGVyZXIpO1xuXG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgKi9cbiAgICB2YXIgY29udGV4dCA9IHJlbmRlcmVyLmNvbnRleHQ7XG4gICAgdmFyIHRyYW5zZm9ybSA9IHRoaXMud29ybGRUcmFuc2Zvcm07XG5cbiAgICB2YXIgY29tcG9zaXRlT3BlcmF0aW9uID0gcmVuZGVyZXIuYmxlbmRNb2Rlc1t0aGlzLmJsZW5kTW9kZV07XG4gICAgaWYgKGNvbXBvc2l0ZU9wZXJhdGlvbiAhPT0gY29udGV4dC5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb24pXG4gICAge1xuICAgICAgICBjb250ZXh0Lmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbiA9IGNvbXBvc2l0ZU9wZXJhdGlvbjtcbiAgICB9XG5cbiAgICB2YXIgcmVzb2x1dGlvbiA9IHJlbmRlcmVyLnJlc29sdXRpb247XG4gICAgY29udGV4dC5zZXRUcmFuc2Zvcm0oXG4gICAgICAgIHRyYW5zZm9ybS5hICogcmVzb2x1dGlvbixcbiAgICAgICAgdHJhbnNmb3JtLmIgKiByZXNvbHV0aW9uLFxuICAgICAgICB0cmFuc2Zvcm0uYyAqIHJlc29sdXRpb24sXG4gICAgICAgIHRyYW5zZm9ybS5kICogcmVzb2x1dGlvbixcbiAgICAgICAgdHJhbnNmb3JtLnR4ICogcmVzb2x1dGlvbixcbiAgICAgICAgdHJhbnNmb3JtLnR5ICogcmVzb2x1dGlvblxuICAgICk7XG5cbiAgICBDYW52YXNHcmFwaGljcy5yZW5kZXJHcmFwaGljcyh0aGlzLCBjb250ZXh0KTtcbn07XG5cbi8qKlxuICogUmV0cmlldmVzIHRoZSBib3VuZHMgb2YgdGhlIGdyYXBoaWMgc2hhcGUgYXMgYSByZWN0YW5nbGUgb2JqZWN0XG4gKlxuICogQHBhcmFtIFttYXRyaXhdIHtQSVhJLk1hdHJpeH0gVGhlIHdvcmxkIHRyYW5zZm9ybSBtYXRyaXggdG8gdXNlLCBkZWZhdWx0cyB0byB0aGlzXG4gKiAgb2JqZWN0J3Mgd29ybGRUcmFuc2Zvcm0uXG4gKiBAcmV0dXJuIHtQSVhJLlJlY3RhbmdsZX0gdGhlIHJlY3Rhbmd1bGFyIGJvdW5kaW5nIGFyZWFcbiAqL1xuR3JhcGhpY3MucHJvdG90eXBlLmdldEJvdW5kcyA9IGZ1bmN0aW9uIChtYXRyaXgpXG57XG4gICAgaWYoIXRoaXMuX2N1cnJlbnRCb3VuZHMpXG4gICAge1xuXG4gICAgICAgIC8vIHJldHVybiBhbiBlbXB0eSBvYmplY3QgaWYgdGhlIGl0ZW0gaXMgYSBtYXNrIVxuICAgICAgICBpZiAoIXRoaXMucmVuZGVyYWJsZSlcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIG1hdGguUmVjdGFuZ2xlLkVNUFRZO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuYm91bmRzRGlydHkpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlTG9jYWxCb3VuZHMoKTtcblxuICAgICAgICAgICAgdGhpcy5nbERpcnR5ID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMuY2FjaGVkU3ByaXRlRGlydHkgPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy5ib3VuZHNEaXJ0eSA9IGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGJvdW5kcyA9IHRoaXMuX2xvY2FsQm91bmRzO1xuXG4gICAgICAgIHZhciB3MCA9IGJvdW5kcy54O1xuICAgICAgICB2YXIgdzEgPSBib3VuZHMud2lkdGggKyBib3VuZHMueDtcblxuICAgICAgICB2YXIgaDAgPSBib3VuZHMueTtcbiAgICAgICAgdmFyIGgxID0gYm91bmRzLmhlaWdodCArIGJvdW5kcy55O1xuXG4gICAgICAgIHZhciB3b3JsZFRyYW5zZm9ybSA9IG1hdHJpeCB8fCB0aGlzLndvcmxkVHJhbnNmb3JtO1xuXG4gICAgICAgIHZhciBhID0gd29ybGRUcmFuc2Zvcm0uYTtcbiAgICAgICAgdmFyIGIgPSB3b3JsZFRyYW5zZm9ybS5iO1xuICAgICAgICB2YXIgYyA9IHdvcmxkVHJhbnNmb3JtLmM7XG4gICAgICAgIHZhciBkID0gd29ybGRUcmFuc2Zvcm0uZDtcbiAgICAgICAgdmFyIHR4ID0gd29ybGRUcmFuc2Zvcm0udHg7XG4gICAgICAgIHZhciB0eSA9IHdvcmxkVHJhbnNmb3JtLnR5O1xuXG4gICAgICAgIHZhciB4MSA9IGEgKiB3MSArIGMgKiBoMSArIHR4O1xuICAgICAgICB2YXIgeTEgPSBkICogaDEgKyBiICogdzEgKyB0eTtcblxuICAgICAgICB2YXIgeDIgPSBhICogdzAgKyBjICogaDEgKyB0eDtcbiAgICAgICAgdmFyIHkyID0gZCAqIGgxICsgYiAqIHcwICsgdHk7XG5cbiAgICAgICAgdmFyIHgzID0gYSAqIHcwICsgYyAqIGgwICsgdHg7XG4gICAgICAgIHZhciB5MyA9IGQgKiBoMCArIGIgKiB3MCArIHR5O1xuXG4gICAgICAgIHZhciB4NCA9ICBhICogdzEgKyBjICogaDAgKyB0eDtcbiAgICAgICAgdmFyIHk0ID0gIGQgKiBoMCArIGIgKiB3MSArIHR5O1xuXG4gICAgICAgIHZhciBtYXhYID0geDE7XG4gICAgICAgIHZhciBtYXhZID0geTE7XG5cbiAgICAgICAgdmFyIG1pblggPSB4MTtcbiAgICAgICAgdmFyIG1pblkgPSB5MTtcblxuICAgICAgICBtaW5YID0geDIgPCBtaW5YID8geDIgOiBtaW5YO1xuICAgICAgICBtaW5YID0geDMgPCBtaW5YID8geDMgOiBtaW5YO1xuICAgICAgICBtaW5YID0geDQgPCBtaW5YID8geDQgOiBtaW5YO1xuXG4gICAgICAgIG1pblkgPSB5MiA8IG1pblkgPyB5MiA6IG1pblk7XG4gICAgICAgIG1pblkgPSB5MyA8IG1pblkgPyB5MyA6IG1pblk7XG4gICAgICAgIG1pblkgPSB5NCA8IG1pblkgPyB5NCA6IG1pblk7XG5cbiAgICAgICAgbWF4WCA9IHgyID4gbWF4WCA/IHgyIDogbWF4WDtcbiAgICAgICAgbWF4WCA9IHgzID4gbWF4WCA/IHgzIDogbWF4WDtcbiAgICAgICAgbWF4WCA9IHg0ID4gbWF4WCA/IHg0IDogbWF4WDtcblxuICAgICAgICBtYXhZID0geTIgPiBtYXhZID8geTIgOiBtYXhZO1xuICAgICAgICBtYXhZID0geTMgPiBtYXhZID8geTMgOiBtYXhZO1xuICAgICAgICBtYXhZID0geTQgPiBtYXhZID8geTQgOiBtYXhZO1xuXG4gICAgICAgIHRoaXMuX2JvdW5kcy54ID0gbWluWDtcbiAgICAgICAgdGhpcy5fYm91bmRzLndpZHRoID0gbWF4WCAtIG1pblg7XG5cbiAgICAgICAgdGhpcy5fYm91bmRzLnkgPSBtaW5ZO1xuICAgICAgICB0aGlzLl9ib3VuZHMuaGVpZ2h0ID0gbWF4WSAtIG1pblk7XG5cbiAgICAgICAgdGhpcy5fY3VycmVudEJvdW5kcyA9IHRoaXMuX2JvdW5kcztcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5fY3VycmVudEJvdW5kcztcbn07XG5cbi8qKlxuKiBUZXN0cyBpZiBhIHBvaW50IGlzIGluc2lkZSB0aGlzIGdyYXBoaWNzIG9iamVjdFxuKlxuKiBAcGFyYW0gcG9pbnQge1BJWEkuUG9pbnR9IHRoZSBwb2ludCB0byB0ZXN0XG4qIEByZXR1cm4ge2Jvb2xlYW59IHRoZSByZXN1bHQgb2YgdGhlIHRlc3RcbiovXG5HcmFwaGljcy5wcm90b3R5cGUuY29udGFpbnNQb2ludCA9IGZ1bmN0aW9uKCBwb2ludCApXG57XG4gICAgdGhpcy53b3JsZFRyYW5zZm9ybS5hcHBseUludmVyc2UocG9pbnQsICB0ZW1wUG9pbnQpO1xuXG4gICAgdmFyIGdyYXBoaWNzRGF0YSA9IHRoaXMuZ3JhcGhpY3NEYXRhO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBncmFwaGljc0RhdGEubGVuZ3RoOyBpKyspXG4gICAge1xuICAgICAgICB2YXIgZGF0YSA9IGdyYXBoaWNzRGF0YVtpXTtcblxuICAgICAgICBpZiAoIWRhdGEuZmlsbClcbiAgICAgICAge1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBvbmx5IGRlYWwgd2l0aCBmaWxscy4uXG4gICAgICAgIGlmIChkYXRhLnNoYXBlKVxuICAgICAgICB7XG4gICAgICAgICAgICBpZiAoIGRhdGEuc2hhcGUuY29udGFpbnMoIHRlbXBQb2ludC54LCB0ZW1wUG9pbnQueSApIClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBmYWxzZTtcbn07XG5cbi8qKlxuICogVXBkYXRlIHRoZSBib3VuZHMgb2YgdGhlIG9iamVjdFxuICpcbiAqL1xuR3JhcGhpY3MucHJvdG90eXBlLnVwZGF0ZUxvY2FsQm91bmRzID0gZnVuY3Rpb24gKClcbntcbiAgICB2YXIgbWluWCA9IEluZmluaXR5O1xuICAgIHZhciBtYXhYID0gLUluZmluaXR5O1xuXG4gICAgdmFyIG1pblkgPSBJbmZpbml0eTtcbiAgICB2YXIgbWF4WSA9IC1JbmZpbml0eTtcblxuICAgIGlmICh0aGlzLmdyYXBoaWNzRGF0YS5sZW5ndGgpXG4gICAge1xuICAgICAgICB2YXIgc2hhcGUsIHBvaW50cywgeCwgeSwgdywgaDtcblxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuZ3JhcGhpY3NEYXRhLmxlbmd0aDsgaSsrKVxuICAgICAgICB7XG4gICAgICAgICAgICB2YXIgZGF0YSA9IHRoaXMuZ3JhcGhpY3NEYXRhW2ldO1xuICAgICAgICAgICAgdmFyIHR5cGUgPSBkYXRhLnR5cGU7XG4gICAgICAgICAgICB2YXIgbGluZVdpZHRoID0gZGF0YS5saW5lV2lkdGg7XG4gICAgICAgICAgICBzaGFwZSA9IGRhdGEuc2hhcGU7XG5cbiAgICAgICAgICAgIGlmICh0eXBlID09PSBDT05TVC5TSEFQRVMuUkVDVCB8fCB0eXBlID09PSBDT05TVC5TSEFQRVMuUlJFQylcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB4ID0gc2hhcGUueCAtIGxpbmVXaWR0aC8yO1xuICAgICAgICAgICAgICAgIHkgPSBzaGFwZS55IC0gbGluZVdpZHRoLzI7XG4gICAgICAgICAgICAgICAgdyA9IHNoYXBlLndpZHRoICsgbGluZVdpZHRoO1xuICAgICAgICAgICAgICAgIGggPSBzaGFwZS5oZWlnaHQgKyBsaW5lV2lkdGg7XG5cbiAgICAgICAgICAgICAgICBtaW5YID0geCA8IG1pblggPyB4IDogbWluWDtcbiAgICAgICAgICAgICAgICBtYXhYID0geCArIHcgPiBtYXhYID8geCArIHcgOiBtYXhYO1xuXG4gICAgICAgICAgICAgICAgbWluWSA9IHkgPCBtaW5ZID8geSA6IG1pblk7XG4gICAgICAgICAgICAgICAgbWF4WSA9IHkgKyBoID4gbWF4WSA/IHkgKyBoIDogbWF4WTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKHR5cGUgPT09IENPTlNULlNIQVBFUy5DSVJDKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHggPSBzaGFwZS54O1xuICAgICAgICAgICAgICAgIHkgPSBzaGFwZS55O1xuICAgICAgICAgICAgICAgIHcgPSBzaGFwZS5yYWRpdXMgKyBsaW5lV2lkdGgvMjtcbiAgICAgICAgICAgICAgICBoID0gc2hhcGUucmFkaXVzICsgbGluZVdpZHRoLzI7XG5cbiAgICAgICAgICAgICAgICBtaW5YID0geCAtIHcgPCBtaW5YID8geCAtIHcgOiBtaW5YO1xuICAgICAgICAgICAgICAgIG1heFggPSB4ICsgdyA+IG1heFggPyB4ICsgdyA6IG1heFg7XG5cbiAgICAgICAgICAgICAgICBtaW5ZID0geSAtIGggPCBtaW5ZID8geSAtIGggOiBtaW5ZO1xuICAgICAgICAgICAgICAgIG1heFkgPSB5ICsgaCA+IG1heFkgPyB5ICsgaCA6IG1heFk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmICh0eXBlID09PSBDT05TVC5TSEFQRVMuRUxJUClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB4ID0gc2hhcGUueDtcbiAgICAgICAgICAgICAgICB5ID0gc2hhcGUueTtcbiAgICAgICAgICAgICAgICB3ID0gc2hhcGUud2lkdGggKyBsaW5lV2lkdGgvMjtcbiAgICAgICAgICAgICAgICBoID0gc2hhcGUuaGVpZ2h0ICsgbGluZVdpZHRoLzI7XG5cbiAgICAgICAgICAgICAgICBtaW5YID0geCAtIHcgPCBtaW5YID8geCAtIHcgOiBtaW5YO1xuICAgICAgICAgICAgICAgIG1heFggPSB4ICsgdyA+IG1heFggPyB4ICsgdyA6IG1heFg7XG5cbiAgICAgICAgICAgICAgICBtaW5ZID0geSAtIGggPCBtaW5ZID8geSAtIGggOiBtaW5ZO1xuICAgICAgICAgICAgICAgIG1heFkgPSB5ICsgaCA+IG1heFkgPyB5ICsgaCA6IG1heFk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgLy8gUE9MWVxuICAgICAgICAgICAgICAgIHBvaW50cyA9IHNoYXBlLnBvaW50cztcblxuICAgICAgICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgcG9pbnRzLmxlbmd0aDsgaiArPSAyKVxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgeCA9IHBvaW50c1tqXTtcbiAgICAgICAgICAgICAgICAgICAgeSA9IHBvaW50c1tqKzFdO1xuXG4gICAgICAgICAgICAgICAgICAgIG1pblggPSB4LWxpbmVXaWR0aCA8IG1pblggPyB4LWxpbmVXaWR0aCA6IG1pblg7XG4gICAgICAgICAgICAgICAgICAgIG1heFggPSB4K2xpbmVXaWR0aCA+IG1heFggPyB4K2xpbmVXaWR0aCA6IG1heFg7XG5cbiAgICAgICAgICAgICAgICAgICAgbWluWSA9IHktbGluZVdpZHRoIDwgbWluWSA/IHktbGluZVdpZHRoIDogbWluWTtcbiAgICAgICAgICAgICAgICAgICAgbWF4WSA9IHkrbGluZVdpZHRoID4gbWF4WSA/IHkrbGluZVdpZHRoIDogbWF4WTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgbWluWCA9IDA7XG4gICAgICAgIG1heFggPSAwO1xuICAgICAgICBtaW5ZID0gMDtcbiAgICAgICAgbWF4WSA9IDA7XG4gICAgfVxuXG4gICAgdmFyIHBhZGRpbmcgPSB0aGlzLmJvdW5kc1BhZGRpbmc7XG5cbiAgICB0aGlzLl9sb2NhbEJvdW5kcy54ID0gbWluWCAtIHBhZGRpbmc7XG4gICAgdGhpcy5fbG9jYWxCb3VuZHMud2lkdGggPSAobWF4WCAtIG1pblgpICsgcGFkZGluZyAqIDI7XG5cbiAgICB0aGlzLl9sb2NhbEJvdW5kcy55ID0gbWluWSAtIHBhZGRpbmc7XG4gICAgdGhpcy5fbG9jYWxCb3VuZHMuaGVpZ2h0ID0gKG1heFkgLSBtaW5ZKSArIHBhZGRpbmcgKiAyO1xufTtcblxuLyoqXG4gKiBHZW5lcmF0ZXMgdGhlIGNhY2hlZCBzcHJpdGUgd2hlbiB0aGUgc3ByaXRlIGhhcyBjYWNoZUFzQml0bWFwID0gdHJ1ZVxuICpcbiAqIEBwcml2YXRlXG4gKi9cbi8qXG5HcmFwaGljcy5wcm90b3R5cGUuX2dlbmVyYXRlQ2FjaGVkU3ByaXRlID0gZnVuY3Rpb24gKClcbntcbiAgICB2YXIgYm91bmRzID0gdGhpcy5nZXRMb2NhbEJvdW5kcygpO1xuXG4gICAgaWYgKCF0aGlzLl9jYWNoZWRTcHJpdGUpXG4gICAge1xuICAgICAgICB2YXIgY2FudmFzQnVmZmVyID0gbmV3IENhbnZhc0J1ZmZlcihib3VuZHMud2lkdGgsIGJvdW5kcy5oZWlnaHQpO1xuICAgICAgICB2YXIgdGV4dHVyZSA9IFRleHR1cmUuZnJvbUNhbnZhcyhjYW52YXNCdWZmZXIuY2FudmFzKTtcblxuICAgICAgICB0aGlzLl9jYWNoZWRTcHJpdGUgPSBuZXcgU3ByaXRlKHRleHR1cmUpO1xuICAgICAgICB0aGlzLl9jYWNoZWRTcHJpdGUuYnVmZmVyID0gY2FudmFzQnVmZmVyO1xuXG4gICAgICAgIHRoaXMuX2NhY2hlZFNwcml0ZS53b3JsZFRyYW5zZm9ybSA9IHRoaXMud29ybGRUcmFuc2Zvcm07XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHRoaXMuX2NhY2hlZFNwcml0ZS5idWZmZXIucmVzaXplKGJvdW5kcy53aWR0aCwgYm91bmRzLmhlaWdodCk7XG4gICAgfVxuXG4gICAgLy8gbGV2ZXJhZ2UgdGhlIGFuY2hvciB0byBhY2NvdW50IGZvciB0aGUgb2Zmc2V0IG9mIHRoZSBlbGVtZW50XG4gICAgdGhpcy5fY2FjaGVkU3ByaXRlLmFuY2hvci54ID0gLSggYm91bmRzLnggLyBib3VuZHMud2lkdGggKTtcbiAgICB0aGlzLl9jYWNoZWRTcHJpdGUuYW5jaG9yLnkgPSAtKCBib3VuZHMueSAvIGJvdW5kcy5oZWlnaHQgKTtcblxuICAgIC8vIHRoaXMuX2NhY2hlZFNwcml0ZS5idWZmZXIuY29udGV4dC5zYXZlKCk7XG4gICAgdGhpcy5fY2FjaGVkU3ByaXRlLmJ1ZmZlci5jb250ZXh0LnRyYW5zbGF0ZSgtYm91bmRzLngsLWJvdW5kcy55KTtcblxuICAgIC8vIG1ha2Ugc3VyZSB3ZSBzZXQgdGhlIGFscGhhIG9mIHRoZSBncmFwaGljcyB0byAxIGZvciB0aGUgcmVuZGVyLi5cbiAgICB0aGlzLndvcmxkQWxwaGEgPSAxO1xuXG4gICAgLy8gbm93IHJlbmRlciB0aGUgZ3JhcGhpYy4uXG4gICAgQ2FudmFzR3JhcGhpY3MucmVuZGVyR3JhcGhpY3ModGhpcywgdGhpcy5fY2FjaGVkU3ByaXRlLmJ1ZmZlci5jb250ZXh0KTtcblxuICAgIHRoaXMuX2NhY2hlZFNwcml0ZS5hbHBoYSA9IHRoaXMuYWxwaGE7XG59O1xuKi9cbi8qKlxuICogVXBkYXRlcyB0ZXh0dXJlIHNpemUgYmFzZWQgb24gY2FudmFzIHNpemVcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG4vKlxuR3JhcGhpY3MucHJvdG90eXBlLnVwZGF0ZUNhY2hlZFNwcml0ZVRleHR1cmUgPSBmdW5jdGlvbiAoKVxue1xuICAgIHZhciBjYWNoZWRTcHJpdGUgPSB0aGlzLl9jYWNoZWRTcHJpdGU7XG4gICAgdmFyIHRleHR1cmUgPSBjYWNoZWRTcHJpdGUudGV4dHVyZTtcbiAgICB2YXIgY2FudmFzID0gY2FjaGVkU3ByaXRlLmJ1ZmZlci5jYW52YXM7XG5cbiAgICB0ZXh0dXJlLmJhc2VUZXh0dXJlLndpZHRoID0gY2FudmFzLndpZHRoO1xuICAgIHRleHR1cmUuYmFzZVRleHR1cmUuaGVpZ2h0ID0gY2FudmFzLmhlaWdodDtcbiAgICB0ZXh0dXJlLmNyb3Aud2lkdGggPSB0ZXh0dXJlLmZyYW1lLndpZHRoID0gY2FudmFzLndpZHRoO1xuICAgIHRleHR1cmUuY3JvcC5oZWlnaHQgPSB0ZXh0dXJlLmZyYW1lLmhlaWdodCA9IGNhbnZhcy5oZWlnaHQ7XG5cbiAgICBjYWNoZWRTcHJpdGUuX3dpZHRoID0gY2FudmFzLndpZHRoO1xuICAgIGNhY2hlZFNwcml0ZS5faGVpZ2h0ID0gY2FudmFzLmhlaWdodDtcblxuICAgIC8vIHVwZGF0ZSB0aGUgZGlydHkgYmFzZSB0ZXh0dXJlc1xuICAgIHRleHR1cmUuYmFzZVRleHR1cmUuZGlydHkoKTtcbn07Ki9cblxuLyoqXG4gKiBEZXN0cm95cyBhIHByZXZpb3VzIGNhY2hlZCBzcHJpdGUuXG4gKlxuICovXG4vKlxuR3JhcGhpY3MucHJvdG90eXBlLmRlc3Ryb3lDYWNoZWRTcHJpdGUgPSBmdW5jdGlvbiAoKVxue1xuICAgIHRoaXMuX2NhY2hlZFNwcml0ZS50ZXh0dXJlLmRlc3Ryb3kodHJ1ZSk7XG5cbiAgICAvLyBsZXQgdGhlIGdjIGNvbGxlY3QgdGhlIHVudXNlZCBzcHJpdGVcbiAgICAvLyBUT0RPIGNvdWxkIGJlIG9iamVjdCBwb29sZWQhXG4gICAgdGhpcy5fY2FjaGVkU3ByaXRlID0gbnVsbDtcbn07Ki9cblxuLyoqXG4gKiBEcmF3cyB0aGUgZ2l2ZW4gc2hhcGUgdG8gdGhpcyBHcmFwaGljcyBvYmplY3QuIENhbiBiZSBhbnkgb2YgQ2lyY2xlLCBSZWN0YW5nbGUsIEVsbGlwc2UsIExpbmUgb3IgUG9seWdvbi5cbiAqXG4gKiBAcGFyYW0gc2hhcGUge1BJWEkuQ2lyY2xlfFBJWEkuUmVjdGFuZ2xlfFBJWEkuRWxsaXBzZXxQSVhJLkxpbmV8UElYSS5Qb2x5Z29ufSBUaGUgc2hhcGUgb2JqZWN0IHRvIGRyYXcuXG4gKiBAcmV0dXJuIHtQSVhJLkdyYXBoaWNzRGF0YX0gVGhlIGdlbmVyYXRlZCBHcmFwaGljc0RhdGEgb2JqZWN0LlxuICovXG5HcmFwaGljcy5wcm90b3R5cGUuZHJhd1NoYXBlID0gZnVuY3Rpb24gKHNoYXBlKVxue1xuICAgIGlmICh0aGlzLmN1cnJlbnRQYXRoKVxuICAgIHtcbiAgICAgICAgLy8gY2hlY2sgY3VycmVudCBwYXRoIVxuICAgICAgICBpZiAodGhpcy5jdXJyZW50UGF0aC5zaGFwZS5wb2ludHMubGVuZ3RoIDw9IDIpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuZ3JhcGhpY3NEYXRhLnBvcCgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5jdXJyZW50UGF0aCA9IG51bGw7XG5cbiAgICB2YXIgZGF0YSA9IG5ldyBHcmFwaGljc0RhdGEodGhpcy5saW5lV2lkdGgsIHRoaXMubGluZUNvbG9yLCB0aGlzLmxpbmVBbHBoYSwgdGhpcy5maWxsQ29sb3IsIHRoaXMuZmlsbEFscGhhLCB0aGlzLmZpbGxpbmcsIHNoYXBlKTtcblxuICAgIHRoaXMuZ3JhcGhpY3NEYXRhLnB1c2goZGF0YSk7XG5cbiAgICBpZiAoZGF0YS50eXBlID09PSBDT05TVC5TSEFQRVMuUE9MWSlcbiAgICB7XG4gICAgICAgIGRhdGEuc2hhcGUuY2xvc2VkID0gZGF0YS5zaGFwZS5jbG9zZWQgfHwgdGhpcy5maWxsaW5nO1xuICAgICAgICB0aGlzLmN1cnJlbnRQYXRoID0gZGF0YTtcbiAgICB9XG5cbiAgICB0aGlzLmRpcnR5ID0gdGhpcy5ib3VuZHNEaXJ0eSA9IHRydWU7XG5cbiAgICByZXR1cm4gZGF0YTtcbn07XG5cbi8qKlxuICogRGVzdHJveXMgdGhlIEdyYXBoaWNzIG9iamVjdC5cbiAqL1xuR3JhcGhpY3MucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoKSB7XG4gICAgQ29udGFpbmVyLnByb3RvdHlwZS5kZXN0cm95LmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG5cbiAgICAvLyBkZXN0cm95IGVhY2ggb2YgdGhlIEdyYXBoaWNzRGF0YSBvYmplY3RzXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmdyYXBoaWNzRGF0YS5sZW5ndGg7ICsraSkge1xuICAgICAgICB0aGlzLmdyYXBoaWNzRGF0YVtpXS5kZXN0cm95KCk7XG4gICAgfVxuXG4gICAgLy8gZm9yIGVhY2ggd2ViZ2wgZGF0YSBlbnRyeSwgZGVzdHJveSB0aGUgV2ViR0xHcmFwaGljc0RhdGFcbiAgICBmb3IgKHZhciBpZCBpbiB0aGlzLl93ZWJnbCkge1xuICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IHRoaXMuX3dlYmdsW2lkXS5kYXRhLmxlbmd0aDsgKytqKSB7XG4gICAgICAgICAgICB0aGlzLl93ZWJnbFtpZF0uZGF0YVtqXS5kZXN0cm95KCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLmdyYXBoaWNzRGF0YSA9IG51bGw7XG5cbiAgICB0aGlzLmN1cnJlbnRQYXRoID0gbnVsbDtcbiAgICB0aGlzLl93ZWJnbCA9IG51bGw7XG4gICAgdGhpcy5fbG9jYWxCb3VuZHMgPSBudWxsO1xufTtcbiIsIi8qKlxuICogQSBHcmFwaGljc0RhdGEgb2JqZWN0LlxuICpcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqIEBwYXJhbSBsaW5lV2lkdGgge251bWJlcn0gdGhlIHdpZHRoIG9mIHRoZSBsaW5lIHRvIGRyYXdcbiAqIEBwYXJhbSBsaW5lQ29sb3Ige251bWJlcn0gdGhlIGNvbG9yIG9mIHRoZSBsaW5lIHRvIGRyYXdcbiAqIEBwYXJhbSBsaW5lQWxwaGEge251bWJlcn0gdGhlIGFscGhhIG9mIHRoZSBsaW5lIHRvIGRyYXdcbiAqIEBwYXJhbSBmaWxsQ29sb3Ige251bWJlcn0gdGhlIGNvbG9yIG9mIHRoZSBmaWxsXG4gKiBAcGFyYW0gZmlsbEFscGhhIHtudW1iZXJ9IHRoZSBhbHBoYSBvZiB0aGUgZmlsbFxuICogQHBhcmFtIGZpbGwgICAgICB7Ym9vbGVhbn0gd2hldGhlciBvciBub3QgdGhlIHNoYXBlIGlzIGZpbGxlZCB3aXRoIGEgY29sb3VyXG4gKiBAcGFyYW0gc2hhcGUgICAgIHtDaXJjbGV8UmVjdGFuZ2xlfEVsbGlwc2V8TGluZXxQb2x5Z29ufSBUaGUgc2hhcGUgb2JqZWN0IHRvIGRyYXcuXG4gKi9cbmZ1bmN0aW9uIEdyYXBoaWNzRGF0YShsaW5lV2lkdGgsIGxpbmVDb2xvciwgbGluZUFscGhhLCBmaWxsQ29sb3IsIGZpbGxBbHBoYSwgZmlsbCwgc2hhcGUpXG57XG4gICAgLypcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9IHRoZSB3aWR0aCBvZiB0aGUgbGluZSB0byBkcmF3XG4gICAgICovXG4gICAgdGhpcy5saW5lV2lkdGggPSBsaW5lV2lkdGg7XG5cbiAgICAvKlxuICAgICAqIEBtZW1iZXIge251bWJlcn0gdGhlIGNvbG9yIG9mIHRoZSBsaW5lIHRvIGRyYXdcbiAgICAgKi9cbiAgICB0aGlzLmxpbmVDb2xvciA9IGxpbmVDb2xvcjtcbiAgICAvKlxuICAgICAqIEBtZW1iZXIge251bWJlcn0gdGhlIGFscGhhIG9mIHRoZSBsaW5lIHRvIGRyYXdcbiAgICAgKi9cbiAgICB0aGlzLmxpbmVBbHBoYSA9IGxpbmVBbHBoYTtcbiAgICAvKlxuICAgICAqIEBtZW1iZXIge251bWJlcn0gY2FjaGVkIHRpbnQgb2YgdGhlIGxpbmUgdG8gZHJhd1xuICAgICAqL1xuICAgIHRoaXMuX2xpbmVUaW50ID0gbGluZUNvbG9yO1xuXG4gICAgLypcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9IHRoZSBjb2xvciBvZiB0aGUgZmlsbFxuICAgICAqL1xuICAgIHRoaXMuZmlsbENvbG9yID0gZmlsbENvbG9yO1xuXG4gICAgLypcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9IHRoZSBhbHBoYSBvZiB0aGUgZmlsbFxuICAgICAqL1xuICAgIHRoaXMuZmlsbEFscGhhID0gZmlsbEFscGhhO1xuXG4gICAgLypcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9IGNhY2hlZCB0aW50IG9mIHRoZSBmaWxsXG4gICAgICovXG4gICAgdGhpcy5fZmlsbFRpbnQgPSBmaWxsQ29sb3I7XG5cbiAgICAvKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59IHdoZXRoZXIgb3Igbm90IHRoZSBzaGFwZSBpcyBmaWxsZWQgd2l0aCBhIGNvbG91clxuICAgICAqL1xuICAgIHRoaXMuZmlsbCA9IGZpbGw7XG5cbiAgICAvKlxuICAgICAqIEBtZW1iZXIge1BJWEkuQ2lyY2xlfFBJWEkuUmVjdGFuZ2xlfFBJWEkuRWxsaXBzZXxQSVhJLkxpbmV8UElYSS5Qb2x5Z29ufSBUaGUgc2hhcGUgb2JqZWN0IHRvIGRyYXcuXG4gICAgICovXG4gICAgdGhpcy5zaGFwZSA9IHNoYXBlO1xuXG4gICAgLypcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9IFRoZSB0eXBlIG9mIHRoZSBzaGFwZSwgc2VlIHRoZSBDb25zdC5TaGFwZXMgZmlsZSBmb3IgYWxsIHRoZSBleGlzdGluZyB0eXBlcyxcbiAgICAgKi9cbiAgICB0aGlzLnR5cGUgPSBzaGFwZS50eXBlO1xufVxuXG5HcmFwaGljc0RhdGEucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gR3JhcGhpY3NEYXRhO1xubW9kdWxlLmV4cG9ydHMgPSBHcmFwaGljc0RhdGE7XG5cbi8qKlxuICogQ3JlYXRlcyBhIG5ldyBHcmFwaGljc0RhdGEgb2JqZWN0IHdpdGggdGhlIHNhbWUgdmFsdWVzIGFzIHRoaXMgb25lLlxuICpcbiAqIEByZXR1cm4ge1BJWEkuR3JhcGhpY3NEYXRhfVxuICovXG5HcmFwaGljc0RhdGEucHJvdG90eXBlLmNsb25lID0gZnVuY3Rpb24gKClcbntcbiAgICByZXR1cm4gbmV3IEdyYXBoaWNzRGF0YShcbiAgICAgICAgdGhpcy5saW5lV2lkdGgsXG4gICAgICAgIHRoaXMubGluZUNvbG9yLFxuICAgICAgICB0aGlzLmxpbmVBbHBoYSxcbiAgICAgICAgdGhpcy5maWxsQ29sb3IsXG4gICAgICAgIHRoaXMuZmlsbEFscGhhLFxuICAgICAgICB0aGlzLmZpbGwsXG4gICAgICAgIHRoaXMuc2hhcGVcbiAgICApO1xufTtcblxuLyoqXG4gKiBEZXN0cm95cyB0aGUgR3JhcGhpY3MgZGF0YS5cbiAqL1xuR3JhcGhpY3NEYXRhLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKCkge1xuICAgIHRoaXMuc2hhcGUgPSBudWxsO1xufTtcbiIsInZhciB1dGlscyA9IHJlcXVpcmUoJy4uLy4uL3V0aWxzJyksXG4gICAgbWF0aCA9IHJlcXVpcmUoJy4uLy4uL21hdGgnKSxcbiAgICBDT05TVCA9IHJlcXVpcmUoJy4uLy4uL2NvbnN0JyksXG4gICAgT2JqZWN0UmVuZGVyZXIgPSByZXF1aXJlKCcuLi8uLi9yZW5kZXJlcnMvd2ViZ2wvdXRpbHMvT2JqZWN0UmVuZGVyZXInKSxcbiAgICBXZWJHTFJlbmRlcmVyID0gcmVxdWlyZSgnLi4vLi4vcmVuZGVyZXJzL3dlYmdsL1dlYkdMUmVuZGVyZXInKSxcbiAgICBXZWJHTEdyYXBoaWNzRGF0YSA9IHJlcXVpcmUoJy4vV2ViR0xHcmFwaGljc0RhdGEnKSxcbiAgICBQcmltaXRpdmVTaGFkZXIgPSByZXF1aXJlKCcuL1ByaW1pdGl2ZVNoYWRlcicpLFxuXG4gICAgLy8gc29tZSBkcmF3aW5nIGZ1bmN0aW9ucy4uXG4gICAgYnVpbGRMaW5lID0gcmVxdWlyZSgnLi9idWlsZExpbmUnKTtcbiAgICBidWlsZFBvbHkgPSByZXF1aXJlKCcuL2J1aWxkUG9seScpO1xuICAgIGJ1aWxkQ29tcGxleFBvbHkgPSByZXF1aXJlKCcuL2J1aWxkQ29tcGxleFBvbHknKTtcbiAgICBidWlsZFJlY3RhbmdsZSA9IHJlcXVpcmUoJy4vYnVpbGRSZWN0YW5nbGUnKTtcbiAgICBidWlsZFJvdW5kZWRSZWN0YW5nbGUgPSByZXF1aXJlKCcuL2J1aWxkUm91bmRlZFJlY3RhbmdsZScpO1xuICAgIGJ1aWxkQ2lyY2xlID0gcmVxdWlyZSgnLi9idWlsZENpcmNsZScpO1xuXG4gICAgZWFyY3V0ID0gcmVxdWlyZSgnZWFyY3V0Jyk7XG5cbi8qKlxuICogUmVuZGVycyB0aGUgZ3JhcGhpY3Mgb2JqZWN0LlxuICpcbiAqIEBjbGFzc1xuICogQHByaXZhdGVcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAZXh0ZW5kcyBQSVhJLk9iamVjdFJlbmRlcmVyXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcn0gVGhlIHJlbmRlcmVyIHRoaXMgb2JqZWN0IHJlbmRlcmVyIHdvcmtzIGZvci5cbiAqL1xuZnVuY3Rpb24gR3JhcGhpY3NSZW5kZXJlcihyZW5kZXJlcilcbntcbiAgICBPYmplY3RSZW5kZXJlci5jYWxsKHRoaXMsIHJlbmRlcmVyKTtcblxuICAgIHRoaXMuZ3JhcGhpY3NEYXRhUG9vbCA9IFtdO1xuXG4gICAgdGhpcy5wcmltaXRpdmVTaGFkZXIgPSBudWxsO1xuICAgIHRoaXMuY29tcGxleFByaW1pdGl2ZVNoYWRlciA9IG51bGw7XG5cbiAgICB0aGlzLmdsID0gcmVuZGVyZXIuZ2w7XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIGlzIHRoZSBtYXhpbXVtIG51bWJlciBvZiBwb2ludHMgYSBwb2x5IGNhbiBjb250YWluIGJlZm9yZSBpdCBpcyByZW5kZXJlZCBhcyBhIGNvbXBsZXggcG9seWdvbiAodXNpbmcgdGhlIHN0ZW5jaWwgYnVmZmVyKVxuICAgICAqIEB0eXBlIHtOdW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy5tYXhpbXVtU2ltcGxlUG9seVNpemUgPSAyMDA7XG59XG5cbkdyYXBoaWNzUmVuZGVyZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShPYmplY3RSZW5kZXJlci5wcm90b3R5cGUpO1xuR3JhcGhpY3NSZW5kZXJlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBHcmFwaGljc1JlbmRlcmVyO1xubW9kdWxlLmV4cG9ydHMgPSBHcmFwaGljc1JlbmRlcmVyO1xuXG5XZWJHTFJlbmRlcmVyLnJlZ2lzdGVyUGx1Z2luKCdncmFwaGljcycsIEdyYXBoaWNzUmVuZGVyZXIpO1xuXG4vKipcbiAqIENhbGxlZCB3aGVuIHRoZXJlIGlzIGEgV2ViR0wgY29udGV4dCBjaGFuZ2VcbiAqXG4gKiBAcHJpdmF0ZVxuICpcbiAqL1xuR3JhcGhpY3NSZW5kZXJlci5wcm90b3R5cGUub25Db250ZXh0Q2hhbmdlID0gZnVuY3Rpb24oKVxue1xuICAgIHRoaXMuZ2wgPSB0aGlzLnJlbmRlcmVyLmdsO1xuICAgIHRoaXMucHJpbWl0aXZlU2hhZGVyID0gbmV3IFByaW1pdGl2ZVNoYWRlcih0aGlzLmdsKVxufTtcblxuLyoqXG4gKiBEZXN0cm95cyB0aGlzIHJlbmRlcmVyLlxuICpcbiAqL1xuR3JhcGhpY3NSZW5kZXJlci5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uICgpIHtcbiAgICBPYmplY3RSZW5kZXJlci5wcm90b3R5cGUuZGVzdHJveS5jYWxsKHRoaXMpO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmdyYXBoaWNzRGF0YVBvb2wubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgdGhpcy5ncmFwaGljc0RhdGFQb29sW2ldLmRlc3Ryb3koKTtcbiAgICB9XG5cbiAgICB0aGlzLmdyYXBoaWNzRGF0YVBvb2wgPSBudWxsO1xufTtcblxuLyoqXG4gKiBSZW5kZXJzIGEgZ3JhcGhpY3Mgb2JqZWN0LlxuICpcbiAqIEBwYXJhbSBncmFwaGljcyB7UElYSS5HcmFwaGljc30gVGhlIGdyYXBoaWNzIG9iamVjdCB0byByZW5kZXIuXG4gKi9cbkdyYXBoaWNzUmVuZGVyZXIucHJvdG90eXBlLnJlbmRlciA9IGZ1bmN0aW9uKGdyYXBoaWNzKVxue1xuICAgIHZhciByZW5kZXJlciA9IHRoaXMucmVuZGVyZXI7XG4gICAgdmFyIGdsID0gcmVuZGVyZXIuZ2w7XG5cbiAgICB2YXIgd2ViR0xEYXRhO1xuICAvLyAgY29uc29sZS5sb2coZ3JhcGhpY3MpXG4gICAgaWYgKGdyYXBoaWNzLmRpcnR5IHx8ICFncmFwaGljcy5fd2ViR0xbZ2wuaWRdKVxuICAgIHtcbiAgICAgICAgdGhpcy51cGRhdGVHcmFwaGljcyhncmFwaGljcyk7XG4gICAgfVxuXG4gICAgdmFyIHdlYkdMID0gZ3JhcGhpY3MuX3dlYkdMW2dsLmlkXTtcblxuICAgIC8vIFRoaXMgIGNvdWxkIGJlIHNwZWVkZWQgdXAgZm9yIHN1cmUhXG5cbiAgICByZW5kZXJlci5ibGVuZE1vZGVNYW5hZ2VyLnNldEJsZW5kTW9kZSggZ3JhcGhpY3MuYmxlbmRNb2RlICk7XG5cbi8vICAgIHZhciBtYXRyaXggPSAgZ3JhcGhpY3Mud29ybGRUcmFuc2Zvcm0uY2xvbmUoKTtcbi8vICAgIHZhciBtYXRyaXggPSAgcmVuZGVyZXIuY3VycmVudFJlbmRlclRhcmdldC5wcm9qZWN0aW9uTWF0cml4LmNsb25lKCk7XG4vLyAgICBtYXRyaXguYXBwZW5kKGdyYXBoaWNzLndvcmxkVHJhbnNmb3JtKTtcblxuICAgIGZvciAodmFyIGkgPSAwLCBuID0gd2ViR0wuZGF0YS5sZW5ndGg7IGkgPCBuOyBpKyspXG4gICAge1xuICAgICAgICB3ZWJHTERhdGEgPSB3ZWJHTC5kYXRhW2ldO1xuXG4gICAgICAgIGlmICh3ZWJHTC5kYXRhW2ldLm1vZGUgPT09IDEpXG4gICAgICAgIHtcbiAgICAgICAgICAgIC8vVE9ETyBmaXggdGhpcyBvbmUhXG4gICAgICAgICAgICBcbiAgICAgICAgICAgIC8qXG4gICAgICAgICAgICByZW5kZXJlci5zdGVuY2lsTWFuYWdlci5wdXNoU3RlbmNpbChncmFwaGljcywgd2ViR0xEYXRhKTtcblxuICAgICAgICAgICAgZ2wudW5pZm9ybTFmKHJlbmRlcmVyLnNoYWRlck1hbmFnZXIuY29tcGxleFByaW1pdGl2ZVNoYWRlci51bmlmb3Jtcy5hbHBoYS5fbG9jYXRpb24sIGdyYXBoaWNzLndvcmxkQWxwaGEgKiB3ZWJHTERhdGEuYWxwaGEpO1xuXG4gICAgICAgICAgICAvLyByZW5kZXIgcXVhZC4uXG4gICAgICAgICAgICBnbC5kcmF3RWxlbWVudHMoZ2wuVFJJQU5HTEVfRkFOLCA0LCBnbC5VTlNJR05FRF9TSE9SVCwgKCB3ZWJHTERhdGEuaW5kaWNlcy5sZW5ndGggLSA0ICkgKiAyICk7XG5cbiAgICAgICAgICAgIHJlbmRlcmVyLnN0ZW5jaWxNYW5hZ2VyLnBvcFN0ZW5jaWwoZ3JhcGhpY3MsIHdlYkdMRGF0YSk7XG4gICAgICAgICAgICAqL1xuICAgICAgICB9XG4gICAgICAgIGVsc2VcbiAgICAgICAge1xuXG4gICAgICAgICAgICBzaGFkZXIgPSB0aGlzLnByaW1pdGl2ZVNoYWRlcjtcblxuICAgICAgICAgICAgcmVuZGVyZXIuYmluZFNoYWRlcihzaGFkZXIpXG5cbiAgICAgICAgICAgIHNoYWRlci51bmlmb3Jtcy50cmFuc2xhdGlvbk1hdHJpeCA9IGdyYXBoaWNzLndvcmxkVHJhbnNmb3JtLnRvQXJyYXkodHJ1ZSk7XG4gICAgICAgICAgICBzaGFkZXIudW5pZm9ybXMudGludCA9IHV0aWxzLmhleDJyZ2IoZ3JhcGhpY3MudGludCk7XG4gICAgICAgICAgICBzaGFkZXIudW5pZm9ybXMuYWxwaGEgPSBncmFwaGljcy53b3JsZEFscGhhO1xuXG5cbiAgICAgICAgICAgIGdsLmJpbmRCdWZmZXIoZ2wuQVJSQVlfQlVGRkVSLCB3ZWJHTERhdGEuYnVmZmVyKTtcblxuICAgICAgICAgICAgc2hhZGVyID0gdGhpcy5wcmltaXRpdmVTaGFkZXI7XG5cbiAgICAgICAgICAgIHNoYWRlci5hdHRyaWJ1dGVzLmFWZXJ0ZXhQb3NpdGlvbi5wb2ludGVyKGdsLkZMT0FULCBmYWxzZSwgNCAqIDYsIDApO1xuICAgICAgICAgICAgc2hhZGVyLmF0dHJpYnV0ZXMuYUNvbG9yLnBvaW50ZXIoZ2wuRkxPQVQsIGZhbHNlLCA0ICogNiwgMiAqIDQpO1xuXG4gICAgICAgICAgICBnbC5lbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShzaGFkZXIuYXR0cmlidXRlcy5hVmVydGV4UG9zaXRpb24ubG9jYXRpb24pO1xuICAgICAgICAgICAgZ2wuZW5hYmxlVmVydGV4QXR0cmliQXJyYXkoc2hhZGVyLmF0dHJpYnV0ZXMuYUNvbG9yLmxvY2F0aW9uKTtcblxuICAgICAgICAgICAgLy8gc2V0IHRoZSBpbmRleCBidWZmZXIhXG4gICAgICAgICAgICBnbC5iaW5kQnVmZmVyKGdsLkVMRU1FTlRfQVJSQVlfQlVGRkVSLCB3ZWJHTERhdGEuaW5kZXhCdWZmZXIpO1xuICAgICAgICAgICAgZ2wuZHJhd0VsZW1lbnRzKGdsLlRSSUFOR0xFX1NUUklQLCAgd2ViR0xEYXRhLmluZGljZXMubGVuZ3RoLCBnbC5VTlNJR05FRF9TSE9SVCwgMCApO1xuICAgICAgICB9XG5cbiAgICAgICAgcmVuZGVyZXIuZHJhd0NvdW50Kys7XG4gICAgfVxufTtcblxuLyoqXG4gKiBVcGRhdGVzIHRoZSBncmFwaGljcyBvYmplY3RcbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIGdyYXBoaWNzIHtQSVhJLkdyYXBoaWNzfSBUaGUgZ3JhcGhpY3Mgb2JqZWN0IHRvIHVwZGF0ZVxuICovXG5HcmFwaGljc1JlbmRlcmVyLnByb3RvdHlwZS51cGRhdGVHcmFwaGljcyA9IGZ1bmN0aW9uKGdyYXBoaWNzKVxue1xuICAgIHZhciBnbCA9IHRoaXMucmVuZGVyZXIuZ2w7XG5cbiAgICAgLy8gZ2V0IHRoZSBjb250ZXh0cyBncmFwaGljcyBvYmplY3RcbiAgICB2YXIgd2ViR0wgPSBncmFwaGljcy5fd2ViR0xbZ2wuaWRdO1xuXG4gICAgLy8gaWYgdGhlIGdyYXBoaWNzIG9iamVjdCBkb2VzIG5vdCBleGlzdCBpbiB0aGUgd2ViR0wgY29udGV4dCB0aW1lIHRvIGNyZWF0ZSBpdCFcbiAgICBpZiAoIXdlYkdMKVxuICAgIHtcbiAgICAgICAgd2ViR0wgPSBncmFwaGljcy5fd2ViR0xbZ2wuaWRdID0ge2xhc3RJbmRleDowLCBkYXRhOltdLCBnbDpnbH07XG4gICAgfVxuXG4gICBcbiAgICAvLyBmbGFnIHRoZSBncmFwaGljcyBhcyBub3QgZGlydHkgYXMgd2UgYXJlIGFib3V0IHRvIHVwZGF0ZSBpdC4uLlxuICAgIGdyYXBoaWNzLmRpcnR5ID0gZmFsc2U7XG5cbiAgICB2YXIgaTtcblxuICAgIC8vIGlmIHRoZSB1c2VyIGNsZWFyZWQgdGhlIGdyYXBoaWNzIG9iamVjdCB3ZSB3aWxsIG5lZWQgdG8gY2xlYXIgZXZlcnkgb2JqZWN0XG4gICAgaWYgKGdyYXBoaWNzLmNsZWFyRGlydHkpXG4gICAge1xuICAgICAgICBncmFwaGljcy5jbGVhckRpcnR5ID0gZmFsc2U7XG5cbiAgICAgICAgLy8gbG9vcCB0aHJvdWdoIGFuZCByZXR1cm4gYWxsIHRoZSB3ZWJHTERhdGFzIHRvIHRoZSBvYmplY3QgcG9vbCBzbyB0aGFuIGNhbiBiZSByZXVzZWQgbGF0ZXIgb25cbiAgICAgICAgZm9yIChpID0gMDsgaSA8IHdlYkdMLmRhdGEubGVuZ3RoOyBpKyspXG4gICAgICAgIHtcbiAgICAgICAgICAgIHZhciBncmFwaGljc0RhdGEgPSB3ZWJHTC5kYXRhW2ldO1xuICAgICAgICAgICAgZ3JhcGhpY3NEYXRhLnJlc2V0KCk7XG4gICAgICAgICAgICB0aGlzLmdyYXBoaWNzRGF0YVBvb2wucHVzaCggZ3JhcGhpY3NEYXRhICk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBjbGVhciB0aGUgYXJyYXkgYW5kIHJlc2V0IHRoZSBpbmRleC4uXG4gICAgICAgIHdlYkdMLmRhdGEgPSBbXTtcbiAgICAgICAgd2ViR0wubGFzdEluZGV4ID0gMDtcbiAgICB9XG5cbiAgICB2YXIgd2ViR0xEYXRhO1xuXG4gICAgLy8gbG9vcCB0aHJvdWdoIHRoZSBncmFwaGljcyBkYXRhcyBhbmQgY29uc3RydWN0IGVhY2ggb25lLi5cbiAgICAvLyBpZiB0aGUgb2JqZWN0IGlzIGEgY29tcGxleCBmaWxsIHRoZW4gdGhlIG5ldyBzdGVuY2lsIGJ1ZmZlciB0ZWNobmlxdWUgd2lsbCBiZSB1c2VkXG4gICAgLy8gb3RoZXIgd2lzZSBncmFwaGljcyBvYmplY3RzIHdpbGwgYmUgcHVzaGVkIGludG8gYSBiYXRjaC4uXG4gICAgZm9yIChpID0gd2ViR0wubGFzdEluZGV4OyBpIDwgZ3JhcGhpY3MuZ3JhcGhpY3NEYXRhLmxlbmd0aDsgaSsrKVxuICAgIHtcbiAgICAgICAgdmFyIGRhdGEgPSBncmFwaGljcy5ncmFwaGljc0RhdGFbaV07XG5cbiAgICAgICAgaWYgKGRhdGEudHlwZSA9PT0gQ09OU1QuU0hBUEVTLlBPTFkpXG4gICAgICAgIHtcbiAgICAgICAgICAgIC8vIG5lZWQgdG8gYWRkIHRoZSBwb2ludHMgdGhlIHRoZSBncmFwaGljcyBvYmplY3QuLlxuICAgICAgICAgICAgZGF0YS5wb2ludHMgPSBkYXRhLnNoYXBlLnBvaW50cy5zbGljZSgpO1xuICAgICAgICAgICAgaWYgKGRhdGEuc2hhcGUuY2xvc2VkKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIC8vIGNsb3NlIHRoZSBwb2x5IGlmIHRoZSB2YWx1ZSBpcyB0cnVlIVxuICAgICAgICAgICAgICAgIGlmIChkYXRhLnBvaW50c1swXSAhPT0gZGF0YS5wb2ludHNbZGF0YS5wb2ludHMubGVuZ3RoLTJdIHx8IGRhdGEucG9pbnRzWzFdICE9PSBkYXRhLnBvaW50c1tkYXRhLnBvaW50cy5sZW5ndGgtMV0pXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBkYXRhLnBvaW50cy5wdXNoKGRhdGEucG9pbnRzWzBdLCBkYXRhLnBvaW50c1sxXSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBNQUtFIFNVUkUgV0UgSEFWRSBUSEUgQ09SUkVDVCBUWVBFLi5cbiAgICAgICAgICAgIGlmIChkYXRhLmZpbGwpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgaWYgKGRhdGEucG9pbnRzLmxlbmd0aCA+PSA2KVxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGRhdGEucG9pbnRzLmxlbmd0aCA8IHRoaXMubWF4aW11bVNpbXBsZVBvbHlTaXplICogMilcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgd2ViR0xEYXRhID0gdGhpcy5zd2l0Y2hNb2RlKHdlYkdMLCAwKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNhbkRyYXdVc2luZ1NpbXBsZSA9IGJ1aWxkUG9seShkYXRhLCB3ZWJHTERhdGEpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWNhbkRyYXdVc2luZ1NpbXBsZSlcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3ZWJHTERhdGEgPSB0aGlzLnN3aXRjaE1vZGUod2ViR0wsIDEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1aWxkQ29tcGxleFBvbHkoZGF0YSwgd2ViR0xEYXRhKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgd2ViR0xEYXRhID0gdGhpcy5zd2l0Y2hNb2RlKHdlYkdMLCAxKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJ1aWxkQ29tcGxleFBvbHkoZGF0YSwgd2ViR0xEYXRhKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGRhdGEubGluZVdpZHRoID4gMClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB3ZWJHTERhdGEgPSB0aGlzLnN3aXRjaE1vZGUod2ViR0wsIDApO1xuICAgICAgICAgICAgICAgIGJ1aWxkTGluZShkYXRhLCB3ZWJHTERhdGEpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2VcbiAgICAgICAge1xuICAgICAgICAgICAgd2ViR0xEYXRhID0gdGhpcy5zd2l0Y2hNb2RlKHdlYkdMLCAwKTtcblxuICAgICAgICAgICAgaWYgKGRhdGEudHlwZSA9PT0gQ09OU1QuU0hBUEVTLlJFQ1QpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgYnVpbGRSZWN0YW5nbGUoZGF0YSwgd2ViR0xEYXRhKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGRhdGEudHlwZSA9PT0gQ09OU1QuU0hBUEVTLkNJUkMgfHwgZGF0YS50eXBlID09PSBDT05TVC5TSEFQRVMuRUxJUClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBidWlsZENpcmNsZShkYXRhLCB3ZWJHTERhdGEpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoZGF0YS50eXBlID09PSBDT05TVC5TSEFQRVMuUlJFQylcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBidWlsZFJvdW5kZWRSZWN0YW5nbGUoZGF0YSwgd2ViR0xEYXRhKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHdlYkdMLmxhc3RJbmRleCsrO1xuICAgIH1cblxuICAgIC8vIHVwbG9hZCBhbGwgdGhlIGRpcnR5IGRhdGEuLi5cbiAgICBmb3IgKGkgPSAwOyBpIDwgd2ViR0wuZGF0YS5sZW5ndGg7IGkrKylcbiAgICB7XG4gICAgICAgIHdlYkdMRGF0YSA9IHdlYkdMLmRhdGFbaV07XG5cbiAgICAgICAgaWYgKHdlYkdMRGF0YS5kaXJ0eSlcbiAgICAgICAge1xuICAgICAgICAgICAgd2ViR0xEYXRhLnVwbG9hZCgpO1xuICAgICAgICB9XG4gICAgfVxufTtcblxuLyoqXG4gKlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0gd2ViR0wge1dlYkdMUmVuZGVyaW5nQ29udGV4dH0gdGhlIGN1cnJlbnQgV2ViR0wgZHJhd2luZyBjb250ZXh0XG4gKiBAcGFyYW0gdHlwZSB7bnVtYmVyfSBUT0RPIEBBbHZpblxuICovXG5HcmFwaGljc1JlbmRlcmVyLnByb3RvdHlwZS5zd2l0Y2hNb2RlID0gZnVuY3Rpb24gKHdlYkdMLCB0eXBlKVxue1xuICAgIHZhciB3ZWJHTERhdGE7XG5cbiAgICBpZiAoIXdlYkdMLmRhdGEubGVuZ3RoKVxuICAgIHtcbiAgICAgICAgd2ViR0xEYXRhID0gdGhpcy5ncmFwaGljc0RhdGFQb29sLnBvcCgpIHx8IG5ldyBXZWJHTEdyYXBoaWNzRGF0YSh3ZWJHTC5nbCk7XG4gICAgICAgIHdlYkdMRGF0YS5tb2RlID0gdHlwZTtcbiAgICAgICAgd2ViR0wuZGF0YS5wdXNoKHdlYkdMRGF0YSk7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHdlYkdMRGF0YSA9IHdlYkdMLmRhdGFbd2ViR0wuZGF0YS5sZW5ndGgtMV07XG5cbiAgICAgICAgaWYgKCh3ZWJHTERhdGEucG9pbnRzLmxlbmd0aCA+IDMyMDAwMCkgfHwgd2ViR0xEYXRhLm1vZGUgIT09IHR5cGUgfHwgdHlwZSA9PT0gMSlcbiAgICAgICAge1xuICAgICAgICAgICAgd2ViR0xEYXRhID0gdGhpcy5ncmFwaGljc0RhdGFQb29sLnBvcCgpIHx8IG5ldyBXZWJHTEdyYXBoaWNzRGF0YSh3ZWJHTC5nbCk7XG4gICAgICAgICAgICB3ZWJHTERhdGEubW9kZSA9IHR5cGU7XG4gICAgICAgICAgICB3ZWJHTC5kYXRhLnB1c2god2ViR0xEYXRhKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHdlYkdMRGF0YS5kaXJ0eSA9IHRydWU7XG5cbiAgICByZXR1cm4gd2ViR0xEYXRhO1xufTtcblxuIiwidmFyIFNoYWRlciA9IHJlcXVpcmUoJ3BpeGktZ2wtY29yZScpLkdMU2hhZGVyO1xuXG4vKipcbiAqIFRoaXMgc2hhZGVyIGlzIHVzZWQgdG8gZHJhdyBzaW1wbGUgcHJpbWl0aXZlIHNoYXBlcyBmb3Ige0BsaW5rIFBJWEkuR3JhcGhpY3N9LlxuICpcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqIEBleHRlbmRzIFBJWEkuU2hhZGVyXG4gKiBAcGFyYW0gc2hhZGVyTWFuYWdlciB7U2hhZGVyTWFuYWdlcn0gVGhlIHdlYmdsIHNoYWRlciBtYW5hZ2VyIHRoaXMgc2hhZGVyIHdvcmtzIGZvci5cbiAqL1xuZnVuY3Rpb24gUHJpbWl0aXZlU2hhZGVyKGdsKVxue1xuICAgIFNoYWRlci5jYWxsKHRoaXMsXG4gICAgICAgIGdsLFxuICAgICAgICAvLyB2ZXJ0ZXggc2hhZGVyXG4gICAgICAgIFtcbiAgICAgICAgICAgICdhdHRyaWJ1dGUgdmVjMiBhVmVydGV4UG9zaXRpb247JyxcbiAgICAgICAgICAgICdhdHRyaWJ1dGUgdmVjNCBhQ29sb3I7JyxcblxuICAgICAgICAgICAgJ3VuaWZvcm0gbWF0MyB0cmFuc2xhdGlvbk1hdHJpeDsnLFxuICAgICAgICAgICAgJ3VuaWZvcm0gbWF0MyBwcm9qZWN0aW9uTWF0cml4OycsXG5cbiAgICAgICAgICAgICd1bmlmb3JtIGZsb2F0IGFscGhhOycsXG4gICAgICAgICAgICAndW5pZm9ybSBmbG9hdCBmbGlwWTsnLFxuICAgICAgICAgICAgJ3VuaWZvcm0gdmVjMyB0aW50OycsXG5cbiAgICAgICAgICAgICd2YXJ5aW5nIHZlYzQgdkNvbG9yOycsXG5cbiAgICAgICAgICAgICd2b2lkIG1haW4odm9pZCl7JyxcbiAgICAgICAgICAgICcgICBnbF9Qb3NpdGlvbiA9IHZlYzQoKHByb2plY3Rpb25NYXRyaXggKiB0cmFuc2xhdGlvbk1hdHJpeCAqIHZlYzMoYVZlcnRleFBvc2l0aW9uLCAxLjApKS54eSwgMC4wLCAxLjApOycsXG4gICAgICAgICAgICAnICAgdkNvbG9yID0gYUNvbG9yICogdmVjNCh0aW50ICogYWxwaGEsIGFscGhhKTsnLFxuICAgICAgICAgICAgJ30nXG4gICAgICAgIF0uam9pbignXFxuJyksXG4gICAgICAgIC8vIGZyYWdtZW50IHNoYWRlclxuICAgICAgICBbXG4gICAgICAgICAgICAncHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7JyxcblxuICAgICAgICAgICAgJ3ZhcnlpbmcgdmVjNCB2Q29sb3I7JyxcblxuICAgICAgICAgICAgJ3ZvaWQgbWFpbih2b2lkKXsnLFxuICAgICAgICAgICAgJyAgIGdsX0ZyYWdDb2xvciA9IHZDb2xvcjsnLFxuICAgICAgICAgICAgJ30nXG4gICAgICAgIF0uam9pbignXFxuJylcbiAgICApO1xufVxuXG5QcmltaXRpdmVTaGFkZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShTaGFkZXIucHJvdG90eXBlKTtcblByaW1pdGl2ZVNoYWRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBQcmltaXRpdmVTaGFkZXI7XG5cbm1vZHVsZS5leHBvcnRzID0gUHJpbWl0aXZlU2hhZGVyO1xuIiwiLyoqXG4gKiBBbiBvYmplY3QgY29udGFpbmluZyBXZWJHTCBzcGVjaWZpYyBwcm9wZXJ0aWVzIHRvIGJlIHVzZWQgYnkgdGhlIFdlYkdMIHJlbmRlcmVyXG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIGdsIHtXZWJHTFJlbmRlcmluZ0NvbnRleHR9IHRoZSBjdXJyZW50IFdlYkdMIGRyYXdpbmcgY29udGV4dFxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gV2ViR0xHcmFwaGljc0RhdGEoZ2wpIHtcblxuICAgIC8qKlxuICAgICAqIFRoZSBjdXJyZW50IFdlYkdMIGRyYXdpbmcgY29udGV4dFxuICAgICAqXG4gICAgICogQG1lbWJlciB7V2ViR0xSZW5kZXJpbmdDb250ZXh0fVxuICAgICAqL1xuICAgIHRoaXMuZ2wgPSBnbDtcblxuICAgIC8vVE9ETyBkb2VzIHRoaXMgbmVlZCB0byBiZSBzcGxpdCBiZWZvcmUgdXBsb2Rpbmc/P1xuICAgIC8qKlxuICAgICAqIEFuIGFycmF5IG9mIGNvbG9yIGNvbXBvbmVudHMgKHIsZyxiKVxuICAgICAqIEBtZW1iZXIge251bWJlcltdfVxuICAgICAqL1xuICAgIHRoaXMuY29sb3IgPSBbMCwwLDBdOyAvLyBjb2xvciBzcGxpdCFcblxuICAgIC8qKlxuICAgICAqIEFuIGFycmF5IG9mIHBvaW50cyB0byBkcmF3XG4gICAgICogQG1lbWJlciB7UElYSS5Qb2ludFtdfVxuICAgICAqL1xuICAgIHRoaXMucG9pbnRzID0gW107XG5cbiAgICAvKipcbiAgICAgKiBUaGUgaW5kaWNlcyBvZiB0aGUgdmVydGljZXNcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJbXX1cbiAgICAgKi9cbiAgICB0aGlzLmluZGljZXMgPSBbXTtcbiAgICAvKipcbiAgICAgKiBUaGUgbWFpbiBidWZmZXJcbiAgICAgKiBAbWVtYmVyIHtXZWJHTEJ1ZmZlcn1cbiAgICAgKi9cbiAgICB0aGlzLmJ1ZmZlciA9IGdsLmNyZWF0ZUJ1ZmZlcigpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGluZGV4IGJ1ZmZlclxuICAgICAqIEBtZW1iZXIge1dlYkdMQnVmZmVyfVxuICAgICAqL1xuICAgIHRoaXMuaW5kZXhCdWZmZXIgPSBnbC5jcmVhdGVCdWZmZXIoKTtcblxuICAgIC8qKlxuICAgICAqIHRvZG8gQGFsdmluXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMubW9kZSA9IDE7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYWxwaGEgb2YgdGhlIGdyYXBoaWNzXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMuYWxwaGEgPSAxO1xuXG4gICAgLyoqXG4gICAgICogV2hldGhlciB0aGlzIGdyYXBoaWNzIGlzIGRpcnR5IG9yIG5vdFxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICovXG4gICAgdGhpcy5kaXJ0eSA9IHRydWU7XG5cbiAgICB0aGlzLmdsUG9pbnRzID0gbnVsbDtcbiAgICB0aGlzLmdsSW5kaWNlcyA9IG51bGw7XG59XG5cbldlYkdMR3JhcGhpY3NEYXRhLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFdlYkdMR3JhcGhpY3NEYXRhO1xubW9kdWxlLmV4cG9ydHMgPSBXZWJHTEdyYXBoaWNzRGF0YTtcblxuLyoqXG4gKiBSZXNldHMgdGhlIHZlcnRpY2VzIGFuZCB0aGUgaW5kaWNlc1xuICovXG5XZWJHTEdyYXBoaWNzRGF0YS5wcm90b3R5cGUucmVzZXQgPSBmdW5jdGlvbiAoKSB7XG4gICAgdGhpcy5wb2ludHMubGVuZ3RoID0gMDtcbiAgICB0aGlzLmluZGljZXMubGVuZ3RoID0gMDtcbn07XG5cbi8qKlxuICogQmluZHMgdGhlIGJ1ZmZlcnMgYW5kIHVwbG9hZHMgdGhlIGRhdGFcbiAqL1xuV2ViR0xHcmFwaGljc0RhdGEucHJvdG90eXBlLnVwbG9hZCA9IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgZ2wgPSB0aGlzLmdsO1xuXG4vLyAgICB0aGlzLmxhc3RJbmRleCA9IGdyYXBoaWNzLmdyYXBoaWNzRGF0YS5sZW5ndGg7XG4gICAgdGhpcy5nbFBvaW50cyA9IG5ldyBGbG9hdDMyQXJyYXkodGhpcy5wb2ludHMpO1xuXG4gICAgZ2wuYmluZEJ1ZmZlcihnbC5BUlJBWV9CVUZGRVIsIHRoaXMuYnVmZmVyKTtcbiAgICBnbC5idWZmZXJEYXRhKGdsLkFSUkFZX0JVRkZFUiwgdGhpcy5nbFBvaW50cywgZ2wuU1RBVElDX0RSQVcpO1xuXG4gICAgdGhpcy5nbEluZGljZXMgPSBuZXcgVWludDE2QXJyYXkodGhpcy5pbmRpY2VzKTtcblxuICAgIGdsLmJpbmRCdWZmZXIoZ2wuRUxFTUVOVF9BUlJBWV9CVUZGRVIsIHRoaXMuaW5kZXhCdWZmZXIpO1xuICAgIGdsLmJ1ZmZlckRhdGEoZ2wuRUxFTUVOVF9BUlJBWV9CVUZGRVIsIHRoaXMuZ2xJbmRpY2VzLCBnbC5TVEFUSUNfRFJBVyk7XG5cbiAgICB0aGlzLmRpcnR5ID0gZmFsc2U7XG59O1xuXG5XZWJHTEdyYXBoaWNzRGF0YS5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uICgpIHtcbiAgICB0aGlzLmNvbG9yID0gbnVsbDtcbiAgICB0aGlzLnBvaW50cyA9IG51bGw7XG4gICAgdGhpcy5pbmRpY2VzID0gbnVsbDtcblxuICAgIHRoaXMuZ2wuZGVsZXRlQnVmZmVyKHRoaXMuYnVmZmVyKTtcbiAgICB0aGlzLmdsLmRlbGV0ZUJ1ZmZlcih0aGlzLmluZGV4QnVmZmVyKTtcbiAgICBcbiAgICB0aGlzLmdsID0gbnVsbDtcblxuICAgIHRoaXMuYnVmZmVyID0gbnVsbDtcbiAgICB0aGlzLmluZGV4QnVmZmVyID0gbnVsbDtcblxuICAgIHRoaXMuZ2xQb2ludHMgPSBudWxsO1xuICAgIHRoaXMuZ2xJbmRpY2VzID0gbnVsbDtcbn07XG4iLCJ2YXIgYnVpbGRMaW5lID0gcmVxdWlyZSgnLi9idWlsZExpbmUnKSxcbiAgICB1dGlscyA9IHJlcXVpcmUoJy4uLy4uL3V0aWxzJyk7XG5cbi8qKlxuICogQnVpbGRzIGEgY2lyY2xlIHRvIGRyYXdcbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIGdyYXBoaWNzRGF0YSB7UElYSS5HcmFwaGljc30gVGhlIGdyYXBoaWNzIG9iamVjdCB0byBkcmF3XG4gKiBAcGFyYW0gd2ViR0xEYXRhIHtvYmplY3R9IGFuIG9iamVjdCBjb250YWluaW5nIGFsbCB0aGUgd2ViR0wtc3BlY2lmaWMgaW5mb3JtYXRpb24gdG8gY3JlYXRlIHRoaXMgc2hhcGVcbiAqL1xudmFyIGJ1aWxkQ2lyY2xlID0gZnVuY3Rpb24gKGdyYXBoaWNzRGF0YSwgd2ViR0xEYXRhKVxue1xuICAgIC8vIG5lZWQgdG8gY29udmVydCBwb2ludHMgdG8gYSBuaWNlIHJlZ3VsYXIgZGF0YVxuICAgIHZhciBjaXJjbGVEYXRhID0gZ3JhcGhpY3NEYXRhLnNoYXBlO1xuICAgIHZhciB4ID0gY2lyY2xlRGF0YS54O1xuICAgIHZhciB5ID0gY2lyY2xlRGF0YS55O1xuICAgIHZhciB3aWR0aDtcbiAgICB2YXIgaGVpZ2h0O1xuXG4gICAgLy8gVE9ETyAtIGJpdCBoYWNreT8/XG4gICAgaWYgKGdyYXBoaWNzRGF0YS50eXBlID09PSBDT05TVC5TSEFQRVMuQ0lSQylcbiAgICB7XG4gICAgICAgIHdpZHRoID0gY2lyY2xlRGF0YS5yYWRpdXM7XG4gICAgICAgIGhlaWdodCA9IGNpcmNsZURhdGEucmFkaXVzO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICB3aWR0aCA9IGNpcmNsZURhdGEud2lkdGg7XG4gICAgICAgIGhlaWdodCA9IGNpcmNsZURhdGEuaGVpZ2h0O1xuICAgIH1cblxuICAgIHZhciB0b3RhbFNlZ3MgPSBNYXRoLmZsb29yKDMwICogTWF0aC5zcXJ0KGNpcmNsZURhdGEucmFkaXVzKSkgfHwgTWF0aC5mbG9vcigxNSAqIE1hdGguc3FydChjaXJjbGVEYXRhLndpZHRoICsgY2lyY2xlRGF0YS5oZWlnaHQpKTtcbiAgICB2YXIgc2VnID0gKE1hdGguUEkgKiAyKSAvIHRvdGFsU2VncyA7XG5cbiAgICB2YXIgaSA9IDA7XG5cbiAgICBpZiAoZ3JhcGhpY3NEYXRhLmZpbGwpXG4gICAge1xuICAgICAgICB2YXIgY29sb3IgPSB1dGlscy5oZXgycmdiKGdyYXBoaWNzRGF0YS5maWxsQ29sb3IpO1xuICAgICAgICB2YXIgYWxwaGEgPSBncmFwaGljc0RhdGEuZmlsbEFscGhhO1xuXG4gICAgICAgIHZhciByID0gY29sb3JbMF0gKiBhbHBoYTtcbiAgICAgICAgdmFyIGcgPSBjb2xvclsxXSAqIGFscGhhO1xuICAgICAgICB2YXIgYiA9IGNvbG9yWzJdICogYWxwaGE7XG5cbiAgICAgICAgdmFyIHZlcnRzID0gd2ViR0xEYXRhLnBvaW50cztcbiAgICAgICAgdmFyIGluZGljZXMgPSB3ZWJHTERhdGEuaW5kaWNlcztcblxuICAgICAgICB2YXIgdmVjUG9zID0gdmVydHMubGVuZ3RoLzY7XG5cbiAgICAgICAgaW5kaWNlcy5wdXNoKHZlY1Bvcyk7XG5cbiAgICAgICAgZm9yIChpID0gMDsgaSA8IHRvdGFsU2VncyArIDEgOyBpKyspXG4gICAgICAgIHtcbiAgICAgICAgICAgIHZlcnRzLnB1c2goeCx5LCByLCBnLCBiLCBhbHBoYSk7XG5cbiAgICAgICAgICAgIHZlcnRzLnB1c2goeCArIE1hdGguc2luKHNlZyAqIGkpICogd2lkdGgsXG4gICAgICAgICAgICAgICAgICAgICAgIHkgKyBNYXRoLmNvcyhzZWcgKiBpKSAqIGhlaWdodCxcbiAgICAgICAgICAgICAgICAgICAgICAgciwgZywgYiwgYWxwaGEpO1xuXG4gICAgICAgICAgICBpbmRpY2VzLnB1c2godmVjUG9zKyssIHZlY1BvcysrKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGluZGljZXMucHVzaCh2ZWNQb3MtMSk7XG4gICAgfVxuXG4gICAgaWYgKGdyYXBoaWNzRGF0YS5saW5lV2lkdGgpXG4gICAge1xuICAgICAgICB2YXIgdGVtcFBvaW50cyA9IGdyYXBoaWNzRGF0YS5wb2ludHM7XG5cbiAgICAgICAgZ3JhcGhpY3NEYXRhLnBvaW50cyA9IFtdO1xuXG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCB0b3RhbFNlZ3MgKyAxOyBpKyspXG4gICAgICAgIHtcbiAgICAgICAgICAgIGdyYXBoaWNzRGF0YS5wb2ludHMucHVzaCh4ICsgTWF0aC5zaW4oc2VnICogaSkgKiB3aWR0aCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB5ICsgTWF0aC5jb3Moc2VnICogaSkgKiBoZWlnaHQpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5idWlsZExpbmUoZ3JhcGhpY3NEYXRhLCB3ZWJHTERhdGEpO1xuXG4gICAgICAgIGdyYXBoaWNzRGF0YS5wb2ludHMgPSB0ZW1wUG9pbnRzO1xuICAgIH1cbn07XG5cblxubW9kdWxlLmV4cG9ydHMgPSBidWlsZENpcmNsZTsiLCJ2YXIgYnVpbGRMaW5lID0gcmVxdWlyZSgnLi9idWlsZExpbmUnKSxcbiAgICB1dGlscyA9IHJlcXVpcmUoJy4uLy4uL3V0aWxzJyk7XG4gICAgXG5cblxuLyoqXG4gKiBCdWlsZHMgYSBjb21wbGV4IHBvbHlnb24gdG8gZHJhd1xuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0gZ3JhcGhpY3NEYXRhIHtQSVhJLkdyYXBoaWNzfSBUaGUgZ3JhcGhpY3Mgb2JqZWN0IGNvbnRhaW5pbmcgYWxsIHRoZSBuZWNlc3NhcnkgcHJvcGVydGllc1xuICogQHBhcmFtIHdlYkdMRGF0YSB7b2JqZWN0fSBhbiBvYmplY3QgY29udGFpbmluZyBhbGwgdGhlIHdlYkdMLXNwZWNpZmljIGluZm9ybWF0aW9uIHRvIGNyZWF0ZSB0aGlzIHNoYXBlXG4gKi9cbnZhciBidWlsZENvbXBsZXhQb2x5ID0gZnVuY3Rpb24gKGdyYXBoaWNzRGF0YSwgd2ViR0xEYXRhKVxue1xuICAgIC8vVE9ETyAtIG5vIG5lZWQgdG8gY29weSB0aGlzIGFzIGl0IGdldHMgdHVybmVkIGludG8gYSBGTG9hdDMyQXJyYXkgYW55d2F5cy4uXG4gICAgdmFyIHBvaW50cyA9IGdyYXBoaWNzRGF0YS5wb2ludHMuc2xpY2UoKTtcblxuICAgIGlmIChwb2ludHMubGVuZ3RoIDwgNilcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBnZXQgZmlyc3QgYW5kIGxhc3QgcG9pbnQuLiBmaWd1cmUgb3V0IHRoZSBtaWRkbGUhXG4gICAgdmFyIGluZGljZXMgPSB3ZWJHTERhdGEuaW5kaWNlcztcbiAgICB3ZWJHTERhdGEucG9pbnRzID0gcG9pbnRzO1xuICAgIHdlYkdMRGF0YS5hbHBoYSA9IGdyYXBoaWNzRGF0YS5maWxsQWxwaGE7XG4gICAgd2ViR0xEYXRhLmNvbG9yID0gdXRpbHMuaGV4MnJnYihncmFwaGljc0RhdGEuZmlsbENvbG9yKTtcblxuICAgIC8vIGNhbGNsYXRlIHRoZSBib3VuZHMuLlxuICAgIHZhciBtaW5YID0gSW5maW5pdHk7XG4gICAgdmFyIG1heFggPSAtSW5maW5pdHk7XG5cbiAgICB2YXIgbWluWSA9IEluZmluaXR5O1xuICAgIHZhciBtYXhZID0gLUluZmluaXR5O1xuXG4gICAgdmFyIHgseTtcblxuICAgIC8vIGdldCBzaXplLi5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHBvaW50cy5sZW5ndGg7IGkrPTIpXG4gICAge1xuICAgICAgICB4ID0gcG9pbnRzW2ldO1xuICAgICAgICB5ID0gcG9pbnRzW2krMV07XG5cbiAgICAgICAgbWluWCA9IHggPCBtaW5YID8geCA6IG1pblg7XG4gICAgICAgIG1heFggPSB4ID4gbWF4WCA/IHggOiBtYXhYO1xuXG4gICAgICAgIG1pblkgPSB5IDwgbWluWSA/IHkgOiBtaW5ZO1xuICAgICAgICBtYXhZID0geSA+IG1heFkgPyB5IDogbWF4WTtcbiAgICB9XG5cbiAgICAvLyBhZGQgYSBxdWFkIHRvIHRoZSBlbmQgY29zIHRoZXJlIGlzIG5vIHBvaW50IG1ha2luZyBhbm90aGVyIGJ1ZmZlciFcbiAgICBwb2ludHMucHVzaChtaW5YLCBtaW5ZLFxuICAgICAgICAgICAgICAgIG1heFgsIG1pblksXG4gICAgICAgICAgICAgICAgbWF4WCwgbWF4WSxcbiAgICAgICAgICAgICAgICBtaW5YLCBtYXhZKTtcblxuICAgIC8vIHB1c2ggYSBxdWFkIG9udG8gdGhlIGVuZC4uXG5cbiAgICAvL1RPRE8gLSB0aGlzIGFpbnQgbmVlZGVkIVxuICAgIHZhciBsZW5ndGggPSBwb2ludHMubGVuZ3RoIC8gMjtcbiAgICBmb3IgKGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspXG4gICAge1xuICAgICAgICBpbmRpY2VzLnB1c2goIGkgKTtcbiAgICB9XG5cbn07XG5cblxuXG5tb2R1bGUuZXhwb3J0cyA9IGJ1aWxkQ29tcGxleFBvbHk7IiwidmFyIG1hdGggPSByZXF1aXJlKCcuLi8uLi9tYXRoJyksXG4gICAgdXRpbHMgPSByZXF1aXJlKCcuLi8uLi91dGlscycpO1xuXG4vKipcbiAqIEJ1aWxkcyBhIGxpbmUgdG8gZHJhd1xuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0gZ3JhcGhpY3NEYXRhIHtQSVhJLkdyYXBoaWNzfSBUaGUgZ3JhcGhpY3Mgb2JqZWN0IGNvbnRhaW5pbmcgYWxsIHRoZSBuZWNlc3NhcnkgcHJvcGVydGllc1xuICogQHBhcmFtIHdlYkdMRGF0YSB7b2JqZWN0fSBhbiBvYmplY3QgY29udGFpbmluZyBhbGwgdGhlIHdlYkdMLXNwZWNpZmljIGluZm9ybWF0aW9uIHRvIGNyZWF0ZSB0aGlzIHNoYXBlXG4gKi9cbnZhciBidWlsZExpbmUgPSBmdW5jdGlvbiAoZ3JhcGhpY3NEYXRhLCB3ZWJHTERhdGEpXG57XG4gICAgLy8gVE9ETyBPUFRJTUlTRSFcbiAgICB2YXIgaSA9IDA7XG4gICAgdmFyIHBvaW50cyA9IGdyYXBoaWNzRGF0YS5wb2ludHM7XG5cbiAgICBpZiAocG9pbnRzLmxlbmd0aCA9PT0gMClcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgLy8gaWYgdGhlIGxpbmUgd2lkdGggaXMgYW4gb2RkIG51bWJlciBhZGQgMC41IHRvIGFsaWduIHRvIGEgd2hvbGUgcGl4ZWxcbiAgICAvLyBjb21tZW50aW5nIHRoaXMgb3V0IGZpeGVzICM3MTEgYW5kICMxNjIwXG4gICAgLy8gaWYgKGdyYXBoaWNzRGF0YS5saW5lV2lkdGglMilcbiAgICAvLyB7XG4gICAgLy8gICAgIGZvciAoaSA9IDA7IGkgPCBwb2ludHMubGVuZ3RoOyBpKyspXG4gICAgLy8gICAgIHtcbiAgICAvLyAgICAgICAgIHBvaW50c1tpXSArPSAwLjU7XG4gICAgLy8gICAgIH1cbiAgICAvLyB9XG5cbiAgICAvLyBnZXQgZmlyc3QgYW5kIGxhc3QgcG9pbnQuLiBmaWd1cmUgb3V0IHRoZSBtaWRkbGUhXG4gICAgdmFyIGZpcnN0UG9pbnQgPSBuZXcgbWF0aC5Qb2ludChwb2ludHNbMF0sIHBvaW50c1sxXSk7XG4gICAgdmFyIGxhc3RQb2ludCA9IG5ldyBtYXRoLlBvaW50KHBvaW50c1twb2ludHMubGVuZ3RoIC0gMl0sIHBvaW50c1twb2ludHMubGVuZ3RoIC0gMV0pO1xuXG4gICAgLy8gaWYgdGhlIGZpcnN0IHBvaW50IGlzIHRoZSBsYXN0IHBvaW50IC0gZ29ubmEgaGF2ZSBpc3N1ZXMgOilcbiAgICBpZiAoZmlyc3RQb2ludC54ID09PSBsYXN0UG9pbnQueCAmJiBmaXJzdFBvaW50LnkgPT09IGxhc3RQb2ludC55KVxuICAgIHtcbiAgICAgICAgLy8gbmVlZCB0byBjbG9uZSBhcyB3ZSBhcmUgZ29pbmcgdG8gc2xpZ2h0bHkgbW9kaWZ5IHRoZSBzaGFwZS4uXG4gICAgICAgIHBvaW50cyA9IHBvaW50cy5zbGljZSgpO1xuXG4gICAgICAgIHBvaW50cy5wb3AoKTtcbiAgICAgICAgcG9pbnRzLnBvcCgpO1xuXG4gICAgICAgIGxhc3RQb2ludCA9IG5ldyBtYXRoLlBvaW50KHBvaW50c1twb2ludHMubGVuZ3RoIC0gMl0sIHBvaW50c1twb2ludHMubGVuZ3RoIC0gMV0pO1xuXG4gICAgICAgIHZhciBtaWRQb2ludFggPSBsYXN0UG9pbnQueCArIChmaXJzdFBvaW50LnggLSBsYXN0UG9pbnQueCkgKjAuNTtcbiAgICAgICAgdmFyIG1pZFBvaW50WSA9IGxhc3RQb2ludC55ICsgKGZpcnN0UG9pbnQueSAtIGxhc3RQb2ludC55KSAqMC41O1xuXG4gICAgICAgIHBvaW50cy51bnNoaWZ0KG1pZFBvaW50WCwgbWlkUG9pbnRZKTtcbiAgICAgICAgcG9pbnRzLnB1c2gobWlkUG9pbnRYLCBtaWRQb2ludFkpO1xuICAgIH1cblxuICAgIHZhciB2ZXJ0cyA9IHdlYkdMRGF0YS5wb2ludHM7XG4gICAgdmFyIGluZGljZXMgPSB3ZWJHTERhdGEuaW5kaWNlcztcbiAgICB2YXIgbGVuZ3RoID0gcG9pbnRzLmxlbmd0aCAvIDI7XG4gICAgdmFyIGluZGV4Q291bnQgPSBwb2ludHMubGVuZ3RoO1xuICAgIHZhciBpbmRleFN0YXJ0ID0gdmVydHMubGVuZ3RoLzY7XG5cbiAgICAvLyBEUkFXIHRoZSBMaW5lXG4gICAgdmFyIHdpZHRoID0gZ3JhcGhpY3NEYXRhLmxpbmVXaWR0aCAvIDI7XG5cbiAgICAvLyBzb3J0IGNvbG9yXG4gICAgdmFyIGNvbG9yID0gdXRpbHMuaGV4MnJnYihncmFwaGljc0RhdGEubGluZUNvbG9yKTtcbiAgICB2YXIgYWxwaGEgPSBncmFwaGljc0RhdGEubGluZUFscGhhO1xuICAgIHZhciByID0gY29sb3JbMF0gKiBhbHBoYTtcbiAgICB2YXIgZyA9IGNvbG9yWzFdICogYWxwaGE7XG4gICAgdmFyIGIgPSBjb2xvclsyXSAqIGFscGhhO1xuXG4gICAgdmFyIHB4LCBweSwgcDF4LCBwMXksIHAyeCwgcDJ5LCBwM3gsIHAzeTtcbiAgICB2YXIgcGVycHgsIHBlcnB5LCBwZXJwMngsIHBlcnAyeSwgcGVycDN4LCBwZXJwM3k7XG4gICAgdmFyIGExLCBiMSwgYzEsIGEyLCBiMiwgYzI7XG4gICAgdmFyIGRlbm9tLCBwZGlzdCwgZGlzdDtcblxuICAgIHAxeCA9IHBvaW50c1swXTtcbiAgICBwMXkgPSBwb2ludHNbMV07XG5cbiAgICBwMnggPSBwb2ludHNbMl07XG4gICAgcDJ5ID0gcG9pbnRzWzNdO1xuXG4gICAgcGVycHggPSAtKHAxeSAtIHAyeSk7XG4gICAgcGVycHkgPSAgcDF4IC0gcDJ4O1xuXG4gICAgZGlzdCA9IE1hdGguc3FydChwZXJweCpwZXJweCArIHBlcnB5KnBlcnB5KTtcblxuICAgIHBlcnB4IC89IGRpc3Q7XG4gICAgcGVycHkgLz0gZGlzdDtcbiAgICBwZXJweCAqPSB3aWR0aDtcbiAgICBwZXJweSAqPSB3aWR0aDtcblxuICAgIC8vIHN0YXJ0XG4gICAgdmVydHMucHVzaChwMXggLSBwZXJweCAsIHAxeSAtIHBlcnB5LFxuICAgICAgICAgICAgICAgIHIsIGcsIGIsIGFscGhhKTtcblxuICAgIHZlcnRzLnB1c2gocDF4ICsgcGVycHggLCBwMXkgKyBwZXJweSxcbiAgICAgICAgICAgICAgICByLCBnLCBiLCBhbHBoYSk7XG5cbiAgICBmb3IgKGkgPSAxOyBpIDwgbGVuZ3RoLTE7IGkrKylcbiAgICB7XG4gICAgICAgIHAxeCA9IHBvaW50c1soaS0xKSoyXTtcbiAgICAgICAgcDF5ID0gcG9pbnRzWyhpLTEpKjIgKyAxXTtcblxuICAgICAgICBwMnggPSBwb2ludHNbKGkpKjJdO1xuICAgICAgICBwMnkgPSBwb2ludHNbKGkpKjIgKyAxXTtcblxuICAgICAgICBwM3ggPSBwb2ludHNbKGkrMSkqMl07XG4gICAgICAgIHAzeSA9IHBvaW50c1soaSsxKSoyICsgMV07XG5cbiAgICAgICAgcGVycHggPSAtKHAxeSAtIHAyeSk7XG4gICAgICAgIHBlcnB5ID0gcDF4IC0gcDJ4O1xuXG4gICAgICAgIGRpc3QgPSBNYXRoLnNxcnQocGVycHgqcGVycHggKyBwZXJweSpwZXJweSk7XG4gICAgICAgIHBlcnB4IC89IGRpc3Q7XG4gICAgICAgIHBlcnB5IC89IGRpc3Q7XG4gICAgICAgIHBlcnB4ICo9IHdpZHRoO1xuICAgICAgICBwZXJweSAqPSB3aWR0aDtcblxuICAgICAgICBwZXJwMnggPSAtKHAyeSAtIHAzeSk7XG4gICAgICAgIHBlcnAyeSA9IHAyeCAtIHAzeDtcblxuICAgICAgICBkaXN0ID0gTWF0aC5zcXJ0KHBlcnAyeCpwZXJwMnggKyBwZXJwMnkqcGVycDJ5KTtcbiAgICAgICAgcGVycDJ4IC89IGRpc3Q7XG4gICAgICAgIHBlcnAyeSAvPSBkaXN0O1xuICAgICAgICBwZXJwMnggKj0gd2lkdGg7XG4gICAgICAgIHBlcnAyeSAqPSB3aWR0aDtcblxuICAgICAgICBhMSA9ICgtcGVycHkgKyBwMXkpIC0gKC1wZXJweSArIHAyeSk7XG4gICAgICAgIGIxID0gKC1wZXJweCArIHAyeCkgLSAoLXBlcnB4ICsgcDF4KTtcbiAgICAgICAgYzEgPSAoLXBlcnB4ICsgcDF4KSAqICgtcGVycHkgKyBwMnkpIC0gKC1wZXJweCArIHAyeCkgKiAoLXBlcnB5ICsgcDF5KTtcbiAgICAgICAgYTIgPSAoLXBlcnAyeSArIHAzeSkgLSAoLXBlcnAyeSArIHAyeSk7XG4gICAgICAgIGIyID0gKC1wZXJwMnggKyBwMngpIC0gKC1wZXJwMnggKyBwM3gpO1xuICAgICAgICBjMiA9ICgtcGVycDJ4ICsgcDN4KSAqICgtcGVycDJ5ICsgcDJ5KSAtICgtcGVycDJ4ICsgcDJ4KSAqICgtcGVycDJ5ICsgcDN5KTtcblxuICAgICAgICBkZW5vbSA9IGExKmIyIC0gYTIqYjE7XG5cbiAgICAgICAgaWYgKE1hdGguYWJzKGRlbm9tKSA8IDAuMSApXG4gICAgICAgIHtcblxuICAgICAgICAgICAgZGVub20rPTEwLjE7XG4gICAgICAgICAgICB2ZXJ0cy5wdXNoKHAyeCAtIHBlcnB4ICwgcDJ5IC0gcGVycHksXG4gICAgICAgICAgICAgICAgciwgZywgYiwgYWxwaGEpO1xuXG4gICAgICAgICAgICB2ZXJ0cy5wdXNoKHAyeCArIHBlcnB4ICwgcDJ5ICsgcGVycHksXG4gICAgICAgICAgICAgICAgciwgZywgYiwgYWxwaGEpO1xuXG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHB4ID0gKGIxKmMyIC0gYjIqYzEpL2Rlbm9tO1xuICAgICAgICBweSA9IChhMipjMSAtIGExKmMyKS9kZW5vbTtcblxuXG4gICAgICAgIHBkaXN0ID0gKHB4IC1wMngpICogKHB4IC1wMngpICsgKHB5IC1wMnkpICogKHB5IC1wMnkpO1xuXG5cbiAgICAgICAgaWYgKHBkaXN0ID4gMTQwICogMTQwKVxuICAgICAgICB7XG4gICAgICAgICAgICBwZXJwM3ggPSBwZXJweCAtIHBlcnAyeDtcbiAgICAgICAgICAgIHBlcnAzeSA9IHBlcnB5IC0gcGVycDJ5O1xuXG4gICAgICAgICAgICBkaXN0ID0gTWF0aC5zcXJ0KHBlcnAzeCpwZXJwM3ggKyBwZXJwM3kqcGVycDN5KTtcbiAgICAgICAgICAgIHBlcnAzeCAvPSBkaXN0O1xuICAgICAgICAgICAgcGVycDN5IC89IGRpc3Q7XG4gICAgICAgICAgICBwZXJwM3ggKj0gd2lkdGg7XG4gICAgICAgICAgICBwZXJwM3kgKj0gd2lkdGg7XG5cbiAgICAgICAgICAgIHZlcnRzLnB1c2gocDJ4IC0gcGVycDN4LCBwMnkgLXBlcnAzeSk7XG4gICAgICAgICAgICB2ZXJ0cy5wdXNoKHIsIGcsIGIsIGFscGhhKTtcblxuICAgICAgICAgICAgdmVydHMucHVzaChwMnggKyBwZXJwM3gsIHAyeSArcGVycDN5KTtcbiAgICAgICAgICAgIHZlcnRzLnB1c2gociwgZywgYiwgYWxwaGEpO1xuXG4gICAgICAgICAgICB2ZXJ0cy5wdXNoKHAyeCAtIHBlcnAzeCwgcDJ5IC1wZXJwM3kpO1xuICAgICAgICAgICAgdmVydHMucHVzaChyLCBnLCBiLCBhbHBoYSk7XG5cbiAgICAgICAgICAgIGluZGV4Q291bnQrKztcbiAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgIHtcblxuICAgICAgICAgICAgdmVydHMucHVzaChweCAsIHB5KTtcbiAgICAgICAgICAgIHZlcnRzLnB1c2gociwgZywgYiwgYWxwaGEpO1xuXG4gICAgICAgICAgICB2ZXJ0cy5wdXNoKHAyeCAtIChweC1wMngpLCBwMnkgLSAocHkgLSBwMnkpKTtcbiAgICAgICAgICAgIHZlcnRzLnB1c2gociwgZywgYiwgYWxwaGEpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcDF4ID0gcG9pbnRzWyhsZW5ndGgtMikqMl07XG4gICAgcDF5ID0gcG9pbnRzWyhsZW5ndGgtMikqMiArIDFdO1xuXG4gICAgcDJ4ID0gcG9pbnRzWyhsZW5ndGgtMSkqMl07XG4gICAgcDJ5ID0gcG9pbnRzWyhsZW5ndGgtMSkqMiArIDFdO1xuXG4gICAgcGVycHggPSAtKHAxeSAtIHAyeSk7XG4gICAgcGVycHkgPSBwMXggLSBwMng7XG5cbiAgICBkaXN0ID0gTWF0aC5zcXJ0KHBlcnB4KnBlcnB4ICsgcGVycHkqcGVycHkpO1xuICAgIHBlcnB4IC89IGRpc3Q7XG4gICAgcGVycHkgLz0gZGlzdDtcbiAgICBwZXJweCAqPSB3aWR0aDtcbiAgICBwZXJweSAqPSB3aWR0aDtcblxuICAgIHZlcnRzLnB1c2gocDJ4IC0gcGVycHggLCBwMnkgLSBwZXJweSk7XG4gICAgdmVydHMucHVzaChyLCBnLCBiLCBhbHBoYSk7XG5cbiAgICB2ZXJ0cy5wdXNoKHAyeCArIHBlcnB4ICwgcDJ5ICsgcGVycHkpO1xuICAgIHZlcnRzLnB1c2gociwgZywgYiwgYWxwaGEpO1xuXG4gICAgaW5kaWNlcy5wdXNoKGluZGV4U3RhcnQpO1xuXG4gICAgZm9yIChpID0gMDsgaSA8IGluZGV4Q291bnQ7IGkrKylcbiAgICB7XG4gICAgICAgIGluZGljZXMucHVzaChpbmRleFN0YXJ0KyspO1xuICAgIH1cblxuICAgIGluZGljZXMucHVzaChpbmRleFN0YXJ0LTEpO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBidWlsZExpbmU7IiwidmFyIHV0aWxzID0gcmVxdWlyZSgnLi4vLi4vdXRpbHMnKTtcblxuLyoqXG4gKiBCdWlsZHMgYSBwb2x5Z29uIHRvIGRyYXdcbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIGdyYXBoaWNzRGF0YSB7UElYSS5XZWJHTEdyYXBoaWNzRGF0YX0gVGhlIGdyYXBoaWNzIG9iamVjdCBjb250YWluaW5nIGFsbCB0aGUgbmVjZXNzYXJ5IHByb3BlcnRpZXNcbiAqIEBwYXJhbSB3ZWJHTERhdGEge29iamVjdH0gYW4gb2JqZWN0IGNvbnRhaW5pbmcgYWxsIHRoZSB3ZWJHTC1zcGVjaWZpYyBpbmZvcm1hdGlvbiB0byBjcmVhdGUgdGhpcyBzaGFwZVxuICovXG52YXIgYnVpbGRQb2x5ID0gZnVuY3Rpb24gKGdyYXBoaWNzRGF0YSwgd2ViR0xEYXRhKVxue1xuICAgIHZhciBwb2ludHMgPSBncmFwaGljc0RhdGEucG9pbnRzO1xuXG4gICAgaWYgKHBvaW50cy5sZW5ndGggPCA2KVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIGdldCBmaXJzdCBhbmQgbGFzdCBwb2ludC4uIGZpZ3VyZSBvdXQgdGhlIG1pZGRsZSFcbiAgICB2YXIgdmVydHMgPSB3ZWJHTERhdGEucG9pbnRzO1xuICAgIHZhciBpbmRpY2VzID0gd2ViR0xEYXRhLmluZGljZXM7XG5cbiAgICB2YXIgbGVuZ3RoID0gcG9pbnRzLmxlbmd0aCAvIDI7XG5cbiAgICAvLyBzb3J0IGNvbG9yXG4gICAgdmFyIGNvbG9yID0gdXRpbHMuaGV4MnJnYihncmFwaGljc0RhdGEuZmlsbENvbG9yKTtcbiAgICB2YXIgYWxwaGEgPSBncmFwaGljc0RhdGEuZmlsbEFscGhhO1xuICAgIHZhciByID0gY29sb3JbMF0gKiBhbHBoYTtcbiAgICB2YXIgZyA9IGNvbG9yWzFdICogYWxwaGE7XG4gICAgdmFyIGIgPSBjb2xvclsyXSAqIGFscGhhO1xuXG4gICAgdmFyIHRyaWFuZ2xlcyA9IGVhcmN1dChwb2ludHMsIG51bGwsIDIpO1xuXG4gICAgaWYgKCF0cmlhbmdsZXMpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHZhciB2ZXJ0UG9zID0gdmVydHMubGVuZ3RoIC8gNjtcblxuICAgIHZhciBpID0gMDtcblxuICAgIGZvciAoaSA9IDA7IGkgPCB0cmlhbmdsZXMubGVuZ3RoOyBpKz0zKVxuICAgIHtcbiAgICAgICAgaW5kaWNlcy5wdXNoKHRyaWFuZ2xlc1tpXSArIHZlcnRQb3MpO1xuICAgICAgICBpbmRpY2VzLnB1c2godHJpYW5nbGVzW2ldICsgdmVydFBvcyk7XG4gICAgICAgIGluZGljZXMucHVzaCh0cmlhbmdsZXNbaSsxXSArIHZlcnRQb3MpO1xuICAgICAgICBpbmRpY2VzLnB1c2godHJpYW5nbGVzW2krMl0gK3ZlcnRQb3MpO1xuICAgICAgICBpbmRpY2VzLnB1c2godHJpYW5nbGVzW2krMl0gKyB2ZXJ0UG9zKTtcbiAgICB9XG5cbiAgICBmb3IgKGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspXG4gICAge1xuICAgICAgICB2ZXJ0cy5wdXNoKHBvaW50c1tpICogMl0sIHBvaW50c1tpICogMiArIDFdLFxuICAgICAgICAgICAgICAgICAgIHIsIGcsIGIsIGFscGhhKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdHJ1ZTtcbn07XG5cblxubW9kdWxlLmV4cG9ydHMgPSBidWlsZFBvbHk7XG4iLCJ2YXIgYnVpbGRMaW5lID0gcmVxdWlyZSgnLi9idWlsZExpbmUnKSxcbiAgICB1dGlscyA9IHJlcXVpcmUoJy4uLy4uL3V0aWxzJyk7XG5cbi8qKlxuICogQnVpbGRzIGEgcmVjdGFuZ2xlIHRvIGRyYXdcbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIGdyYXBoaWNzRGF0YSB7UElYSS5HcmFwaGljc30gVGhlIGdyYXBoaWNzIG9iamVjdCBjb250YWluaW5nIGFsbCB0aGUgbmVjZXNzYXJ5IHByb3BlcnRpZXNcbiAqIEBwYXJhbSB3ZWJHTERhdGEge29iamVjdH0gYW4gb2JqZWN0IGNvbnRhaW5pbmcgYWxsIHRoZSB3ZWJHTC1zcGVjaWZpYyBpbmZvcm1hdGlvbiB0byBjcmVhdGUgdGhpcyBzaGFwZVxuICovXG52YXIgYnVpbGRSZWN0YW5nbGUgPSBmdW5jdGlvbiAoZ3JhcGhpY3NEYXRhLCB3ZWJHTERhdGEpXG57XG4gICAgLy8gLS0tIC8vXG4gICAgLy8gbmVlZCB0byBjb252ZXJ0IHBvaW50cyB0byBhIG5pY2UgcmVndWxhciBkYXRhXG4gICAgLy9cbiAgICB2YXIgcmVjdERhdGEgPSBncmFwaGljc0RhdGEuc2hhcGU7XG4gICAgdmFyIHggPSByZWN0RGF0YS54O1xuICAgIHZhciB5ID0gcmVjdERhdGEueTtcbiAgICB2YXIgd2lkdGggPSByZWN0RGF0YS53aWR0aDtcbiAgICB2YXIgaGVpZ2h0ID0gcmVjdERhdGEuaGVpZ2h0O1xuXG4gICAgaWYgKGdyYXBoaWNzRGF0YS5maWxsKVxuICAgIHtcbiAgICAgICAgdmFyIGNvbG9yID0gdXRpbHMuaGV4MnJnYihncmFwaGljc0RhdGEuZmlsbENvbG9yKTtcbiAgICAgICAgdmFyIGFscGhhID0gZ3JhcGhpY3NEYXRhLmZpbGxBbHBoYTtcblxuICAgICAgICB2YXIgciA9IGNvbG9yWzBdICogYWxwaGE7XG4gICAgICAgIHZhciBnID0gY29sb3JbMV0gKiBhbHBoYTtcbiAgICAgICAgdmFyIGIgPSBjb2xvclsyXSAqIGFscGhhO1xuXG4gICAgICAgIHZhciB2ZXJ0cyA9IHdlYkdMRGF0YS5wb2ludHM7XG4gICAgICAgIHZhciBpbmRpY2VzID0gd2ViR0xEYXRhLmluZGljZXM7XG5cbiAgICAgICAgdmFyIHZlcnRQb3MgPSB2ZXJ0cy5sZW5ndGgvNjtcblxuICAgICAgICAvLyBzdGFydFxuICAgICAgICB2ZXJ0cy5wdXNoKHgsIHkpO1xuICAgICAgICB2ZXJ0cy5wdXNoKHIsIGcsIGIsIGFscGhhKTtcblxuICAgICAgICB2ZXJ0cy5wdXNoKHggKyB3aWR0aCwgeSk7XG4gICAgICAgIHZlcnRzLnB1c2gociwgZywgYiwgYWxwaGEpO1xuXG4gICAgICAgIHZlcnRzLnB1c2goeCAsIHkgKyBoZWlnaHQpO1xuICAgICAgICB2ZXJ0cy5wdXNoKHIsIGcsIGIsIGFscGhhKTtcblxuICAgICAgICB2ZXJ0cy5wdXNoKHggKyB3aWR0aCwgeSArIGhlaWdodCk7XG4gICAgICAgIHZlcnRzLnB1c2gociwgZywgYiwgYWxwaGEpO1xuXG4gICAgICAgIC8vIGluc2VydCAyIGRlYWQgdHJpYW5nbGVzLi5cbiAgICAgICAgaW5kaWNlcy5wdXNoKHZlcnRQb3MsIHZlcnRQb3MsIHZlcnRQb3MrMSwgdmVydFBvcysyLCB2ZXJ0UG9zKzMsIHZlcnRQb3MrMyk7XG4gICAgfVxuXG4gICAgaWYgKGdyYXBoaWNzRGF0YS5saW5lV2lkdGgpXG4gICAge1xuICAgICAgICB2YXIgdGVtcFBvaW50cyA9IGdyYXBoaWNzRGF0YS5wb2ludHM7XG5cbiAgICAgICAgZ3JhcGhpY3NEYXRhLnBvaW50cyA9IFt4LCB5LFxuICAgICAgICAgICAgICAgICAgeCArIHdpZHRoLCB5LFxuICAgICAgICAgICAgICAgICAgeCArIHdpZHRoLCB5ICsgaGVpZ2h0LFxuICAgICAgICAgICAgICAgICAgeCwgeSArIGhlaWdodCxcbiAgICAgICAgICAgICAgICAgIHgsIHldO1xuXG5cbiAgICAgICAgYnVpbGRMaW5lKGdyYXBoaWNzRGF0YSwgd2ViR0xEYXRhKTtcblxuICAgICAgICBncmFwaGljc0RhdGEucG9pbnRzID0gdGVtcFBvaW50cztcbiAgICB9XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGJ1aWxkUmVjdGFuZ2xlOyIsInZhciBidWlsZExpbmUgPSByZXF1aXJlKCcuL2J1aWxkTGluZScpLFxuICAgIHV0aWxzID0gcmVxdWlyZSgnLi4vLi4vdXRpbHMnKTtcbiAgICBcbi8qKlxuICogQnVpbGRzIGEgcm91bmRlZCByZWN0YW5nbGUgdG8gZHJhd1xuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0gZ3JhcGhpY3NEYXRhIHtQSVhJLkdyYXBoaWNzfSBUaGUgZ3JhcGhpY3Mgb2JqZWN0IGNvbnRhaW5pbmcgYWxsIHRoZSBuZWNlc3NhcnkgcHJvcGVydGllc1xuICogQHBhcmFtIHdlYkdMRGF0YSB7b2JqZWN0fSBhbiBvYmplY3QgY29udGFpbmluZyBhbGwgdGhlIHdlYkdMLXNwZWNpZmljIGluZm9ybWF0aW9uIHRvIGNyZWF0ZSB0aGlzIHNoYXBlXG4gKi9cbmJ1aWxkUm91bmRlZFJlY3RhbmdsZSA9IGZ1bmN0aW9uIChncmFwaGljc0RhdGEsIHdlYkdMRGF0YSlcbntcbiAgICB2YXIgcnJlY3REYXRhID0gZ3JhcGhpY3NEYXRhLnNoYXBlO1xuICAgIHZhciB4ID0gcnJlY3REYXRhLng7XG4gICAgdmFyIHkgPSBycmVjdERhdGEueTtcbiAgICB2YXIgd2lkdGggPSBycmVjdERhdGEud2lkdGg7XG4gICAgdmFyIGhlaWdodCA9IHJyZWN0RGF0YS5oZWlnaHQ7XG5cbiAgICB2YXIgcmFkaXVzID0gcnJlY3REYXRhLnJhZGl1cztcblxuICAgIHZhciByZWNQb2ludHMgPSBbXTtcbiAgICByZWNQb2ludHMucHVzaCh4LCB5ICsgcmFkaXVzKTtcbiAgICB0aGlzLnF1YWRyYXRpY0JlemllckN1cnZlKHgsIHkgKyBoZWlnaHQgLSByYWRpdXMsIHgsIHkgKyBoZWlnaHQsIHggKyByYWRpdXMsIHkgKyBoZWlnaHQsIHJlY1BvaW50cyk7XG4gICAgdGhpcy5xdWFkcmF0aWNCZXppZXJDdXJ2ZSh4ICsgd2lkdGggLSByYWRpdXMsIHkgKyBoZWlnaHQsIHggKyB3aWR0aCwgeSArIGhlaWdodCwgeCArIHdpZHRoLCB5ICsgaGVpZ2h0IC0gcmFkaXVzLCByZWNQb2ludHMpO1xuICAgIHRoaXMucXVhZHJhdGljQmV6aWVyQ3VydmUoeCArIHdpZHRoLCB5ICsgcmFkaXVzLCB4ICsgd2lkdGgsIHksIHggKyB3aWR0aCAtIHJhZGl1cywgeSwgcmVjUG9pbnRzKTtcbiAgICB0aGlzLnF1YWRyYXRpY0JlemllckN1cnZlKHggKyByYWRpdXMsIHksIHgsIHksIHgsIHkgKyByYWRpdXMgKyAwLjAwMDAwMDAwMDEsIHJlY1BvaW50cyk7XG5cbiAgICAvLyB0aGlzIHRpbnkgbnVtYmVyIGRlYWxzIHdpdGggdGhlIGlzc3VlIHRoYXQgb2NjdXJzIHdoZW4gcG9pbnRzIG92ZXJsYXAgYW5kIGVhcmN1dCBmYWlscyB0byB0cmlhbmd1bGF0ZSB0aGUgaXRlbS5cbiAgICAvLyBUT0RPIC0gZml4IHRoaXMgcHJvcGVybHksIHRoaXMgaXMgbm90IHZlcnkgZWxlZ2FudC4uIGJ1dCBpdCB3b3JrcyBmb3Igbm93LlxuXG4gICAgaWYgKGdyYXBoaWNzRGF0YS5maWxsKVxuICAgIHtcbiAgICAgICAgdmFyIGNvbG9yID0gdXRpbHMuaGV4MnJnYihncmFwaGljc0RhdGEuZmlsbENvbG9yKTtcbiAgICAgICAgdmFyIGFscGhhID0gZ3JhcGhpY3NEYXRhLmZpbGxBbHBoYTtcblxuICAgICAgICB2YXIgciA9IGNvbG9yWzBdICogYWxwaGE7XG4gICAgICAgIHZhciBnID0gY29sb3JbMV0gKiBhbHBoYTtcbiAgICAgICAgdmFyIGIgPSBjb2xvclsyXSAqIGFscGhhO1xuXG4gICAgICAgIHZhciB2ZXJ0cyA9IHdlYkdMRGF0YS5wb2ludHM7XG4gICAgICAgIHZhciBpbmRpY2VzID0gd2ViR0xEYXRhLmluZGljZXM7XG5cbiAgICAgICAgdmFyIHZlY1BvcyA9IHZlcnRzLmxlbmd0aC82O1xuXG4gICAgICAgIHZhciB0cmlhbmdsZXMgPSBlYXJjdXQocmVjUG9pbnRzLCBudWxsLCAyKTtcblxuICAgICAgICB2YXIgaSA9IDA7XG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCB0cmlhbmdsZXMubGVuZ3RoOyBpKz0zKVxuICAgICAgICB7XG4gICAgICAgICAgICBpbmRpY2VzLnB1c2godHJpYW5nbGVzW2ldICsgdmVjUG9zKTtcbiAgICAgICAgICAgIGluZGljZXMucHVzaCh0cmlhbmdsZXNbaV0gKyB2ZWNQb3MpO1xuICAgICAgICAgICAgaW5kaWNlcy5wdXNoKHRyaWFuZ2xlc1tpKzFdICsgdmVjUG9zKTtcbiAgICAgICAgICAgIGluZGljZXMucHVzaCh0cmlhbmdsZXNbaSsyXSArIHZlY1Bvcyk7XG4gICAgICAgICAgICBpbmRpY2VzLnB1c2godHJpYW5nbGVzW2krMl0gKyB2ZWNQb3MpO1xuICAgICAgICB9XG5cbiAgICAgICAgZm9yIChpID0gMDsgaSA8IHJlY1BvaW50cy5sZW5ndGg7IGkrKylcbiAgICAgICAge1xuICAgICAgICAgICAgdmVydHMucHVzaChyZWNQb2ludHNbaV0sIHJlY1BvaW50c1srK2ldLCByLCBnLCBiLCBhbHBoYSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoZ3JhcGhpY3NEYXRhLmxpbmVXaWR0aClcbiAgICB7XG4gICAgICAgIHZhciB0ZW1wUG9pbnRzID0gZ3JhcGhpY3NEYXRhLnBvaW50cztcblxuICAgICAgICBncmFwaGljc0RhdGEucG9pbnRzID0gcmVjUG9pbnRzO1xuXG4gICAgICAgIHRoaXMuYnVpbGRMaW5lKGdyYXBoaWNzRGF0YSwgd2ViR0xEYXRhKTtcblxuICAgICAgICBncmFwaGljc0RhdGEucG9pbnRzID0gdGVtcFBvaW50cztcbiAgICB9XG59O1xuXG4vKipcbiAqIENhbGN1bGF0ZSB0aGUgcG9pbnRzIGZvciBhIHF1YWRyYXRpYyBiZXppZXIgY3VydmUuIChoZWxwZXIgZnVuY3Rpb24uLilcbiAqIEJhc2VkIG9uOiBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy83ODUwOTcvaG93LWRvLWktaW1wbGVtZW50LWEtYmV6aWVyLWN1cnZlLWluLWNcbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIGZyb21YIHtudW1iZXJ9IE9yaWdpbiBwb2ludCB4XG4gKiBAcGFyYW0gZnJvbVkge251bWJlcn0gT3JpZ2luIHBvaW50IHhcbiAqIEBwYXJhbSBjcFgge251bWJlcn0gQ29udHJvbCBwb2ludCB4XG4gKiBAcGFyYW0gY3BZIHtudW1iZXJ9IENvbnRyb2wgcG9pbnQgeVxuICogQHBhcmFtIHRvWCB7bnVtYmVyfSBEZXN0aW5hdGlvbiBwb2ludCB4XG4gKiBAcGFyYW0gdG9ZIHtudW1iZXJ9IERlc3RpbmF0aW9uIHBvaW50IHlcbiAqIEBwYXJhbSBbb3V0XSB7bnVtYmVyW119IFRoZSBvdXRwdXQgYXJyYXkgdG8gYWRkIHBvaW50cyBpbnRvLiBJZiBub3QgcGFzc2VkLCBhIG5ldyBhcnJheSBpcyBjcmVhdGVkLlxuICogQHJldHVybiB7bnVtYmVyW119IGFuIGFycmF5IG9mIHBvaW50c1xuICovXG5xdWFkcmF0aWNCZXppZXJDdXJ2ZSA9IGZ1bmN0aW9uIChmcm9tWCwgZnJvbVksIGNwWCwgY3BZLCB0b1gsIHRvWSwgb3V0KVxue1xuICAgIHZhciB4YSxcbiAgICAgICAgeWEsXG4gICAgICAgIHhiLFxuICAgICAgICB5YixcbiAgICAgICAgeCxcbiAgICAgICAgeSxcbiAgICAgICAgbiA9IDIwLFxuICAgICAgICBwb2ludHMgPSBvdXQgfHwgW107XG5cbiAgICBmdW5jdGlvbiBnZXRQdChuMSAsIG4yLCBwZXJjKSB7XG4gICAgICAgIHZhciBkaWZmID0gbjIgLSBuMTtcblxuICAgICAgICByZXR1cm4gbjEgKyAoIGRpZmYgKiBwZXJjICk7XG4gICAgfVxuXG4gICAgdmFyIGogPSAwO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDw9IG47IGkrKyApIHtcbiAgICAgICAgaiA9IGkgLyBuO1xuXG4gICAgICAgIC8vIFRoZSBHcmVlbiBMaW5lXG4gICAgICAgIHhhID0gZ2V0UHQoIGZyb21YICwgY3BYICwgaiApO1xuICAgICAgICB5YSA9IGdldFB0KCBmcm9tWSAsIGNwWSAsIGogKTtcbiAgICAgICAgeGIgPSBnZXRQdCggY3BYICwgdG9YICwgaiApO1xuICAgICAgICB5YiA9IGdldFB0KCBjcFkgLCB0b1kgLCBqICk7XG5cbiAgICAgICAgLy8gVGhlIEJsYWNrIERvdFxuICAgICAgICB4ID0gZ2V0UHQoIHhhICwgeGIgLCBqICk7XG4gICAgICAgIHkgPSBnZXRQdCggeWEgLCB5YiAsIGogKTtcblxuICAgICAgICBwb2ludHMucHVzaCh4LCB5KTtcbiAgICB9XG5cbiAgICByZXR1cm4gcG9pbnRzO1xufTtcblxuXG5tb2R1bGUuZXhwb3J0cyA9IGJ1aWxkUm91bmRlZFJlY3RhbmdsZTsiLCIvKipcbiAqIEBmaWxlICAgICAgICBNYWluIGV4cG9ydCBvZiB0aGUgUElYSSBjb3JlIGxpYnJhcnlcbiAqIEBhdXRob3IgICAgICBNYXQgR3JvdmVzIDxtYXRAZ29vZGJveWRpZ2l0YWwuY29tPlxuICogQGNvcHlyaWdodCAgIDIwMTMtMjAxNSBHb29kQm95RGlnaXRhbFxuICogQGxpY2Vuc2UgICAgIHtAbGluayBodHRwczovL2dpdGh1Yi5jb20vcGl4aWpzL3BpeGkuanMvYmxvYi9tYXN0ZXIvTElDRU5TRXxNSVQgTGljZW5zZX1cbiAqL1xuXG4vKipcbiAqIEBuYW1lc3BhY2UgUElYSVxuICovXG4vLyBleHBvcnQgY29yZSBhbmQgY29uc3QuIFdlIGFzc2lnbiBjb3JlIHRvIGNvbnN0IHNvIHRoYXQgdGhlIG5vbi1yZWZlcmVuY2UgdHlwZXMgaW4gY29uc3QgcmVtYWluIGluLXRhY3RcbnZhciBjb3JlID0gbW9kdWxlLmV4cG9ydHMgPSBPYmplY3QuYXNzaWduKHJlcXVpcmUoJy4vY29uc3QnKSwgcmVxdWlyZSgnLi9tYXRoJyksIHtcbiAgICAvLyB1dGlsc1xuICAgIHV0aWxzOiByZXF1aXJlKCcuL3V0aWxzJyksXG4gICAgdGlja2VyOiByZXF1aXJlKCcuL3RpY2tlcicpLFxuXG4gICAgLy8gZGlzcGxheVxuICAgIERpc3BsYXlPYmplY3Q6ICAgICAgICAgIHJlcXVpcmUoJy4vZGlzcGxheS9EaXNwbGF5T2JqZWN0JyksXG4gICAgQ29udGFpbmVyOiAgICAgICAgICAgICAgcmVxdWlyZSgnLi9kaXNwbGF5L0NvbnRhaW5lcicpLFxuXG4gICAgLy8gc3ByaXRlc1xuICAgIFNwcml0ZTogICAgICAgICAgICAgICAgIHJlcXVpcmUoJy4vc3ByaXRlcy9TcHJpdGUnKSxcbiAgICBQYXJ0aWNsZUNvbnRhaW5lcjogICAgICByZXF1aXJlKCcuL3BhcnRpY2xlcy9QYXJ0aWNsZUNvbnRhaW5lcicpLFxuICAgIFNwcml0ZVJlbmRlcmVyOiAgICAgICAgIHJlcXVpcmUoJy4vc3ByaXRlcy93ZWJnbC9TcHJpdGVSZW5kZXJlcicpLFxuICAgIFBhcnRpY2xlUmVuZGVyZXI6ICAgICAgIHJlcXVpcmUoJy4vcGFydGljbGVzL3dlYmdsL1BhcnRpY2xlUmVuZGVyZXInKSxcblxuICAgIC8vIHRleHRcbiAgICBUZXh0OiAgICAgICAgICAgICAgICAgICByZXF1aXJlKCcuL3RleHQvVGV4dCcpLFxuXG4gICAgLy8gcHJpbWl0aXZlc1xuICAgIEdyYXBoaWNzOiAgICAgICAgICAgICAgIHJlcXVpcmUoJy4vZ3JhcGhpY3MvR3JhcGhpY3MnKSxcbiAgICBHcmFwaGljc0RhdGE6ICAgICAgICAgICByZXF1aXJlKCcuL2dyYXBoaWNzL0dyYXBoaWNzRGF0YScpLFxuICAgIEdyYXBoaWNzUmVuZGVyZXI6ICAgICAgIHJlcXVpcmUoJy4vZ3JhcGhpY3Mvd2ViZ2wvR3JhcGhpY3NSZW5kZXJlcicpLFxuXG4gICAgLy8gdGV4dHVyZXNcbiAgICBUZXh0dXJlOiAgICAgICAgICAgICAgICByZXF1aXJlKCcuL3RleHR1cmVzL1RleHR1cmUnKSxcbiAgICBCYXNlVGV4dHVyZTogICAgICAgICAgICByZXF1aXJlKCcuL3RleHR1cmVzL0Jhc2VUZXh0dXJlJyksXG4gICAgUmVuZGVyVGV4dHVyZTogICAgICAgICAgcmVxdWlyZSgnLi90ZXh0dXJlcy9SZW5kZXJUZXh0dXJlJyksXG4gICAgVmlkZW9CYXNlVGV4dHVyZTogICAgICAgcmVxdWlyZSgnLi90ZXh0dXJlcy9WaWRlb0Jhc2VUZXh0dXJlJyksXG4gICAgVGV4dHVyZVV2czogICAgICAgICAgICAgcmVxdWlyZSgnLi90ZXh0dXJlcy9UZXh0dXJlVXZzJyksXG5cbiAgICAvLyByZW5kZXJlcnMgLSBjYW52YXNcbiAgICBDYW52YXNSZW5kZXJlcjogICAgICAgICByZXF1aXJlKCcuL3JlbmRlcmVycy9jYW52YXMvQ2FudmFzUmVuZGVyZXInKSxcbiAgICBDYW52YXNHcmFwaGljczogICAgICAgICByZXF1aXJlKCcuL3JlbmRlcmVycy9jYW52YXMvdXRpbHMvQ2FudmFzR3JhcGhpY3MnKSxcbiAgICBDYW52YXNCdWZmZXI6ICAgICAgICAgICByZXF1aXJlKCcuL3JlbmRlcmVycy9jYW52YXMvdXRpbHMvQ2FudmFzQnVmZmVyJyksXG5cbiAgICAvLyByZW5kZXJlcnMgLSB3ZWJnbFxuICAgIFdlYkdMUmVuZGVyZXI6ICAgICAgICAgIHJlcXVpcmUoJy4vcmVuZGVyZXJzL3dlYmdsL1dlYkdMUmVuZGVyZXInKSxcbiAgICBXZWJHTE1hbmFnZXI6ICAgICAgICAgIHJlcXVpcmUoJy4vcmVuZGVyZXJzL3dlYmdsL21hbmFnZXJzL1dlYkdMTWFuYWdlcicpLFxuICAgIFNoYWRlck1hbmFnZXI6ICAgICAgICAgIHJlcXVpcmUoJy4vcmVuZGVyZXJzL3dlYmdsL21hbmFnZXJzL1NoYWRlck1hbmFnZXInKSxcbiAgICBTaGFkZXI6ICAgICAgICAgICAgICAgICByZXF1aXJlKCcuL3JlbmRlcmVycy93ZWJnbC9zaGFkZXJzL1NoYWRlcicpLFxuICAgIE9iamVjdFJlbmRlcmVyOiAgICAgICAgIHJlcXVpcmUoJy4vcmVuZGVyZXJzL3dlYmdsL3V0aWxzL09iamVjdFJlbmRlcmVyJyksXG4gICAgUmVuZGVyVGFyZ2V0OiAgICAgICAgICAgcmVxdWlyZSgnLi9yZW5kZXJlcnMvd2ViZ2wvdXRpbHMvUmVuZGVyVGFyZ2V0JyksXG5cbiAgICAvLyBmaWx0ZXJzIC0gd2ViZ2xcbiAgICBBYnN0cmFjdEZpbHRlcjogICAgICAgICByZXF1aXJlKCcuL3JlbmRlcmVycy93ZWJnbC9maWx0ZXJzL0Fic3RyYWN0RmlsdGVyJyksXG4gICAgRlhBQUZpbHRlcjogICAgICAgICAgICAgcmVxdWlyZSgnLi9yZW5kZXJlcnMvd2ViZ2wvZmlsdGVycy9GWEFBRmlsdGVyJyksXG4gICAgU3ByaXRlTWFza0ZpbHRlcjogICAgICAgcmVxdWlyZSgnLi9yZW5kZXJlcnMvd2ViZ2wvZmlsdGVycy9TcHJpdGVNYXNrRmlsdGVyJyksXG5cbiAgICBnbENvcmU6ICAgICAgICAgICAgICAgICAgIHJlcXVpcmUoJ3BpeGktZ2wtY29yZScpLFxuXG4gICAgLyoqXG4gICAgICogVGhpcyBoZWxwZXIgZnVuY3Rpb24gd2lsbCBhdXRvbWF0aWNhbGx5IGRldGVjdCB3aGljaCByZW5kZXJlciB5b3Ugc2hvdWxkIGJlIHVzaW5nLlxuICAgICAqIFdlYkdMIGlzIHRoZSBwcmVmZXJyZWQgcmVuZGVyZXIgYXMgaXQgaXMgYSBsb3QgZmFzdGVyLiBJZiB3ZWJHTCBpcyBub3Qgc3VwcG9ydGVkIGJ5XG4gICAgICogdGhlIGJyb3dzZXIgdGhlbiB0aGlzIGZ1bmN0aW9uIHdpbGwgcmV0dXJuIGEgY2FudmFzIHJlbmRlcmVyXG4gICAgICpcbiAgICAgKiBAbWVtYmVyb2YgUElYSVxuICAgICAqIEBwYXJhbSB3aWR0aD04MDAge251bWJlcn0gdGhlIHdpZHRoIG9mIHRoZSByZW5kZXJlcnMgdmlld1xuICAgICAqIEBwYXJhbSBoZWlnaHQ9NjAwIHtudW1iZXJ9IHRoZSBoZWlnaHQgb2YgdGhlIHJlbmRlcmVycyB2aWV3XG4gICAgICogQHBhcmFtIFtvcHRpb25zXSB7b2JqZWN0fSBUaGUgb3B0aW9uYWwgcmVuZGVyZXIgcGFyYW1ldGVyc1xuICAgICAqIEBwYXJhbSBbb3B0aW9ucy52aWV3XSB7SFRNTENhbnZhc0VsZW1lbnR9IHRoZSBjYW52YXMgdG8gdXNlIGFzIGEgdmlldywgb3B0aW9uYWxcbiAgICAgKiBAcGFyYW0gW29wdGlvbnMudHJhbnNwYXJlbnQ9ZmFsc2VdIHtib29sZWFufSBJZiB0aGUgcmVuZGVyIHZpZXcgaXMgdHJhbnNwYXJlbnQsIGRlZmF1bHQgZmFsc2VcbiAgICAgKiBAcGFyYW0gW29wdGlvbnMuYW50aWFsaWFzPWZhbHNlXSB7Ym9vbGVhbn0gc2V0cyBhbnRpYWxpYXMgKG9ubHkgYXBwbGljYWJsZSBpbiBjaHJvbWUgYXQgdGhlIG1vbWVudClcbiAgICAgKiBAcGFyYW0gW29wdGlvbnMucHJlc2VydmVEcmF3aW5nQnVmZmVyPWZhbHNlXSB7Ym9vbGVhbn0gZW5hYmxlcyBkcmF3aW5nIGJ1ZmZlciBwcmVzZXJ2YXRpb24sIGVuYWJsZSB0aGlzIGlmIHlvdVxuICAgICAqICAgICAgbmVlZCB0byBjYWxsIHRvRGF0YVVybCBvbiB0aGUgd2ViZ2wgY29udGV4dFxuICAgICAqIEBwYXJhbSBbb3B0aW9ucy5yZXNvbHV0aW9uPTFdIHtudW1iZXJ9IHRoZSByZXNvbHV0aW9uIG9mIHRoZSByZW5kZXJlciwgcmV0aW5hIHdvdWxkIGJlIDJcbiAgICAgKiBAcGFyYW0gW25vV2ViR0w9ZmFsc2VdIHtib29sZWFufSBwcmV2ZW50cyBzZWxlY3Rpb24gb2YgV2ViR0wgcmVuZGVyZXIsIGV2ZW4gaWYgc3VjaCBpcyBwcmVzZW50XG4gICAgICpcbiAgICAgKiBAcmV0dXJuIHtXZWJHTFJlbmRlcmVyfENhbnZhc1JlbmRlcmVyfSBSZXR1cm5zIFdlYkdMIHJlbmRlcmVyIGlmIGF2YWlsYWJsZSwgb3RoZXJ3aXNlIENhbnZhc1JlbmRlcmVyXG4gICAgICovXG4gICAgYXV0b0RldGVjdFJlbmRlcmVyOiBmdW5jdGlvbiAod2lkdGgsIGhlaWdodCwgb3B0aW9ucywgbm9XZWJHTClcbiAgICB7XG4gICAgICAgIHdpZHRoID0gd2lkdGggfHwgODAwO1xuICAgICAgICBoZWlnaHQgPSBoZWlnaHQgfHwgNjAwO1xuXG4gICAgICAgIGlmICghbm9XZWJHTCAmJiBjb3JlLnV0aWxzLmlzV2ViR0xTdXBwb3J0ZWQoKSlcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBjb3JlLldlYkdMUmVuZGVyZXIod2lkdGgsIGhlaWdodCwgb3B0aW9ucyk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbmV3IGNvcmUuQ2FudmFzUmVuZGVyZXIod2lkdGgsIGhlaWdodCwgb3B0aW9ucyk7XG4gICAgfVxufSk7XG4iLCIvLyBAdG9kbyAtIGlnbm9yZSB0aGUgdG9vIG1hbnkgcGFyYW1ldGVycyB3YXJuaW5nIGZvciBub3dcbi8vIHNob3VsZCBlaXRoZXIgZml4IGl0IG9yIGNoYW5nZSB0aGUganNoaW50IGNvbmZpZ1xuLy8ganNoaW50IC1XMDcyXG5cbnZhciBQb2ludCA9IHJlcXVpcmUoJy4vUG9pbnQnKTtcblxuLyoqXG4gKiBUaGUgcGl4aSBNYXRyaXggY2xhc3MgYXMgYW4gb2JqZWN0LCB3aGljaCBtYWtlcyBpdCBhIGxvdCBmYXN0ZXIsXG4gKiBoZXJlIGlzIGEgcmVwcmVzZW50YXRpb24gb2YgaXQgOlxuICogfCBhIHwgYiB8IHR4fFxuICogfCBjIHwgZCB8IHR5fFxuICogfCAwIHwgMCB8IDEgfFxuICpcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqL1xuZnVuY3Rpb24gTWF0cml4KClcbntcbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMVxuICAgICAqL1xuICAgIHRoaXMuYSA9IDE7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMFxuICAgICAqL1xuICAgIHRoaXMuYiA9IDA7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMFxuICAgICAqL1xuICAgIHRoaXMuYyA9IDA7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMVxuICAgICAqL1xuICAgIHRoaXMuZCA9IDE7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMFxuICAgICAqL1xuICAgIHRoaXMudHggPSAwO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDBcbiAgICAgKi9cbiAgICB0aGlzLnR5ID0gMDtcbn1cblxuTWF0cml4LnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IE1hdHJpeDtcbm1vZHVsZS5leHBvcnRzID0gTWF0cml4O1xuXG4vKipcbiAqIENyZWF0ZXMgYSBNYXRyaXggb2JqZWN0IGJhc2VkIG9uIHRoZSBnaXZlbiBhcnJheS4gVGhlIEVsZW1lbnQgdG8gTWF0cml4IG1hcHBpbmcgb3JkZXIgaXMgYXMgZm9sbG93czpcbiAqXG4gKiBhID0gYXJyYXlbMF1cbiAqIGIgPSBhcnJheVsxXVxuICogYyA9IGFycmF5WzNdXG4gKiBkID0gYXJyYXlbNF1cbiAqIHR4ID0gYXJyYXlbMl1cbiAqIHR5ID0gYXJyYXlbNV1cbiAqXG4gKiBAcGFyYW0gYXJyYXkge251bWJlcltdfSBUaGUgYXJyYXkgdGhhdCB0aGUgbWF0cml4IHdpbGwgYmUgcG9wdWxhdGVkIGZyb20uXG4gKi9cbk1hdHJpeC5wcm90b3R5cGUuZnJvbUFycmF5ID0gZnVuY3Rpb24gKGFycmF5KVxue1xuICAgIHRoaXMuYSA9IGFycmF5WzBdO1xuICAgIHRoaXMuYiA9IGFycmF5WzFdO1xuICAgIHRoaXMuYyA9IGFycmF5WzNdO1xuICAgIHRoaXMuZCA9IGFycmF5WzRdO1xuICAgIHRoaXMudHggPSBhcnJheVsyXTtcbiAgICB0aGlzLnR5ID0gYXJyYXlbNV07XG59O1xuXG5cbi8qKlxuICogc2V0cyB0aGUgbWF0cml4IHByb3BlcnRpZXNcbiAqXG4gKiBAcGFyYW0ge251bWJlcn0gYVxuICogQHBhcmFtIHtudW1iZXJ9IGJcbiAqIEBwYXJhbSB7bnVtYmVyfSBjXG4gKiBAcGFyYW0ge251bWJlcn0gZFxuICogQHBhcmFtIHtudW1iZXJ9IHR4XG4gKiBAcGFyYW0ge251bWJlcn0gdHlcbiAqXG4gKiBAcmV0dXJuIHtQSVhJLk1hdHJpeH0gVGhpcyBtYXRyaXguIEdvb2QgZm9yIGNoYWluaW5nIG1ldGhvZCBjYWxscy5cbiAqL1xuTWF0cml4LnByb3RvdHlwZS5zZXQgPSBmdW5jdGlvbiAoYSwgYiwgYywgZCwgdHgsIHR5KVxue1xuICAgIHRoaXMuYSA9IGE7XG4gICAgdGhpcy5iID0gYjtcbiAgICB0aGlzLmMgPSBjO1xuICAgIHRoaXMuZCA9IGQ7XG4gICAgdGhpcy50eCA9IHR4O1xuICAgIHRoaXMudHkgPSB0eTtcblxuICAgIHJldHVybiB0aGlzO1xufTtcblxuXG4vKipcbiAqIENyZWF0ZXMgYW4gYXJyYXkgZnJvbSB0aGUgY3VycmVudCBNYXRyaXggb2JqZWN0LlxuICpcbiAqIEBwYXJhbSB0cmFuc3Bvc2Uge2Jvb2xlYW59IFdoZXRoZXIgd2UgbmVlZCB0byB0cmFuc3Bvc2UgdGhlIG1hdHJpeCBvciBub3RcbiAqIEBwYXJhbSBbb3V0XSB7QXJyYXl9IElmIHByb3ZpZGVkIHRoZSBhcnJheSB3aWxsIGJlIGFzc2lnbmVkIHRvIG91dFxuICogQHJldHVybiB7bnVtYmVyW119IHRoZSBuZXdseSBjcmVhdGVkIGFycmF5IHdoaWNoIGNvbnRhaW5zIHRoZSBtYXRyaXhcbiAqL1xuTWF0cml4LnByb3RvdHlwZS50b0FycmF5ID0gZnVuY3Rpb24gKHRyYW5zcG9zZSwgb3V0KVxue1xuICAgIGlmICghdGhpcy5hcnJheSlcbiAgICB7XG4gICAgICAgIHRoaXMuYXJyYXkgPSBuZXcgRmxvYXQzMkFycmF5KDkpO1xuICAgIH1cblxuICAgIHZhciBhcnJheSA9IG91dCB8fCB0aGlzLmFycmF5O1xuXG4gICAgaWYgKHRyYW5zcG9zZSlcbiAgICB7XG4gICAgICAgIGFycmF5WzBdID0gdGhpcy5hO1xuICAgICAgICBhcnJheVsxXSA9IHRoaXMuYjtcbiAgICAgICAgYXJyYXlbMl0gPSAwO1xuICAgICAgICBhcnJheVszXSA9IHRoaXMuYztcbiAgICAgICAgYXJyYXlbNF0gPSB0aGlzLmQ7XG4gICAgICAgIGFycmF5WzVdID0gMDtcbiAgICAgICAgYXJyYXlbNl0gPSB0aGlzLnR4O1xuICAgICAgICBhcnJheVs3XSA9IHRoaXMudHk7XG4gICAgICAgIGFycmF5WzhdID0gMTtcbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgYXJyYXlbMF0gPSB0aGlzLmE7XG4gICAgICAgIGFycmF5WzFdID0gdGhpcy5jO1xuICAgICAgICBhcnJheVsyXSA9IHRoaXMudHg7XG4gICAgICAgIGFycmF5WzNdID0gdGhpcy5iO1xuICAgICAgICBhcnJheVs0XSA9IHRoaXMuZDtcbiAgICAgICAgYXJyYXlbNV0gPSB0aGlzLnR5O1xuICAgICAgICBhcnJheVs2XSA9IDA7XG4gICAgICAgIGFycmF5WzddID0gMDtcbiAgICAgICAgYXJyYXlbOF0gPSAxO1xuICAgIH1cblxuICAgIHJldHVybiBhcnJheTtcbn07XG5cbi8qKlxuICogR2V0IGEgbmV3IHBvc2l0aW9uIHdpdGggdGhlIGN1cnJlbnQgdHJhbnNmb3JtYXRpb24gYXBwbGllZC5cbiAqIENhbiBiZSB1c2VkIHRvIGdvIGZyb20gYSBjaGlsZCdzIGNvb3JkaW5hdGUgc3BhY2UgdG8gdGhlIHdvcmxkIGNvb3JkaW5hdGUgc3BhY2UuIChlLmcuIHJlbmRlcmluZylcbiAqXG4gKiBAcGFyYW0gcG9zIHtQSVhJLlBvaW50fSBUaGUgb3JpZ2luXG4gKiBAcGFyYW0gW25ld1Bvc10ge1BJWEkuUG9pbnR9IFRoZSBwb2ludCB0aGF0IHRoZSBuZXcgcG9zaXRpb24gaXMgYXNzaWduZWQgdG8gKGFsbG93ZWQgdG8gYmUgc2FtZSBhcyBpbnB1dClcbiAqIEByZXR1cm4ge1BJWEkuUG9pbnR9IFRoZSBuZXcgcG9pbnQsIHRyYW5zZm9ybWVkIHRocm91Z2ggdGhpcyBtYXRyaXhcbiAqL1xuTWF0cml4LnByb3RvdHlwZS5hcHBseSA9IGZ1bmN0aW9uIChwb3MsIG5ld1BvcylcbntcbiAgICBuZXdQb3MgPSBuZXdQb3MgfHwgbmV3IFBvaW50KCk7XG5cbiAgICB2YXIgeCA9IHBvcy54O1xuICAgIHZhciB5ID0gcG9zLnk7XG5cbiAgICBuZXdQb3MueCA9IHRoaXMuYSAqIHggKyB0aGlzLmMgKiB5ICsgdGhpcy50eDtcbiAgICBuZXdQb3MueSA9IHRoaXMuYiAqIHggKyB0aGlzLmQgKiB5ICsgdGhpcy50eTtcblxuICAgIHJldHVybiBuZXdQb3M7XG59O1xuXG4vKipcbiAqIEdldCBhIG5ldyBwb3NpdGlvbiB3aXRoIHRoZSBpbnZlcnNlIG9mIHRoZSBjdXJyZW50IHRyYW5zZm9ybWF0aW9uIGFwcGxpZWQuXG4gKiBDYW4gYmUgdXNlZCB0byBnbyBmcm9tIHRoZSB3b3JsZCBjb29yZGluYXRlIHNwYWNlIHRvIGEgY2hpbGQncyBjb29yZGluYXRlIHNwYWNlLiAoZS5nLiBpbnB1dClcbiAqXG4gKiBAcGFyYW0gcG9zIHtQSVhJLlBvaW50fSBUaGUgb3JpZ2luXG4gKiBAcGFyYW0gW25ld1Bvc10ge1BJWEkuUG9pbnR9IFRoZSBwb2ludCB0aGF0IHRoZSBuZXcgcG9zaXRpb24gaXMgYXNzaWduZWQgdG8gKGFsbG93ZWQgdG8gYmUgc2FtZSBhcyBpbnB1dClcbiAqIEByZXR1cm4ge1BJWEkuUG9pbnR9IFRoZSBuZXcgcG9pbnQsIGludmVyc2UtdHJhbnNmb3JtZWQgdGhyb3VnaCB0aGlzIG1hdHJpeFxuICovXG5NYXRyaXgucHJvdG90eXBlLmFwcGx5SW52ZXJzZSA9IGZ1bmN0aW9uIChwb3MsIG5ld1BvcylcbntcbiAgICBuZXdQb3MgPSBuZXdQb3MgfHwgbmV3IFBvaW50KCk7XG5cbiAgICB2YXIgaWQgPSAxIC8gKHRoaXMuYSAqIHRoaXMuZCArIHRoaXMuYyAqIC10aGlzLmIpO1xuXG4gICAgdmFyIHggPSBwb3MueDtcbiAgICB2YXIgeSA9IHBvcy55O1xuXG4gICAgbmV3UG9zLnggPSB0aGlzLmQgKiBpZCAqIHggKyAtdGhpcy5jICogaWQgKiB5ICsgKHRoaXMudHkgKiB0aGlzLmMgLSB0aGlzLnR4ICogdGhpcy5kKSAqIGlkO1xuICAgIG5ld1Bvcy55ID0gdGhpcy5hICogaWQgKiB5ICsgLXRoaXMuYiAqIGlkICogeCArICgtdGhpcy50eSAqIHRoaXMuYSArIHRoaXMudHggKiB0aGlzLmIpICogaWQ7XG5cbiAgICByZXR1cm4gbmV3UG9zO1xufTtcblxuLyoqXG4gKiBUcmFuc2xhdGVzIHRoZSBtYXRyaXggb24gdGhlIHggYW5kIHkuXG4gKlxuICogQHBhcmFtIHtudW1iZXJ9IHhcbiAqIEBwYXJhbSB7bnVtYmVyfSB5XG4gKiBAcmV0dXJuIHtQSVhJLk1hdHJpeH0gVGhpcyBtYXRyaXguIEdvb2QgZm9yIGNoYWluaW5nIG1ldGhvZCBjYWxscy5cbiAqL1xuTWF0cml4LnByb3RvdHlwZS50cmFuc2xhdGUgPSBmdW5jdGlvbiAoeCwgeSlcbntcbiAgICB0aGlzLnR4ICs9IHg7XG4gICAgdGhpcy50eSArPSB5O1xuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIEFwcGxpZXMgYSBzY2FsZSB0cmFuc2Zvcm1hdGlvbiB0byB0aGUgbWF0cml4LlxuICpcbiAqIEBwYXJhbSB7bnVtYmVyfSB4IFRoZSBhbW91bnQgdG8gc2NhbGUgaG9yaXpvbnRhbGx5XG4gKiBAcGFyYW0ge251bWJlcn0geSBUaGUgYW1vdW50IHRvIHNjYWxlIHZlcnRpY2FsbHlcbiAqIEByZXR1cm4ge1BJWEkuTWF0cml4fSBUaGlzIG1hdHJpeC4gR29vZCBmb3IgY2hhaW5pbmcgbWV0aG9kIGNhbGxzLlxuICovXG5NYXRyaXgucHJvdG90eXBlLnNjYWxlID0gZnVuY3Rpb24gKHgsIHkpXG57XG4gICAgdGhpcy5hICo9IHg7XG4gICAgdGhpcy5kICo9IHk7XG4gICAgdGhpcy5jICo9IHg7XG4gICAgdGhpcy5iICo9IHk7XG4gICAgdGhpcy50eCAqPSB4O1xuICAgIHRoaXMudHkgKj0geTtcblxuICAgIHJldHVybiB0aGlzO1xufTtcblxuXG4vKipcbiAqIEFwcGxpZXMgYSByb3RhdGlvbiB0cmFuc2Zvcm1hdGlvbiB0byB0aGUgbWF0cml4LlxuICpcbiAqIEBwYXJhbSB7bnVtYmVyfSBhbmdsZSAtIFRoZSBhbmdsZSBpbiByYWRpYW5zLlxuICogQHJldHVybiB7UElYSS5NYXRyaXh9IFRoaXMgbWF0cml4LiBHb29kIGZvciBjaGFpbmluZyBtZXRob2QgY2FsbHMuXG4gKi9cbk1hdHJpeC5wcm90b3R5cGUucm90YXRlID0gZnVuY3Rpb24gKGFuZ2xlKVxue1xuICAgIHZhciBjb3MgPSBNYXRoLmNvcyggYW5nbGUgKTtcbiAgICB2YXIgc2luID0gTWF0aC5zaW4oIGFuZ2xlICk7XG5cbiAgICB2YXIgYTEgPSB0aGlzLmE7XG4gICAgdmFyIGMxID0gdGhpcy5jO1xuICAgIHZhciB0eDEgPSB0aGlzLnR4O1xuXG4gICAgdGhpcy5hID0gYTEgKiBjb3MtdGhpcy5iICogc2luO1xuICAgIHRoaXMuYiA9IGExICogc2luK3RoaXMuYiAqIGNvcztcbiAgICB0aGlzLmMgPSBjMSAqIGNvcy10aGlzLmQgKiBzaW47XG4gICAgdGhpcy5kID0gYzEgKiBzaW4rdGhpcy5kICogY29zO1xuICAgIHRoaXMudHggPSB0eDEgKiBjb3MgLSB0aGlzLnR5ICogc2luO1xuICAgIHRoaXMudHkgPSB0eDEgKiBzaW4gKyB0aGlzLnR5ICogY29zO1xuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIEFwcGVuZHMgdGhlIGdpdmVuIE1hdHJpeCB0byB0aGlzIE1hdHJpeC5cbiAqXG4gKiBAcGFyYW0ge1BJWEkuTWF0cml4fSBtYXRyaXhcbiAqIEByZXR1cm4ge1BJWEkuTWF0cml4fSBUaGlzIG1hdHJpeC4gR29vZCBmb3IgY2hhaW5pbmcgbWV0aG9kIGNhbGxzLlxuICovXG5NYXRyaXgucHJvdG90eXBlLmFwcGVuZCA9IGZ1bmN0aW9uIChtYXRyaXgpXG57XG4gICAgdmFyIGExID0gdGhpcy5hO1xuICAgIHZhciBiMSA9IHRoaXMuYjtcbiAgICB2YXIgYzEgPSB0aGlzLmM7XG4gICAgdmFyIGQxID0gdGhpcy5kO1xuXG4gICAgdGhpcy5hICA9IG1hdHJpeC5hICogYTEgKyBtYXRyaXguYiAqIGMxO1xuICAgIHRoaXMuYiAgPSBtYXRyaXguYSAqIGIxICsgbWF0cml4LmIgKiBkMTtcbiAgICB0aGlzLmMgID0gbWF0cml4LmMgKiBhMSArIG1hdHJpeC5kICogYzE7XG4gICAgdGhpcy5kICA9IG1hdHJpeC5jICogYjEgKyBtYXRyaXguZCAqIGQxO1xuXG4gICAgdGhpcy50eCA9IG1hdHJpeC50eCAqIGExICsgbWF0cml4LnR5ICogYzEgKyB0aGlzLnR4O1xuICAgIHRoaXMudHkgPSBtYXRyaXgudHggKiBiMSArIG1hdHJpeC50eSAqIGQxICsgdGhpcy50eTtcblxuICAgIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBTZXRzIHRoZSBtYXRyaXggYmFzZWQgb24gYWxsIHRoZSBhdmFpbGFibGUgcHJvcGVydGllc1xuICpcbiAqIEBwYXJhbSB7bnVtYmVyfSB4XG4gKiBAcGFyYW0ge251bWJlcn0geVxuICogQHBhcmFtIHtudW1iZXJ9IHBpdm90WFxuICogQHBhcmFtIHtudW1iZXJ9IHBpdm90WVxuICogQHBhcmFtIHtudW1iZXJ9IHNjYWxlWFxuICogQHBhcmFtIHtudW1iZXJ9IHNjYWxlWVxuICogQHBhcmFtIHtudW1iZXJ9IHJvdGF0aW9uXG4gKiBAcGFyYW0ge251bWJlcn0gc2tld1hcbiAqIEBwYXJhbSB7bnVtYmVyfSBza2V3WVxuICpcbiAqIEByZXR1cm4ge1BJWEkuTWF0cml4fSBUaGlzIG1hdHJpeC4gR29vZCBmb3IgY2hhaW5pbmcgbWV0aG9kIGNhbGxzLlxuICovXG5NYXRyaXgucHJvdG90eXBlLnNldFRyYW5zZm9ybSA9IGZ1bmN0aW9uICh4LCB5LCBwaXZvdFgsIHBpdm90WSwgc2NhbGVYLCBzY2FsZVksIHJvdGF0aW9uLCBza2V3WCwgc2tld1kpXG57XG4gICAgdmFyIGEsIGIsIGMsIGQsIHNyLCBjciwgY3ksIHN5LCBuc3gsIGN4O1xuXG4gICAgc3IgID0gTWF0aC5zaW4ocm90YXRpb24pO1xuICAgIGNyICA9IE1hdGguY29zKHJvdGF0aW9uKTtcbiAgICBjeSAgPSBNYXRoLmNvcyhza2V3WSk7XG4gICAgc3kgID0gTWF0aC5zaW4oc2tld1kpO1xuICAgIG5zeCA9IC1NYXRoLnNpbihza2V3WCk7XG4gICAgY3ggID0gIE1hdGguY29zKHNrZXdYKTtcblxuICAgIGEgID0gIGNyICogc2NhbGVYO1xuICAgIGIgID0gIHNyICogc2NhbGVYO1xuICAgIGMgID0gLXNyICogc2NhbGVZO1xuICAgIGQgID0gIGNyICogc2NhbGVZO1xuXG4gICAgdGhpcy5hICA9IGN5ICogYSArIHN5ICogYztcbiAgICB0aGlzLmIgID0gY3kgKiBiICsgc3kgKiBkO1xuICAgIHRoaXMuYyAgPSBuc3ggKiBhICsgY3ggKiBjO1xuICAgIHRoaXMuZCAgPSBuc3ggKiBiICsgY3ggKiBkO1xuXG4gICAgdGhpcy50eCA9IHggKyAoIHBpdm90WCAqIGEgKyBwaXZvdFkgKiBjICk7XG4gICAgdGhpcy50eSA9IHkgKyAoIHBpdm90WCAqIGIgKyBwaXZvdFkgKiBkICk7XG5cbiAgICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogUHJlcGVuZHMgdGhlIGdpdmVuIE1hdHJpeCB0byB0aGlzIE1hdHJpeC5cbiAqXG4gKiBAcGFyYW0ge1BJWEkuTWF0cml4fSBtYXRyaXhcbiAqIEByZXR1cm4ge1BJWEkuTWF0cml4fSBUaGlzIG1hdHJpeC4gR29vZCBmb3IgY2hhaW5pbmcgbWV0aG9kIGNhbGxzLlxuICovXG5NYXRyaXgucHJvdG90eXBlLnByZXBlbmQgPSBmdW5jdGlvbihtYXRyaXgpXG57XG4gICAgdmFyIHR4MSA9IHRoaXMudHg7XG5cbiAgICBpZiAobWF0cml4LmEgIT09IDEgfHwgbWF0cml4LmIgIT09IDAgfHwgbWF0cml4LmMgIT09IDAgfHwgbWF0cml4LmQgIT09IDEpXG4gICAge1xuICAgICAgICB2YXIgYTEgPSB0aGlzLmE7XG4gICAgICAgIHZhciBjMSA9IHRoaXMuYztcbiAgICAgICAgdGhpcy5hICA9IGExKm1hdHJpeC5hK3RoaXMuYiptYXRyaXguYztcbiAgICAgICAgdGhpcy5iICA9IGExKm1hdHJpeC5iK3RoaXMuYiptYXRyaXguZDtcbiAgICAgICAgdGhpcy5jICA9IGMxKm1hdHJpeC5hK3RoaXMuZCptYXRyaXguYztcbiAgICAgICAgdGhpcy5kICA9IGMxKm1hdHJpeC5iK3RoaXMuZCptYXRyaXguZDtcbiAgICB9XG5cbiAgICB0aGlzLnR4ID0gdHgxKm1hdHJpeC5hK3RoaXMudHkqbWF0cml4LmMrbWF0cml4LnR4O1xuICAgIHRoaXMudHkgPSB0eDEqbWF0cml4LmIrdGhpcy50eSptYXRyaXguZCttYXRyaXgudHk7XG5cbiAgICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogSW52ZXJ0cyB0aGlzIG1hdHJpeFxuICpcbiAqIEByZXR1cm4ge1BJWEkuTWF0cml4fSBUaGlzIG1hdHJpeC4gR29vZCBmb3IgY2hhaW5pbmcgbWV0aG9kIGNhbGxzLlxuICovXG5NYXRyaXgucHJvdG90eXBlLmludmVydCA9IGZ1bmN0aW9uKClcbntcbiAgICB2YXIgYTEgPSB0aGlzLmE7XG4gICAgdmFyIGIxID0gdGhpcy5iO1xuICAgIHZhciBjMSA9IHRoaXMuYztcbiAgICB2YXIgZDEgPSB0aGlzLmQ7XG4gICAgdmFyIHR4MSA9IHRoaXMudHg7XG4gICAgdmFyIG4gPSBhMSpkMS1iMSpjMTtcblxuICAgIHRoaXMuYSA9IGQxL247XG4gICAgdGhpcy5iID0gLWIxL247XG4gICAgdGhpcy5jID0gLWMxL247XG4gICAgdGhpcy5kID0gYTEvbjtcbiAgICB0aGlzLnR4ID0gKGMxKnRoaXMudHktZDEqdHgxKS9uO1xuICAgIHRoaXMudHkgPSAtKGExKnRoaXMudHktYjEqdHgxKS9uO1xuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG5cbi8qKlxuICogUmVzZXRzIHRoaXMgTWF0aXggdG8gYW4gaWRlbnRpdHkgKGRlZmF1bHQpIG1hdHJpeC5cbiAqXG4gKiBAcmV0dXJuIHtQSVhJLk1hdHJpeH0gVGhpcyBtYXRyaXguIEdvb2QgZm9yIGNoYWluaW5nIG1ldGhvZCBjYWxscy5cbiAqL1xuTWF0cml4LnByb3RvdHlwZS5pZGVudGl0eSA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy5hID0gMTtcbiAgICB0aGlzLmIgPSAwO1xuICAgIHRoaXMuYyA9IDA7XG4gICAgdGhpcy5kID0gMTtcbiAgICB0aGlzLnR4ID0gMDtcbiAgICB0aGlzLnR5ID0gMDtcblxuICAgIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBDcmVhdGVzIGEgbmV3IE1hdHJpeCBvYmplY3Qgd2l0aCB0aGUgc2FtZSB2YWx1ZXMgYXMgdGhpcyBvbmUuXG4gKlxuICogQHJldHVybiB7UElYSS5NYXRyaXh9IEEgY29weSBvZiB0aGlzIG1hdHJpeC4gR29vZCBmb3IgY2hhaW5pbmcgbWV0aG9kIGNhbGxzLlxuICovXG5NYXRyaXgucHJvdG90eXBlLmNsb25lID0gZnVuY3Rpb24gKClcbntcbiAgICB2YXIgbWF0cml4ID0gbmV3IE1hdHJpeCgpO1xuICAgIG1hdHJpeC5hID0gdGhpcy5hO1xuICAgIG1hdHJpeC5iID0gdGhpcy5iO1xuICAgIG1hdHJpeC5jID0gdGhpcy5jO1xuICAgIG1hdHJpeC5kID0gdGhpcy5kO1xuICAgIG1hdHJpeC50eCA9IHRoaXMudHg7XG4gICAgbWF0cml4LnR5ID0gdGhpcy50eTtcblxuICAgIHJldHVybiBtYXRyaXg7XG59O1xuXG4vKipcbiAqIENoYW5nZXMgdGhlIHZhbHVlcyBvZiB0aGUgZ2l2ZW4gbWF0cml4IHRvIGJlIHRoZSBzYW1lIGFzIHRoZSBvbmVzIGluIHRoaXMgbWF0cml4XG4gKlxuICogQHJldHVybiB7UElYSS5NYXRyaXh9IFRoZSBtYXRyaXggZ2l2ZW4gaW4gcGFyYW1ldGVyIHdpdGggaXRzIHZhbHVlcyB1cGRhdGVkLlxuICovXG5NYXRyaXgucHJvdG90eXBlLmNvcHkgPSBmdW5jdGlvbiAobWF0cml4KVxue1xuICAgIG1hdHJpeC5hID0gdGhpcy5hO1xuICAgIG1hdHJpeC5iID0gdGhpcy5iO1xuICAgIG1hdHJpeC5jID0gdGhpcy5jO1xuICAgIG1hdHJpeC5kID0gdGhpcy5kO1xuICAgIG1hdHJpeC50eCA9IHRoaXMudHg7XG4gICAgbWF0cml4LnR5ID0gdGhpcy50eTtcblxuICAgIHJldHVybiBtYXRyaXg7XG59O1xuXG4vKipcbiAqIEEgZGVmYXVsdCAoaWRlbnRpdHkpIG1hdHJpeFxuICpcbiAqIEBzdGF0aWNcbiAqIEBjb25zdFxuICovXG5NYXRyaXguSURFTlRJVFkgPSBuZXcgTWF0cml4KCk7XG5cbi8qKlxuICogQSB0ZW1wIG1hdHJpeFxuICpcbiAqIEBzdGF0aWNcbiAqIEBjb25zdFxuICovXG5NYXRyaXguVEVNUF9NQVRSSVggPSBuZXcgTWF0cml4KCk7XG4iLCIvKipcbiAqIFRoZSBQb2ludCBvYmplY3QgcmVwcmVzZW50cyBhIGxvY2F0aW9uIGluIGEgdHdvLWRpbWVuc2lvbmFsIGNvb3JkaW5hdGUgc3lzdGVtLCB3aGVyZSB4IHJlcHJlc2VudHNcbiAqIHRoZSBob3Jpem9udGFsIGF4aXMgYW5kIHkgcmVwcmVzZW50cyB0aGUgdmVydGljYWwgYXhpcy5cbiAqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gW3g9MF0ge251bWJlcn0gcG9zaXRpb24gb2YgdGhlIHBvaW50IG9uIHRoZSB4IGF4aXNcbiAqIEBwYXJhbSBbeT0wXSB7bnVtYmVyfSBwb3NpdGlvbiBvZiB0aGUgcG9pbnQgb24gdGhlIHkgYXhpc1xuICovXG5mdW5jdGlvbiBQb2ludCh4LCB5KVxue1xuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAwXG4gICAgICovXG4gICAgdGhpcy54ID0geCB8fCAwO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDBcbiAgICAgKi9cbiAgICB0aGlzLnkgPSB5IHx8IDA7XG59XG5cblBvaW50LnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFBvaW50O1xubW9kdWxlLmV4cG9ydHMgPSBQb2ludDtcblxuLyoqXG4gKiBDcmVhdGVzIGEgY2xvbmUgb2YgdGhpcyBwb2ludFxuICpcbiAqIEByZXR1cm4ge1BJWEkuUG9pbnR9IGEgY29weSBvZiB0aGUgcG9pbnRcbiAqL1xuUG9pbnQucHJvdG90eXBlLmNsb25lID0gZnVuY3Rpb24gKClcbntcbiAgICByZXR1cm4gbmV3IFBvaW50KHRoaXMueCwgdGhpcy55KTtcbn07XG5cbi8qKlxuICogQ29waWVzIHggYW5kIHkgZnJvbSB0aGUgZ2l2ZW4gcG9pbnRcbiAqXG4gKiBAcGFyYW0gcCB7UElYSS5Qb2ludH1cbiAqL1xuUG9pbnQucHJvdG90eXBlLmNvcHkgPSBmdW5jdGlvbiAocCkge1xuICAgIHRoaXMuc2V0KHAueCwgcC55KTtcbn07XG5cbi8qKlxuICogUmV0dXJucyB0cnVlIGlmIHRoZSBnaXZlbiBwb2ludCBpcyBlcXVhbCB0byB0aGlzIHBvaW50XG4gKlxuICogQHBhcmFtIHAge1BJWEkuUG9pbnR9XG4gKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAqL1xuUG9pbnQucHJvdG90eXBlLmVxdWFscyA9IGZ1bmN0aW9uIChwKSB7XG4gICAgcmV0dXJuIChwLnggPT09IHRoaXMueCkgJiYgKHAueSA9PT0gdGhpcy55KTtcbn07XG5cbi8qKlxuICogU2V0cyB0aGUgcG9pbnQgdG8gYSBuZXcgeCBhbmQgeSBwb3NpdGlvbi5cbiAqIElmIHkgaXMgb21pdHRlZCwgYm90aCB4IGFuZCB5IHdpbGwgYmUgc2V0IHRvIHguXG4gKlxuICogQHBhcmFtIFt4PTBdIHtudW1iZXJ9IHBvc2l0aW9uIG9mIHRoZSBwb2ludCBvbiB0aGUgeCBheGlzXG4gKiBAcGFyYW0gW3k9MF0ge251bWJlcn0gcG9zaXRpb24gb2YgdGhlIHBvaW50IG9uIHRoZSB5IGF4aXNcbiAqL1xuUG9pbnQucHJvdG90eXBlLnNldCA9IGZ1bmN0aW9uICh4LCB5KVxue1xuICAgIHRoaXMueCA9IHggfHwgMDtcbiAgICB0aGlzLnkgPSB5IHx8ICggKHkgIT09IDApID8gdGhpcy54IDogMCApIDtcbn07XG4iLCIvKipcbiAqIE1hdGggY2xhc3NlcyBhbmQgdXRpbGl0aWVzIG1peGVkIGludG8gUElYSSBuYW1lc3BhY2UuXG4gKlxuICogQGxlbmRzIFBJWElcbiAqL1xubW9kdWxlLmV4cG9ydHMgPSB7XG4gICAgLy8gVGhlc2Ugd2lsbCBiZSBtaXhlZCB0byBiZSBtYWRlIHB1YmxpY2x5IGF2YWlsYWJsZSxcbiAgICAvLyB3aGlsZSB0aGlzIG1vZHVsZSBpcyB1c2VkIGludGVybmFsbHkgaW4gY29yZVxuICAgIC8vIHRvIGF2b2lkIGNpcmN1bGFyIGRlcGVuZGVuY2llcyBhbmQgY3V0IGRvd24gb25cbiAgICAvLyBpbnRlcm5hbCBtb2R1bGUgcmVxdWlyZXMuXG5cbiAgICBQb2ludDogICAgICByZXF1aXJlKCcuL1BvaW50JyksXG4gICAgTWF0cml4OiAgICAgcmVxdWlyZSgnLi9NYXRyaXgnKSxcblxuICAgIENpcmNsZTogICAgIHJlcXVpcmUoJy4vc2hhcGVzL0NpcmNsZScpLFxuICAgIEVsbGlwc2U6ICAgIHJlcXVpcmUoJy4vc2hhcGVzL0VsbGlwc2UnKSxcbiAgICBQb2x5Z29uOiAgICByZXF1aXJlKCcuL3NoYXBlcy9Qb2x5Z29uJyksXG4gICAgUmVjdGFuZ2xlOiAgcmVxdWlyZSgnLi9zaGFwZXMvUmVjdGFuZ2xlJyksXG4gICAgUm91bmRlZFJlY3RhbmdsZTogcmVxdWlyZSgnLi9zaGFwZXMvUm91bmRlZFJlY3RhbmdsZScpXG59O1xuIiwidmFyIFJlY3RhbmdsZSA9IHJlcXVpcmUoJy4vUmVjdGFuZ2xlJyksXG4gICAgQ09OU1QgPSByZXF1aXJlKCcuLi8uLi9jb25zdCcpO1xuXG4vKipcbiAqIFRoZSBDaXJjbGUgb2JqZWN0IGNhbiBiZSB1c2VkIHRvIHNwZWNpZnkgYSBoaXQgYXJlYSBmb3IgZGlzcGxheU9iamVjdHNcbiAqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0geCB7bnVtYmVyfSBUaGUgWCBjb29yZGluYXRlIG9mIHRoZSBjZW50ZXIgb2YgdGhpcyBjaXJjbGVcbiAqIEBwYXJhbSB5IHtudW1iZXJ9IFRoZSBZIGNvb3JkaW5hdGUgb2YgdGhlIGNlbnRlciBvZiB0aGlzIGNpcmNsZVxuICogQHBhcmFtIHJhZGl1cyB7bnVtYmVyfSBUaGUgcmFkaXVzIG9mIHRoZSBjaXJjbGVcbiAqL1xuZnVuY3Rpb24gQ2lyY2xlKHgsIHksIHJhZGl1cylcbntcbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMFxuICAgICAqL1xuICAgIHRoaXMueCA9IHggfHwgMDtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAwXG4gICAgICovXG4gICAgdGhpcy55ID0geSB8fCAwO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDBcbiAgICAgKi9cbiAgICB0aGlzLnJhZGl1cyA9IHJhZGl1cyB8fCAwO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHR5cGUgb2YgdGhlIG9iamVjdCwgbWFpbmx5IHVzZWQgdG8gYXZvaWQgYGluc3RhbmNlb2ZgIGNoZWNrc1xuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMudHlwZSA9IENPTlNULlNIQVBFUy5DSVJDO1xufVxuXG5DaXJjbGUucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gQ2lyY2xlO1xubW9kdWxlLmV4cG9ydHMgPSBDaXJjbGU7XG5cbi8qKlxuICogQ3JlYXRlcyBhIGNsb25lIG9mIHRoaXMgQ2lyY2xlIGluc3RhbmNlXG4gKlxuICogQHJldHVybiB7UElYSS5DaXJjbGV9IGEgY29weSBvZiB0aGUgQ2lyY2xlXG4gKi9cbkNpcmNsZS5wcm90b3R5cGUuY2xvbmUgPSBmdW5jdGlvbiAoKVxue1xuICAgIHJldHVybiBuZXcgQ2lyY2xlKHRoaXMueCwgdGhpcy55LCB0aGlzLnJhZGl1cyk7XG59O1xuXG4vKipcbiAqIENoZWNrcyB3aGV0aGVyIHRoZSB4IGFuZCB5IGNvb3JkaW5hdGVzIGdpdmVuIGFyZSBjb250YWluZWQgd2l0aGluIHRoaXMgY2lyY2xlXG4gKlxuICogQHBhcmFtIHgge251bWJlcn0gVGhlIFggY29vcmRpbmF0ZSBvZiB0aGUgcG9pbnQgdG8gdGVzdFxuICogQHBhcmFtIHkge251bWJlcn0gVGhlIFkgY29vcmRpbmF0ZSBvZiB0aGUgcG9pbnQgdG8gdGVzdFxuICogQHJldHVybiB7Ym9vbGVhbn0gV2hldGhlciB0aGUgeC95IGNvb3JkaW5hdGVzIGFyZSB3aXRoaW4gdGhpcyBDaXJjbGVcbiAqL1xuQ2lyY2xlLnByb3RvdHlwZS5jb250YWlucyA9IGZ1bmN0aW9uICh4LCB5KVxue1xuICAgIGlmICh0aGlzLnJhZGl1cyA8PSAwKVxuICAgIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHZhciBkeCA9ICh0aGlzLnggLSB4KSxcbiAgICAgICAgZHkgPSAodGhpcy55IC0geSksXG4gICAgICAgIHIyID0gdGhpcy5yYWRpdXMgKiB0aGlzLnJhZGl1cztcblxuICAgIGR4ICo9IGR4O1xuICAgIGR5ICo9IGR5O1xuXG4gICAgcmV0dXJuIChkeCArIGR5IDw9IHIyKTtcbn07XG5cbi8qKlxuKiBSZXR1cm5zIHRoZSBmcmFtaW5nIHJlY3RhbmdsZSBvZiB0aGUgY2lyY2xlIGFzIGEgUmVjdGFuZ2xlIG9iamVjdFxuKlxuKiBAcmV0dXJuIHtQSVhJLlJlY3RhbmdsZX0gdGhlIGZyYW1pbmcgcmVjdGFuZ2xlXG4qL1xuQ2lyY2xlLnByb3RvdHlwZS5nZXRCb3VuZHMgPSBmdW5jdGlvbiAoKVxue1xuICAgIHJldHVybiBuZXcgUmVjdGFuZ2xlKHRoaXMueCAtIHRoaXMucmFkaXVzLCB0aGlzLnkgLSB0aGlzLnJhZGl1cywgdGhpcy5yYWRpdXMgKiAyLCB0aGlzLnJhZGl1cyAqIDIpO1xufTtcbiIsInZhciBSZWN0YW5nbGUgPSByZXF1aXJlKCcuL1JlY3RhbmdsZScpLFxuICAgIENPTlNUID0gcmVxdWlyZSgnLi4vLi4vY29uc3QnKTtcblxuLyoqXG4gKiBUaGUgRWxsaXBzZSBvYmplY3QgY2FuIGJlIHVzZWQgdG8gc3BlY2lmeSBhIGhpdCBhcmVhIGZvciBkaXNwbGF5T2JqZWN0c1xuICpcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqIEBwYXJhbSB4IHtudW1iZXJ9IFRoZSBYIGNvb3JkaW5hdGUgb2YgdGhlIGNlbnRlciBvZiB0aGUgZWxsaXBzZVxuICogQHBhcmFtIHkge251bWJlcn0gVGhlIFkgY29vcmRpbmF0ZSBvZiB0aGUgY2VudGVyIG9mIHRoZSBlbGxpcHNlXG4gKiBAcGFyYW0gd2lkdGgge251bWJlcn0gVGhlIGhhbGYgd2lkdGggb2YgdGhpcyBlbGxpcHNlXG4gKiBAcGFyYW0gaGVpZ2h0IHtudW1iZXJ9IFRoZSBoYWxmIGhlaWdodCBvZiB0aGlzIGVsbGlwc2VcbiAqL1xuZnVuY3Rpb24gRWxsaXBzZSh4LCB5LCB3aWR0aCwgaGVpZ2h0KVxue1xuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAwXG4gICAgICovXG4gICAgdGhpcy54ID0geCB8fCAwO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDBcbiAgICAgKi9cbiAgICB0aGlzLnkgPSB5IHx8IDA7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMFxuICAgICAqL1xuICAgIHRoaXMud2lkdGggPSB3aWR0aCB8fCAwO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDBcbiAgICAgKi9cbiAgICB0aGlzLmhlaWdodCA9IGhlaWdodCB8fCAwO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHR5cGUgb2YgdGhlIG9iamVjdCwgbWFpbmx5IHVzZWQgdG8gYXZvaWQgYGluc3RhbmNlb2ZgIGNoZWNrc1xuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMudHlwZSA9IENPTlNULlNIQVBFUy5FTElQO1xufVxuXG5FbGxpcHNlLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IEVsbGlwc2U7XG5tb2R1bGUuZXhwb3J0cyA9IEVsbGlwc2U7XG5cbi8qKlxuICogQ3JlYXRlcyBhIGNsb25lIG9mIHRoaXMgRWxsaXBzZSBpbnN0YW5jZVxuICpcbiAqIEByZXR1cm4ge1BJWEkuRWxsaXBzZX0gYSBjb3B5IG9mIHRoZSBlbGxpcHNlXG4gKi9cbkVsbGlwc2UucHJvdG90eXBlLmNsb25lID0gZnVuY3Rpb24gKClcbntcbiAgICByZXR1cm4gbmV3IEVsbGlwc2UodGhpcy54LCB0aGlzLnksIHRoaXMud2lkdGgsIHRoaXMuaGVpZ2h0KTtcbn07XG5cbi8qKlxuICogQ2hlY2tzIHdoZXRoZXIgdGhlIHggYW5kIHkgY29vcmRpbmF0ZXMgZ2l2ZW4gYXJlIGNvbnRhaW5lZCB3aXRoaW4gdGhpcyBlbGxpcHNlXG4gKlxuICogQHBhcmFtIHgge251bWJlcn0gVGhlIFggY29vcmRpbmF0ZSBvZiB0aGUgcG9pbnQgdG8gdGVzdFxuICogQHBhcmFtIHkge251bWJlcn0gVGhlIFkgY29vcmRpbmF0ZSBvZiB0aGUgcG9pbnQgdG8gdGVzdFxuICogQHJldHVybiB7Ym9vbGVhbn0gV2hldGhlciB0aGUgeC95IGNvb3JkcyBhcmUgd2l0aGluIHRoaXMgZWxsaXBzZVxuICovXG5FbGxpcHNlLnByb3RvdHlwZS5jb250YWlucyA9IGZ1bmN0aW9uICh4LCB5KVxue1xuICAgIGlmICh0aGlzLndpZHRoIDw9IDAgfHwgdGhpcy5oZWlnaHQgPD0gMClcbiAgICB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICAvL25vcm1hbGl6ZSB0aGUgY29vcmRzIHRvIGFuIGVsbGlwc2Ugd2l0aCBjZW50ZXIgMCwwXG4gICAgdmFyIG5vcm14ID0gKCh4IC0gdGhpcy54KSAvIHRoaXMud2lkdGgpLFxuICAgICAgICBub3JteSA9ICgoeSAtIHRoaXMueSkgLyB0aGlzLmhlaWdodCk7XG5cbiAgICBub3JteCAqPSBub3JteDtcbiAgICBub3JteSAqPSBub3JteTtcblxuICAgIHJldHVybiAobm9ybXggKyBub3JteSA8PSAxKTtcbn07XG5cbi8qKlxuICogUmV0dXJucyB0aGUgZnJhbWluZyByZWN0YW5nbGUgb2YgdGhlIGVsbGlwc2UgYXMgYSBSZWN0YW5nbGUgb2JqZWN0XG4gKlxuICogQHJldHVybiB7UElYSS5SZWN0YW5nbGV9IHRoZSBmcmFtaW5nIHJlY3RhbmdsZVxuICovXG5FbGxpcHNlLnByb3RvdHlwZS5nZXRCb3VuZHMgPSBmdW5jdGlvbiAoKVxue1xuICAgIHJldHVybiBuZXcgUmVjdGFuZ2xlKHRoaXMueCAtIHRoaXMud2lkdGgsIHRoaXMueSAtIHRoaXMuaGVpZ2h0LCB0aGlzLndpZHRoLCB0aGlzLmhlaWdodCk7XG59O1xuIiwidmFyIFBvaW50ID0gcmVxdWlyZSgnLi4vUG9pbnQnKSxcbiAgICBDT05TVCA9IHJlcXVpcmUoJy4uLy4uL2NvbnN0Jyk7XG5cbi8qKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIHBvaW50cyB7UElYSS5Qb2ludFtdfG51bWJlcltdfC4uLlBJWEkuUG9pbnR8Li4ubnVtYmVyfSBUaGlzIGNhbiBiZSBhbiBhcnJheSBvZiBQb2ludHMgdGhhdCBmb3JtIHRoZSBwb2x5Z29uLFxuICogICAgICBhIGZsYXQgYXJyYXkgb2YgbnVtYmVycyB0aGF0IHdpbGwgYmUgaW50ZXJwcmV0ZWQgYXMgW3gseSwgeCx5LCAuLi5dLCBvciB0aGUgYXJndW1lbnRzIHBhc3NlZCBjYW4gYmVcbiAqICAgICAgYWxsIHRoZSBwb2ludHMgb2YgdGhlIHBvbHlnb24gZS5nLiBgbmV3IFBJWEkuUG9seWdvbihuZXcgUElYSS5Qb2ludCgpLCBuZXcgUElYSS5Qb2ludCgpLCAuLi4pYCwgb3IgdGhlXG4gKiAgICAgIGFyZ3VtZW50cyBwYXNzZWQgY2FuIGJlIGZsYXQgeCx5IHZhbHVlcyBlLmcuIGBuZXcgUG9seWdvbih4LHksIHgseSwgeCx5LCAuLi4pYCB3aGVyZSBgeGAgYW5kIGB5YCBhcmVcbiAqICAgICAgTnVtYmVycy5cbiAqL1xuZnVuY3Rpb24gUG9seWdvbihwb2ludHNfKVxue1xuICAgIC8vIHByZXZlbnRzIGFuIGFyZ3VtZW50IGFzc2lnbm1lbnQgZGVvcHRcbiAgICAvLyBzZWUgc2VjdGlvbiAzLjE6IGh0dHBzOi8vZ2l0aHViLmNvbS9wZXRrYWFudG9ub3YvYmx1ZWJpcmQvd2lraS9PcHRpbWl6YXRpb24ta2lsbGVycyMzLW1hbmFnaW5nLWFyZ3VtZW50c1xuICAgIHZhciBwb2ludHMgPSBwb2ludHNfO1xuXG4gICAgLy9pZiBwb2ludHMgaXNuJ3QgYW4gYXJyYXksIHVzZSBhcmd1bWVudHMgYXMgdGhlIGFycmF5XG4gICAgaWYgKCFBcnJheS5pc0FycmF5KHBvaW50cykpXG4gICAge1xuICAgICAgICAvLyBwcmV2ZW50cyBhbiBhcmd1bWVudCBsZWFrIGRlb3B0XG4gICAgICAgIC8vIHNlZSBzZWN0aW9uIDMuMjogaHR0cHM6Ly9naXRodWIuY29tL3BldGthYW50b25vdi9ibHVlYmlyZC93aWtpL09wdGltaXphdGlvbi1raWxsZXJzIzMtbWFuYWdpbmctYXJndW1lbnRzXG4gICAgICAgIHBvaW50cyA9IG5ldyBBcnJheShhcmd1bWVudHMubGVuZ3RoKTtcblxuICAgICAgICBmb3IgKHZhciBhID0gMDsgYSA8IHBvaW50cy5sZW5ndGg7ICsrYSkge1xuICAgICAgICAgICAgcG9pbnRzW2FdID0gYXJndW1lbnRzW2FdO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gaWYgdGhpcyBpcyBhbiBhcnJheSBvZiBwb2ludHMsIGNvbnZlcnQgaXQgdG8gYSBmbGF0IGFycmF5IG9mIG51bWJlcnNcbiAgICBpZiAocG9pbnRzWzBdIGluc3RhbmNlb2YgUG9pbnQpXG4gICAge1xuICAgICAgICB2YXIgcCA9IFtdO1xuICAgICAgICBmb3IgKHZhciBpID0gMCwgaWwgPSBwb2ludHMubGVuZ3RoOyBpIDwgaWw7IGkrKylcbiAgICAgICAge1xuICAgICAgICAgICAgcC5wdXNoKHBvaW50c1tpXS54LCBwb2ludHNbaV0ueSk7XG4gICAgICAgIH1cblxuICAgICAgICBwb2ludHMgPSBwO1xuICAgIH1cblxuICAgIHRoaXMuY2xvc2VkID0gdHJ1ZTtcblxuICAgIC8qKlxuICAgICAqIEFuIGFycmF5IG9mIHRoZSBwb2ludHMgb2YgdGhpcyBwb2x5Z29uXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJbXX1cbiAgICAgKi9cbiAgICB0aGlzLnBvaW50cyA9IHBvaW50cztcblxuICAgIC8qKlxuICAgICAqIFRoZSB0eXBlIG9mIHRoZSBvYmplY3QsIG1haW5seSB1c2VkIHRvIGF2b2lkIGBpbnN0YW5jZW9mYCBjaGVja3NcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLnR5cGUgPSBDT05TVC5TSEFQRVMuUE9MWTtcbn1cblxuUG9seWdvbi5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBQb2x5Z29uO1xubW9kdWxlLmV4cG9ydHMgPSBQb2x5Z29uO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBjbG9uZSBvZiB0aGlzIHBvbHlnb25cbiAqXG4gKiBAcmV0dXJuIHtQSVhJLlBvbHlnb259IGEgY29weSBvZiB0aGUgcG9seWdvblxuICovXG5Qb2x5Z29uLnByb3RvdHlwZS5jbG9uZSA9IGZ1bmN0aW9uICgpXG57XG4gICAgcmV0dXJuIG5ldyBQb2x5Z29uKHRoaXMucG9pbnRzLnNsaWNlKCkpO1xufTtcblxuLyoqXG4gKiBDaGVja3Mgd2hldGhlciB0aGUgeCBhbmQgeSBjb29yZGluYXRlcyBwYXNzZWQgdG8gdGhpcyBmdW5jdGlvbiBhcmUgY29udGFpbmVkIHdpdGhpbiB0aGlzIHBvbHlnb25cbiAqXG4gKiBAcGFyYW0geCB7bnVtYmVyfSBUaGUgWCBjb29yZGluYXRlIG9mIHRoZSBwb2ludCB0byB0ZXN0XG4gKiBAcGFyYW0geSB7bnVtYmVyfSBUaGUgWSBjb29yZGluYXRlIG9mIHRoZSBwb2ludCB0byB0ZXN0XG4gKiBAcmV0dXJuIHtib29sZWFufSBXaGV0aGVyIHRoZSB4L3kgY29vcmRpbmF0ZXMgYXJlIHdpdGhpbiB0aGlzIHBvbHlnb25cbiAqL1xuUG9seWdvbi5wcm90b3R5cGUuY29udGFpbnMgPSBmdW5jdGlvbiAoeCwgeSlcbntcbiAgICB2YXIgaW5zaWRlID0gZmFsc2U7XG5cbiAgICAvLyB1c2Ugc29tZSByYXljYXN0aW5nIHRvIHRlc3QgaGl0c1xuICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9zdWJzdGFjay9wb2ludC1pbi1wb2x5Z29uL2Jsb2IvbWFzdGVyL2luZGV4LmpzXG4gICAgdmFyIGxlbmd0aCA9IHRoaXMucG9pbnRzLmxlbmd0aCAvIDI7XG5cbiAgICBmb3IgKHZhciBpID0gMCwgaiA9IGxlbmd0aCAtIDE7IGkgPCBsZW5ndGg7IGogPSBpKyspXG4gICAge1xuICAgICAgICB2YXIgeGkgPSB0aGlzLnBvaW50c1tpICogMl0sIHlpID0gdGhpcy5wb2ludHNbaSAqIDIgKyAxXSxcbiAgICAgICAgICAgIHhqID0gdGhpcy5wb2ludHNbaiAqIDJdLCB5aiA9IHRoaXMucG9pbnRzW2ogKiAyICsgMV0sXG4gICAgICAgICAgICBpbnRlcnNlY3QgPSAoKHlpID4geSkgIT09ICh5aiA+IHkpKSAmJiAoeCA8ICh4aiAtIHhpKSAqICh5IC0geWkpIC8gKHlqIC0geWkpICsgeGkpO1xuXG4gICAgICAgIGlmIChpbnRlcnNlY3QpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGluc2lkZSA9ICFpbnNpZGU7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gaW5zaWRlO1xufTtcbiIsInZhciBDT05TVCA9IHJlcXVpcmUoJy4uLy4uL2NvbnN0Jyk7XG5cbi8qKlxuICogdGhlIFJlY3RhbmdsZSBvYmplY3QgaXMgYW4gYXJlYSBkZWZpbmVkIGJ5IGl0cyBwb3NpdGlvbiwgYXMgaW5kaWNhdGVkIGJ5IGl0cyB0b3AtbGVmdCBjb3JuZXIgcG9pbnQgKHgsIHkpIGFuZCBieSBpdHMgd2lkdGggYW5kIGl0cyBoZWlnaHQuXG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIHgge251bWJlcn0gVGhlIFggY29vcmRpbmF0ZSBvZiB0aGUgdXBwZXItbGVmdCBjb3JuZXIgb2YgdGhlIHJlY3RhbmdsZVxuICogQHBhcmFtIHkge251bWJlcn0gVGhlIFkgY29vcmRpbmF0ZSBvZiB0aGUgdXBwZXItbGVmdCBjb3JuZXIgb2YgdGhlIHJlY3RhbmdsZVxuICogQHBhcmFtIHdpZHRoIHtudW1iZXJ9IFRoZSBvdmVyYWxsIHdpZHRoIG9mIHRoaXMgcmVjdGFuZ2xlXG4gKiBAcGFyYW0gaGVpZ2h0IHtudW1iZXJ9IFRoZSBvdmVyYWxsIGhlaWdodCBvZiB0aGlzIHJlY3RhbmdsZVxuICovXG5mdW5jdGlvbiBSZWN0YW5nbGUoeCwgeSwgd2lkdGgsIGhlaWdodClcbntcbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMFxuICAgICAqL1xuICAgIHRoaXMueCA9IHggfHwgMDtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAwXG4gICAgICovXG4gICAgdGhpcy55ID0geSB8fCAwO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDBcbiAgICAgKi9cbiAgICB0aGlzLndpZHRoID0gd2lkdGggfHwgMDtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAwXG4gICAgICovXG4gICAgdGhpcy5oZWlnaHQgPSBoZWlnaHQgfHwgMDtcblxuICAgIC8qKlxuICAgICAqIFRoZSB0eXBlIG9mIHRoZSBvYmplY3QsIG1haW5seSB1c2VkIHRvIGF2b2lkIGBpbnN0YW5jZW9mYCBjaGVja3NcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLnR5cGUgPSBDT05TVC5TSEFQRVMuUkVDVDtcbn1cblxuUmVjdGFuZ2xlLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFJlY3RhbmdsZTtcbm1vZHVsZS5leHBvcnRzID0gUmVjdGFuZ2xlO1xuXG4vKipcbiAqIEEgY29uc3RhbnQgZW1wdHkgcmVjdGFuZ2xlLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBjb25zdGFudFxuICovXG5SZWN0YW5nbGUuRU1QVFkgPSBuZXcgUmVjdGFuZ2xlKDAsIDAsIDAsIDApO1xuXG5cbi8qKlxuICogQ3JlYXRlcyBhIGNsb25lIG9mIHRoaXMgUmVjdGFuZ2xlXG4gKlxuICogQHJldHVybiB7UElYSS5SZWN0YW5nbGV9IGEgY29weSBvZiB0aGUgcmVjdGFuZ2xlXG4gKi9cblJlY3RhbmdsZS5wcm90b3R5cGUuY2xvbmUgPSBmdW5jdGlvbiAoKVxue1xuICAgIHJldHVybiBuZXcgUmVjdGFuZ2xlKHRoaXMueCwgdGhpcy55LCB0aGlzLndpZHRoLCB0aGlzLmhlaWdodCk7XG59O1xuXG4vKipcbiAqIENoZWNrcyB3aGV0aGVyIHRoZSB4IGFuZCB5IGNvb3JkaW5hdGVzIGdpdmVuIGFyZSBjb250YWluZWQgd2l0aGluIHRoaXMgUmVjdGFuZ2xlXG4gKlxuICogQHBhcmFtIHgge251bWJlcn0gVGhlIFggY29vcmRpbmF0ZSBvZiB0aGUgcG9pbnQgdG8gdGVzdFxuICogQHBhcmFtIHkge251bWJlcn0gVGhlIFkgY29vcmRpbmF0ZSBvZiB0aGUgcG9pbnQgdG8gdGVzdFxuICogQHJldHVybiB7Ym9vbGVhbn0gV2hldGhlciB0aGUgeC95IGNvb3JkaW5hdGVzIGFyZSB3aXRoaW4gdGhpcyBSZWN0YW5nbGVcbiAqL1xuUmVjdGFuZ2xlLnByb3RvdHlwZS5jb250YWlucyA9IGZ1bmN0aW9uICh4LCB5KVxue1xuICAgIGlmICh0aGlzLndpZHRoIDw9IDAgfHwgdGhpcy5oZWlnaHQgPD0gMClcbiAgICB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBpZiAoeCA+PSB0aGlzLnggJiYgeCA8IHRoaXMueCArIHRoaXMud2lkdGgpXG4gICAge1xuICAgICAgICBpZiAoeSA+PSB0aGlzLnkgJiYgeSA8IHRoaXMueSArIHRoaXMuaGVpZ2h0KVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBmYWxzZTtcbn07XG4iLCJ2YXIgQ09OU1QgPSByZXF1aXJlKCcuLi8uLi9jb25zdCcpO1xuXG4vKipcbiAqIFRoZSBSb3VuZGVkIFJlY3RhbmdsZSBvYmplY3QgaXMgYW4gYXJlYSB0aGF0IGhhcyBuaWNlIHJvdW5kZWQgY29ybmVycywgYXMgaW5kaWNhdGVkIGJ5IGl0cyB0b3AtbGVmdCBjb3JuZXIgcG9pbnQgKHgsIHkpIGFuZCBieSBpdHMgd2lkdGggYW5kIGl0cyBoZWlnaHQgYW5kIGl0cyByYWRpdXMuXG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIHgge251bWJlcn0gVGhlIFggY29vcmRpbmF0ZSBvZiB0aGUgdXBwZXItbGVmdCBjb3JuZXIgb2YgdGhlIHJvdW5kZWQgcmVjdGFuZ2xlXG4gKiBAcGFyYW0geSB7bnVtYmVyfSBUaGUgWSBjb29yZGluYXRlIG9mIHRoZSB1cHBlci1sZWZ0IGNvcm5lciBvZiB0aGUgcm91bmRlZCByZWN0YW5nbGVcbiAqIEBwYXJhbSB3aWR0aCB7bnVtYmVyfSBUaGUgb3ZlcmFsbCB3aWR0aCBvZiB0aGlzIHJvdW5kZWQgcmVjdGFuZ2xlXG4gKiBAcGFyYW0gaGVpZ2h0IHtudW1iZXJ9IFRoZSBvdmVyYWxsIGhlaWdodCBvZiB0aGlzIHJvdW5kZWQgcmVjdGFuZ2xlXG4gKiBAcGFyYW0gcmFkaXVzIHtudW1iZXJ9IENvbnRyb2xzIHRoZSByYWRpdXMgb2YgdGhlIHJvdW5kZWQgY29ybmVyc1xuICovXG5mdW5jdGlvbiBSb3VuZGVkUmVjdGFuZ2xlKHgsIHksIHdpZHRoLCBoZWlnaHQsIHJhZGl1cylcbntcbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMFxuICAgICAqL1xuICAgIHRoaXMueCA9IHggfHwgMDtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAwXG4gICAgICovXG4gICAgdGhpcy55ID0geSB8fCAwO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDBcbiAgICAgKi9cbiAgICB0aGlzLndpZHRoID0gd2lkdGggfHwgMDtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAwXG4gICAgICovXG4gICAgdGhpcy5oZWlnaHQgPSBoZWlnaHQgfHwgMDtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAyMFxuICAgICAqL1xuICAgIHRoaXMucmFkaXVzID0gcmFkaXVzIHx8IDIwO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHR5cGUgb2YgdGhlIG9iamVjdCwgbWFpbmx5IHVzZWQgdG8gYXZvaWQgYGluc3RhbmNlb2ZgIGNoZWNrc1xuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMudHlwZSA9IENPTlNULlNIQVBFUy5SUkVDO1xufVxuXG5Sb3VuZGVkUmVjdGFuZ2xlLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFJvdW5kZWRSZWN0YW5nbGU7XG5tb2R1bGUuZXhwb3J0cyA9IFJvdW5kZWRSZWN0YW5nbGU7XG5cbi8qKlxuICogQ3JlYXRlcyBhIGNsb25lIG9mIHRoaXMgUm91bmRlZCBSZWN0YW5nbGVcbiAqXG4gKiBAcmV0dXJuIHtQSVhJLlJvdW5kZWRSZWN0YW5nbGV9IGEgY29weSBvZiB0aGUgcm91bmRlZCByZWN0YW5nbGVcbiAqL1xuUm91bmRlZFJlY3RhbmdsZS5wcm90b3R5cGUuY2xvbmUgPSBmdW5jdGlvbiAoKVxue1xuICAgIHJldHVybiBuZXcgUm91bmRlZFJlY3RhbmdsZSh0aGlzLngsIHRoaXMueSwgdGhpcy53aWR0aCwgdGhpcy5oZWlnaHQsIHRoaXMucmFkaXVzKTtcbn07XG5cbi8qKlxuICogQ2hlY2tzIHdoZXRoZXIgdGhlIHggYW5kIHkgY29vcmRpbmF0ZXMgZ2l2ZW4gYXJlIGNvbnRhaW5lZCB3aXRoaW4gdGhpcyBSb3VuZGVkIFJlY3RhbmdsZVxuICpcbiAqIEBwYXJhbSB4IHtudW1iZXJ9IFRoZSBYIGNvb3JkaW5hdGUgb2YgdGhlIHBvaW50IHRvIHRlc3RcbiAqIEBwYXJhbSB5IHtudW1iZXJ9IFRoZSBZIGNvb3JkaW5hdGUgb2YgdGhlIHBvaW50IHRvIHRlc3RcbiAqIEByZXR1cm4ge2Jvb2xlYW59IFdoZXRoZXIgdGhlIHgveSBjb29yZGluYXRlcyBhcmUgd2l0aGluIHRoaXMgUm91bmRlZCBSZWN0YW5nbGVcbiAqL1xuUm91bmRlZFJlY3RhbmdsZS5wcm90b3R5cGUuY29udGFpbnMgPSBmdW5jdGlvbiAoeCwgeSlcbntcbiAgICBpZiAodGhpcy53aWR0aCA8PSAwIHx8IHRoaXMuaGVpZ2h0IDw9IDApXG4gICAge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgaWYgKHggPj0gdGhpcy54ICYmIHggPD0gdGhpcy54ICsgdGhpcy53aWR0aClcbiAgICB7XG4gICAgICAgIGlmICh5ID49IHRoaXMueSAmJiB5IDw9IHRoaXMueSArIHRoaXMuaGVpZ2h0KVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBmYWxzZTtcbn07XG4iLCJ2YXIgQ29udGFpbmVyID0gcmVxdWlyZSgnLi4vZGlzcGxheS9Db250YWluZXInKSxcbiAgICBDT05TVCA9IHJlcXVpcmUoJy4uL2NvbnN0Jyk7XG5cbi8qKlxuICogVGhlIFBhcnRpY2xlQ29udGFpbmVyIGNsYXNzIGlzIGEgcmVhbGx5IGZhc3QgdmVyc2lvbiBvZiB0aGUgQ29udGFpbmVyIGJ1aWx0IHNvbGVseSBmb3Igc3BlZWQsXG4gKiBzbyB1c2Ugd2hlbiB5b3UgbmVlZCBhIGxvdCBvZiBzcHJpdGVzIG9yIHBhcnRpY2xlcy4gVGhlIHRyYWRlb2ZmIG9mIHRoZSBQYXJ0aWNsZUNvbnRhaW5lciBpcyB0aGF0IGFkdmFuY2VkXG4gKiBmdW5jdGlvbmFsaXR5IHdpbGwgbm90IHdvcmsuIFBhcnRpY2xlQ29udGFpbmVyIGltcGxlbWVudHMgb25seSB0aGUgYmFzaWMgb2JqZWN0IHRyYW5zZm9ybSAocG9zaXRpb24sIHNjYWxlLCByb3RhdGlvbikuXG4gKiBBbnkgb3RoZXIgZnVuY3Rpb25hbGl0eSBsaWtlIHRpbnRpbmcsIG1hc2tpbmcsIGV0YyB3aWxsIG5vdCB3b3JrIG9uIHNwcml0ZXMgaW4gdGhpcyBiYXRjaC5cbiAqXG4gKiBJdCdzIGV4dHJlbWVseSBlYXN5IHRvIHVzZSA6XG4gKlxuICogYGBganNcbiAqIHZhciBjb250YWluZXIgPSBuZXcgUGFydGljbGVDb250YWluZXIoKTtcbiAqXG4gKiBmb3IgKHZhciBpID0gMDsgaSA8IDEwMDsgKytpKVxuICoge1xuICogICAgIHZhciBzcHJpdGUgPSBuZXcgUElYSS5TcHJpdGUuZnJvbUltYWdlKFwibXlJbWFnZS5wbmdcIik7XG4gKiAgICAgY29udGFpbmVyLmFkZENoaWxkKHNwcml0ZSk7XG4gKiB9XG4gKiBgYGBcbiAqXG4gKiBBbmQgaGVyZSB5b3UgaGF2ZSBhIGh1bmRyZWQgc3ByaXRlcyB0aGF0IHdpbGwgYmUgcmVuZGVyZXIgYXQgdGhlIHNwZWVkIG9mIGxpZ2h0LlxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5Db250YWluZXJcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gW21heFNpemU9MTUwMDBdIHtudW1iZXJ9IFRoZSBtYXhpbXVtIG51bWJlciBvZiBwYXJ0aWNsZXMgdGhhdCBjYW4gYmUgcmVuZGVyZXIgYnkgdGhlIGNvbnRhaW5lci5cbiAqIEBwYXJhbSBbcHJvcGVydGllc10ge29iamVjdH0gVGhlIHByb3BlcnRpZXMgb2YgY2hpbGRyZW4gdGhhdCBzaG91bGQgYmUgdXBsb2FkZWQgdG8gdGhlIGdwdSBhbmQgYXBwbGllZC5cbiAqIEBwYXJhbSBbcHJvcGVydGllcy5zY2FsZT1mYWxzZV0ge2Jvb2xlYW59IFdoZW4gdHJ1ZSwgc2NhbGUgYmUgdXBsb2FkZWQgYW5kIGFwcGxpZWQuXG4gKiBAcGFyYW0gW3Byb3BlcnRpZXMucG9zaXRpb249dHJ1ZV0ge2Jvb2xlYW59IFdoZW4gdHJ1ZSwgcG9zaXRpb24gYmUgdXBsb2FkZWQgYW5kIGFwcGxpZWQuXG4gKiBAcGFyYW0gW3Byb3BlcnRpZXMucm90YXRpb249ZmFsc2VdIHtib29sZWFufSBXaGVuIHRydWUsIHJvdGF0aW9uIGJlIHVwbG9hZGVkIGFuZCBhcHBsaWVkLlxuICogQHBhcmFtIFtwcm9wZXJ0aWVzLnV2cz1mYWxzZV0ge2Jvb2xlYW59IFdoZW4gdHJ1ZSwgdXZzIGJlIHVwbG9hZGVkIGFuZCBhcHBsaWVkLlxuICogQHBhcmFtIFtwcm9wZXJ0aWVzLmFscGhhPWZhbHNlXSB7Ym9vbGVhbn0gV2hlbiB0cnVlLCBhbHBoYSBiZSB1cGxvYWRlZCBhbmQgYXBwbGllZC5cbiAqIEBwYXJhbSBbYmF0Y2hTaXplPTE1MDAwXSB7bnVtYmVyfSBOdW1iZXIgb2YgcGFydGljbGVzIHBlciBiYXRjaC5cbiAqL1xuZnVuY3Rpb24gUGFydGljbGVDb250YWluZXIobWF4U2l6ZSwgcHJvcGVydGllcywgYmF0Y2hTaXplKVxue1xuICAgIENvbnRhaW5lci5jYWxsKHRoaXMpO1xuXG4gICAgYmF0Y2hTaXplID0gYmF0Y2hTaXplIHx8IDE1MDAwOyAvL0NPTlNULlNQUklURV9CQVRDSF9TSVpFOyAvLyAyMDAwIGlzIGEgbmljZSBiYWxhbmNlIGJldHdlZW4gbW9iaWxlIC8gZGVza3RvcFxuICAgIG1heFNpemUgPSBtYXhTaXplIHx8IDE1MDAwO1xuXG4gICAgLy8gTWFraW5nIHN1cmUgdGhlIGJhdGNoIHNpemUgaXMgdmFsaWRcbiAgICAvLyA2NTUzNSBpcyBtYXggdmVydGV4IGluZGV4IGluIHRoZSBpbmRleCBidWZmZXIgKHNlZSBQYXJ0aWNsZVJlbmRlcmVyKVxuICAgIC8vIHNvIG1heCBudW1iZXIgb2YgcGFydGljbGVzIGlzIDY1NTM2IC8gNCA9IDE2Mzg0XG4gICAgdmFyIG1heEJhdGNoU2l6ZSA9IDE2Mzg0O1xuICAgIGlmIChiYXRjaFNpemUgPiBtYXhCYXRjaFNpemUpIHtcbiAgICAgICAgYmF0Y2hTaXplID0gbWF4QmF0Y2hTaXplO1xuICAgIH1cblxuICAgIGlmIChiYXRjaFNpemUgPiBtYXhTaXplKSB7XG4gICAgICAgIGJhdGNoU2l6ZSA9IG1heFNpemU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2V0IHByb3BlcnRpZXMgdG8gYmUgZHluYW1pYyAodHJ1ZSkgLyBzdGF0aWMgKGZhbHNlKVxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbltdfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fcHJvcGVydGllcyA9IFtmYWxzZSwgdHJ1ZSwgZmFsc2UsIGZhbHNlLCBmYWxzZV07XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9tYXhTaXplID0gbWF4U2l6ZTtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX2JhdGNoU2l6ZSA9IGJhdGNoU2l6ZTtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge1dlYkdMQnVmZmVyfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fYnVmZmVycyA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9idWZmZXJUb1VwZGF0ZSA9IDA7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqXG4gICAgICovXG4gICAgdGhpcy5pbnRlcmFjdGl2ZUNoaWxkcmVuID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYmxlbmQgbW9kZSB0byBiZSBhcHBsaWVkIHRvIHRoZSBzcHJpdGUuIEFwcGx5IGEgdmFsdWUgb2YgYFBJWEkuQkxFTkRfTU9ERVMuTk9STUFMYCB0byByZXNldCB0aGUgYmxlbmQgbW9kZS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCBQSVhJLkJMRU5EX01PREVTLk5PUk1BTFxuICAgICAqIEBzZWUgUElYSS5CTEVORF9NT0RFU1xuICAgICAqL1xuICAgIHRoaXMuYmxlbmRNb2RlID0gQ09OU1QuQkxFTkRfTU9ERVMuTk9STUFMO1xuXG4gICAgLyoqXG4gICAgICogVXNlZCBmb3IgY2FudmFzIHJlbmRlcmVyaW5nLiBJZiB0cnVlIHRoZW4gdGhlIGVsZW1lbnRzIHdpbGwgYmUgcG9zaXRpb25lZCBhdCB0aGUgbmVhcmVzdCBwaXhlbC4gVGhpcyBwcm92aWRlcyBhIG5pY2Ugc3BlZWQgYm9vc3QuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqIEBkZWZhdWx0IHRydWU7XG4gICAgICovXG4gICAgdGhpcy5yb3VuZFBpeGVscyA9IHRydWU7XG5cbiAgICB0aGlzLnNldFByb3BlcnRpZXMocHJvcGVydGllcyk7XG59XG5cblBhcnRpY2xlQ29udGFpbmVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoQ29udGFpbmVyLnByb3RvdHlwZSk7XG5QYXJ0aWNsZUNvbnRhaW5lci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBQYXJ0aWNsZUNvbnRhaW5lcjtcbm1vZHVsZS5leHBvcnRzID0gUGFydGljbGVDb250YWluZXI7XG5cbi8qKlxuICogU2V0cyB0aGUgcHJpdmF0ZSBwcm9wZXJ0aWVzIGFycmF5IHRvIGR5bmFtaWMgLyBzdGF0aWMgYmFzZWQgb24gdGhlIHBhc3NlZCBwcm9wZXJ0aWVzIG9iamVjdFxuICpcbiAqIEBwYXJhbSBwcm9wZXJ0aWVzIHtvYmplY3R9IFRoZSBwcm9wZXJ0aWVzIHRvIGJlIHVwbG9hZGVkXG4gKi9cblBhcnRpY2xlQ29udGFpbmVyLnByb3RvdHlwZS5zZXRQcm9wZXJ0aWVzID0gZnVuY3Rpb24ocHJvcGVydGllcylcbntcbiAgICBpZiAoIHByb3BlcnRpZXMgKSB7XG4gICAgICAgIHRoaXMuX3Byb3BlcnRpZXNbMF0gPSAnc2NhbGUnIGluIHByb3BlcnRpZXMgPyAhIXByb3BlcnRpZXMuc2NhbGUgOiB0aGlzLl9wcm9wZXJ0aWVzWzBdO1xuICAgICAgICB0aGlzLl9wcm9wZXJ0aWVzWzFdID0gJ3Bvc2l0aW9uJyBpbiBwcm9wZXJ0aWVzID8gISFwcm9wZXJ0aWVzLnBvc2l0aW9uIDogdGhpcy5fcHJvcGVydGllc1sxXTtcbiAgICAgICAgdGhpcy5fcHJvcGVydGllc1syXSA9ICdyb3RhdGlvbicgaW4gcHJvcGVydGllcyA/ICEhcHJvcGVydGllcy5yb3RhdGlvbiA6IHRoaXMuX3Byb3BlcnRpZXNbMl07XG4gICAgICAgIHRoaXMuX3Byb3BlcnRpZXNbM10gPSAndXZzJyBpbiBwcm9wZXJ0aWVzID8gISFwcm9wZXJ0aWVzLnV2cyA6IHRoaXMuX3Byb3BlcnRpZXNbM107XG4gICAgICAgIHRoaXMuX3Byb3BlcnRpZXNbNF0gPSAnYWxwaGEnIGluIHByb3BlcnRpZXMgPyAhIXByb3BlcnRpZXMuYWxwaGEgOiB0aGlzLl9wcm9wZXJ0aWVzWzRdO1xuICAgIH1cbn07XG5cbi8qKlxuICogVXBkYXRlcyB0aGUgb2JqZWN0IHRyYW5zZm9ybSBmb3IgcmVuZGVyaW5nXG4gKlxuICogQHByaXZhdGVcbiAqL1xuUGFydGljbGVDb250YWluZXIucHJvdG90eXBlLnVwZGF0ZVRyYW5zZm9ybSA9IGZ1bmN0aW9uICgpXG57XG5cbiAgICAvLyBUT0RPIGRvbid0IG5lZWQgdG8hXG4gICAgdGhpcy5kaXNwbGF5T2JqZWN0VXBkYXRlVHJhbnNmb3JtKCk7XG4gICAgLy8gIFBJWEkuQ29udGFpbmVyLnByb3RvdHlwZS51cGRhdGVUcmFuc2Zvcm0uY2FsbCggdGhpcyApO1xufTtcblxuLyoqXG4gKiBSZW5kZXJzIHRoZSBjb250YWluZXIgdXNpbmcgdGhlIFdlYkdMIHJlbmRlcmVyXG4gKlxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLldlYkdMUmVuZGVyZXJ9IFRoZSB3ZWJnbCByZW5kZXJlclxuICogQHByaXZhdGVcbiAqL1xuUGFydGljbGVDb250YWluZXIucHJvdG90eXBlLnJlbmRlcldlYkdMID0gZnVuY3Rpb24gKHJlbmRlcmVyKVxue1xuICAgIGlmICghdGhpcy52aXNpYmxlIHx8IHRoaXMud29ybGRBbHBoYSA8PSAwIHx8ICF0aGlzLmNoaWxkcmVuLmxlbmd0aCB8fCAhdGhpcy5yZW5kZXJhYmxlKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHJlbmRlcmVyLnNldE9iamVjdFJlbmRlcmVyKCByZW5kZXJlci5wbHVnaW5zLnBhcnRpY2xlICk7XG4gICAgcmVuZGVyZXIucGx1Z2lucy5wYXJ0aWNsZS5yZW5kZXIoIHRoaXMgKTtcbn07XG5cbi8qKlxuICogU2V0IHRoZSBmbGFnIHRoYXQgc3RhdGljIGRhdGEgc2hvdWxkIGJlIHVwZGF0ZWQgdG8gdHJ1ZVxuICpcbiAqIEBwcml2YXRlXG4gKi9cblBhcnRpY2xlQ29udGFpbmVyLnByb3RvdHlwZS5vbkNoaWxkcmVuQ2hhbmdlID0gZnVuY3Rpb24gKHNtYWxsZXN0Q2hpbGRJbmRleClcbntcbiAgICB2YXIgYnVmZmVySW5kZXggPSBNYXRoLmZsb29yKHNtYWxsZXN0Q2hpbGRJbmRleCAvIHRoaXMuX2JhdGNoU2l6ZSk7XG4gICAgaWYgKGJ1ZmZlckluZGV4IDwgdGhpcy5fYnVmZmVyVG9VcGRhdGUpIHtcbiAgICAgICAgdGhpcy5fYnVmZmVyVG9VcGRhdGUgPSBidWZmZXJJbmRleDtcbiAgICB9XG59O1xuXG4vKipcbiAqIFJlbmRlcnMgdGhlIG9iamVjdCB1c2luZyB0aGUgQ2FudmFzIHJlbmRlcmVyXG4gKlxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLkNhbnZhc1JlbmRlcmVyfSBUaGUgY2FudmFzIHJlbmRlcmVyXG4gKiBAcHJpdmF0ZVxuICovXG5QYXJ0aWNsZUNvbnRhaW5lci5wcm90b3R5cGUucmVuZGVyQ2FudmFzID0gZnVuY3Rpb24gKHJlbmRlcmVyKVxue1xuICAgIGlmICghdGhpcy52aXNpYmxlIHx8IHRoaXMud29ybGRBbHBoYSA8PSAwIHx8ICF0aGlzLmNoaWxkcmVuLmxlbmd0aCB8fCAhdGhpcy5yZW5kZXJhYmxlKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHZhciBjb250ZXh0ID0gcmVuZGVyZXIuY29udGV4dDtcbiAgICB2YXIgdHJhbnNmb3JtID0gdGhpcy53b3JsZFRyYW5zZm9ybTtcbiAgICB2YXIgaXNSb3RhdGVkID0gdHJ1ZTtcblxuICAgIHZhciBwb3NpdGlvblggPSAwO1xuICAgIHZhciBwb3NpdGlvblkgPSAwO1xuXG4gICAgdmFyIGZpbmFsV2lkdGggPSAwO1xuICAgIHZhciBmaW5hbEhlaWdodCA9IDA7XG5cbiAgICB2YXIgY29tcG9zaXRlT3BlcmF0aW9uID0gcmVuZGVyZXIuYmxlbmRNb2Rlc1t0aGlzLmJsZW5kTW9kZV07XG4gICAgaWYgKGNvbXBvc2l0ZU9wZXJhdGlvbiAhPT0gY29udGV4dC5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb24pXG4gICAge1xuICAgICAgICBjb250ZXh0Lmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbiA9IGNvbXBvc2l0ZU9wZXJhdGlvbjtcbiAgICB9XG5cbiAgICBjb250ZXh0Lmdsb2JhbEFscGhhID0gdGhpcy53b3JsZEFscGhhO1xuXG4gICAgdGhpcy5kaXNwbGF5T2JqZWN0VXBkYXRlVHJhbnNmb3JtKCk7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuY2hpbGRyZW4ubGVuZ3RoOyArK2kpXG4gICAge1xuICAgICAgICB2YXIgY2hpbGQgPSB0aGlzLmNoaWxkcmVuW2ldO1xuXG4gICAgICAgIGlmICghY2hpbGQudmlzaWJsZSlcbiAgICAgICAge1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgZnJhbWUgPSBjaGlsZC50ZXh0dXJlLmZyYW1lO1xuXG4gICAgICAgIGNvbnRleHQuZ2xvYmFsQWxwaGEgPSB0aGlzLndvcmxkQWxwaGEgKiBjaGlsZC5hbHBoYTtcblxuICAgICAgICBpZiAoY2hpbGQucm90YXRpb24gJSAoTWF0aC5QSSAqIDIpID09PSAwKVxuICAgICAgICB7XG4gICAgICAgICAgICAvLyB0aGlzIGlzIHRoZSBmYXN0ZXN0ICB3YXkgdG8gb3B0aW1pc2UhIC0gaWYgcm90YXRpb24gaXMgMCB0aGVuIHdlIGNhbiBhdm9pZCBhbnkga2luZCBvZiBzZXRUcmFuc2Zvcm0gY2FsbFxuICAgICAgICAgICAgaWYgKGlzUm90YXRlZClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb250ZXh0LnNldFRyYW5zZm9ybShcbiAgICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtLmEsXG4gICAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybS5iLFxuICAgICAgICAgICAgICAgICAgICB0cmFuc2Zvcm0uYyxcbiAgICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtLmQsXG4gICAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybS50eCxcbiAgICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtLnR5XG4gICAgICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgICAgIGlzUm90YXRlZCA9IGZhbHNlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBwb3NpdGlvblggPSAoKGNoaWxkLmFuY2hvci54KSAqICgtZnJhbWUud2lkdGggKiBjaGlsZC5zY2FsZS54KSArIGNoaWxkLnBvc2l0aW9uLnggICsgMC41KTtcbiAgICAgICAgICAgIHBvc2l0aW9uWSA9ICgoY2hpbGQuYW5jaG9yLnkpICogKC1mcmFtZS5oZWlnaHQgKiBjaGlsZC5zY2FsZS55KSArIGNoaWxkLnBvc2l0aW9uLnkgICsgMC41KTtcblxuICAgICAgICAgICAgZmluYWxXaWR0aCA9IGZyYW1lLndpZHRoICogY2hpbGQuc2NhbGUueDtcbiAgICAgICAgICAgIGZpbmFsSGVpZ2h0ID0gZnJhbWUuaGVpZ2h0ICogY2hpbGQuc2NhbGUueTtcblxuICAgICAgICB9XG4gICAgICAgIGVsc2VcbiAgICAgICAge1xuICAgICAgICAgICAgaWYgKCFpc1JvdGF0ZWQpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgaXNSb3RhdGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY2hpbGQuZGlzcGxheU9iamVjdFVwZGF0ZVRyYW5zZm9ybSgpO1xuXG4gICAgICAgICAgICB2YXIgY2hpbGRUcmFuc2Zvcm0gPSBjaGlsZC53b3JsZFRyYW5zZm9ybTtcblxuICAgICAgICAgICAgaWYgKHJlbmRlcmVyLnJvdW5kUGl4ZWxzKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGNvbnRleHQuc2V0VHJhbnNmb3JtKFxuICAgICAgICAgICAgICAgICAgICBjaGlsZFRyYW5zZm9ybS5hLFxuICAgICAgICAgICAgICAgICAgICBjaGlsZFRyYW5zZm9ybS5iLFxuICAgICAgICAgICAgICAgICAgICBjaGlsZFRyYW5zZm9ybS5jLFxuICAgICAgICAgICAgICAgICAgICBjaGlsZFRyYW5zZm9ybS5kLFxuICAgICAgICAgICAgICAgICAgICBjaGlsZFRyYW5zZm9ybS50eCB8IDAsXG4gICAgICAgICAgICAgICAgICAgIGNoaWxkVHJhbnNmb3JtLnR5IHwgMFxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29udGV4dC5zZXRUcmFuc2Zvcm0oXG4gICAgICAgICAgICAgICAgICAgIGNoaWxkVHJhbnNmb3JtLmEsXG4gICAgICAgICAgICAgICAgICAgIGNoaWxkVHJhbnNmb3JtLmIsXG4gICAgICAgICAgICAgICAgICAgIGNoaWxkVHJhbnNmb3JtLmMsXG4gICAgICAgICAgICAgICAgICAgIGNoaWxkVHJhbnNmb3JtLmQsXG4gICAgICAgICAgICAgICAgICAgIGNoaWxkVHJhbnNmb3JtLnR4LFxuICAgICAgICAgICAgICAgICAgICBjaGlsZFRyYW5zZm9ybS50eVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHBvc2l0aW9uWCA9ICgoY2hpbGQuYW5jaG9yLngpICogKC1mcmFtZS53aWR0aCkgKyAwLjUpO1xuICAgICAgICAgICAgcG9zaXRpb25ZID0gKChjaGlsZC5hbmNob3IueSkgKiAoLWZyYW1lLmhlaWdodCkgKyAwLjUpO1xuXG4gICAgICAgICAgICBmaW5hbFdpZHRoID0gZnJhbWUud2lkdGg7XG4gICAgICAgICAgICBmaW5hbEhlaWdodCA9IGZyYW1lLmhlaWdodDtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnRleHQuZHJhd0ltYWdlKFxuICAgICAgICAgICAgY2hpbGQudGV4dHVyZS5iYXNlVGV4dHVyZS5zb3VyY2UsXG4gICAgICAgICAgICBmcmFtZS54LFxuICAgICAgICAgICAgZnJhbWUueSxcbiAgICAgICAgICAgIGZyYW1lLndpZHRoLFxuICAgICAgICAgICAgZnJhbWUuaGVpZ2h0LFxuICAgICAgICAgICAgcG9zaXRpb25YLFxuICAgICAgICAgICAgcG9zaXRpb25ZLFxuICAgICAgICAgICAgZmluYWxXaWR0aCxcbiAgICAgICAgICAgIGZpbmFsSGVpZ2h0XG4gICAgICAgICk7XG4gICAgfVxufTtcblxuLyoqXG4gKiBEZXN0cm95cyB0aGUgY29udGFpbmVyXG4gKlxuICogQHBhcmFtIFtkZXN0cm95Q2hpbGRyZW49ZmFsc2VdIHtib29sZWFufSBpZiBzZXQgdG8gdHJ1ZSwgYWxsIHRoZSBjaGlsZHJlbiB3aWxsIGhhdmUgdGhlaXIgZGVzdHJveSBtZXRob2QgY2FsbGVkIGFzIHdlbGxcbiAqL1xuUGFydGljbGVDb250YWluZXIucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoKSB7XG4gICAgQ29udGFpbmVyLnByb3RvdHlwZS5kZXN0cm95LmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG5cbiAgICBpZiAodGhpcy5fYnVmZmVycykge1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuX2J1ZmZlcnMubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgICAgIHRoaXMuX2J1ZmZlcnNbaV0uZGVzdHJveSgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5fcHJvcGVydGllcyA9IG51bGw7XG4gICAgdGhpcy5fYnVmZmVycyA9IG51bGw7XG59O1xuIiwiXG4vKipcbiAqIEBhdXRob3IgTWF0IEdyb3Zlc1xuICpcbiAqIEJpZyB0aGFua3MgdG8gdGhlIHZlcnkgY2xldmVyIE1hdHQgRGVzTGF1cmllcnMgPG1hdHRkZXNsPiBodHRwczovL2dpdGh1Yi5jb20vbWF0dGRlc2wvXG4gKiBmb3IgY3JlYXRpbmcgdGhlIG9yaWdpbmFsIHBpeGkgdmVyc2lvbiFcbiAqIEFsc28gYSB0aGFua3MgdG8gaHR0cHM6Ly9naXRodWIuY29tL2JjaGV2YWxpZXIgZm9yIHR3ZWFraW5nIHRoZSB0aW50IGFuZCBhbHBoYSBzbyB0aGF0IHRoZXkgbm93IHNoYXJlIDQgYnl0ZXMgb24gdGhlIHZlcnRleCBidWZmZXJcbiAqXG4gKiBIZWF2aWx5IGluc3BpcmVkIGJ5IExpYkdEWCdzIFBhcnRpY2xlQnVmZmVyOlxuICogaHR0cHM6Ly9naXRodWIuY29tL2xpYmdkeC9saWJnZHgvYmxvYi9tYXN0ZXIvZ2R4L3NyYy9jb20vYmFkbG9naWMvZ2R4L2dyYXBoaWNzL2cyZC9QYXJ0aWNsZUJ1ZmZlci5qYXZhXG4gKi9cblxuLyoqXG4gKiBUaGUgcGFydGljbGUgYnVmZmVyIG1hbmFnZXMgdGhlIHN0YXRpYyBhbmQgZHluYW1pYyBidWZmZXJzIGZvciBhIHBhcnRpY2xlIGNvbnRhaW5lci5cbiAqXG4gKiBAY2xhc3NcbiAqIEBwcml2YXRlXG4gKiBAbWVtYmVyb2YgUElYSVxuICovXG5mdW5jdGlvbiBQYXJ0aWNsZUJ1ZmZlcihnbCwgcHJvcGVydGllcywgZHluYW1pY1Byb3BlcnR5RmxhZ3MsIHNpemUpXG57XG4gICAgLyoqXG4gICAgICogVGhlIGN1cnJlbnQgV2ViR0wgZHJhd2luZyBjb250ZXh0LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7V2ViR0xSZW5kZXJpbmdDb250ZXh0fVxuICAgICAqL1xuICAgIHRoaXMuZ2wgPSBnbDtcblxuICAgIC8qKlxuICAgICAqIFNpemUgb2YgYSBzaW5nbGUgdmVydGV4LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMudmVydFNpemUgPSAyO1xuXG4gICAgLyoqXG4gICAgICogU2l6ZSBvZiBhIHNpbmdsZSB2ZXJ0ZXggaW4gYnl0ZXMuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy52ZXJ0Qnl0ZVNpemUgPSB0aGlzLnZlcnRTaXplICogNDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBudW1iZXIgb2YgcGFydGljbGVzIHRoZSBidWZmZXIgY2FuIGhvbGRcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLnNpemUgPSBzaXplO1xuXG4gICAgLyoqXG4gICAgICogQSBsaXN0IG9mIHRoZSBwcm9wZXJ0aWVzIHRoYXQgYXJlIGR5bmFtaWMuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtvYmplY3RbXX1cbiAgICAgKi9cbiAgICB0aGlzLmR5bmFtaWNQcm9wZXJ0aWVzID0gW107XG5cbiAgICAvKipcbiAgICAgKiBBIGxpc3Qgb2YgdGhlIHByb3BlcnRpZXMgdGhhdCBhcmUgc3RhdGljLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7b2JqZWN0W119XG4gICAgICovXG4gICAgdGhpcy5zdGF0aWNQcm9wZXJ0aWVzID0gW107XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BlcnRpZXMubGVuZ3RoOyBpKyspXG4gICAge1xuICAgICAgICB2YXIgcHJvcGVydHkgPSBwcm9wZXJ0aWVzW2ldO1xuXG4gICAgICAgIGlmKGR5bmFtaWNQcm9wZXJ0eUZsYWdzW2ldKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmR5bmFtaWNQcm9wZXJ0aWVzLnB1c2gocHJvcGVydHkpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2VcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5zdGF0aWNQcm9wZXJ0aWVzLnB1c2gocHJvcGVydHkpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5zdGF0aWNTdHJpZGUgPSAwO1xuICAgIHRoaXMuc3RhdGljQnVmZmVyID0gbnVsbDtcbiAgICB0aGlzLnN0YXRpY0RhdGEgPSBudWxsO1xuXG4gICAgdGhpcy5keW5hbWljU3RyaWRlID0gMDtcbiAgICB0aGlzLmR5bmFtaWNCdWZmZXIgPSBudWxsO1xuICAgIHRoaXMuZHluYW1pY0RhdGEgPSBudWxsO1xuXG4gICAgdGhpcy5pbml0QnVmZmVycygpO1xuXG59XG5cblBhcnRpY2xlQnVmZmVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFBhcnRpY2xlQnVmZmVyO1xubW9kdWxlLmV4cG9ydHMgPSBQYXJ0aWNsZUJ1ZmZlcjtcblxuLyoqXG4gKiBTZXRzIHVwIHRoZSByZW5kZXJlciBjb250ZXh0IGFuZCBuZWNlc3NhcnkgYnVmZmVycy5cbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5QYXJ0aWNsZUJ1ZmZlci5wcm90b3R5cGUuaW5pdEJ1ZmZlcnMgPSBmdW5jdGlvbiAoKVxue1xuICAgIHZhciBnbCA9IHRoaXMuZ2w7XG4gICAgdmFyIGk7XG4gICAgdmFyIHByb3BlcnR5O1xuXG4gICAgdmFyIGR5bmFtaWNPZmZzZXQgPSAwO1xuICAgIHRoaXMuZHluYW1pY1N0cmlkZSA9IDA7XG5cbiAgICBmb3IgKGkgPSAwOyBpIDwgdGhpcy5keW5hbWljUHJvcGVydGllcy5sZW5ndGg7IGkrKylcbiAgICB7XG4gICAgICAgIHByb3BlcnR5ID0gdGhpcy5keW5hbWljUHJvcGVydGllc1tpXTtcblxuICAgICAgICBwcm9wZXJ0eS5vZmZzZXQgPSBkeW5hbWljT2Zmc2V0O1xuICAgICAgICBkeW5hbWljT2Zmc2V0ICs9IHByb3BlcnR5LnNpemU7XG4gICAgICAgIHRoaXMuZHluYW1pY1N0cmlkZSArPSBwcm9wZXJ0eS5zaXplO1xuICAgIH1cblxuICAgIHRoaXMuZHluYW1pY0RhdGEgPSBuZXcgRmxvYXQzMkFycmF5KCB0aGlzLnNpemUgKiB0aGlzLmR5bmFtaWNTdHJpZGUgKiA0KTtcbiAgICB0aGlzLmR5bmFtaWNCdWZmZXIgPSBnbC5jcmVhdGVCdWZmZXIoKTtcblxuICAgIGdsLmJpbmRCdWZmZXIoZ2wuQVJSQVlfQlVGRkVSLCB0aGlzLmR5bmFtaWNCdWZmZXIpO1xuICAgIGdsLmJ1ZmZlckRhdGEoZ2wuQVJSQVlfQlVGRkVSLCB0aGlzLmR5bmFtaWNEYXRhLCBnbC5EWU5BTUlDX0RSQVcpO1xuXG5cbiAgICAvLyBzdGF0aWMgLy9cbiAgICB2YXIgc3RhdGljT2Zmc2V0ID0gMDtcbiAgICB0aGlzLnN0YXRpY1N0cmlkZSA9IDA7XG5cbiAgICBmb3IgKGkgPSAwOyBpIDwgdGhpcy5zdGF0aWNQcm9wZXJ0aWVzLmxlbmd0aDsgaSsrKVxuICAgIHtcbiAgICAgICAgcHJvcGVydHkgPSB0aGlzLnN0YXRpY1Byb3BlcnRpZXNbaV07XG5cbiAgICAgICAgcHJvcGVydHkub2Zmc2V0ID0gc3RhdGljT2Zmc2V0O1xuICAgICAgICBzdGF0aWNPZmZzZXQgKz0gcHJvcGVydHkuc2l6ZTtcbiAgICAgICAgdGhpcy5zdGF0aWNTdHJpZGUgKz0gcHJvcGVydHkuc2l6ZTtcbiAgICB9XG5cbiAgICB0aGlzLnN0YXRpY0RhdGEgPSBuZXcgRmxvYXQzMkFycmF5KCB0aGlzLnNpemUgKiB0aGlzLnN0YXRpY1N0cmlkZSAqIDQpO1xuICAgIHRoaXMuc3RhdGljQnVmZmVyID0gZ2wuY3JlYXRlQnVmZmVyKCk7XG5cbiAgICBnbC5iaW5kQnVmZmVyKGdsLkFSUkFZX0JVRkZFUiwgdGhpcy5zdGF0aWNCdWZmZXIpO1xuICAgIGdsLmJ1ZmZlckRhdGEoZ2wuQVJSQVlfQlVGRkVSLCB0aGlzLnN0YXRpY0RhdGEsIGdsLkRZTkFNSUNfRFJBVyk7XG59O1xuXG4vKipcbiAqIFVwbG9hZHMgdGhlIGR5bmFtaWMgcHJvcGVydGllcy5cbiAqXG4gKi9cblBhcnRpY2xlQnVmZmVyLnByb3RvdHlwZS51cGxvYWREeW5hbWljID0gZnVuY3Rpb24oY2hpbGRyZW4sIHN0YXJ0SW5kZXgsIGFtb3VudClcbntcbiAgICB2YXIgZ2wgPSB0aGlzLmdsO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmR5bmFtaWNQcm9wZXJ0aWVzLmxlbmd0aDsgaSsrKVxuICAgIHtcbiAgICAgICAgdmFyIHByb3BlcnR5ID0gdGhpcy5keW5hbWljUHJvcGVydGllc1tpXTtcbiAgICAgICAgcHJvcGVydHkudXBsb2FkRnVuY3Rpb24oY2hpbGRyZW4sIHN0YXJ0SW5kZXgsIGFtb3VudCwgdGhpcy5keW5hbWljRGF0YSwgdGhpcy5keW5hbWljU3RyaWRlLCBwcm9wZXJ0eS5vZmZzZXQpO1xuICAgIH1cblxuICAgIGdsLmJpbmRCdWZmZXIoZ2wuQVJSQVlfQlVGRkVSLCB0aGlzLmR5bmFtaWNCdWZmZXIpO1xuICAgIGdsLmJ1ZmZlclN1YkRhdGEoZ2wuQVJSQVlfQlVGRkVSLCAwLCB0aGlzLmR5bmFtaWNEYXRhKTtcbn07XG5cbi8qKlxuICogVXBsb2FkcyB0aGUgc3RhdGljIHByb3BlcnRpZXMuXG4gKlxuICovXG5QYXJ0aWNsZUJ1ZmZlci5wcm90b3R5cGUudXBsb2FkU3RhdGljID0gZnVuY3Rpb24oY2hpbGRyZW4sIHN0YXJ0SW5kZXgsIGFtb3VudClcbntcbiAgICB2YXIgZ2wgPSB0aGlzLmdsO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLnN0YXRpY1Byb3BlcnRpZXMubGVuZ3RoOyBpKyspXG4gICAge1xuICAgICAgICB2YXIgcHJvcGVydHkgPSB0aGlzLnN0YXRpY1Byb3BlcnRpZXNbaV07XG4gICAgICAgIHByb3BlcnR5LnVwbG9hZEZ1bmN0aW9uKGNoaWxkcmVuLCBzdGFydEluZGV4LCBhbW91bnQsIHRoaXMuc3RhdGljRGF0YSwgdGhpcy5zdGF0aWNTdHJpZGUsIHByb3BlcnR5Lm9mZnNldCk7XG4gICAgfVxuXG4gICAgZ2wuYmluZEJ1ZmZlcihnbC5BUlJBWV9CVUZGRVIsIHRoaXMuc3RhdGljQnVmZmVyKTtcbiAgICBnbC5idWZmZXJTdWJEYXRhKGdsLkFSUkFZX0JVRkZFUiwgMCwgdGhpcy5zdGF0aWNEYXRhKTtcbn07XG5cbi8qKlxuICogQmluZHMgdGhlIGJ1ZmZlcnMgdG8gdGhlIEdQVVxuICpcbiAqL1xuUGFydGljbGVCdWZmZXIucHJvdG90eXBlLmJpbmQgPSBmdW5jdGlvbiAoKVxue1xuICAgIHZhciBnbCA9IHRoaXMuZ2w7XG4gICAgdmFyIGksIHByb3BlcnR5O1xuXG4gICAgZ2wuYmluZEJ1ZmZlcihnbC5BUlJBWV9CVUZGRVIsIHRoaXMuZHluYW1pY0J1ZmZlcik7XG5cbiAgICBmb3IgKGkgPSAwOyBpIDwgdGhpcy5keW5hbWljUHJvcGVydGllcy5sZW5ndGg7IGkrKylcbiAgICB7XG4gICAgICAgIHByb3BlcnR5ID0gdGhpcy5keW5hbWljUHJvcGVydGllc1tpXTtcbiAgICAgICAgZ2wudmVydGV4QXR0cmliUG9pbnRlcihwcm9wZXJ0eS5hdHRyaWJ1dGUsIHByb3BlcnR5LnNpemUsIGdsLkZMT0FULCBmYWxzZSwgdGhpcy5keW5hbWljU3RyaWRlICogNCwgcHJvcGVydHkub2Zmc2V0ICogNCk7XG4gICAgfVxuXG4gICAgZ2wuYmluZEJ1ZmZlcihnbC5BUlJBWV9CVUZGRVIsIHRoaXMuc3RhdGljQnVmZmVyKTtcblxuICAgIGZvciAoaSA9IDA7IGkgPCB0aGlzLnN0YXRpY1Byb3BlcnRpZXMubGVuZ3RoOyBpKyspXG4gICAge1xuICAgICAgICBwcm9wZXJ0eSA9IHRoaXMuc3RhdGljUHJvcGVydGllc1tpXTtcbiAgICAgICAgZ2wudmVydGV4QXR0cmliUG9pbnRlcihwcm9wZXJ0eS5hdHRyaWJ1dGUsIHByb3BlcnR5LnNpemUsIGdsLkZMT0FULCBmYWxzZSwgdGhpcy5zdGF0aWNTdHJpZGUgKiA0LCBwcm9wZXJ0eS5vZmZzZXQgKiA0KTtcbiAgICB9XG59O1xuXG4vKipcbiAqIERlc3Ryb3lzIHRoZSBQYXJ0aWNsZUJ1ZmZlci5cbiAqXG4gKi9cblBhcnRpY2xlQnVmZmVyLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLmR5bmFtaWNQcm9wZXJ0aWVzID0gbnVsbDtcbiAgICB0aGlzLmR5bmFtaWNEYXRhID0gbnVsbDtcbiAgICB0aGlzLmdsLmRlbGV0ZUJ1ZmZlcih0aGlzLmR5bmFtaWNCdWZmZXIpO1xuXG4gICAgdGhpcy5zdGF0aWNQcm9wZXJ0aWVzID0gbnVsbDtcbiAgICB0aGlzLnN0YXRpY0RhdGEgPSBudWxsO1xuICAgIHRoaXMuZ2wuZGVsZXRlQnVmZmVyKHRoaXMuc3RhdGljQnVmZmVyKTtcbn07XG4iLCJ2YXIgT2JqZWN0UmVuZGVyZXIgPSByZXF1aXJlKCcuLi8uLi9yZW5kZXJlcnMvd2ViZ2wvdXRpbHMvT2JqZWN0UmVuZGVyZXInKSxcbiAgICBXZWJHTFJlbmRlcmVyID0gcmVxdWlyZSgnLi4vLi4vcmVuZGVyZXJzL3dlYmdsL1dlYkdMUmVuZGVyZXInKSxcbiAgICBQYXJ0aWNsZVNoYWRlciA9IHJlcXVpcmUoJy4vUGFydGljbGVTaGFkZXInKSxcbiAgICBQYXJ0aWNsZUJ1ZmZlciA9IHJlcXVpcmUoJy4vUGFydGljbGVCdWZmZXInKSxcbiAgICBtYXRoICAgICAgICAgICAgPSByZXF1aXJlKCcuLi8uLi9tYXRoJyk7XG5cbi8qKlxuICogQGF1dGhvciBNYXQgR3JvdmVzXG4gKlxuICogQmlnIHRoYW5rcyB0byB0aGUgdmVyeSBjbGV2ZXIgTWF0dCBEZXNMYXVyaWVycyA8bWF0dGRlc2w+IGh0dHBzOi8vZ2l0aHViLmNvbS9tYXR0ZGVzbC9cbiAqIGZvciBjcmVhdGluZyB0aGUgb3JpZ2luYWwgcGl4aSB2ZXJzaW9uIVxuICogQWxzbyBhIHRoYW5rcyB0byBodHRwczovL2dpdGh1Yi5jb20vYmNoZXZhbGllciBmb3IgdHdlYWtpbmcgdGhlIHRpbnQgYW5kIGFscGhhIHNvIHRoYXQgdGhleSBub3cgc2hhcmUgNCBieXRlcyBvbiB0aGUgdmVydGV4IGJ1ZmZlclxuICpcbiAqIEhlYXZpbHkgaW5zcGlyZWQgYnkgTGliR0RYJ3MgUGFydGljbGVSZW5kZXJlcjpcbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS9saWJnZHgvbGliZ2R4L2Jsb2IvbWFzdGVyL2dkeC9zcmMvY29tL2JhZGxvZ2ljL2dkeC9ncmFwaGljcy9nMmQvUGFydGljbGVSZW5kZXJlci5qYXZhXG4gKi9cblxuLyoqXG4gKlxuICogQGNsYXNzXG4gKiBAcHJpdmF0ZVxuICogQG1lbWJlcm9mIFBJWElcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5XZWJHTFJlbmRlcmVyfSBUaGUgcmVuZGVyZXIgdGhpcyBzcHJpdGUgYmF0Y2ggd29ya3MgZm9yLlxuICovXG5mdW5jdGlvbiBQYXJ0aWNsZVJlbmRlcmVyKHJlbmRlcmVyKVxue1xuICAgIE9iamVjdFJlbmRlcmVyLmNhbGwodGhpcywgcmVuZGVyZXIpO1xuXG4gICAgLy8gNjU1MzUgaXMgbWF4IHZlcnRleCBpbmRleCBpbiB0aGUgaW5kZXggYnVmZmVyIChzZWUgUGFydGljbGVSZW5kZXJlcilcbiAgICAvLyBzbyBtYXggbnVtYmVyIG9mIHBhcnRpY2xlcyBpcyA2NTUzNiAvIDQgPSAxNjM4NFxuICAgIC8vIGFuZCBtYXggbnVtYmVyIG9mIGVsZW1lbnQgaW4gdGhlIGluZGV4IGJ1ZmZlciBpcyAxNjM4NCAqIDYgPSA5ODMwNFxuICAgIC8vIENyZWF0aW5nIGEgZnVsbCBpbmRleCBidWZmZXIsIG92ZXJoZWFkIGlzIDk4MzA0ICogMiA9IDE5NktvXG4gICAgdmFyIG51bUluZGljZXMgPSA5ODMwNDtcblxuICAgIC8qKlxuICAgICAqIEhvbGRzIHRoZSBpbmRpY2VzXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtVaW50MTZBcnJheX1cbiAgICAgKi9cbiAgICB0aGlzLmluZGljZXMgPSBuZXcgVWludDE2QXJyYXkobnVtSW5kaWNlcyk7XG5cbiAgICBmb3IgKHZhciBpPTAsIGo9MDsgaSA8IG51bUluZGljZXM7IGkgKz0gNiwgaiArPSA0KVxuICAgIHtcbiAgICAgICAgdGhpcy5pbmRpY2VzW2kgKyAwXSA9IGogKyAwO1xuICAgICAgICB0aGlzLmluZGljZXNbaSArIDFdID0gaiArIDE7XG4gICAgICAgIHRoaXMuaW5kaWNlc1tpICsgMl0gPSBqICsgMjtcbiAgICAgICAgdGhpcy5pbmRpY2VzW2kgKyAzXSA9IGogKyAwO1xuICAgICAgICB0aGlzLmluZGljZXNbaSArIDRdID0gaiArIDI7XG4gICAgICAgIHRoaXMuaW5kaWNlc1tpICsgNV0gPSBqICsgMztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGUgZGVmYXVsdCBzaGFkZXIgdGhhdCBpcyB1c2VkIGlmIGEgc3ByaXRlIGRvZXNuJ3QgaGF2ZSBhIG1vcmUgc3BlY2lmaWMgb25lLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5TaGFkZXJ9XG4gICAgICovXG4gICAgdGhpcy5zaGFkZXIgPSBudWxsO1xuXG4gICAgdGhpcy5pbmRleEJ1ZmZlciA9IG51bGw7XG5cbiAgICB0aGlzLnByb3BlcnRpZXMgPSBudWxsO1xuXG4gICAgdGhpcy50ZW1wTWF0cml4ID0gbmV3IG1hdGguTWF0cml4KCk7XG59XG5cblBhcnRpY2xlUmVuZGVyZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShPYmplY3RSZW5kZXJlci5wcm90b3R5cGUpO1xuUGFydGljbGVSZW5kZXJlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBQYXJ0aWNsZVJlbmRlcmVyO1xubW9kdWxlLmV4cG9ydHMgPSBQYXJ0aWNsZVJlbmRlcmVyO1xuXG5XZWJHTFJlbmRlcmVyLnJlZ2lzdGVyUGx1Z2luKCdwYXJ0aWNsZScsIFBhcnRpY2xlUmVuZGVyZXIpO1xuXG4vKipcbiAqIFdoZW4gdGhlcmUgaXMgYSBXZWJHTCBjb250ZXh0IGNoYW5nZVxuICpcbiAqIEBwcml2YXRlXG4gKi9cblBhcnRpY2xlUmVuZGVyZXIucHJvdG90eXBlLm9uQ29udGV4dENoYW5nZSA9IGZ1bmN0aW9uICgpXG57XG4gICAgdmFyIGdsID0gdGhpcy5yZW5kZXJlci5nbDtcblxuICAgIC8vIHNldHVwIGRlZmF1bHQgc2hhZGVyXG4gICAgdGhpcy5zaGFkZXIgPSBuZXcgUGFydGljbGVTaGFkZXIodGhpcy5yZW5kZXJlci5zaGFkZXJNYW5hZ2VyKTtcblxuICAgIHRoaXMuaW5kZXhCdWZmZXIgPSBnbC5jcmVhdGVCdWZmZXIoKTtcblxuICAgIC8vIDY1NTM1IGlzIG1heCBpbmRleCwgc28gNjU1MzUgLyA2ID0gMTA5MjIuXG5cbiAgICAvL3VwbG9hZCB0aGUgaW5kZXggZGF0YVxuICAgIGdsLmJpbmRCdWZmZXIoZ2wuRUxFTUVOVF9BUlJBWV9CVUZGRVIsIHRoaXMuaW5kZXhCdWZmZXIpO1xuICAgIGdsLmJ1ZmZlckRhdGEoZ2wuRUxFTUVOVF9BUlJBWV9CVUZGRVIsIHRoaXMuaW5kaWNlcywgZ2wuU1RBVElDX0RSQVcpO1xuXG4gICAgdGhpcy5wcm9wZXJ0aWVzID0gW1xuICAgICAgICAvLyB2ZXJ0aWNlc0RhdGFcbiAgICAgICAge1xuICAgICAgICAgICAgYXR0cmlidXRlOnRoaXMuc2hhZGVyLmF0dHJpYnV0ZXMuYVZlcnRleFBvc2l0aW9uLFxuICAgICAgICAgICAgc2l6ZToyLFxuICAgICAgICAgICAgdXBsb2FkRnVuY3Rpb246dGhpcy51cGxvYWRWZXJ0aWNlcyxcbiAgICAgICAgICAgIG9mZnNldDowXG4gICAgICAgIH0sXG4gICAgICAgIC8vIHBvc2l0aW9uRGF0YVxuICAgICAgICB7XG4gICAgICAgICAgICBhdHRyaWJ1dGU6dGhpcy5zaGFkZXIuYXR0cmlidXRlcy5hUG9zaXRpb25Db29yZCxcbiAgICAgICAgICAgIHNpemU6MixcbiAgICAgICAgICAgIHVwbG9hZEZ1bmN0aW9uOnRoaXMudXBsb2FkUG9zaXRpb24sXG4gICAgICAgICAgICBvZmZzZXQ6MFxuICAgICAgICB9LFxuICAgICAgICAvLyByb3RhdGlvbkRhdGFcbiAgICAgICAge1xuICAgICAgICAgICAgYXR0cmlidXRlOnRoaXMuc2hhZGVyLmF0dHJpYnV0ZXMuYVJvdGF0aW9uLFxuICAgICAgICAgICAgc2l6ZToxLFxuICAgICAgICAgICAgdXBsb2FkRnVuY3Rpb246dGhpcy51cGxvYWRSb3RhdGlvbixcbiAgICAgICAgICAgIG9mZnNldDowXG4gICAgICAgIH0sXG4gICAgICAgIC8vIHV2c0RhdGFcbiAgICAgICAge1xuICAgICAgICAgICAgYXR0cmlidXRlOnRoaXMuc2hhZGVyLmF0dHJpYnV0ZXMuYVRleHR1cmVDb29yZCxcbiAgICAgICAgICAgIHNpemU6MixcbiAgICAgICAgICAgIHVwbG9hZEZ1bmN0aW9uOnRoaXMudXBsb2FkVXZzLFxuICAgICAgICAgICAgb2Zmc2V0OjBcbiAgICAgICAgfSxcbiAgICAgICAgLy8gYWxwaGFEYXRhXG4gICAgICAgIHtcbiAgICAgICAgICAgIGF0dHJpYnV0ZTp0aGlzLnNoYWRlci5hdHRyaWJ1dGVzLmFDb2xvcixcbiAgICAgICAgICAgIHNpemU6MSxcbiAgICAgICAgICAgIHVwbG9hZEZ1bmN0aW9uOnRoaXMudXBsb2FkQWxwaGEsXG4gICAgICAgICAgICBvZmZzZXQ6MFxuICAgICAgICB9XG4gICAgXTtcbn07XG5cbi8qKlxuICogU3RhcnRzIGEgbmV3IHBhcnRpY2xlIGJhdGNoLlxuICpcbiAqL1xuUGFydGljbGVSZW5kZXJlci5wcm90b3R5cGUuc3RhcnQgPSBmdW5jdGlvbiAoKVxue1xuICAgIHZhciBnbCA9IHRoaXMucmVuZGVyZXIuZ2w7XG5cbiAgICAvLyBiaW5kIHRoZSBtYWluIHRleHR1cmVcbiAgICBnbC5hY3RpdmVUZXh0dXJlKGdsLlRFWFRVUkUwKTtcblxuICAgIC8vIGJpbmQgdGhlIGJ1ZmZlcnNcblxuICAgIGdsLmJpbmRCdWZmZXIoZ2wuRUxFTUVOVF9BUlJBWV9CVUZGRVIsIHRoaXMuaW5kZXhCdWZmZXIpO1xuXG4gICAgdmFyIHNoYWRlciA9IHRoaXMuc2hhZGVyO1xuXG4gICAgdGhpcy5yZW5kZXJlci5zaGFkZXJNYW5hZ2VyLnNldFNoYWRlcihzaGFkZXIpO1xufTtcblxuXG4vKipcbiAqIFJlbmRlcnMgdGhlIHBhcnRpY2xlIGNvbnRhaW5lciBvYmplY3QuXG4gKlxuICogQHBhcmFtIGNvbnRhaW5lciB7UElYSS5QYXJ0aWNsZUNvbnRhaW5lcn0gVGhlIGNvbnRhaW5lciB0byByZW5kZXIgdXNpbmcgdGhpcyBQYXJ0aWNsZVJlbmRlcmVyXG4gKi9cblBhcnRpY2xlUmVuZGVyZXIucHJvdG90eXBlLnJlbmRlciA9IGZ1bmN0aW9uIChjb250YWluZXIpXG57XG4gICAgdmFyIGNoaWxkcmVuID0gY29udGFpbmVyLmNoaWxkcmVuLFxuICAgICAgICB0b3RhbENoaWxkcmVuID0gY2hpbGRyZW4ubGVuZ3RoLFxuICAgICAgICBtYXhTaXplID0gY29udGFpbmVyLl9tYXhTaXplLFxuICAgICAgICBiYXRjaFNpemUgPSBjb250YWluZXIuX2JhdGNoU2l6ZTtcblxuICAgIGlmKHRvdGFsQ2hpbGRyZW4gPT09IDApXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIGVsc2UgaWYodG90YWxDaGlsZHJlbiA+IG1heFNpemUpXG4gICAge1xuICAgICAgICB0b3RhbENoaWxkcmVuID0gbWF4U2l6ZTtcbiAgICB9XG5cbiAgICBpZighY29udGFpbmVyLl9idWZmZXJzKVxuICAgIHtcbiAgICAgICAgY29udGFpbmVyLl9idWZmZXJzID0gdGhpcy5nZW5lcmF0ZUJ1ZmZlcnMoIGNvbnRhaW5lciApO1xuICAgIH1cblxuICAgIC8vIGlmIHRoZSB1dnMgaGF2ZSBub3QgdXBkYXRlZCB0aGVuIG5vIHBvaW50IHJlbmRlcmluZyBqdXN0IHlldCFcbiAgICB0aGlzLnJlbmRlcmVyLmJsZW5kTW9kZU1hbmFnZXIuc2V0QmxlbmRNb2RlKGNvbnRhaW5lci5ibGVuZE1vZGUpO1xuXG4gICAgdmFyIGdsID0gdGhpcy5yZW5kZXJlci5nbDtcblxuICAgIHZhciBtID0gIGNvbnRhaW5lci53b3JsZFRyYW5zZm9ybS5jb3B5KCB0aGlzLnRlbXBNYXRyaXggKTtcbiAgICBtLnByZXBlbmQoIHRoaXMucmVuZGVyZXIuY3VycmVudFJlbmRlclRhcmdldC5wcm9qZWN0aW9uTWF0cml4ICk7XG4gICAgZ2wudW5pZm9ybU1hdHJpeDNmdih0aGlzLnNoYWRlci51bmlmb3Jtcy5wcm9qZWN0aW9uTWF0cml4Ll9sb2NhdGlvbiwgZmFsc2UsIG0udG9BcnJheSh0cnVlKSk7XG4gICAgZ2wudW5pZm9ybTFmKHRoaXMuc2hhZGVyLnVuaWZvcm1zLnVBbHBoYS5fbG9jYXRpb24sIGNvbnRhaW5lci53b3JsZEFscGhhKTtcblxuXG4gICAgLy8gbWFrZSBzdXJlIHRoZSB0ZXh0dXJlIGlzIGJvdW5kLi5cbiAgICB2YXIgYmFzZVRleHR1cmUgPSBjaGlsZHJlblswXS5fdGV4dHVyZS5iYXNlVGV4dHVyZTtcblxuICAgIGlmICghYmFzZVRleHR1cmUuX2dsVGV4dHVyZXNbZ2wuaWRdKVxuICAgIHtcbiAgICAgICAgLy8gaWYgdGhlIHRleHR1cmUgaGFzIG5vdCB1cGRhdGVkIHRoZW4gbGV0cyBub3QgdXBsb2FkIGFueSBzdGF0aWMgcHJvcGVydGllc1xuICAgICAgICBpZighdGhpcy5yZW5kZXJlci51cGRhdGVUZXh0dXJlKGJhc2VUZXh0dXJlKSlcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYoIWNvbnRhaW5lci5fcHJvcGVydGllc1swXSB8fCAhY29udGFpbmVyLl9wcm9wZXJ0aWVzWzNdKVxuICAgICAgICB7XG4gICAgICAgICAgICBjb250YWluZXIuX2J1ZmZlclRvVXBkYXRlID0gMDtcbiAgICAgICAgfVxuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICBnbC5iaW5kVGV4dHVyZShnbC5URVhUVVJFXzJELCBiYXNlVGV4dHVyZS5fZ2xUZXh0dXJlc1tnbC5pZF0pO1xuICAgIH1cblxuICAgIC8vIG5vdyBsZXRzIHVwbG9hZCBhbmQgcmVuZGVyIHRoZSBidWZmZXJzLi5cbiAgICBmb3IgKHZhciBpID0gMCwgaiA9IDA7IGkgPCB0b3RhbENoaWxkcmVuOyBpICs9IGJhdGNoU2l6ZSwgaiArPSAxKVxuICAgIHtcbiAgICAgICAgdmFyIGFtb3VudCA9ICggdG90YWxDaGlsZHJlbiAtIGkpO1xuICAgICAgICBpZihhbW91bnQgPiBiYXRjaFNpemUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGFtb3VudCA9IGJhdGNoU2l6ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBidWZmZXIgPSBjb250YWluZXIuX2J1ZmZlcnNbal07XG5cbiAgICAgICAgLy8gd2UgYWx3YXlzIHVwbG9hZCB0aGUgZHluYW1pY1xuICAgICAgICBidWZmZXIudXBsb2FkRHluYW1pYyhjaGlsZHJlbiwgaSwgYW1vdW50KTtcblxuICAgICAgICAvLyB3ZSBvbmx5IHVwbG9hZCB0aGUgc3RhdGljIGNvbnRlbnQgd2hlbiB3ZSBoYXZlIHRvIVxuICAgICAgICBpZihjb250YWluZXIuX2J1ZmZlclRvVXBkYXRlID09PSBqKVxuICAgICAgICB7XG4gICAgICAgICAgICBidWZmZXIudXBsb2FkU3RhdGljKGNoaWxkcmVuLCBpLCBhbW91bnQpO1xuICAgICAgICAgICAgY29udGFpbmVyLl9idWZmZXJUb1VwZGF0ZSA9IGogKyAxO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gYmluZCB0aGUgYnVmZmVyXG4gICAgICAgIGJ1ZmZlci5iaW5kKCB0aGlzLnNoYWRlciApO1xuXG4gICAgICAgICAvLyBub3cgZHJhdyB0aG9zZSBzdWNrYXMhXG4gICAgICAgIGdsLmRyYXdFbGVtZW50cyhnbC5UUklBTkdMRVMsIGFtb3VudCAqIDYsIGdsLlVOU0lHTkVEX1NIT1JULCAwKTtcbiAgICAgICAgdGhpcy5yZW5kZXJlci5kcmF3Q291bnQrKztcbiAgICB9XG59O1xuXG4vKipcbiAqIENyZWF0ZXMgb25lIHBhcnRpY2xlIGJ1ZmZlciBmb3IgZWFjaCBjaGlsZCBpbiB0aGUgY29udGFpbmVyIHdlIHdhbnQgdG8gcmVuZGVyIGFuZCB1cGRhdGVzIGludGVybmFsIHByb3BlcnRpZXNcbiAqXG4gKiBAcGFyYW0gY29udGFpbmVyIHtQSVhJLlBhcnRpY2xlQ29udGFpbmVyfSBUaGUgY29udGFpbmVyIHRvIHJlbmRlciB1c2luZyB0aGlzIFBhcnRpY2xlUmVuZGVyZXJcbiAqL1xuUGFydGljbGVSZW5kZXJlci5wcm90b3R5cGUuZ2VuZXJhdGVCdWZmZXJzID0gZnVuY3Rpb24gKGNvbnRhaW5lcilcbntcbiAgICB2YXIgZ2wgPSB0aGlzLnJlbmRlcmVyLmdsLFxuICAgICAgICBidWZmZXJzID0gW10sXG4gICAgICAgIHNpemUgPSBjb250YWluZXIuX21heFNpemUsXG4gICAgICAgIGJhdGNoU2l6ZSA9IGNvbnRhaW5lci5fYmF0Y2hTaXplLFxuICAgICAgICBkeW5hbWljUHJvcGVydHlGbGFncyA9IGNvbnRhaW5lci5fcHJvcGVydGllcyxcbiAgICAgICAgaTtcblxuICAgIGZvciAoaSA9IDA7IGkgPCBzaXplOyBpICs9IGJhdGNoU2l6ZSlcbiAgICB7XG4gICAgICAgIGJ1ZmZlcnMucHVzaChuZXcgUGFydGljbGVCdWZmZXIoZ2wsIHRoaXMucHJvcGVydGllcywgZHluYW1pY1Byb3BlcnR5RmxhZ3MsIGJhdGNoU2l6ZSkpO1xuICAgIH1cblxuICAgIHJldHVybiBidWZmZXJzO1xufTtcblxuLyoqXG4gKiBVcGxvYWRzIHRoZSB2ZXJ0aWNpZXMuXG4gKlxuICogQHBhcmFtIGNoaWxkcmVuIHtQSVhJLkRpc3BsYXlPYmplY3RbXX0gdGhlIGFycmF5IG9mIGRpc3BsYXkgb2JqZWN0cyB0byByZW5kZXJcbiAqIEBwYXJhbSBzdGFydEluZGV4IHtudW1iZXJ9IHRoZSBpbmRleCB0byBzdGFydCBmcm9tIGluIHRoZSBjaGlsZHJlbiBhcnJheVxuICogQHBhcmFtIGFtb3VudCB7bnVtYmVyfSB0aGUgYW1vdW50IG9mIGNoaWxkcmVuIHRoYXQgd2lsbCBoYXZlIHRoZWlyIHZlcnRpY2VzIHVwbG9hZGVkXG4gKiBAcGFyYW0gYXJyYXkge251bWJlcltdfVxuICogQHBhcmFtIHN0cmlkZSB7bnVtYmVyfVxuICogQHBhcmFtIG9mZnNldCB7bnVtYmVyfVxuICovXG5QYXJ0aWNsZVJlbmRlcmVyLnByb3RvdHlwZS51cGxvYWRWZXJ0aWNlcyA9IGZ1bmN0aW9uIChjaGlsZHJlbiwgc3RhcnRJbmRleCwgYW1vdW50LCBhcnJheSwgc3RyaWRlLCBvZmZzZXQpXG57XG4gICAgdmFyIHNwcml0ZSxcbiAgICAgICAgdGV4dHVyZSxcbiAgICAgICAgdHJpbSxcbiAgICAgICAgc3gsXG4gICAgICAgIHN5LFxuICAgICAgICB3MCwgdzEsIGgwLCBoMTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYW1vdW50OyBpKyspIHtcblxuICAgICAgICBzcHJpdGUgPSBjaGlsZHJlbltzdGFydEluZGV4ICsgaV07XG4gICAgICAgIHRleHR1cmUgPSBzcHJpdGUuX3RleHR1cmU7XG4gICAgICAgIHN4ID0gc3ByaXRlLnNjYWxlLng7XG4gICAgICAgIHN5ID0gc3ByaXRlLnNjYWxlLnk7XG5cbiAgICAgICAgaWYgKHRleHR1cmUudHJpbSlcbiAgICAgICAge1xuICAgICAgICAgICAgLy8gaWYgdGhlIHNwcml0ZSBpcyB0cmltbWVkIHRoZW4gd2UgbmVlZCB0byBhZGQgdGhlIGV4dHJhIHNwYWNlIGJlZm9yZSB0cmFuc2Zvcm1pbmcgdGhlIHNwcml0ZSBjb29yZHMuLlxuICAgICAgICAgICAgdHJpbSA9IHRleHR1cmUudHJpbTtcblxuICAgICAgICAgICAgdzEgPSB0cmltLnggLSBzcHJpdGUuYW5jaG9yLnggKiB0cmltLndpZHRoO1xuICAgICAgICAgICAgdzAgPSB3MSArIHRleHR1cmUuY3JvcC53aWR0aDtcblxuICAgICAgICAgICAgaDEgPSB0cmltLnkgLSBzcHJpdGUuYW5jaG9yLnkgKiB0cmltLmhlaWdodDtcbiAgICAgICAgICAgIGgwID0gaDEgKyB0ZXh0dXJlLmNyb3AuaGVpZ2h0O1xuICAgICAgICB9XG4gICAgICAgIGVsc2VcbiAgICAgICAge1xuICAgICAgICAgICAgdzAgPSAodGV4dHVyZS5fZnJhbWUud2lkdGggKSAqICgxLXNwcml0ZS5hbmNob3IueCk7XG4gICAgICAgICAgICB3MSA9ICh0ZXh0dXJlLl9mcmFtZS53aWR0aCApICogLXNwcml0ZS5hbmNob3IueDtcblxuICAgICAgICAgICAgaDAgPSB0ZXh0dXJlLl9mcmFtZS5oZWlnaHQgKiAoMS1zcHJpdGUuYW5jaG9yLnkpO1xuICAgICAgICAgICAgaDEgPSB0ZXh0dXJlLl9mcmFtZS5oZWlnaHQgKiAtc3ByaXRlLmFuY2hvci55O1xuICAgICAgICB9XG5cbiAgICAgICAgYXJyYXlbb2Zmc2V0XSA9IHcxICogc3g7XG4gICAgICAgIGFycmF5W29mZnNldCArIDFdID0gaDEgKiBzeTtcblxuICAgICAgICBhcnJheVtvZmZzZXQgKyBzdHJpZGVdID0gdzAgKiBzeDtcbiAgICAgICAgYXJyYXlbb2Zmc2V0ICsgc3RyaWRlICsgMV0gPSBoMSAqIHN5O1xuXG4gICAgICAgIGFycmF5W29mZnNldCArIHN0cmlkZSAqIDJdID0gdzAgKiBzeDtcbiAgICAgICAgYXJyYXlbb2Zmc2V0ICsgc3RyaWRlICogMiArIDFdID0gaDAgKiBzeTtcblxuICAgICAgICBhcnJheVtvZmZzZXQgKyBzdHJpZGUgKiAzXSA9IHcxICogc3g7XG4gICAgICAgIGFycmF5W29mZnNldCArIHN0cmlkZSAqIDMgKyAxXSA9IGgwICogc3k7XG5cbiAgICAgICAgb2Zmc2V0ICs9IHN0cmlkZSAqIDQ7XG4gICAgfVxuXG59O1xuXG4vKipcbiAqXG4gKiBAcGFyYW0gY2hpbGRyZW4ge1BJWEkuRGlzcGxheU9iamVjdFtdfSB0aGUgYXJyYXkgb2YgZGlzcGxheSBvYmplY3RzIHRvIHJlbmRlclxuICogQHBhcmFtIHN0YXJ0SW5kZXgge251bWJlcn0gdGhlIGluZGV4IHRvIHN0YXJ0IGZyb20gaW4gdGhlIGNoaWxkcmVuIGFycmF5XG4gKiBAcGFyYW0gYW1vdW50IHtudW1iZXJ9IHRoZSBhbW91bnQgb2YgY2hpbGRyZW4gdGhhdCB3aWxsIGhhdmUgdGhlaXIgcG9zaXRpb25zIHVwbG9hZGVkXG4gKiBAcGFyYW0gYXJyYXkge251bWJlcltdfVxuICogQHBhcmFtIHN0cmlkZSB7bnVtYmVyfVxuICogQHBhcmFtIG9mZnNldCB7bnVtYmVyfVxuICovXG5QYXJ0aWNsZVJlbmRlcmVyLnByb3RvdHlwZS51cGxvYWRQb3NpdGlvbiA9IGZ1bmN0aW9uIChjaGlsZHJlbixzdGFydEluZGV4LCBhbW91bnQsIGFycmF5LCBzdHJpZGUsIG9mZnNldClcbntcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFtb3VudDsgaSsrKVxuICAgIHtcbiAgICAgICAgdmFyIHNwcml0ZVBvc2l0aW9uID0gY2hpbGRyZW5bc3RhcnRJbmRleCArIGldLnBvc2l0aW9uO1xuXG4gICAgICAgIGFycmF5W29mZnNldF0gPSBzcHJpdGVQb3NpdGlvbi54O1xuICAgICAgICBhcnJheVtvZmZzZXQgKyAxXSA9IHNwcml0ZVBvc2l0aW9uLnk7XG5cbiAgICAgICAgYXJyYXlbb2Zmc2V0ICsgc3RyaWRlXSA9IHNwcml0ZVBvc2l0aW9uLng7XG4gICAgICAgIGFycmF5W29mZnNldCArIHN0cmlkZSArIDFdID0gc3ByaXRlUG9zaXRpb24ueTtcblxuICAgICAgICBhcnJheVtvZmZzZXQgKyBzdHJpZGUgKiAyXSA9IHNwcml0ZVBvc2l0aW9uLng7XG4gICAgICAgIGFycmF5W29mZnNldCArIHN0cmlkZSAqIDIgKyAxXSA9IHNwcml0ZVBvc2l0aW9uLnk7XG5cbiAgICAgICAgYXJyYXlbb2Zmc2V0ICsgc3RyaWRlICogM10gPSBzcHJpdGVQb3NpdGlvbi54O1xuICAgICAgICBhcnJheVtvZmZzZXQgKyBzdHJpZGUgKiAzICsgMV0gPSBzcHJpdGVQb3NpdGlvbi55O1xuXG4gICAgICAgIG9mZnNldCArPSBzdHJpZGUgKiA0O1xuICAgIH1cblxufTtcblxuLyoqXG4gKlxuICogQHBhcmFtIGNoaWxkcmVuIHtQSVhJLkRpc3BsYXlPYmplY3RbXX0gdGhlIGFycmF5IG9mIGRpc3BsYXkgb2JqZWN0cyB0byByZW5kZXJcbiAqIEBwYXJhbSBzdGFydEluZGV4IHtudW1iZXJ9IHRoZSBpbmRleCB0byBzdGFydCBmcm9tIGluIHRoZSBjaGlsZHJlbiBhcnJheVxuICogQHBhcmFtIGFtb3VudCB7bnVtYmVyfSB0aGUgYW1vdW50IG9mIGNoaWxkcmVuIHRoYXQgd2lsbCBoYXZlIHRoZWlyIHJvdGF0aW9uIHVwbG9hZGVkXG4gKiBAcGFyYW0gYXJyYXkge251bWJlcltdfVxuICogQHBhcmFtIHN0cmlkZSB7bnVtYmVyfVxuICogQHBhcmFtIG9mZnNldCB7bnVtYmVyfVxuICovXG5QYXJ0aWNsZVJlbmRlcmVyLnByb3RvdHlwZS51cGxvYWRSb3RhdGlvbiA9IGZ1bmN0aW9uIChjaGlsZHJlbixzdGFydEluZGV4LCBhbW91bnQsIGFycmF5LCBzdHJpZGUsIG9mZnNldClcbntcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFtb3VudDsgaSsrKVxuICAgIHtcbiAgICAgICAgdmFyIHNwcml0ZVJvdGF0aW9uID0gY2hpbGRyZW5bc3RhcnRJbmRleCArIGldLnJvdGF0aW9uO1xuXG5cbiAgICAgICAgYXJyYXlbb2Zmc2V0XSA9IHNwcml0ZVJvdGF0aW9uO1xuICAgICAgICBhcnJheVtvZmZzZXQgKyBzdHJpZGVdID0gc3ByaXRlUm90YXRpb247XG4gICAgICAgIGFycmF5W29mZnNldCArIHN0cmlkZSAqIDJdID0gc3ByaXRlUm90YXRpb247XG4gICAgICAgIGFycmF5W29mZnNldCArIHN0cmlkZSAqIDNdID0gc3ByaXRlUm90YXRpb247XG5cbiAgICAgICAgb2Zmc2V0ICs9IHN0cmlkZSAqIDQ7XG4gICAgfVxufTtcblxuLyoqXG4gKlxuICogQHBhcmFtIGNoaWxkcmVuIHtQSVhJLkRpc3BsYXlPYmplY3RbXX0gdGhlIGFycmF5IG9mIGRpc3BsYXkgb2JqZWN0cyB0byByZW5kZXJcbiAqIEBwYXJhbSBzdGFydEluZGV4IHtudW1iZXJ9IHRoZSBpbmRleCB0byBzdGFydCBmcm9tIGluIHRoZSBjaGlsZHJlbiBhcnJheVxuICogQHBhcmFtIGFtb3VudCB7bnVtYmVyfSB0aGUgYW1vdW50IG9mIGNoaWxkcmVuIHRoYXQgd2lsbCBoYXZlIHRoZWlyIFV2cyB1cGxvYWRlZFxuICogQHBhcmFtIGFycmF5IHtudW1iZXJbXX1cbiAqIEBwYXJhbSBzdHJpZGUge251bWJlcn1cbiAqIEBwYXJhbSBvZmZzZXQge251bWJlcn1cbiAqL1xuUGFydGljbGVSZW5kZXJlci5wcm90b3R5cGUudXBsb2FkVXZzID0gZnVuY3Rpb24gKGNoaWxkcmVuLHN0YXJ0SW5kZXgsIGFtb3VudCwgYXJyYXksIHN0cmlkZSwgb2Zmc2V0KVxue1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYW1vdW50OyBpKyspXG4gICAge1xuICAgICAgICB2YXIgdGV4dHVyZVV2cyA9IGNoaWxkcmVuW3N0YXJ0SW5kZXggKyBpXS5fdGV4dHVyZS5fdXZzO1xuXG4gICAgICAgIGlmICh0ZXh0dXJlVXZzKVxuICAgICAgICB7XG4gICAgICAgICAgICBhcnJheVtvZmZzZXRdID0gdGV4dHVyZVV2cy54MDtcbiAgICAgICAgICAgIGFycmF5W29mZnNldCArIDFdID0gdGV4dHVyZVV2cy55MDtcblxuICAgICAgICAgICAgYXJyYXlbb2Zmc2V0ICsgc3RyaWRlXSA9IHRleHR1cmVVdnMueDE7XG4gICAgICAgICAgICBhcnJheVtvZmZzZXQgKyBzdHJpZGUgKyAxXSA9IHRleHR1cmVVdnMueTE7XG5cbiAgICAgICAgICAgIGFycmF5W29mZnNldCArIHN0cmlkZSAqIDJdID0gdGV4dHVyZVV2cy54MjtcbiAgICAgICAgICAgIGFycmF5W29mZnNldCArIHN0cmlkZSAqIDIgKyAxXSA9IHRleHR1cmVVdnMueTI7XG5cbiAgICAgICAgICAgIGFycmF5W29mZnNldCArIHN0cmlkZSAqIDNdID0gdGV4dHVyZVV2cy54MztcbiAgICAgICAgICAgIGFycmF5W29mZnNldCArIHN0cmlkZSAqIDMgKyAxXSA9IHRleHR1cmVVdnMueTM7XG5cbiAgICAgICAgICAgIG9mZnNldCArPSBzdHJpZGUgKiA0O1xuICAgICAgICB9XG4gICAgICAgIGVsc2VcbiAgICAgICAge1xuICAgICAgICAgICAgLy9UT0RPIHlvdSBrbm93IHRoaXMgY2FuIGJlIGVhc2llciFcbiAgICAgICAgICAgIGFycmF5W29mZnNldF0gPSAwO1xuICAgICAgICAgICAgYXJyYXlbb2Zmc2V0ICsgMV0gPSAwO1xuXG4gICAgICAgICAgICBhcnJheVtvZmZzZXQgKyBzdHJpZGVdID0gMDtcbiAgICAgICAgICAgIGFycmF5W29mZnNldCArIHN0cmlkZSArIDFdID0gMDtcblxuICAgICAgICAgICAgYXJyYXlbb2Zmc2V0ICsgc3RyaWRlICogMl0gPSAwO1xuICAgICAgICAgICAgYXJyYXlbb2Zmc2V0ICsgc3RyaWRlICogMiArIDFdID0gMDtcblxuICAgICAgICAgICAgYXJyYXlbb2Zmc2V0ICsgc3RyaWRlICogM10gPSAwO1xuICAgICAgICAgICAgYXJyYXlbb2Zmc2V0ICsgc3RyaWRlICogMyArIDFdID0gMDtcblxuICAgICAgICAgICAgb2Zmc2V0ICs9IHN0cmlkZSAqIDQ7XG4gICAgICAgIH1cbiAgICB9XG59O1xuXG4vKipcbiAqXG4gKiBAcGFyYW0gY2hpbGRyZW4ge1BJWEkuRGlzcGxheU9iamVjdFtdfSB0aGUgYXJyYXkgb2YgZGlzcGxheSBvYmplY3RzIHRvIHJlbmRlclxuICogQHBhcmFtIHN0YXJ0SW5kZXgge251bWJlcn0gdGhlIGluZGV4IHRvIHN0YXJ0IGZyb20gaW4gdGhlIGNoaWxkcmVuIGFycmF5XG4gKiBAcGFyYW0gYW1vdW50IHtudW1iZXJ9IHRoZSBhbW91bnQgb2YgY2hpbGRyZW4gdGhhdCB3aWxsIGhhdmUgdGhlaXIgYWxwaGEgdXBsb2FkZWRcbiAqIEBwYXJhbSBhcnJheSB7bnVtYmVyW119XG4gKiBAcGFyYW0gc3RyaWRlIHtudW1iZXJ9XG4gKiBAcGFyYW0gb2Zmc2V0IHtudW1iZXJ9XG4gKi9cblBhcnRpY2xlUmVuZGVyZXIucHJvdG90eXBlLnVwbG9hZEFscGhhID0gZnVuY3Rpb24gKGNoaWxkcmVuLHN0YXJ0SW5kZXgsIGFtb3VudCwgYXJyYXksIHN0cmlkZSwgb2Zmc2V0KVxue1xuICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFtb3VudDsgaSsrKVxuICAgICB7XG4gICAgICAgIHZhciBzcHJpdGVBbHBoYSA9IGNoaWxkcmVuW3N0YXJ0SW5kZXggKyBpXS5hbHBoYTtcblxuICAgICAgICBhcnJheVtvZmZzZXRdID0gc3ByaXRlQWxwaGE7XG4gICAgICAgIGFycmF5W29mZnNldCArIHN0cmlkZV0gPSBzcHJpdGVBbHBoYTtcbiAgICAgICAgYXJyYXlbb2Zmc2V0ICsgc3RyaWRlICogMl0gPSBzcHJpdGVBbHBoYTtcbiAgICAgICAgYXJyYXlbb2Zmc2V0ICsgc3RyaWRlICogM10gPSBzcHJpdGVBbHBoYTtcblxuICAgICAgICBvZmZzZXQgKz0gc3RyaWRlICogNDtcbiAgICB9XG59O1xuXG5cbi8qKlxuICogRGVzdHJveXMgdGhlIFBhcnRpY2xlUmVuZGVyZXIuXG4gKlxuICovXG5QYXJ0aWNsZVJlbmRlcmVyLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKClcbntcbiAgICBpZiAodGhpcy5yZW5kZXJlci5nbCkge1xuICAgICAgICB0aGlzLnJlbmRlcmVyLmdsLmRlbGV0ZUJ1ZmZlcih0aGlzLmluZGV4QnVmZmVyKTtcbiAgICB9XG5cbiAgICBPYmplY3RSZW5kZXJlci5wcm90b3R5cGUuZGVzdHJveS5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuXG4gICAgdGhpcy5zaGFkZXIuZGVzdHJveSgpO1xuXG4gICAgdGhpcy5pbmRpY2VzID0gbnVsbDtcbiAgICB0aGlzLnRlbXBNYXRyaXggPSBudWxsO1xufTtcbiIsInZhciBUZXh0dXJlU2hhZGVyID0gcmVxdWlyZSgnLi4vLi4vcmVuZGVyZXJzL3dlYmdsL3NoYWRlcnMvVGV4dHVyZVNoYWRlcicpO1xuXG4vKipcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5UZXh0dXJlU2hhZGVyXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIHNoYWRlck1hbmFnZXIge1NoYWRlck1hbmFnZXJ9IFRoZSB3ZWJnbCBzaGFkZXIgbWFuYWdlciB0aGlzIHNoYWRlciB3b3JrcyBmb3IuXG4gKi9cbmZ1bmN0aW9uIFBhcnRpY2xlU2hhZGVyKHNoYWRlck1hbmFnZXIpXG57XG4gICAgVGV4dHVyZVNoYWRlci5jYWxsKHRoaXMsXG4gICAgICAgIHNoYWRlck1hbmFnZXIsXG4gICAgICAgIC8vIHZlcnRleCBzaGFkZXJcbiAgICAgICAgW1xuICAgICAgICAgICAgJ2F0dHJpYnV0ZSB2ZWMyIGFWZXJ0ZXhQb3NpdGlvbjsnLFxuICAgICAgICAgICAgJ2F0dHJpYnV0ZSB2ZWMyIGFUZXh0dXJlQ29vcmQ7JyxcbiAgICAgICAgICAgICdhdHRyaWJ1dGUgZmxvYXQgYUNvbG9yOycsXG5cbiAgICAgICAgICAgICdhdHRyaWJ1dGUgdmVjMiBhUG9zaXRpb25Db29yZDsnLFxuICAgICAgICAgICAgJ2F0dHJpYnV0ZSB2ZWMyIGFTY2FsZTsnLFxuICAgICAgICAgICAgJ2F0dHJpYnV0ZSBmbG9hdCBhUm90YXRpb247JyxcblxuICAgICAgICAgICAgJ3VuaWZvcm0gbWF0MyBwcm9qZWN0aW9uTWF0cml4OycsXG5cbiAgICAgICAgICAgICd2YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDsnLFxuICAgICAgICAgICAgJ3ZhcnlpbmcgZmxvYXQgdkNvbG9yOycsXG5cbiAgICAgICAgICAgICd2b2lkIG1haW4odm9pZCl7JyxcbiAgICAgICAgICAgICcgICB2ZWMyIHYgPSBhVmVydGV4UG9zaXRpb247JyxcblxuICAgICAgICAgICAgJyAgIHYueCA9IChhVmVydGV4UG9zaXRpb24ueCkgKiBjb3MoYVJvdGF0aW9uKSAtIChhVmVydGV4UG9zaXRpb24ueSkgKiBzaW4oYVJvdGF0aW9uKTsnLFxuICAgICAgICAgICAgJyAgIHYueSA9IChhVmVydGV4UG9zaXRpb24ueCkgKiBzaW4oYVJvdGF0aW9uKSArIChhVmVydGV4UG9zaXRpb24ueSkgKiBjb3MoYVJvdGF0aW9uKTsnLFxuICAgICAgICAgICAgJyAgIHYgPSB2ICsgYVBvc2l0aW9uQ29vcmQ7JyxcblxuICAgICAgICAgICAgJyAgIGdsX1Bvc2l0aW9uID0gdmVjNCgocHJvamVjdGlvbk1hdHJpeCAqIHZlYzModiwgMS4wKSkueHksIDAuMCwgMS4wKTsnLFxuXG4gICAgICAgICAgICAnICAgdlRleHR1cmVDb29yZCA9IGFUZXh0dXJlQ29vcmQ7JyxcbiAgICAgICAgICAgICcgICB2Q29sb3IgPSBhQ29sb3I7JyxcbiAgICAgICAgICAgICd9J1xuICAgICAgICBdLmpvaW4oJ1xcbicpLFxuICAgICAgICAvLyBoZWxsb1xuICAgICAgICAgW1xuICAgICAgICAgICAgJ3ByZWNpc2lvbiBsb3dwIGZsb2F0OycsXG5cbiAgICAgICAgICAgICd2YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDsnLFxuICAgICAgICAgICAgJ3ZhcnlpbmcgZmxvYXQgdkNvbG9yOycsXG5cbiAgICAgICAgICAgICd1bmlmb3JtIHNhbXBsZXIyRCB1U2FtcGxlcjsnLFxuICAgICAgICAgICAgJ3VuaWZvcm0gZmxvYXQgdUFscGhhOycsXG5cbiAgICAgICAgICAgICd2b2lkIG1haW4odm9pZCl7JyxcbiAgICAgICAgICAgICcgIHZlYzQgY29sb3IgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZUZXh0dXJlQ29vcmQpICogdkNvbG9yICogdUFscGhhOycsXG4gICAgICAgICAgICAnICBpZiAoY29sb3IuYSA9PSAwLjApIGRpc2NhcmQ7JyxcbiAgICAgICAgICAgICcgIGdsX0ZyYWdDb2xvciA9IGNvbG9yOycsXG4gICAgICAgICAgICAnfSdcbiAgICAgICAgXS5qb2luKCdcXG4nKSxcbiAgICAgICAgLy8gY3VzdG9tIHVuaWZvcm1zXG4gICAgICAgIHtcbiAgICAgICAgICAgIHVBbHBoYTogIHsgdHlwZTogJzFmJywgdmFsdWU6IDEgfVxuICAgICAgICB9LFxuICAgICAgICAvLyBjdXN0b20gYXR0cmlidXRlc1xuICAgICAgICB7XG4gICAgICAgICAgICBhUG9zaXRpb25Db29yZDogMCxcbiAgICAgICAgICAgLy8gYVNjYWxlOiAgICAgICAgIDAsXG4gICAgICAgICAgICBhUm90YXRpb246ICAgICAgMFxuICAgICAgICB9XG4gICAgKTtcblxuICAgIC8vIFRFTVAgSEFDS1xuXG59XG5cblBhcnRpY2xlU2hhZGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoVGV4dHVyZVNoYWRlci5wcm90b3R5cGUpO1xuUGFydGljbGVTaGFkZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gUGFydGljbGVTaGFkZXI7XG5cbm1vZHVsZS5leHBvcnRzID0gUGFydGljbGVTaGFkZXI7XG4iLCJ2YXIgdXRpbHMgPSByZXF1aXJlKCcuLi91dGlscycpLFxuICAgIG1hdGggPSByZXF1aXJlKCcuLi9tYXRoJyksXG4gICAgQ09OU1QgPSByZXF1aXJlKCcuLi9jb25zdCcpLFxuICAgIEV2ZW50RW1pdHRlciA9IHJlcXVpcmUoJ2V2ZW50ZW1pdHRlcjMnKTtcblxuLyoqXG4gKiBUaGUgQ2FudmFzUmVuZGVyZXIgZHJhd3MgdGhlIHNjZW5lIGFuZCBhbGwgaXRzIGNvbnRlbnQgb250byBhIDJkIGNhbnZhcy4gVGhpcyByZW5kZXJlciBzaG91bGQgYmUgdXNlZCBmb3IgYnJvd3NlcnMgdGhhdCBkbyBub3Qgc3VwcG9ydCB3ZWJHTC5cbiAqIERvbid0IGZvcmdldCB0byBhZGQgdGhlIENhbnZhc1JlbmRlcmVyLnZpZXcgdG8geW91ciBET00gb3IgeW91IHdpbGwgbm90IHNlZSBhbnl0aGluZyA6KVxuICpcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqIEBwYXJhbSBzeXN0ZW0ge3N0cmluZ30gVGhlIG5hbWUgb2YgdGhlIHN5c3RlbSB0aGlzIHJlbmRlcmVyIGlzIGZvci5cbiAqIEBwYXJhbSBbd2lkdGg9ODAwXSB7bnVtYmVyfSB0aGUgd2lkdGggb2YgdGhlIGNhbnZhcyB2aWV3XG4gKiBAcGFyYW0gW2hlaWdodD02MDBdIHtudW1iZXJ9IHRoZSBoZWlnaHQgb2YgdGhlIGNhbnZhcyB2aWV3XG4gKiBAcGFyYW0gW29wdGlvbnNdIHtvYmplY3R9IFRoZSBvcHRpb25hbCByZW5kZXJlciBwYXJhbWV0ZXJzXG4gKiBAcGFyYW0gW29wdGlvbnMudmlld10ge0hUTUxDYW52YXNFbGVtZW50fSB0aGUgY2FudmFzIHRvIHVzZSBhcyBhIHZpZXcsIG9wdGlvbmFsXG4gKiBAcGFyYW0gW29wdGlvbnMudHJhbnNwYXJlbnQ9ZmFsc2VdIHtib29sZWFufSBJZiB0aGUgcmVuZGVyIHZpZXcgaXMgdHJhbnNwYXJlbnQsIGRlZmF1bHQgZmFsc2VcbiAqIEBwYXJhbSBbb3B0aW9ucy5hdXRvUmVzaXplPWZhbHNlXSB7Ym9vbGVhbn0gSWYgdGhlIHJlbmRlciB2aWV3IGlzIGF1dG9tYXRpY2FsbHkgcmVzaXplZCwgZGVmYXVsdCBmYWxzZVxuICogQHBhcmFtIFtvcHRpb25zLmFudGlhbGlhcz1mYWxzZV0ge2Jvb2xlYW59IHNldHMgYW50aWFsaWFzIChvbmx5IGFwcGxpY2FibGUgaW4gY2hyb21lIGF0IHRoZSBtb21lbnQpXG4gKiBAcGFyYW0gW29wdGlvbnMucmVzb2x1dGlvbj0xXSB7bnVtYmVyfSB0aGUgcmVzb2x1dGlvbiBvZiB0aGUgcmVuZGVyZXIgcmV0aW5hIHdvdWxkIGJlIDJcbiAqIEBwYXJhbSBbb3B0aW9ucy5jbGVhckJlZm9yZVJlbmRlcj10cnVlXSB7Ym9vbGVhbn0gVGhpcyBzZXRzIGlmIHRoZSBDYW52YXNSZW5kZXJlciB3aWxsIGNsZWFyIHRoZSBjYW52YXMgb3JcbiAqICAgICAgbm90IGJlZm9yZSB0aGUgbmV3IHJlbmRlciBwYXNzLlxuICogQHBhcmFtIFtvcHRpb25zLmJhY2tncm91bmRDb2xvcj0weDAwMDAwMF0ge251bWJlcn0gVGhlIGJhY2tncm91bmQgY29sb3Igb2YgdGhlIHJlbmRlcmVkIGFyZWEgKHNob3duIGlmIG5vdCB0cmFuc3BhcmVudCkuXG4gKiBAcGFyYW0gW29wdGlvbnMucm91bmRQaXhlbHM9ZmFsc2VdIHtib29sZWFufSBJZiB0cnVlIFBpeGkgd2lsbCBNYXRoLmZsb29yKCkgeC95IHZhbHVlcyB3aGVuIHJlbmRlcmluZywgc3RvcHBpbmcgcGl4ZWwgaW50ZXJwb2xhdGlvbi5cbiAqL1xuZnVuY3Rpb24gU3lzdGVtUmVuZGVyZXIoc3lzdGVtLCB3aWR0aCwgaGVpZ2h0LCBvcHRpb25zKVxue1xuICAgIEV2ZW50RW1pdHRlci5jYWxsKHRoaXMpO1xuXG4gICAgdXRpbHMuc2F5SGVsbG8oc3lzdGVtKTtcblxuICAgIC8vIHByZXBhcmUgb3B0aW9uc1xuICAgIGlmIChvcHRpb25zKVxuICAgIHtcbiAgICAgICAgZm9yICh2YXIgaSBpbiBDT05TVC5ERUZBVUxUX1JFTkRFUl9PUFRJT05TKVxuICAgICAgICB7XG4gICAgICAgICAgICBpZiAodHlwZW9mIG9wdGlvbnNbaV0gPT09ICd1bmRlZmluZWQnKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIG9wdGlvbnNbaV0gPSBDT05TVC5ERUZBVUxUX1JFTkRFUl9PUFRJT05TW2ldO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIG9wdGlvbnMgPSBDT05TVC5ERUZBVUxUX1JFTkRFUl9PUFRJT05TO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoZSB0eXBlIG9mIHRoZSByZW5kZXJlci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCBQSVhJLlJFTkRFUkVSX1RZUEUuVU5LTk9XTlxuICAgICAqIEBzZWUgUElYSS5SRU5ERVJFUl9UWVBFXG4gICAgICovXG4gICAgdGhpcy50eXBlID0gQ09OU1QuUkVOREVSRVJfVFlQRS5VTktOT1dOO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHdpZHRoIG9mIHRoZSBjYW52YXMgdmlld1xuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDgwMFxuICAgICAqL1xuICAgIHRoaXMud2lkdGggPSB3aWR0aCB8fCA4MDA7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgaGVpZ2h0IG9mIHRoZSBjYW52YXMgdmlld1xuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDYwMFxuICAgICAqL1xuICAgIHRoaXMuaGVpZ2h0ID0gaGVpZ2h0IHx8IDYwMDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBjYW52YXMgZWxlbWVudCB0aGF0IGV2ZXJ5dGhpbmcgaXMgZHJhd24gdG9cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge0hUTUxDYW52YXNFbGVtZW50fVxuICAgICAqL1xuICAgIHRoaXMudmlldyA9IG9wdGlvbnMudmlldyB8fCBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdjYW52YXMnKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSByZXNvbHV0aW9uIG9mIHRoZSByZW5kZXJlclxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDFcbiAgICAgKi9cbiAgICB0aGlzLnJlc29sdXRpb24gPSBvcHRpb25zLnJlc29sdXRpb247XG5cbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIHRoZSByZW5kZXIgdmlldyBpcyB0cmFuc3BhcmVudFxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKi9cbiAgICB0aGlzLnRyYW5zcGFyZW50ID0gb3B0aW9ucy50cmFuc3BhcmVudDtcblxuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgdGhlIHJlbmRlciB2aWV3IHNob3VsZCBiZSByZXNpemVkIGF1dG9tYXRpY2FsbHlcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICovXG4gICAgdGhpcy5hdXRvUmVzaXplID0gb3B0aW9ucy5hdXRvUmVzaXplIHx8IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogVHJhY2tzIHRoZSBibGVuZCBtb2RlcyB1c2VmdWwgZm9yIHRoaXMgcmVuZGVyZXIuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtvYmplY3Q8c3RyaW5nLCBtaXhlZD59XG4gICAgICovXG4gICAgdGhpcy5ibGVuZE1vZGVzID0gbnVsbDtcblxuICAgIC8qKlxuICAgICAqIFRoZSB2YWx1ZSBvZiB0aGUgcHJlc2VydmVEcmF3aW5nQnVmZmVyIGZsYWcgYWZmZWN0cyB3aGV0aGVyIG9yIG5vdCB0aGUgY29udGVudHMgb2YgdGhlIHN0ZW5jaWwgYnVmZmVyIGlzIHJldGFpbmVkIGFmdGVyIHJlbmRlcmluZy5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICovXG4gICAgdGhpcy5wcmVzZXJ2ZURyYXdpbmdCdWZmZXIgPSBvcHRpb25zLnByZXNlcnZlRHJhd2luZ0J1ZmZlcjtcblxuICAgIC8qKlxuICAgICAqIFRoaXMgc2V0cyBpZiB0aGUgQ2FudmFzUmVuZGVyZXIgd2lsbCBjbGVhciB0aGUgY2FudmFzIG9yIG5vdCBiZWZvcmUgdGhlIG5ldyByZW5kZXIgcGFzcy5cbiAgICAgKiBJZiB0aGUgc2NlbmUgaXMgTk9UIHRyYW5zcGFyZW50IFBpeGkgd2lsbCB1c2UgYSBjYW52YXMgc2l6ZWQgZmlsbFJlY3Qgb3BlcmF0aW9uIGV2ZXJ5IGZyYW1lIHRvIHNldCB0aGUgY2FudmFzIGJhY2tncm91bmQgY29sb3IuXG4gICAgICogSWYgdGhlIHNjZW5lIGlzIHRyYW5zcGFyZW50IFBpeGkgd2lsbCB1c2UgY2xlYXJSZWN0IHRvIGNsZWFyIHRoZSBjYW52YXMgZXZlcnkgZnJhbWUuXG4gICAgICogRGlzYWJsZSB0aGlzIGJ5IHNldHRpbmcgdGhpcyB0byBmYWxzZS4gRm9yIGV4YW1wbGUgaWYgeW91ciBnYW1lIGhhcyBhIGNhbnZhcyBmaWxsaW5nIGJhY2tncm91bmQgaW1hZ2UgeW91IG9mdGVuIGRvbid0IG5lZWQgdGhpcyBzZXQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqIEBkZWZhdWx0XG4gICAgICovXG4gICAgdGhpcy5jbGVhckJlZm9yZVJlbmRlciA9IG9wdGlvbnMuY2xlYXJCZWZvcmVSZW5kZXI7XG5cbiAgICAvKipcbiAgICAgKiBJZiB0cnVlIFBpeGkgd2lsbCBNYXRoLmZsb29yKCkgeC95IHZhbHVlcyB3aGVuIHJlbmRlcmluZywgc3RvcHBpbmcgcGl4ZWwgaW50ZXJwb2xhdGlvbi5cbiAgICAgKiBIYW5keSBmb3IgY3Jpc3AgcGl4ZWwgYXJ0IGFuZCBzcGVlZCBvbiBsZWdhY3kgZGV2aWNlcy5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICovXG4gICAgdGhpcy5yb3VuZFBpeGVscyA9IG9wdGlvbnMucm91bmRQaXhlbHM7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYmFja2dyb3VuZCBjb2xvciBhcyBhIG51bWJlci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX2JhY2tncm91bmRDb2xvciA9IDB4MDAwMDAwO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGJhY2tncm91bmQgY29sb3IgYXMgYW4gW1IsIEcsIEJdIGFycmF5LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyW119XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9iYWNrZ3JvdW5kQ29sb3JSZ2JhID0gWzAsIDAsIDAsIDBdO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGJhY2tncm91bmQgY29sb3IgYXMgYSBzdHJpbmcuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtzdHJpbmd9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9iYWNrZ3JvdW5kQ29sb3JTdHJpbmcgPSAnIzAwMDAwMCc7XG5cbiAgICB0aGlzLmJhY2tncm91bmRDb2xvciA9IG9wdGlvbnMuYmFja2dyb3VuZENvbG9yIHx8IHRoaXMuX2JhY2tncm91bmRDb2xvcjsgLy8gcnVuIGJnIGNvbG9yIHNldHRlclxuXG4gICAgLyoqXG4gICAgICogVGhpcyB0ZW1wb3JhcnkgZGlzcGxheSBvYmplY3QgdXNlZCBhcyB0aGUgcGFyZW50IG9mIHRoZSBjdXJyZW50bHkgYmVpbmcgcmVuZGVyZWQgaXRlbVxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5EaXNwbGF5T2JqZWN0fVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fdGVtcERpc3BsYXlPYmplY3RQYXJlbnQgPSB7d29ybGRUcmFuc2Zvcm06bmV3IG1hdGguTWF0cml4KCksIHdvcmxkQWxwaGE6MSwgY2hpbGRyZW46W119O1xuXG4gICAgLyoqXG4gICAgICogVGhlIGxhc3Qgcm9vdCBvYmplY3QgdGhhdCB0aGUgcmVuZGVyZXIgdHJpZWQgdG8gcmVuZGVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5EaXNwbGF5T2JqZWN0fVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fbGFzdE9iamVjdFJlbmRlcmVkID0gdGhpcy5fdGVtcERpc3BsYXlPYmplY3RQYXJlbnQ7XG59XG5cbi8vIGNvbnN0cnVjdG9yXG5TeXN0ZW1SZW5kZXJlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKEV2ZW50RW1pdHRlci5wcm90b3R5cGUpO1xuU3lzdGVtUmVuZGVyZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gU3lzdGVtUmVuZGVyZXI7XG5tb2R1bGUuZXhwb3J0cyA9IFN5c3RlbVJlbmRlcmVyO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhTeXN0ZW1SZW5kZXJlci5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBUaGUgYmFja2dyb3VuZCBjb2xvciB0byBmaWxsIGlmIG5vdCB0cmFuc3BhcmVudFxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLlN5c3RlbVJlbmRlcmVyI1xuICAgICAqL1xuICAgIGJhY2tncm91bmRDb2xvcjpcbiAgICB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2JhY2tncm91bmRDb2xvcjtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLl9iYWNrZ3JvdW5kQ29sb3IgPSB2YWw7XG4gICAgICAgICAgICB0aGlzLl9iYWNrZ3JvdW5kQ29sb3JTdHJpbmcgPSB1dGlscy5oZXgyc3RyaW5nKHZhbCk7XG4gICAgICAgICAgICB1dGlscy5oZXgycmdiKHZhbCwgdGhpcy5fYmFja2dyb3VuZENvbG9yUmdiYSk7XG4gICAgICAgIH1cbiAgICB9XG59KTtcblxuLyoqXG4gKiBSZXNpemVzIHRoZSBjYW52YXMgdmlldyB0byB0aGUgc3BlY2lmaWVkIHdpZHRoIGFuZCBoZWlnaHRcbiAqXG4gKiBAcGFyYW0gd2lkdGgge251bWJlcn0gdGhlIG5ldyB3aWR0aCBvZiB0aGUgY2FudmFzIHZpZXdcbiAqIEBwYXJhbSBoZWlnaHQge251bWJlcn0gdGhlIG5ldyBoZWlnaHQgb2YgdGhlIGNhbnZhcyB2aWV3XG4gKi9cblN5c3RlbVJlbmRlcmVyLnByb3RvdHlwZS5yZXNpemUgPSBmdW5jdGlvbiAod2lkdGgsIGhlaWdodCkge1xuICAgIHRoaXMud2lkdGggPSB3aWR0aCAqIHRoaXMucmVzb2x1dGlvbjtcbiAgICB0aGlzLmhlaWdodCA9IGhlaWdodCAqIHRoaXMucmVzb2x1dGlvbjtcblxuICAgIHRoaXMudmlldy53aWR0aCA9IHRoaXMud2lkdGg7XG4gICAgdGhpcy52aWV3LmhlaWdodCA9IHRoaXMuaGVpZ2h0O1xuXG4gICAgaWYgKHRoaXMuYXV0b1Jlc2l6ZSlcbiAgICB7XG4gICAgICAgIHRoaXMudmlldy5zdHlsZS53aWR0aCA9IHRoaXMud2lkdGggLyB0aGlzLnJlc29sdXRpb24gKyAncHgnO1xuICAgICAgICB0aGlzLnZpZXcuc3R5bGUuaGVpZ2h0ID0gdGhpcy5oZWlnaHQgLyB0aGlzLnJlc29sdXRpb24gKyAncHgnO1xuICAgIH1cbn07XG5cbi8qKlxuICogUmVtb3ZlcyBldmVyeXRoaW5nIGZyb20gdGhlIHJlbmRlcmVyIGFuZCBvcHRpb25hbGx5IHJlbW92ZXMgdGhlIENhbnZhcyBET00gZWxlbWVudC5cbiAqXG4gKiBAcGFyYW0gW3JlbW92ZVZpZXc9ZmFsc2VdIHtib29sZWFufSBSZW1vdmVzIHRoZSBDYW52YXMgZWxlbWVudCBmcm9tIHRoZSBET00uXG4gKi9cblN5c3RlbVJlbmRlcmVyLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKHJlbW92ZVZpZXcpIHtcbiAgICBpZiAocmVtb3ZlVmlldyAmJiB0aGlzLnZpZXcucGFyZW50Tm9kZSlcbiAgICB7XG4gICAgICAgIHRoaXMudmlldy5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHRoaXMudmlldyk7XG4gICAgfVxuXG4gICAgdGhpcy50eXBlID0gQ09OU1QuUkVOREVSRVJfVFlQRS5VTktOT1dOO1xuXG4gICAgdGhpcy53aWR0aCA9IDA7XG4gICAgdGhpcy5oZWlnaHQgPSAwO1xuXG4gICAgdGhpcy52aWV3ID0gbnVsbDtcblxuICAgIHRoaXMucmVzb2x1dGlvbiA9IDA7XG5cbiAgICB0aGlzLnRyYW5zcGFyZW50ID0gZmFsc2U7XG5cbiAgICB0aGlzLmF1dG9SZXNpemUgPSBmYWxzZTtcblxuICAgIHRoaXMuYmxlbmRNb2RlcyA9IG51bGw7XG5cbiAgICB0aGlzLnByZXNlcnZlRHJhd2luZ0J1ZmZlciA9IGZhbHNlO1xuICAgIHRoaXMuY2xlYXJCZWZvcmVSZW5kZXIgPSBmYWxzZTtcblxuICAgIHRoaXMucm91bmRQaXhlbHMgPSBmYWxzZTtcblxuICAgIHRoaXMuX2JhY2tncm91bmRDb2xvciA9IDA7XG4gICAgdGhpcy5fYmFja2dyb3VuZENvbG9yUmdiYSA9IG51bGw7XG4gICAgdGhpcy5fYmFja2dyb3VuZENvbG9yU3RyaW5nID0gbnVsbDtcbn07XG4iLCJ2YXIgU3lzdGVtUmVuZGVyZXIgPSByZXF1aXJlKCcuLi9TeXN0ZW1SZW5kZXJlcicpLFxuICAgIENhbnZhc01hc2tNYW5hZ2VyID0gcmVxdWlyZSgnLi91dGlscy9DYW52YXNNYXNrTWFuYWdlcicpLFxuICAgIHV0aWxzID0gcmVxdWlyZSgnLi4vLi4vdXRpbHMnKSxcbiAgICBtYXRoID0gcmVxdWlyZSgnLi4vLi4vbWF0aCcpLFxuICAgIENPTlNUID0gcmVxdWlyZSgnLi4vLi4vY29uc3QnKTtcblxuLyoqXG4gKiBUaGUgQ2FudmFzUmVuZGVyZXIgZHJhd3MgdGhlIHNjZW5lIGFuZCBhbGwgaXRzIGNvbnRlbnQgb250byBhIDJkIGNhbnZhcy4gVGhpcyByZW5kZXJlciBzaG91bGQgYmUgdXNlZCBmb3IgYnJvd3NlcnMgdGhhdCBkbyBub3Qgc3VwcG9ydCB3ZWJHTC5cbiAqIERvbid0IGZvcmdldCB0byBhZGQgdGhlIENhbnZhc1JlbmRlcmVyLnZpZXcgdG8geW91ciBET00gb3IgeW91IHdpbGwgbm90IHNlZSBhbnl0aGluZyA6KVxuICpcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqIEBleHRlbmRzIFBJWEkuU3lzdGVtUmVuZGVyZXJcbiAqIEBwYXJhbSBbd2lkdGg9ODAwXSB7bnVtYmVyfSB0aGUgd2lkdGggb2YgdGhlIGNhbnZhcyB2aWV3XG4gKiBAcGFyYW0gW2hlaWdodD02MDBdIHtudW1iZXJ9IHRoZSBoZWlnaHQgb2YgdGhlIGNhbnZhcyB2aWV3XG4gKiBAcGFyYW0gW29wdGlvbnNdIHtvYmplY3R9IFRoZSBvcHRpb25hbCByZW5kZXJlciBwYXJhbWV0ZXJzXG4gKiBAcGFyYW0gW29wdGlvbnMudmlld10ge0hUTUxDYW52YXNFbGVtZW50fSB0aGUgY2FudmFzIHRvIHVzZSBhcyBhIHZpZXcsIG9wdGlvbmFsXG4gKiBAcGFyYW0gW29wdGlvbnMudHJhbnNwYXJlbnQ9ZmFsc2VdIHtib29sZWFufSBJZiB0aGUgcmVuZGVyIHZpZXcgaXMgdHJhbnNwYXJlbnQsIGRlZmF1bHQgZmFsc2VcbiAqIEBwYXJhbSBbb3B0aW9ucy5hdXRvUmVzaXplPWZhbHNlXSB7Ym9vbGVhbn0gSWYgdGhlIHJlbmRlciB2aWV3IGlzIGF1dG9tYXRpY2FsbHkgcmVzaXplZCwgZGVmYXVsdCBmYWxzZVxuICogQHBhcmFtIFtvcHRpb25zLmFudGlhbGlhcz1mYWxzZV0ge2Jvb2xlYW59IHNldHMgYW50aWFsaWFzIChvbmx5IGFwcGxpY2FibGUgaW4gY2hyb21lIGF0IHRoZSBtb21lbnQpXG4gKiBAcGFyYW0gW29wdGlvbnMucmVzb2x1dGlvbj0xXSB7bnVtYmVyfSB0aGUgcmVzb2x1dGlvbiBvZiB0aGUgcmVuZGVyZXIgcmV0aW5hIHdvdWxkIGJlIDJcbiAqIEBwYXJhbSBbb3B0aW9ucy5jbGVhckJlZm9yZVJlbmRlcj10cnVlXSB7Ym9vbGVhbn0gVGhpcyBzZXRzIGlmIHRoZSBDYW52YXNSZW5kZXJlciB3aWxsIGNsZWFyIHRoZSBjYW52YXMgb3JcbiAqICAgICAgbm90IGJlZm9yZSB0aGUgbmV3IHJlbmRlciBwYXNzLlxuICogQHBhcmFtIFtvcHRpb25zLnJvdW5kUGl4ZWxzPWZhbHNlXSB7Ym9vbGVhbn0gSWYgdHJ1ZSBQaXhpIHdpbGwgTWF0aC5mbG9vcigpIHgveSB2YWx1ZXMgd2hlbiByZW5kZXJpbmcsIHN0b3BwaW5nIHBpeGVsIGludGVycG9sYXRpb24uXG4gKi9cbmZ1bmN0aW9uIENhbnZhc1JlbmRlcmVyKHdpZHRoLCBoZWlnaHQsIG9wdGlvbnMpXG57XG4gICAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG5cbiAgICBTeXN0ZW1SZW5kZXJlci5jYWxsKHRoaXMsICdDYW52YXMnLCB3aWR0aCwgaGVpZ2h0LCBvcHRpb25zKTtcblxuICAgIHRoaXMudHlwZSA9IENPTlNULlJFTkRFUkVSX1RZUEUuQ0FOVkFTO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGNhbnZhcyAyZCBjb250ZXh0IHRoYXQgZXZlcnl0aGluZyBpcyBkcmF3biB3aXRoLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEfVxuICAgICAqL1xuICAgIHRoaXMuY29udGV4dCA9IHRoaXMudmlldy5nZXRDb250ZXh0KCcyZCcsIHsgYWxwaGE6IHRoaXMudHJhbnNwYXJlbnQgfSk7XG5cbiAgICAvKipcbiAgICAgKiBCb29sZWFuIGZsYWcgY29udHJvbGxpbmcgY2FudmFzIHJlZnJlc2guXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqL1xuICAgIHRoaXMucmVmcmVzaCA9IHRydWU7XG5cbiAgICAvKipcbiAgICAgKiBJbnN0YW5jZSBvZiBhIENhbnZhc01hc2tNYW5hZ2VyLCBoYW5kbGVzIG1hc2tpbmcgd2hlbiB1c2luZyB0aGUgY2FudmFzIHJlbmRlcmVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5DYW52YXNNYXNrTWFuYWdlcn1cbiAgICAgKi9cbiAgICB0aGlzLm1hc2tNYW5hZ2VyID0gbmV3IENhbnZhc01hc2tNYW5hZ2VyKCk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgY2FudmFzIHByb3BlcnR5IHVzZWQgdG8gc2V0IHRoZSBjYW52YXMgc21vb3RoaW5nIHByb3BlcnR5LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7c3RyaW5nfVxuICAgICAqL1xuICAgIHRoaXMuc21vb3RoUHJvcGVydHkgPSAnaW1hZ2VTbW9vdGhpbmdFbmFibGVkJztcblxuICAgIGlmICghdGhpcy5jb250ZXh0LmltYWdlU21vb3RoaW5nRW5hYmxlZClcbiAgICB7XG4gICAgICAgIGlmICh0aGlzLmNvbnRleHQud2Via2l0SW1hZ2VTbW9vdGhpbmdFbmFibGVkKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnNtb290aFByb3BlcnR5ID0gJ3dlYmtpdEltYWdlU21vb3RoaW5nRW5hYmxlZCc7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodGhpcy5jb250ZXh0Lm1vekltYWdlU21vb3RoaW5nRW5hYmxlZClcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5zbW9vdGhQcm9wZXJ0eSA9ICdtb3pJbWFnZVNtb290aGluZ0VuYWJsZWQnO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHRoaXMuY29udGV4dC5vSW1hZ2VTbW9vdGhpbmdFbmFibGVkKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnNtb290aFByb3BlcnR5ID0gJ29JbWFnZVNtb290aGluZ0VuYWJsZWQnO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHRoaXMuY29udGV4dC5tc0ltYWdlU21vb3RoaW5nRW5hYmxlZClcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5zbW9vdGhQcm9wZXJ0eSA9ICdtc0ltYWdlU21vb3RoaW5nRW5hYmxlZCc7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLmluaXRQbHVnaW5zKCk7XG5cbiAgICB0aGlzLl9tYXBCbGVuZE1vZGVzKCk7XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIHRlbXBvcmFyeSBkaXNwbGF5IG9iamVjdCB1c2VkIGFzIHRoZSBwYXJlbnQgb2YgdGhlIGN1cnJlbnRseSBiZWluZyByZW5kZXJlZCBpdGVtXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLkRpc3BsYXlPYmplY3R9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl90ZW1wRGlzcGxheU9iamVjdFBhcmVudCA9IHtcbiAgICAgICAgd29ybGRUcmFuc2Zvcm06IG5ldyBtYXRoLk1hdHJpeCgpLFxuICAgICAgICB3b3JsZEFscGhhOiAxXG4gICAgfTtcblxuXG4gICAgdGhpcy5yZXNpemUod2lkdGgsIGhlaWdodCk7XG59XG5cbi8vIGNvbnN0cnVjdG9yXG5DYW52YXNSZW5kZXJlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFN5c3RlbVJlbmRlcmVyLnByb3RvdHlwZSk7XG5DYW52YXNSZW5kZXJlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBDYW52YXNSZW5kZXJlcjtcbm1vZHVsZS5leHBvcnRzID0gQ2FudmFzUmVuZGVyZXI7XG51dGlscy5wbHVnaW5UYXJnZXQubWl4aW4oQ2FudmFzUmVuZGVyZXIpO1xuXG4vKipcbiAqIFJlbmRlcnMgdGhlIG9iamVjdCB0byB0aGlzIGNhbnZhcyB2aWV3XG4gKlxuICogQHBhcmFtIG9iamVjdCB7UElYSS5EaXNwbGF5T2JqZWN0fSB0aGUgb2JqZWN0IHRvIGJlIHJlbmRlcmVkXG4gKi9cbkNhbnZhc1JlbmRlcmVyLnByb3RvdHlwZS5yZW5kZXIgPSBmdW5jdGlvbiAob2JqZWN0KVxue1xuICAgIHRoaXMuZW1pdCgncHJlcmVuZGVyJyk7XG5cbiAgICB2YXIgY2FjaGVQYXJlbnQgPSBvYmplY3QucGFyZW50O1xuXG4gICAgdGhpcy5fbGFzdE9iamVjdFJlbmRlcmVkID0gb2JqZWN0O1xuXG4gICAgb2JqZWN0LnBhcmVudCA9IHRoaXMuX3RlbXBEaXNwbGF5T2JqZWN0UGFyZW50O1xuXG4gICAgLy8gdXBkYXRlIHRoZSBzY2VuZSBncmFwaFxuICAgIG9iamVjdC51cGRhdGVUcmFuc2Zvcm0oKTtcblxuICAgIG9iamVjdC5wYXJlbnQgPSBjYWNoZVBhcmVudDtcblxuICAgIHRoaXMuY29udGV4dC5zZXRUcmFuc2Zvcm0oMSwgMCwgMCwgMSwgMCwgMCk7XG5cbiAgICB0aGlzLmNvbnRleHQuZ2xvYmFsQWxwaGEgPSAxO1xuXG4gICAgdGhpcy5jb250ZXh0Lmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbiA9IHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5OT1JNQUxdO1xuXG4gICAgaWYgKG5hdmlnYXRvci5pc0NvY29vbkpTICYmIHRoaXMudmlldy5zY3JlZW5jYW52YXMpXG4gICAge1xuICAgICAgICB0aGlzLmNvbnRleHQuZmlsbFN0eWxlID0gJ2JsYWNrJztcbiAgICAgICAgdGhpcy5jb250ZXh0LmNsZWFyKCk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuY2xlYXJCZWZvcmVSZW5kZXIpXG4gICAge1xuICAgICAgICBpZiAodGhpcy50cmFuc3BhcmVudClcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5jb250ZXh0LmNsZWFyUmVjdCgwLCAwLCB0aGlzLndpZHRoLCB0aGlzLmhlaWdodCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmNvbnRleHQuZmlsbFN0eWxlID0gdGhpcy5fYmFja2dyb3VuZENvbG9yU3RyaW5nO1xuICAgICAgICAgICAgdGhpcy5jb250ZXh0LmZpbGxSZWN0KDAsIDAsIHRoaXMud2lkdGggLCB0aGlzLmhlaWdodCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLnJlbmRlckRpc3BsYXlPYmplY3Qob2JqZWN0LCB0aGlzLmNvbnRleHQpO1xuXG4gICAgdGhpcy5lbWl0KCdwb3N0cmVuZGVyJyk7XG59O1xuXG4vKipcbiAqIFJlbW92ZXMgZXZlcnl0aGluZyBmcm9tIHRoZSByZW5kZXJlciBhbmQgb3B0aW9uYWxseSByZW1vdmVzIHRoZSBDYW52YXMgRE9NIGVsZW1lbnQuXG4gKlxuICogQHBhcmFtIFtyZW1vdmVWaWV3PWZhbHNlXSB7Ym9vbGVhbn0gUmVtb3ZlcyB0aGUgQ2FudmFzIGVsZW1lbnQgZnJvbSB0aGUgRE9NLlxuICovXG5DYW52YXNSZW5kZXJlci5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uIChyZW1vdmVWaWV3KVxue1xuICAgIHRoaXMuZGVzdHJveVBsdWdpbnMoKTtcblxuICAgIC8vIGNhbGwgdGhlIGJhc2UgZGVzdHJveVxuICAgIFN5c3RlbVJlbmRlcmVyLnByb3RvdHlwZS5kZXN0cm95LmNhbGwodGhpcywgcmVtb3ZlVmlldyk7XG5cbiAgICB0aGlzLmNvbnRleHQgPSBudWxsO1xuXG4gICAgdGhpcy5yZWZyZXNoID0gdHJ1ZTtcblxuICAgIHRoaXMubWFza01hbmFnZXIuZGVzdHJveSgpO1xuICAgIHRoaXMubWFza01hbmFnZXIgPSBudWxsO1xuXG4gICAgdGhpcy5zbW9vdGhQcm9wZXJ0eSA9IG51bGw7XG59O1xuXG4vKipcbiAqIFJlbmRlcnMgYSBkaXNwbGF5IG9iamVjdFxuICpcbiAqIEBwYXJhbSBkaXNwbGF5T2JqZWN0IHtQSVhJLkRpc3BsYXlPYmplY3R9IFRoZSBkaXNwbGF5T2JqZWN0IHRvIHJlbmRlclxuICogQHByaXZhdGVcbiAqL1xuQ2FudmFzUmVuZGVyZXIucHJvdG90eXBlLnJlbmRlckRpc3BsYXlPYmplY3QgPSBmdW5jdGlvbiAoZGlzcGxheU9iamVjdCwgY29udGV4dClcbntcbiAgICB2YXIgdGVtcENvbnRleHQgPSB0aGlzLmNvbnRleHQ7XG5cbiAgICB0aGlzLmNvbnRleHQgPSBjb250ZXh0O1xuICAgIGRpc3BsYXlPYmplY3QucmVuZGVyQ2FudmFzKHRoaXMpO1xuICAgIHRoaXMuY29udGV4dCA9IHRlbXBDb250ZXh0O1xufTtcblxuLyoqXG4gKiBAZXh0ZW5kcyBQSVhJLlN5c3RlbVJlbmRlcmVyI3Jlc2l6ZVxuICpcbiAqIEBwYXJhbSB7bnVtYmVyfSB3XG4gKiBAcGFyYW0ge251bWJlcn0gaFxuICovXG5DYW52YXNSZW5kZXJlci5wcm90b3R5cGUucmVzaXplID0gZnVuY3Rpb24gKHcsIGgpXG57XG4gICAgU3lzdGVtUmVuZGVyZXIucHJvdG90eXBlLnJlc2l6ZS5jYWxsKHRoaXMsIHcsIGgpO1xuXG4gICAgLy9yZXNldCB0aGUgc2NhbGUgbW9kZS4uIG9kZGx5IHRoaXMgc2VlbXMgdG8gYmUgcmVzZXQgd2hlbiB0aGUgY2FudmFzIGlzIHJlc2l6ZWQuXG4gICAgLy9zdXJlbHkgYSBicm93c2VyIGJ1Zz8/IExldCBwaXhpIGZpeCB0aGF0IGZvciB5b3UuLlxuICAgIGlmKHRoaXMuc21vb3RoUHJvcGVydHkpXG4gICAge1xuICAgICAgICB0aGlzLmNvbnRleHRbdGhpcy5zbW9vdGhQcm9wZXJ0eV0gPSAoQ09OU1QuU0NBTEVfTU9ERVMuREVGQVVMVCA9PT0gQ09OU1QuU0NBTEVfTU9ERVMuTElORUFSKTtcbiAgICB9XG5cbn07XG5cbi8qKlxuICogTWFwcyBQaXhpIGJsZW5kIG1vZGVzIHRvIGNhbnZhcyBibGVuZCBtb2Rlcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5DYW52YXNSZW5kZXJlci5wcm90b3R5cGUuX21hcEJsZW5kTW9kZXMgPSBmdW5jdGlvbiAoKVxue1xuICAgIGlmICghdGhpcy5ibGVuZE1vZGVzKVxuICAgIHtcbiAgICAgICAgdGhpcy5ibGVuZE1vZGVzID0ge307XG5cbiAgICAgICAgaWYgKHV0aWxzLmNhblVzZU5ld0NhbnZhc0JsZW5kTW9kZXMoKSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5ibGVuZE1vZGVzW0NPTlNULkJMRU5EX01PREVTLk5PUk1BTF0gICAgICAgID0gJ3NvdXJjZS1vdmVyJztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5BRERdICAgICAgICAgICA9ICdsaWdodGVyJzsgLy9JUyBUSElTIE9LPz8/XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuTVVMVElQTFldICAgICAgPSAnbXVsdGlwbHknO1xuICAgICAgICAgICAgdGhpcy5ibGVuZE1vZGVzW0NPTlNULkJMRU5EX01PREVTLlNDUkVFTl0gICAgICAgID0gJ3NjcmVlbic7XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuT1ZFUkxBWV0gICAgICAgPSAnb3ZlcmxheSc7XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuREFSS0VOXSAgICAgICAgPSAnZGFya2VuJztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5MSUdIVEVOXSAgICAgICA9ICdsaWdodGVuJztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5DT0xPUl9ET0RHRV0gICA9ICdjb2xvci1kb2RnZSc7XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuQ09MT1JfQlVSTl0gICAgPSAnY29sb3ItYnVybic7XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuSEFSRF9MSUdIVF0gICAgPSAnaGFyZC1saWdodCc7XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuU09GVF9MSUdIVF0gICAgPSAnc29mdC1saWdodCc7XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuRElGRkVSRU5DRV0gICAgPSAnZGlmZmVyZW5jZSc7XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuRVhDTFVTSU9OXSAgICAgPSAnZXhjbHVzaW9uJztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5IVUVdICAgICAgICAgICA9ICdodWUnO1xuICAgICAgICAgICAgdGhpcy5ibGVuZE1vZGVzW0NPTlNULkJMRU5EX01PREVTLlNBVFVSQVRJT05dICAgID0gJ3NhdHVyYXRlJztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5DT0xPUl0gICAgICAgICA9ICdjb2xvcic7XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuTFVNSU5PU0lUWV0gICAgPSAnbHVtaW5vc2l0eSc7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgICAvLyB0aGlzIG1lYW5zIHRoYXQgdGhlIGJyb3dzZXIgZG9lcyBub3Qgc3VwcG9ydCB0aGUgY29vbCBuZXcgYmxlbmQgbW9kZXMgaW4gY2FudmFzICdjb3VnaCcgaWUgJ2NvdWdoJ1xuICAgICAgICAgICAgdGhpcy5ibGVuZE1vZGVzW0NPTlNULkJMRU5EX01PREVTLk5PUk1BTF0gICAgICAgID0gJ3NvdXJjZS1vdmVyJztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5BRERdICAgICAgICAgICA9ICdsaWdodGVyJzsgLy9JUyBUSElTIE9LPz8/XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuTVVMVElQTFldICAgICAgPSAnc291cmNlLW92ZXInO1xuICAgICAgICAgICAgdGhpcy5ibGVuZE1vZGVzW0NPTlNULkJMRU5EX01PREVTLlNDUkVFTl0gICAgICAgID0gJ3NvdXJjZS1vdmVyJztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5PVkVSTEFZXSAgICAgICA9ICdzb3VyY2Utb3Zlcic7XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuREFSS0VOXSAgICAgICAgPSAnc291cmNlLW92ZXInO1xuICAgICAgICAgICAgdGhpcy5ibGVuZE1vZGVzW0NPTlNULkJMRU5EX01PREVTLkxJR0hURU5dICAgICAgID0gJ3NvdXJjZS1vdmVyJztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5DT0xPUl9ET0RHRV0gICA9ICdzb3VyY2Utb3Zlcic7XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuQ09MT1JfQlVSTl0gICAgPSAnc291cmNlLW92ZXInO1xuICAgICAgICAgICAgdGhpcy5ibGVuZE1vZGVzW0NPTlNULkJMRU5EX01PREVTLkhBUkRfTElHSFRdICAgID0gJ3NvdXJjZS1vdmVyJztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5TT0ZUX0xJR0hUXSAgICA9ICdzb3VyY2Utb3Zlcic7XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuRElGRkVSRU5DRV0gICAgPSAnc291cmNlLW92ZXInO1xuICAgICAgICAgICAgdGhpcy5ibGVuZE1vZGVzW0NPTlNULkJMRU5EX01PREVTLkVYQ0xVU0lPTl0gICAgID0gJ3NvdXJjZS1vdmVyJztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5IVUVdICAgICAgICAgICA9ICdzb3VyY2Utb3Zlcic7XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuU0FUVVJBVElPTl0gICAgPSAnc291cmNlLW92ZXInO1xuICAgICAgICAgICAgdGhpcy5ibGVuZE1vZGVzW0NPTlNULkJMRU5EX01PREVTLkNPTE9SXSAgICAgICAgID0gJ3NvdXJjZS1vdmVyJztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5MVU1JTk9TSVRZXSAgICA9ICdzb3VyY2Utb3Zlcic7XG4gICAgICAgIH1cbiAgICB9XG59O1xuIiwiLyoqXG4gKiBDcmVhdGVzIGEgQ2FudmFzIGVsZW1lbnQgb2YgdGhlIGdpdmVuIHNpemUuXG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIHdpZHRoIHtudW1iZXJ9IHRoZSB3aWR0aCBmb3IgdGhlIG5ld2x5IGNyZWF0ZWQgY2FudmFzXG4gKiBAcGFyYW0gaGVpZ2h0IHtudW1iZXJ9IHRoZSBoZWlnaHQgZm9yIHRoZSBuZXdseSBjcmVhdGVkIGNhbnZhc1xuICovXG5mdW5jdGlvbiBDYW52YXNCdWZmZXIod2lkdGgsIGhlaWdodClcbntcbiAgICAvKipcbiAgICAgKiBUaGUgQ2FudmFzIG9iamVjdCB0aGF0IGJlbG9uZ3MgdG8gdGhpcyBDYW52YXNCdWZmZXIuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtIVE1MQ2FudmFzRWxlbWVudH1cbiAgICAgKi9cbiAgICB0aGlzLmNhbnZhcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NhbnZhcycpO1xuXG4gICAgLyoqXG4gICAgICogQSBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQgb2JqZWN0IHJlcHJlc2VudGluZyBhIHR3by1kaW1lbnNpb25hbCByZW5kZXJpbmcgY29udGV4dC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRH1cbiAgICAgKi9cbiAgICB0aGlzLmNvbnRleHQgPSB0aGlzLmNhbnZhcy5nZXRDb250ZXh0KCcyZCcpO1xuXG4gICAgdGhpcy5jYW52YXMud2lkdGggPSB3aWR0aDtcbiAgICB0aGlzLmNhbnZhcy5oZWlnaHQgPSBoZWlnaHQ7XG59XG5cbkNhbnZhc0J1ZmZlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBDYW52YXNCdWZmZXI7XG5tb2R1bGUuZXhwb3J0cyA9IENhbnZhc0J1ZmZlcjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoQ2FudmFzQnVmZmVyLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFRoZSB3aWR0aCBvZiB0aGUgY2FudmFzIGJ1ZmZlciBpbiBwaXhlbHMuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuQ2FudmFzQnVmZmVyI1xuICAgICAqL1xuICAgIHdpZHRoOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY2FudmFzLndpZHRoO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWwpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuY2FudmFzLndpZHRoID0gdmFsO1xuICAgICAgICB9XG4gICAgfSxcbiAgICAvKipcbiAgICAgKiBUaGUgaGVpZ2h0IG9mIHRoZSBjYW52YXMgYnVmZmVyIGluIHBpeGVscy5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5DYW52YXNCdWZmZXIjXG4gICAgICovXG4gICAgaGVpZ2h0OiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY2FudmFzLmhlaWdodDtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmNhbnZhcy5oZWlnaHQgPSB2YWw7XG4gICAgICAgIH1cbiAgICB9XG59KTtcblxuLyoqXG4gKiBDbGVhcnMgdGhlIGNhbnZhcyB0aGF0IHdhcyBjcmVhdGVkIGJ5IHRoZSBDYW52YXNCdWZmZXIgY2xhc3MuXG4gKlxuICogQHByaXZhdGVcbiAqL1xuQ2FudmFzQnVmZmVyLnByb3RvdHlwZS5jbGVhciA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy5jb250ZXh0LnNldFRyYW5zZm9ybSgxLCAwLCAwLCAxLCAwLCAwKTtcbiAgICB0aGlzLmNvbnRleHQuY2xlYXJSZWN0KDAsMCwgdGhpcy5jYW52YXMud2lkdGgsIHRoaXMuY2FudmFzLmhlaWdodCk7XG59O1xuXG4vKipcbiAqIFJlc2l6ZXMgdGhlIGNhbnZhcyB0byB0aGUgc3BlY2lmaWVkIHdpZHRoIGFuZCBoZWlnaHQuXG4gKlxuICogQHBhcmFtIHdpZHRoIHtudW1iZXJ9IHRoZSBuZXcgd2lkdGggb2YgdGhlIGNhbnZhc1xuICogQHBhcmFtIGhlaWdodCB7bnVtYmVyfSB0aGUgbmV3IGhlaWdodCBvZiB0aGUgY2FudmFzXG4gKi9cbkNhbnZhc0J1ZmZlci5wcm90b3R5cGUucmVzaXplID0gZnVuY3Rpb24gKHdpZHRoLCBoZWlnaHQpXG57XG4gICAgdGhpcy5jYW52YXMud2lkdGggPSB3aWR0aDtcbiAgICB0aGlzLmNhbnZhcy5oZWlnaHQgPSBoZWlnaHQ7XG59O1xuXG4vKipcbiAqIERlc3Ryb3lzIHRoaXMgY2FudmFzLlxuICpcbiAqL1xuQ2FudmFzQnVmZmVyLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLmNvbnRleHQgPSBudWxsO1xuICAgIHRoaXMuY2FudmFzID0gbnVsbDtcbn07XG4iLCJ2YXIgQ09OU1QgPSByZXF1aXJlKCcuLi8uLi8uLi9jb25zdCcpO1xuXG4vKipcbiAqIEEgc2V0IG9mIGZ1bmN0aW9ucyB1c2VkIGJ5IHRoZSBjYW52YXMgcmVuZGVyZXIgdG8gZHJhdyB0aGUgcHJpbWl0aXZlIGdyYXBoaWNzIGRhdGEuXG4gKiBAc3RhdGljXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKi9cbnZhciBDYW52YXNHcmFwaGljcyA9IHt9O1xubW9kdWxlLmV4cG9ydHMgPSBDYW52YXNHcmFwaGljcztcblxuLypcbiAqIFJlbmRlcnMgYSBHcmFwaGljcyBvYmplY3QgdG8gYSBjYW52YXMuXG4gKlxuICogQHBhcmFtIGdyYXBoaWNzIHtQSVhJLkdyYXBoaWNzfSB0aGUgYWN0dWFsIGdyYXBoaWNzIG9iamVjdCB0byByZW5kZXJcbiAqIEBwYXJhbSBjb250ZXh0IHtDYW52YXNSZW5kZXJpbmdDb250ZXh0MkR9IHRoZSAyZCBkcmF3aW5nIG1ldGhvZCBvZiB0aGUgY2FudmFzXG4gKi9cbkNhbnZhc0dyYXBoaWNzLnJlbmRlckdyYXBoaWNzID0gZnVuY3Rpb24gKGdyYXBoaWNzLCBjb250ZXh0KVxue1xuICAgIHZhciB3b3JsZEFscGhhID0gZ3JhcGhpY3Mud29ybGRBbHBoYTtcblxuICAgIGlmIChncmFwaGljcy5kaXJ0eSlcbiAgICB7XG4gICAgICAgIHRoaXMudXBkYXRlR3JhcGhpY3NUaW50KGdyYXBoaWNzKTtcbiAgICAgICAgZ3JhcGhpY3MuZGlydHkgPSBmYWxzZTtcbiAgICB9XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGdyYXBoaWNzLmdyYXBoaWNzRGF0YS5sZW5ndGg7IGkrKylcbiAgICB7XG4gICAgICAgIHZhciBkYXRhID0gZ3JhcGhpY3MuZ3JhcGhpY3NEYXRhW2ldO1xuICAgICAgICB2YXIgc2hhcGUgPSBkYXRhLnNoYXBlO1xuXG4gICAgICAgIHZhciBmaWxsQ29sb3IgPSBkYXRhLl9maWxsVGludDtcbiAgICAgICAgdmFyIGxpbmVDb2xvciA9IGRhdGEuX2xpbmVUaW50O1xuXG4gICAgICAgIGNvbnRleHQubGluZVdpZHRoID0gZGF0YS5saW5lV2lkdGg7XG5cbiAgICAgICAgaWYgKGRhdGEudHlwZSA9PT0gQ09OU1QuU0hBUEVTLlBPTFkpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNvbnRleHQuYmVnaW5QYXRoKCk7XG5cbiAgICAgICAgICAgIHZhciBwb2ludHMgPSBzaGFwZS5wb2ludHM7XG5cbiAgICAgICAgICAgIGNvbnRleHQubW92ZVRvKHBvaW50c1swXSwgcG9pbnRzWzFdKTtcblxuICAgICAgICAgICAgZm9yICh2YXIgaj0xOyBqIDwgcG9pbnRzLmxlbmd0aC8yOyBqKyspXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29udGV4dC5saW5lVG8ocG9pbnRzW2ogKiAyXSwgcG9pbnRzW2ogKiAyICsgMV0pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoc2hhcGUuY2xvc2VkKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGNvbnRleHQubGluZVRvKHBvaW50c1swXSwgcG9pbnRzWzFdKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gaWYgdGhlIGZpcnN0IGFuZCBsYXN0IHBvaW50IGFyZSB0aGUgc2FtZSBjbG9zZSB0aGUgcGF0aCAtIG11Y2ggbmVhdGVyIDopXG4gICAgICAgICAgICBpZiAocG9pbnRzWzBdID09PSBwb2ludHNbcG9pbnRzLmxlbmd0aC0yXSAmJiBwb2ludHNbMV0gPT09IHBvaW50c1twb2ludHMubGVuZ3RoLTFdKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGNvbnRleHQuY2xvc2VQYXRoKCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChkYXRhLmZpbGwpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29udGV4dC5nbG9iYWxBbHBoYSA9IGRhdGEuZmlsbEFscGhhICogd29ybGRBbHBoYTtcbiAgICAgICAgICAgICAgICBjb250ZXh0LmZpbGxTdHlsZSA9ICcjJyArICgnMDAwMDAnICsgKCBmaWxsQ29sb3IgfCAwKS50b1N0cmluZygxNikpLnN1YnN0cigtNik7XG4gICAgICAgICAgICAgICAgY29udGV4dC5maWxsKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZGF0YS5saW5lV2lkdGgpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29udGV4dC5nbG9iYWxBbHBoYSA9IGRhdGEubGluZUFscGhhICogd29ybGRBbHBoYTtcbiAgICAgICAgICAgICAgICBjb250ZXh0LnN0cm9rZVN0eWxlID0gJyMnICsgKCcwMDAwMCcgKyAoIGxpbmVDb2xvciB8IDApLnRvU3RyaW5nKDE2KSkuc3Vic3RyKC02KTtcbiAgICAgICAgICAgICAgICBjb250ZXh0LnN0cm9rZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGRhdGEudHlwZSA9PT0gQ09OU1QuU0hBUEVTLlJFQ1QpXG4gICAgICAgIHtcblxuICAgICAgICAgICAgaWYgKGRhdGEuZmlsbENvbG9yIHx8IGRhdGEuZmlsbENvbG9yID09PSAwKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGNvbnRleHQuZ2xvYmFsQWxwaGEgPSBkYXRhLmZpbGxBbHBoYSAqIHdvcmxkQWxwaGE7XG4gICAgICAgICAgICAgICAgY29udGV4dC5maWxsU3R5bGUgPSAnIycgKyAoJzAwMDAwJyArICggZmlsbENvbG9yIHwgMCkudG9TdHJpbmcoMTYpKS5zdWJzdHIoLTYpO1xuICAgICAgICAgICAgICAgIGNvbnRleHQuZmlsbFJlY3Qoc2hhcGUueCwgc2hhcGUueSwgc2hhcGUud2lkdGgsIHNoYXBlLmhlaWdodCk7XG5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChkYXRhLmxpbmVXaWR0aClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb250ZXh0Lmdsb2JhbEFscGhhID0gZGF0YS5saW5lQWxwaGEgKiB3b3JsZEFscGhhO1xuICAgICAgICAgICAgICAgIGNvbnRleHQuc3Ryb2tlU3R5bGUgPSAnIycgKyAoJzAwMDAwJyArICggbGluZUNvbG9yIHwgMCkudG9TdHJpbmcoMTYpKS5zdWJzdHIoLTYpO1xuICAgICAgICAgICAgICAgIGNvbnRleHQuc3Ryb2tlUmVjdChzaGFwZS54LCBzaGFwZS55LCBzaGFwZS53aWR0aCwgc2hhcGUuaGVpZ2h0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChkYXRhLnR5cGUgPT09IENPTlNULlNIQVBFUy5DSVJDKVxuICAgICAgICB7XG4gICAgICAgICAgICAvLyBUT0RPIC0gbmVlZCB0byBiZSBVbmRlZmluZWQhXG4gICAgICAgICAgICBjb250ZXh0LmJlZ2luUGF0aCgpO1xuICAgICAgICAgICAgY29udGV4dC5hcmMoc2hhcGUueCwgc2hhcGUueSwgc2hhcGUucmFkaXVzLDAsMipNYXRoLlBJKTtcbiAgICAgICAgICAgIGNvbnRleHQuY2xvc2VQYXRoKCk7XG5cbiAgICAgICAgICAgIGlmIChkYXRhLmZpbGwpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29udGV4dC5nbG9iYWxBbHBoYSA9IGRhdGEuZmlsbEFscGhhICogd29ybGRBbHBoYTtcbiAgICAgICAgICAgICAgICBjb250ZXh0LmZpbGxTdHlsZSA9ICcjJyArICgnMDAwMDAnICsgKCBmaWxsQ29sb3IgfCAwKS50b1N0cmluZygxNikpLnN1YnN0cigtNik7XG4gICAgICAgICAgICAgICAgY29udGV4dC5maWxsKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZGF0YS5saW5lV2lkdGgpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29udGV4dC5nbG9iYWxBbHBoYSA9IGRhdGEubGluZUFscGhhICogd29ybGRBbHBoYTtcbiAgICAgICAgICAgICAgICBjb250ZXh0LnN0cm9rZVN0eWxlID0gJyMnICsgKCcwMDAwMCcgKyAoIGxpbmVDb2xvciB8IDApLnRvU3RyaW5nKDE2KSkuc3Vic3RyKC02KTtcbiAgICAgICAgICAgICAgICBjb250ZXh0LnN0cm9rZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGRhdGEudHlwZSA9PT0gQ09OU1QuU0hBUEVTLkVMSVApXG4gICAgICAgIHtcbiAgICAgICAgICAgIC8vIGVsbGlwc2UgY29kZSB0YWtlbiBmcm9tOiBodHRwOi8vc3RhY2tvdmVyZmxvdy5jb20vcXVlc3Rpb25zLzIxNzI3OTgvaG93LXRvLWRyYXctYW4tb3ZhbC1pbi1odG1sNS1jYW52YXNcblxuICAgICAgICAgICAgdmFyIHcgPSBzaGFwZS53aWR0aCAqIDI7XG4gICAgICAgICAgICB2YXIgaCA9IHNoYXBlLmhlaWdodCAqIDI7XG5cbiAgICAgICAgICAgIHZhciB4ID0gc2hhcGUueCAtIHcvMjtcbiAgICAgICAgICAgIHZhciB5ID0gc2hhcGUueSAtIGgvMjtcblxuICAgICAgICAgICAgY29udGV4dC5iZWdpblBhdGgoKTtcblxuICAgICAgICAgICAgdmFyIGthcHBhID0gMC41NTIyODQ4LFxuICAgICAgICAgICAgICAgIG94ID0gKHcgLyAyKSAqIGthcHBhLCAvLyBjb250cm9sIHBvaW50IG9mZnNldCBob3Jpem9udGFsXG4gICAgICAgICAgICAgICAgb3kgPSAoaCAvIDIpICoga2FwcGEsIC8vIGNvbnRyb2wgcG9pbnQgb2Zmc2V0IHZlcnRpY2FsXG4gICAgICAgICAgICAgICAgeGUgPSB4ICsgdywgICAgICAgICAgIC8vIHgtZW5kXG4gICAgICAgICAgICAgICAgeWUgPSB5ICsgaCwgICAgICAgICAgIC8vIHktZW5kXG4gICAgICAgICAgICAgICAgeG0gPSB4ICsgdyAvIDIsICAgICAgIC8vIHgtbWlkZGxlXG4gICAgICAgICAgICAgICAgeW0gPSB5ICsgaCAvIDI7ICAgICAgIC8vIHktbWlkZGxlXG5cbiAgICAgICAgICAgIGNvbnRleHQubW92ZVRvKHgsIHltKTtcbiAgICAgICAgICAgIGNvbnRleHQuYmV6aWVyQ3VydmVUbyh4LCB5bSAtIG95LCB4bSAtIG94LCB5LCB4bSwgeSk7XG4gICAgICAgICAgICBjb250ZXh0LmJlemllckN1cnZlVG8oeG0gKyBveCwgeSwgeGUsIHltIC0gb3ksIHhlLCB5bSk7XG4gICAgICAgICAgICBjb250ZXh0LmJlemllckN1cnZlVG8oeGUsIHltICsgb3ksIHhtICsgb3gsIHllLCB4bSwgeWUpO1xuICAgICAgICAgICAgY29udGV4dC5iZXppZXJDdXJ2ZVRvKHhtIC0gb3gsIHllLCB4LCB5bSArIG95LCB4LCB5bSk7XG5cbiAgICAgICAgICAgIGNvbnRleHQuY2xvc2VQYXRoKCk7XG5cbiAgICAgICAgICAgIGlmIChkYXRhLmZpbGwpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29udGV4dC5nbG9iYWxBbHBoYSA9IGRhdGEuZmlsbEFscGhhICogd29ybGRBbHBoYTtcbiAgICAgICAgICAgICAgICBjb250ZXh0LmZpbGxTdHlsZSA9ICcjJyArICgnMDAwMDAnICsgKCBmaWxsQ29sb3IgfCAwKS50b1N0cmluZygxNikpLnN1YnN0cigtNik7XG4gICAgICAgICAgICAgICAgY29udGV4dC5maWxsKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZGF0YS5saW5lV2lkdGgpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29udGV4dC5nbG9iYWxBbHBoYSA9IGRhdGEubGluZUFscGhhICogd29ybGRBbHBoYTtcbiAgICAgICAgICAgICAgICBjb250ZXh0LnN0cm9rZVN0eWxlID0gJyMnICsgKCcwMDAwMCcgKyAoIGxpbmVDb2xvciB8IDApLnRvU3RyaW5nKDE2KSkuc3Vic3RyKC02KTtcbiAgICAgICAgICAgICAgICBjb250ZXh0LnN0cm9rZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGRhdGEudHlwZSA9PT0gQ09OU1QuU0hBUEVTLlJSRUMpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHZhciByeCA9IHNoYXBlLng7XG4gICAgICAgICAgICB2YXIgcnkgPSBzaGFwZS55O1xuICAgICAgICAgICAgdmFyIHdpZHRoID0gc2hhcGUud2lkdGg7XG4gICAgICAgICAgICB2YXIgaGVpZ2h0ID0gc2hhcGUuaGVpZ2h0O1xuICAgICAgICAgICAgdmFyIHJhZGl1cyA9IHNoYXBlLnJhZGl1cztcblxuICAgICAgICAgICAgdmFyIG1heFJhZGl1cyA9IE1hdGgubWluKHdpZHRoLCBoZWlnaHQpIC8gMiB8IDA7XG4gICAgICAgICAgICByYWRpdXMgPSByYWRpdXMgPiBtYXhSYWRpdXMgPyBtYXhSYWRpdXMgOiByYWRpdXM7XG5cbiAgICAgICAgICAgIGNvbnRleHQuYmVnaW5QYXRoKCk7XG4gICAgICAgICAgICBjb250ZXh0Lm1vdmVUbyhyeCwgcnkgKyByYWRpdXMpO1xuICAgICAgICAgICAgY29udGV4dC5saW5lVG8ocngsIHJ5ICsgaGVpZ2h0IC0gcmFkaXVzKTtcbiAgICAgICAgICAgIGNvbnRleHQucXVhZHJhdGljQ3VydmVUbyhyeCwgcnkgKyBoZWlnaHQsIHJ4ICsgcmFkaXVzLCByeSArIGhlaWdodCk7XG4gICAgICAgICAgICBjb250ZXh0LmxpbmVUbyhyeCArIHdpZHRoIC0gcmFkaXVzLCByeSArIGhlaWdodCk7XG4gICAgICAgICAgICBjb250ZXh0LnF1YWRyYXRpY0N1cnZlVG8ocnggKyB3aWR0aCwgcnkgKyBoZWlnaHQsIHJ4ICsgd2lkdGgsIHJ5ICsgaGVpZ2h0IC0gcmFkaXVzKTtcbiAgICAgICAgICAgIGNvbnRleHQubGluZVRvKHJ4ICsgd2lkdGgsIHJ5ICsgcmFkaXVzKTtcbiAgICAgICAgICAgIGNvbnRleHQucXVhZHJhdGljQ3VydmVUbyhyeCArIHdpZHRoLCByeSwgcnggKyB3aWR0aCAtIHJhZGl1cywgcnkpO1xuICAgICAgICAgICAgY29udGV4dC5saW5lVG8ocnggKyByYWRpdXMsIHJ5KTtcbiAgICAgICAgICAgIGNvbnRleHQucXVhZHJhdGljQ3VydmVUbyhyeCwgcnksIHJ4LCByeSArIHJhZGl1cyk7XG4gICAgICAgICAgICBjb250ZXh0LmNsb3NlUGF0aCgpO1xuXG4gICAgICAgICAgICBpZiAoZGF0YS5maWxsQ29sb3IgfHwgZGF0YS5maWxsQ29sb3IgPT09IDApXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29udGV4dC5nbG9iYWxBbHBoYSA9IGRhdGEuZmlsbEFscGhhICogd29ybGRBbHBoYTtcbiAgICAgICAgICAgICAgICBjb250ZXh0LmZpbGxTdHlsZSA9ICcjJyArICgnMDAwMDAnICsgKCBmaWxsQ29sb3IgfCAwKS50b1N0cmluZygxNikpLnN1YnN0cigtNik7XG4gICAgICAgICAgICAgICAgY29udGV4dC5maWxsKCk7XG5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChkYXRhLmxpbmVXaWR0aClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb250ZXh0Lmdsb2JhbEFscGhhID0gZGF0YS5saW5lQWxwaGEgKiB3b3JsZEFscGhhO1xuICAgICAgICAgICAgICAgIGNvbnRleHQuc3Ryb2tlU3R5bGUgPSAnIycgKyAoJzAwMDAwJyArICggbGluZUNvbG9yIHwgMCkudG9TdHJpbmcoMTYpKS5zdWJzdHIoLTYpO1xuICAgICAgICAgICAgICAgIGNvbnRleHQuc3Ryb2tlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG59O1xuXG4vKlxuICogUmVuZGVycyBhIGdyYXBoaWNzIG1hc2tcbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIGdyYXBoaWNzIHtQSVhJLkdyYXBoaWNzfSB0aGUgZ3JhcGhpY3Mgd2hpY2ggd2lsbCBiZSB1c2VkIGFzIGEgbWFza1xuICogQHBhcmFtIGNvbnRleHQge0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRH0gdGhlIGNvbnRleHQgMmQgbWV0aG9kIG9mIHRoZSBjYW52YXNcbiAqL1xuQ2FudmFzR3JhcGhpY3MucmVuZGVyR3JhcGhpY3NNYXNrID0gZnVuY3Rpb24gKGdyYXBoaWNzLCBjb250ZXh0KVxue1xuICAgIHZhciBsZW4gPSBncmFwaGljcy5ncmFwaGljc0RhdGEubGVuZ3RoO1xuXG4gICAgaWYgKGxlbiA9PT0gMClcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb250ZXh0LmJlZ2luUGF0aCgpO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47IGkrKylcbiAgICB7XG4gICAgICAgIHZhciBkYXRhID0gZ3JhcGhpY3MuZ3JhcGhpY3NEYXRhW2ldO1xuICAgICAgICB2YXIgc2hhcGUgPSBkYXRhLnNoYXBlO1xuXG4gICAgICAgIGlmIChkYXRhLnR5cGUgPT09IENPTlNULlNIQVBFUy5QT0xZKVxuICAgICAgICB7XG5cbiAgICAgICAgICAgIHZhciBwb2ludHMgPSBzaGFwZS5wb2ludHM7XG5cbiAgICAgICAgICAgIGNvbnRleHQubW92ZVRvKHBvaW50c1swXSwgcG9pbnRzWzFdKTtcblxuICAgICAgICAgICAgZm9yICh2YXIgaj0xOyBqIDwgcG9pbnRzLmxlbmd0aC8yOyBqKyspXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29udGV4dC5saW5lVG8ocG9pbnRzW2ogKiAyXSwgcG9pbnRzW2ogKiAyICsgMV0pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBpZiB0aGUgZmlyc3QgYW5kIGxhc3QgcG9pbnQgYXJlIHRoZSBzYW1lIGNsb3NlIHRoZSBwYXRoIC0gbXVjaCBuZWF0ZXIgOilcbiAgICAgICAgICAgIGlmIChwb2ludHNbMF0gPT09IHBvaW50c1twb2ludHMubGVuZ3RoLTJdICYmIHBvaW50c1sxXSA9PT0gcG9pbnRzW3BvaW50cy5sZW5ndGgtMV0pXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29udGV4dC5jbG9zZVBhdGgoKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGRhdGEudHlwZSA9PT0gQ09OU1QuU0hBUEVTLlJFQ1QpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNvbnRleHQucmVjdChzaGFwZS54LCBzaGFwZS55LCBzaGFwZS53aWR0aCwgc2hhcGUuaGVpZ2h0KTtcbiAgICAgICAgICAgIGNvbnRleHQuY2xvc2VQYXRoKCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoZGF0YS50eXBlID09PSBDT05TVC5TSEFQRVMuQ0lSQylcbiAgICAgICAge1xuICAgICAgICAgICAgLy8gVE9ETyAtIG5lZWQgdG8gYmUgVW5kZWZpbmVkIVxuICAgICAgICAgICAgY29udGV4dC5hcmMoc2hhcGUueCwgc2hhcGUueSwgc2hhcGUucmFkaXVzLCAwLCAyICogTWF0aC5QSSk7XG4gICAgICAgICAgICBjb250ZXh0LmNsb3NlUGF0aCgpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGRhdGEudHlwZSA9PT0gQ09OU1QuU0hBUEVTLkVMSVApXG4gICAgICAgIHtcblxuICAgICAgICAgICAgLy8gZWxsaXBzZSBjb2RlIHRha2VuIGZyb206IGh0dHA6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvMjE3Mjc5OC9ob3ctdG8tZHJhdy1hbi1vdmFsLWluLWh0bWw1LWNhbnZhc1xuXG4gICAgICAgICAgICB2YXIgdyA9IHNoYXBlLndpZHRoICogMjtcbiAgICAgICAgICAgIHZhciBoID0gc2hhcGUuaGVpZ2h0ICogMjtcblxuICAgICAgICAgICAgdmFyIHggPSBzaGFwZS54IC0gdy8yO1xuICAgICAgICAgICAgdmFyIHkgPSBzaGFwZS55IC0gaC8yO1xuXG4gICAgICAgICAgICB2YXIga2FwcGEgPSAwLjU1MjI4NDgsXG4gICAgICAgICAgICAgICAgb3ggPSAodyAvIDIpICoga2FwcGEsIC8vIGNvbnRyb2wgcG9pbnQgb2Zmc2V0IGhvcml6b250YWxcbiAgICAgICAgICAgICAgICBveSA9IChoIC8gMikgKiBrYXBwYSwgLy8gY29udHJvbCBwb2ludCBvZmZzZXQgdmVydGljYWxcbiAgICAgICAgICAgICAgICB4ZSA9IHggKyB3LCAgICAgICAgICAgLy8geC1lbmRcbiAgICAgICAgICAgICAgICB5ZSA9IHkgKyBoLCAgICAgICAgICAgLy8geS1lbmRcbiAgICAgICAgICAgICAgICB4bSA9IHggKyB3IC8gMiwgICAgICAgLy8geC1taWRkbGVcbiAgICAgICAgICAgICAgICB5bSA9IHkgKyBoIC8gMjsgICAgICAgLy8geS1taWRkbGVcblxuICAgICAgICAgICAgY29udGV4dC5tb3ZlVG8oeCwgeW0pO1xuICAgICAgICAgICAgY29udGV4dC5iZXppZXJDdXJ2ZVRvKHgsIHltIC0gb3ksIHhtIC0gb3gsIHksIHhtLCB5KTtcbiAgICAgICAgICAgIGNvbnRleHQuYmV6aWVyQ3VydmVUbyh4bSArIG94LCB5LCB4ZSwgeW0gLSBveSwgeGUsIHltKTtcbiAgICAgICAgICAgIGNvbnRleHQuYmV6aWVyQ3VydmVUbyh4ZSwgeW0gKyBveSwgeG0gKyBveCwgeWUsIHhtLCB5ZSk7XG4gICAgICAgICAgICBjb250ZXh0LmJlemllckN1cnZlVG8oeG0gLSBveCwgeWUsIHgsIHltICsgb3ksIHgsIHltKTtcbiAgICAgICAgICAgIGNvbnRleHQuY2xvc2VQYXRoKCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoZGF0YS50eXBlID09PSBDT05TVC5TSEFQRVMuUlJFQylcbiAgICAgICAge1xuXG4gICAgICAgICAgICB2YXIgcnggPSBzaGFwZS54O1xuICAgICAgICAgICAgdmFyIHJ5ID0gc2hhcGUueTtcbiAgICAgICAgICAgIHZhciB3aWR0aCA9IHNoYXBlLndpZHRoO1xuICAgICAgICAgICAgdmFyIGhlaWdodCA9IHNoYXBlLmhlaWdodDtcbiAgICAgICAgICAgIHZhciByYWRpdXMgPSBzaGFwZS5yYWRpdXM7XG5cbiAgICAgICAgICAgIHZhciBtYXhSYWRpdXMgPSBNYXRoLm1pbih3aWR0aCwgaGVpZ2h0KSAvIDIgfCAwO1xuICAgICAgICAgICAgcmFkaXVzID0gcmFkaXVzID4gbWF4UmFkaXVzID8gbWF4UmFkaXVzIDogcmFkaXVzO1xuXG4gICAgICAgICAgICBjb250ZXh0Lm1vdmVUbyhyeCwgcnkgKyByYWRpdXMpO1xuICAgICAgICAgICAgY29udGV4dC5saW5lVG8ocngsIHJ5ICsgaGVpZ2h0IC0gcmFkaXVzKTtcbiAgICAgICAgICAgIGNvbnRleHQucXVhZHJhdGljQ3VydmVUbyhyeCwgcnkgKyBoZWlnaHQsIHJ4ICsgcmFkaXVzLCByeSArIGhlaWdodCk7XG4gICAgICAgICAgICBjb250ZXh0LmxpbmVUbyhyeCArIHdpZHRoIC0gcmFkaXVzLCByeSArIGhlaWdodCk7XG4gICAgICAgICAgICBjb250ZXh0LnF1YWRyYXRpY0N1cnZlVG8ocnggKyB3aWR0aCwgcnkgKyBoZWlnaHQsIHJ4ICsgd2lkdGgsIHJ5ICsgaGVpZ2h0IC0gcmFkaXVzKTtcbiAgICAgICAgICAgIGNvbnRleHQubGluZVRvKHJ4ICsgd2lkdGgsIHJ5ICsgcmFkaXVzKTtcbiAgICAgICAgICAgIGNvbnRleHQucXVhZHJhdGljQ3VydmVUbyhyeCArIHdpZHRoLCByeSwgcnggKyB3aWR0aCAtIHJhZGl1cywgcnkpO1xuICAgICAgICAgICAgY29udGV4dC5saW5lVG8ocnggKyByYWRpdXMsIHJ5KTtcbiAgICAgICAgICAgIGNvbnRleHQucXVhZHJhdGljQ3VydmVUbyhyeCwgcnksIHJ4LCByeSArIHJhZGl1cyk7XG4gICAgICAgICAgICBjb250ZXh0LmNsb3NlUGF0aCgpO1xuICAgICAgICB9XG4gICAgfVxufTtcblxuLypcbiAqIFVwZGF0ZXMgdGhlIHRpbnQgb2YgYSBncmFwaGljcyBvYmplY3RcbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIGdyYXBoaWNzIHtQSVhJLkdyYXBoaWNzfSB0aGUgZ3JhcGhpY3MgdGhhdCB3aWxsIGhhdmUgaXRzIHRpbnQgdXBkYXRlZFxuICpcbiAqL1xuQ2FudmFzR3JhcGhpY3MudXBkYXRlR3JhcGhpY3NUaW50ID0gZnVuY3Rpb24gKGdyYXBoaWNzKVxue1xuICAgIGlmIChncmFwaGljcy50aW50ID09PSAweEZGRkZGRiAmJiBncmFwaGljcy5fcHJldlRpbnQgPT09IGdyYXBoaWNzLnRpbnQpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIGdyYXBoaWNzLl9wcmV2VGludCA9IGdyYXBoaWNzLnRpbnQ7XG5cbiAgICB2YXIgdGludFIgPSAoZ3JhcGhpY3MudGludCA+PiAxNiAmIDB4RkYpIC8gMjU1O1xuICAgIHZhciB0aW50RyA9IChncmFwaGljcy50aW50ID4+IDggJiAweEZGKSAvIDI1NTtcbiAgICB2YXIgdGludEIgPSAoZ3JhcGhpY3MudGludCAmIDB4RkYpLyAyNTU7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGdyYXBoaWNzLmdyYXBoaWNzRGF0YS5sZW5ndGg7IGkrKylcbiAgICB7XG4gICAgICAgIHZhciBkYXRhID0gZ3JhcGhpY3MuZ3JhcGhpY3NEYXRhW2ldO1xuXG4gICAgICAgIHZhciBmaWxsQ29sb3IgPSBkYXRhLmZpbGxDb2xvciB8IDA7XG4gICAgICAgIHZhciBsaW5lQ29sb3IgPSBkYXRhLmxpbmVDb2xvciB8IDA7XG5cbiAgICAgICAgLypcbiAgICAgICAgdmFyIGNvbG9yUiA9IChmaWxsQ29sb3IgPj4gMTYgJiAweEZGKSAvIDI1NTtcbiAgICAgICAgdmFyIGNvbG9yRyA9IChmaWxsQ29sb3IgPj4gOCAmIDB4RkYpIC8gMjU1O1xuICAgICAgICB2YXIgY29sb3JCID0gKGZpbGxDb2xvciAmIDB4RkYpIC8gMjU1O1xuXG4gICAgICAgIGNvbG9yUiAqPSB0aW50UjtcbiAgICAgICAgY29sb3JHICo9IHRpbnRHO1xuICAgICAgICBjb2xvckIgKj0gdGludEI7XG5cbiAgICAgICAgZmlsbENvbG9yID0gKChjb2xvclIqMjU1IDw8IDE2KSArIChjb2xvckcqMjU1IDw8IDgpICsgY29sb3JCKjI1NSk7XG5cbiAgICAgICAgY29sb3JSID0gKGxpbmVDb2xvciA+PiAxNiAmIDB4RkYpIC8gMjU1O1xuICAgICAgICBjb2xvckcgPSAobGluZUNvbG9yID4+IDggJiAweEZGKSAvIDI1NTtcbiAgICAgICAgY29sb3JCID0gKGxpbmVDb2xvciAmIDB4RkYpIC8gMjU1O1xuXG4gICAgICAgIGNvbG9yUiAqPSB0aW50UjtcbiAgICAgICAgY29sb3JHICo9IHRpbnRHO1xuICAgICAgICBjb2xvckIgKj0gdGludEI7XG5cbiAgICAgICAgbGluZUNvbG9yID0gKChjb2xvclIqMjU1IDw8IDE2KSArIChjb2xvckcqMjU1IDw8IDgpICsgY29sb3JCKjI1NSk7XG4gICAgICAgICovXG5cbiAgICAgICAgLy8gc3VwZXIgaW5saW5lIGNvcyBpbSBhbiBvcHRpbWl6YXRpb24gTkFaSSA6KVxuICAgICAgICBkYXRhLl9maWxsVGludCA9ICgoKGZpbGxDb2xvciA+PiAxNiAmIDB4RkYpIC8gMjU1ICogdGludFIqMjU1IDw8IDE2KSArICgoZmlsbENvbG9yID4+IDggJiAweEZGKSAvIDI1NSAqIHRpbnRHKjI1NSA8PCA4KSArICAoZmlsbENvbG9yICYgMHhGRikgLyAyNTUgKiB0aW50QioyNTUpO1xuICAgICAgICBkYXRhLl9saW5lVGludCA9ICgoKGxpbmVDb2xvciA+PiAxNiAmIDB4RkYpIC8gMjU1ICogdGludFIqMjU1IDw8IDE2KSArICgobGluZUNvbG9yID4+IDggJiAweEZGKSAvIDI1NSAqIHRpbnRHKjI1NSA8PCA4KSArICAobGluZUNvbG9yICYgMHhGRikgLyAyNTUgKiB0aW50QioyNTUpO1xuXG4gICAgfVxufTtcblxuIiwidmFyIENhbnZhc0dyYXBoaWNzID0gcmVxdWlyZSgnLi9DYW52YXNHcmFwaGljcycpO1xuXG4vKipcbiAqIEEgc2V0IG9mIGZ1bmN0aW9ucyB1c2VkIHRvIGhhbmRsZSBtYXNraW5nLlxuICpcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqL1xuZnVuY3Rpb24gQ2FudmFzTWFza01hbmFnZXIoKVxue31cblxuQ2FudmFzTWFza01hbmFnZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gQ2FudmFzTWFza01hbmFnZXI7XG5tb2R1bGUuZXhwb3J0cyA9IENhbnZhc01hc2tNYW5hZ2VyO1xuXG4vKipcbiAqIFRoaXMgbWV0aG9kIGFkZHMgaXQgdG8gdGhlIGN1cnJlbnQgc3RhY2sgb2YgbWFza3MuXG4gKlxuICogQHBhcmFtIG1hc2tEYXRhIHtvYmplY3R9IHRoZSBtYXNrRGF0YSB0aGF0IHdpbGwgYmUgcHVzaGVkXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcnxQSVhJLkNhbnZhc1JlbmRlcmVyfSBUaGUgcmVuZGVyZXIgY29udGV4dCB0byB1c2UuXG4gKi9cbkNhbnZhc01hc2tNYW5hZ2VyLnByb3RvdHlwZS5wdXNoTWFzayA9IGZ1bmN0aW9uIChtYXNrRGF0YSwgcmVuZGVyZXIpXG57XG5cbiAgICByZW5kZXJlci5jb250ZXh0LnNhdmUoKTtcblxuICAgIHZhciBjYWNoZUFscGhhID0gbWFza0RhdGEuYWxwaGE7XG4gICAgdmFyIHRyYW5zZm9ybSA9IG1hc2tEYXRhLndvcmxkVHJhbnNmb3JtO1xuICAgIHZhciByZXNvbHV0aW9uID0gcmVuZGVyZXIucmVzb2x1dGlvbjtcblxuICAgIHJlbmRlcmVyLmNvbnRleHQuc2V0VHJhbnNmb3JtKFxuICAgICAgICB0cmFuc2Zvcm0uYSAqIHJlc29sdXRpb24sXG4gICAgICAgIHRyYW5zZm9ybS5iICogcmVzb2x1dGlvbixcbiAgICAgICAgdHJhbnNmb3JtLmMgKiByZXNvbHV0aW9uLFxuICAgICAgICB0cmFuc2Zvcm0uZCAqIHJlc29sdXRpb24sXG4gICAgICAgIHRyYW5zZm9ybS50eCAqIHJlc29sdXRpb24sXG4gICAgICAgIHRyYW5zZm9ybS50eSAqIHJlc29sdXRpb25cbiAgICApO1xuXG4gICAgLy9UT0RPIHN1cG9ydCBzcHJpdGUgYWxwaGEgbWFza3M/P1xuICAgIC8vbG90cyBvZiBlZmZvcnQgcmVxdWlyZWQuIElmIGRlbWFuZCBpcyBncmVhdCBlbm91Z2guLlxuICAgIGlmKCFtYXNrRGF0YS50ZXh0dXJlKVxuICAgIHtcbiAgICAgICAgQ2FudmFzR3JhcGhpY3MucmVuZGVyR3JhcGhpY3NNYXNrKG1hc2tEYXRhLCByZW5kZXJlci5jb250ZXh0KTtcbiAgICAgICAgcmVuZGVyZXIuY29udGV4dC5jbGlwKCk7XG4gICAgfVxuXG4gICAgbWFza0RhdGEud29ybGRBbHBoYSA9IGNhY2hlQWxwaGE7XG59O1xuXG4vKipcbiAqIFJlc3RvcmVzIHRoZSBjdXJyZW50IGRyYXdpbmcgY29udGV4dCB0byB0aGUgc3RhdGUgaXQgd2FzIGJlZm9yZSB0aGUgbWFzayB3YXMgYXBwbGllZC5cbiAqXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcnxQSVhJLkNhbnZhc1JlbmRlcmVyfSBUaGUgcmVuZGVyZXIgY29udGV4dCB0byB1c2UuXG4gKi9cbkNhbnZhc01hc2tNYW5hZ2VyLnByb3RvdHlwZS5wb3BNYXNrID0gZnVuY3Rpb24gKHJlbmRlcmVyKVxue1xuICAgIHJlbmRlcmVyLmNvbnRleHQucmVzdG9yZSgpO1xufTtcblxuQ2FudmFzTWFza01hbmFnZXIucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoKSB7fTtcbiIsInZhciB1dGlscyA9IHJlcXVpcmUoJy4uLy4uLy4uL3V0aWxzJyk7XG5cbi8qKlxuICogVXRpbGl0eSBtZXRob2RzIGZvciBTcHJpdGUvVGV4dHVyZSB0aW50aW5nLlxuICogQHN0YXRpY1xuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICovXG52YXIgQ2FudmFzVGludGVyID0ge307XG5tb2R1bGUuZXhwb3J0cyA9IENhbnZhc1RpbnRlcjtcblxuLyoqXG4gKiBCYXNpY2FsbHkgdGhpcyBtZXRob2QganVzdCBuZWVkcyBhIHNwcml0ZSBhbmQgYSBjb2xvciBhbmQgdGludHMgdGhlIHNwcml0ZSB3aXRoIHRoZSBnaXZlbiBjb2xvci5cbiAqXG4gKiBAcGFyYW0gc3ByaXRlIHtQSVhJLlNwcml0ZX0gdGhlIHNwcml0ZSB0byB0aW50XG4gKiBAcGFyYW0gY29sb3Ige251bWJlcn0gdGhlIGNvbG9yIHRvIHVzZSB0byB0aW50IHRoZSBzcHJpdGUgd2l0aFxuICogQHJldHVybiB7SFRNTENhbnZhc0VsZW1lbnR9IFRoZSB0aW50ZWQgY2FudmFzXG4gKi9cbkNhbnZhc1RpbnRlci5nZXRUaW50ZWRUZXh0dXJlID0gZnVuY3Rpb24gKHNwcml0ZSwgY29sb3IpXG57XG4gICAgdmFyIHRleHR1cmUgPSBzcHJpdGUudGV4dHVyZTtcblxuICAgIGNvbG9yID0gQ2FudmFzVGludGVyLnJvdW5kQ29sb3IoY29sb3IpO1xuXG4gICAgdmFyIHN0cmluZ0NvbG9yID0gJyMnICsgKCcwMDAwMCcgKyAoIGNvbG9yIHwgMCkudG9TdHJpbmcoMTYpKS5zdWJzdHIoLTYpO1xuXG4gICAgdGV4dHVyZS50aW50Q2FjaGUgPSB0ZXh0dXJlLnRpbnRDYWNoZSB8fCB7fTtcblxuICAgIGlmICh0ZXh0dXJlLnRpbnRDYWNoZVtzdHJpbmdDb2xvcl0pXG4gICAge1xuICAgICAgICByZXR1cm4gdGV4dHVyZS50aW50Q2FjaGVbc3RyaW5nQ29sb3JdO1xuICAgIH1cblxuICAgICAvLyBjbG9uZSB0ZXh0dXJlLi5cbiAgICB2YXIgY2FudmFzID0gQ2FudmFzVGludGVyLmNhbnZhcyB8fCBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdjYW52YXMnKTtcblxuICAgIC8vQ2FudmFzVGludGVyLnRpbnRXaXRoUGVyUGl4ZWwodGV4dHVyZSwgc3RyaW5nQ29sb3IsIGNhbnZhcyk7XG4gICAgQ2FudmFzVGludGVyLnRpbnRNZXRob2QodGV4dHVyZSwgY29sb3IsIGNhbnZhcyk7XG5cbiAgICBpZiAoQ2FudmFzVGludGVyLmNvbnZlcnRUaW50VG9JbWFnZSlcbiAgICB7XG4gICAgICAgIC8vIGlzIHRoaXMgYmV0dGVyP1xuICAgICAgICB2YXIgdGludEltYWdlID0gbmV3IEltYWdlKCk7XG4gICAgICAgIHRpbnRJbWFnZS5zcmMgPSBjYW52YXMudG9EYXRhVVJMKCk7XG5cbiAgICAgICAgdGV4dHVyZS50aW50Q2FjaGVbc3RyaW5nQ29sb3JdID0gdGludEltYWdlO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICB0ZXh0dXJlLnRpbnRDYWNoZVtzdHJpbmdDb2xvcl0gPSBjYW52YXM7XG4gICAgICAgIC8vIGlmIHdlIGFyZSBub3QgY29udmVydGluZyB0aGUgdGV4dHVyZSB0byBhbiBpbWFnZSB0aGVuIHdlIG5lZWQgdG8gbG9zZSB0aGUgcmVmZXJlbmNlIHRvIHRoZSBjYW52YXNcbiAgICAgICAgQ2FudmFzVGludGVyLmNhbnZhcyA9IG51bGw7XG4gICAgfVxuXG4gICAgcmV0dXJuIGNhbnZhcztcbn07XG5cbi8qKlxuICogVGludCBhIHRleHR1cmUgdXNpbmcgdGhlICdtdWx0aXBseScgb3BlcmF0aW9uLlxuICpcbiAqIEBwYXJhbSB0ZXh0dXJlIHtQSVhJLlRleHR1cmV9IHRoZSB0ZXh0dXJlIHRvIHRpbnRcbiAqIEBwYXJhbSBjb2xvciB7bnVtYmVyfSB0aGUgY29sb3IgdG8gdXNlIHRvIHRpbnQgdGhlIHNwcml0ZSB3aXRoXG4gKiBAcGFyYW0gY2FudmFzIHtIVE1MQ2FudmFzRWxlbWVudH0gdGhlIGN1cnJlbnQgY2FudmFzXG4gKi9cbkNhbnZhc1RpbnRlci50aW50V2l0aE11bHRpcGx5ID0gZnVuY3Rpb24gKHRleHR1cmUsIGNvbG9yLCBjYW52YXMpXG57XG4gICAgdmFyIGNvbnRleHQgPSBjYW52YXMuZ2V0Q29udGV4dCggJzJkJyApO1xuXG4gICAgdmFyIHJlc29sdXRpb24gPSB0ZXh0dXJlLmJhc2VUZXh0dXJlLnJlc29sdXRpb247XG5cbiAgICB2YXIgY3JvcCA9IHRleHR1cmUuY3JvcC5jbG9uZSgpO1xuICAgIGNyb3AueCAqPSByZXNvbHV0aW9uO1xuICAgIGNyb3AueSAqPSByZXNvbHV0aW9uO1xuICAgIGNyb3Aud2lkdGggKj0gcmVzb2x1dGlvbjtcbiAgICBjcm9wLmhlaWdodCAqPSByZXNvbHV0aW9uO1xuXG4gICAgY2FudmFzLndpZHRoID0gY3JvcC53aWR0aDtcbiAgICBjYW52YXMuaGVpZ2h0ID0gY3JvcC5oZWlnaHQ7XG5cbiAgICBjb250ZXh0LmZpbGxTdHlsZSA9ICcjJyArICgnMDAwMDAnICsgKCBjb2xvciB8IDApLnRvU3RyaW5nKDE2KSkuc3Vic3RyKC02KTtcblxuICAgIGNvbnRleHQuZmlsbFJlY3QoMCwgMCwgY3JvcC53aWR0aCwgY3JvcC5oZWlnaHQpO1xuXG4gICAgY29udGV4dC5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb24gPSAnbXVsdGlwbHknO1xuXG4gICAgY29udGV4dC5kcmF3SW1hZ2UoXG4gICAgICAgIHRleHR1cmUuYmFzZVRleHR1cmUuc291cmNlLFxuICAgICAgICBjcm9wLngsXG4gICAgICAgIGNyb3AueSxcbiAgICAgICAgY3JvcC53aWR0aCxcbiAgICAgICAgY3JvcC5oZWlnaHQsXG4gICAgICAgIDAsXG4gICAgICAgIDAsXG4gICAgICAgIGNyb3Aud2lkdGgsXG4gICAgICAgIGNyb3AuaGVpZ2h0XG4gICAgKTtcblxuICAgIGNvbnRleHQuZ2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uID0gJ2Rlc3RpbmF0aW9uLWF0b3AnO1xuXG4gICAgY29udGV4dC5kcmF3SW1hZ2UoXG4gICAgICAgIHRleHR1cmUuYmFzZVRleHR1cmUuc291cmNlLFxuICAgICAgICBjcm9wLngsXG4gICAgICAgIGNyb3AueSxcbiAgICAgICAgY3JvcC53aWR0aCxcbiAgICAgICAgY3JvcC5oZWlnaHQsXG4gICAgICAgIDAsXG4gICAgICAgIDAsXG4gICAgICAgIGNyb3Aud2lkdGgsXG4gICAgICAgIGNyb3AuaGVpZ2h0XG4gICAgKTtcbn07XG5cbi8qKlxuICogVGludCBhIHRleHR1cmUgdXNpbmcgdGhlICdvdmVybGF5JyBvcGVyYXRpb24uXG4gKlxuICogQHBhcmFtIHRleHR1cmUge1BJWEkuVGV4dHVyZX0gdGhlIHRleHR1cmUgdG8gdGludFxuICogQHBhcmFtIGNvbG9yIHtudW1iZXJ9IHRoZSBjb2xvciB0byB1c2UgdG8gdGludCB0aGUgc3ByaXRlIHdpdGhcbiAqIEBwYXJhbSBjYW52YXMge0hUTUxDYW52YXNFbGVtZW50fSB0aGUgY3VycmVudCBjYW52YXNcbiAqL1xuQ2FudmFzVGludGVyLnRpbnRXaXRoT3ZlcmxheSA9IGZ1bmN0aW9uICh0ZXh0dXJlLCBjb2xvciwgY2FudmFzKVxue1xuICAgIHZhciBjb250ZXh0ID0gY2FudmFzLmdldENvbnRleHQoICcyZCcgKTtcblxuICAgIHZhciByZXNvbHV0aW9uID0gdGV4dHVyZS5iYXNlVGV4dHVyZS5yZXNvbHV0aW9uO1xuXG4gICAgdmFyIGNyb3AgPSB0ZXh0dXJlLmNyb3AuY2xvbmUoKTtcbiAgICBjcm9wLnggKj0gcmVzb2x1dGlvbjtcbiAgICBjcm9wLnkgKj0gcmVzb2x1dGlvbjtcbiAgICBjcm9wLndpZHRoICo9IHJlc29sdXRpb247XG4gICAgY3JvcC5oZWlnaHQgKj0gcmVzb2x1dGlvbjtcblxuICAgIGNhbnZhcy53aWR0aCA9IGNyb3Aud2lkdGg7XG4gICAgY2FudmFzLmhlaWdodCA9IGNyb3AuaGVpZ2h0O1xuXG4gICAgY29udGV4dC5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb24gPSAnY29weSc7XG4gICAgY29udGV4dC5maWxsU3R5bGUgPSAnIycgKyAoJzAwMDAwJyArICggY29sb3IgfCAwKS50b1N0cmluZygxNikpLnN1YnN0cigtNik7XG4gICAgY29udGV4dC5maWxsUmVjdCgwLCAwLCBjcm9wLndpZHRoLCBjcm9wLmhlaWdodCk7XG5cbiAgICBjb250ZXh0Lmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbiA9ICdkZXN0aW5hdGlvbi1hdG9wJztcbiAgICBjb250ZXh0LmRyYXdJbWFnZShcbiAgICAgICAgdGV4dHVyZS5iYXNlVGV4dHVyZS5zb3VyY2UsXG4gICAgICAgIGNyb3AueCxcbiAgICAgICAgY3JvcC55LFxuICAgICAgICBjcm9wLndpZHRoLFxuICAgICAgICBjcm9wLmhlaWdodCxcbiAgICAgICAgMCxcbiAgICAgICAgMCxcbiAgICAgICAgY3JvcC53aWR0aCxcbiAgICAgICAgY3JvcC5oZWlnaHRcbiAgICApO1xuXG4gICAgLy8gY29udGV4dC5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb24gPSAnY29weSc7XG59O1xuXG4vKipcbiAqIFRpbnQgYSB0ZXh0dXJlIHBpeGVsIHBlciBwaXhlbC5cbiAqXG4gKiBAcGFyYW0gdGV4dHVyZSB7UElYSS5UZXh0dXJlfSB0aGUgdGV4dHVyZSB0byB0aW50XG4gKiBAcGFyYW0gY29sb3Ige251bWJlcn0gdGhlIGNvbG9yIHRvIHVzZSB0byB0aW50IHRoZSBzcHJpdGUgd2l0aFxuICogQHBhcmFtIGNhbnZhcyB7SFRNTENhbnZhc0VsZW1lbnR9IHRoZSBjdXJyZW50IGNhbnZhc1xuICovXG5DYW52YXNUaW50ZXIudGludFdpdGhQZXJQaXhlbCA9IGZ1bmN0aW9uICh0ZXh0dXJlLCBjb2xvciwgY2FudmFzKVxue1xuICAgIHZhciBjb250ZXh0ID0gY2FudmFzLmdldENvbnRleHQoICcyZCcgKTtcblxuICAgIHZhciByZXNvbHV0aW9uID0gdGV4dHVyZS5iYXNlVGV4dHVyZS5yZXNvbHV0aW9uO1xuXG4gICAgdmFyIGNyb3AgPSB0ZXh0dXJlLmNyb3AuY2xvbmUoKTtcbiAgICBjcm9wLnggKj0gcmVzb2x1dGlvbjtcbiAgICBjcm9wLnkgKj0gcmVzb2x1dGlvbjtcbiAgICBjcm9wLndpZHRoICo9IHJlc29sdXRpb247XG4gICAgY3JvcC5oZWlnaHQgKj0gcmVzb2x1dGlvbjtcblxuICAgIGNhbnZhcy53aWR0aCA9IGNyb3Aud2lkdGg7XG4gICAgY2FudmFzLmhlaWdodCA9IGNyb3AuaGVpZ2h0O1xuXG4gICAgY29udGV4dC5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb24gPSAnY29weSc7XG4gICAgY29udGV4dC5kcmF3SW1hZ2UoXG4gICAgICAgIHRleHR1cmUuYmFzZVRleHR1cmUuc291cmNlLFxuICAgICAgICBjcm9wLngsXG4gICAgICAgIGNyb3AueSxcbiAgICAgICAgY3JvcC53aWR0aCxcbiAgICAgICAgY3JvcC5oZWlnaHQsXG4gICAgICAgIDAsXG4gICAgICAgIDAsXG4gICAgICAgIGNyb3Aud2lkdGgsXG4gICAgICAgIGNyb3AuaGVpZ2h0XG4gICAgKTtcblxuICAgIHZhciByZ2JWYWx1ZXMgPSB1dGlscy5oZXgycmdiKGNvbG9yKTtcbiAgICB2YXIgciA9IHJnYlZhbHVlc1swXSwgZyA9IHJnYlZhbHVlc1sxXSwgYiA9IHJnYlZhbHVlc1syXTtcblxuICAgIHZhciBwaXhlbERhdGEgPSBjb250ZXh0LmdldEltYWdlRGF0YSgwLCAwLCBjcm9wLndpZHRoLCBjcm9wLmhlaWdodCk7XG5cbiAgICB2YXIgcGl4ZWxzID0gcGl4ZWxEYXRhLmRhdGE7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHBpeGVscy5sZW5ndGg7IGkgKz0gNClcbiAgICB7XG4gICAgICAgIHBpeGVsc1tpKzBdICo9IHI7XG4gICAgICAgIHBpeGVsc1tpKzFdICo9IGc7XG4gICAgICAgIHBpeGVsc1tpKzJdICo9IGI7XG4gICAgfVxuXG4gICAgY29udGV4dC5wdXRJbWFnZURhdGEocGl4ZWxEYXRhLCAwLCAwKTtcbn07XG5cbi8qKlxuICogUm91bmRzIHRoZSBzcGVjaWZpZWQgY29sb3IgYWNjb3JkaW5nIHRvIHRoZSBDYW52YXNUaW50ZXIuY2FjaGVTdGVwc1BlckNvbG9yQ2hhbm5lbC5cbiAqXG4gKiBAcGFyYW0gY29sb3Ige251bWJlcn0gdGhlIGNvbG9yIHRvIHJvdW5kLCBzaG91bGQgYmUgYSBoZXggY29sb3JcbiAqL1xuQ2FudmFzVGludGVyLnJvdW5kQ29sb3IgPSBmdW5jdGlvbiAoY29sb3IpXG57XG4gICAgdmFyIHN0ZXAgPSBDYW52YXNUaW50ZXIuY2FjaGVTdGVwc1BlckNvbG9yQ2hhbm5lbDtcblxuICAgIHZhciByZ2JWYWx1ZXMgPSB1dGlscy5oZXgycmdiKGNvbG9yKTtcblxuICAgIHJnYlZhbHVlc1swXSA9IE1hdGgubWluKDI1NSwgKHJnYlZhbHVlc1swXSAvIHN0ZXApICogc3RlcCk7XG4gICAgcmdiVmFsdWVzWzFdID0gTWF0aC5taW4oMjU1LCAocmdiVmFsdWVzWzFdIC8gc3RlcCkgKiBzdGVwKTtcbiAgICByZ2JWYWx1ZXNbMl0gPSBNYXRoLm1pbigyNTUsIChyZ2JWYWx1ZXNbMl0gLyBzdGVwKSAqIHN0ZXApO1xuXG4gICAgcmV0dXJuIHV0aWxzLnJnYjJoZXgocmdiVmFsdWVzKTtcbn07XG5cbi8qKlxuICogTnVtYmVyIG9mIHN0ZXBzIHdoaWNoIHdpbGwgYmUgdXNlZCBhcyBhIGNhcCB3aGVuIHJvdW5kaW5nIGNvbG9ycy5cbiAqXG4gKiBAbWVtYmVyXG4gKi9cbkNhbnZhc1RpbnRlci5jYWNoZVN0ZXBzUGVyQ29sb3JDaGFubmVsID0gODtcblxuLyoqXG4gKiBUaW50IGNhY2hlIGJvb2xlYW4gZmxhZy5cbiAqXG4gKiBAbWVtYmVyXG4gKi9cbkNhbnZhc1RpbnRlci5jb252ZXJ0VGludFRvSW1hZ2UgPSBmYWxzZTtcblxuLyoqXG4gKiBXaGV0aGVyIG9yIG5vdCB0aGUgQ2FudmFzIEJsZW5kTW9kZXMgYXJlIHN1cHBvcnRlZCwgY29uc2VxdWVudGx5IHRoZSBhYmlsaXR5IHRvIHRpbnQgdXNpbmcgdGhlIG11bHRpcGx5IG1ldGhvZC5cbiAqXG4gKiBAbWVtYmVyXG4gKi9cbkNhbnZhc1RpbnRlci5jYW5Vc2VNdWx0aXBseSA9IHV0aWxzLmNhblVzZU5ld0NhbnZhc0JsZW5kTW9kZXMoKTtcblxuLyoqXG4gKiBUaGUgdGludGluZyBtZXRob2QgdGhhdCB3aWxsIGJlIHVzZWQuXG4gKlxuICovXG5DYW52YXNUaW50ZXIudGludE1ldGhvZCA9IENhbnZhc1RpbnRlci5jYW5Vc2VNdWx0aXBseSA/IENhbnZhc1RpbnRlci50aW50V2l0aE11bHRpcGx5IDogIENhbnZhc1RpbnRlci50aW50V2l0aFBlclBpeGVsO1xuIiwidmFyIEdMVGV4dHVyZSA9IHJlcXVpcmUoJ3BpeGktZ2wtY29yZScpLkdMVGV4dHVyZSxcblx0dXRpbHMgPSByZXF1aXJlKCcuLi8uLi91dGlscycpO1xuXG4vKipcbiAqIEhlbHBlciBjbGFzcyB0byBjcmVhdGUgYSB3ZWJHTCBUZXh0dXJlXG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIGdsIHtXZWJHTFJlbmRlcmluZ0NvbnRleHR9XG4gKi9cblxudmFyIFRleHR1cmVNYW5hZ2VyID0gZnVuY3Rpb24oZ2wpXG57XG5cdHRoaXMuZ2wgPSBnbDtcblxuXHQvLyB0cmFjayB0ZXh0dXJlcyBpbiB0aGUgcmVuZGVyZXIgc28gd2UgY2FuIG5vIGxvbmdlciBsaXN0ZW4gdG8gdGhlbSBvbiBkZXN0cnVjdGlvbi5cblx0dGhpcy5fbWFuYWdlZFRleHR1cmVzID0gW107XG4gICAgdGhpcy5nbFRleHR1cmVzID0ge307XG5cbn1cblxuVGV4dHVyZU1hbmFnZXIucHJvdG90eXBlLmJpbmRUZXh0dXJlID0gZnVuY3Rpb24odGV4dHVyZSlcbntcblxufVxuXG5cblRleHR1cmVNYW5hZ2VyLnByb3RvdHlwZS5nZXRUZXh0dXJlID0gZnVuY3Rpb24odGV4dHVyZSlcbntcblxufVxuXG4vKipcbiAqIFVwZGF0ZXMgYW5kL29yIENyZWF0ZXMgYSBXZWJHTCB0ZXh0dXJlIGZvciB0aGUgcmVuZGVyZXIncyBjb250ZXh0LlxuICpcbiAqIEBwYXJhbSB0ZXh0dXJlIHtQSVhJLkJhc2VUZXh0dXJlfFBJWEkuVGV4dHVyZX0gdGhlIHRleHR1cmUgdG8gdXBkYXRlXG4gKi9cblRleHR1cmVNYW5hZ2VyLnByb3RvdHlwZS51cGRhdGVUZXh0dXJlID0gZnVuY3Rpb24odGV4dHVyZSlcbntcblx0dGV4dHVyZSA9IHRleHR1cmUuYmFzZVRleHR1cmUgfHwgdGV4dHVyZTtcblxuXHRpZiAoIXRleHR1cmUuaGFzTG9hZGVkKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIFxuICAgIHZhciBnbCA9IHRoaXMuZ2w7XG4gICAgdmFyIGdsVGV4dHVyZSA9IHRoaXMuZ2xUZXh0dXJlc1t0ZXh0dXJlLnVpZF0vL3RleHR1cmUuX2dsVGV4dHVyZXNbZ2wuaWRdO1xuXG4gICAgaWYgKCFnbFRleHR1cmUpXG4gICAge1xuICAgICAgICBnbFRleHR1cmUgPSBuZXcgR0xUZXh0dXJlKGdsKTtcbiAgICAgICAgZ2xUZXh0dXJlLnByZW11bHRpcGx5QWxwaGEgPSB0cnVlXG4gICAgICAgIHRleHR1cmUuX2dsVGV4dHVyZXNbZ2wuaWRdID0gZ2xUZXh0dXJlO1xuXG4gICAgICAgLy8gdGhpcy5nbFRleHR1cmVzW3RleHR1cmUudWlkXSA9IGdsVGV4dHVyZTtcblxuICAgICAgICB0ZXh0dXJlLm9uKCd1cGRhdGUnLCB0aGlzLnVwZGF0ZVRleHR1cmUsIHRoaXMpO1xuICAgICAgICB0ZXh0dXJlLm9uKCdkaXNwb3NlJywgdGhpcy5kZXN0cm95VGV4dHVyZSwgdGhpcyk7XG4gICAgICAgIFxuICAgICAgICB0aGlzLl9tYW5hZ2VkVGV4dHVyZXMucHVzaCh0ZXh0dXJlKTtcbiAgICB9XG5cbiAgICBnbFRleHR1cmUudXBsb2FkKHRleHR1cmUuc291cmNlKTtcbiAgICBcbiAgICAvL1RPRE8gY2hlY2sgaXMgcG93ZXIgb2YgdHdvLi5cbiAgICBnbFRleHR1cmUuZW5hYmxlV3JhcENsYW1wKCk7XG5cblxuICAgIC8vIFRPRE8gY2hlY2sgZm9yIHNjYWxpbmcgdHlwZVxuICAgIGdsVGV4dHVyZS5lbmFibGVMaW5lYXJTY2FsaW5nKCk7XG5cbiAgICByZXR1cm4gIHRleHR1cmUuX2dsVGV4dHVyZXNbZ2wuaWRdO1xufVxuXG4vKipcbiAqIERlbGV0ZXMgdGhlIHRleHR1cmUgZnJvbSBXZWJHTFxuICpcbiAqIEBwYXJhbSB0ZXh0dXJlIHtQSVhJLkJhc2VUZXh0dXJlfFBJWEkuVGV4dHVyZX0gdGhlIHRleHR1cmUgdG8gZGVzdHJveVxuICovXG5UZXh0dXJlTWFuYWdlci5wcm90b3R5cGUuZGVzdHJveVRleHR1cmUgPSBmdW5jdGlvbih0ZXh0dXJlLCBfc2tpcFJlbW92ZSlcbntcblx0dGV4dHVyZSA9IHRleHR1cmUuYmFzZVRleHR1cmUgfHwgdGV4dHVyZTtcblxuICAgIGlmICghdGV4dHVyZS5oYXNMb2FkZWQpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHRleHR1cmUuX2dsVGV4dHVyZXNbdGhpcy5nbC5pZF0pXG4gICAge1xuICAgICAgICB0ZXh0dXJlLl9nbFRleHR1cmVzW3RoaXMuZ2wuaWRdLmRlc3Ryb3koKTtcbiAgICAgICAgdGV4dHVyZS5vZmYoJ3VwZGF0ZScsIHRoaXMudXBkYXRlVGV4dHVyZSwgdGhpcyk7XG4gICAgICAgIHRleHR1cmUub2ZmKCdkaXNwb3NlJywgdGhpcy5kZXN0cm95VGV4dHVyZSwgdGhpcyk7XG5cblxuICAgICAgICBkZWxldGUgdGV4dHVyZS5fZ2xUZXh0dXJlc1t0aGlzLmdsLmlkXTtcblxuICAgICAgICBpZiAoIV9za2lwUmVtb3ZlKVxuICAgICAgICB7XG4gICAgICAgICAgICB2YXIgaSA9IHRoaXMuX21hbmFnZWRUZXh0dXJlcy5pbmRleE9mKHRleHR1cmUpO1xuICAgICAgICAgICAgaWYgKGkgIT09IC0xKSB7XG4gICAgICAgICAgICAgICAgdXRpbHMucmVtb3ZlSXRlbXModGhpcy5fbWFuYWdlZFRleHR1cmVzLCBpLCAxKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn1cblxuVGV4dHVyZU1hbmFnZXIucHJvdG90eXBlLnJlbW92ZUFsbCA9IGZ1bmN0aW9uKClcbntcblx0Ly8gZW1wdHkgYWxsIHRoZSBvbGQgZ2wgdGV4dHVyZXMgYXMgdGhleSBhcmUgdXNlbGVzcyBub3dcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuX21hbmFnZWRUZXh0dXJlcy5sZW5ndGg7ICsraSlcbiAgICB7XG4gICAgICAgIHZhciB0ZXh0dXJlID0gdGhpcy5fbWFuYWdlZFRleHR1cmVzW2ldO1xuICAgICAgICBpZiAodGV4dHVyZS5fZ2xUZXh0dXJlc1t0aGlzLmdsLmlkXSlcbiAgICAgICAge1xuICAgICAgICAgICAgZGVsZXRlIHRleHR1cmUuX2dsVGV4dHVyZXNbdGhpcy5nbC5pZF07XG4gICAgICAgIH1cbiAgICB9XG59XG5cblRleHR1cmVNYW5hZ2VyLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24oKVxue1xuICAgIC8vIGRlc3Ryb3kgbWFuYWdlZCB0ZXh0dXJlc1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5fbWFuYWdlZFRleHR1cmVzLmxlbmd0aDsgKytpKVxuICAgIHtcbiAgICAgICAgdmFyIHRleHR1cmUgPSB0aGlzLl9tYW5hZ2VkVGV4dHVyZXNbaV07XG4gICAgICAgIHRoaXMuZGVzdHJveVRleHR1cmUodGV4dHVyZSwgdHJ1ZSk7XG4gICAgICAgIHRleHR1cmUub2ZmKCd1cGRhdGUnLCB0aGlzLnVwZGF0ZVRleHR1cmUsIHRoaXMpO1xuICAgICAgICB0ZXh0dXJlLm9mZignZGlzcG9zZScsIHRoaXMuZGVzdHJveVRleHR1cmUsIHRoaXMpO1xuICAgIH1cblxuICAgIHRoaXMuX21hbmFnZWRUZXh0dXJlcyA9IG51bGw7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gVGV4dHVyZU1hbmFnZXI7XG5cbiIsInZhciBTeXN0ZW1SZW5kZXJlciA9IHJlcXVpcmUoJy4uL1N5c3RlbVJlbmRlcmVyJyksXG4gICAgU2hhZGVyTWFuYWdlciA9IHJlcXVpcmUoJy4vbWFuYWdlcnMvU2hhZGVyTWFuYWdlcicpLFxuICAgIE1hc2tNYW5hZ2VyID0gcmVxdWlyZSgnLi9tYW5hZ2Vycy9NYXNrTWFuYWdlcicpLFxuICAgIFN0ZW5jaWxNYW5hZ2VyID0gcmVxdWlyZSgnLi9tYW5hZ2Vycy9TdGVuY2lsTWFuYWdlcicpLFxuICAgIEZpbHRlck1hbmFnZXIgPSByZXF1aXJlKCcuL21hbmFnZXJzL0ZpbHRlck1hbmFnZXInKSxcbiAgICBCbGVuZE1vZGVNYW5hZ2VyID0gcmVxdWlyZSgnLi9tYW5hZ2Vycy9CbGVuZE1vZGVNYW5hZ2VyJyksXG4gICAgUmVuZGVyVGFyZ2V0ID0gcmVxdWlyZSgnLi91dGlscy9SZW5kZXJUYXJnZXQnKSxcbiAgICBPYmplY3RSZW5kZXJlciA9IHJlcXVpcmUoJy4vdXRpbHMvT2JqZWN0UmVuZGVyZXInKSxcbiAgICBGWEFBRmlsdGVyID0gcmVxdWlyZSgnLi9maWx0ZXJzL0ZYQUFGaWx0ZXInKSxcbiAgICBUZXh0dXJlTWFuYWdlciA9IHJlcXVpcmUoJy4vVGV4dHVyZU1hbmFnZXInKSxcbiAgICBjcmVhdGVDb250ZXh0ID0gcmVxdWlyZSgncGl4aS1nbC1jb3JlJykuY3JlYXRlQ29udGV4dCxcbiAgICBtYXBXZWJHTEJsZW5kTW9kZXNUb1BpeGkgPSByZXF1aXJlKCcuL3V0aWxzL21hcFdlYkdMQmxlbmRNb2Rlc1RvUGl4aScpLFxuICAgIG1hcFdlYkdMRHJhd01vZGVzVG9QaXhpID0gcmVxdWlyZSgnLi91dGlscy9tYXBXZWJHTERyYXdNb2Rlc1RvUGl4aScpLFxuICAgIHV0aWxzID0gcmVxdWlyZSgnLi4vLi4vdXRpbHMnKSxcbiAgICBDT05TVCA9IHJlcXVpcmUoJy4uLy4uL2NvbnN0Jyk7XG5cbi8qKlxuICogVGhlIFdlYkdMUmVuZGVyZXIgZHJhd3MgdGhlIHNjZW5lIGFuZCBhbGwgaXRzIGNvbnRlbnQgb250byBhIHdlYkdMIGVuYWJsZWQgY2FudmFzLiBUaGlzIHJlbmRlcmVyXG4gKiBzaG91bGQgYmUgdXNlZCBmb3IgYnJvd3NlcnMgdGhhdCBzdXBwb3J0IHdlYkdMLiBUaGlzIFJlbmRlciB3b3JrcyBieSBhdXRvbWF0aWNhbGx5IG1hbmFnaW5nIHdlYkdMQmF0Y2hzLlxuICogU28gbm8gbmVlZCBmb3IgU3ByaXRlIEJhdGNoZXMgb3IgU3ByaXRlIENsb3Vkcy5cbiAqIERvbid0IGZvcmdldCB0byBhZGQgdGhlIHZpZXcgdG8geW91ciBET00gb3IgeW91IHdpbGwgbm90IHNlZSBhbnl0aGluZyA6KVxuICpcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqIEBleHRlbmRzIFBJWEkuU3lzdGVtUmVuZGVyZXJcbiAqIEBwYXJhbSBbd2lkdGg9MF0ge251bWJlcn0gdGhlIHdpZHRoIG9mIHRoZSBjYW52YXMgdmlld1xuICogQHBhcmFtIFtoZWlnaHQ9MF0ge251bWJlcn0gdGhlIGhlaWdodCBvZiB0aGUgY2FudmFzIHZpZXdcbiAqIEBwYXJhbSBbb3B0aW9uc10ge29iamVjdH0gVGhlIG9wdGlvbmFsIHJlbmRlcmVyIHBhcmFtZXRlcnNcbiAqIEBwYXJhbSBbb3B0aW9ucy52aWV3XSB7SFRNTENhbnZhc0VsZW1lbnR9IHRoZSBjYW52YXMgdG8gdXNlIGFzIGEgdmlldywgb3B0aW9uYWxcbiAqIEBwYXJhbSBbb3B0aW9ucy50cmFuc3BhcmVudD1mYWxzZV0ge2Jvb2xlYW59IElmIHRoZSByZW5kZXIgdmlldyBpcyB0cmFuc3BhcmVudCwgZGVmYXVsdCBmYWxzZVxuICogQHBhcmFtIFtvcHRpb25zLmF1dG9SZXNpemU9ZmFsc2VdIHtib29sZWFufSBJZiB0aGUgcmVuZGVyIHZpZXcgaXMgYXV0b21hdGljYWxseSByZXNpemVkLCBkZWZhdWx0IGZhbHNlXG4gKiBAcGFyYW0gW29wdGlvbnMuYW50aWFsaWFzPWZhbHNlXSB7Ym9vbGVhbn0gc2V0cyBhbnRpYWxpYXMuIElmIG5vdCBhdmFpbGFibGUgbmF0aXZlbHkgdGhlbiBGWEFBIGFudGlhbGlhc2luZyBpcyB1c2VkXG4gKiBAcGFyYW0gW29wdGlvbnMuZm9yY2VGWEFBPWZhbHNlXSB7Ym9vbGVhbn0gZm9yY2VzIEZYQUEgYW50aWFsaWFzaW5nIHRvIGJlIHVzZWQgb3ZlciBuYXRpdmUuIEZYQUEgaXMgZmFzdGVyLCBidXQgbWF5IG5vdCBhbHdheXMgbG9vayBhcyBncmVhdFxuICogQHBhcmFtIFtvcHRpb25zLnJlc29sdXRpb249MV0ge251bWJlcn0gdGhlIHJlc29sdXRpb24gb2YgdGhlIHJlbmRlcmVyIHJldGluYSB3b3VsZCBiZSAyXG4gKiBAcGFyYW0gW29wdGlvbnMuY2xlYXJCZWZvcmVSZW5kZXI9dHJ1ZV0ge2Jvb2xlYW59IFRoaXMgc2V0cyBpZiB0aGUgQ2FudmFzUmVuZGVyZXIgd2lsbCBjbGVhciB0aGUgY2FudmFzIG9yXG4gKiAgICAgIG5vdCBiZWZvcmUgdGhlIG5ldyByZW5kZXIgcGFzcy4gSWYgeW91IHdpc2ggdG8gc2V0IHRoaXMgdG8gZmFsc2UsIHlvdSAqbXVzdCogc2V0IHByZXNlcnZlRHJhd2luZ0J1ZmZlciB0byBgdHJ1ZWAuXG4gKiBAcGFyYW0gW29wdGlvbnMucHJlc2VydmVEcmF3aW5nQnVmZmVyPWZhbHNlXSB7Ym9vbGVhbn0gZW5hYmxlcyBkcmF3aW5nIGJ1ZmZlciBwcmVzZXJ2YXRpb24sIGVuYWJsZSB0aGlzIGlmXG4gKiAgICAgIHlvdSBuZWVkIHRvIGNhbGwgdG9EYXRhVXJsIG9uIHRoZSB3ZWJnbCBjb250ZXh0LlxuICogQHBhcmFtIFtvcHRpb25zLnJvdW5kUGl4ZWxzPWZhbHNlXSB7Ym9vbGVhbn0gSWYgdHJ1ZSBQaXhpIHdpbGwgTWF0aC5mbG9vcigpIHgveSB2YWx1ZXMgd2hlbiByZW5kZXJpbmcsIHN0b3BwaW5nIHBpeGVsIGludGVycG9sYXRpb24uXG4gKi9cbmZ1bmN0aW9uIFdlYkdMUmVuZGVyZXIod2lkdGgsIGhlaWdodCwgb3B0aW9ucylcbntcbiAgICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcblxuICAgIFN5c3RlbVJlbmRlcmVyLmNhbGwodGhpcywgJ1dlYkdMJywgd2lkdGgsIGhlaWdodCwgb3B0aW9ucyk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgdHlwZSBvZiB0aGlzIHJlbmRlcmVyIGFzIGEgc3RhbmRhcmRpc2VkIGNvbnN0XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9Ly9cbiAgICAgKlxuICAgICAqL1xuICAgIHRoaXMudHlwZSA9IENPTlNULlJFTkRFUkVSX1RZUEUuV0VCR0w7XG5cbiAgICB0aGlzLmhhbmRsZUNvbnRleHRMb3N0ID0gdGhpcy5oYW5kbGVDb250ZXh0TG9zdC5iaW5kKHRoaXMpO1xuICAgIHRoaXMuaGFuZGxlQ29udGV4dFJlc3RvcmVkID0gdGhpcy5oYW5kbGVDb250ZXh0UmVzdG9yZWQuYmluZCh0aGlzKTtcblxuICAgIHRoaXMudmlldy5hZGRFdmVudExpc3RlbmVyKCd3ZWJnbGNvbnRleHRsb3N0JywgdGhpcy5oYW5kbGVDb250ZXh0TG9zdCwgZmFsc2UpO1xuICAgIHRoaXMudmlldy5hZGRFdmVudExpc3RlbmVyKCd3ZWJnbGNvbnRleHRyZXN0b3JlZCcsIHRoaXMuaGFuZGxlQ29udGV4dFJlc3RvcmVkLCBmYWxzZSk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgb3B0aW9ucyBwYXNzZWQgaW4gdG8gY3JlYXRlIGEgbmV3IHdlYmdsIGNvbnRleHQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtvYmplY3R9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9jb250ZXh0T3B0aW9ucyA9IHtcbiAgICAgICAgYWxwaGE6IHRoaXMudHJhbnNwYXJlbnQsXG4gICAgICAgIGFudGlhbGlhczogb3B0aW9ucy5hbnRpYWxpYXMsXG4gICAgICAgIHByZW11bHRpcGxpZWRBbHBoYTogdGhpcy50cmFuc3BhcmVudCAmJiB0aGlzLnRyYW5zcGFyZW50ICE9PSAnbm90TXVsdGlwbGllZCcsXG4gICAgICAgIHN0ZW5jaWw6IHRydWUsXG4gICAgICAgIHByZXNlcnZlRHJhd2luZ0J1ZmZlcjogb3B0aW9ucy5wcmVzZXJ2ZURyYXdpbmdCdWZmZXJcbiAgICB9O1xuXG4gICAgdGhpcy5fYmFja2dyb3VuZENvbG9yUmdiYVszXSA9IHRoaXMudHJhbnNwYXJlbnQgPyAwIDogMTtcblxuICAgIC8qKlxuICAgICAqIERlYWxzIHdpdGggbWFuYWdpbmcgdGhlIHNoYWRlciBwcm9ncmFtcyBhbmQgdGhlaXIgYXR0cmlicy5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuU2hhZGVyTWFuYWdlcn1cbiAgICAgKi9cbiAgICB0aGlzLnNoYWRlck1hbmFnZXIgPSBuZXcgU2hhZGVyTWFuYWdlcih0aGlzKTtcblxuICAgIC8qKlxuICAgICAqIE1hbmFnZXMgdGhlIG1hc2tzIHVzaW5nIHRoZSBzdGVuY2lsIGJ1ZmZlci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuTWFza01hbmFnZXJ9XG4gICAgICovXG4gICAgdGhpcy5tYXNrTWFuYWdlciA9IG5ldyBNYXNrTWFuYWdlcih0aGlzKTtcblxuICAgIC8qKlxuICAgICAqIE1hbmFnZXMgdGhlIHN0ZW5jaWwgYnVmZmVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5TdGVuY2lsTWFuYWdlcn1cbiAgICAgKi9cbiAgICB0aGlzLnN0ZW5jaWxNYW5hZ2VyID0gbmV3IFN0ZW5jaWxNYW5hZ2VyKHRoaXMpO1xuXG4gICAgLyoqXG4gICAgICogTWFuYWdlcyB0aGUgZmlsdGVycy5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuRmlsdGVyTWFuYWdlcn1cbiAgICAgKi9cbiAgICB0aGlzLmZpbHRlck1hbmFnZXIgPSBuZXcgRmlsdGVyTWFuYWdlcih0aGlzKTtcblxuICAgIC8qKlxuICAgICAqIE1hbmFnZXMgdGhlIGJsZW5kTW9kZXNcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuQmxlbmRNb2RlTWFuYWdlcn1cbiAgICAgKi9cbiAgICB0aGlzLmJsZW5kTW9kZU1hbmFnZXIgPSBuZXcgQmxlbmRNb2RlTWFuYWdlcih0aGlzKTtcblxuICAgIFxuICAgIC8qKlxuICAgICAqIFRoZSBjdXJyZW50bHkgYWN0aXZlIE9iamVjdFJlbmRlcmVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5PYmplY3RSZW5kZXJlcn1cbiAgICAgKi9cbiAgICB0aGlzLmN1cnJlbnRSZW5kZXJlciA9IG5ldyBPYmplY3RSZW5kZXJlcih0aGlzKTtcblxuICAgIHRoaXMuaW5pdFBsdWdpbnMoKTtcblxuICAgIC8vIGluaXRpYWxpemUgdGhlIGNvbnRleHQgc28gaXQgaXMgcmVhZHkgZm9yIHRoZSBtYW5hZ2Vycy5cbiAgICB0aGlzLmdsID0gY3JlYXRlQ29udGV4dCh0aGlzLnZpZXcsIHRoaXMuX2NvbnRleHRPcHRpb25zKTtcblxuICAgIHRoaXMuX2luaXRDb250ZXh0KCk7XG5cbiAgICAvLyBtYXAgc29tZSB3ZWJHTCBibGVuZCBhbmQgZHJhd21vZGVzLi5cbiAgICB0aGlzLmJsZW5kTW9kZXMgPSBtYXBXZWJHTEJsZW5kTW9kZXNUb1BpeGkoZ2wpO1xuICAgIHRoaXMuZHJhd01vZGVzID0gbWFwV2ViR0xEcmF3TW9kZXNUb1BpeGkoZ2wpXG5cbiAgICB0aGlzLl9hY3RpdmVTaGFkZXIgPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogSG9sZHMgdGhlIGN1cnJlbnQgcmVuZGVyIHRhcmdldFxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5SZW5kZXJUYXJnZXR9XG4gICAgICovXG4gICAgdGhpcy5fYWN0aXZlUmVuZGVyVGFyZ2V0ID0gbnVsbDtcbiAgICB0aGlzLl9hY3RpdmVUZXh0dXJlTG9jYXRpb24gPSBudWxsO1xuICAgIHRoaXMuX2FjdGl2ZVRleHR1cmUgPSBudWxsO1xufVxuXG4vLyBjb25zdHJ1Y3RvclxuV2ViR0xSZW5kZXJlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFN5c3RlbVJlbmRlcmVyLnByb3RvdHlwZSk7XG5XZWJHTFJlbmRlcmVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFdlYkdMUmVuZGVyZXI7XG5tb2R1bGUuZXhwb3J0cyA9IFdlYkdMUmVuZGVyZXI7XG51dGlscy5wbHVnaW5UYXJnZXQubWl4aW4oV2ViR0xSZW5kZXJlcik7XG5cbi8qKlxuICogQ3JlYXRlcyB0aGUgV2ViR0wgY29udGV4dFxuICpcbiAqIEBwcml2YXRlXG4gKi9cbldlYkdMUmVuZGVyZXIucHJvdG90eXBlLl9pbml0Q29udGV4dCA9IGZ1bmN0aW9uICgpXG57XG4gICAgdmFyIGdsID0gdGhpcy5nbDtcblxuICAgIC8vIGNyZWF0ZSBhIHRleHR1cmUgbWFuYWdlci4uLlxuICAgIHRoaXMudGV4dHVyZU1hbmFnZXIgPSBuZXcgVGV4dHVyZU1hbmFnZXIoZ2wpO1xuXG4gICAgLy8gc2V0IHVwIHRoZSBkZWZhdWx0IHBpeGkgc2V0dGluZ3MuLlxuICAgIGdsLmRpc2FibGUoZ2wuREVQVEhfVEVTVCk7XG4gICAgZ2wuZGlzYWJsZShnbC5DVUxMX0ZBQ0UpO1xuICAgIGdsLmVuYWJsZShnbC5CTEVORCk7XG5cblxuICAgIHRoaXMucm9vdFJlbmRlclRhcmdldCA9IG5ldyBSZW5kZXJUYXJnZXQoZ2wsIHRoaXMud2lkdGgsIHRoaXMuaGVpZ2h0LCBudWxsLCB0aGlzLnJlc29sdXRpb24sIHRydWUpO1xuICAgIHRoaXMucm9vdFJlbmRlclRhcmdldC5jbGVhckNvbG9yID0gdGhpcy5fYmFja2dyb3VuZENvbG9yUmdiYTtcbiAgICBcbiAgICB0aGlzLmJpbmRSZW5kZXJUYXJnZXQodGhpcy5yb290UmVuZGVyVGFyZ2V0KTtcblxuICAgIHRoaXMuZW1pdCgnY29udGV4dCcsIGdsKTtcblxuICAgIC8vIHNldHVwIHRoZSB3aWR0aC9oZWlnaHQgcHJvcGVydGllcyBhbmQgZ2wgdmlld3BvcnRcbiAgICB0aGlzLnJlc2l6ZSh0aGlzLndpZHRoLCB0aGlzLmhlaWdodCk7ICAgIFxufTtcblxuLyoqXG4gKiBSZW5kZXJzIHRoZSBvYmplY3QgdG8gaXRzIHdlYkdMIHZpZXdcbiAqXG4gKiBAcGFyYW0gb2JqZWN0IHtQSVhJLkRpc3BsYXlPYmplY3R9IHRoZSBvYmplY3QgdG8gYmUgcmVuZGVyZWRcbiAqL1xuV2ViR0xSZW5kZXJlci5wcm90b3R5cGUucmVuZGVyID0gZnVuY3Rpb24gKGRpc3BsYXlPYmplY3QpXG57XG4gICAgdGhpcy5lbWl0KCdwcmVyZW5kZXInKTtcblxuICAgIC8vIG5vIHBvaW50IHJlbmRlcmluZyBpZiBvdXIgY29udGV4dCBoYXMgYmVlbiBibG93biB1cCFcbiAgICBpZiAodGhpcy5nbC5pc0NvbnRleHRMb3N0KCkpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5fbGFzdE9iamVjdFJlbmRlcmVkID0gZGlzcGxheU9iamVjdDtcblxuICAgIHZhciBjYWNoZVBhcmVudCA9IGRpc3BsYXlPYmplY3QucGFyZW50O1xuICAgIGRpc3BsYXlPYmplY3QucGFyZW50ID0gdGhpcy5fdGVtcERpc3BsYXlPYmplY3RQYXJlbnQ7XG4gICAgLy8gdXBkYXRlIHRoZSBzY2VuZSBncmFwaFxuICAgIGRpc3BsYXlPYmplY3QudXBkYXRlVHJhbnNmb3JtKCk7XG4gICAgZGlzcGxheU9iamVjdC5wYXJlbnQgPSBjYWNoZVBhcmVudDtcblxuICAgIHRoaXMucmVuZGVyRGlzcGxheU9iamVjdChkaXNwbGF5T2JqZWN0LCB0aGlzLnJvb3RSZW5kZXJUYXJnZXQsIHRoaXMuY2xlYXJCZWZvcmVSZW5kZXIpOy8vdGhpcy5wcm9qZWN0aW9uKTtcblxuICAgIHRoaXMuZW1pdCgncG9zdHJlbmRlcicpO1xufTtcblxuLyoqXG4gKiBSZW5kZXJzIGEgRGlzcGxheSBPYmplY3QuXG4gKlxuICogQHBhcmFtIGRpc3BsYXlPYmplY3Qge1BJWEkuRGlzcGxheU9iamVjdH0gVGhlIERpc3BsYXlPYmplY3QgdG8gcmVuZGVyXG4gKiBAcGFyYW0gcmVuZGVyVGFyZ2V0IHtQSVhJLlJlbmRlclRhcmdldH0gVGhlIHJlbmRlciB0YXJnZXQgdG8gdXNlIHRvIHJlbmRlciB0aGlzIGRpc3BsYXkgb2JqZWN0XG4gKlxuICovXG5XZWJHTFJlbmRlcmVyLnByb3RvdHlwZS5yZW5kZXJEaXNwbGF5T2JqZWN0ID0gZnVuY3Rpb24gKGRpc3BsYXlPYmplY3QsIHJlbmRlclRhcmdldCwgY2xlYXIpLy9wcm9qZWN0aW9uLCBidWZmZXIpXG57XG4gICAgdGhpcy5iaW5kUmVuZGVyVGFyZ2V0KHJlbmRlclRhcmdldCk7XG5cbiAgICBpZihjbGVhcilcbiAgICB7XG4gICAgICAgIHJlbmRlclRhcmdldC5jbGVhcigpO1xuICAgIH1cblxuICAgIC8vIHN0YXJ0IHRoZSBmaWx0ZXIgbWFuYWdlclxuICAgIHRoaXMuZmlsdGVyTWFuYWdlci5zZXRGaWx0ZXJTdGFjayggcmVuZGVyVGFyZ2V0LmZpbHRlclN0YWNrICk7XG5cbiAgICAvLyByZW5kZXIgdGhlIHNjZW5lIVxuICAgIGRpc3BsYXlPYmplY3QucmVuZGVyV2ViR0wodGhpcyk7XG5cbiAgICAvLyBmaW5pc2ggdGhlIGN1cnJlbnQgcmVuZGVyZXIuLlxuICAgIHRoaXMuY3VycmVudFJlbmRlcmVyLmZsdXNoKCk7XG59O1xuXG4vKipcbiAqIENoYW5nZXMgdGhlIGN1cnJlbnQgcmVuZGVyZXIgdG8gdGhlIG9uZSBnaXZlbiBpbiBwYXJhbWV0ZXJcbiAqXG4gKiBAcGFyYW0gb2JqZWN0UmVuZGVyZXIge1BJWEkuT2JqZWN0UmVuZGVyZXJ9IFRoZSBvYmplY3QgcmVuZGVyZXIgdG8gdXNlLlxuICovXG5XZWJHTFJlbmRlcmVyLnByb3RvdHlwZS5zZXRPYmplY3RSZW5kZXJlciA9IGZ1bmN0aW9uIChvYmplY3RSZW5kZXJlcilcbntcbiAgICBpZiAodGhpcy5jdXJyZW50UmVuZGVyZXIgPT09IG9iamVjdFJlbmRlcmVyKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuY3VycmVudFJlbmRlcmVyLnN0b3AoKTtcbiAgICB0aGlzLmN1cnJlbnRSZW5kZXJlciA9IG9iamVjdFJlbmRlcmVyO1xuICAgIHRoaXMuY3VycmVudFJlbmRlcmVyLnN0YXJ0KCk7XG59O1xuXG4vKipcbiAqIFJlc2l6ZXMgdGhlIHdlYkdMIHZpZXcgdG8gdGhlIHNwZWNpZmllZCB3aWR0aCBhbmQgaGVpZ2h0LlxuICpcbiAqIEBwYXJhbSB3aWR0aCB7bnVtYmVyfSB0aGUgbmV3IHdpZHRoIG9mIHRoZSB3ZWJHTCB2aWV3XG4gKiBAcGFyYW0gaGVpZ2h0IHtudW1iZXJ9IHRoZSBuZXcgaGVpZ2h0IG9mIHRoZSB3ZWJHTCB2aWV3XG4gKi9cbldlYkdMUmVuZGVyZXIucHJvdG90eXBlLnJlc2l6ZSA9IGZ1bmN0aW9uICh3aWR0aCwgaGVpZ2h0KVxue1xuICAgIFN5c3RlbVJlbmRlcmVyLnByb3RvdHlwZS5yZXNpemUuY2FsbCh0aGlzLCB3aWR0aCwgaGVpZ2h0KTtcblxuICAgIHRoaXMuZmlsdGVyTWFuYWdlci5yZXNpemUod2lkdGgsIGhlaWdodCk7XG4gICAgdGhpcy5yb290UmVuZGVyVGFyZ2V0LnJlc2l6ZSh3aWR0aCwgaGVpZ2h0KTtcblxuICAgIGlmKHRoaXMuY3VycmVudFJlbmRlclRhcmdldCA9PT0gdGhpcy5yZW5kZXJUYXJnZXQpXG4gICAge1xuICAgICAgICB0aGlzLnJvb3RSZW5kZXJUYXJnZXQuYWN0aXZhdGUoKTtcbiAgICB9XG59O1xuXG4vKipcbiAqIENoYW5nZXMgdGhlIGN1cnJlbnQgcmVuZGVyIHRhcmdldCB0byB0aGUgb25lIGdpdmVuIGluIHBhcmFtZXRlclxuICpcbiAqIEBwYXJhbSByZW5kZXJUYXJnZXQge1BJWEkuUmVuZGVyVGFyZ2V0fSB0aGUgbmV3IHJlbmRlciB0YXJnZXRcbiAqL1xuV2ViR0xSZW5kZXJlci5wcm90b3R5cGUuYmluZFJlbmRlclRhcmdldCA9IGZ1bmN0aW9uIChyZW5kZXJUYXJnZXQpLy9wcm9qZWN0aW9uLCBidWZmZXIpXG57XG4gICAgaWYocmVuZGVyVGFyZ2V0ICE9PSB0aGlzLl9hY3RpdmVSZW5kZXJUYXJnZXQpXG4gICAge1xuICAgICAgICB0aGlzLl9hY3RpdmVSZW5kZXJUYXJnZXQgPSByZW5kZXJUYXJnZXQ7XG5cbiAgICAgICAgaWYodGhpcy5fYWN0aXZlU2hhZGVyKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLl9hY3RpdmVTaGFkZXIudW5pZm9ybXMucHJvamVjdGlvbk1hdHJpeCA9IHJlbmRlclRhcmdldC5wcm9qZWN0aW9uTWF0cml4LnRvQXJyYXkodHJ1ZSk7XG4gICAgICAgIH1cblxuICAgICAgICByZW5kZXJUYXJnZXQuYWN0aXZhdGUoKTtcblxuICAgICAgICB0aGlzLnN0ZW5jaWxNYW5hZ2VyLnNldE1hc2tTdGFjayggcmVuZGVyVGFyZ2V0LnN0ZW5jaWxNYXNrU3RhY2sgKTtcbiAgICB9XG59XG5cbldlYkdMUmVuZGVyZXIucHJvdG90eXBlLmJpbmRTaGFkZXIgPSBmdW5jdGlvbiAoc2hhZGVyKS8vcHJvamVjdGlvbiwgYnVmZmVyKVxue1xuICAgIC8vVE9ETyBjYWNoZVxuICAgIGlmKHRoaXMuX2FjdGl2ZVNoYWRlciAhPT0gc2hhZGVyKVxuICAgIHtcbiAgICAgICAgdGhpcy5fYWN0aXZlU2hhZGVyID0gc2hhZGVyO1xuICAgICAgICBzaGFkZXIuYmluZCgpO1xuXG4gICAgICAgIC8vIGF1dG9tYXRpY2FsbHkgc2V0IHRoZSBwcm9qZWN0aW9uIG1hdHJpeFxuICAgICAgICBzaGFkZXIudW5pZm9ybXMucHJvamVjdGlvbk1hdHJpeCA9IHRoaXMuX2FjdGl2ZVJlbmRlclRhcmdldC5wcm9qZWN0aW9uTWF0cml4LnRvQXJyYXkodHJ1ZSk7XG4gICAgfVxufVxuXG5cbldlYkdMUmVuZGVyZXIucHJvdG90eXBlLmJpbmRUZXh0dXJlID0gZnVuY3Rpb24gKHRleHR1cmUsIGxvY2F0aW9uKVxue1xuICAgIHZhciBnbCA9IHRoaXMuZ2w7XG5cbiAgICAvL1RPRE8gdGVzdCBwZXJmIG9mIGNhY2hlP1xuICAgIGxvY2F0aW9uID0gbG9jYXRpb24gfHwgMDtcblxuICAgIGlmKHRoaXMuX2FjdGl2ZVRleHR1cmVMb2NhdGlvbiAhPT0gbG9jYXRpb24pLy9cbiAgICB7XG4gICAgICAgIHRoaXMuX2FjdGl2ZVRleHR1cmVMb2NhdGlvbiA9IGxvY2F0aW9uXG4gICAgICAgIGdsLmFjdGl2ZVRleHR1cmUoZ2wuVEVYVFVSRTAgKyBsb2NhdGlvbiApO1xuICAgIH1cblxuICAgIC8vVE9ETyAtIGNhbiB3ZSBjYWNoZSB0aGlzIHRleHR1cmUgdG9vP1xuICAgIHRoaXMuX2FjdGl2ZVRleHR1cmUgPSB0ZXh0dXJlOyAgICAgIFxuICAgIFxuICAgIGlmICghdGV4dHVyZS5fZ2xUZXh0dXJlc1tnbC5pZF0pXG4gICAge1xuICAgICAgICAvLyB0aGlzIHdpbGwgYWxzbyBiaW5kIHRoZSB0ZXh0dXJlLi5cbiAgICAgICAgdGhpcy50ZXh0dXJlTWFuYWdlci51cGRhdGVUZXh0dXJlKHRleHR1cmUpO1xuICAgIH1cbiAgICBlbHNlXG4gICAgeyAgIFxuICAgICAgICAvLyBiaW5kIHRoZSBjdXJyZW50IHRleHR1cmVcbiAgICAgICAgdGV4dHVyZS5fZ2xUZXh0dXJlc1tnbC5pZF0uYmluZCgpO1xuICAgIH1cbn1cblxuXG4vKipcbiAqIEhhbmRsZXMgYSBsb3N0IHdlYmdsIGNvbnRleHRcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5XZWJHTFJlbmRlcmVyLnByb3RvdHlwZS5oYW5kbGVDb250ZXh0TG9zdCA9IGZ1bmN0aW9uIChldmVudClcbntcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xufTtcblxuLyoqXG4gKiBIYW5kbGVzIGEgcmVzdG9yZWQgd2ViZ2wgY29udGV4dFxuICpcbiAqIEBwcml2YXRlXG4gKi9cbldlYkdMUmVuZGVyZXIucHJvdG90eXBlLmhhbmRsZUNvbnRleHRSZXN0b3JlZCA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy5faW5pdENvbnRleHQoKTtcbiAgICB0aGlzLnRleHR1cmVNYW5hZ2VyLnJlbW92ZUFsbCgpO1xufTtcblxuLyoqXG4gKiBSZW1vdmVzIGV2ZXJ5dGhpbmcgZnJvbSB0aGUgcmVuZGVyZXIgKGV2ZW50IGxpc3RlbmVycywgc3ByaXRlYmF0Y2gsIGV0Yy4uLilcbiAqXG4gKiBAcGFyYW0gW3JlbW92ZVZpZXc9ZmFsc2VdIHtib29sZWFufSBSZW1vdmVzIHRoZSBDYW52YXMgZWxlbWVudCBmcm9tIHRoZSBET00uXG4gKi9cbldlYkdMUmVuZGVyZXIucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAocmVtb3ZlVmlldylcbntcbiAgICB0aGlzLmRlc3Ryb3lQbHVnaW5zKCk7XG5cbiAgICAvLyByZW1vdmUgbGlzdGVuZXJzXG4gICAgdGhpcy52aWV3LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3dlYmdsY29udGV4dGxvc3QnLCB0aGlzLmhhbmRsZUNvbnRleHRMb3N0KTtcbiAgICB0aGlzLnZpZXcucmVtb3ZlRXZlbnRMaXN0ZW5lcignd2ViZ2xjb250ZXh0cmVzdG9yZWQnLCB0aGlzLmhhbmRsZUNvbnRleHRSZXN0b3JlZCk7XG5cbiAgICB0aGlzLnRleHR1cmVNYW5hZ2VyLmRlc3Ryb3lBbGwoKTtcblxuICAgIC8vIGNhbGwgYmFzZSBkZXN0cm95XG4gICAgU3lzdGVtUmVuZGVyZXIucHJvdG90eXBlLmRlc3Ryb3kuY2FsbCh0aGlzLCByZW1vdmVWaWV3KTtcblxuICAgIHRoaXMudWlkID0gMDtcblxuICAgIC8vIGRlc3Ryb3kgdGhlIG1hbmFnZXJzXG4gICAgdGhpcy5zaGFkZXJNYW5hZ2VyLmRlc3Ryb3koKTtcbiAgICB0aGlzLm1hc2tNYW5hZ2VyLmRlc3Ryb3koKTtcbiAgICB0aGlzLnN0ZW5jaWxNYW5hZ2VyLmRlc3Ryb3koKTtcbiAgICB0aGlzLmZpbHRlck1hbmFnZXIuZGVzdHJveSgpO1xuICAgIHRoaXMuYmxlbmRNb2RlTWFuYWdlci5kZXN0cm95KCk7XG5cbiAgICB0aGlzLnNoYWRlck1hbmFnZXIgPSBudWxsO1xuICAgIHRoaXMubWFza01hbmFnZXIgPSBudWxsO1xuICAgIHRoaXMuZmlsdGVyTWFuYWdlciA9IG51bGw7XG4gICAgdGhpcy5ibGVuZE1vZGVNYW5hZ2VyID0gbnVsbDtcbiAgICB0aGlzLmN1cnJlbnRSZW5kZXJlciA9IG51bGw7XG5cbiAgICB0aGlzLmhhbmRsZUNvbnRleHRMb3N0ID0gbnVsbDtcbiAgICB0aGlzLmhhbmRsZUNvbnRleHRSZXN0b3JlZCA9IG51bGw7XG5cbiAgICB0aGlzLl9jb250ZXh0T3B0aW9ucyA9IG51bGw7XG5cbiAgICB0aGlzLmdsLnVzZVByb2dyYW0obnVsbCk7XG4gICAgdGhpcy5nbCA9IG51bGw7XG59O1xuXG4iLCJ2YXIgRGVmYXVsdFNoYWRlciA9IHJlcXVpcmUoJy4uL3NoYWRlcnMvVGV4dHVyZVNoYWRlcicpO1xuXG4vKipcbiAqIFRoaXMgaXMgdGhlIGJhc2UgY2xhc3MgZm9yIGNyZWF0aW5nIGEgUElYSSBmaWx0ZXIuIEN1cnJlbnRseSBvbmx5IFdlYkdMIHN1cHBvcnRzIGZpbHRlcnMuXG4gKiBJZiB5b3Ugd2FudCB0byBtYWtlIGEgY3VzdG9tIGZpbHRlciB0aGlzIHNob3VsZCBiZSB5b3VyIGJhc2UgY2xhc3MuXG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIHZlcnRleFNyYyB7c3RyaW5nfHN0cmluZ1tdfSBUaGUgdmVydGV4IHNoYWRlciBzb3VyY2UgYXMgYW4gYXJyYXkgb2Ygc3RyaW5ncy5cbiAqIEBwYXJhbSBmcmFnbWVudFNyYyB7c3RyaW5nfHN0cmluZ1tdfSBUaGUgZnJhZ21lbnQgc2hhZGVyIHNvdXJjZSBhcyBhbiBhcnJheSBvZiBzdHJpbmdzLlxuICogQHBhcmFtIHVuaWZvcm1zIHtvYmplY3R9IEFuIG9iamVjdCBjb250YWluaW5nIHRoZSB1bmlmb3JtcyBmb3IgdGhpcyBmaWx0ZXIuXG4gKi9cbmZ1bmN0aW9uIEFic3RyYWN0RmlsdGVyKHZlcnRleFNyYywgZnJhZ21lbnRTcmMsIHVuaWZvcm1zKVxue1xuXG4gICAgLyoqXG4gICAgICogQW4gYXJyYXkgb2Ygc2hhZGVyc1xuICAgICAqIEBtZW1iZXIge1BJWEkuU2hhZGVyW119XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLnNoYWRlcnMgPSBbXTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBleHRyYSBwYWRkaW5nIHRoYXQgdGhlIGZpbHRlciBtaWdodCBuZWVkXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMucGFkZGluZyA9IDA7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgdW5pZm9ybXMgYXMgYW4gb2JqZWN0XG4gICAgICogQG1lbWJlciB7b2JqZWN0fVxuICAgICAqL1xuICAgIHRoaXMudW5pZm9ybXMgPSB1bmlmb3JtcyB8fCB7fTtcblxuXG4gICAgLyoqXG4gICAgICogVGhlIGNvZGUgb2YgdGhlIHZlcnRleCBzaGFkZXJcbiAgICAgKiBAbWVtYmVyIHtzdHJpbmdbXX1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMudmVydGV4U3JjID0gdmVydGV4U3JjIHx8IERlZmF1bHRTaGFkZXIuZGVmYXVsdFZlcnRleFNyYztcblxuICAgIC8qKlxuICAgICAqIFRoZSBjb2RlIG9mIHRoZSBmcmFtZW50IHNoYWRlclxuICAgICAqIEBtZW1iZXIge3N0cmluZ1tdfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5mcmFnbWVudFNyYyA9IGZyYWdtZW50U3JjIHx8IERlZmF1bHRTaGFkZXIuZGVmYXVsdEZyYWdtZW50U3JjO1xuXG4gICAgLy9UT0RPIGEgcmVtaW5kZXIgLSB3b3VsZCBiZSBjb29sIHRvIGhhdmUgbG93ZXIgcmVzIGZpbHRlcnMgYXMgdGhpcyB3b3VsZCBnaXZlIGJldHRlciBwZXJmb3JtYW5jZS5cblxuICAgIC8vdHlwZW9mIGZyYWdtZW50U3JjID09PSAnc3RyaW5nJyA/IGZyYWdtZW50U3JjLnNwbGl0KCcnKSA6IChmcmFnbWVudFNyYyB8fCBbXSk7XG5cbn1cblxuQWJzdHJhY3RGaWx0ZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gQWJzdHJhY3RGaWx0ZXI7XG5tb2R1bGUuZXhwb3J0cyA9IEFic3RyYWN0RmlsdGVyO1xuXG4vKipcbiAqIEdyYWJzIGEgc2hhZGVyIGZyb20gdGhlIGN1cnJlbnQgcmVuZGVyZXJcbiAqXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcn0gVGhlIHJlbmRlcmVyIHRvIHJldHJpZXZlIHRoZSBzaGFkZXIgZnJvbVxuICovXG5BYnN0cmFjdEZpbHRlci5wcm90b3R5cGUuZ2V0U2hhZGVyID0gZnVuY3Rpb24gKHJlbmRlcmVyKVxue1xuICAgIHZhciBnbCA9IHJlbmRlcmVyLmdsO1xuXG4gICAgdmFyIHNoYWRlciA9IHRoaXMuc2hhZGVyc1tnbC5pZF07XG5cbiAgICBpZiAoIXNoYWRlcilcbiAgICB7XG4gICAgICAgIHNoYWRlciA9IG5ldyBEZWZhdWx0U2hhZGVyKHJlbmRlcmVyLnNoYWRlck1hbmFnZXIsXG4gICAgICAgICAgICB0aGlzLnZlcnRleFNyYyxcbiAgICAgICAgICAgIHRoaXMuZnJhZ21lbnRTcmMsXG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLFxuICAgICAgICAgICAgdGhpcy5hdHRyaWJ1dGVzXG4gICAgICAgICk7XG5cbiAgICAgICAgdGhpcy5zaGFkZXJzW2dsLmlkXSA9IHNoYWRlcjtcbiAgICB9XG5cbiAgICByZXR1cm4gc2hhZGVyO1xufTtcblxuLyoqXG4gKiBBcHBsaWVzIHRoZSBmaWx0ZXJcbiAqXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcn0gVGhlIHJlbmRlcmVyIHRvIHJldHJpZXZlIHRoZSBmaWx0ZXIgZnJvbVxuICogQHBhcmFtIGlucHV0IHtQSVhJLlJlbmRlclRhcmdldH1cbiAqIEBwYXJhbSBvdXRwdXQge1BJWEkuUmVuZGVyVGFyZ2V0fVxuICogQHBhcmFtIGNsZWFyIHtib29sZWFufSBXaGV0aGVyIG9yIG5vdCB3ZSB3YW50IHRvIGNsZWFyIHRoZSBvdXRwdXRUYXJnZXRcbiAqL1xuQWJzdHJhY3RGaWx0ZXIucHJvdG90eXBlLmFwcGx5RmlsdGVyID0gZnVuY3Rpb24gKHJlbmRlcmVyLCBpbnB1dCwgb3V0cHV0LCBjbGVhcilcbntcbiAgICB2YXIgc2hhZGVyID0gdGhpcy5nZXRTaGFkZXIocmVuZGVyZXIpO1xuXG4gICAgcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5hcHBseUZpbHRlcihzaGFkZXIsIGlucHV0LCBvdXRwdXQsIGNsZWFyKTtcbn07XG5cbi8qKlxuICogU3luY3MgYSB1bmlmb3JtIGJldHdlZW4gdGhlIGNsYXNzIG9iamVjdCBhbmQgdGhlIHNoYWRlcnMuXG4gKlxuICovXG5BYnN0cmFjdEZpbHRlci5wcm90b3R5cGUuc3luY1VuaWZvcm0gPSBmdW5jdGlvbiAodW5pZm9ybSlcbntcbiAgICBmb3IgKHZhciBpID0gMCwgaiA9IHRoaXMuc2hhZGVycy5sZW5ndGg7IGkgPCBqOyArK2kpXG4gICAge1xuICAgICAgICB0aGlzLnNoYWRlcnNbaV0uc3luY1VuaWZvcm0odW5pZm9ybSk7XG4gICAgfVxufTtcbiIsInZhciBBYnN0cmFjdEZpbHRlciA9IHJlcXVpcmUoJy4vQWJzdHJhY3RGaWx0ZXInKTtcbi8vIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL3N1YnN0YWNrL2JyZnMvaXNzdWVzLzI1XG5cblxuLyoqXG4gKlxuICogQmFzaWMgRlhBQSBpbXBsZW1lbnRhdGlvbiBiYXNlZCBvbiB0aGUgY29kZSBvbiBnZWVrczNkLmNvbSB3aXRoIHRoZVxuICogbW9kaWZpY2F0aW9uIHRoYXQgdGhlIHRleHR1cmUyRExvZCBzdHVmZiB3YXMgcmVtb3ZlZCBzaW5jZSBpdCdzXG4gKiB1bnN1cHBvcnRlZCBieSBXZWJHTC5cbiAqXG4gKiAtLVxuICogRnJvbTpcbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS9taXRzdWhpa28vd2ViZ2wtbWVpbmNyYWZ0XG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLkFic3RyYWN0RmlsdGVyXG4gKiBAbWVtYmVyb2YgUElYSVxuICpcbiAqL1xuZnVuY3Rpb24gRlhBQUZpbHRlcigpXG57XG4gICAgQWJzdHJhY3RGaWx0ZXIuY2FsbCh0aGlzLFxuICAgICAgICAvLyB2ZXJ0ZXggc2hhZGVyXG4gICAgICAgIFwiXFxucHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XFxuXFxuYXR0cmlidXRlIHZlYzIgYVZlcnRleFBvc2l0aW9uO1xcbmF0dHJpYnV0ZSB2ZWMyIGFUZXh0dXJlQ29vcmQ7XFxuYXR0cmlidXRlIHZlYzQgYUNvbG9yO1xcblxcbnVuaWZvcm0gbWF0MyBwcm9qZWN0aW9uTWF0cml4O1xcbnVuaWZvcm0gdmVjMiByZXNvbHV0aW9uO1xcblxcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xcbnZhcnlpbmcgdmVjNCB2Q29sb3I7XFxuXFxudmFyeWluZyB2ZWMyIHZSZXNvbHV0aW9uO1xcblxcbi8vdGV4Y29vcmRzIGNvbXB1dGVkIGluIHZlcnRleCBzdGVwXFxuLy90byBhdm9pZCBkZXBlbmRlbnQgdGV4dHVyZSByZWFkc1xcbnZhcnlpbmcgdmVjMiB2X3JnYk5XO1xcbnZhcnlpbmcgdmVjMiB2X3JnYk5FO1xcbnZhcnlpbmcgdmVjMiB2X3JnYlNXO1xcbnZhcnlpbmcgdmVjMiB2X3JnYlNFO1xcbnZhcnlpbmcgdmVjMiB2X3JnYk07XFxuXFxuXFxudm9pZCB0ZXhjb29yZHModmVjMiBmcmFnQ29vcmQsIHZlYzIgcmVzb2x1dGlvbixcXG4gICAgICAgICAgICBvdXQgdmVjMiB2X3JnYk5XLCBvdXQgdmVjMiB2X3JnYk5FLFxcbiAgICAgICAgICAgIG91dCB2ZWMyIHZfcmdiU1csIG91dCB2ZWMyIHZfcmdiU0UsXFxuICAgICAgICAgICAgb3V0IHZlYzIgdl9yZ2JNKSB7XFxuICAgIHZlYzIgaW52ZXJzZVZQID0gMS4wIC8gcmVzb2x1dGlvbi54eTtcXG4gICAgdl9yZ2JOVyA9IChmcmFnQ29vcmQgKyB2ZWMyKC0xLjAsIC0xLjApKSAqIGludmVyc2VWUDtcXG4gICAgdl9yZ2JORSA9IChmcmFnQ29vcmQgKyB2ZWMyKDEuMCwgLTEuMCkpICogaW52ZXJzZVZQO1xcbiAgICB2X3JnYlNXID0gKGZyYWdDb29yZCArIHZlYzIoLTEuMCwgMS4wKSkgKiBpbnZlcnNlVlA7XFxuICAgIHZfcmdiU0UgPSAoZnJhZ0Nvb3JkICsgdmVjMigxLjAsIDEuMCkpICogaW52ZXJzZVZQO1xcbiAgICB2X3JnYk0gPSB2ZWMyKGZyYWdDb29yZCAqIGludmVyc2VWUCk7XFxufVxcblxcbnZvaWQgbWFpbih2b2lkKXtcXG4gICBnbF9Qb3NpdGlvbiA9IHZlYzQoKHByb2plY3Rpb25NYXRyaXggKiB2ZWMzKGFWZXJ0ZXhQb3NpdGlvbiwgMS4wKSkueHksIDAuMCwgMS4wKTtcXG4gICB2VGV4dHVyZUNvb3JkID0gYVRleHR1cmVDb29yZDtcXG4gICB2Q29sb3IgPSB2ZWM0KGFDb2xvci5yZ2IgKiBhQ29sb3IuYSwgYUNvbG9yLmEpO1xcbiAgIHZSZXNvbHV0aW9uID0gcmVzb2x1dGlvbjtcXG5cXG4gICAvL2NvbXB1dGUgdGhlIHRleHR1cmUgY29vcmRzIGFuZCBzZW5kIHRoZW0gdG8gdmFyeWluZ3NcXG4gICB0ZXhjb29yZHMoYVRleHR1cmVDb29yZCAqIHJlc29sdXRpb24sIHJlc29sdXRpb24sIHZfcmdiTlcsIHZfcmdiTkUsIHZfcmdiU1csIHZfcmdiU0UsIHZfcmdiTSk7XFxufVxcblwiLFxuICAgICAgICAvLyBmcmFnbWVudCBzaGFkZXJcbiAgICAgICAgXCJwcmVjaXNpb24gbG93cCBmbG9hdDtcXG5cXG5cXG4vKipcXG5CYXNpYyBGWEFBIGltcGxlbWVudGF0aW9uIGJhc2VkIG9uIHRoZSBjb2RlIG9uIGdlZWtzM2QuY29tIHdpdGggdGhlXFxubW9kaWZpY2F0aW9uIHRoYXQgdGhlIHRleHR1cmUyRExvZCBzdHVmZiB3YXMgcmVtb3ZlZCBzaW5jZSBpdCdzXFxudW5zdXBwb3J0ZWQgYnkgV2ViR0wuXFxuXFxuLS1cXG5cXG5Gcm9tOlxcbmh0dHBzOi8vZ2l0aHViLmNvbS9taXRzdWhpa28vd2ViZ2wtbWVpbmNyYWZ0XFxuXFxuQ29weXJpZ2h0IChjKSAyMDExIGJ5IEFybWluIFJvbmFjaGVyLlxcblxcblNvbWUgcmlnaHRzIHJlc2VydmVkLlxcblxcblJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dFxcbm1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmVcXG5tZXQ6XFxuXFxuICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHRcXG4gICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuXFxuXFxuICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZVxcbiAgICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nXFxuICAgICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkXFxuICAgICAgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLlxcblxcbiAgICAqIFRoZSBuYW1lcyBvZiB0aGUgY29udHJpYnV0b3JzIG1heSBub3QgYmUgdXNlZCB0byBlbmRvcnNlIG9yXFxuICAgICAgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljXFxuICAgICAgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLlxcblxcblRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlNcXG5cXFwiQVMgSVNcXFwiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVFxcbkxJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUlxcbkEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUXFxuT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsXFxuU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVFxcbkxJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLFxcbkRBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWVxcblRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlRcXG4oSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0VcXG5PRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLlxcbiovXFxuXFxuI2lmbmRlZiBGWEFBX1JFRFVDRV9NSU5cXG4gICAgI2RlZmluZSBGWEFBX1JFRFVDRV9NSU4gICAoMS4wLyAxMjguMClcXG4jZW5kaWZcXG4jaWZuZGVmIEZYQUFfUkVEVUNFX01VTFxcbiAgICAjZGVmaW5lIEZYQUFfUkVEVUNFX01VTCAgICgxLjAgLyA4LjApXFxuI2VuZGlmXFxuI2lmbmRlZiBGWEFBX1NQQU5fTUFYXFxuICAgICNkZWZpbmUgRlhBQV9TUEFOX01BWCAgICAgOC4wXFxuI2VuZGlmXFxuXFxuLy9vcHRpbWl6ZWQgdmVyc2lvbiBmb3IgbW9iaWxlLCB3aGVyZSBkZXBlbmRlbnRcXG4vL3RleHR1cmUgcmVhZHMgY2FuIGJlIGEgYm90dGxlbmVja1xcbnZlYzQgZnhhYShzYW1wbGVyMkQgdGV4LCB2ZWMyIGZyYWdDb29yZCwgdmVjMiByZXNvbHV0aW9uLFxcbiAgICAgICAgICAgIHZlYzIgdl9yZ2JOVywgdmVjMiB2X3JnYk5FLFxcbiAgICAgICAgICAgIHZlYzIgdl9yZ2JTVywgdmVjMiB2X3JnYlNFLFxcbiAgICAgICAgICAgIHZlYzIgdl9yZ2JNKSB7XFxuICAgIHZlYzQgY29sb3I7XFxuICAgIG1lZGl1bXAgdmVjMiBpbnZlcnNlVlAgPSB2ZWMyKDEuMCAvIHJlc29sdXRpb24ueCwgMS4wIC8gcmVzb2x1dGlvbi55KTtcXG4gICAgdmVjMyByZ2JOVyA9IHRleHR1cmUyRCh0ZXgsIHZfcmdiTlcpLnh5ejtcXG4gICAgdmVjMyByZ2JORSA9IHRleHR1cmUyRCh0ZXgsIHZfcmdiTkUpLnh5ejtcXG4gICAgdmVjMyByZ2JTVyA9IHRleHR1cmUyRCh0ZXgsIHZfcmdiU1cpLnh5ejtcXG4gICAgdmVjMyByZ2JTRSA9IHRleHR1cmUyRCh0ZXgsIHZfcmdiU0UpLnh5ejtcXG4gICAgdmVjNCB0ZXhDb2xvciA9IHRleHR1cmUyRCh0ZXgsIHZfcmdiTSk7XFxuICAgIHZlYzMgcmdiTSAgPSB0ZXhDb2xvci54eXo7XFxuICAgIHZlYzMgbHVtYSA9IHZlYzMoMC4yOTksIDAuNTg3LCAwLjExNCk7XFxuICAgIGZsb2F0IGx1bWFOVyA9IGRvdChyZ2JOVywgbHVtYSk7XFxuICAgIGZsb2F0IGx1bWFORSA9IGRvdChyZ2JORSwgbHVtYSk7XFxuICAgIGZsb2F0IGx1bWFTVyA9IGRvdChyZ2JTVywgbHVtYSk7XFxuICAgIGZsb2F0IGx1bWFTRSA9IGRvdChyZ2JTRSwgbHVtYSk7XFxuICAgIGZsb2F0IGx1bWFNICA9IGRvdChyZ2JNLCAgbHVtYSk7XFxuICAgIGZsb2F0IGx1bWFNaW4gPSBtaW4obHVtYU0sIG1pbihtaW4obHVtYU5XLCBsdW1hTkUpLCBtaW4obHVtYVNXLCBsdW1hU0UpKSk7XFxuICAgIGZsb2F0IGx1bWFNYXggPSBtYXgobHVtYU0sIG1heChtYXgobHVtYU5XLCBsdW1hTkUpLCBtYXgobHVtYVNXLCBsdW1hU0UpKSk7XFxuXFxuICAgIG1lZGl1bXAgdmVjMiBkaXI7XFxuICAgIGRpci54ID0gLSgobHVtYU5XICsgbHVtYU5FKSAtIChsdW1hU1cgKyBsdW1hU0UpKTtcXG4gICAgZGlyLnkgPSAgKChsdW1hTlcgKyBsdW1hU1cpIC0gKGx1bWFORSArIGx1bWFTRSkpO1xcblxcbiAgICBmbG9hdCBkaXJSZWR1Y2UgPSBtYXgoKGx1bWFOVyArIGx1bWFORSArIGx1bWFTVyArIGx1bWFTRSkgKlxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKDAuMjUgKiBGWEFBX1JFRFVDRV9NVUwpLCBGWEFBX1JFRFVDRV9NSU4pO1xcblxcbiAgICBmbG9hdCByY3BEaXJNaW4gPSAxLjAgLyAobWluKGFicyhkaXIueCksIGFicyhkaXIueSkpICsgZGlyUmVkdWNlKTtcXG4gICAgZGlyID0gbWluKHZlYzIoRlhBQV9TUEFOX01BWCwgRlhBQV9TUEFOX01BWCksXFxuICAgICAgICAgICAgICBtYXgodmVjMigtRlhBQV9TUEFOX01BWCwgLUZYQUFfU1BBTl9NQVgpLFxcbiAgICAgICAgICAgICAgZGlyICogcmNwRGlyTWluKSkgKiBpbnZlcnNlVlA7XFxuXFxuICAgIHZlYzMgcmdiQSA9IDAuNSAqIChcXG4gICAgICAgIHRleHR1cmUyRCh0ZXgsIGZyYWdDb29yZCAqIGludmVyc2VWUCArIGRpciAqICgxLjAgLyAzLjAgLSAwLjUpKS54eXogK1xcbiAgICAgICAgdGV4dHVyZTJEKHRleCwgZnJhZ0Nvb3JkICogaW52ZXJzZVZQICsgZGlyICogKDIuMCAvIDMuMCAtIDAuNSkpLnh5eik7XFxuICAgIHZlYzMgcmdiQiA9IHJnYkEgKiAwLjUgKyAwLjI1ICogKFxcbiAgICAgICAgdGV4dHVyZTJEKHRleCwgZnJhZ0Nvb3JkICogaW52ZXJzZVZQICsgZGlyICogLTAuNSkueHl6ICtcXG4gICAgICAgIHRleHR1cmUyRCh0ZXgsIGZyYWdDb29yZCAqIGludmVyc2VWUCArIGRpciAqIDAuNSkueHl6KTtcXG5cXG4gICAgZmxvYXQgbHVtYUIgPSBkb3QocmdiQiwgbHVtYSk7XFxuICAgIGlmICgobHVtYUIgPCBsdW1hTWluKSB8fCAobHVtYUIgPiBsdW1hTWF4KSlcXG4gICAgICAgIGNvbG9yID0gdmVjNChyZ2JBLCB0ZXhDb2xvci5hKTtcXG4gICAgZWxzZVxcbiAgICAgICAgY29sb3IgPSB2ZWM0KHJnYkIsIHRleENvbG9yLmEpO1xcbiAgICByZXR1cm4gY29sb3I7XFxufVxcblxcblxcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xcbnZhcnlpbmcgdmVjNCB2Q29sb3I7XFxudmFyeWluZyB2ZWMyIHZSZXNvbHV0aW9uO1xcblxcbi8vdGV4Y29vcmRzIGNvbXB1dGVkIGluIHZlcnRleCBzdGVwXFxuLy90byBhdm9pZCBkZXBlbmRlbnQgdGV4dHVyZSByZWFkc1xcbnZhcnlpbmcgdmVjMiB2X3JnYk5XO1xcbnZhcnlpbmcgdmVjMiB2X3JnYk5FO1xcbnZhcnlpbmcgdmVjMiB2X3JnYlNXO1xcbnZhcnlpbmcgdmVjMiB2X3JnYlNFO1xcbnZhcnlpbmcgdmVjMiB2X3JnYk07XFxuXFxudW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXI7XFxuXFxuXFxudm9pZCBtYWluKHZvaWQpe1xcblxcbiAgICBnbF9GcmFnQ29sb3IgPSBmeGFhKHVTYW1wbGVyLCB2VGV4dHVyZUNvb3JkICogdlJlc29sdXRpb24sIHZSZXNvbHV0aW9uLCB2X3JnYk5XLCB2X3JnYk5FLCB2X3JnYlNXLCB2X3JnYlNFLCB2X3JnYk0pO1xcblxcbn1cXG5cIixcbiAgICAgICAgLy8gdW5pZm9ybXNcbiAgICAgICAge1xuICAgICAgICAgICAgcmVzb2x1dGlvbjogeyB0eXBlOiAndjInLCB2YWx1ZTogeyB4OiAxLCB5OiAxIH0gfVxuICAgICAgICB9XG4gICAgKTtcblxufVxuXG5GWEFBRmlsdGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoQWJzdHJhY3RGaWx0ZXIucHJvdG90eXBlKTtcbkZYQUFGaWx0ZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gRlhBQUZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gRlhBQUZpbHRlcjtcblxuLyoqXG4gKiBBcHBsaWVzIHRoZSBmaWx0ZXJcbiAqXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcn0gVGhlIHJlbmRlcmVyIHRvIHJldHJpZXZlIHRoZSBmaWx0ZXIgZnJvbVxuICogQHBhcmFtIGlucHV0IHtQSVhJLlJlbmRlclRhcmdldH1cbiAqIEBwYXJhbSBvdXRwdXQge1BJWEkuUmVuZGVyVGFyZ2V0fVxuICovXG5GWEFBRmlsdGVyLnByb3RvdHlwZS5hcHBseUZpbHRlciA9IGZ1bmN0aW9uIChyZW5kZXJlciwgaW5wdXQsIG91dHB1dClcbntcbiAgICB2YXIgZmlsdGVyTWFuYWdlciA9IHJlbmRlcmVyLmZpbHRlck1hbmFnZXI7XG5cbiAgICB2YXIgc2hhZGVyID0gdGhpcy5nZXRTaGFkZXIoIHJlbmRlcmVyICk7XG4gICAgIC8vIGRyYXcgdGhlIGZpbHRlci4uLlxuICAgIGZpbHRlck1hbmFnZXIuYXBwbHlGaWx0ZXIoc2hhZGVyLCBpbnB1dCwgb3V0cHV0KTtcbn07XG4iLCJ2YXIgQWJzdHJhY3RGaWx0ZXIgPSByZXF1aXJlKCcuL0Fic3RyYWN0RmlsdGVyJyksXG4gICAgbWF0aCA9ICByZXF1aXJlKCcuLi8uLi8uLi9tYXRoJyk7XG5cbi8vIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL3N1YnN0YWNrL2JyZnMvaXNzdWVzLzI1XG5cblxuLyoqXG4gKiBUaGUgU3ByaXRlTWFza0ZpbHRlciBjbGFzc1xuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5BYnN0cmFjdEZpbHRlclxuICogQG1lbWJlcm9mIFBJWElcbiAqIEBwYXJhbSBzcHJpdGUge1BJWEkuU3ByaXRlfSB0aGUgdGFyZ2V0IHNwcml0ZVxuICovXG5mdW5jdGlvbiBTcHJpdGVNYXNrRmlsdGVyKHNwcml0ZSlcbntcbiAgICB2YXIgbWFza01hdHJpeCA9IG5ldyBtYXRoLk1hdHJpeCgpO1xuXG4gICAgQWJzdHJhY3RGaWx0ZXIuY2FsbCh0aGlzLFxuICAgICAgICBcImF0dHJpYnV0ZSB2ZWMyIGFWZXJ0ZXhQb3NpdGlvbjtcXG5hdHRyaWJ1dGUgdmVjMiBhVGV4dHVyZUNvb3JkO1xcbmF0dHJpYnV0ZSB2ZWM0IGFDb2xvcjtcXG5cXG51bmlmb3JtIG1hdDMgcHJvamVjdGlvbk1hdHJpeDtcXG51bmlmb3JtIG1hdDMgb3RoZXJNYXRyaXg7XFxuXFxudmFyeWluZyB2ZWMyIHZNYXNrQ29vcmQ7XFxudmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7XFxudmFyeWluZyB2ZWM0IHZDb2xvcjtcXG5cXG52b2lkIG1haW4odm9pZClcXG57XFxuICAgIGdsX1Bvc2l0aW9uID0gdmVjNCgocHJvamVjdGlvbk1hdHJpeCAqIHZlYzMoYVZlcnRleFBvc2l0aW9uLCAxLjApKS54eSwgMC4wLCAxLjApO1xcbiAgICB2VGV4dHVyZUNvb3JkID0gYVRleHR1cmVDb29yZDtcXG4gICAgdk1hc2tDb29yZCA9ICggb3RoZXJNYXRyaXggKiB2ZWMzKCBhVGV4dHVyZUNvb3JkLCAxLjApICApLnh5O1xcbiAgICB2Q29sb3IgPSB2ZWM0KGFDb2xvci5yZ2IgKiBhQ29sb3IuYSwgYUNvbG9yLmEpO1xcbn1cXG5cIixcbiAgICAgICAgXCJwcmVjaXNpb24gbG93cCBmbG9hdDtcXG5cXG52YXJ5aW5nIHZlYzIgdk1hc2tDb29yZDtcXG52YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDtcXG52YXJ5aW5nIHZlYzQgdkNvbG9yO1xcblxcbnVuaWZvcm0gc2FtcGxlcjJEIHVTYW1wbGVyO1xcbnVuaWZvcm0gZmxvYXQgYWxwaGE7XFxudW5pZm9ybSBzYW1wbGVyMkQgbWFzaztcXG5cXG52b2lkIG1haW4odm9pZClcXG57XFxuICAgIC8vIGNoZWNrIGNsaXAhIHRoaXMgd2lsbCBzdG9wIHRoZSBtYXNrIGJsZWVkaW5nIG91dCBmcm9tIHRoZSBlZGdlc1xcbiAgICB2ZWMyIHRleHQgPSBhYnMoIHZNYXNrQ29vcmQgLSAwLjUgKTtcXG4gICAgdGV4dCA9IHN0ZXAoMC41LCB0ZXh0KTtcXG4gICAgZmxvYXQgY2xpcCA9IDEuMCAtIG1heCh0ZXh0LnksIHRleHQueCk7XFxuICAgIHZlYzQgb3JpZ2luYWwgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZUZXh0dXJlQ29vcmQpO1xcbiAgICB2ZWM0IG1hc2t5ID0gdGV4dHVyZTJEKG1hc2ssIHZNYXNrQ29vcmQpO1xcbiAgICBvcmlnaW5hbCAqPSAobWFza3kuciAqIG1hc2t5LmEgKiBhbHBoYSAqIGNsaXApO1xcbiAgICBnbF9GcmFnQ29sb3IgPSBvcmlnaW5hbDtcXG59XFxuXCIsXG4gICAgICAgIHtcbiAgICAgICAgICAgIG1hc2s6ICAgICAgICAgICB7IHR5cGU6ICdzYW1wbGVyMkQnLCB2YWx1ZTogc3ByaXRlLl90ZXh0dXJlIH0sXG4gICAgICAgICAgICBhbHBoYTogICAgICAgICAgeyB0eXBlOiAnZicsIHZhbHVlOiAxfSxcbiAgICAgICAgICAgIG90aGVyTWF0cml4OiAgICB7IHR5cGU6ICdtYXQzJywgdmFsdWU6IG1hc2tNYXRyaXgudG9BcnJheSh0cnVlKSB9XG4gICAgICAgIH1cbiAgICApO1xuXG4gICAgdGhpcy5tYXNrU3ByaXRlID0gc3ByaXRlO1xuICAgIHRoaXMubWFza01hdHJpeCA9IG1hc2tNYXRyaXg7XG59XG5cblNwcml0ZU1hc2tGaWx0ZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShBYnN0cmFjdEZpbHRlci5wcm90b3R5cGUpO1xuU3ByaXRlTWFza0ZpbHRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBTcHJpdGVNYXNrRmlsdGVyO1xubW9kdWxlLmV4cG9ydHMgPSBTcHJpdGVNYXNrRmlsdGVyO1xuXG4vKipcbiAqIEFwcGxpZXMgdGhlIGZpbHRlclxuICpcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5XZWJHTFJlbmRlcmVyfSBUaGUgcmVuZGVyZXIgdG8gcmV0cmlldmUgdGhlIGZpbHRlciBmcm9tXG4gKiBAcGFyYW0gaW5wdXQge1BJWEkuUmVuZGVyVGFyZ2V0fVxuICogQHBhcmFtIG91dHB1dCB7UElYSS5SZW5kZXJUYXJnZXR9XG4gKi9cblNwcml0ZU1hc2tGaWx0ZXIucHJvdG90eXBlLmFwcGx5RmlsdGVyID0gZnVuY3Rpb24gKHJlbmRlcmVyLCBpbnB1dCwgb3V0cHV0KVxue1xuICAgIHZhciBmaWx0ZXJNYW5hZ2VyID0gcmVuZGVyZXIuZmlsdGVyTWFuYWdlcjtcblxuICAgIHRoaXMudW5pZm9ybXMubWFzay52YWx1ZSA9IHRoaXMubWFza1Nwcml0ZS5fdGV4dHVyZTtcblxuICAgIGZpbHRlck1hbmFnZXIuY2FsY3VsYXRlTWFwcGVkTWF0cml4KGlucHV0LmZyYW1lLCB0aGlzLm1hc2tTcHJpdGUsIHRoaXMubWFza01hdHJpeCk7XG5cbiAgICB0aGlzLnVuaWZvcm1zLm90aGVyTWF0cml4LnZhbHVlID0gdGhpcy5tYXNrTWF0cml4LnRvQXJyYXkodHJ1ZSk7XG4gICAgdGhpcy51bmlmb3Jtcy5hbHBoYS52YWx1ZSA9IHRoaXMubWFza1Nwcml0ZS53b3JsZEFscGhhO1xuXG4gICAgdmFyIHNoYWRlciA9IHRoaXMuZ2V0U2hhZGVyKHJlbmRlcmVyKTtcbiAgICAgLy8gZHJhdyB0aGUgZmlsdGVyLi4uXG4gICAgZmlsdGVyTWFuYWdlci5hcHBseUZpbHRlcihzaGFkZXIsIGlucHV0LCBvdXRwdXQpO1xufTtcblxuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhTcHJpdGVNYXNrRmlsdGVyLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFRoZSB0ZXh0dXJlIHVzZWQgZm9yIHRoZSBkaXNwbGFjZW1lbnQgbWFwLiBNdXN0IGJlIHBvd2VyIG9mIDIgc2l6ZWQgdGV4dHVyZS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuVGV4dHVyZX1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5TcHJpdGVNYXNrRmlsdGVyI1xuICAgICAqL1xuICAgIG1hcDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVuaWZvcm1zLm1hc2sudmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLm1hc2sudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBUaGUgb2Zmc2V0IHVzZWQgdG8gbW92ZSB0aGUgZGlzcGxhY2VtZW50IG1hcC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuUG9pbnR9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuU3ByaXRlTWFza0ZpbHRlciNcbiAgICAgKi9cbiAgICBvZmZzZXQ6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbigpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVuaWZvcm1zLm9mZnNldC52YWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbih2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy5vZmZzZXQudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuIiwidmFyIFdlYkdMTWFuYWdlciA9IHJlcXVpcmUoJy4vV2ViR0xNYW5hZ2VyJyk7XG5cbi8qKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQGV4dGVuZHMgUElYSS5XZWJHbE1hbmFnZXJcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5XZWJHTFJlbmRlcmVyfSBUaGUgcmVuZGVyZXIgdGhpcyBtYW5hZ2VyIHdvcmtzIGZvci5cbiAqL1xuZnVuY3Rpb24gQmxlbmRNb2RlTWFuYWdlcihyZW5kZXJlcilcbntcbiAgICBXZWJHTE1hbmFnZXIuY2FsbCh0aGlzLCByZW5kZXJlcik7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy5jdXJyZW50QmxlbmRNb2RlID0gOTk5OTk7XG59XG5cbkJsZW5kTW9kZU1hbmFnZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShXZWJHTE1hbmFnZXIucHJvdG90eXBlKTtcbkJsZW5kTW9kZU1hbmFnZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gQmxlbmRNb2RlTWFuYWdlcjtcbm1vZHVsZS5leHBvcnRzID0gQmxlbmRNb2RlTWFuYWdlcjtcblxuLyoqXG4gKiBTZXRzLXVwIHRoZSBnaXZlbiBibGVuZE1vZGUgZnJvbSBXZWJHTCdzIHBvaW50IG9mIHZpZXcuXG4gKlxuICogQHBhcmFtIGJsZW5kTW9kZSB7bnVtYmVyfSB0aGUgYmxlbmRNb2RlLCBzaG91bGQgYmUgYSBQaXhpIGNvbnN0LCBzdWNoIGFzIGBQSVhJLkJMRU5EX01PREVTLkFERGAuIFNlZVxuICogIHtAbGluayBQSVhJLkJMRU5EX01PREVTfSBmb3IgcG9zc2libGUgdmFsdWVzLlxuICovXG5CbGVuZE1vZGVNYW5hZ2VyLnByb3RvdHlwZS5zZXRCbGVuZE1vZGUgPSBmdW5jdGlvbiAoYmxlbmRNb2RlKVxue1xuICAgIGlmICh0aGlzLmN1cnJlbnRCbGVuZE1vZGUgPT09IGJsZW5kTW9kZSlcbiAgICB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICB0aGlzLmN1cnJlbnRCbGVuZE1vZGUgPSBibGVuZE1vZGU7XG5cbiAgICB2YXIgbW9kZSA9IHRoaXMucmVuZGVyZXIuYmxlbmRNb2Rlc1t0aGlzLmN1cnJlbnRCbGVuZE1vZGVdO1xuICAgIHRoaXMucmVuZGVyZXIuZ2wuYmxlbmRGdW5jKG1vZGVbMF0sIG1vZGVbMV0pO1xuXG4gICAgcmV0dXJuIHRydWU7XG59O1xuIiwidmFyIFdlYkdMTWFuYWdlciA9IHJlcXVpcmUoJy4vV2ViR0xNYW5hZ2VyJyksXG4gICAgUmVuZGVyVGFyZ2V0ID0gcmVxdWlyZSgnLi4vdXRpbHMvUmVuZGVyVGFyZ2V0JyksXG4gICAgQ09OU1QgPSByZXF1aXJlKCcuLi8uLi8uLi9jb25zdCcpLFxuICAgIFF1YWQgPSByZXF1aXJlKCcuLi91dGlscy9RdWFkJyksXG4gICAgbWF0aCA9ICByZXF1aXJlKCcuLi8uLi8uLi9tYXRoJyk7XG5cbi8qKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQGV4dGVuZHMgUElYSS5XZWJHTE1hbmFnZXJcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5XZWJHTFJlbmRlcmVyfSBUaGUgcmVuZGVyZXIgdGhpcyBtYW5hZ2VyIHdvcmtzIGZvci5cbiAqL1xuZnVuY3Rpb24gRmlsdGVyTWFuYWdlcihyZW5kZXJlcilcbntcbiAgICBXZWJHTE1hbmFnZXIuY2FsbCh0aGlzLCByZW5kZXJlcik7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtvYmplY3RbXX1cbiAgICAgKi9cbiAgICB0aGlzLmZpbHRlclN0YWNrID0gW107XG5cbiAgICB0aGlzLmZpbHRlclN0YWNrLnB1c2goe1xuICAgICAgICByZW5kZXJUYXJnZXQ6cmVuZGVyZXIuY3VycmVudFJlbmRlclRhcmdldCxcbiAgICAgICAgZmlsdGVyOltdLFxuICAgICAgICBib3VuZHM6bnVsbFxuICAgIH0pO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7UElYSS5SZW5kZXJUYXJnZXRbXX1cbiAgICAgKi9cbiAgICB0aGlzLnRleHR1cmVQb29sID0gW107XG5cbiAgICAvKipcbiAgICAgKiBUaGUgc2l6ZSBvZiB0aGUgdGV4dHVyZVxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5SZWN0YW5nbGV9XG4gICAgICovXG4gICAgLy8gbGlzdGVuIGZvciBjb250ZXh0IGFuZCB1cGRhdGUgbmVjZXNzYXJ5IGJ1ZmZlcnNcbiAgICAvL1RPRE8gbWFrZSB0aGlzIGR5bmFtaWMhXG4gICAgLy9UT0RPIHRlc3QgdGhpcyBvdXQgYnkgZm9yY2VzIHBvd2VyIG9mIHR3bz9cbiAgICB0aGlzLnRleHR1cmVTaXplID0gbmV3IG1hdGguUmVjdGFuZ2xlKDAsIDAsIHJlbmRlcmVyLndpZHRoLCByZW5kZXJlci5oZWlnaHQpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGN1cnJlbnQgZnJhbWVcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuUmVjdGFuZ2xlfVxuICAgICAqL1xuICAgIHRoaXMuY3VycmVudEZyYW1lID0gbnVsbDtcbn1cblxuRmlsdGVyTWFuYWdlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFdlYkdMTWFuYWdlci5wcm90b3R5cGUpO1xuRmlsdGVyTWFuYWdlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBGaWx0ZXJNYW5hZ2VyO1xubW9kdWxlLmV4cG9ydHMgPSBGaWx0ZXJNYW5hZ2VyO1xuXG5cbi8qKlxuICogQ2FsbGVkIHdoZW4gdGhlcmUgaXMgYSBXZWJHTCBjb250ZXh0IGNoYW5nZS5cbiAqXG4gKi9cbkZpbHRlck1hbmFnZXIucHJvdG90eXBlLm9uQ29udGV4dENoYW5nZSA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy50ZXh0dXJlUG9vbC5sZW5ndGggPSAwO1xuXG4gICAgdmFyIGdsID0gdGhpcy5yZW5kZXJlci5nbDtcbiAgICB0aGlzLnF1YWQgPSBuZXcgUXVhZChnbCk7XG59O1xuXG4vKipcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5XZWJHTFJlbmRlcmVyfVxuICogQHBhcmFtIGJ1ZmZlciB7QXJyYXlCdWZmZXJ9XG4gKi9cbkZpbHRlck1hbmFnZXIucHJvdG90eXBlLnNldEZpbHRlclN0YWNrID0gZnVuY3Rpb24gKCBmaWx0ZXJTdGFjayApXG57XG4gICAgdGhpcy5maWx0ZXJTdGFjayA9IGZpbHRlclN0YWNrO1xufTtcblxuLyoqXG4gKiBBcHBsaWVzIHRoZSBmaWx0ZXIgYW5kIGFkZHMgaXQgdG8gdGhlIGN1cnJlbnQgZmlsdGVyIHN0YWNrLlxuICpcbiAqIEBwYXJhbSB0YXJnZXQge1BJWEkuRGlzcGxheU9iamVjdH1cbiAqIEBwYXJhbSBmaWx0ZXJzIHtQSVhJLkFic3RyYWN0RmlsZXJbXX0gdGhlIGZpbHRlcnMgdGhhdCB3aWxsIGJlIHB1c2hlZCB0byB0aGUgY3VycmVudCBmaWx0ZXIgc3RhY2tcbiAqL1xuRmlsdGVyTWFuYWdlci5wcm90b3R5cGUucHVzaEZpbHRlciA9IGZ1bmN0aW9uICh0YXJnZXQsIGZpbHRlcnMpXG57XG4gICAgLy8gZ2V0IHRoZSBib3VuZHMgb2YgdGhlIG9iamVjdC4uXG4gICAgLy8gVE9ETyByZXBsYWNlIGNsb25lIHdpdGggYSBjb3B5IHRvIHNhdmUgb2JqZWN0IGNyZWF0aW9uXG4gICAgdmFyIGJvdW5kcyA9IHRhcmdldC5maWx0ZXJBcmVhID8gdGFyZ2V0LmZpbHRlckFyZWEuY2xvbmUoKSA6IHRhcmdldC5nZXRCb3VuZHMoKTtcblxuICAgIC8vYm91bmRzID0gYm91bmRzLmNsb25lKCk7XG5cbiAgICAvLyByb3VuZCBvZmYgdGhlIHJlY3RhbmdsZSB0byBnZXQgYSBuaWNlIHNtb29vb29vb3RoIGZpbHRlciA6KVxuICAgIGJvdW5kcy54ID0gYm91bmRzLnggfCAwO1xuICAgIGJvdW5kcy55ID0gYm91bmRzLnkgfCAwO1xuICAgIGJvdW5kcy53aWR0aCA9IGJvdW5kcy53aWR0aCB8IDA7XG4gICAgYm91bmRzLmhlaWdodCA9IGJvdW5kcy5oZWlnaHQgfCAwO1xuXG5cbiAgICAvLyBwYWRkaW5nIVxuICAgIHZhciBwYWRkaW5nID0gZmlsdGVyc1swXS5wYWRkaW5nIHwgMDtcbiAgICBib3VuZHMueCAtPSBwYWRkaW5nO1xuICAgIGJvdW5kcy55IC09IHBhZGRpbmc7XG4gICAgYm91bmRzLndpZHRoICs9IHBhZGRpbmcgKiAyO1xuICAgIGJvdW5kcy5oZWlnaHQgKz0gcGFkZGluZyAqIDI7XG5cblxuICAgIGlmKHRoaXMucmVuZGVyZXIuY3VycmVudFJlbmRlclRhcmdldC50cmFuc2Zvcm0pXG4gICAge1xuICAgICAgICAvL1RPRE8gdGhpcyB3aWxsIGJyZWFrIGlmIHRoZSByZW5kZXJUZXh0dXJlIHRyYW5zZm9ybSBpcyBhbnl0aGluZyBvdGhlciB0aGFuIGEgdHJhbnNsYXRpb24uXG4gICAgICAgIC8vV2lsbCBuZWVkIHRvIHRha2UgdGhlIGZ1bGwgbWF0cml4IHRyYW5zZm9ybSBpbnRvIGFjb3VudC4uXG4gICAgICAgIHZhciB0cmFuc2Zvcm0gPSB0aGlzLnJlbmRlcmVyLmN1cnJlbnRSZW5kZXJUYXJnZXQudHJhbnNmb3JtO1xuXG4gICAgICAgIGJvdW5kcy54ICs9IHRyYW5zZm9ybS50eDtcbiAgICAgICAgYm91bmRzLnkgKz0gdHJhbnNmb3JtLnR5O1xuXG4gICAgICAgIHRoaXMuY2FwRmlsdGVyQXJlYSggYm91bmRzICk7XG5cbiAgICAgICAgYm91bmRzLnggLT0gdHJhbnNmb3JtLnR4O1xuICAgICAgICBib3VuZHMueSAtPSB0cmFuc2Zvcm0udHk7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgICB0aGlzLmNhcEZpbHRlckFyZWEoIGJvdW5kcyApO1xuICAgIH1cblxuICAgIGlmKGJvdW5kcy53aWR0aCA+IDAgJiYgYm91bmRzLmhlaWdodCA+IDApXG4gICAge1xuICAgICAgICB0aGlzLmN1cnJlbnRGcmFtZSA9IGJvdW5kcztcblxuICAgICAgICB2YXIgdGV4dHVyZSA9IHRoaXMuZ2V0UmVuZGVyVGFyZ2V0KCk7XG5cbiAgICAgICAgdGhpcy5yZW5kZXJlci5zZXRSZW5kZXJUYXJnZXQodGV4dHVyZSk7XG5cbiAgICAgICAgLy8gY2xlYXIgdGhlIHRleHR1cmUuLlxuICAgICAgICB0ZXh0dXJlLmNsZWFyKCk7XG5cbiAgICAgICAgLy8gVE9ETyBnZXQgcmlkIG9mIG9iamVjdCBjcmVhdGlvbiFcbiAgICAgICAgdGhpcy5maWx0ZXJTdGFjay5wdXNoKHtcbiAgICAgICAgICAgIHJlbmRlclRhcmdldDogdGV4dHVyZSxcbiAgICAgICAgICAgIGZpbHRlcjogZmlsdGVyc1xuICAgICAgICB9KTtcblxuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICAvLyBwdXNoIHNvbXRoaW5nIG9uIHRvIHRoZSBzdGFjayB0aGF0IGlzIGVtcHR5XG4gICAgICAgIHRoaXMuZmlsdGVyU3RhY2sucHVzaCh7XG4gICAgICAgICAgICByZW5kZXJUYXJnZXQ6IG51bGwsXG4gICAgICAgICAgICBmaWx0ZXI6IGZpbHRlcnNcbiAgICAgICAgfSk7XG4gICAgfVxufTtcblxuXG4vKipcbiAqIFJlbW92ZXMgdGhlIGxhc3QgZmlsdGVyIGZyb20gdGhlIGZpbHRlciBzdGFjayBhbmQgcmV0dXJucyBpdC5cbiAqXG4gKi9cbkZpbHRlck1hbmFnZXIucHJvdG90eXBlLnBvcEZpbHRlciA9IGZ1bmN0aW9uICgpXG57XG4gICAgdmFyIGZpbHRlckRhdGEgPSB0aGlzLmZpbHRlclN0YWNrLnBvcCgpO1xuICAgIHZhciBwcmV2aW91c0ZpbHRlckRhdGEgPSB0aGlzLmZpbHRlclN0YWNrW3RoaXMuZmlsdGVyU3RhY2subGVuZ3RoLTFdO1xuXG4gICAgdmFyIGlucHV0ID0gZmlsdGVyRGF0YS5yZW5kZXJUYXJnZXQ7XG5cbiAgICAvLyBpZiB0aGUgcmVuZGVyVGFyZ2V0IGlzIG51bGwgdGhlbiB3ZSBkb24ndCBhcHBseSB0aGUgZmlsdGVyIGFzIGl0cyBvZmZzY3JlZW5cbiAgICBpZighZmlsdGVyRGF0YS5yZW5kZXJUYXJnZXQpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFyIG91dHB1dCA9IHByZXZpb3VzRmlsdGVyRGF0YS5yZW5kZXJUYXJnZXQ7XG5cbiAgICAvLyB1c2UgcHJvZ3JhbVxuICAgIHZhciBnbCA9IHRoaXMucmVuZGVyZXIuZ2w7XG5cblxuICAgIHRoaXMuY3VycmVudEZyYW1lID0gaW5wdXQuZnJhbWU7XG5cbiAgICB0aGlzLnF1YWQubWFwKHRoaXMudGV4dHVyZVNpemUsIGlucHV0LmZyYW1lKTtcblxuXG4gICAgLy8gVE9ETy4uIHRoaXMgcHJvYmFibHkgb25seSBuZWVkcyB0byBiZSBkb25lIG9uY2UhXG4gICAgZ2wuYmluZEJ1ZmZlcihnbC5BUlJBWV9CVUZGRVIsIHRoaXMucXVhZC52ZXJ0ZXhCdWZmZXIpO1xuICAgIGdsLmJpbmRCdWZmZXIoZ2wuRUxFTUVOVF9BUlJBWV9CVUZGRVIsIHRoaXMucXVhZC5pbmRleEJ1ZmZlcik7XG5cbiAgICB2YXIgZmlsdGVycyA9IGZpbHRlckRhdGEuZmlsdGVyO1xuXG4gICAgLy8gYXNzdW1pbmcgYWxsIGZpbHRlcnMgZm9sbG93IHRoZSBjb3JyZWN0IGZvcm1hdD8/XG4gICAgZ2wudmVydGV4QXR0cmliUG9pbnRlcih0aGlzLnJlbmRlcmVyLnNoYWRlck1hbmFnZXIuZGVmYXVsdFNoYWRlci5hdHRyaWJ1dGVzLmFWZXJ0ZXhQb3NpdGlvbiwgMiwgZ2wuRkxPQVQsIGZhbHNlLCAwLCAwKTtcbiAgICBnbC52ZXJ0ZXhBdHRyaWJQb2ludGVyKHRoaXMucmVuZGVyZXIuc2hhZGVyTWFuYWdlci5kZWZhdWx0U2hhZGVyLmF0dHJpYnV0ZXMuYVRleHR1cmVDb29yZCwgMiwgZ2wuRkxPQVQsIGZhbHNlLCAwLCAyICogNCAqIDQpO1xuICAgIGdsLnZlcnRleEF0dHJpYlBvaW50ZXIodGhpcy5yZW5kZXJlci5zaGFkZXJNYW5hZ2VyLmRlZmF1bHRTaGFkZXIuYXR0cmlidXRlcy5hQ29sb3IsIDQsIGdsLkZMT0FULCBmYWxzZSwgMCwgNCAqIDQgKiA0KTtcblxuICAgIC8vIHJlc3RvcmUgdGhlIG5vcm1hbCBibGVuZG1vZGUhXG4gICAgdGhpcy5yZW5kZXJlci5ibGVuZE1vZGVNYW5hZ2VyLnNldEJsZW5kTW9kZShDT05TVC5CTEVORF9NT0RFUy5OT1JNQUwpO1xuXG4gICAgaWYgKGZpbHRlcnMubGVuZ3RoID09PSAxKVxuICAgIHtcbiAgICAgICAgLy8gVE9ETyAoY2VuZ2xlcikgLSBUaGVyZSBoYXMgdG8gYmUgYSBiZXR0ZXIgd2F5IHRoZW4gc2V0dGluZyB0aGlzIGVhY2ggdGltZT9cbiAgICAgICAgaWYgKGZpbHRlcnNbMF0udW5pZm9ybXMuZGltZW5zaW9ucylcbiAgICAgICAge1xuICAgICAgICAgICAgZmlsdGVyc1swXS51bmlmb3Jtcy5kaW1lbnNpb25zLnZhbHVlWzBdID0gdGhpcy5yZW5kZXJlci53aWR0aDtcbiAgICAgICAgICAgIGZpbHRlcnNbMF0udW5pZm9ybXMuZGltZW5zaW9ucy52YWx1ZVsxXSA9IHRoaXMucmVuZGVyZXIuaGVpZ2h0O1xuICAgICAgICAgICAgZmlsdGVyc1swXS51bmlmb3Jtcy5kaW1lbnNpb25zLnZhbHVlWzJdID0gdGhpcy5xdWFkLnZlcnRpY2VzWzBdO1xuICAgICAgICAgICAgZmlsdGVyc1swXS51bmlmb3Jtcy5kaW1lbnNpb25zLnZhbHVlWzNdID0gdGhpcy5xdWFkLnZlcnRpY2VzWzVdO1xuICAgICAgICB9XG5cbiAgICAgICAgZmlsdGVyc1swXS5hcHBseUZpbHRlciggdGhpcy5yZW5kZXJlciwgaW5wdXQsIG91dHB1dCApO1xuICAgICAgICB0aGlzLnJldHVyblJlbmRlclRhcmdldCggaW5wdXQgKTtcblxuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICB2YXIgZmxpcFRleHR1cmUgPSBpbnB1dDtcbiAgICAgICAgdmFyIGZsb3BUZXh0dXJlID0gdGhpcy5nZXRSZW5kZXJUYXJnZXQodHJ1ZSk7XG5cbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBmaWx0ZXJzLmxlbmd0aC0xOyBpKyspXG4gICAgICAgIHtcbiAgICAgICAgICAgIHZhciBmaWx0ZXIgPSBmaWx0ZXJzW2ldO1xuXG4gICAgICAgICAgICAvLyBUT0RPIChjZW5nbGVyKSAtIFRoZXJlIGhhcyB0byBiZSBhIGJldHRlciB3YXkgdGhlbiBzZXR0aW5nIHRoaXMgZWFjaCB0aW1lP1xuICAgICAgICAgICAgaWYgKGZpbHRlci51bmlmb3Jtcy5kaW1lbnNpb25zKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGZpbHRlci51bmlmb3Jtcy5kaW1lbnNpb25zLnZhbHVlWzBdID0gdGhpcy5yZW5kZXJlci53aWR0aDtcbiAgICAgICAgICAgICAgICBmaWx0ZXIudW5pZm9ybXMuZGltZW5zaW9ucy52YWx1ZVsxXSA9IHRoaXMucmVuZGVyZXIuaGVpZ2h0O1xuICAgICAgICAgICAgICAgIGZpbHRlci51bmlmb3Jtcy5kaW1lbnNpb25zLnZhbHVlWzJdID0gdGhpcy5xdWFkLnZlcnRpY2VzWzBdO1xuICAgICAgICAgICAgICAgIGZpbHRlci51bmlmb3Jtcy5kaW1lbnNpb25zLnZhbHVlWzNdID0gdGhpcy5xdWFkLnZlcnRpY2VzWzVdO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBmaWx0ZXIuYXBwbHlGaWx0ZXIoIHRoaXMucmVuZGVyZXIsIGZsaXBUZXh0dXJlLCBmbG9wVGV4dHVyZSApO1xuXG4gICAgICAgICAgICB2YXIgdGVtcCA9IGZsaXBUZXh0dXJlO1xuICAgICAgICAgICAgZmxpcFRleHR1cmUgPSBmbG9wVGV4dHVyZTtcbiAgICAgICAgICAgIGZsb3BUZXh0dXJlID0gdGVtcDtcbiAgICAgICAgfVxuXG4gICAgICAgIGZpbHRlcnNbZmlsdGVycy5sZW5ndGgtMV0uYXBwbHlGaWx0ZXIoIHRoaXMucmVuZGVyZXIsIGZsaXBUZXh0dXJlLCBvdXRwdXQgKTtcblxuICAgICAgICB0aGlzLnJldHVyblJlbmRlclRhcmdldCggZmxpcFRleHR1cmUgKTtcbiAgICAgICAgdGhpcy5yZXR1cm5SZW5kZXJUYXJnZXQoIGZsb3BUZXh0dXJlICk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZpbHRlckRhdGEuZmlsdGVyO1xufTtcblxuLyoqXG4gKiBHcmFicyBhbiByZW5kZXIgdGFyZ2V0IGZyb20gdGhlIGludGVybmFsIHBvb2xcbiAqXG4gKiBAcGFyYW0gY2xlYXIge2Jvb2xlYW59IFdoZXRoZXIgb3Igbm90IHdlIG5lZWQgdG8gY2xlYXIgdGhlIFJlbmRlclRhcmdldFxuICogQHJldHVybiB7UmVuZGVyVGFyZ2V0fVxuICovXG5GaWx0ZXJNYW5hZ2VyLnByb3RvdHlwZS5nZXRSZW5kZXJUYXJnZXQgPSBmdW5jdGlvbiAoIGNsZWFyIClcbntcbiAgICB2YXIgcmVuZGVyVGFyZ2V0ID0gdGhpcy50ZXh0dXJlUG9vbC5wb3AoKSB8fCBuZXcgUmVuZGVyVGFyZ2V0KHRoaXMucmVuZGVyZXIuZ2wsIHRoaXMudGV4dHVyZVNpemUud2lkdGgsIHRoaXMudGV4dHVyZVNpemUuaGVpZ2h0LCBDT05TVC5TQ0FMRV9NT0RFUy5MSU5FQVIsIHRoaXMucmVuZGVyZXIucmVzb2x1dGlvbiAqIENPTlNULkZJTFRFUl9SRVNPTFVUSU9OKTtcbiAgICByZW5kZXJUYXJnZXQuZnJhbWUgPSB0aGlzLmN1cnJlbnRGcmFtZTtcblxuICAgIGlmIChjbGVhcilcbiAgICB7XG4gICAgICAgIHJlbmRlclRhcmdldC5jbGVhcih0cnVlKTtcbiAgICB9XG5cbiAgICByZXR1cm4gcmVuZGVyVGFyZ2V0O1xufTtcblxuLypcbiAqIFJldHVybnMgYSBSZW5kZXJUYXJnZXQgdG8gdGhlIGludGVybmFsIHBvb2xcbiAqIEBwYXJhbSByZW5kZXJUYXJnZXQge1JlbmRlclRhcmdldH0gVGhlIFJlbmRlclRhcmdldCB3ZSB3YW50IHRvIHJldHVybiB0byB0aGUgcG9vbFxuICovXG5GaWx0ZXJNYW5hZ2VyLnByb3RvdHlwZS5yZXR1cm5SZW5kZXJUYXJnZXQgPSBmdW5jdGlvbiAocmVuZGVyVGFyZ2V0KVxue1xuICAgIHRoaXMudGV4dHVyZVBvb2wucHVzaCggcmVuZGVyVGFyZ2V0ICk7XG59O1xuXG4vKlxuICogQXBwbGllcyB0aGUgZmlsdGVyXG4gKiBAcGFyYW0gc2hhZGVyIHtTaGFkZXJ9IFRoZSBzaGFkZXIgdG8gdXBsb2FkXG4gKiBAcGFyYW0gaW5wdXRUYXJnZXQge1JlbmRlclRhcmdldH1cbiAqIEBwYXJhbSBvdXRwdXRUYXJnZXQge1JlbmRlclRhcmdldH1cbiAqIEBwYXJhbSBjbGVhciB7Ym9vbGVhbn0gV2hldGhlciBvciBub3Qgd2Ugd2FudCB0byBjbGVhciB0aGUgb3V0cHV0VGFyZ2V0XG4gKi9cbkZpbHRlck1hbmFnZXIucHJvdG90eXBlLmFwcGx5RmlsdGVyID0gZnVuY3Rpb24gKHNoYWRlciwgaW5wdXRUYXJnZXQsIG91dHB1dFRhcmdldCwgY2xlYXIpXG57XG4gICAgdmFyIGdsID0gdGhpcy5yZW5kZXJlci5nbDtcblxuICAgIHRoaXMucmVuZGVyZXIuc2V0UmVuZGVyVGFyZ2V0KG91dHB1dFRhcmdldCk7XG5cbiAgICBpZiAoY2xlYXIpXG4gICAge1xuICAgICAgICBvdXRwdXRUYXJnZXQuY2xlYXIoKTtcbiAgICB9XG5cbiAgICAvLyBzZXQgdGhlIHNoYWRlclxuICAgIHRoaXMucmVuZGVyZXIuc2hhZGVyTWFuYWdlci5zZXRTaGFkZXIoc2hhZGVyKTtcblxuICAgIC8vIFRPRE8gKGNlbmdsZXIpIC0gQ2FuIHRoaXMgYmUgY2FjaGVkIGFuZCBub3QgYHRvQXJyYXlgZWQgZWFjaCBmcmFtZT9cbiAgICBzaGFkZXIudW5pZm9ybXMucHJvamVjdGlvbk1hdHJpeC52YWx1ZSA9IHRoaXMucmVuZGVyZXIuY3VycmVudFJlbmRlclRhcmdldC5wcm9qZWN0aW9uTWF0cml4LnRvQXJyYXkodHJ1ZSk7XG5cbiAgICAvL1RPRE8gY2FuIHRoaXMgYmUgb3B0aW1pc2VkP1xuICAgIHNoYWRlci5zeW5jVW5pZm9ybXMoKTtcbi8qXG4gICAgZ2wudmVydGV4QXR0cmliUG9pbnRlcihzaGFkZXIuYXR0cmlidXRlcy5hVmVydGV4UG9zaXRpb24sIDIsIGdsLkZMT0FULCBmYWxzZSwgMCwgMCk7XG4gICAgZ2wudmVydGV4QXR0cmliUG9pbnRlcihzaGFkZXIuYXR0cmlidXRlcy5hVGV4dHVyZUNvb3JkLCAyLCBnbC5GTE9BVCwgZmFsc2UsIDAsIDIgKiA0ICogNCk7XG4gICAgZ2wudmVydGV4QXR0cmliUG9pbnRlcihzaGFkZXIuYXR0cmlidXRlcy5hQ29sb3IsIDQsIGdsLkZMT0FULCBmYWxzZSwgMCwgNCAqIDQgKiA0KTtcbiovXG5cbiAgICBnbC5hY3RpdmVUZXh0dXJlKGdsLlRFWFRVUkUwKTtcbiAgICBnbC5iaW5kVGV4dHVyZShnbC5URVhUVVJFXzJELCBpbnB1dFRhcmdldC50ZXh0dXJlKTtcblxuICAgIGdsLmRyYXdFbGVtZW50cyhnbC5UUklBTkdMRVMsIDYsIGdsLlVOU0lHTkVEX1NIT1JULCAwICk7XG4gICAgdGhpcy5yZW5kZXJlci5kcmF3Q291bnQrKztcbn07XG5cbi8qXG4gKiBDYWxjdWxhdGVzIHRoZSBtYXBwZWQgbWF0cml4XG4gKiBAcGFyYW0gZmlsdGVyQXJlYSB7UmVjdGFuZ2xlfSBUaGUgZmlsdGVyIGFyZWFcbiAqIEBwYXJhbSBzcHJpdGUge1Nwcml0ZX0gdGhlIHRhcmdldCBzcHJpdGVcbiAqIEBwYXJhbSBvdXRwdXRNYXRyaXgge01hdHJpeH0gQGFsdmluXG4gKi9cbi8vIFRPRE8gcGxheWluZyBhcm91bmQgaGVyZS4uIHRoaXMgaXMgdGVtcG9yYXJ5IC0gKHdpbGwgZW5kIHVwIGluIHRoZSBzaGFkZXIpXG5GaWx0ZXJNYW5hZ2VyLnByb3RvdHlwZS5jYWxjdWxhdGVNYXBwZWRNYXRyaXggPSBmdW5jdGlvbiAoZmlsdGVyQXJlYSwgc3ByaXRlLCBvdXRwdXRNYXRyaXgpXG57XG4gICAgdmFyIHdvcmxkVHJhbnNmb3JtID0gc3ByaXRlLndvcmxkVHJhbnNmb3JtLmNvcHkobWF0aC5NYXRyaXguVEVNUF9NQVRSSVgpLFxuICAgIHRleHR1cmUgPSBzcHJpdGUuX3RleHR1cmUuYmFzZVRleHR1cmU7XG5cbiAgICB2YXIgbWFwcGVkTWF0cml4ID0gb3V0cHV0TWF0cml4LmlkZW50aXR5KCk7XG5cbiAgICAvLyBzY2FsZS4uXG4gICAgdmFyIHJhdGlvID0gdGhpcy50ZXh0dXJlU2l6ZS5oZWlnaHQgLyB0aGlzLnRleHR1cmVTaXplLndpZHRoO1xuXG4gICAgbWFwcGVkTWF0cml4LnRyYW5zbGF0ZShmaWx0ZXJBcmVhLnggLyB0aGlzLnRleHR1cmVTaXplLndpZHRoLCBmaWx0ZXJBcmVhLnkgLyB0aGlzLnRleHR1cmVTaXplLmhlaWdodCApO1xuXG4gICAgbWFwcGVkTWF0cml4LnNjYWxlKDEgLCByYXRpbyk7XG5cbiAgICB2YXIgdHJhbnNsYXRlU2NhbGVYID0gKHRoaXMudGV4dHVyZVNpemUud2lkdGggLyB0ZXh0dXJlLndpZHRoKTtcbiAgICB2YXIgdHJhbnNsYXRlU2NhbGVZID0gKHRoaXMudGV4dHVyZVNpemUuaGVpZ2h0IC8gdGV4dHVyZS5oZWlnaHQpO1xuXG4gICAgd29ybGRUcmFuc2Zvcm0udHggLz0gdGV4dHVyZS53aWR0aCAqIHRyYW5zbGF0ZVNjYWxlWDtcbiAgICB3b3JsZFRyYW5zZm9ybS50eSAvPSB0ZXh0dXJlLndpZHRoICogdHJhbnNsYXRlU2NhbGVYO1xuXG4gICAgd29ybGRUcmFuc2Zvcm0uaW52ZXJ0KCk7XG5cbiAgICBtYXBwZWRNYXRyaXgucHJlcGVuZCh3b3JsZFRyYW5zZm9ybSk7XG5cbiAgICAvLyBhcHBseSBpbnZlcnNlIHNjYWxlLi5cbiAgICBtYXBwZWRNYXRyaXguc2NhbGUoMSAsIDEvcmF0aW8pO1xuXG4gICAgbWFwcGVkTWF0cml4LnNjYWxlKCB0cmFuc2xhdGVTY2FsZVggLCB0cmFuc2xhdGVTY2FsZVkgKTtcblxuICAgIG1hcHBlZE1hdHJpeC50cmFuc2xhdGUoc3ByaXRlLmFuY2hvci54LCBzcHJpdGUuYW5jaG9yLnkpO1xuXG4gICAgcmV0dXJuIG1hcHBlZE1hdHJpeDtcblxuICAgIC8vIEtlZXBpbmcgdGhlIG9yZ2luYWwgYXMgYSByZW1pbmRlciB0byBtZSBvbiBob3cgdGhpcyB3b3JrcyFcbiAgICAvL1xuICAgIC8vIHZhciBtID0gbmV3IG1hdGguTWF0cml4KCk7XG5cbiAgICAvLyAvLyBzY2FsZS4uXG4gICAgLy8gdmFyIHJhdGlvID0gdGhpcy50ZXh0dXJlU2l6ZS5oZWlnaHQgLyB0aGlzLnRleHR1cmVTaXplLndpZHRoO1xuXG4gICAgLy8gbS50cmFuc2xhdGUoZmlsdGVyQXJlYS54IC8gdGhpcy50ZXh0dXJlU2l6ZS53aWR0aCwgZmlsdGVyQXJlYS55IC8gdGhpcy50ZXh0dXJlU2l6ZS5oZWlnaHQpO1xuXG5cbiAgICAvLyBtLnNjYWxlKDEgLCByYXRpbyk7XG5cblxuICAgIC8vIHZhciB0cmFuc2Zvcm0gPSB3dC5jbG9uZSgpO1xuXG4gICAgLy8gdmFyIHRyYW5zbGF0ZVNjYWxlWCA9ICh0aGlzLnRleHR1cmVTaXplLndpZHRoIC8gNjIwKTtcbiAgICAvLyB2YXIgdHJhbnNsYXRlU2NhbGVZID0gKHRoaXMudGV4dHVyZVNpemUuaGVpZ2h0IC8gMzgwKTtcblxuICAgIC8vIHRyYW5zZm9ybS50eCAvPSA2MjAgKiB0cmFuc2xhdGVTY2FsZVg7XG4gICAgLy8gdHJhbnNmb3JtLnR5IC89IDYyMCAqIHRyYW5zbGF0ZVNjYWxlWDtcblxuICAgIC8vIHRyYW5zZm9ybS5pbnZlcnQoKTtcblxuICAgIC8vIHRyYW5zZm9ybS5hcHBlbmQobSk7XG5cbiAgICAvLyAvLyBhcHBseSBpbnZlcnNlIHNjYWxlLi5cbiAgICAvLyB0cmFuc2Zvcm0uc2NhbGUoMSAsIDEvcmF0aW8pO1xuXG4gICAgLy8gdHJhbnNmb3JtLnNjYWxlKCB0cmFuc2xhdGVTY2FsZVggLCB0cmFuc2xhdGVTY2FsZVkgKTtcblxuICAgIC8vIHJldHVybiB0cmFuc2Zvcm07XG59O1xuXG4vKlxuICogQ29uc3RyYWlucyB0aGUgZmlsdGVyIGFyZWEgdG8gdGhlIHRleHR1cmUgc2l6ZVxuICogQHBhcmFtIGZpbHRlckFyZWEge1JlY3RhbmdsZX0gVGhlIGZpbHRlciBhcmVhIHdlIHdhbnQgdG8gY2FwXG4gKi9cbkZpbHRlck1hbmFnZXIucHJvdG90eXBlLmNhcEZpbHRlckFyZWEgPSBmdW5jdGlvbiAoZmlsdGVyQXJlYSlcbntcbiAgICBpZiAoZmlsdGVyQXJlYS54IDwgMClcbiAgICB7XG4gICAgICAgIGZpbHRlckFyZWEud2lkdGggKz0gZmlsdGVyQXJlYS54O1xuICAgICAgICBmaWx0ZXJBcmVhLnggPSAwO1xuICAgIH1cblxuICAgIGlmIChmaWx0ZXJBcmVhLnkgPCAwKVxuICAgIHtcbiAgICAgICAgZmlsdGVyQXJlYS5oZWlnaHQgKz0gZmlsdGVyQXJlYS55O1xuICAgICAgICBmaWx0ZXJBcmVhLnkgPSAwO1xuICAgIH1cblxuICAgIGlmICggZmlsdGVyQXJlYS54ICsgZmlsdGVyQXJlYS53aWR0aCA+IHRoaXMudGV4dHVyZVNpemUud2lkdGggKVxuICAgIHtcbiAgICAgICAgZmlsdGVyQXJlYS53aWR0aCA9IHRoaXMudGV4dHVyZVNpemUud2lkdGggLSBmaWx0ZXJBcmVhLng7XG4gICAgfVxuXG4gICAgaWYgKCBmaWx0ZXJBcmVhLnkgKyBmaWx0ZXJBcmVhLmhlaWdodCA+IHRoaXMudGV4dHVyZVNpemUuaGVpZ2h0IClcbiAgICB7XG4gICAgICAgIGZpbHRlckFyZWEuaGVpZ2h0ID0gdGhpcy50ZXh0dXJlU2l6ZS5oZWlnaHQgLSBmaWx0ZXJBcmVhLnk7XG4gICAgfVxufTtcblxuLypcbiAqIFJlc2l6ZXMgYWxsIHRoZSByZW5kZXIgdGFyZ2V0cyBpbiB0aGUgcG9vbFxuICogQHBhcmFtIHdpZHRoIHtudW1iZXJ9IHRoZSBuZXcgd2lkdGhcbiAqIEBwYXJhbSBoZWlnaHQge251bWJlcn0gdGhlIG5ldyBoZWlnaHRcbiAqL1xuRmlsdGVyTWFuYWdlci5wcm90b3R5cGUucmVzaXplID0gZnVuY3Rpb24gKCB3aWR0aCwgaGVpZ2h0IClcbntcbiAgICB0aGlzLnRleHR1cmVTaXplLndpZHRoID0gd2lkdGg7XG4gICAgdGhpcy50ZXh0dXJlU2l6ZS5oZWlnaHQgPSBoZWlnaHQ7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMudGV4dHVyZVBvb2wubGVuZ3RoOyBpKyspXG4gICAge1xuICAgICAgICB0aGlzLnRleHR1cmVQb29sW2ldLnJlc2l6ZSggd2lkdGgsIGhlaWdodCApO1xuICAgIH1cbn07XG5cbi8qKlxuICogRGVzdHJveXMgdGhlIGZpbHRlciBhbmQgcmVtb3ZlcyBpdCBmcm9tIHRoZSBmaWx0ZXIgc3RhY2suXG4gKlxuICovXG5GaWx0ZXJNYW5hZ2VyLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLnF1YWQuZGVzdHJveSgpO1xuICAgIFxuICAgIFdlYkdMTWFuYWdlci5wcm90b3R5cGUuZGVzdHJveS5jYWxsKHRoaXMpO1xuICAgIFxuICAgIHRoaXMuZmlsdGVyU3RhY2sgPSBudWxsO1xuICAgIHRoaXMub2Zmc2V0WSA9IDA7XG5cbiAgICAvLyBkZXN0cm95IHRleHR1cmVzXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLnRleHR1cmVQb29sLmxlbmd0aDsgaSsrKVxuICAgIHtcbiAgICAgICAgdGhpcy50ZXh0dXJlUG9vbFtpXS5kZXN0cm95KCk7XG4gICAgfVxuXG4gICAgdGhpcy50ZXh0dXJlUG9vbCA9IG51bGw7XG59O1xuIiwidmFyIFdlYkdMTWFuYWdlciA9IHJlcXVpcmUoJy4vV2ViR0xNYW5hZ2VyJyksXG4gICAgQWxwaGFNYXNrRmlsdGVyID0gcmVxdWlyZSgnLi4vZmlsdGVycy9TcHJpdGVNYXNrRmlsdGVyJyk7XG5cbi8qKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLldlYkdMUmVuZGVyZXJ9IFRoZSByZW5kZXJlciB0aGlzIG1hbmFnZXIgd29ya3MgZm9yLlxuICovXG5mdW5jdGlvbiBNYXNrTWFuYWdlcihyZW5kZXJlcilcbntcbiAgICBXZWJHTE1hbmFnZXIuY2FsbCh0aGlzLCByZW5kZXJlcik7XG5cbiAgICB0aGlzLnN0ZW5jaWxTdGFjayA9IFtdO1xuICAgIHRoaXMucmV2ZXJzZSA9IHRydWU7XG4gICAgdGhpcy5jb3VudCA9IDA7XG5cbiAgICB0aGlzLmFscGhhTWFza1Bvb2wgPSBbXTtcbn1cblxuTWFza01hbmFnZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShXZWJHTE1hbmFnZXIucHJvdG90eXBlKTtcbk1hc2tNYW5hZ2VyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IE1hc2tNYW5hZ2VyO1xubW9kdWxlLmV4cG9ydHMgPSBNYXNrTWFuYWdlcjtcblxuLyoqXG4gKiBBcHBsaWVzIHRoZSBNYXNrIGFuZCBhZGRzIGl0IHRvIHRoZSBjdXJyZW50IGZpbHRlciBzdGFjay5cbiAqXG4gKiBAcGFyYW0gZ3JhcGhpY3Mge1BJWEkuR3JhcGhpY3N9XG4gKiBAcGFyYW0gd2ViR0xEYXRhIHthbnlbXX1cbiAqL1xuTWFza01hbmFnZXIucHJvdG90eXBlLnB1c2hNYXNrID0gZnVuY3Rpb24gKHRhcmdldCwgbWFza0RhdGEpXG57XG4gICAgaWYgKG1hc2tEYXRhLnRleHR1cmUpXG4gICAge1xuICAgICAgICB0aGlzLnB1c2hTcHJpdGVNYXNrKHRhcmdldCwgbWFza0RhdGEpO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICB0aGlzLnB1c2hTdGVuY2lsTWFzayh0YXJnZXQsIG1hc2tEYXRhKTtcbiAgICB9XG5cbn07XG5cbi8qKlxuICogUmVtb3ZlcyB0aGUgbGFzdCBtYXNrIGZyb20gdGhlIG1hc2sgc3RhY2sgYW5kIGRvZXNuJ3QgcmV0dXJuIGl0LlxuICpcbiAqIEBwYXJhbSB0YXJnZXQge1BJWEkuUmVuZGVyVGFyZ2V0fVxuICogQHBhcmFtIG1hc2tEYXRhIHthbnlbXX1cbiAqL1xuTWFza01hbmFnZXIucHJvdG90eXBlLnBvcE1hc2sgPSBmdW5jdGlvbiAodGFyZ2V0LCBtYXNrRGF0YSlcbntcbiAgICBpZiAobWFza0RhdGEudGV4dHVyZSlcbiAgICB7XG4gICAgICAgIHRoaXMucG9wU3ByaXRlTWFzayh0YXJnZXQsIG1hc2tEYXRhKTtcbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgdGhpcy5wb3BTdGVuY2lsTWFzayh0YXJnZXQsIG1hc2tEYXRhKTtcbiAgICB9XG59O1xuXG4vKipcbiAqIEFwcGxpZXMgdGhlIE1hc2sgYW5kIGFkZHMgaXQgdG8gdGhlIGN1cnJlbnQgZmlsdGVyIHN0YWNrLlxuICpcbiAqIEBwYXJhbSB0YXJnZXQge1BJWEkuUmVuZGVyVGFyZ2V0fVxuICogQHBhcmFtIG1hc2tEYXRhIHthbnlbXX1cbiAqL1xuTWFza01hbmFnZXIucHJvdG90eXBlLnB1c2hTcHJpdGVNYXNrID0gZnVuY3Rpb24gKHRhcmdldCwgbWFza0RhdGEpXG57XG4gICAgdmFyIGFscGhhTWFza0ZpbHRlciA9IHRoaXMuYWxwaGFNYXNrUG9vbC5wb3AoKTtcblxuICAgIGlmICghYWxwaGFNYXNrRmlsdGVyKVxuICAgIHtcbiAgICAgICAgYWxwaGFNYXNrRmlsdGVyID0gW25ldyBBbHBoYU1hc2tGaWx0ZXIobWFza0RhdGEpXTtcbiAgICB9XG5cbiAgICBhbHBoYU1hc2tGaWx0ZXJbMF0ubWFza1Nwcml0ZSA9IG1hc2tEYXRhO1xuICAgIHRoaXMucmVuZGVyZXIuZmlsdGVyTWFuYWdlci5wdXNoRmlsdGVyKHRhcmdldCwgYWxwaGFNYXNrRmlsdGVyKTtcbn07XG5cbi8qKlxuICogUmVtb3ZlcyB0aGUgbGFzdCBmaWx0ZXIgZnJvbSB0aGUgZmlsdGVyIHN0YWNrIGFuZCBkb2Vzbid0IHJldHVybiBpdC5cbiAqXG4gKi9cbk1hc2tNYW5hZ2VyLnByb3RvdHlwZS5wb3BTcHJpdGVNYXNrID0gZnVuY3Rpb24gKClcbntcbiAgICB2YXIgZmlsdGVycyA9IHRoaXMucmVuZGVyZXIuZmlsdGVyTWFuYWdlci5wb3BGaWx0ZXIoKTtcblxuICAgIHRoaXMuYWxwaGFNYXNrUG9vbC5wdXNoKGZpbHRlcnMpO1xufTtcblxuXG4vKipcbiAqIEFwcGxpZXMgdGhlIE1hc2sgYW5kIGFkZHMgaXQgdG8gdGhlIGN1cnJlbnQgZmlsdGVyIHN0YWNrLlxuICpcbiAqIEBwYXJhbSB0YXJnZXQge1BJWEkuUmVuZGVyVGFyZ2V0fVxuICogQHBhcmFtIG1hc2tEYXRhIHthbnlbXX1cbiAqL1xuTWFza01hbmFnZXIucHJvdG90eXBlLnB1c2hTdGVuY2lsTWFzayA9IGZ1bmN0aW9uICh0YXJnZXQsIG1hc2tEYXRhKVxue1xuICAgIHRoaXMucmVuZGVyZXIuc3RlbmNpbE1hbmFnZXIucHVzaE1hc2sobWFza0RhdGEpO1xufTtcblxuLyoqXG4gKiBSZW1vdmVzIHRoZSBsYXN0IGZpbHRlciBmcm9tIHRoZSBmaWx0ZXIgc3RhY2sgYW5kIGRvZXNuJ3QgcmV0dXJuIGl0LlxuICpcbiAqIEBwYXJhbSB0YXJnZXQge1BJWEkuUmVuZGVyVGFyZ2V0fVxuICogQHBhcmFtIG1hc2tEYXRhIHthbnlbXX1cbiAqL1xuTWFza01hbmFnZXIucHJvdG90eXBlLnBvcFN0ZW5jaWxNYXNrID0gZnVuY3Rpb24gKHRhcmdldCwgbWFza0RhdGEpXG57XG4gICAgdGhpcy5yZW5kZXJlci5zdGVuY2lsTWFuYWdlci5wb3BNYXNrKG1hc2tEYXRhKTtcbn07XG5cbiIsInZhciBXZWJHTE1hbmFnZXIgPSByZXF1aXJlKCcuL1dlYkdMTWFuYWdlcicpLFxuICAgIFRleHR1cmVTaGFkZXIgPSByZXF1aXJlKCcuLi9zaGFkZXJzL1RleHR1cmVTaGFkZXInKSxcbiAgICBDb21wbGV4UHJpbWl0aXZlU2hhZGVyID0gcmVxdWlyZSgnLi4vc2hhZGVycy9Db21wbGV4UHJpbWl0aXZlU2hhZGVyJyksXG4gICAgUHJpbWl0aXZlU2hhZGVyID0gcmVxdWlyZSgnLi4vc2hhZGVycy9QcmltaXRpdmVTaGFkZXInKSxcbiAgICB1dGlscyA9IHJlcXVpcmUoJy4uLy4uLy4uL3V0aWxzJyk7XG5cbi8qKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQGV4dGVuZHMgUElYSS5XZWJHTE1hbmFnZXJcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5XZWJHTFJlbmRlcmVyfSBUaGUgcmVuZGVyZXIgdGhpcyBtYW5hZ2VyIHdvcmtzIGZvci5cbiAqL1xuZnVuY3Rpb24gU2hhZGVyTWFuYWdlcihyZW5kZXJlcilcbntcbiAgICBXZWJHTE1hbmFnZXIuY2FsbCh0aGlzLCByZW5kZXJlcik7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy5tYXhBdHRpYnMgPSAxMDtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge2FueVtdfVxuICAgICAqL1xuICAgIHRoaXMuYXR0cmliU3RhdGUgPSBbXTtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge2FueVtdfVxuICAgICAqL1xuICAgIHRoaXMudGVtcEF0dHJpYlN0YXRlID0gW107XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMubWF4QXR0aWJzOyBpKyspXG4gICAge1xuICAgICAgICB0aGlzLmF0dHJpYlN0YXRlW2ldID0gZmFsc2U7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7YW55W119XG4gICAgICovXG4gICAgdGhpcy5zdGFjayA9IFtdO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fY3VycmVudElkID0gLTE7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlNoYWRlcn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuY3VycmVudFNoYWRlciA9IG51bGw7XG5cbi8vICAgIHRoaXMuaW5pdFBsdWdpbnMoKTtcbn1cblxuU2hhZGVyTWFuYWdlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFdlYkdMTWFuYWdlci5wcm90b3R5cGUpO1xuU2hhZGVyTWFuYWdlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBTaGFkZXJNYW5hZ2VyO1xudXRpbHMucGx1Z2luVGFyZ2V0Lm1peGluKFNoYWRlck1hbmFnZXIpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IFNoYWRlck1hbmFnZXI7XG5cbi8qKlxuICogQ2FsbGVkIHdoZW4gdGhlcmUgaXMgYSBXZWJHTCBjb250ZXh0IGNoYW5nZS5cbiAqXG4gKi9cblNoYWRlck1hbmFnZXIucHJvdG90eXBlLm9uQ29udGV4dENoYW5nZSA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy5pbml0UGx1Z2lucygpO1xuXG4gICAgdmFyIGdsID0gdGhpcy5yZW5kZXJlci5nbDtcblxuICAgIC8vIGdldCB0aGUgbWF4aW11bSBudW1iZXIgb2YgYXR0cmlidXRlIGNvcnJlY3RseSBhcyB0aGlzIHRlbmRzIHRvIHZhcnlcbiAgICB0aGlzLm1heEF0dGlicyA9IGdsLmdldFBhcmFtZXRlcihnbC5NQVhfVkVSVEVYX0FUVFJJQlMpO1xuXG4gICAgdGhpcy5hdHRyaWJTdGF0ZSA9IFtdO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLm1heEF0dGliczsgaSsrKVxuICAgIHtcbiAgICAgICAgdGhpcy5hdHRyaWJTdGF0ZVtpXSA9IGZhbHNlO1xuICAgIH1cblxuICAgIC8vIFRPRE8gLSBXaHkgYXJlIHRoZXNlIG5vdCBwbHVnaW5zPyBXZSBjYW4ndCBkZWNvdXBsZSBwcmltaXRpdmVzIHVubGVzcyB0aGV5IGFyZS4uLi5cbiAgICB0aGlzLmRlZmF1bHRTaGFkZXIgPSBuZXcgVGV4dHVyZVNoYWRlcih0aGlzKTtcbiAgICB0aGlzLnByaW1pdGl2ZVNoYWRlciA9IG5ldyBQcmltaXRpdmVTaGFkZXIodGhpcyk7XG4gICAgdGhpcy5jb21wbGV4UHJpbWl0aXZlU2hhZGVyID0gbmV3IENvbXBsZXhQcmltaXRpdmVTaGFkZXIodGhpcyk7XG59O1xuXG4vKipcbiAqIFRha2VzIHRoZSBhdHRyaWJ1dGVzIGdpdmVuIGluIHBhcmFtZXRlcnMgYW5kIHVwbG9hZHMgdGhlbS5cbiAqXG4gKiBAcGFyYW0gYXR0cmlicyB7YW55W119IGF0dHJpYnNcbiAqL1xuU2hhZGVyTWFuYWdlci5wcm90b3R5cGUuc2V0QXR0cmlicyA9IGZ1bmN0aW9uIChhdHRyaWJzKVxue1xuICAgIC8vIHJlc2V0IHRlbXAgc3RhdGVcbiAgICB2YXIgaTtcblxuICAgIGZvciAoaSA9IDA7IGkgPCB0aGlzLnRlbXBBdHRyaWJTdGF0ZS5sZW5ndGg7IGkrKylcbiAgICB7XG4gICAgICAgIHRoaXMudGVtcEF0dHJpYlN0YXRlW2ldID0gZmFsc2U7XG4gICAgfVxuXG4gICAgLy8gc2V0IHRoZSBuZXcgYXR0cmlic1xuICAgIGZvciAodmFyIGEgaW4gYXR0cmlicylcbiAgICB7XG4gICAgICAgIHRoaXMudGVtcEF0dHJpYlN0YXRlW2F0dHJpYnNbYV1dID0gdHJ1ZTtcbiAgICB9XG5cbiAgICB2YXIgZ2wgPSB0aGlzLnJlbmRlcmVyLmdsO1xuXG4gICAgZm9yIChpID0gMDsgaSA8IHRoaXMuYXR0cmliU3RhdGUubGVuZ3RoOyBpKyspXG4gICAge1xuICAgICAgICBpZiAodGhpcy5hdHRyaWJTdGF0ZVtpXSAhPT0gdGhpcy50ZW1wQXR0cmliU3RhdGVbaV0pXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuYXR0cmliU3RhdGVbaV0gPSB0aGlzLnRlbXBBdHRyaWJTdGF0ZVtpXTtcblxuICAgICAgICAgICAgaWYgKHRoaXMuYXR0cmliU3RhdGVbaV0pXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgZ2wuZW5hYmxlVmVydGV4QXR0cmliQXJyYXkoaSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgZ2wuZGlzYWJsZVZlcnRleEF0dHJpYkFycmF5KGkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxufTtcblxuLyoqXG4gKiBTZXRzIHRoZSBjdXJyZW50IHNoYWRlci5cbiAqXG4gKiBAcGFyYW0gc2hhZGVyIHtQSVhJLlNoYWRlcn0gdGhlIHNoYWRlciB0byB1cGxvYWRcbiAqL1xuU2hhZGVyTWFuYWdlci5wcm90b3R5cGUuc2V0U2hhZGVyID0gZnVuY3Rpb24gKHNoYWRlcilcbntcbiAgICByZXR1cm47XG4gICAgaWYgKHRoaXMuX2N1cnJlbnRJZCA9PT0gc2hhZGVyLnVpZClcbiAgICB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICB0aGlzLl9jdXJyZW50SWQgPSBzaGFkZXIudWlkO1xuXG4gICAgdGhpcy5jdXJyZW50U2hhZGVyID0gc2hhZGVyO1xuXG4gICAgdGhpcy5yZW5kZXJlci5nbC51c2VQcm9ncmFtKHNoYWRlci5wcm9ncmFtKTtcbiAgICB0aGlzLnNldEF0dHJpYnMoc2hhZGVyLmF0dHJpYnV0ZXMpO1xuXG4gICAgcmV0dXJuIHRydWU7XG59O1xuXG4vKipcbiAqIERlc3Ryb3lzIHRoaXMgb2JqZWN0LlxuICpcbiAqL1xuU2hhZGVyTWFuYWdlci5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy5wcmltaXRpdmVTaGFkZXIuZGVzdHJveSgpO1xuICAgIHRoaXMuY29tcGxleFByaW1pdGl2ZVNoYWRlci5kZXN0cm95KCk7XG4gICAgV2ViR0xNYW5hZ2VyLnByb3RvdHlwZS5kZXN0cm95LmNhbGwodGhpcyk7XG5cbiAgICB0aGlzLmRlc3Ryb3lQbHVnaW5zKCk7XG5cbiAgICB0aGlzLmF0dHJpYlN0YXRlID0gbnVsbDtcblxuICAgIHRoaXMudGVtcEF0dHJpYlN0YXRlID0gbnVsbDtcbn07XG4iLCJ2YXIgV2ViR0xNYW5hZ2VyID0gcmVxdWlyZSgnLi9XZWJHTE1hbmFnZXInKSxcbiAgICB1dGlscyA9IHJlcXVpcmUoJy4uLy4uLy4uL3V0aWxzJyk7XG5cbi8qKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLldlYkdMUmVuZGVyZXJ9IFRoZSByZW5kZXJlciB0aGlzIG1hbmFnZXIgd29ya3MgZm9yLlxuICovXG5mdW5jdGlvbiBXZWJHTE1hc2tNYW5hZ2VyKHJlbmRlcmVyKVxue1xuICAgIFdlYkdMTWFuYWdlci5jYWxsKHRoaXMsIHJlbmRlcmVyKTtcbiAgICB0aGlzLnN0ZW5jaWxNYXNrU3RhY2sgPSBudWxsO1xufVxuXG5XZWJHTE1hc2tNYW5hZ2VyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoV2ViR0xNYW5hZ2VyLnByb3RvdHlwZSk7XG5XZWJHTE1hc2tNYW5hZ2VyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFdlYkdMTWFza01hbmFnZXI7XG5tb2R1bGUuZXhwb3J0cyA9IFdlYkdMTWFza01hbmFnZXI7XG5cbi8qKlxuICogQ2hhbmdlcyB0aGUgbWFzayBzdGFjayB0aGF0IGlzIHVzZWQgYnkgdGhpcyBtYW5hZ2VyLlxuICpcbiAqIEBwYXJhbSBzdGVuY2lsTWFza1N0YWNrIHtQSVhJLlN0ZW5jaWxNYXNrU3RhY2t9IFRoZSBtYXNrIHN0YWNrXG4gKi9cbldlYkdMTWFza01hbmFnZXIucHJvdG90eXBlLnNldE1hc2tTdGFjayA9IGZ1bmN0aW9uICggc3RlbmNpbE1hc2tTdGFjayApXG57XG4gICAgdGhpcy5zdGVuY2lsTWFza1N0YWNrID0gc3RlbmNpbE1hc2tTdGFjaztcblxuICAgIHZhciBnbCA9IHRoaXMucmVuZGVyZXIuZ2w7XG5cbiAgICBpZiAoc3RlbmNpbE1hc2tTdGFjay5zdGVuY2lsU3RhY2subGVuZ3RoID09PSAwKVxuICAgIHtcbiAgICAgICAgZ2wuZGlzYWJsZShnbC5TVEVOQ0lMX1RFU1QpO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICBnbC5lbmFibGUoZ2wuU1RFTkNJTF9URVNUKTtcbiAgICB9XG59O1xuXG4vKipcbiAqIEFwcGxpZXMgdGhlIE1hc2sgYW5kIGFkZHMgaXQgdG8gdGhlIGN1cnJlbnQgZmlsdGVyIHN0YWNrLiBAYWx2aW5cbiAqXG4gKiBAcGFyYW0gZ3JhcGhpY3Mge1BJWEkuR3JhcGhpY3N9XG4gKiBAcGFyYW0gd2ViR0xEYXRhIHthbnlbXX1cbiAqL1xuV2ViR0xNYXNrTWFuYWdlci5wcm90b3R5cGUucHVzaFN0ZW5jaWwgPSBmdW5jdGlvbiAoZ3JhcGhpY3MsIHdlYkdMRGF0YSlcbntcbiAgICB0aGlzLnJlbmRlcmVyLl9hY3RpdmVSZW5kZXJUYXJnZXQuYXR0YWNoU3RlbmNpbEJ1ZmZlcigpO1xuXG4gICAgdmFyIGdsID0gdGhpcy5yZW5kZXJlci5nbCxcbiAgICAgICAgc21zID0gdGhpcy5zdGVuY2lsTWFza1N0YWNrO1xuXG4gICAgdGhpcy5iaW5kR3JhcGhpY3MoZ3JhcGhpY3MsIHdlYkdMRGF0YSk7XG5cbiAgICBpZiAoc21zLnN0ZW5jaWxTdGFjay5sZW5ndGggPT09IDApXG4gICAge1xuICAgICAgICBnbC5lbmFibGUoZ2wuU1RFTkNJTF9URVNUKTtcbiAgICAgICAgZ2wuY2xlYXIoZ2wuU1RFTkNJTF9CVUZGRVJfQklUKTtcbiAgICAgICAgc21zLnJldmVyc2UgPSB0cnVlO1xuICAgICAgICBzbXMuY291bnQgPSAwO1xuICAgIH1cblxuICAgIHNtcy5zdGVuY2lsU3RhY2sucHVzaCh3ZWJHTERhdGEpO1xuXG4gICAgdmFyIGxldmVsID0gc21zLmNvdW50O1xuXG4gICAgZ2wuY29sb3JNYXNrKGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlKTtcblxuICAgIGdsLnN0ZW5jaWxGdW5jKGdsLkFMV0FZUywwLDB4RkYpO1xuICAgIGdsLnN0ZW5jaWxPcChnbC5LRUVQLGdsLktFRVAsZ2wuSU5WRVJUKTtcblxuICAgIC8vIGRyYXcgdGhlIHRyaWFuZ2xlIHN0cmlwIVxuXG4gICAgaWYgKHdlYkdMRGF0YS5tb2RlID09PSAxKVxuICAgIHtcbiAgICAgICAgZ2wuZHJhd0VsZW1lbnRzKGdsLlRSSUFOR0xFX0ZBTiwgIHdlYkdMRGF0YS5pbmRpY2VzLmxlbmd0aCAtIDQsIGdsLlVOU0lHTkVEX1NIT1JULCAwICk7XG5cbiAgICAgICAgaWYgKHNtcy5yZXZlcnNlKVxuICAgICAgICB7XG4gICAgICAgICAgICBnbC5zdGVuY2lsRnVuYyhnbC5FUVVBTCwgMHhGRiAtIGxldmVsLCAweEZGKTtcbiAgICAgICAgICAgIGdsLnN0ZW5jaWxPcChnbC5LRUVQLGdsLktFRVAsZ2wuREVDUik7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgICBnbC5zdGVuY2lsRnVuYyhnbC5FUVVBTCxsZXZlbCwgMHhGRik7XG4gICAgICAgICAgICBnbC5zdGVuY2lsT3AoZ2wuS0VFUCxnbC5LRUVQLGdsLklOQ1IpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gZHJhdyBhIHF1YWQgdG8gaW5jcmVtZW50Li5cbiAgICAgICAgZ2wuZHJhd0VsZW1lbnRzKGdsLlRSSUFOR0xFX0ZBTiwgNCwgZ2wuVU5TSUdORURfU0hPUlQsICggd2ViR0xEYXRhLmluZGljZXMubGVuZ3RoIC0gNCApICogMiApO1xuXG4gICAgICAgIGlmIChzbXMucmV2ZXJzZSlcbiAgICAgICAge1xuICAgICAgICAgICAgZ2wuc3RlbmNpbEZ1bmMoZ2wuRVFVQUwsMHhGRi0obGV2ZWwrMSksIDB4RkYpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2VcbiAgICAgICAge1xuICAgICAgICAgICAgZ2wuc3RlbmNpbEZ1bmMoZ2wuRVFVQUwsbGV2ZWwrMSwgMHhGRik7XG4gICAgICAgIH1cblxuICAgICAgICBzbXMucmV2ZXJzZSA9ICFzbXMucmV2ZXJzZTtcbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgaWYgKCFzbXMucmV2ZXJzZSlcbiAgICAgICAge1xuICAgICAgICAgICAgZ2wuc3RlbmNpbEZ1bmMoZ2wuRVFVQUwsIDB4RkYgLSBsZXZlbCwgMHhGRik7XG4gICAgICAgICAgICBnbC5zdGVuY2lsT3AoZ2wuS0VFUCxnbC5LRUVQLGdsLkRFQ1IpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2VcbiAgICAgICAge1xuICAgICAgICAgICAgZ2wuc3RlbmNpbEZ1bmMoZ2wuRVFVQUwsbGV2ZWwsIDB4RkYpO1xuICAgICAgICAgICAgZ2wuc3RlbmNpbE9wKGdsLktFRVAsZ2wuS0VFUCxnbC5JTkNSKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGdsLmRyYXdFbGVtZW50cyhnbC5UUklBTkdMRV9TVFJJUCwgIHdlYkdMRGF0YS5pbmRpY2VzLmxlbmd0aCwgZ2wuVU5TSUdORURfU0hPUlQsIDAgKTtcblxuICAgICAgICBpZiAoIXNtcy5yZXZlcnNlKVxuICAgICAgICB7XG4gICAgICAgICAgICBnbC5zdGVuY2lsRnVuYyhnbC5FUVVBTCwweEZGLShsZXZlbCsxKSwgMHhGRik7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgICBnbC5zdGVuY2lsRnVuYyhnbC5FUVVBTCxsZXZlbCsxLCAweEZGKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGdsLmNvbG9yTWFzayh0cnVlLCB0cnVlLCB0cnVlLCB0cnVlKTtcbiAgICBnbC5zdGVuY2lsT3AoZ2wuS0VFUCxnbC5LRUVQLGdsLktFRVApO1xuXG4gICAgc21zLmNvdW50Kys7XG59O1xuXG4vKipcbiAqIFRPRE8gdGhpcyBkb2VzIG5vdCBiZWxvbmcgaGVyZSFcbiAqXG4gKiBAcGFyYW0gZ3JhcGhpY3Mge1BJWEkuR3JhcGhpY3N9XG4gKiBAcGFyYW0gd2ViR0xEYXRhIHthbnlbXX1cbiAqL1xuV2ViR0xNYXNrTWFuYWdlci5wcm90b3R5cGUuYmluZEdyYXBoaWNzID0gZnVuY3Rpb24gKGdyYXBoaWNzLCB3ZWJHTERhdGEpXG57XG4gICAgLy9pZiAodGhpcy5fY3VycmVudEdyYXBoaWNzID09PSBncmFwaGljcylyZXR1cm47XG4gICAgdmFyIGdsID0gdGhpcy5yZW5kZXJlci5nbDtcblxuICAgICAvLyBiaW5kIHRoZSBncmFwaGljcyBvYmplY3QuLlxuICAgIHZhciBzaGFkZXIgPSB0aGlzLnJlbmRlcmVyLnBsdWdpbnMuZ3JhcGhpY3MucHJpbWl0aXZlU2hhZGVyO1xuXG4gICAgaWYgKHdlYkdMRGF0YS5tb2RlID09PSAxKVxuICAgIHtcbiAgICAgICAgLypcbiAgICAgICAgc2hhZGVyID0gdGhpcy5yZW5kZXJlci5zaGFkZXJNYW5hZ2VyLmNvbXBsZXhQcmltaXRpdmVTaGFkZXI7XG5cbiAgICAgICAgdGhpcy5yZW5kZXJlci5zaGFkZXJNYW5hZ2VyLnNldFNoYWRlcihzaGFkZXIpO1xuXG4gICAgICAgIGdsLnVuaWZvcm1NYXRyaXgzZnYoc2hhZGVyLnVuaWZvcm1zLnRyYW5zbGF0aW9uTWF0cml4Ll9sb2NhdGlvbiwgZmFsc2UsIGdyYXBoaWNzLndvcmxkVHJhbnNmb3JtLnRvQXJyYXkodHJ1ZSkpO1xuXG4gICAgICAgIGdsLnVuaWZvcm1NYXRyaXgzZnYoc2hhZGVyLnVuaWZvcm1zLnByb2plY3Rpb25NYXRyaXguX2xvY2F0aW9uLCBmYWxzZSwgdGhpcy5yZW5kZXJlci5jdXJyZW50UmVuZGVyVGFyZ2V0LnByb2plY3Rpb25NYXRyaXgudG9BcnJheSh0cnVlKSk7XG5cbiAgICAgICAgZ2wudW5pZm9ybTNmdihzaGFkZXIudW5pZm9ybXMudGludC5fbG9jYXRpb24sIHV0aWxzLmhleDJyZ2IoZ3JhcGhpY3MudGludCkpO1xuXG4gICAgICAgIGdsLnVuaWZvcm0zZnYoc2hhZGVyLnVuaWZvcm1zLmNvbG9yLl9sb2NhdGlvbiwgd2ViR0xEYXRhLmNvbG9yKTtcblxuICAgICAgICBnbC51bmlmb3JtMWYoc2hhZGVyLnVuaWZvcm1zLmFscGhhLl9sb2NhdGlvbiwgZ3JhcGhpY3Mud29ybGRBbHBoYSk7XG5cbiAgICAgICAgZ2wuYmluZEJ1ZmZlcihnbC5BUlJBWV9CVUZGRVIsIHdlYkdMRGF0YS5idWZmZXIpO1xuXG4gICAgICAgIGdsLnZlcnRleEF0dHJpYlBvaW50ZXIoc2hhZGVyLmF0dHJpYnV0ZXMuYVZlcnRleFBvc2l0aW9uLCAyLCBnbC5GTE9BVCwgZmFsc2UsIDQgKiAyLCAwKTtcblxuICAgICAgICAvLyBub3cgZG8gdGhlIHJlc3QuLlxuICAgICAgICAvLyBzZXQgdGhlIGluZGV4IGJ1ZmZlciFcbiAgICAgICAgZ2wuYmluZEJ1ZmZlcihnbC5FTEVNRU5UX0FSUkFZX0JVRkZFUiwgd2ViR0xEYXRhLmluZGV4QnVmZmVyKTtcbiAgICAqL1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICAvL3RoaXMucmVuZGVyZXIuc2hhZGVyTWFuYWdlci5hY3RpdmF0ZVByaW1pdGl2ZVNoYWRlcigpO1xuLy8gICAgICAgIHNoYWRlciA9IHRoaXMucmVuZGVyZXIuc2hhZGVyTWFuYWdlci5wcmltaXRpdmVTaGFkZXI7XG4gICAgICAgXG4gICAgICAgIHRoaXMucmVuZGVyZXIuYmluZFNoYWRlcihzaGFkZXIpXG5cbiAgICAgICAgc2hhZGVyLnVuaWZvcm1zLnRyYW5zbGF0aW9uTWF0cml4ID0gZ3JhcGhpY3Mud29ybGRUcmFuc2Zvcm0udG9BcnJheSh0cnVlKTtcbiAgICAgICAgc2hhZGVyLnVuaWZvcm1zLnRpbnQgPSB1dGlscy5oZXgycmdiKGdyYXBoaWNzLnRpbnQpO1xuICAgICAgICBzaGFkZXIudW5pZm9ybXMuYWxwaGEgPSBncmFwaGljcy53b3JsZEFscGhhO1xuXG5cbiAgICAgICAgZ2wuYmluZEJ1ZmZlcihnbC5BUlJBWV9CVUZGRVIsIHdlYkdMRGF0YS5idWZmZXIpO1xuXG5cbiAgICAgICAgc2hhZGVyLmF0dHJpYnV0ZXMuYVZlcnRleFBvc2l0aW9uLnBvaW50ZXIoZ2wuRkxPQVQsIGZhbHNlLCA0ICogNiwgMCk7XG4gICAgICAgIHNoYWRlci5hdHRyaWJ1dGVzLmFDb2xvci5wb2ludGVyKGdsLkZMT0FULCBmYWxzZSwgNCAqIDYsIDIgKiA0KTtcblxuICAgICAgICBnbC5lbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShzaGFkZXIuYXR0cmlidXRlcy5hVmVydGV4UG9zaXRpb24ubG9jYXRpb24pO1xuICAgICAgICBnbC5lbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShzaGFkZXIuYXR0cmlidXRlcy5hQ29sb3IubG9jYXRpb24pO1xuXG4gICAgICAgIC8vIHNldCB0aGUgaW5kZXggYnVmZmVyIVxuICAgICAgICBnbC5iaW5kQnVmZmVyKGdsLkVMRU1FTlRfQVJSQVlfQlVGRkVSLCB3ZWJHTERhdGEuaW5kZXhCdWZmZXIpO1xuLy8gICAgICAgIGdsLmRyYXdFbGVtZW50cyhnbC5UUklBTkdMRV9TVFJJUCwgIHdlYkdMRGF0YS5pbmRpY2VzLmxlbmd0aCwgZ2wuVU5TSUdORURfU0hPUlQsIDAgKTtcblxuXG4gICAgICAvKiAgdGhpcy5yZW5kZXJlci5zaGFkZXJNYW5hZ2VyLnNldFNoYWRlcihzaGFkZXIpO1xuXG4gICAgICAgIGdsLnVuaWZvcm1NYXRyaXgzZnYoc2hhZGVyLnVuaWZvcm1zLnRyYW5zbGF0aW9uTWF0cml4Ll9sb2NhdGlvbiwgZmFsc2UsIGdyYXBoaWNzLndvcmxkVHJhbnNmb3JtLnRvQXJyYXkodHJ1ZSkpO1xuXG4gICAgICAgIGdsLnVuaWZvcm1NYXRyaXgzZnYoc2hhZGVyLnVuaWZvcm1zLnByb2plY3Rpb25NYXRyaXguX2xvY2F0aW9uLCBmYWxzZSwgdGhpcy5yZW5kZXJlci5jdXJyZW50UmVuZGVyVGFyZ2V0LnByb2plY3Rpb25NYXRyaXgudG9BcnJheSh0cnVlKSk7XG5cbiAgICAgICAgZ2wudW5pZm9ybTNmdihzaGFkZXIudW5pZm9ybXMudGludC5fbG9jYXRpb24sIHV0aWxzLmhleDJyZ2IoZ3JhcGhpY3MudGludCkpO1xuXG4gICAgICAgIGdsLnVuaWZvcm0xZihzaGFkZXIudW5pZm9ybXMuYWxwaGEuX2xvY2F0aW9uLCBncmFwaGljcy53b3JsZEFscGhhKTtcblxuICAgICAgICBnbC5iaW5kQnVmZmVyKGdsLkFSUkFZX0JVRkZFUiwgd2ViR0xEYXRhLmJ1ZmZlcik7XG5cbiAgICAgICAgZ2wudmVydGV4QXR0cmliUG9pbnRlcihzaGFkZXIuYXR0cmlidXRlcy5hVmVydGV4UG9zaXRpb24sIDIsIGdsLkZMT0FULCBmYWxzZSwgNCAqIDYsIDApO1xuICAgICAgICBnbC52ZXJ0ZXhBdHRyaWJQb2ludGVyKHNoYWRlci5hdHRyaWJ1dGVzLmFDb2xvciwgNCwgZ2wuRkxPQVQsIGZhbHNlLDQgKiA2LCAyICogNCk7XG5cbiAgICAgICAgLy8gc2V0IHRoZSBpbmRleCBidWZmZXIhXG4gICAgICAgIGdsLmJpbmRCdWZmZXIoZ2wuRUxFTUVOVF9BUlJBWV9CVUZGRVIsIHdlYkdMRGF0YS5pbmRleEJ1ZmZlcik7Ki9cbiAgICB9XG59O1xuXG4vKipcbiAqIFRPRE8gQGFsdmluXG4gKiBAcGFyYW0gZ3JhcGhpY3Mge1BJWEkuR3JhcGhpY3N9XG4gKiBAcGFyYW0gd2ViR0xEYXRhIHthbnlbXX1cbiAqL1xuV2ViR0xNYXNrTWFuYWdlci5wcm90b3R5cGUucG9wU3RlbmNpbCA9IGZ1bmN0aW9uIChncmFwaGljcywgd2ViR0xEYXRhKVxue1xuICAgIHZhciBnbCA9IHRoaXMucmVuZGVyZXIuZ2wsXG4gICAgICAgIHNtcyA9IHRoaXMuc3RlbmNpbE1hc2tTdGFjaztcblxuICAgIHNtcy5zdGVuY2lsU3RhY2sucG9wKCk7XG5cbiAgICBzbXMuY291bnQtLTtcblxuICAgIGlmIChzbXMuc3RlbmNpbFN0YWNrLmxlbmd0aCA9PT0gMClcbiAgICB7XG4gICAgICAgIC8vIHRoZSBzdGFjayBpcyBlbXB0eSFcbiAgICAgICAgZ2wuZGlzYWJsZShnbC5TVEVOQ0lMX1RFU1QpO1xuXG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG5cbiAgICAgICAgdmFyIGxldmVsID0gc21zLmNvdW50O1xuXG4gICAgICAgIHRoaXMuYmluZEdyYXBoaWNzKGdyYXBoaWNzLCB3ZWJHTERhdGEpO1xuXG4gICAgICAgIGdsLmNvbG9yTWFzayhmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSk7XG5cbiAgICAgICAgaWYgKHdlYkdMRGF0YS5tb2RlID09PSAxKVxuICAgICAgICB7XG4gICAgICAgICAgICBzbXMucmV2ZXJzZSA9ICFzbXMucmV2ZXJzZTtcblxuICAgICAgICAgICAgaWYgKHNtcy5yZXZlcnNlKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGdsLnN0ZW5jaWxGdW5jKGdsLkVRVUFMLCAweEZGIC0gKGxldmVsKzEpLCAweEZGKTtcbiAgICAgICAgICAgICAgICBnbC5zdGVuY2lsT3AoZ2wuS0VFUCxnbC5LRUVQLGdsLklOQ1IpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGdsLnN0ZW5jaWxGdW5jKGdsLkVRVUFMLGxldmVsKzEsIDB4RkYpO1xuICAgICAgICAgICAgICAgIGdsLnN0ZW5jaWxPcChnbC5LRUVQLGdsLktFRVAsZ2wuREVDUik7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIGRyYXcgYSBxdWFkIHRvIGluY3JlbWVudC4uXG4gICAgICAgICAgICBnbC5kcmF3RWxlbWVudHMoZ2wuVFJJQU5HTEVfRkFOLCA0LCBnbC5VTlNJR05FRF9TSE9SVCwgKCB3ZWJHTERhdGEuaW5kaWNlcy5sZW5ndGggLSA0ICkgKiAyICk7XG5cbiAgICAgICAgICAgIGdsLnN0ZW5jaWxGdW5jKGdsLkFMV0FZUywwLDB4RkYpO1xuICAgICAgICAgICAgZ2wuc3RlbmNpbE9wKGdsLktFRVAsZ2wuS0VFUCxnbC5JTlZFUlQpO1xuXG4gICAgICAgICAgICAvLyBkcmF3IHRoZSB0cmlhbmdsZSBzdHJpcCFcbiAgICAgICAgICAgIGdsLmRyYXdFbGVtZW50cyhnbC5UUklBTkdMRV9GQU4sICB3ZWJHTERhdGEuaW5kaWNlcy5sZW5ndGggLSA0LCBnbC5VTlNJR05FRF9TSE9SVCwgMCApO1xuXG4gICAgICAgICAgICB0aGlzLnJlbmRlcmVyLmRyYXdDb3VudCArPSAyO1xuXG4gICAgICAgICAgICBpZiAoIXNtcy5yZXZlcnNlKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGdsLnN0ZW5jaWxGdW5jKGdsLkVRVUFMLDB4RkYtKGxldmVsKSwgMHhGRik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgZ2wuc3RlbmNpbEZ1bmMoZ2wuRVFVQUwsbGV2ZWwsIDB4RkYpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgLy8gIGNvbnNvbGUubG9nKFwiPDw+PlwiKVxuICAgICAgICAgICAgaWYgKCFzbXMucmV2ZXJzZSlcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBnbC5zdGVuY2lsRnVuYyhnbC5FUVVBTCwgMHhGRiAtIChsZXZlbCsxKSwgMHhGRik7XG4gICAgICAgICAgICAgICAgZ2wuc3RlbmNpbE9wKGdsLktFRVAsZ2wuS0VFUCxnbC5JTkNSKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBnbC5zdGVuY2lsRnVuYyhnbC5FUVVBTCxsZXZlbCsxLCAweEZGKTtcbiAgICAgICAgICAgICAgICBnbC5zdGVuY2lsT3AoZ2wuS0VFUCxnbC5LRUVQLGdsLkRFQ1IpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBnbC5kcmF3RWxlbWVudHMoZ2wuVFJJQU5HTEVfU1RSSVAsICB3ZWJHTERhdGEuaW5kaWNlcy5sZW5ndGgsIGdsLlVOU0lHTkVEX1NIT1JULCAwICk7XG5cbiAgICAgICAgICAgIHRoaXMucmVuZGVyZXIuZHJhd0NvdW50Kys7XG5cbiAgICAgICAgICAgIGlmICghc21zLnJldmVyc2UpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgZ2wuc3RlbmNpbEZ1bmMoZ2wuRVFVQUwsMHhGRi0obGV2ZWwpLCAweEZGKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBnbC5zdGVuY2lsRnVuYyhnbC5FUVVBTCxsZXZlbCwgMHhGRik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBnbC5jb2xvck1hc2sodHJ1ZSwgdHJ1ZSwgdHJ1ZSwgdHJ1ZSk7XG4gICAgICAgIGdsLnN0ZW5jaWxPcChnbC5LRUVQLGdsLktFRVAsZ2wuS0VFUCk7XG5cblxuICAgIH1cbn07XG5cbi8qKlxuICogRGVzdHJveXMgdGhlIG1hc2sgc3RhY2suXG4gKlxuICovXG5XZWJHTE1hc2tNYW5hZ2VyLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKClcbntcbiAgICBXZWJHTE1hbmFnZXIucHJvdG90eXBlLmRlc3Ryb3kuY2FsbCh0aGlzKTtcblxuICAgIHRoaXMuc3RlbmNpbE1hc2tTdGFjay5zdGVuY2lsU3RhY2sgPSBudWxsO1xufTtcblxuLyoqXG4gKiBBcHBsaWVzIHRoZSBNYXNrIGFuZCBhZGRzIGl0IHRvIHRoZSBjdXJyZW50IGZpbHRlciBzdGFjay5cbiAqXG4gKiBAcGFyYW0gbWFza0RhdGEge2FueVtdfSBUaGUgbWFzayBkYXRhIHN0cnVjdHVyZSB0byB1c2VcbiAqL1xuV2ViR0xNYXNrTWFuYWdlci5wcm90b3R5cGUucHVzaE1hc2sgPSBmdW5jdGlvbiAobWFza0RhdGEpXG57XG4gICAgdGhpcy5yZW5kZXJlci5zZXRPYmplY3RSZW5kZXJlcih0aGlzLnJlbmRlcmVyLnBsdWdpbnMuZ3JhcGhpY3MpO1xuICAgIFxuICAgIC8vVE9ETyBGSVhcbiAgICBpZiAobWFza0RhdGEuZGlydHkpXG4gICAge1xuICAgICAgICB0aGlzLnJlbmRlcmVyLnBsdWdpbnMuZ3JhcGhpY3MudXBkYXRlR3JhcGhpY3MobWFza0RhdGEsIHRoaXMucmVuZGVyZXIuZ2wpO1xuICAgIH1cblxuICAgIGlmICghbWFza0RhdGEuX3dlYkdMW3RoaXMucmVuZGVyZXIuZ2wuaWRdLmRhdGEubGVuZ3RoKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMucHVzaFN0ZW5jaWwobWFza0RhdGEsIG1hc2tEYXRhLl93ZWJHTFt0aGlzLnJlbmRlcmVyLmdsLmlkXS5kYXRhWzBdKTtcbn07XG5cbi8qKlxuICogUmVtb3ZlcyB0aGUgbGFzdCBmaWx0ZXIgZnJvbSB0aGUgZmlsdGVyIHN0YWNrIGFuZCBkb2Vzbid0IHJldHVybiBpdC5cbiAqXG4gKiBAcGFyYW0gbWFza0RhdGEge2FueVtdfVxuICovXG5XZWJHTE1hc2tNYW5hZ2VyLnByb3RvdHlwZS5wb3BNYXNrID0gZnVuY3Rpb24gKG1hc2tEYXRhKVxue1xuICAgIHRoaXMucmVuZGVyZXIuc2V0T2JqZWN0UmVuZGVyZXIodGhpcy5yZW5kZXJlci5wbHVnaW5zLmdyYXBoaWNzKTtcblxuICAgIHRoaXMucG9wU3RlbmNpbChtYXNrRGF0YSwgbWFza0RhdGEuX3dlYkdMW3RoaXMucmVuZGVyZXIuZ2wuaWRdLmRhdGFbMF0pO1xufTtcblxuIiwiLyoqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcn0gVGhlIHJlbmRlcmVyIHRoaXMgbWFuYWdlciB3b3JrcyBmb3IuXG4gKi9cbmZ1bmN0aW9uIFdlYkdMTWFuYWdlcihyZW5kZXJlcilcbntcbiAgICAvKipcbiAgICAgKiBUaGUgcmVuZGVyZXIgdGhpcyBtYW5hZ2VyIHdvcmtzIGZvci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuV2ViR0xSZW5kZXJlcn1cbiAgICAgKi9cbiAgICB0aGlzLnJlbmRlcmVyID0gcmVuZGVyZXI7XG5cbiAgICB0aGlzLnJlbmRlcmVyLm9uKCdjb250ZXh0JywgdGhpcy5vbkNvbnRleHRDaGFuZ2UsIHRoaXMpO1xufVxuXG5XZWJHTE1hbmFnZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gV2ViR0xNYW5hZ2VyO1xubW9kdWxlLmV4cG9ydHMgPSBXZWJHTE1hbmFnZXI7XG5cbi8qKlxuICogR2VuZXJpYyBtZXRob2QgY2FsbGVkIHdoZW4gdGhlcmUgaXMgYSBXZWJHTCBjb250ZXh0IGNoYW5nZS5cbiAqXG4gKi9cbldlYkdMTWFuYWdlci5wcm90b3R5cGUub25Db250ZXh0Q2hhbmdlID0gZnVuY3Rpb24gKClcbntcblx0Ly8gZG8gc29tZSBjb2RlcyBpbml0IVxufTtcblxuLyoqXG4gKiBHZW5lcmljIGRlc3Ryb3kgbWV0aG9kcyB0byBiZSBvdmVycmlkZGVuIGJ5IHRoZSBzdWJjbGFzc1xuICpcbiAqL1xuV2ViR0xNYW5hZ2VyLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLnJlbmRlcmVyLm9mZignY29udGV4dCcsIHRoaXMub25Db250ZXh0Q2hhbmdlLCB0aGlzKTtcblxuICAgIHRoaXMucmVuZGVyZXIgPSBudWxsO1xufTtcbiIsInZhciBTaGFkZXIgPSByZXF1aXJlKCcuL1NoYWRlcicpO1xuXG4vKipcbiAqIFRoaXMgc2hhZGVyIGlzIHVzZWQgdG8gZHJhdyBjb21wbGV4IHByaW1pdGl2ZSBzaGFwZXMgZm9yIHtAbGluayBQSVhJLkdyYXBoaWNzfS5cbiAqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAZXh0ZW5kcyBQSVhJLlNoYWRlclxuICogQHBhcmFtIHNoYWRlck1hbmFnZXIge1BJWEkuU2hhZGVyTWFuYWdlcn0gVGhlIHdlYmdsIHNoYWRlciBtYW5hZ2VyIHRoaXMgc2hhZGVyIHdvcmtzIGZvci5cbiAqL1xuZnVuY3Rpb24gQ29tcGxleFByaW1pdGl2ZVNoYWRlcihzaGFkZXJNYW5hZ2VyKVxue1xuICAgIFNoYWRlci5jYWxsKHRoaXMsXG4gICAgICAgIHNoYWRlck1hbmFnZXIsXG4gICAgICAgIC8vIHZlcnRleCBzaGFkZXJcbiAgICAgICAgW1xuICAgICAgICAgICAgJ2F0dHJpYnV0ZSB2ZWMyIGFWZXJ0ZXhQb3NpdGlvbjsnLFxuXG4gICAgICAgICAgICAndW5pZm9ybSBtYXQzIHRyYW5zbGF0aW9uTWF0cml4OycsXG4gICAgICAgICAgICAndW5pZm9ybSBtYXQzIHByb2plY3Rpb25NYXRyaXg7JyxcblxuICAgICAgICAgICAgJ3VuaWZvcm0gdmVjMyB0aW50OycsXG4gICAgICAgICAgICAndW5pZm9ybSBmbG9hdCBhbHBoYTsnLFxuICAgICAgICAgICAgJ3VuaWZvcm0gdmVjMyBjb2xvcjsnLFxuXG4gICAgICAgICAgICAndmFyeWluZyB2ZWM0IHZDb2xvcjsnLFxuXG4gICAgICAgICAgICAndm9pZCBtYWluKHZvaWQpeycsXG4gICAgICAgICAgICAnICAgZ2xfUG9zaXRpb24gPSB2ZWM0KChwcm9qZWN0aW9uTWF0cml4ICogdHJhbnNsYXRpb25NYXRyaXggKiB2ZWMzKGFWZXJ0ZXhQb3NpdGlvbiwgMS4wKSkueHksIDAuMCwgMS4wKTsnLFxuICAgICAgICAgICAgJyAgIHZDb2xvciA9IHZlYzQoY29sb3IgKiBhbHBoYSAqIHRpbnQsIGFscGhhKTsnLC8vXCIgKiB2ZWM0KHRpbnQgKiBhbHBoYSwgYWxwaGEpOycsXG4gICAgICAgICAgICAnfSdcbiAgICAgICAgXS5qb2luKCdcXG4nKSxcbiAgICAgICAgLy8gZnJhZ21lbnQgc2hhZGVyXG4gICAgICAgIFtcbiAgICAgICAgICAgICdwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDsnLFxuXG4gICAgICAgICAgICAndmFyeWluZyB2ZWM0IHZDb2xvcjsnLFxuXG4gICAgICAgICAgICAndm9pZCBtYWluKHZvaWQpeycsXG4gICAgICAgICAgICAnICAgZ2xfRnJhZ0NvbG9yID0gdkNvbG9yOycsXG4gICAgICAgICAgICAnfSdcbiAgICAgICAgXS5qb2luKCdcXG4nKSxcbiAgICAgICAgLy8gY3VzdG9tIHVuaWZvcm1zXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRpbnQ6ICAgeyB0eXBlOiAnM2YnLCB2YWx1ZTogWzAsIDAsIDBdIH0sXG4gICAgICAgICAgICBhbHBoYTogIHsgdHlwZTogJzFmJywgdmFsdWU6IDAgfSxcbiAgICAgICAgICAgIGNvbG9yOiAgeyB0eXBlOiAnM2YnLCB2YWx1ZTogWzAsMCwwXSB9LFxuICAgICAgICAgICAgdHJhbnNsYXRpb25NYXRyaXg6IHsgdHlwZTogJ21hdDMnLCB2YWx1ZTogbmV3IEZsb2F0MzJBcnJheSg5KSB9LFxuICAgICAgICAgICAgcHJvamVjdGlvbk1hdHJpeDogeyB0eXBlOiAnbWF0MycsIHZhbHVlOiBuZXcgRmxvYXQzMkFycmF5KDkpIH1cbiAgICAgICAgfSxcbiAgICAgICAgLy8gYXR0cmlidXRlc1xuICAgICAgICB7XG4gICAgICAgICAgICBhVmVydGV4UG9zaXRpb246MFxuICAgICAgICB9XG4gICAgKTtcbn1cblxuQ29tcGxleFByaW1pdGl2ZVNoYWRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFNoYWRlci5wcm90b3R5cGUpO1xuQ29tcGxleFByaW1pdGl2ZVNoYWRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBDb21wbGV4UHJpbWl0aXZlU2hhZGVyO1xubW9kdWxlLmV4cG9ydHMgPSBDb21wbGV4UHJpbWl0aXZlU2hhZGVyO1xuIiwidmFyIFNoYWRlciA9IHJlcXVpcmUoJy4vU2hhZGVyJyk7XG5cbi8qKlxuICogVGhpcyBzaGFkZXIgaXMgdXNlZCB0byBkcmF3IHNpbXBsZSBwcmltaXRpdmUgc2hhcGVzIGZvciB7QGxpbmsgUElYSS5HcmFwaGljc30uXG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQGV4dGVuZHMgUElYSS5TaGFkZXJcbiAqIEBwYXJhbSBzaGFkZXJNYW5hZ2VyIHtTaGFkZXJNYW5hZ2VyfSBUaGUgd2ViZ2wgc2hhZGVyIG1hbmFnZXIgdGhpcyBzaGFkZXIgd29ya3MgZm9yLlxuICovXG5mdW5jdGlvbiBQcmltaXRpdmVTaGFkZXIoc2hhZGVyTWFuYWdlcilcbntcbiAgICBTaGFkZXIuY2FsbCh0aGlzLFxuICAgICAgICBzaGFkZXJNYW5hZ2VyLFxuICAgICAgICAvLyB2ZXJ0ZXggc2hhZGVyXG4gICAgICAgIFtcbiAgICAgICAgICAgICdhdHRyaWJ1dGUgdmVjMiBhVmVydGV4UG9zaXRpb247JyxcbiAgICAgICAgICAgICdhdHRyaWJ1dGUgdmVjNCBhQ29sb3I7JyxcblxuICAgICAgICAgICAgJ3VuaWZvcm0gbWF0MyB0cmFuc2xhdGlvbk1hdHJpeDsnLFxuICAgICAgICAgICAgJ3VuaWZvcm0gbWF0MyBwcm9qZWN0aW9uTWF0cml4OycsXG5cbiAgICAgICAgICAgICd1bmlmb3JtIGZsb2F0IGFscGhhOycsXG4gICAgICAgICAgICAndW5pZm9ybSBmbG9hdCBmbGlwWTsnLFxuICAgICAgICAgICAgJ3VuaWZvcm0gdmVjMyB0aW50OycsXG5cbiAgICAgICAgICAgICd2YXJ5aW5nIHZlYzQgdkNvbG9yOycsXG5cbiAgICAgICAgICAgICd2b2lkIG1haW4odm9pZCl7JyxcbiAgICAgICAgICAgICcgICBnbF9Qb3NpdGlvbiA9IHZlYzQoKHByb2plY3Rpb25NYXRyaXggKiB0cmFuc2xhdGlvbk1hdHJpeCAqIHZlYzMoYVZlcnRleFBvc2l0aW9uLCAxLjApKS54eSwgMC4wLCAxLjApOycsXG4gICAgICAgICAgICAnICAgdkNvbG9yID0gYUNvbG9yICogdmVjNCh0aW50ICogYWxwaGEsIGFscGhhKTsnLFxuICAgICAgICAgICAgJ30nXG4gICAgICAgIF0uam9pbignXFxuJyksXG4gICAgICAgIC8vIGZyYWdtZW50IHNoYWRlclxuICAgICAgICBbXG4gICAgICAgICAgICAncHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7JyxcblxuICAgICAgICAgICAgJ3ZhcnlpbmcgdmVjNCB2Q29sb3I7JyxcblxuICAgICAgICAgICAgJ3ZvaWQgbWFpbih2b2lkKXsnLFxuICAgICAgICAgICAgJyAgIGdsX0ZyYWdDb2xvciA9IHZDb2xvcjsnLFxuICAgICAgICAgICAgJ30nXG4gICAgICAgIF0uam9pbignXFxuJyksXG4gICAgICAgIC8vIGN1c3RvbSB1bmlmb3Jtc1xuICAgICAgICB7XG4gICAgICAgICAgICB0aW50OiAgIHsgdHlwZTogJzNmJywgdmFsdWU6IFswLCAwLCAwXSB9LFxuICAgICAgICAgICAgYWxwaGE6ICB7IHR5cGU6ICcxZicsIHZhbHVlOiAwIH0sXG4gICAgICAgICAgICB0cmFuc2xhdGlvbk1hdHJpeDogeyB0eXBlOiAnbWF0MycsIHZhbHVlOiBuZXcgRmxvYXQzMkFycmF5KDkpIH0sXG4gICAgICAgICAgICBwcm9qZWN0aW9uTWF0cml4OiB7IHR5cGU6ICdtYXQzJywgdmFsdWU6IG5ldyBGbG9hdDMyQXJyYXkoOSkgfVxuICAgICAgICB9LFxuICAgICAgICAvLyBjdXN0b20gYXR0cmlidXRlc1xuICAgICAgICB7XG4gICAgICAgICAgICBhVmVydGV4UG9zaXRpb246MCxcbiAgICAgICAgICAgIGFDb2xvcjowXG4gICAgICAgIH1cbiAgICApO1xufVxuXG5QcmltaXRpdmVTaGFkZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShTaGFkZXIucHJvdG90eXBlKTtcblByaW1pdGl2ZVNoYWRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBQcmltaXRpdmVTaGFkZXI7XG5tb2R1bGUuZXhwb3J0cyA9IFByaW1pdGl2ZVNoYWRlcjtcbiIsIi8qZ2xvYmFsIGNvbnNvbGUgKi9cbnZhciB1dGlscyA9IHJlcXVpcmUoJy4uLy4uLy4uL3V0aWxzJyk7XG5cbi8qKlxuICogQmFzZSBzaGFkZXIgY2xhc3MgZm9yIFBJWEkgbWFuYWdlZCBzaGFkZXJzLlxuICpcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqIEBwYXJhbSBzaGFkZXJNYW5hZ2VyIHtQSVhJLlNoYWRlck1hbmFnZXJ9IFRoZSB3ZWJnbCBzaGFkZXIgbWFuYWdlciB0aGlzIHNoYWRlciB3b3JrcyBmb3IuXG4gKiBAcGFyYW0gW3ZlcnRleFNyY10ge3N0cmluZ30gVGhlIHNvdXJjZSBvZiB0aGUgdmVydGV4IHNoYWRlci5cbiAqIEBwYXJhbSBbZnJhZ21lbnRTcmNdIHtzdHJpbmd9IFRoZSBzb3VyY2Ugb2YgdGhlIGZyYWdtZW50IHNoYWRlci5cbiAqIEBwYXJhbSBbdW5pZm9ybXNdIHtvYmplY3R9IFVuaWZvcm1zIGZvciB0aGlzIHNoYWRlci5cbiAqIEBwYXJhbSBbYXR0cmlidXRlc10ge29iamVjdH0gQXR0cmlidXRlcyBmb3IgdGhpcyBzaGFkZXIuXG4gKi9cbmZ1bmN0aW9uIFNoYWRlcihzaGFkZXJNYW5hZ2VyLCB2ZXJ0ZXhTcmMsIGZyYWdtZW50U3JjLCB1bmlmb3JtcywgYXR0cmlidXRlcylcbntcbiAgICBpZiAoIXZlcnRleFNyYyB8fCAhZnJhZ21lbnRTcmMpXG4gICAge1xuICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdQaXhpLmpzIEVycm9yLiBTaGFkZXIgcmVxdWlyZXMgdmVydGV4U3JjIGFuZCBmcmFnbWVudFNyYycpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEEgdW5pcXVlIGlkXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEByZWFkb25seVxuICAgICAqL1xuICAgIHRoaXMudWlkID0gdXRpbHMudWlkKCk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgY3VycmVudCBXZWJHTCBkcmF3aW5nIGNvbnRleHRcbiAgICAgKiBAbWVtYmVyIHtXZWJHTFJlbmRlcmluZ0NvbnRleHR9XG4gICAgICogQHJlYWRvbmx5XG4gICAgICovXG4gICAgdGhpcy5nbCA9IHNoYWRlck1hbmFnZXIucmVuZGVyZXIuZ2w7XG5cbiAgICAvL1RPRE8gbWF5YmUgd2Ugc2hvdWxkIHBhc3MgcmVuZGVyZXIgcmF0aGVyIHRoYW4gc2hhZGVyIG1hbmdlcj8/IGZvb2QgZm9yIHRob3VnaHQuLlxuICAgIHRoaXMuc2hhZGVyTWFuYWdlciA9IHNoYWRlck1hbmFnZXI7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgV2ViR0wgcHJvZ3JhbS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1dlYkdMUHJvZ3JhbX1cbiAgICAgKiBAcmVhZG9ubHlcbiAgICAgKi9cbiAgICB0aGlzLnByb2dyYW0gPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHVuaWZvcm1zIGFzIGFuIG9iamVjdFxuICAgICAqIEBtZW1iZXIge29iamVjdH1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMudW5pZm9ybXMgPSB1bmlmb3JtcyB8fCB7fTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBhdHRyaWJ1dGVzIGFzIGFuIG9iamVjdFxuICAgICAqIEBtZW1iZXIge29iamVjdH1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuYXR0cmlidXRlcyA9IGF0dHJpYnV0ZXMgfHwge307XG5cbiAgICAvKipcbiAgICAgKiBJbnRlcm5hbCB0ZXh0dXJlIGNvdW50ZXJcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLnRleHR1cmVDb3VudCA9IDE7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgdmVydGV4IHNoYWRlciBhcyBhbiBhcnJheSBvZiBzdHJpbmdzXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtzdHJpbmd9XG4gICAgICovXG4gICAgdGhpcy52ZXJ0ZXhTcmMgPSB2ZXJ0ZXhTcmM7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgZnJhZ21lbnQgc2hhZGVyIGFzIGFuIGFycmF5IG9mIHN0cmluZ3NcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge3N0cmluZ31cbiAgICAgKi9cbiAgICB0aGlzLmZyYWdtZW50U3JjID0gZnJhZ21lbnRTcmM7XG5cbiAgICB0aGlzLmluaXQoKTtcbn1cblxuU2hhZGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFNoYWRlcjtcbm1vZHVsZS5leHBvcnRzID0gU2hhZGVyO1xuXG4vKipcbiAqIENyZWF0ZXMgdGhlIHNoYWRlciBhbmQgdXNlcyBpdFxuICpcbiAqL1xuU2hhZGVyLnByb3RvdHlwZS5pbml0ID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLmNvbXBpbGUoKTtcblxuICAgIHRoaXMuZ2wudXNlUHJvZ3JhbSh0aGlzLnByb2dyYW0pO1xuXG4gICAgdGhpcy5jYWNoZVVuaWZvcm1Mb2NhdGlvbnMoT2JqZWN0LmtleXModGhpcy51bmlmb3JtcykpO1xuICAgIHRoaXMuY2FjaGVBdHRyaWJ1dGVMb2NhdGlvbnMoT2JqZWN0LmtleXModGhpcy5hdHRyaWJ1dGVzKSk7XG59O1xuXG4vKipcbiAqIENhY2hlcyB0aGUgbG9jYXRpb25zIG9mIHRoZSB1bmlmb3JtIGZvciByZXVzZS5cbiAqXG4gKiBAcGFyYW0ga2V5cyB7c3RyaW5nfSB0aGUgdW5pZm9ybXMgdG8gY2FjaGVcbiAqL1xuU2hhZGVyLnByb3RvdHlwZS5jYWNoZVVuaWZvcm1Mb2NhdGlvbnMgPSBmdW5jdGlvbiAoa2V5cylcbntcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyArK2kpXG4gICAge1xuICAgICAgICB0aGlzLnVuaWZvcm1zW2tleXNbaV1dLl9sb2NhdGlvbiA9IHRoaXMuZ2wuZ2V0VW5pZm9ybUxvY2F0aW9uKHRoaXMucHJvZ3JhbSwga2V5c1tpXSk7XG4gICAgfVxufTtcblxuLyoqXG4gKiBDYWNoZXMgdGhlIGxvY2F0aW9ucyBvZiB0aGUgYXR0cmlidXRlIGZvciByZXVzZS5cbiAqXG4gKiBAcGFyYW0ga2V5cyB7c3RyaW5nfSB0aGUgYXR0cmlidXRlcyB0byBjYWNoZVxuICovXG5TaGFkZXIucHJvdG90eXBlLmNhY2hlQXR0cmlidXRlTG9jYXRpb25zID0gZnVuY3Rpb24gKGtleXMpXG57XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgKytpKVxuICAgIHtcbiAgICAgICAgdGhpcy5hdHRyaWJ1dGVzW2tleXNbaV1dID0gdGhpcy5nbC5nZXRBdHRyaWJMb2NhdGlvbih0aGlzLnByb2dyYW0sIGtleXNbaV0pO1xuICAgIH1cblxuICAgIC8vIFRPRE86IENoZWNrIGlmIHRoaXMgaXMgbmVlZGVkIGFueW1vcmUuLi5cblxuICAgIC8vIEJlZ2luIHdvcnN0IGhhY2sgZXZhIC8vXG5cbiAgICAvLyBXSFk/Pz8gT05MWSBvbiBteSBjaHJvbWUgcGl4ZWwgdGhlIGxpbmUgYWJvdmUgcmV0dXJucyAtMSB3aGVuIHVzaW5nIGZpbHRlcnM/XG4gICAgLy8gbWF5YmUgaXRzIHNvbWV0aGluZyB0byBkbyB3aXRoIHRoZSBjdXJyZW50IHN0YXRlIG9mIHRoZSBnbCBjb250ZXh0LlxuICAgIC8vIEknbSBjb252aW5jZWQgdGhpcyBpcyBhIGJ1ZyBpbiB0aGUgY2hyb21lIGJyb3dzZXIgYXMgdGhlcmUgaXMgTk8gcmVhc29uIHdoeSB0aGlzIHNob3VsZCBiZSByZXR1cm5pbmcgLTEgZXNwZWNpYWxseSBhcyBpdCBvbmx5IG1hbmlmZXN0cyBvbiBteSBjaHJvbWUgcGl4ZWxcbiAgICAvLyBJZiB0aGVyZXMgYW55IHdlYkdMIHBlb3BsZSB0aGF0IGtub3cgd2h5IGNvdWxkIGhhcHBlbiBwbGVhc2UgaGVscCA6KVxuICAgIC8vIGlmICh0aGlzLmF0dHJpYnV0ZXMuYUNvbG9yID09PSAtMSl7XG4gICAgLy8gICAgIHRoaXMuYXR0cmlidXRlcy5hQ29sb3IgPSAyO1xuICAgIC8vIH1cblxuICAgIC8vIEVuZCB3b3JzdCBoYWNrIGV2YSAvL1xufTtcblxuLyoqXG4gKiBBdHRhY2hlcyB0aGUgc2hhZGVycyBhbmQgY3JlYXRlcyB0aGUgcHJvZ3JhbS5cbiAqXG4gKiBAcmV0dXJuIHtXZWJHTFByb2dyYW19XG4gKi9cblNoYWRlci5wcm90b3R5cGUuY29tcGlsZSA9IGZ1bmN0aW9uICgpXG57XG4gICAgdmFyIGdsID0gdGhpcy5nbDtcblxuICAgIHZhciBnbFZlcnRTaGFkZXIgPSB0aGlzLl9nbENvbXBpbGUoZ2wuVkVSVEVYX1NIQURFUiwgdGhpcy52ZXJ0ZXhTcmMpO1xuICAgIHZhciBnbEZyYWdTaGFkZXIgPSB0aGlzLl9nbENvbXBpbGUoZ2wuRlJBR01FTlRfU0hBREVSLCB0aGlzLmZyYWdtZW50U3JjKTtcblxuICAgIHZhciBwcm9ncmFtID0gZ2wuY3JlYXRlUHJvZ3JhbSgpO1xuXG4gICAgZ2wuYXR0YWNoU2hhZGVyKHByb2dyYW0sIGdsVmVydFNoYWRlcik7XG4gICAgZ2wuYXR0YWNoU2hhZGVyKHByb2dyYW0sIGdsRnJhZ1NoYWRlcik7XG4gICAgZ2wubGlua1Byb2dyYW0ocHJvZ3JhbSk7XG5cbiAgICAvLyBpZiBsaW5raW5nIGZhaWxzLCB0aGVuIGxvZyBhbmQgY2xlYW51cFxuICAgIGlmICghZ2wuZ2V0UHJvZ3JhbVBhcmFtZXRlcihwcm9ncmFtLCBnbC5MSU5LX1NUQVRVUykpXG4gICAge1xuICAgICAgICBjb25zb2xlLmVycm9yKCdQaXhpLmpzIEVycm9yOiBDb3VsZCBub3QgaW5pdGlhbGl6ZSBzaGFkZXIuJyk7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ2dsLlZBTElEQVRFX1NUQVRVUycsIGdsLmdldFByb2dyYW1QYXJhbWV0ZXIocHJvZ3JhbSwgZ2wuVkFMSURBVEVfU1RBVFVTKSk7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ2dsLmdldEVycm9yKCknLCBnbC5nZXRFcnJvcigpKTtcblxuICAgICAgICAvLyBpZiB0aGVyZSBpcyBhIHByb2dyYW0gaW5mbyBsb2csIGxvZyBpdFxuICAgICAgICBpZiAoZ2wuZ2V0UHJvZ3JhbUluZm9Mb2cocHJvZ3JhbSkgIT09ICcnKVxuICAgICAgICB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ1BpeGkuanMgV2FybmluZzogZ2wuZ2V0UHJvZ3JhbUluZm9Mb2coKScsIGdsLmdldFByb2dyYW1JbmZvTG9nKHByb2dyYW0pKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGdsLmRlbGV0ZVByb2dyYW0ocHJvZ3JhbSk7XG4gICAgICAgIHByb2dyYW0gPSBudWxsO1xuICAgIH1cblxuICAgIC8vIGNsZWFuIHVwIHNvbWUgc2hhZGVyc1xuICAgIGdsLmRlbGV0ZVNoYWRlcihnbFZlcnRTaGFkZXIpO1xuICAgIGdsLmRlbGV0ZVNoYWRlcihnbEZyYWdTaGFkZXIpO1xuXG4gICAgcmV0dXJuICh0aGlzLnByb2dyYW0gPSBwcm9ncmFtKTtcbn07XG5cbi8qKlxuKiBBZGRzIGEgbmV3IHVuaWZvcm1cbipcbiogQHBhcmFtIHVuaWZvcm0ge29iamVjdH0gdGhlIG5ldyB1bmlmb3JtIHRvIGF0dGFjaFxuKi9cblNoYWRlci5wcm90b3R5cGUuc3luY1VuaWZvcm0gPSBmdW5jdGlvbiAodW5pZm9ybSlcbntcbiAgICB2YXIgbG9jYXRpb24gPSB1bmlmb3JtLl9sb2NhdGlvbixcbiAgICAgICAgdmFsdWUgPSB1bmlmb3JtLnZhbHVlLFxuICAgICAgICBnbCA9IHRoaXMuZ2wsXG4gICAgICAgIGksIGlsO1xuXG4gICAgc3dpdGNoICh1bmlmb3JtLnR5cGUpXG4gICAge1xuICAgICAgICBjYXNlICdiJzpcbiAgICAgICAgY2FzZSAnYm9vbCc6XG4gICAgICAgIGNhc2UgJ2Jvb2xlYW4nOlxuICAgICAgICAgICAgZ2wudW5pZm9ybTFpKGxvY2F0aW9uLCB2YWx1ZSA/IDEgOiAwKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIC8vIHNpbmdsZSBpbnQgdmFsdWVcbiAgICAgICAgY2FzZSAnaSc6XG4gICAgICAgIGNhc2UgJzFpJzpcbiAgICAgICAgICAgIGdsLnVuaWZvcm0xaShsb2NhdGlvbiwgdmFsdWUpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLy8gc2luZ2xlIGZsb2F0IHZhbHVlXG4gICAgICAgIGNhc2UgJ2YnOlxuICAgICAgICBjYXNlICcxZic6XG4gICAgICAgICAgICBnbC51bmlmb3JtMWYobG9jYXRpb24sIHZhbHVlKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIC8vIEZsb2F0MzJBcnJheSgyKSBvciBKUyBBcnJyYXlcbiAgICAgICAgY2FzZSAnMmYnOlxuICAgICAgICAgICAgZ2wudW5pZm9ybTJmKGxvY2F0aW9uLCB2YWx1ZVswXSwgdmFsdWVbMV0pO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLy8gRmxvYXQzMkFycmF5KDMpIG9yIEpTIEFycnJheVxuICAgICAgICBjYXNlICczZic6XG4gICAgICAgICAgICBnbC51bmlmb3JtM2YobG9jYXRpb24sIHZhbHVlWzBdLCB2YWx1ZVsxXSwgdmFsdWVbMl0pO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLy8gRmxvYXQzMkFycmF5KDQpIG9yIEpTIEFycnJheVxuICAgICAgICBjYXNlICc0Zic6XG4gICAgICAgICAgICBnbC51bmlmb3JtNGYobG9jYXRpb24sIHZhbHVlWzBdLCB2YWx1ZVsxXSwgdmFsdWVbMl0sIHZhbHVlWzNdKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIC8vIGEgMkQgUG9pbnQgb2JqZWN0XG4gICAgICAgIGNhc2UgJ3YyJzpcbiAgICAgICAgICAgIGdsLnVuaWZvcm0yZihsb2NhdGlvbiwgdmFsdWUueCwgdmFsdWUueSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAvLyBhIDNEIFBvaW50IG9iamVjdFxuICAgICAgICBjYXNlICd2Myc6XG4gICAgICAgICAgICBnbC51bmlmb3JtM2YobG9jYXRpb24sIHZhbHVlLngsIHZhbHVlLnksIHZhbHVlLnopO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLy8gYSA0RCBQb2ludCBvYmplY3RcbiAgICAgICAgY2FzZSAndjQnOlxuICAgICAgICAgICAgZ2wudW5pZm9ybTRmKGxvY2F0aW9uLCB2YWx1ZS54LCB2YWx1ZS55LCB2YWx1ZS56LCB2YWx1ZS53KTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIC8vIEludDMyQXJyYXkgb3IgSlMgQXJyYXlcbiAgICAgICAgY2FzZSAnMWl2JzpcbiAgICAgICAgICAgIGdsLnVuaWZvcm0xaXYobG9jYXRpb24sIHZhbHVlKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIC8vIEludDMyQXJyYXkgb3IgSlMgQXJyYXlcbiAgICAgICAgY2FzZSAnMml2JzpcbiAgICAgICAgICAgIGdsLnVuaWZvcm0yaXYobG9jYXRpb24sIHZhbHVlKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIC8vIEludDMyQXJyYXkgb3IgSlMgQXJyYXlcbiAgICAgICAgY2FzZSAnM2l2JzpcbiAgICAgICAgICAgIGdsLnVuaWZvcm0zaXYobG9jYXRpb24sIHZhbHVlKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIC8vIEludDMyQXJyYXkgb3IgSlMgQXJyYXlcbiAgICAgICAgY2FzZSAnNGl2JzpcbiAgICAgICAgICAgIGdsLnVuaWZvcm00aXYobG9jYXRpb24sIHZhbHVlKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIC8vIEZsb2F0MzJBcnJheSBvciBKUyBBcnJheVxuICAgICAgICBjYXNlICcxZnYnOlxuICAgICAgICAgICAgZ2wudW5pZm9ybTFmdihsb2NhdGlvbiwgdmFsdWUpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLy8gRmxvYXQzMkFycmF5IG9yIEpTIEFycmF5XG4gICAgICAgIGNhc2UgJzJmdic6XG4gICAgICAgICAgICBnbC51bmlmb3JtMmZ2KGxvY2F0aW9uLCB2YWx1ZSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAvLyBGbG9hdDMyQXJyYXkgb3IgSlMgQXJyYXlcbiAgICAgICAgY2FzZSAnM2Z2JzpcbiAgICAgICAgICAgIGdsLnVuaWZvcm0zZnYobG9jYXRpb24sIHZhbHVlKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIC8vIEZsb2F0MzJBcnJheSBvciBKUyBBcnJheVxuICAgICAgICBjYXNlICc0ZnYnOlxuICAgICAgICAgICAgZ2wudW5pZm9ybTRmdihsb2NhdGlvbiwgdmFsdWUpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLy8gRmxvYXQzMkFycmF5IG9yIEpTIEFycmF5XG4gICAgICAgIGNhc2UgJ20yJzpcbiAgICAgICAgY2FzZSAnbWF0Mic6XG4gICAgICAgIGNhc2UgJ01hdHJpeDJmdic6XG4gICAgICAgICAgICBnbC51bmlmb3JtTWF0cml4MmZ2KGxvY2F0aW9uLCB1bmlmb3JtLnRyYW5zcG9zZSwgdmFsdWUpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLy8gRmxvYXQzMkFycmF5IG9yIEpTIEFycmF5XG4gICAgICAgIGNhc2UgJ20zJzpcbiAgICAgICAgY2FzZSAnbWF0Myc6XG4gICAgICAgIGNhc2UgJ01hdHJpeDNmdic6XG5cbiAgICAgICAgICAgIGdsLnVuaWZvcm1NYXRyaXgzZnYobG9jYXRpb24sIHVuaWZvcm0udHJhbnNwb3NlLCB2YWx1ZSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAvLyBGbG9hdDMyQXJyYXkgb3IgSlMgQXJyYXlcbiAgICAgICAgY2FzZSAnbTQnOlxuICAgICAgICBjYXNlICdtYXQ0JzpcbiAgICAgICAgY2FzZSAnTWF0cml4NGZ2JzpcbiAgICAgICAgICAgIGdsLnVuaWZvcm1NYXRyaXg0ZnYobG9jYXRpb24sIHVuaWZvcm0udHJhbnNwb3NlLCB2YWx1ZSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAvLyBhIENvbG9yIFZhbHVlXG4gICAgICAgIGNhc2UgJ2MnOlxuICAgICAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdmFsdWUgPSB1dGlscy5oZXgycmdiKHZhbHVlKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZ2wudW5pZm9ybTNmKGxvY2F0aW9uLCB2YWx1ZVswXSwgdmFsdWVbMV0sIHZhbHVlWzJdKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIC8vIGZsYXQgYXJyYXkgb2YgaW50ZWdlcnMgKEpTIG9yIHR5cGVkIGFycmF5KVxuICAgICAgICBjYXNlICdpdjEnOlxuICAgICAgICAgICAgZ2wudW5pZm9ybTFpdihsb2NhdGlvbiwgdmFsdWUpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLy8gZmxhdCBhcnJheSBvZiBpbnRlZ2VycyB3aXRoIDMgeCBOIHNpemUgKEpTIG9yIHR5cGVkIGFycmF5KVxuICAgICAgICBjYXNlICdpdic6XG4gICAgICAgICAgICBnbC51bmlmb3JtM2l2KGxvY2F0aW9uLCB2YWx1ZSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAvLyBmbGF0IGFycmF5IG9mIGZsb2F0cyAoSlMgb3IgdHlwZWQgYXJyYXkpXG4gICAgICAgIGNhc2UgJ2Z2MSc6XG4gICAgICAgICAgICBnbC51bmlmb3JtMWZ2KGxvY2F0aW9uLCB2YWx1ZSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAvLyBmbGF0IGFycmF5IG9mIGZsb2F0cyB3aXRoIDMgeCBOIHNpemUgKEpTIG9yIHR5cGVkIGFycmF5KVxuICAgICAgICBjYXNlICdmdic6XG4gICAgICAgICAgICBnbC51bmlmb3JtM2Z2KGxvY2F0aW9uLCB2YWx1ZSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAvLyBhcnJheSBvZiAyRCBQb2ludCBvYmplY3RzXG4gICAgICAgIGNhc2UgJ3Yydic6XG4gICAgICAgICAgICBpZiAoIXVuaWZvcm0uX2FycmF5KVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHVuaWZvcm0uX2FycmF5ID0gbmV3IEZsb2F0MzJBcnJheSgyICogdmFsdWUubGVuZ3RoKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZm9yIChpID0gMCwgaWwgPSB2YWx1ZS5sZW5ndGg7IGkgPCBpbDsgKytpKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHVuaWZvcm0uX2FycmF5W2kgKiAyXSAgICAgICA9IHZhbHVlW2ldLng7XG4gICAgICAgICAgICAgICAgdW5pZm9ybS5fYXJyYXlbaSAqIDIgKyAxXSAgID0gdmFsdWVbaV0ueTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZ2wudW5pZm9ybTJmdihsb2NhdGlvbiwgdW5pZm9ybS5fYXJyYXkpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLy8gYXJyYXkgb2YgM0QgUG9pbnQgb2JqZWN0c1xuICAgICAgICBjYXNlICd2M3YnOlxuICAgICAgICAgICAgaWYgKCF1bmlmb3JtLl9hcnJheSlcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB1bmlmb3JtLl9hcnJheSA9IG5ldyBGbG9hdDMyQXJyYXkoMyAqIHZhbHVlLmxlbmd0aCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGZvciAoaSA9IDAsIGlsID0gdmFsdWUubGVuZ3RoOyBpIDwgaWw7ICsraSlcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB1bmlmb3JtLl9hcnJheVtpICogM10gICAgICAgPSB2YWx1ZVtpXS54O1xuICAgICAgICAgICAgICAgIHVuaWZvcm0uX2FycmF5W2kgKiAzICsgMV0gICA9IHZhbHVlW2ldLnk7XG4gICAgICAgICAgICAgICAgdW5pZm9ybS5fYXJyYXlbaSAqIDMgKyAyXSAgID0gdmFsdWVbaV0uejtcblxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBnbC51bmlmb3JtM2Z2KGxvY2F0aW9uLCB1bmlmb3JtLl9hcnJheSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAvLyBhcnJheSBvZiA0RCBQb2ludCBvYmplY3RzXG4gICAgICAgIGNhc2UgJ3Y0dic6XG4gICAgICAgICAgICBpZiAoIXVuaWZvcm0uX2FycmF5KVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHVuaWZvcm0uX2FycmF5ID0gbmV3IEZsb2F0MzJBcnJheSg0ICogdmFsdWUubGVuZ3RoKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZm9yIChpID0gMCwgaWwgPSB2YWx1ZS5sZW5ndGg7IGkgPCBpbDsgKytpKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHVuaWZvcm0uX2FycmF5W2kgKiA0XSAgICAgICA9IHZhbHVlW2ldLng7XG4gICAgICAgICAgICAgICAgdW5pZm9ybS5fYXJyYXlbaSAqIDQgKyAxXSAgID0gdmFsdWVbaV0ueTtcbiAgICAgICAgICAgICAgICB1bmlmb3JtLl9hcnJheVtpICogNCArIDJdICAgPSB2YWx1ZVtpXS56O1xuICAgICAgICAgICAgICAgIHVuaWZvcm0uX2FycmF5W2kgKiA0ICsgM10gICA9IHZhbHVlW2ldLnc7XG5cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZ2wudW5pZm9ybTRmdihsb2NhdGlvbiwgdW5pZm9ybS5fYXJyYXkpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLy8gUElYSS5UZXh0dXJlXG4gICAgICAgIGNhc2UgJ3QnOlxuICAgICAgICBjYXNlICdzYW1wbGVyMkQnOlxuXG4gICAgICAgICAgICBpZiAoIXVuaWZvcm0udmFsdWUgfHwgIXVuaWZvcm0udmFsdWUuYmFzZVRleHR1cmUuaGFzTG9hZGVkKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBhY3RpdmF0ZSB0aGlzIHRleHR1cmVcbiAgICAgICAgICAgIGdsLmFjdGl2ZVRleHR1cmUoZ2xbJ1RFWFRVUkUnICsgdGhpcy50ZXh0dXJlQ291bnRdKTtcblxuICAgICAgICAgICAgdmFyIHRleHR1cmUgPSB1bmlmb3JtLnZhbHVlLmJhc2VUZXh0dXJlLl9nbFRleHR1cmVzW2dsLmlkXTtcblxuICAgICAgICAgICAgaWYgKCF0ZXh0dXJlKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHRoaXMuaW5pdFNhbXBsZXIyRCh1bmlmb3JtKTtcblxuICAgICAgICAgICAgICAgIC8vIHNldCB0aGUgdGV4dHVyIHRvIHRoZSBuZXdseSBjcmVhdGVkIG9uZS4uXG4gICAgICAgICAgICAgICAgdGV4dHVyZSA9IHVuaWZvcm0udmFsdWUuYmFzZVRleHR1cmUuX2dsVGV4dHVyZXNbZ2wuaWRdO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBiaW5kIHRoZSB0ZXh0dXJlXG4gICAgICAgICAgICBnbC5iaW5kVGV4dHVyZShnbC5URVhUVVJFXzJELCB0ZXh0dXJlKTtcblxuICAgICAgICAgICAgLy8gc2V0IHVuaWZvcm0gdG8gdGV4dHVyZSBpbmRleFxuICAgICAgICAgICAgZ2wudW5pZm9ybTFpKHVuaWZvcm0uX2xvY2F0aW9uLCB0aGlzLnRleHR1cmVDb3VudCk7XG5cbiAgICAgICAgICAgIC8vIGluY3JlbWVudCBuZXh0IHRleHR1cmUgaWRcbiAgICAgICAgICAgIHRoaXMudGV4dHVyZUNvdW50Kys7XG5cbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ1BpeGkuanMgU2hhZGVyIFdhcm5pbmc6IFVua25vd24gdW5pZm9ybSB0eXBlOiAnICsgdW5pZm9ybS50eXBlKTtcbiAgICB9XG59O1xuXG4vKipcbiAqIFVwZGF0ZXMgdGhlIHNoYWRlciB1bmlmb3JtIHZhbHVlcy5cbiAqXG4gKi9cblNoYWRlci5wcm90b3R5cGUuc3luY1VuaWZvcm1zID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLnRleHR1cmVDb3VudCA9IDE7XG5cbiAgICBmb3IgKHZhciBrZXkgaW4gdGhpcy51bmlmb3JtcylcbiAgICB7XG4gICAgICAgIHRoaXMuc3luY1VuaWZvcm0odGhpcy51bmlmb3Jtc1trZXldKTtcbiAgICB9XG59O1xuXG5cbi8qKlxuICogSW5pdGlhbGlzZXMgYSBTYW1wbGVyMkQgdW5pZm9ybSAod2hpY2ggbWF5IG9ubHkgYmUgYXZhaWxhYmxlIGxhdGVyIG9uIGFmdGVyIGluaXRVbmlmb3JtcyBvbmNlIHRoZSB0ZXh0dXJlIGhhcyBsb2FkZWQpXG4gKlxuICovXG5TaGFkZXIucHJvdG90eXBlLmluaXRTYW1wbGVyMkQgPSBmdW5jdGlvbiAodW5pZm9ybSlcbntcbiAgICB2YXIgZ2wgPSB0aGlzLmdsO1xuXG4gICAgdmFyIHRleHR1cmUgPSB1bmlmb3JtLnZhbHVlLmJhc2VUZXh0dXJlO1xuXG4gICAgaWYoIXRleHR1cmUuaGFzTG9hZGVkKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuXG5cbiAgICBpZiAodW5pZm9ybS50ZXh0dXJlRGF0YSlcbiAgICB7XG5cbiAgICAgICAgLy9UT0RPIG1vdmUgdGhpcy4uLlxuICAgICAgICB2YXIgZGF0YSA9IHVuaWZvcm0udGV4dHVyZURhdGE7XG5cbiAgICAgICAgdGV4dHVyZS5fZ2xUZXh0dXJlc1tnbC5pZF0gPSBnbC5jcmVhdGVUZXh0dXJlKCk7XG5cbiAgICAgICAgZ2wuYmluZFRleHR1cmUoZ2wuVEVYVFVSRV8yRCwgdGV4dHVyZS5fZ2xUZXh0dXJlc1tnbC5pZF0pO1xuXG4gICAgICAgIGdsLnBpeGVsU3RvcmVpKGdsLlVOUEFDS19QUkVNVUxUSVBMWV9BTFBIQV9XRUJHTCwgdGV4dHVyZS5wcmVtdWx0aXBsaWVkQWxwaGEpO1xuICAgICAgICAvLyBHTFRleHR1cmUgPSBtYWcgbGluZWFyLCBtaW4gbGluZWFyX21pcG1hcF9saW5lYXIsIHdyYXAgcmVwZWF0ICsgZ2wuZ2VuZXJhdGVNaXBtYXAoZ2wuVEVYVFVSRV8yRCk7XG4gICAgICAgIC8vIEdMVGV4dHVyZUxpbmVhciA9IG1hZy9taW4gbGluZWFyLCB3cmFwIGNsYW1wXG4gICAgICAgIC8vIEdMVGV4dHVyZU5lYXJlc3RSZXBlYXQgPSBtYWcvbWluIE5FQVJFU1QsIHdyYXAgcmVwZWF0XG4gICAgICAgIC8vIEdMVGV4dHVyZU5lYXJlc3QgPSBtYWcvbWluIG5lYXJlc3QsIHdyYXAgY2xhbXBcbiAgICAgICAgLy8gQXVkaW9UZXh0dXJlID0gd2hhdGV2ZXIgKyBsdW1pbmFuY2UgKyB3aWR0aCA1MTIsIGhlaWdodCAyLCBib3JkZXIgMFxuICAgICAgICAvLyBLZXlUZXh0dXJlID0gd2hhdGV2ZXIgKyBsdW1pbmFuY2UgKyB3aWR0aCAyNTYsIGhlaWdodCAyLCBib3JkZXIgMFxuXG4gICAgICAgIC8vICBtYWdGaWx0ZXIgY2FuIGJlOiBnbC5MSU5FQVIsIGdsLkxJTkVBUl9NSVBNQVBfTElORUFSIG9yIGdsLk5FQVJFU1RcbiAgICAgICAgLy8gIHdyYXBTL1QgY2FuIGJlOiBnbC5DTEFNUF9UT19FREdFIG9yIGdsLlJFUEVBVFxuXG4gICAgICAgIGdsLnRleEltYWdlMkQoZ2wuVEVYVFVSRV8yRCwgMCwgZGF0YS5sdW1pbmFuY2UgPyBnbC5MVU1JTkFOQ0UgOiBnbC5SR0JBLCBnbC5SR0JBLCBnbC5VTlNJR05FRF9CWVRFLCB0ZXh0dXJlLnNvdXJjZSk7XG5cbiAgICAgICAgZ2wudGV4UGFyYW1ldGVyaShnbC5URVhUVVJFXzJELCBnbC5URVhUVVJFX01BR19GSUxURVIsIGRhdGEubWFnRmlsdGVyID8gZGF0YS5tYWdGaWx0ZXIgOiBnbC5MSU5FQVIgKTtcbiAgICAgICAgZ2wudGV4UGFyYW1ldGVyaShnbC5URVhUVVJFXzJELCBnbC5URVhUVVJFX01JTl9GSUxURVIsIGRhdGEud3JhcFMgPyBkYXRhLndyYXBTIDogZ2wuQ0xBTVBfVE9fRURHRSApO1xuXG4gICAgICAgIGdsLnRleFBhcmFtZXRlcmkoZ2wuVEVYVFVSRV8yRCwgZ2wuVEVYVFVSRV9XUkFQX1QsIGRhdGEud3JhcFMgPyBkYXRhLndyYXBTIDogZ2wuQ0xBTVBfVE9fRURHRSk7XG4gICAgICAgIGdsLnRleFBhcmFtZXRlcmkoZ2wuVEVYVFVSRV8yRCwgZ2wuVEVYVFVSRV9XUkFQX1MsIGRhdGEud3JhcFQgPyBkYXRhLndyYXBUIDogZ2wuQ0xBTVBfVE9fRURHRSk7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHRoaXMuc2hhZGVyTWFuYWdlci5yZW5kZXJlci51cGRhdGVUZXh0dXJlKHRleHR1cmUpO1xuICAgIH1cbn07XG5cbi8qKlxuICogRGVzdHJveXMgdGhlIHNoYWRlci5cbiAqXG4gKi9cblNoYWRlci5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy5nbC5kZWxldGVQcm9ncmFtKHRoaXMucHJvZ3JhbSk7XG5cbiAgICB0aGlzLmdsID0gbnVsbDtcbiAgICB0aGlzLnVuaWZvcm1zID0gbnVsbDtcbiAgICB0aGlzLmF0dHJpYnV0ZXMgPSBudWxsO1xuXG4gICAgdGhpcy52ZXJ0ZXhTcmMgPSBudWxsO1xuICAgIHRoaXMuZnJhZ21lbnRTcmMgPSBudWxsO1xufTtcblxuU2hhZGVyLnByb3RvdHlwZS5fZ2xDb21waWxlID0gZnVuY3Rpb24gKHR5cGUsIHNyYylcbntcbiAgICB2YXIgc2hhZGVyID0gdGhpcy5nbC5jcmVhdGVTaGFkZXIodHlwZSk7XG5cbiAgICB0aGlzLmdsLnNoYWRlclNvdXJjZShzaGFkZXIsIHNyYyk7XG4gICAgdGhpcy5nbC5jb21waWxlU2hhZGVyKHNoYWRlcik7XG5cbiAgICBpZiAoIXRoaXMuZ2wuZ2V0U2hhZGVyUGFyYW1ldGVyKHNoYWRlciwgdGhpcy5nbC5DT01QSUxFX1NUQVRVUykpXG4gICAge1xuICAgICAgICBjb25zb2xlLmxvZyh0aGlzLmdsLmdldFNoYWRlckluZm9Mb2coc2hhZGVyKSk7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHJldHVybiBzaGFkZXI7XG59O1xuIiwidmFyIFNoYWRlciA9IHJlcXVpcmUoJy4vU2hhZGVyJyk7XG5cbi8qKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQGV4dGVuZHMgUElYSS5TaGFkZXJcbiAqIEBwYXJhbSBzaGFkZXJNYW5hZ2VyIHtQSVhJLlNoYWRlck1hbmFnZXJ9IFRoZSB3ZWJnbCBzaGFkZXIgbWFuYWdlciB0aGlzIHNoYWRlciB3b3JrcyBmb3IuXG4gKiBAcGFyYW0gW3ZlcnRleFNyY10ge3N0cmluZ30gVGhlIHNvdXJjZSBvZiB0aGUgdmVydGV4IHNoYWRlci5cbiAqIEBwYXJhbSBbZnJhZ21lbnRTcmNdIHtzdHJpbmd9IFRoZSBzb3VyY2Ugb2YgdGhlIGZyYWdtZW50IHNoYWRlci5cbiAqIEBwYXJhbSBbY3VzdG9tVW5pZm9ybXNdIHtvYmplY3R9IEN1c3RvbSB1bmlmb3JtcyB0byB1c2UgdG8gYXVnbWVudCB0aGUgYnVpbHQtaW4gb25lcy5cbiAqIEBwYXJhbSBbZnJhZ21lbnRTcmNdIHtzdHJpbmd9IFRoZSBzb3VyY2Ugb2YgdGhlIGZyYWdtZW50IHNoYWRlci5cbiAqL1xuZnVuY3Rpb24gVGV4dHVyZVNoYWRlcihzaGFkZXJNYW5hZ2VyLCB2ZXJ0ZXhTcmMsIGZyYWdtZW50U3JjLCBjdXN0b21Vbmlmb3JtcywgY3VzdG9tQXR0cmlidXRlcylcbntcbiAgICB2YXIgdW5pZm9ybXMgPSB7XG5cbiAgICAgICAgdVNhbXBsZXI6ICAgICAgICAgICB7IHR5cGU6ICdzYW1wbGVyMkQnLCB2YWx1ZTogMCB9LFxuICAgICAgICBwcm9qZWN0aW9uTWF0cml4OiAgIHsgdHlwZTogJ21hdDMnLCB2YWx1ZTogbmV3IEZsb2F0MzJBcnJheShbMSwgMCwgMCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsIDEsIDAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLCAwLCAxXSkgfVxuICAgIH07XG5cbiAgICBpZiAoY3VzdG9tVW5pZm9ybXMpXG4gICAge1xuICAgICAgICBmb3IgKHZhciB1IGluIGN1c3RvbVVuaWZvcm1zKVxuICAgICAgICB7XG4gICAgICAgICAgICB1bmlmb3Jtc1t1XSA9IGN1c3RvbVVuaWZvcm1zW3VdO1xuICAgICAgICB9XG4gICAgfVxuXG5cbiAgICB2YXIgYXR0cmlidXRlcyA9IHtcbiAgICAgICAgYVZlcnRleFBvc2l0aW9uOiAgICAwLFxuICAgICAgICBhVGV4dHVyZUNvb3JkOiAgICAgIDAsXG4gICAgICAgIGFDb2xvcjogICAgICAgICAgICAgMFxuICAgIH07XG5cbiAgICBpZiAoY3VzdG9tQXR0cmlidXRlcylcbiAgICB7XG4gICAgICAgIGZvciAodmFyIGEgaW4gY3VzdG9tQXR0cmlidXRlcylcbiAgICAgICAge1xuICAgICAgICAgICAgYXR0cmlidXRlc1thXSA9IGN1c3RvbUF0dHJpYnV0ZXNbYV07XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGUgdmVydGV4IHNoYWRlci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge3N0cmluZ31cbiAgICAgKi9cbiAgICB2ZXJ0ZXhTcmMgPSB2ZXJ0ZXhTcmMgfHwgVGV4dHVyZVNoYWRlci5kZWZhdWx0VmVydGV4U3JjO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGZyYWdtZW50IHNoYWRlci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge3N0cmluZ31cbiAgICAgKi9cbiAgICBmcmFnbWVudFNyYyA9IGZyYWdtZW50U3JjIHx8IFRleHR1cmVTaGFkZXIuZGVmYXVsdEZyYWdtZW50U3JjO1xuXG4gICAgU2hhZGVyLmNhbGwodGhpcywgc2hhZGVyTWFuYWdlciwgdmVydGV4U3JjLCBmcmFnbWVudFNyYywgdW5pZm9ybXMsIGF0dHJpYnV0ZXMpO1xufVxuXG4vLyBjb25zdHJ1Y3RvclxuVGV4dHVyZVNoYWRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFNoYWRlci5wcm90b3R5cGUpO1xuVGV4dHVyZVNoYWRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBUZXh0dXJlU2hhZGVyO1xubW9kdWxlLmV4cG9ydHMgPSBUZXh0dXJlU2hhZGVyO1xuXG4vKipcbiAqIFRoZSBkZWZhdWx0IHZlcnRleCBzaGFkZXIgc291cmNlXG4gKlxuICogQHN0YXRpY1xuICogQGNvbnN0YW50XG4gKi9cblRleHR1cmVTaGFkZXIuZGVmYXVsdFZlcnRleFNyYyA9IFtcbiAgICAncHJlY2lzaW9uIGxvd3AgZmxvYXQ7JyxcbiAgICAnYXR0cmlidXRlIHZlYzIgYVZlcnRleFBvc2l0aW9uOycsXG4gICAgJ2F0dHJpYnV0ZSB2ZWMyIGFUZXh0dXJlQ29vcmQ7JyxcbiAgICAnYXR0cmlidXRlIHZlYzQgYUNvbG9yOycsXG5cbiAgICAndW5pZm9ybSBtYXQzIHByb2plY3Rpb25NYXRyaXg7JyxcblxuICAgICd2YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDsnLFxuICAgICd2YXJ5aW5nIHZlYzQgdkNvbG9yOycsXG5cbiAgICAndm9pZCBtYWluKHZvaWQpeycsXG4gICAgJyAgIGdsX1Bvc2l0aW9uID0gdmVjNCgocHJvamVjdGlvbk1hdHJpeCAqIHZlYzMoYVZlcnRleFBvc2l0aW9uLCAxLjApKS54eSwgMC4wLCAxLjApOycsXG4gICAgJyAgIHZUZXh0dXJlQ29vcmQgPSBhVGV4dHVyZUNvb3JkOycsXG4gICAgJyAgIHZDb2xvciA9IHZlYzQoYUNvbG9yLnJnYiAqIGFDb2xvci5hLCBhQ29sb3IuYSk7JyxcbiAgICAnfSdcbl0uam9pbignXFxuJyk7XG5cbi8qKlxuICogVGhlIGRlZmF1bHQgZnJhZ21lbnQgc2hhZGVyIHNvdXJjZVxuICpcbiAqIEBzdGF0aWNcbiAqIEBjb25zdGFudFxuICovXG5UZXh0dXJlU2hhZGVyLmRlZmF1bHRGcmFnbWVudFNyYyA9IFtcbiAgICAncHJlY2lzaW9uIGxvd3AgZmxvYXQ7JyxcblxuICAgICd2YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDsnLFxuICAgICd2YXJ5aW5nIHZlYzQgdkNvbG9yOycsXG5cbiAgICAndW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXI7JyxcblxuICAgICd2b2lkIG1haW4odm9pZCl7JyxcbiAgICAnICAgZ2xfRnJhZ0NvbG9yID0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2VGV4dHVyZUNvb3JkKSAqIHZDb2xvciA7JyxcbiAgICAnfSdcbl0uam9pbignXFxuJyk7XG4iLCJ2YXIgU2hhZGVyID0gcmVxdWlyZSgncGl4aS1nbC1jb3JlJykuR0xTaGFkZXI7XG5cbi8qKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQGV4dGVuZHMgUElYSS5TaGFkZXJcbiAqIEBwYXJhbSBzaGFkZXJNYW5hZ2VyIHtQSVhJLlNoYWRlck1hbmFnZXJ9IFRoZSB3ZWJnbCBzaGFkZXIgbWFuYWdlciB0aGlzIHNoYWRlciB3b3JrcyBmb3IuXG4gKiBAcGFyYW0gW3ZlcnRleFNyY10ge3N0cmluZ30gVGhlIHNvdXJjZSBvZiB0aGUgdmVydGV4IHNoYWRlci5cbiAqIEBwYXJhbSBbZnJhZ21lbnRTcmNdIHtzdHJpbmd9IFRoZSBzb3VyY2Ugb2YgdGhlIGZyYWdtZW50IHNoYWRlci5cbiAqIEBwYXJhbSBbY3VzdG9tVW5pZm9ybXNdIHtvYmplY3R9IEN1c3RvbSB1bmlmb3JtcyB0byB1c2UgdG8gYXVnbWVudCB0aGUgYnVpbHQtaW4gb25lcy5cbiAqIEBwYXJhbSBbZnJhZ21lbnRTcmNdIHtzdHJpbmd9IFRoZSBzb3VyY2Ugb2YgdGhlIGZyYWdtZW50IHNoYWRlci5cbiAqL1xuZnVuY3Rpb24gVGV4dHVyZVNoYWRlcihnbClcbntcbiAgICAvKipcbiAgICAgKiBUaGUgdmVydGV4IHNoYWRlci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge3N0cmluZ31cbiAgICAgKi9cbiAgICB2ZXJ0ZXhTcmMgPSBUZXh0dXJlU2hhZGVyLmRlZmF1bHRWZXJ0ZXhTcmM7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgZnJhZ21lbnQgc2hhZGVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7c3RyaW5nfVxuICAgICAqL1xuICAgIGZyYWdtZW50U3JjID0gVGV4dHVyZVNoYWRlci5kZWZhdWx0RnJhZ21lbnRTcmM7XG5cbiAgICBTaGFkZXIuY2FsbCh0aGlzLCBnbCwgdmVydGV4U3JjLCBmcmFnbWVudFNyYyk7Ly8sIHVuaWZvcm1zLCBhdHRyaWJ1dGVzKTtcblxufVxuXG4vLyBjb25zdHJ1Y3RvclxuVGV4dHVyZVNoYWRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFNoYWRlci5wcm90b3R5cGUpO1xuVGV4dHVyZVNoYWRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBUZXh0dXJlU2hhZGVyO1xubW9kdWxlLmV4cG9ydHMgPSBUZXh0dXJlU2hhZGVyO1xuXG4vKipcbiAqIFRoZSBkZWZhdWx0IHZlcnRleCBzaGFkZXIgc291cmNlXG4gKlxuICogQHN0YXRpY1xuICogQGNvbnN0YW50XG4gKi9cblRleHR1cmVTaGFkZXIuZGVmYXVsdFZlcnRleFNyYyA9IFtcbiAgICAncHJlY2lzaW9uIGxvd3AgZmxvYXQ7JyxcbiAgICAnYXR0cmlidXRlIHZlYzIgYVZlcnRleFBvc2l0aW9uOycsXG4gICAgJ2F0dHJpYnV0ZSB2ZWMyIGFUZXh0dXJlQ29vcmQ7JyxcbiAgICAnYXR0cmlidXRlIHZlYzQgYUNvbG9yOycsXG5cbiAgICAndW5pZm9ybSBtYXQzIHByb2plY3Rpb25NYXRyaXg7JyxcblxuICAgICd2YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDsnLFxuICAgICd2YXJ5aW5nIHZlYzQgdkNvbG9yOycsXG5cbiAgICAndm9pZCBtYWluKHZvaWQpeycsXG4gICAgJyAgIGdsX1Bvc2l0aW9uID0gdmVjNCgocHJvamVjdGlvbk1hdHJpeCAqIHZlYzMoYVZlcnRleFBvc2l0aW9uLCAxLjApKS54eSwgMC4wLCAxLjApOycsXG4gICAgJyAgIHZUZXh0dXJlQ29vcmQgPSBhVGV4dHVyZUNvb3JkOycsXG4gICAgJyAgIHZDb2xvciA9IHZlYzQoYUNvbG9yLnJnYiAqIGFDb2xvci5hLCBhQ29sb3IuYSk7JyxcbiAgICAnfSdcbl0uam9pbignXFxuJyk7XG5cbi8qKlxuICogVGhlIGRlZmF1bHQgZnJhZ21lbnQgc2hhZGVyIHNvdXJjZVxuICpcbiAqIEBzdGF0aWNcbiAqIEBjb25zdGFudFxuICovXG5UZXh0dXJlU2hhZGVyLmRlZmF1bHRGcmFnbWVudFNyYyA9IFtcbiAgICAncHJlY2lzaW9uIGxvd3AgZmxvYXQ7JyxcblxuICAgICd2YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDsnLFxuICAgICd2YXJ5aW5nIHZlYzQgdkNvbG9yOycsXG5cbiAgICAndW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXI7JyxcblxuICAgICd2b2lkIG1haW4odm9pZCl7JyxcbiAgICAnICAgZ2xfRnJhZ0NvbG9yID0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2VGV4dHVyZUNvb3JkKSAqIHZDb2xvciA7JyxcbiAgICAnfSdcbl0uam9pbignXFxuJyk7XG4iLCJ2YXIgV2ViR0xNYW5hZ2VyID0gcmVxdWlyZSgnLi4vbWFuYWdlcnMvV2ViR0xNYW5hZ2VyJyk7XG5cbi8qKlxuICogQmFzZSBmb3IgYSBjb21tb24gb2JqZWN0IHJlbmRlcmVyIHRoYXQgY2FuIGJlIHVzZWQgYXMgYSBzeXN0ZW0gcmVuZGVyZXIgcGx1Z2luLlxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5XZWJHTE1hbmFnZXJcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcn0gVGhlIHJlbmRlcmVyIHRoaXMgb2JqZWN0IHJlbmRlcmVyIHdvcmtzIGZvci5cbiAqL1xuZnVuY3Rpb24gT2JqZWN0UmVuZGVyZXIocmVuZGVyZXIpXG57XG4gICAgV2ViR0xNYW5hZ2VyLmNhbGwodGhpcywgcmVuZGVyZXIpO1xufVxuXG5cbk9iamVjdFJlbmRlcmVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoV2ViR0xNYW5hZ2VyLnByb3RvdHlwZSk7XG5PYmplY3RSZW5kZXJlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBPYmplY3RSZW5kZXJlcjtcbm1vZHVsZS5leHBvcnRzID0gT2JqZWN0UmVuZGVyZXI7XG5cbi8qKlxuICogU3RhcnRzIHRoZSByZW5kZXJlciBhbmQgc2V0cyB0aGUgc2hhZGVyXG4gKlxuICovXG5PYmplY3RSZW5kZXJlci5wcm90b3R5cGUuc3RhcnQgPSBmdW5jdGlvbiAoKVxue1xuICAgIC8vIHNldCB0aGUgc2hhZGVyLi5cbn07XG5cbi8qKlxuICogU3RvcHMgdGhlIHJlbmRlcmVyXG4gKlxuICovXG5PYmplY3RSZW5kZXJlci5wcm90b3R5cGUuc3RvcCA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy5mbHVzaCgpO1xufTtcblxuLyoqXG4gKiBmbHVzaGVzXG4gKlxuICovXG5PYmplY3RSZW5kZXJlci5wcm90b3R5cGUuZmx1c2ggPSBmdW5jdGlvbiAoKVxue1xuICAgIC8vIGZsdXNoIVxufTtcblxuLyoqXG4gKiBSZW5kZXJzIGFuIG9iamVjdFxuICpcbiAqIEBwYXJhbSBvYmplY3Qge1BJWEkuRGlzcGxheU9iamVjdH0gVGhlIG9iamVjdCB0byByZW5kZXIuXG4gKi9cbk9iamVjdFJlbmRlcmVyLnByb3RvdHlwZS5yZW5kZXIgPSBmdW5jdGlvbiAob2JqZWN0KSAvLyBqc2hpbnQgdW51c2VkOmZhbHNlXG57XG4gICAgLy8gcmVuZGVyIHRoZSBvYmplY3Rcbn07XG4iLCIvKipcbiAqIEhlbHBlciBjbGFzcyB0byBjcmVhdGUgYSBxdWFkXG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIGdsIHtXZWJHTFJlbmRlcmluZ0NvbnRleHR9IFRoZSBnbCBjb250ZXh0IGZvciB0aGlzIHF1YWQgdG8gdXNlLlxuICovXG5mdW5jdGlvbiBRdWFkKGdsKVxue1xuICAgIC8qXG4gICAgICogdGhlIGN1cnJlbnQgV2ViR0wgZHJhd2luZyBjb250ZXh0XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtXZWJHTFJlbmRlcmluZ0NvbnRleHR9XG4gICAgICovXG4gICAgdGhpcy5nbCA9IGdsO1xuXG4vLyAgICB0aGlzLnRleHR1cmVzID0gbmV3IFRleHR1cmVVdnMoKTtcblxuICAgIC8qKlxuICAgICAqIEFuIGFycmF5IG9mIHZlcnRpY2VzXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtGbG9hdDMyQXJyYXl9XG4gICAgICovXG4gICAgdGhpcy52ZXJ0aWNlcyA9IG5ldyBGbG9hdDMyQXJyYXkoW1xuICAgICAgICAwLDAsXG4gICAgICAgIDIwMCwwLFxuICAgICAgICAyMDAsMjAwLFxuICAgICAgICAwLDIwMFxuICAgIF0pO1xuXG4gICAgLyoqXG4gICAgICogVGhlIFV2cyBvZiB0aGUgcXVhZFxuICAgICAqXG4gICAgICogQG1lbWJlciB7RmxvYXQzMkFycmF5fVxuICAgICAqL1xuICAgIHRoaXMudXZzID0gbmV3IEZsb2F0MzJBcnJheShbXG4gICAgICAgIDAsMCxcbiAgICAgICAgMSwwLFxuICAgICAgICAxLDEsXG4gICAgICAgIDAsMVxuICAgIF0pO1xuXG4vLyAgICB2YXIgd2hpdGUgPSAoMHhGRkZGRkYgPj4gMTYpICsgKDB4RkZGRkZGICYgMHhmZjAwKSArICgoMHhGRkZGRkYgJiAweGZmKSA8PCAxNikgKyAoMSAqIDI1NSA8PCAyNCk7XG4gICAgLy9UT0RPIGNvbnZlcnQgdGhpcyB0byBhIDMyIHVuc2lnbmVkIGludCBhcnJheVxuICAgIC8qKlxuICAgICAqIFRoZSBjb2xvciBjb21wb25lbnRzIG9mIHRoZSB0cmlhbmdsZXNcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge0Zsb2F0MzJBcnJheX1cbiAgICAgKi9cbiAgICB0aGlzLmNvbG9ycyA9IG5ldyBGbG9hdDMyQXJyYXkoW1xuICAgICAgICAxLDEsMSwxLFxuICAgICAgICAxLDEsMSwxLFxuICAgICAgICAxLDEsMSwxLFxuICAgICAgICAxLDEsMSwxXG4gICAgXSk7XG5cbiAgICAvKlxuICAgICAqIEBtZW1iZXIge1VpbnQxNkFycmF5fSBBbiBhcnJheSBjb250YWluaW5nIHRoZSBpbmRpY2VzIG9mIHRoZSB2ZXJ0aWNlc1xuICAgICAqL1xuICAgIHRoaXMuaW5kaWNlcyA9IG5ldyBVaW50MTZBcnJheShbXG4gICAgICAgIDAsIDEsIDIsIDAsIDMsIDJcbiAgICBdKTtcblxuICAgIC8qXG4gICAgICogQG1lbWJlciB7V2ViR0xCdWZmZXJ9IFRoZSB2ZXJ0ZXggYnVmZmVyXG4gICAgICovXG4gICAgdGhpcy52ZXJ0ZXhCdWZmZXIgPSBnbC5jcmVhdGVCdWZmZXIoKTtcblxuICAgIC8qXG4gICAgICogQG1lbWJlciB7V2ViR0xCdWZmZXJ9IFRoZSBpbmRleCBidWZmZXJcbiAgICAgKi9cbiAgICB0aGlzLmluZGV4QnVmZmVyID0gZ2wuY3JlYXRlQnVmZmVyKCk7XG5cbiAgICBnbC5iaW5kQnVmZmVyKGdsLkFSUkFZX0JVRkZFUiwgdGhpcy52ZXJ0ZXhCdWZmZXIpO1xuICAgIGdsLmJ1ZmZlckRhdGEoZ2wuQVJSQVlfQlVGRkVSLCAoOCArIDggKyAxNikgKiA0LCBnbC5EWU5BTUlDX0RSQVcpO1xuXG4gICAgZ2wuYmluZEJ1ZmZlcihnbC5FTEVNRU5UX0FSUkFZX0JVRkZFUiwgdGhpcy5pbmRleEJ1ZmZlcik7XG4gICAgZ2wuYnVmZmVyRGF0YShnbC5FTEVNRU5UX0FSUkFZX0JVRkZFUiwgdGhpcy5pbmRpY2VzLCBnbC5TVEFUSUNfRFJBVyk7XG5cbiAgICB0aGlzLnVwbG9hZCgpO1xufVxuXG5RdWFkLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFF1YWQ7XG5cbi8qKlxuICogTWFwcyB0d28gUmVjdGFuZ2xlIHRvIHRoZSBxdWFkXG4gKiBAcGFyYW0gcmVjdCB7UElYSS5SZWN0YW5nbGV9IHRoZSBmaXJzdCByZWN0YW5nbGVcbiAqIEBwYXJhbSByZWN0MiB7UElYSS5SZWN0YW5nbGV9IHRoZSBzZWNvbmQgcmVjdGFuZ2xlXG4gKi9cblF1YWQucHJvdG90eXBlLm1hcCA9IGZ1bmN0aW9uKHJlY3QsIHJlY3QyKVxue1xuICAgIHZhciB4ID0gMDsgLy9yZWN0Mi54IC8gcmVjdC53aWR0aDtcbiAgICB2YXIgeSA9IDA7IC8vcmVjdDIueSAvIHJlY3QuaGVpZ2h0O1xuXG4gICAgdGhpcy51dnNbMF0gPSB4O1xuICAgIHRoaXMudXZzWzFdID0geTtcblxuICAgIHRoaXMudXZzWzJdID0geCArIHJlY3QyLndpZHRoIC8gcmVjdC53aWR0aDtcbiAgICB0aGlzLnV2c1szXSA9IHk7XG5cbiAgICB0aGlzLnV2c1s0XSA9IHggKyByZWN0Mi53aWR0aCAvIHJlY3Qud2lkdGg7XG4gICAgdGhpcy51dnNbNV0gPSB5ICsgcmVjdDIuaGVpZ2h0IC8gcmVjdC5oZWlnaHQ7XG5cbiAgICB0aGlzLnV2c1s2XSA9IHg7XG4gICAgdGhpcy51dnNbN10gPSB5ICsgcmVjdDIuaGVpZ2h0IC8gcmVjdC5oZWlnaHQ7XG5cbiAgICAvLy8gLS0tLS1cbiAgICB4ID0gcmVjdDIueDtcbiAgICB5ID0gcmVjdDIueTtcblxuICAgIHRoaXMudmVydGljZXNbMF0gPSB4O1xuICAgIHRoaXMudmVydGljZXNbMV0gPSB5O1xuXG4gICAgdGhpcy52ZXJ0aWNlc1syXSA9IHggKyByZWN0Mi53aWR0aDtcbiAgICB0aGlzLnZlcnRpY2VzWzNdID0geTtcblxuICAgIHRoaXMudmVydGljZXNbNF0gPSB4ICsgcmVjdDIud2lkdGg7XG4gICAgdGhpcy52ZXJ0aWNlc1s1XSA9IHkgKyByZWN0Mi5oZWlnaHQ7XG5cbiAgICB0aGlzLnZlcnRpY2VzWzZdID0geDtcbiAgICB0aGlzLnZlcnRpY2VzWzddID0geSArIHJlY3QyLmhlaWdodDtcblxuICAgIHRoaXMudXBsb2FkKCk7XG59O1xuXG4vKipcbiAqIEJpbmRzIHRoZSBidWZmZXIgYW5kIHVwbG9hZHMgdGhlIGRhdGFcbiAqL1xuUXVhZC5wcm90b3R5cGUudXBsb2FkID0gZnVuY3Rpb24oKVxue1xuICAgIHZhciBnbCA9IHRoaXMuZ2w7XG5cbiAgICAvLyBUT0RPIGNvdWxkIHByb2JhYmx5IGJlIHB1c2hlZCBpbnRvIG9uZSB1cGxvYWQhXG4gICAgZ2wuYmluZEJ1ZmZlciggZ2wuQVJSQVlfQlVGRkVSLCB0aGlzLnZlcnRleEJ1ZmZlciApO1xuXG4gICAgZ2wuYnVmZmVyU3ViRGF0YShnbC5BUlJBWV9CVUZGRVIsIDAsIHRoaXMudmVydGljZXMpO1xuXG4gICAgZ2wuYnVmZmVyU3ViRGF0YShnbC5BUlJBWV9CVUZGRVIsIDggKiA0LCB0aGlzLnV2cyk7XG5cbiAgICBnbC5idWZmZXJTdWJEYXRhKGdsLkFSUkFZX0JVRkZFUiwgKDggKyA4KSAqIDQsIHRoaXMuY29sb3JzKTtcbn07XG5cblF1YWQucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbigpXG57XG4gICAgdmFyIGdsID0gdGhpcy5nbDtcbiAgICBcbiAgICAgZ2wuZGVsZXRlQnVmZmVyKHRoaXMudmVydGV4QnVmZmVyKTtcbiAgICAgZ2wuZGVsZXRlQnVmZmVyKHRoaXMuaW5kZXhCdWZmZXIpO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBRdWFkO1xuXG5cbiIsInZhciBtYXRoID0gcmVxdWlyZSgnLi4vLi4vLi4vbWF0aCcpLFxuICAgIHV0aWxzID0gcmVxdWlyZSgnLi4vLi4vLi4vdXRpbHMnKSxcbiAgICBDT05TVCA9IHJlcXVpcmUoJy4uLy4uLy4uL2NvbnN0JyksXG4gICAgICAgIFxuICAgIEdMVGV4dHVyZSA9IHJlcXVpcmUoJ3BpeGktZ2wtY29yZScpLkdMVGV4dHVyZSxcbiAgICBHTEZyYW1lYnVmZmVyID0gcmVxdWlyZSgncGl4aS1nbC1jb3JlJykuR0xGcmFtZWJ1ZmZlcixcbiAgICBcbiAgICBTdGVuY2lsTWFza1N0YWNrID0gcmVxdWlyZSgnLi9TdGVuY2lsTWFza1N0YWNrJyk7XG5cbi8qKlxuICogQGF1dGhvciBNYXQgR3JvdmVzIGh0dHA6Ly9tYXRncm92ZXMuY29tLyBARG9vcm1hdDIzXG4gKi9cblxuLyoqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gZ2wge1dlYkdMUmVuZGVyaW5nQ29udGV4dH0gdGhlIGN1cnJlbnQgV2ViR0wgZHJhd2luZyBjb250ZXh0XG4gKiBAcGFyYW0gd2lkdGgge251bWJlcn0gdGhlIGhvcml6b250YWwgcmFuZ2Ugb2YgdGhlIGZpbHRlclxuICogQHBhcmFtIGhlaWdodCB7bnVtYmVyfSB0aGUgdmVydGljYWwgcmFuZ2Ugb2YgdGhlIGZpbHRlclxuICogQHBhcmFtIHNjYWxlTW9kZSB7bnVtYmVyfSBTZWUge0BsaW5rIFBJWEkuU0NBTEVfTU9ERVN9IGZvciBwb3NzaWJsZSB2YWx1ZXNcbiAqIEBwYXJhbSByZXNvbHV0aW9uIHtudW1iZXJ9IHRoZSBjdXJyZW50IHJlc29sdXRpb25cbiAqIEBwYXJhbSByb290IHtib29sZWFufSBXaGV0aGVyIHRoaXMgb2JqZWN0IGlzIHRoZSByb290IGVsZW1lbnQgb3Igbm90XG4gKi9cbnZhciBSZW5kZXJUYXJnZXQgPSBmdW5jdGlvbihnbCwgd2lkdGgsIGhlaWdodCwgc2NhbGVNb2RlLCByZXNvbHV0aW9uLCByb290KVxue1xuICAgIC8vVE9ETyBSZXNvbHV0aW9uIGNvdWxkIGdvIGhlcmUgKCBlZyBsb3cgcmVzIGJsdXJzIClcblxuICAgIC8qKlxuICAgICAqIFRoZSBjdXJyZW50IFdlYkdMIGRyYXdpbmcgY29udGV4dC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1dlYkdMUmVuZGVyaW5nQ29udGV4dH1cbiAgICAgKi9cbiAgICB0aGlzLmdsID0gZ2w7XG5cbiAgICAvLyBuZXh0IHRpbWUgdG8gY3JlYXRlIGEgZnJhbWUgYnVmZmVyIGFuZCB0ZXh0dXJlXG5cbiAgICAvKipcbiAgICAgKiBBIGZyYW1lIGJ1ZmZlclxuICAgICAqXG4gICAgICogQG1lbWJlciB7V2ViR0xGcmFtZUJ1ZmZlcn1cbiAgICAgKi9cbiAgICB0aGlzLmZyYW1lQnVmZmVyID0gbnVsbDtcblxuICAgIC8qKlxuICAgICAqIFRoZSB0ZXh0dXJlXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlRleHR1cmV9XG4gICAgICovXG4gICAgdGhpcy50ZXh0dXJlID0gbnVsbDtcblxuICAgIHRoaXMuY2xlYXJDb2xvciA9IFswLCAwLCAwLCAwXTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBzaXplIG9mIHRoZSBvYmplY3QgYXMgYSByZWN0YW5nbGVcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuUmVjdGFuZ2xlfVxuICAgICAqL1xuICAgIHRoaXMuc2l6ZSA9IG5ldyBtYXRoLlJlY3RhbmdsZSgwLCAwLCAxLCAxKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBjdXJyZW50IHJlc29sdXRpb25cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLnJlc29sdXRpb24gPSByZXNvbHV0aW9uIHx8IENPTlNULlJFU09MVVRJT047XG5cbiAgICAvKipcbiAgICAgKiBUaGUgcHJvamVjdGlvbiBtYXRyaXhcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuTWF0cml4fVxuICAgICAqL1xuICAgIHRoaXMucHJvamVjdGlvbk1hdHJpeCA9IG5ldyBtYXRoLk1hdHJpeCgpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIG9iamVjdCdzIHRyYW5zZm9ybVxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5NYXRyaXh9XG4gICAgICovXG4gICAgdGhpcy50cmFuc2Zvcm0gPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGZyYW1lLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5SZWN0YW5nbGV9XG4gICAgICovXG4gICAgdGhpcy5mcmFtZSA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgc3RlbmNpbCBidWZmZXIgc3RvcmVzIG1hc2tpbmcgZGF0YSBmb3IgdGhlIHJlbmRlciB0YXJnZXRcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1dlYkdMUmVuZGVyQnVmZmVyfVxuICAgICAqL1xuICAgIHRoaXMuc3RlbmNpbEJ1ZmZlciA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgZGF0YSBzdHJ1Y3R1cmUgZm9yIHRoZSBzdGVuY2lsIG1hc2tzXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlN0ZW5jaWxNYXNrU3RhY2t9XG4gICAgICovXG4gICAgdGhpcy5zdGVuY2lsTWFza1N0YWNrID0gbmV3IFN0ZW5jaWxNYXNrU3RhY2soKTtcblxuICAgIC8qKlxuICAgICAqIFN0b3JlcyBmaWx0ZXIgZGF0YSBmb3IgdGhlIHJlbmRlciB0YXJnZXRcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge29iamVjdFtdfVxuICAgICAqL1xuICAgIHRoaXMuZmlsdGVyU3RhY2sgPSBbXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJlbmRlclRhcmdldDp0aGlzLFxuICAgICAgICAgICAgZmlsdGVyOltdLFxuICAgICAgICAgICAgYm91bmRzOnRoaXMuc2l6ZVxuICAgICAgICB9XG4gICAgXTtcblxuXG4gICAgLyoqXG4gICAgICogVGhlIHNjYWxlIG1vZGUuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgUElYSS5TQ0FMRV9NT0RFUy5ERUZBVUxUXG4gICAgICogQHNlZSBQSVhJLlNDQUxFX01PREVTXG4gICAgICovXG4gICAgdGhpcy5zY2FsZU1vZGUgPSBzY2FsZU1vZGUgfHwgQ09OU1QuU0NBTEVfTU9ERVMuREVGQVVMVDtcblxuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgdGhpcyBvYmplY3QgaXMgdGhlIHJvb3QgZWxlbWVudCBvciBub3RcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICovXG4gICAgdGhpcy5yb290ID0gcm9vdDtcblxuICAgIHRoaXMuZnJhbWVCdWZmZXIgPSBHTEZyYW1lYnVmZmVyLmNyZWF0ZVJHQkEoZ2wsIDEwMCwgMTAwKTtcbiAgICBpZih0aGlzLmZyYW1lQnVmZmVyKXRoaXMuZnJhbWVCdWZmZXIudW5iaW5kKCk7XG5cbiAgIC8vIHRoaXMuZnJhbWVCdWZmZXIgPSB7ZnJhbWVidWZmZXI6bnVsbCwgYmluZDpmdW5jdGlvbigpe30sIGNsZWFyOmZ1bmN0aW9uKCl7fSwgcmVzaXplOmZ1bmN0aW9uKCl7fX0vL25ldyBHTEZyYW1lYnVmZmVyLmNyZWF0ZVJHQkEoZ2wsIDEwMCwgMTAwKTtcblxuXG5cbiAgICBpZiAoIXRoaXMucm9vdClcbiAgICB7XG4gICAgICAgIC8qXG4gICAgICAgICAgICBBIGZyYW1lIGJ1ZmZlciBuZWVkcyBhIHRhcmdldCB0byByZW5kZXIgdG8uLlxuICAgICAgICAgICAgY3JlYXRlIGEgdGV4dHVyZSBhbmQgYmluZCBpdCBhdHRhY2ggaXQgdG8gdGhlIGZyYW1lYnVmZmVyLi5cbiAgICAgICAgICovXG4gICAgICAgIFxuICAgICAgICAvLyBjcmVhdGUgYSB0ZXh0dXJlIHRvIGJpbmQgYXR0YWNoIHRvIHRoZSBmcmFtZUJ1ZmZlci4uXG4gICAgICAgIHZhciB0ZXh0dXJlID0gbmV3IEdMVGV4dHVyZShnbCk7XG5cbiAgICAgICAgdGV4dHVyZS5lbmFibGVMaW5lYXJTY2FsaW5nKClcbiAgICAgICAgdGV4dHVyZS5lbmFibGVXcmFwQ2xhbXAoKVxuXG4gICAgICAgIHRoaXMuZnJhbWVCdWZmZXIuZW5hYmxlVGV4dHVyZSh0ZXh0dXJlKTtcblxuICAgICAgICAvLyBUT0RPIGNoYW5nZSFcbiAgICAgICAgLy8gdGhpcyBpcyB1c2VkIGJ5IHRoZSBiYXNlIHRleHR1cmVcbiAgICAgICAgdGhpcy50ZXh0dXJlID0gdGV4dHVyZS50ZXh0dXJlO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICAvLyBtYWtlIGl0IGEgbnVsbCBmcmFtZWJ1ZmZlci4uXG4gICAgICAgIHRoaXMuZnJhbWVCdWZmZXIuZnJhbWVidWZmZXIgPSBudWxsO1xuICAgIH1cblxuICAgIHRoaXMucmVzaXplKHdpZHRoLCBoZWlnaHQpO1xufTtcblxuUmVuZGVyVGFyZ2V0LnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFJlbmRlclRhcmdldDtcbm1vZHVsZS5leHBvcnRzID0gUmVuZGVyVGFyZ2V0O1xuXG4vKipcbiAqIENsZWFycyB0aGUgZmlsdGVyIHRleHR1cmUuXG4gKlxuICogQHBhcmFtIFtiaW5kPWZhbHNlXSB7Ym9vbGVhbn0gU2hvdWxkIHdlIGJpbmQgb3VyIGZyYW1lYnVmZmVyIGJlZm9yZSBjbGVhcmluZz9cbiAqL1xuUmVuZGVyVGFyZ2V0LnByb3RvdHlwZS5jbGVhciA9IGZ1bmN0aW9uKGNsZWFyQ29sb3IpXG57XG4gICAgdmFyIGNjID0gY2xlYXJDb2xvciB8fCB0aGlzLmNsZWFyQ29sb3JcbiAgICB0aGlzLmZyYW1lQnVmZmVyLmNsZWFyKGNjWzBdLGNjWzFdLGNjWzJdLGNjWzNdKS8vcixnLGIsYSk7XG59O1xuXG4vKipcbiAqIEJpbmRzIHRoZSBzdGVuY2lsIGJ1ZmZlci5cbiAqXG4gKi9cblJlbmRlclRhcmdldC5wcm90b3R5cGUuYXR0YWNoU3RlbmNpbEJ1ZmZlciA9IGZ1bmN0aW9uKClcbntcbiAgICAvL1RPRE8gY2hlY2sgaWYgc3RlbmNpbCBpcyBkb25lP1xuICAgIC8qKlxuICAgICAqIFRoZSBzdGVuY2lsIGJ1ZmZlciBpcyB1c2VkIGZvciBtYXNraW5nIGluIHBpeGlcbiAgICAgKiBsZXRzIGNyZWF0ZSBvbmUgYW5kIHRoZW4gYWRkIGF0dGFjaCBpdCB0byB0aGUgZnJhbWVidWZmZXIuLlxuICAgICAqL1xuICAgIGlmICghdGhpcy5yb290KVxuICAgIHtcbiAgICAgICAgdGhpcy5mcmFtZUJ1ZmZlci5lbmFibGVTdGVuY2lsKCk7XG4gICAgfVxufTtcblxuLyoqXG4gKiBCaW5kcyB0aGUgYnVmZmVycyBhbmQgaW5pdGlhbGlzZXMgdGhlIHZpZXdwb3J0LlxuICpcbiAqL1xuUmVuZGVyVGFyZ2V0LnByb3RvdHlwZS5hY3RpdmF0ZSA9IGZ1bmN0aW9uKClcbntcbiAgICAvL1RPT0QgcmVmYWN0b3IgdXNhZ2Ugb2YgZnJhbWUuLlxuICAgIHZhciBnbCA9IHRoaXMuZ2w7XG5cbiAgICB0aGlzLmZyYW1lQnVmZmVyLmJpbmQoKTtcblxuXG4gICAgdmFyIHByb2plY3Rpb25GcmFtZSA9IHRoaXMuZnJhbWUgfHwgdGhpcy5zaXplO1xuXG4gICAgLy8gVE9ETyBhZGQgYSBkaXJ0eSBmbGFnIHRvIHRoaXMgb2YgYSBzZXR0ZXIgZm9yIHRoZSBmcmFtZT9cbiAgICB0aGlzLmNhbGN1bGF0ZVByb2plY3Rpb24oIHByb2plY3Rpb25GcmFtZSApO1xuXG4gICAgaWYodGhpcy50cmFuc2Zvcm0pXG4gICAge1xuICAgICAgICB0aGlzLnByb2plY3Rpb25NYXRyaXguYXBwZW5kKHRoaXMudHJhbnNmb3JtKTtcbiAgICB9XG5cbiAgICBnbC52aWV3cG9ydCgwLDAsIHByb2plY3Rpb25GcmFtZS53aWR0aCAqIHRoaXMucmVzb2x1dGlvbiwgcHJvamVjdGlvbkZyYW1lLmhlaWdodCAqIHRoaXMucmVzb2x1dGlvbik7XG59O1xuXG4vKipcbiAqIFVwZGF0ZXMgdGhlIHByb2plY3Rpb24gbWF0cml4IGJhc2VkIG9uIGEgcHJvamVjdGlvbiBmcmFtZSAod2hpY2ggaXMgYSByZWN0YW5nbGUpXG4gKlxuICovXG5SZW5kZXJUYXJnZXQucHJvdG90eXBlLmNhbGN1bGF0ZVByb2plY3Rpb24gPSBmdW5jdGlvbiAocHJvamVjdGlvbkZyYW1lKVxue1xuICAgIHZhciBwbSA9IHRoaXMucHJvamVjdGlvbk1hdHJpeDtcblxuICAgIHBtLmlkZW50aXR5KCk7XG5cbiAgICBpZiAoIXRoaXMucm9vdClcbiAgICB7XG4gICAgICAgIHBtLmEgPSAxIC8gcHJvamVjdGlvbkZyYW1lLndpZHRoKjI7XG4gICAgICAgIHBtLmQgPSAxIC8gcHJvamVjdGlvbkZyYW1lLmhlaWdodCoyO1xuXG4gICAgICAgIHBtLnR4ID0gLTEgLSBwcm9qZWN0aW9uRnJhbWUueCAqIHBtLmE7XG4gICAgICAgIHBtLnR5ID0gLTEgLSBwcm9qZWN0aW9uRnJhbWUueSAqIHBtLmQ7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHBtLmEgPSAxIC8gcHJvamVjdGlvbkZyYW1lLndpZHRoKjI7XG4gICAgICAgIHBtLmQgPSAtMSAvIHByb2plY3Rpb25GcmFtZS5oZWlnaHQqMjtcblxuICAgICAgICBwbS50eCA9IC0xIC0gcHJvamVjdGlvbkZyYW1lLnggKiBwbS5hO1xuICAgICAgICBwbS50eSA9IDEgLSBwcm9qZWN0aW9uRnJhbWUueSAqIHBtLmQ7XG4gICAgfVxufTtcblxuLyoqXG4gKiBSZXNpemVzIHRoZSB0ZXh0dXJlIHRvIHRoZSBzcGVjaWZpZWQgd2lkdGggYW5kIGhlaWdodFxuICpcbiAqIEBwYXJhbSB3aWR0aCB7TnVtYmVyfSB0aGUgbmV3IHdpZHRoIG9mIHRoZSB0ZXh0dXJlXG4gKiBAcGFyYW0gaGVpZ2h0IHtOdW1iZXJ9IHRoZSBuZXcgaGVpZ2h0IG9mIHRoZSB0ZXh0dXJlXG4gKi9cblJlbmRlclRhcmdldC5wcm90b3R5cGUucmVzaXplID0gZnVuY3Rpb24gKHdpZHRoLCBoZWlnaHQpXG57XG4gICAgd2lkdGggPSB3aWR0aCB8IDA7XG4gICAgaGVpZ2h0ID0gaGVpZ2h0IHwgMDtcblxuICAgIGlmICh0aGlzLnNpemUud2lkdGggPT09IHdpZHRoICYmIHRoaXMuc2l6ZS5oZWlnaHQgPT09IGhlaWdodCkgXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5zaXplLndpZHRoID0gd2lkdGg7XG4gICAgdGhpcy5zaXplLmhlaWdodCA9IGhlaWdodDtcblxuICAgIHRoaXMuZnJhbWVCdWZmZXIucmVzaXplKHdpZHRoICogdGhpcy5yZXNvbHV0aW9uLCBoZWlnaHQgKiB0aGlzLnJlc29sdXRpb24pO1xuICAgIFxuICAgIHZhciBwcm9qZWN0aW9uRnJhbWUgPSB0aGlzLmZyYW1lIHx8IHRoaXMuc2l6ZTtcblxuICAgIHRoaXMuY2FsY3VsYXRlUHJvamVjdGlvbiggcHJvamVjdGlvbkZyYW1lICk7XG59O1xuXG4vKipcbiAqIERlc3Ryb3lzIHRoZSByZW5kZXIgdGFyZ2V0LlxuICpcbiAqL1xuUmVuZGVyVGFyZ2V0LnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKClcbntcbiAgICB2YXIgZ2wgPSB0aGlzLmdsO1xuICAgIFxuICAgIHRoaXMuZnJhbWVCdWZmZXIuZGVzdHJveSgpO1xuXG4gICAgdGhpcy5mcmFtZUJ1ZmZlciA9IG51bGw7XG4gICAgdGhpcy50ZXh0dXJlID0gbnVsbDtcbn07XG4iLCIvKipcbiAqIEdlbmVyaWMgTWFzayBTdGFjayBkYXRhIHN0cnVjdHVyZVxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICovXG5mdW5jdGlvbiBTdGVuY2lsTWFza1N0YWNrKClcbntcblx0LyoqXG4gICAgICogVGhlIGFjdHVhbCBzdGFja1xuICAgICAqXG4gICAgICogQG1lbWJlciB7YW55W119XG4gICAgICovXG4gICAgdGhpcy5zdGVuY2lsU3RhY2sgPSBbXTtcblxuICAgIC8qKlxuICAgICAqIFRPRE8gQGFsdmluXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqL1xuICAgIHRoaXMucmV2ZXJzZSA9IHRydWU7XG5cbiAgICAvKipcbiAgICAgKiBJbnRlcm5hbCBjb3VudFxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMuY291bnQgPSAwO1xufVxuXG5TdGVuY2lsTWFza1N0YWNrLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFN0ZW5jaWxNYXNrU3RhY2s7XG5tb2R1bGUuZXhwb3J0cyA9IFN0ZW5jaWxNYXNrU3RhY2s7XG4iLCJDT05TVCA9IHJlcXVpcmUoJy4uLy4uLy4uL2NvbnN0Jyk7XG5cbi8qKlxuICogTWFwcyBnbCBibGVuZCBjb21iaW5hdGlvbnMgdG8gV2ViR0xcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqL1xuZnVuY3Rpb24gbWFwV2ViR0xCbGVuZE1vZGVzVG9QaXhpKGdsLCBvYmplY3QpXG57XG4gICAgb2JqZWN0ID0gb2JqZWN0IHx8IHt9O1xuXG4gICAgLy9UT0RPIC0gcHJlbXVsdGlwbHkgYWxwaGEgd291bGQgYmUgZGlmZmVyZW50LlxuICAgIC8vYWRkIGEgYm9vbGVhbiBmb3IgdGhhdCFcbiAgICBvYmplY3RbQ09OU1QuQkxFTkRfTU9ERVMuTk9STUFMXSAgICAgICAgPSBbZ2wuT05FLCAgICAgICBnbC5PTkVfTUlOVVNfU1JDX0FMUEhBXTtcbiAgICBvYmplY3RbQ09OU1QuQkxFTkRfTU9ERVMuQUREXSAgICAgICAgICAgPSBbZ2wuU1JDX0FMUEhBLCBnbC5EU1RfQUxQSEFdO1xuICAgIG9iamVjdFtDT05TVC5CTEVORF9NT0RFUy5NVUxUSVBMWV0gICAgICA9IFtnbC5EU1RfQ09MT1IsIGdsLk9ORV9NSU5VU19TUkNfQUxQSEFdO1xuICAgIG9iamVjdFtDT05TVC5CTEVORF9NT0RFUy5TQ1JFRU5dICAgICAgICA9IFtnbC5TUkNfQUxQSEEsIGdsLk9ORV07XG4gICAgb2JqZWN0W0NPTlNULkJMRU5EX01PREVTLk9WRVJMQVldICAgICAgID0gW2dsLk9ORSwgICAgICAgZ2wuT05FX01JTlVTX1NSQ19BTFBIQV07XG4gICAgb2JqZWN0W0NPTlNULkJMRU5EX01PREVTLkRBUktFTl0gICAgICAgID0gW2dsLk9ORSwgICAgICAgZ2wuT05FX01JTlVTX1NSQ19BTFBIQV07XG4gICAgb2JqZWN0W0NPTlNULkJMRU5EX01PREVTLkxJR0hURU5dICAgICAgID0gW2dsLk9ORSwgICAgICAgZ2wuT05FX01JTlVTX1NSQ19BTFBIQV07XG4gICAgb2JqZWN0W0NPTlNULkJMRU5EX01PREVTLkNPTE9SX0RPREdFXSAgID0gW2dsLk9ORSwgICAgICAgZ2wuT05FX01JTlVTX1NSQ19BTFBIQV07XG4gICAgb2JqZWN0W0NPTlNULkJMRU5EX01PREVTLkNPTE9SX0JVUk5dICAgID0gW2dsLk9ORSwgICAgICAgZ2wuT05FX01JTlVTX1NSQ19BTFBIQV07XG4gICAgb2JqZWN0W0NPTlNULkJMRU5EX01PREVTLkhBUkRfTElHSFRdICAgID0gW2dsLk9ORSwgICAgICAgZ2wuT05FX01JTlVTX1NSQ19BTFBIQV07XG4gICAgb2JqZWN0W0NPTlNULkJMRU5EX01PREVTLlNPRlRfTElHSFRdICAgID0gW2dsLk9ORSwgICAgICAgZ2wuT05FX01JTlVTX1NSQ19BTFBIQV07XG4gICAgb2JqZWN0W0NPTlNULkJMRU5EX01PREVTLkRJRkZFUkVOQ0VdICAgID0gW2dsLk9ORSwgICAgICAgZ2wuT05FX01JTlVTX1NSQ19BTFBIQV07XG4gICAgb2JqZWN0W0NPTlNULkJMRU5EX01PREVTLkVYQ0xVU0lPTl0gICAgID0gW2dsLk9ORSwgICAgICAgZ2wuT05FX01JTlVTX1NSQ19BTFBIQV07XG4gICAgb2JqZWN0W0NPTlNULkJMRU5EX01PREVTLkhVRV0gICAgICAgICAgID0gW2dsLk9ORSwgICAgICAgZ2wuT05FX01JTlVTX1NSQ19BTFBIQV07XG4gICAgb2JqZWN0W0NPTlNULkJMRU5EX01PREVTLlNBVFVSQVRJT05dICAgID0gW2dsLk9ORSwgICAgICAgZ2wuT05FX01JTlVTX1NSQ19BTFBIQV07XG4gICAgb2JqZWN0W0NPTlNULkJMRU5EX01PREVTLkNPTE9SXSAgICAgICAgID0gW2dsLk9ORSwgICAgICAgZ2wuT05FX01JTlVTX1NSQ19BTFBIQV07XG4gICAgb2JqZWN0W0NPTlNULkJMRU5EX01PREVTLkxVTUlOT1NJVFldICAgID0gW2dsLk9ORSwgICAgICAgZ2wuT05FX01JTlVTX1NSQ19BTFBIQV07XG5cbiAgICByZXR1cm4gb2JqZWN0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IG1hcFdlYkdMQmxlbmRNb2Rlc1RvUGl4aTtcbiIsIkNPTlNUID0gcmVxdWlyZSgnLi4vLi4vLi4vY29uc3QnKTtcblxuLyoqXG4gKiBHZW5lcmljIE1hc2sgU3RhY2sgZGF0YSBzdHJ1Y3R1cmVcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqL1xuZnVuY3Rpb24gbWFwV2ViR0xEcmF3TW9kZXNUb1BpeGkoZ2wsIG9iamVjdClcbntcblx0b2JqZWN0PSBvYmplY3QgfHwge307XG5cbiAgICBvYmplY3RbQ09OU1QuRFJBV19NT0RFUy5QT0lOVFNdICAgICAgICAgPSBnbC5QT0lOVFM7XG4gICAgb2JqZWN0W0NPTlNULkRSQVdfTU9ERVMuTElORVNdICAgICAgICAgID0gZ2wuTElORVM7XG4gICAgb2JqZWN0W0NPTlNULkRSQVdfTU9ERVMuTElORV9MT09QXSAgICAgID0gZ2wuTElORV9MT09QO1xuICAgIG9iamVjdFtDT05TVC5EUkFXX01PREVTLkxJTkVfU1RSSVBdICAgICA9IGdsLkxJTkVfU1RSSVA7XG4gICAgb2JqZWN0W0NPTlNULkRSQVdfTU9ERVMuVFJJQU5HTEVTXSAgICAgID0gZ2wuVFJJQU5HTEVTO1xuICAgIG9iamVjdFtDT05TVC5EUkFXX01PREVTLlRSSUFOR0xFX1NUUklQXSA9IGdsLlRSSUFOR0xFX1NUUklQO1xuICAgIG9iamVjdFtDT05TVC5EUkFXX01PREVTLlRSSUFOR0xFX0ZBTl0gICA9IGdsLlRSSUFOR0xFX0ZBTjtcblxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IG1hcFdlYkdMRHJhd01vZGVzVG9QaXhpO1xuIiwidmFyIG1hdGggPSByZXF1aXJlKCcuLi9tYXRoJyksXG4gICAgVGV4dHVyZSA9IHJlcXVpcmUoJy4uL3RleHR1cmVzL1RleHR1cmUnKSxcbiAgICBDb250YWluZXIgPSByZXF1aXJlKCcuLi9kaXNwbGF5L0NvbnRhaW5lcicpLFxuICAgIENhbnZhc1RpbnRlciA9IHJlcXVpcmUoJy4uL3JlbmRlcmVycy9jYW52YXMvdXRpbHMvQ2FudmFzVGludGVyJyksXG4gICAgdXRpbHMgPSByZXF1aXJlKCcuLi91dGlscycpLFxuICAgIENPTlNUID0gcmVxdWlyZSgnLi4vY29uc3QnKSxcbiAgICB0ZW1wUG9pbnQgPSBuZXcgbWF0aC5Qb2ludCgpO1xuXG4vKipcbiAqIFRoZSBTcHJpdGUgb2JqZWN0IGlzIHRoZSBiYXNlIGZvciBhbGwgdGV4dHVyZWQgb2JqZWN0cyB0aGF0IGFyZSByZW5kZXJlZCB0byB0aGUgc2NyZWVuXG4gKlxuICogQSBzcHJpdGUgY2FuIGJlIGNyZWF0ZWQgZGlyZWN0bHkgZnJvbSBhbiBpbWFnZSBsaWtlIHRoaXM6XG4gKlxuICogYGBganNcbiAqIHZhciBzcHJpdGUgPSBuZXcgUElYSS5TcHJpdGUuZnJvbUltYWdlKCdhc3NldHMvaW1hZ2UucG5nJyk7XG4gKiBgYGBcbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQ29udGFpbmVyXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIHRleHR1cmUge1BJWEkuVGV4dHVyZX0gVGhlIHRleHR1cmUgZm9yIHRoaXMgc3ByaXRlXG4gKi9cbmZ1bmN0aW9uIFNwcml0ZSh0ZXh0dXJlKVxue1xuICAgIENvbnRhaW5lci5jYWxsKHRoaXMpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGFuY2hvciBzZXRzIHRoZSBvcmlnaW4gcG9pbnQgb2YgdGhlIHRleHR1cmUuXG4gICAgICogVGhlIGRlZmF1bHQgaXMgMCwwIHRoaXMgbWVhbnMgdGhlIHRleHR1cmUncyBvcmlnaW4gaXMgdGhlIHRvcCBsZWZ0XG4gICAgICogU2V0dGluZyB0aGUgYW5jaG9yIHRvIDAuNSwwLjUgbWVhbnMgdGhlIHRleHR1cmUncyBvcmlnaW4gaXMgY2VudGVyZWRcbiAgICAgKiBTZXR0aW5nIHRoZSBhbmNob3IgdG8gMSwxIHdvdWxkIG1lYW4gdGhlIHRleHR1cmUncyBvcmlnaW4gcG9pbnQgd2lsbCBiZSB0aGUgYm90dG9tIHJpZ2h0IGNvcm5lclxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5Qb2ludH1cbiAgICAgKi9cbiAgICB0aGlzLmFuY2hvciA9IG5ldyBtYXRoLlBvaW50KCk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgdGV4dHVyZSB0aGF0IHRoZSBzcHJpdGUgaXMgdXNpbmdcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuVGV4dHVyZX1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX3RleHR1cmUgPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHdpZHRoIG9mIHRoZSBzcHJpdGUgKHRoaXMgaXMgaW5pdGlhbGx5IHNldCBieSB0aGUgdGV4dHVyZSlcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX3dpZHRoID0gMDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBoZWlnaHQgb2YgdGhlIHNwcml0ZSAodGhpcyBpcyBpbml0aWFsbHkgc2V0IGJ5IHRoZSB0ZXh0dXJlKVxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5faGVpZ2h0ID0gMDtcblxuICAgIC8qKlxuICAgICAqIFRoZSB0aW50IGFwcGxpZWQgdG8gdGhlIHNwcml0ZS4gVGhpcyBpcyBhIGhleCB2YWx1ZS4gQSB2YWx1ZSBvZiAweEZGRkZGRiB3aWxsIHJlbW92ZSBhbnkgdGludCBlZmZlY3QuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMHhGRkZGRkZcbiAgICAgKi9cbiAgICB0aGlzLnRpbnQgPSAweEZGRkZGRjtcblxuICAgIC8qKlxuICAgICAqIFRoZSBibGVuZCBtb2RlIHRvIGJlIGFwcGxpZWQgdG8gdGhlIHNwcml0ZS4gQXBwbHkgYSB2YWx1ZSBvZiBgUElYSS5CTEVORF9NT0RFUy5OT1JNQUxgIHRvIHJlc2V0IHRoZSBibGVuZCBtb2RlLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IFBJWEkuQkxFTkRfTU9ERVMuTk9STUFMXG4gICAgICogQHNlZSBQSVhJLkJMRU5EX01PREVTXG4gICAgICovXG4gICAgdGhpcy5ibGVuZE1vZGUgPSBDT05TVC5CTEVORF9NT0RFUy5OT1JNQUw7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgc2hhZGVyIHRoYXQgd2lsbCBiZSB1c2VkIHRvIHJlbmRlciB0aGUgc3ByaXRlLiBTZXQgdG8gbnVsbCB0byByZW1vdmUgYSBjdXJyZW50IHNoYWRlci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuQWJzdHJhY3RGaWx0ZXJ8UElYSS5TaGFkZXJ9XG4gICAgICovXG4gICAgdGhpcy5zaGFkZXIgPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogQW4gaW50ZXJuYWwgY2FjaGVkIHZhbHVlIG9mIHRoZSB0aW50LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDB4RkZGRkZGXG4gICAgICovXG4gICAgdGhpcy5jYWNoZWRUaW50ID0gMHhGRkZGRkY7XG5cbiAgICAvLyBjYWxsIHRleHR1cmUgc2V0dGVyXG4gICAgdGhpcy50ZXh0dXJlID0gdGV4dHVyZSB8fCBUZXh0dXJlLkVNUFRZO1xuICAgIHRoaXMudGV4dHVyZURpcnR5ID0gdHJ1ZVxuICAgIHRoaXMudmVydGV4RGlydHkgPSB0cnVlO1xuICAgIHRoaXMudmVydGV4RGF0YSA9IG5ldyBGbG9hdDMyQXJyYXkoOCk7XG59XG5cbi8vIGNvbnN0cnVjdG9yXG5TcHJpdGUucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShDb250YWluZXIucHJvdG90eXBlKTtcblNwcml0ZS5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBTcHJpdGU7XG5tb2R1bGUuZXhwb3J0cyA9IFNwcml0ZTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoU3ByaXRlLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFRoZSB3aWR0aCBvZiB0aGUgc3ByaXRlLCBzZXR0aW5nIHRoaXMgd2lsbCBhY3R1YWxseSBtb2RpZnkgdGhlIHNjYWxlIHRvIGFjaGlldmUgdGhlIHZhbHVlIHNldFxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLlNwcml0ZSNcbiAgICAgKi9cbiAgICB3aWR0aDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiBNYXRoLmFicyh0aGlzLnNjYWxlLngpICogdGhpcy50ZXh0dXJlLl9mcmFtZS53aWR0aDtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHZhciBzaWduID0gdXRpbHMuc2lnbih0aGlzLnNjYWxlLngpIHx8IDE7XG4gICAgICAgICAgICB0aGlzLnNjYWxlLnggPSBzaWduICogdmFsdWUgLyB0aGlzLnRleHR1cmUuX2ZyYW1lLndpZHRoO1xuICAgICAgICAgICAgdGhpcy5fd2lkdGggPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBUaGUgaGVpZ2h0IG9mIHRoZSBzcHJpdGUsIHNldHRpbmcgdGhpcyB3aWxsIGFjdHVhbGx5IG1vZGlmeSB0aGUgc2NhbGUgdG8gYWNoaWV2ZSB0aGUgdmFsdWUgc2V0XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuU3ByaXRlI1xuICAgICAqL1xuICAgIGhlaWdodDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiAgTWF0aC5hYnModGhpcy5zY2FsZS55KSAqIHRoaXMudGV4dHVyZS5fZnJhbWUuaGVpZ2h0O1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdmFyIHNpZ24gPSB1dGlscy5zaWduKHRoaXMuc2NhbGUueSkgfHwgMTtcbiAgICAgICAgICAgIHRoaXMuc2NhbGUueSA9IHNpZ24gKiB2YWx1ZSAvIHRoaXMudGV4dHVyZS5fZnJhbWUuaGVpZ2h0O1xuICAgICAgICAgICAgdGhpcy5faGVpZ2h0ID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVGhlIHRleHR1cmUgdGhhdCB0aGUgc3ByaXRlIGlzIHVzaW5nXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlRleHR1cmV9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuU3ByaXRlI1xuICAgICAqL1xuICAgIHRleHR1cmU6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gIHRoaXMuX3RleHR1cmU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICBpZiAodGhpcy5fdGV4dHVyZSA9PT0gdmFsdWUpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLl90ZXh0dXJlID0gdmFsdWU7XG4gICAgICAgICAgICB0aGlzLmNhY2hlZFRpbnQgPSAweEZGRkZGRjtcblxuICAgICAgICAgICAgdGhpcy50ZXh0dXJlRGlydHkgPSB0cnVlO1xuXG4gICAgICAgICAgICBpZiAodmFsdWUpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgLy8gd2FpdCBmb3IgdGhlIHRleHR1cmUgdG8gbG9hZFxuICAgICAgICAgICAgICAgIGlmICh2YWx1ZS5iYXNlVGV4dHVyZS5oYXNMb2FkZWQpXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9vblRleHR1cmVVcGRhdGUoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgdmFsdWUub25jZSgndXBkYXRlJywgdGhpcy5fb25UZXh0dXJlVXBkYXRlLCB0aGlzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG59KTtcblxuLyoqXG4gKiBXaGVuIHRoZSB0ZXh0dXJlIGlzIHVwZGF0ZWQsIHRoaXMgZXZlbnQgd2lsbCBmaXJlIHRvIHVwZGF0ZSB0aGUgc2NhbGUgYW5kIGZyYW1lXG4gKlxuICogQHByaXZhdGVcbiAqL1xuU3ByaXRlLnByb3RvdHlwZS5fb25UZXh0dXJlVXBkYXRlID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLnRleHR1cmVEaXJ0eSA9IHRydWU7XG5cbiAgICAvLyBzbyBpZiBfd2lkdGggaXMgMCB0aGVuIHdpZHRoIHdhcyBub3Qgc2V0Li5cbiAgICBpZiAodGhpcy5fd2lkdGgpXG4gICAge1xuICAgICAgICB0aGlzLnNjYWxlLnggPSB1dGlscy5zaWduKHRoaXMuc2NhbGUueCkgKiB0aGlzLl93aWR0aCAvIHRoaXMudGV4dHVyZS5mcmFtZS53aWR0aDtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5faGVpZ2h0KVxuICAgIHtcbiAgICAgICAgdGhpcy5zY2FsZS55ID0gdXRpbHMuc2lnbih0aGlzLnNjYWxlLnkpICogdGhpcy5faGVpZ2h0IC8gdGhpcy50ZXh0dXJlLmZyYW1lLmhlaWdodDtcbiAgICB9XG59O1xuXG5TcHJpdGUucHJvdG90eXBlLmNhY2x1bGF0ZVZlcnRpY2VzID0gZnVuY3Rpb24gKClcbntcblxuICAgIHZhciB0ZXh0dXJlID0gdGhpcy5fdGV4dHVyZSxcbiAgICAgICAgd3QgPSB0aGlzLndvcmxkVHJhbnNmb3JtLFxuICAgICAgICBhID0gd3QuYSwgYiA9IHd0LmIsIGMgPSB3dC5jLCBkID0gd3QuZCwgdHggPSB3dC50eCwgdHkgPSB3dC50eSxcbiAgICAgICAgdmVydGV4RGF0YSA9IHRoaXMudmVydGV4RGF0YSxcbiAgICAgICAgdzAsIHcxLCBoMCwgaDEsXG4gICAgICAgIHRyaW0gPSB0ZXh0dXJlLnRyaW07XG4gICAgXG4gICAgaWYgKHRyaW0pXG4gICAge1xuICAgICAgICAvLyBpZiB0aGUgc3ByaXRlIGlzIHRyaW1tZWQgYW5kIGlzIG5vdCBhIHRpbGluZ3Nwcml0ZSB0aGVuIHdlIG5lZWQgdG8gYWRkIHRoZSBleHRyYSBzcGFjZSBiZWZvcmUgdHJhbnNmb3JtaW5nIHRoZSBzcHJpdGUgY29vcmRzLi5cbiAgICAgICAgdzEgPSB0cmltLnggLSB0aGlzLmFuY2hvci54ICogdHJpbS53aWR0aDtcbiAgICAgICAgdzAgPSB3MSArIHRleHR1cmUuY3JvcC53aWR0aDtcblxuICAgICAgICBoMSA9IHRyaW0ueSAtIHRoaXMuYW5jaG9yLnkgKiB0cmltLmhlaWdodDtcbiAgICAgICAgaDAgPSBoMSArIHRleHR1cmUuY3JvcC5oZWlnaHQ7XG5cbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgdzAgPSAodGV4dHVyZS5fZnJhbWUud2lkdGggKSAqICgxLXRoaXMuYW5jaG9yLngpO1xuICAgICAgICB3MSA9ICh0ZXh0dXJlLl9mcmFtZS53aWR0aCApICogLXRoaXMuYW5jaG9yLng7XG5cbiAgICAgICAgaDAgPSB0ZXh0dXJlLl9mcmFtZS5oZWlnaHQgKiAoMS10aGlzLmFuY2hvci55KTtcbiAgICAgICAgaDEgPSB0ZXh0dXJlLl9mcmFtZS5oZWlnaHQgKiAtdGhpcy5hbmNob3IueTtcbiAgICB9XG5cbiAgICAvLyB4eVxuICAgIHZlcnRleERhdGFbMF0gPSBhICogdzEgKyBjICogaDEgKyB0eDtcbiAgICB2ZXJ0ZXhEYXRhWzFdID0gZCAqIGgxICsgYiAqIHcxICsgdHk7XG5cbiAgICAvLyB4eVxuICAgIHZlcnRleERhdGFbMl0gPSBhICogdzAgKyBjICogaDEgKyB0eDtcbiAgICB2ZXJ0ZXhEYXRhWzNdID0gZCAqIGgxICsgYiAqIHcwICsgdHk7XG5cbiAgICAgLy8geHlcbiAgICB2ZXJ0ZXhEYXRhWzRdID0gYSAqIHcwICsgYyAqIGgwICsgdHg7XG4gICAgdmVydGV4RGF0YVs1XSA9IGQgKiBoMCArIGIgKiB3MCArIHR5O1xuXG4gICAgLy8geHlcbiAgICB2ZXJ0ZXhEYXRhWzZdID0gYSAqIHcxICsgYyAqIGgwICsgdHg7XG4gICAgdmVydGV4RGF0YVs3XSA9IGQgKiBoMCArIGIgKiB3MSArIHR5O1xuXG5cbn1cblxuLyoqXG4qXG4qIFJlbmRlcnMgdGhlIG9iamVjdCB1c2luZyB0aGUgV2ViR0wgcmVuZGVyZXJcbipcbiogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLldlYkdMUmVuZGVyZXJ9XG4qIEBwcml2YXRlXG4qL1xuU3ByaXRlLnByb3RvdHlwZS5fcmVuZGVyV2ViR0wgPSBmdW5jdGlvbiAocmVuZGVyZXIpXG57XG4gICAgaWYodGhpcy50ZXh0dXJlRGlydHkpXG4gICAge1xuICAgICAgICB0aGlzLnRleHR1cmVEaXJ0eSA9IGZhbHNlO1xuXG4gICAgICAgIHRoaXMuX29uVGV4dHVyZVVwZGF0ZSgpO1xuICAgICAgICBcbiAgICAgICAgdGhpcy52ZXJ0ZXhEaXJ0eSA9IHRydWU7XG4gICAgfVxuXG4gICAgaWYodGhpcy52ZXJ0ZXhEaXJ0eSlcbiAgICB7XG4gICAgICAgIHRoaXMudmVydGV4RGlydHkgPSBmYWxzZTtcblxuICAgICAgICAvLyBzZXQgdGhlIHZlcnRleCBkYXRhXG4gICAgICAgIHRoaXMuY2FjbHVsYXRlVmVydGljZXMoKTtcblxuICAgIH1cbiAgICBcbiAgICByZW5kZXJlci5zZXRPYmplY3RSZW5kZXJlcihyZW5kZXJlci5wbHVnaW5zLnNwcml0ZSk7XG4gICAgcmVuZGVyZXIucGx1Z2lucy5zcHJpdGUucmVuZGVyKHRoaXMpO1xufTtcblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBib3VuZHMgb2YgdGhlIFNwcml0ZSBhcyBhIHJlY3RhbmdsZS4gVGhlIGJvdW5kcyBjYWxjdWxhdGlvbiB0YWtlcyB0aGUgd29ybGRUcmFuc2Zvcm0gaW50byBhY2NvdW50LlxuICpcbiAqIEBwYXJhbSBtYXRyaXgge1BJWEkuTWF0cml4fSB0aGUgdHJhbnNmb3JtYXRpb24gbWF0cml4IG9mIHRoZSBzcHJpdGVcbiAqIEByZXR1cm4ge1BJWEkuUmVjdGFuZ2xlfSB0aGUgZnJhbWluZyByZWN0YW5nbGVcbiAqL1xuU3ByaXRlLnByb3RvdHlwZS5nZXRCb3VuZHMgPSBmdW5jdGlvbiAobWF0cml4KVxue1xuICAgIGlmKCF0aGlzLl9jdXJyZW50Qm91bmRzKVxuICAgIHtcbiAgICAgICAgaWYodGhpcy52ZXJ0ZXhEaXJ0eSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy52ZXJ0ZXhEaXJ0eSA9IGZhbHNlO1xuXG4gICAgICAgICAgICAvLyBzZXQgdGhlIHZlcnRleCBkYXRhXG4gICAgICAgICAgICB0aGlzLmNhY2x1bGF0ZVZlcnRpY2VzKCk7XG5cbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBtaW5YLFxuICAgICAgICAgICAgbWF4WCxcbiAgICAgICAgICAgIG1pblksXG4gICAgICAgICAgICBtYXhZLFxuICAgICAgICAgICAgdmVydGV4RGF0YSA9IHRoaXMudmVydGV4RGF0YTtcblxuICAgICAgICB2YXIgeDEgPSB2ZXJ0ZXhEYXRhWzBdXG4gICAgICAgIHZhciB5MSA9IHZlcnRleERhdGFbMV1cblxuICAgICAgICB2YXIgeDIgPSB2ZXJ0ZXhEYXRhWzJdXG4gICAgICAgIHZhciB5MiA9IHZlcnRleERhdGFbM11cblxuICAgICAgICB2YXIgeDMgPSB2ZXJ0ZXhEYXRhWzRdXG4gICAgICAgIHZhciB5MyA9IHZlcnRleERhdGFbNV1cblxuICAgICAgICB2YXIgeDQgPSB2ZXJ0ZXhEYXRhWzZdXG4gICAgICAgIHZhciB5NCA9IHZlcnRleERhdGFbN11cblxuICAgICAgICBtaW5YID0geDE7XG4gICAgICAgIG1pblggPSB4MiA8IG1pblggPyB4MiA6IG1pblg7XG4gICAgICAgIG1pblggPSB4MyA8IG1pblggPyB4MyA6IG1pblg7XG4gICAgICAgIG1pblggPSB4NCA8IG1pblggPyB4NCA6IG1pblg7XG5cbiAgICAgICAgbWluWSA9IHkxO1xuICAgICAgICBtaW5ZID0geTIgPCBtaW5ZID8geTIgOiBtaW5ZO1xuICAgICAgICBtaW5ZID0geTMgPCBtaW5ZID8geTMgOiBtaW5ZO1xuICAgICAgICBtaW5ZID0geTQgPCBtaW5ZID8geTQgOiBtaW5ZO1xuXG4gICAgICAgIG1heFggPSB4MTtcbiAgICAgICAgbWF4WCA9IHgyID4gbWF4WCA/IHgyIDogbWF4WDtcbiAgICAgICAgbWF4WCA9IHgzID4gbWF4WCA/IHgzIDogbWF4WDtcbiAgICAgICAgbWF4WCA9IHg0ID4gbWF4WCA/IHg0IDogbWF4WDtcblxuICAgICAgICBtYXhZID0geTE7XG4gICAgICAgIG1heFkgPSB5MiA+IG1heFkgPyB5MiA6IG1heFk7XG4gICAgICAgIG1heFkgPSB5MyA+IG1heFkgPyB5MyA6IG1heFk7XG4gICAgICAgIG1heFkgPSB5NCA+IG1heFkgPyB5NCA6IG1heFk7XG5cbiAgICAgICAgLy8gY2hlY2sgZm9yIGNoaWxkcmVuXG4gICAgICAgIGlmKHRoaXMuY2hpbGRyZW4ubGVuZ3RoKVxuICAgICAgICB7XG4gICAgICAgICAgICB2YXIgY2hpbGRCb3VuZHMgPSB0aGlzLmNvbnRhaW5lckdldEJvdW5kcygpO1xuXG4gICAgICAgICAgICB3MCA9IGNoaWxkQm91bmRzLng7XG4gICAgICAgICAgICB3MSA9IGNoaWxkQm91bmRzLnggKyBjaGlsZEJvdW5kcy53aWR0aDtcbiAgICAgICAgICAgIGgwID0gY2hpbGRCb3VuZHMueTtcbiAgICAgICAgICAgIGgxID0gY2hpbGRCb3VuZHMueSArIGNoaWxkQm91bmRzLmhlaWdodDtcblxuICAgICAgICAgICAgbWluWCA9IChtaW5YIDwgdzApID8gbWluWCA6IHcwO1xuICAgICAgICAgICAgbWluWSA9IChtaW5ZIDwgaDApID8gbWluWSA6IGgwO1xuXG4gICAgICAgICAgICBtYXhYID0gKG1heFggPiB3MSkgPyBtYXhYIDogdzE7XG4gICAgICAgICAgICBtYXhZID0gKG1heFkgPiBoMSkgPyBtYXhZIDogaDE7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgYm91bmRzID0gdGhpcy5fYm91bmRzO1xuXG4gICAgICAgIGJvdW5kcy54ID0gbWluWDtcbiAgICAgICAgYm91bmRzLndpZHRoID0gbWF4WCAtIG1pblg7XG5cbiAgICAgICAgYm91bmRzLnkgPSBtaW5ZO1xuICAgICAgICBib3VuZHMuaGVpZ2h0ID0gbWF4WSAtIG1pblk7XG5cbiAgICAgICAgLy8gc3RvcmUgYSByZWZlcmVuY2Ugc28gdGhhdCBpZiB0aGlzIGZ1bmN0aW9uIGdldHMgY2FsbGVkIGFnYWluIGluIHRoZSByZW5kZXIgY3ljbGUgd2UgZG8gbm90IGhhdmUgdG8gcmVjYWxjdWxhdGVcbiAgICAgICAgdGhpcy5fY3VycmVudEJvdW5kcyA9IGJvdW5kcztcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5fY3VycmVudEJvdW5kcztcbn07XG5cbi8qKlxuICogR2V0cyB0aGUgbG9jYWwgYm91bmRzIG9mIHRoZSBzcHJpdGUgb2JqZWN0LlxuICpcbiAqL1xuU3ByaXRlLnByb3RvdHlwZS5nZXRMb2NhbEJvdW5kcyA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy5fYm91bmRzLnggPSAtdGhpcy5fdGV4dHVyZS5fZnJhbWUud2lkdGggKiB0aGlzLmFuY2hvci54O1xuICAgIHRoaXMuX2JvdW5kcy55ID0gLXRoaXMuX3RleHR1cmUuX2ZyYW1lLmhlaWdodCAqIHRoaXMuYW5jaG9yLnk7XG4gICAgdGhpcy5fYm91bmRzLndpZHRoID0gdGhpcy5fdGV4dHVyZS5fZnJhbWUud2lkdGg7XG4gICAgdGhpcy5fYm91bmRzLmhlaWdodCA9IHRoaXMuX3RleHR1cmUuX2ZyYW1lLmhlaWdodDtcbiAgICByZXR1cm4gdGhpcy5fYm91bmRzO1xufTtcblxuLyoqXG4qIFRlc3RzIGlmIGEgcG9pbnQgaXMgaW5zaWRlIHRoaXMgc3ByaXRlXG4qXG4qIEBwYXJhbSBwb2ludCB7UElYSS5Qb2ludH0gdGhlIHBvaW50IHRvIHRlc3RcbiogQHJldHVybiB7Ym9vbGVhbn0gdGhlIHJlc3VsdCBvZiB0aGUgdGVzdFxuKi9cblNwcml0ZS5wcm90b3R5cGUuY29udGFpbnNQb2ludCA9IGZ1bmN0aW9uKCBwb2ludCApXG57XG4gICAgdGhpcy53b3JsZFRyYW5zZm9ybS5hcHBseUludmVyc2UocG9pbnQsICB0ZW1wUG9pbnQpO1xuXG4gICAgdmFyIHdpZHRoID0gdGhpcy5fdGV4dHVyZS5fZnJhbWUud2lkdGg7XG4gICAgdmFyIGhlaWdodCA9IHRoaXMuX3RleHR1cmUuX2ZyYW1lLmhlaWdodDtcbiAgICB2YXIgeDEgPSAtd2lkdGggKiB0aGlzLmFuY2hvci54O1xuICAgIHZhciB5MTtcblxuICAgIGlmICggdGVtcFBvaW50LnggPiB4MSAmJiB0ZW1wUG9pbnQueCA8IHgxICsgd2lkdGggKVxuICAgIHtcbiAgICAgICAgeTEgPSAtaGVpZ2h0ICogdGhpcy5hbmNob3IueTtcblxuICAgICAgICBpZiAoIHRlbXBQb2ludC55ID4geTEgJiYgdGVtcFBvaW50LnkgPCB5MSArIGhlaWdodCApXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xufTtcblxuLyoqXG4qIFJlbmRlcnMgdGhlIG9iamVjdCB1c2luZyB0aGUgQ2FudmFzIHJlbmRlcmVyXG4qXG4qIEBwYXJhbSByZW5kZXJlciB7UElYSS5DYW52YXNSZW5kZXJlcn0gVGhlIHJlbmRlcmVyXG4qIEBwcml2YXRlXG4qL1xuU3ByaXRlLnByb3RvdHlwZS5fcmVuZGVyQ2FudmFzID0gZnVuY3Rpb24gKHJlbmRlcmVyKVxue1xuICAgIGlmICh0aGlzLnRleHR1cmUuY3JvcC53aWR0aCA8PSAwIHx8IHRoaXMudGV4dHVyZS5jcm9wLmhlaWdodCA8PSAwKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHZhciBjb21wb3NpdGVPcGVyYXRpb24gPSByZW5kZXJlci5ibGVuZE1vZGVzW3RoaXMuYmxlbmRNb2RlXTtcbiAgICBpZiAoY29tcG9zaXRlT3BlcmF0aW9uICE9PSByZW5kZXJlci5jb250ZXh0Lmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbilcbiAgICB7XG4gICAgICAgIHJlbmRlcmVyLmNvbnRleHQuZ2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uID0gY29tcG9zaXRlT3BlcmF0aW9uO1xuICAgIH1cblxuICAgIC8vICBJZ25vcmUgbnVsbCBzb3VyY2VzXG4gICAgaWYgKHRoaXMudGV4dHVyZS52YWxpZClcbiAgICB7XG4gICAgICAgIHZhciB0ZXh0dXJlID0gdGhpcy5fdGV4dHVyZSxcbiAgICAgICAgICAgIHd0ID0gdGhpcy53b3JsZFRyYW5zZm9ybSxcbiAgICAgICAgICAgIGR4LFxuICAgICAgICAgICAgZHksXG4gICAgICAgICAgICB3aWR0aCxcbiAgICAgICAgICAgIGhlaWdodDtcblxuICAgICAgICByZW5kZXJlci5jb250ZXh0Lmdsb2JhbEFscGhhID0gdGhpcy53b3JsZEFscGhhO1xuXG4gICAgICAgIC8vIElmIHNtb290aGluZ0VuYWJsZWQgaXMgc3VwcG9ydGVkIGFuZCB3ZSBuZWVkIHRvIGNoYW5nZSB0aGUgc21vb3RoaW5nIHByb3BlcnR5IGZvciB0aGlzIHRleHR1cmVcbiAgICAgICAgdmFyIHNtb290aGluZ0VuYWJsZWQgPSB0ZXh0dXJlLmJhc2VUZXh0dXJlLnNjYWxlTW9kZSA9PT0gQ09OU1QuU0NBTEVfTU9ERVMuTElORUFSO1xuICAgICAgICBpZiAocmVuZGVyZXIuc21vb3RoUHJvcGVydHkgJiYgcmVuZGVyZXIuY29udGV4dFtyZW5kZXJlci5zbW9vdGhQcm9wZXJ0eV0gIT09IHNtb290aGluZ0VuYWJsZWQpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJlbmRlcmVyLmNvbnRleHRbcmVuZGVyZXIuc21vb3RoUHJvcGVydHldID0gc21vb3RoaW5nRW5hYmxlZDtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIElmIHRoZSB0ZXh0dXJlIGlzIHRyaW1tZWQgd2Ugb2Zmc2V0IGJ5IHRoZSB0cmltIHgveSwgb3RoZXJ3aXNlIHdlIHVzZSB0aGUgZnJhbWUgZGltZW5zaW9uc1xuXG4gICAgICAgIGlmKHRleHR1cmUucm90YXRlKVxuICAgICAgICB7XG4gICAgICAgICAgICB3aWR0aCA9IHRleHR1cmUuY3JvcC5oZWlnaHQ7XG4gICAgICAgICAgICBoZWlnaHQgPSB0ZXh0dXJlLmNyb3Aud2lkdGg7XG5cbiAgICAgICAgICAgIGR4ID0gKHRleHR1cmUudHJpbSkgPyB0ZXh0dXJlLnRyaW0ueSAtIHRoaXMuYW5jaG9yLnkgKiB0ZXh0dXJlLnRyaW0uaGVpZ2h0IDogdGhpcy5hbmNob3IueSAqIC10ZXh0dXJlLl9mcmFtZS5oZWlnaHQ7XG4gICAgICAgICAgICBkeSA9ICh0ZXh0dXJlLnRyaW0pID8gdGV4dHVyZS50cmltLnggLSB0aGlzLmFuY2hvci54ICogdGV4dHVyZS50cmltLndpZHRoIDogdGhpcy5hbmNob3IueCAqIC10ZXh0dXJlLl9mcmFtZS53aWR0aDtcbiAgICAgICBcbiAgICAgICAgICAgIGR4ICs9IHdpZHRoO1xuXG4gICAgICAgICAgICB3dC50eCA9IGR5ICogd3QuYSArIGR4ICogd3QuYyArIHd0LnR4O1xuICAgICAgICAgICAgd3QudHkgPSBkeSAqIHd0LmIgKyBkeCAqIHd0LmQgKyB3dC50eTtcblxuICAgICAgICAgICAgdmFyIHRlbXAgPSB3dC5hO1xuICAgICAgICAgICAgd3QuYSAgPSAtd3QuYztcbiAgICAgICAgICAgIHd0LmMgID0gIHRlbXA7XG5cbiAgICAgICAgICAgIHRlbXAgPSB3dC5iO1xuICAgICAgICAgICAgd3QuYiAgPSAtd3QuZDtcbiAgICAgICAgICAgIHd0LmQgID0gIHRlbXA7XG5cbiAgICAgICAgICAgIC8vIHRoZSBhbmNob3IgaGFzIGFscmVhZHkgYmVlbiBhcHBsaWVkIGFib3ZlLCBzbyBsZXRzIHNldCBpdCB0byB6ZXJvXG4gICAgICAgICAgICBkeCA9IDA7XG4gICAgICAgICAgICBkeSA9IDA7XG5cbiAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgIHtcbiAgICAgICAgICAgIHdpZHRoID0gdGV4dHVyZS5jcm9wLndpZHRoO1xuICAgICAgICAgICAgaGVpZ2h0ID0gdGV4dHVyZS5jcm9wLmhlaWdodDtcblxuICAgICAgICAgICAgZHggPSAodGV4dHVyZS50cmltKSA/IHRleHR1cmUudHJpbS54IC0gdGhpcy5hbmNob3IueCAqIHRleHR1cmUudHJpbS53aWR0aCA6IHRoaXMuYW5jaG9yLnggKiAtdGV4dHVyZS5fZnJhbWUud2lkdGg7XG4gICAgICAgICAgICBkeSA9ICh0ZXh0dXJlLnRyaW0pID8gdGV4dHVyZS50cmltLnkgLSB0aGlzLmFuY2hvci55ICogdGV4dHVyZS50cmltLmhlaWdodCA6IHRoaXMuYW5jaG9yLnkgKiAtdGV4dHVyZS5fZnJhbWUuaGVpZ2h0O1xuICAgICAgICB9XG5cblxuXG4gICAgICAgIC8vIEFsbG93IGZvciBwaXhlbCByb3VuZGluZ1xuICAgICAgICBpZiAocmVuZGVyZXIucm91bmRQaXhlbHMpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJlbmRlcmVyLmNvbnRleHQuc2V0VHJhbnNmb3JtKFxuICAgICAgICAgICAgICAgIHd0LmEsXG4gICAgICAgICAgICAgICAgd3QuYixcbiAgICAgICAgICAgICAgICB3dC5jLFxuICAgICAgICAgICAgICAgIHd0LmQsXG4gICAgICAgICAgICAgICAgKHd0LnR4ICogcmVuZGVyZXIucmVzb2x1dGlvbikgfCAwLFxuICAgICAgICAgICAgICAgICh3dC50eSAqIHJlbmRlcmVyLnJlc29sdXRpb24pIHwgMFxuICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgZHggPSBkeCB8IDA7XG4gICAgICAgICAgICBkeSA9IGR5IHwgMDtcbiAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgIHtcblxuICAgICAgICAgICAgcmVuZGVyZXIuY29udGV4dC5zZXRUcmFuc2Zvcm0oXG4gICAgICAgICAgICAgICAgd3QuYSxcbiAgICAgICAgICAgICAgICB3dC5iLFxuICAgICAgICAgICAgICAgIHd0LmMsXG4gICAgICAgICAgICAgICAgd3QuZCxcbiAgICAgICAgICAgICAgICB3dC50eCAqIHJlbmRlcmVyLnJlc29sdXRpb24sXG4gICAgICAgICAgICAgICAgd3QudHkgKiByZW5kZXJlci5yZXNvbHV0aW9uXG4gICAgICAgICAgICApO1xuXG5cbiAgICAgICAgfVxuXG4gICAgICAgIHZhciByZXNvbHV0aW9uID0gdGV4dHVyZS5iYXNlVGV4dHVyZS5yZXNvbHV0aW9uO1xuXG4gICAgICAgIGlmICh0aGlzLnRpbnQgIT09IDB4RkZGRkZGKVxuICAgICAgICB7XG4gICAgICAgICAgICBpZiAodGhpcy5jYWNoZWRUaW50ICE9PSB0aGlzLnRpbnQpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdGhpcy5jYWNoZWRUaW50ID0gdGhpcy50aW50O1xuXG4gICAgICAgICAgICAgICAgLy8gVE9ETyBjbGVhbiB1cCBjYWNoaW5nIC0gaG93IHRvIGNsZWFuIHVwIHRoZSBjYWNoZXM/XG4gICAgICAgICAgICAgICAgdGhpcy50aW50ZWRUZXh0dXJlID0gQ2FudmFzVGludGVyLmdldFRpbnRlZFRleHR1cmUodGhpcywgdGhpcy50aW50KTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmVuZGVyZXIuY29udGV4dC5kcmF3SW1hZ2UoXG4gICAgICAgICAgICAgICAgdGhpcy50aW50ZWRUZXh0dXJlLFxuICAgICAgICAgICAgICAgIDAsXG4gICAgICAgICAgICAgICAgMCxcbiAgICAgICAgICAgICAgICB3aWR0aCAqIHJlc29sdXRpb24sXG4gICAgICAgICAgICAgICAgaGVpZ2h0ICogcmVzb2x1dGlvbixcbiAgICAgICAgICAgICAgICBkeCAqIHJlbmRlcmVyLnJlc29sdXRpb24sXG4gICAgICAgICAgICAgICAgZHkgKiByZW5kZXJlci5yZXNvbHV0aW9uLFxuICAgICAgICAgICAgICAgIHdpZHRoICogcmVuZGVyZXIucmVzb2x1dGlvbixcbiAgICAgICAgICAgICAgICBoZWlnaHQgKiByZW5kZXJlci5yZXNvbHV0aW9uXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIGVsc2VcbiAgICAgICAge1xuICAgICAgICAgICAgcmVuZGVyZXIuY29udGV4dC5kcmF3SW1hZ2UoXG4gICAgICAgICAgICAgICAgdGV4dHVyZS5iYXNlVGV4dHVyZS5zb3VyY2UsXG4gICAgICAgICAgICAgICAgdGV4dHVyZS5jcm9wLnggKiByZXNvbHV0aW9uLFxuICAgICAgICAgICAgICAgIHRleHR1cmUuY3JvcC55ICogcmVzb2x1dGlvbixcbiAgICAgICAgICAgICAgICB3aWR0aCAqIHJlc29sdXRpb24sXG4gICAgICAgICAgICAgICAgaGVpZ2h0ICogcmVzb2x1dGlvbixcbiAgICAgICAgICAgICAgICBkeCAgKiByZW5kZXJlci5yZXNvbHV0aW9uLFxuICAgICAgICAgICAgICAgIGR5ICAqIHJlbmRlcmVyLnJlc29sdXRpb24sXG4gICAgICAgICAgICAgICAgd2lkdGggKiByZW5kZXJlci5yZXNvbHV0aW9uLFxuICAgICAgICAgICAgICAgIGhlaWdodCAqIHJlbmRlcmVyLnJlc29sdXRpb25cbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICB9XG59O1xuXG4vKipcbiAqIERlc3Ryb3lzIHRoaXMgc3ByaXRlIGFuZCBvcHRpb25hbGx5IGl0cyB0ZXh0dXJlXG4gKlxuICogQHBhcmFtIFtkZXN0cm95VGV4dHVyZT1mYWxzZV0ge2Jvb2xlYW59IFNob3VsZCBpdCBkZXN0cm95IHRoZSBjdXJyZW50IHRleHR1cmUgb2YgdGhlIHNwcml0ZSBhcyB3ZWxsXG4gKiBAcGFyYW0gW2Rlc3Ryb3lCYXNlVGV4dHVyZT1mYWxzZV0ge2Jvb2xlYW59IFNob3VsZCBpdCBkZXN0cm95IHRoZSBiYXNlIHRleHR1cmUgb2YgdGhlIHNwcml0ZSBhcyB3ZWxsXG4gKi9cblNwcml0ZS5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uIChkZXN0cm95VGV4dHVyZSwgZGVzdHJveUJhc2VUZXh0dXJlKVxue1xuICAgIENvbnRhaW5lci5wcm90b3R5cGUuZGVzdHJveS5jYWxsKHRoaXMpO1xuXG4gICAgdGhpcy5hbmNob3IgPSBudWxsO1xuXG4gICAgaWYgKGRlc3Ryb3lUZXh0dXJlKVxuICAgIHtcbiAgICAgICAgdGhpcy5fdGV4dHVyZS5kZXN0cm95KGRlc3Ryb3lCYXNlVGV4dHVyZSk7XG4gICAgfVxuXG4gICAgdGhpcy5fdGV4dHVyZSA9IG51bGw7XG4gICAgdGhpcy5zaGFkZXIgPSBudWxsO1xufTtcblxuLy8gc29tZSBoZWxwZXIgZnVuY3Rpb25zLi5cblxuLyoqXG4gKiBIZWxwZXIgZnVuY3Rpb24gdGhhdCBjcmVhdGVzIGEgc3ByaXRlIHRoYXQgd2lsbCBjb250YWluIGEgdGV4dHVyZSBmcm9tIHRoZSBUZXh0dXJlQ2FjaGUgYmFzZWQgb24gdGhlIGZyYW1lSWRcbiAqIFRoZSBmcmFtZSBpZHMgYXJlIGNyZWF0ZWQgd2hlbiBhIFRleHR1cmUgcGFja2VyIGZpbGUgaGFzIGJlZW4gbG9hZGVkXG4gKlxuICogQHN0YXRpY1xuICogQHBhcmFtIGZyYW1lSWQge3N0cmluZ30gVGhlIGZyYW1lIElkIG9mIHRoZSB0ZXh0dXJlIGluIHRoZSBjYWNoZVxuICogQHBhcmFtIFtjcm9zc29yaWdpbj0oYXV0byldIHtib29sZWFufSBpZiB5b3Ugd2FudCB0byBzcGVjaWZ5IHRoZSBjcm9zcy1vcmlnaW4gcGFyYW1ldGVyXG4gKiBAcGFyYW0gW3NjYWxlTW9kZT1QSVhJLlNDQUxFX01PREVTLkRFRkFVTFRdIHtudW1iZXJ9IGlmIHlvdSB3YW50IHRvIHNwZWNpZnkgdGhlIHNjYWxlIG1vZGUsIHNlZSB7QGxpbmsgUElYSS5TQ0FMRV9NT0RFU30gZm9yIHBvc3NpYmxlIHZhbHVlc1xuICogQHJldHVybiB7UElYSS5TcHJpdGV9IEEgbmV3IFNwcml0ZSB1c2luZyBhIHRleHR1cmUgZnJvbSB0aGUgdGV4dHVyZSBjYWNoZSBtYXRjaGluZyB0aGUgZnJhbWVJZFxuICovXG5TcHJpdGUuZnJvbUZyYW1lID0gZnVuY3Rpb24gKGZyYW1lSWQpXG57XG4gICAgdmFyIHRleHR1cmUgPSB1dGlscy5UZXh0dXJlQ2FjaGVbZnJhbWVJZF07XG5cbiAgICBpZiAoIXRleHR1cmUpXG4gICAge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RoZSBmcmFtZUlkIFwiJyArIGZyYW1lSWQgKyAnXCIgZG9lcyBub3QgZXhpc3QgaW4gdGhlIHRleHR1cmUgY2FjaGUnKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IFNwcml0ZSh0ZXh0dXJlKTtcbn07XG5cbi8qKlxuICogSGVscGVyIGZ1bmN0aW9uIHRoYXQgY3JlYXRlcyBhIHNwcml0ZSB0aGF0IHdpbGwgY29udGFpbiBhIHRleHR1cmUgYmFzZWQgb24gYW4gaW1hZ2UgdXJsXG4gKiBJZiB0aGUgaW1hZ2UgaXMgbm90IGluIHRoZSB0ZXh0dXJlIGNhY2hlIGl0IHdpbGwgYmUgbG9hZGVkXG4gKlxuICogQHN0YXRpY1xuICogQHBhcmFtIGltYWdlSWQge3N0cmluZ30gVGhlIGltYWdlIHVybCBvZiB0aGUgdGV4dHVyZVxuICogQHJldHVybiB7UElYSS5TcHJpdGV9IEEgbmV3IFNwcml0ZSB1c2luZyBhIHRleHR1cmUgZnJvbSB0aGUgdGV4dHVyZSBjYWNoZSBtYXRjaGluZyB0aGUgaW1hZ2UgaWRcbiAqL1xuU3ByaXRlLmZyb21JbWFnZSA9IGZ1bmN0aW9uIChpbWFnZUlkLCBjcm9zc29yaWdpbiwgc2NhbGVNb2RlKVxue1xuICAgIHJldHVybiBuZXcgU3ByaXRlKFRleHR1cmUuZnJvbUltYWdlKGltYWdlSWQsIGNyb3Nzb3JpZ2luLCBzY2FsZU1vZGUpKTtcbn07XG4iLCJ2YXIgT2JqZWN0UmVuZGVyZXIgPSByZXF1aXJlKCcuLi8uLi9yZW5kZXJlcnMvd2ViZ2wvdXRpbHMvT2JqZWN0UmVuZGVyZXInKSxcbiAgICBXZWJHTFJlbmRlcmVyID0gcmVxdWlyZSgnLi4vLi4vcmVuZGVyZXJzL3dlYmdsL1dlYkdMUmVuZGVyZXInKSxcbiAgICBUZXh0dXJlU2hhZGVyID0gcmVxdWlyZSgnLi4vLi4vcmVuZGVyZXJzL3dlYmdsL3NoYWRlcnMvX1RleHR1cmVTaGFkZXInKSxcbiAgICBjcmVhdGVJbmRpY2VzRm9yUXVhZHMgPSByZXF1aXJlKCcuLi8uLi91dGlscy9jcmVhdGVJbmRpY2VzRm9yUXVhZHMnKSxcbiAgICBnZW5lcmF0ZU11bHRpVGV4dHVyZVNoYWRlciA9IHJlcXVpcmUoJy4vZ2VuZXJhdGVNdWx0aVRleHR1cmVTaGFkZXInKSxcbiAgICBDT05TVCA9IHJlcXVpcmUoJy4uLy4uL2NvbnN0JyksXG4gICAgZ2xDb3JlID0gcmVxdWlyZSgncGl4aS1nbC1jb3JlJyk7XG5cbi8qKlxuICogQGF1dGhvciBNYXQgR3JvdmVzXG4gKlxuICogQmlnIHRoYW5rcyB0byB0aGUgdmVyeSBjbGV2ZXIgTWF0dCBEZXNMYXVyaWVycyA8bWF0dGRlc2w+IGh0dHBzOi8vZ2l0aHViLmNvbS9tYXR0ZGVzbC9cbiAqIGZvciBjcmVhdGluZyB0aGUgb3JpZ2luYWwgcGl4aSB2ZXJzaW9uIVxuICogQWxzbyBhIHRoYW5rcyB0byBodHRwczovL2dpdGh1Yi5jb20vYmNoZXZhbGllciBmb3IgdHdlYWtpbmcgdGhlIHRpbnQgYW5kIGFscGhhIHNvIHRoYXQgdGhleSBub3cgc2hhcmUgNCBieXRlcyBvbiB0aGUgdmVydGV4IGJ1ZmZlclxuICpcbiAqIEhlYXZpbHkgaW5zcGlyZWQgYnkgTGliR0RYJ3MgU3ByaXRlUmVuZGVyZXI6XG4gKiBodHRwczovL2dpdGh1Yi5jb20vbGliZ2R4L2xpYmdkeC9ibG9iL21hc3Rlci9nZHgvc3JjL2NvbS9iYWRsb2dpYy9nZHgvZ3JhcGhpY3MvZzJkL1Nwcml0ZVJlbmRlcmVyLmphdmFcbiAqL1xuXG4vKipcbiAqIFJlbmRlcmVyIGRlZGljYXRlZCB0byBkcmF3aW5nIGFuZCBiYXRjaGluZyBzcHJpdGVzLlxuICpcbiAqIEBjbGFzc1xuICogQHByaXZhdGVcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAZXh0ZW5kcyBQSVhJLk9iamVjdFJlbmRlcmVyXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcn0gVGhlIHJlbmRlcmVyIHRoaXMgc3ByaXRlIGJhdGNoIHdvcmtzIGZvci5cbiAqL1xuZnVuY3Rpb24gU3ByaXRlUmVuZGVyZXIocmVuZGVyZXIpXG57XG4gICAgT2JqZWN0UmVuZGVyZXIuY2FsbCh0aGlzLCByZW5kZXJlcik7XG5cbiAgICAvKipcbiAgICAgKiBOdW1iZXIgb2YgdmFsdWVzIHNlbnQgaW4gdGhlIHZlcnRleCBidWZmZXIuXG4gICAgICogcG9zaXRpb25YLCBwb3NpdGlvblksIGNvbG9yUiwgY29sb3JHLCBjb2xvckIgPSA1XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy52ZXJ0U2l6ZSA9IDU7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgc2l6ZSBvZiB0aGUgdmVydGV4IGluZm9ybWF0aW9uIGluIGJ5dGVzLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMudmVydEJ5dGVTaXplID0gdGhpcy52ZXJ0U2l6ZSAqIDQ7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgbnVtYmVyIG9mIGltYWdlcyBpbiB0aGUgU3ByaXRlQmF0Y2ggYmVmb3JlIGl0IGZsdXNoZXMuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy5zaXplID0gQ09OU1QuU1BSSVRFX0JBVENIX1NJWkU7IC8vIDIwMDAgaXMgYSBuaWNlIGJhbGFuY2UgYmV0d2VlbiBtb2JpbGUgLyBkZXNrdG9wXG5cbiAgICAvLyB0aGUgdG90YWwgbnVtYmVyIG9mIGJ5dGVzIGluIG91ciBiYXRjaFxuICAgIHZhciBudW1WZXJ0cyA9ICh0aGlzLnNpemUgKiA0KSAqIHRoaXMudmVydEJ5dGVTaXplO1xuXG4gICAgLy8gdGhlIHRvdGFsIG51bWJlciBvZiBpbmRpY2VzIGluIG91ciBiYXRjaCwgdGhlcmUgYXJlIDYgcG9pbnRzIHBlciBxdWFkLlxuICAgIHZhciBudW1JbmRpY2VzID0gdGhpcy5zaXplICogNjtcblxuICAgIC8qKlxuICAgICAqIEhvbGRzIHRoZSB2ZXJ0ZXggZGF0YSB0aGF0IHdpbGwgYmUgc2VudCB0byB0aGUgdmVydGV4IHNoYWRlci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge0FycmF5QnVmZmVyfVxuICAgICAqL1xuICAgIHRoaXMudmVydGljZXMgPSBuZXcgQXJyYXlCdWZmZXIobnVtVmVydHMpO1xuXG4gICAgLyoqXG4gICAgICogVmlldyBvbiB0aGUgdmVydGljZXMgYXMgYSBGbG9hdDMyQXJyYXkgZm9yIHBvc2l0aW9uc1xuICAgICAqXG4gICAgICogQG1lbWJlciB7RmxvYXQzMkFycmF5fVxuICAgICAqL1xuICAgIHRoaXMucG9zaXRpb25zID0gbmV3IEZsb2F0MzJBcnJheSh0aGlzLnZlcnRpY2VzKTtcbiAgICBcbiAgICAvKipcbiAgICAgKiBWaWV3IG9uIHRoZSB2ZXJ0aWNlcyBhcyBhIFVpbnQzMkFycmF5IGZvciB1dnNcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge0Zsb2F0MzJBcnJheX1cbiAgICAgKi9cbiAgICB0aGlzLnV2cyA9IG5ldyBVaW50MzJBcnJheSh0aGlzLnZlcnRpY2VzKTtcblxuICAgIC8qKlxuICAgICAqIFZpZXcgb24gdGhlIHZlcnRpY2VzIGFzIGEgVWludDMyQXJyYXkgZm9yIGNvbG9yc1xuICAgICAqXG4gICAgICogQG1lbWJlciB7VWludDMyQXJyYXl9XG4gICAgICovXG4gICAgdGhpcy5jb2xvcnMgPSBuZXcgVWludDMyQXJyYXkodGhpcy52ZXJ0aWNlcyk7XG5cbiAgICAvKipcbiAgICAgKiBIb2xkcyB0aGUgaW5kaWNlcyBvZiB0aGUgZ2VvbWV0cnkgKHF1YWRzKSB0byBkcmF3XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtVaW50MTZBcnJheX1cbiAgICAgKi9cbiAgICB0aGlzLmluZGljZXMgPSBjcmVhdGVJbmRpY2VzRm9yUXVhZHModGhpcy5zaXplKVxuXG4gICAgLyoqXG4gICAgICogVGhlIGRlZmF1bHQgc2hhZGVyIHRoYXQgaXMgdXNlZCBpZiBhIHNwcml0ZSBkb2Vzbid0IGhhdmUgYSBtb3JlIHNwZWNpZmljIG9uZS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuU2hhZGVyfVxuICAgICAqL1xuICAgIHRoaXMuc2hhZGVyID0gbnVsbDtcblxuICAgIHRoaXMudGV4dHVyZUNvdW50ID0gMDtcbiAgICB0aGlzLmN1cnJlbnRJbmRleCA9IDA7XG4gIFxuICAgIHRoaXMuZ3JvdXBDb3VudCA9IDA7XG4gICAgdGhpcy5ncm91cHMgPSBbXTtcbiAgICBcbiAgICAvL1RPRE8gLSAzMDAgaXMgYSBiaXQgbWFnaWMsIGZpZ3VyZSBvdXQgYSBuaWNlciBhbW91bnQhXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLnNpemU7IGkrKykgXG4gICAge1xuICAgICAgICB0aGlzLmdyb3Vwc1tpXSA9IHt0ZXh0dXJlczpbXSwgdGV4dHVyZUNvdW50OjAsIGlkczpbXSwgc2l6ZTowLCBzdGFydDowLCBibGVuZDowfTsgXG4gICAgfTtcbiAgICBcbiAgICB0aGlzLmN1cnJlbnRHcm91cCA9IHRoaXMuZ3JvdXBzW3RoaXMuZ3JvdXBDb3VudCsrXTtcblxuICAgIHRoaXMuY3VycmVudFRleHR1cmUgPSBudWxsOyAgICBcbn1cblxuXG5TcHJpdGVSZW5kZXJlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKE9iamVjdFJlbmRlcmVyLnByb3RvdHlwZSk7XG5TcHJpdGVSZW5kZXJlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBTcHJpdGVSZW5kZXJlcjtcbm1vZHVsZS5leHBvcnRzID0gU3ByaXRlUmVuZGVyZXI7XG5cbldlYkdMUmVuZGVyZXIucmVnaXN0ZXJQbHVnaW4oJ3Nwcml0ZScsIFNwcml0ZVJlbmRlcmVyKTtcblxuLyoqXG4gKiBTZXRzIHVwIHRoZSByZW5kZXJlciBjb250ZXh0IGFuZCBuZWNlc3NhcnkgYnVmZmVycy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIGdsIHtXZWJHTFJlbmRlcmluZ0NvbnRleHR9IHRoZSBjdXJyZW50IFdlYkdMIGRyYXdpbmcgY29udGV4dFxuICovXG5TcHJpdGVSZW5kZXJlci5wcm90b3R5cGUub25Db250ZXh0Q2hhbmdlID0gZnVuY3Rpb24gKClcbntcbiAgICB2YXIgZ2wgPSB0aGlzLnJlbmRlcmVyLmdsO1xuXG4gICAgdGhpcy5NQVhfVEVYVFVFUyA9IGdsLmdldFBhcmFtZXRlcihnbC5NQVhfVEVYVFVSRV9JTUFHRV9VTklUUyk7XG5cbiAgICB0aGlzLl9zaGFkZXIgPSBnZW5lcmF0ZU11bHRpVGV4dHVyZVNoYWRlcihnbCwgdGhpcy5NQVhfVEVYVFVFUykvL25ldyBUZXh0dXJlU2hhZGVyKGdsKTtcblxuICAgIC8vIHNldHVwIGRlZmF1bHQgc2hhZGVyXG4gICAgdGhpcy5zaGFkZXIgPSB0aGlzLnJlbmRlcmVyLnNoYWRlck1hbmFnZXIuZGVmYXVsdFNoYWRlcjtcblxuICAgIC8vIGNyZWF0ZSBhIGNvdXBsZSBvZiBidWZmZXJzXG4gICAgdGhpcy52ZXJ0ZXhCdWZmZXIgPSBnbENvcmUuR0xCdWZmZXIuY3JlYXRlVmVydGV4QnVmZmVyKGdsLCBudWxsLCBnbC5EWU5BTUlDX0RSQVcpO1xuICAgIHRoaXMuaW5kZXhCdWZmZXIgPSBnbENvcmUuR0xCdWZmZXIuY3JlYXRlSW5kZXhCdWZmZXIoZ2wsIHRoaXMuaW5kaWNlcywgZ2wuU1RBVElDX0RSQVcpO1xuXG4gICAgLy8gYnVpbGQgdGhlIHZhbyBvYmplY3QgdGhhdCB3aWxsIHJlbmRlci4uXG4gICAgdGhpcy52YW8gPSBuZXcgZ2xDb3JlLlZlcnRleEFycmF5T2JqZWN0KGdsKTtcblxuICAgIHRoaXMudmFvLmFkZEluZGV4KHRoaXMuaW5kZXhCdWZmZXIpO1xuICAgIHRoaXMudmFvLmFkZEF0dHJpYnV0ZSh0aGlzLnZlcnRleEJ1ZmZlciwgdGhpcy5fc2hhZGVyLmF0dHJpYnV0ZXMuYVZlcnRleFBvc2l0aW9uLCBnbC5GTE9BVCwgZmFsc2UsIHRoaXMudmVydEJ5dGVTaXplLCAwKTtcbiAgICB0aGlzLnZhby5hZGRBdHRyaWJ1dGUodGhpcy52ZXJ0ZXhCdWZmZXIsIHRoaXMuX3NoYWRlci5hdHRyaWJ1dGVzLmFUZXh0dXJlQ29vcmQsIGdsLlVOU0lHTkVEX1NIT1JULCB0cnVlLCB0aGlzLnZlcnRCeXRlU2l6ZSwgMiAqIDQpO1xuICAgIHRoaXMudmFvLmFkZEF0dHJpYnV0ZSh0aGlzLnZlcnRleEJ1ZmZlciwgdGhpcy5fc2hhZGVyLmF0dHJpYnV0ZXMuYUNvbG9yLCBnbC5VTlNJR05FRF9CWVRFLCB0cnVlLCB0aGlzLnZlcnRCeXRlU2l6ZSwgMyAqIDQpO1xuICAgIHRoaXMudmFvLmFkZEF0dHJpYnV0ZSh0aGlzLnZlcnRleEJ1ZmZlciwgdGhpcy5fc2hhZGVyLmF0dHJpYnV0ZXMuYVRleHR1cmVJZCwgZ2wuRkxPQVQsIGZhbHNlLCB0aGlzLnZlcnRCeXRlU2l6ZSwgNCAqIDQpO1xuXG4gICAgdGhpcy5jdXJyZW50QmxlbmRNb2RlID0gOTk5OTk7XG59O1xuXG4vKipcbiAqIFJlbmRlcnMgdGhlIHNwcml0ZSBvYmplY3QuXG4gKlxuICogQHBhcmFtIHNwcml0ZSB7UElYSS5TcHJpdGV9IHRoZSBzcHJpdGUgdG8gcmVuZGVyIHdoZW4gdXNpbmcgdGhpcyBzcHJpdGViYXRjaFxuICovXG5TcHJpdGVSZW5kZXJlci5wcm90b3R5cGUucmVuZGVyID0gZnVuY3Rpb24gKHNwcml0ZSlcbntcbiAgICAvL1RPRE8gc2V0IGJsZW5kIG1vZGVzLi5cbiAgICAvLyBjaGVjayB0ZXh0dXJlLi5cbiAgICBpZiAodGhpcy5jdXJyZW50SW5kZXggPj0gdGhpcy5zaXplKVxuICAgIHtcbiAgICAgICAgdGhpcy5mbHVzaCgpO1xuICAgIH1cblxuICBcbiAgICAvLyBnZXQgdGhlIHV2cyBmb3IgdGhlIHRleHR1cmVcbiAgIFxuXG4gICAgLy8gaWYgdGhlIHV2cyBoYXZlIG5vdCB1cGRhdGVkIHRoZW4gbm8gcG9pbnQgcmVuZGVyaW5nIGp1c3QgeWV0IVxuICAgIGlmICghc3ByaXRlLnRleHR1cmUuX3V2cylcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAgLy8gcHVzaCBhIHRleHR1cmUuXG4gICAgLy8gaW5jcmVtZW50IHRoZSBiYXRjaHNpemVcbiAgICB2YXIgbmV4dFRleHR1cmUgPSAgc3ByaXRlLnRleHR1cmUuYmFzZVRleHR1cmU7XG4gICAgdmFyIGN1cnJlbnRHcm91cCA9IHRoaXMuY3VycmVudEdyb3VwO1xuICAgIHZhciBpO1xuXG4gICAgaWYodGhpcy5jdXJyZW50VGV4dHVyZSAhPT0gbmV4dFRleHR1cmUpXG4gICAge1xuICAgICAgICB0aGlzLmN1cnJlbnRUZXh0dXJlID0gbmV4dFRleHR1cmU7XG4gICAgICAgIFxuICAgICAgICBpZighbmV4dFRleHR1cmUuX2VuYWJsZWQpXG4gICAgICAgIHtcbiAgICAgICAgICAgIG5leHRUZXh0dXJlLl9lbmFibGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIG5leHRUZXh0dXJlLl9pZCA9IHRoaXMudGV4dHVyZUNvdW50O1xuICAgICAgICAgICAgXG4gICAgICAgICAgICBpZih0aGlzLnRleHR1cmVDb3VudCA9PT0gdGhpcy5NQVhfVEVYVFVFUylcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBmb3IgKCBpID0gMDsgaSA8IGN1cnJlbnRHcm91cC50ZXh0dXJlQ291bnQ7IGkrKykgXG4gICAgICAgICAgICAgICAgeyAgICAgXG4gICAgICAgICAgICAgICAgICAgIGN1cnJlbnRHcm91cC50ZXh0dXJlc1tpXS5fZW5hYmxlZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICB0aGlzLnRleHR1cmVDb3VudCA9IDA7XG5cbiAgICAgICAgICAgICAgICBjdXJyZW50R3JvdXAuc2l6ZSA9IHRoaXMuY3VycmVudEluZGV4IC0gY3VycmVudEdyb3VwLnN0YXJ0O1xuICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgY3VycmVudEdyb3VwID0gdGhpcy5jdXJyZW50R3JvdXAgPSB0aGlzLmdyb3Vwc1t0aGlzLmdyb3VwQ291bnQrK107XG4gICAgICAgICAgICAgICAgY3VycmVudEdyb3VwLnRleHR1cmVDb3VudCA9IDA7XG4gICAgICAgICAgICAgICAgY3VycmVudEdyb3VwLnN0YXJ0ID0gdGhpcy5jdXJyZW50SW5kZXg7XG4gICAgICAgICAgICAgICAgXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGN1cnJlbnRHcm91cC50ZXh0dXJlc1tjdXJyZW50R3JvdXAudGV4dHVyZUNvdW50KytdID0gbmV4dFRleHR1cmU7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnRleHR1cmVDb3VudCsrO1xuICAgIH1cblxuICAgIC8vIFRPRE8gdHJpbT8/XG4gICAgdmFyIGluZGV4ID0gdGhpcy5jdXJyZW50SW5kZXggKiB0aGlzLnZlcnRCeXRlU2l6ZTtcblxuICAgIHRoaXMuY3VycmVudEluZGV4Kys7XG5cbiAgICAvLyB1cGxvYWQgdGhlIHNwcml0ZSBlbGVtZXRucy4uLlxuICAgIC8vIHRoZXkgaGF2ZSBhbGwgcmVhZHkgYmVlbiBjYWxjdWxhdGVkIHNvIHdlIGp1c3QgbmVlZCB0byBwdXNoIHRoZW0gaW50byB0aGUgYnVmZmVyLlxuICAgIHZhciBjb2xvcnMgPSB0aGlzLmNvbG9ycztcbiAgICB2YXIgcG9zaXRpb25zID0gdGhpcy5wb3NpdGlvbnM7XG4gICAgdmFyIHZlcnRleERhdGEgPSBzcHJpdGUudmVydGV4RGF0YVxuICAgIHZhciB0aW50ID0gKHNwcml0ZS50aW50ID4+IDE2KSArIChzcHJpdGUudGludCAmIDB4ZmYwMCkgKyAoKHNwcml0ZS50aW50ICYgMHhmZikgPDwgMTYpICsgKHNwcml0ZS53b3JsZEFscGhhICogMjU1IDw8IDI0KTtcbiAgICB2YXIgdXZzID0gc3ByaXRlLnRleHR1cmUuX3V2cy51dnNfdWludDMyO1xuICAgIC8veHlcbiAgICBwb3NpdGlvbnNbaW5kZXgrK10gPSB2ZXJ0ZXhEYXRhWzBdO1xuICAgIHBvc2l0aW9uc1tpbmRleCsrXSA9IHZlcnRleERhdGFbMV07XG4gICAgdGhpcy51dnNbaW5kZXgrK10gPSB1dnNbMF07XG4gICAgY29sb3JzW2luZGV4KytdID0gdGludDtcbiAgICBwb3NpdGlvbnNbaW5kZXgrK10gPSBuZXh0VGV4dHVyZS5faWQ7IFxuICAgIFxuICAgIC8vIHh5XG4gICAgcG9zaXRpb25zW2luZGV4KytdID0gdmVydGV4RGF0YVsyXTtcbiAgICBwb3NpdGlvbnNbaW5kZXgrK10gPSB2ZXJ0ZXhEYXRhWzNdO1xuICAgIHRoaXMudXZzW2luZGV4KytdID0gdXZzWzFdO1xuICAgIGNvbG9yc1tpbmRleCsrXSA9IHRpbnQ7XG4gICAgcG9zaXRpb25zW2luZGV4KytdID0gbmV4dFRleHR1cmUuX2lkO1xuXG4gICAgIC8vIHh5XG4gICAgcG9zaXRpb25zW2luZGV4KytdID0gdmVydGV4RGF0YVs0XTtcbiAgICBwb3NpdGlvbnNbaW5kZXgrK10gPSB2ZXJ0ZXhEYXRhWzVdO1xuICAgIHRoaXMudXZzW2luZGV4KytdID0gdXZzWzJdO1xuICAgIGNvbG9yc1tpbmRleCsrXSA9IHRpbnQ7XG4gICAgcG9zaXRpb25zW2luZGV4KytdID0gbmV4dFRleHR1cmUuX2lkO1xuXG4gICAgLy8geHlcbiAgICBwb3NpdGlvbnNbaW5kZXgrK10gPSB2ZXJ0ZXhEYXRhWzZdO1xuICAgIHBvc2l0aW9uc1tpbmRleCsrXSA9IHZlcnRleERhdGFbN107XG4gICAgdGhpcy51dnNbaW5kZXgrK10gPSB1dnNbM107XG4gICAgY29sb3JzW2luZGV4KytdID0gdGludDtcbiAgICBwb3NpdGlvbnNbaW5kZXgrK10gPSBuZXh0VGV4dHVyZS5faWQ7XG59O1xuXG4vKipcbiAqIFJlbmRlcnMgdGhlIGNvbnRlbnQgYW5kIGVtcHRpZXMgdGhlIGN1cnJlbnQgYmF0Y2guXG4gKlxuICovXG5TcHJpdGVSZW5kZXJlci5wcm90b3R5cGUuZmx1c2ggPSBmdW5jdGlvbiAoKVxue1xuICAgIGlmICh0aGlzLmN1cnJlbnRJbmRleCA9PT0gMClyZXR1cm47XG5cbiAgICB2YXIgZ2wgPSB0aGlzLnJlbmRlcmVyLmdsO1xuXG5cbiAgICB0aGlzLmN1cnJlbnRHcm91cC5zaXplID0gdGhpcy5jdXJyZW50SW5kZXggLSB0aGlzLmN1cnJlbnRHcm91cC5zdGFydDtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuY3VycmVudEdyb3VwLnRleHR1cmVDb3VudDsgaSsrKSBcbiAgICB7ICAgICBcbiAgICAgICAgdGhpcy5jdXJyZW50R3JvdXAudGV4dHVyZXNbaV0uX2VuYWJsZWQgPSBmYWxzZTtcbiAgICB9O1xuICAgXG4gICAgLy8gZG8gc29tZSBzbWFydCBhcnJheSBzdHVmZi4uXG4gICAgLy8gZG91YmxlIHNpemUgc28gd2UgZG9udCBhbHdheSBzdWJhcnJheSB0aGUgZWxlbWVudHMuLlxuICAgIC8vIHVwbG9hZCB0aGUgdmVydHMgdG8gdGhlIGJ1ZmZlclxuICAgIGlmICh0aGlzLmN1cnJlbnRCYXRjaFNpemUgPiAoIHRoaXMuc2l6ZSAqIDAuNSApIClcbiAgICB7XG4gICAgICAgIHRoaXMudmVydGV4QnVmZmVyLnVwbG9hZCh0aGlzLnZlcnRpY2VzLCAwLCB0cnVlKTtcbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgLy8gbyBrIC4uIHN1YiBhcnJheSBpcyBTTE9XPj9cbiAgICAgICAgdmFyIHZpZXcgPSB0aGlzLnBvc2l0aW9ucy5zdWJhcnJheSgwLCB0aGlzLmN1cnJlbnRJbmRleCAqIHRoaXMudmVydEJ5dGVTaXplKTtcbiAgICAgICAgdGhpcy52ZXJ0ZXhCdWZmZXIudXBsb2FkKHZpZXcsIDAsIHRydWUpO1xuICAgIH1cblxuICAgIC8vIGJpbmQgc2hhZGVyLi5cbiAgICB0aGlzLnJlbmRlcmVyLmJpbmRTaGFkZXIodGhpcy5fc2hhZGVyKTtcbiAgICB0aGlzLnJlbmRlcmVyLmJsZW5kTW9kZU1hbmFnZXIuc2V0QmxlbmRNb2RlKCAwICk7XG5cbiAgICAvLy8gcmVuZGVyIHRoZSBncm91cHMuLlxuICAgIGZvciAoaSA9IDA7IGkgPCB0aGlzLmdyb3VwQ291bnQ7IGkrKykge1xuICAgICAgICBcbiAgICAgICAgdmFyIGdyb3VwID0gdGhpcy5ncm91cHNbaV07XG5cbiAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBncm91cC50ZXh0dXJlQ291bnQ7IGorKykge1xuICAgICAgICAgICAgdGhpcy5yZW5kZXJlci5iaW5kVGV4dHVyZShncm91cC50ZXh0dXJlc1tqXSwgaik7XG4gICAgICAgIH07XG5cbiAgICAgICAgZ2wuZHJhd0VsZW1lbnRzKGdsLlRSSUFOR0xFUywgZ3JvdXAuc2l6ZSAqIDYsIGdsLlVOU0lHTkVEX1NIT1JULCBncm91cC5zdGFydCAqIDYgKiAyKTtcbiAgICB9O1xuXG4gICAgLy8gcmVzZXQgZWxlbWVudHMgZm9yIHRoZSBuZXh0IGZsdXNoXG4gICAgdGhpcy5jdXJyZW50VGV4dHVyZSA9IG51bGw7XG4gICAgdGhpcy5jdXJyZW50SW5kZXggPSAwO1xuICAgIHRoaXMudGV4dHVyZUNvdW50ID0gMDtcbiAgICB0aGlzLmdyb3VwQ291bnQgPSAwO1xuICAgIFxuICAgIHRoaXMuY3VycmVudEdyb3VwID0gdGhpcy5ncm91cHNbdGhpcy5ncm91cENvdW50KytdO1xuICAgIHRoaXMuY3VycmVudEdyb3VwLnRleHR1cmVDb3VudCA9IDA7XG59O1xuXG4vKipcbiAqIFN0YXJ0cyBhIG5ldyBzcHJpdGUgYmF0Y2guXG4gKlxuICovXG5TcHJpdGVSZW5kZXJlci5wcm90b3R5cGUuc3RhcnQgPSBmdW5jdGlvbiAoKVxue1xuICAgIHRoaXMudmFvLmJpbmQoKTtcbn07XG5cblNwcml0ZVJlbmRlcmVyLnByb3RvdHlwZS5zdG9wID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLmZsdXNoKCk7XG4gICAgdGhpcy52YW8udW5iaW5kKCk7XG59O1xuLyoqXG4gKiBEZXN0cm95cyB0aGUgU3ByaXRlQmF0Y2guXG4gKlxuICovXG5TcHJpdGVSZW5kZXJlci5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy52ZXJ0ZXhCdWZmZXIuZGVzdHJveSgpO1xuICAgIHRoaXMuaW5kZXhCdWZmZXIuZGVzdHJveSgpO1xuXG4gICAgT2JqZWN0UmVuZGVyZXIucHJvdG90eXBlLmRlc3Ryb3kuY2FsbCh0aGlzKTtcblxuICAgIHRoaXMuc2hhZGVyLmRlc3Ryb3koKTtcblxuICAgIHRoaXMucmVuZGVyZXIgPSBudWxsO1xuXG4gICAgdGhpcy52ZXJ0aWNlcyA9IG51bGw7XG4gICAgdGhpcy5wb3NpdGlvbnMgPSBudWxsO1xuICAgIHRoaXMuY29sb3JzID0gbnVsbDtcbiAgICB0aGlzLmluZGljZXMgPSBudWxsO1xuXG4gICAgdGhpcy52ZXJ0ZXhCdWZmZXIgPSBudWxsO1xuICAgIHRoaXMuaW5kZXhCdWZmZXIgPSBudWxsO1xuXG4gICAgdGhpcy5zcHJpdGVzID0gbnVsbDtcbiAgICB0aGlzLnNoYWRlciA9IG51bGw7XG59O1xuIiwidmFyIFNoYWRlciA9IHJlcXVpcmUoJ3BpeGktZ2wtY29yZScpLkdMU2hhZGVyO1xuXG5cbmZ1bmN0aW9uIGdlbmVyYXRlTXVsdGlUZXh0dXJlU2hhZGVyKGdsLCBtYXhUZXh0dXJlcylcbntcbiAgICB2YXIgdmVydGV4U3JjID0gXCJwcmVjaXNpb24gbG93cCBmbG9hdDtcXG5hdHRyaWJ1dGUgdmVjMiBhVmVydGV4UG9zaXRpb247XFxuYXR0cmlidXRlIHZlYzIgYVRleHR1cmVDb29yZDtcXG5hdHRyaWJ1dGUgdmVjNCBhQ29sb3I7XFxuYXR0cmlidXRlIGZsb2F0IGFUZXh0dXJlSWQ7XFxuXFxudW5pZm9ybSBtYXQzIHByb2plY3Rpb25NYXRyaXg7XFxuXFxudmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7XFxudmFyeWluZyB2ZWM0IHZDb2xvcjtcXG52YXJ5aW5nIGZsb2F0IHZUZXh0dXJlSWQ7XFxuXFxudm9pZCBtYWluKHZvaWQpe1xcbiAgIGdsX1Bvc2l0aW9uID0gdmVjNCgocHJvamVjdGlvbk1hdHJpeCAqIHZlYzMoYVZlcnRleFBvc2l0aW9uLCAxLjApKS54eSwgMC4wLCAxLjApO1xcbiAgIHZUZXh0dXJlQ29vcmQgPSBhVGV4dHVyZUNvb3JkO1xcbiAgIHZUZXh0dXJlSWQgPSBhVGV4dHVyZUlkO1xcbiAgIHZDb2xvciA9IHZlYzQoYUNvbG9yLnJnYiAqIGFDb2xvci5hLCBhQ29sb3IuYSk7XFxufVwiO1xuICAgIHZhciBmcmFnbWVudFNyYyA9ICdwcmVjaXNpb24gbG93cCBmbG9hdDtcXG5cXG4nICsgZ2VuZXJhdGVTYW1wbGVTcmMobWF4VGV4dHVyZXMpICsgXCJcXG5cXG5cIiArIGZyYWdUZW1wbGF0ZVxuXG4gICAgZnJhZ21lbnRTcmMgPSBmcmFnbWVudFNyYy5yZXBsYWNlKC9cXCVcXCUvZ2ksICcxNicpO1xuXG4gICAgdmFyIHNoYWRlciA9IG5ldyBTaGFkZXIoZ2wsIHZlcnRleFNyYywgZnJhZ21lbnRTcmMpO1xuXG5cbiAgICB2YXIgc2FtcGxlVmFsdWVzID0gW107XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBtYXhUZXh0dXJlczsgaSsrKSB7XG4gICAgICAgIHNhbXBsZVZhbHVlc1tpXSA9IGk7XG4gICAgfTtcblxuICAgIHNoYWRlci5iaW5kKCk7XG4gICAgc2hhZGVyLnVuaWZvcm1zLnVTYW1wbGVycyA9IHNhbXBsZVZhbHVlcztcblxuICAgIHJldHVybiBzaGFkZXI7XG59XG5cbmZ1bmN0aW9uIGdlbmVyYXRlU2FtcGxlU3JjKG1heFRleHR1cmVzKVxue1xuICAgIHZhciBzcmMgPSAndmVjNCBnZXRTYW1wbGVGcm9tQXJyYXkoc2FtcGxlcjJEIHRleHR1cmVzWyUlXSwgaW50IG5keCwgdmVjMiB1dikge1xcblxcbnZlYzQgY29sb3I7J1xuXG4gICAgc3JjICs9ICdcXG4nO1xuICAgIHNyYyArPSAnXFxuJztcbiAgICBcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG1heFRleHR1cmVzOyBpKyspIFxuICAgIHtcbiAgICAgICAgaWYoaSA+IDApc3JjICs9ICdcXG5lbHNlICc7XG4gICAgICAgIGlmKGkgPCBtYXhUZXh0dXJlcy0xKXNyYyArPSAnaWYobmR4ID09ICcgKyBpICsgJyknO1xuICAgICAgICBzcmMgKz0gJ1xcbnsnO1xuICAgICAgICBzcmMgKz0gJ1xcblxcdGNvbG9yID0gdGV4dHVyZTJEKHRleHR1cmVzWycraSsnXSwgdXYpOyc7XG4gICAgICAgIHNyYyArPSAnXFxufSc7XG4gICAgfTtcblxuICAgIHNyYyArPSAnXFxuJztcbiAgICBzcmMgKz0gJ1xcbic7XG4gICAgc3JjICs9ICdyZXR1cm4gY29sb3I7JztcbiAgICBzcmMgKz0gJ1xcbn0nO1xuXG4gICAgcmV0dXJuIHNyYztcbn1cblxudmFyIGZyYWdUZW1wbGF0ZSA9IFtcblxuICAgICd2YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDsnLFxuICAgICd2YXJ5aW5nIHZlYzQgdkNvbG9yOycsXG4gICAgJ3ZhcnlpbmcgZmxvYXQgdlRleHR1cmVJZDsnLFxuICAgICd1bmlmb3JtIHNhbXBsZXIyRCB1U2FtcGxlcnNbJSVdOycsXG5cbiAgICAndm9pZCBtYWluKHZvaWQpeycsXG4gICAgICAgICdnbF9GcmFnQ29sb3IgPSBnZXRTYW1wbGVGcm9tQXJyYXkodVNhbXBsZXJzLCBpbnQodlRleHR1cmVJZCksIHZUZXh0dXJlQ29vcmQpICogdkNvbG9yOycsXG4gICAgJ30nXG5dLmpvaW4oJ1xcbicpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGdlbmVyYXRlTXVsdGlUZXh0dXJlU2hhZGVyO1xuIiwidmFyIFNwcml0ZSA9IHJlcXVpcmUoJy4uL3Nwcml0ZXMvU3ByaXRlJyksXG4gICAgVGV4dHVyZSA9IHJlcXVpcmUoJy4uL3RleHR1cmVzL1RleHR1cmUnKSxcbiAgICBtYXRoID0gcmVxdWlyZSgnLi4vbWF0aCcpLFxuICAgIHV0aWxzID0gcmVxdWlyZSgnLi4vdXRpbHMnKSxcbiAgICBDT05TVCA9IHJlcXVpcmUoJy4uL2NvbnN0Jyk7XG5cbi8qKlxuICogQSBUZXh0IE9iamVjdCB3aWxsIGNyZWF0ZSBhIGxpbmUgb3IgbXVsdGlwbGUgbGluZXMgb2YgdGV4dC4gVG8gc3BsaXQgYSBsaW5lIHlvdSBjYW4gdXNlICdcXG4nIGluIHlvdXIgdGV4dCBzdHJpbmcsXG4gKiBvciBhZGQgYSB3b3JkV3JhcCBwcm9wZXJ0eSBzZXQgdG8gdHJ1ZSBhbmQgYW5kIHdvcmRXcmFwV2lkdGggcHJvcGVydHkgd2l0aCBhIHZhbHVlIGluIHRoZSBzdHlsZSBvYmplY3QuXG4gKlxuICogQSBUZXh0IGNhbiBiZSBjcmVhdGVkIGRpcmVjdGx5IGZyb20gYSBzdHJpbmcgYW5kIGEgc3R5bGUgb2JqZWN0XG4gKlxuICogYGBganNcbiAqIHZhciB0ZXh0ID0gbmV3IFBJWEkuVGV4dCgnVGhpcyBpcyBhIHBpeGkgdGV4dCcse2ZvbnQgOiAnMjRweCBBcmlhbCcsIGZpbGwgOiAweGZmMTAxMCwgYWxpZ24gOiAnY2VudGVyJ30pO1xuICogYGBgXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLlNwcml0ZVxuICogQG1lbWJlcm9mIFBJWElcbiAqIEBwYXJhbSB0ZXh0IHtzdHJpbmd9IFRoZSBjb3B5IHRoYXQgeW91IHdvdWxkIGxpa2UgdGhlIHRleHQgdG8gZGlzcGxheVxuICogQHBhcmFtIFtzdHlsZV0ge29iamVjdH0gVGhlIHN0eWxlIHBhcmFtZXRlcnNcbiAqIEBwYXJhbSBbc3R5bGUuZm9udF0ge3N0cmluZ30gZGVmYXVsdCAnYm9sZCAyMHB4IEFyaWFsJyBUaGUgc3R5bGUgYW5kIHNpemUgb2YgdGhlIGZvbnRcbiAqIEBwYXJhbSBbc3R5bGUuZmlsbD0nYmxhY2snXSB7U3RyaW5nfE51bWJlcn0gQSBjYW52YXMgZmlsbHN0eWxlIHRoYXQgd2lsbCBiZSB1c2VkIG9uIHRoZSB0ZXh0IGUuZyAncmVkJywgJyMwMEZGMDAnXG4gKiBAcGFyYW0gW3N0eWxlLmFsaWduPSdsZWZ0J10ge3N0cmluZ30gQWxpZ25tZW50IGZvciBtdWx0aWxpbmUgdGV4dCAoJ2xlZnQnLCAnY2VudGVyJyBvciAncmlnaHQnKSwgZG9lcyBub3QgYWZmZWN0IHNpbmdsZSBsaW5lIHRleHRcbiAqIEBwYXJhbSBbc3R5bGUuc3Ryb2tlXSB7U3RyaW5nfE51bWJlcn0gQSBjYW52YXMgZmlsbHN0eWxlIHRoYXQgd2lsbCBiZSB1c2VkIG9uIHRoZSB0ZXh0IHN0cm9rZSBlLmcgJ2JsdWUnLCAnI0ZDRkYwMCdcbiAqIEBwYXJhbSBbc3R5bGUuc3Ryb2tlVGhpY2tuZXNzPTBdIHtudW1iZXJ9IEEgbnVtYmVyIHRoYXQgcmVwcmVzZW50cyB0aGUgdGhpY2tuZXNzIG9mIHRoZSBzdHJva2UuIERlZmF1bHQgaXMgMCAobm8gc3Ryb2tlKVxuICogQHBhcmFtIFtzdHlsZS53b3JkV3JhcD1mYWxzZV0ge2Jvb2xlYW59IEluZGljYXRlcyBpZiB3b3JkIHdyYXAgc2hvdWxkIGJlIHVzZWRcbiAqIEBwYXJhbSBbc3R5bGUud29yZFdyYXBXaWR0aD0xMDBdIHtudW1iZXJ9IFRoZSB3aWR0aCBhdCB3aGljaCB0ZXh0IHdpbGwgd3JhcCwgaXQgbmVlZHMgd29yZFdyYXAgdG8gYmUgc2V0IHRvIHRydWVcbiAqIEBwYXJhbSBbc3R5bGUubGluZUhlaWdodF0ge251bWJlcn0gVGhlIGxpbmUgaGVpZ2h0LCBhIG51bWJlciB0aGF0IHJlcHJlc2VudHMgdGhlIHZlcnRpY2FsIHNwYWNlIHRoYXQgYSBsZXR0ZXIgdXNlc1xuICogQHBhcmFtIFtzdHlsZS5kcm9wU2hhZG93PWZhbHNlXSB7Ym9vbGVhbn0gU2V0IGEgZHJvcCBzaGFkb3cgZm9yIHRoZSB0ZXh0XG4gKiBAcGFyYW0gW3N0eWxlLmRyb3BTaGFkb3dDb2xvcj0nIzAwMDAwMCddIHtzdHJpbmd9IEEgZmlsbCBzdHlsZSB0byBiZSB1c2VkIG9uIHRoZSBkcm9wc2hhZG93IGUuZyAncmVkJywgJyMwMEZGMDAnXG4gKiBAcGFyYW0gW3N0eWxlLmRyb3BTaGFkb3dBbmdsZT1NYXRoLlBJLzRdIHtudW1iZXJ9IFNldCBhIGFuZ2xlIG9mIHRoZSBkcm9wIHNoYWRvd1xuICogQHBhcmFtIFtzdHlsZS5kcm9wU2hhZG93RGlzdGFuY2U9NV0ge251bWJlcn0gU2V0IGEgZGlzdGFuY2Ugb2YgdGhlIGRyb3Agc2hhZG93XG4gKiBAcGFyYW0gW3N0eWxlLmRyb3BTaGFkb3dCbHVyPTBdIHtudW1iZXJ9IFNldCBhIHNoYWRvdyBibHVyIHJhZGl1c1xuICogQHBhcmFtIFtzdHlsZS5wYWRkaW5nPTBdIHtudW1iZXJ9IE9jY2FzaW9uYWxseSBzb21lIGZvbnRzIGFyZSBjcm9wcGVkIG9uIHRvcCBvciBib3R0b20uIEFkZGluZyBzb21lIHBhZGRpbmcgd2lsbFxuICogICAgICBwcmV2ZW50IHRoaXMgZnJvbSBoYXBwZW5pbmcgYnkgYWRkaW5nIHBhZGRpbmcgdG8gdGhlIHRvcCBhbmQgYm90dG9tIG9mIHRleHQgaGVpZ2h0LlxuICogQHBhcmFtIFtzdHlsZS50ZXh0QmFzZWxpbmU9J2FscGhhYmV0aWMnXSB7c3RyaW5nfSBUaGUgYmFzZWxpbmUgb2YgdGhlIHRleHQgdGhhdCBpcyByZW5kZXJlZC5cbiAqIEBwYXJhbSBbc3R5bGUubGluZUpvaW49J21pdGVyJ10ge3N0cmluZ30gVGhlIGxpbmVKb2luIHByb3BlcnR5IHNldHMgdGhlIHR5cGUgb2YgY29ybmVyIGNyZWF0ZWQsIGl0IGNhbiByZXNvbHZlXG4gKiAgICAgIHNwaWtlZCB0ZXh0IGlzc3Vlcy4gRGVmYXVsdCBpcyAnbWl0ZXInIChjcmVhdGVzIGEgc2hhcnAgY29ybmVyKS5cbiAqIEBwYXJhbSBbc3R5bGUubWl0ZXJMaW1pdD0xMF0ge251bWJlcn0gVGhlIG1pdGVyIGxpbWl0IHRvIHVzZSB3aGVuIHVzaW5nIHRoZSAnbWl0ZXInIGxpbmVKb2luIG1vZGUuIFRoaXMgY2FuIHJlZHVjZVxuICogICAgICBvciBpbmNyZWFzZSB0aGUgc3Bpa2luZXNzIG9mIHJlbmRlcmVkIHRleHQuXG4gKi9cbmZ1bmN0aW9uIFRleHQodGV4dCwgc3R5bGUsIHJlc29sdXRpb24pXG57XG4gICAgLyoqXG4gICAgICogVGhlIGNhbnZhcyBlbGVtZW50IHRoYXQgZXZlcnl0aGluZyBpcyBkcmF3biB0b1xuICAgICAqXG4gICAgICogQG1lbWJlciB7SFRNTENhbnZhc0VsZW1lbnR9XG4gICAgICovXG4gICAgdGhpcy5jYW52YXMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdjYW52YXMnKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBjYW52YXMgMmQgY29udGV4dCB0aGF0IGV2ZXJ5dGhpbmcgaXMgZHJhd24gd2l0aFxuICAgICAqIEBtZW1iZXIge0hUTUxDYW52YXNFbGVtZW50fVxuICAgICAqL1xuICAgIHRoaXMuY29udGV4dCA9IHRoaXMuY2FudmFzLmdldENvbnRleHQoJzJkJyk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgcmVzb2x1dGlvbiBvZiB0aGUgY2FudmFzLlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLnJlc29sdXRpb24gPSByZXNvbHV0aW9uIHx8IENPTlNULlJFU09MVVRJT047XG5cbiAgICAvKipcbiAgICAgKiBQcml2YXRlIHRyYWNrZXIgZm9yIHRoZSBjdXJyZW50IHRleHQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtzdHJpbmd9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl90ZXh0ID0gbnVsbDtcblxuICAgIC8qKlxuICAgICAqIFByaXZhdGUgdHJhY2tlciBmb3IgdGhlIGN1cnJlbnQgc3R5bGUuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtvYmplY3R9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9zdHlsZSA9IG51bGw7XG5cbiAgICB2YXIgdGV4dHVyZSA9IFRleHR1cmUuZnJvbUNhbnZhcyh0aGlzLmNhbnZhcyk7XG4gICAgdGV4dHVyZS50cmltID0gbmV3IG1hdGguUmVjdGFuZ2xlKCk7XG4gICAgU3ByaXRlLmNhbGwodGhpcywgdGV4dHVyZSk7XG5cbiAgICB0aGlzLnRleHQgPSB0ZXh0O1xuICAgIHRoaXMuc3R5bGUgPSBzdHlsZTtcbn1cblxuLy8gY29uc3RydWN0b3JcblRleHQucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShTcHJpdGUucHJvdG90eXBlKTtcblRleHQucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gVGV4dDtcbm1vZHVsZS5leHBvcnRzID0gVGV4dDtcblxuVGV4dC5mb250UHJvcGVydGllc0NhY2hlID0ge307XG5UZXh0LmZvbnRQcm9wZXJ0aWVzQ2FudmFzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnY2FudmFzJyk7XG5UZXh0LmZvbnRQcm9wZXJ0aWVzQ29udGV4dCA9IFRleHQuZm9udFByb3BlcnRpZXNDYW52YXMuZ2V0Q29udGV4dCgnMmQnKTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoVGV4dC5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBUaGUgd2lkdGggb2YgdGhlIFRleHQsIHNldHRpbmcgdGhpcyB3aWxsIGFjdHVhbGx5IG1vZGlmeSB0aGUgc2NhbGUgdG8gYWNoaWV2ZSB0aGUgdmFsdWUgc2V0XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuVGV4dCNcbiAgICAgKi9cbiAgICB3aWR0aDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmRpcnR5KVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlVGV4dCgpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5zY2FsZS54ICogdGhpcy5fdGV4dHVyZS5fZnJhbWUud2lkdGg7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnNjYWxlLnggPSB2YWx1ZSAvIHRoaXMuX3RleHR1cmUuX2ZyYW1lLndpZHRoO1xuICAgICAgICAgICAgdGhpcy5fd2lkdGggPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBUaGUgaGVpZ2h0IG9mIHRoZSBUZXh0LCBzZXR0aW5nIHRoaXMgd2lsbCBhY3R1YWxseSBtb2RpZnkgdGhlIHNjYWxlIHRvIGFjaGlldmUgdGhlIHZhbHVlIHNldFxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLlRleHQjXG4gICAgICovXG4gICAgaGVpZ2h0OiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgaWYgKHRoaXMuZGlydHkpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdGhpcy51cGRhdGVUZXh0KCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiAgdGhpcy5zY2FsZS55ICogdGhpcy5fdGV4dHVyZS5fZnJhbWUuaGVpZ2h0O1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5zY2FsZS55ID0gdmFsdWUgLyB0aGlzLl90ZXh0dXJlLl9mcmFtZS5oZWlnaHQ7XG4gICAgICAgICAgICB0aGlzLl9oZWlnaHQgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBTZXQgdGhlIHN0eWxlIG9mIHRoZSB0ZXh0XG4gICAgICpcbiAgICAgKiBAcGFyYW0gW3N0eWxlXSB7b2JqZWN0fSBUaGUgc3R5bGUgcGFyYW1ldGVyc1xuICAgICAqIEBwYXJhbSBbc3R5bGUuZm9udD0nYm9sZCAyMHB0IEFyaWFsJ10ge3N0cmluZ30gVGhlIHN0eWxlIGFuZCBzaXplIG9mIHRoZSBmb250XG4gICAgICogQHBhcmFtIFtzdHlsZS5maWxsPSdibGFjayddIHtzdHJpbmd8bnVtYmVyfSBBIGNhbnZhcyBmaWxsc3R5bGUgdGhhdCB3aWxsIGJlIHVzZWQgb24gdGhlIHRleHQgZWcgJ3JlZCcsICcjMDBGRjAwJ1xuICAgICAqIEBwYXJhbSBbc3R5bGUuYWxpZ249J2xlZnQnXSB7c3RyaW5nfSBBbGlnbm1lbnQgZm9yIG11bHRpbGluZSB0ZXh0ICgnbGVmdCcsICdjZW50ZXInIG9yICdyaWdodCcpLCBkb2VzIG5vdCBhZmZlY3Qgc2luZ2xlIGxpbmUgdGV4dFxuICAgICAqIEBwYXJhbSBbc3R5bGUuc3Ryb2tlPSdibGFjayddIHtzdHJpbmd8bnVtYmVyfSBBIGNhbnZhcyBmaWxsc3R5bGUgdGhhdCB3aWxsIGJlIHVzZWQgb24gdGhlIHRleHQgc3Ryb2tlIGVnICdibHVlJywgJyNGQ0ZGMDAnXG4gICAgICogQHBhcmFtIFtzdHlsZS5zdHJva2VUaGlja25lc3M9MF0ge251bWJlcn0gQSBudW1iZXIgdGhhdCByZXByZXNlbnRzIHRoZSB0aGlja25lc3Mgb2YgdGhlIHN0cm9rZS4gRGVmYXVsdCBpcyAwIChubyBzdHJva2UpXG4gICAgICogQHBhcmFtIFtzdHlsZS53b3JkV3JhcD1mYWxzZV0ge2Jvb2xlYW59IEluZGljYXRlcyBpZiB3b3JkIHdyYXAgc2hvdWxkIGJlIHVzZWRcbiAgICAgKiBAcGFyYW0gW3N0eWxlLndvcmRXcmFwV2lkdGg9MTAwXSB7bnVtYmVyfSBUaGUgd2lkdGggYXQgd2hpY2ggdGV4dCB3aWxsIHdyYXBcbiAgICAgKiBAcGFyYW0gW3N0eWxlLmxpbmVIZWlnaHRdIHtudW1iZXJ9IFRoZSBsaW5lIGhlaWdodCwgYSBudW1iZXIgdGhhdCByZXByZXNlbnRzIHRoZSB2ZXJ0aWNhbCBzcGFjZSB0aGF0IGEgbGV0dGVyIHVzZXNcbiAgICAgKiBAcGFyYW0gW3N0eWxlLmRyb3BTaGFkb3c9ZmFsc2VdIHtib29sZWFufSBTZXQgYSBkcm9wIHNoYWRvdyBmb3IgdGhlIHRleHRcbiAgICAgKiBAcGFyYW0gW3N0eWxlLmRyb3BTaGFkb3dDb2xvcj0nIzAwMDAwMCddIHtzdHJpbmd8bnVtYmVyfSBBIGZpbGwgc3R5bGUgdG8gYmUgdXNlZCBvbiB0aGUgZHJvcHNoYWRvdyBlLmcgJ3JlZCcsICcjMDBGRjAwJ1xuICAgICAqIEBwYXJhbSBbc3R5bGUuZHJvcFNoYWRvd0FuZ2xlPU1hdGguUEkvNl0ge251bWJlcn0gU2V0IGEgYW5nbGUgb2YgdGhlIGRyb3Agc2hhZG93XG4gICAgICogQHBhcmFtIFtzdHlsZS5kcm9wU2hhZG93RGlzdGFuY2U9NV0ge251bWJlcn0gU2V0IGEgZGlzdGFuY2Ugb2YgdGhlIGRyb3Agc2hhZG93XG4gICAgICogQHBhcmFtIFtzdHlsZS5kcm9wU2hhZG93Qmx1cj0wXSB7bnVtYmVyfSBTZXQgYSBzaGFkb3cgYmx1ciByYWRpdXNcbiAgICAgKiBAcGFyYW0gW3N0eWxlLnBhZGRpbmc9MF0ge251bWJlcn0gT2NjYXNpb25hbGx5IHNvbWUgZm9udHMgYXJlIGNyb3BwZWQgb24gdG9wIG9yIGJvdHRvbS4gQWRkaW5nIHNvbWUgcGFkZGluZyB3aWxsXG4gICAgICogICAgICBwcmV2ZW50IHRoaXMgZnJvbSBoYXBwZW5pbmcgYnkgYWRkaW5nIHBhZGRpbmcgdG8gdGhlIHRvcCBhbmQgYm90dG9tIG9mIHRleHQgaGVpZ2h0LlxuICAgICAqIEBwYXJhbSBbc3R5bGUudGV4dEJhc2VsaW5lPSdhbHBoYWJldGljJ10ge3N0cmluZ30gVGhlIGJhc2VsaW5lIG9mIHRoZSB0ZXh0IHRoYXQgaXMgcmVuZGVyZWQuXG4gICAgICogQHBhcmFtIFtzdHlsZS5saW5lSm9pbj0nbWl0ZXInXSB7c3RyaW5nfSBUaGUgbGluZUpvaW4gcHJvcGVydHkgc2V0cyB0aGUgdHlwZSBvZiBjb3JuZXIgY3JlYXRlZCwgaXQgY2FuIHJlc29sdmVcbiAgICAgKiAgICAgIHNwaWtlZCB0ZXh0IGlzc3Vlcy4gRGVmYXVsdCBpcyAnbWl0ZXInIChjcmVhdGVzIGEgc2hhcnAgY29ybmVyKS5cbiAgICAgKiBAcGFyYW0gW3N0eWxlLm1pdGVyTGltaXQ9MTBdIHtudW1iZXJ9IFRoZSBtaXRlciBsaW1pdCB0byB1c2Ugd2hlbiB1c2luZyB0aGUgJ21pdGVyJyBsaW5lSm9pbiBtb2RlLiBUaGlzIGNhbiByZWR1Y2VcbiAgICAgKiAgICAgIG9yIGluY3JlYXNlIHRoZSBzcGlraW5lc3Mgb2YgcmVuZGVyZWQgdGV4dC5cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5UZXh0I1xuICAgICAqL1xuICAgIHN0eWxlOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3N0eWxlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uIChzdHlsZSlcbiAgICAgICAge1xuICAgICAgICAgICAgc3R5bGUgPSBzdHlsZSB8fCB7fTtcblxuICAgICAgICAgICAgaWYgKHR5cGVvZiBzdHlsZS5maWxsID09PSAnbnVtYmVyJykge1xuICAgICAgICAgICAgICAgIHN0eWxlLmZpbGwgPSB1dGlscy5oZXgyc3RyaW5nKHN0eWxlLmZpbGwpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAodHlwZW9mIHN0eWxlLnN0cm9rZSA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgICAgICAgICBzdHlsZS5zdHJva2UgPSB1dGlscy5oZXgyc3RyaW5nKHN0eWxlLnN0cm9rZSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICh0eXBlb2Ygc3R5bGUuZHJvcFNoYWRvd0NvbG9yID09PSAnbnVtYmVyJykge1xuICAgICAgICAgICAgICAgIHN0eWxlLmRyb3BTaGFkb3dDb2xvciA9IHV0aWxzLmhleDJzdHJpbmcoc3R5bGUuZHJvcFNoYWRvd0NvbG9yKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgc3R5bGUuZm9udCA9IHN0eWxlLmZvbnQgfHwgJ2JvbGQgMjBwdCBBcmlhbCc7XG4gICAgICAgICAgICBzdHlsZS5maWxsID0gc3R5bGUuZmlsbCB8fCAnYmxhY2snO1xuICAgICAgICAgICAgc3R5bGUuYWxpZ24gPSBzdHlsZS5hbGlnbiB8fCAnbGVmdCc7XG4gICAgICAgICAgICBzdHlsZS5zdHJva2UgPSBzdHlsZS5zdHJva2UgfHwgJ2JsYWNrJzsgLy9wcm92aWRlIGEgZGVmYXVsdCwgc2VlOiBodHRwczovL2dpdGh1Yi5jb20vcGl4aWpzL3BpeGkuanMvaXNzdWVzLzEzNlxuICAgICAgICAgICAgc3R5bGUuc3Ryb2tlVGhpY2tuZXNzID0gc3R5bGUuc3Ryb2tlVGhpY2tuZXNzIHx8IDA7XG4gICAgICAgICAgICBzdHlsZS53b3JkV3JhcCA9IHN0eWxlLndvcmRXcmFwIHx8IGZhbHNlO1xuICAgICAgICAgICAgc3R5bGUud29yZFdyYXBXaWR0aCA9IHN0eWxlLndvcmRXcmFwV2lkdGggfHwgMTAwO1xuXG4gICAgICAgICAgICBzdHlsZS5kcm9wU2hhZG93ID0gc3R5bGUuZHJvcFNoYWRvdyB8fCBmYWxzZTtcbiAgICAgICAgICAgIHN0eWxlLmRyb3BTaGFkb3dDb2xvciA9IHN0eWxlLmRyb3BTaGFkb3dDb2xvciB8fCAnIzAwMDAwMCc7XG4gICAgICAgICAgICBzdHlsZS5kcm9wU2hhZG93QW5nbGUgPSBzdHlsZS5kcm9wU2hhZG93QW5nbGUgIT09IHVuZGVmaW5lZCA/IHN0eWxlLmRyb3BTaGFkb3dBbmdsZSA6IE1hdGguUEkgLyA2O1xuICAgICAgICAgICAgc3R5bGUuZHJvcFNoYWRvd0Rpc3RhbmNlID0gc3R5bGUuZHJvcFNoYWRvd0Rpc3RhbmNlICE9PSB1bmRlZmluZWQgPyBzdHlsZS5kcm9wU2hhZG93RGlzdGFuY2UgOiA1O1xuICAgICAgICAgICAgc3R5bGUuZHJvcFNoYWRvd0JsdXIgPSBzdHlsZS5kcm9wU2hhZG93Qmx1ciAhPT0gdW5kZWZpbmVkID8gc3R5bGUuZHJvcFNoYWRvd0JsdXIgOiAwOyAvL3NoYWRvd0JsdXIgaXMgJzAnIGJ5IGRlZmF1bHQgYWNjb3JkaW5nIHRvIEhUTUxcblxuICAgICAgICAgICAgc3R5bGUucGFkZGluZyA9IHN0eWxlLnBhZGRpbmcgfHwgMDtcblxuICAgICAgICAgICAgc3R5bGUudGV4dEJhc2VsaW5lID0gc3R5bGUudGV4dEJhc2VsaW5lIHx8ICdhbHBoYWJldGljJztcblxuICAgICAgICAgICAgc3R5bGUubGluZUpvaW4gPSBzdHlsZS5saW5lSm9pbiB8fCAnbWl0ZXInO1xuICAgICAgICAgICAgc3R5bGUubWl0ZXJMaW1pdCA9IHN0eWxlLm1pdGVyTGltaXQgfHwgMTA7XG5cbiAgICAgICAgICAgIHRoaXMuX3N0eWxlID0gc3R5bGU7XG4gICAgICAgICAgICB0aGlzLmRpcnR5ID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBTZXQgdGhlIGNvcHkgZm9yIHRoZSB0ZXh0IG9iamVjdC4gVG8gc3BsaXQgYSBsaW5lIHlvdSBjYW4gdXNlICdcXG4nLlxuICAgICAqXG4gICAgICogQHBhcmFtIHRleHQge3N0cmluZ30gVGhlIGNvcHkgdGhhdCB5b3Ugd291bGQgbGlrZSB0aGUgdGV4dCB0byBkaXNwbGF5XG4gICAgICogQG1lbWJlcm9mIFBJWEkuVGV4dCNcbiAgICAgKi9cbiAgICB0ZXh0OiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24oKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fdGV4dDtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodGV4dCl7XG4gICAgICAgICAgICB0ZXh0ID0gdGV4dC50b1N0cmluZygpIHx8ICcgJztcbiAgICAgICAgICAgIGlmICh0aGlzLl90ZXh0ID09PSB0ZXh0KVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuX3RleHQgPSB0ZXh0O1xuICAgICAgICAgICAgdGhpcy5kaXJ0eSA9IHRydWU7XG4gICAgICAgIH1cbiAgICB9XG59KTtcblxuLyoqXG4gKiBSZW5kZXJzIHRleHQgYW5kIHVwZGF0ZXMgaXQgd2hlbiBuZWVkZWRcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5UZXh0LnByb3RvdHlwZS51cGRhdGVUZXh0ID0gZnVuY3Rpb24gKClcbntcbiAgICB2YXIgc3R5bGUgPSB0aGlzLl9zdHlsZTtcbiAgICB0aGlzLmNvbnRleHQuZm9udCA9IHN0eWxlLmZvbnQ7XG5cbiAgICAvLyB3b3JkIHdyYXBcbiAgICAvLyBwcmVzZXJ2ZSBvcmlnaW5hbCB0ZXh0XG4gICAgdmFyIG91dHB1dFRleHQgPSBzdHlsZS53b3JkV3JhcCA/IHRoaXMud29yZFdyYXAodGhpcy5fdGV4dCkgOiB0aGlzLl90ZXh0O1xuXG4gICAgLy8gc3BsaXQgdGV4dCBpbnRvIGxpbmVzXG4gICAgdmFyIGxpbmVzID0gb3V0cHV0VGV4dC5zcGxpdCgvKD86XFxyXFxufFxccnxcXG4pLyk7XG5cbiAgICAvLyBjYWxjdWxhdGUgdGV4dCB3aWR0aFxuICAgIHZhciBsaW5lV2lkdGhzID0gbmV3IEFycmF5KGxpbmVzLmxlbmd0aCk7XG4gICAgdmFyIG1heExpbmVXaWR0aCA9IDA7XG4gICAgdmFyIGZvbnRQcm9wZXJ0aWVzID0gdGhpcy5kZXRlcm1pbmVGb250UHJvcGVydGllcyhzdHlsZS5mb250KTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxpbmVzLmxlbmd0aDsgaSsrKVxuICAgIHtcbiAgICAgICAgdmFyIGxpbmVXaWR0aCA9IHRoaXMuY29udGV4dC5tZWFzdXJlVGV4dChsaW5lc1tpXSkud2lkdGg7XG4gICAgICAgIGxpbmVXaWR0aHNbaV0gPSBsaW5lV2lkdGg7XG4gICAgICAgIG1heExpbmVXaWR0aCA9IE1hdGgubWF4KG1heExpbmVXaWR0aCwgbGluZVdpZHRoKTtcbiAgICB9XG5cbiAgICB2YXIgd2lkdGggPSBtYXhMaW5lV2lkdGggKyBzdHlsZS5zdHJva2VUaGlja25lc3M7XG4gICAgaWYgKHN0eWxlLmRyb3BTaGFkb3cpXG4gICAge1xuICAgICAgICB3aWR0aCArPSBzdHlsZS5kcm9wU2hhZG93RGlzdGFuY2U7XG4gICAgfVxuXG4gICAgdGhpcy5jYW52YXMud2lkdGggPSAoIHdpZHRoICsgdGhpcy5jb250ZXh0LmxpbmVXaWR0aCApICogdGhpcy5yZXNvbHV0aW9uO1xuXG4gICAgLy8gY2FsY3VsYXRlIHRleHQgaGVpZ2h0XG4gICAgdmFyIGxpbmVIZWlnaHQgPSB0aGlzLnN0eWxlLmxpbmVIZWlnaHQgfHwgZm9udFByb3BlcnRpZXMuZm9udFNpemUgKyBzdHlsZS5zdHJva2VUaGlja25lc3M7XG5cbiAgICB2YXIgaGVpZ2h0ID0gbGluZUhlaWdodCAqIGxpbmVzLmxlbmd0aDtcbiAgICBpZiAoc3R5bGUuZHJvcFNoYWRvdylcbiAgICB7XG4gICAgICAgIGhlaWdodCArPSBzdHlsZS5kcm9wU2hhZG93RGlzdGFuY2U7XG4gICAgfVxuXG4gICAgdGhpcy5jYW52YXMuaGVpZ2h0ID0gKCBoZWlnaHQgKyB0aGlzLl9zdHlsZS5wYWRkaW5nICogMiApICogdGhpcy5yZXNvbHV0aW9uO1xuXG4gICAgdGhpcy5jb250ZXh0LnNjYWxlKCB0aGlzLnJlc29sdXRpb24sIHRoaXMucmVzb2x1dGlvbik7XG5cbiAgICBpZiAobmF2aWdhdG9yLmlzQ29jb29uSlMpXG4gICAge1xuICAgICAgICB0aGlzLmNvbnRleHQuY2xlYXJSZWN0KDAsIDAsIHRoaXMuY2FudmFzLndpZHRoLCB0aGlzLmNhbnZhcy5oZWlnaHQpO1xuXG4gICAgfVxuXG4gICAgLy90aGlzLmNvbnRleHQuZmlsbFN0eWxlPVwiI0ZGMDAwMFwiO1xuICAgIC8vdGhpcy5jb250ZXh0LmZpbGxSZWN0KDAsIDAsIHRoaXMuY2FudmFzLndpZHRoLCB0aGlzLmNhbnZhcy5oZWlnaHQpO1xuXG4gICAgdGhpcy5jb250ZXh0LmZvbnQgPSBzdHlsZS5mb250O1xuICAgIHRoaXMuY29udGV4dC5zdHJva2VTdHlsZSA9IHN0eWxlLnN0cm9rZTtcbiAgICB0aGlzLmNvbnRleHQubGluZVdpZHRoID0gc3R5bGUuc3Ryb2tlVGhpY2tuZXNzO1xuICAgIHRoaXMuY29udGV4dC50ZXh0QmFzZWxpbmUgPSBzdHlsZS50ZXh0QmFzZWxpbmU7XG4gICAgdGhpcy5jb250ZXh0LmxpbmVKb2luID0gc3R5bGUubGluZUpvaW47XG4gICAgdGhpcy5jb250ZXh0Lm1pdGVyTGltaXQgPSBzdHlsZS5taXRlckxpbWl0O1xuXG4gICAgdmFyIGxpbmVQb3NpdGlvblg7XG4gICAgdmFyIGxpbmVQb3NpdGlvblk7XG5cbiAgICBpZiAoc3R5bGUuZHJvcFNoYWRvdylcbiAgICB7XG4gICAgICAgIGlmIChzdHlsZS5kcm9wU2hhZG93Qmx1ciA+IDApIHtcbiAgICAgICAgICAgIHRoaXMuY29udGV4dC5zaGFkb3dDb2xvciA9IHN0eWxlLmRyb3BTaGFkb3dDb2xvcjtcbiAgICAgICAgICAgIHRoaXMuY29udGV4dC5zaGFkb3dCbHVyID0gc3R5bGUuZHJvcFNoYWRvd0JsdXI7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmNvbnRleHQuZmlsbFN0eWxlID0gc3R5bGUuZHJvcFNoYWRvd0NvbG9yO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIHhTaGFkb3dPZmZzZXQgPSBNYXRoLmNvcyhzdHlsZS5kcm9wU2hhZG93QW5nbGUpICogc3R5bGUuZHJvcFNoYWRvd0Rpc3RhbmNlO1xuICAgICAgICB2YXIgeVNoYWRvd09mZnNldCA9IE1hdGguc2luKHN0eWxlLmRyb3BTaGFkb3dBbmdsZSkgKiBzdHlsZS5kcm9wU2hhZG93RGlzdGFuY2U7XG5cbiAgICAgICAgZm9yIChpID0gMDsgaSA8IGxpbmVzLmxlbmd0aDsgaSsrKVxuICAgICAgICB7XG4gICAgICAgICAgICBsaW5lUG9zaXRpb25YID0gc3R5bGUuc3Ryb2tlVGhpY2tuZXNzIC8gMjtcbiAgICAgICAgICAgIGxpbmVQb3NpdGlvblkgPSAoc3R5bGUuc3Ryb2tlVGhpY2tuZXNzIC8gMiArIGkgKiBsaW5lSGVpZ2h0KSArIGZvbnRQcm9wZXJ0aWVzLmFzY2VudDtcblxuICAgICAgICAgICAgaWYgKHN0eWxlLmFsaWduID09PSAncmlnaHQnKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGxpbmVQb3NpdGlvblggKz0gbWF4TGluZVdpZHRoIC0gbGluZVdpZHRoc1tpXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKHN0eWxlLmFsaWduID09PSAnY2VudGVyJylcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBsaW5lUG9zaXRpb25YICs9IChtYXhMaW5lV2lkdGggLSBsaW5lV2lkdGhzW2ldKSAvIDI7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChzdHlsZS5maWxsKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHRoaXMuY29udGV4dC5maWxsVGV4dChsaW5lc1tpXSwgbGluZVBvc2l0aW9uWCArIHhTaGFkb3dPZmZzZXQsIGxpbmVQb3NpdGlvblkgKyB5U2hhZG93T2Zmc2V0ICsgdGhpcy5fc3R5bGUucGFkZGluZyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvL3NldCBjYW52YXMgdGV4dCBzdHlsZXNcbiAgICB0aGlzLmNvbnRleHQuZmlsbFN0eWxlID0gc3R5bGUuZmlsbDtcblxuICAgIC8vZHJhdyBsaW5lcyBsaW5lIGJ5IGxpbmVcbiAgICBmb3IgKGkgPSAwOyBpIDwgbGluZXMubGVuZ3RoOyBpKyspXG4gICAge1xuICAgICAgICBsaW5lUG9zaXRpb25YID0gc3R5bGUuc3Ryb2tlVGhpY2tuZXNzIC8gMjtcbiAgICAgICAgbGluZVBvc2l0aW9uWSA9IChzdHlsZS5zdHJva2VUaGlja25lc3MgLyAyICsgaSAqIGxpbmVIZWlnaHQpICsgZm9udFByb3BlcnRpZXMuYXNjZW50O1xuXG4gICAgICAgIGlmIChzdHlsZS5hbGlnbiA9PT0gJ3JpZ2h0JylcbiAgICAgICAge1xuICAgICAgICAgICAgbGluZVBvc2l0aW9uWCArPSBtYXhMaW5lV2lkdGggLSBsaW5lV2lkdGhzW2ldO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHN0eWxlLmFsaWduID09PSAnY2VudGVyJylcbiAgICAgICAge1xuICAgICAgICAgICAgbGluZVBvc2l0aW9uWCArPSAobWF4TGluZVdpZHRoIC0gbGluZVdpZHRoc1tpXSkgLyAyO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHN0eWxlLnN0cm9rZSAmJiBzdHlsZS5zdHJva2VUaGlja25lc3MpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuY29udGV4dC5zdHJva2VUZXh0KGxpbmVzW2ldLCBsaW5lUG9zaXRpb25YLCBsaW5lUG9zaXRpb25ZICsgdGhpcy5fc3R5bGUucGFkZGluZyk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoc3R5bGUuZmlsbClcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5jb250ZXh0LmZpbGxUZXh0KGxpbmVzW2ldLCBsaW5lUG9zaXRpb25YLCBsaW5lUG9zaXRpb25ZICsgdGhpcy5fc3R5bGUucGFkZGluZyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLnVwZGF0ZVRleHR1cmUoKTtcbn07XG5cbi8qKlxuICogVXBkYXRlcyB0ZXh0dXJlIHNpemUgYmFzZWQgb24gY2FudmFzIHNpemVcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5UZXh0LnByb3RvdHlwZS51cGRhdGVUZXh0dXJlID0gZnVuY3Rpb24gKClcbntcbiAgICB2YXIgdGV4dHVyZSA9IHRoaXMuX3RleHR1cmU7XG5cbiAgICB0ZXh0dXJlLmJhc2VUZXh0dXJlLmhhc0xvYWRlZCA9IHRydWU7XG4gICAgdGV4dHVyZS5iYXNlVGV4dHVyZS5yZXNvbHV0aW9uID0gdGhpcy5yZXNvbHV0aW9uO1xuXG4gICAgdGV4dHVyZS5iYXNlVGV4dHVyZS53aWR0aCA9IHRoaXMuY2FudmFzLndpZHRoIC8gdGhpcy5yZXNvbHV0aW9uO1xuICAgIHRleHR1cmUuYmFzZVRleHR1cmUuaGVpZ2h0ID0gdGhpcy5jYW52YXMuaGVpZ2h0IC8gdGhpcy5yZXNvbHV0aW9uO1xuICAgIHRleHR1cmUuY3JvcC53aWR0aCA9IHRleHR1cmUuX2ZyYW1lLndpZHRoID0gdGhpcy5jYW52YXMud2lkdGggLyB0aGlzLnJlc29sdXRpb247XG4gICAgdGV4dHVyZS5jcm9wLmhlaWdodCA9IHRleHR1cmUuX2ZyYW1lLmhlaWdodCA9IHRoaXMuY2FudmFzLmhlaWdodCAvIHRoaXMucmVzb2x1dGlvbjtcblxuICAgIHRleHR1cmUudHJpbS54ID0gMDtcbiAgICB0ZXh0dXJlLnRyaW0ueSA9IC10aGlzLl9zdHlsZS5wYWRkaW5nO1xuXG4gICAgdGV4dHVyZS50cmltLndpZHRoID0gdGV4dHVyZS5fZnJhbWUud2lkdGg7XG4gICAgdGV4dHVyZS50cmltLmhlaWdodCA9IHRleHR1cmUuX2ZyYW1lLmhlaWdodCAtIHRoaXMuX3N0eWxlLnBhZGRpbmcqMjtcblxuICAgIHRoaXMuX3dpZHRoID0gdGhpcy5jYW52YXMud2lkdGggLyB0aGlzLnJlc29sdXRpb247XG4gICAgdGhpcy5faGVpZ2h0ID0gdGhpcy5jYW52YXMuaGVpZ2h0IC8gdGhpcy5yZXNvbHV0aW9uO1xuXG4gICAgdGV4dHVyZS5iYXNlVGV4dHVyZS5lbWl0KCd1cGRhdGUnLCAgdGV4dHVyZS5iYXNlVGV4dHVyZSk7XG5cbiAgICB0aGlzLmRpcnR5ID0gZmFsc2U7XG59O1xuXG4vKipcbiAqIFJlbmRlcnMgdGhlIG9iamVjdCB1c2luZyB0aGUgV2ViR0wgcmVuZGVyZXJcbiAqXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcn1cbiAqL1xuVGV4dC5wcm90b3R5cGUucmVuZGVyV2ViR0wgPSBmdW5jdGlvbiAocmVuZGVyZXIpXG57XG4gICAgaWYgKHRoaXMuZGlydHkpXG4gICAge1xuICAgICAgICAvL3RoaXMucmVzb2x1dGlvbiA9IDEvL3JlbmRlcmVyLnJlc29sdXRpb247XG5cbiAgICAgICAgdGhpcy51cGRhdGVUZXh0KCk7XG4gICAgfVxuXG4gICAgU3ByaXRlLnByb3RvdHlwZS5yZW5kZXJXZWJHTC5jYWxsKHRoaXMsIHJlbmRlcmVyKTtcbn07XG5cbi8qKlxuICogUmVuZGVycyB0aGUgb2JqZWN0IHVzaW5nIHRoZSBDYW52YXMgcmVuZGVyZXJcbiAqXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuQ2FudmFzUmVuZGVyZXJ9XG4gKiBAcHJpdmF0ZVxuICovXG5UZXh0LnByb3RvdHlwZS5fcmVuZGVyQ2FudmFzID0gZnVuY3Rpb24gKHJlbmRlcmVyKVxue1xuICAgIGlmICh0aGlzLmRpcnR5KVxuICAgIHtcbiAgICAgLy8gICB0aGlzLnJlc29sdXRpb24gPSAxLy9yZW5kZXJlci5yZXNvbHV0aW9uO1xuXG4gICAgICAgIHRoaXMudXBkYXRlVGV4dCgpO1xuICAgIH1cblxuICAgIFNwcml0ZS5wcm90b3R5cGUuX3JlbmRlckNhbnZhcy5jYWxsKHRoaXMsIHJlbmRlcmVyKTtcbn07XG5cbi8qKlxuICogQ2FsY3VsYXRlcyB0aGUgYXNjZW50LCBkZXNjZW50IGFuZCBmb250U2l6ZSBvZiBhIGdpdmVuIGZvbnRTdHlsZVxuICpcbiAqIEBwYXJhbSBmb250U3R5bGUge29iamVjdH1cbiAqIEBwcml2YXRlXG4gKi9cblRleHQucHJvdG90eXBlLmRldGVybWluZUZvbnRQcm9wZXJ0aWVzID0gZnVuY3Rpb24gKGZvbnRTdHlsZSlcbntcbiAgICB2YXIgcHJvcGVydGllcyA9IFRleHQuZm9udFByb3BlcnRpZXNDYWNoZVtmb250U3R5bGVdO1xuXG4gICAgaWYgKCFwcm9wZXJ0aWVzKVxuICAgIHtcbiAgICAgICAgcHJvcGVydGllcyA9IHt9O1xuXG4gICAgICAgIHZhciBjYW52YXMgPSBUZXh0LmZvbnRQcm9wZXJ0aWVzQ2FudmFzO1xuICAgICAgICB2YXIgY29udGV4dCA9IFRleHQuZm9udFByb3BlcnRpZXNDb250ZXh0O1xuXG4gICAgICAgIGNvbnRleHQuZm9udCA9IGZvbnRTdHlsZTtcblxuICAgICAgICB2YXIgd2lkdGggPSBNYXRoLmNlaWwoY29udGV4dC5tZWFzdXJlVGV4dCgnfE3DiXEnKS53aWR0aCk7XG4gICAgICAgIHZhciBiYXNlbGluZSA9IE1hdGguY2VpbChjb250ZXh0Lm1lYXN1cmVUZXh0KCdNJykud2lkdGgpO1xuICAgICAgICB2YXIgaGVpZ2h0ID0gMiAqIGJhc2VsaW5lO1xuXG4gICAgICAgIGJhc2VsaW5lID0gYmFzZWxpbmUgKiAxLjQgfCAwO1xuXG4gICAgICAgIGNhbnZhcy53aWR0aCA9IHdpZHRoO1xuICAgICAgICBjYW52YXMuaGVpZ2h0ID0gaGVpZ2h0O1xuXG4gICAgICAgIGNvbnRleHQuZmlsbFN0eWxlID0gJyNmMDAnO1xuICAgICAgICBjb250ZXh0LmZpbGxSZWN0KDAsIDAsIHdpZHRoLCBoZWlnaHQpO1xuXG4gICAgICAgIGNvbnRleHQuZm9udCA9IGZvbnRTdHlsZTtcblxuICAgICAgICBjb250ZXh0LnRleHRCYXNlbGluZSA9ICdhbHBoYWJldGljJztcbiAgICAgICAgY29udGV4dC5maWxsU3R5bGUgPSAnIzAwMCc7XG4gICAgICAgIGNvbnRleHQuZmlsbFRleHQoJ3xNw4lxJywgMCwgYmFzZWxpbmUpO1xuXG4gICAgICAgIHZhciBpbWFnZWRhdGEgPSBjb250ZXh0LmdldEltYWdlRGF0YSgwLCAwLCB3aWR0aCwgaGVpZ2h0KS5kYXRhO1xuICAgICAgICB2YXIgcGl4ZWxzID0gaW1hZ2VkYXRhLmxlbmd0aDtcbiAgICAgICAgdmFyIGxpbmUgPSB3aWR0aCAqIDQ7XG5cbiAgICAgICAgdmFyIGksIGo7XG5cbiAgICAgICAgdmFyIGlkeCA9IDA7XG4gICAgICAgIHZhciBzdG9wID0gZmFsc2U7XG5cbiAgICAgICAgLy8gYXNjZW50LiBzY2FuIGZyb20gdG9wIHRvIGJvdHRvbSB1bnRpbCB3ZSBmaW5kIGEgbm9uIHJlZCBwaXhlbFxuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgYmFzZWxpbmU7IGkrKylcbiAgICAgICAge1xuICAgICAgICAgICAgZm9yIChqID0gMDsgaiA8IGxpbmU7IGogKz0gNClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBpZiAoaW1hZ2VkYXRhW2lkeCArIGpdICE9PSAyNTUpXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBzdG9wID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCFzdG9wKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGlkeCArPSBsaW5lO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcHJvcGVydGllcy5hc2NlbnQgPSBiYXNlbGluZSAtIGk7XG5cbiAgICAgICAgaWR4ID0gcGl4ZWxzIC0gbGluZTtcbiAgICAgICAgc3RvcCA9IGZhbHNlO1xuXG4gICAgICAgIC8vIGRlc2NlbnQuIHNjYW4gZnJvbSBib3R0b20gdG8gdG9wIHVudGlsIHdlIGZpbmQgYSBub24gcmVkIHBpeGVsXG4gICAgICAgIGZvciAoaSA9IGhlaWdodDsgaSA+IGJhc2VsaW5lOyBpLS0pXG4gICAgICAgIHtcbiAgICAgICAgICAgIGZvciAoaiA9IDA7IGogPCBsaW5lOyBqICs9IDQpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgaWYgKGltYWdlZGF0YVtpZHggKyBqXSAhPT0gMjU1KVxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgc3RvcCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghc3RvcClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBpZHggLT0gbGluZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHByb3BlcnRpZXMuZGVzY2VudCA9IGkgLSBiYXNlbGluZTtcbiAgICAgICAgcHJvcGVydGllcy5mb250U2l6ZSA9IHByb3BlcnRpZXMuYXNjZW50ICsgcHJvcGVydGllcy5kZXNjZW50O1xuXG4gICAgICAgIFRleHQuZm9udFByb3BlcnRpZXNDYWNoZVtmb250U3R5bGVdID0gcHJvcGVydGllcztcbiAgICB9XG5cbiAgICByZXR1cm4gcHJvcGVydGllcztcbn07XG5cbi8qKlxuICogQXBwbGllcyBuZXdsaW5lcyB0byBhIHN0cmluZyB0byBoYXZlIGl0IG9wdGltYWxseSBmaXQgaW50byB0aGUgaG9yaXpvbnRhbFxuICogYm91bmRzIHNldCBieSB0aGUgVGV4dCBvYmplY3QncyB3b3JkV3JhcFdpZHRoIHByb3BlcnR5LlxuICpcbiAqIEBwYXJhbSB0ZXh0IHtzdHJpbmd9XG4gKiBAcHJpdmF0ZVxuICovXG5UZXh0LnByb3RvdHlwZS53b3JkV3JhcCA9IGZ1bmN0aW9uICh0ZXh0KVxue1xuICAgIC8vIEdyZWVkeSB3cmFwcGluZyBhbGdvcml0aG0gdGhhdCB3aWxsIHdyYXAgd29yZHMgYXMgdGhlIGxpbmUgZ3Jvd3MgbG9uZ2VyXG4gICAgLy8gdGhhbiBpdHMgaG9yaXpvbnRhbCBib3VuZHMuXG4gICAgdmFyIHJlc3VsdCA9ICcnO1xuICAgIHZhciBsaW5lcyA9IHRleHQuc3BsaXQoJ1xcbicpO1xuICAgIHZhciB3b3JkV3JhcFdpZHRoID0gdGhpcy5fc3R5bGUud29yZFdyYXBXaWR0aDtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxpbmVzLmxlbmd0aDsgaSsrKVxuICAgIHtcbiAgICAgICAgdmFyIHNwYWNlTGVmdCA9IHdvcmRXcmFwV2lkdGg7XG4gICAgICAgIHZhciB3b3JkcyA9IGxpbmVzW2ldLnNwbGl0KCcgJyk7XG4gICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgd29yZHMubGVuZ3RoOyBqKyspXG4gICAgICAgIHtcbiAgICAgICAgICAgIHZhciB3b3JkV2lkdGggPSB0aGlzLmNvbnRleHQubWVhc3VyZVRleHQod29yZHNbal0pLndpZHRoO1xuICAgICAgICAgICAgdmFyIHdvcmRXaWR0aFdpdGhTcGFjZSA9IHdvcmRXaWR0aCArIHRoaXMuY29udGV4dC5tZWFzdXJlVGV4dCgnICcpLndpZHRoO1xuICAgICAgICAgICAgaWYgKGogPT09IDAgfHwgd29yZFdpZHRoV2l0aFNwYWNlID4gc3BhY2VMZWZ0KVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIC8vIFNraXAgcHJpbnRpbmcgdGhlIG5ld2xpbmUgaWYgaXQncyB0aGUgZmlyc3Qgd29yZCBvZiB0aGUgbGluZSB0aGF0IGlzXG4gICAgICAgICAgICAgICAgLy8gZ3JlYXRlciB0aGFuIHRoZSB3b3JkIHdyYXAgd2lkdGguXG4gICAgICAgICAgICAgICAgaWYgKGogPiAwKVxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0ICs9ICdcXG4nO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXN1bHQgKz0gd29yZHNbal07XG4gICAgICAgICAgICAgICAgc3BhY2VMZWZ0ID0gd29yZFdyYXBXaWR0aCAtIHdvcmRXaWR0aDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBzcGFjZUxlZnQgLT0gd29yZFdpZHRoV2l0aFNwYWNlO1xuICAgICAgICAgICAgICAgIHJlc3VsdCArPSAnICcgKyB3b3Jkc1tqXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChpIDwgbGluZXMubGVuZ3RoLTEpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJlc3VsdCArPSAnXFxuJztcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xufTtcblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBib3VuZHMgb2YgdGhlIFRleHQgYXMgYSByZWN0YW5nbGUuIFRoZSBib3VuZHMgY2FsY3VsYXRpb24gdGFrZXMgdGhlIHdvcmxkVHJhbnNmb3JtIGludG8gYWNjb3VudC5cbiAqXG4gKiBAcGFyYW0gbWF0cml4IHtQSVhJLk1hdHJpeH0gdGhlIHRyYW5zZm9ybWF0aW9uIG1hdHJpeCBvZiB0aGUgVGV4dFxuICogQHJldHVybiB7UElYSS5SZWN0YW5nbGV9IHRoZSBmcmFtaW5nIHJlY3RhbmdsZVxuICovXG5UZXh0LnByb3RvdHlwZS5nZXRCb3VuZHMgPSBmdW5jdGlvbiAobWF0cml4KVxue1xuICAgIGlmICh0aGlzLmRpcnR5KVxuICAgIHtcbiAgICAgICAgdGhpcy51cGRhdGVUZXh0KCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIFNwcml0ZS5wcm90b3R5cGUuZ2V0Qm91bmRzLmNhbGwodGhpcywgbWF0cml4KTtcbn07XG5cbi8qKlxuICogRGVzdHJveXMgdGhpcyB0ZXh0IG9iamVjdC5cbiAqXG4gKiBAcGFyYW0gW2Rlc3Ryb3lCYXNlVGV4dHVyZT10cnVlXSB7Ym9vbGVhbn0gd2hldGhlciB0byBkZXN0cm95IHRoZSBiYXNlIHRleHR1cmUgYXMgd2VsbFxuICovXG5UZXh0LnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKGRlc3Ryb3lCYXNlVGV4dHVyZSlcbntcbiAgICAvLyBtYWtlIHN1cmUgdG8gcmVzZXQgdGhlIHRoZSBjb250ZXh0IGFuZCBjYW52YXMuLiBkb250IHdhbnQgdGhpcyBoYW5naW5nIGFyb3VuZCBpbiBtZW1vcnkhXG4gICAgdGhpcy5jb250ZXh0ID0gbnVsbDtcbiAgICB0aGlzLmNhbnZhcyA9IG51bGw7XG5cbiAgICB0aGlzLl9zdHlsZSA9IG51bGw7XG5cbiAgICB0aGlzLl90ZXh0dXJlLmRlc3Ryb3koZGVzdHJveUJhc2VUZXh0dXJlID09PSB1bmRlZmluZWQgPyB0cnVlIDogZGVzdHJveUJhc2VUZXh0dXJlKTtcbn07XG4iLCJ2YXIgdXRpbHMgPSByZXF1aXJlKCcuLi91dGlscycpLFxuICAgIENPTlNUID0gcmVxdWlyZSgnLi4vY29uc3QnKSxcbiAgICBFdmVudEVtaXR0ZXIgPSByZXF1aXJlKCdldmVudGVtaXR0ZXIzJyk7XG5cbi8qKlxuICogQSB0ZXh0dXJlIHN0b3JlcyB0aGUgaW5mb3JtYXRpb24gdGhhdCByZXByZXNlbnRzIGFuIGltYWdlLiBBbGwgdGV4dHVyZXMgaGF2ZSBhIGJhc2UgdGV4dHVyZS5cbiAqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gc291cmNlIHtJbWFnZXxDYW52YXN9IHRoZSBzb3VyY2Ugb2JqZWN0IG9mIHRoZSB0ZXh0dXJlLlxuICogQHBhcmFtIFtzY2FsZU1vZGU9UElYSS5TQ0FMRV9NT0RFUy5ERUZBVUxUXSB7bnVtYmVyfSBTZWUge0BsaW5rIFBJWEkuU0NBTEVfTU9ERVN9IGZvciBwb3NzaWJsZSB2YWx1ZXNcbiAqIEBwYXJhbSByZXNvbHV0aW9uIHtudW1iZXJ9IHRoZSByZXNvbHV0aW9uIG9mIHRoZSB0ZXh0dXJlIGZvciBkZXZpY2VzIHdpdGggZGlmZmVyZW50IHBpeGVsIHJhdGlvc1xuICovXG5mdW5jdGlvbiBCYXNlVGV4dHVyZShzb3VyY2UsIHNjYWxlTW9kZSwgcmVzb2x1dGlvbilcbntcbiAgICBFdmVudEVtaXR0ZXIuY2FsbCh0aGlzKTtcblxuICAgIHRoaXMudWlkID0gdXRpbHMudWlkKCk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgUmVzb2x1dGlvbiBvZiB0aGUgdGV4dHVyZS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLnJlc29sdXRpb24gPSByZXNvbHV0aW9uIHx8IDE7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgd2lkdGggb2YgdGhlIGJhc2UgdGV4dHVyZSBzZXQgd2hlbiB0aGUgaW1hZ2UgaGFzIGxvYWRlZFxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEByZWFkT25seVxuICAgICAqL1xuICAgIHRoaXMud2lkdGggPSAxMDA7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgaGVpZ2h0IG9mIHRoZSBiYXNlIHRleHR1cmUgc2V0IHdoZW4gdGhlIGltYWdlIGhhcyBsb2FkZWRcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAcmVhZE9ubHlcbiAgICAgKi9cbiAgICB0aGlzLmhlaWdodCA9IDEwMDtcblxuICAgIC8vIFRPRE8gZG9jc1xuICAgIC8vIHVzZWQgdG8gc3RvcmUgdGhlIGFjdHVhbCBkaW1lbnNpb25zIG9mIHRoZSBzb3VyY2VcbiAgICAvKipcbiAgICAgKiBVc2VkIHRvIHN0b3JlIHRoZSBhY3R1YWwgd2lkdGggb2YgdGhlIHNvdXJjZSBvZiB0aGlzIHRleHR1cmVcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAcmVhZE9ubHlcbiAgICAgKi9cbiAgICB0aGlzLnJlYWxXaWR0aCA9IDEwMDtcbiAgICAvKipcbiAgICAgKiBVc2VkIHRvIHN0b3JlIHRoZSBhY3R1YWwgaGVpZ2h0IG9mIHRoZSBzb3VyY2Ugb2YgdGhpcyB0ZXh0dXJlXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQHJlYWRPbmx5XG4gICAgICovXG4gICAgdGhpcy5yZWFsSGVpZ2h0ID0gMTAwO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHNjYWxlIG1vZGUgdG8gYXBwbHkgd2hlbiBzY2FsaW5nIHRoaXMgdGV4dHVyZVxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IFBJWEkuU0NBTEVfTU9ERVMuTElORUFSXG4gICAgICogQHNlZSBQSVhJLlNDQUxFX01PREVTXG4gICAgICovXG4gICAgdGhpcy5zY2FsZU1vZGUgPSBzY2FsZU1vZGUgfHwgQ09OU1QuU0NBTEVfTU9ERVMuREVGQVVMVDtcblxuICAgIC8qKlxuICAgICAqIFNldCB0byB0cnVlIG9uY2UgdGhlIGJhc2UgdGV4dHVyZSBoYXMgc3VjY2Vzc2Z1bGx5IGxvYWRlZC5cbiAgICAgKlxuICAgICAqIFRoaXMgaXMgbmV2ZXIgdHJ1ZSBpZiB0aGUgdW5kZXJseWluZyBzb3VyY2UgZmFpbHMgdG8gbG9hZCBvciBoYXMgbm8gdGV4dHVyZSBkYXRhLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKiBAcmVhZE9ubHlcbiAgICAgKi9cbiAgICB0aGlzLmhhc0xvYWRlZCA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogU2V0IHRvIHRydWUgaWYgdGhlIHNvdXJjZSBpcyBjdXJyZW50bHkgbG9hZGluZy5cbiAgICAgKlxuICAgICAqIElmIGFuIEltYWdlIHNvdXJjZSBpcyBsb2FkaW5nIHRoZSAnbG9hZGVkJyBvciAnZXJyb3InIGV2ZW50IHdpbGwgYmVcbiAgICAgKiBkaXNwYXRjaGVkIHdoZW4gdGhlIG9wZXJhdGlvbiBlbmRzLiBBbiB1bmRlcnlsaW5nIHNvdXJjZSB0aGF0IGlzXG4gICAgICogaW1tZWRpYXRlbHktYXZhaWxhYmxlIGJ5cGFzc2VzIGxvYWRpbmcgZW50aXJlbHkuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqIEByZWFkb25seVxuICAgICAqL1xuICAgIHRoaXMuaXNMb2FkaW5nID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgaW1hZ2Ugc291cmNlIHRoYXQgaXMgdXNlZCB0byBjcmVhdGUgdGhlIHRleHR1cmUuXG4gICAgICpcbiAgICAgKiBUT0RPOiBNYWtlIHRoaXMgYSBzZXR0ZXIgdGhhdCBjYWxscyBsb2FkU291cmNlKCk7XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtJbWFnZXxDYW52YXN9XG4gICAgICogQHJlYWRvbmx5XG4gICAgICovXG4gICAgdGhpcy5zb3VyY2UgPSBudWxsOyAvLyBzZXQgaW4gbG9hZFNvdXJjZSwgaWYgYXQgYWxsXG5cbiAgICAvKipcbiAgICAgKiBDb250cm9scyBpZiBSR0IgY2hhbm5lbHMgc2hvdWxkIGJlIHByZS1tdWx0aXBsaWVkIGJ5IEFscGhhICAoV2ViR0wgb25seSlcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICogQGRlZmF1bHQgdHJ1ZVxuICAgICAqL1xuICAgIHRoaXMucHJlbXVsdGlwbGllZEFscGhhID0gdHJ1ZTtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge3N0cmluZ31cbiAgICAgKi9cbiAgICB0aGlzLmltYWdlVXJsID0gbnVsbDtcblxuICAgIC8qKlxuICAgICAqIFdldGhlciBvciBub3QgdGhlIHRleHR1cmUgaXMgYSBwb3dlciBvZiB0d28sIHRyeSB0byB1c2UgcG93ZXIgb2YgdHdvIHRleHR1cmVzIGFzIG11Y2ggYXMgeW91IGNhblxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLmlzUG93ZXJPZlR3byA9IGZhbHNlO1xuXG4gICAgLy8gdXNlZCBmb3Igd2ViR0xcblxuICAgIC8qKlxuICAgICAqXG4gICAgICogU2V0IHRoaXMgdG8gdHJ1ZSBpZiBhIG1pcG1hcCBvZiB0aGlzIHRleHR1cmUgbmVlZHMgdG8gYmUgZ2VuZXJhdGVkLiBUaGlzIHZhbHVlIG5lZWRzIHRvIGJlIHNldCBiZWZvcmUgdGhlIHRleHR1cmUgaXMgdXNlZFxuICAgICAqIEFsc28gdGhlIHRleHR1cmUgbXVzdCBiZSBhIHBvd2VyIG9mIHR3byBzaXplIHRvIHdvcmtcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICovXG4gICAgdGhpcy5taXBtYXAgPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIEEgbWFwIG9mIHJlbmRlcmVyIElEcyB0byB3ZWJnbCB0ZXh0dXJlc1xuICAgICAqXG4gICAgICogQG1lbWJlciB7b2JqZWN0PG51bWJlciwgV2ViR0xUZXh0dXJlPn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX2dsVGV4dHVyZXMgPSB7fTtcbiAgICB0aGlzLl9hY3RpdmUgPSBmYWxzZTtcbiAgICB0aGlzLl9pZCA9IDA7XG4gICAgXG4gICAgLy8gaWYgbm8gc291cmNlIHBhc3NlZCBkb24ndCB0cnkgdG8gbG9hZFxuICAgIGlmIChzb3VyY2UpXG4gICAge1xuICAgICAgICB0aGlzLmxvYWRTb3VyY2Uoc291cmNlKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBGaXJlZCB3aGVuIGEgbm90LWltbWVkaWF0ZWx5LWF2YWlsYWJsZSBzb3VyY2UgZmluaXNoZXMgbG9hZGluZy5cbiAgICAgKlxuICAgICAqIEBldmVudCBsb2FkZWRcbiAgICAgKiBAbWVtYmVyb2YgUElYSS5CYXNlVGV4dHVyZSNcbiAgICAgKiBAcHJvdGVjdGVkXG4gICAgICovXG5cbiAgICAvKipcbiAgICAgKiBGaXJlZCB3aGVuIGEgbm90LWltbWVkaWF0ZWx5LWF2YWlsYWJsZSBzb3VyY2UgZmFpbHMgdG8gbG9hZC5cbiAgICAgKlxuICAgICAqIEBldmVudCBlcnJvclxuICAgICAqIEBtZW1iZXJvZiBQSVhJLkJhc2VUZXh0dXJlI1xuICAgICAqIEBwcm90ZWN0ZWRcbiAgICAgKi9cbn1cblxuQmFzZVRleHR1cmUucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShFdmVudEVtaXR0ZXIucHJvdG90eXBlKTtcbkJhc2VUZXh0dXJlLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IEJhc2VUZXh0dXJlO1xubW9kdWxlLmV4cG9ydHMgPSBCYXNlVGV4dHVyZTtcblxuLyoqXG4gKiBVcGRhdGVzIHRoZSB0ZXh0dXJlIG9uIGFsbCB0aGUgd2ViZ2wgcmVuZGVyZXJzLCB0aGlzIGFsc28gYXNzdW1lcyB0aGUgc3JjIGhhcyBjaGFuZ2VkLlxuICpcbiAqIEBmaXJlcyB1cGRhdGVcbiAqL1xuQmFzZVRleHR1cmUucHJvdG90eXBlLnVwZGF0ZSA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy5yZWFsV2lkdGggPSB0aGlzLnNvdXJjZS5uYXR1cmFsV2lkdGggfHwgdGhpcy5zb3VyY2Uud2lkdGg7XG4gICAgdGhpcy5yZWFsSGVpZ2h0ID0gdGhpcy5zb3VyY2UubmF0dXJhbEhlaWdodCB8fCB0aGlzLnNvdXJjZS5oZWlnaHQ7XG5cbiAgICB0aGlzLndpZHRoID0gdGhpcy5yZWFsV2lkdGggLyB0aGlzLnJlc29sdXRpb247XG4gICAgdGhpcy5oZWlnaHQgPSB0aGlzLnJlYWxIZWlnaHQgLyB0aGlzLnJlc29sdXRpb247XG5cbiAgICB0aGlzLmlzUG93ZXJPZlR3byA9IHV0aWxzLmlzUG93ZXJPZlR3byh0aGlzLnJlYWxXaWR0aCwgdGhpcy5yZWFsSGVpZ2h0KTtcblxuICAgIHRoaXMuZW1pdCgndXBkYXRlJywgdGhpcyk7XG59O1xuXG4vKipcbiAqIExvYWQgYSBzb3VyY2UuXG4gKlxuICogSWYgdGhlIHNvdXJjZSBpcyBub3QtaW1tZWRpYXRlbHktYXZhaWxhYmxlLCBzdWNoIGFzIGFuIGltYWdlIHRoYXQgbmVlZHMgdG8gYmVcbiAqIGRvd25sb2FkZWQsIHRoZW4gdGhlICdsb2FkZWQnIG9yICdlcnJvcicgZXZlbnQgd2lsbCBiZSBkaXNwYXRjaGVkIGluIHRoZSBmdXR1cmVcbiAqIGFuZCBgaGFzTG9hZGVkYCB3aWxsIHJlbWFpbiBmYWxzZSBhZnRlciB0aGlzIGNhbGwuXG4gKlxuICogVGhlIGxvZ2ljIHN0YXRlIGFmdGVyIGNhbGxpbmcgYGxvYWRTb3VyY2VgIGRpcmVjdGx5IG9yIGluZGlyZWN0bHkgKGVnLiBgZnJvbUltYWdlYCwgYG5ldyBCYXNlVGV4dHVyZWApIGlzOlxuICpcbiAqICAgICBpZiAodGV4dHVyZS5oYXNMb2FkZWQpXG4ge1xuICogICAgICAgIC8vIHRleHR1cmUgcmVhZHkgZm9yIHVzZVxuICogICAgIH0gZWxzZSBpZiAodGV4dHVyZS5pc0xvYWRpbmcpXG4ge1xuICogICAgICAgIC8vIGxpc3RlbiB0byAnbG9hZGVkJyBhbmQvb3IgJ2Vycm9yJyBldmVudHMgb24gdGV4dHVyZVxuICogICAgIH0gZWxzZSB7XG4gKiAgICAgICAgLy8gbm90IGxvYWRpbmcsIG5vdCBnb2luZyB0byBsb2FkIFVOTEVTUyB0aGUgc291cmNlIGlzIHJlbG9hZGVkXG4gKiAgICAgICAgLy8gKGl0IG1heSBzdGlsbCBtYWtlIHNlbnNlIHRvIGxpc3RlbiB0byB0aGUgZXZlbnRzKVxuICogICAgIH1cbiAqXG4gKiBAcHJvdGVjdGVkXG4gKiBAcGFyYW0gc291cmNlIHtJbWFnZXxDYW52YXN9IHRoZSBzb3VyY2Ugb2JqZWN0IG9mIHRoZSB0ZXh0dXJlLlxuICovXG5CYXNlVGV4dHVyZS5wcm90b3R5cGUubG9hZFNvdXJjZSA9IGZ1bmN0aW9uIChzb3VyY2UpXG57XG4gICAgdmFyIHdhc0xvYWRpbmcgPSB0aGlzLmlzTG9hZGluZztcbiAgICB0aGlzLmhhc0xvYWRlZCA9IGZhbHNlO1xuICAgIHRoaXMuaXNMb2FkaW5nID0gZmFsc2U7XG5cbiAgICBpZiAod2FzTG9hZGluZyAmJiB0aGlzLnNvdXJjZSlcbiAgICB7XG4gICAgICAgIHRoaXMuc291cmNlLm9ubG9hZCA9IG51bGw7XG4gICAgICAgIHRoaXMuc291cmNlLm9uZXJyb3IgPSBudWxsO1xuICAgIH1cblxuICAgIHRoaXMuc291cmNlID0gc291cmNlO1xuXG4gICAgLy8gQXBwbHkgc291cmNlIGlmIGxvYWRlZC4gT3RoZXJ3aXNlIHNldHVwIGFwcHJvcHJpYXRlIGxvYWRpbmcgbW9uaXRvcnMuXG4gICAgaWYgKCh0aGlzLnNvdXJjZS5jb21wbGV0ZSB8fCB0aGlzLnNvdXJjZS5nZXRDb250ZXh0KSAmJiB0aGlzLnNvdXJjZS53aWR0aCAmJiB0aGlzLnNvdXJjZS5oZWlnaHQpXG4gICAge1xuICAgICAgICB0aGlzLl9zb3VyY2VMb2FkZWQoKTtcbiAgICB9XG4gICAgZWxzZSBpZiAoIXNvdXJjZS5nZXRDb250ZXh0KVxuICAgIHtcblxuICAgICAgICAvLyBJbWFnZSBmYWlsIC8gbm90IHJlYWR5XG4gICAgICAgIHRoaXMuaXNMb2FkaW5nID0gdHJ1ZTtcblxuICAgICAgICB2YXIgc2NvcGUgPSB0aGlzO1xuXG4gICAgICAgIHNvdXJjZS5vbmxvYWQgPSBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICBzb3VyY2Uub25sb2FkID0gbnVsbDtcbiAgICAgICAgICAgIHNvdXJjZS5vbmVycm9yID0gbnVsbDtcblxuICAgICAgICAgICAgaWYgKCFzY29wZS5pc0xvYWRpbmcpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBzY29wZS5pc0xvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgICAgIHNjb3BlLl9zb3VyY2VMb2FkZWQoKTtcblxuICAgICAgICAgICAgc2NvcGUuZW1pdCgnbG9hZGVkJywgc2NvcGUpO1xuICAgICAgICB9O1xuXG4gICAgICAgIHNvdXJjZS5vbmVycm9yID0gZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgc291cmNlLm9ubG9hZCA9IG51bGw7XG4gICAgICAgICAgICBzb3VyY2Uub25lcnJvciA9IG51bGw7XG5cbiAgICAgICAgICAgIGlmICghc2NvcGUuaXNMb2FkaW5nKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgc2NvcGUuaXNMb2FkaW5nID0gZmFsc2U7XG4gICAgICAgICAgICBzY29wZS5lbWl0KCdlcnJvcicsIHNjb3BlKTtcbiAgICAgICAgfTtcblxuICAgICAgICAvLyBQZXIgaHR0cDovL3d3dy53My5vcmcvVFIvaHRtbDUvZW1iZWRkZWQtY29udGVudC0wLmh0bWwjdGhlLWltZy1lbGVtZW50XG4gICAgICAgIC8vICAgXCJUaGUgdmFsdWUgb2YgYGNvbXBsZXRlYCBjYW4gdGh1cyBjaGFuZ2Ugd2hpbGUgYSBzY3JpcHQgaXMgZXhlY3V0aW5nLlwiXG4gICAgICAgIC8vIFNvIGNvbXBsZXRlIG5lZWRzIHRvIGJlIHJlLWNoZWNrZWQgYWZ0ZXIgdGhlIGNhbGxiYWNrcyBoYXZlIGJlZW4gYWRkZWQuLlxuICAgICAgICAvLyBOT1RFOiBjb21wbGV0ZSB3aWxsIGJlIHRydWUgaWYgdGhlIGltYWdlIGhhcyBubyBzcmMgc28gYmVzdCB0byBjaGVjayBpZiB0aGUgc3JjIGlzIHNldC5cbiAgICAgICAgaWYgKHNvdXJjZS5jb21wbGV0ZSAmJiBzb3VyY2Uuc3JjKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmlzTG9hZGluZyA9IGZhbHNlO1xuXG4gICAgICAgICAgICAvLyAuLmFuZCBpZiB3ZSdyZSBjb21wbGV0ZSBub3csIG5vIG5lZWQgZm9yIGNhbGxiYWNrc1xuICAgICAgICAgICAgc291cmNlLm9ubG9hZCA9IG51bGw7XG4gICAgICAgICAgICBzb3VyY2Uub25lcnJvciA9IG51bGw7XG5cbiAgICAgICAgICAgIGlmIChzb3VyY2Uud2lkdGggJiYgc291cmNlLmhlaWdodClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9zb3VyY2VMb2FkZWQoKTtcblxuICAgICAgICAgICAgICAgIC8vIElmIGFueSBwcmV2aW91cyBzdWJzY3JpYmVycyBwb3NzaWJsZVxuICAgICAgICAgICAgICAgIGlmICh3YXNMb2FkaW5nKVxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5lbWl0KCdsb2FkZWQnLCB0aGlzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgLy8gSWYgYW55IHByZXZpb3VzIHN1YnNjcmliZXJzIHBvc3NpYmxlXG4gICAgICAgICAgICAgICAgaWYgKHdhc0xvYWRpbmcpXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmVtaXQoJ2Vycm9yJywgdGhpcyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxufTtcblxuLyoqXG4gKiBVc2VkIGludGVybmFsbHkgdG8gdXBkYXRlIHRoZSB3aWR0aCwgaGVpZ2h0LCBhbmQgc29tZSBvdGhlciB0cmFja2luZyB2YXJzIG9uY2VcbiAqIGEgc291cmNlIGhhcyBzdWNjZXNzZnVsbHkgbG9hZGVkLlxuICpcbiAqIEBwcml2YXRlXG4gKi9cbkJhc2VUZXh0dXJlLnByb3RvdHlwZS5fc291cmNlTG9hZGVkID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLmhhc0xvYWRlZCA9IHRydWU7XG4gICAgdGhpcy51cGRhdGUoKTtcbn07XG5cbi8qKlxuICogRGVzdHJveXMgdGhpcyBiYXNlIHRleHR1cmVcbiAqXG4gKi9cbkJhc2VUZXh0dXJlLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKClcbntcbiAgICBpZiAodGhpcy5pbWFnZVVybClcbiAgICB7XG4gICAgICAgIGRlbGV0ZSB1dGlscy5CYXNlVGV4dHVyZUNhY2hlW3RoaXMuaW1hZ2VVcmxdO1xuICAgICAgICBkZWxldGUgdXRpbHMuVGV4dHVyZUNhY2hlW3RoaXMuaW1hZ2VVcmxdO1xuXG4gICAgICAgIHRoaXMuaW1hZ2VVcmwgPSBudWxsO1xuXG4gICAgICAgIGlmICghbmF2aWdhdG9yLmlzQ29jb29uSlMpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuc291cmNlLnNyYyA9ICcnO1xuICAgICAgICB9XG4gICAgfVxuICAgIGVsc2UgaWYgKHRoaXMuc291cmNlICYmIHRoaXMuc291cmNlLl9waXhpSWQpXG4gICAge1xuICAgICAgICBkZWxldGUgdXRpbHMuQmFzZVRleHR1cmVDYWNoZVt0aGlzLnNvdXJjZS5fcGl4aUlkXTtcbiAgICB9XG5cbiAgICB0aGlzLnNvdXJjZSA9IG51bGw7XG5cbiAgICB0aGlzLmRpc3Bvc2UoKTtcbn07XG5cbi8qKlxuICogRnJlZXMgdGhlIHRleHR1cmUgZnJvbSBXZWJHTCBtZW1vcnkgd2l0aG91dCBkZXN0cm95aW5nIHRoaXMgdGV4dHVyZSBvYmplY3QuXG4gKiBUaGlzIG1lYW5zIHlvdSBjYW4gc3RpbGwgdXNlIHRoZSB0ZXh0dXJlIGxhdGVyIHdoaWNoIHdpbGwgdXBsb2FkIGl0IHRvIEdQVVxuICogbWVtb3J5IGFnYWluLlxuICpcbiAqL1xuQmFzZVRleHR1cmUucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKVxue1xuICAgIHRoaXMuZW1pdCgnZGlzcG9zZScsIHRoaXMpO1xuXG4gICAgLy8gdGhpcyBzaG91bGQgbm8gbG9uZ2VyIGJlIG5lZWRlZCwgdGhlIHJlbmRlcmVycyBzaG91bGQgY2xlYW51cCBhbGwgdGhlIGdsIHRleHR1cmVzLlxuICAgIC8vIHRoaXMuX2dsVGV4dHVyZXMgPSB7fTtcbn07XG5cbi8qKlxuICogQ2hhbmdlcyB0aGUgc291cmNlIGltYWdlIG9mIHRoZSB0ZXh0dXJlLlxuICogVGhlIG9yaWdpbmFsIHNvdXJjZSBtdXN0IGJlIGFuIEltYWdlIGVsZW1lbnQuXG4gKlxuICogQHBhcmFtIG5ld1NyYyB7c3RyaW5nfSB0aGUgcGF0aCBvZiB0aGUgaW1hZ2VcbiAqL1xuQmFzZVRleHR1cmUucHJvdG90eXBlLnVwZGF0ZVNvdXJjZUltYWdlID0gZnVuY3Rpb24gKG5ld1NyYylcbntcbiAgICB0aGlzLnNvdXJjZS5zcmMgPSBuZXdTcmM7XG5cbiAgICB0aGlzLmxvYWRTb3VyY2UodGhpcy5zb3VyY2UpO1xufTtcblxuLyoqXG4gKiBIZWxwZXIgZnVuY3Rpb24gdGhhdCBjcmVhdGVzIGEgYmFzZSB0ZXh0dXJlIGZyb20gdGhlIGdpdmVuIGltYWdlIHVybC5cbiAqIElmIHRoZSBpbWFnZSBpcyBub3QgaW4gdGhlIGJhc2UgdGV4dHVyZSBjYWNoZSBpdCB3aWxsIGJlIGNyZWF0ZWQgYW5kIGxvYWRlZC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAcGFyYW0gaW1hZ2VVcmwge3N0cmluZ30gVGhlIGltYWdlIHVybCBvZiB0aGUgdGV4dHVyZVxuICogQHBhcmFtIFtjcm9zc29yaWdpbj0oYXV0byldIHtib29sZWFufSBTaG91bGQgdXNlIGFub255bW91cyBDT1JTPyBEZWZhdWx0cyB0byB0cnVlIGlmIHRoZSBVUkwgaXMgbm90IGEgZGF0YS1VUkkuXG4gKiBAcGFyYW0gW3NjYWxlTW9kZT1QSVhJLlNDQUxFX01PREVTLkRFRkFVTFRdIHtudW1iZXJ9IFNlZSB7QGxpbmsgUElYSS5TQ0FMRV9NT0RFU30gZm9yIHBvc3NpYmxlIHZhbHVlc1xuICogQHJldHVybiBQSVhJLkJhc2VUZXh0dXJlXG4gKi9cbkJhc2VUZXh0dXJlLmZyb21JbWFnZSA9IGZ1bmN0aW9uIChpbWFnZVVybCwgY3Jvc3NvcmlnaW4sIHNjYWxlTW9kZSlcbntcbiAgICB2YXIgYmFzZVRleHR1cmUgPSB1dGlscy5CYXNlVGV4dHVyZUNhY2hlW2ltYWdlVXJsXTtcblxuICAgIGlmIChjcm9zc29yaWdpbiA9PT0gdW5kZWZpbmVkICYmIGltYWdlVXJsLmluZGV4T2YoJ2RhdGE6JykgIT09IDApXG4gICAge1xuICAgICAgICBjcm9zc29yaWdpbiA9IHRydWU7XG4gICAgfVxuXG4gICAgaWYgKCFiYXNlVGV4dHVyZSlcbiAgICB7XG4gICAgICAgIC8vIG5ldyBJbWFnZSgpIGJyZWFrcyB0ZXggbG9hZGluZyBpbiBzb21lIHZlcnNpb25zIG9mIENocm9tZS5cbiAgICAgICAgLy8gU2VlIGh0dHBzOi8vY29kZS5nb29nbGUuY29tL3AvY2hyb21pdW0vaXNzdWVzL2RldGFpbD9pZD0yMzgwNzFcbiAgICAgICAgdmFyIGltYWdlID0gbmV3IEltYWdlKCk7Ly9kb2N1bWVudC5jcmVhdGVFbGVtZW50KCdpbWcnKTtcbiAgICAgICAgaWYgKGNyb3Nzb3JpZ2luKVxuICAgICAgICB7XG4gICAgICAgICAgICBpbWFnZS5jcm9zc09yaWdpbiA9ICcnO1xuICAgICAgICB9XG5cbiAgICAgICAgYmFzZVRleHR1cmUgPSBuZXcgQmFzZVRleHR1cmUoaW1hZ2UsIHNjYWxlTW9kZSk7XG4gICAgICAgIGJhc2VUZXh0dXJlLmltYWdlVXJsID0gaW1hZ2VVcmw7XG5cbiAgICAgICAgaW1hZ2Uuc3JjID0gaW1hZ2VVcmw7XG5cbiAgICAgICAgdXRpbHMuQmFzZVRleHR1cmVDYWNoZVtpbWFnZVVybF0gPSBiYXNlVGV4dHVyZTtcblxuICAgICAgICAvLyBpZiB0aGVyZSBpcyBhbiBAMnggYXQgdGhlIGVuZCBvZiB0aGUgdXJsIHdlIGFyZSBnb2luZyB0byBhc3N1bWUgaXRzIGEgaGlnaHJlcyBpbWFnZVxuICAgICAgICBiYXNlVGV4dHVyZS5yZXNvbHV0aW9uID0gdXRpbHMuZ2V0UmVzb2x1dGlvbk9mVXJsKGltYWdlVXJsKTtcbiAgICB9XG5cbiAgICByZXR1cm4gYmFzZVRleHR1cmU7XG59O1xuXG4vKipcbiAqIEhlbHBlciBmdW5jdGlvbiB0aGF0IGNyZWF0ZXMgYSBiYXNlIHRleHR1cmUgZnJvbSB0aGUgZ2l2ZW4gY2FudmFzIGVsZW1lbnQuXG4gKlxuICogQHN0YXRpY1xuICogQHBhcmFtIGNhbnZhcyB7Q2FudmFzfSBUaGUgY2FudmFzIGVsZW1lbnQgc291cmNlIG9mIHRoZSB0ZXh0dXJlXG4gKiBAcGFyYW0gc2NhbGVNb2RlIHtudW1iZXJ9IFNlZSB7QGxpbmsgUElYSS5TQ0FMRV9NT0RFU30gZm9yIHBvc3NpYmxlIHZhbHVlc1xuICogQHJldHVybiBQSVhJLkJhc2VUZXh0dXJlXG4gKi9cbkJhc2VUZXh0dXJlLmZyb21DYW52YXMgPSBmdW5jdGlvbiAoY2FudmFzLCBzY2FsZU1vZGUpXG57XG4gICAgaWYgKCFjYW52YXMuX3BpeGlJZClcbiAgICB7XG4gICAgICAgIGNhbnZhcy5fcGl4aUlkID0gJ2NhbnZhc18nICsgdXRpbHMudWlkKCk7XG4gICAgfVxuXG4gICAgdmFyIGJhc2VUZXh0dXJlID0gdXRpbHMuQmFzZVRleHR1cmVDYWNoZVtjYW52YXMuX3BpeGlJZF07XG5cbiAgICBpZiAoIWJhc2VUZXh0dXJlKVxuICAgIHtcbiAgICAgICAgYmFzZVRleHR1cmUgPSBuZXcgQmFzZVRleHR1cmUoY2FudmFzLCBzY2FsZU1vZGUpO1xuICAgICAgICB1dGlscy5CYXNlVGV4dHVyZUNhY2hlW2NhbnZhcy5fcGl4aUlkXSA9IGJhc2VUZXh0dXJlO1xuICAgIH1cblxuICAgIHJldHVybiBiYXNlVGV4dHVyZTtcbn07XG4iLCJ2YXIgQmFzZVRleHR1cmUgPSByZXF1aXJlKCcuL0Jhc2VUZXh0dXJlJyksXG4gICAgVGV4dHVyZSA9IHJlcXVpcmUoJy4vVGV4dHVyZScpLFxuICAgIFJlbmRlclRhcmdldCA9IHJlcXVpcmUoJy4uL3JlbmRlcmVycy93ZWJnbC91dGlscy9SZW5kZXJUYXJnZXQnKSxcbiAgICBGaWx0ZXJNYW5hZ2VyID0gcmVxdWlyZSgnLi4vcmVuZGVyZXJzL3dlYmdsL21hbmFnZXJzL0ZpbHRlck1hbmFnZXInKSxcbiAgICBDYW52YXNCdWZmZXIgPSByZXF1aXJlKCcuLi9yZW5kZXJlcnMvY2FudmFzL3V0aWxzL0NhbnZhc0J1ZmZlcicpLFxuICAgIG1hdGggPSByZXF1aXJlKCcuLi9tYXRoJyksXG4gICAgQ09OU1QgPSByZXF1aXJlKCcuLi9jb25zdCcpLFxuICAgIHRlbXBNYXRyaXggPSBuZXcgbWF0aC5NYXRyaXgoKTtcblxuLyoqXG4gKiBBIFJlbmRlclRleHR1cmUgaXMgYSBzcGVjaWFsIHRleHR1cmUgdGhhdCBhbGxvd3MgYW55IFBpeGkgZGlzcGxheSBvYmplY3QgdG8gYmUgcmVuZGVyZWQgdG8gaXQuXG4gKlxuICogX19IaW50X186IEFsbCBEaXNwbGF5T2JqZWN0cyAoaS5lLiBTcHJpdGVzKSB0aGF0IHJlbmRlciB0byBhIFJlbmRlclRleHR1cmUgc2hvdWxkIGJlIHByZWxvYWRlZFxuICogb3RoZXJ3aXNlIGJsYWNrIHJlY3RhbmdsZXMgd2lsbCBiZSBkcmF3biBpbnN0ZWFkLlxuICpcbiAqIEEgUmVuZGVyVGV4dHVyZSB0YWtlcyBhIHNuYXBzaG90IG9mIGFueSBEaXNwbGF5IE9iamVjdCBnaXZlbiB0byBpdHMgcmVuZGVyIG1ldGhvZC4gVGhlIHBvc2l0aW9uXG4gKiBhbmQgcm90YXRpb24gb2YgdGhlIGdpdmVuIERpc3BsYXkgT2JqZWN0cyBpcyBpZ25vcmVkLiBGb3IgZXhhbXBsZTpcbiAqXG4gKiBgYGBqc1xuICogdmFyIHJlbmRlcmVyID0gUElYSS5hdXRvRGV0ZWN0UmVuZGVyZXIoMTAyNCwgMTAyNCwgeyB2aWV3OiBjYW52YXMsIHJhdGlvOiAxIH0pO1xuICogdmFyIHJlbmRlclRleHR1cmUgPSBuZXcgUElYSS5SZW5kZXJUZXh0dXJlKHJlbmRlcmVyLCA4MDAsIDYwMCk7XG4gKiB2YXIgc3ByaXRlID0gUElYSS5TcHJpdGUuZnJvbUltYWdlKFwic3Bpbk9ial8wMS5wbmdcIik7XG4gKlxuICogc3ByaXRlLnBvc2l0aW9uLnggPSA4MDAvMjtcbiAqIHNwcml0ZS5wb3NpdGlvbi55ID0gNjAwLzI7XG4gKiBzcHJpdGUuYW5jaG9yLnggPSAwLjU7XG4gKiBzcHJpdGUuYW5jaG9yLnkgPSAwLjU7XG4gKlxuICogcmVuZGVyVGV4dHVyZS5yZW5kZXIoc3ByaXRlKTtcbiAqIGBgYFxuICpcbiAqIFRoZSBTcHJpdGUgaW4gdGhpcyBjYXNlIHdpbGwgYmUgcmVuZGVyZWQgdG8gYSBwb3NpdGlvbiBvZiAwLDAuIFRvIHJlbmRlciB0aGlzIHNwcml0ZSBhdCBpdHMgYWN0dWFsXG4gKiBwb3NpdGlvbiBhIENvbnRhaW5lciBzaG91bGQgYmUgdXNlZDpcbiAqXG4gKiBgYGBqc1xuICogdmFyIGRvYyA9IG5ldyBQSVhJLkNvbnRhaW5lcigpO1xuICpcbiAqIGRvYy5hZGRDaGlsZChzcHJpdGUpO1xuICpcbiAqIHJlbmRlclRleHR1cmUucmVuZGVyKGRvYyk7ICAvLyBSZW5kZXJzIHRvIGNlbnRlciBvZiByZW5kZXJUZXh0dXJlXG4gKiBgYGBcbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuVGV4dHVyZVxuICogQG1lbWJlcm9mIFBJWElcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5DYW52YXNSZW5kZXJlcnxQSVhJLldlYkdMUmVuZGVyZXJ9IFRoZSByZW5kZXJlciB1c2VkIGZvciB0aGlzIFJlbmRlclRleHR1cmVcbiAqIEBwYXJhbSBbd2lkdGg9MTAwXSB7bnVtYmVyfSBUaGUgd2lkdGggb2YgdGhlIHJlbmRlciB0ZXh0dXJlXG4gKiBAcGFyYW0gW2hlaWdodD0xMDBdIHtudW1iZXJ9IFRoZSBoZWlnaHQgb2YgdGhlIHJlbmRlciB0ZXh0dXJlXG4gKiBAcGFyYW0gW3NjYWxlTW9kZV0ge251bWJlcn0gU2VlIHtAbGluayBQSVhJLlNDQUxFX01PREVTfSBmb3IgcG9zc2libGUgdmFsdWVzXG4gKiBAcGFyYW0gW3Jlc29sdXRpb249MV0ge251bWJlcn0gVGhlIHJlc29sdXRpb24gb2YgdGhlIHRleHR1cmUgYmVpbmcgZ2VuZXJhdGVkXG4gKi9cbmZ1bmN0aW9uIFJlbmRlclRleHR1cmUocmVuZGVyZXIsIHdpZHRoLCBoZWlnaHQsIHNjYWxlTW9kZSwgcmVzb2x1dGlvbilcbntcbiAgICBpZiAoIXJlbmRlcmVyKVxuICAgIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdVbmFibGUgdG8gY3JlYXRlIFJlbmRlclRleHR1cmUsIHlvdSBtdXN0IHBhc3MgYSByZW5kZXJlciBpbnRvIHRoZSBjb25zdHJ1Y3Rvci4nKTtcbiAgICB9XG5cbiAgICB3aWR0aCA9IHdpZHRoIHx8IDEwMDtcbiAgICBoZWlnaHQgPSBoZWlnaHQgfHwgMTAwO1xuICAgIHJlc29sdXRpb24gPSByZXNvbHV0aW9uIHx8IENPTlNULlJFU09MVVRJT047XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYmFzZSB0ZXh0dXJlIG9iamVjdCB0aGF0IHRoaXMgdGV4dHVyZSB1c2VzXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtCYXNlVGV4dHVyZX1cbiAgICAgKi9cbiAgICB2YXIgYmFzZVRleHR1cmUgPSBuZXcgQmFzZVRleHR1cmUoKTtcbiAgICBiYXNlVGV4dHVyZS53aWR0aCA9IHdpZHRoO1xuICAgIGJhc2VUZXh0dXJlLmhlaWdodCA9IGhlaWdodDtcbiAgICBiYXNlVGV4dHVyZS5yZXNvbHV0aW9uID0gcmVzb2x1dGlvbjtcbiAgICBiYXNlVGV4dHVyZS5zY2FsZU1vZGUgPSBzY2FsZU1vZGUgfHwgQ09OU1QuU0NBTEVfTU9ERVMuREVGQVVMVDtcbiAgICBiYXNlVGV4dHVyZS5oYXNMb2FkZWQgPSB0cnVlO1xuXG5cbiAgICBUZXh0dXJlLmNhbGwodGhpcyxcbiAgICAgICAgYmFzZVRleHR1cmUsXG4gICAgICAgIG5ldyBtYXRoLlJlY3RhbmdsZSgwLCAwLCB3aWR0aCwgaGVpZ2h0KVxuICAgICk7XG5cblxuICAgIC8qKlxuICAgICAqIFRoZSB3aXRoIG9mIHRoZSByZW5kZXIgdGV4dHVyZVxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMud2lkdGggPSB3aWR0aDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBoZWlnaHQgb2YgdGhlIHJlbmRlciB0ZXh0dXJlXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy5oZWlnaHQgPSBoZWlnaHQ7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgUmVzb2x1dGlvbiBvZiB0aGUgdGV4dHVyZS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLnJlc29sdXRpb24gPSByZXNvbHV0aW9uO1xuXG4gICAgLyoqXG4gICAgICogRHJhdy9yZW5kZXIgdGhlIGdpdmVuIERpc3BsYXlPYmplY3Qgb250byB0aGUgdGV4dHVyZS5cbiAgICAgKlxuICAgICAqIFRoZSBkaXNwbGF5T2JqZWN0IGFuZCBkZXNjZW5kZW50cyBhcmUgdHJhbnNmb3JtZWQgZHVyaW5nIHRoaXMgb3BlcmF0aW9uLlxuICAgICAqIElmIGB1cGRhdGVUcmFuc2Zvcm1gIGlzIHRydWUgdGhlbiB0aGUgdHJhbnNmb3JtYXRpb25zIHdpbGwgYmUgcmVzdG9yZWQgYmVmb3JlIHRoZVxuICAgICAqIG1ldGhvZCByZXR1cm5zLiBPdGhlcndpc2UgaXQgaXMgdXAgdG8gdGhlIGNhbGxpbmcgY29kZSB0byBjb3JyZWN0bHkgdXNlIG9yIHJlc2V0XG4gICAgICogdGhlIHRyYW5zZm9ybWVkIGRpc3BsYXkgb2JqZWN0cy5cbiAgICAgKlxuICAgICAqIFRoZSBkaXNwbGF5IG9iamVjdCBpcyBhbHdheXMgcmVuZGVyZWQgd2l0aCBhIHdvcmxkQWxwaGEgdmFsdWUgb2YgMS5cbiAgICAgKlxuICAgICAqIEBtZXRob2RcbiAgICAgKiBAcGFyYW0gZGlzcGxheU9iamVjdCB7UElYSS5EaXNwbGF5T2JqZWN0fSBUaGUgZGlzcGxheSBvYmplY3QgdG8gcmVuZGVyIHRoaXMgdGV4dHVyZSBvblxuICAgICAqIEBwYXJhbSBbbWF0cml4XSB7UElYSS5NYXRyaXh9IE9wdGlvbmFsIG1hdHJpeCB0byBhcHBseSB0byB0aGUgZGlzcGxheSBvYmplY3QgYmVmb3JlIHJlbmRlcmluZy5cbiAgICAgKiBAcGFyYW0gW2NsZWFyPWZhbHNlXSB7Ym9vbGVhbn0gSWYgdHJ1ZSB0aGUgdGV4dHVyZSB3aWxsIGJlIGNsZWFyZWQgYmVmb3JlIHRoZSBkaXNwbGF5T2JqZWN0IGlzIGRyYXduXG4gICAgICogQHBhcmFtIFt1cGRhdGVUcmFuc2Zvcm09dHJ1ZV0ge2Jvb2xlYW59IElmIHRydWUgdGhlIGRpc3BsYXlPYmplY3QncyB3b3JsZFRyYW5zZm9ybS93b3JsZEFscGhhIGFuZCBhbGwgY2hpbGRyZW5cbiAgICAgKiAgdHJhbnNmb3JtYXRpb25zIHdpbGwgYmUgcmVzdG9yZWQuIE5vdCByZXN0b3JpbmcgdGhpcyBpbmZvcm1hdGlvbiB3aWxsIGJlIGEgbGl0dGxlIGZhc3Rlci5cbiAgICAgKi9cbiAgICB0aGlzLnJlbmRlciA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgcmVuZGVyZXIgdGhpcyBSZW5kZXJUZXh0dXJlIHVzZXMuIEEgUmVuZGVyVGV4dHVyZSBjYW4gb25seSBiZWxvbmcgdG8gb25lIHJlbmRlcmVyIGF0IHRoZSBtb21lbnQgaWYgaXRzIHdlYkdMLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5DYW52YXNSZW5kZXJlcnxQSVhJLldlYkdMUmVuZGVyZXJ9XG4gICAgICovXG4gICAgdGhpcy5yZW5kZXJlciA9IHJlbmRlcmVyO1xuXG4gICAgaWYgKHRoaXMucmVuZGVyZXIudHlwZSA9PT0gQ09OU1QuUkVOREVSRVJfVFlQRS5XRUJHTClcbiAgICB7XG4gICAgICAgIHZhciBnbCA9IHRoaXMucmVuZGVyZXIuZ2w7XG5cbiAgICAgICAgdGhpcy50ZXh0dXJlQnVmZmVyID0gbmV3IFJlbmRlclRhcmdldChnbCwgdGhpcy53aWR0aCwgdGhpcy5oZWlnaHQsIGJhc2VUZXh0dXJlLnNjYWxlTW9kZSwgdGhpcy5yZXNvbHV0aW9uKTsvLywgdGhpcy5iYXNlVGV4dHVyZS5zY2FsZU1vZGUpO1xuICAgICAgICB0aGlzLmJhc2VUZXh0dXJlLl9nbFRleHR1cmVzW2dsLmlkXSA9IHRoaXMudGV4dHVyZUJ1ZmZlci50ZXh0dXJlO1xuXG4gICAgICAgIC8vVE9ETyByZWZhY3RvciBmaWx0ZXIgbWFuYWdlci4uIGFzIHJlYWxseSBpdHMgbm8gbG9uZ2VyIGEgbWFuYWdlciBpZiB3ZSB1c2UgaXQgaGVyZS4uXG4gICAgICAgIHRoaXMuZmlsdGVyTWFuYWdlciA9IG5ldyBGaWx0ZXJNYW5hZ2VyKHRoaXMucmVuZGVyZXIpO1xuICAgICAgICB0aGlzLmZpbHRlck1hbmFnZXIub25Db250ZXh0Q2hhbmdlKCk7XG4gICAgICAgIHRoaXMuZmlsdGVyTWFuYWdlci5yZXNpemUod2lkdGgsIGhlaWdodCk7XG4gICAgICAgIHRoaXMucmVuZGVyID0gdGhpcy5yZW5kZXJXZWJHTDtcblxuICAgICAgICAvLyB0aGUgY3JlYXRpb24gb2YgYSBmaWx0ZXIgbWFuYWdlciB1bmJpbmRzIHRoZSBidWZmZXJzLi5cbiAgICAgICAgdGhpcy5yZW5kZXJlci5jdXJyZW50UmVuZGVyZXIuc3RhcnQoKTtcbiAgICAgICAgdGhpcy5yZW5kZXJlci5jdXJyZW50UmVuZGVyVGFyZ2V0LmFjdGl2YXRlKCk7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG5cbiAgICAgICAgdGhpcy5yZW5kZXIgPSB0aGlzLnJlbmRlckNhbnZhcztcbiAgICAgICAgdGhpcy50ZXh0dXJlQnVmZmVyID0gbmV3IENhbnZhc0J1ZmZlcih0aGlzLndpZHRoKiB0aGlzLnJlc29sdXRpb24sIHRoaXMuaGVpZ2h0KiB0aGlzLnJlc29sdXRpb24pO1xuICAgICAgICB0aGlzLmJhc2VUZXh0dXJlLnNvdXJjZSA9IHRoaXMudGV4dHVyZUJ1ZmZlci5jYW52YXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKi9cbiAgICB0aGlzLnZhbGlkID0gdHJ1ZTtcblxuICAgIHRoaXMuX3VwZGF0ZVV2cygpO1xufVxuXG5SZW5kZXJUZXh0dXJlLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoVGV4dHVyZS5wcm90b3R5cGUpO1xuUmVuZGVyVGV4dHVyZS5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBSZW5kZXJUZXh0dXJlO1xubW9kdWxlLmV4cG9ydHMgPSBSZW5kZXJUZXh0dXJlO1xuXG4vKipcbiAqIFJlc2l6ZXMgdGhlIFJlbmRlclRleHR1cmUuXG4gKlxuICogQHBhcmFtIHdpZHRoIHtudW1iZXJ9IFRoZSB3aWR0aCB0byByZXNpemUgdG8uXG4gKiBAcGFyYW0gaGVpZ2h0IHtudW1iZXJ9IFRoZSBoZWlnaHQgdG8gcmVzaXplIHRvLlxuICogQHBhcmFtIHVwZGF0ZUJhc2Uge2Jvb2xlYW59IFNob3VsZCB0aGUgYmFzZVRleHR1cmUud2lkdGggYW5kIGhlaWdodCB2YWx1ZXMgYmUgcmVzaXplZCBhcyB3ZWxsP1xuICovXG5SZW5kZXJUZXh0dXJlLnByb3RvdHlwZS5yZXNpemUgPSBmdW5jdGlvbiAod2lkdGgsIGhlaWdodCwgdXBkYXRlQmFzZSlcbntcbiAgICBpZiAod2lkdGggPT09IHRoaXMud2lkdGggJiYgaGVpZ2h0ID09PSB0aGlzLmhlaWdodClcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLnZhbGlkID0gKHdpZHRoID4gMCAmJiBoZWlnaHQgPiAwKTtcblxuICAgIHRoaXMud2lkdGggPSB0aGlzLl9mcmFtZS53aWR0aCA9IHRoaXMuY3JvcC53aWR0aCA9IHdpZHRoO1xuICAgIHRoaXMuaGVpZ2h0ID0gIHRoaXMuX2ZyYW1lLmhlaWdodCA9IHRoaXMuY3JvcC5oZWlnaHQgPSBoZWlnaHQ7XG5cbiAgICBpZiAodXBkYXRlQmFzZSlcbiAgICB7XG4gICAgICAgIHRoaXMuYmFzZVRleHR1cmUud2lkdGggPSB0aGlzLndpZHRoO1xuICAgICAgICB0aGlzLmJhc2VUZXh0dXJlLmhlaWdodCA9IHRoaXMuaGVpZ2h0O1xuICAgIH1cblxuICAgIGlmICghdGhpcy52YWxpZClcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLnRleHR1cmVCdWZmZXIucmVzaXplKHRoaXMud2lkdGgsIHRoaXMuaGVpZ2h0KTtcblxuICAgIGlmKHRoaXMuZmlsdGVyTWFuYWdlcilcbiAgICB7XG4gICAgICAgIHRoaXMuZmlsdGVyTWFuYWdlci5yZXNpemUodGhpcy53aWR0aCwgdGhpcy5oZWlnaHQpO1xuICAgIH1cbn07XG5cbi8qKlxuICogQ2xlYXJzIHRoZSBSZW5kZXJUZXh0dXJlLlxuICpcbiAqL1xuUmVuZGVyVGV4dHVyZS5wcm90b3R5cGUuY2xlYXIgPSBmdW5jdGlvbiAoKVxue1xuICAgIGlmICghdGhpcy52YWxpZClcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5yZW5kZXJlci50eXBlID09PSBDT05TVC5SRU5ERVJFUl9UWVBFLldFQkdMKVxuICAgIHtcbiAgICAgICAgdGhpcy5yZW5kZXJlci5nbC5iaW5kRnJhbWVidWZmZXIodGhpcy5yZW5kZXJlci5nbC5GUkFNRUJVRkZFUiwgdGhpcy50ZXh0dXJlQnVmZmVyLmZyYW1lQnVmZmVyKTtcbiAgICB9XG5cbiAgICB0aGlzLnRleHR1cmVCdWZmZXIuY2xlYXIoKTtcbn07XG5cbi8qKlxuICogSW50ZXJuYWwgbWV0aG9kIGFzc2lnbmVkIHRvIHRoZSBgcmVuZGVyYCBwcm9wZXJ0eSBpZiB1c2luZyBhIENhbnZhc1JlbmRlcmVyLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0gZGlzcGxheU9iamVjdCB7UElYSS5EaXNwbGF5T2JqZWN0fSBUaGUgZGlzcGxheSBvYmplY3QgdG8gcmVuZGVyIHRoaXMgdGV4dHVyZSBvblxuICogQHBhcmFtIFttYXRyaXhdIHtQSVhJLk1hdHJpeH0gT3B0aW9uYWwgbWF0cml4IHRvIGFwcGx5IHRvIHRoZSBkaXNwbGF5IG9iamVjdCBiZWZvcmUgcmVuZGVyaW5nLlxuICogQHBhcmFtIFtjbGVhcj1mYWxzZV0ge2Jvb2xlYW59IElmIHRydWUgdGhlIHRleHR1cmUgd2lsbCBiZSBjbGVhcmVkIGJlZm9yZSB0aGUgZGlzcGxheU9iamVjdCBpcyBkcmF3blxuICogQHBhcmFtIFt1cGRhdGVUcmFuc2Zvcm09dHJ1ZV0ge2Jvb2xlYW59IElmIHRydWUgdGhlIGRpc3BsYXlPYmplY3QncyB3b3JsZFRyYW5zZm9ybS93b3JsZEFscGhhIGFuZCBhbGwgY2hpbGRyZW5cbiAqICB0cmFuc2Zvcm1hdGlvbnMgd2lsbCBiZSByZXN0b3JlZC4gTm90IHJlc3RvcmluZyB0aGlzIGluZm9ybWF0aW9uIHdpbGwgYmUgYSBsaXR0bGUgZmFzdGVyLlxuICovXG5SZW5kZXJUZXh0dXJlLnByb3RvdHlwZS5yZW5kZXJXZWJHTCA9IGZ1bmN0aW9uIChkaXNwbGF5T2JqZWN0LCBtYXRyaXgsIGNsZWFyLCB1cGRhdGVUcmFuc2Zvcm0pXG57XG4gICAgaWYgKCF0aGlzLnZhbGlkKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuXG4gICAgdXBkYXRlVHJhbnNmb3JtID0gKHVwZGF0ZVRyYW5zZm9ybSAhPT0gdW5kZWZpbmVkKSA/IHVwZGF0ZVRyYW5zZm9ybSA6IHRydWU7Ly8hdXBkYXRlVHJhbnNmb3JtO1xuXG4gICAgdGhpcy50ZXh0dXJlQnVmZmVyLnRyYW5zZm9ybSA9IG1hdHJpeDtcblxuICAgIC8vVE9ETyBub3QgYSBmYW4gdGhhdCB0aGlzIGlzIGhlcmUuLi4gaXQgd2lsbCBtb3ZlIVxuICAgIHRoaXMudGV4dHVyZUJ1ZmZlci5hY3RpdmF0ZSgpO1xuXG4gICAgLy8gc2V0V29ybGQgQWxwaGEgdG8gZW5zdXJlIHRoYXQgdGhlIG9iamVjdCBpcyByZW5kZXJlciBhdCBmdWxsIG9wYWNpdHlcbiAgICBkaXNwbGF5T2JqZWN0LndvcmxkQWxwaGEgPSAxO1xuXG4gICAgaWYgKHVwZGF0ZVRyYW5zZm9ybSlcbiAgICB7XG5cbiAgICAgICAgLy8gcmVzZXQgdGhlIG1hdHJpeCBvZiB0aGUgZGlzcGxhdHlPYmplY3QuLlxuICAgICAgICBkaXNwbGF5T2JqZWN0LndvcmxkVHJhbnNmb3JtLmlkZW50aXR5KCk7XG5cbiAgICAgICAgZGlzcGxheU9iamVjdC5jdXJyZW50Qm91bmRzID0gbnVsbDtcblxuICAgICAgICAvLyBUaW1lIHRvIHVwZGF0ZSBhbGwgdGhlIGNoaWxkcmVuIG9mIHRoZSBkaXNwbGF5T2JqZWN0IHdpdGggdGhlIG5ldyBtYXRyaXguLlxuICAgICAgICB2YXIgY2hpbGRyZW4gPSBkaXNwbGF5T2JqZWN0LmNoaWxkcmVuO1xuICAgICAgICB2YXIgaSwgajtcblxuICAgICAgICBmb3IgKGkgPSAwLCBqID0gY2hpbGRyZW4ubGVuZ3RoOyBpIDwgajsgKytpKVxuICAgICAgICB7XG4gICAgICAgICAgICBjaGlsZHJlbltpXS51cGRhdGVUcmFuc2Zvcm0oKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vVE9ETyByZW5hbWUgdGV4dHVyZUJ1ZmZlciB0byByZW5kZXJUYXJnZXQuLlxuICAgIHZhciB0ZW1wID0gIHRoaXMucmVuZGVyZXIuZmlsdGVyTWFuYWdlcjtcblxuICAgIHRoaXMucmVuZGVyZXIuZmlsdGVyTWFuYWdlciA9IHRoaXMuZmlsdGVyTWFuYWdlcjtcbiAgICB0aGlzLnJlbmRlcmVyLnJlbmRlckRpc3BsYXlPYmplY3QoZGlzcGxheU9iamVjdCwgdGhpcy50ZXh0dXJlQnVmZmVyLCBjbGVhcik7XG5cbiAgICB0aGlzLnJlbmRlcmVyLmZpbHRlck1hbmFnZXIgPSB0ZW1wO1xufTtcblxuXG4vKipcbiAqIEludGVybmFsIG1ldGhvZCBhc3NpZ25lZCB0byB0aGUgYHJlbmRlcmAgcHJvcGVydHkgaWYgdXNpbmcgYSBDYW52YXNSZW5kZXJlci5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIGRpc3BsYXlPYmplY3Qge1BJWEkuRGlzcGxheU9iamVjdH0gVGhlIGRpc3BsYXkgb2JqZWN0IHRvIHJlbmRlciB0aGlzIHRleHR1cmUgb25cbiAqIEBwYXJhbSBbbWF0cml4XSB7UElYSS5NYXRyaXh9IE9wdGlvbmFsIG1hdHJpeCB0byBhcHBseSB0byB0aGUgZGlzcGxheSBvYmplY3QgYmVmb3JlIHJlbmRlcmluZy5cbiAqIEBwYXJhbSBbY2xlYXJdIHtib29sZWFufSBJZiB0cnVlIHRoZSB0ZXh0dXJlIHdpbGwgYmUgY2xlYXJlZCBiZWZvcmUgdGhlIGRpc3BsYXlPYmplY3QgaXMgZHJhd25cbiAqL1xuUmVuZGVyVGV4dHVyZS5wcm90b3R5cGUucmVuZGVyQ2FudmFzID0gZnVuY3Rpb24gKGRpc3BsYXlPYmplY3QsIG1hdHJpeCwgY2xlYXIsIHVwZGF0ZVRyYW5zZm9ybSlcbntcbiAgICBpZiAoIXRoaXMudmFsaWQpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdXBkYXRlVHJhbnNmb3JtID0gISF1cGRhdGVUcmFuc2Zvcm07XG5cbiAgICB2YXIgd3QgPSB0ZW1wTWF0cml4O1xuXG4gICAgd3QuaWRlbnRpdHkoKTtcblxuICAgIGlmIChtYXRyaXgpXG4gICAge1xuICAgICAgICB3dC5hcHBlbmQobWF0cml4KTtcbiAgICB9XG5cbiAgICB2YXIgY2FjaGVkV3QgPSBkaXNwbGF5T2JqZWN0LndvcmxkVHJhbnNmb3JtO1xuICAgIGRpc3BsYXlPYmplY3Qud29ybGRUcmFuc2Zvcm0gPSB3dDtcblxuICAgIC8vIHNldFdvcmxkIEFscGhhIHRvIGVuc3VyZSB0aGF0IHRoZSBvYmplY3QgaXMgcmVuZGVyZXIgYXQgZnVsbCBvcGFjaXR5XG4gICAgZGlzcGxheU9iamVjdC53b3JsZEFscGhhID0gMTtcblxuICAgIC8vIFRpbWUgdG8gdXBkYXRlIGFsbCB0aGUgY2hpbGRyZW4gb2YgdGhlIGRpc3BsYXlPYmplY3Qgd2l0aCB0aGUgbmV3IG1hdHJpeC4uXG4gICAgdmFyIGNoaWxkcmVuID0gZGlzcGxheU9iamVjdC5jaGlsZHJlbjtcbiAgICB2YXIgaSwgajtcblxuICAgIGZvciAoaSA9IDAsIGogPSBjaGlsZHJlbi5sZW5ndGg7IGkgPCBqOyArK2kpXG4gICAge1xuICAgICAgICBjaGlsZHJlbltpXS51cGRhdGVUcmFuc2Zvcm0oKTtcbiAgICB9XG5cbiAgICBpZiAoY2xlYXIpXG4gICAge1xuICAgICAgICB0aGlzLnRleHR1cmVCdWZmZXIuY2xlYXIoKTtcbiAgICB9XG5cblxuLy8gICAgdGhpcy50ZXh0dXJlQnVmZmVyLlxuICAgIHZhciBjb250ZXh0ID0gdGhpcy50ZXh0dXJlQnVmZmVyLmNvbnRleHQ7XG5cbiAgICB2YXIgcmVhbFJlc29sdXRpb24gPSB0aGlzLnJlbmRlcmVyLnJlc29sdXRpb247XG5cbiAgICB0aGlzLnJlbmRlcmVyLnJlc29sdXRpb24gPSB0aGlzLnJlc29sdXRpb247XG5cbiAgICB0aGlzLnJlbmRlcmVyLnJlbmRlckRpc3BsYXlPYmplY3QoZGlzcGxheU9iamVjdCwgY29udGV4dCk7XG5cbiAgICB0aGlzLnJlbmRlcmVyLnJlc29sdXRpb24gPSByZWFsUmVzb2x1dGlvbjtcblxuICAgIGlmKGRpc3BsYXlPYmplY3Qud29ybGRUcmFuc2Zvcm0gPT09IHd0KVxuICAgIHtcbiAgICAgICAgLy8gZml4ZXMgY2FjaGVBc0JpdG1hcCBIYXBwZW5pbmcgZHVyaW5nIHRoZSBhYm92ZS4uXG4gICAgICAgIGRpc3BsYXlPYmplY3Qud29ybGRUcmFuc2Zvcm0gPSBjYWNoZWRXdDtcbiAgICB9XG5cbn07XG5cbi8qKlxuICogRGVzdHJveXMgdGhpcyB0ZXh0dXJlXG4gKlxuICogQHBhcmFtIGRlc3Ryb3lCYXNlIHtib29sZWFufSBXaGV0aGVyIHRvIGRlc3Ryb3kgdGhlIGJhc2UgdGV4dHVyZSBhcyB3ZWxsXG4gKi9cblJlbmRlclRleHR1cmUucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoKVxue1xuICAgIFRleHR1cmUucHJvdG90eXBlLmRlc3Ryb3kuY2FsbCh0aGlzLCB0cnVlKTtcblxuICAgIHRoaXMudGV4dHVyZUJ1ZmZlci5kZXN0cm95KCk7XG5cbiAgICAvLyBkZXN0cm95IHRoZSBmaWx0ZXJtYW5hZ2VyLi5cbiAgICBpZih0aGlzLmZpbHRlck1hbmFnZXIpXG4gICAge1xuICAgICAgICB0aGlzLmZpbHRlck1hbmFnZXIuZGVzdHJveSgpO1xuICAgIH1cblxuICAgIHRoaXMucmVuZGVyZXIgPSBudWxsO1xufTtcblxuLyoqXG4gKiBXaWxsIHJldHVybiBhIEhUTUwgSW1hZ2Ugb2YgdGhlIHRleHR1cmVcbiAqXG4gKiBAcmV0dXJuIHtJbWFnZX1cbiAqL1xuUmVuZGVyVGV4dHVyZS5wcm90b3R5cGUuZ2V0SW1hZ2UgPSBmdW5jdGlvbiAoKVxue1xuICAgIHZhciBpbWFnZSA9IG5ldyBJbWFnZSgpO1xuICAgIGltYWdlLnNyYyA9IHRoaXMuZ2V0QmFzZTY0KCk7XG4gICAgcmV0dXJuIGltYWdlO1xufTtcblxuLyoqXG4gKiBXaWxsIHJldHVybiBhIGEgYmFzZTY0IGVuY29kZWQgc3RyaW5nIG9mIHRoaXMgdGV4dHVyZS4gSXQgd29ya3MgYnkgY2FsbGluZyBSZW5kZXJUZXh0dXJlLmdldENhbnZhcyBhbmQgdGhlbiBydW5uaW5nIHRvRGF0YVVSTCBvbiB0aGF0LlxuICpcbiAqIEByZXR1cm4ge3N0cmluZ30gQSBiYXNlNjQgZW5jb2RlZCBzdHJpbmcgb2YgdGhlIHRleHR1cmUuXG4gKi9cblJlbmRlclRleHR1cmUucHJvdG90eXBlLmdldEJhc2U2NCA9IGZ1bmN0aW9uICgpXG57XG4gICAgcmV0dXJuIHRoaXMuZ2V0Q2FudmFzKCkudG9EYXRhVVJMKCk7XG59O1xuXG4vKipcbiAqIENyZWF0ZXMgYSBDYW52YXMgZWxlbWVudCwgcmVuZGVycyB0aGlzIFJlbmRlclRleHR1cmUgdG8gaXQgYW5kIHRoZW4gcmV0dXJucyBpdC5cbiAqXG4gKiBAcmV0dXJuIHtIVE1MQ2FudmFzRWxlbWVudH0gQSBDYW52YXMgZWxlbWVudCB3aXRoIHRoZSB0ZXh0dXJlIHJlbmRlcmVkIG9uLlxuICovXG5SZW5kZXJUZXh0dXJlLnByb3RvdHlwZS5nZXRDYW52YXMgPSBmdW5jdGlvbiAoKVxue1xuICAgIGlmICh0aGlzLnJlbmRlcmVyLnR5cGUgPT09IENPTlNULlJFTkRFUkVSX1RZUEUuV0VCR0wpXG4gICAge1xuICAgICAgICB2YXIgZ2wgPSB0aGlzLnJlbmRlcmVyLmdsO1xuICAgICAgICB2YXIgd2lkdGggPSB0aGlzLnRleHR1cmVCdWZmZXIuc2l6ZS53aWR0aDtcbiAgICAgICAgdmFyIGhlaWdodCA9IHRoaXMudGV4dHVyZUJ1ZmZlci5zaXplLmhlaWdodDtcblxuICAgICAgICB2YXIgd2ViR0xQaXhlbHMgPSBuZXcgVWludDhBcnJheSg0ICogd2lkdGggKiBoZWlnaHQpO1xuXG4gICAgICAgIGdsLmJpbmRGcmFtZWJ1ZmZlcihnbC5GUkFNRUJVRkZFUiwgdGhpcy50ZXh0dXJlQnVmZmVyLmZyYW1lQnVmZmVyKTtcbiAgICAgICAgZ2wucmVhZFBpeGVscygwLCAwLCB3aWR0aCwgaGVpZ2h0LCBnbC5SR0JBLCBnbC5VTlNJR05FRF9CWVRFLCB3ZWJHTFBpeGVscyk7XG4gICAgICAgIGdsLmJpbmRGcmFtZWJ1ZmZlcihnbC5GUkFNRUJVRkZFUiwgbnVsbCk7XG5cbiAgICAgICAgdmFyIHRlbXBDYW52YXMgPSBuZXcgQ2FudmFzQnVmZmVyKHdpZHRoLCBoZWlnaHQpO1xuICAgICAgICB2YXIgY2FudmFzRGF0YSA9IHRlbXBDYW52YXMuY29udGV4dC5nZXRJbWFnZURhdGEoMCwgMCwgd2lkdGgsIGhlaWdodCk7XG4gICAgICAgIGNhbnZhc0RhdGEuZGF0YS5zZXQod2ViR0xQaXhlbHMpO1xuXG4gICAgICAgIHRlbXBDYW52YXMuY29udGV4dC5wdXRJbWFnZURhdGEoY2FudmFzRGF0YSwgMCwgMCk7XG5cbiAgICAgICAgcmV0dXJuIHRlbXBDYW52YXMuY2FudmFzO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICByZXR1cm4gdGhpcy50ZXh0dXJlQnVmZmVyLmNhbnZhcztcbiAgICB9XG59O1xuXG4vKipcbiAqIFdpbGwgcmV0dXJuIGEgb25lLWRpbWVuc2lvbmFsIGFycmF5IGNvbnRhaW5pbmcgdGhlIHBpeGVsIGRhdGEgb2YgdGhlIGVudGlyZSB0ZXh0dXJlIGluIFJHQkEgb3JkZXIsIHdpdGggaW50ZWdlciB2YWx1ZXMgYmV0d2VlbiAwIGFuZCAyNTUgKGluY2x1ZGVkKS5cbiAqXG4gKiBAcmV0dXJuIHtVaW50OENsYW1wZWRBcnJheX1cbiAqL1xuUmVuZGVyVGV4dHVyZS5wcm90b3R5cGUuZ2V0UGl4ZWxzID0gZnVuY3Rpb24gKClcbntcbiAgICB2YXIgd2lkdGgsIGhlaWdodDtcblxuICAgIGlmICh0aGlzLnJlbmRlcmVyLnR5cGUgPT09IENPTlNULlJFTkRFUkVSX1RZUEUuV0VCR0wpXG4gICAge1xuICAgICAgICB2YXIgZ2wgPSB0aGlzLnJlbmRlcmVyLmdsO1xuICAgICAgICB3aWR0aCA9IHRoaXMudGV4dHVyZUJ1ZmZlci5zaXplLndpZHRoO1xuICAgICAgICBoZWlnaHQgPSB0aGlzLnRleHR1cmVCdWZmZXIuc2l6ZS5oZWlnaHQ7XG5cbiAgICAgICAgdmFyIHdlYkdMUGl4ZWxzID0gbmV3IFVpbnQ4QXJyYXkoNCAqIHdpZHRoICogaGVpZ2h0KTtcblxuICAgICAgICBnbC5iaW5kRnJhbWVidWZmZXIoZ2wuRlJBTUVCVUZGRVIsIHRoaXMudGV4dHVyZUJ1ZmZlci5mcmFtZUJ1ZmZlcik7XG4gICAgICAgIGdsLnJlYWRQaXhlbHMoMCwgMCwgd2lkdGgsIGhlaWdodCwgZ2wuUkdCQSwgZ2wuVU5TSUdORURfQllURSwgd2ViR0xQaXhlbHMpO1xuICAgICAgICBnbC5iaW5kRnJhbWVidWZmZXIoZ2wuRlJBTUVCVUZGRVIsIG51bGwpO1xuXG4gICAgICAgIHJldHVybiB3ZWJHTFBpeGVscztcbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgd2lkdGggPSB0aGlzLnRleHR1cmVCdWZmZXIuY2FudmFzLndpZHRoO1xuICAgICAgICBoZWlnaHQgPSB0aGlzLnRleHR1cmVCdWZmZXIuY2FudmFzLmhlaWdodDtcblxuICAgICAgICByZXR1cm4gdGhpcy50ZXh0dXJlQnVmZmVyLmNhbnZhcy5nZXRDb250ZXh0KCcyZCcpLmdldEltYWdlRGF0YSgwLCAwLCB3aWR0aCwgaGVpZ2h0KS5kYXRhO1xuICAgIH1cbn07XG5cbi8qKlxuICogV2lsbCByZXR1cm4gYSBvbmUtZGltZW5zaW9uYWwgYXJyYXkgY29udGFpbmluZyB0aGUgcGl4ZWwgZGF0YSBvZiBhIHBpeGVsIHdpdGhpbiB0aGUgdGV4dHVyZSBpbiBSR0JBIG9yZGVyLCB3aXRoIGludGVnZXIgdmFsdWVzIGJldHdlZW4gMCBhbmQgMjU1IChpbmNsdWRlZCkuXG4gKlxuICogQHBhcmFtIHgge251bWJlcn0gVGhlIHggY29vcmRpbmF0ZSBvZiB0aGUgcGl4ZWwgdG8gcmV0cmlldmUuXG4gKiBAcGFyYW0geSB7bnVtYmVyfSBUaGUgeSBjb29yZGluYXRlIG9mIHRoZSBwaXhlbCB0byByZXRyaWV2ZS5cbiAqIEByZXR1cm4ge1VpbnQ4Q2xhbXBlZEFycmF5fVxuICovXG5SZW5kZXJUZXh0dXJlLnByb3RvdHlwZS5nZXRQaXhlbCA9IGZ1bmN0aW9uICh4LCB5KVxue1xuICAgIGlmICh0aGlzLnJlbmRlcmVyLnR5cGUgPT09IENPTlNULlJFTkRFUkVSX1RZUEUuV0VCR0wpXG4gICAge1xuICAgICAgICB2YXIgZ2wgPSB0aGlzLnJlbmRlcmVyLmdsO1xuXG4gICAgICAgIHZhciB3ZWJHTFBpeGVscyA9IG5ldyBVaW50OEFycmF5KDQpO1xuXG4gICAgICAgIGdsLmJpbmRGcmFtZWJ1ZmZlcihnbC5GUkFNRUJVRkZFUiwgdGhpcy50ZXh0dXJlQnVmZmVyLmZyYW1lQnVmZmVyKTtcbiAgICAgICAgZ2wucmVhZFBpeGVscyh4LCB5LCAxLCAxLCBnbC5SR0JBLCBnbC5VTlNJR05FRF9CWVRFLCB3ZWJHTFBpeGVscyk7XG4gICAgICAgIGdsLmJpbmRGcmFtZWJ1ZmZlcihnbC5GUkFNRUJVRkZFUiwgbnVsbCk7XG5cbiAgICAgICAgcmV0dXJuIHdlYkdMUGl4ZWxzO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICByZXR1cm4gdGhpcy50ZXh0dXJlQnVmZmVyLmNhbnZhcy5nZXRDb250ZXh0KCcyZCcpLmdldEltYWdlRGF0YSh4LCB5LCAxLCAxKS5kYXRhO1xuICAgIH1cbn07XG4iLCJ2YXIgQmFzZVRleHR1cmUgPSByZXF1aXJlKCcuL0Jhc2VUZXh0dXJlJyksXG4gICAgVmlkZW9CYXNlVGV4dHVyZSA9IHJlcXVpcmUoJy4vVmlkZW9CYXNlVGV4dHVyZScpLFxuICAgIFRleHR1cmVVdnMgPSByZXF1aXJlKCcuL1RleHR1cmVVdnMnKSxcbiAgICBFdmVudEVtaXR0ZXIgPSByZXF1aXJlKCdldmVudGVtaXR0ZXIzJyksXG4gICAgbWF0aCA9IHJlcXVpcmUoJy4uL21hdGgnKSxcbiAgICB1dGlscyA9IHJlcXVpcmUoJy4uL3V0aWxzJyk7XG5cbi8qKlxuICogQSB0ZXh0dXJlIHN0b3JlcyB0aGUgaW5mb3JtYXRpb24gdGhhdCByZXByZXNlbnRzIGFuIGltYWdlIG9yIHBhcnQgb2YgYW4gaW1hZ2UuIEl0IGNhbm5vdCBiZSBhZGRlZFxuICogdG8gdGhlIGRpc3BsYXkgbGlzdCBkaXJlY3RseS4gSW5zdGVhZCB1c2UgaXQgYXMgdGhlIHRleHR1cmUgZm9yIGEgU3ByaXRlLiBJZiBubyBmcmFtZSBpcyBwcm92aWRlZCB0aGVuIHRoZSB3aG9sZSBpbWFnZSBpcyB1c2VkLlxuICpcbiAqIFlvdSBjYW4gZGlyZWN0bHkgY3JlYXRlIGEgdGV4dHVyZSBmcm9tIGFuIGltYWdlIGFuZCB0aGVuIHJldXNlIGl0IG11bHRpcGxlIHRpbWVzIGxpa2UgdGhpcyA6XG4gKlxuICogYGBganNcbiAqIHZhciB0ZXh0dXJlID0gUElYSS5UZXh0dXJlLmZyb21JbWFnZSgnYXNzZXRzL2ltYWdlLnBuZycpO1xuICogdmFyIHNwcml0ZTEgPSBuZXcgUElYSS5TcHJpdGUodGV4dHVyZSk7XG4gKiB2YXIgc3ByaXRlMiA9IG5ldyBQSVhJLlNwcml0ZSh0ZXh0dXJlKTtcbiAqIGBgYFxuICpcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqIEBwYXJhbSBiYXNlVGV4dHVyZSB7UElYSS5CYXNlVGV4dHVyZX0gVGhlIGJhc2UgdGV4dHVyZSBzb3VyY2UgdG8gY3JlYXRlIHRoZSB0ZXh0dXJlIGZyb21cbiAqIEBwYXJhbSBbZnJhbWVdIHtQSVhJLlJlY3RhbmdsZX0gVGhlIHJlY3RhbmdsZSBmcmFtZSBvZiB0aGUgdGV4dHVyZSB0byBzaG93XG4gKiBAcGFyYW0gW2Nyb3BdIHtQSVhJLlJlY3RhbmdsZX0gVGhlIGFyZWEgb2Ygb3JpZ2luYWwgdGV4dHVyZVxuICogQHBhcmFtIFt0cmltXSB7UElYSS5SZWN0YW5nbGV9IFRyaW1tZWQgdGV4dHVyZSByZWN0YW5nbGVcbiAqIEBwYXJhbSBbcm90YXRlXSB7Ym9vbGVhbn0gaW5kaWNhdGVzIHdoZXRoZXIgdGhlIHRleHR1cmUgc2hvdWxkIGJlIHJvdGF0ZWQgYnkgOTAgZGVncmVlcyAoIHVzZWQgYnkgdGV4dHVyZSBwYWNrZXIgKVxuICovXG5mdW5jdGlvbiBUZXh0dXJlKGJhc2VUZXh0dXJlLCBmcmFtZSwgY3JvcCwgdHJpbSwgcm90YXRlKVxue1xuICAgIEV2ZW50RW1pdHRlci5jYWxsKHRoaXMpO1xuXG4gICAgLyoqXG4gICAgICogRG9lcyB0aGlzIFRleHR1cmUgaGF2ZSBhbnkgZnJhbWUgZGF0YSBhc3NpZ25lZCB0byBpdD9cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICovXG4gICAgdGhpcy5ub0ZyYW1lID0gZmFsc2U7XG5cbiAgICBpZiAoIWZyYW1lKVxuICAgIHtcbiAgICAgICAgdGhpcy5ub0ZyYW1lID0gdHJ1ZTtcbiAgICAgICAgZnJhbWUgPSBuZXcgbWF0aC5SZWN0YW5nbGUoMCwgMCwgMSwgMSk7XG4gICAgfVxuXG4gICAgaWYgKGJhc2VUZXh0dXJlIGluc3RhbmNlb2YgVGV4dHVyZSlcbiAgICB7XG4gICAgICAgIGJhc2VUZXh0dXJlID0gYmFzZVRleHR1cmUuYmFzZVRleHR1cmU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhlIGJhc2UgdGV4dHVyZSB0aGF0IHRoaXMgdGV4dHVyZSB1c2VzLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5CYXNlVGV4dHVyZX1cbiAgICAgKi9cbiAgICB0aGlzLmJhc2VUZXh0dXJlID0gYmFzZVRleHR1cmU7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgZnJhbWUgc3BlY2lmaWVzIHRoZSByZWdpb24gb2YgdGhlIGJhc2UgdGV4dHVyZSB0aGF0IHRoaXMgdGV4dHVyZSB1c2VzXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlJlY3RhbmdsZX1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX2ZyYW1lID0gZnJhbWU7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgdGV4dHVyZSB0cmltIGRhdGEuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlJlY3RhbmdsZX1cbiAgICAgKi9cbiAgICB0aGlzLnRyaW0gPSB0cmltO1xuXG4gICAgLyoqXG4gICAgICogVGhpcyB3aWxsIGxldCB0aGUgcmVuZGVyZXIga25vdyBpZiB0aGUgdGV4dHVyZSBpcyB2YWxpZC4gSWYgaXQncyBub3QgdGhlbiBpdCBjYW5ub3QgYmUgcmVuZGVyZWQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqL1xuICAgIHRoaXMudmFsaWQgPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIFRoaXMgd2lsbCBsZXQgYSByZW5kZXJlciBrbm93IHRoYXQgYSB0ZXh0dXJlIGhhcyBiZWVuIHVwZGF0ZWQgKHVzZWQgbWFpbmx5IGZvciB3ZWJHTCB1diB1cGRhdGVzKVxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKi9cbiAgICB0aGlzLnJlcXVpcmVzVXBkYXRlID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgV2ViR0wgVVYgZGF0YSBjYWNoZS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuVGV4dHVyZVV2c31cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX3V2cyA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgd2lkdGggb2YgdGhlIFRleHR1cmUgaW4gcGl4ZWxzLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMud2lkdGggPSAwO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGhlaWdodCBvZiB0aGUgVGV4dHVyZSBpbiBwaXhlbHMuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy5oZWlnaHQgPSAwO1xuXG4gICAgLyoqXG4gICAgICogVGhpcyBpcyB0aGUgYXJlYSBvZiB0aGUgQmFzZVRleHR1cmUgaW1hZ2UgdG8gYWN0dWFsbHkgY29weSB0byB0aGUgQ2FudmFzIC8gV2ViR0wgd2hlbiByZW5kZXJpbmcsXG4gICAgICogaXJyZXNwZWN0aXZlIG9mIHRoZSBhY3R1YWwgZnJhbWUgc2l6ZSBvciBwbGFjZW1lbnQgKHdoaWNoIGNhbiBiZSBpbmZsdWVuY2VkIGJ5IHRyaW1tZWQgdGV4dHVyZSBhdGxhc2VzKVxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5SZWN0YW5nbGV9XG4gICAgICovXG4gICAgdGhpcy5jcm9wID0gY3JvcCB8fCBmcmFtZTsvL25ldyBtYXRoLlJlY3RhbmdsZSgwLCAwLCAxLCAxKTtcblxuICAgIC8qKlxuICAgICAqIEluZGljYXRlcyB3aGV0aGVyIHRoZSB0ZXh0dXJlIHNob3VsZCBiZSByb3RhdGVkIGJ5IDkwIGRlZ3JlZXNcbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKi9cbiAgICB0aGlzLnJvdGF0ZSA9ICEhcm90YXRlO1xuXG4gICAgaWYgKGJhc2VUZXh0dXJlLmhhc0xvYWRlZClcbiAgICB7XG4gICAgICAgIGlmICh0aGlzLm5vRnJhbWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGZyYW1lID0gbmV3IG1hdGguUmVjdGFuZ2xlKDAsIDAsIGJhc2VUZXh0dXJlLndpZHRoLCBiYXNlVGV4dHVyZS5oZWlnaHQpO1xuXG4gICAgICAgICAgICAvLyBpZiB0aGVyZSBpcyBubyBmcmFtZSB3ZSBzaG91bGQgbW9uaXRvciBmb3IgYW55IGJhc2UgdGV4dHVyZSBjaGFuZ2VzLi5cbiAgICAgICAgICAgIGJhc2VUZXh0dXJlLm9uKCd1cGRhdGUnLCB0aGlzLm9uQmFzZVRleHR1cmVVcGRhdGVkLCB0aGlzKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmZyYW1lID0gZnJhbWU7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIGJhc2VUZXh0dXJlLm9uY2UoJ2xvYWRlZCcsIHRoaXMub25CYXNlVGV4dHVyZUxvYWRlZCwgdGhpcyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRmlyZWQgd2hlbiB0aGUgdGV4dHVyZSBpcyB1cGRhdGVkLiBUaGlzIGhhcHBlbnMgaWYgdGhlIGZyYW1lIG9yIHRoZSBiYXNlVGV4dHVyZSBpcyB1cGRhdGVkLlxuICAgICAqXG4gICAgICogQGV2ZW50IHVwZGF0ZVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLlRleHR1cmUjXG4gICAgICogQHByb3RlY3RlZFxuICAgICAqL1xufVxuXG5UZXh0dXJlLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoRXZlbnRFbWl0dGVyLnByb3RvdHlwZSk7XG5UZXh0dXJlLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFRleHR1cmU7XG5tb2R1bGUuZXhwb3J0cyA9IFRleHR1cmU7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKFRleHR1cmUucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogVGhlIGZyYW1lIHNwZWNpZmllcyB0aGUgcmVnaW9uIG9mIHRoZSBiYXNlIHRleHR1cmUgdGhhdCB0aGlzIHRleHR1cmUgdXNlcy5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuUmVjdGFuZ2xlfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLlRleHR1cmUjXG4gICAgICovXG4gICAgZnJhbWU6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fZnJhbWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKGZyYW1lKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLl9mcmFtZSA9IGZyYW1lO1xuXG4gICAgICAgICAgICB0aGlzLm5vRnJhbWUgPSBmYWxzZTtcblxuICAgICAgICAgICAgdGhpcy53aWR0aCA9IGZyYW1lLndpZHRoO1xuICAgICAgICAgICAgdGhpcy5oZWlnaHQgPSBmcmFtZS5oZWlnaHQ7XG5cbiAgICAgICAgICAgIGlmICghdGhpcy50cmltICYmICF0aGlzLnJvdGF0ZSAmJiAoZnJhbWUueCArIGZyYW1lLndpZHRoID4gdGhpcy5iYXNlVGV4dHVyZS53aWR0aCB8fCBmcmFtZS55ICsgZnJhbWUuaGVpZ2h0ID4gdGhpcy5iYXNlVGV4dHVyZS5oZWlnaHQpKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignVGV4dHVyZSBFcnJvcjogZnJhbWUgZG9lcyBub3QgZml0IGluc2lkZSB0aGUgYmFzZSBUZXh0dXJlIGRpbWVuc2lvbnMgJyArIHRoaXMpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvL3RoaXMudmFsaWQgPSBmcmFtZSAmJiBmcmFtZS53aWR0aCAmJiBmcmFtZS5oZWlnaHQgJiYgdGhpcy5iYXNlVGV4dHVyZS5zb3VyY2UgJiYgdGhpcy5iYXNlVGV4dHVyZS5oYXNMb2FkZWQ7XG4gICAgICAgICAgICB0aGlzLnZhbGlkID0gZnJhbWUgJiYgZnJhbWUud2lkdGggJiYgZnJhbWUuaGVpZ2h0ICYmIHRoaXMuYmFzZVRleHR1cmUuaGFzTG9hZGVkO1xuXG4gICAgICAgICAgICBpZiAodGhpcy50cmltKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHRoaXMud2lkdGggPSB0aGlzLnRyaW0ud2lkdGg7XG4gICAgICAgICAgICAgICAgdGhpcy5oZWlnaHQgPSB0aGlzLnRyaW0uaGVpZ2h0O1xuICAgICAgICAgICAgICAgIHRoaXMuX2ZyYW1lLndpZHRoID0gdGhpcy50cmltLndpZHRoO1xuICAgICAgICAgICAgICAgIHRoaXMuX2ZyYW1lLmhlaWdodCA9IHRoaXMudHJpbS5oZWlnaHQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdGhpcy5jcm9wID0gZnJhbWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICh0aGlzLnZhbGlkKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHRoaXMuX3VwZGF0ZVV2cygpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxufSk7XG5cbi8qKlxuICogVXBkYXRlcyB0aGlzIHRleHR1cmUgb24gdGhlIGdwdS5cbiAqXG4gKi9cblRleHR1cmUucHJvdG90eXBlLnVwZGF0ZSA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy5iYXNlVGV4dHVyZS51cGRhdGUoKTtcbn07XG5cbi8qKlxuICogQ2FsbGVkIHdoZW4gdGhlIGJhc2UgdGV4dHVyZSBpcyBsb2FkZWRcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5UZXh0dXJlLnByb3RvdHlwZS5vbkJhc2VUZXh0dXJlTG9hZGVkID0gZnVuY3Rpb24gKGJhc2VUZXh0dXJlKVxue1xuICAgIC8vIFRPRE8gdGhpcyBjb2RlIGxvb2tzIGNvbmZ1c2luZy4uIGJvbyB0byBhYnVzaW5nIGdldHRlcnMgYW5kIHNldHRlcnNzIVxuICAgIGlmICh0aGlzLm5vRnJhbWUpXG4gICAge1xuICAgICAgICB0aGlzLmZyYW1lID0gbmV3IG1hdGguUmVjdGFuZ2xlKDAsIDAsIGJhc2VUZXh0dXJlLndpZHRoLCBiYXNlVGV4dHVyZS5oZWlnaHQpO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICB0aGlzLmZyYW1lID0gdGhpcy5fZnJhbWU7XG4gICAgfVxuXG4gICAgdGhpcy5lbWl0KCd1cGRhdGUnLCB0aGlzKTtcbn07XG5cbi8qKlxuICogQ2FsbGVkIHdoZW4gdGhlIGJhc2UgdGV4dHVyZSBpcyB1cGRhdGVkXG4gKlxuICogQHByaXZhdGVcbiAqL1xuVGV4dHVyZS5wcm90b3R5cGUub25CYXNlVGV4dHVyZVVwZGF0ZWQgPSBmdW5jdGlvbiAoYmFzZVRleHR1cmUpXG57XG4gICAgdGhpcy5fZnJhbWUud2lkdGggPSBiYXNlVGV4dHVyZS53aWR0aDtcbiAgICB0aGlzLl9mcmFtZS5oZWlnaHQgPSBiYXNlVGV4dHVyZS5oZWlnaHQ7XG5cbiAgICB0aGlzLmVtaXQoJ3VwZGF0ZScsIHRoaXMpO1xufTtcblxuLyoqXG4gKiBEZXN0cm95cyB0aGlzIHRleHR1cmVcbiAqXG4gKiBAcGFyYW0gW2Rlc3Ryb3lCYXNlPWZhbHNlXSB7Ym9vbGVhbn0gV2hldGhlciB0byBkZXN0cm95IHRoZSBiYXNlIHRleHR1cmUgYXMgd2VsbFxuICovXG5UZXh0dXJlLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKGRlc3Ryb3lCYXNlKVxue1xuICAgIGlmICh0aGlzLmJhc2VUZXh0dXJlKVxuICAgIHtcbiAgICAgICAgaWYgKGRlc3Ryb3lCYXNlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmJhc2VUZXh0dXJlLmRlc3Ryb3koKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuYmFzZVRleHR1cmUub2ZmKCd1cGRhdGUnLCB0aGlzLm9uQmFzZVRleHR1cmVVcGRhdGVkLCB0aGlzKTtcbiAgICAgICAgdGhpcy5iYXNlVGV4dHVyZS5vZmYoJ2xvYWRlZCcsIHRoaXMub25CYXNlVGV4dHVyZUxvYWRlZCwgdGhpcyk7XG5cbiAgICAgICAgdGhpcy5iYXNlVGV4dHVyZSA9IG51bGw7XG4gICAgfVxuXG4gICAgdGhpcy5fZnJhbWUgPSBudWxsO1xuICAgIHRoaXMuX3V2cyA9IG51bGw7XG4gICAgdGhpcy50cmltID0gbnVsbDtcbiAgICB0aGlzLmNyb3AgPSBudWxsO1xuXG4gICAgdGhpcy52YWxpZCA9IGZhbHNlO1xuXG4gICAgdGhpcy5vZmYoJ2Rpc3Bvc2UnLCB0aGlzLmRpc3Bvc2UsIHRoaXMpO1xuICAgIHRoaXMub2ZmKCd1cGRhdGUnLCB0aGlzLnVwZGF0ZSwgdGhpcyk7XG59O1xuXG4vKipcbiAqIENyZWF0ZXMgYSBuZXcgdGV4dHVyZSBvYmplY3QgdGhhdCBhY3RzIHRoZSBzYW1lIGFzIHRoaXMgb25lLlxuICpcbiAqIEByZXR1cm4ge1BJWEkuVGV4dHVyZX1cbiAqL1xuVGV4dHVyZS5wcm90b3R5cGUuY2xvbmUgPSBmdW5jdGlvbiAoKVxue1xuICAgIHJldHVybiBuZXcgVGV4dHVyZSh0aGlzLmJhc2VUZXh0dXJlLCB0aGlzLmZyYW1lLCB0aGlzLmNyb3AsIHRoaXMudHJpbSwgdGhpcy5yb3RhdGUpO1xufTtcblxuLyoqXG4gKiBVcGRhdGVzIHRoZSBpbnRlcm5hbCBXZWJHTCBVViBjYWNoZS5cbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5UZXh0dXJlLnByb3RvdHlwZS5fdXBkYXRlVXZzID0gZnVuY3Rpb24gKClcbntcbiAgICBpZiAoIXRoaXMuX3V2cylcbiAgICB7XG4gICAgICAgIHRoaXMuX3V2cyA9IG5ldyBUZXh0dXJlVXZzKCk7XG4gICAgfVxuXG4gICAgdGhpcy5fdXZzLnNldCh0aGlzLmNyb3AsIHRoaXMuYmFzZVRleHR1cmUsIHRoaXMucm90YXRlKTtcbn07XG5cbi8qKlxuICogSGVscGVyIGZ1bmN0aW9uIHRoYXQgY3JlYXRlcyBhIFRleHR1cmUgb2JqZWN0IGZyb20gdGhlIGdpdmVuIGltYWdlIHVybC5cbiAqIElmIHRoZSBpbWFnZSBpcyBub3QgaW4gdGhlIHRleHR1cmUgY2FjaGUgaXQgd2lsbCBiZSAgY3JlYXRlZCBhbmQgbG9hZGVkLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBwYXJhbSBpbWFnZVVybCB7c3RyaW5nfSBUaGUgaW1hZ2UgdXJsIG9mIHRoZSB0ZXh0dXJlXG4gKiBAcGFyYW0gY3Jvc3NvcmlnaW4ge2Jvb2xlYW59IFdoZXRoZXIgcmVxdWVzdHMgc2hvdWxkIGJlIHRyZWF0ZWQgYXMgY3Jvc3NvcmlnaW5cbiAqIEBwYXJhbSBzY2FsZU1vZGUge251bWJlcn0gU2VlIHtAbGluayBQSVhJLlNDQUxFX01PREVTfSBmb3IgcG9zc2libGUgdmFsdWVzXG4gKiBAcmV0dXJuIHtQSVhJLlRleHR1cmV9IFRoZSBuZXdseSBjcmVhdGVkIHRleHR1cmVcbiAqL1xuVGV4dHVyZS5mcm9tSW1hZ2UgPSBmdW5jdGlvbiAoaW1hZ2VVcmwsIGNyb3Nzb3JpZ2luLCBzY2FsZU1vZGUpXG57XG4gICAgdmFyIHRleHR1cmUgPSB1dGlscy5UZXh0dXJlQ2FjaGVbaW1hZ2VVcmxdO1xuXG4gICAgaWYgKCF0ZXh0dXJlKVxuICAgIHtcbiAgICAgICAgdGV4dHVyZSA9IG5ldyBUZXh0dXJlKEJhc2VUZXh0dXJlLmZyb21JbWFnZShpbWFnZVVybCwgY3Jvc3NvcmlnaW4sIHNjYWxlTW9kZSkpO1xuICAgICAgICB1dGlscy5UZXh0dXJlQ2FjaGVbaW1hZ2VVcmxdID0gdGV4dHVyZTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGV4dHVyZTtcbn07XG5cbi8qKlxuICogSGVscGVyIGZ1bmN0aW9uIHRoYXQgY3JlYXRlcyBhIHNwcml0ZSB0aGF0IHdpbGwgY29udGFpbiBhIHRleHR1cmUgZnJvbSB0aGUgVGV4dHVyZUNhY2hlIGJhc2VkIG9uIHRoZSBmcmFtZUlkXG4gKiBUaGUgZnJhbWUgaWRzIGFyZSBjcmVhdGVkIHdoZW4gYSBUZXh0dXJlIHBhY2tlciBmaWxlIGhhcyBiZWVuIGxvYWRlZFxuICpcbiAqIEBzdGF0aWNcbiAqIEBwYXJhbSBmcmFtZUlkIHtzdHJpbmd9IFRoZSBmcmFtZSBJZCBvZiB0aGUgdGV4dHVyZSBpbiB0aGUgY2FjaGVcbiAqIEByZXR1cm4ge1BJWEkuVGV4dHVyZX0gVGhlIG5ld2x5IGNyZWF0ZWQgdGV4dHVyZVxuICovXG5UZXh0dXJlLmZyb21GcmFtZSA9IGZ1bmN0aW9uIChmcmFtZUlkKVxue1xuICAgIHZhciB0ZXh0dXJlID0gdXRpbHMuVGV4dHVyZUNhY2hlW2ZyYW1lSWRdO1xuXG4gICAgaWYgKCF0ZXh0dXJlKVxuICAgIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdUaGUgZnJhbWVJZCBcIicgKyBmcmFtZUlkICsgJ1wiIGRvZXMgbm90IGV4aXN0IGluIHRoZSB0ZXh0dXJlIGNhY2hlJyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRleHR1cmU7XG59O1xuXG4vKipcbiAqIEhlbHBlciBmdW5jdGlvbiB0aGF0IGNyZWF0ZXMgYSBuZXcgVGV4dHVyZSBiYXNlZCBvbiB0aGUgZ2l2ZW4gY2FudmFzIGVsZW1lbnQuXG4gKlxuICogQHN0YXRpY1xuICogQHBhcmFtIGNhbnZhcyB7Q2FudmFzfSBUaGUgY2FudmFzIGVsZW1lbnQgc291cmNlIG9mIHRoZSB0ZXh0dXJlXG4gKiBAcGFyYW0gc2NhbGVNb2RlIHtudW1iZXJ9IFNlZSB7QGxpbmsgUElYSS5TQ0FMRV9NT0RFU30gZm9yIHBvc3NpYmxlIHZhbHVlc1xuICogQHJldHVybiB7UElYSS5UZXh0dXJlfVxuICovXG5UZXh0dXJlLmZyb21DYW52YXMgPSBmdW5jdGlvbiAoY2FudmFzLCBzY2FsZU1vZGUpXG57XG4gICAgcmV0dXJuIG5ldyBUZXh0dXJlKEJhc2VUZXh0dXJlLmZyb21DYW52YXMoY2FudmFzLCBzY2FsZU1vZGUpKTtcbn07XG5cbi8qKlxuICogSGVscGVyIGZ1bmN0aW9uIHRoYXQgY3JlYXRlcyBhIG5ldyBUZXh0dXJlIGJhc2VkIG9uIHRoZSBnaXZlbiB2aWRlbyBlbGVtZW50LlxuICpcbiAqIEBzdGF0aWNcbiAqIEBwYXJhbSB2aWRlbyB7SFRNTFZpZGVvRWxlbWVudH1cbiAqIEBwYXJhbSBzY2FsZU1vZGUge251bWJlcn0gU2VlIHtAbGluayBQSVhJLlNDQUxFX01PREVTfSBmb3IgcG9zc2libGUgdmFsdWVzXG4gKiBAcmV0dXJuIHtQSVhJLlRleHR1cmV9IEEgVGV4dHVyZVxuICovXG5UZXh0dXJlLmZyb21WaWRlbyA9IGZ1bmN0aW9uICh2aWRlbywgc2NhbGVNb2RlKVxue1xuICAgIGlmICh0eXBlb2YgdmlkZW8gPT09ICdzdHJpbmcnKVxuICAgIHtcbiAgICAgICAgcmV0dXJuIFRleHR1cmUuZnJvbVZpZGVvVXJsKHZpZGVvLCBzY2FsZU1vZGUpO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICByZXR1cm4gbmV3IFRleHR1cmUoVmlkZW9CYXNlVGV4dHVyZS5mcm9tVmlkZW8odmlkZW8sIHNjYWxlTW9kZSkpO1xuICAgIH1cbn07XG5cbi8qKlxuICogSGVscGVyIGZ1bmN0aW9uIHRoYXQgY3JlYXRlcyBhIG5ldyBUZXh0dXJlIGJhc2VkIG9uIHRoZSB2aWRlbyB1cmwuXG4gKlxuICogQHN0YXRpY1xuICogQHBhcmFtIHZpZGVvVXJsIHtzdHJpbmd9XG4gKiBAcGFyYW0gc2NhbGVNb2RlIHtudW1iZXJ9IFNlZSB7QGxpbmsgUElYSS5TQ0FMRV9NT0RFU30gZm9yIHBvc3NpYmxlIHZhbHVlc1xuICogQHJldHVybiB7UElYSS5UZXh0dXJlfSBBIFRleHR1cmVcbiAqL1xuVGV4dHVyZS5mcm9tVmlkZW9VcmwgPSBmdW5jdGlvbiAodmlkZW9VcmwsIHNjYWxlTW9kZSlcbntcbiAgICByZXR1cm4gbmV3IFRleHR1cmUoVmlkZW9CYXNlVGV4dHVyZS5mcm9tVXJsKHZpZGVvVXJsLCBzY2FsZU1vZGUpKTtcbn07XG5cbi8qKlxuICogQWRkcyBhIHRleHR1cmUgdG8gdGhlIGdsb2JhbCB1dGlscy5UZXh0dXJlQ2FjaGUuIFRoaXMgY2FjaGUgaXMgc2hhcmVkIGFjcm9zcyB0aGUgd2hvbGUgUElYSSBvYmplY3QuXG4gKlxuICogQHN0YXRpY1xuICogQHBhcmFtIHRleHR1cmUge1BJWEkuVGV4dHVyZX0gVGhlIFRleHR1cmUgdG8gYWRkIHRvIHRoZSBjYWNoZS5cbiAqIEBwYXJhbSBpZCB7c3RyaW5nfSBUaGUgaWQgdGhhdCB0aGUgdGV4dHVyZSB3aWxsIGJlIHN0b3JlZCBhZ2FpbnN0LlxuICovXG5UZXh0dXJlLmFkZFRleHR1cmVUb0NhY2hlID0gZnVuY3Rpb24gKHRleHR1cmUsIGlkKVxue1xuICAgIHV0aWxzLlRleHR1cmVDYWNoZVtpZF0gPSB0ZXh0dXJlO1xufTtcblxuLyoqXG4gKiBSZW1vdmUgYSB0ZXh0dXJlIGZyb20gdGhlIGdsb2JhbCB1dGlscy5UZXh0dXJlQ2FjaGUuXG4gKlxuICogQHN0YXRpY1xuICogQHBhcmFtIGlkIHtzdHJpbmd9IFRoZSBpZCBvZiB0aGUgdGV4dHVyZSB0byBiZSByZW1vdmVkXG4gKiBAcmV0dXJuIHtQSVhJLlRleHR1cmV9IFRoZSB0ZXh0dXJlIHRoYXQgd2FzIHJlbW92ZWRcbiAqL1xuVGV4dHVyZS5yZW1vdmVUZXh0dXJlRnJvbUNhY2hlID0gZnVuY3Rpb24gKGlkKVxue1xuICAgIHZhciB0ZXh0dXJlID0gdXRpbHMuVGV4dHVyZUNhY2hlW2lkXTtcblxuICAgIGRlbGV0ZSB1dGlscy5UZXh0dXJlQ2FjaGVbaWRdO1xuICAgIGRlbGV0ZSB1dGlscy5CYXNlVGV4dHVyZUNhY2hlW2lkXTtcblxuICAgIHJldHVybiB0ZXh0dXJlO1xufTtcblxuLyoqXG4gKiBBbiBlbXB0eSB0ZXh0dXJlLCB1c2VkIG9mdGVuIHRvIG5vdCBoYXZlIHRvIGNyZWF0ZSBtdWx0aXBsZSBlbXB0eSB0ZXh0dXJlcy5cbiAqXG4gKiBAc3RhdGljXG4gKiBAY29uc3RhbnRcbiAqL1xuVGV4dHVyZS5FTVBUWSA9IG5ldyBUZXh0dXJlKG5ldyBCYXNlVGV4dHVyZSgpKTtcbiIsIlxuLyoqXG4gKiBBIHN0YW5kYXJkIG9iamVjdCB0byBzdG9yZSB0aGUgVXZzIG9mIGEgdGV4dHVyZVxuICpcbiAqIEBjbGFzc1xuICogQHByaXZhdGVcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKi9cbmZ1bmN0aW9uIFRleHR1cmVVdnMoKVxue1xuICAgIHRoaXMueDAgPSAwO1xuICAgIHRoaXMueTAgPSAwO1xuXG4gICAgdGhpcy54MSA9IDE7XG4gICAgdGhpcy55MSA9IDA7XG5cbiAgICB0aGlzLngyID0gMTtcbiAgICB0aGlzLnkyID0gMTtcblxuICAgIHRoaXMueDMgPSAwO1xuICAgIHRoaXMueTMgPSAxO1xuXG4gICAgdGhpcy54eTBfdWludDMyID0gMDtcbiAgICB0aGlzLnh5MV91aW50MzIgPSAwO1xuICAgIHRoaXMueHkyX3VpbnQzMiA9IDA7XG4gICAgdGhpcy54eTNfdWludDMyID0gMDtcblxuICAgIHRoaXMudXZzX3VpbnQzMiA9IG5ldyBVaW50MzJBcnJheSg0KVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IFRleHR1cmVVdnM7XG5cbi8qKlxuICogU2V0cyB0aGUgdGV4dHVyZSBVdnMgYmFzZWQgb24gdGhlIGdpdmVuIGZyYW1lIGluZm9ybWF0aW9uXG4gKiBAcGFyYW0gZnJhbWUge1BJWEkuUmVjdGFuZ2xlfVxuICogQHBhcmFtIGJhc2VGcmFtZSB7UElYSS5SZWN0YW5nbGV9XG4gKiBAcGFyYW0gcm90YXRlIHtib29sZWFufSBXaGV0aGVyIG9yIG5vdCB0aGUgZnJhbWUgaXMgcm90YXRlZFxuICogQHByaXZhdGVcbiAqL1xuVGV4dHVyZVV2cy5wcm90b3R5cGUuc2V0ID0gZnVuY3Rpb24gKGZyYW1lLCBiYXNlRnJhbWUsIHJvdGF0ZSlcbntcbiAgICB2YXIgdHcgPSBiYXNlRnJhbWUud2lkdGg7XG4gICAgdmFyIHRoID0gYmFzZUZyYW1lLmhlaWdodDtcblxuICAgIGlmKHJvdGF0ZSlcbiAgICB7XG4gICAgICAgIHRoaXMueDAgPSAoZnJhbWUueCArIGZyYW1lLmhlaWdodCkgLyB0dztcbiAgICAgICAgdGhpcy55MCA9IGZyYW1lLnkgLyB0aDtcblxuICAgICAgICB0aGlzLngxID0gKGZyYW1lLnggKyBmcmFtZS5oZWlnaHQpIC8gdHc7XG4gICAgICAgIHRoaXMueTEgPSAoZnJhbWUueSArIGZyYW1lLndpZHRoKSAvIHRoO1xuXG4gICAgICAgIHRoaXMueDIgPSBmcmFtZS54IC8gdHc7XG4gICAgICAgIHRoaXMueTIgPSAoZnJhbWUueSArIGZyYW1lLndpZHRoKSAvIHRoO1xuXG4gICAgICAgIHRoaXMueDMgPSBmcmFtZS54IC8gdHc7XG4gICAgICAgIHRoaXMueTMgPSBmcmFtZS55IC8gdGg7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG5cbiAgICAgICAgdGhpcy54MCA9IGZyYW1lLnggLyB0dztcbiAgICAgICAgdGhpcy55MCA9IGZyYW1lLnkgLyB0aDtcblxuICAgICAgICB0aGlzLngxID0gKGZyYW1lLnggKyBmcmFtZS53aWR0aCkgLyB0dztcbiAgICAgICAgdGhpcy55MSA9IGZyYW1lLnkgLyB0aDtcblxuICAgICAgICB0aGlzLngyID0gKGZyYW1lLnggKyBmcmFtZS53aWR0aCkgLyB0dztcbiAgICAgICAgdGhpcy55MiA9IChmcmFtZS55ICsgZnJhbWUuaGVpZ2h0KSAvIHRoO1xuXG4gICAgICAgIHRoaXMueDMgPSBmcmFtZS54IC8gdHc7XG4gICAgICAgIHRoaXMueTMgPSAoZnJhbWUueSArIGZyYW1lLmhlaWdodCkgLyB0aDtcbiAgICB9XG5cbiAgICB0aGlzLnV2c191aW50MzJbMF0gPSAoKCh0aGlzLnkwICogNjU1MzUpICYgMHhGRkZGKSA8PCAxNikgfCAoKHRoaXMueDAgKiA2NTUzNSkgJiAweEZGRkYpO1xuICAgIHRoaXMudXZzX3VpbnQzMlsxXSA9ICgoKHRoaXMueTEgKiA2NTUzNSkgJiAweEZGRkYpIDw8IDE2KSB8ICgodGhpcy54MSAqIDY1NTM1KSAmIDB4RkZGRik7XG4gICAgdGhpcy51dnNfdWludDMyWzJdID0gKCgodGhpcy55MiAqIDY1NTM1KSAmIDB4RkZGRikgPDwgMTYpIHwgKCh0aGlzLngyICogNjU1MzUpICYgMHhGRkZGKTtcbiAgICB0aGlzLnV2c191aW50MzJbM10gPSAoKCh0aGlzLnkzICogNjU1MzUpICYgMHhGRkZGKSA8PCAxNikgfCAoKHRoaXMueDMgKiA2NTUzNSkgJiAweEZGRkYpO1xufTtcbiIsInZhciBCYXNlVGV4dHVyZSA9IHJlcXVpcmUoJy4vQmFzZVRleHR1cmUnKSxcbiAgICB1dGlscyA9IHJlcXVpcmUoJy4uL3V0aWxzJyk7XG5cbi8qKlxuICogQSB0ZXh0dXJlIG9mIGEgW3BsYXlpbmddIFZpZGVvLlxuICpcbiAqIFZpZGVvIGJhc2UgdGV4dHVyZXMgbWltaWMgUGl4aSBCYXNlVGV4dHVyZS5mcm9tLi4uLiBtZXRob2QgaW4gdGhlaXIgY3JlYXRpb24gcHJvY2Vzcy5cbiAqXG4gKiBUaGlzIGNhbiBiZSB1c2VkIGluIHNldmVyYWwgd2F5cywgc3VjaCBhczpcbiAqXG4gKiBgYGBqc1xuICogdmFyIHRleHR1cmUgPSBQSVhJLlZpZGVvQmFzZVRleHR1cmUuZnJvbVVybCgnaHR0cDovL215ZG9tYWluLmNvbS92aWRlby5tcDQnKTtcbiAqXG4gKiB2YXIgdGV4dHVyZSA9IFBJWEkuVmlkZW9CYXNlVGV4dHVyZS5mcm9tVXJsKHsgc3JjOiAnaHR0cDovL215ZG9tYWluLmNvbS92aWRlby5tcDQnLCBtaW1lOiAndmlkZW8vbXA0JyB9KTtcbiAqXG4gKiB2YXIgdGV4dHVyZSA9IFBJWEkuVmlkZW9CYXNlVGV4dHVyZS5mcm9tVXJscyhbJy92aWRlby53ZWJtJywgJy92aWRlby5tcDQnXSk7XG4gKlxuICogdmFyIHRleHR1cmUgPSBQSVhJLlZpZGVvQmFzZVRleHR1cmUuZnJvbVVybHMoW1xuICogICAgIHsgc3JjOiAnL3ZpZGVvLndlYm0nLCBtaW1lOiAndmlkZW8vd2VibScgfSxcbiAqICAgICB7IHNyYzogJy92aWRlby5tcDQnLCBtaW1lOiAndmlkZW8vbXA0JyB9XG4gKiBdKTtcbiAqIGBgYFxuICpcbiAqIFNlZSB0aGUgW1wiZGV1c1wiIGRlbW9dKGh0dHA6Ly93d3cuZ29vZGJveWRpZ2l0YWwuY29tL3BpeGlqcy9leGFtcGxlcy9kZXVzLykuXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLkJhc2VUZXh0dXJlXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIHNvdXJjZSB7SFRNTFZpZGVvRWxlbWVudH1cbiAqIEBwYXJhbSBbc2NhbGVNb2RlXSB7bnVtYmVyfSBTZWUge0BsaW5rIFBJWEkuU0NBTEVfTU9ERVN9IGZvciBwb3NzaWJsZSB2YWx1ZXNcbiAqL1xuZnVuY3Rpb24gVmlkZW9CYXNlVGV4dHVyZShzb3VyY2UsIHNjYWxlTW9kZSlcbntcbiAgICBpZiAoIXNvdXJjZSlcbiAgICB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignTm8gdmlkZW8gc291cmNlIGVsZW1lbnQgc3BlY2lmaWVkLicpO1xuICAgIH1cblxuICAgIC8vIGhvb2sgaW4gaGVyZSB0byBjaGVjayBpZiB2aWRlbyBpcyBhbHJlYWR5IGF2YWlsYWJsZS5cbiAgICAvLyBCYXNlVGV4dHVyZSBsb29rcyBmb3IgYSBzb3VyY2UuY29tcGxldGUgYm9vbGVhbiwgcGx1cyB3aWR0aCAmIGhlaWdodC5cblxuICAgIGlmICgoc291cmNlLnJlYWR5U3RhdGUgPT09IHNvdXJjZS5IQVZFX0VOT1VHSF9EQVRBIHx8IHNvdXJjZS5yZWFkeVN0YXRlID09PSBzb3VyY2UuSEFWRV9GVVRVUkVfREFUQSkgJiYgc291cmNlLndpZHRoICYmIHNvdXJjZS5oZWlnaHQpXG4gICAge1xuICAgICAgICBzb3VyY2UuY29tcGxldGUgPSB0cnVlO1xuICAgIH1cblxuICAgIEJhc2VUZXh0dXJlLmNhbGwodGhpcywgc291cmNlLCBzY2FsZU1vZGUpO1xuXG4gICAgLyoqXG4gICAgICogU2hvdWxkIHRoZSBiYXNlIHRleHR1cmUgYXV0b21hdGljYWxseSB1cGRhdGUgaXRzZWxmLCBzZXQgdG8gdHJ1ZSBieSBkZWZhdWx0XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqIEBkZWZhdWx0IHRydWVcbiAgICAgKi9cbiAgICB0aGlzLmF1dG9VcGRhdGUgPSBmYWxzZTtcblxuICAgIHRoaXMuX29uVXBkYXRlID0gdGhpcy5fb25VcGRhdGUuYmluZCh0aGlzKTtcbiAgICB0aGlzLl9vbkNhblBsYXkgPSB0aGlzLl9vbkNhblBsYXkuYmluZCh0aGlzKTtcblxuICAgIGlmICghc291cmNlLmNvbXBsZXRlKVxuICAgIHtcbiAgICAgICAgc291cmNlLmFkZEV2ZW50TGlzdGVuZXIoJ2NhbnBsYXknLCB0aGlzLl9vbkNhblBsYXkpO1xuICAgICAgICBzb3VyY2UuYWRkRXZlbnRMaXN0ZW5lcignY2FucGxheXRocm91Z2gnLCB0aGlzLl9vbkNhblBsYXkpO1xuXG4gICAgICAgIC8vIHN0YXJ0ZWQgcGxheWluZy4uXG4gICAgICAgIHNvdXJjZS5hZGRFdmVudExpc3RlbmVyKCdwbGF5JywgdGhpcy5fb25QbGF5U3RhcnQuYmluZCh0aGlzKSk7XG4gICAgICAgIHNvdXJjZS5hZGRFdmVudExpc3RlbmVyKCdwYXVzZScsIHRoaXMuX29uUGxheVN0b3AuYmluZCh0aGlzKSk7XG4gICAgfVxuXG4gICAgdGhpcy5fX2xvYWRlZCA9IGZhbHNlO1xufVxuXG5WaWRlb0Jhc2VUZXh0dXJlLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoQmFzZVRleHR1cmUucHJvdG90eXBlKTtcblZpZGVvQmFzZVRleHR1cmUucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gVmlkZW9CYXNlVGV4dHVyZTtcbm1vZHVsZS5leHBvcnRzID0gVmlkZW9CYXNlVGV4dHVyZTtcblxuLyoqXG4gKiBUaGUgaW50ZXJuYWwgdXBkYXRlIGxvb3Agb2YgdGhlIHZpZGVvIGJhc2UgdGV4dHVyZSwgb25seSBydW5zIHdoZW4gYXV0b1VwZGF0ZSBpcyBzZXQgdG8gdHJ1ZVxuICpcbiAqIEBwcml2YXRlXG4gKi9cblZpZGVvQmFzZVRleHR1cmUucHJvdG90eXBlLl9vblVwZGF0ZSA9IGZ1bmN0aW9uICgpXG57XG4gICAgaWYgKHRoaXMuYXV0b1VwZGF0ZSlcbiAgICB7XG4gICAgICAgIHdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUodGhpcy5fb25VcGRhdGUpO1xuICAgICAgICB0aGlzLnVwZGF0ZSgpO1xuICAgIH1cbn07XG5cbi8qKlxuICogUnVucyB0aGUgdXBkYXRlIGxvb3Agd2hlbiB0aGUgdmlkZW8gaXMgcmVhZHkgdG8gcGxheVxuICpcbiAqIEBwcml2YXRlXG4gKi9cblZpZGVvQmFzZVRleHR1cmUucHJvdG90eXBlLl9vblBsYXlTdGFydCA9IGZ1bmN0aW9uICgpXG57XG4gICAgaWYgKCF0aGlzLmF1dG9VcGRhdGUpXG4gICAge1xuICAgICAgICB3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lKHRoaXMuX29uVXBkYXRlKTtcbiAgICAgICAgdGhpcy5hdXRvVXBkYXRlID0gdHJ1ZTtcbiAgICB9XG59O1xuXG4vKipcbiAqIEZpcmVkIHdoZW4gYSBwYXVzZSBldmVudCBpcyB0cmlnZ2VyZWQsIHN0b3BzIHRoZSB1cGRhdGUgbG9vcFxuICpcbiAqIEBwcml2YXRlXG4gKi9cblZpZGVvQmFzZVRleHR1cmUucHJvdG90eXBlLl9vblBsYXlTdG9wID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLmF1dG9VcGRhdGUgPSBmYWxzZTtcbn07XG5cbi8qKlxuICogRmlyZWQgd2hlbiB0aGUgdmlkZW8gaXMgbG9hZGVkIGFuZCByZWFkeSB0byBwbGF5XG4gKlxuICogQHByaXZhdGVcbiAqL1xuVmlkZW9CYXNlVGV4dHVyZS5wcm90b3R5cGUuX29uQ2FuUGxheSA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy5oYXNMb2FkZWQgPSB0cnVlO1xuXG4gICAgaWYgKHRoaXMuc291cmNlKVxuICAgIHtcbiAgICAgICAgdGhpcy5zb3VyY2UucmVtb3ZlRXZlbnRMaXN0ZW5lcignY2FucGxheScsIHRoaXMuX29uQ2FuUGxheSk7XG4gICAgICAgIHRoaXMuc291cmNlLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2NhbnBsYXl0aHJvdWdoJywgdGhpcy5fb25DYW5QbGF5KTtcblxuICAgICAgICB0aGlzLndpZHRoID0gdGhpcy5zb3VyY2UudmlkZW9XaWR0aDtcbiAgICAgICAgdGhpcy5oZWlnaHQgPSB0aGlzLnNvdXJjZS52aWRlb0hlaWdodDtcblxuICAgICAgICB0aGlzLnNvdXJjZS5wbGF5KCk7XG5cbiAgICAgICAgLy8gcHJldmVudCBtdWx0aXBsZSBsb2FkZWQgZGlzcGF0Y2hlcy4uXG4gICAgICAgIGlmICghdGhpcy5fX2xvYWRlZClcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5fX2xvYWRlZCA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLmVtaXQoJ2xvYWRlZCcsIHRoaXMpO1xuICAgICAgICB9XG4gICAgfVxufTtcblxuLyoqXG4gKiBEZXN0cm95cyB0aGlzIHRleHR1cmVcbiAqXG4gKi9cblZpZGVvQmFzZVRleHR1cmUucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoKVxue1xuICAgIGlmICh0aGlzLnNvdXJjZSAmJiB0aGlzLnNvdXJjZS5fcGl4aUlkKVxuICAgIHtcbiAgICAgICAgZGVsZXRlIHV0aWxzLkJhc2VUZXh0dXJlQ2FjaGVbIHRoaXMuc291cmNlLl9waXhpSWQgXTtcbiAgICAgICAgZGVsZXRlIHRoaXMuc291cmNlLl9waXhpSWQ7XG4gICAgfVxuXG4gICAgQmFzZVRleHR1cmUucHJvdG90eXBlLmRlc3Ryb3kuY2FsbCh0aGlzKTtcbn07XG5cbi8qKlxuICogTWltaWMgUGl4aSBCYXNlVGV4dHVyZS5mcm9tLi4uLiBtZXRob2QuXG4gKlxuICogQHN0YXRpY1xuICogQHBhcmFtIHZpZGVvIHtIVE1MVmlkZW9FbGVtZW50fVxuICogQHBhcmFtIHNjYWxlTW9kZSB7bnVtYmVyfSBTZWUge0BsaW5rIFBJWEkuU0NBTEVfTU9ERVN9IGZvciBwb3NzaWJsZSB2YWx1ZXNcbiAqIEByZXR1cm4ge1BJWEkuVmlkZW9CYXNlVGV4dHVyZX1cbiAqL1xuVmlkZW9CYXNlVGV4dHVyZS5mcm9tVmlkZW8gPSBmdW5jdGlvbiAodmlkZW8sIHNjYWxlTW9kZSlcbntcbiAgICBpZiAoIXZpZGVvLl9waXhpSWQpXG4gICAge1xuICAgICAgICB2aWRlby5fcGl4aUlkID0gJ3ZpZGVvXycgKyB1dGlscy51aWQoKTtcbiAgICB9XG5cbiAgICB2YXIgYmFzZVRleHR1cmUgPSB1dGlscy5CYXNlVGV4dHVyZUNhY2hlW3ZpZGVvLl9waXhpSWRdO1xuXG4gICAgaWYgKCFiYXNlVGV4dHVyZSlcbiAgICB7XG4gICAgICAgIGJhc2VUZXh0dXJlID0gbmV3IFZpZGVvQmFzZVRleHR1cmUodmlkZW8sIHNjYWxlTW9kZSk7XG4gICAgICAgIHV0aWxzLkJhc2VUZXh0dXJlQ2FjaGVbIHZpZGVvLl9waXhpSWQgXSA9IGJhc2VUZXh0dXJlO1xuICAgIH1cblxuICAgIHJldHVybiBiYXNlVGV4dHVyZTtcbn07XG5cbi8qKlxuICogSGVscGVyIGZ1bmN0aW9uIHRoYXQgY3JlYXRlcyBhIG5ldyBCYXNlVGV4dHVyZSBiYXNlZCBvbiB0aGUgZ2l2ZW4gdmlkZW8gZWxlbWVudC5cbiAqIFRoaXMgQmFzZVRleHR1cmUgY2FuIHRoZW4gYmUgdXNlZCB0byBjcmVhdGUgYSB0ZXh0dXJlXG4gKlxuICogQHN0YXRpY1xuICogQHBhcmFtIHZpZGVvU3JjIHtzdHJpbmd8b2JqZWN0fHN0cmluZ1tdfG9iamVjdFtdfSBUaGUgVVJMKHMpIGZvciB0aGUgdmlkZW8uXG4gKiBAcGFyYW0gW3ZpZGVvU3JjLnNyY10ge3N0cmluZ30gT25lIG9mIHRoZSBzb3VyY2UgdXJscyBmb3IgdGhlIHZpZGVvXG4gKiBAcGFyYW0gW3ZpZGVvU3JjLm1pbWVdIHtzdHJpbmd9IFRoZSBtaW1ldHlwZSBvZiB0aGUgdmlkZW8gKGUuZy4gJ3ZpZGVvL21wNCcpLiBJZiBub3Qgc3BlY2lmaWVkXG4gKiAgdGhlIHVybCdzIGV4dGVuc2lvbiB3aWxsIGJlIHVzZWQgYXMgdGhlIHNlY29uZCBwYXJ0IG9mIHRoZSBtaW1lIHR5cGUuXG4gKiBAcGFyYW0gc2NhbGVNb2RlIHtudW1iZXJ9IFNlZSB7QGxpbmsgUElYSS5TQ0FMRV9NT0RFU30gZm9yIHBvc3NpYmxlIHZhbHVlc1xuICogQHJldHVybiB7UElYSS5WaWRlb0Jhc2VUZXh0dXJlfVxuICovXG5WaWRlb0Jhc2VUZXh0dXJlLmZyb21VcmwgPSBmdW5jdGlvbiAodmlkZW9TcmMsIHNjYWxlTW9kZSlcbntcbiAgICB2YXIgdmlkZW8gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd2aWRlbycpO1xuXG4gICAgLy8gYXJyYXkgb2Ygb2JqZWN0cyBvciBzdHJpbmdzXG4gICAgaWYgKEFycmF5LmlzQXJyYXkodmlkZW9TcmMpKVxuICAgIHtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB2aWRlb1NyYy5sZW5ndGg7ICsraSlcbiAgICAgICAge1xuICAgICAgICAgICAgdmlkZW8uYXBwZW5kQ2hpbGQoY3JlYXRlU291cmNlKHZpZGVvU3JjW2ldLnNyYyB8fCB2aWRlb1NyY1tpXSwgdmlkZW9TcmNbaV0ubWltZSkpO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8vIHNpbmdsZSBvYmplY3Qgb3Igc3RyaW5nXG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgdmlkZW8uYXBwZW5kQ2hpbGQoY3JlYXRlU291cmNlKHZpZGVvU3JjLnNyYyB8fCB2aWRlb1NyYywgdmlkZW9TcmMubWltZSkpO1xuICAgIH1cblxuICAgIHZpZGVvLmxvYWQoKTtcbiAgICB2aWRlby5wbGF5KCk7XG5cbiAgICByZXR1cm4gVmlkZW9CYXNlVGV4dHVyZS5mcm9tVmlkZW8odmlkZW8sIHNjYWxlTW9kZSk7XG59O1xuXG5WaWRlb0Jhc2VUZXh0dXJlLmZyb21VcmxzID0gVmlkZW9CYXNlVGV4dHVyZS5mcm9tVXJsO1xuXG5mdW5jdGlvbiBjcmVhdGVTb3VyY2UocGF0aCwgdHlwZSlcbntcbiAgICBpZiAoIXR5cGUpXG4gICAge1xuICAgICAgICB0eXBlID0gJ3ZpZGVvLycgKyBwYXRoLnN1YnN0cihwYXRoLmxhc3RJbmRleE9mKCcuJykgKyAxKTtcbiAgICB9XG5cbiAgICB2YXIgc291cmNlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc291cmNlJyk7XG5cbiAgICBzb3VyY2Uuc3JjID0gcGF0aDtcbiAgICBzb3VyY2UudHlwZSA9IHR5cGU7XG5cbiAgICByZXR1cm4gc291cmNlO1xufVxuIiwidmFyIENPTlNUID0gcmVxdWlyZSgnLi4vY29uc3QnKSxcbiAgICBFdmVudEVtaXR0ZXIgPSByZXF1aXJlKCdldmVudGVtaXR0ZXIzJyksXG4gICAgLy8gSW50ZXJuYWwgZXZlbnQgdXNlZCBieSBjb21wb3NlZCBlbWl0dGVyXG4gICAgVElDSyA9ICd0aWNrJztcblxuLyoqXG4gKiBBIFRpY2tlciBjbGFzcyB0aGF0IHJ1bnMgYW4gdXBkYXRlIGxvb3AgdGhhdCBvdGhlciBvYmplY3RzIGxpc3RlbiB0by5cbiAqIFRoaXMgY2xhc3MgaXMgY29tcG9zZWQgYXJvdW5kIGFuIEV2ZW50RW1pdHRlciBvYmplY3QgdG8gYWRkIGxpc3RlbmVyc1xuICogbWVhbnQgZm9yIGV4ZWN1dGlvbiBvbiB0aGUgbmV4dCByZXF1ZXN0ZWQgYW5pbWF0aW9uIGZyYW1lLlxuICogQW5pbWF0aW9uIGZyYW1lcyBhcmUgcmVxdWVzdGVkIG9ubHkgd2hlbiBuZWNlc3NhcnksXG4gKiBlLmcuIFdoZW4gdGhlIHRpY2tlciBpcyBzdGFydGVkIGFuZCB0aGUgZW1pdHRlciBoYXMgbGlzdGVuZXJzLlxuICpcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWEkudGlja2VyXG4gKi9cbmZ1bmN0aW9uIFRpY2tlcigpXG57XG4gICAgdmFyIF90aGlzID0gdGhpcztcblxuICAgIC8qKlxuICAgICAqIEludGVybmFsIHRpY2sgbWV0aG9kIGJvdW5kIHRvIHRpY2tlciBpbnN0YW5jZS5cbiAgICAgKiBUaGlzIGlzIGJlY2F1c2UgaW4gZWFybHkgMjAxNSwgRnVuY3Rpb24uYmluZFxuICAgICAqIGlzIHN0aWxsIDYwJSBzbG93ZXIgaW4gaGlnaCBwZXJmb3JtYW5jZSBzY2VuYXJpb3MuXG4gICAgICogQWxzbyBzZXBhcmF0aW5nIGZyYW1lIHJlcXVlc3RzIGZyb20gdXBkYXRlIG1ldGhvZFxuICAgICAqIHNvIGxpc3RlbmVycyBtYXkgYmUgY2FsbGVkIGF0IGFueSB0aW1lIGFuZCB3aXRoXG4gICAgICogYW55IGFuaW1hdGlvbiBBUEksIGp1c3QgaW52b2tlIHRpY2tlci51cGRhdGUodGltZSkuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX3RpY2sgPSBmdW5jdGlvbiBfdGljayh0aW1lKSB7XG5cbiAgICAgICAgX3RoaXMuX3JlcXVlc3RJZCA9IG51bGw7XG5cbiAgICAgICAgaWYgKF90aGlzLnN0YXJ0ZWQpXG4gICAgICAgIHtcbiAgICAgICAgICAgIC8vIEludm9rZSBsaXN0ZW5lcnMgbm93XG4gICAgICAgICAgICBfdGhpcy51cGRhdGUodGltZSk7XG4gICAgICAgICAgICAvLyBMaXN0ZW5lciBzaWRlIGVmZmVjdHMgbWF5IGhhdmUgbW9kaWZpZWQgdGlja2VyIHN0YXRlLlxuICAgICAgICAgICAgaWYgKF90aGlzLnN0YXJ0ZWQgJiYgX3RoaXMuX3JlcXVlc3RJZCA9PT0gbnVsbCAmJiBfdGhpcy5fZW1pdHRlci5saXN0ZW5lcnMoVElDSywgdHJ1ZSkpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgX3RoaXMuX3JlcXVlc3RJZCA9IHJlcXVlc3RBbmltYXRpb25GcmFtZShfdGhpcy5fdGljayk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgLyoqXG4gICAgICogSW50ZXJuYWwgZW1pdHRlciB1c2VkIHRvIGZpcmUgJ3RpY2snIGV2ZW50XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9lbWl0dGVyID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gICAgLyoqXG4gICAgICogSW50ZXJuYWwgY3VycmVudCBmcmFtZSByZXF1ZXN0IElEXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9yZXF1ZXN0SWQgPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogSW50ZXJuYWwgdmFsdWUgbWFuYWdlZCBieSBtaW5GUFMgcHJvcGVydHkgc2V0dGVyIGFuZCBnZXR0ZXIuXG4gICAgICogVGhpcyBpcyB0aGUgbWF4aW11bSBhbGxvd2VkIG1pbGxpc2Vjb25kcyBiZXR3ZWVuIHVwZGF0ZXMuXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9tYXhFbGFwc2VkTVMgPSAxMDA7XG5cbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIG9yIG5vdCB0aGlzIHRpY2tlciBzaG91bGQgaW52b2tlIHRoZSBtZXRob2RcbiAgICAgKiB7QGxpbmsgUElYSS50aWNrZXIuVGlja2VyI3N0YXJ0fSBhdXRvbWF0aWNhbGx5XG4gICAgICogd2hlbiBhIGxpc3RlbmVyIGlzIGFkZGVkLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgICAqL1xuICAgIHRoaXMuYXV0b1N0YXJ0ID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBTY2FsYXIgdGltZSB2YWx1ZSBmcm9tIGxhc3QgZnJhbWUgdG8gdGhpcyBmcmFtZS5cbiAgICAgKiBUaGlzIHZhbHVlIGlzIGNhcHBlZCBieSBzZXR0aW5nIHtAbGluayBQSVhJLnRpY2tlci5UaWNrZXIjbWluRlBTfVxuICAgICAqIGFuZCBpcyBzY2FsZWQgd2l0aCB7QGxpbmsgUElYSS50aWNrZXIuVGlja2VyI3NwZWVkfS5cbiAgICAgKiAqKk5vdGU6KiogVGhlIGNhcCBtYXkgYmUgZXhjZWVkZWQgYnkgc2NhbGluZy5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAxXG4gICAgICovXG4gICAgdGhpcy5kZWx0YVRpbWUgPSAxO1xuXG4gICAgLyoqXG4gICAgICogVGltZSBlbGFwc2VkIGluIG1pbGxpc2Vjb25kcyBmcm9tIGxhc3QgZnJhbWUgdG8gdGhpcyBmcmFtZS5cbiAgICAgKiBPcHBvc2VkIHRvIHdoYXQgdGhlIHNjYWxhciB7QGxpbmsgUElYSS50aWNrZXIuVGlja2VyI2RlbHRhVGltZX1cbiAgICAgKiBpcyBiYXNlZCwgdGhpcyB2YWx1ZSBpcyBuZWl0aGVyIGNhcHBlZCBub3Igc2NhbGVkLlxuICAgICAqIElmIHRoZSBwbGF0Zm9ybSBzdXBwb3J0cyBET01IaWdoUmVzVGltZVN0YW1wLFxuICAgICAqIHRoaXMgdmFsdWUgd2lsbCBoYXZlIGEgcHJlY2lzaW9uIG9mIDEgwrVzLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7RE9NSGlnaFJlc1RpbWVTdGFtcHxudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMSAvIFRBUkdFVF9GUE1TXG4gICAgICovXG4gICAgdGhpcy5lbGFwc2VkTVMgPSAxIC8gQ09OU1QuVEFSR0VUX0ZQTVM7IC8vIGRlZmF1bHQgdG8gdGFyZ2V0IGZyYW1lIHRpbWVcblxuICAgIC8qKlxuICAgICAqIFRoZSBsYXN0IHRpbWUge0BsaW5rIFBJWEkudGlja2VyLlRpY2tlciN1cGRhdGV9IHdhcyBpbnZva2VkLlxuICAgICAqIFRoaXMgdmFsdWUgaXMgYWxzbyByZXNldCBpbnRlcm5hbGx5IG91dHNpZGUgb2YgaW52b2tpbmdcbiAgICAgKiB1cGRhdGUsIGJ1dCBvbmx5IHdoZW4gYSBuZXcgYW5pbWF0aW9uIGZyYW1lIGlzIHJlcXVlc3RlZC5cbiAgICAgKiBJZiB0aGUgcGxhdGZvcm0gc3VwcG9ydHMgRE9NSGlnaFJlc1RpbWVTdGFtcCxcbiAgICAgKiB0aGlzIHZhbHVlIHdpbGwgaGF2ZSBhIHByZWNpc2lvbiBvZiAxIMK1cy5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge0RPTUhpZ2hSZXNUaW1lU3RhbXB8bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDBcbiAgICAgKi9cbiAgICB0aGlzLmxhc3RUaW1lID0gMDtcblxuICAgIC8qKlxuICAgICAqIEZhY3RvciBvZiBjdXJyZW50IHtAbGluayBQSVhJLnRpY2tlci5UaWNrZXIjZGVsdGFUaW1lfS5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIC8vIFNjYWxlcyB0aWNrZXIuZGVsdGFUaW1lIHRvIHdoYXQgd291bGQgYmVcbiAgICAgKiAvLyB0aGUgZXF1aXZhbGVudCBvZiBhcHByb3hpbWF0ZWx5IDEyMCBGUFNcbiAgICAgKiB0aWNrZXIuc3BlZWQgPSAyO1xuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDFcbiAgICAgKi9cbiAgICB0aGlzLnNwZWVkID0gMTtcblxuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgb3Igbm90IHRoaXMgdGlja2VyIGhhcyBiZWVuIHN0YXJ0ZWQuXG4gICAgICogYHRydWVgIGlmIHtAbGluayBQSVhJLnRpY2tlci5UaWNrZXIjc3RhcnR9IGhhcyBiZWVuIGNhbGxlZC5cbiAgICAgKiBgZmFsc2VgIGlmIHtAbGluayBQSVhJLnRpY2tlci5UaWNrZXIjc3RvcH0gaGFzIGJlZW4gY2FsbGVkLlxuICAgICAqIFdoaWxlIGBmYWxzZWAsIHRoaXMgdmFsdWUgbWF5IGNoYW5nZSB0byBgdHJ1ZWAgaW4gdGhlXG4gICAgICogZXZlbnQgb2Yge0BsaW5rIFBJWEkudGlja2VyLlRpY2tlciNhdXRvU3RhcnR9IGJlaW5nIGB0cnVlYFxuICAgICAqIGFuZCBhIGxpc3RlbmVyIGlzIGFkZGVkLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgICAqL1xuICAgIHRoaXMuc3RhcnRlZCA9IGZhbHNlO1xufVxuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhUaWNrZXIucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogVGhlIGZyYW1lcyBwZXIgc2Vjb25kIGF0IHdoaWNoIHRoaXMgdGlja2VyIGlzIHJ1bm5pbmcuXG4gICAgICogVGhlIGRlZmF1bHQgaXMgYXBwcm94aW1hdGVseSA2MCBpbiBtb3N0IG1vZGVybiBicm93c2Vycy5cbiAgICAgKiAqKk5vdGU6KiogVGhpcyBkb2VzIG5vdCBmYWN0b3IgaW4gdGhlIHZhbHVlIG9mXG4gICAgICoge0BsaW5rIFBJWEkudGlja2VyLlRpY2tlciNzcGVlZH0sIHdoaWNoIGlzIHNwZWNpZmljXG4gICAgICogdG8gc2NhbGluZyB7QGxpbmsgUElYSS50aWNrZXIuVGlja2VyI2RlbHRhVGltZX0uXG4gICAgICpcbiAgICAgKiBAbWVtYmVyXG4gICAgICogQG1lbWJlcm9mIFBJWEkudGlja2VyLlRpY2tlciNcbiAgICAgKiBAcmVhZG9ubHlcbiAgICAgKi9cbiAgICBGUFM6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbigpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiAxMDAwIC8gdGhpcy5lbGFwc2VkTVM7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogTWFuYWdlcyB0aGUgbWF4aW11bSBhbW91bnQgb2YgbWlsbGlzZWNvbmRzIGFsbG93ZWQgdG9cbiAgICAgKiBlbGFwc2UgYmV0d2VlbiBpbnZva2luZyB7QGxpbmsgUElYSS50aWNrZXIuVGlja2VyI3VwZGF0ZX0uXG4gICAgICogVGhpcyB2YWx1ZSBpcyB1c2VkIHRvIGNhcCB7QGxpbmsgUElYSS50aWNrZXIuVGlja2VyI2RlbHRhVGltZX0sXG4gICAgICogYnV0IGRvZXMgbm90IGVmZmVjdCB0aGUgbWVhc3VyZWQgdmFsdWUgb2Yge0BsaW5rIFBJWEkudGlja2VyLlRpY2tlciNGUFN9LlxuICAgICAqIFdoZW4gc2V0dGluZyB0aGlzIHByb3BlcnR5IGl0IGlzIGNsYW1wZWQgdG8gYSB2YWx1ZSBiZXR3ZWVuXG4gICAgICogYDBgIGFuZCBgUElYSS5UQVJHRVRfRlBNUyAqIDEwMDBgLlxuICAgICAqXG4gICAgICogQG1lbWJlclxuICAgICAqIEBtZW1iZXJvZiBQSVhJLnRpY2tlci5UaWNrZXIjXG4gICAgICogQGRlZmF1bHQgMTBcbiAgICAgKi9cbiAgICBtaW5GUFM6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbigpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiAxMDAwIC8gdGhpcy5fbWF4RWxhcHNlZE1TO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uKGZwcylcbiAgICAgICAge1xuICAgICAgICAgICAgLy8gQ2xhbXA6IDAgdG8gVEFSR0VUX0ZQTVNcbiAgICAgICAgICAgIHZhciBtaW5GUE1TID0gTWF0aC5taW4oTWF0aC5tYXgoMCwgZnBzKSAvIDEwMDAsIENPTlNULlRBUkdFVF9GUE1TKTtcbiAgICAgICAgICAgIHRoaXMuX21heEVsYXBzZWRNUyA9IDEgLyBtaW5GUE1TO1xuICAgICAgICB9XG4gICAgfVxufSk7XG5cbi8qKlxuICogQ29uZGl0aW9uYWxseSByZXF1ZXN0cyBhIG5ldyBhbmltYXRpb24gZnJhbWUuXG4gKiBJZiBhIGZyYW1lIGhhcyBub3QgYWxyZWFkeSBiZWVuIHJlcXVlc3RlZCwgYW5kIGlmIHRoZSBpbnRlcm5hbFxuICogZW1pdHRlciBoYXMgbGlzdGVuZXJzLCBhIG5ldyBmcmFtZSBpcyByZXF1ZXN0ZWQuXG4gKlxuICogQHByaXZhdGVcbiAqL1xuVGlja2VyLnByb3RvdHlwZS5fcmVxdWVzdElmTmVlZGVkID0gZnVuY3Rpb24gX3JlcXVlc3RJZk5lZWRlZCgpXG57XG4gICAgaWYgKHRoaXMuX3JlcXVlc3RJZCA9PT0gbnVsbCAmJiB0aGlzLl9lbWl0dGVyLmxpc3RlbmVycyhUSUNLLCB0cnVlKSlcbiAgICB7XG4gICAgICAgIC8vIGVuc3VyZSBjYWxsYmFja3MgZ2V0IGNvcnJlY3QgZGVsdGFcbiAgICAgICAgdGhpcy5sYXN0VGltZSA9IHBlcmZvcm1hbmNlLm5vdygpO1xuICAgICAgICB0aGlzLl9yZXF1ZXN0SWQgPSByZXF1ZXN0QW5pbWF0aW9uRnJhbWUodGhpcy5fdGljayk7XG4gICAgfVxufTtcblxuLyoqXG4gKiBDb25kaXRpb25hbGx5IGNhbmNlbHMgYSBwZW5kaW5nIGFuaW1hdGlvbiBmcmFtZS5cbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5UaWNrZXIucHJvdG90eXBlLl9jYW5jZWxJZk5lZWRlZCA9IGZ1bmN0aW9uIF9jYW5jZWxJZk5lZWRlZCgpXG57XG4gICAgaWYgKHRoaXMuX3JlcXVlc3RJZCAhPT0gbnVsbClcbiAgICB7XG4gICAgICAgIGNhbmNlbEFuaW1hdGlvbkZyYW1lKHRoaXMuX3JlcXVlc3RJZCk7XG4gICAgICAgIHRoaXMuX3JlcXVlc3RJZCA9IG51bGw7XG4gICAgfVxufTtcblxuLyoqXG4gKiBDb25kaXRpb25hbGx5IHJlcXVlc3RzIGEgbmV3IGFuaW1hdGlvbiBmcmFtZS5cbiAqIElmIHRoZSB0aWNrZXIgaGFzIGJlZW4gc3RhcnRlZCBpdCBjaGVja3MgaWYgYSBmcmFtZSBoYXMgbm90IGFscmVhZHlcbiAqIGJlZW4gcmVxdWVzdGVkLCBhbmQgaWYgdGhlIGludGVybmFsIGVtaXR0ZXIgaGFzIGxpc3RlbmVycy4gSWYgdGhlc2VcbiAqIGNvbmRpdGlvbnMgYXJlIG1ldCwgYSBuZXcgZnJhbWUgaXMgcmVxdWVzdGVkLiBJZiB0aGUgdGlja2VyIGhhcyBub3RcbiAqIGJlZW4gc3RhcnRlZCwgYnV0IGF1dG9TdGFydCBpcyBgdHJ1ZWAsIHRoZW4gdGhlIHRpY2tlciBzdGFydHMgbm93LFxuICogYW5kIGNvbnRpbnVlcyB3aXRoIHRoZSBwcmV2aW91cyBjb25kaXRpb25zIHRvIHJlcXVlc3QgYSBuZXcgZnJhbWUuXG4gKlxuICogQHByaXZhdGVcbiAqL1xuVGlja2VyLnByb3RvdHlwZS5fc3RhcnRJZlBvc3NpYmxlID0gZnVuY3Rpb24gX3N0YXJ0SWZQb3NzaWJsZSgpXG57XG4gICAgaWYgKHRoaXMuc3RhcnRlZClcbiAgICB7XG4gICAgICAgIHRoaXMuX3JlcXVlc3RJZk5lZWRlZCgpO1xuICAgIH1cbiAgICBlbHNlIGlmICh0aGlzLmF1dG9TdGFydClcbiAgICB7XG4gICAgICAgIHRoaXMuc3RhcnQoKTtcbiAgICB9XG59O1xuXG4vKipcbiAqIENhbGxzIHtAbGluayBtb2R1bGU6ZXZlbnRlbWl0dGVyMy5FdmVudEVtaXR0ZXIjb259IGludGVybmFsbHkgZm9yIHRoZVxuICogaW50ZXJuYWwgJ3RpY2snIGV2ZW50LiBJdCBjaGVja3MgaWYgdGhlIGVtaXR0ZXIgaGFzIGxpc3RlbmVycyxcbiAqIGFuZCBpZiBzbyBpdCByZXF1ZXN0cyBhIG5ldyBhbmltYXRpb24gZnJhbWUgYXQgdGhpcyBwb2ludC5cbiAqXG4gKiBAcGFyYW0gZm4ge0Z1bmN0aW9ufSBUaGUgbGlzdGVuZXIgZnVuY3Rpb24gdG8gYmUgYWRkZWQgZm9yIHVwZGF0ZXNcbiAqIEBwYXJhbSBbY29udGV4dF0ge0Z1bmN0aW9ufSBUaGUgbGlzdGVuZXIgY29udGV4dFxuICogQHJldHVybnMge1BJWEkudGlja2VyLlRpY2tlcn0gdGhpc1xuICovXG5UaWNrZXIucHJvdG90eXBlLmFkZCA9IGZ1bmN0aW9uIGFkZChmbiwgY29udGV4dClcbntcbiAgICB0aGlzLl9lbWl0dGVyLm9uKFRJQ0ssIGZuLCBjb250ZXh0KTtcblxuICAgIHRoaXMuX3N0YXJ0SWZQb3NzaWJsZSgpO1xuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIENhbGxzIHtAbGluayBtb2R1bGU6ZXZlbnRlbWl0dGVyMy5FdmVudEVtaXR0ZXIjb25jZX0gaW50ZXJuYWxseSBmb3IgdGhlXG4gKiBpbnRlcm5hbCAndGljaycgZXZlbnQuIEl0IGNoZWNrcyBpZiB0aGUgZW1pdHRlciBoYXMgbGlzdGVuZXJzLFxuICogYW5kIGlmIHNvIGl0IHJlcXVlc3RzIGEgbmV3IGFuaW1hdGlvbiBmcmFtZSBhdCB0aGlzIHBvaW50LlxuICpcbiAqIEBwYXJhbSBmbiB7RnVuY3Rpb259IFRoZSBsaXN0ZW5lciBmdW5jdGlvbiB0byBiZSBhZGRlZCBmb3Igb25lIHVwZGF0ZVxuICogQHBhcmFtIFtjb250ZXh0XSB7RnVuY3Rpb259IFRoZSBsaXN0ZW5lciBjb250ZXh0XG4gKiBAcmV0dXJucyB7UElYSS50aWNrZXIuVGlja2VyfSB0aGlzXG4gKi9cblRpY2tlci5wcm90b3R5cGUuYWRkT25jZSA9IGZ1bmN0aW9uIGFkZE9uY2UoZm4sIGNvbnRleHQpXG57XG4gICAgdGhpcy5fZW1pdHRlci5vbmNlKFRJQ0ssIGZuLCBjb250ZXh0KTtcblxuICAgIHRoaXMuX3N0YXJ0SWZQb3NzaWJsZSgpO1xuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIENhbGxzIHtAbGluayBtb2R1bGU6ZXZlbnRlbWl0dGVyMy5FdmVudEVtaXR0ZXIjb2ZmfSBpbnRlcm5hbGx5IGZvciAndGljaycgZXZlbnQuXG4gKiBJdCBjaGVja3MgaWYgdGhlIGVtaXR0ZXIgaGFzIGxpc3RlbmVycyBmb3IgJ3RpY2snIGV2ZW50LlxuICogSWYgaXQgZG9lcywgdGhlbiBpdCBjYW5jZWxzIHRoZSBhbmltYXRpb24gZnJhbWUuXG4gKlxuICogQHBhcmFtIFtmbl0ge0Z1bmN0aW9ufSBUaGUgbGlzdGVuZXIgZnVuY3Rpb24gdG8gYmUgcmVtb3ZlZFxuICogQHBhcmFtIFtjb250ZXh0XSB7RnVuY3Rpb259IFRoZSBsaXN0ZW5lciBjb250ZXh0IHRvIGJlIHJlbW92ZWRcbiAqIEByZXR1cm5zIHtQSVhJLnRpY2tlci5UaWNrZXJ9IHRoaXNcbiAqL1xuVGlja2VyLnByb3RvdHlwZS5yZW1vdmUgPSBmdW5jdGlvbiByZW1vdmUoZm4sIGNvbnRleHQpXG57XG4gICAgdGhpcy5fZW1pdHRlci5vZmYoVElDSywgZm4sIGNvbnRleHQpO1xuXG4gICAgaWYgKCF0aGlzLl9lbWl0dGVyLmxpc3RlbmVycyhUSUNLLCB0cnVlKSlcbiAgICB7XG4gICAgICAgIHRoaXMuX2NhbmNlbElmTmVlZGVkKCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIFN0YXJ0cyB0aGUgdGlja2VyLiBJZiB0aGUgdGlja2VyIGhhcyBsaXN0ZW5lcnNcbiAqIGEgbmV3IGFuaW1hdGlvbiBmcmFtZSBpcyByZXF1ZXN0ZWQgYXQgdGhpcyBwb2ludC5cbiAqL1xuVGlja2VyLnByb3RvdHlwZS5zdGFydCA9IGZ1bmN0aW9uIHN0YXJ0KClcbntcbiAgICBpZiAoIXRoaXMuc3RhcnRlZClcbiAgICB7XG4gICAgICAgIHRoaXMuc3RhcnRlZCA9IHRydWU7XG4gICAgICAgIHRoaXMuX3JlcXVlc3RJZk5lZWRlZCgpO1xuICAgIH1cbn07XG5cbi8qKlxuICogU3RvcHMgdGhlIHRpY2tlci4gSWYgdGhlIHRpY2tlciBoYXMgcmVxdWVzdGVkXG4gKiBhbiBhbmltYXRpb24gZnJhbWUgaXQgaXMgY2FuY2VsZWQgYXQgdGhpcyBwb2ludC5cbiAqL1xuVGlja2VyLnByb3RvdHlwZS5zdG9wID0gZnVuY3Rpb24gc3RvcCgpXG57XG4gICAgaWYgKHRoaXMuc3RhcnRlZClcbiAgICB7XG4gICAgICAgIHRoaXMuc3RhcnRlZCA9IGZhbHNlO1xuICAgICAgICB0aGlzLl9jYW5jZWxJZk5lZWRlZCgpO1xuICAgIH1cbn07XG5cbi8qKlxuICogVHJpZ2dlcnMgYW4gdXBkYXRlLiBBbiB1cGRhdGUgZW50YWlscyBzZXR0aW5nIHRoZVxuICogY3VycmVudCB7QGxpbmsgUElYSS50aWNrZXIuVGlja2VyI2VsYXBzZWRNU30sXG4gKiB0aGUgY3VycmVudCB7QGxpbmsgUElYSS50aWNrZXIuVGlja2VyI2RlbHRhVGltZX0sXG4gKiBpbnZva2luZyBhbGwgbGlzdGVuZXJzIHdpdGggY3VycmVudCBkZWx0YVRpbWUsXG4gKiBhbmQgdGhlbiBmaW5hbGx5IHNldHRpbmcge0BsaW5rIFBJWEkudGlja2VyLlRpY2tlciNsYXN0VGltZX1cbiAqIHdpdGggdGhlIHZhbHVlIG9mIGN1cnJlbnRUaW1lIHRoYXQgd2FzIHByb3ZpZGVkLlxuICogVGhpcyBtZXRob2Qgd2lsbCBiZSBjYWxsZWQgYXV0b21hdGljYWxseSBieSBhbmltYXRpb25cbiAqIGZyYW1lIGNhbGxiYWNrcyBpZiB0aGUgdGlja2VyIGluc3RhbmNlIGhhcyBiZWVuIHN0YXJ0ZWRcbiAqIGFuZCBsaXN0ZW5lcnMgYXJlIGFkZGVkLlxuICpcbiAqIEBwYXJhbSBbY3VycmVudFRpbWU9cGVyZm9ybWFuY2Uubm93KCldIHtET01IaWdoUmVzVGltZVN0YW1wfG51bWJlcn0gdGhlIGN1cnJlbnQgdGltZSBvZiBleGVjdXRpb25cbiAqL1xuVGlja2VyLnByb3RvdHlwZS51cGRhdGUgPSBmdW5jdGlvbiB1cGRhdGUoY3VycmVudFRpbWUpXG57XG4gICAgdmFyIGVsYXBzZWRNUztcblxuICAgIC8vIEFsbG93IGNhbGxpbmcgdXBkYXRlIGRpcmVjdGx5IHdpdGggZGVmYXVsdCBjdXJyZW50VGltZS5cbiAgICBjdXJyZW50VGltZSA9IGN1cnJlbnRUaW1lIHx8IHBlcmZvcm1hbmNlLm5vdygpO1xuICAgIC8vIFNhdmUgdW5jYXBwZWQgZWxhcHNlZE1TIGZvciBtZWFzdXJlbWVudFxuICAgIGVsYXBzZWRNUyA9IHRoaXMuZWxhcHNlZE1TID0gY3VycmVudFRpbWUgLSB0aGlzLmxhc3RUaW1lO1xuXG4gICAgLy8gY2FwIHRoZSBtaWxsaXNlY29uZHMgZWxhcHNlZCB1c2VkIGZvciBkZWx0YVRpbWVcbiAgICBpZiAoZWxhcHNlZE1TID4gdGhpcy5fbWF4RWxhcHNlZE1TKVxuICAgIHtcbiAgICAgICAgZWxhcHNlZE1TID0gdGhpcy5fbWF4RWxhcHNlZE1TO1xuICAgIH1cblxuICAgIHRoaXMuZGVsdGFUaW1lID0gZWxhcHNlZE1TICogQ09OU1QuVEFSR0VUX0ZQTVMgKiB0aGlzLnNwZWVkO1xuXG4gICAgLy8gSW52b2tlIGxpc3RlbmVycyBhZGRlZCB0byBpbnRlcm5hbCBlbWl0dGVyXG4gICAgdGhpcy5fZW1pdHRlci5lbWl0KFRJQ0ssIHRoaXMuZGVsdGFUaW1lKTtcblxuICAgIHRoaXMubGFzdFRpbWUgPSBjdXJyZW50VGltZTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gVGlja2VyO1xuIiwidmFyIFRpY2tlciA9IHJlcXVpcmUoJy4vVGlja2VyJyk7XG5cbi8qKlxuICogVGhlIHNoYXJlZCB0aWNrZXIgaW5zdGFuY2UgdXNlZCBieSB7QGxpbmsgUElYSS5leHRyYXMuTW92aWVDbGlwfS5cbiAqIGFuZCBieSB7QGxpbmsgUElYSS5pbnRlcmFjdGlvbi5JbnRlcmFjdGlvbk1hbmFnZXJ9LlxuICogVGhlIHByb3BlcnR5IHtAbGluayBQSVhJLnRpY2tlci5UaWNrZXIjYXV0b1N0YXJ0fSBpcyBzZXQgdG8gYHRydWVgXG4gKiBmb3IgdGhpcyBpbnN0YW5jZS4gUGxlYXNlIGZvbGxvdyB0aGUgZXhhbXBsZXMgZm9yIHVzYWdlLCBpbmNsdWRpbmdcbiAqIGhvdyB0byBvcHQtb3V0IG9mIGF1dG8tc3RhcnRpbmcgdGhlIHNoYXJlZCB0aWNrZXIuXG4gKlxuICogQGV4YW1wbGVcbiAqIHZhciB0aWNrZXIgPSBQSVhJLnRpY2tlci5zaGFyZWQ7XG4gKiAvLyBTZXQgdGhpcyB0byBwcmV2ZW50IHN0YXJ0aW5nIHRoaXMgdGlja2VyIHdoZW4gbGlzdGVuZXJzIGFyZSBhZGRlZC5cbiAqIC8vIEJ5IGRlZmF1bHQgdGhpcyBpcyB0cnVlIG9ubHkgZm9yIHRoZSBQSVhJLnRpY2tlci5zaGFyZWQgaW5zdGFuY2UuXG4gKiB0aWNrZXIuYXV0b1N0YXJ0ID0gZmFsc2U7XG4gKiAvLyBGWUksIGNhbGwgdGhpcyB0byBlbnN1cmUgdGhlIHRpY2tlciBpcyBzdG9wcGVkLiBJdCBzaG91bGQgYmUgc3RvcHBlZFxuICogLy8gaWYgeW91IGhhdmUgbm90IGF0dGVtcHRlZCB0byByZW5kZXIgYW55dGhpbmcgeWV0LlxuICogdGlja2VyLnN0b3AoKTtcbiAqIC8vIENhbGwgdGhpcyB3aGVuIHlvdSBhcmUgcmVhZHkgZm9yIGEgcnVubmluZyBzaGFyZWQgdGlja2VyLlxuICogdGlja2VyLnN0YXJ0KCk7XG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIFlvdSBtYXkgdXNlIHRoZSBzaGFyZWQgdGlja2VyIHRvIHJlbmRlci4uLlxuICogdmFyIHJlbmRlcmVyID0gUElYSS5hdXRvRGV0ZWN0UmVuZGVyZXIoODAwLCA2MDApO1xuICogdmFyIHN0YWdlID0gbmV3IFBJWEkuQ29udGFpbmVyKCk7XG4gKiB2YXIgaW50ZXJhY3Rpb25NYW5hZ2VyID0gUElYSS5pbnRlcmFjdGlvbi5JbnRlcmFjdGlvbk1hbmFnZXIocmVuZGVyZXIpO1xuICogZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChyZW5kZXJlci52aWV3KTtcbiAqIHRpY2tlci5hZGQoZnVuY3Rpb24gKHRpbWUpIHtcbiAqICAgICByZW5kZXJlci5yZW5kZXIoc3RhZ2UpO1xuICogfSk7XG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIE9yIHlvdSBjYW4ganVzdCB1cGRhdGUgaXQgbWFudWFsbHkuXG4gKiB0aWNrZXIuYXV0b1N0YXJ0ID0gZmFsc2U7XG4gKiB0aWNrZXIuc3RvcCgpO1xuICogZnVuY3Rpb24gYW5pbWF0ZSh0aW1lKSB7XG4gKiAgICAgdGlja2VyLnVwZGF0ZSh0aW1lKTtcbiAqICAgICByZW5kZXJlci5yZW5kZXIoc3RhZ2UpO1xuICogICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZShhbmltYXRlKTtcbiAqIH1cbiAqIGFuaW1hdGUocGVyZm9ybWFuY2Uubm93KCkpO1xuICpcbiAqIEB0eXBlIHtQSVhJLnRpY2tlci5UaWNrZXJ9XG4gKiBAbWVtYmVyb2YgUElYSS50aWNrZXJcbiAqL1xudmFyIHNoYXJlZCA9IG5ldyBUaWNrZXIoKTtcbnNoYXJlZC5hdXRvU3RhcnQgPSB0cnVlO1xuXG4vKipcbiAqIEBuYW1lc3BhY2UgUElYSS50aWNrZXJcbiAqL1xubW9kdWxlLmV4cG9ydHMgPSB7XG4gICAgc2hhcmVkOiBzaGFyZWQsXG4gICAgVGlja2VyOiBUaWNrZXJcbn07XG4iLCIvKipcbiAqIEdlbmVyaWMgTWFzayBTdGFjayBkYXRhIHN0cnVjdHVyZVxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICovXG5cbnZhciBHTF9NQVAgPSB7fTtcblxuXG52YXIgY3JlYXRlSW5kaWNlc0ZvclF1YWRzID0gZnVuY3Rpb24gKHNpemUpXG57XG4gICAgLy8gdGhlIHRvdGFsIG51bWJlciBvZiBpbmRpY2VzIGluIG91ciBhcnJheSwgdGhlcmUgYXJlIDYgcG9pbnRzIHBlciBxdWFkLlxuICAgXG4gICAgdmFyIHRvdGFsSW5kaWNlcyA9IHNpemUgKiA2O1xuXG4gICAgdmFyIGluZGljZXMgPSBuZXcgVWludDE2QXJyYXkodG90YWxJbmRpY2VzKTtcblxuXHQvLyBmaWxsIHRoZSBpbmRpY2VzIHdpdGggdGhlIHF1YWRzIHRvIGRyYXdcbiAgICBmb3IgKHZhciBpPTAsIGo9MDsgaSA8IHRvdGFsSW5kaWNlczsgaSArPSA2LCBqICs9IDQpXG4gICAge1xuICAgICAgICBpbmRpY2VzW2kgKyAwXSA9IGogKyAwO1xuICAgICAgICBpbmRpY2VzW2kgKyAxXSA9IGogKyAxO1xuICAgICAgICBpbmRpY2VzW2kgKyAyXSA9IGogKyAyO1xuICAgICAgICBpbmRpY2VzW2kgKyAzXSA9IGogKyAwO1xuICAgICAgICBpbmRpY2VzW2kgKyA0XSA9IGogKyAyO1xuICAgICAgICBpbmRpY2VzW2kgKyA1XSA9IGogKyAzO1xuICAgIH1cblxuICAgIHJldHVybiBpbmRpY2VzO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBjcmVhdGVJbmRpY2VzRm9yUXVhZHM7IiwidmFyIENPTlNUID0gcmVxdWlyZSgnLi4vY29uc3QnKTtcblxuLyoqXG4gKiBAbmFtZXNwYWNlIFBJWEkudXRpbHNcbiAqL1xudmFyIHV0aWxzID0gbW9kdWxlLmV4cG9ydHMgPSB7XG4gICAgX3VpZDogMCxcbiAgICBfc2FpZEhlbGxvOiBmYWxzZSxcblxuICAgIEV2ZW50RW1pdHRlcjogICByZXF1aXJlKCdldmVudGVtaXR0ZXIzJyksXG4gICAgcGx1Z2luVGFyZ2V0OiAgIHJlcXVpcmUoJy4vcGx1Z2luVGFyZ2V0JyksXG4gICAgYXN5bmM6ICAgICAgICAgIHJlcXVpcmUoJ2FzeW5jJyksXG5cbiAgICAvKipcbiAgICAgKiBHZXRzIHRoZSBuZXh0IHVuaXF1ZSBpZGVudGlmaWVyXG4gICAgICpcbiAgICAgKiBAcmV0dXJuIHtudW1iZXJ9IFRoZSBuZXh0IHVuaXF1ZSBpZGVudGlmaWVyIHRvIHVzZS5cbiAgICAgKi9cbiAgICB1aWQ6IGZ1bmN0aW9uICgpXG4gICAge1xuICAgICAgICByZXR1cm4gKyt1dGlscy5fdWlkO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBDb252ZXJ0cyBhIGhleCBjb2xvciBudW1iZXIgdG8gYW4gW1IsIEcsIEJdIGFycmF5XG4gICAgICpcbiAgICAgKiBAcGFyYW0gaGV4IHtudW1iZXJ9XG4gICAgICogQHBhcmFtICB7bnVtYmVyW119IFtvdXQ9W11dXG4gICAgICogQHJldHVybiB7bnVtYmVyW119IEFuIGFycmF5IHJlcHJlc2VudGluZyB0aGUgW1IsIEcsIEJdIG9mIHRoZSBjb2xvci5cbiAgICAgKi9cbiAgICBoZXgycmdiOiBmdW5jdGlvbiAoaGV4LCBvdXQpXG4gICAge1xuICAgICAgICBvdXQgPSBvdXQgfHwgW107XG5cbiAgICAgICAgb3V0WzBdID0gKGhleCA+PiAxNiAmIDB4RkYpIC8gMjU1O1xuICAgICAgICBvdXRbMV0gPSAoaGV4ID4+IDggJiAweEZGKSAvIDI1NTtcbiAgICAgICAgb3V0WzJdID0gKGhleCAmIDB4RkYpIC8gMjU1O1xuXG4gICAgICAgIHJldHVybiBvdXQ7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIENvbnZlcnRzIGEgaGV4IGNvbG9yIG51bWJlciB0byBhIHN0cmluZy5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBoZXgge251bWJlcn1cbiAgICAgKiBAcmV0dXJuIHtzdHJpbmd9IFRoZSBzdHJpbmcgY29sb3IuXG4gICAgICovXG4gICAgaGV4MnN0cmluZzogZnVuY3Rpb24gKGhleClcbiAgICB7XG4gICAgICAgIGhleCA9IGhleC50b1N0cmluZygxNik7XG4gICAgICAgIGhleCA9ICcwMDAwMDAnLnN1YnN0cigwLCA2IC0gaGV4Lmxlbmd0aCkgKyBoZXg7XG5cbiAgICAgICAgcmV0dXJuICcjJyArIGhleDtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQ29udmVydHMgYSBjb2xvciBhcyBhbiBbUiwgRywgQl0gYXJyYXkgdG8gYSBoZXggbnVtYmVyXG4gICAgICpcbiAgICAgKiBAcGFyYW0gcmdiIHtudW1iZXJbXX1cbiAgICAgKiBAcmV0dXJuIHtudW1iZXJ9IFRoZSBjb2xvciBudW1iZXJcbiAgICAgKi9cbiAgICByZ2IyaGV4OiBmdW5jdGlvbiAocmdiKVxuICAgIHtcbiAgICAgICAgcmV0dXJuICgocmdiWzBdKjI1NSA8PCAxNikgKyAocmdiWzFdKjI1NSA8PCA4KSArIHJnYlsyXSoyNTUpO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBDaGVja3Mgd2hldGhlciB0aGUgQ2FudmFzIEJsZW5kTW9kZXMgYXJlIHN1cHBvcnRlZCBieSB0aGUgY3VycmVudCBicm93c2VyXG4gICAgICpcbiAgICAgKiBAcmV0dXJuIHtib29sZWFufSB3aGV0aGVyIHRoZXkgYXJlIHN1cHBvcnRlZFxuICAgICAqL1xuICAgIGNhblVzZU5ld0NhbnZhc0JsZW5kTW9kZXM6IGZ1bmN0aW9uICgpXG4gICAge1xuICAgICAgICBpZiAodHlwZW9mIGRvY3VtZW50ID09PSAndW5kZWZpbmVkJylcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIHBuZ0hlYWQgPSAnZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFBUUFBQUFCQVFNQUFBREQ4cDJPQUFBQUExQk1WRVgvJztcbiAgICAgICAgdmFyIHBuZ0VuZCA9ICdBQUFBQ2tsRVFWUUkxMk5nQUFBQUFnQUI0aUc4TXdBQUFBQkpSVTVFcmtKZ2dnPT0nO1xuXG4gICAgICAgIHZhciBtYWdlbnRhID0gbmV3IEltYWdlKCk7XG4gICAgICAgIG1hZ2VudGEuc3JjID0gcG5nSGVhZCArICdBUDgwNE9hNicgKyBwbmdFbmQ7XG5cbiAgICAgICAgdmFyIHllbGxvdyA9IG5ldyBJbWFnZSgpO1xuICAgICAgICB5ZWxsb3cuc3JjID0gcG5nSGVhZCArICcvd0NLeHZSRicgKyBwbmdFbmQ7XG5cbiAgICAgICAgdmFyIGNhbnZhcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NhbnZhcycpO1xuICAgICAgICBjYW52YXMud2lkdGggPSA2O1xuICAgICAgICBjYW52YXMuaGVpZ2h0ID0gMTtcblxuICAgICAgICB2YXIgY29udGV4dCA9IGNhbnZhcy5nZXRDb250ZXh0KCcyZCcpO1xuICAgICAgICBjb250ZXh0Lmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbiA9ICdtdWx0aXBseSc7XG4gICAgICAgIGNvbnRleHQuZHJhd0ltYWdlKG1hZ2VudGEsIDAsIDApO1xuICAgICAgICBjb250ZXh0LmRyYXdJbWFnZSh5ZWxsb3csIDIsIDApO1xuXG4gICAgICAgIHZhciBkYXRhID0gY29udGV4dC5nZXRJbWFnZURhdGEoMiwwLDEsMSkuZGF0YTtcblxuICAgICAgICByZXR1cm4gKGRhdGFbMF0gPT09IDI1NSAmJiBkYXRhWzFdID09PSAwICYmIGRhdGFbMl0gPT09IDApO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBHaXZlbiBhIG51bWJlciwgdGhpcyBmdW5jdGlvbiByZXR1cm5zIHRoZSBjbG9zZXN0IG51bWJlciB0aGF0IGlzIGEgcG93ZXIgb2YgdHdvXG4gICAgICogdGhpcyBmdW5jdGlvbiBpcyB0YWtlbiBmcm9tIFN0YXJsaW5nIEZyYW1ld29yayBhcyBpdHMgcHJldHR5IG5lYXQgOylcbiAgICAgKlxuICAgICAqIEBwYXJhbSBudW1iZXIge251bWJlcn1cbiAgICAgKiBAcmV0dXJuIHtudW1iZXJ9IHRoZSBjbG9zZXN0IG51bWJlciB0aGF0IGlzIGEgcG93ZXIgb2YgdHdvXG4gICAgICovXG4gICAgZ2V0TmV4dFBvd2VyT2ZUd286IGZ1bmN0aW9uIChudW1iZXIpXG4gICAge1xuICAgICAgICAvLyBzZWU6IGh0dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvUG93ZXJfb2ZfdHdvI0Zhc3RfYWxnb3JpdGhtX3RvX2NoZWNrX2lmX2FfcG9zaXRpdmVfbnVtYmVyX2lzX2FfcG93ZXJfb2ZfdHdvXG4gICAgICAgIGlmIChudW1iZXIgPiAwICYmIChudW1iZXIgJiAobnVtYmVyIC0gMSkpID09PSAwKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gbnVtYmVyO1xuICAgICAgICB9XG4gICAgICAgIGVsc2VcbiAgICAgICAge1xuICAgICAgICAgICAgdmFyIHJlc3VsdCA9IDE7XG5cbiAgICAgICAgICAgIHdoaWxlIChyZXN1bHQgPCBudW1iZXIpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgcmVzdWx0IDw8PSAxO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIGNoZWNrcyBpZiB0aGUgZ2l2ZW4gd2lkdGggYW5kIGhlaWdodCBtYWtlIGEgcG93ZXIgb2YgdHdvIHJlY3RhbmdsZVxuICAgICAqXG4gICAgICogQHBhcmFtIHdpZHRoIHtudW1iZXJ9XG4gICAgICogQHBhcmFtIGhlaWdodCB7bnVtYmVyfVxuICAgICAqIEByZXR1cm4ge2Jvb2xlYW59XG4gICAgICovXG4gICAgaXNQb3dlck9mVHdvOiBmdW5jdGlvbiAod2lkdGgsIGhlaWdodClcbiAgICB7XG4gICAgICAgIHJldHVybiAod2lkdGggPiAwICYmICh3aWR0aCAmICh3aWR0aCAtIDEpKSA9PT0gMCAmJiBoZWlnaHQgPiAwICYmIChoZWlnaHQgJiAoaGVpZ2h0IC0gMSkpID09PSAwKTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogZ2V0IHRoZSByZXNvbHV0aW9uIG9mIGFuIGFzc2V0IGJ5IGxvb2tpbmcgZm9yIHRoZSBwcmVmaXhcbiAgICAgKiB1c2VkIGJ5IHNwcml0ZXNoZWV0cyBhbmQgaW1hZ2UgdXJsc1xuICAgICAqXG4gICAgICogQHBhcmFtIHVybCB7c3RyaW5nfSB0aGUgaW1hZ2UgcGF0aFxuICAgICAqIEByZXR1cm4ge251bWJlcn1cbiAgICAgKi9cbiAgICBnZXRSZXNvbHV0aW9uT2ZVcmw6IGZ1bmN0aW9uICh1cmwpXG4gICAge1xuICAgICAgICB2YXIgcmVzb2x1dGlvbiA9IENPTlNULlJFVElOQV9QUkVGSVguZXhlYyh1cmwpO1xuXG4gICAgICAgIGlmIChyZXNvbHV0aW9uKVxuICAgICAgICB7XG4gICAgICAgICAgIHJldHVybiBwYXJzZUZsb2F0KHJlc29sdXRpb25bMV0pO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIDE7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIExvZ3Mgb3V0IHRoZSB2ZXJzaW9uIGFuZCByZW5kZXJlciBpbmZvcm1hdGlvbiBmb3IgdGhpcyBydW5uaW5nIGluc3RhbmNlIG9mIFBJWEkuXG4gICAgICogSWYgeW91IGRvbid0IHdhbnQgdG8gc2VlIHRoaXMgbWVzc2FnZSB5b3UgY2FuIHNldCBgUElYSS51dGlscy5fc2FpZEhlbGxvID0gdHJ1ZTtgXG4gICAgICogc28gdGhlIGxpYnJhcnkgdGhpbmtzIGl0IGFscmVhZHkgc2FpZCBpdC4gS2VlcCBpbiBtaW5kIHRoYXQgZG9pbmcgdGhhdCB3aWxsIGZvcmV2ZXJcbiAgICAgKiBtYWtlcyB5b3UgYSBqZXJrIGZhY2UuXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gdHlwZSAtIFRoZSBzdHJpbmcgcmVuZGVyZXIgdHlwZSB0byBsb2cuXG4gICAgICogQGNvbnN0YW50XG4gICAgICogQHN0YXRpY1xuICAgICAqL1xuICAgIHNheUhlbGxvOiBmdW5jdGlvbiAodHlwZSlcbiAgICB7XG4gICAgICAgIGlmICh1dGlscy5fc2FpZEhlbGxvKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAobmF2aWdhdG9yLnVzZXJBZ2VudC50b0xvd2VyQ2FzZSgpLmluZGV4T2YoJ2Nocm9tZScpID4gLTEpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHZhciBhcmdzID0gW1xuICAgICAgICAgICAgICAgICdcXG4gJWMgJWMgJWMgUGl4aS5qcyAnICsgQ09OU1QuVkVSU0lPTiArICcgLSDinLAgJyArIHR5cGUgKyAnIOKcsCAgJWMgJyArICcgJWMgJyArICcgaHR0cDovL3d3dy5waXhpanMuY29tLyAgJWMgJWMg4pmlJWPimaUlY+KZpSBcXG5cXG4nLFxuICAgICAgICAgICAgICAgICdiYWNrZ3JvdW5kOiAjZmY2NmE1OyBwYWRkaW5nOjVweCAwOycsXG4gICAgICAgICAgICAgICAgJ2JhY2tncm91bmQ6ICNmZjY2YTU7IHBhZGRpbmc6NXB4IDA7JyxcbiAgICAgICAgICAgICAgICAnY29sb3I6ICNmZjY2YTU7IGJhY2tncm91bmQ6ICMwMzAzMDc7IHBhZGRpbmc6NXB4IDA7JyxcbiAgICAgICAgICAgICAgICAnYmFja2dyb3VuZDogI2ZmNjZhNTsgcGFkZGluZzo1cHggMDsnLFxuICAgICAgICAgICAgICAgICdiYWNrZ3JvdW5kOiAjZmZjM2RjOyBwYWRkaW5nOjVweCAwOycsXG4gICAgICAgICAgICAgICAgJ2JhY2tncm91bmQ6ICNmZjY2YTU7IHBhZGRpbmc6NXB4IDA7JyxcbiAgICAgICAgICAgICAgICAnY29sb3I6ICNmZjI0MjQ7IGJhY2tncm91bmQ6ICNmZmY7IHBhZGRpbmc6NXB4IDA7JyxcbiAgICAgICAgICAgICAgICAnY29sb3I6ICNmZjI0MjQ7IGJhY2tncm91bmQ6ICNmZmY7IHBhZGRpbmc6NXB4IDA7JyxcbiAgICAgICAgICAgICAgICAnY29sb3I6ICNmZjI0MjQ7IGJhY2tncm91bmQ6ICNmZmY7IHBhZGRpbmc6NXB4IDA7J1xuICAgICAgICAgICAgXTtcblxuICAgICAgICAgICAgd2luZG93LmNvbnNvbGUubG9nLmFwcGx5KGNvbnNvbGUsIGFyZ3MpOyAvL2pzaGludCBpZ25vcmU6bGluZVxuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHdpbmRvdy5jb25zb2xlKVxuICAgICAgICB7XG4gICAgICAgICAgICB3aW5kb3cuY29uc29sZS5sb2coJ1BpeGkuanMgJyArIENPTlNULlZFUlNJT04gKyAnIC0gJyArIHR5cGUgKyAnIC0gaHR0cDovL3d3dy5waXhpanMuY29tLycpOyAvL2pzaGludCBpZ25vcmU6bGluZVxuICAgICAgICB9XG5cbiAgICAgICAgdXRpbHMuX3NhaWRIZWxsbyA9IHRydWU7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIEhlbHBlciBmb3IgY2hlY2tpbmcgZm9yIHdlYmdsIHN1cHBvcnRcbiAgICAgKlxuICAgICAqIEByZXR1cm4ge2Jvb2xlYW59XG4gICAgICovXG4gICAgaXNXZWJHTFN1cHBvcnRlZDogZnVuY3Rpb24gKClcbiAgICB7XG4gICAgICAgIHZhciBjb250ZXh0T3B0aW9ucyA9IHsgc3RlbmNpbDogdHJ1ZSB9O1xuICAgICAgICB0cnlcbiAgICAgICAge1xuICAgICAgICAgICAgaWYgKCF3aW5kb3cuV2ViR0xSZW5kZXJpbmdDb250ZXh0KVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdmFyIGNhbnZhcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NhbnZhcycpLFxuICAgICAgICAgICAgICAgIGdsID0gY2FudmFzLmdldENvbnRleHQoJ3dlYmdsJywgY29udGV4dE9wdGlvbnMpIHx8IGNhbnZhcy5nZXRDb250ZXh0KCdleHBlcmltZW50YWwtd2ViZ2wnLCBjb250ZXh0T3B0aW9ucyk7XG5cbiAgICAgICAgICAgIHJldHVybiAhIShnbCAmJiBnbC5nZXRDb250ZXh0QXR0cmlidXRlcygpLnN0ZW5jaWwpO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyBzaWduIG9mIG51bWJlclxuICAgICAqXG4gICAgICogQHBhcmFtIG4ge251bWJlcn1cbiAgICAgKiBAcmV0dXJucyB7bnVtYmVyfSAwIGlmIG4gaXMgMCwgLTEgaWYgbiBpcyBuZWdhdGl2ZSwgMSBpZiBuIGkgcG9zaXRpdmVcbiAgICAgKi9cbiAgICBzaWduOiBmdW5jdGlvbiAobilcbiAgICB7XG4gICAgICAgIHJldHVybiBuID8gKG4gPCAwID8gLTEgOiAxKSA6IDA7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIHJlbW92ZUl0ZW1zXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge2FycmF5fSBhcnIgVGhlIHRhcmdldCBhcnJheVxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBzdGFydElkeCBUaGUgaW5kZXggdG8gYmVnaW4gcmVtb3ZpbmcgZnJvbSAoaW5jbHVzaXZlKVxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSByZW1vdmVDb3VudCBIb3cgbWFueSBpdGVtcyB0byByZW1vdmVcbiAgICAgKi9cbiAgICByZW1vdmVJdGVtczogZnVuY3Rpb24gKGFyciwgc3RhcnRJZHgsIHJlbW92ZUNvdW50KVxuICAgIHtcbiAgICAgICAgdmFyIGxlbmd0aCA9IGFyci5sZW5ndGg7XG5cbiAgICAgICAgaWYgKHN0YXJ0SWR4ID49IGxlbmd0aCB8fCByZW1vdmVDb3VudCA9PT0gMClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgcmVtb3ZlQ291bnQgPSAoc3RhcnRJZHgrcmVtb3ZlQ291bnQgPiBsZW5ndGggPyBsZW5ndGgtc3RhcnRJZHggOiByZW1vdmVDb3VudCk7XG4gICAgICAgIGZvciAodmFyIGkgPSBzdGFydElkeCwgbGVuID0gbGVuZ3RoLXJlbW92ZUNvdW50OyBpIDwgbGVuOyArK2kpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGFycltpXSA9IGFycltpICsgcmVtb3ZlQ291bnRdO1xuICAgICAgICB9XG5cbiAgICAgICAgYXJyLmxlbmd0aCA9IGxlbjtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQHRvZG8gRGVzY3JpYmUgcHJvcGVydHkgdXNhZ2VcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIFRleHR1cmVDYWNoZToge30sXG5cbiAgICAvKipcbiAgICAgKiBAdG9kbyBEZXNjcmliZSBwcm9wZXJ0eSB1c2FnZVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgQmFzZVRleHR1cmVDYWNoZToge31cbn07XG4iLCIvKipcbiAqIE1peGlucyBmdW5jdGlvbmFsaXR5IHRvIG1ha2UgYW4gb2JqZWN0IGhhdmUgXCJwbHVnaW5zXCIuXG4gKlxuICogQG1peGluXG4gKiBAbWVtYmVyb2YgUElYSS51dGlsc1xuICogQHBhcmFtIG9iaiB7b2JqZWN0fSBUaGUgb2JqZWN0IHRvIG1peCBpbnRvLlxuICogQGV4YW1wbGVcbiAqICAgICAgZnVuY3Rpb24gTXlPYmplY3QoKSB7fVxuICpcbiAqICAgICAgcGx1Z2luVGFyZ2V0Lm1peGluKE15T2JqZWN0KTtcbiAqL1xuZnVuY3Rpb24gcGx1Z2luVGFyZ2V0KG9iailcbntcbiAgICBvYmouX19wbHVnaW5zID0ge307XG5cbiAgICAvKipcbiAgICAgKiBBZGRzIGEgcGx1Z2luIHRvIGFuIG9iamVjdFxuICAgICAqXG4gICAgICogQHBhcmFtIHBsdWdpbk5hbWUge3N0cmluZ30gVGhlIGV2ZW50cyB0aGF0IHNob3VsZCBiZSBsaXN0ZWQuXG4gICAgICogQHBhcmFtIGN0b3Ige0Z1bmN0aW9ufSBUaGUgY29uc3RydWN0b3IgZnVuY3Rpb24gZm9yIHRoZSBwbHVnaW4uXG4gICAgICovXG4gICAgb2JqLnJlZ2lzdGVyUGx1Z2luID0gZnVuY3Rpb24gKHBsdWdpbk5hbWUsIGN0b3IpXG4gICAge1xuICAgICAgICBvYmouX19wbHVnaW5zW3BsdWdpbk5hbWVdID0gY3RvcjtcbiAgICB9O1xuXG4gICAgLyoqXG4gICAgICogSW5zdGFudGlhdGVzIGFsbCB0aGUgcGx1Z2lucyBvZiB0aGlzIG9iamVjdFxuICAgICAqXG4gICAgICovXG4gICAgb2JqLnByb3RvdHlwZS5pbml0UGx1Z2lucyA9IGZ1bmN0aW9uICgpXG4gICAge1xuICAgICAgICB0aGlzLnBsdWdpbnMgPSB0aGlzLnBsdWdpbnMgfHwge307XG5cbiAgICAgICAgZm9yICh2YXIgbyBpbiBvYmouX19wbHVnaW5zKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnBsdWdpbnNbb10gPSBuZXcgKG9iai5fX3BsdWdpbnNbb10pKHRoaXMpO1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIC8qKlxuICAgICAqIFJlbW92ZXMgYWxsIHRoZSBwbHVnaW5zIG9mIHRoaXMgb2JqZWN0XG4gICAgICpcbiAgICAgKi9cbiAgICBvYmoucHJvdG90eXBlLmRlc3Ryb3lQbHVnaW5zID0gZnVuY3Rpb24gKClcbiAgICB7XG4gICAgICAgIGZvciAodmFyIG8gaW4gdGhpcy5wbHVnaW5zKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnBsdWdpbnNbb10uZGVzdHJveSgpO1xuICAgICAgICAgICAgdGhpcy5wbHVnaW5zW29dID0gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMucGx1Z2lucyA9IG51bGw7XG4gICAgfTtcbn1cblxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgICAvKipcbiAgICAgKiBNaXhlcyBpbiB0aGUgcHJvcGVydGllcyBvZiB0aGUgcGx1Z2luVGFyZ2V0IGludG8gYW5vdGhlciBvYmplY3RcbiAgICAgKlxuICAgICAqIEBwYXJhbSBvYmplY3Qge29iamVjdH0gVGhlIG9iaiB0byBtaXggaW50b1xuICAgICAqL1xuICAgIG1peGluOiBmdW5jdGlvbiBtaXhpbihvYmopXG4gICAge1xuICAgICAgICBwbHVnaW5UYXJnZXQob2JqKTtcbiAgICB9XG59O1xuIiwiLypnbG9iYWwgY29uc29sZSAqL1xudmFyIGNvcmUgPSByZXF1aXJlKCcuL2NvcmUnKSxcbiAgICBtZXNoID0gcmVxdWlyZSgnLi9tZXNoJyksXG4gICAgZXh0cmFzID0gcmVxdWlyZSgnLi9leHRyYXMnKSxcbiAgICBmaWx0ZXJzID0gcmVxdWlyZSgnLi9maWx0ZXJzJyk7XG5cbi8qKlxuICogQGNsYXNzXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgU3ByaXRlQmF0Y2hcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAc2VlIFBJWEkuUGFydGljbGVDb250YWluZXJcbiAqIEB0aHJvd3Mge1JlZmVyZW5jZUVycm9yfSBTcHJpdGVCYXRjaCBkb2VzIG5vdCBleGlzdCBhbnkgbW9yZSwgcGxlYXNlIHVzZSB0aGUgbmV3IFBhcnRpY2xlQ29udGFpbmVyIGluc3RlYWQuXG4gKiBAZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDMuMC4wXG4gKi9cbmNvcmUuU3ByaXRlQmF0Y2ggPSBmdW5jdGlvbigpXG57XG4gICAgdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKCdTcHJpdGVCYXRjaCBkb2VzIG5vdCBleGlzdCBhbnkgbW9yZSwgcGxlYXNlIHVzZSB0aGUgbmV3IFBhcnRpY2xlQ29udGFpbmVyIGluc3RlYWQuJyk7XG59O1xuXG4vKipcbiAqIEBjbGFzc1xuICogQHByaXZhdGVcbiAqIEBuYW1lIEFzc2V0TG9hZGVyXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHNlZSBQSVhJLmxvYWRlcnMuTG9hZGVyXG4gKiBAdGhyb3dzIHtSZWZlcmVuY2VFcnJvcn0gVGhlIGxvYWRlciBzeXN0ZW0gd2FzIG92ZXJoYXVsZWQgaW4gcGl4aSB2MywgcGxlYXNlIHNlZSB0aGUgbmV3IFBJWEkubG9hZGVycy5Mb2FkZXIgY2xhc3MuXG4gKiBAZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDMuMC4wXG4gKi9cbmNvcmUuQXNzZXRMb2FkZXIgPSBmdW5jdGlvbigpXG57XG4gICAgdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKCdUaGUgbG9hZGVyIHN5c3RlbSB3YXMgb3ZlcmhhdWxlZCBpbiBwaXhpIHYzLCBwbGVhc2Ugc2VlIHRoZSBuZXcgUElYSS5sb2FkZXJzLkxvYWRlciBjbGFzcy4nKTtcbn07XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGNvcmUsIHtcblxuICAgIC8qKlxuICAgICAqIEBjbGFzc1xuICAgICAqIEBwcml2YXRlXG4gICAgICogQG5hbWUgU3RhZ2VcbiAgICAgKiBAbWVtYmVyb2YgUElYSVxuICAgICAqIEBzZWUgUElYSS5Db250YWluZXJcbiAgICAgKiBAZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDMuMC4wXG4gICAgICovXG4gICAgU3RhZ2U6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbigpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignWW91IGRvIG5vdCBuZWVkIHRvIHVzZSBhIFBJWEkgU3RhZ2UgYW55IG1vcmUsIHlvdSBjYW4gc2ltcGx5IHJlbmRlciBhbnkgY29udGFpbmVyLicpO1xuICAgICAgICAgICAgcmV0dXJuIGNvcmUuQ29udGFpbmVyO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIEBjbGFzc1xuICAgICAqIEBwcml2YXRlXG4gICAgICogQG5hbWUgRGlzcGxheU9iamVjdENvbnRhaW5lclxuICAgICAqIEBtZW1iZXJvZiBQSVhJXG4gICAgICogQHNlZSBQSVhJLkNvbnRhaW5lclxuICAgICAqIEBkZXByZWNhdGVkIHNpbmNlIHZlcnNpb24gMy4wLjBcbiAgICAgKi9cbiAgICBEaXNwbGF5T2JqZWN0Q29udGFpbmVyOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24oKVxuICAgICAgICB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ0Rpc3BsYXlPYmplY3RDb250YWluZXIgaGFzIGJlZW4gc2hvcnRlbmVkIHRvIENvbnRhaW5lciwgcGxlYXNlIHVzZSBDb250YWluZXIgZnJvbSBub3cgb24uJyk7XG4gICAgICAgICAgICByZXR1cm4gY29yZS5Db250YWluZXI7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQGNsYXNzXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAbmFtZSBTdHJpcFxuICAgICAqIEBtZW1iZXJvZiBQSVhJXG4gICAgICogQHNlZSBQSVhJLm1lc2guTWVzaFxuICAgICAqIEBkZXByZWNhdGVkIHNpbmNlIHZlcnNpb24gMy4wLjBcbiAgICAgKi9cbiAgICBTdHJpcDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uKClcbiAgICAgICAge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKCdUaGUgU3RyaXAgY2xhc3MgaGFzIGJlZW4gcmVuYW1lZCB0byBNZXNoIGFuZCBtb3ZlZCB0byBtZXNoLk1lc2gsIHBsZWFzZSB1c2UgbWVzaC5NZXNoIGZyb20gbm93IG9uLicpO1xuICAgICAgICAgICAgcmV0dXJuIG1lc2guTWVzaDtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBAY2xhc3NcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBuYW1lIFJvcGVcbiAgICAgKiBAbWVtYmVyb2YgUElYSVxuICAgICAqIEBzZWUgUElYSS5tZXNoLlJvcGVcbiAgICAgKiBAZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDMuMC4wXG4gICAgICovXG4gICAgUm9wZToge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uKClcbiAgICAgICAge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKCdUaGUgUm9wZSBjbGFzcyBoYXMgYmVlbiBtb3ZlZCB0byBtZXNoLlJvcGUsIHBsZWFzZSB1c2UgbWVzaC5Sb3BlIGZyb20gbm93IG9uLicpO1xuICAgICAgICAgICAgcmV0dXJuIG1lc2guUm9wZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBAY2xhc3NcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBuYW1lIE1vdmllQ2xpcFxuICAgICAqIEBtZW1iZXJvZiBQSVhJXG4gICAgICogQHNlZSBQSVhJLmV4dHJhcy5Nb3ZpZUNsaXBcbiAgICAgKiBAZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDMuMC4wXG4gICAgICovXG4gICAgTW92aWVDbGlwOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24oKVxuICAgICAgICB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ1RoZSBNb3ZpZUNsaXAgY2xhc3MgaGFzIGJlZW4gbW92ZWQgdG8gZXh0cmFzLk1vdmllQ2xpcCwgcGxlYXNlIHVzZSBleHRyYXMuTW92aWVDbGlwIGZyb20gbm93IG9uLicpO1xuICAgICAgICAgICAgcmV0dXJuIGV4dHJhcy5Nb3ZpZUNsaXA7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQGNsYXNzXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAbmFtZSBUaWxpbmdTcHJpdGVcbiAgICAgKiBAbWVtYmVyb2YgUElYSVxuICAgICAqIEBzZWUgUElYSS5leHRyYXMuVGlsaW5nU3ByaXRlXG4gICAgICogQGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiAzLjAuMFxuICAgICAqL1xuICAgIFRpbGluZ1Nwcml0ZToge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uKClcbiAgICAgICAge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKCdUaGUgVGlsaW5nU3ByaXRlIGNsYXNzIGhhcyBiZWVuIG1vdmVkIHRvIGV4dHJhcy5UaWxpbmdTcHJpdGUsIHBsZWFzZSB1c2UgZXh0cmFzLlRpbGluZ1Nwcml0ZSBmcm9tIG5vdyBvbi4nKTtcbiAgICAgICAgICAgIHJldHVybiBleHRyYXMuVGlsaW5nU3ByaXRlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIEBjbGFzc1xuICAgICAqIEBwcml2YXRlXG4gICAgICogQG5hbWUgQml0bWFwVGV4dFxuICAgICAqIEBtZW1iZXJvZiBQSVhJXG4gICAgICogQHNlZSBQSVhJLmV4dHJhcy5CaXRtYXBUZXh0XG4gICAgICogQGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiAzLjAuMFxuICAgICAqL1xuICAgIEJpdG1hcFRleHQ6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbigpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignVGhlIEJpdG1hcFRleHQgY2xhc3MgaGFzIGJlZW4gbW92ZWQgdG8gZXh0cmFzLkJpdG1hcFRleHQsIHBsZWFzZSB1c2UgZXh0cmFzLkJpdG1hcFRleHQgZnJvbSBub3cgb24uJyk7XG4gICAgICAgICAgICByZXR1cm4gZXh0cmFzLkJpdG1hcFRleHQ7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQGNsYXNzXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAbmFtZSBibGVuZE1vZGVzXG4gICAgICogQG1lbWJlcm9mIFBJWElcbiAgICAgKiBAc2VlIFBJWEkuQkxFTkRfTU9ERVNcbiAgICAgKiBAZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDMuMC4wXG4gICAgICovXG4gICAgYmxlbmRNb2Rlczoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uKClcbiAgICAgICAge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKCdUaGUgYmxlbmRNb2RlcyBoYXMgYmVlbiBtb3ZlZCB0byBCTEVORF9NT0RFUywgcGxlYXNlIHVzZSBCTEVORF9NT0RFUyBmcm9tIG5vdyBvbi4nKTtcbiAgICAgICAgICAgIHJldHVybiBjb3JlLkJMRU5EX01PREVTO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIEBjbGFzc1xuICAgICAqIEBwcml2YXRlXG4gICAgICogQG5hbWUgc2NhbGVNb2Rlc1xuICAgICAqIEBtZW1iZXJvZiBQSVhJXG4gICAgICogQHNlZSBQSVhJLlNDQUxFX01PREVTXG4gICAgICogQGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiAzLjAuMFxuICAgICAqL1xuICAgIHNjYWxlTW9kZXM6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbigpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignVGhlIHNjYWxlTW9kZXMgaGFzIGJlZW4gbW92ZWQgdG8gU0NBTEVfTU9ERVMsIHBsZWFzZSB1c2UgU0NBTEVfTU9ERVMgZnJvbSBub3cgb24uJyk7XG4gICAgICAgICAgICByZXR1cm4gY29yZS5TQ0FMRV9NT0RFUztcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBAY2xhc3NcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBuYW1lIEJhc2VUZXh0dXJlQ2FjaGVcbiAgICAgKiBAbWVtYmVyb2YgUElYSVxuICAgICAqIEBzZWUgUElYSS51dGlscy5CYXNlVGV4dHVyZUNhY2hlXG4gICAgICogQGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiAzLjAuMFxuICAgICAqL1xuICAgIEJhc2VUZXh0dXJlQ2FjaGU6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ1RoZSBCYXNlVGV4dHVyZUNhY2hlIGNsYXNzIGhhcyBiZWVuIG1vdmVkIHRvIHV0aWxzLkJhc2VUZXh0dXJlQ2FjaGUsIHBsZWFzZSB1c2UgdXRpbHMuQmFzZVRleHR1cmVDYWNoZSBmcm9tIG5vdyBvbi4nKTtcbiAgICAgICAgICAgIHJldHVybiBjb3JlLnV0aWxzLkJhc2VUZXh0dXJlQ2FjaGU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQGNsYXNzXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAbmFtZSBUZXh0dXJlQ2FjaGVcbiAgICAgKiBAbWVtYmVyb2YgUElYSVxuICAgICAqIEBzZWUgUElYSS51dGlscy5UZXh0dXJlQ2FjaGVcbiAgICAgKiBAZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDMuMC4wXG4gICAgICovXG4gICAgVGV4dHVyZUNhY2hlOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKCdUaGUgVGV4dHVyZUNhY2hlIGNsYXNzIGhhcyBiZWVuIG1vdmVkIHRvIHV0aWxzLlRleHR1cmVDYWNoZSwgcGxlYXNlIHVzZSB1dGlscy5UZXh0dXJlQ2FjaGUgZnJvbSBub3cgb24uJyk7XG4gICAgICAgICAgICByZXR1cm4gY29yZS51dGlscy5UZXh0dXJlQ2FjaGU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQG5hbWVzcGFjZVxuICAgICAqIEBwcml2YXRlXG4gICAgICogQG5hbWUgbWF0aFxuICAgICAqIEBtZW1iZXJvZiBQSVhJXG4gICAgICogQHNlZSBQSVhJXG4gICAgICogQGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiAzLjAuNlxuICAgICAqL1xuICAgIG1hdGg6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ1RoZSBtYXRoIG5hbWVzcGFjZSBpcyBkZXByZWNhdGVkLCBwbGVhc2UgYWNjZXNzIG1lbWJlcnMgYWxyZWFkeSBhY2Nlc3NpYmxlIG9uIFBJWEkuJyk7XG4gICAgICAgICAgICByZXR1cm4gY29yZTtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuXG4vKipcbiAqIEBtZXRob2RcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBQSVhJLlNwcml0ZSNzZXRUZXh0dXJlXG4gKiBAc2VlIFBJWEkuU3ByaXRlI3RleHR1cmVcbiAqIEBkZXByZWNhdGVkIHNpbmNlIHZlcnNpb24gMy4wLjBcbiAqL1xuY29yZS5TcHJpdGUucHJvdG90eXBlLnNldFRleHR1cmUgPSBmdW5jdGlvbih0ZXh0dXJlKVxue1xuICAgIHRoaXMudGV4dHVyZSA9IHRleHR1cmU7XG4gICAgY29uc29sZS53YXJuKCdzZXRUZXh0dXJlIGlzIG5vdyBkZXByZWNhdGVkLCBwbGVhc2UgdXNlIHRoZSB0ZXh0dXJlIHByb3BlcnR5LCBlLmcgOiBzcHJpdGUudGV4dHVyZSA9IHRleHR1cmU7Jyk7XG59O1xuXG4vKipcbiAqIEBtZXRob2RcbiAqIEBuYW1lIFBJWEkuZXh0cmFzLkJpdG1hcFRleHQjc2V0VGV4dFxuICogQHNlZSBQSVhJLmV4dHJhcy5CaXRtYXBUZXh0I3RleHRcbiAqIEBkZXByZWNhdGVkIHNpbmNlIHZlcnNpb24gMy4wLjBcbiAqL1xuZXh0cmFzLkJpdG1hcFRleHQucHJvdG90eXBlLnNldFRleHQgPSBmdW5jdGlvbih0ZXh0KVxue1xuICAgIHRoaXMudGV4dCA9IHRleHQ7XG4gICAgY29uc29sZS53YXJuKCdzZXRUZXh0IGlzIG5vdyBkZXByZWNhdGVkLCBwbGVhc2UgdXNlIHRoZSB0ZXh0IHByb3BlcnR5LCBlLmcgOiBteUJpdG1hcFRleHQudGV4dCA9IFxcJ215IHRleHRcXCc7Jyk7XG59O1xuXG4vKipcbiAqIEBtZXRob2RcbiAqIEBuYW1lIFBJWEkuVGV4dCNzZXRUZXh0XG4gKiBAc2VlIFBJWEkuVGV4dCN0ZXh0XG4gKiBAZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDMuMC4wXG4gKi9cbmNvcmUuVGV4dC5wcm90b3R5cGUuc2V0VGV4dCA9IGZ1bmN0aW9uKHRleHQpXG57XG4gICAgdGhpcy50ZXh0ID0gdGV4dDtcbiAgICBjb25zb2xlLndhcm4oJ3NldFRleHQgaXMgbm93IGRlcHJlY2F0ZWQsIHBsZWFzZSB1c2UgdGhlIHRleHQgcHJvcGVydHksIGUuZyA6IG15VGV4dC50ZXh0ID0gXFwnbXkgdGV4dFxcJzsnKTtcbn07XG5cbi8qKlxuICogQG1ldGhvZFxuICogQG5hbWUgUElYSS5UZXh0I3NldFN0eWxlXG4gKiBAc2VlIFBJWEkuVGV4dCNzdHlsZVxuICogQGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiAzLjAuMFxuICovXG5jb3JlLlRleHQucHJvdG90eXBlLnNldFN0eWxlID0gZnVuY3Rpb24oc3R5bGUpXG57XG4gICAgdGhpcy5zdHlsZSA9IHN0eWxlO1xuICAgIGNvbnNvbGUud2Fybignc2V0U3R5bGUgaXMgbm93IGRlcHJlY2F0ZWQsIHBsZWFzZSB1c2UgdGhlIHN0eWxlIHByb3BlcnR5LCBlLmcgOiBteVRleHQuc3R5bGUgPSBzdHlsZTsnKTtcbn07XG5cbi8qKlxuICogQG1ldGhvZFxuICogQG5hbWUgUElYSS5UZXh0dXJlI3NldEZyYW1lXG4gKiBAc2VlIFBJWEkuVGV4dHVyZSNzZXRGcmFtZVxuICogQGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiAzLjAuMFxuICovXG5jb3JlLlRleHR1cmUucHJvdG90eXBlLnNldEZyYW1lID0gZnVuY3Rpb24oZnJhbWUpXG57XG4gICAgdGhpcy5mcmFtZSA9IGZyYW1lO1xuICAgIGNvbnNvbGUud2Fybignc2V0RnJhbWUgaXMgbm93IGRlcHJlY2F0ZWQsIHBsZWFzZSB1c2UgdGhlIGZyYW1lIHByb3BlcnR5LCBlLmcgOiBteVRleHR1cmUuZnJhbWUgPSBmcmFtZTsnKTtcbn07XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGZpbHRlcnMsIHtcblxuICAgIC8qKlxuICAgICAqIEBjbGFzc1xuICAgICAqIEBwcml2YXRlXG4gICAgICogQG5hbWUgUElYSS5maWx0ZXJzLkFic3RyYWN0RmlsdGVyXG4gICAgICogQHNlZSBQSVhJLkFic3RyYWN0RmlsdGVyXG4gICAgICogQGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiAzLjAuNlxuICAgICAqL1xuICAgIEFic3RyYWN0RmlsdGVyOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24oKVxuICAgICAgICB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ2ZpbHRlcnMuQWJzdHJhY3RGaWx0ZXIgaXMgYW4gdW5kb2N1bWVudGVkIGFsaWFzLCBwbGVhc2UgdXNlIEFic3RyYWN0RmlsdGVyIGZyb20gbm93IG9uLicpO1xuICAgICAgICAgICAgcmV0dXJuIGNvcmUuQWJzdHJhY3RGaWx0ZXI7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQGNsYXNzXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAbmFtZSBQSVhJLmZpbHRlcnMuRlhBQUZpbHRlclxuICAgICAqIEBzZWUgUElYSS5GWEFBRmlsdGVyXG4gICAgICogQGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiAzLjAuNlxuICAgICAqL1xuICAgIEZYQUFGaWx0ZXI6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbigpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignZmlsdGVycy5GWEFBRmlsdGVyIGlzIGFuIHVuZG9jdW1lbnRlZCBhbGlhcywgcGxlYXNlIHVzZSBGWEFBRmlsdGVyIGZyb20gbm93IG9uLicpO1xuICAgICAgICAgICAgcmV0dXJuIGNvcmUuRlhBQUZpbHRlcjtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBAY2xhc3NcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBuYW1lIFBJWEkuZmlsdGVycy5TcHJpdGVNYXNrRmlsdGVyXG4gICAgICogQHNlZSBQSVhJLlNwcml0ZU1hc2tGaWx0ZXJcbiAgICAgKiBAZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDMuMC42XG4gICAgICovXG4gICAgU3ByaXRlTWFza0ZpbHRlcjoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uKClcbiAgICAgICAge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKCdmaWx0ZXJzLlNwcml0ZU1hc2tGaWx0ZXIgaXMgYW4gdW5kb2N1bWVudGVkIGFsaWFzLCBwbGVhc2UgdXNlIFNwcml0ZU1hc2tGaWx0ZXIgZnJvbSBub3cgb24uJyk7XG4gICAgICAgICAgICByZXR1cm4gY29yZS5TcHJpdGVNYXNrRmlsdGVyO1xuICAgICAgICB9XG4gICAgfVxufSk7XG5cbi8qKlxuICogQG1ldGhvZFxuICogQG5hbWUgUElYSS51dGlscy51dWlkXG4gKiBAc2VlIFBJWEkudXRpbHMudWlkXG4gKiBAZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDMuMC42XG4gKi9cbmNvcmUudXRpbHMudXVpZCA9IGZ1bmN0aW9uICgpXG57XG4gICAgY29uc29sZS53YXJuKCd1dGlscy51dWlkKCkgaXMgZGVwcmVjYXRlZCwgcGxlYXNlIHVzZSB1dGlscy51aWQoKSBmcm9tIG5vdyBvbi4nKTtcbiAgICByZXR1cm4gY29yZS51dGlscy51aWQoKTtcbn07XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uL2NvcmUnKTtcblxuLyoqXG4gKiBBIEJpdG1hcFRleHQgb2JqZWN0IHdpbGwgY3JlYXRlIGEgbGluZSBvciBtdWx0aXBsZSBsaW5lcyBvZiB0ZXh0IHVzaW5nIGJpdG1hcCBmb250LiBUb1xuICogc3BsaXQgYSBsaW5lIHlvdSBjYW4gdXNlICdcXG4nLCAnXFxyJyBvciAnXFxyXFxuJyBpbiB5b3VyIHN0cmluZy4gWW91IGNhbiBnZW5lcmF0ZSB0aGUgZm50IGZpbGVzIHVzaW5nOlxuICpcbiAqIEEgQml0bWFwVGV4dCBjYW4gb25seSBiZSBjcmVhdGVkIHdoZW4gdGhlIGZvbnQgaXMgbG9hZGVkXG4gKlxuICogYGBganNcbiAqIC8vIGluIHRoaXMgY2FzZSB0aGUgZm9udCBpcyBpbiBhIGZpbGUgY2FsbGVkICdkZXN5cmVsLmZudCdcbiAqIHZhciBiaXRtYXBUZXh0ID0gbmV3IFBJWEkuZXh0cmFzLkJpdG1hcFRleHQoXCJ0ZXh0IHVzaW5nIGEgZmFuY3kgZm9udCFcIiwge2ZvbnQ6IFwiMzVweCBEZXN5cmVsXCIsIGFsaWduOiBcInJpZ2h0XCJ9KTtcbiAqIGBgYFxuICpcbiAqXG4gKiBodHRwOi8vd3d3LmFuZ2VsY29kZS5jb20vcHJvZHVjdHMvYm1mb250LyBmb3Igd2luZG93cyBvclxuICogaHR0cDovL3d3dy5ibWdseXBoLmNvbS8gZm9yIG1hYy5cbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQ29udGFpbmVyXG4gKiBAbWVtYmVyb2YgUElYSS5leHRyYXNcbiAqIEBwYXJhbSB0ZXh0IHtzdHJpbmd9IFRoZSBjb3B5IHRoYXQgeW91IHdvdWxkIGxpa2UgdGhlIHRleHQgdG8gZGlzcGxheVxuICogQHBhcmFtIHN0eWxlIHtvYmplY3R9IFRoZSBzdHlsZSBwYXJhbWV0ZXJzXG4gKiBAcGFyYW0gc3R5bGUuZm9udCB7c3RyaW5nfG9iamVjdH0gVGhlIGZvbnQgZGVzY3JpcHRvciBmb3IgdGhlIG9iamVjdCwgY2FuIGJlIHBhc3NlZCBhcyBhIHN0cmluZyBvZiBmb3JtXG4gKiAgICAgIFwiMjRweCBGb250TmFtZVwiIG9yIFwiRm9udE5hbWVcIiBvciBhcyBhbiBvYmplY3Qgd2l0aCBleHBsaWNpdCBuYW1lL3NpemUgcHJvcGVydGllcy5cbiAqIEBwYXJhbSBbc3R5bGUuZm9udC5uYW1lXSB7c3RyaW5nfSBUaGUgYml0bWFwIGZvbnQgaWRcbiAqIEBwYXJhbSBbc3R5bGUuZm9udC5zaXplXSB7bnVtYmVyfSBUaGUgc2l6ZSBvZiB0aGUgZm9udCBpbiBwaXhlbHMsIGUuZy4gMjRcbiAqIEBwYXJhbSBbc3R5bGUuYWxpZ249J2xlZnQnXSB7c3RyaW5nfSBBbGlnbm1lbnQgZm9yIG11bHRpbGluZSB0ZXh0ICgnbGVmdCcsICdjZW50ZXInIG9yICdyaWdodCcpLCBkb2VzIG5vdCBhZmZlY3RcbiAqICAgICAgc2luZ2xlIGxpbmUgdGV4dFxuICogQHBhcmFtIFtzdHlsZS50aW50PTB4RkZGRkZGXSB7bnVtYmVyfSBUaGUgdGludCBjb2xvclxuICovXG5mdW5jdGlvbiBCaXRtYXBUZXh0KHRleHQsIHN0eWxlKVxue1xuICAgIGNvcmUuQ29udGFpbmVyLmNhbGwodGhpcyk7XG5cbiAgICBzdHlsZSA9IHN0eWxlIHx8IHt9O1xuXG4gICAgLyoqXG4gICAgICogVGhlIHdpZHRoIG9mIHRoZSBvdmVyYWxsIHRleHQsIGRpZmZlcmVudCBmcm9tIGZvbnRTaXplLFxuICAgICAqIHdoaWNoIGlzIGRlZmluZWQgaW4gdGhlIHN0eWxlIG9iamVjdFxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEByZWFkT25seVxuICAgICAqL1xuICAgIHRoaXMudGV4dFdpZHRoID0gMDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBoZWlnaHQgb2YgdGhlIG92ZXJhbGwgdGV4dCwgZGlmZmVyZW50IGZyb20gZm9udFNpemUsXG4gICAgICogd2hpY2ggaXMgZGVmaW5lZCBpbiB0aGUgc3R5bGUgb2JqZWN0XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQHJlYWRPbmx5XG4gICAgICovXG4gICAgdGhpcy50ZXh0SGVpZ2h0ID0gMDtcblxuICAgIC8qKlxuICAgICAqIFByaXZhdGUgdHJhY2tlciBmb3IgdGhlIGxldHRlciBzcHJpdGUgcG9vbC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuU3ByaXRlW119XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9nbHlwaHMgPSBbXTtcblxuICAgIC8qKlxuICAgICAqIFByaXZhdGUgdHJhY2tlciBmb3IgdGhlIGN1cnJlbnQgc3R5bGUuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtvYmplY3R9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9mb250ID0ge1xuICAgICAgICB0aW50OiBzdHlsZS50aW50ICE9PSB1bmRlZmluZWQgPyBzdHlsZS50aW50IDogMHhGRkZGRkYsXG4gICAgICAgIGFsaWduOiBzdHlsZS5hbGlnbiB8fCAnbGVmdCcsXG4gICAgICAgIG5hbWU6IG51bGwsXG4gICAgICAgIHNpemU6IDBcbiAgICB9O1xuXG4gICAgLyoqXG4gICAgICogUHJpdmF0ZSB0cmFja2VyIGZvciB0aGUgY3VycmVudCBmb250LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7b2JqZWN0fVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5mb250ID0gc3R5bGUuZm9udDsgLy8gcnVuIGZvbnQgc2V0dGVyXG5cbiAgICAvKipcbiAgICAgKiBQcml2YXRlIHRyYWNrZXIgZm9yIHRoZSBjdXJyZW50IHRleHQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtzdHJpbmd9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl90ZXh0ID0gdGV4dDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBtYXggd2lkdGggb2YgdGhpcyBiaXRtYXAgdGV4dCBpbiBwaXhlbHMuIElmIHRoZSB0ZXh0IHByb3ZpZGVkIGlzIGxvbmdlciB0aGFuIHRoZSB2YWx1ZSBwcm92aWRlZCwgbGluZSBicmVha3Mgd2lsbCBiZSBhdXRvbWF0aWNhbGx5IGluc2VydGVkIGluIHRoZSBsYXN0IHdoaXRlc3BhY2UuXG4gICAgICogRGlzYWJsZSBieSBzZXR0aW5nIHZhbHVlIHRvIDBcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLm1heFdpZHRoID0gMDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBtYXggbGluZSBoZWlnaHQuIFRoaXMgaXMgdXNlZnVsIHdoZW4gdHJ5aW5nIHRvIHVzZSB0aGUgdG90YWwgaGVpZ2h0IG9mIHRoZSBUZXh0LCBpZTogd2hlbiB0cnlpbmcgdG8gdmVydGljYWxseSBhbGlnbi5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLm1heExpbmVIZWlnaHQgPSAwO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGRpcnR5IHN0YXRlIG9mIHRoaXMgb2JqZWN0LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKi9cbiAgICB0aGlzLmRpcnR5ID0gZmFsc2U7XG5cbiAgICB0aGlzLnVwZGF0ZVRleHQoKTtcbn1cblxuLy8gY29uc3RydWN0b3JcbkJpdG1hcFRleHQucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShjb3JlLkNvbnRhaW5lci5wcm90b3R5cGUpO1xuQml0bWFwVGV4dC5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBCaXRtYXBUZXh0O1xubW9kdWxlLmV4cG9ydHMgPSBCaXRtYXBUZXh0O1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhCaXRtYXBUZXh0LnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFRoZSB0aW50IG9mIHRoZSBCaXRtYXBUZXh0IG9iamVjdFxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmV4dHJhcy5CaXRtYXBUZXh0I1xuICAgICAqL1xuICAgIHRpbnQ6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fZm9udC50aW50O1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5fZm9udC50aW50ID0gKHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicgJiYgdmFsdWUgPj0gMCkgPyB2YWx1ZSA6IDB4RkZGRkZGO1xuXG4gICAgICAgICAgICB0aGlzLmRpcnR5ID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBUaGUgYWxpZ25tZW50IG9mIHRoZSBCaXRtYXBUZXh0IG9iamVjdFxuICAgICAqXG4gICAgICogQG1lbWJlciB7c3RyaW5nfVxuICAgICAqIEBkZWZhdWx0ICdsZWZ0J1xuICAgICAqIEBtZW1iZXJvZiBQSVhJLmV4dHJhcy5CaXRtYXBUZXh0I1xuICAgICAqL1xuICAgIGFsaWduOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2ZvbnQuYWxpZ247XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLl9mb250LmFsaWduID0gdmFsdWUgfHwgJ2xlZnQnO1xuXG4gICAgICAgICAgICB0aGlzLmRpcnR5ID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBUaGUgZm9udCBkZXNjcmlwdG9yIG9mIHRoZSBCaXRtYXBUZXh0IG9iamVjdFxuICAgICAqXG4gICAgICogQG1lbWJlciB7Rm9udH1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5leHRyYXMuQml0bWFwVGV4dCNcbiAgICAgKi9cbiAgICBmb250OiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2ZvbnQ7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICBpZiAoIXZhbHVlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgICAgIHZhbHVlID0gdmFsdWUuc3BsaXQoJyAnKTtcblxuICAgICAgICAgICAgICAgIHRoaXMuX2ZvbnQubmFtZSA9IHZhbHVlLmxlbmd0aCA9PT0gMSA/IHZhbHVlWzBdIDogdmFsdWUuc2xpY2UoMSkuam9pbignICcpO1xuICAgICAgICAgICAgICAgIHRoaXMuX2ZvbnQuc2l6ZSA9IHZhbHVlLmxlbmd0aCA+PSAyID8gcGFyc2VJbnQodmFsdWVbMF0sIDEwKSA6IEJpdG1hcFRleHQuZm9udHNbdGhpcy5fZm9udC5uYW1lXS5zaXplO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fZm9udC5uYW1lID0gdmFsdWUubmFtZTtcbiAgICAgICAgICAgICAgICB0aGlzLl9mb250LnNpemUgPSB0eXBlb2YgdmFsdWUuc2l6ZSA9PT0gJ251bWJlcicgPyB2YWx1ZS5zaXplIDogcGFyc2VJbnQodmFsdWUuc2l6ZSwgMTApO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLmRpcnR5ID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBUaGUgdGV4dCBvZiB0aGUgQml0bWFwVGV4dCBvYmplY3RcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge3N0cmluZ31cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5leHRyYXMuQml0bWFwVGV4dCNcbiAgICAgKi9cbiAgICB0ZXh0OiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3RleHQ7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB2YWx1ZSA9IHZhbHVlLnRvU3RyaW5nKCkgfHwgJyAnO1xuICAgICAgICAgICAgaWYgKHRoaXMuX3RleHQgPT09IHZhbHVlKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuX3RleHQgPSB2YWx1ZTtcbiAgICAgICAgICAgIHRoaXMuZGlydHkgPSB0cnVlO1xuICAgICAgICB9XG4gICAgfVxufSk7XG5cbi8qKlxuICogUmVuZGVycyB0ZXh0IGFuZCB1cGRhdGVzIGl0IHdoZW4gbmVlZGVkXG4gKlxuICogQHByaXZhdGVcbiAqL1xuQml0bWFwVGV4dC5wcm90b3R5cGUudXBkYXRlVGV4dCA9IGZ1bmN0aW9uICgpXG57XG4gICAgdmFyIGRhdGEgPSBCaXRtYXBUZXh0LmZvbnRzW3RoaXMuX2ZvbnQubmFtZV07XG4gICAgdmFyIHBvcyA9IG5ldyBjb3JlLlBvaW50KCk7XG4gICAgdmFyIHByZXZDaGFyQ29kZSA9IG51bGw7XG4gICAgdmFyIGNoYXJzID0gW107XG4gICAgdmFyIGxhc3RMaW5lV2lkdGggPSAwO1xuICAgIHZhciBtYXhMaW5lV2lkdGggPSAwO1xuICAgIHZhciBsaW5lV2lkdGhzID0gW107XG4gICAgdmFyIGxpbmUgPSAwO1xuICAgIHZhciBzY2FsZSA9IHRoaXMuX2ZvbnQuc2l6ZSAvIGRhdGEuc2l6ZTtcbiAgICB2YXIgbGFzdFNwYWNlID0gLTE7XG4gICAgdmFyIG1heExpbmVIZWlnaHQgPSAwO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLnRleHQubGVuZ3RoOyBpKyspXG4gICAge1xuICAgICAgICB2YXIgY2hhckNvZGUgPSB0aGlzLnRleHQuY2hhckNvZGVBdChpKTtcbiAgICAgICAgbGFzdFNwYWNlID0gLyhcXHMpLy50ZXN0KHRoaXMudGV4dC5jaGFyQXQoaSkpID8gaSA6IGxhc3RTcGFjZTtcblxuICAgICAgICBpZiAoLyg/OlxcclxcbnxcXHJ8XFxuKS8udGVzdCh0aGlzLnRleHQuY2hhckF0KGkpKSlcbiAgICAgICAge1xuICAgICAgICAgICAgbGluZVdpZHRocy5wdXNoKGxhc3RMaW5lV2lkdGgpO1xuICAgICAgICAgICAgbWF4TGluZVdpZHRoID0gTWF0aC5tYXgobWF4TGluZVdpZHRoLCBsYXN0TGluZVdpZHRoKTtcbiAgICAgICAgICAgIGxpbmUrKztcblxuICAgICAgICAgICAgcG9zLnggPSAwO1xuICAgICAgICAgICAgcG9zLnkgKz0gZGF0YS5saW5lSGVpZ2h0O1xuICAgICAgICAgICAgcHJldkNoYXJDb2RlID0gbnVsbDtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGxhc3RTcGFjZSAhPT0gLTEgJiYgdGhpcy5tYXhXaWR0aCA+IDAgJiYgcG9zLnggKiBzY2FsZSA+IHRoaXMubWF4V2lkdGgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNvcmUudXRpbHMucmVtb3ZlSXRlbXMoY2hhcnMsIGxhc3RTcGFjZSwgaSAtIGxhc3RTcGFjZSk7XG4gICAgICAgICAgICBpID0gbGFzdFNwYWNlO1xuICAgICAgICAgICAgbGFzdFNwYWNlID0gLTE7XG5cbiAgICAgICAgICAgIGxpbmVXaWR0aHMucHVzaChsYXN0TGluZVdpZHRoKTtcbiAgICAgICAgICAgIG1heExpbmVXaWR0aCA9IE1hdGgubWF4KG1heExpbmVXaWR0aCwgbGFzdExpbmVXaWR0aCk7XG4gICAgICAgICAgICBsaW5lKys7XG5cbiAgICAgICAgICAgIHBvcy54ID0gMDtcbiAgICAgICAgICAgIHBvcy55ICs9IGRhdGEubGluZUhlaWdodDtcbiAgICAgICAgICAgIHByZXZDaGFyQ29kZSA9IG51bGw7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBjaGFyRGF0YSA9IGRhdGEuY2hhcnNbY2hhckNvZGVdO1xuXG4gICAgICAgIGlmICghY2hhckRhdGEpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHByZXZDaGFyQ29kZSAmJiBjaGFyRGF0YS5rZXJuaW5nW3ByZXZDaGFyQ29kZV0pXG4gICAgICAgIHtcbiAgICAgICAgICAgIHBvcy54ICs9IGNoYXJEYXRhLmtlcm5pbmdbcHJldkNoYXJDb2RlXTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNoYXJzLnB1c2goe3RleHR1cmU6Y2hhckRhdGEudGV4dHVyZSwgbGluZTogbGluZSwgY2hhckNvZGU6IGNoYXJDb2RlLCBwb3NpdGlvbjogbmV3IGNvcmUuUG9pbnQocG9zLnggKyBjaGFyRGF0YS54T2Zmc2V0LCBwb3MueSArIGNoYXJEYXRhLnlPZmZzZXQpfSk7XG4gICAgICAgIGxhc3RMaW5lV2lkdGggPSBwb3MueCArIChjaGFyRGF0YS50ZXh0dXJlLndpZHRoICsgY2hhckRhdGEueE9mZnNldCk7XG4gICAgICAgIHBvcy54ICs9IGNoYXJEYXRhLnhBZHZhbmNlO1xuICAgICAgICBtYXhMaW5lSGVpZ2h0ID0gTWF0aC5tYXgobWF4TGluZUhlaWdodCwgKGNoYXJEYXRhLnlPZmZzZXQgKyBjaGFyRGF0YS50ZXh0dXJlLmhlaWdodCkpO1xuICAgICAgICBwcmV2Q2hhckNvZGUgPSBjaGFyQ29kZTtcbiAgICB9XG5cbiAgICBsaW5lV2lkdGhzLnB1c2gobGFzdExpbmVXaWR0aCk7XG4gICAgbWF4TGluZVdpZHRoID0gTWF0aC5tYXgobWF4TGluZVdpZHRoLCBsYXN0TGluZVdpZHRoKTtcblxuICAgIHZhciBsaW5lQWxpZ25PZmZzZXRzID0gW107XG5cbiAgICBmb3IgKGkgPSAwOyBpIDw9IGxpbmU7IGkrKylcbiAgICB7XG4gICAgICAgIHZhciBhbGlnbk9mZnNldCA9IDA7XG5cbiAgICAgICAgaWYgKHRoaXMuX2ZvbnQuYWxpZ24gPT09ICdyaWdodCcpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGFsaWduT2Zmc2V0ID0gbWF4TGluZVdpZHRoIC0gbGluZVdpZHRoc1tpXTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh0aGlzLl9mb250LmFsaWduID09PSAnY2VudGVyJylcbiAgICAgICAge1xuICAgICAgICAgICAgYWxpZ25PZmZzZXQgPSAobWF4TGluZVdpZHRoIC0gbGluZVdpZHRoc1tpXSkgLyAyO1xuICAgICAgICB9XG5cbiAgICAgICAgbGluZUFsaWduT2Zmc2V0cy5wdXNoKGFsaWduT2Zmc2V0KTtcbiAgICB9XG5cbiAgICB2YXIgbGVuQ2hhcnMgPSBjaGFycy5sZW5ndGg7XG4gICAgdmFyIHRpbnQgPSB0aGlzLnRpbnQ7XG5cbiAgICBmb3IgKGkgPSAwOyBpIDwgbGVuQ2hhcnM7IGkrKylcbiAgICB7XG4gICAgICAgIHZhciBjID0gdGhpcy5fZ2x5cGhzW2ldOyAvLyBnZXQgdGhlIG5leHQgZ2x5cGggc3ByaXRlXG5cbiAgICAgICAgaWYgKGMpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGMudGV4dHVyZSA9IGNoYXJzW2ldLnRleHR1cmU7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgICBjID0gbmV3IGNvcmUuU3ByaXRlKGNoYXJzW2ldLnRleHR1cmUpO1xuICAgICAgICAgICAgdGhpcy5fZ2x5cGhzLnB1c2goYyk7XG4gICAgICAgIH1cblxuICAgICAgICBjLnBvc2l0aW9uLnggPSAoY2hhcnNbaV0ucG9zaXRpb24ueCArIGxpbmVBbGlnbk9mZnNldHNbY2hhcnNbaV0ubGluZV0pICogc2NhbGU7XG4gICAgICAgIGMucG9zaXRpb24ueSA9IGNoYXJzW2ldLnBvc2l0aW9uLnkgKiBzY2FsZTtcbiAgICAgICAgYy5zY2FsZS54ID0gYy5zY2FsZS55ID0gc2NhbGU7XG4gICAgICAgIGMudGludCA9IHRpbnQ7XG5cbiAgICAgICAgaWYgKCFjLnBhcmVudClcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5hZGRDaGlsZChjKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIHJlbW92ZSB1bm5lY2Vzc2FyeSBjaGlsZHJlbi5cbiAgICBmb3IgKGkgPSBsZW5DaGFyczsgaSA8IHRoaXMuX2dseXBocy5sZW5ndGg7ICsraSlcbiAgICB7XG4gICAgICAgIHRoaXMucmVtb3ZlQ2hpbGQodGhpcy5fZ2x5cGhzW2ldKTtcbiAgICB9XG5cbiAgICB0aGlzLnRleHRXaWR0aCA9IG1heExpbmVXaWR0aCAqIHNjYWxlO1xuICAgIHRoaXMudGV4dEhlaWdodCA9IChwb3MueSArIGRhdGEubGluZUhlaWdodCkgKiBzY2FsZTtcbiAgICB0aGlzLm1heExpbmVIZWlnaHQgPSBtYXhMaW5lSGVpZ2h0ICogc2NhbGU7XG59O1xuXG4vKipcbiAqIFVwZGF0ZXMgdGhlIHRyYW5zZm9ybSBvZiB0aGlzIG9iamVjdFxuICpcbiAqIEBwcml2YXRlXG4gKi9cbkJpdG1hcFRleHQucHJvdG90eXBlLnVwZGF0ZVRyYW5zZm9ybSA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy52YWxpZGF0ZSgpO1xuICAgIHRoaXMuY29udGFpbmVyVXBkYXRlVHJhbnNmb3JtKCk7XG59O1xuXG4vKipcbiAqIFZhbGlkYXRlcyB0ZXh0IGJlZm9yZSBjYWxsaW5nIHBhcmVudCdzIGdldExvY2FsQm91bmRzXG4gKlxuICogQHJldHVybiB7UElYSS5SZWN0YW5nbGV9IFRoZSByZWN0YW5ndWxhciBib3VuZGluZyBhcmVhXG4gKi9cblxuQml0bWFwVGV4dC5wcm90b3R5cGUuZ2V0TG9jYWxCb3VuZHMgPSBmdW5jdGlvbigpXG57XG4gICAgdGhpcy52YWxpZGF0ZSgpO1xuICAgIHJldHVybiBjb3JlLkNvbnRhaW5lci5wcm90b3R5cGUuZ2V0TG9jYWxCb3VuZHMuY2FsbCh0aGlzKTtcbn07XG5cbi8qKlxuICogVXBkYXRlcyB0ZXh0IHdoZW4gbmVlZGVkXG4gKlxuICogQHByaXZhdGVcbiAqL1xuQml0bWFwVGV4dC5wcm90b3R5cGUudmFsaWRhdGUgPSBmdW5jdGlvbigpXG57XG4gICAgaWYgKHRoaXMuZGlydHkpXG4gICAge1xuICAgICAgICB0aGlzLnVwZGF0ZVRleHQoKTtcbiAgICAgICAgdGhpcy5kaXJ0eSA9IGZhbHNlO1xuICAgIH1cbn07XG5cbkJpdG1hcFRleHQuZm9udHMgPSB7fTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vY29yZScpO1xuXG4vKipcbiAqIEEgTW92aWVDbGlwIGlzIGEgc2ltcGxlIHdheSB0byBkaXNwbGF5IGFuIGFuaW1hdGlvbiBkZXBpY3RlZCBieSBhIGxpc3Qgb2YgdGV4dHVyZXMuXG4gKlxuICogYGBganNcbiAqIHZhciBhbGllbkltYWdlcyA9IFtcImltYWdlX3NlcXVlbmNlXzAxLnBuZ1wiLFwiaW1hZ2Vfc2VxdWVuY2VfMDIucG5nXCIsXCJpbWFnZV9zZXF1ZW5jZV8wMy5wbmdcIixcImltYWdlX3NlcXVlbmNlXzA0LnBuZ1wiXTtcbiAqIHZhciB0ZXh0dXJlQXJyYXkgPSBbXTtcbiAqXG4gKiBmb3IgKHZhciBpPTA7IGkgPCA0OyBpKyspXG4gKiB7XG4gKiAgICAgIHZhciB0ZXh0dXJlID0gUElYSS5UZXh0dXJlLmZyb21JbWFnZShhbGllbkltYWdlc1tpXSk7XG4gKiAgICAgIHRleHR1cmVBcnJheS5wdXNoKHRleHR1cmUpO1xuICogfTtcbiAqXG4gKiB2YXIgbWMgPSBuZXcgUElYSS5Nb3ZpZUNsaXAodGV4dHVyZUFycmF5KTtcbiAqIGBgYFxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5TcHJpdGVcbiAqIEBtZW1iZXJvZiBQSVhJLmV4dHJhc1xuICogQHBhcmFtIHRleHR1cmVzIHtQSVhJLlRleHR1cmVbXXxPYmplY3RbXX0gYW4gYXJyYXkgb2Yge0BsaW5rIFBJWEkuVGV4dHVyZX0gb3IgZnJhbWUgb2JqZWN0cyB0aGF0IG1ha2UgdXAgdGhlIGFuaW1hdGlvblxuICogQHBhcmFtIHRleHR1cmVzW10udGV4dHVyZSB7UElYSS5UZXh0dXJlfSB0aGUge0BsaW5rIFBJWEkuVGV4dHVyZX0gb2YgdGhlIGZyYW1lXG4gKiBAcGFyYW0gdGV4dHVyZXNbXS50aW1lIHtudW1iZXJ9IHRoZSBkdXJhdGlvbiBvZiB0aGUgZnJhbWUgaW4gbXNcbiAqL1xuZnVuY3Rpb24gTW92aWVDbGlwKHRleHR1cmVzKVxue1xuICAgIGNvcmUuU3ByaXRlLmNhbGwodGhpcywgdGV4dHVyZXNbMF0gaW5zdGFuY2VvZiBjb3JlLlRleHR1cmUgPyB0ZXh0dXJlc1swXSA6IHRleHR1cmVzWzBdLnRleHR1cmUpO1xuXG4gICAgLyoqXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl90ZXh0dXJlcyA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX2R1cmF0aW9ucyA9IG51bGw7XG5cbiAgICB0aGlzLnRleHR1cmVzID0gdGV4dHVyZXM7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgc3BlZWQgdGhhdCB0aGUgTW92aWVDbGlwIHdpbGwgcGxheSBhdC4gSGlnaGVyIGlzIGZhc3RlciwgbG93ZXIgaXMgc2xvd2VyXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMVxuICAgICAqL1xuICAgIHRoaXMuYW5pbWF0aW9uU3BlZWQgPSAxO1xuXG4gICAgLyoqXG4gICAgICogV2hldGhlciBvciBub3QgdGhlIG1vdmllIGNsaXAgcmVwZWF0cyBhZnRlciBwbGF5aW5nLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKiBAZGVmYXVsdCB0cnVlXG4gICAgICovXG4gICAgdGhpcy5sb29wID0gdHJ1ZTtcblxuICAgIC8qKlxuICAgICAqIEZ1bmN0aW9uIHRvIGNhbGwgd2hlbiBhIE1vdmllQ2xpcCBmaW5pc2hlcyBwbGF5aW5nXG4gICAgICpcbiAgICAgKiBAbWV0aG9kXG4gICAgICogQG1lbWJlcm9mIFBJWEkuZXh0cmFzLk1vdmllQ2xpcCNcbiAgICAgKi9cbiAgICB0aGlzLm9uQ29tcGxldGUgPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogRWxhcHNlZCB0aW1lIHNpbmNlIGFuaW1hdGlvbiBoYXMgYmVlbiBzdGFydGVkLCB1c2VkIGludGVybmFsbHkgdG8gZGlzcGxheSBjdXJyZW50IHRleHR1cmVcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX2N1cnJlbnRUaW1lID0gMDtcblxuICAgIC8qKlxuICAgICAqIEluZGljYXRlcyBpZiB0aGUgTW92aWVDbGlwIGlzIGN1cnJlbnRseSBwbGF5aW5nXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqIEByZWFkb25seVxuICAgICAqL1xuICAgIHRoaXMucGxheWluZyA9IGZhbHNlO1xufVxuXG4vLyBjb25zdHJ1Y3RvclxuTW92aWVDbGlwLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoY29yZS5TcHJpdGUucHJvdG90eXBlKTtcbk1vdmllQ2xpcC5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBNb3ZpZUNsaXA7XG5tb2R1bGUuZXhwb3J0cyA9IE1vdmllQ2xpcDtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoTW92aWVDbGlwLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIHRvdGFsRnJhbWVzIGlzIHRoZSB0b3RhbCBudW1iZXIgb2YgZnJhbWVzIGluIHRoZSBNb3ZpZUNsaXAuIFRoaXMgaXMgdGhlIHNhbWUgYXMgbnVtYmVyIG9mIHRleHR1cmVzXG4gICAgICogYXNzaWduZWQgdG8gdGhlIE1vdmllQ2xpcC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5leHRyYXMuTW92aWVDbGlwI1xuICAgICAqIEBkZWZhdWx0IDBcbiAgICAgKiBAcmVhZG9ubHlcbiAgICAgKi9cbiAgICB0b3RhbEZyYW1lczoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3RleHR1cmVzLmxlbmd0aDtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBUaGUgYXJyYXkgb2YgdGV4dHVyZXMgdXNlZCBmb3IgdGhpcyBNb3ZpZUNsaXBcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuVGV4dHVyZVtdfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmV4dHJhcy5Nb3ZpZUNsaXAjXG4gICAgICpcbiAgICAgKi9cbiAgICB0ZXh0dXJlczoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl90ZXh0dXJlcztcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGlmKHZhbHVlWzBdIGluc3RhbmNlb2YgY29yZS5UZXh0dXJlKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHRoaXMuX3RleHR1cmVzID0gdmFsdWU7XG4gICAgICAgICAgICAgICAgdGhpcy5fZHVyYXRpb25zID0gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB0aGlzLl90ZXh0dXJlcyA9IFtdO1xuICAgICAgICAgICAgICAgIHRoaXMuX2R1cmF0aW9ucyA9IFtdO1xuICAgICAgICAgICAgICAgIGZvcih2YXIgaSA9IDA7IGkgPCB2YWx1ZS5sZW5ndGg7IGkrKylcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3RleHR1cmVzLnB1c2godmFsdWVbaV0udGV4dHVyZSk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2R1cmF0aW9ucy5wdXNoKHZhbHVlW2ldLnRpbWUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAqIFRoZSBNb3ZpZUNsaXBzIGN1cnJlbnQgZnJhbWUgaW5kZXhcbiAgICAqXG4gICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgKiBAbWVtYmVyb2YgUElYSS5leHRyYXMuTW92aWVDbGlwI1xuICAgICogQHJlYWRvbmx5XG4gICAgKi9cbiAgICBjdXJyZW50RnJhbWU6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICB2YXIgY3VycmVudEZyYW1lID0gTWF0aC5mbG9vcih0aGlzLl9jdXJyZW50VGltZSkgJSB0aGlzLl90ZXh0dXJlcy5sZW5ndGg7XG4gICAgICAgICAgICBpZiAoY3VycmVudEZyYW1lIDwgMClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjdXJyZW50RnJhbWUgKz0gdGhpcy5fdGV4dHVyZXMubGVuZ3RoO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGN1cnJlbnRGcmFtZTtcbiAgICAgICAgfVxuICAgIH1cblxufSk7XG5cbi8qKlxuICogU3RvcHMgdGhlIE1vdmllQ2xpcFxuICpcbiAqL1xuTW92aWVDbGlwLnByb3RvdHlwZS5zdG9wID0gZnVuY3Rpb24gKClcbntcbiAgICBpZighdGhpcy5wbGF5aW5nKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMucGxheWluZyA9IGZhbHNlO1xuICAgIGNvcmUudGlja2VyLnNoYXJlZC5yZW1vdmUodGhpcy51cGRhdGUsIHRoaXMpO1xufTtcblxuLyoqXG4gKiBQbGF5cyB0aGUgTW92aWVDbGlwXG4gKlxuICovXG5Nb3ZpZUNsaXAucHJvdG90eXBlLnBsYXkgPSBmdW5jdGlvbiAoKVxue1xuICAgIGlmKHRoaXMucGxheWluZylcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLnBsYXlpbmcgPSB0cnVlO1xuICAgIGNvcmUudGlja2VyLnNoYXJlZC5hZGQodGhpcy51cGRhdGUsIHRoaXMpO1xufTtcblxuLyoqXG4gKiBTdG9wcyB0aGUgTW92aWVDbGlwIGFuZCBnb2VzIHRvIGEgc3BlY2lmaWMgZnJhbWVcbiAqXG4gKiBAcGFyYW0gZnJhbWVOdW1iZXIge251bWJlcn0gZnJhbWUgaW5kZXggdG8gc3RvcCBhdFxuICovXG5Nb3ZpZUNsaXAucHJvdG90eXBlLmdvdG9BbmRTdG9wID0gZnVuY3Rpb24gKGZyYW1lTnVtYmVyKVxue1xuICAgIHRoaXMuc3RvcCgpO1xuXG4gICAgdGhpcy5fY3VycmVudFRpbWUgPSBmcmFtZU51bWJlcjtcblxuICAgIHRoaXMuX3RleHR1cmUgPSB0aGlzLl90ZXh0dXJlc1t0aGlzLmN1cnJlbnRGcmFtZV07XG59O1xuXG4vKipcbiAqIEdvZXMgdG8gYSBzcGVjaWZpYyBmcmFtZSBhbmQgYmVnaW5zIHBsYXlpbmcgdGhlIE1vdmllQ2xpcFxuICpcbiAqIEBwYXJhbSBmcmFtZU51bWJlciB7bnVtYmVyfSBmcmFtZSBpbmRleCB0byBzdGFydCBhdFxuICovXG5Nb3ZpZUNsaXAucHJvdG90eXBlLmdvdG9BbmRQbGF5ID0gZnVuY3Rpb24gKGZyYW1lTnVtYmVyKVxue1xuICAgIHRoaXMuX2N1cnJlbnRUaW1lID0gZnJhbWVOdW1iZXI7XG5cbiAgICB0aGlzLnBsYXkoKTtcbn07XG5cbi8qXG4gKiBVcGRhdGVzIHRoZSBvYmplY3QgdHJhbnNmb3JtIGZvciByZW5kZXJpbmdcbiAqIEBwcml2YXRlXG4gKi9cbk1vdmllQ2xpcC5wcm90b3R5cGUudXBkYXRlID0gZnVuY3Rpb24gKGRlbHRhVGltZSlcbntcbiAgICB2YXIgZWxhcHNlZCA9IHRoaXMuYW5pbWF0aW9uU3BlZWQgKiBkZWx0YVRpbWU7XG5cbiAgICBpZiAodGhpcy5fZHVyYXRpb25zICE9PSBudWxsKVxuICAgIHtcbiAgICAgICAgdmFyIGxhZyA9IHRoaXMuX2N1cnJlbnRUaW1lICUgMSAqIHRoaXMuX2R1cmF0aW9uc1t0aGlzLmN1cnJlbnRGcmFtZV07XG5cbiAgICAgICAgbGFnICs9IGVsYXBzZWQgLyA2MCAqIDEwMDA7XG5cbiAgICAgICAgd2hpbGUgKGxhZyA8IDApXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuX2N1cnJlbnRUaW1lLS07XG4gICAgICAgICAgICBsYWcgKz0gdGhpcy5fZHVyYXRpb25zW3RoaXMuY3VycmVudEZyYW1lXTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBzaWduID0gTWF0aC5zaWduKHRoaXMuYW5pbWF0aW9uU3BlZWQgKiBkZWx0YVRpbWUpO1xuICAgICAgICB0aGlzLl9jdXJyZW50VGltZSA9IE1hdGguZmxvb3IodGhpcy5fY3VycmVudFRpbWUpO1xuXG4gICAgICAgIHdoaWxlIChsYWcgPj0gdGhpcy5fZHVyYXRpb25zW3RoaXMuY3VycmVudEZyYW1lXSlcbiAgICAgICAge1xuICAgICAgICAgICAgbGFnIC09IHRoaXMuX2R1cmF0aW9uc1t0aGlzLmN1cnJlbnRGcmFtZV0gKiBzaWduO1xuICAgICAgICAgICAgdGhpcy5fY3VycmVudFRpbWUgKz0gc2lnbjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX2N1cnJlbnRUaW1lICs9IGxhZyAvIHRoaXMuX2R1cmF0aW9uc1t0aGlzLmN1cnJlbnRGcmFtZV07XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHRoaXMuX2N1cnJlbnRUaW1lICs9IGVsYXBzZWQ7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX2N1cnJlbnRUaW1lIDwgMCAmJiAhdGhpcy5sb29wKVxuICAgIHtcbiAgICAgICAgdGhpcy5nb3RvQW5kU3RvcCgwKTtcblxuICAgICAgICBpZiAodGhpcy5vbkNvbXBsZXRlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLm9uQ29tcGxldGUoKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBlbHNlIGlmICh0aGlzLl9jdXJyZW50VGltZSA+PSB0aGlzLl90ZXh0dXJlcy5sZW5ndGggJiYgIXRoaXMubG9vcClcbiAgICB7XG4gICAgICAgIHRoaXMuZ290b0FuZFN0b3AodGhpcy5fdGV4dHVyZXMubGVuZ3RoIC0gMSk7XG5cbiAgICAgICAgaWYgKHRoaXMub25Db21wbGV0ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5vbkNvbXBsZXRlKCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgdGhpcy5fdGV4dHVyZSA9IHRoaXMuX3RleHR1cmVzW3RoaXMuY3VycmVudEZyYW1lXTtcbiAgICB9XG5cbn07XG5cbi8qXG4gKiBTdG9wcyB0aGUgTW92aWVDbGlwIGFuZCBkZXN0cm95cyBpdFxuICpcbiAqL1xuTW92aWVDbGlwLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKCApXG57XG4gICAgdGhpcy5zdG9wKCk7XG4gICAgY29yZS5TcHJpdGUucHJvdG90eXBlLmRlc3Ryb3kuY2FsbCh0aGlzKTtcbn07XG5cbi8qKlxuICogQSBzaG9ydCBoYW5kIHdheSBvZiBjcmVhdGluZyBhIG1vdmllY2xpcCBmcm9tIGFuIGFycmF5IG9mIGZyYW1lIGlkc1xuICpcbiAqIEBzdGF0aWNcbiAqIEBwYXJhbSBmcmFtZXMge3N0cmluZ1tdfSB0aGUgYXJyYXkgb2YgZnJhbWVzIGlkcyB0aGUgbW92aWVjbGlwIHdpbGwgdXNlIGFzIGl0cyB0ZXh0dXJlIGZyYW1lc1xuICovXG5Nb3ZpZUNsaXAuZnJvbUZyYW1lcyA9IGZ1bmN0aW9uIChmcmFtZXMpXG57XG4gICAgdmFyIHRleHR1cmVzID0gW107XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGZyYW1lcy5sZW5ndGg7ICsraSlcbiAgICB7XG4gICAgICAgIHRleHR1cmVzLnB1c2gobmV3IGNvcmUuVGV4dHVyZS5mcm9tRnJhbWUoZnJhbWVzW2ldKSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBNb3ZpZUNsaXAodGV4dHVyZXMpO1xufTtcblxuLyoqXG4gKiBBIHNob3J0IGhhbmQgd2F5IG9mIGNyZWF0aW5nIGEgbW92aWVjbGlwIGZyb20gYW4gYXJyYXkgb2YgaW1hZ2UgaWRzXG4gKlxuICogQHN0YXRpY1xuICogQHBhcmFtIGltYWdlcyB7c3RyaW5nW119IHRoZSBhcnJheSBvZiBpbWFnZSB1cmxzIHRoZSBtb3ZpZWNsaXAgd2lsbCB1c2UgYXMgaXRzIHRleHR1cmUgZnJhbWVzXG4gKi9cbk1vdmllQ2xpcC5mcm9tSW1hZ2VzID0gZnVuY3Rpb24gKGltYWdlcylcbntcbiAgICB2YXIgdGV4dHVyZXMgPSBbXTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgaW1hZ2VzLmxlbmd0aDsgKytpKVxuICAgIHtcbiAgICAgICAgdGV4dHVyZXMucHVzaChuZXcgY29yZS5UZXh0dXJlLmZyb21JbWFnZShpbWFnZXNbaV0pKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IE1vdmllQ2xpcCh0ZXh0dXJlcyk7XG59OyIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vY29yZScpLFxuICAgIC8vIGEgc3ByaXRlIHVzZSBkZm9yIHJlbmRlcmluZyB0ZXh0dXJlcy4uXG4gICAgdGVtcFBvaW50ID0gbmV3IGNvcmUuUG9pbnQoKSxcbiAgICBDYW52YXNUaW50ZXIgPSByZXF1aXJlKCcuLi9jb3JlL3JlbmRlcmVycy9jYW52YXMvdXRpbHMvQ2FudmFzVGludGVyJyk7XG5cbi8qKlxuICogQSB0aWxpbmcgc3ByaXRlIGlzIGEgZmFzdCB3YXkgb2YgcmVuZGVyaW5nIGEgdGlsaW5nIGltYWdlXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLlNwcml0ZVxuICogQG1lbWJlcm9mIFBJWEkuZXh0cmFzXG4gKiBAcGFyYW0gdGV4dHVyZSB7VGV4dHVyZX0gdGhlIHRleHR1cmUgb2YgdGhlIHRpbGluZyBzcHJpdGVcbiAqIEBwYXJhbSB3aWR0aCB7bnVtYmVyfSAgdGhlIHdpZHRoIG9mIHRoZSB0aWxpbmcgc3ByaXRlXG4gKiBAcGFyYW0gaGVpZ2h0IHtudW1iZXJ9IHRoZSBoZWlnaHQgb2YgdGhlIHRpbGluZyBzcHJpdGVcbiAqL1xuZnVuY3Rpb24gVGlsaW5nU3ByaXRlKHRleHR1cmUsIHdpZHRoLCBoZWlnaHQpXG57XG4gICAgY29yZS5TcHJpdGUuY2FsbCh0aGlzLCB0ZXh0dXJlKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBzY2FsaW5nIG9mIHRoZSBpbWFnZSB0aGF0IGlzIGJlaW5nIHRpbGVkXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlBvaW50fVxuICAgICAqL1xuICAgIHRoaXMudGlsZVNjYWxlID0gbmV3IGNvcmUuUG9pbnQoMSwxKTtcblxuXG4gICAgLyoqXG4gICAgICogVGhlIG9mZnNldCBwb3NpdGlvbiBvZiB0aGUgaW1hZ2UgdGhhdCBpcyBiZWluZyB0aWxlZFxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5Qb2ludH1cbiAgICAgKi9cbiAgICB0aGlzLnRpbGVQb3NpdGlvbiA9IG5ldyBjb3JlLlBvaW50KDAsMCk7XG5cbiAgICAvLy8vLyBwcml2YXRlXG5cbiAgICAvKipcbiAgICAgKiBUaGUgd2l0aCBvZiB0aGUgdGlsaW5nIHNwcml0ZVxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fd2lkdGggPSB3aWR0aCB8fCAxMDA7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgaGVpZ2h0IG9mIHRoZSB0aWxpbmcgc3ByaXRlXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9oZWlnaHQgPSBoZWlnaHQgfHwgMTAwO1xuXG4gICAgLyoqXG4gICAgICogQW4gaW50ZXJuYWwgV2ViR0wgVVYgY2FjaGUuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlRleHR1cmVVdnN9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl91dnMgPSBuZXcgY29yZS5UZXh0dXJlVXZzKCk7XG5cbiAgICB0aGlzLl9jYW52YXNQYXR0ZXJuID0gbnVsbDtcblxuICAgIC8vVE9ETyBtb3ZlLi5cbiAgICB0aGlzLnNoYWRlciA9IG5ldyBjb3JlLkFic3RyYWN0RmlsdGVyKFxuXG4gICAgICBbXG4gICAgICAgICdwcmVjaXNpb24gbG93cCBmbG9hdDsnLFxuICAgICAgICAnYXR0cmlidXRlIHZlYzIgYVZlcnRleFBvc2l0aW9uOycsXG4gICAgICAgICdhdHRyaWJ1dGUgdmVjMiBhVGV4dHVyZUNvb3JkOycsXG4gICAgICAgICdhdHRyaWJ1dGUgdmVjNCBhQ29sb3I7JyxcblxuICAgICAgICAndW5pZm9ybSBtYXQzIHByb2plY3Rpb25NYXRyaXg7JyxcblxuICAgICAgICAndW5pZm9ybSB2ZWM0IHVGcmFtZTsnLFxuICAgICAgICAndW5pZm9ybSB2ZWM0IHVUcmFuc2Zvcm07JyxcblxuICAgICAgICAndmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7JyxcbiAgICAgICAgJ3ZhcnlpbmcgdmVjNCB2Q29sb3I7JyxcblxuICAgICAgICAndm9pZCBtYWluKHZvaWQpeycsXG4gICAgICAgICcgICBnbF9Qb3NpdGlvbiA9IHZlYzQoKHByb2plY3Rpb25NYXRyaXggKiB2ZWMzKGFWZXJ0ZXhQb3NpdGlvbiwgMS4wKSkueHksIDAuMCwgMS4wKTsnLFxuXG4gICAgICAgICcgICB2ZWMyIGNvb3JkID0gYVRleHR1cmVDb29yZDsnLFxuICAgICAgICAnICAgY29vcmQgLT0gdVRyYW5zZm9ybS54eTsnLFxuICAgICAgICAnICAgY29vcmQgLz0gdVRyYW5zZm9ybS56dzsnLFxuICAgICAgICAnICAgdlRleHR1cmVDb29yZCA9IGNvb3JkOycsXG5cbiAgICAgICAgJyAgIHZDb2xvciA9IHZlYzQoYUNvbG9yLnJnYiAqIGFDb2xvci5hLCBhQ29sb3IuYSk7JyxcbiAgICAgICAgJ30nXG4gICAgICBdLmpvaW4oJ1xcbicpLFxuICAgICAgW1xuICAgICAgICAncHJlY2lzaW9uIGxvd3AgZmxvYXQ7JyxcblxuICAgICAgICAndmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7JyxcbiAgICAgICAgJ3ZhcnlpbmcgdmVjNCB2Q29sb3I7JyxcblxuICAgICAgICAndW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXI7JyxcbiAgICAgICAgJ3VuaWZvcm0gdmVjNCB1RnJhbWU7JyxcbiAgICAgICAgJ3VuaWZvcm0gdmVjMiB1UGl4ZWxTaXplOycsXG5cbiAgICAgICAgJ3ZvaWQgbWFpbih2b2lkKXsnLFxuXG4gICAgICAgICcgICB2ZWMyIGNvb3JkID0gbW9kKHZUZXh0dXJlQ29vcmQsIHVGcmFtZS56dyk7JyxcbiAgICAgICAgJyAgIGNvb3JkID0gY2xhbXAoY29vcmQsIHVQaXhlbFNpemUsIHVGcmFtZS56dyAtIHVQaXhlbFNpemUpOycsXG4gICAgICAgICcgICBjb29yZCArPSB1RnJhbWUueHk7JyxcblxuICAgICAgICAnICAgZ2xfRnJhZ0NvbG9yID0gIHRleHR1cmUyRCh1U2FtcGxlciwgY29vcmQpICogdkNvbG9yIDsnLFxuICAgICAgICAnfSdcbiAgICAgIF0uam9pbignXFxuJyksXG5cbiAgICAgICAgICAgIC8vIHNldCB0aGUgdW5pZm9ybXNcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB1RnJhbWU6IHsgdHlwZTogJzRmdicsIHZhbHVlOiBbMCwwLDEsMV0gfSxcbiAgICAgICAgICAgICAgICB1VHJhbnNmb3JtOiB7IHR5cGU6ICc0ZnYnLCB2YWx1ZTogWzAsMCwxLDFdIH0sXG4gICAgICAgICAgICAgICAgdVBpeGVsU2l6ZSA6IHsgdHlwZSA6ICcyZnYnLCB2YWx1ZTogWzEsIDFdfVxuICAgICAgICAgICAgfVxuICAgICAgKTtcbn1cblxuVGlsaW5nU3ByaXRlLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoY29yZS5TcHJpdGUucHJvdG90eXBlKTtcblRpbGluZ1Nwcml0ZS5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBUaWxpbmdTcHJpdGU7XG5tb2R1bGUuZXhwb3J0cyA9IFRpbGluZ1Nwcml0ZTtcblxuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhUaWxpbmdTcHJpdGUucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogVGhlIHdpZHRoIG9mIHRoZSBzcHJpdGUsIHNldHRpbmcgdGhpcyB3aWxsIGFjdHVhbGx5IG1vZGlmeSB0aGUgc2NhbGUgdG8gYWNoaWV2ZSB0aGUgdmFsdWUgc2V0XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZXh0cmFzLlRpbGluZ1Nwcml0ZSNcbiAgICAgKi9cbiAgICB3aWR0aDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl93aWR0aDtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuX3dpZHRoID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVGhlIGhlaWdodCBvZiB0aGUgVGlsaW5nU3ByaXRlLCBzZXR0aW5nIHRoaXMgd2lsbCBhY3R1YWxseSBtb2RpZnkgdGhlIHNjYWxlIHRvIGFjaGlldmUgdGhlIHZhbHVlIHNldFxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmV4dHJhcy5UaWxpbmdTcHJpdGUjXG4gICAgICovXG4gICAgaGVpZ2h0OiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2hlaWdodDtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuX2hlaWdodCA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfVxufSk7XG5cblRpbGluZ1Nwcml0ZS5wcm90b3R5cGUuX29uVGV4dHVyZVVwZGF0ZSA9IGZ1bmN0aW9uICgpXG57XG4gICAgcmV0dXJuO1xufTtcblxuXG4vKipcbiAqIFJlbmRlcnMgdGhlIG9iamVjdCB1c2luZyB0aGUgV2ViR0wgcmVuZGVyZXJcbiAqXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcn1cbiAqIEBwcml2YXRlXG4gKi9cblRpbGluZ1Nwcml0ZS5wcm90b3R5cGUuX3JlbmRlcldlYkdMID0gZnVuY3Rpb24gKHJlbmRlcmVyKVxue1xuICAgIC8vIHR3ZWFrIG91ciB0ZXh0dXJlIHRlbXBvcmFyaWx5Li5cbiAgICB2YXIgdGV4dHVyZSA9IHRoaXMuX3RleHR1cmU7XG5cbiAgICBpZighdGV4dHVyZSB8fCAhdGV4dHVyZS5fdXZzKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHZhciB0ZW1wVXZzID0gdGV4dHVyZS5fdXZzLFxuICAgICAgICB0ZW1wV2lkdGggPSB0ZXh0dXJlLl9mcmFtZS53aWR0aCxcbiAgICAgICAgdGVtcEhlaWdodCA9IHRleHR1cmUuX2ZyYW1lLmhlaWdodCxcbiAgICAgICAgdHcgPSB0ZXh0dXJlLmJhc2VUZXh0dXJlLndpZHRoLFxuICAgICAgICB0aCA9IHRleHR1cmUuYmFzZVRleHR1cmUuaGVpZ2h0O1xuXG4gICAgdGV4dHVyZS5fdXZzID0gdGhpcy5fdXZzO1xuICAgIHRleHR1cmUuX2ZyYW1lLndpZHRoID0gdGhpcy53aWR0aDtcbiAgICB0ZXh0dXJlLl9mcmFtZS5oZWlnaHQgPSB0aGlzLmhlaWdodDtcblxuICAgIHRoaXMuc2hhZGVyLnVuaWZvcm1zLnVQaXhlbFNpemUudmFsdWVbMF0gPSAxLjAvdHc7XG4gICAgdGhpcy5zaGFkZXIudW5pZm9ybXMudVBpeGVsU2l6ZS52YWx1ZVsxXSA9IDEuMC90aDtcblxuICAgIHRoaXMuc2hhZGVyLnVuaWZvcm1zLnVGcmFtZS52YWx1ZVswXSA9IHRlbXBVdnMueDA7XG4gICAgdGhpcy5zaGFkZXIudW5pZm9ybXMudUZyYW1lLnZhbHVlWzFdID0gdGVtcFV2cy55MDtcbiAgICB0aGlzLnNoYWRlci51bmlmb3Jtcy51RnJhbWUudmFsdWVbMl0gPSB0ZW1wVXZzLngxIC0gdGVtcFV2cy54MDtcbiAgICB0aGlzLnNoYWRlci51bmlmb3Jtcy51RnJhbWUudmFsdWVbM10gPSB0ZW1wVXZzLnkyIC0gdGVtcFV2cy55MDtcblxuICAgIHRoaXMuc2hhZGVyLnVuaWZvcm1zLnVUcmFuc2Zvcm0udmFsdWVbMF0gPSAodGhpcy50aWxlUG9zaXRpb24ueCAlICh0ZW1wV2lkdGggKiB0aGlzLnRpbGVTY2FsZS54KSkgLyB0aGlzLl93aWR0aDtcbiAgICB0aGlzLnNoYWRlci51bmlmb3Jtcy51VHJhbnNmb3JtLnZhbHVlWzFdID0gKHRoaXMudGlsZVBvc2l0aW9uLnkgJSAodGVtcEhlaWdodCAqIHRoaXMudGlsZVNjYWxlLnkpKSAvIHRoaXMuX2hlaWdodDtcbiAgICB0aGlzLnNoYWRlci51bmlmb3Jtcy51VHJhbnNmb3JtLnZhbHVlWzJdID0gKCB0dyAvIHRoaXMuX3dpZHRoICkgKiB0aGlzLnRpbGVTY2FsZS54O1xuICAgIHRoaXMuc2hhZGVyLnVuaWZvcm1zLnVUcmFuc2Zvcm0udmFsdWVbM10gPSAoIHRoIC8gdGhpcy5faGVpZ2h0ICkgKiB0aGlzLnRpbGVTY2FsZS55O1xuXG4gICAgcmVuZGVyZXIuc2V0T2JqZWN0UmVuZGVyZXIocmVuZGVyZXIucGx1Z2lucy5zcHJpdGUpO1xuICAgIHJlbmRlcmVyLnBsdWdpbnMuc3ByaXRlLnJlbmRlcih0aGlzKTtcblxuICAgIHRleHR1cmUuX3V2cyA9IHRlbXBVdnM7XG4gICAgdGV4dHVyZS5fZnJhbWUud2lkdGggPSB0ZW1wV2lkdGg7XG4gICAgdGV4dHVyZS5fZnJhbWUuaGVpZ2h0ID0gdGVtcEhlaWdodDtcbn07XG5cbi8qKlxuICogUmVuZGVycyB0aGUgb2JqZWN0IHVzaW5nIHRoZSBDYW52YXMgcmVuZGVyZXJcbiAqXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuQ2FudmFzUmVuZGVyZXJ9IGEgcmVmZXJlbmNlIHRvIHRoZSBjYW52YXMgcmVuZGVyZXJcbiAqIEBwcml2YXRlXG4gKi9cblRpbGluZ1Nwcml0ZS5wcm90b3R5cGUuX3JlbmRlckNhbnZhcyA9IGZ1bmN0aW9uIChyZW5kZXJlcilcbntcbiAgICB2YXIgdGV4dHVyZSA9IHRoaXMuX3RleHR1cmU7XG5cbiAgICBpZiAoIXRleHR1cmUuYmFzZVRleHR1cmUuaGFzTG9hZGVkKVxuICAgIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB2YXIgY29udGV4dCA9IHJlbmRlcmVyLmNvbnRleHQsXG4gICAgICAgIHRyYW5zZm9ybSA9IHRoaXMud29ybGRUcmFuc2Zvcm0sXG4gICAgICAgIHJlc29sdXRpb24gPSByZW5kZXJlci5yZXNvbHV0aW9uLFxuICAgICAgICBiYXNlVGV4dHVyZSA9IHRleHR1cmUuYmFzZVRleHR1cmUsXG4gICAgICAgIG1vZFggPSAodGhpcy50aWxlUG9zaXRpb24ueCAvIHRoaXMudGlsZVNjYWxlLngpICUgdGV4dHVyZS5fZnJhbWUud2lkdGgsXG4gICAgICAgIG1vZFkgPSAodGhpcy50aWxlUG9zaXRpb24ueSAvIHRoaXMudGlsZVNjYWxlLnkpICUgdGV4dHVyZS5fZnJhbWUuaGVpZ2h0O1xuXG4gICAgLy8gY3JlYXRlIGEgbmljZSBzaGlueSBwYXR0ZXJuIVxuICAgIC8vIFRPRE8gdGhpcyBuZWVkcyB0byBiZSByZWZyZXNoZWQgaWYgdGV4dHVyZSBjaGFuZ2VzLi5cbiAgICBpZighdGhpcy5fY2FudmFzUGF0dGVybilcbiAgICB7XG4gICAgICAgIC8vIGN1dCBhbiBvYmplY3QgZnJvbSBhIHNwcml0ZXNoZWV0Li5cbiAgICAgICAgdmFyIHRlbXBDYW52YXMgPSBuZXcgY29yZS5DYW52YXNCdWZmZXIodGV4dHVyZS5fZnJhbWUud2lkdGgsIHRleHR1cmUuX2ZyYW1lLmhlaWdodCk7XG5cbiAgICAgICAgLy8gVGludCB0aGUgdGlsaW5nIHNwcml0ZVxuICAgICAgICBpZiAodGhpcy50aW50ICE9PSAweEZGRkZGRilcbiAgICAgICAge1xuICAgICAgICAgICAgaWYgKHRoaXMuY2FjaGVkVGludCAhPT0gdGhpcy50aW50KVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHRoaXMuY2FjaGVkVGludCA9IHRoaXMudGludDtcblxuICAgICAgICAgICAgICAgIHRoaXMudGludGVkVGV4dHVyZSA9IENhbnZhc1RpbnRlci5nZXRUaW50ZWRUZXh0dXJlKHRoaXMsIHRoaXMudGludCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0ZW1wQ2FudmFzLmNvbnRleHQuZHJhd0ltYWdlKHRoaXMudGludGVkVGV4dHVyZSwgMCwgMCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgICB0ZW1wQ2FudmFzLmNvbnRleHQuZHJhd0ltYWdlKGJhc2VUZXh0dXJlLnNvdXJjZSwgLXRleHR1cmUuX2ZyYW1lLngsIC10ZXh0dXJlLl9mcmFtZS55KTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9jYW52YXNQYXR0ZXJuID0gdGVtcENhbnZhcy5jb250ZXh0LmNyZWF0ZVBhdHRlcm4oIHRlbXBDYW52YXMuY2FudmFzLCAncmVwZWF0JyApO1xuICAgIH1cblxuICAgIC8vIHNldCBjb250ZXh0IHN0YXRlLi5cbiAgICBjb250ZXh0Lmdsb2JhbEFscGhhID0gdGhpcy53b3JsZEFscGhhO1xuICAgIGNvbnRleHQuc2V0VHJhbnNmb3JtKHRyYW5zZm9ybS5hICogcmVzb2x1dGlvbixcbiAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtLmIgKiByZXNvbHV0aW9uLFxuICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2Zvcm0uYyAqIHJlc29sdXRpb24sXG4gICAgICAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybS5kICogcmVzb2x1dGlvbixcbiAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtLnR4ICogcmVzb2x1dGlvbixcbiAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtLnR5ICogcmVzb2x1dGlvbik7XG5cbiAgICAvLyBUT0RPIC0gdGhpcyBzaG91bGQgYmUgcm9sbGVkIGludG8gdGhlIHNldFRyYW5zZm9ybSBhYm92ZS4uXG4gICAgY29udGV4dC5zY2FsZSh0aGlzLnRpbGVTY2FsZS54LHRoaXMudGlsZVNjYWxlLnkpO1xuXG4gICAgY29udGV4dC50cmFuc2xhdGUobW9kWCArICh0aGlzLmFuY2hvci54ICogLXRoaXMuX3dpZHRoICksXG4gICAgICAgICAgICAgICAgICAgICAgbW9kWSArICh0aGlzLmFuY2hvci55ICogLXRoaXMuX2hlaWdodCkpO1xuXG4gICAgLy8gY2hlY2sgYmxlbmQgbW9kZVxuICAgIHZhciBjb21wb3NpdGVPcGVyYXRpb24gPSByZW5kZXJlci5ibGVuZE1vZGVzW3RoaXMuYmxlbmRNb2RlXTtcbiAgICBpZiAoY29tcG9zaXRlT3BlcmF0aW9uICE9PSByZW5kZXJlci5jb250ZXh0Lmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbilcbiAgICB7XG4gICAgICAgIGNvbnRleHQuZ2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uID0gY29tcG9zaXRlT3BlcmF0aW9uO1xuICAgIH1cblxuICAgIC8vIGZpbGwgdGhlIHBhdHRlcm4hXG4gICAgY29udGV4dC5maWxsU3R5bGUgPSB0aGlzLl9jYW52YXNQYXR0ZXJuO1xuICAgIGNvbnRleHQuZmlsbFJlY3QoLW1vZFgsXG4gICAgICAgICAgICAgICAgICAgICAtbW9kWSxcbiAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3dpZHRoIC8gdGhpcy50aWxlU2NhbGUueCxcbiAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2hlaWdodCAvIHRoaXMudGlsZVNjYWxlLnkpO1xuXG5cbiAgICAvL1RPRE8gLSBwcmV0dHkgc3VyZSB0aGlzIGNhbiBiZSBkZWxldGVkLi4uXG4gICAgLy9jb250ZXh0LnRyYW5zbGF0ZSgtdGhpcy50aWxlUG9zaXRpb24ueCArICh0aGlzLmFuY2hvci54ICogdGhpcy5fd2lkdGgpLCAtdGhpcy50aWxlUG9zaXRpb24ueSArICh0aGlzLmFuY2hvci55ICogdGhpcy5faGVpZ2h0KSk7XG4gICAgLy9jb250ZXh0LnNjYWxlKDEgLyB0aGlzLnRpbGVTY2FsZS54LCAxIC8gdGhpcy50aWxlU2NhbGUueSk7XG59O1xuXG5cbi8qKlxuICogUmV0dXJucyB0aGUgZnJhbWluZyByZWN0YW5nbGUgb2YgdGhlIHNwcml0ZSBhcyBhIFJlY3RhbmdsZSBvYmplY3RcbipcbiAqIEByZXR1cm4ge1BJWEkuUmVjdGFuZ2xlfSB0aGUgZnJhbWluZyByZWN0YW5nbGVcbiAqL1xuVGlsaW5nU3ByaXRlLnByb3RvdHlwZS5nZXRCb3VuZHMgPSBmdW5jdGlvbiAoKVxue1xuICAgIHZhciB3aWR0aCA9IHRoaXMuX3dpZHRoO1xuICAgIHZhciBoZWlnaHQgPSB0aGlzLl9oZWlnaHQ7XG5cbiAgICB2YXIgdzAgPSB3aWR0aCAqICgxLXRoaXMuYW5jaG9yLngpO1xuICAgIHZhciB3MSA9IHdpZHRoICogLXRoaXMuYW5jaG9yLng7XG5cbiAgICB2YXIgaDAgPSBoZWlnaHQgKiAoMS10aGlzLmFuY2hvci55KTtcbiAgICB2YXIgaDEgPSBoZWlnaHQgKiAtdGhpcy5hbmNob3IueTtcblxuICAgIHZhciB3b3JsZFRyYW5zZm9ybSA9IHRoaXMud29ybGRUcmFuc2Zvcm07XG5cbiAgICB2YXIgYSA9IHdvcmxkVHJhbnNmb3JtLmE7XG4gICAgdmFyIGIgPSB3b3JsZFRyYW5zZm9ybS5iO1xuICAgIHZhciBjID0gd29ybGRUcmFuc2Zvcm0uYztcbiAgICB2YXIgZCA9IHdvcmxkVHJhbnNmb3JtLmQ7XG4gICAgdmFyIHR4ID0gd29ybGRUcmFuc2Zvcm0udHg7XG4gICAgdmFyIHR5ID0gd29ybGRUcmFuc2Zvcm0udHk7XG5cbiAgICB2YXIgeDEgPSBhICogdzEgKyBjICogaDEgKyB0eDtcbiAgICB2YXIgeTEgPSBkICogaDEgKyBiICogdzEgKyB0eTtcblxuICAgIHZhciB4MiA9IGEgKiB3MCArIGMgKiBoMSArIHR4O1xuICAgIHZhciB5MiA9IGQgKiBoMSArIGIgKiB3MCArIHR5O1xuXG4gICAgdmFyIHgzID0gYSAqIHcwICsgYyAqIGgwICsgdHg7XG4gICAgdmFyIHkzID0gZCAqIGgwICsgYiAqIHcwICsgdHk7XG5cbiAgICB2YXIgeDQgPSAgYSAqIHcxICsgYyAqIGgwICsgdHg7XG4gICAgdmFyIHk0ID0gIGQgKiBoMCArIGIgKiB3MSArIHR5O1xuXG4gICAgdmFyIG1pblgsXG4gICAgICAgIG1heFgsXG4gICAgICAgIG1pblksXG4gICAgICAgIG1heFk7XG5cbiAgICBtaW5YID0geDE7XG4gICAgbWluWCA9IHgyIDwgbWluWCA/IHgyIDogbWluWDtcbiAgICBtaW5YID0geDMgPCBtaW5YID8geDMgOiBtaW5YO1xuICAgIG1pblggPSB4NCA8IG1pblggPyB4NCA6IG1pblg7XG5cbiAgICBtaW5ZID0geTE7XG4gICAgbWluWSA9IHkyIDwgbWluWSA/IHkyIDogbWluWTtcbiAgICBtaW5ZID0geTMgPCBtaW5ZID8geTMgOiBtaW5ZO1xuICAgIG1pblkgPSB5NCA8IG1pblkgPyB5NCA6IG1pblk7XG5cbiAgICBtYXhYID0geDE7XG4gICAgbWF4WCA9IHgyID4gbWF4WCA/IHgyIDogbWF4WDtcbiAgICBtYXhYID0geDMgPiBtYXhYID8geDMgOiBtYXhYO1xuICAgIG1heFggPSB4NCA+IG1heFggPyB4NCA6IG1heFg7XG5cbiAgICBtYXhZID0geTE7XG4gICAgbWF4WSA9IHkyID4gbWF4WSA/IHkyIDogbWF4WTtcbiAgICBtYXhZID0geTMgPiBtYXhZID8geTMgOiBtYXhZO1xuICAgIG1heFkgPSB5NCA+IG1heFkgPyB5NCA6IG1heFk7XG5cbiAgICB2YXIgYm91bmRzID0gdGhpcy5fYm91bmRzO1xuXG4gICAgYm91bmRzLnggPSBtaW5YO1xuICAgIGJvdW5kcy53aWR0aCA9IG1heFggLSBtaW5YO1xuXG4gICAgYm91bmRzLnkgPSBtaW5ZO1xuICAgIGJvdW5kcy5oZWlnaHQgPSBtYXhZIC0gbWluWTtcblxuICAgIC8vIHN0b3JlIGEgcmVmZXJlbmNlIHNvIHRoYXQgaWYgdGhpcyBmdW5jdGlvbiBnZXRzIGNhbGxlZCBhZ2FpbiBpbiB0aGUgcmVuZGVyIGN5Y2xlIHdlIGRvIG5vdCBoYXZlIHRvIHJlY2FsY3VsYXRlXG4gICAgdGhpcy5fY3VycmVudEJvdW5kcyA9IGJvdW5kcztcblxuICAgIHJldHVybiBib3VuZHM7XG59O1xuXG4vKipcbiAqIENoZWNrcyBpZiBhIHBvaW50IGlzIGluc2lkZSB0aGlzIHRpbGluZyBzcHJpdGVcbiAqIEBwYXJhbSBwb2ludCB7UElYSS5Qb2ludH0gdGhlIHBvaW50IHRvIGNoZWNrXG4gKi9cblRpbGluZ1Nwcml0ZS5wcm90b3R5cGUuY29udGFpbnNQb2ludCA9IGZ1bmN0aW9uKCBwb2ludCApXG57XG4gICAgdGhpcy53b3JsZFRyYW5zZm9ybS5hcHBseUludmVyc2UocG9pbnQsICB0ZW1wUG9pbnQpO1xuXG4gICAgdmFyIHdpZHRoID0gdGhpcy5fd2lkdGg7XG4gICAgdmFyIGhlaWdodCA9IHRoaXMuX2hlaWdodDtcbiAgICB2YXIgeDEgPSAtd2lkdGggKiB0aGlzLmFuY2hvci54O1xuICAgIHZhciB5MTtcblxuICAgIGlmICggdGVtcFBvaW50LnggPiB4MSAmJiB0ZW1wUG9pbnQueCA8IHgxICsgd2lkdGggKVxuICAgIHtcbiAgICAgICAgeTEgPSAtaGVpZ2h0ICogdGhpcy5hbmNob3IueTtcblxuICAgICAgICBpZiAoIHRlbXBQb2ludC55ID4geTEgJiYgdGVtcFBvaW50LnkgPCB5MSArIGhlaWdodCApXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xufTtcblxuLyoqXG4gKiBEZXN0cm95cyB0aGlzIHRpbGluZyBzcHJpdGVcbiAqXG4gKi9cblRpbGluZ1Nwcml0ZS5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uICgpIHtcbiAgICBjb3JlLlNwcml0ZS5wcm90b3R5cGUuZGVzdHJveS5jYWxsKHRoaXMpO1xuXG4gICAgdGhpcy50aWxlU2NhbGUgPSBudWxsO1xuICAgIHRoaXMuX3RpbGVTY2FsZU9mZnNldCA9IG51bGw7XG4gICAgdGhpcy50aWxlUG9zaXRpb24gPSBudWxsO1xuXG4gICAgdGhpcy5fdXZzID0gbnVsbDtcbn07XG5cbi8qKlxuICogSGVscGVyIGZ1bmN0aW9uIHRoYXQgY3JlYXRlcyBhIHRpbGluZyBzcHJpdGUgdGhhdCB3aWxsIHVzZSBhIHRleHR1cmUgZnJvbSB0aGUgVGV4dHVyZUNhY2hlIGJhc2VkIG9uIHRoZSBmcmFtZUlkXG4gKiBUaGUgZnJhbWUgaWRzIGFyZSBjcmVhdGVkIHdoZW4gYSBUZXh0dXJlIHBhY2tlciBmaWxlIGhhcyBiZWVuIGxvYWRlZFxuICpcbiAqIEBzdGF0aWNcbiAqIEBwYXJhbSBmcmFtZUlkIHtzdHJpbmd9IFRoZSBmcmFtZSBJZCBvZiB0aGUgdGV4dHVyZSBpbiB0aGUgY2FjaGVcbiAqIEByZXR1cm4ge1BJWEkuZXh0cmFzLlRpbGluZ1Nwcml0ZX0gQSBuZXcgVGlsaW5nU3ByaXRlIHVzaW5nIGEgdGV4dHVyZSBmcm9tIHRoZSB0ZXh0dXJlIGNhY2hlIG1hdGNoaW5nIHRoZSBmcmFtZUlkXG4gKiBAcGFyYW0gd2lkdGgge251bWJlcn0gIHRoZSB3aWR0aCBvZiB0aGUgdGlsaW5nIHNwcml0ZVxuICogQHBhcmFtIGhlaWdodCB7bnVtYmVyfSB0aGUgaGVpZ2h0IG9mIHRoZSB0aWxpbmcgc3ByaXRlXG4gKi9cblRpbGluZ1Nwcml0ZS5mcm9tRnJhbWUgPSBmdW5jdGlvbiAoZnJhbWVJZCx3aWR0aCxoZWlnaHQpXG57XG4gICAgdmFyIHRleHR1cmUgPSBjb3JlLnV0aWxzLlRleHR1cmVDYWNoZVtmcmFtZUlkXTtcblxuICAgIGlmICghdGV4dHVyZSlcbiAgICB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignVGhlIGZyYW1lSWQgXCInICsgZnJhbWVJZCArICdcIiBkb2VzIG5vdCBleGlzdCBpbiB0aGUgdGV4dHVyZSBjYWNoZSAnICsgdGhpcyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBUaWxpbmdTcHJpdGUodGV4dHVyZSx3aWR0aCxoZWlnaHQpO1xufTtcblxuLyoqXG4gKiBIZWxwZXIgZnVuY3Rpb24gdGhhdCBjcmVhdGVzIGEgc3ByaXRlIHRoYXQgd2lsbCBjb250YWluIGEgdGV4dHVyZSBiYXNlZCBvbiBhbiBpbWFnZSB1cmxcbiAqIElmIHRoZSBpbWFnZSBpcyBub3QgaW4gdGhlIHRleHR1cmUgY2FjaGUgaXQgd2lsbCBiZSBsb2FkZWRcbiAqXG4gKiBAc3RhdGljXG4gKiBAcGFyYW0gaW1hZ2VJZCB7c3RyaW5nfSBUaGUgaW1hZ2UgdXJsIG9mIHRoZSB0ZXh0dXJlXG4gKiBAcGFyYW0gd2lkdGgge251bWJlcn0gIHRoZSB3aWR0aCBvZiB0aGUgdGlsaW5nIHNwcml0ZVxuICogQHBhcmFtIGhlaWdodCB7bnVtYmVyfSB0aGUgaGVpZ2h0IG9mIHRoZSB0aWxpbmcgc3ByaXRlXG4gKiBAcGFyYW0gW2Nyb3Nzb3JpZ2luPShhdXRvKV0ge2Jvb2xlYW59IGlmIHlvdSB3YW50IHRvIHNwZWNpZnkgdGhlIGNyb3NzLW9yaWdpbiBwYXJhbWV0ZXJcbiAqIEBwYXJhbSBbc2NhbGVNb2RlPVBJWEkuU0NBTEVfTU9ERVMuREVGQVVMVF0ge251bWJlcn0gaWYgeW91IHdhbnQgdG8gc3BlY2lmeSB0aGUgc2NhbGUgbW9kZSwgc2VlIHtAbGluayBQSVhJLlNDQUxFX01PREVTfSBmb3IgcG9zc2libGUgdmFsdWVzXG4gKiBAcmV0dXJuIHtQSVhJLmV4dHJhcy5UaWxpbmdTcHJpdGV9IEEgbmV3IFRpbGluZ1Nwcml0ZSB1c2luZyBhIHRleHR1cmUgZnJvbSB0aGUgdGV4dHVyZSBjYWNoZSBtYXRjaGluZyB0aGUgaW1hZ2UgaWRcbiAqL1xuVGlsaW5nU3ByaXRlLmZyb21JbWFnZSA9IGZ1bmN0aW9uIChpbWFnZUlkLCB3aWR0aCwgaGVpZ2h0LCBjcm9zc29yaWdpbiwgc2NhbGVNb2RlKVxue1xuICAgIHJldHVybiBuZXcgVGlsaW5nU3ByaXRlKGNvcmUuVGV4dHVyZS5mcm9tSW1hZ2UoaW1hZ2VJZCwgY3Jvc3NvcmlnaW4sIHNjYWxlTW9kZSksd2lkdGgsaGVpZ2h0KTtcbn07XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uL2NvcmUnKSxcbiAgICBEaXNwbGF5T2JqZWN0ID0gY29yZS5EaXNwbGF5T2JqZWN0LFxuICAgIF90ZW1wTWF0cml4ID0gbmV3IGNvcmUuTWF0cml4KCk7XG5cbkRpc3BsYXlPYmplY3QucHJvdG90eXBlLl9jYWNoZUFzQml0bWFwID0gZmFsc2U7XG5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS5fb3JpZ2luYWxSZW5kZXJXZWJHTCA9IG51bGw7XG5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS5fb3JpZ2luYWxSZW5kZXJDYW52YXMgPSBudWxsO1xuXG5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS5fb3JpZ2luYWxVcGRhdGVUcmFuc2Zvcm0gPSBudWxsO1xuRGlzcGxheU9iamVjdC5wcm90b3R5cGUuX29yaWdpbmFsSGl0VGVzdCA9IG51bGw7XG5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS5fb3JpZ2luYWxEZXN0cm95ID0gbnVsbDtcbkRpc3BsYXlPYmplY3QucHJvdG90eXBlLl9jYWNoZWRTcHJpdGUgPSBudWxsO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhEaXNwbGF5T2JqZWN0LnByb3RvdHlwZSwge1xuXG4gICAgLyoqXG4gICAgICogU2V0IHRoaXMgdG8gdHJ1ZSBpZiB5b3Ugd2FudCB0aGlzIGRpc3BsYXkgb2JqZWN0IHRvIGJlIGNhY2hlZCBhcyBhIGJpdG1hcC5cbiAgICAgKiBUaGlzIGJhc2ljYWxseSB0YWtlcyBhIHNuYXAgc2hvdCBvZiB0aGUgZGlzcGxheSBvYmplY3QgYXMgaXQgaXMgYXQgdGhhdCBtb21lbnQuIEl0IGNhbiBwcm92aWRlIGEgcGVyZm9ybWFuY2UgYmVuZWZpdCBmb3IgY29tcGxleCBzdGF0aWMgZGlzcGxheU9iamVjdHMuXG4gICAgICogVG8gcmVtb3ZlIHNpbXBseSBzZXQgdGhpcyBwcm9wZXJ0eSB0byAnZmFsc2UnXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLkRpc3BsYXlPYmplY3QjXG4gICAgICovXG4gICAgY2FjaGVBc0JpdG1hcDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9jYWNoZUFzQml0bWFwO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgaWYgKHRoaXMuX2NhY2hlQXNCaXRtYXAgPT09IHZhbHVlKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5fY2FjaGVBc0JpdG1hcCA9IHZhbHVlO1xuXG4gICAgICAgICAgICBpZiAodmFsdWUpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdGhpcy5fb3JpZ2luYWxSZW5kZXJXZWJHTCA9IHRoaXMucmVuZGVyV2ViR0w7XG4gICAgICAgICAgICAgICAgdGhpcy5fb3JpZ2luYWxSZW5kZXJDYW52YXMgPSB0aGlzLnJlbmRlckNhbnZhcztcblxuICAgICAgICAgICAgICAgIHRoaXMuX29yaWdpbmFsVXBkYXRlVHJhbnNmb3JtID0gdGhpcy51cGRhdGVUcmFuc2Zvcm07XG4gICAgICAgICAgICAgICAgdGhpcy5fb3JpZ2luYWxHZXRCb3VuZHMgPSB0aGlzLmdldEJvdW5kcztcblxuICAgICAgICAgICAgICAgIHRoaXMuX29yaWdpbmFsRGVzdHJveSA9IHRoaXMuZGVzdHJveTtcblxuICAgICAgICAgICAgICAgIHRoaXMuX29yaWdpbmFsQ29udGFpbnNQb2ludCA9IHRoaXMuY29udGFpbnNQb2ludDtcblxuICAgICAgICAgICAgICAgIHRoaXMucmVuZGVyV2ViR0wgPSB0aGlzLl9yZW5kZXJDYWNoZWRXZWJHTDtcbiAgICAgICAgICAgICAgICB0aGlzLnJlbmRlckNhbnZhcyA9IHRoaXMuX3JlbmRlckNhY2hlZENhbnZhcztcblxuICAgICAgICAgICAgICAgIHRoaXMuZGVzdHJveSA9IHRoaXMuX2NhY2hlQXNCaXRtYXBEZXN0cm95O1xuXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuX2NhY2hlZFNwcml0ZSlcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2Rlc3Ryb3lDYWNoZWREaXNwbGF5T2JqZWN0KCk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgdGhpcy5yZW5kZXJXZWJHTCA9IHRoaXMuX29yaWdpbmFsUmVuZGVyV2ViR0w7XG4gICAgICAgICAgICAgICAgdGhpcy5yZW5kZXJDYW52YXMgPSB0aGlzLl9vcmlnaW5hbFJlbmRlckNhbnZhcztcbiAgICAgICAgICAgICAgICB0aGlzLmdldEJvdW5kcyA9IHRoaXMuX29yaWdpbmFsR2V0Qm91bmRzO1xuXG4gICAgICAgICAgICAgICAgdGhpcy5kZXN0cm95ID0gdGhpcy5fb3JpZ2luYWxEZXN0cm95O1xuXG4gICAgICAgICAgICAgICAgdGhpcy51cGRhdGVUcmFuc2Zvcm0gPSB0aGlzLl9vcmlnaW5hbFVwZGF0ZVRyYW5zZm9ybTtcbiAgICAgICAgICAgICAgICB0aGlzLmNvbnRhaW5zUG9pbnQgPSB0aGlzLl9vcmlnaW5hbENvbnRhaW5zUG9pbnQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG59KTtcbi8qKlxuKiBSZW5kZXJzIGEgY2FjaGVkIHZlcnNpb24gb2YgdGhlIHNwcml0ZSB3aXRoIFdlYkdMXG4qXG4qIEBwYXJhbSByZW5kZXJlciB7UElYSS5XZWJHTFJlbmRlcmVyfSB0aGUgV2ViR0wgcmVuZGVyZXJcbiogQHByaXZhdGVcbiovXG5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS5fcmVuZGVyQ2FjaGVkV2ViR0wgPSBmdW5jdGlvbiAocmVuZGVyZXIpXG57XG4gICAgaWYgKCF0aGlzLnZpc2libGUgfHwgdGhpcy53b3JsZEFscGhhIDw9IDAgfHwgIXRoaXMucmVuZGVyYWJsZSlcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLl9pbml0Q2FjaGVkRGlzcGxheU9iamVjdCggcmVuZGVyZXIgKTtcblxuICAgIHRoaXMuX2NhY2hlZFNwcml0ZS53b3JsZEFscGhhID0gdGhpcy53b3JsZEFscGhhO1xuXG4gICAgcmVuZGVyZXIuc2V0T2JqZWN0UmVuZGVyZXIocmVuZGVyZXIucGx1Z2lucy5zcHJpdGUpO1xuICAgIHJlbmRlcmVyLnBsdWdpbnMuc3ByaXRlLnJlbmRlciggdGhpcy5fY2FjaGVkU3ByaXRlICk7XG59O1xuXG4vKipcbiogUHJlcGFyZXMgdGhlIFdlYkdMIHJlbmRlcmVyIHRvIGNhY2hlIHRoZSBzcHJpdGVcbipcbiogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLldlYkdMUmVuZGVyZXJ9IHRoZSBXZWJHTCByZW5kZXJlclxuKiBAcHJpdmF0ZVxuKi9cbkRpc3BsYXlPYmplY3QucHJvdG90eXBlLl9pbml0Q2FjaGVkRGlzcGxheU9iamVjdCA9IGZ1bmN0aW9uIChyZW5kZXJlcilcbntcbiAgICBpZih0aGlzLl9jYWNoZWRTcHJpdGUpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gZmlyc3Qgd2UgZmx1c2ggYW55dGhpbmcgbGVmdCBpbiB0aGUgcmVuZGVyZXIgKG90aGVyd2lzZSBpdCB3b3VsZCBnZXQgcmVuZGVyZWQgdG8gdGhlIGNhY2hlZCB0ZXh0dXJlKVxuICAgIHJlbmRlcmVyLmN1cnJlbnRSZW5kZXJlci5mbHVzaCgpO1xuICAgIC8vdGhpcy5maWx0ZXJzPSBbXTtcbiAgICAvLyBuZXh0IHdlIGZpbmQgdGhlIGRpbWVuc2lvbnMgb2YgdGhlIHVudHJhbnNmb3JtZWQgb2JqZWN0XG4gICAgLy8gdGhpcyBmdW5jdGlvbiBhbHNvIGNhbGxzIHVwZGF0ZXRyYW5zZm9ybSBvbiBhbGwgaXRzIGNoaWxkcmVuIGFzIHBhcnQgb2YgdGhlIG1lYXN1cmluZy4gVGhpcyBtZWFucyB3ZSBkb24ndCBuZWVkIHRvIHVwZGF0ZSB0aGUgdHJhbnNmb3JtIGFnYWluIGluIHRoaXMgZnVuY3Rpb25cbiAgICAvLyBUT0RPIHBhc3MgYW4gb2JqZWN0IHRvIGNsb25lIHRvbz8gc2F2ZXMgaGF2aW5nIHRvIGNyZWF0ZSBhIG5ldyBvbmUgZWFjaCB0aW1lIVxuICAgIHZhciBib3VuZHMgPSB0aGlzLmdldExvY2FsQm91bmRzKCkuY2xvbmUoKTtcblxuICAgIC8vIGFkZCBzb21lIHBhZGRpbmchXG4gICAgaWYodGhpcy5fZmlsdGVycylcbiAgICB7XG4gICAgICAgIHZhciBwYWRkaW5nID0gdGhpcy5fZmlsdGVyc1swXS5wYWRkaW5nO1xuICAgICAgICBib3VuZHMueCAtPSBwYWRkaW5nO1xuICAgICAgICBib3VuZHMueSAtPSBwYWRkaW5nO1xuXG4gICAgICAgIGJvdW5kcy53aWR0aCArPSBwYWRkaW5nICogMjtcbiAgICAgICAgYm91bmRzLmhlaWdodCArPSBwYWRkaW5nICogMjtcbiAgICB9XG5cbiAgICAvLyBmb3Igbm93IHdlIGNhY2hlIHRoZSBjdXJyZW50IHJlbmRlclRhcmdldCB0aGF0IHRoZSB3ZWJHTCByZW5kZXJlciBpcyBjdXJyZW50bHkgdXNpbmcuXG4gICAgLy8gdGhpcyBjb3VsZCBiZSBtb3JlIGVsZWdlbnQuLlxuICAgIHZhciBjYWNoZWRSZW5kZXJUYXJnZXQgPSByZW5kZXJlci5jdXJyZW50UmVuZGVyVGFyZ2V0O1xuICAgIC8vIFdlIGFsc28gc3RvcmUgdGhlIGZpbHRlciBzdGFjayAtIEkgd2lsbCBkZWZpbml0ZWx5IGxvb2sgdG8gY2hhbmdlIGhvdyB0aGlzIHdvcmtzIGEgbGl0dGxlIGxhdGVyIGRvd24gdGhlIGxpbmUuXG4gICAgdmFyIHN0YWNrID0gcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5maWx0ZXJTdGFjaztcblxuICAgIC8vIHRoaXMgcmVuZGVyVGV4dHVyZSB3aWxsIGJlIHVzZWQgdG8gc3RvcmUgdGhlIGNhY2hlZCBEaXNwbGF5T2JqZWN0XG4gICAgdmFyIHJlbmRlclRleHR1cmUgPSBuZXcgY29yZS5SZW5kZXJUZXh0dXJlKHJlbmRlcmVyLCBib3VuZHMud2lkdGggfCAwLCBib3VuZHMuaGVpZ2h0IHwgMCk7XG5cbiAgICAvLyBuZWVkIHRvIHNldCAvL1xuICAgIHZhciBtID0gX3RlbXBNYXRyaXg7XG5cbiAgICBtLnR4ID0gLWJvdW5kcy54O1xuICAgIG0udHkgPSAtYm91bmRzLnk7XG5cblxuXG4gICAgLy8gc2V0IGFsbCBwcm9wZXJ0aWVzIHRvIHRoZXJlIG9yaWdpbmFsIHNvIHdlIGNhbiByZW5kZXIgdG8gYSB0ZXh0dXJlXG4gICAgdGhpcy5yZW5kZXJXZWJHTCA9IHRoaXMuX29yaWdpbmFsUmVuZGVyV2ViR0w7XG5cbiAgICByZW5kZXJUZXh0dXJlLnJlbmRlcih0aGlzLCBtLCB0cnVlLCB0cnVlKTtcblxuICAgIC8vIG5vdyByZXN0b3JlIHRoZSBzdGF0ZSBiZSBzZXR0aW5nIHRoZSBuZXcgcHJvcGVydGllc1xuICAgIHJlbmRlcmVyLnNldFJlbmRlclRhcmdldChjYWNoZWRSZW5kZXJUYXJnZXQpO1xuICAgIHJlbmRlcmVyLmZpbHRlck1hbmFnZXIuZmlsdGVyU3RhY2sgPSBzdGFjaztcblxuICAgIHRoaXMucmVuZGVyV2ViR0wgICAgID0gdGhpcy5fcmVuZGVyQ2FjaGVkV2ViR0w7XG4gICAgdGhpcy51cGRhdGVUcmFuc2Zvcm0gPSB0aGlzLmRpc3BsYXlPYmplY3RVcGRhdGVUcmFuc2Zvcm07XG4gICAgdGhpcy5nZXRCb3VuZHMgICAgICAgPSB0aGlzLl9nZXRDYWNoZWRCb3VuZHM7XG5cblxuICAgIC8vIGNyZWF0ZSBvdXIgY2FjaGVkIHNwcml0ZVxuICAgIHRoaXMuX2NhY2hlZFNwcml0ZSA9IG5ldyBjb3JlLlNwcml0ZShyZW5kZXJUZXh0dXJlKTtcbiAgICB0aGlzLl9jYWNoZWRTcHJpdGUud29ybGRUcmFuc2Zvcm0gPSB0aGlzLndvcmxkVHJhbnNmb3JtO1xuICAgIHRoaXMuX2NhY2hlZFNwcml0ZS5hbmNob3IueCA9IC0oIGJvdW5kcy54IC8gYm91bmRzLndpZHRoICk7XG4gICAgdGhpcy5fY2FjaGVkU3ByaXRlLmFuY2hvci55ID0gLSggYm91bmRzLnkgLyBib3VuZHMuaGVpZ2h0ICk7XG5cbiAgICAvLyByZXN0b3JlIHRoZSB0cmFuc2Zvcm0gb2YgdGhlIGNhY2hlZCBzcHJpdGUgdG8gYXZvaWQgdGhlIG5hc3R5IGZsaWNrZXIuLlxuICAgIHRoaXMudXBkYXRlVHJhbnNmb3JtKCk7XG5cbiAgICAvLyBtYXAgdGhlIGhpdCB0ZXN0Li5cbiAgICB0aGlzLmNvbnRhaW5zUG9pbnQgPSB0aGlzLl9jYWNoZWRTcHJpdGUuY29udGFpbnNQb2ludC5iaW5kKHRoaXMuX2NhY2hlZFNwcml0ZSk7XG59O1xuXG4vKipcbiogUmVuZGVycyBhIGNhY2hlZCB2ZXJzaW9uIG9mIHRoZSBzcHJpdGUgd2l0aCBjYW52YXNcbipcbiogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLkNhbnZhc1JlbmRlcmVyfSB0aGUgQ2FudmFzIHJlbmRlcmVyXG4qIEBwcml2YXRlXG4qL1xuRGlzcGxheU9iamVjdC5wcm90b3R5cGUuX3JlbmRlckNhY2hlZENhbnZhcyA9IGZ1bmN0aW9uIChyZW5kZXJlcilcbntcbiAgICBpZiAoIXRoaXMudmlzaWJsZSB8fCB0aGlzLndvcmxkQWxwaGEgPD0gMCB8fCAhdGhpcy5yZW5kZXJhYmxlKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuX2luaXRDYWNoZWREaXNwbGF5T2JqZWN0Q2FudmFzKCByZW5kZXJlciApO1xuXG4gICAgdGhpcy5fY2FjaGVkU3ByaXRlLndvcmxkQWxwaGEgPSB0aGlzLndvcmxkQWxwaGE7XG5cbiAgICB0aGlzLl9jYWNoZWRTcHJpdGUucmVuZGVyQ2FudmFzKHJlbmRlcmVyKTtcbn07XG5cbi8vVE9ETyB0aGlzIGNhbiBiZSB0aGUgc2FtZSBhcyB0aGUgd2ViR0wgdmVyaXNvbi4uIHdpbGwgbmVlZCB0byBkbyBhIGxpdHRsZSB0d2Vha2luZyBmaXJzdCB0aG91Z2guLlxuLyoqXG4qIFByZXBhcmVzIHRoZSBDYW52YXMgcmVuZGVyZXIgdG8gY2FjaGUgdGhlIHNwcml0ZVxuKlxuKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuQ2FudmFzUmVuZGVyZXJ9IHRoZSBDYW52YXMgcmVuZGVyZXJcbiogQHByaXZhdGVcbiovXG5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS5faW5pdENhY2hlZERpc3BsYXlPYmplY3RDYW52YXMgPSBmdW5jdGlvbiAocmVuZGVyZXIpXG57XG4gICAgaWYodGhpcy5fY2FjaGVkU3ByaXRlKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vZ2V0IGJvdW5kcyBhY3R1YWxseSB0cmFuc2Zvcm1zIHRoZSBvYmplY3QgZm9yIHVzIGFscmVhZHkhXG4gICAgdmFyIGJvdW5kcyA9IHRoaXMuZ2V0TG9jYWxCb3VuZHMoKTtcblxuICAgIHZhciBjYWNoZWRSZW5kZXJUYXJnZXQgPSByZW5kZXJlci5jb250ZXh0O1xuXG4gICAgdmFyIHJlbmRlclRleHR1cmUgPSBuZXcgY29yZS5SZW5kZXJUZXh0dXJlKHJlbmRlcmVyLCBib3VuZHMud2lkdGggfCAwLCBib3VuZHMuaGVpZ2h0IHwgMCk7XG5cbiAgICAvLyBuZWVkIHRvIHNldCAvL1xuICAgIHZhciBtID0gX3RlbXBNYXRyaXg7XG5cbiAgICBtLnR4ID0gLWJvdW5kcy54O1xuICAgIG0udHkgPSAtYm91bmRzLnk7XG5cbiAgICAvLyBzZXQgYWxsIHByb3BlcnRpZXMgdG8gdGhlcmUgb3JpZ2luYWwgc28gd2UgY2FuIHJlbmRlciB0byBhIHRleHR1cmVcbiAgICB0aGlzLnJlbmRlckNhbnZhcyA9IHRoaXMuX29yaWdpbmFsUmVuZGVyQ2FudmFzO1xuXG4gICAgcmVuZGVyVGV4dHVyZS5yZW5kZXIodGhpcywgbSwgdHJ1ZSk7XG5cbiAgICAvLyBub3cgcmVzdG9yZSB0aGUgc3RhdGUgYmUgc2V0dGluZyB0aGUgbmV3IHByb3BlcnRpZXNcbiAgICByZW5kZXJlci5jb250ZXh0ID0gY2FjaGVkUmVuZGVyVGFyZ2V0O1xuXG4gICAgdGhpcy5yZW5kZXJDYW52YXMgPSB0aGlzLl9yZW5kZXJDYWNoZWRDYW52YXM7XG4gICAgdGhpcy51cGRhdGVUcmFuc2Zvcm0gPSB0aGlzLmRpc3BsYXlPYmplY3RVcGRhdGVUcmFuc2Zvcm07XG4gICAgdGhpcy5nZXRCb3VuZHMgID0gdGhpcy5fZ2V0Q2FjaGVkQm91bmRzO1xuXG5cbiAgICAvLyBjcmVhdGUgb3VyIGNhY2hlZCBzcHJpdGVcbiAgICB0aGlzLl9jYWNoZWRTcHJpdGUgPSBuZXcgY29yZS5TcHJpdGUocmVuZGVyVGV4dHVyZSk7XG4gICAgdGhpcy5fY2FjaGVkU3ByaXRlLndvcmxkVHJhbnNmb3JtID0gdGhpcy53b3JsZFRyYW5zZm9ybTtcbiAgICB0aGlzLl9jYWNoZWRTcHJpdGUuYW5jaG9yLnggPSAtKCBib3VuZHMueCAvIGJvdW5kcy53aWR0aCApO1xuICAgIHRoaXMuX2NhY2hlZFNwcml0ZS5hbmNob3IueSA9IC0oIGJvdW5kcy55IC8gYm91bmRzLmhlaWdodCApO1xuXG4gICAgdGhpcy51cGRhdGVUcmFuc2Zvcm0oKTtcblxuICAgIHRoaXMuY29udGFpbnNQb2ludCA9IHRoaXMuX2NhY2hlZFNwcml0ZS5jb250YWluc1BvaW50LmJpbmQodGhpcy5fY2FjaGVkU3ByaXRlKTtcbn07XG5cbi8qKlxuKiBDYWxjdWxhdGVzIHRoZSBib3VuZHMgb2YgdGhlIGNhY2hlZCBzcHJpdGVcbipcbiogQHByaXZhdGVcbiovXG5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS5fZ2V0Q2FjaGVkQm91bmRzID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLl9jYWNoZWRTcHJpdGUuX2N1cnJlbnRCb3VuZHMgPSBudWxsO1xuXG4gICAgcmV0dXJuIHRoaXMuX2NhY2hlZFNwcml0ZS5nZXRCb3VuZHMoKTtcbn07XG5cbi8qKlxuKiBEZXN0cm95cyB0aGUgY2FjaGVkIHNwcml0ZS5cbipcbiogQHByaXZhdGVcbiovXG5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS5fZGVzdHJveUNhY2hlZERpc3BsYXlPYmplY3QgPSBmdW5jdGlvbiAoKVxue1xuICAgIHRoaXMuX2NhY2hlZFNwcml0ZS5fdGV4dHVyZS5kZXN0cm95KCk7XG4gICAgdGhpcy5fY2FjaGVkU3ByaXRlID0gbnVsbDtcbn07XG5cbkRpc3BsYXlPYmplY3QucHJvdG90eXBlLl9jYWNoZUFzQml0bWFwRGVzdHJveSA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy5jYWNoZUFzQml0bWFwID0gZmFsc2U7XG4gICAgdGhpcy5fb3JpZ2luYWxEZXN0cm95KCk7XG59O1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi9jb3JlJyk7XG5cbi8qKlxuICogVGhlIGluc3RhbmNlIG5hbWUgb2YgdGhlIG9iamVjdC5cbiAqXG4gKiBAbWVtYmVyb2YgUElYSS5EaXNwbGF5T2JqZWN0I1xuICogQG1lbWJlciB7c3RyaW5nfVxuICovXG5jb3JlLkRpc3BsYXlPYmplY3QucHJvdG90eXBlLm5hbWUgPSBudWxsO1xuXG4vKipcbiogUmV0dXJucyB0aGUgZGlzcGxheSBvYmplY3QgaW4gdGhlIGNvbnRhaW5lclxuKlxuKiBAbWVtYmVyb2YgUElYSS5Db250YWluZXIjXG4qIEBwYXJhbSBuYW1lIHtzdHJpbmd9IGluc3RhbmNlIG5hbWVcbiogQHJldHVybiB7UElYSS5EaXNwbGF5T2JqZWN0fVxuKi9cbmNvcmUuQ29udGFpbmVyLnByb3RvdHlwZS5nZXRDaGlsZEJ5TmFtZSA9IGZ1bmN0aW9uIChuYW1lKVxue1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5jaGlsZHJlbi5sZW5ndGg7IGkrKylcbiAgICB7XG4gICAgICAgIGlmICh0aGlzLmNoaWxkcmVuW2ldLm5hbWUgPT09IG5hbWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmNoaWxkcmVuW2ldO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xufTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vY29yZScpO1xuXG4vKipcbiogUmV0dXJucyB0aGUgZ2xvYmFsIHBvc2l0aW9uIG9mIHRoZSBkaXNwbGF5T2JqZWN0XG4qXG4qIEBtZW1iZXJvZiBQSVhJLkRpc3BsYXlPYmplY3QjXG4qIEBwYXJhbSBwb2ludCB7UG9pbnR9IHRoZSBwb2ludCB0byB3cml0ZSB0aGUgZ2xvYmFsIHZhbHVlIHRvLiBJZiBudWxsIGEgbmV3IHBvaW50IHdpbGwgYmUgcmV0dXJuZWRcbiogQHJldHVybiB7UG9pbnR9XG4qL1xuY29yZS5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS5nZXRHbG9iYWxQb3NpdGlvbiA9IGZ1bmN0aW9uIChwb2ludClcbntcbiAgICBwb2ludCA9IHBvaW50IHx8IG5ldyBjb3JlLlBvaW50KCk7XG5cbiAgICBpZih0aGlzLnBhcmVudClcbiAgICB7XG4gICAgICAgIHRoaXMuZGlzcGxheU9iamVjdFVwZGF0ZVRyYW5zZm9ybSgpO1xuXG4gICAgICAgIHBvaW50LnggPSB0aGlzLndvcmxkVHJhbnNmb3JtLnR4O1xuICAgICAgICBwb2ludC55ID0gdGhpcy53b3JsZFRyYW5zZm9ybS50eTtcbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgcG9pbnQueCA9IHRoaXMucG9zaXRpb24ueDtcbiAgICAgICAgcG9pbnQueSA9IHRoaXMucG9zaXRpb24ueTtcbiAgICB9XG5cbiAgICByZXR1cm4gcG9pbnQ7XG59O1xuIiwiLyoqXG4gKiBAZmlsZSAgICAgICAgTWFpbiBleHBvcnQgb2YgdGhlIFBJWEkgZXh0cmFzIGxpYnJhcnlcbiAqIEBhdXRob3IgICAgICBNYXQgR3JvdmVzIDxtYXRAZ29vZGJveWRpZ2l0YWwuY29tPlxuICogQGNvcHlyaWdodCAgIDIwMTMtMjAxNSBHb29kQm95RGlnaXRhbFxuICogQGxpY2Vuc2UgICAgIHtAbGluayBodHRwczovL2dpdGh1Yi5jb20vcGl4aWpzL3BpeGkuanMvYmxvYi9tYXN0ZXIvTElDRU5TRXxNSVQgTGljZW5zZX1cbiAqL1xuXG5yZXF1aXJlKCcuL2NhY2hlQXNCaXRtYXAnKTtcbnJlcXVpcmUoJy4vZ2V0Q2hpbGRCeU5hbWUnKTtcbnJlcXVpcmUoJy4vZ2V0R2xvYmFsUG9zaXRpb24nKTtcblxuLyoqXG4gKiBAbmFtZXNwYWNlIFBJWEkuZXh0cmFzXG4gKi9cbm1vZHVsZS5leHBvcnRzID0ge1xuICAgIE1vdmllQ2xpcDogICAgICByZXF1aXJlKCcuL01vdmllQ2xpcCcpLFxuICAgIFRpbGluZ1Nwcml0ZTogICByZXF1aXJlKCcuL1RpbGluZ1Nwcml0ZScpLFxuICAgIEJpdG1hcFRleHQ6ICAgICByZXF1aXJlKCcuL0JpdG1hcFRleHQnKVxufTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vLi4vY29yZScpO1xuLy8gQHNlZSBodHRwczovL2dpdGh1Yi5jb20vc3Vic3RhY2svYnJmcy9pc3N1ZXMvMjVcblxuXG4vLyBUT0RPIChjZW5nbGVyKSAtIFRoZSBZIGlzIGZsaXBwZWQgaW4gdGhpcyBzaGFkZXIgZm9yIHNvbWUgcmVhc29uLlxuXG4vKipcbiAqIEBhdXRob3IgVmljbyBAdmljb2NvdGVhXG4gKiBvcmlnaW5hbCBzaGFkZXIgOiBodHRwczovL3d3dy5zaGFkZXJ0b3kuY29tL3ZpZXcvbHNzR0RqIGJ5IEBtb3ZBWDEzaFxuICovXG5cbi8qKlxuICogQW4gQVNDSUkgZmlsdGVyLlxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5BYnN0cmFjdEZpbHRlclxuICogQG1lbWJlcm9mIFBJWEkuZmlsdGVyc1xuICovXG5mdW5jdGlvbiBBc2NpaUZpbHRlcigpXG57XG4gICAgY29yZS5BYnN0cmFjdEZpbHRlci5jYWxsKHRoaXMsXG4gICAgICAgIC8vIHZlcnRleCBzaGFkZXJcbiAgICAgICAgbnVsbCxcbiAgICAgICAgLy8gZnJhZ21lbnQgc2hhZGVyXG4gICAgICAgIFwicHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XFxuXFxudW5pZm9ybSB2ZWM0IGRpbWVuc2lvbnM7XFxudW5pZm9ybSBmbG9hdCBwaXhlbFNpemU7XFxudW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXI7XFxuXFxuZmxvYXQgY2hhcmFjdGVyKGZsb2F0IG4sIHZlYzIgcClcXG57XFxuICAgIHAgPSBmbG9vcihwKnZlYzIoNC4wLCAtNC4wKSArIDIuNSk7XFxuICAgIGlmIChjbGFtcChwLngsIDAuMCwgNC4wKSA9PSBwLnggJiYgY2xhbXAocC55LCAwLjAsIDQuMCkgPT0gcC55KVxcbiAgICB7XFxuICAgICAgICBpZiAoaW50KG1vZChuL2V4cDIocC54ICsgNS4wKnAueSksIDIuMCkpID09IDEpIHJldHVybiAxLjA7XFxuICAgIH1cXG4gICAgcmV0dXJuIDAuMDtcXG59XFxuXFxudm9pZCBtYWluKClcXG57XFxuICAgIHZlYzIgdXYgPSBnbF9GcmFnQ29vcmQueHk7XFxuXFxuICAgIHZlYzMgY29sID0gdGV4dHVyZTJEKHVTYW1wbGVyLCBmbG9vciggdXYgLyBwaXhlbFNpemUgKSAqIHBpeGVsU2l6ZSAvIGRpbWVuc2lvbnMueHkpLnJnYjtcXG5cXG4gICAgZmxvYXQgZ3JheSA9IChjb2wuciArIGNvbC5nICsgY29sLmIpIC8gMy4wO1xcblxcbiAgICBmbG9hdCBuID0gIDY1NTM2LjA7ICAgICAgICAgICAgIC8vIC5cXG4gICAgaWYgKGdyYXkgPiAwLjIpIG4gPSA2NTYwMC4wOyAgICAvLyA6XFxuICAgIGlmIChncmF5ID4gMC4zKSBuID0gMzMyNzcyLjA7ICAgLy8gKlxcbiAgICBpZiAoZ3JheSA+IDAuNCkgbiA9IDE1MjU1MDg2LjA7IC8vIG9cXG4gICAgaWYgKGdyYXkgPiAwLjUpIG4gPSAyMzM4NTE2NC4wOyAvLyAmXFxuICAgIGlmIChncmF5ID4gMC42KSBuID0gMTUyNTIwMTQuMDsgLy8gOFxcbiAgICBpZiAoZ3JheSA+IDAuNykgbiA9IDEzMTk5NDUyLjA7IC8vIEBcXG4gICAgaWYgKGdyYXkgPiAwLjgpIG4gPSAxMTUxMjgxMC4wOyAvLyAjXFxuXFxuICAgIHZlYzIgcCA9IG1vZCggdXYgLyAoIHBpeGVsU2l6ZSAqIDAuNSApLCAyLjApIC0gdmVjMigxLjApO1xcbiAgICBjb2wgPSBjb2wgKiBjaGFyYWN0ZXIobiwgcCk7XFxuXFxuICAgIGdsX0ZyYWdDb2xvciA9IHZlYzQoY29sLCAxLjApO1xcbn1cXG5cIixcbiAgICAgICAgLy8gY3VzdG9tIHVuaWZvcm1zXG4gICAgICAgIHtcbiAgICAgICAgICAgIGRpbWVuc2lvbnM6IHsgdHlwZTogJzRmdicsIHZhbHVlOiBuZXcgRmxvYXQzMkFycmF5KFswLCAwLCAwLCAwXSkgfSxcbiAgICAgICAgICAgIHBpeGVsU2l6ZTogIHsgdHlwZTogJzFmJywgdmFsdWU6IDggfVxuICAgICAgICB9XG4gICAgKTtcbn1cblxuQXNjaWlGaWx0ZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShjb3JlLkFic3RyYWN0RmlsdGVyLnByb3RvdHlwZSk7XG5Bc2NpaUZpbHRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBBc2NpaUZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gQXNjaWlGaWx0ZXI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKEFzY2lpRmlsdGVyLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFRoZSBwaXhlbCBzaXplIHVzZWQgYnkgdGhlIGZpbHRlci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLkFzY2lpRmlsdGVyI1xuICAgICAqL1xuICAgIHNpemU6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy51bmlmb3Jtcy5waXhlbFNpemUudmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLnBpeGVsU2l6ZS52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfVxufSk7XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uLy4uL2NvcmUnKSxcbiAgICBCbHVyWEZpbHRlciA9IHJlcXVpcmUoJy4uL2JsdXIvQmx1clhGaWx0ZXInKSxcbiAgICBCbHVyWUZpbHRlciA9IHJlcXVpcmUoJy4uL2JsdXIvQmx1cllGaWx0ZXInKTtcblxuLyoqXG4gKiBUaGUgQmxvb21GaWx0ZXIgYXBwbGllcyBhIEdhdXNzaWFuIGJsdXIgdG8gYW4gb2JqZWN0LlxuICogVGhlIHN0cmVuZ3RoIG9mIHRoZSBibHVyIGNhbiBiZSBzZXQgZm9yIHgtIGFuZCB5LWF4aXMgc2VwYXJhdGVseS5cbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQWJzdHJhY3RGaWx0ZXJcbiAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnNcbiAqL1xuZnVuY3Rpb24gQmxvb21GaWx0ZXIoKVxue1xuICAgIGNvcmUuQWJzdHJhY3RGaWx0ZXIuY2FsbCh0aGlzKTtcblxuICAgIHRoaXMuYmx1clhGaWx0ZXIgPSBuZXcgQmx1clhGaWx0ZXIoKTtcbiAgICB0aGlzLmJsdXJZRmlsdGVyID0gbmV3IEJsdXJZRmlsdGVyKCk7XG5cbiAgICB0aGlzLmRlZmF1bHRGaWx0ZXIgPSBuZXcgY29yZS5BYnN0cmFjdEZpbHRlcigpO1xufVxuXG5CbG9vbUZpbHRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuQWJzdHJhY3RGaWx0ZXIucHJvdG90eXBlKTtcbkJsb29tRmlsdGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IEJsb29tRmlsdGVyO1xubW9kdWxlLmV4cG9ydHMgPSBCbG9vbUZpbHRlcjtcblxuQmxvb21GaWx0ZXIucHJvdG90eXBlLmFwcGx5RmlsdGVyID0gZnVuY3Rpb24gKHJlbmRlcmVyLCBpbnB1dCwgb3V0cHV0KVxue1xuICAgIHZhciByZW5kZXJUYXJnZXQgPSByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLmdldFJlbmRlclRhcmdldCh0cnVlKTtcblxuICAgIC8vVE9ETyAtIGNvcHlUZXhTdWJJbWFnZTJEIGNvdWxkIGJlIHVzZWQgaGVyZT9cbiAgICB0aGlzLmRlZmF1bHRGaWx0ZXIuYXBwbHlGaWx0ZXIocmVuZGVyZXIsIGlucHV0LCBvdXRwdXQpO1xuXG4gICAgdGhpcy5ibHVyWEZpbHRlci5hcHBseUZpbHRlcihyZW5kZXJlciwgaW5wdXQsIHJlbmRlclRhcmdldCk7XG5cbiAgICByZW5kZXJlci5ibGVuZE1vZGVNYW5hZ2VyLnNldEJsZW5kTW9kZShjb3JlLkJMRU5EX01PREVTLlNDUkVFTik7XG5cbiAgICB0aGlzLmJsdXJZRmlsdGVyLmFwcGx5RmlsdGVyKHJlbmRlcmVyLCByZW5kZXJUYXJnZXQsIG91dHB1dCk7XG5cbiAgICByZW5kZXJlci5ibGVuZE1vZGVNYW5hZ2VyLnNldEJsZW5kTW9kZShjb3JlLkJMRU5EX01PREVTLk5PUk1BTCk7XG5cbiAgICByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLnJldHVyblJlbmRlclRhcmdldChyZW5kZXJUYXJnZXQpO1xufTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoQmxvb21GaWx0ZXIucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgc3RyZW5ndGggb2YgYm90aCB0aGUgYmx1clggYW5kIGJsdXJZIHByb3BlcnRpZXMgc2ltdWx0YW5lb3VzbHlcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyT2YgUElYSS5maWx0ZXJzLkJsb29tRmlsdGVyI1xuICAgICAqIEBkZWZhdWx0IDJcbiAgICAgKi9cbiAgICBibHVyOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuYmx1clhGaWx0ZXIuYmx1cjtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuYmx1clhGaWx0ZXIuYmx1ciA9IHRoaXMuYmx1cllGaWx0ZXIuYmx1ciA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIHN0cmVuZ3RoIG9mIHRoZSBibHVyWCBwcm9wZXJ0eVxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJPZiBQSVhJLmZpbHRlcnMuQmxvb21GaWx0ZXIjXG4gICAgICogQGRlZmF1bHQgMlxuICAgICAqL1xuICAgIGJsdXJYOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuYmx1clhGaWx0ZXIuYmx1cjtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuYmx1clhGaWx0ZXIuYmx1ciA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIHN0cmVuZ3RoIG9mIHRoZSBibHVyWSBwcm9wZXJ0eVxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJPZiBQSVhJLmZpbHRlcnMuQmxvb21GaWx0ZXIjXG4gICAgICogQGRlZmF1bHQgMlxuICAgICAqL1xuICAgIGJsdXJZOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuYmx1cllGaWx0ZXIuYmx1cjtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuYmx1cllGaWx0ZXIuYmx1ciA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfVxufSk7XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uLy4uL2NvcmUnKTtcblxuXG4vKipcbiAqIFRoZSBCbHVyRGlyRmlsdGVyIGFwcGxpZXMgYSBHYXVzc2lhbiBibHVyIHRvd2FyZCBhIGRpcmVjdGlvbiB0byBhbiBvYmplY3QuXG4gKlxuICogQGNsYXNzXG4gKiBAcGFyYW0ge251bWJlcn0gZGlyWFxuICogQHBhcmFtIHtudW1iZXJ9IGRpcllcbiAqIEBleHRlbmRzIFBJWEkuQWJzdHJhY3RGaWx0ZXJcbiAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnNcbiAqL1xuZnVuY3Rpb24gQmx1ckRpckZpbHRlcihkaXJYLCBkaXJZKVxue1xuICAgIGNvcmUuQWJzdHJhY3RGaWx0ZXIuY2FsbCh0aGlzLFxuICAgICAgICAvLyB2ZXJ0ZXggc2hhZGVyXG4gICAgICAgIFwiYXR0cmlidXRlIHZlYzIgYVZlcnRleFBvc2l0aW9uO1xcbmF0dHJpYnV0ZSB2ZWMyIGFUZXh0dXJlQ29vcmQ7XFxuYXR0cmlidXRlIHZlYzQgYUNvbG9yO1xcblxcbnVuaWZvcm0gZmxvYXQgc3RyZW5ndGg7XFxudW5pZm9ybSBmbG9hdCBkaXJYO1xcbnVuaWZvcm0gZmxvYXQgZGlyWTtcXG51bmlmb3JtIG1hdDMgcHJvamVjdGlvbk1hdHJpeDtcXG5cXG52YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDtcXG52YXJ5aW5nIHZlYzQgdkNvbG9yO1xcbnZhcnlpbmcgdmVjMiB2Qmx1clRleENvb3Jkc1szXTtcXG5cXG52b2lkIG1haW4odm9pZClcXG57XFxuICAgIGdsX1Bvc2l0aW9uID0gdmVjNCgocHJvamVjdGlvbk1hdHJpeCAqIHZlYzMoKGFWZXJ0ZXhQb3NpdGlvbiksIDEuMCkpLnh5LCAwLjAsIDEuMCk7XFxuICAgIHZUZXh0dXJlQ29vcmQgPSBhVGV4dHVyZUNvb3JkO1xcblxcbiAgICB2Qmx1clRleENvb3Jkc1swXSA9IGFUZXh0dXJlQ29vcmQgKyB2ZWMyKCAoMC4wMDQgKiBzdHJlbmd0aCkgKiBkaXJYLCAoMC4wMDQgKiBzdHJlbmd0aCkgKiBkaXJZICk7XFxuICAgIHZCbHVyVGV4Q29vcmRzWzFdID0gYVRleHR1cmVDb29yZCArIHZlYzIoICgwLjAwOCAqIHN0cmVuZ3RoKSAqIGRpclgsICgwLjAwOCAqIHN0cmVuZ3RoKSAqIGRpclkgKTtcXG4gICAgdkJsdXJUZXhDb29yZHNbMl0gPSBhVGV4dHVyZUNvb3JkICsgdmVjMiggKDAuMDEyICogc3RyZW5ndGgpICogZGlyWCwgKDAuMDEyICogc3RyZW5ndGgpICogZGlyWSApO1xcblxcbiAgICB2Q29sb3IgPSB2ZWM0KGFDb2xvci5yZ2IgKiBhQ29sb3IuYSwgYUNvbG9yLmEpO1xcbn1cXG5cIixcbiAgICAgICAgLy8gZnJhZ21lbnQgc2hhZGVyXG4gICAgICAgIFwicHJlY2lzaW9uIGxvd3AgZmxvYXQ7XFxuXFxudmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7XFxudmFyeWluZyB2ZWMyIHZCbHVyVGV4Q29vcmRzWzNdO1xcbnZhcnlpbmcgdmVjNCB2Q29sb3I7XFxuXFxudW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXI7XFxuXFxudm9pZCBtYWluKHZvaWQpXFxue1xcbiAgICBnbF9GcmFnQ29sb3IgPSB2ZWM0KDAuMCk7XFxuXFxuICAgIGdsX0ZyYWdDb2xvciArPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZUZXh0dXJlQ29vcmQgICAgICkgKiAwLjM5ODk0MjI4MDQwMTQzMjc7XFxuICAgIGdsX0ZyYWdDb2xvciArPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZCbHVyVGV4Q29vcmRzWyAwXSkgKiAwLjI0MTk3MDcyNDUxOTE0NTQ7XFxuICAgIGdsX0ZyYWdDb2xvciArPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZCbHVyVGV4Q29vcmRzWyAxXSkgKiAwLjA1Mzk5MDk2NjUxMzE4OTg1O1xcbiAgICBnbF9GcmFnQ29sb3IgKz0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2Qmx1clRleENvb3Jkc1sgMl0pICogMC4wMDQ0MzE4NDg0MTE5MzgzNDE7XFxufVxcblwiLFxuICAgICAgICAvLyBzZXQgdGhlIHVuaWZvcm1zXG4gICAgICAgIHtcbiAgICAgICAgICAgIHN0cmVuZ3RoOiB7IHR5cGU6ICcxZicsIHZhbHVlOiAxIH0sXG4gICAgICAgICAgICBkaXJYOiB7IHR5cGU6ICcxZicsIHZhbHVlOiBkaXJYIHx8IDAgfSxcbiAgICAgICAgICAgIGRpclk6IHsgdHlwZTogJzFmJywgdmFsdWU6IGRpclkgfHwgMCB9XG4gICAgICAgIH1cbiAgICApO1xuXG4gICAgdGhpcy5kZWZhdWx0RmlsdGVyID0gbmV3IGNvcmUuQWJzdHJhY3RGaWx0ZXIoKTtcblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIG51bWJlciBvZiBwYXNzZXMgZm9yIGJsdXIuIE1vcmUgcGFzc2VzIG1lYW5zIGhpZ2hlciBxdWFpbGl0eSBibHVyaW5nLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDFcbiAgICAgKi9cbiAgICB0aGlzLnBhc3NlcyA9IDE7XG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBYIGRpcmVjdGlvbiBvZiB0aGUgYmx1clxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDBcbiAgICAgKi9cbiAgICB0aGlzLmRpclggPSBkaXJYIHx8IDA7XG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBZIGRpcmVjdGlvbiBvZiB0aGUgYmx1clxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDBcbiAgICAgKi9cbiAgICB0aGlzLmRpclkgPSBkaXJZIHx8IDA7XG5cbiAgICB0aGlzLnN0cmVuZ3RoID0gNDtcbn1cblxuQmx1ckRpckZpbHRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuQWJzdHJhY3RGaWx0ZXIucHJvdG90eXBlKTtcbkJsdXJEaXJGaWx0ZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gQmx1ckRpckZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gQmx1ckRpckZpbHRlcjtcblxuQmx1ckRpckZpbHRlci5wcm90b3R5cGUuYXBwbHlGaWx0ZXIgPSBmdW5jdGlvbiAocmVuZGVyZXIsIGlucHV0LCBvdXRwdXQsIGNsZWFyKSB7XG5cbiAgICB2YXIgc2hhZGVyID0gdGhpcy5nZXRTaGFkZXIocmVuZGVyZXIpO1xuXG4gICAgdGhpcy51bmlmb3Jtcy5zdHJlbmd0aC52YWx1ZSA9IHRoaXMuc3RyZW5ndGggLyA0IC8gdGhpcy5wYXNzZXMgKiAoaW5wdXQuZnJhbWUud2lkdGggLyBpbnB1dC5zaXplLndpZHRoKTtcblxuICAgIGlmICh0aGlzLnBhc3NlcyA9PT0gMSkge1xuICAgICAgICByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLmFwcGx5RmlsdGVyKHNoYWRlciwgaW5wdXQsIG91dHB1dCwgY2xlYXIpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHZhciByZW5kZXJUYXJnZXQgPSByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLmdldFJlbmRlclRhcmdldCh0cnVlKTtcblxuICAgICAgICByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLmFwcGx5RmlsdGVyKHNoYWRlciwgaW5wdXQsIHJlbmRlclRhcmdldCwgY2xlYXIpO1xuXG4gICAgICAgIGZvcih2YXIgaSA9IDA7IGkgPCB0aGlzLnBhc3Nlcy0yOyBpKyspXG4gICAgICAgIHtcbiAgICAgICAgICAgIC8vdGhpcy51bmlmb3Jtcy5zdHJlbmd0aC52YWx1ZSA9IHRoaXMuc3RyZW5ndGggLyA0IC8gKHRoaXMucGFzc2VzKyhpKjIpKSAqIChpbnB1dC5mcmFtZS53aWR0aCAvIGlucHV0LnNpemUud2lkdGgpO1xuICAgICAgICAgICAgcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5hcHBseUZpbHRlcihzaGFkZXIsIHJlbmRlclRhcmdldCwgcmVuZGVyVGFyZ2V0LCBjbGVhcik7XG4gICAgICAgIH1cblxuICAgICAgICByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLmFwcGx5RmlsdGVyKHNoYWRlciwgcmVuZGVyVGFyZ2V0LCBvdXRwdXQsIGNsZWFyKTtcblxuICAgICAgICByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLnJldHVyblJlbmRlclRhcmdldChyZW5kZXJUYXJnZXQpO1xuICAgIH1cbn07XG5cblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoQmx1ckRpckZpbHRlci5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBzdHJlbmd0aCBvZiBib3RoIHRoZSBibHVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuQmx1ckRpckZpbHRlciNcbiAgICAgKiBAZGVmYXVsdCAyXG4gICAgICovXG4gICAgYmx1cjoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnN0cmVuZ3RoO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5wYWRkaW5nID0gdmFsdWUgKiAwLjU7XG4gICAgICAgICAgICB0aGlzLnN0cmVuZ3RoID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9LFxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIFggZGlyZWN0aW9uIG9mIHRoZSBibHVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuQmx1cllGaWx0ZXIjXG4gICAgICogQGRlZmF1bHQgMFxuICAgICAqL1xuICAgIGRpclg6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5kaXJYO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy5kaXJYLnZhbHVlID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9LFxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIFkgZGlyZWN0aW9uIG9mIHRoZSBibHVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuQmx1ckRpckZpbHRlciNcbiAgICAgKiBAZGVmYXVsdCAwXG4gICAgICovXG4gICAgZGlyWToge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmRpclk7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLmRpclkudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi8uLi9jb3JlJyksXG4gICAgQmx1clhGaWx0ZXIgPSByZXF1aXJlKCcuL0JsdXJYRmlsdGVyJyksXG4gICAgQmx1cllGaWx0ZXIgPSByZXF1aXJlKCcuL0JsdXJZRmlsdGVyJyk7XG5cbi8qKlxuICogVGhlIEJsdXJGaWx0ZXIgYXBwbGllcyBhIEdhdXNzaWFuIGJsdXIgdG8gYW4gb2JqZWN0LlxuICogVGhlIHN0cmVuZ3RoIG9mIHRoZSBibHVyIGNhbiBiZSBzZXQgZm9yIHgtIGFuZCB5LWF4aXMgc2VwYXJhdGVseS5cbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQWJzdHJhY3RGaWx0ZXJcbiAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnNcbiAqL1xuZnVuY3Rpb24gQmx1ckZpbHRlcigpXG57XG4gICAgY29yZS5BYnN0cmFjdEZpbHRlci5jYWxsKHRoaXMpO1xuXG4gICAgdGhpcy5ibHVyWEZpbHRlciA9IG5ldyBCbHVyWEZpbHRlcigpO1xuICAgIHRoaXMuYmx1cllGaWx0ZXIgPSBuZXcgQmx1cllGaWx0ZXIoKTtcbn1cblxuQmx1ckZpbHRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuQWJzdHJhY3RGaWx0ZXIucHJvdG90eXBlKTtcbkJsdXJGaWx0ZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gQmx1ckZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gQmx1ckZpbHRlcjtcblxuQmx1ckZpbHRlci5wcm90b3R5cGUuYXBwbHlGaWx0ZXIgPSBmdW5jdGlvbiAocmVuZGVyZXIsIGlucHV0LCBvdXRwdXQpXG57XG4gICAgdmFyIHJlbmRlclRhcmdldCA9IHJlbmRlcmVyLmZpbHRlck1hbmFnZXIuZ2V0UmVuZGVyVGFyZ2V0KHRydWUpO1xuXG4gICAgdGhpcy5ibHVyWEZpbHRlci5hcHBseUZpbHRlcihyZW5kZXJlciwgaW5wdXQsIHJlbmRlclRhcmdldCk7XG4gICAgdGhpcy5ibHVyWUZpbHRlci5hcHBseUZpbHRlcihyZW5kZXJlciwgcmVuZGVyVGFyZ2V0LCBvdXRwdXQpO1xuXG4gICAgcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5yZXR1cm5SZW5kZXJUYXJnZXQocmVuZGVyVGFyZ2V0KTtcbn07XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKEJsdXJGaWx0ZXIucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgc3RyZW5ndGggb2YgYm90aCB0aGUgYmx1clggYW5kIGJsdXJZIHByb3BlcnRpZXMgc2ltdWx0YW5lb3VzbHlcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyT2YgUElYSS5maWx0ZXJzLkJsdXJGaWx0ZXIjXG4gICAgICogQGRlZmF1bHQgMlxuICAgICAqL1xuICAgIGJsdXI6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5ibHVyWEZpbHRlci5ibHVyO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5wYWRkaW5nID0gTWF0aC5hYnModmFsdWUpICogMC41O1xuICAgICAgICAgICAgdGhpcy5ibHVyWEZpbHRlci5ibHVyID0gdGhpcy5ibHVyWUZpbHRlci5ibHVyID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgbnVtYmVyIG9mIHBhc3NlcyBmb3IgYmx1ci4gTW9yZSBwYXNzZXMgbWVhbnMgaGlnaGVyIHF1YWlsaXR5IGJsdXJpbmcuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5CbHVyWUZpbHRlciNcbiAgICAgKiBAZGVmYXVsdCAxXG4gICAgICovXG4gICAgcGFzc2VzOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuICB0aGlzLmJsdXJYRmlsdGVyLnBhc3NlcztcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuYmx1clhGaWx0ZXIucGFzc2VzID0gdGhpcy5ibHVyWUZpbHRlci5wYXNzZXMgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBzdHJlbmd0aCBvZiB0aGUgYmx1clggcHJvcGVydHlcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyT2YgUElYSS5maWx0ZXJzLkJsdXJGaWx0ZXIjXG4gICAgICogQGRlZmF1bHQgMlxuICAgICAqL1xuICAgIGJsdXJYOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuYmx1clhGaWx0ZXIuYmx1cjtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuYmx1clhGaWx0ZXIuYmx1ciA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIHN0cmVuZ3RoIG9mIHRoZSBibHVyWSBwcm9wZXJ0eVxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJPZiBQSVhJLmZpbHRlcnMuQmx1ckZpbHRlciNcbiAgICAgKiBAZGVmYXVsdCAyXG4gICAgICovXG4gICAgYmx1clk6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5ibHVyWUZpbHRlci5ibHVyO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5ibHVyWUZpbHRlci5ibHVyID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG59KTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vLi4vY29yZScpO1xuLy8gQHNlZSBodHRwczovL2dpdGh1Yi5jb20vc3Vic3RhY2svYnJmcy9pc3N1ZXMvMjVcblxuXG4vKipcbiAqIFRoZSBCbHVyWEZpbHRlciBhcHBsaWVzIGEgaG9yaXpvbnRhbCBHYXVzc2lhbiBibHVyIHRvIGFuIG9iamVjdC5cbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQWJzdHJhY3RGaWx0ZXJcbiAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnNcbiAqL1xuZnVuY3Rpb24gQmx1clhGaWx0ZXIoKVxue1xuICAgIGNvcmUuQWJzdHJhY3RGaWx0ZXIuY2FsbCh0aGlzLFxuICAgICAgICAvLyB2ZXJ0ZXggc2hhZGVyXG4gICAgICAgIFwiYXR0cmlidXRlIHZlYzIgYVZlcnRleFBvc2l0aW9uO1xcbmF0dHJpYnV0ZSB2ZWMyIGFUZXh0dXJlQ29vcmQ7XFxuYXR0cmlidXRlIHZlYzQgYUNvbG9yO1xcblxcbnVuaWZvcm0gZmxvYXQgc3RyZW5ndGg7XFxudW5pZm9ybSBtYXQzIHByb2plY3Rpb25NYXRyaXg7XFxuXFxudmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7XFxudmFyeWluZyB2ZWM0IHZDb2xvcjtcXG52YXJ5aW5nIHZlYzIgdkJsdXJUZXhDb29yZHNbNl07XFxuXFxudm9pZCBtYWluKHZvaWQpXFxue1xcbiAgICBnbF9Qb3NpdGlvbiA9IHZlYzQoKHByb2plY3Rpb25NYXRyaXggKiB2ZWMzKChhVmVydGV4UG9zaXRpb24pLCAxLjApKS54eSwgMC4wLCAxLjApO1xcbiAgICB2VGV4dHVyZUNvb3JkID0gYVRleHR1cmVDb29yZDtcXG5cXG4gICAgdkJsdXJUZXhDb29yZHNbIDBdID0gYVRleHR1cmVDb29yZCArIHZlYzIoLTAuMDEyICogc3RyZW5ndGgsIDAuMCk7XFxuICAgIHZCbHVyVGV4Q29vcmRzWyAxXSA9IGFUZXh0dXJlQ29vcmQgKyB2ZWMyKC0wLjAwOCAqIHN0cmVuZ3RoLCAwLjApO1xcbiAgICB2Qmx1clRleENvb3Jkc1sgMl0gPSBhVGV4dHVyZUNvb3JkICsgdmVjMigtMC4wMDQgKiBzdHJlbmd0aCwgMC4wKTtcXG4gICAgdkJsdXJUZXhDb29yZHNbIDNdID0gYVRleHR1cmVDb29yZCArIHZlYzIoIDAuMDA0ICogc3RyZW5ndGgsIDAuMCk7XFxuICAgIHZCbHVyVGV4Q29vcmRzWyA0XSA9IGFUZXh0dXJlQ29vcmQgKyB2ZWMyKCAwLjAwOCAqIHN0cmVuZ3RoLCAwLjApO1xcbiAgICB2Qmx1clRleENvb3Jkc1sgNV0gPSBhVGV4dHVyZUNvb3JkICsgdmVjMiggMC4wMTIgKiBzdHJlbmd0aCwgMC4wKTtcXG5cXG4gICAgdkNvbG9yID0gdmVjNChhQ29sb3IucmdiICogYUNvbG9yLmEsIGFDb2xvci5hKTtcXG59XFxuXCIsXG4gICAgICAgIC8vIGZyYWdtZW50IHNoYWRlclxuICAgICAgICBcInByZWNpc2lvbiBsb3dwIGZsb2F0O1xcblxcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xcbnZhcnlpbmcgdmVjMiB2Qmx1clRleENvb3Jkc1s2XTtcXG52YXJ5aW5nIHZlYzQgdkNvbG9yO1xcblxcbnVuaWZvcm0gc2FtcGxlcjJEIHVTYW1wbGVyO1xcblxcbnZvaWQgbWFpbih2b2lkKVxcbntcXG4gICAgZ2xfRnJhZ0NvbG9yID0gdmVjNCgwLjApO1xcblxcbiAgICBnbF9GcmFnQ29sb3IgKz0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2Qmx1clRleENvb3Jkc1sgMF0pKjAuMDA0NDMxODQ4NDExOTM4MzQxO1xcbiAgICBnbF9GcmFnQ29sb3IgKz0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2Qmx1clRleENvb3Jkc1sgMV0pKjAuMDUzOTkwOTY2NTEzMTg5ODU7XFxuICAgIGdsX0ZyYWdDb2xvciArPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZCbHVyVGV4Q29vcmRzWyAyXSkqMC4yNDE5NzA3MjQ1MTkxNDU0O1xcbiAgICBnbF9GcmFnQ29sb3IgKz0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2VGV4dHVyZUNvb3JkICAgICApKjAuMzk4OTQyMjgwNDAxNDMyNztcXG4gICAgZ2xfRnJhZ0NvbG9yICs9IHRleHR1cmUyRCh1U2FtcGxlciwgdkJsdXJUZXhDb29yZHNbIDNdKSowLjI0MTk3MDcyNDUxOTE0NTQ7XFxuICAgIGdsX0ZyYWdDb2xvciArPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZCbHVyVGV4Q29vcmRzWyA0XSkqMC4wNTM5OTA5NjY1MTMxODk4NTtcXG4gICAgZ2xfRnJhZ0NvbG9yICs9IHRleHR1cmUyRCh1U2FtcGxlciwgdkJsdXJUZXhDb29yZHNbIDVdKSowLjAwNDQzMTg0ODQxMTkzODM0MTtcXG59XFxuXCIsXG4gICAgICAgIC8vIHNldCB0aGUgdW5pZm9ybXNcbiAgICAgICAge1xuICAgICAgICAgICAgc3RyZW5ndGg6IHsgdHlwZTogJzFmJywgdmFsdWU6IDEgfVxuICAgICAgICB9XG4gICAgKTtcblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIG51bWJlciBvZiBwYXNzZXMgZm9yIGJsdXIuIE1vcmUgcGFzc2VzIG1lYW5zIGhpZ2hlciBxdWFpbGl0eSBibHVyaW5nLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDFcbiAgICAgKi9cbiAgICB0aGlzLnBhc3NlcyA9IDE7XG5cbiAgICB0aGlzLnN0cmVuZ3RoID0gNDtcbn1cblxuQmx1clhGaWx0ZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShjb3JlLkFic3RyYWN0RmlsdGVyLnByb3RvdHlwZSk7XG5CbHVyWEZpbHRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBCbHVyWEZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gQmx1clhGaWx0ZXI7XG5cbkJsdXJYRmlsdGVyLnByb3RvdHlwZS5hcHBseUZpbHRlciA9IGZ1bmN0aW9uIChyZW5kZXJlciwgaW5wdXQsIG91dHB1dCwgY2xlYXIpXG57XG4gICAgdmFyIHNoYWRlciA9IHRoaXMuZ2V0U2hhZGVyKHJlbmRlcmVyKTtcblxuICAgIHRoaXMudW5pZm9ybXMuc3RyZW5ndGgudmFsdWUgPSB0aGlzLnN0cmVuZ3RoIC8gNCAvIHRoaXMucGFzc2VzICogKGlucHV0LmZyYW1lLndpZHRoIC8gaW5wdXQuc2l6ZS53aWR0aCk7XG5cbiAgICBpZih0aGlzLnBhc3NlcyA9PT0gMSlcbiAgICB7XG4gICAgICAgIHJlbmRlcmVyLmZpbHRlck1hbmFnZXIuYXBwbHlGaWx0ZXIoc2hhZGVyLCBpbnB1dCwgb3V0cHV0LCBjbGVhcik7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHZhciByZW5kZXJUYXJnZXQgPSByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLmdldFJlbmRlclRhcmdldCh0cnVlKTtcbiAgICAgICAgdmFyIGZsaXAgPSBpbnB1dDtcbiAgICAgICAgdmFyIGZsb3AgPSByZW5kZXJUYXJnZXQ7XG5cbiAgICAgICAgZm9yKHZhciBpID0gMDsgaSA8IHRoaXMucGFzc2VzLTE7IGkrKylcbiAgICAgICAge1xuICAgICAgICAgICAgcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5hcHBseUZpbHRlcihzaGFkZXIsIGZsaXAsIGZsb3AsIHRydWUpO1xuXG4gICAgICAgICAgIHZhciB0ZW1wID0gZmxvcDtcbiAgICAgICAgICAgZmxvcCA9IGZsaXA7XG4gICAgICAgICAgIGZsaXAgPSB0ZW1wO1xuICAgICAgICB9XG5cbiAgICAgICAgcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5hcHBseUZpbHRlcihzaGFkZXIsIGZsaXAsIG91dHB1dCwgY2xlYXIpO1xuXG4gICAgICAgIHJlbmRlcmVyLmZpbHRlck1hbmFnZXIucmV0dXJuUmVuZGVyVGFyZ2V0KHJlbmRlclRhcmdldCk7XG4gICAgfVxufTtcblxuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhCbHVyWEZpbHRlci5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBzdHJlbmd0aCBvZiBib3RoIHRoZSBibHVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuQmx1clhGaWx0ZXIjXG4gICAgICogQGRlZmF1bHQgMlxuICAgICAqL1xuICAgIGJsdXI6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gIHRoaXMuc3RyZW5ndGg7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnBhZGRpbmcgPSAgTWF0aC5hYnModmFsdWUpICogMC41O1xuICAgICAgICAgICAgdGhpcy5zdHJlbmd0aCA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfVxufSk7XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uLy4uL2NvcmUnKTtcbi8vIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL3N1YnN0YWNrL2JyZnMvaXNzdWVzLzI1XG5cblxuLyoqXG4gKiBUaGUgQmx1cllGaWx0ZXIgYXBwbGllcyBhIGhvcml6b250YWwgR2F1c3NpYW4gYmx1ciB0byBhbiBvYmplY3QuXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLkFic3RyYWN0RmlsdGVyXG4gKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzXG4gKi9cbmZ1bmN0aW9uIEJsdXJZRmlsdGVyKClcbntcbiAgICBjb3JlLkFic3RyYWN0RmlsdGVyLmNhbGwodGhpcyxcbiAgICAgICAgLy8gdmVydGV4IHNoYWRlclxuICAgICAgICBcImF0dHJpYnV0ZSB2ZWMyIGFWZXJ0ZXhQb3NpdGlvbjtcXG5hdHRyaWJ1dGUgdmVjMiBhVGV4dHVyZUNvb3JkO1xcbmF0dHJpYnV0ZSB2ZWM0IGFDb2xvcjtcXG5cXG51bmlmb3JtIGZsb2F0IHN0cmVuZ3RoO1xcbnVuaWZvcm0gbWF0MyBwcm9qZWN0aW9uTWF0cml4O1xcblxcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xcbnZhcnlpbmcgdmVjNCB2Q29sb3I7XFxudmFyeWluZyB2ZWMyIHZCbHVyVGV4Q29vcmRzWzZdO1xcblxcbnZvaWQgbWFpbih2b2lkKVxcbntcXG4gICAgZ2xfUG9zaXRpb24gPSB2ZWM0KChwcm9qZWN0aW9uTWF0cml4ICogdmVjMygoYVZlcnRleFBvc2l0aW9uKSwgMS4wKSkueHksIDAuMCwgMS4wKTtcXG4gICAgdlRleHR1cmVDb29yZCA9IGFUZXh0dXJlQ29vcmQ7XFxuXFxuICAgIHZCbHVyVGV4Q29vcmRzWyAwXSA9IGFUZXh0dXJlQ29vcmQgKyB2ZWMyKDAuMCwgLTAuMDEyICogc3RyZW5ndGgpO1xcbiAgICB2Qmx1clRleENvb3Jkc1sgMV0gPSBhVGV4dHVyZUNvb3JkICsgdmVjMigwLjAsIC0wLjAwOCAqIHN0cmVuZ3RoKTtcXG4gICAgdkJsdXJUZXhDb29yZHNbIDJdID0gYVRleHR1cmVDb29yZCArIHZlYzIoMC4wLCAtMC4wMDQgKiBzdHJlbmd0aCk7XFxuICAgIHZCbHVyVGV4Q29vcmRzWyAzXSA9IGFUZXh0dXJlQ29vcmQgKyB2ZWMyKDAuMCwgIDAuMDA0ICogc3RyZW5ndGgpO1xcbiAgICB2Qmx1clRleENvb3Jkc1sgNF0gPSBhVGV4dHVyZUNvb3JkICsgdmVjMigwLjAsICAwLjAwOCAqIHN0cmVuZ3RoKTtcXG4gICAgdkJsdXJUZXhDb29yZHNbIDVdID0gYVRleHR1cmVDb29yZCArIHZlYzIoMC4wLCAgMC4wMTIgKiBzdHJlbmd0aCk7XFxuXFxuICAgdkNvbG9yID0gdmVjNChhQ29sb3IucmdiICogYUNvbG9yLmEsIGFDb2xvci5hKTtcXG59XFxuXCIsXG4gICAgICAgIC8vIGZyYWdtZW50IHNoYWRlclxuICAgICAgICBcInByZWNpc2lvbiBsb3dwIGZsb2F0O1xcblxcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xcbnZhcnlpbmcgdmVjMiB2Qmx1clRleENvb3Jkc1s2XTtcXG52YXJ5aW5nIHZlYzQgdkNvbG9yO1xcblxcbnVuaWZvcm0gc2FtcGxlcjJEIHVTYW1wbGVyO1xcblxcbnZvaWQgbWFpbih2b2lkKVxcbntcXG4gICAgZ2xfRnJhZ0NvbG9yID0gdmVjNCgwLjApO1xcblxcbiAgICBnbF9GcmFnQ29sb3IgKz0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2Qmx1clRleENvb3Jkc1sgMF0pKjAuMDA0NDMxODQ4NDExOTM4MzQxO1xcbiAgICBnbF9GcmFnQ29sb3IgKz0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2Qmx1clRleENvb3Jkc1sgMV0pKjAuMDUzOTkwOTY2NTEzMTg5ODU7XFxuICAgIGdsX0ZyYWdDb2xvciArPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZCbHVyVGV4Q29vcmRzWyAyXSkqMC4yNDE5NzA3MjQ1MTkxNDU0O1xcbiAgICBnbF9GcmFnQ29sb3IgKz0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2VGV4dHVyZUNvb3JkICAgICApKjAuMzk4OTQyMjgwNDAxNDMyNztcXG4gICAgZ2xfRnJhZ0NvbG9yICs9IHRleHR1cmUyRCh1U2FtcGxlciwgdkJsdXJUZXhDb29yZHNbIDNdKSowLjI0MTk3MDcyNDUxOTE0NTQ7XFxuICAgIGdsX0ZyYWdDb2xvciArPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZCbHVyVGV4Q29vcmRzWyA0XSkqMC4wNTM5OTA5NjY1MTMxODk4NTtcXG4gICAgZ2xfRnJhZ0NvbG9yICs9IHRleHR1cmUyRCh1U2FtcGxlciwgdkJsdXJUZXhDb29yZHNbIDVdKSowLjAwNDQzMTg0ODQxMTkzODM0MTtcXG59XFxuXCIsXG4gICAgICAgIC8vIHNldCB0aGUgdW5pZm9ybXNcbiAgICAgICAge1xuICAgICAgICAgICAgc3RyZW5ndGg6IHsgdHlwZTogJzFmJywgdmFsdWU6IDEgfVxuICAgICAgICB9XG4gICAgKTtcblxuICAgIHRoaXMucGFzc2VzID0gMTtcbiAgICB0aGlzLnN0cmVuZ3RoID0gNDtcbn1cblxuQmx1cllGaWx0ZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShjb3JlLkFic3RyYWN0RmlsdGVyLnByb3RvdHlwZSk7XG5CbHVyWUZpbHRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBCbHVyWUZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gQmx1cllGaWx0ZXI7XG5cbkJsdXJZRmlsdGVyLnByb3RvdHlwZS5hcHBseUZpbHRlciA9IGZ1bmN0aW9uIChyZW5kZXJlciwgaW5wdXQsIG91dHB1dCwgY2xlYXIpXG57XG4gICAgdmFyIHNoYWRlciA9IHRoaXMuZ2V0U2hhZGVyKHJlbmRlcmVyKTtcblxuICAgIHRoaXMudW5pZm9ybXMuc3RyZW5ndGgudmFsdWUgPSBNYXRoLmFicyh0aGlzLnN0cmVuZ3RoKSAvIDQgLyB0aGlzLnBhc3NlcyAqIChpbnB1dC5mcmFtZS5oZWlnaHQgLyBpbnB1dC5zaXplLmhlaWdodCk7XG5cbiAgICBpZih0aGlzLnBhc3NlcyA9PT0gMSlcbiAgICB7XG4gICAgICAgIHJlbmRlcmVyLmZpbHRlck1hbmFnZXIuYXBwbHlGaWx0ZXIoc2hhZGVyLCBpbnB1dCwgb3V0cHV0LCBjbGVhcik7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHZhciByZW5kZXJUYXJnZXQgPSByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLmdldFJlbmRlclRhcmdldCh0cnVlKTtcbiAgICAgICAgdmFyIGZsaXAgPSBpbnB1dDtcbiAgICAgICAgdmFyIGZsb3AgPSByZW5kZXJUYXJnZXQ7XG5cbiAgICAgICAgZm9yKHZhciBpID0gMDsgaSA8IHRoaXMucGFzc2VzLTE7IGkrKylcbiAgICAgICAge1xuICAgICAgICAgICAgcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5hcHBseUZpbHRlcihzaGFkZXIsIGZsaXAsIGZsb3AsIHRydWUpO1xuXG4gICAgICAgICAgIHZhciB0ZW1wID0gZmxvcDtcbiAgICAgICAgICAgZmxvcCA9IGZsaXA7XG4gICAgICAgICAgIGZsaXAgPSB0ZW1wO1xuICAgICAgICB9XG5cbiAgICAgICAgcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5hcHBseUZpbHRlcihzaGFkZXIsIGZsaXAsIG91dHB1dCwgY2xlYXIpO1xuXG4gICAgICAgIHJlbmRlcmVyLmZpbHRlck1hbmFnZXIucmV0dXJuUmVuZGVyVGFyZ2V0KHJlbmRlclRhcmdldCk7XG4gICAgfVxufTtcblxuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhCbHVyWUZpbHRlci5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBzdHJlbmd0aCBvZiBib3RoIHRoZSBibHVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuQmx1cllGaWx0ZXIjXG4gICAgICogQGRlZmF1bHQgMlxuICAgICAqL1xuICAgIGJsdXI6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gIHRoaXMuc3RyZW5ndGg7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnBhZGRpbmcgPSBNYXRoLmFicyh2YWx1ZSkgKiAwLjU7XG4gICAgICAgICAgICB0aGlzLnN0cmVuZ3RoID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG59KTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vLi4vY29yZScpO1xuLy8gQHNlZSBodHRwczovL2dpdGh1Yi5jb20vc3Vic3RhY2svYnJmcy9pc3N1ZXMvMjVcblxuXG4vKipcbiAqIEEgU21hcnQgQmx1ciBGaWx0ZXIuXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLkFic3RyYWN0RmlsdGVyXG4gKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzXG4gKi9cbmZ1bmN0aW9uIFNtYXJ0Qmx1ckZpbHRlcigpXG57XG4gICAgY29yZS5BYnN0cmFjdEZpbHRlci5jYWxsKHRoaXMsXG4gICAgICAgIC8vIHZlcnRleCBzaGFkZXJcbiAgICAgICAgbnVsbCxcbiAgICAgICAgLy8gZnJhZ21lbnQgc2hhZGVyXG4gICAgICAgIFwicHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XFxuXFxudmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7XFxuXFxudW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXI7XFxudW5pZm9ybSB2ZWMyIGRlbHRhO1xcblxcbmZsb2F0IHJhbmRvbSh2ZWMzIHNjYWxlLCBmbG9hdCBzZWVkKVxcbntcXG4gICAgcmV0dXJuIGZyYWN0KHNpbihkb3QoZ2xfRnJhZ0Nvb3JkLnh5eiArIHNlZWQsIHNjYWxlKSkgKiA0Mzc1OC41NDUzICsgc2VlZCk7XFxufVxcblxcbnZvaWQgbWFpbih2b2lkKVxcbntcXG4gICAgdmVjNCBjb2xvciA9IHZlYzQoMC4wKTtcXG4gICAgZmxvYXQgdG90YWwgPSAwLjA7XFxuXFxuICAgIGZsb2F0IG9mZnNldCA9IHJhbmRvbSh2ZWMzKDEyLjk4OTgsIDc4LjIzMywgMTUxLjcxODIpLCAwLjApO1xcblxcbiAgICBmb3IgKGZsb2F0IHQgPSAtMzAuMDsgdCA8PSAzMC4wOyB0KyspXFxuICAgIHtcXG4gICAgICAgIGZsb2F0IHBlcmNlbnQgPSAodCArIG9mZnNldCAtIDAuNSkgLyAzMC4wO1xcbiAgICAgICAgZmxvYXQgd2VpZ2h0ID0gMS4wIC0gYWJzKHBlcmNlbnQpO1xcbiAgICAgICAgdmVjNCBzYW1wbGUgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZUZXh0dXJlQ29vcmQgKyBkZWx0YSAqIHBlcmNlbnQpO1xcbiAgICAgICAgc2FtcGxlLnJnYiAqPSBzYW1wbGUuYTtcXG4gICAgICAgIGNvbG9yICs9IHNhbXBsZSAqIHdlaWdodDtcXG4gICAgICAgIHRvdGFsICs9IHdlaWdodDtcXG4gICAgfVxcblxcbiAgICBnbF9GcmFnQ29sb3IgPSBjb2xvciAvIHRvdGFsO1xcbiAgICBnbF9GcmFnQ29sb3IucmdiIC89IGdsX0ZyYWdDb2xvci5hICsgMC4wMDAwMTtcXG59XFxuXCIsXG4gICAgICAgIC8vIHVuaWZvcm1zXG4gICAgICAgIHtcbiAgICAgICAgICBkZWx0YTogeyB0eXBlOiAndjInLCB2YWx1ZTogeyB4OiAwLjEsIHk6IDAuMCB9IH1cbiAgICAgICAgfVxuICAgICk7XG59XG5cblNtYXJ0Qmx1ckZpbHRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuQWJzdHJhY3RGaWx0ZXIucHJvdG90eXBlKTtcblNtYXJ0Qmx1ckZpbHRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBTbWFydEJsdXJGaWx0ZXI7XG5tb2R1bGUuZXhwb3J0cyA9IFNtYXJ0Qmx1ckZpbHRlcjtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vLi4vY29yZScpO1xuLy8gQHNlZSBodHRwczovL2dpdGh1Yi5jb20vc3Vic3RhY2svYnJmcy9pc3N1ZXMvMjVcblxuXG4vKipcbiAqIFRoZSBDb2xvck1hdHJpeEZpbHRlciBjbGFzcyBsZXRzIHlvdSBhcHBseSBhIDV4NCBtYXRyaXggdHJhbnNmb3JtYXRpb24gb24gdGhlIFJHQkFcbiAqIGNvbG9yIGFuZCBhbHBoYSB2YWx1ZXMgb2YgZXZlcnkgcGl4ZWwgb24geW91ciBkaXNwbGF5T2JqZWN0IHRvIHByb2R1Y2UgYSByZXN1bHRcbiAqIHdpdGggYSBuZXcgc2V0IG9mIFJHQkEgY29sb3IgYW5kIGFscGhhIHZhbHVlcy4gSXQncyBwcmV0dHkgcG93ZXJmdWwhXG4gKlxuICogYGBganNcbiAqICB2YXIgY29sb3JNYXRyaXggPSBuZXcgUElYSS5Db2xvck1hdHJpeEZpbHRlcigpO1xuICogIGNvbnRhaW5lci5maWx0ZXJzID0gW2NvbG9yTWF0cml4XTtcbiAqICBjb2xvck1hdHJpeC5jb250cmFzdCgyKTtcbiAqIGBgYFxuICogQGF1dGhvciBDbMOpbWVudCBDaGVuZWJhdWx0IDxjbGVtZW50QGdvb2Rib3lkaWdpdGFsLmNvbT5cbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5BYnN0cmFjdEZpbHRlclxuICogQG1lbWJlcm9mIFBJWEkuZmlsdGVyc1xuICovXG5mdW5jdGlvbiBDb2xvck1hdHJpeEZpbHRlcigpXG57XG4gICAgY29yZS5BYnN0cmFjdEZpbHRlci5jYWxsKHRoaXMsXG4gICAgICAgIC8vIHZlcnRleCBzaGFkZXJcbiAgICAgICAgbnVsbCxcbiAgICAgICAgLy8gZnJhZ21lbnQgc2hhZGVyXG4gICAgICAgIFwicHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XFxuXFxudmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7XFxudW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXI7XFxudW5pZm9ybSBmbG9hdCBtWzI1XTtcXG5cXG52b2lkIG1haW4odm9pZClcXG57XFxuXFxuICAgIHZlYzQgYyA9IHRleHR1cmUyRCh1U2FtcGxlciwgdlRleHR1cmVDb29yZCk7XFxuXFxuICAgIGdsX0ZyYWdDb2xvci5yID0gKG1bMF0gKiBjLnIpO1xcbiAgICAgICAgZ2xfRnJhZ0NvbG9yLnIgKz0gKG1bMV0gKiBjLmcpO1xcbiAgICAgICAgZ2xfRnJhZ0NvbG9yLnIgKz0gKG1bMl0gKiBjLmIpO1xcbiAgICAgICAgZ2xfRnJhZ0NvbG9yLnIgKz0gKG1bM10gKiBjLmEpO1xcbiAgICAgICAgZ2xfRnJhZ0NvbG9yLnIgKz0gbVs0XTtcXG5cXG4gICAgZ2xfRnJhZ0NvbG9yLmcgPSAobVs1XSAqIGMucik7XFxuICAgICAgICBnbF9GcmFnQ29sb3IuZyArPSAobVs2XSAqIGMuZyk7XFxuICAgICAgICBnbF9GcmFnQ29sb3IuZyArPSAobVs3XSAqIGMuYik7XFxuICAgICAgICBnbF9GcmFnQ29sb3IuZyArPSAobVs4XSAqIGMuYSk7XFxuICAgICAgICBnbF9GcmFnQ29sb3IuZyArPSBtWzldO1xcblxcbiAgICAgZ2xfRnJhZ0NvbG9yLmIgPSAobVsxMF0gKiBjLnIpO1xcbiAgICAgICAgZ2xfRnJhZ0NvbG9yLmIgKz0gKG1bMTFdICogYy5nKTtcXG4gICAgICAgIGdsX0ZyYWdDb2xvci5iICs9IChtWzEyXSAqIGMuYik7XFxuICAgICAgICBnbF9GcmFnQ29sb3IuYiArPSAobVsxM10gKiBjLmEpO1xcbiAgICAgICAgZ2xfRnJhZ0NvbG9yLmIgKz0gbVsxNF07XFxuXFxuICAgICBnbF9GcmFnQ29sb3IuYSA9IChtWzE1XSAqIGMucik7XFxuICAgICAgICBnbF9GcmFnQ29sb3IuYSArPSAobVsxNl0gKiBjLmcpO1xcbiAgICAgICAgZ2xfRnJhZ0NvbG9yLmEgKz0gKG1bMTddICogYy5iKTtcXG4gICAgICAgIGdsX0ZyYWdDb2xvci5hICs9IChtWzE4XSAqIGMuYSk7XFxuICAgICAgICBnbF9GcmFnQ29sb3IuYSArPSBtWzE5XTtcXG5cXG59XFxuXCIsXG4gICAgICAgIC8vIGN1c3RvbSB1bmlmb3Jtc1xuICAgICAgICB7XG4gICAgICAgICAgICBtOiB7XG4gICAgICAgICAgICAgICAgdHlwZTogJzFmdicsIHZhbHVlOiBbXG4gICAgICAgICAgICAgICAgICAgIDEsIDAsIDAsIDAsIDAsXG4gICAgICAgICAgICAgICAgICAgIDAsIDEsIDAsIDAsIDAsXG4gICAgICAgICAgICAgICAgICAgIDAsIDAsIDEsIDAsIDAsXG4gICAgICAgICAgICAgICAgICAgIDAsIDAsIDAsIDEsIDBcbiAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICApO1xufVxuXG5Db2xvck1hdHJpeEZpbHRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuQWJzdHJhY3RGaWx0ZXIucHJvdG90eXBlKTtcbkNvbG9yTWF0cml4RmlsdGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IENvbG9yTWF0cml4RmlsdGVyO1xubW9kdWxlLmV4cG9ydHMgPSBDb2xvck1hdHJpeEZpbHRlcjtcblxuXG4vKipcbiAqIFRyYW5zZm9ybXMgY3VycmVudCBtYXRyaXggYW5kIHNldCB0aGUgbmV3IG9uZVxuICpcbiAqIEBwYXJhbSBtYXRyaXgge251bWJlcltdfSAobWF0IDV4NClcbiAqIEBwYXJhbSBtdWx0aXBseSB7Ym9vbGVhbn0gaWYgdHJ1ZSwgY3VycmVudCBtYXRyaXggYW5kIG1hdHJpeCBhcmUgbXVsdGlwbGllZC4gSWYgZmFsc2UsIGp1c3Qgc2V0IHRoZSBjdXJyZW50IG1hdHJpeCB3aXRoIEBwYXJhbSBtYXRyaXhcbiAqL1xuQ29sb3JNYXRyaXhGaWx0ZXIucHJvdG90eXBlLl9sb2FkTWF0cml4ID0gZnVuY3Rpb24gKG1hdHJpeCwgbXVsdGlwbHkpXG57XG4gICAgbXVsdGlwbHkgPSAhIW11bHRpcGx5O1xuXG4gICAgdmFyIG5ld01hdHJpeCA9IG1hdHJpeDtcblxuICAgIGlmIChtdWx0aXBseSkge1xuICAgICAgICB0aGlzLl9tdWx0aXBseShuZXdNYXRyaXgsIHRoaXMudW5pZm9ybXMubS52YWx1ZSwgbWF0cml4KTtcbiAgICAgICAgbmV3TWF0cml4ID0gdGhpcy5fY29sb3JNYXRyaXgobmV3TWF0cml4KTtcbiAgICB9XG5cbiAgICAvLyBzZXQgdGhlIG5ldyBtYXRyaXhcbiAgICB0aGlzLnVuaWZvcm1zLm0udmFsdWUgPSBuZXdNYXRyaXg7XG59O1xuXG4vKipcbiAqIE11bHRpcGxpZXMgdHdvIG1hdDUnc1xuICpcbiAqIEBwYXJhbSBvdXQge251bWJlcltdfSAobWF0IDV4NCkgdGhlIHJlY2VpdmluZyBtYXRyaXhcbiAqIEBwYXJhbSBhIHtudW1iZXJbXX0gKG1hdCA1eDQpIHRoZSBmaXJzdCBvcGVyYW5kXG4gKiBAcGFyYW0gYiB7bnVtYmVyW119IChtYXQgNXg0KSB0aGUgc2Vjb25kIG9wZXJhbmRcbiAqIEByZXR1cm5zIG91dCB7bnVtYmVyW119IChtYXQgNXg0KVxuICovXG5Db2xvck1hdHJpeEZpbHRlci5wcm90b3R5cGUuX211bHRpcGx5ID0gZnVuY3Rpb24gKG91dCwgYSwgYilcbntcblxuICAgIC8vIFJlZCBDaGFubmVsXG4gICAgb3V0WzBdID0gKGFbMF0gKiBiWzBdKSArIChhWzFdICogYls1XSkgKyAoYVsyXSAqIGJbMTBdKSArIChhWzNdICogYlsxNV0pO1xuICAgIG91dFsxXSA9IChhWzBdICogYlsxXSkgKyAoYVsxXSAqIGJbNl0pICsgKGFbMl0gKiBiWzExXSkgKyAoYVszXSAqIGJbMTZdKTtcbiAgICBvdXRbMl0gPSAoYVswXSAqIGJbMl0pICsgKGFbMV0gKiBiWzddKSArIChhWzJdICogYlsxMl0pICsgKGFbM10gKiBiWzE3XSk7XG4gICAgb3V0WzNdID0gKGFbMF0gKiBiWzNdKSArIChhWzFdICogYls4XSkgKyAoYVsyXSAqIGJbMTNdKSArIChhWzNdICogYlsxOF0pO1xuICAgIG91dFs0XSA9IChhWzBdICogYls0XSkgKyAoYVsxXSAqIGJbOV0pICsgKGFbMl0gKiBiWzE0XSkgKyAoYVszXSAqIGJbMTldKTtcblxuICAgIC8vIEdyZWVuIENoYW5uZWxcbiAgICBvdXRbNV0gPSAoYVs1XSAqIGJbMF0pICsgKGFbNl0gKiBiWzVdKSArIChhWzddICogYlsxMF0pICsgKGFbOF0gKiBiWzE1XSk7XG4gICAgb3V0WzZdID0gKGFbNV0gKiBiWzFdKSArIChhWzZdICogYls2XSkgKyAoYVs3XSAqIGJbMTFdKSArIChhWzhdICogYlsxNl0pO1xuICAgIG91dFs3XSA9IChhWzVdICogYlsyXSkgKyAoYVs2XSAqIGJbN10pICsgKGFbN10gKiBiWzEyXSkgKyAoYVs4XSAqIGJbMTddKTtcbiAgICBvdXRbOF0gPSAoYVs1XSAqIGJbM10pICsgKGFbNl0gKiBiWzhdKSArIChhWzddICogYlsxM10pICsgKGFbOF0gKiBiWzE4XSk7XG4gICAgb3V0WzldID0gKGFbNV0gKiBiWzRdKSArIChhWzZdICogYls5XSkgKyAoYVs3XSAqIGJbMTRdKSArIChhWzhdICogYlsxOV0pO1xuXG4gICAgLy8gQmx1ZSBDaGFubmVsXG4gICAgb3V0WzEwXSA9IChhWzEwXSAqIGJbMF0pICsgKGFbMTFdICogYls1XSkgKyAoYVsxMl0gKiBiWzEwXSkgKyAoYVsxM10gKiBiWzE1XSk7XG4gICAgb3V0WzExXSA9IChhWzEwXSAqIGJbMV0pICsgKGFbMTFdICogYls2XSkgKyAoYVsxMl0gKiBiWzExXSkgKyAoYVsxM10gKiBiWzE2XSk7XG4gICAgb3V0WzEyXSA9IChhWzEwXSAqIGJbMl0pICsgKGFbMTFdICogYls3XSkgKyAoYVsxMl0gKiBiWzEyXSkgKyAoYVsxM10gKiBiWzE3XSk7XG4gICAgb3V0WzEzXSA9IChhWzEwXSAqIGJbM10pICsgKGFbMTFdICogYls4XSkgKyAoYVsxMl0gKiBiWzEzXSkgKyAoYVsxM10gKiBiWzE4XSk7XG4gICAgb3V0WzE0XSA9IChhWzEwXSAqIGJbNF0pICsgKGFbMTFdICogYls5XSkgKyAoYVsxMl0gKiBiWzE0XSkgKyAoYVsxM10gKiBiWzE5XSk7XG5cbiAgICAvLyBBbHBoYSBDaGFubmVsXG4gICAgb3V0WzE1XSA9IChhWzE1XSAqIGJbMF0pICsgKGFbMTZdICogYls1XSkgKyAoYVsxN10gKiBiWzEwXSkgKyAoYVsxOF0gKiBiWzE1XSk7XG4gICAgb3V0WzE2XSA9IChhWzE1XSAqIGJbMV0pICsgKGFbMTZdICogYls2XSkgKyAoYVsxN10gKiBiWzExXSkgKyAoYVsxOF0gKiBiWzE2XSk7XG4gICAgb3V0WzE3XSA9IChhWzE1XSAqIGJbMl0pICsgKGFbMTZdICogYls3XSkgKyAoYVsxN10gKiBiWzEyXSkgKyAoYVsxOF0gKiBiWzE3XSk7XG4gICAgb3V0WzE4XSA9IChhWzE1XSAqIGJbM10pICsgKGFbMTZdICogYls4XSkgKyAoYVsxN10gKiBiWzEzXSkgKyAoYVsxOF0gKiBiWzE4XSk7XG4gICAgb3V0WzE5XSA9IChhWzE1XSAqIGJbNF0pICsgKGFbMTZdICogYls5XSkgKyAoYVsxN10gKiBiWzE0XSkgKyAoYVsxOF0gKiBiWzE5XSk7XG5cbiAgICByZXR1cm4gb3V0O1xufTtcblxuLyoqXG4gKiBDcmVhdGUgYSBGbG9hdDMyIEFycmF5IGFuZCBub3JtYWxpemUgdGhlIG9mZnNldCBjb21wb25lbnQgdG8gMC0xXG4gKlxuICogQHBhcmFtIG1hdHJpeCB7bnVtYmVyW119IChtYXQgNXg0KVxuICogQHJldHVybiBtIHtudW1iZXJbXX0gKG1hdCA1eDQpIHdpdGggYWxsIHZhbHVlcyBiZXR3ZWVuIDAtMVxuICovXG5Db2xvck1hdHJpeEZpbHRlci5wcm90b3R5cGUuX2NvbG9yTWF0cml4ID0gZnVuY3Rpb24gKG1hdHJpeClcbntcbiAgICAvLyBDcmVhdGUgYSBGbG9hdDMyIEFycmF5IGFuZCBub3JtYWxpemUgdGhlIG9mZnNldCBjb21wb25lbnQgdG8gMC0xXG4gICAgdmFyIG0gPSBuZXcgRmxvYXQzMkFycmF5KG1hdHJpeCk7XG4gICAgbVs0XSAvPSAyNTU7XG4gICAgbVs5XSAvPSAyNTU7XG4gICAgbVsxNF0gLz0gMjU1O1xuICAgIG1bMTldIC89IDI1NTtcblxuICAgIHJldHVybiBtO1xufTtcblxuLyoqXG4gKiBBZGp1c3RzIGJyaWdodG5lc3NcbiAqXG4gKiBAcGFyYW0gYiB7bnVtYmVyfSB2YWx1ZSBvZiB0aGUgYnJpZ3RobmVzcyAoMCBpcyBibGFjaylcbiAqIEBwYXJhbSBtdWx0aXBseSB7Ym9vbGVhbn0gcmVmZXIgdG8gLl9sb2FkTWF0cml4KCkgbWV0aG9kXG4gKi9cbkNvbG9yTWF0cml4RmlsdGVyLnByb3RvdHlwZS5icmlnaHRuZXNzID0gZnVuY3Rpb24gKGIsIG11bHRpcGx5KVxue1xuICAgIHZhciBtYXRyaXggPSBbXG4gICAgICAgIGIsIDAsIDAsIDAsIDAsXG4gICAgICAgIDAsIGIsIDAsIDAsIDAsXG4gICAgICAgIDAsIDAsIGIsIDAsIDAsXG4gICAgICAgIDAsIDAsIDAsIDEsIDBcbiAgICBdO1xuXG4gICAgdGhpcy5fbG9hZE1hdHJpeChtYXRyaXgsIG11bHRpcGx5KTtcbn07XG5cbi8qKlxuICogU2V0IHRoZSBtYXRyaWNlcyBpbiBncmV5IHNjYWxlc1xuICpcbiAqIEBwYXJhbSBzY2FsZSB7bnVtYmVyfSB2YWx1ZSBvZiB0aGUgZ3JleSAoMCBpcyBibGFjaylcbiAqIEBwYXJhbSBtdWx0aXBseSB7Ym9vbGVhbn0gcmVmZXIgdG8gLl9sb2FkTWF0cml4KCkgbWV0aG9kXG4gKi9cbkNvbG9yTWF0cml4RmlsdGVyLnByb3RvdHlwZS5ncmV5c2NhbGUgPSBmdW5jdGlvbiAoc2NhbGUsIG11bHRpcGx5KVxue1xuICAgIHZhciBtYXRyaXggPSBbXG4gICAgICAgIHNjYWxlLCBzY2FsZSwgc2NhbGUsIDAsIDAsXG4gICAgICAgIHNjYWxlLCBzY2FsZSwgc2NhbGUsIDAsIDAsXG4gICAgICAgIHNjYWxlLCBzY2FsZSwgc2NhbGUsIDAsIDAsXG4gICAgICAgIDAsIDAsIDAsIDEsIDBcbiAgICBdO1xuXG4gICAgdGhpcy5fbG9hZE1hdHJpeChtYXRyaXgsIG11bHRpcGx5KTtcbn07XG4vL0FtZXJpY2FuaXplZCBhbGlhc1xuQ29sb3JNYXRyaXhGaWx0ZXIucHJvdG90eXBlLmdyYXlzY2FsZSA9IENvbG9yTWF0cml4RmlsdGVyLnByb3RvdHlwZS5ncmV5c2NhbGU7XG5cbi8qKlxuICogU2V0IHRoZSBibGFjayBhbmQgd2hpdGUgbWF0cmljZVxuICogTXVsdGlwbHkgdGhlIGN1cnJlbnQgbWF0cml4XG4gKlxuICogQHBhcmFtIG11bHRpcGx5IHtib29sZWFufSByZWZlciB0byAuX2xvYWRNYXRyaXgoKSBtZXRob2RcbiAqL1xuQ29sb3JNYXRyaXhGaWx0ZXIucHJvdG90eXBlLmJsYWNrQW5kV2hpdGUgPSBmdW5jdGlvbiAobXVsdGlwbHkpXG57XG4gICAgdmFyIG1hdHJpeCA9IFtcbiAgICAgICAgMC4zLCAwLjYsIDAuMSwgMCwgMCxcbiAgICAgICAgMC4zLCAwLjYsIDAuMSwgMCwgMCxcbiAgICAgICAgMC4zLCAwLjYsIDAuMSwgMCwgMCxcbiAgICAgICAgMCwgMCwgMCwgMSwgMFxuICAgIF07XG5cbiAgICB0aGlzLl9sb2FkTWF0cml4KG1hdHJpeCwgbXVsdGlwbHkpO1xufTtcblxuLyoqXG4gKiBTZXQgdGhlIGh1ZSBwcm9wZXJ0eSBvZiB0aGUgY29sb3JcbiAqXG4gKiBAcGFyYW0gcm90YXRpb24ge251bWJlcn0gaW4gZGVncmVlc1xuICogQHBhcmFtIG11bHRpcGx5IHtib29sZWFufSByZWZlciB0byAuX2xvYWRNYXRyaXgoKSBtZXRob2RcbiAqL1xuQ29sb3JNYXRyaXhGaWx0ZXIucHJvdG90eXBlLmh1ZSA9IGZ1bmN0aW9uIChyb3RhdGlvbiwgbXVsdGlwbHkpXG57XG4gICAgcm90YXRpb24gPSAocm90YXRpb24gfHwgMCkgLyAxODAgKiBNYXRoLlBJO1xuICAgIHZhciBjb3MgPSBNYXRoLmNvcyhyb3RhdGlvbiksXG4gICAgICAgIHNpbiA9IE1hdGguc2luKHJvdGF0aW9uKTtcblxuICAgIC8vIGx1bWluYW5jZVJlZCwgbHVtaW5hbmNlR3JlZW4sIGx1bWluYW5jZUJsdWVcbiAgICB2YXIgbHVtUiA9IDAuMjEzLCAvLyBvciAwLjMwODZcbiAgICAgICAgbHVtRyA9IDAuNzE1LCAvLyBvciAwLjYwOTRcbiAgICAgICAgbHVtQiA9IDAuMDcyOyAvLyBvciAwLjA4MjBcblxuICAgIHZhciBtYXRyaXggPSBbXG4gICAgICAgIGx1bVIgKyBjb3MgKiAoMSAtIGx1bVIpICsgc2luICogKC1sdW1SKSwgbHVtRyArIGNvcyAqICgtbHVtRykgKyBzaW4gKiAoLWx1bUcpLCBsdW1CICsgY29zICogKC1sdW1CKSArIHNpbiAqICgxIC0gbHVtQiksIDAsIDAsXG4gICAgICAgIGx1bVIgKyBjb3MgKiAoLWx1bVIpICsgc2luICogKDAuMTQzKSwgbHVtRyArIGNvcyAqICgxIC0gbHVtRykgKyBzaW4gKiAoMC4xNDApLCBsdW1CICsgY29zICogKC1sdW1CKSArIHNpbiAqICgtMC4yODMpLCAwLCAwLFxuICAgICAgICBsdW1SICsgY29zICogKC1sdW1SKSArIHNpbiAqICgtKDEgLSBsdW1SKSksIGx1bUcgKyBjb3MgKiAoLWx1bUcpICsgc2luICogKGx1bUcpLCBsdW1CICsgY29zICogKDEgLSBsdW1CKSArIHNpbiAqIChsdW1CKSwgMCwgMCxcbiAgICAgICAgMCwgMCwgMCwgMSwgMFxuICAgIF07XG5cbiAgICB0aGlzLl9sb2FkTWF0cml4KG1hdHJpeCwgbXVsdGlwbHkpO1xufTtcblxuXG4vKipcbiAqIFNldCB0aGUgY29udHJhc3QgbWF0cml4LCBpbmNyZWFzZSB0aGUgc2VwYXJhdGlvbiBiZXR3ZWVuIGRhcmsgYW5kIGJyaWdodFxuICogSW5jcmVhc2UgY29udHJhc3QgOiBzaGFkb3dzIGRhcmtlciBhbmQgaGlnaGxpZ2h0cyBicmlnaHRlclxuICogRGVjcmVhc2UgY29udHJhc3QgOiBicmluZyB0aGUgc2hhZG93cyB1cCBhbmQgdGhlIGhpZ2hsaWdodHMgZG93blxuICpcbiAqIEBwYXJhbSBhbW91bnQge251bWJlcn0gdmFsdWUgb2YgdGhlIGNvbnRyYXN0XG4gKiBAcGFyYW0gbXVsdGlwbHkge2Jvb2xlYW59IHJlZmVyIHRvIC5fbG9hZE1hdHJpeCgpIG1ldGhvZFxuICovXG5Db2xvck1hdHJpeEZpbHRlci5wcm90b3R5cGUuY29udHJhc3QgPSBmdW5jdGlvbiAoYW1vdW50LCBtdWx0aXBseSlcbntcbiAgICB2YXIgdiA9IChhbW91bnQgfHwgMCkgKyAxO1xuICAgIHZhciBvID0gLTEyOCAqICh2IC0gMSk7XG5cbiAgICB2YXIgbWF0cml4ID0gW1xuICAgICAgICB2LCAwLCAwLCAwLCBvLFxuICAgICAgICAwLCB2LCAwLCAwLCBvLFxuICAgICAgICAwLCAwLCB2LCAwLCBvLFxuICAgICAgICAwLCAwLCAwLCAxLCAwXG4gICAgXTtcblxuICAgIHRoaXMuX2xvYWRNYXRyaXgobWF0cml4LCBtdWx0aXBseSk7XG59O1xuXG4vKipcbiAqIFNldCB0aGUgc2F0dXJhdGlvbiBtYXRyaXgsIGluY3JlYXNlIHRoZSBzZXBhcmF0aW9uIGJldHdlZW4gY29sb3JzXG4gKiBJbmNyZWFzZSBzYXR1cmF0aW9uIDogaW5jcmVhc2UgY29udHJhc3QsIGJyaWdodG5lc3MsIGFuZCBzaGFycG5lc3NcbiAqXG4gKiBAcGFyYW0gYW1vdW50IHtudW1iZXJ9XG4gKiBAcGFyYW0gbXVsdGlwbHkge2Jvb2xlYW59IHJlZmVyIHRvIC5fbG9hZE1hdHJpeCgpIG1ldGhvZFxuICovXG5Db2xvck1hdHJpeEZpbHRlci5wcm90b3R5cGUuc2F0dXJhdGUgPSBmdW5jdGlvbiAoYW1vdW50LCBtdWx0aXBseSlcbntcbiAgICB2YXIgeCA9IChhbW91bnQgfHwgMCkgKiAyIC8gMyArIDE7XG4gICAgdmFyIHkgPSAoKHggLSAxKSAqIC0wLjUpO1xuXG4gICAgdmFyIG1hdHJpeCA9IFtcbiAgICAgICAgeCwgeSwgeSwgMCwgMCxcbiAgICAgICAgeSwgeCwgeSwgMCwgMCxcbiAgICAgICAgeSwgeSwgeCwgMCwgMCxcbiAgICAgICAgMCwgMCwgMCwgMSwgMFxuICAgIF07XG5cbiAgICB0aGlzLl9sb2FkTWF0cml4KG1hdHJpeCwgbXVsdGlwbHkpO1xufTtcblxuLyoqXG4gKiBEZXNhdHVyYXRlIGltYWdlIChyZW1vdmUgY29sb3IpXG4gKlxuICogQ2FsbCB0aGUgc2F0dXJhdGUgZnVuY3Rpb25cbiAqXG4gKiBAcGFyYW0gbXVsdGlwbHkge2Jvb2xlYW59IHJlZmVyIHRvIC5fbG9hZE1hdHJpeCgpIG1ldGhvZFxuICovXG5Db2xvck1hdHJpeEZpbHRlci5wcm90b3R5cGUuZGVzYXR1cmF0ZSA9IGZ1bmN0aW9uIChtdWx0aXBseSkgLy8ganNoaW50IHVudXNlZDpmYWxzZVxue1xuICAgIHRoaXMuc2F0dXJhdGUoLTEpO1xufTtcblxuLyoqXG4gKiBOZWdhdGl2ZSBpbWFnZSAoaW52ZXJzZSBvZiBjbGFzc2ljIHJnYiBtYXRyaXgpXG4gKlxuICogQHBhcmFtIG11bHRpcGx5IHtib29sZWFufSByZWZlciB0byAuX2xvYWRNYXRyaXgoKSBtZXRob2RcbiAqL1xuQ29sb3JNYXRyaXhGaWx0ZXIucHJvdG90eXBlLm5lZ2F0aXZlID0gZnVuY3Rpb24gKG11bHRpcGx5KVxue1xuICAgIHZhciBtYXRyaXggPSBbXG4gICAgICAgIDAsIDEsIDEsIDAsIDAsXG4gICAgICAgIDEsIDAsIDEsIDAsIDAsXG4gICAgICAgIDEsIDEsIDAsIDAsIDAsXG4gICAgICAgIDAsIDAsIDAsIDEsIDBcbiAgICBdO1xuXG4gICAgdGhpcy5fbG9hZE1hdHJpeChtYXRyaXgsIG11bHRpcGx5KTtcbn07XG5cbi8qKlxuICogU2VwaWEgaW1hZ2VcbiAqXG4gKiBAcGFyYW0gbXVsdGlwbHkge2Jvb2xlYW59IHJlZmVyIHRvIC5fbG9hZE1hdHJpeCgpIG1ldGhvZFxuICovXG5Db2xvck1hdHJpeEZpbHRlci5wcm90b3R5cGUuc2VwaWEgPSBmdW5jdGlvbiAobXVsdGlwbHkpXG57XG4gICAgdmFyIG1hdHJpeCA9IFtcbiAgICAgICAgMC4zOTMsIDAuNzY4OTk5OSwgMC4xODg5OTk5OSwgMCwgMCxcbiAgICAgICAgMC4zNDksIDAuNjg1OTk5OSwgMC4xNjc5OTk5OSwgMCwgMCxcbiAgICAgICAgMC4yNzIsIDAuNTMzOTk5OSwgMC4xMzA5OTk5OSwgMCwgMCxcbiAgICAgICAgMCwgMCwgMCwgMSwgMFxuICAgIF07XG5cbiAgICB0aGlzLl9sb2FkTWF0cml4KG1hdHJpeCwgbXVsdGlwbHkpO1xufTtcblxuLyoqXG4gKiBDb2xvciBtb3Rpb24gcGljdHVyZSBwcm9jZXNzIGludmVudGVkIGluIDE5MTYgKHRoYW5rcyBEb21pbmljIFN6YWJsZXdza2kpXG4gKlxuICogQHBhcmFtIG11bHRpcGx5IHtib29sZWFufSByZWZlciB0byAuX2xvYWRNYXRyaXgoKSBtZXRob2RcbiAqL1xuQ29sb3JNYXRyaXhGaWx0ZXIucHJvdG90eXBlLnRlY2huaWNvbG9yID0gZnVuY3Rpb24gKG11bHRpcGx5KVxue1xuICAgIHZhciBtYXRyaXggPSBbXG4gICAgICAgIDEuOTEyNTI3Nzg5MTQ1NjA4MywgLTAuODU0NTM0NDk3Njk1MTY0NSwgLTAuMDkxNTU1MDg0ODI3NTU1ODUsIDAsIDExLjc5MzYwMzQzNDM3NzMzNyxcbiAgICAgICAgLTAuMzA4NzgzMzM4NTkyODA5NywgMS43NjU4OTA4NTU1NDU4NDI4LCAtMC4xMDYwMTc0MzA3NDcyMjI0NSwgMCwgLTcwLjM1MjA1MTYxNDYxMzk4LFxuICAgICAgICAtMC4yMzExMDMzNzc1NDg2MTYsIC0wLjc1MDE4OTkxOTc0NDAyMTIsIDEuODQ3NTk3ODE2MTA4MTg5LCAwLCAzMC45NTA5NDA4Njk0OTExMzgsXG4gICAgICAgIDAsIDAsIDAsIDEsIDBcbiAgICBdO1xuXG4gICAgdGhpcy5fbG9hZE1hdHJpeChtYXRyaXgsIG11bHRpcGx5KTtcbn07XG5cbi8qKlxuICogUG9sYXJvaWQgZmlsdGVyXG4gKlxuICogQHBhcmFtIG11bHRpcGx5IHtib29sZWFufSByZWZlciB0byAuX2xvYWRNYXRyaXgoKSBtZXRob2RcbiAqL1xuQ29sb3JNYXRyaXhGaWx0ZXIucHJvdG90eXBlLnBvbGFyb2lkID0gZnVuY3Rpb24gKG11bHRpcGx5KVxue1xuICAgIHZhciBtYXRyaXggPSBbXG4gICAgICAgIDEuNDM4LCAtMC4wNjIsIC0wLjA2MiwgMCwgMCxcbiAgICAgICAgLTAuMTIyLCAxLjM3OCwgLTAuMTIyLCAwLCAwLFxuICAgICAgICAtMC4wMTYsIC0wLjAxNiwgMS40ODMsIDAsIDAsXG4gICAgICAgIDAsIDAsIDAsIDEsIDBcbiAgICBdO1xuXG4gICAgdGhpcy5fbG9hZE1hdHJpeChtYXRyaXgsIG11bHRpcGx5KTtcbn07XG5cbi8qKlxuICogRmlsdGVyIHdobyB0cmFuc2Zvcm1zIDogUmVkIC0+IEJsdWUgYW5kIEJsdWUgLT4gUmVkXG4gKlxuICogQHBhcmFtIG11bHRpcGx5IHtib29sZWFufSByZWZlciB0byAuX2xvYWRNYXRyaXgoKSBtZXRob2RcbiAqL1xuQ29sb3JNYXRyaXhGaWx0ZXIucHJvdG90eXBlLnRvQkdSID0gZnVuY3Rpb24gKG11bHRpcGx5KVxue1xuICAgIHZhciBtYXRyaXggPSBbXG4gICAgICAgIDAsIDAsIDEsIDAsIDAsXG4gICAgICAgIDAsIDEsIDAsIDAsIDAsXG4gICAgICAgIDEsIDAsIDAsIDAsIDAsXG4gICAgICAgIDAsIDAsIDAsIDEsIDBcbiAgICBdO1xuXG4gICAgdGhpcy5fbG9hZE1hdHJpeChtYXRyaXgsIG11bHRpcGx5KTtcbn07XG5cbi8qKlxuICogQ29sb3IgcmV2ZXJzYWwgZmlsbSBpbnRyb2R1Y2VkIGJ5IEVhc3RtYW4gS29kYWsgaW4gMTkzNS4gKHRoYW5rcyBEb21pbmljIFN6YWJsZXdza2kpXG4gKlxuICogQHBhcmFtIG11bHRpcGx5IHtib29sZWFufSByZWZlciB0byAuX2xvYWRNYXRyaXgoKSBtZXRob2RcbiAqL1xuQ29sb3JNYXRyaXhGaWx0ZXIucHJvdG90eXBlLmtvZGFjaHJvbWUgPSBmdW5jdGlvbiAobXVsdGlwbHkpXG57XG4gICAgdmFyIG1hdHJpeCA9IFtcbiAgICAgICAgMS4xMjg1NTgyMzk2NTkzNTI1LCAtMC4zOTY3MzgyMjgzNjAxMzQ4LCAtMC4wMzk5MjU1OTE3MjkyMTc5MywgMCwgNjMuNzI5NTg3NjIxOTY1MDIsXG4gICAgICAgIC0wLjE2NDA0MzM5OTYyMjQ0NjE2LCAxLjA4MzUyNTE1NjYyOTEzMDQsIC0wLjA1NDk4ODA1MTE1NjMzMTMyLCAwLCAyNC43MzI0MDc4OTY3MDYyMDMsXG4gICAgICAgIC0wLjE2Nzg2MDEwNzA2MTU1NzYzLCAtMC41NjAzNDE2Mjc3Njk1MjQ4LCAxLjYwMTQ4NTA3NjE5NjQ5NDMsIDAsIDM1LjYyOTgyODA3NDYwOTQ2LFxuICAgICAgICAwLCAwLCAwLCAxLCAwXG4gICAgXTtcblxuICAgIHRoaXMuX2xvYWRNYXRyaXgobWF0cml4LCBtdWx0aXBseSk7XG59O1xuXG4vKipcbiAqIEJyb3duIGRlbGljaW91cyBicm93bmkgZmlsdGVyICh0aGFua3MgRG9taW5pYyBTemFibGV3c2tpKVxuICpcbiAqIEBwYXJhbSBtdWx0aXBseSB7Ym9vbGVhbn0gcmVmZXIgdG8gLl9sb2FkTWF0cml4KCkgbWV0aG9kXG4gKi9cbkNvbG9yTWF0cml4RmlsdGVyLnByb3RvdHlwZS5icm93bmkgPSBmdW5jdGlvbiAobXVsdGlwbHkpXG57XG4gICAgdmFyIG1hdHJpeCA9IFtcbiAgICAgICAgMC41OTk3MDIzNDk4MTU5NzE1LCAwLjM0NTUzMjQzMDQ4MzkxMjYzLCAtMC4yNzA4Mjk4Njc0NTM4MDQyLCAwLCA0Ny40MzE5Mjg1NTYwMDg3MyxcbiAgICAgICAgLTAuMDM3NzAzMjQ5ODM3NzgzMTU3LCAwLjg2MDk1Nzc1ODc5OTI2NDEsIDAuMTUwNTk1NTIzODg0NTk5MTMsIDAsIC0zNi45Njg0MTQ5ODMxOTEyNyxcbiAgICAgICAgMC4yNDExMzYzNTEyODE1MzMzNSwgLTAuMDc0NDEwMzc5MDg0MjI0OTIsIDAuNDQ5NzIxODIwNjQ4NzcxNTMsIDAsIC03LjU2MjA3NTI3NzU5MTI4MyxcbiAgICAgICAgMCwgMCwgMCwgMSwgMFxuICAgIF07XG5cbiAgICB0aGlzLl9sb2FkTWF0cml4KG1hdHJpeCwgbXVsdGlwbHkpO1xufTtcblxuLypcbiAqIFZpbnRhZ2UgZmlsdGVyICh0aGFua3MgRG9taW5pYyBTemFibGV3c2tpKVxuICpcbiAqIEBwYXJhbSBtdWx0aXBseSB7Ym9vbGVhbn0gcmVmZXIgdG8gLl9sb2FkTWF0cml4KCkgbWV0aG9kXG4gKi9cbkNvbG9yTWF0cml4RmlsdGVyLnByb3RvdHlwZS52aW50YWdlID0gZnVuY3Rpb24gKG11bHRpcGx5KVxue1xuICAgIHZhciBtYXRyaXggPSBbXG4gICAgICAgIDAuNjI3OTM0NTYzNTYwNTk5NCwgMC4zMjAyMTgzNDIwODE5MzY3LCAtMC4wMzk2NTQwODIxMTMxMjQ1MywgMCwgOS42NTEyODU4MzUyOTQxMjMsXG4gICAgICAgIDAuMDI1NzgzOTc3MDQ4MDg4NjgsIDAuNjQ0MTE4ODY0NDM3NDc3MSwgMC4wMzI1OTEyNzYxNjE0OTI5NCwgMCwgNy40NjI4MjkxNzY0NzA1OTEsXG4gICAgICAgIDAuMDQ2NjA1NTU1Njc4MjcxOSwgLTAuMDg1MTIzMjk4NzI0Nzg5MSwgMC41MjQxNjQ4MDE4NzAwNDY1LCAwLCA1LjE1OTE5MDU4ODIzNTI5NixcbiAgICAgICAgMCwgMCwgMCwgMSwgMFxuICAgIF07XG5cbiAgICB0aGlzLl9sb2FkTWF0cml4KG1hdHJpeCwgbXVsdGlwbHkpO1xufTtcblxuLypcbiAqIFdlIGRvbid0IGtub3cgZXhhY3RseSB3aGF0IGl0IGRvZXMsIGtpbmQgb2YgZ3JhZGllbnQgbWFwLCBidXQgZnVubnkgdG8gcGxheSB3aXRoIVxuICpcbiAqIEBwYXJhbSBkZXNhdHVyYXRpb24ge251bWJlcn1cbiAqIEBwYXJhbSB0b25lZCB7bnVtYmVyfVxuICogQHBhcmFtIGxpZ2h0Q29sb3Ige3N0cmluZ30gKGV4YW1wbGUgOiBcIjB4RkZFNTgwXCIpXG4gKiBAcGFyYW0gZGFya0NvbG9yIHtzdHJpbmd9ICAoZXhhbXBsZSA6IFwiMHhGRkU1ODBcIilcbiAqXG4gKiBAcGFyYW0gbXVsdGlwbHkge2Jvb2xlYW59IHJlZmVyIHRvIC5fbG9hZE1hdHJpeCgpIG1ldGhvZFxuICovXG5Db2xvck1hdHJpeEZpbHRlci5wcm90b3R5cGUuY29sb3JUb25lID0gZnVuY3Rpb24gKGRlc2F0dXJhdGlvbiwgdG9uZWQsIGxpZ2h0Q29sb3IsIGRhcmtDb2xvciwgbXVsdGlwbHkpXG57XG4gICAgZGVzYXR1cmF0aW9uID0gZGVzYXR1cmF0aW9uIHx8IDAuMjtcbiAgICB0b25lZCA9IHRvbmVkIHx8IDAuMTU7XG4gICAgbGlnaHRDb2xvciA9IGxpZ2h0Q29sb3IgfHwgMHhGRkU1ODA7XG4gICAgZGFya0NvbG9yID0gZGFya0NvbG9yIHx8IDB4MzM4MDAwO1xuXG4gICAgdmFyIGxSID0gKChsaWdodENvbG9yID4+IDE2KSAmIDB4RkYpIC8gMjU1O1xuICAgIHZhciBsRyA9ICgobGlnaHRDb2xvciA+PiA4KSAmIDB4RkYpIC8gMjU1O1xuICAgIHZhciBsQiA9IChsaWdodENvbG9yICYgMHhGRikgLyAyNTU7XG5cbiAgICB2YXIgZFIgPSAoKGRhcmtDb2xvciA+PiAxNikgJiAweEZGKSAvIDI1NTtcbiAgICB2YXIgZEcgPSAoKGRhcmtDb2xvciA+PiA4KSAmIDB4RkYpIC8gMjU1O1xuICAgIHZhciBkQiA9IChkYXJrQ29sb3IgJiAweEZGKSAvIDI1NTtcblxuICAgIHZhciBtYXRyaXggPSBbXG4gICAgICAgIDAuMywgMC41OSwgMC4xMSwgMCwgMCxcbiAgICAgICAgbFIsIGxHLCBsQiwgZGVzYXR1cmF0aW9uLCAwLFxuICAgICAgICBkUiwgZEcsIGRCLCB0b25lZCwgMCxcbiAgICAgICAgbFIgLSBkUiwgbEcgLSBkRywgbEIgLSBkQiwgMCwgMFxuICAgIF07XG5cbiAgICB0aGlzLl9sb2FkTWF0cml4KG1hdHJpeCwgbXVsdGlwbHkpO1xufTtcblxuLypcbiAqIE5pZ2h0IGVmZmVjdFxuICpcbiAqIEBwYXJhbSBpbnRlbnNpdHkge251bWJlcn1cbiAqIEBwYXJhbSBtdWx0aXBseSB7Ym9vbGVhbn0gcmVmZXIgdG8gLl9sb2FkTWF0cml4KCkgbWV0aG9kXG4gKi9cbkNvbG9yTWF0cml4RmlsdGVyLnByb3RvdHlwZS5uaWdodCA9IGZ1bmN0aW9uIChpbnRlbnNpdHksIG11bHRpcGx5KVxue1xuICAgIGludGVuc2l0eSA9IGludGVuc2l0eSB8fCAwLjE7XG4gICAgdmFyIG1hdHJpeCA9IFtcbiAgICAgICAgaW50ZW5zaXR5ICogKCAtMi4wKSwgLWludGVuc2l0eSwgMCwgMCwgMCxcbiAgICAgICAgLWludGVuc2l0eSwgMCwgaW50ZW5zaXR5LCAwLCAwLFxuICAgICAgICAwLCBpbnRlbnNpdHksIGludGVuc2l0eSAqIDIuMCwgMCwgMCxcbiAgICAgICAgMCwgMCwgMCwgMSwgMFxuICAgIF07XG5cbiAgICB0aGlzLl9sb2FkTWF0cml4KG1hdHJpeCwgbXVsdGlwbHkpO1xufTtcblxuXG4vKlxuICogUHJlZGF0b3IgZWZmZWN0XG4gKlxuICogRXJhc2UgdGhlIGN1cnJlbnQgbWF0cml4IGJ5IHNldHRpbmcgYSBuZXcgaW5kZXBlbnQgb25lXG4gKlxuICogQHBhcmFtIGFtb3VudCB7bnVtYmVyfSBob3cgbXVjaCB0aGUgcHJlZGF0b3IgZmVlbHMgaGlzIGZ1dHVyZSB2aWN0aW1cbiAqIEBwYXJhbSBtdWx0aXBseSB7Ym9vbGVhbn0gcmVmZXIgdG8gLl9sb2FkTWF0cml4KCkgbWV0aG9kXG4gKi9cbkNvbG9yTWF0cml4RmlsdGVyLnByb3RvdHlwZS5wcmVkYXRvciA9IGZ1bmN0aW9uIChhbW91bnQsIG11bHRpcGx5KVxue1xuICAgIHZhciBtYXRyaXggPSBbXG4gICAgICAgIDExLjIyNDEzMDYzMDQ5MzE2NCAqIGFtb3VudCwgLTQuNzk0NDg2OTk5NTExNzE5ICogYW1vdW50LCAtMi44NzQ2MTE4NTQ1NTMyMjI3ICogYW1vdW50LCAwICogYW1vdW50LCAwLjQwMzQyNDM4MjIwOTc3NzgzICogYW1vdW50LFxuICAgICAgICAtMy42MzMwNjk3NTM2NDY4NTA2ICogYW1vdW50LCA5LjE5MzE1NzE5NjA0NDkyMiAqIGFtb3VudCwgLTIuOTUxODEwODM2NzkxOTkyICogYW1vdW50LCAwICogYW1vdW50LCAtMS4zMTYxMzUwNDg4NjYyNzIgKiBhbW91bnQsXG4gICAgICAgIC0zLjIxODQxOTc5MDI2Nzk0NDMgKiBhbW91bnQsIC00LjIzNzUwMzA1MTc1NzgxMjUgKiBhbW91bnQsIDcuNDc2NDQ4MDU5MDgyMDMxICogYW1vdW50LCAwICogYW1vdW50LCAwLjgwNDQ0NTkyMjM3NDcyNTMgKiBhbW91bnQsXG4gICAgICAgIDAsIDAsIDAsIDEsIDBcbiAgICBdO1xuXG4gICAgdGhpcy5fbG9hZE1hdHJpeChtYXRyaXgsIG11bHRpcGx5KTtcbn07XG5cbi8qXG4gKiBMU0QgZWZmZWN0XG4gKlxuICogTXVsdGlwbHkgdGhlIGN1cnJlbnQgbWF0cml4XG4gKlxuICogQHBhcmFtIGFtb3VudCB7bnVtYmVyfSBIb3cgY3JhenkgaXMgeW91ciBlZmZlY3RcbiAqIEBwYXJhbSBtdWx0aXBseSB7Ym9vbGVhbn0gcmVmZXIgdG8gLl9sb2FkTWF0cml4KCkgbWV0aG9kXG4gKi9cbkNvbG9yTWF0cml4RmlsdGVyLnByb3RvdHlwZS5sc2QgPSBmdW5jdGlvbiAobXVsdGlwbHkpXG57XG4gICAgdmFyIG1hdHJpeCA9IFtcbiAgICAgICAgMiwgLTAuNCwgMC41LCAwLCAwLFxuICAgICAgICAtMC41LCAyLCAtMC40LCAwLCAwLFxuICAgICAgICAtMC40LCAtMC41LCAzLCAwLCAwLFxuICAgICAgICAwLCAwLCAwLCAxLCAwXG4gICAgXTtcblxuICAgIHRoaXMuX2xvYWRNYXRyaXgobWF0cml4LCBtdWx0aXBseSk7XG59O1xuXG4vKlxuICogRXJhc2UgdGhlIGN1cnJlbnQgbWF0cml4IGJ5IHNldHRpbmcgdGhlIGRlZmF1bHQgb25lXG4gKlxuICovXG5Db2xvck1hdHJpeEZpbHRlci5wcm90b3R5cGUucmVzZXQgPSBmdW5jdGlvbiAoKVxue1xuICAgIHZhciBtYXRyaXggPSBbXG4gICAgICAgIDEsIDAsIDAsIDAsIDAsXG4gICAgICAgIDAsIDEsIDAsIDAsIDAsXG4gICAgICAgIDAsIDAsIDEsIDAsIDAsXG4gICAgICAgIDAsIDAsIDAsIDEsIDBcbiAgICBdO1xuXG4gICAgdGhpcy5fbG9hZE1hdHJpeChtYXRyaXgsIGZhbHNlKTtcbn07XG5cblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoQ29sb3JNYXRyaXhGaWx0ZXIucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgbWF0cml4IG9mIHRoZSBjb2xvciBtYXRyaXggZmlsdGVyXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJbXX1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLkNvbG9yTWF0cml4RmlsdGVyI1xuICAgICAqIEBkZWZhdWx0IFsxLCAwLCAwLCAwLCAwLCAwLCAxLCAwLCAwLCAwLCAwLCAwLCAxLCAwLCAwLCAwLCAwLCAwLCAxLCAwXVxuICAgICAqL1xuICAgIG1hdHJpeDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVuaWZvcm1zLm0udmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLm0udmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi8uLi9jb3JlJyk7XG4vLyBAc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9zdWJzdGFjay9icmZzL2lzc3Vlcy8yNVxuXG5cbi8qKlxuICogVGhpcyBsb3dlcnMgdGhlIGNvbG9yIGRlcHRoIG9mIHlvdXIgaW1hZ2UgYnkgdGhlIGdpdmVuIGFtb3VudCwgcHJvZHVjaW5nIGFuIGltYWdlIHdpdGggYSBzbWFsbGVyIHBhbGV0dGUuXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLkFic3RyYWN0RmlsdGVyXG4gKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzXG4gKi9cbmZ1bmN0aW9uIENvbG9yU3RlcEZpbHRlcigpXG57XG4gICAgY29yZS5BYnN0cmFjdEZpbHRlci5jYWxsKHRoaXMsXG4gICAgICAgIC8vIHZlcnRleCBzaGFkZXJcbiAgICAgICAgbnVsbCxcbiAgICAgICAgLy8gZnJhZ21lbnQgc2hhZGVyXG4gICAgICAgIFwicHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XFxuXFxudmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7XFxuXFxudW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXI7XFxudW5pZm9ybSBmbG9hdCBzdGVwO1xcblxcbnZvaWQgbWFpbih2b2lkKVxcbntcXG4gICAgdmVjNCBjb2xvciA9IHRleHR1cmUyRCh1U2FtcGxlciwgdlRleHR1cmVDb29yZCk7XFxuXFxuICAgIGNvbG9yID0gZmxvb3IoY29sb3IgKiBzdGVwKSAvIHN0ZXA7XFxuXFxuICAgIGdsX0ZyYWdDb2xvciA9IGNvbG9yO1xcbn1cXG5cIixcbiAgICAgICAgLy8gY3VzdG9tIHVuaWZvcm1zXG4gICAgICAgIHtcbiAgICAgICAgICAgIHN0ZXA6IHsgdHlwZTogJzFmJywgdmFsdWU6IDUgfVxuICAgICAgICB9XG4gICAgKTtcbn1cblxuQ29sb3JTdGVwRmlsdGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoY29yZS5BYnN0cmFjdEZpbHRlci5wcm90b3R5cGUpO1xuQ29sb3JTdGVwRmlsdGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IENvbG9yU3RlcEZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gQ29sb3JTdGVwRmlsdGVyO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhDb2xvclN0ZXBGaWx0ZXIucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogVGhlIG51bWJlciBvZiBzdGVwcyB0byByZWR1Y2UgdGhlIHBhbGV0dGUgYnkuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5Db2xvclN0ZXBGaWx0ZXIjXG4gICAgICovXG4gICAgc3RlcDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVuaWZvcm1zLnN0ZXAudmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLnN0ZXAudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi8uLi9jb3JlJyk7XG4vLyBAc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9zdWJzdGFjay9icmZzL2lzc3Vlcy8yNVxuXG5cbi8qKlxuICogVGhlIENvbnZvbHV0aW9uRmlsdGVyIGNsYXNzIGFwcGxpZXMgYSBtYXRyaXggY29udm9sdXRpb24gZmlsdGVyIGVmZmVjdC5cbiAqIEEgY29udm9sdXRpb24gY29tYmluZXMgcGl4ZWxzIGluIHRoZSBpbnB1dCBpbWFnZSB3aXRoIG5laWdoYm9yaW5nIHBpeGVscyB0byBwcm9kdWNlIGEgbmV3IGltYWdlLlxuICogQSB3aWRlIHZhcmlldHkgb2YgaW1hZ2UgZWZmZWN0cyBjYW4gYmUgYWNoaWV2ZWQgdGhyb3VnaCBjb252b2x1dGlvbnMsIGluY2x1ZGluZyBibHVycmluZywgZWRnZVxuICogZGV0ZWN0aW9uLCBzaGFycGVuaW5nLCBlbWJvc3NpbmcsIGFuZCBiZXZlbGluZy4gVGhlIG1hdHJpeCBzaG91bGQgYmUgc3BlY2lmaWVkIGFzIGEgOSBwb2ludCBBcnJheS5cbiAqIFNlZSBodHRwOi8vZG9jcy5naW1wLm9yZy9lbi9wbHVnLWluLWNvbnZtYXRyaXguaHRtbCBmb3IgbW9yZSBpbmZvLlxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5BYnN0cmFjdEZpbHRlclxuICogQG1lbWJlcm9mIFBJWEkuZmlsdGVyc1xuICogQHBhcmFtIG1hdHJpeCB7bnVtYmVyW119IEFuIGFycmF5IG9mIHZhbHVlcyB1c2VkIGZvciBtYXRyaXggdHJhbnNmb3JtYXRpb24uIFNwZWNpZmllZCBhcyBhIDkgcG9pbnQgQXJyYXkuXG4gKiBAcGFyYW0gd2lkdGgge251bWJlcn0gV2lkdGggb2YgdGhlIG9iamVjdCB5b3UgYXJlIHRyYW5zZm9ybWluZ1xuICogQHBhcmFtIGhlaWdodCB7bnVtYmVyfSBIZWlnaHQgb2YgdGhlIG9iamVjdCB5b3UgYXJlIHRyYW5zZm9ybWluZ1xuICovXG5mdW5jdGlvbiBDb252b2x1dGlvbkZpbHRlcihtYXRyaXgsIHdpZHRoLCBoZWlnaHQpXG57XG4gICAgY29yZS5BYnN0cmFjdEZpbHRlci5jYWxsKHRoaXMsXG4gICAgICAgIC8vIHZlcnRleCBzaGFkZXJcbiAgICAgICAgbnVsbCxcbiAgICAgICAgLy8gZnJhZ21lbnQgc2hhZGVyXG4gICAgICAgIFwicHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XFxuXFxudmFyeWluZyBtZWRpdW1wIHZlYzIgdlRleHR1cmVDb29yZDtcXG5cXG51bmlmb3JtIHNhbXBsZXIyRCB1U2FtcGxlcjtcXG51bmlmb3JtIHZlYzIgdGV4ZWxTaXplO1xcbnVuaWZvcm0gZmxvYXQgbWF0cml4WzldO1xcblxcbnZvaWQgbWFpbih2b2lkKVxcbntcXG4gICB2ZWM0IGMxMSA9IHRleHR1cmUyRCh1U2FtcGxlciwgdlRleHR1cmVDb29yZCAtIHRleGVsU2l6ZSk7IC8vIHRvcCBsZWZ0XFxuICAgdmVjNCBjMTIgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZlYzIodlRleHR1cmVDb29yZC54LCB2VGV4dHVyZUNvb3JkLnkgLSB0ZXhlbFNpemUueSkpOyAvLyB0b3AgY2VudGVyXFxuICAgdmVjNCBjMTMgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZlYzIodlRleHR1cmVDb29yZC54ICsgdGV4ZWxTaXplLngsIHZUZXh0dXJlQ29vcmQueSAtIHRleGVsU2l6ZS55KSk7IC8vIHRvcCByaWdodFxcblxcbiAgIHZlYzQgYzIxID0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2ZWMyKHZUZXh0dXJlQ29vcmQueCAtIHRleGVsU2l6ZS54LCB2VGV4dHVyZUNvb3JkLnkpKTsgLy8gbWlkIGxlZnRcXG4gICB2ZWM0IGMyMiA9IHRleHR1cmUyRCh1U2FtcGxlciwgdlRleHR1cmVDb29yZCk7IC8vIG1pZCBjZW50ZXJcXG4gICB2ZWM0IGMyMyA9IHRleHR1cmUyRCh1U2FtcGxlciwgdmVjMih2VGV4dHVyZUNvb3JkLnggKyB0ZXhlbFNpemUueCwgdlRleHR1cmVDb29yZC55KSk7IC8vIG1pZCByaWdodFxcblxcbiAgIHZlYzQgYzMxID0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2ZWMyKHZUZXh0dXJlQ29vcmQueCAtIHRleGVsU2l6ZS54LCB2VGV4dHVyZUNvb3JkLnkgKyB0ZXhlbFNpemUueSkpOyAvLyBib3R0b20gbGVmdFxcbiAgIHZlYzQgYzMyID0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2ZWMyKHZUZXh0dXJlQ29vcmQueCwgdlRleHR1cmVDb29yZC55ICsgdGV4ZWxTaXplLnkpKTsgLy8gYm90dG9tIGNlbnRlclxcbiAgIHZlYzQgYzMzID0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2VGV4dHVyZUNvb3JkICsgdGV4ZWxTaXplKTsgLy8gYm90dG9tIHJpZ2h0XFxuXFxuICAgZ2xfRnJhZ0NvbG9yID1cXG4gICAgICAgYzExICogbWF0cml4WzBdICsgYzEyICogbWF0cml4WzFdICsgYzEzICogbWF0cml4WzJdICtcXG4gICAgICAgYzIxICogbWF0cml4WzNdICsgYzIyICogbWF0cml4WzRdICsgYzIzICogbWF0cml4WzVdICtcXG4gICAgICAgYzMxICogbWF0cml4WzZdICsgYzMyICogbWF0cml4WzddICsgYzMzICogbWF0cml4WzhdO1xcblxcbiAgIGdsX0ZyYWdDb2xvci5hID0gYzIyLmE7XFxufVxcblwiLFxuICAgICAgICAvLyBjdXN0b20gdW5pZm9ybXNcbiAgICAgICAge1xuICAgICAgICAgICAgbWF0cml4OiAgICAgeyB0eXBlOiAnMWZ2JywgdmFsdWU6IG5ldyBGbG9hdDMyQXJyYXkobWF0cml4KSB9LFxuICAgICAgICAgICAgdGV4ZWxTaXplOiAgeyB0eXBlOiAndjInLCB2YWx1ZTogeyB4OiAxIC8gd2lkdGgsIHk6IDEgLyBoZWlnaHQgfSB9XG4gICAgICAgIH1cbiAgICApO1xufVxuXG5Db252b2x1dGlvbkZpbHRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuQWJzdHJhY3RGaWx0ZXIucHJvdG90eXBlKTtcbkNvbnZvbHV0aW9uRmlsdGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IENvbnZvbHV0aW9uRmlsdGVyO1xubW9kdWxlLmV4cG9ydHMgPSBDb252b2x1dGlvbkZpbHRlcjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoQ29udm9sdXRpb25GaWx0ZXIucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogQW4gYXJyYXkgb2YgdmFsdWVzIHVzZWQgZm9yIG1hdHJpeCB0cmFuc2Zvcm1hdGlvbi4gU3BlY2lmaWVkIGFzIGEgOSBwb2ludCBBcnJheS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcltdfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuQ29udm9sdXRpb25GaWx0ZXIjXG4gICAgICovXG4gICAgbWF0cml4OiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudW5pZm9ybXMubWF0cml4LnZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy5tYXRyaXgudmFsdWUgPSBuZXcgRmxvYXQzMkFycmF5KHZhbHVlKTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBXaWR0aCBvZiB0aGUgb2JqZWN0IHlvdSBhcmUgdHJhbnNmb3JtaW5nXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5Db252b2x1dGlvbkZpbHRlciNcbiAgICAgKi9cbiAgICB3aWR0aDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiAxL3RoaXMudW5pZm9ybXMudGV4ZWxTaXplLnZhbHVlLng7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLnRleGVsU2l6ZS52YWx1ZS54ID0gMS92YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBIZWlnaHQgb2YgdGhlIG9iamVjdCB5b3UgYXJlIHRyYW5zZm9ybWluZ1xuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuQ29udm9sdXRpb25GaWx0ZXIjXG4gICAgICovXG4gICAgaGVpZ2h0OiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIDEvdGhpcy51bmlmb3Jtcy50ZXhlbFNpemUudmFsdWUueTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudW5pZm9ybXMudGV4ZWxTaXplLnZhbHVlLnkgPSAxL3ZhbHVlO1xuICAgICAgICB9XG4gICAgfVxufSk7XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uLy4uL2NvcmUnKTtcbi8vIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL3N1YnN0YWNrL2JyZnMvaXNzdWVzLzI1XG5cblxuLyoqXG4gKiBBIENyb3NzIEhhdGNoIGVmZmVjdCBmaWx0ZXIuXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLkFic3RyYWN0RmlsdGVyXG4gKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzXG4gKi9cbmZ1bmN0aW9uIENyb3NzSGF0Y2hGaWx0ZXIoKVxue1xuICAgIGNvcmUuQWJzdHJhY3RGaWx0ZXIuY2FsbCh0aGlzLFxuICAgICAgICAvLyB2ZXJ0ZXggc2hhZGVyXG4gICAgICAgIG51bGwsXG4gICAgICAgIC8vIGZyYWdtZW50IHNoYWRlclxuICAgICAgICBcInByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xcblxcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xcblxcbnVuaWZvcm0gc2FtcGxlcjJEIHVTYW1wbGVyO1xcblxcbnZvaWQgbWFpbih2b2lkKVxcbntcXG4gICAgZmxvYXQgbHVtID0gbGVuZ3RoKHRleHR1cmUyRCh1U2FtcGxlciwgdlRleHR1cmVDb29yZC54eSkucmdiKTtcXG5cXG4gICAgZ2xfRnJhZ0NvbG9yID0gdmVjNCgxLjAsIDEuMCwgMS4wLCAxLjApO1xcblxcbiAgICBpZiAobHVtIDwgMS4wMClcXG4gICAge1xcbiAgICAgICAgaWYgKG1vZChnbF9GcmFnQ29vcmQueCArIGdsX0ZyYWdDb29yZC55LCAxMC4wKSA9PSAwLjApXFxuICAgICAgICB7XFxuICAgICAgICAgICAgZ2xfRnJhZ0NvbG9yID0gdmVjNCgwLjAsIDAuMCwgMC4wLCAxLjApO1xcbiAgICAgICAgfVxcbiAgICB9XFxuXFxuICAgIGlmIChsdW0gPCAwLjc1KVxcbiAgICB7XFxuICAgICAgICBpZiAobW9kKGdsX0ZyYWdDb29yZC54IC0gZ2xfRnJhZ0Nvb3JkLnksIDEwLjApID09IDAuMClcXG4gICAgICAgIHtcXG4gICAgICAgICAgICBnbF9GcmFnQ29sb3IgPSB2ZWM0KDAuMCwgMC4wLCAwLjAsIDEuMCk7XFxuICAgICAgICB9XFxuICAgIH1cXG5cXG4gICAgaWYgKGx1bSA8IDAuNTApXFxuICAgIHtcXG4gICAgICAgIGlmIChtb2QoZ2xfRnJhZ0Nvb3JkLnggKyBnbF9GcmFnQ29vcmQueSAtIDUuMCwgMTAuMCkgPT0gMC4wKVxcbiAgICAgICAge1xcbiAgICAgICAgICAgIGdsX0ZyYWdDb2xvciA9IHZlYzQoMC4wLCAwLjAsIDAuMCwgMS4wKTtcXG4gICAgICAgIH1cXG4gICAgfVxcblxcbiAgICBpZiAobHVtIDwgMC4zKVxcbiAgICB7XFxuICAgICAgICBpZiAobW9kKGdsX0ZyYWdDb29yZC54IC0gZ2xfRnJhZ0Nvb3JkLnkgLSA1LjAsIDEwLjApID09IDAuMClcXG4gICAgICAgIHtcXG4gICAgICAgICAgICBnbF9GcmFnQ29sb3IgPSB2ZWM0KDAuMCwgMC4wLCAwLjAsIDEuMCk7XFxuICAgICAgICB9XFxuICAgIH1cXG59XFxuXCJcbiAgICApO1xufVxuXG5Dcm9zc0hhdGNoRmlsdGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoY29yZS5BYnN0cmFjdEZpbHRlci5wcm90b3R5cGUpO1xuQ3Jvc3NIYXRjaEZpbHRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBDcm9zc0hhdGNoRmlsdGVyO1xubW9kdWxlLmV4cG9ydHMgPSBDcm9zc0hhdGNoRmlsdGVyO1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi8uLi9jb3JlJyk7XG4vLyBAc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9zdWJzdGFjay9icmZzL2lzc3Vlcy8yNVxuXG5cbi8qKlxuICogVGhlIERpc3BsYWNlbWVudEZpbHRlciBjbGFzcyB1c2VzIHRoZSBwaXhlbCB2YWx1ZXMgZnJvbSB0aGUgc3BlY2lmaWVkIHRleHR1cmUgKGNhbGxlZCB0aGUgZGlzcGxhY2VtZW50IG1hcCkgdG8gcGVyZm9ybSBhIGRpc3BsYWNlbWVudCBvZiBhbiBvYmplY3QuXG4gKiBZb3UgY2FuIHVzZSB0aGlzIGZpbHRlciB0byBhcHBseSBhbGwgbWFub3Igb2YgY3Jhenkgd2FycGluZyBlZmZlY3RzXG4gKiBDdXJyZW50bHkgdGhlIHIgcHJvcGVydHkgb2YgdGhlIHRleHR1cmUgaXMgdXNlZCB0byBvZmZzZXQgdGhlIHggYW5kIHRoZSBnIHByb3BlcnR5IG9mIHRoZSB0ZXh0dXJlIGlzIHVzZWQgdG8gb2Zmc2V0IHRoZSB5LlxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5BYnN0cmFjdEZpbHRlclxuICogQG1lbWJlcm9mIFBJWEkuZmlsdGVyc1xuICogQHBhcmFtIHNwcml0ZSB7UElYSS5TcHJpdGV9IHRoZSBzcHJpdGUgdXNlZCBmb3IgdGhlIGRpc3BsYWNlbWVudCBtYXAuIChtYWtlIHN1cmUgaXRzIGFkZGVkIHRvIHRoZSBzY2VuZSEpXG4gKi9cbmZ1bmN0aW9uIERpc3BsYWNlbWVudEZpbHRlcihzcHJpdGUsIHNjYWxlKVxue1xuICAgIHZhciBtYXNrTWF0cml4ID0gbmV3IGNvcmUuTWF0cml4KCk7XG4gICAgc3ByaXRlLnJlbmRlcmFibGUgPSBmYWxzZTtcblxuICAgIGNvcmUuQWJzdHJhY3RGaWx0ZXIuY2FsbCh0aGlzLFxuICAgICAgICAvLyB2ZXJ0ZXggc2hhZGVyXG4gICAgICAgIFwiYXR0cmlidXRlIHZlYzIgYVZlcnRleFBvc2l0aW9uO1xcbmF0dHJpYnV0ZSB2ZWMyIGFUZXh0dXJlQ29vcmQ7XFxuYXR0cmlidXRlIHZlYzQgYUNvbG9yO1xcblxcbnVuaWZvcm0gbWF0MyBwcm9qZWN0aW9uTWF0cml4O1xcbnVuaWZvcm0gbWF0MyBvdGhlck1hdHJpeDtcXG5cXG52YXJ5aW5nIHZlYzIgdk1hcENvb3JkO1xcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xcbnZhcnlpbmcgdmVjNCB2Q29sb3I7XFxuXFxudm9pZCBtYWluKHZvaWQpXFxue1xcbiAgIGdsX1Bvc2l0aW9uID0gdmVjNCgocHJvamVjdGlvbk1hdHJpeCAqIHZlYzMoYVZlcnRleFBvc2l0aW9uLCAxLjApKS54eSwgMC4wLCAxLjApO1xcbiAgIHZUZXh0dXJlQ29vcmQgPSBhVGV4dHVyZUNvb3JkO1xcbiAgIHZNYXBDb29yZCA9ICggb3RoZXJNYXRyaXggKiB2ZWMzKCBhVGV4dHVyZUNvb3JkLCAxLjApICApLnh5O1xcbiAgIHZDb2xvciA9IHZlYzQoYUNvbG9yLnJnYiAqIGFDb2xvci5hLCBhQ29sb3IuYSk7XFxufVxcblwiLFxuICAgICAgICAvLyBmcmFnbWVudCBzaGFkZXJcbiAgICAgICAgXCJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcXG5cXG52YXJ5aW5nIHZlYzIgdk1hcENvb3JkO1xcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xcbnZhcnlpbmcgdmVjNCB2Q29sb3I7XFxuXFxudW5pZm9ybSB2ZWMyIHNjYWxlO1xcblxcbnVuaWZvcm0gc2FtcGxlcjJEIHVTYW1wbGVyO1xcbnVuaWZvcm0gc2FtcGxlcjJEIG1hcFNhbXBsZXI7XFxuXFxudm9pZCBtYWluKHZvaWQpXFxue1xcbiAgIHZlYzQgbWFwID0gIHRleHR1cmUyRChtYXBTYW1wbGVyLCB2TWFwQ29vcmQpO1xcblxcbiAgIG1hcCAtPSAwLjU7XFxuICAgbWFwLnh5ICo9IHNjYWxlO1xcblxcbiAgIGdsX0ZyYWdDb2xvciA9IHRleHR1cmUyRCh1U2FtcGxlciwgdmVjMih2VGV4dHVyZUNvb3JkLnggKyBtYXAueCwgdlRleHR1cmVDb29yZC55ICsgbWFwLnkpKTtcXG59XFxuXCIsXG4gICAgICAgIC8vIHVuaWZvcm1zXG4gICAgICAgIHtcbiAgICAgICAgICAgIG1hcFNhbXBsZXI6ICAgICB7IHR5cGU6ICdzYW1wbGVyMkQnLCB2YWx1ZTogc3ByaXRlLnRleHR1cmUgfSxcbiAgICAgICAgICAgIG90aGVyTWF0cml4OiAgICB7IHR5cGU6ICdtYXQzJywgdmFsdWU6IG1hc2tNYXRyaXgudG9BcnJheSh0cnVlKSB9LFxuICAgICAgICAgICAgc2NhbGU6ICAgICAgICAgIHsgdHlwZTogJ3YyJywgdmFsdWU6IHsgeDogMSwgeTogMSB9IH1cbiAgICAgICAgfVxuICAgICk7XG5cbiAgICB0aGlzLm1hc2tTcHJpdGUgPSBzcHJpdGU7XG4gICAgdGhpcy5tYXNrTWF0cml4ID0gbWFza01hdHJpeDtcblxuICAgIGlmIChzY2FsZSA9PT0gbnVsbCB8fCBzY2FsZSA9PT0gdW5kZWZpbmVkKVxuICAgIHtcbiAgICAgICAgc2NhbGUgPSAyMDtcbiAgICB9XG5cbiAgICB0aGlzLnNjYWxlID0gbmV3IGNvcmUuUG9pbnQoc2NhbGUsIHNjYWxlKTtcbn1cblxuRGlzcGxhY2VtZW50RmlsdGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoY29yZS5BYnN0cmFjdEZpbHRlci5wcm90b3R5cGUpO1xuRGlzcGxhY2VtZW50RmlsdGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IERpc3BsYWNlbWVudEZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gRGlzcGxhY2VtZW50RmlsdGVyO1xuXG5EaXNwbGFjZW1lbnRGaWx0ZXIucHJvdG90eXBlLmFwcGx5RmlsdGVyID0gZnVuY3Rpb24gKHJlbmRlcmVyLCBpbnB1dCwgb3V0cHV0KVxue1xuICAgIHZhciBmaWx0ZXJNYW5hZ2VyID0gcmVuZGVyZXIuZmlsdGVyTWFuYWdlcjtcblxuICAgIGZpbHRlck1hbmFnZXIuY2FsY3VsYXRlTWFwcGVkTWF0cml4KGlucHV0LmZyYW1lLCB0aGlzLm1hc2tTcHJpdGUsIHRoaXMubWFza01hdHJpeCk7XG5cbiAgICB0aGlzLnVuaWZvcm1zLm90aGVyTWF0cml4LnZhbHVlID0gdGhpcy5tYXNrTWF0cml4LnRvQXJyYXkodHJ1ZSk7XG4gICAgdGhpcy51bmlmb3Jtcy5zY2FsZS52YWx1ZS54ID0gdGhpcy5zY2FsZS54ICogKDEvaW5wdXQuZnJhbWUud2lkdGgpO1xuICAgIHRoaXMudW5pZm9ybXMuc2NhbGUudmFsdWUueSA9IHRoaXMuc2NhbGUueSAqICgxL2lucHV0LmZyYW1lLmhlaWdodCk7XG5cbiAgICB2YXIgc2hhZGVyID0gdGhpcy5nZXRTaGFkZXIocmVuZGVyZXIpO1xuICAgICAvLyBkcmF3IHRoZSBmaWx0ZXIuLi5cbiAgICBmaWx0ZXJNYW5hZ2VyLmFwcGx5RmlsdGVyKHNoYWRlciwgaW5wdXQsIG91dHB1dCk7XG59O1xuXG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKERpc3BsYWNlbWVudEZpbHRlci5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBUaGUgdGV4dHVyZSB1c2VkIGZvciB0aGUgZGlzcGxhY2VtZW50IG1hcC4gTXVzdCBiZSBwb3dlciBvZiAyIHNpemVkIHRleHR1cmUuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlRleHR1cmV9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5EaXNwbGFjZW1lbnRGaWx0ZXIjXG4gICAgICovXG4gICAgbWFwOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudW5pZm9ybXMubWFwU2FtcGxlci52YWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudW5pZm9ybXMubWFwU2FtcGxlci52YWx1ZSA9IHZhbHVlO1xuXG4gICAgICAgIH1cbiAgICB9XG59KTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vLi4vY29yZScpO1xuLy8gQHNlZSBodHRwczovL2dpdGh1Yi5jb20vc3Vic3RhY2svYnJmcy9pc3N1ZXMvMjVcblxuXG4vKipcbiAqIEBhdXRob3IgTWF0IEdyb3ZlcyBodHRwOi8vbWF0Z3JvdmVzLmNvbS8gQERvb3JtYXQyM1xuICogb3JpZ2luYWwgZmlsdGVyOiBodHRwczovL2dpdGh1Yi5jb20vZXZhbncvZ2xmeC5qcy9ibG9iL21hc3Rlci9zcmMvZmlsdGVycy9mdW4vZG90c2NyZWVuLmpzXG4gKi9cblxuLyoqXG4gKiBUaGlzIGZpbHRlciBhcHBsaWVzIGEgZG90c2NyZWVuIGVmZmVjdCBtYWtpbmcgZGlzcGxheSBvYmplY3RzIGFwcGVhciB0byBiZSBtYWRlIG91dCBvZlxuICogYmxhY2sgYW5kIHdoaXRlIGhhbGZ0b25lIGRvdHMgbGlrZSBhbiBvbGQgcHJpbnRlci5cbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQWJzdHJhY3RGaWx0ZXJcbiAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnNcbiAqL1xuZnVuY3Rpb24gRG90U2NyZWVuRmlsdGVyKClcbntcbiAgICBjb3JlLkFic3RyYWN0RmlsdGVyLmNhbGwodGhpcyxcbiAgICAgICAgLy8gdmVydGV4IHNoYWRlclxuICAgICAgICBudWxsLFxuICAgICAgICAvLyBmcmFnbWVudCBzaGFkZXJcbiAgICAgICAgXCJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcXG5cXG52YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDtcXG52YXJ5aW5nIHZlYzQgdkNvbG9yO1xcblxcbnVuaWZvcm0gdmVjNCBkaW1lbnNpb25zO1xcbnVuaWZvcm0gc2FtcGxlcjJEIHVTYW1wbGVyO1xcblxcbnVuaWZvcm0gZmxvYXQgYW5nbGU7XFxudW5pZm9ybSBmbG9hdCBzY2FsZTtcXG5cXG5mbG9hdCBwYXR0ZXJuKClcXG57XFxuICAgZmxvYXQgcyA9IHNpbihhbmdsZSksIGMgPSBjb3MoYW5nbGUpO1xcbiAgIHZlYzIgdGV4ID0gdlRleHR1cmVDb29yZCAqIGRpbWVuc2lvbnMueHk7XFxuICAgdmVjMiBwb2ludCA9IHZlYzIoXFxuICAgICAgIGMgKiB0ZXgueCAtIHMgKiB0ZXgueSxcXG4gICAgICAgcyAqIHRleC54ICsgYyAqIHRleC55XFxuICAgKSAqIHNjYWxlO1xcbiAgIHJldHVybiAoc2luKHBvaW50LngpICogc2luKHBvaW50LnkpKSAqIDQuMDtcXG59XFxuXFxudm9pZCBtYWluKClcXG57XFxuICAgdmVjNCBjb2xvciA9IHRleHR1cmUyRCh1U2FtcGxlciwgdlRleHR1cmVDb29yZCk7XFxuICAgZmxvYXQgYXZlcmFnZSA9IChjb2xvci5yICsgY29sb3IuZyArIGNvbG9yLmIpIC8gMy4wO1xcbiAgIGdsX0ZyYWdDb2xvciA9IHZlYzQodmVjMyhhdmVyYWdlICogMTAuMCAtIDUuMCArIHBhdHRlcm4oKSksIGNvbG9yLmEpO1xcbn1cXG5cIixcbiAgICAgICAgLy8gY3VzdG9tIHVuaWZvcm1zXG4gICAgICAgIHtcbiAgICAgICAgICAgIHNjYWxlOiAgICAgIHsgdHlwZTogJzFmJywgdmFsdWU6IDEgfSxcbiAgICAgICAgICAgIGFuZ2xlOiAgICAgIHsgdHlwZTogJzFmJywgdmFsdWU6IDUgfSxcbiAgICAgICAgICAgIGRpbWVuc2lvbnM6IHsgdHlwZTogJzRmdicsIHZhbHVlOiBbMCwgMCwgMCwgMF0gfVxuICAgICAgICB9XG4gICAgKTtcbn1cblxuRG90U2NyZWVuRmlsdGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoY29yZS5BYnN0cmFjdEZpbHRlci5wcm90b3R5cGUpO1xuRG90U2NyZWVuRmlsdGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IERvdFNjcmVlbkZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gRG90U2NyZWVuRmlsdGVyO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhEb3RTY3JlZW5GaWx0ZXIucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogVGhlIHNjYWxlIG9mIHRoZSBlZmZlY3QuXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuRG90U2NyZWVuRmlsdGVyI1xuICAgICAqL1xuICAgIHNjYWxlOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudW5pZm9ybXMuc2NhbGUudmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLnNjYWxlLnZhbHVlID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVGhlIHJhZGl1cyBvZiB0aGUgZWZmZWN0LlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLkRvdFNjcmVlbkZpbHRlciNcbiAgICAgKi9cbiAgICBhbmdsZToge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVuaWZvcm1zLmFuZ2xlLnZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy5hbmdsZS52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfVxufSk7XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uLy4uL2NvcmUnKTtcblxuLy8gQHNlZSBodHRwczovL2dpdGh1Yi5jb20vc3Vic3RhY2svYnJmcy9pc3N1ZXMvMjVcblxuXG4vKipcbiAqIFRoZSBCbHVyWVRpbnRGaWx0ZXIgYXBwbGllcyBhIHZlcnRpY2FsIEdhdXNzaWFuIGJsdXIgdG8gYW4gb2JqZWN0LlxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5BYnN0cmFjdEZpbHRlclxuICogQG1lbWJlcm9mIFBJWEkuZmlsdGVyc1xuICovXG5mdW5jdGlvbiBCbHVyWVRpbnRGaWx0ZXIoKVxue1xuICAgIGNvcmUuQWJzdHJhY3RGaWx0ZXIuY2FsbCh0aGlzLFxuICAgICAgICAvLyB2ZXJ0ZXggc2hhZGVyXG4gICAgICAgIFwiYXR0cmlidXRlIHZlYzIgYVZlcnRleFBvc2l0aW9uO1xcbmF0dHJpYnV0ZSB2ZWMyIGFUZXh0dXJlQ29vcmQ7XFxuYXR0cmlidXRlIHZlYzQgYUNvbG9yO1xcblxcbnVuaWZvcm0gZmxvYXQgc3RyZW5ndGg7XFxudW5pZm9ybSB2ZWMyIG9mZnNldDtcXG5cXG51bmlmb3JtIG1hdDMgcHJvamVjdGlvbk1hdHJpeDtcXG5cXG52YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDtcXG52YXJ5aW5nIHZlYzQgdkNvbG9yO1xcbnZhcnlpbmcgdmVjMiB2Qmx1clRleENvb3Jkc1s2XTtcXG5cXG52b2lkIG1haW4odm9pZClcXG57XFxuICAgIGdsX1Bvc2l0aW9uID0gdmVjNCgocHJvamVjdGlvbk1hdHJpeCAqIHZlYzMoKGFWZXJ0ZXhQb3NpdGlvbitvZmZzZXQpLCAxLjApKS54eSwgMC4wLCAxLjApO1xcbiAgICB2VGV4dHVyZUNvb3JkID0gYVRleHR1cmVDb29yZDtcXG5cXG4gICAgdkJsdXJUZXhDb29yZHNbIDBdID0gYVRleHR1cmVDb29yZCArIHZlYzIoMC4wLCAtMC4wMTIgKiBzdHJlbmd0aCk7XFxuICAgIHZCbHVyVGV4Q29vcmRzWyAxXSA9IGFUZXh0dXJlQ29vcmQgKyB2ZWMyKDAuMCwgLTAuMDA4ICogc3RyZW5ndGgpO1xcbiAgICB2Qmx1clRleENvb3Jkc1sgMl0gPSBhVGV4dHVyZUNvb3JkICsgdmVjMigwLjAsIC0wLjAwNCAqIHN0cmVuZ3RoKTtcXG4gICAgdkJsdXJUZXhDb29yZHNbIDNdID0gYVRleHR1cmVDb29yZCArIHZlYzIoMC4wLCAgMC4wMDQgKiBzdHJlbmd0aCk7XFxuICAgIHZCbHVyVGV4Q29vcmRzWyA0XSA9IGFUZXh0dXJlQ29vcmQgKyB2ZWMyKDAuMCwgIDAuMDA4ICogc3RyZW5ndGgpO1xcbiAgICB2Qmx1clRleENvb3Jkc1sgNV0gPSBhVGV4dHVyZUNvb3JkICsgdmVjMigwLjAsICAwLjAxMiAqIHN0cmVuZ3RoKTtcXG5cXG4gICB2Q29sb3IgPSB2ZWM0KGFDb2xvci5yZ2IgKiBhQ29sb3IuYSwgYUNvbG9yLmEpO1xcbn1cXG5cIixcbiAgICAgICAgLy8gZnJhZ21lbnQgc2hhZGVyXG4gICAgICAgIFwicHJlY2lzaW9uIGxvd3AgZmxvYXQ7XFxuXFxudmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7XFxudmFyeWluZyB2ZWMyIHZCbHVyVGV4Q29vcmRzWzZdO1xcbnZhcnlpbmcgdmVjNCB2Q29sb3I7XFxuXFxudW5pZm9ybSB2ZWMzIGNvbG9yO1xcbnVuaWZvcm0gZmxvYXQgYWxwaGE7XFxuXFxudW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXI7XFxuXFxudm9pZCBtYWluKHZvaWQpXFxue1xcbiAgICB2ZWM0IHN1bSA9IHZlYzQoMC4wKTtcXG5cXG4gICAgc3VtICs9IHRleHR1cmUyRCh1U2FtcGxlciwgdkJsdXJUZXhDb29yZHNbIDBdKSowLjAwNDQzMTg0ODQxMTkzODM0MTtcXG4gICAgc3VtICs9IHRleHR1cmUyRCh1U2FtcGxlciwgdkJsdXJUZXhDb29yZHNbIDFdKSowLjA1Mzk5MDk2NjUxMzE4OTg1O1xcbiAgICBzdW0gKz0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2Qmx1clRleENvb3Jkc1sgMl0pKjAuMjQxOTcwNzI0NTE5MTQ1NDtcXG4gICAgc3VtICs9IHRleHR1cmUyRCh1U2FtcGxlciwgdlRleHR1cmVDb29yZCAgICAgKSowLjM5ODk0MjI4MDQwMTQzMjc7XFxuICAgIHN1bSArPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZCbHVyVGV4Q29vcmRzWyAzXSkqMC4yNDE5NzA3MjQ1MTkxNDU0O1xcbiAgICBzdW0gKz0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2Qmx1clRleENvb3Jkc1sgNF0pKjAuMDUzOTkwOTY2NTEzMTg5ODU7XFxuICAgIHN1bSArPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZCbHVyVGV4Q29vcmRzWyA1XSkqMC4wMDQ0MzE4NDg0MTE5MzgzNDE7XFxuXFxuICAgIGdsX0ZyYWdDb2xvciA9IHZlYzQoIGNvbG9yLnJnYiAqIHN1bS5hICogYWxwaGEsIHN1bS5hICogYWxwaGEgKTtcXG59XFxuXCIsXG4gICAgICAgIC8vIHNldCB0aGUgdW5pZm9ybXNcbiAgICAgICAge1xuICAgICAgICAgICAgYmx1cjogeyB0eXBlOiAnMWYnLCB2YWx1ZTogMSAvIDUxMiB9LFxuICAgICAgICAgICAgY29sb3I6IHsgdHlwZTogJ2MnLCB2YWx1ZTogWzAsMCwwXX0sXG4gICAgICAgICAgICBhbHBoYTogeyB0eXBlOiAnMWYnLCB2YWx1ZTogMC43IH0sXG4gICAgICAgICAgICBvZmZzZXQ6IHsgdHlwZTogJzJmJywgdmFsdWU6WzUsIDVdfSxcbiAgICAgICAgICAgIHN0cmVuZ3RoOiB7IHR5cGU6ICcxZicsIHZhbHVlOjF9XG4gICAgICAgIH1cbiAgICApO1xuXG4gICAgdGhpcy5wYXNzZXMgPSAxO1xuICAgIHRoaXMuc3RyZW5ndGggPSA0O1xufVxuXG5CbHVyWVRpbnRGaWx0ZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShjb3JlLkFic3RyYWN0RmlsdGVyLnByb3RvdHlwZSk7XG5CbHVyWVRpbnRGaWx0ZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gQmx1cllUaW50RmlsdGVyO1xubW9kdWxlLmV4cG9ydHMgPSBCbHVyWVRpbnRGaWx0ZXI7XG5cbkJsdXJZVGludEZpbHRlci5wcm90b3R5cGUuYXBwbHlGaWx0ZXIgPSBmdW5jdGlvbiAocmVuZGVyZXIsIGlucHV0LCBvdXRwdXQsIGNsZWFyKVxue1xuICAgIHZhciBzaGFkZXIgPSB0aGlzLmdldFNoYWRlcihyZW5kZXJlcik7XG5cbiAgICB0aGlzLnVuaWZvcm1zLnN0cmVuZ3RoLnZhbHVlID0gdGhpcy5zdHJlbmd0aCAvIDQgLyB0aGlzLnBhc3NlcyAqIChpbnB1dC5mcmFtZS5oZWlnaHQgLyBpbnB1dC5zaXplLmhlaWdodCk7XG5cbiAgICBpZih0aGlzLnBhc3NlcyA9PT0gMSlcbiAgICB7XG4gICAgICAgIHJlbmRlcmVyLmZpbHRlck1hbmFnZXIuYXBwbHlGaWx0ZXIoc2hhZGVyLCBpbnB1dCwgb3V0cHV0LCBjbGVhcik7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHZhciByZW5kZXJUYXJnZXQgPSByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLmdldFJlbmRlclRhcmdldCh0cnVlKTtcbiAgICAgICAgdmFyIGZsaXAgPSBpbnB1dDtcbiAgICAgICAgdmFyIGZsb3AgPSByZW5kZXJUYXJnZXQ7XG5cbiAgICAgICAgZm9yKHZhciBpID0gMDsgaSA8IHRoaXMucGFzc2VzLTE7IGkrKylcbiAgICAgICAge1xuICAgICAgICAgICAgcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5hcHBseUZpbHRlcihzaGFkZXIsIGZsaXAsIGZsb3AsIGNsZWFyKTtcblxuICAgICAgICAgICB2YXIgdGVtcCA9IGZsb3A7XG4gICAgICAgICAgIGZsb3AgPSBmbGlwO1xuICAgICAgICAgICBmbGlwID0gdGVtcDtcbiAgICAgICAgfVxuXG4gICAgICAgIHJlbmRlcmVyLmZpbHRlck1hbmFnZXIuYXBwbHlGaWx0ZXIoc2hhZGVyLCBmbGlwLCBvdXRwdXQsIGNsZWFyKTtcblxuICAgICAgICByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLnJldHVyblJlbmRlclRhcmdldChyZW5kZXJUYXJnZXQpO1xuICAgIH1cbn07XG5cblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoQmx1cllUaW50RmlsdGVyLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIHN0cmVuZ3RoIG9mIGJvdGggdGhlIGJsdXIuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5CbHVyWVRpbnRGaWx0ZXIjXG4gICAgICogQGRlZmF1bHQgMlxuICAgICAqL1xuICAgIGJsdXI6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gIHRoaXMuc3RyZW5ndGg7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnBhZGRpbmcgPSB2YWx1ZSAqIDAuNTtcbiAgICAgICAgICAgIHRoaXMuc3RyZW5ndGggPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi8uLi9jb3JlJyksXG4gICAgQmx1clhGaWx0ZXIgPSByZXF1aXJlKCcuLi9ibHVyL0JsdXJYRmlsdGVyJyksXG4gICAgQmx1cllUaW50RmlsdGVyID0gcmVxdWlyZSgnLi9CbHVyWVRpbnRGaWx0ZXInKTtcblxuLyoqXG4gKiBUaGUgRHJvcFNoYWRvd0ZpbHRlciBhcHBsaWVzIGEgR2F1c3NpYW4gYmx1ciB0byBhbiBvYmplY3QuXG4gKiBUaGUgc3RyZW5ndGggb2YgdGhlIGJsdXIgY2FuIGJlIHNldCBmb3IgeC0gYW5kIHktYXhpcyBzZXBhcmF0ZWx5LlxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5BYnN0cmFjdEZpbHRlclxuICogQG1lbWJlcm9mIFBJWEkuZmlsdGVyc1xuICovXG5mdW5jdGlvbiBEcm9wU2hhZG93RmlsdGVyKClcbntcbiAgICBjb3JlLkFic3RyYWN0RmlsdGVyLmNhbGwodGhpcyk7XG5cbiAgICB0aGlzLmJsdXJYRmlsdGVyID0gbmV3IEJsdXJYRmlsdGVyKCk7XG4gICAgdGhpcy5ibHVyWVRpbnRGaWx0ZXIgPSBuZXcgQmx1cllUaW50RmlsdGVyKCk7XG5cbiAgICB0aGlzLmRlZmF1bHRGaWx0ZXIgPSBuZXcgY29yZS5BYnN0cmFjdEZpbHRlcigpO1xuXG4gICAgdGhpcy5wYWRkaW5nID0gMzA7XG5cbiAgICB0aGlzLl9kaXJ0eVBvc2l0aW9uID0gdHJ1ZTtcbiAgICB0aGlzLl9hbmdsZSA9IDQ1ICogTWF0aC5QSSAvIDE4MDtcbiAgICB0aGlzLl9kaXN0YW5jZSA9IDEwO1xuICAgIHRoaXMuYWxwaGEgPSAwLjc1O1xuICAgIHRoaXMuaGlkZU9iamVjdCA9IGZhbHNlO1xuICAgIHRoaXMuYmxlbmRNb2RlID0gY29yZS5CTEVORF9NT0RFUy5NVUxUSVBMWTtcbn1cblxuRHJvcFNoYWRvd0ZpbHRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuQWJzdHJhY3RGaWx0ZXIucHJvdG90eXBlKTtcbkRyb3BTaGFkb3dGaWx0ZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gRHJvcFNoYWRvd0ZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gRHJvcFNoYWRvd0ZpbHRlcjtcblxuRHJvcFNoYWRvd0ZpbHRlci5wcm90b3R5cGUuYXBwbHlGaWx0ZXIgPSBmdW5jdGlvbiAocmVuZGVyZXIsIGlucHV0LCBvdXRwdXQpXG57XG4gICAgdmFyIHJlbmRlclRhcmdldCA9IHJlbmRlcmVyLmZpbHRlck1hbmFnZXIuZ2V0UmVuZGVyVGFyZ2V0KHRydWUpO1xuXG4gICAgLy9UT0RPIC0gY29weVRleFN1YkltYWdlMkQgY291bGQgYmUgdXNlZCBoZXJlP1xuICAgIGlmKHRoaXMuX2RpcnR5UG9zaXRpb24pXG4gICAge1xuICAgICAgICB0aGlzLl9kaXJ0eVBvc2l0aW9uID0gZmFsc2U7XG5cbiAgICAgICAgdGhpcy5ibHVyWVRpbnRGaWx0ZXIudW5pZm9ybXMub2Zmc2V0LnZhbHVlWzBdID0gTWF0aC5zaW4odGhpcy5fYW5nbGUpICogdGhpcy5fZGlzdGFuY2U7XG4gICAgICAgIHRoaXMuYmx1cllUaW50RmlsdGVyLnVuaWZvcm1zLm9mZnNldC52YWx1ZVsxXSA9IE1hdGguY29zKHRoaXMuX2FuZ2xlKSAqIHRoaXMuX2Rpc3RhbmNlO1xuICAgIH1cblxuICAgIHRoaXMuYmx1clhGaWx0ZXIuYXBwbHlGaWx0ZXIocmVuZGVyZXIsIGlucHV0LCByZW5kZXJUYXJnZXQpO1xuXG4gICAgcmVuZGVyZXIuYmxlbmRNb2RlTWFuYWdlci5zZXRCbGVuZE1vZGUodGhpcy5ibGVuZE1vZGUpO1xuXG4gICAgdGhpcy5ibHVyWVRpbnRGaWx0ZXIuYXBwbHlGaWx0ZXIocmVuZGVyZXIsIHJlbmRlclRhcmdldCwgb3V0cHV0KTtcblxuICAgIHJlbmRlcmVyLmJsZW5kTW9kZU1hbmFnZXIuc2V0QmxlbmRNb2RlKGNvcmUuQkxFTkRfTU9ERVMuTk9STUFMKTtcblxuICAgIGlmKCF0aGlzLmhpZGVPYmplY3QpXG4gICAge1xuXG4gICAgICAgIHRoaXMuZGVmYXVsdEZpbHRlci5hcHBseUZpbHRlcihyZW5kZXJlciwgaW5wdXQsIG91dHB1dCk7XG4gICAgfVxuXG5cbiAgICByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLnJldHVyblJlbmRlclRhcmdldChyZW5kZXJUYXJnZXQpO1xufTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoRHJvcFNoYWRvd0ZpbHRlci5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBzdHJlbmd0aCBvZiBib3RoIHRoZSBibHVyWCBhbmQgYmx1clkgcHJvcGVydGllcyBzaW11bHRhbmVvdXNseVxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJPZiBQSVhJLmZpbHRlcnMuRHJvcFNoYWRvd0ZpbHRlciNcbiAgICAgKiBAZGVmYXVsdCAyXG4gICAgICovXG4gICAgYmx1cjoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmJsdXJYRmlsdGVyLmJsdXI7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmJsdXJYRmlsdGVyLmJsdXIgPSB0aGlzLmJsdXJZVGludEZpbHRlci5ibHVyID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgc3RyZW5ndGggb2YgdGhlIGJsdXJYIHByb3BlcnR5XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlck9mIFBJWEkuZmlsdGVycy5Ecm9wU2hhZG93RmlsdGVyI1xuICAgICAqIEBkZWZhdWx0IDJcbiAgICAgKi9cbiAgICBibHVyWDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmJsdXJYRmlsdGVyLmJsdXI7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmJsdXJYRmlsdGVyLmJsdXIgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBzdHJlbmd0aCBvZiB0aGUgYmx1clkgcHJvcGVydHlcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyT2YgUElYSS5maWx0ZXJzLkRyb3BTaGFkb3dGaWx0ZXIjXG4gICAgICogQGRlZmF1bHQgMlxuICAgICAqL1xuICAgIGJsdXJZOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuYmx1cllUaW50RmlsdGVyLmJsdXI7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmJsdXJZVGludEZpbHRlci5ibHVyID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgY29sb3Igb2YgdGhlIHNoYWRvd1xuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJPZiBQSVhJLmZpbHRlcnMuRHJvcFNoYWRvd0ZpbHRlciNcbiAgICAgKi9cbiAgICBjb2xvcjoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiAgY29yZS51dGlscy5yZ2IyaGV4KCB0aGlzLmJsdXJZVGludEZpbHRlci51bmlmb3Jtcy5jb2xvci52YWx1ZSApO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5ibHVyWVRpbnRGaWx0ZXIudW5pZm9ybXMuY29sb3IudmFsdWUgPSBjb3JlLnV0aWxzLmhleDJyZ2IodmFsdWUpO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIGFscGhhIG9mIHRoZSBzaGFkb3dcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyT2YgUElYSS5maWx0ZXJzLkRyb3BTaGFkb3dGaWx0ZXIjXG4gICAgICovXG4gICAgYWxwaGE6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gIHRoaXMuYmx1cllUaW50RmlsdGVyLnVuaWZvcm1zLmFscGhhLnZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5ibHVyWVRpbnRGaWx0ZXIudW5pZm9ybXMuYWxwaGEudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBkaXN0YW5jZSBvZiB0aGUgc2hhZG93XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlck9mIFBJWEkuZmlsdGVycy5Ecm9wU2hhZG93RmlsdGVyI1xuICAgICAqL1xuICAgIGRpc3RhbmNlOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuICB0aGlzLl9kaXN0YW5jZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuX2RpcnR5UG9zaXRpb24gPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy5fZGlzdGFuY2UgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBhbmdsZSBvZiB0aGUgc2hhZG93XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlck9mIFBJWEkuZmlsdGVycy5Ecm9wU2hhZG93RmlsdGVyI1xuICAgICAqL1xuICAgIGFuZ2xlOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuICB0aGlzLl9hbmdsZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuX2RpcnR5UG9zaXRpb24gPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy5fYW5nbGUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi8uLi9jb3JlJyk7XG4vLyBAc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9zdWJzdGFjay9icmZzL2lzc3Vlcy8yNVxuXG5cbi8qKlxuICogVGhpcyBncmV5c2NhbGVzIHRoZSBwYWxldHRlIG9mIHlvdXIgRGlzcGxheSBPYmplY3RzLlxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5BYnN0cmFjdEZpbHRlclxuICogQG1lbWJlcm9mIFBJWEkuZmlsdGVyc1xuICovXG5mdW5jdGlvbiBHcmF5RmlsdGVyKClcbntcbiAgICBjb3JlLkFic3RyYWN0RmlsdGVyLmNhbGwodGhpcyxcbiAgICAgICAgLy8gdmVydGV4IHNoYWRlclxuICAgICAgICBudWxsLFxuICAgICAgICAvLyBmcmFnbWVudCBzaGFkZXJcbiAgICAgICAgXCJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcXG5cXG52YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDtcXG52YXJ5aW5nIHZlYzQgdkNvbG9yO1xcblxcbnVuaWZvcm0gc2FtcGxlcjJEIHVTYW1wbGVyO1xcbnVuaWZvcm0gZmxvYXQgZ3JheTtcXG5cXG52b2lkIG1haW4odm9pZClcXG57XFxuICAgZ2xfRnJhZ0NvbG9yID0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2VGV4dHVyZUNvb3JkKTtcXG4gICBnbF9GcmFnQ29sb3IucmdiID0gbWl4KGdsX0ZyYWdDb2xvci5yZ2IsIHZlYzMoMC4yMTI2KmdsX0ZyYWdDb2xvci5yICsgMC43MTUyKmdsX0ZyYWdDb2xvci5nICsgMC4wNzIyKmdsX0ZyYWdDb2xvci5iKSwgZ3JheSk7XFxufVxcblwiLFxuICAgICAgICAvLyBzZXQgdGhlIHVuaWZvcm1zXG4gICAgICAgIHtcbiAgICAgICAgICAgIGdyYXk6IHsgdHlwZTogJzFmJywgdmFsdWU6IDEgfVxuICAgICAgICB9XG4gICAgKTtcbn1cblxuR3JheUZpbHRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuQWJzdHJhY3RGaWx0ZXIucHJvdG90eXBlKTtcbkdyYXlGaWx0ZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gR3JheUZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gR3JheUZpbHRlcjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoR3JheUZpbHRlci5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBUaGUgc3RyZW5ndGggb2YgdGhlIGdyYXkuIDEgd2lsbCBtYWtlIHRoZSBvYmplY3QgYmxhY2sgYW5kIHdoaXRlLCAwIHdpbGwgbWFrZSB0aGUgb2JqZWN0IGl0cyBub3JtYWwgY29sb3IuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5HcmF5RmlsdGVyI1xuICAgICAqL1xuICAgIGdyYXk6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy51bmlmb3Jtcy5ncmF5LnZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy5ncmF5LnZhbHVlID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG59KTtcbiIsIi8qKlxuICogQGZpbGUgICAgICAgIE1haW4gZXhwb3J0IG9mIHRoZSBQSVhJIGZpbHRlcnMgbGlicmFyeVxuICogQGF1dGhvciAgICAgIE1hdCBHcm92ZXMgPG1hdEBnb29kYm95ZGlnaXRhbC5jb20+XG4gKiBAY29weXJpZ2h0ICAgMjAxMy0yMDE1IEdvb2RCb3lEaWdpdGFsXG4gKiBAbGljZW5zZSAgICAge0BsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9waXhpanMvcGl4aS5qcy9ibG9iL21hc3Rlci9MSUNFTlNFfE1JVCBMaWNlbnNlfVxuICovXG5cbi8qKlxuICogQG5hbWVzcGFjZSBQSVhJLmZpbHRlcnNcbiAqL1xubW9kdWxlLmV4cG9ydHMgPSB7XG4gICAgQXNjaWlGaWx0ZXI6ICAgICAgICByZXF1aXJlKCcuL2FzY2lpL0FzY2lpRmlsdGVyJyksXG4gICAgQmxvb21GaWx0ZXI6ICAgICAgICByZXF1aXJlKCcuL2Jsb29tL0Jsb29tRmlsdGVyJyksXG4gICAgQmx1ckZpbHRlcjogICAgICAgICByZXF1aXJlKCcuL2JsdXIvQmx1ckZpbHRlcicpLFxuICAgIEJsdXJYRmlsdGVyOiAgICAgICAgcmVxdWlyZSgnLi9ibHVyL0JsdXJYRmlsdGVyJyksXG4gICAgQmx1cllGaWx0ZXI6ICAgICAgICByZXF1aXJlKCcuL2JsdXIvQmx1cllGaWx0ZXInKSxcbiAgICBCbHVyRGlyRmlsdGVyOiAgICAgIHJlcXVpcmUoJy4vYmx1ci9CbHVyRGlyRmlsdGVyJyksXG4gICAgQ29sb3JNYXRyaXhGaWx0ZXI6ICByZXF1aXJlKCcuL2NvbG9yL0NvbG9yTWF0cml4RmlsdGVyJyksXG4gICAgQ29sb3JTdGVwRmlsdGVyOiAgICByZXF1aXJlKCcuL2NvbG9yL0NvbG9yU3RlcEZpbHRlcicpLFxuICAgIENvbnZvbHV0aW9uRmlsdGVyOiAgcmVxdWlyZSgnLi9jb252b2x1dGlvbi9Db252b2x1dGlvbkZpbHRlcicpLFxuICAgIENyb3NzSGF0Y2hGaWx0ZXI6ICAgcmVxdWlyZSgnLi9jcm9zc2hhdGNoL0Nyb3NzSGF0Y2hGaWx0ZXInKSxcbiAgICBEaXNwbGFjZW1lbnRGaWx0ZXI6IHJlcXVpcmUoJy4vZGlzcGxhY2VtZW50L0Rpc3BsYWNlbWVudEZpbHRlcicpLFxuICAgIERvdFNjcmVlbkZpbHRlcjogICAgcmVxdWlyZSgnLi9kb3QvRG90U2NyZWVuRmlsdGVyJyksXG4gICAgR3JheUZpbHRlcjogICAgICAgICByZXF1aXJlKCcuL2dyYXkvR3JheUZpbHRlcicpLFxuICAgIERyb3BTaGFkb3dGaWx0ZXI6ICAgcmVxdWlyZSgnLi9kcm9wc2hhZG93L0Ryb3BTaGFkb3dGaWx0ZXInKSxcbiAgICBJbnZlcnRGaWx0ZXI6ICAgICAgIHJlcXVpcmUoJy4vaW52ZXJ0L0ludmVydEZpbHRlcicpLFxuICAgIE5vaXNlRmlsdGVyOiAgICAgICAgcmVxdWlyZSgnLi9ub2lzZS9Ob2lzZUZpbHRlcicpLFxuICAgIFBpeGVsYXRlRmlsdGVyOiAgICAgcmVxdWlyZSgnLi9waXhlbGF0ZS9QaXhlbGF0ZUZpbHRlcicpLFxuICAgIFJHQlNwbGl0RmlsdGVyOiAgICAgcmVxdWlyZSgnLi9yZ2IvUkdCU3BsaXRGaWx0ZXInKSxcbiAgICBTaG9ja3dhdmVGaWx0ZXI6ICAgIHJlcXVpcmUoJy4vc2hvY2t3YXZlL1Nob2Nrd2F2ZUZpbHRlcicpLFxuICAgIFNlcGlhRmlsdGVyOiAgICAgICAgcmVxdWlyZSgnLi9zZXBpYS9TZXBpYUZpbHRlcicpLFxuICAgIFNtYXJ0Qmx1ckZpbHRlcjogICAgcmVxdWlyZSgnLi9ibHVyL1NtYXJ0Qmx1ckZpbHRlcicpLFxuICAgIFRpbHRTaGlmdEZpbHRlcjogICAgcmVxdWlyZSgnLi90aWx0c2hpZnQvVGlsdFNoaWZ0RmlsdGVyJyksXG4gICAgVGlsdFNoaWZ0WEZpbHRlcjogICByZXF1aXJlKCcuL3RpbHRzaGlmdC9UaWx0U2hpZnRYRmlsdGVyJyksXG4gICAgVGlsdFNoaWZ0WUZpbHRlcjogICByZXF1aXJlKCcuL3RpbHRzaGlmdC9UaWx0U2hpZnRZRmlsdGVyJyksXG4gICAgVHdpc3RGaWx0ZXI6ICAgICAgICByZXF1aXJlKCcuL3R3aXN0L1R3aXN0RmlsdGVyJylcbn07XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uLy4uL2NvcmUnKTtcbi8vIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL3N1YnN0YWNrL2JyZnMvaXNzdWVzLzI1XG5cblxuLyoqXG4gKiBUaGlzIGludmVydHMgeW91ciBEaXNwbGF5IE9iamVjdHMgY29sb3JzLlxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5BYnN0cmFjdEZpbHRlclxuICogQG1lbWJlcm9mIFBJWEkuZmlsdGVyc1xuICovXG5mdW5jdGlvbiBJbnZlcnRGaWx0ZXIoKVxue1xuICAgIGNvcmUuQWJzdHJhY3RGaWx0ZXIuY2FsbCh0aGlzLFxuICAgICAgICAvLyB2ZXJ0ZXggc2hhZGVyXG4gICAgICAgIG51bGwsXG4gICAgICAgIC8vIGZyYWdtZW50IHNoYWRlclxuICAgICAgICBcInByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xcblxcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xcblxcbnVuaWZvcm0gZmxvYXQgaW52ZXJ0O1xcbnVuaWZvcm0gc2FtcGxlcjJEIHVTYW1wbGVyO1xcblxcbnZvaWQgbWFpbih2b2lkKVxcbntcXG4gICAgZ2xfRnJhZ0NvbG9yID0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2VGV4dHVyZUNvb3JkKTtcXG5cXG4gICAgZ2xfRnJhZ0NvbG9yLnJnYiA9IG1peCggKHZlYzMoMSktZ2xfRnJhZ0NvbG9yLnJnYikgKiBnbF9GcmFnQ29sb3IuYSwgZ2xfRnJhZ0NvbG9yLnJnYiwgMS4wIC0gaW52ZXJ0KTtcXG59XFxuXCIsXG4gICAgICAgIC8vIGN1c3RvbSB1bmlmb3Jtc1xuICAgICAgICB7XG4gICAgICAgICAgICBpbnZlcnQ6IHsgdHlwZTogJzFmJywgdmFsdWU6IDEgfVxuICAgICAgICB9XG4gICAgKTtcbn1cblxuSW52ZXJ0RmlsdGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoY29yZS5BYnN0cmFjdEZpbHRlci5wcm90b3R5cGUpO1xuSW52ZXJ0RmlsdGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IEludmVydEZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gSW52ZXJ0RmlsdGVyO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhJbnZlcnRGaWx0ZXIucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogVGhlIHN0cmVuZ3RoIG9mIHRoZSBpbnZlcnQuIGAxYCB3aWxsIGZ1bGx5IGludmVydCB0aGUgY29sb3JzLCBhbmRcbiAgICAgKiBgMGAgd2lsbCBtYWtlIHRoZSBvYmplY3QgaXRzIG5vcm1hbCBjb2xvci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLkludmVydEZpbHRlciNcbiAgICAgKi9cbiAgICBpbnZlcnQ6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy51bmlmb3Jtcy5pbnZlcnQudmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLmludmVydC52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfVxufSk7XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uLy4uL2NvcmUnKTtcbi8vIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL3N1YnN0YWNrL2JyZnMvaXNzdWVzLzI1XG5cblxuLyoqXG4gKiBAYXV0aG9yIFZpY28gQHZpY29jb3RlYVxuICogb3JpZ2luYWwgZmlsdGVyOiBodHRwczovL2dpdGh1Yi5jb20vZXZhbncvZ2xmeC5qcy9ibG9iL21hc3Rlci9zcmMvZmlsdGVycy9hZGp1c3Qvbm9pc2UuanNcbiAqL1xuXG4vKipcbiAqIEEgTm9pc2UgZWZmZWN0IGZpbHRlci5cbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQWJzdHJhY3RGaWx0ZXJcbiAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnNcbiAqL1xuZnVuY3Rpb24gTm9pc2VGaWx0ZXIoKVxue1xuICAgIGNvcmUuQWJzdHJhY3RGaWx0ZXIuY2FsbCh0aGlzLFxuICAgICAgICAvLyB2ZXJ0ZXggc2hhZGVyXG4gICAgICAgIG51bGwsXG4gICAgICAgIC8vIGZyYWdtZW50IHNoYWRlclxuICAgICAgICBcInByZWNpc2lvbiBoaWdocCBmbG9hdDtcXG5cXG52YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDtcXG52YXJ5aW5nIHZlYzQgdkNvbG9yO1xcblxcbnVuaWZvcm0gZmxvYXQgbm9pc2U7XFxudW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXI7XFxuXFxuZmxvYXQgcmFuZCh2ZWMyIGNvKVxcbntcXG4gICAgcmV0dXJuIGZyYWN0KHNpbihkb3QoY28ueHksIHZlYzIoMTIuOTg5OCwgNzguMjMzKSkpICogNDM3NTguNTQ1Myk7XFxufVxcblxcbnZvaWQgbWFpbigpXFxue1xcbiAgICB2ZWM0IGNvbG9yID0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2VGV4dHVyZUNvb3JkKTtcXG5cXG4gICAgZmxvYXQgZGlmZiA9IChyYW5kKHZUZXh0dXJlQ29vcmQpIC0gMC41KSAqIG5vaXNlO1xcblxcbiAgICBjb2xvci5yICs9IGRpZmY7XFxuICAgIGNvbG9yLmcgKz0gZGlmZjtcXG4gICAgY29sb3IuYiArPSBkaWZmO1xcblxcbiAgICBnbF9GcmFnQ29sb3IgPSBjb2xvcjtcXG59XFxuXCIsXG4gICAgICAgIC8vIGN1c3RvbSB1bmlmb3Jtc1xuICAgICAgICB7XG4gICAgICAgICAgICBub2lzZTogeyB0eXBlOiAnMWYnLCB2YWx1ZTogMC41IH1cbiAgICAgICAgfVxuICAgICk7XG59XG5cbk5vaXNlRmlsdGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoY29yZS5BYnN0cmFjdEZpbHRlci5wcm90b3R5cGUpO1xuTm9pc2VGaWx0ZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gTm9pc2VGaWx0ZXI7XG5tb2R1bGUuZXhwb3J0cyA9IE5vaXNlRmlsdGVyO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhOb2lzZUZpbHRlci5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBUaGUgYW1vdW50IG9mIG5vaXNlIHRvIGFwcGx5LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuTm9pc2VGaWx0ZXIjXG4gICAgICogQGRlZmF1bHQgMC41XG4gICAgICovXG4gICAgbm9pc2U6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy51bmlmb3Jtcy5ub2lzZS52YWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudW5pZm9ybXMubm9pc2UudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi8uLi9jb3JlJyk7XG4vLyBAc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9zdWJzdGFjay9icmZzL2lzc3Vlcy8yNVxuXG5cbi8qKlxuICogVGhpcyBmaWx0ZXIgYXBwbGllcyBhIHBpeGVsYXRlIGVmZmVjdCBtYWtpbmcgZGlzcGxheSBvYmplY3RzIGFwcGVhciAnYmxvY2t5Jy5cbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQWJzdHJhY3RGaWx0ZXJcbiAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnNcbiAqL1xuZnVuY3Rpb24gUGl4ZWxhdGVGaWx0ZXIoKVxue1xuICAgIGNvcmUuQWJzdHJhY3RGaWx0ZXIuY2FsbCh0aGlzLFxuICAgICAgICAvLyB2ZXJ0ZXggc2hhZGVyXG4gICAgICAgIG51bGwsXG4gICAgICAgIC8vIGZyYWdtZW50IHNoYWRlclxuICAgICAgICBcInByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xcblxcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xcblxcbnVuaWZvcm0gdmVjNCBkaW1lbnNpb25zO1xcbnVuaWZvcm0gdmVjMiBwaXhlbFNpemU7XFxudW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXI7XFxuXFxudm9pZCBtYWluKHZvaWQpXFxue1xcbiAgICB2ZWMyIGNvb3JkID0gdlRleHR1cmVDb29yZDtcXG5cXG4gICAgdmVjMiBzaXplID0gZGltZW5zaW9ucy54eSAvIHBpeGVsU2l6ZTtcXG5cXG4gICAgdmVjMiBjb2xvciA9IGZsb29yKCAoIHZUZXh0dXJlQ29vcmQgKiBzaXplICkgKSAvIHNpemUgKyBwaXhlbFNpemUvZGltZW5zaW9ucy54eSAqIDAuNTtcXG5cXG4gICAgZ2xfRnJhZ0NvbG9yID0gdGV4dHVyZTJEKHVTYW1wbGVyLCBjb2xvcik7XFxufVxcblwiLFxuICAgICAgICAvLyBjdXN0b20gdW5pZm9ybXNcbiAgICAgICAge1xuICAgICAgICAgICAgZGltZW5zaW9uczogeyB0eXBlOiAnNGZ2JywgIHZhbHVlOiBuZXcgRmxvYXQzMkFycmF5KFswLCAwLCAwLCAwXSkgfSxcbiAgICAgICAgICAgIHBpeGVsU2l6ZTogIHsgdHlwZTogJ3YyJywgICB2YWx1ZTogeyB4OiAxMCwgeTogMTAgfSB9XG4gICAgICAgIH1cbiAgICApO1xufVxuXG5QaXhlbGF0ZUZpbHRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuQWJzdHJhY3RGaWx0ZXIucHJvdG90eXBlKTtcblBpeGVsYXRlRmlsdGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFBpeGVsYXRlRmlsdGVyO1xubW9kdWxlLmV4cG9ydHMgPSBQaXhlbGF0ZUZpbHRlcjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoUGl4ZWxhdGVGaWx0ZXIucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogVGhpcyBhIHBvaW50IHRoYXQgZGVzY3JpYmVzIHRoZSBzaXplIG9mIHRoZSBibG9ja3MuXG4gICAgICogeCBpcyB0aGUgd2lkdGggb2YgdGhlIGJsb2NrIGFuZCB5IGlzIHRoZSBoZWlnaHQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlBvaW50fVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuUGl4ZWxhdGVGaWx0ZXIjXG4gICAgICovXG4gICAgc2l6ZToge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVuaWZvcm1zLnBpeGVsU2l6ZS52YWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudW5pZm9ybXMucGl4ZWxTaXplLnZhbHVlID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG59KTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vLi4vY29yZScpO1xuLy8gQHNlZSBodHRwczovL2dpdGh1Yi5jb20vc3Vic3RhY2svYnJmcy9pc3N1ZXMvMjVcblxuXG4vKipcbiAqIEFuIFJHQiBTcGxpdCBGaWx0ZXIuXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLkFic3RyYWN0RmlsdGVyXG4gKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzXG4gKi9cbmZ1bmN0aW9uIFJHQlNwbGl0RmlsdGVyKClcbntcbiAgICBjb3JlLkFic3RyYWN0RmlsdGVyLmNhbGwodGhpcyxcbiAgICAgICAgLy8gdmVydGV4IHNoYWRlclxuICAgICAgICBudWxsLFxuICAgICAgICAvLyBmcmFnbWVudCBzaGFkZXJcbiAgICAgICAgXCJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcXG5cXG52YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDtcXG5cXG51bmlmb3JtIHNhbXBsZXIyRCB1U2FtcGxlcjtcXG51bmlmb3JtIHZlYzQgZGltZW5zaW9ucztcXG51bmlmb3JtIHZlYzIgcmVkO1xcbnVuaWZvcm0gdmVjMiBncmVlbjtcXG51bmlmb3JtIHZlYzIgYmx1ZTtcXG5cXG52b2lkIG1haW4odm9pZClcXG57XFxuICAgZ2xfRnJhZ0NvbG9yLnIgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZUZXh0dXJlQ29vcmQgKyByZWQvZGltZW5zaW9ucy54eSkucjtcXG4gICBnbF9GcmFnQ29sb3IuZyA9IHRleHR1cmUyRCh1U2FtcGxlciwgdlRleHR1cmVDb29yZCArIGdyZWVuL2RpbWVuc2lvbnMueHkpLmc7XFxuICAgZ2xfRnJhZ0NvbG9yLmIgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZUZXh0dXJlQ29vcmQgKyBibHVlL2RpbWVuc2lvbnMueHkpLmI7XFxuICAgZ2xfRnJhZ0NvbG9yLmEgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZUZXh0dXJlQ29vcmQpLmE7XFxufVxcblwiLFxuICAgICAgICAvLyBjdXN0b20gdW5pZm9ybXNcbiAgICAgICAge1xuICAgICAgICAgICAgcmVkOiAgICAgICAgeyB0eXBlOiAndjInLCB2YWx1ZTogeyB4OiAyMCwgeTogMjAgfSB9LFxuICAgICAgICAgICAgZ3JlZW46ICAgICAgeyB0eXBlOiAndjInLCB2YWx1ZTogeyB4OiAtMjAsIHk6IDIwIH0gfSxcbiAgICAgICAgICAgIGJsdWU6ICAgICAgIHsgdHlwZTogJ3YyJywgdmFsdWU6IHsgeDogMjAsIHk6IC0yMCB9IH0sXG4gICAgICAgICAgICBkaW1lbnNpb25zOiB7IHR5cGU6ICc0ZnYnLCB2YWx1ZTogWzAsIDAsIDAsIDBdIH1cbiAgICAgICAgfVxuICAgICk7XG59XG5cblJHQlNwbGl0RmlsdGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoY29yZS5BYnN0cmFjdEZpbHRlci5wcm90b3R5cGUpO1xuUkdCU3BsaXRGaWx0ZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gUkdCU3BsaXRGaWx0ZXI7XG5tb2R1bGUuZXhwb3J0cyA9IFJHQlNwbGl0RmlsdGVyO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhSR0JTcGxpdEZpbHRlci5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBSZWQgY2hhbm5lbCBvZmZzZXQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlBvaW50fVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuUkdCU3BsaXRGaWx0ZXIjXG4gICAgICovXG4gICAgcmVkOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudW5pZm9ybXMucmVkLnZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy5yZWQudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBHcmVlbiBjaGFubmVsIG9mZnNldC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuUG9pbnR9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5SR0JTcGxpdEZpbHRlciNcbiAgICAgKi9cbiAgICBncmVlbjoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVuaWZvcm1zLmdyZWVuLnZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy5ncmVlbi52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIEJsdWUgb2Zmc2V0LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5Qb2ludH1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLlJHQlNwbGl0RmlsdGVyI1xuICAgICAqL1xuICAgIGJsdWU6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy51bmlmb3Jtcy5ibHVlLnZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy5ibHVlLnZhbHVlID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG59KTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vLi4vY29yZScpO1xuLy8gQHNlZSBodHRwczovL2dpdGh1Yi5jb20vc3Vic3RhY2svYnJmcy9pc3N1ZXMvMjVcblxuXG4vKipcbiAqIFRoaXMgYXBwbGllcyBhIHNlcGlhIGVmZmVjdCB0byB5b3VyIERpc3BsYXkgT2JqZWN0cy5cbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQWJzdHJhY3RGaWx0ZXJcbiAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnNcbiAqL1xuZnVuY3Rpb24gU2VwaWFGaWx0ZXIoKVxue1xuICAgIGNvcmUuQWJzdHJhY3RGaWx0ZXIuY2FsbCh0aGlzLFxuICAgICAgICAvLyB2ZXJ0ZXggc2hhZGVyXG4gICAgICAgIG51bGwsXG4gICAgICAgIC8vIGZyYWdtZW50IHNoYWRlclxuICAgICAgICBcInByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xcblxcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xcblxcbnVuaWZvcm0gc2FtcGxlcjJEIHVTYW1wbGVyO1xcbnVuaWZvcm0gZmxvYXQgc2VwaWE7XFxuXFxuY29uc3QgbWF0MyBzZXBpYU1hdHJpeCA9IG1hdDMoMC4zNTg4LCAwLjcwNDQsIDAuMTM2OCwgMC4yOTkwLCAwLjU4NzAsIDAuMTE0MCwgMC4yMzkyLCAwLjQ2OTYsIDAuMDkxMik7XFxuXFxudm9pZCBtYWluKHZvaWQpXFxue1xcbiAgIGdsX0ZyYWdDb2xvciA9IHRleHR1cmUyRCh1U2FtcGxlciwgdlRleHR1cmVDb29yZCk7XFxuICAgZ2xfRnJhZ0NvbG9yLnJnYiA9IG1peCggZ2xfRnJhZ0NvbG9yLnJnYiwgZ2xfRnJhZ0NvbG9yLnJnYiAqIHNlcGlhTWF0cml4LCBzZXBpYSk7XFxufVxcblwiLFxuICAgICAgICAvLyBjdXN0b20gdW5pZm9ybXNcbiAgICAgICAge1xuICAgICAgICAgICAgc2VwaWE6IHsgdHlwZTogJzFmJywgdmFsdWU6IDEgfVxuICAgICAgICB9XG4gICAgKTtcbn1cblxuU2VwaWFGaWx0ZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShjb3JlLkFic3RyYWN0RmlsdGVyLnByb3RvdHlwZSk7XG5TZXBpYUZpbHRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBTZXBpYUZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gU2VwaWFGaWx0ZXI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKFNlcGlhRmlsdGVyLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFRoZSBzdHJlbmd0aCBvZiB0aGUgc2VwaWEuIGAxYCB3aWxsIGFwcGx5IHRoZSBmdWxsIHNlcGlhIGVmZmVjdCwgYW5kXG4gICAgICogYDBgIHdpbGwgbWFrZSB0aGUgb2JqZWN0IGl0cyBub3JtYWwgY29sb3IuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5TZXBpYUZpbHRlciNcbiAgICAgKi9cbiAgICBzZXBpYToge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVuaWZvcm1zLnNlcGlhLnZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy5zZXBpYS52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfVxufSk7XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uLy4uL2NvcmUnKTtcbi8vIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL3N1YnN0YWNrL2JyZnMvaXNzdWVzLzI1XG5cblxuLyoqXG4gKiBUaGUgQ29sb3JNYXRyaXhGaWx0ZXIgY2xhc3MgbGV0cyB5b3UgYXBwbHkgYSA0eDQgbWF0cml4IHRyYW5zZm9ybWF0aW9uIG9uIHRoZSBSR0JBXG4gKiBjb2xvciBhbmQgYWxwaGEgdmFsdWVzIG9mIGV2ZXJ5IHBpeGVsIG9uIHlvdXIgZGlzcGxheU9iamVjdCB0byBwcm9kdWNlIGEgcmVzdWx0XG4gKiB3aXRoIGEgbmV3IHNldCBvZiBSR0JBIGNvbG9yIGFuZCBhbHBoYSB2YWx1ZXMuIEl0J3MgcHJldHR5IHBvd2VyZnVsIVxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5BYnN0cmFjdEZpbHRlclxuICogQG1lbWJlcm9mIFBJWEkuZmlsdGVyc1xuICovXG5mdW5jdGlvbiBTaG9ja3dhdmVGaWx0ZXIoKVxue1xuICAgIGNvcmUuQWJzdHJhY3RGaWx0ZXIuY2FsbCh0aGlzLFxuICAgICAgICAvLyB2ZXJ0ZXggc2hhZGVyXG4gICAgICAgIG51bGwsXG4gICAgICAgIC8vIGZyYWdtZW50IHNoYWRlclxuICAgICAgICBcInByZWNpc2lvbiBsb3dwIGZsb2F0O1xcblxcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xcblxcbnVuaWZvcm0gc2FtcGxlcjJEIHVTYW1wbGVyO1xcblxcbnVuaWZvcm0gdmVjMiBjZW50ZXI7XFxudW5pZm9ybSB2ZWMzIHBhcmFtczsgLy8gMTAuMCwgMC44LCAwLjFcXG51bmlmb3JtIGZsb2F0IHRpbWU7XFxuXFxudm9pZCBtYWluKClcXG57XFxuICAgIHZlYzIgdXYgPSB2VGV4dHVyZUNvb3JkO1xcbiAgICB2ZWMyIHRleENvb3JkID0gdXY7XFxuXFxuICAgIGZsb2F0IGRpc3QgPSBkaXN0YW5jZSh1diwgY2VudGVyKTtcXG5cXG4gICAgaWYgKCAoZGlzdCA8PSAodGltZSArIHBhcmFtcy56KSkgJiYgKGRpc3QgPj0gKHRpbWUgLSBwYXJhbXMueikpIClcXG4gICAge1xcbiAgICAgICAgZmxvYXQgZGlmZiA9IChkaXN0IC0gdGltZSk7XFxuICAgICAgICBmbG9hdCBwb3dEaWZmID0gMS4wIC0gcG93KGFicyhkaWZmKnBhcmFtcy54KSwgcGFyYW1zLnkpO1xcblxcbiAgICAgICAgZmxvYXQgZGlmZlRpbWUgPSBkaWZmICAqIHBvd0RpZmY7XFxuICAgICAgICB2ZWMyIGRpZmZVViA9IG5vcm1hbGl6ZSh1diAtIGNlbnRlcik7XFxuICAgICAgICB0ZXhDb29yZCA9IHV2ICsgKGRpZmZVViAqIGRpZmZUaW1lKTtcXG4gICAgfVxcblxcbiAgICBnbF9GcmFnQ29sb3IgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHRleENvb3JkKTtcXG59XFxuXCIsXG4gICAgICAgIC8vIGN1c3RvbSB1bmlmb3Jtc1xuICAgICAgICB7XG4gICAgICAgICAgICBjZW50ZXI6IHsgdHlwZTogJ3YyJywgdmFsdWU6IHsgeDogMC41LCB5OiAwLjUgfSB9LFxuICAgICAgICAgICAgcGFyYW1zOiB7IHR5cGU6ICd2MycsIHZhbHVlOiB7IHg6IDEwLCB5OiAwLjgsIHo6IDAuMSB9IH0sXG4gICAgICAgICAgICB0aW1lOiB7IHR5cGU6ICcxZicsIHZhbHVlOiAwIH1cbiAgICAgICAgfVxuICAgICk7XG59XG5cblNob2Nrd2F2ZUZpbHRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuQWJzdHJhY3RGaWx0ZXIucHJvdG90eXBlKTtcblNob2Nrd2F2ZUZpbHRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBTaG9ja3dhdmVGaWx0ZXI7XG5tb2R1bGUuZXhwb3J0cyA9IFNob2Nrd2F2ZUZpbHRlcjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoU2hvY2t3YXZlRmlsdGVyLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIGNlbnRlciBvZiB0aGUgc2hvY2t3YXZlIGluIG5vcm1hbGl6ZWQgc2NyZWVuIGNvb3Jkcy4gVGhhdCBpc1xuICAgICAqICgwLDApIGlzIHRoZSB0b3AtbGVmdCBhbmQgKDEsMSkgaXMgdGhlIGJvdHRvbSByaWdodC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge29iamVjdDxzdHJpbmcsIG51bWJlcj59XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5TaG9ja3dhdmVGaWx0ZXIjXG4gICAgICovXG4gICAgY2VudGVyOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudW5pZm9ybXMuY2VudGVyLnZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy5jZW50ZXIudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgcGFyYW1zIG9mIHRoZSBzaG9ja3dhdmUuIFRoZXNlIG1vZGlmeSB0aGUgbG9vayBhbmQgYmVoYXZpb3Igb2ZcbiAgICAgKiB0aGUgc2hvY2t3YXZlIGFzIGl0IHJpcHBsZXMgb3V0LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7b2JqZWN0PHN0cmluZywgbnVtYmVyPn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLlNob2Nrd2F2ZUZpbHRlciNcbiAgICAgKi9cbiAgICBwYXJhbXM6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy51bmlmb3Jtcy5wYXJhbXMudmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLnBhcmFtcy52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfSxcbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBlbGFwc2VkIHRpbWUgb2YgdGhlIHNob2Nrd2F2ZS4gVGhpcyBjb250cm9scyB0aGUgc3BlZWQgYXQgd2hpY2hcbiAgICAgKiB0aGUgc2hvY2t3YXZlIHJpcHBsZXMgb3V0LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuU2hvY2t3YXZlRmlsdGVyI1xuICAgICAqL1xuICAgIHRpbWU6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy51bmlmb3Jtcy50aW1lLnZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy50aW1lLnZhbHVlID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG59KTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vLi4vY29yZScpO1xuLy8gQHNlZSBodHRwczovL2dpdGh1Yi5jb20vc3Vic3RhY2svYnJmcy9pc3N1ZXMvMjVcblxuXG4vKipcbiAqIEBhdXRob3IgVmljbyBAdmljb2NvdGVhXG4gKiBvcmlnaW5hbCBmaWx0ZXIgaHR0cHM6Ly9naXRodWIuY29tL2V2YW53L2dsZnguanMvYmxvYi9tYXN0ZXIvc3JjL2ZpbHRlcnMvYmx1ci90aWx0c2hpZnQuanMgYnkgRXZhbiBXYWxsYWNlIDogaHR0cDovL21hZGVieWV2YW4uY29tL1xuICovXG5cbi8qKlxuICogQSBUaWx0U2hpZnRBeGlzRmlsdGVyLlxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5BYnN0cmFjdEZpbHRlclxuICogQG1lbWJlcm9mIFBJWEkuZmlsdGVyc1xuICovXG5mdW5jdGlvbiBUaWx0U2hpZnRBeGlzRmlsdGVyKClcbntcbiAgICBjb3JlLkFic3RyYWN0RmlsdGVyLmNhbGwodGhpcyxcbiAgICAgICAgLy8gdmVydGV4IHNoYWRlclxuICAgICAgICBudWxsLFxuICAgICAgICAvLyBmcmFnbWVudCBzaGFkZXJcbiAgICAgICAgXCJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcXG5cXG52YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDtcXG5cXG51bmlmb3JtIHNhbXBsZXIyRCB1U2FtcGxlcjtcXG51bmlmb3JtIGZsb2F0IGJsdXI7XFxudW5pZm9ybSBmbG9hdCBncmFkaWVudEJsdXI7XFxudW5pZm9ybSB2ZWMyIHN0YXJ0O1xcbnVuaWZvcm0gdmVjMiBlbmQ7XFxudW5pZm9ybSB2ZWMyIGRlbHRhO1xcbnVuaWZvcm0gdmVjMiB0ZXhTaXplO1xcblxcbmZsb2F0IHJhbmRvbSh2ZWMzIHNjYWxlLCBmbG9hdCBzZWVkKVxcbntcXG4gICAgcmV0dXJuIGZyYWN0KHNpbihkb3QoZ2xfRnJhZ0Nvb3JkLnh5eiArIHNlZWQsIHNjYWxlKSkgKiA0Mzc1OC41NDUzICsgc2VlZCk7XFxufVxcblxcbnZvaWQgbWFpbih2b2lkKVxcbntcXG4gICAgdmVjNCBjb2xvciA9IHZlYzQoMC4wKTtcXG4gICAgZmxvYXQgdG90YWwgPSAwLjA7XFxuXFxuICAgIGZsb2F0IG9mZnNldCA9IHJhbmRvbSh2ZWMzKDEyLjk4OTgsIDc4LjIzMywgMTUxLjcxODIpLCAwLjApO1xcbiAgICB2ZWMyIG5vcm1hbCA9IG5vcm1hbGl6ZSh2ZWMyKHN0YXJ0LnkgLSBlbmQueSwgZW5kLnggLSBzdGFydC54KSk7XFxuICAgIGZsb2F0IHJhZGl1cyA9IHNtb290aHN0ZXAoMC4wLCAxLjAsIGFicyhkb3QodlRleHR1cmVDb29yZCAqIHRleFNpemUgLSBzdGFydCwgbm9ybWFsKSkgLyBncmFkaWVudEJsdXIpICogYmx1cjtcXG5cXG4gICAgZm9yIChmbG9hdCB0ID0gLTMwLjA7IHQgPD0gMzAuMDsgdCsrKVxcbiAgICB7XFxuICAgICAgICBmbG9hdCBwZXJjZW50ID0gKHQgKyBvZmZzZXQgLSAwLjUpIC8gMzAuMDtcXG4gICAgICAgIGZsb2F0IHdlaWdodCA9IDEuMCAtIGFicyhwZXJjZW50KTtcXG4gICAgICAgIHZlYzQgc2FtcGxlID0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2VGV4dHVyZUNvb3JkICsgZGVsdGEgLyB0ZXhTaXplICogcGVyY2VudCAqIHJhZGl1cyk7XFxuICAgICAgICBzYW1wbGUucmdiICo9IHNhbXBsZS5hO1xcbiAgICAgICAgY29sb3IgKz0gc2FtcGxlICogd2VpZ2h0O1xcbiAgICAgICAgdG90YWwgKz0gd2VpZ2h0O1xcbiAgICB9XFxuXFxuICAgIGdsX0ZyYWdDb2xvciA9IGNvbG9yIC8gdG90YWw7XFxuICAgIGdsX0ZyYWdDb2xvci5yZ2IgLz0gZ2xfRnJhZ0NvbG9yLmEgKyAwLjAwMDAxO1xcbn1cXG5cIixcbiAgICAgICAgLy8gY3VzdG9tIHVuaWZvcm1zXG4gICAgICAgIHtcbiAgICAgICAgICAgIGJsdXI6ICAgICAgICAgICB7IHR5cGU6ICcxZicsIHZhbHVlOiAxMDAgfSxcbiAgICAgICAgICAgIGdyYWRpZW50Qmx1cjogICB7IHR5cGU6ICcxZicsIHZhbHVlOiA2MDAgfSxcbiAgICAgICAgICAgIHN0YXJ0OiAgICAgICAgICB7IHR5cGU6ICd2MicsIHZhbHVlOiB7IHg6IDAsICAgIHk6IHdpbmRvdy5pbm5lckhlaWdodCAvIDIgfSB9LFxuICAgICAgICAgICAgZW5kOiAgICAgICAgICAgIHsgdHlwZTogJ3YyJywgdmFsdWU6IHsgeDogNjAwLCAgeTogd2luZG93LmlubmVySGVpZ2h0IC8gMiB9IH0sXG4gICAgICAgICAgICBkZWx0YTogICAgICAgICAgeyB0eXBlOiAndjInLCB2YWx1ZTogeyB4OiAzMCwgICB5OiAzMCB9IH0sXG4gICAgICAgICAgICB0ZXhTaXplOiAgICAgICAgeyB0eXBlOiAndjInLCB2YWx1ZTogeyB4OiB3aW5kb3cuaW5uZXJXaWR0aCwgeTogd2luZG93LmlubmVySGVpZ2h0IH0gfVxuICAgICAgICB9XG4gICAgKTtcblxuICAgIHRoaXMudXBkYXRlRGVsdGEoKTtcbn1cblxuVGlsdFNoaWZ0QXhpc0ZpbHRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuQWJzdHJhY3RGaWx0ZXIucHJvdG90eXBlKTtcblRpbHRTaGlmdEF4aXNGaWx0ZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gVGlsdFNoaWZ0QXhpc0ZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gVGlsdFNoaWZ0QXhpc0ZpbHRlcjtcblxuLyoqXG4gKiBVcGRhdGVzIHRoZSBmaWx0ZXIgZGVsdGEgdmFsdWVzLlxuICogVGhpcyBpcyBvdmVycmlkZGVuIGluIHRoZSBYIGFuZCBZIGZpbHRlcnMsIGRvZXMgbm90aGluZyBmb3IgdGhpcyBjbGFzcy5cbiAqXG4gKi9cblRpbHRTaGlmdEF4aXNGaWx0ZXIucHJvdG90eXBlLnVwZGF0ZURlbHRhID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLnVuaWZvcm1zLmRlbHRhLnZhbHVlLnggPSAwO1xuICAgIHRoaXMudW5pZm9ybXMuZGVsdGEudmFsdWUueSA9IDA7XG59O1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhUaWx0U2hpZnRBeGlzRmlsdGVyLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFRoZSBzdHJlbmd0aCBvZiB0aGUgYmx1ci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLlRpbHRTaGlmdEF4aXNGaWx0ZXIjXG4gICAgICovXG4gICAgYmx1cjoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVuaWZvcm1zLmJsdXIudmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLmJsdXIudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBUaGUgc3RyZW5ndGggb2YgdGhlIGdyYWRpZW50IGJsdXIuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5UaWx0U2hpZnRBeGlzRmlsdGVyI1xuICAgICAqL1xuICAgIGdyYWRpZW50Qmx1cjoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVuaWZvcm1zLmdyYWRpZW50Qmx1ci52YWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudW5pZm9ybXMuZ3JhZGllbnRCbHVyLnZhbHVlID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVGhlIFggdmFsdWUgdG8gc3RhcnQgdGhlIGVmZmVjdCBhdC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuUG9pbnR9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5UaWx0U2hpZnRBeGlzRmlsdGVyI1xuICAgICAqL1xuICAgIHN0YXJ0OiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudW5pZm9ybXMuc3RhcnQudmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLnN0YXJ0LnZhbHVlID0gdmFsdWU7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZURlbHRhKCk7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVGhlIFggdmFsdWUgdG8gZW5kIHRoZSBlZmZlY3QgYXQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlBvaW50fVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuVGlsdFNoaWZ0QXhpc0ZpbHRlciNcbiAgICAgKi9cbiAgICBlbmQ6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy51bmlmb3Jtcy5lbmQudmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLmVuZC52YWx1ZSA9IHZhbHVlO1xuICAgICAgICAgICAgdGhpcy51cGRhdGVEZWx0YSgpO1xuICAgICAgICB9XG4gICAgfVxufSk7XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uLy4uL2NvcmUnKSxcbiAgICBUaWx0U2hpZnRYRmlsdGVyID0gcmVxdWlyZSgnLi9UaWx0U2hpZnRYRmlsdGVyJyksXG4gICAgVGlsdFNoaWZ0WUZpbHRlciA9IHJlcXVpcmUoJy4vVGlsdFNoaWZ0WUZpbHRlcicpO1xuXG4vKipcbiAqIEBhdXRob3IgVmljbyBAdmljb2NvdGVhXG4gKiBvcmlnaW5hbCBmaWx0ZXIgaHR0cHM6Ly9naXRodWIuY29tL2V2YW53L2dsZnguanMvYmxvYi9tYXN0ZXIvc3JjL2ZpbHRlcnMvYmx1ci90aWx0c2hpZnQuanMgYnkgRXZhbiBXYWxsYWNlIDogaHR0cDovL21hZGVieWV2YW4uY29tL1xuICovXG5cbi8qKlxuICogQSBUaWx0U2hpZnQgRmlsdGVyLiBNYW5hZ2VzIHRoZSBwYXNzIG9mIGJvdGggYSBUaWx0U2hpZnRYRmlsdGVyIGFuZCBUaWx0U2hpZnRZRmlsdGVyLlxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5BYnN0cmFjdEZpbHRlclxuICogQG1lbWJlcm9mIFBJWEkuZmlsdGVyc1xuICovXG5mdW5jdGlvbiBUaWx0U2hpZnRGaWx0ZXIoKVxue1xuICAgIGNvcmUuQWJzdHJhY3RGaWx0ZXIuY2FsbCh0aGlzKTtcblxuICAgIHRoaXMudGlsdFNoaWZ0WEZpbHRlciA9IG5ldyBUaWx0U2hpZnRYRmlsdGVyKCk7XG4gICAgdGhpcy50aWx0U2hpZnRZRmlsdGVyID0gbmV3IFRpbHRTaGlmdFlGaWx0ZXIoKTtcbn1cblxuVGlsdFNoaWZ0RmlsdGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoY29yZS5BYnN0cmFjdEZpbHRlci5wcm90b3R5cGUpO1xuVGlsdFNoaWZ0RmlsdGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFRpbHRTaGlmdEZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gVGlsdFNoaWZ0RmlsdGVyO1xuXG5UaWx0U2hpZnRGaWx0ZXIucHJvdG90eXBlLmFwcGx5RmlsdGVyID0gZnVuY3Rpb24gKHJlbmRlcmVyLCBpbnB1dCwgb3V0cHV0KVxue1xuICAgIHZhciByZW5kZXJUYXJnZXQgPSByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLmdldFJlbmRlclRhcmdldCh0cnVlKTtcblxuICAgIHRoaXMudGlsdFNoaWZ0WEZpbHRlci5hcHBseUZpbHRlcihyZW5kZXJlciwgaW5wdXQsIHJlbmRlclRhcmdldCk7XG5cbiAgICB0aGlzLnRpbHRTaGlmdFlGaWx0ZXIuYXBwbHlGaWx0ZXIocmVuZGVyZXIsIHJlbmRlclRhcmdldCwgb3V0cHV0KTtcblxuICAgIHJlbmRlcmVyLmZpbHRlck1hbmFnZXIucmV0dXJuUmVuZGVyVGFyZ2V0KHJlbmRlclRhcmdldCk7XG59O1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhUaWx0U2hpZnRGaWx0ZXIucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogVGhlIHN0cmVuZ3RoIG9mIHRoZSBibHVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuVGlsdFNoaWZ0RmlsdGVyI1xuICAgICAqL1xuICAgIGJsdXI6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy50aWx0U2hpZnRYRmlsdGVyLmJsdXI7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnRpbHRTaGlmdFhGaWx0ZXIuYmx1ciA9IHRoaXMudGlsdFNoaWZ0WUZpbHRlci5ibHVyID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVGhlIHN0cmVuZ3RoIG9mIHRoZSBncmFkaWVudCBibHVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuVGlsdFNoaWZ0RmlsdGVyI1xuICAgICAqL1xuICAgIGdyYWRpZW50Qmx1cjoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnRpbHRTaGlmdFhGaWx0ZXIuZ3JhZGllbnRCbHVyO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy50aWx0U2hpZnRYRmlsdGVyLmdyYWRpZW50Qmx1ciA9IHRoaXMudGlsdFNoaWZ0WUZpbHRlci5ncmFkaWVudEJsdXIgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBUaGUgWSB2YWx1ZSB0byBzdGFydCB0aGUgZWZmZWN0IGF0LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuVGlsdFNoaWZ0RmlsdGVyI1xuICAgICAqL1xuICAgIHN0YXJ0OiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudGlsdFNoaWZ0WEZpbHRlci5zdGFydDtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudGlsdFNoaWZ0WEZpbHRlci5zdGFydCA9IHRoaXMudGlsdFNoaWZ0WUZpbHRlci5zdGFydCA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFRoZSBZIHZhbHVlIHRvIGVuZCB0aGUgZWZmZWN0IGF0LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuVGlsdFNoaWZ0RmlsdGVyI1xuICAgICAqL1xuICAgIGVuZDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnRpbHRTaGlmdFhGaWx0ZXIuZW5kO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy50aWx0U2hpZnRYRmlsdGVyLmVuZCA9IHRoaXMudGlsdFNoaWZ0WUZpbHRlci5lbmQgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuIiwidmFyIFRpbHRTaGlmdEF4aXNGaWx0ZXIgPSByZXF1aXJlKCcuL1RpbHRTaGlmdEF4aXNGaWx0ZXInKTtcblxuLyoqXG4gKiBAYXV0aG9yIFZpY28gQHZpY29jb3RlYVxuICogb3JpZ2luYWwgZmlsdGVyIGh0dHBzOi8vZ2l0aHViLmNvbS9ldmFudy9nbGZ4LmpzL2Jsb2IvbWFzdGVyL3NyYy9maWx0ZXJzL2JsdXIvdGlsdHNoaWZ0LmpzIGJ5IEV2YW4gV2FsbGFjZSA6IGh0dHA6Ly9tYWRlYnlldmFuLmNvbS9cbiAqL1xuXG4vKipcbiAqIEEgVGlsdFNoaWZ0WEZpbHRlci5cbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuVGlsdFNoaWZ0QXhpc0ZpbHRlclxuICogQG1lbWJlcm9mIFBJWEkuZmlsdGVyc1xuICovXG5mdW5jdGlvbiBUaWx0U2hpZnRYRmlsdGVyKClcbntcbiAgICBUaWx0U2hpZnRBeGlzRmlsdGVyLmNhbGwodGhpcyk7XG59XG5cblRpbHRTaGlmdFhGaWx0ZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShUaWx0U2hpZnRBeGlzRmlsdGVyLnByb3RvdHlwZSk7XG5UaWx0U2hpZnRYRmlsdGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFRpbHRTaGlmdFhGaWx0ZXI7XG5tb2R1bGUuZXhwb3J0cyA9IFRpbHRTaGlmdFhGaWx0ZXI7XG5cbi8qKlxuICogVXBkYXRlcyB0aGUgZmlsdGVyIGRlbHRhIHZhbHVlcy5cbiAqXG4gKi9cblRpbHRTaGlmdFhGaWx0ZXIucHJvdG90eXBlLnVwZGF0ZURlbHRhID0gZnVuY3Rpb24gKClcbntcbiAgICB2YXIgZHggPSB0aGlzLnVuaWZvcm1zLmVuZC52YWx1ZS54IC0gdGhpcy51bmlmb3Jtcy5zdGFydC52YWx1ZS54O1xuICAgIHZhciBkeSA9IHRoaXMudW5pZm9ybXMuZW5kLnZhbHVlLnkgLSB0aGlzLnVuaWZvcm1zLnN0YXJ0LnZhbHVlLnk7XG4gICAgdmFyIGQgPSBNYXRoLnNxcnQoZHggKiBkeCArIGR5ICogZHkpO1xuXG4gICAgdGhpcy51bmlmb3Jtcy5kZWx0YS52YWx1ZS54ID0gZHggLyBkO1xuICAgIHRoaXMudW5pZm9ybXMuZGVsdGEudmFsdWUueSA9IGR5IC8gZDtcbn07XG4iLCJ2YXIgVGlsdFNoaWZ0QXhpc0ZpbHRlciA9IHJlcXVpcmUoJy4vVGlsdFNoaWZ0QXhpc0ZpbHRlcicpO1xuXG4vKipcbiAqIEBhdXRob3IgVmljbyBAdmljb2NvdGVhXG4gKiBvcmlnaW5hbCBmaWx0ZXIgaHR0cHM6Ly9naXRodWIuY29tL2V2YW53L2dsZnguanMvYmxvYi9tYXN0ZXIvc3JjL2ZpbHRlcnMvYmx1ci90aWx0c2hpZnQuanMgYnkgRXZhbiBXYWxsYWNlIDogaHR0cDovL21hZGVieWV2YW4uY29tL1xuICovXG5cbi8qKlxuICogQSBUaWx0U2hpZnRZRmlsdGVyLlxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5UaWx0U2hpZnRBeGlzRmlsdGVyXG4gKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzXG4gKi9cbmZ1bmN0aW9uIFRpbHRTaGlmdFlGaWx0ZXIoKVxue1xuICAgIFRpbHRTaGlmdEF4aXNGaWx0ZXIuY2FsbCh0aGlzKTtcbn1cblxuVGlsdFNoaWZ0WUZpbHRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFRpbHRTaGlmdEF4aXNGaWx0ZXIucHJvdG90eXBlKTtcblRpbHRTaGlmdFlGaWx0ZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gVGlsdFNoaWZ0WUZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gVGlsdFNoaWZ0WUZpbHRlcjtcblxuLyoqXG4gKiBVcGRhdGVzIHRoZSBmaWx0ZXIgZGVsdGEgdmFsdWVzLlxuICpcbiAqL1xuVGlsdFNoaWZ0WUZpbHRlci5wcm90b3R5cGUudXBkYXRlRGVsdGEgPSBmdW5jdGlvbiAoKVxue1xuICAgIHZhciBkeCA9IHRoaXMudW5pZm9ybXMuZW5kLnZhbHVlLnggLSB0aGlzLnVuaWZvcm1zLnN0YXJ0LnZhbHVlLng7XG4gICAgdmFyIGR5ID0gdGhpcy51bmlmb3Jtcy5lbmQudmFsdWUueSAtIHRoaXMudW5pZm9ybXMuc3RhcnQudmFsdWUueTtcbiAgICB2YXIgZCA9IE1hdGguc3FydChkeCAqIGR4ICsgZHkgKiBkeSk7XG5cbiAgICB0aGlzLnVuaWZvcm1zLmRlbHRhLnZhbHVlLnggPSAtZHkgLyBkO1xuICAgIHRoaXMudW5pZm9ybXMuZGVsdGEudmFsdWUueSA9IGR4IC8gZDtcbn07XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uLy4uL2NvcmUnKTtcbi8vIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL3N1YnN0YWNrL2JyZnMvaXNzdWVzLzI1XG5cblxuLyoqXG4gKiBUaGlzIGZpbHRlciBhcHBsaWVzIGEgdHdpc3QgZWZmZWN0IG1ha2luZyBkaXNwbGF5IG9iamVjdHMgYXBwZWFyIHR3aXN0ZWQgaW4gdGhlIGdpdmVuIGRpcmVjdGlvbi5cbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQWJzdHJhY3RGaWx0ZXJcbiAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnNcbiAqL1xuZnVuY3Rpb24gVHdpc3RGaWx0ZXIoKVxue1xuICAgIGNvcmUuQWJzdHJhY3RGaWx0ZXIuY2FsbCh0aGlzLFxuICAgICAgICAvLyB2ZXJ0ZXggc2hhZGVyXG4gICAgICAgIG51bGwsXG4gICAgICAgIC8vIGZyYWdtZW50IHNoYWRlclxuICAgICAgICBcInByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xcblxcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xcblxcbnVuaWZvcm0gc2FtcGxlcjJEIHVTYW1wbGVyO1xcbnVuaWZvcm0gZmxvYXQgcmFkaXVzO1xcbnVuaWZvcm0gZmxvYXQgYW5nbGU7XFxudW5pZm9ybSB2ZWMyIG9mZnNldDtcXG5cXG52b2lkIG1haW4odm9pZClcXG57XFxuICAgdmVjMiBjb29yZCA9IHZUZXh0dXJlQ29vcmQgLSBvZmZzZXQ7XFxuICAgZmxvYXQgZGlzdCA9IGxlbmd0aChjb29yZCk7XFxuXFxuICAgaWYgKGRpc3QgPCByYWRpdXMpXFxuICAge1xcbiAgICAgICBmbG9hdCByYXRpbyA9IChyYWRpdXMgLSBkaXN0KSAvIHJhZGl1cztcXG4gICAgICAgZmxvYXQgYW5nbGVNb2QgPSByYXRpbyAqIHJhdGlvICogYW5nbGU7XFxuICAgICAgIGZsb2F0IHMgPSBzaW4oYW5nbGVNb2QpO1xcbiAgICAgICBmbG9hdCBjID0gY29zKGFuZ2xlTW9kKTtcXG4gICAgICAgY29vcmQgPSB2ZWMyKGNvb3JkLnggKiBjIC0gY29vcmQueSAqIHMsIGNvb3JkLnggKiBzICsgY29vcmQueSAqIGMpO1xcbiAgIH1cXG5cXG4gICBnbF9GcmFnQ29sb3IgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIGNvb3JkK29mZnNldCk7XFxufVxcblwiLFxuICAgICAgICAvLyBjdXN0b20gdW5pZm9ybXNcbiAgICAgICAge1xuICAgICAgICAgICAgcmFkaXVzOiAgICAgeyB0eXBlOiAnMWYnLCB2YWx1ZTogMC41IH0sXG4gICAgICAgICAgICBhbmdsZTogICAgICB7IHR5cGU6ICcxZicsIHZhbHVlOiA1IH0sXG4gICAgICAgICAgICBvZmZzZXQ6ICAgICB7IHR5cGU6ICd2MicsIHZhbHVlOiB7IHg6IDAuNSwgeTogMC41IH0gfVxuICAgICAgICB9XG4gICAgKTtcbn1cblxuVHdpc3RGaWx0ZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShjb3JlLkFic3RyYWN0RmlsdGVyLnByb3RvdHlwZSk7XG5Ud2lzdEZpbHRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBUd2lzdEZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gVHdpc3RGaWx0ZXI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKFR3aXN0RmlsdGVyLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFRoaXMgcG9pbnQgZGVzY3JpYmVzIHRoZSB0aGUgb2Zmc2V0IG9mIHRoZSB0d2lzdC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuUG9pbnR9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5Ud2lzdEZpbHRlciNcbiAgICAgKi9cbiAgICBvZmZzZXQ6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy51bmlmb3Jtcy5vZmZzZXQudmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLm9mZnNldC52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFRoaXMgcmFkaXVzIG9mIHRoZSB0d2lzdC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLlR3aXN0RmlsdGVyI1xuICAgICAqL1xuICAgIHJhZGl1czoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVuaWZvcm1zLnJhZGl1cy52YWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudW5pZm9ybXMucmFkaXVzLnZhbHVlID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVGhpcyBhbmdsZSBvZiB0aGUgdHdpc3QuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5Ud2lzdEZpbHRlciNcbiAgICAgKi9cbiAgICBhbmdsZToge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVuaWZvcm1zLmFuZ2xlLnZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy5hbmdsZS52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfVxufSk7XG4iLCIvLyBydW4gdGhlIHBvbHlmaWxsc1xucmVxdWlyZSgnLi9wb2x5ZmlsbCcpO1xuXG52YXIgY29yZSA9IG1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9jb3JlJyk7XG5cbi8vIGFkZCBjb3JlIHBsdWdpbnMuXG5jb3JlLmV4dHJhcyAgICAgICAgID0gcmVxdWlyZSgnLi9leHRyYXMnKTtcbmNvcmUuZmlsdGVycyAgICAgICAgPSByZXF1aXJlKCcuL2ZpbHRlcnMnKTtcbmNvcmUuaW50ZXJhY3Rpb24gICAgPSByZXF1aXJlKCcuL2ludGVyYWN0aW9uJyk7XG5jb3JlLmxvYWRlcnMgICAgICAgID0gcmVxdWlyZSgnLi9sb2FkZXJzJyk7XG5jb3JlLm1lc2ggICAgICAgICAgID0gcmVxdWlyZSgnLi9tZXNoJyk7XG5jb3JlLmFjY2Vzc2liaWxpdHkgID0gcmVxdWlyZSgnLi9hY2Nlc3NpYmlsaXR5Jyk7XG5cbi8vIGV4cG9ydCBhIHByZW1hZGUgbG9hZGVyIGluc3RhbmNlXG4vKipcbiAqIEEgcHJlbWFkZSBpbnN0YW5jZSBvZiB0aGUgbG9hZGVyIHRoYXQgY2FuIGJlIHVzZWQgdG8gbG9hZGVyIHJlc291cmNlcy5cbiAqXG4gKiBAbmFtZSBsb2FkZXJcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcHJvcGVydHkge1BJWEkubG9hZGVycy5Mb2FkZXJ9XG4gKi9cbmNvcmUubG9hZGVyID0gbmV3IGNvcmUubG9hZGVycy5Mb2FkZXIoKTtcblxuLy8gbWl4aW4gdGhlIGRlcHJlY2F0aW9uIGZlYXR1cmVzLlxuT2JqZWN0LmFzc2lnbihjb3JlLCByZXF1aXJlKCcuL2RlcHJlY2F0aW9uJykpO1xuXG4vLyBBbHdheXMgZXhwb3J0IHBpeGkgZ2xvYmFsbHkuXG5nbG9iYWwuUElYSSA9IGNvcmU7XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uL2NvcmUnKTtcblxuLyoqXG4gKiBIb2xkcyBhbGwgaW5mb3JtYXRpb24gcmVsYXRlZCB0byBhbiBJbnRlcmFjdGlvbiBldmVudFxuICpcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWEkuaW50ZXJhY3Rpb25cbiAqL1xuZnVuY3Rpb24gSW50ZXJhY3Rpb25EYXRhKClcbntcbiAgICAvKipcbiAgICAgKiBUaGlzIHBvaW50IHN0b3JlcyB0aGUgZ2xvYmFsIGNvb3JkcyBvZiB3aGVyZSB0aGUgdG91Y2gvbW91c2UgZXZlbnQgaGFwcGVuZWRcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuUG9pbnR9XG4gICAgICovXG4gICAgdGhpcy5nbG9iYWwgPSBuZXcgY29yZS5Qb2ludCgpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHRhcmdldCBTcHJpdGUgdGhhdCB3YXMgaW50ZXJhY3RlZCB3aXRoXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlNwcml0ZX1cbiAgICAgKi9cbiAgICB0aGlzLnRhcmdldCA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBXaGVuIHBhc3NlZCB0byBhbiBldmVudCBoYW5kbGVyLCB0aGlzIHdpbGwgYmUgdGhlIG9yaWdpbmFsIERPTSBFdmVudCB0aGF0IHdhcyBjYXB0dXJlZFxuICAgICAqXG4gICAgICogQG1lbWJlciB7RXZlbnR9XG4gICAgICovXG4gICAgdGhpcy5vcmlnaW5hbEV2ZW50ID0gbnVsbDtcbn1cblxuSW50ZXJhY3Rpb25EYXRhLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IEludGVyYWN0aW9uRGF0YTtcbm1vZHVsZS5leHBvcnRzID0gSW50ZXJhY3Rpb25EYXRhO1xuXG4vKipcbiAqIFRoaXMgd2lsbCByZXR1cm4gdGhlIGxvY2FsIGNvb3JkaW5hdGVzIG9mIHRoZSBzcGVjaWZpZWQgZGlzcGxheU9iamVjdCBmb3IgdGhpcyBJbnRlcmFjdGlvbkRhdGFcbiAqXG4gKiBAcGFyYW0gZGlzcGxheU9iamVjdCB7UElYSS5EaXNwbGF5T2JqZWN0fSBUaGUgRGlzcGxheU9iamVjdCB0aGF0IHlvdSB3b3VsZCBsaWtlIHRoZSBsb2NhbCBjb29yZHMgb2ZmXG4gKiBAcGFyYW0gW3BvaW50XSB7UElYSS5Qb2ludH0gQSBQb2ludCBvYmplY3QgaW4gd2hpY2ggdG8gc3RvcmUgdGhlIHZhbHVlLCBvcHRpb25hbCAob3RoZXJ3aXNlIHdpbGwgY3JlYXRlIGEgbmV3IHBvaW50KVxuICogQHBhcmFtIFtnbG9iYWxQb3NdIHtQSVhJLlBvaW50fSBBIFBvaW50IG9iamVjdCBjb250YWluaW5nIHlvdXIgY3VzdG9tIGdsb2JhbCBjb29yZHMsIG9wdGlvbmFsIChvdGhlcndpc2Ugd2lsbCB1c2UgdGhlIGN1cnJlbnQgZ2xvYmFsIGNvb3JkcylcbiAqIEByZXR1cm4ge1BJWEkuUG9pbnR9IEEgcG9pbnQgY29udGFpbmluZyB0aGUgY29vcmRpbmF0ZXMgb2YgdGhlIEludGVyYWN0aW9uRGF0YSBwb3NpdGlvbiByZWxhdGl2ZSB0byB0aGUgRGlzcGxheU9iamVjdFxuICovXG5JbnRlcmFjdGlvbkRhdGEucHJvdG90eXBlLmdldExvY2FsUG9zaXRpb24gPSBmdW5jdGlvbiAoZGlzcGxheU9iamVjdCwgcG9pbnQsIGdsb2JhbFBvcylcbntcbiAgICByZXR1cm4gZGlzcGxheU9iamVjdC53b3JsZFRyYW5zZm9ybS5hcHBseUludmVyc2UoZ2xvYmFsUG9zIHx8IHRoaXMuZ2xvYmFsLCBwb2ludCk7XG59O1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi9jb3JlJyksXG4gICAgSW50ZXJhY3Rpb25EYXRhID0gcmVxdWlyZSgnLi9JbnRlcmFjdGlvbkRhdGEnKTtcblxuLy8gTWl4IGludGVyYWN0aXZlVGFyZ2V0IGludG8gY29yZS5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZVxuT2JqZWN0LmFzc2lnbihcbiAgICBjb3JlLkRpc3BsYXlPYmplY3QucHJvdG90eXBlLFxuICAgIHJlcXVpcmUoJy4vaW50ZXJhY3RpdmVUYXJnZXQnKVxuKTtcblxuLyoqXG4gKiBUaGUgaW50ZXJhY3Rpb24gbWFuYWdlciBkZWFscyB3aXRoIG1vdXNlIGFuZCB0b3VjaCBldmVudHMuIEFueSBEaXNwbGF5T2JqZWN0IGNhbiBiZSBpbnRlcmFjdGl2ZVxuICogaWYgaXRzIGludGVyYWN0aXZlIHBhcmFtZXRlciBpcyBzZXQgdG8gdHJ1ZVxuICogVGhpcyBtYW5hZ2VyIGFsc28gc3VwcG9ydHMgbXVsdGl0b3VjaC5cbiAqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJLmludGVyYWN0aW9uXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuQ2FudmFzUmVuZGVyZXJ8UElYSS5XZWJHTFJlbmRlcmVyfSBBIHJlZmVyZW5jZSB0byB0aGUgY3VycmVudCByZW5kZXJlclxuICogQHBhcmFtIFtvcHRpb25zXSB7b2JqZWN0fVxuICogQHBhcmFtIFtvcHRpb25zLmF1dG9QcmV2ZW50RGVmYXVsdD10cnVlXSB7Ym9vbGVhbn0gU2hvdWxkIHRoZSBtYW5hZ2VyIGF1dG9tYXRpY2FsbHkgcHJldmVudCBkZWZhdWx0IGJyb3dzZXIgYWN0aW9ucy5cbiAqIEBwYXJhbSBbb3B0aW9ucy5pbnRlcmFjdGlvbkZyZXF1ZW5jeT0xMF0ge251bWJlcn0gRnJlcXVlbmN5IGluY3JlYXNlcyB0aGUgaW50ZXJhY3Rpb24gZXZlbnRzIHdpbGwgYmUgY2hlY2tlZC5cbiAqL1xuZnVuY3Rpb24gSW50ZXJhY3Rpb25NYW5hZ2VyKHJlbmRlcmVyLCBvcHRpb25zKVxue1xuICAgIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuXG4gICAgLyoqXG4gICAgICogVGhlIHJlbmRlcmVyIHRoaXMgaW50ZXJhY3Rpb24gbWFuYWdlciB3b3JrcyBmb3IuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlN5c3RlbVJlbmRlcmVyfVxuICAgICAqL1xuICAgIHRoaXMucmVuZGVyZXIgPSByZW5kZXJlcjtcblxuICAgIC8qKlxuICAgICAqIFNob3VsZCBkZWZhdWx0IGJyb3dzZXIgYWN0aW9ucyBhdXRvbWF0aWNhbGx5IGJlIHByZXZlbnRlZC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICogQGRlZmF1bHQgdHJ1ZVxuICAgICAqL1xuICAgIHRoaXMuYXV0b1ByZXZlbnREZWZhdWx0ID0gb3B0aW9ucy5hdXRvUHJldmVudERlZmF1bHQgIT09IHVuZGVmaW5lZCA/IG9wdGlvbnMuYXV0b1ByZXZlbnREZWZhdWx0IDogdHJ1ZTtcblxuICAgIC8qKlxuICAgICAqIEFzIHRoaXMgZnJlcXVlbmN5IGluY3JlYXNlcyB0aGUgaW50ZXJhY3Rpb24gZXZlbnRzIHdpbGwgYmUgY2hlY2tlZCBtb3JlIG9mdGVuLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDEwXG4gICAgICovXG4gICAgdGhpcy5pbnRlcmFjdGlvbkZyZXF1ZW5jeSA9IG9wdGlvbnMuaW50ZXJhY3Rpb25GcmVxdWVuY3kgfHwgMTA7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgbW91c2UgZGF0YVxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5pbnRlcmFjdGlvbi5JbnRlcmFjdGlvbkRhdGF9XG4gICAgICovXG4gICAgdGhpcy5tb3VzZSA9IG5ldyBJbnRlcmFjdGlvbkRhdGEoKTtcblxuICAgIC8qKlxuICAgICAqIEFuIGV2ZW50IGRhdGEgb2JqZWN0IHRvIGhhbmRsZSBhbGwgdGhlIGV2ZW50IHRyYWNraW5nL2Rpc3BhdGNoaW5nXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtvYmplY3R9XG4gICAgICovXG4gICAgdGhpcy5ldmVudERhdGEgPSB7XG4gICAgICAgIHN0b3BwZWQ6IGZhbHNlLFxuICAgICAgICB0YXJnZXQ6IG51bGwsXG4gICAgICAgIHR5cGU6IG51bGwsXG4gICAgICAgIGRhdGE6IHRoaXMubW91c2UsXG4gICAgICAgIHN0b3BQcm9wYWdhdGlvbjpmdW5jdGlvbigpe1xuICAgICAgICAgICAgdGhpcy5zdG9wcGVkID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH07XG5cbiAgICAvKipcbiAgICAgKiBUaW55IGxpdHRsZSBpbnRlcmFjdGl2ZURhdGEgcG9vbCAhXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLmludGVyYWN0aW9uLkludGVyYWN0aW9uRGF0YVtdfVxuICAgICAqL1xuICAgIHRoaXMuaW50ZXJhY3RpdmVEYXRhUG9vbCA9IFtdO1xuXG4gICAgLyoqXG4gICAgICogVGhlIERPTSBlbGVtZW50IHRvIGJpbmQgdG8uXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtIVE1MRWxlbWVudH1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuaW50ZXJhY3Rpb25ET01FbGVtZW50ID0gbnVsbDtcblxuICAgIC8qKlxuICAgICAqIEhhdmUgZXZlbnRzIGJlZW4gYXR0YWNoZWQgdG8gdGhlIGRvbSBlbGVtZW50P1xuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuZXZlbnRzQWRkZWQgPSBmYWxzZTtcblxuICAgIC8vdGhpcyB3aWxsIG1ha2UgaXQgc28gdGhhdCB5b3UgZG9uJ3QgaGF2ZSB0byBjYWxsIGJpbmQgYWxsIHRoZSB0aW1lXG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtGdW5jdGlvbn1cbiAgICAgKi9cbiAgICB0aGlzLm9uTW91c2VVcCA9IHRoaXMub25Nb3VzZVVwLmJpbmQodGhpcyk7XG4gICAgdGhpcy5wcm9jZXNzTW91c2VVcCA9IHRoaXMucHJvY2Vzc01vdXNlVXAuYmluZCggdGhpcyApO1xuXG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtGdW5jdGlvbn1cbiAgICAgKi9cbiAgICB0aGlzLm9uTW91c2VEb3duID0gdGhpcy5vbk1vdXNlRG93bi5iaW5kKHRoaXMpO1xuICAgIHRoaXMucHJvY2Vzc01vdXNlRG93biA9IHRoaXMucHJvY2Vzc01vdXNlRG93bi5iaW5kKCB0aGlzICk7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtGdW5jdGlvbn1cbiAgICAgKi9cbiAgICB0aGlzLm9uTW91c2VNb3ZlID0gdGhpcy5vbk1vdXNlTW92ZS5iaW5kKCB0aGlzICk7XG4gICAgdGhpcy5wcm9jZXNzTW91c2VNb3ZlID0gdGhpcy5wcm9jZXNzTW91c2VNb3ZlLmJpbmQoIHRoaXMgKTtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge0Z1bmN0aW9ufVxuICAgICAqL1xuICAgIHRoaXMub25Nb3VzZU91dCA9IHRoaXMub25Nb3VzZU91dC5iaW5kKHRoaXMpO1xuICAgIHRoaXMucHJvY2Vzc01vdXNlT3Zlck91dCA9IHRoaXMucHJvY2Vzc01vdXNlT3Zlck91dC5iaW5kKCB0aGlzICk7XG5cblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge0Z1bmN0aW9ufVxuICAgICAqL1xuICAgIHRoaXMub25Ub3VjaFN0YXJ0ID0gdGhpcy5vblRvdWNoU3RhcnQuYmluZCh0aGlzKTtcbiAgICB0aGlzLnByb2Nlc3NUb3VjaFN0YXJ0ID0gdGhpcy5wcm9jZXNzVG91Y2hTdGFydC5iaW5kKHRoaXMpO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7RnVuY3Rpb259XG4gICAgICovXG4gICAgdGhpcy5vblRvdWNoRW5kID0gdGhpcy5vblRvdWNoRW5kLmJpbmQodGhpcyk7XG4gICAgdGhpcy5wcm9jZXNzVG91Y2hFbmQgPSB0aGlzLnByb2Nlc3NUb3VjaEVuZC5iaW5kKHRoaXMpO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7RnVuY3Rpb259XG4gICAgICovXG4gICAgdGhpcy5vblRvdWNoTW92ZSA9IHRoaXMub25Ub3VjaE1vdmUuYmluZCh0aGlzKTtcbiAgICB0aGlzLnByb2Nlc3NUb3VjaE1vdmUgPSB0aGlzLnByb2Nlc3NUb3VjaE1vdmUuYmluZCh0aGlzKTtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLmxhc3QgPSAwO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGNzcyBzdHlsZSBvZiB0aGUgY3Vyc29yIHRoYXQgaXMgYmVpbmcgdXNlZFxuICAgICAqIEBtZW1iZXIge3N0cmluZ31cbiAgICAgKi9cbiAgICB0aGlzLmN1cnJlbnRDdXJzb3JTdHlsZSA9ICdpbmhlcml0JztcblxuICAgIC8qKlxuICAgICAqIEludGVybmFsIGNhY2hlZCB2YXJcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlBvaW50fVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fdGVtcFBvaW50ID0gbmV3IGNvcmUuUG9pbnQoKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBjdXJyZW50IHJlc29sdXRpb25cbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy5yZXNvbHV0aW9uID0gMTtcblxuICAgIHRoaXMuc2V0VGFyZ2V0RWxlbWVudCh0aGlzLnJlbmRlcmVyLnZpZXcsIHRoaXMucmVuZGVyZXIucmVzb2x1dGlvbik7XG59XG5cbkludGVyYWN0aW9uTWFuYWdlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBJbnRlcmFjdGlvbk1hbmFnZXI7XG5tb2R1bGUuZXhwb3J0cyA9IEludGVyYWN0aW9uTWFuYWdlcjtcblxuLyoqXG4gKiBTZXRzIHRoZSBET00gZWxlbWVudCB3aGljaCB3aWxsIHJlY2VpdmUgbW91c2UvdG91Y2ggZXZlbnRzLiBUaGlzIGlzIHVzZWZ1bCBmb3Igd2hlbiB5b3UgaGF2ZVxuICogb3RoZXIgRE9NIGVsZW1lbnRzIG9uIHRvcCBvZiB0aGUgcmVuZGVyZXJzIENhbnZhcyBlbGVtZW50LiBXaXRoIHRoaXMgeW91J2xsIGJlIGJhbGUgdG8gZGVsZXRlZ2F0ZVxuICogYW5vdGhlciBET00gZWxlbWVudCB0byByZWNlaXZlIHRob3NlIGV2ZW50cy5cbiAqXG4gKiBAcGFyYW0gZWxlbWVudCB7SFRNTEVsZW1lbnR9IHRoZSBET00gZWxlbWVudCB3aGljaCB3aWxsIHJlY2VpdmUgbW91c2UgYW5kIHRvdWNoIGV2ZW50cy5cbiAqIEBwYXJhbSBbcmVzb2x1dGlvbj0xXSB7bnVtYmVyfSBUSGUgcmVzb2x1dGlvbiBvZiB0aGUgbmV3IGVsZW1lbnQgKHJlbGF0aXZlIHRvIHRoZSBjYW52YXMpLlxuICogQHByaXZhdGVcbiAqL1xuSW50ZXJhY3Rpb25NYW5hZ2VyLnByb3RvdHlwZS5zZXRUYXJnZXRFbGVtZW50ID0gZnVuY3Rpb24gKGVsZW1lbnQsIHJlc29sdXRpb24pXG57XG4gICAgdGhpcy5yZW1vdmVFdmVudHMoKTtcblxuICAgIHRoaXMuaW50ZXJhY3Rpb25ET01FbGVtZW50ID0gZWxlbWVudDtcblxuICAgIHRoaXMucmVzb2x1dGlvbiA9IHJlc29sdXRpb24gfHwgMTtcblxuICAgIHRoaXMuYWRkRXZlbnRzKCk7XG59O1xuXG4vKipcbiAqIFJlZ2lzdGVycyBhbGwgdGhlIERPTSBldmVudHNcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5JbnRlcmFjdGlvbk1hbmFnZXIucHJvdG90eXBlLmFkZEV2ZW50cyA9IGZ1bmN0aW9uICgpXG57XG4gICAgaWYgKCF0aGlzLmludGVyYWN0aW9uRE9NRWxlbWVudClcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb3JlLnRpY2tlci5zaGFyZWQuYWRkKHRoaXMudXBkYXRlLCB0aGlzKTtcblxuICAgIGlmICh3aW5kb3cubmF2aWdhdG9yLm1zUG9pbnRlckVuYWJsZWQpXG4gICAge1xuICAgICAgICB0aGlzLmludGVyYWN0aW9uRE9NRWxlbWVudC5zdHlsZVsnLW1zLWNvbnRlbnQtem9vbWluZyddID0gJ25vbmUnO1xuICAgICAgICB0aGlzLmludGVyYWN0aW9uRE9NRWxlbWVudC5zdHlsZVsnLW1zLXRvdWNoLWFjdGlvbiddID0gJ25vbmUnO1xuICAgIH1cblxuICAgIHdpbmRvdy5kb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdtb3VzZW1vdmUnLCAgICB0aGlzLm9uTW91c2VNb3ZlLCB0cnVlKTtcbiAgICB0aGlzLmludGVyYWN0aW9uRE9NRWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCdtb3VzZWRvd24nLCAgICB0aGlzLm9uTW91c2VEb3duLCB0cnVlKTtcbiAgICB0aGlzLmludGVyYWN0aW9uRE9NRWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCdtb3VzZW91dCcsICAgICB0aGlzLm9uTW91c2VPdXQsIHRydWUpO1xuXG4gICAgdGhpcy5pbnRlcmFjdGlvbkRPTUVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigndG91Y2hzdGFydCcsICAgdGhpcy5vblRvdWNoU3RhcnQsIHRydWUpO1xuICAgIHRoaXMuaW50ZXJhY3Rpb25ET01FbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ3RvdWNoZW5kJywgICAgIHRoaXMub25Ub3VjaEVuZCwgdHJ1ZSk7XG4gICAgdGhpcy5pbnRlcmFjdGlvbkRPTUVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigndG91Y2htb3ZlJywgICAgdGhpcy5vblRvdWNoTW92ZSwgdHJ1ZSk7XG5cbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignbW91c2V1cCcsICB0aGlzLm9uTW91c2VVcCwgdHJ1ZSk7XG5cbiAgICB0aGlzLmV2ZW50c0FkZGVkID0gdHJ1ZTtcbn07XG5cbi8qKlxuICogUmVtb3ZlcyBhbGwgdGhlIERPTSBldmVudHMgdGhhdCB3ZXJlIHByZXZpb3VzbHkgcmVnaXN0ZXJlZFxuICpcbiAqIEBwcml2YXRlXG4gKi9cbkludGVyYWN0aW9uTWFuYWdlci5wcm90b3R5cGUucmVtb3ZlRXZlbnRzID0gZnVuY3Rpb24gKClcbntcbiAgICBpZiAoIXRoaXMuaW50ZXJhY3Rpb25ET01FbGVtZW50KVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvcmUudGlja2VyLnNoYXJlZC5yZW1vdmUodGhpcy51cGRhdGUpO1xuXG4gICAgaWYgKHdpbmRvdy5uYXZpZ2F0b3IubXNQb2ludGVyRW5hYmxlZClcbiAgICB7XG4gICAgICAgIHRoaXMuaW50ZXJhY3Rpb25ET01FbGVtZW50LnN0eWxlWyctbXMtY29udGVudC16b29taW5nJ10gPSAnJztcbiAgICAgICAgdGhpcy5pbnRlcmFjdGlvbkRPTUVsZW1lbnQuc3R5bGVbJy1tcy10b3VjaC1hY3Rpb24nXSA9ICcnO1xuICAgIH1cblxuICAgIHdpbmRvdy5kb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdtb3VzZW1vdmUnLCB0aGlzLm9uTW91c2VNb3ZlLCB0cnVlKTtcbiAgICB0aGlzLmludGVyYWN0aW9uRE9NRWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdtb3VzZWRvd24nLCB0aGlzLm9uTW91c2VEb3duLCB0cnVlKTtcbiAgICB0aGlzLmludGVyYWN0aW9uRE9NRWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdtb3VzZW91dCcsICB0aGlzLm9uTW91c2VPdXQsIHRydWUpO1xuXG4gICAgdGhpcy5pbnRlcmFjdGlvbkRPTUVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigndG91Y2hzdGFydCcsIHRoaXMub25Ub3VjaFN0YXJ0LCB0cnVlKTtcbiAgICB0aGlzLmludGVyYWN0aW9uRE9NRWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCd0b3VjaGVuZCcsICB0aGlzLm9uVG91Y2hFbmQsIHRydWUpO1xuICAgIHRoaXMuaW50ZXJhY3Rpb25ET01FbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3RvdWNobW92ZScsIHRoaXMub25Ub3VjaE1vdmUsIHRydWUpO1xuXG4gICAgdGhpcy5pbnRlcmFjdGlvbkRPTUVsZW1lbnQgPSBudWxsO1xuXG4gICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21vdXNldXAnLCAgdGhpcy5vbk1vdXNlVXAsIHRydWUpO1xuXG4gICAgdGhpcy5ldmVudHNBZGRlZCA9IGZhbHNlO1xufTtcblxuLyoqXG4gKiBVcGRhdGVzIHRoZSBzdGF0ZSBvZiBpbnRlcmFjdGl2ZSBvYmplY3RzLlxuICogSW52b2tlZCBieSBhIHRocm90dGxlZCB0aWNrZXIgdXBkYXRlIGZyb21cbiAqIHtAbGluayBQSVhJLnRpY2tlci5zaGFyZWR9LlxuICpcbiAqIEBwYXJhbSBkZWx0YVRpbWUge251bWJlcn1cbiAqL1xuSW50ZXJhY3Rpb25NYW5hZ2VyLnByb3RvdHlwZS51cGRhdGUgPSBmdW5jdGlvbiAoZGVsdGFUaW1lKVxue1xuICAgIHRoaXMuX2RlbHRhVGltZSArPSBkZWx0YVRpbWU7XG5cbiAgICBpZiAodGhpcy5fZGVsdGFUaW1lIDwgdGhpcy5pbnRlcmFjdGlvbkZyZXF1ZW5jeSlcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLl9kZWx0YVRpbWUgPSAwO1xuXG4gICAgaWYgKCF0aGlzLmludGVyYWN0aW9uRE9NRWxlbWVudClcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBpZiB0aGUgdXNlciBtb3ZlIHRoZSBtb3VzZSB0aGlzIGNoZWNrIGhhcyBhbHJlYWR5IGJlZW4gZGZvbmUgdXNpbmcgdGhlIG1vdXNlIG1vdmUhXG4gICAgaWYodGhpcy5kaWRNb3ZlKVxuICAgIHtcbiAgICAgICAgdGhpcy5kaWRNb3ZlID0gZmFsc2U7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLmN1cnNvciA9ICdpbmhlcml0JztcblxuICAgIHRoaXMucHJvY2Vzc0ludGVyYWN0aXZlKHRoaXMubW91c2UuZ2xvYmFsLCB0aGlzLnJlbmRlcmVyLl9sYXN0T2JqZWN0UmVuZGVyZWQsIHRoaXMucHJvY2Vzc01vdXNlT3Zlck91dCwgdHJ1ZSApO1xuXG4gICAgaWYgKHRoaXMuY3VycmVudEN1cnNvclN0eWxlICE9PSB0aGlzLmN1cnNvcilcbiAgICB7XG4gICAgICAgIHRoaXMuY3VycmVudEN1cnNvclN0eWxlID0gdGhpcy5jdXJzb3I7XG4gICAgICAgIHRoaXMuaW50ZXJhY3Rpb25ET01FbGVtZW50LnN0eWxlLmN1cnNvciA9IHRoaXMuY3Vyc29yO1xuICAgIH1cblxuICAgIC8vVE9ET1xufTtcblxuLyoqXG4gKiBEaXNwYXRjaGVzIGFuIGV2ZW50IG9uIHRoZSBkaXNwbGF5IG9iamVjdCB0aGF0IHdhcyBpbnRlcmFjdGVkIHdpdGhcbiAqXG4gKiBAcGFyYW0gZGlzcGxheU9iamVjdCB7UElYSS5Db250YWluZXJ8UElYSS5TcHJpdGV8UElYSS5leHRyYXMuVGlsaW5nU3ByaXRlfSB0aGUgZGlzcGxheSBvYmplY3QgaW4gcXVlc3Rpb25cbiAqIEBwYXJhbSBldmVudFN0cmluZyB7c3RyaW5nfSB0aGUgbmFtZSBvZiB0aGUgZXZlbnQgKGUuZywgbW91c2Vkb3duKVxuICogQHBhcmFtIGV2ZW50RGF0YSB7b2JqZWN0fSB0aGUgZXZlbnQgZGF0YSBvYmplY3RcbiAqIEBwcml2YXRlXG4gKi9cbkludGVyYWN0aW9uTWFuYWdlci5wcm90b3R5cGUuZGlzcGF0Y2hFdmVudCA9IGZ1bmN0aW9uICggZGlzcGxheU9iamVjdCwgZXZlbnRTdHJpbmcsIGV2ZW50RGF0YSApXG57XG4gICAgaWYoIWV2ZW50RGF0YS5zdG9wcGVkKVxuICAgIHtcbiAgICAgICAgZXZlbnREYXRhLnRhcmdldCA9IGRpc3BsYXlPYmplY3Q7XG4gICAgICAgIGV2ZW50RGF0YS50eXBlID0gZXZlbnRTdHJpbmc7XG5cbiAgICAgICAgZGlzcGxheU9iamVjdC5lbWl0KCBldmVudFN0cmluZywgZXZlbnREYXRhICk7XG5cbiAgICAgICAgaWYoIGRpc3BsYXlPYmplY3RbZXZlbnRTdHJpbmddIClcbiAgICAgICAge1xuICAgICAgICAgICAgZGlzcGxheU9iamVjdFtldmVudFN0cmluZ10oIGV2ZW50RGF0YSApO1xuICAgICAgICB9XG4gICAgfVxufTtcblxuLyoqXG4gKiBNYXBzIHggYW5kIHkgY29vcmRzIGZyb20gYSBET00gb2JqZWN0IGFuZCBtYXBzIHRoZW0gY29ycmVjdGx5IHRvIHRoZSBwaXhpIHZpZXcuIFRoZSByZXN1bHRpbmcgdmFsdWUgaXMgc3RvcmVkIGluIHRoZSBwb2ludC5cbiAqIFRoaXMgdGFrZXMgaW50byBhY2NvdW50IHRoZSBmYWN0IHRoYXQgdGhlIERPTSBlbGVtZW50IGNvdWxkIGJlIHNjYWxlZCBhbmQgcG9zaXRpb25lZCBhbnl3aGVyZSBvbiB0aGUgc2NyZWVuLlxuICpcbiAqIEBwYXJhbSAge1BJWEkuUG9pbnR9IHBvaW50IHRoZSBwb2ludCB0aGF0IHRoZSByZXN1bHQgd2lsbCBiZSBzdG9yZWQgaW5cbiAqIEBwYXJhbSAge251bWJlcn0geCAgICAgdGhlIHggY29vcmQgb2YgdGhlIHBvc2l0aW9uIHRvIG1hcFxuICogQHBhcmFtICB7bnVtYmVyfSB5ICAgICB0aGUgeSBjb29yZCBvZiB0aGUgcG9zaXRpb24gdG8gbWFwXG4gKi9cbkludGVyYWN0aW9uTWFuYWdlci5wcm90b3R5cGUubWFwUG9zaXRpb25Ub1BvaW50ID0gZnVuY3Rpb24gKCBwb2ludCwgeCwgeSApXG57XG4gICAgdmFyIHJlY3QgPSB0aGlzLmludGVyYWN0aW9uRE9NRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICBwb2ludC54ID0gKCAoIHggLSByZWN0LmxlZnQgKSAqICh0aGlzLmludGVyYWN0aW9uRE9NRWxlbWVudC53aWR0aCAgLyByZWN0LndpZHRoICApICkgLyB0aGlzLnJlc29sdXRpb247XG4gICAgcG9pbnQueSA9ICggKCB5IC0gcmVjdC50b3AgICkgKiAodGhpcy5pbnRlcmFjdGlvbkRPTUVsZW1lbnQuaGVpZ2h0IC8gcmVjdC5oZWlnaHQgKSApIC8gdGhpcy5yZXNvbHV0aW9uO1xufTtcblxuLyoqXG4gKiBUaGlzIGZ1bmN0aW9uIGlzIHByb3ZpZGVzIGEgbmVhdCB3YXkgb2YgY3Jhd2xpbmcgdGhyb3VnaCB0aGUgc2NlbmUgZ3JhcGggYW5kIHJ1bm5pbmcgYSBzcGVjaWZpZWQgZnVuY3Rpb24gb24gYWxsIGludGVyYWN0aXZlIG9iamVjdHMgaXQgZmluZHMuXG4gKiBJdCB3aWxsIGFsc28gdGFrZSBjYXJlIG9mIGhpdCB0ZXN0aW5nIHRoZSBpbnRlcmFjdGl2ZSBvYmplY3RzIGFuZCBwYXNzZXMgdGhlIGhpdCBhY3Jvc3MgaW4gdGhlIGZ1bmN0aW9uLlxuICpcbiAqIEBwYXJhbSAge1BJWEkuUG9pbnR9IHBvaW50IHRoZSBwb2ludCB0aGF0IGlzIHRlc3RlZCBmb3IgY29sbGlzaW9uXG4gKiBAcGFyYW0gIHtQSVhJLkNvbnRhaW5lcnxQSVhJLlNwcml0ZXxQSVhJLmV4dHJhcy5UaWxpbmdTcHJpdGV9IGRpc3BsYXlPYmplY3QgdGhlIGRpc3BsYXlPYmplY3QgdGhhdCB3aWxsIGJlIGhpdCB0ZXN0IChyZWN1cmNzaXZseSBjcmF3bHMgaXRzIGNoaWxkcmVuKVxuICogQHBhcmFtICB7RnVuY3Rpb259IGZ1bmMgdGhlIGZ1bmN0aW9uIHRoYXQgd2lsbCBiZSBjYWxsZWQgb24gZWFjaCBpbnRlcmFjdGl2ZSBvYmplY3QuIFRoZSBkaXNwbGF5T2JqZWN0IGFuZCBoaXQgd2lsbCBiZSBwYXNzZWQgdG8gdGhlIGZ1bmN0aW9uXG4gKiBAcGFyYW0gIHtib29sZWFufSBoaXRUZXN0IHRoaXMgaW5kaWNhdGVzIGlmIHRoZSBvYmplY3RzIGluc2lkZSBzaG91bGQgYmUgaGl0IHRlc3QgYWdhaW5zdCB0aGUgcG9pbnRcbiAqIEByZXR1cm4ge2Jvb2xlYW59IHJldHVybnMgdHJ1ZSBpZiB0aGUgZGlzcGxheU9iamVjdCBoaXQgdGhlIHBvaW50XG4gKi9cbkludGVyYWN0aW9uTWFuYWdlci5wcm90b3R5cGUucHJvY2Vzc0ludGVyYWN0aXZlID0gZnVuY3Rpb24gKHBvaW50LCBkaXNwbGF5T2JqZWN0LCBmdW5jLCBoaXRUZXN0LCBpbnRlcmFjdGl2ZSlcbntcbiAgICBpZighZGlzcGxheU9iamVjdCB8fCAhZGlzcGxheU9iamVjdC52aXNpYmxlKVxuICAgIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIC8vIFRvb2sgYSBsaXR0bGUgd2hpbGUgdG8gcmV3b3JrIHRoaXMgZnVuY3Rpb24gY29ycmVjdGx5ISBCdXQgbm93IGl0IGlzIGRvbmUgYW5kIG5pY2UgYW5kIG9wdGltaXNlZC4gXl9eXG4gICAgLy8gXG4gICAgLy8gVGhpcyBmdW5jdGlvbiB3aWxsIG5vdyBsb29wIHRocm91Z2ggYWxsIG9iamVjdHMgYW5kIHRoZW4gb25seSBoaXQgdGVzdCB0aGUgb2JqZWN0cyBpdCBIQVMgdG8sIG5vdCBhbGwgb2YgdGhlbS4gTVVDSCBmYXN0ZXIuLlxuICAgIC8vIEFuIG9iamVjdCB3aWxsIGJlIGhpdCB0ZXN0IGlmIHRoZSBmb2xsb3dpbmcgaXMgdHJ1ZTpcbiAgICAvLyBcbiAgICAvLyAxOiBJdCBpcyBpbnRlcmFjdGl2ZS5cbiAgICAvLyAyOiBJdCBiZWxvbmdzIHRvIGEgcGFyZW50IHRoYXQgaXMgaW50ZXJhY3RpdmUgQU5EIG9uZSBvZiB0aGUgcGFyZW50cyBjaGlsZHJlbiBoYXZlIG5vdCBhbHJlYWR5IGJlZW4gaGl0LlxuICAgIC8vIFxuICAgIC8vIEFzIGFub3RoZXIgbGl0dGxlIG9wdGltaXNhdGlvbiBvbmNlIGFuIGludGVyYWN0aXZlIG9iamVjdCBoYXMgYmVlbiBoaXQgd2UgY2FuIGNhcnJ5IG9uIHRocm91Z2ggdGhlIHNjZW5lZ3JhcGgsIGJ1dCB3ZSBrbm93IHRoYXQgdGhlcmUgd2lsbCBiZSBubyBtb3JlIGhpdHMhIFNvIHdlIGNhbiBhdm9pZCBleHRyYSBoaXQgdGVzdHNcbiAgICAvLyBBIGZpbmFsIG9wdGltaXNhdGlvbiBpcyB0aGF0IGFuIG9iamVjdCBpcyBub3QgaGl0IHRlc3QgZGlyZWN0bHkgaWYgYSBjaGlsZCBoYXMgYWxyZWFkeSBiZWVuIGhpdC5cbiAgICBcbiAgICB2YXIgaGl0ID0gZmFsc2UsXG4gICAgICAgIGludGVyYWN0aXZlUGFyZW50ID0gaW50ZXJhY3RpdmUgPSBkaXNwbGF5T2JqZWN0LmludGVyYWN0aXZlIHx8IGludGVyYWN0aXZlO1xuXG4gICAgLy8gaWYgdGhlIGRpc3BsYXlvYmplY3QgaGFzIGEgaGl0QXJlYSwgdGhlbiBpdCBkb2VzIG5vdCBuZWVkIHRvIGhpdFRlc3QgY2hpbGRyZW4uXG4gICAgaWYoZGlzcGxheU9iamVjdC5oaXRBcmVhKVxuICAgIHtcbiAgICAgICAgaW50ZXJhY3RpdmVQYXJlbnQgPSBmYWxzZTtcbiAgICB9XG5cbiAgICAvLyAqKiBGUkVFIFRJUCAqKiEgSWYgYW4gb2JqZWN0IGlzIG5vdCBpbnRlcmFjdHRpdmUgb3IgaGFzIG5vIGJ1dHRvbnMgaW4gaXQgKHN1Y2ggYXMgYSBnYW1lIHNjZW5lISkgc2V0IGludGVyYWN0aXZlQ2hpbGRyZW4gdG8gZmFsc2UgZm9yIHRoYXQgZGlzcGxheU9iamVjdC5cbiAgICAvLyBUaGlzIHdpbGwgYWxsb3cgcGl4aSB0byBjb21wbGV0bHkgaWdub3JlIGFuZCBieXBhc3MgY2hlY2tpbmcgdGhlIGRpc3BsYXlPYmplY3RzIGNoaWxkcmVuLlxuICAgIGlmKGRpc3BsYXlPYmplY3QuaW50ZXJhY3RpdmVDaGlsZHJlbilcbiAgICB7ICAgICAgIFxuICAgICAgICB2YXIgY2hpbGRyZW4gPSBkaXNwbGF5T2JqZWN0LmNoaWxkcmVuO1xuICAgICAgICBcbiAgICAgICAgZm9yICh2YXIgaSA9IGNoaWxkcmVuLmxlbmd0aC0xOyBpID49IDA7IGktLSlcbiAgICAgICAge1xuICAgICAgICAgICAgLy8gdGltZSB0byBnZXQgcmVjdXJzaXZlLi4gaWYgdGhpcyBmdW5jdGlvbiB3aWxsIHJldHVybiBpZiBzb210aGluZyBpcyBoaXQuLlxuICAgICAgICAgICAgaWYoIHRoaXMucHJvY2Vzc0ludGVyYWN0aXZlKHBvaW50LCBjaGlsZHJlbltpXSwgZnVuYywgaGl0VGVzdCwgaW50ZXJhY3RpdmVQYXJlbnQpIClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBoaXQgPSB0cnVlO1xuXG4gICAgICAgICAgICAgICAgLy8gd2Ugbm8gbG9uZ2VyIG5lZWQgdG8gaGl0IHRlc3QgYW55IG1vcmUgb2JqZWN0cyBpbiB0aGlzIGNvbnRhaW5lciBhcyB3ZSB3ZSBub3cga25vdyB0aGUgcGFyZW50IGhhcyBiZWVuIGhpdFxuICAgICAgICAgICAgICAgIGludGVyYWN0aXZlUGFyZW50ID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgLy8gSWYgdGhlIGNoaWxkIGlzIGludGVyYWN0aXZlICwgdGhhdCBtZWFucyB0aGF0IHRoZSBvYmplY3QgaGl0IHdhcyBhY3R1YWxseSBpbnRlcmFjdGl2ZSBhbmQgbm90IGp1c3QgdGhlIGNoaWxkIG9mIGFuIGludGVyYWN0aXZlIG9iamVjdC4gXG4gICAgICAgICAgICAgICAgLy8gVGhpcyBtZWFucyB3ZSBubyBsb25nZXIgbmVlZCB0byBoaXQgdGVzdCBhbnl0aGluZyBlbHNlLiBXZSBzdGlsbCBuZWVkIHRvIHJ1biB0aHJvdWdoIGFsbCBvYmplY3RzLCBidXQgd2UgZG9uJ3QgbmVlZCB0byBwZXJmb3JtIGFueSBoaXQgdGVzdHMuXG4gICAgICAgICAgICAgICAgaWYoY2hpbGRyZW5baV0uaW50ZXJhY3RpdmUpXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBoaXRUZXN0ID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gbm8gcG9pbnQgcnVubmluZyB0aGlzIGlmIHRoZSBpdGVtIGlzIG5vdCBpbnRlcmFjdGl2ZSBvciBkb2VzIG5vdCBoYXZlIGFuIGludGVyYWN0aXZlIHBhcmVudC5cbiAgICBpZihpbnRlcmFjdGl2ZSlcbiAgICB7XG4gICAgICAgIC8vIGlmIHdlIGFyZSBoaXQgdGVzdGluZyAoYXMgaW4gd2UgaGF2ZSBubyBoaXQgYW55IG9iamVjdHMgeWV0KVxuICAgICAgICAvLyBXZSBhbHNvIGRvbid0IG5lZWQgdG8gd29ycnkgYWJvdXQgaGl0IHRlc3RpbmcgaWYgb25jZSBvZiB0aGUgZGlzcGxheU9iamVjdHMgY2hpbGRyZW4gaGFzIGFscmVhZHkgYmVlbiBoaXQhXG4gICAgICAgIGlmKGhpdFRlc3QgJiYgIWhpdClcbiAgICAgICAgeyAgXG4gICAgICAgICAgICBpZihkaXNwbGF5T2JqZWN0LmhpdEFyZWEpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgZGlzcGxheU9iamVjdC53b3JsZFRyYW5zZm9ybS5hcHBseUludmVyc2UocG9pbnQsICB0aGlzLl90ZW1wUG9pbnQpO1xuICAgICAgICAgICAgICAgIGhpdCA9IGRpc3BsYXlPYmplY3QuaGl0QXJlYS5jb250YWlucyggdGhpcy5fdGVtcFBvaW50LngsIHRoaXMuX3RlbXBQb2ludC55ICk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmKGRpc3BsYXlPYmplY3QuY29udGFpbnNQb2ludClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBoaXQgPSBkaXNwbGF5T2JqZWN0LmNvbnRhaW5zUG9pbnQocG9pbnQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYoZGlzcGxheU9iamVjdC5pbnRlcmFjdGl2ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgZnVuYyhkaXNwbGF5T2JqZWN0LCBoaXQpOyBcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBoaXQ7XG4gIFxufTtcblxuXG4vKipcbiAqIElzIGNhbGxlZCB3aGVuIHRoZSBtb3VzZSBidXR0b24gaXMgcHJlc3NlZCBkb3duIG9uIHRoZSByZW5kZXJlciBlbGVtZW50XG4gKlxuICogQHBhcmFtIGV2ZW50IHtFdmVudH0gVGhlIERPTSBldmVudCBvZiBhIG1vdXNlIGJ1dHRvbiBiZWluZyBwcmVzc2VkIGRvd25cbiAqIEBwcml2YXRlXG4gKi9cbkludGVyYWN0aW9uTWFuYWdlci5wcm90b3R5cGUub25Nb3VzZURvd24gPSBmdW5jdGlvbiAoZXZlbnQpXG57XG4gICAgdGhpcy5tb3VzZS5vcmlnaW5hbEV2ZW50ID0gZXZlbnQ7XG4gICAgdGhpcy5ldmVudERhdGEuZGF0YSA9IHRoaXMubW91c2U7XG4gICAgdGhpcy5ldmVudERhdGEuc3RvcHBlZCA9IGZhbHNlO1xuXG4gICAgLy8gVXBkYXRlIGludGVybmFsIG1vdXNlIHJlZmVyZW5jZVxuICAgIHRoaXMubWFwUG9zaXRpb25Ub1BvaW50KCB0aGlzLm1vdXNlLmdsb2JhbCwgZXZlbnQuY2xpZW50WCwgZXZlbnQuY2xpZW50WSk7XG5cbiAgICBpZiAodGhpcy5hdXRvUHJldmVudERlZmF1bHQpXG4gICAge1xuICAgICAgICB0aGlzLm1vdXNlLm9yaWdpbmFsRXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICB9XG5cbiAgICB0aGlzLnByb2Nlc3NJbnRlcmFjdGl2ZSh0aGlzLm1vdXNlLmdsb2JhbCwgdGhpcy5yZW5kZXJlci5fbGFzdE9iamVjdFJlbmRlcmVkLCB0aGlzLnByb2Nlc3NNb3VzZURvd24sIHRydWUgKTtcbn07XG5cbi8qKlxuICogUHJvY2Vzc2VzIHRoZSByZXN1bHQgb2YgdGhlIG1vdXNlIGRvd24gY2hlY2sgYW5kIGRpc3BhdGNoZXMgdGhlIGV2ZW50IGlmIG5lZWQgYmVcbiAqXG4gKiBAcGFyYW0gZGlzcGxheU9iamVjdCB7UElYSS5Db250YWluZXJ8UElYSS5TcHJpdGV8UElYSS5leHRyYXMuVGlsaW5nU3ByaXRlfSBUaGUgZGlzcGxheSBvYmplY3QgdGhhdCB3YXMgdGVzdGVkXG4gKiBAcGFyYW0gaGl0IHtib29sZWFufSB0aGUgcmVzdWx0IG9mIHRoZSBoaXQgdGVzdCBvbiB0aGUgZGlzcGF5IG9iamVjdFxuICogQHByaXZhdGVcbiAqL1xuSW50ZXJhY3Rpb25NYW5hZ2VyLnByb3RvdHlwZS5wcm9jZXNzTW91c2VEb3duID0gZnVuY3Rpb24gKCBkaXNwbGF5T2JqZWN0LCBoaXQgKVxue1xuICAgIHZhciBlID0gdGhpcy5tb3VzZS5vcmlnaW5hbEV2ZW50O1xuICAgIFxuICAgIHZhciBpc1JpZ2h0QnV0dG9uID0gZS5idXR0b24gPT09IDIgfHwgZS53aGljaCA9PT0gMztcblxuICAgIGlmKGhpdClcbiAgICB7XG4gICAgICAgIGRpc3BsYXlPYmplY3RbIGlzUmlnaHRCdXR0b24gPyAnX2lzUmlnaHREb3duJyA6ICdfaXNMZWZ0RG93bicgXSA9IHRydWU7XG4gICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudCggZGlzcGxheU9iamVjdCwgaXNSaWdodEJ1dHRvbiA/ICdyaWdodGRvd24nIDogJ21vdXNlZG93bicsIHRoaXMuZXZlbnREYXRhICk7XG4gICAgfVxufTtcblxuXG5cbi8qKlxuICogSXMgY2FsbGVkIHdoZW4gdGhlIG1vdXNlIGJ1dHRvbiBpcyByZWxlYXNlZCBvbiB0aGUgcmVuZGVyZXIgZWxlbWVudFxuICpcbiAqIEBwYXJhbSBldmVudCB7RXZlbnR9IFRoZSBET00gZXZlbnQgb2YgYSBtb3VzZSBidXR0b24gYmVpbmcgcmVsZWFzZWRcbiAqIEBwcml2YXRlXG4gKi9cbkludGVyYWN0aW9uTWFuYWdlci5wcm90b3R5cGUub25Nb3VzZVVwID0gZnVuY3Rpb24gKGV2ZW50KVxue1xuICAgIHRoaXMubW91c2Uub3JpZ2luYWxFdmVudCA9IGV2ZW50O1xuICAgIHRoaXMuZXZlbnREYXRhLmRhdGEgPSB0aGlzLm1vdXNlO1xuICAgIHRoaXMuZXZlbnREYXRhLnN0b3BwZWQgPSBmYWxzZTtcblxuICAgIC8vIFVwZGF0ZSBpbnRlcm5hbCBtb3VzZSByZWZlcmVuY2VcbiAgICB0aGlzLm1hcFBvc2l0aW9uVG9Qb2ludCggdGhpcy5tb3VzZS5nbG9iYWwsIGV2ZW50LmNsaWVudFgsIGV2ZW50LmNsaWVudFkpO1xuXG4gICAgdGhpcy5wcm9jZXNzSW50ZXJhY3RpdmUodGhpcy5tb3VzZS5nbG9iYWwsIHRoaXMucmVuZGVyZXIuX2xhc3RPYmplY3RSZW5kZXJlZCwgdGhpcy5wcm9jZXNzTW91c2VVcCwgdHJ1ZSApO1xufTtcblxuLyoqXG4gKiBQcm9jZXNzZXMgdGhlIHJlc3VsdCBvZiB0aGUgbW91c2UgdXAgY2hlY2sgYW5kIGRpc3BhdGNoZXMgdGhlIGV2ZW50IGlmIG5lZWQgYmVcbiAqXG4gKiBAcGFyYW0gZGlzcGxheU9iamVjdCB7UElYSS5Db250YWluZXJ8UElYSS5TcHJpdGV8UElYSS5leHRyYXMuVGlsaW5nU3ByaXRlfSBUaGUgZGlzcGxheSBvYmplY3QgdGhhdCB3YXMgdGVzdGVkXG4gKiBAcGFyYW0gaGl0IHtib29sZWFufSB0aGUgcmVzdWx0IG9mIHRoZSBoaXQgdGVzdCBvbiB0aGUgZGlzcGxheSBvYmplY3RcbiAqIEBwcml2YXRlXG4gKi9cbkludGVyYWN0aW9uTWFuYWdlci5wcm90b3R5cGUucHJvY2Vzc01vdXNlVXAgPSBmdW5jdGlvbiAoIGRpc3BsYXlPYmplY3QsIGhpdCApXG57XG4gICAgdmFyIGUgPSB0aGlzLm1vdXNlLm9yaWdpbmFsRXZlbnQ7XG5cbiAgICB2YXIgaXNSaWdodEJ1dHRvbiA9IGUuYnV0dG9uID09PSAyIHx8IGUud2hpY2ggPT09IDM7XG4gICAgdmFyIGlzRG93biA9ICBpc1JpZ2h0QnV0dG9uID8gJ19pc1JpZ2h0RG93bicgOiAnX2lzTGVmdERvd24nO1xuXG4gICAgaWYoaGl0KVxuICAgIHtcbiAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50KCBkaXNwbGF5T2JqZWN0LCBpc1JpZ2h0QnV0dG9uID8gJ3JpZ2h0dXAnIDogJ21vdXNldXAnLCB0aGlzLmV2ZW50RGF0YSApO1xuXG4gICAgICAgIGlmKCBkaXNwbGF5T2JqZWN0WyBpc0Rvd24gXSApXG4gICAgICAgIHtcbiAgICAgICAgICAgIGRpc3BsYXlPYmplY3RbIGlzRG93biBdID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLmRpc3BhdGNoRXZlbnQoIGRpc3BsYXlPYmplY3QsIGlzUmlnaHRCdXR0b24gPyAncmlnaHRjbGljaycgOiAnY2xpY2snLCB0aGlzLmV2ZW50RGF0YSApO1xuICAgICAgICB9XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIGlmKCBkaXNwbGF5T2JqZWN0WyBpc0Rvd24gXSApXG4gICAgICAgIHtcbiAgICAgICAgICAgIGRpc3BsYXlPYmplY3RbIGlzRG93biBdID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLmRpc3BhdGNoRXZlbnQoIGRpc3BsYXlPYmplY3QsIGlzUmlnaHRCdXR0b24gPyAncmlnaHR1cG91dHNpZGUnIDogJ21vdXNldXBvdXRzaWRlJywgdGhpcy5ldmVudERhdGEgKTtcbiAgICAgICAgfVxuICAgIH1cbn07XG5cblxuLyoqXG4gKiBJcyBjYWxsZWQgd2hlbiB0aGUgbW91c2UgbW92ZXMgYWNyb3NzIHRoZSByZW5kZXJlciBlbGVtZW50XG4gKlxuICogQHBhcmFtIGV2ZW50IHtFdmVudH0gVGhlIERPTSBldmVudCBvZiB0aGUgbW91c2UgbW92aW5nXG4gKiBAcHJpdmF0ZVxuICovXG5JbnRlcmFjdGlvbk1hbmFnZXIucHJvdG90eXBlLm9uTW91c2VNb3ZlID0gZnVuY3Rpb24gKGV2ZW50KVxue1xuICAgIHRoaXMubW91c2Uub3JpZ2luYWxFdmVudCA9IGV2ZW50O1xuICAgIHRoaXMuZXZlbnREYXRhLmRhdGEgPSB0aGlzLm1vdXNlO1xuICAgIHRoaXMuZXZlbnREYXRhLnN0b3BwZWQgPSBmYWxzZTtcblxuICAgIHRoaXMubWFwUG9zaXRpb25Ub1BvaW50KCB0aGlzLm1vdXNlLmdsb2JhbCwgZXZlbnQuY2xpZW50WCwgZXZlbnQuY2xpZW50WSk7XG5cbiAgICB0aGlzLmRpZE1vdmUgPSB0cnVlO1xuXG4gICAgdGhpcy5jdXJzb3IgPSAnaW5oZXJpdCc7XG5cbiAgICB0aGlzLnByb2Nlc3NJbnRlcmFjdGl2ZSh0aGlzLm1vdXNlLmdsb2JhbCwgdGhpcy5yZW5kZXJlci5fbGFzdE9iamVjdFJlbmRlcmVkLCB0aGlzLnByb2Nlc3NNb3VzZU1vdmUsIHRydWUgKTtcblxuICAgIGlmICh0aGlzLmN1cnJlbnRDdXJzb3JTdHlsZSAhPT0gdGhpcy5jdXJzb3IpXG4gICAge1xuICAgICAgICB0aGlzLmN1cnJlbnRDdXJzb3JTdHlsZSA9IHRoaXMuY3Vyc29yO1xuICAgICAgICB0aGlzLmludGVyYWN0aW9uRE9NRWxlbWVudC5zdHlsZS5jdXJzb3IgPSB0aGlzLmN1cnNvcjtcbiAgICB9XG5cbiAgICAvL1RPRE8gQlVHIGZvciBwYXJlbnRzIGluZXJhY3RpdmUgb2JqZWN0IChib3JkZXIgb3JkZXIgaXNzdWUpXG59O1xuXG4vKipcbiAqIFByb2Nlc3NlcyB0aGUgcmVzdWx0IG9mIHRoZSBtb3VzZSBtb3ZlIGNoZWNrIGFuZCBkaXNwYXRjaGVzIHRoZSBldmVudCBpZiBuZWVkIGJlXG4gKlxuICogQHBhcmFtIGRpc3BsYXlPYmplY3Qge1BJWEkuQ29udGFpbmVyfFBJWEkuU3ByaXRlfFBJWEkuZXh0cmFzLlRpbGluZ1Nwcml0ZX0gVGhlIGRpc3BsYXkgb2JqZWN0IHRoYXQgd2FzIHRlc3RlZFxuICogQHBhcmFtIGhpdCB7Ym9vbGVhbn0gdGhlIHJlc3VsdCBvZiB0aGUgaGl0IHRlc3Qgb24gdGhlIGRpc3BsYXkgb2JqZWN0XG4gKiBAcHJpdmF0ZVxuICovXG5JbnRlcmFjdGlvbk1hbmFnZXIucHJvdG90eXBlLnByb2Nlc3NNb3VzZU1vdmUgPSBmdW5jdGlvbiAoIGRpc3BsYXlPYmplY3QsIGhpdCApXG57XG4gICAgdGhpcy5kaXNwYXRjaEV2ZW50KCBkaXNwbGF5T2JqZWN0LCAnbW91c2Vtb3ZlJywgdGhpcy5ldmVudERhdGEpO1xuICAgIHRoaXMucHJvY2Vzc01vdXNlT3Zlck91dChkaXNwbGF5T2JqZWN0LCBoaXQpO1xufTtcblxuXG4vKipcbiAqIElzIGNhbGxlZCB3aGVuIHRoZSBtb3VzZSBpcyBtb3ZlZCBvdXQgb2YgdGhlIHJlbmRlcmVyIGVsZW1lbnRcbiAqXG4gKiBAcGFyYW0gZXZlbnQge0V2ZW50fSBUaGUgRE9NIGV2ZW50IG9mIGEgbW91c2UgYmVpbmcgbW92ZWQgb3V0XG4gKiBAcHJpdmF0ZVxuICovXG5JbnRlcmFjdGlvbk1hbmFnZXIucHJvdG90eXBlLm9uTW91c2VPdXQgPSBmdW5jdGlvbiAoZXZlbnQpXG57XG4gICAgdGhpcy5tb3VzZS5vcmlnaW5hbEV2ZW50ID0gZXZlbnQ7XG4gICAgdGhpcy5ldmVudERhdGEuc3RvcHBlZCA9IGZhbHNlO1xuXG4gICAgLy8gVXBkYXRlIGludGVybmFsIG1vdXNlIHJlZmVyZW5jZVxuICAgIHRoaXMubWFwUG9zaXRpb25Ub1BvaW50KCB0aGlzLm1vdXNlLmdsb2JhbCwgZXZlbnQuY2xpZW50WCwgZXZlbnQuY2xpZW50WSk7XG5cbiAgICB0aGlzLmludGVyYWN0aW9uRE9NRWxlbWVudC5zdHlsZS5jdXJzb3IgPSAnaW5oZXJpdCc7XG5cbiAgICAvLyBUT0RPIG9wdGltaXplIGJ5IG5vdCBjaGVjayBFVkVSWSBUSU1FISBtYXliZSBoYWxmIGFzIG9mdGVuPyAvL1xuICAgIHRoaXMubWFwUG9zaXRpb25Ub1BvaW50KCB0aGlzLm1vdXNlLmdsb2JhbCwgZXZlbnQuY2xpZW50WCwgZXZlbnQuY2xpZW50WSApO1xuXG4gICAgdGhpcy5wcm9jZXNzSW50ZXJhY3RpdmUoIHRoaXMubW91c2UuZ2xvYmFsLCB0aGlzLnJlbmRlcmVyLl9sYXN0T2JqZWN0UmVuZGVyZWQsIHRoaXMucHJvY2Vzc01vdXNlT3Zlck91dCwgZmFsc2UgKTtcbn07XG5cbi8qKlxuICogUHJvY2Vzc2VzIHRoZSByZXN1bHQgb2YgdGhlIG1vdXNlIG92ZXIvb3V0IGNoZWNrIGFuZCBkaXNwYXRjaGVzIHRoZSBldmVudCBpZiBuZWVkIGJlXG4gKlxuICogQHBhcmFtIGRpc3BsYXlPYmplY3Qge1BJWEkuQ29udGFpbmVyfFBJWEkuU3ByaXRlfFBJWEkuZXh0cmFzLlRpbGluZ1Nwcml0ZX0gVGhlIGRpc3BsYXkgb2JqZWN0IHRoYXQgd2FzIHRlc3RlZFxuICogQHBhcmFtIGhpdCB7Ym9vbGVhbn0gdGhlIHJlc3VsdCBvZiB0aGUgaGl0IHRlc3Qgb24gdGhlIGRpc3BsYXkgb2JqZWN0XG4gKiBAcHJpdmF0ZVxuICovXG5JbnRlcmFjdGlvbk1hbmFnZXIucHJvdG90eXBlLnByb2Nlc3NNb3VzZU92ZXJPdXQgPSBmdW5jdGlvbiAoIGRpc3BsYXlPYmplY3QsIGhpdCApXG57XG4gICAgaWYoaGl0KVxuICAgIHtcbiAgICAgICAgaWYoIWRpc3BsYXlPYmplY3QuX292ZXIpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGRpc3BsYXlPYmplY3QuX292ZXIgPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50KCBkaXNwbGF5T2JqZWN0LCAnbW91c2VvdmVyJywgdGhpcy5ldmVudERhdGEgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChkaXNwbGF5T2JqZWN0LmJ1dHRvbk1vZGUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuY3Vyc29yID0gZGlzcGxheU9iamVjdC5kZWZhdWx0Q3Vyc29yO1xuICAgICAgICB9XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIGlmKGRpc3BsYXlPYmplY3QuX292ZXIpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGRpc3BsYXlPYmplY3QuX292ZXIgPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudCggZGlzcGxheU9iamVjdCwgJ21vdXNlb3V0JywgdGhpcy5ldmVudERhdGEpO1xuICAgICAgICB9XG4gICAgfVxufTtcblxuXG4vKipcbiAqIElzIGNhbGxlZCB3aGVuIGEgdG91Y2ggaXMgc3RhcnRlZCBvbiB0aGUgcmVuZGVyZXIgZWxlbWVudFxuICpcbiAqIEBwYXJhbSBldmVudCB7RXZlbnR9IFRoZSBET00gZXZlbnQgb2YgYSB0b3VjaCBzdGFydGluZyBvbiB0aGUgcmVuZGVyZXIgdmlld1xuICogQHByaXZhdGVcbiAqL1xuSW50ZXJhY3Rpb25NYW5hZ2VyLnByb3RvdHlwZS5vblRvdWNoU3RhcnQgPSBmdW5jdGlvbiAoZXZlbnQpXG57XG4gICAgaWYgKHRoaXMuYXV0b1ByZXZlbnREZWZhdWx0KVxuICAgIHtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICB9XG5cbiAgICB2YXIgY2hhbmdlZFRvdWNoZXMgPSBldmVudC5jaGFuZ2VkVG91Y2hlcztcbiAgICB2YXIgY0xlbmd0aCA9IGNoYW5nZWRUb3VjaGVzLmxlbmd0aDtcblxuICAgIGZvciAodmFyIGk9MDsgaSA8IGNMZW5ndGg7IGkrKylcbiAgICB7XG4gICAgICAgIHZhciB0b3VjaEV2ZW50ID0gY2hhbmdlZFRvdWNoZXNbaV07XG4gICAgICAgIC8vVE9ETyBQT09MXG4gICAgICAgIHZhciB0b3VjaERhdGEgPSB0aGlzLmdldFRvdWNoRGF0YSggdG91Y2hFdmVudCApO1xuXG4gICAgICAgIHRvdWNoRGF0YS5vcmlnaW5hbEV2ZW50ID0gZXZlbnQ7XG5cbiAgICAgICAgdGhpcy5ldmVudERhdGEuZGF0YSA9IHRvdWNoRGF0YTtcbiAgICAgICAgdGhpcy5ldmVudERhdGEuc3RvcHBlZCA9IGZhbHNlO1xuXG4gICAgICAgIHRoaXMucHJvY2Vzc0ludGVyYWN0aXZlKCB0b3VjaERhdGEuZ2xvYmFsLCB0aGlzLnJlbmRlcmVyLl9sYXN0T2JqZWN0UmVuZGVyZWQsIHRoaXMucHJvY2Vzc1RvdWNoU3RhcnQsIHRydWUgKTtcblxuICAgICAgICB0aGlzLnJldHVyblRvdWNoRGF0YSggdG91Y2hEYXRhICk7XG4gICAgfVxufTtcblxuLyoqXG4gKiBQcm9jZXNzZXMgdGhlIHJlc3VsdCBvZiBhIHRvdWNoIGNoZWNrIGFuZCBkaXNwYXRjaGVzIHRoZSBldmVudCBpZiBuZWVkIGJlXG4gKlxuICogQHBhcmFtIGRpc3BsYXlPYmplY3Qge1BJWEkuQ29udGFpbmVyfFBJWEkuU3ByaXRlfFBJWEkuZXh0cmFzLlRpbGluZ1Nwcml0ZX0gVGhlIGRpc3BsYXkgb2JqZWN0IHRoYXQgd2FzIHRlc3RlZFxuICogQHBhcmFtIGhpdCB7Ym9vbGVhbn0gdGhlIHJlc3VsdCBvZiB0aGUgaGl0IHRlc3Qgb24gdGhlIGRpc3BsYXkgb2JqZWN0XG4gKiBAcHJpdmF0ZVxuICovXG5JbnRlcmFjdGlvbk1hbmFnZXIucHJvdG90eXBlLnByb2Nlc3NUb3VjaFN0YXJ0ID0gZnVuY3Rpb24gKCBkaXNwbGF5T2JqZWN0LCBoaXQgKVxue1xuICAgIGlmKGhpdClcbiAgICB7XG4gICAgICAgIGRpc3BsYXlPYmplY3QuX3RvdWNoRG93biA9IHRydWU7XG4gICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudCggZGlzcGxheU9iamVjdCwgJ3RvdWNoc3RhcnQnLCB0aGlzLmV2ZW50RGF0YSApO1xuICAgIH1cbn07XG5cblxuLyoqXG4gKiBJcyBjYWxsZWQgd2hlbiBhIHRvdWNoIGVuZHMgb24gdGhlIHJlbmRlcmVyIGVsZW1lbnRcbiAqXG4gKiBAcGFyYW0gZXZlbnQge0V2ZW50fSBUaGUgRE9NIGV2ZW50IG9mIGEgdG91Y2ggZW5kaW5nIG9uIHRoZSByZW5kZXJlciB2aWV3XG4gKi9cbkludGVyYWN0aW9uTWFuYWdlci5wcm90b3R5cGUub25Ub3VjaEVuZCA9IGZ1bmN0aW9uIChldmVudClcbntcbiAgICBpZiAodGhpcy5hdXRvUHJldmVudERlZmF1bHQpXG4gICAge1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIH1cblxuICAgIHZhciBjaGFuZ2VkVG91Y2hlcyA9IGV2ZW50LmNoYW5nZWRUb3VjaGVzO1xuICAgIHZhciBjTGVuZ3RoID0gY2hhbmdlZFRvdWNoZXMubGVuZ3RoO1xuXG4gICAgZm9yICh2YXIgaT0wOyBpIDwgY0xlbmd0aDsgaSsrKVxuICAgIHtcbiAgICAgICAgdmFyIHRvdWNoRXZlbnQgPSBjaGFuZ2VkVG91Y2hlc1tpXTtcblxuICAgICAgICB2YXIgdG91Y2hEYXRhID0gdGhpcy5nZXRUb3VjaERhdGEoIHRvdWNoRXZlbnQgKTtcblxuICAgICAgICB0b3VjaERhdGEub3JpZ2luYWxFdmVudCA9IGV2ZW50O1xuXG4gICAgICAgIC8vVE9ETyB0aGlzIHNob3VsZCBiZSBwYXNzZWQgYWxvbmcuLiBubyBzZXRcbiAgICAgICAgdGhpcy5ldmVudERhdGEuZGF0YSA9IHRvdWNoRGF0YTtcbiAgICAgICAgdGhpcy5ldmVudERhdGEuc3RvcHBlZCA9IGZhbHNlO1xuXG5cbiAgICAgICAgdGhpcy5wcm9jZXNzSW50ZXJhY3RpdmUoIHRvdWNoRGF0YS5nbG9iYWwsIHRoaXMucmVuZGVyZXIuX2xhc3RPYmplY3RSZW5kZXJlZCwgdGhpcy5wcm9jZXNzVG91Y2hFbmQsIHRydWUgKTtcblxuICAgICAgICB0aGlzLnJldHVyblRvdWNoRGF0YSggdG91Y2hEYXRhICk7XG4gICAgfVxufTtcblxuLyoqXG4gKiBQcm9jZXNzZXMgdGhlIHJlc3VsdCBvZiB0aGUgZW5kIG9mIGEgdG91Y2ggYW5kIGRpc3BhdGNoZXMgdGhlIGV2ZW50IGlmIG5lZWQgYmVcbiAqXG4gKiBAcGFyYW0gZGlzcGxheU9iamVjdCB7UElYSS5Db250YWluZXJ8UElYSS5TcHJpdGV8UElYSS5leHRyYXMuVGlsaW5nU3ByaXRlfSBUaGUgZGlzcGxheSBvYmplY3QgdGhhdCB3YXMgdGVzdGVkXG4gKiBAcGFyYW0gaGl0IHtib29sZWFufSB0aGUgcmVzdWx0IG9mIHRoZSBoaXQgdGVzdCBvbiB0aGUgZGlzcGxheSBvYmplY3RcbiAqIEBwcml2YXRlXG4gKi9cbkludGVyYWN0aW9uTWFuYWdlci5wcm90b3R5cGUucHJvY2Vzc1RvdWNoRW5kID0gZnVuY3Rpb24gKCBkaXNwbGF5T2JqZWN0LCBoaXQgKVxue1xuICAgIGlmKGhpdClcbiAgICB7XG4gICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudCggZGlzcGxheU9iamVjdCwgJ3RvdWNoZW5kJywgdGhpcy5ldmVudERhdGEgKTtcblxuICAgICAgICBpZiggZGlzcGxheU9iamVjdC5fdG91Y2hEb3duIClcbiAgICAgICAge1xuICAgICAgICAgICAgZGlzcGxheU9iamVjdC5fdG91Y2hEb3duID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLmRpc3BhdGNoRXZlbnQoIGRpc3BsYXlPYmplY3QsICd0YXAnLCB0aGlzLmV2ZW50RGF0YSApO1xuICAgICAgICB9XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIGlmKCBkaXNwbGF5T2JqZWN0Ll90b3VjaERvd24gKVxuICAgICAgICB7XG4gICAgICAgICAgICBkaXNwbGF5T2JqZWN0Ll90b3VjaERvd24gPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudCggZGlzcGxheU9iamVjdCwgJ3RvdWNoZW5kb3V0c2lkZScsIHRoaXMuZXZlbnREYXRhICk7XG4gICAgICAgIH1cbiAgICB9XG59O1xuXG4vKipcbiAqIElzIGNhbGxlZCB3aGVuIGEgdG91Y2ggaXMgbW92ZWQgYWNyb3NzIHRoZSByZW5kZXJlciBlbGVtZW50XG4gKlxuICogQHBhcmFtIGV2ZW50IHtFdmVudH0gVGhlIERPTSBldmVudCBvZiBhIHRvdWNoIG1vdmluZyBhY3Jvc3MgdGhlIHJlbmRlcmVyIHZpZXdcbiAqIEBwcml2YXRlXG4gKi9cbkludGVyYWN0aW9uTWFuYWdlci5wcm90b3R5cGUub25Ub3VjaE1vdmUgPSBmdW5jdGlvbiAoZXZlbnQpXG57XG4gICAgaWYgKHRoaXMuYXV0b1ByZXZlbnREZWZhdWx0KVxuICAgIHtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICB9XG5cbiAgICB2YXIgY2hhbmdlZFRvdWNoZXMgPSBldmVudC5jaGFuZ2VkVG91Y2hlcztcbiAgICB2YXIgY0xlbmd0aCA9IGNoYW5nZWRUb3VjaGVzLmxlbmd0aDtcblxuICAgIGZvciAodmFyIGk9MDsgaSA8IGNMZW5ndGg7IGkrKylcbiAgICB7XG4gICAgICAgIHZhciB0b3VjaEV2ZW50ID0gY2hhbmdlZFRvdWNoZXNbaV07XG5cbiAgICAgICAgdmFyIHRvdWNoRGF0YSA9IHRoaXMuZ2V0VG91Y2hEYXRhKCB0b3VjaEV2ZW50ICk7XG5cbiAgICAgICAgdG91Y2hEYXRhLm9yaWdpbmFsRXZlbnQgPSBldmVudDtcblxuICAgICAgICB0aGlzLmV2ZW50RGF0YS5kYXRhID0gdG91Y2hEYXRhO1xuICAgICAgICB0aGlzLmV2ZW50RGF0YS5zdG9wcGVkID0gZmFsc2U7XG5cbiAgICAgICAgdGhpcy5wcm9jZXNzSW50ZXJhY3RpdmUoIHRvdWNoRGF0YS5nbG9iYWwsIHRoaXMucmVuZGVyZXIuX2xhc3RPYmplY3RSZW5kZXJlZCwgdGhpcy5wcm9jZXNzVG91Y2hNb3ZlLCB0cnVlICk7XG5cbiAgICAgICAgdGhpcy5yZXR1cm5Ub3VjaERhdGEoIHRvdWNoRGF0YSApO1xuICAgIH1cbn07XG5cbi8qKlxuICogUHJvY2Vzc2VzIHRoZSByZXN1bHQgb2YgYSB0b3VjaCBtb3ZlIGNoZWNrIGFuZCBkaXNwYXRjaGVzIHRoZSBldmVudCBpZiBuZWVkIGJlXG4gKlxuICogQHBhcmFtIGRpc3BsYXlPYmplY3Qge1BJWEkuQ29udGFpbmVyfFBJWEkuU3ByaXRlfFBJWEkuZXh0cmFzLlRpbGluZ1Nwcml0ZX0gVGhlIGRpc3BsYXkgb2JqZWN0IHRoYXQgd2FzIHRlc3RlZFxuICogQHBhcmFtIGhpdCB7Ym9vbGVhbn0gdGhlIHJlc3VsdCBvZiB0aGUgaGl0IHRlc3Qgb24gdGhlIGRpc3BsYXkgb2JqZWN0XG4gKiBAcHJpdmF0ZVxuICovXG5JbnRlcmFjdGlvbk1hbmFnZXIucHJvdG90eXBlLnByb2Nlc3NUb3VjaE1vdmUgPSBmdW5jdGlvbiAoIGRpc3BsYXlPYmplY3QsIGhpdCApXG57XG4gICAgaGl0ID0gaGl0O1xuICAgIHRoaXMuZGlzcGF0Y2hFdmVudCggZGlzcGxheU9iamVjdCwgJ3RvdWNobW92ZScsIHRoaXMuZXZlbnREYXRhKTtcbn07XG5cbi8qKlxuICogR3JhYnMgYW4gaW50ZXJhY3Rpb24gZGF0YSBvYmplY3QgZnJvbSB0aGUgaW50ZXJuYWwgcG9vbFxuICpcbiAqIEBwYXJhbSB0b3VjaEV2ZW50IHtFdmVudERhdGF9IFRoZSB0b3VjaCBldmVudCB3ZSBuZWVkIHRvIHBhaXIgd2l0aCBhbiBpbnRlcmFjdGlvbkRhdGEgb2JqZWN0XG4gKlxuICogQHByaXZhdGVcbiAqL1xuSW50ZXJhY3Rpb25NYW5hZ2VyLnByb3RvdHlwZS5nZXRUb3VjaERhdGEgPSBmdW5jdGlvbiAodG91Y2hFdmVudClcbntcbiAgICB2YXIgdG91Y2hEYXRhID0gdGhpcy5pbnRlcmFjdGl2ZURhdGFQb29sLnBvcCgpO1xuXG4gICAgaWYoIXRvdWNoRGF0YSlcbiAgICB7XG4gICAgICAgIHRvdWNoRGF0YSA9IG5ldyBJbnRlcmFjdGlvbkRhdGEoKTtcbiAgICB9XG5cbiAgICB0b3VjaERhdGEuaWRlbnRpZmllciA9IHRvdWNoRXZlbnQuaWRlbnRpZmllcjtcbiAgICB0aGlzLm1hcFBvc2l0aW9uVG9Qb2ludCggdG91Y2hEYXRhLmdsb2JhbCwgdG91Y2hFdmVudC5jbGllbnRYLCB0b3VjaEV2ZW50LmNsaWVudFkgKTtcblxuICAgIGlmKG5hdmlnYXRvci5pc0NvY29vbkpTKVxuICAgIHtcbiAgICAgICAgdG91Y2hEYXRhLmdsb2JhbC54ID0gdG91Y2hEYXRhLmdsb2JhbC54IC8gdGhpcy5yZXNvbHV0aW9uO1xuICAgICAgICB0b3VjaERhdGEuZ2xvYmFsLnkgPSB0b3VjaERhdGEuZ2xvYmFsLnkgLyB0aGlzLnJlc29sdXRpb247XG4gICAgfVxuXG4gICAgdG91Y2hFdmVudC5nbG9iYWxYID0gdG91Y2hEYXRhLmdsb2JhbC54O1xuICAgIHRvdWNoRXZlbnQuZ2xvYmFsWSA9IHRvdWNoRGF0YS5nbG9iYWwueTtcblxuICAgIHJldHVybiB0b3VjaERhdGE7XG59O1xuXG4vKipcbiAqIFJldHVybnMgYW4gaW50ZXJhY3Rpb24gZGF0YSBvYmplY3QgdG8gdGhlIGludGVybmFsIHBvb2xcbiAqXG4gKiBAcGFyYW0gdG91Y2hEYXRhIHtQSVhJLmludGVyYWN0aW9uLkludGVyYWN0aW9uRGF0YX0gVGhlIHRvdWNoIGRhdGEgb2JqZWN0IHdlIHdhbnQgdG8gcmV0dXJuIHRvIHRoZSBwb29sXG4gKlxuICogQHByaXZhdGVcbiAqL1xuSW50ZXJhY3Rpb25NYW5hZ2VyLnByb3RvdHlwZS5yZXR1cm5Ub3VjaERhdGEgPSBmdW5jdGlvbiAoIHRvdWNoRGF0YSApXG57XG4gICAgdGhpcy5pbnRlcmFjdGl2ZURhdGFQb29sLnB1c2goIHRvdWNoRGF0YSApO1xufTtcblxuLyoqXG4gKiBEZXN0cm95cyB0aGUgaW50ZXJhY3Rpb24gbWFuYWdlclxuICpcbiAqL1xuSW50ZXJhY3Rpb25NYW5hZ2VyLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKCkge1xuICAgIHRoaXMucmVtb3ZlRXZlbnRzKCk7XG5cbiAgICB0aGlzLnJlbmRlcmVyID0gbnVsbDtcblxuICAgIHRoaXMubW91c2UgPSBudWxsO1xuXG4gICAgdGhpcy5ldmVudERhdGEgPSBudWxsO1xuXG4gICAgdGhpcy5pbnRlcmFjdGl2ZURhdGFQb29sID0gbnVsbDtcblxuICAgIHRoaXMuaW50ZXJhY3Rpb25ET01FbGVtZW50ID0gbnVsbDtcblxuICAgIHRoaXMub25Nb3VzZVVwID0gbnVsbDtcbiAgICB0aGlzLnByb2Nlc3NNb3VzZVVwID0gbnVsbDtcblxuXG4gICAgdGhpcy5vbk1vdXNlRG93biA9IG51bGw7XG4gICAgdGhpcy5wcm9jZXNzTW91c2VEb3duID0gbnVsbDtcblxuICAgIHRoaXMub25Nb3VzZU1vdmUgPSBudWxsO1xuICAgIHRoaXMucHJvY2Vzc01vdXNlTW92ZSA9IG51bGw7XG5cbiAgICB0aGlzLm9uTW91c2VPdXQgPSBudWxsO1xuICAgIHRoaXMucHJvY2Vzc01vdXNlT3Zlck91dCA9IG51bGw7XG5cblxuICAgIHRoaXMub25Ub3VjaFN0YXJ0ID0gbnVsbDtcbiAgICB0aGlzLnByb2Nlc3NUb3VjaFN0YXJ0ID0gbnVsbDtcblxuICAgIHRoaXMub25Ub3VjaEVuZCA9IG51bGw7XG4gICAgdGhpcy5wcm9jZXNzVG91Y2hFbmQgPSBudWxsO1xuXG4gICAgdGhpcy5vblRvdWNoTW92ZSA9IG51bGw7XG4gICAgdGhpcy5wcm9jZXNzVG91Y2hNb3ZlID0gbnVsbDtcblxuICAgIHRoaXMuX3RlbXBQb2ludCA9IG51bGw7XG59O1xuXG5jb3JlLldlYkdMUmVuZGVyZXIucmVnaXN0ZXJQbHVnaW4oJ2ludGVyYWN0aW9uJywgSW50ZXJhY3Rpb25NYW5hZ2VyKTtcbmNvcmUuQ2FudmFzUmVuZGVyZXIucmVnaXN0ZXJQbHVnaW4oJ2ludGVyYWN0aW9uJywgSW50ZXJhY3Rpb25NYW5hZ2VyKTtcbiIsIi8qKlxuICogQGZpbGUgICAgICAgIE1haW4gZXhwb3J0IG9mIHRoZSBQSVhJIGludGVyYWN0aW9ucyBsaWJyYXJ5XG4gKiBAYXV0aG9yICAgICAgTWF0IEdyb3ZlcyA8bWF0QGdvb2Rib3lkaWdpdGFsLmNvbT5cbiAqIEBjb3B5cmlnaHQgICAyMDEzLTIwMTUgR29vZEJveURpZ2l0YWxcbiAqIEBsaWNlbnNlICAgICB7QGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL3BpeGlqcy9waXhpLmpzL2Jsb2IvbWFzdGVyL0xJQ0VOU0V8TUlUIExpY2Vuc2V9XG4gKi9cblxuLyoqXG4gKiBAbmFtZXNwYWNlIFBJWEkuaW50ZXJhY3Rpb25cbiAqL1xubW9kdWxlLmV4cG9ydHMgPSB7XG4gICAgSW50ZXJhY3Rpb25EYXRhOiAgICByZXF1aXJlKCcuL0ludGVyYWN0aW9uRGF0YScpLFxuICAgIEludGVyYWN0aW9uTWFuYWdlcjogcmVxdWlyZSgnLi9JbnRlcmFjdGlvbk1hbmFnZXInKSxcbiAgICBpbnRlcmFjdGl2ZVRhcmdldDogIHJlcXVpcmUoJy4vaW50ZXJhY3RpdmVUYXJnZXQnKVxufTtcbiIsIi8qKlxuICogRGVmYXVsdCBwcm9wZXJ0eSB2YWx1ZXMgb2YgaW50ZXJhY3RpdmUgb2JqZWN0c1xuICogdXNlZCBieSB7QGxpbmsgUElYSS5pbnRlcmFjdGlvbi5JbnRlcmFjdGlvbk1hbmFnZXJ9LlxuICpcbiAqIEBtaXhpblxuICogQG1lbWJlcm9mIFBJWEkuaW50ZXJhY3Rpb25cbiAqIEBleGFtcGxlXG4gKiAgICAgIGZ1bmN0aW9uIE15T2JqZWN0KCkge31cbiAqXG4gKiAgICAgIE9iamVjdC5hc3NpZ24oXG4gKiAgICAgICAgICBNeU9iamVjdC5wcm90b3R5cGUsXG4gKiAgICAgICAgICBQSVhJLmludGVyYWN0aW9uLmludGVyYWN0aXZlVGFyZ2V0XG4gKiAgICAgICk7XG4gKi9cbnZhciBpbnRlcmFjdGl2ZVRhcmdldCA9IHtcbiAgICAvKipcbiAgICAgKiBAdG9kbyBOZWVkcyBkb2NzLlxuICAgICAqL1xuICAgIGludGVyYWN0aXZlOiBmYWxzZSxcbiAgICAvKipcbiAgICAgKiBAdG9kbyBOZWVkcyBkb2NzLlxuICAgICAqL1xuICAgIGJ1dHRvbk1vZGU6IGZhbHNlLFxuICAgIC8qKlxuICAgICAqIEB0b2RvIE5lZWRzIGRvY3MuXG4gICAgICovXG4gICAgaW50ZXJhY3RpdmVDaGlsZHJlbjogdHJ1ZSxcbiAgICAvKipcbiAgICAgKiBAdG9kbyBOZWVkcyBkb2NzLlxuICAgICAqL1xuICAgIGRlZmF1bHRDdXJzb3I6ICdwb2ludGVyJyxcblxuICAgIC8vIHNvbWUgaW50ZXJuYWwgY2hlY2tzLi5cblxuICAgIC8qKlxuICAgICAqIEB0b2RvIE5lZWRzIGRvY3MuXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICBfb3ZlcjogZmFsc2UsXG4gICAgLyoqXG4gICAgICogQHRvZG8gTmVlZHMgZG9jcy5cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIF90b3VjaERvd246IGZhbHNlXG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGludGVyYWN0aXZlVGFyZ2V0O1xuIiwidmFyIFJlc291cmNlID0gcmVxdWlyZSgncmVzb3VyY2UtbG9hZGVyJykuUmVzb3VyY2UsXG4gICAgY29yZSA9IHJlcXVpcmUoJy4uL2NvcmUnKSxcbiAgICBleHRyYXMgPSByZXF1aXJlKCcuLi9leHRyYXMnKSxcbiAgICBwYXRoID0gcmVxdWlyZSgncGF0aCcpO1xuXG5cbmZ1bmN0aW9uIHBhcnNlKHJlc291cmNlLCB0ZXh0dXJlKSB7XG4gICAgdmFyIGRhdGEgPSB7fTtcbiAgICB2YXIgaW5mbyA9IHJlc291cmNlLmRhdGEuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2luZm8nKVswXTtcbiAgICB2YXIgY29tbW9uID0gcmVzb3VyY2UuZGF0YS5nZXRFbGVtZW50c0J5VGFnTmFtZSgnY29tbW9uJylbMF07XG5cbiAgICBkYXRhLmZvbnQgPSBpbmZvLmdldEF0dHJpYnV0ZSgnZmFjZScpO1xuICAgIGRhdGEuc2l6ZSA9IHBhcnNlSW50KGluZm8uZ2V0QXR0cmlidXRlKCdzaXplJyksIDEwKTtcbiAgICBkYXRhLmxpbmVIZWlnaHQgPSBwYXJzZUludChjb21tb24uZ2V0QXR0cmlidXRlKCdsaW5lSGVpZ2h0JyksIDEwKTtcbiAgICBkYXRhLmNoYXJzID0ge307XG5cbiAgICAvL3BhcnNlIGxldHRlcnNcbiAgICB2YXIgbGV0dGVycyA9IHJlc291cmNlLmRhdGEuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2NoYXInKTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGV0dGVycy5sZW5ndGg7IGkrKylcbiAgICB7XG4gICAgICAgIHZhciBjaGFyQ29kZSA9IHBhcnNlSW50KGxldHRlcnNbaV0uZ2V0QXR0cmlidXRlKCdpZCcpLCAxMCk7XG5cbiAgICAgICAgdmFyIHRleHR1cmVSZWN0ID0gbmV3IGNvcmUuUmVjdGFuZ2xlKFxuICAgICAgICAgICAgcGFyc2VJbnQobGV0dGVyc1tpXS5nZXRBdHRyaWJ1dGUoJ3gnKSwgMTApICsgdGV4dHVyZS5mcmFtZS54LFxuICAgICAgICAgICAgcGFyc2VJbnQobGV0dGVyc1tpXS5nZXRBdHRyaWJ1dGUoJ3knKSwgMTApICsgdGV4dHVyZS5mcmFtZS55LFxuICAgICAgICAgICAgcGFyc2VJbnQobGV0dGVyc1tpXS5nZXRBdHRyaWJ1dGUoJ3dpZHRoJyksIDEwKSxcbiAgICAgICAgICAgIHBhcnNlSW50KGxldHRlcnNbaV0uZ2V0QXR0cmlidXRlKCdoZWlnaHQnKSwgMTApXG4gICAgICAgICk7XG5cbiAgICAgICAgZGF0YS5jaGFyc1tjaGFyQ29kZV0gPSB7XG4gICAgICAgICAgICB4T2Zmc2V0OiBwYXJzZUludChsZXR0ZXJzW2ldLmdldEF0dHJpYnV0ZSgneG9mZnNldCcpLCAxMCksXG4gICAgICAgICAgICB5T2Zmc2V0OiBwYXJzZUludChsZXR0ZXJzW2ldLmdldEF0dHJpYnV0ZSgneW9mZnNldCcpLCAxMCksXG4gICAgICAgICAgICB4QWR2YW5jZTogcGFyc2VJbnQobGV0dGVyc1tpXS5nZXRBdHRyaWJ1dGUoJ3hhZHZhbmNlJyksIDEwKSxcbiAgICAgICAgICAgIGtlcm5pbmc6IHt9LFxuICAgICAgICAgICAgdGV4dHVyZTogbmV3IGNvcmUuVGV4dHVyZSh0ZXh0dXJlLmJhc2VUZXh0dXJlLCB0ZXh0dXJlUmVjdClcblxuICAgICAgICB9O1xuICAgIH1cblxuICAgIC8vcGFyc2Uga2VybmluZ3NcbiAgICB2YXIga2VybmluZ3MgPSByZXNvdXJjZS5kYXRhLmdldEVsZW1lbnRzQnlUYWdOYW1lKCdrZXJuaW5nJyk7XG4gICAgZm9yIChpID0gMDsgaSA8IGtlcm5pbmdzLmxlbmd0aDsgaSsrKVxuICAgIHtcbiAgICAgICAgdmFyIGZpcnN0ID0gcGFyc2VJbnQoa2VybmluZ3NbaV0uZ2V0QXR0cmlidXRlKCdmaXJzdCcpLCAxMCk7XG4gICAgICAgIHZhciBzZWNvbmQgPSBwYXJzZUludChrZXJuaW5nc1tpXS5nZXRBdHRyaWJ1dGUoJ3NlY29uZCcpLCAxMCk7XG4gICAgICAgIHZhciBhbW91bnQgPSBwYXJzZUludChrZXJuaW5nc1tpXS5nZXRBdHRyaWJ1dGUoJ2Ftb3VudCcpLCAxMCk7XG5cbiAgICAgICAgZGF0YS5jaGFyc1tzZWNvbmRdLmtlcm5pbmdbZmlyc3RdID0gYW1vdW50O1xuICAgIH1cblxuICAgIHJlc291cmNlLmJpdG1hcEZvbnQgPSBkYXRhO1xuXG4gICAgLy8gSSdtIGxlYXZpbmcgdGhpcyBhcyBhIHRlbXBvcmFyeSBmaXggc28gd2UgY2FuIHRlc3QgdGhlIGJpdG1hcCBmb250cyBpbiB2M1xuICAgIC8vIGJ1dCBpdCdzIHZlcnkgbGlrZWx5IHRvIGNoYW5nZVxuICAgIGV4dHJhcy5CaXRtYXBUZXh0LmZvbnRzW2RhdGEuZm9udF0gPSBkYXRhO1xufVxuXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKClcbntcbiAgICByZXR1cm4gZnVuY3Rpb24gKHJlc291cmNlLCBuZXh0KVxuICAgIHtcbiAgICAgICAgLy8gc2tpcCBpZiBubyBkYXRhIG9yIG5vdCB4bWwgZGF0YVxuICAgICAgICBpZiAoIXJlc291cmNlLmRhdGEgfHwgIXJlc291cmNlLmlzWG1sKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gbmV4dCgpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gc2tpcCBpZiBub3QgYml0bWFwIGZvbnQgZGF0YSwgdXNpbmcgc29tZSBzaWxseSBkdWNrLXR5cGluZ1xuICAgICAgICBpZiAoXG4gICAgICAgICAgICByZXNvdXJjZS5kYXRhLmdldEVsZW1lbnRzQnlUYWdOYW1lKCdwYWdlJykubGVuZ3RoID09PSAwIHx8XG4gICAgICAgICAgICByZXNvdXJjZS5kYXRhLmdldEVsZW1lbnRzQnlUYWdOYW1lKCdpbmZvJykubGVuZ3RoID09PSAwIHx8XG4gICAgICAgICAgICByZXNvdXJjZS5kYXRhLmdldEVsZW1lbnRzQnlUYWdOYW1lKCdpbmZvJylbMF0uZ2V0QXR0cmlidXRlKCdmYWNlJykgPT09IG51bGxcbiAgICAgICAgICAgIClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIG5leHQoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciB4bWxVcmwgPSBwYXRoLmRpcm5hbWUocmVzb3VyY2UudXJsKTtcblxuICAgICAgICBpZiAoeG1sVXJsID09PSAnLicpIHtcbiAgICAgICAgICAgIHhtbFVybCA9ICcnO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuYmFzZVVybCAmJiB4bWxVcmwpIHtcbiAgICAgICAgICAgIC8vIGlmIGJhc2V1cmwgaGFzIGEgdHJhaWxpbmcgc2xhc2ggdGhlbiBhZGQgb25lIHRvIHhtbFVybCBzbyB0aGUgcmVwbGFjZSB3b3JrcyBiZWxvd1xuICAgICAgICAgICAgaWYgKHRoaXMuYmFzZVVybC5jaGFyQXQodGhpcy5iYXNlVXJsLmxlbmd0aCAtIDEpID09PSAnLycpIHtcbiAgICAgICAgICAgICAgICB4bWxVcmwgKz0gJy8nO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyByZW1vdmUgYmFzZVVybCBmcm9tIHhtbFVybFxuICAgICAgICAgICAgeG1sVXJsID0geG1sVXJsLnJlcGxhY2UodGhpcy5iYXNlVXJsLCAnJyk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBpZiB0aGVyZSBpcyBhbiB4bWxVcmwgbm93LCBpdCBuZWVkcyBhIHRyYWlsaW5nIHNsYXNoLiBFbnN1cmUgdGhhdCBpdCBkb2VzIGlmIHRoZSBzdHJpbmcgaXNuJ3QgZW1wdHkuXG4gICAgICAgIGlmICh4bWxVcmwgJiYgeG1sVXJsLmNoYXJBdCh4bWxVcmwubGVuZ3RoIC0gMSkgIT09ICcvJykge1xuICAgICAgICAgICAgeG1sVXJsICs9ICcvJztcbiAgICAgICAgfVxuICAgICAgICB2YXIgdGV4dHVyZVVybCA9IHhtbFVybCArIHJlc291cmNlLmRhdGEuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ3BhZ2UnKVswXS5nZXRBdHRyaWJ1dGUoJ2ZpbGUnKTtcbiAgICAgICAgaWYgKGNvcmUudXRpbHMuVGV4dHVyZUNhY2hlW3RleHR1cmVVcmxdKSB7XG4gICAgICAgICAgICAvL3JldXNlIGV4aXN0aW5nIHRleHR1cmVcbiAgICAgICAgICAgIHBhcnNlKHJlc291cmNlLCBjb3JlLnV0aWxzLlRleHR1cmVDYWNoZVt0ZXh0dXJlVXJsXSk7XG4gICAgICAgICAgICBuZXh0KCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB2YXIgbG9hZE9wdGlvbnMgPSB7XG4gICAgICAgICAgICAgICAgY3Jvc3NPcmlnaW46IHJlc291cmNlLmNyb3NzT3JpZ2luLFxuICAgICAgICAgICAgICAgIGxvYWRUeXBlOiBSZXNvdXJjZS5MT0FEX1RZUEUuSU1BR0UsXG4gICAgICAgICAgICAgICAgbWV0YWRhdGE6IHJlc291cmNlLm1ldGFkYXRhLmltYWdlTWV0YWRhdGFcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICAvLyBsb2FkIHRoZSB0ZXh0dXJlIGZvciB0aGUgZm9udFxuICAgICAgICAgICAgdGhpcy5hZGQocmVzb3VyY2UubmFtZSArICdfaW1hZ2UnLCB0ZXh0dXJlVXJsLCBsb2FkT3B0aW9ucywgZnVuY3Rpb24gKHJlcykge1xuICAgICAgICAgICAgICAgIHBhcnNlKHJlc291cmNlLCByZXMudGV4dHVyZSk7XG4gICAgICAgICAgICAgICAgbmV4dCgpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9O1xufTtcbiIsIi8qKlxuICogQGZpbGUgICAgICAgIE1haW4gZXhwb3J0IG9mIHRoZSBQSVhJIGxvYWRlcnMgbGlicmFyeVxuICogQGF1dGhvciAgICAgIE1hdCBHcm92ZXMgPG1hdEBnb29kYm95ZGlnaXRhbC5jb20+XG4gKiBAY29weXJpZ2h0ICAgMjAxMy0yMDE1IEdvb2RCb3lEaWdpdGFsXG4gKiBAbGljZW5zZSAgICAge0BsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9waXhpanMvcGl4aS5qcy9ibG9iL21hc3Rlci9MSUNFTlNFfE1JVCBMaWNlbnNlfVxuICovXG5cbi8qKlxuICogQG5hbWVzcGFjZSBQSVhJLmxvYWRlcnNcbiAqL1xubW9kdWxlLmV4cG9ydHMgPSB7XG4gICAgTG9hZGVyOiAgICAgICAgICAgICByZXF1aXJlKCcuL2xvYWRlcicpLFxuXG4gICAgLy8gcGFyc2Vyc1xuICAgIGJpdG1hcEZvbnRQYXJzZXI6ICAgcmVxdWlyZSgnLi9iaXRtYXBGb250UGFyc2VyJyksXG4gICAgc3ByaXRlc2hlZXRQYXJzZXI6ICByZXF1aXJlKCcuL3Nwcml0ZXNoZWV0UGFyc2VyJyksXG4gICAgdGV4dHVyZVBhcnNlcjogICAgICByZXF1aXJlKCcuL3RleHR1cmVQYXJzZXInKSxcbiAgICBSZXNvdXJjZTogICAgICAgICAgIHJlcXVpcmUoJ3Jlc291cmNlLWxvYWRlcicpLlJlc291cmNlXG59O1xuIiwidmFyIFJlc291cmNlTG9hZGVyID0gcmVxdWlyZSgncmVzb3VyY2UtbG9hZGVyJyksXG4gICAgdGV4dHVyZVBhcnNlciA9IHJlcXVpcmUoJy4vdGV4dHVyZVBhcnNlcicpLFxuICAgIHNwcml0ZXNoZWV0UGFyc2VyID0gcmVxdWlyZSgnLi9zcHJpdGVzaGVldFBhcnNlcicpLFxuICAgIGJpdG1hcEZvbnRQYXJzZXIgPSByZXF1aXJlKCcuL2JpdG1hcEZvbnRQYXJzZXInKTtcblxuLyoqXG4gKlxuICogVGhlIG5ldyBsb2FkZXIsIGV4dGVuZHMgUmVzb3VyY2UgTG9hZGVyIGJ5IENoYWQgRW5nbGVyIDogaHR0cHM6Ly9naXRodWIuY29tL2VuZ2xlcmNqL3Jlc291cmNlLWxvYWRlclxuICpcbiAqIGBgYGpzXG4gKiB2YXIgbG9hZGVyID0gUElYSS5sb2FkZXI7IC8vIHBpeGkgZXhwb3NlcyBhIHByZW1hZGUgaW5zdGFuY2UgZm9yIHlvdSB0byB1c2UuXG4gKiAvL29yXG4gKiB2YXIgbG9hZGVyID0gbmV3IFBJWEkubG9hZGVycy5Mb2FkZXIoKTsgLy8geW91IGNhbiBhbHNvIGNyZWF0ZSB5b3VyIG93biBpZiB5b3Ugd2FudFxuICpcbiAqIGxvYWRlci5hZGQoJ2J1bm55JyxcImRhdGEvYnVubnkucG5nXCIpO1xuICpcbiAqIGxvYWRlci5vbmNlKCdjb21wbGV0ZScsb25Bc3NldHNMb2FkZWQpO1xuICpcbiAqIGxvYWRlci5sb2FkKCk7XG4gKiBgYGBcbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuUmVzb3VyY2VMb2FkZXJcbiAqIEBtZW1iZXJvZiBQSVhJLmxvYWRlcnNcbiAqIEBwYXJhbSBbYmFzZVVybD0nJ10ge3N0cmluZ30gVGhlIGJhc2UgdXJsIGZvciBhbGwgcmVzb3VyY2VzIGxvYWRlZCBieSB0aGlzIGxvYWRlci5cbiAqIEBwYXJhbSBbY29uY3VycmVuY3k9MTBdIHtudW1iZXJ9IFRoZSBudW1iZXIgb2YgcmVzb3VyY2VzIHRvIGxvYWQgY29uY3VycmVudGx5LlxuICovXG5mdW5jdGlvbiBMb2FkZXIoYmFzZVVybCwgY29uY3VycmVuY3kpXG57XG4gICAgUmVzb3VyY2VMb2FkZXIuY2FsbCh0aGlzLCBiYXNlVXJsLCBjb25jdXJyZW5jeSk7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IExvYWRlci5fcGl4aU1pZGRsZXdhcmUubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgdGhpcy51c2UoTG9hZGVyLl9waXhpTWlkZGxld2FyZVtpXSgpKTtcbiAgICB9XG59XG5cbkxvYWRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFJlc291cmNlTG9hZGVyLnByb3RvdHlwZSk7XG5Mb2FkZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gTG9hZGVyO1xuXG5tb2R1bGUuZXhwb3J0cyA9IExvYWRlcjtcblxuTG9hZGVyLl9waXhpTWlkZGxld2FyZSA9IFtcbiAgICAvLyBwYXJzZSBhbnkgYmxvYiBpbnRvIG1vcmUgdXNhYmxlIG9iamVjdHMgKGUuZy4gSW1hZ2UpXG4gICAgUmVzb3VyY2VMb2FkZXIubWlkZGxld2FyZS5wYXJzaW5nLmJsb2IsXG4gICAgLy8gcGFyc2UgYW55IEltYWdlIG9iamVjdHMgaW50byB0ZXh0dXJlc1xuICAgIHRleHR1cmVQYXJzZXIsXG4gICAgLy8gcGFyc2UgYW55IHNwcml0ZXNoZWV0IGRhdGEgaW50byBtdWx0aXBsZSB0ZXh0dXJlc1xuICAgIHNwcml0ZXNoZWV0UGFyc2VyLFxuICAgIC8vIHBhcnNlIGFueSBzcHJpdGVzaGVldCBkYXRhIGludG8gbXVsdGlwbGUgdGV4dHVyZXNcbiAgICBiaXRtYXBGb250UGFyc2VyXG5dO1xuXG5Mb2FkZXIuYWRkUGl4aU1pZGRsZXdhcmUgPSBmdW5jdGlvbiAoZm4pIHtcbiAgICBMb2FkZXIuX3BpeGlNaWRkbGV3YXJlLnB1c2goZm4pO1xufTtcblxuLy8gQWRkIGN1c3RvbSBleHRlbnRpb25zXG52YXIgUmVzb3VyY2UgPSBSZXNvdXJjZUxvYWRlci5SZXNvdXJjZTtcblxuUmVzb3VyY2Uuc2V0RXh0ZW5zaW9uWGhyVHlwZSgnZm50JywgUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuRE9DVU1FTlQpO1xuIiwidmFyIFJlc291cmNlID0gcmVxdWlyZSgncmVzb3VyY2UtbG9hZGVyJykuUmVzb3VyY2UsXG4gICAgcGF0aCA9IHJlcXVpcmUoJ3BhdGgnKSxcbiAgICBjb3JlID0gcmVxdWlyZSgnLi4vY29yZScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICgpXG57XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChyZXNvdXJjZSwgbmV4dClcbiAgICB7XG4gICAgICAgIC8vIHNraXAgaWYgbm8gZGF0YSwgaXRzIG5vdCBqc29uLCBvciBpdCBpc24ndCBzcHJpdGVzaGVldCBkYXRhXG4gICAgICAgIGlmICghcmVzb3VyY2UuZGF0YSB8fCAhcmVzb3VyY2UuaXNKc29uIHx8ICFyZXNvdXJjZS5kYXRhLmZyYW1lcylcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIG5leHQoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBsb2FkT3B0aW9ucyA9IHtcbiAgICAgICAgICAgIGNyb3NzT3JpZ2luOiByZXNvdXJjZS5jcm9zc09yaWdpbixcbiAgICAgICAgICAgIGxvYWRUeXBlOiBSZXNvdXJjZS5MT0FEX1RZUEUuSU1BR0UsXG4gICAgICAgICAgICBtZXRhZGF0YTogcmVzb3VyY2UubWV0YWRhdGEuaW1hZ2VNZXRhZGF0YVxuICAgICAgICB9O1xuXG4gICAgICAgIHZhciByb3V0ZSA9IHBhdGguZGlybmFtZShyZXNvdXJjZS51cmwucmVwbGFjZSh0aGlzLmJhc2VVcmwsICcnKSk7XG5cbiAgICAgICAgdmFyIHJlc29sdXRpb24gPSBjb3JlLnV0aWxzLmdldFJlc29sdXRpb25PZlVybCggcmVzb3VyY2UudXJsICk7XG5cbiAgICAgICAgLy8gbG9hZCB0aGUgaW1hZ2UgZm9yIHRoaXMgc2hlZXRcbiAgICAgICAgdGhpcy5hZGQocmVzb3VyY2UubmFtZSArICdfaW1hZ2UnLCByb3V0ZSArICcvJyArIHJlc291cmNlLmRhdGEubWV0YS5pbWFnZSwgbG9hZE9wdGlvbnMsIGZ1bmN0aW9uIChyZXMpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJlc291cmNlLnRleHR1cmVzID0ge307XG5cbiAgICAgICAgICAgIHZhciBmcmFtZXMgPSByZXNvdXJjZS5kYXRhLmZyYW1lcztcblxuICAgICAgICAgICAgZm9yICh2YXIgaSBpbiBmcmFtZXMpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdmFyIHJlY3QgPSBmcmFtZXNbaV0uZnJhbWU7XG5cbiAgICAgICAgICAgICAgICBpZiAocmVjdClcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBzaXplID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHRyaW0gPSBudWxsO1xuXG4gICAgICAgICAgICAgICAgICAgIGlmIChmcmFtZXNbaV0ucm90YXRlZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZSA9IG5ldyBjb3JlLlJlY3RhbmdsZShyZWN0LngsIHJlY3QueSwgcmVjdC5oLCByZWN0LncpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZSA9IG5ldyBjb3JlLlJlY3RhbmdsZShyZWN0LngsIHJlY3QueSwgcmVjdC53LCByZWN0LmgpO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgLy8gIENoZWNrIHRvIHNlZSBpZiB0aGUgc3ByaXRlIGlzIHRyaW1tZWRcbiAgICAgICAgICAgICAgICAgICAgaWYgKGZyYW1lc1tpXS50cmltbWVkKVxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0cmltID0gbmV3IGNvcmUuUmVjdGFuZ2xlKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyYW1lc1tpXS5zcHJpdGVTb3VyY2VTaXplLnggLyByZXNvbHV0aW9uLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyYW1lc1tpXS5zcHJpdGVTb3VyY2VTaXplLnkgLyByZXNvbHV0aW9uLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyYW1lc1tpXS5zb3VyY2VTaXplLncgLyByZXNvbHV0aW9uLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyYW1lc1tpXS5zb3VyY2VTaXplLmggLyByZXNvbHV0aW9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIC8vIGZsaXAgdGhlIHdpZHRoIGFuZCBoZWlnaHQhXG4gICAgICAgICAgICAgICAgICAgIGlmIChmcmFtZXNbaV0ucm90YXRlZClcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHRlbXAgPSBzaXplLndpZHRoO1xuICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZS53aWR0aCA9IHNpemUuaGVpZ2h0O1xuICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZS5oZWlnaHQgPSB0ZW1wO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgc2l6ZS54IC89IHJlc29sdXRpb247XG4gICAgICAgICAgICAgICAgICAgIHNpemUueSAvPSByZXNvbHV0aW9uO1xuICAgICAgICAgICAgICAgICAgICBzaXplLndpZHRoIC89IHJlc29sdXRpb247XG4gICAgICAgICAgICAgICAgICAgIHNpemUuaGVpZ2h0IC89IHJlc29sdXRpb247XG5cbiAgICAgICAgICAgICAgICAgICAgcmVzb3VyY2UudGV4dHVyZXNbaV0gPSBuZXcgY29yZS5UZXh0dXJlKHJlcy50ZXh0dXJlLmJhc2VUZXh0dXJlLCBzaXplLCBzaXplLmNsb25lKCksIHRyaW0sIGZyYW1lc1tpXS5yb3RhdGVkKTtcblxuICAgICAgICAgICAgICAgICAgICAvLyBsZXRzIGFsc28gYWRkIHRoZSBmcmFtZSB0byBwaXhpJ3MgZ2xvYmFsIGNhY2hlIGZvciBmcm9tRnJhbWUgYW5kIGZyb21JbWFnZSBmdW5jdGlvbnNcbiAgICAgICAgICAgICAgICAgICAgY29yZS51dGlscy5UZXh0dXJlQ2FjaGVbaV0gPSByZXNvdXJjZS50ZXh0dXJlc1tpXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIG5leHQoKTtcbiAgICAgICAgfSk7XG4gICAgfTtcbn07XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uL2NvcmUnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoKVxue1xuICAgIHJldHVybiBmdW5jdGlvbiAocmVzb3VyY2UsIG5leHQpXG4gICAge1xuICAgICAgICAvLyBjcmVhdGUgYSBuZXcgdGV4dHVyZSBpZiB0aGUgZGF0YSBpcyBhbiBJbWFnZSBvYmplY3RcbiAgICAgICAgaWYgKHJlc291cmNlLmRhdGEgJiYgcmVzb3VyY2UuaXNJbWFnZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdmFyIGJhc2VUZXh0dXJlID0gbmV3IGNvcmUuQmFzZVRleHR1cmUocmVzb3VyY2UuZGF0YSwgbnVsbCwgY29yZS51dGlscy5nZXRSZXNvbHV0aW9uT2ZVcmwocmVzb3VyY2UudXJsKSk7XG4gICAgICAgICAgICBiYXNlVGV4dHVyZS5pbWFnZVVybCA9IHJlc291cmNlLnVybDtcbiAgICAgICAgICAgIHJlc291cmNlLnRleHR1cmUgPSBuZXcgY29yZS5UZXh0dXJlKGJhc2VUZXh0dXJlKTtcbiAgICAgICAgICAgIC8vIGxldHMgYWxzbyBhZGQgdGhlIGZyYW1lIHRvIHBpeGkncyBnbG9iYWwgY2FjaGUgZm9yIGZyb21GcmFtZSBhbmQgZnJvbUltYWdlIGZ1Y250aW9uc1xuICAgICAgICAgICAgY29yZS51dGlscy5CYXNlVGV4dHVyZUNhY2hlW3Jlc291cmNlLnVybF0gPSBiYXNlVGV4dHVyZTtcbiAgICAgICAgICAgIGNvcmUudXRpbHMuVGV4dHVyZUNhY2hlW3Jlc291cmNlLnVybF0gPSByZXNvdXJjZS50ZXh0dXJlO1xuICAgICAgICB9XG5cbiAgICAgICAgbmV4dCgpO1xuICAgIH07XG59O1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi9jb3JlJyksXG4gICAgdGVtcFBvaW50ID0gbmV3IGNvcmUuUG9pbnQoKSxcbiAgICB0ZW1wUG9seWdvbiA9IG5ldyBjb3JlLlBvbHlnb24oKTtcblxuLyoqXG4gKiBCYXNlIG1lc2ggY2xhc3NcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5Db250YWluZXJcbiAqIEBtZW1iZXJvZiBQSVhJLm1lc2hcbiAqIEBwYXJhbSB0ZXh0dXJlIHtQSVhJLlRleHR1cmV9IFRoZSB0ZXh0dXJlIHRvIHVzZVxuICogQHBhcmFtIFt2ZXJ0aWNlc10ge0Zsb2F0MzJBcnJheX0gaWYgeW91IHdhbnQgdG8gc3BlY2lmeSB0aGUgdmVydGljZXNcbiAqIEBwYXJhbSBbdXZzXSB7RmxvYXQzMkFycmF5fSBpZiB5b3Ugd2FudCB0byBzcGVjaWZ5IHRoZSB1dnNcbiAqIEBwYXJhbSBbaW5kaWNlc10ge1VpbnQxNkFycmF5fSBpZiB5b3Ugd2FudCB0byBzcGVjaWZ5IHRoZSBpbmRpY2VzXG4gKiBAcGFyYW0gW2RyYXdNb2RlXSB7bnVtYmVyfSB0aGUgZHJhd01vZGUsIGNhbiBiZSBhbnkgb2YgdGhlIE1lc2guRFJBV19NT0RFUyBjb25zdHNcbiAqL1xuZnVuY3Rpb24gTWVzaCh0ZXh0dXJlLCB2ZXJ0aWNlcywgdXZzLCBpbmRpY2VzLCBkcmF3TW9kZSlcbntcbiAgICBjb3JlLkNvbnRhaW5lci5jYWxsKHRoaXMpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHRleHR1cmUgb2YgdGhlIE1lc2hcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuVGV4dHVyZX1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX3RleHR1cmUgPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogVGhlIFV2cyBvZiB0aGUgTWVzaFxuICAgICAqXG4gICAgICogQG1lbWJlciB7RmxvYXQzMkFycmF5fVxuICAgICAqL1xuICAgIHRoaXMudXZzID0gdXZzIHx8IG5ldyBGbG9hdDMyQXJyYXkoWzAsIDAsXG4gICAgICAgIDEsIDAsXG4gICAgICAgIDEsIDEsXG4gICAgICAgIDAsIDFdKTtcblxuICAgIC8qKlxuICAgICAqIEFuIGFycmF5IG9mIHZlcnRpY2VzXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtGbG9hdDMyQXJyYXl9XG4gICAgICovXG4gICAgdGhpcy52ZXJ0aWNlcyA9IHZlcnRpY2VzIHx8IG5ldyBGbG9hdDMyQXJyYXkoWzAsIDAsXG4gICAgICAgIDEwMCwgMCxcbiAgICAgICAgMTAwLCAxMDAsXG4gICAgICAgIDAsIDEwMF0pO1xuXG4gICAgLypcbiAgICAgKiBAbWVtYmVyIHtVaW50MTZBcnJheX0gQW4gYXJyYXkgY29udGFpbmluZyB0aGUgaW5kaWNlcyBvZiB0aGUgdmVydGljZXNcbiAgICAgKi9cbiAgICAvLyAgVE9ETyBhdXRvIGdlbmVyYXRlIHRoaXMgYmFzZWQgb24gZHJhdyBtb2RlIVxuICAgIHRoaXMuaW5kaWNlcyA9IGluZGljZXMgfHwgbmV3IFVpbnQxNkFycmF5KFswLCAxLCAzLCAyXSk7XG5cbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIHRoZSBNZXNoIGlzIGRpcnR5IG9yIG5vdFxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKi9cbiAgICB0aGlzLmRpcnR5ID0gdHJ1ZTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBibGVuZCBtb2RlIHRvIGJlIGFwcGxpZWQgdG8gdGhlIHNwcml0ZS4gU2V0IHRvIGBQSVhJLkJMRU5EX01PREVTLk5PUk1BTGAgdG8gcmVtb3ZlIGFueSBibGVuZCBtb2RlLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IFBJWEkuQkxFTkRfTU9ERVMuTk9STUFMXG4gICAgICogQHNlZSBQSVhJLkJMRU5EX01PREVTXG4gICAgICovXG4gICAgdGhpcy5ibGVuZE1vZGUgPSBjb3JlLkJMRU5EX01PREVTLk5PUk1BTDtcblxuICAgIC8qKlxuICAgICAqIFRyaWFuZ2xlcyBpbiBjYW52YXMgbW9kZSBhcmUgYXV0b21hdGljYWxseSBhbnRpYWxpYXNlZCwgdXNlIHRoaXMgdmFsdWUgdG8gZm9yY2UgdHJpYW5nbGVzIHRvIG92ZXJsYXAgYSBiaXQgd2l0aCBlYWNoIG90aGVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMuY2FudmFzUGFkZGluZyA9IDA7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgd2F5IHRoZSBNZXNoIHNob3VsZCBiZSBkcmF3biwgY2FuIGJlIGFueSBvZiB0aGUge0BsaW5rIFBJWEkubWVzaC5NZXNoLkRSQVdfTU9ERVN9IGNvbnN0c1xuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBzZWUgUElYSS5tZXNoLk1lc2guRFJBV19NT0RFU1xuICAgICAqL1xuICAgIHRoaXMuZHJhd01vZGUgPSBkcmF3TW9kZSB8fCBNZXNoLkRSQVdfTU9ERVMuVFJJQU5HTEVfTUVTSDtcblxuICAgIC8vIHJ1biB0ZXh0dXJlIHNldHRlcjtcbiAgICB0aGlzLnRleHR1cmUgPSB0ZXh0dXJlO1xuXG4gICAgIC8qKlxuICAgICAqIFRoZSBkZWZhdWx0IHNoYWRlciB0aGF0IGlzIHVzZWQgaWYgYSBtZXNoIGRvZXNuJ3QgaGF2ZSBhIG1vcmUgc3BlY2lmaWMgb25lLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5TaGFkZXJ9XG4gICAgICovXG4gICAgdGhpcy5zaGFkZXIgPSBudWxsO1xufVxuXG4vLyBjb25zdHJ1Y3RvclxuTWVzaC5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuQ29udGFpbmVyLnByb3RvdHlwZSk7XG5NZXNoLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IE1lc2g7XG5tb2R1bGUuZXhwb3J0cyA9IE1lc2g7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKE1lc2gucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogVGhlIHRleHR1cmUgdGhhdCB0aGUgc3ByaXRlIGlzIHVzaW5nXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlRleHR1cmV9XG4gICAgICogQG1lbWJlcm9mIFBJWEkubWVzaC5NZXNoI1xuICAgICAqL1xuICAgIHRleHR1cmU6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gIHRoaXMuX3RleHR1cmU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICBpZiAodGhpcy5fdGV4dHVyZSA9PT0gdmFsdWUpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLl90ZXh0dXJlID0gdmFsdWU7XG5cbiAgICAgICAgICAgIGlmICh2YWx1ZSlcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAvLyB3YWl0IGZvciB0aGUgdGV4dHVyZSB0byBsb2FkXG4gICAgICAgICAgICAgICAgaWYgKHZhbHVlLmJhc2VUZXh0dXJlLmhhc0xvYWRlZClcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX29uVGV4dHVyZVVwZGF0ZSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICB2YWx1ZS5vbmNlKCd1cGRhdGUnLCB0aGlzLl9vblRleHR1cmVVcGRhdGUsIHRoaXMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn0pO1xuXG4vKipcbiAqIFJlbmRlcnMgdGhlIG9iamVjdCB1c2luZyB0aGUgV2ViR0wgcmVuZGVyZXJcbiAqXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcn0gYSByZWZlcmVuY2UgdG8gdGhlIFdlYkdMIHJlbmRlcmVyXG4gKiBAcHJpdmF0ZVxuICovXG5NZXNoLnByb3RvdHlwZS5fcmVuZGVyV2ViR0wgPSBmdW5jdGlvbiAocmVuZGVyZXIpXG57XG4gICAgcmVuZGVyZXIuc2V0T2JqZWN0UmVuZGVyZXIocmVuZGVyZXIucGx1Z2lucy5tZXNoKTtcbiAgICByZW5kZXJlci5wbHVnaW5zLm1lc2gucmVuZGVyKHRoaXMpO1xufTtcblxuLyoqXG4gKiBSZW5kZXJzIHRoZSBvYmplY3QgdXNpbmcgdGhlIENhbnZhcyByZW5kZXJlclxuICpcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5DYW52YXNSZW5kZXJlcn1cbiAqIEBwcml2YXRlXG4gKi9cbk1lc2gucHJvdG90eXBlLl9yZW5kZXJDYW52YXMgPSBmdW5jdGlvbiAocmVuZGVyZXIpXG57XG4gICAgdmFyIGNvbnRleHQgPSByZW5kZXJlci5jb250ZXh0O1xuXG4gICAgdmFyIHRyYW5zZm9ybSA9IHRoaXMud29ybGRUcmFuc2Zvcm07XG5cbiAgICBpZiAocmVuZGVyZXIucm91bmRQaXhlbHMpXG4gICAge1xuICAgICAgICBjb250ZXh0LnNldFRyYW5zZm9ybSh0cmFuc2Zvcm0uYSwgdHJhbnNmb3JtLmIsIHRyYW5zZm9ybS5jLCB0cmFuc2Zvcm0uZCwgdHJhbnNmb3JtLnR4IHwgMCwgdHJhbnNmb3JtLnR5IHwgMCk7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIGNvbnRleHQuc2V0VHJhbnNmb3JtKHRyYW5zZm9ybS5hLCB0cmFuc2Zvcm0uYiwgdHJhbnNmb3JtLmMsIHRyYW5zZm9ybS5kLCB0cmFuc2Zvcm0udHgsIHRyYW5zZm9ybS50eSk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuZHJhd01vZGUgPT09IE1lc2guRFJBV19NT0RFUy5UUklBTkdMRV9NRVNIKVxuICAgIHtcbiAgICAgICAgdGhpcy5fcmVuZGVyQ2FudmFzVHJpYW5nbGVNZXNoKGNvbnRleHQpO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICB0aGlzLl9yZW5kZXJDYW52YXNUcmlhbmdsZXMoY29udGV4dCk7XG4gICAgfVxufTtcblxuLyoqXG4gKiBEcmF3cyB0aGUgb2JqZWN0IGluIFRyaWFuZ2xlIE1lc2ggbW9kZSB1c2luZyBjYW52YXNcbiAqXG4gKiBAcGFyYW0gY29udGV4dCB7Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEfSB0aGUgY3VycmVudCBkcmF3aW5nIGNvbnRleHRcbiAqIEBwcml2YXRlXG4gKi9cbk1lc2gucHJvdG90eXBlLl9yZW5kZXJDYW52YXNUcmlhbmdsZU1lc2ggPSBmdW5jdGlvbiAoY29udGV4dClcbntcbiAgICAvLyBkcmF3IHRyaWFuZ2xlcyEhXG4gICAgdmFyIHZlcnRpY2VzID0gdGhpcy52ZXJ0aWNlcztcbiAgICB2YXIgdXZzID0gdGhpcy51dnM7XG5cbiAgICB2YXIgbGVuZ3RoID0gdmVydGljZXMubGVuZ3RoIC8gMjtcbiAgICAvLyB0aGlzLmNvdW50Kys7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aCAtIDI7IGkrKylcbiAgICB7XG4gICAgICAgIC8vIGRyYXcgc29tZSB0cmlhbmdsZXMhXG4gICAgICAgIHZhciBpbmRleCA9IGkgKiAyO1xuICAgICAgICB0aGlzLl9yZW5kZXJDYW52YXNEcmF3VHJpYW5nbGUoY29udGV4dCwgdmVydGljZXMsIHV2cywgaW5kZXgsIChpbmRleCArIDIpLCAoaW5kZXggKyA0KSk7XG4gICAgfVxufTtcblxuLyoqXG4gKiBEcmF3cyB0aGUgb2JqZWN0IGluIHRyaWFuZ2xlIG1vZGUgdXNpbmcgY2FudmFzXG4gKlxuICogQHBhcmFtIGNvbnRleHQge0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRH0gdGhlIGN1cnJlbnQgZHJhd2luZyBjb250ZXh0XG4gKiBAcHJpdmF0ZVxuICovXG5NZXNoLnByb3RvdHlwZS5fcmVuZGVyQ2FudmFzVHJpYW5nbGVzID0gZnVuY3Rpb24gKGNvbnRleHQpXG57XG4gICAgLy8gZHJhdyB0cmlhbmdsZXMhIVxuICAgIHZhciB2ZXJ0aWNlcyA9IHRoaXMudmVydGljZXM7XG4gICAgdmFyIHV2cyA9IHRoaXMudXZzO1xuICAgIHZhciBpbmRpY2VzID0gdGhpcy5pbmRpY2VzO1xuXG4gICAgdmFyIGxlbmd0aCA9IGluZGljZXMubGVuZ3RoO1xuICAgIC8vIHRoaXMuY291bnQrKztcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyBpICs9IDMpXG4gICAge1xuICAgICAgICAvLyBkcmF3IHNvbWUgdHJpYW5nbGVzIVxuICAgICAgICB2YXIgaW5kZXgwID0gaW5kaWNlc1tpXSAqIDIsIGluZGV4MSA9IGluZGljZXNbaSArIDFdICogMiwgaW5kZXgyID0gaW5kaWNlc1tpICsgMl0gKiAyO1xuICAgICAgICB0aGlzLl9yZW5kZXJDYW52YXNEcmF3VHJpYW5nbGUoY29udGV4dCwgdmVydGljZXMsIHV2cywgaW5kZXgwLCBpbmRleDEsIGluZGV4Mik7XG4gICAgfVxufTtcblxuLyoqXG4gKiBEcmF3cyBvbmUgb2YgdGhlIHRyaWFuZ2xlcyB0aGF0IGZvcm0gdGhpcyBNZXNoXG4gKlxuICogQHBhcmFtIGNvbnRleHQge0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRH0gdGhlIGN1cnJlbnQgZHJhd2luZyBjb250ZXh0XG4gKiBAcGFyYW0gdmVydGljZXMge0Zsb2F0MzJBcnJheX0gYSByZWZlcmVuY2UgdG8gdGhlIHZlcnRpY2VzIG9mIHRoZSBNZXNoXG4gKiBAcGFyYW0gdXZzIHtGbG9hdDMyQXJyYXl9IGEgcmVmZXJlbmNlIHRvIHRoZSB1dnMgb2YgdGhlIE1lc2hcbiAqIEBwYXJhbSBpbmRleDAge251bWJlcn0gdGhlIGluZGV4IG9mIHRoZSBmaXJzdCB2ZXJ0ZXhcbiAqIEBwYXJhbSBpbmRleDEge251bWJlcn0gdGhlIGluZGV4IG9mIHRoZSBzZWNvbmQgdmVydGV4XG4gKiBAcGFyYW0gaW5kZXgyIHtudW1iZXJ9IHRoZSBpbmRleCBvZiB0aGUgdGhpcmQgdmVydGV4XG4gKiBAcHJpdmF0ZVxuICovXG5NZXNoLnByb3RvdHlwZS5fcmVuZGVyQ2FudmFzRHJhd1RyaWFuZ2xlID0gZnVuY3Rpb24gKGNvbnRleHQsIHZlcnRpY2VzLCB1dnMsIGluZGV4MCwgaW5kZXgxLCBpbmRleDIpXG57XG4gICAgdmFyIHRleHR1cmVTb3VyY2UgPSB0aGlzLl90ZXh0dXJlLmJhc2VUZXh0dXJlLnNvdXJjZTtcbiAgICB2YXIgdGV4dHVyZVdpZHRoID0gdGhpcy5fdGV4dHVyZS5iYXNlVGV4dHVyZS53aWR0aDtcbiAgICB2YXIgdGV4dHVyZUhlaWdodCA9IHRoaXMuX3RleHR1cmUuYmFzZVRleHR1cmUuaGVpZ2h0O1xuXG4gICAgdmFyIHgwID0gdmVydGljZXNbaW5kZXgwXSwgeDEgPSB2ZXJ0aWNlc1tpbmRleDFdLCB4MiA9IHZlcnRpY2VzW2luZGV4Ml07XG4gICAgdmFyIHkwID0gdmVydGljZXNbaW5kZXgwICsgMV0sIHkxID0gdmVydGljZXNbaW5kZXgxICsgMV0sIHkyID0gdmVydGljZXNbaW5kZXgyICsgMV07XG5cbiAgICB2YXIgdTAgPSB1dnNbaW5kZXgwXSAqIHRleHR1cmVXaWR0aCwgdTEgPSB1dnNbaW5kZXgxXSAqIHRleHR1cmVXaWR0aCwgdTIgPSB1dnNbaW5kZXgyXSAqIHRleHR1cmVXaWR0aDtcbiAgICB2YXIgdjAgPSB1dnNbaW5kZXgwICsgMV0gKiB0ZXh0dXJlSGVpZ2h0LCB2MSA9IHV2c1tpbmRleDEgKyAxXSAqIHRleHR1cmVIZWlnaHQsIHYyID0gdXZzW2luZGV4MiArIDFdICogdGV4dHVyZUhlaWdodDtcblxuICAgIGlmICh0aGlzLmNhbnZhc1BhZGRpbmcgPiAwKVxuICAgIHtcbiAgICAgICAgdmFyIHBhZGRpbmdYID0gdGhpcy5jYW52YXNQYWRkaW5nIC8gdGhpcy53b3JsZFRyYW5zZm9ybS5hO1xuICAgICAgICB2YXIgcGFkZGluZ1kgPSB0aGlzLmNhbnZhc1BhZGRpbmcgLyB0aGlzLndvcmxkVHJhbnNmb3JtLmQ7XG4gICAgICAgIHZhciBjZW50ZXJYID0gKHgwICsgeDEgKyB4MikgLyAzO1xuICAgICAgICB2YXIgY2VudGVyWSA9ICh5MCArIHkxICsgeTIpIC8gMztcblxuICAgICAgICB2YXIgbm9ybVggPSB4MCAtIGNlbnRlclg7XG4gICAgICAgIHZhciBub3JtWSA9IHkwIC0gY2VudGVyWTtcblxuICAgICAgICB2YXIgZGlzdCA9IE1hdGguc3FydChub3JtWCAqIG5vcm1YICsgbm9ybVkgKiBub3JtWSk7XG4gICAgICAgIHgwID0gY2VudGVyWCArIChub3JtWCAvIGRpc3QpICogKGRpc3QgKyBwYWRkaW5nWCk7XG4gICAgICAgIHkwID0gY2VudGVyWSArIChub3JtWSAvIGRpc3QpICogKGRpc3QgKyBwYWRkaW5nWSk7XG5cbiAgICAgICAgLy9cblxuICAgICAgICBub3JtWCA9IHgxIC0gY2VudGVyWDtcbiAgICAgICAgbm9ybVkgPSB5MSAtIGNlbnRlclk7XG5cbiAgICAgICAgZGlzdCA9IE1hdGguc3FydChub3JtWCAqIG5vcm1YICsgbm9ybVkgKiBub3JtWSk7XG4gICAgICAgIHgxID0gY2VudGVyWCArIChub3JtWCAvIGRpc3QpICogKGRpc3QgKyBwYWRkaW5nWCk7XG4gICAgICAgIHkxID0gY2VudGVyWSArIChub3JtWSAvIGRpc3QpICogKGRpc3QgKyBwYWRkaW5nWSk7XG5cbiAgICAgICAgbm9ybVggPSB4MiAtIGNlbnRlclg7XG4gICAgICAgIG5vcm1ZID0geTIgLSBjZW50ZXJZO1xuXG4gICAgICAgIGRpc3QgPSBNYXRoLnNxcnQobm9ybVggKiBub3JtWCArIG5vcm1ZICogbm9ybVkpO1xuICAgICAgICB4MiA9IGNlbnRlclggKyAobm9ybVggLyBkaXN0KSAqIChkaXN0ICsgcGFkZGluZ1gpO1xuICAgICAgICB5MiA9IGNlbnRlclkgKyAobm9ybVkgLyBkaXN0KSAqIChkaXN0ICsgcGFkZGluZ1kpO1xuICAgIH1cblxuICAgIGNvbnRleHQuc2F2ZSgpO1xuICAgIGNvbnRleHQuYmVnaW5QYXRoKCk7XG5cblxuICAgIGNvbnRleHQubW92ZVRvKHgwLCB5MCk7XG4gICAgY29udGV4dC5saW5lVG8oeDEsIHkxKTtcbiAgICBjb250ZXh0LmxpbmVUbyh4MiwgeTIpO1xuXG4gICAgY29udGV4dC5jbG9zZVBhdGgoKTtcblxuICAgIGNvbnRleHQuY2xpcCgpO1xuXG4gICAgLy8gQ29tcHV0ZSBtYXRyaXggdHJhbnNmb3JtXG4gICAgdmFyIGRlbHRhID0gICh1MCAqIHYxKSAgICAgICsgKHYwICogdTIpICAgICAgKyAodTEgKiB2MikgICAgICAtICh2MSAqIHUyKSAgICAgIC0gKHYwICogdTEpICAgICAgLSAodTAgKiB2Mik7XG4gICAgdmFyIGRlbHRhQSA9ICh4MCAqIHYxKSAgICAgICsgKHYwICogeDIpICAgICAgKyAoeDEgKiB2MikgICAgICAtICh2MSAqIHgyKSAgICAgIC0gKHYwICogeDEpICAgICAgLSAoeDAgKiB2Mik7XG4gICAgdmFyIGRlbHRhQiA9ICh1MCAqIHgxKSAgICAgICsgKHgwICogdTIpICAgICAgKyAodTEgKiB4MikgICAgICAtICh4MSAqIHUyKSAgICAgIC0gKHgwICogdTEpICAgICAgLSAodTAgKiB4Mik7XG4gICAgdmFyIGRlbHRhQyA9ICh1MCAqIHYxICogeDIpICsgKHYwICogeDEgKiB1MikgKyAoeDAgKiB1MSAqIHYyKSAtICh4MCAqIHYxICogdTIpIC0gKHYwICogdTEgKiB4MikgLSAodTAgKiB4MSAqIHYyKTtcbiAgICB2YXIgZGVsdGFEID0gKHkwICogdjEpICAgICAgKyAodjAgKiB5MikgICAgICArICh5MSAqIHYyKSAgICAgIC0gKHYxICogeTIpICAgICAgLSAodjAgKiB5MSkgICAgICAtICh5MCAqIHYyKTtcbiAgICB2YXIgZGVsdGFFID0gKHUwICogeTEpICAgICAgKyAoeTAgKiB1MikgICAgICArICh1MSAqIHkyKSAgICAgIC0gKHkxICogdTIpICAgICAgLSAoeTAgKiB1MSkgICAgICAtICh1MCAqIHkyKTtcbiAgICB2YXIgZGVsdGFGID0gKHUwICogdjEgKiB5MikgKyAodjAgKiB5MSAqIHUyKSArICh5MCAqIHUxICogdjIpIC0gKHkwICogdjEgKiB1MikgLSAodjAgKiB1MSAqIHkyKSAtICh1MCAqIHkxICogdjIpO1xuXG4gICAgY29udGV4dC50cmFuc2Zvcm0oZGVsdGFBIC8gZGVsdGEsIGRlbHRhRCAvIGRlbHRhLFxuICAgICAgICBkZWx0YUIgLyBkZWx0YSwgZGVsdGFFIC8gZGVsdGEsXG4gICAgICAgIGRlbHRhQyAvIGRlbHRhLCBkZWx0YUYgLyBkZWx0YSk7XG5cbiAgICBjb250ZXh0LmRyYXdJbWFnZSh0ZXh0dXJlU291cmNlLCAwLCAwKTtcbiAgICBjb250ZXh0LnJlc3RvcmUoKTtcbn07XG5cblxuXG4vKipcbiAqIFJlbmRlcnMgYSBmbGF0IE1lc2hcbiAqXG4gKiBAcGFyYW0gTWVzaCB7UElYSS5tZXNoLk1lc2h9IFRoZSBNZXNoIHRvIHJlbmRlclxuICogQHByaXZhdGVcbiAqL1xuTWVzaC5wcm90b3R5cGUucmVuZGVyTWVzaEZsYXQgPSBmdW5jdGlvbiAoTWVzaClcbntcbiAgICB2YXIgY29udGV4dCA9IHRoaXMuY29udGV4dDtcbiAgICB2YXIgdmVydGljZXMgPSBNZXNoLnZlcnRpY2VzO1xuXG4gICAgdmFyIGxlbmd0aCA9IHZlcnRpY2VzLmxlbmd0aC8yO1xuICAgIC8vIHRoaXMuY291bnQrKztcblxuICAgIGNvbnRleHQuYmVnaW5QYXRoKCk7XG4gICAgZm9yICh2YXIgaT0xOyBpIDwgbGVuZ3RoLTI7IGkrKylcbiAgICB7XG4gICAgICAgIC8vIGRyYXcgc29tZSB0cmlhbmdsZXMhXG4gICAgICAgIHZhciBpbmRleCA9IGkqMjtcblxuICAgICAgICB2YXIgeDAgPSB2ZXJ0aWNlc1tpbmRleF0sICAgeDEgPSB2ZXJ0aWNlc1tpbmRleCsyXSwgeDIgPSB2ZXJ0aWNlc1tpbmRleCs0XTtcbiAgICAgICAgdmFyIHkwID0gdmVydGljZXNbaW5kZXgrMV0sIHkxID0gdmVydGljZXNbaW5kZXgrM10sIHkyID0gdmVydGljZXNbaW5kZXgrNV07XG5cbiAgICAgICAgY29udGV4dC5tb3ZlVG8oeDAsIHkwKTtcbiAgICAgICAgY29udGV4dC5saW5lVG8oeDEsIHkxKTtcbiAgICAgICAgY29udGV4dC5saW5lVG8oeDIsIHkyKTtcbiAgICB9XG5cbiAgICBjb250ZXh0LmZpbGxTdHlsZSA9ICcjRkYwMDAwJztcbiAgICBjb250ZXh0LmZpbGwoKTtcbiAgICBjb250ZXh0LmNsb3NlUGF0aCgpO1xufTtcblxuLyoqXG4gKiBXaGVuIHRoZSB0ZXh0dXJlIGlzIHVwZGF0ZWQsIHRoaXMgZXZlbnQgd2lsbCBmaXJlIHRvIHVwZGF0ZSB0aGUgc2NhbGUgYW5kIGZyYW1lXG4gKlxuICogQHBhcmFtIGV2ZW50XG4gKiBAcHJpdmF0ZVxuICovXG5NZXNoLnByb3RvdHlwZS5fb25UZXh0dXJlVXBkYXRlID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLnVwZGF0ZUZyYW1lID0gdHJ1ZTtcbn07XG5cbi8qKlxuICogUmV0dXJucyB0aGUgYm91bmRzIG9mIHRoZSBtZXNoIGFzIGEgcmVjdGFuZ2xlLiBUaGUgYm91bmRzIGNhbGN1bGF0aW9uIHRha2VzIHRoZSB3b3JsZFRyYW5zZm9ybSBpbnRvIGFjY291bnQuXG4gKlxuICogQHBhcmFtIG1hdHJpeCB7UElYSS5NYXRyaXh9IHRoZSB0cmFuc2Zvcm1hdGlvbiBtYXRyaXggb2YgdGhlIHNwcml0ZVxuICogQHJldHVybiB7UElYSS5SZWN0YW5nbGV9IHRoZSBmcmFtaW5nIHJlY3RhbmdsZVxuICovXG5NZXNoLnByb3RvdHlwZS5nZXRCb3VuZHMgPSBmdW5jdGlvbiAobWF0cml4KVxue1xuICAgIGlmICghdGhpcy5fY3VycmVudEJvdW5kcykge1xuICAgICAgICB2YXIgd29ybGRUcmFuc2Zvcm0gPSBtYXRyaXggfHwgdGhpcy53b3JsZFRyYW5zZm9ybTtcblxuICAgICAgICB2YXIgYSA9IHdvcmxkVHJhbnNmb3JtLmE7XG4gICAgICAgIHZhciBiID0gd29ybGRUcmFuc2Zvcm0uYjtcbiAgICAgICAgdmFyIGMgPSB3b3JsZFRyYW5zZm9ybS5jO1xuICAgICAgICB2YXIgZCA9IHdvcmxkVHJhbnNmb3JtLmQ7XG4gICAgICAgIHZhciB0eCA9IHdvcmxkVHJhbnNmb3JtLnR4O1xuICAgICAgICB2YXIgdHkgPSB3b3JsZFRyYW5zZm9ybS50eTtcblxuICAgICAgICB2YXIgbWF4WCA9IC1JbmZpbml0eTtcbiAgICAgICAgdmFyIG1heFkgPSAtSW5maW5pdHk7XG5cbiAgICAgICAgdmFyIG1pblggPSBJbmZpbml0eTtcbiAgICAgICAgdmFyIG1pblkgPSBJbmZpbml0eTtcblxuICAgICAgICB2YXIgdmVydGljZXMgPSB0aGlzLnZlcnRpY2VzO1xuICAgICAgICBmb3IgKHZhciBpID0gMCwgbiA9IHZlcnRpY2VzLmxlbmd0aDsgaSA8IG47IGkgKz0gMikge1xuICAgICAgICAgICAgdmFyIHJhd1ggPSB2ZXJ0aWNlc1tpXSwgcmF3WSA9IHZlcnRpY2VzW2kgKyAxXTtcbiAgICAgICAgICAgIHZhciB4ID0gKGEgKiByYXdYKSArIChjICogcmF3WSkgKyB0eDtcbiAgICAgICAgICAgIHZhciB5ID0gKGQgKiByYXdZKSArIChiICogcmF3WCkgKyB0eTtcblxuICAgICAgICAgICAgbWluWCA9IHggPCBtaW5YID8geCA6IG1pblg7XG4gICAgICAgICAgICBtaW5ZID0geSA8IG1pblkgPyB5IDogbWluWTtcblxuICAgICAgICAgICAgbWF4WCA9IHggPiBtYXhYID8geCA6IG1heFg7XG4gICAgICAgICAgICBtYXhZID0geSA+IG1heFkgPyB5IDogbWF4WTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChtaW5YID09PSAtSW5maW5pdHkgfHwgbWF4WSA9PT0gSW5maW5pdHkpIHtcbiAgICAgICAgICAgIHJldHVybiBjb3JlLlJlY3RhbmdsZS5FTVBUWTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBib3VuZHMgPSB0aGlzLl9ib3VuZHM7XG5cbiAgICAgICAgYm91bmRzLnggPSBtaW5YO1xuICAgICAgICBib3VuZHMud2lkdGggPSBtYXhYIC0gbWluWDtcblxuICAgICAgICBib3VuZHMueSA9IG1pblk7XG4gICAgICAgIGJvdW5kcy5oZWlnaHQgPSBtYXhZIC0gbWluWTtcblxuICAgICAgICAvLyBzdG9yZSBhIHJlZmVyZW5jZSBzbyB0aGF0IGlmIHRoaXMgZnVuY3Rpb24gZ2V0cyBjYWxsZWQgYWdhaW4gaW4gdGhlIHJlbmRlciBjeWNsZSB3ZSBkbyBub3QgaGF2ZSB0byByZWNhbGN1bGF0ZVxuICAgICAgICB0aGlzLl9jdXJyZW50Qm91bmRzID0gYm91bmRzO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLl9jdXJyZW50Qm91bmRzO1xufTtcblxuLyoqXG4gKiBUZXN0cyBpZiBhIHBvaW50IGlzIGluc2lkZSB0aGlzIG1lc2guIFdvcmtzIG9ubHkgZm9yIFRSSUFOR0xFX01FU0hcbiAqXG4gKiBAcGFyYW0gcG9pbnQge1BJWEkuUG9pbnR9IHRoZSBwb2ludCB0byB0ZXN0XG4gKiBAcmV0dXJuIHtib29sZWFufSB0aGUgcmVzdWx0IG9mIHRoZSB0ZXN0XG4gKi9cbk1lc2gucHJvdG90eXBlLmNvbnRhaW5zUG9pbnQgPSBmdW5jdGlvbiggcG9pbnQgKSB7XG4gICAgaWYgKCF0aGlzLmdldEJvdW5kcygpLmNvbnRhaW5zKHBvaW50LngsIHBvaW50LnkpKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgdGhpcy53b3JsZFRyYW5zZm9ybS5hcHBseUludmVyc2UocG9pbnQsICB0ZW1wUG9pbnQpO1xuXG4gICAgdmFyIHZlcnRpY2VzID0gdGhpcy52ZXJ0aWNlcztcbiAgICB2YXIgcG9pbnRzID0gdGVtcFBvbHlnb24ucG9pbnRzO1xuICAgIHZhciBpLCBsZW47XG5cbiAgICBpZiAodGhpcy5kcmF3TW9kZSA9PT0gTWVzaC5EUkFXX01PREVTLlRSSUFOR0xFUykge1xuICAgICAgICB2YXIgaW5kaWNlcyA9IHRoaXMuaW5kaWNlcztcbiAgICAgICAgbGVuID0gdGhpcy5pbmRpY2VzLmxlbmd0aDtcbiAgICAgICAgLy9UT0RPOiBpbmxpbmUgdGhpcy5cbiAgICAgICAgZm9yIChpPTA7aTxsZW47aSs9Mykge1xuICAgICAgICAgICAgdmFyIGluZDAgPSBpbmRpY2VzW2ldKjIsIGluZDEgPSBpbmRpY2VzW2krMV0qMiwgaW5kMiA9IGluZGljZXNbaSsyXSoyO1xuICAgICAgICAgICAgcG9pbnRzWzBdID0gdmVydGljZXNbaW5kMF07XG4gICAgICAgICAgICBwb2ludHNbMV0gPSB2ZXJ0aWNlc1tpbmQwKzFdO1xuICAgICAgICAgICAgcG9pbnRzWzJdID0gdmVydGljZXNbaW5kMV07XG4gICAgICAgICAgICBwb2ludHNbM10gPSB2ZXJ0aWNlc1tpbmQxKzFdO1xuICAgICAgICAgICAgcG9pbnRzWzRdID0gdmVydGljZXNbaW5kMl07XG4gICAgICAgICAgICBwb2ludHNbNV0gPSB2ZXJ0aWNlc1tpbmQyKzFdO1xuICAgICAgICAgICAgaWYgKHRlbXBQb2x5Z29uLmNvbnRhaW5zKHRlbXBQb2ludC54LCB0ZW1wUG9pbnQueSkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAgIGxlbiA9IHZlcnRpY2VzLmxlbmd0aDtcbiAgICAgICAgZm9yIChpPTA7aTxsZW47aSs9Nikge1xuICAgICAgICAgICAgcG9pbnRzWzBdID0gdmVydGljZXNbaV07XG4gICAgICAgICAgICBwb2ludHNbMV0gPSB2ZXJ0aWNlc1tpKzFdO1xuICAgICAgICAgICAgcG9pbnRzWzJdID0gdmVydGljZXNbaSsyXTtcbiAgICAgICAgICAgIHBvaW50c1szXSA9IHZlcnRpY2VzW2krM107XG4gICAgICAgICAgICBwb2ludHNbNF0gPSB2ZXJ0aWNlc1tpKzRdO1xuICAgICAgICAgICAgcG9pbnRzWzVdID0gdmVydGljZXNbaSs1XTtcbiAgICAgICAgICAgIGlmICh0ZW1wUG9seWdvbi5jb250YWlucyh0ZW1wUG9pbnQueCwgdGVtcFBvaW50LnkpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xufTtcblxuLyoqXG4gKiBEaWZmZXJlbnQgZHJhd2luZyBidWZmZXIgbW9kZXMgc3VwcG9ydGVkXG4gKlxuICogQHN0YXRpY1xuICogQGNvbnN0YW50XG4gKiBAcHJvcGVydHkge29iamVjdH0gRFJBV19NT0RFU1xuICogQHByb3BlcnR5IHtudW1iZXJ9IERSQVdfTU9ERVMuVFJJQU5HTEVfTUVTSFxuICogQHByb3BlcnR5IHtudW1iZXJ9IERSQVdfTU9ERVMuVFJJQU5HTEVTXG4gKi9cbk1lc2guRFJBV19NT0RFUyA9IHtcbiAgICBUUklBTkdMRV9NRVNIOiAwLFxuICAgIFRSSUFOR0xFUzogMVxufTtcbiIsInZhciBNZXNoID0gcmVxdWlyZSgnLi9NZXNoJyk7XG5cbi8qKlxuICogVGhlIFBsYW5lIGFsbG93cyB5b3UgdG8gZHJhdyBhIHRleHR1cmUgYWNyb3NzIHNldmVyYWwgcG9pbnRzIGFuZCB0aGVtIG1hbmlwdWxhdGUgdGhlc2UgcG9pbnRzXG4gKlxuICpgYGBqc1xuICogZm9yICh2YXIgaSA9IDA7IGkgPCAyMDsgaSsrKSB7XG4gKiAgICAgcG9pbnRzLnB1c2gobmV3IFBJWEkuUG9pbnQoaSAqIDUwLCAwKSk7XG4gKiB9O1xuICogdmFyIFBsYW5lID0gbmV3IFBJWEkuUGxhbmUoUElYSS5UZXh0dXJlLmZyb21JbWFnZShcInNuYWtlLnBuZ1wiKSwgcG9pbnRzKTtcbiAqICBgYGBcbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkubWVzaC5NZXNoXG4gKiBAbWVtYmVyb2YgUElYSS5tZXNoXG4gKiBAcGFyYW0ge1BJWEkuVGV4dHVyZX0gdGV4dHVyZSAtIFRoZSB0ZXh0dXJlIHRvIHVzZSBvbiB0aGUgUGxhbmUuXG4gKiBAcGFyYW0ge2ludH0gc2VnbWVudHNYIC0gVGhlIG51bWJlciBveCB4IHNlZ21lbnRzXG4gKiBAcGFyYW0ge2ludH0gc2VnbWVudHNZIC0gVGhlIG51bWJlciBvZiB5IHNlZ21lbnRzXG4gKlxuICovXG5mdW5jdGlvbiBQbGFuZSh0ZXh0dXJlLCBzZWdtZW50c1gsIHNlZ21lbnRzWSlcbntcbiAgICBNZXNoLmNhbGwodGhpcywgdGV4dHVyZSk7XG5cbiAgICAvKipcbiAgICAgKiBUcmFja2VyIGZvciBpZiB0aGUgUGxhbmUgaXMgcmVhZHkgdG8gYmUgZHJhd24uIE5lZWRlZCBiZWNhdXNlIE1lc2ggY3RvciBjYW5cbiAgICAgKiBjYWxsIF9vblRleHR1cmVVcGRhdGVkIHdoaWNoIGNvdWxkIGNhbGwgcmVmcmVzaCB0b28gZWFybHkuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fcmVhZHkgPSB0cnVlO1xuXG4gICAgdGhpcy5zZWdtZW50c1ggPSAgc2VnbWVudHNYIHx8IDEwO1xuICAgIHRoaXMuc2VnbWVudHNZID0gc2VnbWVudHNZIHx8IDEwO1xuXG4gICAgdGhpcy5kcmF3TW9kZSA9IE1lc2guRFJBV19NT0RFUy5UUklBTkdMRVM7XG4gICAgdGhpcy5yZWZyZXNoKCk7XG5cbn1cblxuXG4vLyBjb25zdHJ1Y3RvclxuUGxhbmUucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZSggTWVzaC5wcm90b3R5cGUgKTtcblBsYW5lLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFBsYW5lO1xubW9kdWxlLmV4cG9ydHMgPSBQbGFuZTtcblxuLyoqXG4gKiBSZWZyZXNoZXNcbiAqXG4gKi9cblBsYW5lLnByb3RvdHlwZS5yZWZyZXNoID0gZnVuY3Rpb24oKVxue1xuICAgIHZhciB0b3RhbCA9IHRoaXMuc2VnbWVudHNYICogdGhpcy5zZWdtZW50c1k7XG4gICAgdmFyIHZlcnRzID0gW107XG4gICAgdmFyIGNvbG9ycyA9IFtdO1xuICAgIHZhciB1dnMgPSBbXTtcbiAgICB2YXIgaW5kaWNlcyA9IFtdO1xuICAgIHZhciB0ZXh0dXJlID0gdGhpcy50ZXh0dXJlO1xuXG4gIC8vICB0ZXh0dXJlLndpZHRoID0gODAwIHRleHR1cmUud2lkdGggfHwgODAwO1xuIC8vICAgdGV4dHVyZS5oZWlnaHQgPSA4MDAvL3RleHR1cmUuaGVpZ2h0IHx8IDgwMDtcblxuICAgIHZhciBzZWdtZW50c1hTdWIgPSB0aGlzLnNlZ21lbnRzWCAtIDE7XG4gICAgdmFyIHNlZ21lbnRzWVN1YiA9IHRoaXMuc2VnbWVudHNZIC0gMTtcbiAgICB2YXIgaSA9IDA7XG5cbiAgICB2YXIgc2l6ZVggPSB0ZXh0dXJlLndpZHRoIC8gc2VnbWVudHNYU3ViO1xuICAgIHZhciBzaXplWSA9IHRleHR1cmUuaGVpZ2h0IC8gc2VnbWVudHNZU3ViO1xuXG4gICAgZm9yIChpID0gMDsgaSA8IHRvdGFsOyBpKyspIHtcblxuICAgICAgICB2YXIgeCA9IChpICUgdGhpcy5zZWdtZW50c1gpO1xuICAgICAgICB2YXIgeSA9ICggKGkgLyB0aGlzLnNlZ21lbnRzWCApIHwgMCApO1xuXG5cbiAgICAgICAgdmVydHMucHVzaCgoeCAqIHNpemVYKSxcbiAgICAgICAgICAgICAgICAgICAoeSAqIHNpemVZKSk7XG5cbiAgICAgICAgLy8gdGhpcyB3b3JrcyBmb3IgcmVjdGFuZ3VsYXIgdGV4dHVyZXMuIFxuICAgICAgICB1dnMucHVzaCh0ZXh0dXJlLl91dnMueDAgKyAodGV4dHVyZS5fdXZzLngxIC0gdGV4dHVyZS5fdXZzLngwKSAqICh4IC8gKHRoaXMuc2VnbWVudHNYLTEpKSwgdGV4dHVyZS5fdXZzLnkwICsgKHRleHR1cmUuX3V2cy55My10ZXh0dXJlLl91dnMueTApICogKHkvICh0aGlzLnNlZ21lbnRzWS0xKSkpO1xuICAgICAgfVxuXG4gICAgLy8gIGNvbnNcblxuICAgIHZhciB0b3RhbFN1YiA9IHNlZ21lbnRzWFN1YiAqIHNlZ21lbnRzWVN1YjtcblxuICAgIGZvciAoaSA9IDA7IGkgPCB0b3RhbFN1YjsgaSsrKSB7XG5cbiAgICAgICAgdmFyIHhwb3MgPSBpICUgc2VnbWVudHNYU3ViO1xuICAgICAgICB2YXIgeXBvcyA9IChpIC8gc2VnbWVudHNYU3ViICkgfCAwO1xuXG5cbiAgICAgICAgdmFyICB2YWx1ZSA9ICh5cG9zICogdGhpcy5zZWdtZW50c1gpICsgeHBvcztcbiAgICAgICAgdmFyICB2YWx1ZTIgPSAoeXBvcyAqIHRoaXMuc2VnbWVudHNYKSArIHhwb3MgKyAxO1xuICAgICAgICB2YXIgIHZhbHVlMyA9ICgoeXBvcysxKSAqIHRoaXMuc2VnbWVudHNYKSArIHhwb3M7XG4gICAgICAgIHZhciAgdmFsdWU0ID0gKCh5cG9zKzEpICogdGhpcy5zZWdtZW50c1gpICsgeHBvcyArIDE7XG5cbiAgICAgICAgaW5kaWNlcy5wdXNoKHZhbHVlLCB2YWx1ZTIsIHZhbHVlMyk7XG4gICAgICAgIGluZGljZXMucHVzaCh2YWx1ZTIsIHZhbHVlNCwgdmFsdWUzKTtcbiAgICB9XG5cblxuICAgIC8vY29uc29sZS5sb2coaW5kaWNlcylcbiAgICB0aGlzLnZlcnRpY2VzID0gbmV3IEZsb2F0MzJBcnJheSh2ZXJ0cyk7XG4gICAgdGhpcy51dnMgPSBuZXcgRmxvYXQzMkFycmF5KHV2cyk7XG4gICAgdGhpcy5jb2xvcnMgPSBuZXcgRmxvYXQzMkFycmF5KGNvbG9ycyk7XG4gICAgdGhpcy5pbmRpY2VzID0gbmV3IFVpbnQxNkFycmF5KGluZGljZXMpO1xufTtcblxuLyoqXG4gKiBDbGVhciB0ZXh0dXJlIFVWcyB3aGVuIG5ldyB0ZXh0dXJlIGlzIHNldFxuICpcbiAqIEBwcml2YXRlXG4gKi9cblBsYW5lLnByb3RvdHlwZS5fb25UZXh0dXJlVXBkYXRlID0gZnVuY3Rpb24gKClcbntcbiAgICBNZXNoLnByb3RvdHlwZS5fb25UZXh0dXJlVXBkYXRlLmNhbGwodGhpcyk7XG5cbiAgICAvLyB3YWl0IGZvciB0aGUgUGxhbmUgY3RvciB0byBmaW5pc2ggYmVmb3JlIGNhbGxpbmcgcmVmcmVzaFxuICAgIGlmICh0aGlzLl9yZWFkeSkge1xuICAgICAgICB0aGlzLnJlZnJlc2goKTtcbiAgICB9XG59O1xuIiwidmFyIE1lc2ggPSByZXF1aXJlKCcuL01lc2gnKTtcbnZhciBjb3JlID0gcmVxdWlyZSgnLi4vY29yZScpO1xuXG4vKipcbiAqIFRoZSByb3BlIGFsbG93cyB5b3UgdG8gZHJhdyBhIHRleHR1cmUgYWNyb3NzIHNldmVyYWwgcG9pbnRzIGFuZCB0aGVtIG1hbmlwdWxhdGUgdGhlc2UgcG9pbnRzXG4gKlxuICpgYGBqc1xuICogZm9yICh2YXIgaSA9IDA7IGkgPCAyMDsgaSsrKSB7XG4gKiAgICAgcG9pbnRzLnB1c2gobmV3IFBJWEkuUG9pbnQoaSAqIDUwLCAwKSk7XG4gKiB9O1xuICogdmFyIHJvcGUgPSBuZXcgUElYSS5Sb3BlKFBJWEkuVGV4dHVyZS5mcm9tSW1hZ2UoXCJzbmFrZS5wbmdcIiksIHBvaW50cyk7XG4gKiAgYGBgXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLm1lc2guTWVzaFxuICogQG1lbWJlcm9mIFBJWEkubWVzaFxuICogQHBhcmFtIHtQSVhJLlRleHR1cmV9IHRleHR1cmUgLSBUaGUgdGV4dHVyZSB0byB1c2Ugb24gdGhlIHJvcGUuXG4gKiBAcGFyYW0ge1BJWEkuUG9pbnRbXX0gcG9pbnRzIC0gQW4gYXJyYXkgb2Yge0BsaW5rIFBJWEkuUG9pbnR9IG9iamVjdHMgdG8gY29uc3RydWN0IHRoaXMgcm9wZS5cbiAqXG4gKi9cbmZ1bmN0aW9uIFJvcGUodGV4dHVyZSwgcG9pbnRzKVxue1xuICAgIE1lc2guY2FsbCh0aGlzLCB0ZXh0dXJlKTtcblxuICAgIC8qXG4gICAgICogQG1lbWJlciB7UElYSS5Qb2ludFtdfSBBbiBhcnJheSBvZiBwb2ludHMgdGhhdCBkZXRlcm1pbmUgdGhlIHJvcGVcbiAgICAgKi9cbiAgICB0aGlzLnBvaW50cyA9IHBvaW50cztcblxuICAgIC8qXG4gICAgICogQG1lbWJlciB7RmxvYXQzMkFycmF5fSBBbiBhcnJheSBvZiB2ZXJ0aWNlcyB1c2VkIHRvIGNvbnN0cnVjdCB0aGlzIHJvcGUuXG4gICAgICovXG4gICAgdGhpcy52ZXJ0aWNlcyA9IG5ldyBGbG9hdDMyQXJyYXkocG9pbnRzLmxlbmd0aCAqIDQpO1xuXG4gICAgLypcbiAgICAgKiBAbWVtYmVyIHtGbG9hdDMyQXJyYXl9IFRoZSBXZWJHTCBVdnMgb2YgdGhlIHJvcGUuXG4gICAgICovXG4gICAgdGhpcy51dnMgPSBuZXcgRmxvYXQzMkFycmF5KHBvaW50cy5sZW5ndGggKiA0KTtcblxuICAgIC8qXG4gICAgICogQG1lbWJlciB7RmxvYXQzMkFycmF5fSBBbiBhcnJheSBjb250YWluaW5nIHRoZSBjb2xvciBjb21wb25lbnRzXG4gICAgICovXG4gICAgdGhpcy5jb2xvcnMgPSBuZXcgRmxvYXQzMkFycmF5KHBvaW50cy5sZW5ndGggKiAyKTtcblxuICAgIC8qXG4gICAgICogQG1lbWJlciB7VWludDE2QXJyYXl9IEFuIGFycmF5IGNvbnRhaW5pbmcgdGhlIGluZGljZXMgb2YgdGhlIHZlcnRpY2VzXG4gICAgICovXG4gICAgdGhpcy5pbmRpY2VzID0gbmV3IFVpbnQxNkFycmF5KHBvaW50cy5sZW5ndGggKiAyKTtcblxuICAgIC8qKlxuICAgICAqIFRyYWNrZXIgZm9yIGlmIHRoZSByb3BlIGlzIHJlYWR5IHRvIGJlIGRyYXduLiBOZWVkZWQgYmVjYXVzZSBNZXNoIGN0b3IgY2FuXG4gICAgICogY2FsbCBfb25UZXh0dXJlVXBkYXRlZCB3aGljaCBjb3VsZCBjYWxsIHJlZnJlc2ggdG9vIGVhcmx5LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgICB0aGlzLl9yZWFkeSA9IHRydWU7XG5cbiAgICAgdGhpcy5yZWZyZXNoKCk7XG59XG5cblxuLy8gY29uc3RydWN0b3JcblJvcGUucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShNZXNoLnByb3RvdHlwZSk7XG5Sb3BlLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFJvcGU7XG5tb2R1bGUuZXhwb3J0cyA9IFJvcGU7XG5cbi8qKlxuICogUmVmcmVzaGVzXG4gKlxuICovXG5Sb3BlLnByb3RvdHlwZS5yZWZyZXNoID0gZnVuY3Rpb24gKClcbntcbiAgICB2YXIgcG9pbnRzID0gdGhpcy5wb2ludHM7XG5cbiAgICAvLyBpZiB0b28gbGl0dGxlIHBvaW50cywgb3IgdGV4dHVyZSBoYXNuJ3QgZ290IFVWcyBzZXQgeWV0IGp1c3QgbW92ZSBvbi5cbiAgICBpZiAocG9pbnRzLmxlbmd0aCA8IDEgfHwgIXRoaXMuX3RleHR1cmUuX3V2cylcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB2YXIgdXZzID0gdGhpcy51dnM7XG5cbiAgICB2YXIgaW5kaWNlcyA9IHRoaXMuaW5kaWNlcztcbiAgICB2YXIgY29sb3JzID0gdGhpcy5jb2xvcnM7XG5cbiAgICB2YXIgdGV4dHVyZVV2cyA9IHRoaXMuX3RleHR1cmUuX3V2cztcbiAgICB2YXIgb2Zmc2V0ID0gbmV3IGNvcmUuUG9pbnQodGV4dHVyZVV2cy54MCwgdGV4dHVyZVV2cy55MCk7XG4gICAgdmFyIGZhY3RvciA9IG5ldyBjb3JlLlBvaW50KHRleHR1cmVVdnMueDIgLSB0ZXh0dXJlVXZzLngwLCB0ZXh0dXJlVXZzLnkyIC0gdGV4dHVyZVV2cy55MCk7XG5cbiAgICB1dnNbMF0gPSAwICsgb2Zmc2V0Lng7XG4gICAgdXZzWzFdID0gMCArIG9mZnNldC55O1xuICAgIHV2c1syXSA9IDAgKyBvZmZzZXQueDtcbiAgICB1dnNbM10gPSAxICogZmFjdG9yLnkgKyBvZmZzZXQueTtcblxuICAgIGNvbG9yc1swXSA9IDE7XG4gICAgY29sb3JzWzFdID0gMTtcblxuICAgIGluZGljZXNbMF0gPSAwO1xuICAgIGluZGljZXNbMV0gPSAxO1xuXG4gICAgdmFyIHRvdGFsID0gcG9pbnRzLmxlbmd0aCxcbiAgICAgICAgcG9pbnQsIGluZGV4LCBhbW91bnQ7XG5cbiAgICBmb3IgKHZhciBpID0gMTsgaSA8IHRvdGFsOyBpKyspXG4gICAge1xuICAgICAgICBwb2ludCA9IHBvaW50c1tpXTtcbiAgICAgICAgaW5kZXggPSBpICogNDtcbiAgICAgICAgLy8gdGltZSB0byBkbyBzb21lIHNtYXJ0IGRyYXdpbmchXG4gICAgICAgIGFtb3VudCA9IGkgLyAodG90YWwtMSk7XG5cbiAgICAgICAgdXZzW2luZGV4XSA9IGFtb3VudCAqIGZhY3Rvci54ICsgb2Zmc2V0Lng7XG4gICAgICAgIHV2c1tpbmRleCsxXSA9IDAgKyBvZmZzZXQueTtcblxuICAgICAgICB1dnNbaW5kZXgrMl0gPSBhbW91bnQgKiBmYWN0b3IueCArIG9mZnNldC54O1xuICAgICAgICB1dnNbaW5kZXgrM10gPSAxICogZmFjdG9yLnkgKyBvZmZzZXQueTtcblxuICAgICAgICBpbmRleCA9IGkgKiAyO1xuICAgICAgICBjb2xvcnNbaW5kZXhdID0gMTtcbiAgICAgICAgY29sb3JzW2luZGV4KzFdID0gMTtcblxuICAgICAgICBpbmRleCA9IGkgKiAyO1xuICAgICAgICBpbmRpY2VzW2luZGV4XSA9IGluZGV4O1xuICAgICAgICBpbmRpY2VzW2luZGV4ICsgMV0gPSBpbmRleCArIDE7XG4gICAgfVxuXG4gICAgdGhpcy5kaXJ0eSA9IHRydWU7XG59O1xuXG4vKipcbiAqIENsZWFyIHRleHR1cmUgVVZzIHdoZW4gbmV3IHRleHR1cmUgaXMgc2V0XG4gKlxuICogQHByaXZhdGVcbiAqL1xuUm9wZS5wcm90b3R5cGUuX29uVGV4dHVyZVVwZGF0ZSA9IGZ1bmN0aW9uICgpXG57XG4gICAgTWVzaC5wcm90b3R5cGUuX29uVGV4dHVyZVVwZGF0ZS5jYWxsKHRoaXMpO1xuXG4gICAgLy8gd2FpdCBmb3IgdGhlIFJvcGUgY3RvciB0byBmaW5pc2ggYmVmb3JlIGNhbGxpbmcgcmVmcmVzaFxuICAgIGlmICh0aGlzLl9yZWFkeSkge1xuICAgICAgICB0aGlzLnJlZnJlc2goKTtcbiAgICB9XG59O1xuXG4vKipcbiAqIFVwZGF0ZXMgdGhlIG9iamVjdCB0cmFuc2Zvcm0gZm9yIHJlbmRlcmluZ1xuICpcbiAqIEBwcml2YXRlXG4gKi9cblJvcGUucHJvdG90eXBlLnVwZGF0ZVRyYW5zZm9ybSA9IGZ1bmN0aW9uICgpXG57XG4gICAgdmFyIHBvaW50cyA9IHRoaXMucG9pbnRzO1xuXG4gICAgaWYgKHBvaW50cy5sZW5ndGggPCAxKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHZhciBsYXN0UG9pbnQgPSBwb2ludHNbMF07XG4gICAgdmFyIG5leHRQb2ludDtcbiAgICB2YXIgcGVycFggPSAwO1xuICAgIHZhciBwZXJwWSA9IDA7XG5cbiAgICAvLyB0aGlzLmNvdW50IC09IDAuMjtcblxuICAgIHZhciB2ZXJ0aWNlcyA9IHRoaXMudmVydGljZXM7XG4gICAgdmFyIHRvdGFsID0gcG9pbnRzLmxlbmd0aCxcbiAgICAgICAgcG9pbnQsIGluZGV4LCByYXRpbywgcGVycExlbmd0aCwgbnVtO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0b3RhbDsgaSsrKVxuICAgIHtcbiAgICAgICAgcG9pbnQgPSBwb2ludHNbaV07XG4gICAgICAgIGluZGV4ID0gaSAqIDQ7XG5cbiAgICAgICAgaWYgKGkgPCBwb2ludHMubGVuZ3RoLTEpXG4gICAgICAgIHtcbiAgICAgICAgICAgIG5leHRQb2ludCA9IHBvaW50c1tpKzFdO1xuICAgICAgICB9XG4gICAgICAgIGVsc2VcbiAgICAgICAge1xuICAgICAgICAgICAgbmV4dFBvaW50ID0gcG9pbnQ7XG4gICAgICAgIH1cblxuICAgICAgICBwZXJwWSA9IC0obmV4dFBvaW50LnggLSBsYXN0UG9pbnQueCk7XG4gICAgICAgIHBlcnBYID0gbmV4dFBvaW50LnkgLSBsYXN0UG9pbnQueTtcblxuICAgICAgICByYXRpbyA9ICgxIC0gKGkgLyAodG90YWwtMSkpKSAqIDEwO1xuXG4gICAgICAgIGlmIChyYXRpbyA+IDEpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJhdGlvID0gMTtcbiAgICAgICAgfVxuXG4gICAgICAgIHBlcnBMZW5ndGggPSBNYXRoLnNxcnQocGVycFggKiBwZXJwWCArIHBlcnBZICogcGVycFkpO1xuICAgICAgICBudW0gPSB0aGlzLl90ZXh0dXJlLmhlaWdodCAvIDI7IC8vKDIwICsgTWF0aC5hYnMoTWF0aC5zaW4oKGkgKyB0aGlzLmNvdW50KSAqIDAuMykgKiA1MCkgKSogcmF0aW87XG4gICAgICAgIHBlcnBYIC89IHBlcnBMZW5ndGg7XG4gICAgICAgIHBlcnBZIC89IHBlcnBMZW5ndGg7XG5cbiAgICAgICAgcGVycFggKj0gbnVtO1xuICAgICAgICBwZXJwWSAqPSBudW07XG5cbiAgICAgICAgdmVydGljZXNbaW5kZXhdID0gcG9pbnQueCArIHBlcnBYO1xuICAgICAgICB2ZXJ0aWNlc1tpbmRleCsxXSA9IHBvaW50LnkgKyBwZXJwWTtcbiAgICAgICAgdmVydGljZXNbaW5kZXgrMl0gPSBwb2ludC54IC0gcGVycFg7XG4gICAgICAgIHZlcnRpY2VzW2luZGV4KzNdID0gcG9pbnQueSAtIHBlcnBZO1xuXG4gICAgICAgIGxhc3RQb2ludCA9IHBvaW50O1xuICAgIH1cblxuICAgIHRoaXMuY29udGFpbmVyVXBkYXRlVHJhbnNmb3JtKCk7XG59O1xuIiwiLyoqXG4gKiBAZmlsZSAgICAgICAgTWFpbiBleHBvcnQgb2YgdGhlIFBJWEkgZXh0cmFzIGxpYnJhcnlcbiAqIEBhdXRob3IgICAgICBNYXQgR3JvdmVzIDxtYXRAZ29vZGJveWRpZ2l0YWwuY29tPlxuICogQGNvcHlyaWdodCAgIDIwMTMtMjAxNSBHb29kQm95RGlnaXRhbFxuICogQGxpY2Vuc2UgICAgIHtAbGluayBodHRwczovL2dpdGh1Yi5jb20vcGl4aWpzL3BpeGkuanMvYmxvYi9tYXN0ZXIvTElDRU5TRXxNSVQgTGljZW5zZX1cbiAqL1xuXG4vKipcbiAqIEBuYW1lc3BhY2UgUElYSS5tZXNoXG4gKi9cbm1vZHVsZS5leHBvcnRzID0ge1xuICAgIE1lc2g6ICAgICAgICAgICByZXF1aXJlKCcuL01lc2gnKSxcbiAgICBQbGFuZTogICAgICAgICAgIHJlcXVpcmUoJy4vUGxhbmUnKSxcbiAgICBSb3BlOiAgICAgICAgICAgcmVxdWlyZSgnLi9Sb3BlJyksXG4gICAgTWVzaFJlbmRlcmVyOiAgIHJlcXVpcmUoJy4vd2ViZ2wvTWVzaFJlbmRlcmVyJyksXG4gICAgTWVzaFNoYWRlcjogICAgIHJlcXVpcmUoJy4vd2ViZ2wvTWVzaFNoYWRlcicpXG59O1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi8uLi9jb3JlJyksXG4gICAgTWVzaCA9IHJlcXVpcmUoJy4uL01lc2gnKTtcblxuLyoqXG4gKiBAYXV0aG9yIE1hdCBHcm92ZXNcbiAqXG4gKiBCaWcgdGhhbmtzIHRvIHRoZSB2ZXJ5IGNsZXZlciBNYXR0IERlc0xhdXJpZXJzIDxtYXR0ZGVzbD4gaHR0cHM6Ly9naXRodWIuY29tL21hdHRkZXNsL1xuICogZm9yIGNyZWF0aW5nIHRoZSBvcmlnaW5hbCBwaXhpIHZlcnNpb24hXG4gKiBBbHNvIGEgdGhhbmtzIHRvIGh0dHBzOi8vZ2l0aHViLmNvbS9iY2hldmFsaWVyIGZvciB0d2Vha2luZyB0aGUgdGludCBhbmQgYWxwaGEgc28gdGhhdCB0aGV5IG5vdyBzaGFyZSA0IGJ5dGVzIG9uIHRoZSB2ZXJ0ZXggYnVmZmVyXG4gKlxuICogSGVhdmlseSBpbnNwaXJlZCBieSBMaWJHRFgncyBNZXNoUmVuZGVyZXI6XG4gKiBodHRwczovL2dpdGh1Yi5jb20vbGliZ2R4L2xpYmdkeC9ibG9iL21hc3Rlci9nZHgvc3JjL2NvbS9iYWRsb2dpYy9nZHgvZ3JhcGhpY3MvZzJkL01lc2hSZW5kZXJlci5qYXZhXG4gKi9cblxuLyoqXG4gKlxuICogQGNsYXNzXG4gKiBAcHJpdmF0ZVxuICogQG1lbWJlcm9mIFBJWEkubWVzaFxuICogQGV4dGVuZHMgUElYSS5PYmplY3RSZW5kZXJlclxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLldlYkdMUmVuZGVyZXJ9IFRoZSByZW5kZXJlciB0aGlzIHNwcml0ZSBiYXRjaCB3b3JrcyBmb3IuXG4gKi9cbmZ1bmN0aW9uIE1lc2hSZW5kZXJlcihyZW5kZXJlcilcbntcbiAgICBjb3JlLk9iamVjdFJlbmRlcmVyLmNhbGwodGhpcywgcmVuZGVyZXIpO1xuXG5cbiAgICAvKipcbiAgICAgKiBIb2xkcyB0aGUgaW5kaWNlc1xuICAgICAqXG4gICAgICogQG1lbWJlciB7VWludDE2QXJyYXl9XG4gICAgICovXG4gICAgXG4gICAgdGhpcy5pbmRpY2VzID0gbmV3IFVpbnQxNkFycmF5KDE1MDAwKTtcblxuICAgIC8vVE9ETyB0aGlzIGNvdWxkIGJlIGEgc2luZ2xlIGJ1ZmZlciBzaGFyZWQgYW1vbmdzdCBhbGwgcmVuZGVyZXJzIGFzIHdlIHJldXNlIHRoaXMgc2V0IHVwIGluIG1vc3QgcmVuZGVyZXJzXG4gICAgZm9yICh2YXIgaT0wLCBqPTA7IGkgPCAxNTAwMDsgaSArPSA2LCBqICs9IDQpXG4gICAge1xuICAgICAgICB0aGlzLmluZGljZXNbaSArIDBdID0gaiArIDA7XG4gICAgICAgIHRoaXMuaW5kaWNlc1tpICsgMV0gPSBqICsgMTtcbiAgICAgICAgdGhpcy5pbmRpY2VzW2kgKyAyXSA9IGogKyAyO1xuICAgICAgICB0aGlzLmluZGljZXNbaSArIDNdID0gaiArIDA7XG4gICAgICAgIHRoaXMuaW5kaWNlc1tpICsgNF0gPSBqICsgMjtcbiAgICAgICAgdGhpcy5pbmRpY2VzW2kgKyA1XSA9IGogKyAzO1xuICAgIH1cblxuICAgIHRoaXMuY3VycmVudFNoYWRlciA9IG51bGw7XG59XG5cbk1lc2hSZW5kZXJlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuT2JqZWN0UmVuZGVyZXIucHJvdG90eXBlKTtcbk1lc2hSZW5kZXJlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBNZXNoUmVuZGVyZXI7XG5tb2R1bGUuZXhwb3J0cyA9IE1lc2hSZW5kZXJlcjtcblxuY29yZS5XZWJHTFJlbmRlcmVyLnJlZ2lzdGVyUGx1Z2luKCdtZXNoJywgTWVzaFJlbmRlcmVyKTtcblxuLyoqXG4gKiBTZXRzIHVwIHRoZSByZW5kZXJlciBjb250ZXh0IGFuZCBuZWNlc3NhcnkgYnVmZmVycy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIGdsIHtXZWJHTFJlbmRlcmluZ0NvbnRleHR9IHRoZSBjdXJyZW50IFdlYkdMIGRyYXdpbmcgY29udGV4dFxuICovXG5NZXNoUmVuZGVyZXIucHJvdG90eXBlLm9uQ29udGV4dENoYW5nZSA9IGZ1bmN0aW9uICgpXG57XG5cbn07XG5cbi8qKlxuICogUmVuZGVycyB0aGUgc3ByaXRlIG9iamVjdC5cbiAqXG4gKiBAcGFyYW0gbWVzaCB7UElYSS5tZXNoLk1lc2h9IHRoZSBtZXNoIHRvIHJlbmRlclxuICovXG5NZXNoUmVuZGVyZXIucHJvdG90eXBlLnJlbmRlciA9IGZ1bmN0aW9uIChtZXNoKVxue1xuICAgIGlmKCFtZXNoLl92ZXJ0ZXhCdWZmZXIpXG4gICAge1xuICAgICAgICB0aGlzLl9pbml0V2ViR0wobWVzaCk7XG4gICAgfVxuXG4gICAgdmFyIHJlbmRlcmVyID0gdGhpcy5yZW5kZXJlcixcbiAgICAgICAgZ2wgPSByZW5kZXJlci5nbCxcbiAgICAgICAgdGV4dHVyZSA9IG1lc2guX3RleHR1cmUuYmFzZVRleHR1cmUsXG4gICAgICAgIHNoYWRlciA9IG1lc2guc2hhZGVyOy8vIHx8IHJlbmRlcmVyLnNoYWRlck1hbmFnZXIucGx1Z2lucy5tZXNoU2hhZGVyO1xuXG4gICAgdmFyIGRyYXdNb2RlID0gbWVzaC5kcmF3TW9kZSA9PT0gTWVzaC5EUkFXX01PREVTLlRSSUFOR0xFX01FU0ggPyBnbC5UUklBTkdMRV9TVFJJUCA6IGdsLlRSSUFOR0xFUztcblxuICAgIHJlbmRlcmVyLmJsZW5kTW9kZU1hbmFnZXIuc2V0QmxlbmRNb2RlKG1lc2guYmxlbmRNb2RlKTtcblxuICAgIC8vVE9ETyBjYWNoZSBjdXN0b20gc3RhdGUuLlxuICAgIGlmICghc2hhZGVyKVxuICAgIHtcbiAgICAgICAgc2hhZGVyID0gcmVuZGVyZXIuc2hhZGVyTWFuYWdlci5wbHVnaW5zLm1lc2hTaGFkZXI7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHNoYWRlciA9IHNoYWRlci5zaGFkZXJzW2dsLmlkXSB8fCBzaGFkZXIuZ2V0U2hhZGVyKHJlbmRlcmVyKTsvLyA6IHNoYWRlcjtcbiAgICB9XG5cbiAgICB0aGlzLnJlbmRlcmVyLnNoYWRlck1hbmFnZXIuc2V0U2hhZGVyKHNoYWRlcik7XG5cbiAgICBzaGFkZXIudW5pZm9ybXMudHJhbnNsYXRpb25NYXRyaXgudmFsdWUgPSBtZXNoLndvcmxkVHJhbnNmb3JtLnRvQXJyYXkodHJ1ZSk7XG4gICAgc2hhZGVyLnVuaWZvcm1zLnByb2plY3Rpb25NYXRyaXgudmFsdWUgPSByZW5kZXJlci5jdXJyZW50UmVuZGVyVGFyZ2V0LnByb2plY3Rpb25NYXRyaXgudG9BcnJheSh0cnVlKTtcbiAgICBzaGFkZXIudW5pZm9ybXMuYWxwaGEudmFsdWUgPSBtZXNoLndvcmxkQWxwaGE7XG5cbiAgICBzaGFkZXIuc3luY1VuaWZvcm1zKCk7XG5cbiAgICBpZiAoIW1lc2guZGlydHkpXG4gICAge1xuXG4gICAgICAgIGdsLmJpbmRCdWZmZXIoZ2wuQVJSQVlfQlVGRkVSLCBtZXNoLl92ZXJ0ZXhCdWZmZXIpO1xuICAgICAgICBnbC5idWZmZXJTdWJEYXRhKGdsLkFSUkFZX0JVRkZFUiwgMCwgbWVzaC52ZXJ0aWNlcyk7XG4gICAgICAgIGdsLnZlcnRleEF0dHJpYlBvaW50ZXIoc2hhZGVyLmF0dHJpYnV0ZXMuYVZlcnRleFBvc2l0aW9uLCAyLCBnbC5GTE9BVCwgZmFsc2UsIDAsIDApO1xuXG4gICAgICAgIC8vIHVwZGF0ZSB0aGUgdXZzXG4gICAgICAgIGdsLmJpbmRCdWZmZXIoZ2wuQVJSQVlfQlVGRkVSLCBtZXNoLl91dkJ1ZmZlcik7XG4gICAgICAgIGdsLnZlcnRleEF0dHJpYlBvaW50ZXIoc2hhZGVyLmF0dHJpYnV0ZXMuYVRleHR1cmVDb29yZCwgMiwgZ2wuRkxPQVQsIGZhbHNlLCAwLCAwKTtcblxuXG4gICAgICAgIGdsLmFjdGl2ZVRleHR1cmUoZ2wuVEVYVFVSRTApO1xuXG4gICAgICAgaWYgKCF0ZXh0dXJlLl9nbFRleHR1cmVzW2dsLmlkXSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5yZW5kZXJlci51cGRhdGVUZXh0dXJlKHRleHR1cmUpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2VcbiAgICAgICAge1xuICAgICAgICAgICAgLy8gYmluZCB0aGUgY3VycmVudCB0ZXh0dXJlXG4gICAgICAgICAgICBnbC5iaW5kVGV4dHVyZShnbC5URVhUVVJFXzJELCB0ZXh0dXJlLl9nbFRleHR1cmVzW2dsLmlkXSk7XG4gICAgICAgIH1cblxuICAgICAgICBnbC5iaW5kQnVmZmVyKGdsLkVMRU1FTlRfQVJSQVlfQlVGRkVSLCBtZXNoLl9pbmRleEJ1ZmZlcik7XG4gICAgICAgIGdsLmJ1ZmZlclN1YkRhdGEoZ2wuRUxFTUVOVF9BUlJBWV9CVUZGRVIsIDAsIG1lc2guaW5kaWNlcyk7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG5cbiAgICAgICAgbWVzaC5kaXJ0eSA9IGZhbHNlO1xuICAgICAgICBnbC5iaW5kQnVmZmVyKGdsLkFSUkFZX0JVRkZFUiwgbWVzaC5fdmVydGV4QnVmZmVyKTtcbiAgICAgICAgZ2wuYnVmZmVyRGF0YShnbC5BUlJBWV9CVUZGRVIsIG1lc2gudmVydGljZXMsIGdsLlNUQVRJQ19EUkFXKTtcbiAgICAgICAgZ2wudmVydGV4QXR0cmliUG9pbnRlcihzaGFkZXIuYXR0cmlidXRlcy5hVmVydGV4UG9zaXRpb24sIDIsIGdsLkZMT0FULCBmYWxzZSwgMCwgMCk7XG5cbiAgICAgICAgLy8gdXBkYXRlIHRoZSB1dnNcbiAgICAgICAgZ2wuYmluZEJ1ZmZlcihnbC5BUlJBWV9CVUZGRVIsIG1lc2guX3V2QnVmZmVyKTtcbiAgICAgICAgZ2wuYnVmZmVyRGF0YShnbC5BUlJBWV9CVUZGRVIsIG1lc2gudXZzLCBnbC5TVEFUSUNfRFJBVyk7XG4gICAgICAgIGdsLnZlcnRleEF0dHJpYlBvaW50ZXIoc2hhZGVyLmF0dHJpYnV0ZXMuYVRleHR1cmVDb29yZCwgMiwgZ2wuRkxPQVQsIGZhbHNlLCAwLCAwKTtcblxuICAgICAgICAgZ2wuYWN0aXZlVGV4dHVyZShnbC5URVhUVVJFMCk7XG5cbiAgICAgICAgaWYgKCF0ZXh0dXJlLl9nbFRleHR1cmVzW2dsLmlkXSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5yZW5kZXJlci51cGRhdGVUZXh0dXJlKHRleHR1cmUpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2VcbiAgICAgICAge1xuICAgICAgICAgICAgLy8gYmluZCB0aGUgY3VycmVudCB0ZXh0dXJlXG4gICAgICAgICAgICBnbC5iaW5kVGV4dHVyZShnbC5URVhUVVJFXzJELCB0ZXh0dXJlLl9nbFRleHR1cmVzW2dsLmlkXSk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBkb250IG5lZWQgdG8gdXBsb2FkIVxuICAgICAgICBnbC5iaW5kQnVmZmVyKGdsLkVMRU1FTlRfQVJSQVlfQlVGRkVSLCBtZXNoLl9pbmRleEJ1ZmZlcik7XG4gICAgICAgIGdsLmJ1ZmZlckRhdGEoZ2wuRUxFTUVOVF9BUlJBWV9CVUZGRVIsIG1lc2guaW5kaWNlcywgZ2wuU1RBVElDX0RSQVcpO1xuXG4gICAgfVxuXG4gICAgZ2wuZHJhd0VsZW1lbnRzKGRyYXdNb2RlLCBtZXNoLmluZGljZXMubGVuZ3RoLCBnbC5VTlNJR05FRF9TSE9SVCwgMCk7XG5cbn07XG5cbi8qKlxuICogUHJlcGFyZXMgYWxsIHRoZSBidWZmZXJzIHRvIHJlbmRlciB0aGlzIG1lc2hcbiAqIEBwYXJhbSBtZXNoIHtQSVhJLm1lc2guTWVzaH0gdGhlIG1lc2ggdG8gcmVuZGVyXG4gKi9cbk1lc2hSZW5kZXJlci5wcm90b3R5cGUuX2luaXRXZWJHTCA9IGZ1bmN0aW9uIChtZXNoKVxue1xuICAgIC8vIGJ1aWxkIHRoZSBzdHJpcCFcbiAgICB2YXIgZ2wgPSB0aGlzLnJlbmRlcmVyLmdsO1xuXG4gICAgbWVzaC5fdmVydGV4QnVmZmVyID0gZ2wuY3JlYXRlQnVmZmVyKCk7XG4gICAgbWVzaC5faW5kZXhCdWZmZXIgPSBnbC5jcmVhdGVCdWZmZXIoKTtcbiAgICBtZXNoLl91dkJ1ZmZlciA9IGdsLmNyZWF0ZUJ1ZmZlcigpO1xuXG5cblxuICAgIGdsLmJpbmRCdWZmZXIoZ2wuQVJSQVlfQlVGRkVSLCBtZXNoLl92ZXJ0ZXhCdWZmZXIpO1xuICAgIGdsLmJ1ZmZlckRhdGEoZ2wuQVJSQVlfQlVGRkVSLCBtZXNoLnZlcnRpY2VzLCBnbC5EWU5BTUlDX0RSQVcpO1xuXG4gICAgZ2wuYmluZEJ1ZmZlcihnbC5BUlJBWV9CVUZGRVIsIG1lc2guX3V2QnVmZmVyKTtcbiAgICBnbC5idWZmZXJEYXRhKGdsLkFSUkFZX0JVRkZFUiwgIG1lc2gudXZzLCBnbC5TVEFUSUNfRFJBVyk7XG5cbiAgICBpZihtZXNoLmNvbG9ycyl7XG4gICAgICAgIG1lc2guX2NvbG9yQnVmZmVyID0gZ2wuY3JlYXRlQnVmZmVyKCk7XG4gICAgICAgIGdsLmJpbmRCdWZmZXIoZ2wuQVJSQVlfQlVGRkVSLCBtZXNoLl9jb2xvckJ1ZmZlcik7XG4gICAgICAgIGdsLmJ1ZmZlckRhdGEoZ2wuQVJSQVlfQlVGRkVSLCBtZXNoLmNvbG9ycywgZ2wuU1RBVElDX0RSQVcpO1xuICAgIH1cblxuICAgIGdsLmJpbmRCdWZmZXIoZ2wuRUxFTUVOVF9BUlJBWV9CVUZGRVIsIG1lc2guX2luZGV4QnVmZmVyKTtcbiAgICBnbC5idWZmZXJEYXRhKGdsLkVMRU1FTlRfQVJSQVlfQlVGRkVSLCBtZXNoLmluZGljZXMsIGdsLlNUQVRJQ19EUkFXKTtcbn07XG5cblxuLyoqXG4gKiBFbXB0aWVzIHRoZSBjdXJyZW50IGJhdGNoLlxuICpcbiAqL1xuTWVzaFJlbmRlcmVyLnByb3RvdHlwZS5mbHVzaCA9IGZ1bmN0aW9uICgpXG57XG5cbn07XG5cbi8qKlxuICogU3RhcnRzIGEgbmV3IG1lc2ggcmVuZGVyZXIuXG4gKlxuICovXG5NZXNoUmVuZGVyZXIucHJvdG90eXBlLnN0YXJ0ID0gZnVuY3Rpb24gKClcbntcbiAgICBcblxuICAgIHRoaXMuY3VycmVudFNoYWRlciA9IG51bGw7XG59O1xuXG4vKipcbiAqIERlc3Ryb3lzIHRoZSBNZXNoIHJlbmRlcmVyXG4gKlxuICovXG5NZXNoUmVuZGVyZXIucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoKVxue1xuICAgIGNvcmUuT2JqZWN0UmVuZGVyZXIucHJvdG90eXBlLmRlc3Ryb3kuY2FsbCh0aGlzKTtcbn07XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uLy4uL2NvcmUnKTtcblxuLyoqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuU2hhZGVyXG4gKiBAbWVtYmVyb2YgUElYSS5tZXNoXG4gKiBAcGFyYW0gc2hhZGVyTWFuYWdlciB7UElYSS5TaGFkZXJNYW5hZ2VyfSBUaGUgV2ViR0wgc2hhZGVyIG1hbmFnZXIgdGhpcyBzaGFkZXIgd29ya3MgZm9yLlxuICovXG5mdW5jdGlvbiBNZXNoU2hhZGVyKHNoYWRlck1hbmFnZXIpXG57XG4gICAgY29yZS5TaGFkZXIuY2FsbCh0aGlzLFxuICAgICAgICBzaGFkZXJNYW5hZ2VyLFxuICAgICAgICAvLyB2ZXJ0ZXggc2hhZGVyXG4gICAgICAgIFtcbiAgICAgICAgICAgICdwcmVjaXNpb24gbG93cCBmbG9hdDsnLFxuICAgICAgICAgICAgJ2F0dHJpYnV0ZSB2ZWMyIGFWZXJ0ZXhQb3NpdGlvbjsnLFxuICAgICAgICAgICAgJ2F0dHJpYnV0ZSB2ZWMyIGFUZXh0dXJlQ29vcmQ7JyxcblxuICAgICAgICAgICAgJ3VuaWZvcm0gbWF0MyB0cmFuc2xhdGlvbk1hdHJpeDsnLFxuICAgICAgICAgICAgJ3VuaWZvcm0gbWF0MyBwcm9qZWN0aW9uTWF0cml4OycsXG5cbiAgICAgICAgICAgICd2YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDsnLFxuXG4gICAgICAgICAgICAndm9pZCBtYWluKHZvaWQpeycsXG4gICAgICAgICAgICAnICAgZ2xfUG9zaXRpb24gPSB2ZWM0KChwcm9qZWN0aW9uTWF0cml4ICogdHJhbnNsYXRpb25NYXRyaXggKiB2ZWMzKGFWZXJ0ZXhQb3NpdGlvbiwgMS4wKSkueHksIDAuMCwgMS4wKTsnLFxuICAgICAgICAgICAgJyAgIHZUZXh0dXJlQ29vcmQgPSBhVGV4dHVyZUNvb3JkOycsXG4gICAgICAgICAgICAnfSdcbiAgICAgICAgXS5qb2luKCdcXG4nKSxcbiAgICAgICAgW1xuICAgICAgICAgICAgJ3ByZWNpc2lvbiBsb3dwIGZsb2F0OycsXG5cbiAgICAgICAgICAgICd2YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDsnLFxuICAgICAgICAgICAgJ3VuaWZvcm0gZmxvYXQgYWxwaGE7JyxcblxuICAgICAgICAgICAgJ3VuaWZvcm0gc2FtcGxlcjJEIHVTYW1wbGVyOycsXG5cbiAgICAgICAgICAgICd2b2lkIG1haW4odm9pZCl7JyxcbiAgICAgICAgICAgICcgICBnbF9GcmFnQ29sb3IgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZUZXh0dXJlQ29vcmQpICogYWxwaGEgOycsXG4gICAgICAgICAgICAnfSdcbiAgICAgICAgXS5qb2luKCdcXG4nKSxcbiAgICAgICAgLy8gY3VzdG9tIHVuaWZvcm1zXG4gICAgICAgIHtcbiAgICAgICAgICAgIGFscGhhOiAgeyB0eXBlOiAnMWYnLCB2YWx1ZTogMCB9LFxuICAgICAgICAgICAgdHJhbnNsYXRpb25NYXRyaXg6IHsgdHlwZTogJ21hdDMnLCB2YWx1ZTogbmV3IEZsb2F0MzJBcnJheSg5KSB9LFxuICAgICAgICAgICAgcHJvamVjdGlvbk1hdHJpeDogeyB0eXBlOiAnbWF0MycsIHZhbHVlOiBuZXcgRmxvYXQzMkFycmF5KDkpIH1cbiAgICAgICAgfSxcbiAgICAgICAgLy8gY3VzdG9tIGF0dHJpYnV0ZXNcbiAgICAgICAge1xuICAgICAgICAgICAgYVZlcnRleFBvc2l0aW9uOjAsXG4gICAgICAgICAgICBhVGV4dHVyZUNvb3JkOjBcbiAgICAgICAgfVxuICAgICk7XG59XG5cbk1lc2hTaGFkZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShjb3JlLlNoYWRlci5wcm90b3R5cGUpO1xuTWVzaFNoYWRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBNZXNoU2hhZGVyO1xubW9kdWxlLmV4cG9ydHMgPSBNZXNoU2hhZGVyO1xuXG5jb3JlLlNoYWRlck1hbmFnZXIucmVnaXN0ZXJQbHVnaW4oJ21lc2hTaGFkZXInLCBNZXNoU2hhZGVyKTtcbiIsIi8vIFJlZmVyZW5jZXM6XG4vLyBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9KYXZhU2NyaXB0L1JlZmVyZW5jZS9HbG9iYWxfT2JqZWN0cy9NYXRoL3NpZ25cblxuaWYgKCFNYXRoLnNpZ24pXG57XG4gICAgTWF0aC5zaWduID0gZnVuY3Rpb24gKHgpIHtcbiAgICAgICAgeCA9ICt4O1xuICAgICAgICBpZiAoeCA9PT0gMCB8fCBpc05hTih4KSlcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHg7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHggPiAwID8gMSA6IC0xO1xuICAgIH07XG59XG4iLCIvLyBSZWZlcmVuY2VzOlxuLy8gaHR0cHM6Ly9naXRodWIuY29tL3NpbmRyZXNvcmh1cy9vYmplY3QtYXNzaWduXG4vLyBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9KYXZhU2NyaXB0L1JlZmVyZW5jZS9HbG9iYWxfT2JqZWN0cy9PYmplY3QvYXNzaWduXG5cbmlmICghT2JqZWN0LmFzc2lnbilcbntcbiAgICBPYmplY3QuYXNzaWduID0gcmVxdWlyZSgnb2JqZWN0LWFzc2lnbicpO1xufVxuIiwicmVxdWlyZSgnLi9PYmplY3QuYXNzaWduJyk7XG5yZXF1aXJlKCcuL3JlcXVlc3RBbmltYXRpb25GcmFtZScpO1xucmVxdWlyZSgnLi9NYXRoLnNpZ24nKTtcbiIsIi8vIFJlZmVyZW5jZXM6XG4vLyBodHRwOi8vcGF1bGlyaXNoLmNvbS8yMDExL3JlcXVlc3RhbmltYXRpb25mcmFtZS1mb3Itc21hcnQtYW5pbWF0aW5nL1xuLy8gaHR0cHM6Ly9naXN0LmdpdGh1Yi5jb20vMTU3OTY3MVxuLy8gaHR0cDovL3VwZGF0ZXMuaHRtbDVyb2Nrcy5jb20vMjAxMi8wNS9yZXF1ZXN0QW5pbWF0aW9uRnJhbWUtQVBJLW5vdy13aXRoLXN1Yi1taWxsaXNlY29uZC1wcmVjaXNpb25cbi8vIGh0dHBzOi8vZ2lzdC5naXRodWIuY29tL3RpbWhhbGwvNDA3ODYxNFxuLy8gaHR0cHM6Ly9naXRodWIuY29tL0ZpbmFuY2lhbC1UaW1lcy9wb2x5ZmlsbC1zZXJ2aWNlL3RyZWUvbWFzdGVyL3BvbHlmaWxscy9yZXF1ZXN0QW5pbWF0aW9uRnJhbWVcblxuLy8gRXhwZWN0ZWQgdG8gYmUgdXNlZCB3aXRoIEJyb3dzZXJmaXlcbi8vIEJyb3dzZXJpZnkgYXV0b21hdGljYWxseSBkZXRlY3RzIHRoZSB1c2Ugb2YgYGdsb2JhbGAgYW5kIHBhc3NlcyB0aGVcbi8vIGNvcnJlY3QgcmVmZXJlbmNlIG9mIGBnbG9iYWxgLCBgc2VsZmAsIGFuZCBmaW5hbGx5IGB3aW5kb3dgXG5cbi8vIERhdGUubm93XG5pZiAoIShEYXRlLm5vdyAmJiBEYXRlLnByb3RvdHlwZS5nZXRUaW1lKSkge1xuICAgIERhdGUubm93ID0gZnVuY3Rpb24gbm93KCkge1xuICAgICAgICByZXR1cm4gbmV3IERhdGUoKS5nZXRUaW1lKCk7XG4gICAgfTtcbn1cblxuLy8gcGVyZm9ybWFuY2Uubm93XG5pZiAoIShnbG9iYWwucGVyZm9ybWFuY2UgJiYgZ2xvYmFsLnBlcmZvcm1hbmNlLm5vdykpIHtcbiAgICB2YXIgc3RhcnRUaW1lID0gRGF0ZS5ub3coKTtcbiAgICBpZiAoIWdsb2JhbC5wZXJmb3JtYW5jZSkge1xuICAgICAgICBnbG9iYWwucGVyZm9ybWFuY2UgPSB7fTtcbiAgICB9XG4gICAgZ2xvYmFsLnBlcmZvcm1hbmNlLm5vdyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIERhdGUubm93KCkgLSBzdGFydFRpbWU7XG4gICAgfTtcbn1cblxuLy8gcmVxdWVzdEFuaW1hdGlvbkZyYW1lXG52YXIgbGFzdFRpbWUgPSBEYXRlLm5vdygpO1xudmFyIHZlbmRvcnMgPSBbJ21zJywgJ21veicsICd3ZWJraXQnLCAnbyddO1xuXG5mb3IodmFyIHggPSAwOyB4IDwgdmVuZG9ycy5sZW5ndGggJiYgIWdsb2JhbC5yZXF1ZXN0QW5pbWF0aW9uRnJhbWU7ICsreCkge1xuICAgIGdsb2JhbC5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUgPSBnbG9iYWxbdmVuZG9yc1t4XSArICdSZXF1ZXN0QW5pbWF0aW9uRnJhbWUnXTtcbiAgICBnbG9iYWwuY2FuY2VsQW5pbWF0aW9uRnJhbWUgPSBnbG9iYWxbdmVuZG9yc1t4XSArICdDYW5jZWxBbmltYXRpb25GcmFtZSddIHx8XG4gICAgICAgIGdsb2JhbFt2ZW5kb3JzW3hdICsgJ0NhbmNlbFJlcXVlc3RBbmltYXRpb25GcmFtZSddO1xufVxuXG5pZiAoIWdsb2JhbC5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUpIHtcbiAgICBnbG9iYWwucmVxdWVzdEFuaW1hdGlvbkZyYW1lID0gZnVuY3Rpb24gKGNhbGxiYWNrKSB7XG4gICAgICAgIGlmICh0eXBlb2YgY2FsbGJhY2sgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoY2FsbGJhY2sgKyAnaXMgbm90IGEgZnVuY3Rpb24nKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBjdXJyZW50VGltZSA9IERhdGUubm93KCksXG4gICAgICAgICAgICBkZWxheSA9IDE2ICsgbGFzdFRpbWUgLSBjdXJyZW50VGltZTtcblxuICAgICAgICBpZiAoZGVsYXkgPCAwKSB7XG4gICAgICAgICAgICBkZWxheSA9IDA7XG4gICAgICAgIH1cblxuICAgICAgICBsYXN0VGltZSA9IGN1cnJlbnRUaW1lO1xuXG4gICAgICAgIHJldHVybiBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGxhc3RUaW1lID0gRGF0ZS5ub3coKTtcbiAgICAgICAgICAgIGNhbGxiYWNrKHBlcmZvcm1hbmNlLm5vdygpKTtcbiAgICAgICAgfSwgZGVsYXkpO1xuICAgIH07XG59XG5cbmlmICghZ2xvYmFsLmNhbmNlbEFuaW1hdGlvbkZyYW1lKSB7XG4gICAgZ2xvYmFsLmNhbmNlbEFuaW1hdGlvbkZyYW1lID0gZnVuY3Rpb24oaWQpIHtcbiAgICAgICAgY2xlYXJUaW1lb3V0KGlkKTtcbiAgICB9O1xufVxuIl19 +//# sourceMappingURL=data:application/json;charset:utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIm5vZGVfbW9kdWxlcy9icm93c2VyaWZ5L25vZGVfbW9kdWxlcy9icm93c2VyLXBhY2svX3ByZWx1ZGUuanMiLCIuLi9waXhpLWdsLWNvcmUvaW5kZXguanMiLCIuLi9waXhpLWdsLWNvcmUvbGliL0dMQnVmZmVyLmpzIiwiLi4vcGl4aS1nbC1jb3JlL2xpYi9HTEZyYW1lYnVmZmVyLmpzIiwiLi4vcGl4aS1nbC1jb3JlL2xpYi9HTFNoYWRlci5qcyIsIi4uL3BpeGktZ2wtY29yZS9saWIvR0xUZXh0dXJlLmpzIiwiLi4vcGl4aS1nbC1jb3JlL2xpYi9WZXJ0ZXhBcnJheU9iamVjdC5qcyIsIi4uL3BpeGktZ2wtY29yZS9saWIvY3JlYXRlQ29udGV4dC5qcyIsIi4uL3BpeGktZ2wtY29yZS9saWIvc2V0VmVydGV4QXR0cmliQXJyYXlzLmpzIiwiLi4vcGl4aS1nbC1jb3JlL2xpYi9zaGFkZXIvY29tcGlsZVByb2dyYW0uanMiLCIuLi9waXhpLWdsLWNvcmUvbGliL3NoYWRlci9kZWZhdWx0VmFsdWUuanMiLCIuLi9waXhpLWdsLWNvcmUvbGliL3NoYWRlci9leHRyYWN0QXR0cmlidXRlcy5qcyIsIi4uL3BpeGktZ2wtY29yZS9saWIvc2hhZGVyL2V4dHJhY3RVbmlmb3Jtcy5qcyIsIi4uL3BpeGktZ2wtY29yZS9saWIvc2hhZGVyL2dlbmVyYXRlVW5pZm9ybUFjY2Vzc09iamVjdC5qcyIsIi4uL3BpeGktZ2wtY29yZS9saWIvc2hhZGVyL21hcFNpemUuanMiLCIuLi9waXhpLWdsLWNvcmUvbGliL3NoYWRlci9tYXBUeXBlLmpzIiwibm9kZV9tb2R1bGVzL2FzeW5jL2xpYi9hc3luYy5qcyIsIm5vZGVfbW9kdWxlcy9icm93c2VyaWZ5L25vZGVfbW9kdWxlcy9wYXRoLWJyb3dzZXJpZnkvaW5kZXguanMiLCJub2RlX21vZHVsZXMvYnJvd3NlcmlmeS9ub2RlX21vZHVsZXMvcHJvY2Vzcy9icm93c2VyLmpzIiwibm9kZV9tb2R1bGVzL2Jyb3dzZXJpZnkvbm9kZV9tb2R1bGVzL3B1bnljb2RlL3B1bnljb2RlLmpzIiwibm9kZV9tb2R1bGVzL2Jyb3dzZXJpZnkvbm9kZV9tb2R1bGVzL3F1ZXJ5c3RyaW5nLWVzMy9kZWNvZGUuanMiLCJub2RlX21vZHVsZXMvYnJvd3NlcmlmeS9ub2RlX21vZHVsZXMvcXVlcnlzdHJpbmctZXMzL2VuY29kZS5qcyIsIm5vZGVfbW9kdWxlcy9icm93c2VyaWZ5L25vZGVfbW9kdWxlcy9xdWVyeXN0cmluZy1lczMvaW5kZXguanMiLCJub2RlX21vZHVsZXMvYnJvd3NlcmlmeS9ub2RlX21vZHVsZXMvdXJsL3VybC5qcyIsIm5vZGVfbW9kdWxlcy9lYXJjdXQvc3JjL2VhcmN1dC5qcyIsIm5vZGVfbW9kdWxlcy9ldmVudGVtaXR0ZXIzL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL29iamVjdC1hc3NpZ24vaW5kZXguanMiLCJub2RlX21vZHVsZXMvcmVzb3VyY2UtbG9hZGVyL25vZGVfbW9kdWxlcy9hc3luYy9saWIvYXN5bmMuanMiLCJub2RlX21vZHVsZXMvcmVzb3VyY2UtbG9hZGVyL3NyYy9Mb2FkZXIuanMiLCJub2RlX21vZHVsZXMvcmVzb3VyY2UtbG9hZGVyL3NyYy9SZXNvdXJjZS5qcyIsIm5vZGVfbW9kdWxlcy9yZXNvdXJjZS1sb2FkZXIvc3JjL2I2NC5qcyIsIm5vZGVfbW9kdWxlcy9yZXNvdXJjZS1sb2FkZXIvc3JjL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL3Jlc291cmNlLWxvYWRlci9zcmMvbWlkZGxld2FyZXMvY2FjaGluZy9tZW1vcnkuanMiLCJub2RlX21vZHVsZXMvcmVzb3VyY2UtbG9hZGVyL3NyYy9taWRkbGV3YXJlcy9wYXJzaW5nL2Jsb2IuanMiLCJwYWNrYWdlLmpzb24iLCJzcmMvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5TWFuYWdlci5qcyIsInNyYy9hY2Nlc3NpYmlsaXR5L2FjY2Vzc2libGVUYXJnZXQuanMiLCJzcmMvYWNjZXNzaWJpbGl0eS9pbmRleC5qcyIsInNyYy9jb3JlL2NvbnN0LmpzIiwic3JjL2NvcmUvZGlzcGxheS9Db250YWluZXIuanMiLCJzcmMvY29yZS9kaXNwbGF5L0Rpc3BsYXlPYmplY3QuanMiLCJzcmMvY29yZS9ncmFwaGljcy9HcmFwaGljcy5qcyIsInNyYy9jb3JlL2dyYXBoaWNzL0dyYXBoaWNzRGF0YS5qcyIsInNyYy9jb3JlL2dyYXBoaWNzL3dlYmdsL0dyYXBoaWNzUmVuZGVyZXIuanMiLCJzcmMvY29yZS9ncmFwaGljcy93ZWJnbC9XZWJHTEdyYXBoaWNzRGF0YS5qcyIsInNyYy9jb3JlL2dyYXBoaWNzL3dlYmdsL3NoYWRlcnMvUHJpbWl0aXZlU2hhZGVyLmpzIiwic3JjL2NvcmUvZ3JhcGhpY3Mvd2ViZ2wvdXRpbHMvYnVpbGRDaXJjbGUuanMiLCJzcmMvY29yZS9ncmFwaGljcy93ZWJnbC91dGlscy9idWlsZENvbXBsZXhQb2x5LmpzIiwic3JjL2NvcmUvZ3JhcGhpY3Mvd2ViZ2wvdXRpbHMvYnVpbGRMaW5lLmpzIiwic3JjL2NvcmUvZ3JhcGhpY3Mvd2ViZ2wvdXRpbHMvYnVpbGRQb2x5LmpzIiwic3JjL2NvcmUvZ3JhcGhpY3Mvd2ViZ2wvdXRpbHMvYnVpbGRSZWN0YW5nbGUuanMiLCJzcmMvY29yZS9ncmFwaGljcy93ZWJnbC91dGlscy9idWlsZFJvdW5kZWRSZWN0YW5nbGUuanMiLCJzcmMvY29yZS9pbmRleC5qcyIsInNyYy9jb3JlL21hdGgvTWF0cml4LmpzIiwic3JjL2NvcmUvbWF0aC9Qb2ludC5qcyIsInNyYy9jb3JlL21hdGgvaW5kZXguanMiLCJzcmMvY29yZS9tYXRoL3NoYXBlcy9DaXJjbGUuanMiLCJzcmMvY29yZS9tYXRoL3NoYXBlcy9FbGxpcHNlLmpzIiwic3JjL2NvcmUvbWF0aC9zaGFwZXMvUG9seWdvbi5qcyIsInNyYy9jb3JlL21hdGgvc2hhcGVzL1JlY3RhbmdsZS5qcyIsInNyYy9jb3JlL21hdGgvc2hhcGVzL1JvdW5kZWRSZWN0YW5nbGUuanMiLCJzcmMvY29yZS9wYXJ0aWNsZXMvUGFydGljbGVDb250YWluZXIuanMiLCJzcmMvY29yZS9wYXJ0aWNsZXMvd2ViZ2wvUGFydGljbGVCdWZmZXIuanMiLCJzcmMvY29yZS9wYXJ0aWNsZXMvd2ViZ2wvUGFydGljbGVSZW5kZXJlci5qcyIsInNyYy9jb3JlL3BhcnRpY2xlcy93ZWJnbC9QYXJ0aWNsZVNoYWRlci5qcyIsInNyYy9jb3JlL3JlbmRlcmVycy9TeXN0ZW1SZW5kZXJlci5qcyIsInNyYy9jb3JlL3JlbmRlcmVycy9jYW52YXMvQ2FudmFzUmVuZGVyZXIuanMiLCJzcmMvY29yZS9yZW5kZXJlcnMvY2FudmFzL3V0aWxzL0NhbnZhc0J1ZmZlci5qcyIsInNyYy9jb3JlL3JlbmRlcmVycy9jYW52YXMvdXRpbHMvQ2FudmFzR3JhcGhpY3MuanMiLCJzcmMvY29yZS9yZW5kZXJlcnMvY2FudmFzL3V0aWxzL0NhbnZhc01hc2tNYW5hZ2VyLmpzIiwic3JjL2NvcmUvcmVuZGVyZXJzL2NhbnZhcy91dGlscy9DYW52YXNUaW50ZXIuanMiLCJzcmMvY29yZS9yZW5kZXJlcnMvd2ViZ2wvVGV4dHVyZU1hbmFnZXIuanMiLCJzcmMvY29yZS9yZW5kZXJlcnMvd2ViZ2wvV2ViR0xSZW5kZXJlci5qcyIsInNyYy9jb3JlL3JlbmRlcmVycy93ZWJnbC9maWx0ZXJzL0Fic3RyYWN0RmlsdGVyLmpzIiwic3JjL2NvcmUvcmVuZGVyZXJzL3dlYmdsL2ZpbHRlcnMvRlhBQUZpbHRlci5qcyIsInNyYy9jb3JlL3JlbmRlcmVycy93ZWJnbC9maWx0ZXJzL1Nwcml0ZU1hc2tGaWx0ZXIuanMiLCJzcmMvY29yZS9yZW5kZXJlcnMvd2ViZ2wvbWFuYWdlcnMvQmxlbmRNb2RlTWFuYWdlci5qcyIsInNyYy9jb3JlL3JlbmRlcmVycy93ZWJnbC9tYW5hZ2Vycy9GaWx0ZXJNYW5hZ2VyLmpzIiwic3JjL2NvcmUvcmVuZGVyZXJzL3dlYmdsL21hbmFnZXJzL01hc2tNYW5hZ2VyLmpzIiwic3JjL2NvcmUvcmVuZGVyZXJzL3dlYmdsL21hbmFnZXJzL1NoYWRlck1hbmFnZXIuanMiLCJzcmMvY29yZS9yZW5kZXJlcnMvd2ViZ2wvbWFuYWdlcnMvU3RlbmNpbE1hbmFnZXIuanMiLCJzcmMvY29yZS9yZW5kZXJlcnMvd2ViZ2wvbWFuYWdlcnMvV2ViR0xNYW5hZ2VyLmpzIiwic3JjL2NvcmUvcmVuZGVyZXJzL3dlYmdsL3NoYWRlcnMvQ29tcGxleFByaW1pdGl2ZVNoYWRlci5qcyIsInNyYy9jb3JlL3JlbmRlcmVycy93ZWJnbC9zaGFkZXJzL1ByaW1pdGl2ZVNoYWRlci5qcyIsInNyYy9jb3JlL3JlbmRlcmVycy93ZWJnbC9zaGFkZXJzL1NoYWRlci5qcyIsInNyYy9jb3JlL3JlbmRlcmVycy93ZWJnbC9zaGFkZXJzL1RleHR1cmVTaGFkZXIuanMiLCJzcmMvY29yZS9yZW5kZXJlcnMvd2ViZ2wvc2hhZGVycy9fVGV4dHVyZVNoYWRlci5qcyIsInNyYy9jb3JlL3JlbmRlcmVycy93ZWJnbC91dGlscy9PYmplY3RSZW5kZXJlci5qcyIsInNyYy9jb3JlL3JlbmRlcmVycy93ZWJnbC91dGlscy9RdWFkLmpzIiwic3JjL2NvcmUvcmVuZGVyZXJzL3dlYmdsL3V0aWxzL1JlbmRlclRhcmdldC5qcyIsInNyYy9jb3JlL3JlbmRlcmVycy93ZWJnbC91dGlscy9TdGVuY2lsTWFza1N0YWNrLmpzIiwic3JjL2NvcmUvcmVuZGVyZXJzL3dlYmdsL3V0aWxzL21hcFdlYkdMQmxlbmRNb2Rlc1RvUGl4aS5qcyIsInNyYy9jb3JlL3JlbmRlcmVycy93ZWJnbC91dGlscy9tYXBXZWJHTERyYXdNb2Rlc1RvUGl4aS5qcyIsInNyYy9jb3JlL3Nwcml0ZXMvU3ByaXRlLmpzIiwic3JjL2NvcmUvc3ByaXRlcy93ZWJnbC9TcHJpdGVSZW5kZXJlci5qcyIsInNyYy9jb3JlL3Nwcml0ZXMvd2ViZ2wvZ2VuZXJhdGVNdWx0aVRleHR1cmVTaGFkZXIuanMiLCJzcmMvY29yZS90ZXh0L1RleHQuanMiLCJzcmMvY29yZS90ZXh0dXJlcy9CYXNlVGV4dHVyZS5qcyIsInNyYy9jb3JlL3RleHR1cmVzL1JlbmRlclRleHR1cmUuanMiLCJzcmMvY29yZS90ZXh0dXJlcy9UZXh0dXJlLmpzIiwic3JjL2NvcmUvdGV4dHVyZXMvVGV4dHVyZVV2cy5qcyIsInNyYy9jb3JlL3RleHR1cmVzL1ZpZGVvQmFzZVRleHR1cmUuanMiLCJzcmMvY29yZS90aWNrZXIvVGlja2VyLmpzIiwic3JjL2NvcmUvdGlja2VyL2luZGV4LmpzIiwic3JjL2NvcmUvdXRpbHMvY3JlYXRlSW5kaWNlc0ZvclF1YWRzLmpzIiwic3JjL2NvcmUvdXRpbHMvaW5kZXguanMiLCJzcmMvY29yZS91dGlscy9wbHVnaW5UYXJnZXQuanMiLCJzcmMvZGVwcmVjYXRpb24uanMiLCJzcmMvZXh0cmFzL0JpdG1hcFRleHQuanMiLCJzcmMvZXh0cmFzL01vdmllQ2xpcC5qcyIsInNyYy9leHRyYXMvVGlsaW5nU3ByaXRlLmpzIiwic3JjL2V4dHJhcy9jYWNoZUFzQml0bWFwLmpzIiwic3JjL2V4dHJhcy9nZXRDaGlsZEJ5TmFtZS5qcyIsInNyYy9leHRyYXMvZ2V0R2xvYmFsUG9zaXRpb24uanMiLCJzcmMvZXh0cmFzL2luZGV4LmpzIiwic3JjL2ZpbHRlcnMvYXNjaWkvQXNjaWlGaWx0ZXIuanMiLCJzcmMvZmlsdGVycy9ibG9vbS9CbG9vbUZpbHRlci5qcyIsInNyYy9maWx0ZXJzL2JsdXIvQmx1ckRpckZpbHRlci5qcyIsInNyYy9maWx0ZXJzL2JsdXIvQmx1ckZpbHRlci5qcyIsInNyYy9maWx0ZXJzL2JsdXIvQmx1clhGaWx0ZXIuanMiLCJzcmMvZmlsdGVycy9ibHVyL0JsdXJZRmlsdGVyLmpzIiwic3JjL2ZpbHRlcnMvYmx1ci9TbWFydEJsdXJGaWx0ZXIuanMiLCJzcmMvZmlsdGVycy9jb2xvci9Db2xvck1hdHJpeEZpbHRlci5qcyIsInNyYy9maWx0ZXJzL2NvbG9yL0NvbG9yU3RlcEZpbHRlci5qcyIsInNyYy9maWx0ZXJzL2NvbnZvbHV0aW9uL0NvbnZvbHV0aW9uRmlsdGVyLmpzIiwic3JjL2ZpbHRlcnMvY3Jvc3NoYXRjaC9Dcm9zc0hhdGNoRmlsdGVyLmpzIiwic3JjL2ZpbHRlcnMvZGlzcGxhY2VtZW50L0Rpc3BsYWNlbWVudEZpbHRlci5qcyIsInNyYy9maWx0ZXJzL2RvdC9Eb3RTY3JlZW5GaWx0ZXIuanMiLCJzcmMvZmlsdGVycy9kcm9wc2hhZG93L0JsdXJZVGludEZpbHRlci5qcyIsInNyYy9maWx0ZXJzL2Ryb3BzaGFkb3cvRHJvcFNoYWRvd0ZpbHRlci5qcyIsInNyYy9maWx0ZXJzL2dyYXkvR3JheUZpbHRlci5qcyIsInNyYy9maWx0ZXJzL2luZGV4LmpzIiwic3JjL2ZpbHRlcnMvaW52ZXJ0L0ludmVydEZpbHRlci5qcyIsInNyYy9maWx0ZXJzL25vaXNlL05vaXNlRmlsdGVyLmpzIiwic3JjL2ZpbHRlcnMvcGl4ZWxhdGUvUGl4ZWxhdGVGaWx0ZXIuanMiLCJzcmMvZmlsdGVycy9yZ2IvUkdCU3BsaXRGaWx0ZXIuanMiLCJzcmMvZmlsdGVycy9zZXBpYS9TZXBpYUZpbHRlci5qcyIsInNyYy9maWx0ZXJzL3Nob2Nrd2F2ZS9TaG9ja3dhdmVGaWx0ZXIuanMiLCJzcmMvZmlsdGVycy90aWx0c2hpZnQvVGlsdFNoaWZ0QXhpc0ZpbHRlci5qcyIsInNyYy9maWx0ZXJzL3RpbHRzaGlmdC9UaWx0U2hpZnRGaWx0ZXIuanMiLCJzcmMvZmlsdGVycy90aWx0c2hpZnQvVGlsdFNoaWZ0WEZpbHRlci5qcyIsInNyYy9maWx0ZXJzL3RpbHRzaGlmdC9UaWx0U2hpZnRZRmlsdGVyLmpzIiwic3JjL2ZpbHRlcnMvdHdpc3QvVHdpc3RGaWx0ZXIuanMiLCJzcmMvc3JjL2luZGV4LmpzIiwic3JjL2ludGVyYWN0aW9uL0ludGVyYWN0aW9uRGF0YS5qcyIsInNyYy9pbnRlcmFjdGlvbi9JbnRlcmFjdGlvbk1hbmFnZXIuanMiLCJzcmMvaW50ZXJhY3Rpb24vaW5kZXguanMiLCJzcmMvaW50ZXJhY3Rpb24vaW50ZXJhY3RpdmVUYXJnZXQuanMiLCJzcmMvbG9hZGVycy9iaXRtYXBGb250UGFyc2VyLmpzIiwic3JjL2xvYWRlcnMvaW5kZXguanMiLCJzcmMvbG9hZGVycy9sb2FkZXIuanMiLCJzcmMvbG9hZGVycy9zcHJpdGVzaGVldFBhcnNlci5qcyIsInNyYy9sb2FkZXJzL3RleHR1cmVQYXJzZXIuanMiLCJzcmMvbWVzaC9NZXNoLmpzIiwic3JjL21lc2gvUGxhbmUuanMiLCJzcmMvbWVzaC9Sb3BlLmpzIiwic3JjL21lc2gvaW5kZXguanMiLCJzcmMvbWVzaC93ZWJnbC9NZXNoUmVuZGVyZXIuanMiLCJzcmMvbWVzaC93ZWJnbC9NZXNoU2hhZGVyLmpzIiwic3JjL3BvbHlmaWxsL01hdGguc2lnbi5qcyIsInNyYy9wb2x5ZmlsbC9PYmplY3QuYXNzaWduLmpzIiwic3JjL3BvbHlmaWxsL2luZGV4LmpzIiwic3JjL3BvbHlmaWxsL3JlcXVlc3RBbmltYXRpb25GcmFtZS5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQ0FBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDMUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN4Q0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN2TUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2pIQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM5QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdERBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3pEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDMUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbENBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM3QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3RJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDaENBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQzlDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7QUM1dUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7OztBQ2hPQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUMzRkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7O0FDcmhCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNwRkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNyRkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNKQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbnNCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0a0JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdFFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUN2Q0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7OztBQ25tQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDeGNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNoeUJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDaEVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ1pBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNwQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMxREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ25aQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDN05BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3JvQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdm1CQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0b0NBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDM0ZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzlUQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDcEhBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNsREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNyRkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDckVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMxTkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM3REE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDckVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzlIQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM3RkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdGJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNwRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3BCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdEZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzdGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDckdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM1RkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDMUZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM3VEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzFOQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMxZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM1RUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuUUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzFRQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbEdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDaFdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzVEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzFQQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMxSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzNZQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDOUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNyREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQy9GQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMxQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbGNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNqSEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDeEtBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM3V0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdkNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzVEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzdEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzlnQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM3R0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMvRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3hEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN6SkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNqU0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMvQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ25DQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3RCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDem1CQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdldBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDN0RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDM21CQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuYkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDN2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDeGFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDL0VBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDM09BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNqV0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdERBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDL0JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuUkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3BFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzdWQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbFlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzlUQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNsY0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDOVFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNUJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNUJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbkJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdkRBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ25HQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzVHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzNGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNwRkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM1QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdGhCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDL0NBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN6RkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDeEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbEZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdEVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN6RkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQy9MQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDL0NBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDckNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2hEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDckRBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDakRBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3BGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNoREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3RGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMzSEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3BDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNwQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUNuRkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7OztBQzVCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDL0NBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDMTJCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNmQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDL0NBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN2SEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNURBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbEZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNwQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDMWRBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNUhBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbk5BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNqQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ25PQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDM0RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDUkE7QUFDQTtBQUNBO0FBQ0E7OztBQ0hBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6ImdlbmVyYXRlZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzQ29udGVudCI6WyIoZnVuY3Rpb24gZSh0LG4scil7ZnVuY3Rpb24gcyhvLHUpe2lmKCFuW29dKXtpZighdFtvXSl7dmFyIGE9dHlwZW9mIHJlcXVpcmU9PVwiZnVuY3Rpb25cIiYmcmVxdWlyZTtpZighdSYmYSlyZXR1cm4gYShvLCEwKTtpZihpKXJldHVybiBpKG8sITApO3ZhciBmPW5ldyBFcnJvcihcIkNhbm5vdCBmaW5kIG1vZHVsZSAnXCIrbytcIidcIik7dGhyb3cgZi5jb2RlPVwiTU9EVUxFX05PVF9GT1VORFwiLGZ9dmFyIGw9bltvXT17ZXhwb3J0czp7fX07dFtvXVswXS5jYWxsKGwuZXhwb3J0cyxmdW5jdGlvbihlKXt2YXIgbj10W29dWzFdW2VdO3JldHVybiBzKG4/bjplKX0sbCxsLmV4cG9ydHMsZSx0LG4scil9cmV0dXJuIG5bb10uZXhwb3J0c312YXIgaT10eXBlb2YgcmVxdWlyZT09XCJmdW5jdGlvblwiJiZyZXF1aXJlO2Zvcih2YXIgbz0wO288ci5sZW5ndGg7bysrKXMocltvXSk7cmV0dXJuIHN9KSIsIlxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcblxuICAgIGNyZWF0ZUNvbnRleHQ6IFx0XHRcdHJlcXVpcmUoJy4vbGliL2NyZWF0ZUNvbnRleHQnKSxcbiAgICBzZXRWZXJ0ZXhBdHRyaWJBcnJheXM6IFx0cmVxdWlyZSgnLi9saWIvc2V0VmVydGV4QXR0cmliQXJyYXlzJyksXG4gICAgXG4gICAgR0xCdWZmZXI6IFx0XHRcdFx0cmVxdWlyZSgnLi9saWIvR0xCdWZmZXInKSxcbiAgICBHTEZyYW1lYnVmZmVyOiBcdFx0XHRyZXF1aXJlKCcuL2xpYi9HTEZyYW1lYnVmZmVyJyksXG4gICAgR0xTaGFkZXI6IFx0XHRcdFx0cmVxdWlyZSgnLi9saWIvR0xTaGFkZXInKSxcbiAgICBHTFRleHR1cmU6IFx0XHRcdFx0cmVxdWlyZSgnLi9saWIvR0xUZXh0dXJlJyksXG4gICAgXG4gICAgVmVydGV4QXJyYXlPYmplY3Q6IFx0XHRyZXF1aXJlKCcuL2xpYi9WZXJ0ZXhBcnJheU9iamVjdCcpXG5cbn07IiwiXG4vKipcbiAqIEhlbHBlciBjbGFzcyB0byBjcmVhdGUgYSB3ZWJHTCBidWZmZXJcbiAqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gZ2wge1dlYkdMUmVuZGVyaW5nQ29udGV4dH1cbiAqL1xuXG52YXIgRU1QVFlfQVJSQVlfQlVGRkVSID0gbmV3IEFycmF5QnVmZmVyKDApO1xuXG52YXIgQnVmZmVyID0gZnVuY3Rpb24oZ2wsIHR5cGUsIGRhdGEsIGRyYXdUeXBlKVxue1xuXHR0aGlzLmdsID0gZ2w7XG5cblx0dGhpcy5idWZmZXIgPSBnbC5jcmVhdGVCdWZmZXIoKTtcblx0dGhpcy50eXBlID0gdHlwZSB8fCBnbC5BUlJBWV9CVUZGRVI7XG5cdHRoaXMuZHJhd1R5cGUgPSBkcmF3VHlwZSB8fCBnbC5TVEFUSUNfRFJBVztcblx0dGhpcy5kYXRhID0gRU1QVFlfQVJSQVlfQlVGRkVSO1xuXG5cdGlmKGRhdGEpXG5cdHtcblx0XHR0aGlzLnVwbG9hZChkYXRhKTtcblx0fVxufVxuXG5CdWZmZXIucHJvdG90eXBlLnVwbG9hZCA9IGZ1bmN0aW9uKGRhdGEsIG9mZnNldCwgZG9udEJpbmQpXG57XG5cdC8vIHRvZG8gLSBuZWVkZWQ/XG5cdC8vaWYoIWRvbnRCaW5kKVxuXHR0aGlzLmJpbmQoKTtcblxuXHR2YXIgZ2wgPSB0aGlzLmdsO1xuXHRcblx0ZGF0YSA9IGRhdGEgfHwgdGhpcy5kYXRhO1xuXHRvZmZzZXQgPSBvZmZzZXQgfHwgMDtcblxuXHRpZih0aGlzLmRhdGEuYnl0ZUxlbmd0aCA+PSBkYXRhLmJ5dGVMZW5ndGgpXG5cdHtcdFxuXHRcdGdsLmJ1ZmZlclN1YkRhdGEodGhpcy50eXBlLCBvZmZzZXQsIGRhdGEpO1xuXHR9XG5cdGVsc2Vcblx0e1xuXHRcdGdsLmJ1ZmZlckRhdGEodGhpcy50eXBlLCBkYXRhLCB0aGlzLmRyYXdUeXBlKTtcblx0fVxuXG5cdHRoaXMuZGF0YSA9IGRhdGE7XG59XG5cbkJ1ZmZlci5wcm90b3R5cGUuYmluZCA9IGZ1bmN0aW9uKClcbntcblx0dmFyIGdsID0gdGhpcy5nbDtcblx0Z2wuYmluZEJ1ZmZlcih0aGlzLnR5cGUsIHRoaXMuYnVmZmVyKTtcbn1cblxuQnVmZmVyLmNyZWF0ZVZlcnRleEJ1ZmZlciA9IGZ1bmN0aW9uKGdsLCBkYXRhLCBkcmF3VHlwZSlcbntcblx0cmV0dXJuIG5ldyBCdWZmZXIoZ2wsIGdsLkFSUkFZX0JVRkZFUiwgZGF0YSwgZHJhd1R5cGUpO1xufVxuXG5CdWZmZXIuY3JlYXRlSW5kZXhCdWZmZXIgPSBmdW5jdGlvbihnbCwgZGF0YSwgZHJhd1R5cGUpXG57XG5cdHJldHVybiBuZXcgQnVmZmVyKGdsLCBnbC5FTEVNRU5UX0FSUkFZX0JVRkZFUiwgZGF0YSwgZHJhd1R5cGUpO1xufVxuXG5CdWZmZXIuY3JlYXRlID0gZnVuY3Rpb24oZ2wsIHR5cGUsIGRhdGEsIGRyYXdUeXBlKVxue1xuXHRyZXR1cm4gbmV3IEJ1ZmZlcihnbCwgdHlwZSwgZHJhd1R5cGUpO1xufVxuXG4vL1RPRE8gRGVzdHJveS4uXG5cbm1vZHVsZS5leHBvcnRzID0gQnVmZmVyO1xuXG4iLCJcbnZhciBUZXh0dXJlID0gcmVxdWlyZSgnLi9HTFRleHR1cmUnKTtcblxuLyoqXG4gKiBIZWxwZXIgY2xhc3MgdG8gY3JlYXRlIGEgd2ViR0wgRnJhbWVidWZmZXJcbiAqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gZ2wge1dlYkdMUmVuZGVyaW5nQ29udGV4dH1cbiAqL1xuXG52YXIgRnJhbWVidWZmZXIgPSBmdW5jdGlvbihnbCwgd2lkdGgsIGhlaWdodClcbntcblx0dGhpcy5nbCA9IGdsO1xuXG5cdHRoaXMuZnJhbWVidWZmZXIgPSBnbC5jcmVhdGVGcmFtZWJ1ZmZlcigpO1xuXHRcblx0dGhpcy5zdGVuY2lsID0gbnVsbDtcblx0dGhpcy50ZXh0dXJlID0gbnVsbDtcblxuXHR0aGlzLndpZHRoID0gd2lkdGggfHwgMTAwO1xuXHR0aGlzLmhlaWdodCA9IGhlaWdodCB8fCAxMDA7XG59XG5cbkZyYW1lYnVmZmVyLnByb3RvdHlwZS5lbmFibGVUZXh0dXJlID0gZnVuY3Rpb24odGV4dHVyZSlcbntcblx0dmFyIGdsID0gdGhpcy5nbDtcblxuXHR0aGlzLnRleHR1cmUgPSB0ZXh0dXJlIHx8IG5ldyBUZXh0dXJlKGdsKTtcblxuXHR0aGlzLnRleHR1cmUuYmluZCgpO1xuXG5cdC8vZ2wudGV4SW1hZ2UyRChnbC5URVhUVVJFXzJELCAwLCBnbC5SR0JBLCAgdGhpcy53aWR0aCwgdGhpcy5oZWlnaHQsIDAsIGdsLlJHQkEsIGdsLlVOU0lHTkVEX0JZVEUsIG51bGwpO1xuXG5cdHRoaXMuYmluZCgpO1xuXG5cdGdsLmZyYW1lYnVmZmVyVGV4dHVyZTJEKGdsLkZSQU1FQlVGRkVSLCBnbC5DT0xPUl9BVFRBQ0hNRU5UMCwgZ2wuVEVYVFVSRV8yRCwgdGhpcy50ZXh0dXJlLnRleHR1cmUsIDApO1xufVxuXG5GcmFtZWJ1ZmZlci5wcm90b3R5cGUuZW5hYmxlU3RlbmNpbCA9IGZ1bmN0aW9uKClcbntcblx0aWYodGhpcy5zdGVuY2lsKXJldHVybjtcblxuXHR2YXIgZ2wgPSB0aGlzLmdsO1xuXG5cdHRoaXMuc3RlbmNpbCA9IGdsLmNyZWF0ZVJlbmRlcmJ1ZmZlcigpO1xuICAgIFxuICAgIGdsLmJpbmRSZW5kZXJidWZmZXIoZ2wuUkVOREVSQlVGRkVSLCB0aGlzLnN0ZW5jaWwpO1xuICAgIFxuICAgIC8vIFRPRE8uLiB0aGlzIGlzIGRlcHRoIEFORCBzdGVuY2lsP1xuICAgIGdsLmZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyKGdsLkZSQU1FQlVGRkVSLCBnbC5ERVBUSF9TVEVOQ0lMX0FUVEFDSE1FTlQsIGdsLlJFTkRFUkJVRkZFUiwgdGhpcy5zdGVuY2lsKTtcbiAgICBnbC5yZW5kZXJidWZmZXJTdG9yYWdlKGdsLlJFTkRFUkJVRkZFUiwgZ2wuREVQVEhfU1RFTkNJTCwgIHRoaXMud2lkdGggICwgdGhpcy5oZWlnaHQgKTtcbn1cblxuRnJhbWVidWZmZXIucHJvdG90eXBlLmNsZWFyID0gZnVuY3Rpb24oIHIsIGcsIGIsIGEgKVxue1xuXHR0aGlzLmJpbmQoKTtcblxuXHR2YXIgZ2wgPSB0aGlzLmdsO1xuICAgIFxuICAgIGdsLmNsZWFyQ29sb3IociwgZywgYiwgYSk7XG4gICAgZ2wuY2xlYXIoZ2wuQ09MT1JfQlVGRkVSX0JJVCk7XG59XG5cbkZyYW1lYnVmZmVyLnByb3RvdHlwZS5iaW5kID0gZnVuY3Rpb24oKVxue1xuXHR2YXIgZ2wgPSB0aGlzLmdsO1xuXHRnbC5iaW5kRnJhbWVidWZmZXIoZ2wuRlJBTUVCVUZGRVIsIHRoaXMuZnJhbWVidWZmZXIgKTtcdFxufVxuXG5GcmFtZWJ1ZmZlci5wcm90b3R5cGUudW5iaW5kID0gZnVuY3Rpb24oKVxue1xuXHRnbC5iaW5kRnJhbWVidWZmZXIoZ2wuRlJBTUVCVUZGRVIsIG51bGwgKTtcdFxufVxuXG5GcmFtZWJ1ZmZlci5wcm90b3R5cGUucmVzaXplID0gZnVuY3Rpb24od2lkdGgsIGhlaWdodClcbntcblx0dmFyIGdsID0gdGhpcy5nbDtcblxuXHR0aGlzLndpZHRoID0gd2lkdGg7XG5cdHRoaXMuaGVpZ2h0ID0gaGVpZ2h0O1xuXG5cdGlmICggdGhpcy50ZXh0dXJlIClcbiAgICB7XG4gICAgXHR0aGlzLnRleHR1cmUudXBsb2FkRGF0YShudWxsLCB3aWR0aCwgaGVpZ2h0KTtcblx0fVxuXG5cdGlmICggdGhpcy5zdGVuY2lsIClcbiAgICB7XG4gICAgICAgIC8vIHVwZGF0ZSB0aGUgc3RlbmNpbCBidWZmZXIgd2lkdGggYW5kIGhlaWdodFxuICAgICAgICBnbC5iaW5kUmVuZGVyYnVmZmVyKGdsLlJFTkRFUkJVRkZFUiwgdGhpcy5zdGVuY2lsKTtcbiAgICAgICAgZ2wucmVuZGVyYnVmZmVyU3RvcmFnZShnbC5SRU5ERVJCVUZGRVIsIGdsLkRFUFRIX1NURU5DSUwsIHdpZHRoLCBoZWlnaHQpO1xuICAgIH1cbn1cblxuRnJhbWVidWZmZXIucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbigpXG57XG5cdHZhciBnbCA9IHRoaXMuZ2w7XG5cdC8vVE9ET1xuXHRnbC5kZWxldGVGcmFtZWJ1ZmZlcih0aGlzLmZyYW1lYnVmZmVyKTtcbn1cblxuRnJhbWVidWZmZXIuY3JlYXRlUkdCQSA9IGZ1bmN0aW9uKGdsLCB3aWR0aCwgaGVpZ2h0LCBkYXRhKVxue1xuXHR2YXIgdGV4dHVyZSA9IFRleHR1cmUuZnJvbURhdGEoZ2wsIG51bGwsIHdpZHRoLCBoZWlnaHQpO1xuXHR0ZXh0dXJlLmVuYWJsZU5lYXJlc3RTY2FsaW5nKCk7XG4gICAgdGV4dHVyZS5lbmFibGVXcmFwQ2xhbXAoKTtcblxuICAgIC8vbm93IGNyZWF0ZSB0aGUgZnJhbWVidWZmZXIgb2JqZWN0IGFuZCBhdHRhY2ggdGhlIHRleHR1cmUgdG8gaXQuXG4gICAgdmFyIGZibyA9IG5ldyBGcmFtZWJ1ZmZlcihnbCwgd2lkdGgsIGhlaWdodCk7XG4gICAgZmJvLmVuYWJsZVRleHR1cmUodGV4dHVyZSk7XG5cbiAgICByZXR1cm4gZmJvO1xufVxuXG5GcmFtZWJ1ZmZlci5jcmVhdGVGbG9hdDMyID0gZnVuY3Rpb24oZ2wsIHdpZHRoLCBoZWlnaHQsIGRhdGEpXG57XG5cdC8vIGNyZWF0ZSBhIG5ldyB0ZXh0dXJlLi5cbiAgICB2YXIgdGV4dHVyZSA9IG5ldyBUZXh0dXJlLmZyb21EYXRhKGdsLCBkYXRhLCB3aWR0aCwgaGVpZ2h0KTtcbiAgICB0ZXh0dXJlLmVuYWJsZU5lYXJlc3RTY2FsaW5nKCk7XG4gICAgdGV4dHVyZS5lbmFibGVXcmFwQ2xhbXAoKTtcblxuICAgIC8vbm93IGNyZWF0ZSB0aGUgZnJhbWVidWZmZXIgb2JqZWN0IGFuZCBhdHRhY2ggdGhlIHRleHR1cmUgdG8gaXQuXG4gICAgdmFyIGZibyA9IG5ldyBGcmFtZWJ1ZmZlcihnbCwgd2lkdGgsIGhlaWdodCk7XG4gICAgZmJvLmVuYWJsZVRleHR1cmUodGV4dHVyZSlcblxuICAgIHJldHVybiBmYm87XG59XG5cbm1vZHVsZS5leHBvcnRzID0gRnJhbWVidWZmZXI7XG5cbiIsIlxudmFyIGNvbXBpbGVQcm9ncmFtID0gcmVxdWlyZSgnLi9zaGFkZXIvY29tcGlsZVByb2dyYW0nKSxcblx0ZXh0cmFjdEF0dHJpYnV0ZXMgPSByZXF1aXJlKCcuL3NoYWRlci9leHRyYWN0QXR0cmlidXRlcycpLFxuXHRleHRyYWN0VW5pZm9ybXMgPSByZXF1aXJlKCcuL3NoYWRlci9leHRyYWN0VW5pZm9ybXMnKSxcblx0Z2VuZXJhdGVVbmlmb3JtQWNjZXNzT2JqZWN0ID0gcmVxdWlyZSgnLi9zaGFkZXIvZ2VuZXJhdGVVbmlmb3JtQWNjZXNzT2JqZWN0Jyk7XG5cbi8qKlxuICogSGVscGVyIGNsYXNzIHRvIGNyZWF0ZSBhIHdlYkdMIFNoYWRlclxuICpcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqIEBwYXJhbSBnbCB7V2ViR0xSZW5kZXJpbmdDb250ZXh0fVxuICovXG52YXIgU2hhZGVyID0gZnVuY3Rpb24oZ2wsIHZlcnRleFNyYywgZnJhZ21lbnRTcmMpXG57XG5cdHRoaXMuZ2wgPSBnbDtcblxuXHQvLyBGaXJzdCBjb21waWxlIHRoZSBwcm9ncmFtLi5cblx0dGhpcy5wcm9ncmFtID0gY29tcGlsZVByb2dyYW0oZ2wsIHZlcnRleFNyYywgZnJhZ21lbnRTcmMpO1xuXG5cdC8vIG5leHQgZXh0cmFjdCB0aGUgYXR0cmlidXRlc1xuXHR0aGlzLmF0dHJpYnV0ZXMgPSBleHRyYWN0QXR0cmlidXRlcyhnbCwgdGhpcy5wcm9ncmFtKTsgXG5cbiAgICB2YXIgdW5pZm9ybURhdGEgPSBleHRyYWN0VW5pZm9ybXMoZ2wsIHRoaXMucHJvZ3JhbSk7XG5cbiAgICB0aGlzLnVuaWZvcm1zID0gZ2VuZXJhdGVVbmlmb3JtQWNjZXNzT2JqZWN0KCBnbCwgdW5pZm9ybURhdGEgKTtcbn1cblxuU2hhZGVyLnByb3RvdHlwZS5iaW5kID0gZnVuY3Rpb24oKVxue1xuXHR0aGlzLmdsLnVzZVByb2dyYW0odGhpcy5wcm9ncmFtKTtcbn1cblxuU2hhZGVyLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24oKVxue1xuXHR2YXIgZ2wgPSB0aGlzLmdsO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IFNoYWRlcjtcblxuIiwiXG4vKipcbiAqIEhlbHBlciBjbGFzcyB0byBjcmVhdGUgYSB3ZWJHTCBUZXh0dXJlXG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIGdsIHtXZWJHTFJlbmRlcmluZ0NvbnRleHR9IGEgV2ViR0wgY29udGV4dFxuICogQHBhcmFtIHdpZHRoIHtudW1iZXJ9IHRoZSB3aWR0aCBvZiB0aGUgdGV4dHVyZSBcbiAqIEBwYXJhbSBoZWlnaHQge251bWJlcn0gdGhlIGhlaWdodCBvZiB0aGUgdGV4dHVyZSBcbiAqIEBwYXJhbSBmb3JtYXQge251bWJlcn0gdGhlIHBpeGVsIGZvcm1hdCBvZiB0aGUgdGV4dHVyZS4gZGVmYXVsdHMgdG8gZ2wuUkdCQVxuICogQHBhcmFtIHR5cGUge251bWJlcn0gdGhlIGdsIHR5cGUgb2YgdGhlIHRleHR1cmUuIGRlZmF1bHRzIHRvIGdsLlVOU0lHTkVEX0JZVEVcbiAqL1xudmFyIFRleHR1cmUgPSBmdW5jdGlvbihnbCwgd2lkdGgsIGhlaWdodCwgZm9ybWF0LCB0eXBlKVxue1xuXHR0aGlzLmdsID0gZ2w7XG5cblx0dGhpcy50ZXh0dXJlID0gZ2wuY3JlYXRlVGV4dHVyZSgpO1xuXG5cdC8vIHNvbWUgc2V0dGluZ3MuLlxuXHR0aGlzLm1pcG1hcCA9IGZhbHNlO1xuXG5cdHRoaXMucHJlbXVsdGlwbHlBbHBoYSA9IGZhbHNlO1xuXG5cdHRoaXMud2lkdGggPSB3aWR0aCB8fCAwO1xuXHR0aGlzLmhlaWdodCA9IGhlaWdodCB8fCAwO1xuXG5cdHRoaXMuZm9ybWF0ID0gZm9ybWF0IHx8IGdsLlJHQkE7XG5cdHRoaXMudHlwZSA9IHR5cGUgfHwgZ2wuVU5TSUdORURfQllURTtcblxuXG59XG5cbi8qKlxuICogQHBhcmFtIHtQSVhJLmdsQ29yZS5UZXh0dXJlfSBbdmFybmFtZV0gW2Rlc2NyaXB0aW9uXVxuICovXG5UZXh0dXJlLnByb3RvdHlwZS51cGxvYWQgPSBmdW5jdGlvbihzb3VyY2UpXG57XG5cdHRoaXMuYmluZCgpO1xuXG5cdHZhciBnbCA9IHRoaXMuZ2w7XG5cblx0dGhpcy53aWR0aCA9IHNvdXJjZS53aWR0aDtcblx0dGhpcy5oZWlnaHQgPSBzb3VyY2UuaGVpZ2h0O1xuXG5cdGdsLnBpeGVsU3RvcmVpKGdsLlVOUEFDS19QUkVNVUxUSVBMWV9BTFBIQV9XRUJHTCwgdGhpcy5wcmVtdWx0aXBseUFscGhhKTtcbiAgICBnbC50ZXhJbWFnZTJEKGdsLlRFWFRVUkVfMkQsIDAsIHRoaXMuZm9ybWF0LCB0aGlzLmZvcm1hdCwgdGhpcy50eXBlLCBzb3VyY2UpO1xufVxuXG52YXIgRkxPQVRJTkdfUE9JTlRfQVZBSUxBQkxFID0gZmFsc2U7XG5cblRleHR1cmUucHJvdG90eXBlLnVwbG9hZERhdGEgPSBmdW5jdGlvbihkYXRhLCB3aWR0aCwgaGVpZ2h0KVxue1xuXHR0aGlzLmJpbmQoKTtcblx0XG5cdHRoaXMud2lkdGggPSB3aWR0aCB8fCB0aGlzLndpZHRoO1xuXHR0aGlzLmhlaWdodCA9IGhlaWdodCB8fCB0aGlzLmhlaWdodDtcblxuXHRpZihkYXRhIGluc3RhbmNlb2YgRmxvYXQzMkFycmF5KVxuXHR7XG5cdFx0aWYoIUZMT0FUSU5HX1BPSU5UX0FWQUlMQUJMRSlcblx0XHR7XG5cdFx0XHR2YXIgZXh0ID0gZ2wuZ2V0RXh0ZW5zaW9uKFwiT0VTX3RleHR1cmVfZmxvYXRcIik7XG5cdFx0XHRcblx0XHRcdGlmKGV4dClcblx0XHRcdHtcblx0XHRcdFx0RkxPQVRJTkdfUE9JTlRfQVZBSUxBQkxFID0gdHJ1ZTtcblx0XHRcdH1cblx0XHRcdGVsc2Vcblx0XHRcdHtcblx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKCdmbG9hdGluZyBwb2ludCB0ZXh0dXJlcyBub3QgYXZhaWxhYmxlJyk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0dGhpcy50eXBlID0gZ2wuRkxPQVQ7XG5cdH1cblx0ZWxzZVxuXHR7XG5cdFx0Ly8gVE9ETyBzdXBwb3J0IGZvciBvdGhlciB0eXBlc1xuXHRcdHRoaXMudHlwZSA9IGdsLlVOU0lHTkVEX0JZVEU7XG5cdH1cblxuXHQvLyB3aGF0IHR5cGUgb2YgZGF0YT9cblx0Z2wucGl4ZWxTdG9yZWkoZ2wuVU5QQUNLX1BSRU1VTFRJUExZX0FMUEhBX1dFQkdMLCB0aGlzLnByZW11bHRpcGx5QWxwaGEpO1xuXHRnbC50ZXhJbWFnZTJEKGdsLlRFWFRVUkVfMkQsIDAsIHRoaXMuZm9ybWF0LCAgdGhpcy53aWR0aCwgdGhpcy5oZWlnaHQsIDAsIHRoaXMuZm9ybWF0LCB0aGlzLnR5cGUsIGRhdGEgfHwgbnVsbCk7XG5cbn1cblxuVGV4dHVyZS5wcm90b3R5cGUuYmluZCA9IGZ1bmN0aW9uKGxvY2F0aW9uKVxue1xuXHR2YXIgZ2wgPSB0aGlzLmdsO1xuXG5cdGlmKGxvY2F0aW9uICE9PSB1bmRlZmluZWQpXG5cdHtcblx0XHRnbC5hY3RpdmVUZXh0dXJlKGdsLlRFWFRVUkUwICsgbG9jYXRpb24pO1xuXHR9XG5cblx0Z2wuYmluZFRleHR1cmUoZ2wuVEVYVFVSRV8yRCwgdGhpcy50ZXh0dXJlKTtcbn1cblxuVGV4dHVyZS5wcm90b3R5cGUudW5iaW5kID0gZnVuY3Rpb24oKVxue1xuXHR2YXIgZ2wgPSB0aGlzLmdsO1xuXHRnbC5iaW5kVGV4dHVyZShnbC5URVhUVVJFXzJELCBudWxsKTtcbn1cblxuVGV4dHVyZS5wcm90b3R5cGUubWluRmlsdGVyID0gZnVuY3Rpb24oIGxpbmVhciApXG57XG5cdHZhciBnbCA9IHRoaXMuZ2w7XG5cblx0dGhpcy5iaW5kKCk7XG5cblx0aWYodGhpcy5taXBtYXApXG5cdHtcblx0XHRnbC50ZXhQYXJhbWV0ZXJpKGdsLlRFWFRVUkVfMkQsIGdsLlRFWFRVUkVfTUlOX0ZJTFRFUiwgbGluZWFyID8gZ2wuTElORUFSX01JUE1BUF9MSU5FQVIgOiBnbC5ORUFSRVNUX01JUE1BUF9ORUFSRVNUKTtcblx0fVxuXHRlbHNlXG5cdHtcblx0XHRnbC50ZXhQYXJhbWV0ZXJpKGdsLlRFWFRVUkVfMkQsIGdsLlRFWFRVUkVfTUlOX0ZJTFRFUiwgbGluZWFyID8gZ2wuTElORUFSIDogZ2wuTkVBUkVTVCk7XG5cdH1cdFxufVxuXG5UZXh0dXJlLnByb3RvdHlwZS5tYWdGaWx0ZXIgPSBmdW5jdGlvbiggbGluZWFyIClcbntcblx0dmFyIGdsID0gdGhpcy5nbDtcblxuXHR0aGlzLmJpbmQoKTtcblxuXHRnbC50ZXhQYXJhbWV0ZXJpKGdsLlRFWFRVUkVfMkQsIGdsLlRFWFRVUkVfTUFHX0ZJTFRFUiwgbGluZWFyID8gZ2wuTElORUFSIDogZ2wuTkVBUkVTVCk7XG59XG5cblRleHR1cmUucHJvdG90eXBlLmVuYWJsZU1pcG1hcCA9IGZ1bmN0aW9uKClcbntcblx0dGhpcy5iaW5kKCk7XG5cblx0dGhpcy5taXBtYXAgPSB0cnVlO1xuXHRnbC5nZW5lcmF0ZU1pcG1hcChnbC5URVhUVVJFXzJEKTtcbn1cblxuVGV4dHVyZS5wcm90b3R5cGUuZW5hYmxlTGluZWFyU2NhbGluZyA9IGZ1bmN0aW9uKClcbntcblx0dGhpcy5taW5GaWx0ZXIodHJ1ZSk7XG5cdHRoaXMubWFnRmlsdGVyKHRydWUpO1xufVxuXG5UZXh0dXJlLnByb3RvdHlwZS5lbmFibGVOZWFyZXN0U2NhbGluZyA9IGZ1bmN0aW9uKClcbntcblx0dGhpcy5taW5GaWx0ZXIoZmFsc2UpO1xuXHR0aGlzLm1hZ0ZpbHRlcihmYWxzZSk7XG59XG5cblRleHR1cmUucHJvdG90eXBlLmVuYWJsZVdyYXBDbGFtcCA9IGZ1bmN0aW9uKClcbntcblx0dmFyIGdsID0gdGhpcy5nbDtcblxuXHR0aGlzLmJpbmQoKTtcblxuXHRnbC50ZXhQYXJhbWV0ZXJpKGdsLlRFWFRVUkVfMkQsIGdsLlRFWFRVUkVfV1JBUF9TLCBnbC5DTEFNUF9UT19FREdFKTtcbiAgICBnbC50ZXhQYXJhbWV0ZXJpKGdsLlRFWFRVUkVfMkQsIGdsLlRFWFRVUkVfV1JBUF9ULCBnbC5DTEFNUF9UT19FREdFKTtcbn1cblxuVGV4dHVyZS5wcm90b3R5cGUuZW5hYmxlV3JhcFJlcGVhdCA9IGZ1bmN0aW9uKClcbntcblx0dmFyIGdsID0gdGhpcy5nbDtcblxuXHR0aGlzLmJpbmQoKTtcblx0XG5cdGdsLnRleFBhcmFtZXRlcmkoZ2wuVEVYVFVSRV8yRCwgZ2wuVEVYVFVSRV9XUkFQX1MsIGdsLlJFUEVBVCk7XG4gICAgZ2wudGV4UGFyYW1ldGVyaShnbC5URVhUVVJFXzJELCBnbC5URVhUVVJFX1dSQVBfVCwgZ2wuUkVQRUFUKTtcbn1cblxuVGV4dHVyZS5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uKClcbntcblx0dmFyIGdsID0gdGhpcy5nbDtcblx0Ly9UT0RPXG5cdGdsLmRlbGV0ZVRleHR1cmUodGhpcy50ZXh0dXJlKTtcbn1cblxuLy9UZXh0dXJlLlxuVGV4dHVyZS5mcm9tU291cmNlID0gZnVuY3Rpb24oZ2wsIHNvdXJjZSwgcHJlbXVsdGlwbHlBbHBoYSlcbntcblx0dmFyIHRleHR1cmUgPSBuZXcgVGV4dHVyZShnbCk7XG5cdHRleHR1cmUucHJlbXVsdGlwbHlBbHBoYSA9IHByZW11bHRpcGx5QWxwaGEgfHwgZmFsc2U7XG5cdHRleHR1cmUudXBsb2FkKHNvdXJjZSk7XG5cblx0cmV0dXJuIHRleHR1cmU7XG59XG5cblRleHR1cmUuZnJvbURhdGEgPSBmdW5jdGlvbihnbCwgZGF0YSwgd2lkdGgsIGhlaWdodClcbntcblx0Ly9jb25zb2xlLmxvZyhkYXRhLCB3aWR0aCwgaGVpZ2h0KTtcblx0dmFyIHRleHR1cmUgPSBuZXcgVGV4dHVyZShnbCk7XG5cdHRleHR1cmUudXBsb2FkRGF0YShkYXRhLCB3aWR0aCwgaGVpZ2h0KTtcblxuXHRyZXR1cm4gdGV4dHVyZTtcbn1cblxuXG5tb2R1bGUuZXhwb3J0cyA9IFRleHR1cmU7XG5cbiIsIlxuLyoqXG4gKiBHZW5lcmljIE1hc2sgU3RhY2sgZGF0YSBzdHJ1Y3R1cmVcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqL1xuXG4vLyBzdGF0ZSBvYmplY3QvL1xuXG5cbmZ1bmN0aW9uIFZlcnRleEFycmF5T2JqZWN0KGdsKVxue1xuXHRcblx0dGhpcy5uYXRpdmVWYW9FeHRlbnNpb24gPSAoXG4gICAgICBnbC5nZXRFeHRlbnNpb24oJ09FU192ZXJ0ZXhfYXJyYXlfb2JqZWN0JykgfHxcbiAgICAgIGdsLmdldEV4dGVuc2lvbignTU9aX09FU192ZXJ0ZXhfYXJyYXlfb2JqZWN0JykgfHxcbiAgICAgIGdsLmdldEV4dGVuc2lvbignV0VCS0lUX09FU192ZXJ0ZXhfYXJyYXlfb2JqZWN0JylcbiAgICApO1xuXG4vL1x0dGhpcy5uYXRpdmVWYW9FeHRlbnNpb24gPSBudWxsO1xuXG5cdGlmKHRoaXMubmF0aXZlVmFvRXh0ZW5zaW9uKVxuXHR7XG5cdFx0dGhpcy5uYXRpdmVWYW8gPSB0aGlzLm5hdGl2ZVZhb0V4dGVuc2lvbi5jcmVhdGVWZXJ0ZXhBcnJheU9FUygpOyAgXG5cdH1cblxuXHR0aGlzLmdsID0gZ2w7XG5cblx0dGhpcy5hdHRyaWJ1dGVzID0gW107XG5cblx0dGhpcy5pbmRleEJ1ZmZlciA9IG51bGw7XG5cblx0dGhpcy5kaXJ0eSA9IGZhbHNlO1xuXG5cdFxufVxuXG5WZXJ0ZXhBcnJheU9iamVjdC5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBWZXJ0ZXhBcnJheU9iamVjdDtcbm1vZHVsZS5leHBvcnRzID0gVmVydGV4QXJyYXlPYmplY3Q7XG5cblZlcnRleEFycmF5T2JqZWN0LnByb3RvdHlwZS5iaW5kID0gZnVuY3Rpb24oKVxue1xuXHRpZih0aGlzLm5hdGl2ZVZhbylcblx0e1xuXHRcdHRoaXMubmF0aXZlVmFvRXh0ZW5zaW9uLmJpbmRWZXJ0ZXhBcnJheU9FUyh0aGlzLm5hdGl2ZVZhbyk7ICBcblxuXHRcdGlmKHRoaXMuZGlydHkpXG5cdFx0e1xuXHRcdFx0dGhpcy5kaXJ0eSA9IGZhbHNlO1xuXHRcdFx0dGhpcy5hY3RpdmF0ZSgpO1xuXHRcdH1cblx0fVxuXHRlbHNlXG5cdHtcblx0XHR0aGlzLmFjdGl2YXRlKCk7XG5cdH1cbn1cblxuVmVydGV4QXJyYXlPYmplY3QucHJvdG90eXBlLnVuYmluZCA9IGZ1bmN0aW9uKClcbntcblx0aWYodGhpcy5uYXRpdmVWYW8pXG5cdHtcblx0XHR0aGlzLm5hdGl2ZVZhb0V4dGVuc2lvbi5iaW5kVmVydGV4QXJyYXlPRVMobnVsbCk7XG5cdH1cbn1cblxuVmVydGV4QXJyYXlPYmplY3QucHJvdG90eXBlLmFjdGl2YXRlID0gZnVuY3Rpb24oKVxue1xuXHR2YXIgZ2wgPSB0aGlzLmdsO1xuXG5cdGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5hdHRyaWJ1dGVzLmxlbmd0aDsgaSsrKSBcblx0e1xuXHRcdHZhciBhdHRyaWIgPSB0aGlzLmF0dHJpYnV0ZXNbaV07XG5cdFx0YXR0cmliLmJ1ZmZlci5iaW5kKCk7XHRcblxuXHRcdGF0dHJpYi5hdHRyaWJ1dGUucG9pbnRlcihhdHRyaWIudHlwZSwgYXR0cmliLm5vcm1hbGl6ZWQsIGF0dHJpYi5zdHJpZGUsIGF0dHJpYi5zdGFydCk7IFxuXHRcdFxuXHRcdGdsLmVuYWJsZVZlcnRleEF0dHJpYkFycmF5KGF0dHJpYi5hdHRyaWJ1dGUubG9jYXRpb24pO1xuXHR9O1xuXG5cdHRoaXMuaW5kZXhCdWZmZXIuYmluZCgpO1xufVxuXG5WZXJ0ZXhBcnJheU9iamVjdC5wcm90b3R5cGUuYWRkQXR0cmlidXRlID0gZnVuY3Rpb24oYnVmZmVyLCBhdHRyaWJ1dGUsIHR5cGUsIG5vcm1hbGl6ZWQsIHN0cmlkZSwgc3RhcnQpXG57XG4gICAgdGhpcy5hdHRyaWJ1dGVzLnB1c2goe1xuICAgIFx0YnVmZmVyOiBcdGJ1ZmZlcixcbiAgICBcdGF0dHJpYnV0ZTogXHRhdHRyaWJ1dGUsXG5cbiAgICBcdGxvY2F0aW9uOiBcdGF0dHJpYnV0ZS5sb2NhdGlvbixcblx0IFx0dHlwZTogXHRcdHR5cGUgfHwgdGhpcy5nbC5GTE9BVCxcblx0IFx0bm9ybWFsaXplZDogbm9ybWFsaXplZCB8fCBmYWxzZSxcblx0IFx0c3RyaWRlOiBcdHN0cmlkZSB8fCAwLFxuXHQgXHRzdGFydDogXHRcdHN0YXJ0IHx8IDBcblx0fSlcblxuXHR0aGlzLmRpcnR5ID0gdHJ1ZTtcbn1cblxuXG5WZXJ0ZXhBcnJheU9iamVjdC5wcm90b3R5cGUuYWRkSW5kZXggPSBmdW5jdGlvbihidWZmZXIsIG9wdGlvbnMpXG57XG4gICAgdGhpcy5pbmRleEJ1ZmZlciA9IGJ1ZmZlcjtcblxuICAgIHRoaXMuZGlydHkgPSB0cnVlO1xufVxuXG5WZXJ0ZXhBcnJheU9iamVjdC5wcm90b3R5cGUuZHJhdyA9IGZ1bmN0aW9uKHR5cGUsIHNpemUsIHN0YXJ0KVxue1xuXHR2YXIgZ2wgPSB0aGlzLmdsO1xuXHRnbC5kcmF3RWxlbWVudHModHlwZSwgc2l6ZSwgZ2wuVU5TSUdORURfU0hPUlQsIHN0YXJ0KTtcbn1cblxuIiwiXG4vKipcbiAqIEhlbHBlciBjbGFzcyB0byBjcmVhdGUgYSB3ZWJHTCBDb250ZXh0XG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIGdsIHtXZWJHTFJlbmRlcmluZ0NvbnRleHR9XG4gKi9cblxudmFyIENPTlRFWFRfVUlEID0gMDtcblxudmFyIGNyZWF0ZUNvbnRleHQgPSBmdW5jdGlvbihjYW52YXMsIG9wdGlvbnMpXG57XG4gICAgZ2wgPSBjYW52YXMuZ2V0Q29udGV4dCgnd2ViZ2wnLCBvcHRpb25zKSB8fCBcbiAgICBcdCBjYW52YXMuZ2V0Q29udGV4dCgnZXhwZXJpbWVudGFsLXdlYmdsJywgb3B0aW9ucyk7XG5cbiAgICBpZiAoIWdsKVxuICAgIHtcbiAgICAgICAgLy8gZmFpbCwgbm90IGFibGUgdG8gZ2V0IGEgY29udGV4dFxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RoaXMgYnJvd3NlciBkb2VzIG5vdCBzdXBwb3J0IHdlYkdMLiBUcnkgdXNpbmcgdGhlIGNhbnZhcyByZW5kZXJlcicpO1xuICAgIH1cblxuICAgIC8vIG1pZ2h0IHdhbnQgdG8gcGhhc2UgdGhpcyBvdXQ/XG4gICAgZ2wuaWQgPSBDT05URVhUX1VJRCsrO1xuXG4gICAgcmV0dXJuIGdsO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGNyZWF0ZUNvbnRleHQ7XG5cbiIsIi8qKlxuICogR2VuZXJpYyBNYXNrIFN0YWNrIGRhdGEgc3RydWN0dXJlXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKi9cblxudmFyIEdMX01BUCA9IHt9O1xuXG5cbnZhciBzZXRWZXJ0ZXhBdHRyaWJBcnJheXMgPSBmdW5jdGlvbiAoZ2wsIGF0dHJpYnMpXG57XHRcbiAgIC8vIGNvbnNvbGUubG9nKGdsLmlkKVxuICAgIHZhciBkYXRhID0gR0xfTUFQW2dsLmlkXTtcblxuICAgIGlmKCFkYXRhKVxuICAgIHtcblx0ICAgdmFyIG1heEF0dHJpYnMgPSBnbC5nZXRQYXJhbWV0ZXIoZ2wuTUFYX1ZFUlRFWF9BVFRSSUJTKTtcblx0XHRkYXRhID0gR0xfTUFQW2dsLmlkXSA9IHt0ZW1wQXR0cmliU3RhdGU6bmV3IEFycmF5KG1heEF0dHJpYnMpXG5cdFx0XHRcdCBcdCBcdFx0ICAgLGF0dHJpYlN0YXRlOm5ldyBBcnJheShtYXhBdHRyaWJzKX07XG5cdH1cblx0XG4gICAgdmFyIGksXG4gICAgXHR0ZW1wQXR0cmliU3RhdGUgPSBkYXRhLnRlbXBBdHRyaWJTdGF0ZSxcbiAgICBcdGF0dHJpYlN0YXRlID0gZGF0YS5hdHRyaWJTdGF0ZTtcblxuICAgIGZvciAoaSA9IDA7IGkgPCB0ZW1wQXR0cmliU3RhdGUubGVuZ3RoOyBpKyspXG4gICAge1xuICAgICAgICB0ZW1wQXR0cmliU3RhdGVbaV0gPSBmYWxzZTtcbiAgICB9XG5cbiAgICAvLyBzZXQgdGhlIG5ldyBhdHRyaWJzXG4gICAgZm9yIChpIGluIGF0dHJpYnMpXG4gICAge1xuICAgICAgICB0ZW1wQXR0cmliU3RhdGVbYXR0cmlic1tpXS5sb2NhdGlvbl0gPSB0cnVlO1xuICAgIH1cblxuICAgIGZvciAoaSA9IDE7IGkgPCBhdHRyaWJTdGF0ZS5sZW5ndGg7IGkrKylcbiAgICB7XG4gICAgICAgIGlmIChhdHRyaWJTdGF0ZVtpXSAhPT0gdGVtcEF0dHJpYlN0YXRlW2ldKVxuICAgICAgICB7XG4gICAgICAgICAgICBhdHRyaWJTdGF0ZVtpXSA9IHRlbXBBdHRyaWJTdGF0ZVtpXTtcblxuICAgICAgICAgICAgaWYgKGRhdGEuYXR0cmliU3RhdGVbaV0pXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgZ2wuZW5hYmxlVmVydGV4QXR0cmliQXJyYXkoaSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgZ2wuZGlzYWJsZVZlcnRleEF0dHJpYkFycmF5KGkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxufTtcblxubW9kdWxlLmV4cG9ydHMgPSBzZXRWZXJ0ZXhBdHRyaWJBcnJheXM7IiwiXG5cblxuXG5jb21waWxlUHJvZ3JhbSA9IGZ1bmN0aW9uKGdsLCB2ZXJ0ZXhTcmMsIGZyYWdtZW50U3JjKVxue1xuICAgIHZhciBnbFZlcnRTaGFkZXIgPSBjb21waWxlU2hhZGVyKGdsLCBnbC5WRVJURVhfU0hBREVSLCB2ZXJ0ZXhTcmMpO1xuICAgIHZhciBnbEZyYWdTaGFkZXIgPSBjb21waWxlU2hhZGVyKGdsLCBnbC5GUkFHTUVOVF9TSEFERVIsIGZyYWdtZW50U3JjKTtcblxuICAgIHZhciBwcm9ncmFtID0gZ2wuY3JlYXRlUHJvZ3JhbSgpO1xuXG4gICAgZ2wuYXR0YWNoU2hhZGVyKHByb2dyYW0sIGdsVmVydFNoYWRlcik7XG4gICAgZ2wuYXR0YWNoU2hhZGVyKHByb2dyYW0sIGdsRnJhZ1NoYWRlcik7XG4gICAgZ2wubGlua1Byb2dyYW0ocHJvZ3JhbSk7XG5cbiAgICAvLyBpZiBsaW5raW5nIGZhaWxzLCB0aGVuIGxvZyBhbmQgY2xlYW51cFxuICAgIGlmICghZ2wuZ2V0UHJvZ3JhbVBhcmFtZXRlcihwcm9ncmFtLCBnbC5MSU5LX1NUQVRVUykpXG4gICAge1xuICAgICAgICBjb25zb2xlLmVycm9yKCdQaXhpLmpzIEVycm9yOiBDb3VsZCBub3QgaW5pdGlhbGl6ZSBzaGFkZXIuJyk7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ2dsLlZBTElEQVRFX1NUQVRVUycsIGdsLmdldFByb2dyYW1QYXJhbWV0ZXIocHJvZ3JhbSwgZ2wuVkFMSURBVEVfU1RBVFVTKSk7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ2dsLmdldEVycm9yKCknLCBnbC5nZXRFcnJvcigpKTtcblxuICAgICAgICAvLyBpZiB0aGVyZSBpcyBhIHByb2dyYW0gaW5mbyBsb2csIGxvZyBpdFxuICAgICAgICBpZiAoZ2wuZ2V0UHJvZ3JhbUluZm9Mb2cocHJvZ3JhbSkgIT09ICcnKVxuICAgICAgICB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ1BpeGkuanMgV2FybmluZzogZ2wuZ2V0UHJvZ3JhbUluZm9Mb2coKScsIGdsLmdldFByb2dyYW1JbmZvTG9nKHByb2dyYW0pKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGdsLmRlbGV0ZVByb2dyYW0ocHJvZ3JhbSk7XG4gICAgICAgIHByb2dyYW0gPSBudWxsO1xuICAgIH1cblxuICAgIC8vIGNsZWFuIHVwIHNvbWUgc2hhZGVyc1xuICAgIGdsLmRlbGV0ZVNoYWRlcihnbFZlcnRTaGFkZXIpO1xuICAgIGdsLmRlbGV0ZVNoYWRlcihnbEZyYWdTaGFkZXIpO1xuXG4gICAgcmV0dXJuIHByb2dyYW07XG59XG5cbnZhciBjb21waWxlU2hhZGVyID0gZnVuY3Rpb24gKGdsLCB0eXBlLCBzcmMpXG57XG4gICAgdmFyIHNoYWRlciA9IGdsLmNyZWF0ZVNoYWRlcih0eXBlKTtcblxuICAgIGdsLnNoYWRlclNvdXJjZShzaGFkZXIsIHNyYyk7XG4gICAgZ2wuY29tcGlsZVNoYWRlcihzaGFkZXIpO1xuXG4gICAgaWYgKCFnbC5nZXRTaGFkZXJQYXJhbWV0ZXIoc2hhZGVyLCBnbC5DT01QSUxFX1NUQVRVUykpXG4gICAge1xuICAgICAgICBjb25zb2xlLmxvZyhnbC5nZXRTaGFkZXJJbmZvTG9nKHNoYWRlcikpO1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICByZXR1cm4gc2hhZGVyO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBjb21waWxlUHJvZ3JhbTtcblxuIiwiXG5cbnZhciBkZWZhdWx0VmFsdWUgPSBmdW5jdGlvbih0eXBlLCBzaXplKSBcbntcbiAgICBzd2l0Y2ggKHR5cGUpXG4gICAge1xuICAgICAgICBjYXNlICdmbG9hdCc6XG4gICAgICAgICAgICByZXR1cm4gMDtcblxuICAgICAgICBjYXNlICd2ZWMyJzogXG4gICAgICAgICAgICByZXR1cm4gbmV3IEZsb2F0MzJBcnJheSgyICogc2l6ZSk7XG5cbiAgICAgICAgY2FzZSAndmVjMyc6XG4gICAgICAgICAgICByZXR1cm4gbmV3IEZsb2F0MzJBcnJheSgzICogc2l6ZSk7XG5cbiAgICAgICAgY2FzZSAndmVjNCc6ICAgICBcbiAgICAgICAgICAgIHJldHVybiBuZXcgRmxvYXQzMkFycmF5KDQgKiBzaXplKTtcbiAgICAgICAgICAgIFxuICAgICAgICBjYXNlICdpbnQnOlxuICAgICAgICBjYXNlICdzYW1wbGVyMkQnOlxuICAgICAgICAgICAgcmV0dXJuIDA7XG5cbiAgICAgICAgY2FzZSAnaXZlYzInOiAgIFxuICAgICAgICAgICAgcmV0dXJuIG5ldyBJbnQzMkFycmF5KDIgKiBzaXplKTtcblxuICAgICAgICBjYXNlICdpdmVjMyc6XG4gICAgICAgICAgICByZXR1cm4gbmV3IEludDMyQXJyYXkoMyAqIHNpemUpO1xuXG4gICAgICAgIGNhc2UgJ2l2ZWM0JzogXG4gICAgICAgICAgICByZXR1cm4gbmV3IEludDMyQXJyYXkoNCAqIHNpemUpO1xuXG4gICAgICAgIGNhc2UgJ2Jvb2wnOiAgICAgXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG5cbiAgICAgICAgY2FzZSAnYnZlYzInOlxuXG4gICAgICAgICAgICByZXR1cm4gYm9vbGVhbkFycmF5KCAyICogc2l6ZSk7XG5cbiAgICAgICAgY2FzZSAnYnZlYzMnOlxuICAgICAgICAgICAgcmV0dXJuIGJvb2xlYW5BcnJheSgzICogc2l6ZSk7XG5cbiAgICAgICAgY2FzZSAnYnZlYzQnOlxuICAgICAgICAgICAgcmV0dXJuIGJvb2xlYW5BcnJheSg0ICogc2l6ZSk7XG5cbiAgICAgICAgY2FzZSAnbWF0Mic6XG4gICAgICAgICAgICByZXR1cm4gbmV3IEZsb2F0MzJBcnJheShbMSwgMFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLDAsIDFdKTtcblxuICAgICAgICBjYXNlICdtYXQzJzogXG4gICAgICAgICAgICByZXR1cm4gbmV3IEZsb2F0MzJBcnJheShbMSwgMCwgMFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLDAsIDEsIDBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwwLCAwLCAxXSk7XG5cbiAgICAgICAgY2FzZSAnbWF0NCc6XG4gICAgICAgICAgICByZXR1cm4gbmV3IEZsb2F0MzJBcnJheShbMSwgMCwgMCwgMFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLDAsIDEsIDAsIDBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwwLCAwLCAxLCAwXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsMCwgMCwgMCwgMV0pO1xuICAgIH1cbn1cblxudmFyIGJvb2xlYW5BcnJheSA9IGZ1bmN0aW9uKHNpemUpXG57XG4gICAgdmFyIGFycmF5ID0gbmV3IEFycmF5KHNpemUpO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcnJheS5sZW5ndGg7IGkrKykgXG4gICAge1xuICAgICAgICBhcnJheVtpXSA9IGZhbHNlO1xuICAgIH07XG5cbiAgICByZXR1cm4gYXJyYXk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZGVmYXVsdFZhbHVlO1xuIiwiXG52YXIgbWFwVHlwZSA9IHJlcXVpcmUoJy4vbWFwVHlwZScpO1xudmFyIG1hcFNpemUgPSByZXF1aXJlKCcuL21hcFNpemUnKTtcblxudmFyIGV4dHJhY3RBdHRyaWJ1dGVzID0gZnVuY3Rpb24oZ2wsIHByb2dyYW0pXG57XG4gICAgdmFyIGF0dHJpYnV0ZXMgPSB7fTtcblxuICAgIHZhciB0b3RhbEF0dHJpYnV0ZXMgPSBnbC5nZXRQcm9ncmFtUGFyYW1ldGVyKHByb2dyYW0sIGdsLkFDVElWRV9BVFRSSUJVVEVTKVxuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0b3RhbEF0dHJpYnV0ZXM7IGkrKykgXG4gICAge1xuICAgICAgICB2YXIgYXR0cmliRGF0YSA9IGdsLmdldEFjdGl2ZUF0dHJpYihwcm9ncmFtLCBpKTtcbiAgICAgICAgdmFyIHR5cGUgPSBtYXBUeXBlKGdsLCBhdHRyaWJEYXRhLnR5cGUpO1xuXG4gICAgICAgIGF0dHJpYnV0ZXNbYXR0cmliRGF0YS5uYW1lXSA9IHtcbiAgICAgICAgICAgIHR5cGU6dHlwZSxcbiAgICAgICAgICAgIHNpemU6bWFwU2l6ZSh0eXBlKSxcbiAgICAgICAgICAgIGxvY2F0aW9uOmdsLmdldEF0dHJpYkxvY2F0aW9uKHByb2dyYW0sIGF0dHJpYkRhdGEubmFtZSksXG4gICAgICAgICAgICAvL1RPRE8gLSBtYWtlIGFuIGF0dHJpYnV0ZSBvYmplY3RcbiAgICAgICAgICAgIHBvaW50ZXI6ZnVuY3Rpb24odHlwZSwgbm9ybWFsaXplZCwgc3RyaWRlLCBzdGFydCl7XG5cbiAgICAgICAgICAgICAvLyAgIGNvbnNvbGUubG9nKHRoaXMubG9jYXRpb24pXG4gICAgICAgICAgICAgICAgZ2wudmVydGV4QXR0cmliUG9pbnRlcih0aGlzLmxvY2F0aW9uLHRoaXMuc2l6ZSwgdHlwZSB8fCBnbC5GTE9BVCwgbm9ybWFsaXplZCB8fCBmYWxzZSwgc3RyaWRlIHx8IDAsIHN0YXJ0IHx8IDApOyBcblxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfTtcblxuICAgIHJldHVybiBhdHRyaWJ1dGVzOyAgXG59XG5cbm1vZHVsZS5leHBvcnRzID0gZXh0cmFjdEF0dHJpYnV0ZXM7XG5cbiIsInZhciBtYXBUeXBlID0gcmVxdWlyZSgnLi9tYXBUeXBlJyk7XG52YXIgZGVmYXVsdFZhbHVlID0gcmVxdWlyZSgnLi9kZWZhdWx0VmFsdWUnKTtcblxuXG52YXIgZXh0cmFjdFVuaWZvcm1zID0gZnVuY3Rpb24oZ2wsIHByb2dyYW0pXG57XG5cdHZhciB1bmlmb3JtcyA9IHt9O1xuXHRcbiAgICB2YXIgdG90YWxVbmlmb3JtcyA9IGdsLmdldFByb2dyYW1QYXJhbWV0ZXIocHJvZ3JhbSwgZ2wuQUNUSVZFX1VOSUZPUk1TKVxuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0b3RhbFVuaWZvcm1zOyBpKyspIFxuICAgIHtcbiAgICBcdHZhciB1bmlmb3JtRGF0YSA9IGdsLmdldEFjdGl2ZVVuaWZvcm0ocHJvZ3JhbSwgaSk7XG4gICAgXHR2YXIgbmFtZSA9IHVuaWZvcm1EYXRhLm5hbWUucmVwbGFjZSgvXFxbLio/XFxdLywgXCJcIik7XG4gICAgICAgIHZhciB0eXBlID0gbWFwVHlwZShnbCwgdW5pZm9ybURhdGEudHlwZSApO1xuXG4gICAgXHR1bmlmb3Jtc1tuYW1lXSA9IHtcbiAgICBcdFx0dHlwZTp0eXBlLFxuICAgIFx0XHRzaXplOnVuaWZvcm1EYXRhLnNpemUsXG4gICAgXHRcdGxvY2F0aW9uOmdsLmdldFVuaWZvcm1Mb2NhdGlvbihwcm9ncmFtLCBuYW1lKSxcbiAgICBcdFx0dmFsdWU6ZGVmYXVsdFZhbHVlKHR5cGUsIHVuaWZvcm1EYXRhLnNpemUpXG4gICAgXHR9XG4gICAgfTtcblx0XG5cdHJldHVybiB1bmlmb3JtcztcdFxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGV4dHJhY3RVbmlmb3JtcztcblxuIiwiXG52YXIgZ2VuZXJhdGVVbmlmb3JtQWNjZXNzT2JqZWN0ID0gZnVuY3Rpb24oZ2wsIHVuaWZvcm1EYXRhKVxue1xuICAgIC8vIHRoaXMgaXMgdGhlIG9iamVjdCB3ZSB3aWxsIGJlIHNlbmRpbmcgYmFjay5cbiAgICAvLyBhbiBvYmplY3QgaGllcmFjaHkgd2lsbCBiZSBjcmVhdGVkIGZvciBzdHJ1Y3RzXG4gICAgdmFyIHVuaWZvcm1zID0ge2RhdGE6e319O1xuXG4gICAgdW5pZm9ybXMuZ2wgPSBnbDtcbiAgICBcbiAgICB2YXIgdW5pZm9ybUtleXM9IE9iamVjdC5rZXlzKHVuaWZvcm1EYXRhKTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdW5pZm9ybUtleXMubGVuZ3RoOyBpKyspIFxuICAgIHtcbiAgICAgICAgdmFyIGZ1bGxOYW1lID0gdW5pZm9ybUtleXNbaV1cblxuICAgICAgICB2YXIgbmFtZVRva2VucyA9IGZ1bGxOYW1lLnNwbGl0KCcuJyk7XG4gICAgICAgIHZhciBuYW1lID0gbmFtZVRva2Vuc1tuYW1lVG9rZW5zLmxlbmd0aCAtIDFdO1xuXG4gICAgICAgIHZhciB1bmlmb3JtR3JvdXAgPSBnZXRVbmlmb3JtR3JvdXAobmFtZVRva2VucywgdW5pZm9ybXMpO1xuXG4gICAgICAgIHZhciB1bmlmb3JtID0gIHVuaWZvcm1EYXRhW2Z1bGxOYW1lXTtcbiAgICAgICAgdW5pZm9ybUdyb3VwLmRhdGFbbmFtZV0gPSB1bmlmb3JtO1xuXG4gICAgICAgIHVuaWZvcm1Hcm91cC5nbCA9IGdsO1xuXG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh1bmlmb3JtR3JvdXAsIG5hbWUsIHtcbiAgICAgICAgICAgIGdldDogZ2VuZXJhdGVHZXR0ZXIobmFtZSksXG4gICAgICAgICAgICBzZXQ6IGdlbmVyYXRlU2V0dGVyKG5hbWUsIHVuaWZvcm0pXG4gICAgICAgIH0pXG4gICAgfTtcblxuICAgIHJldHVybiB1bmlmb3Jtcztcbn1cblxudmFyIGdlbmVyYXRlR2V0dGVyID0gZnVuY3Rpb24obmFtZSlcbntcblx0dmFyIHRlbXBsYXRlID0gZ2V0dGVyVGVtcGxhdGUucmVwbGFjZSgnJSUnLCBuYW1lKTtcblx0cmV0dXJuIG5ldyBGdW5jdGlvbih0ZW1wbGF0ZSk7XG59XG5cbnZhciBnZW5lcmF0ZVNldHRlciA9IGZ1bmN0aW9uKG5hbWUsIHVuaWZvcm0pXG57XG4gICAgdmFyIHRlbXBsYXRlID0gc2V0dGVyVGVtcGxhdGUucmVwbGFjZSgvJSUvZywgbmFtZSk7XG4gICAgdmFyIHNldFRlbXBsYXRlXG4gICAgXG4gICAgaWYodW5pZm9ybS5zaXplID09PSAxKVxuICAgIHtcbiAgICAgICAgc2V0VGVtcGxhdGUgPSBHTFNMX1RPX1NJTkdMRV9TRVRURVJTW3VuaWZvcm0udHlwZV07XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHNldFRlbXBsYXRlID0gR0xTTF9UT19BUlJBWV9TRVRURVJTW3VuaWZvcm0udHlwZV07XG4gICAgfVxuXG4gICAgaWYoc2V0VGVtcGxhdGUpXG4gICAge1xuICAgICAgICB0ZW1wbGF0ZSArPSBcIlxcbnRoaXMuZ2wuXCIgKyBzZXRUZW1wbGF0ZSArIFwiO1wiO1xuICAgIH1cblxuICBcdHJldHVybiBuZXcgRnVuY3Rpb24oJ3ZhbHVlJywgdGVtcGxhdGUpO1xufVxuXG52YXIgZ2V0VW5pZm9ybUdyb3VwID0gZnVuY3Rpb24obmFtZVRva2VucywgdW5pZm9ybSlcbntcbiAgICB2YXIgY3VyID0gdW5pZm9ybTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbmFtZVRva2Vucy5sZW5ndGggLSAxOyBpKyspIFxuICAgIHtcbiAgICAgICAgdmFyIG8gPSBjdXJbbmFtZVRva2Vuc1tpXV0gfHwge2RhdGE6e319O1xuICAgICAgICBjdXJbbmFtZVRva2Vuc1tpXV0gPSBvO1xuICAgICAgICBjdXIgPSBvO1xuICAgIH07XG5cbiAgICByZXR1cm4gY3VyXG59XG5cbnZhciBnZXR0ZXJUZW1wbGF0ZSA9IFtcbiAgICAncmV0dXJuIHRoaXMuZGF0YS4lJS52YWx1ZTsnLFxuXS5qb2luKCdcXG4nKTtcblxudmFyIHNldHRlclRlbXBsYXRlID0gW1xuICAgICd0aGlzLmRhdGEuJSUudmFsdWUgPSB2YWx1ZTsnLFxuICAgICd2YXIgbG9jYXRpb24gPSB0aGlzLmRhdGEuJSUubG9jYXRpb247J1xuXS5qb2luKCdcXG4nKTtcblxuXG52YXIgR0xTTF9UT19TSU5HTEVfU0VUVEVSUyA9IHtcblxuICAgICdmbG9hdCc6ICAgICd1bmlmb3JtMWYobG9jYXRpb24sIHZhbHVlKScsXG5cbiAgICAndmVjMic6ICAgICAndW5pZm9ybTJmKGxvY2F0aW9uLCB2YWx1ZVswXSwgdmFsdWVbMV0pJyxcbiAgICAndmVjMyc6ICAgICAndW5pZm9ybTNmKGxvY2F0aW9uLCB2YWx1ZVswXSwgdmFsdWVbMV0sIHZhbHVlWzJdKScsXG4gICAgJ3ZlYzQnOiAgICAgJ3VuaWZvcm00Zihsb2NhdGlvbiwgdmFsdWVbMF0sIHZhbHVlWzFdLCB2YWx1ZVsyXSwgdmFsdWVbM10pJyxcbiAgICBcdFxuICAgICdpbnQnOiAgICAgICd1bmlmb3JtMWkobG9jYXRpb24sIHZhbHVlKScsXG4gICAgJ2l2ZWMyJzogICAgJ3VuaWZvcm0yaShsb2NhdGlvbiwgdmFsdWVbMF0sIHZhbHVlWzFdKScsXG4gICAgJ2l2ZWMzJzogICAgJ3VuaWZvcm0zaShsb2NhdGlvbiwgdmFsdWVbMF0sIHZhbHVlWzFdLCB2YWx1ZVsyXSknLFxuICAgICdpdmVjNCc6ICAgICd1bmlmb3JtNGkobG9jYXRpb24sIHZhbHVlWzBdLCB2YWx1ZVsxXSwgdmFsdWVbMl0sIHZhbHVlWzNdKScsXG5cbiAgICAnYm9vbCc6ICAgICAndW5pZm9ybTFpKGxvY2F0aW9uLCB2YWx1ZSknLFxuICAgICdidmVjMic6ICAgICd1bmlmb3JtMmkobG9jYXRpb24sIHZhbHVlWzBdLCB2YWx1ZVsxXSknLFxuICAgICdidmVjMyc6ICAgICd1bmlmb3JtM2kobG9jYXRpb24sIHZhbHVlWzBdLCB2YWx1ZVsxXSwgdmFsdWVbMl0pJyxcbiAgICAnYnZlYzQnOiAgICAndW5pZm9ybTRpKGxvY2F0aW9uLCB2YWx1ZVswXSwgdmFsdWVbMV0sIHZhbHVlWzJdLCB2YWx1ZVszXSknLFxuXG4gICAgJ21hdDInOiAgICAgJ3VuaWZvcm1NYXRyaXgyZnYobG9jYXRpb24sIGZhbHNlLCB2YWx1ZSknLFxuICAgICdtYXQzJzogICAgICd1bmlmb3JtTWF0cml4M2Z2KGxvY2F0aW9uLCBmYWxzZSwgdmFsdWUpJyxcbiAgICAnbWF0NCc6ICAgICAndW5pZm9ybU1hdHJpeDRmdihsb2NhdGlvbiwgZmFsc2UsIHZhbHVlKScsXG5cbiAgICAnc2FtcGxlcjJEJzondW5pZm9ybTFpKGxvY2F0aW9uLCB2YWx1ZSknXG59XG5cbnZhciBHTFNMX1RPX0FSUkFZX1NFVFRFUlMgPSB7XG5cbiAgICAnZmxvYXQnOiAgICAndW5pZm9ybTFmdihsb2NhdGlvbiwgdmFsdWUpJyxcblxuICAgICd2ZWMyJzogICAgICd1bmlmb3JtMmZ2KGxvY2F0aW9uLCB2YWx1ZSknLFxuICAgICd2ZWMzJzogICAgICd1bmlmb3JtM2Z2KGxvY2F0aW9uLCB2YWx1ZSknLFxuICAgICd2ZWM0JzogICAgICd1bmlmb3JtNGZ2KGxvY2F0aW9uLCB2YWx1ZSknLFxuICAgIFx0XG4gICAgJ2ludCc6ICAgICAgJ3VuaWZvcm0xaXYobG9jYXRpb24sIHZhbHVlKScsXG4gICAgJ2l2ZWMyJzogICAgJ3VuaWZvcm0yaXYobG9jYXRpb24sIHZhbHVlKScsXG4gICAgJ2l2ZWMzJzogICAgJ3VuaWZvcm0zaXYobG9jYXRpb24sIHZhbHVlKScsXG4gICAgJ2l2ZWM0JzogICAgJ3VuaWZvcm00aXYobG9jYXRpb24sIHZhbHVlKScsXG5cbiAgICAnYm9vbCc6ICAgICAndW5pZm9ybTFpdihsb2NhdGlvbiwgdmFsdWUpJyxcbiAgICAnYnZlYzInOiAgICAndW5pZm9ybTJpdihsb2NhdGlvbiwgdmFsdWUpJyxcbiAgICAnYnZlYzMnOiAgICAndW5pZm9ybTNpdihsb2NhdGlvbiwgdmFsdWUpJyxcbiAgICAnYnZlYzQnOiAgICAndW5pZm9ybTRpdihsb2NhdGlvbiwgdmFsdWUpJyxcbiAgIFxuICAgICdzYW1wbGVyMkQnOid1bmlmb3JtMWl2KGxvY2F0aW9uLCB2YWx1ZSknXG59XG5cbm1vZHVsZS5leHBvcnRzID0gZ2VuZXJhdGVVbmlmb3JtQWNjZXNzT2JqZWN0O1xuXG4iLCJcblxudmFyIG1hcFNpemUgPSBmdW5jdGlvbih0eXBlKSBcbnsgXG4gICAgcmV0dXJuIEdMU0xfVE9fU0laRVt0eXBlXTtcbn1cblxuXG52YXIgR0xTTF9UT19TSVpFID0ge1xuICAgICdmbG9hdCc6ICAgIDEsXG4gICAgJ3ZlYzInOiAgICAgMixcbiAgICAndmVjMyc6ICAgICAzLFxuICAgICd2ZWM0JzogICAgIDQsXG5cbiAgICAnaW50JzogICAgICAxLFxuICAgICdpdmVjMic6ICAgIDIsXG4gICAgJ2l2ZWMzJzogICAgMyxcbiAgICAnaXZlYzQnOiAgICA0LFxuXG4gICAgJ2Jvb2wnOiAgICAgMSxcbiAgICAnYnZlYzInOiAgICAyLFxuICAgICdidmVjMyc6ICAgIDMsXG4gICAgJ2J2ZWM0JzogICAgNCxcblxuICAgICdtYXQyJzogICAgIDQsXG4gICAgJ21hdDMnOiAgICAgOSxcbiAgICAnbWF0NCc6ICAgICAxNixcblxuICAgICdzYW1wbGVyMkQnOiAgMVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IG1hcFNpemU7XG4iLCJcblxudmFyIG1hcFNpemUgPSBmdW5jdGlvbihnbCwgdHlwZSkgXG57XG4gICAgaWYoIUdMX1RBQkxFKSBcbiAgICB7XG4gICAgICAgIHZhciB0eXBlTmFtZXMgPSBPYmplY3Qua2V5cyhHTF9UT19HTFNMX1RZUEVTKTtcblxuICAgICAgICBHTF9UQUJMRSA9IHt9O1xuXG4gICAgICAgIGZvcih2YXIgaSA9IDA7IGkgPCB0eXBlTmFtZXMubGVuZ3RoOyArK2kpIFxuICAgICAgICB7XG4gICAgICAgICAgICB2YXIgdG4gPSB0eXBlTmFtZXNbaV07XG4gICAgICAgICAgICBHTF9UQUJMRVsgZ2xbdG5dIF0gPSBHTF9UT19HTFNMX1RZUEVTW3RuXTtcbiAgICAgICAgfVxuICAgIH1cblxuICByZXR1cm4gR0xfVEFCTEVbdHlwZV07XG59XG5cbnZhciBHTF9UQUJMRSA9IG51bGw7XG5cbnZhciBHTF9UT19HTFNMX1RZUEVTID0ge1xuICAnRkxPQVQnOiAgICAgICAnZmxvYXQnLFxuICAnRkxPQVRfVkVDMic6ICAndmVjMicsXG4gICdGTE9BVF9WRUMzJzogICd2ZWMzJyxcbiAgJ0ZMT0FUX1ZFQzQnOiAgJ3ZlYzQnLFxuXG4gICdJTlQnOiAgICAgICAgICdpbnQnLFxuICAnSU5UX1ZFQzInOiAgICAnaXZlYzInLFxuICAnSU5UX1ZFQzMnOiAgICAnaXZlYzMnLFxuICAnSU5UX1ZFQzQnOiAgICAnaXZlYzQnLFxuICBcbiAgJ0JPT0wnOiAgICAgICAgJ2Jvb2wnLFxuICAnQk9PTF9WRUMyJzogICAnYnZlYzInLFxuICAnQk9PTF9WRUMzJzogICAnYnZlYzMnLFxuICAnQk9PTF9WRUM0JzogICAnYnZlYzQnLFxuICBcbiAgJ0ZMT0FUX01BVDInOiAgJ21hdDInLFxuICAnRkxPQVRfTUFUMyc6ICAnbWF0MycsXG4gICdGTE9BVF9NQVQ0JzogICdtYXQ0JyxcbiAgXG4gICdTQU1QTEVSXzJEJzogICdzYW1wbGVyMkQnICBcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBtYXBTaXplO1xuIiwiLyohXG4gKiBhc3luY1xuICogaHR0cHM6Ly9naXRodWIuY29tL2Nhb2xhbi9hc3luY1xuICpcbiAqIENvcHlyaWdodCAyMDEwLTIwMTQgQ2FvbGFuIE1jTWFob25cbiAqIFJlbGVhc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZVxuICovXG4oZnVuY3Rpb24gKCkge1xuXG4gICAgdmFyIGFzeW5jID0ge307XG4gICAgZnVuY3Rpb24gbm9vcCgpIHt9XG4gICAgZnVuY3Rpb24gaWRlbnRpdHkodikge1xuICAgICAgICByZXR1cm4gdjtcbiAgICB9XG4gICAgZnVuY3Rpb24gdG9Cb29sKHYpIHtcbiAgICAgICAgcmV0dXJuICEhdjtcbiAgICB9XG4gICAgZnVuY3Rpb24gbm90SWQodikge1xuICAgICAgICByZXR1cm4gIXY7XG4gICAgfVxuXG4gICAgLy8gZ2xvYmFsIG9uIHRoZSBzZXJ2ZXIsIHdpbmRvdyBpbiB0aGUgYnJvd3NlclxuICAgIHZhciBwcmV2aW91c19hc3luYztcblxuICAgIC8vIEVzdGFibGlzaCB0aGUgcm9vdCBvYmplY3QsIGB3aW5kb3dgIChgc2VsZmApIGluIHRoZSBicm93c2VyLCBgZ2xvYmFsYFxuICAgIC8vIG9uIHRoZSBzZXJ2ZXIsIG9yIGB0aGlzYCBpbiBzb21lIHZpcnR1YWwgbWFjaGluZXMuIFdlIHVzZSBgc2VsZmBcbiAgICAvLyBpbnN0ZWFkIG9mIGB3aW5kb3dgIGZvciBgV2ViV29ya2VyYCBzdXBwb3J0LlxuICAgIHZhciByb290ID0gdHlwZW9mIHNlbGYgPT09ICdvYmplY3QnICYmIHNlbGYuc2VsZiA9PT0gc2VsZiAmJiBzZWxmIHx8XG4gICAgICAgICAgICB0eXBlb2YgZ2xvYmFsID09PSAnb2JqZWN0JyAmJiBnbG9iYWwuZ2xvYmFsID09PSBnbG9iYWwgJiYgZ2xvYmFsIHx8XG4gICAgICAgICAgICB0aGlzO1xuXG4gICAgaWYgKHJvb3QgIT0gbnVsbCkge1xuICAgICAgICBwcmV2aW91c19hc3luYyA9IHJvb3QuYXN5bmM7XG4gICAgfVxuXG4gICAgYXN5bmMubm9Db25mbGljdCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcm9vdC5hc3luYyA9IHByZXZpb3VzX2FzeW5jO1xuICAgICAgICByZXR1cm4gYXN5bmM7XG4gICAgfTtcblxuICAgIGZ1bmN0aW9uIG9ubHlfb25jZShmbikge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICBpZiAoZm4gPT09IG51bGwpIHRocm93IG5ldyBFcnJvcihcIkNhbGxiYWNrIHdhcyBhbHJlYWR5IGNhbGxlZC5cIik7XG4gICAgICAgICAgICBmbi5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgICAgICAgICAgZm4gPSBudWxsO1xuICAgICAgICB9O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIF9vbmNlKGZuKSB7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIGlmIChmbiA9PT0gbnVsbCkgcmV0dXJuO1xuICAgICAgICAgICAgZm4uYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICAgICAgICAgIGZuID0gbnVsbDtcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICAvLy8vIGNyb3NzLWJyb3dzZXIgY29tcGF0aWJsaXR5IGZ1bmN0aW9ucyAvLy8vXG5cbiAgICB2YXIgX3RvU3RyaW5nID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZztcblxuICAgIHZhciBfaXNBcnJheSA9IEFycmF5LmlzQXJyYXkgfHwgZnVuY3Rpb24gKG9iaikge1xuICAgICAgICByZXR1cm4gX3RvU3RyaW5nLmNhbGwob2JqKSA9PT0gJ1tvYmplY3QgQXJyYXldJztcbiAgICB9O1xuXG4gICAgLy8gUG9ydGVkIGZyb20gdW5kZXJzY29yZS5qcyBpc09iamVjdFxuICAgIHZhciBfaXNPYmplY3QgPSBmdW5jdGlvbihvYmopIHtcbiAgICAgICAgdmFyIHR5cGUgPSB0eXBlb2Ygb2JqO1xuICAgICAgICByZXR1cm4gdHlwZSA9PT0gJ2Z1bmN0aW9uJyB8fCB0eXBlID09PSAnb2JqZWN0JyAmJiAhIW9iajtcbiAgICB9O1xuXG4gICAgZnVuY3Rpb24gX2lzQXJyYXlMaWtlKGFycikge1xuICAgICAgICByZXR1cm4gX2lzQXJyYXkoYXJyKSB8fCAoXG4gICAgICAgICAgICAvLyBoYXMgYSBwb3NpdGl2ZSBpbnRlZ2VyIGxlbmd0aCBwcm9wZXJ0eVxuICAgICAgICAgICAgdHlwZW9mIGFyci5sZW5ndGggPT09IFwibnVtYmVyXCIgJiZcbiAgICAgICAgICAgIGFyci5sZW5ndGggPj0gMCAmJlxuICAgICAgICAgICAgYXJyLmxlbmd0aCAlIDEgPT09IDBcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBfYXJyYXlFYWNoKGFyciwgaXRlcmF0b3IpIHtcbiAgICAgICAgdmFyIGluZGV4ID0gLTEsXG4gICAgICAgICAgICBsZW5ndGggPSBhcnIubGVuZ3RoO1xuXG4gICAgICAgIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgICAgICAgICBpdGVyYXRvcihhcnJbaW5kZXhdLCBpbmRleCwgYXJyKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIF9tYXAoYXJyLCBpdGVyYXRvcikge1xuICAgICAgICB2YXIgaW5kZXggPSAtMSxcbiAgICAgICAgICAgIGxlbmd0aCA9IGFyci5sZW5ndGgsXG4gICAgICAgICAgICByZXN1bHQgPSBBcnJheShsZW5ndGgpO1xuXG4gICAgICAgIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgICAgICAgICByZXN1bHRbaW5kZXhdID0gaXRlcmF0b3IoYXJyW2luZGV4XSwgaW5kZXgsIGFycik7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBfcmFuZ2UoY291bnQpIHtcbiAgICAgICAgcmV0dXJuIF9tYXAoQXJyYXkoY291bnQpLCBmdW5jdGlvbiAodiwgaSkgeyByZXR1cm4gaTsgfSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gX3JlZHVjZShhcnIsIGl0ZXJhdG9yLCBtZW1vKSB7XG4gICAgICAgIF9hcnJheUVhY2goYXJyLCBmdW5jdGlvbiAoeCwgaSwgYSkge1xuICAgICAgICAgICAgbWVtbyA9IGl0ZXJhdG9yKG1lbW8sIHgsIGksIGEpO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIG1lbW87XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gX2ZvckVhY2hPZihvYmplY3QsIGl0ZXJhdG9yKSB7XG4gICAgICAgIF9hcnJheUVhY2goX2tleXMob2JqZWN0KSwgZnVuY3Rpb24gKGtleSkge1xuICAgICAgICAgICAgaXRlcmF0b3Iob2JqZWN0W2tleV0sIGtleSk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIF9pbmRleE9mKGFyciwgaXRlbSkge1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFyci5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgaWYgKGFycltpXSA9PT0gaXRlbSkgcmV0dXJuIGk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIC0xO1xuICAgIH1cblxuICAgIHZhciBfa2V5cyA9IE9iamVjdC5rZXlzIHx8IGZ1bmN0aW9uIChvYmopIHtcbiAgICAgICAgdmFyIGtleXMgPSBbXTtcbiAgICAgICAgZm9yICh2YXIgayBpbiBvYmopIHtcbiAgICAgICAgICAgIGlmIChvYmouaGFzT3duUHJvcGVydHkoaykpIHtcbiAgICAgICAgICAgICAgICBrZXlzLnB1c2goayk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGtleXM7XG4gICAgfTtcblxuICAgIGZ1bmN0aW9uIF9rZXlJdGVyYXRvcihjb2xsKSB7XG4gICAgICAgIHZhciBpID0gLTE7XG4gICAgICAgIHZhciBsZW47XG4gICAgICAgIHZhciBrZXlzO1xuICAgICAgICBpZiAoX2lzQXJyYXlMaWtlKGNvbGwpKSB7XG4gICAgICAgICAgICBsZW4gPSBjb2xsLmxlbmd0aDtcbiAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbiBuZXh0KCkge1xuICAgICAgICAgICAgICAgIGkrKztcbiAgICAgICAgICAgICAgICByZXR1cm4gaSA8IGxlbiA/IGkgOiBudWxsO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGtleXMgPSBfa2V5cyhjb2xsKTtcbiAgICAgICAgICAgIGxlbiA9IGtleXMubGVuZ3RoO1xuICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIG5leHQoKSB7XG4gICAgICAgICAgICAgICAgaSsrO1xuICAgICAgICAgICAgICAgIHJldHVybiBpIDwgbGVuID8ga2V5c1tpXSA6IG51bGw7XG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gU2ltaWxhciB0byBFUzYncyByZXN0IHBhcmFtIChodHRwOi8vYXJpeWEub2ZpbGFicy5jb20vMjAxMy8wMy9lczYtYW5kLXJlc3QtcGFyYW1ldGVyLmh0bWwpXG4gICAgLy8gVGhpcyBhY2N1bXVsYXRlcyB0aGUgYXJndW1lbnRzIHBhc3NlZCBpbnRvIGFuIGFycmF5LCBhZnRlciBhIGdpdmVuIGluZGV4LlxuICAgIC8vIEZyb20gdW5kZXJzY29yZS5qcyAoaHR0cHM6Ly9naXRodWIuY29tL2phc2hrZW5hcy91bmRlcnNjb3JlL3B1bGwvMjE0MCkuXG4gICAgZnVuY3Rpb24gX3Jlc3RQYXJhbShmdW5jLCBzdGFydEluZGV4KSB7XG4gICAgICAgIHN0YXJ0SW5kZXggPSBzdGFydEluZGV4ID09IG51bGwgPyBmdW5jLmxlbmd0aCAtIDEgOiArc3RhcnRJbmRleDtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgdmFyIGxlbmd0aCA9IE1hdGgubWF4KGFyZ3VtZW50cy5sZW5ndGggLSBzdGFydEluZGV4LCAwKTtcbiAgICAgICAgICAgIHZhciByZXN0ID0gQXJyYXkobGVuZ3RoKTtcbiAgICAgICAgICAgIGZvciAodmFyIGluZGV4ID0gMDsgaW5kZXggPCBsZW5ndGg7IGluZGV4KyspIHtcbiAgICAgICAgICAgICAgICByZXN0W2luZGV4XSA9IGFyZ3VtZW50c1tpbmRleCArIHN0YXJ0SW5kZXhdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgc3dpdGNoIChzdGFydEluZGV4KSB7XG4gICAgICAgICAgICAgICAgY2FzZSAwOiByZXR1cm4gZnVuYy5jYWxsKHRoaXMsIHJlc3QpO1xuICAgICAgICAgICAgICAgIGNhc2UgMTogcmV0dXJuIGZ1bmMuY2FsbCh0aGlzLCBhcmd1bWVudHNbMF0sIHJlc3QpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gQ3VycmVudGx5IHVudXNlZCBidXQgaGFuZGxlIGNhc2VzIG91dHNpZGUgb2YgdGhlIHN3aXRjaCBzdGF0ZW1lbnQ6XG4gICAgICAgICAgICAvLyB2YXIgYXJncyA9IEFycmF5KHN0YXJ0SW5kZXggKyAxKTtcbiAgICAgICAgICAgIC8vIGZvciAoaW5kZXggPSAwOyBpbmRleCA8IHN0YXJ0SW5kZXg7IGluZGV4KyspIHtcbiAgICAgICAgICAgIC8vICAgICBhcmdzW2luZGV4XSA9IGFyZ3VtZW50c1tpbmRleF07XG4gICAgICAgICAgICAvLyB9XG4gICAgICAgICAgICAvLyBhcmdzW3N0YXJ0SW5kZXhdID0gcmVzdDtcbiAgICAgICAgICAgIC8vIHJldHVybiBmdW5jLmFwcGx5KHRoaXMsIGFyZ3MpO1xuICAgICAgICB9O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIF93aXRob3V0SW5kZXgoaXRlcmF0b3IpIHtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICh2YWx1ZSwgaW5kZXgsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICByZXR1cm4gaXRlcmF0b3IodmFsdWUsIGNhbGxiYWNrKTtcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICAvLy8vIGV4cG9ydGVkIGFzeW5jIG1vZHVsZSBmdW5jdGlvbnMgLy8vL1xuXG4gICAgLy8vLyBuZXh0VGljayBpbXBsZW1lbnRhdGlvbiB3aXRoIGJyb3dzZXItY29tcGF0aWJsZSBmYWxsYmFjayAvLy8vXG5cbiAgICAvLyBjYXB0dXJlIHRoZSBnbG9iYWwgcmVmZXJlbmNlIHRvIGd1YXJkIGFnYWluc3QgZmFrZVRpbWVyIG1vY2tzXG4gICAgdmFyIF9zZXRJbW1lZGlhdGUgPSB0eXBlb2Ygc2V0SW1tZWRpYXRlID09PSAnZnVuY3Rpb24nICYmIHNldEltbWVkaWF0ZTtcblxuICAgIHZhciBfZGVsYXkgPSBfc2V0SW1tZWRpYXRlID8gZnVuY3Rpb24oZm4pIHtcbiAgICAgICAgLy8gbm90IGEgZGlyZWN0IGFsaWFzIGZvciBJRTEwIGNvbXBhdGliaWxpdHlcbiAgICAgICAgX3NldEltbWVkaWF0ZShmbik7XG4gICAgfSA6IGZ1bmN0aW9uKGZuKSB7XG4gICAgICAgIHNldFRpbWVvdXQoZm4sIDApO1xuICAgIH07XG5cbiAgICBpZiAodHlwZW9mIHByb2Nlc3MgPT09ICdvYmplY3QnICYmIHR5cGVvZiBwcm9jZXNzLm5leHRUaWNrID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIGFzeW5jLm5leHRUaWNrID0gcHJvY2Vzcy5uZXh0VGljaztcbiAgICB9IGVsc2Uge1xuICAgICAgICBhc3luYy5uZXh0VGljayA9IF9kZWxheTtcbiAgICB9XG4gICAgYXN5bmMuc2V0SW1tZWRpYXRlID0gX3NldEltbWVkaWF0ZSA/IF9kZWxheSA6IGFzeW5jLm5leHRUaWNrO1xuXG5cbiAgICBhc3luYy5mb3JFYWNoID1cbiAgICBhc3luYy5lYWNoID0gZnVuY3Rpb24gKGFyciwgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgIHJldHVybiBhc3luYy5lYWNoT2YoYXJyLCBfd2l0aG91dEluZGV4KGl0ZXJhdG9yKSwgY2FsbGJhY2spO1xuICAgIH07XG5cbiAgICBhc3luYy5mb3JFYWNoU2VyaWVzID1cbiAgICBhc3luYy5lYWNoU2VyaWVzID0gZnVuY3Rpb24gKGFyciwgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgIHJldHVybiBhc3luYy5lYWNoT2ZTZXJpZXMoYXJyLCBfd2l0aG91dEluZGV4KGl0ZXJhdG9yKSwgY2FsbGJhY2spO1xuICAgIH07XG5cblxuICAgIGFzeW5jLmZvckVhY2hMaW1pdCA9XG4gICAgYXN5bmMuZWFjaExpbWl0ID0gZnVuY3Rpb24gKGFyciwgbGltaXQsIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICByZXR1cm4gX2VhY2hPZkxpbWl0KGxpbWl0KShhcnIsIF93aXRob3V0SW5kZXgoaXRlcmF0b3IpLCBjYWxsYmFjayk7XG4gICAgfTtcblxuICAgIGFzeW5jLmZvckVhY2hPZiA9XG4gICAgYXN5bmMuZWFjaE9mID0gZnVuY3Rpb24gKG9iamVjdCwgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgIGNhbGxiYWNrID0gX29uY2UoY2FsbGJhY2sgfHwgbm9vcCk7XG4gICAgICAgIG9iamVjdCA9IG9iamVjdCB8fCBbXTtcblxuICAgICAgICB2YXIgaXRlciA9IF9rZXlJdGVyYXRvcihvYmplY3QpO1xuICAgICAgICB2YXIga2V5LCBjb21wbGV0ZWQgPSAwO1xuXG4gICAgICAgIHdoaWxlICgoa2V5ID0gaXRlcigpKSAhPSBudWxsKSB7XG4gICAgICAgICAgICBjb21wbGV0ZWQgKz0gMTtcbiAgICAgICAgICAgIGl0ZXJhdG9yKG9iamVjdFtrZXldLCBrZXksIG9ubHlfb25jZShkb25lKSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoY29tcGxldGVkID09PSAwKSBjYWxsYmFjayhudWxsKTtcblxuICAgICAgICBmdW5jdGlvbiBkb25lKGVycikge1xuICAgICAgICAgICAgY29tcGxldGVkLS07XG4gICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIENoZWNrIGtleSBpcyBudWxsIGluIGNhc2UgaXRlcmF0b3IgaXNuJ3QgZXhoYXVzdGVkXG4gICAgICAgICAgICAvLyBhbmQgZG9uZSByZXNvbHZlZCBzeW5jaHJvbm91c2x5LlxuICAgICAgICAgICAgZWxzZSBpZiAoa2V5ID09PSBudWxsICYmIGNvbXBsZXRlZCA8PSAwKSB7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2sobnVsbCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgYXN5bmMuZm9yRWFjaE9mU2VyaWVzID1cbiAgICBhc3luYy5lYWNoT2ZTZXJpZXMgPSBmdW5jdGlvbiAob2JqLCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgY2FsbGJhY2sgPSBfb25jZShjYWxsYmFjayB8fCBub29wKTtcbiAgICAgICAgb2JqID0gb2JqIHx8IFtdO1xuICAgICAgICB2YXIgbmV4dEtleSA9IF9rZXlJdGVyYXRvcihvYmopO1xuICAgICAgICB2YXIga2V5ID0gbmV4dEtleSgpO1xuICAgICAgICBmdW5jdGlvbiBpdGVyYXRlKCkge1xuICAgICAgICAgICAgdmFyIHN5bmMgPSB0cnVlO1xuICAgICAgICAgICAgaWYgKGtleSA9PT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBjYWxsYmFjayhudWxsKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGl0ZXJhdG9yKG9ialtrZXldLCBrZXksIG9ubHlfb25jZShmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAga2V5ID0gbmV4dEtleSgpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoa2V5ID09PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gY2FsbGJhY2sobnVsbCk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3luYykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFzeW5jLnNldEltbWVkaWF0ZShpdGVyYXRlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlcmF0ZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSkpO1xuICAgICAgICAgICAgc3luYyA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGl0ZXJhdGUoKTtcbiAgICB9O1xuXG5cblxuICAgIGFzeW5jLmZvckVhY2hPZkxpbWl0ID1cbiAgICBhc3luYy5lYWNoT2ZMaW1pdCA9IGZ1bmN0aW9uIChvYmosIGxpbWl0LCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgX2VhY2hPZkxpbWl0KGxpbWl0KShvYmosIGl0ZXJhdG9yLCBjYWxsYmFjayk7XG4gICAgfTtcblxuICAgIGZ1bmN0aW9uIF9lYWNoT2ZMaW1pdChsaW1pdCkge1xuXG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAob2JqLCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIGNhbGxiYWNrID0gX29uY2UoY2FsbGJhY2sgfHwgbm9vcCk7XG4gICAgICAgICAgICBvYmogPSBvYmogfHwgW107XG4gICAgICAgICAgICB2YXIgbmV4dEtleSA9IF9rZXlJdGVyYXRvcihvYmopO1xuICAgICAgICAgICAgaWYgKGxpbWl0IDw9IDApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gY2FsbGJhY2sobnVsbCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB2YXIgZG9uZSA9IGZhbHNlO1xuICAgICAgICAgICAgdmFyIHJ1bm5pbmcgPSAwO1xuICAgICAgICAgICAgdmFyIGVycm9yZWQgPSBmYWxzZTtcblxuICAgICAgICAgICAgKGZ1bmN0aW9uIHJlcGxlbmlzaCAoKSB7XG4gICAgICAgICAgICAgICAgaWYgKGRvbmUgJiYgcnVubmluZyA8PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBjYWxsYmFjayhudWxsKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB3aGlsZSAocnVubmluZyA8IGxpbWl0ICYmICFlcnJvcmVkKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBrZXkgPSBuZXh0S2V5KCk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChrZXkgPT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRvbmUgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJ1bm5pbmcgPD0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKG51bGwpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJ1bm5pbmcgKz0gMTtcbiAgICAgICAgICAgICAgICAgICAgaXRlcmF0b3Iob2JqW2tleV0sIGtleSwgb25seV9vbmNlKGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJ1bm5pbmcgLT0gMTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVwbGVuaXNoKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KSgpO1xuICAgICAgICB9O1xuICAgIH1cblxuXG4gICAgZnVuY3Rpb24gZG9QYXJhbGxlbChmbikge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKG9iaiwgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICByZXR1cm4gZm4oYXN5bmMuZWFjaE9mLCBvYmosIGl0ZXJhdG9yLCBjYWxsYmFjayk7XG4gICAgICAgIH07XG4gICAgfVxuICAgIGZ1bmN0aW9uIGRvUGFyYWxsZWxMaW1pdChmbikge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKG9iaiwgbGltaXQsIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICAgICAgcmV0dXJuIGZuKF9lYWNoT2ZMaW1pdChsaW1pdCksIG9iaiwgaXRlcmF0b3IsIGNhbGxiYWNrKTtcbiAgICAgICAgfTtcbiAgICB9XG4gICAgZnVuY3Rpb24gZG9TZXJpZXMoZm4pIHtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChvYmosIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICAgICAgcmV0dXJuIGZuKGFzeW5jLmVhY2hPZlNlcmllcywgb2JqLCBpdGVyYXRvciwgY2FsbGJhY2spO1xuICAgICAgICB9O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIF9hc3luY01hcChlYWNoZm4sIGFyciwgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgIGNhbGxiYWNrID0gX29uY2UoY2FsbGJhY2sgfHwgbm9vcCk7XG4gICAgICAgIGFyciA9IGFyciB8fCBbXTtcbiAgICAgICAgdmFyIHJlc3VsdHMgPSBfaXNBcnJheUxpa2UoYXJyKSA/IFtdIDoge307XG4gICAgICAgIGVhY2hmbihhcnIsIGZ1bmN0aW9uICh2YWx1ZSwgaW5kZXgsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICBpdGVyYXRvcih2YWx1ZSwgZnVuY3Rpb24gKGVyciwgdikge1xuICAgICAgICAgICAgICAgIHJlc3VsdHNbaW5kZXhdID0gdjtcbiAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgIGNhbGxiYWNrKGVyciwgcmVzdWx0cyk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGFzeW5jLm1hcCA9IGRvUGFyYWxsZWwoX2FzeW5jTWFwKTtcbiAgICBhc3luYy5tYXBTZXJpZXMgPSBkb1NlcmllcyhfYXN5bmNNYXApO1xuICAgIGFzeW5jLm1hcExpbWl0ID0gZG9QYXJhbGxlbExpbWl0KF9hc3luY01hcCk7XG5cbiAgICAvLyByZWR1Y2Ugb25seSBoYXMgYSBzZXJpZXMgdmVyc2lvbiwgYXMgZG9pbmcgcmVkdWNlIGluIHBhcmFsbGVsIHdvbid0XG4gICAgLy8gd29yayBpbiBtYW55IHNpdHVhdGlvbnMuXG4gICAgYXN5bmMuaW5qZWN0ID1cbiAgICBhc3luYy5mb2xkbCA9XG4gICAgYXN5bmMucmVkdWNlID0gZnVuY3Rpb24gKGFyciwgbWVtbywgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgIGFzeW5jLmVhY2hPZlNlcmllcyhhcnIsIGZ1bmN0aW9uICh4LCBpLCBjYWxsYmFjaykge1xuICAgICAgICAgICAgaXRlcmF0b3IobWVtbywgeCwgZnVuY3Rpb24gKGVyciwgdikge1xuICAgICAgICAgICAgICAgIG1lbW8gPSB2O1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSwgZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgY2FsbGJhY2soZXJyLCBtZW1vKTtcbiAgICAgICAgfSk7XG4gICAgfTtcblxuICAgIGFzeW5jLmZvbGRyID1cbiAgICBhc3luYy5yZWR1Y2VSaWdodCA9IGZ1bmN0aW9uIChhcnIsIG1lbW8sIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICB2YXIgcmV2ZXJzZWQgPSBfbWFwKGFyciwgaWRlbnRpdHkpLnJldmVyc2UoKTtcbiAgICAgICAgYXN5bmMucmVkdWNlKHJldmVyc2VkLCBtZW1vLCBpdGVyYXRvciwgY2FsbGJhY2spO1xuICAgIH07XG5cbiAgICBhc3luYy50cmFuc2Zvcm0gPSBmdW5jdGlvbiAoYXJyLCBtZW1vLCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDMpIHtcbiAgICAgICAgICAgIGNhbGxiYWNrID0gaXRlcmF0b3I7XG4gICAgICAgICAgICBpdGVyYXRvciA9IG1lbW87XG4gICAgICAgICAgICBtZW1vID0gX2lzQXJyYXkoYXJyKSA/IFtdIDoge307XG4gICAgICAgIH1cblxuICAgICAgICBhc3luYy5lYWNoT2YoYXJyLCBmdW5jdGlvbih2LCBrLCBjYikge1xuICAgICAgICAgICAgaXRlcmF0b3IobWVtbywgdiwgaywgY2IpO1xuICAgICAgICB9LCBmdW5jdGlvbihlcnIpIHtcbiAgICAgICAgICAgIGNhbGxiYWNrKGVyciwgbWVtbyk7XG4gICAgICAgIH0pO1xuICAgIH07XG5cbiAgICBmdW5jdGlvbiBfZmlsdGVyKGVhY2hmbiwgYXJyLCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgdmFyIHJlc3VsdHMgPSBbXTtcbiAgICAgICAgZWFjaGZuKGFyciwgZnVuY3Rpb24gKHgsIGluZGV4LCBjYWxsYmFjaykge1xuICAgICAgICAgICAgaXRlcmF0b3IoeCwgZnVuY3Rpb24gKHYpIHtcbiAgICAgICAgICAgICAgICBpZiAodikge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHRzLnB1c2goe2luZGV4OiBpbmRleCwgdmFsdWU6IHh9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2FsbGJhY2soKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBjYWxsYmFjayhfbWFwKHJlc3VsdHMuc29ydChmdW5jdGlvbiAoYSwgYikge1xuICAgICAgICAgICAgICAgIHJldHVybiBhLmluZGV4IC0gYi5pbmRleDtcbiAgICAgICAgICAgIH0pLCBmdW5jdGlvbiAoeCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB4LnZhbHVlO1xuICAgICAgICAgICAgfSkpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBhc3luYy5zZWxlY3QgPVxuICAgIGFzeW5jLmZpbHRlciA9IGRvUGFyYWxsZWwoX2ZpbHRlcik7XG5cbiAgICBhc3luYy5zZWxlY3RMaW1pdCA9XG4gICAgYXN5bmMuZmlsdGVyTGltaXQgPSBkb1BhcmFsbGVsTGltaXQoX2ZpbHRlcik7XG5cbiAgICBhc3luYy5zZWxlY3RTZXJpZXMgPVxuICAgIGFzeW5jLmZpbHRlclNlcmllcyA9IGRvU2VyaWVzKF9maWx0ZXIpO1xuXG4gICAgZnVuY3Rpb24gX3JlamVjdChlYWNoZm4sIGFyciwgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgIF9maWx0ZXIoZWFjaGZuLCBhcnIsIGZ1bmN0aW9uKHZhbHVlLCBjYikge1xuICAgICAgICAgICAgaXRlcmF0b3IodmFsdWUsIGZ1bmN0aW9uKHYpIHtcbiAgICAgICAgICAgICAgICBjYighdik7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSwgY2FsbGJhY2spO1xuICAgIH1cbiAgICBhc3luYy5yZWplY3QgPSBkb1BhcmFsbGVsKF9yZWplY3QpO1xuICAgIGFzeW5jLnJlamVjdExpbWl0ID0gZG9QYXJhbGxlbExpbWl0KF9yZWplY3QpO1xuICAgIGFzeW5jLnJlamVjdFNlcmllcyA9IGRvU2VyaWVzKF9yZWplY3QpO1xuXG4gICAgZnVuY3Rpb24gX2NyZWF0ZVRlc3RlcihlYWNoZm4sIGNoZWNrLCBnZXRSZXN1bHQpIHtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKGFyciwgbGltaXQsIGl0ZXJhdG9yLCBjYikge1xuICAgICAgICAgICAgZnVuY3Rpb24gZG9uZSgpIHtcbiAgICAgICAgICAgICAgICBpZiAoY2IpIGNiKGdldFJlc3VsdChmYWxzZSwgdm9pZCAwKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmdW5jdGlvbiBpdGVyYXRlZSh4LCBfLCBjYWxsYmFjaykge1xuICAgICAgICAgICAgICAgIGlmICghY2IpIHJldHVybiBjYWxsYmFjaygpO1xuICAgICAgICAgICAgICAgIGl0ZXJhdG9yKHgsIGZ1bmN0aW9uICh2KSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChjYiAmJiBjaGVjayh2KSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY2IoZ2V0UmVzdWx0KHRydWUsIHgpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNiID0gaXRlcmF0b3IgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPiAzKSB7XG4gICAgICAgICAgICAgICAgZWFjaGZuKGFyciwgbGltaXQsIGl0ZXJhdGVlLCBkb25lKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgY2IgPSBpdGVyYXRvcjtcbiAgICAgICAgICAgICAgICBpdGVyYXRvciA9IGxpbWl0O1xuICAgICAgICAgICAgICAgIGVhY2hmbihhcnIsIGl0ZXJhdGVlLCBkb25lKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBhc3luYy5hbnkgPVxuICAgIGFzeW5jLnNvbWUgPSBfY3JlYXRlVGVzdGVyKGFzeW5jLmVhY2hPZiwgdG9Cb29sLCBpZGVudGl0eSk7XG5cbiAgICBhc3luYy5zb21lTGltaXQgPSBfY3JlYXRlVGVzdGVyKGFzeW5jLmVhY2hPZkxpbWl0LCB0b0Jvb2wsIGlkZW50aXR5KTtcblxuICAgIGFzeW5jLmFsbCA9XG4gICAgYXN5bmMuZXZlcnkgPSBfY3JlYXRlVGVzdGVyKGFzeW5jLmVhY2hPZiwgbm90SWQsIG5vdElkKTtcblxuICAgIGFzeW5jLmV2ZXJ5TGltaXQgPSBfY3JlYXRlVGVzdGVyKGFzeW5jLmVhY2hPZkxpbWl0LCBub3RJZCwgbm90SWQpO1xuXG4gICAgZnVuY3Rpb24gX2ZpbmRHZXRSZXN1bHQodiwgeCkge1xuICAgICAgICByZXR1cm4geDtcbiAgICB9XG4gICAgYXN5bmMuZGV0ZWN0ID0gX2NyZWF0ZVRlc3Rlcihhc3luYy5lYWNoT2YsIGlkZW50aXR5LCBfZmluZEdldFJlc3VsdCk7XG4gICAgYXN5bmMuZGV0ZWN0U2VyaWVzID0gX2NyZWF0ZVRlc3Rlcihhc3luYy5lYWNoT2ZTZXJpZXMsIGlkZW50aXR5LCBfZmluZEdldFJlc3VsdCk7XG4gICAgYXN5bmMuZGV0ZWN0TGltaXQgPSBfY3JlYXRlVGVzdGVyKGFzeW5jLmVhY2hPZkxpbWl0LCBpZGVudGl0eSwgX2ZpbmRHZXRSZXN1bHQpO1xuXG4gICAgYXN5bmMuc29ydEJ5ID0gZnVuY3Rpb24gKGFyciwgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgIGFzeW5jLm1hcChhcnIsIGZ1bmN0aW9uICh4LCBjYWxsYmFjaykge1xuICAgICAgICAgICAgaXRlcmF0b3IoeCwgZnVuY3Rpb24gKGVyciwgY3JpdGVyaWEpIHtcbiAgICAgICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhudWxsLCB7dmFsdWU6IHgsIGNyaXRlcmlhOiBjcml0ZXJpYX0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LCBmdW5jdGlvbiAoZXJyLCByZXN1bHRzKSB7XG4gICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBjYWxsYmFjayhudWxsLCBfbWFwKHJlc3VsdHMuc29ydChjb21wYXJhdG9yKSwgZnVuY3Rpb24gKHgpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHgudmFsdWU7XG4gICAgICAgICAgICAgICAgfSkpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGZ1bmN0aW9uIGNvbXBhcmF0b3IobGVmdCwgcmlnaHQpIHtcbiAgICAgICAgICAgIHZhciBhID0gbGVmdC5jcml0ZXJpYSwgYiA9IHJpZ2h0LmNyaXRlcmlhO1xuICAgICAgICAgICAgcmV0dXJuIGEgPCBiID8gLTEgOiBhID4gYiA/IDEgOiAwO1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIGFzeW5jLmF1dG8gPSBmdW5jdGlvbiAodGFza3MsIGNvbmN1cnJlbmN5LCBjYWxsYmFjaykge1xuICAgICAgICBpZiAoIWNhbGxiYWNrKSB7XG4gICAgICAgICAgICAvLyBjb25jdXJyZW5jeSBpcyBvcHRpb25hbCwgc2hpZnQgdGhlIGFyZ3MuXG4gICAgICAgICAgICBjYWxsYmFjayA9IGNvbmN1cnJlbmN5O1xuICAgICAgICAgICAgY29uY3VycmVuY3kgPSBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGNhbGxiYWNrID0gX29uY2UoY2FsbGJhY2sgfHwgbm9vcCk7XG4gICAgICAgIHZhciBrZXlzID0gX2tleXModGFza3MpO1xuICAgICAgICB2YXIgcmVtYWluaW5nVGFza3MgPSBrZXlzLmxlbmd0aDtcbiAgICAgICAgaWYgKCFyZW1haW5pbmdUYXNrcykge1xuICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKG51bGwpO1xuICAgICAgICB9XG4gICAgICAgIGlmICghY29uY3VycmVuY3kpIHtcbiAgICAgICAgICAgIGNvbmN1cnJlbmN5ID0gcmVtYWluaW5nVGFza3M7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgcmVzdWx0cyA9IHt9O1xuICAgICAgICB2YXIgcnVubmluZ1Rhc2tzID0gMDtcblxuICAgICAgICB2YXIgbGlzdGVuZXJzID0gW107XG4gICAgICAgIGZ1bmN0aW9uIGFkZExpc3RlbmVyKGZuKSB7XG4gICAgICAgICAgICBsaXN0ZW5lcnMudW5zaGlmdChmbik7XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gcmVtb3ZlTGlzdGVuZXIoZm4pIHtcbiAgICAgICAgICAgIHZhciBpZHggPSBfaW5kZXhPZihsaXN0ZW5lcnMsIGZuKTtcbiAgICAgICAgICAgIGlmIChpZHggPj0gMCkgbGlzdGVuZXJzLnNwbGljZShpZHgsIDEpO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIHRhc2tDb21wbGV0ZSgpIHtcbiAgICAgICAgICAgIHJlbWFpbmluZ1Rhc2tzLS07XG4gICAgICAgICAgICBfYXJyYXlFYWNoKGxpc3RlbmVycy5zbGljZSgwKSwgZnVuY3Rpb24gKGZuKSB7XG4gICAgICAgICAgICAgICAgZm4oKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgYWRkTGlzdGVuZXIoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgaWYgKCFyZW1haW5pbmdUYXNrcykge1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrKG51bGwsIHJlc3VsdHMpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICBfYXJyYXlFYWNoKGtleXMsIGZ1bmN0aW9uIChrKSB7XG4gICAgICAgICAgICB2YXIgdGFzayA9IF9pc0FycmF5KHRhc2tzW2tdKSA/IHRhc2tzW2tdOiBbdGFza3Nba11dO1xuICAgICAgICAgICAgdmFyIHRhc2tDYWxsYmFjayA9IF9yZXN0UGFyYW0oZnVuY3Rpb24oZXJyLCBhcmdzKSB7XG4gICAgICAgICAgICAgICAgcnVubmluZ1Rhc2tzLS07XG4gICAgICAgICAgICAgICAgaWYgKGFyZ3MubGVuZ3RoIDw9IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgYXJncyA9IGFyZ3NbMF07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHNhZmVSZXN1bHRzID0ge307XG4gICAgICAgICAgICAgICAgICAgIF9mb3JFYWNoT2YocmVzdWx0cywgZnVuY3Rpb24odmFsLCBya2V5KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzYWZlUmVzdWx0c1tya2V5XSA9IHZhbDtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIHNhZmVSZXN1bHRzW2tdID0gYXJncztcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soZXJyLCBzYWZlUmVzdWx0cyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHRzW2tdID0gYXJncztcbiAgICAgICAgICAgICAgICAgICAgYXN5bmMuc2V0SW1tZWRpYXRlKHRhc2tDb21wbGV0ZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB2YXIgcmVxdWlyZXMgPSB0YXNrLnNsaWNlKDAsIHRhc2subGVuZ3RoIC0gMSk7XG4gICAgICAgICAgICAvLyBwcmV2ZW50IGRlYWQtbG9ja3NcbiAgICAgICAgICAgIHZhciBsZW4gPSByZXF1aXJlcy5sZW5ndGg7XG4gICAgICAgICAgICB2YXIgZGVwO1xuICAgICAgICAgICAgd2hpbGUgKGxlbi0tKSB7XG4gICAgICAgICAgICAgICAgaWYgKCEoZGVwID0gdGFza3NbcmVxdWlyZXNbbGVuXV0pKSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignSGFzIGluZXhpc3RhbnQgZGVwZW5kZW5jeScpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoX2lzQXJyYXkoZGVwKSAmJiBfaW5kZXhPZihkZXAsIGspID49IDApIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdIYXMgY3ljbGljIGRlcGVuZGVuY2llcycpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZ1bmN0aW9uIHJlYWR5KCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBydW5uaW5nVGFza3MgPCBjb25jdXJyZW5jeSAmJiBfcmVkdWNlKHJlcXVpcmVzLCBmdW5jdGlvbiAoYSwgeCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gKGEgJiYgcmVzdWx0cy5oYXNPd25Qcm9wZXJ0eSh4KSk7XG4gICAgICAgICAgICAgICAgfSwgdHJ1ZSkgJiYgIXJlc3VsdHMuaGFzT3duUHJvcGVydHkoayk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAocmVhZHkoKSkge1xuICAgICAgICAgICAgICAgIHJ1bm5pbmdUYXNrcysrO1xuICAgICAgICAgICAgICAgIHRhc2tbdGFzay5sZW5ndGggLSAxXSh0YXNrQ2FsbGJhY2ssIHJlc3VsdHMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgYWRkTGlzdGVuZXIobGlzdGVuZXIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZnVuY3Rpb24gbGlzdGVuZXIoKSB7XG4gICAgICAgICAgICAgICAgaWYgKHJlYWR5KCkpIHtcbiAgICAgICAgICAgICAgICAgICAgcnVubmluZ1Rhc2tzKys7XG4gICAgICAgICAgICAgICAgICAgIHJlbW92ZUxpc3RlbmVyKGxpc3RlbmVyKTtcbiAgICAgICAgICAgICAgICAgICAgdGFza1t0YXNrLmxlbmd0aCAtIDFdKHRhc2tDYWxsYmFjaywgcmVzdWx0cyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9O1xuXG5cblxuICAgIGFzeW5jLnJldHJ5ID0gZnVuY3Rpb24odGltZXMsIHRhc2ssIGNhbGxiYWNrKSB7XG4gICAgICAgIHZhciBERUZBVUxUX1RJTUVTID0gNTtcbiAgICAgICAgdmFyIERFRkFVTFRfSU5URVJWQUwgPSAwO1xuXG4gICAgICAgIHZhciBhdHRlbXB0cyA9IFtdO1xuXG4gICAgICAgIHZhciBvcHRzID0ge1xuICAgICAgICAgICAgdGltZXM6IERFRkFVTFRfVElNRVMsXG4gICAgICAgICAgICBpbnRlcnZhbDogREVGQVVMVF9JTlRFUlZBTFxuICAgICAgICB9O1xuXG4gICAgICAgIGZ1bmN0aW9uIHBhcnNlVGltZXMoYWNjLCB0KXtcbiAgICAgICAgICAgIGlmKHR5cGVvZiB0ID09PSAnbnVtYmVyJyl7XG4gICAgICAgICAgICAgICAgYWNjLnRpbWVzID0gcGFyc2VJbnQodCwgMTApIHx8IERFRkFVTFRfVElNRVM7XG4gICAgICAgICAgICB9IGVsc2UgaWYodHlwZW9mIHQgPT09ICdvYmplY3QnKXtcbiAgICAgICAgICAgICAgICBhY2MudGltZXMgPSBwYXJzZUludCh0LnRpbWVzLCAxMCkgfHwgREVGQVVMVF9USU1FUztcbiAgICAgICAgICAgICAgICBhY2MuaW50ZXJ2YWwgPSBwYXJzZUludCh0LmludGVydmFsLCAxMCkgfHwgREVGQVVMVF9JTlRFUlZBTDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdVbnN1cHBvcnRlZCBhcmd1bWVudCB0eXBlIGZvciBcXCd0aW1lc1xcJzogJyArIHR5cGVvZiB0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBsZW5ndGggPSBhcmd1bWVudHMubGVuZ3RoO1xuICAgICAgICBpZiAobGVuZ3RoIDwgMSB8fCBsZW5ndGggPiAzKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgYXJndW1lbnRzIC0gbXVzdCBiZSBlaXRoZXIgKHRhc2spLCAodGFzaywgY2FsbGJhY2spLCAodGltZXMsIHRhc2spIG9yICh0aW1lcywgdGFzaywgY2FsbGJhY2spJyk7XG4gICAgICAgIH0gZWxzZSBpZiAobGVuZ3RoIDw9IDIgJiYgdHlwZW9mIHRpbWVzID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICBjYWxsYmFjayA9IHRhc2s7XG4gICAgICAgICAgICB0YXNrID0gdGltZXM7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHR5cGVvZiB0aW1lcyAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgcGFyc2VUaW1lcyhvcHRzLCB0aW1lcyk7XG4gICAgICAgIH1cbiAgICAgICAgb3B0cy5jYWxsYmFjayA9IGNhbGxiYWNrO1xuICAgICAgICBvcHRzLnRhc2sgPSB0YXNrO1xuXG4gICAgICAgIGZ1bmN0aW9uIHdyYXBwZWRUYXNrKHdyYXBwZWRDYWxsYmFjaywgd3JhcHBlZFJlc3VsdHMpIHtcbiAgICAgICAgICAgIGZ1bmN0aW9uIHJldHJ5QXR0ZW1wdCh0YXNrLCBmaW5hbEF0dGVtcHQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24oc2VyaWVzQ2FsbGJhY2spIHtcbiAgICAgICAgICAgICAgICAgICAgdGFzayhmdW5jdGlvbihlcnIsIHJlc3VsdCl7XG4gICAgICAgICAgICAgICAgICAgICAgICBzZXJpZXNDYWxsYmFjayghZXJyIHx8IGZpbmFsQXR0ZW1wdCwge2VycjogZXJyLCByZXN1bHQ6IHJlc3VsdH0pO1xuICAgICAgICAgICAgICAgICAgICB9LCB3cmFwcGVkUmVzdWx0cyk7XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZnVuY3Rpb24gcmV0cnlJbnRlcnZhbChpbnRlcnZhbCl7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKHNlcmllc0NhbGxiYWNrKXtcbiAgICAgICAgICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpe1xuICAgICAgICAgICAgICAgICAgICAgICAgc2VyaWVzQ2FsbGJhY2sobnVsbCk7XG4gICAgICAgICAgICAgICAgICAgIH0sIGludGVydmFsKTtcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB3aGlsZSAob3B0cy50aW1lcykge1xuXG4gICAgICAgICAgICAgICAgdmFyIGZpbmFsQXR0ZW1wdCA9ICEob3B0cy50aW1lcy09MSk7XG4gICAgICAgICAgICAgICAgYXR0ZW1wdHMucHVzaChyZXRyeUF0dGVtcHQob3B0cy50YXNrLCBmaW5hbEF0dGVtcHQpKTtcbiAgICAgICAgICAgICAgICBpZighZmluYWxBdHRlbXB0ICYmIG9wdHMuaW50ZXJ2YWwgPiAwKXtcbiAgICAgICAgICAgICAgICAgICAgYXR0ZW1wdHMucHVzaChyZXRyeUludGVydmFsKG9wdHMuaW50ZXJ2YWwpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGFzeW5jLnNlcmllcyhhdHRlbXB0cywgZnVuY3Rpb24oZG9uZSwgZGF0YSl7XG4gICAgICAgICAgICAgICAgZGF0YSA9IGRhdGFbZGF0YS5sZW5ndGggLSAxXTtcbiAgICAgICAgICAgICAgICAod3JhcHBlZENhbGxiYWNrIHx8IG9wdHMuY2FsbGJhY2spKGRhdGEuZXJyLCBkYXRhLnJlc3VsdCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIElmIGEgY2FsbGJhY2sgaXMgcGFzc2VkLCBydW4gdGhpcyBhcyBhIGNvbnRyb2xsIGZsb3dcbiAgICAgICAgcmV0dXJuIG9wdHMuY2FsbGJhY2sgPyB3cmFwcGVkVGFzaygpIDogd3JhcHBlZFRhc2s7XG4gICAgfTtcblxuICAgIGFzeW5jLndhdGVyZmFsbCA9IGZ1bmN0aW9uICh0YXNrcywgY2FsbGJhY2spIHtcbiAgICAgICAgY2FsbGJhY2sgPSBfb25jZShjYWxsYmFjayB8fCBub29wKTtcbiAgICAgICAgaWYgKCFfaXNBcnJheSh0YXNrcykpIHtcbiAgICAgICAgICAgIHZhciBlcnIgPSBuZXcgRXJyb3IoJ0ZpcnN0IGFyZ3VtZW50IHRvIHdhdGVyZmFsbCBtdXN0IGJlIGFuIGFycmF5IG9mIGZ1bmN0aW9ucycpO1xuICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKGVycik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCF0YXNrcy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHJldHVybiBjYWxsYmFjaygpO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIHdyYXBJdGVyYXRvcihpdGVyYXRvcikge1xuICAgICAgICAgICAgcmV0dXJuIF9yZXN0UGFyYW0oZnVuY3Rpb24gKGVyciwgYXJncykge1xuICAgICAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2suYXBwbHkobnVsbCwgW2Vycl0uY29uY2F0KGFyZ3MpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBuZXh0ID0gaXRlcmF0b3IubmV4dCgpO1xuICAgICAgICAgICAgICAgICAgICBpZiAobmV4dCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgYXJncy5wdXNoKHdyYXBJdGVyYXRvcihuZXh0KSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhcmdzLnB1c2goY2FsbGJhY2spO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVuc3VyZUFzeW5jKGl0ZXJhdG9yKS5hcHBseShudWxsLCBhcmdzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICB3cmFwSXRlcmF0b3IoYXN5bmMuaXRlcmF0b3IodGFza3MpKSgpO1xuICAgIH07XG5cbiAgICBmdW5jdGlvbiBfcGFyYWxsZWwoZWFjaGZuLCB0YXNrcywgY2FsbGJhY2spIHtcbiAgICAgICAgY2FsbGJhY2sgPSBjYWxsYmFjayB8fCBub29wO1xuICAgICAgICB2YXIgcmVzdWx0cyA9IF9pc0FycmF5TGlrZSh0YXNrcykgPyBbXSA6IHt9O1xuXG4gICAgICAgIGVhY2hmbih0YXNrcywgZnVuY3Rpb24gKHRhc2ssIGtleSwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIHRhc2soX3Jlc3RQYXJhbShmdW5jdGlvbiAoZXJyLCBhcmdzKSB7XG4gICAgICAgICAgICAgICAgaWYgKGFyZ3MubGVuZ3RoIDw9IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgYXJncyA9IGFyZ3NbMF07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJlc3VsdHNba2V5XSA9IGFyZ3M7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgfSwgZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgY2FsbGJhY2soZXJyLCByZXN1bHRzKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgYXN5bmMucGFyYWxsZWwgPSBmdW5jdGlvbiAodGFza3MsIGNhbGxiYWNrKSB7XG4gICAgICAgIF9wYXJhbGxlbChhc3luYy5lYWNoT2YsIHRhc2tzLCBjYWxsYmFjayk7XG4gICAgfTtcblxuICAgIGFzeW5jLnBhcmFsbGVsTGltaXQgPSBmdW5jdGlvbih0YXNrcywgbGltaXQsIGNhbGxiYWNrKSB7XG4gICAgICAgIF9wYXJhbGxlbChfZWFjaE9mTGltaXQobGltaXQpLCB0YXNrcywgY2FsbGJhY2spO1xuICAgIH07XG5cbiAgICBhc3luYy5zZXJpZXMgPSBmdW5jdGlvbih0YXNrcywgY2FsbGJhY2spIHtcbiAgICAgICAgX3BhcmFsbGVsKGFzeW5jLmVhY2hPZlNlcmllcywgdGFza3MsIGNhbGxiYWNrKTtcbiAgICB9O1xuXG4gICAgYXN5bmMuaXRlcmF0b3IgPSBmdW5jdGlvbiAodGFza3MpIHtcbiAgICAgICAgZnVuY3Rpb24gbWFrZUNhbGxiYWNrKGluZGV4KSB7XG4gICAgICAgICAgICBmdW5jdGlvbiBmbigpIHtcbiAgICAgICAgICAgICAgICBpZiAodGFza3MubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgIHRhc2tzW2luZGV4XS5hcHBseShudWxsLCBhcmd1bWVudHMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gZm4ubmV4dCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZm4ubmV4dCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gKGluZGV4IDwgdGFza3MubGVuZ3RoIC0gMSkgPyBtYWtlQ2FsbGJhY2soaW5kZXggKyAxKTogbnVsbDtcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICByZXR1cm4gZm47XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG1ha2VDYWxsYmFjaygwKTtcbiAgICB9O1xuXG4gICAgYXN5bmMuYXBwbHkgPSBfcmVzdFBhcmFtKGZ1bmN0aW9uIChmbiwgYXJncykge1xuICAgICAgICByZXR1cm4gX3Jlc3RQYXJhbShmdW5jdGlvbiAoY2FsbEFyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybiBmbi5hcHBseShcbiAgICAgICAgICAgICAgICBudWxsLCBhcmdzLmNvbmNhdChjYWxsQXJncylcbiAgICAgICAgICAgICk7XG4gICAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgZnVuY3Rpb24gX2NvbmNhdChlYWNoZm4sIGFyciwgZm4sIGNhbGxiYWNrKSB7XG4gICAgICAgIHZhciByZXN1bHQgPSBbXTtcbiAgICAgICAgZWFjaGZuKGFyciwgZnVuY3Rpb24gKHgsIGluZGV4LCBjYikge1xuICAgICAgICAgICAgZm4oeCwgZnVuY3Rpb24gKGVyciwgeSkge1xuICAgICAgICAgICAgICAgIHJlc3VsdCA9IHJlc3VsdC5jb25jYXQoeSB8fCBbXSk7XG4gICAgICAgICAgICAgICAgY2IoZXJyKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICBjYWxsYmFjayhlcnIsIHJlc3VsdCk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBhc3luYy5jb25jYXQgPSBkb1BhcmFsbGVsKF9jb25jYXQpO1xuICAgIGFzeW5jLmNvbmNhdFNlcmllcyA9IGRvU2VyaWVzKF9jb25jYXQpO1xuXG4gICAgYXN5bmMud2hpbHN0ID0gZnVuY3Rpb24gKHRlc3QsIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICBjYWxsYmFjayA9IGNhbGxiYWNrIHx8IG5vb3A7XG4gICAgICAgIGlmICh0ZXN0KCkpIHtcbiAgICAgICAgICAgIHZhciBuZXh0ID0gX3Jlc3RQYXJhbShmdW5jdGlvbihlcnIsIGFyZ3MpIHtcbiAgICAgICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0ZXN0LmFwcGx5KHRoaXMsIGFyZ3MpKSB7XG4gICAgICAgICAgICAgICAgICAgIGl0ZXJhdG9yKG5leHQpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKG51bGwpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgaXRlcmF0b3IobmV4dCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjYWxsYmFjayhudWxsKTtcbiAgICAgICAgfVxuICAgIH07XG5cbiAgICBhc3luYy5kb1doaWxzdCA9IGZ1bmN0aW9uIChpdGVyYXRvciwgdGVzdCwgY2FsbGJhY2spIHtcbiAgICAgICAgdmFyIGNhbGxzID0gMDtcbiAgICAgICAgcmV0dXJuIGFzeW5jLndoaWxzdChmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIHJldHVybiArK2NhbGxzIDw9IDEgfHwgdGVzdC5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgICAgICB9LCBpdGVyYXRvciwgY2FsbGJhY2spO1xuICAgIH07XG5cbiAgICBhc3luYy51bnRpbCA9IGZ1bmN0aW9uICh0ZXN0LCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgcmV0dXJuIGFzeW5jLndoaWxzdChmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIHJldHVybiAhdGVzdC5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgICAgICB9LCBpdGVyYXRvciwgY2FsbGJhY2spO1xuICAgIH07XG5cbiAgICBhc3luYy5kb1VudGlsID0gZnVuY3Rpb24gKGl0ZXJhdG9yLCB0ZXN0LCBjYWxsYmFjaykge1xuICAgICAgICByZXR1cm4gYXN5bmMuZG9XaGlsc3QoaXRlcmF0b3IsIGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgcmV0dXJuICF0ZXN0LmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgICAgIH0sIGNhbGxiYWNrKTtcbiAgICB9O1xuXG4gICAgYXN5bmMuZHVyaW5nID0gZnVuY3Rpb24gKHRlc3QsIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICBjYWxsYmFjayA9IGNhbGxiYWNrIHx8IG5vb3A7XG5cbiAgICAgICAgdmFyIG5leHQgPSBfcmVzdFBhcmFtKGZ1bmN0aW9uKGVyciwgYXJncykge1xuICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGFyZ3MucHVzaChjaGVjayk7XG4gICAgICAgICAgICAgICAgdGVzdC5hcHBseSh0aGlzLCBhcmdzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgdmFyIGNoZWNrID0gZnVuY3Rpb24oZXJyLCB0cnV0aCkge1xuICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHRydXRoKSB7XG4gICAgICAgICAgICAgICAgaXRlcmF0b3IobmV4dCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrKG51bGwpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuXG4gICAgICAgIHRlc3QoY2hlY2spO1xuICAgIH07XG5cbiAgICBhc3luYy5kb0R1cmluZyA9IGZ1bmN0aW9uIChpdGVyYXRvciwgdGVzdCwgY2FsbGJhY2spIHtcbiAgICAgICAgdmFyIGNhbGxzID0gMDtcbiAgICAgICAgYXN5bmMuZHVyaW5nKGZ1bmN0aW9uKG5leHQpIHtcbiAgICAgICAgICAgIGlmIChjYWxscysrIDwgMSkge1xuICAgICAgICAgICAgICAgIG5leHQobnVsbCwgdHJ1ZSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRlc3QuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSwgaXRlcmF0b3IsIGNhbGxiYWNrKTtcbiAgICB9O1xuXG4gICAgZnVuY3Rpb24gX3F1ZXVlKHdvcmtlciwgY29uY3VycmVuY3ksIHBheWxvYWQpIHtcbiAgICAgICAgaWYgKGNvbmN1cnJlbmN5ID09IG51bGwpIHtcbiAgICAgICAgICAgIGNvbmN1cnJlbmN5ID0gMTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmKGNvbmN1cnJlbmN5ID09PSAwKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0NvbmN1cnJlbmN5IG11c3Qgbm90IGJlIHplcm8nKTtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBfaW5zZXJ0KHEsIGRhdGEsIHBvcywgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIGlmIChjYWxsYmFjayAhPSBudWxsICYmIHR5cGVvZiBjYWxsYmFjayAhPT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwidGFzayBjYWxsYmFjayBtdXN0IGJlIGEgZnVuY3Rpb25cIik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBxLnN0YXJ0ZWQgPSB0cnVlO1xuICAgICAgICAgICAgaWYgKCFfaXNBcnJheShkYXRhKSkge1xuICAgICAgICAgICAgICAgIGRhdGEgPSBbZGF0YV07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZihkYXRhLmxlbmd0aCA9PT0gMCAmJiBxLmlkbGUoKSkge1xuICAgICAgICAgICAgICAgIC8vIGNhbGwgZHJhaW4gaW1tZWRpYXRlbHkgaWYgdGhlcmUgYXJlIG5vIHRhc2tzXG4gICAgICAgICAgICAgICAgcmV0dXJuIGFzeW5jLnNldEltbWVkaWF0ZShmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgICAgcS5kcmFpbigpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgX2FycmF5RWFjaChkYXRhLCBmdW5jdGlvbih0YXNrKSB7XG4gICAgICAgICAgICAgICAgdmFyIGl0ZW0gPSB7XG4gICAgICAgICAgICAgICAgICAgIGRhdGE6IHRhc2ssXG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrOiBjYWxsYmFjayB8fCBub29wXG4gICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgIGlmIChwb3MpIHtcbiAgICAgICAgICAgICAgICAgICAgcS50YXNrcy51bnNoaWZ0KGl0ZW0pO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHEudGFza3MucHVzaChpdGVtKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAocS50YXNrcy5sZW5ndGggPT09IHEuY29uY3VycmVuY3kpIHtcbiAgICAgICAgICAgICAgICAgICAgcS5zYXR1cmF0ZWQoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGFzeW5jLnNldEltbWVkaWF0ZShxLnByb2Nlc3MpO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIF9uZXh0KHEsIHRhc2tzKSB7XG4gICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24oKXtcbiAgICAgICAgICAgICAgICB3b3JrZXJzIC09IDE7XG5cbiAgICAgICAgICAgICAgICB2YXIgcmVtb3ZlZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHZhciBhcmdzID0gYXJndW1lbnRzO1xuICAgICAgICAgICAgICAgIF9hcnJheUVhY2godGFza3MsIGZ1bmN0aW9uICh0YXNrKSB7XG4gICAgICAgICAgICAgICAgICAgIF9hcnJheUVhY2god29ya2Vyc0xpc3QsIGZ1bmN0aW9uICh3b3JrZXIsIGluZGV4KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAod29ya2VyID09PSB0YXNrICYmICFyZW1vdmVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd29ya2Vyc0xpc3Quc3BsaWNlKGluZGV4LCAxKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZW1vdmVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICAgICAgdGFzay5jYWxsYmFjay5hcHBseSh0YXNrLCBhcmdzKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBpZiAocS50YXNrcy5sZW5ndGggKyB3b3JrZXJzID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIHEuZHJhaW4oKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcS5wcm9jZXNzKCk7XG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIHdvcmtlcnMgPSAwO1xuICAgICAgICB2YXIgd29ya2Vyc0xpc3QgPSBbXTtcbiAgICAgICAgdmFyIHEgPSB7XG4gICAgICAgICAgICB0YXNrczogW10sXG4gICAgICAgICAgICBjb25jdXJyZW5jeTogY29uY3VycmVuY3ksXG4gICAgICAgICAgICBwYXlsb2FkOiBwYXlsb2FkLFxuICAgICAgICAgICAgc2F0dXJhdGVkOiBub29wLFxuICAgICAgICAgICAgZW1wdHk6IG5vb3AsXG4gICAgICAgICAgICBkcmFpbjogbm9vcCxcbiAgICAgICAgICAgIHN0YXJ0ZWQ6IGZhbHNlLFxuICAgICAgICAgICAgcGF1c2VkOiBmYWxzZSxcbiAgICAgICAgICAgIHB1c2g6IGZ1bmN0aW9uIChkYXRhLCBjYWxsYmFjaykge1xuICAgICAgICAgICAgICAgIF9pbnNlcnQocSwgZGF0YSwgZmFsc2UsIGNhbGxiYWNrKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBraWxsOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgcS5kcmFpbiA9IG5vb3A7XG4gICAgICAgICAgICAgICAgcS50YXNrcyA9IFtdO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHVuc2hpZnQ6IGZ1bmN0aW9uIChkYXRhLCBjYWxsYmFjaykge1xuICAgICAgICAgICAgICAgIF9pbnNlcnQocSwgZGF0YSwgdHJ1ZSwgY2FsbGJhY2spO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHByb2Nlc3M6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBpZiAoIXEucGF1c2VkICYmIHdvcmtlcnMgPCBxLmNvbmN1cnJlbmN5ICYmIHEudGFza3MubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgIHdoaWxlKHdvcmtlcnMgPCBxLmNvbmN1cnJlbmN5ICYmIHEudGFza3MubGVuZ3RoKXtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0YXNrcyA9IHEucGF5bG9hZCA/XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcS50YXNrcy5zcGxpY2UoMCwgcS5wYXlsb2FkKSA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcS50YXNrcy5zcGxpY2UoMCwgcS50YXNrcy5sZW5ndGgpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgZGF0YSA9IF9tYXAodGFza3MsIGZ1bmN0aW9uICh0YXNrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRhc2suZGF0YTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocS50YXNrcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBxLmVtcHR5KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB3b3JrZXJzICs9IDE7XG4gICAgICAgICAgICAgICAgICAgICAgICB3b3JrZXJzTGlzdC5wdXNoKHRhc2tzWzBdKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjYiA9IG9ubHlfb25jZShfbmV4dChxLCB0YXNrcykpO1xuICAgICAgICAgICAgICAgICAgICAgICAgd29ya2VyKGRhdGEsIGNiKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBsZW5ndGg6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcS50YXNrcy5sZW5ndGg7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcnVubmluZzogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB3b3JrZXJzO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHdvcmtlcnNMaXN0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHdvcmtlcnNMaXN0O1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGlkbGU6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBxLnRhc2tzLmxlbmd0aCArIHdvcmtlcnMgPT09IDA7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcGF1c2U6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBxLnBhdXNlZCA9IHRydWU7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcmVzdW1lOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgaWYgKHEucGF1c2VkID09PSBmYWxzZSkgeyByZXR1cm47IH1cbiAgICAgICAgICAgICAgICBxLnBhdXNlZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHZhciByZXN1bWVDb3VudCA9IE1hdGgubWluKHEuY29uY3VycmVuY3ksIHEudGFza3MubGVuZ3RoKTtcbiAgICAgICAgICAgICAgICAvLyBOZWVkIHRvIGNhbGwgcS5wcm9jZXNzIG9uY2UgcGVyIGNvbmN1cnJlbnRcbiAgICAgICAgICAgICAgICAvLyB3b3JrZXIgdG8gcHJlc2VydmUgZnVsbCBjb25jdXJyZW5jeSBhZnRlciBwYXVzZVxuICAgICAgICAgICAgICAgIGZvciAodmFyIHcgPSAxOyB3IDw9IHJlc3VtZUNvdW50OyB3KyspIHtcbiAgICAgICAgICAgICAgICAgICAgYXN5bmMuc2V0SW1tZWRpYXRlKHEucHJvY2Vzcyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gcTtcbiAgICB9XG5cbiAgICBhc3luYy5xdWV1ZSA9IGZ1bmN0aW9uICh3b3JrZXIsIGNvbmN1cnJlbmN5KSB7XG4gICAgICAgIHZhciBxID0gX3F1ZXVlKGZ1bmN0aW9uIChpdGVtcywgY2IpIHtcbiAgICAgICAgICAgIHdvcmtlcihpdGVtc1swXSwgY2IpO1xuICAgICAgICB9LCBjb25jdXJyZW5jeSwgMSk7XG5cbiAgICAgICAgcmV0dXJuIHE7XG4gICAgfTtcblxuICAgIGFzeW5jLnByaW9yaXR5UXVldWUgPSBmdW5jdGlvbiAod29ya2VyLCBjb25jdXJyZW5jeSkge1xuXG4gICAgICAgIGZ1bmN0aW9uIF9jb21wYXJlVGFza3MoYSwgYil7XG4gICAgICAgICAgICByZXR1cm4gYS5wcmlvcml0eSAtIGIucHJpb3JpdHk7XG4gICAgICAgIH1cblxuICAgICAgICBmdW5jdGlvbiBfYmluYXJ5U2VhcmNoKHNlcXVlbmNlLCBpdGVtLCBjb21wYXJlKSB7XG4gICAgICAgICAgICB2YXIgYmVnID0gLTEsXG4gICAgICAgICAgICAgICAgZW5kID0gc2VxdWVuY2UubGVuZ3RoIC0gMTtcbiAgICAgICAgICAgIHdoaWxlIChiZWcgPCBlbmQpIHtcbiAgICAgICAgICAgICAgICB2YXIgbWlkID0gYmVnICsgKChlbmQgLSBiZWcgKyAxKSA+Pj4gMSk7XG4gICAgICAgICAgICAgICAgaWYgKGNvbXBhcmUoaXRlbSwgc2VxdWVuY2VbbWlkXSkgPj0gMCkge1xuICAgICAgICAgICAgICAgICAgICBiZWcgPSBtaWQ7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgZW5kID0gbWlkIC0gMTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gYmVnO1xuICAgICAgICB9XG5cbiAgICAgICAgZnVuY3Rpb24gX2luc2VydChxLCBkYXRhLCBwcmlvcml0eSwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIGlmIChjYWxsYmFjayAhPSBudWxsICYmIHR5cGVvZiBjYWxsYmFjayAhPT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwidGFzayBjYWxsYmFjayBtdXN0IGJlIGEgZnVuY3Rpb25cIik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBxLnN0YXJ0ZWQgPSB0cnVlO1xuICAgICAgICAgICAgaWYgKCFfaXNBcnJheShkYXRhKSkge1xuICAgICAgICAgICAgICAgIGRhdGEgPSBbZGF0YV07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZihkYXRhLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICAgIC8vIGNhbGwgZHJhaW4gaW1tZWRpYXRlbHkgaWYgdGhlcmUgYXJlIG5vIHRhc2tzXG4gICAgICAgICAgICAgICAgcmV0dXJuIGFzeW5jLnNldEltbWVkaWF0ZShmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgICAgcS5kcmFpbigpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgX2FycmF5RWFjaChkYXRhLCBmdW5jdGlvbih0YXNrKSB7XG4gICAgICAgICAgICAgICAgdmFyIGl0ZW0gPSB7XG4gICAgICAgICAgICAgICAgICAgIGRhdGE6IHRhc2ssXG4gICAgICAgICAgICAgICAgICAgIHByaW9yaXR5OiBwcmlvcml0eSxcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2s6IHR5cGVvZiBjYWxsYmFjayA9PT0gJ2Z1bmN0aW9uJyA/IGNhbGxiYWNrIDogbm9vcFxuICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICBxLnRhc2tzLnNwbGljZShfYmluYXJ5U2VhcmNoKHEudGFza3MsIGl0ZW0sIF9jb21wYXJlVGFza3MpICsgMSwgMCwgaXRlbSk7XG5cbiAgICAgICAgICAgICAgICBpZiAocS50YXNrcy5sZW5ndGggPT09IHEuY29uY3VycmVuY3kpIHtcbiAgICAgICAgICAgICAgICAgICAgcS5zYXR1cmF0ZWQoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYXN5bmMuc2V0SW1tZWRpYXRlKHEucHJvY2Vzcyk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFN0YXJ0IHdpdGggYSBub3JtYWwgcXVldWVcbiAgICAgICAgdmFyIHEgPSBhc3luYy5xdWV1ZSh3b3JrZXIsIGNvbmN1cnJlbmN5KTtcblxuICAgICAgICAvLyBPdmVycmlkZSBwdXNoIHRvIGFjY2VwdCBzZWNvbmQgcGFyYW1ldGVyIHJlcHJlc2VudGluZyBwcmlvcml0eVxuICAgICAgICBxLnB1c2ggPSBmdW5jdGlvbiAoZGF0YSwgcHJpb3JpdHksIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICBfaW5zZXJ0KHEsIGRhdGEsIHByaW9yaXR5LCBjYWxsYmFjayk7XG4gICAgICAgIH07XG5cbiAgICAgICAgLy8gUmVtb3ZlIHVuc2hpZnQgZnVuY3Rpb25cbiAgICAgICAgZGVsZXRlIHEudW5zaGlmdDtcblxuICAgICAgICByZXR1cm4gcTtcbiAgICB9O1xuXG4gICAgYXN5bmMuY2FyZ28gPSBmdW5jdGlvbiAod29ya2VyLCBwYXlsb2FkKSB7XG4gICAgICAgIHJldHVybiBfcXVldWUod29ya2VyLCAxLCBwYXlsb2FkKTtcbiAgICB9O1xuXG4gICAgZnVuY3Rpb24gX2NvbnNvbGVfZm4obmFtZSkge1xuICAgICAgICByZXR1cm4gX3Jlc3RQYXJhbShmdW5jdGlvbiAoZm4sIGFyZ3MpIHtcbiAgICAgICAgICAgIGZuLmFwcGx5KG51bGwsIGFyZ3MuY29uY2F0KFtfcmVzdFBhcmFtKGZ1bmN0aW9uIChlcnIsIGFyZ3MpIHtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGNvbnNvbGUgPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb25zb2xlLmVycm9yKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihlcnIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKGNvbnNvbGVbbmFtZV0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIF9hcnJheUVhY2goYXJncywgZnVuY3Rpb24gKHgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlW25hbWVdKHgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KV0pKTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGFzeW5jLmxvZyA9IF9jb25zb2xlX2ZuKCdsb2cnKTtcbiAgICBhc3luYy5kaXIgPSBfY29uc29sZV9mbignZGlyJyk7XG4gICAgLyphc3luYy5pbmZvID0gX2NvbnNvbGVfZm4oJ2luZm8nKTtcbiAgICBhc3luYy53YXJuID0gX2NvbnNvbGVfZm4oJ3dhcm4nKTtcbiAgICBhc3luYy5lcnJvciA9IF9jb25zb2xlX2ZuKCdlcnJvcicpOyovXG5cbiAgICBhc3luYy5tZW1vaXplID0gZnVuY3Rpb24gKGZuLCBoYXNoZXIpIHtcbiAgICAgICAgdmFyIG1lbW8gPSB7fTtcbiAgICAgICAgdmFyIHF1ZXVlcyA9IHt9O1xuICAgICAgICBoYXNoZXIgPSBoYXNoZXIgfHwgaWRlbnRpdHk7XG4gICAgICAgIHZhciBtZW1vaXplZCA9IF9yZXN0UGFyYW0oZnVuY3Rpb24gbWVtb2l6ZWQoYXJncykge1xuICAgICAgICAgICAgdmFyIGNhbGxiYWNrID0gYXJncy5wb3AoKTtcbiAgICAgICAgICAgIHZhciBrZXkgPSBoYXNoZXIuYXBwbHkobnVsbCwgYXJncyk7XG4gICAgICAgICAgICBpZiAoa2V5IGluIG1lbW8pIHtcbiAgICAgICAgICAgICAgICBhc3luYy5zZXRJbW1lZGlhdGUoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjay5hcHBseShudWxsLCBtZW1vW2tleV0pO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoa2V5IGluIHF1ZXVlcykge1xuICAgICAgICAgICAgICAgIHF1ZXVlc1trZXldLnB1c2goY2FsbGJhY2spO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgcXVldWVzW2tleV0gPSBbY2FsbGJhY2tdO1xuICAgICAgICAgICAgICAgIGZuLmFwcGx5KG51bGwsIGFyZ3MuY29uY2F0KFtfcmVzdFBhcmFtKGZ1bmN0aW9uIChhcmdzKSB7XG4gICAgICAgICAgICAgICAgICAgIG1lbW9ba2V5XSA9IGFyZ3M7XG4gICAgICAgICAgICAgICAgICAgIHZhciBxID0gcXVldWVzW2tleV07XG4gICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBxdWV1ZXNba2V5XTtcbiAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDAsIGwgPSBxLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgcVtpXS5hcHBseShudWxsLCBhcmdzKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pXSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgbWVtb2l6ZWQubWVtbyA9IG1lbW87XG4gICAgICAgIG1lbW9pemVkLnVubWVtb2l6ZWQgPSBmbjtcbiAgICAgICAgcmV0dXJuIG1lbW9pemVkO1xuICAgIH07XG5cbiAgICBhc3luYy51bm1lbW9pemUgPSBmdW5jdGlvbiAoZm4pIHtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiAoZm4udW5tZW1vaXplZCB8fCBmbikuYXBwbHkobnVsbCwgYXJndW1lbnRzKTtcbiAgICAgICAgfTtcbiAgICB9O1xuXG4gICAgZnVuY3Rpb24gX3RpbWVzKG1hcHBlcikge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKGNvdW50LCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIG1hcHBlcihfcmFuZ2UoY291bnQpLCBpdGVyYXRvciwgY2FsbGJhY2spO1xuICAgICAgICB9O1xuICAgIH1cblxuICAgIGFzeW5jLnRpbWVzID0gX3RpbWVzKGFzeW5jLm1hcCk7XG4gICAgYXN5bmMudGltZXNTZXJpZXMgPSBfdGltZXMoYXN5bmMubWFwU2VyaWVzKTtcbiAgICBhc3luYy50aW1lc0xpbWl0ID0gZnVuY3Rpb24gKGNvdW50LCBsaW1pdCwgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgIHJldHVybiBhc3luYy5tYXBMaW1pdChfcmFuZ2UoY291bnQpLCBsaW1pdCwgaXRlcmF0b3IsIGNhbGxiYWNrKTtcbiAgICB9O1xuXG4gICAgYXN5bmMuc2VxID0gZnVuY3Rpb24gKC8qIGZ1bmN0aW9ucy4uLiAqLykge1xuICAgICAgICB2YXIgZm5zID0gYXJndW1lbnRzO1xuICAgICAgICByZXR1cm4gX3Jlc3RQYXJhbShmdW5jdGlvbiAoYXJncykge1xuICAgICAgICAgICAgdmFyIHRoYXQgPSB0aGlzO1xuXG4gICAgICAgICAgICB2YXIgY2FsbGJhY2sgPSBhcmdzW2FyZ3MubGVuZ3RoIC0gMV07XG4gICAgICAgICAgICBpZiAodHlwZW9mIGNhbGxiYWNrID09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICBhcmdzLnBvcCgpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBjYWxsYmFjayA9IG5vb3A7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGFzeW5jLnJlZHVjZShmbnMsIGFyZ3MsIGZ1bmN0aW9uIChuZXdhcmdzLCBmbiwgY2IpIHtcbiAgICAgICAgICAgICAgICBmbi5hcHBseSh0aGF0LCBuZXdhcmdzLmNvbmNhdChbX3Jlc3RQYXJhbShmdW5jdGlvbiAoZXJyLCBuZXh0YXJncykge1xuICAgICAgICAgICAgICAgICAgICBjYihlcnIsIG5leHRhcmdzKTtcbiAgICAgICAgICAgICAgICB9KV0pKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBmdW5jdGlvbiAoZXJyLCByZXN1bHRzKSB7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2suYXBwbHkodGhhdCwgW2Vycl0uY29uY2F0KHJlc3VsdHMpKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9O1xuXG4gICAgYXN5bmMuY29tcG9zZSA9IGZ1bmN0aW9uICgvKiBmdW5jdGlvbnMuLi4gKi8pIHtcbiAgICAgICAgcmV0dXJuIGFzeW5jLnNlcS5hcHBseShudWxsLCBBcnJheS5wcm90b3R5cGUucmV2ZXJzZS5jYWxsKGFyZ3VtZW50cykpO1xuICAgIH07XG5cblxuICAgIGZ1bmN0aW9uIF9hcHBseUVhY2goZWFjaGZuKSB7XG4gICAgICAgIHJldHVybiBfcmVzdFBhcmFtKGZ1bmN0aW9uKGZucywgYXJncykge1xuICAgICAgICAgICAgdmFyIGdvID0gX3Jlc3RQYXJhbShmdW5jdGlvbihhcmdzKSB7XG4gICAgICAgICAgICAgICAgdmFyIHRoYXQgPSB0aGlzO1xuICAgICAgICAgICAgICAgIHZhciBjYWxsYmFjayA9IGFyZ3MucG9wKCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGVhY2hmbihmbnMsIGZ1bmN0aW9uIChmbiwgXywgY2IpIHtcbiAgICAgICAgICAgICAgICAgICAgZm4uYXBwbHkodGhhdCwgYXJncy5jb25jYXQoW2NiXSkpO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgY2FsbGJhY2spO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBpZiAoYXJncy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZ28uYXBwbHkodGhpcywgYXJncyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZ287XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGFzeW5jLmFwcGx5RWFjaCA9IF9hcHBseUVhY2goYXN5bmMuZWFjaE9mKTtcbiAgICBhc3luYy5hcHBseUVhY2hTZXJpZXMgPSBfYXBwbHlFYWNoKGFzeW5jLmVhY2hPZlNlcmllcyk7XG5cblxuICAgIGFzeW5jLmZvcmV2ZXIgPSBmdW5jdGlvbiAoZm4sIGNhbGxiYWNrKSB7XG4gICAgICAgIHZhciBkb25lID0gb25seV9vbmNlKGNhbGxiYWNrIHx8IG5vb3ApO1xuICAgICAgICB2YXIgdGFzayA9IGVuc3VyZUFzeW5jKGZuKTtcbiAgICAgICAgZnVuY3Rpb24gbmV4dChlcnIpIHtcbiAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZG9uZShlcnIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGFzayhuZXh0KTtcbiAgICAgICAgfVxuICAgICAgICBuZXh0KCk7XG4gICAgfTtcblxuICAgIGZ1bmN0aW9uIGVuc3VyZUFzeW5jKGZuKSB7XG4gICAgICAgIHJldHVybiBfcmVzdFBhcmFtKGZ1bmN0aW9uIChhcmdzKSB7XG4gICAgICAgICAgICB2YXIgY2FsbGJhY2sgPSBhcmdzLnBvcCgpO1xuICAgICAgICAgICAgYXJncy5wdXNoKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICB2YXIgaW5uZXJBcmdzID0gYXJndW1lbnRzO1xuICAgICAgICAgICAgICAgIGlmIChzeW5jKSB7XG4gICAgICAgICAgICAgICAgICAgIGFzeW5jLnNldEltbWVkaWF0ZShmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjYWxsYmFjay5hcHBseShudWxsLCBpbm5lckFyZ3MpO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjay5hcHBseShudWxsLCBpbm5lckFyZ3MpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdmFyIHN5bmMgPSB0cnVlO1xuICAgICAgICAgICAgZm4uYXBwbHkodGhpcywgYXJncyk7XG4gICAgICAgICAgICBzeW5jID0gZmFsc2U7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGFzeW5jLmVuc3VyZUFzeW5jID0gZW5zdXJlQXN5bmM7XG5cbiAgICBhc3luYy5jb25zdGFudCA9IF9yZXN0UGFyYW0oZnVuY3Rpb24odmFsdWVzKSB7XG4gICAgICAgIHZhciBhcmdzID0gW251bGxdLmNvbmNhdCh2YWx1ZXMpO1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKGNhbGxiYWNrKSB7XG4gICAgICAgICAgICByZXR1cm4gY2FsbGJhY2suYXBwbHkodGhpcywgYXJncyk7XG4gICAgICAgIH07XG4gICAgfSk7XG5cbiAgICBhc3luYy53cmFwU3luYyA9XG4gICAgYXN5bmMuYXN5bmNpZnkgPSBmdW5jdGlvbiBhc3luY2lmeShmdW5jKSB7XG4gICAgICAgIHJldHVybiBfcmVzdFBhcmFtKGZ1bmN0aW9uIChhcmdzKSB7XG4gICAgICAgICAgICB2YXIgY2FsbGJhY2sgPSBhcmdzLnBvcCgpO1xuICAgICAgICAgICAgdmFyIHJlc3VsdDtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0ID0gZnVuYy5hcHBseSh0aGlzLCBhcmdzKTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gY2FsbGJhY2soZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBpZiByZXN1bHQgaXMgUHJvbWlzZSBvYmplY3RcbiAgICAgICAgICAgIGlmIChfaXNPYmplY3QocmVzdWx0KSAmJiB0eXBlb2YgcmVzdWx0LnRoZW4gPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICAgICAgICAgIHJlc3VsdC50aGVuKGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKG51bGwsIHZhbHVlKTtcbiAgICAgICAgICAgICAgICB9KVtcImNhdGNoXCJdKGZ1bmN0aW9uKGVycikge1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnIubWVzc2FnZSA/IGVyciA6IG5ldyBFcnJvcihlcnIpKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2sobnVsbCwgcmVzdWx0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfTtcblxuICAgIC8vIE5vZGUuanNcbiAgICBpZiAodHlwZW9mIG1vZHVsZSA9PT0gJ29iamVjdCcgJiYgbW9kdWxlLmV4cG9ydHMpIHtcbiAgICAgICAgbW9kdWxlLmV4cG9ydHMgPSBhc3luYztcbiAgICB9XG4gICAgLy8gQU1EIC8gUmVxdWlyZUpTXG4gICAgZWxzZSBpZiAodHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kKSB7XG4gICAgICAgIGRlZmluZShbXSwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIGFzeW5jO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgLy8gaW5jbHVkZWQgZGlyZWN0bHkgdmlhIDxzY3JpcHQ+IHRhZ1xuICAgIGVsc2Uge1xuICAgICAgICByb290LmFzeW5jID0gYXN5bmM7XG4gICAgfVxuXG59KCkpO1xuIiwiLy8gQ29weXJpZ2h0IEpveWVudCwgSW5jLiBhbmQgb3RoZXIgTm9kZSBjb250cmlidXRvcnMuXG4vL1xuLy8gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGFcbi8vIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGVcbi8vIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZ1xuLy8gd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLFxuLy8gZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdFxuLy8gcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlXG4vLyBmb2xsb3dpbmcgY29uZGl0aW9uczpcbi8vXG4vLyBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZFxuLy8gaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4vL1xuLy8gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTU1xuLy8gT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRlxuLy8gTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTlxuLy8gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sXG4vLyBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1Jcbi8vIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEVcbi8vIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG5cbi8vIHJlc29sdmVzIC4gYW5kIC4uIGVsZW1lbnRzIGluIGEgcGF0aCBhcnJheSB3aXRoIGRpcmVjdG9yeSBuYW1lcyB0aGVyZVxuLy8gbXVzdCBiZSBubyBzbGFzaGVzLCBlbXB0eSBlbGVtZW50cywgb3IgZGV2aWNlIG5hbWVzIChjOlxcKSBpbiB0aGUgYXJyYXlcbi8vIChzbyBhbHNvIG5vIGxlYWRpbmcgYW5kIHRyYWlsaW5nIHNsYXNoZXMgLSBpdCBkb2VzIG5vdCBkaXN0aW5ndWlzaFxuLy8gcmVsYXRpdmUgYW5kIGFic29sdXRlIHBhdGhzKVxuZnVuY3Rpb24gbm9ybWFsaXplQXJyYXkocGFydHMsIGFsbG93QWJvdmVSb290KSB7XG4gIC8vIGlmIHRoZSBwYXRoIHRyaWVzIHRvIGdvIGFib3ZlIHRoZSByb290LCBgdXBgIGVuZHMgdXAgPiAwXG4gIHZhciB1cCA9IDA7XG4gIGZvciAodmFyIGkgPSBwYXJ0cy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgIHZhciBsYXN0ID0gcGFydHNbaV07XG4gICAgaWYgKGxhc3QgPT09ICcuJykge1xuICAgICAgcGFydHMuc3BsaWNlKGksIDEpO1xuICAgIH0gZWxzZSBpZiAobGFzdCA9PT0gJy4uJykge1xuICAgICAgcGFydHMuc3BsaWNlKGksIDEpO1xuICAgICAgdXArKztcbiAgICB9IGVsc2UgaWYgKHVwKSB7XG4gICAgICBwYXJ0cy5zcGxpY2UoaSwgMSk7XG4gICAgICB1cC0tO1xuICAgIH1cbiAgfVxuXG4gIC8vIGlmIHRoZSBwYXRoIGlzIGFsbG93ZWQgdG8gZ28gYWJvdmUgdGhlIHJvb3QsIHJlc3RvcmUgbGVhZGluZyAuLnNcbiAgaWYgKGFsbG93QWJvdmVSb290KSB7XG4gICAgZm9yICg7IHVwLS07IHVwKSB7XG4gICAgICBwYXJ0cy51bnNoaWZ0KCcuLicpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBwYXJ0cztcbn1cblxuLy8gU3BsaXQgYSBmaWxlbmFtZSBpbnRvIFtyb290LCBkaXIsIGJhc2VuYW1lLCBleHRdLCB1bml4IHZlcnNpb25cbi8vICdyb290JyBpcyBqdXN0IGEgc2xhc2gsIG9yIG5vdGhpbmcuXG52YXIgc3BsaXRQYXRoUmUgPVxuICAgIC9eKFxcLz98KShbXFxzXFxTXSo/KSgoPzpcXC57MSwyfXxbXlxcL10rP3wpKFxcLlteLlxcL10qfCkpKD86W1xcL10qKSQvO1xudmFyIHNwbGl0UGF0aCA9IGZ1bmN0aW9uKGZpbGVuYW1lKSB7XG4gIHJldHVybiBzcGxpdFBhdGhSZS5leGVjKGZpbGVuYW1lKS5zbGljZSgxKTtcbn07XG5cbi8vIHBhdGgucmVzb2x2ZShbZnJvbSAuLi5dLCB0bylcbi8vIHBvc2l4IHZlcnNpb25cbmV4cG9ydHMucmVzb2x2ZSA9IGZ1bmN0aW9uKCkge1xuICB2YXIgcmVzb2x2ZWRQYXRoID0gJycsXG4gICAgICByZXNvbHZlZEFic29sdXRlID0gZmFsc2U7XG5cbiAgZm9yICh2YXIgaSA9IGFyZ3VtZW50cy5sZW5ndGggLSAxOyBpID49IC0xICYmICFyZXNvbHZlZEFic29sdXRlOyBpLS0pIHtcbiAgICB2YXIgcGF0aCA9IChpID49IDApID8gYXJndW1lbnRzW2ldIDogcHJvY2Vzcy5jd2QoKTtcblxuICAgIC8vIFNraXAgZW1wdHkgYW5kIGludmFsaWQgZW50cmllc1xuICAgIGlmICh0eXBlb2YgcGF0aCAhPT0gJ3N0cmluZycpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0FyZ3VtZW50cyB0byBwYXRoLnJlc29sdmUgbXVzdCBiZSBzdHJpbmdzJyk7XG4gICAgfSBlbHNlIGlmICghcGF0aCkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgcmVzb2x2ZWRQYXRoID0gcGF0aCArICcvJyArIHJlc29sdmVkUGF0aDtcbiAgICByZXNvbHZlZEFic29sdXRlID0gcGF0aC5jaGFyQXQoMCkgPT09ICcvJztcbiAgfVxuXG4gIC8vIEF0IHRoaXMgcG9pbnQgdGhlIHBhdGggc2hvdWxkIGJlIHJlc29sdmVkIHRvIGEgZnVsbCBhYnNvbHV0ZSBwYXRoLCBidXRcbiAgLy8gaGFuZGxlIHJlbGF0aXZlIHBhdGhzIHRvIGJlIHNhZmUgKG1pZ2h0IGhhcHBlbiB3aGVuIHByb2Nlc3MuY3dkKCkgZmFpbHMpXG5cbiAgLy8gTm9ybWFsaXplIHRoZSBwYXRoXG4gIHJlc29sdmVkUGF0aCA9IG5vcm1hbGl6ZUFycmF5KGZpbHRlcihyZXNvbHZlZFBhdGguc3BsaXQoJy8nKSwgZnVuY3Rpb24ocCkge1xuICAgIHJldHVybiAhIXA7XG4gIH0pLCAhcmVzb2x2ZWRBYnNvbHV0ZSkuam9pbignLycpO1xuXG4gIHJldHVybiAoKHJlc29sdmVkQWJzb2x1dGUgPyAnLycgOiAnJykgKyByZXNvbHZlZFBhdGgpIHx8ICcuJztcbn07XG5cbi8vIHBhdGgubm9ybWFsaXplKHBhdGgpXG4vLyBwb3NpeCB2ZXJzaW9uXG5leHBvcnRzLm5vcm1hbGl6ZSA9IGZ1bmN0aW9uKHBhdGgpIHtcbiAgdmFyIGlzQWJzb2x1dGUgPSBleHBvcnRzLmlzQWJzb2x1dGUocGF0aCksXG4gICAgICB0cmFpbGluZ1NsYXNoID0gc3Vic3RyKHBhdGgsIC0xKSA9PT0gJy8nO1xuXG4gIC8vIE5vcm1hbGl6ZSB0aGUgcGF0aFxuICBwYXRoID0gbm9ybWFsaXplQXJyYXkoZmlsdGVyKHBhdGguc3BsaXQoJy8nKSwgZnVuY3Rpb24ocCkge1xuICAgIHJldHVybiAhIXA7XG4gIH0pLCAhaXNBYnNvbHV0ZSkuam9pbignLycpO1xuXG4gIGlmICghcGF0aCAmJiAhaXNBYnNvbHV0ZSkge1xuICAgIHBhdGggPSAnLic7XG4gIH1cbiAgaWYgKHBhdGggJiYgdHJhaWxpbmdTbGFzaCkge1xuICAgIHBhdGggKz0gJy8nO1xuICB9XG5cbiAgcmV0dXJuIChpc0Fic29sdXRlID8gJy8nIDogJycpICsgcGF0aDtcbn07XG5cbi8vIHBvc2l4IHZlcnNpb25cbmV4cG9ydHMuaXNBYnNvbHV0ZSA9IGZ1bmN0aW9uKHBhdGgpIHtcbiAgcmV0dXJuIHBhdGguY2hhckF0KDApID09PSAnLyc7XG59O1xuXG4vLyBwb3NpeCB2ZXJzaW9uXG5leHBvcnRzLmpvaW4gPSBmdW5jdGlvbigpIHtcbiAgdmFyIHBhdGhzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAwKTtcbiAgcmV0dXJuIGV4cG9ydHMubm9ybWFsaXplKGZpbHRlcihwYXRocywgZnVuY3Rpb24ocCwgaW5kZXgpIHtcbiAgICBpZiAodHlwZW9mIHAgIT09ICdzdHJpbmcnKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdBcmd1bWVudHMgdG8gcGF0aC5qb2luIG11c3QgYmUgc3RyaW5ncycpO1xuICAgIH1cbiAgICByZXR1cm4gcDtcbiAgfSkuam9pbignLycpKTtcbn07XG5cblxuLy8gcGF0aC5yZWxhdGl2ZShmcm9tLCB0bylcbi8vIHBvc2l4IHZlcnNpb25cbmV4cG9ydHMucmVsYXRpdmUgPSBmdW5jdGlvbihmcm9tLCB0bykge1xuICBmcm9tID0gZXhwb3J0cy5yZXNvbHZlKGZyb20pLnN1YnN0cigxKTtcbiAgdG8gPSBleHBvcnRzLnJlc29sdmUodG8pLnN1YnN0cigxKTtcblxuICBmdW5jdGlvbiB0cmltKGFycikge1xuICAgIHZhciBzdGFydCA9IDA7XG4gICAgZm9yICg7IHN0YXJ0IDwgYXJyLmxlbmd0aDsgc3RhcnQrKykge1xuICAgICAgaWYgKGFycltzdGFydF0gIT09ICcnKSBicmVhaztcbiAgICB9XG5cbiAgICB2YXIgZW5kID0gYXJyLmxlbmd0aCAtIDE7XG4gICAgZm9yICg7IGVuZCA+PSAwOyBlbmQtLSkge1xuICAgICAgaWYgKGFycltlbmRdICE9PSAnJykgYnJlYWs7XG4gICAgfVxuXG4gICAgaWYgKHN0YXJ0ID4gZW5kKSByZXR1cm4gW107XG4gICAgcmV0dXJuIGFyci5zbGljZShzdGFydCwgZW5kIC0gc3RhcnQgKyAxKTtcbiAgfVxuXG4gIHZhciBmcm9tUGFydHMgPSB0cmltKGZyb20uc3BsaXQoJy8nKSk7XG4gIHZhciB0b1BhcnRzID0gdHJpbSh0by5zcGxpdCgnLycpKTtcblxuICB2YXIgbGVuZ3RoID0gTWF0aC5taW4oZnJvbVBhcnRzLmxlbmd0aCwgdG9QYXJ0cy5sZW5ndGgpO1xuICB2YXIgc2FtZVBhcnRzTGVuZ3RoID0gbGVuZ3RoO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgaWYgKGZyb21QYXJ0c1tpXSAhPT0gdG9QYXJ0c1tpXSkge1xuICAgICAgc2FtZVBhcnRzTGVuZ3RoID0gaTtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuXG4gIHZhciBvdXRwdXRQYXJ0cyA9IFtdO1xuICBmb3IgKHZhciBpID0gc2FtZVBhcnRzTGVuZ3RoOyBpIDwgZnJvbVBhcnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgb3V0cHV0UGFydHMucHVzaCgnLi4nKTtcbiAgfVxuXG4gIG91dHB1dFBhcnRzID0gb3V0cHV0UGFydHMuY29uY2F0KHRvUGFydHMuc2xpY2Uoc2FtZVBhcnRzTGVuZ3RoKSk7XG5cbiAgcmV0dXJuIG91dHB1dFBhcnRzLmpvaW4oJy8nKTtcbn07XG5cbmV4cG9ydHMuc2VwID0gJy8nO1xuZXhwb3J0cy5kZWxpbWl0ZXIgPSAnOic7XG5cbmV4cG9ydHMuZGlybmFtZSA9IGZ1bmN0aW9uKHBhdGgpIHtcbiAgdmFyIHJlc3VsdCA9IHNwbGl0UGF0aChwYXRoKSxcbiAgICAgIHJvb3QgPSByZXN1bHRbMF0sXG4gICAgICBkaXIgPSByZXN1bHRbMV07XG5cbiAgaWYgKCFyb290ICYmICFkaXIpIHtcbiAgICAvLyBObyBkaXJuYW1lIHdoYXRzb2V2ZXJcbiAgICByZXR1cm4gJy4nO1xuICB9XG5cbiAgaWYgKGRpcikge1xuICAgIC8vIEl0IGhhcyBhIGRpcm5hbWUsIHN0cmlwIHRyYWlsaW5nIHNsYXNoXG4gICAgZGlyID0gZGlyLnN1YnN0cigwLCBkaXIubGVuZ3RoIC0gMSk7XG4gIH1cblxuICByZXR1cm4gcm9vdCArIGRpcjtcbn07XG5cblxuZXhwb3J0cy5iYXNlbmFtZSA9IGZ1bmN0aW9uKHBhdGgsIGV4dCkge1xuICB2YXIgZiA9IHNwbGl0UGF0aChwYXRoKVsyXTtcbiAgLy8gVE9ETzogbWFrZSB0aGlzIGNvbXBhcmlzb24gY2FzZS1pbnNlbnNpdGl2ZSBvbiB3aW5kb3dzP1xuICBpZiAoZXh0ICYmIGYuc3Vic3RyKC0xICogZXh0Lmxlbmd0aCkgPT09IGV4dCkge1xuICAgIGYgPSBmLnN1YnN0cigwLCBmLmxlbmd0aCAtIGV4dC5sZW5ndGgpO1xuICB9XG4gIHJldHVybiBmO1xufTtcblxuXG5leHBvcnRzLmV4dG5hbWUgPSBmdW5jdGlvbihwYXRoKSB7XG4gIHJldHVybiBzcGxpdFBhdGgocGF0aClbM107XG59O1xuXG5mdW5jdGlvbiBmaWx0ZXIgKHhzLCBmKSB7XG4gICAgaWYgKHhzLmZpbHRlcikgcmV0dXJuIHhzLmZpbHRlcihmKTtcbiAgICB2YXIgcmVzID0gW107XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB4cy5sZW5ndGg7IGkrKykge1xuICAgICAgICBpZiAoZih4c1tpXSwgaSwgeHMpKSByZXMucHVzaCh4c1tpXSk7XG4gICAgfVxuICAgIHJldHVybiByZXM7XG59XG5cbi8vIFN0cmluZy5wcm90b3R5cGUuc3Vic3RyIC0gbmVnYXRpdmUgaW5kZXggZG9uJ3Qgd29yayBpbiBJRThcbnZhciBzdWJzdHIgPSAnYWInLnN1YnN0cigtMSkgPT09ICdiJ1xuICAgID8gZnVuY3Rpb24gKHN0ciwgc3RhcnQsIGxlbikgeyByZXR1cm4gc3RyLnN1YnN0cihzdGFydCwgbGVuKSB9XG4gICAgOiBmdW5jdGlvbiAoc3RyLCBzdGFydCwgbGVuKSB7XG4gICAgICAgIGlmIChzdGFydCA8IDApIHN0YXJ0ID0gc3RyLmxlbmd0aCArIHN0YXJ0O1xuICAgICAgICByZXR1cm4gc3RyLnN1YnN0cihzdGFydCwgbGVuKTtcbiAgICB9XG47XG4iLCIvLyBzaGltIGZvciB1c2luZyBwcm9jZXNzIGluIGJyb3dzZXJcblxudmFyIHByb2Nlc3MgPSBtb2R1bGUuZXhwb3J0cyA9IHt9O1xudmFyIHF1ZXVlID0gW107XG52YXIgZHJhaW5pbmcgPSBmYWxzZTtcbnZhciBjdXJyZW50UXVldWU7XG52YXIgcXVldWVJbmRleCA9IC0xO1xuXG5mdW5jdGlvbiBjbGVhblVwTmV4dFRpY2soKSB7XG4gICAgZHJhaW5pbmcgPSBmYWxzZTtcbiAgICBpZiAoY3VycmVudFF1ZXVlLmxlbmd0aCkge1xuICAgICAgICBxdWV1ZSA9IGN1cnJlbnRRdWV1ZS5jb25jYXQocXVldWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHF1ZXVlSW5kZXggPSAtMTtcbiAgICB9XG4gICAgaWYgKHF1ZXVlLmxlbmd0aCkge1xuICAgICAgICBkcmFpblF1ZXVlKCk7XG4gICAgfVxufVxuXG5mdW5jdGlvbiBkcmFpblF1ZXVlKCkge1xuICAgIGlmIChkcmFpbmluZykge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIHZhciB0aW1lb3V0ID0gc2V0VGltZW91dChjbGVhblVwTmV4dFRpY2spO1xuICAgIGRyYWluaW5nID0gdHJ1ZTtcblxuICAgIHZhciBsZW4gPSBxdWV1ZS5sZW5ndGg7XG4gICAgd2hpbGUobGVuKSB7XG4gICAgICAgIGN1cnJlbnRRdWV1ZSA9IHF1ZXVlO1xuICAgICAgICBxdWV1ZSA9IFtdO1xuICAgICAgICB3aGlsZSAoKytxdWV1ZUluZGV4IDwgbGVuKSB7XG4gICAgICAgICAgICBpZiAoY3VycmVudFF1ZXVlKSB7XG4gICAgICAgICAgICAgICAgY3VycmVudFF1ZXVlW3F1ZXVlSW5kZXhdLnJ1bigpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHF1ZXVlSW5kZXggPSAtMTtcbiAgICAgICAgbGVuID0gcXVldWUubGVuZ3RoO1xuICAgIH1cbiAgICBjdXJyZW50UXVldWUgPSBudWxsO1xuICAgIGRyYWluaW5nID0gZmFsc2U7XG4gICAgY2xlYXJUaW1lb3V0KHRpbWVvdXQpO1xufVxuXG5wcm9jZXNzLm5leHRUaWNrID0gZnVuY3Rpb24gKGZ1bikge1xuICAgIHZhciBhcmdzID0gbmV3IEFycmF5KGFyZ3VtZW50cy5sZW5ndGggLSAxKTtcbiAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGFyZ3NbaSAtIDFdID0gYXJndW1lbnRzW2ldO1xuICAgICAgICB9XG4gICAgfVxuICAgIHF1ZXVlLnB1c2gobmV3IEl0ZW0oZnVuLCBhcmdzKSk7XG4gICAgaWYgKHF1ZXVlLmxlbmd0aCA9PT0gMSAmJiAhZHJhaW5pbmcpIHtcbiAgICAgICAgc2V0VGltZW91dChkcmFpblF1ZXVlLCAwKTtcbiAgICB9XG59O1xuXG4vLyB2OCBsaWtlcyBwcmVkaWN0aWJsZSBvYmplY3RzXG5mdW5jdGlvbiBJdGVtKGZ1biwgYXJyYXkpIHtcbiAgICB0aGlzLmZ1biA9IGZ1bjtcbiAgICB0aGlzLmFycmF5ID0gYXJyYXk7XG59XG5JdGVtLnByb3RvdHlwZS5ydW4gPSBmdW5jdGlvbiAoKSB7XG4gICAgdGhpcy5mdW4uYXBwbHkobnVsbCwgdGhpcy5hcnJheSk7XG59O1xucHJvY2Vzcy50aXRsZSA9ICdicm93c2VyJztcbnByb2Nlc3MuYnJvd3NlciA9IHRydWU7XG5wcm9jZXNzLmVudiA9IHt9O1xucHJvY2Vzcy5hcmd2ID0gW107XG5wcm9jZXNzLnZlcnNpb24gPSAnJzsgLy8gZW1wdHkgc3RyaW5nIHRvIGF2b2lkIHJlZ2V4cCBpc3N1ZXNcbnByb2Nlc3MudmVyc2lvbnMgPSB7fTtcblxuZnVuY3Rpb24gbm9vcCgpIHt9XG5cbnByb2Nlc3Mub24gPSBub29wO1xucHJvY2Vzcy5hZGRMaXN0ZW5lciA9IG5vb3A7XG5wcm9jZXNzLm9uY2UgPSBub29wO1xucHJvY2Vzcy5vZmYgPSBub29wO1xucHJvY2Vzcy5yZW1vdmVMaXN0ZW5lciA9IG5vb3A7XG5wcm9jZXNzLnJlbW92ZUFsbExpc3RlbmVycyA9IG5vb3A7XG5wcm9jZXNzLmVtaXQgPSBub29wO1xuXG5wcm9jZXNzLmJpbmRpbmcgPSBmdW5jdGlvbiAobmFtZSkge1xuICAgIHRocm93IG5ldyBFcnJvcigncHJvY2Vzcy5iaW5kaW5nIGlzIG5vdCBzdXBwb3J0ZWQnKTtcbn07XG5cbnByb2Nlc3MuY3dkID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gJy8nIH07XG5wcm9jZXNzLmNoZGlyID0gZnVuY3Rpb24gKGRpcikge1xuICAgIHRocm93IG5ldyBFcnJvcigncHJvY2Vzcy5jaGRpciBpcyBub3Qgc3VwcG9ydGVkJyk7XG59O1xucHJvY2Vzcy51bWFzayA9IGZ1bmN0aW9uKCkgeyByZXR1cm4gMDsgfTtcbiIsIi8qISBodHRwczovL210aHMuYmUvcHVueWNvZGUgdjEuNC4wIGJ5IEBtYXRoaWFzICovXG47KGZ1bmN0aW9uKHJvb3QpIHtcblxuXHQvKiogRGV0ZWN0IGZyZWUgdmFyaWFibGVzICovXG5cdHZhciBmcmVlRXhwb3J0cyA9IHR5cGVvZiBleHBvcnRzID09ICdvYmplY3QnICYmIGV4cG9ydHMgJiZcblx0XHQhZXhwb3J0cy5ub2RlVHlwZSAmJiBleHBvcnRzO1xuXHR2YXIgZnJlZU1vZHVsZSA9IHR5cGVvZiBtb2R1bGUgPT0gJ29iamVjdCcgJiYgbW9kdWxlICYmXG5cdFx0IW1vZHVsZS5ub2RlVHlwZSAmJiBtb2R1bGU7XG5cdHZhciBmcmVlR2xvYmFsID0gdHlwZW9mIGdsb2JhbCA9PSAnb2JqZWN0JyAmJiBnbG9iYWw7XG5cdGlmIChcblx0XHRmcmVlR2xvYmFsLmdsb2JhbCA9PT0gZnJlZUdsb2JhbCB8fFxuXHRcdGZyZWVHbG9iYWwud2luZG93ID09PSBmcmVlR2xvYmFsIHx8XG5cdFx0ZnJlZUdsb2JhbC5zZWxmID09PSBmcmVlR2xvYmFsXG5cdCkge1xuXHRcdHJvb3QgPSBmcmVlR2xvYmFsO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoZSBgcHVueWNvZGVgIG9iamVjdC5cblx0ICogQG5hbWUgcHVueWNvZGVcblx0ICogQHR5cGUgT2JqZWN0XG5cdCAqL1xuXHR2YXIgcHVueWNvZGUsXG5cblx0LyoqIEhpZ2hlc3QgcG9zaXRpdmUgc2lnbmVkIDMyLWJpdCBmbG9hdCB2YWx1ZSAqL1xuXHRtYXhJbnQgPSAyMTQ3NDgzNjQ3LCAvLyBha2EuIDB4N0ZGRkZGRkYgb3IgMl4zMS0xXG5cblx0LyoqIEJvb3RzdHJpbmcgcGFyYW1ldGVycyAqL1xuXHRiYXNlID0gMzYsXG5cdHRNaW4gPSAxLFxuXHR0TWF4ID0gMjYsXG5cdHNrZXcgPSAzOCxcblx0ZGFtcCA9IDcwMCxcblx0aW5pdGlhbEJpYXMgPSA3Mixcblx0aW5pdGlhbE4gPSAxMjgsIC8vIDB4ODBcblx0ZGVsaW1pdGVyID0gJy0nLCAvLyAnXFx4MkQnXG5cblx0LyoqIFJlZ3VsYXIgZXhwcmVzc2lvbnMgKi9cblx0cmVnZXhQdW55Y29kZSA9IC9eeG4tLS8sXG5cdHJlZ2V4Tm9uQVNDSUkgPSAvW15cXHgyMC1cXHg3RV0vLCAvLyB1bnByaW50YWJsZSBBU0NJSSBjaGFycyArIG5vbi1BU0NJSSBjaGFyc1xuXHRyZWdleFNlcGFyYXRvcnMgPSAvW1xceDJFXFx1MzAwMlxcdUZGMEVcXHVGRjYxXS9nLCAvLyBSRkMgMzQ5MCBzZXBhcmF0b3JzXG5cblx0LyoqIEVycm9yIG1lc3NhZ2VzICovXG5cdGVycm9ycyA9IHtcblx0XHQnb3ZlcmZsb3cnOiAnT3ZlcmZsb3c6IGlucHV0IG5lZWRzIHdpZGVyIGludGVnZXJzIHRvIHByb2Nlc3MnLFxuXHRcdCdub3QtYmFzaWMnOiAnSWxsZWdhbCBpbnB1dCA+PSAweDgwIChub3QgYSBiYXNpYyBjb2RlIHBvaW50KScsXG5cdFx0J2ludmFsaWQtaW5wdXQnOiAnSW52YWxpZCBpbnB1dCdcblx0fSxcblxuXHQvKiogQ29udmVuaWVuY2Ugc2hvcnRjdXRzICovXG5cdGJhc2VNaW51c1RNaW4gPSBiYXNlIC0gdE1pbixcblx0Zmxvb3IgPSBNYXRoLmZsb29yLFxuXHRzdHJpbmdGcm9tQ2hhckNvZGUgPSBTdHJpbmcuZnJvbUNoYXJDb2RlLFxuXG5cdC8qKiBUZW1wb3JhcnkgdmFyaWFibGUgKi9cblx0a2V5O1xuXG5cdC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuXG5cdC8qKlxuXHQgKiBBIGdlbmVyaWMgZXJyb3IgdXRpbGl0eSBmdW5jdGlvbi5cblx0ICogQHByaXZhdGVcblx0ICogQHBhcmFtIHtTdHJpbmd9IHR5cGUgVGhlIGVycm9yIHR5cGUuXG5cdCAqIEByZXR1cm5zIHtFcnJvcn0gVGhyb3dzIGEgYFJhbmdlRXJyb3JgIHdpdGggdGhlIGFwcGxpY2FibGUgZXJyb3IgbWVzc2FnZS5cblx0ICovXG5cdGZ1bmN0aW9uIGVycm9yKHR5cGUpIHtcblx0XHR0aHJvdyBuZXcgUmFuZ2VFcnJvcihlcnJvcnNbdHlwZV0pO1xuXHR9XG5cblx0LyoqXG5cdCAqIEEgZ2VuZXJpYyBgQXJyYXkjbWFwYCB1dGlsaXR5IGZ1bmN0aW9uLlxuXHQgKiBAcHJpdmF0ZVxuXHQgKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gaXRlcmF0ZSBvdmVyLlxuXHQgKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFjayBUaGUgZnVuY3Rpb24gdGhhdCBnZXRzIGNhbGxlZCBmb3IgZXZlcnkgYXJyYXlcblx0ICogaXRlbS5cblx0ICogQHJldHVybnMge0FycmF5fSBBIG5ldyBhcnJheSBvZiB2YWx1ZXMgcmV0dXJuZWQgYnkgdGhlIGNhbGxiYWNrIGZ1bmN0aW9uLlxuXHQgKi9cblx0ZnVuY3Rpb24gbWFwKGFycmF5LCBmbikge1xuXHRcdHZhciBsZW5ndGggPSBhcnJheS5sZW5ndGg7XG5cdFx0dmFyIHJlc3VsdCA9IFtdO1xuXHRcdHdoaWxlIChsZW5ndGgtLSkge1xuXHRcdFx0cmVzdWx0W2xlbmd0aF0gPSBmbihhcnJheVtsZW5ndGhdKTtcblx0XHR9XG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fVxuXG5cdC8qKlxuXHQgKiBBIHNpbXBsZSBgQXJyYXkjbWFwYC1saWtlIHdyYXBwZXIgdG8gd29yayB3aXRoIGRvbWFpbiBuYW1lIHN0cmluZ3Mgb3IgZW1haWxcblx0ICogYWRkcmVzc2VzLlxuXHQgKiBAcHJpdmF0ZVxuXHQgKiBAcGFyYW0ge1N0cmluZ30gZG9tYWluIFRoZSBkb21haW4gbmFtZSBvciBlbWFpbCBhZGRyZXNzLlxuXHQgKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFjayBUaGUgZnVuY3Rpb24gdGhhdCBnZXRzIGNhbGxlZCBmb3IgZXZlcnlcblx0ICogY2hhcmFjdGVyLlxuXHQgKiBAcmV0dXJucyB7QXJyYXl9IEEgbmV3IHN0cmluZyBvZiBjaGFyYWN0ZXJzIHJldHVybmVkIGJ5IHRoZSBjYWxsYmFja1xuXHQgKiBmdW5jdGlvbi5cblx0ICovXG5cdGZ1bmN0aW9uIG1hcERvbWFpbihzdHJpbmcsIGZuKSB7XG5cdFx0dmFyIHBhcnRzID0gc3RyaW5nLnNwbGl0KCdAJyk7XG5cdFx0dmFyIHJlc3VsdCA9ICcnO1xuXHRcdGlmIChwYXJ0cy5sZW5ndGggPiAxKSB7XG5cdFx0XHQvLyBJbiBlbWFpbCBhZGRyZXNzZXMsIG9ubHkgdGhlIGRvbWFpbiBuYW1lIHNob3VsZCBiZSBwdW55Y29kZWQuIExlYXZlXG5cdFx0XHQvLyB0aGUgbG9jYWwgcGFydCAoaS5lLiBldmVyeXRoaW5nIHVwIHRvIGBAYCkgaW50YWN0LlxuXHRcdFx0cmVzdWx0ID0gcGFydHNbMF0gKyAnQCc7XG5cdFx0XHRzdHJpbmcgPSBwYXJ0c1sxXTtcblx0XHR9XG5cdFx0Ly8gQXZvaWQgYHNwbGl0KHJlZ2V4KWAgZm9yIElFOCBjb21wYXRpYmlsaXR5LiBTZWUgIzE3LlxuXHRcdHN0cmluZyA9IHN0cmluZy5yZXBsYWNlKHJlZ2V4U2VwYXJhdG9ycywgJ1xceDJFJyk7XG5cdFx0dmFyIGxhYmVscyA9IHN0cmluZy5zcGxpdCgnLicpO1xuXHRcdHZhciBlbmNvZGVkID0gbWFwKGxhYmVscywgZm4pLmpvaW4oJy4nKTtcblx0XHRyZXR1cm4gcmVzdWx0ICsgZW5jb2RlZDtcblx0fVxuXG5cdC8qKlxuXHQgKiBDcmVhdGVzIGFuIGFycmF5IGNvbnRhaW5pbmcgdGhlIG51bWVyaWMgY29kZSBwb2ludHMgb2YgZWFjaCBVbmljb2RlXG5cdCAqIGNoYXJhY3RlciBpbiB0aGUgc3RyaW5nLiBXaGlsZSBKYXZhU2NyaXB0IHVzZXMgVUNTLTIgaW50ZXJuYWxseSxcblx0ICogdGhpcyBmdW5jdGlvbiB3aWxsIGNvbnZlcnQgYSBwYWlyIG9mIHN1cnJvZ2F0ZSBoYWx2ZXMgKGVhY2ggb2Ygd2hpY2hcblx0ICogVUNTLTIgZXhwb3NlcyBhcyBzZXBhcmF0ZSBjaGFyYWN0ZXJzKSBpbnRvIGEgc2luZ2xlIGNvZGUgcG9pbnQsXG5cdCAqIG1hdGNoaW5nIFVURi0xNi5cblx0ICogQHNlZSBgcHVueWNvZGUudWNzMi5lbmNvZGVgXG5cdCAqIEBzZWUgPGh0dHBzOi8vbWF0aGlhc2J5bmVucy5iZS9ub3Rlcy9qYXZhc2NyaXB0LWVuY29kaW5nPlxuXHQgKiBAbWVtYmVyT2YgcHVueWNvZGUudWNzMlxuXHQgKiBAbmFtZSBkZWNvZGVcblx0ICogQHBhcmFtIHtTdHJpbmd9IHN0cmluZyBUaGUgVW5pY29kZSBpbnB1dCBzdHJpbmcgKFVDUy0yKS5cblx0ICogQHJldHVybnMge0FycmF5fSBUaGUgbmV3IGFycmF5IG9mIGNvZGUgcG9pbnRzLlxuXHQgKi9cblx0ZnVuY3Rpb24gdWNzMmRlY29kZShzdHJpbmcpIHtcblx0XHR2YXIgb3V0cHV0ID0gW10sXG5cdFx0ICAgIGNvdW50ZXIgPSAwLFxuXHRcdCAgICBsZW5ndGggPSBzdHJpbmcubGVuZ3RoLFxuXHRcdCAgICB2YWx1ZSxcblx0XHQgICAgZXh0cmE7XG5cdFx0d2hpbGUgKGNvdW50ZXIgPCBsZW5ndGgpIHtcblx0XHRcdHZhbHVlID0gc3RyaW5nLmNoYXJDb2RlQXQoY291bnRlcisrKTtcblx0XHRcdGlmICh2YWx1ZSA+PSAweEQ4MDAgJiYgdmFsdWUgPD0gMHhEQkZGICYmIGNvdW50ZXIgPCBsZW5ndGgpIHtcblx0XHRcdFx0Ly8gaGlnaCBzdXJyb2dhdGUsIGFuZCB0aGVyZSBpcyBhIG5leHQgY2hhcmFjdGVyXG5cdFx0XHRcdGV4dHJhID0gc3RyaW5nLmNoYXJDb2RlQXQoY291bnRlcisrKTtcblx0XHRcdFx0aWYgKChleHRyYSAmIDB4RkMwMCkgPT0gMHhEQzAwKSB7IC8vIGxvdyBzdXJyb2dhdGVcblx0XHRcdFx0XHRvdXRwdXQucHVzaCgoKHZhbHVlICYgMHgzRkYpIDw8IDEwKSArIChleHRyYSAmIDB4M0ZGKSArIDB4MTAwMDApO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdC8vIHVubWF0Y2hlZCBzdXJyb2dhdGU7IG9ubHkgYXBwZW5kIHRoaXMgY29kZSB1bml0LCBpbiBjYXNlIHRoZSBuZXh0XG5cdFx0XHRcdFx0Ly8gY29kZSB1bml0IGlzIHRoZSBoaWdoIHN1cnJvZ2F0ZSBvZiBhIHN1cnJvZ2F0ZSBwYWlyXG5cdFx0XHRcdFx0b3V0cHV0LnB1c2godmFsdWUpO1xuXHRcdFx0XHRcdGNvdW50ZXItLTtcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0b3V0cHV0LnB1c2godmFsdWUpO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gb3V0cHV0O1xuXHR9XG5cblx0LyoqXG5cdCAqIENyZWF0ZXMgYSBzdHJpbmcgYmFzZWQgb24gYW4gYXJyYXkgb2YgbnVtZXJpYyBjb2RlIHBvaW50cy5cblx0ICogQHNlZSBgcHVueWNvZGUudWNzMi5kZWNvZGVgXG5cdCAqIEBtZW1iZXJPZiBwdW55Y29kZS51Y3MyXG5cdCAqIEBuYW1lIGVuY29kZVxuXHQgKiBAcGFyYW0ge0FycmF5fSBjb2RlUG9pbnRzIFRoZSBhcnJheSBvZiBudW1lcmljIGNvZGUgcG9pbnRzLlxuXHQgKiBAcmV0dXJucyB7U3RyaW5nfSBUaGUgbmV3IFVuaWNvZGUgc3RyaW5nIChVQ1MtMikuXG5cdCAqL1xuXHRmdW5jdGlvbiB1Y3MyZW5jb2RlKGFycmF5KSB7XG5cdFx0cmV0dXJuIG1hcChhcnJheSwgZnVuY3Rpb24odmFsdWUpIHtcblx0XHRcdHZhciBvdXRwdXQgPSAnJztcblx0XHRcdGlmICh2YWx1ZSA+IDB4RkZGRikge1xuXHRcdFx0XHR2YWx1ZSAtPSAweDEwMDAwO1xuXHRcdFx0XHRvdXRwdXQgKz0gc3RyaW5nRnJvbUNoYXJDb2RlKHZhbHVlID4+PiAxMCAmIDB4M0ZGIHwgMHhEODAwKTtcblx0XHRcdFx0dmFsdWUgPSAweERDMDAgfCB2YWx1ZSAmIDB4M0ZGO1xuXHRcdFx0fVxuXHRcdFx0b3V0cHV0ICs9IHN0cmluZ0Zyb21DaGFyQ29kZSh2YWx1ZSk7XG5cdFx0XHRyZXR1cm4gb3V0cHV0O1xuXHRcdH0pLmpvaW4oJycpO1xuXHR9XG5cblx0LyoqXG5cdCAqIENvbnZlcnRzIGEgYmFzaWMgY29kZSBwb2ludCBpbnRvIGEgZGlnaXQvaW50ZWdlci5cblx0ICogQHNlZSBgZGlnaXRUb0Jhc2ljKClgXG5cdCAqIEBwcml2YXRlXG5cdCAqIEBwYXJhbSB7TnVtYmVyfSBjb2RlUG9pbnQgVGhlIGJhc2ljIG51bWVyaWMgY29kZSBwb2ludCB2YWx1ZS5cblx0ICogQHJldHVybnMge051bWJlcn0gVGhlIG51bWVyaWMgdmFsdWUgb2YgYSBiYXNpYyBjb2RlIHBvaW50IChmb3IgdXNlIGluXG5cdCAqIHJlcHJlc2VudGluZyBpbnRlZ2VycykgaW4gdGhlIHJhbmdlIGAwYCB0byBgYmFzZSAtIDFgLCBvciBgYmFzZWAgaWZcblx0ICogdGhlIGNvZGUgcG9pbnQgZG9lcyBub3QgcmVwcmVzZW50IGEgdmFsdWUuXG5cdCAqL1xuXHRmdW5jdGlvbiBiYXNpY1RvRGlnaXQoY29kZVBvaW50KSB7XG5cdFx0aWYgKGNvZGVQb2ludCAtIDQ4IDwgMTApIHtcblx0XHRcdHJldHVybiBjb2RlUG9pbnQgLSAyMjtcblx0XHR9XG5cdFx0aWYgKGNvZGVQb2ludCAtIDY1IDwgMjYpIHtcblx0XHRcdHJldHVybiBjb2RlUG9pbnQgLSA2NTtcblx0XHR9XG5cdFx0aWYgKGNvZGVQb2ludCAtIDk3IDwgMjYpIHtcblx0XHRcdHJldHVybiBjb2RlUG9pbnQgLSA5Nztcblx0XHR9XG5cdFx0cmV0dXJuIGJhc2U7XG5cdH1cblxuXHQvKipcblx0ICogQ29udmVydHMgYSBkaWdpdC9pbnRlZ2VyIGludG8gYSBiYXNpYyBjb2RlIHBvaW50LlxuXHQgKiBAc2VlIGBiYXNpY1RvRGlnaXQoKWBcblx0ICogQHByaXZhdGVcblx0ICogQHBhcmFtIHtOdW1iZXJ9IGRpZ2l0IFRoZSBudW1lcmljIHZhbHVlIG9mIGEgYmFzaWMgY29kZSBwb2ludC5cblx0ICogQHJldHVybnMge051bWJlcn0gVGhlIGJhc2ljIGNvZGUgcG9pbnQgd2hvc2UgdmFsdWUgKHdoZW4gdXNlZCBmb3Jcblx0ICogcmVwcmVzZW50aW5nIGludGVnZXJzKSBpcyBgZGlnaXRgLCB3aGljaCBuZWVkcyB0byBiZSBpbiB0aGUgcmFuZ2Vcblx0ICogYDBgIHRvIGBiYXNlIC0gMWAuIElmIGBmbGFnYCBpcyBub24temVybywgdGhlIHVwcGVyY2FzZSBmb3JtIGlzXG5cdCAqIHVzZWQ7IGVsc2UsIHRoZSBsb3dlcmNhc2UgZm9ybSBpcyB1c2VkLiBUaGUgYmVoYXZpb3IgaXMgdW5kZWZpbmVkXG5cdCAqIGlmIGBmbGFnYCBpcyBub24temVybyBhbmQgYGRpZ2l0YCBoYXMgbm8gdXBwZXJjYXNlIGZvcm0uXG5cdCAqL1xuXHRmdW5jdGlvbiBkaWdpdFRvQmFzaWMoZGlnaXQsIGZsYWcpIHtcblx0XHQvLyAgMC4uMjUgbWFwIHRvIEFTQ0lJIGEuLnogb3IgQS4uWlxuXHRcdC8vIDI2Li4zNSBtYXAgdG8gQVNDSUkgMC4uOVxuXHRcdHJldHVybiBkaWdpdCArIDIyICsgNzUgKiAoZGlnaXQgPCAyNikgLSAoKGZsYWcgIT0gMCkgPDwgNSk7XG5cdH1cblxuXHQvKipcblx0ICogQmlhcyBhZGFwdGF0aW9uIGZ1bmN0aW9uIGFzIHBlciBzZWN0aW9uIDMuNCBvZiBSRkMgMzQ5Mi5cblx0ICogaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzM0OTIjc2VjdGlvbi0zLjRcblx0ICogQHByaXZhdGVcblx0ICovXG5cdGZ1bmN0aW9uIGFkYXB0KGRlbHRhLCBudW1Qb2ludHMsIGZpcnN0VGltZSkge1xuXHRcdHZhciBrID0gMDtcblx0XHRkZWx0YSA9IGZpcnN0VGltZSA/IGZsb29yKGRlbHRhIC8gZGFtcCkgOiBkZWx0YSA+PiAxO1xuXHRcdGRlbHRhICs9IGZsb29yKGRlbHRhIC8gbnVtUG9pbnRzKTtcblx0XHRmb3IgKC8qIG5vIGluaXRpYWxpemF0aW9uICovOyBkZWx0YSA+IGJhc2VNaW51c1RNaW4gKiB0TWF4ID4+IDE7IGsgKz0gYmFzZSkge1xuXHRcdFx0ZGVsdGEgPSBmbG9vcihkZWx0YSAvIGJhc2VNaW51c1RNaW4pO1xuXHRcdH1cblx0XHRyZXR1cm4gZmxvb3IoayArIChiYXNlTWludXNUTWluICsgMSkgKiBkZWx0YSAvIChkZWx0YSArIHNrZXcpKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBDb252ZXJ0cyBhIFB1bnljb2RlIHN0cmluZyBvZiBBU0NJSS1vbmx5IHN5bWJvbHMgdG8gYSBzdHJpbmcgb2YgVW5pY29kZVxuXHQgKiBzeW1ib2xzLlxuXHQgKiBAbWVtYmVyT2YgcHVueWNvZGVcblx0ICogQHBhcmFtIHtTdHJpbmd9IGlucHV0IFRoZSBQdW55Y29kZSBzdHJpbmcgb2YgQVNDSUktb25seSBzeW1ib2xzLlxuXHQgKiBAcmV0dXJucyB7U3RyaW5nfSBUaGUgcmVzdWx0aW5nIHN0cmluZyBvZiBVbmljb2RlIHN5bWJvbHMuXG5cdCAqL1xuXHRmdW5jdGlvbiBkZWNvZGUoaW5wdXQpIHtcblx0XHQvLyBEb24ndCB1c2UgVUNTLTJcblx0XHR2YXIgb3V0cHV0ID0gW10sXG5cdFx0ICAgIGlucHV0TGVuZ3RoID0gaW5wdXQubGVuZ3RoLFxuXHRcdCAgICBvdXQsXG5cdFx0ICAgIGkgPSAwLFxuXHRcdCAgICBuID0gaW5pdGlhbE4sXG5cdFx0ICAgIGJpYXMgPSBpbml0aWFsQmlhcyxcblx0XHQgICAgYmFzaWMsXG5cdFx0ICAgIGosXG5cdFx0ICAgIGluZGV4LFxuXHRcdCAgICBvbGRpLFxuXHRcdCAgICB3LFxuXHRcdCAgICBrLFxuXHRcdCAgICBkaWdpdCxcblx0XHQgICAgdCxcblx0XHQgICAgLyoqIENhY2hlZCBjYWxjdWxhdGlvbiByZXN1bHRzICovXG5cdFx0ICAgIGJhc2VNaW51c1Q7XG5cblx0XHQvLyBIYW5kbGUgdGhlIGJhc2ljIGNvZGUgcG9pbnRzOiBsZXQgYGJhc2ljYCBiZSB0aGUgbnVtYmVyIG9mIGlucHV0IGNvZGVcblx0XHQvLyBwb2ludHMgYmVmb3JlIHRoZSBsYXN0IGRlbGltaXRlciwgb3IgYDBgIGlmIHRoZXJlIGlzIG5vbmUsIHRoZW4gY29weVxuXHRcdC8vIHRoZSBmaXJzdCBiYXNpYyBjb2RlIHBvaW50cyB0byB0aGUgb3V0cHV0LlxuXG5cdFx0YmFzaWMgPSBpbnB1dC5sYXN0SW5kZXhPZihkZWxpbWl0ZXIpO1xuXHRcdGlmIChiYXNpYyA8IDApIHtcblx0XHRcdGJhc2ljID0gMDtcblx0XHR9XG5cblx0XHRmb3IgKGogPSAwOyBqIDwgYmFzaWM7ICsraikge1xuXHRcdFx0Ly8gaWYgaXQncyBub3QgYSBiYXNpYyBjb2RlIHBvaW50XG5cdFx0XHRpZiAoaW5wdXQuY2hhckNvZGVBdChqKSA+PSAweDgwKSB7XG5cdFx0XHRcdGVycm9yKCdub3QtYmFzaWMnKTtcblx0XHRcdH1cblx0XHRcdG91dHB1dC5wdXNoKGlucHV0LmNoYXJDb2RlQXQoaikpO1xuXHRcdH1cblxuXHRcdC8vIE1haW4gZGVjb2RpbmcgbG9vcDogc3RhcnQganVzdCBhZnRlciB0aGUgbGFzdCBkZWxpbWl0ZXIgaWYgYW55IGJhc2ljIGNvZGVcblx0XHQvLyBwb2ludHMgd2VyZSBjb3BpZWQ7IHN0YXJ0IGF0IHRoZSBiZWdpbm5pbmcgb3RoZXJ3aXNlLlxuXG5cdFx0Zm9yIChpbmRleCA9IGJhc2ljID4gMCA/IGJhc2ljICsgMSA6IDA7IGluZGV4IDwgaW5wdXRMZW5ndGg7IC8qIG5vIGZpbmFsIGV4cHJlc3Npb24gKi8pIHtcblxuXHRcdFx0Ly8gYGluZGV4YCBpcyB0aGUgaW5kZXggb2YgdGhlIG5leHQgY2hhcmFjdGVyIHRvIGJlIGNvbnN1bWVkLlxuXHRcdFx0Ly8gRGVjb2RlIGEgZ2VuZXJhbGl6ZWQgdmFyaWFibGUtbGVuZ3RoIGludGVnZXIgaW50byBgZGVsdGFgLFxuXHRcdFx0Ly8gd2hpY2ggZ2V0cyBhZGRlZCB0byBgaWAuIFRoZSBvdmVyZmxvdyBjaGVja2luZyBpcyBlYXNpZXJcblx0XHRcdC8vIGlmIHdlIGluY3JlYXNlIGBpYCBhcyB3ZSBnbywgdGhlbiBzdWJ0cmFjdCBvZmYgaXRzIHN0YXJ0aW5nXG5cdFx0XHQvLyB2YWx1ZSBhdCB0aGUgZW5kIHRvIG9idGFpbiBgZGVsdGFgLlxuXHRcdFx0Zm9yIChvbGRpID0gaSwgdyA9IDEsIGsgPSBiYXNlOyAvKiBubyBjb25kaXRpb24gKi87IGsgKz0gYmFzZSkge1xuXG5cdFx0XHRcdGlmIChpbmRleCA+PSBpbnB1dExlbmd0aCkge1xuXHRcdFx0XHRcdGVycm9yKCdpbnZhbGlkLWlucHV0Jyk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRkaWdpdCA9IGJhc2ljVG9EaWdpdChpbnB1dC5jaGFyQ29kZUF0KGluZGV4KyspKTtcblxuXHRcdFx0XHRpZiAoZGlnaXQgPj0gYmFzZSB8fCBkaWdpdCA+IGZsb29yKChtYXhJbnQgLSBpKSAvIHcpKSB7XG5cdFx0XHRcdFx0ZXJyb3IoJ292ZXJmbG93Jyk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpICs9IGRpZ2l0ICogdztcblx0XHRcdFx0dCA9IGsgPD0gYmlhcyA/IHRNaW4gOiAoayA+PSBiaWFzICsgdE1heCA/IHRNYXggOiBrIC0gYmlhcyk7XG5cblx0XHRcdFx0aWYgKGRpZ2l0IDwgdCkge1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0YmFzZU1pbnVzVCA9IGJhc2UgLSB0O1xuXHRcdFx0XHRpZiAodyA+IGZsb29yKG1heEludCAvIGJhc2VNaW51c1QpKSB7XG5cdFx0XHRcdFx0ZXJyb3IoJ292ZXJmbG93Jyk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHR3ICo9IGJhc2VNaW51c1Q7XG5cblx0XHRcdH1cblxuXHRcdFx0b3V0ID0gb3V0cHV0Lmxlbmd0aCArIDE7XG5cdFx0XHRiaWFzID0gYWRhcHQoaSAtIG9sZGksIG91dCwgb2xkaSA9PSAwKTtcblxuXHRcdFx0Ly8gYGlgIHdhcyBzdXBwb3NlZCB0byB3cmFwIGFyb3VuZCBmcm9tIGBvdXRgIHRvIGAwYCxcblx0XHRcdC8vIGluY3JlbWVudGluZyBgbmAgZWFjaCB0aW1lLCBzbyB3ZSdsbCBmaXggdGhhdCBub3c6XG5cdFx0XHRpZiAoZmxvb3IoaSAvIG91dCkgPiBtYXhJbnQgLSBuKSB7XG5cdFx0XHRcdGVycm9yKCdvdmVyZmxvdycpO1xuXHRcdFx0fVxuXG5cdFx0XHRuICs9IGZsb29yKGkgLyBvdXQpO1xuXHRcdFx0aSAlPSBvdXQ7XG5cblx0XHRcdC8vIEluc2VydCBgbmAgYXQgcG9zaXRpb24gYGlgIG9mIHRoZSBvdXRwdXRcblx0XHRcdG91dHB1dC5zcGxpY2UoaSsrLCAwLCBuKTtcblxuXHRcdH1cblxuXHRcdHJldHVybiB1Y3MyZW5jb2RlKG91dHB1dCk7XG5cdH1cblxuXHQvKipcblx0ICogQ29udmVydHMgYSBzdHJpbmcgb2YgVW5pY29kZSBzeW1ib2xzIChlLmcuIGEgZG9tYWluIG5hbWUgbGFiZWwpIHRvIGFcblx0ICogUHVueWNvZGUgc3RyaW5nIG9mIEFTQ0lJLW9ubHkgc3ltYm9scy5cblx0ICogQG1lbWJlck9mIHB1bnljb2RlXG5cdCAqIEBwYXJhbSB7U3RyaW5nfSBpbnB1dCBUaGUgc3RyaW5nIG9mIFVuaWNvZGUgc3ltYm9scy5cblx0ICogQHJldHVybnMge1N0cmluZ30gVGhlIHJlc3VsdGluZyBQdW55Y29kZSBzdHJpbmcgb2YgQVNDSUktb25seSBzeW1ib2xzLlxuXHQgKi9cblx0ZnVuY3Rpb24gZW5jb2RlKGlucHV0KSB7XG5cdFx0dmFyIG4sXG5cdFx0ICAgIGRlbHRhLFxuXHRcdCAgICBoYW5kbGVkQ1BDb3VudCxcblx0XHQgICAgYmFzaWNMZW5ndGgsXG5cdFx0ICAgIGJpYXMsXG5cdFx0ICAgIGosXG5cdFx0ICAgIG0sXG5cdFx0ICAgIHEsXG5cdFx0ICAgIGssXG5cdFx0ICAgIHQsXG5cdFx0ICAgIGN1cnJlbnRWYWx1ZSxcblx0XHQgICAgb3V0cHV0ID0gW10sXG5cdFx0ICAgIC8qKiBgaW5wdXRMZW5ndGhgIHdpbGwgaG9sZCB0aGUgbnVtYmVyIG9mIGNvZGUgcG9pbnRzIGluIGBpbnB1dGAuICovXG5cdFx0ICAgIGlucHV0TGVuZ3RoLFxuXHRcdCAgICAvKiogQ2FjaGVkIGNhbGN1bGF0aW9uIHJlc3VsdHMgKi9cblx0XHQgICAgaGFuZGxlZENQQ291bnRQbHVzT25lLFxuXHRcdCAgICBiYXNlTWludXNULFxuXHRcdCAgICBxTWludXNUO1xuXG5cdFx0Ly8gQ29udmVydCB0aGUgaW5wdXQgaW4gVUNTLTIgdG8gVW5pY29kZVxuXHRcdGlucHV0ID0gdWNzMmRlY29kZShpbnB1dCk7XG5cblx0XHQvLyBDYWNoZSB0aGUgbGVuZ3RoXG5cdFx0aW5wdXRMZW5ndGggPSBpbnB1dC5sZW5ndGg7XG5cblx0XHQvLyBJbml0aWFsaXplIHRoZSBzdGF0ZVxuXHRcdG4gPSBpbml0aWFsTjtcblx0XHRkZWx0YSA9IDA7XG5cdFx0YmlhcyA9IGluaXRpYWxCaWFzO1xuXG5cdFx0Ly8gSGFuZGxlIHRoZSBiYXNpYyBjb2RlIHBvaW50c1xuXHRcdGZvciAoaiA9IDA7IGogPCBpbnB1dExlbmd0aDsgKytqKSB7XG5cdFx0XHRjdXJyZW50VmFsdWUgPSBpbnB1dFtqXTtcblx0XHRcdGlmIChjdXJyZW50VmFsdWUgPCAweDgwKSB7XG5cdFx0XHRcdG91dHB1dC5wdXNoKHN0cmluZ0Zyb21DaGFyQ29kZShjdXJyZW50VmFsdWUpKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRoYW5kbGVkQ1BDb3VudCA9IGJhc2ljTGVuZ3RoID0gb3V0cHV0Lmxlbmd0aDtcblxuXHRcdC8vIGBoYW5kbGVkQ1BDb3VudGAgaXMgdGhlIG51bWJlciBvZiBjb2RlIHBvaW50cyB0aGF0IGhhdmUgYmVlbiBoYW5kbGVkO1xuXHRcdC8vIGBiYXNpY0xlbmd0aGAgaXMgdGhlIG51bWJlciBvZiBiYXNpYyBjb2RlIHBvaW50cy5cblxuXHRcdC8vIEZpbmlzaCB0aGUgYmFzaWMgc3RyaW5nIC0gaWYgaXQgaXMgbm90IGVtcHR5IC0gd2l0aCBhIGRlbGltaXRlclxuXHRcdGlmIChiYXNpY0xlbmd0aCkge1xuXHRcdFx0b3V0cHV0LnB1c2goZGVsaW1pdGVyKTtcblx0XHR9XG5cblx0XHQvLyBNYWluIGVuY29kaW5nIGxvb3A6XG5cdFx0d2hpbGUgKGhhbmRsZWRDUENvdW50IDwgaW5wdXRMZW5ndGgpIHtcblxuXHRcdFx0Ly8gQWxsIG5vbi1iYXNpYyBjb2RlIHBvaW50cyA8IG4gaGF2ZSBiZWVuIGhhbmRsZWQgYWxyZWFkeS4gRmluZCB0aGUgbmV4dFxuXHRcdFx0Ly8gbGFyZ2VyIG9uZTpcblx0XHRcdGZvciAobSA9IG1heEludCwgaiA9IDA7IGogPCBpbnB1dExlbmd0aDsgKytqKSB7XG5cdFx0XHRcdGN1cnJlbnRWYWx1ZSA9IGlucHV0W2pdO1xuXHRcdFx0XHRpZiAoY3VycmVudFZhbHVlID49IG4gJiYgY3VycmVudFZhbHVlIDwgbSkge1xuXHRcdFx0XHRcdG0gPSBjdXJyZW50VmFsdWU7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0Ly8gSW5jcmVhc2UgYGRlbHRhYCBlbm91Z2ggdG8gYWR2YW5jZSB0aGUgZGVjb2RlcidzIDxuLGk+IHN0YXRlIHRvIDxtLDA+LFxuXHRcdFx0Ly8gYnV0IGd1YXJkIGFnYWluc3Qgb3ZlcmZsb3dcblx0XHRcdGhhbmRsZWRDUENvdW50UGx1c09uZSA9IGhhbmRsZWRDUENvdW50ICsgMTtcblx0XHRcdGlmIChtIC0gbiA+IGZsb29yKChtYXhJbnQgLSBkZWx0YSkgLyBoYW5kbGVkQ1BDb3VudFBsdXNPbmUpKSB7XG5cdFx0XHRcdGVycm9yKCdvdmVyZmxvdycpO1xuXHRcdFx0fVxuXG5cdFx0XHRkZWx0YSArPSAobSAtIG4pICogaGFuZGxlZENQQ291bnRQbHVzT25lO1xuXHRcdFx0biA9IG07XG5cblx0XHRcdGZvciAoaiA9IDA7IGogPCBpbnB1dExlbmd0aDsgKytqKSB7XG5cdFx0XHRcdGN1cnJlbnRWYWx1ZSA9IGlucHV0W2pdO1xuXG5cdFx0XHRcdGlmIChjdXJyZW50VmFsdWUgPCBuICYmICsrZGVsdGEgPiBtYXhJbnQpIHtcblx0XHRcdFx0XHRlcnJvcignb3ZlcmZsb3cnKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGlmIChjdXJyZW50VmFsdWUgPT0gbikge1xuXHRcdFx0XHRcdC8vIFJlcHJlc2VudCBkZWx0YSBhcyBhIGdlbmVyYWxpemVkIHZhcmlhYmxlLWxlbmd0aCBpbnRlZ2VyXG5cdFx0XHRcdFx0Zm9yIChxID0gZGVsdGEsIGsgPSBiYXNlOyAvKiBubyBjb25kaXRpb24gKi87IGsgKz0gYmFzZSkge1xuXHRcdFx0XHRcdFx0dCA9IGsgPD0gYmlhcyA/IHRNaW4gOiAoayA+PSBiaWFzICsgdE1heCA/IHRNYXggOiBrIC0gYmlhcyk7XG5cdFx0XHRcdFx0XHRpZiAocSA8IHQpIHtcblx0XHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRxTWludXNUID0gcSAtIHQ7XG5cdFx0XHRcdFx0XHRiYXNlTWludXNUID0gYmFzZSAtIHQ7XG5cdFx0XHRcdFx0XHRvdXRwdXQucHVzaChcblx0XHRcdFx0XHRcdFx0c3RyaW5nRnJvbUNoYXJDb2RlKGRpZ2l0VG9CYXNpYyh0ICsgcU1pbnVzVCAlIGJhc2VNaW51c1QsIDApKVxuXHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdHEgPSBmbG9vcihxTWludXNUIC8gYmFzZU1pbnVzVCk7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0b3V0cHV0LnB1c2goc3RyaW5nRnJvbUNoYXJDb2RlKGRpZ2l0VG9CYXNpYyhxLCAwKSkpO1xuXHRcdFx0XHRcdGJpYXMgPSBhZGFwdChkZWx0YSwgaGFuZGxlZENQQ291bnRQbHVzT25lLCBoYW5kbGVkQ1BDb3VudCA9PSBiYXNpY0xlbmd0aCk7XG5cdFx0XHRcdFx0ZGVsdGEgPSAwO1xuXHRcdFx0XHRcdCsraGFuZGxlZENQQ291bnQ7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0KytkZWx0YTtcblx0XHRcdCsrbjtcblxuXHRcdH1cblx0XHRyZXR1cm4gb3V0cHV0LmpvaW4oJycpO1xuXHR9XG5cblx0LyoqXG5cdCAqIENvbnZlcnRzIGEgUHVueWNvZGUgc3RyaW5nIHJlcHJlc2VudGluZyBhIGRvbWFpbiBuYW1lIG9yIGFuIGVtYWlsIGFkZHJlc3Ncblx0ICogdG8gVW5pY29kZS4gT25seSB0aGUgUHVueWNvZGVkIHBhcnRzIG9mIHRoZSBpbnB1dCB3aWxsIGJlIGNvbnZlcnRlZCwgaS5lLlxuXHQgKiBpdCBkb2Vzbid0IG1hdHRlciBpZiB5b3UgY2FsbCBpdCBvbiBhIHN0cmluZyB0aGF0IGhhcyBhbHJlYWR5IGJlZW5cblx0ICogY29udmVydGVkIHRvIFVuaWNvZGUuXG5cdCAqIEBtZW1iZXJPZiBwdW55Y29kZVxuXHQgKiBAcGFyYW0ge1N0cmluZ30gaW5wdXQgVGhlIFB1bnljb2RlZCBkb21haW4gbmFtZSBvciBlbWFpbCBhZGRyZXNzIHRvXG5cdCAqIGNvbnZlcnQgdG8gVW5pY29kZS5cblx0ICogQHJldHVybnMge1N0cmluZ30gVGhlIFVuaWNvZGUgcmVwcmVzZW50YXRpb24gb2YgdGhlIGdpdmVuIFB1bnljb2RlXG5cdCAqIHN0cmluZy5cblx0ICovXG5cdGZ1bmN0aW9uIHRvVW5pY29kZShpbnB1dCkge1xuXHRcdHJldHVybiBtYXBEb21haW4oaW5wdXQsIGZ1bmN0aW9uKHN0cmluZykge1xuXHRcdFx0cmV0dXJuIHJlZ2V4UHVueWNvZGUudGVzdChzdHJpbmcpXG5cdFx0XHRcdD8gZGVjb2RlKHN0cmluZy5zbGljZSg0KS50b0xvd2VyQ2FzZSgpKVxuXHRcdFx0XHQ6IHN0cmluZztcblx0XHR9KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBDb252ZXJ0cyBhIFVuaWNvZGUgc3RyaW5nIHJlcHJlc2VudGluZyBhIGRvbWFpbiBuYW1lIG9yIGFuIGVtYWlsIGFkZHJlc3MgdG9cblx0ICogUHVueWNvZGUuIE9ubHkgdGhlIG5vbi1BU0NJSSBwYXJ0cyBvZiB0aGUgZG9tYWluIG5hbWUgd2lsbCBiZSBjb252ZXJ0ZWQsXG5cdCAqIGkuZS4gaXQgZG9lc24ndCBtYXR0ZXIgaWYgeW91IGNhbGwgaXQgd2l0aCBhIGRvbWFpbiB0aGF0J3MgYWxyZWFkeSBpblxuXHQgKiBBU0NJSS5cblx0ICogQG1lbWJlck9mIHB1bnljb2RlXG5cdCAqIEBwYXJhbSB7U3RyaW5nfSBpbnB1dCBUaGUgZG9tYWluIG5hbWUgb3IgZW1haWwgYWRkcmVzcyB0byBjb252ZXJ0LCBhcyBhXG5cdCAqIFVuaWNvZGUgc3RyaW5nLlxuXHQgKiBAcmV0dXJucyB7U3RyaW5nfSBUaGUgUHVueWNvZGUgcmVwcmVzZW50YXRpb24gb2YgdGhlIGdpdmVuIGRvbWFpbiBuYW1lIG9yXG5cdCAqIGVtYWlsIGFkZHJlc3MuXG5cdCAqL1xuXHRmdW5jdGlvbiB0b0FTQ0lJKGlucHV0KSB7XG5cdFx0cmV0dXJuIG1hcERvbWFpbihpbnB1dCwgZnVuY3Rpb24oc3RyaW5nKSB7XG5cdFx0XHRyZXR1cm4gcmVnZXhOb25BU0NJSS50ZXN0KHN0cmluZylcblx0XHRcdFx0PyAneG4tLScgKyBlbmNvZGUoc3RyaW5nKVxuXHRcdFx0XHQ6IHN0cmluZztcblx0XHR9KTtcblx0fVxuXG5cdC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuXG5cdC8qKiBEZWZpbmUgdGhlIHB1YmxpYyBBUEkgKi9cblx0cHVueWNvZGUgPSB7XG5cdFx0LyoqXG5cdFx0ICogQSBzdHJpbmcgcmVwcmVzZW50aW5nIHRoZSBjdXJyZW50IFB1bnljb2RlLmpzIHZlcnNpb24gbnVtYmVyLlxuXHRcdCAqIEBtZW1iZXJPZiBwdW55Y29kZVxuXHRcdCAqIEB0eXBlIFN0cmluZ1xuXHRcdCAqL1xuXHRcdCd2ZXJzaW9uJzogJzEuMy4yJyxcblx0XHQvKipcblx0XHQgKiBBbiBvYmplY3Qgb2YgbWV0aG9kcyB0byBjb252ZXJ0IGZyb20gSmF2YVNjcmlwdCdzIGludGVybmFsIGNoYXJhY3RlclxuXHRcdCAqIHJlcHJlc2VudGF0aW9uIChVQ1MtMikgdG8gVW5pY29kZSBjb2RlIHBvaW50cywgYW5kIGJhY2suXG5cdFx0ICogQHNlZSA8aHR0cHM6Ly9tYXRoaWFzYnluZW5zLmJlL25vdGVzL2phdmFzY3JpcHQtZW5jb2Rpbmc+XG5cdFx0ICogQG1lbWJlck9mIHB1bnljb2RlXG5cdFx0ICogQHR5cGUgT2JqZWN0XG5cdFx0ICovXG5cdFx0J3VjczInOiB7XG5cdFx0XHQnZGVjb2RlJzogdWNzMmRlY29kZSxcblx0XHRcdCdlbmNvZGUnOiB1Y3MyZW5jb2RlXG5cdFx0fSxcblx0XHQnZGVjb2RlJzogZGVjb2RlLFxuXHRcdCdlbmNvZGUnOiBlbmNvZGUsXG5cdFx0J3RvQVNDSUknOiB0b0FTQ0lJLFxuXHRcdCd0b1VuaWNvZGUnOiB0b1VuaWNvZGVcblx0fTtcblxuXHQvKiogRXhwb3NlIGBwdW55Y29kZWAgKi9cblx0Ly8gU29tZSBBTUQgYnVpbGQgb3B0aW1pemVycywgbGlrZSByLmpzLCBjaGVjayBmb3Igc3BlY2lmaWMgY29uZGl0aW9uIHBhdHRlcm5zXG5cdC8vIGxpa2UgdGhlIGZvbGxvd2luZzpcblx0aWYgKFxuXHRcdHR5cGVvZiBkZWZpbmUgPT0gJ2Z1bmN0aW9uJyAmJlxuXHRcdHR5cGVvZiBkZWZpbmUuYW1kID09ICdvYmplY3QnICYmXG5cdFx0ZGVmaW5lLmFtZFxuXHQpIHtcblx0XHRkZWZpbmUoJ3B1bnljb2RlJywgZnVuY3Rpb24oKSB7XG5cdFx0XHRyZXR1cm4gcHVueWNvZGU7XG5cdFx0fSk7XG5cdH0gZWxzZSBpZiAoZnJlZUV4cG9ydHMgJiYgZnJlZU1vZHVsZSkge1xuXHRcdGlmIChtb2R1bGUuZXhwb3J0cyA9PSBmcmVlRXhwb3J0cykge1xuXHRcdFx0Ly8gaW4gTm9kZS5qcywgaW8uanMsIG9yIFJpbmdvSlMgdjAuOC4wK1xuXHRcdFx0ZnJlZU1vZHVsZS5leHBvcnRzID0gcHVueWNvZGU7XG5cdFx0fSBlbHNlIHtcblx0XHRcdC8vIGluIE5hcndoYWwgb3IgUmluZ29KUyB2MC43LjAtXG5cdFx0XHRmb3IgKGtleSBpbiBwdW55Y29kZSkge1xuXHRcdFx0XHRwdW55Y29kZS5oYXNPd25Qcm9wZXJ0eShrZXkpICYmIChmcmVlRXhwb3J0c1trZXldID0gcHVueWNvZGVba2V5XSk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9IGVsc2Uge1xuXHRcdC8vIGluIFJoaW5vIG9yIGEgd2ViIGJyb3dzZXJcblx0XHRyb290LnB1bnljb2RlID0gcHVueWNvZGU7XG5cdH1cblxufSh0aGlzKSk7XG4iLCIvLyBDb3B5cmlnaHQgSm95ZW50LCBJbmMuIGFuZCBvdGhlciBOb2RlIGNvbnRyaWJ1dG9ycy5cbi8vXG4vLyBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYVxuLy8gY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZVxuLy8gXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nXG4vLyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsXG4vLyBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0XG4vLyBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGVcbi8vIGZvbGxvd2luZyBjb25kaXRpb25zOlxuLy9cbi8vIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkXG4vLyBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbi8vXG4vLyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTXG4vLyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GXG4vLyBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOXG4vLyBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSxcbi8vIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUlxuLy8gT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRVxuLy8gVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cblxuJ3VzZSBzdHJpY3QnO1xuXG4vLyBJZiBvYmouaGFzT3duUHJvcGVydHkgaGFzIGJlZW4gb3ZlcnJpZGRlbiwgdGhlbiBjYWxsaW5nXG4vLyBvYmouaGFzT3duUHJvcGVydHkocHJvcCkgd2lsbCBicmVhay5cbi8vIFNlZTogaHR0cHM6Ly9naXRodWIuY29tL2pveWVudC9ub2RlL2lzc3Vlcy8xNzA3XG5mdW5jdGlvbiBoYXNPd25Qcm9wZXJ0eShvYmosIHByb3ApIHtcbiAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmosIHByb3ApO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKHFzLCBzZXAsIGVxLCBvcHRpb25zKSB7XG4gIHNlcCA9IHNlcCB8fCAnJic7XG4gIGVxID0gZXEgfHwgJz0nO1xuICB2YXIgb2JqID0ge307XG5cbiAgaWYgKHR5cGVvZiBxcyAhPT0gJ3N0cmluZycgfHwgcXMubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIG9iajtcbiAgfVxuXG4gIHZhciByZWdleHAgPSAvXFwrL2c7XG4gIHFzID0gcXMuc3BsaXQoc2VwKTtcblxuICB2YXIgbWF4S2V5cyA9IDEwMDA7XG4gIGlmIChvcHRpb25zICYmIHR5cGVvZiBvcHRpb25zLm1heEtleXMgPT09ICdudW1iZXInKSB7XG4gICAgbWF4S2V5cyA9IG9wdGlvbnMubWF4S2V5cztcbiAgfVxuXG4gIHZhciBsZW4gPSBxcy5sZW5ndGg7XG4gIC8vIG1heEtleXMgPD0gMCBtZWFucyB0aGF0IHdlIHNob3VsZCBub3QgbGltaXQga2V5cyBjb3VudFxuICBpZiAobWF4S2V5cyA+IDAgJiYgbGVuID4gbWF4S2V5cykge1xuICAgIGxlbiA9IG1heEtleXM7XG4gIH1cblxuICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgKytpKSB7XG4gICAgdmFyIHggPSBxc1tpXS5yZXBsYWNlKHJlZ2V4cCwgJyUyMCcpLFxuICAgICAgICBpZHggPSB4LmluZGV4T2YoZXEpLFxuICAgICAgICBrc3RyLCB2c3RyLCBrLCB2O1xuXG4gICAgaWYgKGlkeCA+PSAwKSB7XG4gICAgICBrc3RyID0geC5zdWJzdHIoMCwgaWR4KTtcbiAgICAgIHZzdHIgPSB4LnN1YnN0cihpZHggKyAxKTtcbiAgICB9IGVsc2Uge1xuICAgICAga3N0ciA9IHg7XG4gICAgICB2c3RyID0gJyc7XG4gICAgfVxuXG4gICAgayA9IGRlY29kZVVSSUNvbXBvbmVudChrc3RyKTtcbiAgICB2ID0gZGVjb2RlVVJJQ29tcG9uZW50KHZzdHIpO1xuXG4gICAgaWYgKCFoYXNPd25Qcm9wZXJ0eShvYmosIGspKSB7XG4gICAgICBvYmpba10gPSB2O1xuICAgIH0gZWxzZSBpZiAoaXNBcnJheShvYmpba10pKSB7XG4gICAgICBvYmpba10ucHVzaCh2KTtcbiAgICB9IGVsc2Uge1xuICAgICAgb2JqW2tdID0gW29ialtrXSwgdl07XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG9iajtcbn07XG5cbnZhciBpc0FycmF5ID0gQXJyYXkuaXNBcnJheSB8fCBmdW5jdGlvbiAoeHMpIHtcbiAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh4cykgPT09ICdbb2JqZWN0IEFycmF5XSc7XG59O1xuIiwiLy8gQ29weXJpZ2h0IEpveWVudCwgSW5jLiBhbmQgb3RoZXIgTm9kZSBjb250cmlidXRvcnMuXG4vL1xuLy8gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGFcbi8vIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGVcbi8vIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZ1xuLy8gd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLFxuLy8gZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdFxuLy8gcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlXG4vLyBmb2xsb3dpbmcgY29uZGl0aW9uczpcbi8vXG4vLyBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZFxuLy8gaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4vL1xuLy8gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTU1xuLy8gT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRlxuLy8gTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTlxuLy8gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sXG4vLyBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1Jcbi8vIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEVcbi8vIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG5cbid1c2Ugc3RyaWN0JztcblxudmFyIHN0cmluZ2lmeVByaW1pdGl2ZSA9IGZ1bmN0aW9uKHYpIHtcbiAgc3dpdGNoICh0eXBlb2Ygdikge1xuICAgIGNhc2UgJ3N0cmluZyc6XG4gICAgICByZXR1cm4gdjtcblxuICAgIGNhc2UgJ2Jvb2xlYW4nOlxuICAgICAgcmV0dXJuIHYgPyAndHJ1ZScgOiAnZmFsc2UnO1xuXG4gICAgY2FzZSAnbnVtYmVyJzpcbiAgICAgIHJldHVybiBpc0Zpbml0ZSh2KSA/IHYgOiAnJztcblxuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gJyc7XG4gIH1cbn07XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24ob2JqLCBzZXAsIGVxLCBuYW1lKSB7XG4gIHNlcCA9IHNlcCB8fCAnJic7XG4gIGVxID0gZXEgfHwgJz0nO1xuICBpZiAob2JqID09PSBudWxsKSB7XG4gICAgb2JqID0gdW5kZWZpbmVkO1xuICB9XG5cbiAgaWYgKHR5cGVvZiBvYmogPT09ICdvYmplY3QnKSB7XG4gICAgcmV0dXJuIG1hcChvYmplY3RLZXlzKG9iaiksIGZ1bmN0aW9uKGspIHtcbiAgICAgIHZhciBrcyA9IGVuY29kZVVSSUNvbXBvbmVudChzdHJpbmdpZnlQcmltaXRpdmUoaykpICsgZXE7XG4gICAgICBpZiAoaXNBcnJheShvYmpba10pKSB7XG4gICAgICAgIHJldHVybiBtYXAob2JqW2tdLCBmdW5jdGlvbih2KSB7XG4gICAgICAgICAgcmV0dXJuIGtzICsgZW5jb2RlVVJJQ29tcG9uZW50KHN0cmluZ2lmeVByaW1pdGl2ZSh2KSk7XG4gICAgICAgIH0pLmpvaW4oc2VwKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBrcyArIGVuY29kZVVSSUNvbXBvbmVudChzdHJpbmdpZnlQcmltaXRpdmUob2JqW2tdKSk7XG4gICAgICB9XG4gICAgfSkuam9pbihzZXApO1xuXG4gIH1cblxuICBpZiAoIW5hbWUpIHJldHVybiAnJztcbiAgcmV0dXJuIGVuY29kZVVSSUNvbXBvbmVudChzdHJpbmdpZnlQcmltaXRpdmUobmFtZSkpICsgZXEgK1xuICAgICAgICAgZW5jb2RlVVJJQ29tcG9uZW50KHN0cmluZ2lmeVByaW1pdGl2ZShvYmopKTtcbn07XG5cbnZhciBpc0FycmF5ID0gQXJyYXkuaXNBcnJheSB8fCBmdW5jdGlvbiAoeHMpIHtcbiAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh4cykgPT09ICdbb2JqZWN0IEFycmF5XSc7XG59O1xuXG5mdW5jdGlvbiBtYXAgKHhzLCBmKSB7XG4gIGlmICh4cy5tYXApIHJldHVybiB4cy5tYXAoZik7XG4gIHZhciByZXMgPSBbXTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCB4cy5sZW5ndGg7IGkrKykge1xuICAgIHJlcy5wdXNoKGYoeHNbaV0sIGkpKTtcbiAgfVxuICByZXR1cm4gcmVzO1xufVxuXG52YXIgb2JqZWN0S2V5cyA9IE9iamVjdC5rZXlzIHx8IGZ1bmN0aW9uIChvYmopIHtcbiAgdmFyIHJlcyA9IFtdO1xuICBmb3IgKHZhciBrZXkgaW4gb2JqKSB7XG4gICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmosIGtleSkpIHJlcy5wdXNoKGtleSk7XG4gIH1cbiAgcmV0dXJuIHJlcztcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbmV4cG9ydHMuZGVjb2RlID0gZXhwb3J0cy5wYXJzZSA9IHJlcXVpcmUoJy4vZGVjb2RlJyk7XG5leHBvcnRzLmVuY29kZSA9IGV4cG9ydHMuc3RyaW5naWZ5ID0gcmVxdWlyZSgnLi9lbmNvZGUnKTtcbiIsIi8vIENvcHlyaWdodCBKb3llbnQsIEluYy4gYW5kIG90aGVyIE5vZGUgY29udHJpYnV0b3JzLlxuLy9cbi8vIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhXG4vLyBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlXG4vLyBcIlNvZnR3YXJlXCIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmdcbi8vIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCxcbi8vIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXRcbi8vIHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZVxuLy8gZm9sbG93aW5nIGNvbmRpdGlvbnM6XG4vL1xuLy8gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWRcbi8vIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuLy9cbi8vIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1Ncbi8vIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0Zcbi8vIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU5cbi8vIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLFxuLy8gREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SXG4vLyBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFXG4vLyBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLlxuXG52YXIgcHVueWNvZGUgPSByZXF1aXJlKCdwdW55Y29kZScpO1xuXG5leHBvcnRzLnBhcnNlID0gdXJsUGFyc2U7XG5leHBvcnRzLnJlc29sdmUgPSB1cmxSZXNvbHZlO1xuZXhwb3J0cy5yZXNvbHZlT2JqZWN0ID0gdXJsUmVzb2x2ZU9iamVjdDtcbmV4cG9ydHMuZm9ybWF0ID0gdXJsRm9ybWF0O1xuXG5leHBvcnRzLlVybCA9IFVybDtcblxuZnVuY3Rpb24gVXJsKCkge1xuICB0aGlzLnByb3RvY29sID0gbnVsbDtcbiAgdGhpcy5zbGFzaGVzID0gbnVsbDtcbiAgdGhpcy5hdXRoID0gbnVsbDtcbiAgdGhpcy5ob3N0ID0gbnVsbDtcbiAgdGhpcy5wb3J0ID0gbnVsbDtcbiAgdGhpcy5ob3N0bmFtZSA9IG51bGw7XG4gIHRoaXMuaGFzaCA9IG51bGw7XG4gIHRoaXMuc2VhcmNoID0gbnVsbDtcbiAgdGhpcy5xdWVyeSA9IG51bGw7XG4gIHRoaXMucGF0aG5hbWUgPSBudWxsO1xuICB0aGlzLnBhdGggPSBudWxsO1xuICB0aGlzLmhyZWYgPSBudWxsO1xufVxuXG4vLyBSZWZlcmVuY2U6IFJGQyAzOTg2LCBSRkMgMTgwOCwgUkZDIDIzOTZcblxuLy8gZGVmaW5lIHRoZXNlIGhlcmUgc28gYXQgbGVhc3QgdGhleSBvbmx5IGhhdmUgdG8gYmVcbi8vIGNvbXBpbGVkIG9uY2Ugb24gdGhlIGZpcnN0IG1vZHVsZSBsb2FkLlxudmFyIHByb3RvY29sUGF0dGVybiA9IC9eKFthLXowLTkuKy1dKzopL2ksXG4gICAgcG9ydFBhdHRlcm4gPSAvOlswLTldKiQvLFxuXG4gICAgLy8gUkZDIDIzOTY6IGNoYXJhY3RlcnMgcmVzZXJ2ZWQgZm9yIGRlbGltaXRpbmcgVVJMcy5cbiAgICAvLyBXZSBhY3R1YWxseSBqdXN0IGF1dG8tZXNjYXBlIHRoZXNlLlxuICAgIGRlbGltcyA9IFsnPCcsICc+JywgJ1wiJywgJ2AnLCAnICcsICdcXHInLCAnXFxuJywgJ1xcdCddLFxuXG4gICAgLy8gUkZDIDIzOTY6IGNoYXJhY3RlcnMgbm90IGFsbG93ZWQgZm9yIHZhcmlvdXMgcmVhc29ucy5cbiAgICB1bndpc2UgPSBbJ3snLCAnfScsICd8JywgJ1xcXFwnLCAnXicsICdgJ10uY29uY2F0KGRlbGltcyksXG5cbiAgICAvLyBBbGxvd2VkIGJ5IFJGQ3MsIGJ1dCBjYXVzZSBvZiBYU1MgYXR0YWNrcy4gIEFsd2F5cyBlc2NhcGUgdGhlc2UuXG4gICAgYXV0b0VzY2FwZSA9IFsnXFwnJ10uY29uY2F0KHVud2lzZSksXG4gICAgLy8gQ2hhcmFjdGVycyB0aGF0IGFyZSBuZXZlciBldmVyIGFsbG93ZWQgaW4gYSBob3N0bmFtZS5cbiAgICAvLyBOb3RlIHRoYXQgYW55IGludmFsaWQgY2hhcnMgYXJlIGFsc28gaGFuZGxlZCwgYnV0IHRoZXNlXG4gICAgLy8gYXJlIHRoZSBvbmVzIHRoYXQgYXJlICpleHBlY3RlZCogdG8gYmUgc2Vlbiwgc28gd2UgZmFzdC1wYXRoXG4gICAgLy8gdGhlbS5cbiAgICBub25Ib3N0Q2hhcnMgPSBbJyUnLCAnLycsICc/JywgJzsnLCAnIyddLmNvbmNhdChhdXRvRXNjYXBlKSxcbiAgICBob3N0RW5kaW5nQ2hhcnMgPSBbJy8nLCAnPycsICcjJ10sXG4gICAgaG9zdG5hbWVNYXhMZW4gPSAyNTUsXG4gICAgaG9zdG5hbWVQYXJ0UGF0dGVybiA9IC9eW2EtejAtOUEtWl8tXXswLDYzfSQvLFxuICAgIGhvc3RuYW1lUGFydFN0YXJ0ID0gL14oW2EtejAtOUEtWl8tXXswLDYzfSkoLiopJC8sXG4gICAgLy8gcHJvdG9jb2xzIHRoYXQgY2FuIGFsbG93IFwidW5zYWZlXCIgYW5kIFwidW53aXNlXCIgY2hhcnMuXG4gICAgdW5zYWZlUHJvdG9jb2wgPSB7XG4gICAgICAnamF2YXNjcmlwdCc6IHRydWUsXG4gICAgICAnamF2YXNjcmlwdDonOiB0cnVlXG4gICAgfSxcbiAgICAvLyBwcm90b2NvbHMgdGhhdCBuZXZlciBoYXZlIGEgaG9zdG5hbWUuXG4gICAgaG9zdGxlc3NQcm90b2NvbCA9IHtcbiAgICAgICdqYXZhc2NyaXB0JzogdHJ1ZSxcbiAgICAgICdqYXZhc2NyaXB0Oic6IHRydWVcbiAgICB9LFxuICAgIC8vIHByb3RvY29scyB0aGF0IGFsd2F5cyBjb250YWluIGEgLy8gYml0LlxuICAgIHNsYXNoZWRQcm90b2NvbCA9IHtcbiAgICAgICdodHRwJzogdHJ1ZSxcbiAgICAgICdodHRwcyc6IHRydWUsXG4gICAgICAnZnRwJzogdHJ1ZSxcbiAgICAgICdnb3BoZXInOiB0cnVlLFxuICAgICAgJ2ZpbGUnOiB0cnVlLFxuICAgICAgJ2h0dHA6JzogdHJ1ZSxcbiAgICAgICdodHRwczonOiB0cnVlLFxuICAgICAgJ2Z0cDonOiB0cnVlLFxuICAgICAgJ2dvcGhlcjonOiB0cnVlLFxuICAgICAgJ2ZpbGU6JzogdHJ1ZVxuICAgIH0sXG4gICAgcXVlcnlzdHJpbmcgPSByZXF1aXJlKCdxdWVyeXN0cmluZycpO1xuXG5mdW5jdGlvbiB1cmxQYXJzZSh1cmwsIHBhcnNlUXVlcnlTdHJpbmcsIHNsYXNoZXNEZW5vdGVIb3N0KSB7XG4gIGlmICh1cmwgJiYgaXNPYmplY3QodXJsKSAmJiB1cmwgaW5zdGFuY2VvZiBVcmwpIHJldHVybiB1cmw7XG5cbiAgdmFyIHUgPSBuZXcgVXJsO1xuICB1LnBhcnNlKHVybCwgcGFyc2VRdWVyeVN0cmluZywgc2xhc2hlc0Rlbm90ZUhvc3QpO1xuICByZXR1cm4gdTtcbn1cblxuVXJsLnByb3RvdHlwZS5wYXJzZSA9IGZ1bmN0aW9uKHVybCwgcGFyc2VRdWVyeVN0cmluZywgc2xhc2hlc0Rlbm90ZUhvc3QpIHtcbiAgaWYgKCFpc1N0cmluZyh1cmwpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlBhcmFtZXRlciAndXJsJyBtdXN0IGJlIGEgc3RyaW5nLCBub3QgXCIgKyB0eXBlb2YgdXJsKTtcbiAgfVxuXG4gIHZhciByZXN0ID0gdXJsO1xuXG4gIC8vIHRyaW0gYmVmb3JlIHByb2NlZWRpbmcuXG4gIC8vIFRoaXMgaXMgdG8gc3VwcG9ydCBwYXJzZSBzdHVmZiBsaWtlIFwiICBodHRwOi8vZm9vLmNvbSAgXFxuXCJcbiAgcmVzdCA9IHJlc3QudHJpbSgpO1xuXG4gIHZhciBwcm90byA9IHByb3RvY29sUGF0dGVybi5leGVjKHJlc3QpO1xuICBpZiAocHJvdG8pIHtcbiAgICBwcm90byA9IHByb3RvWzBdO1xuICAgIHZhciBsb3dlclByb3RvID0gcHJvdG8udG9Mb3dlckNhc2UoKTtcbiAgICB0aGlzLnByb3RvY29sID0gbG93ZXJQcm90bztcbiAgICByZXN0ID0gcmVzdC5zdWJzdHIocHJvdG8ubGVuZ3RoKTtcbiAgfVxuXG4gIC8vIGZpZ3VyZSBvdXQgaWYgaXQncyBnb3QgYSBob3N0XG4gIC8vIHVzZXJAc2VydmVyIGlzICphbHdheXMqIGludGVycHJldGVkIGFzIGEgaG9zdG5hbWUsIGFuZCB1cmxcbiAgLy8gcmVzb2x1dGlvbiB3aWxsIHRyZWF0IC8vZm9vL2JhciBhcyBob3N0PWZvbyxwYXRoPWJhciBiZWNhdXNlIHRoYXQnc1xuICAvLyBob3cgdGhlIGJyb3dzZXIgcmVzb2x2ZXMgcmVsYXRpdmUgVVJMcy5cbiAgaWYgKHNsYXNoZXNEZW5vdGVIb3N0IHx8IHByb3RvIHx8IHJlc3QubWF0Y2goL15cXC9cXC9bXkBcXC9dK0BbXkBcXC9dKy8pKSB7XG4gICAgdmFyIHNsYXNoZXMgPSByZXN0LnN1YnN0cigwLCAyKSA9PT0gJy8vJztcbiAgICBpZiAoc2xhc2hlcyAmJiAhKHByb3RvICYmIGhvc3RsZXNzUHJvdG9jb2xbcHJvdG9dKSkge1xuICAgICAgcmVzdCA9IHJlc3Quc3Vic3RyKDIpO1xuICAgICAgdGhpcy5zbGFzaGVzID0gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICBpZiAoIWhvc3RsZXNzUHJvdG9jb2xbcHJvdG9dICYmXG4gICAgICAoc2xhc2hlcyB8fCAocHJvdG8gJiYgIXNsYXNoZWRQcm90b2NvbFtwcm90b10pKSkge1xuXG4gICAgLy8gdGhlcmUncyBhIGhvc3RuYW1lLlxuICAgIC8vIHRoZSBmaXJzdCBpbnN0YW5jZSBvZiAvLCA/LCA7LCBvciAjIGVuZHMgdGhlIGhvc3QuXG4gICAgLy9cbiAgICAvLyBJZiB0aGVyZSBpcyBhbiBAIGluIHRoZSBob3N0bmFtZSwgdGhlbiBub24taG9zdCBjaGFycyAqYXJlKiBhbGxvd2VkXG4gICAgLy8gdG8gdGhlIGxlZnQgb2YgdGhlIGxhc3QgQCBzaWduLCB1bmxlc3Mgc29tZSBob3N0LWVuZGluZyBjaGFyYWN0ZXJcbiAgICAvLyBjb21lcyAqYmVmb3JlKiB0aGUgQC1zaWduLlxuICAgIC8vIFVSTHMgYXJlIG9ibm94aW91cy5cbiAgICAvL1xuICAgIC8vIGV4OlxuICAgIC8vIGh0dHA6Ly9hQGJAYy8gPT4gdXNlcjphQGIgaG9zdDpjXG4gICAgLy8gaHR0cDovL2FAYj9AYyA9PiB1c2VyOmEgaG9zdDpjIHBhdGg6Lz9AY1xuXG4gICAgLy8gdjAuMTIgVE9ETyhpc2FhY3MpOiBUaGlzIGlzIG5vdCBxdWl0ZSBob3cgQ2hyb21lIGRvZXMgdGhpbmdzLlxuICAgIC8vIFJldmlldyBvdXIgdGVzdCBjYXNlIGFnYWluc3QgYnJvd3NlcnMgbW9yZSBjb21wcmVoZW5zaXZlbHkuXG5cbiAgICAvLyBmaW5kIHRoZSBmaXJzdCBpbnN0YW5jZSBvZiBhbnkgaG9zdEVuZGluZ0NoYXJzXG4gICAgdmFyIGhvc3RFbmQgPSAtMTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGhvc3RFbmRpbmdDaGFycy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGhlYyA9IHJlc3QuaW5kZXhPZihob3N0RW5kaW5nQ2hhcnNbaV0pO1xuICAgICAgaWYgKGhlYyAhPT0gLTEgJiYgKGhvc3RFbmQgPT09IC0xIHx8IGhlYyA8IGhvc3RFbmQpKVxuICAgICAgICBob3N0RW5kID0gaGVjO1xuICAgIH1cblxuICAgIC8vIGF0IHRoaXMgcG9pbnQsIGVpdGhlciB3ZSBoYXZlIGFuIGV4cGxpY2l0IHBvaW50IHdoZXJlIHRoZVxuICAgIC8vIGF1dGggcG9ydGlvbiBjYW5ub3QgZ28gcGFzdCwgb3IgdGhlIGxhc3QgQCBjaGFyIGlzIHRoZSBkZWNpZGVyLlxuICAgIHZhciBhdXRoLCBhdFNpZ247XG4gICAgaWYgKGhvc3RFbmQgPT09IC0xKSB7XG4gICAgICAvLyBhdFNpZ24gY2FuIGJlIGFueXdoZXJlLlxuICAgICAgYXRTaWduID0gcmVzdC5sYXN0SW5kZXhPZignQCcpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBhdFNpZ24gbXVzdCBiZSBpbiBhdXRoIHBvcnRpb24uXG4gICAgICAvLyBodHRwOi8vYUBiL2NAZCA9PiBob3N0OmIgYXV0aDphIHBhdGg6L2NAZFxuICAgICAgYXRTaWduID0gcmVzdC5sYXN0SW5kZXhPZignQCcsIGhvc3RFbmQpO1xuICAgIH1cblxuICAgIC8vIE5vdyB3ZSBoYXZlIGEgcG9ydGlvbiB3aGljaCBpcyBkZWZpbml0ZWx5IHRoZSBhdXRoLlxuICAgIC8vIFB1bGwgdGhhdCBvZmYuXG4gICAgaWYgKGF0U2lnbiAhPT0gLTEpIHtcbiAgICAgIGF1dGggPSByZXN0LnNsaWNlKDAsIGF0U2lnbik7XG4gICAgICByZXN0ID0gcmVzdC5zbGljZShhdFNpZ24gKyAxKTtcbiAgICAgIHRoaXMuYXV0aCA9IGRlY29kZVVSSUNvbXBvbmVudChhdXRoKTtcbiAgICB9XG5cbiAgICAvLyB0aGUgaG9zdCBpcyB0aGUgcmVtYWluaW5nIHRvIHRoZSBsZWZ0IG9mIHRoZSBmaXJzdCBub24taG9zdCBjaGFyXG4gICAgaG9zdEVuZCA9IC0xO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbm9uSG9zdENoYXJzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgaGVjID0gcmVzdC5pbmRleE9mKG5vbkhvc3RDaGFyc1tpXSk7XG4gICAgICBpZiAoaGVjICE9PSAtMSAmJiAoaG9zdEVuZCA9PT0gLTEgfHwgaGVjIDwgaG9zdEVuZCkpXG4gICAgICAgIGhvc3RFbmQgPSBoZWM7XG4gICAgfVxuICAgIC8vIGlmIHdlIHN0aWxsIGhhdmUgbm90IGhpdCBpdCwgdGhlbiB0aGUgZW50aXJlIHRoaW5nIGlzIGEgaG9zdC5cbiAgICBpZiAoaG9zdEVuZCA9PT0gLTEpXG4gICAgICBob3N0RW5kID0gcmVzdC5sZW5ndGg7XG5cbiAgICB0aGlzLmhvc3QgPSByZXN0LnNsaWNlKDAsIGhvc3RFbmQpO1xuICAgIHJlc3QgPSByZXN0LnNsaWNlKGhvc3RFbmQpO1xuXG4gICAgLy8gcHVsbCBvdXQgcG9ydC5cbiAgICB0aGlzLnBhcnNlSG9zdCgpO1xuXG4gICAgLy8gd2UndmUgaW5kaWNhdGVkIHRoYXQgdGhlcmUgaXMgYSBob3N0bmFtZSxcbiAgICAvLyBzbyBldmVuIGlmIGl0J3MgZW1wdHksIGl0IGhhcyB0byBiZSBwcmVzZW50LlxuICAgIHRoaXMuaG9zdG5hbWUgPSB0aGlzLmhvc3RuYW1lIHx8ICcnO1xuXG4gICAgLy8gaWYgaG9zdG5hbWUgYmVnaW5zIHdpdGggWyBhbmQgZW5kcyB3aXRoIF1cbiAgICAvLyBhc3N1bWUgdGhhdCBpdCdzIGFuIElQdjYgYWRkcmVzcy5cbiAgICB2YXIgaXB2Nkhvc3RuYW1lID0gdGhpcy5ob3N0bmFtZVswXSA9PT0gJ1snICYmXG4gICAgICAgIHRoaXMuaG9zdG5hbWVbdGhpcy5ob3N0bmFtZS5sZW5ndGggLSAxXSA9PT0gJ10nO1xuXG4gICAgLy8gdmFsaWRhdGUgYSBsaXR0bGUuXG4gICAgaWYgKCFpcHY2SG9zdG5hbWUpIHtcbiAgICAgIHZhciBob3N0cGFydHMgPSB0aGlzLmhvc3RuYW1lLnNwbGl0KC9cXC4vKTtcbiAgICAgIGZvciAodmFyIGkgPSAwLCBsID0gaG9zdHBhcnRzLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgICAgICB2YXIgcGFydCA9IGhvc3RwYXJ0c1tpXTtcbiAgICAgICAgaWYgKCFwYXJ0KSBjb250aW51ZTtcbiAgICAgICAgaWYgKCFwYXJ0Lm1hdGNoKGhvc3RuYW1lUGFydFBhdHRlcm4pKSB7XG4gICAgICAgICAgdmFyIG5ld3BhcnQgPSAnJztcbiAgICAgICAgICBmb3IgKHZhciBqID0gMCwgayA9IHBhcnQubGVuZ3RoOyBqIDwgazsgaisrKSB7XG4gICAgICAgICAgICBpZiAocGFydC5jaGFyQ29kZUF0KGopID4gMTI3KSB7XG4gICAgICAgICAgICAgIC8vIHdlIHJlcGxhY2Ugbm9uLUFTQ0lJIGNoYXIgd2l0aCBhIHRlbXBvcmFyeSBwbGFjZWhvbGRlclxuICAgICAgICAgICAgICAvLyB3ZSBuZWVkIHRoaXMgdG8gbWFrZSBzdXJlIHNpemUgb2YgaG9zdG5hbWUgaXMgbm90XG4gICAgICAgICAgICAgIC8vIGJyb2tlbiBieSByZXBsYWNpbmcgbm9uLUFTQ0lJIGJ5IG5vdGhpbmdcbiAgICAgICAgICAgICAgbmV3cGFydCArPSAneCc7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBuZXdwYXJ0ICs9IHBhcnRbal07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIC8vIHdlIHRlc3QgYWdhaW4gd2l0aCBBU0NJSSBjaGFyIG9ubHlcbiAgICAgICAgICBpZiAoIW5ld3BhcnQubWF0Y2goaG9zdG5hbWVQYXJ0UGF0dGVybikpIHtcbiAgICAgICAgICAgIHZhciB2YWxpZFBhcnRzID0gaG9zdHBhcnRzLnNsaWNlKDAsIGkpO1xuICAgICAgICAgICAgdmFyIG5vdEhvc3QgPSBob3N0cGFydHMuc2xpY2UoaSArIDEpO1xuICAgICAgICAgICAgdmFyIGJpdCA9IHBhcnQubWF0Y2goaG9zdG5hbWVQYXJ0U3RhcnQpO1xuICAgICAgICAgICAgaWYgKGJpdCkge1xuICAgICAgICAgICAgICB2YWxpZFBhcnRzLnB1c2goYml0WzFdKTtcbiAgICAgICAgICAgICAgbm90SG9zdC51bnNoaWZ0KGJpdFsyXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAobm90SG9zdC5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgcmVzdCA9ICcvJyArIG5vdEhvc3Quam9pbignLicpICsgcmVzdDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuaG9zdG5hbWUgPSB2YWxpZFBhcnRzLmpvaW4oJy4nKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0aGlzLmhvc3RuYW1lLmxlbmd0aCA+IGhvc3RuYW1lTWF4TGVuKSB7XG4gICAgICB0aGlzLmhvc3RuYW1lID0gJyc7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIGhvc3RuYW1lcyBhcmUgYWx3YXlzIGxvd2VyIGNhc2UuXG4gICAgICB0aGlzLmhvc3RuYW1lID0gdGhpcy5ob3N0bmFtZS50b0xvd2VyQ2FzZSgpO1xuICAgIH1cblxuICAgIGlmICghaXB2Nkhvc3RuYW1lKSB7XG4gICAgICAvLyBJRE5BIFN1cHBvcnQ6IFJldHVybnMgYSBwdW55IGNvZGVkIHJlcHJlc2VudGF0aW9uIG9mIFwiZG9tYWluXCIuXG4gICAgICAvLyBJdCBvbmx5IGNvbnZlcnRzIHRoZSBwYXJ0IG9mIHRoZSBkb21haW4gbmFtZSB0aGF0XG4gICAgICAvLyBoYXMgbm9uIEFTQ0lJIGNoYXJhY3RlcnMuIEkuZS4gaXQgZG9zZW50IG1hdHRlciBpZlxuICAgICAgLy8geW91IGNhbGwgaXQgd2l0aCBhIGRvbWFpbiB0aGF0IGFscmVhZHkgaXMgaW4gQVNDSUkuXG4gICAgICB2YXIgZG9tYWluQXJyYXkgPSB0aGlzLmhvc3RuYW1lLnNwbGl0KCcuJyk7XG4gICAgICB2YXIgbmV3T3V0ID0gW107XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGRvbWFpbkFycmF5Lmxlbmd0aDsgKytpKSB7XG4gICAgICAgIHZhciBzID0gZG9tYWluQXJyYXlbaV07XG4gICAgICAgIG5ld091dC5wdXNoKHMubWF0Y2goL1teQS1aYS16MC05Xy1dLykgP1xuICAgICAgICAgICAgJ3huLS0nICsgcHVueWNvZGUuZW5jb2RlKHMpIDogcyk7XG4gICAgICB9XG4gICAgICB0aGlzLmhvc3RuYW1lID0gbmV3T3V0LmpvaW4oJy4nKTtcbiAgICB9XG5cbiAgICB2YXIgcCA9IHRoaXMucG9ydCA/ICc6JyArIHRoaXMucG9ydCA6ICcnO1xuICAgIHZhciBoID0gdGhpcy5ob3N0bmFtZSB8fCAnJztcbiAgICB0aGlzLmhvc3QgPSBoICsgcDtcbiAgICB0aGlzLmhyZWYgKz0gdGhpcy5ob3N0O1xuXG4gICAgLy8gc3RyaXAgWyBhbmQgXSBmcm9tIHRoZSBob3N0bmFtZVxuICAgIC8vIHRoZSBob3N0IGZpZWxkIHN0aWxsIHJldGFpbnMgdGhlbSwgdGhvdWdoXG4gICAgaWYgKGlwdjZIb3N0bmFtZSkge1xuICAgICAgdGhpcy5ob3N0bmFtZSA9IHRoaXMuaG9zdG5hbWUuc3Vic3RyKDEsIHRoaXMuaG9zdG5hbWUubGVuZ3RoIC0gMik7XG4gICAgICBpZiAocmVzdFswXSAhPT0gJy8nKSB7XG4gICAgICAgIHJlc3QgPSAnLycgKyByZXN0O1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIG5vdyByZXN0IGlzIHNldCB0byB0aGUgcG9zdC1ob3N0IHN0dWZmLlxuICAvLyBjaG9wIG9mZiBhbnkgZGVsaW0gY2hhcnMuXG4gIGlmICghdW5zYWZlUHJvdG9jb2xbbG93ZXJQcm90b10pIHtcblxuICAgIC8vIEZpcnN0LCBtYWtlIDEwMCUgc3VyZSB0aGF0IGFueSBcImF1dG9Fc2NhcGVcIiBjaGFycyBnZXRcbiAgICAvLyBlc2NhcGVkLCBldmVuIGlmIGVuY29kZVVSSUNvbXBvbmVudCBkb2Vzbid0IHRoaW5rIHRoZXlcbiAgICAvLyBuZWVkIHRvIGJlLlxuICAgIGZvciAodmFyIGkgPSAwLCBsID0gYXV0b0VzY2FwZS5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICAgIHZhciBhZSA9IGF1dG9Fc2NhcGVbaV07XG4gICAgICB2YXIgZXNjID0gZW5jb2RlVVJJQ29tcG9uZW50KGFlKTtcbiAgICAgIGlmIChlc2MgPT09IGFlKSB7XG4gICAgICAgIGVzYyA9IGVzY2FwZShhZSk7XG4gICAgICB9XG4gICAgICByZXN0ID0gcmVzdC5zcGxpdChhZSkuam9pbihlc2MpO1xuICAgIH1cbiAgfVxuXG5cbiAgLy8gY2hvcCBvZmYgZnJvbSB0aGUgdGFpbCBmaXJzdC5cbiAgdmFyIGhhc2ggPSByZXN0LmluZGV4T2YoJyMnKTtcbiAgaWYgKGhhc2ggIT09IC0xKSB7XG4gICAgLy8gZ290IGEgZnJhZ21lbnQgc3RyaW5nLlxuICAgIHRoaXMuaGFzaCA9IHJlc3Quc3Vic3RyKGhhc2gpO1xuICAgIHJlc3QgPSByZXN0LnNsaWNlKDAsIGhhc2gpO1xuICB9XG4gIHZhciBxbSA9IHJlc3QuaW5kZXhPZignPycpO1xuICBpZiAocW0gIT09IC0xKSB7XG4gICAgdGhpcy5zZWFyY2ggPSByZXN0LnN1YnN0cihxbSk7XG4gICAgdGhpcy5xdWVyeSA9IHJlc3Quc3Vic3RyKHFtICsgMSk7XG4gICAgaWYgKHBhcnNlUXVlcnlTdHJpbmcpIHtcbiAgICAgIHRoaXMucXVlcnkgPSBxdWVyeXN0cmluZy5wYXJzZSh0aGlzLnF1ZXJ5KTtcbiAgICB9XG4gICAgcmVzdCA9IHJlc3Quc2xpY2UoMCwgcW0pO1xuICB9IGVsc2UgaWYgKHBhcnNlUXVlcnlTdHJpbmcpIHtcbiAgICAvLyBubyBxdWVyeSBzdHJpbmcsIGJ1dCBwYXJzZVF1ZXJ5U3RyaW5nIHN0aWxsIHJlcXVlc3RlZFxuICAgIHRoaXMuc2VhcmNoID0gJyc7XG4gICAgdGhpcy5xdWVyeSA9IHt9O1xuICB9XG4gIGlmIChyZXN0KSB0aGlzLnBhdGhuYW1lID0gcmVzdDtcbiAgaWYgKHNsYXNoZWRQcm90b2NvbFtsb3dlclByb3RvXSAmJlxuICAgICAgdGhpcy5ob3N0bmFtZSAmJiAhdGhpcy5wYXRobmFtZSkge1xuICAgIHRoaXMucGF0aG5hbWUgPSAnLyc7XG4gIH1cblxuICAvL3RvIHN1cHBvcnQgaHR0cC5yZXF1ZXN0XG4gIGlmICh0aGlzLnBhdGhuYW1lIHx8IHRoaXMuc2VhcmNoKSB7XG4gICAgdmFyIHAgPSB0aGlzLnBhdGhuYW1lIHx8ICcnO1xuICAgIHZhciBzID0gdGhpcy5zZWFyY2ggfHwgJyc7XG4gICAgdGhpcy5wYXRoID0gcCArIHM7XG4gIH1cblxuICAvLyBmaW5hbGx5LCByZWNvbnN0cnVjdCB0aGUgaHJlZiBiYXNlZCBvbiB3aGF0IGhhcyBiZWVuIHZhbGlkYXRlZC5cbiAgdGhpcy5ocmVmID0gdGhpcy5mb3JtYXQoKTtcbiAgcmV0dXJuIHRoaXM7XG59O1xuXG4vLyBmb3JtYXQgYSBwYXJzZWQgb2JqZWN0IGludG8gYSB1cmwgc3RyaW5nXG5mdW5jdGlvbiB1cmxGb3JtYXQob2JqKSB7XG4gIC8vIGVuc3VyZSBpdCdzIGFuIG9iamVjdCwgYW5kIG5vdCBhIHN0cmluZyB1cmwuXG4gIC8vIElmIGl0J3MgYW4gb2JqLCB0aGlzIGlzIGEgbm8tb3AuXG4gIC8vIHRoaXMgd2F5LCB5b3UgY2FuIGNhbGwgdXJsX2Zvcm1hdCgpIG9uIHN0cmluZ3NcbiAgLy8gdG8gY2xlYW4gdXAgcG90ZW50aWFsbHkgd29ua3kgdXJscy5cbiAgaWYgKGlzU3RyaW5nKG9iaikpIG9iaiA9IHVybFBhcnNlKG9iaik7XG4gIGlmICghKG9iaiBpbnN0YW5jZW9mIFVybCkpIHJldHVybiBVcmwucHJvdG90eXBlLmZvcm1hdC5jYWxsKG9iaik7XG4gIHJldHVybiBvYmouZm9ybWF0KCk7XG59XG5cblVybC5wcm90b3R5cGUuZm9ybWF0ID0gZnVuY3Rpb24oKSB7XG4gIHZhciBhdXRoID0gdGhpcy5hdXRoIHx8ICcnO1xuICBpZiAoYXV0aCkge1xuICAgIGF1dGggPSBlbmNvZGVVUklDb21wb25lbnQoYXV0aCk7XG4gICAgYXV0aCA9IGF1dGgucmVwbGFjZSgvJTNBL2ksICc6Jyk7XG4gICAgYXV0aCArPSAnQCc7XG4gIH1cblxuICB2YXIgcHJvdG9jb2wgPSB0aGlzLnByb3RvY29sIHx8ICcnLFxuICAgICAgcGF0aG5hbWUgPSB0aGlzLnBhdGhuYW1lIHx8ICcnLFxuICAgICAgaGFzaCA9IHRoaXMuaGFzaCB8fCAnJyxcbiAgICAgIGhvc3QgPSBmYWxzZSxcbiAgICAgIHF1ZXJ5ID0gJyc7XG5cbiAgaWYgKHRoaXMuaG9zdCkge1xuICAgIGhvc3QgPSBhdXRoICsgdGhpcy5ob3N0O1xuICB9IGVsc2UgaWYgKHRoaXMuaG9zdG5hbWUpIHtcbiAgICBob3N0ID0gYXV0aCArICh0aGlzLmhvc3RuYW1lLmluZGV4T2YoJzonKSA9PT0gLTEgP1xuICAgICAgICB0aGlzLmhvc3RuYW1lIDpcbiAgICAgICAgJ1snICsgdGhpcy5ob3N0bmFtZSArICddJyk7XG4gICAgaWYgKHRoaXMucG9ydCkge1xuICAgICAgaG9zdCArPSAnOicgKyB0aGlzLnBvcnQ7XG4gICAgfVxuICB9XG5cbiAgaWYgKHRoaXMucXVlcnkgJiZcbiAgICAgIGlzT2JqZWN0KHRoaXMucXVlcnkpICYmXG4gICAgICBPYmplY3Qua2V5cyh0aGlzLnF1ZXJ5KS5sZW5ndGgpIHtcbiAgICBxdWVyeSA9IHF1ZXJ5c3RyaW5nLnN0cmluZ2lmeSh0aGlzLnF1ZXJ5KTtcbiAgfVxuXG4gIHZhciBzZWFyY2ggPSB0aGlzLnNlYXJjaCB8fCAocXVlcnkgJiYgKCc/JyArIHF1ZXJ5KSkgfHwgJyc7XG5cbiAgaWYgKHByb3RvY29sICYmIHByb3RvY29sLnN1YnN0cigtMSkgIT09ICc6JykgcHJvdG9jb2wgKz0gJzonO1xuXG4gIC8vIG9ubHkgdGhlIHNsYXNoZWRQcm90b2NvbHMgZ2V0IHRoZSAvLy4gIE5vdCBtYWlsdG86LCB4bXBwOiwgZXRjLlxuICAvLyB1bmxlc3MgdGhleSBoYWQgdGhlbSB0byBiZWdpbiB3aXRoLlxuICBpZiAodGhpcy5zbGFzaGVzIHx8XG4gICAgICAoIXByb3RvY29sIHx8IHNsYXNoZWRQcm90b2NvbFtwcm90b2NvbF0pICYmIGhvc3QgIT09IGZhbHNlKSB7XG4gICAgaG9zdCA9ICcvLycgKyAoaG9zdCB8fCAnJyk7XG4gICAgaWYgKHBhdGhuYW1lICYmIHBhdGhuYW1lLmNoYXJBdCgwKSAhPT0gJy8nKSBwYXRobmFtZSA9ICcvJyArIHBhdGhuYW1lO1xuICB9IGVsc2UgaWYgKCFob3N0KSB7XG4gICAgaG9zdCA9ICcnO1xuICB9XG5cbiAgaWYgKGhhc2ggJiYgaGFzaC5jaGFyQXQoMCkgIT09ICcjJykgaGFzaCA9ICcjJyArIGhhc2g7XG4gIGlmIChzZWFyY2ggJiYgc2VhcmNoLmNoYXJBdCgwKSAhPT0gJz8nKSBzZWFyY2ggPSAnPycgKyBzZWFyY2g7XG5cbiAgcGF0aG5hbWUgPSBwYXRobmFtZS5yZXBsYWNlKC9bPyNdL2csIGZ1bmN0aW9uKG1hdGNoKSB7XG4gICAgcmV0dXJuIGVuY29kZVVSSUNvbXBvbmVudChtYXRjaCk7XG4gIH0pO1xuICBzZWFyY2ggPSBzZWFyY2gucmVwbGFjZSgnIycsICclMjMnKTtcblxuICByZXR1cm4gcHJvdG9jb2wgKyBob3N0ICsgcGF0aG5hbWUgKyBzZWFyY2ggKyBoYXNoO1xufTtcblxuZnVuY3Rpb24gdXJsUmVzb2x2ZShzb3VyY2UsIHJlbGF0aXZlKSB7XG4gIHJldHVybiB1cmxQYXJzZShzb3VyY2UsIGZhbHNlLCB0cnVlKS5yZXNvbHZlKHJlbGF0aXZlKTtcbn1cblxuVXJsLnByb3RvdHlwZS5yZXNvbHZlID0gZnVuY3Rpb24ocmVsYXRpdmUpIHtcbiAgcmV0dXJuIHRoaXMucmVzb2x2ZU9iamVjdCh1cmxQYXJzZShyZWxhdGl2ZSwgZmFsc2UsIHRydWUpKS5mb3JtYXQoKTtcbn07XG5cbmZ1bmN0aW9uIHVybFJlc29sdmVPYmplY3Qoc291cmNlLCByZWxhdGl2ZSkge1xuICBpZiAoIXNvdXJjZSkgcmV0dXJuIHJlbGF0aXZlO1xuICByZXR1cm4gdXJsUGFyc2Uoc291cmNlLCBmYWxzZSwgdHJ1ZSkucmVzb2x2ZU9iamVjdChyZWxhdGl2ZSk7XG59XG5cblVybC5wcm90b3R5cGUucmVzb2x2ZU9iamVjdCA9IGZ1bmN0aW9uKHJlbGF0aXZlKSB7XG4gIGlmIChpc1N0cmluZyhyZWxhdGl2ZSkpIHtcbiAgICB2YXIgcmVsID0gbmV3IFVybCgpO1xuICAgIHJlbC5wYXJzZShyZWxhdGl2ZSwgZmFsc2UsIHRydWUpO1xuICAgIHJlbGF0aXZlID0gcmVsO1xuICB9XG5cbiAgdmFyIHJlc3VsdCA9IG5ldyBVcmwoKTtcbiAgT2JqZWN0LmtleXModGhpcykuZm9yRWFjaChmdW5jdGlvbihrKSB7XG4gICAgcmVzdWx0W2tdID0gdGhpc1trXTtcbiAgfSwgdGhpcyk7XG5cbiAgLy8gaGFzaCBpcyBhbHdheXMgb3ZlcnJpZGRlbiwgbm8gbWF0dGVyIHdoYXQuXG4gIC8vIGV2ZW4gaHJlZj1cIlwiIHdpbGwgcmVtb3ZlIGl0LlxuICByZXN1bHQuaGFzaCA9IHJlbGF0aXZlLmhhc2g7XG5cbiAgLy8gaWYgdGhlIHJlbGF0aXZlIHVybCBpcyBlbXB0eSwgdGhlbiB0aGVyZSdzIG5vdGhpbmcgbGVmdCB0byBkbyBoZXJlLlxuICBpZiAocmVsYXRpdmUuaHJlZiA9PT0gJycpIHtcbiAgICByZXN1bHQuaHJlZiA9IHJlc3VsdC5mb3JtYXQoKTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgLy8gaHJlZnMgbGlrZSAvL2Zvby9iYXIgYWx3YXlzIGN1dCB0byB0aGUgcHJvdG9jb2wuXG4gIGlmIChyZWxhdGl2ZS5zbGFzaGVzICYmICFyZWxhdGl2ZS5wcm90b2NvbCkge1xuICAgIC8vIHRha2UgZXZlcnl0aGluZyBleGNlcHQgdGhlIHByb3RvY29sIGZyb20gcmVsYXRpdmVcbiAgICBPYmplY3Qua2V5cyhyZWxhdGl2ZSkuZm9yRWFjaChmdW5jdGlvbihrKSB7XG4gICAgICBpZiAoayAhPT0gJ3Byb3RvY29sJylcbiAgICAgICAgcmVzdWx0W2tdID0gcmVsYXRpdmVba107XG4gICAgfSk7XG5cbiAgICAvL3VybFBhcnNlIGFwcGVuZHMgdHJhaWxpbmcgLyB0byB1cmxzIGxpa2UgaHR0cDovL3d3dy5leGFtcGxlLmNvbVxuICAgIGlmIChzbGFzaGVkUHJvdG9jb2xbcmVzdWx0LnByb3RvY29sXSAmJlxuICAgICAgICByZXN1bHQuaG9zdG5hbWUgJiYgIXJlc3VsdC5wYXRobmFtZSkge1xuICAgICAgcmVzdWx0LnBhdGggPSByZXN1bHQucGF0aG5hbWUgPSAnLyc7XG4gICAgfVxuXG4gICAgcmVzdWx0LmhyZWYgPSByZXN1bHQuZm9ybWF0KCk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIGlmIChyZWxhdGl2ZS5wcm90b2NvbCAmJiByZWxhdGl2ZS5wcm90b2NvbCAhPT0gcmVzdWx0LnByb3RvY29sKSB7XG4gICAgLy8gaWYgaXQncyBhIGtub3duIHVybCBwcm90b2NvbCwgdGhlbiBjaGFuZ2luZ1xuICAgIC8vIHRoZSBwcm90b2NvbCBkb2VzIHdlaXJkIHRoaW5nc1xuICAgIC8vIGZpcnN0LCBpZiBpdCdzIG5vdCBmaWxlOiwgdGhlbiB3ZSBNVVNUIGhhdmUgYSBob3N0LFxuICAgIC8vIGFuZCBpZiB0aGVyZSB3YXMgYSBwYXRoXG4gICAgLy8gdG8gYmVnaW4gd2l0aCwgdGhlbiB3ZSBNVVNUIGhhdmUgYSBwYXRoLlxuICAgIC8vIGlmIGl0IGlzIGZpbGU6LCB0aGVuIHRoZSBob3N0IGlzIGRyb3BwZWQsXG4gICAgLy8gYmVjYXVzZSB0aGF0J3Mga25vd24gdG8gYmUgaG9zdGxlc3MuXG4gICAgLy8gYW55dGhpbmcgZWxzZSBpcyBhc3N1bWVkIHRvIGJlIGFic29sdXRlLlxuICAgIGlmICghc2xhc2hlZFByb3RvY29sW3JlbGF0aXZlLnByb3RvY29sXSkge1xuICAgICAgT2JqZWN0LmtleXMocmVsYXRpdmUpLmZvckVhY2goZnVuY3Rpb24oaykge1xuICAgICAgICByZXN1bHRba10gPSByZWxhdGl2ZVtrXTtcbiAgICAgIH0pO1xuICAgICAgcmVzdWx0LmhyZWYgPSByZXN1bHQuZm9ybWF0KCk7XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIHJlc3VsdC5wcm90b2NvbCA9IHJlbGF0aXZlLnByb3RvY29sO1xuICAgIGlmICghcmVsYXRpdmUuaG9zdCAmJiAhaG9zdGxlc3NQcm90b2NvbFtyZWxhdGl2ZS5wcm90b2NvbF0pIHtcbiAgICAgIHZhciByZWxQYXRoID0gKHJlbGF0aXZlLnBhdGhuYW1lIHx8ICcnKS5zcGxpdCgnLycpO1xuICAgICAgd2hpbGUgKHJlbFBhdGgubGVuZ3RoICYmICEocmVsYXRpdmUuaG9zdCA9IHJlbFBhdGguc2hpZnQoKSkpO1xuICAgICAgaWYgKCFyZWxhdGl2ZS5ob3N0KSByZWxhdGl2ZS5ob3N0ID0gJyc7XG4gICAgICBpZiAoIXJlbGF0aXZlLmhvc3RuYW1lKSByZWxhdGl2ZS5ob3N0bmFtZSA9ICcnO1xuICAgICAgaWYgKHJlbFBhdGhbMF0gIT09ICcnKSByZWxQYXRoLnVuc2hpZnQoJycpO1xuICAgICAgaWYgKHJlbFBhdGgubGVuZ3RoIDwgMikgcmVsUGF0aC51bnNoaWZ0KCcnKTtcbiAgICAgIHJlc3VsdC5wYXRobmFtZSA9IHJlbFBhdGguam9pbignLycpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXN1bHQucGF0aG5hbWUgPSByZWxhdGl2ZS5wYXRobmFtZTtcbiAgICB9XG4gICAgcmVzdWx0LnNlYXJjaCA9IHJlbGF0aXZlLnNlYXJjaDtcbiAgICByZXN1bHQucXVlcnkgPSByZWxhdGl2ZS5xdWVyeTtcbiAgICByZXN1bHQuaG9zdCA9IHJlbGF0aXZlLmhvc3QgfHwgJyc7XG4gICAgcmVzdWx0LmF1dGggPSByZWxhdGl2ZS5hdXRoO1xuICAgIHJlc3VsdC5ob3N0bmFtZSA9IHJlbGF0aXZlLmhvc3RuYW1lIHx8IHJlbGF0aXZlLmhvc3Q7XG4gICAgcmVzdWx0LnBvcnQgPSByZWxhdGl2ZS5wb3J0O1xuICAgIC8vIHRvIHN1cHBvcnQgaHR0cC5yZXF1ZXN0XG4gICAgaWYgKHJlc3VsdC5wYXRobmFtZSB8fCByZXN1bHQuc2VhcmNoKSB7XG4gICAgICB2YXIgcCA9IHJlc3VsdC5wYXRobmFtZSB8fCAnJztcbiAgICAgIHZhciBzID0gcmVzdWx0LnNlYXJjaCB8fCAnJztcbiAgICAgIHJlc3VsdC5wYXRoID0gcCArIHM7XG4gICAgfVxuICAgIHJlc3VsdC5zbGFzaGVzID0gcmVzdWx0LnNsYXNoZXMgfHwgcmVsYXRpdmUuc2xhc2hlcztcbiAgICByZXN1bHQuaHJlZiA9IHJlc3VsdC5mb3JtYXQoKTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgdmFyIGlzU291cmNlQWJzID0gKHJlc3VsdC5wYXRobmFtZSAmJiByZXN1bHQucGF0aG5hbWUuY2hhckF0KDApID09PSAnLycpLFxuICAgICAgaXNSZWxBYnMgPSAoXG4gICAgICAgICAgcmVsYXRpdmUuaG9zdCB8fFxuICAgICAgICAgIHJlbGF0aXZlLnBhdGhuYW1lICYmIHJlbGF0aXZlLnBhdGhuYW1lLmNoYXJBdCgwKSA9PT0gJy8nXG4gICAgICApLFxuICAgICAgbXVzdEVuZEFicyA9IChpc1JlbEFicyB8fCBpc1NvdXJjZUFicyB8fFxuICAgICAgICAgICAgICAgICAgICAocmVzdWx0Lmhvc3QgJiYgcmVsYXRpdmUucGF0aG5hbWUpKSxcbiAgICAgIHJlbW92ZUFsbERvdHMgPSBtdXN0RW5kQWJzLFxuICAgICAgc3JjUGF0aCA9IHJlc3VsdC5wYXRobmFtZSAmJiByZXN1bHQucGF0aG5hbWUuc3BsaXQoJy8nKSB8fCBbXSxcbiAgICAgIHJlbFBhdGggPSByZWxhdGl2ZS5wYXRobmFtZSAmJiByZWxhdGl2ZS5wYXRobmFtZS5zcGxpdCgnLycpIHx8IFtdLFxuICAgICAgcHN5Y2hvdGljID0gcmVzdWx0LnByb3RvY29sICYmICFzbGFzaGVkUHJvdG9jb2xbcmVzdWx0LnByb3RvY29sXTtcblxuICAvLyBpZiB0aGUgdXJsIGlzIGEgbm9uLXNsYXNoZWQgdXJsLCB0aGVuIHJlbGF0aXZlXG4gIC8vIGxpbmtzIGxpa2UgLi4vLi4gc2hvdWxkIGJlIGFibGVcbiAgLy8gdG8gY3Jhd2wgdXAgdG8gdGhlIGhvc3RuYW1lLCBhcyB3ZWxsLiAgVGhpcyBpcyBzdHJhbmdlLlxuICAvLyByZXN1bHQucHJvdG9jb2wgaGFzIGFscmVhZHkgYmVlbiBzZXQgYnkgbm93LlxuICAvLyBMYXRlciBvbiwgcHV0IHRoZSBmaXJzdCBwYXRoIHBhcnQgaW50byB0aGUgaG9zdCBmaWVsZC5cbiAgaWYgKHBzeWNob3RpYykge1xuICAgIHJlc3VsdC5ob3N0bmFtZSA9ICcnO1xuICAgIHJlc3VsdC5wb3J0ID0gbnVsbDtcbiAgICBpZiAocmVzdWx0Lmhvc3QpIHtcbiAgICAgIGlmIChzcmNQYXRoWzBdID09PSAnJykgc3JjUGF0aFswXSA9IHJlc3VsdC5ob3N0O1xuICAgICAgZWxzZSBzcmNQYXRoLnVuc2hpZnQocmVzdWx0Lmhvc3QpO1xuICAgIH1cbiAgICByZXN1bHQuaG9zdCA9ICcnO1xuICAgIGlmIChyZWxhdGl2ZS5wcm90b2NvbCkge1xuICAgICAgcmVsYXRpdmUuaG9zdG5hbWUgPSBudWxsO1xuICAgICAgcmVsYXRpdmUucG9ydCA9IG51bGw7XG4gICAgICBpZiAocmVsYXRpdmUuaG9zdCkge1xuICAgICAgICBpZiAocmVsUGF0aFswXSA9PT0gJycpIHJlbFBhdGhbMF0gPSByZWxhdGl2ZS5ob3N0O1xuICAgICAgICBlbHNlIHJlbFBhdGgudW5zaGlmdChyZWxhdGl2ZS5ob3N0KTtcbiAgICAgIH1cbiAgICAgIHJlbGF0aXZlLmhvc3QgPSBudWxsO1xuICAgIH1cbiAgICBtdXN0RW5kQWJzID0gbXVzdEVuZEFicyAmJiAocmVsUGF0aFswXSA9PT0gJycgfHwgc3JjUGF0aFswXSA9PT0gJycpO1xuICB9XG5cbiAgaWYgKGlzUmVsQWJzKSB7XG4gICAgLy8gaXQncyBhYnNvbHV0ZS5cbiAgICByZXN1bHQuaG9zdCA9IChyZWxhdGl2ZS5ob3N0IHx8IHJlbGF0aXZlLmhvc3QgPT09ICcnKSA/XG4gICAgICAgICAgICAgICAgICByZWxhdGl2ZS5ob3N0IDogcmVzdWx0Lmhvc3Q7XG4gICAgcmVzdWx0Lmhvc3RuYW1lID0gKHJlbGF0aXZlLmhvc3RuYW1lIHx8IHJlbGF0aXZlLmhvc3RuYW1lID09PSAnJykgP1xuICAgICAgICAgICAgICAgICAgICAgIHJlbGF0aXZlLmhvc3RuYW1lIDogcmVzdWx0Lmhvc3RuYW1lO1xuICAgIHJlc3VsdC5zZWFyY2ggPSByZWxhdGl2ZS5zZWFyY2g7XG4gICAgcmVzdWx0LnF1ZXJ5ID0gcmVsYXRpdmUucXVlcnk7XG4gICAgc3JjUGF0aCA9IHJlbFBhdGg7XG4gICAgLy8gZmFsbCB0aHJvdWdoIHRvIHRoZSBkb3QtaGFuZGxpbmcgYmVsb3cuXG4gIH0gZWxzZSBpZiAocmVsUGF0aC5sZW5ndGgpIHtcbiAgICAvLyBpdCdzIHJlbGF0aXZlXG4gICAgLy8gdGhyb3cgYXdheSB0aGUgZXhpc3RpbmcgZmlsZSwgYW5kIHRha2UgdGhlIG5ldyBwYXRoIGluc3RlYWQuXG4gICAgaWYgKCFzcmNQYXRoKSBzcmNQYXRoID0gW107XG4gICAgc3JjUGF0aC5wb3AoKTtcbiAgICBzcmNQYXRoID0gc3JjUGF0aC5jb25jYXQocmVsUGF0aCk7XG4gICAgcmVzdWx0LnNlYXJjaCA9IHJlbGF0aXZlLnNlYXJjaDtcbiAgICByZXN1bHQucXVlcnkgPSByZWxhdGl2ZS5xdWVyeTtcbiAgfSBlbHNlIGlmICghaXNOdWxsT3JVbmRlZmluZWQocmVsYXRpdmUuc2VhcmNoKSkge1xuICAgIC8vIGp1c3QgcHVsbCBvdXQgdGhlIHNlYXJjaC5cbiAgICAvLyBsaWtlIGhyZWY9Jz9mb28nLlxuICAgIC8vIFB1dCB0aGlzIGFmdGVyIHRoZSBvdGhlciB0d28gY2FzZXMgYmVjYXVzZSBpdCBzaW1wbGlmaWVzIHRoZSBib29sZWFuc1xuICAgIGlmIChwc3ljaG90aWMpIHtcbiAgICAgIHJlc3VsdC5ob3N0bmFtZSA9IHJlc3VsdC5ob3N0ID0gc3JjUGF0aC5zaGlmdCgpO1xuICAgICAgLy9vY2NhdGlvbmFseSB0aGUgYXV0aCBjYW4gZ2V0IHN0dWNrIG9ubHkgaW4gaG9zdFxuICAgICAgLy90aGlzIGVzcGVjaWFseSBoYXBwZW5zIGluIGNhc2VzIGxpa2VcbiAgICAgIC8vdXJsLnJlc29sdmVPYmplY3QoJ21haWx0bzpsb2NhbDFAZG9tYWluMScsICdsb2NhbDJAZG9tYWluMicpXG4gICAgICB2YXIgYXV0aEluSG9zdCA9IHJlc3VsdC5ob3N0ICYmIHJlc3VsdC5ob3N0LmluZGV4T2YoJ0AnKSA+IDAgP1xuICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQuaG9zdC5zcGxpdCgnQCcpIDogZmFsc2U7XG4gICAgICBpZiAoYXV0aEluSG9zdCkge1xuICAgICAgICByZXN1bHQuYXV0aCA9IGF1dGhJbkhvc3Quc2hpZnQoKTtcbiAgICAgICAgcmVzdWx0Lmhvc3QgPSByZXN1bHQuaG9zdG5hbWUgPSBhdXRoSW5Ib3N0LnNoaWZ0KCk7XG4gICAgICB9XG4gICAgfVxuICAgIHJlc3VsdC5zZWFyY2ggPSByZWxhdGl2ZS5zZWFyY2g7XG4gICAgcmVzdWx0LnF1ZXJ5ID0gcmVsYXRpdmUucXVlcnk7XG4gICAgLy90byBzdXBwb3J0IGh0dHAucmVxdWVzdFxuICAgIGlmICghaXNOdWxsKHJlc3VsdC5wYXRobmFtZSkgfHwgIWlzTnVsbChyZXN1bHQuc2VhcmNoKSkge1xuICAgICAgcmVzdWx0LnBhdGggPSAocmVzdWx0LnBhdGhuYW1lID8gcmVzdWx0LnBhdGhuYW1lIDogJycpICtcbiAgICAgICAgICAgICAgICAgICAgKHJlc3VsdC5zZWFyY2ggPyByZXN1bHQuc2VhcmNoIDogJycpO1xuICAgIH1cbiAgICByZXN1bHQuaHJlZiA9IHJlc3VsdC5mb3JtYXQoKTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgaWYgKCFzcmNQYXRoLmxlbmd0aCkge1xuICAgIC8vIG5vIHBhdGggYXQgYWxsLiAgZWFzeS5cbiAgICAvLyB3ZSd2ZSBhbHJlYWR5IGhhbmRsZWQgdGhlIG90aGVyIHN0dWZmIGFib3ZlLlxuICAgIHJlc3VsdC5wYXRobmFtZSA9IG51bGw7XG4gICAgLy90byBzdXBwb3J0IGh0dHAucmVxdWVzdFxuICAgIGlmIChyZXN1bHQuc2VhcmNoKSB7XG4gICAgICByZXN1bHQucGF0aCA9ICcvJyArIHJlc3VsdC5zZWFyY2g7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJlc3VsdC5wYXRoID0gbnVsbDtcbiAgICB9XG4gICAgcmVzdWx0LmhyZWYgPSByZXN1bHQuZm9ybWF0KCk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIC8vIGlmIGEgdXJsIEVORHMgaW4gLiBvciAuLiwgdGhlbiBpdCBtdXN0IGdldCBhIHRyYWlsaW5nIHNsYXNoLlxuICAvLyBob3dldmVyLCBpZiBpdCBlbmRzIGluIGFueXRoaW5nIGVsc2Ugbm9uLXNsYXNoeSxcbiAgLy8gdGhlbiBpdCBtdXN0IE5PVCBnZXQgYSB0cmFpbGluZyBzbGFzaC5cbiAgdmFyIGxhc3QgPSBzcmNQYXRoLnNsaWNlKC0xKVswXTtcbiAgdmFyIGhhc1RyYWlsaW5nU2xhc2ggPSAoXG4gICAgICAocmVzdWx0Lmhvc3QgfHwgcmVsYXRpdmUuaG9zdCkgJiYgKGxhc3QgPT09ICcuJyB8fCBsYXN0ID09PSAnLi4nKSB8fFxuICAgICAgbGFzdCA9PT0gJycpO1xuXG4gIC8vIHN0cmlwIHNpbmdsZSBkb3RzLCByZXNvbHZlIGRvdWJsZSBkb3RzIHRvIHBhcmVudCBkaXJcbiAgLy8gaWYgdGhlIHBhdGggdHJpZXMgdG8gZ28gYWJvdmUgdGhlIHJvb3QsIGB1cGAgZW5kcyB1cCA+IDBcbiAgdmFyIHVwID0gMDtcbiAgZm9yICh2YXIgaSA9IHNyY1BhdGgubGVuZ3RoOyBpID49IDA7IGktLSkge1xuICAgIGxhc3QgPSBzcmNQYXRoW2ldO1xuICAgIGlmIChsYXN0ID09ICcuJykge1xuICAgICAgc3JjUGF0aC5zcGxpY2UoaSwgMSk7XG4gICAgfSBlbHNlIGlmIChsYXN0ID09PSAnLi4nKSB7XG4gICAgICBzcmNQYXRoLnNwbGljZShpLCAxKTtcbiAgICAgIHVwKys7XG4gICAgfSBlbHNlIGlmICh1cCkge1xuICAgICAgc3JjUGF0aC5zcGxpY2UoaSwgMSk7XG4gICAgICB1cC0tO1xuICAgIH1cbiAgfVxuXG4gIC8vIGlmIHRoZSBwYXRoIGlzIGFsbG93ZWQgdG8gZ28gYWJvdmUgdGhlIHJvb3QsIHJlc3RvcmUgbGVhZGluZyAuLnNcbiAgaWYgKCFtdXN0RW5kQWJzICYmICFyZW1vdmVBbGxEb3RzKSB7XG4gICAgZm9yICg7IHVwLS07IHVwKSB7XG4gICAgICBzcmNQYXRoLnVuc2hpZnQoJy4uJyk7XG4gICAgfVxuICB9XG5cbiAgaWYgKG11c3RFbmRBYnMgJiYgc3JjUGF0aFswXSAhPT0gJycgJiZcbiAgICAgICghc3JjUGF0aFswXSB8fCBzcmNQYXRoWzBdLmNoYXJBdCgwKSAhPT0gJy8nKSkge1xuICAgIHNyY1BhdGgudW5zaGlmdCgnJyk7XG4gIH1cblxuICBpZiAoaGFzVHJhaWxpbmdTbGFzaCAmJiAoc3JjUGF0aC5qb2luKCcvJykuc3Vic3RyKC0xKSAhPT0gJy8nKSkge1xuICAgIHNyY1BhdGgucHVzaCgnJyk7XG4gIH1cblxuICB2YXIgaXNBYnNvbHV0ZSA9IHNyY1BhdGhbMF0gPT09ICcnIHx8XG4gICAgICAoc3JjUGF0aFswXSAmJiBzcmNQYXRoWzBdLmNoYXJBdCgwKSA9PT0gJy8nKTtcblxuICAvLyBwdXQgdGhlIGhvc3QgYmFja1xuICBpZiAocHN5Y2hvdGljKSB7XG4gICAgcmVzdWx0Lmhvc3RuYW1lID0gcmVzdWx0Lmhvc3QgPSBpc0Fic29sdXRlID8gJycgOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjUGF0aC5sZW5ndGggPyBzcmNQYXRoLnNoaWZ0KCkgOiAnJztcbiAgICAvL29jY2F0aW9uYWx5IHRoZSBhdXRoIGNhbiBnZXQgc3R1Y2sgb25seSBpbiBob3N0XG4gICAgLy90aGlzIGVzcGVjaWFseSBoYXBwZW5zIGluIGNhc2VzIGxpa2VcbiAgICAvL3VybC5yZXNvbHZlT2JqZWN0KCdtYWlsdG86bG9jYWwxQGRvbWFpbjEnLCAnbG9jYWwyQGRvbWFpbjInKVxuICAgIHZhciBhdXRoSW5Ib3N0ID0gcmVzdWx0Lmhvc3QgJiYgcmVzdWx0Lmhvc3QuaW5kZXhPZignQCcpID4gMCA/XG4gICAgICAgICAgICAgICAgICAgICByZXN1bHQuaG9zdC5zcGxpdCgnQCcpIDogZmFsc2U7XG4gICAgaWYgKGF1dGhJbkhvc3QpIHtcbiAgICAgIHJlc3VsdC5hdXRoID0gYXV0aEluSG9zdC5zaGlmdCgpO1xuICAgICAgcmVzdWx0Lmhvc3QgPSByZXN1bHQuaG9zdG5hbWUgPSBhdXRoSW5Ib3N0LnNoaWZ0KCk7XG4gICAgfVxuICB9XG5cbiAgbXVzdEVuZEFicyA9IG11c3RFbmRBYnMgfHwgKHJlc3VsdC5ob3N0ICYmIHNyY1BhdGgubGVuZ3RoKTtcblxuICBpZiAobXVzdEVuZEFicyAmJiAhaXNBYnNvbHV0ZSkge1xuICAgIHNyY1BhdGgudW5zaGlmdCgnJyk7XG4gIH1cblxuICBpZiAoIXNyY1BhdGgubGVuZ3RoKSB7XG4gICAgcmVzdWx0LnBhdGhuYW1lID0gbnVsbDtcbiAgICByZXN1bHQucGF0aCA9IG51bGw7XG4gIH0gZWxzZSB7XG4gICAgcmVzdWx0LnBhdGhuYW1lID0gc3JjUGF0aC5qb2luKCcvJyk7XG4gIH1cblxuICAvL3RvIHN1cHBvcnQgcmVxdWVzdC5odHRwXG4gIGlmICghaXNOdWxsKHJlc3VsdC5wYXRobmFtZSkgfHwgIWlzTnVsbChyZXN1bHQuc2VhcmNoKSkge1xuICAgIHJlc3VsdC5wYXRoID0gKHJlc3VsdC5wYXRobmFtZSA/IHJlc3VsdC5wYXRobmFtZSA6ICcnKSArXG4gICAgICAgICAgICAgICAgICAocmVzdWx0LnNlYXJjaCA/IHJlc3VsdC5zZWFyY2ggOiAnJyk7XG4gIH1cbiAgcmVzdWx0LmF1dGggPSByZWxhdGl2ZS5hdXRoIHx8IHJlc3VsdC5hdXRoO1xuICByZXN1bHQuc2xhc2hlcyA9IHJlc3VsdC5zbGFzaGVzIHx8IHJlbGF0aXZlLnNsYXNoZXM7XG4gIHJlc3VsdC5ocmVmID0gcmVzdWx0LmZvcm1hdCgpO1xuICByZXR1cm4gcmVzdWx0O1xufTtcblxuVXJsLnByb3RvdHlwZS5wYXJzZUhvc3QgPSBmdW5jdGlvbigpIHtcbiAgdmFyIGhvc3QgPSB0aGlzLmhvc3Q7XG4gIHZhciBwb3J0ID0gcG9ydFBhdHRlcm4uZXhlYyhob3N0KTtcbiAgaWYgKHBvcnQpIHtcbiAgICBwb3J0ID0gcG9ydFswXTtcbiAgICBpZiAocG9ydCAhPT0gJzonKSB7XG4gICAgICB0aGlzLnBvcnQgPSBwb3J0LnN1YnN0cigxKTtcbiAgICB9XG4gICAgaG9zdCA9IGhvc3Quc3Vic3RyKDAsIGhvc3QubGVuZ3RoIC0gcG9ydC5sZW5ndGgpO1xuICB9XG4gIGlmIChob3N0KSB0aGlzLmhvc3RuYW1lID0gaG9zdDtcbn07XG5cbmZ1bmN0aW9uIGlzU3RyaW5nKGFyZykge1xuICByZXR1cm4gdHlwZW9mIGFyZyA9PT0gXCJzdHJpbmdcIjtcbn1cblxuZnVuY3Rpb24gaXNPYmplY3QoYXJnKSB7XG4gIHJldHVybiB0eXBlb2YgYXJnID09PSAnb2JqZWN0JyAmJiBhcmcgIT09IG51bGw7XG59XG5cbmZ1bmN0aW9uIGlzTnVsbChhcmcpIHtcbiAgcmV0dXJuIGFyZyA9PT0gbnVsbDtcbn1cbmZ1bmN0aW9uIGlzTnVsbE9yVW5kZWZpbmVkKGFyZykge1xuICByZXR1cm4gIGFyZyA9PSBudWxsO1xufVxuIiwiJ3VzZSBzdHJpY3QnO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGVhcmN1dDtcblxuZnVuY3Rpb24gZWFyY3V0KGRhdGEsIGhvbGVJbmRpY2VzLCBkaW0pIHtcblxuICAgIGRpbSA9IGRpbSB8fCAyO1xuXG4gICAgdmFyIGhhc0hvbGVzID0gaG9sZUluZGljZXMgJiYgaG9sZUluZGljZXMubGVuZ3RoLFxuICAgICAgICBvdXRlckxlbiA9IGhhc0hvbGVzID8gaG9sZUluZGljZXNbMF0gKiBkaW0gOiBkYXRhLmxlbmd0aCxcbiAgICAgICAgb3V0ZXJOb2RlID0gbGlua2VkTGlzdChkYXRhLCAwLCBvdXRlckxlbiwgZGltLCB0cnVlKSxcbiAgICAgICAgdHJpYW5nbGVzID0gW107XG5cbiAgICBpZiAoIW91dGVyTm9kZSkgcmV0dXJuIHRyaWFuZ2xlcztcblxuICAgIHZhciBtaW5YLCBtaW5ZLCBtYXhYLCBtYXhZLCB4LCB5LCBzaXplO1xuXG4gICAgaWYgKGhhc0hvbGVzKSBvdXRlck5vZGUgPSBlbGltaW5hdGVIb2xlcyhkYXRhLCBob2xlSW5kaWNlcywgb3V0ZXJOb2RlLCBkaW0pO1xuXG4gICAgLy8gaWYgdGhlIHNoYXBlIGlzIG5vdCB0b28gc2ltcGxlLCB3ZSdsbCB1c2Ugei1vcmRlciBjdXJ2ZSBoYXNoIGxhdGVyOyBjYWxjdWxhdGUgcG9seWdvbiBiYm94XG4gICAgaWYgKGRhdGEubGVuZ3RoID4gODAgKiBkaW0pIHtcbiAgICAgICAgbWluWCA9IG1heFggPSBkYXRhWzBdO1xuICAgICAgICBtaW5ZID0gbWF4WSA9IGRhdGFbMV07XG5cbiAgICAgICAgZm9yICh2YXIgaSA9IGRpbTsgaSA8IG91dGVyTGVuOyBpICs9IGRpbSkge1xuICAgICAgICAgICAgeCA9IGRhdGFbaV07XG4gICAgICAgICAgICB5ID0gZGF0YVtpICsgMV07XG4gICAgICAgICAgICBpZiAoeCA8IG1pblgpIG1pblggPSB4O1xuICAgICAgICAgICAgaWYgKHkgPCBtaW5ZKSBtaW5ZID0geTtcbiAgICAgICAgICAgIGlmICh4ID4gbWF4WCkgbWF4WCA9IHg7XG4gICAgICAgICAgICBpZiAoeSA+IG1heFkpIG1heFkgPSB5O1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gbWluWCwgbWluWSBhbmQgc2l6ZSBhcmUgbGF0ZXIgdXNlZCB0byB0cmFuc2Zvcm0gY29vcmRzIGludG8gaW50ZWdlcnMgZm9yIHotb3JkZXIgY2FsY3VsYXRpb25cbiAgICAgICAgc2l6ZSA9IE1hdGgubWF4KG1heFggLSBtaW5YLCBtYXhZIC0gbWluWSk7XG4gICAgfVxuXG4gICAgZWFyY3V0TGlua2VkKG91dGVyTm9kZSwgdHJpYW5nbGVzLCBkaW0sIG1pblgsIG1pblksIHNpemUpO1xuXG4gICAgcmV0dXJuIHRyaWFuZ2xlcztcbn1cblxuLy8gY3JlYXRlIGEgY2lyY3VsYXIgZG91Ymx5IGxpbmtlZCBsaXN0IGZyb20gcG9seWdvbiBwb2ludHMgaW4gdGhlIHNwZWNpZmllZCB3aW5kaW5nIG9yZGVyXG5mdW5jdGlvbiBsaW5rZWRMaXN0KGRhdGEsIHN0YXJ0LCBlbmQsIGRpbSwgY2xvY2t3aXNlKSB7XG4gICAgdmFyIHN1bSA9IDAsXG4gICAgICAgIGksIGosIGxhc3Q7XG5cbiAgICAvLyBjYWxjdWxhdGUgb3JpZ2luYWwgd2luZGluZyBvcmRlciBvZiBhIHBvbHlnb24gcmluZ1xuICAgIGZvciAoaSA9IHN0YXJ0LCBqID0gZW5kIC0gZGltOyBpIDwgZW5kOyBpICs9IGRpbSkge1xuICAgICAgICBzdW0gKz0gKGRhdGFbal0gLSBkYXRhW2ldKSAqIChkYXRhW2kgKyAxXSArIGRhdGFbaiArIDFdKTtcbiAgICAgICAgaiA9IGk7XG4gICAgfVxuXG4gICAgLy8gbGluayBwb2ludHMgaW50byBjaXJjdWxhciBkb3VibHktbGlua2VkIGxpc3QgaW4gdGhlIHNwZWNpZmllZCB3aW5kaW5nIG9yZGVyXG4gICAgaWYgKGNsb2Nrd2lzZSA9PT0gKHN1bSA+IDApKSB7XG4gICAgICAgIGZvciAoaSA9IHN0YXJ0OyBpIDwgZW5kOyBpICs9IGRpbSkgbGFzdCA9IGluc2VydE5vZGUoaSwgZGF0YVtpXSwgZGF0YVtpICsgMV0sIGxhc3QpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIGZvciAoaSA9IGVuZCAtIGRpbTsgaSA+PSBzdGFydDsgaSAtPSBkaW0pIGxhc3QgPSBpbnNlcnROb2RlKGksIGRhdGFbaV0sIGRhdGFbaSArIDFdLCBsYXN0KTtcbiAgICB9XG5cbiAgICByZXR1cm4gbGFzdDtcbn1cblxuLy8gZWxpbWluYXRlIGNvbGluZWFyIG9yIGR1cGxpY2F0ZSBwb2ludHNcbmZ1bmN0aW9uIGZpbHRlclBvaW50cyhzdGFydCwgZW5kKSB7XG4gICAgaWYgKCFzdGFydCkgcmV0dXJuIHN0YXJ0O1xuICAgIGlmICghZW5kKSBlbmQgPSBzdGFydDtcblxuICAgIHZhciBwID0gc3RhcnQsXG4gICAgICAgIGFnYWluO1xuICAgIGRvIHtcbiAgICAgICAgYWdhaW4gPSBmYWxzZTtcblxuICAgICAgICBpZiAoIXAuc3RlaW5lciAmJiAoZXF1YWxzKHAsIHAubmV4dCkgfHwgYXJlYShwLnByZXYsIHAsIHAubmV4dCkgPT09IDApKSB7XG4gICAgICAgICAgICByZW1vdmVOb2RlKHApO1xuICAgICAgICAgICAgcCA9IGVuZCA9IHAucHJldjtcbiAgICAgICAgICAgIGlmIChwID09PSBwLm5leHQpIHJldHVybiBudWxsO1xuICAgICAgICAgICAgYWdhaW4gPSB0cnVlO1xuXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBwID0gcC5uZXh0O1xuICAgICAgICB9XG4gICAgfSB3aGlsZSAoYWdhaW4gfHwgcCAhPT0gZW5kKTtcblxuICAgIHJldHVybiBlbmQ7XG59XG5cbi8vIG1haW4gZWFyIHNsaWNpbmcgbG9vcCB3aGljaCB0cmlhbmd1bGF0ZXMgYSBwb2x5Z29uIChnaXZlbiBhcyBhIGxpbmtlZCBsaXN0KVxuZnVuY3Rpb24gZWFyY3V0TGlua2VkKGVhciwgdHJpYW5nbGVzLCBkaW0sIG1pblgsIG1pblksIHNpemUsIHBhc3MpIHtcbiAgICBpZiAoIWVhcikgcmV0dXJuO1xuXG4gICAgLy8gaW50ZXJsaW5rIHBvbHlnb24gbm9kZXMgaW4gei1vcmRlclxuICAgIGlmICghcGFzcyAmJiBzaXplKSBpbmRleEN1cnZlKGVhciwgbWluWCwgbWluWSwgc2l6ZSk7XG5cbiAgICB2YXIgc3RvcCA9IGVhcixcbiAgICAgICAgcHJldiwgbmV4dDtcblxuICAgIC8vIGl0ZXJhdGUgdGhyb3VnaCBlYXJzLCBzbGljaW5nIHRoZW0gb25lIGJ5IG9uZVxuICAgIHdoaWxlIChlYXIucHJldiAhPT0gZWFyLm5leHQpIHtcbiAgICAgICAgcHJldiA9IGVhci5wcmV2O1xuICAgICAgICBuZXh0ID0gZWFyLm5leHQ7XG5cbiAgICAgICAgaWYgKHNpemUgPyBpc0Vhckhhc2hlZChlYXIsIG1pblgsIG1pblksIHNpemUpIDogaXNFYXIoZWFyKSkge1xuICAgICAgICAgICAgLy8gY3V0IG9mZiB0aGUgdHJpYW5nbGVcbiAgICAgICAgICAgIHRyaWFuZ2xlcy5wdXNoKHByZXYuaSAvIGRpbSk7XG4gICAgICAgICAgICB0cmlhbmdsZXMucHVzaChlYXIuaSAvIGRpbSk7XG4gICAgICAgICAgICB0cmlhbmdsZXMucHVzaChuZXh0LmkgLyBkaW0pO1xuXG4gICAgICAgICAgICByZW1vdmVOb2RlKGVhcik7XG5cbiAgICAgICAgICAgIC8vIHNraXBwaW5nIHRoZSBuZXh0IHZlcnRpY2UgbGVhZHMgdG8gbGVzcyBzbGl2ZXIgdHJpYW5nbGVzXG4gICAgICAgICAgICBlYXIgPSBuZXh0Lm5leHQ7XG4gICAgICAgICAgICBzdG9wID0gbmV4dC5uZXh0O1xuXG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGVhciA9IG5leHQ7XG5cbiAgICAgICAgLy8gaWYgd2UgbG9vcGVkIHRocm91Z2ggdGhlIHdob2xlIHJlbWFpbmluZyBwb2x5Z29uIGFuZCBjYW4ndCBmaW5kIGFueSBtb3JlIGVhcnNcbiAgICAgICAgaWYgKGVhciA9PT0gc3RvcCkge1xuICAgICAgICAgICAgLy8gdHJ5IGZpbHRlcmluZyBwb2ludHMgYW5kIHNsaWNpbmcgYWdhaW5cbiAgICAgICAgICAgIGlmICghcGFzcykge1xuICAgICAgICAgICAgICAgIGVhcmN1dExpbmtlZChmaWx0ZXJQb2ludHMoZWFyKSwgdHJpYW5nbGVzLCBkaW0sIG1pblgsIG1pblksIHNpemUsIDEpO1xuXG4gICAgICAgICAgICAvLyBpZiB0aGlzIGRpZG4ndCB3b3JrLCB0cnkgY3VyaW5nIGFsbCBzbWFsbCBzZWxmLWludGVyc2VjdGlvbnMgbG9jYWxseVxuICAgICAgICAgICAgfSBlbHNlIGlmIChwYXNzID09PSAxKSB7XG4gICAgICAgICAgICAgICAgZWFyID0gY3VyZUxvY2FsSW50ZXJzZWN0aW9ucyhlYXIsIHRyaWFuZ2xlcywgZGltKTtcbiAgICAgICAgICAgICAgICBlYXJjdXRMaW5rZWQoZWFyLCB0cmlhbmdsZXMsIGRpbSwgbWluWCwgbWluWSwgc2l6ZSwgMik7XG5cbiAgICAgICAgICAgIC8vIGFzIGEgbGFzdCByZXNvcnQsIHRyeSBzcGxpdHRpbmcgdGhlIHJlbWFpbmluZyBwb2x5Z29uIGludG8gdHdvXG4gICAgICAgICAgICB9IGVsc2UgaWYgKHBhc3MgPT09IDIpIHtcbiAgICAgICAgICAgICAgICBzcGxpdEVhcmN1dChlYXIsIHRyaWFuZ2xlcywgZGltLCBtaW5YLCBtaW5ZLCBzaXplKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbi8vIGNoZWNrIHdoZXRoZXIgYSBwb2x5Z29uIG5vZGUgZm9ybXMgYSB2YWxpZCBlYXIgd2l0aCBhZGphY2VudCBub2Rlc1xuZnVuY3Rpb24gaXNFYXIoZWFyKSB7XG4gICAgdmFyIGEgPSBlYXIucHJldixcbiAgICAgICAgYiA9IGVhcixcbiAgICAgICAgYyA9IGVhci5uZXh0O1xuXG4gICAgaWYgKGFyZWEoYSwgYiwgYykgPj0gMCkgcmV0dXJuIGZhbHNlOyAvLyByZWZsZXgsIGNhbid0IGJlIGFuIGVhclxuXG4gICAgLy8gbm93IG1ha2Ugc3VyZSB3ZSBkb24ndCBoYXZlIG90aGVyIHBvaW50cyBpbnNpZGUgdGhlIHBvdGVudGlhbCBlYXJcbiAgICB2YXIgcCA9IGVhci5uZXh0Lm5leHQ7XG5cbiAgICB3aGlsZSAocCAhPT0gZWFyLnByZXYpIHtcbiAgICAgICAgaWYgKHBvaW50SW5UcmlhbmdsZShhLngsIGEueSwgYi54LCBiLnksIGMueCwgYy55LCBwLngsIHAueSkgJiZcbiAgICAgICAgICAgIGFyZWEocC5wcmV2LCBwLCBwLm5leHQpID49IDApIHJldHVybiBmYWxzZTtcbiAgICAgICAgcCA9IHAubmV4dDtcbiAgICB9XG5cbiAgICByZXR1cm4gdHJ1ZTtcbn1cblxuZnVuY3Rpb24gaXNFYXJIYXNoZWQoZWFyLCBtaW5YLCBtaW5ZLCBzaXplKSB7XG4gICAgdmFyIGEgPSBlYXIucHJldixcbiAgICAgICAgYiA9IGVhcixcbiAgICAgICAgYyA9IGVhci5uZXh0O1xuXG4gICAgaWYgKGFyZWEoYSwgYiwgYykgPj0gMCkgcmV0dXJuIGZhbHNlOyAvLyByZWZsZXgsIGNhbid0IGJlIGFuIGVhclxuXG4gICAgLy8gdHJpYW5nbGUgYmJveDsgbWluICYgbWF4IGFyZSBjYWxjdWxhdGVkIGxpa2UgdGhpcyBmb3Igc3BlZWRcbiAgICB2YXIgbWluVFggPSBhLnggPCBiLnggPyAoYS54IDwgYy54ID8gYS54IDogYy54KSA6IChiLnggPCBjLnggPyBiLnggOiBjLngpLFxuICAgICAgICBtaW5UWSA9IGEueSA8IGIueSA/IChhLnkgPCBjLnkgPyBhLnkgOiBjLnkpIDogKGIueSA8IGMueSA/IGIueSA6IGMueSksXG4gICAgICAgIG1heFRYID0gYS54ID4gYi54ID8gKGEueCA+IGMueCA/IGEueCA6IGMueCkgOiAoYi54ID4gYy54ID8gYi54IDogYy54KSxcbiAgICAgICAgbWF4VFkgPSBhLnkgPiBiLnkgPyAoYS55ID4gYy55ID8gYS55IDogYy55KSA6IChiLnkgPiBjLnkgPyBiLnkgOiBjLnkpO1xuXG4gICAgLy8gei1vcmRlciByYW5nZSBmb3IgdGhlIGN1cnJlbnQgdHJpYW5nbGUgYmJveDtcbiAgICB2YXIgbWluWiA9IHpPcmRlcihtaW5UWCwgbWluVFksIG1pblgsIG1pblksIHNpemUpLFxuICAgICAgICBtYXhaID0gek9yZGVyKG1heFRYLCBtYXhUWSwgbWluWCwgbWluWSwgc2l6ZSk7XG5cbiAgICAvLyBmaXJzdCBsb29rIGZvciBwb2ludHMgaW5zaWRlIHRoZSB0cmlhbmdsZSBpbiBpbmNyZWFzaW5nIHotb3JkZXJcbiAgICB2YXIgcCA9IGVhci5uZXh0WjtcblxuICAgIHdoaWxlIChwICYmIHAueiA8PSBtYXhaKSB7XG4gICAgICAgIGlmIChwICE9PSBlYXIucHJldiAmJiBwICE9PSBlYXIubmV4dCAmJlxuICAgICAgICAgICAgcG9pbnRJblRyaWFuZ2xlKGEueCwgYS55LCBiLngsIGIueSwgYy54LCBjLnksIHAueCwgcC55KSAmJlxuICAgICAgICAgICAgYXJlYShwLnByZXYsIHAsIHAubmV4dCkgPj0gMCkgcmV0dXJuIGZhbHNlO1xuICAgICAgICBwID0gcC5uZXh0WjtcbiAgICB9XG5cbiAgICAvLyB0aGVuIGxvb2sgZm9yIHBvaW50cyBpbiBkZWNyZWFzaW5nIHotb3JkZXJcbiAgICBwID0gZWFyLnByZXZaO1xuXG4gICAgd2hpbGUgKHAgJiYgcC56ID49IG1pblopIHtcbiAgICAgICAgaWYgKHAgIT09IGVhci5wcmV2ICYmIHAgIT09IGVhci5uZXh0ICYmXG4gICAgICAgICAgICBwb2ludEluVHJpYW5nbGUoYS54LCBhLnksIGIueCwgYi55LCBjLngsIGMueSwgcC54LCBwLnkpICYmXG4gICAgICAgICAgICBhcmVhKHAucHJldiwgcCwgcC5uZXh0KSA+PSAwKSByZXR1cm4gZmFsc2U7XG4gICAgICAgIHAgPSBwLnByZXZaO1xuICAgIH1cblxuICAgIHJldHVybiB0cnVlO1xufVxuXG4vLyBnbyB0aHJvdWdoIGFsbCBwb2x5Z29uIG5vZGVzIGFuZCBjdXJlIHNtYWxsIGxvY2FsIHNlbGYtaW50ZXJzZWN0aW9uc1xuZnVuY3Rpb24gY3VyZUxvY2FsSW50ZXJzZWN0aW9ucyhzdGFydCwgdHJpYW5nbGVzLCBkaW0pIHtcbiAgICB2YXIgcCA9IHN0YXJ0O1xuICAgIGRvIHtcbiAgICAgICAgdmFyIGEgPSBwLnByZXYsXG4gICAgICAgICAgICBiID0gcC5uZXh0Lm5leHQ7XG5cbiAgICAgICAgLy8gYSBzZWxmLWludGVyc2VjdGlvbiB3aGVyZSBlZGdlICh2W2ktMV0sdltpXSkgaW50ZXJzZWN0cyAodltpKzFdLHZbaSsyXSlcbiAgICAgICAgaWYgKGludGVyc2VjdHMoYSwgcCwgcC5uZXh0LCBiKSAmJiBsb2NhbGx5SW5zaWRlKGEsIGIpICYmIGxvY2FsbHlJbnNpZGUoYiwgYSkpIHtcblxuICAgICAgICAgICAgdHJpYW5nbGVzLnB1c2goYS5pIC8gZGltKTtcbiAgICAgICAgICAgIHRyaWFuZ2xlcy5wdXNoKHAuaSAvIGRpbSk7XG4gICAgICAgICAgICB0cmlhbmdsZXMucHVzaChiLmkgLyBkaW0pO1xuXG4gICAgICAgICAgICAvLyByZW1vdmUgdHdvIG5vZGVzIGludm9sdmVkXG4gICAgICAgICAgICByZW1vdmVOb2RlKHApO1xuICAgICAgICAgICAgcmVtb3ZlTm9kZShwLm5leHQpO1xuXG4gICAgICAgICAgICBwID0gc3RhcnQgPSBiO1xuICAgICAgICB9XG4gICAgICAgIHAgPSBwLm5leHQ7XG4gICAgfSB3aGlsZSAocCAhPT0gc3RhcnQpO1xuXG4gICAgcmV0dXJuIHA7XG59XG5cbi8vIHRyeSBzcGxpdHRpbmcgcG9seWdvbiBpbnRvIHR3byBhbmQgdHJpYW5ndWxhdGUgdGhlbSBpbmRlcGVuZGVudGx5XG5mdW5jdGlvbiBzcGxpdEVhcmN1dChzdGFydCwgdHJpYW5nbGVzLCBkaW0sIG1pblgsIG1pblksIHNpemUpIHtcbiAgICAvLyBsb29rIGZvciBhIHZhbGlkIGRpYWdvbmFsIHRoYXQgZGl2aWRlcyB0aGUgcG9seWdvbiBpbnRvIHR3b1xuICAgIHZhciBhID0gc3RhcnQ7XG4gICAgZG8ge1xuICAgICAgICB2YXIgYiA9IGEubmV4dC5uZXh0O1xuICAgICAgICB3aGlsZSAoYiAhPT0gYS5wcmV2KSB7XG4gICAgICAgICAgICBpZiAoYS5pICE9PSBiLmkgJiYgaXNWYWxpZERpYWdvbmFsKGEsIGIpKSB7XG4gICAgICAgICAgICAgICAgLy8gc3BsaXQgdGhlIHBvbHlnb24gaW4gdHdvIGJ5IHRoZSBkaWFnb25hbFxuICAgICAgICAgICAgICAgIHZhciBjID0gc3BsaXRQb2x5Z29uKGEsIGIpO1xuXG4gICAgICAgICAgICAgICAgLy8gZmlsdGVyIGNvbGluZWFyIHBvaW50cyBhcm91bmQgdGhlIGN1dHNcbiAgICAgICAgICAgICAgICBhID0gZmlsdGVyUG9pbnRzKGEsIGEubmV4dCk7XG4gICAgICAgICAgICAgICAgYyA9IGZpbHRlclBvaW50cyhjLCBjLm5leHQpO1xuXG4gICAgICAgICAgICAgICAgLy8gcnVuIGVhcmN1dCBvbiBlYWNoIGhhbGZcbiAgICAgICAgICAgICAgICBlYXJjdXRMaW5rZWQoYSwgdHJpYW5nbGVzLCBkaW0sIG1pblgsIG1pblksIHNpemUpO1xuICAgICAgICAgICAgICAgIGVhcmN1dExpbmtlZChjLCB0cmlhbmdsZXMsIGRpbSwgbWluWCwgbWluWSwgc2l6ZSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYiA9IGIubmV4dDtcbiAgICAgICAgfVxuICAgICAgICBhID0gYS5uZXh0O1xuICAgIH0gd2hpbGUgKGEgIT09IHN0YXJ0KTtcbn1cblxuLy8gbGluayBldmVyeSBob2xlIGludG8gdGhlIG91dGVyIGxvb3AsIHByb2R1Y2luZyBhIHNpbmdsZS1yaW5nIHBvbHlnb24gd2l0aG91dCBob2xlc1xuZnVuY3Rpb24gZWxpbWluYXRlSG9sZXMoZGF0YSwgaG9sZUluZGljZXMsIG91dGVyTm9kZSwgZGltKSB7XG4gICAgdmFyIHF1ZXVlID0gW10sXG4gICAgICAgIGksIGxlbiwgc3RhcnQsIGVuZCwgbGlzdDtcblxuICAgIGZvciAoaSA9IDAsIGxlbiA9IGhvbGVJbmRpY2VzLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICAgIHN0YXJ0ID0gaG9sZUluZGljZXNbaV0gKiBkaW07XG4gICAgICAgIGVuZCA9IGkgPCBsZW4gLSAxID8gaG9sZUluZGljZXNbaSArIDFdICogZGltIDogZGF0YS5sZW5ndGg7XG4gICAgICAgIGxpc3QgPSBsaW5rZWRMaXN0KGRhdGEsIHN0YXJ0LCBlbmQsIGRpbSwgZmFsc2UpO1xuICAgICAgICBpZiAobGlzdCA9PT0gbGlzdC5uZXh0KSBsaXN0LnN0ZWluZXIgPSB0cnVlO1xuICAgICAgICBxdWV1ZS5wdXNoKGdldExlZnRtb3N0KGxpc3QpKTtcbiAgICB9XG5cbiAgICBxdWV1ZS5zb3J0KGNvbXBhcmVYKTtcblxuICAgIC8vIHByb2Nlc3MgaG9sZXMgZnJvbSBsZWZ0IHRvIHJpZ2h0XG4gICAgZm9yIChpID0gMDsgaSA8IHF1ZXVlLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGVsaW1pbmF0ZUhvbGUocXVldWVbaV0sIG91dGVyTm9kZSk7XG4gICAgICAgIG91dGVyTm9kZSA9IGZpbHRlclBvaW50cyhvdXRlck5vZGUsIG91dGVyTm9kZS5uZXh0KTtcbiAgICB9XG5cbiAgICByZXR1cm4gb3V0ZXJOb2RlO1xufVxuXG5mdW5jdGlvbiBjb21wYXJlWChhLCBiKSB7XG4gICAgcmV0dXJuIGEueCAtIGIueDtcbn1cblxuLy8gZmluZCBhIGJyaWRnZSBiZXR3ZWVuIHZlcnRpY2VzIHRoYXQgY29ubmVjdHMgaG9sZSB3aXRoIGFuIG91dGVyIHJpbmcgYW5kIGFuZCBsaW5rIGl0XG5mdW5jdGlvbiBlbGltaW5hdGVIb2xlKGhvbGUsIG91dGVyTm9kZSkge1xuICAgIG91dGVyTm9kZSA9IGZpbmRIb2xlQnJpZGdlKGhvbGUsIG91dGVyTm9kZSk7XG4gICAgaWYgKG91dGVyTm9kZSkge1xuICAgICAgICB2YXIgYiA9IHNwbGl0UG9seWdvbihvdXRlck5vZGUsIGhvbGUpO1xuICAgICAgICBmaWx0ZXJQb2ludHMoYiwgYi5uZXh0KTtcbiAgICB9XG59XG5cbi8vIERhdmlkIEViZXJseSdzIGFsZ29yaXRobSBmb3IgZmluZGluZyBhIGJyaWRnZSBiZXR3ZWVuIGhvbGUgYW5kIG91dGVyIHBvbHlnb25cbmZ1bmN0aW9uIGZpbmRIb2xlQnJpZGdlKGhvbGUsIG91dGVyTm9kZSkge1xuICAgIHZhciBwID0gb3V0ZXJOb2RlLFxuICAgICAgICBoeCA9IGhvbGUueCxcbiAgICAgICAgaHkgPSBob2xlLnksXG4gICAgICAgIHF4ID0gLUluZmluaXR5LFxuICAgICAgICBtO1xuXG4gICAgLy8gZmluZCBhIHNlZ21lbnQgaW50ZXJzZWN0ZWQgYnkgYSByYXkgZnJvbSB0aGUgaG9sZSdzIGxlZnRtb3N0IHBvaW50IHRvIHRoZSBsZWZ0O1xuICAgIC8vIHNlZ21lbnQncyBlbmRwb2ludCB3aXRoIGxlc3NlciB4IHdpbGwgYmUgcG90ZW50aWFsIGNvbm5lY3Rpb24gcG9pbnRcbiAgICBkbyB7XG4gICAgICAgIGlmIChoeSA8PSBwLnkgJiYgaHkgPj0gcC5uZXh0LnkpIHtcbiAgICAgICAgICAgIHZhciB4ID0gcC54ICsgKGh5IC0gcC55KSAqIChwLm5leHQueCAtIHAueCkgLyAocC5uZXh0LnkgLSBwLnkpO1xuICAgICAgICAgICAgaWYgKHggPD0gaHggJiYgeCA+IHF4KSB7XG4gICAgICAgICAgICAgICAgcXggPSB4O1xuICAgICAgICAgICAgICAgIG0gPSBwLnggPCBwLm5leHQueCA/IHAgOiBwLm5leHQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcCA9IHAubmV4dDtcbiAgICB9IHdoaWxlIChwICE9PSBvdXRlck5vZGUpO1xuXG4gICAgaWYgKCFtKSByZXR1cm4gbnVsbDtcblxuICAgIC8vIGxvb2sgZm9yIHBvaW50cyBpbnNpZGUgdGhlIHRyaWFuZ2xlIG9mIGhvbGUgcG9pbnQsIHNlZ21lbnQgaW50ZXJzZWN0aW9uIGFuZCBlbmRwb2ludDtcbiAgICAvLyBpZiB0aGVyZSBhcmUgbm8gcG9pbnRzIGZvdW5kLCB3ZSBoYXZlIGEgdmFsaWQgY29ubmVjdGlvbjtcbiAgICAvLyBvdGhlcndpc2UgY2hvb3NlIHRoZSBwb2ludCBvZiB0aGUgbWluaW11bSBhbmdsZSB3aXRoIHRoZSByYXkgYXMgY29ubmVjdGlvbiBwb2ludFxuXG4gICAgdmFyIHN0b3AgPSBtLFxuICAgICAgICB0YW5NaW4gPSBJbmZpbml0eSxcbiAgICAgICAgdGFuO1xuXG4gICAgcCA9IG0ubmV4dDtcblxuICAgIHdoaWxlIChwICE9PSBzdG9wKSB7XG4gICAgICAgIGlmIChoeCA+PSBwLnggJiYgcC54ID49IG0ueCAmJlxuICAgICAgICAgICAgICAgIHBvaW50SW5UcmlhbmdsZShoeSA8IG0ueSA/IGh4IDogcXgsIGh5LCBtLngsIG0ueSwgaHkgPCBtLnkgPyBxeCA6IGh4LCBoeSwgcC54LCBwLnkpKSB7XG5cbiAgICAgICAgICAgIHRhbiA9IE1hdGguYWJzKGh5IC0gcC55KSAvIChoeCAtIHAueCk7IC8vIHRhbmdlbnRpYWxcblxuICAgICAgICAgICAgaWYgKCh0YW4gPCB0YW5NaW4gfHwgKHRhbiA9PT0gdGFuTWluICYmIHAueCA+IG0ueCkpICYmIGxvY2FsbHlJbnNpZGUocCwgaG9sZSkpIHtcbiAgICAgICAgICAgICAgICBtID0gcDtcbiAgICAgICAgICAgICAgICB0YW5NaW4gPSB0YW47XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBwID0gcC5uZXh0O1xuICAgIH1cblxuICAgIHJldHVybiBtO1xufVxuXG4vLyBpbnRlcmxpbmsgcG9seWdvbiBub2RlcyBpbiB6LW9yZGVyXG5mdW5jdGlvbiBpbmRleEN1cnZlKHN0YXJ0LCBtaW5YLCBtaW5ZLCBzaXplKSB7XG4gICAgdmFyIHAgPSBzdGFydDtcbiAgICBkbyB7XG4gICAgICAgIGlmIChwLnogPT09IG51bGwpIHAueiA9IHpPcmRlcihwLngsIHAueSwgbWluWCwgbWluWSwgc2l6ZSk7XG4gICAgICAgIHAucHJldlogPSBwLnByZXY7XG4gICAgICAgIHAubmV4dFogPSBwLm5leHQ7XG4gICAgICAgIHAgPSBwLm5leHQ7XG4gICAgfSB3aGlsZSAocCAhPT0gc3RhcnQpO1xuXG4gICAgcC5wcmV2Wi5uZXh0WiA9IG51bGw7XG4gICAgcC5wcmV2WiA9IG51bGw7XG5cbiAgICBzb3J0TGlua2VkKHApO1xufVxuXG4vLyBTaW1vbiBUYXRoYW0ncyBsaW5rZWQgbGlzdCBtZXJnZSBzb3J0IGFsZ29yaXRobVxuLy8gaHR0cDovL3d3dy5jaGlhcmsuZ3JlZW5lbmQub3JnLnVrL35zZ3RhdGhhbS9hbGdvcml0aG1zL2xpc3Rzb3J0Lmh0bWxcbmZ1bmN0aW9uIHNvcnRMaW5rZWQobGlzdCkge1xuICAgIHZhciBpLCBwLCBxLCBlLCB0YWlsLCBudW1NZXJnZXMsIHBTaXplLCBxU2l6ZSxcbiAgICAgICAgaW5TaXplID0gMTtcblxuICAgIGRvIHtcbiAgICAgICAgcCA9IGxpc3Q7XG4gICAgICAgIGxpc3QgPSBudWxsO1xuICAgICAgICB0YWlsID0gbnVsbDtcbiAgICAgICAgbnVtTWVyZ2VzID0gMDtcblxuICAgICAgICB3aGlsZSAocCkge1xuICAgICAgICAgICAgbnVtTWVyZ2VzKys7XG4gICAgICAgICAgICBxID0gcDtcbiAgICAgICAgICAgIHBTaXplID0gMDtcbiAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBpblNpemU7IGkrKykge1xuICAgICAgICAgICAgICAgIHBTaXplKys7XG4gICAgICAgICAgICAgICAgcSA9IHEubmV4dFo7XG4gICAgICAgICAgICAgICAgaWYgKCFxKSBicmVhaztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcVNpemUgPSBpblNpemU7XG5cbiAgICAgICAgICAgIHdoaWxlIChwU2l6ZSA+IDAgfHwgKHFTaXplID4gMCAmJiBxKSkge1xuXG4gICAgICAgICAgICAgICAgaWYgKHBTaXplID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIGUgPSBxO1xuICAgICAgICAgICAgICAgICAgICBxID0gcS5uZXh0WjtcbiAgICAgICAgICAgICAgICAgICAgcVNpemUtLTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHFTaXplID09PSAwIHx8ICFxKSB7XG4gICAgICAgICAgICAgICAgICAgIGUgPSBwO1xuICAgICAgICAgICAgICAgICAgICBwID0gcC5uZXh0WjtcbiAgICAgICAgICAgICAgICAgICAgcFNpemUtLTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHAueiA8PSBxLnopIHtcbiAgICAgICAgICAgICAgICAgICAgZSA9IHA7XG4gICAgICAgICAgICAgICAgICAgIHAgPSBwLm5leHRaO1xuICAgICAgICAgICAgICAgICAgICBwU2l6ZS0tO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGUgPSBxO1xuICAgICAgICAgICAgICAgICAgICBxID0gcS5uZXh0WjtcbiAgICAgICAgICAgICAgICAgICAgcVNpemUtLTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAodGFpbCkgdGFpbC5uZXh0WiA9IGU7XG4gICAgICAgICAgICAgICAgZWxzZSBsaXN0ID0gZTtcblxuICAgICAgICAgICAgICAgIGUucHJldlogPSB0YWlsO1xuICAgICAgICAgICAgICAgIHRhaWwgPSBlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBwID0gcTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRhaWwubmV4dFogPSBudWxsO1xuICAgICAgICBpblNpemUgKj0gMjtcblxuICAgIH0gd2hpbGUgKG51bU1lcmdlcyA+IDEpO1xuXG4gICAgcmV0dXJuIGxpc3Q7XG59XG5cbi8vIHotb3JkZXIgb2YgYSBwb2ludCBnaXZlbiBjb29yZHMgYW5kIHNpemUgb2YgdGhlIGRhdGEgYm91bmRpbmcgYm94XG5mdW5jdGlvbiB6T3JkZXIoeCwgeSwgbWluWCwgbWluWSwgc2l6ZSkge1xuICAgIC8vIGNvb3JkcyBhcmUgdHJhbnNmb3JtZWQgaW50byBub24tbmVnYXRpdmUgMTUtYml0IGludGVnZXIgcmFuZ2VcbiAgICB4ID0gMzI3NjcgKiAoeCAtIG1pblgpIC8gc2l6ZTtcbiAgICB5ID0gMzI3NjcgKiAoeSAtIG1pblkpIC8gc2l6ZTtcblxuICAgIHggPSAoeCB8ICh4IDw8IDgpKSAmIDB4MDBGRjAwRkY7XG4gICAgeCA9ICh4IHwgKHggPDwgNCkpICYgMHgwRjBGMEYwRjtcbiAgICB4ID0gKHggfCAoeCA8PCAyKSkgJiAweDMzMzMzMzMzO1xuICAgIHggPSAoeCB8ICh4IDw8IDEpKSAmIDB4NTU1NTU1NTU7XG5cbiAgICB5ID0gKHkgfCAoeSA8PCA4KSkgJiAweDAwRkYwMEZGO1xuICAgIHkgPSAoeSB8ICh5IDw8IDQpKSAmIDB4MEYwRjBGMEY7XG4gICAgeSA9ICh5IHwgKHkgPDwgMikpICYgMHgzMzMzMzMzMztcbiAgICB5ID0gKHkgfCAoeSA8PCAxKSkgJiAweDU1NTU1NTU1O1xuXG4gICAgcmV0dXJuIHggfCAoeSA8PCAxKTtcbn1cblxuLy8gZmluZCB0aGUgbGVmdG1vc3Qgbm9kZSBvZiBhIHBvbHlnb24gcmluZ1xuZnVuY3Rpb24gZ2V0TGVmdG1vc3Qoc3RhcnQpIHtcbiAgICB2YXIgcCA9IHN0YXJ0LFxuICAgICAgICBsZWZ0bW9zdCA9IHN0YXJ0O1xuICAgIGRvIHtcbiAgICAgICAgaWYgKHAueCA8IGxlZnRtb3N0LngpIGxlZnRtb3N0ID0gcDtcbiAgICAgICAgcCA9IHAubmV4dDtcbiAgICB9IHdoaWxlIChwICE9PSBzdGFydCk7XG5cbiAgICByZXR1cm4gbGVmdG1vc3Q7XG59XG5cbi8vIGNoZWNrIGlmIGEgcG9pbnQgbGllcyB3aXRoaW4gYSBjb252ZXggdHJpYW5nbGVcbmZ1bmN0aW9uIHBvaW50SW5UcmlhbmdsZShheCwgYXksIGJ4LCBieSwgY3gsIGN5LCBweCwgcHkpIHtcbiAgICByZXR1cm4gKGN4IC0gcHgpICogKGF5IC0gcHkpIC0gKGF4IC0gcHgpICogKGN5IC0gcHkpID49IDAgJiZcbiAgICAgICAgICAgKGF4IC0gcHgpICogKGJ5IC0gcHkpIC0gKGJ4IC0gcHgpICogKGF5IC0gcHkpID49IDAgJiZcbiAgICAgICAgICAgKGJ4IC0gcHgpICogKGN5IC0gcHkpIC0gKGN4IC0gcHgpICogKGJ5IC0gcHkpID49IDA7XG59XG5cbi8vIGNoZWNrIGlmIGEgZGlhZ29uYWwgYmV0d2VlbiB0d28gcG9seWdvbiBub2RlcyBpcyB2YWxpZCAobGllcyBpbiBwb2x5Z29uIGludGVyaW9yKVxuZnVuY3Rpb24gaXNWYWxpZERpYWdvbmFsKGEsIGIpIHtcbiAgICByZXR1cm4gZXF1YWxzKGEsIGIpIHx8IGEubmV4dC5pICE9PSBiLmkgJiYgYS5wcmV2LmkgIT09IGIuaSAmJiAhaW50ZXJzZWN0c1BvbHlnb24oYSwgYikgJiZcbiAgICAgICAgICAgbG9jYWxseUluc2lkZShhLCBiKSAmJiBsb2NhbGx5SW5zaWRlKGIsIGEpICYmIG1pZGRsZUluc2lkZShhLCBiKTtcbn1cblxuLy8gc2lnbmVkIGFyZWEgb2YgYSB0cmlhbmdsZVxuZnVuY3Rpb24gYXJlYShwLCBxLCByKSB7XG4gICAgcmV0dXJuIChxLnkgLSBwLnkpICogKHIueCAtIHEueCkgLSAocS54IC0gcC54KSAqIChyLnkgLSBxLnkpO1xufVxuXG4vLyBjaGVjayBpZiB0d28gcG9pbnRzIGFyZSBlcXVhbFxuZnVuY3Rpb24gZXF1YWxzKHAxLCBwMikge1xuICAgIHJldHVybiBwMS54ID09PSBwMi54ICYmIHAxLnkgPT09IHAyLnk7XG59XG5cbi8vIGNoZWNrIGlmIHR3byBzZWdtZW50cyBpbnRlcnNlY3RcbmZ1bmN0aW9uIGludGVyc2VjdHMocDEsIHExLCBwMiwgcTIpIHtcbiAgICByZXR1cm4gYXJlYShwMSwgcTEsIHAyKSA+IDAgIT09IGFyZWEocDEsIHExLCBxMikgPiAwICYmXG4gICAgICAgICAgIGFyZWEocDIsIHEyLCBwMSkgPiAwICE9PSBhcmVhKHAyLCBxMiwgcTEpID4gMDtcbn1cblxuLy8gY2hlY2sgaWYgYSBwb2x5Z29uIGRpYWdvbmFsIGludGVyc2VjdHMgYW55IHBvbHlnb24gc2VnbWVudHNcbmZ1bmN0aW9uIGludGVyc2VjdHNQb2x5Z29uKGEsIGIpIHtcbiAgICB2YXIgcCA9IGE7XG4gICAgZG8ge1xuICAgICAgICBpZiAocC5pICE9PSBhLmkgJiYgcC5uZXh0LmkgIT09IGEuaSAmJiBwLmkgIT09IGIuaSAmJiBwLm5leHQuaSAhPT0gYi5pICYmXG4gICAgICAgICAgICAgICAgaW50ZXJzZWN0cyhwLCBwLm5leHQsIGEsIGIpKSByZXR1cm4gdHJ1ZTtcbiAgICAgICAgcCA9IHAubmV4dDtcbiAgICB9IHdoaWxlIChwICE9PSBhKTtcblxuICAgIHJldHVybiBmYWxzZTtcbn1cblxuLy8gY2hlY2sgaWYgYSBwb2x5Z29uIGRpYWdvbmFsIGlzIGxvY2FsbHkgaW5zaWRlIHRoZSBwb2x5Z29uXG5mdW5jdGlvbiBsb2NhbGx5SW5zaWRlKGEsIGIpIHtcbiAgICByZXR1cm4gYXJlYShhLnByZXYsIGEsIGEubmV4dCkgPCAwID9cbiAgICAgICAgYXJlYShhLCBiLCBhLm5leHQpID49IDAgJiYgYXJlYShhLCBhLnByZXYsIGIpID49IDAgOlxuICAgICAgICBhcmVhKGEsIGIsIGEucHJldikgPCAwIHx8IGFyZWEoYSwgYS5uZXh0LCBiKSA8IDA7XG59XG5cbi8vIGNoZWNrIGlmIHRoZSBtaWRkbGUgcG9pbnQgb2YgYSBwb2x5Z29uIGRpYWdvbmFsIGlzIGluc2lkZSB0aGUgcG9seWdvblxuZnVuY3Rpb24gbWlkZGxlSW5zaWRlKGEsIGIpIHtcbiAgICB2YXIgcCA9IGEsXG4gICAgICAgIGluc2lkZSA9IGZhbHNlLFxuICAgICAgICBweCA9IChhLnggKyBiLngpIC8gMixcbiAgICAgICAgcHkgPSAoYS55ICsgYi55KSAvIDI7XG4gICAgZG8ge1xuICAgICAgICBpZiAoKChwLnkgPiBweSkgIT09IChwLm5leHQueSA+IHB5KSkgJiYgKHB4IDwgKHAubmV4dC54IC0gcC54KSAqIChweSAtIHAueSkgLyAocC5uZXh0LnkgLSBwLnkpICsgcC54KSlcbiAgICAgICAgICAgIGluc2lkZSA9ICFpbnNpZGU7XG4gICAgICAgIHAgPSBwLm5leHQ7XG4gICAgfSB3aGlsZSAocCAhPT0gYSk7XG5cbiAgICByZXR1cm4gaW5zaWRlO1xufVxuXG4vLyBsaW5rIHR3byBwb2x5Z29uIHZlcnRpY2VzIHdpdGggYSBicmlkZ2U7IGlmIHRoZSB2ZXJ0aWNlcyBiZWxvbmcgdG8gdGhlIHNhbWUgcmluZywgaXQgc3BsaXRzIHBvbHlnb24gaW50byB0d287XG4vLyBpZiBvbmUgYmVsb25ncyB0byB0aGUgb3V0ZXIgcmluZyBhbmQgYW5vdGhlciB0byBhIGhvbGUsIGl0IG1lcmdlcyBpdCBpbnRvIGEgc2luZ2xlIHJpbmdcbmZ1bmN0aW9uIHNwbGl0UG9seWdvbihhLCBiKSB7XG4gICAgdmFyIGEyID0gbmV3IE5vZGUoYS5pLCBhLngsIGEueSksXG4gICAgICAgIGIyID0gbmV3IE5vZGUoYi5pLCBiLngsIGIueSksXG4gICAgICAgIGFuID0gYS5uZXh0LFxuICAgICAgICBicCA9IGIucHJldjtcblxuICAgIGEubmV4dCA9IGI7XG4gICAgYi5wcmV2ID0gYTtcblxuICAgIGEyLm5leHQgPSBhbjtcbiAgICBhbi5wcmV2ID0gYTI7XG5cbiAgICBiMi5uZXh0ID0gYTI7XG4gICAgYTIucHJldiA9IGIyO1xuXG4gICAgYnAubmV4dCA9IGIyO1xuICAgIGIyLnByZXYgPSBicDtcblxuICAgIHJldHVybiBiMjtcbn1cblxuLy8gY3JlYXRlIGEgbm9kZSBhbmQgb3B0aW9uYWxseSBsaW5rIGl0IHdpdGggcHJldmlvdXMgb25lIChpbiBhIGNpcmN1bGFyIGRvdWJseSBsaW5rZWQgbGlzdClcbmZ1bmN0aW9uIGluc2VydE5vZGUoaSwgeCwgeSwgbGFzdCkge1xuICAgIHZhciBwID0gbmV3IE5vZGUoaSwgeCwgeSk7XG5cbiAgICBpZiAoIWxhc3QpIHtcbiAgICAgICAgcC5wcmV2ID0gcDtcbiAgICAgICAgcC5uZXh0ID0gcDtcblxuICAgIH0gZWxzZSB7XG4gICAgICAgIHAubmV4dCA9IGxhc3QubmV4dDtcbiAgICAgICAgcC5wcmV2ID0gbGFzdDtcbiAgICAgICAgbGFzdC5uZXh0LnByZXYgPSBwO1xuICAgICAgICBsYXN0Lm5leHQgPSBwO1xuICAgIH1cbiAgICByZXR1cm4gcDtcbn1cblxuZnVuY3Rpb24gcmVtb3ZlTm9kZShwKSB7XG4gICAgcC5uZXh0LnByZXYgPSBwLnByZXY7XG4gICAgcC5wcmV2Lm5leHQgPSBwLm5leHQ7XG5cbiAgICBpZiAocC5wcmV2WikgcC5wcmV2Wi5uZXh0WiA9IHAubmV4dFo7XG4gICAgaWYgKHAubmV4dFopIHAubmV4dFoucHJldlogPSBwLnByZXZaO1xufVxuXG5mdW5jdGlvbiBOb2RlKGksIHgsIHkpIHtcbiAgICAvLyB2ZXJ0aWNlIGluZGV4IGluIGNvb3JkaW5hdGVzIGFycmF5XG4gICAgdGhpcy5pID0gaTtcblxuICAgIC8vIHZlcnRleCBjb29yZGluYXRlc1xuICAgIHRoaXMueCA9IHg7XG4gICAgdGhpcy55ID0geTtcblxuICAgIC8vIHByZXZpb3VzIGFuZCBuZXh0IHZlcnRpY2Ugbm9kZXMgaW4gYSBwb2x5Z29uIHJpbmdcbiAgICB0aGlzLnByZXYgPSBudWxsO1xuICAgIHRoaXMubmV4dCA9IG51bGw7XG5cbiAgICAvLyB6LW9yZGVyIGN1cnZlIHZhbHVlXG4gICAgdGhpcy56ID0gbnVsbDtcblxuICAgIC8vIHByZXZpb3VzIGFuZCBuZXh0IG5vZGVzIGluIHotb3JkZXJcbiAgICB0aGlzLnByZXZaID0gbnVsbDtcbiAgICB0aGlzLm5leHRaID0gbnVsbDtcblxuICAgIC8vIGluZGljYXRlcyB3aGV0aGVyIHRoaXMgaXMgYSBzdGVpbmVyIHBvaW50XG4gICAgdGhpcy5zdGVpbmVyID0gZmFsc2U7XG59XG4iLCIndXNlIHN0cmljdCc7XG5cbi8vXG4vLyBXZSBzdG9yZSBvdXIgRUUgb2JqZWN0cyBpbiBhIHBsYWluIG9iamVjdCB3aG9zZSBwcm9wZXJ0aWVzIGFyZSBldmVudCBuYW1lcy5cbi8vIElmIGBPYmplY3QuY3JlYXRlKG51bGwpYCBpcyBub3Qgc3VwcG9ydGVkIHdlIHByZWZpeCB0aGUgZXZlbnQgbmFtZXMgd2l0aCBhXG4vLyBgfmAgdG8gbWFrZSBzdXJlIHRoYXQgdGhlIGJ1aWx0LWluIG9iamVjdCBwcm9wZXJ0aWVzIGFyZSBub3Qgb3ZlcnJpZGRlbiBvclxuLy8gdXNlZCBhcyBhbiBhdHRhY2sgdmVjdG9yLlxuLy8gV2UgYWxzbyBhc3N1bWUgdGhhdCBgT2JqZWN0LmNyZWF0ZShudWxsKWAgaXMgYXZhaWxhYmxlIHdoZW4gdGhlIGV2ZW50IG5hbWVcbi8vIGlzIGFuIEVTNiBTeW1ib2wuXG4vL1xudmFyIHByZWZpeCA9IHR5cGVvZiBPYmplY3QuY3JlYXRlICE9PSAnZnVuY3Rpb24nID8gJ34nIDogZmFsc2U7XG5cbi8qKlxuICogUmVwcmVzZW50YXRpb24gb2YgYSBzaW5nbGUgRXZlbnRFbWl0dGVyIGZ1bmN0aW9uLlxuICpcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZuIEV2ZW50IGhhbmRsZXIgdG8gYmUgY2FsbGVkLlxuICogQHBhcmFtIHtNaXhlZH0gY29udGV4dCBDb250ZXh0IGZvciBmdW5jdGlvbiBleGVjdXRpb24uXG4gKiBAcGFyYW0ge0Jvb2xlYW59IG9uY2UgT25seSBlbWl0IG9uY2VcbiAqIEBhcGkgcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBFRShmbiwgY29udGV4dCwgb25jZSkge1xuICB0aGlzLmZuID0gZm47XG4gIHRoaXMuY29udGV4dCA9IGNvbnRleHQ7XG4gIHRoaXMub25jZSA9IG9uY2UgfHwgZmFsc2U7XG59XG5cbi8qKlxuICogTWluaW1hbCBFdmVudEVtaXR0ZXIgaW50ZXJmYWNlIHRoYXQgaXMgbW9sZGVkIGFnYWluc3QgdGhlIE5vZGUuanNcbiAqIEV2ZW50RW1pdHRlciBpbnRlcmZhY2UuXG4gKlxuICogQGNvbnN0cnVjdG9yXG4gKiBAYXBpIHB1YmxpY1xuICovXG5mdW5jdGlvbiBFdmVudEVtaXR0ZXIoKSB7IC8qIE5vdGhpbmcgdG8gc2V0ICovIH1cblxuLyoqXG4gKiBIb2xkcyB0aGUgYXNzaWduZWQgRXZlbnRFbWl0dGVycyBieSBuYW1lLlxuICpcbiAqIEB0eXBlIHtPYmplY3R9XG4gKiBAcHJpdmF0ZVxuICovXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLl9ldmVudHMgPSB1bmRlZmluZWQ7XG5cbi8qKlxuICogUmV0dXJuIGEgbGlzdCBvZiBhc3NpZ25lZCBldmVudCBsaXN0ZW5lcnMuXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IGV2ZW50IFRoZSBldmVudHMgdGhhdCBzaG91bGQgYmUgbGlzdGVkLlxuICogQHBhcmFtIHtCb29sZWFufSBleGlzdHMgV2Ugb25seSBuZWVkIHRvIGtub3cgaWYgdGhlcmUgYXJlIGxpc3RlbmVycy5cbiAqIEByZXR1cm5zIHtBcnJheXxCb29sZWFufVxuICogQGFwaSBwdWJsaWNcbiAqL1xuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5saXN0ZW5lcnMgPSBmdW5jdGlvbiBsaXN0ZW5lcnMoZXZlbnQsIGV4aXN0cykge1xuICB2YXIgZXZ0ID0gcHJlZml4ID8gcHJlZml4ICsgZXZlbnQgOiBldmVudFxuICAgICwgYXZhaWxhYmxlID0gdGhpcy5fZXZlbnRzICYmIHRoaXMuX2V2ZW50c1tldnRdO1xuXG4gIGlmIChleGlzdHMpIHJldHVybiAhIWF2YWlsYWJsZTtcbiAgaWYgKCFhdmFpbGFibGUpIHJldHVybiBbXTtcbiAgaWYgKGF2YWlsYWJsZS5mbikgcmV0dXJuIFthdmFpbGFibGUuZm5dO1xuXG4gIGZvciAodmFyIGkgPSAwLCBsID0gYXZhaWxhYmxlLmxlbmd0aCwgZWUgPSBuZXcgQXJyYXkobCk7IGkgPCBsOyBpKyspIHtcbiAgICBlZVtpXSA9IGF2YWlsYWJsZVtpXS5mbjtcbiAgfVxuXG4gIHJldHVybiBlZTtcbn07XG5cbi8qKlxuICogRW1pdCBhbiBldmVudCB0byBhbGwgcmVnaXN0ZXJlZCBldmVudCBsaXN0ZW5lcnMuXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IGV2ZW50IFRoZSBuYW1lIG9mIHRoZSBldmVudC5cbiAqIEByZXR1cm5zIHtCb29sZWFufSBJbmRpY2F0aW9uIGlmIHdlJ3ZlIGVtaXR0ZWQgYW4gZXZlbnQuXG4gKiBAYXBpIHB1YmxpY1xuICovXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLmVtaXQgPSBmdW5jdGlvbiBlbWl0KGV2ZW50LCBhMSwgYTIsIGEzLCBhNCwgYTUpIHtcbiAgdmFyIGV2dCA9IHByZWZpeCA/IHByZWZpeCArIGV2ZW50IDogZXZlbnQ7XG5cbiAgaWYgKCF0aGlzLl9ldmVudHMgfHwgIXRoaXMuX2V2ZW50c1tldnRdKSByZXR1cm4gZmFsc2U7XG5cbiAgdmFyIGxpc3RlbmVycyA9IHRoaXMuX2V2ZW50c1tldnRdXG4gICAgLCBsZW4gPSBhcmd1bWVudHMubGVuZ3RoXG4gICAgLCBhcmdzXG4gICAgLCBpO1xuXG4gIGlmICgnZnVuY3Rpb24nID09PSB0eXBlb2YgbGlzdGVuZXJzLmZuKSB7XG4gICAgaWYgKGxpc3RlbmVycy5vbmNlKSB0aGlzLnJlbW92ZUxpc3RlbmVyKGV2ZW50LCBsaXN0ZW5lcnMuZm4sIHVuZGVmaW5lZCwgdHJ1ZSk7XG5cbiAgICBzd2l0Y2ggKGxlbikge1xuICAgICAgY2FzZSAxOiByZXR1cm4gbGlzdGVuZXJzLmZuLmNhbGwobGlzdGVuZXJzLmNvbnRleHQpLCB0cnVlO1xuICAgICAgY2FzZSAyOiByZXR1cm4gbGlzdGVuZXJzLmZuLmNhbGwobGlzdGVuZXJzLmNvbnRleHQsIGExKSwgdHJ1ZTtcbiAgICAgIGNhc2UgMzogcmV0dXJuIGxpc3RlbmVycy5mbi5jYWxsKGxpc3RlbmVycy5jb250ZXh0LCBhMSwgYTIpLCB0cnVlO1xuICAgICAgY2FzZSA0OiByZXR1cm4gbGlzdGVuZXJzLmZuLmNhbGwobGlzdGVuZXJzLmNvbnRleHQsIGExLCBhMiwgYTMpLCB0cnVlO1xuICAgICAgY2FzZSA1OiByZXR1cm4gbGlzdGVuZXJzLmZuLmNhbGwobGlzdGVuZXJzLmNvbnRleHQsIGExLCBhMiwgYTMsIGE0KSwgdHJ1ZTtcbiAgICAgIGNhc2UgNjogcmV0dXJuIGxpc3RlbmVycy5mbi5jYWxsKGxpc3RlbmVycy5jb250ZXh0LCBhMSwgYTIsIGEzLCBhNCwgYTUpLCB0cnVlO1xuICAgIH1cblxuICAgIGZvciAoaSA9IDEsIGFyZ3MgPSBuZXcgQXJyYXkobGVuIC0xKTsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICBhcmdzW2kgLSAxXSA9IGFyZ3VtZW50c1tpXTtcbiAgICB9XG5cbiAgICBsaXN0ZW5lcnMuZm4uYXBwbHkobGlzdGVuZXJzLmNvbnRleHQsIGFyZ3MpO1xuICB9IGVsc2Uge1xuICAgIHZhciBsZW5ndGggPSBsaXN0ZW5lcnMubGVuZ3RoXG4gICAgICAsIGo7XG5cbiAgICBmb3IgKGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmIChsaXN0ZW5lcnNbaV0ub25jZSkgdGhpcy5yZW1vdmVMaXN0ZW5lcihldmVudCwgbGlzdGVuZXJzW2ldLmZuLCB1bmRlZmluZWQsIHRydWUpO1xuXG4gICAgICBzd2l0Y2ggKGxlbikge1xuICAgICAgICBjYXNlIDE6IGxpc3RlbmVyc1tpXS5mbi5jYWxsKGxpc3RlbmVyc1tpXS5jb250ZXh0KTsgYnJlYWs7XG4gICAgICAgIGNhc2UgMjogbGlzdGVuZXJzW2ldLmZuLmNhbGwobGlzdGVuZXJzW2ldLmNvbnRleHQsIGExKTsgYnJlYWs7XG4gICAgICAgIGNhc2UgMzogbGlzdGVuZXJzW2ldLmZuLmNhbGwobGlzdGVuZXJzW2ldLmNvbnRleHQsIGExLCBhMik7IGJyZWFrO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIGlmICghYXJncykgZm9yIChqID0gMSwgYXJncyA9IG5ldyBBcnJheShsZW4gLTEpOyBqIDwgbGVuOyBqKyspIHtcbiAgICAgICAgICAgIGFyZ3NbaiAtIDFdID0gYXJndW1lbnRzW2pdO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGxpc3RlbmVyc1tpXS5mbi5hcHBseShsaXN0ZW5lcnNbaV0uY29udGV4dCwgYXJncyk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHRydWU7XG59O1xuXG4vKipcbiAqIFJlZ2lzdGVyIGEgbmV3IEV2ZW50TGlzdGVuZXIgZm9yIHRoZSBnaXZlbiBldmVudC5cbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gZXZlbnQgTmFtZSBvZiB0aGUgZXZlbnQuXG4gKiBAcGFyYW0ge0Z1bmN0b259IGZuIENhbGxiYWNrIGZ1bmN0aW9uLlxuICogQHBhcmFtIHtNaXhlZH0gY29udGV4dCBUaGUgY29udGV4dCBvZiB0aGUgZnVuY3Rpb24uXG4gKiBAYXBpIHB1YmxpY1xuICovXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLm9uID0gZnVuY3Rpb24gb24oZXZlbnQsIGZuLCBjb250ZXh0KSB7XG4gIHZhciBsaXN0ZW5lciA9IG5ldyBFRShmbiwgY29udGV4dCB8fCB0aGlzKVxuICAgICwgZXZ0ID0gcHJlZml4ID8gcHJlZml4ICsgZXZlbnQgOiBldmVudDtcblxuICBpZiAoIXRoaXMuX2V2ZW50cykgdGhpcy5fZXZlbnRzID0gcHJlZml4ID8ge30gOiBPYmplY3QuY3JlYXRlKG51bGwpO1xuICBpZiAoIXRoaXMuX2V2ZW50c1tldnRdKSB0aGlzLl9ldmVudHNbZXZ0XSA9IGxpc3RlbmVyO1xuICBlbHNlIHtcbiAgICBpZiAoIXRoaXMuX2V2ZW50c1tldnRdLmZuKSB0aGlzLl9ldmVudHNbZXZ0XS5wdXNoKGxpc3RlbmVyKTtcbiAgICBlbHNlIHRoaXMuX2V2ZW50c1tldnRdID0gW1xuICAgICAgdGhpcy5fZXZlbnRzW2V2dF0sIGxpc3RlbmVyXG4gICAgXTtcbiAgfVxuXG4gIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBBZGQgYW4gRXZlbnRMaXN0ZW5lciB0aGF0J3Mgb25seSBjYWxsZWQgb25jZS5cbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gZXZlbnQgTmFtZSBvZiB0aGUgZXZlbnQuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmbiBDYWxsYmFjayBmdW5jdGlvbi5cbiAqIEBwYXJhbSB7TWl4ZWR9IGNvbnRleHQgVGhlIGNvbnRleHQgb2YgdGhlIGZ1bmN0aW9uLlxuICogQGFwaSBwdWJsaWNcbiAqL1xuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5vbmNlID0gZnVuY3Rpb24gb25jZShldmVudCwgZm4sIGNvbnRleHQpIHtcbiAgdmFyIGxpc3RlbmVyID0gbmV3IEVFKGZuLCBjb250ZXh0IHx8IHRoaXMsIHRydWUpXG4gICAgLCBldnQgPSBwcmVmaXggPyBwcmVmaXggKyBldmVudCA6IGV2ZW50O1xuXG4gIGlmICghdGhpcy5fZXZlbnRzKSB0aGlzLl9ldmVudHMgPSBwcmVmaXggPyB7fSA6IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gIGlmICghdGhpcy5fZXZlbnRzW2V2dF0pIHRoaXMuX2V2ZW50c1tldnRdID0gbGlzdGVuZXI7XG4gIGVsc2Uge1xuICAgIGlmICghdGhpcy5fZXZlbnRzW2V2dF0uZm4pIHRoaXMuX2V2ZW50c1tldnRdLnB1c2gobGlzdGVuZXIpO1xuICAgIGVsc2UgdGhpcy5fZXZlbnRzW2V2dF0gPSBbXG4gICAgICB0aGlzLl9ldmVudHNbZXZ0XSwgbGlzdGVuZXJcbiAgICBdO1xuICB9XG5cbiAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIFJlbW92ZSBldmVudCBsaXN0ZW5lcnMuXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IGV2ZW50IFRoZSBldmVudCB3ZSB3YW50IHRvIHJlbW92ZS5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZuIFRoZSBsaXN0ZW5lciB0aGF0IHdlIG5lZWQgdG8gZmluZC5cbiAqIEBwYXJhbSB7TWl4ZWR9IGNvbnRleHQgT25seSByZW1vdmUgbGlzdGVuZXJzIG1hdGNoaW5nIHRoaXMgY29udGV4dC5cbiAqIEBwYXJhbSB7Qm9vbGVhbn0gb25jZSBPbmx5IHJlbW92ZSBvbmNlIGxpc3RlbmVycy5cbiAqIEBhcGkgcHVibGljXG4gKi9cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUucmVtb3ZlTGlzdGVuZXIgPSBmdW5jdGlvbiByZW1vdmVMaXN0ZW5lcihldmVudCwgZm4sIGNvbnRleHQsIG9uY2UpIHtcbiAgdmFyIGV2dCA9IHByZWZpeCA/IHByZWZpeCArIGV2ZW50IDogZXZlbnQ7XG5cbiAgaWYgKCF0aGlzLl9ldmVudHMgfHwgIXRoaXMuX2V2ZW50c1tldnRdKSByZXR1cm4gdGhpcztcblxuICB2YXIgbGlzdGVuZXJzID0gdGhpcy5fZXZlbnRzW2V2dF1cbiAgICAsIGV2ZW50cyA9IFtdO1xuXG4gIGlmIChmbikge1xuICAgIGlmIChsaXN0ZW5lcnMuZm4pIHtcbiAgICAgIGlmIChcbiAgICAgICAgICAgbGlzdGVuZXJzLmZuICE9PSBmblxuICAgICAgICB8fCAob25jZSAmJiAhbGlzdGVuZXJzLm9uY2UpXG4gICAgICAgIHx8IChjb250ZXh0ICYmIGxpc3RlbmVycy5jb250ZXh0ICE9PSBjb250ZXh0KVxuICAgICAgKSB7XG4gICAgICAgIGV2ZW50cy5wdXNoKGxpc3RlbmVycyk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGZvciAodmFyIGkgPSAwLCBsZW5ndGggPSBsaXN0ZW5lcnMubGVuZ3RoOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgIGxpc3RlbmVyc1tpXS5mbiAhPT0gZm5cbiAgICAgICAgICB8fCAob25jZSAmJiAhbGlzdGVuZXJzW2ldLm9uY2UpXG4gICAgICAgICAgfHwgKGNvbnRleHQgJiYgbGlzdGVuZXJzW2ldLmNvbnRleHQgIT09IGNvbnRleHQpXG4gICAgICAgICkge1xuICAgICAgICAgIGV2ZW50cy5wdXNoKGxpc3RlbmVyc1tpXSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvL1xuICAvLyBSZXNldCB0aGUgYXJyYXksIG9yIHJlbW92ZSBpdCBjb21wbGV0ZWx5IGlmIHdlIGhhdmUgbm8gbW9yZSBsaXN0ZW5lcnMuXG4gIC8vXG4gIGlmIChldmVudHMubGVuZ3RoKSB7XG4gICAgdGhpcy5fZXZlbnRzW2V2dF0gPSBldmVudHMubGVuZ3RoID09PSAxID8gZXZlbnRzWzBdIDogZXZlbnRzO1xuICB9IGVsc2Uge1xuICAgIGRlbGV0ZSB0aGlzLl9ldmVudHNbZXZ0XTtcbiAgfVxuXG4gIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBSZW1vdmUgYWxsIGxpc3RlbmVycyBvciBvbmx5IHRoZSBsaXN0ZW5lcnMgZm9yIHRoZSBzcGVjaWZpZWQgZXZlbnQuXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IGV2ZW50IFRoZSBldmVudCB3YW50IHRvIHJlbW92ZSBhbGwgbGlzdGVuZXJzIGZvci5cbiAqIEBhcGkgcHVibGljXG4gKi9cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUucmVtb3ZlQWxsTGlzdGVuZXJzID0gZnVuY3Rpb24gcmVtb3ZlQWxsTGlzdGVuZXJzKGV2ZW50KSB7XG4gIGlmICghdGhpcy5fZXZlbnRzKSByZXR1cm4gdGhpcztcblxuICBpZiAoZXZlbnQpIGRlbGV0ZSB0aGlzLl9ldmVudHNbcHJlZml4ID8gcHJlZml4ICsgZXZlbnQgOiBldmVudF07XG4gIGVsc2UgdGhpcy5fZXZlbnRzID0gcHJlZml4ID8ge30gOiBPYmplY3QuY3JlYXRlKG51bGwpO1xuXG4gIHJldHVybiB0aGlzO1xufTtcblxuLy9cbi8vIEFsaWFzIG1ldGhvZHMgbmFtZXMgYmVjYXVzZSBwZW9wbGUgcm9sbCBsaWtlIHRoYXQuXG4vL1xuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5vZmYgPSBFdmVudEVtaXR0ZXIucHJvdG90eXBlLnJlbW92ZUxpc3RlbmVyO1xuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5hZGRMaXN0ZW5lciA9IEV2ZW50RW1pdHRlci5wcm90b3R5cGUub247XG5cbi8vXG4vLyBUaGlzIGZ1bmN0aW9uIGRvZXNuJ3QgYXBwbHkgYW55bW9yZS5cbi8vXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLnNldE1heExpc3RlbmVycyA9IGZ1bmN0aW9uIHNldE1heExpc3RlbmVycygpIHtcbiAgcmV0dXJuIHRoaXM7XG59O1xuXG4vL1xuLy8gRXhwb3NlIHRoZSBwcmVmaXguXG4vL1xuRXZlbnRFbWl0dGVyLnByZWZpeGVkID0gcHJlZml4O1xuXG4vL1xuLy8gRXhwb3NlIHRoZSBtb2R1bGUuXG4vL1xuaWYgKCd1bmRlZmluZWQnICE9PSB0eXBlb2YgbW9kdWxlKSB7XG4gIG1vZHVsZS5leHBvcnRzID0gRXZlbnRFbWl0dGVyO1xufVxuIiwiLyogZXNsaW50LWRpc2FibGUgbm8tdW51c2VkLXZhcnMgKi9cbid1c2Ugc3RyaWN0JztcbnZhciBoYXNPd25Qcm9wZXJ0eSA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7XG52YXIgcHJvcElzRW51bWVyYWJsZSA9IE9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGU7XG5cbmZ1bmN0aW9uIHRvT2JqZWN0KHZhbCkge1xuXHRpZiAodmFsID09PSBudWxsIHx8IHZhbCA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0dGhyb3cgbmV3IFR5cGVFcnJvcignT2JqZWN0LmFzc2lnbiBjYW5ub3QgYmUgY2FsbGVkIHdpdGggbnVsbCBvciB1bmRlZmluZWQnKTtcblx0fVxuXG5cdHJldHVybiBPYmplY3QodmFsKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQsIHNvdXJjZSkge1xuXHR2YXIgZnJvbTtcblx0dmFyIHRvID0gdG9PYmplY3QodGFyZ2V0KTtcblx0dmFyIHN5bWJvbHM7XG5cblx0Zm9yICh2YXIgcyA9IDE7IHMgPCBhcmd1bWVudHMubGVuZ3RoOyBzKyspIHtcblx0XHRmcm9tID0gT2JqZWN0KGFyZ3VtZW50c1tzXSk7XG5cblx0XHRmb3IgKHZhciBrZXkgaW4gZnJvbSkge1xuXHRcdFx0aWYgKGhhc093blByb3BlcnR5LmNhbGwoZnJvbSwga2V5KSkge1xuXHRcdFx0XHR0b1trZXldID0gZnJvbVtrZXldO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7XG5cdFx0XHRzeW1ib2xzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhmcm9tKTtcblx0XHRcdGZvciAodmFyIGkgPSAwOyBpIDwgc3ltYm9scy5sZW5ndGg7IGkrKykge1xuXHRcdFx0XHRpZiAocHJvcElzRW51bWVyYWJsZS5jYWxsKGZyb20sIHN5bWJvbHNbaV0pKSB7XG5cdFx0XHRcdFx0dG9bc3ltYm9sc1tpXV0gPSBmcm9tW3N5bWJvbHNbaV1dO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIHRvO1xufTtcbiIsIi8qIVxuICogYXN5bmNcbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS9jYW9sYW4vYXN5bmNcbiAqXG4gKiBDb3B5cmlnaHQgMjAxMC0yMDE0IENhb2xhbiBNY01haG9uXG4gKiBSZWxlYXNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2VcbiAqL1xuLypqc2hpbnQgb25ldmFyOiBmYWxzZSwgaW5kZW50OjQgKi9cbi8qZ2xvYmFsIHNldEltbWVkaWF0ZTogZmFsc2UsIHNldFRpbWVvdXQ6IGZhbHNlLCBjb25zb2xlOiBmYWxzZSAqL1xuKGZ1bmN0aW9uICgpIHtcblxuICAgIHZhciBhc3luYyA9IHt9O1xuXG4gICAgLy8gZ2xvYmFsIG9uIHRoZSBzZXJ2ZXIsIHdpbmRvdyBpbiB0aGUgYnJvd3NlclxuICAgIHZhciByb290LCBwcmV2aW91c19hc3luYztcblxuICAgIHJvb3QgPSB0aGlzO1xuICAgIGlmIChyb290ICE9IG51bGwpIHtcbiAgICAgIHByZXZpb3VzX2FzeW5jID0gcm9vdC5hc3luYztcbiAgICB9XG5cbiAgICBhc3luYy5ub0NvbmZsaWN0ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByb290LmFzeW5jID0gcHJldmlvdXNfYXN5bmM7XG4gICAgICAgIHJldHVybiBhc3luYztcbiAgICB9O1xuXG4gICAgZnVuY3Rpb24gb25seV9vbmNlKGZuKSB7XG4gICAgICAgIHZhciBjYWxsZWQgPSBmYWxzZTtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgaWYgKGNhbGxlZCkgdGhyb3cgbmV3IEVycm9yKFwiQ2FsbGJhY2sgd2FzIGFscmVhZHkgY2FsbGVkLlwiKTtcbiAgICAgICAgICAgIGNhbGxlZCA9IHRydWU7XG4gICAgICAgICAgICBmbi5hcHBseShyb290LCBhcmd1bWVudHMpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8vLyBjcm9zcy1icm93c2VyIGNvbXBhdGlibGl0eSBmdW5jdGlvbnMgLy8vL1xuXG4gICAgdmFyIF90b1N0cmluZyA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7XG5cbiAgICB2YXIgX2lzQXJyYXkgPSBBcnJheS5pc0FycmF5IHx8IGZ1bmN0aW9uIChvYmopIHtcbiAgICAgICAgcmV0dXJuIF90b1N0cmluZy5jYWxsKG9iaikgPT09ICdbb2JqZWN0IEFycmF5XSc7XG4gICAgfTtcblxuICAgIHZhciBfZWFjaCA9IGZ1bmN0aW9uIChhcnIsIGl0ZXJhdG9yKSB7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXJyLmxlbmd0aDsgaSArPSAxKSB7XG4gICAgICAgICAgICBpdGVyYXRvcihhcnJbaV0sIGksIGFycik7XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgdmFyIF9tYXAgPSBmdW5jdGlvbiAoYXJyLCBpdGVyYXRvcikge1xuICAgICAgICBpZiAoYXJyLm1hcCkge1xuICAgICAgICAgICAgcmV0dXJuIGFyci5tYXAoaXRlcmF0b3IpO1xuICAgICAgICB9XG4gICAgICAgIHZhciByZXN1bHRzID0gW107XG4gICAgICAgIF9lYWNoKGFyciwgZnVuY3Rpb24gKHgsIGksIGEpIHtcbiAgICAgICAgICAgIHJlc3VsdHMucHVzaChpdGVyYXRvcih4LCBpLCBhKSk7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gcmVzdWx0cztcbiAgICB9O1xuXG4gICAgdmFyIF9yZWR1Y2UgPSBmdW5jdGlvbiAoYXJyLCBpdGVyYXRvciwgbWVtbykge1xuICAgICAgICBpZiAoYXJyLnJlZHVjZSkge1xuICAgICAgICAgICAgcmV0dXJuIGFyci5yZWR1Y2UoaXRlcmF0b3IsIG1lbW8pO1xuICAgICAgICB9XG4gICAgICAgIF9lYWNoKGFyciwgZnVuY3Rpb24gKHgsIGksIGEpIHtcbiAgICAgICAgICAgIG1lbW8gPSBpdGVyYXRvcihtZW1vLCB4LCBpLCBhKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBtZW1vO1xuICAgIH07XG5cbiAgICB2YXIgX2tleXMgPSBmdW5jdGlvbiAob2JqKSB7XG4gICAgICAgIGlmIChPYmplY3Qua2V5cykge1xuICAgICAgICAgICAgcmV0dXJuIE9iamVjdC5rZXlzKG9iaik7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIGtleXMgPSBbXTtcbiAgICAgICAgZm9yICh2YXIgayBpbiBvYmopIHtcbiAgICAgICAgICAgIGlmIChvYmouaGFzT3duUHJvcGVydHkoaykpIHtcbiAgICAgICAgICAgICAgICBrZXlzLnB1c2goayk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGtleXM7XG4gICAgfTtcblxuICAgIC8vLy8gZXhwb3J0ZWQgYXN5bmMgbW9kdWxlIGZ1bmN0aW9ucyAvLy8vXG5cbiAgICAvLy8vIG5leHRUaWNrIGltcGxlbWVudGF0aW9uIHdpdGggYnJvd3Nlci1jb21wYXRpYmxlIGZhbGxiYWNrIC8vLy9cbiAgICBpZiAodHlwZW9mIHByb2Nlc3MgPT09ICd1bmRlZmluZWQnIHx8ICEocHJvY2Vzcy5uZXh0VGljaykpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBzZXRJbW1lZGlhdGUgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIGFzeW5jLm5leHRUaWNrID0gZnVuY3Rpb24gKGZuKSB7XG4gICAgICAgICAgICAgICAgLy8gbm90IGEgZGlyZWN0IGFsaWFzIGZvciBJRTEwIGNvbXBhdGliaWxpdHlcbiAgICAgICAgICAgICAgICBzZXRJbW1lZGlhdGUoZm4pO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGFzeW5jLnNldEltbWVkaWF0ZSA9IGFzeW5jLm5leHRUaWNrO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgYXN5bmMubmV4dFRpY2sgPSBmdW5jdGlvbiAoZm4pIHtcbiAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KGZuLCAwKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBhc3luYy5zZXRJbW1lZGlhdGUgPSBhc3luYy5uZXh0VGljaztcbiAgICAgICAgfVxuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgYXN5bmMubmV4dFRpY2sgPSBwcm9jZXNzLm5leHRUaWNrO1xuICAgICAgICBpZiAodHlwZW9mIHNldEltbWVkaWF0ZSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgIGFzeW5jLnNldEltbWVkaWF0ZSA9IGZ1bmN0aW9uIChmbikge1xuICAgICAgICAgICAgICAvLyBub3QgYSBkaXJlY3QgYWxpYXMgZm9yIElFMTAgY29tcGF0aWJpbGl0eVxuICAgICAgICAgICAgICBzZXRJbW1lZGlhdGUoZm4pO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGFzeW5jLnNldEltbWVkaWF0ZSA9IGFzeW5jLm5leHRUaWNrO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgYXN5bmMuZWFjaCA9IGZ1bmN0aW9uIChhcnIsIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICBjYWxsYmFjayA9IGNhbGxiYWNrIHx8IGZ1bmN0aW9uICgpIHt9O1xuICAgICAgICBpZiAoIWFyci5sZW5ndGgpIHtcbiAgICAgICAgICAgIHJldHVybiBjYWxsYmFjaygpO1xuICAgICAgICB9XG4gICAgICAgIHZhciBjb21wbGV0ZWQgPSAwO1xuICAgICAgICBfZWFjaChhcnIsIGZ1bmN0aW9uICh4KSB7XG4gICAgICAgICAgICBpdGVyYXRvcih4LCBvbmx5X29uY2UoZG9uZSkgKTtcbiAgICAgICAgfSk7XG4gICAgICAgIGZ1bmN0aW9uIGRvbmUoZXJyKSB7XG4gICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgICBjYWxsYmFjayA9IGZ1bmN0aW9uICgpIHt9O1xuICAgICAgICAgIH1cbiAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgY29tcGxldGVkICs9IDE7XG4gICAgICAgICAgICAgIGlmIChjb21wbGV0ZWQgPj0gYXJyLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgY2FsbGJhY2soKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH07XG4gICAgYXN5bmMuZm9yRWFjaCA9IGFzeW5jLmVhY2g7XG5cbiAgICBhc3luYy5lYWNoU2VyaWVzID0gZnVuY3Rpb24gKGFyciwgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgIGNhbGxiYWNrID0gY2FsbGJhY2sgfHwgZnVuY3Rpb24gKCkge307XG4gICAgICAgIGlmICghYXJyLmxlbmd0aCkge1xuICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKCk7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIGNvbXBsZXRlZCA9IDA7XG4gICAgICAgIHZhciBpdGVyYXRlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgaXRlcmF0b3IoYXJyW2NvbXBsZXRlZF0sIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrID0gZnVuY3Rpb24gKCkge307XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBjb21wbGV0ZWQgKz0gMTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNvbXBsZXRlZCA+PSBhcnIubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgaXRlcmF0ZSgpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH07XG4gICAgICAgIGl0ZXJhdGUoKTtcbiAgICB9O1xuICAgIGFzeW5jLmZvckVhY2hTZXJpZXMgPSBhc3luYy5lYWNoU2VyaWVzO1xuXG4gICAgYXN5bmMuZWFjaExpbWl0ID0gZnVuY3Rpb24gKGFyciwgbGltaXQsIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICB2YXIgZm4gPSBfZWFjaExpbWl0KGxpbWl0KTtcbiAgICAgICAgZm4uYXBwbHkobnVsbCwgW2FyciwgaXRlcmF0b3IsIGNhbGxiYWNrXSk7XG4gICAgfTtcbiAgICBhc3luYy5mb3JFYWNoTGltaXQgPSBhc3luYy5lYWNoTGltaXQ7XG5cbiAgICB2YXIgX2VhY2hMaW1pdCA9IGZ1bmN0aW9uIChsaW1pdCkge1xuXG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAoYXJyLCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIGNhbGxiYWNrID0gY2FsbGJhY2sgfHwgZnVuY3Rpb24gKCkge307XG4gICAgICAgICAgICBpZiAoIWFyci5sZW5ndGggfHwgbGltaXQgPD0gMCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBjYWxsYmFjaygpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdmFyIGNvbXBsZXRlZCA9IDA7XG4gICAgICAgICAgICB2YXIgc3RhcnRlZCA9IDA7XG4gICAgICAgICAgICB2YXIgcnVubmluZyA9IDA7XG5cbiAgICAgICAgICAgIChmdW5jdGlvbiByZXBsZW5pc2ggKCkge1xuICAgICAgICAgICAgICAgIGlmIChjb21wbGV0ZWQgPj0gYXJyLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gY2FsbGJhY2soKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB3aGlsZSAocnVubmluZyA8IGxpbWl0ICYmIHN0YXJ0ZWQgPCBhcnIubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgIHN0YXJ0ZWQgKz0gMTtcbiAgICAgICAgICAgICAgICAgICAgcnVubmluZyArPSAxO1xuICAgICAgICAgICAgICAgICAgICBpdGVyYXRvcihhcnJbc3RhcnRlZCAtIDFdLCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayA9IGZ1bmN0aW9uICgpIHt9O1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcGxldGVkICs9IDE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcnVubmluZyAtPSAxO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb21wbGV0ZWQgPj0gYXJyLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVwbGVuaXNoKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KSgpO1xuICAgICAgICB9O1xuICAgIH07XG5cblxuICAgIHZhciBkb1BhcmFsbGVsID0gZnVuY3Rpb24gKGZuKSB7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7XG4gICAgICAgICAgICByZXR1cm4gZm4uYXBwbHkobnVsbCwgW2FzeW5jLmVhY2hdLmNvbmNhdChhcmdzKSk7XG4gICAgICAgIH07XG4gICAgfTtcbiAgICB2YXIgZG9QYXJhbGxlbExpbWl0ID0gZnVuY3Rpb24obGltaXQsIGZuKSB7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7XG4gICAgICAgICAgICByZXR1cm4gZm4uYXBwbHkobnVsbCwgW19lYWNoTGltaXQobGltaXQpXS5jb25jYXQoYXJncykpO1xuICAgICAgICB9O1xuICAgIH07XG4gICAgdmFyIGRvU2VyaWVzID0gZnVuY3Rpb24gKGZuKSB7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7XG4gICAgICAgICAgICByZXR1cm4gZm4uYXBwbHkobnVsbCwgW2FzeW5jLmVhY2hTZXJpZXNdLmNvbmNhdChhcmdzKSk7XG4gICAgICAgIH07XG4gICAgfTtcblxuXG4gICAgdmFyIF9hc3luY01hcCA9IGZ1bmN0aW9uIChlYWNoZm4sIGFyciwgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgIGFyciA9IF9tYXAoYXJyLCBmdW5jdGlvbiAoeCwgaSkge1xuICAgICAgICAgICAgcmV0dXJuIHtpbmRleDogaSwgdmFsdWU6IHh9O1xuICAgICAgICB9KTtcbiAgICAgICAgaWYgKCFjYWxsYmFjaykge1xuICAgICAgICAgICAgZWFjaGZuKGFyciwgZnVuY3Rpb24gKHgsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICAgICAgaXRlcmF0b3IoeC52YWx1ZSwgZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB2YXIgcmVzdWx0cyA9IFtdO1xuICAgICAgICAgICAgZWFjaGZuKGFyciwgZnVuY3Rpb24gKHgsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICAgICAgaXRlcmF0b3IoeC52YWx1ZSwgZnVuY3Rpb24gKGVyciwgdikge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHRzW3guaW5kZXhdID0gdjtcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0sIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnIsIHJlc3VsdHMpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIGFzeW5jLm1hcCA9IGRvUGFyYWxsZWwoX2FzeW5jTWFwKTtcbiAgICBhc3luYy5tYXBTZXJpZXMgPSBkb1NlcmllcyhfYXN5bmNNYXApO1xuICAgIGFzeW5jLm1hcExpbWl0ID0gZnVuY3Rpb24gKGFyciwgbGltaXQsIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICByZXR1cm4gX21hcExpbWl0KGxpbWl0KShhcnIsIGl0ZXJhdG9yLCBjYWxsYmFjayk7XG4gICAgfTtcblxuICAgIHZhciBfbWFwTGltaXQgPSBmdW5jdGlvbihsaW1pdCkge1xuICAgICAgICByZXR1cm4gZG9QYXJhbGxlbExpbWl0KGxpbWl0LCBfYXN5bmNNYXApO1xuICAgIH07XG5cbiAgICAvLyByZWR1Y2Ugb25seSBoYXMgYSBzZXJpZXMgdmVyc2lvbiwgYXMgZG9pbmcgcmVkdWNlIGluIHBhcmFsbGVsIHdvbid0XG4gICAgLy8gd29yayBpbiBtYW55IHNpdHVhdGlvbnMuXG4gICAgYXN5bmMucmVkdWNlID0gZnVuY3Rpb24gKGFyciwgbWVtbywgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgIGFzeW5jLmVhY2hTZXJpZXMoYXJyLCBmdW5jdGlvbiAoeCwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIGl0ZXJhdG9yKG1lbW8sIHgsIGZ1bmN0aW9uIChlcnIsIHYpIHtcbiAgICAgICAgICAgICAgICBtZW1vID0gdjtcbiAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgIGNhbGxiYWNrKGVyciwgbWVtbyk7XG4gICAgICAgIH0pO1xuICAgIH07XG4gICAgLy8gaW5qZWN0IGFsaWFzXG4gICAgYXN5bmMuaW5qZWN0ID0gYXN5bmMucmVkdWNlO1xuICAgIC8vIGZvbGRsIGFsaWFzXG4gICAgYXN5bmMuZm9sZGwgPSBhc3luYy5yZWR1Y2U7XG5cbiAgICBhc3luYy5yZWR1Y2VSaWdodCA9IGZ1bmN0aW9uIChhcnIsIG1lbW8sIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICB2YXIgcmV2ZXJzZWQgPSBfbWFwKGFyciwgZnVuY3Rpb24gKHgpIHtcbiAgICAgICAgICAgIHJldHVybiB4O1xuICAgICAgICB9KS5yZXZlcnNlKCk7XG4gICAgICAgIGFzeW5jLnJlZHVjZShyZXZlcnNlZCwgbWVtbywgaXRlcmF0b3IsIGNhbGxiYWNrKTtcbiAgICB9O1xuICAgIC8vIGZvbGRyIGFsaWFzXG4gICAgYXN5bmMuZm9sZHIgPSBhc3luYy5yZWR1Y2VSaWdodDtcblxuICAgIHZhciBfZmlsdGVyID0gZnVuY3Rpb24gKGVhY2hmbiwgYXJyLCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgdmFyIHJlc3VsdHMgPSBbXTtcbiAgICAgICAgYXJyID0gX21hcChhcnIsIGZ1bmN0aW9uICh4LCBpKSB7XG4gICAgICAgICAgICByZXR1cm4ge2luZGV4OiBpLCB2YWx1ZTogeH07XG4gICAgICAgIH0pO1xuICAgICAgICBlYWNoZm4oYXJyLCBmdW5jdGlvbiAoeCwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIGl0ZXJhdG9yKHgudmFsdWUsIGZ1bmN0aW9uICh2KSB7XG4gICAgICAgICAgICAgICAgaWYgKHYpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0cy5wdXNoKHgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgIGNhbGxiYWNrKF9tYXAocmVzdWx0cy5zb3J0KGZ1bmN0aW9uIChhLCBiKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGEuaW5kZXggLSBiLmluZGV4O1xuICAgICAgICAgICAgfSksIGZ1bmN0aW9uICh4KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHgudmFsdWU7XG4gICAgICAgICAgICB9KSk7XG4gICAgICAgIH0pO1xuICAgIH07XG4gICAgYXN5bmMuZmlsdGVyID0gZG9QYXJhbGxlbChfZmlsdGVyKTtcbiAgICBhc3luYy5maWx0ZXJTZXJpZXMgPSBkb1NlcmllcyhfZmlsdGVyKTtcbiAgICAvLyBzZWxlY3QgYWxpYXNcbiAgICBhc3luYy5zZWxlY3QgPSBhc3luYy5maWx0ZXI7XG4gICAgYXN5bmMuc2VsZWN0U2VyaWVzID0gYXN5bmMuZmlsdGVyU2VyaWVzO1xuXG4gICAgdmFyIF9yZWplY3QgPSBmdW5jdGlvbiAoZWFjaGZuLCBhcnIsIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICB2YXIgcmVzdWx0cyA9IFtdO1xuICAgICAgICBhcnIgPSBfbWFwKGFyciwgZnVuY3Rpb24gKHgsIGkpIHtcbiAgICAgICAgICAgIHJldHVybiB7aW5kZXg6IGksIHZhbHVlOiB4fTtcbiAgICAgICAgfSk7XG4gICAgICAgIGVhY2hmbihhcnIsIGZ1bmN0aW9uICh4LCBjYWxsYmFjaykge1xuICAgICAgICAgICAgaXRlcmF0b3IoeC52YWx1ZSwgZnVuY3Rpb24gKHYpIHtcbiAgICAgICAgICAgICAgICBpZiAoIXYpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0cy5wdXNoKHgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgIGNhbGxiYWNrKF9tYXAocmVzdWx0cy5zb3J0KGZ1bmN0aW9uIChhLCBiKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGEuaW5kZXggLSBiLmluZGV4O1xuICAgICAgICAgICAgfSksIGZ1bmN0aW9uICh4KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHgudmFsdWU7XG4gICAgICAgICAgICB9KSk7XG4gICAgICAgIH0pO1xuICAgIH07XG4gICAgYXN5bmMucmVqZWN0ID0gZG9QYXJhbGxlbChfcmVqZWN0KTtcbiAgICBhc3luYy5yZWplY3RTZXJpZXMgPSBkb1NlcmllcyhfcmVqZWN0KTtcblxuICAgIHZhciBfZGV0ZWN0ID0gZnVuY3Rpb24gKGVhY2hmbiwgYXJyLCBpdGVyYXRvciwgbWFpbl9jYWxsYmFjaykge1xuICAgICAgICBlYWNoZm4oYXJyLCBmdW5jdGlvbiAoeCwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIGl0ZXJhdG9yKHgsIGZ1bmN0aW9uIChyZXN1bHQpIHtcbiAgICAgICAgICAgICAgICBpZiAocmVzdWx0KSB7XG4gICAgICAgICAgICAgICAgICAgIG1haW5fY2FsbGJhY2soeCk7XG4gICAgICAgICAgICAgICAgICAgIG1haW5fY2FsbGJhY2sgPSBmdW5jdGlvbiAoKSB7fTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgIG1haW5fY2FsbGJhY2soKTtcbiAgICAgICAgfSk7XG4gICAgfTtcbiAgICBhc3luYy5kZXRlY3QgPSBkb1BhcmFsbGVsKF9kZXRlY3QpO1xuICAgIGFzeW5jLmRldGVjdFNlcmllcyA9IGRvU2VyaWVzKF9kZXRlY3QpO1xuXG4gICAgYXN5bmMuc29tZSA9IGZ1bmN0aW9uIChhcnIsIGl0ZXJhdG9yLCBtYWluX2NhbGxiYWNrKSB7XG4gICAgICAgIGFzeW5jLmVhY2goYXJyLCBmdW5jdGlvbiAoeCwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIGl0ZXJhdG9yKHgsIGZ1bmN0aW9uICh2KSB7XG4gICAgICAgICAgICAgICAgaWYgKHYpIHtcbiAgICAgICAgICAgICAgICAgICAgbWFpbl9jYWxsYmFjayh0cnVlKTtcbiAgICAgICAgICAgICAgICAgICAgbWFpbl9jYWxsYmFjayA9IGZ1bmN0aW9uICgpIHt9O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgIG1haW5fY2FsbGJhY2soZmFsc2UpO1xuICAgICAgICB9KTtcbiAgICB9O1xuICAgIC8vIGFueSBhbGlhc1xuICAgIGFzeW5jLmFueSA9IGFzeW5jLnNvbWU7XG5cbiAgICBhc3luYy5ldmVyeSA9IGZ1bmN0aW9uIChhcnIsIGl0ZXJhdG9yLCBtYWluX2NhbGxiYWNrKSB7XG4gICAgICAgIGFzeW5jLmVhY2goYXJyLCBmdW5jdGlvbiAoeCwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIGl0ZXJhdG9yKHgsIGZ1bmN0aW9uICh2KSB7XG4gICAgICAgICAgICAgICAgaWYgKCF2KSB7XG4gICAgICAgICAgICAgICAgICAgIG1haW5fY2FsbGJhY2soZmFsc2UpO1xuICAgICAgICAgICAgICAgICAgICBtYWluX2NhbGxiYWNrID0gZnVuY3Rpb24gKCkge307XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhbGxiYWNrKCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSwgZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgbWFpbl9jYWxsYmFjayh0cnVlKTtcbiAgICAgICAgfSk7XG4gICAgfTtcbiAgICAvLyBhbGwgYWxpYXNcbiAgICBhc3luYy5hbGwgPSBhc3luYy5ldmVyeTtcblxuICAgIGFzeW5jLnNvcnRCeSA9IGZ1bmN0aW9uIChhcnIsIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICBhc3luYy5tYXAoYXJyLCBmdW5jdGlvbiAoeCwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIGl0ZXJhdG9yKHgsIGZ1bmN0aW9uIChlcnIsIGNyaXRlcmlhKSB7XG4gICAgICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2sobnVsbCwge3ZhbHVlOiB4LCBjcml0ZXJpYTogY3JpdGVyaWF9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSwgZnVuY3Rpb24gKGVyciwgcmVzdWx0cykge1xuICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAgIHJldHVybiBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgdmFyIGZuID0gZnVuY3Rpb24gKGxlZnQsIHJpZ2h0KSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBhID0gbGVmdC5jcml0ZXJpYSwgYiA9IHJpZ2h0LmNyaXRlcmlhO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYSA8IGIgPyAtMSA6IGEgPiBiID8gMSA6IDA7XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICBjYWxsYmFjayhudWxsLCBfbWFwKHJlc3VsdHMuc29ydChmbiksIGZ1bmN0aW9uICh4KSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB4LnZhbHVlO1xuICAgICAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfTtcblxuICAgIGFzeW5jLmF1dG8gPSBmdW5jdGlvbiAodGFza3MsIGNhbGxiYWNrKSB7XG4gICAgICAgIGNhbGxiYWNrID0gY2FsbGJhY2sgfHwgZnVuY3Rpb24gKCkge307XG4gICAgICAgIHZhciBrZXlzID0gX2tleXModGFza3MpO1xuICAgICAgICB2YXIgcmVtYWluaW5nVGFza3MgPSBrZXlzLmxlbmd0aFxuICAgICAgICBpZiAoIXJlbWFpbmluZ1Rhc2tzKSB7XG4gICAgICAgICAgICByZXR1cm4gY2FsbGJhY2soKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciByZXN1bHRzID0ge307XG5cbiAgICAgICAgdmFyIGxpc3RlbmVycyA9IFtdO1xuICAgICAgICB2YXIgYWRkTGlzdGVuZXIgPSBmdW5jdGlvbiAoZm4pIHtcbiAgICAgICAgICAgIGxpc3RlbmVycy51bnNoaWZ0KGZuKTtcbiAgICAgICAgfTtcbiAgICAgICAgdmFyIHJlbW92ZUxpc3RlbmVyID0gZnVuY3Rpb24gKGZuKSB7XG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxpc3RlbmVycy5sZW5ndGg7IGkgKz0gMSkge1xuICAgICAgICAgICAgICAgIGlmIChsaXN0ZW5lcnNbaV0gPT09IGZuKSB7XG4gICAgICAgICAgICAgICAgICAgIGxpc3RlbmVycy5zcGxpY2UoaSwgMSk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIHZhciB0YXNrQ29tcGxldGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZW1haW5pbmdUYXNrcy0tXG4gICAgICAgICAgICBfZWFjaChsaXN0ZW5lcnMuc2xpY2UoMCksIGZ1bmN0aW9uIChmbikge1xuICAgICAgICAgICAgICAgIGZuKCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfTtcblxuICAgICAgICBhZGRMaXN0ZW5lcihmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBpZiAoIXJlbWFpbmluZ1Rhc2tzKSB7XG4gICAgICAgICAgICAgICAgdmFyIHRoZUNhbGxiYWNrID0gY2FsbGJhY2s7XG4gICAgICAgICAgICAgICAgLy8gcHJldmVudCBmaW5hbCBjYWxsYmFjayBmcm9tIGNhbGxpbmcgaXRzZWxmIGlmIGl0IGVycm9yc1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrID0gZnVuY3Rpb24gKCkge307XG5cbiAgICAgICAgICAgICAgICB0aGVDYWxsYmFjayhudWxsLCByZXN1bHRzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgX2VhY2goa2V5cywgZnVuY3Rpb24gKGspIHtcbiAgICAgICAgICAgIHZhciB0YXNrID0gX2lzQXJyYXkodGFza3Nba10pID8gdGFza3Nba106IFt0YXNrc1trXV07XG4gICAgICAgICAgICB2YXIgdGFza0NhbGxiYWNrID0gZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgICAgIHZhciBhcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKTtcbiAgICAgICAgICAgICAgICBpZiAoYXJncy5sZW5ndGggPD0gMSkge1xuICAgICAgICAgICAgICAgICAgICBhcmdzID0gYXJnc1swXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAgICAgICB2YXIgc2FmZVJlc3VsdHMgPSB7fTtcbiAgICAgICAgICAgICAgICAgICAgX2VhY2goX2tleXMocmVzdWx0cyksIGZ1bmN0aW9uKHJrZXkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNhZmVSZXN1bHRzW3JrZXldID0gcmVzdWx0c1tya2V5XTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIHNhZmVSZXN1bHRzW2tdID0gYXJncztcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soZXJyLCBzYWZlUmVzdWx0cyk7XG4gICAgICAgICAgICAgICAgICAgIC8vIHN0b3Agc3Vic2VxdWVudCBlcnJvcnMgaGl0dGluZyBjYWxsYmFjayBtdWx0aXBsZSB0aW1lc1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayA9IGZ1bmN0aW9uICgpIHt9O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0c1trXSA9IGFyZ3M7XG4gICAgICAgICAgICAgICAgICAgIGFzeW5jLnNldEltbWVkaWF0ZSh0YXNrQ29tcGxldGUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICB2YXIgcmVxdWlyZXMgPSB0YXNrLnNsaWNlKDAsIE1hdGguYWJzKHRhc2subGVuZ3RoIC0gMSkpIHx8IFtdO1xuICAgICAgICAgICAgdmFyIHJlYWR5ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBfcmVkdWNlKHJlcXVpcmVzLCBmdW5jdGlvbiAoYSwgeCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gKGEgJiYgcmVzdWx0cy5oYXNPd25Qcm9wZXJ0eSh4KSk7XG4gICAgICAgICAgICAgICAgfSwgdHJ1ZSkgJiYgIXJlc3VsdHMuaGFzT3duUHJvcGVydHkoayk7XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgaWYgKHJlYWR5KCkpIHtcbiAgICAgICAgICAgICAgICB0YXNrW3Rhc2subGVuZ3RoIC0gMV0odGFza0NhbGxiYWNrLCByZXN1bHRzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHZhciBsaXN0ZW5lciA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlYWR5KCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlbW92ZUxpc3RlbmVyKGxpc3RlbmVyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRhc2tbdGFzay5sZW5ndGggLSAxXSh0YXNrQ2FsbGJhY2ssIHJlc3VsdHMpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICBhZGRMaXN0ZW5lcihsaXN0ZW5lcik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH07XG5cbiAgICBhc3luYy5yZXRyeSA9IGZ1bmN0aW9uKHRpbWVzLCB0YXNrLCBjYWxsYmFjaykge1xuICAgICAgICB2YXIgREVGQVVMVF9USU1FUyA9IDU7XG4gICAgICAgIHZhciBhdHRlbXB0cyA9IFtdO1xuICAgICAgICAvLyBVc2UgZGVmYXVsdHMgaWYgdGltZXMgbm90IHBhc3NlZFxuICAgICAgICBpZiAodHlwZW9mIHRpbWVzID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICBjYWxsYmFjayA9IHRhc2s7XG4gICAgICAgICAgICB0YXNrID0gdGltZXM7XG4gICAgICAgICAgICB0aW1lcyA9IERFRkFVTFRfVElNRVM7XG4gICAgICAgIH1cbiAgICAgICAgLy8gTWFrZSBzdXJlIHRpbWVzIGlzIGEgbnVtYmVyXG4gICAgICAgIHRpbWVzID0gcGFyc2VJbnQodGltZXMsIDEwKSB8fCBERUZBVUxUX1RJTUVTO1xuICAgICAgICB2YXIgd3JhcHBlZFRhc2sgPSBmdW5jdGlvbih3cmFwcGVkQ2FsbGJhY2ssIHdyYXBwZWRSZXN1bHRzKSB7XG4gICAgICAgICAgICB2YXIgcmV0cnlBdHRlbXB0ID0gZnVuY3Rpb24odGFzaywgZmluYWxBdHRlbXB0KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKHNlcmllc0NhbGxiYWNrKSB7XG4gICAgICAgICAgICAgICAgICAgIHRhc2soZnVuY3Rpb24oZXJyLCByZXN1bHQpe1xuICAgICAgICAgICAgICAgICAgICAgICAgc2VyaWVzQ2FsbGJhY2soIWVyciB8fCBmaW5hbEF0dGVtcHQsIHtlcnI6IGVyciwgcmVzdWx0OiByZXN1bHR9KTtcbiAgICAgICAgICAgICAgICAgICAgfSwgd3JhcHBlZFJlc3VsdHMpO1xuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgd2hpbGUgKHRpbWVzKSB7XG4gICAgICAgICAgICAgICAgYXR0ZW1wdHMucHVzaChyZXRyeUF0dGVtcHQodGFzaywgISh0aW1lcy09MSkpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGFzeW5jLnNlcmllcyhhdHRlbXB0cywgZnVuY3Rpb24oZG9uZSwgZGF0YSl7XG4gICAgICAgICAgICAgICAgZGF0YSA9IGRhdGFbZGF0YS5sZW5ndGggLSAxXTtcbiAgICAgICAgICAgICAgICAod3JhcHBlZENhbGxiYWNrIHx8IGNhbGxiYWNrKShkYXRhLmVyciwgZGF0YS5yZXN1bHQpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gSWYgYSBjYWxsYmFjayBpcyBwYXNzZWQsIHJ1biB0aGlzIGFzIGEgY29udHJvbGwgZmxvd1xuICAgICAgICByZXR1cm4gY2FsbGJhY2sgPyB3cmFwcGVkVGFzaygpIDogd3JhcHBlZFRhc2tcbiAgICB9O1xuXG4gICAgYXN5bmMud2F0ZXJmYWxsID0gZnVuY3Rpb24gKHRhc2tzLCBjYWxsYmFjaykge1xuICAgICAgICBjYWxsYmFjayA9IGNhbGxiYWNrIHx8IGZ1bmN0aW9uICgpIHt9O1xuICAgICAgICBpZiAoIV9pc0FycmF5KHRhc2tzKSkge1xuICAgICAgICAgIHZhciBlcnIgPSBuZXcgRXJyb3IoJ0ZpcnN0IGFyZ3VtZW50IHRvIHdhdGVyZmFsbCBtdXN0IGJlIGFuIGFycmF5IG9mIGZ1bmN0aW9ucycpO1xuICAgICAgICAgIHJldHVybiBjYWxsYmFjayhlcnIpO1xuICAgICAgICB9XG4gICAgICAgIGlmICghdGFza3MubGVuZ3RoKSB7XG4gICAgICAgICAgICByZXR1cm4gY2FsbGJhY2soKTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgd3JhcEl0ZXJhdG9yID0gZnVuY3Rpb24gKGl0ZXJhdG9yKSB7XG4gICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2suYXBwbHkobnVsbCwgYXJndW1lbnRzKTtcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2sgPSBmdW5jdGlvbiAoKSB7fTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBhcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKTtcbiAgICAgICAgICAgICAgICAgICAgdmFyIG5leHQgPSBpdGVyYXRvci5uZXh0KCk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChuZXh0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhcmdzLnB1c2god3JhcEl0ZXJhdG9yKG5leHQpKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3MucHVzaChjYWxsYmFjayk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgYXN5bmMuc2V0SW1tZWRpYXRlKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGl0ZXJhdG9yLmFwcGx5KG51bGwsIGFyZ3MpO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9O1xuICAgICAgICB9O1xuICAgICAgICB3cmFwSXRlcmF0b3IoYXN5bmMuaXRlcmF0b3IodGFza3MpKSgpO1xuICAgIH07XG5cbiAgICB2YXIgX3BhcmFsbGVsID0gZnVuY3Rpb24oZWFjaGZuLCB0YXNrcywgY2FsbGJhY2spIHtcbiAgICAgICAgY2FsbGJhY2sgPSBjYWxsYmFjayB8fCBmdW5jdGlvbiAoKSB7fTtcbiAgICAgICAgaWYgKF9pc0FycmF5KHRhc2tzKSkge1xuICAgICAgICAgICAgZWFjaGZuLm1hcCh0YXNrcywgZnVuY3Rpb24gKGZuLCBjYWxsYmFjaykge1xuICAgICAgICAgICAgICAgIGlmIChmbikge1xuICAgICAgICAgICAgICAgICAgICBmbihmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoYXJncy5sZW5ndGggPD0gMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3MgPSBhcmdzWzBdO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2suY2FsbChudWxsLCBlcnIsIGFyZ3MpO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LCBjYWxsYmFjayk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB2YXIgcmVzdWx0cyA9IHt9O1xuICAgICAgICAgICAgZWFjaGZuLmVhY2goX2tleXModGFza3MpLCBmdW5jdGlvbiAoaywgY2FsbGJhY2spIHtcbiAgICAgICAgICAgICAgICB0YXNrc1trXShmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBhcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGFyZ3MubGVuZ3RoIDw9IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3MgPSBhcmdzWzBdO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdHNba10gPSBhcmdzO1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSwgZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrKGVyciwgcmVzdWx0cyk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH07XG5cbiAgICBhc3luYy5wYXJhbGxlbCA9IGZ1bmN0aW9uICh0YXNrcywgY2FsbGJhY2spIHtcbiAgICAgICAgX3BhcmFsbGVsKHsgbWFwOiBhc3luYy5tYXAsIGVhY2g6IGFzeW5jLmVhY2ggfSwgdGFza3MsIGNhbGxiYWNrKTtcbiAgICB9O1xuXG4gICAgYXN5bmMucGFyYWxsZWxMaW1pdCA9IGZ1bmN0aW9uKHRhc2tzLCBsaW1pdCwgY2FsbGJhY2spIHtcbiAgICAgICAgX3BhcmFsbGVsKHsgbWFwOiBfbWFwTGltaXQobGltaXQpLCBlYWNoOiBfZWFjaExpbWl0KGxpbWl0KSB9LCB0YXNrcywgY2FsbGJhY2spO1xuICAgIH07XG5cbiAgICBhc3luYy5zZXJpZXMgPSBmdW5jdGlvbiAodGFza3MsIGNhbGxiYWNrKSB7XG4gICAgICAgIGNhbGxiYWNrID0gY2FsbGJhY2sgfHwgZnVuY3Rpb24gKCkge307XG4gICAgICAgIGlmIChfaXNBcnJheSh0YXNrcykpIHtcbiAgICAgICAgICAgIGFzeW5jLm1hcFNlcmllcyh0YXNrcywgZnVuY3Rpb24gKGZuLCBjYWxsYmFjaykge1xuICAgICAgICAgICAgICAgIGlmIChmbikge1xuICAgICAgICAgICAgICAgICAgICBmbihmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoYXJncy5sZW5ndGggPD0gMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3MgPSBhcmdzWzBdO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2suY2FsbChudWxsLCBlcnIsIGFyZ3MpO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LCBjYWxsYmFjayk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB2YXIgcmVzdWx0cyA9IHt9O1xuICAgICAgICAgICAgYXN5bmMuZWFjaFNlcmllcyhfa2V5cyh0YXNrcyksIGZ1bmN0aW9uIChrLCBjYWxsYmFjaykge1xuICAgICAgICAgICAgICAgIHRhc2tzW2tdKGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGFyZ3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsIDEpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoYXJncy5sZW5ndGggPD0gMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgYXJncyA9IGFyZ3NbMF07XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0c1trXSA9IGFyZ3M7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9LCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2soZXJyLCByZXN1bHRzKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIGFzeW5jLml0ZXJhdG9yID0gZnVuY3Rpb24gKHRhc2tzKSB7XG4gICAgICAgIHZhciBtYWtlQ2FsbGJhY2sgPSBmdW5jdGlvbiAoaW5kZXgpIHtcbiAgICAgICAgICAgIHZhciBmbiA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBpZiAodGFza3MubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgIHRhc2tzW2luZGV4XS5hcHBseShudWxsLCBhcmd1bWVudHMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gZm4ubmV4dCgpO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGZuLm5leHQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIChpbmRleCA8IHRhc2tzLmxlbmd0aCAtIDEpID8gbWFrZUNhbGxiYWNrKGluZGV4ICsgMSk6IG51bGw7XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgcmV0dXJuIGZuO1xuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gbWFrZUNhbGxiYWNrKDApO1xuICAgIH07XG5cbiAgICBhc3luYy5hcHBseSA9IGZ1bmN0aW9uIChmbikge1xuICAgICAgICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMSk7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gZm4uYXBwbHkoXG4gICAgICAgICAgICAgICAgbnVsbCwgYXJncy5jb25jYXQoQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKSlcbiAgICAgICAgICAgICk7XG4gICAgICAgIH07XG4gICAgfTtcblxuICAgIHZhciBfY29uY2F0ID0gZnVuY3Rpb24gKGVhY2hmbiwgYXJyLCBmbiwgY2FsbGJhY2spIHtcbiAgICAgICAgdmFyIHIgPSBbXTtcbiAgICAgICAgZWFjaGZuKGFyciwgZnVuY3Rpb24gKHgsIGNiKSB7XG4gICAgICAgICAgICBmbih4LCBmdW5jdGlvbiAoZXJyLCB5KSB7XG4gICAgICAgICAgICAgICAgciA9IHIuY29uY2F0KHkgfHwgW10pO1xuICAgICAgICAgICAgICAgIGNiKGVycik7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSwgZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgY2FsbGJhY2soZXJyLCByKTtcbiAgICAgICAgfSk7XG4gICAgfTtcbiAgICBhc3luYy5jb25jYXQgPSBkb1BhcmFsbGVsKF9jb25jYXQpO1xuICAgIGFzeW5jLmNvbmNhdFNlcmllcyA9IGRvU2VyaWVzKF9jb25jYXQpO1xuXG4gICAgYXN5bmMud2hpbHN0ID0gZnVuY3Rpb24gKHRlc3QsIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICBpZiAodGVzdCgpKSB7XG4gICAgICAgICAgICBpdGVyYXRvcihmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYXN5bmMud2hpbHN0KHRlc3QsIGl0ZXJhdG9yLCBjYWxsYmFjayk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGNhbGxiYWNrKCk7XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgYXN5bmMuZG9XaGlsc3QgPSBmdW5jdGlvbiAoaXRlcmF0b3IsIHRlc3QsIGNhbGxiYWNrKSB7XG4gICAgICAgIGl0ZXJhdG9yKGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHZhciBhcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKTtcbiAgICAgICAgICAgIGlmICh0ZXN0LmFwcGx5KG51bGwsIGFyZ3MpKSB7XG4gICAgICAgICAgICAgICAgYXN5bmMuZG9XaGlsc3QoaXRlcmF0b3IsIHRlc3QsIGNhbGxiYWNrKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH07XG5cbiAgICBhc3luYy51bnRpbCA9IGZ1bmN0aW9uICh0ZXN0LCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgaWYgKCF0ZXN0KCkpIHtcbiAgICAgICAgICAgIGl0ZXJhdG9yKGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBhc3luYy51bnRpbCh0ZXN0LCBpdGVyYXRvciwgY2FsbGJhY2spO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIGFzeW5jLmRvVW50aWwgPSBmdW5jdGlvbiAoaXRlcmF0b3IsIHRlc3QsIGNhbGxiYWNrKSB7XG4gICAgICAgIGl0ZXJhdG9yKGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHZhciBhcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKTtcbiAgICAgICAgICAgIGlmICghdGVzdC5hcHBseShudWxsLCBhcmdzKSkge1xuICAgICAgICAgICAgICAgIGFzeW5jLmRvVW50aWwoaXRlcmF0b3IsIHRlc3QsIGNhbGxiYWNrKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH07XG5cbiAgICBhc3luYy5xdWV1ZSA9IGZ1bmN0aW9uICh3b3JrZXIsIGNvbmN1cnJlbmN5KSB7XG4gICAgICAgIGlmIChjb25jdXJyZW5jeSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBjb25jdXJyZW5jeSA9IDE7XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gX2luc2VydChxLCBkYXRhLCBwb3MsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgaWYgKCFxLnN0YXJ0ZWQpe1xuICAgICAgICAgICAgcS5zdGFydGVkID0gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKCFfaXNBcnJheShkYXRhKSkge1xuICAgICAgICAgICAgICBkYXRhID0gW2RhdGFdO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZihkYXRhLmxlbmd0aCA9PSAwKSB7XG4gICAgICAgICAgICAgLy8gY2FsbCBkcmFpbiBpbW1lZGlhdGVseSBpZiB0aGVyZSBhcmUgbm8gdGFza3NcbiAgICAgICAgICAgICByZXR1cm4gYXN5bmMuc2V0SW1tZWRpYXRlKGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgICBpZiAocS5kcmFpbikge1xuICAgICAgICAgICAgICAgICAgICAgcS5kcmFpbigpO1xuICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIF9lYWNoKGRhdGEsIGZ1bmN0aW9uKHRhc2spIHtcbiAgICAgICAgICAgICAgdmFyIGl0ZW0gPSB7XG4gICAgICAgICAgICAgICAgICBkYXRhOiB0YXNrLFxuICAgICAgICAgICAgICAgICAgY2FsbGJhY2s6IHR5cGVvZiBjYWxsYmFjayA9PT0gJ2Z1bmN0aW9uJyA/IGNhbGxiYWNrIDogbnVsbFxuICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgIGlmIChwb3MpIHtcbiAgICAgICAgICAgICAgICBxLnRhc2tzLnVuc2hpZnQoaXRlbSk7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcS50YXNrcy5wdXNoKGl0ZW0pO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgaWYgKHEuc2F0dXJhdGVkICYmIHEudGFza3MubGVuZ3RoID09PSBxLmNvbmN1cnJlbmN5KSB7XG4gICAgICAgICAgICAgICAgICBxLnNhdHVyYXRlZCgpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGFzeW5jLnNldEltbWVkaWF0ZShxLnByb2Nlc3MpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIHdvcmtlcnMgPSAwO1xuICAgICAgICB2YXIgcSA9IHtcbiAgICAgICAgICAgIHRhc2tzOiBbXSxcbiAgICAgICAgICAgIGNvbmN1cnJlbmN5OiBjb25jdXJyZW5jeSxcbiAgICAgICAgICAgIHNhdHVyYXRlZDogbnVsbCxcbiAgICAgICAgICAgIGVtcHR5OiBudWxsLFxuICAgICAgICAgICAgZHJhaW46IG51bGwsXG4gICAgICAgICAgICBzdGFydGVkOiBmYWxzZSxcbiAgICAgICAgICAgIHBhdXNlZDogZmFsc2UsXG4gICAgICAgICAgICBwdXNoOiBmdW5jdGlvbiAoZGF0YSwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgICAgX2luc2VydChxLCBkYXRhLCBmYWxzZSwgY2FsbGJhY2spO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGtpbGw6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgcS5kcmFpbiA9IG51bGw7XG4gICAgICAgICAgICAgIHEudGFza3MgPSBbXTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB1bnNoaWZ0OiBmdW5jdGlvbiAoZGF0YSwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgICAgX2luc2VydChxLCBkYXRhLCB0cnVlLCBjYWxsYmFjayk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcHJvY2VzczogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGlmICghcS5wYXVzZWQgJiYgd29ya2VycyA8IHEuY29uY3VycmVuY3kgJiYgcS50YXNrcy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHRhc2sgPSBxLnRhc2tzLnNoaWZ0KCk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChxLmVtcHR5ICYmIHEudGFza3MubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBxLmVtcHR5KCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgd29ya2VycyArPSAxO1xuICAgICAgICAgICAgICAgICAgICB2YXIgbmV4dCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHdvcmtlcnMgLT0gMTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0YXNrLmNhbGxiYWNrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFzay5jYWxsYmFjay5hcHBseSh0YXNrLCBhcmd1bWVudHMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHEuZHJhaW4gJiYgcS50YXNrcy5sZW5ndGggKyB3b3JrZXJzID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcS5kcmFpbigpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgcS5wcm9jZXNzKCk7XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIHZhciBjYiA9IG9ubHlfb25jZShuZXh0KTtcbiAgICAgICAgICAgICAgICAgICAgd29ya2VyKHRhc2suZGF0YSwgY2IpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBsZW5ndGg6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcS50YXNrcy5sZW5ndGg7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcnVubmluZzogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB3b3JrZXJzO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGlkbGU6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBxLnRhc2tzLmxlbmd0aCArIHdvcmtlcnMgPT09IDA7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcGF1c2U6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBpZiAocS5wYXVzZWQgPT09IHRydWUpIHsgcmV0dXJuOyB9XG4gICAgICAgICAgICAgICAgcS5wYXVzZWQgPSB0cnVlO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHJlc3VtZTogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGlmIChxLnBhdXNlZCA9PT0gZmFsc2UpIHsgcmV0dXJuOyB9XG4gICAgICAgICAgICAgICAgcS5wYXVzZWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAvLyBOZWVkIHRvIGNhbGwgcS5wcm9jZXNzIG9uY2UgcGVyIGNvbmN1cnJlbnRcbiAgICAgICAgICAgICAgICAvLyB3b3JrZXIgdG8gcHJlc2VydmUgZnVsbCBjb25jdXJyZW5jeSBhZnRlciBwYXVzZVxuICAgICAgICAgICAgICAgIGZvciAodmFyIHcgPSAxOyB3IDw9IHEuY29uY3VycmVuY3k7IHcrKykge1xuICAgICAgICAgICAgICAgICAgICBhc3luYy5zZXRJbW1lZGlhdGUocS5wcm9jZXNzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiBxO1xuICAgIH07XG5cbiAgICBhc3luYy5wcmlvcml0eVF1ZXVlID0gZnVuY3Rpb24gKHdvcmtlciwgY29uY3VycmVuY3kpIHtcblxuICAgICAgICBmdW5jdGlvbiBfY29tcGFyZVRhc2tzKGEsIGIpe1xuICAgICAgICAgIHJldHVybiBhLnByaW9yaXR5IC0gYi5wcmlvcml0eTtcbiAgICAgICAgfTtcblxuICAgICAgICBmdW5jdGlvbiBfYmluYXJ5U2VhcmNoKHNlcXVlbmNlLCBpdGVtLCBjb21wYXJlKSB7XG4gICAgICAgICAgdmFyIGJlZyA9IC0xLFxuICAgICAgICAgICAgICBlbmQgPSBzZXF1ZW5jZS5sZW5ndGggLSAxO1xuICAgICAgICAgIHdoaWxlIChiZWcgPCBlbmQpIHtcbiAgICAgICAgICAgIHZhciBtaWQgPSBiZWcgKyAoKGVuZCAtIGJlZyArIDEpID4+PiAxKTtcbiAgICAgICAgICAgIGlmIChjb21wYXJlKGl0ZW0sIHNlcXVlbmNlW21pZF0pID49IDApIHtcbiAgICAgICAgICAgICAgYmVnID0gbWlkO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgZW5kID0gbWlkIC0gMTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIGJlZztcbiAgICAgICAgfVxuXG4gICAgICAgIGZ1bmN0aW9uIF9pbnNlcnQocSwgZGF0YSwgcHJpb3JpdHksIGNhbGxiYWNrKSB7XG4gICAgICAgICAgaWYgKCFxLnN0YXJ0ZWQpe1xuICAgICAgICAgICAgcS5zdGFydGVkID0gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKCFfaXNBcnJheShkYXRhKSkge1xuICAgICAgICAgICAgICBkYXRhID0gW2RhdGFdO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZihkYXRhLmxlbmd0aCA9PSAwKSB7XG4gICAgICAgICAgICAgLy8gY2FsbCBkcmFpbiBpbW1lZGlhdGVseSBpZiB0aGVyZSBhcmUgbm8gdGFza3NcbiAgICAgICAgICAgICByZXR1cm4gYXN5bmMuc2V0SW1tZWRpYXRlKGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgICBpZiAocS5kcmFpbikge1xuICAgICAgICAgICAgICAgICAgICAgcS5kcmFpbigpO1xuICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIF9lYWNoKGRhdGEsIGZ1bmN0aW9uKHRhc2spIHtcbiAgICAgICAgICAgICAgdmFyIGl0ZW0gPSB7XG4gICAgICAgICAgICAgICAgICBkYXRhOiB0YXNrLFxuICAgICAgICAgICAgICAgICAgcHJpb3JpdHk6IHByaW9yaXR5LFxuICAgICAgICAgICAgICAgICAgY2FsbGJhY2s6IHR5cGVvZiBjYWxsYmFjayA9PT0gJ2Z1bmN0aW9uJyA/IGNhbGxiYWNrIDogbnVsbFxuICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgIHEudGFza3Muc3BsaWNlKF9iaW5hcnlTZWFyY2gocS50YXNrcywgaXRlbSwgX2NvbXBhcmVUYXNrcykgKyAxLCAwLCBpdGVtKTtcblxuICAgICAgICAgICAgICBpZiAocS5zYXR1cmF0ZWQgJiYgcS50YXNrcy5sZW5ndGggPT09IHEuY29uY3VycmVuY3kpIHtcbiAgICAgICAgICAgICAgICAgIHEuc2F0dXJhdGVkKCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgYXN5bmMuc2V0SW1tZWRpYXRlKHEucHJvY2Vzcyk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBTdGFydCB3aXRoIGEgbm9ybWFsIHF1ZXVlXG4gICAgICAgIHZhciBxID0gYXN5bmMucXVldWUod29ya2VyLCBjb25jdXJyZW5jeSk7XG5cbiAgICAgICAgLy8gT3ZlcnJpZGUgcHVzaCB0byBhY2NlcHQgc2Vjb25kIHBhcmFtZXRlciByZXByZXNlbnRpbmcgcHJpb3JpdHlcbiAgICAgICAgcS5wdXNoID0gZnVuY3Rpb24gKGRhdGEsIHByaW9yaXR5LCBjYWxsYmFjaykge1xuICAgICAgICAgIF9pbnNlcnQocSwgZGF0YSwgcHJpb3JpdHksIGNhbGxiYWNrKTtcbiAgICAgICAgfTtcblxuICAgICAgICAvLyBSZW1vdmUgdW5zaGlmdCBmdW5jdGlvblxuICAgICAgICBkZWxldGUgcS51bnNoaWZ0O1xuXG4gICAgICAgIHJldHVybiBxO1xuICAgIH07XG5cbiAgICBhc3luYy5jYXJnbyA9IGZ1bmN0aW9uICh3b3JrZXIsIHBheWxvYWQpIHtcbiAgICAgICAgdmFyIHdvcmtpbmcgICAgID0gZmFsc2UsXG4gICAgICAgICAgICB0YXNrcyAgICAgICA9IFtdO1xuXG4gICAgICAgIHZhciBjYXJnbyA9IHtcbiAgICAgICAgICAgIHRhc2tzOiB0YXNrcyxcbiAgICAgICAgICAgIHBheWxvYWQ6IHBheWxvYWQsXG4gICAgICAgICAgICBzYXR1cmF0ZWQ6IG51bGwsXG4gICAgICAgICAgICBlbXB0eTogbnVsbCxcbiAgICAgICAgICAgIGRyYWluOiBudWxsLFxuICAgICAgICAgICAgZHJhaW5lZDogdHJ1ZSxcbiAgICAgICAgICAgIHB1c2g6IGZ1bmN0aW9uIChkYXRhLCBjYWxsYmFjaykge1xuICAgICAgICAgICAgICAgIGlmICghX2lzQXJyYXkoZGF0YSkpIHtcbiAgICAgICAgICAgICAgICAgICAgZGF0YSA9IFtkYXRhXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgX2VhY2goZGF0YSwgZnVuY3Rpb24odGFzaykge1xuICAgICAgICAgICAgICAgICAgICB0YXNrcy5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGE6IHRhc2ssXG4gICAgICAgICAgICAgICAgICAgICAgICBjYWxsYmFjazogdHlwZW9mIGNhbGxiYWNrID09PSAnZnVuY3Rpb24nID8gY2FsbGJhY2sgOiBudWxsXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICBjYXJnby5kcmFpbmVkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIGlmIChjYXJnby5zYXR1cmF0ZWQgJiYgdGFza3MubGVuZ3RoID09PSBwYXlsb2FkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjYXJnby5zYXR1cmF0ZWQoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGFzeW5jLnNldEltbWVkaWF0ZShjYXJnby5wcm9jZXNzKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBwcm9jZXNzOiBmdW5jdGlvbiBwcm9jZXNzKCkge1xuICAgICAgICAgICAgICAgIGlmICh3b3JraW5nKSByZXR1cm47XG4gICAgICAgICAgICAgICAgaWYgKHRhc2tzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICBpZihjYXJnby5kcmFpbiAmJiAhY2FyZ28uZHJhaW5lZCkgY2FyZ28uZHJhaW4oKTtcbiAgICAgICAgICAgICAgICAgICAgY2FyZ28uZHJhaW5lZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB2YXIgdHMgPSB0eXBlb2YgcGF5bG9hZCA9PT0gJ251bWJlcidcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IHRhc2tzLnNwbGljZSgwLCBwYXlsb2FkKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogdGFza3Muc3BsaWNlKDAsIHRhc2tzLmxlbmd0aCk7XG5cbiAgICAgICAgICAgICAgICB2YXIgZHMgPSBfbWFwKHRzLCBmdW5jdGlvbiAodGFzaykge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGFzay5kYXRhO1xuICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgaWYoY2FyZ28uZW1wdHkpIGNhcmdvLmVtcHR5KCk7XG4gICAgICAgICAgICAgICAgd29ya2luZyA9IHRydWU7XG4gICAgICAgICAgICAgICAgd29ya2VyKGRzLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIHdvcmtpbmcgPSBmYWxzZTtcblxuICAgICAgICAgICAgICAgICAgICB2YXIgYXJncyA9IGFyZ3VtZW50cztcbiAgICAgICAgICAgICAgICAgICAgX2VhY2godHMsIGZ1bmN0aW9uIChkYXRhKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZGF0YS5jYWxsYmFjaykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEuY2FsbGJhY2suYXBwbHkobnVsbCwgYXJncyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgICAgIHByb2Nlc3MoKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBsZW5ndGg6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGFza3MubGVuZ3RoO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHJ1bm5pbmc6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gd29ya2luZztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIGNhcmdvO1xuICAgIH07XG5cbiAgICB2YXIgX2NvbnNvbGVfZm4gPSBmdW5jdGlvbiAobmFtZSkge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKGZuKSB7XG4gICAgICAgICAgICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMSk7XG4gICAgICAgICAgICBmbi5hcHBseShudWxsLCBhcmdzLmNvbmNhdChbZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgICAgIHZhciBhcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKTtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGNvbnNvbGUgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb25zb2xlLmVycm9yKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihlcnIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKGNvbnNvbGVbbmFtZV0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIF9lYWNoKGFyZ3MsIGZ1bmN0aW9uICh4KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZVtuYW1lXSh4KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfV0pKTtcbiAgICAgICAgfTtcbiAgICB9O1xuICAgIGFzeW5jLmxvZyA9IF9jb25zb2xlX2ZuKCdsb2cnKTtcbiAgICBhc3luYy5kaXIgPSBfY29uc29sZV9mbignZGlyJyk7XG4gICAgLyphc3luYy5pbmZvID0gX2NvbnNvbGVfZm4oJ2luZm8nKTtcbiAgICBhc3luYy53YXJuID0gX2NvbnNvbGVfZm4oJ3dhcm4nKTtcbiAgICBhc3luYy5lcnJvciA9IF9jb25zb2xlX2ZuKCdlcnJvcicpOyovXG5cbiAgICBhc3luYy5tZW1vaXplID0gZnVuY3Rpb24gKGZuLCBoYXNoZXIpIHtcbiAgICAgICAgdmFyIG1lbW8gPSB7fTtcbiAgICAgICAgdmFyIHF1ZXVlcyA9IHt9O1xuICAgICAgICBoYXNoZXIgPSBoYXNoZXIgfHwgZnVuY3Rpb24gKHgpIHtcbiAgICAgICAgICAgIHJldHVybiB4O1xuICAgICAgICB9O1xuICAgICAgICB2YXIgbWVtb2l6ZWQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7XG4gICAgICAgICAgICB2YXIgY2FsbGJhY2sgPSBhcmdzLnBvcCgpO1xuICAgICAgICAgICAgdmFyIGtleSA9IGhhc2hlci5hcHBseShudWxsLCBhcmdzKTtcbiAgICAgICAgICAgIGlmIChrZXkgaW4gbWVtbykge1xuICAgICAgICAgICAgICAgIGFzeW5jLm5leHRUaWNrKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2suYXBwbHkobnVsbCwgbWVtb1trZXldKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGtleSBpbiBxdWV1ZXMpIHtcbiAgICAgICAgICAgICAgICBxdWV1ZXNba2V5XS5wdXNoKGNhbGxiYWNrKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHF1ZXVlc1trZXldID0gW2NhbGxiYWNrXTtcbiAgICAgICAgICAgICAgICBmbi5hcHBseShudWxsLCBhcmdzLmNvbmNhdChbZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICBtZW1vW2tleV0gPSBhcmd1bWVudHM7XG4gICAgICAgICAgICAgICAgICAgIHZhciBxID0gcXVldWVzW2tleV07XG4gICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBxdWV1ZXNba2V5XTtcbiAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDAsIGwgPSBxLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICAgIHFbaV0uYXBwbHkobnVsbCwgYXJndW1lbnRzKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1dKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIG1lbW9pemVkLm1lbW8gPSBtZW1vO1xuICAgICAgICBtZW1vaXplZC51bm1lbW9pemVkID0gZm47XG4gICAgICAgIHJldHVybiBtZW1vaXplZDtcbiAgICB9O1xuXG4gICAgYXN5bmMudW5tZW1vaXplID0gZnVuY3Rpb24gKGZuKSB7XG4gICAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gKGZuLnVubWVtb2l6ZWQgfHwgZm4pLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7XG4gICAgICB9O1xuICAgIH07XG5cbiAgICBhc3luYy50aW1lcyA9IGZ1bmN0aW9uIChjb3VudCwgaXRlcmF0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgIHZhciBjb3VudGVyID0gW107XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY291bnQ7IGkrKykge1xuICAgICAgICAgICAgY291bnRlci5wdXNoKGkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBhc3luYy5tYXAoY291bnRlciwgaXRlcmF0b3IsIGNhbGxiYWNrKTtcbiAgICB9O1xuXG4gICAgYXN5bmMudGltZXNTZXJpZXMgPSBmdW5jdGlvbiAoY291bnQsIGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgICAgICB2YXIgY291bnRlciA9IFtdO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNvdW50OyBpKyspIHtcbiAgICAgICAgICAgIGNvdW50ZXIucHVzaChpKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYXN5bmMubWFwU2VyaWVzKGNvdW50ZXIsIGl0ZXJhdG9yLCBjYWxsYmFjayk7XG4gICAgfTtcblxuICAgIGFzeW5jLnNlcSA9IGZ1bmN0aW9uICgvKiBmdW5jdGlvbnMuLi4gKi8pIHtcbiAgICAgICAgdmFyIGZucyA9IGFyZ3VtZW50cztcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHZhciB0aGF0ID0gdGhpcztcbiAgICAgICAgICAgIHZhciBhcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKTtcbiAgICAgICAgICAgIHZhciBjYWxsYmFjayA9IGFyZ3MucG9wKCk7XG4gICAgICAgICAgICBhc3luYy5yZWR1Y2UoZm5zLCBhcmdzLCBmdW5jdGlvbiAobmV3YXJncywgZm4sIGNiKSB7XG4gICAgICAgICAgICAgICAgZm4uYXBwbHkodGhhdCwgbmV3YXJncy5jb25jYXQoW2Z1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGVyciA9IGFyZ3VtZW50c1swXTtcbiAgICAgICAgICAgICAgICAgICAgdmFyIG5leHRhcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKTtcbiAgICAgICAgICAgICAgICAgICAgY2IoZXJyLCBuZXh0YXJncyk7XG4gICAgICAgICAgICAgICAgfV0pKVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGZ1bmN0aW9uIChlcnIsIHJlc3VsdHMpIHtcbiAgICAgICAgICAgICAgICBjYWxsYmFjay5hcHBseSh0aGF0LCBbZXJyXS5jb25jYXQocmVzdWx0cykpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH07XG4gICAgfTtcblxuICAgIGFzeW5jLmNvbXBvc2UgPSBmdW5jdGlvbiAoLyogZnVuY3Rpb25zLi4uICovKSB7XG4gICAgICByZXR1cm4gYXN5bmMuc2VxLmFwcGx5KG51bGwsIEFycmF5LnByb3RvdHlwZS5yZXZlcnNlLmNhbGwoYXJndW1lbnRzKSk7XG4gICAgfTtcblxuICAgIHZhciBfYXBwbHlFYWNoID0gZnVuY3Rpb24gKGVhY2hmbiwgZm5zIC8qYXJncy4uLiovKSB7XG4gICAgICAgIHZhciBnbyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHZhciB0aGF0ID0gdGhpcztcbiAgICAgICAgICAgIHZhciBhcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKTtcbiAgICAgICAgICAgIHZhciBjYWxsYmFjayA9IGFyZ3MucG9wKCk7XG4gICAgICAgICAgICByZXR1cm4gZWFjaGZuKGZucywgZnVuY3Rpb24gKGZuLCBjYikge1xuICAgICAgICAgICAgICAgIGZuLmFwcGx5KHRoYXQsIGFyZ3MuY29uY2F0KFtjYl0pKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjYWxsYmFjayk7XG4gICAgICAgIH07XG4gICAgICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID4gMikge1xuICAgICAgICAgICAgdmFyIGFyZ3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsIDIpO1xuICAgICAgICAgICAgcmV0dXJuIGdvLmFwcGx5KHRoaXMsIGFyZ3MpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIGdvO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBhc3luYy5hcHBseUVhY2ggPSBkb1BhcmFsbGVsKF9hcHBseUVhY2gpO1xuICAgIGFzeW5jLmFwcGx5RWFjaFNlcmllcyA9IGRvU2VyaWVzKF9hcHBseUVhY2gpO1xuXG4gICAgYXN5bmMuZm9yZXZlciA9IGZ1bmN0aW9uIChmbiwgY2FsbGJhY2spIHtcbiAgICAgICAgZnVuY3Rpb24gbmV4dChlcnIpIHtcbiAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICBpZiAoY2FsbGJhY2spIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRocm93IGVycjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZuKG5leHQpO1xuICAgICAgICB9XG4gICAgICAgIG5leHQoKTtcbiAgICB9O1xuXG4gICAgLy8gTm9kZS5qc1xuICAgIGlmICh0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJyAmJiBtb2R1bGUuZXhwb3J0cykge1xuICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IGFzeW5jO1xuICAgIH1cbiAgICAvLyBBTUQgLyBSZXF1aXJlSlNcbiAgICBlbHNlIGlmICh0eXBlb2YgZGVmaW5lICE9PSAndW5kZWZpbmVkJyAmJiBkZWZpbmUuYW1kKSB7XG4gICAgICAgIGRlZmluZShbXSwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIGFzeW5jO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgLy8gaW5jbHVkZWQgZGlyZWN0bHkgdmlhIDxzY3JpcHQ+IHRhZ1xuICAgIGVsc2Uge1xuICAgICAgICByb290LmFzeW5jID0gYXN5bmM7XG4gICAgfVxuXG59KCkpO1xuIiwidmFyIGFzeW5jICAgICAgID0gcmVxdWlyZSgnYXN5bmMnKSxcbiAgICB1cmxQYXJzZXIgICA9IHJlcXVpcmUoJ3VybCcpLFxuICAgIFJlc291cmNlICAgID0gcmVxdWlyZSgnLi9SZXNvdXJjZScpLFxuICAgIEV2ZW50RW1pdHRlciA9IHJlcXVpcmUoJ2V2ZW50ZW1pdHRlcjMnKTtcblxuLyoqXG4gKiBNYW5hZ2VzIHRoZSBzdGF0ZSBhbmQgbG9hZGluZyBvZiBtdWx0aXBsZSByZXNvdXJjZXMgdG8gbG9hZC5cbiAqXG4gKiBAY2xhc3NcbiAqIEBwYXJhbSBbYmFzZVVybD0nJ10ge3N0cmluZ30gVGhlIGJhc2UgdXJsIGZvciBhbGwgcmVzb3VyY2VzIGxvYWRlZCBieSB0aGlzIGxvYWRlci5cbiAqIEBwYXJhbSBbY29uY3VycmVuY3k9MTBdIHtudW1iZXJ9IFRoZSBudW1iZXIgb2YgcmVzb3VyY2VzIHRvIGxvYWQgY29uY3VycmVudGx5LlxuICovXG5mdW5jdGlvbiBMb2FkZXIoYmFzZVVybCwgY29uY3VycmVuY3kpIHtcbiAgICBFdmVudEVtaXR0ZXIuY2FsbCh0aGlzKTtcblxuICAgIGNvbmN1cnJlbmN5ID0gY29uY3VycmVuY3kgfHwgMTA7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYmFzZSB1cmwgZm9yIGFsbCByZXNvdXJjZXMgbG9hZGVkIGJ5IHRoaXMgbG9hZGVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7c3RyaW5nfVxuICAgICAqL1xuICAgIHRoaXMuYmFzZVVybCA9IGJhc2VVcmwgfHwgJyc7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgcHJvZ3Jlc3MgcGVyY2VudCBvZiB0aGUgbG9hZGVyIGdvaW5nIHRocm91Z2ggdGhlIHF1ZXVlLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMucHJvZ3Jlc3MgPSAwO1xuXG4gICAgLyoqXG4gICAgICogTG9hZGluZyBzdGF0ZSBvZiB0aGUgbG9hZGVyLCB0cnVlIGlmIGl0IGlzIGN1cnJlbnRseSBsb2FkaW5nIHJlc291cmNlcy5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICovXG4gICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgcGVyY2VudGFnZSBvZiB0b3RhbCBwcm9ncmVzcyB0aGF0IGEgc2luZ2xlIHJlc291cmNlIHJlcHJlc2VudHMuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy5fcHJvZ3Jlc3NDaHVuayA9IDA7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgbWlkZGxld2FyZSB0byBydW4gYmVmb3JlIGxvYWRpbmcgZWFjaCByZXNvdXJjZS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Z1bmN0aW9uW119XG4gICAgICovXG4gICAgdGhpcy5fYmVmb3JlTWlkZGxld2FyZSA9IFtdO1xuXG4gICAgLyoqXG4gICAgICogVGhlIG1pZGRsZXdhcmUgdG8gcnVuIGFmdGVyIGxvYWRpbmcgZWFjaCByZXNvdXJjZS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Z1bmN0aW9uW119XG4gICAgICovXG4gICAgdGhpcy5fYWZ0ZXJNaWRkbGV3YXJlID0gW107XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYF9sb2FkUmVzb3VyY2VgIGZ1bmN0aW9uIGJvdW5kIHdpdGggdGhpcyBvYmplY3QgY29udGV4dC5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQG1lbWJlciB7ZnVuY3Rpb259XG4gICAgICovXG4gICAgdGhpcy5fYm91bmRMb2FkUmVzb3VyY2UgPSB0aGlzLl9sb2FkUmVzb3VyY2UuYmluZCh0aGlzKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBgX29uTG9hZGAgZnVuY3Rpb24gYm91bmQgd2l0aCB0aGlzIG9iamVjdCBjb250ZXh0LlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAbWVtYmVyIHtmdW5jdGlvbn1cbiAgICAgKi9cbiAgICB0aGlzLl9ib3VuZE9uTG9hZCA9IHRoaXMuX29uTG9hZC5iaW5kKHRoaXMpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHJlc291cmNlIGJ1ZmZlciB0aGF0IGZpbGxzIHVudGlsIGBsb2FkYCBpcyBjYWxsZWQgdG8gc3RhcnQgbG9hZGluZyByZXNvdXJjZXMuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBtZW1iZXIge1Jlc291cmNlW119XG4gICAgICovXG4gICAgdGhpcy5fYnVmZmVyID0gW107XG5cbiAgICAvKipcbiAgICAgKiBVc2VkIHRvIHRyYWNrIGxvYWQgY29tcGxldGlvbi5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMuX251bVRvTG9hZCA9IDA7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgcmVzb3VyY2VzIHdhaXRpbmcgdG8gYmUgbG9hZGVkLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAbWVtYmVyIHtSZXNvdXJjZVtdfVxuICAgICAqL1xuICAgIHRoaXMuX3F1ZXVlID0gYXN5bmMucXVldWUodGhpcy5fYm91bmRMb2FkUmVzb3VyY2UsIGNvbmN1cnJlbmN5KTtcblxuICAgIC8qKlxuICAgICAqIEFsbCB0aGUgcmVzb3VyY2VzIGZvciB0aGlzIGxvYWRlciBrZXllZCBieSBuYW1lLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7b2JqZWN0PHN0cmluZywgUmVzb3VyY2U+fVxuICAgICAqL1xuICAgIHRoaXMucmVzb3VyY2VzID0ge307XG5cbiAgICAvKipcbiAgICAgKiBFbWl0dGVkIG9uY2UgcGVyIGxvYWRlZCBvciBlcnJvcmVkIHJlc291cmNlLlxuICAgICAqXG4gICAgICogQGV2ZW50IHByb2dyZXNzXG4gICAgICogQG1lbWJlcm9mIExvYWRlciNcbiAgICAgKi9cblxuICAgIC8qKlxuICAgICAqIEVtaXR0ZWQgb25jZSBwZXIgZXJyb3JlZCByZXNvdXJjZS5cbiAgICAgKlxuICAgICAqIEBldmVudCBlcnJvclxuICAgICAqIEBtZW1iZXJvZiBMb2FkZXIjXG4gICAgICovXG5cbiAgICAvKipcbiAgICAgKiBFbWl0dGVkIG9uY2UgcGVyIGxvYWRlZCByZXNvdXJjZS5cbiAgICAgKlxuICAgICAqIEBldmVudCBsb2FkXG4gICAgICogQG1lbWJlcm9mIExvYWRlciNcbiAgICAgKi9cblxuICAgIC8qKlxuICAgICAqIEVtaXR0ZWQgd2hlbiB0aGUgbG9hZGVyIGJlZ2lucyB0byBwcm9jZXNzIHRoZSBxdWV1ZS5cbiAgICAgKlxuICAgICAqIEBldmVudCBzdGFydFxuICAgICAqIEBtZW1iZXJvZiBMb2FkZXIjXG4gICAgICovXG5cbiAgICAvKipcbiAgICAgKiBFbWl0dGVkIHdoZW4gdGhlIHF1ZXVlZCByZXNvdXJjZXMgYWxsIGxvYWQuXG4gICAgICpcbiAgICAgKiBAZXZlbnQgY29tcGxldGVcbiAgICAgKiBAbWVtYmVyb2YgTG9hZGVyI1xuICAgICAqL1xufVxuXG5Mb2FkZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShFdmVudEVtaXR0ZXIucHJvdG90eXBlKTtcbkxvYWRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBMb2FkZXI7XG5tb2R1bGUuZXhwb3J0cyA9IExvYWRlcjtcblxuLyoqXG4gKiBBZGRzIGEgcmVzb3VyY2UgKG9yIG11bHRpcGxlIHJlc291cmNlcykgdG8gdGhlIGxvYWRlciBxdWV1ZS5cbiAqXG4gKiBUaGlzIGZ1bmN0aW9uIGNhbiB0YWtlIGEgd2lkZSB2YXJpZXR5IG9mIGRpZmZlcmVudCBwYXJhbWV0ZXJzLiBUaGUgb25seSB0aGluZyB0aGF0IGlzIGFsd2F5c1xuICogcmVxdWlyZWQgdGhlIHVybCB0byBsb2FkLiBBbGwgdGhlIGZvbGxvd2luZyB3aWxsIHdvcms6XG4gKlxuICogYGBganNcbiAqIGxvYWRlclxuICogICAgIC8vIG5vcm1hbCBwYXJhbSBzeW50YXhcbiAqICAgICAuYWRkKCdrZXknLCAnaHR0cDovLy4uLicsIGZ1bmN0aW9uICgpIHt9KVxuICogICAgIC5hZGQoJ2h0dHA6Ly8uLi4nLCBmdW5jdGlvbiAoKSB7fSlcbiAqICAgICAuYWRkKCdodHRwOi8vLi4uJylcbiAqXG4gKiAgICAgLy8gb2JqZWN0IHN5bnRheFxuICogICAgIC5hZGQoe1xuICogICAgICAgICBuYW1lOiAna2V5MicsXG4gKiAgICAgICAgIHVybDogJ2h0dHA6Ly8uLi4nXG4gKiAgICAgfSwgZnVuY3Rpb24gKCkge30pXG4gKiAgICAgLmFkZCh7XG4gKiAgICAgICAgIHVybDogJ2h0dHA6Ly8uLi4nXG4gKiAgICAgfSwgZnVuY3Rpb24gKCkge30pXG4gKiAgICAgLmFkZCh7XG4gKiAgICAgICAgIG5hbWU6ICdrZXkzJyxcbiAqICAgICAgICAgdXJsOiAnaHR0cDovLy4uLidcbiAqICAgICAgICAgb25Db21wbGV0ZTogZnVuY3Rpb24gKCkge31cbiAqICAgICB9KVxuICogICAgIC5hZGQoe1xuICogICAgICAgICB1cmw6ICdodHRwczovLy4uLicsXG4gKiAgICAgICAgIG9uQ29tcGxldGU6IGZ1bmN0aW9uICgpIHt9LFxuICogICAgICAgICBjcm9zc09yaWdpbjogdHJ1ZVxuICogICAgIH0pXG4gKlxuICogICAgIC8vIHlvdSBjYW4gYWxzbyBwYXNzIGFuIGFycmF5IG9mIG9iamVjdHMgb3IgdXJscyBvciBib3RoXG4gKiAgICAgLmFkZChbXG4gKiAgICAgICAgIHsgbmFtZTogJ2tleTQnLCB1cmw6ICdodHRwOi8vLi4uJywgb25Db21wbGV0ZTogZnVuY3Rpb24gKCkge30gfSxcbiAqICAgICAgICAgeyB1cmw6ICdodHRwOi8vLi4uJywgb25Db21wbGV0ZTogZnVuY3Rpb24gKCkge30gfSxcbiAqICAgICAgICAgJ2h0dHA6Ly8uLi4nXG4gKiAgICAgXSk7XG4gKiBgYGBcbiAqXG4gKiBAYWxpYXMgZW5xdWV1ZVxuICogQHBhcmFtIFtuYW1lXSB7c3RyaW5nfSBUaGUgbmFtZSBvZiB0aGUgcmVzb3VyY2UgdG8gbG9hZCwgaWYgbm90IHBhc3NlZCB0aGUgdXJsIGlzIHVzZWQuXG4gKiBAcGFyYW0gdXJsIHtzdHJpbmd9IFRoZSB1cmwgZm9yIHRoaXMgcmVzb3VyY2UsIHJlbGF0aXZlIHRvIHRoZSBiYXNlVXJsIG9mIHRoaXMgbG9hZGVyLlxuICogQHBhcmFtIFtvcHRpb25zXSB7b2JqZWN0fSBUaGUgb3B0aW9ucyBmb3IgdGhlIGxvYWQuXG4gKiBAcGFyYW0gW29wdGlvbnMuY3Jvc3NPcmlnaW5dIHtib29sZWFufSBJcyB0aGlzIHJlcXVlc3QgY3Jvc3Mtb3JpZ2luPyBEZWZhdWx0IGlzIHRvIGRldGVybWluZSBhdXRvbWF0aWNhbGx5LlxuICogQHBhcmFtIFtvcHRpb25zLmxvYWRUeXBlPVJlc291cmNlLkxPQURfVFlQRS5YSFJdIHtSZXNvdXJjZS5YSFJfTE9BRF9UWVBFfSBIb3cgc2hvdWxkIHRoaXMgcmVzb3VyY2UgYmUgbG9hZGVkP1xuICogQHBhcmFtIFtvcHRpb25zLnhoclR5cGU9UmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuREVGQVVMVF0ge1Jlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFfSBIb3cgc2hvdWxkIHRoZSBkYXRhIGJlaW5nXG4gKiAgICAgIGxvYWRlZCBiZSBpbnRlcnByZXRlZCB3aGVuIHVzaW5nIFhIUj9cbiAqIEBwYXJhbSBbY2FsbGJhY2tdIHtmdW5jdGlvbn0gRnVuY3Rpb24gdG8gY2FsbCB3aGVuIHRoaXMgc3BlY2lmaWMgcmVzb3VyY2UgY29tcGxldGVzIGxvYWRpbmcuXG4gKiBAcmV0dXJuIHtMb2FkZXJ9XG4gKi9cbkxvYWRlci5wcm90b3R5cGUuYWRkID0gTG9hZGVyLnByb3RvdHlwZS5lbnF1ZXVlID0gZnVuY3Rpb24gKG5hbWUsIHVybCwgb3B0aW9ucywgY2IpIHtcbiAgICAvLyBzcGVjaWFsIGNhc2Ugb2YgYW4gYXJyYXkgb2Ygb2JqZWN0cyBvciB1cmxzXG4gICAgaWYgKEFycmF5LmlzQXJyYXkobmFtZSkpIHtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBuYW1lLmxlbmd0aDsgKytpKSB7XG4gICAgICAgICAgICB0aGlzLmFkZChuYW1lW2ldKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIC8vIGlmIGFuIG9iamVjdCBpcyBwYXNzZWQgaW5zdGVhZCBvZiBwYXJhbXNcbiAgICBpZiAodHlwZW9mIG5hbWUgPT09ICdvYmplY3QnKSB7XG4gICAgICAgIGNiID0gdXJsIHx8IG5hbWUuY2FsbGJhY2sgfHwgbmFtZS5vbkNvbXBsZXRlO1xuICAgICAgICBvcHRpb25zID0gbmFtZTtcbiAgICAgICAgdXJsID0gbmFtZS51cmw7XG4gICAgICAgIG5hbWUgPSBuYW1lLm5hbWUgfHwgbmFtZS5rZXkgfHwgbmFtZS51cmw7XG4gICAgfVxuXG4gICAgLy8gY2FzZSB3aGVyZSBubyBuYW1lIGlzIHBhc3NlZCBzaGlmdCBhbGwgYXJncyBvdmVyIGJ5IG9uZS5cbiAgICBpZiAodHlwZW9mIHVybCAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgY2IgPSBvcHRpb25zO1xuICAgICAgICBvcHRpb25zID0gdXJsO1xuICAgICAgICB1cmwgPSBuYW1lO1xuICAgIH1cblxuICAgIC8vIG5vdyB0aGF0IHdlIHNoaWZ0ZWQgbWFrZSBzdXJlIHdlIGhhdmUgYSBwcm9wZXIgdXJsLlxuICAgIGlmICh0eXBlb2YgdXJsICE9PSAnc3RyaW5nJykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ05vIHVybCBwYXNzZWQgdG8gYWRkIHJlc291cmNlIHRvIGxvYWRlci4nKTtcbiAgICB9XG5cbiAgICAvLyBvcHRpb25zIGFyZSBvcHRpb25hbCBzbyBwZW9wbGUgbWlnaHQgcGFzcyBhIGZ1bmN0aW9uIGFuZCBubyBvcHRpb25zXG4gICAgaWYgKHR5cGVvZiBvcHRpb25zID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIGNiID0gb3B0aW9ucztcbiAgICAgICAgb3B0aW9ucyA9IG51bGw7XG4gICAgfVxuXG4gICAgLy8gY2hlY2sgaWYgcmVzb3VyY2UgYWxyZWFkeSBleGlzdHMuXG4gICAgaWYgKHRoaXMucmVzb3VyY2VzW25hbWVdKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignUmVzb3VyY2Ugd2l0aCBuYW1lIFwiJyArIG5hbWUgKyAnXCIgYWxyZWFkeSBleGlzdHMuJyk7XG4gICAgfVxuXG4gICAgLy8gYWRkIGJhc2UgdXJsIGlmIHRoaXMgaXNuJ3QgYW4gYWJzb2x1dGUgdXJsXG4gICAgdXJsID0gdGhpcy5faGFuZGxlQmFzZVVybCh1cmwpO1xuXG4gICAgLy8gY3JlYXRlIHRoZSBzdG9yZSB0aGUgcmVzb3VyY2VcbiAgICB0aGlzLnJlc291cmNlc1tuYW1lXSA9IG5ldyBSZXNvdXJjZShuYW1lLCB1cmwsIG9wdGlvbnMpO1xuXG4gICAgaWYgKHR5cGVvZiBjYiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB0aGlzLnJlc291cmNlc1tuYW1lXS5vbmNlKCdhZnRlck1pZGRsZXdhcmUnLCBjYik7XG4gICAgfVxuXG4gICAgdGhpcy5fbnVtVG9Mb2FkKys7XG5cbiAgICAvLyBpZiBhbHJlYWR5IGxvYWRpbmcgYWRkIGl0IHRvIHRoZSB3b3JrZXIgcXVldWVcbiAgICBpZiAodGhpcy5fcXVldWUuc3RhcnRlZCkge1xuICAgICAgICB0aGlzLl9xdWV1ZS5wdXNoKHRoaXMucmVzb3VyY2VzW25hbWVdKTtcbiAgICAgICAgdGhpcy5fcHJvZ3Jlc3NDaHVuayA9ICgxMDAgLSB0aGlzLnByb2dyZXNzKSAvICh0aGlzLl9xdWV1ZS5sZW5ndGgoKSArIHRoaXMuX3F1ZXVlLnJ1bm5pbmcoKSk7XG4gICAgfVxuICAgIC8vIG90aGVyd2lzZSBidWZmZXIgaXQgdG8gYmUgYWRkZWQgdG8gdGhlIHF1ZXVlIGxhdGVyXG4gICAgZWxzZSB7XG4gICAgICAgIHRoaXMuX2J1ZmZlci5wdXNoKHRoaXMucmVzb3VyY2VzW25hbWVdKTtcbiAgICAgICAgdGhpcy5fcHJvZ3Jlc3NDaHVuayA9IDEwMCAvIHRoaXMuX2J1ZmZlci5sZW5ndGg7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG5Mb2FkZXIucHJvdG90eXBlLl9oYW5kbGVCYXNlVXJsID0gZnVuY3Rpb24gKHVybCkge1xuICAgIHZhciBwYXJzZWRVcmwgPSB1cmxQYXJzZXIucGFyc2UodXJsKTtcblxuICAgIC8vIGFic29sdXRlIHVybCwganVzdCB1c2UgaXQgYXMgaXMuXG4gICAgaWYgKHBhcnNlZFVybC5wcm90b2NvbCB8fCBwYXJzZWRVcmwucGF0aG5hbWUuaW5kZXhPZignLy8nKSA9PT0gMCkge1xuICAgICAgICByZXR1cm4gdXJsO1xuICAgIH1cblxuICAgIC8vIGlmIGJhc2VVcmwgZG9lc24ndCBlbmQgaW4gc2xhc2ggYW5kIHVybCBkb2Vzbid0IHN0YXJ0IHdpdGggc2xhc2gsIHRoZW4gYWRkIGEgc2xhc2ggaW5iZXR3ZWVuXG4gICAgaWYgKFxuICAgICAgICB0aGlzLmJhc2VVcmwubGVuZ3RoICYmXG4gICAgICAgIHRoaXMuYmFzZVVybC5sYXN0SW5kZXhPZignLycpICE9PSB0aGlzLmJhc2VVcmwubGVuZ3RoIC0gMSAmJlxuICAgICAgICB1cmwuY2hhckF0KDApICE9PSAnLydcbiAgICApIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYmFzZVVybCArICcvJyArIHVybDtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHJldHVybiB0aGlzLmJhc2VVcmwgKyB1cmw7XG4gICAgfVxufTtcblxuXG4vKipcbiAqIFNldHMgdXAgYSBtaWRkbGV3YXJlIGZ1bmN0aW9uIHRoYXQgd2lsbCBydW4gKmJlZm9yZSogdGhlXG4gKiByZXNvdXJjZSBpcyBsb2FkZWQuXG4gKlxuICogQGFsaWFzIHByZVxuICogQHBhcmFtIG1pZGRsZXdhcmUge2Z1bmN0aW9ufSBUaGUgbWlkZGxld2FyZSBmdW5jdGlvbiB0byByZWdpc3Rlci5cbiAqIEByZXR1cm4ge0xvYWRlcn1cbiAqL1xuTG9hZGVyLnByb3RvdHlwZS5iZWZvcmUgPSBMb2FkZXIucHJvdG90eXBlLnByZSA9IGZ1bmN0aW9uIChmbikge1xuICAgIHRoaXMuX2JlZm9yZU1pZGRsZXdhcmUucHVzaChmbik7XG5cbiAgICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogU2V0cyB1cCBhIG1pZGRsZXdhcmUgZnVuY3Rpb24gdGhhdCB3aWxsIHJ1biAqYWZ0ZXIqIHRoZVxuICogcmVzb3VyY2UgaXMgbG9hZGVkLlxuICpcbiAqIEBhbGlhcyB1c2VcbiAqIEBwYXJhbSBtaWRkbGV3YXJlIHtmdW5jdGlvbn0gVGhlIG1pZGRsZXdhcmUgZnVuY3Rpb24gdG8gcmVnaXN0ZXIuXG4gKiBAcmV0dXJuIHtMb2FkZXJ9XG4gKi9cbkxvYWRlci5wcm90b3R5cGUuYWZ0ZXIgPSBMb2FkZXIucHJvdG90eXBlLnVzZSA9IGZ1bmN0aW9uIChmbikge1xuICAgIHRoaXMuX2FmdGVyTWlkZGxld2FyZS5wdXNoKGZuKTtcblxuICAgIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBSZXNldHMgdGhlIHF1ZXVlIG9mIHRoZSBsb2FkZXIgdG8gcHJlcGFyZSBmb3IgYSBuZXcgbG9hZC5cbiAqXG4gKiBAcmV0dXJuIHtMb2FkZXJ9XG4gKi9cbkxvYWRlci5wcm90b3R5cGUucmVzZXQgPSBmdW5jdGlvbiAoKSB7XG4gICAgLy8gdGhpcy5iYXNlVXJsID0gYmFzZVVybCB8fCAnJztcblxuICAgIHRoaXMucHJvZ3Jlc3MgPSAwO1xuXG4gICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XG5cbiAgICB0aGlzLl9wcm9ncmVzc0NodW5rID0gMDtcblxuICAgIC8vIHRoaXMuX2JlZm9yZU1pZGRsZXdhcmUubGVuZ3RoID0gMDtcbiAgICAvLyB0aGlzLl9hZnRlck1pZGRsZXdhcmUubGVuZ3RoID0gMDtcblxuICAgIHRoaXMuX2J1ZmZlci5sZW5ndGggPSAwO1xuXG4gICAgdGhpcy5fbnVtVG9Mb2FkID0gMDtcblxuICAgIHRoaXMuX3F1ZXVlLmtpbGwoKTtcbiAgICB0aGlzLl9xdWV1ZS5zdGFydGVkID0gZmFsc2U7XG5cbiAgICB0aGlzLnJlc291cmNlcyA9IHt9O1xufTtcblxuLyoqXG4gKiBTdGFydHMgbG9hZGluZyB0aGUgcXVldWVkIHJlc291cmNlcy5cbiAqXG4gKiBAZmlyZXMgc3RhcnRcbiAqIEBwYXJhbSBbY2FsbGJhY2tdIHtmdW5jdGlvbn0gT3B0aW9uYWwgY2FsbGJhY2sgdGhhdCB3aWxsIGJlIGJvdW5kIHRvIHRoZSBgY29tcGxldGVgIGV2ZW50LlxuICogQHJldHVybiB7TG9hZGVyfVxuICovXG5Mb2FkZXIucHJvdG90eXBlLmxvYWQgPSBmdW5jdGlvbiAoY2IpIHtcbiAgICAvLyByZWdpc3RlciBjb21wbGV0ZSBjYWxsYmFjayBpZiB0aGV5IHBhc3Mgb25lXG4gICAgaWYgKHR5cGVvZiBjYiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB0aGlzLm9uY2UoJ2NvbXBsZXRlJywgY2IpO1xuICAgIH1cblxuICAgIC8vIGlmIHRoZSBxdWV1ZSBoYXMgYWxyZWFkeSBzdGFydGVkIHdlIGFyZSBkb25lIGhlcmVcbiAgICBpZiAodGhpcy5fcXVldWUuc3RhcnRlZCkge1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICAvLyBub3RpZnkgb2Ygc3RhcnRcbiAgICB0aGlzLmVtaXQoJ3N0YXJ0JywgdGhpcyk7XG5cbiAgICAvLyBzdGFydCB0aGUgaW50ZXJuYWwgcXVldWVcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuX2J1ZmZlci5sZW5ndGg7ICsraSkge1xuICAgICAgICB0aGlzLl9xdWV1ZS5wdXNoKHRoaXMuX2J1ZmZlcltpXSk7XG4gICAgfVxuXG4gICAgLy8gZW1wdHkgdGhlIGJ1ZmZlclxuICAgIHRoaXMuX2J1ZmZlci5sZW5ndGggPSAwO1xuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIExvYWRzIGEgc2luZ2xlIHJlc291cmNlLlxuICpcbiAqIEBmaXJlcyBwcm9ncmVzc1xuICogQHByaXZhdGVcbiAqL1xuTG9hZGVyLnByb3RvdHlwZS5fbG9hZFJlc291cmNlID0gZnVuY3Rpb24gKHJlc291cmNlLCBkZXF1ZXVlKSB7XG4gICAgdmFyIHNlbGYgPSB0aGlzO1xuXG4gICAgcmVzb3VyY2UuX2RlcXVldWUgPSBkZXF1ZXVlO1xuXG4gICAgdGhpcy5fcnVuTWlkZGxld2FyZShyZXNvdXJjZSwgdGhpcy5fYmVmb3JlTWlkZGxld2FyZSwgZnVuY3Rpb24gKCkge1xuICAgICAgICAvLyByZXNvdXJjZS5vbigncHJvZ3Jlc3MnLCBzZWxmLmVtaXQuYmluZChzZWxmLCAncHJvZ3Jlc3MnKSk7XG5cbiAgICAgICAgcmVzb3VyY2UubG9hZChzZWxmLl9ib3VuZE9uTG9hZCk7XG4gICAgfSk7XG59O1xuXG4vKipcbiAqIENhbGxlZCBvbmNlIGVhY2ggcmVzb3VyY2UgaGFzIGxvYWRlZC5cbiAqXG4gKiBAZmlyZXMgY29tcGxldGVcbiAqIEBwcml2YXRlXG4gKi9cbkxvYWRlci5wcm90b3R5cGUuX29uQ29tcGxldGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgdGhpcy5lbWl0KCdjb21wbGV0ZScsIHRoaXMsIHRoaXMucmVzb3VyY2VzKTtcbn07XG5cbi8qKlxuICogQ2FsbGVkIGVhY2ggdGltZSBhIHJlc291cmNlcyBpcyBsb2FkZWQuXG4gKlxuICogQGZpcmVzIHByb2dyZXNzXG4gKiBAZmlyZXMgZXJyb3JcbiAqIEBmaXJlcyBsb2FkXG4gKiBAcHJpdmF0ZVxuICovXG5Mb2FkZXIucHJvdG90eXBlLl9vbkxvYWQgPSBmdW5jdGlvbiAocmVzb3VyY2UpIHtcbiAgICB0aGlzLnByb2dyZXNzICs9IHRoaXMuX3Byb2dyZXNzQ2h1bms7XG5cbiAgICB0aGlzLmVtaXQoJ3Byb2dyZXNzJywgdGhpcywgcmVzb3VyY2UpO1xuXG4gICAgLy8gcnVuIG1pZGRsZXdhcmUsIHRoaXMgKm11c3QqIGhhcHBlbiBiZWZvcmUgZGVxdWV1ZSBzbyBzdWItYXNzZXRzIGdldCBhZGRlZCBwcm9wZXJseVxuICAgIHRoaXMuX3J1bk1pZGRsZXdhcmUocmVzb3VyY2UsIHRoaXMuX2FmdGVyTWlkZGxld2FyZSwgZnVuY3Rpb24gKCkge1xuICAgICAgICByZXNvdXJjZS5lbWl0KCdhZnRlck1pZGRsZXdhcmUnLCByZXNvdXJjZSk7XG5cbiAgICAgICAgdGhpcy5fbnVtVG9Mb2FkLS07XG5cbiAgICAgICAgLy8gZG8gY29tcGxldGlvbiBjaGVja1xuICAgICAgICBpZiAodGhpcy5fbnVtVG9Mb2FkID09PSAwKSB7XG4gICAgICAgICAgICB0aGlzLnByb2dyZXNzID0gMTAwO1xuICAgICAgICAgICAgdGhpcy5fb25Db21wbGV0ZSgpO1xuICAgICAgICB9XG4gICAgICAgIFxuICAgICAgICBpZiAocmVzb3VyY2UuZXJyb3IpIHtcbiAgICAgICAgICAgIHRoaXMuZW1pdCgnZXJyb3InLCByZXNvdXJjZS5lcnJvciwgdGhpcywgcmVzb3VyY2UpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5lbWl0KCdsb2FkJywgdGhpcywgcmVzb3VyY2UpO1xuICAgICAgICB9XG4gICAgfSk7XG4gICAgXG5cblxuICAgIC8vIHJlbW92ZSB0aGlzIHJlc291cmNlIGZyb20gdGhlIGFzeW5jIHF1ZXVlXG4gICAgcmVzb3VyY2UuX2RlcXVldWUoKTtcbn07XG5cbi8qKlxuICogUnVuIG1pZGRsZXdhcmUgZnVuY3Rpb25zIG9uIGEgcmVzb3VyY2UuXG4gKlxuICogQHByaXZhdGVcbiAqL1xuTG9hZGVyLnByb3RvdHlwZS5fcnVuTWlkZGxld2FyZSA9IGZ1bmN0aW9uIChyZXNvdXJjZSwgZm5zLCBjYikge1xuICAgIHZhciBzZWxmID0gdGhpcztcblxuICAgIGFzeW5jLmVhY2hTZXJpZXMoZm5zLCBmdW5jdGlvbiAoZm4sIG5leHQpIHtcbiAgICAgICAgZm4uY2FsbChzZWxmLCByZXNvdXJjZSwgbmV4dCk7XG4gICAgfSwgY2IuYmluZCh0aGlzLCByZXNvdXJjZSkpO1xufTtcblxuTG9hZGVyLkxPQURfVFlQRSA9IFJlc291cmNlLkxPQURfVFlQRTtcbkxvYWRlci5YSFJfUkVBRFlfU1RBVEUgPSBSZXNvdXJjZS5YSFJfUkVBRFlfU1RBVEU7XG5Mb2FkZXIuWEhSX1JFU1BPTlNFX1RZUEUgPSBSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRTtcbiIsInZhciBFdmVudEVtaXR0ZXIgPSByZXF1aXJlKCdldmVudGVtaXR0ZXIzJyksXG4gICAgX3VybCA9IHJlcXVpcmUoJ3VybCcpLFxuICAgIC8vIHRlc3RzIGlzIENPUlMgaXMgc3VwcG9ydGVkIGluIFhIUiwgaWYgbm90IHdlIG5lZWQgdG8gdXNlIFhEUlxuICAgIHVzZVhkciA9ICEhKHdpbmRvdy5YRG9tYWluUmVxdWVzdCAmJiAhKCd3aXRoQ3JlZGVudGlhbHMnIGluIChuZXcgWE1MSHR0cFJlcXVlc3QoKSkpKSxcbiAgICB0ZW1wQW5jaG9yID0gbnVsbDtcblxuLyoqXG4gKiBNYW5hZ2VzIHRoZSBzdGF0ZSBhbmQgbG9hZGluZyBvZiBhIHNpbmdsZSByZXNvdXJjZSByZXByZXNlbnRlZCBieVxuICogYSBzaW5nbGUgVVJMLlxuICpcbiAqIEBjbGFzc1xuICogQHBhcmFtIG5hbWUge3N0cmluZ30gVGhlIG5hbWUgb2YgdGhlIHJlc291cmNlIHRvIGxvYWQuXG4gKiBAcGFyYW0gdXJsIHtzdHJpbmd8c3RyaW5nW119IFRoZSB1cmwgZm9yIHRoaXMgcmVzb3VyY2UsIGZvciBhdWRpby92aWRlbyBsb2FkcyB5b3UgY2FuIHBhc3MgYW4gYXJyYXkgb2Ygc291cmNlcy5cbiAqIEBwYXJhbSBbb3B0aW9uc10ge29iamVjdH0gVGhlIG9wdGlvbnMgZm9yIHRoZSBsb2FkLlxuICogQHBhcmFtIFtvcHRpb25zLmNyb3NzT3JpZ2luXSB7c3RyaW5nfGJvb2xlYW59IElzIHRoaXMgcmVxdWVzdCBjcm9zcy1vcmlnaW4/IERlZmF1bHQgaXMgdG8gZGV0ZXJtaW5lIGF1dG9tYXRpY2FsbHkuXG4gKiBAcGFyYW0gW29wdGlvbnMubG9hZFR5cGU9UmVzb3VyY2UuTE9BRF9UWVBFLlhIUl0ge1Jlc291cmNlLkxPQURfVFlQRX0gSG93IHNob3VsZCB0aGlzIHJlc291cmNlIGJlIGxvYWRlZD9cbiAqIEBwYXJhbSBbb3B0aW9ucy54aHJUeXBlPVJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkRFRkFVTFRdIHtSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRX0gSG93IHNob3VsZCB0aGUgZGF0YSBiZWluZ1xuICogICAgICBsb2FkZWQgYmUgaW50ZXJwcmV0ZWQgd2hlbiB1c2luZyBYSFI/XG4gKiBAcGFyYW0gW29wdGlvbnMubWV0YWRhdGFdIHtvYmplY3R9IEV4dHJhIGluZm8gZm9yIG1pZGRsZXdhcmUuXG4gKi9cbmZ1bmN0aW9uIFJlc291cmNlKG5hbWUsIHVybCwgb3B0aW9ucykge1xuICAgIEV2ZW50RW1pdHRlci5jYWxsKHRoaXMpO1xuXG4gICAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG5cbiAgICBpZiAodHlwZW9mIG5hbWUgIT09ICdzdHJpbmcnIHx8IHR5cGVvZiB1cmwgIT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignQm90aCBuYW1lIGFuZCB1cmwgYXJlIHJlcXVpcmVkIGZvciBjb25zdHJ1Y3RpbmcgYSByZXNvdXJjZS4nKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGUgbmFtZSBvZiB0aGlzIHJlc291cmNlLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7c3RyaW5nfVxuICAgICAqIEByZWFkb25seVxuICAgICAqL1xuICAgIHRoaXMubmFtZSA9IG5hbWU7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgdXJsIHVzZWQgdG8gbG9hZCB0aGlzIHJlc291cmNlLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7c3RyaW5nfVxuICAgICAqIEByZWFkb25seVxuICAgICAqL1xuICAgIHRoaXMudXJsID0gdXJsO1xuXG4gICAgLyoqXG4gICAgICogU3RvcmVzIHdoZXRoZXIgb3Igbm90IHRoaXMgdXJsIGlzIGEgZGF0YSB1cmwuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqIEByZWFkb25seVxuICAgICAqL1xuICAgIHRoaXMuaXNEYXRhVXJsID0gdGhpcy51cmwuaW5kZXhPZignZGF0YTonKSA9PT0gMDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBkYXRhIHRoYXQgd2FzIGxvYWRlZCBieSB0aGUgcmVzb3VyY2UuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHthbnl9XG4gICAgICovXG4gICAgdGhpcy5kYXRhID0gbnVsbDtcblxuICAgIC8qKlxuICAgICAqIElzIHRoaXMgcmVxdWVzdCBjcm9zcy1vcmlnaW4/IElmIHVuc2V0LCBkZXRlcm1pbmVkIGF1dG9tYXRpY2FsbHkuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtzdHJpbmd9XG4gICAgICovXG4gICAgdGhpcy5jcm9zc09yaWdpbiA9IG9wdGlvbnMuY3Jvc3NPcmlnaW4gPT09IHRydWUgPyAnYW5vbnltb3VzJyA6IG9wdGlvbnMuY3Jvc3NPcmlnaW47XG5cbiAgICAvKipcbiAgICAgKiBUaGUgbWV0aG9kIG9mIGxvYWRpbmcgdG8gdXNlIGZvciB0aGlzIHJlc291cmNlLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UmVzb3VyY2UuTE9BRF9UWVBFfVxuICAgICAqL1xuICAgIHRoaXMubG9hZFR5cGUgPSBvcHRpb25zLmxvYWRUeXBlIHx8IHRoaXMuX2RldGVybWluZUxvYWRUeXBlKCk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgdHlwZSB1c2VkIHRvIGxvYWQgdGhlIHJlc291cmNlIHZpYSBYSFIuIElmIHVuc2V0LCBkZXRlcm1pbmVkIGF1dG9tYXRpY2FsbHkuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtzdHJpbmd9XG4gICAgICovXG4gICAgdGhpcy54aHJUeXBlID0gb3B0aW9ucy54aHJUeXBlO1xuXG4gICAgLyoqXG4gICAgICogRXh0cmEgaW5mbyBmb3IgbWlkZGxld2FyZVxuICAgICAqXG4gICAgICogQG1lbWJlciB7b2JqZWN0fVxuICAgICAqL1xuICAgIHRoaXMubWV0YWRhdGEgPSBvcHRpb25zLm1ldGFkYXRhIHx8IHt9O1xuXG4gICAgLyoqXG4gICAgICogVGhlIGVycm9yIHRoYXQgb2NjdXJyZWQgd2hpbGUgbG9hZGluZyAoaWYgYW55KS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge0Vycm9yfVxuICAgICAqIEByZWFkb25seVxuICAgICAqL1xuICAgIHRoaXMuZXJyb3IgPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogVGhlIFhIUiBvYmplY3QgdGhhdCB3YXMgdXNlZCB0byBsb2FkIHRoaXMgcmVzb3VyY2UuIFRoaXMgaXMgb25seSBzZXRcbiAgICAgKiB3aGVuIGBsb2FkVHlwZWAgaXMgYFJlc291cmNlLkxPQURfVFlQRS5YSFJgLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7WE1MSHR0cFJlcXVlc3R9XG4gICAgICovXG4gICAgdGhpcy54aHIgPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogRGVzY3JpYmVzIGlmIHRoaXMgcmVzb3VyY2Ugd2FzIGxvYWRlZCBhcyBqc29uLiBPbmx5IHZhbGlkIGFmdGVyIHRoZSByZXNvdXJjZVxuICAgICAqIGhhcyBjb21wbGV0ZWx5IGxvYWRlZC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICovXG4gICAgdGhpcy5pc0pzb24gPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIERlc2NyaWJlcyBpZiB0aGlzIHJlc291cmNlIHdhcyBsb2FkZWQgYXMgeG1sLiBPbmx5IHZhbGlkIGFmdGVyIHRoZSByZXNvdXJjZVxuICAgICAqIGhhcyBjb21wbGV0ZWx5IGxvYWRlZC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICovXG4gICAgdGhpcy5pc1htbCA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogRGVzY3JpYmVzIGlmIHRoaXMgcmVzb3VyY2Ugd2FzIGxvYWRlZCBhcyBhbiBpbWFnZSB0YWcuIE9ubHkgdmFsaWQgYWZ0ZXIgdGhlIHJlc291cmNlXG4gICAgICogaGFzIGNvbXBsZXRlbHkgbG9hZGVkLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKi9cbiAgICB0aGlzLmlzSW1hZ2UgPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIERlc2NyaWJlcyBpZiB0aGlzIHJlc291cmNlIHdhcyBsb2FkZWQgYXMgYW4gYXVkaW8gdGFnLiBPbmx5IHZhbGlkIGFmdGVyIHRoZSByZXNvdXJjZVxuICAgICAqIGhhcyBjb21wbGV0ZWx5IGxvYWRlZC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICovXG4gICAgdGhpcy5pc0F1ZGlvID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBEZXNjcmliZXMgaWYgdGhpcyByZXNvdXJjZSB3YXMgbG9hZGVkIGFzIGEgdmlkZW8gdGFnLiBPbmx5IHZhbGlkIGFmdGVyIHRoZSByZXNvdXJjZVxuICAgICAqIGhhcyBjb21wbGV0ZWx5IGxvYWRlZC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICovXG4gICAgdGhpcy5pc1ZpZGVvID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYGRlcXVldWVgIG1ldGhvZCB0aGF0IHdpbGwgYmUgdXNlZCBhIHN0b3JhZ2UgcGxhY2UgZm9yIHRoZSBhc3luYyBxdWV1ZSBkZXF1ZXVlIG1ldGhvZFxuICAgICAqIHVzZWQgcHJpdmF0ZWx5IGJ5IHRoZSBsb2FkZXIuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtmdW5jdGlvbn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX2RlcXVldWUgPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGBjb21wbGV0ZWAgZnVuY3Rpb24gYm91bmQgdG8gdGhpcyByZXNvdXJjZSdzIGNvbnRleHQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtmdW5jdGlvbn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX2JvdW5kQ29tcGxldGUgPSB0aGlzLmNvbXBsZXRlLmJpbmQodGhpcyk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYF9vbkVycm9yYCBmdW5jdGlvbiBib3VuZCB0byB0aGlzIHJlc291cmNlJ3MgY29udGV4dC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Z1bmN0aW9ufVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fYm91bmRPbkVycm9yID0gdGhpcy5fb25FcnJvci5iaW5kKHRoaXMpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGBfb25Qcm9ncmVzc2AgZnVuY3Rpb24gYm91bmQgdG8gdGhpcyByZXNvdXJjZSdzIGNvbnRleHQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtmdW5jdGlvbn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX2JvdW5kT25Qcm9ncmVzcyA9IHRoaXMuX29uUHJvZ3Jlc3MuYmluZCh0aGlzKTtcblxuICAgIC8vIHhociBjYWxsYmFja3NcbiAgICB0aGlzLl9ib3VuZFhock9uRXJyb3IgPSB0aGlzLl94aHJPbkVycm9yLmJpbmQodGhpcyk7XG4gICAgdGhpcy5fYm91bmRYaHJPbkFib3J0ID0gdGhpcy5feGhyT25BYm9ydC5iaW5kKHRoaXMpO1xuICAgIHRoaXMuX2JvdW5kWGhyT25Mb2FkID0gdGhpcy5feGhyT25Mb2FkLmJpbmQodGhpcyk7XG4gICAgdGhpcy5fYm91bmRYZHJPblRpbWVvdXQgPSB0aGlzLl94ZHJPblRpbWVvdXQuYmluZCh0aGlzKTtcblxuICAgIC8qKlxuICAgICAqIEVtaXR0ZWQgd2hlbiB0aGUgcmVzb3VyY2UgYmVpbmdzIHRvIGxvYWQuXG4gICAgICpcbiAgICAgKiBAZXZlbnQgc3RhcnRcbiAgICAgKiBAbWVtYmVyb2YgUmVzb3VyY2UjXG4gICAgICovXG5cbiAgICAvKipcbiAgICAgKiBFbWl0dGVkIGVhY2ggdGltZSBwcm9ncmVzcyBvZiB0aGlzIHJlc291cmNlIGxvYWQgdXBkYXRlcy5cbiAgICAgKiBOb3QgYWxsIHJlc291cmNlcyB0eXBlcyBhbmQgbG9hZGVyIHN5c3RlbXMgY2FuIHN1cHBvcnQgdGhpcyBldmVudFxuICAgICAqIHNvIHNvbWV0aW1lcyBpdCBtYXkgbm90IGJlIGF2YWlsYWJsZS4gSWYgdGhlIHJlc291cmNlXG4gICAgICogaXMgYmVpbmcgbG9hZGVkIG9uIGEgbW9kZXJuIGJyb3dzZXIsIHVzaW5nIFhIUiwgYW5kIHRoZSByZW1vdGUgc2VydmVyXG4gICAgICogcHJvcGVybHkgc2V0cyBDb250ZW50LUxlbmd0aCBoZWFkZXJzLCB0aGVuIHRoaXMgd2lsbCBiZSBhdmFpbGFibGUuXG4gICAgICpcbiAgICAgKiBAZXZlbnQgcHJvZ3Jlc3NcbiAgICAgKiBAbWVtYmVyb2YgUmVzb3VyY2UjXG4gICAgICovXG5cbiAgICAvKipcbiAgICAgKiBFbWl0dGVkIG9uY2UgdGhpcyByZXNvdXJjZSBoYXMgbG9hZGVkLCBpZiB0aGVyZSB3YXMgYW4gZXJyb3IgaXQgd2lsbFxuICAgICAqIGJlIGluIHRoZSBgZXJyb3JgIHByb3BlcnR5LlxuICAgICAqXG4gICAgICogQGV2ZW50IGNvbXBsZXRlXG4gICAgICogQG1lbWJlcm9mIFJlc291cmNlI1xuICAgICAqL1xufVxuXG5SZXNvdXJjZS5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKEV2ZW50RW1pdHRlci5wcm90b3R5cGUpO1xuUmVzb3VyY2UucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gUmVzb3VyY2U7XG5tb2R1bGUuZXhwb3J0cyA9IFJlc291cmNlO1xuXG4vKipcbiAqIE1hcmtzIHRoZSByZXNvdXJjZSBhcyBjb21wbGV0ZS5cbiAqXG4gKiBAZmlyZXMgY29tcGxldGVcbiAqL1xuUmVzb3VyY2UucHJvdG90eXBlLmNvbXBsZXRlID0gZnVuY3Rpb24gKCkge1xuICAgIC8vIFRPRE86IENsZWFuIHRoaXMgdXAgaW4gYSB3cmFwcGVyIG9yIHNvbWV0aGluZy4uLmdyb3NzLi4uLlxuICAgIGlmICh0aGlzLmRhdGEgJiYgdGhpcy5kYXRhLnJlbW92ZUV2ZW50TGlzdGVuZXIpIHtcbiAgICAgICAgdGhpcy5kYXRhLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2Vycm9yJywgdGhpcy5fYm91bmRPbkVycm9yKTtcbiAgICAgICAgdGhpcy5kYXRhLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2xvYWQnLCB0aGlzLl9ib3VuZENvbXBsZXRlKTtcbiAgICAgICAgdGhpcy5kYXRhLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3Byb2dyZXNzJywgdGhpcy5fYm91bmRPblByb2dyZXNzKTtcbiAgICAgICAgdGhpcy5kYXRhLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2NhbnBsYXl0aHJvdWdoJywgdGhpcy5fYm91bmRDb21wbGV0ZSk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMueGhyKSB7XG4gICAgICAgIGlmICh0aGlzLnhoci5yZW1vdmVFdmVudExpc3RlbmVyKSB7XG4gICAgICAgICAgICB0aGlzLnhoci5yZW1vdmVFdmVudExpc3RlbmVyKCdlcnJvcicsIHRoaXMuX2JvdW5kWGhyT25FcnJvcik7XG4gICAgICAgICAgICB0aGlzLnhoci5yZW1vdmVFdmVudExpc3RlbmVyKCdhYm9ydCcsIHRoaXMuX2JvdW5kWGhyT25BYm9ydCk7XG4gICAgICAgICAgICB0aGlzLnhoci5yZW1vdmVFdmVudExpc3RlbmVyKCdwcm9ncmVzcycsIHRoaXMuX2JvdW5kT25Qcm9ncmVzcyk7XG4gICAgICAgICAgICB0aGlzLnhoci5yZW1vdmVFdmVudExpc3RlbmVyKCdsb2FkJywgdGhpcy5fYm91bmRYaHJPbkxvYWQpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy54aHIub25lcnJvciA9IG51bGw7XG4gICAgICAgICAgICB0aGlzLnhoci5vbnRpbWVvdXQgPSBudWxsO1xuICAgICAgICAgICAgdGhpcy54aHIub25wcm9ncmVzcyA9IG51bGw7XG4gICAgICAgICAgICB0aGlzLnhoci5vbmxvYWQgPSBudWxsO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5lbWl0KCdjb21wbGV0ZScsIHRoaXMpO1xufTtcblxuLyoqXG4gKiBLaWNrcyBvZmYgbG9hZGluZyBvZiB0aGlzIHJlc291cmNlLlxuICpcbiAqIEBmaXJlcyBzdGFydFxuICogQHBhcmFtIFtjYWxsYmFja10ge2Z1bmN0aW9ufSBPcHRpb25hbCBjYWxsYmFjayB0byBjYWxsIG9uY2UgdGhlIHJlc291cmNlIGlzIGxvYWRlZC5cbiAqL1xuUmVzb3VyY2UucHJvdG90eXBlLmxvYWQgPSBmdW5jdGlvbiAoY2IpIHtcbiAgICB0aGlzLmVtaXQoJ3N0YXJ0JywgdGhpcyk7XG5cbiAgICAvLyBpZiBhIGNhbGxiYWNrIGlzIHNldCwgbGlzdGVuIGZvciBjb21wbGV0ZSBldmVudFxuICAgIGlmIChjYikge1xuICAgICAgICB0aGlzLm9uY2UoJ2NvbXBsZXRlJywgY2IpO1xuICAgIH1cblxuICAgIC8vIGlmIHVuc2V0LCBkZXRlcm1pbmUgdGhlIHZhbHVlXG4gICAgaWYgKHRoaXMuY3Jvc3NPcmlnaW4gPT09IGZhbHNlIHx8IHR5cGVvZiB0aGlzLmNyb3NzT3JpZ2luICE9PSAnc3RyaW5nJykge1xuICAgICAgICB0aGlzLmNyb3NzT3JpZ2luID0gdGhpcy5fZGV0ZXJtaW5lQ3Jvc3NPcmlnaW4odGhpcy51cmwpO1xuICAgIH1cblxuICAgIHN3aXRjaCh0aGlzLmxvYWRUeXBlKSB7XG4gICAgICAgIGNhc2UgUmVzb3VyY2UuTE9BRF9UWVBFLklNQUdFOlxuICAgICAgICAgICAgdGhpcy5fbG9hZEltYWdlKCk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIFJlc291cmNlLkxPQURfVFlQRS5BVURJTzpcbiAgICAgICAgICAgIHRoaXMuX2xvYWRFbGVtZW50KCdhdWRpbycpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSBSZXNvdXJjZS5MT0FEX1RZUEUuVklERU86XG4gICAgICAgICAgICB0aGlzLl9sb2FkRWxlbWVudCgndmlkZW8nKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgUmVzb3VyY2UuTE9BRF9UWVBFLlhIUjpcbiAgICAgICAgICAgIC8qIGZhbGxzIHRocm91Z2ggKi9cbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIGlmICh1c2VYZHIgJiYgdGhpcy5jcm9zc09yaWdpbikge1xuICAgICAgICAgICAgICAgIHRoaXMuX2xvYWRYZHIoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuX2xvYWRYaHIoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGJyZWFrO1xuICAgIH1cbn07XG5cbi8qKlxuICogTG9hZHMgdGhpcyByZXNvdXJjZXMgdXNpbmcgYW4gSW1hZ2Ugb2JqZWN0LlxuICpcbiAqIEBwcml2YXRlXG4gKi9cblJlc291cmNlLnByb3RvdHlwZS5fbG9hZEltYWdlID0gZnVuY3Rpb24gKCkge1xuICAgIHRoaXMuZGF0YSA9IG5ldyBJbWFnZSgpO1xuXG4gICAgaWYgKHRoaXMuY3Jvc3NPcmlnaW4pIHtcbiAgICAgICAgdGhpcy5kYXRhLmNyb3NzT3JpZ2luID0gdGhpcy5jcm9zc09yaWdpbjtcbiAgICB9XG5cbiAgICB0aGlzLmRhdGEuc3JjID0gdGhpcy51cmw7XG5cbiAgICB0aGlzLmlzSW1hZ2UgPSB0cnVlO1xuXG4gICAgdGhpcy5kYXRhLmFkZEV2ZW50TGlzdGVuZXIoJ2Vycm9yJywgdGhpcy5fYm91bmRPbkVycm9yLCBmYWxzZSk7XG4gICAgdGhpcy5kYXRhLmFkZEV2ZW50TGlzdGVuZXIoJ2xvYWQnLCB0aGlzLl9ib3VuZENvbXBsZXRlLCBmYWxzZSk7XG4gICAgdGhpcy5kYXRhLmFkZEV2ZW50TGlzdGVuZXIoJ3Byb2dyZXNzJywgdGhpcy5fYm91bmRPblByb2dyZXNzLCBmYWxzZSk7XG59O1xuXG4vKipcbiAqIExvYWRzIHRoaXMgcmVzb3VyY2VzIHVzaW5nIGFuIEhUTUxBdWRpb0VsZW1lbnQgb3IgSFRNTFZpZGVvRWxlbWVudC5cbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5SZXNvdXJjZS5wcm90b3R5cGUuX2xvYWRFbGVtZW50ID0gZnVuY3Rpb24gKHR5cGUpIHtcbiAgICBpZiAodHlwZSA9PT0gJ2F1ZGlvJyAmJiB0eXBlb2YgQXVkaW8gIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIHRoaXMuZGF0YSA9IG5ldyBBdWRpbygpO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgdGhpcy5kYXRhID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCh0eXBlKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5kYXRhID09PSBudWxsKSB7XG4gICAgICAgIHRoaXMuZXJyb3IgPSBuZXcgRXJyb3IoJ1Vuc3VwcG9ydGVkIGVsZW1lbnQgJyArIHR5cGUpO1xuICAgICAgICB0aGlzLmNvbXBsZXRlKCk7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBzdXBwb3J0IGZvciBDb2Nvb25KUyBDYW52YXMrIHJ1bnRpbWUsIGxhY2tzIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NvdXJjZScpXG4gICAgaWYgKG5hdmlnYXRvci5pc0NvY29vbkpTKSB7XG4gICAgICAgIHRoaXMuZGF0YS5zcmMgPSBBcnJheS5pc0FycmF5KHRoaXMudXJsKSA/IHRoaXMudXJsWzBdIDogdGhpcy51cmw7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSh0aGlzLnVybCkpIHtcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy51cmwubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmRhdGEuYXBwZW5kQ2hpbGQodGhpcy5fY3JlYXRlU291cmNlKHR5cGUsIHRoaXMudXJsW2ldKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmRhdGEuYXBwZW5kQ2hpbGQodGhpcy5fY3JlYXRlU291cmNlKHR5cGUsIHRoaXMudXJsKSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzWydpcycgKyB0eXBlWzBdLnRvVXBwZXJDYXNlKCkgKyB0eXBlLnN1YnN0cmluZygxKV0gPSB0cnVlO1xuXG4gICAgdGhpcy5kYXRhLmFkZEV2ZW50TGlzdGVuZXIoJ2Vycm9yJywgdGhpcy5fYm91bmRPbkVycm9yLCBmYWxzZSk7XG4gICAgdGhpcy5kYXRhLmFkZEV2ZW50TGlzdGVuZXIoJ2xvYWQnLCB0aGlzLl9ib3VuZENvbXBsZXRlLCBmYWxzZSk7XG4gICAgdGhpcy5kYXRhLmFkZEV2ZW50TGlzdGVuZXIoJ3Byb2dyZXNzJywgdGhpcy5fYm91bmRPblByb2dyZXNzLCBmYWxzZSk7XG4gICAgdGhpcy5kYXRhLmFkZEV2ZW50TGlzdGVuZXIoJ2NhbnBsYXl0aHJvdWdoJywgdGhpcy5fYm91bmRDb21wbGV0ZSwgZmFsc2UpO1xuXG4gICAgdGhpcy5kYXRhLmxvYWQoKTtcbn07XG5cbi8qKlxuICogTG9hZHMgdGhpcyByZXNvdXJjZXMgdXNpbmcgYW4gWE1MSHR0cFJlcXVlc3QuXG4gKlxuICogQHByaXZhdGVcbiAqL1xuUmVzb3VyY2UucHJvdG90eXBlLl9sb2FkWGhyID0gZnVuY3Rpb24gKCkge1xuICAgIC8vIGlmIHVuc2V0LCBkZXRlcm1pbmUgdGhlIHZhbHVlXG4gICAgaWYgKHR5cGVvZiB0aGlzLnhoclR5cGUgIT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHRoaXMueGhyVHlwZSA9IHRoaXMuX2RldGVybWluZVhoclR5cGUoKTtcbiAgICB9XG5cbiAgICB2YXIgeGhyID0gdGhpcy54aHIgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTtcblxuICAgIC8vIHNldCB0aGUgcmVxdWVzdCB0eXBlIGFuZCB1cmxcbiAgICB4aHIub3BlbignR0VUJywgdGhpcy51cmwsIHRydWUpO1xuXG4gICAgLy8gbG9hZCBqc29uIGFzIHRleHQgYW5kIHBhcnNlIGl0IG91cnNlbHZlcy4gV2UgZG8gdGhpcyBiZWNhdXNlIHNvbWUgYnJvd3NlcnNcbiAgICAvLyAqY291Z2gqIHNhZmFyaSAqY291Z2gqIGNhbid0IGRlYWwgd2l0aCBpdC5cbiAgICBpZiAodGhpcy54aHJUeXBlID09PSBSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRS5KU09OIHx8IHRoaXMueGhyVHlwZSA9PT0gUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuRE9DVU1FTlQpIHtcbiAgICAgICAgeGhyLnJlc3BvbnNlVHlwZSA9IFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLlRFWFQ7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICB4aHIucmVzcG9uc2VUeXBlID0gdGhpcy54aHJUeXBlO1xuICAgIH1cblxuICAgIHhoci5hZGRFdmVudExpc3RlbmVyKCdlcnJvcicsIHRoaXMuX2JvdW5kWGhyT25FcnJvciwgZmFsc2UpO1xuICAgIHhoci5hZGRFdmVudExpc3RlbmVyKCdhYm9ydCcsIHRoaXMuX2JvdW5kWGhyT25BYm9ydCwgZmFsc2UpO1xuICAgIHhoci5hZGRFdmVudExpc3RlbmVyKCdwcm9ncmVzcycsIHRoaXMuX2JvdW5kT25Qcm9ncmVzcywgZmFsc2UpO1xuICAgIHhoci5hZGRFdmVudExpc3RlbmVyKCdsb2FkJywgdGhpcy5fYm91bmRYaHJPbkxvYWQsIGZhbHNlKTtcblxuICAgIHhoci5zZW5kKCk7XG59O1xuXG4vKipcbiAqIExvYWRzIHRoaXMgcmVzb3VyY2VzIHVzaW5nIGFuIFhEb21haW5SZXF1ZXN0LiBUaGlzIGlzIGhlcmUgYmVjYXVzZSB3ZSBuZWVkIHRvIHN1cHBvcnQgSUU5IChncm9zcykuXG4gKlxuICogQHByaXZhdGVcbiAqL1xuUmVzb3VyY2UucHJvdG90eXBlLl9sb2FkWGRyID0gZnVuY3Rpb24gKCkge1xuICAgIC8vIGlmIHVuc2V0LCBkZXRlcm1pbmUgdGhlIHZhbHVlXG4gICAgaWYgKHR5cGVvZiB0aGlzLnhoclR5cGUgIT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHRoaXMueGhyVHlwZSA9IHRoaXMuX2RldGVybWluZVhoclR5cGUoKTtcbiAgICB9XG5cbiAgICB2YXIgeGRyID0gdGhpcy54aHIgPSBuZXcgWERvbWFpblJlcXVlc3QoKTtcblxuICAgIC8vIFhEb21haW5SZXF1ZXN0IGhhcyBhIGZldyBxdWlya3MuIE9jY2FzaW9uYWxseSBpdCB3aWxsIGFib3J0IHJlcXVlc3RzXG4gICAgLy8gQSB3YXkgdG8gYXZvaWQgdGhpcyBpcyB0byBtYWtlIHN1cmUgQUxMIGNhbGxiYWNrcyBhcmUgc2V0IGV2ZW4gaWYgbm90IHVzZWRcbiAgICAvLyBNb3JlIGluZm8gaGVyZTogaHR0cDovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy8xNTc4Njk2Ni94ZG9tYWlucmVxdWVzdC1hYm9ydHMtcG9zdC1vbi1pZS05XG4gICAgeGRyLnRpbWVvdXQgPSA1MDAwO1xuXG4gICAgeGRyLm9uZXJyb3IgPSB0aGlzLl9ib3VuZFhock9uRXJyb3I7XG4gICAgeGRyLm9udGltZW91dCA9IHRoaXMuX2JvdW5kWGRyT25UaW1lb3V0O1xuICAgIHhkci5vbnByb2dyZXNzID0gdGhpcy5fYm91bmRPblByb2dyZXNzO1xuICAgIHhkci5vbmxvYWQgPSB0aGlzLl9ib3VuZFhock9uTG9hZDtcblxuICAgIHhkci5vcGVuKCdHRVQnLCB0aGlzLnVybCwgdHJ1ZSk7XG5cbiAgICAvLyAgTm90ZTogVGhlIHhkci5zZW5kKCkgY2FsbCBpcyB3cmFwcGVkIGluIGEgdGltZW91dCB0byBwcmV2ZW50IGFuIGlzc3VlIHdpdGggdGhlIGludGVyZmFjZSB3aGVyZSBzb21lIHJlcXVlc3RzIGFyZSBsb3N0XG4gICAgLy8gIGlmIG11bHRpcGxlIFhEb21haW5SZXF1ZXN0cyBhcmUgYmVpbmcgc2VudCBhdCB0aGUgc2FtZSB0aW1lLlxuICAgIC8vIFNvbWUgaW5mbyBoZXJlOiBodHRwczovL2dpdGh1Yi5jb20vcGhvdG9uc3Rvcm0vcGhhc2VyL2lzc3Vlcy8xMjQ4XG4gICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICAgIHhkci5zZW5kKCk7XG4gICAgfSwgMCk7XG59O1xuXG4vKipcbiAqIENyZWF0ZXMgYSBzb3VyY2UgdXNlZCBpbiBsb2FkaW5nIHZpYSBhbiBlbGVtZW50LlxuICpcbiAqIEBwYXJhbSB0eXBlIHtzdHJpbmd9IFRoZSBlbGVtZW50IHR5cGUgKHZpZGVvIG9yIGF1ZGlvKS5cbiAqIEBwYXJhbSB1cmwge3N0cmluZ30gVGhlIHNvdXJjZSBVUkwgdG8gbG9hZCBmcm9tLlxuICogQHBhcmFtIFttaW1lXSB7c3RyaW5nfSBUaGUgbWltZSB0eXBlIG9mIHRoZSB2aWRlb1xuICogQHByaXZhdGVcbiAqL1xuUmVzb3VyY2UucHJvdG90eXBlLl9jcmVhdGVTb3VyY2UgPSBmdW5jdGlvbiAodHlwZSwgdXJsLCBtaW1lKSB7XG4gICAgaWYgKCFtaW1lKSB7XG4gICAgICAgIG1pbWUgPSB0eXBlICsgJy8nICsgdXJsLnN1YnN0cih1cmwubGFzdEluZGV4T2YoJy4nKSArIDEpO1xuICAgIH1cblxuICAgIHZhciBzb3VyY2UgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzb3VyY2UnKTtcblxuICAgIHNvdXJjZS5zcmMgPSB1cmw7XG4gICAgc291cmNlLnR5cGUgPSBtaW1lO1xuXG4gICAgcmV0dXJuIHNvdXJjZTtcbn07XG5cbi8qKlxuICogQ2FsbGVkIGlmIGEgbG9hZCBlcnJvcnMgb3V0LlxuICpcbiAqIEBwYXJhbSBldmVudCB7RXZlbnR9IFRoZSBlcnJvciBldmVudCBmcm9tIHRoZSBlbGVtZW50IHRoYXQgZW1pdHMgaXQuXG4gKiBAcHJpdmF0ZVxuICovXG5SZXNvdXJjZS5wcm90b3R5cGUuX29uRXJyb3IgPSBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICB0aGlzLmVycm9yID0gbmV3IEVycm9yKCdGYWlsZWQgdG8gbG9hZCBlbGVtZW50IHVzaW5nICcgKyBldmVudC50YXJnZXQubm9kZU5hbWUpO1xuICAgIHRoaXMuY29tcGxldGUoKTtcbn07XG5cbi8qKlxuICogQ2FsbGVkIGlmIGEgbG9hZCBwcm9ncmVzcyBldmVudCBmaXJlcyBmb3IgeGhyL3hkci5cbiAqXG4gKiBAZmlyZXMgcHJvZ3Jlc3NcbiAqIEBwYXJhbSBldmVudCB7WE1MSHR0cFJlcXVlc3RQcm9ncmVzc0V2ZW50fEV2ZW50fVxuICogQHByaXZhdGVcbiAqL1xuUmVzb3VyY2UucHJvdG90eXBlLl9vblByb2dyZXNzID0gIGZ1bmN0aW9uIChldmVudCkge1xuICAgIGlmIChldmVudCAmJiBldmVudC5sZW5ndGhDb21wdXRhYmxlKSB7XG4gICAgICAgIHRoaXMuZW1pdCgncHJvZ3Jlc3MnLCB0aGlzLCBldmVudC5sb2FkZWQgLyBldmVudC50b3RhbCk7XG4gICAgfVxufTtcblxuLyoqXG4gKiBDYWxsZWQgaWYgYW4gZXJyb3IgZXZlbnQgZmlyZXMgZm9yIHhoci94ZHIuXG4gKlxuICogQHBhcmFtIGV2ZW50IHtYTUxIdHRwUmVxdWVzdEVycm9yRXZlbnR8RXZlbnR9XG4gKiBAcHJpdmF0ZVxuICovXG5SZXNvdXJjZS5wcm90b3R5cGUuX3hock9uRXJyb3IgPSBmdW5jdGlvbiAoKSB7XG4gICAgdGhpcy5lcnJvciA9IG5ldyBFcnJvcihcbiAgICAgICAgcmVxVHlwZSh0aGlzLnhocikgKyAnIFJlcXVlc3QgZmFpbGVkLiAnICtcbiAgICAgICAgJ1N0YXR1czogJyArIHRoaXMueGhyLnN0YXR1cyArICcsIHRleHQ6IFwiJyArIHRoaXMueGhyLnN0YXR1c1RleHQgKyAnXCInXG4gICAgKTtcblxuICAgIHRoaXMuY29tcGxldGUoKTtcbn07XG5cbi8qKlxuICogQ2FsbGVkIGlmIGFuIGFib3J0IGV2ZW50IGZpcmVzIGZvciB4aHIuXG4gKlxuICogQHBhcmFtIGV2ZW50IHtYTUxIdHRwUmVxdWVzdEFib3J0RXZlbnR9XG4gKiBAcHJpdmF0ZVxuICovXG5SZXNvdXJjZS5wcm90b3R5cGUuX3hock9uQWJvcnQgPSBmdW5jdGlvbiAoKSB7XG4gICAgdGhpcy5lcnJvciA9IG5ldyBFcnJvcihyZXFUeXBlKHRoaXMueGhyKSArICcgUmVxdWVzdCB3YXMgYWJvcnRlZCBieSB0aGUgdXNlci4nKTtcbiAgICB0aGlzLmNvbXBsZXRlKCk7XG59O1xuXG4vKipcbiAqIENhbGxlZCBpZiBhIHRpbWVvdXQgZXZlbnQgZmlyZXMgZm9yIHhkci5cbiAqXG4gKiBAcGFyYW0gZXZlbnQge0V2ZW50fVxuICogQHByaXZhdGVcbiAqL1xuUmVzb3VyY2UucHJvdG90eXBlLl94ZHJPblRpbWVvdXQgPSBmdW5jdGlvbiAoKSB7XG4gICAgdGhpcy5lcnJvciA9IG5ldyBFcnJvcihyZXFUeXBlKHRoaXMueGhyKSArICcgUmVxdWVzdCB0aW1lZCBvdXQuJyk7XG4gICAgdGhpcy5jb21wbGV0ZSgpO1xufTtcblxuLyoqXG4gKiBDYWxsZWQgd2hlbiBkYXRhIHN1Y2Nlc3NmdWxseSBsb2FkcyBmcm9tIGFuIHhoci94ZHIgcmVxdWVzdC5cbiAqXG4gKiBAcGFyYW0gZXZlbnQge1hNTEh0dHBSZXF1ZXN0TG9hZEV2ZW50fEV2ZW50fVxuICogQHByaXZhdGVcbiAqL1xuUmVzb3VyY2UucHJvdG90eXBlLl94aHJPbkxvYWQgPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHhociA9IHRoaXMueGhyLFxuICAgICAgICBzdGF0dXMgPSB4aHIuc3RhdHVzICE9PSB1bmRlZmluZWQgPyB4aHIuc3RhdHVzIDogMjAwOyAvL1hEUiBoYXMgbm8gYC5zdGF0dXNgLCBhc3N1bWUgMjAwLlxuXG4gICAgLy8gc3RhdHVzIGNhbiBiZSAwIHdoZW4gdXNpbmcgdGhlIGZpbGU6Ly8gcHJvdG9jb2wsIGFsc28gY2hlY2sgaWYgYSByZXNwb25zZSB3YXMgZm91bmRcbiAgICBpZiAoc3RhdHVzID09PSAyMDAgfHwgc3RhdHVzID09PSAyMDQgfHwgKHN0YXR1cyA9PT0gMCAmJiB4aHIucmVzcG9uc2VUZXh0Lmxlbmd0aCA+IDApKSB7XG4gICAgICAgIC8vIGlmIHRleHQsIGp1c3QgcmV0dXJuIGl0XG4gICAgICAgIGlmICh0aGlzLnhoclR5cGUgPT09IFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLlRFWFQpIHtcbiAgICAgICAgICAgIHRoaXMuZGF0YSA9IHhoci5yZXNwb25zZVRleHQ7XG4gICAgICAgIH1cbiAgICAgICAgLy8gaWYganNvbiwgcGFyc2UgaW50byBqc29uIG9iamVjdFxuICAgICAgICBlbHNlIGlmICh0aGlzLnhoclR5cGUgPT09IFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkpTT04pIHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgdGhpcy5kYXRhID0gSlNPTi5wYXJzZSh4aHIucmVzcG9uc2VUZXh0KTtcbiAgICAgICAgICAgICAgICB0aGlzLmlzSnNvbiA9IHRydWU7XG4gICAgICAgICAgICB9IGNhdGNoKGUpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmVycm9yID0gbmV3IEVycm9yKCdFcnJvciB0cnlpbmcgdG8gcGFyc2UgbG9hZGVkIGpzb246JywgZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8gaWYgeG1sLCBwYXJzZSBpbnRvIGFuIHhtbCBkb2N1bWVudCBvciBkaXYgZWxlbWVudFxuICAgICAgICBlbHNlIGlmICh0aGlzLnhoclR5cGUgPT09IFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkRPQ1VNRU5UKSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGlmICh3aW5kb3cuRE9NUGFyc2VyKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBkb21wYXJzZXIgPSBuZXcgRE9NUGFyc2VyKCk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGF0YSA9IGRvbXBhcnNlci5wYXJzZUZyb21TdHJpbmcoeGhyLnJlc3BvbnNlVGV4dCwgJ3RleHQveG1sJyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB2YXIgZGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgICAgICAgICAgICAgIGRpdi5pbm5lckhUTUwgPSB4aHIucmVzcG9uc2VUZXh0O1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmRhdGEgPSBkaXY7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXMuaXNYbWwgPSB0cnVlO1xuICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgIHRoaXMuZXJyb3IgPSBuZXcgRXJyb3IoJ0Vycm9yIHRyeWluZyB0byBwYXJzZSBsb2FkZWQgeG1sOicsIGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIG90aGVyIHR5cGVzIGp1c3QgcmV0dXJuIHRoZSByZXNwb25zZVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuZGF0YSA9IHhoci5yZXNwb25zZSB8fCB4aHIucmVzcG9uc2VUZXh0O1xuICAgICAgICB9XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICB0aGlzLmVycm9yID0gbmV3IEVycm9yKCdbJyArIHhoci5zdGF0dXMgKyAnXScgKyB4aHIuc3RhdHVzVGV4dCArICc6JyArIHhoci5yZXNwb25zZVVSTCk7XG4gICAgfVxuXG4gICAgdGhpcy5jb21wbGV0ZSgpO1xufTtcblxuZnVuY3Rpb24gcmVxVHlwZSh4aHIpIHtcbiAgICByZXR1cm4geGhyLnRvU3RyaW5nKCkucmVwbGFjZSgnb2JqZWN0ICcsICcnKTtcbn1cblxuLyoqXG4gKiBTZXRzIHRoZSBgY3Jvc3NPcmlnaW5gIHByb3BlcnR5IGZvciB0aGlzIHJlc291cmNlIGJhc2VkIG9uIGlmIHRoZSB1cmxcbiAqIGZvciB0aGlzIHJlc291cmNlIGlzIGNyb3NzLW9yaWdpbi4gSWYgY3Jvc3NPcmlnaW4gd2FzIG1hbnVhbGx5IHNldCwgdGhpc1xuICogZnVuY3Rpb24gZG9lcyBub3RoaW5nLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0gdXJsIHtzdHJpbmd9IFRoZSB1cmwgdG8gdGVzdC5cbiAqIEBwYXJhbSBbbG9jYXRpb249d2luZG93LmxvY2F0aW9uXSB7b2JqZWN0fSBUaGUgbG9jYXRpb24gb2JqZWN0IHRvIHRlc3QgYWdhaW5zdC5cbiAqIEByZXR1cm4ge3N0cmluZ30gVGhlIGNyb3NzT3JpZ2luIHZhbHVlIHRvIHVzZSAob3IgZW1wdHkgc3RyaW5nIGZvciBub25lKS5cbiAqL1xuUmVzb3VyY2UucHJvdG90eXBlLl9kZXRlcm1pbmVDcm9zc09yaWdpbiA9IGZ1bmN0aW9uICh1cmwsIGxvYykge1xuICAgIC8vIGRhdGE6IGFuZCBqYXZhc2NyaXB0OiB1cmxzIGFyZSBjb25zaWRlcmVkIHNhbWUtb3JpZ2luXG4gICAgaWYgKHVybC5pbmRleE9mKCdkYXRhOicpID09PSAwKSB7XG4gICAgICAgIHJldHVybiAnJztcbiAgICB9XG5cbiAgICAvLyBkZWZhdWx0IGlzIHdpbmRvdy5sb2NhdGlvblxuICAgIGxvYyA9IGxvYyB8fCB3aW5kb3cubG9jYXRpb247XG5cbiAgICBpZiAoIXRlbXBBbmNob3IpIHtcbiAgICAgICAgdGVtcEFuY2hvciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2EnKTtcbiAgICB9XG5cbiAgICAvLyBsZXQgdGhlIGJyb3dzZXIgZGV0ZXJtaW5lIHRoZSBmdWxsIGhyZWYgZm9yIHRoZSB1cmwgb2YgdGhpcyByZXNvdXJjZSBhbmQgdGhlblxuICAgIC8vIHBhcnNlIHdpdGggdGhlIG5vZGUgdXJsIGxpYiwgd2UgY2FuJ3QgdXNlIHRoZSBwcm9wZXJ0aWVzIG9mIHRoZSBhbmNob3IgZWxlbWVudFxuICAgIC8vIGJlY2F1c2UgdGhleSBkb24ndCB3b3JrIGluIElFOSA6KFxuICAgIHRlbXBBbmNob3IuaHJlZiA9IHVybDtcbiAgICB1cmwgPSBfdXJsLnBhcnNlKHRlbXBBbmNob3IuaHJlZik7XG5cbiAgICB2YXIgc2FtZVBvcnQgPSAoIXVybC5wb3J0ICYmIGxvYy5wb3J0ID09PSAnJykgfHwgKHVybC5wb3J0ID09PSBsb2MucG9ydCk7XG5cbiAgICAvLyBpZiBjcm9zcyBvcmlnaW5cbiAgICBpZiAodXJsLmhvc3RuYW1lICE9PSBsb2MuaG9zdG5hbWUgfHwgIXNhbWVQb3J0IHx8IHVybC5wcm90b2NvbCAhPT0gbG9jLnByb3RvY29sKSB7XG4gICAgICAgIHJldHVybiAnYW5vbnltb3VzJztcbiAgICB9XG5cbiAgICByZXR1cm4gJyc7XG59O1xuXG4vKipcbiAqIERldGVybWluZXMgdGhlIHJlc3BvbnNlVHlwZSBvZiBhbiBYSFIgcmVxdWVzdCBiYXNlZCBvbiB0aGUgZXh0ZW5zaW9uIG9mIHRoZVxuICogcmVzb3VyY2UgYmVpbmcgbG9hZGVkLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcmV0dXJuIHtSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRX0gVGhlIHJlc3BvbnNlVHlwZSB0byB1c2UuXG4gKi9cblJlc291cmNlLnByb3RvdHlwZS5fZGV0ZXJtaW5lWGhyVHlwZSA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gUmVzb3VyY2UuX3hoclR5cGVNYXBbdGhpcy5fZ2V0RXh0ZW5zaW9uKCldIHx8IFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLlRFWFQ7XG59O1xuXG5SZXNvdXJjZS5wcm90b3R5cGUuX2RldGVybWluZUxvYWRUeXBlID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBSZXNvdXJjZS5fbG9hZFR5cGVNYXBbdGhpcy5fZ2V0RXh0ZW5zaW9uKCldIHx8IFJlc291cmNlLkxPQURfVFlQRS5YSFI7XG59O1xuXG5SZXNvdXJjZS5wcm90b3R5cGUuX2dldEV4dGVuc2lvbiA9IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgdXJsID0gdGhpcy51cmwsXG4gICAgICAgIGV4dDtcblxuICAgIGlmICh0aGlzLmlzRGF0YVVybCkge1xuICAgICAgICB2YXIgc2xhc2hJbmRleCA9IHVybC5pbmRleE9mKCcvJyk7XG4gICAgICAgIGV4dCA9IHVybC5zdWJzdHJpbmcoc2xhc2hJbmRleCArIDEsIHVybC5pbmRleE9mKCc7Jywgc2xhc2hJbmRleCkpO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgdmFyIHF1ZXJ5U3RhcnQgPSB1cmwuaW5kZXhPZignPycpO1xuICAgICAgICBpZiAocXVlcnlTdGFydCAhPT0gLTEpIHtcbiAgICAgICAgICAgIHVybCA9IHVybC5zdWJzdHJpbmcoMCwgcXVlcnlTdGFydCk7XG4gICAgICAgIH1cblxuICAgICAgICBleHQgPSB1cmwuc3Vic3RyaW5nKHVybC5sYXN0SW5kZXhPZignLicpICsgMSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGV4dDtcbn07XG5cbi8qKlxuICogRGV0ZXJtaW5lcyB0aGUgbWltZSB0eXBlIG9mIGFuIFhIUiByZXF1ZXN0IGJhc2VkIG9uIHRoZSByZXNwb25zZVR5cGUgb2ZcbiAqIHJlc291cmNlIGJlaW5nIGxvYWRlZC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHJldHVybiB7c3RyaW5nfSBUaGUgbWltZSB0eXBlIHRvIHVzZS5cbiAqL1xuUmVzb3VyY2UucHJvdG90eXBlLl9nZXRNaW1lRnJvbVhoclR5cGUgPSBmdW5jdGlvbiAodHlwZSkge1xuICAgIHN3aXRjaCh0eXBlKSB7XG4gICAgICAgIGNhc2UgUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuQlVGRkVSOlxuICAgICAgICAgICAgcmV0dXJuICdhcHBsaWNhdGlvbi9vY3RldC1iaW5hcnknO1xuXG4gICAgICAgIGNhc2UgUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuQkxPQjpcbiAgICAgICAgICAgIHJldHVybiAnYXBwbGljYXRpb24vYmxvYic7XG5cbiAgICAgICAgY2FzZSBSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRS5ET0NVTUVOVDpcbiAgICAgICAgICAgIHJldHVybiAnYXBwbGljYXRpb24veG1sJztcblxuICAgICAgICBjYXNlIFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkpTT046XG4gICAgICAgICAgICByZXR1cm4gJ2FwcGxpY2F0aW9uL2pzb24nO1xuXG4gICAgICAgIGNhc2UgUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuREVGQVVMVDpcbiAgICAgICAgY2FzZSBSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRS5URVhUOlxuICAgICAgICAgICAgLyogZmFsbHMgdGhyb3VnaCAqL1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgcmV0dXJuICd0ZXh0L3BsYWluJztcblxuICAgIH1cbn07XG5cbi8qKlxuICogVGhlIHR5cGVzIG9mIGxvYWRpbmcgYSByZXNvdXJjZSBjYW4gdXNlLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBjb25zdGFudFxuICogQHByb3BlcnR5IHtvYmplY3R9IExPQURfVFlQRVxuICogQHByb3BlcnR5IHtudW1iZXJ9IExPQURfVFlQRS5YSFIgLSBVc2VzIFhNTEh0dHBSZXF1ZXN0IHRvIGxvYWQgdGhlIHJlc291cmNlLlxuICogQHByb3BlcnR5IHtudW1iZXJ9IExPQURfVFlQRS5JTUFHRSAtIFVzZXMgYW4gYEltYWdlYCBvYmplY3QgdG8gbG9hZCB0aGUgcmVzb3VyY2UuXG4gKiBAcHJvcGVydHkge251bWJlcn0gTE9BRF9UWVBFLkFVRElPIC0gVXNlcyBhbiBgQXVkaW9gIG9iamVjdCB0byBsb2FkIHRoZSByZXNvdXJjZS5cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBMT0FEX1RZUEUuVklERU8gLSBVc2VzIGEgYFZpZGVvYCBvYmplY3QgdG8gbG9hZCB0aGUgcmVzb3VyY2UuXG4gKi9cblJlc291cmNlLkxPQURfVFlQRSA9IHtcbiAgICBYSFI6ICAgIDEsXG4gICAgSU1BR0U6ICAyLFxuICAgIEFVRElPOiAgMyxcbiAgICBWSURFTzogIDRcbn07XG5cbi8qKlxuICogVGhlIFhIUiByZWFkeSBzdGF0ZXMsIHVzZWQgaW50ZXJuYWxseS5cbiAqXG4gKiBAc3RhdGljXG4gKiBAY29uc3RhbnRcbiAqIEBwcm9wZXJ0eSB7b2JqZWN0fSBYSFJfUkVBRFlfU1RBVEVcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBYSFJfUkVBRFlfU1RBVEUuVU5TRU5UIC0gb3BlbigpaGFzIG5vdCBiZWVuIGNhbGxlZCB5ZXQuXG4gKiBAcHJvcGVydHkge251bWJlcn0gWEhSX1JFQURZX1NUQVRFLk9QRU5FRCAtIHNlbmQoKWhhcyBub3QgYmVlbiBjYWxsZWQgeWV0LlxuICogQHByb3BlcnR5IHtudW1iZXJ9IFhIUl9SRUFEWV9TVEFURS5IRUFERVJTX1JFQ0VJVkVEIC0gc2VuZCgpIGhhcyBiZWVuIGNhbGxlZCwgYW5kIGhlYWRlcnMgYW5kIHN0YXR1cyBhcmUgYXZhaWxhYmxlLlxuICogQHByb3BlcnR5IHtudW1iZXJ9IFhIUl9SRUFEWV9TVEFURS5MT0FESU5HIC0gRG93bmxvYWRpbmc7IHJlc3BvbnNlVGV4dCBob2xkcyBwYXJ0aWFsIGRhdGEuXG4gKiBAcHJvcGVydHkge251bWJlcn0gWEhSX1JFQURZX1NUQVRFLkRPTkUgLSBUaGUgb3BlcmF0aW9uIGlzIGNvbXBsZXRlLlxuICovXG5SZXNvdXJjZS5YSFJfUkVBRFlfU1RBVEUgPSB7XG4gICAgVU5TRU5UOiAwLFxuICAgIE9QRU5FRDogMSxcbiAgICBIRUFERVJTX1JFQ0VJVkVEOiAyLFxuICAgIExPQURJTkc6IDMsXG4gICAgRE9ORTogNFxufTtcblxuLyoqXG4gKiBUaGUgWEhSIHJlYWR5IHN0YXRlcywgdXNlZCBpbnRlcm5hbGx5LlxuICpcbiAqIEBzdGF0aWNcbiAqIEBjb25zdGFudFxuICogQHByb3BlcnR5IHtvYmplY3R9IFhIUl9SRVNQT05TRV9UWVBFXG4gKiBAcHJvcGVydHkge3N0cmluZ30gWEhSX1JFU1BPTlNFX1RZUEUuREVGQVVMVCAtIGRlZmF1bHRzIHRvIHRleHRcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBYSFJfUkVTUE9OU0VfVFlQRS5CVUZGRVIgLSBBcnJheUJ1ZmZlclxuICogQHByb3BlcnR5IHtzdHJpbmd9IFhIUl9SRVNQT05TRV9UWVBFLkJMT0IgLSBCbG9iXG4gKiBAcHJvcGVydHkge3N0cmluZ30gWEhSX1JFU1BPTlNFX1RZUEUuRE9DVU1FTlQgLSBEb2N1bWVudFxuICogQHByb3BlcnR5IHtzdHJpbmd9IFhIUl9SRVNQT05TRV9UWVBFLkpTT04gLSBPYmplY3RcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBYSFJfUkVTUE9OU0VfVFlQRS5URVhUIC0gU3RyaW5nXG4gKi9cblJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFID0ge1xuICAgIERFRkFVTFQ6ICAgICd0ZXh0JyxcbiAgICBCVUZGRVI6ICAgICAnYXJyYXlidWZmZXInLFxuICAgIEJMT0I6ICAgICAgICdibG9iJyxcbiAgICBET0NVTUVOVDogICAnZG9jdW1lbnQnLFxuICAgIEpTT046ICAgICAgICdqc29uJyxcbiAgICBURVhUOiAgICAgICAndGV4dCdcbn07XG5cblJlc291cmNlLl9sb2FkVHlwZU1hcCA9IHtcbiAgICAnZ2lmJzogICAgICBSZXNvdXJjZS5MT0FEX1RZUEUuSU1BR0UsXG4gICAgJ3BuZyc6ICAgICAgUmVzb3VyY2UuTE9BRF9UWVBFLklNQUdFLFxuICAgICdibXAnOiAgICAgIFJlc291cmNlLkxPQURfVFlQRS5JTUFHRSxcbiAgICAnanBnJzogICAgICBSZXNvdXJjZS5MT0FEX1RZUEUuSU1BR0UsXG4gICAgJ2pwZWcnOiAgICAgUmVzb3VyY2UuTE9BRF9UWVBFLklNQUdFLFxuICAgICd0aWYnOiAgICAgIFJlc291cmNlLkxPQURfVFlQRS5JTUFHRSxcbiAgICAndGlmZic6ICAgICBSZXNvdXJjZS5MT0FEX1RZUEUuSU1BR0UsXG4gICAgJ3dlYnAnOiAgICAgUmVzb3VyY2UuTE9BRF9UWVBFLklNQUdFLFxuICAgICd0Z2EnOiAgICAgIFJlc291cmNlLkxPQURfVFlQRS5JTUFHRVxufTtcblxuUmVzb3VyY2UuX3hoclR5cGVNYXAgPSB7XG4gICAgLy8geG1sXG4gICAgJ3hodG1sJzogICAgUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuRE9DVU1FTlQsXG4gICAgJ2h0bWwnOiAgICAgUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuRE9DVU1FTlQsXG4gICAgJ2h0bSc6ICAgICAgUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuRE9DVU1FTlQsXG4gICAgJ3htbCc6ICAgICAgUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuRE9DVU1FTlQsXG4gICAgJ3RteCc6ICAgICAgUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuRE9DVU1FTlQsXG4gICAgJ3RzeCc6ICAgICAgUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuRE9DVU1FTlQsXG4gICAgJ3N2Zyc6ICAgICAgUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuRE9DVU1FTlQsXG5cbiAgICAvLyBpbWFnZXNcbiAgICAnZ2lmJzogICAgICBSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRS5CTE9CLFxuICAgICdwbmcnOiAgICAgIFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkJMT0IsXG4gICAgJ2JtcCc6ICAgICAgUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuQkxPQixcbiAgICAnanBnJzogICAgICBSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRS5CTE9CLFxuICAgICdqcGVnJzogICAgIFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkJMT0IsXG4gICAgJ3RpZic6ICAgICAgUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuQkxPQixcbiAgICAndGlmZic6ICAgICBSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRS5CTE9CLFxuICAgICd3ZWJwJzogICAgIFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLkJMT0IsXG4gICAgJ3RnYSc6ICAgICAgUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuQkxPQixcblxuICAgIC8vIGpzb25cbiAgICAnanNvbic6ICAgICBSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRS5KU09OLFxuXG4gICAgLy8gdGV4dFxuICAgICd0ZXh0JzogICAgIFJlc291cmNlLlhIUl9SRVNQT05TRV9UWVBFLlRFWFQsXG4gICAgJ3R4dCc6ICAgICAgUmVzb3VyY2UuWEhSX1JFU1BPTlNFX1RZUEUuVEVYVFxufTtcblxuLyoqXG4gKiBTZXRzIHRoZSBsb2FkIHR5cGUgdG8gYmUgdXNlZCBmb3IgYSBzcGVjaWZpYyBleHRlbnNpb24uXG4gKlxuICogQHN0YXRpY1xuICogQHBhcmFtIGV4dG5hbWUge3N0cmluZ30gVGhlIGV4dGVuc2lvbiB0byBzZXQgdGhlIHR5cGUgZm9yLCBlLmcuIFwicG5nXCIgb3IgXCJmbnRcIlxuICogQHBhcmFtIGxvYWRUeXBlIHtSZXNvdXJjZS5MT0FEX1RZUEV9IFRoZSBsb2FkIHR5cGUgdG8gc2V0IGl0IHRvLlxuICovXG5SZXNvdXJjZS5zZXRFeHRlbnNpb25Mb2FkVHlwZSA9IGZ1bmN0aW9uIChleHRuYW1lLCBsb2FkVHlwZSkge1xuICAgIHNldEV4dE1hcChSZXNvdXJjZS5fbG9hZFR5cGVNYXAsIGV4dG5hbWUsIGxvYWRUeXBlKTtcbn07XG5cbi8qKlxuICogU2V0cyB0aGUgbG9hZCB0eXBlIHRvIGJlIHVzZWQgZm9yIGEgc3BlY2lmaWMgZXh0ZW5zaW9uLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBwYXJhbSBleHRuYW1lIHtzdHJpbmd9IFRoZSBleHRlbnNpb24gdG8gc2V0IHRoZSB0eXBlIGZvciwgZS5nLiBcInBuZ1wiIG9yIFwiZm50XCJcbiAqIEBwYXJhbSB4aHJUeXBlIHtSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRX0gVGhlIHhociB0eXBlIHRvIHNldCBpdCB0by5cbiAqL1xuUmVzb3VyY2Uuc2V0RXh0ZW5zaW9uWGhyVHlwZSA9IGZ1bmN0aW9uIChleHRuYW1lLCB4aHJUeXBlKSB7XG4gICAgc2V0RXh0TWFwKFJlc291cmNlLl94aHJUeXBlTWFwLCBleHRuYW1lLCB4aHJUeXBlKTtcbn07XG5cbmZ1bmN0aW9uIHNldEV4dE1hcChtYXAsIGV4dG5hbWUsIHZhbCkge1xuICAgIGlmIChleHRuYW1lICYmIGV4dG5hbWUuaW5kZXhPZignLicpID09PSAwKSB7XG4gICAgICAgIGV4dG5hbWUgPSBleHRuYW1lLnN1YnN0cmluZygxKTtcbiAgICB9XG5cbiAgICBpZiAoIWV4dG5hbWUpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIG1hcFtleHRuYW1lXSA9IHZhbDtcbn1cbiIsIm1vZHVsZS5leHBvcnRzID0ge1xuXG4gICAgLy8gcHJpdmF0ZSBwcm9wZXJ0eVxuICAgIF9rZXlTdHI6IFwiQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkrLz1cIixcblxuICAgIGVuY29kZUJpbmFyeTogZnVuY3Rpb24gKGlucHV0KSB7XG4gICAgICAgIHZhciBvdXRwdXQgPSBcIlwiO1xuICAgICAgICB2YXIgYnl0ZWJ1ZmZlcjtcbiAgICAgICAgdmFyIGVuY29kZWRDaGFySW5kZXhlcyA9IG5ldyBBcnJheSg0KTtcbiAgICAgICAgdmFyIGlueCA9IDA7XG4gICAgICAgIHZhciBqbnggPSAwO1xuICAgICAgICB2YXIgcGFkZGluZ0J5dGVzID0gMDtcblxuICAgICAgICB3aGlsZSAoaW54IDwgaW5wdXQubGVuZ3RoKSB7XG4gICAgICAgICAgICAvLyBGaWxsIGJ5dGUgYnVmZmVyIGFycmF5XG4gICAgICAgICAgICBieXRlYnVmZmVyID0gbmV3IEFycmF5KDMpO1xuICAgICAgICAgICAgZm9yIChqbnggPSAwOyBqbnggPCBieXRlYnVmZmVyLmxlbmd0aDsgam54KyspIHtcbiAgICAgICAgICAgICAgICBpZiAoaW54IDwgaW5wdXQubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIHRocm93IGF3YXkgaGlnaC1vcmRlciBieXRlLCBhcyBkb2N1bWVudGVkIGF0OlxuICAgICAgICAgICAgICAgICAgICAvLyBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9Fbi9Vc2luZ19YTUxIdHRwUmVxdWVzdCNIYW5kbGluZ19iaW5hcnlfZGF0YVxuICAgICAgICAgICAgICAgICAgICBieXRlYnVmZmVyW2pueF0gPSBpbnB1dC5jaGFyQ29kZUF0KGlueCsrKSAmIDB4ZmY7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBieXRlYnVmZmVyW2pueF0gPSAwO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gR2V0IGVhY2ggZW5jb2RlZCBjaGFyYWN0ZXIsIDYgYml0cyBhdCBhIHRpbWVcbiAgICAgICAgICAgIC8vIGluZGV4IDE6IGZpcnN0IDYgYml0c1xuICAgICAgICAgICAgZW5jb2RlZENoYXJJbmRleGVzWzBdID0gYnl0ZWJ1ZmZlclswXSA+PiAyO1xuICAgICAgICAgICAgLy8gaW5kZXggMjogc2Vjb25kIDYgYml0cyAoMiBsZWFzdCBzaWduaWZpY2FudCBiaXRzIGZyb20gaW5wdXQgYnl0ZSAxICsgNCBtb3N0IHNpZ25pZmljYW50IGJpdHMgZnJvbSBieXRlIDIpXG4gICAgICAgICAgICBlbmNvZGVkQ2hhckluZGV4ZXNbMV0gPSAoKGJ5dGVidWZmZXJbMF0gJiAweDMpIDw8IDQpIHwgKGJ5dGVidWZmZXJbMV0gPj4gNCk7XG4gICAgICAgICAgICAvLyBpbmRleCAzOiB0aGlyZCA2IGJpdHMgKDQgbGVhc3Qgc2lnbmlmaWNhbnQgYml0cyBmcm9tIGlucHV0IGJ5dGUgMiArIDIgbW9zdCBzaWduaWZpY2FudCBiaXRzIGZyb20gYnl0ZSAzKVxuICAgICAgICAgICAgZW5jb2RlZENoYXJJbmRleGVzWzJdID0gKChieXRlYnVmZmVyWzFdICYgMHgwZikgPDwgMikgfCAoYnl0ZWJ1ZmZlclsyXSA+PiA2KTtcbiAgICAgICAgICAgIC8vIGluZGV4IDM6IGZvcnRoIDYgYml0cyAoNiBsZWFzdCBzaWduaWZpY2FudCBiaXRzIGZyb20gaW5wdXQgYnl0ZSAzKVxuICAgICAgICAgICAgZW5jb2RlZENoYXJJbmRleGVzWzNdID0gYnl0ZWJ1ZmZlclsyXSAmIDB4M2Y7XG5cbiAgICAgICAgICAgIC8vIERldGVybWluZSB3aGV0aGVyIHBhZGRpbmcgaGFwcGVuZWQsIGFuZCBhZGp1c3QgYWNjb3JkaW5nbHlcbiAgICAgICAgICAgIHBhZGRpbmdCeXRlcyA9IGlueCAtIChpbnB1dC5sZW5ndGggLSAxKTtcbiAgICAgICAgICAgIHN3aXRjaCAocGFkZGluZ0J5dGVzKSB7XG4gICAgICAgICAgICAgICAgY2FzZSAyOlxuICAgICAgICAgICAgICAgICAgICAvLyBTZXQgbGFzdCAyIGNoYXJhY3RlcnMgdG8gcGFkZGluZyBjaGFyXG4gICAgICAgICAgICAgICAgICAgIGVuY29kZWRDaGFySW5kZXhlc1szXSA9IDY0O1xuICAgICAgICAgICAgICAgICAgICBlbmNvZGVkQ2hhckluZGV4ZXNbMl0gPSA2NDtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICAgICAgICAgIC8vIFNldCBsYXN0IGNoYXJhY3RlciB0byBwYWRkaW5nIGNoYXJcbiAgICAgICAgICAgICAgICAgICAgZW5jb2RlZENoYXJJbmRleGVzWzNdID0gNjQ7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7IC8vIE5vIHBhZGRpbmcgLSBwcm9jZWVkXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIE5vdyB3ZSB3aWxsIGdyYWIgZWFjaCBhcHByb3ByaWF0ZSBjaGFyYWN0ZXIgb3V0IG9mIG91ciBrZXlzdHJpbmdcbiAgICAgICAgICAgIC8vIGJhc2VkIG9uIG91ciBpbmRleCBhcnJheSBhbmQgYXBwZW5kIGl0IHRvIHRoZSBvdXRwdXQgc3RyaW5nXG4gICAgICAgICAgICBmb3IgKGpueCA9IDA7IGpueCA8IGVuY29kZWRDaGFySW5kZXhlcy5sZW5ndGg7IGpueCsrKSB7XG4gICAgICAgICAgICAgICAgb3V0cHV0ICs9IHRoaXMuX2tleVN0ci5jaGFyQXQoZW5jb2RlZENoYXJJbmRleGVzW2pueF0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBvdXRwdXQ7XG4gICAgfVxufTtcbiIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9Mb2FkZXInKTtcblxubW9kdWxlLmV4cG9ydHMuUmVzb3VyY2UgPSByZXF1aXJlKCcuL1Jlc291cmNlJyk7XG5cbm1vZHVsZS5leHBvcnRzLm1pZGRsZXdhcmUgPSB7XG4gICAgY2FjaGluZzoge1xuICAgICAgICBtZW1vcnk6IHJlcXVpcmUoJy4vbWlkZGxld2FyZXMvY2FjaGluZy9tZW1vcnknKVxuICAgIH0sXG4gICAgcGFyc2luZzoge1xuICAgICAgICBibG9iOiByZXF1aXJlKCcuL21pZGRsZXdhcmVzL3BhcnNpbmcvYmxvYicpXG4gICAgfVxufTtcbiIsIi8vIGEgc2ltcGxlIGluLW1lbW9yeSBjYWNoZSBmb3IgcmVzb3VyY2VzXG52YXIgY2FjaGUgPSB7fTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChyZXNvdXJjZSwgbmV4dCkge1xuICAgICAgICAvLyBpZiBjYWNoZWQsIHRoZW4gc2V0IGRhdGEgYW5kIGNvbXBsZXRlIHRoZSByZXNvdXJjZVxuICAgICAgICBpZiAoY2FjaGVbcmVzb3VyY2UudXJsXSkge1xuICAgICAgICAgICAgcmVzb3VyY2UuZGF0YSA9IGNhY2hlW3Jlc291cmNlLnVybF07XG4gICAgICAgICAgICByZXNvdXJjZS5jb21wbGV0ZSgpO1xuICAgICAgICB9XG4gICAgICAgIC8vIGlmIG5vdCBjYWNoZWQsIHdhaXQgZm9yIGNvbXBsZXRlIGFuZCBzdG9yZSBpdCBpbiB0aGUgY2FjaGUuXG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcmVzb3VyY2Uub25jZSgnY29tcGxldGUnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICBjYWNoZVt0aGlzLnVybF0gPSB0aGlzLmRhdGE7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBcbiAgICAgICAgbmV4dCgpO1xuICAgIH07XG59O1xuIiwidmFyIFJlc291cmNlID0gcmVxdWlyZSgnLi4vLi4vUmVzb3VyY2UnKSxcbiAgICBiNjQgPSByZXF1aXJlKCcuLi8uLi9iNjQnKTtcblxud2luZG93LlVSTCA9IHdpbmRvdy5VUkwgfHwgd2luZG93LndlYmtpdFVSTDtcblxuLy8gYSBtaWRkbGV3YXJlIGZvciB0cmFuc2Zvcm1pbmcgWEhSIGxvYWRlZCBCbG9icyBpbnRvIG1vcmUgdXNlZnVsIG9iamVjdHNcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChyZXNvdXJjZSwgbmV4dCkge1xuICAgICAgICBpZiAoIXJlc291cmNlLmRhdGEpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXh0KCk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBpZiB0aGlzIHdhcyBhbiBYSFIgbG9hZCBvZiBhIGJsb2JcbiAgICAgICAgaWYgKHJlc291cmNlLnhociAmJiByZXNvdXJjZS54aHJUeXBlID09PSBSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRS5CTE9CKSB7XG4gICAgICAgICAgICAvLyBpZiB0aGVyZSBpcyBubyBibG9iIHN1cHBvcnQgd2UgcHJvYmFibHkgZ290IGEgYmluYXJ5IHN0cmluZyBiYWNrXG4gICAgICAgICAgICBpZiAoIXdpbmRvdy5CbG9iIHx8IHR5cGVvZiByZXNvdXJjZS5kYXRhID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgICAgIHZhciB0eXBlID0gcmVzb3VyY2UueGhyLmdldFJlc3BvbnNlSGVhZGVyKCdjb250ZW50LXR5cGUnKTtcblxuICAgICAgICAgICAgICAgIC8vIHRoaXMgaXMgYW4gaW1hZ2UsIGNvbnZlcnQgdGhlIGJpbmFyeSBzdHJpbmcgaW50byBhIGRhdGEgdXJsXG4gICAgICAgICAgICAgICAgaWYgKHR5cGUgJiYgdHlwZS5pbmRleE9mKCdpbWFnZScpID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc291cmNlLmRhdGEgPSBuZXcgSW1hZ2UoKTtcbiAgICAgICAgICAgICAgICAgICAgcmVzb3VyY2UuZGF0YS5zcmMgPSAnZGF0YTonICsgdHlwZSArICc7YmFzZTY0LCcgKyBiNjQuZW5jb2RlQmluYXJ5KHJlc291cmNlLnhoci5yZXNwb25zZVRleHQpO1xuXG4gICAgICAgICAgICAgICAgICAgIHJlc291cmNlLmlzSW1hZ2UgPSB0cnVlO1xuXG4gICAgICAgICAgICAgICAgICAgIC8vIHdhaXQgdW50aWwgdGhlIGltYWdlIGxvYWRzIGFuZCB0aGVuIGNhbGxiYWNrXG4gICAgICAgICAgICAgICAgICAgIHJlc291cmNlLmRhdGEub25sb2FkID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVzb3VyY2UuZGF0YS5vbmxvYWQgPSBudWxsO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBuZXh0KCk7XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gaWYgY29udGVudCB0eXBlIHNheXMgdGhpcyBpcyBhbiBpbWFnZSwgdGhlbiB3ZSBzaG91bGQgdHJhbnNmb3JtIHRoZSBibG9iIGludG8gYW4gSW1hZ2Ugb2JqZWN0XG4gICAgICAgICAgICBlbHNlIGlmIChyZXNvdXJjZS5kYXRhLnR5cGUuaW5kZXhPZignaW1hZ2UnKSA9PT0gMCkge1xuICAgICAgICAgICAgICAgIHZhciBzcmMgPSBVUkwuY3JlYXRlT2JqZWN0VVJMKHJlc291cmNlLmRhdGEpO1xuXG4gICAgICAgICAgICAgICAgcmVzb3VyY2UuYmxvYiA9IHJlc291cmNlLmRhdGE7XG4gICAgICAgICAgICAgICAgcmVzb3VyY2UuZGF0YSA9IG5ldyBJbWFnZSgpO1xuICAgICAgICAgICAgICAgIHJlc291cmNlLmRhdGEuc3JjID0gc3JjO1xuXG4gICAgICAgICAgICAgICAgcmVzb3VyY2UuaXNJbWFnZSA9IHRydWU7XG5cbiAgICAgICAgICAgICAgICAvLyBjbGVhbnVwIHRoZSBubyBsb25nZXIgdXNlZCBibG9iIGFmdGVyIHRoZSBpbWFnZSBsb2Fkc1xuICAgICAgICAgICAgICAgIHJlc291cmNlLmRhdGEub25sb2FkID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICBVUkwucmV2b2tlT2JqZWN0VVJMKHNyYyk7XG4gICAgICAgICAgICAgICAgICAgIHJlc291cmNlLmRhdGEub25sb2FkID0gbnVsbDtcblxuICAgICAgICAgICAgICAgICAgICBuZXh0KCk7XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIG5leHQoKTtcbiAgICAgICAgfVxuICAgIH07XG59O1xuIiwibW9kdWxlLmV4cG9ydHM9e1xuICBcIm5hbWVcIjogXCJwaXhpLmpzXCIsXG4gIFwidmVyc2lvblwiOiBcIjMuMC4xMC1kZXZcIixcbiAgXCJkZXNjcmlwdGlvblwiOiBcIlBpeGkuanMgaXMgYSBmYXN0IGxpZ2h0d2VpZ2h0IDJEIGxpYnJhcnkgdGhhdCB3b3JrcyBhY3Jvc3MgYWxsIGRldmljZXMuXCIsXG4gIFwiYXV0aG9yXCI6IFwiTWF0IEdyb3Zlc1wiLFxuICBcImNvbnRyaWJ1dG9yc1wiOiBbXG4gICAgXCJDaGFkIEVuZ2xlciA8Y2hhZEBwYW50aGVyZGV2LmNvbT5cIixcbiAgICBcIlJpY2hhcmQgRGF2ZXkgPHJkYXZleUBnbWFpbC5jb20+XCJcbiAgXSxcbiAgXCJtYWluXCI6IFwiLi9zcmMvaW5kZXguanNcIixcbiAgXCJob21lcGFnZVwiOiBcImh0dHA6Ly9nb29kYm95ZGlnaXRhbC5jb20vXCIsXG4gIFwiYnVnc1wiOiBcImh0dHBzOi8vZ2l0aHViLmNvbS9waXhpanMvcGl4aS5qcy9pc3N1ZXNcIixcbiAgXCJsaWNlbnNlXCI6IFwiTUlUXCIsXG4gIFwicmVwb3NpdG9yeVwiOiB7XG4gICAgXCJ0eXBlXCI6IFwiZ2l0XCIsXG4gICAgXCJ1cmxcIjogXCJodHRwczovL2dpdGh1Yi5jb20vcGl4aWpzL3BpeGkuanMuZ2l0XCJcbiAgfSxcbiAgXCJzY3JpcHRzXCI6IHtcbiAgICBcInN0YXJ0XCI6IFwiZ3VscCAmJiBndWxwIHdhdGNoXCIsXG4gICAgXCJ0ZXN0XCI6IFwiZ3VscCAmJiB0ZXN0ZW0gY2lcIixcbiAgICBcImJ1aWxkXCI6IFwiZ3VscFwiLFxuICAgIFwiZG9jc1wiOiBcImpzZG9jIC1jIC4vZ3VscC91dGlsL2pzZG9jLmNvbmYuanNvbiAtUiBSRUFETUUubWRcIlxuICB9LFxuICBcImZpbGVzXCI6IFtcbiAgICBcImJpbi9cIixcbiAgICBcInNyYy9cIixcbiAgICBcIkNPTlRSSUJVVElORy5tZFwiLFxuICAgIFwiTElDRU5TRVwiLFxuICAgIFwicGFja2FnZS5qc29uXCIsXG4gICAgXCJSRUFETUUubWRcIlxuICBdLFxuICBcImRlcGVuZGVuY2llc1wiOiB7XG4gICAgXCJhc3luY1wiOiBcIl4xLjUuMFwiLFxuICAgIFwiYnJmc1wiOiBcIl4xLjQuMVwiLFxuICAgIFwiZWFyY3V0XCI6IFwiXjIuMC43XCIsXG4gICAgXCJldmVudGVtaXR0ZXIzXCI6IFwiXjEuMS4xXCIsXG4gICAgXCJvYmplY3QtYXNzaWduXCI6IFwiXjQuMC4xXCIsXG4gICAgXCJwaXhpLWdsLWNvcmVcIjogXCJnaXQraHR0cHM6Ly9naXRodWIuY29tL0dvb2RCb3lEaWdpdGFsL3BpeGktZ2wtY29yZS5naXRcIixcbiAgICBcInJlc291cmNlLWxvYWRlclwiOiBcIl4xLjYuNFwiXG4gIH0sXG4gIFwiZGV2RGVwZW5kZW5jaWVzXCI6IHtcbiAgICBcImJyb3dzZXJpZnlcIjogXCJeMTEuMS4wXCIsXG4gICAgXCJjaGFpXCI6IFwiXjMuMi4wXCIsXG4gICAgXCJkZWxcIjogXCJeMi4wLjJcIixcbiAgICBcImd1bHBcIjogXCJeMy45LjBcIixcbiAgICBcImd1bHAtY2FjaGVkXCI6IFwiXjEuMS4wXCIsXG4gICAgXCJndWxwLWNvbmNhdFwiOiBcIl4yLjYuMFwiLFxuICAgIFwiZ3VscC1kZWJ1Z1wiOiBcIl4yLjEuMFwiLFxuICAgIFwiZ3VscC1oZWFkZXJcIjogXCJeMS43LjFcIixcbiAgICBcImd1bHAtanNoaW50XCI6IFwiXjEuMTEuMlwiLFxuICAgIFwiZ3VscC1taXJyb3JcIjogXCJeMC40LjBcIixcbiAgICBcImd1bHAtcGx1bWJlclwiOiBcIl4xLjAuMVwiLFxuICAgIFwiZ3VscC1yZW5hbWVcIjogXCJeMS4yLjJcIixcbiAgICBcImd1bHAtc291cmNlbWFwc1wiOiBcIl4xLjUuMlwiLFxuICAgIFwiZ3VscC11Z2xpZnlcIjogXCJeMS40LjFcIixcbiAgICBcImd1bHAtdXRpbFwiOiBcIl4zLjAuNlwiLFxuICAgIFwiamFndWFyanMtanNkb2NcIjogXCJnaXQraHR0cHM6Ly9naXRodWIuY29tL2Rhdmlkc2hpbWpzL2phZ3VhcmpzLWpzZG9jLmdpdFwiLFxuICAgIFwianNkb2NcIjogXCJeMy4zLjJcIixcbiAgICBcImpzaGludC1zdW1tYXJ5XCI6IFwiXjAuNC4wXCIsXG4gICAgXCJtaW5pbWlzdFwiOiBcIl4xLjIuMFwiLFxuICAgIFwibW9jaGFcIjogXCJeMi4zLjJcIixcbiAgICBcInJlcXVpcmUtZGlyXCI6IFwiXjAuMy4wXCIsXG4gICAgXCJydW4tc2VxdWVuY2VcIjogXCJeMS4xLjJcIixcbiAgICBcInRlc3RlbVwiOiBcIl4wLjkuNFwiLFxuICAgIFwidmlueWwtYnVmZmVyXCI6IFwiXjEuMC4wXCIsXG4gICAgXCJ2aW55bC1zb3VyY2Utc3RyZWFtXCI6IFwiXjEuMS4wXCIsXG4gICAgXCJ3YXRjaGlmeVwiOiBcIl4zLjQuMFwiXG4gIH0sXG4gIFwiYnJvd3NlcmlmeVwiOiB7XG4gICAgXCJ0cmFuc2Zvcm1cIjogW1xuICAgICAgXCJicmZzXCJcbiAgICBdXG4gIH1cbn1cbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vY29yZScpO1xuXG4vLyBhZGQgc29tZSBleHRyYSB2YXJpYWJsZXMgdG8gdGhlIGNvbnRhaW5lci4uXG5PYmplY3QuYXNzaWduKFxuICAgIGNvcmUuRGlzcGxheU9iamVjdC5wcm90b3R5cGUsXG4gICAgcmVxdWlyZSgnLi9hY2Nlc3NpYmxlVGFyZ2V0Jylcbik7XG5cblxuLyoqXG4gKiBUaGUgQWNjZXNzaWJpbGl0eSBtYW5hZ2VyIHJlYWNyZWF0ZXMgdGhlIGFiaWxpdHkgdG8gdGFiIGFuZCBhbmQgaGF2ZSBjb250ZW50IHJlYWQgYnkgc2NyZWVuIHJlYWRlcnMuIFRoaXMgaXMgdmVyeSBpbXBvcnRhbnQgYXMgaXQgY2FuIHBvc3NpYmx5IGhlbHAgcGVvcGxlIHdpdGggZGlzYWJpbGl0aWVzIGFjY2VzcyBwaXhpIGNvbnRlbnQuXG4gKiBNdWNoIGxpa2UgaW50ZXJhY3Rpb24gYW55IERpc3BsYXlPYmplY3QgY2FuIGJlIG1hZGUgYWNjZXNzaWJsZS4gVGhpcyBtYW5hZ2VyIHdpbGwgbWFwIHRoZSBldmVudHMgYXMgaWYgdGhlIG1vdXNlIHdhcyBiZWluZyB1c2VkLCBtaW5pbWl6aW5nIHRoZSBlZmZlcm90IHJlcXVpcmVkIHRvIGltcGxlbWVudC5cbiAqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuQ2FudmFzUmVuZGVyZXJ8UElYSS5XZWJHTFJlbmRlcmVyfSBBIHJlZmVyZW5jZSB0byB0aGUgY3VycmVudCByZW5kZXJlclxuICovXG5mdW5jdGlvbiBBY2Nlc3NpYmlsaXR5TWFuYWdlcihyZW5kZXJlcilcbntcblx0Ly8gZmlyc3Qgd2UgY3JlYXRlIGEgZGl2IHRoYXQgd2lsbCBzaXQgb3ZlciB0aGUgcGl4aSBlbGVtZW50LiBUaGlzIGlzIHdoZXJlIHRoZSBkaXYgb3ZlcmxheXMgd2lsbCBnby5cbiAgICB2YXIgZGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgXG4gICAgZGl2LnN0eWxlLndpZHRoID0gMTAwICsgJ3B4JztcbiAgICBkaXYuc3R5bGUuaGVpZ2h0ID0gMTAwICsgJ3B4JztcbiAgICBkaXYuc3R5bGUucG9zaXRpb24gPSAnYWJzb2x1dGUnO1xuICAgIGRpdi5zdHlsZS50b3AgPSAwO1xuICAgIGRpdi5zdHlsZS5sZWZ0ID0gMDtcbiAgIC8vXG4gICAgZGl2LnN0eWxlLnpJbmRleCA9IDI7XG4gICBcdFxuICAgXHQvKipcbiAgIFx0ICogVGhpcyBpcyB0aGUgZG9tIGVsZW1lbnQgdGhhdCB3aWxsIHNpdCBvdmVyIHRoZSBwaXhpIGVsZW1lbnQuIFRoaXMgaXMgd2hlcmUgdGhlIGRpdiBvdmVybGF5cyB3aWxsIGdvLlxuICAgXHQgKiBcbiAgIFx0ICogQHR5cGUge0hUTUxFbGVtZW50fVxuICAgXHQgKiBAcHJpdmF0ZVxuICAgXHQgKi9cbiAgIFx0dGhpcy5kaXYgPSBkaXY7XG5cbiAgIFx0LyoqXG4gICBcdCAqIEEgc2ltcGxlIHBvb2wgZm9yIHN0b3JpbmcgZGl2cy5cbiAgIFx0ICogXG4gICBcdCAqIEB0eXBlIHtBcnJheX1cbiAgIFx0ICogQHByaXZhdGVcbiAgIFx0ICovXG4gXHR0aGlzLnBvb2wgPSBbXTtcblxuIFx0LyoqXG4gXHQgKiBUaGlzIGlzIGEgdGljayB1c2VkIHRvIGNoZWNrIGlmIGFuIG9iamVjdCBpcyBubyBsb25nZXIgYmVpbmcgcmVuZGVyZWQuXG4gXHQgKiBcbiBcdCAqIEB0eXBlIHtOdW1iZXJ9XG4gXHQgKiBAcHJpdmF0ZVxuIFx0ICovXG4gICBcdHRoaXMucmVuZGVySWQgPSAwO1xuXG4gICBcdC8qKlxuICAgXHQgKiBTZXR0aW5nIHRoaXMgdG8gdHJ1ZSB3aWxsIHZpc3VhbGx5IHNob3cgdGhlIGRpdnNcbiAgIFx0ICogXG4gICBcdCAqIEB0eXBlIHtCb29sZWFufVxuICAgXHQgKi9cbiAgIFx0dGhpcy5kZWJ1ZyA9IGZhbHNlO1xuXG4gIFx0LyoqXG4gICAgICogVGhlIHJlbmRlcmVyIHRoaXMgYWNjZXNzaWJpbGl0eSBtYW5hZ2VyIHdvcmtzIGZvci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuU3lzdGVtUmVuZGVyZXJ9XG4gICAgICovXG4gICBcdHRoaXMucmVuZGVyZXIgPSByZW5kZXJlcjtcblxuICAgXHQvKipcbiAgICAgKiBUaGUgYXJyYXkgb2YgY3VycmVudGx5IGFjdGl2ZSBhY2Nlc3NpYmxlIGl0ZW1zLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7QXJyYXl9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgIFx0dGhpcy5jaGlsZHJlbiA9IFtdO1xuICAgXHRcbiAgIFx0LyoqXG4gICAgICogcHJlIGJpbmQgdGhlIGZ1bmN0aW9ucy4uXG4gICAgICovXG4gICBcdHRoaXMuX29uS2V5RG93biA9IHRoaXMuX29uS2V5RG93bi5iaW5kKHRoaXMpO1xuICAgXHR0aGlzLl9vbk1vdXNlTW92ZSA9IHRoaXMuX29uTW91c2VNb3ZlLmJpbmQodGhpcyk7XG4gICBcdFxuICAgXHQvKipcbiAgICAgKiBzdG9yZXMgdGhlIHN0YXRlIG9mIHRoZSBtYW5hZ2VyLiBJZiB0aGVyZSBhcmUgbm8gYWNjZXNzaWJsZSBvYmplY3RzIG9yIHRoZSBtb3VzZSBpcyBtb3ZpbmcgdGhlIHdpbGwgYmUgZmFsc2UuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtBcnJheX1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgXHR0aGlzLmlzQWN0aXZlID0gZmFsc2U7XG5cblxuICAgXHQvLyBsZXQgbGlzdGVuIGZvciB0YWIuLiBvbmNlIHByZXNzZWQgd2UgY2FuIGZpcmUgdXAgYW5kIHNob3cgdGhlIGFjY2Vzc2liaWxpdHkgbGF5ZXJcbiAgIFx0d2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLCB0aGlzLl9vbktleURvd24sIGZhbHNlKTtcbn1cblxuXG5BY2Nlc3NpYmlsaXR5TWFuYWdlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBBY2Nlc3NpYmlsaXR5TWFuYWdlcjtcbm1vZHVsZS5leHBvcnRzID0gQWNjZXNzaWJpbGl0eU1hbmFnZXI7XG5cbi8qKlxuICogQWN0aXZhdGluZyB3aWxsIGNhdXNlIHRoZSBBY2Nlc3NpYmlsaXR5IGxheWVyIHRvIGJlIHNob3duLiBUaGlzIGlzIGNhbGxlZCB3aGVuIGEgdXNlciBwcmVzZXMgdGhlIHRhYiBrZXlcbiAqIEBwcml2YXRlXG4gKi9cbkFjY2Vzc2liaWxpdHlNYW5hZ2VyLnByb3RvdHlwZS5hY3RpdmF0ZSA9IGZ1bmN0aW9uKClcbntcblx0aWYodGhpcy5pc0FjdGl2ZSlcblx0e1xuXHRcdHJldHVybjtcblx0fVxuXG5cdHRoaXMuaXNBY3RpdmUgPSB0cnVlO1xuXG5cdHdpbmRvdy5kb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdtb3VzZW1vdmUnLCB0aGlzLl9vbk1vdXNlTW92ZSwgdHJ1ZSk7XG5cdHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdrZXlkb3duJywgdGhpcy5fb25LZXlEb3duLCBmYWxzZSk7XG5cblx0dGhpcy5yZW5kZXJlci5vbigncG9zdHJlbmRlcicsIHRoaXMudXBkYXRlLCB0aGlzKTtcblxuXHR0aGlzLnJlbmRlcmVyLnZpZXcucGFyZW50Tm9kZS5hcHBlbmRDaGlsZCh0aGlzLmRpdik7XHRcbn07XG5cbi8qKlxuICogRGVhY3RpdmF0aW5nIHdpbGwgY2F1c2UgdGhlIEFjY2Vzc2liaWxpdHkgbGF5ZXIgdG8gYmUgaGlkZGVuLiBUaGlzIGlzIGNhbGxlZCB3aGVuIGEgdXNlciBtb3ZlcyB0aGUgbW91c2VcbiAqIEBwcml2YXRlXG4gKi9cbkFjY2Vzc2liaWxpdHlNYW5hZ2VyLnByb3RvdHlwZS5kZWFjdGl2YXRlID0gZnVuY3Rpb24oKVxue1xuXHRpZighdGhpcy5pc0FjdGl2ZSlcblx0e1xuXHRcdHJldHVybjtcblx0fVxuXG5cdHRoaXMuaXNBY3RpdmUgPSBmYWxzZTtcblxuXHR3aW5kb3cuZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignbW91c2Vtb3ZlJywgdGhpcy5fb25Nb3VzZU1vdmUpO1xuXHR3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsIHRoaXMuX29uS2V5RG93biwgZmFsc2UpO1xuXG5cdHRoaXMucmVuZGVyZXIub2ZmKCdwb3N0cmVuZGVyJywgdGhpcy51cGRhdGUpO1xuXG5cdHRoaXMuZGl2LnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodGhpcy5kaXYpO1xuXG59O1xuXG4vKipcbiAqIFRoaXMgcmVjdXJzaXZlIGZ1bmN0aW9uIHdpbGwgcnVuIHRocm91Z2h0IGhlIHNjZW5lIGdyYXBoIGFuZCBhZGQgYW55IG5ldyBhY2Nlc3NpYmxlIG9iamVjdHMgdG8gdGhlIERPTSBsYXllci5cbiAqIEBwYXJhbSBlbGVtZW50IHtQSVhJLkNvbnRhaW5lcnxQSVhJLlNwcml0ZXxQSVhJLmV4dHJhcy5UaWxpbmdTcHJpdGV9IHRoZSBEaXNwbGF5T2JqZWN0IHRvIGNoZWNrLlxuICogQHByaXZhdGVcbiAqL1xuQWNjZXNzaWJpbGl0eU1hbmFnZXIucHJvdG90eXBlLnVwZGF0ZUFjY2Vzc2libGVPYmplY3RzID0gZnVuY3Rpb24oZGlzcGxheU9iamVjdClcbntcblx0aWYoIWRpc3BsYXlPYmplY3QudmlzaWJsZSlcblx0e1xuXHRcdHJldHVybjtcblx0fVxuXG5cdGlmKGRpc3BsYXlPYmplY3QuYWNjZXNzaWJsZSAmJiBkaXNwbGF5T2JqZWN0LmludGVyYWN0aXZlKVxuXHR7XG5cdFx0aWYoIWRpc3BsYXlPYmplY3QuX2FjY2Vzc2libGVBY3RpdmUpXG5cdFx0e1xuXHRcdFx0dGhpcy5hZGRDaGlsZChkaXNwbGF5T2JqZWN0KTtcblx0XHR9XG5cdCAgIFx0XG5cdCAgIFx0ZGlzcGxheU9iamVjdC5yZW5kZXJJZCA9IHRoaXMucmVuZGVySWQ7XG5cdH1cblxuXHR2YXIgY2hpbGRyZW4gPSBkaXNwbGF5T2JqZWN0LmNoaWxkcmVuO1xuXG5cdGZvciAodmFyIGkgPSBjaGlsZHJlbi5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuXHRcdFxuXHRcdHRoaXMudXBkYXRlQWNjZXNzaWJsZU9iamVjdHMoY2hpbGRyZW5baV0pO1xuXHR9XG59O1xuXG5cbi8qKlxuICogQmVmb3JlIGVhY2ggcmVuZGVyIHRoaXMgZnVuY3Rpb24gd2lsbCBlbnN1cmUgdGhhdCBhbGwgZGl2cyBhcmUgbWFwcGVkIGNvcnJlY3RseSB0byB0aGVpciBEaXNwbGF5T2JqZWN0c1xuICogQHByaXZhdGVcbiAqL1xuQWNjZXNzaWJpbGl0eU1hbmFnZXIucHJvdG90eXBlLnVwZGF0ZSA9IGZ1bmN0aW9uKClcbntcblxuXHQvLyB1cGRhdGUgY2hpbGRyZW4uLi5cblx0dGhpcy51cGRhdGVBY2Nlc3NpYmxlT2JqZWN0cyh0aGlzLnJlbmRlcmVyLl9sYXN0T2JqZWN0UmVuZGVyZWQpO1xuXG5cdHZhciByZWN0ID0gdGhpcy5yZW5kZXJlci52aWV3LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuXHR2YXIgc3ggPSByZWN0LndpZHRoICAvIHRoaXMucmVuZGVyZXIud2lkdGg7XG5cdHZhciBzeSA9IHJlY3QuaGVpZ2h0IC8gdGhpcy5yZW5kZXJlci5oZWlnaHQ7XG5cblx0dmFyIGRpdiA9IHRoaXMuZGl2O1xuXG5cdGRpdi5zdHlsZS5sZWZ0ID0gcmVjdC5sZWZ0ICsgJ3B4Jztcblx0ZGl2LnN0eWxlLnRvcCA9IHJlY3QudG9wICsgJ3B4Jztcblx0ZGl2LnN0eWxlLndpZHRoID0gdGhpcy5yZW5kZXJlci53aWR0aCArICdweCc7XG5cdGRpdi5zdHlsZS5oZWlnaHQgPSB0aGlzLnJlbmRlcmVyLmhlaWdodCArICdweCc7XG5cblx0Zm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmNoaWxkcmVuLmxlbmd0aDsgaSsrKVxuXHR7XG5cblx0XHR2YXIgY2hpbGQgPSB0aGlzLmNoaWxkcmVuW2ldO1xuXG5cdFx0aWYoY2hpbGQucmVuZGVySWQgIT09IHRoaXMucmVuZGVySWQpXG5cdFx0e1xuXHRcdFx0Y2hpbGQuX2FjY2Vzc2libGVBY3RpdmUgPSBmYWxzZTtcblxuICAgICAgICAgICAgY29yZS51dGlscy5yZW1vdmVJdGVtcyh0aGlzLmNoaWxkcmVuLCBpLCAxKTtcblx0XHRcdHRoaXMuZGl2LnJlbW92ZUNoaWxkKCBjaGlsZC5fYWNjZXNzaWJsZURpdiApO1xuXHRcdFx0dGhpcy5wb29sLnB1c2goY2hpbGQuX2FjY2Vzc2libGVEaXYpO1xuXHRcdFx0Y2hpbGQuX2FjY2Vzc2libGVEaXYgPSBudWxsO1xuXG5cdFx0XHRpLS07XG5cblx0XHRcdGlmKHRoaXMuY2hpbGRyZW4ubGVuZ3RoID09PSAwKVxuXHRcdFx0e1xuXHRcdFx0XHR0aGlzLmRlYWN0aXZhdGUoKTtcblx0XHRcdH1cblx0XHR9XG5cdFx0ZWxzZVxuXHRcdHtcblx0XHRcdC8vIG1hcCBkaXYgdG8gZGlzcGxheS4uXG5cdFx0XHRkaXYgPSBjaGlsZC5fYWNjZXNzaWJsZURpdjtcblx0XHRcdHZhciBoaXRBcmVhID0gY2hpbGQuaGl0QXJlYTtcblx0XHRcdHZhciB3dCA9IGNoaWxkLndvcmxkVHJhbnNmb3JtO1xuXG5cdFx0XHRpZihjaGlsZC5oaXRBcmVhKVxuXHRcdFx0e1xuXHRcdFx0XHRkaXYuc3R5bGUubGVmdCA9ICgod3QudHggKyAoaGl0QXJlYS54ICogd3QuYSkpICogc3gpICsgJ3B4Jztcblx0XHRcdFx0ZGl2LnN0eWxlLnRvcCA9ICAoKHd0LnR5ICsgKGhpdEFyZWEueSAqIHd0LmQpKSAqIHN5KSArICAncHgnO1xuXG5cdFx0XHRcdGRpdi5zdHlsZS53aWR0aCA9IChoaXRBcmVhLndpZHRoICogd3QuYSAqIHN4KSArICdweCc7XG5cdFx0XHRcdGRpdi5zdHlsZS5oZWlnaHQgPSAoaGl0QXJlYS5oZWlnaHQgKiB3dC5kICogc3kpICsgJ3B4Jztcblx0XHRcdFxuXHRcdFx0fVxuXHRcdFx0ZWxzZVxuXHRcdFx0e1xuXHRcdFx0XHRoaXRBcmVhID0gY2hpbGQuZ2V0Qm91bmRzKCk7XG5cblx0XHRcdFx0dGhpcy5jYXBIaXRBcmVhKGhpdEFyZWEpO1xuXG5cdFx0XHRcdGRpdi5zdHlsZS5sZWZ0ID0gKGhpdEFyZWEueCAqIHN4KSArICdweCc7XG5cdFx0XHRcdGRpdi5zdHlsZS50b3AgPSAgKGhpdEFyZWEueSAqIHN5KSArICAncHgnO1xuXG5cdFx0XHRcdGRpdi5zdHlsZS53aWR0aCA9IChoaXRBcmVhLndpZHRoICogc3gpICsgJ3B4Jztcblx0XHRcdFx0ZGl2LnN0eWxlLmhlaWdodCA9IChoaXRBcmVhLmhlaWdodCAqIHN5KSArICdweCc7XG5cdFx0XHR9XHRcdFxuXHRcdH1cblx0fVxuXG5cdC8vIGluY3JlbWVudCB0aGUgcmVuZGVyIGlkLi5cblx0dGhpcy5yZW5kZXJJZCsrO1xufTtcblxuQWNjZXNzaWJpbGl0eU1hbmFnZXIucHJvdG90eXBlLmNhcEhpdEFyZWEgPSBmdW5jdGlvbiAoaGl0QXJlYSlcbntcbiAgICBpZiAoaGl0QXJlYS54IDwgMClcbiAgICB7XG4gICAgICAgIGhpdEFyZWEud2lkdGggKz0gaGl0QXJlYS54O1xuICAgICAgICBoaXRBcmVhLnggPSAwO1xuICAgIH1cblxuICAgIGlmIChoaXRBcmVhLnkgPCAwKVxuICAgIHtcbiAgICAgICAgaGl0QXJlYS5oZWlnaHQgKz0gaGl0QXJlYS55O1xuICAgICAgICBoaXRBcmVhLnkgPSAwO1xuICAgIH1cblxuICAgIGlmICggaGl0QXJlYS54ICsgaGl0QXJlYS53aWR0aCA+IHRoaXMucmVuZGVyZXIud2lkdGggKVxuICAgIHtcbiAgICAgICAgaGl0QXJlYS53aWR0aCA9IHRoaXMucmVuZGVyZXIud2lkdGggLSBoaXRBcmVhLng7XG4gICAgfVxuXG4gICAgaWYgKCBoaXRBcmVhLnkgKyBoaXRBcmVhLmhlaWdodCA+IHRoaXMucmVuZGVyZXIuaGVpZ2h0IClcbiAgICB7XG4gICAgICAgIGhpdEFyZWEuaGVpZ2h0ID0gdGhpcy5yZW5kZXJlci5oZWlnaHQgLSBoaXRBcmVhLnk7XG4gICAgfVxufTtcblxuXG4vKipcbiAqIEFkZHMgYSBEaXNwbGF5T2JqZWN0IHRvIHRoZSBhY2Nlc3NpYmlsaXR5IG1hbmFnZXJcbiAqIEBwcml2YXRlXG4gKi9cbkFjY2Vzc2liaWxpdHlNYW5hZ2VyLnByb3RvdHlwZS5hZGRDaGlsZCA9IGZ1bmN0aW9uKGRpc3BsYXlPYmplY3QpXG57XG4vL1x0dGhpcy5hY3RpdmF0ZSgpO1xuXHRcblx0dmFyIGRpdiA9IHRoaXMucG9vbC5wb3AoKTtcblxuXHRpZighZGl2KVxuXHR7XG5cdFx0ZGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYnV0dG9uJyk7IFxuXG5cdCAgICBkaXYuc3R5bGUud2lkdGggPSAxMDAgKyAncHgnO1xuXHQgICAgZGl2LnN0eWxlLmhlaWdodCA9IDEwMCArICdweCc7XG5cdCAgICBkaXYuc3R5bGUuYmFja2dyb3VuZENvbG9yID0gdGhpcy5kZWJ1ZyA/ICdyZ2JhKDI1NSwwLDAsMC41KScgOiAndHJhbnNwYXJlbnQnO1xuXHQgICAgZGl2LnN0eWxlLnBvc2l0aW9uID0gJ2Fic29sdXRlJztcblx0ICAgIGRpdi5zdHlsZS56SW5kZXggPSAyO1xuXHQgICAgZGl2LnN0eWxlLmJvcmRlclN0eWxlID0gJ25vbmUnO1xuXG5cdCAgICBcblx0ICAgIGRpdi5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIHRoaXMuX29uQ2xpY2suYmluZCh0aGlzKSk7XG5cdCAgICBkaXYuYWRkRXZlbnRMaXN0ZW5lcignZm9jdXMnLCB0aGlzLl9vbkZvY3VzLmJpbmQodGhpcykpO1xuXHQgICAgZGl2LmFkZEV2ZW50TGlzdGVuZXIoJ2ZvY3Vzb3V0JywgdGhpcy5fb25Gb2N1c091dC5iaW5kKHRoaXMpKTtcblx0fVxuXHQgICBcdFxuXG5cblxuXHRkaXYudGl0bGUgPSBkaXNwbGF5T2JqZWN0LmFjY2Vzc2libGVUaXRsZSB8fCAnZGlzcGxheU9iamVjdCAnICsgdGhpcy50YWJJbmRleDtcblxuXHQvL1xuXHRcblx0ZGlzcGxheU9iamVjdC5fYWNjZXNzaWJsZUFjdGl2ZSA9IHRydWU7XG5cdGRpc3BsYXlPYmplY3QuX2FjY2Vzc2libGVEaXYgPSBkaXY7XG5cdGRpdi5kaXNwbGF5T2JqZWN0ID0gZGlzcGxheU9iamVjdDtcblxuXG5cdHRoaXMuY2hpbGRyZW4ucHVzaChkaXNwbGF5T2JqZWN0KTtcblx0dGhpcy5kaXYuYXBwZW5kQ2hpbGQoIGRpc3BsYXlPYmplY3QuX2FjY2Vzc2libGVEaXYgKTtcblx0ZGlzcGxheU9iamVjdC5fYWNjZXNzaWJsZURpdi50YWJJbmRleCA9IGRpc3BsYXlPYmplY3QudGFiSW5kZXg7XG59O1xuXG5cbi8qKlxuICogTWFwcyB0aGUgZGl2IGJ1dHRvbiBwcmVzcyB0byBwaXhpJ3MgSW50ZXJhY3Rpb25NYW5hZ2VyIChjbGljaylcbiAqIEBwcml2YXRlXG4gKi9cbkFjY2Vzc2liaWxpdHlNYW5hZ2VyLnByb3RvdHlwZS5fb25DbGljayA9IGZ1bmN0aW9uKGUpXG57XG5cdHZhciBpbnRlcmFjdGlvbk1hbmFnZXIgPSB0aGlzLnJlbmRlcmVyLnBsdWdpbnMuaW50ZXJhY3Rpb247XG5cdGludGVyYWN0aW9uTWFuYWdlci5kaXNwYXRjaEV2ZW50KGUudGFyZ2V0LmRpc3BsYXlPYmplY3QsICdjbGljaycsIGludGVyYWN0aW9uTWFuYWdlci5ldmVudERhdGEpO1xufTtcblxuLyoqXG4gKiBNYXBzIHRoZSBkaXYgZm9jdXMgZXZlbnRzIHRvIHBpeGlzIEludGVyYWN0aW9uTWFuYWdlciAobW91c2VvdmVyKVxuICogQHByaXZhdGVcbiAqL1xuQWNjZXNzaWJpbGl0eU1hbmFnZXIucHJvdG90eXBlLl9vbkZvY3VzID0gZnVuY3Rpb24oZSlcbntcblx0dmFyIGludGVyYWN0aW9uTWFuYWdlciA9IHRoaXMucmVuZGVyZXIucGx1Z2lucy5pbnRlcmFjdGlvbjtcblx0aW50ZXJhY3Rpb25NYW5hZ2VyLmRpc3BhdGNoRXZlbnQoZS50YXJnZXQuZGlzcGxheU9iamVjdCwgJ21vdXNlb3ZlcicsIGludGVyYWN0aW9uTWFuYWdlci5ldmVudERhdGEpO1xufTtcblxuLyoqXG4gKiBNYXBzIHRoZSBkaXYgZm9jdXMgZXZlbnRzIHRvIHBpeGlzIEludGVyYWN0aW9uTWFuYWdlciAobW91c2VvdXQpXG4gKiBAcHJpdmF0ZVxuICovXG5BY2Nlc3NpYmlsaXR5TWFuYWdlci5wcm90b3R5cGUuX29uRm9jdXNPdXQgPSBmdW5jdGlvbihlKVxue1xuXHR2YXIgaW50ZXJhY3Rpb25NYW5hZ2VyID0gdGhpcy5yZW5kZXJlci5wbHVnaW5zLmludGVyYWN0aW9uO1xuXHRpbnRlcmFjdGlvbk1hbmFnZXIuZGlzcGF0Y2hFdmVudChlLnRhcmdldC5kaXNwbGF5T2JqZWN0LCAnbW91c2VvdXQnLCBpbnRlcmFjdGlvbk1hbmFnZXIuZXZlbnREYXRhKTtcbn07XG5cbi8qKlxuICogSXMgY2FsbGVkIHdoZW4gYSBrZXkgaXMgcHJlc3NlZFxuICpcbiAqIEBwcml2YXRlXG4gKi9cbkFjY2Vzc2liaWxpdHlNYW5hZ2VyLnByb3RvdHlwZS5fb25LZXlEb3duID0gZnVuY3Rpb24oZSlcbntcblx0aWYoZS5rZXlDb2RlICE9PSA5KVxuXHR7XG5cdFx0cmV0dXJuO1xuXHR9XG5cblx0dGhpcy5hY3RpdmF0ZSgpO1xufTtcblxuLyoqXG4gKiBJcyBjYWxsZWQgd2hlbiB0aGUgbW91c2UgbW92ZXMgYWNyb3NzIHRoZSByZW5kZXJlciBlbGVtZW50XG4gKlxuICogQHByaXZhdGVcbiAqL1xuQWNjZXNzaWJpbGl0eU1hbmFnZXIucHJvdG90eXBlLl9vbk1vdXNlTW92ZSA9IGZ1bmN0aW9uKClcbntcblx0dGhpcy5kZWFjdGl2YXRlKCk7XG59O1xuXG5cbi8qKlxuICogRGVzdHJveXMgdGhlIGFjY2Vzc2liaWxpdHkgbWFuYWdlclxuICpcbiAqL1xuQWNjZXNzaWJpbGl0eU1hbmFnZXIucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoKSBcbntcblx0dGhpcy5kaXYgPSBudWxsO1xuXG5cdGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5jaGlsZHJlbi5sZW5ndGg7IGkrKylcblx0e1xuXHRcdHRoaXMuY2hpbGRyZW5baV0uZGl2ID0gbnVsbDtcblx0fVxuXG5cdFxuXHR3aW5kb3cuZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignbW91c2Vtb3ZlJywgdGhpcy5fb25Nb3VzZU1vdmUpO1xuXHR3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsIHRoaXMuX29uS2V5RG93bik7XG5cdFx0XG5cdHRoaXMucG9vbCA9IG51bGw7XG5cdHRoaXMuY2hpbGRyZW4gPSBudWxsO1xuXHR0aGlzLnJlbmRlcmVyID0gbnVsbDtcblxufTtcblxuY29yZS5XZWJHTFJlbmRlcmVyLnJlZ2lzdGVyUGx1Z2luKCdhY2Nlc3NpYmlsaXR5JywgQWNjZXNzaWJpbGl0eU1hbmFnZXIpO1xuY29yZS5DYW52YXNSZW5kZXJlci5yZWdpc3RlclBsdWdpbignYWNjZXNzaWJpbGl0eScsIEFjY2Vzc2liaWxpdHlNYW5hZ2VyKTtcblxuIiwiLyoqXG4gKiBEZWZhdWx0IHByb3BlcnR5IHZhbHVlcyBvZiBhY2Nlc3NpYmxlIG9iamVjdHNcbiAqIHVzZWQgYnkge0BsaW5rIFBJWEkuYWNjZXNzaWJpbGl0eS5BY2Nlc3NpYmlsaXR5TWFuYWdlcn0uXG4gKlxuICogQG1peGluXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQGV4YW1wbGVcbiAqICAgICAgZnVuY3Rpb24gTXlPYmplY3QoKSB7fVxuICpcbiAqICAgICAgT2JqZWN0LmFzc2lnbihcbiAqICAgICAgICAgIE15T2JqZWN0LnByb3RvdHlwZSxcbiAqICAgICAgICAgIFBJWEkuYWNjZXNzaWJpbGl0eS5hY2Nlc3NpYmxlVGFyZ2V0XG4gKiAgICAgICk7XG4gKi9cbnZhciBhY2Nlc3NpYmxlVGFyZ2V0ID0ge1xuICAgIFxuICAgIC8qKlxuICAgICAqIEB0b2RvIE5lZWRzIGRvY3MuXG4gICAgICovXG4gICAgYWNjZXNzaWJsZTpmYWxzZSxcblxuICAgIC8qKlxuICAgICAqIEB0b2RvIE5lZWRzIGRvY3MuXG4gICAgICovXG4gICAgYWNjZXNzaWJsZVRpdGxlOm51bGwsXG5cbiAgICAvKipcbiAgICAgKiBAdG9kbyBOZWVkcyBkb2NzLlxuICAgICAqL1xuICAgIHRhYkluZGV4OjAsXG5cbiAgICAvKipcbiAgICAgKiBAdG9kbyBOZWVkcyBkb2NzLlxuICAgICAqL1xuICAgIF9hY2Nlc3NpYmxlQWN0aXZlOmZhbHNlLFxuXG4gICAgLyoqXG4gICAgICogQHRvZG8gTmVlZHMgZG9jcy5cbiAgICAgKi9cbiAgICBfYWNjZXNzaWJsZURpdjpmYWxzZVxuXG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGFjY2Vzc2libGVUYXJnZXQ7XG4iLCIvKipcbiAqIEBmaWxlICAgICAgICBNYWluIGV4cG9ydCBvZiB0aGUgUElYSSBhY2Nlc3NpYmlsaXR5IGxpYnJhcnlcbiAqIEBhdXRob3IgICAgICBNYXQgR3JvdmVzIDxtYXRAZ29vZGJveWRpZ2l0YWwuY29tPlxuICogQGNvcHlyaWdodCAgIDIwMTMtMjAxNSBHb29kQm95RGlnaXRhbFxuICogQGxpY2Vuc2UgICAgIHtAbGluayBodHRwczovL2dpdGh1Yi5jb20vcGl4aWpzL3BpeGkuanMvYmxvYi9tYXN0ZXIvTElDRU5TRXxNSVQgTGljZW5zZX1cbiAqL1xuXG4vKipcbiAqIEBuYW1lc3BhY2UgUElYSS5pbnRlcmFjdGlvblxuICovXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgICBhY2Nlc3NpYmxlVGFyZ2V0OiAgICAgcmVxdWlyZSgnLi9hY2Nlc3NpYmxlVGFyZ2V0JyksXG4gICAgQWNjZXNzaWJpbGl0eU1hbmFnZXI6IHJlcXVpcmUoJy4vQWNjZXNzaWJpbGl0eU1hbmFnZXInKVxufTtcbiIsIi8qKlxuICogQ29uc3RhbnQgdmFsdWVzIHVzZWQgaW4gcGl4aVxuICpcbiAqIEBsZW5kcyBQSVhJXG4gKi9cbnZhciBDT05TVCA9IHtcbiAgICAvKipcbiAgICAgKiBTdHJpbmcgb2YgdGhlIGN1cnJlbnQgUElYSSB2ZXJzaW9uXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQGNvbnN0YW50XG4gICAgICogQHByb3BlcnR5IHtzdHJpbmd9IFZFUlNJT05cbiAgICAgKi9cbiAgICBWRVJTSU9OOiByZXF1aXJlKCcuLi8uLi9wYWNrYWdlLmpzb24nKS52ZXJzaW9uLFxuXG4gICAgLyoqXG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IFBJXzIgLSBUd28gUGlcbiAgICAgKiBAY29uc3RhbnRcbiAgICAgKiBAc3RhdGljXG4gICAgICovXG4gICAgUElfMjogTWF0aC5QSSAqIDIsXG5cbiAgICAvKipcbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gUkFEX1RPX0RFRyAtIENvbnN0YW50IGNvbnZlcnNpb24gZmFjdG9yIGZvciBjb252ZXJ0aW5nIHJhZGlhbnMgdG8gZGVncmVlc1xuICAgICAqIEBjb25zdGFudFxuICAgICAqIEBzdGF0aWNcbiAgICAgKi9cbiAgICBSQURfVE9fREVHOiAxODAgLyBNYXRoLlBJLFxuXG4gICAgLyoqXG4gICAgICogQHByb3BlcnR5IHtOdW1iZXJ9IERFR19UT19SQUQgLSBDb25zdGFudCBjb252ZXJzaW9uIGZhY3RvciBmb3IgY29udmVydGluZyBkZWdyZWVzIHRvIHJhZGlhbnNcbiAgICAgKiBAY29uc3RhbnRcbiAgICAgKiBAc3RhdGljXG4gICAgICovXG4gICAgREVHX1RPX1JBRDogTWF0aC5QSSAvIDE4MCxcblxuICAgIC8qKlxuICAgICAqIFRhcmdldCBmcmFtZXMgcGVyIG1pbGxpc2Vjb25kLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBjb25zdGFudFxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBUQVJHRVRfRlBNUz0wLjA2XG4gICAgICovXG4gICAgVEFSR0VUX0ZQTVM6IDAuMDYsXG5cbiAgICAvKipcbiAgICAgKiBDb25zdGFudCB0byBpZGVudGlmeSB0aGUgUmVuZGVyZXIgVHlwZS5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAY29uc3RhbnRcbiAgICAgKiBAcHJvcGVydHkge29iamVjdH0gUkVOREVSRVJfVFlQRVxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBSRU5ERVJFUl9UWVBFLlVOS05PV05cbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gUkVOREVSRVJfVFlQRS5XRUJHTFxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBSRU5ERVJFUl9UWVBFLkNBTlZBU1xuICAgICAqL1xuICAgIFJFTkRFUkVSX1RZUEU6IHtcbiAgICAgICAgVU5LTk9XTjogICAgMCxcbiAgICAgICAgV0VCR0w6ICAgICAgMSxcbiAgICAgICAgQ0FOVkFTOiAgICAgMlxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBWYXJpb3VzIGJsZW5kIG1vZGVzIHN1cHBvcnRlZCBieSBQSVhJLiBJTVBPUlRBTlQgLSBUaGUgV2ViR0wgcmVuZGVyZXIgb25seSBzdXBwb3J0c1xuICAgICAqIHRoZSBOT1JNQUwsIEFERCwgTVVMVElQTFkgYW5kIFNDUkVFTiBibGVuZCBtb2Rlcy4gQW55dGhpbmcgZWxzZSB3aWxsIHNpbGVudGx5IGFjdCBsaWtlXG4gICAgICogTk9STUFMLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBjb25zdGFudFxuICAgICAqIEBwcm9wZXJ0eSB7b2JqZWN0fSBCTEVORF9NT0RFU1xuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBCTEVORF9NT0RFUy5OT1JNQUxcbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gQkxFTkRfTU9ERVMuQUREXG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IEJMRU5EX01PREVTLk1VTFRJUExZXG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IEJMRU5EX01PREVTLlNDUkVFTlxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBCTEVORF9NT0RFUy5PVkVSTEFZXG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IEJMRU5EX01PREVTLkRBUktFTlxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBCTEVORF9NT0RFUy5MSUdIVEVOXG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IEJMRU5EX01PREVTLkNPTE9SX0RPREdFXG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IEJMRU5EX01PREVTLkNPTE9SX0JVUk5cbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gQkxFTkRfTU9ERVMuSEFSRF9MSUdIVFxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBCTEVORF9NT0RFUy5TT0ZUX0xJR0hUXG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IEJMRU5EX01PREVTLkRJRkZFUkVOQ0VcbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gQkxFTkRfTU9ERVMuRVhDTFVTSU9OXG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IEJMRU5EX01PREVTLkhVRVxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBCTEVORF9NT0RFUy5TQVRVUkFUSU9OXG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IEJMRU5EX01PREVTLkNPTE9SXG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IEJMRU5EX01PREVTLkxVTUlOT1NJVFlcbiAgICAgKi9cbiAgICBCTEVORF9NT0RFUzoge1xuICAgICAgICBOT1JNQUw6ICAgICAgICAgMCxcbiAgICAgICAgQUREOiAgICAgICAgICAgIDEsXG4gICAgICAgIE1VTFRJUExZOiAgICAgICAyLFxuICAgICAgICBTQ1JFRU46ICAgICAgICAgMyxcbiAgICAgICAgT1ZFUkxBWTogICAgICAgIDQsXG4gICAgICAgIERBUktFTjogICAgICAgICA1LFxuICAgICAgICBMSUdIVEVOOiAgICAgICAgNixcbiAgICAgICAgQ09MT1JfRE9ER0U6ICAgIDcsXG4gICAgICAgIENPTE9SX0JVUk46ICAgICA4LFxuICAgICAgICBIQVJEX0xJR0hUOiAgICAgOSxcbiAgICAgICAgU09GVF9MSUdIVDogICAgIDEwLFxuICAgICAgICBESUZGRVJFTkNFOiAgICAgMTEsXG4gICAgICAgIEVYQ0xVU0lPTjogICAgICAxMixcbiAgICAgICAgSFVFOiAgICAgICAgICAgIDEzLFxuICAgICAgICBTQVRVUkFUSU9OOiAgICAgMTQsXG4gICAgICAgIENPTE9SOiAgICAgICAgICAxNSxcbiAgICAgICAgTFVNSU5PU0lUWTogICAgIDE2XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFZhcmlvdXMgd2ViZ2wgZHJhdyBtb2Rlcy4gVGhlc2UgY2FuIGJlIHVzZWQgdG8gc3BlY2lmeSB3aGljaCBHTCBkcmF3TW9kZSB0byB1c2VcbiAgICAgKiB1bmRlciBjZXJ0YWluIHNpdHVhdGlvbnMgYW5kIHJlbmRlcmVycy5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAY29uc3RhbnRcbiAgICAgKiBAcHJvcGVydHkge29iamVjdH0gRFJBV19NT0RFU1xuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBEUkFXX01PREVTLlBPSU5UU1xuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBEUkFXX01PREVTLkxJTkVTXG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IERSQVdfTU9ERVMuTElORV9MT09QXG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IERSQVdfTU9ERVMuTElORV9TVFJJUFxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBEUkFXX01PREVTLlRSSUFOR0xFU1xuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBEUkFXX01PREVTLlRSSUFOR0xFX1NUUklQXG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IERSQVdfTU9ERVMuVFJJQU5HTEVfRkFOXG4gICAgICovXG4gICAgRFJBV19NT0RFUzoge1xuICAgICAgICBQT0lOVFM6ICAgICAgICAgMCxcbiAgICAgICAgTElORVM6ICAgICAgICAgIDEsXG4gICAgICAgIExJTkVfTE9PUDogICAgICAyLFxuICAgICAgICBMSU5FX1NUUklQOiAgICAgMyxcbiAgICAgICAgVFJJQU5HTEVTOiAgICAgIDQsXG4gICAgICAgIFRSSUFOR0xFX1NUUklQOiA1LFxuICAgICAgICBUUklBTkdMRV9GQU46ICAgNlxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBUaGUgc2NhbGUgbW9kZXMgdGhhdCBhcmUgc3VwcG9ydGVkIGJ5IHBpeGkuXG4gICAgICpcbiAgICAgKiBUaGUgREVGQVVMVCBzY2FsZSBtb2RlIGFmZmVjdHMgdGhlIGRlZmF1bHQgc2NhbGluZyBtb2RlIG9mIGZ1dHVyZSBvcGVyYXRpb25zLlxuICAgICAqIEl0IGNhbiBiZSByZS1hc3NpZ25lZCB0byBlaXRoZXIgTElORUFSIG9yIE5FQVJFU1QsIGRlcGVuZGluZyB1cG9uIHN1aXRhYmlsaXR5LlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBjb25zdGFudFxuICAgICAqIEBwcm9wZXJ0eSB7b2JqZWN0fSBTQ0FMRV9NT0RFU1xuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBTQ0FMRV9NT0RFUy5ERUZBVUxUPUxJTkVBUlxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBTQ0FMRV9NT0RFUy5MSU5FQVIgU21vb3RoIHNjYWxpbmdcbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gU0NBTEVfTU9ERVMuTkVBUkVTVCBQaXhlbGF0aW5nIHNjYWxpbmdcbiAgICAgKi9cbiAgICBTQ0FMRV9NT0RFUzoge1xuICAgICAgICBERUZBVUxUOiAgICAwLFxuICAgICAgICBMSU5FQVI6ICAgICAwLFxuICAgICAgICBORUFSRVNUOiAgICAxXG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFRoZSBwcmVmaXggdGhhdCBkZW5vdGVzIGEgVVJMIGlzIGZvciBhIHJldGluYSBhc3NldFxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBjb25zdGFudFxuICAgICAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBSRVRJTkFfUFJFRklYXG4gICAgICovXG4gICAgLy9leGFtcGxlOiAnQDJ4JyxcbiAgICBSRVRJTkFfUFJFRklYOiAvQCguKyl4LyxcblxuICAgIFJFU09MVVRJT046MSxcblxuICAgIEZJTFRFUl9SRVNPTFVUSU9OOjEsXG5cbiAgICAvKipcbiAgICAgKiBUaGUgZGVmYXVsdCByZW5kZXIgb3B0aW9ucyBpZiBub25lIGFyZSBzdXBwbGllZCB0byB7QGxpbmsgUElYSS5XZWJHTFJlbmRlcmVyfVxuICAgICAqIG9yIHtAbGluayBQSVhJLkNhbnZhc1JlbmRlcmVyfS5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAY29uc3RhbnRcbiAgICAgKiBAcHJvcGVydHkge29iamVjdH0gREVGQVVMVF9SRU5ERVJfT1BUSU9OU1xuICAgICAqIEBwcm9wZXJ0eSB7SFRNTENhbnZhc0VsZW1lbnR9IERFRkFVTFRfUkVOREVSX09QVElPTlMudmlldz1udWxsXG4gICAgICogQHByb3BlcnR5IHtib29sZWFufSBERUZBVUxUX1JFTkRFUl9PUFRJT05TLnRyYW5zcGFyZW50PWZhbHNlXG4gICAgICogQHByb3BlcnR5IHtib29sZWFufSBERUZBVUxUX1JFTkRFUl9PUFRJT05TLmFudGlhbGlhcz1mYWxzZVxuICAgICAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gREVGQVVMVF9SRU5ERVJfT1BUSU9OUy5mb3JjZUZYQUE9ZmFsc2VcbiAgICAgKiBAcHJvcGVydHkge2Jvb2xlYW59IERFRkFVTFRfUkVOREVSX09QVElPTlMucHJlc2VydmVEcmF3aW5nQnVmZmVyPWZhbHNlXG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IERFRkFVTFRfUkVOREVSX09QVElPTlMucmVzb2x1dGlvbj0xXG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IERFRkFVTFRfUkVOREVSX09QVElPTlMuYmFja2dyb3VuZENvbG9yPTB4MDAwMDAwXG4gICAgICogQHByb3BlcnR5IHtib29sZWFufSBERUZBVUxUX1JFTkRFUl9PUFRJT05TLmNsZWFyQmVmb3JlUmVuZGVyPXRydWVcbiAgICAgKiBAcHJvcGVydHkge2Jvb2xlYW59IERFRkFVTFRfUkVOREVSX09QVElPTlMuYXV0b1Jlc2l6ZT1mYWxzZVxuICAgICAqL1xuICAgIERFRkFVTFRfUkVOREVSX09QVElPTlM6IHtcbiAgICAgICAgdmlldzogbnVsbCxcbiAgICAgICAgcmVzb2x1dGlvbjogMSxcbiAgICAgICAgYW50aWFsaWFzOiBmYWxzZSxcbiAgICAgICAgZm9yY2VGWEFBOiBmYWxzZSxcbiAgICAgICAgYXV0b1Jlc2l6ZTogZmFsc2UsXG4gICAgICAgIHRyYW5zcGFyZW50OiBmYWxzZSxcbiAgICAgICAgYmFja2dyb3VuZENvbG9yOiAweDAwMDAwMCxcbiAgICAgICAgY2xlYXJCZWZvcmVSZW5kZXI6IHRydWUsXG4gICAgICAgIHByZXNlcnZlRHJhd2luZ0J1ZmZlcjogZmFsc2UsXG4gICAgICAgIHJvdW5kUGl4ZWxzOiBmYWxzZVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBDb25zdGFudHMgdGhhdCBpZGVudGlmeSBzaGFwZXMsIG1haW5seSB0byBwcmV2ZW50IGBpbnN0YW5jZW9mYCBjYWxscy5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAY29uc3RhbnRcbiAgICAgKiBAcHJvcGVydHkge29iamVjdH0gU0hBUEVTXG4gICAgICogQHByb3BlcnR5IHtvYmplY3R9IFNIQVBFUy5QT0xZPTBcbiAgICAgKiBAcHJvcGVydHkge29iamVjdH0gU0hBUEVTLlJFQ1Q9MVxuICAgICAqIEBwcm9wZXJ0eSB7b2JqZWN0fSBTSEFQRVMuQ0lSQz0yXG4gICAgICogQHByb3BlcnR5IHtvYmplY3R9IFNIQVBFUy5FTElQPTNcbiAgICAgKiBAcHJvcGVydHkge29iamVjdH0gU0hBUEVTLlJSRUM9NFxuICAgICAqL1xuICAgIFNIQVBFUzoge1xuICAgICAgICBQT0xZOiAwLFxuICAgICAgICBSRUNUOiAxLFxuICAgICAgICBDSVJDOiAyLFxuICAgICAgICBFTElQOiAzLFxuICAgICAgICBSUkVDOiA0XG4gICAgfSxcblxuICAgIC8vIFRPRE86IG1heWJlIGNoYW5nZSB0byBTUFJJVEUuQkFUQ0hfU0laRTogMjAwMFxuICAgIC8vIFRPRE86IG1heWJlIGFkZCBQQVJUSUNMRS5CQVRDSF9TSVpFOiAxNTAwMFxuICAgIFNQUklURV9CQVRDSF9TSVpFOiAyMDAwIC8vbmljZSBiYWxhbmNlIGJldHdlZW4gbW9iaWxlIGFuZCBkZXNrdG9wIG1hY2hpbmVzXG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IENPTlNUO1xuIiwidmFyIG1hdGggPSByZXF1aXJlKCcuLi9tYXRoJyksXG4gICAgdXRpbHMgPSByZXF1aXJlKCcuLi91dGlscycpLFxuICAgIERpc3BsYXlPYmplY3QgPSByZXF1aXJlKCcuL0Rpc3BsYXlPYmplY3QnKSxcbiAgICBSZW5kZXJUZXh0dXJlID0gcmVxdWlyZSgnLi4vdGV4dHVyZXMvUmVuZGVyVGV4dHVyZScpLFxuICAgIF90ZW1wTWF0cml4ID0gbmV3IG1hdGguTWF0cml4KCk7XG5cbi8qKlxuICogQSBDb250YWluZXIgcmVwcmVzZW50cyBhIGNvbGxlY3Rpb24gb2YgZGlzcGxheSBvYmplY3RzLlxuICogSXQgaXMgdGhlIGJhc2UgY2xhc3Mgb2YgYWxsIGRpc3BsYXkgb2JqZWN0cyB0aGF0IGFjdCBhcyBhIGNvbnRhaW5lciBmb3Igb3RoZXIgb2JqZWN0cy5cbiAqXG4gKmBgYGpzXG4gKiB2YXIgY29udGFpbmVyID0gbmV3IFBJWEkuQ29udGFpbmVyKCk7XG4gKiBjb250YWluZXIuYWRkQ2hpbGQoc3ByaXRlKTtcbiAqIGBgYFxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLkRpc3BsYXlPYmplY3RcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKi9cbmZ1bmN0aW9uIENvbnRhaW5lcigpXG57XG4gICAgRGlzcGxheU9iamVjdC5jYWxsKHRoaXMpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGFycmF5IG9mIGNoaWxkcmVuIG9mIHRoaXMgY29udGFpbmVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5EaXNwbGF5T2JqZWN0W119XG4gICAgICogQHJlYWRvbmx5XG4gICAgICovXG4gICAgdGhpcy5jaGlsZHJlbiA9IFtdO1xufVxuXG4vLyBjb25zdHJ1Y3RvclxuQ29udGFpbmVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoRGlzcGxheU9iamVjdC5wcm90b3R5cGUpO1xuQ29udGFpbmVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IENvbnRhaW5lcjtcbm1vZHVsZS5leHBvcnRzID0gQ29udGFpbmVyO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhDb250YWluZXIucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogVGhlIHdpZHRoIG9mIHRoZSBDb250YWluZXIsIHNldHRpbmcgdGhpcyB3aWxsIGFjdHVhbGx5IG1vZGlmeSB0aGUgc2NhbGUgdG8gYWNoaWV2ZSB0aGUgdmFsdWUgc2V0XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuQ29udGFpbmVyI1xuICAgICAqL1xuICAgIHdpZHRoOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuc2NhbGUueCAqIHRoaXMuZ2V0TG9jYWxCb3VuZHMoKS53aWR0aDtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcblxuICAgICAgICAgICAgdmFyIHdpZHRoID0gdGhpcy5nZXRMb2NhbEJvdW5kcygpLndpZHRoO1xuXG4gICAgICAgICAgICBpZiAod2lkdGggIT09IDApXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdGhpcy5zY2FsZS54ID0gdmFsdWUgLyB3aWR0aDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNjYWxlLnggPSAxO1xuICAgICAgICAgICAgfVxuXG5cbiAgICAgICAgICAgIHRoaXMuX3dpZHRoID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVGhlIGhlaWdodCBvZiB0aGUgQ29udGFpbmVyLCBzZXR0aW5nIHRoaXMgd2lsbCBhY3R1YWxseSBtb2RpZnkgdGhlIHNjYWxlIHRvIGFjaGlldmUgdGhlIHZhbHVlIHNldFxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLkNvbnRhaW5lciNcbiAgICAgKi9cbiAgICBoZWlnaHQ6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gIHRoaXMuc2NhbGUueSAqIHRoaXMuZ2V0TG9jYWxCb3VuZHMoKS5oZWlnaHQ7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG5cbiAgICAgICAgICAgIHZhciBoZWlnaHQgPSB0aGlzLmdldExvY2FsQm91bmRzKCkuaGVpZ2h0O1xuXG4gICAgICAgICAgICBpZiAoaGVpZ2h0ICE9PSAwKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHRoaXMuc2NhbGUueSA9IHZhbHVlIC8gaGVpZ2h0IDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNjYWxlLnkgPSAxO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLl9oZWlnaHQgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuXG4vKipcbiAqIE92ZXJyaWRhYmxlIG1ldGhvZCB0aGF0IGNhbiBiZSB1c2VkIGJ5IENvbnRhaW5lciBzdWJjbGFzc2VzIHdoZW5ldmVyIHRoZSBjaGlsZHJlbiBhcnJheSBpcyBtb2RpZmllZFxuICpcbiAqIEBwcml2YXRlXG4gKi9cbkNvbnRhaW5lci5wcm90b3R5cGUub25DaGlsZHJlbkNoYW5nZSA9IGZ1bmN0aW9uICgpIHt9O1xuXG4vKipcbiAqIEFkZHMgYSBjaGlsZCB0byB0aGUgY29udGFpbmVyLlxuICogXG4gKiBZb3UgY2FuIGFsc28gYWRkIG11bHRwbGUgaXRlbXMgbGlrZSBzbzogbXlDb250YWluZXIuYWRkQ2hpbGQodGhpbmtPbmUsIHRoaW5nVHdvLCB0aGluZ1RocmVlKVxuICogQHBhcmFtIGNoaWxkIHtQSVhJLkRpc3BsYXlPYmplY3R9IFRoZSBEaXNwbGF5T2JqZWN0IHRvIGFkZCB0byB0aGUgY29udGFpbmVyXG4gKiBAcmV0dXJuIHtQSVhJLkRpc3BsYXlPYmplY3R9IFRoZSBjaGlsZCB0aGF0IHdhcyBhZGRlZC5cbiAqL1xuQ29udGFpbmVyLnByb3RvdHlwZS5hZGRDaGlsZCA9IGZ1bmN0aW9uIChjaGlsZClcbnsgXG4gICAgdmFyIGFyZ3VtZW50c0xlbmd0aCA9IGFyZ3VtZW50cy5sZW5ndGg7XG5cbiAgICAvLyBpZiB0aGVyZSBpcyBvbmx5IG9uZSBhcmd1bWVudCB3ZSBjYW4gYnlwYXNzIGxvb3BpbmcgdGhyb3VnaCB0aGUgdGhlbVxuICAgIGlmKGFyZ3VtZW50c0xlbmd0aCA+IDEpXG4gICAge1xuICAgICAgICAvLyBsb29wIHRocm91Z2ggdGhlIGFyZ3VtZW50cyBwcm9wZXJ0eSBhbmQgYWRkIGFsbCBjaGlsZHJlblxuICAgICAgICAvLyB1c2UgaXQgdGhlIHJpZ2h0IHdheSAoLmxlbmd0aCBhbmQgW2ldKSBzbyB0aGF0IHRoaXMgZnVuY3Rpb24gY2FuIHN0aWxsIGJlIG9wdGltaXNlZCBieSBKUyBydW50aW1lc1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFyZ3VtZW50c0xlbmd0aDsgaSsrKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmFkZENoaWxkKCBhcmd1bWVudHNbaV0gKTtcbiAgICAgICAgfVxuICAgIH0gICAgIFxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIC8vIGlmIHRoZSBjaGlsZCBoYXMgYSBwYXJlbnQgdGhlbiBsZXRzIHJlbW92ZSBpdCBhcyBQaXhpIG9iamVjdHMgY2FuIG9ubHkgZXhpc3QgaW4gb25lIHBsYWNlXG4gICAgICAgIGlmIChjaGlsZC5wYXJlbnQpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNoaWxkLnBhcmVudC5yZW1vdmVDaGlsZChjaGlsZCk7XG4gICAgICAgIH1cblxuICAgICAgICBjaGlsZC5wYXJlbnQgPSB0aGlzO1xuICAgICAgICBcbiAgICAgICAgdGhpcy5jaGlsZHJlbi5wdXNoKGNoaWxkKTtcblxuICAgICAgICAvLyBUT0RPIC0gbGV0cyBlaXRoZXIgZG8gYWxsIGNhbGxiYWNrcyBvciBhbGwgZXZlbnRzLi4gbm90IGJvdGghXG4gICAgICAgIHRoaXMub25DaGlsZHJlbkNoYW5nZSh0aGlzLmNoaWxkcmVuLmxlbmd0aC0xKTtcbiAgICAgICAgY2hpbGQuZW1pdCgnYWRkZWQnLCB0aGlzKTtcbiAgICB9XG5cbiAgICByZXR1cm4gY2hpbGQ7XG59O1xuXG4vKipcbiAqIEFkZHMgYSBjaGlsZCB0byB0aGUgY29udGFpbmVyIGF0IGEgc3BlY2lmaWVkIGluZGV4LiBJZiB0aGUgaW5kZXggaXMgb3V0IG9mIGJvdW5kcyBhbiBlcnJvciB3aWxsIGJlIHRocm93blxuICpcbiAqIEBwYXJhbSBjaGlsZCB7UElYSS5EaXNwbGF5T2JqZWN0fSBUaGUgY2hpbGQgdG8gYWRkXG4gKiBAcGFyYW0gaW5kZXgge251bWJlcn0gVGhlIGluZGV4IHRvIHBsYWNlIHRoZSBjaGlsZCBpblxuICogQHJldHVybiB7UElYSS5EaXNwbGF5T2JqZWN0fSBUaGUgY2hpbGQgdGhhdCB3YXMgYWRkZWQuXG4gKi9cbkNvbnRhaW5lci5wcm90b3R5cGUuYWRkQ2hpbGRBdCA9IGZ1bmN0aW9uIChjaGlsZCwgaW5kZXgpXG57XG4gICAgaWYgKGluZGV4ID49IDAgJiYgaW5kZXggPD0gdGhpcy5jaGlsZHJlbi5sZW5ndGgpXG4gICAge1xuICAgICAgICBpZiAoY2hpbGQucGFyZW50KVxuICAgICAgICB7XG4gICAgICAgICAgICBjaGlsZC5wYXJlbnQucmVtb3ZlQ2hpbGQoY2hpbGQpO1xuICAgICAgICB9XG5cbiAgICAgICAgY2hpbGQucGFyZW50ID0gdGhpcztcblxuICAgICAgICB0aGlzLmNoaWxkcmVuLnNwbGljZShpbmRleCwgMCwgY2hpbGQpO1xuXG4gICAgICAgIC8vIFRPRE8gLSBsZXRzIGVpdGhlciBkbyBhbGwgY2FsbGJhY2tzIG9yIGFsbCBldmVudHMuLiBub3QgYm90aCFcbiAgICAgICAgdGhpcy5vbkNoaWxkcmVuQ2hhbmdlKGluZGV4KTtcbiAgICAgICAgY2hpbGQuZW1pdCgnYWRkZWQnLCB0aGlzKTtcblxuICAgICAgICByZXR1cm4gY2hpbGQ7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihjaGlsZCArICdhZGRDaGlsZEF0OiBUaGUgaW5kZXggJysgaW5kZXggKycgc3VwcGxpZWQgaXMgb3V0IG9mIGJvdW5kcyAnICsgdGhpcy5jaGlsZHJlbi5sZW5ndGgpO1xuICAgIH1cbn07XG5cbi8qKlxuICogU3dhcHMgdGhlIHBvc2l0aW9uIG9mIDIgRGlzcGxheSBPYmplY3RzIHdpdGhpbiB0aGlzIGNvbnRhaW5lci5cbiAqXG4gKiBAcGFyYW0gY2hpbGQge1BJWEkuRGlzcGxheU9iamVjdH1cbiAqIEBwYXJhbSBjaGlsZDIge1BJWEkuRGlzcGxheU9iamVjdH1cbiAqL1xuQ29udGFpbmVyLnByb3RvdHlwZS5zd2FwQ2hpbGRyZW4gPSBmdW5jdGlvbiAoY2hpbGQsIGNoaWxkMilcbntcbiAgICBpZiAoY2hpbGQgPT09IGNoaWxkMilcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB2YXIgaW5kZXgxID0gdGhpcy5nZXRDaGlsZEluZGV4KGNoaWxkKTtcbiAgICB2YXIgaW5kZXgyID0gdGhpcy5nZXRDaGlsZEluZGV4KGNoaWxkMik7XG5cbiAgICBpZiAoaW5kZXgxIDwgMCB8fCBpbmRleDIgPCAwKVxuICAgIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdzd2FwQ2hpbGRyZW46IEJvdGggdGhlIHN1cHBsaWVkIERpc3BsYXlPYmplY3RzIG11c3QgYmUgY2hpbGRyZW4gb2YgdGhlIGNhbGxlci4nKTtcbiAgICB9XG5cbiAgICB0aGlzLmNoaWxkcmVuW2luZGV4MV0gPSBjaGlsZDI7XG4gICAgdGhpcy5jaGlsZHJlbltpbmRleDJdID0gY2hpbGQ7XG4gICAgdGhpcy5vbkNoaWxkcmVuQ2hhbmdlKGluZGV4MSA8IGluZGV4MiA/IGluZGV4MSA6IGluZGV4Mik7XG59O1xuXG4vKipcbiAqIFJldHVybnMgdGhlIGluZGV4IHBvc2l0aW9uIG9mIGEgY2hpbGQgRGlzcGxheU9iamVjdCBpbnN0YW5jZVxuICpcbiAqIEBwYXJhbSBjaGlsZCB7UElYSS5EaXNwbGF5T2JqZWN0fSBUaGUgRGlzcGxheU9iamVjdCBpbnN0YW5jZSB0byBpZGVudGlmeVxuICogQHJldHVybiB7bnVtYmVyfSBUaGUgaW5kZXggcG9zaXRpb24gb2YgdGhlIGNoaWxkIGRpc3BsYXkgb2JqZWN0IHRvIGlkZW50aWZ5XG4gKi9cbkNvbnRhaW5lci5wcm90b3R5cGUuZ2V0Q2hpbGRJbmRleCA9IGZ1bmN0aW9uIChjaGlsZClcbntcbiAgICB2YXIgaW5kZXggPSB0aGlzLmNoaWxkcmVuLmluZGV4T2YoY2hpbGQpO1xuXG4gICAgaWYgKGluZGV4ID09PSAtMSlcbiAgICB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignVGhlIHN1cHBsaWVkIERpc3BsYXlPYmplY3QgbXVzdCBiZSBhIGNoaWxkIG9mIHRoZSBjYWxsZXInKTtcbiAgICB9XG5cbiAgICByZXR1cm4gaW5kZXg7XG59O1xuXG4vKipcbiAqIENoYW5nZXMgdGhlIHBvc2l0aW9uIG9mIGFuIGV4aXN0aW5nIGNoaWxkIGluIHRoZSBkaXNwbGF5IG9iamVjdCBjb250YWluZXJcbiAqXG4gKiBAcGFyYW0gY2hpbGQge1BJWEkuRGlzcGxheU9iamVjdH0gVGhlIGNoaWxkIERpc3BsYXlPYmplY3QgaW5zdGFuY2UgZm9yIHdoaWNoIHlvdSB3YW50IHRvIGNoYW5nZSB0aGUgaW5kZXggbnVtYmVyXG4gKiBAcGFyYW0gaW5kZXgge251bWJlcn0gVGhlIHJlc3VsdGluZyBpbmRleCBudW1iZXIgZm9yIHRoZSBjaGlsZCBkaXNwbGF5IG9iamVjdFxuICovXG5Db250YWluZXIucHJvdG90eXBlLnNldENoaWxkSW5kZXggPSBmdW5jdGlvbiAoY2hpbGQsIGluZGV4KVxue1xuICAgIGlmIChpbmRleCA8IDAgfHwgaW5kZXggPj0gdGhpcy5jaGlsZHJlbi5sZW5ndGgpXG4gICAge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RoZSBzdXBwbGllZCBpbmRleCBpcyBvdXQgb2YgYm91bmRzJyk7XG4gICAgfVxuXG4gICAgdmFyIGN1cnJlbnRJbmRleCA9IHRoaXMuZ2V0Q2hpbGRJbmRleChjaGlsZCk7XG5cbiAgICB1dGlscy5yZW1vdmVJdGVtcyh0aGlzLmNoaWxkcmVuLCBjdXJyZW50SW5kZXgsIDEpOyAvLyByZW1vdmUgZnJvbSBvbGQgcG9zaXRpb25cbiAgICB0aGlzLmNoaWxkcmVuLnNwbGljZShpbmRleCwgMCwgY2hpbGQpOyAvL2FkZCBhdCBuZXcgcG9zaXRpb25cbiAgICB0aGlzLm9uQ2hpbGRyZW5DaGFuZ2UoaW5kZXgpO1xufTtcblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBjaGlsZCBhdCB0aGUgc3BlY2lmaWVkIGluZGV4XG4gKlxuICogQHBhcmFtIGluZGV4IHtudW1iZXJ9IFRoZSBpbmRleCB0byBnZXQgdGhlIGNoaWxkIGF0XG4gKiBAcmV0dXJuIHtQSVhJLkRpc3BsYXlPYmplY3R9IFRoZSBjaGlsZCBhdCB0aGUgZ2l2ZW4gaW5kZXgsIGlmIGFueS5cbiAqL1xuQ29udGFpbmVyLnByb3RvdHlwZS5nZXRDaGlsZEF0ID0gZnVuY3Rpb24gKGluZGV4KVxue1xuICAgIGlmIChpbmRleCA8IDAgfHwgaW5kZXggPj0gdGhpcy5jaGlsZHJlbi5sZW5ndGgpXG4gICAge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2dldENoaWxkQXQ6IFN1cHBsaWVkIGluZGV4ICcgKyBpbmRleCArICcgZG9lcyBub3QgZXhpc3QgaW4gdGhlIGNoaWxkIGxpc3QsIG9yIHRoZSBzdXBwbGllZCBEaXNwbGF5T2JqZWN0IGlzIG5vdCBhIGNoaWxkIG9mIHRoZSBjYWxsZXInKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5jaGlsZHJlbltpbmRleF07XG59O1xuXG4vKipcbiAqIFJlbW92ZXMgYSBjaGlsZCBmcm9tIHRoZSBjb250YWluZXIuXG4gKlxuICogQHBhcmFtIGNoaWxkIHtQSVhJLkRpc3BsYXlPYmplY3R9IFRoZSBEaXNwbGF5T2JqZWN0IHRvIHJlbW92ZVxuICogQHJldHVybiB7UElYSS5EaXNwbGF5T2JqZWN0fSBUaGUgY2hpbGQgdGhhdCB3YXMgcmVtb3ZlZC5cbiAqL1xuQ29udGFpbmVyLnByb3RvdHlwZS5yZW1vdmVDaGlsZCA9IGZ1bmN0aW9uIChjaGlsZClcbntcbiAgICB2YXIgYXJndW1lbnRzTGVuZ3RoID0gYXJndW1lbnRzLmxlbmd0aDtcblxuICAgIC8vIGlmIHRoZXJlIGlzIG9ubHkgb25lIGFyZ3VtZW50IHdlIGNhbiBieXBhc3MgbG9vcGluZyB0aHJvdWdoIHRoZSB0aGVtXG4gICAgaWYoYXJndW1lbnRzTGVuZ3RoID4gMSlcbiAgICB7XG4gICAgICAgIC8vIGxvb3AgdGhyb3VnaCB0aGUgYXJndW1lbnRzIHByb3BlcnR5IGFuZCBhZGQgYWxsIGNoaWxkcmVuXG4gICAgICAgIC8vIHVzZSBpdCB0aGUgcmlnaHQgd2F5ICgubGVuZ3RoIGFuZCBbaV0pIHNvIHRoYXQgdGhpcyBmdW5jdGlvbiBjYW4gc3RpbGwgYmUgb3B0aW1pc2VkIGJ5IEpTIHJ1bnRpbWVzXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXJndW1lbnRzTGVuZ3RoOyBpKyspXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMucmVtb3ZlQ2hpbGQoIGFyZ3VtZW50c1tpXSApO1xuICAgICAgICB9XG4gICAgfSAgICAgXG4gICAgZWxzZVxuICAgIHsgICBcbiAgICAgICAgdmFyIGluZGV4ID0gdGhpcy5jaGlsZHJlbi5pbmRleE9mKGNoaWxkKTtcblxuICAgICAgICBpZiAoaW5kZXggPT09IC0xKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjaGlsZC5wYXJlbnQgPSBudWxsO1xuICAgICAgICB1dGlscy5yZW1vdmVJdGVtcyh0aGlzLmNoaWxkcmVuLCBpbmRleCwgMSk7XG5cbiAgICAgICAgLy8gVE9ETyAtIGxldHMgZWl0aGVyIGRvIGFsbCBjYWxsYmFja3Mgb3IgYWxsIGV2ZW50cy4uIG5vdCBib3RoIVxuICAgICAgICB0aGlzLm9uQ2hpbGRyZW5DaGFuZ2UoaW5kZXgpO1xuICAgICAgICBjaGlsZC5lbWl0KCdyZW1vdmVkJywgdGhpcyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGNoaWxkO1xufTtcblxuLyoqXG4gKiBSZW1vdmVzIGEgY2hpbGQgZnJvbSB0aGUgc3BlY2lmaWVkIGluZGV4IHBvc2l0aW9uLlxuICpcbiAqIEBwYXJhbSBpbmRleCB7bnVtYmVyfSBUaGUgaW5kZXggdG8gZ2V0IHRoZSBjaGlsZCBmcm9tXG4gKiBAcmV0dXJuIHtQSVhJLkRpc3BsYXlPYmplY3R9IFRoZSBjaGlsZCB0aGF0IHdhcyByZW1vdmVkLlxuICovXG5Db250YWluZXIucHJvdG90eXBlLnJlbW92ZUNoaWxkQXQgPSBmdW5jdGlvbiAoaW5kZXgpXG57XG4gICAgdmFyIGNoaWxkID0gdGhpcy5nZXRDaGlsZEF0KGluZGV4KTtcblxuICAgIGNoaWxkLnBhcmVudCA9IG51bGw7XG4gICAgdXRpbHMucmVtb3ZlSXRlbXModGhpcy5jaGlsZHJlbiwgaW5kZXgsIDEpO1xuXG4gICAgLy8gVE9ETyAtIGxldHMgZWl0aGVyIGRvIGFsbCBjYWxsYmFja3Mgb3IgYWxsIGV2ZW50cy4uIG5vdCBib3RoIVxuICAgIHRoaXMub25DaGlsZHJlbkNoYW5nZShpbmRleCk7XG4gICAgY2hpbGQuZW1pdCgncmVtb3ZlZCcsIHRoaXMpO1xuXG4gICAgcmV0dXJuIGNoaWxkO1xufTtcblxuLyoqXG4gKiBSZW1vdmVzIGFsbCBjaGlsZHJlbiBmcm9tIHRoaXMgY29udGFpbmVyIHRoYXQgYXJlIHdpdGhpbiB0aGUgYmVnaW4gYW5kIGVuZCBpbmRleGVzLlxuICpcbiAqIEBwYXJhbSBiZWdpbkluZGV4IHtudW1iZXJ9IFRoZSBiZWdpbm5pbmcgcG9zaXRpb24uIERlZmF1bHQgdmFsdWUgaXMgMC5cbiAqIEBwYXJhbSBlbmRJbmRleCB7bnVtYmVyfSBUaGUgZW5kaW5nIHBvc2l0aW9uLiBEZWZhdWx0IHZhbHVlIGlzIHNpemUgb2YgdGhlIGNvbnRhaW5lci5cbiAqL1xuQ29udGFpbmVyLnByb3RvdHlwZS5yZW1vdmVDaGlsZHJlbiA9IGZ1bmN0aW9uIChiZWdpbkluZGV4LCBlbmRJbmRleClcbntcbiAgICB2YXIgYmVnaW4gPSBiZWdpbkluZGV4IHx8IDA7XG4gICAgdmFyIGVuZCA9IHR5cGVvZiBlbmRJbmRleCA9PT0gJ251bWJlcicgPyBlbmRJbmRleCA6IHRoaXMuY2hpbGRyZW4ubGVuZ3RoO1xuICAgIHZhciByYW5nZSA9IGVuZCAtIGJlZ2luO1xuICAgIHZhciByZW1vdmVkLCBpO1xuXG4gICAgaWYgKHJhbmdlID4gMCAmJiByYW5nZSA8PSBlbmQpXG4gICAge1xuICAgICAgICByZW1vdmVkID0gdGhpcy5jaGlsZHJlbi5zcGxpY2UoYmVnaW4sIHJhbmdlKTtcblxuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgcmVtb3ZlZC5sZW5ndGg7ICsraSlcbiAgICAgICAge1xuICAgICAgICAgICAgcmVtb3ZlZFtpXS5wYXJlbnQgPSBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5vbkNoaWxkcmVuQ2hhbmdlKGJlZ2luSW5kZXgpO1xuXG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCByZW1vdmVkLmxlbmd0aDsgKytpKVxuICAgICAgICB7XG4gICAgICAgICAgICByZW1vdmVkW2ldLmVtaXQoJ3JlbW92ZWQnLCB0aGlzKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiByZW1vdmVkO1xuICAgIH1cbiAgICBlbHNlIGlmIChyYW5nZSA9PT0gMCAmJiB0aGlzLmNoaWxkcmVuLmxlbmd0aCA9PT0gMClcbiAgICB7XG4gICAgICAgIHJldHVybiBbXTtcbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ3JlbW92ZUNoaWxkcmVuOiBudW1lcmljIHZhbHVlcyBhcmUgb3V0c2lkZSB0aGUgYWNjZXB0YWJsZSByYW5nZS4nKTtcbiAgICB9XG59O1xuXG4vKipcbiAqIFVzZWZ1bCBmdW5jdGlvbiB0aGF0IHJldHVybnMgYSB0ZXh0dXJlIG9mIHRoZSBkaXNwbGF5IG9iamVjdCB0aGF0IGNhbiB0aGVuIGJlIHVzZWQgdG8gY3JlYXRlIHNwcml0ZXNcbiAqIFRoaXMgY2FuIGJlIHF1aXRlIHVzZWZ1bCBpZiB5b3VyIGRpc3BsYXlPYmplY3QgaXMgc3RhdGljIC8gY29tcGxpY2F0ZWQgYW5kIG5lZWRzIHRvIGJlIHJldXNlZCBtdWx0aXBsZSB0aW1lcy5cbiAqXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuQ2FudmFzUmVuZGVyZXJ8UElYSS5XZWJHTFJlbmRlcmVyfSBUaGUgcmVuZGVyZXIgdXNlZCB0byBnZW5lcmF0ZSB0aGUgdGV4dHVyZS5cbiAqIEBwYXJhbSByZXNvbHV0aW9uIHtudW1iZXJ9IFRoZSByZXNvbHV0aW9uIG9mIHRoZSB0ZXh0dXJlIGJlaW5nIGdlbmVyYXRlZFxuICogQHBhcmFtIHNjYWxlTW9kZSB7bnVtYmVyfSBTZWUge0BsaW5rIFBJWEkuU0NBTEVfTU9ERVN9IGZvciBwb3NzaWJsZSB2YWx1ZXNcbiAqIEByZXR1cm4ge1BJWEkuVGV4dHVyZX0gYSB0ZXh0dXJlIG9mIHRoZSBkaXNwbGF5IG9iamVjdFxuICovXG5Db250YWluZXIucHJvdG90eXBlLmdlbmVyYXRlVGV4dHVyZSA9IGZ1bmN0aW9uIChyZW5kZXJlciwgcmVzb2x1dGlvbiwgc2NhbGVNb2RlKVxue1xuICAgIHZhciBib3VuZHMgPSB0aGlzLmdldExvY2FsQm91bmRzKCk7XG5cbiAgICB2YXIgcmVuZGVyVGV4dHVyZSA9IG5ldyBSZW5kZXJUZXh0dXJlKHJlbmRlcmVyLCBib3VuZHMud2lkdGggfCAwLCBib3VuZHMuaGVpZ2h0IHwgMCwgc2NhbGVNb2RlLCByZXNvbHV0aW9uKTtcblxuICAgIF90ZW1wTWF0cml4LnR4ID0gLWJvdW5kcy54O1xuICAgIF90ZW1wTWF0cml4LnR5ID0gLWJvdW5kcy55O1xuXG4gICAgcmVuZGVyVGV4dHVyZS5yZW5kZXIodGhpcywgX3RlbXBNYXRyaXgpO1xuXG4gICAgcmV0dXJuIHJlbmRlclRleHR1cmU7XG59O1xuXG4vKlxuICogVXBkYXRlcyB0aGUgdHJhbnNmb3JtIG9uIGFsbCBjaGlsZHJlbiBvZiB0aGlzIGNvbnRhaW5lciBmb3IgcmVuZGVyaW5nXG4gKlxuICogQHByaXZhdGVcbiAqL1xuQ29udGFpbmVyLnByb3RvdHlwZS51cGRhdGVUcmFuc2Zvcm0gPSBmdW5jdGlvbiAoKVxue1xuICAgIGlmICghdGhpcy52aXNpYmxlKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuZGlzcGxheU9iamVjdFVwZGF0ZVRyYW5zZm9ybSgpO1xuXG4gICAgZm9yICh2YXIgaSA9IDAsIGogPSB0aGlzLmNoaWxkcmVuLmxlbmd0aDsgaSA8IGo7ICsraSlcbiAgICB7XG4gICAgICAgIHRoaXMuY2hpbGRyZW5baV0udXBkYXRlVHJhbnNmb3JtKCk7XG4gICAgfVxuXG4gICAgdGhpcy5kaXJ0eVRyYW5zZm9ybSA9IGZhbHNlO1xufTtcblxuLy8gcGVyZm9ybWFuY2UgaW5jcmVhc2UgdG8gYXZvaWQgdXNpbmcgY2FsbC4uICgxMHggZmFzdGVyKVxuQ29udGFpbmVyLnByb3RvdHlwZS5jb250YWluZXJVcGRhdGVUcmFuc2Zvcm0gPSBDb250YWluZXIucHJvdG90eXBlLnVwZGF0ZVRyYW5zZm9ybTtcblxuLyoqXG4gKiBSZXRyaWV2ZXMgdGhlIGJvdW5kcyBvZiB0aGUgQ29udGFpbmVyIGFzIGEgcmVjdGFuZ2xlLiBUaGUgYm91bmRzIGNhbGN1bGF0aW9uIHRha2VzIGFsbCB2aXNpYmxlIGNoaWxkcmVuIGludG8gY29uc2lkZXJhdGlvbi5cbiAqXG4gKiBAcmV0dXJuIHtQSVhJLlJlY3RhbmdsZX0gVGhlIHJlY3Rhbmd1bGFyIGJvdW5kaW5nIGFyZWFcbiAqL1xuQ29udGFpbmVyLnByb3RvdHlwZS5nZXRCb3VuZHMgPSBmdW5jdGlvbiAoKVxue1xuICAgIGlmKCF0aGlzLl9jdXJyZW50Qm91bmRzKVxuICAgIHtcblxuICAgICAgICBpZiAodGhpcy5jaGlsZHJlbi5sZW5ndGggPT09IDApXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiBtYXRoLlJlY3RhbmdsZS5FTVBUWTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFRPRE8gdGhlIGJvdW5kcyBoYXZlIGFscmVhZHkgYmVlbiBjYWxjdWxhdGVkIHRoaXMgcmVuZGVyIHNlc3Npb24gc28gcmV0dXJuIHdoYXQgd2UgaGF2ZVxuXG4gICAgICAgIHZhciBtaW5YID0gSW5maW5pdHk7XG4gICAgICAgIHZhciBtaW5ZID0gSW5maW5pdHk7XG5cbiAgICAgICAgdmFyIG1heFggPSAtSW5maW5pdHk7XG4gICAgICAgIHZhciBtYXhZID0gLUluZmluaXR5O1xuXG4gICAgICAgIHZhciBjaGlsZEJvdW5kcztcbiAgICAgICAgdmFyIGNoaWxkTWF4WDtcbiAgICAgICAgdmFyIGNoaWxkTWF4WTtcblxuICAgICAgICB2YXIgY2hpbGRWaXNpYmxlID0gZmFsc2U7XG5cbiAgICAgICAgZm9yICh2YXIgaSA9IDAsIGogPSB0aGlzLmNoaWxkcmVuLmxlbmd0aDsgaSA8IGo7ICsraSlcbiAgICAgICAge1xuICAgICAgICAgICAgdmFyIGNoaWxkID0gdGhpcy5jaGlsZHJlbltpXTtcblxuICAgICAgICAgICAgaWYgKCFjaGlsZC52aXNpYmxlKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjaGlsZFZpc2libGUgPSB0cnVlO1xuXG4gICAgICAgICAgICBjaGlsZEJvdW5kcyA9IHRoaXMuY2hpbGRyZW5baV0uZ2V0Qm91bmRzKCk7XG5cbiAgICAgICAgICAgIG1pblggPSBtaW5YIDwgY2hpbGRCb3VuZHMueCA/IG1pblggOiBjaGlsZEJvdW5kcy54O1xuICAgICAgICAgICAgbWluWSA9IG1pblkgPCBjaGlsZEJvdW5kcy55ID8gbWluWSA6IGNoaWxkQm91bmRzLnk7XG5cbiAgICAgICAgICAgIGNoaWxkTWF4WCA9IGNoaWxkQm91bmRzLndpZHRoICsgY2hpbGRCb3VuZHMueDtcbiAgICAgICAgICAgIGNoaWxkTWF4WSA9IGNoaWxkQm91bmRzLmhlaWdodCArIGNoaWxkQm91bmRzLnk7XG5cbiAgICAgICAgICAgIG1heFggPSBtYXhYID4gY2hpbGRNYXhYID8gbWF4WCA6IGNoaWxkTWF4WDtcbiAgICAgICAgICAgIG1heFkgPSBtYXhZID4gY2hpbGRNYXhZID8gbWF4WSA6IGNoaWxkTWF4WTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghY2hpbGRWaXNpYmxlKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gbWF0aC5SZWN0YW5nbGUuRU1QVFk7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgYm91bmRzID0gdGhpcy5fYm91bmRzO1xuXG4gICAgICAgIGJvdW5kcy54ID0gbWluWDtcbiAgICAgICAgYm91bmRzLnkgPSBtaW5ZO1xuICAgICAgICBib3VuZHMud2lkdGggPSBtYXhYIC0gbWluWDtcbiAgICAgICAgYm91bmRzLmhlaWdodCA9IG1heFkgLSBtaW5ZO1xuXG4gICAgICAgIHRoaXMuX2N1cnJlbnRCb3VuZHMgPSBib3VuZHM7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuX2N1cnJlbnRCb3VuZHM7XG59O1xuXG5Db250YWluZXIucHJvdG90eXBlLmNvbnRhaW5lckdldEJvdW5kcyA9IENvbnRhaW5lci5wcm90b3R5cGUuZ2V0Qm91bmRzO1xuXG4vKipcbiAqIFJldHJpZXZlcyB0aGUgbm9uLWdsb2JhbCBsb2NhbCBib3VuZHMgb2YgdGhlIENvbnRhaW5lciBhcyBhIHJlY3RhbmdsZS5cbiAqIFRoZSBjYWxjdWxhdGlvbiB0YWtlcyBhbGwgdmlzaWJsZSBjaGlsZHJlbiBpbnRvIGNvbnNpZGVyYXRpb24uXG4gKlxuICogQHJldHVybiB7UElYSS5SZWN0YW5nbGV9IFRoZSByZWN0YW5ndWxhciBib3VuZGluZyBhcmVhXG4gKi9cbkNvbnRhaW5lci5wcm90b3R5cGUuZ2V0TG9jYWxCb3VuZHMgPSBmdW5jdGlvbiAoKVxue1xuICAgIHZhciBtYXRyaXhDYWNoZSA9IHRoaXMud29ybGRUcmFuc2Zvcm07XG5cbiAgICB0aGlzLndvcmxkVHJhbnNmb3JtID0gbWF0aC5NYXRyaXguSURFTlRJVFk7XG5cbiAgICBmb3IgKHZhciBpID0gMCwgaiA9IHRoaXMuY2hpbGRyZW4ubGVuZ3RoOyBpIDwgajsgKytpKVxuICAgIHtcbiAgICAgICAgdGhpcy5jaGlsZHJlbltpXS51cGRhdGVUcmFuc2Zvcm0oKTtcbiAgICB9XG5cbiAgICB0aGlzLndvcmxkVHJhbnNmb3JtID0gbWF0cml4Q2FjaGU7XG5cbiAgICB0aGlzLl9jdXJyZW50Qm91bmRzID0gbnVsbDtcblxuICAgIHJldHVybiB0aGlzLmdldEJvdW5kcyggbWF0aC5NYXRyaXguSURFTlRJVFkgKTtcbn07XG5cbi8qKlxuICogUmVuZGVycyB0aGUgb2JqZWN0IHVzaW5nIHRoZSBXZWJHTCByZW5kZXJlclxuICpcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5XZWJHTFJlbmRlcmVyfSBUaGUgcmVuZGVyZXJcbiAqL1xuQ29udGFpbmVyLnByb3RvdHlwZS5yZW5kZXJXZWJHTCA9IGZ1bmN0aW9uIChyZW5kZXJlcilcbntcblxuICAgIC8vIGlmIHRoZSBvYmplY3QgaXMgbm90IHZpc2libGUgb3IgdGhlIGFscGhhIGlzIDAgdGhlbiBubyBuZWVkIHRvIHJlbmRlciB0aGlzIGVsZW1lbnRcbiAgICBpZiAoIXRoaXMudmlzaWJsZSB8fCB0aGlzLndvcmxkQWxwaGEgPD0gMCB8fCAhdGhpcy5yZW5kZXJhYmxlKVxuICAgIHtcbiAgICAgIFxuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFyIGksIGo7XG5cbiAgICAvLyBkbyBhIHF1aWNrIGNoZWNrIHRvIHNlZSBpZiB0aGlzIGVsZW1lbnQgaGFzIGEgbWFzayBvciBhIGZpbHRlci5cbiAgICBpZiAodGhpcy5fbWFzayB8fCB0aGlzLl9maWx0ZXJzKVxuICAgIHtcbiAgICAgICAgcmVuZGVyZXIuY3VycmVudFJlbmRlcmVyLmZsdXNoKCk7XG5cbiAgICAgICAgLy8gcHVzaCBmaWx0ZXIgZmlyc3QgYXMgd2UgbmVlZCB0byBlbnN1cmUgdGhlIHN0ZW5jaWwgYnVmZmVyIGlzIGNvcnJlY3QgZm9yIGFueSBtYXNraW5nXG4gICAgICAgIGlmICh0aGlzLl9maWx0ZXJzICYmIHRoaXMuX2ZpbHRlcnMubGVuZ3RoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLnB1c2hGaWx0ZXIodGhpcywgdGhpcy5fZmlsdGVycyk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5fbWFzaylcbiAgICAgICAge1xuICAgICAgICAgICAgcmVuZGVyZXIubWFza01hbmFnZXIucHVzaE1hc2sodGhpcywgdGhpcy5fbWFzayk7XG4gICAgICAgIH1cblxuICAgICAgICByZW5kZXJlci5jdXJyZW50UmVuZGVyZXIuc3RhcnQoKTtcblxuICAgICAgICAvLyBhZGQgdGhpcyBvYmplY3QgdG8gdGhlIGJhdGNoLCBvbmx5IHJlbmRlcmVkIGlmIGl0IGhhcyBhIHRleHR1cmUuXG4gICAgICAgIHRoaXMuX3JlbmRlcldlYkdMKHJlbmRlcmVyKTtcblxuICAgICAgICAvLyBub3cgbG9vcCB0aHJvdWdoIHRoZSBjaGlsZHJlbiBhbmQgbWFrZSBzdXJlIHRoZXkgZ2V0IHJlbmRlcmVkXG4gICAgICAgIGZvciAoaSA9IDAsIGogPSB0aGlzLmNoaWxkcmVuLmxlbmd0aDsgaSA8IGo7IGkrKylcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5jaGlsZHJlbltpXS5yZW5kZXJXZWJHTChyZW5kZXJlcik7XG4gICAgICAgIH1cblxuICAgICAgICByZW5kZXJlci5jdXJyZW50UmVuZGVyZXIuZmx1c2goKTtcblxuICAgICAgICBpZiAodGhpcy5fbWFzaylcbiAgICAgICAge1xuICAgICAgICAgICAgcmVuZGVyZXIubWFza01hbmFnZXIucG9wTWFzayh0aGlzLCB0aGlzLl9tYXNrKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLl9maWx0ZXJzKVxuICAgICAgICB7XG4gICAgICAgICAgICByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLnBvcEZpbHRlcigpO1xuXG4gICAgICAgIH1cbiAgICAgICAgcmVuZGVyZXIuY3VycmVudFJlbmRlcmVyLnN0YXJ0KCk7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHRoaXMuX3JlbmRlcldlYkdMKHJlbmRlcmVyKTtcblxuICAgICAgICAvLyBzaW1wbGUgcmVuZGVyIGNoaWxkcmVuIVxuICAgICAgICBmb3IgKGkgPSAwLCBqID0gdGhpcy5jaGlsZHJlbi5sZW5ndGg7IGkgPCBqOyArK2kpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuY2hpbGRyZW5baV0ucmVuZGVyV2ViR0wocmVuZGVyZXIpO1xuICAgICAgICB9XG4gICAgfVxufTtcblxuLyoqXG4gKiBUbyBiZSBvdmVycmlkZGVuIGJ5IHRoZSBzdWJjbGFzc1xuICpcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5XZWJHTFJlbmRlcmVyfSBUaGUgcmVuZGVyZXJcbiAqIEBwcml2YXRlXG4gKi9cbkNvbnRhaW5lci5wcm90b3R5cGUuX3JlbmRlcldlYkdMID0gZnVuY3Rpb24gKHJlbmRlcmVyKSAvLyBqc2hpbnQgdW51c2VkOmZhbHNlXG57XG4gICAgLy8gdGhpcyBpcyB3aGVyZSBjb250ZW50IGl0c2VsZiBnZXRzIHJlbmRlcmVkLi4uXG59O1xuXG4vKipcbiAqIFRvIGJlIG92ZXJyaWRkZW4gYnkgdGhlIHN1YmNsYXNzXG4gKlxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLkNhbnZhc1JlbmRlcmVyfSBUaGUgcmVuZGVyZXJcbiAqIEBwcml2YXRlXG4gKi9cbkNvbnRhaW5lci5wcm90b3R5cGUuX3JlbmRlckNhbnZhcyA9IGZ1bmN0aW9uIChyZW5kZXJlcikgLy8ganNoaW50IHVudXNlZDpmYWxzZVxue1xuICAgIC8vIHRoaXMgaXMgd2hlcmUgY29udGVudCBpdHNlbGYgZ2V0cyByZW5kZXJlZC4uLlxufTtcblxuXG4vKipcbiAqIFJlbmRlcnMgdGhlIG9iamVjdCB1c2luZyB0aGUgQ2FudmFzIHJlbmRlcmVyXG4gKlxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLkNhbnZhc1JlbmRlcmVyfSBUaGUgcmVuZGVyZXJcbiAqL1xuQ29udGFpbmVyLnByb3RvdHlwZS5yZW5kZXJDYW52YXMgPSBmdW5jdGlvbiAocmVuZGVyZXIpXG57XG4gICAgLy8gaWYgbm90IHZpc2libGUgb3IgdGhlIGFscGhhIGlzIDAgdGhlbiBubyBuZWVkIHRvIHJlbmRlciB0aGlzXG4gICAgaWYgKCF0aGlzLnZpc2libGUgfHwgdGhpcy5hbHBoYSA8PSAwIHx8ICF0aGlzLnJlbmRlcmFibGUpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX21hc2spXG4gICAge1xuICAgICAgICByZW5kZXJlci5tYXNrTWFuYWdlci5wdXNoTWFzayh0aGlzLl9tYXNrLCByZW5kZXJlcik7XG4gICAgfVxuXG4gICAgdGhpcy5fcmVuZGVyQ2FudmFzKHJlbmRlcmVyKTtcbiAgICBmb3IgKHZhciBpID0gMCwgaiA9IHRoaXMuY2hpbGRyZW4ubGVuZ3RoOyBpIDwgajsgKytpKVxuICAgIHtcbiAgICAgICAgdGhpcy5jaGlsZHJlbltpXS5yZW5kZXJDYW52YXMocmVuZGVyZXIpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLl9tYXNrKVxuICAgIHtcbiAgICAgICAgcmVuZGVyZXIubWFza01hbmFnZXIucG9wTWFzayhyZW5kZXJlcik7XG4gICAgfVxufTtcblxuLyoqXG4gKiBEZXN0cm95cyB0aGUgY29udGFpbmVyXG4gKiBAcGFyYW0gW2Rlc3Ryb3lDaGlsZHJlbj1mYWxzZV0ge2Jvb2xlYW59IGlmIHNldCB0byB0cnVlLCBhbGwgdGhlIGNoaWxkcmVuIHdpbGwgaGF2ZSB0aGVpciBkZXN0cm95IG1ldGhvZCBjYWxsZWQgYXMgd2VsbFxuICovXG5Db250YWluZXIucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoZGVzdHJveUNoaWxkcmVuKVxue1xuICAgIERpc3BsYXlPYmplY3QucHJvdG90eXBlLmRlc3Ryb3kuY2FsbCh0aGlzKTtcblxuICAgIGlmIChkZXN0cm95Q2hpbGRyZW4pXG4gICAge1xuICAgICAgICBmb3IgKHZhciBpID0gMCwgaiA9IHRoaXMuY2hpbGRyZW4ubGVuZ3RoOyBpIDwgajsgKytpKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmNoaWxkcmVuW2ldLmRlc3Ryb3koZGVzdHJveUNoaWxkcmVuKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMucmVtb3ZlQ2hpbGRyZW4oKTtcblxuICAgIHRoaXMuY2hpbGRyZW4gPSBudWxsO1xufTtcbiIsInZhciBtYXRoID0gcmVxdWlyZSgnLi4vbWF0aCcpLFxuICAgIFJlbmRlclRleHR1cmUgPSByZXF1aXJlKCcuLi90ZXh0dXJlcy9SZW5kZXJUZXh0dXJlJyksXG4gICAgRXZlbnRFbWl0dGVyID0gcmVxdWlyZSgnZXZlbnRlbWl0dGVyMycpLFxuICAgIENPTlNUID0gcmVxdWlyZSgnLi4vY29uc3QnKSxcbiAgICBfdGVtcE1hdHJpeCA9IG5ldyBtYXRoLk1hdHJpeCgpLFxuICAgIF90ZW1wRGlzcGxheU9iamVjdFBhcmVudCA9IHt3b3JsZFRyYW5zZm9ybTpuZXcgbWF0aC5NYXRyaXgoKSwgd29ybGRBbHBoYToxLCBjaGlsZHJlbjpbXX07XG5cblxuLyoqXG4gKiBUaGUgYmFzZSBjbGFzcyBmb3IgYWxsIG9iamVjdHMgdGhhdCBhcmUgcmVuZGVyZWQgb24gdGhlIHNjcmVlbi5cbiAqIFRoaXMgaXMgYW4gYWJzdHJhY3QgY2xhc3MgYW5kIHNob3VsZCBub3QgYmUgdXNlZCBvbiBpdHMgb3duIHJhdGhlciBpdCBzaG91bGQgYmUgZXh0ZW5kZWQuXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBFdmVudEVtaXR0ZXJcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKi9cbmZ1bmN0aW9uIERpc3BsYXlPYmplY3QoKVxue1xuICAgIEV2ZW50RW1pdHRlci5jYWxsKHRoaXMpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGNvb3JkaW5hdGUgb2YgdGhlIG9iamVjdCByZWxhdGl2ZSB0byB0aGUgbG9jYWwgY29vcmRpbmF0ZXMgb2YgdGhlIHBhcmVudC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuUG9pbnR9XG4gICAgICovXG4gICAgdGhpcy5wb3NpdGlvbiA9IG5ldyBtYXRoLlBvaW50KCk7XG4gICAgdGhpcy5fcG9zaXRpb24gPSBuZXcgQ2FjaGVQb2ludCh0aGlzKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBzY2FsZSBmYWN0b3Igb2YgdGhlIG9iamVjdC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuUG9pbnR9XG4gICAgICovXG4gICAgdGhpcy5zY2FsZSA9IG5ldyBtYXRoLlBvaW50KDEsIDEpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHBpdm90IHBvaW50IG9mIHRoZSBkaXNwbGF5T2JqZWN0IHRoYXQgaXQgcm90YXRlcyBhcm91bmRcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuUG9pbnR9XG4gICAgICovXG4gICAgdGhpcy5waXZvdCA9IG5ldyBtYXRoLlBvaW50KDAsIDApO1xuXG5cbiAgICAvKipcbiAgICAgKiBUaGUgc2tldyBmYWN0b3IgZm9yIHRoZSBvYmplY3QgaW4gcmFkaWFucy5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuUG9pbnR9XG4gICAgICovXG4gICAgdGhpcy5za2V3ID0gbmV3IG1hdGguUG9pbnQoMCwgMCk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgcm90YXRpb24gb2YgdGhlIG9iamVjdCBpbiByYWRpYW5zLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMuX3JvdGF0aW9uID0gMDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBvcGFjaXR5IG9mIHRoZSBvYmplY3QuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy5hbHBoYSA9IDE7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgdmlzaWJpbGl0eSBvZiB0aGUgb2JqZWN0LiBJZiBmYWxzZSB0aGUgb2JqZWN0IHdpbGwgbm90IGJlIGRyYXduLCBhbmRcbiAgICAgKiB0aGUgdXBkYXRlVHJhbnNmb3JtIGZ1bmN0aW9uIHdpbGwgbm90IGJlIGNhbGxlZC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICovXG4gICAgdGhpcy52aXNpYmxlID0gdHJ1ZTtcblxuICAgIC8qKlxuICAgICAqIENhbiB0aGlzIG9iamVjdCBiZSByZW5kZXJlZCwgaWYgZmFsc2UgdGhlIG9iamVjdCB3aWxsIG5vdCBiZSBkcmF3biBidXQgdGhlIHVwZGF0ZVRyYW5zZm9ybVxuICAgICAqIG1ldGhvZHMgd2lsbCBzdGlsbCBiZSBjYWxsZWQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqL1xuICAgIHRoaXMucmVuZGVyYWJsZSA9IHRydWU7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgZGlzcGxheSBvYmplY3QgY29udGFpbmVyIHRoYXQgY29udGFpbnMgdGhpcyBkaXNwbGF5IG9iamVjdC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuQ29udGFpbmVyfVxuICAgICAqIEByZWFkT25seVxuICAgICAqL1xuICAgIHRoaXMucGFyZW50ID0gbnVsbDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBtdWx0aXBsaWVkIGFscGhhIG9mIHRoZSBkaXNwbGF5T2JqZWN0XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQHJlYWRPbmx5XG4gICAgICovXG4gICAgdGhpcy53b3JsZEFscGhhID0gMTtcblxuICAgIC8qKlxuICAgICAqIEN1cnJlbnQgdHJhbnNmb3JtIG9mIHRoZSBvYmplY3QgYmFzZWQgb24gd29ybGQgKHBhcmVudCkgZmFjdG9yc1xuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5NYXRyaXh9XG4gICAgICogQHJlYWRPbmx5XG4gICAgICovXG4gICAgdGhpcy53b3JsZFRyYW5zZm9ybSA9IG5ldyBtYXRoLk1hdHJpeCgpO1xuICAgIHRoaXMubG9jYWxUcmFuc2Zvcm0gPSBuZXcgbWF0aC5NYXRyaXgoKTtcblxuXG4gICAgLyoqXG4gICAgICogVGhlIGFyZWEgdGhlIGZpbHRlciBpcyBhcHBsaWVkIHRvLiBUaGlzIGlzIHVzZWQgYXMgbW9yZSBvZiBhbiBvcHRpbWlzYXRpb25cbiAgICAgKiByYXRoZXIgdGhhbiBmaWd1cmluZyBvdXQgdGhlIGRpbWVuc2lvbnMgb2YgdGhlIGRpc3BsYXlPYmplY3QgZWFjaCBmcmFtZSB5b3UgY2FuIHNldCB0aGlzIHJlY3RhbmdsZVxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5SZWN0YW5nbGV9XG4gICAgICovXG4gICAgdGhpcy5maWx0ZXJBcmVhID0gbnVsbDtcblxuICAgIC8qKlxuICAgICAqIGNhY2hlZCBzaW4gcm90YXRpb25cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX3NyID0gMDtcblxuICAgIC8qKlxuICAgICAqIGNhY2hlZCBjb3Mgcm90YXRpb25cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX2NyID0gMTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBvcmlnaW5hbCwgY2FjaGVkIGJvdW5kcyBvZiB0aGUgb2JqZWN0XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlJlY3RhbmdsZX1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX2JvdW5kcyA9IG5ldyBtYXRoLlJlY3RhbmdsZSgwLCAwLCAxLCAxKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBtb3N0IHVwLXRvLWRhdGUgYm91bmRzIG9mIHRoZSBvYmplY3RcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuUmVjdGFuZ2xlfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fY3VycmVudEJvdW5kcyA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgb3JpZ2luYWwsIGNhY2hlZCBtYXNrIG9mIHRoZSBvYmplY3RcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuUmVjdGFuZ2xlfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fbWFzayA9IG51bGw7XG5cbiAgICB0aGlzLmRpcnR5VHJhbnNmb3JtID0gdHJ1ZTtcbn1cblxuLy8gY29uc3RydWN0b3JcbkRpc3BsYXlPYmplY3QucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShFdmVudEVtaXR0ZXIucHJvdG90eXBlKTtcbkRpc3BsYXlPYmplY3QucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gRGlzcGxheU9iamVjdDtcbm1vZHVsZS5leHBvcnRzID0gRGlzcGxheU9iamVjdDtcblxudmFyIENhY2hlUG9pbnQgPSBmdW5jdGlvbihkb2Mpe1xuICAgIFxuICAgIHRoaXMuZG9jID0gZG9jO1xuXG4gICAgdGhpcy54ID0gMDtcbiAgICB0aGlzLnkgPSAwO1xufVxuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhDYWNoZVBvaW50LnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFRoZSBwb3NpdGlvbiBvZiB0aGUgZGlzcGxheU9iamVjdCBvbiB0aGUgeCBheGlzIHJlbGF0aXZlIHRvIHRoZSBsb2NhbCBjb29yZGluYXRlcyBvZiB0aGUgcGFyZW50LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLkRpc3BsYXlPYmplY3QjXG4gICAgICovXG4gICAgeDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmRvYy5wb3NpdGlvbi54O1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5kb2MucG9zaXRpb24ueCA9IHZhbHVlO1xuICAgICAgICAgICAgdGhpcy5kb2MuZGlydHlUcmFuc2Zvcm0gPSB0cnVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIHk6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5kb2MucG9zaWl0b24ueTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuZG9jLnBvc2l0aW9uLnkgPSB2YWx1ZTtcbiAgICAgICAgICAgIHRoaXMuZG9jLmRpcnR5VHJhbnNmb3JtID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuXG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKERpc3BsYXlPYmplY3QucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogVGhlIHBvc2l0aW9uIG9mIHRoZSBkaXNwbGF5T2JqZWN0IG9uIHRoZSB4IGF4aXMgcmVsYXRpdmUgdG8gdGhlIGxvY2FsIGNvb3JkaW5hdGVzIG9mIHRoZSBwYXJlbnQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuRGlzcGxheU9iamVjdCNcbiAgICAgKi9cbiAgICB4OiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMucG9zaXRpb24ueDtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMucG9zaXRpb24ueCA9IHZhbHVlO1xuICAgICAgICAgICAgdGhpcy5kaXJ0eVRyYW5zZm9ybSA9IHRydWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVGhlIHBvc2l0aW9uIG9mIHRoZSBkaXNwbGF5T2JqZWN0IG9uIHRoZSB5IGF4aXMgcmVsYXRpdmUgdG8gdGhlIGxvY2FsIGNvb3JkaW5hdGVzIG9mIHRoZSBwYXJlbnQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuRGlzcGxheU9iamVjdCNcbiAgICAgKi9cbiAgICB5OiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMucG9zaXRpb24ueTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMucG9zaXRpb24ueSA9IHZhbHVlO1xuICAgICAgICAgICAgdGhpcy5kaXJ0eVRyYW5zZm9ybSA9IHRydWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgc2NhbGVYOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuc2NhbGUueDtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuc2NhbGUueCA9IHZhbHVlO1xuICAgICAgICAgICAgdGhpcy5kaXJ0eVRyYW5zZm9ybSA9IHRydWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVGhlIHBvc2l0aW9uIG9mIHRoZSBkaXNwbGF5T2JqZWN0IG9uIHRoZSB5IGF4aXMgcmVsYXRpdmUgdG8gdGhlIGxvY2FsIGNvb3JkaW5hdGVzIG9mIHRoZSBwYXJlbnQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuRGlzcGxheU9iamVjdCNcbiAgICAgKi9cbiAgICBzY2FsZVk6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5zY2FsZS55O1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5zY2FsZS55ID0gdmFsdWU7XG4gICAgICAgICAgICB0aGlzLmRpcnR5VHJhbnNmb3JtID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICByb3RhdGlvbjoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9yb3RhdGlvbjtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuX3JvdGF0aW9uID0gdmFsdWU7XG4gICAgICAgICAgICB0aGlzLmRpcnR5VHJhbnNmb3JtID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMuX3NyID0gTWF0aC5zaW4odmFsdWUpO1xuICAgICAgICAgICAgdGhpcy5fY3IgPSBNYXRoLmNvcyh2YWx1ZSk7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVGhlIHBvc2l0aW9uIG9mIHRoZSBkaXNwbGF5T2JqZWN0IG9uIHRoZSB5IGF4aXMgcmVsYXRpdmUgdG8gdGhlIGxvY2FsIGNvb3JkaW5hdGVzIG9mIHRoZSBwYXJlbnQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuRGlzcGxheU9iamVjdCNcbiAgICAgKi9cbiAgICBzY2FsZVk6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5zY2FsZS55O1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5zY2FsZS55ID0gdmFsdWU7XG4gICAgICAgICAgICB0aGlzLmRpcnR5VHJhbnNmb3JtID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBJbmRpY2F0ZXMgaWYgdGhlIHNwcml0ZSBpcyBnbG9iYWxseSB2aXNpYmxlLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5EaXNwbGF5T2JqZWN0I1xuICAgICAqIEByZWFkb25seVxuICAgICAqL1xuICAgIHdvcmxkVmlzaWJsZToge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHZhciBpdGVtID0gdGhpcztcblxuICAgICAgICAgICAgZG8ge1xuICAgICAgICAgICAgICAgIGlmICghaXRlbS52aXNpYmxlKVxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGl0ZW0gPSBpdGVtLnBhcmVudDtcbiAgICAgICAgICAgIH0gd2hpbGUgKGl0ZW0pO1xuXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBTZXRzIGEgbWFzayBmb3IgdGhlIGRpc3BsYXlPYmplY3QuIEEgbWFzayBpcyBhbiBvYmplY3QgdGhhdCBsaW1pdHMgdGhlIHZpc2liaWxpdHkgb2YgYW4gb2JqZWN0IHRvIHRoZSBzaGFwZSBvZiB0aGUgbWFzayBhcHBsaWVkIHRvIGl0LlxuICAgICAqIEluIFBJWEkgYSByZWd1bGFyIG1hc2sgbXVzdCBiZSBhIFBJWEkuR3JhcGhpY3Mgb3IgYSBQSVhJLlNwcml0ZSBvYmplY3QuIFRoaXMgYWxsb3dzIGZvciBtdWNoIGZhc3RlciBtYXNraW5nIGluIGNhbnZhcyBhcyBpdCB1dGlsaXNlcyBzaGFwZSBjbGlwcGluZy5cbiAgICAgKiBUbyByZW1vdmUgYSBtYXNrLCBzZXQgdGhpcyBwcm9wZXJ0eSB0byBudWxsLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5HcmFwaGljc3xQSVhJLlNwcml0ZX1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5EaXNwbGF5T2JqZWN0I1xuICAgICAqL1xuICAgIG1hc2s6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fbWFzaztcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGlmICh0aGlzLl9tYXNrKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHRoaXMuX21hc2sucmVuZGVyYWJsZSA9IHRydWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuX21hc2sgPSB2YWx1ZTtcblxuICAgICAgICAgICAgaWYgKHRoaXMuX21hc2spXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdGhpcy5fbWFzay5yZW5kZXJhYmxlID0gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgZmlsdGVycyBmb3IgdGhlIGRpc3BsYXlPYmplY3QuXG4gICAgICogKiBJTVBPUlRBTlQ6IFRoaXMgaXMgYSB3ZWJHTCBvbmx5IGZlYXR1cmUgYW5kIHdpbGwgYmUgaWdub3JlZCBieSB0aGUgY2FudmFzIHJlbmRlcmVyLlxuICAgICAqIFRvIHJlbW92ZSBmaWx0ZXJzIHNpbXBseSBzZXQgdGhpcyBwcm9wZXJ0eSB0byAnbnVsbCdcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuQWJzdHJhY3RGaWx0ZXJbXX1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5EaXNwbGF5T2JqZWN0I1xuICAgICAqL1xuICAgIGZpbHRlcnM6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fZmlsdGVycyAmJiB0aGlzLl9maWx0ZXJzLnNsaWNlKCk7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLl9maWx0ZXJzID0gdmFsdWUgJiYgdmFsdWUuc2xpY2UoKTtcbiAgICAgICAgfVxuICAgIH1cblxufSk7XG5cbi8qXG4gKiBVcGRhdGVzIHRoZSBvYmplY3QgdHJhbnNmb3JtIGZvciByZW5kZXJpbmdcbiAqXG4gKiBUT0RPIC0gT3B0aW1pemF0aW9uIHBhc3MhXG4gKi9cbkRpc3BsYXlPYmplY3QucHJvdG90eXBlLnVwZGF0ZVRyYW5zZm9ybSA9IGZ1bmN0aW9uICgpXG57XG4gICAgdmFyIHB0ID0gdGhpcy5wYXJlbnQud29ybGRUcmFuc2Zvcm07XG4gICAgdmFyIHd0ID0gdGhpcy53b3JsZFRyYW5zZm9ybTtcbiAgICB2YXIgbHQgPSB0aGlzLmxvY2FsVHJhbnNmb3JtO1xuXG4gICAgaWYodGhpcy5kaXJ0eVRyYW5zZm9ybSlcbiAgICB7XG4gICAgICAgIC8vIGdldCB0aGUgbWF0cml4IHZhbHVlcyBvZiB0aGUgZGlzcGxheW9iamVjdCBiYXNlZCBvbiBpdHMgdHJhbnNmb3JtIHByb3BlcnRpZXMuLlxuICAgICAgICBsdC5hICA9ICB0aGlzLl9jciAqIHRoaXMuc2NhbGUueDtcbiAgICAgICAgbHQuYiAgPSAgdGhpcy5fc3IgKiB0aGlzLnNjYWxlLng7XG4gICAgICAgIGx0LmMgID0gLXRoaXMuX3NyICogdGhpcy5zY2FsZS55O1xuICAgICAgICBsdC5kICA9ICB0aGlzLl9jciAqIHRoaXMuc2NhbGUueTtcbiAgICAgICAgbHQudHggPSAgdGhpcy5wb3NpdGlvbi54IC0gKHRoaXMucGl2b3QueCAqIGx0LmEgKyB0aGlzLnBpdm90LnkgKiBsdC5jKTtcbiAgICAgICAgbHQudHkgPSAgdGhpcy5wb3NpdGlvbi55IC0gKHRoaXMucGl2b3QueCAqIGx0LmIgKyB0aGlzLnBpdm90LnkgKiBsdC5kKTtcbiAgICB9XG5cbiAgICBpZih0aGlzLmRpcnR5VHJhbnNmb3JtIHx8IHRoaXMucGFyZW50LmRpcnR5VHJhbnNmb3JtKVxuICAgIHsgICAgICBcbiAgICAgICAgLy8gY29uY2F0IHRoZSBwYXJlbnQgbWF0cml4IHdpdGggdGhlIG9iamVjdHMgdHJhbnNmb3JtLlxuICAgICAgICB3dC5hICA9IGx0LmEgICogcHQuYSArIGx0LmIgICogcHQuYztcbiAgICAgICAgd3QuYiAgPSBsdC5hICAqIHB0LmIgKyBsdC5iICAqIHB0LmQ7XG4gICAgICAgIHd0LmMgID0gbHQuYyAgKiBwdC5hICsgbHQuZCAgKiBwdC5jO1xuICAgICAgICB3dC5kICA9IGx0LmMgICogcHQuYiArIGx0LmQgICogcHQuZDtcbiAgICAgICAgd3QudHggPSBsdC50eCAqIHB0LmEgKyBsdC50eSAqIHB0LmMgKyBwdC50eDtcbiAgICAgICAgd3QudHkgPSBsdC50eCAqIHB0LmIgKyBsdC50eSAqIHB0LmQgKyBwdC50eTsgICAgICAgXG4gICAgXG4gICAgICAgIHRoaXMuX2N1cnJlbnRCb3VuZHMgPSBudWxsO1xuICAgIH1cblxuICAgIC8vIG11bHRpcGx5IHRoZSBhbHBoYXMuLlxuICAgIHRoaXMud29ybGRBbHBoYSA9IHRoaXMuYWxwaGEgKiB0aGlzLnBhcmVudC53b3JsZEFscGhhO1xuXG4gICAgLy8gcmVzZXQgdGhlIGJvdW5kcyBlYWNoIHRpbWUgdGhpcyBpcyBjYWxsZWQhXG4gICAgXG59O1xuXG4vLyBwZXJmb3JtYW5jZSBpbmNyZWFzZSB0byBhdm9pZCB1c2luZyBjYWxsLi4gKDEweCBmYXN0ZXIpXG5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS5kaXNwbGF5T2JqZWN0VXBkYXRlVHJhbnNmb3JtID0gRGlzcGxheU9iamVjdC5wcm90b3R5cGUudXBkYXRlVHJhbnNmb3JtO1xuXG4vKipcbiAqXG4gKlxuICogUmV0cmlldmVzIHRoZSBib3VuZHMgb2YgdGhlIGRpc3BsYXlPYmplY3QgYXMgYSByZWN0YW5nbGUgb2JqZWN0XG4gKlxuICogQHBhcmFtIG1hdHJpeCB7UElYSS5NYXRyaXh9XG4gKiBAcmV0dXJuIHtQSVhJLlJlY3RhbmdsZX0gdGhlIHJlY3Rhbmd1bGFyIGJvdW5kaW5nIGFyZWFcbiAqL1xuRGlzcGxheU9iamVjdC5wcm90b3R5cGUuZ2V0Qm91bmRzID0gZnVuY3Rpb24gKG1hdHJpeCkgLy8ganNoaW50IHVudXNlZDpmYWxzZVxue1xuICAgIHJldHVybiBtYXRoLlJlY3RhbmdsZS5FTVBUWTtcbn07XG5cbi8qKlxuICogUmV0cmlldmVzIHRoZSBsb2NhbCBib3VuZHMgb2YgdGhlIGRpc3BsYXlPYmplY3QgYXMgYSByZWN0YW5nbGUgb2JqZWN0XG4gKlxuICogQHJldHVybiB7UElYSS5SZWN0YW5nbGV9IHRoZSByZWN0YW5ndWxhciBib3VuZGluZyBhcmVhXG4gKi9cbkRpc3BsYXlPYmplY3QucHJvdG90eXBlLmdldExvY2FsQm91bmRzID0gZnVuY3Rpb24gKClcbntcbiAgICByZXR1cm4gdGhpcy5nZXRCb3VuZHMobWF0aC5NYXRyaXguSURFTlRJVFkpO1xufTtcblxuLyoqXG4gKiBDYWxjdWxhdGVzIHRoZSBnbG9iYWwgcG9zaXRpb24gb2YgdGhlIGRpc3BsYXkgb2JqZWN0XG4gKlxuICogQHBhcmFtIHBvc2l0aW9uIHtQSVhJLlBvaW50fSBUaGUgd29ybGQgb3JpZ2luIHRvIGNhbGN1bGF0ZSBmcm9tXG4gKiBAcmV0dXJuIHtQSVhJLlBvaW50fSBBIHBvaW50IG9iamVjdCByZXByZXNlbnRpbmcgdGhlIHBvc2l0aW9uIG9mIHRoaXMgb2JqZWN0XG4gKi9cbkRpc3BsYXlPYmplY3QucHJvdG90eXBlLnRvR2xvYmFsID0gZnVuY3Rpb24gKHBvc2l0aW9uKVxue1xuICAgIC8vIHRoaXMgcGFyZW50IGNoZWNrIGlzIGZvciBqdXN0IGluIGNhc2UgdGhlIGl0ZW0gaXMgYSByb290IG9iamVjdC5cbiAgICAvLyBJZiBpdCBpcyB3ZSBuZWVkIHRvIGdpdmUgaXQgYSB0ZW1wb3JhcnkgcGFyZW50IHNvIHRoYXQgZGlzcGxheU9iamVjdFVwZGF0ZVRyYW5zZm9ybSB3b3JrcyBjb3JyZWN0bHlcbiAgICAvLyB0aGlzIGlzIG1haW5seSB0byBhdm9pZCBhIHBhcmVudCBjaGVjayBpbiB0aGUgbWFpbiBsb29wLiBFdmVyeSBsaXR0bGUgaGVscHMgZm9yIHBlcmZvcm1hbmNlIDopXG4gICAgaWYoIXRoaXMucGFyZW50KVxuICAgIHtcbiAgICAgICAgdGhpcy5wYXJlbnQgPSBfdGVtcERpc3BsYXlPYmplY3RQYXJlbnQ7XG4gICAgICAgIHRoaXMuZGlzcGxheU9iamVjdFVwZGF0ZVRyYW5zZm9ybSgpO1xuICAgICAgICB0aGlzLnBhcmVudCA9IG51bGw7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHRoaXMuZGlzcGxheU9iamVjdFVwZGF0ZVRyYW5zZm9ybSgpO1xuICAgIH1cblxuICAgIC8vIGRvbid0IG5lZWQgdG8gdXBkYXRlIHRoZSBsb3RcbiAgICByZXR1cm4gdGhpcy53b3JsZFRyYW5zZm9ybS5hcHBseShwb3NpdGlvbik7XG59O1xuXG4vKipcbiAqIENhbGN1bGF0ZXMgdGhlIGxvY2FsIHBvc2l0aW9uIG9mIHRoZSBkaXNwbGF5IG9iamVjdCByZWxhdGl2ZSB0byBhbm90aGVyIHBvaW50XG4gKlxuICogQHBhcmFtIHBvc2l0aW9uIHtQSVhJLlBvaW50fSBUaGUgd29ybGQgb3JpZ2luIHRvIGNhbGN1bGF0ZSBmcm9tXG4gKiBAcGFyYW0gW2Zyb21dIHtQSVhJLkRpc3BsYXlPYmplY3R9IFRoZSBEaXNwbGF5T2JqZWN0IHRvIGNhbGN1bGF0ZSB0aGUgZ2xvYmFsIHBvc2l0aW9uIGZyb21cbiAqIEBwYXJhbSBbcG9pbnRdIHtQSVhJLlBvaW50fSBBIFBvaW50IG9iamVjdCBpbiB3aGljaCB0byBzdG9yZSB0aGUgdmFsdWUsIG9wdGlvbmFsIChvdGhlcndpc2Ugd2lsbCBjcmVhdGUgYSBuZXcgUG9pbnQpXG4gKiBAcmV0dXJuIHtQSVhJLlBvaW50fSBBIHBvaW50IG9iamVjdCByZXByZXNlbnRpbmcgdGhlIHBvc2l0aW9uIG9mIHRoaXMgb2JqZWN0XG4gKi9cbkRpc3BsYXlPYmplY3QucHJvdG90eXBlLnRvTG9jYWwgPSBmdW5jdGlvbiAocG9zaXRpb24sIGZyb20sIHBvaW50KVxue1xuICAgIGlmIChmcm9tKVxuICAgIHtcbiAgICAgICAgcG9zaXRpb24gPSBmcm9tLnRvR2xvYmFsKHBvc2l0aW9uKTtcbiAgICB9XG5cbiAgICAvLyB0aGlzIHBhcmVudCBjaGVjayBpcyBmb3IganVzdCBpbiBjYXNlIHRoZSBpdGVtIGlzIGEgcm9vdCBvYmplY3QuXG4gICAgLy8gSWYgaXQgaXMgd2UgbmVlZCB0byBnaXZlIGl0IGEgdGVtcG9yYXJ5IHBhcmVudCBzbyB0aGF0IGRpc3BsYXlPYmplY3RVcGRhdGVUcmFuc2Zvcm0gd29ya3MgY29ycmVjdGx5XG4gICAgLy8gdGhpcyBpcyBtYWlubHkgdG8gYXZvaWQgYSBwYXJlbnQgY2hlY2sgaW4gdGhlIG1haW4gbG9vcC4gRXZlcnkgbGl0dGxlIGhlbHBzIGZvciBwZXJmb3JtYW5jZSA6KVxuICAgIGlmKCF0aGlzLnBhcmVudClcbiAgICB7XG4gICAgICAgIHRoaXMucGFyZW50ID0gX3RlbXBEaXNwbGF5T2JqZWN0UGFyZW50O1xuICAgICAgICB0aGlzLmRpc3BsYXlPYmplY3RVcGRhdGVUcmFuc2Zvcm0oKTtcbiAgICAgICAgdGhpcy5wYXJlbnQgPSBudWxsO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICB0aGlzLmRpc3BsYXlPYmplY3RVcGRhdGVUcmFuc2Zvcm0oKTtcbiAgICB9XG5cbiAgICAvLyBzaW1wbHkgYXBwbHkgdGhlIG1hdHJpeC4uXG4gICAgcmV0dXJuIHRoaXMud29ybGRUcmFuc2Zvcm0uYXBwbHlJbnZlcnNlKHBvc2l0aW9uLCBwb2ludCk7XG59O1xuXG4vKipcbiAqIFJlbmRlcnMgdGhlIG9iamVjdCB1c2luZyB0aGUgV2ViR0wgcmVuZGVyZXJcbiAqXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcn0gVGhlIHJlbmRlcmVyXG4gKiBAcHJpdmF0ZVxuICovXG5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS5yZW5kZXJXZWJHTCA9IGZ1bmN0aW9uIChyZW5kZXJlcikgLy8ganNoaW50IHVudXNlZDpmYWxzZVxue1xuICAgIC8vIE9WRVJXUklURTtcbn07XG5cbi8qKlxuICogUmVuZGVycyB0aGUgb2JqZWN0IHVzaW5nIHRoZSBDYW52YXMgcmVuZGVyZXJcbiAqXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuQ2FudmFzUmVuZGVyZXJ9IFRoZSByZW5kZXJlclxuICogQHByaXZhdGVcbiAqL1xuRGlzcGxheU9iamVjdC5wcm90b3R5cGUucmVuZGVyQ2FudmFzID0gZnVuY3Rpb24gKHJlbmRlcmVyKSAvLyBqc2hpbnQgdW51c2VkOmZhbHNlXG57XG4gICAgLy8gT1ZFUldSSVRFO1xufTtcbi8qKlxuICogVXNlZnVsIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyBhIHRleHR1cmUgb2YgdGhlIGRpc3BsYXkgb2JqZWN0IHRoYXQgY2FuIHRoZW4gYmUgdXNlZCB0byBjcmVhdGUgc3ByaXRlc1xuICogVGhpcyBjYW4gYmUgcXVpdGUgdXNlZnVsIGlmIHlvdXIgZGlzcGxheU9iamVjdCBpcyBzdGF0aWMgLyBjb21wbGljYXRlZCBhbmQgbmVlZHMgdG8gYmUgcmV1c2VkIG11bHRpcGxlIHRpbWVzLlxuICpcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5DYW52YXNSZW5kZXJlcnxQSVhJLldlYkdMUmVuZGVyZXJ9IFRoZSByZW5kZXJlciB1c2VkIHRvIGdlbmVyYXRlIHRoZSB0ZXh0dXJlLlxuICogQHBhcmFtIHNjYWxlTW9kZSB7bnVtYmVyfSBTZWUge0BsaW5rIFBJWEkuU0NBTEVfTU9ERVN9IGZvciBwb3NzaWJsZSB2YWx1ZXNcbiAqIEBwYXJhbSByZXNvbHV0aW9uIHtudW1iZXJ9IFRoZSByZXNvbHV0aW9uIG9mIHRoZSB0ZXh0dXJlIGJlaW5nIGdlbmVyYXRlZFxuICogQHJldHVybiB7UElYSS5UZXh0dXJlfSBhIHRleHR1cmUgb2YgdGhlIGRpc3BsYXkgb2JqZWN0XG4gKi9cbkRpc3BsYXlPYmplY3QucHJvdG90eXBlLmdlbmVyYXRlVGV4dHVyZSA9IGZ1bmN0aW9uIChyZW5kZXJlciwgc2NhbGVNb2RlLCByZXNvbHV0aW9uKVxue1xuICAgIHZhciBib3VuZHMgPSB0aGlzLmdldExvY2FsQm91bmRzKCk7XG5cbiAgICB2YXIgcmVuZGVyVGV4dHVyZSA9IG5ldyBSZW5kZXJUZXh0dXJlKHJlbmRlcmVyLCBib3VuZHMud2lkdGggfCAwLCBib3VuZHMuaGVpZ2h0IHwgMCwgc2NhbGVNb2RlLCByZXNvbHV0aW9uKTtcblxuICAgIF90ZW1wTWF0cml4LnR4ID0gLWJvdW5kcy54O1xuICAgIF90ZW1wTWF0cml4LnR5ID0gLWJvdW5kcy55O1xuXG4gICAgcmVuZGVyVGV4dHVyZS5yZW5kZXIodGhpcywgX3RlbXBNYXRyaXgpO1xuXG4gICAgcmV0dXJuIHJlbmRlclRleHR1cmU7XG59O1xuXG4vKipcbiAqIFNldCB0aGUgcGFyZW50IENvbnRhaW5lciBvZiB0aGlzIERpc3BsYXlPYmplY3RcbiAqXG4gKiBAcGFyYW0gY29udGFpbmVyIHtDb250YWluZXJ9IFRoZSBDb250YWluZXIgdG8gYWRkIHRoaXMgRGlzcGxheU9iamVjdCB0b1xuICogQHJldHVybiB7Q29udGFpbmVyfSBUaGUgQ29udGFpbmVyIHRoYXQgdGhpcyBEaXNwbGF5T2JqZWN0IHdhcyBhZGRlZCB0b1xuICovXG5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS5zZXRQYXJlbnQgPSBmdW5jdGlvbiAoY29udGFpbmVyKVxue1xuICAgIGlmICghY29udGFpbmVyIHx8ICFjb250YWluZXIuYWRkQ2hpbGQpXG4gICAge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3NldFBhcmVudDogQXJndW1lbnQgbXVzdCBiZSBhIENvbnRhaW5lcicpO1xuICAgIH1cblxuICAgIGNvbnRhaW5lci5hZGRDaGlsZCh0aGlzKTtcbiAgICByZXR1cm4gY29udGFpbmVyO1xufTtcblxuLyoqXG4gKiBDb252ZW5pZW5jZSBmdW5jdGlvbiB0byBzZXQgdGhlIHBvc3Rpb24sIHNjYWxlLCBza2V3IGFuZCBwaXZvdCBhdCBvbmNlLlxuICpcbiAqIEBwYXJhbSBbeD0wXSB7bnVtYmVyfSBUaGUgWCBwb3NpdGlvblxuICogQHBhcmFtIFt5PTBdIHtudW1iZXJ9IFRoZSBZIHBvc2l0aW9uXG4gKiBAcGFyYW0gW3NjYWxlWD0xXSB7bnVtYmVyfSBUaGUgWCBzY2FsZSB2YWx1ZVxuICogQHBhcmFtIFtzY2FsZVk9MV0ge251bWJlcn0gVGhlIFkgc2NhbGUgdmFsdWVcbiAqIEBwYXJhbSBbcm90YXRpb249MF0ge251bWJlcn0gVGhlIHJvdGF0aW9uXG4gKiBAcGFyYW0gW3NrZXdYPTBdIHtudW1iZXJ9IFRoZSBYIHNrZXcgdmFsdWVcbiAqIEBwYXJhbSBbc2tld1k9MF0ge251bWJlcn0gVGhlIFkgc2tldyB2YWx1ZVxuICogQHBhcmFtIFtwaXZvdFg9MF0ge251bWJlcn0gVGhlIFggcGl2b3QgdmFsdWVcbiAqIEBwYXJhbSBbcGl2b3RZPTBdIHtudW1iZXJ9IFRoZSBZIHBpdm90IHZhbHVlXG4gKiBAcmV0dXJuIHtQSVhJLkRpc3BsYXlPYmplY3R9XG4gKi9cbkRpc3BsYXlPYmplY3QucHJvdG90eXBlLnNldFRyYW5zZm9ybSA9IGZ1bmN0aW9uKHgsIHksIHNjYWxlWCwgc2NhbGVZLCByb3RhdGlvbiwgc2tld1gsIHNrZXdZLCBwaXZvdFgsIHBpdm90WSkgLy9qc2hpbnQgaWdub3JlOmxpbmVcbntcbiAgICB0aGlzLnBvc2l0aW9uLnggPSB4IHx8IDA7XG4gICAgdGhpcy5wb3NpdGlvbi55ID0geSB8fCAwO1xuICAgIHRoaXMuc2NhbGUueCA9ICFzY2FsZVggPyAxIDogc2NhbGVYO1xuICAgIHRoaXMuc2NhbGUueSA9ICFzY2FsZVkgPyAxIDogc2NhbGVZO1xuICAgIHRoaXMucm90YXRpb24gPSByb3RhdGlvbiB8fCAwO1xuICAgIHRoaXMuc2tldy54ID0gc2tld1ggfHwgMDtcbiAgICB0aGlzLnNrZXcueSA9IHNrZXdZIHx8IDA7XG4gICAgdGhpcy5waXZvdC54ID0gcGl2b3RYIHx8IDA7XG4gICAgdGhpcy5waXZvdC55ID0gcGl2b3RZIHx8IDA7XG4gICAgdGhpcy5kaXJ0eVRyYW5zZm9ybSA9IHRydWU7XG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIEJhc2UgZGVzdHJveSBtZXRob2QgZm9yIGdlbmVyaWMgZGlzcGxheSBvYmplY3RzXG4gKlxuICovXG5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKClcbntcblxuICAgIHRoaXMucG9zaXRpb24gPSBudWxsO1xuICAgIHRoaXMuc2NhbGUgPSBudWxsO1xuICAgIHRoaXMucGl2b3QgPSBudWxsO1xuICAgIHRoaXMuc2tldyA9IG51bGw7XG5cbiAgICB0aGlzLnBhcmVudCA9IG51bGw7XG5cbiAgICB0aGlzLl9ib3VuZHMgPSBudWxsO1xuICAgIHRoaXMuX2N1cnJlbnRCb3VuZHMgPSBudWxsO1xuICAgIHRoaXMuX21hc2sgPSBudWxsO1xuXG4gICAgdGhpcy53b3JsZFRyYW5zZm9ybSA9IG51bGw7XG4gICAgdGhpcy5maWx0ZXJBcmVhID0gbnVsbDtcbn07XG4iLCJ2YXIgQ29udGFpbmVyID0gcmVxdWlyZSgnLi4vZGlzcGxheS9Db250YWluZXInKSxcbiAgICBUZXh0dXJlID0gcmVxdWlyZSgnLi4vdGV4dHVyZXMvVGV4dHVyZScpLFxuICAgIENhbnZhc0J1ZmZlciA9IHJlcXVpcmUoJy4uL3JlbmRlcmVycy9jYW52YXMvdXRpbHMvQ2FudmFzQnVmZmVyJyksXG4gICAgQ2FudmFzR3JhcGhpY3MgPSByZXF1aXJlKCcuLi9yZW5kZXJlcnMvY2FudmFzL3V0aWxzL0NhbnZhc0dyYXBoaWNzJyksXG4gICAgR3JhcGhpY3NEYXRhID0gcmVxdWlyZSgnLi9HcmFwaGljc0RhdGEnKSxcbiAgICBtYXRoID0gcmVxdWlyZSgnLi4vbWF0aCcpLFxuICAgIENPTlNUID0gcmVxdWlyZSgnLi4vY29uc3QnKSxcbiAgICB0ZW1wUG9pbnQgPSBuZXcgbWF0aC5Qb2ludCgpO1xuXG4vKipcbiAqIFRoZSBHcmFwaGljcyBjbGFzcyBjb250YWlucyBtZXRob2RzIHVzZWQgdG8gZHJhdyBwcmltaXRpdmUgc2hhcGVzIHN1Y2ggYXMgbGluZXMsIGNpcmNsZXMgYW5kXG4gKiByZWN0YW5nbGVzIHRvIHRoZSBkaXNwbGF5LCBhbmQgdG8gY29sb3IgYW5kIGZpbGwgdGhlbS5cbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQ29udGFpbmVyXG4gKiBAbWVtYmVyb2YgUElYSVxuICovXG5mdW5jdGlvbiBHcmFwaGljcygpXG57XG4gICAgQ29udGFpbmVyLmNhbGwodGhpcyk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYWxwaGEgdmFsdWUgdXNlZCB3aGVuIGZpbGxpbmcgdGhlIEdyYXBoaWNzIG9iamVjdC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAxXG4gICAgICovXG4gICAgdGhpcy5maWxsQWxwaGEgPSAxO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHdpZHRoICh0aGlja25lc3MpIG9mIGFueSBsaW5lcyBkcmF3bi5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAwXG4gICAgICovXG4gICAgdGhpcy5saW5lV2lkdGggPSAwO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGNvbG9yIG9mIGFueSBsaW5lcyBkcmF3bi5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge3N0cmluZ31cbiAgICAgKiBAZGVmYXVsdCAwXG4gICAgICovXG4gICAgdGhpcy5saW5lQ29sb3IgPSAwO1xuXG4gICAgLyoqXG4gICAgICogR3JhcGhpY3MgZGF0YVxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5HcmFwaGljc0RhdGFbXX1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuZ3JhcGhpY3NEYXRhID0gW107XG5cbiAgICAvKipcbiAgICAgKiBUaGUgdGludCBhcHBsaWVkIHRvIHRoZSBncmFwaGljIHNoYXBlLiBUaGlzIGlzIGEgaGV4IHZhbHVlLiBBcHBseSBhIHZhbHVlIG9mIDB4RkZGRkZGIHRvIHJlc2V0IHRoZSB0aW50LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDB4RkZGRkZGXG4gICAgICovXG4gICAgdGhpcy50aW50ID0gMHhGRkZGRkY7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgcHJldmlvdXMgdGludCBhcHBsaWVkIHRvIHRoZSBncmFwaGljIHNoYXBlLiBVc2VkIHRvIGNvbXBhcmUgdG8gdGhlIGN1cnJlbnQgdGludCBhbmQgY2hlY2sgaWYgdGhlcmVzIGNoYW5nZS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBkZWZhdWx0IDB4RkZGRkZGXG4gICAgICovXG4gICAgdGhpcy5fcHJldlRpbnQgPSAweEZGRkZGRjtcblxuICAgIC8qKlxuICAgICAqIFRoZSBibGVuZCBtb2RlIHRvIGJlIGFwcGxpZWQgdG8gdGhlIGdyYXBoaWMgc2hhcGUuIEFwcGx5IGEgdmFsdWUgb2YgYFBJWEkuQkxFTkRfTU9ERVMuTk9STUFMYCB0byByZXNldCB0aGUgYmxlbmQgbW9kZS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCBQSVhJLkJMRU5EX01PREVTLk5PUk1BTDtcbiAgICAgKiBAc2VlIFBJWEkuQkxFTkRfTU9ERVNcbiAgICAgKi9cbiAgICB0aGlzLmJsZW5kTW9kZSA9IENPTlNULkJMRU5EX01PREVTLk5PUk1BTDtcblxuICAgIC8qKlxuICAgICAqIEN1cnJlbnQgcGF0aFxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5HcmFwaGljc0RhdGF9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLmN1cnJlbnRQYXRoID0gbnVsbDtcblxuICAgIC8qKlxuICAgICAqIEFycmF5IGNvbnRhaW5pbmcgc29tZSBXZWJHTC1yZWxhdGVkIHByb3BlcnRpZXMgdXNlZCBieSB0aGUgV2ViR0wgcmVuZGVyZXIuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtvYmplY3Q8bnVtYmVyLCBvYmplY3Q+fVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgLy8gVE9ETyAtIF93ZWJnbCBzaG91bGQgdXNlIGEgcHJvdG90eXBlIG9iamVjdCwgbm90IGEgcmFuZG9tIHVuZG9jdW1lbnRlZCBvYmplY3QuLi5cbiAgICB0aGlzLl93ZWJHTCA9IHt9O1xuXG4gICAgLyoqXG4gICAgICogV2hldGhlciB0aGlzIHNoYXBlIGlzIGJlaW5nIHVzZWQgYXMgYSBtYXNrLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKi9cbiAgICB0aGlzLmlzTWFzayA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGJvdW5kcycgcGFkZGluZyB1c2VkIGZvciBib3VuZHMgY2FsY3VsYXRpb24uXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy5ib3VuZHNQYWRkaW5nID0gMDtcblxuICAgIC8qKlxuICAgICAqIEEgY2FjaGUgb2YgdGhlIGxvY2FsIGJvdW5kcyB0byBwcmV2ZW50IHJlY2FsY3VsYXRpb24uXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlJlY3RhbmdsZX1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX2xvY2FsQm91bmRzID0gbmV3IG1hdGguUmVjdGFuZ2xlKDAsMCwxLDEpO1xuXG4gICAgLyoqXG4gICAgICogVXNlZCB0byBkZXRlY3QgaWYgdGhlIGdyYXBoaWNzIG9iamVjdCBoYXMgY2hhbmdlZC4gSWYgdGhpcyBpcyBzZXQgdG8gdHJ1ZSB0aGVuIHRoZSBncmFwaGljc1xuICAgICAqIG9iamVjdCB3aWxsIGJlIHJlY2FsY3VsYXRlZC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLmRpcnR5ID0gdHJ1ZTtcblxuICAgIC8qKlxuICAgICAqIFVzZWQgdG8gZGV0ZWN0IGlmIHRoZSBXZWJHTCBncmFwaGljcyBvYmplY3QgaGFzIGNoYW5nZWQuIElmIHRoaXMgaXMgc2V0IHRvIHRydWUgdGhlbiB0aGVcbiAgICAgKiBncmFwaGljcyBvYmplY3Qgd2lsbCBiZSByZWNhbGN1bGF0ZWQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5nbERpcnR5ID0gZmFsc2U7XG5cbiAgICB0aGlzLmJvdW5kc0RpcnR5ID0gdHJ1ZTtcblxuICAgIC8qKlxuICAgICAqIFVzZWQgdG8gZGV0ZWN0IGlmIHRoZSBjYWNoZWQgc3ByaXRlIG9iamVjdCBuZWVkcyB0byBiZSB1cGRhdGVkLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuY2FjaGVkU3ByaXRlRGlydHkgPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIFdoZW4gY2FjaGVBc0JpdG1hcCBpcyBzZXQgdG8gdHJ1ZSB0aGUgZ3JhcGhpY3Mgb2JqZWN0IHdpbGwgYmUgcmVuZGVyZWQgYXMgaWYgaXQgd2FzIGEgc3ByaXRlLlxuICAgICAqIFRoaXMgaXMgdXNlZnVsIGlmIHlvdXIgZ3JhcGhpY3MgZWxlbWVudCBkb2VzIG5vdCBjaGFuZ2Ugb2Z0ZW4sIGFzIGl0IHdpbGwgc3BlZWQgdXAgdGhlIHJlbmRlcmluZ1xuICAgICAqIG9mIHRoZSBvYmplY3QgaW4gZXhjaGFuZ2UgZm9yIHRha2luZyB1cCB0ZXh0dXJlIG1lbW9yeS4gSXQgaXMgYWxzbyB1c2VmdWwgaWYgeW91IG5lZWQgdGhlIGdyYXBoaWNzXG4gICAgICogb2JqZWN0IHRvIGJlIGFudGktYWxpYXNlZCwgYmVjYXVzZSBpdCB3aWxsIGJlIHJlbmRlcmVkIHVzaW5nIGNhbnZhcy4gVGhpcyBpcyBub3QgcmVjb21tZW5kZWQgaWZcbiAgICAgKiB5b3UgYXJlIGNvbnN0YW50bHkgcmVkcmF3aW5nIHRoZSBncmFwaGljcyBlbGVtZW50LlxuICAgICAqXG4gICAgICogQG5hbWUgY2FjaGVBc0JpdG1hcFxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICogQG1lbWJlcm9mIFBJWEkuR3JhcGhpY3MjXG4gICAgICogQGRlZmF1bHQgZmFsc2VcbiAgICAgKi9cbn1cblxuLy8gY29uc3RydWN0b3JcbkdyYXBoaWNzLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoQ29udGFpbmVyLnByb3RvdHlwZSk7XG5HcmFwaGljcy5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBHcmFwaGljcztcbm1vZHVsZS5leHBvcnRzID0gR3JhcGhpY3M7XG5cbi8qKlxuICogQ3JlYXRlcyBhIG5ldyBHcmFwaGljcyBvYmplY3Qgd2l0aCB0aGUgc2FtZSB2YWx1ZXMgYXMgdGhpcyBvbmUuXG4gKiBOb3RlIHRoYXQgdGhlIG9ubHkgdGhlIHByb3BlcnRpZXMgb2YgdGhlIG9iamVjdCBhcmUgY2xvbmVkLCBub3QgaXRzIHRyYW5zZm9ybSAocG9zaXRpb24sc2NhbGUsZXRjKVxuICpcbiAqIEByZXR1cm4ge1BJWEkuR3JhcGhpY3N9XG4gKi9cbkdyYXBoaWNzLnByb3RvdHlwZS5jbG9uZSA9IGZ1bmN0aW9uICgpXG57XG4gICAgdmFyIGNsb25lID0gbmV3IEdyYXBoaWNzKCk7XG5cbiAgICBjbG9uZS5yZW5kZXJhYmxlICAgID0gdGhpcy5yZW5kZXJhYmxlO1xuICAgIGNsb25lLmZpbGxBbHBoYSAgICAgPSB0aGlzLmZpbGxBbHBoYTtcbiAgICBjbG9uZS5saW5lV2lkdGggICAgID0gdGhpcy5saW5lV2lkdGg7XG4gICAgY2xvbmUubGluZUNvbG9yICAgICA9IHRoaXMubGluZUNvbG9yO1xuICAgIGNsb25lLnRpbnQgICAgICAgICAgPSB0aGlzLnRpbnQ7XG4gICAgY2xvbmUuYmxlbmRNb2RlICAgICA9IHRoaXMuYmxlbmRNb2RlO1xuICAgIGNsb25lLmlzTWFzayAgICAgICAgPSB0aGlzLmlzTWFzaztcbiAgICBjbG9uZS5ib3VuZHNQYWRkaW5nID0gdGhpcy5ib3VuZHNQYWRkaW5nO1xuICAgIGNsb25lLmRpcnR5ICAgICAgICAgPSB0cnVlO1xuICAgIGNsb25lLmdsRGlydHkgICAgICAgPSB0cnVlO1xuICAgIGNsb25lLmNhY2hlZFNwcml0ZURpcnR5ID0gdGhpcy5jYWNoZWRTcHJpdGVEaXJ0eTtcblxuICAgIC8vIGNvcHkgZ3JhcGhpY3MgZGF0YVxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5ncmFwaGljc0RhdGEubGVuZ3RoOyArK2kpXG4gICAge1xuICAgICAgICBjbG9uZS5ncmFwaGljc0RhdGEucHVzaCh0aGlzLmdyYXBoaWNzRGF0YVtpXS5jbG9uZSgpKTtcbiAgICB9XG5cbiAgICBjbG9uZS5jdXJyZW50UGF0aCA9IGNsb25lLmdyYXBoaWNzRGF0YVtjbG9uZS5ncmFwaGljc0RhdGEubGVuZ3RoIC0gMV07XG5cbiAgICBjbG9uZS51cGRhdGVMb2NhbEJvdW5kcygpO1xuXG4gICAgcmV0dXJuIGNsb25lO1xufTtcblxuLyoqXG4gKiBTcGVjaWZpZXMgdGhlIGxpbmUgc3R5bGUgdXNlZCBmb3Igc3Vic2VxdWVudCBjYWxscyB0byBHcmFwaGljcyBtZXRob2RzIHN1Y2ggYXMgdGhlIGxpbmVUbygpIG1ldGhvZCBvciB0aGUgZHJhd0NpcmNsZSgpIG1ldGhvZC5cbiAqXG4gKiBAcGFyYW0gbGluZVdpZHRoIHtudW1iZXJ9IHdpZHRoIG9mIHRoZSBsaW5lIHRvIGRyYXcsIHdpbGwgdXBkYXRlIHRoZSBvYmplY3RzIHN0b3JlZCBzdHlsZVxuICogQHBhcmFtIGNvbG9yIHtudW1iZXJ9IGNvbG9yIG9mIHRoZSBsaW5lIHRvIGRyYXcsIHdpbGwgdXBkYXRlIHRoZSBvYmplY3RzIHN0b3JlZCBzdHlsZVxuICogQHBhcmFtIGFscGhhIHtudW1iZXJ9IGFscGhhIG9mIHRoZSBsaW5lIHRvIGRyYXcsIHdpbGwgdXBkYXRlIHRoZSBvYmplY3RzIHN0b3JlZCBzdHlsZVxuICogQHJldHVybiB7UElYSS5HcmFwaGljc31cbiAqL1xuR3JhcGhpY3MucHJvdG90eXBlLmxpbmVTdHlsZSA9IGZ1bmN0aW9uIChsaW5lV2lkdGgsIGNvbG9yLCBhbHBoYSlcbntcbiAgICB0aGlzLmxpbmVXaWR0aCA9IGxpbmVXaWR0aCB8fCAwO1xuICAgIHRoaXMubGluZUNvbG9yID0gY29sb3IgfHwgMDtcbiAgICB0aGlzLmxpbmVBbHBoYSA9IChhbHBoYSA9PT0gdW5kZWZpbmVkKSA/IDEgOiBhbHBoYTtcblxuICAgIGlmICh0aGlzLmN1cnJlbnRQYXRoKVxuICAgIHtcbiAgICAgICAgaWYgKHRoaXMuY3VycmVudFBhdGguc2hhcGUucG9pbnRzLmxlbmd0aClcbiAgICAgICAge1xuICAgICAgICAgICAgLy8gaGFsZndheSB0aHJvdWdoIGEgbGluZT8gc3RhcnQgYSBuZXcgb25lIVxuICAgICAgICAgICAgdmFyIHNoYXBlID0gbmV3IG1hdGguUG9seWdvbih0aGlzLmN1cnJlbnRQYXRoLnNoYXBlLnBvaW50cy5zbGljZSgtMikpO1xuICAgICAgICAgICAgc2hhcGUuY2xvc2VkID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLmRyYXdTaGFwZShzaGFwZSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgICAvLyBvdGhlcndpc2UgaXRzIGVtcHR5IHNvIGxldHMganVzdCBzZXQgdGhlIGxpbmUgcHJvcGVydGllc1xuICAgICAgICAgICAgdGhpcy5jdXJyZW50UGF0aC5saW5lV2lkdGggPSB0aGlzLmxpbmVXaWR0aDtcbiAgICAgICAgICAgIHRoaXMuY3VycmVudFBhdGgubGluZUNvbG9yID0gdGhpcy5saW5lQ29sb3I7XG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRQYXRoLmxpbmVBbHBoYSA9IHRoaXMubGluZUFscGhhO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIE1vdmVzIHRoZSBjdXJyZW50IGRyYXdpbmcgcG9zaXRpb24gdG8geCwgeS5cbiAqXG4gKiBAcGFyYW0geCB7bnVtYmVyfSB0aGUgWCBjb29yZGluYXRlIHRvIG1vdmUgdG9cbiAqIEBwYXJhbSB5IHtudW1iZXJ9IHRoZSBZIGNvb3JkaW5hdGUgdG8gbW92ZSB0b1xuICogQHJldHVybiB7UElYSS5HcmFwaGljc31cbiAgKi9cbkdyYXBoaWNzLnByb3RvdHlwZS5tb3ZlVG8gPSBmdW5jdGlvbiAoeCwgeSlcbntcbiAgICB2YXIgc2hhcGUgPSBuZXcgbWF0aC5Qb2x5Z29uKFt4LHldKTtcbiAgICBzaGFwZS5jbG9zZWQgPSBmYWxzZTtcbiAgICB0aGlzLmRyYXdTaGFwZShzaGFwZSk7XG5cbiAgICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogRHJhd3MgYSBsaW5lIHVzaW5nIHRoZSBjdXJyZW50IGxpbmUgc3R5bGUgZnJvbSB0aGUgY3VycmVudCBkcmF3aW5nIHBvc2l0aW9uIHRvICh4LCB5KTtcbiAqIFRoZSBjdXJyZW50IGRyYXdpbmcgcG9zaXRpb24gaXMgdGhlbiBzZXQgdG8gKHgsIHkpLlxuICpcbiAqIEBwYXJhbSB4IHtudW1iZXJ9IHRoZSBYIGNvb3JkaW5hdGUgdG8gZHJhdyB0b1xuICogQHBhcmFtIHkge251bWJlcn0gdGhlIFkgY29vcmRpbmF0ZSB0byBkcmF3IHRvXG4gKiBAcmV0dXJuIHtQSVhJLkdyYXBoaWNzfVxuICovXG5HcmFwaGljcy5wcm90b3R5cGUubGluZVRvID0gZnVuY3Rpb24gKHgsIHkpXG57XG4gICAgdGhpcy5jdXJyZW50UGF0aC5zaGFwZS5wb2ludHMucHVzaCh4LCB5KTtcbiAgICB0aGlzLmRpcnR5ID0gdHJ1ZTtcblxuICAgIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBDYWxjdWxhdGUgdGhlIHBvaW50cyBmb3IgYSBxdWFkcmF0aWMgYmV6aWVyIGN1cnZlIGFuZCB0aGVuIGRyYXdzIGl0LlxuICogQmFzZWQgb246IGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vcXVlc3Rpb25zLzc4NTA5Ny9ob3ctZG8taS1pbXBsZW1lbnQtYS1iZXppZXItY3VydmUtaW4tY1xuICpcbiAqIEBwYXJhbSBjcFgge251bWJlcn0gQ29udHJvbCBwb2ludCB4XG4gKiBAcGFyYW0gY3BZIHtudW1iZXJ9IENvbnRyb2wgcG9pbnQgeVxuICogQHBhcmFtIHRvWCB7bnVtYmVyfSBEZXN0aW5hdGlvbiBwb2ludCB4XG4gKiBAcGFyYW0gdG9ZIHtudW1iZXJ9IERlc3RpbmF0aW9uIHBvaW50IHlcbiAqIEByZXR1cm4ge1BJWEkuR3JhcGhpY3N9XG4gKi9cbkdyYXBoaWNzLnByb3RvdHlwZS5xdWFkcmF0aWNDdXJ2ZVRvID0gZnVuY3Rpb24gKGNwWCwgY3BZLCB0b1gsIHRvWSlcbntcbiAgICBpZiAodGhpcy5jdXJyZW50UGF0aClcbiAgICB7XG4gICAgICAgIGlmICh0aGlzLmN1cnJlbnRQYXRoLnNoYXBlLnBvaW50cy5sZW5ndGggPT09IDApXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuY3VycmVudFBhdGguc2hhcGUucG9pbnRzID0gWzAsIDBdO1xuICAgICAgICB9XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHRoaXMubW92ZVRvKDAsMCk7XG4gICAgfVxuXG4gICAgdmFyIHhhLFxuICAgICAgICB5YSxcbiAgICAgICAgbiA9IDIwLFxuICAgICAgICBwb2ludHMgPSB0aGlzLmN1cnJlbnRQYXRoLnNoYXBlLnBvaW50cztcblxuICAgIGlmIChwb2ludHMubGVuZ3RoID09PSAwKVxuICAgIHtcbiAgICAgICAgdGhpcy5tb3ZlVG8oMCwgMCk7XG4gICAgfVxuXG4gICAgdmFyIGZyb21YID0gcG9pbnRzW3BvaW50cy5sZW5ndGgtMl07XG4gICAgdmFyIGZyb21ZID0gcG9pbnRzW3BvaW50cy5sZW5ndGgtMV07XG5cbiAgICB2YXIgaiA9IDA7XG4gICAgZm9yICh2YXIgaSA9IDE7IGkgPD0gbjsgKytpKVxuICAgIHtcbiAgICAgICAgaiA9IGkgLyBuO1xuXG4gICAgICAgIHhhID0gZnJvbVggKyAoIChjcFggLSBmcm9tWCkgKiBqICk7XG4gICAgICAgIHlhID0gZnJvbVkgKyAoIChjcFkgLSBmcm9tWSkgKiBqICk7XG5cbiAgICAgICAgcG9pbnRzLnB1c2goIHhhICsgKCAoKGNwWCArICggKHRvWCAtIGNwWCkgKiBqICkpIC0geGEpICogaiApLFxuICAgICAgICAgICAgICAgICAgICAgeWEgKyAoICgoY3BZICsgKCAodG9ZIC0gY3BZKSAqIGogKSkgLSB5YSkgKiBqICkgKTtcbiAgICB9XG5cbiAgICB0aGlzLmRpcnR5ID0gdGhpcy5ib3VuZHNEaXJ0eSA9IHRydWU7XG5cbiAgICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogQ2FsY3VsYXRlIHRoZSBwb2ludHMgZm9yIGEgYmV6aWVyIGN1cnZlIGFuZCB0aGVuIGRyYXdzIGl0LlxuICpcbiAqIEBwYXJhbSBjcFgge251bWJlcn0gQ29udHJvbCBwb2ludCB4XG4gKiBAcGFyYW0gY3BZIHtudW1iZXJ9IENvbnRyb2wgcG9pbnQgeVxuICogQHBhcmFtIGNwWDIge251bWJlcn0gU2Vjb25kIENvbnRyb2wgcG9pbnQgeFxuICogQHBhcmFtIGNwWTIge251bWJlcn0gU2Vjb25kIENvbnRyb2wgcG9pbnQgeVxuICogQHBhcmFtIHRvWCB7bnVtYmVyfSBEZXN0aW5hdGlvbiBwb2ludCB4XG4gKiBAcGFyYW0gdG9ZIHtudW1iZXJ9IERlc3RpbmF0aW9uIHBvaW50IHlcbiAqIEByZXR1cm4ge1BJWEkuR3JhcGhpY3N9XG4gKi9cbkdyYXBoaWNzLnByb3RvdHlwZS5iZXppZXJDdXJ2ZVRvID0gZnVuY3Rpb24gKGNwWCwgY3BZLCBjcFgyLCBjcFkyLCB0b1gsIHRvWSlcbntcbiAgICBpZiAodGhpcy5jdXJyZW50UGF0aClcbiAgICB7XG4gICAgICAgIGlmICh0aGlzLmN1cnJlbnRQYXRoLnNoYXBlLnBvaW50cy5sZW5ndGggPT09IDApXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuY3VycmVudFBhdGguc2hhcGUucG9pbnRzID0gWzAsIDBdO1xuICAgICAgICB9XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHRoaXMubW92ZVRvKDAsMCk7XG4gICAgfVxuXG4gICAgdmFyIG4gPSAyMCxcbiAgICAgICAgZHQsXG4gICAgICAgIGR0MixcbiAgICAgICAgZHQzLFxuICAgICAgICB0MixcbiAgICAgICAgdDMsXG4gICAgICAgIHBvaW50cyA9IHRoaXMuY3VycmVudFBhdGguc2hhcGUucG9pbnRzO1xuXG4gICAgdmFyIGZyb21YID0gcG9pbnRzW3BvaW50cy5sZW5ndGgtMl07XG4gICAgdmFyIGZyb21ZID0gcG9pbnRzW3BvaW50cy5sZW5ndGgtMV07XG5cbiAgICB2YXIgaiA9IDA7XG5cbiAgICBmb3IgKHZhciBpID0gMTsgaSA8PSBuOyArK2kpXG4gICAge1xuICAgICAgICBqID0gaSAvIG47XG5cbiAgICAgICAgZHQgPSAoMSAtIGopO1xuICAgICAgICBkdDIgPSBkdCAqIGR0O1xuICAgICAgICBkdDMgPSBkdDIgKiBkdDtcblxuICAgICAgICB0MiA9IGogKiBqO1xuICAgICAgICB0MyA9IHQyICogajtcblxuICAgICAgICBwb2ludHMucHVzaCggZHQzICogZnJvbVggKyAzICogZHQyICogaiAqIGNwWCArIDMgKiBkdCAqIHQyICogY3BYMiArIHQzICogdG9YLFxuICAgICAgICAgICAgICAgICAgICAgZHQzICogZnJvbVkgKyAzICogZHQyICogaiAqIGNwWSArIDMgKiBkdCAqIHQyICogY3BZMiArIHQzICogdG9ZKTtcbiAgICB9XG5cbiAgICB0aGlzLmRpcnR5ID0gdGhpcy5ib3VuZHNEaXJ0eSA9IHRydWU7XG5cbiAgICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogVGhlIGFyY1RvKCkgbWV0aG9kIGNyZWF0ZXMgYW4gYXJjL2N1cnZlIGJldHdlZW4gdHdvIHRhbmdlbnRzIG9uIHRoZSBjYW52YXMuXG4gKlxuICogXCJib3Jyb3dlZFwiIGZyb20gaHR0cHM6Ly9jb2RlLmdvb2dsZS5jb20vcC9meGNhbnZhcy8gLSB0aGFua3MgZ29vZ2xlIVxuICpcbiAqIEBwYXJhbSB4MSB7bnVtYmVyfSBUaGUgeC1jb29yZGluYXRlIG9mIHRoZSBiZWdpbm5pbmcgb2YgdGhlIGFyY1xuICogQHBhcmFtIHkxIHtudW1iZXJ9IFRoZSB5LWNvb3JkaW5hdGUgb2YgdGhlIGJlZ2lubmluZyBvZiB0aGUgYXJjXG4gKiBAcGFyYW0geDIge251bWJlcn0gVGhlIHgtY29vcmRpbmF0ZSBvZiB0aGUgZW5kIG9mIHRoZSBhcmNcbiAqIEBwYXJhbSB5MiB7bnVtYmVyfSBUaGUgeS1jb29yZGluYXRlIG9mIHRoZSBlbmQgb2YgdGhlIGFyY1xuICogQHBhcmFtIHJhZGl1cyB7bnVtYmVyfSBUaGUgcmFkaXVzIG9mIHRoZSBhcmNcbiAqIEByZXR1cm4ge1BJWEkuR3JhcGhpY3N9XG4gKi9cbkdyYXBoaWNzLnByb3RvdHlwZS5hcmNUbyA9IGZ1bmN0aW9uICh4MSwgeTEsIHgyLCB5MiwgcmFkaXVzKVxue1xuICAgIGlmICh0aGlzLmN1cnJlbnRQYXRoKVxuICAgIHtcbiAgICAgICAgaWYgKHRoaXMuY3VycmVudFBhdGguc2hhcGUucG9pbnRzLmxlbmd0aCA9PT0gMClcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5jdXJyZW50UGF0aC5zaGFwZS5wb2ludHMucHVzaCh4MSwgeTEpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHRoaXMubW92ZVRvKHgxLCB5MSk7XG4gICAgfVxuXG4gICAgdmFyIHBvaW50cyA9IHRoaXMuY3VycmVudFBhdGguc2hhcGUucG9pbnRzLFxuICAgICAgICBmcm9tWCA9IHBvaW50c1twb2ludHMubGVuZ3RoLTJdLFxuICAgICAgICBmcm9tWSA9IHBvaW50c1twb2ludHMubGVuZ3RoLTFdLFxuICAgICAgICBhMSA9IGZyb21ZIC0geTEsXG4gICAgICAgIGIxID0gZnJvbVggLSB4MSxcbiAgICAgICAgYTIgPSB5MiAgIC0geTEsXG4gICAgICAgIGIyID0geDIgICAtIHgxLFxuICAgICAgICBtbSA9IE1hdGguYWJzKGExICogYjIgLSBiMSAqIGEyKTtcblxuICAgIGlmIChtbSA8IDEuMGUtOCB8fCByYWRpdXMgPT09IDApXG4gICAge1xuICAgICAgICBpZiAocG9pbnRzW3BvaW50cy5sZW5ndGgtMl0gIT09IHgxIHx8IHBvaW50c1twb2ludHMubGVuZ3RoLTFdICE9PSB5MSlcbiAgICAgICAge1xuICAgICAgICAgICAgcG9pbnRzLnB1c2goeDEsIHkxKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICB2YXIgZGQgPSBhMSAqIGExICsgYjEgKiBiMSxcbiAgICAgICAgICAgIGNjID0gYTIgKiBhMiArIGIyICogYjIsXG4gICAgICAgICAgICB0dCA9IGExICogYTIgKyBiMSAqIGIyLFxuICAgICAgICAgICAgazEgPSByYWRpdXMgKiBNYXRoLnNxcnQoZGQpIC8gbW0sXG4gICAgICAgICAgICBrMiA9IHJhZGl1cyAqIE1hdGguc3FydChjYykgLyBtbSxcbiAgICAgICAgICAgIGoxID0gazEgKiB0dCAvIGRkLFxuICAgICAgICAgICAgajIgPSBrMiAqIHR0IC8gY2MsXG4gICAgICAgICAgICBjeCA9IGsxICogYjIgKyBrMiAqIGIxLFxuICAgICAgICAgICAgY3kgPSBrMSAqIGEyICsgazIgKiBhMSxcbiAgICAgICAgICAgIHB4ID0gYjEgKiAoazIgKyBqMSksXG4gICAgICAgICAgICBweSA9IGExICogKGsyICsgajEpLFxuICAgICAgICAgICAgcXggPSBiMiAqIChrMSArIGoyKSxcbiAgICAgICAgICAgIHF5ID0gYTIgKiAoazEgKyBqMiksXG4gICAgICAgICAgICBzdGFydEFuZ2xlID0gTWF0aC5hdGFuMihweSAtIGN5LCBweCAtIGN4KSxcbiAgICAgICAgICAgIGVuZEFuZ2xlICAgPSBNYXRoLmF0YW4yKHF5IC0gY3ksIHF4IC0gY3gpO1xuXG4gICAgICAgIHRoaXMuYXJjKGN4ICsgeDEsIGN5ICsgeTEsIHJhZGl1cywgc3RhcnRBbmdsZSwgZW5kQW5nbGUsIGIxICogYTIgPiBiMiAqIGExKTtcbiAgICB9XG5cbiAgICB0aGlzLmRpcnR5ID0gdGhpcy5ib3VuZHNEaXJ0eSA9IHRydWU7XG5cbiAgICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogVGhlIGFyYyBtZXRob2QgY3JlYXRlcyBhbiBhcmMvY3VydmUgKHVzZWQgdG8gY3JlYXRlIGNpcmNsZXMsIG9yIHBhcnRzIG9mIGNpcmNsZXMpLlxuICpcbiAqIEBwYXJhbSBjeCB7bnVtYmVyfSBUaGUgeC1jb29yZGluYXRlIG9mIHRoZSBjZW50ZXIgb2YgdGhlIGNpcmNsZVxuICogQHBhcmFtIGN5IHtudW1iZXJ9IFRoZSB5LWNvb3JkaW5hdGUgb2YgdGhlIGNlbnRlciBvZiB0aGUgY2lyY2xlXG4gKiBAcGFyYW0gcmFkaXVzIHtudW1iZXJ9IFRoZSByYWRpdXMgb2YgdGhlIGNpcmNsZVxuICogQHBhcmFtIHN0YXJ0QW5nbGUge251bWJlcn0gVGhlIHN0YXJ0aW5nIGFuZ2xlLCBpbiByYWRpYW5zICgwIGlzIGF0IHRoZSAzIG8nY2xvY2sgcG9zaXRpb24gb2YgdGhlIGFyYydzIGNpcmNsZSlcbiAqIEBwYXJhbSBlbmRBbmdsZSB7bnVtYmVyfSBUaGUgZW5kaW5nIGFuZ2xlLCBpbiByYWRpYW5zXG4gKiBAcGFyYW0gYW50aWNsb2Nrd2lzZSB7Ym9vbGVhbn0gT3B0aW9uYWwuIFNwZWNpZmllcyB3aGV0aGVyIHRoZSBkcmF3aW5nIHNob3VsZCBiZSBjb3VudGVyY2xvY2t3aXNlIG9yIGNsb2Nrd2lzZS4gRmFsc2UgaXMgZGVmYXVsdCwgYW5kIGluZGljYXRlcyBjbG9ja3dpc2UsIHdoaWxlIHRydWUgaW5kaWNhdGVzIGNvdW50ZXItY2xvY2t3aXNlLlxuICogQHJldHVybiB7UElYSS5HcmFwaGljc31cbiAqL1xuR3JhcGhpY3MucHJvdG90eXBlLmFyYyA9IGZ1bmN0aW9uKGN4LCBjeSwgcmFkaXVzLCBzdGFydEFuZ2xlLCBlbmRBbmdsZSwgYW50aWNsb2Nrd2lzZSlcbntcbiAgICBhbnRpY2xvY2t3aXNlID0gYW50aWNsb2Nrd2lzZSB8fCBmYWxzZTtcblxuICAgIGlmIChzdGFydEFuZ2xlID09PSBlbmRBbmdsZSlcbiAgICB7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIGlmKCAhYW50aWNsb2Nrd2lzZSAmJiBlbmRBbmdsZSA8PSBzdGFydEFuZ2xlIClcbiAgICB7XG4gICAgICAgIGVuZEFuZ2xlICs9IE1hdGguUEkgKiAyO1xuICAgIH1cbiAgICBlbHNlIGlmKCBhbnRpY2xvY2t3aXNlICYmIHN0YXJ0QW5nbGUgPD0gZW5kQW5nbGUgKVxuICAgIHtcbiAgICAgICAgc3RhcnRBbmdsZSArPSBNYXRoLlBJICogMjtcbiAgICB9XG5cbiAgICB2YXIgc3dlZXAgPSBhbnRpY2xvY2t3aXNlID8gKHN0YXJ0QW5nbGUgLSBlbmRBbmdsZSkgKiAtMSA6IChlbmRBbmdsZSAtIHN0YXJ0QW5nbGUpO1xuICAgIHZhciBzZWdzID0gIE1hdGguY2VpbChNYXRoLmFicyhzd2VlcCkgLyAoTWF0aC5QSSAqIDIpKSAqIDQwO1xuXG4gICAgaWYoc3dlZXAgPT09IDApXG4gICAge1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICB2YXIgc3RhcnRYID0gY3ggKyBNYXRoLmNvcyhzdGFydEFuZ2xlKSAqIHJhZGl1cztcbiAgICB2YXIgc3RhcnRZID0gY3kgKyBNYXRoLnNpbihzdGFydEFuZ2xlKSAqIHJhZGl1cztcblxuICAgIGlmICh0aGlzLmN1cnJlbnRQYXRoKVxuICAgIHtcbiAgICAgICAgdGhpcy5jdXJyZW50UGF0aC5zaGFwZS5wb2ludHMucHVzaChzdGFydFgsIHN0YXJ0WSk7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHRoaXMubW92ZVRvKHN0YXJ0WCwgc3RhcnRZKTtcbiAgICB9XG5cbiAgICB2YXIgcG9pbnRzID0gdGhpcy5jdXJyZW50UGF0aC5zaGFwZS5wb2ludHM7XG5cbiAgICB2YXIgdGhldGEgPSBzd2VlcC8oc2VncyoyKTtcbiAgICB2YXIgdGhldGEyID0gdGhldGEqMjtcblxuICAgIHZhciBjVGhldGEgPSBNYXRoLmNvcyh0aGV0YSk7XG4gICAgdmFyIHNUaGV0YSA9IE1hdGguc2luKHRoZXRhKTtcblxuICAgIHZhciBzZWdNaW51cyA9IHNlZ3MgLSAxO1xuXG4gICAgdmFyIHJlbWFpbmRlciA9ICggc2VnTWludXMgJSAxICkgLyBzZWdNaW51cztcblxuICAgIGZvcih2YXIgaT0wOyBpPD1zZWdNaW51czsgaSsrKVxuICAgIHtcbiAgICAgICAgdmFyIHJlYWwgPSAgaSArIHJlbWFpbmRlciAqIGk7XG5cblxuICAgICAgICB2YXIgYW5nbGUgPSAoKHRoZXRhKSArIHN0YXJ0QW5nbGUgKyAodGhldGEyICogcmVhbCkpO1xuXG4gICAgICAgIHZhciBjID0gTWF0aC5jb3MoYW5nbGUpO1xuICAgICAgICB2YXIgcyA9IC1NYXRoLnNpbihhbmdsZSk7XG5cbiAgICAgICAgcG9pbnRzLnB1c2goKCAoY1RoZXRhICogIGMpICsgKHNUaGV0YSAqIHMpICkgKiByYWRpdXMgKyBjeCxcbiAgICAgICAgICAgICAgICAgICAgKCAoY1RoZXRhICogLXMpICsgKHNUaGV0YSAqIGMpICkgKiByYWRpdXMgKyBjeSk7XG4gICAgfVxuXG4gICAgdGhpcy5kaXJ0eSA9IHRoaXMuYm91bmRzRGlydHkgPSB0cnVlO1xuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIFNwZWNpZmllcyBhIHNpbXBsZSBvbmUtY29sb3IgZmlsbCB0aGF0IHN1YnNlcXVlbnQgY2FsbHMgdG8gb3RoZXIgR3JhcGhpY3MgbWV0aG9kc1xuICogKHN1Y2ggYXMgbGluZVRvKCkgb3IgZHJhd0NpcmNsZSgpKSB1c2Ugd2hlbiBkcmF3aW5nLlxuICpcbiAqIEBwYXJhbSBjb2xvciB7bnVtYmVyfSB0aGUgY29sb3Igb2YgdGhlIGZpbGxcbiAqIEBwYXJhbSBhbHBoYSB7bnVtYmVyfSB0aGUgYWxwaGEgb2YgdGhlIGZpbGxcbiAqIEByZXR1cm4ge1BJWEkuR3JhcGhpY3N9XG4gKi9cbkdyYXBoaWNzLnByb3RvdHlwZS5iZWdpbkZpbGwgPSBmdW5jdGlvbiAoY29sb3IsIGFscGhhKVxue1xuICAgIHRoaXMuZmlsbGluZyA9IHRydWU7XG4gICAgdGhpcy5maWxsQ29sb3IgPSBjb2xvciB8fCAwO1xuICAgIHRoaXMuZmlsbEFscGhhID0gKGFscGhhID09PSB1bmRlZmluZWQpID8gMSA6IGFscGhhO1xuXG4gICAgaWYgKHRoaXMuY3VycmVudFBhdGgpXG4gICAge1xuICAgICAgICBpZiAodGhpcy5jdXJyZW50UGF0aC5zaGFwZS5wb2ludHMubGVuZ3RoIDw9IDIpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuY3VycmVudFBhdGguZmlsbCA9IHRoaXMuZmlsbGluZztcbiAgICAgICAgICAgIHRoaXMuY3VycmVudFBhdGguZmlsbENvbG9yID0gdGhpcy5maWxsQ29sb3I7XG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRQYXRoLmZpbGxBbHBoYSA9IHRoaXMuZmlsbEFscGhhO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBBcHBsaWVzIGEgZmlsbCB0byB0aGUgbGluZXMgYW5kIHNoYXBlcyB0aGF0IHdlcmUgYWRkZWQgc2luY2UgdGhlIGxhc3QgY2FsbCB0byB0aGUgYmVnaW5GaWxsKCkgbWV0aG9kLlxuICpcbiAqIEByZXR1cm4ge0dyYXBoaWNzfVxuICovXG5HcmFwaGljcy5wcm90b3R5cGUuZW5kRmlsbCA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy5maWxsaW5nID0gZmFsc2U7XG4gICAgdGhpcy5maWxsQ29sb3IgPSBudWxsO1xuICAgIHRoaXMuZmlsbEFscGhhID0gMTtcblxuICAgIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKlxuICogQHBhcmFtIHgge251bWJlcn0gVGhlIFggY29vcmQgb2YgdGhlIHRvcC1sZWZ0IG9mIHRoZSByZWN0YW5nbGVcbiAqIEBwYXJhbSB5IHtudW1iZXJ9IFRoZSBZIGNvb3JkIG9mIHRoZSB0b3AtbGVmdCBvZiB0aGUgcmVjdGFuZ2xlXG4gKiBAcGFyYW0gd2lkdGgge251bWJlcn0gVGhlIHdpZHRoIG9mIHRoZSByZWN0YW5nbGVcbiAqIEBwYXJhbSBoZWlnaHQge251bWJlcn0gVGhlIGhlaWdodCBvZiB0aGUgcmVjdGFuZ2xlXG4gKiBAcmV0dXJuIHtQSVhJLkdyYXBoaWNzfVxuICovXG5HcmFwaGljcy5wcm90b3R5cGUuZHJhd1JlY3QgPSBmdW5jdGlvbiAoIHgsIHksIHdpZHRoLCBoZWlnaHQgKVxue1xuICAgIHRoaXMuZHJhd1NoYXBlKG5ldyBtYXRoLlJlY3RhbmdsZSh4LHksIHdpZHRoLCBoZWlnaHQpKTtcblxuICAgIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKlxuICogQHBhcmFtIHgge251bWJlcn0gVGhlIFggY29vcmQgb2YgdGhlIHRvcC1sZWZ0IG9mIHRoZSByZWN0YW5nbGVcbiAqIEBwYXJhbSB5IHtudW1iZXJ9IFRoZSBZIGNvb3JkIG9mIHRoZSB0b3AtbGVmdCBvZiB0aGUgcmVjdGFuZ2xlXG4gKiBAcGFyYW0gd2lkdGgge251bWJlcn0gVGhlIHdpZHRoIG9mIHRoZSByZWN0YW5nbGVcbiAqIEBwYXJhbSBoZWlnaHQge251bWJlcn0gVGhlIGhlaWdodCBvZiB0aGUgcmVjdGFuZ2xlXG4gKiBAcGFyYW0gcmFkaXVzIHtudW1iZXJ9IFJhZGl1cyBvZiB0aGUgcmVjdGFuZ2xlIGNvcm5lcnNcbiAqIEByZXR1cm4ge1BJWEkuR3JhcGhpY3N9XG4gKi9cbkdyYXBoaWNzLnByb3RvdHlwZS5kcmF3Um91bmRlZFJlY3QgPSBmdW5jdGlvbiAoIHgsIHksIHdpZHRoLCBoZWlnaHQsIHJhZGl1cyApXG57XG4gICAgdGhpcy5kcmF3U2hhcGUobmV3IG1hdGguUm91bmRlZFJlY3RhbmdsZSh4LCB5LCB3aWR0aCwgaGVpZ2h0LCByYWRpdXMpKTtcblxuICAgIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBEcmF3cyBhIGNpcmNsZS5cbiAqXG4gKiBAcGFyYW0geCB7bnVtYmVyfSBUaGUgWCBjb29yZGluYXRlIG9mIHRoZSBjZW50ZXIgb2YgdGhlIGNpcmNsZVxuICogQHBhcmFtIHkge251bWJlcn0gVGhlIFkgY29vcmRpbmF0ZSBvZiB0aGUgY2VudGVyIG9mIHRoZSBjaXJjbGVcbiAqIEBwYXJhbSByYWRpdXMge251bWJlcn0gVGhlIHJhZGl1cyBvZiB0aGUgY2lyY2xlXG4gKiBAcmV0dXJuIHtQSVhJLkdyYXBoaWNzfVxuICovXG5HcmFwaGljcy5wcm90b3R5cGUuZHJhd0NpcmNsZSA9IGZ1bmN0aW9uICh4LCB5LCByYWRpdXMpXG57XG4gICAgdGhpcy5kcmF3U2hhcGUobmV3IG1hdGguQ2lyY2xlKHgseSwgcmFkaXVzKSk7XG5cbiAgICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogRHJhd3MgYW4gZWxsaXBzZS5cbiAqXG4gKiBAcGFyYW0geCB7bnVtYmVyfSBUaGUgWCBjb29yZGluYXRlIG9mIHRoZSBjZW50ZXIgb2YgdGhlIGVsbGlwc2VcbiAqIEBwYXJhbSB5IHtudW1iZXJ9IFRoZSBZIGNvb3JkaW5hdGUgb2YgdGhlIGNlbnRlciBvZiB0aGUgZWxsaXBzZVxuICogQHBhcmFtIHdpZHRoIHtudW1iZXJ9IFRoZSBoYWxmIHdpZHRoIG9mIHRoZSBlbGxpcHNlXG4gKiBAcGFyYW0gaGVpZ2h0IHtudW1iZXJ9IFRoZSBoYWxmIGhlaWdodCBvZiB0aGUgZWxsaXBzZVxuICogQHJldHVybiB7UElYSS5HcmFwaGljc31cbiAqL1xuR3JhcGhpY3MucHJvdG90eXBlLmRyYXdFbGxpcHNlID0gZnVuY3Rpb24gKHgsIHksIHdpZHRoLCBoZWlnaHQpXG57XG4gICAgdGhpcy5kcmF3U2hhcGUobmV3IG1hdGguRWxsaXBzZSh4LCB5LCB3aWR0aCwgaGVpZ2h0KSk7XG5cbiAgICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogRHJhd3MgYSBwb2x5Z29uIHVzaW5nIHRoZSBnaXZlbiBwYXRoLlxuICpcbiAqIEBwYXJhbSBwYXRoIHtudW1iZXJbXXxQSVhJLlBvaW50W119IFRoZSBwYXRoIGRhdGEgdXNlZCB0byBjb25zdHJ1Y3QgdGhlIHBvbHlnb24uXG4gKiBAcmV0dXJuIHtQSVhJLkdyYXBoaWNzfVxuICovXG5HcmFwaGljcy5wcm90b3R5cGUuZHJhd1BvbHlnb24gPSBmdW5jdGlvbiAocGF0aClcbntcbiAgICAvLyBwcmV2ZW50cyBhbiBhcmd1bWVudCBhc3NpZ25tZW50IGRlb3B0XG4gICAgLy8gc2VlIHNlY3Rpb24gMy4xOiBodHRwczovL2dpdGh1Yi5jb20vcGV0a2FhbnRvbm92L2JsdWViaXJkL3dpa2kvT3B0aW1pemF0aW9uLWtpbGxlcnMjMy1tYW5hZ2luZy1hcmd1bWVudHNcbiAgICB2YXIgcG9pbnRzID0gcGF0aDtcblxuICAgIHZhciBjbG9zZWQgPSB0cnVlO1xuXG4gICAgaWYgKHBvaW50cyBpbnN0YW5jZW9mIG1hdGguUG9seWdvbilcbiAgICB7XG4gICAgICAgIGNsb3NlZCA9IHBvaW50cy5jbG9zZWQ7XG4gICAgICAgIHBvaW50cyA9IHBvaW50cy5wb2ludHM7XG4gICAgfVxuXG4gICAgaWYgKCFBcnJheS5pc0FycmF5KHBvaW50cykpXG4gICAge1xuICAgICAgICAvLyBwcmV2ZW50cyBhbiBhcmd1bWVudCBsZWFrIGRlb3B0XG4gICAgICAgIC8vIHNlZSBzZWN0aW9uIDMuMjogaHR0cHM6Ly9naXRodWIuY29tL3BldGthYW50b25vdi9ibHVlYmlyZC93aWtpL09wdGltaXphdGlvbi1raWxsZXJzIzMtbWFuYWdpbmctYXJndW1lbnRzXG4gICAgICAgIHBvaW50cyA9IG5ldyBBcnJheShhcmd1bWVudHMubGVuZ3RoKTtcblxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHBvaW50cy5sZW5ndGg7ICsraSlcbiAgICAgICAge1xuICAgICAgICAgICAgcG9pbnRzW2ldID0gYXJndW1lbnRzW2ldO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgdmFyIHNoYXBlID0gbmV3IG1hdGguUG9seWdvbihwb2ludHMpO1xuICAgIHNoYXBlLmNsb3NlZCA9IGNsb3NlZDtcblxuICAgIHRoaXMuZHJhd1NoYXBlKHNoYXBlKTtcblxuICAgIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBDbGVhcnMgdGhlIGdyYXBoaWNzIHRoYXQgd2VyZSBkcmF3biB0byB0aGlzIEdyYXBoaWNzIG9iamVjdCwgYW5kIHJlc2V0cyBmaWxsIGFuZCBsaW5lIHN0eWxlIHNldHRpbmdzLlxuICpcbiAqIEByZXR1cm4ge1BJWEkuR3JhcGhpY3N9XG4gKi9cbkdyYXBoaWNzLnByb3RvdHlwZS5jbGVhciA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy5saW5lV2lkdGggPSAwO1xuICAgIHRoaXMuZmlsbGluZyA9IGZhbHNlO1xuXG4gICAgdGhpcy5kaXJ0eSA9IHRydWU7XG4gICAgdGhpcy5jbGVhckRpcnR5ID0gdHJ1ZTtcbiAgICB0aGlzLmdyYXBoaWNzRGF0YSA9IFtdO1xuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIFVzZWZ1bCBmdW5jdGlvbiB0aGF0IHJldHVybnMgYSB0ZXh0dXJlIG9mIHRoZSBncmFwaGljcyBvYmplY3QgdGhhdCBjYW4gdGhlbiBiZSB1c2VkIHRvIGNyZWF0ZSBzcHJpdGVzXG4gKiBUaGlzIGNhbiBiZSBxdWl0ZSB1c2VmdWwgaWYgeW91ciBnZW9tZXRyeSBpcyBjb21wbGljYXRlZCBhbmQgbmVlZHMgdG8gYmUgcmV1c2VkIG11bHRpcGxlIHRpbWVzLlxuICpcbiAqIEBwYXJhbSByZXNvbHV0aW9uIHtudW1iZXJ9IFRoZSByZXNvbHV0aW9uIG9mIHRoZSB0ZXh0dXJlIGJlaW5nIGdlbmVyYXRlZFxuICogQHBhcmFtIHNjYWxlTW9kZSB7bnVtYmVyfSBTaG91bGQgYmUgb25lIG9mIHRoZSBzY2FsZU1vZGUgY29uc3RzXG4gKiBAcmV0dXJuIHtQSVhJLlRleHR1cmV9IGEgdGV4dHVyZSBvZiB0aGUgZ3JhcGhpY3Mgb2JqZWN0XG4gKi9cbkdyYXBoaWNzLnByb3RvdHlwZS5nZW5lcmF0ZVRleHR1cmUgPSBmdW5jdGlvbiAocmVuZGVyZXIsIHJlc29sdXRpb24sIHNjYWxlTW9kZSlcbntcblxuICAgIHJlc29sdXRpb24gPSByZXNvbHV0aW9uIHx8IDE7XG5cbiAgICB2YXIgYm91bmRzID0gdGhpcy5nZXRMb2NhbEJvdW5kcygpO1xuXG4gICAgdmFyIGNhbnZhc0J1ZmZlciA9IG5ldyBDYW52YXNCdWZmZXIoYm91bmRzLndpZHRoICogcmVzb2x1dGlvbiwgYm91bmRzLmhlaWdodCAqIHJlc29sdXRpb24pO1xuXG4gICAgdmFyIHRleHR1cmUgPSBUZXh0dXJlLmZyb21DYW52YXMoY2FudmFzQnVmZmVyLmNhbnZhcywgc2NhbGVNb2RlKTtcbiAgICB0ZXh0dXJlLmJhc2VUZXh0dXJlLnJlc29sdXRpb24gPSByZXNvbHV0aW9uO1xuXG4gICAgY2FudmFzQnVmZmVyLmNvbnRleHQuc2NhbGUocmVzb2x1dGlvbiwgcmVzb2x1dGlvbik7XG5cbiAgICBjYW52YXNCdWZmZXIuY29udGV4dC50cmFuc2xhdGUoLWJvdW5kcy54LC1ib3VuZHMueSk7XG5cbiAgICBDYW52YXNHcmFwaGljcy5yZW5kZXJHcmFwaGljcyh0aGlzLCBjYW52YXNCdWZmZXIuY29udGV4dCk7XG5cbiAgICByZXR1cm4gdGV4dHVyZTtcbn07XG5cbi8qKlxuICogUmVuZGVycyB0aGUgb2JqZWN0IHVzaW5nIHRoZSBXZWJHTCByZW5kZXJlclxuICpcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5XZWJHTFJlbmRlcmVyfVxuICogQHByaXZhdGVcbiAqL1xuR3JhcGhpY3MucHJvdG90eXBlLl9yZW5kZXJXZWJHTCA9IGZ1bmN0aW9uIChyZW5kZXJlcilcbntcbiAgICAvLyBpZiB0aGUgc3ByaXRlIGlzIG5vdCB2aXNpYmxlIG9yIHRoZSBhbHBoYSBpcyAwIHRoZW4gbm8gbmVlZCB0byByZW5kZXIgdGhpcyBlbGVtZW50XG5cbiAgICBpZiAodGhpcy5nbERpcnR5KVxuICAgIHtcbiAgICAgICAgdGhpcy5kaXJ0eSA9IHRydWU7XG4gICAgICAgIHRoaXMuZ2xEaXJ0eSA9IGZhbHNlO1xuICAgIH1cblxuICAgIHJlbmRlcmVyLnNldE9iamVjdFJlbmRlcmVyKHJlbmRlcmVyLnBsdWdpbnMuZ3JhcGhpY3MpO1xuICAgIHJlbmRlcmVyLnBsdWdpbnMuZ3JhcGhpY3MucmVuZGVyKHRoaXMpO1xuXG59O1xuXG4vKipcbiAqIFJlbmRlcnMgdGhlIG9iamVjdCB1c2luZyB0aGUgQ2FudmFzIHJlbmRlcmVyXG4gKlxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLkNhbnZhc1JlbmRlcmVyfVxuICogQHByaXZhdGVcbiAqL1xuR3JhcGhpY3MucHJvdG90eXBlLl9yZW5kZXJDYW52YXMgPSBmdW5jdGlvbiAocmVuZGVyZXIpXG57XG4gICAgaWYgKHRoaXMuaXNNYXNrID09PSB0cnVlKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIGlmIHRoZSB0aW50IGhhcyBjaGFuZ2VkLCBzZXQgdGhlIGdyYXBoaWNzIG9iamVjdCB0byBkaXJ0eS5cbiAgICBpZiAodGhpcy5fcHJldlRpbnQgIT09IHRoaXMudGludCkge1xuICAgICAgICB0aGlzLmRpcnR5ID0gdHJ1ZTtcbiAgICB9XG5cbiAgICAvLyB0aGlzIGNvZGUgbWF5IHN0aWxsIGJlIG5lZWRlZCBzbyBsZWF2aW5nIGZvciBub3cuLlxuICAgIC8vXG4gICAgLypcbiAgICBpZiAodGhpcy5fY2FjaGVBc0JpdG1hcClcbiAgICB7XG4gICAgICAgIGlmICh0aGlzLmRpcnR5IHx8IHRoaXMuY2FjaGVkU3ByaXRlRGlydHkpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuX2dlbmVyYXRlQ2FjaGVkU3ByaXRlKCk7XG5cbiAgICAgICAgICAgIC8vIHdlIHdpbGwgYWxzbyBuZWVkIHRvIHVwZGF0ZSB0aGUgdGV4dHVyZVxuICAgICAgICAgICAgdGhpcy51cGRhdGVDYWNoZWRTcHJpdGVUZXh0dXJlKCk7XG5cbiAgICAgICAgICAgIHRoaXMuY2FjaGVkU3ByaXRlRGlydHkgPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMuZGlydHkgPSBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX2NhY2hlZFNwcml0ZS5hbHBoYSA9IHRoaXMuYWxwaGE7XG5cbiAgICAgICAgU3ByaXRlLnByb3RvdHlwZS5fcmVuZGVyQ2FudmFzLmNhbGwodGhpcy5fY2FjaGVkU3ByaXRlLCByZW5kZXJlcik7XG5cbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICAqL1xuICAgIHZhciBjb250ZXh0ID0gcmVuZGVyZXIuY29udGV4dDtcbiAgICB2YXIgdHJhbnNmb3JtID0gdGhpcy53b3JsZFRyYW5zZm9ybTtcblxuICAgIHZhciBjb21wb3NpdGVPcGVyYXRpb24gPSByZW5kZXJlci5ibGVuZE1vZGVzW3RoaXMuYmxlbmRNb2RlXTtcbiAgICBpZiAoY29tcG9zaXRlT3BlcmF0aW9uICE9PSBjb250ZXh0Lmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbilcbiAgICB7XG4gICAgICAgIGNvbnRleHQuZ2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uID0gY29tcG9zaXRlT3BlcmF0aW9uO1xuICAgIH1cblxuICAgIHZhciByZXNvbHV0aW9uID0gcmVuZGVyZXIucmVzb2x1dGlvbjtcbiAgICBjb250ZXh0LnNldFRyYW5zZm9ybShcbiAgICAgICAgdHJhbnNmb3JtLmEgKiByZXNvbHV0aW9uLFxuICAgICAgICB0cmFuc2Zvcm0uYiAqIHJlc29sdXRpb24sXG4gICAgICAgIHRyYW5zZm9ybS5jICogcmVzb2x1dGlvbixcbiAgICAgICAgdHJhbnNmb3JtLmQgKiByZXNvbHV0aW9uLFxuICAgICAgICB0cmFuc2Zvcm0udHggKiByZXNvbHV0aW9uLFxuICAgICAgICB0cmFuc2Zvcm0udHkgKiByZXNvbHV0aW9uXG4gICAgKTtcblxuICAgIENhbnZhc0dyYXBoaWNzLnJlbmRlckdyYXBoaWNzKHRoaXMsIGNvbnRleHQpO1xufTtcblxuLyoqXG4gKiBSZXRyaWV2ZXMgdGhlIGJvdW5kcyBvZiB0aGUgZ3JhcGhpYyBzaGFwZSBhcyBhIHJlY3RhbmdsZSBvYmplY3RcbiAqXG4gKiBAcGFyYW0gW21hdHJpeF0ge1BJWEkuTWF0cml4fSBUaGUgd29ybGQgdHJhbnNmb3JtIG1hdHJpeCB0byB1c2UsIGRlZmF1bHRzIHRvIHRoaXNcbiAqICBvYmplY3QncyB3b3JsZFRyYW5zZm9ybS5cbiAqIEByZXR1cm4ge1BJWEkuUmVjdGFuZ2xlfSB0aGUgcmVjdGFuZ3VsYXIgYm91bmRpbmcgYXJlYVxuICovXG5HcmFwaGljcy5wcm90b3R5cGUuZ2V0Qm91bmRzID0gZnVuY3Rpb24gKG1hdHJpeClcbntcbiAgICBpZighdGhpcy5fY3VycmVudEJvdW5kcylcbiAgICB7XG5cbiAgICAgICAgLy8gcmV0dXJuIGFuIGVtcHR5IG9iamVjdCBpZiB0aGUgaXRlbSBpcyBhIG1hc2shXG4gICAgICAgIGlmICghdGhpcy5yZW5kZXJhYmxlKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gbWF0aC5SZWN0YW5nbGUuRU1QVFk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5ib3VuZHNEaXJ0eSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51cGRhdGVMb2NhbEJvdW5kcygpO1xuXG4gICAgICAgICAgICB0aGlzLmdsRGlydHkgPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy5jYWNoZWRTcHJpdGVEaXJ0eSA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLmJvdW5kc0RpcnR5ID0gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgYm91bmRzID0gdGhpcy5fbG9jYWxCb3VuZHM7XG5cbiAgICAgICAgdmFyIHcwID0gYm91bmRzLng7XG4gICAgICAgIHZhciB3MSA9IGJvdW5kcy53aWR0aCArIGJvdW5kcy54O1xuXG4gICAgICAgIHZhciBoMCA9IGJvdW5kcy55O1xuICAgICAgICB2YXIgaDEgPSBib3VuZHMuaGVpZ2h0ICsgYm91bmRzLnk7XG5cbiAgICAgICAgdmFyIHdvcmxkVHJhbnNmb3JtID0gbWF0cml4IHx8IHRoaXMud29ybGRUcmFuc2Zvcm07XG5cbiAgICAgICAgdmFyIGEgPSB3b3JsZFRyYW5zZm9ybS5hO1xuICAgICAgICB2YXIgYiA9IHdvcmxkVHJhbnNmb3JtLmI7XG4gICAgICAgIHZhciBjID0gd29ybGRUcmFuc2Zvcm0uYztcbiAgICAgICAgdmFyIGQgPSB3b3JsZFRyYW5zZm9ybS5kO1xuICAgICAgICB2YXIgdHggPSB3b3JsZFRyYW5zZm9ybS50eDtcbiAgICAgICAgdmFyIHR5ID0gd29ybGRUcmFuc2Zvcm0udHk7XG5cbiAgICAgICAgdmFyIHgxID0gYSAqIHcxICsgYyAqIGgxICsgdHg7XG4gICAgICAgIHZhciB5MSA9IGQgKiBoMSArIGIgKiB3MSArIHR5O1xuXG4gICAgICAgIHZhciB4MiA9IGEgKiB3MCArIGMgKiBoMSArIHR4O1xuICAgICAgICB2YXIgeTIgPSBkICogaDEgKyBiICogdzAgKyB0eTtcblxuICAgICAgICB2YXIgeDMgPSBhICogdzAgKyBjICogaDAgKyB0eDtcbiAgICAgICAgdmFyIHkzID0gZCAqIGgwICsgYiAqIHcwICsgdHk7XG5cbiAgICAgICAgdmFyIHg0ID0gIGEgKiB3MSArIGMgKiBoMCArIHR4O1xuICAgICAgICB2YXIgeTQgPSAgZCAqIGgwICsgYiAqIHcxICsgdHk7XG5cbiAgICAgICAgdmFyIG1heFggPSB4MTtcbiAgICAgICAgdmFyIG1heFkgPSB5MTtcblxuICAgICAgICB2YXIgbWluWCA9IHgxO1xuICAgICAgICB2YXIgbWluWSA9IHkxO1xuXG4gICAgICAgIG1pblggPSB4MiA8IG1pblggPyB4MiA6IG1pblg7XG4gICAgICAgIG1pblggPSB4MyA8IG1pblggPyB4MyA6IG1pblg7XG4gICAgICAgIG1pblggPSB4NCA8IG1pblggPyB4NCA6IG1pblg7XG5cbiAgICAgICAgbWluWSA9IHkyIDwgbWluWSA/IHkyIDogbWluWTtcbiAgICAgICAgbWluWSA9IHkzIDwgbWluWSA/IHkzIDogbWluWTtcbiAgICAgICAgbWluWSA9IHk0IDwgbWluWSA/IHk0IDogbWluWTtcblxuICAgICAgICBtYXhYID0geDIgPiBtYXhYID8geDIgOiBtYXhYO1xuICAgICAgICBtYXhYID0geDMgPiBtYXhYID8geDMgOiBtYXhYO1xuICAgICAgICBtYXhYID0geDQgPiBtYXhYID8geDQgOiBtYXhYO1xuXG4gICAgICAgIG1heFkgPSB5MiA+IG1heFkgPyB5MiA6IG1heFk7XG4gICAgICAgIG1heFkgPSB5MyA+IG1heFkgPyB5MyA6IG1heFk7XG4gICAgICAgIG1heFkgPSB5NCA+IG1heFkgPyB5NCA6IG1heFk7XG5cbiAgICAgICAgdGhpcy5fYm91bmRzLnggPSBtaW5YO1xuICAgICAgICB0aGlzLl9ib3VuZHMud2lkdGggPSBtYXhYIC0gbWluWDtcblxuICAgICAgICB0aGlzLl9ib3VuZHMueSA9IG1pblk7XG4gICAgICAgIHRoaXMuX2JvdW5kcy5oZWlnaHQgPSBtYXhZIC0gbWluWTtcblxuICAgICAgICB0aGlzLl9jdXJyZW50Qm91bmRzID0gdGhpcy5fYm91bmRzO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLl9jdXJyZW50Qm91bmRzO1xufTtcblxuLyoqXG4qIFRlc3RzIGlmIGEgcG9pbnQgaXMgaW5zaWRlIHRoaXMgZ3JhcGhpY3Mgb2JqZWN0XG4qXG4qIEBwYXJhbSBwb2ludCB7UElYSS5Qb2ludH0gdGhlIHBvaW50IHRvIHRlc3RcbiogQHJldHVybiB7Ym9vbGVhbn0gdGhlIHJlc3VsdCBvZiB0aGUgdGVzdFxuKi9cbkdyYXBoaWNzLnByb3RvdHlwZS5jb250YWluc1BvaW50ID0gZnVuY3Rpb24oIHBvaW50IClcbntcbiAgICB0aGlzLndvcmxkVHJhbnNmb3JtLmFwcGx5SW52ZXJzZShwb2ludCwgIHRlbXBQb2ludCk7XG5cbiAgICB2YXIgZ3JhcGhpY3NEYXRhID0gdGhpcy5ncmFwaGljc0RhdGE7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGdyYXBoaWNzRGF0YS5sZW5ndGg7IGkrKylcbiAgICB7XG4gICAgICAgIHZhciBkYXRhID0gZ3JhcGhpY3NEYXRhW2ldO1xuXG4gICAgICAgIGlmICghZGF0YS5maWxsKVxuICAgICAgICB7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIG9ubHkgZGVhbCB3aXRoIGZpbGxzLi5cbiAgICAgICAgaWYgKGRhdGEuc2hhcGUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGlmICggZGF0YS5zaGFwZS5jb250YWlucyggdGVtcFBvaW50LngsIHRlbXBQb2ludC55ICkgKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xufTtcblxuLyoqXG4gKiBVcGRhdGUgdGhlIGJvdW5kcyBvZiB0aGUgb2JqZWN0XG4gKlxuICovXG5HcmFwaGljcy5wcm90b3R5cGUudXBkYXRlTG9jYWxCb3VuZHMgPSBmdW5jdGlvbiAoKVxue1xuICAgIHZhciBtaW5YID0gSW5maW5pdHk7XG4gICAgdmFyIG1heFggPSAtSW5maW5pdHk7XG5cbiAgICB2YXIgbWluWSA9IEluZmluaXR5O1xuICAgIHZhciBtYXhZID0gLUluZmluaXR5O1xuXG4gICAgaWYgKHRoaXMuZ3JhcGhpY3NEYXRhLmxlbmd0aClcbiAgICB7XG4gICAgICAgIHZhciBzaGFwZSwgcG9pbnRzLCB4LCB5LCB3LCBoO1xuXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5ncmFwaGljc0RhdGEubGVuZ3RoOyBpKyspXG4gICAgICAgIHtcbiAgICAgICAgICAgIHZhciBkYXRhID0gdGhpcy5ncmFwaGljc0RhdGFbaV07XG4gICAgICAgICAgICB2YXIgdHlwZSA9IGRhdGEudHlwZTtcbiAgICAgICAgICAgIHZhciBsaW5lV2lkdGggPSBkYXRhLmxpbmVXaWR0aDtcbiAgICAgICAgICAgIHNoYXBlID0gZGF0YS5zaGFwZTtcblxuICAgICAgICAgICAgaWYgKHR5cGUgPT09IENPTlNULlNIQVBFUy5SRUNUIHx8IHR5cGUgPT09IENPTlNULlNIQVBFUy5SUkVDKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHggPSBzaGFwZS54IC0gbGluZVdpZHRoLzI7XG4gICAgICAgICAgICAgICAgeSA9IHNoYXBlLnkgLSBsaW5lV2lkdGgvMjtcbiAgICAgICAgICAgICAgICB3ID0gc2hhcGUud2lkdGggKyBsaW5lV2lkdGg7XG4gICAgICAgICAgICAgICAgaCA9IHNoYXBlLmhlaWdodCArIGxpbmVXaWR0aDtcblxuICAgICAgICAgICAgICAgIG1pblggPSB4IDwgbWluWCA/IHggOiBtaW5YO1xuICAgICAgICAgICAgICAgIG1heFggPSB4ICsgdyA+IG1heFggPyB4ICsgdyA6IG1heFg7XG5cbiAgICAgICAgICAgICAgICBtaW5ZID0geSA8IG1pblkgPyB5IDogbWluWTtcbiAgICAgICAgICAgICAgICBtYXhZID0geSArIGggPiBtYXhZID8geSArIGggOiBtYXhZO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAodHlwZSA9PT0gQ09OU1QuU0hBUEVTLkNJUkMpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgeCA9IHNoYXBlLng7XG4gICAgICAgICAgICAgICAgeSA9IHNoYXBlLnk7XG4gICAgICAgICAgICAgICAgdyA9IHNoYXBlLnJhZGl1cyArIGxpbmVXaWR0aC8yO1xuICAgICAgICAgICAgICAgIGggPSBzaGFwZS5yYWRpdXMgKyBsaW5lV2lkdGgvMjtcblxuICAgICAgICAgICAgICAgIG1pblggPSB4IC0gdyA8IG1pblggPyB4IC0gdyA6IG1pblg7XG4gICAgICAgICAgICAgICAgbWF4WCA9IHggKyB3ID4gbWF4WCA/IHggKyB3IDogbWF4WDtcblxuICAgICAgICAgICAgICAgIG1pblkgPSB5IC0gaCA8IG1pblkgPyB5IC0gaCA6IG1pblk7XG4gICAgICAgICAgICAgICAgbWF4WSA9IHkgKyBoID4gbWF4WSA/IHkgKyBoIDogbWF4WTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKHR5cGUgPT09IENPTlNULlNIQVBFUy5FTElQKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHggPSBzaGFwZS54O1xuICAgICAgICAgICAgICAgIHkgPSBzaGFwZS55O1xuICAgICAgICAgICAgICAgIHcgPSBzaGFwZS53aWR0aCArIGxpbmVXaWR0aC8yO1xuICAgICAgICAgICAgICAgIGggPSBzaGFwZS5oZWlnaHQgKyBsaW5lV2lkdGgvMjtcblxuICAgICAgICAgICAgICAgIG1pblggPSB4IC0gdyA8IG1pblggPyB4IC0gdyA6IG1pblg7XG4gICAgICAgICAgICAgICAgbWF4WCA9IHggKyB3ID4gbWF4WCA/IHggKyB3IDogbWF4WDtcblxuICAgICAgICAgICAgICAgIG1pblkgPSB5IC0gaCA8IG1pblkgPyB5IC0gaCA6IG1pblk7XG4gICAgICAgICAgICAgICAgbWF4WSA9IHkgKyBoID4gbWF4WSA/IHkgKyBoIDogbWF4WTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAvLyBQT0xZXG4gICAgICAgICAgICAgICAgcG9pbnRzID0gc2hhcGUucG9pbnRzO1xuXG4gICAgICAgICAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBwb2ludHMubGVuZ3RoOyBqICs9IDIpXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICB4ID0gcG9pbnRzW2pdO1xuICAgICAgICAgICAgICAgICAgICB5ID0gcG9pbnRzW2orMV07XG5cbiAgICAgICAgICAgICAgICAgICAgbWluWCA9IHgtbGluZVdpZHRoIDwgbWluWCA/IHgtbGluZVdpZHRoIDogbWluWDtcbiAgICAgICAgICAgICAgICAgICAgbWF4WCA9IHgrbGluZVdpZHRoID4gbWF4WCA/IHgrbGluZVdpZHRoIDogbWF4WDtcblxuICAgICAgICAgICAgICAgICAgICBtaW5ZID0geS1saW5lV2lkdGggPCBtaW5ZID8geS1saW5lV2lkdGggOiBtaW5ZO1xuICAgICAgICAgICAgICAgICAgICBtYXhZID0geStsaW5lV2lkdGggPiBtYXhZID8geStsaW5lV2lkdGggOiBtYXhZO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICBtaW5YID0gMDtcbiAgICAgICAgbWF4WCA9IDA7XG4gICAgICAgIG1pblkgPSAwO1xuICAgICAgICBtYXhZID0gMDtcbiAgICB9XG5cbiAgICB2YXIgcGFkZGluZyA9IHRoaXMuYm91bmRzUGFkZGluZztcblxuICAgIHRoaXMuX2xvY2FsQm91bmRzLnggPSBtaW5YIC0gcGFkZGluZztcbiAgICB0aGlzLl9sb2NhbEJvdW5kcy53aWR0aCA9IChtYXhYIC0gbWluWCkgKyBwYWRkaW5nICogMjtcblxuICAgIHRoaXMuX2xvY2FsQm91bmRzLnkgPSBtaW5ZIC0gcGFkZGluZztcbiAgICB0aGlzLl9sb2NhbEJvdW5kcy5oZWlnaHQgPSAobWF4WSAtIG1pblkpICsgcGFkZGluZyAqIDI7XG59O1xuXG4vKipcbiAqIEdlbmVyYXRlcyB0aGUgY2FjaGVkIHNwcml0ZSB3aGVuIHRoZSBzcHJpdGUgaGFzIGNhY2hlQXNCaXRtYXAgPSB0cnVlXG4gKlxuICogQHByaXZhdGVcbiAqL1xuLypcbkdyYXBoaWNzLnByb3RvdHlwZS5fZ2VuZXJhdGVDYWNoZWRTcHJpdGUgPSBmdW5jdGlvbiAoKVxue1xuICAgIHZhciBib3VuZHMgPSB0aGlzLmdldExvY2FsQm91bmRzKCk7XG5cbiAgICBpZiAoIXRoaXMuX2NhY2hlZFNwcml0ZSlcbiAgICB7XG4gICAgICAgIHZhciBjYW52YXNCdWZmZXIgPSBuZXcgQ2FudmFzQnVmZmVyKGJvdW5kcy53aWR0aCwgYm91bmRzLmhlaWdodCk7XG4gICAgICAgIHZhciB0ZXh0dXJlID0gVGV4dHVyZS5mcm9tQ2FudmFzKGNhbnZhc0J1ZmZlci5jYW52YXMpO1xuXG4gICAgICAgIHRoaXMuX2NhY2hlZFNwcml0ZSA9IG5ldyBTcHJpdGUodGV4dHVyZSk7XG4gICAgICAgIHRoaXMuX2NhY2hlZFNwcml0ZS5idWZmZXIgPSBjYW52YXNCdWZmZXI7XG5cbiAgICAgICAgdGhpcy5fY2FjaGVkU3ByaXRlLndvcmxkVHJhbnNmb3JtID0gdGhpcy53b3JsZFRyYW5zZm9ybTtcbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgdGhpcy5fY2FjaGVkU3ByaXRlLmJ1ZmZlci5yZXNpemUoYm91bmRzLndpZHRoLCBib3VuZHMuaGVpZ2h0KTtcbiAgICB9XG5cbiAgICAvLyBsZXZlcmFnZSB0aGUgYW5jaG9yIHRvIGFjY291bnQgZm9yIHRoZSBvZmZzZXQgb2YgdGhlIGVsZW1lbnRcbiAgICB0aGlzLl9jYWNoZWRTcHJpdGUuYW5jaG9yLnggPSAtKCBib3VuZHMueCAvIGJvdW5kcy53aWR0aCApO1xuICAgIHRoaXMuX2NhY2hlZFNwcml0ZS5hbmNob3IueSA9IC0oIGJvdW5kcy55IC8gYm91bmRzLmhlaWdodCApO1xuXG4gICAgLy8gdGhpcy5fY2FjaGVkU3ByaXRlLmJ1ZmZlci5jb250ZXh0LnNhdmUoKTtcbiAgICB0aGlzLl9jYWNoZWRTcHJpdGUuYnVmZmVyLmNvbnRleHQudHJhbnNsYXRlKC1ib3VuZHMueCwtYm91bmRzLnkpO1xuXG4gICAgLy8gbWFrZSBzdXJlIHdlIHNldCB0aGUgYWxwaGEgb2YgdGhlIGdyYXBoaWNzIHRvIDEgZm9yIHRoZSByZW5kZXIuLlxuICAgIHRoaXMud29ybGRBbHBoYSA9IDE7XG5cbiAgICAvLyBub3cgcmVuZGVyIHRoZSBncmFwaGljLi5cbiAgICBDYW52YXNHcmFwaGljcy5yZW5kZXJHcmFwaGljcyh0aGlzLCB0aGlzLl9jYWNoZWRTcHJpdGUuYnVmZmVyLmNvbnRleHQpO1xuXG4gICAgdGhpcy5fY2FjaGVkU3ByaXRlLmFscGhhID0gdGhpcy5hbHBoYTtcbn07XG4qL1xuLyoqXG4gKiBVcGRhdGVzIHRleHR1cmUgc2l6ZSBiYXNlZCBvbiBjYW52YXMgc2l6ZVxuICpcbiAqIEBwcml2YXRlXG4gKi9cbi8qXG5HcmFwaGljcy5wcm90b3R5cGUudXBkYXRlQ2FjaGVkU3ByaXRlVGV4dHVyZSA9IGZ1bmN0aW9uICgpXG57XG4gICAgdmFyIGNhY2hlZFNwcml0ZSA9IHRoaXMuX2NhY2hlZFNwcml0ZTtcbiAgICB2YXIgdGV4dHVyZSA9IGNhY2hlZFNwcml0ZS50ZXh0dXJlO1xuICAgIHZhciBjYW52YXMgPSBjYWNoZWRTcHJpdGUuYnVmZmVyLmNhbnZhcztcblxuICAgIHRleHR1cmUuYmFzZVRleHR1cmUud2lkdGggPSBjYW52YXMud2lkdGg7XG4gICAgdGV4dHVyZS5iYXNlVGV4dHVyZS5oZWlnaHQgPSBjYW52YXMuaGVpZ2h0O1xuICAgIHRleHR1cmUuY3JvcC53aWR0aCA9IHRleHR1cmUuZnJhbWUud2lkdGggPSBjYW52YXMud2lkdGg7XG4gICAgdGV4dHVyZS5jcm9wLmhlaWdodCA9IHRleHR1cmUuZnJhbWUuaGVpZ2h0ID0gY2FudmFzLmhlaWdodDtcblxuICAgIGNhY2hlZFNwcml0ZS5fd2lkdGggPSBjYW52YXMud2lkdGg7XG4gICAgY2FjaGVkU3ByaXRlLl9oZWlnaHQgPSBjYW52YXMuaGVpZ2h0O1xuXG4gICAgLy8gdXBkYXRlIHRoZSBkaXJ0eSBiYXNlIHRleHR1cmVzXG4gICAgdGV4dHVyZS5iYXNlVGV4dHVyZS5kaXJ0eSgpO1xufTsqL1xuXG4vKipcbiAqIERlc3Ryb3lzIGEgcHJldmlvdXMgY2FjaGVkIHNwcml0ZS5cbiAqXG4gKi9cbi8qXG5HcmFwaGljcy5wcm90b3R5cGUuZGVzdHJveUNhY2hlZFNwcml0ZSA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy5fY2FjaGVkU3ByaXRlLnRleHR1cmUuZGVzdHJveSh0cnVlKTtcblxuICAgIC8vIGxldCB0aGUgZ2MgY29sbGVjdCB0aGUgdW51c2VkIHNwcml0ZVxuICAgIC8vIFRPRE8gY291bGQgYmUgb2JqZWN0IHBvb2xlZCFcbiAgICB0aGlzLl9jYWNoZWRTcHJpdGUgPSBudWxsO1xufTsqL1xuXG4vKipcbiAqIERyYXdzIHRoZSBnaXZlbiBzaGFwZSB0byB0aGlzIEdyYXBoaWNzIG9iamVjdC4gQ2FuIGJlIGFueSBvZiBDaXJjbGUsIFJlY3RhbmdsZSwgRWxsaXBzZSwgTGluZSBvciBQb2x5Z29uLlxuICpcbiAqIEBwYXJhbSBzaGFwZSB7UElYSS5DaXJjbGV8UElYSS5SZWN0YW5nbGV8UElYSS5FbGxpcHNlfFBJWEkuTGluZXxQSVhJLlBvbHlnb259IFRoZSBzaGFwZSBvYmplY3QgdG8gZHJhdy5cbiAqIEByZXR1cm4ge1BJWEkuR3JhcGhpY3NEYXRhfSBUaGUgZ2VuZXJhdGVkIEdyYXBoaWNzRGF0YSBvYmplY3QuXG4gKi9cbkdyYXBoaWNzLnByb3RvdHlwZS5kcmF3U2hhcGUgPSBmdW5jdGlvbiAoc2hhcGUpXG57XG4gICAgaWYgKHRoaXMuY3VycmVudFBhdGgpXG4gICAge1xuICAgICAgICAvLyBjaGVjayBjdXJyZW50IHBhdGghXG4gICAgICAgIGlmICh0aGlzLmN1cnJlbnRQYXRoLnNoYXBlLnBvaW50cy5sZW5ndGggPD0gMilcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5ncmFwaGljc0RhdGEucG9wKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLmN1cnJlbnRQYXRoID0gbnVsbDtcblxuICAgIHZhciBkYXRhID0gbmV3IEdyYXBoaWNzRGF0YSh0aGlzLmxpbmVXaWR0aCwgdGhpcy5saW5lQ29sb3IsIHRoaXMubGluZUFscGhhLCB0aGlzLmZpbGxDb2xvciwgdGhpcy5maWxsQWxwaGEsIHRoaXMuZmlsbGluZywgc2hhcGUpO1xuXG4gICAgdGhpcy5ncmFwaGljc0RhdGEucHVzaChkYXRhKTtcblxuICAgIGlmIChkYXRhLnR5cGUgPT09IENPTlNULlNIQVBFUy5QT0xZKVxuICAgIHtcbiAgICAgICAgZGF0YS5zaGFwZS5jbG9zZWQgPSBkYXRhLnNoYXBlLmNsb3NlZCB8fCB0aGlzLmZpbGxpbmc7XG4gICAgICAgIHRoaXMuY3VycmVudFBhdGggPSBkYXRhO1xuICAgIH1cblxuICAgIHRoaXMuZGlydHkgPSB0aGlzLmJvdW5kc0RpcnR5ID0gdHJ1ZTtcblxuICAgIHJldHVybiBkYXRhO1xufTtcblxuLyoqXG4gKiBEZXN0cm95cyB0aGUgR3JhcGhpY3Mgb2JqZWN0LlxuICovXG5HcmFwaGljcy5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uICgpIHtcbiAgICBDb250YWluZXIucHJvdG90eXBlLmRlc3Ryb3kuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcblxuICAgIC8vIGRlc3Ryb3kgZWFjaCBvZiB0aGUgR3JhcGhpY3NEYXRhIG9iamVjdHNcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuZ3JhcGhpY3NEYXRhLmxlbmd0aDsgKytpKSB7XG4gICAgICAgIHRoaXMuZ3JhcGhpY3NEYXRhW2ldLmRlc3Ryb3koKTtcbiAgICB9XG5cbiAgICAvLyBmb3IgZWFjaCB3ZWJnbCBkYXRhIGVudHJ5LCBkZXN0cm95IHRoZSBXZWJHTEdyYXBoaWNzRGF0YVxuICAgIGZvciAodmFyIGlkIGluIHRoaXMuX3dlYmdsKSB7XG4gICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgdGhpcy5fd2ViZ2xbaWRdLmRhdGEubGVuZ3RoOyArK2opIHtcbiAgICAgICAgICAgIHRoaXMuX3dlYmdsW2lkXS5kYXRhW2pdLmRlc3Ryb3koKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMuZ3JhcGhpY3NEYXRhID0gbnVsbDtcblxuICAgIHRoaXMuY3VycmVudFBhdGggPSBudWxsO1xuICAgIHRoaXMuX3dlYmdsID0gbnVsbDtcbiAgICB0aGlzLl9sb2NhbEJvdW5kcyA9IG51bGw7XG59O1xuIiwiLyoqXG4gKiBBIEdyYXBoaWNzRGF0YSBvYmplY3QuXG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIGxpbmVXaWR0aCB7bnVtYmVyfSB0aGUgd2lkdGggb2YgdGhlIGxpbmUgdG8gZHJhd1xuICogQHBhcmFtIGxpbmVDb2xvciB7bnVtYmVyfSB0aGUgY29sb3Igb2YgdGhlIGxpbmUgdG8gZHJhd1xuICogQHBhcmFtIGxpbmVBbHBoYSB7bnVtYmVyfSB0aGUgYWxwaGEgb2YgdGhlIGxpbmUgdG8gZHJhd1xuICogQHBhcmFtIGZpbGxDb2xvciB7bnVtYmVyfSB0aGUgY29sb3Igb2YgdGhlIGZpbGxcbiAqIEBwYXJhbSBmaWxsQWxwaGEge251bWJlcn0gdGhlIGFscGhhIG9mIHRoZSBmaWxsXG4gKiBAcGFyYW0gZmlsbCAgICAgIHtib29sZWFufSB3aGV0aGVyIG9yIG5vdCB0aGUgc2hhcGUgaXMgZmlsbGVkIHdpdGggYSBjb2xvdXJcbiAqIEBwYXJhbSBzaGFwZSAgICAge0NpcmNsZXxSZWN0YW5nbGV8RWxsaXBzZXxMaW5lfFBvbHlnb259IFRoZSBzaGFwZSBvYmplY3QgdG8gZHJhdy5cbiAqL1xuZnVuY3Rpb24gR3JhcGhpY3NEYXRhKGxpbmVXaWR0aCwgbGluZUNvbG9yLCBsaW5lQWxwaGEsIGZpbGxDb2xvciwgZmlsbEFscGhhLCBmaWxsLCBzaGFwZSlcbntcbiAgICAvKlxuICAgICAqIEBtZW1iZXIge251bWJlcn0gdGhlIHdpZHRoIG9mIHRoZSBsaW5lIHRvIGRyYXdcbiAgICAgKi9cbiAgICB0aGlzLmxpbmVXaWR0aCA9IGxpbmVXaWR0aDtcblxuICAgIC8qXG4gICAgICogQG1lbWJlciB7bnVtYmVyfSB0aGUgY29sb3Igb2YgdGhlIGxpbmUgdG8gZHJhd1xuICAgICAqL1xuICAgIHRoaXMubGluZUNvbG9yID0gbGluZUNvbG9yO1xuICAgIC8qXG4gICAgICogQG1lbWJlciB7bnVtYmVyfSB0aGUgYWxwaGEgb2YgdGhlIGxpbmUgdG8gZHJhd1xuICAgICAqL1xuICAgIHRoaXMubGluZUFscGhhID0gbGluZUFscGhhO1xuICAgIC8qXG4gICAgICogQG1lbWJlciB7bnVtYmVyfSBjYWNoZWQgdGludCBvZiB0aGUgbGluZSB0byBkcmF3XG4gICAgICovXG4gICAgdGhpcy5fbGluZVRpbnQgPSBsaW5lQ29sb3I7XG5cbiAgICAvKlxuICAgICAqIEBtZW1iZXIge251bWJlcn0gdGhlIGNvbG9yIG9mIHRoZSBmaWxsXG4gICAgICovXG4gICAgdGhpcy5maWxsQ29sb3IgPSBmaWxsQ29sb3I7XG5cbiAgICAvKlxuICAgICAqIEBtZW1iZXIge251bWJlcn0gdGhlIGFscGhhIG9mIHRoZSBmaWxsXG4gICAgICovXG4gICAgdGhpcy5maWxsQWxwaGEgPSBmaWxsQWxwaGE7XG5cbiAgICAvKlxuICAgICAqIEBtZW1iZXIge251bWJlcn0gY2FjaGVkIHRpbnQgb2YgdGhlIGZpbGxcbiAgICAgKi9cbiAgICB0aGlzLl9maWxsVGludCA9IGZpbGxDb2xvcjtcblxuICAgIC8qXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn0gd2hldGhlciBvciBub3QgdGhlIHNoYXBlIGlzIGZpbGxlZCB3aXRoIGEgY29sb3VyXG4gICAgICovXG4gICAgdGhpcy5maWxsID0gZmlsbDtcblxuICAgIC8qXG4gICAgICogQG1lbWJlciB7UElYSS5DaXJjbGV8UElYSS5SZWN0YW5nbGV8UElYSS5FbGxpcHNlfFBJWEkuTGluZXxQSVhJLlBvbHlnb259IFRoZSBzaGFwZSBvYmplY3QgdG8gZHJhdy5cbiAgICAgKi9cbiAgICB0aGlzLnNoYXBlID0gc2hhcGU7XG5cbiAgICAvKlxuICAgICAqIEBtZW1iZXIge251bWJlcn0gVGhlIHR5cGUgb2YgdGhlIHNoYXBlLCBzZWUgdGhlIENvbnN0LlNoYXBlcyBmaWxlIGZvciBhbGwgdGhlIGV4aXN0aW5nIHR5cGVzLFxuICAgICAqL1xuICAgIHRoaXMudHlwZSA9IHNoYXBlLnR5cGU7XG59XG5cbkdyYXBoaWNzRGF0YS5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBHcmFwaGljc0RhdGE7XG5tb2R1bGUuZXhwb3J0cyA9IEdyYXBoaWNzRGF0YTtcblxuLyoqXG4gKiBDcmVhdGVzIGEgbmV3IEdyYXBoaWNzRGF0YSBvYmplY3Qgd2l0aCB0aGUgc2FtZSB2YWx1ZXMgYXMgdGhpcyBvbmUuXG4gKlxuICogQHJldHVybiB7UElYSS5HcmFwaGljc0RhdGF9XG4gKi9cbkdyYXBoaWNzRGF0YS5wcm90b3R5cGUuY2xvbmUgPSBmdW5jdGlvbiAoKVxue1xuICAgIHJldHVybiBuZXcgR3JhcGhpY3NEYXRhKFxuICAgICAgICB0aGlzLmxpbmVXaWR0aCxcbiAgICAgICAgdGhpcy5saW5lQ29sb3IsXG4gICAgICAgIHRoaXMubGluZUFscGhhLFxuICAgICAgICB0aGlzLmZpbGxDb2xvcixcbiAgICAgICAgdGhpcy5maWxsQWxwaGEsXG4gICAgICAgIHRoaXMuZmlsbCxcbiAgICAgICAgdGhpcy5zaGFwZVxuICAgICk7XG59O1xuXG4vKipcbiAqIERlc3Ryb3lzIHRoZSBHcmFwaGljcyBkYXRhLlxuICovXG5HcmFwaGljc0RhdGEucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoKSB7XG4gICAgdGhpcy5zaGFwZSA9IG51bGw7XG59O1xuIiwidmFyIHV0aWxzID0gcmVxdWlyZSgnLi4vLi4vdXRpbHMnKSxcbiAgICBtYXRoID0gcmVxdWlyZSgnLi4vLi4vbWF0aCcpLFxuICAgIENPTlNUID0gcmVxdWlyZSgnLi4vLi4vY29uc3QnKSxcbiAgICBPYmplY3RSZW5kZXJlciA9IHJlcXVpcmUoJy4uLy4uL3JlbmRlcmVycy93ZWJnbC91dGlscy9PYmplY3RSZW5kZXJlcicpLFxuICAgIFdlYkdMUmVuZGVyZXIgPSByZXF1aXJlKCcuLi8uLi9yZW5kZXJlcnMvd2ViZ2wvV2ViR0xSZW5kZXJlcicpLFxuICAgIFdlYkdMR3JhcGhpY3NEYXRhID0gcmVxdWlyZSgnLi9XZWJHTEdyYXBoaWNzRGF0YScpLFxuICAgIFByaW1pdGl2ZVNoYWRlciA9IHJlcXVpcmUoJy4vc2hhZGVycy9QcmltaXRpdmVTaGFkZXInKSxcblxuICAgIC8vIHNvbWUgZHJhd2luZyBmdW5jdGlvbnMuLlxuICAgIGJ1aWxkTGluZSA9IHJlcXVpcmUoJy4vdXRpbHMvYnVpbGRMaW5lJyk7XG4gICAgYnVpbGRQb2x5ID0gcmVxdWlyZSgnLi91dGlscy9idWlsZFBvbHknKTtcbiAgICBidWlsZENvbXBsZXhQb2x5ID0gcmVxdWlyZSgnLi91dGlscy9idWlsZENvbXBsZXhQb2x5Jyk7XG4gICAgYnVpbGRSZWN0YW5nbGUgPSByZXF1aXJlKCcuL3V0aWxzL2J1aWxkUmVjdGFuZ2xlJyk7XG4gICAgYnVpbGRSb3VuZGVkUmVjdGFuZ2xlID0gcmVxdWlyZSgnLi91dGlscy9idWlsZFJvdW5kZWRSZWN0YW5nbGUnKTtcbiAgICBidWlsZENpcmNsZSA9IHJlcXVpcmUoJy4vdXRpbHMvYnVpbGRDaXJjbGUnKTtcblxuICAgIGVhcmN1dCA9IHJlcXVpcmUoJ2VhcmN1dCcpO1xuXG4vKipcbiAqIFJlbmRlcnMgdGhlIGdyYXBoaWNzIG9iamVjdC5cbiAqXG4gKiBAY2xhc3NcbiAqIEBwcml2YXRlXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQGV4dGVuZHMgUElYSS5PYmplY3RSZW5kZXJlclxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLldlYkdMUmVuZGVyZXJ9IFRoZSByZW5kZXJlciB0aGlzIG9iamVjdCByZW5kZXJlciB3b3JrcyBmb3IuXG4gKi9cbmZ1bmN0aW9uIEdyYXBoaWNzUmVuZGVyZXIocmVuZGVyZXIpXG57XG4gICAgT2JqZWN0UmVuZGVyZXIuY2FsbCh0aGlzLCByZW5kZXJlcik7XG5cbiAgICB0aGlzLmdyYXBoaWNzRGF0YVBvb2wgPSBbXTtcblxuICAgIHRoaXMucHJpbWl0aXZlU2hhZGVyID0gbnVsbDtcbiAgICB0aGlzLmNvbXBsZXhQcmltaXRpdmVTaGFkZXIgPSBudWxsO1xuXG4gICAgdGhpcy5nbCA9IHJlbmRlcmVyLmdsO1xuXG4gICAgLyoqXG4gICAgICogVGhpcyBpcyB0aGUgbWF4aW11bSBudW1iZXIgb2YgcG9pbnRzIGEgcG9seSBjYW4gY29udGFpbiBiZWZvcmUgaXQgaXMgcmVuZGVyZWQgYXMgYSBjb21wbGV4IHBvbHlnb24gKHVzaW5nIHRoZSBzdGVuY2lsIGJ1ZmZlcilcbiAgICAgKiBAdHlwZSB7TnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMubWF4aW11bVNpbXBsZVBvbHlTaXplID0gMjAwO1xufVxuXG5HcmFwaGljc1JlbmRlcmVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoT2JqZWN0UmVuZGVyZXIucHJvdG90eXBlKTtcbkdyYXBoaWNzUmVuZGVyZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gR3JhcGhpY3NSZW5kZXJlcjtcbm1vZHVsZS5leHBvcnRzID0gR3JhcGhpY3NSZW5kZXJlcjtcblxuV2ViR0xSZW5kZXJlci5yZWdpc3RlclBsdWdpbignZ3JhcGhpY3MnLCBHcmFwaGljc1JlbmRlcmVyKTtcblxuLyoqXG4gKiBDYWxsZWQgd2hlbiB0aGVyZSBpcyBhIFdlYkdMIGNvbnRleHQgY2hhbmdlXG4gKlxuICogQHByaXZhdGVcbiAqXG4gKi9cbkdyYXBoaWNzUmVuZGVyZXIucHJvdG90eXBlLm9uQ29udGV4dENoYW5nZSA9IGZ1bmN0aW9uKClcbntcbiAgICB0aGlzLmdsID0gdGhpcy5yZW5kZXJlci5nbDtcbiAgICB0aGlzLnByaW1pdGl2ZVNoYWRlciA9IG5ldyBQcmltaXRpdmVTaGFkZXIodGhpcy5nbClcbn07XG5cbi8qKlxuICogRGVzdHJveXMgdGhpcyByZW5kZXJlci5cbiAqXG4gKi9cbkdyYXBoaWNzUmVuZGVyZXIucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoKSB7XG4gICAgT2JqZWN0UmVuZGVyZXIucHJvdG90eXBlLmRlc3Ryb3kuY2FsbCh0aGlzKTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5ncmFwaGljc0RhdGFQb29sLmxlbmd0aDsgKytpKSB7XG4gICAgICAgIHRoaXMuZ3JhcGhpY3NEYXRhUG9vbFtpXS5kZXN0cm95KCk7XG4gICAgfVxuXG4gICAgdGhpcy5ncmFwaGljc0RhdGFQb29sID0gbnVsbDtcbn07XG5cbi8qKlxuICogUmVuZGVycyBhIGdyYXBoaWNzIG9iamVjdC5cbiAqXG4gKiBAcGFyYW0gZ3JhcGhpY3Mge1BJWEkuR3JhcGhpY3N9IFRoZSBncmFwaGljcyBvYmplY3QgdG8gcmVuZGVyLlxuICovXG5HcmFwaGljc1JlbmRlcmVyLnByb3RvdHlwZS5yZW5kZXIgPSBmdW5jdGlvbihncmFwaGljcylcbntcbiAgICB2YXIgcmVuZGVyZXIgPSB0aGlzLnJlbmRlcmVyO1xuICAgIHZhciBnbCA9IHJlbmRlcmVyLmdsO1xuXG4gICAgdmFyIHdlYkdMRGF0YTtcbiAgLy8gIGNvbnNvbGUubG9nKGdyYXBoaWNzKVxuICAgIGlmIChncmFwaGljcy5kaXJ0eSB8fCAhZ3JhcGhpY3MuX3dlYkdMW2dsLmlkXSlcbiAgICB7XG4gICAgICAgIHRoaXMudXBkYXRlR3JhcGhpY3MoZ3JhcGhpY3MpO1xuICAgIH1cblxuICAgIHZhciB3ZWJHTCA9IGdyYXBoaWNzLl93ZWJHTFtnbC5pZF07XG5cbiAgICAvLyBUaGlzICBjb3VsZCBiZSBzcGVlZGVkIHVwIGZvciBzdXJlIVxuXG4gICAgcmVuZGVyZXIuYmxlbmRNb2RlTWFuYWdlci5zZXRCbGVuZE1vZGUoIGdyYXBoaWNzLmJsZW5kTW9kZSApO1xuXG4vLyAgICB2YXIgbWF0cml4ID0gIGdyYXBoaWNzLndvcmxkVHJhbnNmb3JtLmNsb25lKCk7XG4vLyAgICB2YXIgbWF0cml4ID0gIHJlbmRlcmVyLmN1cnJlbnRSZW5kZXJUYXJnZXQucHJvamVjdGlvbk1hdHJpeC5jbG9uZSgpO1xuLy8gICAgbWF0cml4LmFwcGVuZChncmFwaGljcy53b3JsZFRyYW5zZm9ybSk7XG5cbiAgICBmb3IgKHZhciBpID0gMCwgbiA9IHdlYkdMLmRhdGEubGVuZ3RoOyBpIDwgbjsgaSsrKVxuICAgIHtcbiAgICAgICAgd2ViR0xEYXRhID0gd2ViR0wuZGF0YVtpXTtcblxuICAgICAgICBpZiAod2ViR0wuZGF0YVtpXS5tb2RlID09PSAxKVxuICAgICAgICB7XG4gICAgICAgICAgICAvL1RPRE8gZml4IHRoaXMgb25lIVxuICAgICAgICAgICAgXG4gICAgICAgICAgICAvKlxuICAgICAgICAgICAgcmVuZGVyZXIuc3RlbmNpbE1hbmFnZXIucHVzaFN0ZW5jaWwoZ3JhcGhpY3MsIHdlYkdMRGF0YSk7XG5cbiAgICAgICAgICAgIGdsLnVuaWZvcm0xZihyZW5kZXJlci5zaGFkZXJNYW5hZ2VyLmNvbXBsZXhQcmltaXRpdmVTaGFkZXIudW5pZm9ybXMuYWxwaGEuX2xvY2F0aW9uLCBncmFwaGljcy53b3JsZEFscGhhICogd2ViR0xEYXRhLmFscGhhKTtcblxuICAgICAgICAgICAgLy8gcmVuZGVyIHF1YWQuLlxuICAgICAgICAgICAgZ2wuZHJhd0VsZW1lbnRzKGdsLlRSSUFOR0xFX0ZBTiwgNCwgZ2wuVU5TSUdORURfU0hPUlQsICggd2ViR0xEYXRhLmluZGljZXMubGVuZ3RoIC0gNCApICogMiApO1xuXG4gICAgICAgICAgICByZW5kZXJlci5zdGVuY2lsTWFuYWdlci5wb3BTdGVuY2lsKGdyYXBoaWNzLCB3ZWJHTERhdGEpO1xuICAgICAgICAgICAgKi9cbiAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgIHtcblxuICAgICAgICAgICAgc2hhZGVyID0gdGhpcy5wcmltaXRpdmVTaGFkZXI7XG5cbiAgICAgICAgICAgIHJlbmRlcmVyLmJpbmRTaGFkZXIoc2hhZGVyKVxuXG4gICAgICAgICAgICBzaGFkZXIudW5pZm9ybXMudHJhbnNsYXRpb25NYXRyaXggPSBncmFwaGljcy53b3JsZFRyYW5zZm9ybS50b0FycmF5KHRydWUpO1xuICAgICAgICAgICAgc2hhZGVyLnVuaWZvcm1zLnRpbnQgPSB1dGlscy5oZXgycmdiKGdyYXBoaWNzLnRpbnQpO1xuICAgICAgICAgICAgc2hhZGVyLnVuaWZvcm1zLmFscGhhID0gZ3JhcGhpY3Mud29ybGRBbHBoYTtcblxuXG4gICAgICAgICAgICBnbC5iaW5kQnVmZmVyKGdsLkFSUkFZX0JVRkZFUiwgd2ViR0xEYXRhLmJ1ZmZlcik7XG5cbiAgICAgICAgICAgIHNoYWRlciA9IHRoaXMucHJpbWl0aXZlU2hhZGVyO1xuXG4gICAgICAgICAgICBzaGFkZXIuYXR0cmlidXRlcy5hVmVydGV4UG9zaXRpb24ucG9pbnRlcihnbC5GTE9BVCwgZmFsc2UsIDQgKiA2LCAwKTtcbiAgICAgICAgICAgIHNoYWRlci5hdHRyaWJ1dGVzLmFDb2xvci5wb2ludGVyKGdsLkZMT0FULCBmYWxzZSwgNCAqIDYsIDIgKiA0KTtcblxuICAgICAgICAgICAgZ2wuZW5hYmxlVmVydGV4QXR0cmliQXJyYXkoc2hhZGVyLmF0dHJpYnV0ZXMuYVZlcnRleFBvc2l0aW9uLmxvY2F0aW9uKTtcbiAgICAgICAgICAgIGdsLmVuYWJsZVZlcnRleEF0dHJpYkFycmF5KHNoYWRlci5hdHRyaWJ1dGVzLmFDb2xvci5sb2NhdGlvbik7XG5cbiAgICAgICAgICAgIC8vIHNldCB0aGUgaW5kZXggYnVmZmVyIVxuICAgICAgICAgICAgZ2wuYmluZEJ1ZmZlcihnbC5FTEVNRU5UX0FSUkFZX0JVRkZFUiwgd2ViR0xEYXRhLmluZGV4QnVmZmVyKTtcbiAgICAgICAgICAgIGdsLmRyYXdFbGVtZW50cyhnbC5UUklBTkdMRV9TVFJJUCwgIHdlYkdMRGF0YS5pbmRpY2VzLmxlbmd0aCwgZ2wuVU5TSUdORURfU0hPUlQsIDAgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJlbmRlcmVyLmRyYXdDb3VudCsrO1xuICAgIH1cbn07XG5cbi8qKlxuICogVXBkYXRlcyB0aGUgZ3JhcGhpY3Mgb2JqZWN0XG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSBncmFwaGljcyB7UElYSS5HcmFwaGljc30gVGhlIGdyYXBoaWNzIG9iamVjdCB0byB1cGRhdGVcbiAqL1xuR3JhcGhpY3NSZW5kZXJlci5wcm90b3R5cGUudXBkYXRlR3JhcGhpY3MgPSBmdW5jdGlvbihncmFwaGljcylcbntcbiAgICB2YXIgZ2wgPSB0aGlzLnJlbmRlcmVyLmdsO1xuXG4gICAgIC8vIGdldCB0aGUgY29udGV4dHMgZ3JhcGhpY3Mgb2JqZWN0XG4gICAgdmFyIHdlYkdMID0gZ3JhcGhpY3MuX3dlYkdMW2dsLmlkXTtcblxuICAgIC8vIGlmIHRoZSBncmFwaGljcyBvYmplY3QgZG9lcyBub3QgZXhpc3QgaW4gdGhlIHdlYkdMIGNvbnRleHQgdGltZSB0byBjcmVhdGUgaXQhXG4gICAgaWYgKCF3ZWJHTClcbiAgICB7XG4gICAgICAgIHdlYkdMID0gZ3JhcGhpY3MuX3dlYkdMW2dsLmlkXSA9IHtsYXN0SW5kZXg6MCwgZGF0YTpbXSwgZ2w6Z2x9O1xuICAgIH1cblxuICAgXG4gICAgLy8gZmxhZyB0aGUgZ3JhcGhpY3MgYXMgbm90IGRpcnR5IGFzIHdlIGFyZSBhYm91dCB0byB1cGRhdGUgaXQuLi5cbiAgICBncmFwaGljcy5kaXJ0eSA9IGZhbHNlO1xuXG4gICAgdmFyIGk7XG5cbiAgICAvLyBpZiB0aGUgdXNlciBjbGVhcmVkIHRoZSBncmFwaGljcyBvYmplY3Qgd2Ugd2lsbCBuZWVkIHRvIGNsZWFyIGV2ZXJ5IG9iamVjdFxuICAgIGlmIChncmFwaGljcy5jbGVhckRpcnR5KVxuICAgIHtcbiAgICAgICAgZ3JhcGhpY3MuY2xlYXJEaXJ0eSA9IGZhbHNlO1xuXG4gICAgICAgIC8vIGxvb3AgdGhyb3VnaCBhbmQgcmV0dXJuIGFsbCB0aGUgd2ViR0xEYXRhcyB0byB0aGUgb2JqZWN0IHBvb2wgc28gdGhhbiBjYW4gYmUgcmV1c2VkIGxhdGVyIG9uXG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCB3ZWJHTC5kYXRhLmxlbmd0aDsgaSsrKVxuICAgICAgICB7XG4gICAgICAgICAgICB2YXIgZ3JhcGhpY3NEYXRhID0gd2ViR0wuZGF0YVtpXTtcbiAgICAgICAgICAgIGdyYXBoaWNzRGF0YS5yZXNldCgpO1xuICAgICAgICAgICAgdGhpcy5ncmFwaGljc0RhdGFQb29sLnB1c2goIGdyYXBoaWNzRGF0YSApO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gY2xlYXIgdGhlIGFycmF5IGFuZCByZXNldCB0aGUgaW5kZXguLlxuICAgICAgICB3ZWJHTC5kYXRhID0gW107XG4gICAgICAgIHdlYkdMLmxhc3RJbmRleCA9IDA7XG4gICAgfVxuXG4gICAgdmFyIHdlYkdMRGF0YTtcblxuICAgIC8vIGxvb3AgdGhyb3VnaCB0aGUgZ3JhcGhpY3MgZGF0YXMgYW5kIGNvbnN0cnVjdCBlYWNoIG9uZS4uXG4gICAgLy8gaWYgdGhlIG9iamVjdCBpcyBhIGNvbXBsZXggZmlsbCB0aGVuIHRoZSBuZXcgc3RlbmNpbCBidWZmZXIgdGVjaG5pcXVlIHdpbGwgYmUgdXNlZFxuICAgIC8vIG90aGVyIHdpc2UgZ3JhcGhpY3Mgb2JqZWN0cyB3aWxsIGJlIHB1c2hlZCBpbnRvIGEgYmF0Y2guLlxuICAgIGZvciAoaSA9IHdlYkdMLmxhc3RJbmRleDsgaSA8IGdyYXBoaWNzLmdyYXBoaWNzRGF0YS5sZW5ndGg7IGkrKylcbiAgICB7XG4gICAgICAgIHZhciBkYXRhID0gZ3JhcGhpY3MuZ3JhcGhpY3NEYXRhW2ldO1xuXG4gICAgICAgIGlmIChkYXRhLnR5cGUgPT09IENPTlNULlNIQVBFUy5QT0xZKVxuICAgICAgICB7XG4gICAgICAgICAgICAvLyBuZWVkIHRvIGFkZCB0aGUgcG9pbnRzIHRoZSB0aGUgZ3JhcGhpY3Mgb2JqZWN0Li5cbiAgICAgICAgICAgIGRhdGEucG9pbnRzID0gZGF0YS5zaGFwZS5wb2ludHMuc2xpY2UoKTtcbiAgICAgICAgICAgIGlmIChkYXRhLnNoYXBlLmNsb3NlZClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAvLyBjbG9zZSB0aGUgcG9seSBpZiB0aGUgdmFsdWUgaXMgdHJ1ZSFcbiAgICAgICAgICAgICAgICBpZiAoZGF0YS5wb2ludHNbMF0gIT09IGRhdGEucG9pbnRzW2RhdGEucG9pbnRzLmxlbmd0aC0yXSB8fCBkYXRhLnBvaW50c1sxXSAhPT0gZGF0YS5wb2ludHNbZGF0YS5wb2ludHMubGVuZ3RoLTFdKVxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgZGF0YS5wb2ludHMucHVzaChkYXRhLnBvaW50c1swXSwgZGF0YS5wb2ludHNbMV0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gTUFLRSBTVVJFIFdFIEhBVkUgVEhFIENPUlJFQ1QgVFlQRS4uXG4gICAgICAgICAgICBpZiAoZGF0YS5maWxsKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGlmIChkYXRhLnBvaW50cy5sZW5ndGggPj0gNilcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChkYXRhLnBvaW50cy5sZW5ndGggPCB0aGlzLm1heGltdW1TaW1wbGVQb2x5U2l6ZSAqIDIpXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHdlYkdMRGF0YSA9IHRoaXMuc3dpdGNoTW9kZSh3ZWJHTCwgMCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjYW5EcmF3VXNpbmdTaW1wbGUgPSBidWlsZFBvbHkoZGF0YSwgd2ViR0xEYXRhKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFjYW5EcmF3VXNpbmdTaW1wbGUpXG4gICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd2ViR0xEYXRhID0gdGhpcy5zd2l0Y2hNb2RlKHdlYkdMLCAxKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWlsZENvbXBsZXhQb2x5KGRhdGEsIHdlYkdMRGF0YSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHdlYkdMRGF0YSA9IHRoaXMuc3dpdGNoTW9kZSh3ZWJHTCwgMSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBidWlsZENvbXBsZXhQb2x5KGRhdGEsIHdlYkdMRGF0YSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChkYXRhLmxpbmVXaWR0aCA+IDApXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgd2ViR0xEYXRhID0gdGhpcy5zd2l0Y2hNb2RlKHdlYkdMLCAwKTtcbiAgICAgICAgICAgICAgICBidWlsZExpbmUoZGF0YSwgd2ViR0xEYXRhKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgIHtcbiAgICAgICAgICAgIHdlYkdMRGF0YSA9IHRoaXMuc3dpdGNoTW9kZSh3ZWJHTCwgMCk7XG5cbiAgICAgICAgICAgIGlmIChkYXRhLnR5cGUgPT09IENPTlNULlNIQVBFUy5SRUNUKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGJ1aWxkUmVjdGFuZ2xlKGRhdGEsIHdlYkdMRGF0YSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChkYXRhLnR5cGUgPT09IENPTlNULlNIQVBFUy5DSVJDIHx8IGRhdGEudHlwZSA9PT0gQ09OU1QuU0hBUEVTLkVMSVApXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgYnVpbGRDaXJjbGUoZGF0YSwgd2ViR0xEYXRhKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGRhdGEudHlwZSA9PT0gQ09OU1QuU0hBUEVTLlJSRUMpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgYnVpbGRSb3VuZGVkUmVjdGFuZ2xlKGRhdGEsIHdlYkdMRGF0YSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICB3ZWJHTC5sYXN0SW5kZXgrKztcbiAgICB9XG5cbiAgICAvLyB1cGxvYWQgYWxsIHRoZSBkaXJ0eSBkYXRhLi4uXG4gICAgZm9yIChpID0gMDsgaSA8IHdlYkdMLmRhdGEubGVuZ3RoOyBpKyspXG4gICAge1xuICAgICAgICB3ZWJHTERhdGEgPSB3ZWJHTC5kYXRhW2ldO1xuXG4gICAgICAgIGlmICh3ZWJHTERhdGEuZGlydHkpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHdlYkdMRGF0YS51cGxvYWQoKTtcbiAgICAgICAgfVxuICAgIH1cbn07XG5cbi8qKlxuICpcbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHdlYkdMIHtXZWJHTFJlbmRlcmluZ0NvbnRleHR9IHRoZSBjdXJyZW50IFdlYkdMIGRyYXdpbmcgY29udGV4dFxuICogQHBhcmFtIHR5cGUge251bWJlcn0gVE9ETyBAQWx2aW5cbiAqL1xuR3JhcGhpY3NSZW5kZXJlci5wcm90b3R5cGUuc3dpdGNoTW9kZSA9IGZ1bmN0aW9uICh3ZWJHTCwgdHlwZSlcbntcbiAgICB2YXIgd2ViR0xEYXRhO1xuXG4gICAgaWYgKCF3ZWJHTC5kYXRhLmxlbmd0aClcbiAgICB7XG4gICAgICAgIHdlYkdMRGF0YSA9IHRoaXMuZ3JhcGhpY3NEYXRhUG9vbC5wb3AoKSB8fCBuZXcgV2ViR0xHcmFwaGljc0RhdGEod2ViR0wuZ2wpO1xuICAgICAgICB3ZWJHTERhdGEubW9kZSA9IHR5cGU7XG4gICAgICAgIHdlYkdMLmRhdGEucHVzaCh3ZWJHTERhdGEpO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICB3ZWJHTERhdGEgPSB3ZWJHTC5kYXRhW3dlYkdMLmRhdGEubGVuZ3RoLTFdO1xuXG4gICAgICAgIGlmICgod2ViR0xEYXRhLnBvaW50cy5sZW5ndGggPiAzMjAwMDApIHx8IHdlYkdMRGF0YS5tb2RlICE9PSB0eXBlIHx8IHR5cGUgPT09IDEpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHdlYkdMRGF0YSA9IHRoaXMuZ3JhcGhpY3NEYXRhUG9vbC5wb3AoKSB8fCBuZXcgV2ViR0xHcmFwaGljc0RhdGEod2ViR0wuZ2wpO1xuICAgICAgICAgICAgd2ViR0xEYXRhLm1vZGUgPSB0eXBlO1xuICAgICAgICAgICAgd2ViR0wuZGF0YS5wdXNoKHdlYkdMRGF0YSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB3ZWJHTERhdGEuZGlydHkgPSB0cnVlO1xuXG4gICAgcmV0dXJuIHdlYkdMRGF0YTtcbn07XG5cbiIsIi8qKlxuICogQW4gb2JqZWN0IGNvbnRhaW5pbmcgV2ViR0wgc3BlY2lmaWMgcHJvcGVydGllcyB0byBiZSB1c2VkIGJ5IHRoZSBXZWJHTCByZW5kZXJlclxuICpcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqIEBwYXJhbSBnbCB7V2ViR0xSZW5kZXJpbmdDb250ZXh0fSB0aGUgY3VycmVudCBXZWJHTCBkcmF3aW5nIGNvbnRleHRcbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIFdlYkdMR3JhcGhpY3NEYXRhKGdsKSB7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgY3VycmVudCBXZWJHTCBkcmF3aW5nIGNvbnRleHRcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1dlYkdMUmVuZGVyaW5nQ29udGV4dH1cbiAgICAgKi9cbiAgICB0aGlzLmdsID0gZ2w7XG5cbiAgICAvL1RPRE8gZG9lcyB0aGlzIG5lZWQgdG8gYmUgc3BsaXQgYmVmb3JlIHVwbG9kaW5nPz9cbiAgICAvKipcbiAgICAgKiBBbiBhcnJheSBvZiBjb2xvciBjb21wb25lbnRzIChyLGcsYilcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJbXX1cbiAgICAgKi9cbiAgICB0aGlzLmNvbG9yID0gWzAsMCwwXTsgLy8gY29sb3Igc3BsaXQhXG5cbiAgICAvKipcbiAgICAgKiBBbiBhcnJheSBvZiBwb2ludHMgdG8gZHJhd1xuICAgICAqIEBtZW1iZXIge1BJWEkuUG9pbnRbXX1cbiAgICAgKi9cbiAgICB0aGlzLnBvaW50cyA9IFtdO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGluZGljZXMgb2YgdGhlIHZlcnRpY2VzXG4gICAgICogQG1lbWJlciB7bnVtYmVyW119XG4gICAgICovXG4gICAgdGhpcy5pbmRpY2VzID0gW107XG4gICAgLyoqXG4gICAgICogVGhlIG1haW4gYnVmZmVyXG4gICAgICogQG1lbWJlciB7V2ViR0xCdWZmZXJ9XG4gICAgICovXG4gICAgdGhpcy5idWZmZXIgPSBnbC5jcmVhdGVCdWZmZXIoKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBpbmRleCBidWZmZXJcbiAgICAgKiBAbWVtYmVyIHtXZWJHTEJ1ZmZlcn1cbiAgICAgKi9cbiAgICB0aGlzLmluZGV4QnVmZmVyID0gZ2wuY3JlYXRlQnVmZmVyKCk7XG5cbiAgICAvKipcbiAgICAgKiB0b2RvIEBhbHZpblxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLm1vZGUgPSAxO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGFscGhhIG9mIHRoZSBncmFwaGljc1xuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLmFscGhhID0gMTtcblxuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgdGhpcyBncmFwaGljcyBpcyBkaXJ0eSBvciBub3RcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqL1xuICAgIHRoaXMuZGlydHkgPSB0cnVlO1xuXG4gICAgdGhpcy5nbFBvaW50cyA9IG51bGw7XG4gICAgdGhpcy5nbEluZGljZXMgPSBudWxsO1xufVxuXG5XZWJHTEdyYXBoaWNzRGF0YS5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBXZWJHTEdyYXBoaWNzRGF0YTtcbm1vZHVsZS5leHBvcnRzID0gV2ViR0xHcmFwaGljc0RhdGE7XG5cbi8qKlxuICogUmVzZXRzIHRoZSB2ZXJ0aWNlcyBhbmQgdGhlIGluZGljZXNcbiAqL1xuV2ViR0xHcmFwaGljc0RhdGEucHJvdG90eXBlLnJlc2V0ID0gZnVuY3Rpb24gKCkge1xuICAgIHRoaXMucG9pbnRzLmxlbmd0aCA9IDA7XG4gICAgdGhpcy5pbmRpY2VzLmxlbmd0aCA9IDA7XG59O1xuXG4vKipcbiAqIEJpbmRzIHRoZSBidWZmZXJzIGFuZCB1cGxvYWRzIHRoZSBkYXRhXG4gKi9cbldlYkdMR3JhcGhpY3NEYXRhLnByb3RvdHlwZS51cGxvYWQgPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGdsID0gdGhpcy5nbDtcblxuLy8gICAgdGhpcy5sYXN0SW5kZXggPSBncmFwaGljcy5ncmFwaGljc0RhdGEubGVuZ3RoO1xuICAgIHRoaXMuZ2xQb2ludHMgPSBuZXcgRmxvYXQzMkFycmF5KHRoaXMucG9pbnRzKTtcblxuICAgIGdsLmJpbmRCdWZmZXIoZ2wuQVJSQVlfQlVGRkVSLCB0aGlzLmJ1ZmZlcik7XG4gICAgZ2wuYnVmZmVyRGF0YShnbC5BUlJBWV9CVUZGRVIsIHRoaXMuZ2xQb2ludHMsIGdsLlNUQVRJQ19EUkFXKTtcblxuICAgIHRoaXMuZ2xJbmRpY2VzID0gbmV3IFVpbnQxNkFycmF5KHRoaXMuaW5kaWNlcyk7XG5cbiAgICBnbC5iaW5kQnVmZmVyKGdsLkVMRU1FTlRfQVJSQVlfQlVGRkVSLCB0aGlzLmluZGV4QnVmZmVyKTtcbiAgICBnbC5idWZmZXJEYXRhKGdsLkVMRU1FTlRfQVJSQVlfQlVGRkVSLCB0aGlzLmdsSW5kaWNlcywgZ2wuU1RBVElDX0RSQVcpO1xuXG4gICAgdGhpcy5kaXJ0eSA9IGZhbHNlO1xufTtcblxuV2ViR0xHcmFwaGljc0RhdGEucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoKSB7XG4gICAgdGhpcy5jb2xvciA9IG51bGw7XG4gICAgdGhpcy5wb2ludHMgPSBudWxsO1xuICAgIHRoaXMuaW5kaWNlcyA9IG51bGw7XG5cbiAgICB0aGlzLmdsLmRlbGV0ZUJ1ZmZlcih0aGlzLmJ1ZmZlcik7XG4gICAgdGhpcy5nbC5kZWxldGVCdWZmZXIodGhpcy5pbmRleEJ1ZmZlcik7XG4gICAgXG4gICAgdGhpcy5nbCA9IG51bGw7XG5cbiAgICB0aGlzLmJ1ZmZlciA9IG51bGw7XG4gICAgdGhpcy5pbmRleEJ1ZmZlciA9IG51bGw7XG5cbiAgICB0aGlzLmdsUG9pbnRzID0gbnVsbDtcbiAgICB0aGlzLmdsSW5kaWNlcyA9IG51bGw7XG59O1xuIiwidmFyIFNoYWRlciA9IHJlcXVpcmUoJ3BpeGktZ2wtY29yZScpLkdMU2hhZGVyO1xuXG4vKipcbiAqIFRoaXMgc2hhZGVyIGlzIHVzZWQgdG8gZHJhdyBzaW1wbGUgcHJpbWl0aXZlIHNoYXBlcyBmb3Ige0BsaW5rIFBJWEkuR3JhcGhpY3N9LlxuICpcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqIEBleHRlbmRzIFBJWEkuU2hhZGVyXG4gKiBAcGFyYW0gc2hhZGVyTWFuYWdlciB7U2hhZGVyTWFuYWdlcn0gVGhlIHdlYmdsIHNoYWRlciBtYW5hZ2VyIHRoaXMgc2hhZGVyIHdvcmtzIGZvci5cbiAqL1xuZnVuY3Rpb24gUHJpbWl0aXZlU2hhZGVyKGdsKVxue1xuICAgIFNoYWRlci5jYWxsKHRoaXMsXG4gICAgICAgIGdsLFxuICAgICAgICAvLyB2ZXJ0ZXggc2hhZGVyXG4gICAgICAgIFtcbiAgICAgICAgICAgICdhdHRyaWJ1dGUgdmVjMiBhVmVydGV4UG9zaXRpb247JyxcbiAgICAgICAgICAgICdhdHRyaWJ1dGUgdmVjNCBhQ29sb3I7JyxcblxuICAgICAgICAgICAgJ3VuaWZvcm0gbWF0MyB0cmFuc2xhdGlvbk1hdHJpeDsnLFxuICAgICAgICAgICAgJ3VuaWZvcm0gbWF0MyBwcm9qZWN0aW9uTWF0cml4OycsXG5cbiAgICAgICAgICAgICd1bmlmb3JtIGZsb2F0IGFscGhhOycsXG4gICAgICAgICAgICAndW5pZm9ybSBmbG9hdCBmbGlwWTsnLFxuICAgICAgICAgICAgJ3VuaWZvcm0gdmVjMyB0aW50OycsXG5cbiAgICAgICAgICAgICd2YXJ5aW5nIHZlYzQgdkNvbG9yOycsXG5cbiAgICAgICAgICAgICd2b2lkIG1haW4odm9pZCl7JyxcbiAgICAgICAgICAgICcgICBnbF9Qb3NpdGlvbiA9IHZlYzQoKHByb2plY3Rpb25NYXRyaXggKiB0cmFuc2xhdGlvbk1hdHJpeCAqIHZlYzMoYVZlcnRleFBvc2l0aW9uLCAxLjApKS54eSwgMC4wLCAxLjApOycsXG4gICAgICAgICAgICAnICAgdkNvbG9yID0gYUNvbG9yICogdmVjNCh0aW50ICogYWxwaGEsIGFscGhhKTsnLFxuICAgICAgICAgICAgJ30nXG4gICAgICAgIF0uam9pbignXFxuJyksXG4gICAgICAgIC8vIGZyYWdtZW50IHNoYWRlclxuICAgICAgICBbXG4gICAgICAgICAgICAncHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7JyxcblxuICAgICAgICAgICAgJ3ZhcnlpbmcgdmVjNCB2Q29sb3I7JyxcblxuICAgICAgICAgICAgJ3ZvaWQgbWFpbih2b2lkKXsnLFxuICAgICAgICAgICAgJyAgIGdsX0ZyYWdDb2xvciA9IHZDb2xvcjsnLFxuICAgICAgICAgICAgJ30nXG4gICAgICAgIF0uam9pbignXFxuJylcbiAgICApO1xufVxuXG5QcmltaXRpdmVTaGFkZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShTaGFkZXIucHJvdG90eXBlKTtcblByaW1pdGl2ZVNoYWRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBQcmltaXRpdmVTaGFkZXI7XG5cbm1vZHVsZS5leHBvcnRzID0gUHJpbWl0aXZlU2hhZGVyO1xuIiwidmFyIGJ1aWxkTGluZSA9IHJlcXVpcmUoJy4vYnVpbGRMaW5lJyksXG4gICAgdXRpbHMgPSByZXF1aXJlKCcuLi8uLi8uLi91dGlscycpO1xuXG4vKipcbiAqIEJ1aWxkcyBhIGNpcmNsZSB0byBkcmF3XG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSBncmFwaGljc0RhdGEge1BJWEkuR3JhcGhpY3N9IFRoZSBncmFwaGljcyBvYmplY3QgdG8gZHJhd1xuICogQHBhcmFtIHdlYkdMRGF0YSB7b2JqZWN0fSBhbiBvYmplY3QgY29udGFpbmluZyBhbGwgdGhlIHdlYkdMLXNwZWNpZmljIGluZm9ybWF0aW9uIHRvIGNyZWF0ZSB0aGlzIHNoYXBlXG4gKi9cbnZhciBidWlsZENpcmNsZSA9IGZ1bmN0aW9uIChncmFwaGljc0RhdGEsIHdlYkdMRGF0YSlcbntcbiAgICAvLyBuZWVkIHRvIGNvbnZlcnQgcG9pbnRzIHRvIGEgbmljZSByZWd1bGFyIGRhdGFcbiAgICB2YXIgY2lyY2xlRGF0YSA9IGdyYXBoaWNzRGF0YS5zaGFwZTtcbiAgICB2YXIgeCA9IGNpcmNsZURhdGEueDtcbiAgICB2YXIgeSA9IGNpcmNsZURhdGEueTtcbiAgICB2YXIgd2lkdGg7XG4gICAgdmFyIGhlaWdodDtcblxuICAgIC8vIFRPRE8gLSBiaXQgaGFja3k/P1xuICAgIGlmIChncmFwaGljc0RhdGEudHlwZSA9PT0gQ09OU1QuU0hBUEVTLkNJUkMpXG4gICAge1xuICAgICAgICB3aWR0aCA9IGNpcmNsZURhdGEucmFkaXVzO1xuICAgICAgICBoZWlnaHQgPSBjaXJjbGVEYXRhLnJhZGl1cztcbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgd2lkdGggPSBjaXJjbGVEYXRhLndpZHRoO1xuICAgICAgICBoZWlnaHQgPSBjaXJjbGVEYXRhLmhlaWdodDtcbiAgICB9XG5cbiAgICB2YXIgdG90YWxTZWdzID0gTWF0aC5mbG9vcigzMCAqIE1hdGguc3FydChjaXJjbGVEYXRhLnJhZGl1cykpIHx8IE1hdGguZmxvb3IoMTUgKiBNYXRoLnNxcnQoY2lyY2xlRGF0YS53aWR0aCArIGNpcmNsZURhdGEuaGVpZ2h0KSk7XG4gICAgdmFyIHNlZyA9IChNYXRoLlBJICogMikgLyB0b3RhbFNlZ3MgO1xuXG4gICAgdmFyIGkgPSAwO1xuXG4gICAgaWYgKGdyYXBoaWNzRGF0YS5maWxsKVxuICAgIHtcbiAgICAgICAgdmFyIGNvbG9yID0gdXRpbHMuaGV4MnJnYihncmFwaGljc0RhdGEuZmlsbENvbG9yKTtcbiAgICAgICAgdmFyIGFscGhhID0gZ3JhcGhpY3NEYXRhLmZpbGxBbHBoYTtcblxuICAgICAgICB2YXIgciA9IGNvbG9yWzBdICogYWxwaGE7XG4gICAgICAgIHZhciBnID0gY29sb3JbMV0gKiBhbHBoYTtcbiAgICAgICAgdmFyIGIgPSBjb2xvclsyXSAqIGFscGhhO1xuXG4gICAgICAgIHZhciB2ZXJ0cyA9IHdlYkdMRGF0YS5wb2ludHM7XG4gICAgICAgIHZhciBpbmRpY2VzID0gd2ViR0xEYXRhLmluZGljZXM7XG5cbiAgICAgICAgdmFyIHZlY1BvcyA9IHZlcnRzLmxlbmd0aC82O1xuXG4gICAgICAgIGluZGljZXMucHVzaCh2ZWNQb3MpO1xuXG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCB0b3RhbFNlZ3MgKyAxIDsgaSsrKVxuICAgICAgICB7XG4gICAgICAgICAgICB2ZXJ0cy5wdXNoKHgseSwgciwgZywgYiwgYWxwaGEpO1xuXG4gICAgICAgICAgICB2ZXJ0cy5wdXNoKHggKyBNYXRoLnNpbihzZWcgKiBpKSAqIHdpZHRoLFxuICAgICAgICAgICAgICAgICAgICAgICB5ICsgTWF0aC5jb3Moc2VnICogaSkgKiBoZWlnaHQsXG4gICAgICAgICAgICAgICAgICAgICAgIHIsIGcsIGIsIGFscGhhKTtcblxuICAgICAgICAgICAgaW5kaWNlcy5wdXNoKHZlY1BvcysrLCB2ZWNQb3MrKyk7XG4gICAgICAgIH1cblxuICAgICAgICBpbmRpY2VzLnB1c2godmVjUG9zLTEpO1xuICAgIH1cblxuICAgIGlmIChncmFwaGljc0RhdGEubGluZVdpZHRoKVxuICAgIHtcbiAgICAgICAgdmFyIHRlbXBQb2ludHMgPSBncmFwaGljc0RhdGEucG9pbnRzO1xuXG4gICAgICAgIGdyYXBoaWNzRGF0YS5wb2ludHMgPSBbXTtcblxuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgdG90YWxTZWdzICsgMTsgaSsrKVxuICAgICAgICB7XG4gICAgICAgICAgICBncmFwaGljc0RhdGEucG9pbnRzLnB1c2goeCArIE1hdGguc2luKHNlZyAqIGkpICogd2lkdGgsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeSArIE1hdGguY29zKHNlZyAqIGkpICogaGVpZ2h0KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGJ1aWxkTGluZShncmFwaGljc0RhdGEsIHdlYkdMRGF0YSk7XG5cbiAgICAgICAgZ3JhcGhpY3NEYXRhLnBvaW50cyA9IHRlbXBQb2ludHM7XG4gICAgfVxufTtcblxuXG5tb2R1bGUuZXhwb3J0cyA9IGJ1aWxkQ2lyY2xlOyIsInZhciBidWlsZExpbmUgPSByZXF1aXJlKCcuL2J1aWxkTGluZScpLFxuICAgIHV0aWxzID0gcmVxdWlyZSgnLi4vLi4vLi4vdXRpbHMnKTtcbiAgICBcblxuXG4vKipcbiAqIEJ1aWxkcyBhIGNvbXBsZXggcG9seWdvbiB0byBkcmF3XG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSBncmFwaGljc0RhdGEge1BJWEkuR3JhcGhpY3N9IFRoZSBncmFwaGljcyBvYmplY3QgY29udGFpbmluZyBhbGwgdGhlIG5lY2Vzc2FyeSBwcm9wZXJ0aWVzXG4gKiBAcGFyYW0gd2ViR0xEYXRhIHtvYmplY3R9IGFuIG9iamVjdCBjb250YWluaW5nIGFsbCB0aGUgd2ViR0wtc3BlY2lmaWMgaW5mb3JtYXRpb24gdG8gY3JlYXRlIHRoaXMgc2hhcGVcbiAqL1xudmFyIGJ1aWxkQ29tcGxleFBvbHkgPSBmdW5jdGlvbiAoZ3JhcGhpY3NEYXRhLCB3ZWJHTERhdGEpXG57XG4gICAgLy9UT0RPIC0gbm8gbmVlZCB0byBjb3B5IHRoaXMgYXMgaXQgZ2V0cyB0dXJuZWQgaW50byBhIEZMb2F0MzJBcnJheSBhbnl3YXlzLi5cbiAgICB2YXIgcG9pbnRzID0gZ3JhcGhpY3NEYXRhLnBvaW50cy5zbGljZSgpO1xuXG4gICAgaWYgKHBvaW50cy5sZW5ndGggPCA2KVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIGdldCBmaXJzdCBhbmQgbGFzdCBwb2ludC4uIGZpZ3VyZSBvdXQgdGhlIG1pZGRsZSFcbiAgICB2YXIgaW5kaWNlcyA9IHdlYkdMRGF0YS5pbmRpY2VzO1xuICAgIHdlYkdMRGF0YS5wb2ludHMgPSBwb2ludHM7XG4gICAgd2ViR0xEYXRhLmFscGhhID0gZ3JhcGhpY3NEYXRhLmZpbGxBbHBoYTtcbiAgICB3ZWJHTERhdGEuY29sb3IgPSB1dGlscy5oZXgycmdiKGdyYXBoaWNzRGF0YS5maWxsQ29sb3IpO1xuXG4gICAgLy8gY2FsY2xhdGUgdGhlIGJvdW5kcy4uXG4gICAgdmFyIG1pblggPSBJbmZpbml0eTtcbiAgICB2YXIgbWF4WCA9IC1JbmZpbml0eTtcblxuICAgIHZhciBtaW5ZID0gSW5maW5pdHk7XG4gICAgdmFyIG1heFkgPSAtSW5maW5pdHk7XG5cbiAgICB2YXIgeCx5O1xuXG4gICAgLy8gZ2V0IHNpemUuLlxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcG9pbnRzLmxlbmd0aDsgaSs9MilcbiAgICB7XG4gICAgICAgIHggPSBwb2ludHNbaV07XG4gICAgICAgIHkgPSBwb2ludHNbaSsxXTtcblxuICAgICAgICBtaW5YID0geCA8IG1pblggPyB4IDogbWluWDtcbiAgICAgICAgbWF4WCA9IHggPiBtYXhYID8geCA6IG1heFg7XG5cbiAgICAgICAgbWluWSA9IHkgPCBtaW5ZID8geSA6IG1pblk7XG4gICAgICAgIG1heFkgPSB5ID4gbWF4WSA/IHkgOiBtYXhZO1xuICAgIH1cblxuICAgIC8vIGFkZCBhIHF1YWQgdG8gdGhlIGVuZCBjb3MgdGhlcmUgaXMgbm8gcG9pbnQgbWFraW5nIGFub3RoZXIgYnVmZmVyIVxuICAgIHBvaW50cy5wdXNoKG1pblgsIG1pblksXG4gICAgICAgICAgICAgICAgbWF4WCwgbWluWSxcbiAgICAgICAgICAgICAgICBtYXhYLCBtYXhZLFxuICAgICAgICAgICAgICAgIG1pblgsIG1heFkpO1xuXG4gICAgLy8gcHVzaCBhIHF1YWQgb250byB0aGUgZW5kLi5cblxuICAgIC8vVE9ETyAtIHRoaXMgYWludCBuZWVkZWQhXG4gICAgdmFyIGxlbmd0aCA9IHBvaW50cy5sZW5ndGggLyAyO1xuICAgIGZvciAoaSA9IDA7IGkgPCBsZW5ndGg7IGkrKylcbiAgICB7XG4gICAgICAgIGluZGljZXMucHVzaCggaSApO1xuICAgIH1cblxufTtcblxuXG5cbm1vZHVsZS5leHBvcnRzID0gYnVpbGRDb21wbGV4UG9seTsiLCJ2YXIgbWF0aCA9IHJlcXVpcmUoJy4uLy4uLy4uL21hdGgnKSxcbiAgICB1dGlscyA9IHJlcXVpcmUoJy4uLy4uLy4uL3V0aWxzJyk7XG5cbi8qKlxuICogQnVpbGRzIGEgbGluZSB0byBkcmF3XG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSBncmFwaGljc0RhdGEge1BJWEkuR3JhcGhpY3N9IFRoZSBncmFwaGljcyBvYmplY3QgY29udGFpbmluZyBhbGwgdGhlIG5lY2Vzc2FyeSBwcm9wZXJ0aWVzXG4gKiBAcGFyYW0gd2ViR0xEYXRhIHtvYmplY3R9IGFuIG9iamVjdCBjb250YWluaW5nIGFsbCB0aGUgd2ViR0wtc3BlY2lmaWMgaW5mb3JtYXRpb24gdG8gY3JlYXRlIHRoaXMgc2hhcGVcbiAqL1xudmFyIGJ1aWxkTGluZSA9IGZ1bmN0aW9uIChncmFwaGljc0RhdGEsIHdlYkdMRGF0YSlcbntcbiAgICAvLyBUT0RPIE9QVElNSVNFIVxuICAgIHZhciBpID0gMDtcbiAgICB2YXIgcG9pbnRzID0gZ3JhcGhpY3NEYXRhLnBvaW50cztcblxuICAgIGlmIChwb2ludHMubGVuZ3RoID09PSAwKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICAvLyBpZiB0aGUgbGluZSB3aWR0aCBpcyBhbiBvZGQgbnVtYmVyIGFkZCAwLjUgdG8gYWxpZ24gdG8gYSB3aG9sZSBwaXhlbFxuICAgIC8vIGNvbW1lbnRpbmcgdGhpcyBvdXQgZml4ZXMgIzcxMSBhbmQgIzE2MjBcbiAgICAvLyBpZiAoZ3JhcGhpY3NEYXRhLmxpbmVXaWR0aCUyKVxuICAgIC8vIHtcbiAgICAvLyAgICAgZm9yIChpID0gMDsgaSA8IHBvaW50cy5sZW5ndGg7IGkrKylcbiAgICAvLyAgICAge1xuICAgIC8vICAgICAgICAgcG9pbnRzW2ldICs9IDAuNTtcbiAgICAvLyAgICAgfVxuICAgIC8vIH1cblxuICAgIC8vIGdldCBmaXJzdCBhbmQgbGFzdCBwb2ludC4uIGZpZ3VyZSBvdXQgdGhlIG1pZGRsZSFcbiAgICB2YXIgZmlyc3RQb2ludCA9IG5ldyBtYXRoLlBvaW50KHBvaW50c1swXSwgcG9pbnRzWzFdKTtcbiAgICB2YXIgbGFzdFBvaW50ID0gbmV3IG1hdGguUG9pbnQocG9pbnRzW3BvaW50cy5sZW5ndGggLSAyXSwgcG9pbnRzW3BvaW50cy5sZW5ndGggLSAxXSk7XG5cbiAgICAvLyBpZiB0aGUgZmlyc3QgcG9pbnQgaXMgdGhlIGxhc3QgcG9pbnQgLSBnb25uYSBoYXZlIGlzc3VlcyA6KVxuICAgIGlmIChmaXJzdFBvaW50LnggPT09IGxhc3RQb2ludC54ICYmIGZpcnN0UG9pbnQueSA9PT0gbGFzdFBvaW50LnkpXG4gICAge1xuICAgICAgICAvLyBuZWVkIHRvIGNsb25lIGFzIHdlIGFyZSBnb2luZyB0byBzbGlnaHRseSBtb2RpZnkgdGhlIHNoYXBlLi5cbiAgICAgICAgcG9pbnRzID0gcG9pbnRzLnNsaWNlKCk7XG5cbiAgICAgICAgcG9pbnRzLnBvcCgpO1xuICAgICAgICBwb2ludHMucG9wKCk7XG5cbiAgICAgICAgbGFzdFBvaW50ID0gbmV3IG1hdGguUG9pbnQocG9pbnRzW3BvaW50cy5sZW5ndGggLSAyXSwgcG9pbnRzW3BvaW50cy5sZW5ndGggLSAxXSk7XG5cbiAgICAgICAgdmFyIG1pZFBvaW50WCA9IGxhc3RQb2ludC54ICsgKGZpcnN0UG9pbnQueCAtIGxhc3RQb2ludC54KSAqMC41O1xuICAgICAgICB2YXIgbWlkUG9pbnRZID0gbGFzdFBvaW50LnkgKyAoZmlyc3RQb2ludC55IC0gbGFzdFBvaW50LnkpICowLjU7XG5cbiAgICAgICAgcG9pbnRzLnVuc2hpZnQobWlkUG9pbnRYLCBtaWRQb2ludFkpO1xuICAgICAgICBwb2ludHMucHVzaChtaWRQb2ludFgsIG1pZFBvaW50WSk7XG4gICAgfVxuXG4gICAgdmFyIHZlcnRzID0gd2ViR0xEYXRhLnBvaW50cztcbiAgICB2YXIgaW5kaWNlcyA9IHdlYkdMRGF0YS5pbmRpY2VzO1xuICAgIHZhciBsZW5ndGggPSBwb2ludHMubGVuZ3RoIC8gMjtcbiAgICB2YXIgaW5kZXhDb3VudCA9IHBvaW50cy5sZW5ndGg7XG4gICAgdmFyIGluZGV4U3RhcnQgPSB2ZXJ0cy5sZW5ndGgvNjtcblxuICAgIC8vIERSQVcgdGhlIExpbmVcbiAgICB2YXIgd2lkdGggPSBncmFwaGljc0RhdGEubGluZVdpZHRoIC8gMjtcblxuICAgIC8vIHNvcnQgY29sb3JcbiAgICB2YXIgY29sb3IgPSB1dGlscy5oZXgycmdiKGdyYXBoaWNzRGF0YS5saW5lQ29sb3IpO1xuICAgIHZhciBhbHBoYSA9IGdyYXBoaWNzRGF0YS5saW5lQWxwaGE7XG4gICAgdmFyIHIgPSBjb2xvclswXSAqIGFscGhhO1xuICAgIHZhciBnID0gY29sb3JbMV0gKiBhbHBoYTtcbiAgICB2YXIgYiA9IGNvbG9yWzJdICogYWxwaGE7XG5cbiAgICB2YXIgcHgsIHB5LCBwMXgsIHAxeSwgcDJ4LCBwMnksIHAzeCwgcDN5O1xuICAgIHZhciBwZXJweCwgcGVycHksIHBlcnAyeCwgcGVycDJ5LCBwZXJwM3gsIHBlcnAzeTtcbiAgICB2YXIgYTEsIGIxLCBjMSwgYTIsIGIyLCBjMjtcbiAgICB2YXIgZGVub20sIHBkaXN0LCBkaXN0O1xuXG4gICAgcDF4ID0gcG9pbnRzWzBdO1xuICAgIHAxeSA9IHBvaW50c1sxXTtcblxuICAgIHAyeCA9IHBvaW50c1syXTtcbiAgICBwMnkgPSBwb2ludHNbM107XG5cbiAgICBwZXJweCA9IC0ocDF5IC0gcDJ5KTtcbiAgICBwZXJweSA9ICBwMXggLSBwMng7XG5cbiAgICBkaXN0ID0gTWF0aC5zcXJ0KHBlcnB4KnBlcnB4ICsgcGVycHkqcGVycHkpO1xuXG4gICAgcGVycHggLz0gZGlzdDtcbiAgICBwZXJweSAvPSBkaXN0O1xuICAgIHBlcnB4ICo9IHdpZHRoO1xuICAgIHBlcnB5ICo9IHdpZHRoO1xuXG4gICAgLy8gc3RhcnRcbiAgICB2ZXJ0cy5wdXNoKHAxeCAtIHBlcnB4ICwgcDF5IC0gcGVycHksXG4gICAgICAgICAgICAgICAgciwgZywgYiwgYWxwaGEpO1xuXG4gICAgdmVydHMucHVzaChwMXggKyBwZXJweCAsIHAxeSArIHBlcnB5LFxuICAgICAgICAgICAgICAgIHIsIGcsIGIsIGFscGhhKTtcblxuICAgIGZvciAoaSA9IDE7IGkgPCBsZW5ndGgtMTsgaSsrKVxuICAgIHtcbiAgICAgICAgcDF4ID0gcG9pbnRzWyhpLTEpKjJdO1xuICAgICAgICBwMXkgPSBwb2ludHNbKGktMSkqMiArIDFdO1xuXG4gICAgICAgIHAyeCA9IHBvaW50c1soaSkqMl07XG4gICAgICAgIHAyeSA9IHBvaW50c1soaSkqMiArIDFdO1xuXG4gICAgICAgIHAzeCA9IHBvaW50c1soaSsxKSoyXTtcbiAgICAgICAgcDN5ID0gcG9pbnRzWyhpKzEpKjIgKyAxXTtcblxuICAgICAgICBwZXJweCA9IC0ocDF5IC0gcDJ5KTtcbiAgICAgICAgcGVycHkgPSBwMXggLSBwMng7XG5cbiAgICAgICAgZGlzdCA9IE1hdGguc3FydChwZXJweCpwZXJweCArIHBlcnB5KnBlcnB5KTtcbiAgICAgICAgcGVycHggLz0gZGlzdDtcbiAgICAgICAgcGVycHkgLz0gZGlzdDtcbiAgICAgICAgcGVycHggKj0gd2lkdGg7XG4gICAgICAgIHBlcnB5ICo9IHdpZHRoO1xuXG4gICAgICAgIHBlcnAyeCA9IC0ocDJ5IC0gcDN5KTtcbiAgICAgICAgcGVycDJ5ID0gcDJ4IC0gcDN4O1xuXG4gICAgICAgIGRpc3QgPSBNYXRoLnNxcnQocGVycDJ4KnBlcnAyeCArIHBlcnAyeSpwZXJwMnkpO1xuICAgICAgICBwZXJwMnggLz0gZGlzdDtcbiAgICAgICAgcGVycDJ5IC89IGRpc3Q7XG4gICAgICAgIHBlcnAyeCAqPSB3aWR0aDtcbiAgICAgICAgcGVycDJ5ICo9IHdpZHRoO1xuXG4gICAgICAgIGExID0gKC1wZXJweSArIHAxeSkgLSAoLXBlcnB5ICsgcDJ5KTtcbiAgICAgICAgYjEgPSAoLXBlcnB4ICsgcDJ4KSAtICgtcGVycHggKyBwMXgpO1xuICAgICAgICBjMSA9ICgtcGVycHggKyBwMXgpICogKC1wZXJweSArIHAyeSkgLSAoLXBlcnB4ICsgcDJ4KSAqICgtcGVycHkgKyBwMXkpO1xuICAgICAgICBhMiA9ICgtcGVycDJ5ICsgcDN5KSAtICgtcGVycDJ5ICsgcDJ5KTtcbiAgICAgICAgYjIgPSAoLXBlcnAyeCArIHAyeCkgLSAoLXBlcnAyeCArIHAzeCk7XG4gICAgICAgIGMyID0gKC1wZXJwMnggKyBwM3gpICogKC1wZXJwMnkgKyBwMnkpIC0gKC1wZXJwMnggKyBwMngpICogKC1wZXJwMnkgKyBwM3kpO1xuXG4gICAgICAgIGRlbm9tID0gYTEqYjIgLSBhMipiMTtcblxuICAgICAgICBpZiAoTWF0aC5hYnMoZGVub20pIDwgMC4xIClcbiAgICAgICAge1xuXG4gICAgICAgICAgICBkZW5vbSs9MTAuMTtcbiAgICAgICAgICAgIHZlcnRzLnB1c2gocDJ4IC0gcGVycHggLCBwMnkgLSBwZXJweSxcbiAgICAgICAgICAgICAgICByLCBnLCBiLCBhbHBoYSk7XG5cbiAgICAgICAgICAgIHZlcnRzLnB1c2gocDJ4ICsgcGVycHggLCBwMnkgKyBwZXJweSxcbiAgICAgICAgICAgICAgICByLCBnLCBiLCBhbHBoYSk7XG5cbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgcHggPSAoYjEqYzIgLSBiMipjMSkvZGVub207XG4gICAgICAgIHB5ID0gKGEyKmMxIC0gYTEqYzIpL2Rlbm9tO1xuXG5cbiAgICAgICAgcGRpc3QgPSAocHggLXAyeCkgKiAocHggLXAyeCkgKyAocHkgLXAyeSkgKiAocHkgLXAyeSk7XG5cblxuICAgICAgICBpZiAocGRpc3QgPiAxNDAgKiAxNDApXG4gICAgICAgIHtcbiAgICAgICAgICAgIHBlcnAzeCA9IHBlcnB4IC0gcGVycDJ4O1xuICAgICAgICAgICAgcGVycDN5ID0gcGVycHkgLSBwZXJwMnk7XG5cbiAgICAgICAgICAgIGRpc3QgPSBNYXRoLnNxcnQocGVycDN4KnBlcnAzeCArIHBlcnAzeSpwZXJwM3kpO1xuICAgICAgICAgICAgcGVycDN4IC89IGRpc3Q7XG4gICAgICAgICAgICBwZXJwM3kgLz0gZGlzdDtcbiAgICAgICAgICAgIHBlcnAzeCAqPSB3aWR0aDtcbiAgICAgICAgICAgIHBlcnAzeSAqPSB3aWR0aDtcblxuICAgICAgICAgICAgdmVydHMucHVzaChwMnggLSBwZXJwM3gsIHAyeSAtcGVycDN5KTtcbiAgICAgICAgICAgIHZlcnRzLnB1c2gociwgZywgYiwgYWxwaGEpO1xuXG4gICAgICAgICAgICB2ZXJ0cy5wdXNoKHAyeCArIHBlcnAzeCwgcDJ5ICtwZXJwM3kpO1xuICAgICAgICAgICAgdmVydHMucHVzaChyLCBnLCBiLCBhbHBoYSk7XG5cbiAgICAgICAgICAgIHZlcnRzLnB1c2gocDJ4IC0gcGVycDN4LCBwMnkgLXBlcnAzeSk7XG4gICAgICAgICAgICB2ZXJ0cy5wdXNoKHIsIGcsIGIsIGFscGhhKTtcblxuICAgICAgICAgICAgaW5kZXhDb3VudCsrO1xuICAgICAgICB9XG4gICAgICAgIGVsc2VcbiAgICAgICAge1xuXG4gICAgICAgICAgICB2ZXJ0cy5wdXNoKHB4ICwgcHkpO1xuICAgICAgICAgICAgdmVydHMucHVzaChyLCBnLCBiLCBhbHBoYSk7XG5cbiAgICAgICAgICAgIHZlcnRzLnB1c2gocDJ4IC0gKHB4LXAyeCksIHAyeSAtIChweSAtIHAyeSkpO1xuICAgICAgICAgICAgdmVydHMucHVzaChyLCBnLCBiLCBhbHBoYSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwMXggPSBwb2ludHNbKGxlbmd0aC0yKSoyXTtcbiAgICBwMXkgPSBwb2ludHNbKGxlbmd0aC0yKSoyICsgMV07XG5cbiAgICBwMnggPSBwb2ludHNbKGxlbmd0aC0xKSoyXTtcbiAgICBwMnkgPSBwb2ludHNbKGxlbmd0aC0xKSoyICsgMV07XG5cbiAgICBwZXJweCA9IC0ocDF5IC0gcDJ5KTtcbiAgICBwZXJweSA9IHAxeCAtIHAyeDtcblxuICAgIGRpc3QgPSBNYXRoLnNxcnQocGVycHgqcGVycHggKyBwZXJweSpwZXJweSk7XG4gICAgcGVycHggLz0gZGlzdDtcbiAgICBwZXJweSAvPSBkaXN0O1xuICAgIHBlcnB4ICo9IHdpZHRoO1xuICAgIHBlcnB5ICo9IHdpZHRoO1xuXG4gICAgdmVydHMucHVzaChwMnggLSBwZXJweCAsIHAyeSAtIHBlcnB5KTtcbiAgICB2ZXJ0cy5wdXNoKHIsIGcsIGIsIGFscGhhKTtcblxuICAgIHZlcnRzLnB1c2gocDJ4ICsgcGVycHggLCBwMnkgKyBwZXJweSk7XG4gICAgdmVydHMucHVzaChyLCBnLCBiLCBhbHBoYSk7XG5cbiAgICBpbmRpY2VzLnB1c2goaW5kZXhTdGFydCk7XG5cbiAgICBmb3IgKGkgPSAwOyBpIDwgaW5kZXhDb3VudDsgaSsrKVxuICAgIHtcbiAgICAgICAgaW5kaWNlcy5wdXNoKGluZGV4U3RhcnQrKyk7XG4gICAgfVxuXG4gICAgaW5kaWNlcy5wdXNoKGluZGV4U3RhcnQtMSk7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGJ1aWxkTGluZTsiLCJ2YXIgdXRpbHMgPSByZXF1aXJlKCcuLi8uLi8uLi91dGlscycpO1xuXG4vKipcbiAqIEJ1aWxkcyBhIHBvbHlnb24gdG8gZHJhd1xuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0gZ3JhcGhpY3NEYXRhIHtQSVhJLldlYkdMR3JhcGhpY3NEYXRhfSBUaGUgZ3JhcGhpY3Mgb2JqZWN0IGNvbnRhaW5pbmcgYWxsIHRoZSBuZWNlc3NhcnkgcHJvcGVydGllc1xuICogQHBhcmFtIHdlYkdMRGF0YSB7b2JqZWN0fSBhbiBvYmplY3QgY29udGFpbmluZyBhbGwgdGhlIHdlYkdMLXNwZWNpZmljIGluZm9ybWF0aW9uIHRvIGNyZWF0ZSB0aGlzIHNoYXBlXG4gKi9cbnZhciBidWlsZFBvbHkgPSBmdW5jdGlvbiAoZ3JhcGhpY3NEYXRhLCB3ZWJHTERhdGEpXG57XG4gICAgdmFyIHBvaW50cyA9IGdyYXBoaWNzRGF0YS5wb2ludHM7XG5cbiAgICBpZiAocG9pbnRzLmxlbmd0aCA8IDYpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gZ2V0IGZpcnN0IGFuZCBsYXN0IHBvaW50Li4gZmlndXJlIG91dCB0aGUgbWlkZGxlIVxuICAgIHZhciB2ZXJ0cyA9IHdlYkdMRGF0YS5wb2ludHM7XG4gICAgdmFyIGluZGljZXMgPSB3ZWJHTERhdGEuaW5kaWNlcztcblxuICAgIHZhciBsZW5ndGggPSBwb2ludHMubGVuZ3RoIC8gMjtcblxuICAgIC8vIHNvcnQgY29sb3JcbiAgICB2YXIgY29sb3IgPSB1dGlscy5oZXgycmdiKGdyYXBoaWNzRGF0YS5maWxsQ29sb3IpO1xuICAgIHZhciBhbHBoYSA9IGdyYXBoaWNzRGF0YS5maWxsQWxwaGE7XG4gICAgdmFyIHIgPSBjb2xvclswXSAqIGFscGhhO1xuICAgIHZhciBnID0gY29sb3JbMV0gKiBhbHBoYTtcbiAgICB2YXIgYiA9IGNvbG9yWzJdICogYWxwaGE7XG5cbiAgICB2YXIgdHJpYW5nbGVzID0gZWFyY3V0KHBvaW50cywgbnVsbCwgMik7XG5cbiAgICBpZiAoIXRyaWFuZ2xlcykge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgdmFyIHZlcnRQb3MgPSB2ZXJ0cy5sZW5ndGggLyA2O1xuXG4gICAgdmFyIGkgPSAwO1xuXG4gICAgZm9yIChpID0gMDsgaSA8IHRyaWFuZ2xlcy5sZW5ndGg7IGkrPTMpXG4gICAge1xuICAgICAgICBpbmRpY2VzLnB1c2godHJpYW5nbGVzW2ldICsgdmVydFBvcyk7XG4gICAgICAgIGluZGljZXMucHVzaCh0cmlhbmdsZXNbaV0gKyB2ZXJ0UG9zKTtcbiAgICAgICAgaW5kaWNlcy5wdXNoKHRyaWFuZ2xlc1tpKzFdICsgdmVydFBvcyk7XG4gICAgICAgIGluZGljZXMucHVzaCh0cmlhbmdsZXNbaSsyXSArdmVydFBvcyk7XG4gICAgICAgIGluZGljZXMucHVzaCh0cmlhbmdsZXNbaSsyXSArIHZlcnRQb3MpO1xuICAgIH1cblxuICAgIGZvciAoaSA9IDA7IGkgPCBsZW5ndGg7IGkrKylcbiAgICB7XG4gICAgICAgIHZlcnRzLnB1c2gocG9pbnRzW2kgKiAyXSwgcG9pbnRzW2kgKiAyICsgMV0sXG4gICAgICAgICAgICAgICAgICAgciwgZywgYiwgYWxwaGEpO1xuICAgIH1cblxuICAgIHJldHVybiB0cnVlO1xufTtcblxuXG5tb2R1bGUuZXhwb3J0cyA9IGJ1aWxkUG9seTtcbiIsInZhciBidWlsZExpbmUgPSByZXF1aXJlKCcuL2J1aWxkTGluZScpLFxuICAgIHV0aWxzID0gcmVxdWlyZSgnLi4vLi4vLi4vdXRpbHMnKTtcblxuLyoqXG4gKiBCdWlsZHMgYSByZWN0YW5nbGUgdG8gZHJhd1xuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0gZ3JhcGhpY3NEYXRhIHtQSVhJLkdyYXBoaWNzfSBUaGUgZ3JhcGhpY3Mgb2JqZWN0IGNvbnRhaW5pbmcgYWxsIHRoZSBuZWNlc3NhcnkgcHJvcGVydGllc1xuICogQHBhcmFtIHdlYkdMRGF0YSB7b2JqZWN0fSBhbiBvYmplY3QgY29udGFpbmluZyBhbGwgdGhlIHdlYkdMLXNwZWNpZmljIGluZm9ybWF0aW9uIHRvIGNyZWF0ZSB0aGlzIHNoYXBlXG4gKi9cbnZhciBidWlsZFJlY3RhbmdsZSA9IGZ1bmN0aW9uIChncmFwaGljc0RhdGEsIHdlYkdMRGF0YSlcbntcbiAgICAvLyAtLS0gLy9cbiAgICAvLyBuZWVkIHRvIGNvbnZlcnQgcG9pbnRzIHRvIGEgbmljZSByZWd1bGFyIGRhdGFcbiAgICAvL1xuICAgIHZhciByZWN0RGF0YSA9IGdyYXBoaWNzRGF0YS5zaGFwZTtcbiAgICB2YXIgeCA9IHJlY3REYXRhLng7XG4gICAgdmFyIHkgPSByZWN0RGF0YS55O1xuICAgIHZhciB3aWR0aCA9IHJlY3REYXRhLndpZHRoO1xuICAgIHZhciBoZWlnaHQgPSByZWN0RGF0YS5oZWlnaHQ7XG5cbiAgICBpZiAoZ3JhcGhpY3NEYXRhLmZpbGwpXG4gICAge1xuICAgICAgICB2YXIgY29sb3IgPSB1dGlscy5oZXgycmdiKGdyYXBoaWNzRGF0YS5maWxsQ29sb3IpO1xuICAgICAgICB2YXIgYWxwaGEgPSBncmFwaGljc0RhdGEuZmlsbEFscGhhO1xuXG4gICAgICAgIHZhciByID0gY29sb3JbMF0gKiBhbHBoYTtcbiAgICAgICAgdmFyIGcgPSBjb2xvclsxXSAqIGFscGhhO1xuICAgICAgICB2YXIgYiA9IGNvbG9yWzJdICogYWxwaGE7XG5cbiAgICAgICAgdmFyIHZlcnRzID0gd2ViR0xEYXRhLnBvaW50cztcbiAgICAgICAgdmFyIGluZGljZXMgPSB3ZWJHTERhdGEuaW5kaWNlcztcblxuICAgICAgICB2YXIgdmVydFBvcyA9IHZlcnRzLmxlbmd0aC82O1xuXG4gICAgICAgIC8vIHN0YXJ0XG4gICAgICAgIHZlcnRzLnB1c2goeCwgeSk7XG4gICAgICAgIHZlcnRzLnB1c2gociwgZywgYiwgYWxwaGEpO1xuXG4gICAgICAgIHZlcnRzLnB1c2goeCArIHdpZHRoLCB5KTtcbiAgICAgICAgdmVydHMucHVzaChyLCBnLCBiLCBhbHBoYSk7XG5cbiAgICAgICAgdmVydHMucHVzaCh4ICwgeSArIGhlaWdodCk7XG4gICAgICAgIHZlcnRzLnB1c2gociwgZywgYiwgYWxwaGEpO1xuXG4gICAgICAgIHZlcnRzLnB1c2goeCArIHdpZHRoLCB5ICsgaGVpZ2h0KTtcbiAgICAgICAgdmVydHMucHVzaChyLCBnLCBiLCBhbHBoYSk7XG5cbiAgICAgICAgLy8gaW5zZXJ0IDIgZGVhZCB0cmlhbmdsZXMuLlxuICAgICAgICBpbmRpY2VzLnB1c2godmVydFBvcywgdmVydFBvcywgdmVydFBvcysxLCB2ZXJ0UG9zKzIsIHZlcnRQb3MrMywgdmVydFBvcyszKTtcbiAgICB9XG5cbiAgICBpZiAoZ3JhcGhpY3NEYXRhLmxpbmVXaWR0aClcbiAgICB7XG4gICAgICAgIHZhciB0ZW1wUG9pbnRzID0gZ3JhcGhpY3NEYXRhLnBvaW50cztcblxuICAgICAgICBncmFwaGljc0RhdGEucG9pbnRzID0gW3gsIHksXG4gICAgICAgICAgICAgICAgICB4ICsgd2lkdGgsIHksXG4gICAgICAgICAgICAgICAgICB4ICsgd2lkdGgsIHkgKyBoZWlnaHQsXG4gICAgICAgICAgICAgICAgICB4LCB5ICsgaGVpZ2h0LFxuICAgICAgICAgICAgICAgICAgeCwgeV07XG5cblxuICAgICAgICBidWlsZExpbmUoZ3JhcGhpY3NEYXRhLCB3ZWJHTERhdGEpO1xuXG4gICAgICAgIGdyYXBoaWNzRGF0YS5wb2ludHMgPSB0ZW1wUG9pbnRzO1xuICAgIH1cbn07XG5cbm1vZHVsZS5leHBvcnRzID0gYnVpbGRSZWN0YW5nbGU7IiwidmFyIGJ1aWxkTGluZSA9IHJlcXVpcmUoJy4vYnVpbGRMaW5lJyksXG4gICAgdXRpbHMgPSByZXF1aXJlKCcuLi8uLi8uLi91dGlscycpO1xuICAgIFxuLyoqXG4gKiBCdWlsZHMgYSByb3VuZGVkIHJlY3RhbmdsZSB0byBkcmF3XG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSBncmFwaGljc0RhdGEge1BJWEkuR3JhcGhpY3N9IFRoZSBncmFwaGljcyBvYmplY3QgY29udGFpbmluZyBhbGwgdGhlIG5lY2Vzc2FyeSBwcm9wZXJ0aWVzXG4gKiBAcGFyYW0gd2ViR0xEYXRhIHtvYmplY3R9IGFuIG9iamVjdCBjb250YWluaW5nIGFsbCB0aGUgd2ViR0wtc3BlY2lmaWMgaW5mb3JtYXRpb24gdG8gY3JlYXRlIHRoaXMgc2hhcGVcbiAqL1xuYnVpbGRSb3VuZGVkUmVjdGFuZ2xlID0gZnVuY3Rpb24gKGdyYXBoaWNzRGF0YSwgd2ViR0xEYXRhKVxue1xuICAgIHZhciBycmVjdERhdGEgPSBncmFwaGljc0RhdGEuc2hhcGU7XG4gICAgdmFyIHggPSBycmVjdERhdGEueDtcbiAgICB2YXIgeSA9IHJyZWN0RGF0YS55O1xuICAgIHZhciB3aWR0aCA9IHJyZWN0RGF0YS53aWR0aDtcbiAgICB2YXIgaGVpZ2h0ID0gcnJlY3REYXRhLmhlaWdodDtcblxuICAgIHZhciByYWRpdXMgPSBycmVjdERhdGEucmFkaXVzO1xuXG4gICAgdmFyIHJlY1BvaW50cyA9IFtdO1xuICAgIHJlY1BvaW50cy5wdXNoKHgsIHkgKyByYWRpdXMpO1xuICAgIHRoaXMucXVhZHJhdGljQmV6aWVyQ3VydmUoeCwgeSArIGhlaWdodCAtIHJhZGl1cywgeCwgeSArIGhlaWdodCwgeCArIHJhZGl1cywgeSArIGhlaWdodCwgcmVjUG9pbnRzKTtcbiAgICB0aGlzLnF1YWRyYXRpY0JlemllckN1cnZlKHggKyB3aWR0aCAtIHJhZGl1cywgeSArIGhlaWdodCwgeCArIHdpZHRoLCB5ICsgaGVpZ2h0LCB4ICsgd2lkdGgsIHkgKyBoZWlnaHQgLSByYWRpdXMsIHJlY1BvaW50cyk7XG4gICAgdGhpcy5xdWFkcmF0aWNCZXppZXJDdXJ2ZSh4ICsgd2lkdGgsIHkgKyByYWRpdXMsIHggKyB3aWR0aCwgeSwgeCArIHdpZHRoIC0gcmFkaXVzLCB5LCByZWNQb2ludHMpO1xuICAgIHRoaXMucXVhZHJhdGljQmV6aWVyQ3VydmUoeCArIHJhZGl1cywgeSwgeCwgeSwgeCwgeSArIHJhZGl1cyArIDAuMDAwMDAwMDAwMSwgcmVjUG9pbnRzKTtcblxuICAgIC8vIHRoaXMgdGlueSBudW1iZXIgZGVhbHMgd2l0aCB0aGUgaXNzdWUgdGhhdCBvY2N1cnMgd2hlbiBwb2ludHMgb3ZlcmxhcCBhbmQgZWFyY3V0IGZhaWxzIHRvIHRyaWFuZ3VsYXRlIHRoZSBpdGVtLlxuICAgIC8vIFRPRE8gLSBmaXggdGhpcyBwcm9wZXJseSwgdGhpcyBpcyBub3QgdmVyeSBlbGVnYW50Li4gYnV0IGl0IHdvcmtzIGZvciBub3cuXG5cbiAgICBpZiAoZ3JhcGhpY3NEYXRhLmZpbGwpXG4gICAge1xuICAgICAgICB2YXIgY29sb3IgPSB1dGlscy5oZXgycmdiKGdyYXBoaWNzRGF0YS5maWxsQ29sb3IpO1xuICAgICAgICB2YXIgYWxwaGEgPSBncmFwaGljc0RhdGEuZmlsbEFscGhhO1xuXG4gICAgICAgIHZhciByID0gY29sb3JbMF0gKiBhbHBoYTtcbiAgICAgICAgdmFyIGcgPSBjb2xvclsxXSAqIGFscGhhO1xuICAgICAgICB2YXIgYiA9IGNvbG9yWzJdICogYWxwaGE7XG5cbiAgICAgICAgdmFyIHZlcnRzID0gd2ViR0xEYXRhLnBvaW50cztcbiAgICAgICAgdmFyIGluZGljZXMgPSB3ZWJHTERhdGEuaW5kaWNlcztcblxuICAgICAgICB2YXIgdmVjUG9zID0gdmVydHMubGVuZ3RoLzY7XG5cbiAgICAgICAgdmFyIHRyaWFuZ2xlcyA9IGVhcmN1dChyZWNQb2ludHMsIG51bGwsIDIpO1xuXG4gICAgICAgIHZhciBpID0gMDtcbiAgICAgICAgZm9yIChpID0gMDsgaSA8IHRyaWFuZ2xlcy5sZW5ndGg7IGkrPTMpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGluZGljZXMucHVzaCh0cmlhbmdsZXNbaV0gKyB2ZWNQb3MpO1xuICAgICAgICAgICAgaW5kaWNlcy5wdXNoKHRyaWFuZ2xlc1tpXSArIHZlY1Bvcyk7XG4gICAgICAgICAgICBpbmRpY2VzLnB1c2godHJpYW5nbGVzW2krMV0gKyB2ZWNQb3MpO1xuICAgICAgICAgICAgaW5kaWNlcy5wdXNoKHRyaWFuZ2xlc1tpKzJdICsgdmVjUG9zKTtcbiAgICAgICAgICAgIGluZGljZXMucHVzaCh0cmlhbmdsZXNbaSsyXSArIHZlY1Bvcyk7XG4gICAgICAgIH1cblxuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgcmVjUG9pbnRzLmxlbmd0aDsgaSsrKVxuICAgICAgICB7XG4gICAgICAgICAgICB2ZXJ0cy5wdXNoKHJlY1BvaW50c1tpXSwgcmVjUG9pbnRzWysraV0sIHIsIGcsIGIsIGFscGhhKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGlmIChncmFwaGljc0RhdGEubGluZVdpZHRoKVxuICAgIHtcbiAgICAgICAgdmFyIHRlbXBQb2ludHMgPSBncmFwaGljc0RhdGEucG9pbnRzO1xuXG4gICAgICAgIGdyYXBoaWNzRGF0YS5wb2ludHMgPSByZWNQb2ludHM7XG5cbiAgICAgICAgdGhpcy5idWlsZExpbmUoZ3JhcGhpY3NEYXRhLCB3ZWJHTERhdGEpO1xuXG4gICAgICAgIGdyYXBoaWNzRGF0YS5wb2ludHMgPSB0ZW1wUG9pbnRzO1xuICAgIH1cbn07XG5cbi8qKlxuICogQ2FsY3VsYXRlIHRoZSBwb2ludHMgZm9yIGEgcXVhZHJhdGljIGJlemllciBjdXJ2ZS4gKGhlbHBlciBmdW5jdGlvbi4uKVxuICogQmFzZWQgb246IGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vcXVlc3Rpb25zLzc4NTA5Ny9ob3ctZG8taS1pbXBsZW1lbnQtYS1iZXppZXItY3VydmUtaW4tY1xuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0gZnJvbVgge251bWJlcn0gT3JpZ2luIHBvaW50IHhcbiAqIEBwYXJhbSBmcm9tWSB7bnVtYmVyfSBPcmlnaW4gcG9pbnQgeFxuICogQHBhcmFtIGNwWCB7bnVtYmVyfSBDb250cm9sIHBvaW50IHhcbiAqIEBwYXJhbSBjcFkge251bWJlcn0gQ29udHJvbCBwb2ludCB5XG4gKiBAcGFyYW0gdG9YIHtudW1iZXJ9IERlc3RpbmF0aW9uIHBvaW50IHhcbiAqIEBwYXJhbSB0b1kge251bWJlcn0gRGVzdGluYXRpb24gcG9pbnQgeVxuICogQHBhcmFtIFtvdXRdIHtudW1iZXJbXX0gVGhlIG91dHB1dCBhcnJheSB0byBhZGQgcG9pbnRzIGludG8uIElmIG5vdCBwYXNzZWQsIGEgbmV3IGFycmF5IGlzIGNyZWF0ZWQuXG4gKiBAcmV0dXJuIHtudW1iZXJbXX0gYW4gYXJyYXkgb2YgcG9pbnRzXG4gKi9cbnF1YWRyYXRpY0JlemllckN1cnZlID0gZnVuY3Rpb24gKGZyb21YLCBmcm9tWSwgY3BYLCBjcFksIHRvWCwgdG9ZLCBvdXQpXG57XG4gICAgdmFyIHhhLFxuICAgICAgICB5YSxcbiAgICAgICAgeGIsXG4gICAgICAgIHliLFxuICAgICAgICB4LFxuICAgICAgICB5LFxuICAgICAgICBuID0gMjAsXG4gICAgICAgIHBvaW50cyA9IG91dCB8fCBbXTtcblxuICAgIGZ1bmN0aW9uIGdldFB0KG4xICwgbjIsIHBlcmMpIHtcbiAgICAgICAgdmFyIGRpZmYgPSBuMiAtIG4xO1xuXG4gICAgICAgIHJldHVybiBuMSArICggZGlmZiAqIHBlcmMgKTtcbiAgICB9XG5cbiAgICB2YXIgaiA9IDA7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPD0gbjsgaSsrICkge1xuICAgICAgICBqID0gaSAvIG47XG5cbiAgICAgICAgLy8gVGhlIEdyZWVuIExpbmVcbiAgICAgICAgeGEgPSBnZXRQdCggZnJvbVggLCBjcFggLCBqICk7XG4gICAgICAgIHlhID0gZ2V0UHQoIGZyb21ZICwgY3BZICwgaiApO1xuICAgICAgICB4YiA9IGdldFB0KCBjcFggLCB0b1ggLCBqICk7XG4gICAgICAgIHliID0gZ2V0UHQoIGNwWSAsIHRvWSAsIGogKTtcblxuICAgICAgICAvLyBUaGUgQmxhY2sgRG90XG4gICAgICAgIHggPSBnZXRQdCggeGEgLCB4YiAsIGogKTtcbiAgICAgICAgeSA9IGdldFB0KCB5YSAsIHliICwgaiApO1xuXG4gICAgICAgIHBvaW50cy5wdXNoKHgsIHkpO1xuICAgIH1cblxuICAgIHJldHVybiBwb2ludHM7XG59O1xuXG5cbm1vZHVsZS5leHBvcnRzID0gYnVpbGRSb3VuZGVkUmVjdGFuZ2xlOyIsIi8qKlxuICogQGZpbGUgICAgICAgIE1haW4gZXhwb3J0IG9mIHRoZSBQSVhJIGNvcmUgbGlicmFyeVxuICogQGF1dGhvciAgICAgIE1hdCBHcm92ZXMgPG1hdEBnb29kYm95ZGlnaXRhbC5jb20+XG4gKiBAY29weXJpZ2h0ICAgMjAxMy0yMDE1IEdvb2RCb3lEaWdpdGFsXG4gKiBAbGljZW5zZSAgICAge0BsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9waXhpanMvcGl4aS5qcy9ibG9iL21hc3Rlci9MSUNFTlNFfE1JVCBMaWNlbnNlfVxuICovXG5cbi8qKlxuICogQG5hbWVzcGFjZSBQSVhJXG4gKi9cbi8vIGV4cG9ydCBjb3JlIGFuZCBjb25zdC4gV2UgYXNzaWduIGNvcmUgdG8gY29uc3Qgc28gdGhhdCB0aGUgbm9uLXJlZmVyZW5jZSB0eXBlcyBpbiBjb25zdCByZW1haW4gaW4tdGFjdFxudmFyIGNvcmUgPSBtb2R1bGUuZXhwb3J0cyA9IE9iamVjdC5hc3NpZ24ocmVxdWlyZSgnLi9jb25zdCcpLCByZXF1aXJlKCcuL21hdGgnKSwge1xuICAgIC8vIHV0aWxzXG4gICAgdXRpbHM6IHJlcXVpcmUoJy4vdXRpbHMnKSxcbiAgICB0aWNrZXI6IHJlcXVpcmUoJy4vdGlja2VyJyksXG5cbiAgICAvLyBkaXNwbGF5XG4gICAgRGlzcGxheU9iamVjdDogICAgICAgICAgcmVxdWlyZSgnLi9kaXNwbGF5L0Rpc3BsYXlPYmplY3QnKSxcbiAgICBDb250YWluZXI6ICAgICAgICAgICAgICByZXF1aXJlKCcuL2Rpc3BsYXkvQ29udGFpbmVyJyksXG5cbiAgICAvLyBzcHJpdGVzXG4gICAgU3ByaXRlOiAgICAgICAgICAgICAgICAgcmVxdWlyZSgnLi9zcHJpdGVzL1Nwcml0ZScpLFxuICAgIFBhcnRpY2xlQ29udGFpbmVyOiAgICAgIHJlcXVpcmUoJy4vcGFydGljbGVzL1BhcnRpY2xlQ29udGFpbmVyJyksXG4gICAgU3ByaXRlUmVuZGVyZXI6ICAgICAgICAgcmVxdWlyZSgnLi9zcHJpdGVzL3dlYmdsL1Nwcml0ZVJlbmRlcmVyJyksXG4gICAgUGFydGljbGVSZW5kZXJlcjogICAgICAgcmVxdWlyZSgnLi9wYXJ0aWNsZXMvd2ViZ2wvUGFydGljbGVSZW5kZXJlcicpLFxuXG4gICAgLy8gdGV4dFxuICAgIFRleHQ6ICAgICAgICAgICAgICAgICAgIHJlcXVpcmUoJy4vdGV4dC9UZXh0JyksXG5cbiAgICAvLyBwcmltaXRpdmVzXG4gICAgR3JhcGhpY3M6ICAgICAgICAgICAgICAgcmVxdWlyZSgnLi9ncmFwaGljcy9HcmFwaGljcycpLFxuICAgIEdyYXBoaWNzRGF0YTogICAgICAgICAgIHJlcXVpcmUoJy4vZ3JhcGhpY3MvR3JhcGhpY3NEYXRhJyksXG4gICAgR3JhcGhpY3NSZW5kZXJlcjogICAgICAgcmVxdWlyZSgnLi9ncmFwaGljcy93ZWJnbC9HcmFwaGljc1JlbmRlcmVyJyksXG5cbiAgICAvLyB0ZXh0dXJlc1xuICAgIFRleHR1cmU6ICAgICAgICAgICAgICAgIHJlcXVpcmUoJy4vdGV4dHVyZXMvVGV4dHVyZScpLFxuICAgIEJhc2VUZXh0dXJlOiAgICAgICAgICAgIHJlcXVpcmUoJy4vdGV4dHVyZXMvQmFzZVRleHR1cmUnKSxcbiAgICBSZW5kZXJUZXh0dXJlOiAgICAgICAgICByZXF1aXJlKCcuL3RleHR1cmVzL1JlbmRlclRleHR1cmUnKSxcbiAgICBWaWRlb0Jhc2VUZXh0dXJlOiAgICAgICByZXF1aXJlKCcuL3RleHR1cmVzL1ZpZGVvQmFzZVRleHR1cmUnKSxcbiAgICBUZXh0dXJlVXZzOiAgICAgICAgICAgICByZXF1aXJlKCcuL3RleHR1cmVzL1RleHR1cmVVdnMnKSxcblxuICAgIC8vIHJlbmRlcmVycyAtIGNhbnZhc1xuICAgIENhbnZhc1JlbmRlcmVyOiAgICAgICAgIHJlcXVpcmUoJy4vcmVuZGVyZXJzL2NhbnZhcy9DYW52YXNSZW5kZXJlcicpLFxuICAgIENhbnZhc0dyYXBoaWNzOiAgICAgICAgIHJlcXVpcmUoJy4vcmVuZGVyZXJzL2NhbnZhcy91dGlscy9DYW52YXNHcmFwaGljcycpLFxuICAgIENhbnZhc0J1ZmZlcjogICAgICAgICAgIHJlcXVpcmUoJy4vcmVuZGVyZXJzL2NhbnZhcy91dGlscy9DYW52YXNCdWZmZXInKSxcblxuICAgIC8vIHJlbmRlcmVycyAtIHdlYmdsXG4gICAgV2ViR0xSZW5kZXJlcjogICAgICAgICAgcmVxdWlyZSgnLi9yZW5kZXJlcnMvd2ViZ2wvV2ViR0xSZW5kZXJlcicpLFxuICAgIFdlYkdMTWFuYWdlcjogICAgICAgICAgcmVxdWlyZSgnLi9yZW5kZXJlcnMvd2ViZ2wvbWFuYWdlcnMvV2ViR0xNYW5hZ2VyJyksXG4gICAgU2hhZGVyTWFuYWdlcjogICAgICAgICAgcmVxdWlyZSgnLi9yZW5kZXJlcnMvd2ViZ2wvbWFuYWdlcnMvU2hhZGVyTWFuYWdlcicpLFxuICAgIFNoYWRlcjogICAgICAgICAgICAgICAgIHJlcXVpcmUoJy4vcmVuZGVyZXJzL3dlYmdsL3NoYWRlcnMvU2hhZGVyJyksXG4gICAgT2JqZWN0UmVuZGVyZXI6ICAgICAgICAgcmVxdWlyZSgnLi9yZW5kZXJlcnMvd2ViZ2wvdXRpbHMvT2JqZWN0UmVuZGVyZXInKSxcbiAgICBSZW5kZXJUYXJnZXQ6ICAgICAgICAgICByZXF1aXJlKCcuL3JlbmRlcmVycy93ZWJnbC91dGlscy9SZW5kZXJUYXJnZXQnKSxcblxuICAgIC8vIGZpbHRlcnMgLSB3ZWJnbFxuICAgIEFic3RyYWN0RmlsdGVyOiAgICAgICAgIHJlcXVpcmUoJy4vcmVuZGVyZXJzL3dlYmdsL2ZpbHRlcnMvQWJzdHJhY3RGaWx0ZXInKSxcbiAgICBGWEFBRmlsdGVyOiAgICAgICAgICAgICByZXF1aXJlKCcuL3JlbmRlcmVycy93ZWJnbC9maWx0ZXJzL0ZYQUFGaWx0ZXInKSxcbiAgICBTcHJpdGVNYXNrRmlsdGVyOiAgICAgICByZXF1aXJlKCcuL3JlbmRlcmVycy93ZWJnbC9maWx0ZXJzL1Nwcml0ZU1hc2tGaWx0ZXInKSxcblxuICAgIGdsQ29yZTogICAgICAgICAgICAgICAgICAgcmVxdWlyZSgncGl4aS1nbC1jb3JlJyksXG5cbiAgICAvKipcbiAgICAgKiBUaGlzIGhlbHBlciBmdW5jdGlvbiB3aWxsIGF1dG9tYXRpY2FsbHkgZGV0ZWN0IHdoaWNoIHJlbmRlcmVyIHlvdSBzaG91bGQgYmUgdXNpbmcuXG4gICAgICogV2ViR0wgaXMgdGhlIHByZWZlcnJlZCByZW5kZXJlciBhcyBpdCBpcyBhIGxvdCBmYXN0ZXIuIElmIHdlYkdMIGlzIG5vdCBzdXBwb3J0ZWQgYnlcbiAgICAgKiB0aGUgYnJvd3NlciB0aGVuIHRoaXMgZnVuY3Rpb24gd2lsbCByZXR1cm4gYSBjYW52YXMgcmVuZGVyZXJcbiAgICAgKlxuICAgICAqIEBtZW1iZXJvZiBQSVhJXG4gICAgICogQHBhcmFtIHdpZHRoPTgwMCB7bnVtYmVyfSB0aGUgd2lkdGggb2YgdGhlIHJlbmRlcmVycyB2aWV3XG4gICAgICogQHBhcmFtIGhlaWdodD02MDAge251bWJlcn0gdGhlIGhlaWdodCBvZiB0aGUgcmVuZGVyZXJzIHZpZXdcbiAgICAgKiBAcGFyYW0gW29wdGlvbnNdIHtvYmplY3R9IFRoZSBvcHRpb25hbCByZW5kZXJlciBwYXJhbWV0ZXJzXG4gICAgICogQHBhcmFtIFtvcHRpb25zLnZpZXddIHtIVE1MQ2FudmFzRWxlbWVudH0gdGhlIGNhbnZhcyB0byB1c2UgYXMgYSB2aWV3LCBvcHRpb25hbFxuICAgICAqIEBwYXJhbSBbb3B0aW9ucy50cmFuc3BhcmVudD1mYWxzZV0ge2Jvb2xlYW59IElmIHRoZSByZW5kZXIgdmlldyBpcyB0cmFuc3BhcmVudCwgZGVmYXVsdCBmYWxzZVxuICAgICAqIEBwYXJhbSBbb3B0aW9ucy5hbnRpYWxpYXM9ZmFsc2VdIHtib29sZWFufSBzZXRzIGFudGlhbGlhcyAob25seSBhcHBsaWNhYmxlIGluIGNocm9tZSBhdCB0aGUgbW9tZW50KVxuICAgICAqIEBwYXJhbSBbb3B0aW9ucy5wcmVzZXJ2ZURyYXdpbmdCdWZmZXI9ZmFsc2VdIHtib29sZWFufSBlbmFibGVzIGRyYXdpbmcgYnVmZmVyIHByZXNlcnZhdGlvbiwgZW5hYmxlIHRoaXMgaWYgeW91XG4gICAgICogICAgICBuZWVkIHRvIGNhbGwgdG9EYXRhVXJsIG9uIHRoZSB3ZWJnbCBjb250ZXh0XG4gICAgICogQHBhcmFtIFtvcHRpb25zLnJlc29sdXRpb249MV0ge251bWJlcn0gdGhlIHJlc29sdXRpb24gb2YgdGhlIHJlbmRlcmVyLCByZXRpbmEgd291bGQgYmUgMlxuICAgICAqIEBwYXJhbSBbbm9XZWJHTD1mYWxzZV0ge2Jvb2xlYW59IHByZXZlbnRzIHNlbGVjdGlvbiBvZiBXZWJHTCByZW5kZXJlciwgZXZlbiBpZiBzdWNoIGlzIHByZXNlbnRcbiAgICAgKlxuICAgICAqIEByZXR1cm4ge1dlYkdMUmVuZGVyZXJ8Q2FudmFzUmVuZGVyZXJ9IFJldHVybnMgV2ViR0wgcmVuZGVyZXIgaWYgYXZhaWxhYmxlLCBvdGhlcndpc2UgQ2FudmFzUmVuZGVyZXJcbiAgICAgKi9cbiAgICBhdXRvRGV0ZWN0UmVuZGVyZXI6IGZ1bmN0aW9uICh3aWR0aCwgaGVpZ2h0LCBvcHRpb25zLCBub1dlYkdMKVxuICAgIHtcbiAgICAgICAgd2lkdGggPSB3aWR0aCB8fCA4MDA7XG4gICAgICAgIGhlaWdodCA9IGhlaWdodCB8fCA2MDA7XG5cbiAgICAgICAgaWYgKCFub1dlYkdMICYmIGNvcmUudXRpbHMuaXNXZWJHTFN1cHBvcnRlZCgpKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IGNvcmUuV2ViR0xSZW5kZXJlcih3aWR0aCwgaGVpZ2h0LCBvcHRpb25zKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBuZXcgY29yZS5DYW52YXNSZW5kZXJlcih3aWR0aCwgaGVpZ2h0LCBvcHRpb25zKTtcbiAgICB9XG59KTtcbiIsIi8vIEB0b2RvIC0gaWdub3JlIHRoZSB0b28gbWFueSBwYXJhbWV0ZXJzIHdhcm5pbmcgZm9yIG5vd1xuLy8gc2hvdWxkIGVpdGhlciBmaXggaXQgb3IgY2hhbmdlIHRoZSBqc2hpbnQgY29uZmlnXG4vLyBqc2hpbnQgLVcwNzJcblxudmFyIFBvaW50ID0gcmVxdWlyZSgnLi9Qb2ludCcpO1xuXG4vKipcbiAqIFRoZSBwaXhpIE1hdHJpeCBjbGFzcyBhcyBhbiBvYmplY3QsIHdoaWNoIG1ha2VzIGl0IGEgbG90IGZhc3RlcixcbiAqIGhlcmUgaXMgYSByZXByZXNlbnRhdGlvbiBvZiBpdCA6XG4gKiB8IGEgfCBiIHwgdHh8XG4gKiB8IGMgfCBkIHwgdHl8XG4gKiB8IDAgfCAwIHwgMSB8XG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICovXG5mdW5jdGlvbiBNYXRyaXgoKVxue1xuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAxXG4gICAgICovXG4gICAgdGhpcy5hID0gMTtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAwXG4gICAgICovXG4gICAgdGhpcy5iID0gMDtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAwXG4gICAgICovXG4gICAgdGhpcy5jID0gMDtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAxXG4gICAgICovXG4gICAgdGhpcy5kID0gMTtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAwXG4gICAgICovXG4gICAgdGhpcy50eCA9IDA7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMFxuICAgICAqL1xuICAgIHRoaXMudHkgPSAwO1xufVxuXG5NYXRyaXgucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gTWF0cml4O1xubW9kdWxlLmV4cG9ydHMgPSBNYXRyaXg7XG5cbi8qKlxuICogQ3JlYXRlcyBhIE1hdHJpeCBvYmplY3QgYmFzZWQgb24gdGhlIGdpdmVuIGFycmF5LiBUaGUgRWxlbWVudCB0byBNYXRyaXggbWFwcGluZyBvcmRlciBpcyBhcyBmb2xsb3dzOlxuICpcbiAqIGEgPSBhcnJheVswXVxuICogYiA9IGFycmF5WzFdXG4gKiBjID0gYXJyYXlbM11cbiAqIGQgPSBhcnJheVs0XVxuICogdHggPSBhcnJheVsyXVxuICogdHkgPSBhcnJheVs1XVxuICpcbiAqIEBwYXJhbSBhcnJheSB7bnVtYmVyW119IFRoZSBhcnJheSB0aGF0IHRoZSBtYXRyaXggd2lsbCBiZSBwb3B1bGF0ZWQgZnJvbS5cbiAqL1xuTWF0cml4LnByb3RvdHlwZS5mcm9tQXJyYXkgPSBmdW5jdGlvbiAoYXJyYXkpXG57XG4gICAgdGhpcy5hID0gYXJyYXlbMF07XG4gICAgdGhpcy5iID0gYXJyYXlbMV07XG4gICAgdGhpcy5jID0gYXJyYXlbM107XG4gICAgdGhpcy5kID0gYXJyYXlbNF07XG4gICAgdGhpcy50eCA9IGFycmF5WzJdO1xuICAgIHRoaXMudHkgPSBhcnJheVs1XTtcbn07XG5cblxuLyoqXG4gKiBzZXRzIHRoZSBtYXRyaXggcHJvcGVydGllc1xuICpcbiAqIEBwYXJhbSB7bnVtYmVyfSBhXG4gKiBAcGFyYW0ge251bWJlcn0gYlxuICogQHBhcmFtIHtudW1iZXJ9IGNcbiAqIEBwYXJhbSB7bnVtYmVyfSBkXG4gKiBAcGFyYW0ge251bWJlcn0gdHhcbiAqIEBwYXJhbSB7bnVtYmVyfSB0eVxuICpcbiAqIEByZXR1cm4ge1BJWEkuTWF0cml4fSBUaGlzIG1hdHJpeC4gR29vZCBmb3IgY2hhaW5pbmcgbWV0aG9kIGNhbGxzLlxuICovXG5NYXRyaXgucHJvdG90eXBlLnNldCA9IGZ1bmN0aW9uIChhLCBiLCBjLCBkLCB0eCwgdHkpXG57XG4gICAgdGhpcy5hID0gYTtcbiAgICB0aGlzLmIgPSBiO1xuICAgIHRoaXMuYyA9IGM7XG4gICAgdGhpcy5kID0gZDtcbiAgICB0aGlzLnR4ID0gdHg7XG4gICAgdGhpcy50eSA9IHR5O1xuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG5cbi8qKlxuICogQ3JlYXRlcyBhbiBhcnJheSBmcm9tIHRoZSBjdXJyZW50IE1hdHJpeCBvYmplY3QuXG4gKlxuICogQHBhcmFtIHRyYW5zcG9zZSB7Ym9vbGVhbn0gV2hldGhlciB3ZSBuZWVkIHRvIHRyYW5zcG9zZSB0aGUgbWF0cml4IG9yIG5vdFxuICogQHBhcmFtIFtvdXRdIHtBcnJheX0gSWYgcHJvdmlkZWQgdGhlIGFycmF5IHdpbGwgYmUgYXNzaWduZWQgdG8gb3V0XG4gKiBAcmV0dXJuIHtudW1iZXJbXX0gdGhlIG5ld2x5IGNyZWF0ZWQgYXJyYXkgd2hpY2ggY29udGFpbnMgdGhlIG1hdHJpeFxuICovXG5NYXRyaXgucHJvdG90eXBlLnRvQXJyYXkgPSBmdW5jdGlvbiAodHJhbnNwb3NlLCBvdXQpXG57XG4gICAgaWYgKCF0aGlzLmFycmF5KVxuICAgIHtcbiAgICAgICAgdGhpcy5hcnJheSA9IG5ldyBGbG9hdDMyQXJyYXkoOSk7XG4gICAgfVxuXG4gICAgdmFyIGFycmF5ID0gb3V0IHx8IHRoaXMuYXJyYXk7XG5cbiAgICBpZiAodHJhbnNwb3NlKVxuICAgIHtcbiAgICAgICAgYXJyYXlbMF0gPSB0aGlzLmE7XG4gICAgICAgIGFycmF5WzFdID0gdGhpcy5iO1xuICAgICAgICBhcnJheVsyXSA9IDA7XG4gICAgICAgIGFycmF5WzNdID0gdGhpcy5jO1xuICAgICAgICBhcnJheVs0XSA9IHRoaXMuZDtcbiAgICAgICAgYXJyYXlbNV0gPSAwO1xuICAgICAgICBhcnJheVs2XSA9IHRoaXMudHg7XG4gICAgICAgIGFycmF5WzddID0gdGhpcy50eTtcbiAgICAgICAgYXJyYXlbOF0gPSAxO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICBhcnJheVswXSA9IHRoaXMuYTtcbiAgICAgICAgYXJyYXlbMV0gPSB0aGlzLmM7XG4gICAgICAgIGFycmF5WzJdID0gdGhpcy50eDtcbiAgICAgICAgYXJyYXlbM10gPSB0aGlzLmI7XG4gICAgICAgIGFycmF5WzRdID0gdGhpcy5kO1xuICAgICAgICBhcnJheVs1XSA9IHRoaXMudHk7XG4gICAgICAgIGFycmF5WzZdID0gMDtcbiAgICAgICAgYXJyYXlbN10gPSAwO1xuICAgICAgICBhcnJheVs4XSA9IDE7XG4gICAgfVxuXG4gICAgcmV0dXJuIGFycmF5O1xufTtcblxuLyoqXG4gKiBHZXQgYSBuZXcgcG9zaXRpb24gd2l0aCB0aGUgY3VycmVudCB0cmFuc2Zvcm1hdGlvbiBhcHBsaWVkLlxuICogQ2FuIGJlIHVzZWQgdG8gZ28gZnJvbSBhIGNoaWxkJ3MgY29vcmRpbmF0ZSBzcGFjZSB0byB0aGUgd29ybGQgY29vcmRpbmF0ZSBzcGFjZS4gKGUuZy4gcmVuZGVyaW5nKVxuICpcbiAqIEBwYXJhbSBwb3Mge1BJWEkuUG9pbnR9IFRoZSBvcmlnaW5cbiAqIEBwYXJhbSBbbmV3UG9zXSB7UElYSS5Qb2ludH0gVGhlIHBvaW50IHRoYXQgdGhlIG5ldyBwb3NpdGlvbiBpcyBhc3NpZ25lZCB0byAoYWxsb3dlZCB0byBiZSBzYW1lIGFzIGlucHV0KVxuICogQHJldHVybiB7UElYSS5Qb2ludH0gVGhlIG5ldyBwb2ludCwgdHJhbnNmb3JtZWQgdGhyb3VnaCB0aGlzIG1hdHJpeFxuICovXG5NYXRyaXgucHJvdG90eXBlLmFwcGx5ID0gZnVuY3Rpb24gKHBvcywgbmV3UG9zKVxue1xuICAgIG5ld1BvcyA9IG5ld1BvcyB8fCBuZXcgUG9pbnQoKTtcblxuICAgIHZhciB4ID0gcG9zLng7XG4gICAgdmFyIHkgPSBwb3MueTtcblxuICAgIG5ld1Bvcy54ID0gdGhpcy5hICogeCArIHRoaXMuYyAqIHkgKyB0aGlzLnR4O1xuICAgIG5ld1Bvcy55ID0gdGhpcy5iICogeCArIHRoaXMuZCAqIHkgKyB0aGlzLnR5O1xuXG4gICAgcmV0dXJuIG5ld1Bvcztcbn07XG5cbi8qKlxuICogR2V0IGEgbmV3IHBvc2l0aW9uIHdpdGggdGhlIGludmVyc2Ugb2YgdGhlIGN1cnJlbnQgdHJhbnNmb3JtYXRpb24gYXBwbGllZC5cbiAqIENhbiBiZSB1c2VkIHRvIGdvIGZyb20gdGhlIHdvcmxkIGNvb3JkaW5hdGUgc3BhY2UgdG8gYSBjaGlsZCdzIGNvb3JkaW5hdGUgc3BhY2UuIChlLmcuIGlucHV0KVxuICpcbiAqIEBwYXJhbSBwb3Mge1BJWEkuUG9pbnR9IFRoZSBvcmlnaW5cbiAqIEBwYXJhbSBbbmV3UG9zXSB7UElYSS5Qb2ludH0gVGhlIHBvaW50IHRoYXQgdGhlIG5ldyBwb3NpdGlvbiBpcyBhc3NpZ25lZCB0byAoYWxsb3dlZCB0byBiZSBzYW1lIGFzIGlucHV0KVxuICogQHJldHVybiB7UElYSS5Qb2ludH0gVGhlIG5ldyBwb2ludCwgaW52ZXJzZS10cmFuc2Zvcm1lZCB0aHJvdWdoIHRoaXMgbWF0cml4XG4gKi9cbk1hdHJpeC5wcm90b3R5cGUuYXBwbHlJbnZlcnNlID0gZnVuY3Rpb24gKHBvcywgbmV3UG9zKVxue1xuICAgIG5ld1BvcyA9IG5ld1BvcyB8fCBuZXcgUG9pbnQoKTtcblxuICAgIHZhciBpZCA9IDEgLyAodGhpcy5hICogdGhpcy5kICsgdGhpcy5jICogLXRoaXMuYik7XG5cbiAgICB2YXIgeCA9IHBvcy54O1xuICAgIHZhciB5ID0gcG9zLnk7XG5cbiAgICBuZXdQb3MueCA9IHRoaXMuZCAqIGlkICogeCArIC10aGlzLmMgKiBpZCAqIHkgKyAodGhpcy50eSAqIHRoaXMuYyAtIHRoaXMudHggKiB0aGlzLmQpICogaWQ7XG4gICAgbmV3UG9zLnkgPSB0aGlzLmEgKiBpZCAqIHkgKyAtdGhpcy5iICogaWQgKiB4ICsgKC10aGlzLnR5ICogdGhpcy5hICsgdGhpcy50eCAqIHRoaXMuYikgKiBpZDtcblxuICAgIHJldHVybiBuZXdQb3M7XG59O1xuXG4vKipcbiAqIFRyYW5zbGF0ZXMgdGhlIG1hdHJpeCBvbiB0aGUgeCBhbmQgeS5cbiAqXG4gKiBAcGFyYW0ge251bWJlcn0geFxuICogQHBhcmFtIHtudW1iZXJ9IHlcbiAqIEByZXR1cm4ge1BJWEkuTWF0cml4fSBUaGlzIG1hdHJpeC4gR29vZCBmb3IgY2hhaW5pbmcgbWV0aG9kIGNhbGxzLlxuICovXG5NYXRyaXgucHJvdG90eXBlLnRyYW5zbGF0ZSA9IGZ1bmN0aW9uICh4LCB5KVxue1xuICAgIHRoaXMudHggKz0geDtcbiAgICB0aGlzLnR5ICs9IHk7XG5cbiAgICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogQXBwbGllcyBhIHNjYWxlIHRyYW5zZm9ybWF0aW9uIHRvIHRoZSBtYXRyaXguXG4gKlxuICogQHBhcmFtIHtudW1iZXJ9IHggVGhlIGFtb3VudCB0byBzY2FsZSBob3Jpem9udGFsbHlcbiAqIEBwYXJhbSB7bnVtYmVyfSB5IFRoZSBhbW91bnQgdG8gc2NhbGUgdmVydGljYWxseVxuICogQHJldHVybiB7UElYSS5NYXRyaXh9IFRoaXMgbWF0cml4LiBHb29kIGZvciBjaGFpbmluZyBtZXRob2QgY2FsbHMuXG4gKi9cbk1hdHJpeC5wcm90b3R5cGUuc2NhbGUgPSBmdW5jdGlvbiAoeCwgeSlcbntcbiAgICB0aGlzLmEgKj0geDtcbiAgICB0aGlzLmQgKj0geTtcbiAgICB0aGlzLmMgKj0geDtcbiAgICB0aGlzLmIgKj0geTtcbiAgICB0aGlzLnR4ICo9IHg7XG4gICAgdGhpcy50eSAqPSB5O1xuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG5cbi8qKlxuICogQXBwbGllcyBhIHJvdGF0aW9uIHRyYW5zZm9ybWF0aW9uIHRvIHRoZSBtYXRyaXguXG4gKlxuICogQHBhcmFtIHtudW1iZXJ9IGFuZ2xlIC0gVGhlIGFuZ2xlIGluIHJhZGlhbnMuXG4gKiBAcmV0dXJuIHtQSVhJLk1hdHJpeH0gVGhpcyBtYXRyaXguIEdvb2QgZm9yIGNoYWluaW5nIG1ldGhvZCBjYWxscy5cbiAqL1xuTWF0cml4LnByb3RvdHlwZS5yb3RhdGUgPSBmdW5jdGlvbiAoYW5nbGUpXG57XG4gICAgdmFyIGNvcyA9IE1hdGguY29zKCBhbmdsZSApO1xuICAgIHZhciBzaW4gPSBNYXRoLnNpbiggYW5nbGUgKTtcblxuICAgIHZhciBhMSA9IHRoaXMuYTtcbiAgICB2YXIgYzEgPSB0aGlzLmM7XG4gICAgdmFyIHR4MSA9IHRoaXMudHg7XG5cbiAgICB0aGlzLmEgPSBhMSAqIGNvcy10aGlzLmIgKiBzaW47XG4gICAgdGhpcy5iID0gYTEgKiBzaW4rdGhpcy5iICogY29zO1xuICAgIHRoaXMuYyA9IGMxICogY29zLXRoaXMuZCAqIHNpbjtcbiAgICB0aGlzLmQgPSBjMSAqIHNpbit0aGlzLmQgKiBjb3M7XG4gICAgdGhpcy50eCA9IHR4MSAqIGNvcyAtIHRoaXMudHkgKiBzaW47XG4gICAgdGhpcy50eSA9IHR4MSAqIHNpbiArIHRoaXMudHkgKiBjb3M7XG5cbiAgICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogQXBwZW5kcyB0aGUgZ2l2ZW4gTWF0cml4IHRvIHRoaXMgTWF0cml4LlxuICpcbiAqIEBwYXJhbSB7UElYSS5NYXRyaXh9IG1hdHJpeFxuICogQHJldHVybiB7UElYSS5NYXRyaXh9IFRoaXMgbWF0cml4LiBHb29kIGZvciBjaGFpbmluZyBtZXRob2QgY2FsbHMuXG4gKi9cbk1hdHJpeC5wcm90b3R5cGUuYXBwZW5kID0gZnVuY3Rpb24gKG1hdHJpeClcbntcbiAgICB2YXIgYTEgPSB0aGlzLmE7XG4gICAgdmFyIGIxID0gdGhpcy5iO1xuICAgIHZhciBjMSA9IHRoaXMuYztcbiAgICB2YXIgZDEgPSB0aGlzLmQ7XG5cbiAgICB0aGlzLmEgID0gbWF0cml4LmEgKiBhMSArIG1hdHJpeC5iICogYzE7XG4gICAgdGhpcy5iICA9IG1hdHJpeC5hICogYjEgKyBtYXRyaXguYiAqIGQxO1xuICAgIHRoaXMuYyAgPSBtYXRyaXguYyAqIGExICsgbWF0cml4LmQgKiBjMTtcbiAgICB0aGlzLmQgID0gbWF0cml4LmMgKiBiMSArIG1hdHJpeC5kICogZDE7XG5cbiAgICB0aGlzLnR4ID0gbWF0cml4LnR4ICogYTEgKyBtYXRyaXgudHkgKiBjMSArIHRoaXMudHg7XG4gICAgdGhpcy50eSA9IG1hdHJpeC50eCAqIGIxICsgbWF0cml4LnR5ICogZDEgKyB0aGlzLnR5O1xuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIFNldHMgdGhlIG1hdHJpeCBiYXNlZCBvbiBhbGwgdGhlIGF2YWlsYWJsZSBwcm9wZXJ0aWVzXG4gKlxuICogQHBhcmFtIHtudW1iZXJ9IHhcbiAqIEBwYXJhbSB7bnVtYmVyfSB5XG4gKiBAcGFyYW0ge251bWJlcn0gcGl2b3RYXG4gKiBAcGFyYW0ge251bWJlcn0gcGl2b3RZXG4gKiBAcGFyYW0ge251bWJlcn0gc2NhbGVYXG4gKiBAcGFyYW0ge251bWJlcn0gc2NhbGVZXG4gKiBAcGFyYW0ge251bWJlcn0gcm90YXRpb25cbiAqIEBwYXJhbSB7bnVtYmVyfSBza2V3WFxuICogQHBhcmFtIHtudW1iZXJ9IHNrZXdZXG4gKlxuICogQHJldHVybiB7UElYSS5NYXRyaXh9IFRoaXMgbWF0cml4LiBHb29kIGZvciBjaGFpbmluZyBtZXRob2QgY2FsbHMuXG4gKi9cbk1hdHJpeC5wcm90b3R5cGUuc2V0VHJhbnNmb3JtID0gZnVuY3Rpb24gKHgsIHksIHBpdm90WCwgcGl2b3RZLCBzY2FsZVgsIHNjYWxlWSwgcm90YXRpb24sIHNrZXdYLCBza2V3WSlcbntcbiAgICB2YXIgYSwgYiwgYywgZCwgc3IsIGNyLCBjeSwgc3ksIG5zeCwgY3g7XG5cbiAgICBzciAgPSBNYXRoLnNpbihyb3RhdGlvbik7XG4gICAgY3IgID0gTWF0aC5jb3Mocm90YXRpb24pO1xuICAgIGN5ICA9IE1hdGguY29zKHNrZXdZKTtcbiAgICBzeSAgPSBNYXRoLnNpbihza2V3WSk7XG4gICAgbnN4ID0gLU1hdGguc2luKHNrZXdYKTtcbiAgICBjeCAgPSAgTWF0aC5jb3Moc2tld1gpO1xuXG4gICAgYSAgPSAgY3IgKiBzY2FsZVg7XG4gICAgYiAgPSAgc3IgKiBzY2FsZVg7XG4gICAgYyAgPSAtc3IgKiBzY2FsZVk7XG4gICAgZCAgPSAgY3IgKiBzY2FsZVk7XG5cbiAgICB0aGlzLmEgID0gY3kgKiBhICsgc3kgKiBjO1xuICAgIHRoaXMuYiAgPSBjeSAqIGIgKyBzeSAqIGQ7XG4gICAgdGhpcy5jICA9IG5zeCAqIGEgKyBjeCAqIGM7XG4gICAgdGhpcy5kICA9IG5zeCAqIGIgKyBjeCAqIGQ7XG5cbiAgICB0aGlzLnR4ID0geCArICggcGl2b3RYICogYSArIHBpdm90WSAqIGMgKTtcbiAgICB0aGlzLnR5ID0geSArICggcGl2b3RYICogYiArIHBpdm90WSAqIGQgKTtcblxuICAgIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBQcmVwZW5kcyB0aGUgZ2l2ZW4gTWF0cml4IHRvIHRoaXMgTWF0cml4LlxuICpcbiAqIEBwYXJhbSB7UElYSS5NYXRyaXh9IG1hdHJpeFxuICogQHJldHVybiB7UElYSS5NYXRyaXh9IFRoaXMgbWF0cml4LiBHb29kIGZvciBjaGFpbmluZyBtZXRob2QgY2FsbHMuXG4gKi9cbk1hdHJpeC5wcm90b3R5cGUucHJlcGVuZCA9IGZ1bmN0aW9uKG1hdHJpeClcbntcbiAgICB2YXIgdHgxID0gdGhpcy50eDtcblxuICAgIGlmIChtYXRyaXguYSAhPT0gMSB8fCBtYXRyaXguYiAhPT0gMCB8fCBtYXRyaXguYyAhPT0gMCB8fCBtYXRyaXguZCAhPT0gMSlcbiAgICB7XG4gICAgICAgIHZhciBhMSA9IHRoaXMuYTtcbiAgICAgICAgdmFyIGMxID0gdGhpcy5jO1xuICAgICAgICB0aGlzLmEgID0gYTEqbWF0cml4LmErdGhpcy5iKm1hdHJpeC5jO1xuICAgICAgICB0aGlzLmIgID0gYTEqbWF0cml4LmIrdGhpcy5iKm1hdHJpeC5kO1xuICAgICAgICB0aGlzLmMgID0gYzEqbWF0cml4LmErdGhpcy5kKm1hdHJpeC5jO1xuICAgICAgICB0aGlzLmQgID0gYzEqbWF0cml4LmIrdGhpcy5kKm1hdHJpeC5kO1xuICAgIH1cblxuICAgIHRoaXMudHggPSB0eDEqbWF0cml4LmErdGhpcy50eSptYXRyaXguYyttYXRyaXgudHg7XG4gICAgdGhpcy50eSA9IHR4MSptYXRyaXguYit0aGlzLnR5Km1hdHJpeC5kK21hdHJpeC50eTtcblxuICAgIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBJbnZlcnRzIHRoaXMgbWF0cml4XG4gKlxuICogQHJldHVybiB7UElYSS5NYXRyaXh9IFRoaXMgbWF0cml4LiBHb29kIGZvciBjaGFpbmluZyBtZXRob2QgY2FsbHMuXG4gKi9cbk1hdHJpeC5wcm90b3R5cGUuaW52ZXJ0ID0gZnVuY3Rpb24oKVxue1xuICAgIHZhciBhMSA9IHRoaXMuYTtcbiAgICB2YXIgYjEgPSB0aGlzLmI7XG4gICAgdmFyIGMxID0gdGhpcy5jO1xuICAgIHZhciBkMSA9IHRoaXMuZDtcbiAgICB2YXIgdHgxID0gdGhpcy50eDtcbiAgICB2YXIgbiA9IGExKmQxLWIxKmMxO1xuXG4gICAgdGhpcy5hID0gZDEvbjtcbiAgICB0aGlzLmIgPSAtYjEvbjtcbiAgICB0aGlzLmMgPSAtYzEvbjtcbiAgICB0aGlzLmQgPSBhMS9uO1xuICAgIHRoaXMudHggPSAoYzEqdGhpcy50eS1kMSp0eDEpL247XG4gICAgdGhpcy50eSA9IC0oYTEqdGhpcy50eS1iMSp0eDEpL247XG5cbiAgICByZXR1cm4gdGhpcztcbn07XG5cblxuLyoqXG4gKiBSZXNldHMgdGhpcyBNYXRpeCB0byBhbiBpZGVudGl0eSAoZGVmYXVsdCkgbWF0cml4LlxuICpcbiAqIEByZXR1cm4ge1BJWEkuTWF0cml4fSBUaGlzIG1hdHJpeC4gR29vZCBmb3IgY2hhaW5pbmcgbWV0aG9kIGNhbGxzLlxuICovXG5NYXRyaXgucHJvdG90eXBlLmlkZW50aXR5ID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLmEgPSAxO1xuICAgIHRoaXMuYiA9IDA7XG4gICAgdGhpcy5jID0gMDtcbiAgICB0aGlzLmQgPSAxO1xuICAgIHRoaXMudHggPSAwO1xuICAgIHRoaXMudHkgPSAwO1xuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIENyZWF0ZXMgYSBuZXcgTWF0cml4IG9iamVjdCB3aXRoIHRoZSBzYW1lIHZhbHVlcyBhcyB0aGlzIG9uZS5cbiAqXG4gKiBAcmV0dXJuIHtQSVhJLk1hdHJpeH0gQSBjb3B5IG9mIHRoaXMgbWF0cml4LiBHb29kIGZvciBjaGFpbmluZyBtZXRob2QgY2FsbHMuXG4gKi9cbk1hdHJpeC5wcm90b3R5cGUuY2xvbmUgPSBmdW5jdGlvbiAoKVxue1xuICAgIHZhciBtYXRyaXggPSBuZXcgTWF0cml4KCk7XG4gICAgbWF0cml4LmEgPSB0aGlzLmE7XG4gICAgbWF0cml4LmIgPSB0aGlzLmI7XG4gICAgbWF0cml4LmMgPSB0aGlzLmM7XG4gICAgbWF0cml4LmQgPSB0aGlzLmQ7XG4gICAgbWF0cml4LnR4ID0gdGhpcy50eDtcbiAgICBtYXRyaXgudHkgPSB0aGlzLnR5O1xuXG4gICAgcmV0dXJuIG1hdHJpeDtcbn07XG5cbi8qKlxuICogQ2hhbmdlcyB0aGUgdmFsdWVzIG9mIHRoZSBnaXZlbiBtYXRyaXggdG8gYmUgdGhlIHNhbWUgYXMgdGhlIG9uZXMgaW4gdGhpcyBtYXRyaXhcbiAqXG4gKiBAcmV0dXJuIHtQSVhJLk1hdHJpeH0gVGhlIG1hdHJpeCBnaXZlbiBpbiBwYXJhbWV0ZXIgd2l0aCBpdHMgdmFsdWVzIHVwZGF0ZWQuXG4gKi9cbk1hdHJpeC5wcm90b3R5cGUuY29weSA9IGZ1bmN0aW9uIChtYXRyaXgpXG57XG4gICAgbWF0cml4LmEgPSB0aGlzLmE7XG4gICAgbWF0cml4LmIgPSB0aGlzLmI7XG4gICAgbWF0cml4LmMgPSB0aGlzLmM7XG4gICAgbWF0cml4LmQgPSB0aGlzLmQ7XG4gICAgbWF0cml4LnR4ID0gdGhpcy50eDtcbiAgICBtYXRyaXgudHkgPSB0aGlzLnR5O1xuXG4gICAgcmV0dXJuIG1hdHJpeDtcbn07XG5cbi8qKlxuICogQSBkZWZhdWx0IChpZGVudGl0eSkgbWF0cml4XG4gKlxuICogQHN0YXRpY1xuICogQGNvbnN0XG4gKi9cbk1hdHJpeC5JREVOVElUWSA9IG5ldyBNYXRyaXgoKTtcblxuLyoqXG4gKiBBIHRlbXAgbWF0cml4XG4gKlxuICogQHN0YXRpY1xuICogQGNvbnN0XG4gKi9cbk1hdHJpeC5URU1QX01BVFJJWCA9IG5ldyBNYXRyaXgoKTtcbiIsIi8qKlxuICogVGhlIFBvaW50IG9iamVjdCByZXByZXNlbnRzIGEgbG9jYXRpb24gaW4gYSB0d28tZGltZW5zaW9uYWwgY29vcmRpbmF0ZSBzeXN0ZW0sIHdoZXJlIHggcmVwcmVzZW50c1xuICogdGhlIGhvcml6b250YWwgYXhpcyBhbmQgeSByZXByZXNlbnRzIHRoZSB2ZXJ0aWNhbCBheGlzLlxuICpcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqIEBwYXJhbSBbeD0wXSB7bnVtYmVyfSBwb3NpdGlvbiBvZiB0aGUgcG9pbnQgb24gdGhlIHggYXhpc1xuICogQHBhcmFtIFt5PTBdIHtudW1iZXJ9IHBvc2l0aW9uIG9mIHRoZSBwb2ludCBvbiB0aGUgeSBheGlzXG4gKi9cbmZ1bmN0aW9uIFBvaW50KHgsIHkpXG57XG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDBcbiAgICAgKi9cbiAgICB0aGlzLnggPSB4IHx8IDA7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMFxuICAgICAqL1xuICAgIHRoaXMueSA9IHkgfHwgMDtcbn1cblxuUG9pbnQucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gUG9pbnQ7XG5tb2R1bGUuZXhwb3J0cyA9IFBvaW50O1xuXG4vKipcbiAqIENyZWF0ZXMgYSBjbG9uZSBvZiB0aGlzIHBvaW50XG4gKlxuICogQHJldHVybiB7UElYSS5Qb2ludH0gYSBjb3B5IG9mIHRoZSBwb2ludFxuICovXG5Qb2ludC5wcm90b3R5cGUuY2xvbmUgPSBmdW5jdGlvbiAoKVxue1xuICAgIHJldHVybiBuZXcgUG9pbnQodGhpcy54LCB0aGlzLnkpO1xufTtcblxuLyoqXG4gKiBDb3BpZXMgeCBhbmQgeSBmcm9tIHRoZSBnaXZlbiBwb2ludFxuICpcbiAqIEBwYXJhbSBwIHtQSVhJLlBvaW50fVxuICovXG5Qb2ludC5wcm90b3R5cGUuY29weSA9IGZ1bmN0aW9uIChwKSB7XG4gICAgdGhpcy5zZXQocC54LCBwLnkpO1xufTtcblxuLyoqXG4gKiBSZXR1cm5zIHRydWUgaWYgdGhlIGdpdmVuIHBvaW50IGlzIGVxdWFsIHRvIHRoaXMgcG9pbnRcbiAqXG4gKiBAcGFyYW0gcCB7UElYSS5Qb2ludH1cbiAqIEByZXR1cm5zIHtib29sZWFufVxuICovXG5Qb2ludC5wcm90b3R5cGUuZXF1YWxzID0gZnVuY3Rpb24gKHApIHtcbiAgICByZXR1cm4gKHAueCA9PT0gdGhpcy54KSAmJiAocC55ID09PSB0aGlzLnkpO1xufTtcblxuLyoqXG4gKiBTZXRzIHRoZSBwb2ludCB0byBhIG5ldyB4IGFuZCB5IHBvc2l0aW9uLlxuICogSWYgeSBpcyBvbWl0dGVkLCBib3RoIHggYW5kIHkgd2lsbCBiZSBzZXQgdG8geC5cbiAqXG4gKiBAcGFyYW0gW3g9MF0ge251bWJlcn0gcG9zaXRpb24gb2YgdGhlIHBvaW50IG9uIHRoZSB4IGF4aXNcbiAqIEBwYXJhbSBbeT0wXSB7bnVtYmVyfSBwb3NpdGlvbiBvZiB0aGUgcG9pbnQgb24gdGhlIHkgYXhpc1xuICovXG5Qb2ludC5wcm90b3R5cGUuc2V0ID0gZnVuY3Rpb24gKHgsIHkpXG57XG4gICAgdGhpcy54ID0geCB8fCAwO1xuICAgIHRoaXMueSA9IHkgfHwgKCAoeSAhPT0gMCkgPyB0aGlzLnggOiAwICkgO1xufTtcbiIsIi8qKlxuICogTWF0aCBjbGFzc2VzIGFuZCB1dGlsaXRpZXMgbWl4ZWQgaW50byBQSVhJIG5hbWVzcGFjZS5cbiAqXG4gKiBAbGVuZHMgUElYSVxuICovXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgICAvLyBUaGVzZSB3aWxsIGJlIG1peGVkIHRvIGJlIG1hZGUgcHVibGljbHkgYXZhaWxhYmxlLFxuICAgIC8vIHdoaWxlIHRoaXMgbW9kdWxlIGlzIHVzZWQgaW50ZXJuYWxseSBpbiBjb3JlXG4gICAgLy8gdG8gYXZvaWQgY2lyY3VsYXIgZGVwZW5kZW5jaWVzIGFuZCBjdXQgZG93biBvblxuICAgIC8vIGludGVybmFsIG1vZHVsZSByZXF1aXJlcy5cblxuICAgIFBvaW50OiAgICAgIHJlcXVpcmUoJy4vUG9pbnQnKSxcbiAgICBNYXRyaXg6ICAgICByZXF1aXJlKCcuL01hdHJpeCcpLFxuXG4gICAgQ2lyY2xlOiAgICAgcmVxdWlyZSgnLi9zaGFwZXMvQ2lyY2xlJyksXG4gICAgRWxsaXBzZTogICAgcmVxdWlyZSgnLi9zaGFwZXMvRWxsaXBzZScpLFxuICAgIFBvbHlnb246ICAgIHJlcXVpcmUoJy4vc2hhcGVzL1BvbHlnb24nKSxcbiAgICBSZWN0YW5nbGU6ICByZXF1aXJlKCcuL3NoYXBlcy9SZWN0YW5nbGUnKSxcbiAgICBSb3VuZGVkUmVjdGFuZ2xlOiByZXF1aXJlKCcuL3NoYXBlcy9Sb3VuZGVkUmVjdGFuZ2xlJylcbn07XG4iLCJ2YXIgUmVjdGFuZ2xlID0gcmVxdWlyZSgnLi9SZWN0YW5nbGUnKSxcbiAgICBDT05TVCA9IHJlcXVpcmUoJy4uLy4uL2NvbnN0Jyk7XG5cbi8qKlxuICogVGhlIENpcmNsZSBvYmplY3QgY2FuIGJlIHVzZWQgdG8gc3BlY2lmeSBhIGhpdCBhcmVhIGZvciBkaXNwbGF5T2JqZWN0c1xuICpcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqIEBwYXJhbSB4IHtudW1iZXJ9IFRoZSBYIGNvb3JkaW5hdGUgb2YgdGhlIGNlbnRlciBvZiB0aGlzIGNpcmNsZVxuICogQHBhcmFtIHkge251bWJlcn0gVGhlIFkgY29vcmRpbmF0ZSBvZiB0aGUgY2VudGVyIG9mIHRoaXMgY2lyY2xlXG4gKiBAcGFyYW0gcmFkaXVzIHtudW1iZXJ9IFRoZSByYWRpdXMgb2YgdGhlIGNpcmNsZVxuICovXG5mdW5jdGlvbiBDaXJjbGUoeCwgeSwgcmFkaXVzKVxue1xuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAwXG4gICAgICovXG4gICAgdGhpcy54ID0geCB8fCAwO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDBcbiAgICAgKi9cbiAgICB0aGlzLnkgPSB5IHx8IDA7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMFxuICAgICAqL1xuICAgIHRoaXMucmFkaXVzID0gcmFkaXVzIHx8IDA7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgdHlwZSBvZiB0aGUgb2JqZWN0LCBtYWlubHkgdXNlZCB0byBhdm9pZCBgaW5zdGFuY2VvZmAgY2hlY2tzXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy50eXBlID0gQ09OU1QuU0hBUEVTLkNJUkM7XG59XG5cbkNpcmNsZS5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBDaXJjbGU7XG5tb2R1bGUuZXhwb3J0cyA9IENpcmNsZTtcblxuLyoqXG4gKiBDcmVhdGVzIGEgY2xvbmUgb2YgdGhpcyBDaXJjbGUgaW5zdGFuY2VcbiAqXG4gKiBAcmV0dXJuIHtQSVhJLkNpcmNsZX0gYSBjb3B5IG9mIHRoZSBDaXJjbGVcbiAqL1xuQ2lyY2xlLnByb3RvdHlwZS5jbG9uZSA9IGZ1bmN0aW9uICgpXG57XG4gICAgcmV0dXJuIG5ldyBDaXJjbGUodGhpcy54LCB0aGlzLnksIHRoaXMucmFkaXVzKTtcbn07XG5cbi8qKlxuICogQ2hlY2tzIHdoZXRoZXIgdGhlIHggYW5kIHkgY29vcmRpbmF0ZXMgZ2l2ZW4gYXJlIGNvbnRhaW5lZCB3aXRoaW4gdGhpcyBjaXJjbGVcbiAqXG4gKiBAcGFyYW0geCB7bnVtYmVyfSBUaGUgWCBjb29yZGluYXRlIG9mIHRoZSBwb2ludCB0byB0ZXN0XG4gKiBAcGFyYW0geSB7bnVtYmVyfSBUaGUgWSBjb29yZGluYXRlIG9mIHRoZSBwb2ludCB0byB0ZXN0XG4gKiBAcmV0dXJuIHtib29sZWFufSBXaGV0aGVyIHRoZSB4L3kgY29vcmRpbmF0ZXMgYXJlIHdpdGhpbiB0aGlzIENpcmNsZVxuICovXG5DaXJjbGUucHJvdG90eXBlLmNvbnRhaW5zID0gZnVuY3Rpb24gKHgsIHkpXG57XG4gICAgaWYgKHRoaXMucmFkaXVzIDw9IDApXG4gICAge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgdmFyIGR4ID0gKHRoaXMueCAtIHgpLFxuICAgICAgICBkeSA9ICh0aGlzLnkgLSB5KSxcbiAgICAgICAgcjIgPSB0aGlzLnJhZGl1cyAqIHRoaXMucmFkaXVzO1xuXG4gICAgZHggKj0gZHg7XG4gICAgZHkgKj0gZHk7XG5cbiAgICByZXR1cm4gKGR4ICsgZHkgPD0gcjIpO1xufTtcblxuLyoqXG4qIFJldHVybnMgdGhlIGZyYW1pbmcgcmVjdGFuZ2xlIG9mIHRoZSBjaXJjbGUgYXMgYSBSZWN0YW5nbGUgb2JqZWN0XG4qXG4qIEByZXR1cm4ge1BJWEkuUmVjdGFuZ2xlfSB0aGUgZnJhbWluZyByZWN0YW5nbGVcbiovXG5DaXJjbGUucHJvdG90eXBlLmdldEJvdW5kcyA9IGZ1bmN0aW9uICgpXG57XG4gICAgcmV0dXJuIG5ldyBSZWN0YW5nbGUodGhpcy54IC0gdGhpcy5yYWRpdXMsIHRoaXMueSAtIHRoaXMucmFkaXVzLCB0aGlzLnJhZGl1cyAqIDIsIHRoaXMucmFkaXVzICogMik7XG59O1xuIiwidmFyIFJlY3RhbmdsZSA9IHJlcXVpcmUoJy4vUmVjdGFuZ2xlJyksXG4gICAgQ09OU1QgPSByZXF1aXJlKCcuLi8uLi9jb25zdCcpO1xuXG4vKipcbiAqIFRoZSBFbGxpcHNlIG9iamVjdCBjYW4gYmUgdXNlZCB0byBzcGVjaWZ5IGEgaGl0IGFyZWEgZm9yIGRpc3BsYXlPYmplY3RzXG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIHgge251bWJlcn0gVGhlIFggY29vcmRpbmF0ZSBvZiB0aGUgY2VudGVyIG9mIHRoZSBlbGxpcHNlXG4gKiBAcGFyYW0geSB7bnVtYmVyfSBUaGUgWSBjb29yZGluYXRlIG9mIHRoZSBjZW50ZXIgb2YgdGhlIGVsbGlwc2VcbiAqIEBwYXJhbSB3aWR0aCB7bnVtYmVyfSBUaGUgaGFsZiB3aWR0aCBvZiB0aGlzIGVsbGlwc2VcbiAqIEBwYXJhbSBoZWlnaHQge251bWJlcn0gVGhlIGhhbGYgaGVpZ2h0IG9mIHRoaXMgZWxsaXBzZVxuICovXG5mdW5jdGlvbiBFbGxpcHNlKHgsIHksIHdpZHRoLCBoZWlnaHQpXG57XG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDBcbiAgICAgKi9cbiAgICB0aGlzLnggPSB4IHx8IDA7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMFxuICAgICAqL1xuICAgIHRoaXMueSA9IHkgfHwgMDtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAwXG4gICAgICovXG4gICAgdGhpcy53aWR0aCA9IHdpZHRoIHx8IDA7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMFxuICAgICAqL1xuICAgIHRoaXMuaGVpZ2h0ID0gaGVpZ2h0IHx8IDA7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgdHlwZSBvZiB0aGUgb2JqZWN0LCBtYWlubHkgdXNlZCB0byBhdm9pZCBgaW5zdGFuY2VvZmAgY2hlY2tzXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy50eXBlID0gQ09OU1QuU0hBUEVTLkVMSVA7XG59XG5cbkVsbGlwc2UucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gRWxsaXBzZTtcbm1vZHVsZS5leHBvcnRzID0gRWxsaXBzZTtcblxuLyoqXG4gKiBDcmVhdGVzIGEgY2xvbmUgb2YgdGhpcyBFbGxpcHNlIGluc3RhbmNlXG4gKlxuICogQHJldHVybiB7UElYSS5FbGxpcHNlfSBhIGNvcHkgb2YgdGhlIGVsbGlwc2VcbiAqL1xuRWxsaXBzZS5wcm90b3R5cGUuY2xvbmUgPSBmdW5jdGlvbiAoKVxue1xuICAgIHJldHVybiBuZXcgRWxsaXBzZSh0aGlzLngsIHRoaXMueSwgdGhpcy53aWR0aCwgdGhpcy5oZWlnaHQpO1xufTtcblxuLyoqXG4gKiBDaGVja3Mgd2hldGhlciB0aGUgeCBhbmQgeSBjb29yZGluYXRlcyBnaXZlbiBhcmUgY29udGFpbmVkIHdpdGhpbiB0aGlzIGVsbGlwc2VcbiAqXG4gKiBAcGFyYW0geCB7bnVtYmVyfSBUaGUgWCBjb29yZGluYXRlIG9mIHRoZSBwb2ludCB0byB0ZXN0XG4gKiBAcGFyYW0geSB7bnVtYmVyfSBUaGUgWSBjb29yZGluYXRlIG9mIHRoZSBwb2ludCB0byB0ZXN0XG4gKiBAcmV0dXJuIHtib29sZWFufSBXaGV0aGVyIHRoZSB4L3kgY29vcmRzIGFyZSB3aXRoaW4gdGhpcyBlbGxpcHNlXG4gKi9cbkVsbGlwc2UucHJvdG90eXBlLmNvbnRhaW5zID0gZnVuY3Rpb24gKHgsIHkpXG57XG4gICAgaWYgKHRoaXMud2lkdGggPD0gMCB8fCB0aGlzLmhlaWdodCA8PSAwKVxuICAgIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIC8vbm9ybWFsaXplIHRoZSBjb29yZHMgdG8gYW4gZWxsaXBzZSB3aXRoIGNlbnRlciAwLDBcbiAgICB2YXIgbm9ybXggPSAoKHggLSB0aGlzLngpIC8gdGhpcy53aWR0aCksXG4gICAgICAgIG5vcm15ID0gKCh5IC0gdGhpcy55KSAvIHRoaXMuaGVpZ2h0KTtcblxuICAgIG5vcm14ICo9IG5vcm14O1xuICAgIG5vcm15ICo9IG5vcm15O1xuXG4gICAgcmV0dXJuIChub3JteCArIG5vcm15IDw9IDEpO1xufTtcblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBmcmFtaW5nIHJlY3RhbmdsZSBvZiB0aGUgZWxsaXBzZSBhcyBhIFJlY3RhbmdsZSBvYmplY3RcbiAqXG4gKiBAcmV0dXJuIHtQSVhJLlJlY3RhbmdsZX0gdGhlIGZyYW1pbmcgcmVjdGFuZ2xlXG4gKi9cbkVsbGlwc2UucHJvdG90eXBlLmdldEJvdW5kcyA9IGZ1bmN0aW9uICgpXG57XG4gICAgcmV0dXJuIG5ldyBSZWN0YW5nbGUodGhpcy54IC0gdGhpcy53aWR0aCwgdGhpcy55IC0gdGhpcy5oZWlnaHQsIHRoaXMud2lkdGgsIHRoaXMuaGVpZ2h0KTtcbn07XG4iLCJ2YXIgUG9pbnQgPSByZXF1aXJlKCcuLi9Qb2ludCcpLFxuICAgIENPTlNUID0gcmVxdWlyZSgnLi4vLi4vY29uc3QnKTtcblxuLyoqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gcG9pbnRzIHtQSVhJLlBvaW50W118bnVtYmVyW118Li4uUElYSS5Qb2ludHwuLi5udW1iZXJ9IFRoaXMgY2FuIGJlIGFuIGFycmF5IG9mIFBvaW50cyB0aGF0IGZvcm0gdGhlIHBvbHlnb24sXG4gKiAgICAgIGEgZmxhdCBhcnJheSBvZiBudW1iZXJzIHRoYXQgd2lsbCBiZSBpbnRlcnByZXRlZCBhcyBbeCx5LCB4LHksIC4uLl0sIG9yIHRoZSBhcmd1bWVudHMgcGFzc2VkIGNhbiBiZVxuICogICAgICBhbGwgdGhlIHBvaW50cyBvZiB0aGUgcG9seWdvbiBlLmcuIGBuZXcgUElYSS5Qb2x5Z29uKG5ldyBQSVhJLlBvaW50KCksIG5ldyBQSVhJLlBvaW50KCksIC4uLilgLCBvciB0aGVcbiAqICAgICAgYXJndW1lbnRzIHBhc3NlZCBjYW4gYmUgZmxhdCB4LHkgdmFsdWVzIGUuZy4gYG5ldyBQb2x5Z29uKHgseSwgeCx5LCB4LHksIC4uLilgIHdoZXJlIGB4YCBhbmQgYHlgIGFyZVxuICogICAgICBOdW1iZXJzLlxuICovXG5mdW5jdGlvbiBQb2x5Z29uKHBvaW50c18pXG57XG4gICAgLy8gcHJldmVudHMgYW4gYXJndW1lbnQgYXNzaWdubWVudCBkZW9wdFxuICAgIC8vIHNlZSBzZWN0aW9uIDMuMTogaHR0cHM6Ly9naXRodWIuY29tL3BldGthYW50b25vdi9ibHVlYmlyZC93aWtpL09wdGltaXphdGlvbi1raWxsZXJzIzMtbWFuYWdpbmctYXJndW1lbnRzXG4gICAgdmFyIHBvaW50cyA9IHBvaW50c187XG5cbiAgICAvL2lmIHBvaW50cyBpc24ndCBhbiBhcnJheSwgdXNlIGFyZ3VtZW50cyBhcyB0aGUgYXJyYXlcbiAgICBpZiAoIUFycmF5LmlzQXJyYXkocG9pbnRzKSlcbiAgICB7XG4gICAgICAgIC8vIHByZXZlbnRzIGFuIGFyZ3VtZW50IGxlYWsgZGVvcHRcbiAgICAgICAgLy8gc2VlIHNlY3Rpb24gMy4yOiBodHRwczovL2dpdGh1Yi5jb20vcGV0a2FhbnRvbm92L2JsdWViaXJkL3dpa2kvT3B0aW1pemF0aW9uLWtpbGxlcnMjMy1tYW5hZ2luZy1hcmd1bWVudHNcbiAgICAgICAgcG9pbnRzID0gbmV3IEFycmF5KGFyZ3VtZW50cy5sZW5ndGgpO1xuXG4gICAgICAgIGZvciAodmFyIGEgPSAwOyBhIDwgcG9pbnRzLmxlbmd0aDsgKythKSB7XG4gICAgICAgICAgICBwb2ludHNbYV0gPSBhcmd1bWVudHNbYV07XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBpZiB0aGlzIGlzIGFuIGFycmF5IG9mIHBvaW50cywgY29udmVydCBpdCB0byBhIGZsYXQgYXJyYXkgb2YgbnVtYmVyc1xuICAgIGlmIChwb2ludHNbMF0gaW5zdGFuY2VvZiBQb2ludClcbiAgICB7XG4gICAgICAgIHZhciBwID0gW107XG4gICAgICAgIGZvciAodmFyIGkgPSAwLCBpbCA9IHBvaW50cy5sZW5ndGg7IGkgPCBpbDsgaSsrKVxuICAgICAgICB7XG4gICAgICAgICAgICBwLnB1c2gocG9pbnRzW2ldLngsIHBvaW50c1tpXS55KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHBvaW50cyA9IHA7XG4gICAgfVxuXG4gICAgdGhpcy5jbG9zZWQgPSB0cnVlO1xuXG4gICAgLyoqXG4gICAgICogQW4gYXJyYXkgb2YgdGhlIHBvaW50cyBvZiB0aGlzIHBvbHlnb25cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcltdfVxuICAgICAqL1xuICAgIHRoaXMucG9pbnRzID0gcG9pbnRzO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHR5cGUgb2YgdGhlIG9iamVjdCwgbWFpbmx5IHVzZWQgdG8gYXZvaWQgYGluc3RhbmNlb2ZgIGNoZWNrc1xuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMudHlwZSA9IENPTlNULlNIQVBFUy5QT0xZO1xufVxuXG5Qb2x5Z29uLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFBvbHlnb247XG5tb2R1bGUuZXhwb3J0cyA9IFBvbHlnb247XG5cbi8qKlxuICogQ3JlYXRlcyBhIGNsb25lIG9mIHRoaXMgcG9seWdvblxuICpcbiAqIEByZXR1cm4ge1BJWEkuUG9seWdvbn0gYSBjb3B5IG9mIHRoZSBwb2x5Z29uXG4gKi9cblBvbHlnb24ucHJvdG90eXBlLmNsb25lID0gZnVuY3Rpb24gKClcbntcbiAgICByZXR1cm4gbmV3IFBvbHlnb24odGhpcy5wb2ludHMuc2xpY2UoKSk7XG59O1xuXG4vKipcbiAqIENoZWNrcyB3aGV0aGVyIHRoZSB4IGFuZCB5IGNvb3JkaW5hdGVzIHBhc3NlZCB0byB0aGlzIGZ1bmN0aW9uIGFyZSBjb250YWluZWQgd2l0aGluIHRoaXMgcG9seWdvblxuICpcbiAqIEBwYXJhbSB4IHtudW1iZXJ9IFRoZSBYIGNvb3JkaW5hdGUgb2YgdGhlIHBvaW50IHRvIHRlc3RcbiAqIEBwYXJhbSB5IHtudW1iZXJ9IFRoZSBZIGNvb3JkaW5hdGUgb2YgdGhlIHBvaW50IHRvIHRlc3RcbiAqIEByZXR1cm4ge2Jvb2xlYW59IFdoZXRoZXIgdGhlIHgveSBjb29yZGluYXRlcyBhcmUgd2l0aGluIHRoaXMgcG9seWdvblxuICovXG5Qb2x5Z29uLnByb3RvdHlwZS5jb250YWlucyA9IGZ1bmN0aW9uICh4LCB5KVxue1xuICAgIHZhciBpbnNpZGUgPSBmYWxzZTtcblxuICAgIC8vIHVzZSBzb21lIHJheWNhc3RpbmcgdG8gdGVzdCBoaXRzXG4gICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL3N1YnN0YWNrL3BvaW50LWluLXBvbHlnb24vYmxvYi9tYXN0ZXIvaW5kZXguanNcbiAgICB2YXIgbGVuZ3RoID0gdGhpcy5wb2ludHMubGVuZ3RoIC8gMjtcblxuICAgIGZvciAodmFyIGkgPSAwLCBqID0gbGVuZ3RoIC0gMTsgaSA8IGxlbmd0aDsgaiA9IGkrKylcbiAgICB7XG4gICAgICAgIHZhciB4aSA9IHRoaXMucG9pbnRzW2kgKiAyXSwgeWkgPSB0aGlzLnBvaW50c1tpICogMiArIDFdLFxuICAgICAgICAgICAgeGogPSB0aGlzLnBvaW50c1tqICogMl0sIHlqID0gdGhpcy5wb2ludHNbaiAqIDIgKyAxXSxcbiAgICAgICAgICAgIGludGVyc2VjdCA9ICgoeWkgPiB5KSAhPT0gKHlqID4geSkpICYmICh4IDwgKHhqIC0geGkpICogKHkgLSB5aSkgLyAoeWogLSB5aSkgKyB4aSk7XG5cbiAgICAgICAgaWYgKGludGVyc2VjdClcbiAgICAgICAge1xuICAgICAgICAgICAgaW5zaWRlID0gIWluc2lkZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBpbnNpZGU7XG59O1xuIiwidmFyIENPTlNUID0gcmVxdWlyZSgnLi4vLi4vY29uc3QnKTtcblxuLyoqXG4gKiB0aGUgUmVjdGFuZ2xlIG9iamVjdCBpcyBhbiBhcmVhIGRlZmluZWQgYnkgaXRzIHBvc2l0aW9uLCBhcyBpbmRpY2F0ZWQgYnkgaXRzIHRvcC1sZWZ0IGNvcm5lciBwb2ludCAoeCwgeSkgYW5kIGJ5IGl0cyB3aWR0aCBhbmQgaXRzIGhlaWdodC5cbiAqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0geCB7bnVtYmVyfSBUaGUgWCBjb29yZGluYXRlIG9mIHRoZSB1cHBlci1sZWZ0IGNvcm5lciBvZiB0aGUgcmVjdGFuZ2xlXG4gKiBAcGFyYW0geSB7bnVtYmVyfSBUaGUgWSBjb29yZGluYXRlIG9mIHRoZSB1cHBlci1sZWZ0IGNvcm5lciBvZiB0aGUgcmVjdGFuZ2xlXG4gKiBAcGFyYW0gd2lkdGgge251bWJlcn0gVGhlIG92ZXJhbGwgd2lkdGggb2YgdGhpcyByZWN0YW5nbGVcbiAqIEBwYXJhbSBoZWlnaHQge251bWJlcn0gVGhlIG92ZXJhbGwgaGVpZ2h0IG9mIHRoaXMgcmVjdGFuZ2xlXG4gKi9cbmZ1bmN0aW9uIFJlY3RhbmdsZSh4LCB5LCB3aWR0aCwgaGVpZ2h0KVxue1xuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAwXG4gICAgICovXG4gICAgdGhpcy54ID0geCB8fCAwO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDBcbiAgICAgKi9cbiAgICB0aGlzLnkgPSB5IHx8IDA7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMFxuICAgICAqL1xuICAgIHRoaXMud2lkdGggPSB3aWR0aCB8fCAwO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDBcbiAgICAgKi9cbiAgICB0aGlzLmhlaWdodCA9IGhlaWdodCB8fCAwO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHR5cGUgb2YgdGhlIG9iamVjdCwgbWFpbmx5IHVzZWQgdG8gYXZvaWQgYGluc3RhbmNlb2ZgIGNoZWNrc1xuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMudHlwZSA9IENPTlNULlNIQVBFUy5SRUNUO1xufVxuXG5SZWN0YW5nbGUucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gUmVjdGFuZ2xlO1xubW9kdWxlLmV4cG9ydHMgPSBSZWN0YW5nbGU7XG5cbi8qKlxuICogQSBjb25zdGFudCBlbXB0eSByZWN0YW5nbGUuXG4gKlxuICogQHN0YXRpY1xuICogQGNvbnN0YW50XG4gKi9cblJlY3RhbmdsZS5FTVBUWSA9IG5ldyBSZWN0YW5nbGUoMCwgMCwgMCwgMCk7XG5cblxuLyoqXG4gKiBDcmVhdGVzIGEgY2xvbmUgb2YgdGhpcyBSZWN0YW5nbGVcbiAqXG4gKiBAcmV0dXJuIHtQSVhJLlJlY3RhbmdsZX0gYSBjb3B5IG9mIHRoZSByZWN0YW5nbGVcbiAqL1xuUmVjdGFuZ2xlLnByb3RvdHlwZS5jbG9uZSA9IGZ1bmN0aW9uICgpXG57XG4gICAgcmV0dXJuIG5ldyBSZWN0YW5nbGUodGhpcy54LCB0aGlzLnksIHRoaXMud2lkdGgsIHRoaXMuaGVpZ2h0KTtcbn07XG5cbi8qKlxuICogQ2hlY2tzIHdoZXRoZXIgdGhlIHggYW5kIHkgY29vcmRpbmF0ZXMgZ2l2ZW4gYXJlIGNvbnRhaW5lZCB3aXRoaW4gdGhpcyBSZWN0YW5nbGVcbiAqXG4gKiBAcGFyYW0geCB7bnVtYmVyfSBUaGUgWCBjb29yZGluYXRlIG9mIHRoZSBwb2ludCB0byB0ZXN0XG4gKiBAcGFyYW0geSB7bnVtYmVyfSBUaGUgWSBjb29yZGluYXRlIG9mIHRoZSBwb2ludCB0byB0ZXN0XG4gKiBAcmV0dXJuIHtib29sZWFufSBXaGV0aGVyIHRoZSB4L3kgY29vcmRpbmF0ZXMgYXJlIHdpdGhpbiB0aGlzIFJlY3RhbmdsZVxuICovXG5SZWN0YW5nbGUucHJvdG90eXBlLmNvbnRhaW5zID0gZnVuY3Rpb24gKHgsIHkpXG57XG4gICAgaWYgKHRoaXMud2lkdGggPD0gMCB8fCB0aGlzLmhlaWdodCA8PSAwKVxuICAgIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGlmICh4ID49IHRoaXMueCAmJiB4IDwgdGhpcy54ICsgdGhpcy53aWR0aClcbiAgICB7XG4gICAgICAgIGlmICh5ID49IHRoaXMueSAmJiB5IDwgdGhpcy55ICsgdGhpcy5oZWlnaHQpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xufTtcbiIsInZhciBDT05TVCA9IHJlcXVpcmUoJy4uLy4uL2NvbnN0Jyk7XG5cbi8qKlxuICogVGhlIFJvdW5kZWQgUmVjdGFuZ2xlIG9iamVjdCBpcyBhbiBhcmVhIHRoYXQgaGFzIG5pY2Ugcm91bmRlZCBjb3JuZXJzLCBhcyBpbmRpY2F0ZWQgYnkgaXRzIHRvcC1sZWZ0IGNvcm5lciBwb2ludCAoeCwgeSkgYW5kIGJ5IGl0cyB3aWR0aCBhbmQgaXRzIGhlaWdodCBhbmQgaXRzIHJhZGl1cy5cbiAqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0geCB7bnVtYmVyfSBUaGUgWCBjb29yZGluYXRlIG9mIHRoZSB1cHBlci1sZWZ0IGNvcm5lciBvZiB0aGUgcm91bmRlZCByZWN0YW5nbGVcbiAqIEBwYXJhbSB5IHtudW1iZXJ9IFRoZSBZIGNvb3JkaW5hdGUgb2YgdGhlIHVwcGVyLWxlZnQgY29ybmVyIG9mIHRoZSByb3VuZGVkIHJlY3RhbmdsZVxuICogQHBhcmFtIHdpZHRoIHtudW1iZXJ9IFRoZSBvdmVyYWxsIHdpZHRoIG9mIHRoaXMgcm91bmRlZCByZWN0YW5nbGVcbiAqIEBwYXJhbSBoZWlnaHQge251bWJlcn0gVGhlIG92ZXJhbGwgaGVpZ2h0IG9mIHRoaXMgcm91bmRlZCByZWN0YW5nbGVcbiAqIEBwYXJhbSByYWRpdXMge251bWJlcn0gQ29udHJvbHMgdGhlIHJhZGl1cyBvZiB0aGUgcm91bmRlZCBjb3JuZXJzXG4gKi9cbmZ1bmN0aW9uIFJvdW5kZWRSZWN0YW5nbGUoeCwgeSwgd2lkdGgsIGhlaWdodCwgcmFkaXVzKVxue1xuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAwXG4gICAgICovXG4gICAgdGhpcy54ID0geCB8fCAwO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDBcbiAgICAgKi9cbiAgICB0aGlzLnkgPSB5IHx8IDA7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMFxuICAgICAqL1xuICAgIHRoaXMud2lkdGggPSB3aWR0aCB8fCAwO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDBcbiAgICAgKi9cbiAgICB0aGlzLmhlaWdodCA9IGhlaWdodCB8fCAwO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDIwXG4gICAgICovXG4gICAgdGhpcy5yYWRpdXMgPSByYWRpdXMgfHwgMjA7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgdHlwZSBvZiB0aGUgb2JqZWN0LCBtYWlubHkgdXNlZCB0byBhdm9pZCBgaW5zdGFuY2VvZmAgY2hlY2tzXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy50eXBlID0gQ09OU1QuU0hBUEVTLlJSRUM7XG59XG5cblJvdW5kZWRSZWN0YW5nbGUucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gUm91bmRlZFJlY3RhbmdsZTtcbm1vZHVsZS5leHBvcnRzID0gUm91bmRlZFJlY3RhbmdsZTtcblxuLyoqXG4gKiBDcmVhdGVzIGEgY2xvbmUgb2YgdGhpcyBSb3VuZGVkIFJlY3RhbmdsZVxuICpcbiAqIEByZXR1cm4ge1BJWEkuUm91bmRlZFJlY3RhbmdsZX0gYSBjb3B5IG9mIHRoZSByb3VuZGVkIHJlY3RhbmdsZVxuICovXG5Sb3VuZGVkUmVjdGFuZ2xlLnByb3RvdHlwZS5jbG9uZSA9IGZ1bmN0aW9uICgpXG57XG4gICAgcmV0dXJuIG5ldyBSb3VuZGVkUmVjdGFuZ2xlKHRoaXMueCwgdGhpcy55LCB0aGlzLndpZHRoLCB0aGlzLmhlaWdodCwgdGhpcy5yYWRpdXMpO1xufTtcblxuLyoqXG4gKiBDaGVja3Mgd2hldGhlciB0aGUgeCBhbmQgeSBjb29yZGluYXRlcyBnaXZlbiBhcmUgY29udGFpbmVkIHdpdGhpbiB0aGlzIFJvdW5kZWQgUmVjdGFuZ2xlXG4gKlxuICogQHBhcmFtIHgge251bWJlcn0gVGhlIFggY29vcmRpbmF0ZSBvZiB0aGUgcG9pbnQgdG8gdGVzdFxuICogQHBhcmFtIHkge251bWJlcn0gVGhlIFkgY29vcmRpbmF0ZSBvZiB0aGUgcG9pbnQgdG8gdGVzdFxuICogQHJldHVybiB7Ym9vbGVhbn0gV2hldGhlciB0aGUgeC95IGNvb3JkaW5hdGVzIGFyZSB3aXRoaW4gdGhpcyBSb3VuZGVkIFJlY3RhbmdsZVxuICovXG5Sb3VuZGVkUmVjdGFuZ2xlLnByb3RvdHlwZS5jb250YWlucyA9IGZ1bmN0aW9uICh4LCB5KVxue1xuICAgIGlmICh0aGlzLndpZHRoIDw9IDAgfHwgdGhpcy5oZWlnaHQgPD0gMClcbiAgICB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBpZiAoeCA+PSB0aGlzLnggJiYgeCA8PSB0aGlzLnggKyB0aGlzLndpZHRoKVxuICAgIHtcbiAgICAgICAgaWYgKHkgPj0gdGhpcy55ICYmIHkgPD0gdGhpcy55ICsgdGhpcy5oZWlnaHQpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xufTtcbiIsInZhciBDb250YWluZXIgPSByZXF1aXJlKCcuLi9kaXNwbGF5L0NvbnRhaW5lcicpLFxuICAgIENPTlNUID0gcmVxdWlyZSgnLi4vY29uc3QnKTtcblxuLyoqXG4gKiBUaGUgUGFydGljbGVDb250YWluZXIgY2xhc3MgaXMgYSByZWFsbHkgZmFzdCB2ZXJzaW9uIG9mIHRoZSBDb250YWluZXIgYnVpbHQgc29sZWx5IGZvciBzcGVlZCxcbiAqIHNvIHVzZSB3aGVuIHlvdSBuZWVkIGEgbG90IG9mIHNwcml0ZXMgb3IgcGFydGljbGVzLiBUaGUgdHJhZGVvZmYgb2YgdGhlIFBhcnRpY2xlQ29udGFpbmVyIGlzIHRoYXQgYWR2YW5jZWRcbiAqIGZ1bmN0aW9uYWxpdHkgd2lsbCBub3Qgd29yay4gUGFydGljbGVDb250YWluZXIgaW1wbGVtZW50cyBvbmx5IHRoZSBiYXNpYyBvYmplY3QgdHJhbnNmb3JtIChwb3NpdGlvbiwgc2NhbGUsIHJvdGF0aW9uKS5cbiAqIEFueSBvdGhlciBmdW5jdGlvbmFsaXR5IGxpa2UgdGludGluZywgbWFza2luZywgZXRjIHdpbGwgbm90IHdvcmsgb24gc3ByaXRlcyBpbiB0aGlzIGJhdGNoLlxuICpcbiAqIEl0J3MgZXh0cmVtZWx5IGVhc3kgdG8gdXNlIDpcbiAqXG4gKiBgYGBqc1xuICogdmFyIGNvbnRhaW5lciA9IG5ldyBQYXJ0aWNsZUNvbnRhaW5lcigpO1xuICpcbiAqIGZvciAodmFyIGkgPSAwOyBpIDwgMTAwOyArK2kpXG4gKiB7XG4gKiAgICAgdmFyIHNwcml0ZSA9IG5ldyBQSVhJLlNwcml0ZS5mcm9tSW1hZ2UoXCJteUltYWdlLnBuZ1wiKTtcbiAqICAgICBjb250YWluZXIuYWRkQ2hpbGQoc3ByaXRlKTtcbiAqIH1cbiAqIGBgYFxuICpcbiAqIEFuZCBoZXJlIHlvdSBoYXZlIGEgaHVuZHJlZCBzcHJpdGVzIHRoYXQgd2lsbCBiZSByZW5kZXJlciBhdCB0aGUgc3BlZWQgb2YgbGlnaHQuXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLkNvbnRhaW5lclxuICogQG1lbWJlcm9mIFBJWElcbiAqIEBwYXJhbSBbbWF4U2l6ZT0xNTAwMF0ge251bWJlcn0gVGhlIG1heGltdW0gbnVtYmVyIG9mIHBhcnRpY2xlcyB0aGF0IGNhbiBiZSByZW5kZXJlciBieSB0aGUgY29udGFpbmVyLlxuICogQHBhcmFtIFtwcm9wZXJ0aWVzXSB7b2JqZWN0fSBUaGUgcHJvcGVydGllcyBvZiBjaGlsZHJlbiB0aGF0IHNob3VsZCBiZSB1cGxvYWRlZCB0byB0aGUgZ3B1IGFuZCBhcHBsaWVkLlxuICogQHBhcmFtIFtwcm9wZXJ0aWVzLnNjYWxlPWZhbHNlXSB7Ym9vbGVhbn0gV2hlbiB0cnVlLCBzY2FsZSBiZSB1cGxvYWRlZCBhbmQgYXBwbGllZC5cbiAqIEBwYXJhbSBbcHJvcGVydGllcy5wb3NpdGlvbj10cnVlXSB7Ym9vbGVhbn0gV2hlbiB0cnVlLCBwb3NpdGlvbiBiZSB1cGxvYWRlZCBhbmQgYXBwbGllZC5cbiAqIEBwYXJhbSBbcHJvcGVydGllcy5yb3RhdGlvbj1mYWxzZV0ge2Jvb2xlYW59IFdoZW4gdHJ1ZSwgcm90YXRpb24gYmUgdXBsb2FkZWQgYW5kIGFwcGxpZWQuXG4gKiBAcGFyYW0gW3Byb3BlcnRpZXMudXZzPWZhbHNlXSB7Ym9vbGVhbn0gV2hlbiB0cnVlLCB1dnMgYmUgdXBsb2FkZWQgYW5kIGFwcGxpZWQuXG4gKiBAcGFyYW0gW3Byb3BlcnRpZXMuYWxwaGE9ZmFsc2VdIHtib29sZWFufSBXaGVuIHRydWUsIGFscGhhIGJlIHVwbG9hZGVkIGFuZCBhcHBsaWVkLlxuICogQHBhcmFtIFtiYXRjaFNpemU9MTUwMDBdIHtudW1iZXJ9IE51bWJlciBvZiBwYXJ0aWNsZXMgcGVyIGJhdGNoLlxuICovXG5mdW5jdGlvbiBQYXJ0aWNsZUNvbnRhaW5lcihtYXhTaXplLCBwcm9wZXJ0aWVzLCBiYXRjaFNpemUpXG57XG4gICAgQ29udGFpbmVyLmNhbGwodGhpcyk7XG5cbiAgICBiYXRjaFNpemUgPSBiYXRjaFNpemUgfHwgMTUwMDA7IC8vQ09OU1QuU1BSSVRFX0JBVENIX1NJWkU7IC8vIDIwMDAgaXMgYSBuaWNlIGJhbGFuY2UgYmV0d2VlbiBtb2JpbGUgLyBkZXNrdG9wXG4gICAgbWF4U2l6ZSA9IG1heFNpemUgfHwgMTUwMDA7XG5cbiAgICAvLyBNYWtpbmcgc3VyZSB0aGUgYmF0Y2ggc2l6ZSBpcyB2YWxpZFxuICAgIC8vIDY1NTM1IGlzIG1heCB2ZXJ0ZXggaW5kZXggaW4gdGhlIGluZGV4IGJ1ZmZlciAoc2VlIFBhcnRpY2xlUmVuZGVyZXIpXG4gICAgLy8gc28gbWF4IG51bWJlciBvZiBwYXJ0aWNsZXMgaXMgNjU1MzYgLyA0ID0gMTYzODRcbiAgICB2YXIgbWF4QmF0Y2hTaXplID0gMTYzODQ7XG4gICAgaWYgKGJhdGNoU2l6ZSA+IG1heEJhdGNoU2l6ZSkge1xuICAgICAgICBiYXRjaFNpemUgPSBtYXhCYXRjaFNpemU7XG4gICAgfVxuXG4gICAgaWYgKGJhdGNoU2l6ZSA+IG1heFNpemUpIHtcbiAgICAgICAgYmF0Y2hTaXplID0gbWF4U2l6ZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTZXQgcHJvcGVydGllcyB0byBiZSBkeW5hbWljICh0cnVlKSAvIHN0YXRpYyAoZmFsc2UpXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFuW119XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9wcm9wZXJ0aWVzID0gW2ZhbHNlLCB0cnVlLCBmYWxzZSwgZmFsc2UsIGZhbHNlXTtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX21heFNpemUgPSBtYXhTaXplO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fYmF0Y2hTaXplID0gYmF0Y2hTaXplO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7V2ViR0xCdWZmZXJ9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9idWZmZXJzID0gbnVsbDtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX2J1ZmZlclRvVXBkYXRlID0gMDtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICpcbiAgICAgKi9cbiAgICB0aGlzLmludGVyYWN0aXZlQ2hpbGRyZW4gPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBibGVuZCBtb2RlIHRvIGJlIGFwcGxpZWQgdG8gdGhlIHNwcml0ZS4gQXBwbHkgYSB2YWx1ZSBvZiBgUElYSS5CTEVORF9NT0RFUy5OT1JNQUxgIHRvIHJlc2V0IHRoZSBibGVuZCBtb2RlLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IFBJWEkuQkxFTkRfTU9ERVMuTk9STUFMXG4gICAgICogQHNlZSBQSVhJLkJMRU5EX01PREVTXG4gICAgICovXG4gICAgdGhpcy5ibGVuZE1vZGUgPSBDT05TVC5CTEVORF9NT0RFUy5OT1JNQUw7XG5cbiAgICAvKipcbiAgICAgKiBVc2VkIGZvciBjYW52YXMgcmVuZGVyZXJpbmcuIElmIHRydWUgdGhlbiB0aGUgZWxlbWVudHMgd2lsbCBiZSBwb3NpdGlvbmVkIGF0IHRoZSBuZWFyZXN0IHBpeGVsLiBUaGlzIHByb3ZpZGVzIGEgbmljZSBzcGVlZCBib29zdC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICogQGRlZmF1bHQgdHJ1ZTtcbiAgICAgKi9cbiAgICB0aGlzLnJvdW5kUGl4ZWxzID0gdHJ1ZTtcblxuICAgIHRoaXMuc2V0UHJvcGVydGllcyhwcm9wZXJ0aWVzKTtcbn1cblxuUGFydGljbGVDb250YWluZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShDb250YWluZXIucHJvdG90eXBlKTtcblBhcnRpY2xlQ29udGFpbmVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFBhcnRpY2xlQ29udGFpbmVyO1xubW9kdWxlLmV4cG9ydHMgPSBQYXJ0aWNsZUNvbnRhaW5lcjtcblxuLyoqXG4gKiBTZXRzIHRoZSBwcml2YXRlIHByb3BlcnRpZXMgYXJyYXkgdG8gZHluYW1pYyAvIHN0YXRpYyBiYXNlZCBvbiB0aGUgcGFzc2VkIHByb3BlcnRpZXMgb2JqZWN0XG4gKlxuICogQHBhcmFtIHByb3BlcnRpZXMge29iamVjdH0gVGhlIHByb3BlcnRpZXMgdG8gYmUgdXBsb2FkZWRcbiAqL1xuUGFydGljbGVDb250YWluZXIucHJvdG90eXBlLnNldFByb3BlcnRpZXMgPSBmdW5jdGlvbihwcm9wZXJ0aWVzKVxue1xuICAgIGlmICggcHJvcGVydGllcyApIHtcbiAgICAgICAgdGhpcy5fcHJvcGVydGllc1swXSA9ICdzY2FsZScgaW4gcHJvcGVydGllcyA/ICEhcHJvcGVydGllcy5zY2FsZSA6IHRoaXMuX3Byb3BlcnRpZXNbMF07XG4gICAgICAgIHRoaXMuX3Byb3BlcnRpZXNbMV0gPSAncG9zaXRpb24nIGluIHByb3BlcnRpZXMgPyAhIXByb3BlcnRpZXMucG9zaXRpb24gOiB0aGlzLl9wcm9wZXJ0aWVzWzFdO1xuICAgICAgICB0aGlzLl9wcm9wZXJ0aWVzWzJdID0gJ3JvdGF0aW9uJyBpbiBwcm9wZXJ0aWVzID8gISFwcm9wZXJ0aWVzLnJvdGF0aW9uIDogdGhpcy5fcHJvcGVydGllc1syXTtcbiAgICAgICAgdGhpcy5fcHJvcGVydGllc1szXSA9ICd1dnMnIGluIHByb3BlcnRpZXMgPyAhIXByb3BlcnRpZXMudXZzIDogdGhpcy5fcHJvcGVydGllc1szXTtcbiAgICAgICAgdGhpcy5fcHJvcGVydGllc1s0XSA9ICdhbHBoYScgaW4gcHJvcGVydGllcyA/ICEhcHJvcGVydGllcy5hbHBoYSA6IHRoaXMuX3Byb3BlcnRpZXNbNF07XG4gICAgfVxufTtcblxuLyoqXG4gKiBVcGRhdGVzIHRoZSBvYmplY3QgdHJhbnNmb3JtIGZvciByZW5kZXJpbmdcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5QYXJ0aWNsZUNvbnRhaW5lci5wcm90b3R5cGUudXBkYXRlVHJhbnNmb3JtID0gZnVuY3Rpb24gKClcbntcblxuICAgIC8vIFRPRE8gZG9uJ3QgbmVlZCB0byFcbiAgICB0aGlzLmRpc3BsYXlPYmplY3RVcGRhdGVUcmFuc2Zvcm0oKTtcbiAgICAvLyAgUElYSS5Db250YWluZXIucHJvdG90eXBlLnVwZGF0ZVRyYW5zZm9ybS5jYWxsKCB0aGlzICk7XG59O1xuXG4vKipcbiAqIFJlbmRlcnMgdGhlIGNvbnRhaW5lciB1c2luZyB0aGUgV2ViR0wgcmVuZGVyZXJcbiAqXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcn0gVGhlIHdlYmdsIHJlbmRlcmVyXG4gKiBAcHJpdmF0ZVxuICovXG5QYXJ0aWNsZUNvbnRhaW5lci5wcm90b3R5cGUucmVuZGVyV2ViR0wgPSBmdW5jdGlvbiAocmVuZGVyZXIpXG57XG4gICAgaWYgKCF0aGlzLnZpc2libGUgfHwgdGhpcy53b3JsZEFscGhhIDw9IDAgfHwgIXRoaXMuY2hpbGRyZW4ubGVuZ3RoIHx8ICF0aGlzLnJlbmRlcmFibGUpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgcmVuZGVyZXIuc2V0T2JqZWN0UmVuZGVyZXIoIHJlbmRlcmVyLnBsdWdpbnMucGFydGljbGUgKTtcbiAgICByZW5kZXJlci5wbHVnaW5zLnBhcnRpY2xlLnJlbmRlciggdGhpcyApO1xufTtcblxuLyoqXG4gKiBTZXQgdGhlIGZsYWcgdGhhdCBzdGF0aWMgZGF0YSBzaG91bGQgYmUgdXBkYXRlZCB0byB0cnVlXG4gKlxuICogQHByaXZhdGVcbiAqL1xuUGFydGljbGVDb250YWluZXIucHJvdG90eXBlLm9uQ2hpbGRyZW5DaGFuZ2UgPSBmdW5jdGlvbiAoc21hbGxlc3RDaGlsZEluZGV4KVxue1xuICAgIHZhciBidWZmZXJJbmRleCA9IE1hdGguZmxvb3Ioc21hbGxlc3RDaGlsZEluZGV4IC8gdGhpcy5fYmF0Y2hTaXplKTtcbiAgICBpZiAoYnVmZmVySW5kZXggPCB0aGlzLl9idWZmZXJUb1VwZGF0ZSkge1xuICAgICAgICB0aGlzLl9idWZmZXJUb1VwZGF0ZSA9IGJ1ZmZlckluZGV4O1xuICAgIH1cbn07XG5cbi8qKlxuICogUmVuZGVycyB0aGUgb2JqZWN0IHVzaW5nIHRoZSBDYW52YXMgcmVuZGVyZXJcbiAqXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuQ2FudmFzUmVuZGVyZXJ9IFRoZSBjYW52YXMgcmVuZGVyZXJcbiAqIEBwcml2YXRlXG4gKi9cblBhcnRpY2xlQ29udGFpbmVyLnByb3RvdHlwZS5yZW5kZXJDYW52YXMgPSBmdW5jdGlvbiAocmVuZGVyZXIpXG57XG4gICAgaWYgKCF0aGlzLnZpc2libGUgfHwgdGhpcy53b3JsZEFscGhhIDw9IDAgfHwgIXRoaXMuY2hpbGRyZW4ubGVuZ3RoIHx8ICF0aGlzLnJlbmRlcmFibGUpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFyIGNvbnRleHQgPSByZW5kZXJlci5jb250ZXh0O1xuICAgIHZhciB0cmFuc2Zvcm0gPSB0aGlzLndvcmxkVHJhbnNmb3JtO1xuICAgIHZhciBpc1JvdGF0ZWQgPSB0cnVlO1xuXG4gICAgdmFyIHBvc2l0aW9uWCA9IDA7XG4gICAgdmFyIHBvc2l0aW9uWSA9IDA7XG5cbiAgICB2YXIgZmluYWxXaWR0aCA9IDA7XG4gICAgdmFyIGZpbmFsSGVpZ2h0ID0gMDtcblxuICAgIHZhciBjb21wb3NpdGVPcGVyYXRpb24gPSByZW5kZXJlci5ibGVuZE1vZGVzW3RoaXMuYmxlbmRNb2RlXTtcbiAgICBpZiAoY29tcG9zaXRlT3BlcmF0aW9uICE9PSBjb250ZXh0Lmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbilcbiAgICB7XG4gICAgICAgIGNvbnRleHQuZ2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uID0gY29tcG9zaXRlT3BlcmF0aW9uO1xuICAgIH1cblxuICAgIGNvbnRleHQuZ2xvYmFsQWxwaGEgPSB0aGlzLndvcmxkQWxwaGE7XG5cbiAgICB0aGlzLmRpc3BsYXlPYmplY3RVcGRhdGVUcmFuc2Zvcm0oKTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5jaGlsZHJlbi5sZW5ndGg7ICsraSlcbiAgICB7XG4gICAgICAgIHZhciBjaGlsZCA9IHRoaXMuY2hpbGRyZW5baV07XG5cbiAgICAgICAgaWYgKCFjaGlsZC52aXNpYmxlKVxuICAgICAgICB7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBmcmFtZSA9IGNoaWxkLnRleHR1cmUuZnJhbWU7XG5cbiAgICAgICAgY29udGV4dC5nbG9iYWxBbHBoYSA9IHRoaXMud29ybGRBbHBoYSAqIGNoaWxkLmFscGhhO1xuXG4gICAgICAgIGlmIChjaGlsZC5yb3RhdGlvbiAlIChNYXRoLlBJICogMikgPT09IDApXG4gICAgICAgIHtcbiAgICAgICAgICAgIC8vIHRoaXMgaXMgdGhlIGZhc3Rlc3QgIHdheSB0byBvcHRpbWlzZSEgLSBpZiByb3RhdGlvbiBpcyAwIHRoZW4gd2UgY2FuIGF2b2lkIGFueSBraW5kIG9mIHNldFRyYW5zZm9ybSBjYWxsXG4gICAgICAgICAgICBpZiAoaXNSb3RhdGVkKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGNvbnRleHQuc2V0VHJhbnNmb3JtKFxuICAgICAgICAgICAgICAgICAgICB0cmFuc2Zvcm0uYSxcbiAgICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtLmIsXG4gICAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybS5jLFxuICAgICAgICAgICAgICAgICAgICB0cmFuc2Zvcm0uZCxcbiAgICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtLnR4LFxuICAgICAgICAgICAgICAgICAgICB0cmFuc2Zvcm0udHlcbiAgICAgICAgICAgICAgICApO1xuXG4gICAgICAgICAgICAgICAgaXNSb3RhdGVkID0gZmFsc2U7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHBvc2l0aW9uWCA9ICgoY2hpbGQuYW5jaG9yLngpICogKC1mcmFtZS53aWR0aCAqIGNoaWxkLnNjYWxlLngpICsgY2hpbGQucG9zaXRpb24ueCAgKyAwLjUpO1xuICAgICAgICAgICAgcG9zaXRpb25ZID0gKChjaGlsZC5hbmNob3IueSkgKiAoLWZyYW1lLmhlaWdodCAqIGNoaWxkLnNjYWxlLnkpICsgY2hpbGQucG9zaXRpb24ueSAgKyAwLjUpO1xuXG4gICAgICAgICAgICBmaW5hbFdpZHRoID0gZnJhbWUud2lkdGggKiBjaGlsZC5zY2FsZS54O1xuICAgICAgICAgICAgZmluYWxIZWlnaHQgPSBmcmFtZS5oZWlnaHQgKiBjaGlsZC5zY2FsZS55O1xuXG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgICBpZiAoIWlzUm90YXRlZClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBpc1JvdGF0ZWQgPSB0cnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjaGlsZC5kaXNwbGF5T2JqZWN0VXBkYXRlVHJhbnNmb3JtKCk7XG5cbiAgICAgICAgICAgIHZhciBjaGlsZFRyYW5zZm9ybSA9IGNoaWxkLndvcmxkVHJhbnNmb3JtO1xuXG4gICAgICAgICAgICBpZiAocmVuZGVyZXIucm91bmRQaXhlbHMpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29udGV4dC5zZXRUcmFuc2Zvcm0oXG4gICAgICAgICAgICAgICAgICAgIGNoaWxkVHJhbnNmb3JtLmEsXG4gICAgICAgICAgICAgICAgICAgIGNoaWxkVHJhbnNmb3JtLmIsXG4gICAgICAgICAgICAgICAgICAgIGNoaWxkVHJhbnNmb3JtLmMsXG4gICAgICAgICAgICAgICAgICAgIGNoaWxkVHJhbnNmb3JtLmQsXG4gICAgICAgICAgICAgICAgICAgIGNoaWxkVHJhbnNmb3JtLnR4IHwgMCxcbiAgICAgICAgICAgICAgICAgICAgY2hpbGRUcmFuc2Zvcm0udHkgfCAwXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb250ZXh0LnNldFRyYW5zZm9ybShcbiAgICAgICAgICAgICAgICAgICAgY2hpbGRUcmFuc2Zvcm0uYSxcbiAgICAgICAgICAgICAgICAgICAgY2hpbGRUcmFuc2Zvcm0uYixcbiAgICAgICAgICAgICAgICAgICAgY2hpbGRUcmFuc2Zvcm0uYyxcbiAgICAgICAgICAgICAgICAgICAgY2hpbGRUcmFuc2Zvcm0uZCxcbiAgICAgICAgICAgICAgICAgICAgY2hpbGRUcmFuc2Zvcm0udHgsXG4gICAgICAgICAgICAgICAgICAgIGNoaWxkVHJhbnNmb3JtLnR5XG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcG9zaXRpb25YID0gKChjaGlsZC5hbmNob3IueCkgKiAoLWZyYW1lLndpZHRoKSArIDAuNSk7XG4gICAgICAgICAgICBwb3NpdGlvblkgPSAoKGNoaWxkLmFuY2hvci55KSAqICgtZnJhbWUuaGVpZ2h0KSArIDAuNSk7XG5cbiAgICAgICAgICAgIGZpbmFsV2lkdGggPSBmcmFtZS53aWR0aDtcbiAgICAgICAgICAgIGZpbmFsSGVpZ2h0ID0gZnJhbWUuaGVpZ2h0O1xuICAgICAgICB9XG5cbiAgICAgICAgY29udGV4dC5kcmF3SW1hZ2UoXG4gICAgICAgICAgICBjaGlsZC50ZXh0dXJlLmJhc2VUZXh0dXJlLnNvdXJjZSxcbiAgICAgICAgICAgIGZyYW1lLngsXG4gICAgICAgICAgICBmcmFtZS55LFxuICAgICAgICAgICAgZnJhbWUud2lkdGgsXG4gICAgICAgICAgICBmcmFtZS5oZWlnaHQsXG4gICAgICAgICAgICBwb3NpdGlvblgsXG4gICAgICAgICAgICBwb3NpdGlvblksXG4gICAgICAgICAgICBmaW5hbFdpZHRoLFxuICAgICAgICAgICAgZmluYWxIZWlnaHRcbiAgICAgICAgKTtcbiAgICB9XG59O1xuXG4vKipcbiAqIERlc3Ryb3lzIHRoZSBjb250YWluZXJcbiAqXG4gKiBAcGFyYW0gW2Rlc3Ryb3lDaGlsZHJlbj1mYWxzZV0ge2Jvb2xlYW59IGlmIHNldCB0byB0cnVlLCBhbGwgdGhlIGNoaWxkcmVuIHdpbGwgaGF2ZSB0aGVpciBkZXN0cm95IG1ldGhvZCBjYWxsZWQgYXMgd2VsbFxuICovXG5QYXJ0aWNsZUNvbnRhaW5lci5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uICgpIHtcbiAgICBDb250YWluZXIucHJvdG90eXBlLmRlc3Ryb3kuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcblxuICAgIGlmICh0aGlzLl9idWZmZXJzKSB7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5fYnVmZmVycy5sZW5ndGg7ICsraSkge1xuICAgICAgICAgICAgdGhpcy5fYnVmZmVyc1tpXS5kZXN0cm95KCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLl9wcm9wZXJ0aWVzID0gbnVsbDtcbiAgICB0aGlzLl9idWZmZXJzID0gbnVsbDtcbn07XG4iLCJcbi8qKlxuICogQGF1dGhvciBNYXQgR3JvdmVzXG4gKlxuICogQmlnIHRoYW5rcyB0byB0aGUgdmVyeSBjbGV2ZXIgTWF0dCBEZXNMYXVyaWVycyA8bWF0dGRlc2w+IGh0dHBzOi8vZ2l0aHViLmNvbS9tYXR0ZGVzbC9cbiAqIGZvciBjcmVhdGluZyB0aGUgb3JpZ2luYWwgcGl4aSB2ZXJzaW9uIVxuICogQWxzbyBhIHRoYW5rcyB0byBodHRwczovL2dpdGh1Yi5jb20vYmNoZXZhbGllciBmb3IgdHdlYWtpbmcgdGhlIHRpbnQgYW5kIGFscGhhIHNvIHRoYXQgdGhleSBub3cgc2hhcmUgNCBieXRlcyBvbiB0aGUgdmVydGV4IGJ1ZmZlclxuICpcbiAqIEhlYXZpbHkgaW5zcGlyZWQgYnkgTGliR0RYJ3MgUGFydGljbGVCdWZmZXI6XG4gKiBodHRwczovL2dpdGh1Yi5jb20vbGliZ2R4L2xpYmdkeC9ibG9iL21hc3Rlci9nZHgvc3JjL2NvbS9iYWRsb2dpYy9nZHgvZ3JhcGhpY3MvZzJkL1BhcnRpY2xlQnVmZmVyLmphdmFcbiAqL1xuXG4vKipcbiAqIFRoZSBwYXJ0aWNsZSBidWZmZXIgbWFuYWdlcyB0aGUgc3RhdGljIGFuZCBkeW5hbWljIGJ1ZmZlcnMgZm9yIGEgcGFydGljbGUgY29udGFpbmVyLlxuICpcbiAqIEBjbGFzc1xuICogQHByaXZhdGVcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKi9cbmZ1bmN0aW9uIFBhcnRpY2xlQnVmZmVyKGdsLCBwcm9wZXJ0aWVzLCBkeW5hbWljUHJvcGVydHlGbGFncywgc2l6ZSlcbntcbiAgICAvKipcbiAgICAgKiBUaGUgY3VycmVudCBXZWJHTCBkcmF3aW5nIGNvbnRleHQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtXZWJHTFJlbmRlcmluZ0NvbnRleHR9XG4gICAgICovXG4gICAgdGhpcy5nbCA9IGdsO1xuXG4gICAgLyoqXG4gICAgICogU2l6ZSBvZiBhIHNpbmdsZSB2ZXJ0ZXguXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy52ZXJ0U2l6ZSA9IDI7XG5cbiAgICAvKipcbiAgICAgKiBTaXplIG9mIGEgc2luZ2xlIHZlcnRleCBpbiBieXRlcy5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLnZlcnRCeXRlU2l6ZSA9IHRoaXMudmVydFNpemUgKiA0O1xuXG4gICAgLyoqXG4gICAgICogVGhlIG51bWJlciBvZiBwYXJ0aWNsZXMgdGhlIGJ1ZmZlciBjYW4gaG9sZFxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMuc2l6ZSA9IHNpemU7XG5cbiAgICAvKipcbiAgICAgKiBBIGxpc3Qgb2YgdGhlIHByb3BlcnRpZXMgdGhhdCBhcmUgZHluYW1pYy5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge29iamVjdFtdfVxuICAgICAqL1xuICAgIHRoaXMuZHluYW1pY1Byb3BlcnRpZXMgPSBbXTtcblxuICAgIC8qKlxuICAgICAqIEEgbGlzdCBvZiB0aGUgcHJvcGVydGllcyB0aGF0IGFyZSBzdGF0aWMuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtvYmplY3RbXX1cbiAgICAgKi9cbiAgICB0aGlzLnN0YXRpY1Byb3BlcnRpZXMgPSBbXTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcGVydGllcy5sZW5ndGg7IGkrKylcbiAgICB7XG4gICAgICAgIHZhciBwcm9wZXJ0eSA9IHByb3BlcnRpZXNbaV07XG5cbiAgICAgICAgaWYoZHluYW1pY1Byb3BlcnR5RmxhZ3NbaV0pXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuZHluYW1pY1Byb3BlcnRpZXMucHVzaChwcm9wZXJ0eSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnN0YXRpY1Byb3BlcnRpZXMucHVzaChwcm9wZXJ0eSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLnN0YXRpY1N0cmlkZSA9IDA7XG4gICAgdGhpcy5zdGF0aWNCdWZmZXIgPSBudWxsO1xuICAgIHRoaXMuc3RhdGljRGF0YSA9IG51bGw7XG5cbiAgICB0aGlzLmR5bmFtaWNTdHJpZGUgPSAwO1xuICAgIHRoaXMuZHluYW1pY0J1ZmZlciA9IG51bGw7XG4gICAgdGhpcy5keW5hbWljRGF0YSA9IG51bGw7XG5cbiAgICB0aGlzLmluaXRCdWZmZXJzKCk7XG5cbn1cblxuUGFydGljbGVCdWZmZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gUGFydGljbGVCdWZmZXI7XG5tb2R1bGUuZXhwb3J0cyA9IFBhcnRpY2xlQnVmZmVyO1xuXG4vKipcbiAqIFNldHMgdXAgdGhlIHJlbmRlcmVyIGNvbnRleHQgYW5kIG5lY2Vzc2FyeSBidWZmZXJzLlxuICpcbiAqIEBwcml2YXRlXG4gKi9cblBhcnRpY2xlQnVmZmVyLnByb3RvdHlwZS5pbml0QnVmZmVycyA9IGZ1bmN0aW9uICgpXG57XG4gICAgdmFyIGdsID0gdGhpcy5nbDtcbiAgICB2YXIgaTtcbiAgICB2YXIgcHJvcGVydHk7XG5cbiAgICB2YXIgZHluYW1pY09mZnNldCA9IDA7XG4gICAgdGhpcy5keW5hbWljU3RyaWRlID0gMDtcblxuICAgIGZvciAoaSA9IDA7IGkgPCB0aGlzLmR5bmFtaWNQcm9wZXJ0aWVzLmxlbmd0aDsgaSsrKVxuICAgIHtcbiAgICAgICAgcHJvcGVydHkgPSB0aGlzLmR5bmFtaWNQcm9wZXJ0aWVzW2ldO1xuXG4gICAgICAgIHByb3BlcnR5Lm9mZnNldCA9IGR5bmFtaWNPZmZzZXQ7XG4gICAgICAgIGR5bmFtaWNPZmZzZXQgKz0gcHJvcGVydHkuc2l6ZTtcbiAgICAgICAgdGhpcy5keW5hbWljU3RyaWRlICs9IHByb3BlcnR5LnNpemU7XG4gICAgfVxuXG4gICAgdGhpcy5keW5hbWljRGF0YSA9IG5ldyBGbG9hdDMyQXJyYXkoIHRoaXMuc2l6ZSAqIHRoaXMuZHluYW1pY1N0cmlkZSAqIDQpO1xuICAgIHRoaXMuZHluYW1pY0J1ZmZlciA9IGdsLmNyZWF0ZUJ1ZmZlcigpO1xuXG4gICAgZ2wuYmluZEJ1ZmZlcihnbC5BUlJBWV9CVUZGRVIsIHRoaXMuZHluYW1pY0J1ZmZlcik7XG4gICAgZ2wuYnVmZmVyRGF0YShnbC5BUlJBWV9CVUZGRVIsIHRoaXMuZHluYW1pY0RhdGEsIGdsLkRZTkFNSUNfRFJBVyk7XG5cblxuICAgIC8vIHN0YXRpYyAvL1xuICAgIHZhciBzdGF0aWNPZmZzZXQgPSAwO1xuICAgIHRoaXMuc3RhdGljU3RyaWRlID0gMDtcblxuICAgIGZvciAoaSA9IDA7IGkgPCB0aGlzLnN0YXRpY1Byb3BlcnRpZXMubGVuZ3RoOyBpKyspXG4gICAge1xuICAgICAgICBwcm9wZXJ0eSA9IHRoaXMuc3RhdGljUHJvcGVydGllc1tpXTtcblxuICAgICAgICBwcm9wZXJ0eS5vZmZzZXQgPSBzdGF0aWNPZmZzZXQ7XG4gICAgICAgIHN0YXRpY09mZnNldCArPSBwcm9wZXJ0eS5zaXplO1xuICAgICAgICB0aGlzLnN0YXRpY1N0cmlkZSArPSBwcm9wZXJ0eS5zaXplO1xuICAgIH1cblxuICAgIHRoaXMuc3RhdGljRGF0YSA9IG5ldyBGbG9hdDMyQXJyYXkoIHRoaXMuc2l6ZSAqIHRoaXMuc3RhdGljU3RyaWRlICogNCk7XG4gICAgdGhpcy5zdGF0aWNCdWZmZXIgPSBnbC5jcmVhdGVCdWZmZXIoKTtcblxuICAgIGdsLmJpbmRCdWZmZXIoZ2wuQVJSQVlfQlVGRkVSLCB0aGlzLnN0YXRpY0J1ZmZlcik7XG4gICAgZ2wuYnVmZmVyRGF0YShnbC5BUlJBWV9CVUZGRVIsIHRoaXMuc3RhdGljRGF0YSwgZ2wuRFlOQU1JQ19EUkFXKTtcbn07XG5cbi8qKlxuICogVXBsb2FkcyB0aGUgZHluYW1pYyBwcm9wZXJ0aWVzLlxuICpcbiAqL1xuUGFydGljbGVCdWZmZXIucHJvdG90eXBlLnVwbG9hZER5bmFtaWMgPSBmdW5jdGlvbihjaGlsZHJlbiwgc3RhcnRJbmRleCwgYW1vdW50KVxue1xuICAgIHZhciBnbCA9IHRoaXMuZ2w7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuZHluYW1pY1Byb3BlcnRpZXMubGVuZ3RoOyBpKyspXG4gICAge1xuICAgICAgICB2YXIgcHJvcGVydHkgPSB0aGlzLmR5bmFtaWNQcm9wZXJ0aWVzW2ldO1xuICAgICAgICBwcm9wZXJ0eS51cGxvYWRGdW5jdGlvbihjaGlsZHJlbiwgc3RhcnRJbmRleCwgYW1vdW50LCB0aGlzLmR5bmFtaWNEYXRhLCB0aGlzLmR5bmFtaWNTdHJpZGUsIHByb3BlcnR5Lm9mZnNldCk7XG4gICAgfVxuXG4gICAgZ2wuYmluZEJ1ZmZlcihnbC5BUlJBWV9CVUZGRVIsIHRoaXMuZHluYW1pY0J1ZmZlcik7XG4gICAgZ2wuYnVmZmVyU3ViRGF0YShnbC5BUlJBWV9CVUZGRVIsIDAsIHRoaXMuZHluYW1pY0RhdGEpO1xufTtcblxuLyoqXG4gKiBVcGxvYWRzIHRoZSBzdGF0aWMgcHJvcGVydGllcy5cbiAqXG4gKi9cblBhcnRpY2xlQnVmZmVyLnByb3RvdHlwZS51cGxvYWRTdGF0aWMgPSBmdW5jdGlvbihjaGlsZHJlbiwgc3RhcnRJbmRleCwgYW1vdW50KVxue1xuICAgIHZhciBnbCA9IHRoaXMuZ2w7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuc3RhdGljUHJvcGVydGllcy5sZW5ndGg7IGkrKylcbiAgICB7XG4gICAgICAgIHZhciBwcm9wZXJ0eSA9IHRoaXMuc3RhdGljUHJvcGVydGllc1tpXTtcbiAgICAgICAgcHJvcGVydHkudXBsb2FkRnVuY3Rpb24oY2hpbGRyZW4sIHN0YXJ0SW5kZXgsIGFtb3VudCwgdGhpcy5zdGF0aWNEYXRhLCB0aGlzLnN0YXRpY1N0cmlkZSwgcHJvcGVydHkub2Zmc2V0KTtcbiAgICB9XG5cbiAgICBnbC5iaW5kQnVmZmVyKGdsLkFSUkFZX0JVRkZFUiwgdGhpcy5zdGF0aWNCdWZmZXIpO1xuICAgIGdsLmJ1ZmZlclN1YkRhdGEoZ2wuQVJSQVlfQlVGRkVSLCAwLCB0aGlzLnN0YXRpY0RhdGEpO1xufTtcblxuLyoqXG4gKiBCaW5kcyB0aGUgYnVmZmVycyB0byB0aGUgR1BVXG4gKlxuICovXG5QYXJ0aWNsZUJ1ZmZlci5wcm90b3R5cGUuYmluZCA9IGZ1bmN0aW9uICgpXG57XG4gICAgdmFyIGdsID0gdGhpcy5nbDtcbiAgICB2YXIgaSwgcHJvcGVydHk7XG5cbiAgICBnbC5iaW5kQnVmZmVyKGdsLkFSUkFZX0JVRkZFUiwgdGhpcy5keW5hbWljQnVmZmVyKTtcblxuICAgIGZvciAoaSA9IDA7IGkgPCB0aGlzLmR5bmFtaWNQcm9wZXJ0aWVzLmxlbmd0aDsgaSsrKVxuICAgIHtcbiAgICAgICAgcHJvcGVydHkgPSB0aGlzLmR5bmFtaWNQcm9wZXJ0aWVzW2ldO1xuICAgICAgICBnbC52ZXJ0ZXhBdHRyaWJQb2ludGVyKHByb3BlcnR5LmF0dHJpYnV0ZSwgcHJvcGVydHkuc2l6ZSwgZ2wuRkxPQVQsIGZhbHNlLCB0aGlzLmR5bmFtaWNTdHJpZGUgKiA0LCBwcm9wZXJ0eS5vZmZzZXQgKiA0KTtcbiAgICB9XG5cbiAgICBnbC5iaW5kQnVmZmVyKGdsLkFSUkFZX0JVRkZFUiwgdGhpcy5zdGF0aWNCdWZmZXIpO1xuXG4gICAgZm9yIChpID0gMDsgaSA8IHRoaXMuc3RhdGljUHJvcGVydGllcy5sZW5ndGg7IGkrKylcbiAgICB7XG4gICAgICAgIHByb3BlcnR5ID0gdGhpcy5zdGF0aWNQcm9wZXJ0aWVzW2ldO1xuICAgICAgICBnbC52ZXJ0ZXhBdHRyaWJQb2ludGVyKHByb3BlcnR5LmF0dHJpYnV0ZSwgcHJvcGVydHkuc2l6ZSwgZ2wuRkxPQVQsIGZhbHNlLCB0aGlzLnN0YXRpY1N0cmlkZSAqIDQsIHByb3BlcnR5Lm9mZnNldCAqIDQpO1xuICAgIH1cbn07XG5cbi8qKlxuICogRGVzdHJveXMgdGhlIFBhcnRpY2xlQnVmZmVyLlxuICpcbiAqL1xuUGFydGljbGVCdWZmZXIucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoKVxue1xuICAgIHRoaXMuZHluYW1pY1Byb3BlcnRpZXMgPSBudWxsO1xuICAgIHRoaXMuZHluYW1pY0RhdGEgPSBudWxsO1xuICAgIHRoaXMuZ2wuZGVsZXRlQnVmZmVyKHRoaXMuZHluYW1pY0J1ZmZlcik7XG5cbiAgICB0aGlzLnN0YXRpY1Byb3BlcnRpZXMgPSBudWxsO1xuICAgIHRoaXMuc3RhdGljRGF0YSA9IG51bGw7XG4gICAgdGhpcy5nbC5kZWxldGVCdWZmZXIodGhpcy5zdGF0aWNCdWZmZXIpO1xufTtcbiIsInZhciBPYmplY3RSZW5kZXJlciA9IHJlcXVpcmUoJy4uLy4uL3JlbmRlcmVycy93ZWJnbC91dGlscy9PYmplY3RSZW5kZXJlcicpLFxuICAgIFdlYkdMUmVuZGVyZXIgPSByZXF1aXJlKCcuLi8uLi9yZW5kZXJlcnMvd2ViZ2wvV2ViR0xSZW5kZXJlcicpLFxuICAgIFBhcnRpY2xlU2hhZGVyID0gcmVxdWlyZSgnLi9QYXJ0aWNsZVNoYWRlcicpLFxuICAgIFBhcnRpY2xlQnVmZmVyID0gcmVxdWlyZSgnLi9QYXJ0aWNsZUJ1ZmZlcicpLFxuICAgIG1hdGggICAgICAgICAgICA9IHJlcXVpcmUoJy4uLy4uL21hdGgnKTtcblxuLyoqXG4gKiBAYXV0aG9yIE1hdCBHcm92ZXNcbiAqXG4gKiBCaWcgdGhhbmtzIHRvIHRoZSB2ZXJ5IGNsZXZlciBNYXR0IERlc0xhdXJpZXJzIDxtYXR0ZGVzbD4gaHR0cHM6Ly9naXRodWIuY29tL21hdHRkZXNsL1xuICogZm9yIGNyZWF0aW5nIHRoZSBvcmlnaW5hbCBwaXhpIHZlcnNpb24hXG4gKiBBbHNvIGEgdGhhbmtzIHRvIGh0dHBzOi8vZ2l0aHViLmNvbS9iY2hldmFsaWVyIGZvciB0d2Vha2luZyB0aGUgdGludCBhbmQgYWxwaGEgc28gdGhhdCB0aGV5IG5vdyBzaGFyZSA0IGJ5dGVzIG9uIHRoZSB2ZXJ0ZXggYnVmZmVyXG4gKlxuICogSGVhdmlseSBpbnNwaXJlZCBieSBMaWJHRFgncyBQYXJ0aWNsZVJlbmRlcmVyOlxuICogaHR0cHM6Ly9naXRodWIuY29tL2xpYmdkeC9saWJnZHgvYmxvYi9tYXN0ZXIvZ2R4L3NyYy9jb20vYmFkbG9naWMvZ2R4L2dyYXBoaWNzL2cyZC9QYXJ0aWNsZVJlbmRlcmVyLmphdmFcbiAqL1xuXG4vKipcbiAqXG4gKiBAY2xhc3NcbiAqIEBwcml2YXRlXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLldlYkdMUmVuZGVyZXJ9IFRoZSByZW5kZXJlciB0aGlzIHNwcml0ZSBiYXRjaCB3b3JrcyBmb3IuXG4gKi9cbmZ1bmN0aW9uIFBhcnRpY2xlUmVuZGVyZXIocmVuZGVyZXIpXG57XG4gICAgT2JqZWN0UmVuZGVyZXIuY2FsbCh0aGlzLCByZW5kZXJlcik7XG5cbiAgICAvLyA2NTUzNSBpcyBtYXggdmVydGV4IGluZGV4IGluIHRoZSBpbmRleCBidWZmZXIgKHNlZSBQYXJ0aWNsZVJlbmRlcmVyKVxuICAgIC8vIHNvIG1heCBudW1iZXIgb2YgcGFydGljbGVzIGlzIDY1NTM2IC8gNCA9IDE2Mzg0XG4gICAgLy8gYW5kIG1heCBudW1iZXIgb2YgZWxlbWVudCBpbiB0aGUgaW5kZXggYnVmZmVyIGlzIDE2Mzg0ICogNiA9IDk4MzA0XG4gICAgLy8gQ3JlYXRpbmcgYSBmdWxsIGluZGV4IGJ1ZmZlciwgb3ZlcmhlYWQgaXMgOTgzMDQgKiAyID0gMTk2S29cbiAgICB2YXIgbnVtSW5kaWNlcyA9IDk4MzA0O1xuXG4gICAgLyoqXG4gICAgICogSG9sZHMgdGhlIGluZGljZXNcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1VpbnQxNkFycmF5fVxuICAgICAqL1xuICAgIHRoaXMuaW5kaWNlcyA9IG5ldyBVaW50MTZBcnJheShudW1JbmRpY2VzKTtcblxuICAgIGZvciAodmFyIGk9MCwgaj0wOyBpIDwgbnVtSW5kaWNlczsgaSArPSA2LCBqICs9IDQpXG4gICAge1xuICAgICAgICB0aGlzLmluZGljZXNbaSArIDBdID0gaiArIDA7XG4gICAgICAgIHRoaXMuaW5kaWNlc1tpICsgMV0gPSBqICsgMTtcbiAgICAgICAgdGhpcy5pbmRpY2VzW2kgKyAyXSA9IGogKyAyO1xuICAgICAgICB0aGlzLmluZGljZXNbaSArIDNdID0gaiArIDA7XG4gICAgICAgIHRoaXMuaW5kaWNlc1tpICsgNF0gPSBqICsgMjtcbiAgICAgICAgdGhpcy5pbmRpY2VzW2kgKyA1XSA9IGogKyAzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoZSBkZWZhdWx0IHNoYWRlciB0aGF0IGlzIHVzZWQgaWYgYSBzcHJpdGUgZG9lc24ndCBoYXZlIGEgbW9yZSBzcGVjaWZpYyBvbmUuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlNoYWRlcn1cbiAgICAgKi9cbiAgICB0aGlzLnNoYWRlciA9IG51bGw7XG5cbiAgICB0aGlzLmluZGV4QnVmZmVyID0gbnVsbDtcblxuICAgIHRoaXMucHJvcGVydGllcyA9IG51bGw7XG5cbiAgICB0aGlzLnRlbXBNYXRyaXggPSBuZXcgbWF0aC5NYXRyaXgoKTtcbn1cblxuUGFydGljbGVSZW5kZXJlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKE9iamVjdFJlbmRlcmVyLnByb3RvdHlwZSk7XG5QYXJ0aWNsZVJlbmRlcmVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFBhcnRpY2xlUmVuZGVyZXI7XG5tb2R1bGUuZXhwb3J0cyA9IFBhcnRpY2xlUmVuZGVyZXI7XG5cbldlYkdMUmVuZGVyZXIucmVnaXN0ZXJQbHVnaW4oJ3BhcnRpY2xlJywgUGFydGljbGVSZW5kZXJlcik7XG5cbi8qKlxuICogV2hlbiB0aGVyZSBpcyBhIFdlYkdMIGNvbnRleHQgY2hhbmdlXG4gKlxuICogQHByaXZhdGVcbiAqL1xuUGFydGljbGVSZW5kZXJlci5wcm90b3R5cGUub25Db250ZXh0Q2hhbmdlID0gZnVuY3Rpb24gKClcbntcbiAgICB2YXIgZ2wgPSB0aGlzLnJlbmRlcmVyLmdsO1xuXG4gICAgLy8gc2V0dXAgZGVmYXVsdCBzaGFkZXJcbiAgICB0aGlzLnNoYWRlciA9IG5ldyBQYXJ0aWNsZVNoYWRlcih0aGlzLnJlbmRlcmVyLnNoYWRlck1hbmFnZXIpO1xuXG4gICAgdGhpcy5pbmRleEJ1ZmZlciA9IGdsLmNyZWF0ZUJ1ZmZlcigpO1xuXG4gICAgLy8gNjU1MzUgaXMgbWF4IGluZGV4LCBzbyA2NTUzNSAvIDYgPSAxMDkyMi5cblxuICAgIC8vdXBsb2FkIHRoZSBpbmRleCBkYXRhXG4gICAgZ2wuYmluZEJ1ZmZlcihnbC5FTEVNRU5UX0FSUkFZX0JVRkZFUiwgdGhpcy5pbmRleEJ1ZmZlcik7XG4gICAgZ2wuYnVmZmVyRGF0YShnbC5FTEVNRU5UX0FSUkFZX0JVRkZFUiwgdGhpcy5pbmRpY2VzLCBnbC5TVEFUSUNfRFJBVyk7XG5cbiAgICB0aGlzLnByb3BlcnRpZXMgPSBbXG4gICAgICAgIC8vIHZlcnRpY2VzRGF0YVxuICAgICAgICB7XG4gICAgICAgICAgICBhdHRyaWJ1dGU6dGhpcy5zaGFkZXIuYXR0cmlidXRlcy5hVmVydGV4UG9zaXRpb24sXG4gICAgICAgICAgICBzaXplOjIsXG4gICAgICAgICAgICB1cGxvYWRGdW5jdGlvbjp0aGlzLnVwbG9hZFZlcnRpY2VzLFxuICAgICAgICAgICAgb2Zmc2V0OjBcbiAgICAgICAgfSxcbiAgICAgICAgLy8gcG9zaXRpb25EYXRhXG4gICAgICAgIHtcbiAgICAgICAgICAgIGF0dHJpYnV0ZTp0aGlzLnNoYWRlci5hdHRyaWJ1dGVzLmFQb3NpdGlvbkNvb3JkLFxuICAgICAgICAgICAgc2l6ZToyLFxuICAgICAgICAgICAgdXBsb2FkRnVuY3Rpb246dGhpcy51cGxvYWRQb3NpdGlvbixcbiAgICAgICAgICAgIG9mZnNldDowXG4gICAgICAgIH0sXG4gICAgICAgIC8vIHJvdGF0aW9uRGF0YVxuICAgICAgICB7XG4gICAgICAgICAgICBhdHRyaWJ1dGU6dGhpcy5zaGFkZXIuYXR0cmlidXRlcy5hUm90YXRpb24sXG4gICAgICAgICAgICBzaXplOjEsXG4gICAgICAgICAgICB1cGxvYWRGdW5jdGlvbjp0aGlzLnVwbG9hZFJvdGF0aW9uLFxuICAgICAgICAgICAgb2Zmc2V0OjBcbiAgICAgICAgfSxcbiAgICAgICAgLy8gdXZzRGF0YVxuICAgICAgICB7XG4gICAgICAgICAgICBhdHRyaWJ1dGU6dGhpcy5zaGFkZXIuYXR0cmlidXRlcy5hVGV4dHVyZUNvb3JkLFxuICAgICAgICAgICAgc2l6ZToyLFxuICAgICAgICAgICAgdXBsb2FkRnVuY3Rpb246dGhpcy51cGxvYWRVdnMsXG4gICAgICAgICAgICBvZmZzZXQ6MFxuICAgICAgICB9LFxuICAgICAgICAvLyBhbHBoYURhdGFcbiAgICAgICAge1xuICAgICAgICAgICAgYXR0cmlidXRlOnRoaXMuc2hhZGVyLmF0dHJpYnV0ZXMuYUNvbG9yLFxuICAgICAgICAgICAgc2l6ZToxLFxuICAgICAgICAgICAgdXBsb2FkRnVuY3Rpb246dGhpcy51cGxvYWRBbHBoYSxcbiAgICAgICAgICAgIG9mZnNldDowXG4gICAgICAgIH1cbiAgICBdO1xufTtcblxuLyoqXG4gKiBTdGFydHMgYSBuZXcgcGFydGljbGUgYmF0Y2guXG4gKlxuICovXG5QYXJ0aWNsZVJlbmRlcmVyLnByb3RvdHlwZS5zdGFydCA9IGZ1bmN0aW9uICgpXG57XG4gICAgdmFyIGdsID0gdGhpcy5yZW5kZXJlci5nbDtcblxuICAgIC8vIGJpbmQgdGhlIG1haW4gdGV4dHVyZVxuICAgIGdsLmFjdGl2ZVRleHR1cmUoZ2wuVEVYVFVSRTApO1xuXG4gICAgLy8gYmluZCB0aGUgYnVmZmVyc1xuXG4gICAgZ2wuYmluZEJ1ZmZlcihnbC5FTEVNRU5UX0FSUkFZX0JVRkZFUiwgdGhpcy5pbmRleEJ1ZmZlcik7XG5cbiAgICB2YXIgc2hhZGVyID0gdGhpcy5zaGFkZXI7XG5cbiAgICB0aGlzLnJlbmRlcmVyLnNoYWRlck1hbmFnZXIuc2V0U2hhZGVyKHNoYWRlcik7XG59O1xuXG5cbi8qKlxuICogUmVuZGVycyB0aGUgcGFydGljbGUgY29udGFpbmVyIG9iamVjdC5cbiAqXG4gKiBAcGFyYW0gY29udGFpbmVyIHtQSVhJLlBhcnRpY2xlQ29udGFpbmVyfSBUaGUgY29udGFpbmVyIHRvIHJlbmRlciB1c2luZyB0aGlzIFBhcnRpY2xlUmVuZGVyZXJcbiAqL1xuUGFydGljbGVSZW5kZXJlci5wcm90b3R5cGUucmVuZGVyID0gZnVuY3Rpb24gKGNvbnRhaW5lcilcbntcbiAgICB2YXIgY2hpbGRyZW4gPSBjb250YWluZXIuY2hpbGRyZW4sXG4gICAgICAgIHRvdGFsQ2hpbGRyZW4gPSBjaGlsZHJlbi5sZW5ndGgsXG4gICAgICAgIG1heFNpemUgPSBjb250YWluZXIuX21heFNpemUsXG4gICAgICAgIGJhdGNoU2l6ZSA9IGNvbnRhaW5lci5fYmF0Y2hTaXplO1xuXG4gICAgaWYodG90YWxDaGlsZHJlbiA9PT0gMClcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgZWxzZSBpZih0b3RhbENoaWxkcmVuID4gbWF4U2l6ZSlcbiAgICB7XG4gICAgICAgIHRvdGFsQ2hpbGRyZW4gPSBtYXhTaXplO1xuICAgIH1cblxuICAgIGlmKCFjb250YWluZXIuX2J1ZmZlcnMpXG4gICAge1xuICAgICAgICBjb250YWluZXIuX2J1ZmZlcnMgPSB0aGlzLmdlbmVyYXRlQnVmZmVycyggY29udGFpbmVyICk7XG4gICAgfVxuXG4gICAgLy8gaWYgdGhlIHV2cyBoYXZlIG5vdCB1cGRhdGVkIHRoZW4gbm8gcG9pbnQgcmVuZGVyaW5nIGp1c3QgeWV0IVxuICAgIHRoaXMucmVuZGVyZXIuYmxlbmRNb2RlTWFuYWdlci5zZXRCbGVuZE1vZGUoY29udGFpbmVyLmJsZW5kTW9kZSk7XG5cbiAgICB2YXIgZ2wgPSB0aGlzLnJlbmRlcmVyLmdsO1xuXG4gICAgdmFyIG0gPSAgY29udGFpbmVyLndvcmxkVHJhbnNmb3JtLmNvcHkoIHRoaXMudGVtcE1hdHJpeCApO1xuICAgIG0ucHJlcGVuZCggdGhpcy5yZW5kZXJlci5jdXJyZW50UmVuZGVyVGFyZ2V0LnByb2plY3Rpb25NYXRyaXggKTtcbiAgICBnbC51bmlmb3JtTWF0cml4M2Z2KHRoaXMuc2hhZGVyLnVuaWZvcm1zLnByb2plY3Rpb25NYXRyaXguX2xvY2F0aW9uLCBmYWxzZSwgbS50b0FycmF5KHRydWUpKTtcbiAgICBnbC51bmlmb3JtMWYodGhpcy5zaGFkZXIudW5pZm9ybXMudUFscGhhLl9sb2NhdGlvbiwgY29udGFpbmVyLndvcmxkQWxwaGEpO1xuXG5cbiAgICAvLyBtYWtlIHN1cmUgdGhlIHRleHR1cmUgaXMgYm91bmQuLlxuICAgIHZhciBiYXNlVGV4dHVyZSA9IGNoaWxkcmVuWzBdLl90ZXh0dXJlLmJhc2VUZXh0dXJlO1xuXG4gICAgaWYgKCFiYXNlVGV4dHVyZS5fZ2xUZXh0dXJlc1tnbC5pZF0pXG4gICAge1xuICAgICAgICAvLyBpZiB0aGUgdGV4dHVyZSBoYXMgbm90IHVwZGF0ZWQgdGhlbiBsZXRzIG5vdCB1cGxvYWQgYW55IHN0YXRpYyBwcm9wZXJ0aWVzXG4gICAgICAgIGlmKCF0aGlzLnJlbmRlcmVyLnVwZGF0ZVRleHR1cmUoYmFzZVRleHR1cmUpKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZighY29udGFpbmVyLl9wcm9wZXJ0aWVzWzBdIHx8ICFjb250YWluZXIuX3Byb3BlcnRpZXNbM10pXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNvbnRhaW5lci5fYnVmZmVyVG9VcGRhdGUgPSAwO1xuICAgICAgICB9XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIGdsLmJpbmRUZXh0dXJlKGdsLlRFWFRVUkVfMkQsIGJhc2VUZXh0dXJlLl9nbFRleHR1cmVzW2dsLmlkXSk7XG4gICAgfVxuXG4gICAgLy8gbm93IGxldHMgdXBsb2FkIGFuZCByZW5kZXIgdGhlIGJ1ZmZlcnMuLlxuICAgIGZvciAodmFyIGkgPSAwLCBqID0gMDsgaSA8IHRvdGFsQ2hpbGRyZW47IGkgKz0gYmF0Y2hTaXplLCBqICs9IDEpXG4gICAge1xuICAgICAgICB2YXIgYW1vdW50ID0gKCB0b3RhbENoaWxkcmVuIC0gaSk7XG4gICAgICAgIGlmKGFtb3VudCA+IGJhdGNoU2l6ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgYW1vdW50ID0gYmF0Y2hTaXplO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGJ1ZmZlciA9IGNvbnRhaW5lci5fYnVmZmVyc1tqXTtcblxuICAgICAgICAvLyB3ZSBhbHdheXMgdXBsb2FkIHRoZSBkeW5hbWljXG4gICAgICAgIGJ1ZmZlci51cGxvYWREeW5hbWljKGNoaWxkcmVuLCBpLCBhbW91bnQpO1xuXG4gICAgICAgIC8vIHdlIG9ubHkgdXBsb2FkIHRoZSBzdGF0aWMgY29udGVudCB3aGVuIHdlIGhhdmUgdG8hXG4gICAgICAgIGlmKGNvbnRhaW5lci5fYnVmZmVyVG9VcGRhdGUgPT09IGopXG4gICAgICAgIHtcbiAgICAgICAgICAgIGJ1ZmZlci51cGxvYWRTdGF0aWMoY2hpbGRyZW4sIGksIGFtb3VudCk7XG4gICAgICAgICAgICBjb250YWluZXIuX2J1ZmZlclRvVXBkYXRlID0gaiArIDE7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBiaW5kIHRoZSBidWZmZXJcbiAgICAgICAgYnVmZmVyLmJpbmQoIHRoaXMuc2hhZGVyICk7XG5cbiAgICAgICAgIC8vIG5vdyBkcmF3IHRob3NlIHN1Y2thcyFcbiAgICAgICAgZ2wuZHJhd0VsZW1lbnRzKGdsLlRSSUFOR0xFUywgYW1vdW50ICogNiwgZ2wuVU5TSUdORURfU0hPUlQsIDApO1xuICAgICAgICB0aGlzLnJlbmRlcmVyLmRyYXdDb3VudCsrO1xuICAgIH1cbn07XG5cbi8qKlxuICogQ3JlYXRlcyBvbmUgcGFydGljbGUgYnVmZmVyIGZvciBlYWNoIGNoaWxkIGluIHRoZSBjb250YWluZXIgd2Ugd2FudCB0byByZW5kZXIgYW5kIHVwZGF0ZXMgaW50ZXJuYWwgcHJvcGVydGllc1xuICpcbiAqIEBwYXJhbSBjb250YWluZXIge1BJWEkuUGFydGljbGVDb250YWluZXJ9IFRoZSBjb250YWluZXIgdG8gcmVuZGVyIHVzaW5nIHRoaXMgUGFydGljbGVSZW5kZXJlclxuICovXG5QYXJ0aWNsZVJlbmRlcmVyLnByb3RvdHlwZS5nZW5lcmF0ZUJ1ZmZlcnMgPSBmdW5jdGlvbiAoY29udGFpbmVyKVxue1xuICAgIHZhciBnbCA9IHRoaXMucmVuZGVyZXIuZ2wsXG4gICAgICAgIGJ1ZmZlcnMgPSBbXSxcbiAgICAgICAgc2l6ZSA9IGNvbnRhaW5lci5fbWF4U2l6ZSxcbiAgICAgICAgYmF0Y2hTaXplID0gY29udGFpbmVyLl9iYXRjaFNpemUsXG4gICAgICAgIGR5bmFtaWNQcm9wZXJ0eUZsYWdzID0gY29udGFpbmVyLl9wcm9wZXJ0aWVzLFxuICAgICAgICBpO1xuXG4gICAgZm9yIChpID0gMDsgaSA8IHNpemU7IGkgKz0gYmF0Y2hTaXplKVxuICAgIHtcbiAgICAgICAgYnVmZmVycy5wdXNoKG5ldyBQYXJ0aWNsZUJ1ZmZlcihnbCwgdGhpcy5wcm9wZXJ0aWVzLCBkeW5hbWljUHJvcGVydHlGbGFncywgYmF0Y2hTaXplKSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGJ1ZmZlcnM7XG59O1xuXG4vKipcbiAqIFVwbG9hZHMgdGhlIHZlcnRpY2llcy5cbiAqXG4gKiBAcGFyYW0gY2hpbGRyZW4ge1BJWEkuRGlzcGxheU9iamVjdFtdfSB0aGUgYXJyYXkgb2YgZGlzcGxheSBvYmplY3RzIHRvIHJlbmRlclxuICogQHBhcmFtIHN0YXJ0SW5kZXgge251bWJlcn0gdGhlIGluZGV4IHRvIHN0YXJ0IGZyb20gaW4gdGhlIGNoaWxkcmVuIGFycmF5XG4gKiBAcGFyYW0gYW1vdW50IHtudW1iZXJ9IHRoZSBhbW91bnQgb2YgY2hpbGRyZW4gdGhhdCB3aWxsIGhhdmUgdGhlaXIgdmVydGljZXMgdXBsb2FkZWRcbiAqIEBwYXJhbSBhcnJheSB7bnVtYmVyW119XG4gKiBAcGFyYW0gc3RyaWRlIHtudW1iZXJ9XG4gKiBAcGFyYW0gb2Zmc2V0IHtudW1iZXJ9XG4gKi9cblBhcnRpY2xlUmVuZGVyZXIucHJvdG90eXBlLnVwbG9hZFZlcnRpY2VzID0gZnVuY3Rpb24gKGNoaWxkcmVuLCBzdGFydEluZGV4LCBhbW91bnQsIGFycmF5LCBzdHJpZGUsIG9mZnNldClcbntcbiAgICB2YXIgc3ByaXRlLFxuICAgICAgICB0ZXh0dXJlLFxuICAgICAgICB0cmltLFxuICAgICAgICBzeCxcbiAgICAgICAgc3ksXG4gICAgICAgIHcwLCB3MSwgaDAsIGgxO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhbW91bnQ7IGkrKykge1xuXG4gICAgICAgIHNwcml0ZSA9IGNoaWxkcmVuW3N0YXJ0SW5kZXggKyBpXTtcbiAgICAgICAgdGV4dHVyZSA9IHNwcml0ZS5fdGV4dHVyZTtcbiAgICAgICAgc3ggPSBzcHJpdGUuc2NhbGUueDtcbiAgICAgICAgc3kgPSBzcHJpdGUuc2NhbGUueTtcblxuICAgICAgICBpZiAodGV4dHVyZS50cmltKVxuICAgICAgICB7XG4gICAgICAgICAgICAvLyBpZiB0aGUgc3ByaXRlIGlzIHRyaW1tZWQgdGhlbiB3ZSBuZWVkIHRvIGFkZCB0aGUgZXh0cmEgc3BhY2UgYmVmb3JlIHRyYW5zZm9ybWluZyB0aGUgc3ByaXRlIGNvb3Jkcy4uXG4gICAgICAgICAgICB0cmltID0gdGV4dHVyZS50cmltO1xuXG4gICAgICAgICAgICB3MSA9IHRyaW0ueCAtIHNwcml0ZS5hbmNob3IueCAqIHRyaW0ud2lkdGg7XG4gICAgICAgICAgICB3MCA9IHcxICsgdGV4dHVyZS5jcm9wLndpZHRoO1xuXG4gICAgICAgICAgICBoMSA9IHRyaW0ueSAtIHNwcml0ZS5hbmNob3IueSAqIHRyaW0uaGVpZ2h0O1xuICAgICAgICAgICAgaDAgPSBoMSArIHRleHR1cmUuY3JvcC5oZWlnaHQ7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgICB3MCA9ICh0ZXh0dXJlLl9mcmFtZS53aWR0aCApICogKDEtc3ByaXRlLmFuY2hvci54KTtcbiAgICAgICAgICAgIHcxID0gKHRleHR1cmUuX2ZyYW1lLndpZHRoICkgKiAtc3ByaXRlLmFuY2hvci54O1xuXG4gICAgICAgICAgICBoMCA9IHRleHR1cmUuX2ZyYW1lLmhlaWdodCAqICgxLXNwcml0ZS5hbmNob3IueSk7XG4gICAgICAgICAgICBoMSA9IHRleHR1cmUuX2ZyYW1lLmhlaWdodCAqIC1zcHJpdGUuYW5jaG9yLnk7XG4gICAgICAgIH1cblxuICAgICAgICBhcnJheVtvZmZzZXRdID0gdzEgKiBzeDtcbiAgICAgICAgYXJyYXlbb2Zmc2V0ICsgMV0gPSBoMSAqIHN5O1xuXG4gICAgICAgIGFycmF5W29mZnNldCArIHN0cmlkZV0gPSB3MCAqIHN4O1xuICAgICAgICBhcnJheVtvZmZzZXQgKyBzdHJpZGUgKyAxXSA9IGgxICogc3k7XG5cbiAgICAgICAgYXJyYXlbb2Zmc2V0ICsgc3RyaWRlICogMl0gPSB3MCAqIHN4O1xuICAgICAgICBhcnJheVtvZmZzZXQgKyBzdHJpZGUgKiAyICsgMV0gPSBoMCAqIHN5O1xuXG4gICAgICAgIGFycmF5W29mZnNldCArIHN0cmlkZSAqIDNdID0gdzEgKiBzeDtcbiAgICAgICAgYXJyYXlbb2Zmc2V0ICsgc3RyaWRlICogMyArIDFdID0gaDAgKiBzeTtcblxuICAgICAgICBvZmZzZXQgKz0gc3RyaWRlICogNDtcbiAgICB9XG5cbn07XG5cbi8qKlxuICpcbiAqIEBwYXJhbSBjaGlsZHJlbiB7UElYSS5EaXNwbGF5T2JqZWN0W119IHRoZSBhcnJheSBvZiBkaXNwbGF5IG9iamVjdHMgdG8gcmVuZGVyXG4gKiBAcGFyYW0gc3RhcnRJbmRleCB7bnVtYmVyfSB0aGUgaW5kZXggdG8gc3RhcnQgZnJvbSBpbiB0aGUgY2hpbGRyZW4gYXJyYXlcbiAqIEBwYXJhbSBhbW91bnQge251bWJlcn0gdGhlIGFtb3VudCBvZiBjaGlsZHJlbiB0aGF0IHdpbGwgaGF2ZSB0aGVpciBwb3NpdGlvbnMgdXBsb2FkZWRcbiAqIEBwYXJhbSBhcnJheSB7bnVtYmVyW119XG4gKiBAcGFyYW0gc3RyaWRlIHtudW1iZXJ9XG4gKiBAcGFyYW0gb2Zmc2V0IHtudW1iZXJ9XG4gKi9cblBhcnRpY2xlUmVuZGVyZXIucHJvdG90eXBlLnVwbG9hZFBvc2l0aW9uID0gZnVuY3Rpb24gKGNoaWxkcmVuLHN0YXJ0SW5kZXgsIGFtb3VudCwgYXJyYXksIHN0cmlkZSwgb2Zmc2V0KVxue1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYW1vdW50OyBpKyspXG4gICAge1xuICAgICAgICB2YXIgc3ByaXRlUG9zaXRpb24gPSBjaGlsZHJlbltzdGFydEluZGV4ICsgaV0ucG9zaXRpb247XG5cbiAgICAgICAgYXJyYXlbb2Zmc2V0XSA9IHNwcml0ZVBvc2l0aW9uLng7XG4gICAgICAgIGFycmF5W29mZnNldCArIDFdID0gc3ByaXRlUG9zaXRpb24ueTtcblxuICAgICAgICBhcnJheVtvZmZzZXQgKyBzdHJpZGVdID0gc3ByaXRlUG9zaXRpb24ueDtcbiAgICAgICAgYXJyYXlbb2Zmc2V0ICsgc3RyaWRlICsgMV0gPSBzcHJpdGVQb3NpdGlvbi55O1xuXG4gICAgICAgIGFycmF5W29mZnNldCArIHN0cmlkZSAqIDJdID0gc3ByaXRlUG9zaXRpb24ueDtcbiAgICAgICAgYXJyYXlbb2Zmc2V0ICsgc3RyaWRlICogMiArIDFdID0gc3ByaXRlUG9zaXRpb24ueTtcblxuICAgICAgICBhcnJheVtvZmZzZXQgKyBzdHJpZGUgKiAzXSA9IHNwcml0ZVBvc2l0aW9uLng7XG4gICAgICAgIGFycmF5W29mZnNldCArIHN0cmlkZSAqIDMgKyAxXSA9IHNwcml0ZVBvc2l0aW9uLnk7XG5cbiAgICAgICAgb2Zmc2V0ICs9IHN0cmlkZSAqIDQ7XG4gICAgfVxuXG59O1xuXG4vKipcbiAqXG4gKiBAcGFyYW0gY2hpbGRyZW4ge1BJWEkuRGlzcGxheU9iamVjdFtdfSB0aGUgYXJyYXkgb2YgZGlzcGxheSBvYmplY3RzIHRvIHJlbmRlclxuICogQHBhcmFtIHN0YXJ0SW5kZXgge251bWJlcn0gdGhlIGluZGV4IHRvIHN0YXJ0IGZyb20gaW4gdGhlIGNoaWxkcmVuIGFycmF5XG4gKiBAcGFyYW0gYW1vdW50IHtudW1iZXJ9IHRoZSBhbW91bnQgb2YgY2hpbGRyZW4gdGhhdCB3aWxsIGhhdmUgdGhlaXIgcm90YXRpb24gdXBsb2FkZWRcbiAqIEBwYXJhbSBhcnJheSB7bnVtYmVyW119XG4gKiBAcGFyYW0gc3RyaWRlIHtudW1iZXJ9XG4gKiBAcGFyYW0gb2Zmc2V0IHtudW1iZXJ9XG4gKi9cblBhcnRpY2xlUmVuZGVyZXIucHJvdG90eXBlLnVwbG9hZFJvdGF0aW9uID0gZnVuY3Rpb24gKGNoaWxkcmVuLHN0YXJ0SW5kZXgsIGFtb3VudCwgYXJyYXksIHN0cmlkZSwgb2Zmc2V0KVxue1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYW1vdW50OyBpKyspXG4gICAge1xuICAgICAgICB2YXIgc3ByaXRlUm90YXRpb24gPSBjaGlsZHJlbltzdGFydEluZGV4ICsgaV0ucm90YXRpb247XG5cblxuICAgICAgICBhcnJheVtvZmZzZXRdID0gc3ByaXRlUm90YXRpb247XG4gICAgICAgIGFycmF5W29mZnNldCArIHN0cmlkZV0gPSBzcHJpdGVSb3RhdGlvbjtcbiAgICAgICAgYXJyYXlbb2Zmc2V0ICsgc3RyaWRlICogMl0gPSBzcHJpdGVSb3RhdGlvbjtcbiAgICAgICAgYXJyYXlbb2Zmc2V0ICsgc3RyaWRlICogM10gPSBzcHJpdGVSb3RhdGlvbjtcblxuICAgICAgICBvZmZzZXQgKz0gc3RyaWRlICogNDtcbiAgICB9XG59O1xuXG4vKipcbiAqXG4gKiBAcGFyYW0gY2hpbGRyZW4ge1BJWEkuRGlzcGxheU9iamVjdFtdfSB0aGUgYXJyYXkgb2YgZGlzcGxheSBvYmplY3RzIHRvIHJlbmRlclxuICogQHBhcmFtIHN0YXJ0SW5kZXgge251bWJlcn0gdGhlIGluZGV4IHRvIHN0YXJ0IGZyb20gaW4gdGhlIGNoaWxkcmVuIGFycmF5XG4gKiBAcGFyYW0gYW1vdW50IHtudW1iZXJ9IHRoZSBhbW91bnQgb2YgY2hpbGRyZW4gdGhhdCB3aWxsIGhhdmUgdGhlaXIgVXZzIHVwbG9hZGVkXG4gKiBAcGFyYW0gYXJyYXkge251bWJlcltdfVxuICogQHBhcmFtIHN0cmlkZSB7bnVtYmVyfVxuICogQHBhcmFtIG9mZnNldCB7bnVtYmVyfVxuICovXG5QYXJ0aWNsZVJlbmRlcmVyLnByb3RvdHlwZS51cGxvYWRVdnMgPSBmdW5jdGlvbiAoY2hpbGRyZW4sc3RhcnRJbmRleCwgYW1vdW50LCBhcnJheSwgc3RyaWRlLCBvZmZzZXQpXG57XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhbW91bnQ7IGkrKylcbiAgICB7XG4gICAgICAgIHZhciB0ZXh0dXJlVXZzID0gY2hpbGRyZW5bc3RhcnRJbmRleCArIGldLl90ZXh0dXJlLl91dnM7XG5cbiAgICAgICAgaWYgKHRleHR1cmVVdnMpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGFycmF5W29mZnNldF0gPSB0ZXh0dXJlVXZzLngwO1xuICAgICAgICAgICAgYXJyYXlbb2Zmc2V0ICsgMV0gPSB0ZXh0dXJlVXZzLnkwO1xuXG4gICAgICAgICAgICBhcnJheVtvZmZzZXQgKyBzdHJpZGVdID0gdGV4dHVyZVV2cy54MTtcbiAgICAgICAgICAgIGFycmF5W29mZnNldCArIHN0cmlkZSArIDFdID0gdGV4dHVyZVV2cy55MTtcblxuICAgICAgICAgICAgYXJyYXlbb2Zmc2V0ICsgc3RyaWRlICogMl0gPSB0ZXh0dXJlVXZzLngyO1xuICAgICAgICAgICAgYXJyYXlbb2Zmc2V0ICsgc3RyaWRlICogMiArIDFdID0gdGV4dHVyZVV2cy55MjtcblxuICAgICAgICAgICAgYXJyYXlbb2Zmc2V0ICsgc3RyaWRlICogM10gPSB0ZXh0dXJlVXZzLngzO1xuICAgICAgICAgICAgYXJyYXlbb2Zmc2V0ICsgc3RyaWRlICogMyArIDFdID0gdGV4dHVyZVV2cy55MztcblxuICAgICAgICAgICAgb2Zmc2V0ICs9IHN0cmlkZSAqIDQ7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgICAvL1RPRE8geW91IGtub3cgdGhpcyBjYW4gYmUgZWFzaWVyIVxuICAgICAgICAgICAgYXJyYXlbb2Zmc2V0XSA9IDA7XG4gICAgICAgICAgICBhcnJheVtvZmZzZXQgKyAxXSA9IDA7XG5cbiAgICAgICAgICAgIGFycmF5W29mZnNldCArIHN0cmlkZV0gPSAwO1xuICAgICAgICAgICAgYXJyYXlbb2Zmc2V0ICsgc3RyaWRlICsgMV0gPSAwO1xuXG4gICAgICAgICAgICBhcnJheVtvZmZzZXQgKyBzdHJpZGUgKiAyXSA9IDA7XG4gICAgICAgICAgICBhcnJheVtvZmZzZXQgKyBzdHJpZGUgKiAyICsgMV0gPSAwO1xuXG4gICAgICAgICAgICBhcnJheVtvZmZzZXQgKyBzdHJpZGUgKiAzXSA9IDA7XG4gICAgICAgICAgICBhcnJheVtvZmZzZXQgKyBzdHJpZGUgKiAzICsgMV0gPSAwO1xuXG4gICAgICAgICAgICBvZmZzZXQgKz0gc3RyaWRlICogNDtcbiAgICAgICAgfVxuICAgIH1cbn07XG5cbi8qKlxuICpcbiAqIEBwYXJhbSBjaGlsZHJlbiB7UElYSS5EaXNwbGF5T2JqZWN0W119IHRoZSBhcnJheSBvZiBkaXNwbGF5IG9iamVjdHMgdG8gcmVuZGVyXG4gKiBAcGFyYW0gc3RhcnRJbmRleCB7bnVtYmVyfSB0aGUgaW5kZXggdG8gc3RhcnQgZnJvbSBpbiB0aGUgY2hpbGRyZW4gYXJyYXlcbiAqIEBwYXJhbSBhbW91bnQge251bWJlcn0gdGhlIGFtb3VudCBvZiBjaGlsZHJlbiB0aGF0IHdpbGwgaGF2ZSB0aGVpciBhbHBoYSB1cGxvYWRlZFxuICogQHBhcmFtIGFycmF5IHtudW1iZXJbXX1cbiAqIEBwYXJhbSBzdHJpZGUge251bWJlcn1cbiAqIEBwYXJhbSBvZmZzZXQge251bWJlcn1cbiAqL1xuUGFydGljbGVSZW5kZXJlci5wcm90b3R5cGUudXBsb2FkQWxwaGEgPSBmdW5jdGlvbiAoY2hpbGRyZW4sc3RhcnRJbmRleCwgYW1vdW50LCBhcnJheSwgc3RyaWRlLCBvZmZzZXQpXG57XG4gICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYW1vdW50OyBpKyspXG4gICAgIHtcbiAgICAgICAgdmFyIHNwcml0ZUFscGhhID0gY2hpbGRyZW5bc3RhcnRJbmRleCArIGldLmFscGhhO1xuXG4gICAgICAgIGFycmF5W29mZnNldF0gPSBzcHJpdGVBbHBoYTtcbiAgICAgICAgYXJyYXlbb2Zmc2V0ICsgc3RyaWRlXSA9IHNwcml0ZUFscGhhO1xuICAgICAgICBhcnJheVtvZmZzZXQgKyBzdHJpZGUgKiAyXSA9IHNwcml0ZUFscGhhO1xuICAgICAgICBhcnJheVtvZmZzZXQgKyBzdHJpZGUgKiAzXSA9IHNwcml0ZUFscGhhO1xuXG4gICAgICAgIG9mZnNldCArPSBzdHJpZGUgKiA0O1xuICAgIH1cbn07XG5cblxuLyoqXG4gKiBEZXN0cm95cyB0aGUgUGFydGljbGVSZW5kZXJlci5cbiAqXG4gKi9cblBhcnRpY2xlUmVuZGVyZXIucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoKVxue1xuICAgIGlmICh0aGlzLnJlbmRlcmVyLmdsKSB7XG4gICAgICAgIHRoaXMucmVuZGVyZXIuZ2wuZGVsZXRlQnVmZmVyKHRoaXMuaW5kZXhCdWZmZXIpO1xuICAgIH1cblxuICAgIE9iamVjdFJlbmRlcmVyLnByb3RvdHlwZS5kZXN0cm95LmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG5cbiAgICB0aGlzLnNoYWRlci5kZXN0cm95KCk7XG5cbiAgICB0aGlzLmluZGljZXMgPSBudWxsO1xuICAgIHRoaXMudGVtcE1hdHJpeCA9IG51bGw7XG59O1xuIiwidmFyIFRleHR1cmVTaGFkZXIgPSByZXF1aXJlKCcuLi8uLi9yZW5kZXJlcnMvd2ViZ2wvc2hhZGVycy9UZXh0dXJlU2hhZGVyJyk7XG5cbi8qKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLlRleHR1cmVTaGFkZXJcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gc2hhZGVyTWFuYWdlciB7U2hhZGVyTWFuYWdlcn0gVGhlIHdlYmdsIHNoYWRlciBtYW5hZ2VyIHRoaXMgc2hhZGVyIHdvcmtzIGZvci5cbiAqL1xuZnVuY3Rpb24gUGFydGljbGVTaGFkZXIoc2hhZGVyTWFuYWdlcilcbntcbiAgICBUZXh0dXJlU2hhZGVyLmNhbGwodGhpcyxcbiAgICAgICAgc2hhZGVyTWFuYWdlcixcbiAgICAgICAgLy8gdmVydGV4IHNoYWRlclxuICAgICAgICBbXG4gICAgICAgICAgICAnYXR0cmlidXRlIHZlYzIgYVZlcnRleFBvc2l0aW9uOycsXG4gICAgICAgICAgICAnYXR0cmlidXRlIHZlYzIgYVRleHR1cmVDb29yZDsnLFxuICAgICAgICAgICAgJ2F0dHJpYnV0ZSBmbG9hdCBhQ29sb3I7JyxcblxuICAgICAgICAgICAgJ2F0dHJpYnV0ZSB2ZWMyIGFQb3NpdGlvbkNvb3JkOycsXG4gICAgICAgICAgICAnYXR0cmlidXRlIHZlYzIgYVNjYWxlOycsXG4gICAgICAgICAgICAnYXR0cmlidXRlIGZsb2F0IGFSb3RhdGlvbjsnLFxuXG4gICAgICAgICAgICAndW5pZm9ybSBtYXQzIHByb2plY3Rpb25NYXRyaXg7JyxcblxuICAgICAgICAgICAgJ3ZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkOycsXG4gICAgICAgICAgICAndmFyeWluZyBmbG9hdCB2Q29sb3I7JyxcblxuICAgICAgICAgICAgJ3ZvaWQgbWFpbih2b2lkKXsnLFxuICAgICAgICAgICAgJyAgIHZlYzIgdiA9IGFWZXJ0ZXhQb3NpdGlvbjsnLFxuXG4gICAgICAgICAgICAnICAgdi54ID0gKGFWZXJ0ZXhQb3NpdGlvbi54KSAqIGNvcyhhUm90YXRpb24pIC0gKGFWZXJ0ZXhQb3NpdGlvbi55KSAqIHNpbihhUm90YXRpb24pOycsXG4gICAgICAgICAgICAnICAgdi55ID0gKGFWZXJ0ZXhQb3NpdGlvbi54KSAqIHNpbihhUm90YXRpb24pICsgKGFWZXJ0ZXhQb3NpdGlvbi55KSAqIGNvcyhhUm90YXRpb24pOycsXG4gICAgICAgICAgICAnICAgdiA9IHYgKyBhUG9zaXRpb25Db29yZDsnLFxuXG4gICAgICAgICAgICAnICAgZ2xfUG9zaXRpb24gPSB2ZWM0KChwcm9qZWN0aW9uTWF0cml4ICogdmVjMyh2LCAxLjApKS54eSwgMC4wLCAxLjApOycsXG5cbiAgICAgICAgICAgICcgICB2VGV4dHVyZUNvb3JkID0gYVRleHR1cmVDb29yZDsnLFxuICAgICAgICAgICAgJyAgIHZDb2xvciA9IGFDb2xvcjsnLFxuICAgICAgICAgICAgJ30nXG4gICAgICAgIF0uam9pbignXFxuJyksXG4gICAgICAgIC8vIGhlbGxvXG4gICAgICAgICBbXG4gICAgICAgICAgICAncHJlY2lzaW9uIGxvd3AgZmxvYXQ7JyxcblxuICAgICAgICAgICAgJ3ZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkOycsXG4gICAgICAgICAgICAndmFyeWluZyBmbG9hdCB2Q29sb3I7JyxcblxuICAgICAgICAgICAgJ3VuaWZvcm0gc2FtcGxlcjJEIHVTYW1wbGVyOycsXG4gICAgICAgICAgICAndW5pZm9ybSBmbG9hdCB1QWxwaGE7JyxcblxuICAgICAgICAgICAgJ3ZvaWQgbWFpbih2b2lkKXsnLFxuICAgICAgICAgICAgJyAgdmVjNCBjb2xvciA9IHRleHR1cmUyRCh1U2FtcGxlciwgdlRleHR1cmVDb29yZCkgKiB2Q29sb3IgKiB1QWxwaGE7JyxcbiAgICAgICAgICAgICcgIGlmIChjb2xvci5hID09IDAuMCkgZGlzY2FyZDsnLFxuICAgICAgICAgICAgJyAgZ2xfRnJhZ0NvbG9yID0gY29sb3I7JyxcbiAgICAgICAgICAgICd9J1xuICAgICAgICBdLmpvaW4oJ1xcbicpLFxuICAgICAgICAvLyBjdXN0b20gdW5pZm9ybXNcbiAgICAgICAge1xuICAgICAgICAgICAgdUFscGhhOiAgeyB0eXBlOiAnMWYnLCB2YWx1ZTogMSB9XG4gICAgICAgIH0sXG4gICAgICAgIC8vIGN1c3RvbSBhdHRyaWJ1dGVzXG4gICAgICAgIHtcbiAgICAgICAgICAgIGFQb3NpdGlvbkNvb3JkOiAwLFxuICAgICAgICAgICAvLyBhU2NhbGU6ICAgICAgICAgMCxcbiAgICAgICAgICAgIGFSb3RhdGlvbjogICAgICAwXG4gICAgICAgIH1cbiAgICApO1xuXG4gICAgLy8gVEVNUCBIQUNLXG5cbn1cblxuUGFydGljbGVTaGFkZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShUZXh0dXJlU2hhZGVyLnByb3RvdHlwZSk7XG5QYXJ0aWNsZVNoYWRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBQYXJ0aWNsZVNoYWRlcjtcblxubW9kdWxlLmV4cG9ydHMgPSBQYXJ0aWNsZVNoYWRlcjtcbiIsInZhciB1dGlscyA9IHJlcXVpcmUoJy4uL3V0aWxzJyksXG4gICAgbWF0aCA9IHJlcXVpcmUoJy4uL21hdGgnKSxcbiAgICBDT05TVCA9IHJlcXVpcmUoJy4uL2NvbnN0JyksXG4gICAgRXZlbnRFbWl0dGVyID0gcmVxdWlyZSgnZXZlbnRlbWl0dGVyMycpO1xuXG4vKipcbiAqIFRoZSBDYW52YXNSZW5kZXJlciBkcmF3cyB0aGUgc2NlbmUgYW5kIGFsbCBpdHMgY29udGVudCBvbnRvIGEgMmQgY2FudmFzLiBUaGlzIHJlbmRlcmVyIHNob3VsZCBiZSB1c2VkIGZvciBicm93c2VycyB0aGF0IGRvIG5vdCBzdXBwb3J0IHdlYkdMLlxuICogRG9uJ3QgZm9yZ2V0IHRvIGFkZCB0aGUgQ2FudmFzUmVuZGVyZXIudmlldyB0byB5b3VyIERPTSBvciB5b3Ugd2lsbCBub3Qgc2VlIGFueXRoaW5nIDopXG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIHN5c3RlbSB7c3RyaW5nfSBUaGUgbmFtZSBvZiB0aGUgc3lzdGVtIHRoaXMgcmVuZGVyZXIgaXMgZm9yLlxuICogQHBhcmFtIFt3aWR0aD04MDBdIHtudW1iZXJ9IHRoZSB3aWR0aCBvZiB0aGUgY2FudmFzIHZpZXdcbiAqIEBwYXJhbSBbaGVpZ2h0PTYwMF0ge251bWJlcn0gdGhlIGhlaWdodCBvZiB0aGUgY2FudmFzIHZpZXdcbiAqIEBwYXJhbSBbb3B0aW9uc10ge29iamVjdH0gVGhlIG9wdGlvbmFsIHJlbmRlcmVyIHBhcmFtZXRlcnNcbiAqIEBwYXJhbSBbb3B0aW9ucy52aWV3XSB7SFRNTENhbnZhc0VsZW1lbnR9IHRoZSBjYW52YXMgdG8gdXNlIGFzIGEgdmlldywgb3B0aW9uYWxcbiAqIEBwYXJhbSBbb3B0aW9ucy50cmFuc3BhcmVudD1mYWxzZV0ge2Jvb2xlYW59IElmIHRoZSByZW5kZXIgdmlldyBpcyB0cmFuc3BhcmVudCwgZGVmYXVsdCBmYWxzZVxuICogQHBhcmFtIFtvcHRpb25zLmF1dG9SZXNpemU9ZmFsc2VdIHtib29sZWFufSBJZiB0aGUgcmVuZGVyIHZpZXcgaXMgYXV0b21hdGljYWxseSByZXNpemVkLCBkZWZhdWx0IGZhbHNlXG4gKiBAcGFyYW0gW29wdGlvbnMuYW50aWFsaWFzPWZhbHNlXSB7Ym9vbGVhbn0gc2V0cyBhbnRpYWxpYXMgKG9ubHkgYXBwbGljYWJsZSBpbiBjaHJvbWUgYXQgdGhlIG1vbWVudClcbiAqIEBwYXJhbSBbb3B0aW9ucy5yZXNvbHV0aW9uPTFdIHtudW1iZXJ9IHRoZSByZXNvbHV0aW9uIG9mIHRoZSByZW5kZXJlciByZXRpbmEgd291bGQgYmUgMlxuICogQHBhcmFtIFtvcHRpb25zLmNsZWFyQmVmb3JlUmVuZGVyPXRydWVdIHtib29sZWFufSBUaGlzIHNldHMgaWYgdGhlIENhbnZhc1JlbmRlcmVyIHdpbGwgY2xlYXIgdGhlIGNhbnZhcyBvclxuICogICAgICBub3QgYmVmb3JlIHRoZSBuZXcgcmVuZGVyIHBhc3MuXG4gKiBAcGFyYW0gW29wdGlvbnMuYmFja2dyb3VuZENvbG9yPTB4MDAwMDAwXSB7bnVtYmVyfSBUaGUgYmFja2dyb3VuZCBjb2xvciBvZiB0aGUgcmVuZGVyZWQgYXJlYSAoc2hvd24gaWYgbm90IHRyYW5zcGFyZW50KS5cbiAqIEBwYXJhbSBbb3B0aW9ucy5yb3VuZFBpeGVscz1mYWxzZV0ge2Jvb2xlYW59IElmIHRydWUgUGl4aSB3aWxsIE1hdGguZmxvb3IoKSB4L3kgdmFsdWVzIHdoZW4gcmVuZGVyaW5nLCBzdG9wcGluZyBwaXhlbCBpbnRlcnBvbGF0aW9uLlxuICovXG5mdW5jdGlvbiBTeXN0ZW1SZW5kZXJlcihzeXN0ZW0sIHdpZHRoLCBoZWlnaHQsIG9wdGlvbnMpXG57XG4gICAgRXZlbnRFbWl0dGVyLmNhbGwodGhpcyk7XG5cbiAgICB1dGlscy5zYXlIZWxsbyhzeXN0ZW0pO1xuXG4gICAgLy8gcHJlcGFyZSBvcHRpb25zXG4gICAgaWYgKG9wdGlvbnMpXG4gICAge1xuICAgICAgICBmb3IgKHZhciBpIGluIENPTlNULkRFRkFVTFRfUkVOREVSX09QVElPTlMpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGlmICh0eXBlb2Ygb3B0aW9uc1tpXSA9PT0gJ3VuZGVmaW5lZCcpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgb3B0aW9uc1tpXSA9IENPTlNULkRFRkFVTFRfUkVOREVSX09QVElPTlNbaV07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgb3B0aW9ucyA9IENPTlNULkRFRkFVTFRfUkVOREVSX09QVElPTlM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhlIHR5cGUgb2YgdGhlIHJlbmRlcmVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IFBJWEkuUkVOREVSRVJfVFlQRS5VTktOT1dOXG4gICAgICogQHNlZSBQSVhJLlJFTkRFUkVSX1RZUEVcbiAgICAgKi9cbiAgICB0aGlzLnR5cGUgPSBDT05TVC5SRU5ERVJFUl9UWVBFLlVOS05PV047XG5cbiAgICAvKipcbiAgICAgKiBUaGUgd2lkdGggb2YgdGhlIGNhbnZhcyB2aWV3XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgODAwXG4gICAgICovXG4gICAgdGhpcy53aWR0aCA9IHdpZHRoIHx8IDgwMDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBoZWlnaHQgb2YgdGhlIGNhbnZhcyB2aWV3XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgNjAwXG4gICAgICovXG4gICAgdGhpcy5oZWlnaHQgPSBoZWlnaHQgfHwgNjAwO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGNhbnZhcyBlbGVtZW50IHRoYXQgZXZlcnl0aGluZyBpcyBkcmF3biB0b1xuICAgICAqXG4gICAgICogQG1lbWJlciB7SFRNTENhbnZhc0VsZW1lbnR9XG4gICAgICovXG4gICAgdGhpcy52aWV3ID0gb3B0aW9ucy52aWV3IHx8IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NhbnZhcycpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHJlc29sdXRpb24gb2YgdGhlIHJlbmRlcmVyXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMVxuICAgICAqL1xuICAgIHRoaXMucmVzb2x1dGlvbiA9IG9wdGlvbnMucmVzb2x1dGlvbjtcblxuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgdGhlIHJlbmRlciB2aWV3IGlzIHRyYW5zcGFyZW50XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqL1xuICAgIHRoaXMudHJhbnNwYXJlbnQgPSBvcHRpb25zLnRyYW5zcGFyZW50O1xuXG4gICAgLyoqXG4gICAgICogV2hldGhlciB0aGUgcmVuZGVyIHZpZXcgc2hvdWxkIGJlIHJlc2l6ZWQgYXV0b21hdGljYWxseVxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKi9cbiAgICB0aGlzLmF1dG9SZXNpemUgPSBvcHRpb25zLmF1dG9SZXNpemUgfHwgZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBUcmFja3MgdGhlIGJsZW5kIG1vZGVzIHVzZWZ1bCBmb3IgdGhpcyByZW5kZXJlci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge29iamVjdDxzdHJpbmcsIG1peGVkPn1cbiAgICAgKi9cbiAgICB0aGlzLmJsZW5kTW9kZXMgPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHZhbHVlIG9mIHRoZSBwcmVzZXJ2ZURyYXdpbmdCdWZmZXIgZmxhZyBhZmZlY3RzIHdoZXRoZXIgb3Igbm90IHRoZSBjb250ZW50cyBvZiB0aGUgc3RlbmNpbCBidWZmZXIgaXMgcmV0YWluZWQgYWZ0ZXIgcmVuZGVyaW5nLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKi9cbiAgICB0aGlzLnByZXNlcnZlRHJhd2luZ0J1ZmZlciA9IG9wdGlvbnMucHJlc2VydmVEcmF3aW5nQnVmZmVyO1xuXG4gICAgLyoqXG4gICAgICogVGhpcyBzZXRzIGlmIHRoZSBDYW52YXNSZW5kZXJlciB3aWxsIGNsZWFyIHRoZSBjYW52YXMgb3Igbm90IGJlZm9yZSB0aGUgbmV3IHJlbmRlciBwYXNzLlxuICAgICAqIElmIHRoZSBzY2VuZSBpcyBOT1QgdHJhbnNwYXJlbnQgUGl4aSB3aWxsIHVzZSBhIGNhbnZhcyBzaXplZCBmaWxsUmVjdCBvcGVyYXRpb24gZXZlcnkgZnJhbWUgdG8gc2V0IHRoZSBjYW52YXMgYmFja2dyb3VuZCBjb2xvci5cbiAgICAgKiBJZiB0aGUgc2NlbmUgaXMgdHJhbnNwYXJlbnQgUGl4aSB3aWxsIHVzZSBjbGVhclJlY3QgdG8gY2xlYXIgdGhlIGNhbnZhcyBldmVyeSBmcmFtZS5cbiAgICAgKiBEaXNhYmxlIHRoaXMgYnkgc2V0dGluZyB0aGlzIHRvIGZhbHNlLiBGb3IgZXhhbXBsZSBpZiB5b3VyIGdhbWUgaGFzIGEgY2FudmFzIGZpbGxpbmcgYmFja2dyb3VuZCBpbWFnZSB5b3Ugb2Z0ZW4gZG9uJ3QgbmVlZCB0aGlzIHNldC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICogQGRlZmF1bHRcbiAgICAgKi9cbiAgICB0aGlzLmNsZWFyQmVmb3JlUmVuZGVyID0gb3B0aW9ucy5jbGVhckJlZm9yZVJlbmRlcjtcblxuICAgIC8qKlxuICAgICAqIElmIHRydWUgUGl4aSB3aWxsIE1hdGguZmxvb3IoKSB4L3kgdmFsdWVzIHdoZW4gcmVuZGVyaW5nLCBzdG9wcGluZyBwaXhlbCBpbnRlcnBvbGF0aW9uLlxuICAgICAqIEhhbmR5IGZvciBjcmlzcCBwaXhlbCBhcnQgYW5kIHNwZWVkIG9uIGxlZ2FjeSBkZXZpY2VzLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKi9cbiAgICB0aGlzLnJvdW5kUGl4ZWxzID0gb3B0aW9ucy5yb3VuZFBpeGVscztcblxuICAgIC8qKlxuICAgICAqIFRoZSBiYWNrZ3JvdW5kIGNvbG9yIGFzIGEgbnVtYmVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fYmFja2dyb3VuZENvbG9yID0gMHgwMDAwMDA7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYmFja2dyb3VuZCBjb2xvciBhcyBhbiBbUiwgRywgQl0gYXJyYXkuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJbXX1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX2JhY2tncm91bmRDb2xvclJnYmEgPSBbMCwgMCwgMCwgMF07XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYmFja2dyb3VuZCBjb2xvciBhcyBhIHN0cmluZy5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge3N0cmluZ31cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX2JhY2tncm91bmRDb2xvclN0cmluZyA9ICcjMDAwMDAwJztcblxuICAgIHRoaXMuYmFja2dyb3VuZENvbG9yID0gb3B0aW9ucy5iYWNrZ3JvdW5kQ29sb3IgfHwgdGhpcy5fYmFja2dyb3VuZENvbG9yOyAvLyBydW4gYmcgY29sb3Igc2V0dGVyXG5cbiAgICAvKipcbiAgICAgKiBUaGlzIHRlbXBvcmFyeSBkaXNwbGF5IG9iamVjdCB1c2VkIGFzIHRoZSBwYXJlbnQgb2YgdGhlIGN1cnJlbnRseSBiZWluZyByZW5kZXJlZCBpdGVtXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLkRpc3BsYXlPYmplY3R9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl90ZW1wRGlzcGxheU9iamVjdFBhcmVudCA9IHt3b3JsZFRyYW5zZm9ybTpuZXcgbWF0aC5NYXRyaXgoKSwgd29ybGRBbHBoYToxLCBjaGlsZHJlbjpbXX07XG5cbiAgICAvKipcbiAgICAgKiBUaGUgbGFzdCByb290IG9iamVjdCB0aGF0IHRoZSByZW5kZXJlciB0cmllZCB0byByZW5kZXIuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLkRpc3BsYXlPYmplY3R9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9sYXN0T2JqZWN0UmVuZGVyZWQgPSB0aGlzLl90ZW1wRGlzcGxheU9iamVjdFBhcmVudDtcbn1cblxuLy8gY29uc3RydWN0b3JcblN5c3RlbVJlbmRlcmVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoRXZlbnRFbWl0dGVyLnByb3RvdHlwZSk7XG5TeXN0ZW1SZW5kZXJlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBTeXN0ZW1SZW5kZXJlcjtcbm1vZHVsZS5leHBvcnRzID0gU3lzdGVtUmVuZGVyZXI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKFN5c3RlbVJlbmRlcmVyLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFRoZSBiYWNrZ3JvdW5kIGNvbG9yIHRvIGZpbGwgaWYgbm90IHRyYW5zcGFyZW50XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuU3lzdGVtUmVuZGVyZXIjXG4gICAgICovXG4gICAgYmFja2dyb3VuZENvbG9yOlxuICAgIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fYmFja2dyb3VuZENvbG9yO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWwpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuX2JhY2tncm91bmRDb2xvciA9IHZhbDtcbiAgICAgICAgICAgIHRoaXMuX2JhY2tncm91bmRDb2xvclN0cmluZyA9IHV0aWxzLmhleDJzdHJpbmcodmFsKTtcbiAgICAgICAgICAgIHV0aWxzLmhleDJyZ2IodmFsLCB0aGlzLl9iYWNrZ3JvdW5kQ29sb3JSZ2JhKTtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuXG4vKipcbiAqIFJlc2l6ZXMgdGhlIGNhbnZhcyB2aWV3IHRvIHRoZSBzcGVjaWZpZWQgd2lkdGggYW5kIGhlaWdodFxuICpcbiAqIEBwYXJhbSB3aWR0aCB7bnVtYmVyfSB0aGUgbmV3IHdpZHRoIG9mIHRoZSBjYW52YXMgdmlld1xuICogQHBhcmFtIGhlaWdodCB7bnVtYmVyfSB0aGUgbmV3IGhlaWdodCBvZiB0aGUgY2FudmFzIHZpZXdcbiAqL1xuU3lzdGVtUmVuZGVyZXIucHJvdG90eXBlLnJlc2l6ZSA9IGZ1bmN0aW9uICh3aWR0aCwgaGVpZ2h0KSB7XG4gICAgdGhpcy53aWR0aCA9IHdpZHRoICogdGhpcy5yZXNvbHV0aW9uO1xuICAgIHRoaXMuaGVpZ2h0ID0gaGVpZ2h0ICogdGhpcy5yZXNvbHV0aW9uO1xuXG4gICAgdGhpcy52aWV3LndpZHRoID0gdGhpcy53aWR0aDtcbiAgICB0aGlzLnZpZXcuaGVpZ2h0ID0gdGhpcy5oZWlnaHQ7XG5cbiAgICBpZiAodGhpcy5hdXRvUmVzaXplKVxuICAgIHtcbiAgICAgICAgdGhpcy52aWV3LnN0eWxlLndpZHRoID0gdGhpcy53aWR0aCAvIHRoaXMucmVzb2x1dGlvbiArICdweCc7XG4gICAgICAgIHRoaXMudmlldy5zdHlsZS5oZWlnaHQgPSB0aGlzLmhlaWdodCAvIHRoaXMucmVzb2x1dGlvbiArICdweCc7XG4gICAgfVxufTtcblxuLyoqXG4gKiBSZW1vdmVzIGV2ZXJ5dGhpbmcgZnJvbSB0aGUgcmVuZGVyZXIgYW5kIG9wdGlvbmFsbHkgcmVtb3ZlcyB0aGUgQ2FudmFzIERPTSBlbGVtZW50LlxuICpcbiAqIEBwYXJhbSBbcmVtb3ZlVmlldz1mYWxzZV0ge2Jvb2xlYW59IFJlbW92ZXMgdGhlIENhbnZhcyBlbGVtZW50IGZyb20gdGhlIERPTS5cbiAqL1xuU3lzdGVtUmVuZGVyZXIucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAocmVtb3ZlVmlldykge1xuICAgIGlmIChyZW1vdmVWaWV3ICYmIHRoaXMudmlldy5wYXJlbnROb2RlKVxuICAgIHtcbiAgICAgICAgdGhpcy52aWV3LnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodGhpcy52aWV3KTtcbiAgICB9XG5cbiAgICB0aGlzLnR5cGUgPSBDT05TVC5SRU5ERVJFUl9UWVBFLlVOS05PV047XG5cbiAgICB0aGlzLndpZHRoID0gMDtcbiAgICB0aGlzLmhlaWdodCA9IDA7XG5cbiAgICB0aGlzLnZpZXcgPSBudWxsO1xuXG4gICAgdGhpcy5yZXNvbHV0aW9uID0gMDtcblxuICAgIHRoaXMudHJhbnNwYXJlbnQgPSBmYWxzZTtcblxuICAgIHRoaXMuYXV0b1Jlc2l6ZSA9IGZhbHNlO1xuXG4gICAgdGhpcy5ibGVuZE1vZGVzID0gbnVsbDtcblxuICAgIHRoaXMucHJlc2VydmVEcmF3aW5nQnVmZmVyID0gZmFsc2U7XG4gICAgdGhpcy5jbGVhckJlZm9yZVJlbmRlciA9IGZhbHNlO1xuXG4gICAgdGhpcy5yb3VuZFBpeGVscyA9IGZhbHNlO1xuXG4gICAgdGhpcy5fYmFja2dyb3VuZENvbG9yID0gMDtcbiAgICB0aGlzLl9iYWNrZ3JvdW5kQ29sb3JSZ2JhID0gbnVsbDtcbiAgICB0aGlzLl9iYWNrZ3JvdW5kQ29sb3JTdHJpbmcgPSBudWxsO1xufTtcbiIsInZhciBTeXN0ZW1SZW5kZXJlciA9IHJlcXVpcmUoJy4uL1N5c3RlbVJlbmRlcmVyJyksXG4gICAgQ2FudmFzTWFza01hbmFnZXIgPSByZXF1aXJlKCcuL3V0aWxzL0NhbnZhc01hc2tNYW5hZ2VyJyksXG4gICAgdXRpbHMgPSByZXF1aXJlKCcuLi8uLi91dGlscycpLFxuICAgIG1hdGggPSByZXF1aXJlKCcuLi8uLi9tYXRoJyksXG4gICAgQ09OU1QgPSByZXF1aXJlKCcuLi8uLi9jb25zdCcpO1xuXG4vKipcbiAqIFRoZSBDYW52YXNSZW5kZXJlciBkcmF3cyB0aGUgc2NlbmUgYW5kIGFsbCBpdHMgY29udGVudCBvbnRvIGEgMmQgY2FudmFzLiBUaGlzIHJlbmRlcmVyIHNob3VsZCBiZSB1c2VkIGZvciBicm93c2VycyB0aGF0IGRvIG5vdCBzdXBwb3J0IHdlYkdMLlxuICogRG9uJ3QgZm9yZ2V0IHRvIGFkZCB0aGUgQ2FudmFzUmVuZGVyZXIudmlldyB0byB5b3VyIERPTSBvciB5b3Ugd2lsbCBub3Qgc2VlIGFueXRoaW5nIDopXG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQGV4dGVuZHMgUElYSS5TeXN0ZW1SZW5kZXJlclxuICogQHBhcmFtIFt3aWR0aD04MDBdIHtudW1iZXJ9IHRoZSB3aWR0aCBvZiB0aGUgY2FudmFzIHZpZXdcbiAqIEBwYXJhbSBbaGVpZ2h0PTYwMF0ge251bWJlcn0gdGhlIGhlaWdodCBvZiB0aGUgY2FudmFzIHZpZXdcbiAqIEBwYXJhbSBbb3B0aW9uc10ge29iamVjdH0gVGhlIG9wdGlvbmFsIHJlbmRlcmVyIHBhcmFtZXRlcnNcbiAqIEBwYXJhbSBbb3B0aW9ucy52aWV3XSB7SFRNTENhbnZhc0VsZW1lbnR9IHRoZSBjYW52YXMgdG8gdXNlIGFzIGEgdmlldywgb3B0aW9uYWxcbiAqIEBwYXJhbSBbb3B0aW9ucy50cmFuc3BhcmVudD1mYWxzZV0ge2Jvb2xlYW59IElmIHRoZSByZW5kZXIgdmlldyBpcyB0cmFuc3BhcmVudCwgZGVmYXVsdCBmYWxzZVxuICogQHBhcmFtIFtvcHRpb25zLmF1dG9SZXNpemU9ZmFsc2VdIHtib29sZWFufSBJZiB0aGUgcmVuZGVyIHZpZXcgaXMgYXV0b21hdGljYWxseSByZXNpemVkLCBkZWZhdWx0IGZhbHNlXG4gKiBAcGFyYW0gW29wdGlvbnMuYW50aWFsaWFzPWZhbHNlXSB7Ym9vbGVhbn0gc2V0cyBhbnRpYWxpYXMgKG9ubHkgYXBwbGljYWJsZSBpbiBjaHJvbWUgYXQgdGhlIG1vbWVudClcbiAqIEBwYXJhbSBbb3B0aW9ucy5yZXNvbHV0aW9uPTFdIHtudW1iZXJ9IHRoZSByZXNvbHV0aW9uIG9mIHRoZSByZW5kZXJlciByZXRpbmEgd291bGQgYmUgMlxuICogQHBhcmFtIFtvcHRpb25zLmNsZWFyQmVmb3JlUmVuZGVyPXRydWVdIHtib29sZWFufSBUaGlzIHNldHMgaWYgdGhlIENhbnZhc1JlbmRlcmVyIHdpbGwgY2xlYXIgdGhlIGNhbnZhcyBvclxuICogICAgICBub3QgYmVmb3JlIHRoZSBuZXcgcmVuZGVyIHBhc3MuXG4gKiBAcGFyYW0gW29wdGlvbnMucm91bmRQaXhlbHM9ZmFsc2VdIHtib29sZWFufSBJZiB0cnVlIFBpeGkgd2lsbCBNYXRoLmZsb29yKCkgeC95IHZhbHVlcyB3aGVuIHJlbmRlcmluZywgc3RvcHBpbmcgcGl4ZWwgaW50ZXJwb2xhdGlvbi5cbiAqL1xuZnVuY3Rpb24gQ2FudmFzUmVuZGVyZXIod2lkdGgsIGhlaWdodCwgb3B0aW9ucylcbntcbiAgICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcblxuICAgIFN5c3RlbVJlbmRlcmVyLmNhbGwodGhpcywgJ0NhbnZhcycsIHdpZHRoLCBoZWlnaHQsIG9wdGlvbnMpO1xuXG4gICAgdGhpcy50eXBlID0gQ09OU1QuUkVOREVSRVJfVFlQRS5DQU5WQVM7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgY2FudmFzIDJkIGNvbnRleHQgdGhhdCBldmVyeXRoaW5nIGlzIGRyYXduIHdpdGguXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtDYW52YXNSZW5kZXJpbmdDb250ZXh0MkR9XG4gICAgICovXG4gICAgdGhpcy5jb250ZXh0ID0gdGhpcy52aWV3LmdldENvbnRleHQoJzJkJywgeyBhbHBoYTogdGhpcy50cmFuc3BhcmVudCB9KTtcblxuICAgIC8qKlxuICAgICAqIEJvb2xlYW4gZmxhZyBjb250cm9sbGluZyBjYW52YXMgcmVmcmVzaC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICovXG4gICAgdGhpcy5yZWZyZXNoID0gdHJ1ZTtcblxuICAgIC8qKlxuICAgICAqIEluc3RhbmNlIG9mIGEgQ2FudmFzTWFza01hbmFnZXIsIGhhbmRsZXMgbWFza2luZyB3aGVuIHVzaW5nIHRoZSBjYW52YXMgcmVuZGVyZXIuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLkNhbnZhc01hc2tNYW5hZ2VyfVxuICAgICAqL1xuICAgIHRoaXMubWFza01hbmFnZXIgPSBuZXcgQ2FudmFzTWFza01hbmFnZXIoKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBjYW52YXMgcHJvcGVydHkgdXNlZCB0byBzZXQgdGhlIGNhbnZhcyBzbW9vdGhpbmcgcHJvcGVydHkuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtzdHJpbmd9XG4gICAgICovXG4gICAgdGhpcy5zbW9vdGhQcm9wZXJ0eSA9ICdpbWFnZVNtb290aGluZ0VuYWJsZWQnO1xuXG4gICAgaWYgKCF0aGlzLmNvbnRleHQuaW1hZ2VTbW9vdGhpbmdFbmFibGVkKVxuICAgIHtcbiAgICAgICAgaWYgKHRoaXMuY29udGV4dC53ZWJraXRJbWFnZVNtb290aGluZ0VuYWJsZWQpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuc21vb3RoUHJvcGVydHkgPSAnd2Via2l0SW1hZ2VTbW9vdGhpbmdFbmFibGVkJztcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh0aGlzLmNvbnRleHQubW96SW1hZ2VTbW9vdGhpbmdFbmFibGVkKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnNtb290aFByb3BlcnR5ID0gJ21vekltYWdlU21vb3RoaW5nRW5hYmxlZCc7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodGhpcy5jb250ZXh0Lm9JbWFnZVNtb290aGluZ0VuYWJsZWQpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuc21vb3RoUHJvcGVydHkgPSAnb0ltYWdlU21vb3RoaW5nRW5hYmxlZCc7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodGhpcy5jb250ZXh0Lm1zSW1hZ2VTbW9vdGhpbmdFbmFibGVkKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnNtb290aFByb3BlcnR5ID0gJ21zSW1hZ2VTbW9vdGhpbmdFbmFibGVkJztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMuaW5pdFBsdWdpbnMoKTtcblxuICAgIHRoaXMuX21hcEJsZW5kTW9kZXMoKTtcblxuICAgIC8qKlxuICAgICAqIFRoaXMgdGVtcG9yYXJ5IGRpc3BsYXkgb2JqZWN0IHVzZWQgYXMgdGhlIHBhcmVudCBvZiB0aGUgY3VycmVudGx5IGJlaW5nIHJlbmRlcmVkIGl0ZW1cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuRGlzcGxheU9iamVjdH1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX3RlbXBEaXNwbGF5T2JqZWN0UGFyZW50ID0ge1xuICAgICAgICB3b3JsZFRyYW5zZm9ybTogbmV3IG1hdGguTWF0cml4KCksXG4gICAgICAgIHdvcmxkQWxwaGE6IDFcbiAgICB9O1xuXG5cbiAgICB0aGlzLnJlc2l6ZSh3aWR0aCwgaGVpZ2h0KTtcbn1cblxuLy8gY29uc3RydWN0b3JcbkNhbnZhc1JlbmRlcmVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoU3lzdGVtUmVuZGVyZXIucHJvdG90eXBlKTtcbkNhbnZhc1JlbmRlcmVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IENhbnZhc1JlbmRlcmVyO1xubW9kdWxlLmV4cG9ydHMgPSBDYW52YXNSZW5kZXJlcjtcbnV0aWxzLnBsdWdpblRhcmdldC5taXhpbihDYW52YXNSZW5kZXJlcik7XG5cbi8qKlxuICogUmVuZGVycyB0aGUgb2JqZWN0IHRvIHRoaXMgY2FudmFzIHZpZXdcbiAqXG4gKiBAcGFyYW0gb2JqZWN0IHtQSVhJLkRpc3BsYXlPYmplY3R9IHRoZSBvYmplY3QgdG8gYmUgcmVuZGVyZWRcbiAqL1xuQ2FudmFzUmVuZGVyZXIucHJvdG90eXBlLnJlbmRlciA9IGZ1bmN0aW9uIChvYmplY3QpXG57XG4gICAgdGhpcy5lbWl0KCdwcmVyZW5kZXInKTtcblxuICAgIHZhciBjYWNoZVBhcmVudCA9IG9iamVjdC5wYXJlbnQ7XG5cbiAgICB0aGlzLl9sYXN0T2JqZWN0UmVuZGVyZWQgPSBvYmplY3Q7XG5cbiAgICBvYmplY3QucGFyZW50ID0gdGhpcy5fdGVtcERpc3BsYXlPYmplY3RQYXJlbnQ7XG5cbiAgICAvLyB1cGRhdGUgdGhlIHNjZW5lIGdyYXBoXG4gICAgb2JqZWN0LnVwZGF0ZVRyYW5zZm9ybSgpO1xuXG4gICAgb2JqZWN0LnBhcmVudCA9IGNhY2hlUGFyZW50O1xuXG4gICAgdGhpcy5jb250ZXh0LnNldFRyYW5zZm9ybSgxLCAwLCAwLCAxLCAwLCAwKTtcblxuICAgIHRoaXMuY29udGV4dC5nbG9iYWxBbHBoYSA9IDE7XG5cbiAgICB0aGlzLmNvbnRleHQuZ2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uID0gdGhpcy5ibGVuZE1vZGVzW0NPTlNULkJMRU5EX01PREVTLk5PUk1BTF07XG5cbiAgICBpZiAobmF2aWdhdG9yLmlzQ29jb29uSlMgJiYgdGhpcy52aWV3LnNjcmVlbmNhbnZhcylcbiAgICB7XG4gICAgICAgIHRoaXMuY29udGV4dC5maWxsU3R5bGUgPSAnYmxhY2snO1xuICAgICAgICB0aGlzLmNvbnRleHQuY2xlYXIoKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5jbGVhckJlZm9yZVJlbmRlcilcbiAgICB7XG4gICAgICAgIGlmICh0aGlzLnRyYW5zcGFyZW50KVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmNvbnRleHQuY2xlYXJSZWN0KDAsIDAsIHRoaXMud2lkdGgsIHRoaXMuaGVpZ2h0KTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuY29udGV4dC5maWxsU3R5bGUgPSB0aGlzLl9iYWNrZ3JvdW5kQ29sb3JTdHJpbmc7XG4gICAgICAgICAgICB0aGlzLmNvbnRleHQuZmlsbFJlY3QoMCwgMCwgdGhpcy53aWR0aCAsIHRoaXMuaGVpZ2h0KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMucmVuZGVyRGlzcGxheU9iamVjdChvYmplY3QsIHRoaXMuY29udGV4dCk7XG5cbiAgICB0aGlzLmVtaXQoJ3Bvc3RyZW5kZXInKTtcbn07XG5cbi8qKlxuICogUmVtb3ZlcyBldmVyeXRoaW5nIGZyb20gdGhlIHJlbmRlcmVyIGFuZCBvcHRpb25hbGx5IHJlbW92ZXMgdGhlIENhbnZhcyBET00gZWxlbWVudC5cbiAqXG4gKiBAcGFyYW0gW3JlbW92ZVZpZXc9ZmFsc2VdIHtib29sZWFufSBSZW1vdmVzIHRoZSBDYW52YXMgZWxlbWVudCBmcm9tIHRoZSBET00uXG4gKi9cbkNhbnZhc1JlbmRlcmVyLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKHJlbW92ZVZpZXcpXG57XG4gICAgdGhpcy5kZXN0cm95UGx1Z2lucygpO1xuXG4gICAgLy8gY2FsbCB0aGUgYmFzZSBkZXN0cm95XG4gICAgU3lzdGVtUmVuZGVyZXIucHJvdG90eXBlLmRlc3Ryb3kuY2FsbCh0aGlzLCByZW1vdmVWaWV3KTtcblxuICAgIHRoaXMuY29udGV4dCA9IG51bGw7XG5cbiAgICB0aGlzLnJlZnJlc2ggPSB0cnVlO1xuXG4gICAgdGhpcy5tYXNrTWFuYWdlci5kZXN0cm95KCk7XG4gICAgdGhpcy5tYXNrTWFuYWdlciA9IG51bGw7XG5cbiAgICB0aGlzLnNtb290aFByb3BlcnR5ID0gbnVsbDtcbn07XG5cbi8qKlxuICogUmVuZGVycyBhIGRpc3BsYXkgb2JqZWN0XG4gKlxuICogQHBhcmFtIGRpc3BsYXlPYmplY3Qge1BJWEkuRGlzcGxheU9iamVjdH0gVGhlIGRpc3BsYXlPYmplY3QgdG8gcmVuZGVyXG4gKiBAcHJpdmF0ZVxuICovXG5DYW52YXNSZW5kZXJlci5wcm90b3R5cGUucmVuZGVyRGlzcGxheU9iamVjdCA9IGZ1bmN0aW9uIChkaXNwbGF5T2JqZWN0LCBjb250ZXh0KVxue1xuICAgIHZhciB0ZW1wQ29udGV4dCA9IHRoaXMuY29udGV4dDtcblxuICAgIHRoaXMuY29udGV4dCA9IGNvbnRleHQ7XG4gICAgZGlzcGxheU9iamVjdC5yZW5kZXJDYW52YXModGhpcyk7XG4gICAgdGhpcy5jb250ZXh0ID0gdGVtcENvbnRleHQ7XG59O1xuXG4vKipcbiAqIEBleHRlbmRzIFBJWEkuU3lzdGVtUmVuZGVyZXIjcmVzaXplXG4gKlxuICogQHBhcmFtIHtudW1iZXJ9IHdcbiAqIEBwYXJhbSB7bnVtYmVyfSBoXG4gKi9cbkNhbnZhc1JlbmRlcmVyLnByb3RvdHlwZS5yZXNpemUgPSBmdW5jdGlvbiAodywgaClcbntcbiAgICBTeXN0ZW1SZW5kZXJlci5wcm90b3R5cGUucmVzaXplLmNhbGwodGhpcywgdywgaCk7XG5cbiAgICAvL3Jlc2V0IHRoZSBzY2FsZSBtb2RlLi4gb2RkbHkgdGhpcyBzZWVtcyB0byBiZSByZXNldCB3aGVuIHRoZSBjYW52YXMgaXMgcmVzaXplZC5cbiAgICAvL3N1cmVseSBhIGJyb3dzZXIgYnVnPz8gTGV0IHBpeGkgZml4IHRoYXQgZm9yIHlvdS4uXG4gICAgaWYodGhpcy5zbW9vdGhQcm9wZXJ0eSlcbiAgICB7XG4gICAgICAgIHRoaXMuY29udGV4dFt0aGlzLnNtb290aFByb3BlcnR5XSA9IChDT05TVC5TQ0FMRV9NT0RFUy5ERUZBVUxUID09PSBDT05TVC5TQ0FMRV9NT0RFUy5MSU5FQVIpO1xuICAgIH1cblxufTtcblxuLyoqXG4gKiBNYXBzIFBpeGkgYmxlbmQgbW9kZXMgdG8gY2FudmFzIGJsZW5kIG1vZGVzLlxuICpcbiAqIEBwcml2YXRlXG4gKi9cbkNhbnZhc1JlbmRlcmVyLnByb3RvdHlwZS5fbWFwQmxlbmRNb2RlcyA9IGZ1bmN0aW9uICgpXG57XG4gICAgaWYgKCF0aGlzLmJsZW5kTW9kZXMpXG4gICAge1xuICAgICAgICB0aGlzLmJsZW5kTW9kZXMgPSB7fTtcblxuICAgICAgICBpZiAodXRpbHMuY2FuVXNlTmV3Q2FudmFzQmxlbmRNb2RlcygpKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuTk9STUFMXSAgICAgICAgPSAnc291cmNlLW92ZXInO1xuICAgICAgICAgICAgdGhpcy5ibGVuZE1vZGVzW0NPTlNULkJMRU5EX01PREVTLkFERF0gICAgICAgICAgID0gJ2xpZ2h0ZXInOyAvL0lTIFRISVMgT0s/Pz9cbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5NVUxUSVBMWV0gICAgICA9ICdtdWx0aXBseSc7XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuU0NSRUVOXSAgICAgICAgPSAnc2NyZWVuJztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5PVkVSTEFZXSAgICAgICA9ICdvdmVybGF5JztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5EQVJLRU5dICAgICAgICA9ICdkYXJrZW4nO1xuICAgICAgICAgICAgdGhpcy5ibGVuZE1vZGVzW0NPTlNULkJMRU5EX01PREVTLkxJR0hURU5dICAgICAgID0gJ2xpZ2h0ZW4nO1xuICAgICAgICAgICAgdGhpcy5ibGVuZE1vZGVzW0NPTlNULkJMRU5EX01PREVTLkNPTE9SX0RPREdFXSAgID0gJ2NvbG9yLWRvZGdlJztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5DT0xPUl9CVVJOXSAgICA9ICdjb2xvci1idXJuJztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5IQVJEX0xJR0hUXSAgICA9ICdoYXJkLWxpZ2h0JztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5TT0ZUX0xJR0hUXSAgICA9ICdzb2Z0LWxpZ2h0JztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5ESUZGRVJFTkNFXSAgICA9ICdkaWZmZXJlbmNlJztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5FWENMVVNJT05dICAgICA9ICdleGNsdXNpb24nO1xuICAgICAgICAgICAgdGhpcy5ibGVuZE1vZGVzW0NPTlNULkJMRU5EX01PREVTLkhVRV0gICAgICAgICAgID0gJ2h1ZSc7XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuU0FUVVJBVElPTl0gICAgPSAnc2F0dXJhdGUnO1xuICAgICAgICAgICAgdGhpcy5ibGVuZE1vZGVzW0NPTlNULkJMRU5EX01PREVTLkNPTE9SXSAgICAgICAgID0gJ2NvbG9yJztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5MVU1JTk9TSVRZXSAgICA9ICdsdW1pbm9zaXR5JztcbiAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgIHtcbiAgICAgICAgICAgIC8vIHRoaXMgbWVhbnMgdGhhdCB0aGUgYnJvd3NlciBkb2VzIG5vdCBzdXBwb3J0IHRoZSBjb29sIG5ldyBibGVuZCBtb2RlcyBpbiBjYW52YXMgJ2NvdWdoJyBpZSAnY291Z2gnXG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuTk9STUFMXSAgICAgICAgPSAnc291cmNlLW92ZXInO1xuICAgICAgICAgICAgdGhpcy5ibGVuZE1vZGVzW0NPTlNULkJMRU5EX01PREVTLkFERF0gICAgICAgICAgID0gJ2xpZ2h0ZXInOyAvL0lTIFRISVMgT0s/Pz9cbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5NVUxUSVBMWV0gICAgICA9ICdzb3VyY2Utb3Zlcic7XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuU0NSRUVOXSAgICAgICAgPSAnc291cmNlLW92ZXInO1xuICAgICAgICAgICAgdGhpcy5ibGVuZE1vZGVzW0NPTlNULkJMRU5EX01PREVTLk9WRVJMQVldICAgICAgID0gJ3NvdXJjZS1vdmVyJztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5EQVJLRU5dICAgICAgICA9ICdzb3VyY2Utb3Zlcic7XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuTElHSFRFTl0gICAgICAgPSAnc291cmNlLW92ZXInO1xuICAgICAgICAgICAgdGhpcy5ibGVuZE1vZGVzW0NPTlNULkJMRU5EX01PREVTLkNPTE9SX0RPREdFXSAgID0gJ3NvdXJjZS1vdmVyJztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5DT0xPUl9CVVJOXSAgICA9ICdzb3VyY2Utb3Zlcic7XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuSEFSRF9MSUdIVF0gICAgPSAnc291cmNlLW92ZXInO1xuICAgICAgICAgICAgdGhpcy5ibGVuZE1vZGVzW0NPTlNULkJMRU5EX01PREVTLlNPRlRfTElHSFRdICAgID0gJ3NvdXJjZS1vdmVyJztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5ESUZGRVJFTkNFXSAgICA9ICdzb3VyY2Utb3Zlcic7XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuRVhDTFVTSU9OXSAgICAgPSAnc291cmNlLW92ZXInO1xuICAgICAgICAgICAgdGhpcy5ibGVuZE1vZGVzW0NPTlNULkJMRU5EX01PREVTLkhVRV0gICAgICAgICAgID0gJ3NvdXJjZS1vdmVyJztcbiAgICAgICAgICAgIHRoaXMuYmxlbmRNb2Rlc1tDT05TVC5CTEVORF9NT0RFUy5TQVRVUkFUSU9OXSAgICA9ICdzb3VyY2Utb3Zlcic7XG4gICAgICAgICAgICB0aGlzLmJsZW5kTW9kZXNbQ09OU1QuQkxFTkRfTU9ERVMuQ09MT1JdICAgICAgICAgPSAnc291cmNlLW92ZXInO1xuICAgICAgICAgICAgdGhpcy5ibGVuZE1vZGVzW0NPTlNULkJMRU5EX01PREVTLkxVTUlOT1NJVFldICAgID0gJ3NvdXJjZS1vdmVyJztcbiAgICAgICAgfVxuICAgIH1cbn07XG4iLCIvKipcbiAqIENyZWF0ZXMgYSBDYW52YXMgZWxlbWVudCBvZiB0aGUgZ2l2ZW4gc2l6ZS5cbiAqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gd2lkdGgge251bWJlcn0gdGhlIHdpZHRoIGZvciB0aGUgbmV3bHkgY3JlYXRlZCBjYW52YXNcbiAqIEBwYXJhbSBoZWlnaHQge251bWJlcn0gdGhlIGhlaWdodCBmb3IgdGhlIG5ld2x5IGNyZWF0ZWQgY2FudmFzXG4gKi9cbmZ1bmN0aW9uIENhbnZhc0J1ZmZlcih3aWR0aCwgaGVpZ2h0KVxue1xuICAgIC8qKlxuICAgICAqIFRoZSBDYW52YXMgb2JqZWN0IHRoYXQgYmVsb25ncyB0byB0aGlzIENhbnZhc0J1ZmZlci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge0hUTUxDYW52YXNFbGVtZW50fVxuICAgICAqL1xuICAgIHRoaXMuY2FudmFzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnY2FudmFzJyk7XG5cbiAgICAvKipcbiAgICAgKiBBIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRCBvYmplY3QgcmVwcmVzZW50aW5nIGEgdHdvLWRpbWVuc2lvbmFsIHJlbmRlcmluZyBjb250ZXh0LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEfVxuICAgICAqL1xuICAgIHRoaXMuY29udGV4dCA9IHRoaXMuY2FudmFzLmdldENvbnRleHQoJzJkJyk7XG5cbiAgICB0aGlzLmNhbnZhcy53aWR0aCA9IHdpZHRoO1xuICAgIHRoaXMuY2FudmFzLmhlaWdodCA9IGhlaWdodDtcbn1cblxuQ2FudmFzQnVmZmVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IENhbnZhc0J1ZmZlcjtcbm1vZHVsZS5leHBvcnRzID0gQ2FudmFzQnVmZmVyO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhDYW52YXNCdWZmZXIucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogVGhlIHdpZHRoIG9mIHRoZSBjYW52YXMgYnVmZmVyIGluIHBpeGVscy5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5DYW52YXNCdWZmZXIjXG4gICAgICovXG4gICAgd2lkdGg6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jYW52YXMud2lkdGg7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbClcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5jYW52YXMud2lkdGggPSB2YWw7XG4gICAgICAgIH1cbiAgICB9LFxuICAgIC8qKlxuICAgICAqIFRoZSBoZWlnaHQgb2YgdGhlIGNhbnZhcyBidWZmZXIgaW4gcGl4ZWxzLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLkNhbnZhc0J1ZmZlciNcbiAgICAgKi9cbiAgICBoZWlnaHQ6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jYW52YXMuaGVpZ2h0O1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWwpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuY2FudmFzLmhlaWdodCA9IHZhbDtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuXG4vKipcbiAqIENsZWFycyB0aGUgY2FudmFzIHRoYXQgd2FzIGNyZWF0ZWQgYnkgdGhlIENhbnZhc0J1ZmZlciBjbGFzcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5DYW52YXNCdWZmZXIucHJvdG90eXBlLmNsZWFyID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLmNvbnRleHQuc2V0VHJhbnNmb3JtKDEsIDAsIDAsIDEsIDAsIDApO1xuICAgIHRoaXMuY29udGV4dC5jbGVhclJlY3QoMCwwLCB0aGlzLmNhbnZhcy53aWR0aCwgdGhpcy5jYW52YXMuaGVpZ2h0KTtcbn07XG5cbi8qKlxuICogUmVzaXplcyB0aGUgY2FudmFzIHRvIHRoZSBzcGVjaWZpZWQgd2lkdGggYW5kIGhlaWdodC5cbiAqXG4gKiBAcGFyYW0gd2lkdGgge251bWJlcn0gdGhlIG5ldyB3aWR0aCBvZiB0aGUgY2FudmFzXG4gKiBAcGFyYW0gaGVpZ2h0IHtudW1iZXJ9IHRoZSBuZXcgaGVpZ2h0IG9mIHRoZSBjYW52YXNcbiAqL1xuQ2FudmFzQnVmZmVyLnByb3RvdHlwZS5yZXNpemUgPSBmdW5jdGlvbiAod2lkdGgsIGhlaWdodClcbntcbiAgICB0aGlzLmNhbnZhcy53aWR0aCA9IHdpZHRoO1xuICAgIHRoaXMuY2FudmFzLmhlaWdodCA9IGhlaWdodDtcbn07XG5cbi8qKlxuICogRGVzdHJveXMgdGhpcyBjYW52YXMuXG4gKlxuICovXG5DYW52YXNCdWZmZXIucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoKVxue1xuICAgIHRoaXMuY29udGV4dCA9IG51bGw7XG4gICAgdGhpcy5jYW52YXMgPSBudWxsO1xufTtcbiIsInZhciBDT05TVCA9IHJlcXVpcmUoJy4uLy4uLy4uL2NvbnN0Jyk7XG5cbi8qKlxuICogQSBzZXQgb2YgZnVuY3Rpb25zIHVzZWQgYnkgdGhlIGNhbnZhcyByZW5kZXJlciB0byBkcmF3IHRoZSBwcmltaXRpdmUgZ3JhcGhpY3MgZGF0YS5cbiAqIEBzdGF0aWNcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqL1xudmFyIENhbnZhc0dyYXBoaWNzID0ge307XG5tb2R1bGUuZXhwb3J0cyA9IENhbnZhc0dyYXBoaWNzO1xuXG4vKlxuICogUmVuZGVycyBhIEdyYXBoaWNzIG9iamVjdCB0byBhIGNhbnZhcy5cbiAqXG4gKiBAcGFyYW0gZ3JhcGhpY3Mge1BJWEkuR3JhcGhpY3N9IHRoZSBhY3R1YWwgZ3JhcGhpY3Mgb2JqZWN0IHRvIHJlbmRlclxuICogQHBhcmFtIGNvbnRleHQge0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRH0gdGhlIDJkIGRyYXdpbmcgbWV0aG9kIG9mIHRoZSBjYW52YXNcbiAqL1xuQ2FudmFzR3JhcGhpY3MucmVuZGVyR3JhcGhpY3MgPSBmdW5jdGlvbiAoZ3JhcGhpY3MsIGNvbnRleHQpXG57XG4gICAgdmFyIHdvcmxkQWxwaGEgPSBncmFwaGljcy53b3JsZEFscGhhO1xuXG4gICAgaWYgKGdyYXBoaWNzLmRpcnR5KVxuICAgIHtcbiAgICAgICAgdGhpcy51cGRhdGVHcmFwaGljc1RpbnQoZ3JhcGhpY3MpO1xuICAgICAgICBncmFwaGljcy5kaXJ0eSA9IGZhbHNlO1xuICAgIH1cblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZ3JhcGhpY3MuZ3JhcGhpY3NEYXRhLmxlbmd0aDsgaSsrKVxuICAgIHtcbiAgICAgICAgdmFyIGRhdGEgPSBncmFwaGljcy5ncmFwaGljc0RhdGFbaV07XG4gICAgICAgIHZhciBzaGFwZSA9IGRhdGEuc2hhcGU7XG5cbiAgICAgICAgdmFyIGZpbGxDb2xvciA9IGRhdGEuX2ZpbGxUaW50O1xuICAgICAgICB2YXIgbGluZUNvbG9yID0gZGF0YS5fbGluZVRpbnQ7XG5cbiAgICAgICAgY29udGV4dC5saW5lV2lkdGggPSBkYXRhLmxpbmVXaWR0aDtcblxuICAgICAgICBpZiAoZGF0YS50eXBlID09PSBDT05TVC5TSEFQRVMuUE9MWSlcbiAgICAgICAge1xuICAgICAgICAgICAgY29udGV4dC5iZWdpblBhdGgoKTtcblxuICAgICAgICAgICAgdmFyIHBvaW50cyA9IHNoYXBlLnBvaW50cztcblxuICAgICAgICAgICAgY29udGV4dC5tb3ZlVG8ocG9pbnRzWzBdLCBwb2ludHNbMV0pO1xuXG4gICAgICAgICAgICBmb3IgKHZhciBqPTE7IGogPCBwb2ludHMubGVuZ3RoLzI7IGorKylcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb250ZXh0LmxpbmVUbyhwb2ludHNbaiAqIDJdLCBwb2ludHNbaiAqIDIgKyAxXSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChzaGFwZS5jbG9zZWQpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29udGV4dC5saW5lVG8ocG9pbnRzWzBdLCBwb2ludHNbMV0pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBpZiB0aGUgZmlyc3QgYW5kIGxhc3QgcG9pbnQgYXJlIHRoZSBzYW1lIGNsb3NlIHRoZSBwYXRoIC0gbXVjaCBuZWF0ZXIgOilcbiAgICAgICAgICAgIGlmIChwb2ludHNbMF0gPT09IHBvaW50c1twb2ludHMubGVuZ3RoLTJdICYmIHBvaW50c1sxXSA9PT0gcG9pbnRzW3BvaW50cy5sZW5ndGgtMV0pXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29udGV4dC5jbG9zZVBhdGgoKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGRhdGEuZmlsbClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb250ZXh0Lmdsb2JhbEFscGhhID0gZGF0YS5maWxsQWxwaGEgKiB3b3JsZEFscGhhO1xuICAgICAgICAgICAgICAgIGNvbnRleHQuZmlsbFN0eWxlID0gJyMnICsgKCcwMDAwMCcgKyAoIGZpbGxDb2xvciB8IDApLnRvU3RyaW5nKDE2KSkuc3Vic3RyKC02KTtcbiAgICAgICAgICAgICAgICBjb250ZXh0LmZpbGwoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChkYXRhLmxpbmVXaWR0aClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb250ZXh0Lmdsb2JhbEFscGhhID0gZGF0YS5saW5lQWxwaGEgKiB3b3JsZEFscGhhO1xuICAgICAgICAgICAgICAgIGNvbnRleHQuc3Ryb2tlU3R5bGUgPSAnIycgKyAoJzAwMDAwJyArICggbGluZUNvbG9yIHwgMCkudG9TdHJpbmcoMTYpKS5zdWJzdHIoLTYpO1xuICAgICAgICAgICAgICAgIGNvbnRleHQuc3Ryb2tlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoZGF0YS50eXBlID09PSBDT05TVC5TSEFQRVMuUkVDVClcbiAgICAgICAge1xuXG4gICAgICAgICAgICBpZiAoZGF0YS5maWxsQ29sb3IgfHwgZGF0YS5maWxsQ29sb3IgPT09IDApXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29udGV4dC5nbG9iYWxBbHBoYSA9IGRhdGEuZmlsbEFscGhhICogd29ybGRBbHBoYTtcbiAgICAgICAgICAgICAgICBjb250ZXh0LmZpbGxTdHlsZSA9ICcjJyArICgnMDAwMDAnICsgKCBmaWxsQ29sb3IgfCAwKS50b1N0cmluZygxNikpLnN1YnN0cigtNik7XG4gICAgICAgICAgICAgICAgY29udGV4dC5maWxsUmVjdChzaGFwZS54LCBzaGFwZS55LCBzaGFwZS53aWR0aCwgc2hhcGUuaGVpZ2h0KTtcblxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGRhdGEubGluZVdpZHRoKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGNvbnRleHQuZ2xvYmFsQWxwaGEgPSBkYXRhLmxpbmVBbHBoYSAqIHdvcmxkQWxwaGE7XG4gICAgICAgICAgICAgICAgY29udGV4dC5zdHJva2VTdHlsZSA9ICcjJyArICgnMDAwMDAnICsgKCBsaW5lQ29sb3IgfCAwKS50b1N0cmluZygxNikpLnN1YnN0cigtNik7XG4gICAgICAgICAgICAgICAgY29udGV4dC5zdHJva2VSZWN0KHNoYXBlLngsIHNoYXBlLnksIHNoYXBlLndpZHRoLCBzaGFwZS5oZWlnaHQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGRhdGEudHlwZSA9PT0gQ09OU1QuU0hBUEVTLkNJUkMpXG4gICAgICAgIHtcbiAgICAgICAgICAgIC8vIFRPRE8gLSBuZWVkIHRvIGJlIFVuZGVmaW5lZCFcbiAgICAgICAgICAgIGNvbnRleHQuYmVnaW5QYXRoKCk7XG4gICAgICAgICAgICBjb250ZXh0LmFyYyhzaGFwZS54LCBzaGFwZS55LCBzaGFwZS5yYWRpdXMsMCwyKk1hdGguUEkpO1xuICAgICAgICAgICAgY29udGV4dC5jbG9zZVBhdGgoKTtcblxuICAgICAgICAgICAgaWYgKGRhdGEuZmlsbClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb250ZXh0Lmdsb2JhbEFscGhhID0gZGF0YS5maWxsQWxwaGEgKiB3b3JsZEFscGhhO1xuICAgICAgICAgICAgICAgIGNvbnRleHQuZmlsbFN0eWxlID0gJyMnICsgKCcwMDAwMCcgKyAoIGZpbGxDb2xvciB8IDApLnRvU3RyaW5nKDE2KSkuc3Vic3RyKC02KTtcbiAgICAgICAgICAgICAgICBjb250ZXh0LmZpbGwoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChkYXRhLmxpbmVXaWR0aClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb250ZXh0Lmdsb2JhbEFscGhhID0gZGF0YS5saW5lQWxwaGEgKiB3b3JsZEFscGhhO1xuICAgICAgICAgICAgICAgIGNvbnRleHQuc3Ryb2tlU3R5bGUgPSAnIycgKyAoJzAwMDAwJyArICggbGluZUNvbG9yIHwgMCkudG9TdHJpbmcoMTYpKS5zdWJzdHIoLTYpO1xuICAgICAgICAgICAgICAgIGNvbnRleHQuc3Ryb2tlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoZGF0YS50eXBlID09PSBDT05TVC5TSEFQRVMuRUxJUClcbiAgICAgICAge1xuICAgICAgICAgICAgLy8gZWxsaXBzZSBjb2RlIHRha2VuIGZyb206IGh0dHA6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvMjE3Mjc5OC9ob3ctdG8tZHJhdy1hbi1vdmFsLWluLWh0bWw1LWNhbnZhc1xuXG4gICAgICAgICAgICB2YXIgdyA9IHNoYXBlLndpZHRoICogMjtcbiAgICAgICAgICAgIHZhciBoID0gc2hhcGUuaGVpZ2h0ICogMjtcblxuICAgICAgICAgICAgdmFyIHggPSBzaGFwZS54IC0gdy8yO1xuICAgICAgICAgICAgdmFyIHkgPSBzaGFwZS55IC0gaC8yO1xuXG4gICAgICAgICAgICBjb250ZXh0LmJlZ2luUGF0aCgpO1xuXG4gICAgICAgICAgICB2YXIga2FwcGEgPSAwLjU1MjI4NDgsXG4gICAgICAgICAgICAgICAgb3ggPSAodyAvIDIpICoga2FwcGEsIC8vIGNvbnRyb2wgcG9pbnQgb2Zmc2V0IGhvcml6b250YWxcbiAgICAgICAgICAgICAgICBveSA9IChoIC8gMikgKiBrYXBwYSwgLy8gY29udHJvbCBwb2ludCBvZmZzZXQgdmVydGljYWxcbiAgICAgICAgICAgICAgICB4ZSA9IHggKyB3LCAgICAgICAgICAgLy8geC1lbmRcbiAgICAgICAgICAgICAgICB5ZSA9IHkgKyBoLCAgICAgICAgICAgLy8geS1lbmRcbiAgICAgICAgICAgICAgICB4bSA9IHggKyB3IC8gMiwgICAgICAgLy8geC1taWRkbGVcbiAgICAgICAgICAgICAgICB5bSA9IHkgKyBoIC8gMjsgICAgICAgLy8geS1taWRkbGVcblxuICAgICAgICAgICAgY29udGV4dC5tb3ZlVG8oeCwgeW0pO1xuICAgICAgICAgICAgY29udGV4dC5iZXppZXJDdXJ2ZVRvKHgsIHltIC0gb3ksIHhtIC0gb3gsIHksIHhtLCB5KTtcbiAgICAgICAgICAgIGNvbnRleHQuYmV6aWVyQ3VydmVUbyh4bSArIG94LCB5LCB4ZSwgeW0gLSBveSwgeGUsIHltKTtcbiAgICAgICAgICAgIGNvbnRleHQuYmV6aWVyQ3VydmVUbyh4ZSwgeW0gKyBveSwgeG0gKyBveCwgeWUsIHhtLCB5ZSk7XG4gICAgICAgICAgICBjb250ZXh0LmJlemllckN1cnZlVG8oeG0gLSBveCwgeWUsIHgsIHltICsgb3ksIHgsIHltKTtcblxuICAgICAgICAgICAgY29udGV4dC5jbG9zZVBhdGgoKTtcblxuICAgICAgICAgICAgaWYgKGRhdGEuZmlsbClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb250ZXh0Lmdsb2JhbEFscGhhID0gZGF0YS5maWxsQWxwaGEgKiB3b3JsZEFscGhhO1xuICAgICAgICAgICAgICAgIGNvbnRleHQuZmlsbFN0eWxlID0gJyMnICsgKCcwMDAwMCcgKyAoIGZpbGxDb2xvciB8IDApLnRvU3RyaW5nKDE2KSkuc3Vic3RyKC02KTtcbiAgICAgICAgICAgICAgICBjb250ZXh0LmZpbGwoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChkYXRhLmxpbmVXaWR0aClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb250ZXh0Lmdsb2JhbEFscGhhID0gZGF0YS5saW5lQWxwaGEgKiB3b3JsZEFscGhhO1xuICAgICAgICAgICAgICAgIGNvbnRleHQuc3Ryb2tlU3R5bGUgPSAnIycgKyAoJzAwMDAwJyArICggbGluZUNvbG9yIHwgMCkudG9TdHJpbmcoMTYpKS5zdWJzdHIoLTYpO1xuICAgICAgICAgICAgICAgIGNvbnRleHQuc3Ryb2tlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoZGF0YS50eXBlID09PSBDT05TVC5TSEFQRVMuUlJFQylcbiAgICAgICAge1xuICAgICAgICAgICAgdmFyIHJ4ID0gc2hhcGUueDtcbiAgICAgICAgICAgIHZhciByeSA9IHNoYXBlLnk7XG4gICAgICAgICAgICB2YXIgd2lkdGggPSBzaGFwZS53aWR0aDtcbiAgICAgICAgICAgIHZhciBoZWlnaHQgPSBzaGFwZS5oZWlnaHQ7XG4gICAgICAgICAgICB2YXIgcmFkaXVzID0gc2hhcGUucmFkaXVzO1xuXG4gICAgICAgICAgICB2YXIgbWF4UmFkaXVzID0gTWF0aC5taW4od2lkdGgsIGhlaWdodCkgLyAyIHwgMDtcbiAgICAgICAgICAgIHJhZGl1cyA9IHJhZGl1cyA+IG1heFJhZGl1cyA/IG1heFJhZGl1cyA6IHJhZGl1cztcblxuICAgICAgICAgICAgY29udGV4dC5iZWdpblBhdGgoKTtcbiAgICAgICAgICAgIGNvbnRleHQubW92ZVRvKHJ4LCByeSArIHJhZGl1cyk7XG4gICAgICAgICAgICBjb250ZXh0LmxpbmVUbyhyeCwgcnkgKyBoZWlnaHQgLSByYWRpdXMpO1xuICAgICAgICAgICAgY29udGV4dC5xdWFkcmF0aWNDdXJ2ZVRvKHJ4LCByeSArIGhlaWdodCwgcnggKyByYWRpdXMsIHJ5ICsgaGVpZ2h0KTtcbiAgICAgICAgICAgIGNvbnRleHQubGluZVRvKHJ4ICsgd2lkdGggLSByYWRpdXMsIHJ5ICsgaGVpZ2h0KTtcbiAgICAgICAgICAgIGNvbnRleHQucXVhZHJhdGljQ3VydmVUbyhyeCArIHdpZHRoLCByeSArIGhlaWdodCwgcnggKyB3aWR0aCwgcnkgKyBoZWlnaHQgLSByYWRpdXMpO1xuICAgICAgICAgICAgY29udGV4dC5saW5lVG8ocnggKyB3aWR0aCwgcnkgKyByYWRpdXMpO1xuICAgICAgICAgICAgY29udGV4dC5xdWFkcmF0aWNDdXJ2ZVRvKHJ4ICsgd2lkdGgsIHJ5LCByeCArIHdpZHRoIC0gcmFkaXVzLCByeSk7XG4gICAgICAgICAgICBjb250ZXh0LmxpbmVUbyhyeCArIHJhZGl1cywgcnkpO1xuICAgICAgICAgICAgY29udGV4dC5xdWFkcmF0aWNDdXJ2ZVRvKHJ4LCByeSwgcngsIHJ5ICsgcmFkaXVzKTtcbiAgICAgICAgICAgIGNvbnRleHQuY2xvc2VQYXRoKCk7XG5cbiAgICAgICAgICAgIGlmIChkYXRhLmZpbGxDb2xvciB8fCBkYXRhLmZpbGxDb2xvciA9PT0gMClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb250ZXh0Lmdsb2JhbEFscGhhID0gZGF0YS5maWxsQWxwaGEgKiB3b3JsZEFscGhhO1xuICAgICAgICAgICAgICAgIGNvbnRleHQuZmlsbFN0eWxlID0gJyMnICsgKCcwMDAwMCcgKyAoIGZpbGxDb2xvciB8IDApLnRvU3RyaW5nKDE2KSkuc3Vic3RyKC02KTtcbiAgICAgICAgICAgICAgICBjb250ZXh0LmZpbGwoKTtcblxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGRhdGEubGluZVdpZHRoKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGNvbnRleHQuZ2xvYmFsQWxwaGEgPSBkYXRhLmxpbmVBbHBoYSAqIHdvcmxkQWxwaGE7XG4gICAgICAgICAgICAgICAgY29udGV4dC5zdHJva2VTdHlsZSA9ICcjJyArICgnMDAwMDAnICsgKCBsaW5lQ29sb3IgfCAwKS50b1N0cmluZygxNikpLnN1YnN0cigtNik7XG4gICAgICAgICAgICAgICAgY29udGV4dC5zdHJva2UoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn07XG5cbi8qXG4gKiBSZW5kZXJzIGEgZ3JhcGhpY3MgbWFza1xuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0gZ3JhcGhpY3Mge1BJWEkuR3JhcGhpY3N9IHRoZSBncmFwaGljcyB3aGljaCB3aWxsIGJlIHVzZWQgYXMgYSBtYXNrXG4gKiBAcGFyYW0gY29udGV4dCB7Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEfSB0aGUgY29udGV4dCAyZCBtZXRob2Qgb2YgdGhlIGNhbnZhc1xuICovXG5DYW52YXNHcmFwaGljcy5yZW5kZXJHcmFwaGljc01hc2sgPSBmdW5jdGlvbiAoZ3JhcGhpY3MsIGNvbnRleHQpXG57XG4gICAgdmFyIGxlbiA9IGdyYXBoaWNzLmdyYXBoaWNzRGF0YS5sZW5ndGg7XG5cbiAgICBpZiAobGVuID09PSAwKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnRleHQuYmVnaW5QYXRoKCk7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgaSsrKVxuICAgIHtcbiAgICAgICAgdmFyIGRhdGEgPSBncmFwaGljcy5ncmFwaGljc0RhdGFbaV07XG4gICAgICAgIHZhciBzaGFwZSA9IGRhdGEuc2hhcGU7XG5cbiAgICAgICAgaWYgKGRhdGEudHlwZSA9PT0gQ09OU1QuU0hBUEVTLlBPTFkpXG4gICAgICAgIHtcblxuICAgICAgICAgICAgdmFyIHBvaW50cyA9IHNoYXBlLnBvaW50cztcblxuICAgICAgICAgICAgY29udGV4dC5tb3ZlVG8ocG9pbnRzWzBdLCBwb2ludHNbMV0pO1xuXG4gICAgICAgICAgICBmb3IgKHZhciBqPTE7IGogPCBwb2ludHMubGVuZ3RoLzI7IGorKylcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb250ZXh0LmxpbmVUbyhwb2ludHNbaiAqIDJdLCBwb2ludHNbaiAqIDIgKyAxXSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIGlmIHRoZSBmaXJzdCBhbmQgbGFzdCBwb2ludCBhcmUgdGhlIHNhbWUgY2xvc2UgdGhlIHBhdGggLSBtdWNoIG5lYXRlciA6KVxuICAgICAgICAgICAgaWYgKHBvaW50c1swXSA9PT0gcG9pbnRzW3BvaW50cy5sZW5ndGgtMl0gJiYgcG9pbnRzWzFdID09PSBwb2ludHNbcG9pbnRzLmxlbmd0aC0xXSlcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb250ZXh0LmNsb3NlUGF0aCgpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoZGF0YS50eXBlID09PSBDT05TVC5TSEFQRVMuUkVDVClcbiAgICAgICAge1xuICAgICAgICAgICAgY29udGV4dC5yZWN0KHNoYXBlLngsIHNoYXBlLnksIHNoYXBlLndpZHRoLCBzaGFwZS5oZWlnaHQpO1xuICAgICAgICAgICAgY29udGV4dC5jbG9zZVBhdGgoKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChkYXRhLnR5cGUgPT09IENPTlNULlNIQVBFUy5DSVJDKVxuICAgICAgICB7XG4gICAgICAgICAgICAvLyBUT0RPIC0gbmVlZCB0byBiZSBVbmRlZmluZWQhXG4gICAgICAgICAgICBjb250ZXh0LmFyYyhzaGFwZS54LCBzaGFwZS55LCBzaGFwZS5yYWRpdXMsIDAsIDIgKiBNYXRoLlBJKTtcbiAgICAgICAgICAgIGNvbnRleHQuY2xvc2VQYXRoKCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoZGF0YS50eXBlID09PSBDT05TVC5TSEFQRVMuRUxJUClcbiAgICAgICAge1xuXG4gICAgICAgICAgICAvLyBlbGxpcHNlIGNvZGUgdGFrZW4gZnJvbTogaHR0cDovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy8yMTcyNzk4L2hvdy10by1kcmF3LWFuLW92YWwtaW4taHRtbDUtY2FudmFzXG5cbiAgICAgICAgICAgIHZhciB3ID0gc2hhcGUud2lkdGggKiAyO1xuICAgICAgICAgICAgdmFyIGggPSBzaGFwZS5oZWlnaHQgKiAyO1xuXG4gICAgICAgICAgICB2YXIgeCA9IHNoYXBlLnggLSB3LzI7XG4gICAgICAgICAgICB2YXIgeSA9IHNoYXBlLnkgLSBoLzI7XG5cbiAgICAgICAgICAgIHZhciBrYXBwYSA9IDAuNTUyMjg0OCxcbiAgICAgICAgICAgICAgICBveCA9ICh3IC8gMikgKiBrYXBwYSwgLy8gY29udHJvbCBwb2ludCBvZmZzZXQgaG9yaXpvbnRhbFxuICAgICAgICAgICAgICAgIG95ID0gKGggLyAyKSAqIGthcHBhLCAvLyBjb250cm9sIHBvaW50IG9mZnNldCB2ZXJ0aWNhbFxuICAgICAgICAgICAgICAgIHhlID0geCArIHcsICAgICAgICAgICAvLyB4LWVuZFxuICAgICAgICAgICAgICAgIHllID0geSArIGgsICAgICAgICAgICAvLyB5LWVuZFxuICAgICAgICAgICAgICAgIHhtID0geCArIHcgLyAyLCAgICAgICAvLyB4LW1pZGRsZVxuICAgICAgICAgICAgICAgIHltID0geSArIGggLyAyOyAgICAgICAvLyB5LW1pZGRsZVxuXG4gICAgICAgICAgICBjb250ZXh0Lm1vdmVUbyh4LCB5bSk7XG4gICAgICAgICAgICBjb250ZXh0LmJlemllckN1cnZlVG8oeCwgeW0gLSBveSwgeG0gLSBveCwgeSwgeG0sIHkpO1xuICAgICAgICAgICAgY29udGV4dC5iZXppZXJDdXJ2ZVRvKHhtICsgb3gsIHksIHhlLCB5bSAtIG95LCB4ZSwgeW0pO1xuICAgICAgICAgICAgY29udGV4dC5iZXppZXJDdXJ2ZVRvKHhlLCB5bSArIG95LCB4bSArIG94LCB5ZSwgeG0sIHllKTtcbiAgICAgICAgICAgIGNvbnRleHQuYmV6aWVyQ3VydmVUbyh4bSAtIG94LCB5ZSwgeCwgeW0gKyBveSwgeCwgeW0pO1xuICAgICAgICAgICAgY29udGV4dC5jbG9zZVBhdGgoKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChkYXRhLnR5cGUgPT09IENPTlNULlNIQVBFUy5SUkVDKVxuICAgICAgICB7XG5cbiAgICAgICAgICAgIHZhciByeCA9IHNoYXBlLng7XG4gICAgICAgICAgICB2YXIgcnkgPSBzaGFwZS55O1xuICAgICAgICAgICAgdmFyIHdpZHRoID0gc2hhcGUud2lkdGg7XG4gICAgICAgICAgICB2YXIgaGVpZ2h0ID0gc2hhcGUuaGVpZ2h0O1xuICAgICAgICAgICAgdmFyIHJhZGl1cyA9IHNoYXBlLnJhZGl1cztcblxuICAgICAgICAgICAgdmFyIG1heFJhZGl1cyA9IE1hdGgubWluKHdpZHRoLCBoZWlnaHQpIC8gMiB8IDA7XG4gICAgICAgICAgICByYWRpdXMgPSByYWRpdXMgPiBtYXhSYWRpdXMgPyBtYXhSYWRpdXMgOiByYWRpdXM7XG5cbiAgICAgICAgICAgIGNvbnRleHQubW92ZVRvKHJ4LCByeSArIHJhZGl1cyk7XG4gICAgICAgICAgICBjb250ZXh0LmxpbmVUbyhyeCwgcnkgKyBoZWlnaHQgLSByYWRpdXMpO1xuICAgICAgICAgICAgY29udGV4dC5xdWFkcmF0aWNDdXJ2ZVRvKHJ4LCByeSArIGhlaWdodCwgcnggKyByYWRpdXMsIHJ5ICsgaGVpZ2h0KTtcbiAgICAgICAgICAgIGNvbnRleHQubGluZVRvKHJ4ICsgd2lkdGggLSByYWRpdXMsIHJ5ICsgaGVpZ2h0KTtcbiAgICAgICAgICAgIGNvbnRleHQucXVhZHJhdGljQ3VydmVUbyhyeCArIHdpZHRoLCByeSArIGhlaWdodCwgcnggKyB3aWR0aCwgcnkgKyBoZWlnaHQgLSByYWRpdXMpO1xuICAgICAgICAgICAgY29udGV4dC5saW5lVG8ocnggKyB3aWR0aCwgcnkgKyByYWRpdXMpO1xuICAgICAgICAgICAgY29udGV4dC5xdWFkcmF0aWNDdXJ2ZVRvKHJ4ICsgd2lkdGgsIHJ5LCByeCArIHdpZHRoIC0gcmFkaXVzLCByeSk7XG4gICAgICAgICAgICBjb250ZXh0LmxpbmVUbyhyeCArIHJhZGl1cywgcnkpO1xuICAgICAgICAgICAgY29udGV4dC5xdWFkcmF0aWNDdXJ2ZVRvKHJ4LCByeSwgcngsIHJ5ICsgcmFkaXVzKTtcbiAgICAgICAgICAgIGNvbnRleHQuY2xvc2VQYXRoKCk7XG4gICAgICAgIH1cbiAgICB9XG59O1xuXG4vKlxuICogVXBkYXRlcyB0aGUgdGludCBvZiBhIGdyYXBoaWNzIG9iamVjdFxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0gZ3JhcGhpY3Mge1BJWEkuR3JhcGhpY3N9IHRoZSBncmFwaGljcyB0aGF0IHdpbGwgaGF2ZSBpdHMgdGludCB1cGRhdGVkXG4gKlxuICovXG5DYW52YXNHcmFwaGljcy51cGRhdGVHcmFwaGljc1RpbnQgPSBmdW5jdGlvbiAoZ3JhcGhpY3MpXG57XG4gICAgaWYgKGdyYXBoaWNzLnRpbnQgPT09IDB4RkZGRkZGICYmIGdyYXBoaWNzLl9wcmV2VGludCA9PT0gZ3JhcGhpY3MudGludClcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgZ3JhcGhpY3MuX3ByZXZUaW50ID0gZ3JhcGhpY3MudGludDtcblxuICAgIHZhciB0aW50UiA9IChncmFwaGljcy50aW50ID4+IDE2ICYgMHhGRikgLyAyNTU7XG4gICAgdmFyIHRpbnRHID0gKGdyYXBoaWNzLnRpbnQgPj4gOCAmIDB4RkYpIC8gMjU1O1xuICAgIHZhciB0aW50QiA9IChncmFwaGljcy50aW50ICYgMHhGRikvIDI1NTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZ3JhcGhpY3MuZ3JhcGhpY3NEYXRhLmxlbmd0aDsgaSsrKVxuICAgIHtcbiAgICAgICAgdmFyIGRhdGEgPSBncmFwaGljcy5ncmFwaGljc0RhdGFbaV07XG5cbiAgICAgICAgdmFyIGZpbGxDb2xvciA9IGRhdGEuZmlsbENvbG9yIHwgMDtcbiAgICAgICAgdmFyIGxpbmVDb2xvciA9IGRhdGEubGluZUNvbG9yIHwgMDtcblxuICAgICAgICAvKlxuICAgICAgICB2YXIgY29sb3JSID0gKGZpbGxDb2xvciA+PiAxNiAmIDB4RkYpIC8gMjU1O1xuICAgICAgICB2YXIgY29sb3JHID0gKGZpbGxDb2xvciA+PiA4ICYgMHhGRikgLyAyNTU7XG4gICAgICAgIHZhciBjb2xvckIgPSAoZmlsbENvbG9yICYgMHhGRikgLyAyNTU7XG5cbiAgICAgICAgY29sb3JSICo9IHRpbnRSO1xuICAgICAgICBjb2xvckcgKj0gdGludEc7XG4gICAgICAgIGNvbG9yQiAqPSB0aW50QjtcblxuICAgICAgICBmaWxsQ29sb3IgPSAoKGNvbG9yUioyNTUgPDwgMTYpICsgKGNvbG9yRyoyNTUgPDwgOCkgKyBjb2xvckIqMjU1KTtcblxuICAgICAgICBjb2xvclIgPSAobGluZUNvbG9yID4+IDE2ICYgMHhGRikgLyAyNTU7XG4gICAgICAgIGNvbG9yRyA9IChsaW5lQ29sb3IgPj4gOCAmIDB4RkYpIC8gMjU1O1xuICAgICAgICBjb2xvckIgPSAobGluZUNvbG9yICYgMHhGRikgLyAyNTU7XG5cbiAgICAgICAgY29sb3JSICo9IHRpbnRSO1xuICAgICAgICBjb2xvckcgKj0gdGludEc7XG4gICAgICAgIGNvbG9yQiAqPSB0aW50QjtcblxuICAgICAgICBsaW5lQ29sb3IgPSAoKGNvbG9yUioyNTUgPDwgMTYpICsgKGNvbG9yRyoyNTUgPDwgOCkgKyBjb2xvckIqMjU1KTtcbiAgICAgICAgKi9cblxuICAgICAgICAvLyBzdXBlciBpbmxpbmUgY29zIGltIGFuIG9wdGltaXphdGlvbiBOQVpJIDopXG4gICAgICAgIGRhdGEuX2ZpbGxUaW50ID0gKCgoZmlsbENvbG9yID4+IDE2ICYgMHhGRikgLyAyNTUgKiB0aW50UioyNTUgPDwgMTYpICsgKChmaWxsQ29sb3IgPj4gOCAmIDB4RkYpIC8gMjU1ICogdGludEcqMjU1IDw8IDgpICsgIChmaWxsQ29sb3IgJiAweEZGKSAvIDI1NSAqIHRpbnRCKjI1NSk7XG4gICAgICAgIGRhdGEuX2xpbmVUaW50ID0gKCgobGluZUNvbG9yID4+IDE2ICYgMHhGRikgLyAyNTUgKiB0aW50UioyNTUgPDwgMTYpICsgKChsaW5lQ29sb3IgPj4gOCAmIDB4RkYpIC8gMjU1ICogdGludEcqMjU1IDw8IDgpICsgIChsaW5lQ29sb3IgJiAweEZGKSAvIDI1NSAqIHRpbnRCKjI1NSk7XG5cbiAgICB9XG59O1xuXG4iLCJ2YXIgQ2FudmFzR3JhcGhpY3MgPSByZXF1aXJlKCcuL0NhbnZhc0dyYXBoaWNzJyk7XG5cbi8qKlxuICogQSBzZXQgb2YgZnVuY3Rpb25zIHVzZWQgdG8gaGFuZGxlIG1hc2tpbmcuXG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICovXG5mdW5jdGlvbiBDYW52YXNNYXNrTWFuYWdlcigpXG57fVxuXG5DYW52YXNNYXNrTWFuYWdlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBDYW52YXNNYXNrTWFuYWdlcjtcbm1vZHVsZS5leHBvcnRzID0gQ2FudmFzTWFza01hbmFnZXI7XG5cbi8qKlxuICogVGhpcyBtZXRob2QgYWRkcyBpdCB0byB0aGUgY3VycmVudCBzdGFjayBvZiBtYXNrcy5cbiAqXG4gKiBAcGFyYW0gbWFza0RhdGEge29iamVjdH0gdGhlIG1hc2tEYXRhIHRoYXQgd2lsbCBiZSBwdXNoZWRcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5XZWJHTFJlbmRlcmVyfFBJWEkuQ2FudmFzUmVuZGVyZXJ9IFRoZSByZW5kZXJlciBjb250ZXh0IHRvIHVzZS5cbiAqL1xuQ2FudmFzTWFza01hbmFnZXIucHJvdG90eXBlLnB1c2hNYXNrID0gZnVuY3Rpb24gKG1hc2tEYXRhLCByZW5kZXJlcilcbntcblxuICAgIHJlbmRlcmVyLmNvbnRleHQuc2F2ZSgpO1xuXG4gICAgdmFyIGNhY2hlQWxwaGEgPSBtYXNrRGF0YS5hbHBoYTtcbiAgICB2YXIgdHJhbnNmb3JtID0gbWFza0RhdGEud29ybGRUcmFuc2Zvcm07XG4gICAgdmFyIHJlc29sdXRpb24gPSByZW5kZXJlci5yZXNvbHV0aW9uO1xuXG4gICAgcmVuZGVyZXIuY29udGV4dC5zZXRUcmFuc2Zvcm0oXG4gICAgICAgIHRyYW5zZm9ybS5hICogcmVzb2x1dGlvbixcbiAgICAgICAgdHJhbnNmb3JtLmIgKiByZXNvbHV0aW9uLFxuICAgICAgICB0cmFuc2Zvcm0uYyAqIHJlc29sdXRpb24sXG4gICAgICAgIHRyYW5zZm9ybS5kICogcmVzb2x1dGlvbixcbiAgICAgICAgdHJhbnNmb3JtLnR4ICogcmVzb2x1dGlvbixcbiAgICAgICAgdHJhbnNmb3JtLnR5ICogcmVzb2x1dGlvblxuICAgICk7XG5cbiAgICAvL1RPRE8gc3Vwb3J0IHNwcml0ZSBhbHBoYSBtYXNrcz8/XG4gICAgLy9sb3RzIG9mIGVmZm9ydCByZXF1aXJlZC4gSWYgZGVtYW5kIGlzIGdyZWF0IGVub3VnaC4uXG4gICAgaWYoIW1hc2tEYXRhLnRleHR1cmUpXG4gICAge1xuICAgICAgICBDYW52YXNHcmFwaGljcy5yZW5kZXJHcmFwaGljc01hc2sobWFza0RhdGEsIHJlbmRlcmVyLmNvbnRleHQpO1xuICAgICAgICByZW5kZXJlci5jb250ZXh0LmNsaXAoKTtcbiAgICB9XG5cbiAgICBtYXNrRGF0YS53b3JsZEFscGhhID0gY2FjaGVBbHBoYTtcbn07XG5cbi8qKlxuICogUmVzdG9yZXMgdGhlIGN1cnJlbnQgZHJhd2luZyBjb250ZXh0IHRvIHRoZSBzdGF0ZSBpdCB3YXMgYmVmb3JlIHRoZSBtYXNrIHdhcyBhcHBsaWVkLlxuICpcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5XZWJHTFJlbmRlcmVyfFBJWEkuQ2FudmFzUmVuZGVyZXJ9IFRoZSByZW5kZXJlciBjb250ZXh0IHRvIHVzZS5cbiAqL1xuQ2FudmFzTWFza01hbmFnZXIucHJvdG90eXBlLnBvcE1hc2sgPSBmdW5jdGlvbiAocmVuZGVyZXIpXG57XG4gICAgcmVuZGVyZXIuY29udGV4dC5yZXN0b3JlKCk7XG59O1xuXG5DYW52YXNNYXNrTWFuYWdlci5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uICgpIHt9O1xuIiwidmFyIHV0aWxzID0gcmVxdWlyZSgnLi4vLi4vLi4vdXRpbHMnKTtcblxuLyoqXG4gKiBVdGlsaXR5IG1ldGhvZHMgZm9yIFNwcml0ZS9UZXh0dXJlIHRpbnRpbmcuXG4gKiBAc3RhdGljXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKi9cbnZhciBDYW52YXNUaW50ZXIgPSB7fTtcbm1vZHVsZS5leHBvcnRzID0gQ2FudmFzVGludGVyO1xuXG4vKipcbiAqIEJhc2ljYWxseSB0aGlzIG1ldGhvZCBqdXN0IG5lZWRzIGEgc3ByaXRlIGFuZCBhIGNvbG9yIGFuZCB0aW50cyB0aGUgc3ByaXRlIHdpdGggdGhlIGdpdmVuIGNvbG9yLlxuICpcbiAqIEBwYXJhbSBzcHJpdGUge1BJWEkuU3ByaXRlfSB0aGUgc3ByaXRlIHRvIHRpbnRcbiAqIEBwYXJhbSBjb2xvciB7bnVtYmVyfSB0aGUgY29sb3IgdG8gdXNlIHRvIHRpbnQgdGhlIHNwcml0ZSB3aXRoXG4gKiBAcmV0dXJuIHtIVE1MQ2FudmFzRWxlbWVudH0gVGhlIHRpbnRlZCBjYW52YXNcbiAqL1xuQ2FudmFzVGludGVyLmdldFRpbnRlZFRleHR1cmUgPSBmdW5jdGlvbiAoc3ByaXRlLCBjb2xvcilcbntcbiAgICB2YXIgdGV4dHVyZSA9IHNwcml0ZS50ZXh0dXJlO1xuXG4gICAgY29sb3IgPSBDYW52YXNUaW50ZXIucm91bmRDb2xvcihjb2xvcik7XG5cbiAgICB2YXIgc3RyaW5nQ29sb3IgPSAnIycgKyAoJzAwMDAwJyArICggY29sb3IgfCAwKS50b1N0cmluZygxNikpLnN1YnN0cigtNik7XG5cbiAgICB0ZXh0dXJlLnRpbnRDYWNoZSA9IHRleHR1cmUudGludENhY2hlIHx8IHt9O1xuXG4gICAgaWYgKHRleHR1cmUudGludENhY2hlW3N0cmluZ0NvbG9yXSlcbiAgICB7XG4gICAgICAgIHJldHVybiB0ZXh0dXJlLnRpbnRDYWNoZVtzdHJpbmdDb2xvcl07XG4gICAgfVxuXG4gICAgIC8vIGNsb25lIHRleHR1cmUuLlxuICAgIHZhciBjYW52YXMgPSBDYW52YXNUaW50ZXIuY2FudmFzIHx8IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NhbnZhcycpO1xuXG4gICAgLy9DYW52YXNUaW50ZXIudGludFdpdGhQZXJQaXhlbCh0ZXh0dXJlLCBzdHJpbmdDb2xvciwgY2FudmFzKTtcbiAgICBDYW52YXNUaW50ZXIudGludE1ldGhvZCh0ZXh0dXJlLCBjb2xvciwgY2FudmFzKTtcblxuICAgIGlmIChDYW52YXNUaW50ZXIuY29udmVydFRpbnRUb0ltYWdlKVxuICAgIHtcbiAgICAgICAgLy8gaXMgdGhpcyBiZXR0ZXI/XG4gICAgICAgIHZhciB0aW50SW1hZ2UgPSBuZXcgSW1hZ2UoKTtcbiAgICAgICAgdGludEltYWdlLnNyYyA9IGNhbnZhcy50b0RhdGFVUkwoKTtcblxuICAgICAgICB0ZXh0dXJlLnRpbnRDYWNoZVtzdHJpbmdDb2xvcl0gPSB0aW50SW1hZ2U7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHRleHR1cmUudGludENhY2hlW3N0cmluZ0NvbG9yXSA9IGNhbnZhcztcbiAgICAgICAgLy8gaWYgd2UgYXJlIG5vdCBjb252ZXJ0aW5nIHRoZSB0ZXh0dXJlIHRvIGFuIGltYWdlIHRoZW4gd2UgbmVlZCB0byBsb3NlIHRoZSByZWZlcmVuY2UgdG8gdGhlIGNhbnZhc1xuICAgICAgICBDYW52YXNUaW50ZXIuY2FudmFzID0gbnVsbDtcbiAgICB9XG5cbiAgICByZXR1cm4gY2FudmFzO1xufTtcblxuLyoqXG4gKiBUaW50IGEgdGV4dHVyZSB1c2luZyB0aGUgJ211bHRpcGx5JyBvcGVyYXRpb24uXG4gKlxuICogQHBhcmFtIHRleHR1cmUge1BJWEkuVGV4dHVyZX0gdGhlIHRleHR1cmUgdG8gdGludFxuICogQHBhcmFtIGNvbG9yIHtudW1iZXJ9IHRoZSBjb2xvciB0byB1c2UgdG8gdGludCB0aGUgc3ByaXRlIHdpdGhcbiAqIEBwYXJhbSBjYW52YXMge0hUTUxDYW52YXNFbGVtZW50fSB0aGUgY3VycmVudCBjYW52YXNcbiAqL1xuQ2FudmFzVGludGVyLnRpbnRXaXRoTXVsdGlwbHkgPSBmdW5jdGlvbiAodGV4dHVyZSwgY29sb3IsIGNhbnZhcylcbntcbiAgICB2YXIgY29udGV4dCA9IGNhbnZhcy5nZXRDb250ZXh0KCAnMmQnICk7XG5cbiAgICB2YXIgcmVzb2x1dGlvbiA9IHRleHR1cmUuYmFzZVRleHR1cmUucmVzb2x1dGlvbjtcblxuICAgIHZhciBjcm9wID0gdGV4dHVyZS5jcm9wLmNsb25lKCk7XG4gICAgY3JvcC54ICo9IHJlc29sdXRpb247XG4gICAgY3JvcC55ICo9IHJlc29sdXRpb247XG4gICAgY3JvcC53aWR0aCAqPSByZXNvbHV0aW9uO1xuICAgIGNyb3AuaGVpZ2h0ICo9IHJlc29sdXRpb247XG5cbiAgICBjYW52YXMud2lkdGggPSBjcm9wLndpZHRoO1xuICAgIGNhbnZhcy5oZWlnaHQgPSBjcm9wLmhlaWdodDtcblxuICAgIGNvbnRleHQuZmlsbFN0eWxlID0gJyMnICsgKCcwMDAwMCcgKyAoIGNvbG9yIHwgMCkudG9TdHJpbmcoMTYpKS5zdWJzdHIoLTYpO1xuXG4gICAgY29udGV4dC5maWxsUmVjdCgwLCAwLCBjcm9wLndpZHRoLCBjcm9wLmhlaWdodCk7XG5cbiAgICBjb250ZXh0Lmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbiA9ICdtdWx0aXBseSc7XG5cbiAgICBjb250ZXh0LmRyYXdJbWFnZShcbiAgICAgICAgdGV4dHVyZS5iYXNlVGV4dHVyZS5zb3VyY2UsXG4gICAgICAgIGNyb3AueCxcbiAgICAgICAgY3JvcC55LFxuICAgICAgICBjcm9wLndpZHRoLFxuICAgICAgICBjcm9wLmhlaWdodCxcbiAgICAgICAgMCxcbiAgICAgICAgMCxcbiAgICAgICAgY3JvcC53aWR0aCxcbiAgICAgICAgY3JvcC5oZWlnaHRcbiAgICApO1xuXG4gICAgY29udGV4dC5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb24gPSAnZGVzdGluYXRpb24tYXRvcCc7XG5cbiAgICBjb250ZXh0LmRyYXdJbWFnZShcbiAgICAgICAgdGV4dHVyZS5iYXNlVGV4dHVyZS5zb3VyY2UsXG4gICAgICAgIGNyb3AueCxcbiAgICAgICAgY3JvcC55LFxuICAgICAgICBjcm9wLndpZHRoLFxuICAgICAgICBjcm9wLmhlaWdodCxcbiAgICAgICAgMCxcbiAgICAgICAgMCxcbiAgICAgICAgY3JvcC53aWR0aCxcbiAgICAgICAgY3JvcC5oZWlnaHRcbiAgICApO1xufTtcblxuLyoqXG4gKiBUaW50IGEgdGV4dHVyZSB1c2luZyB0aGUgJ292ZXJsYXknIG9wZXJhdGlvbi5cbiAqXG4gKiBAcGFyYW0gdGV4dHVyZSB7UElYSS5UZXh0dXJlfSB0aGUgdGV4dHVyZSB0byB0aW50XG4gKiBAcGFyYW0gY29sb3Ige251bWJlcn0gdGhlIGNvbG9yIHRvIHVzZSB0byB0aW50IHRoZSBzcHJpdGUgd2l0aFxuICogQHBhcmFtIGNhbnZhcyB7SFRNTENhbnZhc0VsZW1lbnR9IHRoZSBjdXJyZW50IGNhbnZhc1xuICovXG5DYW52YXNUaW50ZXIudGludFdpdGhPdmVybGF5ID0gZnVuY3Rpb24gKHRleHR1cmUsIGNvbG9yLCBjYW52YXMpXG57XG4gICAgdmFyIGNvbnRleHQgPSBjYW52YXMuZ2V0Q29udGV4dCggJzJkJyApO1xuXG4gICAgdmFyIHJlc29sdXRpb24gPSB0ZXh0dXJlLmJhc2VUZXh0dXJlLnJlc29sdXRpb247XG5cbiAgICB2YXIgY3JvcCA9IHRleHR1cmUuY3JvcC5jbG9uZSgpO1xuICAgIGNyb3AueCAqPSByZXNvbHV0aW9uO1xuICAgIGNyb3AueSAqPSByZXNvbHV0aW9uO1xuICAgIGNyb3Aud2lkdGggKj0gcmVzb2x1dGlvbjtcbiAgICBjcm9wLmhlaWdodCAqPSByZXNvbHV0aW9uO1xuXG4gICAgY2FudmFzLndpZHRoID0gY3JvcC53aWR0aDtcbiAgICBjYW52YXMuaGVpZ2h0ID0gY3JvcC5oZWlnaHQ7XG5cbiAgICBjb250ZXh0Lmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbiA9ICdjb3B5JztcbiAgICBjb250ZXh0LmZpbGxTdHlsZSA9ICcjJyArICgnMDAwMDAnICsgKCBjb2xvciB8IDApLnRvU3RyaW5nKDE2KSkuc3Vic3RyKC02KTtcbiAgICBjb250ZXh0LmZpbGxSZWN0KDAsIDAsIGNyb3Aud2lkdGgsIGNyb3AuaGVpZ2h0KTtcblxuICAgIGNvbnRleHQuZ2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uID0gJ2Rlc3RpbmF0aW9uLWF0b3AnO1xuICAgIGNvbnRleHQuZHJhd0ltYWdlKFxuICAgICAgICB0ZXh0dXJlLmJhc2VUZXh0dXJlLnNvdXJjZSxcbiAgICAgICAgY3JvcC54LFxuICAgICAgICBjcm9wLnksXG4gICAgICAgIGNyb3Aud2lkdGgsXG4gICAgICAgIGNyb3AuaGVpZ2h0LFxuICAgICAgICAwLFxuICAgICAgICAwLFxuICAgICAgICBjcm9wLndpZHRoLFxuICAgICAgICBjcm9wLmhlaWdodFxuICAgICk7XG5cbiAgICAvLyBjb250ZXh0Lmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbiA9ICdjb3B5Jztcbn07XG5cbi8qKlxuICogVGludCBhIHRleHR1cmUgcGl4ZWwgcGVyIHBpeGVsLlxuICpcbiAqIEBwYXJhbSB0ZXh0dXJlIHtQSVhJLlRleHR1cmV9IHRoZSB0ZXh0dXJlIHRvIHRpbnRcbiAqIEBwYXJhbSBjb2xvciB7bnVtYmVyfSB0aGUgY29sb3IgdG8gdXNlIHRvIHRpbnQgdGhlIHNwcml0ZSB3aXRoXG4gKiBAcGFyYW0gY2FudmFzIHtIVE1MQ2FudmFzRWxlbWVudH0gdGhlIGN1cnJlbnQgY2FudmFzXG4gKi9cbkNhbnZhc1RpbnRlci50aW50V2l0aFBlclBpeGVsID0gZnVuY3Rpb24gKHRleHR1cmUsIGNvbG9yLCBjYW52YXMpXG57XG4gICAgdmFyIGNvbnRleHQgPSBjYW52YXMuZ2V0Q29udGV4dCggJzJkJyApO1xuXG4gICAgdmFyIHJlc29sdXRpb24gPSB0ZXh0dXJlLmJhc2VUZXh0dXJlLnJlc29sdXRpb247XG5cbiAgICB2YXIgY3JvcCA9IHRleHR1cmUuY3JvcC5jbG9uZSgpO1xuICAgIGNyb3AueCAqPSByZXNvbHV0aW9uO1xuICAgIGNyb3AueSAqPSByZXNvbHV0aW9uO1xuICAgIGNyb3Aud2lkdGggKj0gcmVzb2x1dGlvbjtcbiAgICBjcm9wLmhlaWdodCAqPSByZXNvbHV0aW9uO1xuXG4gICAgY2FudmFzLndpZHRoID0gY3JvcC53aWR0aDtcbiAgICBjYW52YXMuaGVpZ2h0ID0gY3JvcC5oZWlnaHQ7XG5cbiAgICBjb250ZXh0Lmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbiA9ICdjb3B5JztcbiAgICBjb250ZXh0LmRyYXdJbWFnZShcbiAgICAgICAgdGV4dHVyZS5iYXNlVGV4dHVyZS5zb3VyY2UsXG4gICAgICAgIGNyb3AueCxcbiAgICAgICAgY3JvcC55LFxuICAgICAgICBjcm9wLndpZHRoLFxuICAgICAgICBjcm9wLmhlaWdodCxcbiAgICAgICAgMCxcbiAgICAgICAgMCxcbiAgICAgICAgY3JvcC53aWR0aCxcbiAgICAgICAgY3JvcC5oZWlnaHRcbiAgICApO1xuXG4gICAgdmFyIHJnYlZhbHVlcyA9IHV0aWxzLmhleDJyZ2IoY29sb3IpO1xuICAgIHZhciByID0gcmdiVmFsdWVzWzBdLCBnID0gcmdiVmFsdWVzWzFdLCBiID0gcmdiVmFsdWVzWzJdO1xuXG4gICAgdmFyIHBpeGVsRGF0YSA9IGNvbnRleHQuZ2V0SW1hZ2VEYXRhKDAsIDAsIGNyb3Aud2lkdGgsIGNyb3AuaGVpZ2h0KTtcblxuICAgIHZhciBwaXhlbHMgPSBwaXhlbERhdGEuZGF0YTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcGl4ZWxzLmxlbmd0aDsgaSArPSA0KVxuICAgIHtcbiAgICAgICAgcGl4ZWxzW2krMF0gKj0gcjtcbiAgICAgICAgcGl4ZWxzW2krMV0gKj0gZztcbiAgICAgICAgcGl4ZWxzW2krMl0gKj0gYjtcbiAgICB9XG5cbiAgICBjb250ZXh0LnB1dEltYWdlRGF0YShwaXhlbERhdGEsIDAsIDApO1xufTtcblxuLyoqXG4gKiBSb3VuZHMgdGhlIHNwZWNpZmllZCBjb2xvciBhY2NvcmRpbmcgdG8gdGhlIENhbnZhc1RpbnRlci5jYWNoZVN0ZXBzUGVyQ29sb3JDaGFubmVsLlxuICpcbiAqIEBwYXJhbSBjb2xvciB7bnVtYmVyfSB0aGUgY29sb3IgdG8gcm91bmQsIHNob3VsZCBiZSBhIGhleCBjb2xvclxuICovXG5DYW52YXNUaW50ZXIucm91bmRDb2xvciA9IGZ1bmN0aW9uIChjb2xvcilcbntcbiAgICB2YXIgc3RlcCA9IENhbnZhc1RpbnRlci5jYWNoZVN0ZXBzUGVyQ29sb3JDaGFubmVsO1xuXG4gICAgdmFyIHJnYlZhbHVlcyA9IHV0aWxzLmhleDJyZ2IoY29sb3IpO1xuXG4gICAgcmdiVmFsdWVzWzBdID0gTWF0aC5taW4oMjU1LCAocmdiVmFsdWVzWzBdIC8gc3RlcCkgKiBzdGVwKTtcbiAgICByZ2JWYWx1ZXNbMV0gPSBNYXRoLm1pbigyNTUsIChyZ2JWYWx1ZXNbMV0gLyBzdGVwKSAqIHN0ZXApO1xuICAgIHJnYlZhbHVlc1syXSA9IE1hdGgubWluKDI1NSwgKHJnYlZhbHVlc1syXSAvIHN0ZXApICogc3RlcCk7XG5cbiAgICByZXR1cm4gdXRpbHMucmdiMmhleChyZ2JWYWx1ZXMpO1xufTtcblxuLyoqXG4gKiBOdW1iZXIgb2Ygc3RlcHMgd2hpY2ggd2lsbCBiZSB1c2VkIGFzIGEgY2FwIHdoZW4gcm91bmRpbmcgY29sb3JzLlxuICpcbiAqIEBtZW1iZXJcbiAqL1xuQ2FudmFzVGludGVyLmNhY2hlU3RlcHNQZXJDb2xvckNoYW5uZWwgPSA4O1xuXG4vKipcbiAqIFRpbnQgY2FjaGUgYm9vbGVhbiBmbGFnLlxuICpcbiAqIEBtZW1iZXJcbiAqL1xuQ2FudmFzVGludGVyLmNvbnZlcnRUaW50VG9JbWFnZSA9IGZhbHNlO1xuXG4vKipcbiAqIFdoZXRoZXIgb3Igbm90IHRoZSBDYW52YXMgQmxlbmRNb2RlcyBhcmUgc3VwcG9ydGVkLCBjb25zZXF1ZW50bHkgdGhlIGFiaWxpdHkgdG8gdGludCB1c2luZyB0aGUgbXVsdGlwbHkgbWV0aG9kLlxuICpcbiAqIEBtZW1iZXJcbiAqL1xuQ2FudmFzVGludGVyLmNhblVzZU11bHRpcGx5ID0gdXRpbHMuY2FuVXNlTmV3Q2FudmFzQmxlbmRNb2RlcygpO1xuXG4vKipcbiAqIFRoZSB0aW50aW5nIG1ldGhvZCB0aGF0IHdpbGwgYmUgdXNlZC5cbiAqXG4gKi9cbkNhbnZhc1RpbnRlci50aW50TWV0aG9kID0gQ2FudmFzVGludGVyLmNhblVzZU11bHRpcGx5ID8gQ2FudmFzVGludGVyLnRpbnRXaXRoTXVsdGlwbHkgOiAgQ2FudmFzVGludGVyLnRpbnRXaXRoUGVyUGl4ZWw7XG4iLCJ2YXIgR0xUZXh0dXJlID0gcmVxdWlyZSgncGl4aS1nbC1jb3JlJykuR0xUZXh0dXJlLFxuXHR1dGlscyA9IHJlcXVpcmUoJy4uLy4uL3V0aWxzJyk7XG5cbi8qKlxuICogSGVscGVyIGNsYXNzIHRvIGNyZWF0ZSBhIHdlYkdMIFRleHR1cmVcbiAqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gZ2wge1dlYkdMUmVuZGVyaW5nQ29udGV4dH1cbiAqL1xuXG52YXIgVGV4dHVyZU1hbmFnZXIgPSBmdW5jdGlvbihnbClcbntcblx0dGhpcy5nbCA9IGdsO1xuXG5cdC8vIHRyYWNrIHRleHR1cmVzIGluIHRoZSByZW5kZXJlciBzbyB3ZSBjYW4gbm8gbG9uZ2VyIGxpc3RlbiB0byB0aGVtIG9uIGRlc3RydWN0aW9uLlxuXHR0aGlzLl9tYW5hZ2VkVGV4dHVyZXMgPSBbXTtcbiAgICB0aGlzLmdsVGV4dHVyZXMgPSB7fTtcblxufVxuXG5UZXh0dXJlTWFuYWdlci5wcm90b3R5cGUuYmluZFRleHR1cmUgPSBmdW5jdGlvbih0ZXh0dXJlKVxue1xuXG59XG5cblxuVGV4dHVyZU1hbmFnZXIucHJvdG90eXBlLmdldFRleHR1cmUgPSBmdW5jdGlvbih0ZXh0dXJlKVxue1xuXG59XG5cbi8qKlxuICogVXBkYXRlcyBhbmQvb3IgQ3JlYXRlcyBhIFdlYkdMIHRleHR1cmUgZm9yIHRoZSByZW5kZXJlcidzIGNvbnRleHQuXG4gKlxuICogQHBhcmFtIHRleHR1cmUge1BJWEkuQmFzZVRleHR1cmV8UElYSS5UZXh0dXJlfSB0aGUgdGV4dHVyZSB0byB1cGRhdGVcbiAqL1xuVGV4dHVyZU1hbmFnZXIucHJvdG90eXBlLnVwZGF0ZVRleHR1cmUgPSBmdW5jdGlvbih0ZXh0dXJlKVxue1xuXHR0ZXh0dXJlID0gdGV4dHVyZS5iYXNlVGV4dHVyZSB8fCB0ZXh0dXJlO1xuXG5cdGlmICghdGV4dHVyZS5oYXNMb2FkZWQpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgXG4gICAgdmFyIGdsID0gdGhpcy5nbDtcbiAgICB2YXIgZ2xUZXh0dXJlID0gdGhpcy5nbFRleHR1cmVzW3RleHR1cmUudWlkXS8vdGV4dHVyZS5fZ2xUZXh0dXJlc1tnbC5pZF07XG5cbiAgICBpZiAoIWdsVGV4dHVyZSlcbiAgICB7XG4gICAgICAgIGdsVGV4dHVyZSA9IG5ldyBHTFRleHR1cmUoZ2wpO1xuICAgICAgICBnbFRleHR1cmUucHJlbXVsdGlwbHlBbHBoYSA9IHRydWVcbiAgICAgICAgdGV4dHVyZS5fZ2xUZXh0dXJlc1tnbC5pZF0gPSBnbFRleHR1cmU7XG5cbiAgICAgICAvLyB0aGlzLmdsVGV4dHVyZXNbdGV4dHVyZS51aWRdID0gZ2xUZXh0dXJlO1xuXG4gICAgICAgIHRleHR1cmUub24oJ3VwZGF0ZScsIHRoaXMudXBkYXRlVGV4dHVyZSwgdGhpcyk7XG4gICAgICAgIHRleHR1cmUub24oJ2Rpc3Bvc2UnLCB0aGlzLmRlc3Ryb3lUZXh0dXJlLCB0aGlzKTtcbiAgICAgICAgXG4gICAgICAgIHRoaXMuX21hbmFnZWRUZXh0dXJlcy5wdXNoKHRleHR1cmUpO1xuICAgIH1cblxuICAgIGdsVGV4dHVyZS51cGxvYWQodGV4dHVyZS5zb3VyY2UpO1xuICAgIFxuICAgIC8vVE9ETyBjaGVjayBpcyBwb3dlciBvZiB0d28uLlxuICAgIGdsVGV4dHVyZS5lbmFibGVXcmFwQ2xhbXAoKTtcblxuXG4gICAgLy8gVE9ETyBjaGVjayBmb3Igc2NhbGluZyB0eXBlXG4gICAgZ2xUZXh0dXJlLmVuYWJsZUxpbmVhclNjYWxpbmcoKTtcblxuICAgIHJldHVybiAgdGV4dHVyZS5fZ2xUZXh0dXJlc1tnbC5pZF07XG59XG5cbi8qKlxuICogRGVsZXRlcyB0aGUgdGV4dHVyZSBmcm9tIFdlYkdMXG4gKlxuICogQHBhcmFtIHRleHR1cmUge1BJWEkuQmFzZVRleHR1cmV8UElYSS5UZXh0dXJlfSB0aGUgdGV4dHVyZSB0byBkZXN0cm95XG4gKi9cblRleHR1cmVNYW5hZ2VyLnByb3RvdHlwZS5kZXN0cm95VGV4dHVyZSA9IGZ1bmN0aW9uKHRleHR1cmUsIF9za2lwUmVtb3ZlKVxue1xuXHR0ZXh0dXJlID0gdGV4dHVyZS5iYXNlVGV4dHVyZSB8fCB0ZXh0dXJlO1xuXG4gICAgaWYgKCF0ZXh0dXJlLmhhc0xvYWRlZClcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAodGV4dHVyZS5fZ2xUZXh0dXJlc1t0aGlzLmdsLmlkXSlcbiAgICB7XG4gICAgICAgIHRleHR1cmUuX2dsVGV4dHVyZXNbdGhpcy5nbC5pZF0uZGVzdHJveSgpO1xuICAgICAgICB0ZXh0dXJlLm9mZigndXBkYXRlJywgdGhpcy51cGRhdGVUZXh0dXJlLCB0aGlzKTtcbiAgICAgICAgdGV4dHVyZS5vZmYoJ2Rpc3Bvc2UnLCB0aGlzLmRlc3Ryb3lUZXh0dXJlLCB0aGlzKTtcblxuXG4gICAgICAgIGRlbGV0ZSB0ZXh0dXJlLl9nbFRleHR1cmVzW3RoaXMuZ2wuaWRdO1xuXG4gICAgICAgIGlmICghX3NraXBSZW1vdmUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHZhciBpID0gdGhpcy5fbWFuYWdlZFRleHR1cmVzLmluZGV4T2YodGV4dHVyZSk7XG4gICAgICAgICAgICBpZiAoaSAhPT0gLTEpIHtcbiAgICAgICAgICAgICAgICB1dGlscy5yZW1vdmVJdGVtcyh0aGlzLl9tYW5hZ2VkVGV4dHVyZXMsIGksIDEpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxufVxuXG5UZXh0dXJlTWFuYWdlci5wcm90b3R5cGUucmVtb3ZlQWxsID0gZnVuY3Rpb24oKVxue1xuXHQvLyBlbXB0eSBhbGwgdGhlIG9sZCBnbCB0ZXh0dXJlcyBhcyB0aGV5IGFyZSB1c2VsZXNzIG5vd1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5fbWFuYWdlZFRleHR1cmVzLmxlbmd0aDsgKytpKVxuICAgIHtcbiAgICAgICAgdmFyIHRleHR1cmUgPSB0aGlzLl9tYW5hZ2VkVGV4dHVyZXNbaV07XG4gICAgICAgIGlmICh0ZXh0dXJlLl9nbFRleHR1cmVzW3RoaXMuZ2wuaWRdKVxuICAgICAgICB7XG4gICAgICAgICAgICBkZWxldGUgdGV4dHVyZS5fZ2xUZXh0dXJlc1t0aGlzLmdsLmlkXTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuVGV4dHVyZU1hbmFnZXIucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbigpXG57XG4gICAgLy8gZGVzdHJveSBtYW5hZ2VkIHRleHR1cmVzXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLl9tYW5hZ2VkVGV4dHVyZXMubGVuZ3RoOyArK2kpXG4gICAge1xuICAgICAgICB2YXIgdGV4dHVyZSA9IHRoaXMuX21hbmFnZWRUZXh0dXJlc1tpXTtcbiAgICAgICAgdGhpcy5kZXN0cm95VGV4dHVyZSh0ZXh0dXJlLCB0cnVlKTtcbiAgICAgICAgdGV4dHVyZS5vZmYoJ3VwZGF0ZScsIHRoaXMudXBkYXRlVGV4dHVyZSwgdGhpcyk7XG4gICAgICAgIHRleHR1cmUub2ZmKCdkaXNwb3NlJywgdGhpcy5kZXN0cm95VGV4dHVyZSwgdGhpcyk7XG4gICAgfVxuXG4gICAgdGhpcy5fbWFuYWdlZFRleHR1cmVzID0gbnVsbDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBUZXh0dXJlTWFuYWdlcjtcblxuIiwidmFyIFN5c3RlbVJlbmRlcmVyID0gcmVxdWlyZSgnLi4vU3lzdGVtUmVuZGVyZXInKSxcbiAgICBTaGFkZXJNYW5hZ2VyID0gcmVxdWlyZSgnLi9tYW5hZ2Vycy9TaGFkZXJNYW5hZ2VyJyksXG4gICAgTWFza01hbmFnZXIgPSByZXF1aXJlKCcuL21hbmFnZXJzL01hc2tNYW5hZ2VyJyksXG4gICAgU3RlbmNpbE1hbmFnZXIgPSByZXF1aXJlKCcuL21hbmFnZXJzL1N0ZW5jaWxNYW5hZ2VyJyksXG4gICAgRmlsdGVyTWFuYWdlciA9IHJlcXVpcmUoJy4vbWFuYWdlcnMvRmlsdGVyTWFuYWdlcicpLFxuICAgIEJsZW5kTW9kZU1hbmFnZXIgPSByZXF1aXJlKCcuL21hbmFnZXJzL0JsZW5kTW9kZU1hbmFnZXInKSxcbiAgICBSZW5kZXJUYXJnZXQgPSByZXF1aXJlKCcuL3V0aWxzL1JlbmRlclRhcmdldCcpLFxuICAgIE9iamVjdFJlbmRlcmVyID0gcmVxdWlyZSgnLi91dGlscy9PYmplY3RSZW5kZXJlcicpLFxuICAgIEZYQUFGaWx0ZXIgPSByZXF1aXJlKCcuL2ZpbHRlcnMvRlhBQUZpbHRlcicpLFxuICAgIFRleHR1cmVNYW5hZ2VyID0gcmVxdWlyZSgnLi9UZXh0dXJlTWFuYWdlcicpLFxuICAgIGNyZWF0ZUNvbnRleHQgPSByZXF1aXJlKCdwaXhpLWdsLWNvcmUnKS5jcmVhdGVDb250ZXh0LFxuICAgIG1hcFdlYkdMQmxlbmRNb2Rlc1RvUGl4aSA9IHJlcXVpcmUoJy4vdXRpbHMvbWFwV2ViR0xCbGVuZE1vZGVzVG9QaXhpJyksXG4gICAgbWFwV2ViR0xEcmF3TW9kZXNUb1BpeGkgPSByZXF1aXJlKCcuL3V0aWxzL21hcFdlYkdMRHJhd01vZGVzVG9QaXhpJyksXG4gICAgdXRpbHMgPSByZXF1aXJlKCcuLi8uLi91dGlscycpLFxuICAgIENPTlNUID0gcmVxdWlyZSgnLi4vLi4vY29uc3QnKTtcblxuLyoqXG4gKiBUaGUgV2ViR0xSZW5kZXJlciBkcmF3cyB0aGUgc2NlbmUgYW5kIGFsbCBpdHMgY29udGVudCBvbnRvIGEgd2ViR0wgZW5hYmxlZCBjYW52YXMuIFRoaXMgcmVuZGVyZXJcbiAqIHNob3VsZCBiZSB1c2VkIGZvciBicm93c2VycyB0aGF0IHN1cHBvcnQgd2ViR0wuIFRoaXMgUmVuZGVyIHdvcmtzIGJ5IGF1dG9tYXRpY2FsbHkgbWFuYWdpbmcgd2ViR0xCYXRjaHMuXG4gKiBTbyBubyBuZWVkIGZvciBTcHJpdGUgQmF0Y2hlcyBvciBTcHJpdGUgQ2xvdWRzLlxuICogRG9uJ3QgZm9yZ2V0IHRvIGFkZCB0aGUgdmlldyB0byB5b3VyIERPTSBvciB5b3Ugd2lsbCBub3Qgc2VlIGFueXRoaW5nIDopXG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQGV4dGVuZHMgUElYSS5TeXN0ZW1SZW5kZXJlclxuICogQHBhcmFtIFt3aWR0aD0wXSB7bnVtYmVyfSB0aGUgd2lkdGggb2YgdGhlIGNhbnZhcyB2aWV3XG4gKiBAcGFyYW0gW2hlaWdodD0wXSB7bnVtYmVyfSB0aGUgaGVpZ2h0IG9mIHRoZSBjYW52YXMgdmlld1xuICogQHBhcmFtIFtvcHRpb25zXSB7b2JqZWN0fSBUaGUgb3B0aW9uYWwgcmVuZGVyZXIgcGFyYW1ldGVyc1xuICogQHBhcmFtIFtvcHRpb25zLnZpZXddIHtIVE1MQ2FudmFzRWxlbWVudH0gdGhlIGNhbnZhcyB0byB1c2UgYXMgYSB2aWV3LCBvcHRpb25hbFxuICogQHBhcmFtIFtvcHRpb25zLnRyYW5zcGFyZW50PWZhbHNlXSB7Ym9vbGVhbn0gSWYgdGhlIHJlbmRlciB2aWV3IGlzIHRyYW5zcGFyZW50LCBkZWZhdWx0IGZhbHNlXG4gKiBAcGFyYW0gW29wdGlvbnMuYXV0b1Jlc2l6ZT1mYWxzZV0ge2Jvb2xlYW59IElmIHRoZSByZW5kZXIgdmlldyBpcyBhdXRvbWF0aWNhbGx5IHJlc2l6ZWQsIGRlZmF1bHQgZmFsc2VcbiAqIEBwYXJhbSBbb3B0aW9ucy5hbnRpYWxpYXM9ZmFsc2VdIHtib29sZWFufSBzZXRzIGFudGlhbGlhcy4gSWYgbm90IGF2YWlsYWJsZSBuYXRpdmVseSB0aGVuIEZYQUEgYW50aWFsaWFzaW5nIGlzIHVzZWRcbiAqIEBwYXJhbSBbb3B0aW9ucy5mb3JjZUZYQUE9ZmFsc2VdIHtib29sZWFufSBmb3JjZXMgRlhBQSBhbnRpYWxpYXNpbmcgdG8gYmUgdXNlZCBvdmVyIG5hdGl2ZS4gRlhBQSBpcyBmYXN0ZXIsIGJ1dCBtYXkgbm90IGFsd2F5cyBsb29rIGFzIGdyZWF0XG4gKiBAcGFyYW0gW29wdGlvbnMucmVzb2x1dGlvbj0xXSB7bnVtYmVyfSB0aGUgcmVzb2x1dGlvbiBvZiB0aGUgcmVuZGVyZXIgcmV0aW5hIHdvdWxkIGJlIDJcbiAqIEBwYXJhbSBbb3B0aW9ucy5jbGVhckJlZm9yZVJlbmRlcj10cnVlXSB7Ym9vbGVhbn0gVGhpcyBzZXRzIGlmIHRoZSBDYW52YXNSZW5kZXJlciB3aWxsIGNsZWFyIHRoZSBjYW52YXMgb3JcbiAqICAgICAgbm90IGJlZm9yZSB0aGUgbmV3IHJlbmRlciBwYXNzLiBJZiB5b3Ugd2lzaCB0byBzZXQgdGhpcyB0byBmYWxzZSwgeW91ICptdXN0KiBzZXQgcHJlc2VydmVEcmF3aW5nQnVmZmVyIHRvIGB0cnVlYC5cbiAqIEBwYXJhbSBbb3B0aW9ucy5wcmVzZXJ2ZURyYXdpbmdCdWZmZXI9ZmFsc2VdIHtib29sZWFufSBlbmFibGVzIGRyYXdpbmcgYnVmZmVyIHByZXNlcnZhdGlvbiwgZW5hYmxlIHRoaXMgaWZcbiAqICAgICAgeW91IG5lZWQgdG8gY2FsbCB0b0RhdGFVcmwgb24gdGhlIHdlYmdsIGNvbnRleHQuXG4gKiBAcGFyYW0gW29wdGlvbnMucm91bmRQaXhlbHM9ZmFsc2VdIHtib29sZWFufSBJZiB0cnVlIFBpeGkgd2lsbCBNYXRoLmZsb29yKCkgeC95IHZhbHVlcyB3aGVuIHJlbmRlcmluZywgc3RvcHBpbmcgcGl4ZWwgaW50ZXJwb2xhdGlvbi5cbiAqL1xuZnVuY3Rpb24gV2ViR0xSZW5kZXJlcih3aWR0aCwgaGVpZ2h0LCBvcHRpb25zKVxue1xuICAgIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuXG4gICAgU3lzdGVtUmVuZGVyZXIuY2FsbCh0aGlzLCAnV2ViR0wnLCB3aWR0aCwgaGVpZ2h0LCBvcHRpb25zKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSB0eXBlIG9mIHRoaXMgcmVuZGVyZXIgYXMgYSBzdGFuZGFyZGlzZWQgY29uc3RcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn0vL1xuICAgICAqXG4gICAgICovXG4gICAgdGhpcy50eXBlID0gQ09OU1QuUkVOREVSRVJfVFlQRS5XRUJHTDtcblxuICAgIHRoaXMuaGFuZGxlQ29udGV4dExvc3QgPSB0aGlzLmhhbmRsZUNvbnRleHRMb3N0LmJpbmQodGhpcyk7XG4gICAgdGhpcy5oYW5kbGVDb250ZXh0UmVzdG9yZWQgPSB0aGlzLmhhbmRsZUNvbnRleHRSZXN0b3JlZC5iaW5kKHRoaXMpO1xuXG4gICAgdGhpcy52aWV3LmFkZEV2ZW50TGlzdGVuZXIoJ3dlYmdsY29udGV4dGxvc3QnLCB0aGlzLmhhbmRsZUNvbnRleHRMb3N0LCBmYWxzZSk7XG4gICAgdGhpcy52aWV3LmFkZEV2ZW50TGlzdGVuZXIoJ3dlYmdsY29udGV4dHJlc3RvcmVkJywgdGhpcy5oYW5kbGVDb250ZXh0UmVzdG9yZWQsIGZhbHNlKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBvcHRpb25zIHBhc3NlZCBpbiB0byBjcmVhdGUgYSBuZXcgd2ViZ2wgY29udGV4dC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge29iamVjdH1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX2NvbnRleHRPcHRpb25zID0ge1xuICAgICAgICBhbHBoYTogdGhpcy50cmFuc3BhcmVudCxcbiAgICAgICAgYW50aWFsaWFzOiBvcHRpb25zLmFudGlhbGlhcyxcbiAgICAgICAgcHJlbXVsdGlwbGllZEFscGhhOiB0aGlzLnRyYW5zcGFyZW50ICYmIHRoaXMudHJhbnNwYXJlbnQgIT09ICdub3RNdWx0aXBsaWVkJyxcbiAgICAgICAgc3RlbmNpbDogdHJ1ZSxcbiAgICAgICAgcHJlc2VydmVEcmF3aW5nQnVmZmVyOiBvcHRpb25zLnByZXNlcnZlRHJhd2luZ0J1ZmZlclxuICAgIH07XG5cbiAgICB0aGlzLl9iYWNrZ3JvdW5kQ29sb3JSZ2JhWzNdID0gdGhpcy50cmFuc3BhcmVudCA/IDAgOiAxO1xuXG4gICAgLyoqXG4gICAgICogRGVhbHMgd2l0aCBtYW5hZ2luZyB0aGUgc2hhZGVyIHByb2dyYW1zIGFuZCB0aGVpciBhdHRyaWJzLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5TaGFkZXJNYW5hZ2VyfVxuICAgICAqL1xuICAgIHRoaXMuc2hhZGVyTWFuYWdlciA9IG5ldyBTaGFkZXJNYW5hZ2VyKHRoaXMpO1xuXG4gICAgLyoqXG4gICAgICogTWFuYWdlcyB0aGUgbWFza3MgdXNpbmcgdGhlIHN0ZW5jaWwgYnVmZmVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5NYXNrTWFuYWdlcn1cbiAgICAgKi9cbiAgICB0aGlzLm1hc2tNYW5hZ2VyID0gbmV3IE1hc2tNYW5hZ2VyKHRoaXMpO1xuXG4gICAgLyoqXG4gICAgICogTWFuYWdlcyB0aGUgc3RlbmNpbCBidWZmZXIuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlN0ZW5jaWxNYW5hZ2VyfVxuICAgICAqL1xuICAgIHRoaXMuc3RlbmNpbE1hbmFnZXIgPSBuZXcgU3RlbmNpbE1hbmFnZXIodGhpcyk7XG5cbiAgICAvKipcbiAgICAgKiBNYW5hZ2VzIHRoZSBmaWx0ZXJzLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5GaWx0ZXJNYW5hZ2VyfVxuICAgICAqL1xuICAgIHRoaXMuZmlsdGVyTWFuYWdlciA9IG5ldyBGaWx0ZXJNYW5hZ2VyKHRoaXMpO1xuXG4gICAgLyoqXG4gICAgICogTWFuYWdlcyB0aGUgYmxlbmRNb2Rlc1xuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5CbGVuZE1vZGVNYW5hZ2VyfVxuICAgICAqL1xuICAgIHRoaXMuYmxlbmRNb2RlTWFuYWdlciA9IG5ldyBCbGVuZE1vZGVNYW5hZ2VyKHRoaXMpO1xuXG4gICAgXG4gICAgLyoqXG4gICAgICogVGhlIGN1cnJlbnRseSBhY3RpdmUgT2JqZWN0UmVuZGVyZXIuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLk9iamVjdFJlbmRlcmVyfVxuICAgICAqL1xuICAgIHRoaXMuY3VycmVudFJlbmRlcmVyID0gbmV3IE9iamVjdFJlbmRlcmVyKHRoaXMpO1xuXG4gICAgdGhpcy5pbml0UGx1Z2lucygpO1xuXG4gICAgLy8gaW5pdGlhbGl6ZSB0aGUgY29udGV4dCBzbyBpdCBpcyByZWFkeSBmb3IgdGhlIG1hbmFnZXJzLlxuICAgIHRoaXMuZ2wgPSBjcmVhdGVDb250ZXh0KHRoaXMudmlldywgdGhpcy5fY29udGV4dE9wdGlvbnMpO1xuXG4gICAgdGhpcy5faW5pdENvbnRleHQoKTtcblxuICAgIC8vIG1hcCBzb21lIHdlYkdMIGJsZW5kIGFuZCBkcmF3bW9kZXMuLlxuICAgIHRoaXMuYmxlbmRNb2RlcyA9IG1hcFdlYkdMQmxlbmRNb2Rlc1RvUGl4aShnbCk7XG4gICAgdGhpcy5kcmF3TW9kZXMgPSBtYXBXZWJHTERyYXdNb2Rlc1RvUGl4aShnbClcblxuICAgIHRoaXMuX2FjdGl2ZVNoYWRlciA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBIb2xkcyB0aGUgY3VycmVudCByZW5kZXIgdGFyZ2V0XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlJlbmRlclRhcmdldH1cbiAgICAgKi9cbiAgICB0aGlzLl9hY3RpdmVSZW5kZXJUYXJnZXQgPSBudWxsO1xuICAgIHRoaXMuX2FjdGl2ZVRleHR1cmVMb2NhdGlvbiA9IG51bGw7XG4gICAgdGhpcy5fYWN0aXZlVGV4dHVyZSA9IG51bGw7XG59XG5cbi8vIGNvbnN0cnVjdG9yXG5XZWJHTFJlbmRlcmVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoU3lzdGVtUmVuZGVyZXIucHJvdG90eXBlKTtcbldlYkdMUmVuZGVyZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gV2ViR0xSZW5kZXJlcjtcbm1vZHVsZS5leHBvcnRzID0gV2ViR0xSZW5kZXJlcjtcbnV0aWxzLnBsdWdpblRhcmdldC5taXhpbihXZWJHTFJlbmRlcmVyKTtcblxuLyoqXG4gKiBDcmVhdGVzIHRoZSBXZWJHTCBjb250ZXh0XG4gKlxuICogQHByaXZhdGVcbiAqL1xuV2ViR0xSZW5kZXJlci5wcm90b3R5cGUuX2luaXRDb250ZXh0ID0gZnVuY3Rpb24gKClcbntcbiAgICB2YXIgZ2wgPSB0aGlzLmdsO1xuXG4gICAgLy8gY3JlYXRlIGEgdGV4dHVyZSBtYW5hZ2VyLi4uXG4gICAgdGhpcy50ZXh0dXJlTWFuYWdlciA9IG5ldyBUZXh0dXJlTWFuYWdlcihnbCk7XG5cbiAgICAvLyBzZXQgdXAgdGhlIGRlZmF1bHQgcGl4aSBzZXR0aW5ncy4uXG4gICAgZ2wuZGlzYWJsZShnbC5ERVBUSF9URVNUKTtcbiAgICBnbC5kaXNhYmxlKGdsLkNVTExfRkFDRSk7XG4gICAgZ2wuZW5hYmxlKGdsLkJMRU5EKTtcblxuXG4gICAgdGhpcy5yb290UmVuZGVyVGFyZ2V0ID0gbmV3IFJlbmRlclRhcmdldChnbCwgdGhpcy53aWR0aCwgdGhpcy5oZWlnaHQsIG51bGwsIHRoaXMucmVzb2x1dGlvbiwgdHJ1ZSk7XG4gICAgdGhpcy5yb290UmVuZGVyVGFyZ2V0LmNsZWFyQ29sb3IgPSB0aGlzLl9iYWNrZ3JvdW5kQ29sb3JSZ2JhO1xuICAgIFxuICAgIHRoaXMuYmluZFJlbmRlclRhcmdldCh0aGlzLnJvb3RSZW5kZXJUYXJnZXQpO1xuXG4gICAgdGhpcy5lbWl0KCdjb250ZXh0JywgZ2wpO1xuXG4gICAgLy8gc2V0dXAgdGhlIHdpZHRoL2hlaWdodCBwcm9wZXJ0aWVzIGFuZCBnbCB2aWV3cG9ydFxuICAgIHRoaXMucmVzaXplKHRoaXMud2lkdGgsIHRoaXMuaGVpZ2h0KTsgICAgXG59O1xuXG4vKipcbiAqIFJlbmRlcnMgdGhlIG9iamVjdCB0byBpdHMgd2ViR0wgdmlld1xuICpcbiAqIEBwYXJhbSBvYmplY3Qge1BJWEkuRGlzcGxheU9iamVjdH0gdGhlIG9iamVjdCB0byBiZSByZW5kZXJlZFxuICovXG5XZWJHTFJlbmRlcmVyLnByb3RvdHlwZS5yZW5kZXIgPSBmdW5jdGlvbiAoZGlzcGxheU9iamVjdClcbntcbiAgICB0aGlzLmVtaXQoJ3ByZXJlbmRlcicpO1xuXG4gICAgLy8gbm8gcG9pbnQgcmVuZGVyaW5nIGlmIG91ciBjb250ZXh0IGhhcyBiZWVuIGJsb3duIHVwIVxuICAgIGlmICh0aGlzLmdsLmlzQ29udGV4dExvc3QoKSlcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLl9sYXN0T2JqZWN0UmVuZGVyZWQgPSBkaXNwbGF5T2JqZWN0O1xuXG4gICAgdmFyIGNhY2hlUGFyZW50ID0gZGlzcGxheU9iamVjdC5wYXJlbnQ7XG4gICAgZGlzcGxheU9iamVjdC5wYXJlbnQgPSB0aGlzLl90ZW1wRGlzcGxheU9iamVjdFBhcmVudDtcbiAgICAvLyB1cGRhdGUgdGhlIHNjZW5lIGdyYXBoXG4gICAgZGlzcGxheU9iamVjdC51cGRhdGVUcmFuc2Zvcm0oKTtcbiAgICBkaXNwbGF5T2JqZWN0LnBhcmVudCA9IGNhY2hlUGFyZW50O1xuXG4gICAgdGhpcy5yZW5kZXJEaXNwbGF5T2JqZWN0KGRpc3BsYXlPYmplY3QsIHRoaXMucm9vdFJlbmRlclRhcmdldCwgdGhpcy5jbGVhckJlZm9yZVJlbmRlcik7Ly90aGlzLnByb2plY3Rpb24pO1xuXG4gICAgdGhpcy5lbWl0KCdwb3N0cmVuZGVyJyk7XG59O1xuXG4vKipcbiAqIFJlbmRlcnMgYSBEaXNwbGF5IE9iamVjdC5cbiAqXG4gKiBAcGFyYW0gZGlzcGxheU9iamVjdCB7UElYSS5EaXNwbGF5T2JqZWN0fSBUaGUgRGlzcGxheU9iamVjdCB0byByZW5kZXJcbiAqIEBwYXJhbSByZW5kZXJUYXJnZXQge1BJWEkuUmVuZGVyVGFyZ2V0fSBUaGUgcmVuZGVyIHRhcmdldCB0byB1c2UgdG8gcmVuZGVyIHRoaXMgZGlzcGxheSBvYmplY3RcbiAqXG4gKi9cbldlYkdMUmVuZGVyZXIucHJvdG90eXBlLnJlbmRlckRpc3BsYXlPYmplY3QgPSBmdW5jdGlvbiAoZGlzcGxheU9iamVjdCwgcmVuZGVyVGFyZ2V0LCBjbGVhcikvL3Byb2plY3Rpb24sIGJ1ZmZlcilcbntcbiAgICB0aGlzLmJpbmRSZW5kZXJUYXJnZXQocmVuZGVyVGFyZ2V0KTtcblxuICAgIGlmKGNsZWFyKVxuICAgIHtcbiAgICAgICAgcmVuZGVyVGFyZ2V0LmNsZWFyKCk7XG4gICAgfVxuXG4gICAgLy8gc3RhcnQgdGhlIGZpbHRlciBtYW5hZ2VyXG4gICAgdGhpcy5maWx0ZXJNYW5hZ2VyLnNldEZpbHRlclN0YWNrKCByZW5kZXJUYXJnZXQuZmlsdGVyU3RhY2sgKTtcblxuICAgIC8vIHJlbmRlciB0aGUgc2NlbmUhXG4gICAgZGlzcGxheU9iamVjdC5yZW5kZXJXZWJHTCh0aGlzKTtcblxuICAgIC8vIGZpbmlzaCB0aGUgY3VycmVudCByZW5kZXJlci4uXG4gICAgdGhpcy5jdXJyZW50UmVuZGVyZXIuZmx1c2goKTtcbn07XG5cbi8qKlxuICogQ2hhbmdlcyB0aGUgY3VycmVudCByZW5kZXJlciB0byB0aGUgb25lIGdpdmVuIGluIHBhcmFtZXRlclxuICpcbiAqIEBwYXJhbSBvYmplY3RSZW5kZXJlciB7UElYSS5PYmplY3RSZW5kZXJlcn0gVGhlIG9iamVjdCByZW5kZXJlciB0byB1c2UuXG4gKi9cbldlYkdMUmVuZGVyZXIucHJvdG90eXBlLnNldE9iamVjdFJlbmRlcmVyID0gZnVuY3Rpb24gKG9iamVjdFJlbmRlcmVyKVxue1xuICAgIGlmICh0aGlzLmN1cnJlbnRSZW5kZXJlciA9PT0gb2JqZWN0UmVuZGVyZXIpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5jdXJyZW50UmVuZGVyZXIuc3RvcCgpO1xuICAgIHRoaXMuY3VycmVudFJlbmRlcmVyID0gb2JqZWN0UmVuZGVyZXI7XG4gICAgdGhpcy5jdXJyZW50UmVuZGVyZXIuc3RhcnQoKTtcbn07XG5cbi8qKlxuICogUmVzaXplcyB0aGUgd2ViR0wgdmlldyB0byB0aGUgc3BlY2lmaWVkIHdpZHRoIGFuZCBoZWlnaHQuXG4gKlxuICogQHBhcmFtIHdpZHRoIHtudW1iZXJ9IHRoZSBuZXcgd2lkdGggb2YgdGhlIHdlYkdMIHZpZXdcbiAqIEBwYXJhbSBoZWlnaHQge251bWJlcn0gdGhlIG5ldyBoZWlnaHQgb2YgdGhlIHdlYkdMIHZpZXdcbiAqL1xuV2ViR0xSZW5kZXJlci5wcm90b3R5cGUucmVzaXplID0gZnVuY3Rpb24gKHdpZHRoLCBoZWlnaHQpXG57XG4gICAgU3lzdGVtUmVuZGVyZXIucHJvdG90eXBlLnJlc2l6ZS5jYWxsKHRoaXMsIHdpZHRoLCBoZWlnaHQpO1xuXG4gICAgdGhpcy5maWx0ZXJNYW5hZ2VyLnJlc2l6ZSh3aWR0aCwgaGVpZ2h0KTtcbiAgICB0aGlzLnJvb3RSZW5kZXJUYXJnZXQucmVzaXplKHdpZHRoLCBoZWlnaHQpO1xuXG4gICAgaWYodGhpcy5jdXJyZW50UmVuZGVyVGFyZ2V0ID09PSB0aGlzLnJlbmRlclRhcmdldClcbiAgICB7XG4gICAgICAgIHRoaXMucm9vdFJlbmRlclRhcmdldC5hY3RpdmF0ZSgpO1xuICAgIH1cbn07XG5cbi8qKlxuICogQ2hhbmdlcyB0aGUgY3VycmVudCByZW5kZXIgdGFyZ2V0IHRvIHRoZSBvbmUgZ2l2ZW4gaW4gcGFyYW1ldGVyXG4gKlxuICogQHBhcmFtIHJlbmRlclRhcmdldCB7UElYSS5SZW5kZXJUYXJnZXR9IHRoZSBuZXcgcmVuZGVyIHRhcmdldFxuICovXG5XZWJHTFJlbmRlcmVyLnByb3RvdHlwZS5iaW5kUmVuZGVyVGFyZ2V0ID0gZnVuY3Rpb24gKHJlbmRlclRhcmdldCkvL3Byb2plY3Rpb24sIGJ1ZmZlcilcbntcbiAgICBpZihyZW5kZXJUYXJnZXQgIT09IHRoaXMuX2FjdGl2ZVJlbmRlclRhcmdldClcbiAgICB7XG4gICAgICAgIHRoaXMuX2FjdGl2ZVJlbmRlclRhcmdldCA9IHJlbmRlclRhcmdldDtcblxuICAgICAgICBpZih0aGlzLl9hY3RpdmVTaGFkZXIpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuX2FjdGl2ZVNoYWRlci51bmlmb3Jtcy5wcm9qZWN0aW9uTWF0cml4ID0gcmVuZGVyVGFyZ2V0LnByb2plY3Rpb25NYXRyaXgudG9BcnJheSh0cnVlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJlbmRlclRhcmdldC5hY3RpdmF0ZSgpO1xuXG4gICAgICAgIHRoaXMuc3RlbmNpbE1hbmFnZXIuc2V0TWFza1N0YWNrKCByZW5kZXJUYXJnZXQuc3RlbmNpbE1hc2tTdGFjayApO1xuICAgIH1cbn1cblxuV2ViR0xSZW5kZXJlci5wcm90b3R5cGUuYmluZFNoYWRlciA9IGZ1bmN0aW9uIChzaGFkZXIpLy9wcm9qZWN0aW9uLCBidWZmZXIpXG57XG4gICAgLy9UT0RPIGNhY2hlXG4gICAgaWYodGhpcy5fYWN0aXZlU2hhZGVyICE9PSBzaGFkZXIpXG4gICAge1xuICAgICAgICB0aGlzLl9hY3RpdmVTaGFkZXIgPSBzaGFkZXI7XG4gICAgICAgIHNoYWRlci5iaW5kKCk7XG5cbiAgICAgICAgLy8gYXV0b21hdGljYWxseSBzZXQgdGhlIHByb2plY3Rpb24gbWF0cml4XG4gICAgICAgIHNoYWRlci51bmlmb3Jtcy5wcm9qZWN0aW9uTWF0cml4ID0gdGhpcy5fYWN0aXZlUmVuZGVyVGFyZ2V0LnByb2plY3Rpb25NYXRyaXgudG9BcnJheSh0cnVlKTtcbiAgICB9XG59XG5cblxuV2ViR0xSZW5kZXJlci5wcm90b3R5cGUuYmluZFRleHR1cmUgPSBmdW5jdGlvbiAodGV4dHVyZSwgbG9jYXRpb24pXG57XG4gICAgdmFyIGdsID0gdGhpcy5nbDtcblxuICAgIC8vVE9ETyB0ZXN0IHBlcmYgb2YgY2FjaGU/XG4gICAgbG9jYXRpb24gPSBsb2NhdGlvbiB8fCAwO1xuXG4gICAgaWYodGhpcy5fYWN0aXZlVGV4dHVyZUxvY2F0aW9uICE9PSBsb2NhdGlvbikvL1xuICAgIHtcbiAgICAgICAgdGhpcy5fYWN0aXZlVGV4dHVyZUxvY2F0aW9uID0gbG9jYXRpb25cbiAgICAgICAgZ2wuYWN0aXZlVGV4dHVyZShnbC5URVhUVVJFMCArIGxvY2F0aW9uICk7XG4gICAgfVxuXG4gICAgLy9UT0RPIC0gY2FuIHdlIGNhY2hlIHRoaXMgdGV4dHVyZSB0b28/XG4gICAgdGhpcy5fYWN0aXZlVGV4dHVyZSA9IHRleHR1cmU7ICAgICAgXG4gICAgXG4gICAgaWYgKCF0ZXh0dXJlLl9nbFRleHR1cmVzW2dsLmlkXSlcbiAgICB7XG4gICAgICAgIC8vIHRoaXMgd2lsbCBhbHNvIGJpbmQgdGhlIHRleHR1cmUuLlxuICAgICAgICB0aGlzLnRleHR1cmVNYW5hZ2VyLnVwZGF0ZVRleHR1cmUodGV4dHVyZSk7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7ICAgXG4gICAgICAgIC8vIGJpbmQgdGhlIGN1cnJlbnQgdGV4dHVyZVxuICAgICAgICB0ZXh0dXJlLl9nbFRleHR1cmVzW2dsLmlkXS5iaW5kKCk7XG4gICAgfVxufVxuXG5cbi8qKlxuICogSGFuZGxlcyBhIGxvc3Qgd2ViZ2wgY29udGV4dFxuICpcbiAqIEBwcml2YXRlXG4gKi9cbldlYkdMUmVuZGVyZXIucHJvdG90eXBlLmhhbmRsZUNvbnRleHRMb3N0ID0gZnVuY3Rpb24gKGV2ZW50KVxue1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG59O1xuXG4vKipcbiAqIEhhbmRsZXMgYSByZXN0b3JlZCB3ZWJnbCBjb250ZXh0XG4gKlxuICogQHByaXZhdGVcbiAqL1xuV2ViR0xSZW5kZXJlci5wcm90b3R5cGUuaGFuZGxlQ29udGV4dFJlc3RvcmVkID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLl9pbml0Q29udGV4dCgpO1xuICAgIHRoaXMudGV4dHVyZU1hbmFnZXIucmVtb3ZlQWxsKCk7XG59O1xuXG4vKipcbiAqIFJlbW92ZXMgZXZlcnl0aGluZyBmcm9tIHRoZSByZW5kZXJlciAoZXZlbnQgbGlzdGVuZXJzLCBzcHJpdGViYXRjaCwgZXRjLi4uKVxuICpcbiAqIEBwYXJhbSBbcmVtb3ZlVmlldz1mYWxzZV0ge2Jvb2xlYW59IFJlbW92ZXMgdGhlIENhbnZhcyBlbGVtZW50IGZyb20gdGhlIERPTS5cbiAqL1xuV2ViR0xSZW5kZXJlci5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uIChyZW1vdmVWaWV3KVxue1xuICAgIHRoaXMuZGVzdHJveVBsdWdpbnMoKTtcblxuICAgIC8vIHJlbW92ZSBsaXN0ZW5lcnNcbiAgICB0aGlzLnZpZXcucmVtb3ZlRXZlbnRMaXN0ZW5lcignd2ViZ2xjb250ZXh0bG9zdCcsIHRoaXMuaGFuZGxlQ29udGV4dExvc3QpO1xuICAgIHRoaXMudmlldy5yZW1vdmVFdmVudExpc3RlbmVyKCd3ZWJnbGNvbnRleHRyZXN0b3JlZCcsIHRoaXMuaGFuZGxlQ29udGV4dFJlc3RvcmVkKTtcblxuICAgIHRoaXMudGV4dHVyZU1hbmFnZXIuZGVzdHJveUFsbCgpO1xuXG4gICAgLy8gY2FsbCBiYXNlIGRlc3Ryb3lcbiAgICBTeXN0ZW1SZW5kZXJlci5wcm90b3R5cGUuZGVzdHJveS5jYWxsKHRoaXMsIHJlbW92ZVZpZXcpO1xuXG4gICAgdGhpcy51aWQgPSAwO1xuXG4gICAgLy8gZGVzdHJveSB0aGUgbWFuYWdlcnNcbiAgICB0aGlzLnNoYWRlck1hbmFnZXIuZGVzdHJveSgpO1xuICAgIHRoaXMubWFza01hbmFnZXIuZGVzdHJveSgpO1xuICAgIHRoaXMuc3RlbmNpbE1hbmFnZXIuZGVzdHJveSgpO1xuICAgIHRoaXMuZmlsdGVyTWFuYWdlci5kZXN0cm95KCk7XG4gICAgdGhpcy5ibGVuZE1vZGVNYW5hZ2VyLmRlc3Ryb3koKTtcblxuICAgIHRoaXMuc2hhZGVyTWFuYWdlciA9IG51bGw7XG4gICAgdGhpcy5tYXNrTWFuYWdlciA9IG51bGw7XG4gICAgdGhpcy5maWx0ZXJNYW5hZ2VyID0gbnVsbDtcbiAgICB0aGlzLmJsZW5kTW9kZU1hbmFnZXIgPSBudWxsO1xuICAgIHRoaXMuY3VycmVudFJlbmRlcmVyID0gbnVsbDtcblxuICAgIHRoaXMuaGFuZGxlQ29udGV4dExvc3QgPSBudWxsO1xuICAgIHRoaXMuaGFuZGxlQ29udGV4dFJlc3RvcmVkID0gbnVsbDtcblxuICAgIHRoaXMuX2NvbnRleHRPcHRpb25zID0gbnVsbDtcblxuICAgIHRoaXMuZ2wudXNlUHJvZ3JhbShudWxsKTtcbiAgICB0aGlzLmdsID0gbnVsbDtcbn07XG5cbiIsInZhciBEZWZhdWx0U2hhZGVyID0gcmVxdWlyZSgnLi4vc2hhZGVycy9UZXh0dXJlU2hhZGVyJyk7XG5cbi8qKlxuICogVGhpcyBpcyB0aGUgYmFzZSBjbGFzcyBmb3IgY3JlYXRpbmcgYSBQSVhJIGZpbHRlci4gQ3VycmVudGx5IG9ubHkgV2ViR0wgc3VwcG9ydHMgZmlsdGVycy5cbiAqIElmIHlvdSB3YW50IHRvIG1ha2UgYSBjdXN0b20gZmlsdGVyIHRoaXMgc2hvdWxkIGJlIHlvdXIgYmFzZSBjbGFzcy5cbiAqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gdmVydGV4U3JjIHtzdHJpbmd8c3RyaW5nW119IFRoZSB2ZXJ0ZXggc2hhZGVyIHNvdXJjZSBhcyBhbiBhcnJheSBvZiBzdHJpbmdzLlxuICogQHBhcmFtIGZyYWdtZW50U3JjIHtzdHJpbmd8c3RyaW5nW119IFRoZSBmcmFnbWVudCBzaGFkZXIgc291cmNlIGFzIGFuIGFycmF5IG9mIHN0cmluZ3MuXG4gKiBAcGFyYW0gdW5pZm9ybXMge29iamVjdH0gQW4gb2JqZWN0IGNvbnRhaW5pbmcgdGhlIHVuaWZvcm1zIGZvciB0aGlzIGZpbHRlci5cbiAqL1xuZnVuY3Rpb24gQWJzdHJhY3RGaWx0ZXIodmVydGV4U3JjLCBmcmFnbWVudFNyYywgdW5pZm9ybXMpXG57XG5cbiAgICAvKipcbiAgICAgKiBBbiBhcnJheSBvZiBzaGFkZXJzXG4gICAgICogQG1lbWJlciB7UElYSS5TaGFkZXJbXX1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuc2hhZGVycyA9IFtdO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGV4dHJhIHBhZGRpbmcgdGhhdCB0aGUgZmlsdGVyIG1pZ2h0IG5lZWRcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy5wYWRkaW5nID0gMDtcblxuICAgIC8qKlxuICAgICAqIFRoZSB1bmlmb3JtcyBhcyBhbiBvYmplY3RcbiAgICAgKiBAbWVtYmVyIHtvYmplY3R9XG4gICAgICovXG4gICAgdGhpcy51bmlmb3JtcyA9IHVuaWZvcm1zIHx8IHt9O1xuXG5cbiAgICAvKipcbiAgICAgKiBUaGUgY29kZSBvZiB0aGUgdmVydGV4IHNoYWRlclxuICAgICAqIEBtZW1iZXIge3N0cmluZ1tdfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy52ZXJ0ZXhTcmMgPSB2ZXJ0ZXhTcmMgfHwgRGVmYXVsdFNoYWRlci5kZWZhdWx0VmVydGV4U3JjO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGNvZGUgb2YgdGhlIGZyYW1lbnQgc2hhZGVyXG4gICAgICogQG1lbWJlciB7c3RyaW5nW119XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLmZyYWdtZW50U3JjID0gZnJhZ21lbnRTcmMgfHwgRGVmYXVsdFNoYWRlci5kZWZhdWx0RnJhZ21lbnRTcmM7XG5cbiAgICAvL1RPRE8gYSByZW1pbmRlciAtIHdvdWxkIGJlIGNvb2wgdG8gaGF2ZSBsb3dlciByZXMgZmlsdGVycyBhcyB0aGlzIHdvdWxkIGdpdmUgYmV0dGVyIHBlcmZvcm1hbmNlLlxuXG4gICAgLy90eXBlb2YgZnJhZ21lbnRTcmMgPT09ICdzdHJpbmcnID8gZnJhZ21lbnRTcmMuc3BsaXQoJycpIDogKGZyYWdtZW50U3JjIHx8IFtdKTtcblxufVxuXG5BYnN0cmFjdEZpbHRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBBYnN0cmFjdEZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gQWJzdHJhY3RGaWx0ZXI7XG5cbi8qKlxuICogR3JhYnMgYSBzaGFkZXIgZnJvbSB0aGUgY3VycmVudCByZW5kZXJlclxuICpcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5XZWJHTFJlbmRlcmVyfSBUaGUgcmVuZGVyZXIgdG8gcmV0cmlldmUgdGhlIHNoYWRlciBmcm9tXG4gKi9cbkFic3RyYWN0RmlsdGVyLnByb3RvdHlwZS5nZXRTaGFkZXIgPSBmdW5jdGlvbiAocmVuZGVyZXIpXG57XG4gICAgdmFyIGdsID0gcmVuZGVyZXIuZ2w7XG5cbiAgICB2YXIgc2hhZGVyID0gdGhpcy5zaGFkZXJzW2dsLmlkXTtcblxuICAgIGlmICghc2hhZGVyKVxuICAgIHtcbiAgICAgICAgc2hhZGVyID0gbmV3IERlZmF1bHRTaGFkZXIocmVuZGVyZXIuc2hhZGVyTWFuYWdlcixcbiAgICAgICAgICAgIHRoaXMudmVydGV4U3JjLFxuICAgICAgICAgICAgdGhpcy5mcmFnbWVudFNyYyxcbiAgICAgICAgICAgIHRoaXMudW5pZm9ybXMsXG4gICAgICAgICAgICB0aGlzLmF0dHJpYnV0ZXNcbiAgICAgICAgKTtcblxuICAgICAgICB0aGlzLnNoYWRlcnNbZ2wuaWRdID0gc2hhZGVyO1xuICAgIH1cblxuICAgIHJldHVybiBzaGFkZXI7XG59O1xuXG4vKipcbiAqIEFwcGxpZXMgdGhlIGZpbHRlclxuICpcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5XZWJHTFJlbmRlcmVyfSBUaGUgcmVuZGVyZXIgdG8gcmV0cmlldmUgdGhlIGZpbHRlciBmcm9tXG4gKiBAcGFyYW0gaW5wdXQge1BJWEkuUmVuZGVyVGFyZ2V0fVxuICogQHBhcmFtIG91dHB1dCB7UElYSS5SZW5kZXJUYXJnZXR9XG4gKiBAcGFyYW0gY2xlYXIge2Jvb2xlYW59IFdoZXRoZXIgb3Igbm90IHdlIHdhbnQgdG8gY2xlYXIgdGhlIG91dHB1dFRhcmdldFxuICovXG5BYnN0cmFjdEZpbHRlci5wcm90b3R5cGUuYXBwbHlGaWx0ZXIgPSBmdW5jdGlvbiAocmVuZGVyZXIsIGlucHV0LCBvdXRwdXQsIGNsZWFyKVxue1xuICAgIHZhciBzaGFkZXIgPSB0aGlzLmdldFNoYWRlcihyZW5kZXJlcik7XG5cbiAgICByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLmFwcGx5RmlsdGVyKHNoYWRlciwgaW5wdXQsIG91dHB1dCwgY2xlYXIpO1xufTtcblxuLyoqXG4gKiBTeW5jcyBhIHVuaWZvcm0gYmV0d2VlbiB0aGUgY2xhc3Mgb2JqZWN0IGFuZCB0aGUgc2hhZGVycy5cbiAqXG4gKi9cbkFic3RyYWN0RmlsdGVyLnByb3RvdHlwZS5zeW5jVW5pZm9ybSA9IGZ1bmN0aW9uICh1bmlmb3JtKVxue1xuICAgIGZvciAodmFyIGkgPSAwLCBqID0gdGhpcy5zaGFkZXJzLmxlbmd0aDsgaSA8IGo7ICsraSlcbiAgICB7XG4gICAgICAgIHRoaXMuc2hhZGVyc1tpXS5zeW5jVW5pZm9ybSh1bmlmb3JtKTtcbiAgICB9XG59O1xuIiwidmFyIEFic3RyYWN0RmlsdGVyID0gcmVxdWlyZSgnLi9BYnN0cmFjdEZpbHRlcicpO1xuLy8gQHNlZSBodHRwczovL2dpdGh1Yi5jb20vc3Vic3RhY2svYnJmcy9pc3N1ZXMvMjVcblxuXG4vKipcbiAqXG4gKiBCYXNpYyBGWEFBIGltcGxlbWVudGF0aW9uIGJhc2VkIG9uIHRoZSBjb2RlIG9uIGdlZWtzM2QuY29tIHdpdGggdGhlXG4gKiBtb2RpZmljYXRpb24gdGhhdCB0aGUgdGV4dHVyZTJETG9kIHN0dWZmIHdhcyByZW1vdmVkIHNpbmNlIGl0J3NcbiAqIHVuc3VwcG9ydGVkIGJ5IFdlYkdMLlxuICpcbiAqIC0tXG4gKiBGcm9tOlxuICogaHR0cHM6Ly9naXRodWIuY29tL21pdHN1aGlrby93ZWJnbC1tZWluY3JhZnRcbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQWJzdHJhY3RGaWx0ZXJcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKlxuICovXG5mdW5jdGlvbiBGWEFBRmlsdGVyKClcbntcbiAgICBBYnN0cmFjdEZpbHRlci5jYWxsKHRoaXMsXG4gICAgICAgIC8vIHZlcnRleCBzaGFkZXJcbiAgICAgICAgXCJcXG5wcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcXG5cXG5hdHRyaWJ1dGUgdmVjMiBhVmVydGV4UG9zaXRpb247XFxuYXR0cmlidXRlIHZlYzIgYVRleHR1cmVDb29yZDtcXG5hdHRyaWJ1dGUgdmVjNCBhQ29sb3I7XFxuXFxudW5pZm9ybSBtYXQzIHByb2plY3Rpb25NYXRyaXg7XFxudW5pZm9ybSB2ZWMyIHJlc29sdXRpb247XFxuXFxudmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7XFxudmFyeWluZyB2ZWM0IHZDb2xvcjtcXG5cXG52YXJ5aW5nIHZlYzIgdlJlc29sdXRpb247XFxuXFxuLy90ZXhjb29yZHMgY29tcHV0ZWQgaW4gdmVydGV4IHN0ZXBcXG4vL3RvIGF2b2lkIGRlcGVuZGVudCB0ZXh0dXJlIHJlYWRzXFxudmFyeWluZyB2ZWMyIHZfcmdiTlc7XFxudmFyeWluZyB2ZWMyIHZfcmdiTkU7XFxudmFyeWluZyB2ZWMyIHZfcmdiU1c7XFxudmFyeWluZyB2ZWMyIHZfcmdiU0U7XFxudmFyeWluZyB2ZWMyIHZfcmdiTTtcXG5cXG5cXG52b2lkIHRleGNvb3Jkcyh2ZWMyIGZyYWdDb29yZCwgdmVjMiByZXNvbHV0aW9uLFxcbiAgICAgICAgICAgIG91dCB2ZWMyIHZfcmdiTlcsIG91dCB2ZWMyIHZfcmdiTkUsXFxuICAgICAgICAgICAgb3V0IHZlYzIgdl9yZ2JTVywgb3V0IHZlYzIgdl9yZ2JTRSxcXG4gICAgICAgICAgICBvdXQgdmVjMiB2X3JnYk0pIHtcXG4gICAgdmVjMiBpbnZlcnNlVlAgPSAxLjAgLyByZXNvbHV0aW9uLnh5O1xcbiAgICB2X3JnYk5XID0gKGZyYWdDb29yZCArIHZlYzIoLTEuMCwgLTEuMCkpICogaW52ZXJzZVZQO1xcbiAgICB2X3JnYk5FID0gKGZyYWdDb29yZCArIHZlYzIoMS4wLCAtMS4wKSkgKiBpbnZlcnNlVlA7XFxuICAgIHZfcmdiU1cgPSAoZnJhZ0Nvb3JkICsgdmVjMigtMS4wLCAxLjApKSAqIGludmVyc2VWUDtcXG4gICAgdl9yZ2JTRSA9IChmcmFnQ29vcmQgKyB2ZWMyKDEuMCwgMS4wKSkgKiBpbnZlcnNlVlA7XFxuICAgIHZfcmdiTSA9IHZlYzIoZnJhZ0Nvb3JkICogaW52ZXJzZVZQKTtcXG59XFxuXFxudm9pZCBtYWluKHZvaWQpe1xcbiAgIGdsX1Bvc2l0aW9uID0gdmVjNCgocHJvamVjdGlvbk1hdHJpeCAqIHZlYzMoYVZlcnRleFBvc2l0aW9uLCAxLjApKS54eSwgMC4wLCAxLjApO1xcbiAgIHZUZXh0dXJlQ29vcmQgPSBhVGV4dHVyZUNvb3JkO1xcbiAgIHZDb2xvciA9IHZlYzQoYUNvbG9yLnJnYiAqIGFDb2xvci5hLCBhQ29sb3IuYSk7XFxuICAgdlJlc29sdXRpb24gPSByZXNvbHV0aW9uO1xcblxcbiAgIC8vY29tcHV0ZSB0aGUgdGV4dHVyZSBjb29yZHMgYW5kIHNlbmQgdGhlbSB0byB2YXJ5aW5nc1xcbiAgIHRleGNvb3JkcyhhVGV4dHVyZUNvb3JkICogcmVzb2x1dGlvbiwgcmVzb2x1dGlvbiwgdl9yZ2JOVywgdl9yZ2JORSwgdl9yZ2JTVywgdl9yZ2JTRSwgdl9yZ2JNKTtcXG59XFxuXCIsXG4gICAgICAgIC8vIGZyYWdtZW50IHNoYWRlclxuICAgICAgICBcInByZWNpc2lvbiBsb3dwIGZsb2F0O1xcblxcblxcbi8qKlxcbkJhc2ljIEZYQUEgaW1wbGVtZW50YXRpb24gYmFzZWQgb24gdGhlIGNvZGUgb24gZ2Vla3MzZC5jb20gd2l0aCB0aGVcXG5tb2RpZmljYXRpb24gdGhhdCB0aGUgdGV4dHVyZTJETG9kIHN0dWZmIHdhcyByZW1vdmVkIHNpbmNlIGl0J3NcXG51bnN1cHBvcnRlZCBieSBXZWJHTC5cXG5cXG4tLVxcblxcbkZyb206XFxuaHR0cHM6Ly9naXRodWIuY29tL21pdHN1aGlrby93ZWJnbC1tZWluY3JhZnRcXG5cXG5Db3B5cmlnaHQgKGMpIDIwMTEgYnkgQXJtaW4gUm9uYWNoZXIuXFxuXFxuU29tZSByaWdodHMgcmVzZXJ2ZWQuXFxuXFxuUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0XFxubW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZVxcbm1ldDpcXG5cXG4gICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodFxcbiAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci5cXG5cXG4gICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlXFxuICAgICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmdcXG4gICAgICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWRcXG4gICAgICB3aXRoIHRoZSBkaXN0cmlidXRpb24uXFxuXFxuICAgICogVGhlIG5hbWVzIG9mIHRoZSBjb250cmlidXRvcnMgbWF5IG5vdCBiZSB1c2VkIHRvIGVuZG9yc2Ugb3JcXG4gICAgICBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWNcXG4gICAgICBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uXFxuXFxuVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SU1xcblxcXCJBUyBJU1xcXCIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UXFxuTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SXFxuQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFRcXG5PV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCxcXG5TUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UXFxuTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsXFxuREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZXFxuVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVFxcbihJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRVxcbk9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuXFxuKi9cXG5cXG4jaWZuZGVmIEZYQUFfUkVEVUNFX01JTlxcbiAgICAjZGVmaW5lIEZYQUFfUkVEVUNFX01JTiAgICgxLjAvIDEyOC4wKVxcbiNlbmRpZlxcbiNpZm5kZWYgRlhBQV9SRURVQ0VfTVVMXFxuICAgICNkZWZpbmUgRlhBQV9SRURVQ0VfTVVMICAgKDEuMCAvIDguMClcXG4jZW5kaWZcXG4jaWZuZGVmIEZYQUFfU1BBTl9NQVhcXG4gICAgI2RlZmluZSBGWEFBX1NQQU5fTUFYICAgICA4LjBcXG4jZW5kaWZcXG5cXG4vL29wdGltaXplZCB2ZXJzaW9uIGZvciBtb2JpbGUsIHdoZXJlIGRlcGVuZGVudFxcbi8vdGV4dHVyZSByZWFkcyBjYW4gYmUgYSBib3R0bGVuZWNrXFxudmVjNCBmeGFhKHNhbXBsZXIyRCB0ZXgsIHZlYzIgZnJhZ0Nvb3JkLCB2ZWMyIHJlc29sdXRpb24sXFxuICAgICAgICAgICAgdmVjMiB2X3JnYk5XLCB2ZWMyIHZfcmdiTkUsXFxuICAgICAgICAgICAgdmVjMiB2X3JnYlNXLCB2ZWMyIHZfcmdiU0UsXFxuICAgICAgICAgICAgdmVjMiB2X3JnYk0pIHtcXG4gICAgdmVjNCBjb2xvcjtcXG4gICAgbWVkaXVtcCB2ZWMyIGludmVyc2VWUCA9IHZlYzIoMS4wIC8gcmVzb2x1dGlvbi54LCAxLjAgLyByZXNvbHV0aW9uLnkpO1xcbiAgICB2ZWMzIHJnYk5XID0gdGV4dHVyZTJEKHRleCwgdl9yZ2JOVykueHl6O1xcbiAgICB2ZWMzIHJnYk5FID0gdGV4dHVyZTJEKHRleCwgdl9yZ2JORSkueHl6O1xcbiAgICB2ZWMzIHJnYlNXID0gdGV4dHVyZTJEKHRleCwgdl9yZ2JTVykueHl6O1xcbiAgICB2ZWMzIHJnYlNFID0gdGV4dHVyZTJEKHRleCwgdl9yZ2JTRSkueHl6O1xcbiAgICB2ZWM0IHRleENvbG9yID0gdGV4dHVyZTJEKHRleCwgdl9yZ2JNKTtcXG4gICAgdmVjMyByZ2JNICA9IHRleENvbG9yLnh5ejtcXG4gICAgdmVjMyBsdW1hID0gdmVjMygwLjI5OSwgMC41ODcsIDAuMTE0KTtcXG4gICAgZmxvYXQgbHVtYU5XID0gZG90KHJnYk5XLCBsdW1hKTtcXG4gICAgZmxvYXQgbHVtYU5FID0gZG90KHJnYk5FLCBsdW1hKTtcXG4gICAgZmxvYXQgbHVtYVNXID0gZG90KHJnYlNXLCBsdW1hKTtcXG4gICAgZmxvYXQgbHVtYVNFID0gZG90KHJnYlNFLCBsdW1hKTtcXG4gICAgZmxvYXQgbHVtYU0gID0gZG90KHJnYk0sICBsdW1hKTtcXG4gICAgZmxvYXQgbHVtYU1pbiA9IG1pbihsdW1hTSwgbWluKG1pbihsdW1hTlcsIGx1bWFORSksIG1pbihsdW1hU1csIGx1bWFTRSkpKTtcXG4gICAgZmxvYXQgbHVtYU1heCA9IG1heChsdW1hTSwgbWF4KG1heChsdW1hTlcsIGx1bWFORSksIG1heChsdW1hU1csIGx1bWFTRSkpKTtcXG5cXG4gICAgbWVkaXVtcCB2ZWMyIGRpcjtcXG4gICAgZGlyLnggPSAtKChsdW1hTlcgKyBsdW1hTkUpIC0gKGx1bWFTVyArIGx1bWFTRSkpO1xcbiAgICBkaXIueSA9ICAoKGx1bWFOVyArIGx1bWFTVykgLSAobHVtYU5FICsgbHVtYVNFKSk7XFxuXFxuICAgIGZsb2F0IGRpclJlZHVjZSA9IG1heCgobHVtYU5XICsgbHVtYU5FICsgbHVtYVNXICsgbHVtYVNFKSAqXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAoMC4yNSAqIEZYQUFfUkVEVUNFX01VTCksIEZYQUFfUkVEVUNFX01JTik7XFxuXFxuICAgIGZsb2F0IHJjcERpck1pbiA9IDEuMCAvIChtaW4oYWJzKGRpci54KSwgYWJzKGRpci55KSkgKyBkaXJSZWR1Y2UpO1xcbiAgICBkaXIgPSBtaW4odmVjMihGWEFBX1NQQU5fTUFYLCBGWEFBX1NQQU5fTUFYKSxcXG4gICAgICAgICAgICAgIG1heCh2ZWMyKC1GWEFBX1NQQU5fTUFYLCAtRlhBQV9TUEFOX01BWCksXFxuICAgICAgICAgICAgICBkaXIgKiByY3BEaXJNaW4pKSAqIGludmVyc2VWUDtcXG5cXG4gICAgdmVjMyByZ2JBID0gMC41ICogKFxcbiAgICAgICAgdGV4dHVyZTJEKHRleCwgZnJhZ0Nvb3JkICogaW52ZXJzZVZQICsgZGlyICogKDEuMCAvIDMuMCAtIDAuNSkpLnh5eiArXFxuICAgICAgICB0ZXh0dXJlMkQodGV4LCBmcmFnQ29vcmQgKiBpbnZlcnNlVlAgKyBkaXIgKiAoMi4wIC8gMy4wIC0gMC41KSkueHl6KTtcXG4gICAgdmVjMyByZ2JCID0gcmdiQSAqIDAuNSArIDAuMjUgKiAoXFxuICAgICAgICB0ZXh0dXJlMkQodGV4LCBmcmFnQ29vcmQgKiBpbnZlcnNlVlAgKyBkaXIgKiAtMC41KS54eXogK1xcbiAgICAgICAgdGV4dHVyZTJEKHRleCwgZnJhZ0Nvb3JkICogaW52ZXJzZVZQICsgZGlyICogMC41KS54eXopO1xcblxcbiAgICBmbG9hdCBsdW1hQiA9IGRvdChyZ2JCLCBsdW1hKTtcXG4gICAgaWYgKChsdW1hQiA8IGx1bWFNaW4pIHx8IChsdW1hQiA+IGx1bWFNYXgpKVxcbiAgICAgICAgY29sb3IgPSB2ZWM0KHJnYkEsIHRleENvbG9yLmEpO1xcbiAgICBlbHNlXFxuICAgICAgICBjb2xvciA9IHZlYzQocmdiQiwgdGV4Q29sb3IuYSk7XFxuICAgIHJldHVybiBjb2xvcjtcXG59XFxuXFxuXFxudmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7XFxudmFyeWluZyB2ZWM0IHZDb2xvcjtcXG52YXJ5aW5nIHZlYzIgdlJlc29sdXRpb247XFxuXFxuLy90ZXhjb29yZHMgY29tcHV0ZWQgaW4gdmVydGV4IHN0ZXBcXG4vL3RvIGF2b2lkIGRlcGVuZGVudCB0ZXh0dXJlIHJlYWRzXFxudmFyeWluZyB2ZWMyIHZfcmdiTlc7XFxudmFyeWluZyB2ZWMyIHZfcmdiTkU7XFxudmFyeWluZyB2ZWMyIHZfcmdiU1c7XFxudmFyeWluZyB2ZWMyIHZfcmdiU0U7XFxudmFyeWluZyB2ZWMyIHZfcmdiTTtcXG5cXG51bmlmb3JtIHNhbXBsZXIyRCB1U2FtcGxlcjtcXG5cXG5cXG52b2lkIG1haW4odm9pZCl7XFxuXFxuICAgIGdsX0ZyYWdDb2xvciA9IGZ4YWEodVNhbXBsZXIsIHZUZXh0dXJlQ29vcmQgKiB2UmVzb2x1dGlvbiwgdlJlc29sdXRpb24sIHZfcmdiTlcsIHZfcmdiTkUsIHZfcmdiU1csIHZfcmdiU0UsIHZfcmdiTSk7XFxuXFxufVxcblwiLFxuICAgICAgICAvLyB1bmlmb3Jtc1xuICAgICAgICB7XG4gICAgICAgICAgICByZXNvbHV0aW9uOiB7IHR5cGU6ICd2MicsIHZhbHVlOiB7IHg6IDEsIHk6IDEgfSB9XG4gICAgICAgIH1cbiAgICApO1xuXG59XG5cbkZYQUFGaWx0ZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShBYnN0cmFjdEZpbHRlci5wcm90b3R5cGUpO1xuRlhBQUZpbHRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBGWEFBRmlsdGVyO1xubW9kdWxlLmV4cG9ydHMgPSBGWEFBRmlsdGVyO1xuXG4vKipcbiAqIEFwcGxpZXMgdGhlIGZpbHRlclxuICpcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5XZWJHTFJlbmRlcmVyfSBUaGUgcmVuZGVyZXIgdG8gcmV0cmlldmUgdGhlIGZpbHRlciBmcm9tXG4gKiBAcGFyYW0gaW5wdXQge1BJWEkuUmVuZGVyVGFyZ2V0fVxuICogQHBhcmFtIG91dHB1dCB7UElYSS5SZW5kZXJUYXJnZXR9XG4gKi9cbkZYQUFGaWx0ZXIucHJvdG90eXBlLmFwcGx5RmlsdGVyID0gZnVuY3Rpb24gKHJlbmRlcmVyLCBpbnB1dCwgb3V0cHV0KVxue1xuICAgIHZhciBmaWx0ZXJNYW5hZ2VyID0gcmVuZGVyZXIuZmlsdGVyTWFuYWdlcjtcblxuICAgIHZhciBzaGFkZXIgPSB0aGlzLmdldFNoYWRlciggcmVuZGVyZXIgKTtcbiAgICAgLy8gZHJhdyB0aGUgZmlsdGVyLi4uXG4gICAgZmlsdGVyTWFuYWdlci5hcHBseUZpbHRlcihzaGFkZXIsIGlucHV0LCBvdXRwdXQpO1xufTtcbiIsInZhciBBYnN0cmFjdEZpbHRlciA9IHJlcXVpcmUoJy4vQWJzdHJhY3RGaWx0ZXInKSxcbiAgICBtYXRoID0gIHJlcXVpcmUoJy4uLy4uLy4uL21hdGgnKTtcblxuLy8gQHNlZSBodHRwczovL2dpdGh1Yi5jb20vc3Vic3RhY2svYnJmcy9pc3N1ZXMvMjVcblxuXG4vKipcbiAqIFRoZSBTcHJpdGVNYXNrRmlsdGVyIGNsYXNzXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLkFic3RyYWN0RmlsdGVyXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIHNwcml0ZSB7UElYSS5TcHJpdGV9IHRoZSB0YXJnZXQgc3ByaXRlXG4gKi9cbmZ1bmN0aW9uIFNwcml0ZU1hc2tGaWx0ZXIoc3ByaXRlKVxue1xuICAgIHZhciBtYXNrTWF0cml4ID0gbmV3IG1hdGguTWF0cml4KCk7XG5cbiAgICBBYnN0cmFjdEZpbHRlci5jYWxsKHRoaXMsXG4gICAgICAgIFwiYXR0cmlidXRlIHZlYzIgYVZlcnRleFBvc2l0aW9uO1xcbmF0dHJpYnV0ZSB2ZWMyIGFUZXh0dXJlQ29vcmQ7XFxuYXR0cmlidXRlIHZlYzQgYUNvbG9yO1xcblxcbnVuaWZvcm0gbWF0MyBwcm9qZWN0aW9uTWF0cml4O1xcbnVuaWZvcm0gbWF0MyBvdGhlck1hdHJpeDtcXG5cXG52YXJ5aW5nIHZlYzIgdk1hc2tDb29yZDtcXG52YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDtcXG52YXJ5aW5nIHZlYzQgdkNvbG9yO1xcblxcbnZvaWQgbWFpbih2b2lkKVxcbntcXG4gICAgZ2xfUG9zaXRpb24gPSB2ZWM0KChwcm9qZWN0aW9uTWF0cml4ICogdmVjMyhhVmVydGV4UG9zaXRpb24sIDEuMCkpLnh5LCAwLjAsIDEuMCk7XFxuICAgIHZUZXh0dXJlQ29vcmQgPSBhVGV4dHVyZUNvb3JkO1xcbiAgICB2TWFza0Nvb3JkID0gKCBvdGhlck1hdHJpeCAqIHZlYzMoIGFUZXh0dXJlQ29vcmQsIDEuMCkgICkueHk7XFxuICAgIHZDb2xvciA9IHZlYzQoYUNvbG9yLnJnYiAqIGFDb2xvci5hLCBhQ29sb3IuYSk7XFxufVxcblwiLFxuICAgICAgICBcInByZWNpc2lvbiBsb3dwIGZsb2F0O1xcblxcbnZhcnlpbmcgdmVjMiB2TWFza0Nvb3JkO1xcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xcbnZhcnlpbmcgdmVjNCB2Q29sb3I7XFxuXFxudW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXI7XFxudW5pZm9ybSBmbG9hdCBhbHBoYTtcXG51bmlmb3JtIHNhbXBsZXIyRCBtYXNrO1xcblxcbnZvaWQgbWFpbih2b2lkKVxcbntcXG4gICAgLy8gY2hlY2sgY2xpcCEgdGhpcyB3aWxsIHN0b3AgdGhlIG1hc2sgYmxlZWRpbmcgb3V0IGZyb20gdGhlIGVkZ2VzXFxuICAgIHZlYzIgdGV4dCA9IGFicyggdk1hc2tDb29yZCAtIDAuNSApO1xcbiAgICB0ZXh0ID0gc3RlcCgwLjUsIHRleHQpO1xcbiAgICBmbG9hdCBjbGlwID0gMS4wIC0gbWF4KHRleHQueSwgdGV4dC54KTtcXG4gICAgdmVjNCBvcmlnaW5hbCA9IHRleHR1cmUyRCh1U2FtcGxlciwgdlRleHR1cmVDb29yZCk7XFxuICAgIHZlYzQgbWFza3kgPSB0ZXh0dXJlMkQobWFzaywgdk1hc2tDb29yZCk7XFxuICAgIG9yaWdpbmFsICo9IChtYXNreS5yICogbWFza3kuYSAqIGFscGhhICogY2xpcCk7XFxuICAgIGdsX0ZyYWdDb2xvciA9IG9yaWdpbmFsO1xcbn1cXG5cIixcbiAgICAgICAge1xuICAgICAgICAgICAgbWFzazogICAgICAgICAgIHsgdHlwZTogJ3NhbXBsZXIyRCcsIHZhbHVlOiBzcHJpdGUuX3RleHR1cmUgfSxcbiAgICAgICAgICAgIGFscGhhOiAgICAgICAgICB7IHR5cGU6ICdmJywgdmFsdWU6IDF9LFxuICAgICAgICAgICAgb3RoZXJNYXRyaXg6ICAgIHsgdHlwZTogJ21hdDMnLCB2YWx1ZTogbWFza01hdHJpeC50b0FycmF5KHRydWUpIH1cbiAgICAgICAgfVxuICAgICk7XG5cbiAgICB0aGlzLm1hc2tTcHJpdGUgPSBzcHJpdGU7XG4gICAgdGhpcy5tYXNrTWF0cml4ID0gbWFza01hdHJpeDtcbn1cblxuU3ByaXRlTWFza0ZpbHRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKEFic3RyYWN0RmlsdGVyLnByb3RvdHlwZSk7XG5TcHJpdGVNYXNrRmlsdGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFNwcml0ZU1hc2tGaWx0ZXI7XG5tb2R1bGUuZXhwb3J0cyA9IFNwcml0ZU1hc2tGaWx0ZXI7XG5cbi8qKlxuICogQXBwbGllcyB0aGUgZmlsdGVyXG4gKlxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLldlYkdMUmVuZGVyZXJ9IFRoZSByZW5kZXJlciB0byByZXRyaWV2ZSB0aGUgZmlsdGVyIGZyb21cbiAqIEBwYXJhbSBpbnB1dCB7UElYSS5SZW5kZXJUYXJnZXR9XG4gKiBAcGFyYW0gb3V0cHV0IHtQSVhJLlJlbmRlclRhcmdldH1cbiAqL1xuU3ByaXRlTWFza0ZpbHRlci5wcm90b3R5cGUuYXBwbHlGaWx0ZXIgPSBmdW5jdGlvbiAocmVuZGVyZXIsIGlucHV0LCBvdXRwdXQpXG57XG4gICAgdmFyIGZpbHRlck1hbmFnZXIgPSByZW5kZXJlci5maWx0ZXJNYW5hZ2VyO1xuXG4gICAgdGhpcy51bmlmb3Jtcy5tYXNrLnZhbHVlID0gdGhpcy5tYXNrU3ByaXRlLl90ZXh0dXJlO1xuXG4gICAgZmlsdGVyTWFuYWdlci5jYWxjdWxhdGVNYXBwZWRNYXRyaXgoaW5wdXQuZnJhbWUsIHRoaXMubWFza1Nwcml0ZSwgdGhpcy5tYXNrTWF0cml4KTtcblxuICAgIHRoaXMudW5pZm9ybXMub3RoZXJNYXRyaXgudmFsdWUgPSB0aGlzLm1hc2tNYXRyaXgudG9BcnJheSh0cnVlKTtcbiAgICB0aGlzLnVuaWZvcm1zLmFscGhhLnZhbHVlID0gdGhpcy5tYXNrU3ByaXRlLndvcmxkQWxwaGE7XG5cbiAgICB2YXIgc2hhZGVyID0gdGhpcy5nZXRTaGFkZXIocmVuZGVyZXIpO1xuICAgICAvLyBkcmF3IHRoZSBmaWx0ZXIuLi5cbiAgICBmaWx0ZXJNYW5hZ2VyLmFwcGx5RmlsdGVyKHNoYWRlciwgaW5wdXQsIG91dHB1dCk7XG59O1xuXG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKFNwcml0ZU1hc2tGaWx0ZXIucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogVGhlIHRleHR1cmUgdXNlZCBmb3IgdGhlIGRpc3BsYWNlbWVudCBtYXAuIE11c3QgYmUgcG93ZXIgb2YgMiBzaXplZCB0ZXh0dXJlLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5UZXh0dXJlfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLlNwcml0ZU1hc2tGaWx0ZXIjXG4gICAgICovXG4gICAgbWFwOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudW5pZm9ybXMubWFzay52YWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudW5pZm9ybXMubWFzay52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFRoZSBvZmZzZXQgdXNlZCB0byBtb3ZlIHRoZSBkaXNwbGFjZW1lbnQgbWFwLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5Qb2ludH1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5TcHJpdGVNYXNrRmlsdGVyI1xuICAgICAqL1xuICAgIG9mZnNldDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudW5pZm9ybXMub2Zmc2V0LnZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLm9mZnNldC52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfVxufSk7XG4iLCJ2YXIgV2ViR0xNYW5hZ2VyID0gcmVxdWlyZSgnLi9XZWJHTE1hbmFnZXInKTtcblxuLyoqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAZXh0ZW5kcyBQSVhJLldlYkdsTWFuYWdlclxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLldlYkdMUmVuZGVyZXJ9IFRoZSByZW5kZXJlciB0aGlzIG1hbmFnZXIgd29ya3MgZm9yLlxuICovXG5mdW5jdGlvbiBCbGVuZE1vZGVNYW5hZ2VyKHJlbmRlcmVyKVxue1xuICAgIFdlYkdMTWFuYWdlci5jYWxsKHRoaXMsIHJlbmRlcmVyKTtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLmN1cnJlbnRCbGVuZE1vZGUgPSA5OTk5OTtcbn1cblxuQmxlbmRNb2RlTWFuYWdlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFdlYkdMTWFuYWdlci5wcm90b3R5cGUpO1xuQmxlbmRNb2RlTWFuYWdlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBCbGVuZE1vZGVNYW5hZ2VyO1xubW9kdWxlLmV4cG9ydHMgPSBCbGVuZE1vZGVNYW5hZ2VyO1xuXG4vKipcbiAqIFNldHMtdXAgdGhlIGdpdmVuIGJsZW5kTW9kZSBmcm9tIFdlYkdMJ3MgcG9pbnQgb2Ygdmlldy5cbiAqXG4gKiBAcGFyYW0gYmxlbmRNb2RlIHtudW1iZXJ9IHRoZSBibGVuZE1vZGUsIHNob3VsZCBiZSBhIFBpeGkgY29uc3QsIHN1Y2ggYXMgYFBJWEkuQkxFTkRfTU9ERVMuQUREYC4gU2VlXG4gKiAge0BsaW5rIFBJWEkuQkxFTkRfTU9ERVN9IGZvciBwb3NzaWJsZSB2YWx1ZXMuXG4gKi9cbkJsZW5kTW9kZU1hbmFnZXIucHJvdG90eXBlLnNldEJsZW5kTW9kZSA9IGZ1bmN0aW9uIChibGVuZE1vZGUpXG57XG4gICAgaWYgKHRoaXMuY3VycmVudEJsZW5kTW9kZSA9PT0gYmxlbmRNb2RlKVxuICAgIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHRoaXMuY3VycmVudEJsZW5kTW9kZSA9IGJsZW5kTW9kZTtcblxuICAgIHZhciBtb2RlID0gdGhpcy5yZW5kZXJlci5ibGVuZE1vZGVzW3RoaXMuY3VycmVudEJsZW5kTW9kZV07XG4gICAgdGhpcy5yZW5kZXJlci5nbC5ibGVuZEZ1bmMobW9kZVswXSwgbW9kZVsxXSk7XG5cbiAgICByZXR1cm4gdHJ1ZTtcbn07XG4iLCJ2YXIgV2ViR0xNYW5hZ2VyID0gcmVxdWlyZSgnLi9XZWJHTE1hbmFnZXInKSxcbiAgICBSZW5kZXJUYXJnZXQgPSByZXF1aXJlKCcuLi91dGlscy9SZW5kZXJUYXJnZXQnKSxcbiAgICBDT05TVCA9IHJlcXVpcmUoJy4uLy4uLy4uL2NvbnN0JyksXG4gICAgUXVhZCA9IHJlcXVpcmUoJy4uL3V0aWxzL1F1YWQnKSxcbiAgICBtYXRoID0gIHJlcXVpcmUoJy4uLy4uLy4uL21hdGgnKTtcblxuLyoqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAZXh0ZW5kcyBQSVhJLldlYkdMTWFuYWdlclxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLldlYkdMUmVuZGVyZXJ9IFRoZSByZW5kZXJlciB0aGlzIG1hbmFnZXIgd29ya3MgZm9yLlxuICovXG5mdW5jdGlvbiBGaWx0ZXJNYW5hZ2VyKHJlbmRlcmVyKVxue1xuICAgIFdlYkdMTWFuYWdlci5jYWxsKHRoaXMsIHJlbmRlcmVyKTtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge29iamVjdFtdfVxuICAgICAqL1xuICAgIHRoaXMuZmlsdGVyU3RhY2sgPSBbXTtcblxuICAgIHRoaXMuZmlsdGVyU3RhY2sucHVzaCh7XG4gICAgICAgIHJlbmRlclRhcmdldDpyZW5kZXJlci5jdXJyZW50UmVuZGVyVGFyZ2V0LFxuICAgICAgICBmaWx0ZXI6W10sXG4gICAgICAgIGJvdW5kczpudWxsXG4gICAgfSk7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlJlbmRlclRhcmdldFtdfVxuICAgICAqL1xuICAgIHRoaXMudGV4dHVyZVBvb2wgPSBbXTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBzaXplIG9mIHRoZSB0ZXh0dXJlXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlJlY3RhbmdsZX1cbiAgICAgKi9cbiAgICAvLyBsaXN0ZW4gZm9yIGNvbnRleHQgYW5kIHVwZGF0ZSBuZWNlc3NhcnkgYnVmZmVyc1xuICAgIC8vVE9ETyBtYWtlIHRoaXMgZHluYW1pYyFcbiAgICAvL1RPRE8gdGVzdCB0aGlzIG91dCBieSBmb3JjZXMgcG93ZXIgb2YgdHdvP1xuICAgIHRoaXMudGV4dHVyZVNpemUgPSBuZXcgbWF0aC5SZWN0YW5nbGUoMCwgMCwgcmVuZGVyZXIud2lkdGgsIHJlbmRlcmVyLmhlaWdodCk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgY3VycmVudCBmcmFtZVxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5SZWN0YW5nbGV9XG4gICAgICovXG4gICAgdGhpcy5jdXJyZW50RnJhbWUgPSBudWxsO1xufVxuXG5GaWx0ZXJNYW5hZ2VyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoV2ViR0xNYW5hZ2VyLnByb3RvdHlwZSk7XG5GaWx0ZXJNYW5hZ2VyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IEZpbHRlck1hbmFnZXI7XG5tb2R1bGUuZXhwb3J0cyA9IEZpbHRlck1hbmFnZXI7XG5cblxuLyoqXG4gKiBDYWxsZWQgd2hlbiB0aGVyZSBpcyBhIFdlYkdMIGNvbnRleHQgY2hhbmdlLlxuICpcbiAqL1xuRmlsdGVyTWFuYWdlci5wcm90b3R5cGUub25Db250ZXh0Q2hhbmdlID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLnRleHR1cmVQb29sLmxlbmd0aCA9IDA7XG5cbiAgICB2YXIgZ2wgPSB0aGlzLnJlbmRlcmVyLmdsO1xuICAgIHRoaXMucXVhZCA9IG5ldyBRdWFkKGdsKTtcbn07XG5cbi8qKlxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLldlYkdMUmVuZGVyZXJ9XG4gKiBAcGFyYW0gYnVmZmVyIHtBcnJheUJ1ZmZlcn1cbiAqL1xuRmlsdGVyTWFuYWdlci5wcm90b3R5cGUuc2V0RmlsdGVyU3RhY2sgPSBmdW5jdGlvbiAoIGZpbHRlclN0YWNrIClcbntcbiAgICB0aGlzLmZpbHRlclN0YWNrID0gZmlsdGVyU3RhY2s7XG59O1xuXG4vKipcbiAqIEFwcGxpZXMgdGhlIGZpbHRlciBhbmQgYWRkcyBpdCB0byB0aGUgY3VycmVudCBmaWx0ZXIgc3RhY2suXG4gKlxuICogQHBhcmFtIHRhcmdldCB7UElYSS5EaXNwbGF5T2JqZWN0fVxuICogQHBhcmFtIGZpbHRlcnMge1BJWEkuQWJzdHJhY3RGaWxlcltdfSB0aGUgZmlsdGVycyB0aGF0IHdpbGwgYmUgcHVzaGVkIHRvIHRoZSBjdXJyZW50IGZpbHRlciBzdGFja1xuICovXG5GaWx0ZXJNYW5hZ2VyLnByb3RvdHlwZS5wdXNoRmlsdGVyID0gZnVuY3Rpb24gKHRhcmdldCwgZmlsdGVycylcbntcbiAgICAvLyBnZXQgdGhlIGJvdW5kcyBvZiB0aGUgb2JqZWN0Li5cbiAgICAvLyBUT0RPIHJlcGxhY2UgY2xvbmUgd2l0aCBhIGNvcHkgdG8gc2F2ZSBvYmplY3QgY3JlYXRpb25cbiAgICB2YXIgYm91bmRzID0gdGFyZ2V0LmZpbHRlckFyZWEgPyB0YXJnZXQuZmlsdGVyQXJlYS5jbG9uZSgpIDogdGFyZ2V0LmdldEJvdW5kcygpO1xuXG4gICAgLy9ib3VuZHMgPSBib3VuZHMuY2xvbmUoKTtcblxuICAgIC8vIHJvdW5kIG9mZiB0aGUgcmVjdGFuZ2xlIHRvIGdldCBhIG5pY2Ugc21vb29vb29vdGggZmlsdGVyIDopXG4gICAgYm91bmRzLnggPSBib3VuZHMueCB8IDA7XG4gICAgYm91bmRzLnkgPSBib3VuZHMueSB8IDA7XG4gICAgYm91bmRzLndpZHRoID0gYm91bmRzLndpZHRoIHwgMDtcbiAgICBib3VuZHMuaGVpZ2h0ID0gYm91bmRzLmhlaWdodCB8IDA7XG5cblxuICAgIC8vIHBhZGRpbmchXG4gICAgdmFyIHBhZGRpbmcgPSBmaWx0ZXJzWzBdLnBhZGRpbmcgfCAwO1xuICAgIGJvdW5kcy54IC09IHBhZGRpbmc7XG4gICAgYm91bmRzLnkgLT0gcGFkZGluZztcbiAgICBib3VuZHMud2lkdGggKz0gcGFkZGluZyAqIDI7XG4gICAgYm91bmRzLmhlaWdodCArPSBwYWRkaW5nICogMjtcblxuXG4gICAgaWYodGhpcy5yZW5kZXJlci5jdXJyZW50UmVuZGVyVGFyZ2V0LnRyYW5zZm9ybSlcbiAgICB7XG4gICAgICAgIC8vVE9ETyB0aGlzIHdpbGwgYnJlYWsgaWYgdGhlIHJlbmRlclRleHR1cmUgdHJhbnNmb3JtIGlzIGFueXRoaW5nIG90aGVyIHRoYW4gYSB0cmFuc2xhdGlvbi5cbiAgICAgICAgLy9XaWxsIG5lZWQgdG8gdGFrZSB0aGUgZnVsbCBtYXRyaXggdHJhbnNmb3JtIGludG8gYWNvdW50Li5cbiAgICAgICAgdmFyIHRyYW5zZm9ybSA9IHRoaXMucmVuZGVyZXIuY3VycmVudFJlbmRlclRhcmdldC50cmFuc2Zvcm07XG5cbiAgICAgICAgYm91bmRzLnggKz0gdHJhbnNmb3JtLnR4O1xuICAgICAgICBib3VuZHMueSArPSB0cmFuc2Zvcm0udHk7XG5cbiAgICAgICAgdGhpcy5jYXBGaWx0ZXJBcmVhKCBib3VuZHMgKTtcblxuICAgICAgICBib3VuZHMueCAtPSB0cmFuc2Zvcm0udHg7XG4gICAgICAgIGJvdW5kcy55IC09IHRyYW5zZm9ybS50eTtcbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgIHRoaXMuY2FwRmlsdGVyQXJlYSggYm91bmRzICk7XG4gICAgfVxuXG4gICAgaWYoYm91bmRzLndpZHRoID4gMCAmJiBib3VuZHMuaGVpZ2h0ID4gMClcbiAgICB7XG4gICAgICAgIHRoaXMuY3VycmVudEZyYW1lID0gYm91bmRzO1xuXG4gICAgICAgIHZhciB0ZXh0dXJlID0gdGhpcy5nZXRSZW5kZXJUYXJnZXQoKTtcblxuICAgICAgICB0aGlzLnJlbmRlcmVyLnNldFJlbmRlclRhcmdldCh0ZXh0dXJlKTtcblxuICAgICAgICAvLyBjbGVhciB0aGUgdGV4dHVyZS4uXG4gICAgICAgIHRleHR1cmUuY2xlYXIoKTtcblxuICAgICAgICAvLyBUT0RPIGdldCByaWQgb2Ygb2JqZWN0IGNyZWF0aW9uIVxuICAgICAgICB0aGlzLmZpbHRlclN0YWNrLnB1c2goe1xuICAgICAgICAgICAgcmVuZGVyVGFyZ2V0OiB0ZXh0dXJlLFxuICAgICAgICAgICAgZmlsdGVyOiBmaWx0ZXJzXG4gICAgICAgIH0pO1xuXG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIC8vIHB1c2ggc29tdGhpbmcgb24gdG8gdGhlIHN0YWNrIHRoYXQgaXMgZW1wdHlcbiAgICAgICAgdGhpcy5maWx0ZXJTdGFjay5wdXNoKHtcbiAgICAgICAgICAgIHJlbmRlclRhcmdldDogbnVsbCxcbiAgICAgICAgICAgIGZpbHRlcjogZmlsdGVyc1xuICAgICAgICB9KTtcbiAgICB9XG59O1xuXG5cbi8qKlxuICogUmVtb3ZlcyB0aGUgbGFzdCBmaWx0ZXIgZnJvbSB0aGUgZmlsdGVyIHN0YWNrIGFuZCByZXR1cm5zIGl0LlxuICpcbiAqL1xuRmlsdGVyTWFuYWdlci5wcm90b3R5cGUucG9wRmlsdGVyID0gZnVuY3Rpb24gKClcbntcbiAgICB2YXIgZmlsdGVyRGF0YSA9IHRoaXMuZmlsdGVyU3RhY2sucG9wKCk7XG4gICAgdmFyIHByZXZpb3VzRmlsdGVyRGF0YSA9IHRoaXMuZmlsdGVyU3RhY2tbdGhpcy5maWx0ZXJTdGFjay5sZW5ndGgtMV07XG5cbiAgICB2YXIgaW5wdXQgPSBmaWx0ZXJEYXRhLnJlbmRlclRhcmdldDtcblxuICAgIC8vIGlmIHRoZSByZW5kZXJUYXJnZXQgaXMgbnVsbCB0aGVuIHdlIGRvbid0IGFwcGx5IHRoZSBmaWx0ZXIgYXMgaXRzIG9mZnNjcmVlblxuICAgIGlmKCFmaWx0ZXJEYXRhLnJlbmRlclRhcmdldClcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB2YXIgb3V0cHV0ID0gcHJldmlvdXNGaWx0ZXJEYXRhLnJlbmRlclRhcmdldDtcblxuICAgIC8vIHVzZSBwcm9ncmFtXG4gICAgdmFyIGdsID0gdGhpcy5yZW5kZXJlci5nbDtcblxuXG4gICAgdGhpcy5jdXJyZW50RnJhbWUgPSBpbnB1dC5mcmFtZTtcblxuICAgIHRoaXMucXVhZC5tYXAodGhpcy50ZXh0dXJlU2l6ZSwgaW5wdXQuZnJhbWUpO1xuXG5cbiAgICAvLyBUT0RPLi4gdGhpcyBwcm9iYWJseSBvbmx5IG5lZWRzIHRvIGJlIGRvbmUgb25jZSFcbiAgICBnbC5iaW5kQnVmZmVyKGdsLkFSUkFZX0JVRkZFUiwgdGhpcy5xdWFkLnZlcnRleEJ1ZmZlcik7XG4gICAgZ2wuYmluZEJ1ZmZlcihnbC5FTEVNRU5UX0FSUkFZX0JVRkZFUiwgdGhpcy5xdWFkLmluZGV4QnVmZmVyKTtcblxuICAgIHZhciBmaWx0ZXJzID0gZmlsdGVyRGF0YS5maWx0ZXI7XG5cbiAgICAvLyBhc3N1bWluZyBhbGwgZmlsdGVycyBmb2xsb3cgdGhlIGNvcnJlY3QgZm9ybWF0Pz9cbiAgICBnbC52ZXJ0ZXhBdHRyaWJQb2ludGVyKHRoaXMucmVuZGVyZXIuc2hhZGVyTWFuYWdlci5kZWZhdWx0U2hhZGVyLmF0dHJpYnV0ZXMuYVZlcnRleFBvc2l0aW9uLCAyLCBnbC5GTE9BVCwgZmFsc2UsIDAsIDApO1xuICAgIGdsLnZlcnRleEF0dHJpYlBvaW50ZXIodGhpcy5yZW5kZXJlci5zaGFkZXJNYW5hZ2VyLmRlZmF1bHRTaGFkZXIuYXR0cmlidXRlcy5hVGV4dHVyZUNvb3JkLCAyLCBnbC5GTE9BVCwgZmFsc2UsIDAsIDIgKiA0ICogNCk7XG4gICAgZ2wudmVydGV4QXR0cmliUG9pbnRlcih0aGlzLnJlbmRlcmVyLnNoYWRlck1hbmFnZXIuZGVmYXVsdFNoYWRlci5hdHRyaWJ1dGVzLmFDb2xvciwgNCwgZ2wuRkxPQVQsIGZhbHNlLCAwLCA0ICogNCAqIDQpO1xuXG4gICAgLy8gcmVzdG9yZSB0aGUgbm9ybWFsIGJsZW5kbW9kZSFcbiAgICB0aGlzLnJlbmRlcmVyLmJsZW5kTW9kZU1hbmFnZXIuc2V0QmxlbmRNb2RlKENPTlNULkJMRU5EX01PREVTLk5PUk1BTCk7XG5cbiAgICBpZiAoZmlsdGVycy5sZW5ndGggPT09IDEpXG4gICAge1xuICAgICAgICAvLyBUT0RPIChjZW5nbGVyKSAtIFRoZXJlIGhhcyB0byBiZSBhIGJldHRlciB3YXkgdGhlbiBzZXR0aW5nIHRoaXMgZWFjaCB0aW1lP1xuICAgICAgICBpZiAoZmlsdGVyc1swXS51bmlmb3Jtcy5kaW1lbnNpb25zKVxuICAgICAgICB7XG4gICAgICAgICAgICBmaWx0ZXJzWzBdLnVuaWZvcm1zLmRpbWVuc2lvbnMudmFsdWVbMF0gPSB0aGlzLnJlbmRlcmVyLndpZHRoO1xuICAgICAgICAgICAgZmlsdGVyc1swXS51bmlmb3Jtcy5kaW1lbnNpb25zLnZhbHVlWzFdID0gdGhpcy5yZW5kZXJlci5oZWlnaHQ7XG4gICAgICAgICAgICBmaWx0ZXJzWzBdLnVuaWZvcm1zLmRpbWVuc2lvbnMudmFsdWVbMl0gPSB0aGlzLnF1YWQudmVydGljZXNbMF07XG4gICAgICAgICAgICBmaWx0ZXJzWzBdLnVuaWZvcm1zLmRpbWVuc2lvbnMudmFsdWVbM10gPSB0aGlzLnF1YWQudmVydGljZXNbNV07XG4gICAgICAgIH1cblxuICAgICAgICBmaWx0ZXJzWzBdLmFwcGx5RmlsdGVyKCB0aGlzLnJlbmRlcmVyLCBpbnB1dCwgb3V0cHV0ICk7XG4gICAgICAgIHRoaXMucmV0dXJuUmVuZGVyVGFyZ2V0KCBpbnB1dCApO1xuXG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHZhciBmbGlwVGV4dHVyZSA9IGlucHV0O1xuICAgICAgICB2YXIgZmxvcFRleHR1cmUgPSB0aGlzLmdldFJlbmRlclRhcmdldCh0cnVlKTtcblxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGZpbHRlcnMubGVuZ3RoLTE7IGkrKylcbiAgICAgICAge1xuICAgICAgICAgICAgdmFyIGZpbHRlciA9IGZpbHRlcnNbaV07XG5cbiAgICAgICAgICAgIC8vIFRPRE8gKGNlbmdsZXIpIC0gVGhlcmUgaGFzIHRvIGJlIGEgYmV0dGVyIHdheSB0aGVuIHNldHRpbmcgdGhpcyBlYWNoIHRpbWU/XG4gICAgICAgICAgICBpZiAoZmlsdGVyLnVuaWZvcm1zLmRpbWVuc2lvbnMpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgZmlsdGVyLnVuaWZvcm1zLmRpbWVuc2lvbnMudmFsdWVbMF0gPSB0aGlzLnJlbmRlcmVyLndpZHRoO1xuICAgICAgICAgICAgICAgIGZpbHRlci51bmlmb3Jtcy5kaW1lbnNpb25zLnZhbHVlWzFdID0gdGhpcy5yZW5kZXJlci5oZWlnaHQ7XG4gICAgICAgICAgICAgICAgZmlsdGVyLnVuaWZvcm1zLmRpbWVuc2lvbnMudmFsdWVbMl0gPSB0aGlzLnF1YWQudmVydGljZXNbMF07XG4gICAgICAgICAgICAgICAgZmlsdGVyLnVuaWZvcm1zLmRpbWVuc2lvbnMudmFsdWVbM10gPSB0aGlzLnF1YWQudmVydGljZXNbNV07XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGZpbHRlci5hcHBseUZpbHRlciggdGhpcy5yZW5kZXJlciwgZmxpcFRleHR1cmUsIGZsb3BUZXh0dXJlICk7XG5cbiAgICAgICAgICAgIHZhciB0ZW1wID0gZmxpcFRleHR1cmU7XG4gICAgICAgICAgICBmbGlwVGV4dHVyZSA9IGZsb3BUZXh0dXJlO1xuICAgICAgICAgICAgZmxvcFRleHR1cmUgPSB0ZW1wO1xuICAgICAgICB9XG5cbiAgICAgICAgZmlsdGVyc1tmaWx0ZXJzLmxlbmd0aC0xXS5hcHBseUZpbHRlciggdGhpcy5yZW5kZXJlciwgZmxpcFRleHR1cmUsIG91dHB1dCApO1xuXG4gICAgICAgIHRoaXMucmV0dXJuUmVuZGVyVGFyZ2V0KCBmbGlwVGV4dHVyZSApO1xuICAgICAgICB0aGlzLnJldHVyblJlbmRlclRhcmdldCggZmxvcFRleHR1cmUgKTtcbiAgICB9XG5cbiAgICByZXR1cm4gZmlsdGVyRGF0YS5maWx0ZXI7XG59O1xuXG4vKipcbiAqIEdyYWJzIGFuIHJlbmRlciB0YXJnZXQgZnJvbSB0aGUgaW50ZXJuYWwgcG9vbFxuICpcbiAqIEBwYXJhbSBjbGVhciB7Ym9vbGVhbn0gV2hldGhlciBvciBub3Qgd2UgbmVlZCB0byBjbGVhciB0aGUgUmVuZGVyVGFyZ2V0XG4gKiBAcmV0dXJuIHtSZW5kZXJUYXJnZXR9XG4gKi9cbkZpbHRlck1hbmFnZXIucHJvdG90eXBlLmdldFJlbmRlclRhcmdldCA9IGZ1bmN0aW9uICggY2xlYXIgKVxue1xuICAgIHZhciByZW5kZXJUYXJnZXQgPSB0aGlzLnRleHR1cmVQb29sLnBvcCgpIHx8IG5ldyBSZW5kZXJUYXJnZXQodGhpcy5yZW5kZXJlci5nbCwgdGhpcy50ZXh0dXJlU2l6ZS53aWR0aCwgdGhpcy50ZXh0dXJlU2l6ZS5oZWlnaHQsIENPTlNULlNDQUxFX01PREVTLkxJTkVBUiwgdGhpcy5yZW5kZXJlci5yZXNvbHV0aW9uICogQ09OU1QuRklMVEVSX1JFU09MVVRJT04pO1xuICAgIHJlbmRlclRhcmdldC5mcmFtZSA9IHRoaXMuY3VycmVudEZyYW1lO1xuXG4gICAgaWYgKGNsZWFyKVxuICAgIHtcbiAgICAgICAgcmVuZGVyVGFyZ2V0LmNsZWFyKHRydWUpO1xuICAgIH1cblxuICAgIHJldHVybiByZW5kZXJUYXJnZXQ7XG59O1xuXG4vKlxuICogUmV0dXJucyBhIFJlbmRlclRhcmdldCB0byB0aGUgaW50ZXJuYWwgcG9vbFxuICogQHBhcmFtIHJlbmRlclRhcmdldCB7UmVuZGVyVGFyZ2V0fSBUaGUgUmVuZGVyVGFyZ2V0IHdlIHdhbnQgdG8gcmV0dXJuIHRvIHRoZSBwb29sXG4gKi9cbkZpbHRlck1hbmFnZXIucHJvdG90eXBlLnJldHVyblJlbmRlclRhcmdldCA9IGZ1bmN0aW9uIChyZW5kZXJUYXJnZXQpXG57XG4gICAgdGhpcy50ZXh0dXJlUG9vbC5wdXNoKCByZW5kZXJUYXJnZXQgKTtcbn07XG5cbi8qXG4gKiBBcHBsaWVzIHRoZSBmaWx0ZXJcbiAqIEBwYXJhbSBzaGFkZXIge1NoYWRlcn0gVGhlIHNoYWRlciB0byB1cGxvYWRcbiAqIEBwYXJhbSBpbnB1dFRhcmdldCB7UmVuZGVyVGFyZ2V0fVxuICogQHBhcmFtIG91dHB1dFRhcmdldCB7UmVuZGVyVGFyZ2V0fVxuICogQHBhcmFtIGNsZWFyIHtib29sZWFufSBXaGV0aGVyIG9yIG5vdCB3ZSB3YW50IHRvIGNsZWFyIHRoZSBvdXRwdXRUYXJnZXRcbiAqL1xuRmlsdGVyTWFuYWdlci5wcm90b3R5cGUuYXBwbHlGaWx0ZXIgPSBmdW5jdGlvbiAoc2hhZGVyLCBpbnB1dFRhcmdldCwgb3V0cHV0VGFyZ2V0LCBjbGVhcilcbntcbiAgICB2YXIgZ2wgPSB0aGlzLnJlbmRlcmVyLmdsO1xuXG4gICAgdGhpcy5yZW5kZXJlci5zZXRSZW5kZXJUYXJnZXQob3V0cHV0VGFyZ2V0KTtcblxuICAgIGlmIChjbGVhcilcbiAgICB7XG4gICAgICAgIG91dHB1dFRhcmdldC5jbGVhcigpO1xuICAgIH1cblxuICAgIC8vIHNldCB0aGUgc2hhZGVyXG4gICAgdGhpcy5yZW5kZXJlci5zaGFkZXJNYW5hZ2VyLnNldFNoYWRlcihzaGFkZXIpO1xuXG4gICAgLy8gVE9ETyAoY2VuZ2xlcikgLSBDYW4gdGhpcyBiZSBjYWNoZWQgYW5kIG5vdCBgdG9BcnJheWBlZCBlYWNoIGZyYW1lP1xuICAgIHNoYWRlci51bmlmb3Jtcy5wcm9qZWN0aW9uTWF0cml4LnZhbHVlID0gdGhpcy5yZW5kZXJlci5jdXJyZW50UmVuZGVyVGFyZ2V0LnByb2plY3Rpb25NYXRyaXgudG9BcnJheSh0cnVlKTtcblxuICAgIC8vVE9ETyBjYW4gdGhpcyBiZSBvcHRpbWlzZWQ/XG4gICAgc2hhZGVyLnN5bmNVbmlmb3JtcygpO1xuLypcbiAgICBnbC52ZXJ0ZXhBdHRyaWJQb2ludGVyKHNoYWRlci5hdHRyaWJ1dGVzLmFWZXJ0ZXhQb3NpdGlvbiwgMiwgZ2wuRkxPQVQsIGZhbHNlLCAwLCAwKTtcbiAgICBnbC52ZXJ0ZXhBdHRyaWJQb2ludGVyKHNoYWRlci5hdHRyaWJ1dGVzLmFUZXh0dXJlQ29vcmQsIDIsIGdsLkZMT0FULCBmYWxzZSwgMCwgMiAqIDQgKiA0KTtcbiAgICBnbC52ZXJ0ZXhBdHRyaWJQb2ludGVyKHNoYWRlci5hdHRyaWJ1dGVzLmFDb2xvciwgNCwgZ2wuRkxPQVQsIGZhbHNlLCAwLCA0ICogNCAqIDQpO1xuKi9cblxuICAgIGdsLmFjdGl2ZVRleHR1cmUoZ2wuVEVYVFVSRTApO1xuICAgIGdsLmJpbmRUZXh0dXJlKGdsLlRFWFRVUkVfMkQsIGlucHV0VGFyZ2V0LnRleHR1cmUpO1xuXG4gICAgZ2wuZHJhd0VsZW1lbnRzKGdsLlRSSUFOR0xFUywgNiwgZ2wuVU5TSUdORURfU0hPUlQsIDAgKTtcbiAgICB0aGlzLnJlbmRlcmVyLmRyYXdDb3VudCsrO1xufTtcblxuLypcbiAqIENhbGN1bGF0ZXMgdGhlIG1hcHBlZCBtYXRyaXhcbiAqIEBwYXJhbSBmaWx0ZXJBcmVhIHtSZWN0YW5nbGV9IFRoZSBmaWx0ZXIgYXJlYVxuICogQHBhcmFtIHNwcml0ZSB7U3ByaXRlfSB0aGUgdGFyZ2V0IHNwcml0ZVxuICogQHBhcmFtIG91dHB1dE1hdHJpeCB7TWF0cml4fSBAYWx2aW5cbiAqL1xuLy8gVE9ETyBwbGF5aW5nIGFyb3VuZCBoZXJlLi4gdGhpcyBpcyB0ZW1wb3JhcnkgLSAod2lsbCBlbmQgdXAgaW4gdGhlIHNoYWRlcilcbkZpbHRlck1hbmFnZXIucHJvdG90eXBlLmNhbGN1bGF0ZU1hcHBlZE1hdHJpeCA9IGZ1bmN0aW9uIChmaWx0ZXJBcmVhLCBzcHJpdGUsIG91dHB1dE1hdHJpeClcbntcbiAgICB2YXIgd29ybGRUcmFuc2Zvcm0gPSBzcHJpdGUud29ybGRUcmFuc2Zvcm0uY29weShtYXRoLk1hdHJpeC5URU1QX01BVFJJWCksXG4gICAgdGV4dHVyZSA9IHNwcml0ZS5fdGV4dHVyZS5iYXNlVGV4dHVyZTtcblxuICAgIHZhciBtYXBwZWRNYXRyaXggPSBvdXRwdXRNYXRyaXguaWRlbnRpdHkoKTtcblxuICAgIC8vIHNjYWxlLi5cbiAgICB2YXIgcmF0aW8gPSB0aGlzLnRleHR1cmVTaXplLmhlaWdodCAvIHRoaXMudGV4dHVyZVNpemUud2lkdGg7XG5cbiAgICBtYXBwZWRNYXRyaXgudHJhbnNsYXRlKGZpbHRlckFyZWEueCAvIHRoaXMudGV4dHVyZVNpemUud2lkdGgsIGZpbHRlckFyZWEueSAvIHRoaXMudGV4dHVyZVNpemUuaGVpZ2h0ICk7XG5cbiAgICBtYXBwZWRNYXRyaXguc2NhbGUoMSAsIHJhdGlvKTtcblxuICAgIHZhciB0cmFuc2xhdGVTY2FsZVggPSAodGhpcy50ZXh0dXJlU2l6ZS53aWR0aCAvIHRleHR1cmUud2lkdGgpO1xuICAgIHZhciB0cmFuc2xhdGVTY2FsZVkgPSAodGhpcy50ZXh0dXJlU2l6ZS5oZWlnaHQgLyB0ZXh0dXJlLmhlaWdodCk7XG5cbiAgICB3b3JsZFRyYW5zZm9ybS50eCAvPSB0ZXh0dXJlLndpZHRoICogdHJhbnNsYXRlU2NhbGVYO1xuICAgIHdvcmxkVHJhbnNmb3JtLnR5IC89IHRleHR1cmUud2lkdGggKiB0cmFuc2xhdGVTY2FsZVg7XG5cbiAgICB3b3JsZFRyYW5zZm9ybS5pbnZlcnQoKTtcblxuICAgIG1hcHBlZE1hdHJpeC5wcmVwZW5kKHdvcmxkVHJhbnNmb3JtKTtcblxuICAgIC8vIGFwcGx5IGludmVyc2Ugc2NhbGUuLlxuICAgIG1hcHBlZE1hdHJpeC5zY2FsZSgxICwgMS9yYXRpbyk7XG5cbiAgICBtYXBwZWRNYXRyaXguc2NhbGUoIHRyYW5zbGF0ZVNjYWxlWCAsIHRyYW5zbGF0ZVNjYWxlWSApO1xuXG4gICAgbWFwcGVkTWF0cml4LnRyYW5zbGF0ZShzcHJpdGUuYW5jaG9yLngsIHNwcml0ZS5hbmNob3IueSk7XG5cbiAgICByZXR1cm4gbWFwcGVkTWF0cml4O1xuXG4gICAgLy8gS2VlcGluZyB0aGUgb3JnaW5hbCBhcyBhIHJlbWluZGVyIHRvIG1lIG9uIGhvdyB0aGlzIHdvcmtzIVxuICAgIC8vXG4gICAgLy8gdmFyIG0gPSBuZXcgbWF0aC5NYXRyaXgoKTtcblxuICAgIC8vIC8vIHNjYWxlLi5cbiAgICAvLyB2YXIgcmF0aW8gPSB0aGlzLnRleHR1cmVTaXplLmhlaWdodCAvIHRoaXMudGV4dHVyZVNpemUud2lkdGg7XG5cbiAgICAvLyBtLnRyYW5zbGF0ZShmaWx0ZXJBcmVhLnggLyB0aGlzLnRleHR1cmVTaXplLndpZHRoLCBmaWx0ZXJBcmVhLnkgLyB0aGlzLnRleHR1cmVTaXplLmhlaWdodCk7XG5cblxuICAgIC8vIG0uc2NhbGUoMSAsIHJhdGlvKTtcblxuXG4gICAgLy8gdmFyIHRyYW5zZm9ybSA9IHd0LmNsb25lKCk7XG5cbiAgICAvLyB2YXIgdHJhbnNsYXRlU2NhbGVYID0gKHRoaXMudGV4dHVyZVNpemUud2lkdGggLyA2MjApO1xuICAgIC8vIHZhciB0cmFuc2xhdGVTY2FsZVkgPSAodGhpcy50ZXh0dXJlU2l6ZS5oZWlnaHQgLyAzODApO1xuXG4gICAgLy8gdHJhbnNmb3JtLnR4IC89IDYyMCAqIHRyYW5zbGF0ZVNjYWxlWDtcbiAgICAvLyB0cmFuc2Zvcm0udHkgLz0gNjIwICogdHJhbnNsYXRlU2NhbGVYO1xuXG4gICAgLy8gdHJhbnNmb3JtLmludmVydCgpO1xuXG4gICAgLy8gdHJhbnNmb3JtLmFwcGVuZChtKTtcblxuICAgIC8vIC8vIGFwcGx5IGludmVyc2Ugc2NhbGUuLlxuICAgIC8vIHRyYW5zZm9ybS5zY2FsZSgxICwgMS9yYXRpbyk7XG5cbiAgICAvLyB0cmFuc2Zvcm0uc2NhbGUoIHRyYW5zbGF0ZVNjYWxlWCAsIHRyYW5zbGF0ZVNjYWxlWSApO1xuXG4gICAgLy8gcmV0dXJuIHRyYW5zZm9ybTtcbn07XG5cbi8qXG4gKiBDb25zdHJhaW5zIHRoZSBmaWx0ZXIgYXJlYSB0byB0aGUgdGV4dHVyZSBzaXplXG4gKiBAcGFyYW0gZmlsdGVyQXJlYSB7UmVjdGFuZ2xlfSBUaGUgZmlsdGVyIGFyZWEgd2Ugd2FudCB0byBjYXBcbiAqL1xuRmlsdGVyTWFuYWdlci5wcm90b3R5cGUuY2FwRmlsdGVyQXJlYSA9IGZ1bmN0aW9uIChmaWx0ZXJBcmVhKVxue1xuICAgIGlmIChmaWx0ZXJBcmVhLnggPCAwKVxuICAgIHtcbiAgICAgICAgZmlsdGVyQXJlYS53aWR0aCArPSBmaWx0ZXJBcmVhLng7XG4gICAgICAgIGZpbHRlckFyZWEueCA9IDA7XG4gICAgfVxuXG4gICAgaWYgKGZpbHRlckFyZWEueSA8IDApXG4gICAge1xuICAgICAgICBmaWx0ZXJBcmVhLmhlaWdodCArPSBmaWx0ZXJBcmVhLnk7XG4gICAgICAgIGZpbHRlckFyZWEueSA9IDA7XG4gICAgfVxuXG4gICAgaWYgKCBmaWx0ZXJBcmVhLnggKyBmaWx0ZXJBcmVhLndpZHRoID4gdGhpcy50ZXh0dXJlU2l6ZS53aWR0aCApXG4gICAge1xuICAgICAgICBmaWx0ZXJBcmVhLndpZHRoID0gdGhpcy50ZXh0dXJlU2l6ZS53aWR0aCAtIGZpbHRlckFyZWEueDtcbiAgICB9XG5cbiAgICBpZiAoIGZpbHRlckFyZWEueSArIGZpbHRlckFyZWEuaGVpZ2h0ID4gdGhpcy50ZXh0dXJlU2l6ZS5oZWlnaHQgKVxuICAgIHtcbiAgICAgICAgZmlsdGVyQXJlYS5oZWlnaHQgPSB0aGlzLnRleHR1cmVTaXplLmhlaWdodCAtIGZpbHRlckFyZWEueTtcbiAgICB9XG59O1xuXG4vKlxuICogUmVzaXplcyBhbGwgdGhlIHJlbmRlciB0YXJnZXRzIGluIHRoZSBwb29sXG4gKiBAcGFyYW0gd2lkdGgge251bWJlcn0gdGhlIG5ldyB3aWR0aFxuICogQHBhcmFtIGhlaWdodCB7bnVtYmVyfSB0aGUgbmV3IGhlaWdodFxuICovXG5GaWx0ZXJNYW5hZ2VyLnByb3RvdHlwZS5yZXNpemUgPSBmdW5jdGlvbiAoIHdpZHRoLCBoZWlnaHQgKVxue1xuICAgIHRoaXMudGV4dHVyZVNpemUud2lkdGggPSB3aWR0aDtcbiAgICB0aGlzLnRleHR1cmVTaXplLmhlaWdodCA9IGhlaWdodDtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy50ZXh0dXJlUG9vbC5sZW5ndGg7IGkrKylcbiAgICB7XG4gICAgICAgIHRoaXMudGV4dHVyZVBvb2xbaV0ucmVzaXplKCB3aWR0aCwgaGVpZ2h0ICk7XG4gICAgfVxufTtcblxuLyoqXG4gKiBEZXN0cm95cyB0aGUgZmlsdGVyIGFuZCByZW1vdmVzIGl0IGZyb20gdGhlIGZpbHRlciBzdGFjay5cbiAqXG4gKi9cbkZpbHRlck1hbmFnZXIucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoKVxue1xuICAgIHRoaXMucXVhZC5kZXN0cm95KCk7XG4gICAgXG4gICAgV2ViR0xNYW5hZ2VyLnByb3RvdHlwZS5kZXN0cm95LmNhbGwodGhpcyk7XG4gICAgXG4gICAgdGhpcy5maWx0ZXJTdGFjayA9IG51bGw7XG4gICAgdGhpcy5vZmZzZXRZID0gMDtcblxuICAgIC8vIGRlc3Ryb3kgdGV4dHVyZXNcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMudGV4dHVyZVBvb2wubGVuZ3RoOyBpKyspXG4gICAge1xuICAgICAgICB0aGlzLnRleHR1cmVQb29sW2ldLmRlc3Ryb3koKTtcbiAgICB9XG5cbiAgICB0aGlzLnRleHR1cmVQb29sID0gbnVsbDtcbn07XG4iLCJ2YXIgV2ViR0xNYW5hZ2VyID0gcmVxdWlyZSgnLi9XZWJHTE1hbmFnZXInKSxcbiAgICBBbHBoYU1hc2tGaWx0ZXIgPSByZXF1aXJlKCcuLi9maWx0ZXJzL1Nwcml0ZU1hc2tGaWx0ZXInKTtcblxuLyoqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcn0gVGhlIHJlbmRlcmVyIHRoaXMgbWFuYWdlciB3b3JrcyBmb3IuXG4gKi9cbmZ1bmN0aW9uIE1hc2tNYW5hZ2VyKHJlbmRlcmVyKVxue1xuICAgIFdlYkdMTWFuYWdlci5jYWxsKHRoaXMsIHJlbmRlcmVyKTtcblxuICAgIHRoaXMuc3RlbmNpbFN0YWNrID0gW107XG4gICAgdGhpcy5yZXZlcnNlID0gdHJ1ZTtcbiAgICB0aGlzLmNvdW50ID0gMDtcblxuICAgIHRoaXMuYWxwaGFNYXNrUG9vbCA9IFtdO1xufVxuXG5NYXNrTWFuYWdlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFdlYkdMTWFuYWdlci5wcm90b3R5cGUpO1xuTWFza01hbmFnZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gTWFza01hbmFnZXI7XG5tb2R1bGUuZXhwb3J0cyA9IE1hc2tNYW5hZ2VyO1xuXG4vKipcbiAqIEFwcGxpZXMgdGhlIE1hc2sgYW5kIGFkZHMgaXQgdG8gdGhlIGN1cnJlbnQgZmlsdGVyIHN0YWNrLlxuICpcbiAqIEBwYXJhbSBncmFwaGljcyB7UElYSS5HcmFwaGljc31cbiAqIEBwYXJhbSB3ZWJHTERhdGEge2FueVtdfVxuICovXG5NYXNrTWFuYWdlci5wcm90b3R5cGUucHVzaE1hc2sgPSBmdW5jdGlvbiAodGFyZ2V0LCBtYXNrRGF0YSlcbntcbiAgICBpZiAobWFza0RhdGEudGV4dHVyZSlcbiAgICB7XG4gICAgICAgIHRoaXMucHVzaFNwcml0ZU1hc2sodGFyZ2V0LCBtYXNrRGF0YSk7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHRoaXMucHVzaFN0ZW5jaWxNYXNrKHRhcmdldCwgbWFza0RhdGEpO1xuICAgIH1cblxufTtcblxuLyoqXG4gKiBSZW1vdmVzIHRoZSBsYXN0IG1hc2sgZnJvbSB0aGUgbWFzayBzdGFjayBhbmQgZG9lc24ndCByZXR1cm4gaXQuXG4gKlxuICogQHBhcmFtIHRhcmdldCB7UElYSS5SZW5kZXJUYXJnZXR9XG4gKiBAcGFyYW0gbWFza0RhdGEge2FueVtdfVxuICovXG5NYXNrTWFuYWdlci5wcm90b3R5cGUucG9wTWFzayA9IGZ1bmN0aW9uICh0YXJnZXQsIG1hc2tEYXRhKVxue1xuICAgIGlmIChtYXNrRGF0YS50ZXh0dXJlKVxuICAgIHtcbiAgICAgICAgdGhpcy5wb3BTcHJpdGVNYXNrKHRhcmdldCwgbWFza0RhdGEpO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICB0aGlzLnBvcFN0ZW5jaWxNYXNrKHRhcmdldCwgbWFza0RhdGEpO1xuICAgIH1cbn07XG5cbi8qKlxuICogQXBwbGllcyB0aGUgTWFzayBhbmQgYWRkcyBpdCB0byB0aGUgY3VycmVudCBmaWx0ZXIgc3RhY2suXG4gKlxuICogQHBhcmFtIHRhcmdldCB7UElYSS5SZW5kZXJUYXJnZXR9XG4gKiBAcGFyYW0gbWFza0RhdGEge2FueVtdfVxuICovXG5NYXNrTWFuYWdlci5wcm90b3R5cGUucHVzaFNwcml0ZU1hc2sgPSBmdW5jdGlvbiAodGFyZ2V0LCBtYXNrRGF0YSlcbntcbiAgICB2YXIgYWxwaGFNYXNrRmlsdGVyID0gdGhpcy5hbHBoYU1hc2tQb29sLnBvcCgpO1xuXG4gICAgaWYgKCFhbHBoYU1hc2tGaWx0ZXIpXG4gICAge1xuICAgICAgICBhbHBoYU1hc2tGaWx0ZXIgPSBbbmV3IEFscGhhTWFza0ZpbHRlcihtYXNrRGF0YSldO1xuICAgIH1cblxuICAgIGFscGhhTWFza0ZpbHRlclswXS5tYXNrU3ByaXRlID0gbWFza0RhdGE7XG4gICAgdGhpcy5yZW5kZXJlci5maWx0ZXJNYW5hZ2VyLnB1c2hGaWx0ZXIodGFyZ2V0LCBhbHBoYU1hc2tGaWx0ZXIpO1xufTtcblxuLyoqXG4gKiBSZW1vdmVzIHRoZSBsYXN0IGZpbHRlciBmcm9tIHRoZSBmaWx0ZXIgc3RhY2sgYW5kIGRvZXNuJ3QgcmV0dXJuIGl0LlxuICpcbiAqL1xuTWFza01hbmFnZXIucHJvdG90eXBlLnBvcFNwcml0ZU1hc2sgPSBmdW5jdGlvbiAoKVxue1xuICAgIHZhciBmaWx0ZXJzID0gdGhpcy5yZW5kZXJlci5maWx0ZXJNYW5hZ2VyLnBvcEZpbHRlcigpO1xuXG4gICAgdGhpcy5hbHBoYU1hc2tQb29sLnB1c2goZmlsdGVycyk7XG59O1xuXG5cbi8qKlxuICogQXBwbGllcyB0aGUgTWFzayBhbmQgYWRkcyBpdCB0byB0aGUgY3VycmVudCBmaWx0ZXIgc3RhY2suXG4gKlxuICogQHBhcmFtIHRhcmdldCB7UElYSS5SZW5kZXJUYXJnZXR9XG4gKiBAcGFyYW0gbWFza0RhdGEge2FueVtdfVxuICovXG5NYXNrTWFuYWdlci5wcm90b3R5cGUucHVzaFN0ZW5jaWxNYXNrID0gZnVuY3Rpb24gKHRhcmdldCwgbWFza0RhdGEpXG57XG4gICAgdGhpcy5yZW5kZXJlci5zdGVuY2lsTWFuYWdlci5wdXNoTWFzayhtYXNrRGF0YSk7XG59O1xuXG4vKipcbiAqIFJlbW92ZXMgdGhlIGxhc3QgZmlsdGVyIGZyb20gdGhlIGZpbHRlciBzdGFjayBhbmQgZG9lc24ndCByZXR1cm4gaXQuXG4gKlxuICogQHBhcmFtIHRhcmdldCB7UElYSS5SZW5kZXJUYXJnZXR9XG4gKiBAcGFyYW0gbWFza0RhdGEge2FueVtdfVxuICovXG5NYXNrTWFuYWdlci5wcm90b3R5cGUucG9wU3RlbmNpbE1hc2sgPSBmdW5jdGlvbiAodGFyZ2V0LCBtYXNrRGF0YSlcbntcbiAgICB0aGlzLnJlbmRlcmVyLnN0ZW5jaWxNYW5hZ2VyLnBvcE1hc2sobWFza0RhdGEpO1xufTtcblxuIiwidmFyIFdlYkdMTWFuYWdlciA9IHJlcXVpcmUoJy4vV2ViR0xNYW5hZ2VyJyksXG4gICAgVGV4dHVyZVNoYWRlciA9IHJlcXVpcmUoJy4uL3NoYWRlcnMvVGV4dHVyZVNoYWRlcicpLFxuICAgIENvbXBsZXhQcmltaXRpdmVTaGFkZXIgPSByZXF1aXJlKCcuLi9zaGFkZXJzL0NvbXBsZXhQcmltaXRpdmVTaGFkZXInKSxcbiAgICBQcmltaXRpdmVTaGFkZXIgPSByZXF1aXJlKCcuLi9zaGFkZXJzL1ByaW1pdGl2ZVNoYWRlcicpLFxuICAgIHV0aWxzID0gcmVxdWlyZSgnLi4vLi4vLi4vdXRpbHMnKTtcblxuLyoqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAZXh0ZW5kcyBQSVhJLldlYkdMTWFuYWdlclxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLldlYkdMUmVuZGVyZXJ9IFRoZSByZW5kZXJlciB0aGlzIG1hbmFnZXIgd29ya3MgZm9yLlxuICovXG5mdW5jdGlvbiBTaGFkZXJNYW5hZ2VyKHJlbmRlcmVyKVxue1xuICAgIFdlYkdMTWFuYWdlci5jYWxsKHRoaXMsIHJlbmRlcmVyKTtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLm1heEF0dGlicyA9IDEwO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7YW55W119XG4gICAgICovXG4gICAgdGhpcy5hdHRyaWJTdGF0ZSA9IFtdO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7YW55W119XG4gICAgICovXG4gICAgdGhpcy50ZW1wQXR0cmliU3RhdGUgPSBbXTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5tYXhBdHRpYnM7IGkrKylcbiAgICB7XG4gICAgICAgIHRoaXMuYXR0cmliU3RhdGVbaV0gPSBmYWxzZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHthbnlbXX1cbiAgICAgKi9cbiAgICB0aGlzLnN0YWNrID0gW107XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9jdXJyZW50SWQgPSAtMTtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge1BJWEkuU2hhZGVyfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5jdXJyZW50U2hhZGVyID0gbnVsbDtcblxuLy8gICAgdGhpcy5pbml0UGx1Z2lucygpO1xufVxuXG5TaGFkZXJNYW5hZ2VyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoV2ViR0xNYW5hZ2VyLnByb3RvdHlwZSk7XG5TaGFkZXJNYW5hZ2VyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFNoYWRlck1hbmFnZXI7XG51dGlscy5wbHVnaW5UYXJnZXQubWl4aW4oU2hhZGVyTWFuYWdlcik7XG5cbm1vZHVsZS5leHBvcnRzID0gU2hhZGVyTWFuYWdlcjtcblxuLyoqXG4gKiBDYWxsZWQgd2hlbiB0aGVyZSBpcyBhIFdlYkdMIGNvbnRleHQgY2hhbmdlLlxuICpcbiAqL1xuU2hhZGVyTWFuYWdlci5wcm90b3R5cGUub25Db250ZXh0Q2hhbmdlID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLmluaXRQbHVnaW5zKCk7XG5cbiAgICB2YXIgZ2wgPSB0aGlzLnJlbmRlcmVyLmdsO1xuXG4gICAgLy8gZ2V0IHRoZSBtYXhpbXVtIG51bWJlciBvZiBhdHRyaWJ1dGUgY29ycmVjdGx5IGFzIHRoaXMgdGVuZHMgdG8gdmFyeVxuICAgIHRoaXMubWF4QXR0aWJzID0gZ2wuZ2V0UGFyYW1ldGVyKGdsLk1BWF9WRVJURVhfQVRUUklCUyk7XG5cbiAgICB0aGlzLmF0dHJpYlN0YXRlID0gW107XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMubWF4QXR0aWJzOyBpKyspXG4gICAge1xuICAgICAgICB0aGlzLmF0dHJpYlN0YXRlW2ldID0gZmFsc2U7XG4gICAgfVxuXG4gICAgLy8gVE9ETyAtIFdoeSBhcmUgdGhlc2Ugbm90IHBsdWdpbnM/IFdlIGNhbid0IGRlY291cGxlIHByaW1pdGl2ZXMgdW5sZXNzIHRoZXkgYXJlLi4uLlxuICAgIHRoaXMuZGVmYXVsdFNoYWRlciA9IG5ldyBUZXh0dXJlU2hhZGVyKHRoaXMpO1xuICAgIHRoaXMucHJpbWl0aXZlU2hhZGVyID0gbmV3IFByaW1pdGl2ZVNoYWRlcih0aGlzKTtcbiAgICB0aGlzLmNvbXBsZXhQcmltaXRpdmVTaGFkZXIgPSBuZXcgQ29tcGxleFByaW1pdGl2ZVNoYWRlcih0aGlzKTtcbn07XG5cbi8qKlxuICogVGFrZXMgdGhlIGF0dHJpYnV0ZXMgZ2l2ZW4gaW4gcGFyYW1ldGVycyBhbmQgdXBsb2FkcyB0aGVtLlxuICpcbiAqIEBwYXJhbSBhdHRyaWJzIHthbnlbXX0gYXR0cmlic1xuICovXG5TaGFkZXJNYW5hZ2VyLnByb3RvdHlwZS5zZXRBdHRyaWJzID0gZnVuY3Rpb24gKGF0dHJpYnMpXG57XG4gICAgLy8gcmVzZXQgdGVtcCBzdGF0ZVxuICAgIHZhciBpO1xuXG4gICAgZm9yIChpID0gMDsgaSA8IHRoaXMudGVtcEF0dHJpYlN0YXRlLmxlbmd0aDsgaSsrKVxuICAgIHtcbiAgICAgICAgdGhpcy50ZW1wQXR0cmliU3RhdGVbaV0gPSBmYWxzZTtcbiAgICB9XG5cbiAgICAvLyBzZXQgdGhlIG5ldyBhdHRyaWJzXG4gICAgZm9yICh2YXIgYSBpbiBhdHRyaWJzKVxuICAgIHtcbiAgICAgICAgdGhpcy50ZW1wQXR0cmliU3RhdGVbYXR0cmlic1thXV0gPSB0cnVlO1xuICAgIH1cblxuICAgIHZhciBnbCA9IHRoaXMucmVuZGVyZXIuZ2w7XG5cbiAgICBmb3IgKGkgPSAwOyBpIDwgdGhpcy5hdHRyaWJTdGF0ZS5sZW5ndGg7IGkrKylcbiAgICB7XG4gICAgICAgIGlmICh0aGlzLmF0dHJpYlN0YXRlW2ldICE9PSB0aGlzLnRlbXBBdHRyaWJTdGF0ZVtpXSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5hdHRyaWJTdGF0ZVtpXSA9IHRoaXMudGVtcEF0dHJpYlN0YXRlW2ldO1xuXG4gICAgICAgICAgICBpZiAodGhpcy5hdHRyaWJTdGF0ZVtpXSlcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBnbC5lbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBnbC5kaXNhYmxlVmVydGV4QXR0cmliQXJyYXkoaSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG59O1xuXG4vKipcbiAqIFNldHMgdGhlIGN1cnJlbnQgc2hhZGVyLlxuICpcbiAqIEBwYXJhbSBzaGFkZXIge1BJWEkuU2hhZGVyfSB0aGUgc2hhZGVyIHRvIHVwbG9hZFxuICovXG5TaGFkZXJNYW5hZ2VyLnByb3RvdHlwZS5zZXRTaGFkZXIgPSBmdW5jdGlvbiAoc2hhZGVyKVxue1xuICAgIHJldHVybjtcbiAgICBpZiAodGhpcy5fY3VycmVudElkID09PSBzaGFkZXIudWlkKVxuICAgIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHRoaXMuX2N1cnJlbnRJZCA9IHNoYWRlci51aWQ7XG5cbiAgICB0aGlzLmN1cnJlbnRTaGFkZXIgPSBzaGFkZXI7XG5cbiAgICB0aGlzLnJlbmRlcmVyLmdsLnVzZVByb2dyYW0oc2hhZGVyLnByb2dyYW0pO1xuICAgIHRoaXMuc2V0QXR0cmlicyhzaGFkZXIuYXR0cmlidXRlcyk7XG5cbiAgICByZXR1cm4gdHJ1ZTtcbn07XG5cbi8qKlxuICogRGVzdHJveXMgdGhpcyBvYmplY3QuXG4gKlxuICovXG5TaGFkZXJNYW5hZ2VyLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLnByaW1pdGl2ZVNoYWRlci5kZXN0cm95KCk7XG4gICAgdGhpcy5jb21wbGV4UHJpbWl0aXZlU2hhZGVyLmRlc3Ryb3koKTtcbiAgICBXZWJHTE1hbmFnZXIucHJvdG90eXBlLmRlc3Ryb3kuY2FsbCh0aGlzKTtcblxuICAgIHRoaXMuZGVzdHJveVBsdWdpbnMoKTtcblxuICAgIHRoaXMuYXR0cmliU3RhdGUgPSBudWxsO1xuXG4gICAgdGhpcy50ZW1wQXR0cmliU3RhdGUgPSBudWxsO1xufTtcbiIsInZhciBXZWJHTE1hbmFnZXIgPSByZXF1aXJlKCcuL1dlYkdMTWFuYWdlcicpLFxuICAgIHV0aWxzID0gcmVxdWlyZSgnLi4vLi4vLi4vdXRpbHMnKTtcblxuLyoqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcn0gVGhlIHJlbmRlcmVyIHRoaXMgbWFuYWdlciB3b3JrcyBmb3IuXG4gKi9cbmZ1bmN0aW9uIFdlYkdMTWFza01hbmFnZXIocmVuZGVyZXIpXG57XG4gICAgV2ViR0xNYW5hZ2VyLmNhbGwodGhpcywgcmVuZGVyZXIpO1xuICAgIHRoaXMuc3RlbmNpbE1hc2tTdGFjayA9IG51bGw7XG59XG5cbldlYkdMTWFza01hbmFnZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShXZWJHTE1hbmFnZXIucHJvdG90eXBlKTtcbldlYkdMTWFza01hbmFnZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gV2ViR0xNYXNrTWFuYWdlcjtcbm1vZHVsZS5leHBvcnRzID0gV2ViR0xNYXNrTWFuYWdlcjtcblxuLyoqXG4gKiBDaGFuZ2VzIHRoZSBtYXNrIHN0YWNrIHRoYXQgaXMgdXNlZCBieSB0aGlzIG1hbmFnZXIuXG4gKlxuICogQHBhcmFtIHN0ZW5jaWxNYXNrU3RhY2sge1BJWEkuU3RlbmNpbE1hc2tTdGFja30gVGhlIG1hc2sgc3RhY2tcbiAqL1xuV2ViR0xNYXNrTWFuYWdlci5wcm90b3R5cGUuc2V0TWFza1N0YWNrID0gZnVuY3Rpb24gKCBzdGVuY2lsTWFza1N0YWNrIClcbntcbiAgICB0aGlzLnN0ZW5jaWxNYXNrU3RhY2sgPSBzdGVuY2lsTWFza1N0YWNrO1xuXG4gICAgdmFyIGdsID0gdGhpcy5yZW5kZXJlci5nbDtcblxuICAgIGlmIChzdGVuY2lsTWFza1N0YWNrLnN0ZW5jaWxTdGFjay5sZW5ndGggPT09IDApXG4gICAge1xuICAgICAgICBnbC5kaXNhYmxlKGdsLlNURU5DSUxfVEVTVCk7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIGdsLmVuYWJsZShnbC5TVEVOQ0lMX1RFU1QpO1xuICAgIH1cbn07XG5cbi8qKlxuICogQXBwbGllcyB0aGUgTWFzayBhbmQgYWRkcyBpdCB0byB0aGUgY3VycmVudCBmaWx0ZXIgc3RhY2suIEBhbHZpblxuICpcbiAqIEBwYXJhbSBncmFwaGljcyB7UElYSS5HcmFwaGljc31cbiAqIEBwYXJhbSB3ZWJHTERhdGEge2FueVtdfVxuICovXG5XZWJHTE1hc2tNYW5hZ2VyLnByb3RvdHlwZS5wdXNoU3RlbmNpbCA9IGZ1bmN0aW9uIChncmFwaGljcywgd2ViR0xEYXRhKVxue1xuICAgIHRoaXMucmVuZGVyZXIuX2FjdGl2ZVJlbmRlclRhcmdldC5hdHRhY2hTdGVuY2lsQnVmZmVyKCk7XG5cbiAgICB2YXIgZ2wgPSB0aGlzLnJlbmRlcmVyLmdsLFxuICAgICAgICBzbXMgPSB0aGlzLnN0ZW5jaWxNYXNrU3RhY2s7XG5cbiAgICB0aGlzLmJpbmRHcmFwaGljcyhncmFwaGljcywgd2ViR0xEYXRhKTtcblxuICAgIGlmIChzbXMuc3RlbmNpbFN0YWNrLmxlbmd0aCA9PT0gMClcbiAgICB7XG4gICAgICAgIGdsLmVuYWJsZShnbC5TVEVOQ0lMX1RFU1QpO1xuICAgICAgICBnbC5jbGVhcihnbC5TVEVOQ0lMX0JVRkZFUl9CSVQpO1xuICAgICAgICBzbXMucmV2ZXJzZSA9IHRydWU7XG4gICAgICAgIHNtcy5jb3VudCA9IDA7XG4gICAgfVxuXG4gICAgc21zLnN0ZW5jaWxTdGFjay5wdXNoKHdlYkdMRGF0YSk7XG5cbiAgICB2YXIgbGV2ZWwgPSBzbXMuY291bnQ7XG5cbiAgICBnbC5jb2xvck1hc2soZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UpO1xuXG4gICAgZ2wuc3RlbmNpbEZ1bmMoZ2wuQUxXQVlTLDAsMHhGRik7XG4gICAgZ2wuc3RlbmNpbE9wKGdsLktFRVAsZ2wuS0VFUCxnbC5JTlZFUlQpO1xuXG4gICAgLy8gZHJhdyB0aGUgdHJpYW5nbGUgc3RyaXAhXG5cbiAgICBpZiAod2ViR0xEYXRhLm1vZGUgPT09IDEpXG4gICAge1xuICAgICAgICBnbC5kcmF3RWxlbWVudHMoZ2wuVFJJQU5HTEVfRkFOLCAgd2ViR0xEYXRhLmluZGljZXMubGVuZ3RoIC0gNCwgZ2wuVU5TSUdORURfU0hPUlQsIDAgKTtcblxuICAgICAgICBpZiAoc21zLnJldmVyc2UpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGdsLnN0ZW5jaWxGdW5jKGdsLkVRVUFMLCAweEZGIC0gbGV2ZWwsIDB4RkYpO1xuICAgICAgICAgICAgZ2wuc3RlbmNpbE9wKGdsLktFRVAsZ2wuS0VFUCxnbC5ERUNSKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgIHtcbiAgICAgICAgICAgIGdsLnN0ZW5jaWxGdW5jKGdsLkVRVUFMLGxldmVsLCAweEZGKTtcbiAgICAgICAgICAgIGdsLnN0ZW5jaWxPcChnbC5LRUVQLGdsLktFRVAsZ2wuSU5DUik7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBkcmF3IGEgcXVhZCB0byBpbmNyZW1lbnQuLlxuICAgICAgICBnbC5kcmF3RWxlbWVudHMoZ2wuVFJJQU5HTEVfRkFOLCA0LCBnbC5VTlNJR05FRF9TSE9SVCwgKCB3ZWJHTERhdGEuaW5kaWNlcy5sZW5ndGggLSA0ICkgKiAyICk7XG5cbiAgICAgICAgaWYgKHNtcy5yZXZlcnNlKVxuICAgICAgICB7XG4gICAgICAgICAgICBnbC5zdGVuY2lsRnVuYyhnbC5FUVVBTCwweEZGLShsZXZlbCsxKSwgMHhGRik7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgICBnbC5zdGVuY2lsRnVuYyhnbC5FUVVBTCxsZXZlbCsxLCAweEZGKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHNtcy5yZXZlcnNlID0gIXNtcy5yZXZlcnNlO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICBpZiAoIXNtcy5yZXZlcnNlKVxuICAgICAgICB7XG4gICAgICAgICAgICBnbC5zdGVuY2lsRnVuYyhnbC5FUVVBTCwgMHhGRiAtIGxldmVsLCAweEZGKTtcbiAgICAgICAgICAgIGdsLnN0ZW5jaWxPcChnbC5LRUVQLGdsLktFRVAsZ2wuREVDUik7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgICBnbC5zdGVuY2lsRnVuYyhnbC5FUVVBTCxsZXZlbCwgMHhGRik7XG4gICAgICAgICAgICBnbC5zdGVuY2lsT3AoZ2wuS0VFUCxnbC5LRUVQLGdsLklOQ1IpO1xuICAgICAgICB9XG5cbiAgICAgICAgZ2wuZHJhd0VsZW1lbnRzKGdsLlRSSUFOR0xFX1NUUklQLCAgd2ViR0xEYXRhLmluZGljZXMubGVuZ3RoLCBnbC5VTlNJR05FRF9TSE9SVCwgMCApO1xuXG4gICAgICAgIGlmICghc21zLnJldmVyc2UpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGdsLnN0ZW5jaWxGdW5jKGdsLkVRVUFMLDB4RkYtKGxldmVsKzEpLCAweEZGKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgIHtcbiAgICAgICAgICAgIGdsLnN0ZW5jaWxGdW5jKGdsLkVRVUFMLGxldmVsKzEsIDB4RkYpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZ2wuY29sb3JNYXNrKHRydWUsIHRydWUsIHRydWUsIHRydWUpO1xuICAgIGdsLnN0ZW5jaWxPcChnbC5LRUVQLGdsLktFRVAsZ2wuS0VFUCk7XG5cbiAgICBzbXMuY291bnQrKztcbn07XG5cbi8qKlxuICogVE9ETyB0aGlzIGRvZXMgbm90IGJlbG9uZyBoZXJlIVxuICpcbiAqIEBwYXJhbSBncmFwaGljcyB7UElYSS5HcmFwaGljc31cbiAqIEBwYXJhbSB3ZWJHTERhdGEge2FueVtdfVxuICovXG5XZWJHTE1hc2tNYW5hZ2VyLnByb3RvdHlwZS5iaW5kR3JhcGhpY3MgPSBmdW5jdGlvbiAoZ3JhcGhpY3MsIHdlYkdMRGF0YSlcbntcbiAgICAvL2lmICh0aGlzLl9jdXJyZW50R3JhcGhpY3MgPT09IGdyYXBoaWNzKXJldHVybjtcbiAgICB2YXIgZ2wgPSB0aGlzLnJlbmRlcmVyLmdsO1xuXG4gICAgIC8vIGJpbmQgdGhlIGdyYXBoaWNzIG9iamVjdC4uXG4gICAgdmFyIHNoYWRlciA9IHRoaXMucmVuZGVyZXIucGx1Z2lucy5ncmFwaGljcy5wcmltaXRpdmVTaGFkZXI7XG5cbiAgICBpZiAod2ViR0xEYXRhLm1vZGUgPT09IDEpXG4gICAge1xuICAgICAgICAvKlxuICAgICAgICBzaGFkZXIgPSB0aGlzLnJlbmRlcmVyLnNoYWRlck1hbmFnZXIuY29tcGxleFByaW1pdGl2ZVNoYWRlcjtcblxuICAgICAgICB0aGlzLnJlbmRlcmVyLnNoYWRlck1hbmFnZXIuc2V0U2hhZGVyKHNoYWRlcik7XG5cbiAgICAgICAgZ2wudW5pZm9ybU1hdHJpeDNmdihzaGFkZXIudW5pZm9ybXMudHJhbnNsYXRpb25NYXRyaXguX2xvY2F0aW9uLCBmYWxzZSwgZ3JhcGhpY3Mud29ybGRUcmFuc2Zvcm0udG9BcnJheSh0cnVlKSk7XG5cbiAgICAgICAgZ2wudW5pZm9ybU1hdHJpeDNmdihzaGFkZXIudW5pZm9ybXMucHJvamVjdGlvbk1hdHJpeC5fbG9jYXRpb24sIGZhbHNlLCB0aGlzLnJlbmRlcmVyLmN1cnJlbnRSZW5kZXJUYXJnZXQucHJvamVjdGlvbk1hdHJpeC50b0FycmF5KHRydWUpKTtcblxuICAgICAgICBnbC51bmlmb3JtM2Z2KHNoYWRlci51bmlmb3Jtcy50aW50Ll9sb2NhdGlvbiwgdXRpbHMuaGV4MnJnYihncmFwaGljcy50aW50KSk7XG5cbiAgICAgICAgZ2wudW5pZm9ybTNmdihzaGFkZXIudW5pZm9ybXMuY29sb3IuX2xvY2F0aW9uLCB3ZWJHTERhdGEuY29sb3IpO1xuXG4gICAgICAgIGdsLnVuaWZvcm0xZihzaGFkZXIudW5pZm9ybXMuYWxwaGEuX2xvY2F0aW9uLCBncmFwaGljcy53b3JsZEFscGhhKTtcblxuICAgICAgICBnbC5iaW5kQnVmZmVyKGdsLkFSUkFZX0JVRkZFUiwgd2ViR0xEYXRhLmJ1ZmZlcik7XG5cbiAgICAgICAgZ2wudmVydGV4QXR0cmliUG9pbnRlcihzaGFkZXIuYXR0cmlidXRlcy5hVmVydGV4UG9zaXRpb24sIDIsIGdsLkZMT0FULCBmYWxzZSwgNCAqIDIsIDApO1xuXG4gICAgICAgIC8vIG5vdyBkbyB0aGUgcmVzdC4uXG4gICAgICAgIC8vIHNldCB0aGUgaW5kZXggYnVmZmVyIVxuICAgICAgICBnbC5iaW5kQnVmZmVyKGdsLkVMRU1FTlRfQVJSQVlfQlVGRkVSLCB3ZWJHTERhdGEuaW5kZXhCdWZmZXIpO1xuICAgICovXG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIC8vdGhpcy5yZW5kZXJlci5zaGFkZXJNYW5hZ2VyLmFjdGl2YXRlUHJpbWl0aXZlU2hhZGVyKCk7XG4vLyAgICAgICAgc2hhZGVyID0gdGhpcy5yZW5kZXJlci5zaGFkZXJNYW5hZ2VyLnByaW1pdGl2ZVNoYWRlcjtcbiAgICAgICBcbiAgICAgICAgdGhpcy5yZW5kZXJlci5iaW5kU2hhZGVyKHNoYWRlcilcblxuICAgICAgICBzaGFkZXIudW5pZm9ybXMudHJhbnNsYXRpb25NYXRyaXggPSBncmFwaGljcy53b3JsZFRyYW5zZm9ybS50b0FycmF5KHRydWUpO1xuICAgICAgICBzaGFkZXIudW5pZm9ybXMudGludCA9IHV0aWxzLmhleDJyZ2IoZ3JhcGhpY3MudGludCk7XG4gICAgICAgIHNoYWRlci51bmlmb3Jtcy5hbHBoYSA9IGdyYXBoaWNzLndvcmxkQWxwaGE7XG5cblxuICAgICAgICBnbC5iaW5kQnVmZmVyKGdsLkFSUkFZX0JVRkZFUiwgd2ViR0xEYXRhLmJ1ZmZlcik7XG5cblxuICAgICAgICBzaGFkZXIuYXR0cmlidXRlcy5hVmVydGV4UG9zaXRpb24ucG9pbnRlcihnbC5GTE9BVCwgZmFsc2UsIDQgKiA2LCAwKTtcbiAgICAgICAgc2hhZGVyLmF0dHJpYnV0ZXMuYUNvbG9yLnBvaW50ZXIoZ2wuRkxPQVQsIGZhbHNlLCA0ICogNiwgMiAqIDQpO1xuXG4gICAgICAgIGdsLmVuYWJsZVZlcnRleEF0dHJpYkFycmF5KHNoYWRlci5hdHRyaWJ1dGVzLmFWZXJ0ZXhQb3NpdGlvbi5sb2NhdGlvbik7XG4gICAgICAgIGdsLmVuYWJsZVZlcnRleEF0dHJpYkFycmF5KHNoYWRlci5hdHRyaWJ1dGVzLmFDb2xvci5sb2NhdGlvbik7XG5cbiAgICAgICAgLy8gc2V0IHRoZSBpbmRleCBidWZmZXIhXG4gICAgICAgIGdsLmJpbmRCdWZmZXIoZ2wuRUxFTUVOVF9BUlJBWV9CVUZGRVIsIHdlYkdMRGF0YS5pbmRleEJ1ZmZlcik7XG4vLyAgICAgICAgZ2wuZHJhd0VsZW1lbnRzKGdsLlRSSUFOR0xFX1NUUklQLCAgd2ViR0xEYXRhLmluZGljZXMubGVuZ3RoLCBnbC5VTlNJR05FRF9TSE9SVCwgMCApO1xuXG5cbiAgICAgIC8qICB0aGlzLnJlbmRlcmVyLnNoYWRlck1hbmFnZXIuc2V0U2hhZGVyKHNoYWRlcik7XG5cbiAgICAgICAgZ2wudW5pZm9ybU1hdHJpeDNmdihzaGFkZXIudW5pZm9ybXMudHJhbnNsYXRpb25NYXRyaXguX2xvY2F0aW9uLCBmYWxzZSwgZ3JhcGhpY3Mud29ybGRUcmFuc2Zvcm0udG9BcnJheSh0cnVlKSk7XG5cbiAgICAgICAgZ2wudW5pZm9ybU1hdHJpeDNmdihzaGFkZXIudW5pZm9ybXMucHJvamVjdGlvbk1hdHJpeC5fbG9jYXRpb24sIGZhbHNlLCB0aGlzLnJlbmRlcmVyLmN1cnJlbnRSZW5kZXJUYXJnZXQucHJvamVjdGlvbk1hdHJpeC50b0FycmF5KHRydWUpKTtcblxuICAgICAgICBnbC51bmlmb3JtM2Z2KHNoYWRlci51bmlmb3Jtcy50aW50Ll9sb2NhdGlvbiwgdXRpbHMuaGV4MnJnYihncmFwaGljcy50aW50KSk7XG5cbiAgICAgICAgZ2wudW5pZm9ybTFmKHNoYWRlci51bmlmb3Jtcy5hbHBoYS5fbG9jYXRpb24sIGdyYXBoaWNzLndvcmxkQWxwaGEpO1xuXG4gICAgICAgIGdsLmJpbmRCdWZmZXIoZ2wuQVJSQVlfQlVGRkVSLCB3ZWJHTERhdGEuYnVmZmVyKTtcblxuICAgICAgICBnbC52ZXJ0ZXhBdHRyaWJQb2ludGVyKHNoYWRlci5hdHRyaWJ1dGVzLmFWZXJ0ZXhQb3NpdGlvbiwgMiwgZ2wuRkxPQVQsIGZhbHNlLCA0ICogNiwgMCk7XG4gICAgICAgIGdsLnZlcnRleEF0dHJpYlBvaW50ZXIoc2hhZGVyLmF0dHJpYnV0ZXMuYUNvbG9yLCA0LCBnbC5GTE9BVCwgZmFsc2UsNCAqIDYsIDIgKiA0KTtcblxuICAgICAgICAvLyBzZXQgdGhlIGluZGV4IGJ1ZmZlciFcbiAgICAgICAgZ2wuYmluZEJ1ZmZlcihnbC5FTEVNRU5UX0FSUkFZX0JVRkZFUiwgd2ViR0xEYXRhLmluZGV4QnVmZmVyKTsqL1xuICAgIH1cbn07XG5cbi8qKlxuICogVE9ETyBAYWx2aW5cbiAqIEBwYXJhbSBncmFwaGljcyB7UElYSS5HcmFwaGljc31cbiAqIEBwYXJhbSB3ZWJHTERhdGEge2FueVtdfVxuICovXG5XZWJHTE1hc2tNYW5hZ2VyLnByb3RvdHlwZS5wb3BTdGVuY2lsID0gZnVuY3Rpb24gKGdyYXBoaWNzLCB3ZWJHTERhdGEpXG57XG4gICAgdmFyIGdsID0gdGhpcy5yZW5kZXJlci5nbCxcbiAgICAgICAgc21zID0gdGhpcy5zdGVuY2lsTWFza1N0YWNrO1xuXG4gICAgc21zLnN0ZW5jaWxTdGFjay5wb3AoKTtcblxuICAgIHNtcy5jb3VudC0tO1xuXG4gICAgaWYgKHNtcy5zdGVuY2lsU3RhY2subGVuZ3RoID09PSAwKVxuICAgIHtcbiAgICAgICAgLy8gdGhlIHN0YWNrIGlzIGVtcHR5IVxuICAgICAgICBnbC5kaXNhYmxlKGdsLlNURU5DSUxfVEVTVCk7XG5cbiAgICB9XG4gICAgZWxzZVxuICAgIHtcblxuICAgICAgICB2YXIgbGV2ZWwgPSBzbXMuY291bnQ7XG5cbiAgICAgICAgdGhpcy5iaW5kR3JhcGhpY3MoZ3JhcGhpY3MsIHdlYkdMRGF0YSk7XG5cbiAgICAgICAgZ2wuY29sb3JNYXNrKGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlKTtcblxuICAgICAgICBpZiAod2ViR0xEYXRhLm1vZGUgPT09IDEpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHNtcy5yZXZlcnNlID0gIXNtcy5yZXZlcnNlO1xuXG4gICAgICAgICAgICBpZiAoc21zLnJldmVyc2UpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgZ2wuc3RlbmNpbEZ1bmMoZ2wuRVFVQUwsIDB4RkYgLSAobGV2ZWwrMSksIDB4RkYpO1xuICAgICAgICAgICAgICAgIGdsLnN0ZW5jaWxPcChnbC5LRUVQLGdsLktFRVAsZ2wuSU5DUik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgZ2wuc3RlbmNpbEZ1bmMoZ2wuRVFVQUwsbGV2ZWwrMSwgMHhGRik7XG4gICAgICAgICAgICAgICAgZ2wuc3RlbmNpbE9wKGdsLktFRVAsZ2wuS0VFUCxnbC5ERUNSKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gZHJhdyBhIHF1YWQgdG8gaW5jcmVtZW50Li5cbiAgICAgICAgICAgIGdsLmRyYXdFbGVtZW50cyhnbC5UUklBTkdMRV9GQU4sIDQsIGdsLlVOU0lHTkVEX1NIT1JULCAoIHdlYkdMRGF0YS5pbmRpY2VzLmxlbmd0aCAtIDQgKSAqIDIgKTtcblxuICAgICAgICAgICAgZ2wuc3RlbmNpbEZ1bmMoZ2wuQUxXQVlTLDAsMHhGRik7XG4gICAgICAgICAgICBnbC5zdGVuY2lsT3AoZ2wuS0VFUCxnbC5LRUVQLGdsLklOVkVSVCk7XG5cbiAgICAgICAgICAgIC8vIGRyYXcgdGhlIHRyaWFuZ2xlIHN0cmlwIVxuICAgICAgICAgICAgZ2wuZHJhd0VsZW1lbnRzKGdsLlRSSUFOR0xFX0ZBTiwgIHdlYkdMRGF0YS5pbmRpY2VzLmxlbmd0aCAtIDQsIGdsLlVOU0lHTkVEX1NIT1JULCAwICk7XG5cbiAgICAgICAgICAgIHRoaXMucmVuZGVyZXIuZHJhd0NvdW50ICs9IDI7XG5cbiAgICAgICAgICAgIGlmICghc21zLnJldmVyc2UpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgZ2wuc3RlbmNpbEZ1bmMoZ2wuRVFVQUwsMHhGRi0obGV2ZWwpLCAweEZGKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBnbC5zdGVuY2lsRnVuYyhnbC5FUVVBTCxsZXZlbCwgMHhGRik7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgIHtcbiAgICAgICAgICAvLyAgY29uc29sZS5sb2coXCI8PD4+XCIpXG4gICAgICAgICAgICBpZiAoIXNtcy5yZXZlcnNlKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGdsLnN0ZW5jaWxGdW5jKGdsLkVRVUFMLCAweEZGIC0gKGxldmVsKzEpLCAweEZGKTtcbiAgICAgICAgICAgICAgICBnbC5zdGVuY2lsT3AoZ2wuS0VFUCxnbC5LRUVQLGdsLklOQ1IpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGdsLnN0ZW5jaWxGdW5jKGdsLkVRVUFMLGxldmVsKzEsIDB4RkYpO1xuICAgICAgICAgICAgICAgIGdsLnN0ZW5jaWxPcChnbC5LRUVQLGdsLktFRVAsZ2wuREVDUik7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGdsLmRyYXdFbGVtZW50cyhnbC5UUklBTkdMRV9TVFJJUCwgIHdlYkdMRGF0YS5pbmRpY2VzLmxlbmd0aCwgZ2wuVU5TSUdORURfU0hPUlQsIDAgKTtcblxuICAgICAgICAgICAgdGhpcy5yZW5kZXJlci5kcmF3Q291bnQrKztcblxuICAgICAgICAgICAgaWYgKCFzbXMucmV2ZXJzZSlcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBnbC5zdGVuY2lsRnVuYyhnbC5FUVVBTCwweEZGLShsZXZlbCksIDB4RkYpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGdsLnN0ZW5jaWxGdW5jKGdsLkVRVUFMLGxldmVsLCAweEZGKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGdsLmNvbG9yTWFzayh0cnVlLCB0cnVlLCB0cnVlLCB0cnVlKTtcbiAgICAgICAgZ2wuc3RlbmNpbE9wKGdsLktFRVAsZ2wuS0VFUCxnbC5LRUVQKTtcblxuXG4gICAgfVxufTtcblxuLyoqXG4gKiBEZXN0cm95cyB0aGUgbWFzayBzdGFjay5cbiAqXG4gKi9cbldlYkdMTWFza01hbmFnZXIucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoKVxue1xuICAgIFdlYkdMTWFuYWdlci5wcm90b3R5cGUuZGVzdHJveS5jYWxsKHRoaXMpO1xuXG4gICAgdGhpcy5zdGVuY2lsTWFza1N0YWNrLnN0ZW5jaWxTdGFjayA9IG51bGw7XG59O1xuXG4vKipcbiAqIEFwcGxpZXMgdGhlIE1hc2sgYW5kIGFkZHMgaXQgdG8gdGhlIGN1cnJlbnQgZmlsdGVyIHN0YWNrLlxuICpcbiAqIEBwYXJhbSBtYXNrRGF0YSB7YW55W119IFRoZSBtYXNrIGRhdGEgc3RydWN0dXJlIHRvIHVzZVxuICovXG5XZWJHTE1hc2tNYW5hZ2VyLnByb3RvdHlwZS5wdXNoTWFzayA9IGZ1bmN0aW9uIChtYXNrRGF0YSlcbntcbiAgICB0aGlzLnJlbmRlcmVyLnNldE9iamVjdFJlbmRlcmVyKHRoaXMucmVuZGVyZXIucGx1Z2lucy5ncmFwaGljcyk7XG4gICAgXG4gICAgLy9UT0RPIEZJWFxuICAgIGlmIChtYXNrRGF0YS5kaXJ0eSlcbiAgICB7XG4gICAgICAgIHRoaXMucmVuZGVyZXIucGx1Z2lucy5ncmFwaGljcy51cGRhdGVHcmFwaGljcyhtYXNrRGF0YSwgdGhpcy5yZW5kZXJlci5nbCk7XG4gICAgfVxuXG4gICAgaWYgKCFtYXNrRGF0YS5fd2ViR0xbdGhpcy5yZW5kZXJlci5nbC5pZF0uZGF0YS5sZW5ndGgpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5wdXNoU3RlbmNpbChtYXNrRGF0YSwgbWFza0RhdGEuX3dlYkdMW3RoaXMucmVuZGVyZXIuZ2wuaWRdLmRhdGFbMF0pO1xufTtcblxuLyoqXG4gKiBSZW1vdmVzIHRoZSBsYXN0IGZpbHRlciBmcm9tIHRoZSBmaWx0ZXIgc3RhY2sgYW5kIGRvZXNuJ3QgcmV0dXJuIGl0LlxuICpcbiAqIEBwYXJhbSBtYXNrRGF0YSB7YW55W119XG4gKi9cbldlYkdMTWFza01hbmFnZXIucHJvdG90eXBlLnBvcE1hc2sgPSBmdW5jdGlvbiAobWFza0RhdGEpXG57XG4gICAgdGhpcy5yZW5kZXJlci5zZXRPYmplY3RSZW5kZXJlcih0aGlzLnJlbmRlcmVyLnBsdWdpbnMuZ3JhcGhpY3MpO1xuXG4gICAgdGhpcy5wb3BTdGVuY2lsKG1hc2tEYXRhLCBtYXNrRGF0YS5fd2ViR0xbdGhpcy5yZW5kZXJlci5nbC5pZF0uZGF0YVswXSk7XG59O1xuXG4iLCIvKipcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5XZWJHTFJlbmRlcmVyfSBUaGUgcmVuZGVyZXIgdGhpcyBtYW5hZ2VyIHdvcmtzIGZvci5cbiAqL1xuZnVuY3Rpb24gV2ViR0xNYW5hZ2VyKHJlbmRlcmVyKVxue1xuICAgIC8qKlxuICAgICAqIFRoZSByZW5kZXJlciB0aGlzIG1hbmFnZXIgd29ya3MgZm9yLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5XZWJHTFJlbmRlcmVyfVxuICAgICAqL1xuICAgIHRoaXMucmVuZGVyZXIgPSByZW5kZXJlcjtcblxuICAgIHRoaXMucmVuZGVyZXIub24oJ2NvbnRleHQnLCB0aGlzLm9uQ29udGV4dENoYW5nZSwgdGhpcyk7XG59XG5cbldlYkdMTWFuYWdlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBXZWJHTE1hbmFnZXI7XG5tb2R1bGUuZXhwb3J0cyA9IFdlYkdMTWFuYWdlcjtcblxuLyoqXG4gKiBHZW5lcmljIG1ldGhvZCBjYWxsZWQgd2hlbiB0aGVyZSBpcyBhIFdlYkdMIGNvbnRleHQgY2hhbmdlLlxuICpcbiAqL1xuV2ViR0xNYW5hZ2VyLnByb3RvdHlwZS5vbkNvbnRleHRDaGFuZ2UgPSBmdW5jdGlvbiAoKVxue1xuXHQvLyBkbyBzb21lIGNvZGVzIGluaXQhXG59O1xuXG4vKipcbiAqIEdlbmVyaWMgZGVzdHJveSBtZXRob2RzIHRvIGJlIG92ZXJyaWRkZW4gYnkgdGhlIHN1YmNsYXNzXG4gKlxuICovXG5XZWJHTE1hbmFnZXIucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoKVxue1xuICAgIHRoaXMucmVuZGVyZXIub2ZmKCdjb250ZXh0JywgdGhpcy5vbkNvbnRleHRDaGFuZ2UsIHRoaXMpO1xuXG4gICAgdGhpcy5yZW5kZXJlciA9IG51bGw7XG59O1xuIiwidmFyIFNoYWRlciA9IHJlcXVpcmUoJy4vU2hhZGVyJyk7XG5cbi8qKlxuICogVGhpcyBzaGFkZXIgaXMgdXNlZCB0byBkcmF3IGNvbXBsZXggcHJpbWl0aXZlIHNoYXBlcyBmb3Ige0BsaW5rIFBJWEkuR3JhcGhpY3N9LlxuICpcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqIEBleHRlbmRzIFBJWEkuU2hhZGVyXG4gKiBAcGFyYW0gc2hhZGVyTWFuYWdlciB7UElYSS5TaGFkZXJNYW5hZ2VyfSBUaGUgd2ViZ2wgc2hhZGVyIG1hbmFnZXIgdGhpcyBzaGFkZXIgd29ya3MgZm9yLlxuICovXG5mdW5jdGlvbiBDb21wbGV4UHJpbWl0aXZlU2hhZGVyKHNoYWRlck1hbmFnZXIpXG57XG4gICAgU2hhZGVyLmNhbGwodGhpcyxcbiAgICAgICAgc2hhZGVyTWFuYWdlcixcbiAgICAgICAgLy8gdmVydGV4IHNoYWRlclxuICAgICAgICBbXG4gICAgICAgICAgICAnYXR0cmlidXRlIHZlYzIgYVZlcnRleFBvc2l0aW9uOycsXG5cbiAgICAgICAgICAgICd1bmlmb3JtIG1hdDMgdHJhbnNsYXRpb25NYXRyaXg7JyxcbiAgICAgICAgICAgICd1bmlmb3JtIG1hdDMgcHJvamVjdGlvbk1hdHJpeDsnLFxuXG4gICAgICAgICAgICAndW5pZm9ybSB2ZWMzIHRpbnQ7JyxcbiAgICAgICAgICAgICd1bmlmb3JtIGZsb2F0IGFscGhhOycsXG4gICAgICAgICAgICAndW5pZm9ybSB2ZWMzIGNvbG9yOycsXG5cbiAgICAgICAgICAgICd2YXJ5aW5nIHZlYzQgdkNvbG9yOycsXG5cbiAgICAgICAgICAgICd2b2lkIG1haW4odm9pZCl7JyxcbiAgICAgICAgICAgICcgICBnbF9Qb3NpdGlvbiA9IHZlYzQoKHByb2plY3Rpb25NYXRyaXggKiB0cmFuc2xhdGlvbk1hdHJpeCAqIHZlYzMoYVZlcnRleFBvc2l0aW9uLCAxLjApKS54eSwgMC4wLCAxLjApOycsXG4gICAgICAgICAgICAnICAgdkNvbG9yID0gdmVjNChjb2xvciAqIGFscGhhICogdGludCwgYWxwaGEpOycsLy9cIiAqIHZlYzQodGludCAqIGFscGhhLCBhbHBoYSk7JyxcbiAgICAgICAgICAgICd9J1xuICAgICAgICBdLmpvaW4oJ1xcbicpLFxuICAgICAgICAvLyBmcmFnbWVudCBzaGFkZXJcbiAgICAgICAgW1xuICAgICAgICAgICAgJ3ByZWNpc2lvbiBtZWRpdW1wIGZsb2F0OycsXG5cbiAgICAgICAgICAgICd2YXJ5aW5nIHZlYzQgdkNvbG9yOycsXG5cbiAgICAgICAgICAgICd2b2lkIG1haW4odm9pZCl7JyxcbiAgICAgICAgICAgICcgICBnbF9GcmFnQ29sb3IgPSB2Q29sb3I7JyxcbiAgICAgICAgICAgICd9J1xuICAgICAgICBdLmpvaW4oJ1xcbicpLFxuICAgICAgICAvLyBjdXN0b20gdW5pZm9ybXNcbiAgICAgICAge1xuICAgICAgICAgICAgdGludDogICB7IHR5cGU6ICczZicsIHZhbHVlOiBbMCwgMCwgMF0gfSxcbiAgICAgICAgICAgIGFscGhhOiAgeyB0eXBlOiAnMWYnLCB2YWx1ZTogMCB9LFxuICAgICAgICAgICAgY29sb3I6ICB7IHR5cGU6ICczZicsIHZhbHVlOiBbMCwwLDBdIH0sXG4gICAgICAgICAgICB0cmFuc2xhdGlvbk1hdHJpeDogeyB0eXBlOiAnbWF0MycsIHZhbHVlOiBuZXcgRmxvYXQzMkFycmF5KDkpIH0sXG4gICAgICAgICAgICBwcm9qZWN0aW9uTWF0cml4OiB7IHR5cGU6ICdtYXQzJywgdmFsdWU6IG5ldyBGbG9hdDMyQXJyYXkoOSkgfVxuICAgICAgICB9LFxuICAgICAgICAvLyBhdHRyaWJ1dGVzXG4gICAgICAgIHtcbiAgICAgICAgICAgIGFWZXJ0ZXhQb3NpdGlvbjowXG4gICAgICAgIH1cbiAgICApO1xufVxuXG5Db21wbGV4UHJpbWl0aXZlU2hhZGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoU2hhZGVyLnByb3RvdHlwZSk7XG5Db21wbGV4UHJpbWl0aXZlU2hhZGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IENvbXBsZXhQcmltaXRpdmVTaGFkZXI7XG5tb2R1bGUuZXhwb3J0cyA9IENvbXBsZXhQcmltaXRpdmVTaGFkZXI7XG4iLCJ2YXIgU2hhZGVyID0gcmVxdWlyZSgnLi9TaGFkZXInKTtcblxuLyoqXG4gKiBUaGlzIHNoYWRlciBpcyB1c2VkIHRvIGRyYXcgc2ltcGxlIHByaW1pdGl2ZSBzaGFwZXMgZm9yIHtAbGluayBQSVhJLkdyYXBoaWNzfS5cbiAqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAZXh0ZW5kcyBQSVhJLlNoYWRlclxuICogQHBhcmFtIHNoYWRlck1hbmFnZXIge1NoYWRlck1hbmFnZXJ9IFRoZSB3ZWJnbCBzaGFkZXIgbWFuYWdlciB0aGlzIHNoYWRlciB3b3JrcyBmb3IuXG4gKi9cbmZ1bmN0aW9uIFByaW1pdGl2ZVNoYWRlcihzaGFkZXJNYW5hZ2VyKVxue1xuICAgIFNoYWRlci5jYWxsKHRoaXMsXG4gICAgICAgIHNoYWRlck1hbmFnZXIsXG4gICAgICAgIC8vIHZlcnRleCBzaGFkZXJcbiAgICAgICAgW1xuICAgICAgICAgICAgJ2F0dHJpYnV0ZSB2ZWMyIGFWZXJ0ZXhQb3NpdGlvbjsnLFxuICAgICAgICAgICAgJ2F0dHJpYnV0ZSB2ZWM0IGFDb2xvcjsnLFxuXG4gICAgICAgICAgICAndW5pZm9ybSBtYXQzIHRyYW5zbGF0aW9uTWF0cml4OycsXG4gICAgICAgICAgICAndW5pZm9ybSBtYXQzIHByb2plY3Rpb25NYXRyaXg7JyxcblxuICAgICAgICAgICAgJ3VuaWZvcm0gZmxvYXQgYWxwaGE7JyxcbiAgICAgICAgICAgICd1bmlmb3JtIGZsb2F0IGZsaXBZOycsXG4gICAgICAgICAgICAndW5pZm9ybSB2ZWMzIHRpbnQ7JyxcblxuICAgICAgICAgICAgJ3ZhcnlpbmcgdmVjNCB2Q29sb3I7JyxcblxuICAgICAgICAgICAgJ3ZvaWQgbWFpbih2b2lkKXsnLFxuICAgICAgICAgICAgJyAgIGdsX1Bvc2l0aW9uID0gdmVjNCgocHJvamVjdGlvbk1hdHJpeCAqIHRyYW5zbGF0aW9uTWF0cml4ICogdmVjMyhhVmVydGV4UG9zaXRpb24sIDEuMCkpLnh5LCAwLjAsIDEuMCk7JyxcbiAgICAgICAgICAgICcgICB2Q29sb3IgPSBhQ29sb3IgKiB2ZWM0KHRpbnQgKiBhbHBoYSwgYWxwaGEpOycsXG4gICAgICAgICAgICAnfSdcbiAgICAgICAgXS5qb2luKCdcXG4nKSxcbiAgICAgICAgLy8gZnJhZ21lbnQgc2hhZGVyXG4gICAgICAgIFtcbiAgICAgICAgICAgICdwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDsnLFxuXG4gICAgICAgICAgICAndmFyeWluZyB2ZWM0IHZDb2xvcjsnLFxuXG4gICAgICAgICAgICAndm9pZCBtYWluKHZvaWQpeycsXG4gICAgICAgICAgICAnICAgZ2xfRnJhZ0NvbG9yID0gdkNvbG9yOycsXG4gICAgICAgICAgICAnfSdcbiAgICAgICAgXS5qb2luKCdcXG4nKSxcbiAgICAgICAgLy8gY3VzdG9tIHVuaWZvcm1zXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRpbnQ6ICAgeyB0eXBlOiAnM2YnLCB2YWx1ZTogWzAsIDAsIDBdIH0sXG4gICAgICAgICAgICBhbHBoYTogIHsgdHlwZTogJzFmJywgdmFsdWU6IDAgfSxcbiAgICAgICAgICAgIHRyYW5zbGF0aW9uTWF0cml4OiB7IHR5cGU6ICdtYXQzJywgdmFsdWU6IG5ldyBGbG9hdDMyQXJyYXkoOSkgfSxcbiAgICAgICAgICAgIHByb2plY3Rpb25NYXRyaXg6IHsgdHlwZTogJ21hdDMnLCB2YWx1ZTogbmV3IEZsb2F0MzJBcnJheSg5KSB9XG4gICAgICAgIH0sXG4gICAgICAgIC8vIGN1c3RvbSBhdHRyaWJ1dGVzXG4gICAgICAgIHtcbiAgICAgICAgICAgIGFWZXJ0ZXhQb3NpdGlvbjowLFxuICAgICAgICAgICAgYUNvbG9yOjBcbiAgICAgICAgfVxuICAgICk7XG59XG5cblByaW1pdGl2ZVNoYWRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFNoYWRlci5wcm90b3R5cGUpO1xuUHJpbWl0aXZlU2hhZGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFByaW1pdGl2ZVNoYWRlcjtcbm1vZHVsZS5leHBvcnRzID0gUHJpbWl0aXZlU2hhZGVyO1xuIiwiLypnbG9iYWwgY29uc29sZSAqL1xudmFyIHV0aWxzID0gcmVxdWlyZSgnLi4vLi4vLi4vdXRpbHMnKTtcblxuLyoqXG4gKiBCYXNlIHNoYWRlciBjbGFzcyBmb3IgUElYSSBtYW5hZ2VkIHNoYWRlcnMuXG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIHNoYWRlck1hbmFnZXIge1BJWEkuU2hhZGVyTWFuYWdlcn0gVGhlIHdlYmdsIHNoYWRlciBtYW5hZ2VyIHRoaXMgc2hhZGVyIHdvcmtzIGZvci5cbiAqIEBwYXJhbSBbdmVydGV4U3JjXSB7c3RyaW5nfSBUaGUgc291cmNlIG9mIHRoZSB2ZXJ0ZXggc2hhZGVyLlxuICogQHBhcmFtIFtmcmFnbWVudFNyY10ge3N0cmluZ30gVGhlIHNvdXJjZSBvZiB0aGUgZnJhZ21lbnQgc2hhZGVyLlxuICogQHBhcmFtIFt1bmlmb3Jtc10ge29iamVjdH0gVW5pZm9ybXMgZm9yIHRoaXMgc2hhZGVyLlxuICogQHBhcmFtIFthdHRyaWJ1dGVzXSB7b2JqZWN0fSBBdHRyaWJ1dGVzIGZvciB0aGlzIHNoYWRlci5cbiAqL1xuZnVuY3Rpb24gU2hhZGVyKHNoYWRlck1hbmFnZXIsIHZlcnRleFNyYywgZnJhZ21lbnRTcmMsIHVuaWZvcm1zLCBhdHRyaWJ1dGVzKVxue1xuICAgIGlmICghdmVydGV4U3JjIHx8ICFmcmFnbWVudFNyYylcbiAgICB7XG4gICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1BpeGkuanMgRXJyb3IuIFNoYWRlciByZXF1aXJlcyB2ZXJ0ZXhTcmMgYW5kIGZyYWdtZW50U3JjJyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQSB1bmlxdWUgaWRcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQHJlYWRvbmx5XG4gICAgICovXG4gICAgdGhpcy51aWQgPSB1dGlscy51aWQoKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBjdXJyZW50IFdlYkdMIGRyYXdpbmcgY29udGV4dFxuICAgICAqIEBtZW1iZXIge1dlYkdMUmVuZGVyaW5nQ29udGV4dH1cbiAgICAgKiBAcmVhZG9ubHlcbiAgICAgKi9cbiAgICB0aGlzLmdsID0gc2hhZGVyTWFuYWdlci5yZW5kZXJlci5nbDtcblxuICAgIC8vVE9ETyBtYXliZSB3ZSBzaG91bGQgcGFzcyByZW5kZXJlciByYXRoZXIgdGhhbiBzaGFkZXIgbWFuZ2VyPz8gZm9vZCBmb3IgdGhvdWdodC4uXG4gICAgdGhpcy5zaGFkZXJNYW5hZ2VyID0gc2hhZGVyTWFuYWdlcjtcblxuICAgIC8qKlxuICAgICAqIFRoZSBXZWJHTCBwcm9ncmFtLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7V2ViR0xQcm9ncmFtfVxuICAgICAqIEByZWFkb25seVxuICAgICAqL1xuICAgIHRoaXMucHJvZ3JhbSA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgdW5pZm9ybXMgYXMgYW4gb2JqZWN0XG4gICAgICogQG1lbWJlciB7b2JqZWN0fVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy51bmlmb3JtcyA9IHVuaWZvcm1zIHx8IHt9O1xuXG4gICAgLyoqXG4gICAgICogVGhlIGF0dHJpYnV0ZXMgYXMgYW4gb2JqZWN0XG4gICAgICogQG1lbWJlciB7b2JqZWN0fVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5hdHRyaWJ1dGVzID0gYXR0cmlidXRlcyB8fCB7fTtcblxuICAgIC8qKlxuICAgICAqIEludGVybmFsIHRleHR1cmUgY291bnRlclxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMudGV4dHVyZUNvdW50ID0gMTtcblxuICAgIC8qKlxuICAgICAqIFRoZSB2ZXJ0ZXggc2hhZGVyIGFzIGFuIGFycmF5IG9mIHN0cmluZ3NcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge3N0cmluZ31cbiAgICAgKi9cbiAgICB0aGlzLnZlcnRleFNyYyA9IHZlcnRleFNyYztcblxuICAgIC8qKlxuICAgICAqIFRoZSBmcmFnbWVudCBzaGFkZXIgYXMgYW4gYXJyYXkgb2Ygc3RyaW5nc1xuICAgICAqXG4gICAgICogQG1lbWJlciB7c3RyaW5nfVxuICAgICAqL1xuICAgIHRoaXMuZnJhZ21lbnRTcmMgPSBmcmFnbWVudFNyYztcblxuICAgIHRoaXMuaW5pdCgpO1xufVxuXG5TaGFkZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gU2hhZGVyO1xubW9kdWxlLmV4cG9ydHMgPSBTaGFkZXI7XG5cbi8qKlxuICogQ3JlYXRlcyB0aGUgc2hhZGVyIGFuZCB1c2VzIGl0XG4gKlxuICovXG5TaGFkZXIucHJvdG90eXBlLmluaXQgPSBmdW5jdGlvbiAoKVxue1xuICAgIHRoaXMuY29tcGlsZSgpO1xuXG4gICAgdGhpcy5nbC51c2VQcm9ncmFtKHRoaXMucHJvZ3JhbSk7XG5cbiAgICB0aGlzLmNhY2hlVW5pZm9ybUxvY2F0aW9ucyhPYmplY3Qua2V5cyh0aGlzLnVuaWZvcm1zKSk7XG4gICAgdGhpcy5jYWNoZUF0dHJpYnV0ZUxvY2F0aW9ucyhPYmplY3Qua2V5cyh0aGlzLmF0dHJpYnV0ZXMpKTtcbn07XG5cbi8qKlxuICogQ2FjaGVzIHRoZSBsb2NhdGlvbnMgb2YgdGhlIHVuaWZvcm0gZm9yIHJldXNlLlxuICpcbiAqIEBwYXJhbSBrZXlzIHtzdHJpbmd9IHRoZSB1bmlmb3JtcyB0byBjYWNoZVxuICovXG5TaGFkZXIucHJvdG90eXBlLmNhY2hlVW5pZm9ybUxvY2F0aW9ucyA9IGZ1bmN0aW9uIChrZXlzKVxue1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7ICsraSlcbiAgICB7XG4gICAgICAgIHRoaXMudW5pZm9ybXNba2V5c1tpXV0uX2xvY2F0aW9uID0gdGhpcy5nbC5nZXRVbmlmb3JtTG9jYXRpb24odGhpcy5wcm9ncmFtLCBrZXlzW2ldKTtcbiAgICB9XG59O1xuXG4vKipcbiAqIENhY2hlcyB0aGUgbG9jYXRpb25zIG9mIHRoZSBhdHRyaWJ1dGUgZm9yIHJldXNlLlxuICpcbiAqIEBwYXJhbSBrZXlzIHtzdHJpbmd9IHRoZSBhdHRyaWJ1dGVzIHRvIGNhY2hlXG4gKi9cblNoYWRlci5wcm90b3R5cGUuY2FjaGVBdHRyaWJ1dGVMb2NhdGlvbnMgPSBmdW5jdGlvbiAoa2V5cylcbntcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyArK2kpXG4gICAge1xuICAgICAgICB0aGlzLmF0dHJpYnV0ZXNba2V5c1tpXV0gPSB0aGlzLmdsLmdldEF0dHJpYkxvY2F0aW9uKHRoaXMucHJvZ3JhbSwga2V5c1tpXSk7XG4gICAgfVxuXG4gICAgLy8gVE9ETzogQ2hlY2sgaWYgdGhpcyBpcyBuZWVkZWQgYW55bW9yZS4uLlxuXG4gICAgLy8gQmVnaW4gd29yc3QgaGFjayBldmEgLy9cblxuICAgIC8vIFdIWT8/PyBPTkxZIG9uIG15IGNocm9tZSBwaXhlbCB0aGUgbGluZSBhYm92ZSByZXR1cm5zIC0xIHdoZW4gdXNpbmcgZmlsdGVycz9cbiAgICAvLyBtYXliZSBpdHMgc29tZXRoaW5nIHRvIGRvIHdpdGggdGhlIGN1cnJlbnQgc3RhdGUgb2YgdGhlIGdsIGNvbnRleHQuXG4gICAgLy8gSSdtIGNvbnZpbmNlZCB0aGlzIGlzIGEgYnVnIGluIHRoZSBjaHJvbWUgYnJvd3NlciBhcyB0aGVyZSBpcyBOTyByZWFzb24gd2h5IHRoaXMgc2hvdWxkIGJlIHJldHVybmluZyAtMSBlc3BlY2lhbGx5IGFzIGl0IG9ubHkgbWFuaWZlc3RzIG9uIG15IGNocm9tZSBwaXhlbFxuICAgIC8vIElmIHRoZXJlcyBhbnkgd2ViR0wgcGVvcGxlIHRoYXQga25vdyB3aHkgY291bGQgaGFwcGVuIHBsZWFzZSBoZWxwIDopXG4gICAgLy8gaWYgKHRoaXMuYXR0cmlidXRlcy5hQ29sb3IgPT09IC0xKXtcbiAgICAvLyAgICAgdGhpcy5hdHRyaWJ1dGVzLmFDb2xvciA9IDI7XG4gICAgLy8gfVxuXG4gICAgLy8gRW5kIHdvcnN0IGhhY2sgZXZhIC8vXG59O1xuXG4vKipcbiAqIEF0dGFjaGVzIHRoZSBzaGFkZXJzIGFuZCBjcmVhdGVzIHRoZSBwcm9ncmFtLlxuICpcbiAqIEByZXR1cm4ge1dlYkdMUHJvZ3JhbX1cbiAqL1xuU2hhZGVyLnByb3RvdHlwZS5jb21waWxlID0gZnVuY3Rpb24gKClcbntcbiAgICB2YXIgZ2wgPSB0aGlzLmdsO1xuXG4gICAgdmFyIGdsVmVydFNoYWRlciA9IHRoaXMuX2dsQ29tcGlsZShnbC5WRVJURVhfU0hBREVSLCB0aGlzLnZlcnRleFNyYyk7XG4gICAgdmFyIGdsRnJhZ1NoYWRlciA9IHRoaXMuX2dsQ29tcGlsZShnbC5GUkFHTUVOVF9TSEFERVIsIHRoaXMuZnJhZ21lbnRTcmMpO1xuXG4gICAgdmFyIHByb2dyYW0gPSBnbC5jcmVhdGVQcm9ncmFtKCk7XG5cbiAgICBnbC5hdHRhY2hTaGFkZXIocHJvZ3JhbSwgZ2xWZXJ0U2hhZGVyKTtcbiAgICBnbC5hdHRhY2hTaGFkZXIocHJvZ3JhbSwgZ2xGcmFnU2hhZGVyKTtcbiAgICBnbC5saW5rUHJvZ3JhbShwcm9ncmFtKTtcblxuICAgIC8vIGlmIGxpbmtpbmcgZmFpbHMsIHRoZW4gbG9nIGFuZCBjbGVhbnVwXG4gICAgaWYgKCFnbC5nZXRQcm9ncmFtUGFyYW1ldGVyKHByb2dyYW0sIGdsLkxJTktfU1RBVFVTKSlcbiAgICB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ1BpeGkuanMgRXJyb3I6IENvdWxkIG5vdCBpbml0aWFsaXplIHNoYWRlci4nKTtcbiAgICAgICAgY29uc29sZS5lcnJvcignZ2wuVkFMSURBVEVfU1RBVFVTJywgZ2wuZ2V0UHJvZ3JhbVBhcmFtZXRlcihwcm9ncmFtLCBnbC5WQUxJREFURV9TVEFUVVMpKTtcbiAgICAgICAgY29uc29sZS5lcnJvcignZ2wuZ2V0RXJyb3IoKScsIGdsLmdldEVycm9yKCkpO1xuXG4gICAgICAgIC8vIGlmIHRoZXJlIGlzIGEgcHJvZ3JhbSBpbmZvIGxvZywgbG9nIGl0XG4gICAgICAgIGlmIChnbC5nZXRQcm9ncmFtSW5mb0xvZyhwcm9ncmFtKSAhPT0gJycpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignUGl4aS5qcyBXYXJuaW5nOiBnbC5nZXRQcm9ncmFtSW5mb0xvZygpJywgZ2wuZ2V0UHJvZ3JhbUluZm9Mb2cocHJvZ3JhbSkpO1xuICAgICAgICB9XG5cbiAgICAgICAgZ2wuZGVsZXRlUHJvZ3JhbShwcm9ncmFtKTtcbiAgICAgICAgcHJvZ3JhbSA9IG51bGw7XG4gICAgfVxuXG4gICAgLy8gY2xlYW4gdXAgc29tZSBzaGFkZXJzXG4gICAgZ2wuZGVsZXRlU2hhZGVyKGdsVmVydFNoYWRlcik7XG4gICAgZ2wuZGVsZXRlU2hhZGVyKGdsRnJhZ1NoYWRlcik7XG5cbiAgICByZXR1cm4gKHRoaXMucHJvZ3JhbSA9IHByb2dyYW0pO1xufTtcblxuLyoqXG4qIEFkZHMgYSBuZXcgdW5pZm9ybVxuKlxuKiBAcGFyYW0gdW5pZm9ybSB7b2JqZWN0fSB0aGUgbmV3IHVuaWZvcm0gdG8gYXR0YWNoXG4qL1xuU2hhZGVyLnByb3RvdHlwZS5zeW5jVW5pZm9ybSA9IGZ1bmN0aW9uICh1bmlmb3JtKVxue1xuICAgIHZhciBsb2NhdGlvbiA9IHVuaWZvcm0uX2xvY2F0aW9uLFxuICAgICAgICB2YWx1ZSA9IHVuaWZvcm0udmFsdWUsXG4gICAgICAgIGdsID0gdGhpcy5nbCxcbiAgICAgICAgaSwgaWw7XG5cbiAgICBzd2l0Y2ggKHVuaWZvcm0udHlwZSlcbiAgICB7XG4gICAgICAgIGNhc2UgJ2InOlxuICAgICAgICBjYXNlICdib29sJzpcbiAgICAgICAgY2FzZSAnYm9vbGVhbic6XG4gICAgICAgICAgICBnbC51bmlmb3JtMWkobG9jYXRpb24sIHZhbHVlID8gMSA6IDApO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLy8gc2luZ2xlIGludCB2YWx1ZVxuICAgICAgICBjYXNlICdpJzpcbiAgICAgICAgY2FzZSAnMWknOlxuICAgICAgICAgICAgZ2wudW5pZm9ybTFpKGxvY2F0aW9uLCB2YWx1ZSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAvLyBzaW5nbGUgZmxvYXQgdmFsdWVcbiAgICAgICAgY2FzZSAnZic6XG4gICAgICAgIGNhc2UgJzFmJzpcbiAgICAgICAgICAgIGdsLnVuaWZvcm0xZihsb2NhdGlvbiwgdmFsdWUpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLy8gRmxvYXQzMkFycmF5KDIpIG9yIEpTIEFycnJheVxuICAgICAgICBjYXNlICcyZic6XG4gICAgICAgICAgICBnbC51bmlmb3JtMmYobG9jYXRpb24sIHZhbHVlWzBdLCB2YWx1ZVsxXSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAvLyBGbG9hdDMyQXJyYXkoMykgb3IgSlMgQXJycmF5XG4gICAgICAgIGNhc2UgJzNmJzpcbiAgICAgICAgICAgIGdsLnVuaWZvcm0zZihsb2NhdGlvbiwgdmFsdWVbMF0sIHZhbHVlWzFdLCB2YWx1ZVsyXSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAvLyBGbG9hdDMyQXJyYXkoNCkgb3IgSlMgQXJycmF5XG4gICAgICAgIGNhc2UgJzRmJzpcbiAgICAgICAgICAgIGdsLnVuaWZvcm00Zihsb2NhdGlvbiwgdmFsdWVbMF0sIHZhbHVlWzFdLCB2YWx1ZVsyXSwgdmFsdWVbM10pO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLy8gYSAyRCBQb2ludCBvYmplY3RcbiAgICAgICAgY2FzZSAndjInOlxuICAgICAgICAgICAgZ2wudW5pZm9ybTJmKGxvY2F0aW9uLCB2YWx1ZS54LCB2YWx1ZS55KTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIC8vIGEgM0QgUG9pbnQgb2JqZWN0XG4gICAgICAgIGNhc2UgJ3YzJzpcbiAgICAgICAgICAgIGdsLnVuaWZvcm0zZihsb2NhdGlvbiwgdmFsdWUueCwgdmFsdWUueSwgdmFsdWUueik7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAvLyBhIDREIFBvaW50IG9iamVjdFxuICAgICAgICBjYXNlICd2NCc6XG4gICAgICAgICAgICBnbC51bmlmb3JtNGYobG9jYXRpb24sIHZhbHVlLngsIHZhbHVlLnksIHZhbHVlLnosIHZhbHVlLncpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLy8gSW50MzJBcnJheSBvciBKUyBBcnJheVxuICAgICAgICBjYXNlICcxaXYnOlxuICAgICAgICAgICAgZ2wudW5pZm9ybTFpdihsb2NhdGlvbiwgdmFsdWUpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLy8gSW50MzJBcnJheSBvciBKUyBBcnJheVxuICAgICAgICBjYXNlICcyaXYnOlxuICAgICAgICAgICAgZ2wudW5pZm9ybTJpdihsb2NhdGlvbiwgdmFsdWUpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLy8gSW50MzJBcnJheSBvciBKUyBBcnJheVxuICAgICAgICBjYXNlICczaXYnOlxuICAgICAgICAgICAgZ2wudW5pZm9ybTNpdihsb2NhdGlvbiwgdmFsdWUpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLy8gSW50MzJBcnJheSBvciBKUyBBcnJheVxuICAgICAgICBjYXNlICc0aXYnOlxuICAgICAgICAgICAgZ2wudW5pZm9ybTRpdihsb2NhdGlvbiwgdmFsdWUpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLy8gRmxvYXQzMkFycmF5IG9yIEpTIEFycmF5XG4gICAgICAgIGNhc2UgJzFmdic6XG4gICAgICAgICAgICBnbC51bmlmb3JtMWZ2KGxvY2F0aW9uLCB2YWx1ZSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAvLyBGbG9hdDMyQXJyYXkgb3IgSlMgQXJyYXlcbiAgICAgICAgY2FzZSAnMmZ2JzpcbiAgICAgICAgICAgIGdsLnVuaWZvcm0yZnYobG9jYXRpb24sIHZhbHVlKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIC8vIEZsb2F0MzJBcnJheSBvciBKUyBBcnJheVxuICAgICAgICBjYXNlICczZnYnOlxuICAgICAgICAgICAgZ2wudW5pZm9ybTNmdihsb2NhdGlvbiwgdmFsdWUpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLy8gRmxvYXQzMkFycmF5IG9yIEpTIEFycmF5XG4gICAgICAgIGNhc2UgJzRmdic6XG4gICAgICAgICAgICBnbC51bmlmb3JtNGZ2KGxvY2F0aW9uLCB2YWx1ZSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAvLyBGbG9hdDMyQXJyYXkgb3IgSlMgQXJyYXlcbiAgICAgICAgY2FzZSAnbTInOlxuICAgICAgICBjYXNlICdtYXQyJzpcbiAgICAgICAgY2FzZSAnTWF0cml4MmZ2JzpcbiAgICAgICAgICAgIGdsLnVuaWZvcm1NYXRyaXgyZnYobG9jYXRpb24sIHVuaWZvcm0udHJhbnNwb3NlLCB2YWx1ZSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAvLyBGbG9hdDMyQXJyYXkgb3IgSlMgQXJyYXlcbiAgICAgICAgY2FzZSAnbTMnOlxuICAgICAgICBjYXNlICdtYXQzJzpcbiAgICAgICAgY2FzZSAnTWF0cml4M2Z2JzpcblxuICAgICAgICAgICAgZ2wudW5pZm9ybU1hdHJpeDNmdihsb2NhdGlvbiwgdW5pZm9ybS50cmFuc3Bvc2UsIHZhbHVlKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIC8vIEZsb2F0MzJBcnJheSBvciBKUyBBcnJheVxuICAgICAgICBjYXNlICdtNCc6XG4gICAgICAgIGNhc2UgJ21hdDQnOlxuICAgICAgICBjYXNlICdNYXRyaXg0ZnYnOlxuICAgICAgICAgICAgZ2wudW5pZm9ybU1hdHJpeDRmdihsb2NhdGlvbiwgdW5pZm9ybS50cmFuc3Bvc2UsIHZhbHVlKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIC8vIGEgQ29sb3IgVmFsdWVcbiAgICAgICAgY2FzZSAnYyc6XG4gICAgICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJylcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB2YWx1ZSA9IHV0aWxzLmhleDJyZ2IodmFsdWUpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBnbC51bmlmb3JtM2YobG9jYXRpb24sIHZhbHVlWzBdLCB2YWx1ZVsxXSwgdmFsdWVbMl0pO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLy8gZmxhdCBhcnJheSBvZiBpbnRlZ2VycyAoSlMgb3IgdHlwZWQgYXJyYXkpXG4gICAgICAgIGNhc2UgJ2l2MSc6XG4gICAgICAgICAgICBnbC51bmlmb3JtMWl2KGxvY2F0aW9uLCB2YWx1ZSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAvLyBmbGF0IGFycmF5IG9mIGludGVnZXJzIHdpdGggMyB4IE4gc2l6ZSAoSlMgb3IgdHlwZWQgYXJyYXkpXG4gICAgICAgIGNhc2UgJ2l2JzpcbiAgICAgICAgICAgIGdsLnVuaWZvcm0zaXYobG9jYXRpb24sIHZhbHVlKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIC8vIGZsYXQgYXJyYXkgb2YgZmxvYXRzIChKUyBvciB0eXBlZCBhcnJheSlcbiAgICAgICAgY2FzZSAnZnYxJzpcbiAgICAgICAgICAgIGdsLnVuaWZvcm0xZnYobG9jYXRpb24sIHZhbHVlKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIC8vIGZsYXQgYXJyYXkgb2YgZmxvYXRzIHdpdGggMyB4IE4gc2l6ZSAoSlMgb3IgdHlwZWQgYXJyYXkpXG4gICAgICAgIGNhc2UgJ2Z2JzpcbiAgICAgICAgICAgIGdsLnVuaWZvcm0zZnYobG9jYXRpb24sIHZhbHVlKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIC8vIGFycmF5IG9mIDJEIFBvaW50IG9iamVjdHNcbiAgICAgICAgY2FzZSAndjJ2JzpcbiAgICAgICAgICAgIGlmICghdW5pZm9ybS5fYXJyYXkpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdW5pZm9ybS5fYXJyYXkgPSBuZXcgRmxvYXQzMkFycmF5KDIgKiB2YWx1ZS5sZW5ndGgpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBmb3IgKGkgPSAwLCBpbCA9IHZhbHVlLmxlbmd0aDsgaSA8IGlsOyArK2kpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdW5pZm9ybS5fYXJyYXlbaSAqIDJdICAgICAgID0gdmFsdWVbaV0ueDtcbiAgICAgICAgICAgICAgICB1bmlmb3JtLl9hcnJheVtpICogMiArIDFdICAgPSB2YWx1ZVtpXS55O1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBnbC51bmlmb3JtMmZ2KGxvY2F0aW9uLCB1bmlmb3JtLl9hcnJheSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAvLyBhcnJheSBvZiAzRCBQb2ludCBvYmplY3RzXG4gICAgICAgIGNhc2UgJ3Yzdic6XG4gICAgICAgICAgICBpZiAoIXVuaWZvcm0uX2FycmF5KVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHVuaWZvcm0uX2FycmF5ID0gbmV3IEZsb2F0MzJBcnJheSgzICogdmFsdWUubGVuZ3RoKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZm9yIChpID0gMCwgaWwgPSB2YWx1ZS5sZW5ndGg7IGkgPCBpbDsgKytpKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHVuaWZvcm0uX2FycmF5W2kgKiAzXSAgICAgICA9IHZhbHVlW2ldLng7XG4gICAgICAgICAgICAgICAgdW5pZm9ybS5fYXJyYXlbaSAqIDMgKyAxXSAgID0gdmFsdWVbaV0ueTtcbiAgICAgICAgICAgICAgICB1bmlmb3JtLl9hcnJheVtpICogMyArIDJdICAgPSB2YWx1ZVtpXS56O1xuXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGdsLnVuaWZvcm0zZnYobG9jYXRpb24sIHVuaWZvcm0uX2FycmF5KTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIC8vIGFycmF5IG9mIDREIFBvaW50IG9iamVjdHNcbiAgICAgICAgY2FzZSAndjR2JzpcbiAgICAgICAgICAgIGlmICghdW5pZm9ybS5fYXJyYXkpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdW5pZm9ybS5fYXJyYXkgPSBuZXcgRmxvYXQzMkFycmF5KDQgKiB2YWx1ZS5sZW5ndGgpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBmb3IgKGkgPSAwLCBpbCA9IHZhbHVlLmxlbmd0aDsgaSA8IGlsOyArK2kpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdW5pZm9ybS5fYXJyYXlbaSAqIDRdICAgICAgID0gdmFsdWVbaV0ueDtcbiAgICAgICAgICAgICAgICB1bmlmb3JtLl9hcnJheVtpICogNCArIDFdICAgPSB2YWx1ZVtpXS55O1xuICAgICAgICAgICAgICAgIHVuaWZvcm0uX2FycmF5W2kgKiA0ICsgMl0gICA9IHZhbHVlW2ldLno7XG4gICAgICAgICAgICAgICAgdW5pZm9ybS5fYXJyYXlbaSAqIDQgKyAzXSAgID0gdmFsdWVbaV0udztcblxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBnbC51bmlmb3JtNGZ2KGxvY2F0aW9uLCB1bmlmb3JtLl9hcnJheSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAvLyBQSVhJLlRleHR1cmVcbiAgICAgICAgY2FzZSAndCc6XG4gICAgICAgIGNhc2UgJ3NhbXBsZXIyRCc6XG5cbiAgICAgICAgICAgIGlmICghdW5pZm9ybS52YWx1ZSB8fCAhdW5pZm9ybS52YWx1ZS5iYXNlVGV4dHVyZS5oYXNMb2FkZWQpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIGFjdGl2YXRlIHRoaXMgdGV4dHVyZVxuICAgICAgICAgICAgZ2wuYWN0aXZlVGV4dHVyZShnbFsnVEVYVFVSRScgKyB0aGlzLnRleHR1cmVDb3VudF0pO1xuXG4gICAgICAgICAgICB2YXIgdGV4dHVyZSA9IHVuaWZvcm0udmFsdWUuYmFzZVRleHR1cmUuX2dsVGV4dHVyZXNbZ2wuaWRdO1xuXG4gICAgICAgICAgICBpZiAoIXRleHR1cmUpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdGhpcy5pbml0U2FtcGxlcjJEKHVuaWZvcm0pO1xuXG4gICAgICAgICAgICAgICAgLy8gc2V0IHRoZSB0ZXh0dXIgdG8gdGhlIG5ld2x5IGNyZWF0ZWQgb25lLi5cbiAgICAgICAgICAgICAgICB0ZXh0dXJlID0gdW5pZm9ybS52YWx1ZS5iYXNlVGV4dHVyZS5fZ2xUZXh0dXJlc1tnbC5pZF07XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIGJpbmQgdGhlIHRleHR1cmVcbiAgICAgICAgICAgIGdsLmJpbmRUZXh0dXJlKGdsLlRFWFRVUkVfMkQsIHRleHR1cmUpO1xuXG4gICAgICAgICAgICAvLyBzZXQgdW5pZm9ybSB0byB0ZXh0dXJlIGluZGV4XG4gICAgICAgICAgICBnbC51bmlmb3JtMWkodW5pZm9ybS5fbG9jYXRpb24sIHRoaXMudGV4dHVyZUNvdW50KTtcblxuICAgICAgICAgICAgLy8gaW5jcmVtZW50IG5leHQgdGV4dHVyZSBpZFxuICAgICAgICAgICAgdGhpcy50ZXh0dXJlQ291bnQrKztcblxuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignUGl4aS5qcyBTaGFkZXIgV2FybmluZzogVW5rbm93biB1bmlmb3JtIHR5cGU6ICcgKyB1bmlmb3JtLnR5cGUpO1xuICAgIH1cbn07XG5cbi8qKlxuICogVXBkYXRlcyB0aGUgc2hhZGVyIHVuaWZvcm0gdmFsdWVzLlxuICpcbiAqL1xuU2hhZGVyLnByb3RvdHlwZS5zeW5jVW5pZm9ybXMgPSBmdW5jdGlvbiAoKVxue1xuICAgIHRoaXMudGV4dHVyZUNvdW50ID0gMTtcblxuICAgIGZvciAodmFyIGtleSBpbiB0aGlzLnVuaWZvcm1zKVxuICAgIHtcbiAgICAgICAgdGhpcy5zeW5jVW5pZm9ybSh0aGlzLnVuaWZvcm1zW2tleV0pO1xuICAgIH1cbn07XG5cblxuLyoqXG4gKiBJbml0aWFsaXNlcyBhIFNhbXBsZXIyRCB1bmlmb3JtICh3aGljaCBtYXkgb25seSBiZSBhdmFpbGFibGUgbGF0ZXIgb24gYWZ0ZXIgaW5pdFVuaWZvcm1zIG9uY2UgdGhlIHRleHR1cmUgaGFzIGxvYWRlZClcbiAqXG4gKi9cblNoYWRlci5wcm90b3R5cGUuaW5pdFNhbXBsZXIyRCA9IGZ1bmN0aW9uICh1bmlmb3JtKVxue1xuICAgIHZhciBnbCA9IHRoaXMuZ2w7XG5cbiAgICB2YXIgdGV4dHVyZSA9IHVuaWZvcm0udmFsdWUuYmFzZVRleHR1cmU7XG5cbiAgICBpZighdGV4dHVyZS5oYXNMb2FkZWQpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG5cblxuICAgIGlmICh1bmlmb3JtLnRleHR1cmVEYXRhKVxuICAgIHtcblxuICAgICAgICAvL1RPRE8gbW92ZSB0aGlzLi4uXG4gICAgICAgIHZhciBkYXRhID0gdW5pZm9ybS50ZXh0dXJlRGF0YTtcblxuICAgICAgICB0ZXh0dXJlLl9nbFRleHR1cmVzW2dsLmlkXSA9IGdsLmNyZWF0ZVRleHR1cmUoKTtcblxuICAgICAgICBnbC5iaW5kVGV4dHVyZShnbC5URVhUVVJFXzJELCB0ZXh0dXJlLl9nbFRleHR1cmVzW2dsLmlkXSk7XG5cbiAgICAgICAgZ2wucGl4ZWxTdG9yZWkoZ2wuVU5QQUNLX1BSRU1VTFRJUExZX0FMUEhBX1dFQkdMLCB0ZXh0dXJlLnByZW11bHRpcGxpZWRBbHBoYSk7XG4gICAgICAgIC8vIEdMVGV4dHVyZSA9IG1hZyBsaW5lYXIsIG1pbiBsaW5lYXJfbWlwbWFwX2xpbmVhciwgd3JhcCByZXBlYXQgKyBnbC5nZW5lcmF0ZU1pcG1hcChnbC5URVhUVVJFXzJEKTtcbiAgICAgICAgLy8gR0xUZXh0dXJlTGluZWFyID0gbWFnL21pbiBsaW5lYXIsIHdyYXAgY2xhbXBcbiAgICAgICAgLy8gR0xUZXh0dXJlTmVhcmVzdFJlcGVhdCA9IG1hZy9taW4gTkVBUkVTVCwgd3JhcCByZXBlYXRcbiAgICAgICAgLy8gR0xUZXh0dXJlTmVhcmVzdCA9IG1hZy9taW4gbmVhcmVzdCwgd3JhcCBjbGFtcFxuICAgICAgICAvLyBBdWRpb1RleHR1cmUgPSB3aGF0ZXZlciArIGx1bWluYW5jZSArIHdpZHRoIDUxMiwgaGVpZ2h0IDIsIGJvcmRlciAwXG4gICAgICAgIC8vIEtleVRleHR1cmUgPSB3aGF0ZXZlciArIGx1bWluYW5jZSArIHdpZHRoIDI1NiwgaGVpZ2h0IDIsIGJvcmRlciAwXG5cbiAgICAgICAgLy8gIG1hZ0ZpbHRlciBjYW4gYmU6IGdsLkxJTkVBUiwgZ2wuTElORUFSX01JUE1BUF9MSU5FQVIgb3IgZ2wuTkVBUkVTVFxuICAgICAgICAvLyAgd3JhcFMvVCBjYW4gYmU6IGdsLkNMQU1QX1RPX0VER0Ugb3IgZ2wuUkVQRUFUXG5cbiAgICAgICAgZ2wudGV4SW1hZ2UyRChnbC5URVhUVVJFXzJELCAwLCBkYXRhLmx1bWluYW5jZSA/IGdsLkxVTUlOQU5DRSA6IGdsLlJHQkEsIGdsLlJHQkEsIGdsLlVOU0lHTkVEX0JZVEUsIHRleHR1cmUuc291cmNlKTtcblxuICAgICAgICBnbC50ZXhQYXJhbWV0ZXJpKGdsLlRFWFRVUkVfMkQsIGdsLlRFWFRVUkVfTUFHX0ZJTFRFUiwgZGF0YS5tYWdGaWx0ZXIgPyBkYXRhLm1hZ0ZpbHRlciA6IGdsLkxJTkVBUiApO1xuICAgICAgICBnbC50ZXhQYXJhbWV0ZXJpKGdsLlRFWFRVUkVfMkQsIGdsLlRFWFRVUkVfTUlOX0ZJTFRFUiwgZGF0YS53cmFwUyA/IGRhdGEud3JhcFMgOiBnbC5DTEFNUF9UT19FREdFICk7XG5cbiAgICAgICAgZ2wudGV4UGFyYW1ldGVyaShnbC5URVhUVVJFXzJELCBnbC5URVhUVVJFX1dSQVBfVCwgZGF0YS53cmFwUyA/IGRhdGEud3JhcFMgOiBnbC5DTEFNUF9UT19FREdFKTtcbiAgICAgICAgZ2wudGV4UGFyYW1ldGVyaShnbC5URVhUVVJFXzJELCBnbC5URVhUVVJFX1dSQVBfUywgZGF0YS53cmFwVCA/IGRhdGEud3JhcFQgOiBnbC5DTEFNUF9UT19FREdFKTtcbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgdGhpcy5zaGFkZXJNYW5hZ2VyLnJlbmRlcmVyLnVwZGF0ZVRleHR1cmUodGV4dHVyZSk7XG4gICAgfVxufTtcblxuLyoqXG4gKiBEZXN0cm95cyB0aGUgc2hhZGVyLlxuICpcbiAqL1xuU2hhZGVyLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLmdsLmRlbGV0ZVByb2dyYW0odGhpcy5wcm9ncmFtKTtcblxuICAgIHRoaXMuZ2wgPSBudWxsO1xuICAgIHRoaXMudW5pZm9ybXMgPSBudWxsO1xuICAgIHRoaXMuYXR0cmlidXRlcyA9IG51bGw7XG5cbiAgICB0aGlzLnZlcnRleFNyYyA9IG51bGw7XG4gICAgdGhpcy5mcmFnbWVudFNyYyA9IG51bGw7XG59O1xuXG5TaGFkZXIucHJvdG90eXBlLl9nbENvbXBpbGUgPSBmdW5jdGlvbiAodHlwZSwgc3JjKVxue1xuICAgIHZhciBzaGFkZXIgPSB0aGlzLmdsLmNyZWF0ZVNoYWRlcih0eXBlKTtcblxuICAgIHRoaXMuZ2wuc2hhZGVyU291cmNlKHNoYWRlciwgc3JjKTtcbiAgICB0aGlzLmdsLmNvbXBpbGVTaGFkZXIoc2hhZGVyKTtcblxuICAgIGlmICghdGhpcy5nbC5nZXRTaGFkZXJQYXJhbWV0ZXIoc2hhZGVyLCB0aGlzLmdsLkNPTVBJTEVfU1RBVFVTKSlcbiAgICB7XG4gICAgICAgIGNvbnNvbGUubG9nKHRoaXMuZ2wuZ2V0U2hhZGVySW5mb0xvZyhzaGFkZXIpKTtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgcmV0dXJuIHNoYWRlcjtcbn07XG4iLCJ2YXIgU2hhZGVyID0gcmVxdWlyZSgnLi9TaGFkZXInKTtcblxuLyoqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAZXh0ZW5kcyBQSVhJLlNoYWRlclxuICogQHBhcmFtIHNoYWRlck1hbmFnZXIge1BJWEkuU2hhZGVyTWFuYWdlcn0gVGhlIHdlYmdsIHNoYWRlciBtYW5hZ2VyIHRoaXMgc2hhZGVyIHdvcmtzIGZvci5cbiAqIEBwYXJhbSBbdmVydGV4U3JjXSB7c3RyaW5nfSBUaGUgc291cmNlIG9mIHRoZSB2ZXJ0ZXggc2hhZGVyLlxuICogQHBhcmFtIFtmcmFnbWVudFNyY10ge3N0cmluZ30gVGhlIHNvdXJjZSBvZiB0aGUgZnJhZ21lbnQgc2hhZGVyLlxuICogQHBhcmFtIFtjdXN0b21Vbmlmb3Jtc10ge29iamVjdH0gQ3VzdG9tIHVuaWZvcm1zIHRvIHVzZSB0byBhdWdtZW50IHRoZSBidWlsdC1pbiBvbmVzLlxuICogQHBhcmFtIFtmcmFnbWVudFNyY10ge3N0cmluZ30gVGhlIHNvdXJjZSBvZiB0aGUgZnJhZ21lbnQgc2hhZGVyLlxuICovXG5mdW5jdGlvbiBUZXh0dXJlU2hhZGVyKHNoYWRlck1hbmFnZXIsIHZlcnRleFNyYywgZnJhZ21lbnRTcmMsIGN1c3RvbVVuaWZvcm1zLCBjdXN0b21BdHRyaWJ1dGVzKVxue1xuICAgIHZhciB1bmlmb3JtcyA9IHtcblxuICAgICAgICB1U2FtcGxlcjogICAgICAgICAgIHsgdHlwZTogJ3NhbXBsZXIyRCcsIHZhbHVlOiAwIH0sXG4gICAgICAgIHByb2plY3Rpb25NYXRyaXg6ICAgeyB0eXBlOiAnbWF0MycsIHZhbHVlOiBuZXcgRmxvYXQzMkFycmF5KFsxLCAwLCAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgMSwgMCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsIDAsIDFdKSB9XG4gICAgfTtcblxuICAgIGlmIChjdXN0b21Vbmlmb3JtcylcbiAgICB7XG4gICAgICAgIGZvciAodmFyIHUgaW4gY3VzdG9tVW5pZm9ybXMpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHVuaWZvcm1zW3VdID0gY3VzdG9tVW5pZm9ybXNbdV07XG4gICAgICAgIH1cbiAgICB9XG5cblxuICAgIHZhciBhdHRyaWJ1dGVzID0ge1xuICAgICAgICBhVmVydGV4UG9zaXRpb246ICAgIDAsXG4gICAgICAgIGFUZXh0dXJlQ29vcmQ6ICAgICAgMCxcbiAgICAgICAgYUNvbG9yOiAgICAgICAgICAgICAwXG4gICAgfTtcblxuICAgIGlmIChjdXN0b21BdHRyaWJ1dGVzKVxuICAgIHtcbiAgICAgICAgZm9yICh2YXIgYSBpbiBjdXN0b21BdHRyaWJ1dGVzKVxuICAgICAgICB7XG4gICAgICAgICAgICBhdHRyaWJ1dGVzW2FdID0gY3VzdG9tQXR0cmlidXRlc1thXTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoZSB2ZXJ0ZXggc2hhZGVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7c3RyaW5nfVxuICAgICAqL1xuICAgIHZlcnRleFNyYyA9IHZlcnRleFNyYyB8fCBUZXh0dXJlU2hhZGVyLmRlZmF1bHRWZXJ0ZXhTcmM7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgZnJhZ21lbnQgc2hhZGVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7c3RyaW5nfVxuICAgICAqL1xuICAgIGZyYWdtZW50U3JjID0gZnJhZ21lbnRTcmMgfHwgVGV4dHVyZVNoYWRlci5kZWZhdWx0RnJhZ21lbnRTcmM7XG5cbiAgICBTaGFkZXIuY2FsbCh0aGlzLCBzaGFkZXJNYW5hZ2VyLCB2ZXJ0ZXhTcmMsIGZyYWdtZW50U3JjLCB1bmlmb3JtcywgYXR0cmlidXRlcyk7XG59XG5cbi8vIGNvbnN0cnVjdG9yXG5UZXh0dXJlU2hhZGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoU2hhZGVyLnByb3RvdHlwZSk7XG5UZXh0dXJlU2hhZGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFRleHR1cmVTaGFkZXI7XG5tb2R1bGUuZXhwb3J0cyA9IFRleHR1cmVTaGFkZXI7XG5cbi8qKlxuICogVGhlIGRlZmF1bHQgdmVydGV4IHNoYWRlciBzb3VyY2VcbiAqXG4gKiBAc3RhdGljXG4gKiBAY29uc3RhbnRcbiAqL1xuVGV4dHVyZVNoYWRlci5kZWZhdWx0VmVydGV4U3JjID0gW1xuICAgICdwcmVjaXNpb24gbG93cCBmbG9hdDsnLFxuICAgICdhdHRyaWJ1dGUgdmVjMiBhVmVydGV4UG9zaXRpb247JyxcbiAgICAnYXR0cmlidXRlIHZlYzIgYVRleHR1cmVDb29yZDsnLFxuICAgICdhdHRyaWJ1dGUgdmVjNCBhQ29sb3I7JyxcblxuICAgICd1bmlmb3JtIG1hdDMgcHJvamVjdGlvbk1hdHJpeDsnLFxuXG4gICAgJ3ZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkOycsXG4gICAgJ3ZhcnlpbmcgdmVjNCB2Q29sb3I7JyxcblxuICAgICd2b2lkIG1haW4odm9pZCl7JyxcbiAgICAnICAgZ2xfUG9zaXRpb24gPSB2ZWM0KChwcm9qZWN0aW9uTWF0cml4ICogdmVjMyhhVmVydGV4UG9zaXRpb24sIDEuMCkpLnh5LCAwLjAsIDEuMCk7JyxcbiAgICAnICAgdlRleHR1cmVDb29yZCA9IGFUZXh0dXJlQ29vcmQ7JyxcbiAgICAnICAgdkNvbG9yID0gdmVjNChhQ29sb3IucmdiICogYUNvbG9yLmEsIGFDb2xvci5hKTsnLFxuICAgICd9J1xuXS5qb2luKCdcXG4nKTtcblxuLyoqXG4gKiBUaGUgZGVmYXVsdCBmcmFnbWVudCBzaGFkZXIgc291cmNlXG4gKlxuICogQHN0YXRpY1xuICogQGNvbnN0YW50XG4gKi9cblRleHR1cmVTaGFkZXIuZGVmYXVsdEZyYWdtZW50U3JjID0gW1xuICAgICdwcmVjaXNpb24gbG93cCBmbG9hdDsnLFxuXG4gICAgJ3ZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkOycsXG4gICAgJ3ZhcnlpbmcgdmVjNCB2Q29sb3I7JyxcblxuICAgICd1bmlmb3JtIHNhbXBsZXIyRCB1U2FtcGxlcjsnLFxuXG4gICAgJ3ZvaWQgbWFpbih2b2lkKXsnLFxuICAgICcgICBnbF9GcmFnQ29sb3IgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZUZXh0dXJlQ29vcmQpICogdkNvbG9yIDsnLFxuICAgICd9J1xuXS5qb2luKCdcXG4nKTtcbiIsInZhciBTaGFkZXIgPSByZXF1aXJlKCdwaXhpLWdsLWNvcmUnKS5HTFNoYWRlcjtcblxuLyoqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAZXh0ZW5kcyBQSVhJLlNoYWRlclxuICogQHBhcmFtIHNoYWRlck1hbmFnZXIge1BJWEkuU2hhZGVyTWFuYWdlcn0gVGhlIHdlYmdsIHNoYWRlciBtYW5hZ2VyIHRoaXMgc2hhZGVyIHdvcmtzIGZvci5cbiAqIEBwYXJhbSBbdmVydGV4U3JjXSB7c3RyaW5nfSBUaGUgc291cmNlIG9mIHRoZSB2ZXJ0ZXggc2hhZGVyLlxuICogQHBhcmFtIFtmcmFnbWVudFNyY10ge3N0cmluZ30gVGhlIHNvdXJjZSBvZiB0aGUgZnJhZ21lbnQgc2hhZGVyLlxuICogQHBhcmFtIFtjdXN0b21Vbmlmb3Jtc10ge29iamVjdH0gQ3VzdG9tIHVuaWZvcm1zIHRvIHVzZSB0byBhdWdtZW50IHRoZSBidWlsdC1pbiBvbmVzLlxuICogQHBhcmFtIFtmcmFnbWVudFNyY10ge3N0cmluZ30gVGhlIHNvdXJjZSBvZiB0aGUgZnJhZ21lbnQgc2hhZGVyLlxuICovXG5mdW5jdGlvbiBUZXh0dXJlU2hhZGVyKGdsKVxue1xuICAgIC8qKlxuICAgICAqIFRoZSB2ZXJ0ZXggc2hhZGVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7c3RyaW5nfVxuICAgICAqL1xuICAgIHZlcnRleFNyYyA9IFRleHR1cmVTaGFkZXIuZGVmYXVsdFZlcnRleFNyYztcblxuICAgIC8qKlxuICAgICAqIFRoZSBmcmFnbWVudCBzaGFkZXIuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtzdHJpbmd9XG4gICAgICovXG4gICAgZnJhZ21lbnRTcmMgPSBUZXh0dXJlU2hhZGVyLmRlZmF1bHRGcmFnbWVudFNyYztcblxuICAgIFNoYWRlci5jYWxsKHRoaXMsIGdsLCB2ZXJ0ZXhTcmMsIGZyYWdtZW50U3JjKTsvLywgdW5pZm9ybXMsIGF0dHJpYnV0ZXMpO1xuXG59XG5cbi8vIGNvbnN0cnVjdG9yXG5UZXh0dXJlU2hhZGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoU2hhZGVyLnByb3RvdHlwZSk7XG5UZXh0dXJlU2hhZGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFRleHR1cmVTaGFkZXI7XG5tb2R1bGUuZXhwb3J0cyA9IFRleHR1cmVTaGFkZXI7XG5cbi8qKlxuICogVGhlIGRlZmF1bHQgdmVydGV4IHNoYWRlciBzb3VyY2VcbiAqXG4gKiBAc3RhdGljXG4gKiBAY29uc3RhbnRcbiAqL1xuVGV4dHVyZVNoYWRlci5kZWZhdWx0VmVydGV4U3JjID0gW1xuICAgICdwcmVjaXNpb24gbG93cCBmbG9hdDsnLFxuICAgICdhdHRyaWJ1dGUgdmVjMiBhVmVydGV4UG9zaXRpb247JyxcbiAgICAnYXR0cmlidXRlIHZlYzIgYVRleHR1cmVDb29yZDsnLFxuICAgICdhdHRyaWJ1dGUgdmVjNCBhQ29sb3I7JyxcblxuICAgICd1bmlmb3JtIG1hdDMgcHJvamVjdGlvbk1hdHJpeDsnLFxuXG4gICAgJ3ZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkOycsXG4gICAgJ3ZhcnlpbmcgdmVjNCB2Q29sb3I7JyxcblxuICAgICd2b2lkIG1haW4odm9pZCl7JyxcbiAgICAnICAgZ2xfUG9zaXRpb24gPSB2ZWM0KChwcm9qZWN0aW9uTWF0cml4ICogdmVjMyhhVmVydGV4UG9zaXRpb24sIDEuMCkpLnh5LCAwLjAsIDEuMCk7JyxcbiAgICAnICAgdlRleHR1cmVDb29yZCA9IGFUZXh0dXJlQ29vcmQ7JyxcbiAgICAnICAgdkNvbG9yID0gdmVjNChhQ29sb3IucmdiICogYUNvbG9yLmEsIGFDb2xvci5hKTsnLFxuICAgICd9J1xuXS5qb2luKCdcXG4nKTtcblxuLyoqXG4gKiBUaGUgZGVmYXVsdCBmcmFnbWVudCBzaGFkZXIgc291cmNlXG4gKlxuICogQHN0YXRpY1xuICogQGNvbnN0YW50XG4gKi9cblRleHR1cmVTaGFkZXIuZGVmYXVsdEZyYWdtZW50U3JjID0gW1xuICAgICdwcmVjaXNpb24gbG93cCBmbG9hdDsnLFxuXG4gICAgJ3ZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkOycsXG4gICAgJ3ZhcnlpbmcgdmVjNCB2Q29sb3I7JyxcblxuICAgICd1bmlmb3JtIHNhbXBsZXIyRCB1U2FtcGxlcjsnLFxuXG4gICAgJ3ZvaWQgbWFpbih2b2lkKXsnLFxuICAgICcgICBnbF9GcmFnQ29sb3IgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZUZXh0dXJlQ29vcmQpICogdkNvbG9yIDsnLFxuICAgICd9J1xuXS5qb2luKCdcXG4nKTtcbiIsInZhciBXZWJHTE1hbmFnZXIgPSByZXF1aXJlKCcuLi9tYW5hZ2Vycy9XZWJHTE1hbmFnZXInKTtcblxuLyoqXG4gKiBCYXNlIGZvciBhIGNvbW1vbiBvYmplY3QgcmVuZGVyZXIgdGhhdCBjYW4gYmUgdXNlZCBhcyBhIHN5c3RlbSByZW5kZXJlciBwbHVnaW4uXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLldlYkdMTWFuYWdlclxuICogQG1lbWJlcm9mIFBJWElcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5XZWJHTFJlbmRlcmVyfSBUaGUgcmVuZGVyZXIgdGhpcyBvYmplY3QgcmVuZGVyZXIgd29ya3MgZm9yLlxuICovXG5mdW5jdGlvbiBPYmplY3RSZW5kZXJlcihyZW5kZXJlcilcbntcbiAgICBXZWJHTE1hbmFnZXIuY2FsbCh0aGlzLCByZW5kZXJlcik7XG59XG5cblxuT2JqZWN0UmVuZGVyZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShXZWJHTE1hbmFnZXIucHJvdG90eXBlKTtcbk9iamVjdFJlbmRlcmVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IE9iamVjdFJlbmRlcmVyO1xubW9kdWxlLmV4cG9ydHMgPSBPYmplY3RSZW5kZXJlcjtcblxuLyoqXG4gKiBTdGFydHMgdGhlIHJlbmRlcmVyIGFuZCBzZXRzIHRoZSBzaGFkZXJcbiAqXG4gKi9cbk9iamVjdFJlbmRlcmVyLnByb3RvdHlwZS5zdGFydCA9IGZ1bmN0aW9uICgpXG57XG4gICAgLy8gc2V0IHRoZSBzaGFkZXIuLlxufTtcblxuLyoqXG4gKiBTdG9wcyB0aGUgcmVuZGVyZXJcbiAqXG4gKi9cbk9iamVjdFJlbmRlcmVyLnByb3RvdHlwZS5zdG9wID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLmZsdXNoKCk7XG59O1xuXG4vKipcbiAqIGZsdXNoZXNcbiAqXG4gKi9cbk9iamVjdFJlbmRlcmVyLnByb3RvdHlwZS5mbHVzaCA9IGZ1bmN0aW9uICgpXG57XG4gICAgLy8gZmx1c2ghXG59O1xuXG4vKipcbiAqIFJlbmRlcnMgYW4gb2JqZWN0XG4gKlxuICogQHBhcmFtIG9iamVjdCB7UElYSS5EaXNwbGF5T2JqZWN0fSBUaGUgb2JqZWN0IHRvIHJlbmRlci5cbiAqL1xuT2JqZWN0UmVuZGVyZXIucHJvdG90eXBlLnJlbmRlciA9IGZ1bmN0aW9uIChvYmplY3QpIC8vIGpzaGludCB1bnVzZWQ6ZmFsc2VcbntcbiAgICAvLyByZW5kZXIgdGhlIG9iamVjdFxufTtcbiIsIi8qKlxuICogSGVscGVyIGNsYXNzIHRvIGNyZWF0ZSBhIHF1YWRcbiAqXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gZ2wge1dlYkdMUmVuZGVyaW5nQ29udGV4dH0gVGhlIGdsIGNvbnRleHQgZm9yIHRoaXMgcXVhZCB0byB1c2UuXG4gKi9cbmZ1bmN0aW9uIFF1YWQoZ2wpXG57XG4gICAgLypcbiAgICAgKiB0aGUgY3VycmVudCBXZWJHTCBkcmF3aW5nIGNvbnRleHRcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1dlYkdMUmVuZGVyaW5nQ29udGV4dH1cbiAgICAgKi9cbiAgICB0aGlzLmdsID0gZ2w7XG5cbi8vICAgIHRoaXMudGV4dHVyZXMgPSBuZXcgVGV4dHVyZVV2cygpO1xuXG4gICAgLyoqXG4gICAgICogQW4gYXJyYXkgb2YgdmVydGljZXNcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge0Zsb2F0MzJBcnJheX1cbiAgICAgKi9cbiAgICB0aGlzLnZlcnRpY2VzID0gbmV3IEZsb2F0MzJBcnJheShbXG4gICAgICAgIDAsMCxcbiAgICAgICAgMjAwLDAsXG4gICAgICAgIDIwMCwyMDAsXG4gICAgICAgIDAsMjAwXG4gICAgXSk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgVXZzIG9mIHRoZSBxdWFkXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtGbG9hdDMyQXJyYXl9XG4gICAgICovXG4gICAgdGhpcy51dnMgPSBuZXcgRmxvYXQzMkFycmF5KFtcbiAgICAgICAgMCwwLFxuICAgICAgICAxLDAsXG4gICAgICAgIDEsMSxcbiAgICAgICAgMCwxXG4gICAgXSk7XG5cbi8vICAgIHZhciB3aGl0ZSA9ICgweEZGRkZGRiA+PiAxNikgKyAoMHhGRkZGRkYgJiAweGZmMDApICsgKCgweEZGRkZGRiAmIDB4ZmYpIDw8IDE2KSArICgxICogMjU1IDw8IDI0KTtcbiAgICAvL1RPRE8gY29udmVydCB0aGlzIHRvIGEgMzIgdW5zaWduZWQgaW50IGFycmF5XG4gICAgLyoqXG4gICAgICogVGhlIGNvbG9yIGNvbXBvbmVudHMgb2YgdGhlIHRyaWFuZ2xlc1xuICAgICAqXG4gICAgICogQG1lbWJlciB7RmxvYXQzMkFycmF5fVxuICAgICAqL1xuICAgIHRoaXMuY29sb3JzID0gbmV3IEZsb2F0MzJBcnJheShbXG4gICAgICAgIDEsMSwxLDEsXG4gICAgICAgIDEsMSwxLDEsXG4gICAgICAgIDEsMSwxLDEsXG4gICAgICAgIDEsMSwxLDFcbiAgICBdKTtcblxuICAgIC8qXG4gICAgICogQG1lbWJlciB7VWludDE2QXJyYXl9IEFuIGFycmF5IGNvbnRhaW5pbmcgdGhlIGluZGljZXMgb2YgdGhlIHZlcnRpY2VzXG4gICAgICovXG4gICAgdGhpcy5pbmRpY2VzID0gbmV3IFVpbnQxNkFycmF5KFtcbiAgICAgICAgMCwgMSwgMiwgMCwgMywgMlxuICAgIF0pO1xuXG4gICAgLypcbiAgICAgKiBAbWVtYmVyIHtXZWJHTEJ1ZmZlcn0gVGhlIHZlcnRleCBidWZmZXJcbiAgICAgKi9cbiAgICB0aGlzLnZlcnRleEJ1ZmZlciA9IGdsLmNyZWF0ZUJ1ZmZlcigpO1xuXG4gICAgLypcbiAgICAgKiBAbWVtYmVyIHtXZWJHTEJ1ZmZlcn0gVGhlIGluZGV4IGJ1ZmZlclxuICAgICAqL1xuICAgIHRoaXMuaW5kZXhCdWZmZXIgPSBnbC5jcmVhdGVCdWZmZXIoKTtcblxuICAgIGdsLmJpbmRCdWZmZXIoZ2wuQVJSQVlfQlVGRkVSLCB0aGlzLnZlcnRleEJ1ZmZlcik7XG4gICAgZ2wuYnVmZmVyRGF0YShnbC5BUlJBWV9CVUZGRVIsICg4ICsgOCArIDE2KSAqIDQsIGdsLkRZTkFNSUNfRFJBVyk7XG5cbiAgICBnbC5iaW5kQnVmZmVyKGdsLkVMRU1FTlRfQVJSQVlfQlVGRkVSLCB0aGlzLmluZGV4QnVmZmVyKTtcbiAgICBnbC5idWZmZXJEYXRhKGdsLkVMRU1FTlRfQVJSQVlfQlVGRkVSLCB0aGlzLmluZGljZXMsIGdsLlNUQVRJQ19EUkFXKTtcblxuICAgIHRoaXMudXBsb2FkKCk7XG59XG5cblF1YWQucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gUXVhZDtcblxuLyoqXG4gKiBNYXBzIHR3byBSZWN0YW5nbGUgdG8gdGhlIHF1YWRcbiAqIEBwYXJhbSByZWN0IHtQSVhJLlJlY3RhbmdsZX0gdGhlIGZpcnN0IHJlY3RhbmdsZVxuICogQHBhcmFtIHJlY3QyIHtQSVhJLlJlY3RhbmdsZX0gdGhlIHNlY29uZCByZWN0YW5nbGVcbiAqL1xuUXVhZC5wcm90b3R5cGUubWFwID0gZnVuY3Rpb24ocmVjdCwgcmVjdDIpXG57XG4gICAgdmFyIHggPSAwOyAvL3JlY3QyLnggLyByZWN0LndpZHRoO1xuICAgIHZhciB5ID0gMDsgLy9yZWN0Mi55IC8gcmVjdC5oZWlnaHQ7XG5cbiAgICB0aGlzLnV2c1swXSA9IHg7XG4gICAgdGhpcy51dnNbMV0gPSB5O1xuXG4gICAgdGhpcy51dnNbMl0gPSB4ICsgcmVjdDIud2lkdGggLyByZWN0LndpZHRoO1xuICAgIHRoaXMudXZzWzNdID0geTtcblxuICAgIHRoaXMudXZzWzRdID0geCArIHJlY3QyLndpZHRoIC8gcmVjdC53aWR0aDtcbiAgICB0aGlzLnV2c1s1XSA9IHkgKyByZWN0Mi5oZWlnaHQgLyByZWN0LmhlaWdodDtcblxuICAgIHRoaXMudXZzWzZdID0geDtcbiAgICB0aGlzLnV2c1s3XSA9IHkgKyByZWN0Mi5oZWlnaHQgLyByZWN0LmhlaWdodDtcblxuICAgIC8vLyAtLS0tLVxuICAgIHggPSByZWN0Mi54O1xuICAgIHkgPSByZWN0Mi55O1xuXG4gICAgdGhpcy52ZXJ0aWNlc1swXSA9IHg7XG4gICAgdGhpcy52ZXJ0aWNlc1sxXSA9IHk7XG5cbiAgICB0aGlzLnZlcnRpY2VzWzJdID0geCArIHJlY3QyLndpZHRoO1xuICAgIHRoaXMudmVydGljZXNbM10gPSB5O1xuXG4gICAgdGhpcy52ZXJ0aWNlc1s0XSA9IHggKyByZWN0Mi53aWR0aDtcbiAgICB0aGlzLnZlcnRpY2VzWzVdID0geSArIHJlY3QyLmhlaWdodDtcblxuICAgIHRoaXMudmVydGljZXNbNl0gPSB4O1xuICAgIHRoaXMudmVydGljZXNbN10gPSB5ICsgcmVjdDIuaGVpZ2h0O1xuXG4gICAgdGhpcy51cGxvYWQoKTtcbn07XG5cbi8qKlxuICogQmluZHMgdGhlIGJ1ZmZlciBhbmQgdXBsb2FkcyB0aGUgZGF0YVxuICovXG5RdWFkLnByb3RvdHlwZS51cGxvYWQgPSBmdW5jdGlvbigpXG57XG4gICAgdmFyIGdsID0gdGhpcy5nbDtcblxuICAgIC8vIFRPRE8gY291bGQgcHJvYmFibHkgYmUgcHVzaGVkIGludG8gb25lIHVwbG9hZCFcbiAgICBnbC5iaW5kQnVmZmVyKCBnbC5BUlJBWV9CVUZGRVIsIHRoaXMudmVydGV4QnVmZmVyICk7XG5cbiAgICBnbC5idWZmZXJTdWJEYXRhKGdsLkFSUkFZX0JVRkZFUiwgMCwgdGhpcy52ZXJ0aWNlcyk7XG5cbiAgICBnbC5idWZmZXJTdWJEYXRhKGdsLkFSUkFZX0JVRkZFUiwgOCAqIDQsIHRoaXMudXZzKTtcblxuICAgIGdsLmJ1ZmZlclN1YkRhdGEoZ2wuQVJSQVlfQlVGRkVSLCAoOCArIDgpICogNCwgdGhpcy5jb2xvcnMpO1xufTtcblxuUXVhZC5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uKClcbntcbiAgICB2YXIgZ2wgPSB0aGlzLmdsO1xuICAgIFxuICAgICBnbC5kZWxldGVCdWZmZXIodGhpcy52ZXJ0ZXhCdWZmZXIpO1xuICAgICBnbC5kZWxldGVCdWZmZXIodGhpcy5pbmRleEJ1ZmZlcik7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IFF1YWQ7XG5cblxuIiwidmFyIG1hdGggPSByZXF1aXJlKCcuLi8uLi8uLi9tYXRoJyksXG4gICAgdXRpbHMgPSByZXF1aXJlKCcuLi8uLi8uLi91dGlscycpLFxuICAgIENPTlNUID0gcmVxdWlyZSgnLi4vLi4vLi4vY29uc3QnKSxcbiAgICAgICAgXG4gICAgR0xUZXh0dXJlID0gcmVxdWlyZSgncGl4aS1nbC1jb3JlJykuR0xUZXh0dXJlLFxuICAgIEdMRnJhbWVidWZmZXIgPSByZXF1aXJlKCdwaXhpLWdsLWNvcmUnKS5HTEZyYW1lYnVmZmVyLFxuICAgIFxuICAgIFN0ZW5jaWxNYXNrU3RhY2sgPSByZXF1aXJlKCcuL1N0ZW5jaWxNYXNrU3RhY2snKTtcblxuLyoqXG4gKiBAYXV0aG9yIE1hdCBHcm92ZXMgaHR0cDovL21hdGdyb3Zlcy5jb20vIEBEb29ybWF0MjNcbiAqL1xuXG4vKipcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqIEBwYXJhbSBnbCB7V2ViR0xSZW5kZXJpbmdDb250ZXh0fSB0aGUgY3VycmVudCBXZWJHTCBkcmF3aW5nIGNvbnRleHRcbiAqIEBwYXJhbSB3aWR0aCB7bnVtYmVyfSB0aGUgaG9yaXpvbnRhbCByYW5nZSBvZiB0aGUgZmlsdGVyXG4gKiBAcGFyYW0gaGVpZ2h0IHtudW1iZXJ9IHRoZSB2ZXJ0aWNhbCByYW5nZSBvZiB0aGUgZmlsdGVyXG4gKiBAcGFyYW0gc2NhbGVNb2RlIHtudW1iZXJ9IFNlZSB7QGxpbmsgUElYSS5TQ0FMRV9NT0RFU30gZm9yIHBvc3NpYmxlIHZhbHVlc1xuICogQHBhcmFtIHJlc29sdXRpb24ge251bWJlcn0gdGhlIGN1cnJlbnQgcmVzb2x1dGlvblxuICogQHBhcmFtIHJvb3Qge2Jvb2xlYW59IFdoZXRoZXIgdGhpcyBvYmplY3QgaXMgdGhlIHJvb3QgZWxlbWVudCBvciBub3RcbiAqL1xudmFyIFJlbmRlclRhcmdldCA9IGZ1bmN0aW9uKGdsLCB3aWR0aCwgaGVpZ2h0LCBzY2FsZU1vZGUsIHJlc29sdXRpb24sIHJvb3QpXG57XG4gICAgLy9UT0RPIFJlc29sdXRpb24gY291bGQgZ28gaGVyZSAoIGVnIGxvdyByZXMgYmx1cnMgKVxuXG4gICAgLyoqXG4gICAgICogVGhlIGN1cnJlbnQgV2ViR0wgZHJhd2luZyBjb250ZXh0LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7V2ViR0xSZW5kZXJpbmdDb250ZXh0fVxuICAgICAqL1xuICAgIHRoaXMuZ2wgPSBnbDtcblxuICAgIC8vIG5leHQgdGltZSB0byBjcmVhdGUgYSBmcmFtZSBidWZmZXIgYW5kIHRleHR1cmVcblxuICAgIC8qKlxuICAgICAqIEEgZnJhbWUgYnVmZmVyXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtXZWJHTEZyYW1lQnVmZmVyfVxuICAgICAqL1xuICAgIHRoaXMuZnJhbWVCdWZmZXIgPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHRleHR1cmVcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuVGV4dHVyZX1cbiAgICAgKi9cbiAgICB0aGlzLnRleHR1cmUgPSBudWxsO1xuXG4gICAgdGhpcy5jbGVhckNvbG9yID0gWzAsIDAsIDAsIDBdO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHNpemUgb2YgdGhlIG9iamVjdCBhcyBhIHJlY3RhbmdsZVxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5SZWN0YW5nbGV9XG4gICAgICovXG4gICAgdGhpcy5zaXplID0gbmV3IG1hdGguUmVjdGFuZ2xlKDAsIDAsIDEsIDEpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGN1cnJlbnQgcmVzb2x1dGlvblxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMucmVzb2x1dGlvbiA9IHJlc29sdXRpb24gfHwgQ09OU1QuUkVTT0xVVElPTjtcblxuICAgIC8qKlxuICAgICAqIFRoZSBwcm9qZWN0aW9uIG1hdHJpeFxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5NYXRyaXh9XG4gICAgICovXG4gICAgdGhpcy5wcm9qZWN0aW9uTWF0cml4ID0gbmV3IG1hdGguTWF0cml4KCk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgb2JqZWN0J3MgdHJhbnNmb3JtXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLk1hdHJpeH1cbiAgICAgKi9cbiAgICB0aGlzLnRyYW5zZm9ybSA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgZnJhbWUuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlJlY3RhbmdsZX1cbiAgICAgKi9cbiAgICB0aGlzLmZyYW1lID0gbnVsbDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBzdGVuY2lsIGJ1ZmZlciBzdG9yZXMgbWFza2luZyBkYXRhIGZvciB0aGUgcmVuZGVyIHRhcmdldFxuICAgICAqXG4gICAgICogQG1lbWJlciB7V2ViR0xSZW5kZXJCdWZmZXJ9XG4gICAgICovXG4gICAgdGhpcy5zdGVuY2lsQnVmZmVyID0gbnVsbDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBkYXRhIHN0cnVjdHVyZSBmb3IgdGhlIHN0ZW5jaWwgbWFza3NcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuU3RlbmNpbE1hc2tTdGFja31cbiAgICAgKi9cbiAgICB0aGlzLnN0ZW5jaWxNYXNrU3RhY2sgPSBuZXcgU3RlbmNpbE1hc2tTdGFjaygpO1xuXG4gICAgLyoqXG4gICAgICogU3RvcmVzIGZpbHRlciBkYXRhIGZvciB0aGUgcmVuZGVyIHRhcmdldFxuICAgICAqXG4gICAgICogQG1lbWJlciB7b2JqZWN0W119XG4gICAgICovXG4gICAgdGhpcy5maWx0ZXJTdGFjayA9IFtcbiAgICAgICAge1xuICAgICAgICAgICAgcmVuZGVyVGFyZ2V0OnRoaXMsXG4gICAgICAgICAgICBmaWx0ZXI6W10sXG4gICAgICAgICAgICBib3VuZHM6dGhpcy5zaXplXG4gICAgICAgIH1cbiAgICBdO1xuXG5cbiAgICAvKipcbiAgICAgKiBUaGUgc2NhbGUgbW9kZS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCBQSVhJLlNDQUxFX01PREVTLkRFRkFVTFRcbiAgICAgKiBAc2VlIFBJWEkuU0NBTEVfTU9ERVNcbiAgICAgKi9cbiAgICB0aGlzLnNjYWxlTW9kZSA9IHNjYWxlTW9kZSB8fCBDT05TVC5TQ0FMRV9NT0RFUy5ERUZBVUxUO1xuXG4gICAgLyoqXG4gICAgICogV2hldGhlciB0aGlzIG9iamVjdCBpcyB0aGUgcm9vdCBlbGVtZW50IG9yIG5vdFxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKi9cbiAgICB0aGlzLnJvb3QgPSByb290O1xuXG4gICAgdGhpcy5mcmFtZUJ1ZmZlciA9IEdMRnJhbWVidWZmZXIuY3JlYXRlUkdCQShnbCwgMTAwLCAxMDApO1xuICAgIGlmKHRoaXMuZnJhbWVCdWZmZXIpdGhpcy5mcmFtZUJ1ZmZlci51bmJpbmQoKTtcblxuICAgLy8gdGhpcy5mcmFtZUJ1ZmZlciA9IHtmcmFtZWJ1ZmZlcjpudWxsLCBiaW5kOmZ1bmN0aW9uKCl7fSwgY2xlYXI6ZnVuY3Rpb24oKXt9LCByZXNpemU6ZnVuY3Rpb24oKXt9fS8vbmV3IEdMRnJhbWVidWZmZXIuY3JlYXRlUkdCQShnbCwgMTAwLCAxMDApO1xuXG5cblxuICAgIGlmICghdGhpcy5yb290KVxuICAgIHtcbiAgICAgICAgLypcbiAgICAgICAgICAgIEEgZnJhbWUgYnVmZmVyIG5lZWRzIGEgdGFyZ2V0IHRvIHJlbmRlciB0by4uXG4gICAgICAgICAgICBjcmVhdGUgYSB0ZXh0dXJlIGFuZCBiaW5kIGl0IGF0dGFjaCBpdCB0byB0aGUgZnJhbWVidWZmZXIuLlxuICAgICAgICAgKi9cbiAgICAgICAgXG4gICAgICAgIC8vIGNyZWF0ZSBhIHRleHR1cmUgdG8gYmluZCBhdHRhY2ggdG8gdGhlIGZyYW1lQnVmZmVyLi5cbiAgICAgICAgdmFyIHRleHR1cmUgPSBuZXcgR0xUZXh0dXJlKGdsKTtcblxuICAgICAgICB0ZXh0dXJlLmVuYWJsZUxpbmVhclNjYWxpbmcoKVxuICAgICAgICB0ZXh0dXJlLmVuYWJsZVdyYXBDbGFtcCgpXG5cbiAgICAgICAgdGhpcy5mcmFtZUJ1ZmZlci5lbmFibGVUZXh0dXJlKHRleHR1cmUpO1xuXG4gICAgICAgIC8vIFRPRE8gY2hhbmdlIVxuICAgICAgICAvLyB0aGlzIGlzIHVzZWQgYnkgdGhlIGJhc2UgdGV4dHVyZVxuICAgICAgICB0aGlzLnRleHR1cmUgPSB0ZXh0dXJlLnRleHR1cmU7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIC8vIG1ha2UgaXQgYSBudWxsIGZyYW1lYnVmZmVyLi5cbiAgICAgICAgdGhpcy5mcmFtZUJ1ZmZlci5mcmFtZWJ1ZmZlciA9IG51bGw7XG4gICAgfVxuXG4gICAgdGhpcy5yZXNpemUod2lkdGgsIGhlaWdodCk7XG59O1xuXG5SZW5kZXJUYXJnZXQucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gUmVuZGVyVGFyZ2V0O1xubW9kdWxlLmV4cG9ydHMgPSBSZW5kZXJUYXJnZXQ7XG5cbi8qKlxuICogQ2xlYXJzIHRoZSBmaWx0ZXIgdGV4dHVyZS5cbiAqXG4gKiBAcGFyYW0gW2JpbmQ9ZmFsc2VdIHtib29sZWFufSBTaG91bGQgd2UgYmluZCBvdXIgZnJhbWVidWZmZXIgYmVmb3JlIGNsZWFyaW5nP1xuICovXG5SZW5kZXJUYXJnZXQucHJvdG90eXBlLmNsZWFyID0gZnVuY3Rpb24oY2xlYXJDb2xvcilcbntcbiAgICB2YXIgY2MgPSBjbGVhckNvbG9yIHx8IHRoaXMuY2xlYXJDb2xvclxuICAgIHRoaXMuZnJhbWVCdWZmZXIuY2xlYXIoY2NbMF0sY2NbMV0sY2NbMl0sY2NbM10pLy9yLGcsYixhKTtcbn07XG5cbi8qKlxuICogQmluZHMgdGhlIHN0ZW5jaWwgYnVmZmVyLlxuICpcbiAqL1xuUmVuZGVyVGFyZ2V0LnByb3RvdHlwZS5hdHRhY2hTdGVuY2lsQnVmZmVyID0gZnVuY3Rpb24oKVxue1xuICAgIC8vVE9ETyBjaGVjayBpZiBzdGVuY2lsIGlzIGRvbmU/XG4gICAgLyoqXG4gICAgICogVGhlIHN0ZW5jaWwgYnVmZmVyIGlzIHVzZWQgZm9yIG1hc2tpbmcgaW4gcGl4aVxuICAgICAqIGxldHMgY3JlYXRlIG9uZSBhbmQgdGhlbiBhZGQgYXR0YWNoIGl0IHRvIHRoZSBmcmFtZWJ1ZmZlci4uXG4gICAgICovXG4gICAgaWYgKCF0aGlzLnJvb3QpXG4gICAge1xuICAgICAgICB0aGlzLmZyYW1lQnVmZmVyLmVuYWJsZVN0ZW5jaWwoKTtcbiAgICB9XG59O1xuXG4vKipcbiAqIEJpbmRzIHRoZSBidWZmZXJzIGFuZCBpbml0aWFsaXNlcyB0aGUgdmlld3BvcnQuXG4gKlxuICovXG5SZW5kZXJUYXJnZXQucHJvdG90eXBlLmFjdGl2YXRlID0gZnVuY3Rpb24oKVxue1xuICAgIC8vVE9PRCByZWZhY3RvciB1c2FnZSBvZiBmcmFtZS4uXG4gICAgdmFyIGdsID0gdGhpcy5nbDtcblxuICAgIHRoaXMuZnJhbWVCdWZmZXIuYmluZCgpO1xuXG5cbiAgICB2YXIgcHJvamVjdGlvbkZyYW1lID0gdGhpcy5mcmFtZSB8fCB0aGlzLnNpemU7XG5cbiAgICAvLyBUT0RPIGFkZCBhIGRpcnR5IGZsYWcgdG8gdGhpcyBvZiBhIHNldHRlciBmb3IgdGhlIGZyYW1lP1xuICAgIHRoaXMuY2FsY3VsYXRlUHJvamVjdGlvbiggcHJvamVjdGlvbkZyYW1lICk7XG5cbiAgICBpZih0aGlzLnRyYW5zZm9ybSlcbiAgICB7XG4gICAgICAgIHRoaXMucHJvamVjdGlvbk1hdHJpeC5hcHBlbmQodGhpcy50cmFuc2Zvcm0pO1xuICAgIH1cblxuICAgIGdsLnZpZXdwb3J0KDAsMCwgcHJvamVjdGlvbkZyYW1lLndpZHRoICogdGhpcy5yZXNvbHV0aW9uLCBwcm9qZWN0aW9uRnJhbWUuaGVpZ2h0ICogdGhpcy5yZXNvbHV0aW9uKTtcbn07XG5cbi8qKlxuICogVXBkYXRlcyB0aGUgcHJvamVjdGlvbiBtYXRyaXggYmFzZWQgb24gYSBwcm9qZWN0aW9uIGZyYW1lICh3aGljaCBpcyBhIHJlY3RhbmdsZSlcbiAqXG4gKi9cblJlbmRlclRhcmdldC5wcm90b3R5cGUuY2FsY3VsYXRlUHJvamVjdGlvbiA9IGZ1bmN0aW9uIChwcm9qZWN0aW9uRnJhbWUpXG57XG4gICAgdmFyIHBtID0gdGhpcy5wcm9qZWN0aW9uTWF0cml4O1xuXG4gICAgcG0uaWRlbnRpdHkoKTtcblxuICAgIGlmICghdGhpcy5yb290KVxuICAgIHtcbiAgICAgICAgcG0uYSA9IDEgLyBwcm9qZWN0aW9uRnJhbWUud2lkdGgqMjtcbiAgICAgICAgcG0uZCA9IDEgLyBwcm9qZWN0aW9uRnJhbWUuaGVpZ2h0KjI7XG5cbiAgICAgICAgcG0udHggPSAtMSAtIHByb2plY3Rpb25GcmFtZS54ICogcG0uYTtcbiAgICAgICAgcG0udHkgPSAtMSAtIHByb2plY3Rpb25GcmFtZS55ICogcG0uZDtcbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgcG0uYSA9IDEgLyBwcm9qZWN0aW9uRnJhbWUud2lkdGgqMjtcbiAgICAgICAgcG0uZCA9IC0xIC8gcHJvamVjdGlvbkZyYW1lLmhlaWdodCoyO1xuXG4gICAgICAgIHBtLnR4ID0gLTEgLSBwcm9qZWN0aW9uRnJhbWUueCAqIHBtLmE7XG4gICAgICAgIHBtLnR5ID0gMSAtIHByb2plY3Rpb25GcmFtZS55ICogcG0uZDtcbiAgICB9XG59O1xuXG4vKipcbiAqIFJlc2l6ZXMgdGhlIHRleHR1cmUgdG8gdGhlIHNwZWNpZmllZCB3aWR0aCBhbmQgaGVpZ2h0XG4gKlxuICogQHBhcmFtIHdpZHRoIHtOdW1iZXJ9IHRoZSBuZXcgd2lkdGggb2YgdGhlIHRleHR1cmVcbiAqIEBwYXJhbSBoZWlnaHQge051bWJlcn0gdGhlIG5ldyBoZWlnaHQgb2YgdGhlIHRleHR1cmVcbiAqL1xuUmVuZGVyVGFyZ2V0LnByb3RvdHlwZS5yZXNpemUgPSBmdW5jdGlvbiAod2lkdGgsIGhlaWdodClcbntcbiAgICB3aWR0aCA9IHdpZHRoIHwgMDtcbiAgICBoZWlnaHQgPSBoZWlnaHQgfCAwO1xuXG4gICAgaWYgKHRoaXMuc2l6ZS53aWR0aCA9PT0gd2lkdGggJiYgdGhpcy5zaXplLmhlaWdodCA9PT0gaGVpZ2h0KSBcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLnNpemUud2lkdGggPSB3aWR0aDtcbiAgICB0aGlzLnNpemUuaGVpZ2h0ID0gaGVpZ2h0O1xuXG4gICAgdGhpcy5mcmFtZUJ1ZmZlci5yZXNpemUod2lkdGggKiB0aGlzLnJlc29sdXRpb24sIGhlaWdodCAqIHRoaXMucmVzb2x1dGlvbik7XG4gICAgXG4gICAgdmFyIHByb2plY3Rpb25GcmFtZSA9IHRoaXMuZnJhbWUgfHwgdGhpcy5zaXplO1xuXG4gICAgdGhpcy5jYWxjdWxhdGVQcm9qZWN0aW9uKCBwcm9qZWN0aW9uRnJhbWUgKTtcbn07XG5cbi8qKlxuICogRGVzdHJveXMgdGhlIHJlbmRlciB0YXJnZXQuXG4gKlxuICovXG5SZW5kZXJUYXJnZXQucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoKVxue1xuICAgIHZhciBnbCA9IHRoaXMuZ2w7XG4gICAgXG4gICAgdGhpcy5mcmFtZUJ1ZmZlci5kZXN0cm95KCk7XG5cbiAgICB0aGlzLmZyYW1lQnVmZmVyID0gbnVsbDtcbiAgICB0aGlzLnRleHR1cmUgPSBudWxsO1xufTtcbiIsIi8qKlxuICogR2VuZXJpYyBNYXNrIFN0YWNrIGRhdGEgc3RydWN0dXJlXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKi9cbmZ1bmN0aW9uIFN0ZW5jaWxNYXNrU3RhY2soKVxue1xuXHQvKipcbiAgICAgKiBUaGUgYWN0dWFsIHN0YWNrXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHthbnlbXX1cbiAgICAgKi9cbiAgICB0aGlzLnN0ZW5jaWxTdGFjayA9IFtdO1xuXG4gICAgLyoqXG4gICAgICogVE9ETyBAYWx2aW5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICovXG4gICAgdGhpcy5yZXZlcnNlID0gdHJ1ZTtcblxuICAgIC8qKlxuICAgICAqIEludGVybmFsIGNvdW50XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy5jb3VudCA9IDA7XG59XG5cblN0ZW5jaWxNYXNrU3RhY2sucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gU3RlbmNpbE1hc2tTdGFjaztcbm1vZHVsZS5leHBvcnRzID0gU3RlbmNpbE1hc2tTdGFjaztcbiIsIkNPTlNUID0gcmVxdWlyZSgnLi4vLi4vLi4vY29uc3QnKTtcblxuLyoqXG4gKiBNYXBzIGdsIGJsZW5kIGNvbWJpbmF0aW9ucyB0byBXZWJHTFxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICovXG5mdW5jdGlvbiBtYXBXZWJHTEJsZW5kTW9kZXNUb1BpeGkoZ2wsIG9iamVjdClcbntcbiAgICBvYmplY3QgPSBvYmplY3QgfHwge307XG5cbiAgICAvL1RPRE8gLSBwcmVtdWx0aXBseSBhbHBoYSB3b3VsZCBiZSBkaWZmZXJlbnQuXG4gICAgLy9hZGQgYSBib29sZWFuIGZvciB0aGF0IVxuICAgIG9iamVjdFtDT05TVC5CTEVORF9NT0RFUy5OT1JNQUxdICAgICAgICA9IFtnbC5PTkUsICAgICAgIGdsLk9ORV9NSU5VU19TUkNfQUxQSEFdO1xuICAgIG9iamVjdFtDT05TVC5CTEVORF9NT0RFUy5BRERdICAgICAgICAgICA9IFtnbC5TUkNfQUxQSEEsIGdsLkRTVF9BTFBIQV07XG4gICAgb2JqZWN0W0NPTlNULkJMRU5EX01PREVTLk1VTFRJUExZXSAgICAgID0gW2dsLkRTVF9DT0xPUiwgZ2wuT05FX01JTlVTX1NSQ19BTFBIQV07XG4gICAgb2JqZWN0W0NPTlNULkJMRU5EX01PREVTLlNDUkVFTl0gICAgICAgID0gW2dsLlNSQ19BTFBIQSwgZ2wuT05FXTtcbiAgICBvYmplY3RbQ09OU1QuQkxFTkRfTU9ERVMuT1ZFUkxBWV0gICAgICAgPSBbZ2wuT05FLCAgICAgICBnbC5PTkVfTUlOVVNfU1JDX0FMUEhBXTtcbiAgICBvYmplY3RbQ09OU1QuQkxFTkRfTU9ERVMuREFSS0VOXSAgICAgICAgPSBbZ2wuT05FLCAgICAgICBnbC5PTkVfTUlOVVNfU1JDX0FMUEhBXTtcbiAgICBvYmplY3RbQ09OU1QuQkxFTkRfTU9ERVMuTElHSFRFTl0gICAgICAgPSBbZ2wuT05FLCAgICAgICBnbC5PTkVfTUlOVVNfU1JDX0FMUEhBXTtcbiAgICBvYmplY3RbQ09OU1QuQkxFTkRfTU9ERVMuQ09MT1JfRE9ER0VdICAgPSBbZ2wuT05FLCAgICAgICBnbC5PTkVfTUlOVVNfU1JDX0FMUEhBXTtcbiAgICBvYmplY3RbQ09OU1QuQkxFTkRfTU9ERVMuQ09MT1JfQlVSTl0gICAgPSBbZ2wuT05FLCAgICAgICBnbC5PTkVfTUlOVVNfU1JDX0FMUEhBXTtcbiAgICBvYmplY3RbQ09OU1QuQkxFTkRfTU9ERVMuSEFSRF9MSUdIVF0gICAgPSBbZ2wuT05FLCAgICAgICBnbC5PTkVfTUlOVVNfU1JDX0FMUEhBXTtcbiAgICBvYmplY3RbQ09OU1QuQkxFTkRfTU9ERVMuU09GVF9MSUdIVF0gICAgPSBbZ2wuT05FLCAgICAgICBnbC5PTkVfTUlOVVNfU1JDX0FMUEhBXTtcbiAgICBvYmplY3RbQ09OU1QuQkxFTkRfTU9ERVMuRElGRkVSRU5DRV0gICAgPSBbZ2wuT05FLCAgICAgICBnbC5PTkVfTUlOVVNfU1JDX0FMUEhBXTtcbiAgICBvYmplY3RbQ09OU1QuQkxFTkRfTU9ERVMuRVhDTFVTSU9OXSAgICAgPSBbZ2wuT05FLCAgICAgICBnbC5PTkVfTUlOVVNfU1JDX0FMUEhBXTtcbiAgICBvYmplY3RbQ09OU1QuQkxFTkRfTU9ERVMuSFVFXSAgICAgICAgICAgPSBbZ2wuT05FLCAgICAgICBnbC5PTkVfTUlOVVNfU1JDX0FMUEhBXTtcbiAgICBvYmplY3RbQ09OU1QuQkxFTkRfTU9ERVMuU0FUVVJBVElPTl0gICAgPSBbZ2wuT05FLCAgICAgICBnbC5PTkVfTUlOVVNfU1JDX0FMUEhBXTtcbiAgICBvYmplY3RbQ09OU1QuQkxFTkRfTU9ERVMuQ09MT1JdICAgICAgICAgPSBbZ2wuT05FLCAgICAgICBnbC5PTkVfTUlOVVNfU1JDX0FMUEhBXTtcbiAgICBvYmplY3RbQ09OU1QuQkxFTkRfTU9ERVMuTFVNSU5PU0lUWV0gICAgPSBbZ2wuT05FLCAgICAgICBnbC5PTkVfTUlOVVNfU1JDX0FMUEhBXTtcblxuICAgIHJldHVybiBvYmplY3Q7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gbWFwV2ViR0xCbGVuZE1vZGVzVG9QaXhpO1xuIiwiQ09OU1QgPSByZXF1aXJlKCcuLi8uLi8uLi9jb25zdCcpO1xuXG4vKipcbiAqIEdlbmVyaWMgTWFzayBTdGFjayBkYXRhIHN0cnVjdHVyZVxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICovXG5mdW5jdGlvbiBtYXBXZWJHTERyYXdNb2Rlc1RvUGl4aShnbCwgb2JqZWN0KVxue1xuXHRvYmplY3Q9IG9iamVjdCB8fCB7fTtcblxuICAgIG9iamVjdFtDT05TVC5EUkFXX01PREVTLlBPSU5UU10gICAgICAgICA9IGdsLlBPSU5UUztcbiAgICBvYmplY3RbQ09OU1QuRFJBV19NT0RFUy5MSU5FU10gICAgICAgICAgPSBnbC5MSU5FUztcbiAgICBvYmplY3RbQ09OU1QuRFJBV19NT0RFUy5MSU5FX0xPT1BdICAgICAgPSBnbC5MSU5FX0xPT1A7XG4gICAgb2JqZWN0W0NPTlNULkRSQVdfTU9ERVMuTElORV9TVFJJUF0gICAgID0gZ2wuTElORV9TVFJJUDtcbiAgICBvYmplY3RbQ09OU1QuRFJBV19NT0RFUy5UUklBTkdMRVNdICAgICAgPSBnbC5UUklBTkdMRVM7XG4gICAgb2JqZWN0W0NPTlNULkRSQVdfTU9ERVMuVFJJQU5HTEVfU1RSSVBdID0gZ2wuVFJJQU5HTEVfU1RSSVA7XG4gICAgb2JqZWN0W0NPTlNULkRSQVdfTU9ERVMuVFJJQU5HTEVfRkFOXSAgID0gZ2wuVFJJQU5HTEVfRkFOO1xuXG59XG5cbm1vZHVsZS5leHBvcnRzID0gbWFwV2ViR0xEcmF3TW9kZXNUb1BpeGk7XG4iLCJ2YXIgbWF0aCA9IHJlcXVpcmUoJy4uL21hdGgnKSxcbiAgICBUZXh0dXJlID0gcmVxdWlyZSgnLi4vdGV4dHVyZXMvVGV4dHVyZScpLFxuICAgIENvbnRhaW5lciA9IHJlcXVpcmUoJy4uL2Rpc3BsYXkvQ29udGFpbmVyJyksXG4gICAgQ2FudmFzVGludGVyID0gcmVxdWlyZSgnLi4vcmVuZGVyZXJzL2NhbnZhcy91dGlscy9DYW52YXNUaW50ZXInKSxcbiAgICB1dGlscyA9IHJlcXVpcmUoJy4uL3V0aWxzJyksXG4gICAgQ09OU1QgPSByZXF1aXJlKCcuLi9jb25zdCcpLFxuICAgIHRlbXBQb2ludCA9IG5ldyBtYXRoLlBvaW50KCk7XG5cbi8qKlxuICogVGhlIFNwcml0ZSBvYmplY3QgaXMgdGhlIGJhc2UgZm9yIGFsbCB0ZXh0dXJlZCBvYmplY3RzIHRoYXQgYXJlIHJlbmRlcmVkIHRvIHRoZSBzY3JlZW5cbiAqXG4gKiBBIHNwcml0ZSBjYW4gYmUgY3JlYXRlZCBkaXJlY3RseSBmcm9tIGFuIGltYWdlIGxpa2UgdGhpczpcbiAqXG4gKiBgYGBqc1xuICogdmFyIHNwcml0ZSA9IG5ldyBQSVhJLlNwcml0ZS5mcm9tSW1hZ2UoJ2Fzc2V0cy9pbWFnZS5wbmcnKTtcbiAqIGBgYFxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5Db250YWluZXJcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gdGV4dHVyZSB7UElYSS5UZXh0dXJlfSBUaGUgdGV4dHVyZSBmb3IgdGhpcyBzcHJpdGVcbiAqL1xuZnVuY3Rpb24gU3ByaXRlKHRleHR1cmUpXG57XG4gICAgQ29udGFpbmVyLmNhbGwodGhpcyk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYW5jaG9yIHNldHMgdGhlIG9yaWdpbiBwb2ludCBvZiB0aGUgdGV4dHVyZS5cbiAgICAgKiBUaGUgZGVmYXVsdCBpcyAwLDAgdGhpcyBtZWFucyB0aGUgdGV4dHVyZSdzIG9yaWdpbiBpcyB0aGUgdG9wIGxlZnRcbiAgICAgKiBTZXR0aW5nIHRoZSBhbmNob3IgdG8gMC41LDAuNSBtZWFucyB0aGUgdGV4dHVyZSdzIG9yaWdpbiBpcyBjZW50ZXJlZFxuICAgICAqIFNldHRpbmcgdGhlIGFuY2hvciB0byAxLDEgd291bGQgbWVhbiB0aGUgdGV4dHVyZSdzIG9yaWdpbiBwb2ludCB3aWxsIGJlIHRoZSBib3R0b20gcmlnaHQgY29ybmVyXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlBvaW50fVxuICAgICAqL1xuICAgIHRoaXMuYW5jaG9yID0gbmV3IG1hdGguUG9pbnQoKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSB0ZXh0dXJlIHRoYXQgdGhlIHNwcml0ZSBpcyB1c2luZ1xuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5UZXh0dXJlfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fdGV4dHVyZSA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgd2lkdGggb2YgdGhlIHNwcml0ZSAodGhpcyBpcyBpbml0aWFsbHkgc2V0IGJ5IHRoZSB0ZXh0dXJlKVxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fd2lkdGggPSAwO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGhlaWdodCBvZiB0aGUgc3ByaXRlICh0aGlzIGlzIGluaXRpYWxseSBzZXQgYnkgdGhlIHRleHR1cmUpXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9oZWlnaHQgPSAwO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHRpbnQgYXBwbGllZCB0byB0aGUgc3ByaXRlLiBUaGlzIGlzIGEgaGV4IHZhbHVlLiBBIHZhbHVlIG9mIDB4RkZGRkZGIHdpbGwgcmVtb3ZlIGFueSB0aW50IGVmZmVjdC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAweEZGRkZGRlxuICAgICAqL1xuICAgIHRoaXMudGludCA9IDB4RkZGRkZGO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGJsZW5kIG1vZGUgdG8gYmUgYXBwbGllZCB0byB0aGUgc3ByaXRlLiBBcHBseSBhIHZhbHVlIG9mIGBQSVhJLkJMRU5EX01PREVTLk5PUk1BTGAgdG8gcmVzZXQgdGhlIGJsZW5kIG1vZGUuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgUElYSS5CTEVORF9NT0RFUy5OT1JNQUxcbiAgICAgKiBAc2VlIFBJWEkuQkxFTkRfTU9ERVNcbiAgICAgKi9cbiAgICB0aGlzLmJsZW5kTW9kZSA9IENPTlNULkJMRU5EX01PREVTLk5PUk1BTDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBzaGFkZXIgdGhhdCB3aWxsIGJlIHVzZWQgdG8gcmVuZGVyIHRoZSBzcHJpdGUuIFNldCB0byBudWxsIHRvIHJlbW92ZSBhIGN1cnJlbnQgc2hhZGVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5BYnN0cmFjdEZpbHRlcnxQSVhJLlNoYWRlcn1cbiAgICAgKi9cbiAgICB0aGlzLnNoYWRlciA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBBbiBpbnRlcm5hbCBjYWNoZWQgdmFsdWUgb2YgdGhlIHRpbnQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMHhGRkZGRkZcbiAgICAgKi9cbiAgICB0aGlzLmNhY2hlZFRpbnQgPSAweEZGRkZGRjtcblxuICAgIC8vIGNhbGwgdGV4dHVyZSBzZXR0ZXJcbiAgICB0aGlzLnRleHR1cmUgPSB0ZXh0dXJlIHx8IFRleHR1cmUuRU1QVFk7XG4gICAgdGhpcy50ZXh0dXJlRGlydHkgPSB0cnVlXG4gICAgdGhpcy52ZXJ0ZXhEaXJ0eSA9IHRydWU7XG4gICAgdGhpcy52ZXJ0ZXhEYXRhID0gbmV3IEZsb2F0MzJBcnJheSg4KTtcbn1cblxuLy8gY29uc3RydWN0b3JcblNwcml0ZS5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKENvbnRhaW5lci5wcm90b3R5cGUpO1xuU3ByaXRlLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFNwcml0ZTtcbm1vZHVsZS5leHBvcnRzID0gU3ByaXRlO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhTcHJpdGUucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogVGhlIHdpZHRoIG9mIHRoZSBzcHJpdGUsIHNldHRpbmcgdGhpcyB3aWxsIGFjdHVhbGx5IG1vZGlmeSB0aGUgc2NhbGUgdG8gYWNoaWV2ZSB0aGUgdmFsdWUgc2V0XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuU3ByaXRlI1xuICAgICAqL1xuICAgIHdpZHRoOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIE1hdGguYWJzKHRoaXMuc2NhbGUueCkgKiB0aGlzLnRleHR1cmUuX2ZyYW1lLndpZHRoO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdmFyIHNpZ24gPSB1dGlscy5zaWduKHRoaXMuc2NhbGUueCkgfHwgMTtcbiAgICAgICAgICAgIHRoaXMuc2NhbGUueCA9IHNpZ24gKiB2YWx1ZSAvIHRoaXMudGV4dHVyZS5fZnJhbWUud2lkdGg7XG4gICAgICAgICAgICB0aGlzLl93aWR0aCA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFRoZSBoZWlnaHQgb2YgdGhlIHNwcml0ZSwgc2V0dGluZyB0aGlzIHdpbGwgYWN0dWFsbHkgbW9kaWZ5IHRoZSBzY2FsZSB0byBhY2hpZXZlIHRoZSB2YWx1ZSBzZXRcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5TcHJpdGUjXG4gICAgICovXG4gICAgaGVpZ2h0OiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuICBNYXRoLmFicyh0aGlzLnNjYWxlLnkpICogdGhpcy50ZXh0dXJlLl9mcmFtZS5oZWlnaHQ7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB2YXIgc2lnbiA9IHV0aWxzLnNpZ24odGhpcy5zY2FsZS55KSB8fCAxO1xuICAgICAgICAgICAgdGhpcy5zY2FsZS55ID0gc2lnbiAqIHZhbHVlIC8gdGhpcy50ZXh0dXJlLl9mcmFtZS5oZWlnaHQ7XG4gICAgICAgICAgICB0aGlzLl9oZWlnaHQgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBUaGUgdGV4dHVyZSB0aGF0IHRoZSBzcHJpdGUgaXMgdXNpbmdcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuVGV4dHVyZX1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5TcHJpdGUjXG4gICAgICovXG4gICAgdGV4dHVyZToge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiAgdGhpcy5fdGV4dHVyZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGlmICh0aGlzLl90ZXh0dXJlID09PSB2YWx1ZSlcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuX3RleHR1cmUgPSB2YWx1ZTtcbiAgICAgICAgICAgIHRoaXMuY2FjaGVkVGludCA9IDB4RkZGRkZGO1xuXG4gICAgICAgICAgICB0aGlzLnRleHR1cmVEaXJ0eSA9IHRydWU7XG5cbiAgICAgICAgICAgIGlmICh2YWx1ZSlcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAvLyB3YWl0IGZvciB0aGUgdGV4dHVyZSB0byBsb2FkXG4gICAgICAgICAgICAgICAgaWYgKHZhbHVlLmJhc2VUZXh0dXJlLmhhc0xvYWRlZClcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX29uVGV4dHVyZVVwZGF0ZSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICB2YWx1ZS5vbmNlKCd1cGRhdGUnLCB0aGlzLl9vblRleHR1cmVVcGRhdGUsIHRoaXMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn0pO1xuXG4vKipcbiAqIFdoZW4gdGhlIHRleHR1cmUgaXMgdXBkYXRlZCwgdGhpcyBldmVudCB3aWxsIGZpcmUgdG8gdXBkYXRlIHRoZSBzY2FsZSBhbmQgZnJhbWVcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5TcHJpdGUucHJvdG90eXBlLl9vblRleHR1cmVVcGRhdGUgPSBmdW5jdGlvbiAoKVxue1xuICAgIHRoaXMudGV4dHVyZURpcnR5ID0gdHJ1ZTtcblxuICAgIC8vIHNvIGlmIF93aWR0aCBpcyAwIHRoZW4gd2lkdGggd2FzIG5vdCBzZXQuLlxuICAgIGlmICh0aGlzLl93aWR0aClcbiAgICB7XG4gICAgICAgIHRoaXMuc2NhbGUueCA9IHV0aWxzLnNpZ24odGhpcy5zY2FsZS54KSAqIHRoaXMuX3dpZHRoIC8gdGhpcy50ZXh0dXJlLmZyYW1lLndpZHRoO1xuICAgIH1cblxuICAgIGlmICh0aGlzLl9oZWlnaHQpXG4gICAge1xuICAgICAgICB0aGlzLnNjYWxlLnkgPSB1dGlscy5zaWduKHRoaXMuc2NhbGUueSkgKiB0aGlzLl9oZWlnaHQgLyB0aGlzLnRleHR1cmUuZnJhbWUuaGVpZ2h0O1xuICAgIH1cbn07XG5cblNwcml0ZS5wcm90b3R5cGUuY2FjbHVsYXRlVmVydGljZXMgPSBmdW5jdGlvbiAoKVxue1xuXG4gICAgdmFyIHRleHR1cmUgPSB0aGlzLl90ZXh0dXJlLFxuICAgICAgICB3dCA9IHRoaXMud29ybGRUcmFuc2Zvcm0sXG4gICAgICAgIGEgPSB3dC5hLCBiID0gd3QuYiwgYyA9IHd0LmMsIGQgPSB3dC5kLCB0eCA9IHd0LnR4LCB0eSA9IHd0LnR5LFxuICAgICAgICB2ZXJ0ZXhEYXRhID0gdGhpcy52ZXJ0ZXhEYXRhLFxuICAgICAgICB3MCwgdzEsIGgwLCBoMSxcbiAgICAgICAgdHJpbSA9IHRleHR1cmUudHJpbTtcbiAgICBcbiAgICBpZiAodHJpbSlcbiAgICB7XG4gICAgICAgIC8vIGlmIHRoZSBzcHJpdGUgaXMgdHJpbW1lZCBhbmQgaXMgbm90IGEgdGlsaW5nc3ByaXRlIHRoZW4gd2UgbmVlZCB0byBhZGQgdGhlIGV4dHJhIHNwYWNlIGJlZm9yZSB0cmFuc2Zvcm1pbmcgdGhlIHNwcml0ZSBjb29yZHMuLlxuICAgICAgICB3MSA9IHRyaW0ueCAtIHRoaXMuYW5jaG9yLnggKiB0cmltLndpZHRoO1xuICAgICAgICB3MCA9IHcxICsgdGV4dHVyZS5jcm9wLndpZHRoO1xuXG4gICAgICAgIGgxID0gdHJpbS55IC0gdGhpcy5hbmNob3IueSAqIHRyaW0uaGVpZ2h0O1xuICAgICAgICBoMCA9IGgxICsgdGV4dHVyZS5jcm9wLmhlaWdodDtcblxuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICB3MCA9ICh0ZXh0dXJlLl9mcmFtZS53aWR0aCApICogKDEtdGhpcy5hbmNob3IueCk7XG4gICAgICAgIHcxID0gKHRleHR1cmUuX2ZyYW1lLndpZHRoICkgKiAtdGhpcy5hbmNob3IueDtcblxuICAgICAgICBoMCA9IHRleHR1cmUuX2ZyYW1lLmhlaWdodCAqICgxLXRoaXMuYW5jaG9yLnkpO1xuICAgICAgICBoMSA9IHRleHR1cmUuX2ZyYW1lLmhlaWdodCAqIC10aGlzLmFuY2hvci55O1xuICAgIH1cblxuICAgIC8vIHh5XG4gICAgdmVydGV4RGF0YVswXSA9IGEgKiB3MSArIGMgKiBoMSArIHR4O1xuICAgIHZlcnRleERhdGFbMV0gPSBkICogaDEgKyBiICogdzEgKyB0eTtcblxuICAgIC8vIHh5XG4gICAgdmVydGV4RGF0YVsyXSA9IGEgKiB3MCArIGMgKiBoMSArIHR4O1xuICAgIHZlcnRleERhdGFbM10gPSBkICogaDEgKyBiICogdzAgKyB0eTtcblxuICAgICAvLyB4eVxuICAgIHZlcnRleERhdGFbNF0gPSBhICogdzAgKyBjICogaDAgKyB0eDtcbiAgICB2ZXJ0ZXhEYXRhWzVdID0gZCAqIGgwICsgYiAqIHcwICsgdHk7XG5cbiAgICAvLyB4eVxuICAgIHZlcnRleERhdGFbNl0gPSBhICogdzEgKyBjICogaDAgKyB0eDtcbiAgICB2ZXJ0ZXhEYXRhWzddID0gZCAqIGgwICsgYiAqIHcxICsgdHk7XG5cblxufVxuXG4vKipcbipcbiogUmVuZGVycyB0aGUgb2JqZWN0IHVzaW5nIHRoZSBXZWJHTCByZW5kZXJlclxuKlxuKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcn1cbiogQHByaXZhdGVcbiovXG5TcHJpdGUucHJvdG90eXBlLl9yZW5kZXJXZWJHTCA9IGZ1bmN0aW9uIChyZW5kZXJlcilcbntcbiAgICBpZih0aGlzLnRleHR1cmVEaXJ0eSlcbiAgICB7XG4gICAgICAgIHRoaXMudGV4dHVyZURpcnR5ID0gZmFsc2U7XG5cbiAgICAgICAgdGhpcy5fb25UZXh0dXJlVXBkYXRlKCk7XG4gICAgICAgIFxuICAgICAgICB0aGlzLnZlcnRleERpcnR5ID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBpZih0aGlzLnZlcnRleERpcnR5KVxuICAgIHtcbiAgICAgICAgdGhpcy52ZXJ0ZXhEaXJ0eSA9IGZhbHNlO1xuXG4gICAgICAgIC8vIHNldCB0aGUgdmVydGV4IGRhdGFcbiAgICAgICAgdGhpcy5jYWNsdWxhdGVWZXJ0aWNlcygpO1xuXG4gICAgfVxuICAgIFxuICAgIHJlbmRlcmVyLnNldE9iamVjdFJlbmRlcmVyKHJlbmRlcmVyLnBsdWdpbnMuc3ByaXRlKTtcbiAgICByZW5kZXJlci5wbHVnaW5zLnNwcml0ZS5yZW5kZXIodGhpcyk7XG59O1xuXG4vKipcbiAqIFJldHVybnMgdGhlIGJvdW5kcyBvZiB0aGUgU3ByaXRlIGFzIGEgcmVjdGFuZ2xlLiBUaGUgYm91bmRzIGNhbGN1bGF0aW9uIHRha2VzIHRoZSB3b3JsZFRyYW5zZm9ybSBpbnRvIGFjY291bnQuXG4gKlxuICogQHBhcmFtIG1hdHJpeCB7UElYSS5NYXRyaXh9IHRoZSB0cmFuc2Zvcm1hdGlvbiBtYXRyaXggb2YgdGhlIHNwcml0ZVxuICogQHJldHVybiB7UElYSS5SZWN0YW5nbGV9IHRoZSBmcmFtaW5nIHJlY3RhbmdsZVxuICovXG5TcHJpdGUucHJvdG90eXBlLmdldEJvdW5kcyA9IGZ1bmN0aW9uIChtYXRyaXgpXG57XG4gICAgaWYoIXRoaXMuX2N1cnJlbnRCb3VuZHMpXG4gICAge1xuICAgICAgICBpZih0aGlzLnZlcnRleERpcnR5KVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnZlcnRleERpcnR5ID0gZmFsc2U7XG5cbiAgICAgICAgICAgIC8vIHNldCB0aGUgdmVydGV4IGRhdGFcbiAgICAgICAgICAgIHRoaXMuY2FjbHVsYXRlVmVydGljZXMoKTtcblxuICAgICAgICB9XG5cbiAgICAgICAgdmFyIG1pblgsXG4gICAgICAgICAgICBtYXhYLFxuICAgICAgICAgICAgbWluWSxcbiAgICAgICAgICAgIG1heFksXG4gICAgICAgICAgICB2ZXJ0ZXhEYXRhID0gdGhpcy52ZXJ0ZXhEYXRhO1xuXG4gICAgICAgIHZhciB4MSA9IHZlcnRleERhdGFbMF1cbiAgICAgICAgdmFyIHkxID0gdmVydGV4RGF0YVsxXVxuXG4gICAgICAgIHZhciB4MiA9IHZlcnRleERhdGFbMl1cbiAgICAgICAgdmFyIHkyID0gdmVydGV4RGF0YVszXVxuXG4gICAgICAgIHZhciB4MyA9IHZlcnRleERhdGFbNF1cbiAgICAgICAgdmFyIHkzID0gdmVydGV4RGF0YVs1XVxuXG4gICAgICAgIHZhciB4NCA9IHZlcnRleERhdGFbNl1cbiAgICAgICAgdmFyIHk0ID0gdmVydGV4RGF0YVs3XVxuXG4gICAgICAgIG1pblggPSB4MTtcbiAgICAgICAgbWluWCA9IHgyIDwgbWluWCA/IHgyIDogbWluWDtcbiAgICAgICAgbWluWCA9IHgzIDwgbWluWCA/IHgzIDogbWluWDtcbiAgICAgICAgbWluWCA9IHg0IDwgbWluWCA/IHg0IDogbWluWDtcblxuICAgICAgICBtaW5ZID0geTE7XG4gICAgICAgIG1pblkgPSB5MiA8IG1pblkgPyB5MiA6IG1pblk7XG4gICAgICAgIG1pblkgPSB5MyA8IG1pblkgPyB5MyA6IG1pblk7XG4gICAgICAgIG1pblkgPSB5NCA8IG1pblkgPyB5NCA6IG1pblk7XG5cbiAgICAgICAgbWF4WCA9IHgxO1xuICAgICAgICBtYXhYID0geDIgPiBtYXhYID8geDIgOiBtYXhYO1xuICAgICAgICBtYXhYID0geDMgPiBtYXhYID8geDMgOiBtYXhYO1xuICAgICAgICBtYXhYID0geDQgPiBtYXhYID8geDQgOiBtYXhYO1xuXG4gICAgICAgIG1heFkgPSB5MTtcbiAgICAgICAgbWF4WSA9IHkyID4gbWF4WSA/IHkyIDogbWF4WTtcbiAgICAgICAgbWF4WSA9IHkzID4gbWF4WSA/IHkzIDogbWF4WTtcbiAgICAgICAgbWF4WSA9IHk0ID4gbWF4WSA/IHk0IDogbWF4WTtcblxuICAgICAgICAvLyBjaGVjayBmb3IgY2hpbGRyZW5cbiAgICAgICAgaWYodGhpcy5jaGlsZHJlbi5sZW5ndGgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHZhciBjaGlsZEJvdW5kcyA9IHRoaXMuY29udGFpbmVyR2V0Qm91bmRzKCk7XG5cbiAgICAgICAgICAgIHcwID0gY2hpbGRCb3VuZHMueDtcbiAgICAgICAgICAgIHcxID0gY2hpbGRCb3VuZHMueCArIGNoaWxkQm91bmRzLndpZHRoO1xuICAgICAgICAgICAgaDAgPSBjaGlsZEJvdW5kcy55O1xuICAgICAgICAgICAgaDEgPSBjaGlsZEJvdW5kcy55ICsgY2hpbGRCb3VuZHMuaGVpZ2h0O1xuXG4gICAgICAgICAgICBtaW5YID0gKG1pblggPCB3MCkgPyBtaW5YIDogdzA7XG4gICAgICAgICAgICBtaW5ZID0gKG1pblkgPCBoMCkgPyBtaW5ZIDogaDA7XG5cbiAgICAgICAgICAgIG1heFggPSAobWF4WCA+IHcxKSA/IG1heFggOiB3MTtcbiAgICAgICAgICAgIG1heFkgPSAobWF4WSA+IGgxKSA/IG1heFkgOiBoMTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBib3VuZHMgPSB0aGlzLl9ib3VuZHM7XG5cbiAgICAgICAgYm91bmRzLnggPSBtaW5YO1xuICAgICAgICBib3VuZHMud2lkdGggPSBtYXhYIC0gbWluWDtcblxuICAgICAgICBib3VuZHMueSA9IG1pblk7XG4gICAgICAgIGJvdW5kcy5oZWlnaHQgPSBtYXhZIC0gbWluWTtcblxuICAgICAgICAvLyBzdG9yZSBhIHJlZmVyZW5jZSBzbyB0aGF0IGlmIHRoaXMgZnVuY3Rpb24gZ2V0cyBjYWxsZWQgYWdhaW4gaW4gdGhlIHJlbmRlciBjeWNsZSB3ZSBkbyBub3QgaGF2ZSB0byByZWNhbGN1bGF0ZVxuICAgICAgICB0aGlzLl9jdXJyZW50Qm91bmRzID0gYm91bmRzO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLl9jdXJyZW50Qm91bmRzO1xufTtcblxuLyoqXG4gKiBHZXRzIHRoZSBsb2NhbCBib3VuZHMgb2YgdGhlIHNwcml0ZSBvYmplY3QuXG4gKlxuICovXG5TcHJpdGUucHJvdG90eXBlLmdldExvY2FsQm91bmRzID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLl9ib3VuZHMueCA9IC10aGlzLl90ZXh0dXJlLl9mcmFtZS53aWR0aCAqIHRoaXMuYW5jaG9yLng7XG4gICAgdGhpcy5fYm91bmRzLnkgPSAtdGhpcy5fdGV4dHVyZS5fZnJhbWUuaGVpZ2h0ICogdGhpcy5hbmNob3IueTtcbiAgICB0aGlzLl9ib3VuZHMud2lkdGggPSB0aGlzLl90ZXh0dXJlLl9mcmFtZS53aWR0aDtcbiAgICB0aGlzLl9ib3VuZHMuaGVpZ2h0ID0gdGhpcy5fdGV4dHVyZS5fZnJhbWUuaGVpZ2h0O1xuICAgIHJldHVybiB0aGlzLl9ib3VuZHM7XG59O1xuXG4vKipcbiogVGVzdHMgaWYgYSBwb2ludCBpcyBpbnNpZGUgdGhpcyBzcHJpdGVcbipcbiogQHBhcmFtIHBvaW50IHtQSVhJLlBvaW50fSB0aGUgcG9pbnQgdG8gdGVzdFxuKiBAcmV0dXJuIHtib29sZWFufSB0aGUgcmVzdWx0IG9mIHRoZSB0ZXN0XG4qL1xuU3ByaXRlLnByb3RvdHlwZS5jb250YWluc1BvaW50ID0gZnVuY3Rpb24oIHBvaW50IClcbntcbiAgICB0aGlzLndvcmxkVHJhbnNmb3JtLmFwcGx5SW52ZXJzZShwb2ludCwgIHRlbXBQb2ludCk7XG5cbiAgICB2YXIgd2lkdGggPSB0aGlzLl90ZXh0dXJlLl9mcmFtZS53aWR0aDtcbiAgICB2YXIgaGVpZ2h0ID0gdGhpcy5fdGV4dHVyZS5fZnJhbWUuaGVpZ2h0O1xuICAgIHZhciB4MSA9IC13aWR0aCAqIHRoaXMuYW5jaG9yLng7XG4gICAgdmFyIHkxO1xuXG4gICAgaWYgKCB0ZW1wUG9pbnQueCA+IHgxICYmIHRlbXBQb2ludC54IDwgeDEgKyB3aWR0aCApXG4gICAge1xuICAgICAgICB5MSA9IC1oZWlnaHQgKiB0aGlzLmFuY2hvci55O1xuXG4gICAgICAgIGlmICggdGVtcFBvaW50LnkgPiB5MSAmJiB0ZW1wUG9pbnQueSA8IHkxICsgaGVpZ2h0IClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2U7XG59O1xuXG4vKipcbiogUmVuZGVycyB0aGUgb2JqZWN0IHVzaW5nIHRoZSBDYW52YXMgcmVuZGVyZXJcbipcbiogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLkNhbnZhc1JlbmRlcmVyfSBUaGUgcmVuZGVyZXJcbiogQHByaXZhdGVcbiovXG5TcHJpdGUucHJvdG90eXBlLl9yZW5kZXJDYW52YXMgPSBmdW5jdGlvbiAocmVuZGVyZXIpXG57XG4gICAgaWYgKHRoaXMudGV4dHVyZS5jcm9wLndpZHRoIDw9IDAgfHwgdGhpcy50ZXh0dXJlLmNyb3AuaGVpZ2h0IDw9IDApXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFyIGNvbXBvc2l0ZU9wZXJhdGlvbiA9IHJlbmRlcmVyLmJsZW5kTW9kZXNbdGhpcy5ibGVuZE1vZGVdO1xuICAgIGlmIChjb21wb3NpdGVPcGVyYXRpb24gIT09IHJlbmRlcmVyLmNvbnRleHQuZ2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uKVxuICAgIHtcbiAgICAgICAgcmVuZGVyZXIuY29udGV4dC5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb24gPSBjb21wb3NpdGVPcGVyYXRpb247XG4gICAgfVxuXG4gICAgLy8gIElnbm9yZSBudWxsIHNvdXJjZXNcbiAgICBpZiAodGhpcy50ZXh0dXJlLnZhbGlkKVxuICAgIHtcbiAgICAgICAgdmFyIHRleHR1cmUgPSB0aGlzLl90ZXh0dXJlLFxuICAgICAgICAgICAgd3QgPSB0aGlzLndvcmxkVHJhbnNmb3JtLFxuICAgICAgICAgICAgZHgsXG4gICAgICAgICAgICBkeSxcbiAgICAgICAgICAgIHdpZHRoLFxuICAgICAgICAgICAgaGVpZ2h0O1xuXG4gICAgICAgIHJlbmRlcmVyLmNvbnRleHQuZ2xvYmFsQWxwaGEgPSB0aGlzLndvcmxkQWxwaGE7XG5cbiAgICAgICAgLy8gSWYgc21vb3RoaW5nRW5hYmxlZCBpcyBzdXBwb3J0ZWQgYW5kIHdlIG5lZWQgdG8gY2hhbmdlIHRoZSBzbW9vdGhpbmcgcHJvcGVydHkgZm9yIHRoaXMgdGV4dHVyZVxuICAgICAgICB2YXIgc21vb3RoaW5nRW5hYmxlZCA9IHRleHR1cmUuYmFzZVRleHR1cmUuc2NhbGVNb2RlID09PSBDT05TVC5TQ0FMRV9NT0RFUy5MSU5FQVI7XG4gICAgICAgIGlmIChyZW5kZXJlci5zbW9vdGhQcm9wZXJ0eSAmJiByZW5kZXJlci5jb250ZXh0W3JlbmRlcmVyLnNtb290aFByb3BlcnR5XSAhPT0gc21vb3RoaW5nRW5hYmxlZClcbiAgICAgICAge1xuICAgICAgICAgICAgcmVuZGVyZXIuY29udGV4dFtyZW5kZXJlci5zbW9vdGhQcm9wZXJ0eV0gPSBzbW9vdGhpbmdFbmFibGVkO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gSWYgdGhlIHRleHR1cmUgaXMgdHJpbW1lZCB3ZSBvZmZzZXQgYnkgdGhlIHRyaW0geC95LCBvdGhlcndpc2Ugd2UgdXNlIHRoZSBmcmFtZSBkaW1lbnNpb25zXG5cbiAgICAgICAgaWYodGV4dHVyZS5yb3RhdGUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHdpZHRoID0gdGV4dHVyZS5jcm9wLmhlaWdodDtcbiAgICAgICAgICAgIGhlaWdodCA9IHRleHR1cmUuY3JvcC53aWR0aDtcblxuICAgICAgICAgICAgZHggPSAodGV4dHVyZS50cmltKSA/IHRleHR1cmUudHJpbS55IC0gdGhpcy5hbmNob3IueSAqIHRleHR1cmUudHJpbS5oZWlnaHQgOiB0aGlzLmFuY2hvci55ICogLXRleHR1cmUuX2ZyYW1lLmhlaWdodDtcbiAgICAgICAgICAgIGR5ID0gKHRleHR1cmUudHJpbSkgPyB0ZXh0dXJlLnRyaW0ueCAtIHRoaXMuYW5jaG9yLnggKiB0ZXh0dXJlLnRyaW0ud2lkdGggOiB0aGlzLmFuY2hvci54ICogLXRleHR1cmUuX2ZyYW1lLndpZHRoO1xuICAgICAgIFxuICAgICAgICAgICAgZHggKz0gd2lkdGg7XG5cbiAgICAgICAgICAgIHd0LnR4ID0gZHkgKiB3dC5hICsgZHggKiB3dC5jICsgd3QudHg7XG4gICAgICAgICAgICB3dC50eSA9IGR5ICogd3QuYiArIGR4ICogd3QuZCArIHd0LnR5O1xuXG4gICAgICAgICAgICB2YXIgdGVtcCA9IHd0LmE7XG4gICAgICAgICAgICB3dC5hICA9IC13dC5jO1xuICAgICAgICAgICAgd3QuYyAgPSAgdGVtcDtcblxuICAgICAgICAgICAgdGVtcCA9IHd0LmI7XG4gICAgICAgICAgICB3dC5iICA9IC13dC5kO1xuICAgICAgICAgICAgd3QuZCAgPSAgdGVtcDtcblxuICAgICAgICAgICAgLy8gdGhlIGFuY2hvciBoYXMgYWxyZWFkeSBiZWVuIGFwcGxpZWQgYWJvdmUsIHNvIGxldHMgc2V0IGl0IHRvIHplcm9cbiAgICAgICAgICAgIGR4ID0gMDtcbiAgICAgICAgICAgIGR5ID0gMDtcblxuICAgICAgICB9XG4gICAgICAgIGVsc2VcbiAgICAgICAge1xuICAgICAgICAgICAgd2lkdGggPSB0ZXh0dXJlLmNyb3Aud2lkdGg7XG4gICAgICAgICAgICBoZWlnaHQgPSB0ZXh0dXJlLmNyb3AuaGVpZ2h0O1xuXG4gICAgICAgICAgICBkeCA9ICh0ZXh0dXJlLnRyaW0pID8gdGV4dHVyZS50cmltLnggLSB0aGlzLmFuY2hvci54ICogdGV4dHVyZS50cmltLndpZHRoIDogdGhpcy5hbmNob3IueCAqIC10ZXh0dXJlLl9mcmFtZS53aWR0aDtcbiAgICAgICAgICAgIGR5ID0gKHRleHR1cmUudHJpbSkgPyB0ZXh0dXJlLnRyaW0ueSAtIHRoaXMuYW5jaG9yLnkgKiB0ZXh0dXJlLnRyaW0uaGVpZ2h0IDogdGhpcy5hbmNob3IueSAqIC10ZXh0dXJlLl9mcmFtZS5oZWlnaHQ7XG4gICAgICAgIH1cblxuXG5cbiAgICAgICAgLy8gQWxsb3cgZm9yIHBpeGVsIHJvdW5kaW5nXG4gICAgICAgIGlmIChyZW5kZXJlci5yb3VuZFBpeGVscylcbiAgICAgICAge1xuICAgICAgICAgICAgcmVuZGVyZXIuY29udGV4dC5zZXRUcmFuc2Zvcm0oXG4gICAgICAgICAgICAgICAgd3QuYSxcbiAgICAgICAgICAgICAgICB3dC5iLFxuICAgICAgICAgICAgICAgIHd0LmMsXG4gICAgICAgICAgICAgICAgd3QuZCxcbiAgICAgICAgICAgICAgICAod3QudHggKiByZW5kZXJlci5yZXNvbHV0aW9uKSB8IDAsXG4gICAgICAgICAgICAgICAgKHd0LnR5ICogcmVuZGVyZXIucmVzb2x1dGlvbikgfCAwXG4gICAgICAgICAgICApO1xuXG4gICAgICAgICAgICBkeCA9IGR4IHwgMDtcbiAgICAgICAgICAgIGR5ID0gZHkgfCAwO1xuICAgICAgICB9XG4gICAgICAgIGVsc2VcbiAgICAgICAge1xuXG4gICAgICAgICAgICByZW5kZXJlci5jb250ZXh0LnNldFRyYW5zZm9ybShcbiAgICAgICAgICAgICAgICB3dC5hLFxuICAgICAgICAgICAgICAgIHd0LmIsXG4gICAgICAgICAgICAgICAgd3QuYyxcbiAgICAgICAgICAgICAgICB3dC5kLFxuICAgICAgICAgICAgICAgIHd0LnR4ICogcmVuZGVyZXIucmVzb2x1dGlvbixcbiAgICAgICAgICAgICAgICB3dC50eSAqIHJlbmRlcmVyLnJlc29sdXRpb25cbiAgICAgICAgICAgICk7XG5cblxuICAgICAgICB9XG5cbiAgICAgICAgdmFyIHJlc29sdXRpb24gPSB0ZXh0dXJlLmJhc2VUZXh0dXJlLnJlc29sdXRpb247XG5cbiAgICAgICAgaWYgKHRoaXMudGludCAhPT0gMHhGRkZGRkYpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmNhY2hlZFRpbnQgIT09IHRoaXMudGludClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB0aGlzLmNhY2hlZFRpbnQgPSB0aGlzLnRpbnQ7XG5cbiAgICAgICAgICAgICAgICAvLyBUT0RPIGNsZWFuIHVwIGNhY2hpbmcgLSBob3cgdG8gY2xlYW4gdXAgdGhlIGNhY2hlcz9cbiAgICAgICAgICAgICAgICB0aGlzLnRpbnRlZFRleHR1cmUgPSBDYW52YXNUaW50ZXIuZ2V0VGludGVkVGV4dHVyZSh0aGlzLCB0aGlzLnRpbnQpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZW5kZXJlci5jb250ZXh0LmRyYXdJbWFnZShcbiAgICAgICAgICAgICAgICB0aGlzLnRpbnRlZFRleHR1cmUsXG4gICAgICAgICAgICAgICAgMCxcbiAgICAgICAgICAgICAgICAwLFxuICAgICAgICAgICAgICAgIHdpZHRoICogcmVzb2x1dGlvbixcbiAgICAgICAgICAgICAgICBoZWlnaHQgKiByZXNvbHV0aW9uLFxuICAgICAgICAgICAgICAgIGR4ICogcmVuZGVyZXIucmVzb2x1dGlvbixcbiAgICAgICAgICAgICAgICBkeSAqIHJlbmRlcmVyLnJlc29sdXRpb24sXG4gICAgICAgICAgICAgICAgd2lkdGggKiByZW5kZXJlci5yZXNvbHV0aW9uLFxuICAgICAgICAgICAgICAgIGhlaWdodCAqIHJlbmRlcmVyLnJlc29sdXRpb25cbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgICByZW5kZXJlci5jb250ZXh0LmRyYXdJbWFnZShcbiAgICAgICAgICAgICAgICB0ZXh0dXJlLmJhc2VUZXh0dXJlLnNvdXJjZSxcbiAgICAgICAgICAgICAgICB0ZXh0dXJlLmNyb3AueCAqIHJlc29sdXRpb24sXG4gICAgICAgICAgICAgICAgdGV4dHVyZS5jcm9wLnkgKiByZXNvbHV0aW9uLFxuICAgICAgICAgICAgICAgIHdpZHRoICogcmVzb2x1dGlvbixcbiAgICAgICAgICAgICAgICBoZWlnaHQgKiByZXNvbHV0aW9uLFxuICAgICAgICAgICAgICAgIGR4ICAqIHJlbmRlcmVyLnJlc29sdXRpb24sXG4gICAgICAgICAgICAgICAgZHkgICogcmVuZGVyZXIucmVzb2x1dGlvbixcbiAgICAgICAgICAgICAgICB3aWR0aCAqIHJlbmRlcmVyLnJlc29sdXRpb24sXG4gICAgICAgICAgICAgICAgaGVpZ2h0ICogcmVuZGVyZXIucmVzb2x1dGlvblxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgIH1cbn07XG5cbi8qKlxuICogRGVzdHJveXMgdGhpcyBzcHJpdGUgYW5kIG9wdGlvbmFsbHkgaXRzIHRleHR1cmVcbiAqXG4gKiBAcGFyYW0gW2Rlc3Ryb3lUZXh0dXJlPWZhbHNlXSB7Ym9vbGVhbn0gU2hvdWxkIGl0IGRlc3Ryb3kgdGhlIGN1cnJlbnQgdGV4dHVyZSBvZiB0aGUgc3ByaXRlIGFzIHdlbGxcbiAqIEBwYXJhbSBbZGVzdHJveUJhc2VUZXh0dXJlPWZhbHNlXSB7Ym9vbGVhbn0gU2hvdWxkIGl0IGRlc3Ryb3kgdGhlIGJhc2UgdGV4dHVyZSBvZiB0aGUgc3ByaXRlIGFzIHdlbGxcbiAqL1xuU3ByaXRlLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKGRlc3Ryb3lUZXh0dXJlLCBkZXN0cm95QmFzZVRleHR1cmUpXG57XG4gICAgQ29udGFpbmVyLnByb3RvdHlwZS5kZXN0cm95LmNhbGwodGhpcyk7XG5cbiAgICB0aGlzLmFuY2hvciA9IG51bGw7XG5cbiAgICBpZiAoZGVzdHJveVRleHR1cmUpXG4gICAge1xuICAgICAgICB0aGlzLl90ZXh0dXJlLmRlc3Ryb3koZGVzdHJveUJhc2VUZXh0dXJlKTtcbiAgICB9XG5cbiAgICB0aGlzLl90ZXh0dXJlID0gbnVsbDtcbiAgICB0aGlzLnNoYWRlciA9IG51bGw7XG59O1xuXG4vLyBzb21lIGhlbHBlciBmdW5jdGlvbnMuLlxuXG4vKipcbiAqIEhlbHBlciBmdW5jdGlvbiB0aGF0IGNyZWF0ZXMgYSBzcHJpdGUgdGhhdCB3aWxsIGNvbnRhaW4gYSB0ZXh0dXJlIGZyb20gdGhlIFRleHR1cmVDYWNoZSBiYXNlZCBvbiB0aGUgZnJhbWVJZFxuICogVGhlIGZyYW1lIGlkcyBhcmUgY3JlYXRlZCB3aGVuIGEgVGV4dHVyZSBwYWNrZXIgZmlsZSBoYXMgYmVlbiBsb2FkZWRcbiAqXG4gKiBAc3RhdGljXG4gKiBAcGFyYW0gZnJhbWVJZCB7c3RyaW5nfSBUaGUgZnJhbWUgSWQgb2YgdGhlIHRleHR1cmUgaW4gdGhlIGNhY2hlXG4gKiBAcGFyYW0gW2Nyb3Nzb3JpZ2luPShhdXRvKV0ge2Jvb2xlYW59IGlmIHlvdSB3YW50IHRvIHNwZWNpZnkgdGhlIGNyb3NzLW9yaWdpbiBwYXJhbWV0ZXJcbiAqIEBwYXJhbSBbc2NhbGVNb2RlPVBJWEkuU0NBTEVfTU9ERVMuREVGQVVMVF0ge251bWJlcn0gaWYgeW91IHdhbnQgdG8gc3BlY2lmeSB0aGUgc2NhbGUgbW9kZSwgc2VlIHtAbGluayBQSVhJLlNDQUxFX01PREVTfSBmb3IgcG9zc2libGUgdmFsdWVzXG4gKiBAcmV0dXJuIHtQSVhJLlNwcml0ZX0gQSBuZXcgU3ByaXRlIHVzaW5nIGEgdGV4dHVyZSBmcm9tIHRoZSB0ZXh0dXJlIGNhY2hlIG1hdGNoaW5nIHRoZSBmcmFtZUlkXG4gKi9cblNwcml0ZS5mcm9tRnJhbWUgPSBmdW5jdGlvbiAoZnJhbWVJZClcbntcbiAgICB2YXIgdGV4dHVyZSA9IHV0aWxzLlRleHR1cmVDYWNoZVtmcmFtZUlkXTtcblxuICAgIGlmICghdGV4dHVyZSlcbiAgICB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignVGhlIGZyYW1lSWQgXCInICsgZnJhbWVJZCArICdcIiBkb2VzIG5vdCBleGlzdCBpbiB0aGUgdGV4dHVyZSBjYWNoZScpO1xuICAgIH1cblxuICAgIHJldHVybiBuZXcgU3ByaXRlKHRleHR1cmUpO1xufTtcblxuLyoqXG4gKiBIZWxwZXIgZnVuY3Rpb24gdGhhdCBjcmVhdGVzIGEgc3ByaXRlIHRoYXQgd2lsbCBjb250YWluIGEgdGV4dHVyZSBiYXNlZCBvbiBhbiBpbWFnZSB1cmxcbiAqIElmIHRoZSBpbWFnZSBpcyBub3QgaW4gdGhlIHRleHR1cmUgY2FjaGUgaXQgd2lsbCBiZSBsb2FkZWRcbiAqXG4gKiBAc3RhdGljXG4gKiBAcGFyYW0gaW1hZ2VJZCB7c3RyaW5nfSBUaGUgaW1hZ2UgdXJsIG9mIHRoZSB0ZXh0dXJlXG4gKiBAcmV0dXJuIHtQSVhJLlNwcml0ZX0gQSBuZXcgU3ByaXRlIHVzaW5nIGEgdGV4dHVyZSBmcm9tIHRoZSB0ZXh0dXJlIGNhY2hlIG1hdGNoaW5nIHRoZSBpbWFnZSBpZFxuICovXG5TcHJpdGUuZnJvbUltYWdlID0gZnVuY3Rpb24gKGltYWdlSWQsIGNyb3Nzb3JpZ2luLCBzY2FsZU1vZGUpXG57XG4gICAgcmV0dXJuIG5ldyBTcHJpdGUoVGV4dHVyZS5mcm9tSW1hZ2UoaW1hZ2VJZCwgY3Jvc3NvcmlnaW4sIHNjYWxlTW9kZSkpO1xufTtcbiIsInZhciBPYmplY3RSZW5kZXJlciA9IHJlcXVpcmUoJy4uLy4uL3JlbmRlcmVycy93ZWJnbC91dGlscy9PYmplY3RSZW5kZXJlcicpLFxuICAgIFdlYkdMUmVuZGVyZXIgPSByZXF1aXJlKCcuLi8uLi9yZW5kZXJlcnMvd2ViZ2wvV2ViR0xSZW5kZXJlcicpLFxuICAgIFRleHR1cmVTaGFkZXIgPSByZXF1aXJlKCcuLi8uLi9yZW5kZXJlcnMvd2ViZ2wvc2hhZGVycy9fVGV4dHVyZVNoYWRlcicpLFxuICAgIGNyZWF0ZUluZGljZXNGb3JRdWFkcyA9IHJlcXVpcmUoJy4uLy4uL3V0aWxzL2NyZWF0ZUluZGljZXNGb3JRdWFkcycpLFxuICAgIGdlbmVyYXRlTXVsdGlUZXh0dXJlU2hhZGVyID0gcmVxdWlyZSgnLi9nZW5lcmF0ZU11bHRpVGV4dHVyZVNoYWRlcicpLFxuICAgIENPTlNUID0gcmVxdWlyZSgnLi4vLi4vY29uc3QnKSxcbiAgICBnbENvcmUgPSByZXF1aXJlKCdwaXhpLWdsLWNvcmUnKTtcblxuLyoqXG4gKiBAYXV0aG9yIE1hdCBHcm92ZXNcbiAqXG4gKiBCaWcgdGhhbmtzIHRvIHRoZSB2ZXJ5IGNsZXZlciBNYXR0IERlc0xhdXJpZXJzIDxtYXR0ZGVzbD4gaHR0cHM6Ly9naXRodWIuY29tL21hdHRkZXNsL1xuICogZm9yIGNyZWF0aW5nIHRoZSBvcmlnaW5hbCBwaXhpIHZlcnNpb24hXG4gKiBBbHNvIGEgdGhhbmtzIHRvIGh0dHBzOi8vZ2l0aHViLmNvbS9iY2hldmFsaWVyIGZvciB0d2Vha2luZyB0aGUgdGludCBhbmQgYWxwaGEgc28gdGhhdCB0aGV5IG5vdyBzaGFyZSA0IGJ5dGVzIG9uIHRoZSB2ZXJ0ZXggYnVmZmVyXG4gKlxuICogSGVhdmlseSBpbnNwaXJlZCBieSBMaWJHRFgncyBTcHJpdGVSZW5kZXJlcjpcbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS9saWJnZHgvbGliZ2R4L2Jsb2IvbWFzdGVyL2dkeC9zcmMvY29tL2JhZGxvZ2ljL2dkeC9ncmFwaGljcy9nMmQvU3ByaXRlUmVuZGVyZXIuamF2YVxuICovXG5cbi8qKlxuICogUmVuZGVyZXIgZGVkaWNhdGVkIHRvIGRyYXdpbmcgYW5kIGJhdGNoaW5nIHNwcml0ZXMuXG4gKlxuICogQGNsYXNzXG4gKiBAcHJpdmF0ZVxuICogQG1lbWJlcm9mIFBJWElcbiAqIEBleHRlbmRzIFBJWEkuT2JqZWN0UmVuZGVyZXJcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5XZWJHTFJlbmRlcmVyfSBUaGUgcmVuZGVyZXIgdGhpcyBzcHJpdGUgYmF0Y2ggd29ya3MgZm9yLlxuICovXG5mdW5jdGlvbiBTcHJpdGVSZW5kZXJlcihyZW5kZXJlcilcbntcbiAgICBPYmplY3RSZW5kZXJlci5jYWxsKHRoaXMsIHJlbmRlcmVyKTtcblxuICAgIC8qKlxuICAgICAqIE51bWJlciBvZiB2YWx1ZXMgc2VudCBpbiB0aGUgdmVydGV4IGJ1ZmZlci5cbiAgICAgKiBwb3NpdGlvblgsIHBvc2l0aW9uWSwgY29sb3JSLCBjb2xvckcsIGNvbG9yQiA9IDVcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLnZlcnRTaXplID0gNTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBzaXplIG9mIHRoZSB2ZXJ0ZXggaW5mb3JtYXRpb24gaW4gYnl0ZXMuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy52ZXJ0Qnl0ZVNpemUgPSB0aGlzLnZlcnRTaXplICogNDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBudW1iZXIgb2YgaW1hZ2VzIGluIHRoZSBTcHJpdGVCYXRjaCBiZWZvcmUgaXQgZmx1c2hlcy5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLnNpemUgPSBDT05TVC5TUFJJVEVfQkFUQ0hfU0laRTsgLy8gMjAwMCBpcyBhIG5pY2UgYmFsYW5jZSBiZXR3ZWVuIG1vYmlsZSAvIGRlc2t0b3BcblxuICAgIC8vIHRoZSB0b3RhbCBudW1iZXIgb2YgYnl0ZXMgaW4gb3VyIGJhdGNoXG4gICAgdmFyIG51bVZlcnRzID0gKHRoaXMuc2l6ZSAqIDQpICogdGhpcy52ZXJ0Qnl0ZVNpemU7XG5cbiAgICAvLyB0aGUgdG90YWwgbnVtYmVyIG9mIGluZGljZXMgaW4gb3VyIGJhdGNoLCB0aGVyZSBhcmUgNiBwb2ludHMgcGVyIHF1YWQuXG4gICAgdmFyIG51bUluZGljZXMgPSB0aGlzLnNpemUgKiA2O1xuXG4gICAgLyoqXG4gICAgICogSG9sZHMgdGhlIHZlcnRleCBkYXRhIHRoYXQgd2lsbCBiZSBzZW50IHRvIHRoZSB2ZXJ0ZXggc2hhZGVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7QXJyYXlCdWZmZXJ9XG4gICAgICovXG4gICAgdGhpcy52ZXJ0aWNlcyA9IG5ldyBBcnJheUJ1ZmZlcihudW1WZXJ0cyk7XG5cbiAgICAvKipcbiAgICAgKiBWaWV3IG9uIHRoZSB2ZXJ0aWNlcyBhcyBhIEZsb2F0MzJBcnJheSBmb3IgcG9zaXRpb25zXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtGbG9hdDMyQXJyYXl9XG4gICAgICovXG4gICAgdGhpcy5wb3NpdGlvbnMgPSBuZXcgRmxvYXQzMkFycmF5KHRoaXMudmVydGljZXMpO1xuICAgIFxuICAgIC8qKlxuICAgICAqIFZpZXcgb24gdGhlIHZlcnRpY2VzIGFzIGEgVWludDMyQXJyYXkgZm9yIHV2c1xuICAgICAqXG4gICAgICogQG1lbWJlciB7RmxvYXQzMkFycmF5fVxuICAgICAqL1xuICAgIHRoaXMudXZzID0gbmV3IFVpbnQzMkFycmF5KHRoaXMudmVydGljZXMpO1xuXG4gICAgLyoqXG4gICAgICogVmlldyBvbiB0aGUgdmVydGljZXMgYXMgYSBVaW50MzJBcnJheSBmb3IgY29sb3JzXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtVaW50MzJBcnJheX1cbiAgICAgKi9cbiAgICB0aGlzLmNvbG9ycyA9IG5ldyBVaW50MzJBcnJheSh0aGlzLnZlcnRpY2VzKTtcblxuICAgIC8qKlxuICAgICAqIEhvbGRzIHRoZSBpbmRpY2VzIG9mIHRoZSBnZW9tZXRyeSAocXVhZHMpIHRvIGRyYXdcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1VpbnQxNkFycmF5fVxuICAgICAqL1xuICAgIHRoaXMuaW5kaWNlcyA9IGNyZWF0ZUluZGljZXNGb3JRdWFkcyh0aGlzLnNpemUpXG5cbiAgICAvKipcbiAgICAgKiBUaGUgZGVmYXVsdCBzaGFkZXIgdGhhdCBpcyB1c2VkIGlmIGEgc3ByaXRlIGRvZXNuJ3QgaGF2ZSBhIG1vcmUgc3BlY2lmaWMgb25lLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5TaGFkZXJ9XG4gICAgICovXG4gICAgdGhpcy5zaGFkZXIgPSBudWxsO1xuXG4gICAgdGhpcy50ZXh0dXJlQ291bnQgPSAwO1xuICAgIHRoaXMuY3VycmVudEluZGV4ID0gMDtcbiAgXG4gICAgdGhpcy5ncm91cENvdW50ID0gMDtcbiAgICB0aGlzLmdyb3VwcyA9IFtdO1xuICAgIFxuICAgIC8vVE9ETyAtIDMwMCBpcyBhIGJpdCBtYWdpYywgZmlndXJlIG91dCBhIG5pY2VyIGFtb3VudCFcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuc2l6ZTsgaSsrKSBcbiAgICB7XG4gICAgICAgIHRoaXMuZ3JvdXBzW2ldID0ge3RleHR1cmVzOltdLCB0ZXh0dXJlQ291bnQ6MCwgaWRzOltdLCBzaXplOjAsIHN0YXJ0OjAsIGJsZW5kOjB9OyBcbiAgICB9O1xuICAgIFxuICAgIHRoaXMuY3VycmVudEdyb3VwID0gdGhpcy5ncm91cHNbdGhpcy5ncm91cENvdW50KytdO1xuXG4gICAgdGhpcy5jdXJyZW50VGV4dHVyZSA9IG51bGw7ICAgIFxufVxuXG5cblNwcml0ZVJlbmRlcmVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoT2JqZWN0UmVuZGVyZXIucHJvdG90eXBlKTtcblNwcml0ZVJlbmRlcmVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFNwcml0ZVJlbmRlcmVyO1xubW9kdWxlLmV4cG9ydHMgPSBTcHJpdGVSZW5kZXJlcjtcblxuV2ViR0xSZW5kZXJlci5yZWdpc3RlclBsdWdpbignc3ByaXRlJywgU3ByaXRlUmVuZGVyZXIpO1xuXG4vKipcbiAqIFNldHMgdXAgdGhlIHJlbmRlcmVyIGNvbnRleHQgYW5kIG5lY2Vzc2FyeSBidWZmZXJzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0gZ2wge1dlYkdMUmVuZGVyaW5nQ29udGV4dH0gdGhlIGN1cnJlbnQgV2ViR0wgZHJhd2luZyBjb250ZXh0XG4gKi9cblNwcml0ZVJlbmRlcmVyLnByb3RvdHlwZS5vbkNvbnRleHRDaGFuZ2UgPSBmdW5jdGlvbiAoKVxue1xuICAgIHZhciBnbCA9IHRoaXMucmVuZGVyZXIuZ2w7XG5cbiAgICB0aGlzLk1BWF9URVhUVUVTID0gZ2wuZ2V0UGFyYW1ldGVyKGdsLk1BWF9URVhUVVJFX0lNQUdFX1VOSVRTKTtcblxuICAgIHRoaXMuX3NoYWRlciA9IGdlbmVyYXRlTXVsdGlUZXh0dXJlU2hhZGVyKGdsLCB0aGlzLk1BWF9URVhUVUVTKS8vbmV3IFRleHR1cmVTaGFkZXIoZ2wpO1xuXG4gICAgLy8gc2V0dXAgZGVmYXVsdCBzaGFkZXJcbiAgICB0aGlzLnNoYWRlciA9IHRoaXMucmVuZGVyZXIuc2hhZGVyTWFuYWdlci5kZWZhdWx0U2hhZGVyO1xuXG4gICAgLy8gY3JlYXRlIGEgY291cGxlIG9mIGJ1ZmZlcnNcbiAgICB0aGlzLnZlcnRleEJ1ZmZlciA9IGdsQ29yZS5HTEJ1ZmZlci5jcmVhdGVWZXJ0ZXhCdWZmZXIoZ2wsIG51bGwsIGdsLkRZTkFNSUNfRFJBVyk7XG4gICAgdGhpcy5pbmRleEJ1ZmZlciA9IGdsQ29yZS5HTEJ1ZmZlci5jcmVhdGVJbmRleEJ1ZmZlcihnbCwgdGhpcy5pbmRpY2VzLCBnbC5TVEFUSUNfRFJBVyk7XG5cbiAgICAvLyBidWlsZCB0aGUgdmFvIG9iamVjdCB0aGF0IHdpbGwgcmVuZGVyLi5cbiAgICB0aGlzLnZhbyA9IG5ldyBnbENvcmUuVmVydGV4QXJyYXlPYmplY3QoZ2wpO1xuXG4gICAgdGhpcy52YW8uYWRkSW5kZXgodGhpcy5pbmRleEJ1ZmZlcik7XG4gICAgdGhpcy52YW8uYWRkQXR0cmlidXRlKHRoaXMudmVydGV4QnVmZmVyLCB0aGlzLl9zaGFkZXIuYXR0cmlidXRlcy5hVmVydGV4UG9zaXRpb24sIGdsLkZMT0FULCBmYWxzZSwgdGhpcy52ZXJ0Qnl0ZVNpemUsIDApO1xuICAgIHRoaXMudmFvLmFkZEF0dHJpYnV0ZSh0aGlzLnZlcnRleEJ1ZmZlciwgdGhpcy5fc2hhZGVyLmF0dHJpYnV0ZXMuYVRleHR1cmVDb29yZCwgZ2wuVU5TSUdORURfU0hPUlQsIHRydWUsIHRoaXMudmVydEJ5dGVTaXplLCAyICogNCk7XG4gICAgdGhpcy52YW8uYWRkQXR0cmlidXRlKHRoaXMudmVydGV4QnVmZmVyLCB0aGlzLl9zaGFkZXIuYXR0cmlidXRlcy5hQ29sb3IsIGdsLlVOU0lHTkVEX0JZVEUsIHRydWUsIHRoaXMudmVydEJ5dGVTaXplLCAzICogNCk7XG4gICAgdGhpcy52YW8uYWRkQXR0cmlidXRlKHRoaXMudmVydGV4QnVmZmVyLCB0aGlzLl9zaGFkZXIuYXR0cmlidXRlcy5hVGV4dHVyZUlkLCBnbC5GTE9BVCwgZmFsc2UsIHRoaXMudmVydEJ5dGVTaXplLCA0ICogNCk7XG5cbiAgICB0aGlzLmN1cnJlbnRCbGVuZE1vZGUgPSA5OTk5OTtcbn07XG5cbi8qKlxuICogUmVuZGVycyB0aGUgc3ByaXRlIG9iamVjdC5cbiAqXG4gKiBAcGFyYW0gc3ByaXRlIHtQSVhJLlNwcml0ZX0gdGhlIHNwcml0ZSB0byByZW5kZXIgd2hlbiB1c2luZyB0aGlzIHNwcml0ZWJhdGNoXG4gKi9cblNwcml0ZVJlbmRlcmVyLnByb3RvdHlwZS5yZW5kZXIgPSBmdW5jdGlvbiAoc3ByaXRlKVxue1xuICAgIC8vVE9ETyBzZXQgYmxlbmQgbW9kZXMuLlxuICAgIC8vIGNoZWNrIHRleHR1cmUuLlxuICAgIGlmICh0aGlzLmN1cnJlbnRJbmRleCA+PSB0aGlzLnNpemUpXG4gICAge1xuICAgICAgICB0aGlzLmZsdXNoKCk7XG4gICAgfVxuXG4gIFxuICAgIC8vIGdldCB0aGUgdXZzIGZvciB0aGUgdGV4dHVyZVxuICAgXG5cbiAgICAvLyBpZiB0aGUgdXZzIGhhdmUgbm90IHVwZGF0ZWQgdGhlbiBubyBwb2ludCByZW5kZXJpbmcganVzdCB5ZXQhXG4gICAgaWYgKCFzcHJpdGUudGV4dHVyZS5fdXZzKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgICAvLyBwdXNoIGEgdGV4dHVyZS5cbiAgICAvLyBpbmNyZW1lbnQgdGhlIGJhdGNoc2l6ZVxuICAgIHZhciBuZXh0VGV4dHVyZSA9ICBzcHJpdGUudGV4dHVyZS5iYXNlVGV4dHVyZTtcbiAgICB2YXIgY3VycmVudEdyb3VwID0gdGhpcy5jdXJyZW50R3JvdXA7XG4gICAgdmFyIGk7XG5cbiAgICBpZih0aGlzLmN1cnJlbnRUZXh0dXJlICE9PSBuZXh0VGV4dHVyZSlcbiAgICB7XG4gICAgICAgIHRoaXMuY3VycmVudFRleHR1cmUgPSBuZXh0VGV4dHVyZTtcbiAgICAgICAgXG4gICAgICAgIGlmKCFuZXh0VGV4dHVyZS5fZW5hYmxlZClcbiAgICAgICAge1xuICAgICAgICAgICAgbmV4dFRleHR1cmUuX2VuYWJsZWQgPSB0cnVlO1xuICAgICAgICAgICAgbmV4dFRleHR1cmUuX2lkID0gdGhpcy50ZXh0dXJlQ291bnQ7XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIGlmKHRoaXMudGV4dHVyZUNvdW50ID09PSB0aGlzLk1BWF9URVhUVUVTKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGZvciAoIGkgPSAwOyBpIDwgY3VycmVudEdyb3VwLnRleHR1cmVDb3VudDsgaSsrKSBcbiAgICAgICAgICAgICAgICB7ICAgICBcbiAgICAgICAgICAgICAgICAgICAgY3VycmVudEdyb3VwLnRleHR1cmVzW2ldLl9lbmFibGVkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgIHRoaXMudGV4dHVyZUNvdW50ID0gMDtcblxuICAgICAgICAgICAgICAgIGN1cnJlbnRHcm91cC5zaXplID0gdGhpcy5jdXJyZW50SW5kZXggLSBjdXJyZW50R3JvdXAuc3RhcnQ7XG4gICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICBjdXJyZW50R3JvdXAgPSB0aGlzLmN1cnJlbnRHcm91cCA9IHRoaXMuZ3JvdXBzW3RoaXMuZ3JvdXBDb3VudCsrXTtcbiAgICAgICAgICAgICAgICBjdXJyZW50R3JvdXAudGV4dHVyZUNvdW50ID0gMDtcbiAgICAgICAgICAgICAgICBjdXJyZW50R3JvdXAuc3RhcnQgPSB0aGlzLmN1cnJlbnRJbmRleDtcbiAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY3VycmVudEdyb3VwLnRleHR1cmVzW2N1cnJlbnRHcm91cC50ZXh0dXJlQ291bnQrK10gPSBuZXh0VGV4dHVyZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMudGV4dHVyZUNvdW50Kys7XG4gICAgfVxuXG4gICAgLy8gVE9ETyB0cmltPz9cbiAgICB2YXIgaW5kZXggPSB0aGlzLmN1cnJlbnRJbmRleCAqIHRoaXMudmVydEJ5dGVTaXplO1xuXG4gICAgdGhpcy5jdXJyZW50SW5kZXgrKztcblxuICAgIC8vIHVwbG9hZCB0aGUgc3ByaXRlIGVsZW1ldG5zLi4uXG4gICAgLy8gdGhleSBoYXZlIGFsbCByZWFkeSBiZWVuIGNhbGN1bGF0ZWQgc28gd2UganVzdCBuZWVkIHRvIHB1c2ggdGhlbSBpbnRvIHRoZSBidWZmZXIuXG4gICAgdmFyIGNvbG9ycyA9IHRoaXMuY29sb3JzO1xuICAgIHZhciBwb3NpdGlvbnMgPSB0aGlzLnBvc2l0aW9ucztcbiAgICB2YXIgdmVydGV4RGF0YSA9IHNwcml0ZS52ZXJ0ZXhEYXRhXG4gICAgdmFyIHRpbnQgPSAoc3ByaXRlLnRpbnQgPj4gMTYpICsgKHNwcml0ZS50aW50ICYgMHhmZjAwKSArICgoc3ByaXRlLnRpbnQgJiAweGZmKSA8PCAxNikgKyAoc3ByaXRlLndvcmxkQWxwaGEgKiAyNTUgPDwgMjQpO1xuICAgIHZhciB1dnMgPSBzcHJpdGUudGV4dHVyZS5fdXZzLnV2c191aW50MzI7XG4gICAgLy94eVxuICAgIHBvc2l0aW9uc1tpbmRleCsrXSA9IHZlcnRleERhdGFbMF07XG4gICAgcG9zaXRpb25zW2luZGV4KytdID0gdmVydGV4RGF0YVsxXTtcbiAgICB0aGlzLnV2c1tpbmRleCsrXSA9IHV2c1swXTtcbiAgICBjb2xvcnNbaW5kZXgrK10gPSB0aW50O1xuICAgIHBvc2l0aW9uc1tpbmRleCsrXSA9IG5leHRUZXh0dXJlLl9pZDsgXG4gICAgXG4gICAgLy8geHlcbiAgICBwb3NpdGlvbnNbaW5kZXgrK10gPSB2ZXJ0ZXhEYXRhWzJdO1xuICAgIHBvc2l0aW9uc1tpbmRleCsrXSA9IHZlcnRleERhdGFbM107XG4gICAgdGhpcy51dnNbaW5kZXgrK10gPSB1dnNbMV07XG4gICAgY29sb3JzW2luZGV4KytdID0gdGludDtcbiAgICBwb3NpdGlvbnNbaW5kZXgrK10gPSBuZXh0VGV4dHVyZS5faWQ7XG5cbiAgICAgLy8geHlcbiAgICBwb3NpdGlvbnNbaW5kZXgrK10gPSB2ZXJ0ZXhEYXRhWzRdO1xuICAgIHBvc2l0aW9uc1tpbmRleCsrXSA9IHZlcnRleERhdGFbNV07XG4gICAgdGhpcy51dnNbaW5kZXgrK10gPSB1dnNbMl07XG4gICAgY29sb3JzW2luZGV4KytdID0gdGludDtcbiAgICBwb3NpdGlvbnNbaW5kZXgrK10gPSBuZXh0VGV4dHVyZS5faWQ7XG5cbiAgICAvLyB4eVxuICAgIHBvc2l0aW9uc1tpbmRleCsrXSA9IHZlcnRleERhdGFbNl07XG4gICAgcG9zaXRpb25zW2luZGV4KytdID0gdmVydGV4RGF0YVs3XTtcbiAgICB0aGlzLnV2c1tpbmRleCsrXSA9IHV2c1szXTtcbiAgICBjb2xvcnNbaW5kZXgrK10gPSB0aW50O1xuICAgIHBvc2l0aW9uc1tpbmRleCsrXSA9IG5leHRUZXh0dXJlLl9pZDtcbn07XG5cbi8qKlxuICogUmVuZGVycyB0aGUgY29udGVudCBhbmQgZW1wdGllcyB0aGUgY3VycmVudCBiYXRjaC5cbiAqXG4gKi9cblNwcml0ZVJlbmRlcmVyLnByb3RvdHlwZS5mbHVzaCA9IGZ1bmN0aW9uICgpXG57XG4gICAgaWYgKHRoaXMuY3VycmVudEluZGV4ID09PSAwKXJldHVybjtcblxuICAgIHZhciBnbCA9IHRoaXMucmVuZGVyZXIuZ2w7XG5cblxuICAgIHRoaXMuY3VycmVudEdyb3VwLnNpemUgPSB0aGlzLmN1cnJlbnRJbmRleCAtIHRoaXMuY3VycmVudEdyb3VwLnN0YXJ0O1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5jdXJyZW50R3JvdXAudGV4dHVyZUNvdW50OyBpKyspIFxuICAgIHsgICAgIFxuICAgICAgICB0aGlzLmN1cnJlbnRHcm91cC50ZXh0dXJlc1tpXS5fZW5hYmxlZCA9IGZhbHNlO1xuICAgIH07XG4gICBcbiAgICAvLyBkbyBzb21lIHNtYXJ0IGFycmF5IHN0dWZmLi5cbiAgICAvLyBkb3VibGUgc2l6ZSBzbyB3ZSBkb250IGFsd2F5IHN1YmFycmF5IHRoZSBlbGVtZW50cy4uXG4gICAgLy8gdXBsb2FkIHRoZSB2ZXJ0cyB0byB0aGUgYnVmZmVyXG4gICAgaWYgKHRoaXMuY3VycmVudEJhdGNoU2l6ZSA+ICggdGhpcy5zaXplICogMC41ICkgKVxuICAgIHtcbiAgICAgICAgdGhpcy52ZXJ0ZXhCdWZmZXIudXBsb2FkKHRoaXMudmVydGljZXMsIDAsIHRydWUpO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICAvLyBvIGsgLi4gc3ViIGFycmF5IGlzIFNMT1c+P1xuICAgICAgICB2YXIgdmlldyA9IHRoaXMucG9zaXRpb25zLnN1YmFycmF5KDAsIHRoaXMuY3VycmVudEluZGV4ICogdGhpcy52ZXJ0Qnl0ZVNpemUpO1xuICAgICAgICB0aGlzLnZlcnRleEJ1ZmZlci51cGxvYWQodmlldywgMCwgdHJ1ZSk7XG4gICAgfVxuXG4gICAgLy8gYmluZCBzaGFkZXIuLlxuICAgIHRoaXMucmVuZGVyZXIuYmluZFNoYWRlcih0aGlzLl9zaGFkZXIpO1xuICAgIHRoaXMucmVuZGVyZXIuYmxlbmRNb2RlTWFuYWdlci5zZXRCbGVuZE1vZGUoIDAgKTtcblxuICAgIC8vLyByZW5kZXIgdGhlIGdyb3Vwcy4uXG4gICAgZm9yIChpID0gMDsgaSA8IHRoaXMuZ3JvdXBDb3VudDsgaSsrKSB7XG4gICAgICAgIFxuICAgICAgICB2YXIgZ3JvdXAgPSB0aGlzLmdyb3Vwc1tpXTtcblxuICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IGdyb3VwLnRleHR1cmVDb3VudDsgaisrKSB7XG4gICAgICAgICAgICB0aGlzLnJlbmRlcmVyLmJpbmRUZXh0dXJlKGdyb3VwLnRleHR1cmVzW2pdLCBqKTtcbiAgICAgICAgfTtcblxuICAgICAgICBnbC5kcmF3RWxlbWVudHMoZ2wuVFJJQU5HTEVTLCBncm91cC5zaXplICogNiwgZ2wuVU5TSUdORURfU0hPUlQsIGdyb3VwLnN0YXJ0ICogNiAqIDIpO1xuICAgIH07XG5cbiAgICAvLyByZXNldCBlbGVtZW50cyBmb3IgdGhlIG5leHQgZmx1c2hcbiAgICB0aGlzLmN1cnJlbnRUZXh0dXJlID0gbnVsbDtcbiAgICB0aGlzLmN1cnJlbnRJbmRleCA9IDA7XG4gICAgdGhpcy50ZXh0dXJlQ291bnQgPSAwO1xuICAgIHRoaXMuZ3JvdXBDb3VudCA9IDA7XG4gICAgXG4gICAgdGhpcy5jdXJyZW50R3JvdXAgPSB0aGlzLmdyb3Vwc1t0aGlzLmdyb3VwQ291bnQrK107XG4gICAgdGhpcy5jdXJyZW50R3JvdXAudGV4dHVyZUNvdW50ID0gMDtcbn07XG5cbi8qKlxuICogU3RhcnRzIGEgbmV3IHNwcml0ZSBiYXRjaC5cbiAqXG4gKi9cblNwcml0ZVJlbmRlcmVyLnByb3RvdHlwZS5zdGFydCA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy52YW8uYmluZCgpO1xufTtcblxuU3ByaXRlUmVuZGVyZXIucHJvdG90eXBlLnN0b3AgPSBmdW5jdGlvbiAoKVxue1xuICAgIHRoaXMuZmx1c2goKTtcbiAgICB0aGlzLnZhby51bmJpbmQoKTtcbn07XG4vKipcbiAqIERlc3Ryb3lzIHRoZSBTcHJpdGVCYXRjaC5cbiAqXG4gKi9cblNwcml0ZVJlbmRlcmVyLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLnZlcnRleEJ1ZmZlci5kZXN0cm95KCk7XG4gICAgdGhpcy5pbmRleEJ1ZmZlci5kZXN0cm95KCk7XG5cbiAgICBPYmplY3RSZW5kZXJlci5wcm90b3R5cGUuZGVzdHJveS5jYWxsKHRoaXMpO1xuXG4gICAgdGhpcy5zaGFkZXIuZGVzdHJveSgpO1xuXG4gICAgdGhpcy5yZW5kZXJlciA9IG51bGw7XG5cbiAgICB0aGlzLnZlcnRpY2VzID0gbnVsbDtcbiAgICB0aGlzLnBvc2l0aW9ucyA9IG51bGw7XG4gICAgdGhpcy5jb2xvcnMgPSBudWxsO1xuICAgIHRoaXMuaW5kaWNlcyA9IG51bGw7XG5cbiAgICB0aGlzLnZlcnRleEJ1ZmZlciA9IG51bGw7XG4gICAgdGhpcy5pbmRleEJ1ZmZlciA9IG51bGw7XG5cbiAgICB0aGlzLnNwcml0ZXMgPSBudWxsO1xuICAgIHRoaXMuc2hhZGVyID0gbnVsbDtcbn07XG4iLCJ2YXIgU2hhZGVyID0gcmVxdWlyZSgncGl4aS1nbC1jb3JlJykuR0xTaGFkZXI7XG5cblxuZnVuY3Rpb24gZ2VuZXJhdGVNdWx0aVRleHR1cmVTaGFkZXIoZ2wsIG1heFRleHR1cmVzKVxue1xuICAgIHZhciB2ZXJ0ZXhTcmMgPSBcInByZWNpc2lvbiBsb3dwIGZsb2F0O1xcbmF0dHJpYnV0ZSB2ZWMyIGFWZXJ0ZXhQb3NpdGlvbjtcXG5hdHRyaWJ1dGUgdmVjMiBhVGV4dHVyZUNvb3JkO1xcbmF0dHJpYnV0ZSB2ZWM0IGFDb2xvcjtcXG5hdHRyaWJ1dGUgZmxvYXQgYVRleHR1cmVJZDtcXG5cXG51bmlmb3JtIG1hdDMgcHJvamVjdGlvbk1hdHJpeDtcXG5cXG52YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDtcXG52YXJ5aW5nIHZlYzQgdkNvbG9yO1xcbnZhcnlpbmcgZmxvYXQgdlRleHR1cmVJZDtcXG5cXG52b2lkIG1haW4odm9pZCl7XFxuICAgZ2xfUG9zaXRpb24gPSB2ZWM0KChwcm9qZWN0aW9uTWF0cml4ICogdmVjMyhhVmVydGV4UG9zaXRpb24sIDEuMCkpLnh5LCAwLjAsIDEuMCk7XFxuICAgdlRleHR1cmVDb29yZCA9IGFUZXh0dXJlQ29vcmQ7XFxuICAgdlRleHR1cmVJZCA9IGFUZXh0dXJlSWQ7XFxuICAgdkNvbG9yID0gdmVjNChhQ29sb3IucmdiICogYUNvbG9yLmEsIGFDb2xvci5hKTtcXG59XCI7XG4gICAgdmFyIGZyYWdtZW50U3JjID0gJ3ByZWNpc2lvbiBsb3dwIGZsb2F0O1xcblxcbicgKyBnZW5lcmF0ZVNhbXBsZVNyYyhtYXhUZXh0dXJlcykgKyBcIlxcblxcblwiICsgZnJhZ1RlbXBsYXRlXG5cbiAgICBmcmFnbWVudFNyYyA9IGZyYWdtZW50U3JjLnJlcGxhY2UoL1xcJVxcJS9naSwgJzE2Jyk7XG5cbiAgICB2YXIgc2hhZGVyID0gbmV3IFNoYWRlcihnbCwgdmVydGV4U3JjLCBmcmFnbWVudFNyYyk7XG5cblxuICAgIHZhciBzYW1wbGVWYWx1ZXMgPSBbXTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG1heFRleHR1cmVzOyBpKyspIHtcbiAgICAgICAgc2FtcGxlVmFsdWVzW2ldID0gaTtcbiAgICB9O1xuXG4gICAgc2hhZGVyLmJpbmQoKTtcbiAgICBzaGFkZXIudW5pZm9ybXMudVNhbXBsZXJzID0gc2FtcGxlVmFsdWVzO1xuXG4gICAgcmV0dXJuIHNoYWRlcjtcbn1cblxuZnVuY3Rpb24gZ2VuZXJhdGVTYW1wbGVTcmMobWF4VGV4dHVyZXMpXG57XG4gICAgdmFyIHNyYyA9ICd2ZWM0IGdldFNhbXBsZUZyb21BcnJheShzYW1wbGVyMkQgdGV4dHVyZXNbJSVdLCBpbnQgbmR4LCB2ZWMyIHV2KSB7XFxuXFxudmVjNCBjb2xvcjsnXG5cbiAgICBzcmMgKz0gJ1xcbic7XG4gICAgc3JjICs9ICdcXG4nO1xuICAgIFxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbWF4VGV4dHVyZXM7IGkrKykgXG4gICAge1xuICAgICAgICBpZihpID4gMClzcmMgKz0gJ1xcbmVsc2UgJztcbiAgICAgICAgaWYoaSA8IG1heFRleHR1cmVzLTEpc3JjICs9ICdpZihuZHggPT0gJyArIGkgKyAnKSc7XG4gICAgICAgIHNyYyArPSAnXFxueyc7XG4gICAgICAgIHNyYyArPSAnXFxuXFx0Y29sb3IgPSB0ZXh0dXJlMkQodGV4dHVyZXNbJytpKyddLCB1dik7JztcbiAgICAgICAgc3JjICs9ICdcXG59JztcbiAgICB9O1xuXG4gICAgc3JjICs9ICdcXG4nO1xuICAgIHNyYyArPSAnXFxuJztcbiAgICBzcmMgKz0gJ3JldHVybiBjb2xvcjsnO1xuICAgIHNyYyArPSAnXFxufSc7XG5cbiAgICByZXR1cm4gc3JjO1xufVxuXG52YXIgZnJhZ1RlbXBsYXRlID0gW1xuXG4gICAgJ3ZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkOycsXG4gICAgJ3ZhcnlpbmcgdmVjNCB2Q29sb3I7JyxcbiAgICAndmFyeWluZyBmbG9hdCB2VGV4dHVyZUlkOycsXG4gICAgJ3VuaWZvcm0gc2FtcGxlcjJEIHVTYW1wbGVyc1slJV07JyxcblxuICAgICd2b2lkIG1haW4odm9pZCl7JyxcbiAgICAgICAgJ2dsX0ZyYWdDb2xvciA9IGdldFNhbXBsZUZyb21BcnJheSh1U2FtcGxlcnMsIGludCh2VGV4dHVyZUlkKSwgdlRleHR1cmVDb29yZCkgKiB2Q29sb3I7JyxcbiAgICAnfSdcbl0uam9pbignXFxuJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZ2VuZXJhdGVNdWx0aVRleHR1cmVTaGFkZXI7XG4iLCJ2YXIgU3ByaXRlID0gcmVxdWlyZSgnLi4vc3ByaXRlcy9TcHJpdGUnKSxcbiAgICBUZXh0dXJlID0gcmVxdWlyZSgnLi4vdGV4dHVyZXMvVGV4dHVyZScpLFxuICAgIG1hdGggPSByZXF1aXJlKCcuLi9tYXRoJyksXG4gICAgdXRpbHMgPSByZXF1aXJlKCcuLi91dGlscycpLFxuICAgIENPTlNUID0gcmVxdWlyZSgnLi4vY29uc3QnKTtcblxuLyoqXG4gKiBBIFRleHQgT2JqZWN0IHdpbGwgY3JlYXRlIGEgbGluZSBvciBtdWx0aXBsZSBsaW5lcyBvZiB0ZXh0LiBUbyBzcGxpdCBhIGxpbmUgeW91IGNhbiB1c2UgJ1xcbicgaW4geW91ciB0ZXh0IHN0cmluZyxcbiAqIG9yIGFkZCBhIHdvcmRXcmFwIHByb3BlcnR5IHNldCB0byB0cnVlIGFuZCBhbmQgd29yZFdyYXBXaWR0aCBwcm9wZXJ0eSB3aXRoIGEgdmFsdWUgaW4gdGhlIHN0eWxlIG9iamVjdC5cbiAqXG4gKiBBIFRleHQgY2FuIGJlIGNyZWF0ZWQgZGlyZWN0bHkgZnJvbSBhIHN0cmluZyBhbmQgYSBzdHlsZSBvYmplY3RcbiAqXG4gKiBgYGBqc1xuICogdmFyIHRleHQgPSBuZXcgUElYSS5UZXh0KCdUaGlzIGlzIGEgcGl4aSB0ZXh0Jyx7Zm9udCA6ICcyNHB4IEFyaWFsJywgZmlsbCA6IDB4ZmYxMDEwLCBhbGlnbiA6ICdjZW50ZXInfSk7XG4gKiBgYGBcbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuU3ByaXRlXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIHRleHQge3N0cmluZ30gVGhlIGNvcHkgdGhhdCB5b3Ugd291bGQgbGlrZSB0aGUgdGV4dCB0byBkaXNwbGF5XG4gKiBAcGFyYW0gW3N0eWxlXSB7b2JqZWN0fSBUaGUgc3R5bGUgcGFyYW1ldGVyc1xuICogQHBhcmFtIFtzdHlsZS5mb250XSB7c3RyaW5nfSBkZWZhdWx0ICdib2xkIDIwcHggQXJpYWwnIFRoZSBzdHlsZSBhbmQgc2l6ZSBvZiB0aGUgZm9udFxuICogQHBhcmFtIFtzdHlsZS5maWxsPSdibGFjayddIHtTdHJpbmd8TnVtYmVyfSBBIGNhbnZhcyBmaWxsc3R5bGUgdGhhdCB3aWxsIGJlIHVzZWQgb24gdGhlIHRleHQgZS5nICdyZWQnLCAnIzAwRkYwMCdcbiAqIEBwYXJhbSBbc3R5bGUuYWxpZ249J2xlZnQnXSB7c3RyaW5nfSBBbGlnbm1lbnQgZm9yIG11bHRpbGluZSB0ZXh0ICgnbGVmdCcsICdjZW50ZXInIG9yICdyaWdodCcpLCBkb2VzIG5vdCBhZmZlY3Qgc2luZ2xlIGxpbmUgdGV4dFxuICogQHBhcmFtIFtzdHlsZS5zdHJva2VdIHtTdHJpbmd8TnVtYmVyfSBBIGNhbnZhcyBmaWxsc3R5bGUgdGhhdCB3aWxsIGJlIHVzZWQgb24gdGhlIHRleHQgc3Ryb2tlIGUuZyAnYmx1ZScsICcjRkNGRjAwJ1xuICogQHBhcmFtIFtzdHlsZS5zdHJva2VUaGlja25lc3M9MF0ge251bWJlcn0gQSBudW1iZXIgdGhhdCByZXByZXNlbnRzIHRoZSB0aGlja25lc3Mgb2YgdGhlIHN0cm9rZS4gRGVmYXVsdCBpcyAwIChubyBzdHJva2UpXG4gKiBAcGFyYW0gW3N0eWxlLndvcmRXcmFwPWZhbHNlXSB7Ym9vbGVhbn0gSW5kaWNhdGVzIGlmIHdvcmQgd3JhcCBzaG91bGQgYmUgdXNlZFxuICogQHBhcmFtIFtzdHlsZS53b3JkV3JhcFdpZHRoPTEwMF0ge251bWJlcn0gVGhlIHdpZHRoIGF0IHdoaWNoIHRleHQgd2lsbCB3cmFwLCBpdCBuZWVkcyB3b3JkV3JhcCB0byBiZSBzZXQgdG8gdHJ1ZVxuICogQHBhcmFtIFtzdHlsZS5saW5lSGVpZ2h0XSB7bnVtYmVyfSBUaGUgbGluZSBoZWlnaHQsIGEgbnVtYmVyIHRoYXQgcmVwcmVzZW50cyB0aGUgdmVydGljYWwgc3BhY2UgdGhhdCBhIGxldHRlciB1c2VzXG4gKiBAcGFyYW0gW3N0eWxlLmRyb3BTaGFkb3c9ZmFsc2VdIHtib29sZWFufSBTZXQgYSBkcm9wIHNoYWRvdyBmb3IgdGhlIHRleHRcbiAqIEBwYXJhbSBbc3R5bGUuZHJvcFNoYWRvd0NvbG9yPScjMDAwMDAwJ10ge3N0cmluZ30gQSBmaWxsIHN0eWxlIHRvIGJlIHVzZWQgb24gdGhlIGRyb3BzaGFkb3cgZS5nICdyZWQnLCAnIzAwRkYwMCdcbiAqIEBwYXJhbSBbc3R5bGUuZHJvcFNoYWRvd0FuZ2xlPU1hdGguUEkvNF0ge251bWJlcn0gU2V0IGEgYW5nbGUgb2YgdGhlIGRyb3Agc2hhZG93XG4gKiBAcGFyYW0gW3N0eWxlLmRyb3BTaGFkb3dEaXN0YW5jZT01XSB7bnVtYmVyfSBTZXQgYSBkaXN0YW5jZSBvZiB0aGUgZHJvcCBzaGFkb3dcbiAqIEBwYXJhbSBbc3R5bGUuZHJvcFNoYWRvd0JsdXI9MF0ge251bWJlcn0gU2V0IGEgc2hhZG93IGJsdXIgcmFkaXVzXG4gKiBAcGFyYW0gW3N0eWxlLnBhZGRpbmc9MF0ge251bWJlcn0gT2NjYXNpb25hbGx5IHNvbWUgZm9udHMgYXJlIGNyb3BwZWQgb24gdG9wIG9yIGJvdHRvbS4gQWRkaW5nIHNvbWUgcGFkZGluZyB3aWxsXG4gKiAgICAgIHByZXZlbnQgdGhpcyBmcm9tIGhhcHBlbmluZyBieSBhZGRpbmcgcGFkZGluZyB0byB0aGUgdG9wIGFuZCBib3R0b20gb2YgdGV4dCBoZWlnaHQuXG4gKiBAcGFyYW0gW3N0eWxlLnRleHRCYXNlbGluZT0nYWxwaGFiZXRpYyddIHtzdHJpbmd9IFRoZSBiYXNlbGluZSBvZiB0aGUgdGV4dCB0aGF0IGlzIHJlbmRlcmVkLlxuICogQHBhcmFtIFtzdHlsZS5saW5lSm9pbj0nbWl0ZXInXSB7c3RyaW5nfSBUaGUgbGluZUpvaW4gcHJvcGVydHkgc2V0cyB0aGUgdHlwZSBvZiBjb3JuZXIgY3JlYXRlZCwgaXQgY2FuIHJlc29sdmVcbiAqICAgICAgc3Bpa2VkIHRleHQgaXNzdWVzLiBEZWZhdWx0IGlzICdtaXRlcicgKGNyZWF0ZXMgYSBzaGFycCBjb3JuZXIpLlxuICogQHBhcmFtIFtzdHlsZS5taXRlckxpbWl0PTEwXSB7bnVtYmVyfSBUaGUgbWl0ZXIgbGltaXQgdG8gdXNlIHdoZW4gdXNpbmcgdGhlICdtaXRlcicgbGluZUpvaW4gbW9kZS4gVGhpcyBjYW4gcmVkdWNlXG4gKiAgICAgIG9yIGluY3JlYXNlIHRoZSBzcGlraW5lc3Mgb2YgcmVuZGVyZWQgdGV4dC5cbiAqL1xuZnVuY3Rpb24gVGV4dCh0ZXh0LCBzdHlsZSwgcmVzb2x1dGlvbilcbntcbiAgICAvKipcbiAgICAgKiBUaGUgY2FudmFzIGVsZW1lbnQgdGhhdCBldmVyeXRoaW5nIGlzIGRyYXduIHRvXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtIVE1MQ2FudmFzRWxlbWVudH1cbiAgICAgKi9cbiAgICB0aGlzLmNhbnZhcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NhbnZhcycpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGNhbnZhcyAyZCBjb250ZXh0IHRoYXQgZXZlcnl0aGluZyBpcyBkcmF3biB3aXRoXG4gICAgICogQG1lbWJlciB7SFRNTENhbnZhc0VsZW1lbnR9XG4gICAgICovXG4gICAgdGhpcy5jb250ZXh0ID0gdGhpcy5jYW52YXMuZ2V0Q29udGV4dCgnMmQnKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSByZXNvbHV0aW9uIG9mIHRoZSBjYW52YXMuXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMucmVzb2x1dGlvbiA9IHJlc29sdXRpb24gfHwgQ09OU1QuUkVTT0xVVElPTjtcblxuICAgIC8qKlxuICAgICAqIFByaXZhdGUgdHJhY2tlciBmb3IgdGhlIGN1cnJlbnQgdGV4dC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge3N0cmluZ31cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX3RleHQgPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogUHJpdmF0ZSB0cmFja2VyIGZvciB0aGUgY3VycmVudCBzdHlsZS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge29iamVjdH1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX3N0eWxlID0gbnVsbDtcblxuICAgIHZhciB0ZXh0dXJlID0gVGV4dHVyZS5mcm9tQ2FudmFzKHRoaXMuY2FudmFzKTtcbiAgICB0ZXh0dXJlLnRyaW0gPSBuZXcgbWF0aC5SZWN0YW5nbGUoKTtcbiAgICBTcHJpdGUuY2FsbCh0aGlzLCB0ZXh0dXJlKTtcblxuICAgIHRoaXMudGV4dCA9IHRleHQ7XG4gICAgdGhpcy5zdHlsZSA9IHN0eWxlO1xufVxuXG4vLyBjb25zdHJ1Y3RvclxuVGV4dC5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFNwcml0ZS5wcm90b3R5cGUpO1xuVGV4dC5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBUZXh0O1xubW9kdWxlLmV4cG9ydHMgPSBUZXh0O1xuXG5UZXh0LmZvbnRQcm9wZXJ0aWVzQ2FjaGUgPSB7fTtcblRleHQuZm9udFByb3BlcnRpZXNDYW52YXMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdjYW52YXMnKTtcblRleHQuZm9udFByb3BlcnRpZXNDb250ZXh0ID0gVGV4dC5mb250UHJvcGVydGllc0NhbnZhcy5nZXRDb250ZXh0KCcyZCcpO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhUZXh0LnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFRoZSB3aWR0aCBvZiB0aGUgVGV4dCwgc2V0dGluZyB0aGlzIHdpbGwgYWN0dWFsbHkgbW9kaWZ5IHRoZSBzY2FsZSB0byBhY2hpZXZlIHRoZSB2YWx1ZSBzZXRcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5UZXh0I1xuICAgICAqL1xuICAgIHdpZHRoOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgaWYgKHRoaXMuZGlydHkpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdGhpcy51cGRhdGVUZXh0KCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiB0aGlzLnNjYWxlLnggKiB0aGlzLl90ZXh0dXJlLl9mcmFtZS53aWR0aDtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuc2NhbGUueCA9IHZhbHVlIC8gdGhpcy5fdGV4dHVyZS5fZnJhbWUud2lkdGg7XG4gICAgICAgICAgICB0aGlzLl93aWR0aCA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFRoZSBoZWlnaHQgb2YgdGhlIFRleHQsIHNldHRpbmcgdGhpcyB3aWxsIGFjdHVhbGx5IG1vZGlmeSB0aGUgc2NhbGUgdG8gYWNoaWV2ZSB0aGUgdmFsdWUgc2V0XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuVGV4dCNcbiAgICAgKi9cbiAgICBoZWlnaHQ6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICBpZiAodGhpcy5kaXJ0eSlcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZVRleHQoKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuICB0aGlzLnNjYWxlLnkgKiB0aGlzLl90ZXh0dXJlLl9mcmFtZS5oZWlnaHQ7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnNjYWxlLnkgPSB2YWx1ZSAvIHRoaXMuX3RleHR1cmUuX2ZyYW1lLmhlaWdodDtcbiAgICAgICAgICAgIHRoaXMuX2hlaWdodCA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFNldCB0aGUgc3R5bGUgb2YgdGhlIHRleHRcbiAgICAgKlxuICAgICAqIEBwYXJhbSBbc3R5bGVdIHtvYmplY3R9IFRoZSBzdHlsZSBwYXJhbWV0ZXJzXG4gICAgICogQHBhcmFtIFtzdHlsZS5mb250PSdib2xkIDIwcHQgQXJpYWwnXSB7c3RyaW5nfSBUaGUgc3R5bGUgYW5kIHNpemUgb2YgdGhlIGZvbnRcbiAgICAgKiBAcGFyYW0gW3N0eWxlLmZpbGw9J2JsYWNrJ10ge3N0cmluZ3xudW1iZXJ9IEEgY2FudmFzIGZpbGxzdHlsZSB0aGF0IHdpbGwgYmUgdXNlZCBvbiB0aGUgdGV4dCBlZyAncmVkJywgJyMwMEZGMDAnXG4gICAgICogQHBhcmFtIFtzdHlsZS5hbGlnbj0nbGVmdCddIHtzdHJpbmd9IEFsaWdubWVudCBmb3IgbXVsdGlsaW5lIHRleHQgKCdsZWZ0JywgJ2NlbnRlcicgb3IgJ3JpZ2h0JyksIGRvZXMgbm90IGFmZmVjdCBzaW5nbGUgbGluZSB0ZXh0XG4gICAgICogQHBhcmFtIFtzdHlsZS5zdHJva2U9J2JsYWNrJ10ge3N0cmluZ3xudW1iZXJ9IEEgY2FudmFzIGZpbGxzdHlsZSB0aGF0IHdpbGwgYmUgdXNlZCBvbiB0aGUgdGV4dCBzdHJva2UgZWcgJ2JsdWUnLCAnI0ZDRkYwMCdcbiAgICAgKiBAcGFyYW0gW3N0eWxlLnN0cm9rZVRoaWNrbmVzcz0wXSB7bnVtYmVyfSBBIG51bWJlciB0aGF0IHJlcHJlc2VudHMgdGhlIHRoaWNrbmVzcyBvZiB0aGUgc3Ryb2tlLiBEZWZhdWx0IGlzIDAgKG5vIHN0cm9rZSlcbiAgICAgKiBAcGFyYW0gW3N0eWxlLndvcmRXcmFwPWZhbHNlXSB7Ym9vbGVhbn0gSW5kaWNhdGVzIGlmIHdvcmQgd3JhcCBzaG91bGQgYmUgdXNlZFxuICAgICAqIEBwYXJhbSBbc3R5bGUud29yZFdyYXBXaWR0aD0xMDBdIHtudW1iZXJ9IFRoZSB3aWR0aCBhdCB3aGljaCB0ZXh0IHdpbGwgd3JhcFxuICAgICAqIEBwYXJhbSBbc3R5bGUubGluZUhlaWdodF0ge251bWJlcn0gVGhlIGxpbmUgaGVpZ2h0LCBhIG51bWJlciB0aGF0IHJlcHJlc2VudHMgdGhlIHZlcnRpY2FsIHNwYWNlIHRoYXQgYSBsZXR0ZXIgdXNlc1xuICAgICAqIEBwYXJhbSBbc3R5bGUuZHJvcFNoYWRvdz1mYWxzZV0ge2Jvb2xlYW59IFNldCBhIGRyb3Agc2hhZG93IGZvciB0aGUgdGV4dFxuICAgICAqIEBwYXJhbSBbc3R5bGUuZHJvcFNoYWRvd0NvbG9yPScjMDAwMDAwJ10ge3N0cmluZ3xudW1iZXJ9IEEgZmlsbCBzdHlsZSB0byBiZSB1c2VkIG9uIHRoZSBkcm9wc2hhZG93IGUuZyAncmVkJywgJyMwMEZGMDAnXG4gICAgICogQHBhcmFtIFtzdHlsZS5kcm9wU2hhZG93QW5nbGU9TWF0aC5QSS82XSB7bnVtYmVyfSBTZXQgYSBhbmdsZSBvZiB0aGUgZHJvcCBzaGFkb3dcbiAgICAgKiBAcGFyYW0gW3N0eWxlLmRyb3BTaGFkb3dEaXN0YW5jZT01XSB7bnVtYmVyfSBTZXQgYSBkaXN0YW5jZSBvZiB0aGUgZHJvcCBzaGFkb3dcbiAgICAgKiBAcGFyYW0gW3N0eWxlLmRyb3BTaGFkb3dCbHVyPTBdIHtudW1iZXJ9IFNldCBhIHNoYWRvdyBibHVyIHJhZGl1c1xuICAgICAqIEBwYXJhbSBbc3R5bGUucGFkZGluZz0wXSB7bnVtYmVyfSBPY2Nhc2lvbmFsbHkgc29tZSBmb250cyBhcmUgY3JvcHBlZCBvbiB0b3Agb3IgYm90dG9tLiBBZGRpbmcgc29tZSBwYWRkaW5nIHdpbGxcbiAgICAgKiAgICAgIHByZXZlbnQgdGhpcyBmcm9tIGhhcHBlbmluZyBieSBhZGRpbmcgcGFkZGluZyB0byB0aGUgdG9wIGFuZCBib3R0b20gb2YgdGV4dCBoZWlnaHQuXG4gICAgICogQHBhcmFtIFtzdHlsZS50ZXh0QmFzZWxpbmU9J2FscGhhYmV0aWMnXSB7c3RyaW5nfSBUaGUgYmFzZWxpbmUgb2YgdGhlIHRleHQgdGhhdCBpcyByZW5kZXJlZC5cbiAgICAgKiBAcGFyYW0gW3N0eWxlLmxpbmVKb2luPSdtaXRlciddIHtzdHJpbmd9IFRoZSBsaW5lSm9pbiBwcm9wZXJ0eSBzZXRzIHRoZSB0eXBlIG9mIGNvcm5lciBjcmVhdGVkLCBpdCBjYW4gcmVzb2x2ZVxuICAgICAqICAgICAgc3Bpa2VkIHRleHQgaXNzdWVzLiBEZWZhdWx0IGlzICdtaXRlcicgKGNyZWF0ZXMgYSBzaGFycCBjb3JuZXIpLlxuICAgICAqIEBwYXJhbSBbc3R5bGUubWl0ZXJMaW1pdD0xMF0ge251bWJlcn0gVGhlIG1pdGVyIGxpbWl0IHRvIHVzZSB3aGVuIHVzaW5nIHRoZSAnbWl0ZXInIGxpbmVKb2luIG1vZGUuIFRoaXMgY2FuIHJlZHVjZVxuICAgICAqICAgICAgb3IgaW5jcmVhc2UgdGhlIHNwaWtpbmVzcyBvZiByZW5kZXJlZCB0ZXh0LlxuICAgICAqIEBtZW1iZXJvZiBQSVhJLlRleHQjXG4gICAgICovXG4gICAgc3R5bGU6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fc3R5bGU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHN0eWxlKVxuICAgICAgICB7XG4gICAgICAgICAgICBzdHlsZSA9IHN0eWxlIHx8IHt9O1xuXG4gICAgICAgICAgICBpZiAodHlwZW9mIHN0eWxlLmZpbGwgPT09ICdudW1iZXInKSB7XG4gICAgICAgICAgICAgICAgc3R5bGUuZmlsbCA9IHV0aWxzLmhleDJzdHJpbmcoc3R5bGUuZmlsbCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICh0eXBlb2Ygc3R5bGUuc3Ryb2tlID09PSAnbnVtYmVyJykge1xuICAgICAgICAgICAgICAgIHN0eWxlLnN0cm9rZSA9IHV0aWxzLmhleDJzdHJpbmcoc3R5bGUuc3Ryb2tlKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHR5cGVvZiBzdHlsZS5kcm9wU2hhZG93Q29sb3IgPT09ICdudW1iZXInKSB7XG4gICAgICAgICAgICAgICAgc3R5bGUuZHJvcFNoYWRvd0NvbG9yID0gdXRpbHMuaGV4MnN0cmluZyhzdHlsZS5kcm9wU2hhZG93Q29sb3IpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBzdHlsZS5mb250ID0gc3R5bGUuZm9udCB8fCAnYm9sZCAyMHB0IEFyaWFsJztcbiAgICAgICAgICAgIHN0eWxlLmZpbGwgPSBzdHlsZS5maWxsIHx8ICdibGFjayc7XG4gICAgICAgICAgICBzdHlsZS5hbGlnbiA9IHN0eWxlLmFsaWduIHx8ICdsZWZ0JztcbiAgICAgICAgICAgIHN0eWxlLnN0cm9rZSA9IHN0eWxlLnN0cm9rZSB8fCAnYmxhY2snOyAvL3Byb3ZpZGUgYSBkZWZhdWx0LCBzZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9waXhpanMvcGl4aS5qcy9pc3N1ZXMvMTM2XG4gICAgICAgICAgICBzdHlsZS5zdHJva2VUaGlja25lc3MgPSBzdHlsZS5zdHJva2VUaGlja25lc3MgfHwgMDtcbiAgICAgICAgICAgIHN0eWxlLndvcmRXcmFwID0gc3R5bGUud29yZFdyYXAgfHwgZmFsc2U7XG4gICAgICAgICAgICBzdHlsZS53b3JkV3JhcFdpZHRoID0gc3R5bGUud29yZFdyYXBXaWR0aCB8fCAxMDA7XG5cbiAgICAgICAgICAgIHN0eWxlLmRyb3BTaGFkb3cgPSBzdHlsZS5kcm9wU2hhZG93IHx8IGZhbHNlO1xuICAgICAgICAgICAgc3R5bGUuZHJvcFNoYWRvd0NvbG9yID0gc3R5bGUuZHJvcFNoYWRvd0NvbG9yIHx8ICcjMDAwMDAwJztcbiAgICAgICAgICAgIHN0eWxlLmRyb3BTaGFkb3dBbmdsZSA9IHN0eWxlLmRyb3BTaGFkb3dBbmdsZSAhPT0gdW5kZWZpbmVkID8gc3R5bGUuZHJvcFNoYWRvd0FuZ2xlIDogTWF0aC5QSSAvIDY7XG4gICAgICAgICAgICBzdHlsZS5kcm9wU2hhZG93RGlzdGFuY2UgPSBzdHlsZS5kcm9wU2hhZG93RGlzdGFuY2UgIT09IHVuZGVmaW5lZCA/IHN0eWxlLmRyb3BTaGFkb3dEaXN0YW5jZSA6IDU7XG4gICAgICAgICAgICBzdHlsZS5kcm9wU2hhZG93Qmx1ciA9IHN0eWxlLmRyb3BTaGFkb3dCbHVyICE9PSB1bmRlZmluZWQgPyBzdHlsZS5kcm9wU2hhZG93Qmx1ciA6IDA7IC8vc2hhZG93Qmx1ciBpcyAnMCcgYnkgZGVmYXVsdCBhY2NvcmRpbmcgdG8gSFRNTFxuXG4gICAgICAgICAgICBzdHlsZS5wYWRkaW5nID0gc3R5bGUucGFkZGluZyB8fCAwO1xuXG4gICAgICAgICAgICBzdHlsZS50ZXh0QmFzZWxpbmUgPSBzdHlsZS50ZXh0QmFzZWxpbmUgfHwgJ2FscGhhYmV0aWMnO1xuXG4gICAgICAgICAgICBzdHlsZS5saW5lSm9pbiA9IHN0eWxlLmxpbmVKb2luIHx8ICdtaXRlcic7XG4gICAgICAgICAgICBzdHlsZS5taXRlckxpbWl0ID0gc3R5bGUubWl0ZXJMaW1pdCB8fCAxMDtcblxuICAgICAgICAgICAgdGhpcy5fc3R5bGUgPSBzdHlsZTtcbiAgICAgICAgICAgIHRoaXMuZGlydHkgPSB0cnVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFNldCB0aGUgY29weSBmb3IgdGhlIHRleHQgb2JqZWN0LiBUbyBzcGxpdCBhIGxpbmUgeW91IGNhbiB1c2UgJ1xcbicuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gdGV4dCB7c3RyaW5nfSBUaGUgY29weSB0aGF0IHlvdSB3b3VsZCBsaWtlIHRoZSB0ZXh0IHRvIGRpc3BsYXlcbiAgICAgKiBAbWVtYmVyb2YgUElYSS5UZXh0I1xuICAgICAqL1xuICAgIHRleHQ6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbigpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl90ZXh0O1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh0ZXh0KXtcbiAgICAgICAgICAgIHRleHQgPSB0ZXh0LnRvU3RyaW5nKCkgfHwgJyAnO1xuICAgICAgICAgICAgaWYgKHRoaXMuX3RleHQgPT09IHRleHQpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5fdGV4dCA9IHRleHQ7XG4gICAgICAgICAgICB0aGlzLmRpcnR5ID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuXG4vKipcbiAqIFJlbmRlcnMgdGV4dCBhbmQgdXBkYXRlcyBpdCB3aGVuIG5lZWRlZFxuICpcbiAqIEBwcml2YXRlXG4gKi9cblRleHQucHJvdG90eXBlLnVwZGF0ZVRleHQgPSBmdW5jdGlvbiAoKVxue1xuICAgIHZhciBzdHlsZSA9IHRoaXMuX3N0eWxlO1xuICAgIHRoaXMuY29udGV4dC5mb250ID0gc3R5bGUuZm9udDtcblxuICAgIC8vIHdvcmQgd3JhcFxuICAgIC8vIHByZXNlcnZlIG9yaWdpbmFsIHRleHRcbiAgICB2YXIgb3V0cHV0VGV4dCA9IHN0eWxlLndvcmRXcmFwID8gdGhpcy53b3JkV3JhcCh0aGlzLl90ZXh0KSA6IHRoaXMuX3RleHQ7XG5cbiAgICAvLyBzcGxpdCB0ZXh0IGludG8gbGluZXNcbiAgICB2YXIgbGluZXMgPSBvdXRwdXRUZXh0LnNwbGl0KC8oPzpcXHJcXG58XFxyfFxcbikvKTtcblxuICAgIC8vIGNhbGN1bGF0ZSB0ZXh0IHdpZHRoXG4gICAgdmFyIGxpbmVXaWR0aHMgPSBuZXcgQXJyYXkobGluZXMubGVuZ3RoKTtcbiAgICB2YXIgbWF4TGluZVdpZHRoID0gMDtcbiAgICB2YXIgZm9udFByb3BlcnRpZXMgPSB0aGlzLmRldGVybWluZUZvbnRQcm9wZXJ0aWVzKHN0eWxlLmZvbnQpO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGluZXMubGVuZ3RoOyBpKyspXG4gICAge1xuICAgICAgICB2YXIgbGluZVdpZHRoID0gdGhpcy5jb250ZXh0Lm1lYXN1cmVUZXh0KGxpbmVzW2ldKS53aWR0aDtcbiAgICAgICAgbGluZVdpZHRoc1tpXSA9IGxpbmVXaWR0aDtcbiAgICAgICAgbWF4TGluZVdpZHRoID0gTWF0aC5tYXgobWF4TGluZVdpZHRoLCBsaW5lV2lkdGgpO1xuICAgIH1cblxuICAgIHZhciB3aWR0aCA9IG1heExpbmVXaWR0aCArIHN0eWxlLnN0cm9rZVRoaWNrbmVzcztcbiAgICBpZiAoc3R5bGUuZHJvcFNoYWRvdylcbiAgICB7XG4gICAgICAgIHdpZHRoICs9IHN0eWxlLmRyb3BTaGFkb3dEaXN0YW5jZTtcbiAgICB9XG5cbiAgICB0aGlzLmNhbnZhcy53aWR0aCA9ICggd2lkdGggKyB0aGlzLmNvbnRleHQubGluZVdpZHRoICkgKiB0aGlzLnJlc29sdXRpb247XG5cbiAgICAvLyBjYWxjdWxhdGUgdGV4dCBoZWlnaHRcbiAgICB2YXIgbGluZUhlaWdodCA9IHRoaXMuc3R5bGUubGluZUhlaWdodCB8fCBmb250UHJvcGVydGllcy5mb250U2l6ZSArIHN0eWxlLnN0cm9rZVRoaWNrbmVzcztcblxuICAgIHZhciBoZWlnaHQgPSBsaW5lSGVpZ2h0ICogbGluZXMubGVuZ3RoO1xuICAgIGlmIChzdHlsZS5kcm9wU2hhZG93KVxuICAgIHtcbiAgICAgICAgaGVpZ2h0ICs9IHN0eWxlLmRyb3BTaGFkb3dEaXN0YW5jZTtcbiAgICB9XG5cbiAgICB0aGlzLmNhbnZhcy5oZWlnaHQgPSAoIGhlaWdodCArIHRoaXMuX3N0eWxlLnBhZGRpbmcgKiAyICkgKiB0aGlzLnJlc29sdXRpb247XG5cbiAgICB0aGlzLmNvbnRleHQuc2NhbGUoIHRoaXMucmVzb2x1dGlvbiwgdGhpcy5yZXNvbHV0aW9uKTtcblxuICAgIGlmIChuYXZpZ2F0b3IuaXNDb2Nvb25KUylcbiAgICB7XG4gICAgICAgIHRoaXMuY29udGV4dC5jbGVhclJlY3QoMCwgMCwgdGhpcy5jYW52YXMud2lkdGgsIHRoaXMuY2FudmFzLmhlaWdodCk7XG5cbiAgICB9XG5cbiAgICAvL3RoaXMuY29udGV4dC5maWxsU3R5bGU9XCIjRkYwMDAwXCI7XG4gICAgLy90aGlzLmNvbnRleHQuZmlsbFJlY3QoMCwgMCwgdGhpcy5jYW52YXMud2lkdGgsIHRoaXMuY2FudmFzLmhlaWdodCk7XG5cbiAgICB0aGlzLmNvbnRleHQuZm9udCA9IHN0eWxlLmZvbnQ7XG4gICAgdGhpcy5jb250ZXh0LnN0cm9rZVN0eWxlID0gc3R5bGUuc3Ryb2tlO1xuICAgIHRoaXMuY29udGV4dC5saW5lV2lkdGggPSBzdHlsZS5zdHJva2VUaGlja25lc3M7XG4gICAgdGhpcy5jb250ZXh0LnRleHRCYXNlbGluZSA9IHN0eWxlLnRleHRCYXNlbGluZTtcbiAgICB0aGlzLmNvbnRleHQubGluZUpvaW4gPSBzdHlsZS5saW5lSm9pbjtcbiAgICB0aGlzLmNvbnRleHQubWl0ZXJMaW1pdCA9IHN0eWxlLm1pdGVyTGltaXQ7XG5cbiAgICB2YXIgbGluZVBvc2l0aW9uWDtcbiAgICB2YXIgbGluZVBvc2l0aW9uWTtcblxuICAgIGlmIChzdHlsZS5kcm9wU2hhZG93KVxuICAgIHtcbiAgICAgICAgaWYgKHN0eWxlLmRyb3BTaGFkb3dCbHVyID4gMCkge1xuICAgICAgICAgICAgdGhpcy5jb250ZXh0LnNoYWRvd0NvbG9yID0gc3R5bGUuZHJvcFNoYWRvd0NvbG9yO1xuICAgICAgICAgICAgdGhpcy5jb250ZXh0LnNoYWRvd0JsdXIgPSBzdHlsZS5kcm9wU2hhZG93Qmx1cjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuY29udGV4dC5maWxsU3R5bGUgPSBzdHlsZS5kcm9wU2hhZG93Q29sb3I7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgeFNoYWRvd09mZnNldCA9IE1hdGguY29zKHN0eWxlLmRyb3BTaGFkb3dBbmdsZSkgKiBzdHlsZS5kcm9wU2hhZG93RGlzdGFuY2U7XG4gICAgICAgIHZhciB5U2hhZG93T2Zmc2V0ID0gTWF0aC5zaW4oc3R5bGUuZHJvcFNoYWRvd0FuZ2xlKSAqIHN0eWxlLmRyb3BTaGFkb3dEaXN0YW5jZTtcblxuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbGluZXMubGVuZ3RoOyBpKyspXG4gICAgICAgIHtcbiAgICAgICAgICAgIGxpbmVQb3NpdGlvblggPSBzdHlsZS5zdHJva2VUaGlja25lc3MgLyAyO1xuICAgICAgICAgICAgbGluZVBvc2l0aW9uWSA9IChzdHlsZS5zdHJva2VUaGlja25lc3MgLyAyICsgaSAqIGxpbmVIZWlnaHQpICsgZm9udFByb3BlcnRpZXMuYXNjZW50O1xuXG4gICAgICAgICAgICBpZiAoc3R5bGUuYWxpZ24gPT09ICdyaWdodCcpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgbGluZVBvc2l0aW9uWCArPSBtYXhMaW5lV2lkdGggLSBsaW5lV2lkdGhzW2ldO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoc3R5bGUuYWxpZ24gPT09ICdjZW50ZXInKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGxpbmVQb3NpdGlvblggKz0gKG1heExpbmVXaWR0aCAtIGxpbmVXaWR0aHNbaV0pIC8gMjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHN0eWxlLmZpbGwpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdGhpcy5jb250ZXh0LmZpbGxUZXh0KGxpbmVzW2ldLCBsaW5lUG9zaXRpb25YICsgeFNoYWRvd09mZnNldCwgbGluZVBvc2l0aW9uWSArIHlTaGFkb3dPZmZzZXQgKyB0aGlzLl9zdHlsZS5wYWRkaW5nKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vc2V0IGNhbnZhcyB0ZXh0IHN0eWxlc1xuICAgIHRoaXMuY29udGV4dC5maWxsU3R5bGUgPSBzdHlsZS5maWxsO1xuXG4gICAgLy9kcmF3IGxpbmVzIGxpbmUgYnkgbGluZVxuICAgIGZvciAoaSA9IDA7IGkgPCBsaW5lcy5sZW5ndGg7IGkrKylcbiAgICB7XG4gICAgICAgIGxpbmVQb3NpdGlvblggPSBzdHlsZS5zdHJva2VUaGlja25lc3MgLyAyO1xuICAgICAgICBsaW5lUG9zaXRpb25ZID0gKHN0eWxlLnN0cm9rZVRoaWNrbmVzcyAvIDIgKyBpICogbGluZUhlaWdodCkgKyBmb250UHJvcGVydGllcy5hc2NlbnQ7XG5cbiAgICAgICAgaWYgKHN0eWxlLmFsaWduID09PSAncmlnaHQnKVxuICAgICAgICB7XG4gICAgICAgICAgICBsaW5lUG9zaXRpb25YICs9IG1heExpbmVXaWR0aCAtIGxpbmVXaWR0aHNbaV07XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoc3R5bGUuYWxpZ24gPT09ICdjZW50ZXInKVxuICAgICAgICB7XG4gICAgICAgICAgICBsaW5lUG9zaXRpb25YICs9IChtYXhMaW5lV2lkdGggLSBsaW5lV2lkdGhzW2ldKSAvIDI7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoc3R5bGUuc3Ryb2tlICYmIHN0eWxlLnN0cm9rZVRoaWNrbmVzcylcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5jb250ZXh0LnN0cm9rZVRleHQobGluZXNbaV0sIGxpbmVQb3NpdGlvblgsIGxpbmVQb3NpdGlvblkgKyB0aGlzLl9zdHlsZS5wYWRkaW5nKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChzdHlsZS5maWxsKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmNvbnRleHQuZmlsbFRleHQobGluZXNbaV0sIGxpbmVQb3NpdGlvblgsIGxpbmVQb3NpdGlvblkgKyB0aGlzLl9zdHlsZS5wYWRkaW5nKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMudXBkYXRlVGV4dHVyZSgpO1xufTtcblxuLyoqXG4gKiBVcGRhdGVzIHRleHR1cmUgc2l6ZSBiYXNlZCBvbiBjYW52YXMgc2l6ZVxuICpcbiAqIEBwcml2YXRlXG4gKi9cblRleHQucHJvdG90eXBlLnVwZGF0ZVRleHR1cmUgPSBmdW5jdGlvbiAoKVxue1xuICAgIHZhciB0ZXh0dXJlID0gdGhpcy5fdGV4dHVyZTtcblxuICAgIHRleHR1cmUuYmFzZVRleHR1cmUuaGFzTG9hZGVkID0gdHJ1ZTtcbiAgICB0ZXh0dXJlLmJhc2VUZXh0dXJlLnJlc29sdXRpb24gPSB0aGlzLnJlc29sdXRpb247XG5cbiAgICB0ZXh0dXJlLmJhc2VUZXh0dXJlLndpZHRoID0gdGhpcy5jYW52YXMud2lkdGggLyB0aGlzLnJlc29sdXRpb247XG4gICAgdGV4dHVyZS5iYXNlVGV4dHVyZS5oZWlnaHQgPSB0aGlzLmNhbnZhcy5oZWlnaHQgLyB0aGlzLnJlc29sdXRpb247XG4gICAgdGV4dHVyZS5jcm9wLndpZHRoID0gdGV4dHVyZS5fZnJhbWUud2lkdGggPSB0aGlzLmNhbnZhcy53aWR0aCAvIHRoaXMucmVzb2x1dGlvbjtcbiAgICB0ZXh0dXJlLmNyb3AuaGVpZ2h0ID0gdGV4dHVyZS5fZnJhbWUuaGVpZ2h0ID0gdGhpcy5jYW52YXMuaGVpZ2h0IC8gdGhpcy5yZXNvbHV0aW9uO1xuXG4gICAgdGV4dHVyZS50cmltLnggPSAwO1xuICAgIHRleHR1cmUudHJpbS55ID0gLXRoaXMuX3N0eWxlLnBhZGRpbmc7XG5cbiAgICB0ZXh0dXJlLnRyaW0ud2lkdGggPSB0ZXh0dXJlLl9mcmFtZS53aWR0aDtcbiAgICB0ZXh0dXJlLnRyaW0uaGVpZ2h0ID0gdGV4dHVyZS5fZnJhbWUuaGVpZ2h0IC0gdGhpcy5fc3R5bGUucGFkZGluZyoyO1xuXG4gICAgdGhpcy5fd2lkdGggPSB0aGlzLmNhbnZhcy53aWR0aCAvIHRoaXMucmVzb2x1dGlvbjtcbiAgICB0aGlzLl9oZWlnaHQgPSB0aGlzLmNhbnZhcy5oZWlnaHQgLyB0aGlzLnJlc29sdXRpb247XG5cbiAgICB0ZXh0dXJlLmJhc2VUZXh0dXJlLmVtaXQoJ3VwZGF0ZScsICB0ZXh0dXJlLmJhc2VUZXh0dXJlKTtcblxuICAgIHRoaXMuZGlydHkgPSBmYWxzZTtcbn07XG5cbi8qKlxuICogUmVuZGVycyB0aGUgb2JqZWN0IHVzaW5nIHRoZSBXZWJHTCByZW5kZXJlclxuICpcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5XZWJHTFJlbmRlcmVyfVxuICovXG5UZXh0LnByb3RvdHlwZS5yZW5kZXJXZWJHTCA9IGZ1bmN0aW9uIChyZW5kZXJlcilcbntcbiAgICBpZiAodGhpcy5kaXJ0eSlcbiAgICB7XG4gICAgICAgIC8vdGhpcy5yZXNvbHV0aW9uID0gMS8vcmVuZGVyZXIucmVzb2x1dGlvbjtcblxuICAgICAgICB0aGlzLnVwZGF0ZVRleHQoKTtcbiAgICB9XG5cbiAgICBTcHJpdGUucHJvdG90eXBlLnJlbmRlcldlYkdMLmNhbGwodGhpcywgcmVuZGVyZXIpO1xufTtcblxuLyoqXG4gKiBSZW5kZXJzIHRoZSBvYmplY3QgdXNpbmcgdGhlIENhbnZhcyByZW5kZXJlclxuICpcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5DYW52YXNSZW5kZXJlcn1cbiAqIEBwcml2YXRlXG4gKi9cblRleHQucHJvdG90eXBlLl9yZW5kZXJDYW52YXMgPSBmdW5jdGlvbiAocmVuZGVyZXIpXG57XG4gICAgaWYgKHRoaXMuZGlydHkpXG4gICAge1xuICAgICAvLyAgIHRoaXMucmVzb2x1dGlvbiA9IDEvL3JlbmRlcmVyLnJlc29sdXRpb247XG5cbiAgICAgICAgdGhpcy51cGRhdGVUZXh0KCk7XG4gICAgfVxuXG4gICAgU3ByaXRlLnByb3RvdHlwZS5fcmVuZGVyQ2FudmFzLmNhbGwodGhpcywgcmVuZGVyZXIpO1xufTtcblxuLyoqXG4gKiBDYWxjdWxhdGVzIHRoZSBhc2NlbnQsIGRlc2NlbnQgYW5kIGZvbnRTaXplIG9mIGEgZ2l2ZW4gZm9udFN0eWxlXG4gKlxuICogQHBhcmFtIGZvbnRTdHlsZSB7b2JqZWN0fVxuICogQHByaXZhdGVcbiAqL1xuVGV4dC5wcm90b3R5cGUuZGV0ZXJtaW5lRm9udFByb3BlcnRpZXMgPSBmdW5jdGlvbiAoZm9udFN0eWxlKVxue1xuICAgIHZhciBwcm9wZXJ0aWVzID0gVGV4dC5mb250UHJvcGVydGllc0NhY2hlW2ZvbnRTdHlsZV07XG5cbiAgICBpZiAoIXByb3BlcnRpZXMpXG4gICAge1xuICAgICAgICBwcm9wZXJ0aWVzID0ge307XG5cbiAgICAgICAgdmFyIGNhbnZhcyA9IFRleHQuZm9udFByb3BlcnRpZXNDYW52YXM7XG4gICAgICAgIHZhciBjb250ZXh0ID0gVGV4dC5mb250UHJvcGVydGllc0NvbnRleHQ7XG5cbiAgICAgICAgY29udGV4dC5mb250ID0gZm9udFN0eWxlO1xuXG4gICAgICAgIHZhciB3aWR0aCA9IE1hdGguY2VpbChjb250ZXh0Lm1lYXN1cmVUZXh0KCd8TcOJcScpLndpZHRoKTtcbiAgICAgICAgdmFyIGJhc2VsaW5lID0gTWF0aC5jZWlsKGNvbnRleHQubWVhc3VyZVRleHQoJ00nKS53aWR0aCk7XG4gICAgICAgIHZhciBoZWlnaHQgPSAyICogYmFzZWxpbmU7XG5cbiAgICAgICAgYmFzZWxpbmUgPSBiYXNlbGluZSAqIDEuNCB8IDA7XG5cbiAgICAgICAgY2FudmFzLndpZHRoID0gd2lkdGg7XG4gICAgICAgIGNhbnZhcy5oZWlnaHQgPSBoZWlnaHQ7XG5cbiAgICAgICAgY29udGV4dC5maWxsU3R5bGUgPSAnI2YwMCc7XG4gICAgICAgIGNvbnRleHQuZmlsbFJlY3QoMCwgMCwgd2lkdGgsIGhlaWdodCk7XG5cbiAgICAgICAgY29udGV4dC5mb250ID0gZm9udFN0eWxlO1xuXG4gICAgICAgIGNvbnRleHQudGV4dEJhc2VsaW5lID0gJ2FscGhhYmV0aWMnO1xuICAgICAgICBjb250ZXh0LmZpbGxTdHlsZSA9ICcjMDAwJztcbiAgICAgICAgY29udGV4dC5maWxsVGV4dCgnfE3DiXEnLCAwLCBiYXNlbGluZSk7XG5cbiAgICAgICAgdmFyIGltYWdlZGF0YSA9IGNvbnRleHQuZ2V0SW1hZ2VEYXRhKDAsIDAsIHdpZHRoLCBoZWlnaHQpLmRhdGE7XG4gICAgICAgIHZhciBwaXhlbHMgPSBpbWFnZWRhdGEubGVuZ3RoO1xuICAgICAgICB2YXIgbGluZSA9IHdpZHRoICogNDtcblxuICAgICAgICB2YXIgaSwgajtcblxuICAgICAgICB2YXIgaWR4ID0gMDtcbiAgICAgICAgdmFyIHN0b3AgPSBmYWxzZTtcblxuICAgICAgICAvLyBhc2NlbnQuIHNjYW4gZnJvbSB0b3AgdG8gYm90dG9tIHVudGlsIHdlIGZpbmQgYSBub24gcmVkIHBpeGVsXG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCBiYXNlbGluZTsgaSsrKVxuICAgICAgICB7XG4gICAgICAgICAgICBmb3IgKGogPSAwOyBqIDwgbGluZTsgaiArPSA0KVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGlmIChpbWFnZWRhdGFbaWR4ICsgal0gIT09IDI1NSlcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIHN0b3AgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIXN0b3ApXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgaWR4ICs9IGxpbmU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBwcm9wZXJ0aWVzLmFzY2VudCA9IGJhc2VsaW5lIC0gaTtcblxuICAgICAgICBpZHggPSBwaXhlbHMgLSBsaW5lO1xuICAgICAgICBzdG9wID0gZmFsc2U7XG5cbiAgICAgICAgLy8gZGVzY2VudC4gc2NhbiBmcm9tIGJvdHRvbSB0byB0b3AgdW50aWwgd2UgZmluZCBhIG5vbiByZWQgcGl4ZWxcbiAgICAgICAgZm9yIChpID0gaGVpZ2h0OyBpID4gYmFzZWxpbmU7IGktLSlcbiAgICAgICAge1xuICAgICAgICAgICAgZm9yIChqID0gMDsgaiA8IGxpbmU7IGogKz0gNClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBpZiAoaW1hZ2VkYXRhW2lkeCArIGpdICE9PSAyNTUpXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBzdG9wID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCFzdG9wKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGlkeCAtPSBsaW5lO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcHJvcGVydGllcy5kZXNjZW50ID0gaSAtIGJhc2VsaW5lO1xuICAgICAgICBwcm9wZXJ0aWVzLmZvbnRTaXplID0gcHJvcGVydGllcy5hc2NlbnQgKyBwcm9wZXJ0aWVzLmRlc2NlbnQ7XG5cbiAgICAgICAgVGV4dC5mb250UHJvcGVydGllc0NhY2hlW2ZvbnRTdHlsZV0gPSBwcm9wZXJ0aWVzO1xuICAgIH1cblxuICAgIHJldHVybiBwcm9wZXJ0aWVzO1xufTtcblxuLyoqXG4gKiBBcHBsaWVzIG5ld2xpbmVzIHRvIGEgc3RyaW5nIHRvIGhhdmUgaXQgb3B0aW1hbGx5IGZpdCBpbnRvIHRoZSBob3Jpem9udGFsXG4gKiBib3VuZHMgc2V0IGJ5IHRoZSBUZXh0IG9iamVjdCdzIHdvcmRXcmFwV2lkdGggcHJvcGVydHkuXG4gKlxuICogQHBhcmFtIHRleHQge3N0cmluZ31cbiAqIEBwcml2YXRlXG4gKi9cblRleHQucHJvdG90eXBlLndvcmRXcmFwID0gZnVuY3Rpb24gKHRleHQpXG57XG4gICAgLy8gR3JlZWR5IHdyYXBwaW5nIGFsZ29yaXRobSB0aGF0IHdpbGwgd3JhcCB3b3JkcyBhcyB0aGUgbGluZSBncm93cyBsb25nZXJcbiAgICAvLyB0aGFuIGl0cyBob3Jpem9udGFsIGJvdW5kcy5cbiAgICB2YXIgcmVzdWx0ID0gJyc7XG4gICAgdmFyIGxpbmVzID0gdGV4dC5zcGxpdCgnXFxuJyk7XG4gICAgdmFyIHdvcmRXcmFwV2lkdGggPSB0aGlzLl9zdHlsZS53b3JkV3JhcFdpZHRoO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGluZXMubGVuZ3RoOyBpKyspXG4gICAge1xuICAgICAgICB2YXIgc3BhY2VMZWZ0ID0gd29yZFdyYXBXaWR0aDtcbiAgICAgICAgdmFyIHdvcmRzID0gbGluZXNbaV0uc3BsaXQoJyAnKTtcbiAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCB3b3Jkcy5sZW5ndGg7IGorKylcbiAgICAgICAge1xuICAgICAgICAgICAgdmFyIHdvcmRXaWR0aCA9IHRoaXMuY29udGV4dC5tZWFzdXJlVGV4dCh3b3Jkc1tqXSkud2lkdGg7XG4gICAgICAgICAgICB2YXIgd29yZFdpZHRoV2l0aFNwYWNlID0gd29yZFdpZHRoICsgdGhpcy5jb250ZXh0Lm1lYXN1cmVUZXh0KCcgJykud2lkdGg7XG4gICAgICAgICAgICBpZiAoaiA9PT0gMCB8fCB3b3JkV2lkdGhXaXRoU3BhY2UgPiBzcGFjZUxlZnQpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgLy8gU2tpcCBwcmludGluZyB0aGUgbmV3bGluZSBpZiBpdCdzIHRoZSBmaXJzdCB3b3JkIG9mIHRoZSBsaW5lIHRoYXQgaXNcbiAgICAgICAgICAgICAgICAvLyBncmVhdGVyIHRoYW4gdGhlIHdvcmQgd3JhcCB3aWR0aC5cbiAgICAgICAgICAgICAgICBpZiAoaiA+IDApXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQgKz0gJ1xcbic7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJlc3VsdCArPSB3b3Jkc1tqXTtcbiAgICAgICAgICAgICAgICBzcGFjZUxlZnQgPSB3b3JkV3JhcFdpZHRoIC0gd29yZFdpZHRoO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHNwYWNlTGVmdCAtPSB3b3JkV2lkdGhXaXRoU3BhY2U7XG4gICAgICAgICAgICAgICAgcmVzdWx0ICs9ICcgJyArIHdvcmRzW2pdO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGkgPCBsaW5lcy5sZW5ndGgtMSlcbiAgICAgICAge1xuICAgICAgICAgICAgcmVzdWx0ICs9ICdcXG4nO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG59O1xuXG4vKipcbiAqIFJldHVybnMgdGhlIGJvdW5kcyBvZiB0aGUgVGV4dCBhcyBhIHJlY3RhbmdsZS4gVGhlIGJvdW5kcyBjYWxjdWxhdGlvbiB0YWtlcyB0aGUgd29ybGRUcmFuc2Zvcm0gaW50byBhY2NvdW50LlxuICpcbiAqIEBwYXJhbSBtYXRyaXgge1BJWEkuTWF0cml4fSB0aGUgdHJhbnNmb3JtYXRpb24gbWF0cml4IG9mIHRoZSBUZXh0XG4gKiBAcmV0dXJuIHtQSVhJLlJlY3RhbmdsZX0gdGhlIGZyYW1pbmcgcmVjdGFuZ2xlXG4gKi9cblRleHQucHJvdG90eXBlLmdldEJvdW5kcyA9IGZ1bmN0aW9uIChtYXRyaXgpXG57XG4gICAgaWYgKHRoaXMuZGlydHkpXG4gICAge1xuICAgICAgICB0aGlzLnVwZGF0ZVRleHQoKTtcbiAgICB9XG5cbiAgICByZXR1cm4gU3ByaXRlLnByb3RvdHlwZS5nZXRCb3VuZHMuY2FsbCh0aGlzLCBtYXRyaXgpO1xufTtcblxuLyoqXG4gKiBEZXN0cm95cyB0aGlzIHRleHQgb2JqZWN0LlxuICpcbiAqIEBwYXJhbSBbZGVzdHJveUJhc2VUZXh0dXJlPXRydWVdIHtib29sZWFufSB3aGV0aGVyIHRvIGRlc3Ryb3kgdGhlIGJhc2UgdGV4dHVyZSBhcyB3ZWxsXG4gKi9cblRleHQucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoZGVzdHJveUJhc2VUZXh0dXJlKVxue1xuICAgIC8vIG1ha2Ugc3VyZSB0byByZXNldCB0aGUgdGhlIGNvbnRleHQgYW5kIGNhbnZhcy4uIGRvbnQgd2FudCB0aGlzIGhhbmdpbmcgYXJvdW5kIGluIG1lbW9yeSFcbiAgICB0aGlzLmNvbnRleHQgPSBudWxsO1xuICAgIHRoaXMuY2FudmFzID0gbnVsbDtcblxuICAgIHRoaXMuX3N0eWxlID0gbnVsbDtcblxuICAgIHRoaXMuX3RleHR1cmUuZGVzdHJveShkZXN0cm95QmFzZVRleHR1cmUgPT09IHVuZGVmaW5lZCA/IHRydWUgOiBkZXN0cm95QmFzZVRleHR1cmUpO1xufTtcbiIsInZhciB1dGlscyA9IHJlcXVpcmUoJy4uL3V0aWxzJyksXG4gICAgQ09OU1QgPSByZXF1aXJlKCcuLi9jb25zdCcpLFxuICAgIEV2ZW50RW1pdHRlciA9IHJlcXVpcmUoJ2V2ZW50ZW1pdHRlcjMnKTtcblxuLyoqXG4gKiBBIHRleHR1cmUgc3RvcmVzIHRoZSBpbmZvcm1hdGlvbiB0aGF0IHJlcHJlc2VudHMgYW4gaW1hZ2UuIEFsbCB0ZXh0dXJlcyBoYXZlIGEgYmFzZSB0ZXh0dXJlLlxuICpcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWElcbiAqIEBwYXJhbSBzb3VyY2Uge0ltYWdlfENhbnZhc30gdGhlIHNvdXJjZSBvYmplY3Qgb2YgdGhlIHRleHR1cmUuXG4gKiBAcGFyYW0gW3NjYWxlTW9kZT1QSVhJLlNDQUxFX01PREVTLkRFRkFVTFRdIHtudW1iZXJ9IFNlZSB7QGxpbmsgUElYSS5TQ0FMRV9NT0RFU30gZm9yIHBvc3NpYmxlIHZhbHVlc1xuICogQHBhcmFtIHJlc29sdXRpb24ge251bWJlcn0gdGhlIHJlc29sdXRpb24gb2YgdGhlIHRleHR1cmUgZm9yIGRldmljZXMgd2l0aCBkaWZmZXJlbnQgcGl4ZWwgcmF0aW9zXG4gKi9cbmZ1bmN0aW9uIEJhc2VUZXh0dXJlKHNvdXJjZSwgc2NhbGVNb2RlLCByZXNvbHV0aW9uKVxue1xuICAgIEV2ZW50RW1pdHRlci5jYWxsKHRoaXMpO1xuXG4gICAgdGhpcy51aWQgPSB1dGlscy51aWQoKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBSZXNvbHV0aW9uIG9mIHRoZSB0ZXh0dXJlLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMucmVzb2x1dGlvbiA9IHJlc29sdXRpb24gfHwgMTtcblxuICAgIC8qKlxuICAgICAqIFRoZSB3aWR0aCBvZiB0aGUgYmFzZSB0ZXh0dXJlIHNldCB3aGVuIHRoZSBpbWFnZSBoYXMgbG9hZGVkXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQHJlYWRPbmx5XG4gICAgICovXG4gICAgdGhpcy53aWR0aCA9IDEwMDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBoZWlnaHQgb2YgdGhlIGJhc2UgdGV4dHVyZSBzZXQgd2hlbiB0aGUgaW1hZ2UgaGFzIGxvYWRlZFxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEByZWFkT25seVxuICAgICAqL1xuICAgIHRoaXMuaGVpZ2h0ID0gMTAwO1xuXG4gICAgLy8gVE9ETyBkb2NzXG4gICAgLy8gdXNlZCB0byBzdG9yZSB0aGUgYWN0dWFsIGRpbWVuc2lvbnMgb2YgdGhlIHNvdXJjZVxuICAgIC8qKlxuICAgICAqIFVzZWQgdG8gc3RvcmUgdGhlIGFjdHVhbCB3aWR0aCBvZiB0aGUgc291cmNlIG9mIHRoaXMgdGV4dHVyZVxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEByZWFkT25seVxuICAgICAqL1xuICAgIHRoaXMucmVhbFdpZHRoID0gMTAwO1xuICAgIC8qKlxuICAgICAqIFVzZWQgdG8gc3RvcmUgdGhlIGFjdHVhbCBoZWlnaHQgb2YgdGhlIHNvdXJjZSBvZiB0aGlzIHRleHR1cmVcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAcmVhZE9ubHlcbiAgICAgKi9cbiAgICB0aGlzLnJlYWxIZWlnaHQgPSAxMDA7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgc2NhbGUgbW9kZSB0byBhcHBseSB3aGVuIHNjYWxpbmcgdGhpcyB0ZXh0dXJlXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgUElYSS5TQ0FMRV9NT0RFUy5MSU5FQVJcbiAgICAgKiBAc2VlIFBJWEkuU0NBTEVfTU9ERVNcbiAgICAgKi9cbiAgICB0aGlzLnNjYWxlTW9kZSA9IHNjYWxlTW9kZSB8fCBDT05TVC5TQ0FMRV9NT0RFUy5ERUZBVUxUO1xuXG4gICAgLyoqXG4gICAgICogU2V0IHRvIHRydWUgb25jZSB0aGUgYmFzZSB0ZXh0dXJlIGhhcyBzdWNjZXNzZnVsbHkgbG9hZGVkLlxuICAgICAqXG4gICAgICogVGhpcyBpcyBuZXZlciB0cnVlIGlmIHRoZSB1bmRlcmx5aW5nIHNvdXJjZSBmYWlscyB0byBsb2FkIG9yIGhhcyBubyB0ZXh0dXJlIGRhdGEuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqIEByZWFkT25seVxuICAgICAqL1xuICAgIHRoaXMuaGFzTG9hZGVkID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBTZXQgdG8gdHJ1ZSBpZiB0aGUgc291cmNlIGlzIGN1cnJlbnRseSBsb2FkaW5nLlxuICAgICAqXG4gICAgICogSWYgYW4gSW1hZ2Ugc291cmNlIGlzIGxvYWRpbmcgdGhlICdsb2FkZWQnIG9yICdlcnJvcicgZXZlbnQgd2lsbCBiZVxuICAgICAqIGRpc3BhdGNoZWQgd2hlbiB0aGUgb3BlcmF0aW9uIGVuZHMuIEFuIHVuZGVyeWxpbmcgc291cmNlIHRoYXQgaXNcbiAgICAgKiBpbW1lZGlhdGVseS1hdmFpbGFibGUgYnlwYXNzZXMgbG9hZGluZyBlbnRpcmVseS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICogQHJlYWRvbmx5XG4gICAgICovXG4gICAgdGhpcy5pc0xvYWRpbmcgPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBpbWFnZSBzb3VyY2UgdGhhdCBpcyB1c2VkIHRvIGNyZWF0ZSB0aGUgdGV4dHVyZS5cbiAgICAgKlxuICAgICAqIFRPRE86IE1ha2UgdGhpcyBhIHNldHRlciB0aGF0IGNhbGxzIGxvYWRTb3VyY2UoKTtcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge0ltYWdlfENhbnZhc31cbiAgICAgKiBAcmVhZG9ubHlcbiAgICAgKi9cbiAgICB0aGlzLnNvdXJjZSA9IG51bGw7IC8vIHNldCBpbiBsb2FkU291cmNlLCBpZiBhdCBhbGxcblxuICAgIC8qKlxuICAgICAqIENvbnRyb2xzIGlmIFJHQiBjaGFubmVscyBzaG91bGQgYmUgcHJlLW11bHRpcGxpZWQgYnkgQWxwaGEgIChXZWJHTCBvbmx5KVxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKiBAZGVmYXVsdCB0cnVlXG4gICAgICovXG4gICAgdGhpcy5wcmVtdWx0aXBsaWVkQWxwaGEgPSB0cnVlO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7c3RyaW5nfVxuICAgICAqL1xuICAgIHRoaXMuaW1hZ2VVcmwgPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogV2V0aGVyIG9yIG5vdCB0aGUgdGV4dHVyZSBpcyBhIHBvd2VyIG9mIHR3bywgdHJ5IHRvIHVzZSBwb3dlciBvZiB0d28gdGV4dHVyZXMgYXMgbXVjaCBhcyB5b3UgY2FuXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuaXNQb3dlck9mVHdvID0gZmFsc2U7XG5cbiAgICAvLyB1c2VkIGZvciB3ZWJHTFxuXG4gICAgLyoqXG4gICAgICpcbiAgICAgKiBTZXQgdGhpcyB0byB0cnVlIGlmIGEgbWlwbWFwIG9mIHRoaXMgdGV4dHVyZSBuZWVkcyB0byBiZSBnZW5lcmF0ZWQuIFRoaXMgdmFsdWUgbmVlZHMgdG8gYmUgc2V0IGJlZm9yZSB0aGUgdGV4dHVyZSBpcyB1c2VkXG4gICAgICogQWxzbyB0aGUgdGV4dHVyZSBtdXN0IGJlIGEgcG93ZXIgb2YgdHdvIHNpemUgdG8gd29ya1xuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKi9cbiAgICB0aGlzLm1pcG1hcCA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogQSBtYXAgb2YgcmVuZGVyZXIgSURzIHRvIHdlYmdsIHRleHR1cmVzXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtvYmplY3Q8bnVtYmVyLCBXZWJHTFRleHR1cmU+fVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fZ2xUZXh0dXJlcyA9IHt9O1xuICAgIHRoaXMuX2FjdGl2ZSA9IGZhbHNlO1xuICAgIHRoaXMuX2lkID0gMDtcbiAgICBcbiAgICAvLyBpZiBubyBzb3VyY2UgcGFzc2VkIGRvbid0IHRyeSB0byBsb2FkXG4gICAgaWYgKHNvdXJjZSlcbiAgICB7XG4gICAgICAgIHRoaXMubG9hZFNvdXJjZShzb3VyY2UpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEZpcmVkIHdoZW4gYSBub3QtaW1tZWRpYXRlbHktYXZhaWxhYmxlIHNvdXJjZSBmaW5pc2hlcyBsb2FkaW5nLlxuICAgICAqXG4gICAgICogQGV2ZW50IGxvYWRlZFxuICAgICAqIEBtZW1iZXJvZiBQSVhJLkJhc2VUZXh0dXJlI1xuICAgICAqIEBwcm90ZWN0ZWRcbiAgICAgKi9cblxuICAgIC8qKlxuICAgICAqIEZpcmVkIHdoZW4gYSBub3QtaW1tZWRpYXRlbHktYXZhaWxhYmxlIHNvdXJjZSBmYWlscyB0byBsb2FkLlxuICAgICAqXG4gICAgICogQGV2ZW50IGVycm9yXG4gICAgICogQG1lbWJlcm9mIFBJWEkuQmFzZVRleHR1cmUjXG4gICAgICogQHByb3RlY3RlZFxuICAgICAqL1xufVxuXG5CYXNlVGV4dHVyZS5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKEV2ZW50RW1pdHRlci5wcm90b3R5cGUpO1xuQmFzZVRleHR1cmUucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gQmFzZVRleHR1cmU7XG5tb2R1bGUuZXhwb3J0cyA9IEJhc2VUZXh0dXJlO1xuXG4vKipcbiAqIFVwZGF0ZXMgdGhlIHRleHR1cmUgb24gYWxsIHRoZSB3ZWJnbCByZW5kZXJlcnMsIHRoaXMgYWxzbyBhc3N1bWVzIHRoZSBzcmMgaGFzIGNoYW5nZWQuXG4gKlxuICogQGZpcmVzIHVwZGF0ZVxuICovXG5CYXNlVGV4dHVyZS5wcm90b3R5cGUudXBkYXRlID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLnJlYWxXaWR0aCA9IHRoaXMuc291cmNlLm5hdHVyYWxXaWR0aCB8fCB0aGlzLnNvdXJjZS53aWR0aDtcbiAgICB0aGlzLnJlYWxIZWlnaHQgPSB0aGlzLnNvdXJjZS5uYXR1cmFsSGVpZ2h0IHx8IHRoaXMuc291cmNlLmhlaWdodDtcblxuICAgIHRoaXMud2lkdGggPSB0aGlzLnJlYWxXaWR0aCAvIHRoaXMucmVzb2x1dGlvbjtcbiAgICB0aGlzLmhlaWdodCA9IHRoaXMucmVhbEhlaWdodCAvIHRoaXMucmVzb2x1dGlvbjtcblxuICAgIHRoaXMuaXNQb3dlck9mVHdvID0gdXRpbHMuaXNQb3dlck9mVHdvKHRoaXMucmVhbFdpZHRoLCB0aGlzLnJlYWxIZWlnaHQpO1xuXG4gICAgdGhpcy5lbWl0KCd1cGRhdGUnLCB0aGlzKTtcbn07XG5cbi8qKlxuICogTG9hZCBhIHNvdXJjZS5cbiAqXG4gKiBJZiB0aGUgc291cmNlIGlzIG5vdC1pbW1lZGlhdGVseS1hdmFpbGFibGUsIHN1Y2ggYXMgYW4gaW1hZ2UgdGhhdCBuZWVkcyB0byBiZVxuICogZG93bmxvYWRlZCwgdGhlbiB0aGUgJ2xvYWRlZCcgb3IgJ2Vycm9yJyBldmVudCB3aWxsIGJlIGRpc3BhdGNoZWQgaW4gdGhlIGZ1dHVyZVxuICogYW5kIGBoYXNMb2FkZWRgIHdpbGwgcmVtYWluIGZhbHNlIGFmdGVyIHRoaXMgY2FsbC5cbiAqXG4gKiBUaGUgbG9naWMgc3RhdGUgYWZ0ZXIgY2FsbGluZyBgbG9hZFNvdXJjZWAgZGlyZWN0bHkgb3IgaW5kaXJlY3RseSAoZWcuIGBmcm9tSW1hZ2VgLCBgbmV3IEJhc2VUZXh0dXJlYCkgaXM6XG4gKlxuICogICAgIGlmICh0ZXh0dXJlLmhhc0xvYWRlZClcbiB7XG4gKiAgICAgICAgLy8gdGV4dHVyZSByZWFkeSBmb3IgdXNlXG4gKiAgICAgfSBlbHNlIGlmICh0ZXh0dXJlLmlzTG9hZGluZylcbiB7XG4gKiAgICAgICAgLy8gbGlzdGVuIHRvICdsb2FkZWQnIGFuZC9vciAnZXJyb3InIGV2ZW50cyBvbiB0ZXh0dXJlXG4gKiAgICAgfSBlbHNlIHtcbiAqICAgICAgICAvLyBub3QgbG9hZGluZywgbm90IGdvaW5nIHRvIGxvYWQgVU5MRVNTIHRoZSBzb3VyY2UgaXMgcmVsb2FkZWRcbiAqICAgICAgICAvLyAoaXQgbWF5IHN0aWxsIG1ha2Ugc2Vuc2UgdG8gbGlzdGVuIHRvIHRoZSBldmVudHMpXG4gKiAgICAgfVxuICpcbiAqIEBwcm90ZWN0ZWRcbiAqIEBwYXJhbSBzb3VyY2Uge0ltYWdlfENhbnZhc30gdGhlIHNvdXJjZSBvYmplY3Qgb2YgdGhlIHRleHR1cmUuXG4gKi9cbkJhc2VUZXh0dXJlLnByb3RvdHlwZS5sb2FkU291cmNlID0gZnVuY3Rpb24gKHNvdXJjZSlcbntcbiAgICB2YXIgd2FzTG9hZGluZyA9IHRoaXMuaXNMb2FkaW5nO1xuICAgIHRoaXMuaGFzTG9hZGVkID0gZmFsc2U7XG4gICAgdGhpcy5pc0xvYWRpbmcgPSBmYWxzZTtcblxuICAgIGlmICh3YXNMb2FkaW5nICYmIHRoaXMuc291cmNlKVxuICAgIHtcbiAgICAgICAgdGhpcy5zb3VyY2Uub25sb2FkID0gbnVsbDtcbiAgICAgICAgdGhpcy5zb3VyY2Uub25lcnJvciA9IG51bGw7XG4gICAgfVxuXG4gICAgdGhpcy5zb3VyY2UgPSBzb3VyY2U7XG5cbiAgICAvLyBBcHBseSBzb3VyY2UgaWYgbG9hZGVkLiBPdGhlcndpc2Ugc2V0dXAgYXBwcm9wcmlhdGUgbG9hZGluZyBtb25pdG9ycy5cbiAgICBpZiAoKHRoaXMuc291cmNlLmNvbXBsZXRlIHx8IHRoaXMuc291cmNlLmdldENvbnRleHQpICYmIHRoaXMuc291cmNlLndpZHRoICYmIHRoaXMuc291cmNlLmhlaWdodClcbiAgICB7XG4gICAgICAgIHRoaXMuX3NvdXJjZUxvYWRlZCgpO1xuICAgIH1cbiAgICBlbHNlIGlmICghc291cmNlLmdldENvbnRleHQpXG4gICAge1xuXG4gICAgICAgIC8vIEltYWdlIGZhaWwgLyBub3QgcmVhZHlcbiAgICAgICAgdGhpcy5pc0xvYWRpbmcgPSB0cnVlO1xuXG4gICAgICAgIHZhciBzY29wZSA9IHRoaXM7XG5cbiAgICAgICAgc291cmNlLm9ubG9hZCA9IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHNvdXJjZS5vbmxvYWQgPSBudWxsO1xuICAgICAgICAgICAgc291cmNlLm9uZXJyb3IgPSBudWxsO1xuXG4gICAgICAgICAgICBpZiAoIXNjb3BlLmlzTG9hZGluZylcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHNjb3BlLmlzTG9hZGluZyA9IGZhbHNlO1xuICAgICAgICAgICAgc2NvcGUuX3NvdXJjZUxvYWRlZCgpO1xuXG4gICAgICAgICAgICBzY29wZS5lbWl0KCdsb2FkZWQnLCBzY29wZSk7XG4gICAgICAgIH07XG5cbiAgICAgICAgc291cmNlLm9uZXJyb3IgPSBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICBzb3VyY2Uub25sb2FkID0gbnVsbDtcbiAgICAgICAgICAgIHNvdXJjZS5vbmVycm9yID0gbnVsbDtcblxuICAgICAgICAgICAgaWYgKCFzY29wZS5pc0xvYWRpbmcpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBzY29wZS5pc0xvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgICAgIHNjb3BlLmVtaXQoJ2Vycm9yJywgc2NvcGUpO1xuICAgICAgICB9O1xuXG4gICAgICAgIC8vIFBlciBodHRwOi8vd3d3LnczLm9yZy9UUi9odG1sNS9lbWJlZGRlZC1jb250ZW50LTAuaHRtbCN0aGUtaW1nLWVsZW1lbnRcbiAgICAgICAgLy8gICBcIlRoZSB2YWx1ZSBvZiBgY29tcGxldGVgIGNhbiB0aHVzIGNoYW5nZSB3aGlsZSBhIHNjcmlwdCBpcyBleGVjdXRpbmcuXCJcbiAgICAgICAgLy8gU28gY29tcGxldGUgbmVlZHMgdG8gYmUgcmUtY2hlY2tlZCBhZnRlciB0aGUgY2FsbGJhY2tzIGhhdmUgYmVlbiBhZGRlZC4uXG4gICAgICAgIC8vIE5PVEU6IGNvbXBsZXRlIHdpbGwgYmUgdHJ1ZSBpZiB0aGUgaW1hZ2UgaGFzIG5vIHNyYyBzbyBiZXN0IHRvIGNoZWNrIGlmIHRoZSBzcmMgaXMgc2V0LlxuICAgICAgICBpZiAoc291cmNlLmNvbXBsZXRlICYmIHNvdXJjZS5zcmMpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuaXNMb2FkaW5nID0gZmFsc2U7XG5cbiAgICAgICAgICAgIC8vIC4uYW5kIGlmIHdlJ3JlIGNvbXBsZXRlIG5vdywgbm8gbmVlZCBmb3IgY2FsbGJhY2tzXG4gICAgICAgICAgICBzb3VyY2Uub25sb2FkID0gbnVsbDtcbiAgICAgICAgICAgIHNvdXJjZS5vbmVycm9yID0gbnVsbDtcblxuICAgICAgICAgICAgaWYgKHNvdXJjZS53aWR0aCAmJiBzb3VyY2UuaGVpZ2h0KVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHRoaXMuX3NvdXJjZUxvYWRlZCgpO1xuXG4gICAgICAgICAgICAgICAgLy8gSWYgYW55IHByZXZpb3VzIHN1YnNjcmliZXJzIHBvc3NpYmxlXG4gICAgICAgICAgICAgICAgaWYgKHdhc0xvYWRpbmcpXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmVtaXQoJ2xvYWRlZCcsIHRoaXMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAvLyBJZiBhbnkgcHJldmlvdXMgc3Vic2NyaWJlcnMgcG9zc2libGVcbiAgICAgICAgICAgICAgICBpZiAod2FzTG9hZGluZylcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZW1pdCgnZXJyb3InLCB0aGlzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG59O1xuXG4vKipcbiAqIFVzZWQgaW50ZXJuYWxseSB0byB1cGRhdGUgdGhlIHdpZHRoLCBoZWlnaHQsIGFuZCBzb21lIG90aGVyIHRyYWNraW5nIHZhcnMgb25jZVxuICogYSBzb3VyY2UgaGFzIHN1Y2Nlc3NmdWxseSBsb2FkZWQuXG4gKlxuICogQHByaXZhdGVcbiAqL1xuQmFzZVRleHR1cmUucHJvdG90eXBlLl9zb3VyY2VMb2FkZWQgPSBmdW5jdGlvbiAoKVxue1xuICAgIHRoaXMuaGFzTG9hZGVkID0gdHJ1ZTtcbiAgICB0aGlzLnVwZGF0ZSgpO1xufTtcblxuLyoqXG4gKiBEZXN0cm95cyB0aGlzIGJhc2UgdGV4dHVyZVxuICpcbiAqL1xuQmFzZVRleHR1cmUucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoKVxue1xuICAgIGlmICh0aGlzLmltYWdlVXJsKVxuICAgIHtcbiAgICAgICAgZGVsZXRlIHV0aWxzLkJhc2VUZXh0dXJlQ2FjaGVbdGhpcy5pbWFnZVVybF07XG4gICAgICAgIGRlbGV0ZSB1dGlscy5UZXh0dXJlQ2FjaGVbdGhpcy5pbWFnZVVybF07XG5cbiAgICAgICAgdGhpcy5pbWFnZVVybCA9IG51bGw7XG5cbiAgICAgICAgaWYgKCFuYXZpZ2F0b3IuaXNDb2Nvb25KUylcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5zb3VyY2Uuc3JjID0gJyc7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZWxzZSBpZiAodGhpcy5zb3VyY2UgJiYgdGhpcy5zb3VyY2UuX3BpeGlJZClcbiAgICB7XG4gICAgICAgIGRlbGV0ZSB1dGlscy5CYXNlVGV4dHVyZUNhY2hlW3RoaXMuc291cmNlLl9waXhpSWRdO1xuICAgIH1cblxuICAgIHRoaXMuc291cmNlID0gbnVsbDtcblxuICAgIHRoaXMuZGlzcG9zZSgpO1xufTtcblxuLyoqXG4gKiBGcmVlcyB0aGUgdGV4dHVyZSBmcm9tIFdlYkdMIG1lbW9yeSB3aXRob3V0IGRlc3Ryb3lpbmcgdGhpcyB0ZXh0dXJlIG9iamVjdC5cbiAqIFRoaXMgbWVhbnMgeW91IGNhbiBzdGlsbCB1c2UgdGhlIHRleHR1cmUgbGF0ZXIgd2hpY2ggd2lsbCB1cGxvYWQgaXQgdG8gR1BVXG4gKiBtZW1vcnkgYWdhaW4uXG4gKlxuICovXG5CYXNlVGV4dHVyZS5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy5lbWl0KCdkaXNwb3NlJywgdGhpcyk7XG5cbiAgICAvLyB0aGlzIHNob3VsZCBubyBsb25nZXIgYmUgbmVlZGVkLCB0aGUgcmVuZGVyZXJzIHNob3VsZCBjbGVhbnVwIGFsbCB0aGUgZ2wgdGV4dHVyZXMuXG4gICAgLy8gdGhpcy5fZ2xUZXh0dXJlcyA9IHt9O1xufTtcblxuLyoqXG4gKiBDaGFuZ2VzIHRoZSBzb3VyY2UgaW1hZ2Ugb2YgdGhlIHRleHR1cmUuXG4gKiBUaGUgb3JpZ2luYWwgc291cmNlIG11c3QgYmUgYW4gSW1hZ2UgZWxlbWVudC5cbiAqXG4gKiBAcGFyYW0gbmV3U3JjIHtzdHJpbmd9IHRoZSBwYXRoIG9mIHRoZSBpbWFnZVxuICovXG5CYXNlVGV4dHVyZS5wcm90b3R5cGUudXBkYXRlU291cmNlSW1hZ2UgPSBmdW5jdGlvbiAobmV3U3JjKVxue1xuICAgIHRoaXMuc291cmNlLnNyYyA9IG5ld1NyYztcblxuICAgIHRoaXMubG9hZFNvdXJjZSh0aGlzLnNvdXJjZSk7XG59O1xuXG4vKipcbiAqIEhlbHBlciBmdW5jdGlvbiB0aGF0IGNyZWF0ZXMgYSBiYXNlIHRleHR1cmUgZnJvbSB0aGUgZ2l2ZW4gaW1hZ2UgdXJsLlxuICogSWYgdGhlIGltYWdlIGlzIG5vdCBpbiB0aGUgYmFzZSB0ZXh0dXJlIGNhY2hlIGl0IHdpbGwgYmUgY3JlYXRlZCBhbmQgbG9hZGVkLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBwYXJhbSBpbWFnZVVybCB7c3RyaW5nfSBUaGUgaW1hZ2UgdXJsIG9mIHRoZSB0ZXh0dXJlXG4gKiBAcGFyYW0gW2Nyb3Nzb3JpZ2luPShhdXRvKV0ge2Jvb2xlYW59IFNob3VsZCB1c2UgYW5vbnltb3VzIENPUlM/IERlZmF1bHRzIHRvIHRydWUgaWYgdGhlIFVSTCBpcyBub3QgYSBkYXRhLVVSSS5cbiAqIEBwYXJhbSBbc2NhbGVNb2RlPVBJWEkuU0NBTEVfTU9ERVMuREVGQVVMVF0ge251bWJlcn0gU2VlIHtAbGluayBQSVhJLlNDQUxFX01PREVTfSBmb3IgcG9zc2libGUgdmFsdWVzXG4gKiBAcmV0dXJuIFBJWEkuQmFzZVRleHR1cmVcbiAqL1xuQmFzZVRleHR1cmUuZnJvbUltYWdlID0gZnVuY3Rpb24gKGltYWdlVXJsLCBjcm9zc29yaWdpbiwgc2NhbGVNb2RlKVxue1xuICAgIHZhciBiYXNlVGV4dHVyZSA9IHV0aWxzLkJhc2VUZXh0dXJlQ2FjaGVbaW1hZ2VVcmxdO1xuXG4gICAgaWYgKGNyb3Nzb3JpZ2luID09PSB1bmRlZmluZWQgJiYgaW1hZ2VVcmwuaW5kZXhPZignZGF0YTonKSAhPT0gMClcbiAgICB7XG4gICAgICAgIGNyb3Nzb3JpZ2luID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBpZiAoIWJhc2VUZXh0dXJlKVxuICAgIHtcbiAgICAgICAgLy8gbmV3IEltYWdlKCkgYnJlYWtzIHRleCBsb2FkaW5nIGluIHNvbWUgdmVyc2lvbnMgb2YgQ2hyb21lLlxuICAgICAgICAvLyBTZWUgaHR0cHM6Ly9jb2RlLmdvb2dsZS5jb20vcC9jaHJvbWl1bS9pc3N1ZXMvZGV0YWlsP2lkPTIzODA3MVxuICAgICAgICB2YXIgaW1hZ2UgPSBuZXcgSW1hZ2UoKTsvL2RvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2ltZycpO1xuICAgICAgICBpZiAoY3Jvc3NvcmlnaW4pXG4gICAgICAgIHtcbiAgICAgICAgICAgIGltYWdlLmNyb3NzT3JpZ2luID0gJyc7XG4gICAgICAgIH1cblxuICAgICAgICBiYXNlVGV4dHVyZSA9IG5ldyBCYXNlVGV4dHVyZShpbWFnZSwgc2NhbGVNb2RlKTtcbiAgICAgICAgYmFzZVRleHR1cmUuaW1hZ2VVcmwgPSBpbWFnZVVybDtcblxuICAgICAgICBpbWFnZS5zcmMgPSBpbWFnZVVybDtcblxuICAgICAgICB1dGlscy5CYXNlVGV4dHVyZUNhY2hlW2ltYWdlVXJsXSA9IGJhc2VUZXh0dXJlO1xuXG4gICAgICAgIC8vIGlmIHRoZXJlIGlzIGFuIEAyeCBhdCB0aGUgZW5kIG9mIHRoZSB1cmwgd2UgYXJlIGdvaW5nIHRvIGFzc3VtZSBpdHMgYSBoaWdocmVzIGltYWdlXG4gICAgICAgIGJhc2VUZXh0dXJlLnJlc29sdXRpb24gPSB1dGlscy5nZXRSZXNvbHV0aW9uT2ZVcmwoaW1hZ2VVcmwpO1xuICAgIH1cblxuICAgIHJldHVybiBiYXNlVGV4dHVyZTtcbn07XG5cbi8qKlxuICogSGVscGVyIGZ1bmN0aW9uIHRoYXQgY3JlYXRlcyBhIGJhc2UgdGV4dHVyZSBmcm9tIHRoZSBnaXZlbiBjYW52YXMgZWxlbWVudC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAcGFyYW0gY2FudmFzIHtDYW52YXN9IFRoZSBjYW52YXMgZWxlbWVudCBzb3VyY2Ugb2YgdGhlIHRleHR1cmVcbiAqIEBwYXJhbSBzY2FsZU1vZGUge251bWJlcn0gU2VlIHtAbGluayBQSVhJLlNDQUxFX01PREVTfSBmb3IgcG9zc2libGUgdmFsdWVzXG4gKiBAcmV0dXJuIFBJWEkuQmFzZVRleHR1cmVcbiAqL1xuQmFzZVRleHR1cmUuZnJvbUNhbnZhcyA9IGZ1bmN0aW9uIChjYW52YXMsIHNjYWxlTW9kZSlcbntcbiAgICBpZiAoIWNhbnZhcy5fcGl4aUlkKVxuICAgIHtcbiAgICAgICAgY2FudmFzLl9waXhpSWQgPSAnY2FudmFzXycgKyB1dGlscy51aWQoKTtcbiAgICB9XG5cbiAgICB2YXIgYmFzZVRleHR1cmUgPSB1dGlscy5CYXNlVGV4dHVyZUNhY2hlW2NhbnZhcy5fcGl4aUlkXTtcblxuICAgIGlmICghYmFzZVRleHR1cmUpXG4gICAge1xuICAgICAgICBiYXNlVGV4dHVyZSA9IG5ldyBCYXNlVGV4dHVyZShjYW52YXMsIHNjYWxlTW9kZSk7XG4gICAgICAgIHV0aWxzLkJhc2VUZXh0dXJlQ2FjaGVbY2FudmFzLl9waXhpSWRdID0gYmFzZVRleHR1cmU7XG4gICAgfVxuXG4gICAgcmV0dXJuIGJhc2VUZXh0dXJlO1xufTtcbiIsInZhciBCYXNlVGV4dHVyZSA9IHJlcXVpcmUoJy4vQmFzZVRleHR1cmUnKSxcbiAgICBUZXh0dXJlID0gcmVxdWlyZSgnLi9UZXh0dXJlJyksXG4gICAgUmVuZGVyVGFyZ2V0ID0gcmVxdWlyZSgnLi4vcmVuZGVyZXJzL3dlYmdsL3V0aWxzL1JlbmRlclRhcmdldCcpLFxuICAgIEZpbHRlck1hbmFnZXIgPSByZXF1aXJlKCcuLi9yZW5kZXJlcnMvd2ViZ2wvbWFuYWdlcnMvRmlsdGVyTWFuYWdlcicpLFxuICAgIENhbnZhc0J1ZmZlciA9IHJlcXVpcmUoJy4uL3JlbmRlcmVycy9jYW52YXMvdXRpbHMvQ2FudmFzQnVmZmVyJyksXG4gICAgbWF0aCA9IHJlcXVpcmUoJy4uL21hdGgnKSxcbiAgICBDT05TVCA9IHJlcXVpcmUoJy4uL2NvbnN0JyksXG4gICAgdGVtcE1hdHJpeCA9IG5ldyBtYXRoLk1hdHJpeCgpO1xuXG4vKipcbiAqIEEgUmVuZGVyVGV4dHVyZSBpcyBhIHNwZWNpYWwgdGV4dHVyZSB0aGF0IGFsbG93cyBhbnkgUGl4aSBkaXNwbGF5IG9iamVjdCB0byBiZSByZW5kZXJlZCB0byBpdC5cbiAqXG4gKiBfX0hpbnRfXzogQWxsIERpc3BsYXlPYmplY3RzIChpLmUuIFNwcml0ZXMpIHRoYXQgcmVuZGVyIHRvIGEgUmVuZGVyVGV4dHVyZSBzaG91bGQgYmUgcHJlbG9hZGVkXG4gKiBvdGhlcndpc2UgYmxhY2sgcmVjdGFuZ2xlcyB3aWxsIGJlIGRyYXduIGluc3RlYWQuXG4gKlxuICogQSBSZW5kZXJUZXh0dXJlIHRha2VzIGEgc25hcHNob3Qgb2YgYW55IERpc3BsYXkgT2JqZWN0IGdpdmVuIHRvIGl0cyByZW5kZXIgbWV0aG9kLiBUaGUgcG9zaXRpb25cbiAqIGFuZCByb3RhdGlvbiBvZiB0aGUgZ2l2ZW4gRGlzcGxheSBPYmplY3RzIGlzIGlnbm9yZWQuIEZvciBleGFtcGxlOlxuICpcbiAqIGBgYGpzXG4gKiB2YXIgcmVuZGVyZXIgPSBQSVhJLmF1dG9EZXRlY3RSZW5kZXJlcigxMDI0LCAxMDI0LCB7IHZpZXc6IGNhbnZhcywgcmF0aW86IDEgfSk7XG4gKiB2YXIgcmVuZGVyVGV4dHVyZSA9IG5ldyBQSVhJLlJlbmRlclRleHR1cmUocmVuZGVyZXIsIDgwMCwgNjAwKTtcbiAqIHZhciBzcHJpdGUgPSBQSVhJLlNwcml0ZS5mcm9tSW1hZ2UoXCJzcGluT2JqXzAxLnBuZ1wiKTtcbiAqXG4gKiBzcHJpdGUucG9zaXRpb24ueCA9IDgwMC8yO1xuICogc3ByaXRlLnBvc2l0aW9uLnkgPSA2MDAvMjtcbiAqIHNwcml0ZS5hbmNob3IueCA9IDAuNTtcbiAqIHNwcml0ZS5hbmNob3IueSA9IDAuNTtcbiAqXG4gKiByZW5kZXJUZXh0dXJlLnJlbmRlcihzcHJpdGUpO1xuICogYGBgXG4gKlxuICogVGhlIFNwcml0ZSBpbiB0aGlzIGNhc2Ugd2lsbCBiZSByZW5kZXJlZCB0byBhIHBvc2l0aW9uIG9mIDAsMC4gVG8gcmVuZGVyIHRoaXMgc3ByaXRlIGF0IGl0cyBhY3R1YWxcbiAqIHBvc2l0aW9uIGEgQ29udGFpbmVyIHNob3VsZCBiZSB1c2VkOlxuICpcbiAqIGBgYGpzXG4gKiB2YXIgZG9jID0gbmV3IFBJWEkuQ29udGFpbmVyKCk7XG4gKlxuICogZG9jLmFkZENoaWxkKHNwcml0ZSk7XG4gKlxuICogcmVuZGVyVGV4dHVyZS5yZW5kZXIoZG9jKTsgIC8vIFJlbmRlcnMgdG8gY2VudGVyIG9mIHJlbmRlclRleHR1cmVcbiAqIGBgYFxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5UZXh0dXJlXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLkNhbnZhc1JlbmRlcmVyfFBJWEkuV2ViR0xSZW5kZXJlcn0gVGhlIHJlbmRlcmVyIHVzZWQgZm9yIHRoaXMgUmVuZGVyVGV4dHVyZVxuICogQHBhcmFtIFt3aWR0aD0xMDBdIHtudW1iZXJ9IFRoZSB3aWR0aCBvZiB0aGUgcmVuZGVyIHRleHR1cmVcbiAqIEBwYXJhbSBbaGVpZ2h0PTEwMF0ge251bWJlcn0gVGhlIGhlaWdodCBvZiB0aGUgcmVuZGVyIHRleHR1cmVcbiAqIEBwYXJhbSBbc2NhbGVNb2RlXSB7bnVtYmVyfSBTZWUge0BsaW5rIFBJWEkuU0NBTEVfTU9ERVN9IGZvciBwb3NzaWJsZSB2YWx1ZXNcbiAqIEBwYXJhbSBbcmVzb2x1dGlvbj0xXSB7bnVtYmVyfSBUaGUgcmVzb2x1dGlvbiBvZiB0aGUgdGV4dHVyZSBiZWluZyBnZW5lcmF0ZWRcbiAqL1xuZnVuY3Rpb24gUmVuZGVyVGV4dHVyZShyZW5kZXJlciwgd2lkdGgsIGhlaWdodCwgc2NhbGVNb2RlLCByZXNvbHV0aW9uKVxue1xuICAgIGlmICghcmVuZGVyZXIpXG4gICAge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1VuYWJsZSB0byBjcmVhdGUgUmVuZGVyVGV4dHVyZSwgeW91IG11c3QgcGFzcyBhIHJlbmRlcmVyIGludG8gdGhlIGNvbnN0cnVjdG9yLicpO1xuICAgIH1cblxuICAgIHdpZHRoID0gd2lkdGggfHwgMTAwO1xuICAgIGhlaWdodCA9IGhlaWdodCB8fCAxMDA7XG4gICAgcmVzb2x1dGlvbiA9IHJlc29sdXRpb24gfHwgQ09OU1QuUkVTT0xVVElPTjtcblxuICAgIC8qKlxuICAgICAqIFRoZSBiYXNlIHRleHR1cmUgb2JqZWN0IHRoYXQgdGhpcyB0ZXh0dXJlIHVzZXNcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge0Jhc2VUZXh0dXJlfVxuICAgICAqL1xuICAgIHZhciBiYXNlVGV4dHVyZSA9IG5ldyBCYXNlVGV4dHVyZSgpO1xuICAgIGJhc2VUZXh0dXJlLndpZHRoID0gd2lkdGg7XG4gICAgYmFzZVRleHR1cmUuaGVpZ2h0ID0gaGVpZ2h0O1xuICAgIGJhc2VUZXh0dXJlLnJlc29sdXRpb24gPSByZXNvbHV0aW9uO1xuICAgIGJhc2VUZXh0dXJlLnNjYWxlTW9kZSA9IHNjYWxlTW9kZSB8fCBDT05TVC5TQ0FMRV9NT0RFUy5ERUZBVUxUO1xuICAgIGJhc2VUZXh0dXJlLmhhc0xvYWRlZCA9IHRydWU7XG5cblxuICAgIFRleHR1cmUuY2FsbCh0aGlzLFxuICAgICAgICBiYXNlVGV4dHVyZSxcbiAgICAgICAgbmV3IG1hdGguUmVjdGFuZ2xlKDAsIDAsIHdpZHRoLCBoZWlnaHQpXG4gICAgKTtcblxuXG4gICAgLyoqXG4gICAgICogVGhlIHdpdGggb2YgdGhlIHJlbmRlciB0ZXh0dXJlXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy53aWR0aCA9IHdpZHRoO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGhlaWdodCBvZiB0aGUgcmVuZGVyIHRleHR1cmVcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLmhlaWdodCA9IGhlaWdodDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBSZXNvbHV0aW9uIG9mIHRoZSB0ZXh0dXJlLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMucmVzb2x1dGlvbiA9IHJlc29sdXRpb247XG5cbiAgICAvKipcbiAgICAgKiBEcmF3L3JlbmRlciB0aGUgZ2l2ZW4gRGlzcGxheU9iamVjdCBvbnRvIHRoZSB0ZXh0dXJlLlxuICAgICAqXG4gICAgICogVGhlIGRpc3BsYXlPYmplY3QgYW5kIGRlc2NlbmRlbnRzIGFyZSB0cmFuc2Zvcm1lZCBkdXJpbmcgdGhpcyBvcGVyYXRpb24uXG4gICAgICogSWYgYHVwZGF0ZVRyYW5zZm9ybWAgaXMgdHJ1ZSB0aGVuIHRoZSB0cmFuc2Zvcm1hdGlvbnMgd2lsbCBiZSByZXN0b3JlZCBiZWZvcmUgdGhlXG4gICAgICogbWV0aG9kIHJldHVybnMuIE90aGVyd2lzZSBpdCBpcyB1cCB0byB0aGUgY2FsbGluZyBjb2RlIHRvIGNvcnJlY3RseSB1c2Ugb3IgcmVzZXRcbiAgICAgKiB0aGUgdHJhbnNmb3JtZWQgZGlzcGxheSBvYmplY3RzLlxuICAgICAqXG4gICAgICogVGhlIGRpc3BsYXkgb2JqZWN0IGlzIGFsd2F5cyByZW5kZXJlZCB3aXRoIGEgd29ybGRBbHBoYSB2YWx1ZSBvZiAxLlxuICAgICAqXG4gICAgICogQG1ldGhvZFxuICAgICAqIEBwYXJhbSBkaXNwbGF5T2JqZWN0IHtQSVhJLkRpc3BsYXlPYmplY3R9IFRoZSBkaXNwbGF5IG9iamVjdCB0byByZW5kZXIgdGhpcyB0ZXh0dXJlIG9uXG4gICAgICogQHBhcmFtIFttYXRyaXhdIHtQSVhJLk1hdHJpeH0gT3B0aW9uYWwgbWF0cml4IHRvIGFwcGx5IHRvIHRoZSBkaXNwbGF5IG9iamVjdCBiZWZvcmUgcmVuZGVyaW5nLlxuICAgICAqIEBwYXJhbSBbY2xlYXI9ZmFsc2VdIHtib29sZWFufSBJZiB0cnVlIHRoZSB0ZXh0dXJlIHdpbGwgYmUgY2xlYXJlZCBiZWZvcmUgdGhlIGRpc3BsYXlPYmplY3QgaXMgZHJhd25cbiAgICAgKiBAcGFyYW0gW3VwZGF0ZVRyYW5zZm9ybT10cnVlXSB7Ym9vbGVhbn0gSWYgdHJ1ZSB0aGUgZGlzcGxheU9iamVjdCdzIHdvcmxkVHJhbnNmb3JtL3dvcmxkQWxwaGEgYW5kIGFsbCBjaGlsZHJlblxuICAgICAqICB0cmFuc2Zvcm1hdGlvbnMgd2lsbCBiZSByZXN0b3JlZC4gTm90IHJlc3RvcmluZyB0aGlzIGluZm9ybWF0aW9uIHdpbGwgYmUgYSBsaXR0bGUgZmFzdGVyLlxuICAgICAqL1xuICAgIHRoaXMucmVuZGVyID0gbnVsbDtcblxuICAgIC8qKlxuICAgICAqIFRoZSByZW5kZXJlciB0aGlzIFJlbmRlclRleHR1cmUgdXNlcy4gQSBSZW5kZXJUZXh0dXJlIGNhbiBvbmx5IGJlbG9uZyB0byBvbmUgcmVuZGVyZXIgYXQgdGhlIG1vbWVudCBpZiBpdHMgd2ViR0wuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLkNhbnZhc1JlbmRlcmVyfFBJWEkuV2ViR0xSZW5kZXJlcn1cbiAgICAgKi9cbiAgICB0aGlzLnJlbmRlcmVyID0gcmVuZGVyZXI7XG5cbiAgICBpZiAodGhpcy5yZW5kZXJlci50eXBlID09PSBDT05TVC5SRU5ERVJFUl9UWVBFLldFQkdMKVxuICAgIHtcbiAgICAgICAgdmFyIGdsID0gdGhpcy5yZW5kZXJlci5nbDtcblxuICAgICAgICB0aGlzLnRleHR1cmVCdWZmZXIgPSBuZXcgUmVuZGVyVGFyZ2V0KGdsLCB0aGlzLndpZHRoLCB0aGlzLmhlaWdodCwgYmFzZVRleHR1cmUuc2NhbGVNb2RlLCB0aGlzLnJlc29sdXRpb24pOy8vLCB0aGlzLmJhc2VUZXh0dXJlLnNjYWxlTW9kZSk7XG4gICAgICAgIHRoaXMuYmFzZVRleHR1cmUuX2dsVGV4dHVyZXNbZ2wuaWRdID0gdGhpcy50ZXh0dXJlQnVmZmVyLnRleHR1cmU7XG5cbiAgICAgICAgLy9UT0RPIHJlZmFjdG9yIGZpbHRlciBtYW5hZ2VyLi4gYXMgcmVhbGx5IGl0cyBubyBsb25nZXIgYSBtYW5hZ2VyIGlmIHdlIHVzZSBpdCBoZXJlLi5cbiAgICAgICAgdGhpcy5maWx0ZXJNYW5hZ2VyID0gbmV3IEZpbHRlck1hbmFnZXIodGhpcy5yZW5kZXJlcik7XG4gICAgICAgIHRoaXMuZmlsdGVyTWFuYWdlci5vbkNvbnRleHRDaGFuZ2UoKTtcbiAgICAgICAgdGhpcy5maWx0ZXJNYW5hZ2VyLnJlc2l6ZSh3aWR0aCwgaGVpZ2h0KTtcbiAgICAgICAgdGhpcy5yZW5kZXIgPSB0aGlzLnJlbmRlcldlYkdMO1xuXG4gICAgICAgIC8vIHRoZSBjcmVhdGlvbiBvZiBhIGZpbHRlciBtYW5hZ2VyIHVuYmluZHMgdGhlIGJ1ZmZlcnMuLlxuICAgICAgICB0aGlzLnJlbmRlcmVyLmN1cnJlbnRSZW5kZXJlci5zdGFydCgpO1xuICAgICAgICB0aGlzLnJlbmRlcmVyLmN1cnJlbnRSZW5kZXJUYXJnZXQuYWN0aXZhdGUoKTtcbiAgICB9XG4gICAgZWxzZVxuICAgIHtcblxuICAgICAgICB0aGlzLnJlbmRlciA9IHRoaXMucmVuZGVyQ2FudmFzO1xuICAgICAgICB0aGlzLnRleHR1cmVCdWZmZXIgPSBuZXcgQ2FudmFzQnVmZmVyKHRoaXMud2lkdGgqIHRoaXMucmVzb2x1dGlvbiwgdGhpcy5oZWlnaHQqIHRoaXMucmVzb2x1dGlvbik7XG4gICAgICAgIHRoaXMuYmFzZVRleHR1cmUuc291cmNlID0gdGhpcy50ZXh0dXJlQnVmZmVyLmNhbnZhcztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqL1xuICAgIHRoaXMudmFsaWQgPSB0cnVlO1xuXG4gICAgdGhpcy5fdXBkYXRlVXZzKCk7XG59XG5cblJlbmRlclRleHR1cmUucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShUZXh0dXJlLnByb3RvdHlwZSk7XG5SZW5kZXJUZXh0dXJlLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFJlbmRlclRleHR1cmU7XG5tb2R1bGUuZXhwb3J0cyA9IFJlbmRlclRleHR1cmU7XG5cbi8qKlxuICogUmVzaXplcyB0aGUgUmVuZGVyVGV4dHVyZS5cbiAqXG4gKiBAcGFyYW0gd2lkdGgge251bWJlcn0gVGhlIHdpZHRoIHRvIHJlc2l6ZSB0by5cbiAqIEBwYXJhbSBoZWlnaHQge251bWJlcn0gVGhlIGhlaWdodCB0byByZXNpemUgdG8uXG4gKiBAcGFyYW0gdXBkYXRlQmFzZSB7Ym9vbGVhbn0gU2hvdWxkIHRoZSBiYXNlVGV4dHVyZS53aWR0aCBhbmQgaGVpZ2h0IHZhbHVlcyBiZSByZXNpemVkIGFzIHdlbGw/XG4gKi9cblJlbmRlclRleHR1cmUucHJvdG90eXBlLnJlc2l6ZSA9IGZ1bmN0aW9uICh3aWR0aCwgaGVpZ2h0LCB1cGRhdGVCYXNlKVxue1xuICAgIGlmICh3aWR0aCA9PT0gdGhpcy53aWR0aCAmJiBoZWlnaHQgPT09IHRoaXMuaGVpZ2h0KVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMudmFsaWQgPSAod2lkdGggPiAwICYmIGhlaWdodCA+IDApO1xuXG4gICAgdGhpcy53aWR0aCA9IHRoaXMuX2ZyYW1lLndpZHRoID0gdGhpcy5jcm9wLndpZHRoID0gd2lkdGg7XG4gICAgdGhpcy5oZWlnaHQgPSAgdGhpcy5fZnJhbWUuaGVpZ2h0ID0gdGhpcy5jcm9wLmhlaWdodCA9IGhlaWdodDtcblxuICAgIGlmICh1cGRhdGVCYXNlKVxuICAgIHtcbiAgICAgICAgdGhpcy5iYXNlVGV4dHVyZS53aWR0aCA9IHRoaXMud2lkdGg7XG4gICAgICAgIHRoaXMuYmFzZVRleHR1cmUuaGVpZ2h0ID0gdGhpcy5oZWlnaHQ7XG4gICAgfVxuXG4gICAgaWYgKCF0aGlzLnZhbGlkKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMudGV4dHVyZUJ1ZmZlci5yZXNpemUodGhpcy53aWR0aCwgdGhpcy5oZWlnaHQpO1xuXG4gICAgaWYodGhpcy5maWx0ZXJNYW5hZ2VyKVxuICAgIHtcbiAgICAgICAgdGhpcy5maWx0ZXJNYW5hZ2VyLnJlc2l6ZSh0aGlzLndpZHRoLCB0aGlzLmhlaWdodCk7XG4gICAgfVxufTtcblxuLyoqXG4gKiBDbGVhcnMgdGhlIFJlbmRlclRleHR1cmUuXG4gKlxuICovXG5SZW5kZXJUZXh0dXJlLnByb3RvdHlwZS5jbGVhciA9IGZ1bmN0aW9uICgpXG57XG4gICAgaWYgKCF0aGlzLnZhbGlkKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnJlbmRlcmVyLnR5cGUgPT09IENPTlNULlJFTkRFUkVSX1RZUEUuV0VCR0wpXG4gICAge1xuICAgICAgICB0aGlzLnJlbmRlcmVyLmdsLmJpbmRGcmFtZWJ1ZmZlcih0aGlzLnJlbmRlcmVyLmdsLkZSQU1FQlVGRkVSLCB0aGlzLnRleHR1cmVCdWZmZXIuZnJhbWVCdWZmZXIpO1xuICAgIH1cblxuICAgIHRoaXMudGV4dHVyZUJ1ZmZlci5jbGVhcigpO1xufTtcblxuLyoqXG4gKiBJbnRlcm5hbCBtZXRob2QgYXNzaWduZWQgdG8gdGhlIGByZW5kZXJgIHByb3BlcnR5IGlmIHVzaW5nIGEgQ2FudmFzUmVuZGVyZXIuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSBkaXNwbGF5T2JqZWN0IHtQSVhJLkRpc3BsYXlPYmplY3R9IFRoZSBkaXNwbGF5IG9iamVjdCB0byByZW5kZXIgdGhpcyB0ZXh0dXJlIG9uXG4gKiBAcGFyYW0gW21hdHJpeF0ge1BJWEkuTWF0cml4fSBPcHRpb25hbCBtYXRyaXggdG8gYXBwbHkgdG8gdGhlIGRpc3BsYXkgb2JqZWN0IGJlZm9yZSByZW5kZXJpbmcuXG4gKiBAcGFyYW0gW2NsZWFyPWZhbHNlXSB7Ym9vbGVhbn0gSWYgdHJ1ZSB0aGUgdGV4dHVyZSB3aWxsIGJlIGNsZWFyZWQgYmVmb3JlIHRoZSBkaXNwbGF5T2JqZWN0IGlzIGRyYXduXG4gKiBAcGFyYW0gW3VwZGF0ZVRyYW5zZm9ybT10cnVlXSB7Ym9vbGVhbn0gSWYgdHJ1ZSB0aGUgZGlzcGxheU9iamVjdCdzIHdvcmxkVHJhbnNmb3JtL3dvcmxkQWxwaGEgYW5kIGFsbCBjaGlsZHJlblxuICogIHRyYW5zZm9ybWF0aW9ucyB3aWxsIGJlIHJlc3RvcmVkLiBOb3QgcmVzdG9yaW5nIHRoaXMgaW5mb3JtYXRpb24gd2lsbCBiZSBhIGxpdHRsZSBmYXN0ZXIuXG4gKi9cblJlbmRlclRleHR1cmUucHJvdG90eXBlLnJlbmRlcldlYkdMID0gZnVuY3Rpb24gKGRpc3BsYXlPYmplY3QsIG1hdHJpeCwgY2xlYXIsIHVwZGF0ZVRyYW5zZm9ybSlcbntcbiAgICBpZiAoIXRoaXMudmFsaWQpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG5cbiAgICB1cGRhdGVUcmFuc2Zvcm0gPSAodXBkYXRlVHJhbnNmb3JtICE9PSB1bmRlZmluZWQpID8gdXBkYXRlVHJhbnNmb3JtIDogdHJ1ZTsvLyF1cGRhdGVUcmFuc2Zvcm07XG5cbiAgICB0aGlzLnRleHR1cmVCdWZmZXIudHJhbnNmb3JtID0gbWF0cml4O1xuXG4gICAgLy9UT0RPIG5vdCBhIGZhbiB0aGF0IHRoaXMgaXMgaGVyZS4uLiBpdCB3aWxsIG1vdmUhXG4gICAgdGhpcy50ZXh0dXJlQnVmZmVyLmFjdGl2YXRlKCk7XG5cbiAgICAvLyBzZXRXb3JsZCBBbHBoYSB0byBlbnN1cmUgdGhhdCB0aGUgb2JqZWN0IGlzIHJlbmRlcmVyIGF0IGZ1bGwgb3BhY2l0eVxuICAgIGRpc3BsYXlPYmplY3Qud29ybGRBbHBoYSA9IDE7XG5cbiAgICBpZiAodXBkYXRlVHJhbnNmb3JtKVxuICAgIHtcblxuICAgICAgICAvLyByZXNldCB0aGUgbWF0cml4IG9mIHRoZSBkaXNwbGF0eU9iamVjdC4uXG4gICAgICAgIGRpc3BsYXlPYmplY3Qud29ybGRUcmFuc2Zvcm0uaWRlbnRpdHkoKTtcblxuICAgICAgICBkaXNwbGF5T2JqZWN0LmN1cnJlbnRCb3VuZHMgPSBudWxsO1xuXG4gICAgICAgIC8vIFRpbWUgdG8gdXBkYXRlIGFsbCB0aGUgY2hpbGRyZW4gb2YgdGhlIGRpc3BsYXlPYmplY3Qgd2l0aCB0aGUgbmV3IG1hdHJpeC4uXG4gICAgICAgIHZhciBjaGlsZHJlbiA9IGRpc3BsYXlPYmplY3QuY2hpbGRyZW47XG4gICAgICAgIHZhciBpLCBqO1xuXG4gICAgICAgIGZvciAoaSA9IDAsIGogPSBjaGlsZHJlbi5sZW5ndGg7IGkgPCBqOyArK2kpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNoaWxkcmVuW2ldLnVwZGF0ZVRyYW5zZm9ybSgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy9UT0RPIHJlbmFtZSB0ZXh0dXJlQnVmZmVyIHRvIHJlbmRlclRhcmdldC4uXG4gICAgdmFyIHRlbXAgPSAgdGhpcy5yZW5kZXJlci5maWx0ZXJNYW5hZ2VyO1xuXG4gICAgdGhpcy5yZW5kZXJlci5maWx0ZXJNYW5hZ2VyID0gdGhpcy5maWx0ZXJNYW5hZ2VyO1xuICAgIHRoaXMucmVuZGVyZXIucmVuZGVyRGlzcGxheU9iamVjdChkaXNwbGF5T2JqZWN0LCB0aGlzLnRleHR1cmVCdWZmZXIsIGNsZWFyKTtcblxuICAgIHRoaXMucmVuZGVyZXIuZmlsdGVyTWFuYWdlciA9IHRlbXA7XG59O1xuXG5cbi8qKlxuICogSW50ZXJuYWwgbWV0aG9kIGFzc2lnbmVkIHRvIHRoZSBgcmVuZGVyYCBwcm9wZXJ0eSBpZiB1c2luZyBhIENhbnZhc1JlbmRlcmVyLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0gZGlzcGxheU9iamVjdCB7UElYSS5EaXNwbGF5T2JqZWN0fSBUaGUgZGlzcGxheSBvYmplY3QgdG8gcmVuZGVyIHRoaXMgdGV4dHVyZSBvblxuICogQHBhcmFtIFttYXRyaXhdIHtQSVhJLk1hdHJpeH0gT3B0aW9uYWwgbWF0cml4IHRvIGFwcGx5IHRvIHRoZSBkaXNwbGF5IG9iamVjdCBiZWZvcmUgcmVuZGVyaW5nLlxuICogQHBhcmFtIFtjbGVhcl0ge2Jvb2xlYW59IElmIHRydWUgdGhlIHRleHR1cmUgd2lsbCBiZSBjbGVhcmVkIGJlZm9yZSB0aGUgZGlzcGxheU9iamVjdCBpcyBkcmF3blxuICovXG5SZW5kZXJUZXh0dXJlLnByb3RvdHlwZS5yZW5kZXJDYW52YXMgPSBmdW5jdGlvbiAoZGlzcGxheU9iamVjdCwgbWF0cml4LCBjbGVhciwgdXBkYXRlVHJhbnNmb3JtKVxue1xuICAgIGlmICghdGhpcy52YWxpZClcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB1cGRhdGVUcmFuc2Zvcm0gPSAhIXVwZGF0ZVRyYW5zZm9ybTtcblxuICAgIHZhciB3dCA9IHRlbXBNYXRyaXg7XG5cbiAgICB3dC5pZGVudGl0eSgpO1xuXG4gICAgaWYgKG1hdHJpeClcbiAgICB7XG4gICAgICAgIHd0LmFwcGVuZChtYXRyaXgpO1xuICAgIH1cblxuICAgIHZhciBjYWNoZWRXdCA9IGRpc3BsYXlPYmplY3Qud29ybGRUcmFuc2Zvcm07XG4gICAgZGlzcGxheU9iamVjdC53b3JsZFRyYW5zZm9ybSA9IHd0O1xuXG4gICAgLy8gc2V0V29ybGQgQWxwaGEgdG8gZW5zdXJlIHRoYXQgdGhlIG9iamVjdCBpcyByZW5kZXJlciBhdCBmdWxsIG9wYWNpdHlcbiAgICBkaXNwbGF5T2JqZWN0LndvcmxkQWxwaGEgPSAxO1xuXG4gICAgLy8gVGltZSB0byB1cGRhdGUgYWxsIHRoZSBjaGlsZHJlbiBvZiB0aGUgZGlzcGxheU9iamVjdCB3aXRoIHRoZSBuZXcgbWF0cml4Li5cbiAgICB2YXIgY2hpbGRyZW4gPSBkaXNwbGF5T2JqZWN0LmNoaWxkcmVuO1xuICAgIHZhciBpLCBqO1xuXG4gICAgZm9yIChpID0gMCwgaiA9IGNoaWxkcmVuLmxlbmd0aDsgaSA8IGo7ICsraSlcbiAgICB7XG4gICAgICAgIGNoaWxkcmVuW2ldLnVwZGF0ZVRyYW5zZm9ybSgpO1xuICAgIH1cblxuICAgIGlmIChjbGVhcilcbiAgICB7XG4gICAgICAgIHRoaXMudGV4dHVyZUJ1ZmZlci5jbGVhcigpO1xuICAgIH1cblxuXG4vLyAgICB0aGlzLnRleHR1cmVCdWZmZXIuXG4gICAgdmFyIGNvbnRleHQgPSB0aGlzLnRleHR1cmVCdWZmZXIuY29udGV4dDtcblxuICAgIHZhciByZWFsUmVzb2x1dGlvbiA9IHRoaXMucmVuZGVyZXIucmVzb2x1dGlvbjtcblxuICAgIHRoaXMucmVuZGVyZXIucmVzb2x1dGlvbiA9IHRoaXMucmVzb2x1dGlvbjtcblxuICAgIHRoaXMucmVuZGVyZXIucmVuZGVyRGlzcGxheU9iamVjdChkaXNwbGF5T2JqZWN0LCBjb250ZXh0KTtcblxuICAgIHRoaXMucmVuZGVyZXIucmVzb2x1dGlvbiA9IHJlYWxSZXNvbHV0aW9uO1xuXG4gICAgaWYoZGlzcGxheU9iamVjdC53b3JsZFRyYW5zZm9ybSA9PT0gd3QpXG4gICAge1xuICAgICAgICAvLyBmaXhlcyBjYWNoZUFzQml0bWFwIEhhcHBlbmluZyBkdXJpbmcgdGhlIGFib3ZlLi5cbiAgICAgICAgZGlzcGxheU9iamVjdC53b3JsZFRyYW5zZm9ybSA9IGNhY2hlZFd0O1xuICAgIH1cblxufTtcblxuLyoqXG4gKiBEZXN0cm95cyB0aGlzIHRleHR1cmVcbiAqXG4gKiBAcGFyYW0gZGVzdHJveUJhc2Uge2Jvb2xlYW59IFdoZXRoZXIgdG8gZGVzdHJveSB0aGUgYmFzZSB0ZXh0dXJlIGFzIHdlbGxcbiAqL1xuUmVuZGVyVGV4dHVyZS5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uICgpXG57XG4gICAgVGV4dHVyZS5wcm90b3R5cGUuZGVzdHJveS5jYWxsKHRoaXMsIHRydWUpO1xuXG4gICAgdGhpcy50ZXh0dXJlQnVmZmVyLmRlc3Ryb3koKTtcblxuICAgIC8vIGRlc3Ryb3kgdGhlIGZpbHRlcm1hbmFnZXIuLlxuICAgIGlmKHRoaXMuZmlsdGVyTWFuYWdlcilcbiAgICB7XG4gICAgICAgIHRoaXMuZmlsdGVyTWFuYWdlci5kZXN0cm95KCk7XG4gICAgfVxuXG4gICAgdGhpcy5yZW5kZXJlciA9IG51bGw7XG59O1xuXG4vKipcbiAqIFdpbGwgcmV0dXJuIGEgSFRNTCBJbWFnZSBvZiB0aGUgdGV4dHVyZVxuICpcbiAqIEByZXR1cm4ge0ltYWdlfVxuICovXG5SZW5kZXJUZXh0dXJlLnByb3RvdHlwZS5nZXRJbWFnZSA9IGZ1bmN0aW9uICgpXG57XG4gICAgdmFyIGltYWdlID0gbmV3IEltYWdlKCk7XG4gICAgaW1hZ2Uuc3JjID0gdGhpcy5nZXRCYXNlNjQoKTtcbiAgICByZXR1cm4gaW1hZ2U7XG59O1xuXG4vKipcbiAqIFdpbGwgcmV0dXJuIGEgYSBiYXNlNjQgZW5jb2RlZCBzdHJpbmcgb2YgdGhpcyB0ZXh0dXJlLiBJdCB3b3JrcyBieSBjYWxsaW5nIFJlbmRlclRleHR1cmUuZ2V0Q2FudmFzIGFuZCB0aGVuIHJ1bm5pbmcgdG9EYXRhVVJMIG9uIHRoYXQuXG4gKlxuICogQHJldHVybiB7c3RyaW5nfSBBIGJhc2U2NCBlbmNvZGVkIHN0cmluZyBvZiB0aGUgdGV4dHVyZS5cbiAqL1xuUmVuZGVyVGV4dHVyZS5wcm90b3R5cGUuZ2V0QmFzZTY0ID0gZnVuY3Rpb24gKClcbntcbiAgICByZXR1cm4gdGhpcy5nZXRDYW52YXMoKS50b0RhdGFVUkwoKTtcbn07XG5cbi8qKlxuICogQ3JlYXRlcyBhIENhbnZhcyBlbGVtZW50LCByZW5kZXJzIHRoaXMgUmVuZGVyVGV4dHVyZSB0byBpdCBhbmQgdGhlbiByZXR1cm5zIGl0LlxuICpcbiAqIEByZXR1cm4ge0hUTUxDYW52YXNFbGVtZW50fSBBIENhbnZhcyBlbGVtZW50IHdpdGggdGhlIHRleHR1cmUgcmVuZGVyZWQgb24uXG4gKi9cblJlbmRlclRleHR1cmUucHJvdG90eXBlLmdldENhbnZhcyA9IGZ1bmN0aW9uICgpXG57XG4gICAgaWYgKHRoaXMucmVuZGVyZXIudHlwZSA9PT0gQ09OU1QuUkVOREVSRVJfVFlQRS5XRUJHTClcbiAgICB7XG4gICAgICAgIHZhciBnbCA9IHRoaXMucmVuZGVyZXIuZ2w7XG4gICAgICAgIHZhciB3aWR0aCA9IHRoaXMudGV4dHVyZUJ1ZmZlci5zaXplLndpZHRoO1xuICAgICAgICB2YXIgaGVpZ2h0ID0gdGhpcy50ZXh0dXJlQnVmZmVyLnNpemUuaGVpZ2h0O1xuXG4gICAgICAgIHZhciB3ZWJHTFBpeGVscyA9IG5ldyBVaW50OEFycmF5KDQgKiB3aWR0aCAqIGhlaWdodCk7XG5cbiAgICAgICAgZ2wuYmluZEZyYW1lYnVmZmVyKGdsLkZSQU1FQlVGRkVSLCB0aGlzLnRleHR1cmVCdWZmZXIuZnJhbWVCdWZmZXIpO1xuICAgICAgICBnbC5yZWFkUGl4ZWxzKDAsIDAsIHdpZHRoLCBoZWlnaHQsIGdsLlJHQkEsIGdsLlVOU0lHTkVEX0JZVEUsIHdlYkdMUGl4ZWxzKTtcbiAgICAgICAgZ2wuYmluZEZyYW1lYnVmZmVyKGdsLkZSQU1FQlVGRkVSLCBudWxsKTtcblxuICAgICAgICB2YXIgdGVtcENhbnZhcyA9IG5ldyBDYW52YXNCdWZmZXIod2lkdGgsIGhlaWdodCk7XG4gICAgICAgIHZhciBjYW52YXNEYXRhID0gdGVtcENhbnZhcy5jb250ZXh0LmdldEltYWdlRGF0YSgwLCAwLCB3aWR0aCwgaGVpZ2h0KTtcbiAgICAgICAgY2FudmFzRGF0YS5kYXRhLnNldCh3ZWJHTFBpeGVscyk7XG5cbiAgICAgICAgdGVtcENhbnZhcy5jb250ZXh0LnB1dEltYWdlRGF0YShjYW52YXNEYXRhLCAwLCAwKTtcblxuICAgICAgICByZXR1cm4gdGVtcENhbnZhcy5jYW52YXM7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHJldHVybiB0aGlzLnRleHR1cmVCdWZmZXIuY2FudmFzO1xuICAgIH1cbn07XG5cbi8qKlxuICogV2lsbCByZXR1cm4gYSBvbmUtZGltZW5zaW9uYWwgYXJyYXkgY29udGFpbmluZyB0aGUgcGl4ZWwgZGF0YSBvZiB0aGUgZW50aXJlIHRleHR1cmUgaW4gUkdCQSBvcmRlciwgd2l0aCBpbnRlZ2VyIHZhbHVlcyBiZXR3ZWVuIDAgYW5kIDI1NSAoaW5jbHVkZWQpLlxuICpcbiAqIEByZXR1cm4ge1VpbnQ4Q2xhbXBlZEFycmF5fVxuICovXG5SZW5kZXJUZXh0dXJlLnByb3RvdHlwZS5nZXRQaXhlbHMgPSBmdW5jdGlvbiAoKVxue1xuICAgIHZhciB3aWR0aCwgaGVpZ2h0O1xuXG4gICAgaWYgKHRoaXMucmVuZGVyZXIudHlwZSA9PT0gQ09OU1QuUkVOREVSRVJfVFlQRS5XRUJHTClcbiAgICB7XG4gICAgICAgIHZhciBnbCA9IHRoaXMucmVuZGVyZXIuZ2w7XG4gICAgICAgIHdpZHRoID0gdGhpcy50ZXh0dXJlQnVmZmVyLnNpemUud2lkdGg7XG4gICAgICAgIGhlaWdodCA9IHRoaXMudGV4dHVyZUJ1ZmZlci5zaXplLmhlaWdodDtcblxuICAgICAgICB2YXIgd2ViR0xQaXhlbHMgPSBuZXcgVWludDhBcnJheSg0ICogd2lkdGggKiBoZWlnaHQpO1xuXG4gICAgICAgIGdsLmJpbmRGcmFtZWJ1ZmZlcihnbC5GUkFNRUJVRkZFUiwgdGhpcy50ZXh0dXJlQnVmZmVyLmZyYW1lQnVmZmVyKTtcbiAgICAgICAgZ2wucmVhZFBpeGVscygwLCAwLCB3aWR0aCwgaGVpZ2h0LCBnbC5SR0JBLCBnbC5VTlNJR05FRF9CWVRFLCB3ZWJHTFBpeGVscyk7XG4gICAgICAgIGdsLmJpbmRGcmFtZWJ1ZmZlcihnbC5GUkFNRUJVRkZFUiwgbnVsbCk7XG5cbiAgICAgICAgcmV0dXJuIHdlYkdMUGl4ZWxzO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICB3aWR0aCA9IHRoaXMudGV4dHVyZUJ1ZmZlci5jYW52YXMud2lkdGg7XG4gICAgICAgIGhlaWdodCA9IHRoaXMudGV4dHVyZUJ1ZmZlci5jYW52YXMuaGVpZ2h0O1xuXG4gICAgICAgIHJldHVybiB0aGlzLnRleHR1cmVCdWZmZXIuY2FudmFzLmdldENvbnRleHQoJzJkJykuZ2V0SW1hZ2VEYXRhKDAsIDAsIHdpZHRoLCBoZWlnaHQpLmRhdGE7XG4gICAgfVxufTtcblxuLyoqXG4gKiBXaWxsIHJldHVybiBhIG9uZS1kaW1lbnNpb25hbCBhcnJheSBjb250YWluaW5nIHRoZSBwaXhlbCBkYXRhIG9mIGEgcGl4ZWwgd2l0aGluIHRoZSB0ZXh0dXJlIGluIFJHQkEgb3JkZXIsIHdpdGggaW50ZWdlciB2YWx1ZXMgYmV0d2VlbiAwIGFuZCAyNTUgKGluY2x1ZGVkKS5cbiAqXG4gKiBAcGFyYW0geCB7bnVtYmVyfSBUaGUgeCBjb29yZGluYXRlIG9mIHRoZSBwaXhlbCB0byByZXRyaWV2ZS5cbiAqIEBwYXJhbSB5IHtudW1iZXJ9IFRoZSB5IGNvb3JkaW5hdGUgb2YgdGhlIHBpeGVsIHRvIHJldHJpZXZlLlxuICogQHJldHVybiB7VWludDhDbGFtcGVkQXJyYXl9XG4gKi9cblJlbmRlclRleHR1cmUucHJvdG90eXBlLmdldFBpeGVsID0gZnVuY3Rpb24gKHgsIHkpXG57XG4gICAgaWYgKHRoaXMucmVuZGVyZXIudHlwZSA9PT0gQ09OU1QuUkVOREVSRVJfVFlQRS5XRUJHTClcbiAgICB7XG4gICAgICAgIHZhciBnbCA9IHRoaXMucmVuZGVyZXIuZ2w7XG5cbiAgICAgICAgdmFyIHdlYkdMUGl4ZWxzID0gbmV3IFVpbnQ4QXJyYXkoNCk7XG5cbiAgICAgICAgZ2wuYmluZEZyYW1lYnVmZmVyKGdsLkZSQU1FQlVGRkVSLCB0aGlzLnRleHR1cmVCdWZmZXIuZnJhbWVCdWZmZXIpO1xuICAgICAgICBnbC5yZWFkUGl4ZWxzKHgsIHksIDEsIDEsIGdsLlJHQkEsIGdsLlVOU0lHTkVEX0JZVEUsIHdlYkdMUGl4ZWxzKTtcbiAgICAgICAgZ2wuYmluZEZyYW1lYnVmZmVyKGdsLkZSQU1FQlVGRkVSLCBudWxsKTtcblxuICAgICAgICByZXR1cm4gd2ViR0xQaXhlbHM7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHJldHVybiB0aGlzLnRleHR1cmVCdWZmZXIuY2FudmFzLmdldENvbnRleHQoJzJkJykuZ2V0SW1hZ2VEYXRhKHgsIHksIDEsIDEpLmRhdGE7XG4gICAgfVxufTtcbiIsInZhciBCYXNlVGV4dHVyZSA9IHJlcXVpcmUoJy4vQmFzZVRleHR1cmUnKSxcbiAgICBWaWRlb0Jhc2VUZXh0dXJlID0gcmVxdWlyZSgnLi9WaWRlb0Jhc2VUZXh0dXJlJyksXG4gICAgVGV4dHVyZVV2cyA9IHJlcXVpcmUoJy4vVGV4dHVyZVV2cycpLFxuICAgIEV2ZW50RW1pdHRlciA9IHJlcXVpcmUoJ2V2ZW50ZW1pdHRlcjMnKSxcbiAgICBtYXRoID0gcmVxdWlyZSgnLi4vbWF0aCcpLFxuICAgIHV0aWxzID0gcmVxdWlyZSgnLi4vdXRpbHMnKTtcblxuLyoqXG4gKiBBIHRleHR1cmUgc3RvcmVzIHRoZSBpbmZvcm1hdGlvbiB0aGF0IHJlcHJlc2VudHMgYW4gaW1hZ2Ugb3IgcGFydCBvZiBhbiBpbWFnZS4gSXQgY2Fubm90IGJlIGFkZGVkXG4gKiB0byB0aGUgZGlzcGxheSBsaXN0IGRpcmVjdGx5LiBJbnN0ZWFkIHVzZSBpdCBhcyB0aGUgdGV4dHVyZSBmb3IgYSBTcHJpdGUuIElmIG5vIGZyYW1lIGlzIHByb3ZpZGVkIHRoZW4gdGhlIHdob2xlIGltYWdlIGlzIHVzZWQuXG4gKlxuICogWW91IGNhbiBkaXJlY3RseSBjcmVhdGUgYSB0ZXh0dXJlIGZyb20gYW4gaW1hZ2UgYW5kIHRoZW4gcmV1c2UgaXQgbXVsdGlwbGUgdGltZXMgbGlrZSB0aGlzIDpcbiAqXG4gKiBgYGBqc1xuICogdmFyIHRleHR1cmUgPSBQSVhJLlRleHR1cmUuZnJvbUltYWdlKCdhc3NldHMvaW1hZ2UucG5nJyk7XG4gKiB2YXIgc3ByaXRlMSA9IG5ldyBQSVhJLlNwcml0ZSh0ZXh0dXJlKTtcbiAqIHZhciBzcHJpdGUyID0gbmV3IFBJWEkuU3ByaXRlKHRleHR1cmUpO1xuICogYGBgXG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSVxuICogQHBhcmFtIGJhc2VUZXh0dXJlIHtQSVhJLkJhc2VUZXh0dXJlfSBUaGUgYmFzZSB0ZXh0dXJlIHNvdXJjZSB0byBjcmVhdGUgdGhlIHRleHR1cmUgZnJvbVxuICogQHBhcmFtIFtmcmFtZV0ge1BJWEkuUmVjdGFuZ2xlfSBUaGUgcmVjdGFuZ2xlIGZyYW1lIG9mIHRoZSB0ZXh0dXJlIHRvIHNob3dcbiAqIEBwYXJhbSBbY3JvcF0ge1BJWEkuUmVjdGFuZ2xlfSBUaGUgYXJlYSBvZiBvcmlnaW5hbCB0ZXh0dXJlXG4gKiBAcGFyYW0gW3RyaW1dIHtQSVhJLlJlY3RhbmdsZX0gVHJpbW1lZCB0ZXh0dXJlIHJlY3RhbmdsZVxuICogQHBhcmFtIFtyb3RhdGVdIHtib29sZWFufSBpbmRpY2F0ZXMgd2hldGhlciB0aGUgdGV4dHVyZSBzaG91bGQgYmUgcm90YXRlZCBieSA5MCBkZWdyZWVzICggdXNlZCBieSB0ZXh0dXJlIHBhY2tlciApXG4gKi9cbmZ1bmN0aW9uIFRleHR1cmUoYmFzZVRleHR1cmUsIGZyYW1lLCBjcm9wLCB0cmltLCByb3RhdGUpXG57XG4gICAgRXZlbnRFbWl0dGVyLmNhbGwodGhpcyk7XG5cbiAgICAvKipcbiAgICAgKiBEb2VzIHRoaXMgVGV4dHVyZSBoYXZlIGFueSBmcmFtZSBkYXRhIGFzc2lnbmVkIHRvIGl0P1xuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKi9cbiAgICB0aGlzLm5vRnJhbWUgPSBmYWxzZTtcblxuICAgIGlmICghZnJhbWUpXG4gICAge1xuICAgICAgICB0aGlzLm5vRnJhbWUgPSB0cnVlO1xuICAgICAgICBmcmFtZSA9IG5ldyBtYXRoLlJlY3RhbmdsZSgwLCAwLCAxLCAxKTtcbiAgICB9XG5cbiAgICBpZiAoYmFzZVRleHR1cmUgaW5zdGFuY2VvZiBUZXh0dXJlKVxuICAgIHtcbiAgICAgICAgYmFzZVRleHR1cmUgPSBiYXNlVGV4dHVyZS5iYXNlVGV4dHVyZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYmFzZSB0ZXh0dXJlIHRoYXQgdGhpcyB0ZXh0dXJlIHVzZXMuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLkJhc2VUZXh0dXJlfVxuICAgICAqL1xuICAgIHRoaXMuYmFzZVRleHR1cmUgPSBiYXNlVGV4dHVyZTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBmcmFtZSBzcGVjaWZpZXMgdGhlIHJlZ2lvbiBvZiB0aGUgYmFzZSB0ZXh0dXJlIHRoYXQgdGhpcyB0ZXh0dXJlIHVzZXNcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuUmVjdGFuZ2xlfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fZnJhbWUgPSBmcmFtZTtcblxuICAgIC8qKlxuICAgICAqIFRoZSB0ZXh0dXJlIHRyaW0gZGF0YS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuUmVjdGFuZ2xlfVxuICAgICAqL1xuICAgIHRoaXMudHJpbSA9IHRyaW07XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIHdpbGwgbGV0IHRoZSByZW5kZXJlciBrbm93IGlmIHRoZSB0ZXh0dXJlIGlzIHZhbGlkLiBJZiBpdCdzIG5vdCB0aGVuIGl0IGNhbm5vdCBiZSByZW5kZXJlZC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICovXG4gICAgdGhpcy52YWxpZCA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogVGhpcyB3aWxsIGxldCBhIHJlbmRlcmVyIGtub3cgdGhhdCBhIHRleHR1cmUgaGFzIGJlZW4gdXBkYXRlZCAodXNlZCBtYWlubHkgZm9yIHdlYkdMIHV2IHVwZGF0ZXMpXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqL1xuICAgIHRoaXMucmVxdWlyZXNVcGRhdGUgPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBXZWJHTCBVViBkYXRhIGNhY2hlLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5UZXh0dXJlVXZzfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fdXZzID0gbnVsbDtcblxuICAgIC8qKlxuICAgICAqIFRoZSB3aWR0aCBvZiB0aGUgVGV4dHVyZSBpbiBwaXhlbHMuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy53aWR0aCA9IDA7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgaGVpZ2h0IG9mIHRoZSBUZXh0dXJlIGluIHBpeGVscy5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLmhlaWdodCA9IDA7XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIGlzIHRoZSBhcmVhIG9mIHRoZSBCYXNlVGV4dHVyZSBpbWFnZSB0byBhY3R1YWxseSBjb3B5IHRvIHRoZSBDYW52YXMgLyBXZWJHTCB3aGVuIHJlbmRlcmluZyxcbiAgICAgKiBpcnJlc3BlY3RpdmUgb2YgdGhlIGFjdHVhbCBmcmFtZSBzaXplIG9yIHBsYWNlbWVudCAod2hpY2ggY2FuIGJlIGluZmx1ZW5jZWQgYnkgdHJpbW1lZCB0ZXh0dXJlIGF0bGFzZXMpXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlJlY3RhbmdsZX1cbiAgICAgKi9cbiAgICB0aGlzLmNyb3AgPSBjcm9wIHx8IGZyYW1lOy8vbmV3IG1hdGguUmVjdGFuZ2xlKDAsIDAsIDEsIDEpO1xuXG4gICAgLyoqXG4gICAgICogSW5kaWNhdGVzIHdoZXRoZXIgdGhlIHRleHR1cmUgc2hvdWxkIGJlIHJvdGF0ZWQgYnkgOTAgZGVncmVlc1xuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqL1xuICAgIHRoaXMucm90YXRlID0gISFyb3RhdGU7XG5cbiAgICBpZiAoYmFzZVRleHR1cmUuaGFzTG9hZGVkKVxuICAgIHtcbiAgICAgICAgaWYgKHRoaXMubm9GcmFtZSlcbiAgICAgICAge1xuICAgICAgICAgICAgZnJhbWUgPSBuZXcgbWF0aC5SZWN0YW5nbGUoMCwgMCwgYmFzZVRleHR1cmUud2lkdGgsIGJhc2VUZXh0dXJlLmhlaWdodCk7XG5cbiAgICAgICAgICAgIC8vIGlmIHRoZXJlIGlzIG5vIGZyYW1lIHdlIHNob3VsZCBtb25pdG9yIGZvciBhbnkgYmFzZSB0ZXh0dXJlIGNoYW5nZXMuLlxuICAgICAgICAgICAgYmFzZVRleHR1cmUub24oJ3VwZGF0ZScsIHRoaXMub25CYXNlVGV4dHVyZVVwZGF0ZWQsIHRoaXMpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZnJhbWUgPSBmcmFtZTtcbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgYmFzZVRleHR1cmUub25jZSgnbG9hZGVkJywgdGhpcy5vbkJhc2VUZXh0dXJlTG9hZGVkLCB0aGlzKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBGaXJlZCB3aGVuIHRoZSB0ZXh0dXJlIGlzIHVwZGF0ZWQuIFRoaXMgaGFwcGVucyBpZiB0aGUgZnJhbWUgb3IgdGhlIGJhc2VUZXh0dXJlIGlzIHVwZGF0ZWQuXG4gICAgICpcbiAgICAgKiBAZXZlbnQgdXBkYXRlXG4gICAgICogQG1lbWJlcm9mIFBJWEkuVGV4dHVyZSNcbiAgICAgKiBAcHJvdGVjdGVkXG4gICAgICovXG59XG5cblRleHR1cmUucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShFdmVudEVtaXR0ZXIucHJvdG90eXBlKTtcblRleHR1cmUucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gVGV4dHVyZTtcbm1vZHVsZS5leHBvcnRzID0gVGV4dHVyZTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoVGV4dHVyZS5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBUaGUgZnJhbWUgc3BlY2lmaWVzIHRoZSByZWdpb24gb2YgdGhlIGJhc2UgdGV4dHVyZSB0aGF0IHRoaXMgdGV4dHVyZSB1c2VzLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5SZWN0YW5nbGV9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuVGV4dHVyZSNcbiAgICAgKi9cbiAgICBmcmFtZToge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9mcmFtZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAoZnJhbWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuX2ZyYW1lID0gZnJhbWU7XG5cbiAgICAgICAgICAgIHRoaXMubm9GcmFtZSA9IGZhbHNlO1xuXG4gICAgICAgICAgICB0aGlzLndpZHRoID0gZnJhbWUud2lkdGg7XG4gICAgICAgICAgICB0aGlzLmhlaWdodCA9IGZyYW1lLmhlaWdodDtcblxuICAgICAgICAgICAgaWYgKCF0aGlzLnRyaW0gJiYgIXRoaXMucm90YXRlICYmIChmcmFtZS54ICsgZnJhbWUud2lkdGggPiB0aGlzLmJhc2VUZXh0dXJlLndpZHRoIHx8IGZyYW1lLnkgKyBmcmFtZS5oZWlnaHQgPiB0aGlzLmJhc2VUZXh0dXJlLmhlaWdodCkpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdUZXh0dXJlIEVycm9yOiBmcmFtZSBkb2VzIG5vdCBmaXQgaW5zaWRlIHRoZSBiYXNlIFRleHR1cmUgZGltZW5zaW9ucyAnICsgdGhpcyk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vdGhpcy52YWxpZCA9IGZyYW1lICYmIGZyYW1lLndpZHRoICYmIGZyYW1lLmhlaWdodCAmJiB0aGlzLmJhc2VUZXh0dXJlLnNvdXJjZSAmJiB0aGlzLmJhc2VUZXh0dXJlLmhhc0xvYWRlZDtcbiAgICAgICAgICAgIHRoaXMudmFsaWQgPSBmcmFtZSAmJiBmcmFtZS53aWR0aCAmJiBmcmFtZS5oZWlnaHQgJiYgdGhpcy5iYXNlVGV4dHVyZS5oYXNMb2FkZWQ7XG5cbiAgICAgICAgICAgIGlmICh0aGlzLnRyaW0pXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdGhpcy53aWR0aCA9IHRoaXMudHJpbS53aWR0aDtcbiAgICAgICAgICAgICAgICB0aGlzLmhlaWdodCA9IHRoaXMudHJpbS5oZWlnaHQ7XG4gICAgICAgICAgICAgICAgdGhpcy5fZnJhbWUud2lkdGggPSB0aGlzLnRyaW0ud2lkdGg7XG4gICAgICAgICAgICAgICAgdGhpcy5fZnJhbWUuaGVpZ2h0ID0gdGhpcy50cmltLmhlaWdodDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB0aGlzLmNyb3AgPSBmcmFtZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHRoaXMudmFsaWQpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdGhpcy5fdXBkYXRlVXZzKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG59KTtcblxuLyoqXG4gKiBVcGRhdGVzIHRoaXMgdGV4dHVyZSBvbiB0aGUgZ3B1LlxuICpcbiAqL1xuVGV4dHVyZS5wcm90b3R5cGUudXBkYXRlID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLmJhc2VUZXh0dXJlLnVwZGF0ZSgpO1xufTtcblxuLyoqXG4gKiBDYWxsZWQgd2hlbiB0aGUgYmFzZSB0ZXh0dXJlIGlzIGxvYWRlZFxuICpcbiAqIEBwcml2YXRlXG4gKi9cblRleHR1cmUucHJvdG90eXBlLm9uQmFzZVRleHR1cmVMb2FkZWQgPSBmdW5jdGlvbiAoYmFzZVRleHR1cmUpXG57XG4gICAgLy8gVE9ETyB0aGlzIGNvZGUgbG9va3MgY29uZnVzaW5nLi4gYm9vIHRvIGFidXNpbmcgZ2V0dGVycyBhbmQgc2V0dGVyc3MhXG4gICAgaWYgKHRoaXMubm9GcmFtZSlcbiAgICB7XG4gICAgICAgIHRoaXMuZnJhbWUgPSBuZXcgbWF0aC5SZWN0YW5nbGUoMCwgMCwgYmFzZVRleHR1cmUud2lkdGgsIGJhc2VUZXh0dXJlLmhlaWdodCk7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHRoaXMuZnJhbWUgPSB0aGlzLl9mcmFtZTtcbiAgICB9XG5cbiAgICB0aGlzLmVtaXQoJ3VwZGF0ZScsIHRoaXMpO1xufTtcblxuLyoqXG4gKiBDYWxsZWQgd2hlbiB0aGUgYmFzZSB0ZXh0dXJlIGlzIHVwZGF0ZWRcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5UZXh0dXJlLnByb3RvdHlwZS5vbkJhc2VUZXh0dXJlVXBkYXRlZCA9IGZ1bmN0aW9uIChiYXNlVGV4dHVyZSlcbntcbiAgICB0aGlzLl9mcmFtZS53aWR0aCA9IGJhc2VUZXh0dXJlLndpZHRoO1xuICAgIHRoaXMuX2ZyYW1lLmhlaWdodCA9IGJhc2VUZXh0dXJlLmhlaWdodDtcblxuICAgIHRoaXMuZW1pdCgndXBkYXRlJywgdGhpcyk7XG59O1xuXG4vKipcbiAqIERlc3Ryb3lzIHRoaXMgdGV4dHVyZVxuICpcbiAqIEBwYXJhbSBbZGVzdHJveUJhc2U9ZmFsc2VdIHtib29sZWFufSBXaGV0aGVyIHRvIGRlc3Ryb3kgdGhlIGJhc2UgdGV4dHVyZSBhcyB3ZWxsXG4gKi9cblRleHR1cmUucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoZGVzdHJveUJhc2UpXG57XG4gICAgaWYgKHRoaXMuYmFzZVRleHR1cmUpXG4gICAge1xuICAgICAgICBpZiAoZGVzdHJveUJhc2UpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuYmFzZVRleHR1cmUuZGVzdHJveSgpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5iYXNlVGV4dHVyZS5vZmYoJ3VwZGF0ZScsIHRoaXMub25CYXNlVGV4dHVyZVVwZGF0ZWQsIHRoaXMpO1xuICAgICAgICB0aGlzLmJhc2VUZXh0dXJlLm9mZignbG9hZGVkJywgdGhpcy5vbkJhc2VUZXh0dXJlTG9hZGVkLCB0aGlzKTtcblxuICAgICAgICB0aGlzLmJhc2VUZXh0dXJlID0gbnVsbDtcbiAgICB9XG5cbiAgICB0aGlzLl9mcmFtZSA9IG51bGw7XG4gICAgdGhpcy5fdXZzID0gbnVsbDtcbiAgICB0aGlzLnRyaW0gPSBudWxsO1xuICAgIHRoaXMuY3JvcCA9IG51bGw7XG5cbiAgICB0aGlzLnZhbGlkID0gZmFsc2U7XG5cbiAgICB0aGlzLm9mZignZGlzcG9zZScsIHRoaXMuZGlzcG9zZSwgdGhpcyk7XG4gICAgdGhpcy5vZmYoJ3VwZGF0ZScsIHRoaXMudXBkYXRlLCB0aGlzKTtcbn07XG5cbi8qKlxuICogQ3JlYXRlcyBhIG5ldyB0ZXh0dXJlIG9iamVjdCB0aGF0IGFjdHMgdGhlIHNhbWUgYXMgdGhpcyBvbmUuXG4gKlxuICogQHJldHVybiB7UElYSS5UZXh0dXJlfVxuICovXG5UZXh0dXJlLnByb3RvdHlwZS5jbG9uZSA9IGZ1bmN0aW9uICgpXG57XG4gICAgcmV0dXJuIG5ldyBUZXh0dXJlKHRoaXMuYmFzZVRleHR1cmUsIHRoaXMuZnJhbWUsIHRoaXMuY3JvcCwgdGhpcy50cmltLCB0aGlzLnJvdGF0ZSk7XG59O1xuXG4vKipcbiAqIFVwZGF0ZXMgdGhlIGludGVybmFsIFdlYkdMIFVWIGNhY2hlLlxuICpcbiAqIEBwcml2YXRlXG4gKi9cblRleHR1cmUucHJvdG90eXBlLl91cGRhdGVVdnMgPSBmdW5jdGlvbiAoKVxue1xuICAgIGlmICghdGhpcy5fdXZzKVxuICAgIHtcbiAgICAgICAgdGhpcy5fdXZzID0gbmV3IFRleHR1cmVVdnMoKTtcbiAgICB9XG5cbiAgICB0aGlzLl91dnMuc2V0KHRoaXMuY3JvcCwgdGhpcy5iYXNlVGV4dHVyZSwgdGhpcy5yb3RhdGUpO1xufTtcblxuLyoqXG4gKiBIZWxwZXIgZnVuY3Rpb24gdGhhdCBjcmVhdGVzIGEgVGV4dHVyZSBvYmplY3QgZnJvbSB0aGUgZ2l2ZW4gaW1hZ2UgdXJsLlxuICogSWYgdGhlIGltYWdlIGlzIG5vdCBpbiB0aGUgdGV4dHVyZSBjYWNoZSBpdCB3aWxsIGJlICBjcmVhdGVkIGFuZCBsb2FkZWQuXG4gKlxuICogQHN0YXRpY1xuICogQHBhcmFtIGltYWdlVXJsIHtzdHJpbmd9IFRoZSBpbWFnZSB1cmwgb2YgdGhlIHRleHR1cmVcbiAqIEBwYXJhbSBjcm9zc29yaWdpbiB7Ym9vbGVhbn0gV2hldGhlciByZXF1ZXN0cyBzaG91bGQgYmUgdHJlYXRlZCBhcyBjcm9zc29yaWdpblxuICogQHBhcmFtIHNjYWxlTW9kZSB7bnVtYmVyfSBTZWUge0BsaW5rIFBJWEkuU0NBTEVfTU9ERVN9IGZvciBwb3NzaWJsZSB2YWx1ZXNcbiAqIEByZXR1cm4ge1BJWEkuVGV4dHVyZX0gVGhlIG5ld2x5IGNyZWF0ZWQgdGV4dHVyZVxuICovXG5UZXh0dXJlLmZyb21JbWFnZSA9IGZ1bmN0aW9uIChpbWFnZVVybCwgY3Jvc3NvcmlnaW4sIHNjYWxlTW9kZSlcbntcbiAgICB2YXIgdGV4dHVyZSA9IHV0aWxzLlRleHR1cmVDYWNoZVtpbWFnZVVybF07XG5cbiAgICBpZiAoIXRleHR1cmUpXG4gICAge1xuICAgICAgICB0ZXh0dXJlID0gbmV3IFRleHR1cmUoQmFzZVRleHR1cmUuZnJvbUltYWdlKGltYWdlVXJsLCBjcm9zc29yaWdpbiwgc2NhbGVNb2RlKSk7XG4gICAgICAgIHV0aWxzLlRleHR1cmVDYWNoZVtpbWFnZVVybF0gPSB0ZXh0dXJlO1xuICAgIH1cblxuICAgIHJldHVybiB0ZXh0dXJlO1xufTtcblxuLyoqXG4gKiBIZWxwZXIgZnVuY3Rpb24gdGhhdCBjcmVhdGVzIGEgc3ByaXRlIHRoYXQgd2lsbCBjb250YWluIGEgdGV4dHVyZSBmcm9tIHRoZSBUZXh0dXJlQ2FjaGUgYmFzZWQgb24gdGhlIGZyYW1lSWRcbiAqIFRoZSBmcmFtZSBpZHMgYXJlIGNyZWF0ZWQgd2hlbiBhIFRleHR1cmUgcGFja2VyIGZpbGUgaGFzIGJlZW4gbG9hZGVkXG4gKlxuICogQHN0YXRpY1xuICogQHBhcmFtIGZyYW1lSWQge3N0cmluZ30gVGhlIGZyYW1lIElkIG9mIHRoZSB0ZXh0dXJlIGluIHRoZSBjYWNoZVxuICogQHJldHVybiB7UElYSS5UZXh0dXJlfSBUaGUgbmV3bHkgY3JlYXRlZCB0ZXh0dXJlXG4gKi9cblRleHR1cmUuZnJvbUZyYW1lID0gZnVuY3Rpb24gKGZyYW1lSWQpXG57XG4gICAgdmFyIHRleHR1cmUgPSB1dGlscy5UZXh0dXJlQ2FjaGVbZnJhbWVJZF07XG5cbiAgICBpZiAoIXRleHR1cmUpXG4gICAge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RoZSBmcmFtZUlkIFwiJyArIGZyYW1lSWQgKyAnXCIgZG9lcyBub3QgZXhpc3QgaW4gdGhlIHRleHR1cmUgY2FjaGUnKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGV4dHVyZTtcbn07XG5cbi8qKlxuICogSGVscGVyIGZ1bmN0aW9uIHRoYXQgY3JlYXRlcyBhIG5ldyBUZXh0dXJlIGJhc2VkIG9uIHRoZSBnaXZlbiBjYW52YXMgZWxlbWVudC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAcGFyYW0gY2FudmFzIHtDYW52YXN9IFRoZSBjYW52YXMgZWxlbWVudCBzb3VyY2Ugb2YgdGhlIHRleHR1cmVcbiAqIEBwYXJhbSBzY2FsZU1vZGUge251bWJlcn0gU2VlIHtAbGluayBQSVhJLlNDQUxFX01PREVTfSBmb3IgcG9zc2libGUgdmFsdWVzXG4gKiBAcmV0dXJuIHtQSVhJLlRleHR1cmV9XG4gKi9cblRleHR1cmUuZnJvbUNhbnZhcyA9IGZ1bmN0aW9uIChjYW52YXMsIHNjYWxlTW9kZSlcbntcbiAgICByZXR1cm4gbmV3IFRleHR1cmUoQmFzZVRleHR1cmUuZnJvbUNhbnZhcyhjYW52YXMsIHNjYWxlTW9kZSkpO1xufTtcblxuLyoqXG4gKiBIZWxwZXIgZnVuY3Rpb24gdGhhdCBjcmVhdGVzIGEgbmV3IFRleHR1cmUgYmFzZWQgb24gdGhlIGdpdmVuIHZpZGVvIGVsZW1lbnQuXG4gKlxuICogQHN0YXRpY1xuICogQHBhcmFtIHZpZGVvIHtIVE1MVmlkZW9FbGVtZW50fVxuICogQHBhcmFtIHNjYWxlTW9kZSB7bnVtYmVyfSBTZWUge0BsaW5rIFBJWEkuU0NBTEVfTU9ERVN9IGZvciBwb3NzaWJsZSB2YWx1ZXNcbiAqIEByZXR1cm4ge1BJWEkuVGV4dHVyZX0gQSBUZXh0dXJlXG4gKi9cblRleHR1cmUuZnJvbVZpZGVvID0gZnVuY3Rpb24gKHZpZGVvLCBzY2FsZU1vZGUpXG57XG4gICAgaWYgKHR5cGVvZiB2aWRlbyA9PT0gJ3N0cmluZycpXG4gICAge1xuICAgICAgICByZXR1cm4gVGV4dHVyZS5mcm9tVmlkZW9VcmwodmlkZW8sIHNjYWxlTW9kZSk7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHJldHVybiBuZXcgVGV4dHVyZShWaWRlb0Jhc2VUZXh0dXJlLmZyb21WaWRlbyh2aWRlbywgc2NhbGVNb2RlKSk7XG4gICAgfVxufTtcblxuLyoqXG4gKiBIZWxwZXIgZnVuY3Rpb24gdGhhdCBjcmVhdGVzIGEgbmV3IFRleHR1cmUgYmFzZWQgb24gdGhlIHZpZGVvIHVybC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAcGFyYW0gdmlkZW9Vcmwge3N0cmluZ31cbiAqIEBwYXJhbSBzY2FsZU1vZGUge251bWJlcn0gU2VlIHtAbGluayBQSVhJLlNDQUxFX01PREVTfSBmb3IgcG9zc2libGUgdmFsdWVzXG4gKiBAcmV0dXJuIHtQSVhJLlRleHR1cmV9IEEgVGV4dHVyZVxuICovXG5UZXh0dXJlLmZyb21WaWRlb1VybCA9IGZ1bmN0aW9uICh2aWRlb1VybCwgc2NhbGVNb2RlKVxue1xuICAgIHJldHVybiBuZXcgVGV4dHVyZShWaWRlb0Jhc2VUZXh0dXJlLmZyb21VcmwodmlkZW9VcmwsIHNjYWxlTW9kZSkpO1xufTtcblxuLyoqXG4gKiBBZGRzIGEgdGV4dHVyZSB0byB0aGUgZ2xvYmFsIHV0aWxzLlRleHR1cmVDYWNoZS4gVGhpcyBjYWNoZSBpcyBzaGFyZWQgYWNyb3NzIHRoZSB3aG9sZSBQSVhJIG9iamVjdC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAcGFyYW0gdGV4dHVyZSB7UElYSS5UZXh0dXJlfSBUaGUgVGV4dHVyZSB0byBhZGQgdG8gdGhlIGNhY2hlLlxuICogQHBhcmFtIGlkIHtzdHJpbmd9IFRoZSBpZCB0aGF0IHRoZSB0ZXh0dXJlIHdpbGwgYmUgc3RvcmVkIGFnYWluc3QuXG4gKi9cblRleHR1cmUuYWRkVGV4dHVyZVRvQ2FjaGUgPSBmdW5jdGlvbiAodGV4dHVyZSwgaWQpXG57XG4gICAgdXRpbHMuVGV4dHVyZUNhY2hlW2lkXSA9IHRleHR1cmU7XG59O1xuXG4vKipcbiAqIFJlbW92ZSBhIHRleHR1cmUgZnJvbSB0aGUgZ2xvYmFsIHV0aWxzLlRleHR1cmVDYWNoZS5cbiAqXG4gKiBAc3RhdGljXG4gKiBAcGFyYW0gaWQge3N0cmluZ30gVGhlIGlkIG9mIHRoZSB0ZXh0dXJlIHRvIGJlIHJlbW92ZWRcbiAqIEByZXR1cm4ge1BJWEkuVGV4dHVyZX0gVGhlIHRleHR1cmUgdGhhdCB3YXMgcmVtb3ZlZFxuICovXG5UZXh0dXJlLnJlbW92ZVRleHR1cmVGcm9tQ2FjaGUgPSBmdW5jdGlvbiAoaWQpXG57XG4gICAgdmFyIHRleHR1cmUgPSB1dGlscy5UZXh0dXJlQ2FjaGVbaWRdO1xuXG4gICAgZGVsZXRlIHV0aWxzLlRleHR1cmVDYWNoZVtpZF07XG4gICAgZGVsZXRlIHV0aWxzLkJhc2VUZXh0dXJlQ2FjaGVbaWRdO1xuXG4gICAgcmV0dXJuIHRleHR1cmU7XG59O1xuXG4vKipcbiAqIEFuIGVtcHR5IHRleHR1cmUsIHVzZWQgb2Z0ZW4gdG8gbm90IGhhdmUgdG8gY3JlYXRlIG11bHRpcGxlIGVtcHR5IHRleHR1cmVzLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBjb25zdGFudFxuICovXG5UZXh0dXJlLkVNUFRZID0gbmV3IFRleHR1cmUobmV3IEJhc2VUZXh0dXJlKCkpO1xuIiwiXG4vKipcbiAqIEEgc3RhbmRhcmQgb2JqZWN0IHRvIHN0b3JlIHRoZSBVdnMgb2YgYSB0ZXh0dXJlXG4gKlxuICogQGNsYXNzXG4gKiBAcHJpdmF0ZVxuICogQG1lbWJlcm9mIFBJWElcbiAqL1xuZnVuY3Rpb24gVGV4dHVyZVV2cygpXG57XG4gICAgdGhpcy54MCA9IDA7XG4gICAgdGhpcy55MCA9IDA7XG5cbiAgICB0aGlzLngxID0gMTtcbiAgICB0aGlzLnkxID0gMDtcblxuICAgIHRoaXMueDIgPSAxO1xuICAgIHRoaXMueTIgPSAxO1xuXG4gICAgdGhpcy54MyA9IDA7XG4gICAgdGhpcy55MyA9IDE7XG5cbiAgICB0aGlzLnh5MF91aW50MzIgPSAwO1xuICAgIHRoaXMueHkxX3VpbnQzMiA9IDA7XG4gICAgdGhpcy54eTJfdWludDMyID0gMDtcbiAgICB0aGlzLnh5M191aW50MzIgPSAwO1xuXG4gICAgdGhpcy51dnNfdWludDMyID0gbmV3IFVpbnQzMkFycmF5KDQpXG59XG5cbm1vZHVsZS5leHBvcnRzID0gVGV4dHVyZVV2cztcblxuLyoqXG4gKiBTZXRzIHRoZSB0ZXh0dXJlIFV2cyBiYXNlZCBvbiB0aGUgZ2l2ZW4gZnJhbWUgaW5mb3JtYXRpb25cbiAqIEBwYXJhbSBmcmFtZSB7UElYSS5SZWN0YW5nbGV9XG4gKiBAcGFyYW0gYmFzZUZyYW1lIHtQSVhJLlJlY3RhbmdsZX1cbiAqIEBwYXJhbSByb3RhdGUge2Jvb2xlYW59IFdoZXRoZXIgb3Igbm90IHRoZSBmcmFtZSBpcyByb3RhdGVkXG4gKiBAcHJpdmF0ZVxuICovXG5UZXh0dXJlVXZzLnByb3RvdHlwZS5zZXQgPSBmdW5jdGlvbiAoZnJhbWUsIGJhc2VGcmFtZSwgcm90YXRlKVxue1xuICAgIHZhciB0dyA9IGJhc2VGcmFtZS53aWR0aDtcbiAgICB2YXIgdGggPSBiYXNlRnJhbWUuaGVpZ2h0O1xuXG4gICAgaWYocm90YXRlKVxuICAgIHtcbiAgICAgICAgdGhpcy54MCA9IChmcmFtZS54ICsgZnJhbWUuaGVpZ2h0KSAvIHR3O1xuICAgICAgICB0aGlzLnkwID0gZnJhbWUueSAvIHRoO1xuXG4gICAgICAgIHRoaXMueDEgPSAoZnJhbWUueCArIGZyYW1lLmhlaWdodCkgLyB0dztcbiAgICAgICAgdGhpcy55MSA9IChmcmFtZS55ICsgZnJhbWUud2lkdGgpIC8gdGg7XG5cbiAgICAgICAgdGhpcy54MiA9IGZyYW1lLnggLyB0dztcbiAgICAgICAgdGhpcy55MiA9IChmcmFtZS55ICsgZnJhbWUud2lkdGgpIC8gdGg7XG5cbiAgICAgICAgdGhpcy54MyA9IGZyYW1lLnggLyB0dztcbiAgICAgICAgdGhpcy55MyA9IGZyYW1lLnkgLyB0aDtcbiAgICB9XG4gICAgZWxzZVxuICAgIHtcblxuICAgICAgICB0aGlzLngwID0gZnJhbWUueCAvIHR3O1xuICAgICAgICB0aGlzLnkwID0gZnJhbWUueSAvIHRoO1xuXG4gICAgICAgIHRoaXMueDEgPSAoZnJhbWUueCArIGZyYW1lLndpZHRoKSAvIHR3O1xuICAgICAgICB0aGlzLnkxID0gZnJhbWUueSAvIHRoO1xuXG4gICAgICAgIHRoaXMueDIgPSAoZnJhbWUueCArIGZyYW1lLndpZHRoKSAvIHR3O1xuICAgICAgICB0aGlzLnkyID0gKGZyYW1lLnkgKyBmcmFtZS5oZWlnaHQpIC8gdGg7XG5cbiAgICAgICAgdGhpcy54MyA9IGZyYW1lLnggLyB0dztcbiAgICAgICAgdGhpcy55MyA9IChmcmFtZS55ICsgZnJhbWUuaGVpZ2h0KSAvIHRoO1xuICAgIH1cblxuICAgIHRoaXMudXZzX3VpbnQzMlswXSA9ICgoKHRoaXMueTAgKiA2NTUzNSkgJiAweEZGRkYpIDw8IDE2KSB8ICgodGhpcy54MCAqIDY1NTM1KSAmIDB4RkZGRik7XG4gICAgdGhpcy51dnNfdWludDMyWzFdID0gKCgodGhpcy55MSAqIDY1NTM1KSAmIDB4RkZGRikgPDwgMTYpIHwgKCh0aGlzLngxICogNjU1MzUpICYgMHhGRkZGKTtcbiAgICB0aGlzLnV2c191aW50MzJbMl0gPSAoKCh0aGlzLnkyICogNjU1MzUpICYgMHhGRkZGKSA8PCAxNikgfCAoKHRoaXMueDIgKiA2NTUzNSkgJiAweEZGRkYpO1xuICAgIHRoaXMudXZzX3VpbnQzMlszXSA9ICgoKHRoaXMueTMgKiA2NTUzNSkgJiAweEZGRkYpIDw8IDE2KSB8ICgodGhpcy54MyAqIDY1NTM1KSAmIDB4RkZGRik7XG59O1xuIiwidmFyIEJhc2VUZXh0dXJlID0gcmVxdWlyZSgnLi9CYXNlVGV4dHVyZScpLFxuICAgIHV0aWxzID0gcmVxdWlyZSgnLi4vdXRpbHMnKTtcblxuLyoqXG4gKiBBIHRleHR1cmUgb2YgYSBbcGxheWluZ10gVmlkZW8uXG4gKlxuICogVmlkZW8gYmFzZSB0ZXh0dXJlcyBtaW1pYyBQaXhpIEJhc2VUZXh0dXJlLmZyb20uLi4uIG1ldGhvZCBpbiB0aGVpciBjcmVhdGlvbiBwcm9jZXNzLlxuICpcbiAqIFRoaXMgY2FuIGJlIHVzZWQgaW4gc2V2ZXJhbCB3YXlzLCBzdWNoIGFzOlxuICpcbiAqIGBgYGpzXG4gKiB2YXIgdGV4dHVyZSA9IFBJWEkuVmlkZW9CYXNlVGV4dHVyZS5mcm9tVXJsKCdodHRwOi8vbXlkb21haW4uY29tL3ZpZGVvLm1wNCcpO1xuICpcbiAqIHZhciB0ZXh0dXJlID0gUElYSS5WaWRlb0Jhc2VUZXh0dXJlLmZyb21VcmwoeyBzcmM6ICdodHRwOi8vbXlkb21haW4uY29tL3ZpZGVvLm1wNCcsIG1pbWU6ICd2aWRlby9tcDQnIH0pO1xuICpcbiAqIHZhciB0ZXh0dXJlID0gUElYSS5WaWRlb0Jhc2VUZXh0dXJlLmZyb21VcmxzKFsnL3ZpZGVvLndlYm0nLCAnL3ZpZGVvLm1wNCddKTtcbiAqXG4gKiB2YXIgdGV4dHVyZSA9IFBJWEkuVmlkZW9CYXNlVGV4dHVyZS5mcm9tVXJscyhbXG4gKiAgICAgeyBzcmM6ICcvdmlkZW8ud2VibScsIG1pbWU6ICd2aWRlby93ZWJtJyB9LFxuICogICAgIHsgc3JjOiAnL3ZpZGVvLm1wNCcsIG1pbWU6ICd2aWRlby9tcDQnIH1cbiAqIF0pO1xuICogYGBgXG4gKlxuICogU2VlIHRoZSBbXCJkZXVzXCIgZGVtb10oaHR0cDovL3d3dy5nb29kYm95ZGlnaXRhbC5jb20vcGl4aWpzL2V4YW1wbGVzL2RldXMvKS5cbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQmFzZVRleHR1cmVcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAcGFyYW0gc291cmNlIHtIVE1MVmlkZW9FbGVtZW50fVxuICogQHBhcmFtIFtzY2FsZU1vZGVdIHtudW1iZXJ9IFNlZSB7QGxpbmsgUElYSS5TQ0FMRV9NT0RFU30gZm9yIHBvc3NpYmxlIHZhbHVlc1xuICovXG5mdW5jdGlvbiBWaWRlb0Jhc2VUZXh0dXJlKHNvdXJjZSwgc2NhbGVNb2RlKVxue1xuICAgIGlmICghc291cmNlKVxuICAgIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdObyB2aWRlbyBzb3VyY2UgZWxlbWVudCBzcGVjaWZpZWQuJyk7XG4gICAgfVxuXG4gICAgLy8gaG9vayBpbiBoZXJlIHRvIGNoZWNrIGlmIHZpZGVvIGlzIGFscmVhZHkgYXZhaWxhYmxlLlxuICAgIC8vIEJhc2VUZXh0dXJlIGxvb2tzIGZvciBhIHNvdXJjZS5jb21wbGV0ZSBib29sZWFuLCBwbHVzIHdpZHRoICYgaGVpZ2h0LlxuXG4gICAgaWYgKChzb3VyY2UucmVhZHlTdGF0ZSA9PT0gc291cmNlLkhBVkVfRU5PVUdIX0RBVEEgfHwgc291cmNlLnJlYWR5U3RhdGUgPT09IHNvdXJjZS5IQVZFX0ZVVFVSRV9EQVRBKSAmJiBzb3VyY2Uud2lkdGggJiYgc291cmNlLmhlaWdodClcbiAgICB7XG4gICAgICAgIHNvdXJjZS5jb21wbGV0ZSA9IHRydWU7XG4gICAgfVxuXG4gICAgQmFzZVRleHR1cmUuY2FsbCh0aGlzLCBzb3VyY2UsIHNjYWxlTW9kZSk7XG5cbiAgICAvKipcbiAgICAgKiBTaG91bGQgdGhlIGJhc2UgdGV4dHVyZSBhdXRvbWF0aWNhbGx5IHVwZGF0ZSBpdHNlbGYsIHNldCB0byB0cnVlIGJ5IGRlZmF1bHRcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICogQGRlZmF1bHQgdHJ1ZVxuICAgICAqL1xuICAgIHRoaXMuYXV0b1VwZGF0ZSA9IGZhbHNlO1xuXG4gICAgdGhpcy5fb25VcGRhdGUgPSB0aGlzLl9vblVwZGF0ZS5iaW5kKHRoaXMpO1xuICAgIHRoaXMuX29uQ2FuUGxheSA9IHRoaXMuX29uQ2FuUGxheS5iaW5kKHRoaXMpO1xuXG4gICAgaWYgKCFzb3VyY2UuY29tcGxldGUpXG4gICAge1xuICAgICAgICBzb3VyY2UuYWRkRXZlbnRMaXN0ZW5lcignY2FucGxheScsIHRoaXMuX29uQ2FuUGxheSk7XG4gICAgICAgIHNvdXJjZS5hZGRFdmVudExpc3RlbmVyKCdjYW5wbGF5dGhyb3VnaCcsIHRoaXMuX29uQ2FuUGxheSk7XG5cbiAgICAgICAgLy8gc3RhcnRlZCBwbGF5aW5nLi5cbiAgICAgICAgc291cmNlLmFkZEV2ZW50TGlzdGVuZXIoJ3BsYXknLCB0aGlzLl9vblBsYXlTdGFydC5iaW5kKHRoaXMpKTtcbiAgICAgICAgc291cmNlLmFkZEV2ZW50TGlzdGVuZXIoJ3BhdXNlJywgdGhpcy5fb25QbGF5U3RvcC5iaW5kKHRoaXMpKTtcbiAgICB9XG5cbiAgICB0aGlzLl9fbG9hZGVkID0gZmFsc2U7XG59XG5cblZpZGVvQmFzZVRleHR1cmUucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShCYXNlVGV4dHVyZS5wcm90b3R5cGUpO1xuVmlkZW9CYXNlVGV4dHVyZS5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBWaWRlb0Jhc2VUZXh0dXJlO1xubW9kdWxlLmV4cG9ydHMgPSBWaWRlb0Jhc2VUZXh0dXJlO1xuXG4vKipcbiAqIFRoZSBpbnRlcm5hbCB1cGRhdGUgbG9vcCBvZiB0aGUgdmlkZW8gYmFzZSB0ZXh0dXJlLCBvbmx5IHJ1bnMgd2hlbiBhdXRvVXBkYXRlIGlzIHNldCB0byB0cnVlXG4gKlxuICogQHByaXZhdGVcbiAqL1xuVmlkZW9CYXNlVGV4dHVyZS5wcm90b3R5cGUuX29uVXBkYXRlID0gZnVuY3Rpb24gKClcbntcbiAgICBpZiAodGhpcy5hdXRvVXBkYXRlKVxuICAgIHtcbiAgICAgICAgd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZSh0aGlzLl9vblVwZGF0ZSk7XG4gICAgICAgIHRoaXMudXBkYXRlKCk7XG4gICAgfVxufTtcblxuLyoqXG4gKiBSdW5zIHRoZSB1cGRhdGUgbG9vcCB3aGVuIHRoZSB2aWRlbyBpcyByZWFkeSB0byBwbGF5XG4gKlxuICogQHByaXZhdGVcbiAqL1xuVmlkZW9CYXNlVGV4dHVyZS5wcm90b3R5cGUuX29uUGxheVN0YXJ0ID0gZnVuY3Rpb24gKClcbntcbiAgICBpZiAoIXRoaXMuYXV0b1VwZGF0ZSlcbiAgICB7XG4gICAgICAgIHdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUodGhpcy5fb25VcGRhdGUpO1xuICAgICAgICB0aGlzLmF1dG9VcGRhdGUgPSB0cnVlO1xuICAgIH1cbn07XG5cbi8qKlxuICogRmlyZWQgd2hlbiBhIHBhdXNlIGV2ZW50IGlzIHRyaWdnZXJlZCwgc3RvcHMgdGhlIHVwZGF0ZSBsb29wXG4gKlxuICogQHByaXZhdGVcbiAqL1xuVmlkZW9CYXNlVGV4dHVyZS5wcm90b3R5cGUuX29uUGxheVN0b3AgPSBmdW5jdGlvbiAoKVxue1xuICAgIHRoaXMuYXV0b1VwZGF0ZSA9IGZhbHNlO1xufTtcblxuLyoqXG4gKiBGaXJlZCB3aGVuIHRoZSB2aWRlbyBpcyBsb2FkZWQgYW5kIHJlYWR5IHRvIHBsYXlcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5WaWRlb0Jhc2VUZXh0dXJlLnByb3RvdHlwZS5fb25DYW5QbGF5ID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLmhhc0xvYWRlZCA9IHRydWU7XG5cbiAgICBpZiAodGhpcy5zb3VyY2UpXG4gICAge1xuICAgICAgICB0aGlzLnNvdXJjZS5yZW1vdmVFdmVudExpc3RlbmVyKCdjYW5wbGF5JywgdGhpcy5fb25DYW5QbGF5KTtcbiAgICAgICAgdGhpcy5zb3VyY2UucmVtb3ZlRXZlbnRMaXN0ZW5lcignY2FucGxheXRocm91Z2gnLCB0aGlzLl9vbkNhblBsYXkpO1xuXG4gICAgICAgIHRoaXMud2lkdGggPSB0aGlzLnNvdXJjZS52aWRlb1dpZHRoO1xuICAgICAgICB0aGlzLmhlaWdodCA9IHRoaXMuc291cmNlLnZpZGVvSGVpZ2h0O1xuXG4gICAgICAgIHRoaXMuc291cmNlLnBsYXkoKTtcblxuICAgICAgICAvLyBwcmV2ZW50IG11bHRpcGxlIGxvYWRlZCBkaXNwYXRjaGVzLi5cbiAgICAgICAgaWYgKCF0aGlzLl9fbG9hZGVkKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLl9fbG9hZGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMuZW1pdCgnbG9hZGVkJywgdGhpcyk7XG4gICAgICAgIH1cbiAgICB9XG59O1xuXG4vKipcbiAqIERlc3Ryb3lzIHRoaXMgdGV4dHVyZVxuICpcbiAqL1xuVmlkZW9CYXNlVGV4dHVyZS5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uICgpXG57XG4gICAgaWYgKHRoaXMuc291cmNlICYmIHRoaXMuc291cmNlLl9waXhpSWQpXG4gICAge1xuICAgICAgICBkZWxldGUgdXRpbHMuQmFzZVRleHR1cmVDYWNoZVsgdGhpcy5zb3VyY2UuX3BpeGlJZCBdO1xuICAgICAgICBkZWxldGUgdGhpcy5zb3VyY2UuX3BpeGlJZDtcbiAgICB9XG5cbiAgICBCYXNlVGV4dHVyZS5wcm90b3R5cGUuZGVzdHJveS5jYWxsKHRoaXMpO1xufTtcblxuLyoqXG4gKiBNaW1pYyBQaXhpIEJhc2VUZXh0dXJlLmZyb20uLi4uIG1ldGhvZC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAcGFyYW0gdmlkZW8ge0hUTUxWaWRlb0VsZW1lbnR9XG4gKiBAcGFyYW0gc2NhbGVNb2RlIHtudW1iZXJ9IFNlZSB7QGxpbmsgUElYSS5TQ0FMRV9NT0RFU30gZm9yIHBvc3NpYmxlIHZhbHVlc1xuICogQHJldHVybiB7UElYSS5WaWRlb0Jhc2VUZXh0dXJlfVxuICovXG5WaWRlb0Jhc2VUZXh0dXJlLmZyb21WaWRlbyA9IGZ1bmN0aW9uICh2aWRlbywgc2NhbGVNb2RlKVxue1xuICAgIGlmICghdmlkZW8uX3BpeGlJZClcbiAgICB7XG4gICAgICAgIHZpZGVvLl9waXhpSWQgPSAndmlkZW9fJyArIHV0aWxzLnVpZCgpO1xuICAgIH1cblxuICAgIHZhciBiYXNlVGV4dHVyZSA9IHV0aWxzLkJhc2VUZXh0dXJlQ2FjaGVbdmlkZW8uX3BpeGlJZF07XG5cbiAgICBpZiAoIWJhc2VUZXh0dXJlKVxuICAgIHtcbiAgICAgICAgYmFzZVRleHR1cmUgPSBuZXcgVmlkZW9CYXNlVGV4dHVyZSh2aWRlbywgc2NhbGVNb2RlKTtcbiAgICAgICAgdXRpbHMuQmFzZVRleHR1cmVDYWNoZVsgdmlkZW8uX3BpeGlJZCBdID0gYmFzZVRleHR1cmU7XG4gICAgfVxuXG4gICAgcmV0dXJuIGJhc2VUZXh0dXJlO1xufTtcblxuLyoqXG4gKiBIZWxwZXIgZnVuY3Rpb24gdGhhdCBjcmVhdGVzIGEgbmV3IEJhc2VUZXh0dXJlIGJhc2VkIG9uIHRoZSBnaXZlbiB2aWRlbyBlbGVtZW50LlxuICogVGhpcyBCYXNlVGV4dHVyZSBjYW4gdGhlbiBiZSB1c2VkIHRvIGNyZWF0ZSBhIHRleHR1cmVcbiAqXG4gKiBAc3RhdGljXG4gKiBAcGFyYW0gdmlkZW9TcmMge3N0cmluZ3xvYmplY3R8c3RyaW5nW118b2JqZWN0W119IFRoZSBVUkwocykgZm9yIHRoZSB2aWRlby5cbiAqIEBwYXJhbSBbdmlkZW9TcmMuc3JjXSB7c3RyaW5nfSBPbmUgb2YgdGhlIHNvdXJjZSB1cmxzIGZvciB0aGUgdmlkZW9cbiAqIEBwYXJhbSBbdmlkZW9TcmMubWltZV0ge3N0cmluZ30gVGhlIG1pbWV0eXBlIG9mIHRoZSB2aWRlbyAoZS5nLiAndmlkZW8vbXA0JykuIElmIG5vdCBzcGVjaWZpZWRcbiAqICB0aGUgdXJsJ3MgZXh0ZW5zaW9uIHdpbGwgYmUgdXNlZCBhcyB0aGUgc2Vjb25kIHBhcnQgb2YgdGhlIG1pbWUgdHlwZS5cbiAqIEBwYXJhbSBzY2FsZU1vZGUge251bWJlcn0gU2VlIHtAbGluayBQSVhJLlNDQUxFX01PREVTfSBmb3IgcG9zc2libGUgdmFsdWVzXG4gKiBAcmV0dXJuIHtQSVhJLlZpZGVvQmFzZVRleHR1cmV9XG4gKi9cblZpZGVvQmFzZVRleHR1cmUuZnJvbVVybCA9IGZ1bmN0aW9uICh2aWRlb1NyYywgc2NhbGVNb2RlKVxue1xuICAgIHZhciB2aWRlbyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3ZpZGVvJyk7XG5cbiAgICAvLyBhcnJheSBvZiBvYmplY3RzIG9yIHN0cmluZ3NcbiAgICBpZiAoQXJyYXkuaXNBcnJheSh2aWRlb1NyYykpXG4gICAge1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHZpZGVvU3JjLmxlbmd0aDsgKytpKVxuICAgICAgICB7XG4gICAgICAgICAgICB2aWRlby5hcHBlbmRDaGlsZChjcmVhdGVTb3VyY2UodmlkZW9TcmNbaV0uc3JjIHx8IHZpZGVvU3JjW2ldLCB2aWRlb1NyY1tpXS5taW1lKSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLy8gc2luZ2xlIG9iamVjdCBvciBzdHJpbmdcbiAgICBlbHNlXG4gICAge1xuICAgICAgICB2aWRlby5hcHBlbmRDaGlsZChjcmVhdGVTb3VyY2UodmlkZW9TcmMuc3JjIHx8IHZpZGVvU3JjLCB2aWRlb1NyYy5taW1lKSk7XG4gICAgfVxuXG4gICAgdmlkZW8ubG9hZCgpO1xuICAgIHZpZGVvLnBsYXkoKTtcblxuICAgIHJldHVybiBWaWRlb0Jhc2VUZXh0dXJlLmZyb21WaWRlbyh2aWRlbywgc2NhbGVNb2RlKTtcbn07XG5cblZpZGVvQmFzZVRleHR1cmUuZnJvbVVybHMgPSBWaWRlb0Jhc2VUZXh0dXJlLmZyb21Vcmw7XG5cbmZ1bmN0aW9uIGNyZWF0ZVNvdXJjZShwYXRoLCB0eXBlKVxue1xuICAgIGlmICghdHlwZSlcbiAgICB7XG4gICAgICAgIHR5cGUgPSAndmlkZW8vJyArIHBhdGguc3Vic3RyKHBhdGgubGFzdEluZGV4T2YoJy4nKSArIDEpO1xuICAgIH1cblxuICAgIHZhciBzb3VyY2UgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzb3VyY2UnKTtcblxuICAgIHNvdXJjZS5zcmMgPSBwYXRoO1xuICAgIHNvdXJjZS50eXBlID0gdHlwZTtcblxuICAgIHJldHVybiBzb3VyY2U7XG59XG4iLCJ2YXIgQ09OU1QgPSByZXF1aXJlKCcuLi9jb25zdCcpLFxuICAgIEV2ZW50RW1pdHRlciA9IHJlcXVpcmUoJ2V2ZW50ZW1pdHRlcjMnKSxcbiAgICAvLyBJbnRlcm5hbCBldmVudCB1c2VkIGJ5IGNvbXBvc2VkIGVtaXR0ZXJcbiAgICBUSUNLID0gJ3RpY2snO1xuXG4vKipcbiAqIEEgVGlja2VyIGNsYXNzIHRoYXQgcnVucyBhbiB1cGRhdGUgbG9vcCB0aGF0IG90aGVyIG9iamVjdHMgbGlzdGVuIHRvLlxuICogVGhpcyBjbGFzcyBpcyBjb21wb3NlZCBhcm91bmQgYW4gRXZlbnRFbWl0dGVyIG9iamVjdCB0byBhZGQgbGlzdGVuZXJzXG4gKiBtZWFudCBmb3IgZXhlY3V0aW9uIG9uIHRoZSBuZXh0IHJlcXVlc3RlZCBhbmltYXRpb24gZnJhbWUuXG4gKiBBbmltYXRpb24gZnJhbWVzIGFyZSByZXF1ZXN0ZWQgb25seSB3aGVuIG5lY2Vzc2FyeSxcbiAqIGUuZy4gV2hlbiB0aGUgdGlja2VyIGlzIHN0YXJ0ZWQgYW5kIHRoZSBlbWl0dGVyIGhhcyBsaXN0ZW5lcnMuXG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSS50aWNrZXJcbiAqL1xuZnVuY3Rpb24gVGlja2VyKClcbntcbiAgICB2YXIgX3RoaXMgPSB0aGlzO1xuXG4gICAgLyoqXG4gICAgICogSW50ZXJuYWwgdGljayBtZXRob2QgYm91bmQgdG8gdGlja2VyIGluc3RhbmNlLlxuICAgICAqIFRoaXMgaXMgYmVjYXVzZSBpbiBlYXJseSAyMDE1LCBGdW5jdGlvbi5iaW5kXG4gICAgICogaXMgc3RpbGwgNjAlIHNsb3dlciBpbiBoaWdoIHBlcmZvcm1hbmNlIHNjZW5hcmlvcy5cbiAgICAgKiBBbHNvIHNlcGFyYXRpbmcgZnJhbWUgcmVxdWVzdHMgZnJvbSB1cGRhdGUgbWV0aG9kXG4gICAgICogc28gbGlzdGVuZXJzIG1heSBiZSBjYWxsZWQgYXQgYW55IHRpbWUgYW5kIHdpdGhcbiAgICAgKiBhbnkgYW5pbWF0aW9uIEFQSSwganVzdCBpbnZva2UgdGlja2VyLnVwZGF0ZSh0aW1lKS5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fdGljayA9IGZ1bmN0aW9uIF90aWNrKHRpbWUpIHtcblxuICAgICAgICBfdGhpcy5fcmVxdWVzdElkID0gbnVsbDtcblxuICAgICAgICBpZiAoX3RoaXMuc3RhcnRlZClcbiAgICAgICAge1xuICAgICAgICAgICAgLy8gSW52b2tlIGxpc3RlbmVycyBub3dcbiAgICAgICAgICAgIF90aGlzLnVwZGF0ZSh0aW1lKTtcbiAgICAgICAgICAgIC8vIExpc3RlbmVyIHNpZGUgZWZmZWN0cyBtYXkgaGF2ZSBtb2RpZmllZCB0aWNrZXIgc3RhdGUuXG4gICAgICAgICAgICBpZiAoX3RoaXMuc3RhcnRlZCAmJiBfdGhpcy5fcmVxdWVzdElkID09PSBudWxsICYmIF90aGlzLl9lbWl0dGVyLmxpc3RlbmVycyhUSUNLLCB0cnVlKSlcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBfdGhpcy5fcmVxdWVzdElkID0gcmVxdWVzdEFuaW1hdGlvbkZyYW1lKF90aGlzLl90aWNrKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH07XG5cbiAgICAvKipcbiAgICAgKiBJbnRlcm5hbCBlbWl0dGVyIHVzZWQgdG8gZmlyZSAndGljaycgZXZlbnRcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX2VtaXR0ZXIgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgICAvKipcbiAgICAgKiBJbnRlcm5hbCBjdXJyZW50IGZyYW1lIHJlcXVlc3QgSURcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX3JlcXVlc3RJZCA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBJbnRlcm5hbCB2YWx1ZSBtYW5hZ2VkIGJ5IG1pbkZQUyBwcm9wZXJ0eSBzZXR0ZXIgYW5kIGdldHRlci5cbiAgICAgKiBUaGlzIGlzIHRoZSBtYXhpbXVtIGFsbG93ZWQgbWlsbGlzZWNvbmRzIGJldHdlZW4gdXBkYXRlcy5cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX21heEVsYXBzZWRNUyA9IDEwMDtcblxuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgb3Igbm90IHRoaXMgdGlja2VyIHNob3VsZCBpbnZva2UgdGhlIG1ldGhvZFxuICAgICAqIHtAbGluayBQSVhJLnRpY2tlci5UaWNrZXIjc3RhcnR9IGF1dG9tYXRpY2FsbHlcbiAgICAgKiB3aGVuIGEgbGlzdGVuZXIgaXMgYWRkZWQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqIEBkZWZhdWx0IGZhbHNlXG4gICAgICovXG4gICAgdGhpcy5hdXRvU3RhcnQgPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIFNjYWxhciB0aW1lIHZhbHVlIGZyb20gbGFzdCBmcmFtZSB0byB0aGlzIGZyYW1lLlxuICAgICAqIFRoaXMgdmFsdWUgaXMgY2FwcGVkIGJ5IHNldHRpbmcge0BsaW5rIFBJWEkudGlja2VyLlRpY2tlciNtaW5GUFN9XG4gICAgICogYW5kIGlzIHNjYWxlZCB3aXRoIHtAbGluayBQSVhJLnRpY2tlci5UaWNrZXIjc3BlZWR9LlxuICAgICAqICoqTm90ZToqKiBUaGUgY2FwIG1heSBiZSBleGNlZWRlZCBieSBzY2FsaW5nLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDFcbiAgICAgKi9cbiAgICB0aGlzLmRlbHRhVGltZSA9IDE7XG5cbiAgICAvKipcbiAgICAgKiBUaW1lIGVsYXBzZWQgaW4gbWlsbGlzZWNvbmRzIGZyb20gbGFzdCBmcmFtZSB0byB0aGlzIGZyYW1lLlxuICAgICAqIE9wcG9zZWQgdG8gd2hhdCB0aGUgc2NhbGFyIHtAbGluayBQSVhJLnRpY2tlci5UaWNrZXIjZGVsdGFUaW1lfVxuICAgICAqIGlzIGJhc2VkLCB0aGlzIHZhbHVlIGlzIG5laXRoZXIgY2FwcGVkIG5vciBzY2FsZWQuXG4gICAgICogSWYgdGhlIHBsYXRmb3JtIHN1cHBvcnRzIERPTUhpZ2hSZXNUaW1lU3RhbXAsXG4gICAgICogdGhpcyB2YWx1ZSB3aWxsIGhhdmUgYSBwcmVjaXNpb24gb2YgMSDCtXMuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtET01IaWdoUmVzVGltZVN0YW1wfG51bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAxIC8gVEFSR0VUX0ZQTVNcbiAgICAgKi9cbiAgICB0aGlzLmVsYXBzZWRNUyA9IDEgLyBDT05TVC5UQVJHRVRfRlBNUzsgLy8gZGVmYXVsdCB0byB0YXJnZXQgZnJhbWUgdGltZVxuXG4gICAgLyoqXG4gICAgICogVGhlIGxhc3QgdGltZSB7QGxpbmsgUElYSS50aWNrZXIuVGlja2VyI3VwZGF0ZX0gd2FzIGludm9rZWQuXG4gICAgICogVGhpcyB2YWx1ZSBpcyBhbHNvIHJlc2V0IGludGVybmFsbHkgb3V0c2lkZSBvZiBpbnZva2luZ1xuICAgICAqIHVwZGF0ZSwgYnV0IG9ubHkgd2hlbiBhIG5ldyBhbmltYXRpb24gZnJhbWUgaXMgcmVxdWVzdGVkLlxuICAgICAqIElmIHRoZSBwbGF0Zm9ybSBzdXBwb3J0cyBET01IaWdoUmVzVGltZVN0YW1wLFxuICAgICAqIHRoaXMgdmFsdWUgd2lsbCBoYXZlIGEgcHJlY2lzaW9uIG9mIDEgwrVzLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7RE9NSGlnaFJlc1RpbWVTdGFtcHxudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMFxuICAgICAqL1xuICAgIHRoaXMubGFzdFRpbWUgPSAwO1xuXG4gICAgLyoqXG4gICAgICogRmFjdG9yIG9mIGN1cnJlbnQge0BsaW5rIFBJWEkudGlja2VyLlRpY2tlciNkZWx0YVRpbWV9LlxuICAgICAqIEBleGFtcGxlXG4gICAgICogLy8gU2NhbGVzIHRpY2tlci5kZWx0YVRpbWUgdG8gd2hhdCB3b3VsZCBiZVxuICAgICAqIC8vIHRoZSBlcXVpdmFsZW50IG9mIGFwcHJveGltYXRlbHkgMTIwIEZQU1xuICAgICAqIHRpY2tlci5zcGVlZCA9IDI7XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMVxuICAgICAqL1xuICAgIHRoaXMuc3BlZWQgPSAxO1xuXG4gICAgLyoqXG4gICAgICogV2hldGhlciBvciBub3QgdGhpcyB0aWNrZXIgaGFzIGJlZW4gc3RhcnRlZC5cbiAgICAgKiBgdHJ1ZWAgaWYge0BsaW5rIFBJWEkudGlja2VyLlRpY2tlciNzdGFydH0gaGFzIGJlZW4gY2FsbGVkLlxuICAgICAqIGBmYWxzZWAgaWYge0BsaW5rIFBJWEkudGlja2VyLlRpY2tlciNzdG9wfSBoYXMgYmVlbiBjYWxsZWQuXG4gICAgICogV2hpbGUgYGZhbHNlYCwgdGhpcyB2YWx1ZSBtYXkgY2hhbmdlIHRvIGB0cnVlYCBpbiB0aGVcbiAgICAgKiBldmVudCBvZiB7QGxpbmsgUElYSS50aWNrZXIuVGlja2VyI2F1dG9TdGFydH0gYmVpbmcgYHRydWVgXG4gICAgICogYW5kIGEgbGlzdGVuZXIgaXMgYWRkZWQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqIEBkZWZhdWx0IGZhbHNlXG4gICAgICovXG4gICAgdGhpcy5zdGFydGVkID0gZmFsc2U7XG59XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKFRpY2tlci5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBUaGUgZnJhbWVzIHBlciBzZWNvbmQgYXQgd2hpY2ggdGhpcyB0aWNrZXIgaXMgcnVubmluZy5cbiAgICAgKiBUaGUgZGVmYXVsdCBpcyBhcHByb3hpbWF0ZWx5IDYwIGluIG1vc3QgbW9kZXJuIGJyb3dzZXJzLlxuICAgICAqICoqTm90ZToqKiBUaGlzIGRvZXMgbm90IGZhY3RvciBpbiB0aGUgdmFsdWUgb2ZcbiAgICAgKiB7QGxpbmsgUElYSS50aWNrZXIuVGlja2VyI3NwZWVkfSwgd2hpY2ggaXMgc3BlY2lmaWNcbiAgICAgKiB0byBzY2FsaW5nIHtAbGluayBQSVhJLnRpY2tlci5UaWNrZXIjZGVsdGFUaW1lfS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXJcbiAgICAgKiBAbWVtYmVyb2YgUElYSS50aWNrZXIuVGlja2VyI1xuICAgICAqIEByZWFkb25seVxuICAgICAqL1xuICAgIEZQUzoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIDEwMDAgLyB0aGlzLmVsYXBzZWRNUztcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBNYW5hZ2VzIHRoZSBtYXhpbXVtIGFtb3VudCBvZiBtaWxsaXNlY29uZHMgYWxsb3dlZCB0b1xuICAgICAqIGVsYXBzZSBiZXR3ZWVuIGludm9raW5nIHtAbGluayBQSVhJLnRpY2tlci5UaWNrZXIjdXBkYXRlfS5cbiAgICAgKiBUaGlzIHZhbHVlIGlzIHVzZWQgdG8gY2FwIHtAbGluayBQSVhJLnRpY2tlci5UaWNrZXIjZGVsdGFUaW1lfSxcbiAgICAgKiBidXQgZG9lcyBub3QgZWZmZWN0IHRoZSBtZWFzdXJlZCB2YWx1ZSBvZiB7QGxpbmsgUElYSS50aWNrZXIuVGlja2VyI0ZQU30uXG4gICAgICogV2hlbiBzZXR0aW5nIHRoaXMgcHJvcGVydHkgaXQgaXMgY2xhbXBlZCB0byBhIHZhbHVlIGJldHdlZW5cbiAgICAgKiBgMGAgYW5kIGBQSVhJLlRBUkdFVF9GUE1TICogMTAwMGAuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyXG4gICAgICogQG1lbWJlcm9mIFBJWEkudGlja2VyLlRpY2tlciNcbiAgICAgKiBAZGVmYXVsdCAxMFxuICAgICAqL1xuICAgIG1pbkZQUzoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIDEwMDAgLyB0aGlzLl9tYXhFbGFwc2VkTVM7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24oZnBzKVxuICAgICAgICB7XG4gICAgICAgICAgICAvLyBDbGFtcDogMCB0byBUQVJHRVRfRlBNU1xuICAgICAgICAgICAgdmFyIG1pbkZQTVMgPSBNYXRoLm1pbihNYXRoLm1heCgwLCBmcHMpIC8gMTAwMCwgQ09OU1QuVEFSR0VUX0ZQTVMpO1xuICAgICAgICAgICAgdGhpcy5fbWF4RWxhcHNlZE1TID0gMSAvIG1pbkZQTVM7XG4gICAgICAgIH1cbiAgICB9XG59KTtcblxuLyoqXG4gKiBDb25kaXRpb25hbGx5IHJlcXVlc3RzIGEgbmV3IGFuaW1hdGlvbiBmcmFtZS5cbiAqIElmIGEgZnJhbWUgaGFzIG5vdCBhbHJlYWR5IGJlZW4gcmVxdWVzdGVkLCBhbmQgaWYgdGhlIGludGVybmFsXG4gKiBlbWl0dGVyIGhhcyBsaXN0ZW5lcnMsIGEgbmV3IGZyYW1lIGlzIHJlcXVlc3RlZC5cbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5UaWNrZXIucHJvdG90eXBlLl9yZXF1ZXN0SWZOZWVkZWQgPSBmdW5jdGlvbiBfcmVxdWVzdElmTmVlZGVkKClcbntcbiAgICBpZiAodGhpcy5fcmVxdWVzdElkID09PSBudWxsICYmIHRoaXMuX2VtaXR0ZXIubGlzdGVuZXJzKFRJQ0ssIHRydWUpKVxuICAgIHtcbiAgICAgICAgLy8gZW5zdXJlIGNhbGxiYWNrcyBnZXQgY29ycmVjdCBkZWx0YVxuICAgICAgICB0aGlzLmxhc3RUaW1lID0gcGVyZm9ybWFuY2Uubm93KCk7XG4gICAgICAgIHRoaXMuX3JlcXVlc3RJZCA9IHJlcXVlc3RBbmltYXRpb25GcmFtZSh0aGlzLl90aWNrKTtcbiAgICB9XG59O1xuXG4vKipcbiAqIENvbmRpdGlvbmFsbHkgY2FuY2VscyBhIHBlbmRpbmcgYW5pbWF0aW9uIGZyYW1lLlxuICpcbiAqIEBwcml2YXRlXG4gKi9cblRpY2tlci5wcm90b3R5cGUuX2NhbmNlbElmTmVlZGVkID0gZnVuY3Rpb24gX2NhbmNlbElmTmVlZGVkKClcbntcbiAgICBpZiAodGhpcy5fcmVxdWVzdElkICE9PSBudWxsKVxuICAgIHtcbiAgICAgICAgY2FuY2VsQW5pbWF0aW9uRnJhbWUodGhpcy5fcmVxdWVzdElkKTtcbiAgICAgICAgdGhpcy5fcmVxdWVzdElkID0gbnVsbDtcbiAgICB9XG59O1xuXG4vKipcbiAqIENvbmRpdGlvbmFsbHkgcmVxdWVzdHMgYSBuZXcgYW5pbWF0aW9uIGZyYW1lLlxuICogSWYgdGhlIHRpY2tlciBoYXMgYmVlbiBzdGFydGVkIGl0IGNoZWNrcyBpZiBhIGZyYW1lIGhhcyBub3QgYWxyZWFkeVxuICogYmVlbiByZXF1ZXN0ZWQsIGFuZCBpZiB0aGUgaW50ZXJuYWwgZW1pdHRlciBoYXMgbGlzdGVuZXJzLiBJZiB0aGVzZVxuICogY29uZGl0aW9ucyBhcmUgbWV0LCBhIG5ldyBmcmFtZSBpcyByZXF1ZXN0ZWQuIElmIHRoZSB0aWNrZXIgaGFzIG5vdFxuICogYmVlbiBzdGFydGVkLCBidXQgYXV0b1N0YXJ0IGlzIGB0cnVlYCwgdGhlbiB0aGUgdGlja2VyIHN0YXJ0cyBub3csXG4gKiBhbmQgY29udGludWVzIHdpdGggdGhlIHByZXZpb3VzIGNvbmRpdGlvbnMgdG8gcmVxdWVzdCBhIG5ldyBmcmFtZS5cbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5UaWNrZXIucHJvdG90eXBlLl9zdGFydElmUG9zc2libGUgPSBmdW5jdGlvbiBfc3RhcnRJZlBvc3NpYmxlKClcbntcbiAgICBpZiAodGhpcy5zdGFydGVkKVxuICAgIHtcbiAgICAgICAgdGhpcy5fcmVxdWVzdElmTmVlZGVkKCk7XG4gICAgfVxuICAgIGVsc2UgaWYgKHRoaXMuYXV0b1N0YXJ0KVxuICAgIHtcbiAgICAgICAgdGhpcy5zdGFydCgpO1xuICAgIH1cbn07XG5cbi8qKlxuICogQ2FsbHMge0BsaW5rIG1vZHVsZTpldmVudGVtaXR0ZXIzLkV2ZW50RW1pdHRlciNvbn0gaW50ZXJuYWxseSBmb3IgdGhlXG4gKiBpbnRlcm5hbCAndGljaycgZXZlbnQuIEl0IGNoZWNrcyBpZiB0aGUgZW1pdHRlciBoYXMgbGlzdGVuZXJzLFxuICogYW5kIGlmIHNvIGl0IHJlcXVlc3RzIGEgbmV3IGFuaW1hdGlvbiBmcmFtZSBhdCB0aGlzIHBvaW50LlxuICpcbiAqIEBwYXJhbSBmbiB7RnVuY3Rpb259IFRoZSBsaXN0ZW5lciBmdW5jdGlvbiB0byBiZSBhZGRlZCBmb3IgdXBkYXRlc1xuICogQHBhcmFtIFtjb250ZXh0XSB7RnVuY3Rpb259IFRoZSBsaXN0ZW5lciBjb250ZXh0XG4gKiBAcmV0dXJucyB7UElYSS50aWNrZXIuVGlja2VyfSB0aGlzXG4gKi9cblRpY2tlci5wcm90b3R5cGUuYWRkID0gZnVuY3Rpb24gYWRkKGZuLCBjb250ZXh0KVxue1xuICAgIHRoaXMuX2VtaXR0ZXIub24oVElDSywgZm4sIGNvbnRleHQpO1xuXG4gICAgdGhpcy5fc3RhcnRJZlBvc3NpYmxlKCk7XG5cbiAgICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogQ2FsbHMge0BsaW5rIG1vZHVsZTpldmVudGVtaXR0ZXIzLkV2ZW50RW1pdHRlciNvbmNlfSBpbnRlcm5hbGx5IGZvciB0aGVcbiAqIGludGVybmFsICd0aWNrJyBldmVudC4gSXQgY2hlY2tzIGlmIHRoZSBlbWl0dGVyIGhhcyBsaXN0ZW5lcnMsXG4gKiBhbmQgaWYgc28gaXQgcmVxdWVzdHMgYSBuZXcgYW5pbWF0aW9uIGZyYW1lIGF0IHRoaXMgcG9pbnQuXG4gKlxuICogQHBhcmFtIGZuIHtGdW5jdGlvbn0gVGhlIGxpc3RlbmVyIGZ1bmN0aW9uIHRvIGJlIGFkZGVkIGZvciBvbmUgdXBkYXRlXG4gKiBAcGFyYW0gW2NvbnRleHRdIHtGdW5jdGlvbn0gVGhlIGxpc3RlbmVyIGNvbnRleHRcbiAqIEByZXR1cm5zIHtQSVhJLnRpY2tlci5UaWNrZXJ9IHRoaXNcbiAqL1xuVGlja2VyLnByb3RvdHlwZS5hZGRPbmNlID0gZnVuY3Rpb24gYWRkT25jZShmbiwgY29udGV4dClcbntcbiAgICB0aGlzLl9lbWl0dGVyLm9uY2UoVElDSywgZm4sIGNvbnRleHQpO1xuXG4gICAgdGhpcy5fc3RhcnRJZlBvc3NpYmxlKCk7XG5cbiAgICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogQ2FsbHMge0BsaW5rIG1vZHVsZTpldmVudGVtaXR0ZXIzLkV2ZW50RW1pdHRlciNvZmZ9IGludGVybmFsbHkgZm9yICd0aWNrJyBldmVudC5cbiAqIEl0IGNoZWNrcyBpZiB0aGUgZW1pdHRlciBoYXMgbGlzdGVuZXJzIGZvciAndGljaycgZXZlbnQuXG4gKiBJZiBpdCBkb2VzLCB0aGVuIGl0IGNhbmNlbHMgdGhlIGFuaW1hdGlvbiBmcmFtZS5cbiAqXG4gKiBAcGFyYW0gW2ZuXSB7RnVuY3Rpb259IFRoZSBsaXN0ZW5lciBmdW5jdGlvbiB0byBiZSByZW1vdmVkXG4gKiBAcGFyYW0gW2NvbnRleHRdIHtGdW5jdGlvbn0gVGhlIGxpc3RlbmVyIGNvbnRleHQgdG8gYmUgcmVtb3ZlZFxuICogQHJldHVybnMge1BJWEkudGlja2VyLlRpY2tlcn0gdGhpc1xuICovXG5UaWNrZXIucHJvdG90eXBlLnJlbW92ZSA9IGZ1bmN0aW9uIHJlbW92ZShmbiwgY29udGV4dClcbntcbiAgICB0aGlzLl9lbWl0dGVyLm9mZihUSUNLLCBmbiwgY29udGV4dCk7XG5cbiAgICBpZiAoIXRoaXMuX2VtaXR0ZXIubGlzdGVuZXJzKFRJQ0ssIHRydWUpKVxuICAgIHtcbiAgICAgICAgdGhpcy5fY2FuY2VsSWZOZWVkZWQoKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogU3RhcnRzIHRoZSB0aWNrZXIuIElmIHRoZSB0aWNrZXIgaGFzIGxpc3RlbmVyc1xuICogYSBuZXcgYW5pbWF0aW9uIGZyYW1lIGlzIHJlcXVlc3RlZCBhdCB0aGlzIHBvaW50LlxuICovXG5UaWNrZXIucHJvdG90eXBlLnN0YXJ0ID0gZnVuY3Rpb24gc3RhcnQoKVxue1xuICAgIGlmICghdGhpcy5zdGFydGVkKVxuICAgIHtcbiAgICAgICAgdGhpcy5zdGFydGVkID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5fcmVxdWVzdElmTmVlZGVkKCk7XG4gICAgfVxufTtcblxuLyoqXG4gKiBTdG9wcyB0aGUgdGlja2VyLiBJZiB0aGUgdGlja2VyIGhhcyByZXF1ZXN0ZWRcbiAqIGFuIGFuaW1hdGlvbiBmcmFtZSBpdCBpcyBjYW5jZWxlZCBhdCB0aGlzIHBvaW50LlxuICovXG5UaWNrZXIucHJvdG90eXBlLnN0b3AgPSBmdW5jdGlvbiBzdG9wKClcbntcbiAgICBpZiAodGhpcy5zdGFydGVkKVxuICAgIHtcbiAgICAgICAgdGhpcy5zdGFydGVkID0gZmFsc2U7XG4gICAgICAgIHRoaXMuX2NhbmNlbElmTmVlZGVkKCk7XG4gICAgfVxufTtcblxuLyoqXG4gKiBUcmlnZ2VycyBhbiB1cGRhdGUuIEFuIHVwZGF0ZSBlbnRhaWxzIHNldHRpbmcgdGhlXG4gKiBjdXJyZW50IHtAbGluayBQSVhJLnRpY2tlci5UaWNrZXIjZWxhcHNlZE1TfSxcbiAqIHRoZSBjdXJyZW50IHtAbGluayBQSVhJLnRpY2tlci5UaWNrZXIjZGVsdGFUaW1lfSxcbiAqIGludm9raW5nIGFsbCBsaXN0ZW5lcnMgd2l0aCBjdXJyZW50IGRlbHRhVGltZSxcbiAqIGFuZCB0aGVuIGZpbmFsbHkgc2V0dGluZyB7QGxpbmsgUElYSS50aWNrZXIuVGlja2VyI2xhc3RUaW1lfVxuICogd2l0aCB0aGUgdmFsdWUgb2YgY3VycmVudFRpbWUgdGhhdCB3YXMgcHJvdmlkZWQuXG4gKiBUaGlzIG1ldGhvZCB3aWxsIGJlIGNhbGxlZCBhdXRvbWF0aWNhbGx5IGJ5IGFuaW1hdGlvblxuICogZnJhbWUgY2FsbGJhY2tzIGlmIHRoZSB0aWNrZXIgaW5zdGFuY2UgaGFzIGJlZW4gc3RhcnRlZFxuICogYW5kIGxpc3RlbmVycyBhcmUgYWRkZWQuXG4gKlxuICogQHBhcmFtIFtjdXJyZW50VGltZT1wZXJmb3JtYW5jZS5ub3coKV0ge0RPTUhpZ2hSZXNUaW1lU3RhbXB8bnVtYmVyfSB0aGUgY3VycmVudCB0aW1lIG9mIGV4ZWN1dGlvblxuICovXG5UaWNrZXIucHJvdG90eXBlLnVwZGF0ZSA9IGZ1bmN0aW9uIHVwZGF0ZShjdXJyZW50VGltZSlcbntcbiAgICB2YXIgZWxhcHNlZE1TO1xuXG4gICAgLy8gQWxsb3cgY2FsbGluZyB1cGRhdGUgZGlyZWN0bHkgd2l0aCBkZWZhdWx0IGN1cnJlbnRUaW1lLlxuICAgIGN1cnJlbnRUaW1lID0gY3VycmVudFRpbWUgfHwgcGVyZm9ybWFuY2Uubm93KCk7XG4gICAgLy8gU2F2ZSB1bmNhcHBlZCBlbGFwc2VkTVMgZm9yIG1lYXN1cmVtZW50XG4gICAgZWxhcHNlZE1TID0gdGhpcy5lbGFwc2VkTVMgPSBjdXJyZW50VGltZSAtIHRoaXMubGFzdFRpbWU7XG5cbiAgICAvLyBjYXAgdGhlIG1pbGxpc2Vjb25kcyBlbGFwc2VkIHVzZWQgZm9yIGRlbHRhVGltZVxuICAgIGlmIChlbGFwc2VkTVMgPiB0aGlzLl9tYXhFbGFwc2VkTVMpXG4gICAge1xuICAgICAgICBlbGFwc2VkTVMgPSB0aGlzLl9tYXhFbGFwc2VkTVM7XG4gICAgfVxuXG4gICAgdGhpcy5kZWx0YVRpbWUgPSBlbGFwc2VkTVMgKiBDT05TVC5UQVJHRVRfRlBNUyAqIHRoaXMuc3BlZWQ7XG5cbiAgICAvLyBJbnZva2UgbGlzdGVuZXJzIGFkZGVkIHRvIGludGVybmFsIGVtaXR0ZXJcbiAgICB0aGlzLl9lbWl0dGVyLmVtaXQoVElDSywgdGhpcy5kZWx0YVRpbWUpO1xuXG4gICAgdGhpcy5sYXN0VGltZSA9IGN1cnJlbnRUaW1lO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBUaWNrZXI7XG4iLCJ2YXIgVGlja2VyID0gcmVxdWlyZSgnLi9UaWNrZXInKTtcblxuLyoqXG4gKiBUaGUgc2hhcmVkIHRpY2tlciBpbnN0YW5jZSB1c2VkIGJ5IHtAbGluayBQSVhJLmV4dHJhcy5Nb3ZpZUNsaXB9LlxuICogYW5kIGJ5IHtAbGluayBQSVhJLmludGVyYWN0aW9uLkludGVyYWN0aW9uTWFuYWdlcn0uXG4gKiBUaGUgcHJvcGVydHkge0BsaW5rIFBJWEkudGlja2VyLlRpY2tlciNhdXRvU3RhcnR9IGlzIHNldCB0byBgdHJ1ZWBcbiAqIGZvciB0aGlzIGluc3RhbmNlLiBQbGVhc2UgZm9sbG93IHRoZSBleGFtcGxlcyBmb3IgdXNhZ2UsIGluY2x1ZGluZ1xuICogaG93IHRvIG9wdC1vdXQgb2YgYXV0by1zdGFydGluZyB0aGUgc2hhcmVkIHRpY2tlci5cbiAqXG4gKiBAZXhhbXBsZVxuICogdmFyIHRpY2tlciA9IFBJWEkudGlja2VyLnNoYXJlZDtcbiAqIC8vIFNldCB0aGlzIHRvIHByZXZlbnQgc3RhcnRpbmcgdGhpcyB0aWNrZXIgd2hlbiBsaXN0ZW5lcnMgYXJlIGFkZGVkLlxuICogLy8gQnkgZGVmYXVsdCB0aGlzIGlzIHRydWUgb25seSBmb3IgdGhlIFBJWEkudGlja2VyLnNoYXJlZCBpbnN0YW5jZS5cbiAqIHRpY2tlci5hdXRvU3RhcnQgPSBmYWxzZTtcbiAqIC8vIEZZSSwgY2FsbCB0aGlzIHRvIGVuc3VyZSB0aGUgdGlja2VyIGlzIHN0b3BwZWQuIEl0IHNob3VsZCBiZSBzdG9wcGVkXG4gKiAvLyBpZiB5b3UgaGF2ZSBub3QgYXR0ZW1wdGVkIHRvIHJlbmRlciBhbnl0aGluZyB5ZXQuXG4gKiB0aWNrZXIuc3RvcCgpO1xuICogLy8gQ2FsbCB0aGlzIHdoZW4geW91IGFyZSByZWFkeSBmb3IgYSBydW5uaW5nIHNoYXJlZCB0aWNrZXIuXG4gKiB0aWNrZXIuc3RhcnQoKTtcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gWW91IG1heSB1c2UgdGhlIHNoYXJlZCB0aWNrZXIgdG8gcmVuZGVyLi4uXG4gKiB2YXIgcmVuZGVyZXIgPSBQSVhJLmF1dG9EZXRlY3RSZW5kZXJlcig4MDAsIDYwMCk7XG4gKiB2YXIgc3RhZ2UgPSBuZXcgUElYSS5Db250YWluZXIoKTtcbiAqIHZhciBpbnRlcmFjdGlvbk1hbmFnZXIgPSBQSVhJLmludGVyYWN0aW9uLkludGVyYWN0aW9uTWFuYWdlcihyZW5kZXJlcik7XG4gKiBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKHJlbmRlcmVyLnZpZXcpO1xuICogdGlja2VyLmFkZChmdW5jdGlvbiAodGltZSkge1xuICogICAgIHJlbmRlcmVyLnJlbmRlcihzdGFnZSk7XG4gKiB9KTtcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gT3IgeW91IGNhbiBqdXN0IHVwZGF0ZSBpdCBtYW51YWxseS5cbiAqIHRpY2tlci5hdXRvU3RhcnQgPSBmYWxzZTtcbiAqIHRpY2tlci5zdG9wKCk7XG4gKiBmdW5jdGlvbiBhbmltYXRlKHRpbWUpIHtcbiAqICAgICB0aWNrZXIudXBkYXRlKHRpbWUpO1xuICogICAgIHJlbmRlcmVyLnJlbmRlcihzdGFnZSk7XG4gKiAgICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKGFuaW1hdGUpO1xuICogfVxuICogYW5pbWF0ZShwZXJmb3JtYW5jZS5ub3coKSk7XG4gKlxuICogQHR5cGUge1BJWEkudGlja2VyLlRpY2tlcn1cbiAqIEBtZW1iZXJvZiBQSVhJLnRpY2tlclxuICovXG52YXIgc2hhcmVkID0gbmV3IFRpY2tlcigpO1xuc2hhcmVkLmF1dG9TdGFydCA9IHRydWU7XG5cbi8qKlxuICogQG5hbWVzcGFjZSBQSVhJLnRpY2tlclxuICovXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgICBzaGFyZWQ6IHNoYXJlZCxcbiAgICBUaWNrZXI6IFRpY2tlclxufTtcbiIsIi8qKlxuICogR2VuZXJpYyBNYXNrIFN0YWNrIGRhdGEgc3RydWN0dXJlXG4gKiBAY2xhc3NcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKi9cblxudmFyIEdMX01BUCA9IHt9O1xuXG5cbnZhciBjcmVhdGVJbmRpY2VzRm9yUXVhZHMgPSBmdW5jdGlvbiAoc2l6ZSlcbntcbiAgICAvLyB0aGUgdG90YWwgbnVtYmVyIG9mIGluZGljZXMgaW4gb3VyIGFycmF5LCB0aGVyZSBhcmUgNiBwb2ludHMgcGVyIHF1YWQuXG4gICBcbiAgICB2YXIgdG90YWxJbmRpY2VzID0gc2l6ZSAqIDY7XG5cbiAgICB2YXIgaW5kaWNlcyA9IG5ldyBVaW50MTZBcnJheSh0b3RhbEluZGljZXMpO1xuXG5cdC8vIGZpbGwgdGhlIGluZGljZXMgd2l0aCB0aGUgcXVhZHMgdG8gZHJhd1xuICAgIGZvciAodmFyIGk9MCwgaj0wOyBpIDwgdG90YWxJbmRpY2VzOyBpICs9IDYsIGogKz0gNClcbiAgICB7XG4gICAgICAgIGluZGljZXNbaSArIDBdID0gaiArIDA7XG4gICAgICAgIGluZGljZXNbaSArIDFdID0gaiArIDE7XG4gICAgICAgIGluZGljZXNbaSArIDJdID0gaiArIDI7XG4gICAgICAgIGluZGljZXNbaSArIDNdID0gaiArIDA7XG4gICAgICAgIGluZGljZXNbaSArIDRdID0gaiArIDI7XG4gICAgICAgIGluZGljZXNbaSArIDVdID0gaiArIDM7XG4gICAgfVxuXG4gICAgcmV0dXJuIGluZGljZXM7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGNyZWF0ZUluZGljZXNGb3JRdWFkczsiLCJ2YXIgQ09OU1QgPSByZXF1aXJlKCcuLi9jb25zdCcpO1xuXG4vKipcbiAqIEBuYW1lc3BhY2UgUElYSS51dGlsc1xuICovXG52YXIgdXRpbHMgPSBtb2R1bGUuZXhwb3J0cyA9IHtcbiAgICBfdWlkOiAwLFxuICAgIF9zYWlkSGVsbG86IGZhbHNlLFxuXG4gICAgRXZlbnRFbWl0dGVyOiAgIHJlcXVpcmUoJ2V2ZW50ZW1pdHRlcjMnKSxcbiAgICBwbHVnaW5UYXJnZXQ6ICAgcmVxdWlyZSgnLi9wbHVnaW5UYXJnZXQnKSxcbiAgICBhc3luYzogICAgICAgICAgcmVxdWlyZSgnYXN5bmMnKSxcblxuICAgIC8qKlxuICAgICAqIEdldHMgdGhlIG5leHQgdW5pcXVlIGlkZW50aWZpZXJcbiAgICAgKlxuICAgICAqIEByZXR1cm4ge251bWJlcn0gVGhlIG5leHQgdW5pcXVlIGlkZW50aWZpZXIgdG8gdXNlLlxuICAgICAqL1xuICAgIHVpZDogZnVuY3Rpb24gKClcbiAgICB7XG4gICAgICAgIHJldHVybiArK3V0aWxzLl91aWQ7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIENvbnZlcnRzIGEgaGV4IGNvbG9yIG51bWJlciB0byBhbiBbUiwgRywgQl0gYXJyYXlcbiAgICAgKlxuICAgICAqIEBwYXJhbSBoZXgge251bWJlcn1cbiAgICAgKiBAcGFyYW0gIHtudW1iZXJbXX0gW291dD1bXV1cbiAgICAgKiBAcmV0dXJuIHtudW1iZXJbXX0gQW4gYXJyYXkgcmVwcmVzZW50aW5nIHRoZSBbUiwgRywgQl0gb2YgdGhlIGNvbG9yLlxuICAgICAqL1xuICAgIGhleDJyZ2I6IGZ1bmN0aW9uIChoZXgsIG91dClcbiAgICB7XG4gICAgICAgIG91dCA9IG91dCB8fCBbXTtcblxuICAgICAgICBvdXRbMF0gPSAoaGV4ID4+IDE2ICYgMHhGRikgLyAyNTU7XG4gICAgICAgIG91dFsxXSA9IChoZXggPj4gOCAmIDB4RkYpIC8gMjU1O1xuICAgICAgICBvdXRbMl0gPSAoaGV4ICYgMHhGRikgLyAyNTU7XG5cbiAgICAgICAgcmV0dXJuIG91dDtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQ29udmVydHMgYSBoZXggY29sb3IgbnVtYmVyIHRvIGEgc3RyaW5nLlxuICAgICAqXG4gICAgICogQHBhcmFtIGhleCB7bnVtYmVyfVxuICAgICAqIEByZXR1cm4ge3N0cmluZ30gVGhlIHN0cmluZyBjb2xvci5cbiAgICAgKi9cbiAgICBoZXgyc3RyaW5nOiBmdW5jdGlvbiAoaGV4KVxuICAgIHtcbiAgICAgICAgaGV4ID0gaGV4LnRvU3RyaW5nKDE2KTtcbiAgICAgICAgaGV4ID0gJzAwMDAwMCcuc3Vic3RyKDAsIDYgLSBoZXgubGVuZ3RoKSArIGhleDtcblxuICAgICAgICByZXR1cm4gJyMnICsgaGV4O1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBDb252ZXJ0cyBhIGNvbG9yIGFzIGFuIFtSLCBHLCBCXSBhcnJheSB0byBhIGhleCBudW1iZXJcbiAgICAgKlxuICAgICAqIEBwYXJhbSByZ2Ige251bWJlcltdfVxuICAgICAqIEByZXR1cm4ge251bWJlcn0gVGhlIGNvbG9yIG51bWJlclxuICAgICAqL1xuICAgIHJnYjJoZXg6IGZ1bmN0aW9uIChyZ2IpXG4gICAge1xuICAgICAgICByZXR1cm4gKChyZ2JbMF0qMjU1IDw8IDE2KSArIChyZ2JbMV0qMjU1IDw8IDgpICsgcmdiWzJdKjI1NSk7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIENoZWNrcyB3aGV0aGVyIHRoZSBDYW52YXMgQmxlbmRNb2RlcyBhcmUgc3VwcG9ydGVkIGJ5IHRoZSBjdXJyZW50IGJyb3dzZXJcbiAgICAgKlxuICAgICAqIEByZXR1cm4ge2Jvb2xlYW59IHdoZXRoZXIgdGhleSBhcmUgc3VwcG9ydGVkXG4gICAgICovXG4gICAgY2FuVXNlTmV3Q2FudmFzQmxlbmRNb2RlczogZnVuY3Rpb24gKClcbiAgICB7XG4gICAgICAgIGlmICh0eXBlb2YgZG9jdW1lbnQgPT09ICd1bmRlZmluZWQnKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgcG5nSGVhZCA9ICdkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQUFRQUFBQUJBUU1BQUFERDhwMk9BQUFBQTFCTVZFWC8nO1xuICAgICAgICB2YXIgcG5nRW5kID0gJ0FBQUFDa2xFUVZRSTEyTmdBQUFBQWdBQjRpRzhNd0FBQUFCSlJVNUVya0pnZ2c9PSc7XG5cbiAgICAgICAgdmFyIG1hZ2VudGEgPSBuZXcgSW1hZ2UoKTtcbiAgICAgICAgbWFnZW50YS5zcmMgPSBwbmdIZWFkICsgJ0FQODA0T2E2JyArIHBuZ0VuZDtcblxuICAgICAgICB2YXIgeWVsbG93ID0gbmV3IEltYWdlKCk7XG4gICAgICAgIHllbGxvdy5zcmMgPSBwbmdIZWFkICsgJy93Q0t4dlJGJyArIHBuZ0VuZDtcblxuICAgICAgICB2YXIgY2FudmFzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnY2FudmFzJyk7XG4gICAgICAgIGNhbnZhcy53aWR0aCA9IDY7XG4gICAgICAgIGNhbnZhcy5oZWlnaHQgPSAxO1xuXG4gICAgICAgIHZhciBjb250ZXh0ID0gY2FudmFzLmdldENvbnRleHQoJzJkJyk7XG4gICAgICAgIGNvbnRleHQuZ2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uID0gJ211bHRpcGx5JztcbiAgICAgICAgY29udGV4dC5kcmF3SW1hZ2UobWFnZW50YSwgMCwgMCk7XG4gICAgICAgIGNvbnRleHQuZHJhd0ltYWdlKHllbGxvdywgMiwgMCk7XG5cbiAgICAgICAgdmFyIGRhdGEgPSBjb250ZXh0LmdldEltYWdlRGF0YSgyLDAsMSwxKS5kYXRhO1xuXG4gICAgICAgIHJldHVybiAoZGF0YVswXSA9PT0gMjU1ICYmIGRhdGFbMV0gPT09IDAgJiYgZGF0YVsyXSA9PT0gMCk7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIEdpdmVuIGEgbnVtYmVyLCB0aGlzIGZ1bmN0aW9uIHJldHVybnMgdGhlIGNsb3Nlc3QgbnVtYmVyIHRoYXQgaXMgYSBwb3dlciBvZiB0d29cbiAgICAgKiB0aGlzIGZ1bmN0aW9uIGlzIHRha2VuIGZyb20gU3RhcmxpbmcgRnJhbWV3b3JrIGFzIGl0cyBwcmV0dHkgbmVhdCA7KVxuICAgICAqXG4gICAgICogQHBhcmFtIG51bWJlciB7bnVtYmVyfVxuICAgICAqIEByZXR1cm4ge251bWJlcn0gdGhlIGNsb3Nlc3QgbnVtYmVyIHRoYXQgaXMgYSBwb3dlciBvZiB0d29cbiAgICAgKi9cbiAgICBnZXROZXh0UG93ZXJPZlR3bzogZnVuY3Rpb24gKG51bWJlcilcbiAgICB7XG4gICAgICAgIC8vIHNlZTogaHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9Qb3dlcl9vZl90d28jRmFzdF9hbGdvcml0aG1fdG9fY2hlY2tfaWZfYV9wb3NpdGl2ZV9udW1iZXJfaXNfYV9wb3dlcl9vZl90d29cbiAgICAgICAgaWYgKG51bWJlciA+IDAgJiYgKG51bWJlciAmIChudW1iZXIgLSAxKSkgPT09IDApXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiBudW1iZXI7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgICB2YXIgcmVzdWx0ID0gMTtcblxuICAgICAgICAgICAgd2hpbGUgKHJlc3VsdCA8IG51bWJlcilcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICByZXN1bHQgPDw9IDE7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogY2hlY2tzIGlmIHRoZSBnaXZlbiB3aWR0aCBhbmQgaGVpZ2h0IG1ha2UgYSBwb3dlciBvZiB0d28gcmVjdGFuZ2xlXG4gICAgICpcbiAgICAgKiBAcGFyYW0gd2lkdGgge251bWJlcn1cbiAgICAgKiBAcGFyYW0gaGVpZ2h0IHtudW1iZXJ9XG4gICAgICogQHJldHVybiB7Ym9vbGVhbn1cbiAgICAgKi9cbiAgICBpc1Bvd2VyT2ZUd286IGZ1bmN0aW9uICh3aWR0aCwgaGVpZ2h0KVxuICAgIHtcbiAgICAgICAgcmV0dXJuICh3aWR0aCA+IDAgJiYgKHdpZHRoICYgKHdpZHRoIC0gMSkpID09PSAwICYmIGhlaWdodCA+IDAgJiYgKGhlaWdodCAmIChoZWlnaHQgLSAxKSkgPT09IDApO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBnZXQgdGhlIHJlc29sdXRpb24gb2YgYW4gYXNzZXQgYnkgbG9va2luZyBmb3IgdGhlIHByZWZpeFxuICAgICAqIHVzZWQgYnkgc3ByaXRlc2hlZXRzIGFuZCBpbWFnZSB1cmxzXG4gICAgICpcbiAgICAgKiBAcGFyYW0gdXJsIHtzdHJpbmd9IHRoZSBpbWFnZSBwYXRoXG4gICAgICogQHJldHVybiB7bnVtYmVyfVxuICAgICAqL1xuICAgIGdldFJlc29sdXRpb25PZlVybDogZnVuY3Rpb24gKHVybClcbiAgICB7XG4gICAgICAgIHZhciByZXNvbHV0aW9uID0gQ09OU1QuUkVUSU5BX1BSRUZJWC5leGVjKHVybCk7XG5cbiAgICAgICAgaWYgKHJlc29sdXRpb24pXG4gICAgICAgIHtcbiAgICAgICAgICAgcmV0dXJuIHBhcnNlRmxvYXQocmVzb2x1dGlvblsxXSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gMTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogTG9ncyBvdXQgdGhlIHZlcnNpb24gYW5kIHJlbmRlcmVyIGluZm9ybWF0aW9uIGZvciB0aGlzIHJ1bm5pbmcgaW5zdGFuY2Ugb2YgUElYSS5cbiAgICAgKiBJZiB5b3UgZG9uJ3Qgd2FudCB0byBzZWUgdGhpcyBtZXNzYWdlIHlvdSBjYW4gc2V0IGBQSVhJLnV0aWxzLl9zYWlkSGVsbG8gPSB0cnVlO2BcbiAgICAgKiBzbyB0aGUgbGlicmFyeSB0aGlua3MgaXQgYWxyZWFkeSBzYWlkIGl0LiBLZWVwIGluIG1pbmQgdGhhdCBkb2luZyB0aGF0IHdpbGwgZm9yZXZlclxuICAgICAqIG1ha2VzIHlvdSBhIGplcmsgZmFjZS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSB0eXBlIC0gVGhlIHN0cmluZyByZW5kZXJlciB0eXBlIHRvIGxvZy5cbiAgICAgKiBAY29uc3RhbnRcbiAgICAgKiBAc3RhdGljXG4gICAgICovXG4gICAgc2F5SGVsbG86IGZ1bmN0aW9uICh0eXBlKVxuICAgIHtcbiAgICAgICAgaWYgKHV0aWxzLl9zYWlkSGVsbG8pXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChuYXZpZ2F0b3IudXNlckFnZW50LnRvTG93ZXJDYXNlKCkuaW5kZXhPZignY2hyb21lJykgPiAtMSlcbiAgICAgICAge1xuICAgICAgICAgICAgdmFyIGFyZ3MgPSBbXG4gICAgICAgICAgICAgICAgJ1xcbiAlYyAlYyAlYyBQaXhpLmpzICcgKyBDT05TVC5WRVJTSU9OICsgJyAtIOKcsCAnICsgdHlwZSArICcg4pywICAlYyAnICsgJyAlYyAnICsgJyBodHRwOi8vd3d3LnBpeGlqcy5jb20vICAlYyAlYyDimaUlY+KZpSVj4pmlIFxcblxcbicsXG4gICAgICAgICAgICAgICAgJ2JhY2tncm91bmQ6ICNmZjY2YTU7IHBhZGRpbmc6NXB4IDA7JyxcbiAgICAgICAgICAgICAgICAnYmFja2dyb3VuZDogI2ZmNjZhNTsgcGFkZGluZzo1cHggMDsnLFxuICAgICAgICAgICAgICAgICdjb2xvcjogI2ZmNjZhNTsgYmFja2dyb3VuZDogIzAzMDMwNzsgcGFkZGluZzo1cHggMDsnLFxuICAgICAgICAgICAgICAgICdiYWNrZ3JvdW5kOiAjZmY2NmE1OyBwYWRkaW5nOjVweCAwOycsXG4gICAgICAgICAgICAgICAgJ2JhY2tncm91bmQ6ICNmZmMzZGM7IHBhZGRpbmc6NXB4IDA7JyxcbiAgICAgICAgICAgICAgICAnYmFja2dyb3VuZDogI2ZmNjZhNTsgcGFkZGluZzo1cHggMDsnLFxuICAgICAgICAgICAgICAgICdjb2xvcjogI2ZmMjQyNDsgYmFja2dyb3VuZDogI2ZmZjsgcGFkZGluZzo1cHggMDsnLFxuICAgICAgICAgICAgICAgICdjb2xvcjogI2ZmMjQyNDsgYmFja2dyb3VuZDogI2ZmZjsgcGFkZGluZzo1cHggMDsnLFxuICAgICAgICAgICAgICAgICdjb2xvcjogI2ZmMjQyNDsgYmFja2dyb3VuZDogI2ZmZjsgcGFkZGluZzo1cHggMDsnXG4gICAgICAgICAgICBdO1xuXG4gICAgICAgICAgICB3aW5kb3cuY29uc29sZS5sb2cuYXBwbHkoY29uc29sZSwgYXJncyk7IC8vanNoaW50IGlnbm9yZTpsaW5lXG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAod2luZG93LmNvbnNvbGUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHdpbmRvdy5jb25zb2xlLmxvZygnUGl4aS5qcyAnICsgQ09OU1QuVkVSU0lPTiArICcgLSAnICsgdHlwZSArICcgLSBodHRwOi8vd3d3LnBpeGlqcy5jb20vJyk7IC8vanNoaW50IGlnbm9yZTpsaW5lXG4gICAgICAgIH1cblxuICAgICAgICB1dGlscy5fc2FpZEhlbGxvID0gdHJ1ZTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogSGVscGVyIGZvciBjaGVja2luZyBmb3Igd2ViZ2wgc3VwcG9ydFxuICAgICAqXG4gICAgICogQHJldHVybiB7Ym9vbGVhbn1cbiAgICAgKi9cbiAgICBpc1dlYkdMU3VwcG9ydGVkOiBmdW5jdGlvbiAoKVxuICAgIHtcbiAgICAgICAgdmFyIGNvbnRleHRPcHRpb25zID0geyBzdGVuY2lsOiB0cnVlIH07XG4gICAgICAgIHRyeVxuICAgICAgICB7XG4gICAgICAgICAgICBpZiAoIXdpbmRvdy5XZWJHTFJlbmRlcmluZ0NvbnRleHQpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB2YXIgY2FudmFzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnY2FudmFzJyksXG4gICAgICAgICAgICAgICAgZ2wgPSBjYW52YXMuZ2V0Q29udGV4dCgnd2ViZ2wnLCBjb250ZXh0T3B0aW9ucykgfHwgY2FudmFzLmdldENvbnRleHQoJ2V4cGVyaW1lbnRhbC13ZWJnbCcsIGNvbnRleHRPcHRpb25zKTtcblxuICAgICAgICAgICAgcmV0dXJuICEhKGdsICYmIGdsLmdldENvbnRleHRBdHRyaWJ1dGVzKCkuc3RlbmNpbCk7XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHNpZ24gb2YgbnVtYmVyXG4gICAgICpcbiAgICAgKiBAcGFyYW0gbiB7bnVtYmVyfVxuICAgICAqIEByZXR1cm5zIHtudW1iZXJ9IDAgaWYgbiBpcyAwLCAtMSBpZiBuIGlzIG5lZ2F0aXZlLCAxIGlmIG4gaSBwb3NpdGl2ZVxuICAgICAqL1xuICAgIHNpZ246IGZ1bmN0aW9uIChuKVxuICAgIHtcbiAgICAgICAgcmV0dXJuIG4gPyAobiA8IDAgPyAtMSA6IDEpIDogMDtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogcmVtb3ZlSXRlbXNcbiAgICAgKlxuICAgICAqIEBwYXJhbSB7YXJyYXl9IGFyciBUaGUgdGFyZ2V0IGFycmF5XG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHN0YXJ0SWR4IFRoZSBpbmRleCB0byBiZWdpbiByZW1vdmluZyBmcm9tIChpbmNsdXNpdmUpXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHJlbW92ZUNvdW50IEhvdyBtYW55IGl0ZW1zIHRvIHJlbW92ZVxuICAgICAqL1xuICAgIHJlbW92ZUl0ZW1zOiBmdW5jdGlvbiAoYXJyLCBzdGFydElkeCwgcmVtb3ZlQ291bnQpXG4gICAge1xuICAgICAgICB2YXIgbGVuZ3RoID0gYXJyLmxlbmd0aDtcblxuICAgICAgICBpZiAoc3RhcnRJZHggPj0gbGVuZ3RoIHx8IHJlbW92ZUNvdW50ID09PSAwKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICByZW1vdmVDb3VudCA9IChzdGFydElkeCtyZW1vdmVDb3VudCA+IGxlbmd0aCA/IGxlbmd0aC1zdGFydElkeCA6IHJlbW92ZUNvdW50KTtcbiAgICAgICAgZm9yICh2YXIgaSA9IHN0YXJ0SWR4LCBsZW4gPSBsZW5ndGgtcmVtb3ZlQ291bnQ7IGkgPCBsZW47ICsraSlcbiAgICAgICAge1xuICAgICAgICAgICAgYXJyW2ldID0gYXJyW2kgKyByZW1vdmVDb3VudF07XG4gICAgICAgIH1cblxuICAgICAgICBhcnIubGVuZ3RoID0gbGVuO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBAdG9kbyBEZXNjcmliZSBwcm9wZXJ0eSB1c2FnZVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgVGV4dHVyZUNhY2hlOiB7fSxcblxuICAgIC8qKlxuICAgICAqIEB0b2RvIERlc2NyaWJlIHByb3BlcnR5IHVzYWdlXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICBCYXNlVGV4dHVyZUNhY2hlOiB7fVxufTtcbiIsIi8qKlxuICogTWl4aW5zIGZ1bmN0aW9uYWxpdHkgdG8gbWFrZSBhbiBvYmplY3QgaGF2ZSBcInBsdWdpbnNcIi5cbiAqXG4gKiBAbWl4aW5cbiAqIEBtZW1iZXJvZiBQSVhJLnV0aWxzXG4gKiBAcGFyYW0gb2JqIHtvYmplY3R9IFRoZSBvYmplY3QgdG8gbWl4IGludG8uXG4gKiBAZXhhbXBsZVxuICogICAgICBmdW5jdGlvbiBNeU9iamVjdCgpIHt9XG4gKlxuICogICAgICBwbHVnaW5UYXJnZXQubWl4aW4oTXlPYmplY3QpO1xuICovXG5mdW5jdGlvbiBwbHVnaW5UYXJnZXQob2JqKVxue1xuICAgIG9iai5fX3BsdWdpbnMgPSB7fTtcblxuICAgIC8qKlxuICAgICAqIEFkZHMgYSBwbHVnaW4gdG8gYW4gb2JqZWN0XG4gICAgICpcbiAgICAgKiBAcGFyYW0gcGx1Z2luTmFtZSB7c3RyaW5nfSBUaGUgZXZlbnRzIHRoYXQgc2hvdWxkIGJlIGxpc3RlZC5cbiAgICAgKiBAcGFyYW0gY3RvciB7RnVuY3Rpb259IFRoZSBjb25zdHJ1Y3RvciBmdW5jdGlvbiBmb3IgdGhlIHBsdWdpbi5cbiAgICAgKi9cbiAgICBvYmoucmVnaXN0ZXJQbHVnaW4gPSBmdW5jdGlvbiAocGx1Z2luTmFtZSwgY3RvcilcbiAgICB7XG4gICAgICAgIG9iai5fX3BsdWdpbnNbcGx1Z2luTmFtZV0gPSBjdG9yO1xuICAgIH07XG5cbiAgICAvKipcbiAgICAgKiBJbnN0YW50aWF0ZXMgYWxsIHRoZSBwbHVnaW5zIG9mIHRoaXMgb2JqZWN0XG4gICAgICpcbiAgICAgKi9cbiAgICBvYmoucHJvdG90eXBlLmluaXRQbHVnaW5zID0gZnVuY3Rpb24gKClcbiAgICB7XG4gICAgICAgIHRoaXMucGx1Z2lucyA9IHRoaXMucGx1Z2lucyB8fCB7fTtcblxuICAgICAgICBmb3IgKHZhciBvIGluIG9iai5fX3BsdWdpbnMpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMucGx1Z2luc1tvXSA9IG5ldyAob2JqLl9fcGx1Z2luc1tvXSkodGhpcyk7XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgLyoqXG4gICAgICogUmVtb3ZlcyBhbGwgdGhlIHBsdWdpbnMgb2YgdGhpcyBvYmplY3RcbiAgICAgKlxuICAgICAqL1xuICAgIG9iai5wcm90b3R5cGUuZGVzdHJveVBsdWdpbnMgPSBmdW5jdGlvbiAoKVxuICAgIHtcbiAgICAgICAgZm9yICh2YXIgbyBpbiB0aGlzLnBsdWdpbnMpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMucGx1Z2luc1tvXS5kZXN0cm95KCk7XG4gICAgICAgICAgICB0aGlzLnBsdWdpbnNbb10gPSBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5wbHVnaW5zID0gbnVsbDtcbiAgICB9O1xufVxuXG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICAgIC8qKlxuICAgICAqIE1peGVzIGluIHRoZSBwcm9wZXJ0aWVzIG9mIHRoZSBwbHVnaW5UYXJnZXQgaW50byBhbm90aGVyIG9iamVjdFxuICAgICAqXG4gICAgICogQHBhcmFtIG9iamVjdCB7b2JqZWN0fSBUaGUgb2JqIHRvIG1peCBpbnRvXG4gICAgICovXG4gICAgbWl4aW46IGZ1bmN0aW9uIG1peGluKG9iailcbiAgICB7XG4gICAgICAgIHBsdWdpblRhcmdldChvYmopO1xuICAgIH1cbn07XG4iLCIvKmdsb2JhbCBjb25zb2xlICovXG52YXIgY29yZSA9IHJlcXVpcmUoJy4vY29yZScpLFxuICAgIG1lc2ggPSByZXF1aXJlKCcuL21lc2gnKSxcbiAgICBleHRyYXMgPSByZXF1aXJlKCcuL2V4dHJhcycpLFxuICAgIGZpbHRlcnMgPSByZXF1aXJlKCcuL2ZpbHRlcnMnKTtcblxuLyoqXG4gKiBAY2xhc3NcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBTcHJpdGVCYXRjaFxuICogQG1lbWJlcm9mIFBJWElcbiAqIEBzZWUgUElYSS5QYXJ0aWNsZUNvbnRhaW5lclxuICogQHRocm93cyB7UmVmZXJlbmNlRXJyb3J9IFNwcml0ZUJhdGNoIGRvZXMgbm90IGV4aXN0IGFueSBtb3JlLCBwbGVhc2UgdXNlIHRoZSBuZXcgUGFydGljbGVDb250YWluZXIgaW5zdGVhZC5cbiAqIEBkZXByZWNhdGVkIHNpbmNlIHZlcnNpb24gMy4wLjBcbiAqL1xuY29yZS5TcHJpdGVCYXRjaCA9IGZ1bmN0aW9uKClcbntcbiAgICB0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoJ1Nwcml0ZUJhdGNoIGRvZXMgbm90IGV4aXN0IGFueSBtb3JlLCBwbGVhc2UgdXNlIHRoZSBuZXcgUGFydGljbGVDb250YWluZXIgaW5zdGVhZC4nKTtcbn07XG5cbi8qKlxuICogQGNsYXNzXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgQXNzZXRMb2FkZXJcbiAqIEBtZW1iZXJvZiBQSVhJXG4gKiBAc2VlIFBJWEkubG9hZGVycy5Mb2FkZXJcbiAqIEB0aHJvd3Mge1JlZmVyZW5jZUVycm9yfSBUaGUgbG9hZGVyIHN5c3RlbSB3YXMgb3ZlcmhhdWxlZCBpbiBwaXhpIHYzLCBwbGVhc2Ugc2VlIHRoZSBuZXcgUElYSS5sb2FkZXJzLkxvYWRlciBjbGFzcy5cbiAqIEBkZXByZWNhdGVkIHNpbmNlIHZlcnNpb24gMy4wLjBcbiAqL1xuY29yZS5Bc3NldExvYWRlciA9IGZ1bmN0aW9uKClcbntcbiAgICB0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoJ1RoZSBsb2FkZXIgc3lzdGVtIHdhcyBvdmVyaGF1bGVkIGluIHBpeGkgdjMsIHBsZWFzZSBzZWUgdGhlIG5ldyBQSVhJLmxvYWRlcnMuTG9hZGVyIGNsYXNzLicpO1xufTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoY29yZSwge1xuXG4gICAgLyoqXG4gICAgICogQGNsYXNzXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAbmFtZSBTdGFnZVxuICAgICAqIEBtZW1iZXJvZiBQSVhJXG4gICAgICogQHNlZSBQSVhJLkNvbnRhaW5lclxuICAgICAqIEBkZXByZWNhdGVkIHNpbmNlIHZlcnNpb24gMy4wLjBcbiAgICAgKi9cbiAgICBTdGFnZToge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uKClcbiAgICAgICAge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKCdZb3UgZG8gbm90IG5lZWQgdG8gdXNlIGEgUElYSSBTdGFnZSBhbnkgbW9yZSwgeW91IGNhbiBzaW1wbHkgcmVuZGVyIGFueSBjb250YWluZXIuJyk7XG4gICAgICAgICAgICByZXR1cm4gY29yZS5Db250YWluZXI7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQGNsYXNzXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAbmFtZSBEaXNwbGF5T2JqZWN0Q29udGFpbmVyXG4gICAgICogQG1lbWJlcm9mIFBJWElcbiAgICAgKiBAc2VlIFBJWEkuQ29udGFpbmVyXG4gICAgICogQGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiAzLjAuMFxuICAgICAqL1xuICAgIERpc3BsYXlPYmplY3RDb250YWluZXI6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbigpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignRGlzcGxheU9iamVjdENvbnRhaW5lciBoYXMgYmVlbiBzaG9ydGVuZWQgdG8gQ29udGFpbmVyLCBwbGVhc2UgdXNlIENvbnRhaW5lciBmcm9tIG5vdyBvbi4nKTtcbiAgICAgICAgICAgIHJldHVybiBjb3JlLkNvbnRhaW5lcjtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBAY2xhc3NcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBuYW1lIFN0cmlwXG4gICAgICogQG1lbWJlcm9mIFBJWElcbiAgICAgKiBAc2VlIFBJWEkubWVzaC5NZXNoXG4gICAgICogQGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiAzLjAuMFxuICAgICAqL1xuICAgIFN0cmlwOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24oKVxuICAgICAgICB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ1RoZSBTdHJpcCBjbGFzcyBoYXMgYmVlbiByZW5hbWVkIHRvIE1lc2ggYW5kIG1vdmVkIHRvIG1lc2guTWVzaCwgcGxlYXNlIHVzZSBtZXNoLk1lc2ggZnJvbSBub3cgb24uJyk7XG4gICAgICAgICAgICByZXR1cm4gbWVzaC5NZXNoO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIEBjbGFzc1xuICAgICAqIEBwcml2YXRlXG4gICAgICogQG5hbWUgUm9wZVxuICAgICAqIEBtZW1iZXJvZiBQSVhJXG4gICAgICogQHNlZSBQSVhJLm1lc2guUm9wZVxuICAgICAqIEBkZXByZWNhdGVkIHNpbmNlIHZlcnNpb24gMy4wLjBcbiAgICAgKi9cbiAgICBSb3BlOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24oKVxuICAgICAgICB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ1RoZSBSb3BlIGNsYXNzIGhhcyBiZWVuIG1vdmVkIHRvIG1lc2guUm9wZSwgcGxlYXNlIHVzZSBtZXNoLlJvcGUgZnJvbSBub3cgb24uJyk7XG4gICAgICAgICAgICByZXR1cm4gbWVzaC5Sb3BlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIEBjbGFzc1xuICAgICAqIEBwcml2YXRlXG4gICAgICogQG5hbWUgTW92aWVDbGlwXG4gICAgICogQG1lbWJlcm9mIFBJWElcbiAgICAgKiBAc2VlIFBJWEkuZXh0cmFzLk1vdmllQ2xpcFxuICAgICAqIEBkZXByZWNhdGVkIHNpbmNlIHZlcnNpb24gMy4wLjBcbiAgICAgKi9cbiAgICBNb3ZpZUNsaXA6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbigpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignVGhlIE1vdmllQ2xpcCBjbGFzcyBoYXMgYmVlbiBtb3ZlZCB0byBleHRyYXMuTW92aWVDbGlwLCBwbGVhc2UgdXNlIGV4dHJhcy5Nb3ZpZUNsaXAgZnJvbSBub3cgb24uJyk7XG4gICAgICAgICAgICByZXR1cm4gZXh0cmFzLk1vdmllQ2xpcDtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBAY2xhc3NcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBuYW1lIFRpbGluZ1Nwcml0ZVxuICAgICAqIEBtZW1iZXJvZiBQSVhJXG4gICAgICogQHNlZSBQSVhJLmV4dHJhcy5UaWxpbmdTcHJpdGVcbiAgICAgKiBAZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDMuMC4wXG4gICAgICovXG4gICAgVGlsaW5nU3ByaXRlOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24oKVxuICAgICAgICB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ1RoZSBUaWxpbmdTcHJpdGUgY2xhc3MgaGFzIGJlZW4gbW92ZWQgdG8gZXh0cmFzLlRpbGluZ1Nwcml0ZSwgcGxlYXNlIHVzZSBleHRyYXMuVGlsaW5nU3ByaXRlIGZyb20gbm93IG9uLicpO1xuICAgICAgICAgICAgcmV0dXJuIGV4dHJhcy5UaWxpbmdTcHJpdGU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQGNsYXNzXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAbmFtZSBCaXRtYXBUZXh0XG4gICAgICogQG1lbWJlcm9mIFBJWElcbiAgICAgKiBAc2VlIFBJWEkuZXh0cmFzLkJpdG1hcFRleHRcbiAgICAgKiBAZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDMuMC4wXG4gICAgICovXG4gICAgQml0bWFwVGV4dDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uKClcbiAgICAgICAge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKCdUaGUgQml0bWFwVGV4dCBjbGFzcyBoYXMgYmVlbiBtb3ZlZCB0byBleHRyYXMuQml0bWFwVGV4dCwgcGxlYXNlIHVzZSBleHRyYXMuQml0bWFwVGV4dCBmcm9tIG5vdyBvbi4nKTtcbiAgICAgICAgICAgIHJldHVybiBleHRyYXMuQml0bWFwVGV4dDtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBAY2xhc3NcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBuYW1lIGJsZW5kTW9kZXNcbiAgICAgKiBAbWVtYmVyb2YgUElYSVxuICAgICAqIEBzZWUgUElYSS5CTEVORF9NT0RFU1xuICAgICAqIEBkZXByZWNhdGVkIHNpbmNlIHZlcnNpb24gMy4wLjBcbiAgICAgKi9cbiAgICBibGVuZE1vZGVzOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24oKVxuICAgICAgICB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ1RoZSBibGVuZE1vZGVzIGhhcyBiZWVuIG1vdmVkIHRvIEJMRU5EX01PREVTLCBwbGVhc2UgdXNlIEJMRU5EX01PREVTIGZyb20gbm93IG9uLicpO1xuICAgICAgICAgICAgcmV0dXJuIGNvcmUuQkxFTkRfTU9ERVM7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQGNsYXNzXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAbmFtZSBzY2FsZU1vZGVzXG4gICAgICogQG1lbWJlcm9mIFBJWElcbiAgICAgKiBAc2VlIFBJWEkuU0NBTEVfTU9ERVNcbiAgICAgKiBAZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDMuMC4wXG4gICAgICovXG4gICAgc2NhbGVNb2Rlczoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uKClcbiAgICAgICAge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKCdUaGUgc2NhbGVNb2RlcyBoYXMgYmVlbiBtb3ZlZCB0byBTQ0FMRV9NT0RFUywgcGxlYXNlIHVzZSBTQ0FMRV9NT0RFUyBmcm9tIG5vdyBvbi4nKTtcbiAgICAgICAgICAgIHJldHVybiBjb3JlLlNDQUxFX01PREVTO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIEBjbGFzc1xuICAgICAqIEBwcml2YXRlXG4gICAgICogQG5hbWUgQmFzZVRleHR1cmVDYWNoZVxuICAgICAqIEBtZW1iZXJvZiBQSVhJXG4gICAgICogQHNlZSBQSVhJLnV0aWxzLkJhc2VUZXh0dXJlQ2FjaGVcbiAgICAgKiBAZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDMuMC4wXG4gICAgICovXG4gICAgQmFzZVRleHR1cmVDYWNoZToge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignVGhlIEJhc2VUZXh0dXJlQ2FjaGUgY2xhc3MgaGFzIGJlZW4gbW92ZWQgdG8gdXRpbHMuQmFzZVRleHR1cmVDYWNoZSwgcGxlYXNlIHVzZSB1dGlscy5CYXNlVGV4dHVyZUNhY2hlIGZyb20gbm93IG9uLicpO1xuICAgICAgICAgICAgcmV0dXJuIGNvcmUudXRpbHMuQmFzZVRleHR1cmVDYWNoZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBAY2xhc3NcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBuYW1lIFRleHR1cmVDYWNoZVxuICAgICAqIEBtZW1iZXJvZiBQSVhJXG4gICAgICogQHNlZSBQSVhJLnV0aWxzLlRleHR1cmVDYWNoZVxuICAgICAqIEBkZXByZWNhdGVkIHNpbmNlIHZlcnNpb24gMy4wLjBcbiAgICAgKi9cbiAgICBUZXh0dXJlQ2FjaGU6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ1RoZSBUZXh0dXJlQ2FjaGUgY2xhc3MgaGFzIGJlZW4gbW92ZWQgdG8gdXRpbHMuVGV4dHVyZUNhY2hlLCBwbGVhc2UgdXNlIHV0aWxzLlRleHR1cmVDYWNoZSBmcm9tIG5vdyBvbi4nKTtcbiAgICAgICAgICAgIHJldHVybiBjb3JlLnV0aWxzLlRleHR1cmVDYWNoZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBAbmFtZXNwYWNlXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAbmFtZSBtYXRoXG4gICAgICogQG1lbWJlcm9mIFBJWElcbiAgICAgKiBAc2VlIFBJWElcbiAgICAgKiBAZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDMuMC42XG4gICAgICovXG4gICAgbWF0aDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignVGhlIG1hdGggbmFtZXNwYWNlIGlzIGRlcHJlY2F0ZWQsIHBsZWFzZSBhY2Nlc3MgbWVtYmVycyBhbHJlYWR5IGFjY2Vzc2libGUgb24gUElYSS4nKTtcbiAgICAgICAgICAgIHJldHVybiBjb3JlO1xuICAgICAgICB9XG4gICAgfVxufSk7XG5cbi8qKlxuICogQG1ldGhvZFxuICogQHByaXZhdGVcbiAqIEBuYW1lIFBJWEkuU3ByaXRlI3NldFRleHR1cmVcbiAqIEBzZWUgUElYSS5TcHJpdGUjdGV4dHVyZVxuICogQGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiAzLjAuMFxuICovXG5jb3JlLlNwcml0ZS5wcm90b3R5cGUuc2V0VGV4dHVyZSA9IGZ1bmN0aW9uKHRleHR1cmUpXG57XG4gICAgdGhpcy50ZXh0dXJlID0gdGV4dHVyZTtcbiAgICBjb25zb2xlLndhcm4oJ3NldFRleHR1cmUgaXMgbm93IGRlcHJlY2F0ZWQsIHBsZWFzZSB1c2UgdGhlIHRleHR1cmUgcHJvcGVydHksIGUuZyA6IHNwcml0ZS50ZXh0dXJlID0gdGV4dHVyZTsnKTtcbn07XG5cbi8qKlxuICogQG1ldGhvZFxuICogQG5hbWUgUElYSS5leHRyYXMuQml0bWFwVGV4dCNzZXRUZXh0XG4gKiBAc2VlIFBJWEkuZXh0cmFzLkJpdG1hcFRleHQjdGV4dFxuICogQGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiAzLjAuMFxuICovXG5leHRyYXMuQml0bWFwVGV4dC5wcm90b3R5cGUuc2V0VGV4dCA9IGZ1bmN0aW9uKHRleHQpXG57XG4gICAgdGhpcy50ZXh0ID0gdGV4dDtcbiAgICBjb25zb2xlLndhcm4oJ3NldFRleHQgaXMgbm93IGRlcHJlY2F0ZWQsIHBsZWFzZSB1c2UgdGhlIHRleHQgcHJvcGVydHksIGUuZyA6IG15Qml0bWFwVGV4dC50ZXh0ID0gXFwnbXkgdGV4dFxcJzsnKTtcbn07XG5cbi8qKlxuICogQG1ldGhvZFxuICogQG5hbWUgUElYSS5UZXh0I3NldFRleHRcbiAqIEBzZWUgUElYSS5UZXh0I3RleHRcbiAqIEBkZXByZWNhdGVkIHNpbmNlIHZlcnNpb24gMy4wLjBcbiAqL1xuY29yZS5UZXh0LnByb3RvdHlwZS5zZXRUZXh0ID0gZnVuY3Rpb24odGV4dClcbntcbiAgICB0aGlzLnRleHQgPSB0ZXh0O1xuICAgIGNvbnNvbGUud2Fybignc2V0VGV4dCBpcyBub3cgZGVwcmVjYXRlZCwgcGxlYXNlIHVzZSB0aGUgdGV4dCBwcm9wZXJ0eSwgZS5nIDogbXlUZXh0LnRleHQgPSBcXCdteSB0ZXh0XFwnOycpO1xufTtcblxuLyoqXG4gKiBAbWV0aG9kXG4gKiBAbmFtZSBQSVhJLlRleHQjc2V0U3R5bGVcbiAqIEBzZWUgUElYSS5UZXh0I3N0eWxlXG4gKiBAZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDMuMC4wXG4gKi9cbmNvcmUuVGV4dC5wcm90b3R5cGUuc2V0U3R5bGUgPSBmdW5jdGlvbihzdHlsZSlcbntcbiAgICB0aGlzLnN0eWxlID0gc3R5bGU7XG4gICAgY29uc29sZS53YXJuKCdzZXRTdHlsZSBpcyBub3cgZGVwcmVjYXRlZCwgcGxlYXNlIHVzZSB0aGUgc3R5bGUgcHJvcGVydHksIGUuZyA6IG15VGV4dC5zdHlsZSA9IHN0eWxlOycpO1xufTtcblxuLyoqXG4gKiBAbWV0aG9kXG4gKiBAbmFtZSBQSVhJLlRleHR1cmUjc2V0RnJhbWVcbiAqIEBzZWUgUElYSS5UZXh0dXJlI3NldEZyYW1lXG4gKiBAZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDMuMC4wXG4gKi9cbmNvcmUuVGV4dHVyZS5wcm90b3R5cGUuc2V0RnJhbWUgPSBmdW5jdGlvbihmcmFtZSlcbntcbiAgICB0aGlzLmZyYW1lID0gZnJhbWU7XG4gICAgY29uc29sZS53YXJuKCdzZXRGcmFtZSBpcyBub3cgZGVwcmVjYXRlZCwgcGxlYXNlIHVzZSB0aGUgZnJhbWUgcHJvcGVydHksIGUuZyA6IG15VGV4dHVyZS5mcmFtZSA9IGZyYW1lOycpO1xufTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoZmlsdGVycywge1xuXG4gICAgLyoqXG4gICAgICogQGNsYXNzXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAbmFtZSBQSVhJLmZpbHRlcnMuQWJzdHJhY3RGaWx0ZXJcbiAgICAgKiBAc2VlIFBJWEkuQWJzdHJhY3RGaWx0ZXJcbiAgICAgKiBAZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDMuMC42XG4gICAgICovXG4gICAgQWJzdHJhY3RGaWx0ZXI6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbigpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignZmlsdGVycy5BYnN0cmFjdEZpbHRlciBpcyBhbiB1bmRvY3VtZW50ZWQgYWxpYXMsIHBsZWFzZSB1c2UgQWJzdHJhY3RGaWx0ZXIgZnJvbSBub3cgb24uJyk7XG4gICAgICAgICAgICByZXR1cm4gY29yZS5BYnN0cmFjdEZpbHRlcjtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBAY2xhc3NcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBuYW1lIFBJWEkuZmlsdGVycy5GWEFBRmlsdGVyXG4gICAgICogQHNlZSBQSVhJLkZYQUFGaWx0ZXJcbiAgICAgKiBAZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDMuMC42XG4gICAgICovXG4gICAgRlhBQUZpbHRlcjoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uKClcbiAgICAgICAge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKCdmaWx0ZXJzLkZYQUFGaWx0ZXIgaXMgYW4gdW5kb2N1bWVudGVkIGFsaWFzLCBwbGVhc2UgdXNlIEZYQUFGaWx0ZXIgZnJvbSBub3cgb24uJyk7XG4gICAgICAgICAgICByZXR1cm4gY29yZS5GWEFBRmlsdGVyO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIEBjbGFzc1xuICAgICAqIEBwcml2YXRlXG4gICAgICogQG5hbWUgUElYSS5maWx0ZXJzLlNwcml0ZU1hc2tGaWx0ZXJcbiAgICAgKiBAc2VlIFBJWEkuU3ByaXRlTWFza0ZpbHRlclxuICAgICAqIEBkZXByZWNhdGVkIHNpbmNlIHZlcnNpb24gMy4wLjZcbiAgICAgKi9cbiAgICBTcHJpdGVNYXNrRmlsdGVyOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24oKVxuICAgICAgICB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ2ZpbHRlcnMuU3ByaXRlTWFza0ZpbHRlciBpcyBhbiB1bmRvY3VtZW50ZWQgYWxpYXMsIHBsZWFzZSB1c2UgU3ByaXRlTWFza0ZpbHRlciBmcm9tIG5vdyBvbi4nKTtcbiAgICAgICAgICAgIHJldHVybiBjb3JlLlNwcml0ZU1hc2tGaWx0ZXI7XG4gICAgICAgIH1cbiAgICB9XG59KTtcblxuLyoqXG4gKiBAbWV0aG9kXG4gKiBAbmFtZSBQSVhJLnV0aWxzLnV1aWRcbiAqIEBzZWUgUElYSS51dGlscy51aWRcbiAqIEBkZXByZWNhdGVkIHNpbmNlIHZlcnNpb24gMy4wLjZcbiAqL1xuY29yZS51dGlscy51dWlkID0gZnVuY3Rpb24gKClcbntcbiAgICBjb25zb2xlLndhcm4oJ3V0aWxzLnV1aWQoKSBpcyBkZXByZWNhdGVkLCBwbGVhc2UgdXNlIHV0aWxzLnVpZCgpIGZyb20gbm93IG9uLicpO1xuICAgIHJldHVybiBjb3JlLnV0aWxzLnVpZCgpO1xufTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vY29yZScpO1xuXG4vKipcbiAqIEEgQml0bWFwVGV4dCBvYmplY3Qgd2lsbCBjcmVhdGUgYSBsaW5lIG9yIG11bHRpcGxlIGxpbmVzIG9mIHRleHQgdXNpbmcgYml0bWFwIGZvbnQuIFRvXG4gKiBzcGxpdCBhIGxpbmUgeW91IGNhbiB1c2UgJ1xcbicsICdcXHInIG9yICdcXHJcXG4nIGluIHlvdXIgc3RyaW5nLiBZb3UgY2FuIGdlbmVyYXRlIHRoZSBmbnQgZmlsZXMgdXNpbmc6XG4gKlxuICogQSBCaXRtYXBUZXh0IGNhbiBvbmx5IGJlIGNyZWF0ZWQgd2hlbiB0aGUgZm9udCBpcyBsb2FkZWRcbiAqXG4gKiBgYGBqc1xuICogLy8gaW4gdGhpcyBjYXNlIHRoZSBmb250IGlzIGluIGEgZmlsZSBjYWxsZWQgJ2Rlc3lyZWwuZm50J1xuICogdmFyIGJpdG1hcFRleHQgPSBuZXcgUElYSS5leHRyYXMuQml0bWFwVGV4dChcInRleHQgdXNpbmcgYSBmYW5jeSBmb250IVwiLCB7Zm9udDogXCIzNXB4IERlc3lyZWxcIiwgYWxpZ246IFwicmlnaHRcIn0pO1xuICogYGBgXG4gKlxuICpcbiAqIGh0dHA6Ly93d3cuYW5nZWxjb2RlLmNvbS9wcm9kdWN0cy9ibWZvbnQvIGZvciB3aW5kb3dzIG9yXG4gKiBodHRwOi8vd3d3LmJtZ2x5cGguY29tLyBmb3IgbWFjLlxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5Db250YWluZXJcbiAqIEBtZW1iZXJvZiBQSVhJLmV4dHJhc1xuICogQHBhcmFtIHRleHQge3N0cmluZ30gVGhlIGNvcHkgdGhhdCB5b3Ugd291bGQgbGlrZSB0aGUgdGV4dCB0byBkaXNwbGF5XG4gKiBAcGFyYW0gc3R5bGUge29iamVjdH0gVGhlIHN0eWxlIHBhcmFtZXRlcnNcbiAqIEBwYXJhbSBzdHlsZS5mb250IHtzdHJpbmd8b2JqZWN0fSBUaGUgZm9udCBkZXNjcmlwdG9yIGZvciB0aGUgb2JqZWN0LCBjYW4gYmUgcGFzc2VkIGFzIGEgc3RyaW5nIG9mIGZvcm1cbiAqICAgICAgXCIyNHB4IEZvbnROYW1lXCIgb3IgXCJGb250TmFtZVwiIG9yIGFzIGFuIG9iamVjdCB3aXRoIGV4cGxpY2l0IG5hbWUvc2l6ZSBwcm9wZXJ0aWVzLlxuICogQHBhcmFtIFtzdHlsZS5mb250Lm5hbWVdIHtzdHJpbmd9IFRoZSBiaXRtYXAgZm9udCBpZFxuICogQHBhcmFtIFtzdHlsZS5mb250LnNpemVdIHtudW1iZXJ9IFRoZSBzaXplIG9mIHRoZSBmb250IGluIHBpeGVscywgZS5nLiAyNFxuICogQHBhcmFtIFtzdHlsZS5hbGlnbj0nbGVmdCddIHtzdHJpbmd9IEFsaWdubWVudCBmb3IgbXVsdGlsaW5lIHRleHQgKCdsZWZ0JywgJ2NlbnRlcicgb3IgJ3JpZ2h0JyksIGRvZXMgbm90IGFmZmVjdFxuICogICAgICBzaW5nbGUgbGluZSB0ZXh0XG4gKiBAcGFyYW0gW3N0eWxlLnRpbnQ9MHhGRkZGRkZdIHtudW1iZXJ9IFRoZSB0aW50IGNvbG9yXG4gKi9cbmZ1bmN0aW9uIEJpdG1hcFRleHQodGV4dCwgc3R5bGUpXG57XG4gICAgY29yZS5Db250YWluZXIuY2FsbCh0aGlzKTtcblxuICAgIHN0eWxlID0gc3R5bGUgfHwge307XG5cbiAgICAvKipcbiAgICAgKiBUaGUgd2lkdGggb2YgdGhlIG92ZXJhbGwgdGV4dCwgZGlmZmVyZW50IGZyb20gZm9udFNpemUsXG4gICAgICogd2hpY2ggaXMgZGVmaW5lZCBpbiB0aGUgc3R5bGUgb2JqZWN0XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQHJlYWRPbmx5XG4gICAgICovXG4gICAgdGhpcy50ZXh0V2lkdGggPSAwO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGhlaWdodCBvZiB0aGUgb3ZlcmFsbCB0ZXh0LCBkaWZmZXJlbnQgZnJvbSBmb250U2l6ZSxcbiAgICAgKiB3aGljaCBpcyBkZWZpbmVkIGluIHRoZSBzdHlsZSBvYmplY3RcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAcmVhZE9ubHlcbiAgICAgKi9cbiAgICB0aGlzLnRleHRIZWlnaHQgPSAwO1xuXG4gICAgLyoqXG4gICAgICogUHJpdmF0ZSB0cmFja2VyIGZvciB0aGUgbGV0dGVyIHNwcml0ZSBwb29sLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5TcHJpdGVbXX1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX2dseXBocyA9IFtdO1xuXG4gICAgLyoqXG4gICAgICogUHJpdmF0ZSB0cmFja2VyIGZvciB0aGUgY3VycmVudCBzdHlsZS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge29iamVjdH1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX2ZvbnQgPSB7XG4gICAgICAgIHRpbnQ6IHN0eWxlLnRpbnQgIT09IHVuZGVmaW5lZCA/IHN0eWxlLnRpbnQgOiAweEZGRkZGRixcbiAgICAgICAgYWxpZ246IHN0eWxlLmFsaWduIHx8ICdsZWZ0JyxcbiAgICAgICAgbmFtZTogbnVsbCxcbiAgICAgICAgc2l6ZTogMFxuICAgIH07XG5cbiAgICAvKipcbiAgICAgKiBQcml2YXRlIHRyYWNrZXIgZm9yIHRoZSBjdXJyZW50IGZvbnQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtvYmplY3R9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLmZvbnQgPSBzdHlsZS5mb250OyAvLyBydW4gZm9udCBzZXR0ZXJcblxuICAgIC8qKlxuICAgICAqIFByaXZhdGUgdHJhY2tlciBmb3IgdGhlIGN1cnJlbnQgdGV4dC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge3N0cmluZ31cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX3RleHQgPSB0ZXh0O1xuXG4gICAgLyoqXG4gICAgICogVGhlIG1heCB3aWR0aCBvZiB0aGlzIGJpdG1hcCB0ZXh0IGluIHBpeGVscy4gSWYgdGhlIHRleHQgcHJvdmlkZWQgaXMgbG9uZ2VyIHRoYW4gdGhlIHZhbHVlIHByb3ZpZGVkLCBsaW5lIGJyZWFrcyB3aWxsIGJlIGF1dG9tYXRpY2FsbHkgaW5zZXJ0ZWQgaW4gdGhlIGxhc3Qgd2hpdGVzcGFjZS5cbiAgICAgKiBEaXNhYmxlIGJ5IHNldHRpbmcgdmFsdWUgdG8gMFxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMubWF4V2lkdGggPSAwO1xuXG4gICAgLyoqXG4gICAgICogVGhlIG1heCBsaW5lIGhlaWdodC4gVGhpcyBpcyB1c2VmdWwgd2hlbiB0cnlpbmcgdG8gdXNlIHRoZSB0b3RhbCBoZWlnaHQgb2YgdGhlIFRleHQsIGllOiB3aGVuIHRyeWluZyB0byB2ZXJ0aWNhbGx5IGFsaWduLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMubWF4TGluZUhlaWdodCA9IDA7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgZGlydHkgc3RhdGUgb2YgdGhpcyBvYmplY3QuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqL1xuICAgIHRoaXMuZGlydHkgPSBmYWxzZTtcblxuICAgIHRoaXMudXBkYXRlVGV4dCgpO1xufVxuXG4vLyBjb25zdHJ1Y3RvclxuQml0bWFwVGV4dC5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuQ29udGFpbmVyLnByb3RvdHlwZSk7XG5CaXRtYXBUZXh0LnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IEJpdG1hcFRleHQ7XG5tb2R1bGUuZXhwb3J0cyA9IEJpdG1hcFRleHQ7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKEJpdG1hcFRleHQucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogVGhlIHRpbnQgb2YgdGhlIEJpdG1hcFRleHQgb2JqZWN0XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZXh0cmFzLkJpdG1hcFRleHQjXG4gICAgICovXG4gICAgdGludDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9mb250LnRpbnQ7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLl9mb250LnRpbnQgPSAodHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJyAmJiB2YWx1ZSA+PSAwKSA/IHZhbHVlIDogMHhGRkZGRkY7XG5cbiAgICAgICAgICAgIHRoaXMuZGlydHkgPSB0cnVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFRoZSBhbGlnbm1lbnQgb2YgdGhlIEJpdG1hcFRleHQgb2JqZWN0XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtzdHJpbmd9XG4gICAgICogQGRlZmF1bHQgJ2xlZnQnXG4gICAgICogQG1lbWJlcm9mIFBJWEkuZXh0cmFzLkJpdG1hcFRleHQjXG4gICAgICovXG4gICAgYWxpZ246IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fZm9udC5hbGlnbjtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuX2ZvbnQuYWxpZ24gPSB2YWx1ZSB8fCAnbGVmdCc7XG5cbiAgICAgICAgICAgIHRoaXMuZGlydHkgPSB0cnVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFRoZSBmb250IGRlc2NyaXB0b3Igb2YgdGhlIEJpdG1hcFRleHQgb2JqZWN0XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtGb250fVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmV4dHJhcy5CaXRtYXBUZXh0I1xuICAgICAqL1xuICAgIGZvbnQ6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fZm9udDtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGlmICghdmFsdWUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICAgICAgdmFsdWUgPSB2YWx1ZS5zcGxpdCgnICcpO1xuXG4gICAgICAgICAgICAgICAgdGhpcy5fZm9udC5uYW1lID0gdmFsdWUubGVuZ3RoID09PSAxID8gdmFsdWVbMF0gOiB2YWx1ZS5zbGljZSgxKS5qb2luKCcgJyk7XG4gICAgICAgICAgICAgICAgdGhpcy5fZm9udC5zaXplID0gdmFsdWUubGVuZ3RoID49IDIgPyBwYXJzZUludCh2YWx1ZVswXSwgMTApIDogQml0bWFwVGV4dC5mb250c1t0aGlzLl9mb250Lm5hbWVdLnNpemU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9mb250Lm5hbWUgPSB2YWx1ZS5uYW1lO1xuICAgICAgICAgICAgICAgIHRoaXMuX2ZvbnQuc2l6ZSA9IHR5cGVvZiB2YWx1ZS5zaXplID09PSAnbnVtYmVyJyA/IHZhbHVlLnNpemUgOiBwYXJzZUludCh2YWx1ZS5zaXplLCAxMCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuZGlydHkgPSB0cnVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFRoZSB0ZXh0IG9mIHRoZSBCaXRtYXBUZXh0IG9iamVjdFxuICAgICAqXG4gICAgICogQG1lbWJlciB7c3RyaW5nfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmV4dHJhcy5CaXRtYXBUZXh0I1xuICAgICAqL1xuICAgIHRleHQ6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fdGV4dDtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHZhbHVlID0gdmFsdWUudG9TdHJpbmcoKSB8fCAnICc7XG4gICAgICAgICAgICBpZiAodGhpcy5fdGV4dCA9PT0gdmFsdWUpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5fdGV4dCA9IHZhbHVlO1xuICAgICAgICAgICAgdGhpcy5kaXJ0eSA9IHRydWU7XG4gICAgICAgIH1cbiAgICB9XG59KTtcblxuLyoqXG4gKiBSZW5kZXJzIHRleHQgYW5kIHVwZGF0ZXMgaXQgd2hlbiBuZWVkZWRcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5CaXRtYXBUZXh0LnByb3RvdHlwZS51cGRhdGVUZXh0ID0gZnVuY3Rpb24gKClcbntcbiAgICB2YXIgZGF0YSA9IEJpdG1hcFRleHQuZm9udHNbdGhpcy5fZm9udC5uYW1lXTtcbiAgICB2YXIgcG9zID0gbmV3IGNvcmUuUG9pbnQoKTtcbiAgICB2YXIgcHJldkNoYXJDb2RlID0gbnVsbDtcbiAgICB2YXIgY2hhcnMgPSBbXTtcbiAgICB2YXIgbGFzdExpbmVXaWR0aCA9IDA7XG4gICAgdmFyIG1heExpbmVXaWR0aCA9IDA7XG4gICAgdmFyIGxpbmVXaWR0aHMgPSBbXTtcbiAgICB2YXIgbGluZSA9IDA7XG4gICAgdmFyIHNjYWxlID0gdGhpcy5fZm9udC5zaXplIC8gZGF0YS5zaXplO1xuICAgIHZhciBsYXN0U3BhY2UgPSAtMTtcbiAgICB2YXIgbWF4TGluZUhlaWdodCA9IDA7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMudGV4dC5sZW5ndGg7IGkrKylcbiAgICB7XG4gICAgICAgIHZhciBjaGFyQ29kZSA9IHRoaXMudGV4dC5jaGFyQ29kZUF0KGkpO1xuICAgICAgICBsYXN0U3BhY2UgPSAvKFxccykvLnRlc3QodGhpcy50ZXh0LmNoYXJBdChpKSkgPyBpIDogbGFzdFNwYWNlO1xuXG4gICAgICAgIGlmICgvKD86XFxyXFxufFxccnxcXG4pLy50ZXN0KHRoaXMudGV4dC5jaGFyQXQoaSkpKVxuICAgICAgICB7XG4gICAgICAgICAgICBsaW5lV2lkdGhzLnB1c2gobGFzdExpbmVXaWR0aCk7XG4gICAgICAgICAgICBtYXhMaW5lV2lkdGggPSBNYXRoLm1heChtYXhMaW5lV2lkdGgsIGxhc3RMaW5lV2lkdGgpO1xuICAgICAgICAgICAgbGluZSsrO1xuXG4gICAgICAgICAgICBwb3MueCA9IDA7XG4gICAgICAgICAgICBwb3MueSArPSBkYXRhLmxpbmVIZWlnaHQ7XG4gICAgICAgICAgICBwcmV2Q2hhckNvZGUgPSBudWxsO1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAobGFzdFNwYWNlICE9PSAtMSAmJiB0aGlzLm1heFdpZHRoID4gMCAmJiBwb3MueCAqIHNjYWxlID4gdGhpcy5tYXhXaWR0aClcbiAgICAgICAge1xuICAgICAgICAgICAgY29yZS51dGlscy5yZW1vdmVJdGVtcyhjaGFycywgbGFzdFNwYWNlLCBpIC0gbGFzdFNwYWNlKTtcbiAgICAgICAgICAgIGkgPSBsYXN0U3BhY2U7XG4gICAgICAgICAgICBsYXN0U3BhY2UgPSAtMTtcblxuICAgICAgICAgICAgbGluZVdpZHRocy5wdXNoKGxhc3RMaW5lV2lkdGgpO1xuICAgICAgICAgICAgbWF4TGluZVdpZHRoID0gTWF0aC5tYXgobWF4TGluZVdpZHRoLCBsYXN0TGluZVdpZHRoKTtcbiAgICAgICAgICAgIGxpbmUrKztcblxuICAgICAgICAgICAgcG9zLnggPSAwO1xuICAgICAgICAgICAgcG9zLnkgKz0gZGF0YS5saW5lSGVpZ2h0O1xuICAgICAgICAgICAgcHJldkNoYXJDb2RlID0gbnVsbDtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGNoYXJEYXRhID0gZGF0YS5jaGFyc1tjaGFyQ29kZV07XG5cbiAgICAgICAgaWYgKCFjaGFyRGF0YSlcbiAgICAgICAge1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAocHJldkNoYXJDb2RlICYmIGNoYXJEYXRhLmtlcm5pbmdbcHJldkNoYXJDb2RlXSlcbiAgICAgICAge1xuICAgICAgICAgICAgcG9zLnggKz0gY2hhckRhdGEua2VybmluZ1twcmV2Q2hhckNvZGVdO1xuICAgICAgICB9XG5cbiAgICAgICAgY2hhcnMucHVzaCh7dGV4dHVyZTpjaGFyRGF0YS50ZXh0dXJlLCBsaW5lOiBsaW5lLCBjaGFyQ29kZTogY2hhckNvZGUsIHBvc2l0aW9uOiBuZXcgY29yZS5Qb2ludChwb3MueCArIGNoYXJEYXRhLnhPZmZzZXQsIHBvcy55ICsgY2hhckRhdGEueU9mZnNldCl9KTtcbiAgICAgICAgbGFzdExpbmVXaWR0aCA9IHBvcy54ICsgKGNoYXJEYXRhLnRleHR1cmUud2lkdGggKyBjaGFyRGF0YS54T2Zmc2V0KTtcbiAgICAgICAgcG9zLnggKz0gY2hhckRhdGEueEFkdmFuY2U7XG4gICAgICAgIG1heExpbmVIZWlnaHQgPSBNYXRoLm1heChtYXhMaW5lSGVpZ2h0LCAoY2hhckRhdGEueU9mZnNldCArIGNoYXJEYXRhLnRleHR1cmUuaGVpZ2h0KSk7XG4gICAgICAgIHByZXZDaGFyQ29kZSA9IGNoYXJDb2RlO1xuICAgIH1cblxuICAgIGxpbmVXaWR0aHMucHVzaChsYXN0TGluZVdpZHRoKTtcbiAgICBtYXhMaW5lV2lkdGggPSBNYXRoLm1heChtYXhMaW5lV2lkdGgsIGxhc3RMaW5lV2lkdGgpO1xuXG4gICAgdmFyIGxpbmVBbGlnbk9mZnNldHMgPSBbXTtcblxuICAgIGZvciAoaSA9IDA7IGkgPD0gbGluZTsgaSsrKVxuICAgIHtcbiAgICAgICAgdmFyIGFsaWduT2Zmc2V0ID0gMDtcblxuICAgICAgICBpZiAodGhpcy5fZm9udC5hbGlnbiA9PT0gJ3JpZ2h0JylcbiAgICAgICAge1xuICAgICAgICAgICAgYWxpZ25PZmZzZXQgPSBtYXhMaW5lV2lkdGggLSBsaW5lV2lkdGhzW2ldO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHRoaXMuX2ZvbnQuYWxpZ24gPT09ICdjZW50ZXInKVxuICAgICAgICB7XG4gICAgICAgICAgICBhbGlnbk9mZnNldCA9IChtYXhMaW5lV2lkdGggLSBsaW5lV2lkdGhzW2ldKSAvIDI7XG4gICAgICAgIH1cblxuICAgICAgICBsaW5lQWxpZ25PZmZzZXRzLnB1c2goYWxpZ25PZmZzZXQpO1xuICAgIH1cblxuICAgIHZhciBsZW5DaGFycyA9IGNoYXJzLmxlbmd0aDtcbiAgICB2YXIgdGludCA9IHRoaXMudGludDtcblxuICAgIGZvciAoaSA9IDA7IGkgPCBsZW5DaGFyczsgaSsrKVxuICAgIHtcbiAgICAgICAgdmFyIGMgPSB0aGlzLl9nbHlwaHNbaV07IC8vIGdldCB0aGUgbmV4dCBnbHlwaCBzcHJpdGVcblxuICAgICAgICBpZiAoYylcbiAgICAgICAge1xuICAgICAgICAgICAgYy50ZXh0dXJlID0gY2hhcnNbaV0udGV4dHVyZTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgIHtcbiAgICAgICAgICAgIGMgPSBuZXcgY29yZS5TcHJpdGUoY2hhcnNbaV0udGV4dHVyZSk7XG4gICAgICAgICAgICB0aGlzLl9nbHlwaHMucHVzaChjKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGMucG9zaXRpb24ueCA9IChjaGFyc1tpXS5wb3NpdGlvbi54ICsgbGluZUFsaWduT2Zmc2V0c1tjaGFyc1tpXS5saW5lXSkgKiBzY2FsZTtcbiAgICAgICAgYy5wb3NpdGlvbi55ID0gY2hhcnNbaV0ucG9zaXRpb24ueSAqIHNjYWxlO1xuICAgICAgICBjLnNjYWxlLnggPSBjLnNjYWxlLnkgPSBzY2FsZTtcbiAgICAgICAgYy50aW50ID0gdGludDtcblxuICAgICAgICBpZiAoIWMucGFyZW50KVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmFkZENoaWxkKGMpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gcmVtb3ZlIHVubmVjZXNzYXJ5IGNoaWxkcmVuLlxuICAgIGZvciAoaSA9IGxlbkNoYXJzOyBpIDwgdGhpcy5fZ2x5cGhzLmxlbmd0aDsgKytpKVxuICAgIHtcbiAgICAgICAgdGhpcy5yZW1vdmVDaGlsZCh0aGlzLl9nbHlwaHNbaV0pO1xuICAgIH1cblxuICAgIHRoaXMudGV4dFdpZHRoID0gbWF4TGluZVdpZHRoICogc2NhbGU7XG4gICAgdGhpcy50ZXh0SGVpZ2h0ID0gKHBvcy55ICsgZGF0YS5saW5lSGVpZ2h0KSAqIHNjYWxlO1xuICAgIHRoaXMubWF4TGluZUhlaWdodCA9IG1heExpbmVIZWlnaHQgKiBzY2FsZTtcbn07XG5cbi8qKlxuICogVXBkYXRlcyB0aGUgdHJhbnNmb3JtIG9mIHRoaXMgb2JqZWN0XG4gKlxuICogQHByaXZhdGVcbiAqL1xuQml0bWFwVGV4dC5wcm90b3R5cGUudXBkYXRlVHJhbnNmb3JtID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLnZhbGlkYXRlKCk7XG4gICAgdGhpcy5jb250YWluZXJVcGRhdGVUcmFuc2Zvcm0oKTtcbn07XG5cbi8qKlxuICogVmFsaWRhdGVzIHRleHQgYmVmb3JlIGNhbGxpbmcgcGFyZW50J3MgZ2V0TG9jYWxCb3VuZHNcbiAqXG4gKiBAcmV0dXJuIHtQSVhJLlJlY3RhbmdsZX0gVGhlIHJlY3Rhbmd1bGFyIGJvdW5kaW5nIGFyZWFcbiAqL1xuXG5CaXRtYXBUZXh0LnByb3RvdHlwZS5nZXRMb2NhbEJvdW5kcyA9IGZ1bmN0aW9uKClcbntcbiAgICB0aGlzLnZhbGlkYXRlKCk7XG4gICAgcmV0dXJuIGNvcmUuQ29udGFpbmVyLnByb3RvdHlwZS5nZXRMb2NhbEJvdW5kcy5jYWxsKHRoaXMpO1xufTtcblxuLyoqXG4gKiBVcGRhdGVzIHRleHQgd2hlbiBuZWVkZWRcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5CaXRtYXBUZXh0LnByb3RvdHlwZS52YWxpZGF0ZSA9IGZ1bmN0aW9uKClcbntcbiAgICBpZiAodGhpcy5kaXJ0eSlcbiAgICB7XG4gICAgICAgIHRoaXMudXBkYXRlVGV4dCgpO1xuICAgICAgICB0aGlzLmRpcnR5ID0gZmFsc2U7XG4gICAgfVxufTtcblxuQml0bWFwVGV4dC5mb250cyA9IHt9O1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi9jb3JlJyk7XG5cbi8qKlxuICogQSBNb3ZpZUNsaXAgaXMgYSBzaW1wbGUgd2F5IHRvIGRpc3BsYXkgYW4gYW5pbWF0aW9uIGRlcGljdGVkIGJ5IGEgbGlzdCBvZiB0ZXh0dXJlcy5cbiAqXG4gKiBgYGBqc1xuICogdmFyIGFsaWVuSW1hZ2VzID0gW1wiaW1hZ2Vfc2VxdWVuY2VfMDEucG5nXCIsXCJpbWFnZV9zZXF1ZW5jZV8wMi5wbmdcIixcImltYWdlX3NlcXVlbmNlXzAzLnBuZ1wiLFwiaW1hZ2Vfc2VxdWVuY2VfMDQucG5nXCJdO1xuICogdmFyIHRleHR1cmVBcnJheSA9IFtdO1xuICpcbiAqIGZvciAodmFyIGk9MDsgaSA8IDQ7IGkrKylcbiAqIHtcbiAqICAgICAgdmFyIHRleHR1cmUgPSBQSVhJLlRleHR1cmUuZnJvbUltYWdlKGFsaWVuSW1hZ2VzW2ldKTtcbiAqICAgICAgdGV4dHVyZUFycmF5LnB1c2godGV4dHVyZSk7XG4gKiB9O1xuICpcbiAqIHZhciBtYyA9IG5ldyBQSVhJLk1vdmllQ2xpcCh0ZXh0dXJlQXJyYXkpO1xuICogYGBgXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLlNwcml0ZVxuICogQG1lbWJlcm9mIFBJWEkuZXh0cmFzXG4gKiBAcGFyYW0gdGV4dHVyZXMge1BJWEkuVGV4dHVyZVtdfE9iamVjdFtdfSBhbiBhcnJheSBvZiB7QGxpbmsgUElYSS5UZXh0dXJlfSBvciBmcmFtZSBvYmplY3RzIHRoYXQgbWFrZSB1cCB0aGUgYW5pbWF0aW9uXG4gKiBAcGFyYW0gdGV4dHVyZXNbXS50ZXh0dXJlIHtQSVhJLlRleHR1cmV9IHRoZSB7QGxpbmsgUElYSS5UZXh0dXJlfSBvZiB0aGUgZnJhbWVcbiAqIEBwYXJhbSB0ZXh0dXJlc1tdLnRpbWUge251bWJlcn0gdGhlIGR1cmF0aW9uIG9mIHRoZSBmcmFtZSBpbiBtc1xuICovXG5mdW5jdGlvbiBNb3ZpZUNsaXAodGV4dHVyZXMpXG57XG4gICAgY29yZS5TcHJpdGUuY2FsbCh0aGlzLCB0ZXh0dXJlc1swXSBpbnN0YW5jZW9mIGNvcmUuVGV4dHVyZSA/IHRleHR1cmVzWzBdIDogdGV4dHVyZXNbMF0udGV4dHVyZSk7XG5cbiAgICAvKipcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX3RleHR1cmVzID0gbnVsbDtcblxuICAgIC8qKlxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fZHVyYXRpb25zID0gbnVsbDtcblxuICAgIHRoaXMudGV4dHVyZXMgPSB0ZXh0dXJlcztcblxuICAgIC8qKlxuICAgICAqIFRoZSBzcGVlZCB0aGF0IHRoZSBNb3ZpZUNsaXAgd2lsbCBwbGF5IGF0LiBIaWdoZXIgaXMgZmFzdGVyLCBsb3dlciBpcyBzbG93ZXJcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAxXG4gICAgICovXG4gICAgdGhpcy5hbmltYXRpb25TcGVlZCA9IDE7XG5cbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIG9yIG5vdCB0aGUgbW92aWUgY2xpcCByZXBlYXRzIGFmdGVyIHBsYXlpbmcuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqIEBkZWZhdWx0IHRydWVcbiAgICAgKi9cbiAgICB0aGlzLmxvb3AgPSB0cnVlO1xuXG4gICAgLyoqXG4gICAgICogRnVuY3Rpb24gdG8gY2FsbCB3aGVuIGEgTW92aWVDbGlwIGZpbmlzaGVzIHBsYXlpbmdcbiAgICAgKlxuICAgICAqIEBtZXRob2RcbiAgICAgKiBAbWVtYmVyb2YgUElYSS5leHRyYXMuTW92aWVDbGlwI1xuICAgICAqL1xuICAgIHRoaXMub25Db21wbGV0ZSA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBFbGFwc2VkIHRpbWUgc2luY2UgYW5pbWF0aW9uIGhhcyBiZWVuIHN0YXJ0ZWQsIHVzZWQgaW50ZXJuYWxseSB0byBkaXNwbGF5IGN1cnJlbnQgdGV4dHVyZVxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fY3VycmVudFRpbWUgPSAwO1xuXG4gICAgLyoqXG4gICAgICogSW5kaWNhdGVzIGlmIHRoZSBNb3ZpZUNsaXAgaXMgY3VycmVudGx5IHBsYXlpbmdcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICogQHJlYWRvbmx5XG4gICAgICovXG4gICAgdGhpcy5wbGF5aW5nID0gZmFsc2U7XG59XG5cbi8vIGNvbnN0cnVjdG9yXG5Nb3ZpZUNsaXAucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShjb3JlLlNwcml0ZS5wcm90b3R5cGUpO1xuTW92aWVDbGlwLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IE1vdmllQ2xpcDtcbm1vZHVsZS5leHBvcnRzID0gTW92aWVDbGlwO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhNb3ZpZUNsaXAucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogdG90YWxGcmFtZXMgaXMgdGhlIHRvdGFsIG51bWJlciBvZiBmcmFtZXMgaW4gdGhlIE1vdmllQ2xpcC4gVGhpcyBpcyB0aGUgc2FtZSBhcyBudW1iZXIgb2YgdGV4dHVyZXNcbiAgICAgKiBhc3NpZ25lZCB0byB0aGUgTW92aWVDbGlwLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmV4dHJhcy5Nb3ZpZUNsaXAjXG4gICAgICogQGRlZmF1bHQgMFxuICAgICAqIEByZWFkb25seVxuICAgICAqL1xuICAgIHRvdGFsRnJhbWVzOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24oKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fdGV4dHVyZXMubGVuZ3RoO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFRoZSBhcnJheSBvZiB0ZXh0dXJlcyB1c2VkIGZvciB0aGlzIE1vdmllQ2xpcFxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5UZXh0dXJlW119XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZXh0cmFzLk1vdmllQ2xpcCNcbiAgICAgKlxuICAgICAqL1xuICAgIHRleHR1cmVzOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3RleHR1cmVzO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgaWYodmFsdWVbMF0gaW5zdGFuY2VvZiBjb3JlLlRleHR1cmUpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdGhpcy5fdGV4dHVyZXMgPSB2YWx1ZTtcbiAgICAgICAgICAgICAgICB0aGlzLl9kdXJhdGlvbnMgPSBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHRoaXMuX3RleHR1cmVzID0gW107XG4gICAgICAgICAgICAgICAgdGhpcy5fZHVyYXRpb25zID0gW107XG4gICAgICAgICAgICAgICAgZm9yKHZhciBpID0gMDsgaSA8IHZhbHVlLmxlbmd0aDsgaSsrKVxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fdGV4dHVyZXMucHVzaCh2YWx1ZVtpXS50ZXh0dXJlKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fZHVyYXRpb25zLnB1c2godmFsdWVbaV0udGltZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICogVGhlIE1vdmllQ2xpcHMgY3VycmVudCBmcmFtZSBpbmRleFxuICAgICpcbiAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAqIEBtZW1iZXJvZiBQSVhJLmV4dHJhcy5Nb3ZpZUNsaXAjXG4gICAgKiBAcmVhZG9ubHlcbiAgICAqL1xuICAgIGN1cnJlbnRGcmFtZToge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHZhciBjdXJyZW50RnJhbWUgPSBNYXRoLmZsb29yKHRoaXMuX2N1cnJlbnRUaW1lKSAlIHRoaXMuX3RleHR1cmVzLmxlbmd0aDtcbiAgICAgICAgICAgIGlmIChjdXJyZW50RnJhbWUgPCAwKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGN1cnJlbnRGcmFtZSArPSB0aGlzLl90ZXh0dXJlcy5sZW5ndGg7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gY3VycmVudEZyYW1lO1xuICAgICAgICB9XG4gICAgfVxuXG59KTtcblxuLyoqXG4gKiBTdG9wcyB0aGUgTW92aWVDbGlwXG4gKlxuICovXG5Nb3ZpZUNsaXAucHJvdG90eXBlLnN0b3AgPSBmdW5jdGlvbiAoKVxue1xuICAgIGlmKCF0aGlzLnBsYXlpbmcpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5wbGF5aW5nID0gZmFsc2U7XG4gICAgY29yZS50aWNrZXIuc2hhcmVkLnJlbW92ZSh0aGlzLnVwZGF0ZSwgdGhpcyk7XG59O1xuXG4vKipcbiAqIFBsYXlzIHRoZSBNb3ZpZUNsaXBcbiAqXG4gKi9cbk1vdmllQ2xpcC5wcm90b3R5cGUucGxheSA9IGZ1bmN0aW9uICgpXG57XG4gICAgaWYodGhpcy5wbGF5aW5nKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMucGxheWluZyA9IHRydWU7XG4gICAgY29yZS50aWNrZXIuc2hhcmVkLmFkZCh0aGlzLnVwZGF0ZSwgdGhpcyk7XG59O1xuXG4vKipcbiAqIFN0b3BzIHRoZSBNb3ZpZUNsaXAgYW5kIGdvZXMgdG8gYSBzcGVjaWZpYyBmcmFtZVxuICpcbiAqIEBwYXJhbSBmcmFtZU51bWJlciB7bnVtYmVyfSBmcmFtZSBpbmRleCB0byBzdG9wIGF0XG4gKi9cbk1vdmllQ2xpcC5wcm90b3R5cGUuZ290b0FuZFN0b3AgPSBmdW5jdGlvbiAoZnJhbWVOdW1iZXIpXG57XG4gICAgdGhpcy5zdG9wKCk7XG5cbiAgICB0aGlzLl9jdXJyZW50VGltZSA9IGZyYW1lTnVtYmVyO1xuXG4gICAgdGhpcy5fdGV4dHVyZSA9IHRoaXMuX3RleHR1cmVzW3RoaXMuY3VycmVudEZyYW1lXTtcbn07XG5cbi8qKlxuICogR29lcyB0byBhIHNwZWNpZmljIGZyYW1lIGFuZCBiZWdpbnMgcGxheWluZyB0aGUgTW92aWVDbGlwXG4gKlxuICogQHBhcmFtIGZyYW1lTnVtYmVyIHtudW1iZXJ9IGZyYW1lIGluZGV4IHRvIHN0YXJ0IGF0XG4gKi9cbk1vdmllQ2xpcC5wcm90b3R5cGUuZ290b0FuZFBsYXkgPSBmdW5jdGlvbiAoZnJhbWVOdW1iZXIpXG57XG4gICAgdGhpcy5fY3VycmVudFRpbWUgPSBmcmFtZU51bWJlcjtcblxuICAgIHRoaXMucGxheSgpO1xufTtcblxuLypcbiAqIFVwZGF0ZXMgdGhlIG9iamVjdCB0cmFuc2Zvcm0gZm9yIHJlbmRlcmluZ1xuICogQHByaXZhdGVcbiAqL1xuTW92aWVDbGlwLnByb3RvdHlwZS51cGRhdGUgPSBmdW5jdGlvbiAoZGVsdGFUaW1lKVxue1xuICAgIHZhciBlbGFwc2VkID0gdGhpcy5hbmltYXRpb25TcGVlZCAqIGRlbHRhVGltZTtcblxuICAgIGlmICh0aGlzLl9kdXJhdGlvbnMgIT09IG51bGwpXG4gICAge1xuICAgICAgICB2YXIgbGFnID0gdGhpcy5fY3VycmVudFRpbWUgJSAxICogdGhpcy5fZHVyYXRpb25zW3RoaXMuY3VycmVudEZyYW1lXTtcblxuICAgICAgICBsYWcgKz0gZWxhcHNlZCAvIDYwICogMTAwMDtcblxuICAgICAgICB3aGlsZSAobGFnIDwgMClcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5fY3VycmVudFRpbWUtLTtcbiAgICAgICAgICAgIGxhZyArPSB0aGlzLl9kdXJhdGlvbnNbdGhpcy5jdXJyZW50RnJhbWVdO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIHNpZ24gPSBNYXRoLnNpZ24odGhpcy5hbmltYXRpb25TcGVlZCAqIGRlbHRhVGltZSk7XG4gICAgICAgIHRoaXMuX2N1cnJlbnRUaW1lID0gTWF0aC5mbG9vcih0aGlzLl9jdXJyZW50VGltZSk7XG5cbiAgICAgICAgd2hpbGUgKGxhZyA+PSB0aGlzLl9kdXJhdGlvbnNbdGhpcy5jdXJyZW50RnJhbWVdKVxuICAgICAgICB7XG4gICAgICAgICAgICBsYWcgLT0gdGhpcy5fZHVyYXRpb25zW3RoaXMuY3VycmVudEZyYW1lXSAqIHNpZ247XG4gICAgICAgICAgICB0aGlzLl9jdXJyZW50VGltZSArPSBzaWduO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fY3VycmVudFRpbWUgKz0gbGFnIC8gdGhpcy5fZHVyYXRpb25zW3RoaXMuY3VycmVudEZyYW1lXTtcbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgdGhpcy5fY3VycmVudFRpbWUgKz0gZWxhcHNlZDtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5fY3VycmVudFRpbWUgPCAwICYmICF0aGlzLmxvb3ApXG4gICAge1xuICAgICAgICB0aGlzLmdvdG9BbmRTdG9wKDApO1xuXG4gICAgICAgIGlmICh0aGlzLm9uQ29tcGxldGUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMub25Db21wbGV0ZSgpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGVsc2UgaWYgKHRoaXMuX2N1cnJlbnRUaW1lID49IHRoaXMuX3RleHR1cmVzLmxlbmd0aCAmJiAhdGhpcy5sb29wKVxuICAgIHtcbiAgICAgICAgdGhpcy5nb3RvQW5kU3RvcCh0aGlzLl90ZXh0dXJlcy5sZW5ndGggLSAxKTtcblxuICAgICAgICBpZiAodGhpcy5vbkNvbXBsZXRlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLm9uQ29tcGxldGUoKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICB0aGlzLl90ZXh0dXJlID0gdGhpcy5fdGV4dHVyZXNbdGhpcy5jdXJyZW50RnJhbWVdO1xuICAgIH1cblxufTtcblxuLypcbiAqIFN0b3BzIHRoZSBNb3ZpZUNsaXAgYW5kIGRlc3Ryb3lzIGl0XG4gKlxuICovXG5Nb3ZpZUNsaXAucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoIClcbntcbiAgICB0aGlzLnN0b3AoKTtcbiAgICBjb3JlLlNwcml0ZS5wcm90b3R5cGUuZGVzdHJveS5jYWxsKHRoaXMpO1xufTtcblxuLyoqXG4gKiBBIHNob3J0IGhhbmQgd2F5IG9mIGNyZWF0aW5nIGEgbW92aWVjbGlwIGZyb20gYW4gYXJyYXkgb2YgZnJhbWUgaWRzXG4gKlxuICogQHN0YXRpY1xuICogQHBhcmFtIGZyYW1lcyB7c3RyaW5nW119IHRoZSBhcnJheSBvZiBmcmFtZXMgaWRzIHRoZSBtb3ZpZWNsaXAgd2lsbCB1c2UgYXMgaXRzIHRleHR1cmUgZnJhbWVzXG4gKi9cbk1vdmllQ2xpcC5mcm9tRnJhbWVzID0gZnVuY3Rpb24gKGZyYW1lcylcbntcbiAgICB2YXIgdGV4dHVyZXMgPSBbXTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZnJhbWVzLmxlbmd0aDsgKytpKVxuICAgIHtcbiAgICAgICAgdGV4dHVyZXMucHVzaChuZXcgY29yZS5UZXh0dXJlLmZyb21GcmFtZShmcmFtZXNbaV0pKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IE1vdmllQ2xpcCh0ZXh0dXJlcyk7XG59O1xuXG4vKipcbiAqIEEgc2hvcnQgaGFuZCB3YXkgb2YgY3JlYXRpbmcgYSBtb3ZpZWNsaXAgZnJvbSBhbiBhcnJheSBvZiBpbWFnZSBpZHNcbiAqXG4gKiBAc3RhdGljXG4gKiBAcGFyYW0gaW1hZ2VzIHtzdHJpbmdbXX0gdGhlIGFycmF5IG9mIGltYWdlIHVybHMgdGhlIG1vdmllY2xpcCB3aWxsIHVzZSBhcyBpdHMgdGV4dHVyZSBmcmFtZXNcbiAqL1xuTW92aWVDbGlwLmZyb21JbWFnZXMgPSBmdW5jdGlvbiAoaW1hZ2VzKVxue1xuICAgIHZhciB0ZXh0dXJlcyA9IFtdO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBpbWFnZXMubGVuZ3RoOyArK2kpXG4gICAge1xuICAgICAgICB0ZXh0dXJlcy5wdXNoKG5ldyBjb3JlLlRleHR1cmUuZnJvbUltYWdlKGltYWdlc1tpXSkpO1xuICAgIH1cblxuICAgIHJldHVybiBuZXcgTW92aWVDbGlwKHRleHR1cmVzKTtcbn07IiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi9jb3JlJyksXG4gICAgLy8gYSBzcHJpdGUgdXNlIGRmb3IgcmVuZGVyaW5nIHRleHR1cmVzLi5cbiAgICB0ZW1wUG9pbnQgPSBuZXcgY29yZS5Qb2ludCgpLFxuICAgIENhbnZhc1RpbnRlciA9IHJlcXVpcmUoJy4uL2NvcmUvcmVuZGVyZXJzL2NhbnZhcy91dGlscy9DYW52YXNUaW50ZXInKTtcblxuLyoqXG4gKiBBIHRpbGluZyBzcHJpdGUgaXMgYSBmYXN0IHdheSBvZiByZW5kZXJpbmcgYSB0aWxpbmcgaW1hZ2VcbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuU3ByaXRlXG4gKiBAbWVtYmVyb2YgUElYSS5leHRyYXNcbiAqIEBwYXJhbSB0ZXh0dXJlIHtUZXh0dXJlfSB0aGUgdGV4dHVyZSBvZiB0aGUgdGlsaW5nIHNwcml0ZVxuICogQHBhcmFtIHdpZHRoIHtudW1iZXJ9ICB0aGUgd2lkdGggb2YgdGhlIHRpbGluZyBzcHJpdGVcbiAqIEBwYXJhbSBoZWlnaHQge251bWJlcn0gdGhlIGhlaWdodCBvZiB0aGUgdGlsaW5nIHNwcml0ZVxuICovXG5mdW5jdGlvbiBUaWxpbmdTcHJpdGUodGV4dHVyZSwgd2lkdGgsIGhlaWdodClcbntcbiAgICBjb3JlLlNwcml0ZS5jYWxsKHRoaXMsIHRleHR1cmUpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHNjYWxpbmcgb2YgdGhlIGltYWdlIHRoYXQgaXMgYmVpbmcgdGlsZWRcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuUG9pbnR9XG4gICAgICovXG4gICAgdGhpcy50aWxlU2NhbGUgPSBuZXcgY29yZS5Qb2ludCgxLDEpO1xuXG5cbiAgICAvKipcbiAgICAgKiBUaGUgb2Zmc2V0IHBvc2l0aW9uIG9mIHRoZSBpbWFnZSB0aGF0IGlzIGJlaW5nIHRpbGVkXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlBvaW50fVxuICAgICAqL1xuICAgIHRoaXMudGlsZVBvc2l0aW9uID0gbmV3IGNvcmUuUG9pbnQoMCwwKTtcblxuICAgIC8vLy8vIHByaXZhdGVcblxuICAgIC8qKlxuICAgICAqIFRoZSB3aXRoIG9mIHRoZSB0aWxpbmcgc3ByaXRlXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl93aWR0aCA9IHdpZHRoIHx8IDEwMDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBoZWlnaHQgb2YgdGhlIHRpbGluZyBzcHJpdGVcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX2hlaWdodCA9IGhlaWdodCB8fCAxMDA7XG5cbiAgICAvKipcbiAgICAgKiBBbiBpbnRlcm5hbCBXZWJHTCBVViBjYWNoZS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuVGV4dHVyZVV2c31cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX3V2cyA9IG5ldyBjb3JlLlRleHR1cmVVdnMoKTtcblxuICAgIHRoaXMuX2NhbnZhc1BhdHRlcm4gPSBudWxsO1xuXG4gICAgLy9UT0RPIG1vdmUuLlxuICAgIHRoaXMuc2hhZGVyID0gbmV3IGNvcmUuQWJzdHJhY3RGaWx0ZXIoXG5cbiAgICAgIFtcbiAgICAgICAgJ3ByZWNpc2lvbiBsb3dwIGZsb2F0OycsXG4gICAgICAgICdhdHRyaWJ1dGUgdmVjMiBhVmVydGV4UG9zaXRpb247JyxcbiAgICAgICAgJ2F0dHJpYnV0ZSB2ZWMyIGFUZXh0dXJlQ29vcmQ7JyxcbiAgICAgICAgJ2F0dHJpYnV0ZSB2ZWM0IGFDb2xvcjsnLFxuXG4gICAgICAgICd1bmlmb3JtIG1hdDMgcHJvamVjdGlvbk1hdHJpeDsnLFxuXG4gICAgICAgICd1bmlmb3JtIHZlYzQgdUZyYW1lOycsXG4gICAgICAgICd1bmlmb3JtIHZlYzQgdVRyYW5zZm9ybTsnLFxuXG4gICAgICAgICd2YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDsnLFxuICAgICAgICAndmFyeWluZyB2ZWM0IHZDb2xvcjsnLFxuXG4gICAgICAgICd2b2lkIG1haW4odm9pZCl7JyxcbiAgICAgICAgJyAgIGdsX1Bvc2l0aW9uID0gdmVjNCgocHJvamVjdGlvbk1hdHJpeCAqIHZlYzMoYVZlcnRleFBvc2l0aW9uLCAxLjApKS54eSwgMC4wLCAxLjApOycsXG5cbiAgICAgICAgJyAgIHZlYzIgY29vcmQgPSBhVGV4dHVyZUNvb3JkOycsXG4gICAgICAgICcgICBjb29yZCAtPSB1VHJhbnNmb3JtLnh5OycsXG4gICAgICAgICcgICBjb29yZCAvPSB1VHJhbnNmb3JtLnp3OycsXG4gICAgICAgICcgICB2VGV4dHVyZUNvb3JkID0gY29vcmQ7JyxcblxuICAgICAgICAnICAgdkNvbG9yID0gdmVjNChhQ29sb3IucmdiICogYUNvbG9yLmEsIGFDb2xvci5hKTsnLFxuICAgICAgICAnfSdcbiAgICAgIF0uam9pbignXFxuJyksXG4gICAgICBbXG4gICAgICAgICdwcmVjaXNpb24gbG93cCBmbG9hdDsnLFxuXG4gICAgICAgICd2YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDsnLFxuICAgICAgICAndmFyeWluZyB2ZWM0IHZDb2xvcjsnLFxuXG4gICAgICAgICd1bmlmb3JtIHNhbXBsZXIyRCB1U2FtcGxlcjsnLFxuICAgICAgICAndW5pZm9ybSB2ZWM0IHVGcmFtZTsnLFxuICAgICAgICAndW5pZm9ybSB2ZWMyIHVQaXhlbFNpemU7JyxcblxuICAgICAgICAndm9pZCBtYWluKHZvaWQpeycsXG5cbiAgICAgICAgJyAgIHZlYzIgY29vcmQgPSBtb2QodlRleHR1cmVDb29yZCwgdUZyYW1lLnp3KTsnLFxuICAgICAgICAnICAgY29vcmQgPSBjbGFtcChjb29yZCwgdVBpeGVsU2l6ZSwgdUZyYW1lLnp3IC0gdVBpeGVsU2l6ZSk7JyxcbiAgICAgICAgJyAgIGNvb3JkICs9IHVGcmFtZS54eTsnLFxuXG4gICAgICAgICcgICBnbF9GcmFnQ29sb3IgPSAgdGV4dHVyZTJEKHVTYW1wbGVyLCBjb29yZCkgKiB2Q29sb3IgOycsXG4gICAgICAgICd9J1xuICAgICAgXS5qb2luKCdcXG4nKSxcblxuICAgICAgICAgICAgLy8gc2V0IHRoZSB1bmlmb3Jtc1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHVGcmFtZTogeyB0eXBlOiAnNGZ2JywgdmFsdWU6IFswLDAsMSwxXSB9LFxuICAgICAgICAgICAgICAgIHVUcmFuc2Zvcm06IHsgdHlwZTogJzRmdicsIHZhbHVlOiBbMCwwLDEsMV0gfSxcbiAgICAgICAgICAgICAgICB1UGl4ZWxTaXplIDogeyB0eXBlIDogJzJmdicsIHZhbHVlOiBbMSwgMV19XG4gICAgICAgICAgICB9XG4gICAgICApO1xufVxuXG5UaWxpbmdTcHJpdGUucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShjb3JlLlNwcml0ZS5wcm90b3R5cGUpO1xuVGlsaW5nU3ByaXRlLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFRpbGluZ1Nwcml0ZTtcbm1vZHVsZS5leHBvcnRzID0gVGlsaW5nU3ByaXRlO1xuXG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKFRpbGluZ1Nwcml0ZS5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBUaGUgd2lkdGggb2YgdGhlIHNwcml0ZSwgc2V0dGluZyB0aGlzIHdpbGwgYWN0dWFsbHkgbW9kaWZ5IHRoZSBzY2FsZSB0byBhY2hpZXZlIHRoZSB2YWx1ZSBzZXRcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5leHRyYXMuVGlsaW5nU3ByaXRlI1xuICAgICAqL1xuICAgIHdpZHRoOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3dpZHRoO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5fd2lkdGggPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBUaGUgaGVpZ2h0IG9mIHRoZSBUaWxpbmdTcHJpdGUsIHNldHRpbmcgdGhpcyB3aWxsIGFjdHVhbGx5IG1vZGlmeSB0aGUgc2NhbGUgdG8gYWNoaWV2ZSB0aGUgdmFsdWUgc2V0XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZXh0cmFzLlRpbGluZ1Nwcml0ZSNcbiAgICAgKi9cbiAgICBoZWlnaHQ6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5faGVpZ2h0O1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5faGVpZ2h0ID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG59KTtcblxuVGlsaW5nU3ByaXRlLnByb3RvdHlwZS5fb25UZXh0dXJlVXBkYXRlID0gZnVuY3Rpb24gKClcbntcbiAgICByZXR1cm47XG59O1xuXG5cbi8qKlxuICogUmVuZGVycyB0aGUgb2JqZWN0IHVzaW5nIHRoZSBXZWJHTCByZW5kZXJlclxuICpcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5XZWJHTFJlbmRlcmVyfVxuICogQHByaXZhdGVcbiAqL1xuVGlsaW5nU3ByaXRlLnByb3RvdHlwZS5fcmVuZGVyV2ViR0wgPSBmdW5jdGlvbiAocmVuZGVyZXIpXG57XG4gICAgLy8gdHdlYWsgb3VyIHRleHR1cmUgdGVtcG9yYXJpbHkuLlxuICAgIHZhciB0ZXh0dXJlID0gdGhpcy5fdGV4dHVyZTtcblxuICAgIGlmKCF0ZXh0dXJlIHx8ICF0ZXh0dXJlLl91dnMpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFyIHRlbXBVdnMgPSB0ZXh0dXJlLl91dnMsXG4gICAgICAgIHRlbXBXaWR0aCA9IHRleHR1cmUuX2ZyYW1lLndpZHRoLFxuICAgICAgICB0ZW1wSGVpZ2h0ID0gdGV4dHVyZS5fZnJhbWUuaGVpZ2h0LFxuICAgICAgICB0dyA9IHRleHR1cmUuYmFzZVRleHR1cmUud2lkdGgsXG4gICAgICAgIHRoID0gdGV4dHVyZS5iYXNlVGV4dHVyZS5oZWlnaHQ7XG5cbiAgICB0ZXh0dXJlLl91dnMgPSB0aGlzLl91dnM7XG4gICAgdGV4dHVyZS5fZnJhbWUud2lkdGggPSB0aGlzLndpZHRoO1xuICAgIHRleHR1cmUuX2ZyYW1lLmhlaWdodCA9IHRoaXMuaGVpZ2h0O1xuXG4gICAgdGhpcy5zaGFkZXIudW5pZm9ybXMudVBpeGVsU2l6ZS52YWx1ZVswXSA9IDEuMC90dztcbiAgICB0aGlzLnNoYWRlci51bmlmb3Jtcy51UGl4ZWxTaXplLnZhbHVlWzFdID0gMS4wL3RoO1xuXG4gICAgdGhpcy5zaGFkZXIudW5pZm9ybXMudUZyYW1lLnZhbHVlWzBdID0gdGVtcFV2cy54MDtcbiAgICB0aGlzLnNoYWRlci51bmlmb3Jtcy51RnJhbWUudmFsdWVbMV0gPSB0ZW1wVXZzLnkwO1xuICAgIHRoaXMuc2hhZGVyLnVuaWZvcm1zLnVGcmFtZS52YWx1ZVsyXSA9IHRlbXBVdnMueDEgLSB0ZW1wVXZzLngwO1xuICAgIHRoaXMuc2hhZGVyLnVuaWZvcm1zLnVGcmFtZS52YWx1ZVszXSA9IHRlbXBVdnMueTIgLSB0ZW1wVXZzLnkwO1xuXG4gICAgdGhpcy5zaGFkZXIudW5pZm9ybXMudVRyYW5zZm9ybS52YWx1ZVswXSA9ICh0aGlzLnRpbGVQb3NpdGlvbi54ICUgKHRlbXBXaWR0aCAqIHRoaXMudGlsZVNjYWxlLngpKSAvIHRoaXMuX3dpZHRoO1xuICAgIHRoaXMuc2hhZGVyLnVuaWZvcm1zLnVUcmFuc2Zvcm0udmFsdWVbMV0gPSAodGhpcy50aWxlUG9zaXRpb24ueSAlICh0ZW1wSGVpZ2h0ICogdGhpcy50aWxlU2NhbGUueSkpIC8gdGhpcy5faGVpZ2h0O1xuICAgIHRoaXMuc2hhZGVyLnVuaWZvcm1zLnVUcmFuc2Zvcm0udmFsdWVbMl0gPSAoIHR3IC8gdGhpcy5fd2lkdGggKSAqIHRoaXMudGlsZVNjYWxlLng7XG4gICAgdGhpcy5zaGFkZXIudW5pZm9ybXMudVRyYW5zZm9ybS52YWx1ZVszXSA9ICggdGggLyB0aGlzLl9oZWlnaHQgKSAqIHRoaXMudGlsZVNjYWxlLnk7XG5cbiAgICByZW5kZXJlci5zZXRPYmplY3RSZW5kZXJlcihyZW5kZXJlci5wbHVnaW5zLnNwcml0ZSk7XG4gICAgcmVuZGVyZXIucGx1Z2lucy5zcHJpdGUucmVuZGVyKHRoaXMpO1xuXG4gICAgdGV4dHVyZS5fdXZzID0gdGVtcFV2cztcbiAgICB0ZXh0dXJlLl9mcmFtZS53aWR0aCA9IHRlbXBXaWR0aDtcbiAgICB0ZXh0dXJlLl9mcmFtZS5oZWlnaHQgPSB0ZW1wSGVpZ2h0O1xufTtcblxuLyoqXG4gKiBSZW5kZXJzIHRoZSBvYmplY3QgdXNpbmcgdGhlIENhbnZhcyByZW5kZXJlclxuICpcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5DYW52YXNSZW5kZXJlcn0gYSByZWZlcmVuY2UgdG8gdGhlIGNhbnZhcyByZW5kZXJlclxuICogQHByaXZhdGVcbiAqL1xuVGlsaW5nU3ByaXRlLnByb3RvdHlwZS5fcmVuZGVyQ2FudmFzID0gZnVuY3Rpb24gKHJlbmRlcmVyKVxue1xuICAgIHZhciB0ZXh0dXJlID0gdGhpcy5fdGV4dHVyZTtcblxuICAgIGlmICghdGV4dHVyZS5iYXNlVGV4dHVyZS5oYXNMb2FkZWQpXG4gICAge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHZhciBjb250ZXh0ID0gcmVuZGVyZXIuY29udGV4dCxcbiAgICAgICAgdHJhbnNmb3JtID0gdGhpcy53b3JsZFRyYW5zZm9ybSxcbiAgICAgICAgcmVzb2x1dGlvbiA9IHJlbmRlcmVyLnJlc29sdXRpb24sXG4gICAgICAgIGJhc2VUZXh0dXJlID0gdGV4dHVyZS5iYXNlVGV4dHVyZSxcbiAgICAgICAgbW9kWCA9ICh0aGlzLnRpbGVQb3NpdGlvbi54IC8gdGhpcy50aWxlU2NhbGUueCkgJSB0ZXh0dXJlLl9mcmFtZS53aWR0aCxcbiAgICAgICAgbW9kWSA9ICh0aGlzLnRpbGVQb3NpdGlvbi55IC8gdGhpcy50aWxlU2NhbGUueSkgJSB0ZXh0dXJlLl9mcmFtZS5oZWlnaHQ7XG5cbiAgICAvLyBjcmVhdGUgYSBuaWNlIHNoaW55IHBhdHRlcm4hXG4gICAgLy8gVE9ETyB0aGlzIG5lZWRzIHRvIGJlIHJlZnJlc2hlZCBpZiB0ZXh0dXJlIGNoYW5nZXMuLlxuICAgIGlmKCF0aGlzLl9jYW52YXNQYXR0ZXJuKVxuICAgIHtcbiAgICAgICAgLy8gY3V0IGFuIG9iamVjdCBmcm9tIGEgc3ByaXRlc2hlZXQuLlxuICAgICAgICB2YXIgdGVtcENhbnZhcyA9IG5ldyBjb3JlLkNhbnZhc0J1ZmZlcih0ZXh0dXJlLl9mcmFtZS53aWR0aCwgdGV4dHVyZS5fZnJhbWUuaGVpZ2h0KTtcblxuICAgICAgICAvLyBUaW50IHRoZSB0aWxpbmcgc3ByaXRlXG4gICAgICAgIGlmICh0aGlzLnRpbnQgIT09IDB4RkZGRkZGKVxuICAgICAgICB7XG4gICAgICAgICAgICBpZiAodGhpcy5jYWNoZWRUaW50ICE9PSB0aGlzLnRpbnQpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdGhpcy5jYWNoZWRUaW50ID0gdGhpcy50aW50O1xuXG4gICAgICAgICAgICAgICAgdGhpcy50aW50ZWRUZXh0dXJlID0gQ2FudmFzVGludGVyLmdldFRpbnRlZFRleHR1cmUodGhpcywgdGhpcy50aW50KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRlbXBDYW52YXMuY29udGV4dC5kcmF3SW1hZ2UodGhpcy50aW50ZWRUZXh0dXJlLCAwLCAwKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRlbXBDYW52YXMuY29udGV4dC5kcmF3SW1hZ2UoYmFzZVRleHR1cmUuc291cmNlLCAtdGV4dHVyZS5fZnJhbWUueCwgLXRleHR1cmUuX2ZyYW1lLnkpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX2NhbnZhc1BhdHRlcm4gPSB0ZW1wQ2FudmFzLmNvbnRleHQuY3JlYXRlUGF0dGVybiggdGVtcENhbnZhcy5jYW52YXMsICdyZXBlYXQnICk7XG4gICAgfVxuXG4gICAgLy8gc2V0IGNvbnRleHQgc3RhdGUuLlxuICAgIGNvbnRleHQuZ2xvYmFsQWxwaGEgPSB0aGlzLndvcmxkQWxwaGE7XG4gICAgY29udGV4dC5zZXRUcmFuc2Zvcm0odHJhbnNmb3JtLmEgKiByZXNvbHV0aW9uLFxuICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2Zvcm0uYiAqIHJlc29sdXRpb24sXG4gICAgICAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybS5jICogcmVzb2x1dGlvbixcbiAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtLmQgKiByZXNvbHV0aW9uLFxuICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2Zvcm0udHggKiByZXNvbHV0aW9uLFxuICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2Zvcm0udHkgKiByZXNvbHV0aW9uKTtcblxuICAgIC8vIFRPRE8gLSB0aGlzIHNob3VsZCBiZSByb2xsZWQgaW50byB0aGUgc2V0VHJhbnNmb3JtIGFib3ZlLi5cbiAgICBjb250ZXh0LnNjYWxlKHRoaXMudGlsZVNjYWxlLngsdGhpcy50aWxlU2NhbGUueSk7XG5cbiAgICBjb250ZXh0LnRyYW5zbGF0ZShtb2RYICsgKHRoaXMuYW5jaG9yLnggKiAtdGhpcy5fd2lkdGggKSxcbiAgICAgICAgICAgICAgICAgICAgICBtb2RZICsgKHRoaXMuYW5jaG9yLnkgKiAtdGhpcy5faGVpZ2h0KSk7XG5cbiAgICAvLyBjaGVjayBibGVuZCBtb2RlXG4gICAgdmFyIGNvbXBvc2l0ZU9wZXJhdGlvbiA9IHJlbmRlcmVyLmJsZW5kTW9kZXNbdGhpcy5ibGVuZE1vZGVdO1xuICAgIGlmIChjb21wb3NpdGVPcGVyYXRpb24gIT09IHJlbmRlcmVyLmNvbnRleHQuZ2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uKVxuICAgIHtcbiAgICAgICAgY29udGV4dC5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb24gPSBjb21wb3NpdGVPcGVyYXRpb247XG4gICAgfVxuXG4gICAgLy8gZmlsbCB0aGUgcGF0dGVybiFcbiAgICBjb250ZXh0LmZpbGxTdHlsZSA9IHRoaXMuX2NhbnZhc1BhdHRlcm47XG4gICAgY29udGV4dC5maWxsUmVjdCgtbW9kWCxcbiAgICAgICAgICAgICAgICAgICAgIC1tb2RZLFxuICAgICAgICAgICAgICAgICAgICAgdGhpcy5fd2lkdGggLyB0aGlzLnRpbGVTY2FsZS54LFxuICAgICAgICAgICAgICAgICAgICAgdGhpcy5faGVpZ2h0IC8gdGhpcy50aWxlU2NhbGUueSk7XG5cblxuICAgIC8vVE9ETyAtIHByZXR0eSBzdXJlIHRoaXMgY2FuIGJlIGRlbGV0ZWQuLi5cbiAgICAvL2NvbnRleHQudHJhbnNsYXRlKC10aGlzLnRpbGVQb3NpdGlvbi54ICsgKHRoaXMuYW5jaG9yLnggKiB0aGlzLl93aWR0aCksIC10aGlzLnRpbGVQb3NpdGlvbi55ICsgKHRoaXMuYW5jaG9yLnkgKiB0aGlzLl9oZWlnaHQpKTtcbiAgICAvL2NvbnRleHQuc2NhbGUoMSAvIHRoaXMudGlsZVNjYWxlLngsIDEgLyB0aGlzLnRpbGVTY2FsZS55KTtcbn07XG5cblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBmcmFtaW5nIHJlY3RhbmdsZSBvZiB0aGUgc3ByaXRlIGFzIGEgUmVjdGFuZ2xlIG9iamVjdFxuKlxuICogQHJldHVybiB7UElYSS5SZWN0YW5nbGV9IHRoZSBmcmFtaW5nIHJlY3RhbmdsZVxuICovXG5UaWxpbmdTcHJpdGUucHJvdG90eXBlLmdldEJvdW5kcyA9IGZ1bmN0aW9uICgpXG57XG4gICAgdmFyIHdpZHRoID0gdGhpcy5fd2lkdGg7XG4gICAgdmFyIGhlaWdodCA9IHRoaXMuX2hlaWdodDtcblxuICAgIHZhciB3MCA9IHdpZHRoICogKDEtdGhpcy5hbmNob3IueCk7XG4gICAgdmFyIHcxID0gd2lkdGggKiAtdGhpcy5hbmNob3IueDtcblxuICAgIHZhciBoMCA9IGhlaWdodCAqICgxLXRoaXMuYW5jaG9yLnkpO1xuICAgIHZhciBoMSA9IGhlaWdodCAqIC10aGlzLmFuY2hvci55O1xuXG4gICAgdmFyIHdvcmxkVHJhbnNmb3JtID0gdGhpcy53b3JsZFRyYW5zZm9ybTtcblxuICAgIHZhciBhID0gd29ybGRUcmFuc2Zvcm0uYTtcbiAgICB2YXIgYiA9IHdvcmxkVHJhbnNmb3JtLmI7XG4gICAgdmFyIGMgPSB3b3JsZFRyYW5zZm9ybS5jO1xuICAgIHZhciBkID0gd29ybGRUcmFuc2Zvcm0uZDtcbiAgICB2YXIgdHggPSB3b3JsZFRyYW5zZm9ybS50eDtcbiAgICB2YXIgdHkgPSB3b3JsZFRyYW5zZm9ybS50eTtcblxuICAgIHZhciB4MSA9IGEgKiB3MSArIGMgKiBoMSArIHR4O1xuICAgIHZhciB5MSA9IGQgKiBoMSArIGIgKiB3MSArIHR5O1xuXG4gICAgdmFyIHgyID0gYSAqIHcwICsgYyAqIGgxICsgdHg7XG4gICAgdmFyIHkyID0gZCAqIGgxICsgYiAqIHcwICsgdHk7XG5cbiAgICB2YXIgeDMgPSBhICogdzAgKyBjICogaDAgKyB0eDtcbiAgICB2YXIgeTMgPSBkICogaDAgKyBiICogdzAgKyB0eTtcblxuICAgIHZhciB4NCA9ICBhICogdzEgKyBjICogaDAgKyB0eDtcbiAgICB2YXIgeTQgPSAgZCAqIGgwICsgYiAqIHcxICsgdHk7XG5cbiAgICB2YXIgbWluWCxcbiAgICAgICAgbWF4WCxcbiAgICAgICAgbWluWSxcbiAgICAgICAgbWF4WTtcblxuICAgIG1pblggPSB4MTtcbiAgICBtaW5YID0geDIgPCBtaW5YID8geDIgOiBtaW5YO1xuICAgIG1pblggPSB4MyA8IG1pblggPyB4MyA6IG1pblg7XG4gICAgbWluWCA9IHg0IDwgbWluWCA/IHg0IDogbWluWDtcblxuICAgIG1pblkgPSB5MTtcbiAgICBtaW5ZID0geTIgPCBtaW5ZID8geTIgOiBtaW5ZO1xuICAgIG1pblkgPSB5MyA8IG1pblkgPyB5MyA6IG1pblk7XG4gICAgbWluWSA9IHk0IDwgbWluWSA/IHk0IDogbWluWTtcblxuICAgIG1heFggPSB4MTtcbiAgICBtYXhYID0geDIgPiBtYXhYID8geDIgOiBtYXhYO1xuICAgIG1heFggPSB4MyA+IG1heFggPyB4MyA6IG1heFg7XG4gICAgbWF4WCA9IHg0ID4gbWF4WCA/IHg0IDogbWF4WDtcblxuICAgIG1heFkgPSB5MTtcbiAgICBtYXhZID0geTIgPiBtYXhZID8geTIgOiBtYXhZO1xuICAgIG1heFkgPSB5MyA+IG1heFkgPyB5MyA6IG1heFk7XG4gICAgbWF4WSA9IHk0ID4gbWF4WSA/IHk0IDogbWF4WTtcblxuICAgIHZhciBib3VuZHMgPSB0aGlzLl9ib3VuZHM7XG5cbiAgICBib3VuZHMueCA9IG1pblg7XG4gICAgYm91bmRzLndpZHRoID0gbWF4WCAtIG1pblg7XG5cbiAgICBib3VuZHMueSA9IG1pblk7XG4gICAgYm91bmRzLmhlaWdodCA9IG1heFkgLSBtaW5ZO1xuXG4gICAgLy8gc3RvcmUgYSByZWZlcmVuY2Ugc28gdGhhdCBpZiB0aGlzIGZ1bmN0aW9uIGdldHMgY2FsbGVkIGFnYWluIGluIHRoZSByZW5kZXIgY3ljbGUgd2UgZG8gbm90IGhhdmUgdG8gcmVjYWxjdWxhdGVcbiAgICB0aGlzLl9jdXJyZW50Qm91bmRzID0gYm91bmRzO1xuXG4gICAgcmV0dXJuIGJvdW5kcztcbn07XG5cbi8qKlxuICogQ2hlY2tzIGlmIGEgcG9pbnQgaXMgaW5zaWRlIHRoaXMgdGlsaW5nIHNwcml0ZVxuICogQHBhcmFtIHBvaW50IHtQSVhJLlBvaW50fSB0aGUgcG9pbnQgdG8gY2hlY2tcbiAqL1xuVGlsaW5nU3ByaXRlLnByb3RvdHlwZS5jb250YWluc1BvaW50ID0gZnVuY3Rpb24oIHBvaW50IClcbntcbiAgICB0aGlzLndvcmxkVHJhbnNmb3JtLmFwcGx5SW52ZXJzZShwb2ludCwgIHRlbXBQb2ludCk7XG5cbiAgICB2YXIgd2lkdGggPSB0aGlzLl93aWR0aDtcbiAgICB2YXIgaGVpZ2h0ID0gdGhpcy5faGVpZ2h0O1xuICAgIHZhciB4MSA9IC13aWR0aCAqIHRoaXMuYW5jaG9yLng7XG4gICAgdmFyIHkxO1xuXG4gICAgaWYgKCB0ZW1wUG9pbnQueCA+IHgxICYmIHRlbXBQb2ludC54IDwgeDEgKyB3aWR0aCApXG4gICAge1xuICAgICAgICB5MSA9IC1oZWlnaHQgKiB0aGlzLmFuY2hvci55O1xuXG4gICAgICAgIGlmICggdGVtcFBvaW50LnkgPiB5MSAmJiB0ZW1wUG9pbnQueSA8IHkxICsgaGVpZ2h0IClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2U7XG59O1xuXG4vKipcbiAqIERlc3Ryb3lzIHRoaXMgdGlsaW5nIHNwcml0ZVxuICpcbiAqL1xuVGlsaW5nU3ByaXRlLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKCkge1xuICAgIGNvcmUuU3ByaXRlLnByb3RvdHlwZS5kZXN0cm95LmNhbGwodGhpcyk7XG5cbiAgICB0aGlzLnRpbGVTY2FsZSA9IG51bGw7XG4gICAgdGhpcy5fdGlsZVNjYWxlT2Zmc2V0ID0gbnVsbDtcbiAgICB0aGlzLnRpbGVQb3NpdGlvbiA9IG51bGw7XG5cbiAgICB0aGlzLl91dnMgPSBudWxsO1xufTtcblxuLyoqXG4gKiBIZWxwZXIgZnVuY3Rpb24gdGhhdCBjcmVhdGVzIGEgdGlsaW5nIHNwcml0ZSB0aGF0IHdpbGwgdXNlIGEgdGV4dHVyZSBmcm9tIHRoZSBUZXh0dXJlQ2FjaGUgYmFzZWQgb24gdGhlIGZyYW1lSWRcbiAqIFRoZSBmcmFtZSBpZHMgYXJlIGNyZWF0ZWQgd2hlbiBhIFRleHR1cmUgcGFja2VyIGZpbGUgaGFzIGJlZW4gbG9hZGVkXG4gKlxuICogQHN0YXRpY1xuICogQHBhcmFtIGZyYW1lSWQge3N0cmluZ30gVGhlIGZyYW1lIElkIG9mIHRoZSB0ZXh0dXJlIGluIHRoZSBjYWNoZVxuICogQHJldHVybiB7UElYSS5leHRyYXMuVGlsaW5nU3ByaXRlfSBBIG5ldyBUaWxpbmdTcHJpdGUgdXNpbmcgYSB0ZXh0dXJlIGZyb20gdGhlIHRleHR1cmUgY2FjaGUgbWF0Y2hpbmcgdGhlIGZyYW1lSWRcbiAqIEBwYXJhbSB3aWR0aCB7bnVtYmVyfSAgdGhlIHdpZHRoIG9mIHRoZSB0aWxpbmcgc3ByaXRlXG4gKiBAcGFyYW0gaGVpZ2h0IHtudW1iZXJ9IHRoZSBoZWlnaHQgb2YgdGhlIHRpbGluZyBzcHJpdGVcbiAqL1xuVGlsaW5nU3ByaXRlLmZyb21GcmFtZSA9IGZ1bmN0aW9uIChmcmFtZUlkLHdpZHRoLGhlaWdodClcbntcbiAgICB2YXIgdGV4dHVyZSA9IGNvcmUudXRpbHMuVGV4dHVyZUNhY2hlW2ZyYW1lSWRdO1xuXG4gICAgaWYgKCF0ZXh0dXJlKVxuICAgIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdUaGUgZnJhbWVJZCBcIicgKyBmcmFtZUlkICsgJ1wiIGRvZXMgbm90IGV4aXN0IGluIHRoZSB0ZXh0dXJlIGNhY2hlICcgKyB0aGlzKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IFRpbGluZ1Nwcml0ZSh0ZXh0dXJlLHdpZHRoLGhlaWdodCk7XG59O1xuXG4vKipcbiAqIEhlbHBlciBmdW5jdGlvbiB0aGF0IGNyZWF0ZXMgYSBzcHJpdGUgdGhhdCB3aWxsIGNvbnRhaW4gYSB0ZXh0dXJlIGJhc2VkIG9uIGFuIGltYWdlIHVybFxuICogSWYgdGhlIGltYWdlIGlzIG5vdCBpbiB0aGUgdGV4dHVyZSBjYWNoZSBpdCB3aWxsIGJlIGxvYWRlZFxuICpcbiAqIEBzdGF0aWNcbiAqIEBwYXJhbSBpbWFnZUlkIHtzdHJpbmd9IFRoZSBpbWFnZSB1cmwgb2YgdGhlIHRleHR1cmVcbiAqIEBwYXJhbSB3aWR0aCB7bnVtYmVyfSAgdGhlIHdpZHRoIG9mIHRoZSB0aWxpbmcgc3ByaXRlXG4gKiBAcGFyYW0gaGVpZ2h0IHtudW1iZXJ9IHRoZSBoZWlnaHQgb2YgdGhlIHRpbGluZyBzcHJpdGVcbiAqIEBwYXJhbSBbY3Jvc3NvcmlnaW49KGF1dG8pXSB7Ym9vbGVhbn0gaWYgeW91IHdhbnQgdG8gc3BlY2lmeSB0aGUgY3Jvc3Mtb3JpZ2luIHBhcmFtZXRlclxuICogQHBhcmFtIFtzY2FsZU1vZGU9UElYSS5TQ0FMRV9NT0RFUy5ERUZBVUxUXSB7bnVtYmVyfSBpZiB5b3Ugd2FudCB0byBzcGVjaWZ5IHRoZSBzY2FsZSBtb2RlLCBzZWUge0BsaW5rIFBJWEkuU0NBTEVfTU9ERVN9IGZvciBwb3NzaWJsZSB2YWx1ZXNcbiAqIEByZXR1cm4ge1BJWEkuZXh0cmFzLlRpbGluZ1Nwcml0ZX0gQSBuZXcgVGlsaW5nU3ByaXRlIHVzaW5nIGEgdGV4dHVyZSBmcm9tIHRoZSB0ZXh0dXJlIGNhY2hlIG1hdGNoaW5nIHRoZSBpbWFnZSBpZFxuICovXG5UaWxpbmdTcHJpdGUuZnJvbUltYWdlID0gZnVuY3Rpb24gKGltYWdlSWQsIHdpZHRoLCBoZWlnaHQsIGNyb3Nzb3JpZ2luLCBzY2FsZU1vZGUpXG57XG4gICAgcmV0dXJuIG5ldyBUaWxpbmdTcHJpdGUoY29yZS5UZXh0dXJlLmZyb21JbWFnZShpbWFnZUlkLCBjcm9zc29yaWdpbiwgc2NhbGVNb2RlKSx3aWR0aCxoZWlnaHQpO1xufTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vY29yZScpLFxuICAgIERpc3BsYXlPYmplY3QgPSBjb3JlLkRpc3BsYXlPYmplY3QsXG4gICAgX3RlbXBNYXRyaXggPSBuZXcgY29yZS5NYXRyaXgoKTtcblxuRGlzcGxheU9iamVjdC5wcm90b3R5cGUuX2NhY2hlQXNCaXRtYXAgPSBmYWxzZTtcbkRpc3BsYXlPYmplY3QucHJvdG90eXBlLl9vcmlnaW5hbFJlbmRlcldlYkdMID0gbnVsbDtcbkRpc3BsYXlPYmplY3QucHJvdG90eXBlLl9vcmlnaW5hbFJlbmRlckNhbnZhcyA9IG51bGw7XG5cbkRpc3BsYXlPYmplY3QucHJvdG90eXBlLl9vcmlnaW5hbFVwZGF0ZVRyYW5zZm9ybSA9IG51bGw7XG5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS5fb3JpZ2luYWxIaXRUZXN0ID0gbnVsbDtcbkRpc3BsYXlPYmplY3QucHJvdG90eXBlLl9vcmlnaW5hbERlc3Ryb3kgPSBudWxsO1xuRGlzcGxheU9iamVjdC5wcm90b3R5cGUuX2NhY2hlZFNwcml0ZSA9IG51bGw7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKERpc3BsYXlPYmplY3QucHJvdG90eXBlLCB7XG5cbiAgICAvKipcbiAgICAgKiBTZXQgdGhpcyB0byB0cnVlIGlmIHlvdSB3YW50IHRoaXMgZGlzcGxheSBvYmplY3QgdG8gYmUgY2FjaGVkIGFzIGEgYml0bWFwLlxuICAgICAqIFRoaXMgYmFzaWNhbGx5IHRha2VzIGEgc25hcCBzaG90IG9mIHRoZSBkaXNwbGF5IG9iamVjdCBhcyBpdCBpcyBhdCB0aGF0IG1vbWVudC4gSXQgY2FuIHByb3ZpZGUgYSBwZXJmb3JtYW5jZSBiZW5lZml0IGZvciBjb21wbGV4IHN0YXRpYyBkaXNwbGF5T2JqZWN0cy5cbiAgICAgKiBUbyByZW1vdmUgc2ltcGx5IHNldCB0aGlzIHByb3BlcnR5IHRvICdmYWxzZSdcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICogQG1lbWJlcm9mIFBJWEkuRGlzcGxheU9iamVjdCNcbiAgICAgKi9cbiAgICBjYWNoZUFzQml0bWFwOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2NhY2hlQXNCaXRtYXA7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICBpZiAodGhpcy5fY2FjaGVBc0JpdG1hcCA9PT0gdmFsdWUpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLl9jYWNoZUFzQml0bWFwID0gdmFsdWU7XG5cbiAgICAgICAgICAgIGlmICh2YWx1ZSlcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9vcmlnaW5hbFJlbmRlcldlYkdMID0gdGhpcy5yZW5kZXJXZWJHTDtcbiAgICAgICAgICAgICAgICB0aGlzLl9vcmlnaW5hbFJlbmRlckNhbnZhcyA9IHRoaXMucmVuZGVyQ2FudmFzO1xuXG4gICAgICAgICAgICAgICAgdGhpcy5fb3JpZ2luYWxVcGRhdGVUcmFuc2Zvcm0gPSB0aGlzLnVwZGF0ZVRyYW5zZm9ybTtcbiAgICAgICAgICAgICAgICB0aGlzLl9vcmlnaW5hbEdldEJvdW5kcyA9IHRoaXMuZ2V0Qm91bmRzO1xuXG4gICAgICAgICAgICAgICAgdGhpcy5fb3JpZ2luYWxEZXN0cm95ID0gdGhpcy5kZXN0cm95O1xuXG4gICAgICAgICAgICAgICAgdGhpcy5fb3JpZ2luYWxDb250YWluc1BvaW50ID0gdGhpcy5jb250YWluc1BvaW50O1xuXG4gICAgICAgICAgICAgICAgdGhpcy5yZW5kZXJXZWJHTCA9IHRoaXMuX3JlbmRlckNhY2hlZFdlYkdMO1xuICAgICAgICAgICAgICAgIHRoaXMucmVuZGVyQ2FudmFzID0gdGhpcy5fcmVuZGVyQ2FjaGVkQ2FudmFzO1xuXG4gICAgICAgICAgICAgICAgdGhpcy5kZXN0cm95ID0gdGhpcy5fY2FjaGVBc0JpdG1hcERlc3Ryb3k7XG5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5fY2FjaGVkU3ByaXRlKVxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fZGVzdHJveUNhY2hlZERpc3BsYXlPYmplY3QoKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB0aGlzLnJlbmRlcldlYkdMID0gdGhpcy5fb3JpZ2luYWxSZW5kZXJXZWJHTDtcbiAgICAgICAgICAgICAgICB0aGlzLnJlbmRlckNhbnZhcyA9IHRoaXMuX29yaWdpbmFsUmVuZGVyQ2FudmFzO1xuICAgICAgICAgICAgICAgIHRoaXMuZ2V0Qm91bmRzID0gdGhpcy5fb3JpZ2luYWxHZXRCb3VuZHM7XG5cbiAgICAgICAgICAgICAgICB0aGlzLmRlc3Ryb3kgPSB0aGlzLl9vcmlnaW5hbERlc3Ryb3k7XG5cbiAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZVRyYW5zZm9ybSA9IHRoaXMuX29yaWdpbmFsVXBkYXRlVHJhbnNmb3JtO1xuICAgICAgICAgICAgICAgIHRoaXMuY29udGFpbnNQb2ludCA9IHRoaXMuX29yaWdpbmFsQ29udGFpbnNQb2ludDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn0pO1xuLyoqXG4qIFJlbmRlcnMgYSBjYWNoZWQgdmVyc2lvbiBvZiB0aGUgc3ByaXRlIHdpdGggV2ViR0xcbipcbiogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLldlYkdMUmVuZGVyZXJ9IHRoZSBXZWJHTCByZW5kZXJlclxuKiBAcHJpdmF0ZVxuKi9cbkRpc3BsYXlPYmplY3QucHJvdG90eXBlLl9yZW5kZXJDYWNoZWRXZWJHTCA9IGZ1bmN0aW9uIChyZW5kZXJlcilcbntcbiAgICBpZiAoIXRoaXMudmlzaWJsZSB8fCB0aGlzLndvcmxkQWxwaGEgPD0gMCB8fCAhdGhpcy5yZW5kZXJhYmxlKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuX2luaXRDYWNoZWREaXNwbGF5T2JqZWN0KCByZW5kZXJlciApO1xuXG4gICAgdGhpcy5fY2FjaGVkU3ByaXRlLndvcmxkQWxwaGEgPSB0aGlzLndvcmxkQWxwaGE7XG5cbiAgICByZW5kZXJlci5zZXRPYmplY3RSZW5kZXJlcihyZW5kZXJlci5wbHVnaW5zLnNwcml0ZSk7XG4gICAgcmVuZGVyZXIucGx1Z2lucy5zcHJpdGUucmVuZGVyKCB0aGlzLl9jYWNoZWRTcHJpdGUgKTtcbn07XG5cbi8qKlxuKiBQcmVwYXJlcyB0aGUgV2ViR0wgcmVuZGVyZXIgdG8gY2FjaGUgdGhlIHNwcml0ZVxuKlxuKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcn0gdGhlIFdlYkdMIHJlbmRlcmVyXG4qIEBwcml2YXRlXG4qL1xuRGlzcGxheU9iamVjdC5wcm90b3R5cGUuX2luaXRDYWNoZWREaXNwbGF5T2JqZWN0ID0gZnVuY3Rpb24gKHJlbmRlcmVyKVxue1xuICAgIGlmKHRoaXMuX2NhY2hlZFNwcml0ZSlcbiAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBmaXJzdCB3ZSBmbHVzaCBhbnl0aGluZyBsZWZ0IGluIHRoZSByZW5kZXJlciAob3RoZXJ3aXNlIGl0IHdvdWxkIGdldCByZW5kZXJlZCB0byB0aGUgY2FjaGVkIHRleHR1cmUpXG4gICAgcmVuZGVyZXIuY3VycmVudFJlbmRlcmVyLmZsdXNoKCk7XG4gICAgLy90aGlzLmZpbHRlcnM9IFtdO1xuICAgIC8vIG5leHQgd2UgZmluZCB0aGUgZGltZW5zaW9ucyBvZiB0aGUgdW50cmFuc2Zvcm1lZCBvYmplY3RcbiAgICAvLyB0aGlzIGZ1bmN0aW9uIGFsc28gY2FsbHMgdXBkYXRldHJhbnNmb3JtIG9uIGFsbCBpdHMgY2hpbGRyZW4gYXMgcGFydCBvZiB0aGUgbWVhc3VyaW5nLiBUaGlzIG1lYW5zIHdlIGRvbid0IG5lZWQgdG8gdXBkYXRlIHRoZSB0cmFuc2Zvcm0gYWdhaW4gaW4gdGhpcyBmdW5jdGlvblxuICAgIC8vIFRPRE8gcGFzcyBhbiBvYmplY3QgdG8gY2xvbmUgdG9vPyBzYXZlcyBoYXZpbmcgdG8gY3JlYXRlIGEgbmV3IG9uZSBlYWNoIHRpbWUhXG4gICAgdmFyIGJvdW5kcyA9IHRoaXMuZ2V0TG9jYWxCb3VuZHMoKS5jbG9uZSgpO1xuXG4gICAgLy8gYWRkIHNvbWUgcGFkZGluZyFcbiAgICBpZih0aGlzLl9maWx0ZXJzKVxuICAgIHtcbiAgICAgICAgdmFyIHBhZGRpbmcgPSB0aGlzLl9maWx0ZXJzWzBdLnBhZGRpbmc7XG4gICAgICAgIGJvdW5kcy54IC09IHBhZGRpbmc7XG4gICAgICAgIGJvdW5kcy55IC09IHBhZGRpbmc7XG5cbiAgICAgICAgYm91bmRzLndpZHRoICs9IHBhZGRpbmcgKiAyO1xuICAgICAgICBib3VuZHMuaGVpZ2h0ICs9IHBhZGRpbmcgKiAyO1xuICAgIH1cblxuICAgIC8vIGZvciBub3cgd2UgY2FjaGUgdGhlIGN1cnJlbnQgcmVuZGVyVGFyZ2V0IHRoYXQgdGhlIHdlYkdMIHJlbmRlcmVyIGlzIGN1cnJlbnRseSB1c2luZy5cbiAgICAvLyB0aGlzIGNvdWxkIGJlIG1vcmUgZWxlZ2VudC4uXG4gICAgdmFyIGNhY2hlZFJlbmRlclRhcmdldCA9IHJlbmRlcmVyLmN1cnJlbnRSZW5kZXJUYXJnZXQ7XG4gICAgLy8gV2UgYWxzbyBzdG9yZSB0aGUgZmlsdGVyIHN0YWNrIC0gSSB3aWxsIGRlZmluaXRlbHkgbG9vayB0byBjaGFuZ2UgaG93IHRoaXMgd29ya3MgYSBsaXR0bGUgbGF0ZXIgZG93biB0aGUgbGluZS5cbiAgICB2YXIgc3RhY2sgPSByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLmZpbHRlclN0YWNrO1xuXG4gICAgLy8gdGhpcyByZW5kZXJUZXh0dXJlIHdpbGwgYmUgdXNlZCB0byBzdG9yZSB0aGUgY2FjaGVkIERpc3BsYXlPYmplY3RcbiAgICB2YXIgcmVuZGVyVGV4dHVyZSA9IG5ldyBjb3JlLlJlbmRlclRleHR1cmUocmVuZGVyZXIsIGJvdW5kcy53aWR0aCB8IDAsIGJvdW5kcy5oZWlnaHQgfCAwKTtcblxuICAgIC8vIG5lZWQgdG8gc2V0IC8vXG4gICAgdmFyIG0gPSBfdGVtcE1hdHJpeDtcblxuICAgIG0udHggPSAtYm91bmRzLng7XG4gICAgbS50eSA9IC1ib3VuZHMueTtcblxuXG5cbiAgICAvLyBzZXQgYWxsIHByb3BlcnRpZXMgdG8gdGhlcmUgb3JpZ2luYWwgc28gd2UgY2FuIHJlbmRlciB0byBhIHRleHR1cmVcbiAgICB0aGlzLnJlbmRlcldlYkdMID0gdGhpcy5fb3JpZ2luYWxSZW5kZXJXZWJHTDtcblxuICAgIHJlbmRlclRleHR1cmUucmVuZGVyKHRoaXMsIG0sIHRydWUsIHRydWUpO1xuXG4gICAgLy8gbm93IHJlc3RvcmUgdGhlIHN0YXRlIGJlIHNldHRpbmcgdGhlIG5ldyBwcm9wZXJ0aWVzXG4gICAgcmVuZGVyZXIuc2V0UmVuZGVyVGFyZ2V0KGNhY2hlZFJlbmRlclRhcmdldCk7XG4gICAgcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5maWx0ZXJTdGFjayA9IHN0YWNrO1xuXG4gICAgdGhpcy5yZW5kZXJXZWJHTCAgICAgPSB0aGlzLl9yZW5kZXJDYWNoZWRXZWJHTDtcbiAgICB0aGlzLnVwZGF0ZVRyYW5zZm9ybSA9IHRoaXMuZGlzcGxheU9iamVjdFVwZGF0ZVRyYW5zZm9ybTtcbiAgICB0aGlzLmdldEJvdW5kcyAgICAgICA9IHRoaXMuX2dldENhY2hlZEJvdW5kcztcblxuXG4gICAgLy8gY3JlYXRlIG91ciBjYWNoZWQgc3ByaXRlXG4gICAgdGhpcy5fY2FjaGVkU3ByaXRlID0gbmV3IGNvcmUuU3ByaXRlKHJlbmRlclRleHR1cmUpO1xuICAgIHRoaXMuX2NhY2hlZFNwcml0ZS53b3JsZFRyYW5zZm9ybSA9IHRoaXMud29ybGRUcmFuc2Zvcm07XG4gICAgdGhpcy5fY2FjaGVkU3ByaXRlLmFuY2hvci54ID0gLSggYm91bmRzLnggLyBib3VuZHMud2lkdGggKTtcbiAgICB0aGlzLl9jYWNoZWRTcHJpdGUuYW5jaG9yLnkgPSAtKCBib3VuZHMueSAvIGJvdW5kcy5oZWlnaHQgKTtcblxuICAgIC8vIHJlc3RvcmUgdGhlIHRyYW5zZm9ybSBvZiB0aGUgY2FjaGVkIHNwcml0ZSB0byBhdm9pZCB0aGUgbmFzdHkgZmxpY2tlci4uXG4gICAgdGhpcy51cGRhdGVUcmFuc2Zvcm0oKTtcblxuICAgIC8vIG1hcCB0aGUgaGl0IHRlc3QuLlxuICAgIHRoaXMuY29udGFpbnNQb2ludCA9IHRoaXMuX2NhY2hlZFNwcml0ZS5jb250YWluc1BvaW50LmJpbmQodGhpcy5fY2FjaGVkU3ByaXRlKTtcbn07XG5cbi8qKlxuKiBSZW5kZXJzIGEgY2FjaGVkIHZlcnNpb24gb2YgdGhlIHNwcml0ZSB3aXRoIGNhbnZhc1xuKlxuKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuQ2FudmFzUmVuZGVyZXJ9IHRoZSBDYW52YXMgcmVuZGVyZXJcbiogQHByaXZhdGVcbiovXG5EaXNwbGF5T2JqZWN0LnByb3RvdHlwZS5fcmVuZGVyQ2FjaGVkQ2FudmFzID0gZnVuY3Rpb24gKHJlbmRlcmVyKVxue1xuICAgIGlmICghdGhpcy52aXNpYmxlIHx8IHRoaXMud29ybGRBbHBoYSA8PSAwIHx8ICF0aGlzLnJlbmRlcmFibGUpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5faW5pdENhY2hlZERpc3BsYXlPYmplY3RDYW52YXMoIHJlbmRlcmVyICk7XG5cbiAgICB0aGlzLl9jYWNoZWRTcHJpdGUud29ybGRBbHBoYSA9IHRoaXMud29ybGRBbHBoYTtcblxuICAgIHRoaXMuX2NhY2hlZFNwcml0ZS5yZW5kZXJDYW52YXMocmVuZGVyZXIpO1xufTtcblxuLy9UT0RPIHRoaXMgY2FuIGJlIHRoZSBzYW1lIGFzIHRoZSB3ZWJHTCB2ZXJpc29uLi4gd2lsbCBuZWVkIHRvIGRvIGEgbGl0dGxlIHR3ZWFraW5nIGZpcnN0IHRob3VnaC4uXG4vKipcbiogUHJlcGFyZXMgdGhlIENhbnZhcyByZW5kZXJlciB0byBjYWNoZSB0aGUgc3ByaXRlXG4qXG4qIEBwYXJhbSByZW5kZXJlciB7UElYSS5DYW52YXNSZW5kZXJlcn0gdGhlIENhbnZhcyByZW5kZXJlclxuKiBAcHJpdmF0ZVxuKi9cbkRpc3BsYXlPYmplY3QucHJvdG90eXBlLl9pbml0Q2FjaGVkRGlzcGxheU9iamVjdENhbnZhcyA9IGZ1bmN0aW9uIChyZW5kZXJlcilcbntcbiAgICBpZih0aGlzLl9jYWNoZWRTcHJpdGUpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy9nZXQgYm91bmRzIGFjdHVhbGx5IHRyYW5zZm9ybXMgdGhlIG9iamVjdCBmb3IgdXMgYWxyZWFkeSFcbiAgICB2YXIgYm91bmRzID0gdGhpcy5nZXRMb2NhbEJvdW5kcygpO1xuXG4gICAgdmFyIGNhY2hlZFJlbmRlclRhcmdldCA9IHJlbmRlcmVyLmNvbnRleHQ7XG5cbiAgICB2YXIgcmVuZGVyVGV4dHVyZSA9IG5ldyBjb3JlLlJlbmRlclRleHR1cmUocmVuZGVyZXIsIGJvdW5kcy53aWR0aCB8IDAsIGJvdW5kcy5oZWlnaHQgfCAwKTtcblxuICAgIC8vIG5lZWQgdG8gc2V0IC8vXG4gICAgdmFyIG0gPSBfdGVtcE1hdHJpeDtcblxuICAgIG0udHggPSAtYm91bmRzLng7XG4gICAgbS50eSA9IC1ib3VuZHMueTtcblxuICAgIC8vIHNldCBhbGwgcHJvcGVydGllcyB0byB0aGVyZSBvcmlnaW5hbCBzbyB3ZSBjYW4gcmVuZGVyIHRvIGEgdGV4dHVyZVxuICAgIHRoaXMucmVuZGVyQ2FudmFzID0gdGhpcy5fb3JpZ2luYWxSZW5kZXJDYW52YXM7XG5cbiAgICByZW5kZXJUZXh0dXJlLnJlbmRlcih0aGlzLCBtLCB0cnVlKTtcblxuICAgIC8vIG5vdyByZXN0b3JlIHRoZSBzdGF0ZSBiZSBzZXR0aW5nIHRoZSBuZXcgcHJvcGVydGllc1xuICAgIHJlbmRlcmVyLmNvbnRleHQgPSBjYWNoZWRSZW5kZXJUYXJnZXQ7XG5cbiAgICB0aGlzLnJlbmRlckNhbnZhcyA9IHRoaXMuX3JlbmRlckNhY2hlZENhbnZhcztcbiAgICB0aGlzLnVwZGF0ZVRyYW5zZm9ybSA9IHRoaXMuZGlzcGxheU9iamVjdFVwZGF0ZVRyYW5zZm9ybTtcbiAgICB0aGlzLmdldEJvdW5kcyAgPSB0aGlzLl9nZXRDYWNoZWRCb3VuZHM7XG5cblxuICAgIC8vIGNyZWF0ZSBvdXIgY2FjaGVkIHNwcml0ZVxuICAgIHRoaXMuX2NhY2hlZFNwcml0ZSA9IG5ldyBjb3JlLlNwcml0ZShyZW5kZXJUZXh0dXJlKTtcbiAgICB0aGlzLl9jYWNoZWRTcHJpdGUud29ybGRUcmFuc2Zvcm0gPSB0aGlzLndvcmxkVHJhbnNmb3JtO1xuICAgIHRoaXMuX2NhY2hlZFNwcml0ZS5hbmNob3IueCA9IC0oIGJvdW5kcy54IC8gYm91bmRzLndpZHRoICk7XG4gICAgdGhpcy5fY2FjaGVkU3ByaXRlLmFuY2hvci55ID0gLSggYm91bmRzLnkgLyBib3VuZHMuaGVpZ2h0ICk7XG5cbiAgICB0aGlzLnVwZGF0ZVRyYW5zZm9ybSgpO1xuXG4gICAgdGhpcy5jb250YWluc1BvaW50ID0gdGhpcy5fY2FjaGVkU3ByaXRlLmNvbnRhaW5zUG9pbnQuYmluZCh0aGlzLl9jYWNoZWRTcHJpdGUpO1xufTtcblxuLyoqXG4qIENhbGN1bGF0ZXMgdGhlIGJvdW5kcyBvZiB0aGUgY2FjaGVkIHNwcml0ZVxuKlxuKiBAcHJpdmF0ZVxuKi9cbkRpc3BsYXlPYmplY3QucHJvdG90eXBlLl9nZXRDYWNoZWRCb3VuZHMgPSBmdW5jdGlvbiAoKVxue1xuICAgIHRoaXMuX2NhY2hlZFNwcml0ZS5fY3VycmVudEJvdW5kcyA9IG51bGw7XG5cbiAgICByZXR1cm4gdGhpcy5fY2FjaGVkU3ByaXRlLmdldEJvdW5kcygpO1xufTtcblxuLyoqXG4qIERlc3Ryb3lzIHRoZSBjYWNoZWQgc3ByaXRlLlxuKlxuKiBAcHJpdmF0ZVxuKi9cbkRpc3BsYXlPYmplY3QucHJvdG90eXBlLl9kZXN0cm95Q2FjaGVkRGlzcGxheU9iamVjdCA9IGZ1bmN0aW9uICgpXG57XG4gICAgdGhpcy5fY2FjaGVkU3ByaXRlLl90ZXh0dXJlLmRlc3Ryb3koKTtcbiAgICB0aGlzLl9jYWNoZWRTcHJpdGUgPSBudWxsO1xufTtcblxuRGlzcGxheU9iamVjdC5wcm90b3R5cGUuX2NhY2hlQXNCaXRtYXBEZXN0cm95ID0gZnVuY3Rpb24gKClcbntcbiAgICB0aGlzLmNhY2hlQXNCaXRtYXAgPSBmYWxzZTtcbiAgICB0aGlzLl9vcmlnaW5hbERlc3Ryb3koKTtcbn07XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uL2NvcmUnKTtcblxuLyoqXG4gKiBUaGUgaW5zdGFuY2UgbmFtZSBvZiB0aGUgb2JqZWN0LlxuICpcbiAqIEBtZW1iZXJvZiBQSVhJLkRpc3BsYXlPYmplY3QjXG4gKiBAbWVtYmVyIHtzdHJpbmd9XG4gKi9cbmNvcmUuRGlzcGxheU9iamVjdC5wcm90b3R5cGUubmFtZSA9IG51bGw7XG5cbi8qKlxuKiBSZXR1cm5zIHRoZSBkaXNwbGF5IG9iamVjdCBpbiB0aGUgY29udGFpbmVyXG4qXG4qIEBtZW1iZXJvZiBQSVhJLkNvbnRhaW5lciNcbiogQHBhcmFtIG5hbWUge3N0cmluZ30gaW5zdGFuY2UgbmFtZVxuKiBAcmV0dXJuIHtQSVhJLkRpc3BsYXlPYmplY3R9XG4qL1xuY29yZS5Db250YWluZXIucHJvdG90eXBlLmdldENoaWxkQnlOYW1lID0gZnVuY3Rpb24gKG5hbWUpXG57XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmNoaWxkcmVuLmxlbmd0aDsgaSsrKVxuICAgIHtcbiAgICAgICAgaWYgKHRoaXMuY2hpbGRyZW5baV0ubmFtZSA9PT0gbmFtZSlcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY2hpbGRyZW5baV07XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG59O1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi9jb3JlJyk7XG5cbi8qKlxuKiBSZXR1cm5zIHRoZSBnbG9iYWwgcG9zaXRpb24gb2YgdGhlIGRpc3BsYXlPYmplY3RcbipcbiogQG1lbWJlcm9mIFBJWEkuRGlzcGxheU9iamVjdCNcbiogQHBhcmFtIHBvaW50IHtQb2ludH0gdGhlIHBvaW50IHRvIHdyaXRlIHRoZSBnbG9iYWwgdmFsdWUgdG8uIElmIG51bGwgYSBuZXcgcG9pbnQgd2lsbCBiZSByZXR1cm5lZFxuKiBAcmV0dXJuIHtQb2ludH1cbiovXG5jb3JlLkRpc3BsYXlPYmplY3QucHJvdG90eXBlLmdldEdsb2JhbFBvc2l0aW9uID0gZnVuY3Rpb24gKHBvaW50KVxue1xuICAgIHBvaW50ID0gcG9pbnQgfHwgbmV3IGNvcmUuUG9pbnQoKTtcblxuICAgIGlmKHRoaXMucGFyZW50KVxuICAgIHtcbiAgICAgICAgdGhpcy5kaXNwbGF5T2JqZWN0VXBkYXRlVHJhbnNmb3JtKCk7XG5cbiAgICAgICAgcG9pbnQueCA9IHRoaXMud29ybGRUcmFuc2Zvcm0udHg7XG4gICAgICAgIHBvaW50LnkgPSB0aGlzLndvcmxkVHJhbnNmb3JtLnR5O1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICBwb2ludC54ID0gdGhpcy5wb3NpdGlvbi54O1xuICAgICAgICBwb2ludC55ID0gdGhpcy5wb3NpdGlvbi55O1xuICAgIH1cblxuICAgIHJldHVybiBwb2ludDtcbn07XG4iLCIvKipcbiAqIEBmaWxlICAgICAgICBNYWluIGV4cG9ydCBvZiB0aGUgUElYSSBleHRyYXMgbGlicmFyeVxuICogQGF1dGhvciAgICAgIE1hdCBHcm92ZXMgPG1hdEBnb29kYm95ZGlnaXRhbC5jb20+XG4gKiBAY29weXJpZ2h0ICAgMjAxMy0yMDE1IEdvb2RCb3lEaWdpdGFsXG4gKiBAbGljZW5zZSAgICAge0BsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9waXhpanMvcGl4aS5qcy9ibG9iL21hc3Rlci9MSUNFTlNFfE1JVCBMaWNlbnNlfVxuICovXG5cbnJlcXVpcmUoJy4vY2FjaGVBc0JpdG1hcCcpO1xucmVxdWlyZSgnLi9nZXRDaGlsZEJ5TmFtZScpO1xucmVxdWlyZSgnLi9nZXRHbG9iYWxQb3NpdGlvbicpO1xuXG4vKipcbiAqIEBuYW1lc3BhY2UgUElYSS5leHRyYXNcbiAqL1xubW9kdWxlLmV4cG9ydHMgPSB7XG4gICAgTW92aWVDbGlwOiAgICAgIHJlcXVpcmUoJy4vTW92aWVDbGlwJyksXG4gICAgVGlsaW5nU3ByaXRlOiAgIHJlcXVpcmUoJy4vVGlsaW5nU3ByaXRlJyksXG4gICAgQml0bWFwVGV4dDogICAgIHJlcXVpcmUoJy4vQml0bWFwVGV4dCcpXG59O1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi8uLi9jb3JlJyk7XG4vLyBAc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9zdWJzdGFjay9icmZzL2lzc3Vlcy8yNVxuXG5cbi8vIFRPRE8gKGNlbmdsZXIpIC0gVGhlIFkgaXMgZmxpcHBlZCBpbiB0aGlzIHNoYWRlciBmb3Igc29tZSByZWFzb24uXG5cbi8qKlxuICogQGF1dGhvciBWaWNvIEB2aWNvY290ZWFcbiAqIG9yaWdpbmFsIHNoYWRlciA6IGh0dHBzOi8vd3d3LnNoYWRlcnRveS5jb20vdmlldy9sc3NHRGogYnkgQG1vdkFYMTNoXG4gKi9cblxuLyoqXG4gKiBBbiBBU0NJSSBmaWx0ZXIuXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLkFic3RyYWN0RmlsdGVyXG4gKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzXG4gKi9cbmZ1bmN0aW9uIEFzY2lpRmlsdGVyKClcbntcbiAgICBjb3JlLkFic3RyYWN0RmlsdGVyLmNhbGwodGhpcyxcbiAgICAgICAgLy8gdmVydGV4IHNoYWRlclxuICAgICAgICBudWxsLFxuICAgICAgICAvLyBmcmFnbWVudCBzaGFkZXJcbiAgICAgICAgXCJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcXG5cXG51bmlmb3JtIHZlYzQgZGltZW5zaW9ucztcXG51bmlmb3JtIGZsb2F0IHBpeGVsU2l6ZTtcXG51bmlmb3JtIHNhbXBsZXIyRCB1U2FtcGxlcjtcXG5cXG5mbG9hdCBjaGFyYWN0ZXIoZmxvYXQgbiwgdmVjMiBwKVxcbntcXG4gICAgcCA9IGZsb29yKHAqdmVjMig0LjAsIC00LjApICsgMi41KTtcXG4gICAgaWYgKGNsYW1wKHAueCwgMC4wLCA0LjApID09IHAueCAmJiBjbGFtcChwLnksIDAuMCwgNC4wKSA9PSBwLnkpXFxuICAgIHtcXG4gICAgICAgIGlmIChpbnQobW9kKG4vZXhwMihwLnggKyA1LjAqcC55KSwgMi4wKSkgPT0gMSkgcmV0dXJuIDEuMDtcXG4gICAgfVxcbiAgICByZXR1cm4gMC4wO1xcbn1cXG5cXG52b2lkIG1haW4oKVxcbntcXG4gICAgdmVjMiB1diA9IGdsX0ZyYWdDb29yZC54eTtcXG5cXG4gICAgdmVjMyBjb2wgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIGZsb29yKCB1diAvIHBpeGVsU2l6ZSApICogcGl4ZWxTaXplIC8gZGltZW5zaW9ucy54eSkucmdiO1xcblxcbiAgICBmbG9hdCBncmF5ID0gKGNvbC5yICsgY29sLmcgKyBjb2wuYikgLyAzLjA7XFxuXFxuICAgIGZsb2F0IG4gPSAgNjU1MzYuMDsgICAgICAgICAgICAgLy8gLlxcbiAgICBpZiAoZ3JheSA+IDAuMikgbiA9IDY1NjAwLjA7ICAgIC8vIDpcXG4gICAgaWYgKGdyYXkgPiAwLjMpIG4gPSAzMzI3NzIuMDsgICAvLyAqXFxuICAgIGlmIChncmF5ID4gMC40KSBuID0gMTUyNTUwODYuMDsgLy8gb1xcbiAgICBpZiAoZ3JheSA+IDAuNSkgbiA9IDIzMzg1MTY0LjA7IC8vICZcXG4gICAgaWYgKGdyYXkgPiAwLjYpIG4gPSAxNTI1MjAxNC4wOyAvLyA4XFxuICAgIGlmIChncmF5ID4gMC43KSBuID0gMTMxOTk0NTIuMDsgLy8gQFxcbiAgICBpZiAoZ3JheSA+IDAuOCkgbiA9IDExNTEyODEwLjA7IC8vICNcXG5cXG4gICAgdmVjMiBwID0gbW9kKCB1diAvICggcGl4ZWxTaXplICogMC41ICksIDIuMCkgLSB2ZWMyKDEuMCk7XFxuICAgIGNvbCA9IGNvbCAqIGNoYXJhY3RlcihuLCBwKTtcXG5cXG4gICAgZ2xfRnJhZ0NvbG9yID0gdmVjNChjb2wsIDEuMCk7XFxufVxcblwiLFxuICAgICAgICAvLyBjdXN0b20gdW5pZm9ybXNcbiAgICAgICAge1xuICAgICAgICAgICAgZGltZW5zaW9uczogeyB0eXBlOiAnNGZ2JywgdmFsdWU6IG5ldyBGbG9hdDMyQXJyYXkoWzAsIDAsIDAsIDBdKSB9LFxuICAgICAgICAgICAgcGl4ZWxTaXplOiAgeyB0eXBlOiAnMWYnLCB2YWx1ZTogOCB9XG4gICAgICAgIH1cbiAgICApO1xufVxuXG5Bc2NpaUZpbHRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuQWJzdHJhY3RGaWx0ZXIucHJvdG90eXBlKTtcbkFzY2lpRmlsdGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IEFzY2lpRmlsdGVyO1xubW9kdWxlLmV4cG9ydHMgPSBBc2NpaUZpbHRlcjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoQXNjaWlGaWx0ZXIucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogVGhlIHBpeGVsIHNpemUgdXNlZCBieSB0aGUgZmlsdGVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuQXNjaWlGaWx0ZXIjXG4gICAgICovXG4gICAgc2l6ZToge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVuaWZvcm1zLnBpeGVsU2l6ZS52YWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudW5pZm9ybXMucGl4ZWxTaXplLnZhbHVlID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG59KTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vLi4vY29yZScpLFxuICAgIEJsdXJYRmlsdGVyID0gcmVxdWlyZSgnLi4vYmx1ci9CbHVyWEZpbHRlcicpLFxuICAgIEJsdXJZRmlsdGVyID0gcmVxdWlyZSgnLi4vYmx1ci9CbHVyWUZpbHRlcicpO1xuXG4vKipcbiAqIFRoZSBCbG9vbUZpbHRlciBhcHBsaWVzIGEgR2F1c3NpYW4gYmx1ciB0byBhbiBvYmplY3QuXG4gKiBUaGUgc3RyZW5ndGggb2YgdGhlIGJsdXIgY2FuIGJlIHNldCBmb3IgeC0gYW5kIHktYXhpcyBzZXBhcmF0ZWx5LlxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5BYnN0cmFjdEZpbHRlclxuICogQG1lbWJlcm9mIFBJWEkuZmlsdGVyc1xuICovXG5mdW5jdGlvbiBCbG9vbUZpbHRlcigpXG57XG4gICAgY29yZS5BYnN0cmFjdEZpbHRlci5jYWxsKHRoaXMpO1xuXG4gICAgdGhpcy5ibHVyWEZpbHRlciA9IG5ldyBCbHVyWEZpbHRlcigpO1xuICAgIHRoaXMuYmx1cllGaWx0ZXIgPSBuZXcgQmx1cllGaWx0ZXIoKTtcblxuICAgIHRoaXMuZGVmYXVsdEZpbHRlciA9IG5ldyBjb3JlLkFic3RyYWN0RmlsdGVyKCk7XG59XG5cbkJsb29tRmlsdGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoY29yZS5BYnN0cmFjdEZpbHRlci5wcm90b3R5cGUpO1xuQmxvb21GaWx0ZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gQmxvb21GaWx0ZXI7XG5tb2R1bGUuZXhwb3J0cyA9IEJsb29tRmlsdGVyO1xuXG5CbG9vbUZpbHRlci5wcm90b3R5cGUuYXBwbHlGaWx0ZXIgPSBmdW5jdGlvbiAocmVuZGVyZXIsIGlucHV0LCBvdXRwdXQpXG57XG4gICAgdmFyIHJlbmRlclRhcmdldCA9IHJlbmRlcmVyLmZpbHRlck1hbmFnZXIuZ2V0UmVuZGVyVGFyZ2V0KHRydWUpO1xuXG4gICAgLy9UT0RPIC0gY29weVRleFN1YkltYWdlMkQgY291bGQgYmUgdXNlZCBoZXJlP1xuICAgIHRoaXMuZGVmYXVsdEZpbHRlci5hcHBseUZpbHRlcihyZW5kZXJlciwgaW5wdXQsIG91dHB1dCk7XG5cbiAgICB0aGlzLmJsdXJYRmlsdGVyLmFwcGx5RmlsdGVyKHJlbmRlcmVyLCBpbnB1dCwgcmVuZGVyVGFyZ2V0KTtcblxuICAgIHJlbmRlcmVyLmJsZW5kTW9kZU1hbmFnZXIuc2V0QmxlbmRNb2RlKGNvcmUuQkxFTkRfTU9ERVMuU0NSRUVOKTtcblxuICAgIHRoaXMuYmx1cllGaWx0ZXIuYXBwbHlGaWx0ZXIocmVuZGVyZXIsIHJlbmRlclRhcmdldCwgb3V0cHV0KTtcblxuICAgIHJlbmRlcmVyLmJsZW5kTW9kZU1hbmFnZXIuc2V0QmxlbmRNb2RlKGNvcmUuQkxFTkRfTU9ERVMuTk9STUFMKTtcblxuICAgIHJlbmRlcmVyLmZpbHRlck1hbmFnZXIucmV0dXJuUmVuZGVyVGFyZ2V0KHJlbmRlclRhcmdldCk7XG59O1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhCbG9vbUZpbHRlci5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBzdHJlbmd0aCBvZiBib3RoIHRoZSBibHVyWCBhbmQgYmx1clkgcHJvcGVydGllcyBzaW11bHRhbmVvdXNseVxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJPZiBQSVhJLmZpbHRlcnMuQmxvb21GaWx0ZXIjXG4gICAgICogQGRlZmF1bHQgMlxuICAgICAqL1xuICAgIGJsdXI6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5ibHVyWEZpbHRlci5ibHVyO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5ibHVyWEZpbHRlci5ibHVyID0gdGhpcy5ibHVyWUZpbHRlci5ibHVyID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgc3RyZW5ndGggb2YgdGhlIGJsdXJYIHByb3BlcnR5XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlck9mIFBJWEkuZmlsdGVycy5CbG9vbUZpbHRlciNcbiAgICAgKiBAZGVmYXVsdCAyXG4gICAgICovXG4gICAgYmx1clg6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5ibHVyWEZpbHRlci5ibHVyO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5ibHVyWEZpbHRlci5ibHVyID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgc3RyZW5ndGggb2YgdGhlIGJsdXJZIHByb3BlcnR5XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlck9mIFBJWEkuZmlsdGVycy5CbG9vbUZpbHRlciNcbiAgICAgKiBAZGVmYXVsdCAyXG4gICAgICovXG4gICAgYmx1clk6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5ibHVyWUZpbHRlci5ibHVyO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5ibHVyWUZpbHRlci5ibHVyID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG59KTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vLi4vY29yZScpO1xuXG5cbi8qKlxuICogVGhlIEJsdXJEaXJGaWx0ZXIgYXBwbGllcyBhIEdhdXNzaWFuIGJsdXIgdG93YXJkIGEgZGlyZWN0aW9uIHRvIGFuIG9iamVjdC5cbiAqXG4gKiBAY2xhc3NcbiAqIEBwYXJhbSB7bnVtYmVyfSBkaXJYXG4gKiBAcGFyYW0ge251bWJlcn0gZGlyWVxuICogQGV4dGVuZHMgUElYSS5BYnN0cmFjdEZpbHRlclxuICogQG1lbWJlcm9mIFBJWEkuZmlsdGVyc1xuICovXG5mdW5jdGlvbiBCbHVyRGlyRmlsdGVyKGRpclgsIGRpclkpXG57XG4gICAgY29yZS5BYnN0cmFjdEZpbHRlci5jYWxsKHRoaXMsXG4gICAgICAgIC8vIHZlcnRleCBzaGFkZXJcbiAgICAgICAgXCJhdHRyaWJ1dGUgdmVjMiBhVmVydGV4UG9zaXRpb247XFxuYXR0cmlidXRlIHZlYzIgYVRleHR1cmVDb29yZDtcXG5hdHRyaWJ1dGUgdmVjNCBhQ29sb3I7XFxuXFxudW5pZm9ybSBmbG9hdCBzdHJlbmd0aDtcXG51bmlmb3JtIGZsb2F0IGRpclg7XFxudW5pZm9ybSBmbG9hdCBkaXJZO1xcbnVuaWZvcm0gbWF0MyBwcm9qZWN0aW9uTWF0cml4O1xcblxcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xcbnZhcnlpbmcgdmVjNCB2Q29sb3I7XFxudmFyeWluZyB2ZWMyIHZCbHVyVGV4Q29vcmRzWzNdO1xcblxcbnZvaWQgbWFpbih2b2lkKVxcbntcXG4gICAgZ2xfUG9zaXRpb24gPSB2ZWM0KChwcm9qZWN0aW9uTWF0cml4ICogdmVjMygoYVZlcnRleFBvc2l0aW9uKSwgMS4wKSkueHksIDAuMCwgMS4wKTtcXG4gICAgdlRleHR1cmVDb29yZCA9IGFUZXh0dXJlQ29vcmQ7XFxuXFxuICAgIHZCbHVyVGV4Q29vcmRzWzBdID0gYVRleHR1cmVDb29yZCArIHZlYzIoICgwLjAwNCAqIHN0cmVuZ3RoKSAqIGRpclgsICgwLjAwNCAqIHN0cmVuZ3RoKSAqIGRpclkgKTtcXG4gICAgdkJsdXJUZXhDb29yZHNbMV0gPSBhVGV4dHVyZUNvb3JkICsgdmVjMiggKDAuMDA4ICogc3RyZW5ndGgpICogZGlyWCwgKDAuMDA4ICogc3RyZW5ndGgpICogZGlyWSApO1xcbiAgICB2Qmx1clRleENvb3Jkc1syXSA9IGFUZXh0dXJlQ29vcmQgKyB2ZWMyKCAoMC4wMTIgKiBzdHJlbmd0aCkgKiBkaXJYLCAoMC4wMTIgKiBzdHJlbmd0aCkgKiBkaXJZICk7XFxuXFxuICAgIHZDb2xvciA9IHZlYzQoYUNvbG9yLnJnYiAqIGFDb2xvci5hLCBhQ29sb3IuYSk7XFxufVxcblwiLFxuICAgICAgICAvLyBmcmFnbWVudCBzaGFkZXJcbiAgICAgICAgXCJwcmVjaXNpb24gbG93cCBmbG9hdDtcXG5cXG52YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDtcXG52YXJ5aW5nIHZlYzIgdkJsdXJUZXhDb29yZHNbM107XFxudmFyeWluZyB2ZWM0IHZDb2xvcjtcXG5cXG51bmlmb3JtIHNhbXBsZXIyRCB1U2FtcGxlcjtcXG5cXG52b2lkIG1haW4odm9pZClcXG57XFxuICAgIGdsX0ZyYWdDb2xvciA9IHZlYzQoMC4wKTtcXG5cXG4gICAgZ2xfRnJhZ0NvbG9yICs9IHRleHR1cmUyRCh1U2FtcGxlciwgdlRleHR1cmVDb29yZCAgICAgKSAqIDAuMzk4OTQyMjgwNDAxNDMyNztcXG4gICAgZ2xfRnJhZ0NvbG9yICs9IHRleHR1cmUyRCh1U2FtcGxlciwgdkJsdXJUZXhDb29yZHNbIDBdKSAqIDAuMjQxOTcwNzI0NTE5MTQ1NDtcXG4gICAgZ2xfRnJhZ0NvbG9yICs9IHRleHR1cmUyRCh1U2FtcGxlciwgdkJsdXJUZXhDb29yZHNbIDFdKSAqIDAuMDUzOTkwOTY2NTEzMTg5ODU7XFxuICAgIGdsX0ZyYWdDb2xvciArPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZCbHVyVGV4Q29vcmRzWyAyXSkgKiAwLjAwNDQzMTg0ODQxMTkzODM0MTtcXG59XFxuXCIsXG4gICAgICAgIC8vIHNldCB0aGUgdW5pZm9ybXNcbiAgICAgICAge1xuICAgICAgICAgICAgc3RyZW5ndGg6IHsgdHlwZTogJzFmJywgdmFsdWU6IDEgfSxcbiAgICAgICAgICAgIGRpclg6IHsgdHlwZTogJzFmJywgdmFsdWU6IGRpclggfHwgMCB9LFxuICAgICAgICAgICAgZGlyWTogeyB0eXBlOiAnMWYnLCB2YWx1ZTogZGlyWSB8fCAwIH1cbiAgICAgICAgfVxuICAgICk7XG5cbiAgICB0aGlzLmRlZmF1bHRGaWx0ZXIgPSBuZXcgY29yZS5BYnN0cmFjdEZpbHRlcigpO1xuXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgbnVtYmVyIG9mIHBhc3NlcyBmb3IgYmx1ci4gTW9yZSBwYXNzZXMgbWVhbnMgaGlnaGVyIHF1YWlsaXR5IGJsdXJpbmcuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMVxuICAgICAqL1xuICAgIHRoaXMucGFzc2VzID0gMTtcblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIFggZGlyZWN0aW9uIG9mIHRoZSBibHVyXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMFxuICAgICAqL1xuICAgIHRoaXMuZGlyWCA9IGRpclggfHwgMDtcblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIFkgZGlyZWN0aW9uIG9mIHRoZSBibHVyXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMFxuICAgICAqL1xuICAgIHRoaXMuZGlyWSA9IGRpclkgfHwgMDtcblxuICAgIHRoaXMuc3RyZW5ndGggPSA0O1xufVxuXG5CbHVyRGlyRmlsdGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoY29yZS5BYnN0cmFjdEZpbHRlci5wcm90b3R5cGUpO1xuQmx1ckRpckZpbHRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBCbHVyRGlyRmlsdGVyO1xubW9kdWxlLmV4cG9ydHMgPSBCbHVyRGlyRmlsdGVyO1xuXG5CbHVyRGlyRmlsdGVyLnByb3RvdHlwZS5hcHBseUZpbHRlciA9IGZ1bmN0aW9uIChyZW5kZXJlciwgaW5wdXQsIG91dHB1dCwgY2xlYXIpIHtcblxuICAgIHZhciBzaGFkZXIgPSB0aGlzLmdldFNoYWRlcihyZW5kZXJlcik7XG5cbiAgICB0aGlzLnVuaWZvcm1zLnN0cmVuZ3RoLnZhbHVlID0gdGhpcy5zdHJlbmd0aCAvIDQgLyB0aGlzLnBhc3NlcyAqIChpbnB1dC5mcmFtZS53aWR0aCAvIGlucHV0LnNpemUud2lkdGgpO1xuXG4gICAgaWYgKHRoaXMucGFzc2VzID09PSAxKSB7XG4gICAgICAgIHJlbmRlcmVyLmZpbHRlck1hbmFnZXIuYXBwbHlGaWx0ZXIoc2hhZGVyLCBpbnB1dCwgb3V0cHV0LCBjbGVhcik7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgdmFyIHJlbmRlclRhcmdldCA9IHJlbmRlcmVyLmZpbHRlck1hbmFnZXIuZ2V0UmVuZGVyVGFyZ2V0KHRydWUpO1xuXG4gICAgICAgIHJlbmRlcmVyLmZpbHRlck1hbmFnZXIuYXBwbHlGaWx0ZXIoc2hhZGVyLCBpbnB1dCwgcmVuZGVyVGFyZ2V0LCBjbGVhcik7XG5cbiAgICAgICAgZm9yKHZhciBpID0gMDsgaSA8IHRoaXMucGFzc2VzLTI7IGkrKylcbiAgICAgICAge1xuICAgICAgICAgICAgLy90aGlzLnVuaWZvcm1zLnN0cmVuZ3RoLnZhbHVlID0gdGhpcy5zdHJlbmd0aCAvIDQgLyAodGhpcy5wYXNzZXMrKGkqMikpICogKGlucHV0LmZyYW1lLndpZHRoIC8gaW5wdXQuc2l6ZS53aWR0aCk7XG4gICAgICAgICAgICByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLmFwcGx5RmlsdGVyKHNoYWRlciwgcmVuZGVyVGFyZ2V0LCByZW5kZXJUYXJnZXQsIGNsZWFyKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJlbmRlcmVyLmZpbHRlck1hbmFnZXIuYXBwbHlGaWx0ZXIoc2hhZGVyLCByZW5kZXJUYXJnZXQsIG91dHB1dCwgY2xlYXIpO1xuXG4gICAgICAgIHJlbmRlcmVyLmZpbHRlck1hbmFnZXIucmV0dXJuUmVuZGVyVGFyZ2V0KHJlbmRlclRhcmdldCk7XG4gICAgfVxufTtcblxuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhCbHVyRGlyRmlsdGVyLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIHN0cmVuZ3RoIG9mIGJvdGggdGhlIGJsdXIuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5CbHVyRGlyRmlsdGVyI1xuICAgICAqIEBkZWZhdWx0IDJcbiAgICAgKi9cbiAgICBibHVyOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuc3RyZW5ndGg7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnBhZGRpbmcgPSB2YWx1ZSAqIDAuNTtcbiAgICAgICAgICAgIHRoaXMuc3RyZW5ndGggPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgWCBkaXJlY3Rpb24gb2YgdGhlIGJsdXIuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5CbHVyWUZpbHRlciNcbiAgICAgKiBAZGVmYXVsdCAwXG4gICAgICovXG4gICAgZGlyWDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmRpclg7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLmRpclgudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgWSBkaXJlY3Rpb24gb2YgdGhlIGJsdXIuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5CbHVyRGlyRmlsdGVyI1xuICAgICAqIEBkZWZhdWx0IDBcbiAgICAgKi9cbiAgICBkaXJZOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZGlyWTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudW5pZm9ybXMuZGlyWS52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfVxufSk7XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uLy4uL2NvcmUnKSxcbiAgICBCbHVyWEZpbHRlciA9IHJlcXVpcmUoJy4vQmx1clhGaWx0ZXInKSxcbiAgICBCbHVyWUZpbHRlciA9IHJlcXVpcmUoJy4vQmx1cllGaWx0ZXInKTtcblxuLyoqXG4gKiBUaGUgQmx1ckZpbHRlciBhcHBsaWVzIGEgR2F1c3NpYW4gYmx1ciB0byBhbiBvYmplY3QuXG4gKiBUaGUgc3RyZW5ndGggb2YgdGhlIGJsdXIgY2FuIGJlIHNldCBmb3IgeC0gYW5kIHktYXhpcyBzZXBhcmF0ZWx5LlxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5BYnN0cmFjdEZpbHRlclxuICogQG1lbWJlcm9mIFBJWEkuZmlsdGVyc1xuICovXG5mdW5jdGlvbiBCbHVyRmlsdGVyKClcbntcbiAgICBjb3JlLkFic3RyYWN0RmlsdGVyLmNhbGwodGhpcyk7XG5cbiAgICB0aGlzLmJsdXJYRmlsdGVyID0gbmV3IEJsdXJYRmlsdGVyKCk7XG4gICAgdGhpcy5ibHVyWUZpbHRlciA9IG5ldyBCbHVyWUZpbHRlcigpO1xufVxuXG5CbHVyRmlsdGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoY29yZS5BYnN0cmFjdEZpbHRlci5wcm90b3R5cGUpO1xuQmx1ckZpbHRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBCbHVyRmlsdGVyO1xubW9kdWxlLmV4cG9ydHMgPSBCbHVyRmlsdGVyO1xuXG5CbHVyRmlsdGVyLnByb3RvdHlwZS5hcHBseUZpbHRlciA9IGZ1bmN0aW9uIChyZW5kZXJlciwgaW5wdXQsIG91dHB1dClcbntcbiAgICB2YXIgcmVuZGVyVGFyZ2V0ID0gcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5nZXRSZW5kZXJUYXJnZXQodHJ1ZSk7XG5cbiAgICB0aGlzLmJsdXJYRmlsdGVyLmFwcGx5RmlsdGVyKHJlbmRlcmVyLCBpbnB1dCwgcmVuZGVyVGFyZ2V0KTtcbiAgICB0aGlzLmJsdXJZRmlsdGVyLmFwcGx5RmlsdGVyKHJlbmRlcmVyLCByZW5kZXJUYXJnZXQsIG91dHB1dCk7XG5cbiAgICByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLnJldHVyblJlbmRlclRhcmdldChyZW5kZXJUYXJnZXQpO1xufTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoQmx1ckZpbHRlci5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBzdHJlbmd0aCBvZiBib3RoIHRoZSBibHVyWCBhbmQgYmx1clkgcHJvcGVydGllcyBzaW11bHRhbmVvdXNseVxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJPZiBQSVhJLmZpbHRlcnMuQmx1ckZpbHRlciNcbiAgICAgKiBAZGVmYXVsdCAyXG4gICAgICovXG4gICAgYmx1cjoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmJsdXJYRmlsdGVyLmJsdXI7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnBhZGRpbmcgPSBNYXRoLmFicyh2YWx1ZSkgKiAwLjU7XG4gICAgICAgICAgICB0aGlzLmJsdXJYRmlsdGVyLmJsdXIgPSB0aGlzLmJsdXJZRmlsdGVyLmJsdXIgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBudW1iZXIgb2YgcGFzc2VzIGZvciBibHVyLiBNb3JlIHBhc3NlcyBtZWFucyBoaWdoZXIgcXVhaWxpdHkgYmx1cmluZy5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLkJsdXJZRmlsdGVyI1xuICAgICAqIEBkZWZhdWx0IDFcbiAgICAgKi9cbiAgICBwYXNzZXM6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gIHRoaXMuYmx1clhGaWx0ZXIucGFzc2VzO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5ibHVyWEZpbHRlci5wYXNzZXMgPSB0aGlzLmJsdXJZRmlsdGVyLnBhc3NlcyA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIHN0cmVuZ3RoIG9mIHRoZSBibHVyWCBwcm9wZXJ0eVxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJPZiBQSVhJLmZpbHRlcnMuQmx1ckZpbHRlciNcbiAgICAgKiBAZGVmYXVsdCAyXG4gICAgICovXG4gICAgYmx1clg6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5ibHVyWEZpbHRlci5ibHVyO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5ibHVyWEZpbHRlci5ibHVyID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgc3RyZW5ndGggb2YgdGhlIGJsdXJZIHByb3BlcnR5XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlck9mIFBJWEkuZmlsdGVycy5CbHVyRmlsdGVyI1xuICAgICAqIEBkZWZhdWx0IDJcbiAgICAgKi9cbiAgICBibHVyWToge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmJsdXJZRmlsdGVyLmJsdXI7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmJsdXJZRmlsdGVyLmJsdXIgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi8uLi9jb3JlJyk7XG4vLyBAc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9zdWJzdGFjay9icmZzL2lzc3Vlcy8yNVxuXG5cbi8qKlxuICogVGhlIEJsdXJYRmlsdGVyIGFwcGxpZXMgYSBob3Jpem9udGFsIEdhdXNzaWFuIGJsdXIgdG8gYW4gb2JqZWN0LlxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5BYnN0cmFjdEZpbHRlclxuICogQG1lbWJlcm9mIFBJWEkuZmlsdGVyc1xuICovXG5mdW5jdGlvbiBCbHVyWEZpbHRlcigpXG57XG4gICAgY29yZS5BYnN0cmFjdEZpbHRlci5jYWxsKHRoaXMsXG4gICAgICAgIC8vIHZlcnRleCBzaGFkZXJcbiAgICAgICAgXCJhdHRyaWJ1dGUgdmVjMiBhVmVydGV4UG9zaXRpb247XFxuYXR0cmlidXRlIHZlYzIgYVRleHR1cmVDb29yZDtcXG5hdHRyaWJ1dGUgdmVjNCBhQ29sb3I7XFxuXFxudW5pZm9ybSBmbG9hdCBzdHJlbmd0aDtcXG51bmlmb3JtIG1hdDMgcHJvamVjdGlvbk1hdHJpeDtcXG5cXG52YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDtcXG52YXJ5aW5nIHZlYzQgdkNvbG9yO1xcbnZhcnlpbmcgdmVjMiB2Qmx1clRleENvb3Jkc1s2XTtcXG5cXG52b2lkIG1haW4odm9pZClcXG57XFxuICAgIGdsX1Bvc2l0aW9uID0gdmVjNCgocHJvamVjdGlvbk1hdHJpeCAqIHZlYzMoKGFWZXJ0ZXhQb3NpdGlvbiksIDEuMCkpLnh5LCAwLjAsIDEuMCk7XFxuICAgIHZUZXh0dXJlQ29vcmQgPSBhVGV4dHVyZUNvb3JkO1xcblxcbiAgICB2Qmx1clRleENvb3Jkc1sgMF0gPSBhVGV4dHVyZUNvb3JkICsgdmVjMigtMC4wMTIgKiBzdHJlbmd0aCwgMC4wKTtcXG4gICAgdkJsdXJUZXhDb29yZHNbIDFdID0gYVRleHR1cmVDb29yZCArIHZlYzIoLTAuMDA4ICogc3RyZW5ndGgsIDAuMCk7XFxuICAgIHZCbHVyVGV4Q29vcmRzWyAyXSA9IGFUZXh0dXJlQ29vcmQgKyB2ZWMyKC0wLjAwNCAqIHN0cmVuZ3RoLCAwLjApO1xcbiAgICB2Qmx1clRleENvb3Jkc1sgM10gPSBhVGV4dHVyZUNvb3JkICsgdmVjMiggMC4wMDQgKiBzdHJlbmd0aCwgMC4wKTtcXG4gICAgdkJsdXJUZXhDb29yZHNbIDRdID0gYVRleHR1cmVDb29yZCArIHZlYzIoIDAuMDA4ICogc3RyZW5ndGgsIDAuMCk7XFxuICAgIHZCbHVyVGV4Q29vcmRzWyA1XSA9IGFUZXh0dXJlQ29vcmQgKyB2ZWMyKCAwLjAxMiAqIHN0cmVuZ3RoLCAwLjApO1xcblxcbiAgICB2Q29sb3IgPSB2ZWM0KGFDb2xvci5yZ2IgKiBhQ29sb3IuYSwgYUNvbG9yLmEpO1xcbn1cXG5cIixcbiAgICAgICAgLy8gZnJhZ21lbnQgc2hhZGVyXG4gICAgICAgIFwicHJlY2lzaW9uIGxvd3AgZmxvYXQ7XFxuXFxudmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7XFxudmFyeWluZyB2ZWMyIHZCbHVyVGV4Q29vcmRzWzZdO1xcbnZhcnlpbmcgdmVjNCB2Q29sb3I7XFxuXFxudW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXI7XFxuXFxudm9pZCBtYWluKHZvaWQpXFxue1xcbiAgICBnbF9GcmFnQ29sb3IgPSB2ZWM0KDAuMCk7XFxuXFxuICAgIGdsX0ZyYWdDb2xvciArPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZCbHVyVGV4Q29vcmRzWyAwXSkqMC4wMDQ0MzE4NDg0MTE5MzgzNDE7XFxuICAgIGdsX0ZyYWdDb2xvciArPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZCbHVyVGV4Q29vcmRzWyAxXSkqMC4wNTM5OTA5NjY1MTMxODk4NTtcXG4gICAgZ2xfRnJhZ0NvbG9yICs9IHRleHR1cmUyRCh1U2FtcGxlciwgdkJsdXJUZXhDb29yZHNbIDJdKSowLjI0MTk3MDcyNDUxOTE0NTQ7XFxuICAgIGdsX0ZyYWdDb2xvciArPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZUZXh0dXJlQ29vcmQgICAgICkqMC4zOTg5NDIyODA0MDE0MzI3O1xcbiAgICBnbF9GcmFnQ29sb3IgKz0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2Qmx1clRleENvb3Jkc1sgM10pKjAuMjQxOTcwNzI0NTE5MTQ1NDtcXG4gICAgZ2xfRnJhZ0NvbG9yICs9IHRleHR1cmUyRCh1U2FtcGxlciwgdkJsdXJUZXhDb29yZHNbIDRdKSowLjA1Mzk5MDk2NjUxMzE4OTg1O1xcbiAgICBnbF9GcmFnQ29sb3IgKz0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2Qmx1clRleENvb3Jkc1sgNV0pKjAuMDA0NDMxODQ4NDExOTM4MzQxO1xcbn1cXG5cIixcbiAgICAgICAgLy8gc2V0IHRoZSB1bmlmb3Jtc1xuICAgICAgICB7XG4gICAgICAgICAgICBzdHJlbmd0aDogeyB0eXBlOiAnMWYnLCB2YWx1ZTogMSB9XG4gICAgICAgIH1cbiAgICApO1xuXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgbnVtYmVyIG9mIHBhc3NlcyBmb3IgYmx1ci4gTW9yZSBwYXNzZXMgbWVhbnMgaGlnaGVyIHF1YWlsaXR5IGJsdXJpbmcuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMVxuICAgICAqL1xuICAgIHRoaXMucGFzc2VzID0gMTtcblxuICAgIHRoaXMuc3RyZW5ndGggPSA0O1xufVxuXG5CbHVyWEZpbHRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuQWJzdHJhY3RGaWx0ZXIucHJvdG90eXBlKTtcbkJsdXJYRmlsdGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IEJsdXJYRmlsdGVyO1xubW9kdWxlLmV4cG9ydHMgPSBCbHVyWEZpbHRlcjtcblxuQmx1clhGaWx0ZXIucHJvdG90eXBlLmFwcGx5RmlsdGVyID0gZnVuY3Rpb24gKHJlbmRlcmVyLCBpbnB1dCwgb3V0cHV0LCBjbGVhcilcbntcbiAgICB2YXIgc2hhZGVyID0gdGhpcy5nZXRTaGFkZXIocmVuZGVyZXIpO1xuXG4gICAgdGhpcy51bmlmb3Jtcy5zdHJlbmd0aC52YWx1ZSA9IHRoaXMuc3RyZW5ndGggLyA0IC8gdGhpcy5wYXNzZXMgKiAoaW5wdXQuZnJhbWUud2lkdGggLyBpbnB1dC5zaXplLndpZHRoKTtcblxuICAgIGlmKHRoaXMucGFzc2VzID09PSAxKVxuICAgIHtcbiAgICAgICAgcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5hcHBseUZpbHRlcihzaGFkZXIsIGlucHV0LCBvdXRwdXQsIGNsZWFyKTtcbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgdmFyIHJlbmRlclRhcmdldCA9IHJlbmRlcmVyLmZpbHRlck1hbmFnZXIuZ2V0UmVuZGVyVGFyZ2V0KHRydWUpO1xuICAgICAgICB2YXIgZmxpcCA9IGlucHV0O1xuICAgICAgICB2YXIgZmxvcCA9IHJlbmRlclRhcmdldDtcblxuICAgICAgICBmb3IodmFyIGkgPSAwOyBpIDwgdGhpcy5wYXNzZXMtMTsgaSsrKVxuICAgICAgICB7XG4gICAgICAgICAgICByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLmFwcGx5RmlsdGVyKHNoYWRlciwgZmxpcCwgZmxvcCwgdHJ1ZSk7XG5cbiAgICAgICAgICAgdmFyIHRlbXAgPSBmbG9wO1xuICAgICAgICAgICBmbG9wID0gZmxpcDtcbiAgICAgICAgICAgZmxpcCA9IHRlbXA7XG4gICAgICAgIH1cblxuICAgICAgICByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLmFwcGx5RmlsdGVyKHNoYWRlciwgZmxpcCwgb3V0cHV0LCBjbGVhcik7XG5cbiAgICAgICAgcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5yZXR1cm5SZW5kZXJUYXJnZXQocmVuZGVyVGFyZ2V0KTtcbiAgICB9XG59O1xuXG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKEJsdXJYRmlsdGVyLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIHN0cmVuZ3RoIG9mIGJvdGggdGhlIGJsdXIuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5CbHVyWEZpbHRlciNcbiAgICAgKiBAZGVmYXVsdCAyXG4gICAgICovXG4gICAgYmx1cjoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiAgdGhpcy5zdHJlbmd0aDtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMucGFkZGluZyA9ICBNYXRoLmFicyh2YWx1ZSkgKiAwLjU7XG4gICAgICAgICAgICB0aGlzLnN0cmVuZ3RoID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG59KTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vLi4vY29yZScpO1xuLy8gQHNlZSBodHRwczovL2dpdGh1Yi5jb20vc3Vic3RhY2svYnJmcy9pc3N1ZXMvMjVcblxuXG4vKipcbiAqIFRoZSBCbHVyWUZpbHRlciBhcHBsaWVzIGEgaG9yaXpvbnRhbCBHYXVzc2lhbiBibHVyIHRvIGFuIG9iamVjdC5cbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQWJzdHJhY3RGaWx0ZXJcbiAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnNcbiAqL1xuZnVuY3Rpb24gQmx1cllGaWx0ZXIoKVxue1xuICAgIGNvcmUuQWJzdHJhY3RGaWx0ZXIuY2FsbCh0aGlzLFxuICAgICAgICAvLyB2ZXJ0ZXggc2hhZGVyXG4gICAgICAgIFwiYXR0cmlidXRlIHZlYzIgYVZlcnRleFBvc2l0aW9uO1xcbmF0dHJpYnV0ZSB2ZWMyIGFUZXh0dXJlQ29vcmQ7XFxuYXR0cmlidXRlIHZlYzQgYUNvbG9yO1xcblxcbnVuaWZvcm0gZmxvYXQgc3RyZW5ndGg7XFxudW5pZm9ybSBtYXQzIHByb2plY3Rpb25NYXRyaXg7XFxuXFxudmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7XFxudmFyeWluZyB2ZWM0IHZDb2xvcjtcXG52YXJ5aW5nIHZlYzIgdkJsdXJUZXhDb29yZHNbNl07XFxuXFxudm9pZCBtYWluKHZvaWQpXFxue1xcbiAgICBnbF9Qb3NpdGlvbiA9IHZlYzQoKHByb2plY3Rpb25NYXRyaXggKiB2ZWMzKChhVmVydGV4UG9zaXRpb24pLCAxLjApKS54eSwgMC4wLCAxLjApO1xcbiAgICB2VGV4dHVyZUNvb3JkID0gYVRleHR1cmVDb29yZDtcXG5cXG4gICAgdkJsdXJUZXhDb29yZHNbIDBdID0gYVRleHR1cmVDb29yZCArIHZlYzIoMC4wLCAtMC4wMTIgKiBzdHJlbmd0aCk7XFxuICAgIHZCbHVyVGV4Q29vcmRzWyAxXSA9IGFUZXh0dXJlQ29vcmQgKyB2ZWMyKDAuMCwgLTAuMDA4ICogc3RyZW5ndGgpO1xcbiAgICB2Qmx1clRleENvb3Jkc1sgMl0gPSBhVGV4dHVyZUNvb3JkICsgdmVjMigwLjAsIC0wLjAwNCAqIHN0cmVuZ3RoKTtcXG4gICAgdkJsdXJUZXhDb29yZHNbIDNdID0gYVRleHR1cmVDb29yZCArIHZlYzIoMC4wLCAgMC4wMDQgKiBzdHJlbmd0aCk7XFxuICAgIHZCbHVyVGV4Q29vcmRzWyA0XSA9IGFUZXh0dXJlQ29vcmQgKyB2ZWMyKDAuMCwgIDAuMDA4ICogc3RyZW5ndGgpO1xcbiAgICB2Qmx1clRleENvb3Jkc1sgNV0gPSBhVGV4dHVyZUNvb3JkICsgdmVjMigwLjAsICAwLjAxMiAqIHN0cmVuZ3RoKTtcXG5cXG4gICB2Q29sb3IgPSB2ZWM0KGFDb2xvci5yZ2IgKiBhQ29sb3IuYSwgYUNvbG9yLmEpO1xcbn1cXG5cIixcbiAgICAgICAgLy8gZnJhZ21lbnQgc2hhZGVyXG4gICAgICAgIFwicHJlY2lzaW9uIGxvd3AgZmxvYXQ7XFxuXFxudmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7XFxudmFyeWluZyB2ZWMyIHZCbHVyVGV4Q29vcmRzWzZdO1xcbnZhcnlpbmcgdmVjNCB2Q29sb3I7XFxuXFxudW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXI7XFxuXFxudm9pZCBtYWluKHZvaWQpXFxue1xcbiAgICBnbF9GcmFnQ29sb3IgPSB2ZWM0KDAuMCk7XFxuXFxuICAgIGdsX0ZyYWdDb2xvciArPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZCbHVyVGV4Q29vcmRzWyAwXSkqMC4wMDQ0MzE4NDg0MTE5MzgzNDE7XFxuICAgIGdsX0ZyYWdDb2xvciArPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZCbHVyVGV4Q29vcmRzWyAxXSkqMC4wNTM5OTA5NjY1MTMxODk4NTtcXG4gICAgZ2xfRnJhZ0NvbG9yICs9IHRleHR1cmUyRCh1U2FtcGxlciwgdkJsdXJUZXhDb29yZHNbIDJdKSowLjI0MTk3MDcyNDUxOTE0NTQ7XFxuICAgIGdsX0ZyYWdDb2xvciArPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZUZXh0dXJlQ29vcmQgICAgICkqMC4zOTg5NDIyODA0MDE0MzI3O1xcbiAgICBnbF9GcmFnQ29sb3IgKz0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2Qmx1clRleENvb3Jkc1sgM10pKjAuMjQxOTcwNzI0NTE5MTQ1NDtcXG4gICAgZ2xfRnJhZ0NvbG9yICs9IHRleHR1cmUyRCh1U2FtcGxlciwgdkJsdXJUZXhDb29yZHNbIDRdKSowLjA1Mzk5MDk2NjUxMzE4OTg1O1xcbiAgICBnbF9GcmFnQ29sb3IgKz0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2Qmx1clRleENvb3Jkc1sgNV0pKjAuMDA0NDMxODQ4NDExOTM4MzQxO1xcbn1cXG5cIixcbiAgICAgICAgLy8gc2V0IHRoZSB1bmlmb3Jtc1xuICAgICAgICB7XG4gICAgICAgICAgICBzdHJlbmd0aDogeyB0eXBlOiAnMWYnLCB2YWx1ZTogMSB9XG4gICAgICAgIH1cbiAgICApO1xuXG4gICAgdGhpcy5wYXNzZXMgPSAxO1xuICAgIHRoaXMuc3RyZW5ndGggPSA0O1xufVxuXG5CbHVyWUZpbHRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuQWJzdHJhY3RGaWx0ZXIucHJvdG90eXBlKTtcbkJsdXJZRmlsdGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IEJsdXJZRmlsdGVyO1xubW9kdWxlLmV4cG9ydHMgPSBCbHVyWUZpbHRlcjtcblxuQmx1cllGaWx0ZXIucHJvdG90eXBlLmFwcGx5RmlsdGVyID0gZnVuY3Rpb24gKHJlbmRlcmVyLCBpbnB1dCwgb3V0cHV0LCBjbGVhcilcbntcbiAgICB2YXIgc2hhZGVyID0gdGhpcy5nZXRTaGFkZXIocmVuZGVyZXIpO1xuXG4gICAgdGhpcy51bmlmb3Jtcy5zdHJlbmd0aC52YWx1ZSA9IE1hdGguYWJzKHRoaXMuc3RyZW5ndGgpIC8gNCAvIHRoaXMucGFzc2VzICogKGlucHV0LmZyYW1lLmhlaWdodCAvIGlucHV0LnNpemUuaGVpZ2h0KTtcblxuICAgIGlmKHRoaXMucGFzc2VzID09PSAxKVxuICAgIHtcbiAgICAgICAgcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5hcHBseUZpbHRlcihzaGFkZXIsIGlucHV0LCBvdXRwdXQsIGNsZWFyKTtcbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgdmFyIHJlbmRlclRhcmdldCA9IHJlbmRlcmVyLmZpbHRlck1hbmFnZXIuZ2V0UmVuZGVyVGFyZ2V0KHRydWUpO1xuICAgICAgICB2YXIgZmxpcCA9IGlucHV0O1xuICAgICAgICB2YXIgZmxvcCA9IHJlbmRlclRhcmdldDtcblxuICAgICAgICBmb3IodmFyIGkgPSAwOyBpIDwgdGhpcy5wYXNzZXMtMTsgaSsrKVxuICAgICAgICB7XG4gICAgICAgICAgICByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLmFwcGx5RmlsdGVyKHNoYWRlciwgZmxpcCwgZmxvcCwgdHJ1ZSk7XG5cbiAgICAgICAgICAgdmFyIHRlbXAgPSBmbG9wO1xuICAgICAgICAgICBmbG9wID0gZmxpcDtcbiAgICAgICAgICAgZmxpcCA9IHRlbXA7XG4gICAgICAgIH1cblxuICAgICAgICByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLmFwcGx5RmlsdGVyKHNoYWRlciwgZmxpcCwgb3V0cHV0LCBjbGVhcik7XG5cbiAgICAgICAgcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5yZXR1cm5SZW5kZXJUYXJnZXQocmVuZGVyVGFyZ2V0KTtcbiAgICB9XG59O1xuXG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKEJsdXJZRmlsdGVyLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIHN0cmVuZ3RoIG9mIGJvdGggdGhlIGJsdXIuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5CbHVyWUZpbHRlciNcbiAgICAgKiBAZGVmYXVsdCAyXG4gICAgICovXG4gICAgYmx1cjoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiAgdGhpcy5zdHJlbmd0aDtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMucGFkZGluZyA9IE1hdGguYWJzKHZhbHVlKSAqIDAuNTtcbiAgICAgICAgICAgIHRoaXMuc3RyZW5ndGggPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi8uLi9jb3JlJyk7XG4vLyBAc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9zdWJzdGFjay9icmZzL2lzc3Vlcy8yNVxuXG5cbi8qKlxuICogQSBTbWFydCBCbHVyIEZpbHRlci5cbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQWJzdHJhY3RGaWx0ZXJcbiAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnNcbiAqL1xuZnVuY3Rpb24gU21hcnRCbHVyRmlsdGVyKClcbntcbiAgICBjb3JlLkFic3RyYWN0RmlsdGVyLmNhbGwodGhpcyxcbiAgICAgICAgLy8gdmVydGV4IHNoYWRlclxuICAgICAgICBudWxsLFxuICAgICAgICAvLyBmcmFnbWVudCBzaGFkZXJcbiAgICAgICAgXCJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcXG5cXG52YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDtcXG5cXG51bmlmb3JtIHNhbXBsZXIyRCB1U2FtcGxlcjtcXG51bmlmb3JtIHZlYzIgZGVsdGE7XFxuXFxuZmxvYXQgcmFuZG9tKHZlYzMgc2NhbGUsIGZsb2F0IHNlZWQpXFxue1xcbiAgICByZXR1cm4gZnJhY3Qoc2luKGRvdChnbF9GcmFnQ29vcmQueHl6ICsgc2VlZCwgc2NhbGUpKSAqIDQzNzU4LjU0NTMgKyBzZWVkKTtcXG59XFxuXFxudm9pZCBtYWluKHZvaWQpXFxue1xcbiAgICB2ZWM0IGNvbG9yID0gdmVjNCgwLjApO1xcbiAgICBmbG9hdCB0b3RhbCA9IDAuMDtcXG5cXG4gICAgZmxvYXQgb2Zmc2V0ID0gcmFuZG9tKHZlYzMoMTIuOTg5OCwgNzguMjMzLCAxNTEuNzE4MiksIDAuMCk7XFxuXFxuICAgIGZvciAoZmxvYXQgdCA9IC0zMC4wOyB0IDw9IDMwLjA7IHQrKylcXG4gICAge1xcbiAgICAgICAgZmxvYXQgcGVyY2VudCA9ICh0ICsgb2Zmc2V0IC0gMC41KSAvIDMwLjA7XFxuICAgICAgICBmbG9hdCB3ZWlnaHQgPSAxLjAgLSBhYnMocGVyY2VudCk7XFxuICAgICAgICB2ZWM0IHNhbXBsZSA9IHRleHR1cmUyRCh1U2FtcGxlciwgdlRleHR1cmVDb29yZCArIGRlbHRhICogcGVyY2VudCk7XFxuICAgICAgICBzYW1wbGUucmdiICo9IHNhbXBsZS5hO1xcbiAgICAgICAgY29sb3IgKz0gc2FtcGxlICogd2VpZ2h0O1xcbiAgICAgICAgdG90YWwgKz0gd2VpZ2h0O1xcbiAgICB9XFxuXFxuICAgIGdsX0ZyYWdDb2xvciA9IGNvbG9yIC8gdG90YWw7XFxuICAgIGdsX0ZyYWdDb2xvci5yZ2IgLz0gZ2xfRnJhZ0NvbG9yLmEgKyAwLjAwMDAxO1xcbn1cXG5cIixcbiAgICAgICAgLy8gdW5pZm9ybXNcbiAgICAgICAge1xuICAgICAgICAgIGRlbHRhOiB7IHR5cGU6ICd2MicsIHZhbHVlOiB7IHg6IDAuMSwgeTogMC4wIH0gfVxuICAgICAgICB9XG4gICAgKTtcbn1cblxuU21hcnRCbHVyRmlsdGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoY29yZS5BYnN0cmFjdEZpbHRlci5wcm90b3R5cGUpO1xuU21hcnRCbHVyRmlsdGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFNtYXJ0Qmx1ckZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gU21hcnRCbHVyRmlsdGVyO1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi8uLi9jb3JlJyk7XG4vLyBAc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9zdWJzdGFjay9icmZzL2lzc3Vlcy8yNVxuXG5cbi8qKlxuICogVGhlIENvbG9yTWF0cml4RmlsdGVyIGNsYXNzIGxldHMgeW91IGFwcGx5IGEgNXg0IG1hdHJpeCB0cmFuc2Zvcm1hdGlvbiBvbiB0aGUgUkdCQVxuICogY29sb3IgYW5kIGFscGhhIHZhbHVlcyBvZiBldmVyeSBwaXhlbCBvbiB5b3VyIGRpc3BsYXlPYmplY3QgdG8gcHJvZHVjZSBhIHJlc3VsdFxuICogd2l0aCBhIG5ldyBzZXQgb2YgUkdCQSBjb2xvciBhbmQgYWxwaGEgdmFsdWVzLiBJdCdzIHByZXR0eSBwb3dlcmZ1bCFcbiAqXG4gKiBgYGBqc1xuICogIHZhciBjb2xvck1hdHJpeCA9IG5ldyBQSVhJLkNvbG9yTWF0cml4RmlsdGVyKCk7XG4gKiAgY29udGFpbmVyLmZpbHRlcnMgPSBbY29sb3JNYXRyaXhdO1xuICogIGNvbG9yTWF0cml4LmNvbnRyYXN0KDIpO1xuICogYGBgXG4gKiBAYXV0aG9yIENsw6ltZW50IENoZW5lYmF1bHQgPGNsZW1lbnRAZ29vZGJveWRpZ2l0YWwuY29tPlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLkFic3RyYWN0RmlsdGVyXG4gKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzXG4gKi9cbmZ1bmN0aW9uIENvbG9yTWF0cml4RmlsdGVyKClcbntcbiAgICBjb3JlLkFic3RyYWN0RmlsdGVyLmNhbGwodGhpcyxcbiAgICAgICAgLy8gdmVydGV4IHNoYWRlclxuICAgICAgICBudWxsLFxuICAgICAgICAvLyBmcmFnbWVudCBzaGFkZXJcbiAgICAgICAgXCJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcXG5cXG52YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDtcXG51bmlmb3JtIHNhbXBsZXIyRCB1U2FtcGxlcjtcXG51bmlmb3JtIGZsb2F0IG1bMjVdO1xcblxcbnZvaWQgbWFpbih2b2lkKVxcbntcXG5cXG4gICAgdmVjNCBjID0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2VGV4dHVyZUNvb3JkKTtcXG5cXG4gICAgZ2xfRnJhZ0NvbG9yLnIgPSAobVswXSAqIGMucik7XFxuICAgICAgICBnbF9GcmFnQ29sb3IuciArPSAobVsxXSAqIGMuZyk7XFxuICAgICAgICBnbF9GcmFnQ29sb3IuciArPSAobVsyXSAqIGMuYik7XFxuICAgICAgICBnbF9GcmFnQ29sb3IuciArPSAobVszXSAqIGMuYSk7XFxuICAgICAgICBnbF9GcmFnQ29sb3IuciArPSBtWzRdO1xcblxcbiAgICBnbF9GcmFnQ29sb3IuZyA9IChtWzVdICogYy5yKTtcXG4gICAgICAgIGdsX0ZyYWdDb2xvci5nICs9IChtWzZdICogYy5nKTtcXG4gICAgICAgIGdsX0ZyYWdDb2xvci5nICs9IChtWzddICogYy5iKTtcXG4gICAgICAgIGdsX0ZyYWdDb2xvci5nICs9IChtWzhdICogYy5hKTtcXG4gICAgICAgIGdsX0ZyYWdDb2xvci5nICs9IG1bOV07XFxuXFxuICAgICBnbF9GcmFnQ29sb3IuYiA9IChtWzEwXSAqIGMucik7XFxuICAgICAgICBnbF9GcmFnQ29sb3IuYiArPSAobVsxMV0gKiBjLmcpO1xcbiAgICAgICAgZ2xfRnJhZ0NvbG9yLmIgKz0gKG1bMTJdICogYy5iKTtcXG4gICAgICAgIGdsX0ZyYWdDb2xvci5iICs9IChtWzEzXSAqIGMuYSk7XFxuICAgICAgICBnbF9GcmFnQ29sb3IuYiArPSBtWzE0XTtcXG5cXG4gICAgIGdsX0ZyYWdDb2xvci5hID0gKG1bMTVdICogYy5yKTtcXG4gICAgICAgIGdsX0ZyYWdDb2xvci5hICs9IChtWzE2XSAqIGMuZyk7XFxuICAgICAgICBnbF9GcmFnQ29sb3IuYSArPSAobVsxN10gKiBjLmIpO1xcbiAgICAgICAgZ2xfRnJhZ0NvbG9yLmEgKz0gKG1bMThdICogYy5hKTtcXG4gICAgICAgIGdsX0ZyYWdDb2xvci5hICs9IG1bMTldO1xcblxcbn1cXG5cIixcbiAgICAgICAgLy8gY3VzdG9tIHVuaWZvcm1zXG4gICAgICAgIHtcbiAgICAgICAgICAgIG06IHtcbiAgICAgICAgICAgICAgICB0eXBlOiAnMWZ2JywgdmFsdWU6IFtcbiAgICAgICAgICAgICAgICAgICAgMSwgMCwgMCwgMCwgMCxcbiAgICAgICAgICAgICAgICAgICAgMCwgMSwgMCwgMCwgMCxcbiAgICAgICAgICAgICAgICAgICAgMCwgMCwgMSwgMCwgMCxcbiAgICAgICAgICAgICAgICAgICAgMCwgMCwgMCwgMSwgMFxuICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICk7XG59XG5cbkNvbG9yTWF0cml4RmlsdGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoY29yZS5BYnN0cmFjdEZpbHRlci5wcm90b3R5cGUpO1xuQ29sb3JNYXRyaXhGaWx0ZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gQ29sb3JNYXRyaXhGaWx0ZXI7XG5tb2R1bGUuZXhwb3J0cyA9IENvbG9yTWF0cml4RmlsdGVyO1xuXG5cbi8qKlxuICogVHJhbnNmb3JtcyBjdXJyZW50IG1hdHJpeCBhbmQgc2V0IHRoZSBuZXcgb25lXG4gKlxuICogQHBhcmFtIG1hdHJpeCB7bnVtYmVyW119IChtYXQgNXg0KVxuICogQHBhcmFtIG11bHRpcGx5IHtib29sZWFufSBpZiB0cnVlLCBjdXJyZW50IG1hdHJpeCBhbmQgbWF0cml4IGFyZSBtdWx0aXBsaWVkLiBJZiBmYWxzZSwganVzdCBzZXQgdGhlIGN1cnJlbnQgbWF0cml4IHdpdGggQHBhcmFtIG1hdHJpeFxuICovXG5Db2xvck1hdHJpeEZpbHRlci5wcm90b3R5cGUuX2xvYWRNYXRyaXggPSBmdW5jdGlvbiAobWF0cml4LCBtdWx0aXBseSlcbntcbiAgICBtdWx0aXBseSA9ICEhbXVsdGlwbHk7XG5cbiAgICB2YXIgbmV3TWF0cml4ID0gbWF0cml4O1xuXG4gICAgaWYgKG11bHRpcGx5KSB7XG4gICAgICAgIHRoaXMuX211bHRpcGx5KG5ld01hdHJpeCwgdGhpcy51bmlmb3Jtcy5tLnZhbHVlLCBtYXRyaXgpO1xuICAgICAgICBuZXdNYXRyaXggPSB0aGlzLl9jb2xvck1hdHJpeChuZXdNYXRyaXgpO1xuICAgIH1cblxuICAgIC8vIHNldCB0aGUgbmV3IG1hdHJpeFxuICAgIHRoaXMudW5pZm9ybXMubS52YWx1ZSA9IG5ld01hdHJpeDtcbn07XG5cbi8qKlxuICogTXVsdGlwbGllcyB0d28gbWF0NSdzXG4gKlxuICogQHBhcmFtIG91dCB7bnVtYmVyW119IChtYXQgNXg0KSB0aGUgcmVjZWl2aW5nIG1hdHJpeFxuICogQHBhcmFtIGEge251bWJlcltdfSAobWF0IDV4NCkgdGhlIGZpcnN0IG9wZXJhbmRcbiAqIEBwYXJhbSBiIHtudW1iZXJbXX0gKG1hdCA1eDQpIHRoZSBzZWNvbmQgb3BlcmFuZFxuICogQHJldHVybnMgb3V0IHtudW1iZXJbXX0gKG1hdCA1eDQpXG4gKi9cbkNvbG9yTWF0cml4RmlsdGVyLnByb3RvdHlwZS5fbXVsdGlwbHkgPSBmdW5jdGlvbiAob3V0LCBhLCBiKVxue1xuXG4gICAgLy8gUmVkIENoYW5uZWxcbiAgICBvdXRbMF0gPSAoYVswXSAqIGJbMF0pICsgKGFbMV0gKiBiWzVdKSArIChhWzJdICogYlsxMF0pICsgKGFbM10gKiBiWzE1XSk7XG4gICAgb3V0WzFdID0gKGFbMF0gKiBiWzFdKSArIChhWzFdICogYls2XSkgKyAoYVsyXSAqIGJbMTFdKSArIChhWzNdICogYlsxNl0pO1xuICAgIG91dFsyXSA9IChhWzBdICogYlsyXSkgKyAoYVsxXSAqIGJbN10pICsgKGFbMl0gKiBiWzEyXSkgKyAoYVszXSAqIGJbMTddKTtcbiAgICBvdXRbM10gPSAoYVswXSAqIGJbM10pICsgKGFbMV0gKiBiWzhdKSArIChhWzJdICogYlsxM10pICsgKGFbM10gKiBiWzE4XSk7XG4gICAgb3V0WzRdID0gKGFbMF0gKiBiWzRdKSArIChhWzFdICogYls5XSkgKyAoYVsyXSAqIGJbMTRdKSArIChhWzNdICogYlsxOV0pO1xuXG4gICAgLy8gR3JlZW4gQ2hhbm5lbFxuICAgIG91dFs1XSA9IChhWzVdICogYlswXSkgKyAoYVs2XSAqIGJbNV0pICsgKGFbN10gKiBiWzEwXSkgKyAoYVs4XSAqIGJbMTVdKTtcbiAgICBvdXRbNl0gPSAoYVs1XSAqIGJbMV0pICsgKGFbNl0gKiBiWzZdKSArIChhWzddICogYlsxMV0pICsgKGFbOF0gKiBiWzE2XSk7XG4gICAgb3V0WzddID0gKGFbNV0gKiBiWzJdKSArIChhWzZdICogYls3XSkgKyAoYVs3XSAqIGJbMTJdKSArIChhWzhdICogYlsxN10pO1xuICAgIG91dFs4XSA9IChhWzVdICogYlszXSkgKyAoYVs2XSAqIGJbOF0pICsgKGFbN10gKiBiWzEzXSkgKyAoYVs4XSAqIGJbMThdKTtcbiAgICBvdXRbOV0gPSAoYVs1XSAqIGJbNF0pICsgKGFbNl0gKiBiWzldKSArIChhWzddICogYlsxNF0pICsgKGFbOF0gKiBiWzE5XSk7XG5cbiAgICAvLyBCbHVlIENoYW5uZWxcbiAgICBvdXRbMTBdID0gKGFbMTBdICogYlswXSkgKyAoYVsxMV0gKiBiWzVdKSArIChhWzEyXSAqIGJbMTBdKSArIChhWzEzXSAqIGJbMTVdKTtcbiAgICBvdXRbMTFdID0gKGFbMTBdICogYlsxXSkgKyAoYVsxMV0gKiBiWzZdKSArIChhWzEyXSAqIGJbMTFdKSArIChhWzEzXSAqIGJbMTZdKTtcbiAgICBvdXRbMTJdID0gKGFbMTBdICogYlsyXSkgKyAoYVsxMV0gKiBiWzddKSArIChhWzEyXSAqIGJbMTJdKSArIChhWzEzXSAqIGJbMTddKTtcbiAgICBvdXRbMTNdID0gKGFbMTBdICogYlszXSkgKyAoYVsxMV0gKiBiWzhdKSArIChhWzEyXSAqIGJbMTNdKSArIChhWzEzXSAqIGJbMThdKTtcbiAgICBvdXRbMTRdID0gKGFbMTBdICogYls0XSkgKyAoYVsxMV0gKiBiWzldKSArIChhWzEyXSAqIGJbMTRdKSArIChhWzEzXSAqIGJbMTldKTtcblxuICAgIC8vIEFscGhhIENoYW5uZWxcbiAgICBvdXRbMTVdID0gKGFbMTVdICogYlswXSkgKyAoYVsxNl0gKiBiWzVdKSArIChhWzE3XSAqIGJbMTBdKSArIChhWzE4XSAqIGJbMTVdKTtcbiAgICBvdXRbMTZdID0gKGFbMTVdICogYlsxXSkgKyAoYVsxNl0gKiBiWzZdKSArIChhWzE3XSAqIGJbMTFdKSArIChhWzE4XSAqIGJbMTZdKTtcbiAgICBvdXRbMTddID0gKGFbMTVdICogYlsyXSkgKyAoYVsxNl0gKiBiWzddKSArIChhWzE3XSAqIGJbMTJdKSArIChhWzE4XSAqIGJbMTddKTtcbiAgICBvdXRbMThdID0gKGFbMTVdICogYlszXSkgKyAoYVsxNl0gKiBiWzhdKSArIChhWzE3XSAqIGJbMTNdKSArIChhWzE4XSAqIGJbMThdKTtcbiAgICBvdXRbMTldID0gKGFbMTVdICogYls0XSkgKyAoYVsxNl0gKiBiWzldKSArIChhWzE3XSAqIGJbMTRdKSArIChhWzE4XSAqIGJbMTldKTtcblxuICAgIHJldHVybiBvdXQ7XG59O1xuXG4vKipcbiAqIENyZWF0ZSBhIEZsb2F0MzIgQXJyYXkgYW5kIG5vcm1hbGl6ZSB0aGUgb2Zmc2V0IGNvbXBvbmVudCB0byAwLTFcbiAqXG4gKiBAcGFyYW0gbWF0cml4IHtudW1iZXJbXX0gKG1hdCA1eDQpXG4gKiBAcmV0dXJuIG0ge251bWJlcltdfSAobWF0IDV4NCkgd2l0aCBhbGwgdmFsdWVzIGJldHdlZW4gMC0xXG4gKi9cbkNvbG9yTWF0cml4RmlsdGVyLnByb3RvdHlwZS5fY29sb3JNYXRyaXggPSBmdW5jdGlvbiAobWF0cml4KVxue1xuICAgIC8vIENyZWF0ZSBhIEZsb2F0MzIgQXJyYXkgYW5kIG5vcm1hbGl6ZSB0aGUgb2Zmc2V0IGNvbXBvbmVudCB0byAwLTFcbiAgICB2YXIgbSA9IG5ldyBGbG9hdDMyQXJyYXkobWF0cml4KTtcbiAgICBtWzRdIC89IDI1NTtcbiAgICBtWzldIC89IDI1NTtcbiAgICBtWzE0XSAvPSAyNTU7XG4gICAgbVsxOV0gLz0gMjU1O1xuXG4gICAgcmV0dXJuIG07XG59O1xuXG4vKipcbiAqIEFkanVzdHMgYnJpZ2h0bmVzc1xuICpcbiAqIEBwYXJhbSBiIHtudW1iZXJ9IHZhbHVlIG9mIHRoZSBicmlndGhuZXNzICgwIGlzIGJsYWNrKVxuICogQHBhcmFtIG11bHRpcGx5IHtib29sZWFufSByZWZlciB0byAuX2xvYWRNYXRyaXgoKSBtZXRob2RcbiAqL1xuQ29sb3JNYXRyaXhGaWx0ZXIucHJvdG90eXBlLmJyaWdodG5lc3MgPSBmdW5jdGlvbiAoYiwgbXVsdGlwbHkpXG57XG4gICAgdmFyIG1hdHJpeCA9IFtcbiAgICAgICAgYiwgMCwgMCwgMCwgMCxcbiAgICAgICAgMCwgYiwgMCwgMCwgMCxcbiAgICAgICAgMCwgMCwgYiwgMCwgMCxcbiAgICAgICAgMCwgMCwgMCwgMSwgMFxuICAgIF07XG5cbiAgICB0aGlzLl9sb2FkTWF0cml4KG1hdHJpeCwgbXVsdGlwbHkpO1xufTtcblxuLyoqXG4gKiBTZXQgdGhlIG1hdHJpY2VzIGluIGdyZXkgc2NhbGVzXG4gKlxuICogQHBhcmFtIHNjYWxlIHtudW1iZXJ9IHZhbHVlIG9mIHRoZSBncmV5ICgwIGlzIGJsYWNrKVxuICogQHBhcmFtIG11bHRpcGx5IHtib29sZWFufSByZWZlciB0byAuX2xvYWRNYXRyaXgoKSBtZXRob2RcbiAqL1xuQ29sb3JNYXRyaXhGaWx0ZXIucHJvdG90eXBlLmdyZXlzY2FsZSA9IGZ1bmN0aW9uIChzY2FsZSwgbXVsdGlwbHkpXG57XG4gICAgdmFyIG1hdHJpeCA9IFtcbiAgICAgICAgc2NhbGUsIHNjYWxlLCBzY2FsZSwgMCwgMCxcbiAgICAgICAgc2NhbGUsIHNjYWxlLCBzY2FsZSwgMCwgMCxcbiAgICAgICAgc2NhbGUsIHNjYWxlLCBzY2FsZSwgMCwgMCxcbiAgICAgICAgMCwgMCwgMCwgMSwgMFxuICAgIF07XG5cbiAgICB0aGlzLl9sb2FkTWF0cml4KG1hdHJpeCwgbXVsdGlwbHkpO1xufTtcbi8vQW1lcmljYW5pemVkIGFsaWFzXG5Db2xvck1hdHJpeEZpbHRlci5wcm90b3R5cGUuZ3JheXNjYWxlID0gQ29sb3JNYXRyaXhGaWx0ZXIucHJvdG90eXBlLmdyZXlzY2FsZTtcblxuLyoqXG4gKiBTZXQgdGhlIGJsYWNrIGFuZCB3aGl0ZSBtYXRyaWNlXG4gKiBNdWx0aXBseSB0aGUgY3VycmVudCBtYXRyaXhcbiAqXG4gKiBAcGFyYW0gbXVsdGlwbHkge2Jvb2xlYW59IHJlZmVyIHRvIC5fbG9hZE1hdHJpeCgpIG1ldGhvZFxuICovXG5Db2xvck1hdHJpeEZpbHRlci5wcm90b3R5cGUuYmxhY2tBbmRXaGl0ZSA9IGZ1bmN0aW9uIChtdWx0aXBseSlcbntcbiAgICB2YXIgbWF0cml4ID0gW1xuICAgICAgICAwLjMsIDAuNiwgMC4xLCAwLCAwLFxuICAgICAgICAwLjMsIDAuNiwgMC4xLCAwLCAwLFxuICAgICAgICAwLjMsIDAuNiwgMC4xLCAwLCAwLFxuICAgICAgICAwLCAwLCAwLCAxLCAwXG4gICAgXTtcblxuICAgIHRoaXMuX2xvYWRNYXRyaXgobWF0cml4LCBtdWx0aXBseSk7XG59O1xuXG4vKipcbiAqIFNldCB0aGUgaHVlIHByb3BlcnR5IG9mIHRoZSBjb2xvclxuICpcbiAqIEBwYXJhbSByb3RhdGlvbiB7bnVtYmVyfSBpbiBkZWdyZWVzXG4gKiBAcGFyYW0gbXVsdGlwbHkge2Jvb2xlYW59IHJlZmVyIHRvIC5fbG9hZE1hdHJpeCgpIG1ldGhvZFxuICovXG5Db2xvck1hdHJpeEZpbHRlci5wcm90b3R5cGUuaHVlID0gZnVuY3Rpb24gKHJvdGF0aW9uLCBtdWx0aXBseSlcbntcbiAgICByb3RhdGlvbiA9IChyb3RhdGlvbiB8fCAwKSAvIDE4MCAqIE1hdGguUEk7XG4gICAgdmFyIGNvcyA9IE1hdGguY29zKHJvdGF0aW9uKSxcbiAgICAgICAgc2luID0gTWF0aC5zaW4ocm90YXRpb24pO1xuXG4gICAgLy8gbHVtaW5hbmNlUmVkLCBsdW1pbmFuY2VHcmVlbiwgbHVtaW5hbmNlQmx1ZVxuICAgIHZhciBsdW1SID0gMC4yMTMsIC8vIG9yIDAuMzA4NlxuICAgICAgICBsdW1HID0gMC43MTUsIC8vIG9yIDAuNjA5NFxuICAgICAgICBsdW1CID0gMC4wNzI7IC8vIG9yIDAuMDgyMFxuXG4gICAgdmFyIG1hdHJpeCA9IFtcbiAgICAgICAgbHVtUiArIGNvcyAqICgxIC0gbHVtUikgKyBzaW4gKiAoLWx1bVIpLCBsdW1HICsgY29zICogKC1sdW1HKSArIHNpbiAqICgtbHVtRyksIGx1bUIgKyBjb3MgKiAoLWx1bUIpICsgc2luICogKDEgLSBsdW1CKSwgMCwgMCxcbiAgICAgICAgbHVtUiArIGNvcyAqICgtbHVtUikgKyBzaW4gKiAoMC4xNDMpLCBsdW1HICsgY29zICogKDEgLSBsdW1HKSArIHNpbiAqICgwLjE0MCksIGx1bUIgKyBjb3MgKiAoLWx1bUIpICsgc2luICogKC0wLjI4MyksIDAsIDAsXG4gICAgICAgIGx1bVIgKyBjb3MgKiAoLWx1bVIpICsgc2luICogKC0oMSAtIGx1bVIpKSwgbHVtRyArIGNvcyAqICgtbHVtRykgKyBzaW4gKiAobHVtRyksIGx1bUIgKyBjb3MgKiAoMSAtIGx1bUIpICsgc2luICogKGx1bUIpLCAwLCAwLFxuICAgICAgICAwLCAwLCAwLCAxLCAwXG4gICAgXTtcblxuICAgIHRoaXMuX2xvYWRNYXRyaXgobWF0cml4LCBtdWx0aXBseSk7XG59O1xuXG5cbi8qKlxuICogU2V0IHRoZSBjb250cmFzdCBtYXRyaXgsIGluY3JlYXNlIHRoZSBzZXBhcmF0aW9uIGJldHdlZW4gZGFyayBhbmQgYnJpZ2h0XG4gKiBJbmNyZWFzZSBjb250cmFzdCA6IHNoYWRvd3MgZGFya2VyIGFuZCBoaWdobGlnaHRzIGJyaWdodGVyXG4gKiBEZWNyZWFzZSBjb250cmFzdCA6IGJyaW5nIHRoZSBzaGFkb3dzIHVwIGFuZCB0aGUgaGlnaGxpZ2h0cyBkb3duXG4gKlxuICogQHBhcmFtIGFtb3VudCB7bnVtYmVyfSB2YWx1ZSBvZiB0aGUgY29udHJhc3RcbiAqIEBwYXJhbSBtdWx0aXBseSB7Ym9vbGVhbn0gcmVmZXIgdG8gLl9sb2FkTWF0cml4KCkgbWV0aG9kXG4gKi9cbkNvbG9yTWF0cml4RmlsdGVyLnByb3RvdHlwZS5jb250cmFzdCA9IGZ1bmN0aW9uIChhbW91bnQsIG11bHRpcGx5KVxue1xuICAgIHZhciB2ID0gKGFtb3VudCB8fCAwKSArIDE7XG4gICAgdmFyIG8gPSAtMTI4ICogKHYgLSAxKTtcblxuICAgIHZhciBtYXRyaXggPSBbXG4gICAgICAgIHYsIDAsIDAsIDAsIG8sXG4gICAgICAgIDAsIHYsIDAsIDAsIG8sXG4gICAgICAgIDAsIDAsIHYsIDAsIG8sXG4gICAgICAgIDAsIDAsIDAsIDEsIDBcbiAgICBdO1xuXG4gICAgdGhpcy5fbG9hZE1hdHJpeChtYXRyaXgsIG11bHRpcGx5KTtcbn07XG5cbi8qKlxuICogU2V0IHRoZSBzYXR1cmF0aW9uIG1hdHJpeCwgaW5jcmVhc2UgdGhlIHNlcGFyYXRpb24gYmV0d2VlbiBjb2xvcnNcbiAqIEluY3JlYXNlIHNhdHVyYXRpb24gOiBpbmNyZWFzZSBjb250cmFzdCwgYnJpZ2h0bmVzcywgYW5kIHNoYXJwbmVzc1xuICpcbiAqIEBwYXJhbSBhbW91bnQge251bWJlcn1cbiAqIEBwYXJhbSBtdWx0aXBseSB7Ym9vbGVhbn0gcmVmZXIgdG8gLl9sb2FkTWF0cml4KCkgbWV0aG9kXG4gKi9cbkNvbG9yTWF0cml4RmlsdGVyLnByb3RvdHlwZS5zYXR1cmF0ZSA9IGZ1bmN0aW9uIChhbW91bnQsIG11bHRpcGx5KVxue1xuICAgIHZhciB4ID0gKGFtb3VudCB8fCAwKSAqIDIgLyAzICsgMTtcbiAgICB2YXIgeSA9ICgoeCAtIDEpICogLTAuNSk7XG5cbiAgICB2YXIgbWF0cml4ID0gW1xuICAgICAgICB4LCB5LCB5LCAwLCAwLFxuICAgICAgICB5LCB4LCB5LCAwLCAwLFxuICAgICAgICB5LCB5LCB4LCAwLCAwLFxuICAgICAgICAwLCAwLCAwLCAxLCAwXG4gICAgXTtcblxuICAgIHRoaXMuX2xvYWRNYXRyaXgobWF0cml4LCBtdWx0aXBseSk7XG59O1xuXG4vKipcbiAqIERlc2F0dXJhdGUgaW1hZ2UgKHJlbW92ZSBjb2xvcilcbiAqXG4gKiBDYWxsIHRoZSBzYXR1cmF0ZSBmdW5jdGlvblxuICpcbiAqIEBwYXJhbSBtdWx0aXBseSB7Ym9vbGVhbn0gcmVmZXIgdG8gLl9sb2FkTWF0cml4KCkgbWV0aG9kXG4gKi9cbkNvbG9yTWF0cml4RmlsdGVyLnByb3RvdHlwZS5kZXNhdHVyYXRlID0gZnVuY3Rpb24gKG11bHRpcGx5KSAvLyBqc2hpbnQgdW51c2VkOmZhbHNlXG57XG4gICAgdGhpcy5zYXR1cmF0ZSgtMSk7XG59O1xuXG4vKipcbiAqIE5lZ2F0aXZlIGltYWdlIChpbnZlcnNlIG9mIGNsYXNzaWMgcmdiIG1hdHJpeClcbiAqXG4gKiBAcGFyYW0gbXVsdGlwbHkge2Jvb2xlYW59IHJlZmVyIHRvIC5fbG9hZE1hdHJpeCgpIG1ldGhvZFxuICovXG5Db2xvck1hdHJpeEZpbHRlci5wcm90b3R5cGUubmVnYXRpdmUgPSBmdW5jdGlvbiAobXVsdGlwbHkpXG57XG4gICAgdmFyIG1hdHJpeCA9IFtcbiAgICAgICAgMCwgMSwgMSwgMCwgMCxcbiAgICAgICAgMSwgMCwgMSwgMCwgMCxcbiAgICAgICAgMSwgMSwgMCwgMCwgMCxcbiAgICAgICAgMCwgMCwgMCwgMSwgMFxuICAgIF07XG5cbiAgICB0aGlzLl9sb2FkTWF0cml4KG1hdHJpeCwgbXVsdGlwbHkpO1xufTtcblxuLyoqXG4gKiBTZXBpYSBpbWFnZVxuICpcbiAqIEBwYXJhbSBtdWx0aXBseSB7Ym9vbGVhbn0gcmVmZXIgdG8gLl9sb2FkTWF0cml4KCkgbWV0aG9kXG4gKi9cbkNvbG9yTWF0cml4RmlsdGVyLnByb3RvdHlwZS5zZXBpYSA9IGZ1bmN0aW9uIChtdWx0aXBseSlcbntcbiAgICB2YXIgbWF0cml4ID0gW1xuICAgICAgICAwLjM5MywgMC43Njg5OTk5LCAwLjE4ODk5OTk5LCAwLCAwLFxuICAgICAgICAwLjM0OSwgMC42ODU5OTk5LCAwLjE2Nzk5OTk5LCAwLCAwLFxuICAgICAgICAwLjI3MiwgMC41MzM5OTk5LCAwLjEzMDk5OTk5LCAwLCAwLFxuICAgICAgICAwLCAwLCAwLCAxLCAwXG4gICAgXTtcblxuICAgIHRoaXMuX2xvYWRNYXRyaXgobWF0cml4LCBtdWx0aXBseSk7XG59O1xuXG4vKipcbiAqIENvbG9yIG1vdGlvbiBwaWN0dXJlIHByb2Nlc3MgaW52ZW50ZWQgaW4gMTkxNiAodGhhbmtzIERvbWluaWMgU3phYmxld3NraSlcbiAqXG4gKiBAcGFyYW0gbXVsdGlwbHkge2Jvb2xlYW59IHJlZmVyIHRvIC5fbG9hZE1hdHJpeCgpIG1ldGhvZFxuICovXG5Db2xvck1hdHJpeEZpbHRlci5wcm90b3R5cGUudGVjaG5pY29sb3IgPSBmdW5jdGlvbiAobXVsdGlwbHkpXG57XG4gICAgdmFyIG1hdHJpeCA9IFtcbiAgICAgICAgMS45MTI1Mjc3ODkxNDU2MDgzLCAtMC44NTQ1MzQ0OTc2OTUxNjQ1LCAtMC4wOTE1NTUwODQ4Mjc1NTU4NSwgMCwgMTEuNzkzNjAzNDM0Mzc3MzM3LFxuICAgICAgICAtMC4zMDg3ODMzMzg1OTI4MDk3LCAxLjc2NTg5MDg1NTU0NTg0MjgsIC0wLjEwNjAxNzQzMDc0NzIyMjQ1LCAwLCAtNzAuMzUyMDUxNjE0NjEzOTgsXG4gICAgICAgIC0wLjIzMTEwMzM3NzU0ODYxNiwgLTAuNzUwMTg5OTE5NzQ0MDIxMiwgMS44NDc1OTc4MTYxMDgxODksIDAsIDMwLjk1MDk0MDg2OTQ5MTEzOCxcbiAgICAgICAgMCwgMCwgMCwgMSwgMFxuICAgIF07XG5cbiAgICB0aGlzLl9sb2FkTWF0cml4KG1hdHJpeCwgbXVsdGlwbHkpO1xufTtcblxuLyoqXG4gKiBQb2xhcm9pZCBmaWx0ZXJcbiAqXG4gKiBAcGFyYW0gbXVsdGlwbHkge2Jvb2xlYW59IHJlZmVyIHRvIC5fbG9hZE1hdHJpeCgpIG1ldGhvZFxuICovXG5Db2xvck1hdHJpeEZpbHRlci5wcm90b3R5cGUucG9sYXJvaWQgPSBmdW5jdGlvbiAobXVsdGlwbHkpXG57XG4gICAgdmFyIG1hdHJpeCA9IFtcbiAgICAgICAgMS40MzgsIC0wLjA2MiwgLTAuMDYyLCAwLCAwLFxuICAgICAgICAtMC4xMjIsIDEuMzc4LCAtMC4xMjIsIDAsIDAsXG4gICAgICAgIC0wLjAxNiwgLTAuMDE2LCAxLjQ4MywgMCwgMCxcbiAgICAgICAgMCwgMCwgMCwgMSwgMFxuICAgIF07XG5cbiAgICB0aGlzLl9sb2FkTWF0cml4KG1hdHJpeCwgbXVsdGlwbHkpO1xufTtcblxuLyoqXG4gKiBGaWx0ZXIgd2hvIHRyYW5zZm9ybXMgOiBSZWQgLT4gQmx1ZSBhbmQgQmx1ZSAtPiBSZWRcbiAqXG4gKiBAcGFyYW0gbXVsdGlwbHkge2Jvb2xlYW59IHJlZmVyIHRvIC5fbG9hZE1hdHJpeCgpIG1ldGhvZFxuICovXG5Db2xvck1hdHJpeEZpbHRlci5wcm90b3R5cGUudG9CR1IgPSBmdW5jdGlvbiAobXVsdGlwbHkpXG57XG4gICAgdmFyIG1hdHJpeCA9IFtcbiAgICAgICAgMCwgMCwgMSwgMCwgMCxcbiAgICAgICAgMCwgMSwgMCwgMCwgMCxcbiAgICAgICAgMSwgMCwgMCwgMCwgMCxcbiAgICAgICAgMCwgMCwgMCwgMSwgMFxuICAgIF07XG5cbiAgICB0aGlzLl9sb2FkTWF0cml4KG1hdHJpeCwgbXVsdGlwbHkpO1xufTtcblxuLyoqXG4gKiBDb2xvciByZXZlcnNhbCBmaWxtIGludHJvZHVjZWQgYnkgRWFzdG1hbiBLb2RhayBpbiAxOTM1LiAodGhhbmtzIERvbWluaWMgU3phYmxld3NraSlcbiAqXG4gKiBAcGFyYW0gbXVsdGlwbHkge2Jvb2xlYW59IHJlZmVyIHRvIC5fbG9hZE1hdHJpeCgpIG1ldGhvZFxuICovXG5Db2xvck1hdHJpeEZpbHRlci5wcm90b3R5cGUua29kYWNocm9tZSA9IGZ1bmN0aW9uIChtdWx0aXBseSlcbntcbiAgICB2YXIgbWF0cml4ID0gW1xuICAgICAgICAxLjEyODU1ODIzOTY1OTM1MjUsIC0wLjM5NjczODIyODM2MDEzNDgsIC0wLjAzOTkyNTU5MTcyOTIxNzkzLCAwLCA2My43Mjk1ODc2MjE5NjUwMixcbiAgICAgICAgLTAuMTY0MDQzMzk5NjIyNDQ2MTYsIDEuMDgzNTI1MTU2NjI5MTMwNCwgLTAuMDU0OTg4MDUxMTU2MzMxMzIsIDAsIDI0LjczMjQwNzg5NjcwNjIwMyxcbiAgICAgICAgLTAuMTY3ODYwMTA3MDYxNTU3NjMsIC0wLjU2MDM0MTYyNzc2OTUyNDgsIDEuNjAxNDg1MDc2MTk2NDk0MywgMCwgMzUuNjI5ODI4MDc0NjA5NDYsXG4gICAgICAgIDAsIDAsIDAsIDEsIDBcbiAgICBdO1xuXG4gICAgdGhpcy5fbG9hZE1hdHJpeChtYXRyaXgsIG11bHRpcGx5KTtcbn07XG5cbi8qKlxuICogQnJvd24gZGVsaWNpb3VzIGJyb3duaSBmaWx0ZXIgKHRoYW5rcyBEb21pbmljIFN6YWJsZXdza2kpXG4gKlxuICogQHBhcmFtIG11bHRpcGx5IHtib29sZWFufSByZWZlciB0byAuX2xvYWRNYXRyaXgoKSBtZXRob2RcbiAqL1xuQ29sb3JNYXRyaXhGaWx0ZXIucHJvdG90eXBlLmJyb3duaSA9IGZ1bmN0aW9uIChtdWx0aXBseSlcbntcbiAgICB2YXIgbWF0cml4ID0gW1xuICAgICAgICAwLjU5OTcwMjM0OTgxNTk3MTUsIDAuMzQ1NTMyNDMwNDgzOTEyNjMsIC0wLjI3MDgyOTg2NzQ1MzgwNDIsIDAsIDQ3LjQzMTkyODU1NjAwODczLFxuICAgICAgICAtMC4wMzc3MDMyNDk4Mzc3ODMxNTcsIDAuODYwOTU3NzU4Nzk5MjY0MSwgMC4xNTA1OTU1MjM4ODQ1OTkxMywgMCwgLTM2Ljk2ODQxNDk4MzE5MTI3LFxuICAgICAgICAwLjI0MTEzNjM1MTI4MTUzMzM1LCAtMC4wNzQ0MTAzNzkwODQyMjQ5MiwgMC40NDk3MjE4MjA2NDg3NzE1MywgMCwgLTcuNTYyMDc1Mjc3NTkxMjgzLFxuICAgICAgICAwLCAwLCAwLCAxLCAwXG4gICAgXTtcblxuICAgIHRoaXMuX2xvYWRNYXRyaXgobWF0cml4LCBtdWx0aXBseSk7XG59O1xuXG4vKlxuICogVmludGFnZSBmaWx0ZXIgKHRoYW5rcyBEb21pbmljIFN6YWJsZXdza2kpXG4gKlxuICogQHBhcmFtIG11bHRpcGx5IHtib29sZWFufSByZWZlciB0byAuX2xvYWRNYXRyaXgoKSBtZXRob2RcbiAqL1xuQ29sb3JNYXRyaXhGaWx0ZXIucHJvdG90eXBlLnZpbnRhZ2UgPSBmdW5jdGlvbiAobXVsdGlwbHkpXG57XG4gICAgdmFyIG1hdHJpeCA9IFtcbiAgICAgICAgMC42Mjc5MzQ1NjM1NjA1OTk0LCAwLjMyMDIxODM0MjA4MTkzNjcsIC0wLjAzOTY1NDA4MjExMzEyNDUzLCAwLCA5LjY1MTI4NTgzNTI5NDEyMyxcbiAgICAgICAgMC4wMjU3ODM5NzcwNDgwODg2OCwgMC42NDQxMTg4NjQ0Mzc0NzcxLCAwLjAzMjU5MTI3NjE2MTQ5Mjk0LCAwLCA3LjQ2MjgyOTE3NjQ3MDU5MSxcbiAgICAgICAgMC4wNDY2MDU1NTU2NzgyNzE5LCAtMC4wODUxMjMyOTg3MjQ3ODkxLCAwLjUyNDE2NDgwMTg3MDA0NjUsIDAsIDUuMTU5MTkwNTg4MjM1Mjk2LFxuICAgICAgICAwLCAwLCAwLCAxLCAwXG4gICAgXTtcblxuICAgIHRoaXMuX2xvYWRNYXRyaXgobWF0cml4LCBtdWx0aXBseSk7XG59O1xuXG4vKlxuICogV2UgZG9uJ3Qga25vdyBleGFjdGx5IHdoYXQgaXQgZG9lcywga2luZCBvZiBncmFkaWVudCBtYXAsIGJ1dCBmdW5ueSB0byBwbGF5IHdpdGghXG4gKlxuICogQHBhcmFtIGRlc2F0dXJhdGlvbiB7bnVtYmVyfVxuICogQHBhcmFtIHRvbmVkIHtudW1iZXJ9XG4gKiBAcGFyYW0gbGlnaHRDb2xvciB7c3RyaW5nfSAoZXhhbXBsZSA6IFwiMHhGRkU1ODBcIilcbiAqIEBwYXJhbSBkYXJrQ29sb3Ige3N0cmluZ30gIChleGFtcGxlIDogXCIweEZGRTU4MFwiKVxuICpcbiAqIEBwYXJhbSBtdWx0aXBseSB7Ym9vbGVhbn0gcmVmZXIgdG8gLl9sb2FkTWF0cml4KCkgbWV0aG9kXG4gKi9cbkNvbG9yTWF0cml4RmlsdGVyLnByb3RvdHlwZS5jb2xvclRvbmUgPSBmdW5jdGlvbiAoZGVzYXR1cmF0aW9uLCB0b25lZCwgbGlnaHRDb2xvciwgZGFya0NvbG9yLCBtdWx0aXBseSlcbntcbiAgICBkZXNhdHVyYXRpb24gPSBkZXNhdHVyYXRpb24gfHwgMC4yO1xuICAgIHRvbmVkID0gdG9uZWQgfHwgMC4xNTtcbiAgICBsaWdodENvbG9yID0gbGlnaHRDb2xvciB8fCAweEZGRTU4MDtcbiAgICBkYXJrQ29sb3IgPSBkYXJrQ29sb3IgfHwgMHgzMzgwMDA7XG5cbiAgICB2YXIgbFIgPSAoKGxpZ2h0Q29sb3IgPj4gMTYpICYgMHhGRikgLyAyNTU7XG4gICAgdmFyIGxHID0gKChsaWdodENvbG9yID4+IDgpICYgMHhGRikgLyAyNTU7XG4gICAgdmFyIGxCID0gKGxpZ2h0Q29sb3IgJiAweEZGKSAvIDI1NTtcblxuICAgIHZhciBkUiA9ICgoZGFya0NvbG9yID4+IDE2KSAmIDB4RkYpIC8gMjU1O1xuICAgIHZhciBkRyA9ICgoZGFya0NvbG9yID4+IDgpICYgMHhGRikgLyAyNTU7XG4gICAgdmFyIGRCID0gKGRhcmtDb2xvciAmIDB4RkYpIC8gMjU1O1xuXG4gICAgdmFyIG1hdHJpeCA9IFtcbiAgICAgICAgMC4zLCAwLjU5LCAwLjExLCAwLCAwLFxuICAgICAgICBsUiwgbEcsIGxCLCBkZXNhdHVyYXRpb24sIDAsXG4gICAgICAgIGRSLCBkRywgZEIsIHRvbmVkLCAwLFxuICAgICAgICBsUiAtIGRSLCBsRyAtIGRHLCBsQiAtIGRCLCAwLCAwXG4gICAgXTtcblxuICAgIHRoaXMuX2xvYWRNYXRyaXgobWF0cml4LCBtdWx0aXBseSk7XG59O1xuXG4vKlxuICogTmlnaHQgZWZmZWN0XG4gKlxuICogQHBhcmFtIGludGVuc2l0eSB7bnVtYmVyfVxuICogQHBhcmFtIG11bHRpcGx5IHtib29sZWFufSByZWZlciB0byAuX2xvYWRNYXRyaXgoKSBtZXRob2RcbiAqL1xuQ29sb3JNYXRyaXhGaWx0ZXIucHJvdG90eXBlLm5pZ2h0ID0gZnVuY3Rpb24gKGludGVuc2l0eSwgbXVsdGlwbHkpXG57XG4gICAgaW50ZW5zaXR5ID0gaW50ZW5zaXR5IHx8IDAuMTtcbiAgICB2YXIgbWF0cml4ID0gW1xuICAgICAgICBpbnRlbnNpdHkgKiAoIC0yLjApLCAtaW50ZW5zaXR5LCAwLCAwLCAwLFxuICAgICAgICAtaW50ZW5zaXR5LCAwLCBpbnRlbnNpdHksIDAsIDAsXG4gICAgICAgIDAsIGludGVuc2l0eSwgaW50ZW5zaXR5ICogMi4wLCAwLCAwLFxuICAgICAgICAwLCAwLCAwLCAxLCAwXG4gICAgXTtcblxuICAgIHRoaXMuX2xvYWRNYXRyaXgobWF0cml4LCBtdWx0aXBseSk7XG59O1xuXG5cbi8qXG4gKiBQcmVkYXRvciBlZmZlY3RcbiAqXG4gKiBFcmFzZSB0aGUgY3VycmVudCBtYXRyaXggYnkgc2V0dGluZyBhIG5ldyBpbmRlcGVudCBvbmVcbiAqXG4gKiBAcGFyYW0gYW1vdW50IHtudW1iZXJ9IGhvdyBtdWNoIHRoZSBwcmVkYXRvciBmZWVscyBoaXMgZnV0dXJlIHZpY3RpbVxuICogQHBhcmFtIG11bHRpcGx5IHtib29sZWFufSByZWZlciB0byAuX2xvYWRNYXRyaXgoKSBtZXRob2RcbiAqL1xuQ29sb3JNYXRyaXhGaWx0ZXIucHJvdG90eXBlLnByZWRhdG9yID0gZnVuY3Rpb24gKGFtb3VudCwgbXVsdGlwbHkpXG57XG4gICAgdmFyIG1hdHJpeCA9IFtcbiAgICAgICAgMTEuMjI0MTMwNjMwNDkzMTY0ICogYW1vdW50LCAtNC43OTQ0ODY5OTk1MTE3MTkgKiBhbW91bnQsIC0yLjg3NDYxMTg1NDU1MzIyMjcgKiBhbW91bnQsIDAgKiBhbW91bnQsIDAuNDAzNDI0MzgyMjA5Nzc3ODMgKiBhbW91bnQsXG4gICAgICAgIC0zLjYzMzA2OTc1MzY0Njg1MDYgKiBhbW91bnQsIDkuMTkzMTU3MTk2MDQ0OTIyICogYW1vdW50LCAtMi45NTE4MTA4MzY3OTE5OTIgKiBhbW91bnQsIDAgKiBhbW91bnQsIC0xLjMxNjEzNTA0ODg2NjI3MiAqIGFtb3VudCxcbiAgICAgICAgLTMuMjE4NDE5NzkwMjY3OTQ0MyAqIGFtb3VudCwgLTQuMjM3NTAzMDUxNzU3ODEyNSAqIGFtb3VudCwgNy40NzY0NDgwNTkwODIwMzEgKiBhbW91bnQsIDAgKiBhbW91bnQsIDAuODA0NDQ1OTIyMzc0NzI1MyAqIGFtb3VudCxcbiAgICAgICAgMCwgMCwgMCwgMSwgMFxuICAgIF07XG5cbiAgICB0aGlzLl9sb2FkTWF0cml4KG1hdHJpeCwgbXVsdGlwbHkpO1xufTtcblxuLypcbiAqIExTRCBlZmZlY3RcbiAqXG4gKiBNdWx0aXBseSB0aGUgY3VycmVudCBtYXRyaXhcbiAqXG4gKiBAcGFyYW0gYW1vdW50IHtudW1iZXJ9IEhvdyBjcmF6eSBpcyB5b3VyIGVmZmVjdFxuICogQHBhcmFtIG11bHRpcGx5IHtib29sZWFufSByZWZlciB0byAuX2xvYWRNYXRyaXgoKSBtZXRob2RcbiAqL1xuQ29sb3JNYXRyaXhGaWx0ZXIucHJvdG90eXBlLmxzZCA9IGZ1bmN0aW9uIChtdWx0aXBseSlcbntcbiAgICB2YXIgbWF0cml4ID0gW1xuICAgICAgICAyLCAtMC40LCAwLjUsIDAsIDAsXG4gICAgICAgIC0wLjUsIDIsIC0wLjQsIDAsIDAsXG4gICAgICAgIC0wLjQsIC0wLjUsIDMsIDAsIDAsXG4gICAgICAgIDAsIDAsIDAsIDEsIDBcbiAgICBdO1xuXG4gICAgdGhpcy5fbG9hZE1hdHJpeChtYXRyaXgsIG11bHRpcGx5KTtcbn07XG5cbi8qXG4gKiBFcmFzZSB0aGUgY3VycmVudCBtYXRyaXggYnkgc2V0dGluZyB0aGUgZGVmYXVsdCBvbmVcbiAqXG4gKi9cbkNvbG9yTWF0cml4RmlsdGVyLnByb3RvdHlwZS5yZXNldCA9IGZ1bmN0aW9uICgpXG57XG4gICAgdmFyIG1hdHJpeCA9IFtcbiAgICAgICAgMSwgMCwgMCwgMCwgMCxcbiAgICAgICAgMCwgMSwgMCwgMCwgMCxcbiAgICAgICAgMCwgMCwgMSwgMCwgMCxcbiAgICAgICAgMCwgMCwgMCwgMSwgMFxuICAgIF07XG5cbiAgICB0aGlzLl9sb2FkTWF0cml4KG1hdHJpeCwgZmFsc2UpO1xufTtcblxuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhDb2xvck1hdHJpeEZpbHRlci5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBtYXRyaXggb2YgdGhlIGNvbG9yIG1hdHJpeCBmaWx0ZXJcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcltdfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuQ29sb3JNYXRyaXhGaWx0ZXIjXG4gICAgICogQGRlZmF1bHQgWzEsIDAsIDAsIDAsIDAsIDAsIDEsIDAsIDAsIDAsIDAsIDAsIDEsIDAsIDAsIDAsIDAsIDAsIDEsIDBdXG4gICAgICovXG4gICAgbWF0cml4OiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudW5pZm9ybXMubS52YWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudW5pZm9ybXMubS52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfVxufSk7XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uLy4uL2NvcmUnKTtcbi8vIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL3N1YnN0YWNrL2JyZnMvaXNzdWVzLzI1XG5cblxuLyoqXG4gKiBUaGlzIGxvd2VycyB0aGUgY29sb3IgZGVwdGggb2YgeW91ciBpbWFnZSBieSB0aGUgZ2l2ZW4gYW1vdW50LCBwcm9kdWNpbmcgYW4gaW1hZ2Ugd2l0aCBhIHNtYWxsZXIgcGFsZXR0ZS5cbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQWJzdHJhY3RGaWx0ZXJcbiAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnNcbiAqL1xuZnVuY3Rpb24gQ29sb3JTdGVwRmlsdGVyKClcbntcbiAgICBjb3JlLkFic3RyYWN0RmlsdGVyLmNhbGwodGhpcyxcbiAgICAgICAgLy8gdmVydGV4IHNoYWRlclxuICAgICAgICBudWxsLFxuICAgICAgICAvLyBmcmFnbWVudCBzaGFkZXJcbiAgICAgICAgXCJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcXG5cXG52YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDtcXG5cXG51bmlmb3JtIHNhbXBsZXIyRCB1U2FtcGxlcjtcXG51bmlmb3JtIGZsb2F0IHN0ZXA7XFxuXFxudm9pZCBtYWluKHZvaWQpXFxue1xcbiAgICB2ZWM0IGNvbG9yID0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2VGV4dHVyZUNvb3JkKTtcXG5cXG4gICAgY29sb3IgPSBmbG9vcihjb2xvciAqIHN0ZXApIC8gc3RlcDtcXG5cXG4gICAgZ2xfRnJhZ0NvbG9yID0gY29sb3I7XFxufVxcblwiLFxuICAgICAgICAvLyBjdXN0b20gdW5pZm9ybXNcbiAgICAgICAge1xuICAgICAgICAgICAgc3RlcDogeyB0eXBlOiAnMWYnLCB2YWx1ZTogNSB9XG4gICAgICAgIH1cbiAgICApO1xufVxuXG5Db2xvclN0ZXBGaWx0ZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShjb3JlLkFic3RyYWN0RmlsdGVyLnByb3RvdHlwZSk7XG5Db2xvclN0ZXBGaWx0ZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gQ29sb3JTdGVwRmlsdGVyO1xubW9kdWxlLmV4cG9ydHMgPSBDb2xvclN0ZXBGaWx0ZXI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKENvbG9yU3RlcEZpbHRlci5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBUaGUgbnVtYmVyIG9mIHN0ZXBzIHRvIHJlZHVjZSB0aGUgcGFsZXR0ZSBieS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLkNvbG9yU3RlcEZpbHRlciNcbiAgICAgKi9cbiAgICBzdGVwOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudW5pZm9ybXMuc3RlcC52YWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudW5pZm9ybXMuc3RlcC52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfVxufSk7XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uLy4uL2NvcmUnKTtcbi8vIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL3N1YnN0YWNrL2JyZnMvaXNzdWVzLzI1XG5cblxuLyoqXG4gKiBUaGUgQ29udm9sdXRpb25GaWx0ZXIgY2xhc3MgYXBwbGllcyBhIG1hdHJpeCBjb252b2x1dGlvbiBmaWx0ZXIgZWZmZWN0LlxuICogQSBjb252b2x1dGlvbiBjb21iaW5lcyBwaXhlbHMgaW4gdGhlIGlucHV0IGltYWdlIHdpdGggbmVpZ2hib3JpbmcgcGl4ZWxzIHRvIHByb2R1Y2UgYSBuZXcgaW1hZ2UuXG4gKiBBIHdpZGUgdmFyaWV0eSBvZiBpbWFnZSBlZmZlY3RzIGNhbiBiZSBhY2hpZXZlZCB0aHJvdWdoIGNvbnZvbHV0aW9ucywgaW5jbHVkaW5nIGJsdXJyaW5nLCBlZGdlXG4gKiBkZXRlY3Rpb24sIHNoYXJwZW5pbmcsIGVtYm9zc2luZywgYW5kIGJldmVsaW5nLiBUaGUgbWF0cml4IHNob3VsZCBiZSBzcGVjaWZpZWQgYXMgYSA5IHBvaW50IEFycmF5LlxuICogU2VlIGh0dHA6Ly9kb2NzLmdpbXAub3JnL2VuL3BsdWctaW4tY29udm1hdHJpeC5odG1sIGZvciBtb3JlIGluZm8uXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLkFic3RyYWN0RmlsdGVyXG4gKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzXG4gKiBAcGFyYW0gbWF0cml4IHtudW1iZXJbXX0gQW4gYXJyYXkgb2YgdmFsdWVzIHVzZWQgZm9yIG1hdHJpeCB0cmFuc2Zvcm1hdGlvbi4gU3BlY2lmaWVkIGFzIGEgOSBwb2ludCBBcnJheS5cbiAqIEBwYXJhbSB3aWR0aCB7bnVtYmVyfSBXaWR0aCBvZiB0aGUgb2JqZWN0IHlvdSBhcmUgdHJhbnNmb3JtaW5nXG4gKiBAcGFyYW0gaGVpZ2h0IHtudW1iZXJ9IEhlaWdodCBvZiB0aGUgb2JqZWN0IHlvdSBhcmUgdHJhbnNmb3JtaW5nXG4gKi9cbmZ1bmN0aW9uIENvbnZvbHV0aW9uRmlsdGVyKG1hdHJpeCwgd2lkdGgsIGhlaWdodClcbntcbiAgICBjb3JlLkFic3RyYWN0RmlsdGVyLmNhbGwodGhpcyxcbiAgICAgICAgLy8gdmVydGV4IHNoYWRlclxuICAgICAgICBudWxsLFxuICAgICAgICAvLyBmcmFnbWVudCBzaGFkZXJcbiAgICAgICAgXCJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcXG5cXG52YXJ5aW5nIG1lZGl1bXAgdmVjMiB2VGV4dHVyZUNvb3JkO1xcblxcbnVuaWZvcm0gc2FtcGxlcjJEIHVTYW1wbGVyO1xcbnVuaWZvcm0gdmVjMiB0ZXhlbFNpemU7XFxudW5pZm9ybSBmbG9hdCBtYXRyaXhbOV07XFxuXFxudm9pZCBtYWluKHZvaWQpXFxue1xcbiAgIHZlYzQgYzExID0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2VGV4dHVyZUNvb3JkIC0gdGV4ZWxTaXplKTsgLy8gdG9wIGxlZnRcXG4gICB2ZWM0IGMxMiA9IHRleHR1cmUyRCh1U2FtcGxlciwgdmVjMih2VGV4dHVyZUNvb3JkLngsIHZUZXh0dXJlQ29vcmQueSAtIHRleGVsU2l6ZS55KSk7IC8vIHRvcCBjZW50ZXJcXG4gICB2ZWM0IGMxMyA9IHRleHR1cmUyRCh1U2FtcGxlciwgdmVjMih2VGV4dHVyZUNvb3JkLnggKyB0ZXhlbFNpemUueCwgdlRleHR1cmVDb29yZC55IC0gdGV4ZWxTaXplLnkpKTsgLy8gdG9wIHJpZ2h0XFxuXFxuICAgdmVjNCBjMjEgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZlYzIodlRleHR1cmVDb29yZC54IC0gdGV4ZWxTaXplLngsIHZUZXh0dXJlQ29vcmQueSkpOyAvLyBtaWQgbGVmdFxcbiAgIHZlYzQgYzIyID0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2VGV4dHVyZUNvb3JkKTsgLy8gbWlkIGNlbnRlclxcbiAgIHZlYzQgYzIzID0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2ZWMyKHZUZXh0dXJlQ29vcmQueCArIHRleGVsU2l6ZS54LCB2VGV4dHVyZUNvb3JkLnkpKTsgLy8gbWlkIHJpZ2h0XFxuXFxuICAgdmVjNCBjMzEgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZlYzIodlRleHR1cmVDb29yZC54IC0gdGV4ZWxTaXplLngsIHZUZXh0dXJlQ29vcmQueSArIHRleGVsU2l6ZS55KSk7IC8vIGJvdHRvbSBsZWZ0XFxuICAgdmVjNCBjMzIgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZlYzIodlRleHR1cmVDb29yZC54LCB2VGV4dHVyZUNvb3JkLnkgKyB0ZXhlbFNpemUueSkpOyAvLyBib3R0b20gY2VudGVyXFxuICAgdmVjNCBjMzMgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZUZXh0dXJlQ29vcmQgKyB0ZXhlbFNpemUpOyAvLyBib3R0b20gcmlnaHRcXG5cXG4gICBnbF9GcmFnQ29sb3IgPVxcbiAgICAgICBjMTEgKiBtYXRyaXhbMF0gKyBjMTIgKiBtYXRyaXhbMV0gKyBjMTMgKiBtYXRyaXhbMl0gK1xcbiAgICAgICBjMjEgKiBtYXRyaXhbM10gKyBjMjIgKiBtYXRyaXhbNF0gKyBjMjMgKiBtYXRyaXhbNV0gK1xcbiAgICAgICBjMzEgKiBtYXRyaXhbNl0gKyBjMzIgKiBtYXRyaXhbN10gKyBjMzMgKiBtYXRyaXhbOF07XFxuXFxuICAgZ2xfRnJhZ0NvbG9yLmEgPSBjMjIuYTtcXG59XFxuXCIsXG4gICAgICAgIC8vIGN1c3RvbSB1bmlmb3Jtc1xuICAgICAgICB7XG4gICAgICAgICAgICBtYXRyaXg6ICAgICB7IHR5cGU6ICcxZnYnLCB2YWx1ZTogbmV3IEZsb2F0MzJBcnJheShtYXRyaXgpIH0sXG4gICAgICAgICAgICB0ZXhlbFNpemU6ICB7IHR5cGU6ICd2MicsIHZhbHVlOiB7IHg6IDEgLyB3aWR0aCwgeTogMSAvIGhlaWdodCB9IH1cbiAgICAgICAgfVxuICAgICk7XG59XG5cbkNvbnZvbHV0aW9uRmlsdGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoY29yZS5BYnN0cmFjdEZpbHRlci5wcm90b3R5cGUpO1xuQ29udm9sdXRpb25GaWx0ZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gQ29udm9sdXRpb25GaWx0ZXI7XG5tb2R1bGUuZXhwb3J0cyA9IENvbnZvbHV0aW9uRmlsdGVyO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhDb252b2x1dGlvbkZpbHRlci5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBBbiBhcnJheSBvZiB2YWx1ZXMgdXNlZCBmb3IgbWF0cml4IHRyYW5zZm9ybWF0aW9uLiBTcGVjaWZpZWQgYXMgYSA5IHBvaW50IEFycmF5LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyW119XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5Db252b2x1dGlvbkZpbHRlciNcbiAgICAgKi9cbiAgICBtYXRyaXg6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy51bmlmb3Jtcy5tYXRyaXgudmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLm1hdHJpeC52YWx1ZSA9IG5ldyBGbG9hdDMyQXJyYXkodmFsdWUpO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFdpZHRoIG9mIHRoZSBvYmplY3QgeW91IGFyZSB0cmFuc2Zvcm1pbmdcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLkNvbnZvbHV0aW9uRmlsdGVyI1xuICAgICAqL1xuICAgIHdpZHRoOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIDEvdGhpcy51bmlmb3Jtcy50ZXhlbFNpemUudmFsdWUueDtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudW5pZm9ybXMudGV4ZWxTaXplLnZhbHVlLnggPSAxL3ZhbHVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIEhlaWdodCBvZiB0aGUgb2JqZWN0IHlvdSBhcmUgdHJhbnNmb3JtaW5nXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5Db252b2x1dGlvbkZpbHRlciNcbiAgICAgKi9cbiAgICBoZWlnaHQ6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gMS90aGlzLnVuaWZvcm1zLnRleGVsU2l6ZS52YWx1ZS55O1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy50ZXhlbFNpemUudmFsdWUueSA9IDEvdmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG59KTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vLi4vY29yZScpO1xuLy8gQHNlZSBodHRwczovL2dpdGh1Yi5jb20vc3Vic3RhY2svYnJmcy9pc3N1ZXMvMjVcblxuXG4vKipcbiAqIEEgQ3Jvc3MgSGF0Y2ggZWZmZWN0IGZpbHRlci5cbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQWJzdHJhY3RGaWx0ZXJcbiAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnNcbiAqL1xuZnVuY3Rpb24gQ3Jvc3NIYXRjaEZpbHRlcigpXG57XG4gICAgY29yZS5BYnN0cmFjdEZpbHRlci5jYWxsKHRoaXMsXG4gICAgICAgIC8vIHZlcnRleCBzaGFkZXJcbiAgICAgICAgbnVsbCxcbiAgICAgICAgLy8gZnJhZ21lbnQgc2hhZGVyXG4gICAgICAgIFwicHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XFxuXFxudmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7XFxuXFxudW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXI7XFxuXFxudm9pZCBtYWluKHZvaWQpXFxue1xcbiAgICBmbG9hdCBsdW0gPSBsZW5ndGgodGV4dHVyZTJEKHVTYW1wbGVyLCB2VGV4dHVyZUNvb3JkLnh5KS5yZ2IpO1xcblxcbiAgICBnbF9GcmFnQ29sb3IgPSB2ZWM0KDEuMCwgMS4wLCAxLjAsIDEuMCk7XFxuXFxuICAgIGlmIChsdW0gPCAxLjAwKVxcbiAgICB7XFxuICAgICAgICBpZiAobW9kKGdsX0ZyYWdDb29yZC54ICsgZ2xfRnJhZ0Nvb3JkLnksIDEwLjApID09IDAuMClcXG4gICAgICAgIHtcXG4gICAgICAgICAgICBnbF9GcmFnQ29sb3IgPSB2ZWM0KDAuMCwgMC4wLCAwLjAsIDEuMCk7XFxuICAgICAgICB9XFxuICAgIH1cXG5cXG4gICAgaWYgKGx1bSA8IDAuNzUpXFxuICAgIHtcXG4gICAgICAgIGlmIChtb2QoZ2xfRnJhZ0Nvb3JkLnggLSBnbF9GcmFnQ29vcmQueSwgMTAuMCkgPT0gMC4wKVxcbiAgICAgICAge1xcbiAgICAgICAgICAgIGdsX0ZyYWdDb2xvciA9IHZlYzQoMC4wLCAwLjAsIDAuMCwgMS4wKTtcXG4gICAgICAgIH1cXG4gICAgfVxcblxcbiAgICBpZiAobHVtIDwgMC41MClcXG4gICAge1xcbiAgICAgICAgaWYgKG1vZChnbF9GcmFnQ29vcmQueCArIGdsX0ZyYWdDb29yZC55IC0gNS4wLCAxMC4wKSA9PSAwLjApXFxuICAgICAgICB7XFxuICAgICAgICAgICAgZ2xfRnJhZ0NvbG9yID0gdmVjNCgwLjAsIDAuMCwgMC4wLCAxLjApO1xcbiAgICAgICAgfVxcbiAgICB9XFxuXFxuICAgIGlmIChsdW0gPCAwLjMpXFxuICAgIHtcXG4gICAgICAgIGlmIChtb2QoZ2xfRnJhZ0Nvb3JkLnggLSBnbF9GcmFnQ29vcmQueSAtIDUuMCwgMTAuMCkgPT0gMC4wKVxcbiAgICAgICAge1xcbiAgICAgICAgICAgIGdsX0ZyYWdDb2xvciA9IHZlYzQoMC4wLCAwLjAsIDAuMCwgMS4wKTtcXG4gICAgICAgIH1cXG4gICAgfVxcbn1cXG5cIlxuICAgICk7XG59XG5cbkNyb3NzSGF0Y2hGaWx0ZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShjb3JlLkFic3RyYWN0RmlsdGVyLnByb3RvdHlwZSk7XG5Dcm9zc0hhdGNoRmlsdGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IENyb3NzSGF0Y2hGaWx0ZXI7XG5tb2R1bGUuZXhwb3J0cyA9IENyb3NzSGF0Y2hGaWx0ZXI7XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uLy4uL2NvcmUnKTtcbi8vIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL3N1YnN0YWNrL2JyZnMvaXNzdWVzLzI1XG5cblxuLyoqXG4gKiBUaGUgRGlzcGxhY2VtZW50RmlsdGVyIGNsYXNzIHVzZXMgdGhlIHBpeGVsIHZhbHVlcyBmcm9tIHRoZSBzcGVjaWZpZWQgdGV4dHVyZSAoY2FsbGVkIHRoZSBkaXNwbGFjZW1lbnQgbWFwKSB0byBwZXJmb3JtIGEgZGlzcGxhY2VtZW50IG9mIGFuIG9iamVjdC5cbiAqIFlvdSBjYW4gdXNlIHRoaXMgZmlsdGVyIHRvIGFwcGx5IGFsbCBtYW5vciBvZiBjcmF6eSB3YXJwaW5nIGVmZmVjdHNcbiAqIEN1cnJlbnRseSB0aGUgciBwcm9wZXJ0eSBvZiB0aGUgdGV4dHVyZSBpcyB1c2VkIHRvIG9mZnNldCB0aGUgeCBhbmQgdGhlIGcgcHJvcGVydHkgb2YgdGhlIHRleHR1cmUgaXMgdXNlZCB0byBvZmZzZXQgdGhlIHkuXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLkFic3RyYWN0RmlsdGVyXG4gKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzXG4gKiBAcGFyYW0gc3ByaXRlIHtQSVhJLlNwcml0ZX0gdGhlIHNwcml0ZSB1c2VkIGZvciB0aGUgZGlzcGxhY2VtZW50IG1hcC4gKG1ha2Ugc3VyZSBpdHMgYWRkZWQgdG8gdGhlIHNjZW5lISlcbiAqL1xuZnVuY3Rpb24gRGlzcGxhY2VtZW50RmlsdGVyKHNwcml0ZSwgc2NhbGUpXG57XG4gICAgdmFyIG1hc2tNYXRyaXggPSBuZXcgY29yZS5NYXRyaXgoKTtcbiAgICBzcHJpdGUucmVuZGVyYWJsZSA9IGZhbHNlO1xuXG4gICAgY29yZS5BYnN0cmFjdEZpbHRlci5jYWxsKHRoaXMsXG4gICAgICAgIC8vIHZlcnRleCBzaGFkZXJcbiAgICAgICAgXCJhdHRyaWJ1dGUgdmVjMiBhVmVydGV4UG9zaXRpb247XFxuYXR0cmlidXRlIHZlYzIgYVRleHR1cmVDb29yZDtcXG5hdHRyaWJ1dGUgdmVjNCBhQ29sb3I7XFxuXFxudW5pZm9ybSBtYXQzIHByb2plY3Rpb25NYXRyaXg7XFxudW5pZm9ybSBtYXQzIG90aGVyTWF0cml4O1xcblxcbnZhcnlpbmcgdmVjMiB2TWFwQ29vcmQ7XFxudmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7XFxudmFyeWluZyB2ZWM0IHZDb2xvcjtcXG5cXG52b2lkIG1haW4odm9pZClcXG57XFxuICAgZ2xfUG9zaXRpb24gPSB2ZWM0KChwcm9qZWN0aW9uTWF0cml4ICogdmVjMyhhVmVydGV4UG9zaXRpb24sIDEuMCkpLnh5LCAwLjAsIDEuMCk7XFxuICAgdlRleHR1cmVDb29yZCA9IGFUZXh0dXJlQ29vcmQ7XFxuICAgdk1hcENvb3JkID0gKCBvdGhlck1hdHJpeCAqIHZlYzMoIGFUZXh0dXJlQ29vcmQsIDEuMCkgICkueHk7XFxuICAgdkNvbG9yID0gdmVjNChhQ29sb3IucmdiICogYUNvbG9yLmEsIGFDb2xvci5hKTtcXG59XFxuXCIsXG4gICAgICAgIC8vIGZyYWdtZW50IHNoYWRlclxuICAgICAgICBcInByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xcblxcbnZhcnlpbmcgdmVjMiB2TWFwQ29vcmQ7XFxudmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7XFxudmFyeWluZyB2ZWM0IHZDb2xvcjtcXG5cXG51bmlmb3JtIHZlYzIgc2NhbGU7XFxuXFxudW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXI7XFxudW5pZm9ybSBzYW1wbGVyMkQgbWFwU2FtcGxlcjtcXG5cXG52b2lkIG1haW4odm9pZClcXG57XFxuICAgdmVjNCBtYXAgPSAgdGV4dHVyZTJEKG1hcFNhbXBsZXIsIHZNYXBDb29yZCk7XFxuXFxuICAgbWFwIC09IDAuNTtcXG4gICBtYXAueHkgKj0gc2NhbGU7XFxuXFxuICAgZ2xfRnJhZ0NvbG9yID0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2ZWMyKHZUZXh0dXJlQ29vcmQueCArIG1hcC54LCB2VGV4dHVyZUNvb3JkLnkgKyBtYXAueSkpO1xcbn1cXG5cIixcbiAgICAgICAgLy8gdW5pZm9ybXNcbiAgICAgICAge1xuICAgICAgICAgICAgbWFwU2FtcGxlcjogICAgIHsgdHlwZTogJ3NhbXBsZXIyRCcsIHZhbHVlOiBzcHJpdGUudGV4dHVyZSB9LFxuICAgICAgICAgICAgb3RoZXJNYXRyaXg6ICAgIHsgdHlwZTogJ21hdDMnLCB2YWx1ZTogbWFza01hdHJpeC50b0FycmF5KHRydWUpIH0sXG4gICAgICAgICAgICBzY2FsZTogICAgICAgICAgeyB0eXBlOiAndjInLCB2YWx1ZTogeyB4OiAxLCB5OiAxIH0gfVxuICAgICAgICB9XG4gICAgKTtcblxuICAgIHRoaXMubWFza1Nwcml0ZSA9IHNwcml0ZTtcbiAgICB0aGlzLm1hc2tNYXRyaXggPSBtYXNrTWF0cml4O1xuXG4gICAgaWYgKHNjYWxlID09PSBudWxsIHx8IHNjYWxlID09PSB1bmRlZmluZWQpXG4gICAge1xuICAgICAgICBzY2FsZSA9IDIwO1xuICAgIH1cblxuICAgIHRoaXMuc2NhbGUgPSBuZXcgY29yZS5Qb2ludChzY2FsZSwgc2NhbGUpO1xufVxuXG5EaXNwbGFjZW1lbnRGaWx0ZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShjb3JlLkFic3RyYWN0RmlsdGVyLnByb3RvdHlwZSk7XG5EaXNwbGFjZW1lbnRGaWx0ZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gRGlzcGxhY2VtZW50RmlsdGVyO1xubW9kdWxlLmV4cG9ydHMgPSBEaXNwbGFjZW1lbnRGaWx0ZXI7XG5cbkRpc3BsYWNlbWVudEZpbHRlci5wcm90b3R5cGUuYXBwbHlGaWx0ZXIgPSBmdW5jdGlvbiAocmVuZGVyZXIsIGlucHV0LCBvdXRwdXQpXG57XG4gICAgdmFyIGZpbHRlck1hbmFnZXIgPSByZW5kZXJlci5maWx0ZXJNYW5hZ2VyO1xuXG4gICAgZmlsdGVyTWFuYWdlci5jYWxjdWxhdGVNYXBwZWRNYXRyaXgoaW5wdXQuZnJhbWUsIHRoaXMubWFza1Nwcml0ZSwgdGhpcy5tYXNrTWF0cml4KTtcblxuICAgIHRoaXMudW5pZm9ybXMub3RoZXJNYXRyaXgudmFsdWUgPSB0aGlzLm1hc2tNYXRyaXgudG9BcnJheSh0cnVlKTtcbiAgICB0aGlzLnVuaWZvcm1zLnNjYWxlLnZhbHVlLnggPSB0aGlzLnNjYWxlLnggKiAoMS9pbnB1dC5mcmFtZS53aWR0aCk7XG4gICAgdGhpcy51bmlmb3Jtcy5zY2FsZS52YWx1ZS55ID0gdGhpcy5zY2FsZS55ICogKDEvaW5wdXQuZnJhbWUuaGVpZ2h0KTtcblxuICAgIHZhciBzaGFkZXIgPSB0aGlzLmdldFNoYWRlcihyZW5kZXJlcik7XG4gICAgIC8vIGRyYXcgdGhlIGZpbHRlci4uLlxuICAgIGZpbHRlck1hbmFnZXIuYXBwbHlGaWx0ZXIoc2hhZGVyLCBpbnB1dCwgb3V0cHV0KTtcbn07XG5cblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoRGlzcGxhY2VtZW50RmlsdGVyLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFRoZSB0ZXh0dXJlIHVzZWQgZm9yIHRoZSBkaXNwbGFjZW1lbnQgbWFwLiBNdXN0IGJlIHBvd2VyIG9mIDIgc2l6ZWQgdGV4dHVyZS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuVGV4dHVyZX1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLkRpc3BsYWNlbWVudEZpbHRlciNcbiAgICAgKi9cbiAgICBtYXA6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy51bmlmb3Jtcy5tYXBTYW1wbGVyLnZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy5tYXBTYW1wbGVyLnZhbHVlID0gdmFsdWU7XG5cbiAgICAgICAgfVxuICAgIH1cbn0pO1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi8uLi9jb3JlJyk7XG4vLyBAc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9zdWJzdGFjay9icmZzL2lzc3Vlcy8yNVxuXG5cbi8qKlxuICogQGF1dGhvciBNYXQgR3JvdmVzIGh0dHA6Ly9tYXRncm92ZXMuY29tLyBARG9vcm1hdDIzXG4gKiBvcmlnaW5hbCBmaWx0ZXI6IGh0dHBzOi8vZ2l0aHViLmNvbS9ldmFudy9nbGZ4LmpzL2Jsb2IvbWFzdGVyL3NyYy9maWx0ZXJzL2Z1bi9kb3RzY3JlZW4uanNcbiAqL1xuXG4vKipcbiAqIFRoaXMgZmlsdGVyIGFwcGxpZXMgYSBkb3RzY3JlZW4gZWZmZWN0IG1ha2luZyBkaXNwbGF5IG9iamVjdHMgYXBwZWFyIHRvIGJlIG1hZGUgb3V0IG9mXG4gKiBibGFjayBhbmQgd2hpdGUgaGFsZnRvbmUgZG90cyBsaWtlIGFuIG9sZCBwcmludGVyLlxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5BYnN0cmFjdEZpbHRlclxuICogQG1lbWJlcm9mIFBJWEkuZmlsdGVyc1xuICovXG5mdW5jdGlvbiBEb3RTY3JlZW5GaWx0ZXIoKVxue1xuICAgIGNvcmUuQWJzdHJhY3RGaWx0ZXIuY2FsbCh0aGlzLFxuICAgICAgICAvLyB2ZXJ0ZXggc2hhZGVyXG4gICAgICAgIG51bGwsXG4gICAgICAgIC8vIGZyYWdtZW50IHNoYWRlclxuICAgICAgICBcInByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xcblxcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xcbnZhcnlpbmcgdmVjNCB2Q29sb3I7XFxuXFxudW5pZm9ybSB2ZWM0IGRpbWVuc2lvbnM7XFxudW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXI7XFxuXFxudW5pZm9ybSBmbG9hdCBhbmdsZTtcXG51bmlmb3JtIGZsb2F0IHNjYWxlO1xcblxcbmZsb2F0IHBhdHRlcm4oKVxcbntcXG4gICBmbG9hdCBzID0gc2luKGFuZ2xlKSwgYyA9IGNvcyhhbmdsZSk7XFxuICAgdmVjMiB0ZXggPSB2VGV4dHVyZUNvb3JkICogZGltZW5zaW9ucy54eTtcXG4gICB2ZWMyIHBvaW50ID0gdmVjMihcXG4gICAgICAgYyAqIHRleC54IC0gcyAqIHRleC55LFxcbiAgICAgICBzICogdGV4LnggKyBjICogdGV4LnlcXG4gICApICogc2NhbGU7XFxuICAgcmV0dXJuIChzaW4ocG9pbnQueCkgKiBzaW4ocG9pbnQueSkpICogNC4wO1xcbn1cXG5cXG52b2lkIG1haW4oKVxcbntcXG4gICB2ZWM0IGNvbG9yID0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2VGV4dHVyZUNvb3JkKTtcXG4gICBmbG9hdCBhdmVyYWdlID0gKGNvbG9yLnIgKyBjb2xvci5nICsgY29sb3IuYikgLyAzLjA7XFxuICAgZ2xfRnJhZ0NvbG9yID0gdmVjNCh2ZWMzKGF2ZXJhZ2UgKiAxMC4wIC0gNS4wICsgcGF0dGVybigpKSwgY29sb3IuYSk7XFxufVxcblwiLFxuICAgICAgICAvLyBjdXN0b20gdW5pZm9ybXNcbiAgICAgICAge1xuICAgICAgICAgICAgc2NhbGU6ICAgICAgeyB0eXBlOiAnMWYnLCB2YWx1ZTogMSB9LFxuICAgICAgICAgICAgYW5nbGU6ICAgICAgeyB0eXBlOiAnMWYnLCB2YWx1ZTogNSB9LFxuICAgICAgICAgICAgZGltZW5zaW9uczogeyB0eXBlOiAnNGZ2JywgdmFsdWU6IFswLCAwLCAwLCAwXSB9XG4gICAgICAgIH1cbiAgICApO1xufVxuXG5Eb3RTY3JlZW5GaWx0ZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShjb3JlLkFic3RyYWN0RmlsdGVyLnByb3RvdHlwZSk7XG5Eb3RTY3JlZW5GaWx0ZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gRG90U2NyZWVuRmlsdGVyO1xubW9kdWxlLmV4cG9ydHMgPSBEb3RTY3JlZW5GaWx0ZXI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKERvdFNjcmVlbkZpbHRlci5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBUaGUgc2NhbGUgb2YgdGhlIGVmZmVjdC5cbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5Eb3RTY3JlZW5GaWx0ZXIjXG4gICAgICovXG4gICAgc2NhbGU6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy51bmlmb3Jtcy5zY2FsZS52YWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudW5pZm9ybXMuc2NhbGUudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBUaGUgcmFkaXVzIG9mIHRoZSBlZmZlY3QuXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuRG90U2NyZWVuRmlsdGVyI1xuICAgICAqL1xuICAgIGFuZ2xlOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudW5pZm9ybXMuYW5nbGUudmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLmFuZ2xlLnZhbHVlID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG59KTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vLi4vY29yZScpO1xuXG4vLyBAc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9zdWJzdGFjay9icmZzL2lzc3Vlcy8yNVxuXG5cbi8qKlxuICogVGhlIEJsdXJZVGludEZpbHRlciBhcHBsaWVzIGEgdmVydGljYWwgR2F1c3NpYW4gYmx1ciB0byBhbiBvYmplY3QuXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLkFic3RyYWN0RmlsdGVyXG4gKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzXG4gKi9cbmZ1bmN0aW9uIEJsdXJZVGludEZpbHRlcigpXG57XG4gICAgY29yZS5BYnN0cmFjdEZpbHRlci5jYWxsKHRoaXMsXG4gICAgICAgIC8vIHZlcnRleCBzaGFkZXJcbiAgICAgICAgXCJhdHRyaWJ1dGUgdmVjMiBhVmVydGV4UG9zaXRpb247XFxuYXR0cmlidXRlIHZlYzIgYVRleHR1cmVDb29yZDtcXG5hdHRyaWJ1dGUgdmVjNCBhQ29sb3I7XFxuXFxudW5pZm9ybSBmbG9hdCBzdHJlbmd0aDtcXG51bmlmb3JtIHZlYzIgb2Zmc2V0O1xcblxcbnVuaWZvcm0gbWF0MyBwcm9qZWN0aW9uTWF0cml4O1xcblxcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xcbnZhcnlpbmcgdmVjNCB2Q29sb3I7XFxudmFyeWluZyB2ZWMyIHZCbHVyVGV4Q29vcmRzWzZdO1xcblxcbnZvaWQgbWFpbih2b2lkKVxcbntcXG4gICAgZ2xfUG9zaXRpb24gPSB2ZWM0KChwcm9qZWN0aW9uTWF0cml4ICogdmVjMygoYVZlcnRleFBvc2l0aW9uK29mZnNldCksIDEuMCkpLnh5LCAwLjAsIDEuMCk7XFxuICAgIHZUZXh0dXJlQ29vcmQgPSBhVGV4dHVyZUNvb3JkO1xcblxcbiAgICB2Qmx1clRleENvb3Jkc1sgMF0gPSBhVGV4dHVyZUNvb3JkICsgdmVjMigwLjAsIC0wLjAxMiAqIHN0cmVuZ3RoKTtcXG4gICAgdkJsdXJUZXhDb29yZHNbIDFdID0gYVRleHR1cmVDb29yZCArIHZlYzIoMC4wLCAtMC4wMDggKiBzdHJlbmd0aCk7XFxuICAgIHZCbHVyVGV4Q29vcmRzWyAyXSA9IGFUZXh0dXJlQ29vcmQgKyB2ZWMyKDAuMCwgLTAuMDA0ICogc3RyZW5ndGgpO1xcbiAgICB2Qmx1clRleENvb3Jkc1sgM10gPSBhVGV4dHVyZUNvb3JkICsgdmVjMigwLjAsICAwLjAwNCAqIHN0cmVuZ3RoKTtcXG4gICAgdkJsdXJUZXhDb29yZHNbIDRdID0gYVRleHR1cmVDb29yZCArIHZlYzIoMC4wLCAgMC4wMDggKiBzdHJlbmd0aCk7XFxuICAgIHZCbHVyVGV4Q29vcmRzWyA1XSA9IGFUZXh0dXJlQ29vcmQgKyB2ZWMyKDAuMCwgIDAuMDEyICogc3RyZW5ndGgpO1xcblxcbiAgIHZDb2xvciA9IHZlYzQoYUNvbG9yLnJnYiAqIGFDb2xvci5hLCBhQ29sb3IuYSk7XFxufVxcblwiLFxuICAgICAgICAvLyBmcmFnbWVudCBzaGFkZXJcbiAgICAgICAgXCJwcmVjaXNpb24gbG93cCBmbG9hdDtcXG5cXG52YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDtcXG52YXJ5aW5nIHZlYzIgdkJsdXJUZXhDb29yZHNbNl07XFxudmFyeWluZyB2ZWM0IHZDb2xvcjtcXG5cXG51bmlmb3JtIHZlYzMgY29sb3I7XFxudW5pZm9ybSBmbG9hdCBhbHBoYTtcXG5cXG51bmlmb3JtIHNhbXBsZXIyRCB1U2FtcGxlcjtcXG5cXG52b2lkIG1haW4odm9pZClcXG57XFxuICAgIHZlYzQgc3VtID0gdmVjNCgwLjApO1xcblxcbiAgICBzdW0gKz0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2Qmx1clRleENvb3Jkc1sgMF0pKjAuMDA0NDMxODQ4NDExOTM4MzQxO1xcbiAgICBzdW0gKz0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2Qmx1clRleENvb3Jkc1sgMV0pKjAuMDUzOTkwOTY2NTEzMTg5ODU7XFxuICAgIHN1bSArPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZCbHVyVGV4Q29vcmRzWyAyXSkqMC4yNDE5NzA3MjQ1MTkxNDU0O1xcbiAgICBzdW0gKz0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2VGV4dHVyZUNvb3JkICAgICApKjAuMzk4OTQyMjgwNDAxNDMyNztcXG4gICAgc3VtICs9IHRleHR1cmUyRCh1U2FtcGxlciwgdkJsdXJUZXhDb29yZHNbIDNdKSowLjI0MTk3MDcyNDUxOTE0NTQ7XFxuICAgIHN1bSArPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZCbHVyVGV4Q29vcmRzWyA0XSkqMC4wNTM5OTA5NjY1MTMxODk4NTtcXG4gICAgc3VtICs9IHRleHR1cmUyRCh1U2FtcGxlciwgdkJsdXJUZXhDb29yZHNbIDVdKSowLjAwNDQzMTg0ODQxMTkzODM0MTtcXG5cXG4gICAgZ2xfRnJhZ0NvbG9yID0gdmVjNCggY29sb3IucmdiICogc3VtLmEgKiBhbHBoYSwgc3VtLmEgKiBhbHBoYSApO1xcbn1cXG5cIixcbiAgICAgICAgLy8gc2V0IHRoZSB1bmlmb3Jtc1xuICAgICAgICB7XG4gICAgICAgICAgICBibHVyOiB7IHR5cGU6ICcxZicsIHZhbHVlOiAxIC8gNTEyIH0sXG4gICAgICAgICAgICBjb2xvcjogeyB0eXBlOiAnYycsIHZhbHVlOiBbMCwwLDBdfSxcbiAgICAgICAgICAgIGFscGhhOiB7IHR5cGU6ICcxZicsIHZhbHVlOiAwLjcgfSxcbiAgICAgICAgICAgIG9mZnNldDogeyB0eXBlOiAnMmYnLCB2YWx1ZTpbNSwgNV19LFxuICAgICAgICAgICAgc3RyZW5ndGg6IHsgdHlwZTogJzFmJywgdmFsdWU6MX1cbiAgICAgICAgfVxuICAgICk7XG5cbiAgICB0aGlzLnBhc3NlcyA9IDE7XG4gICAgdGhpcy5zdHJlbmd0aCA9IDQ7XG59XG5cbkJsdXJZVGludEZpbHRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuQWJzdHJhY3RGaWx0ZXIucHJvdG90eXBlKTtcbkJsdXJZVGludEZpbHRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBCbHVyWVRpbnRGaWx0ZXI7XG5tb2R1bGUuZXhwb3J0cyA9IEJsdXJZVGludEZpbHRlcjtcblxuQmx1cllUaW50RmlsdGVyLnByb3RvdHlwZS5hcHBseUZpbHRlciA9IGZ1bmN0aW9uIChyZW5kZXJlciwgaW5wdXQsIG91dHB1dCwgY2xlYXIpXG57XG4gICAgdmFyIHNoYWRlciA9IHRoaXMuZ2V0U2hhZGVyKHJlbmRlcmVyKTtcblxuICAgIHRoaXMudW5pZm9ybXMuc3RyZW5ndGgudmFsdWUgPSB0aGlzLnN0cmVuZ3RoIC8gNCAvIHRoaXMucGFzc2VzICogKGlucHV0LmZyYW1lLmhlaWdodCAvIGlucHV0LnNpemUuaGVpZ2h0KTtcblxuICAgIGlmKHRoaXMucGFzc2VzID09PSAxKVxuICAgIHtcbiAgICAgICAgcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5hcHBseUZpbHRlcihzaGFkZXIsIGlucHV0LCBvdXRwdXQsIGNsZWFyKTtcbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgdmFyIHJlbmRlclRhcmdldCA9IHJlbmRlcmVyLmZpbHRlck1hbmFnZXIuZ2V0UmVuZGVyVGFyZ2V0KHRydWUpO1xuICAgICAgICB2YXIgZmxpcCA9IGlucHV0O1xuICAgICAgICB2YXIgZmxvcCA9IHJlbmRlclRhcmdldDtcblxuICAgICAgICBmb3IodmFyIGkgPSAwOyBpIDwgdGhpcy5wYXNzZXMtMTsgaSsrKVxuICAgICAgICB7XG4gICAgICAgICAgICByZW5kZXJlci5maWx0ZXJNYW5hZ2VyLmFwcGx5RmlsdGVyKHNoYWRlciwgZmxpcCwgZmxvcCwgY2xlYXIpO1xuXG4gICAgICAgICAgIHZhciB0ZW1wID0gZmxvcDtcbiAgICAgICAgICAgZmxvcCA9IGZsaXA7XG4gICAgICAgICAgIGZsaXAgPSB0ZW1wO1xuICAgICAgICB9XG5cbiAgICAgICAgcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5hcHBseUZpbHRlcihzaGFkZXIsIGZsaXAsIG91dHB1dCwgY2xlYXIpO1xuXG4gICAgICAgIHJlbmRlcmVyLmZpbHRlck1hbmFnZXIucmV0dXJuUmVuZGVyVGFyZ2V0KHJlbmRlclRhcmdldCk7XG4gICAgfVxufTtcblxuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhCbHVyWVRpbnRGaWx0ZXIucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgc3RyZW5ndGggb2YgYm90aCB0aGUgYmx1ci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLkJsdXJZVGludEZpbHRlciNcbiAgICAgKiBAZGVmYXVsdCAyXG4gICAgICovXG4gICAgYmx1cjoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiAgdGhpcy5zdHJlbmd0aDtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMucGFkZGluZyA9IHZhbHVlICogMC41O1xuICAgICAgICAgICAgdGhpcy5zdHJlbmd0aCA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfVxufSk7XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uLy4uL2NvcmUnKSxcbiAgICBCbHVyWEZpbHRlciA9IHJlcXVpcmUoJy4uL2JsdXIvQmx1clhGaWx0ZXInKSxcbiAgICBCbHVyWVRpbnRGaWx0ZXIgPSByZXF1aXJlKCcuL0JsdXJZVGludEZpbHRlcicpO1xuXG4vKipcbiAqIFRoZSBEcm9wU2hhZG93RmlsdGVyIGFwcGxpZXMgYSBHYXVzc2lhbiBibHVyIHRvIGFuIG9iamVjdC5cbiAqIFRoZSBzdHJlbmd0aCBvZiB0aGUgYmx1ciBjYW4gYmUgc2V0IGZvciB4LSBhbmQgeS1heGlzIHNlcGFyYXRlbHkuXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLkFic3RyYWN0RmlsdGVyXG4gKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzXG4gKi9cbmZ1bmN0aW9uIERyb3BTaGFkb3dGaWx0ZXIoKVxue1xuICAgIGNvcmUuQWJzdHJhY3RGaWx0ZXIuY2FsbCh0aGlzKTtcblxuICAgIHRoaXMuYmx1clhGaWx0ZXIgPSBuZXcgQmx1clhGaWx0ZXIoKTtcbiAgICB0aGlzLmJsdXJZVGludEZpbHRlciA9IG5ldyBCbHVyWVRpbnRGaWx0ZXIoKTtcblxuICAgIHRoaXMuZGVmYXVsdEZpbHRlciA9IG5ldyBjb3JlLkFic3RyYWN0RmlsdGVyKCk7XG5cbiAgICB0aGlzLnBhZGRpbmcgPSAzMDtcblxuICAgIHRoaXMuX2RpcnR5UG9zaXRpb24gPSB0cnVlO1xuICAgIHRoaXMuX2FuZ2xlID0gNDUgKiBNYXRoLlBJIC8gMTgwO1xuICAgIHRoaXMuX2Rpc3RhbmNlID0gMTA7XG4gICAgdGhpcy5hbHBoYSA9IDAuNzU7XG4gICAgdGhpcy5oaWRlT2JqZWN0ID0gZmFsc2U7XG4gICAgdGhpcy5ibGVuZE1vZGUgPSBjb3JlLkJMRU5EX01PREVTLk1VTFRJUExZO1xufVxuXG5Ecm9wU2hhZG93RmlsdGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoY29yZS5BYnN0cmFjdEZpbHRlci5wcm90b3R5cGUpO1xuRHJvcFNoYWRvd0ZpbHRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBEcm9wU2hhZG93RmlsdGVyO1xubW9kdWxlLmV4cG9ydHMgPSBEcm9wU2hhZG93RmlsdGVyO1xuXG5Ecm9wU2hhZG93RmlsdGVyLnByb3RvdHlwZS5hcHBseUZpbHRlciA9IGZ1bmN0aW9uIChyZW5kZXJlciwgaW5wdXQsIG91dHB1dClcbntcbiAgICB2YXIgcmVuZGVyVGFyZ2V0ID0gcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5nZXRSZW5kZXJUYXJnZXQodHJ1ZSk7XG5cbiAgICAvL1RPRE8gLSBjb3B5VGV4U3ViSW1hZ2UyRCBjb3VsZCBiZSB1c2VkIGhlcmU/XG4gICAgaWYodGhpcy5fZGlydHlQb3NpdGlvbilcbiAgICB7XG4gICAgICAgIHRoaXMuX2RpcnR5UG9zaXRpb24gPSBmYWxzZTtcblxuICAgICAgICB0aGlzLmJsdXJZVGludEZpbHRlci51bmlmb3Jtcy5vZmZzZXQudmFsdWVbMF0gPSBNYXRoLnNpbih0aGlzLl9hbmdsZSkgKiB0aGlzLl9kaXN0YW5jZTtcbiAgICAgICAgdGhpcy5ibHVyWVRpbnRGaWx0ZXIudW5pZm9ybXMub2Zmc2V0LnZhbHVlWzFdID0gTWF0aC5jb3ModGhpcy5fYW5nbGUpICogdGhpcy5fZGlzdGFuY2U7XG4gICAgfVxuXG4gICAgdGhpcy5ibHVyWEZpbHRlci5hcHBseUZpbHRlcihyZW5kZXJlciwgaW5wdXQsIHJlbmRlclRhcmdldCk7XG5cbiAgICByZW5kZXJlci5ibGVuZE1vZGVNYW5hZ2VyLnNldEJsZW5kTW9kZSh0aGlzLmJsZW5kTW9kZSk7XG5cbiAgICB0aGlzLmJsdXJZVGludEZpbHRlci5hcHBseUZpbHRlcihyZW5kZXJlciwgcmVuZGVyVGFyZ2V0LCBvdXRwdXQpO1xuXG4gICAgcmVuZGVyZXIuYmxlbmRNb2RlTWFuYWdlci5zZXRCbGVuZE1vZGUoY29yZS5CTEVORF9NT0RFUy5OT1JNQUwpO1xuXG4gICAgaWYoIXRoaXMuaGlkZU9iamVjdClcbiAgICB7XG5cbiAgICAgICAgdGhpcy5kZWZhdWx0RmlsdGVyLmFwcGx5RmlsdGVyKHJlbmRlcmVyLCBpbnB1dCwgb3V0cHV0KTtcbiAgICB9XG5cblxuICAgIHJlbmRlcmVyLmZpbHRlck1hbmFnZXIucmV0dXJuUmVuZGVyVGFyZ2V0KHJlbmRlclRhcmdldCk7XG59O1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhEcm9wU2hhZG93RmlsdGVyLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIHN0cmVuZ3RoIG9mIGJvdGggdGhlIGJsdXJYIGFuZCBibHVyWSBwcm9wZXJ0aWVzIHNpbXVsdGFuZW91c2x5XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlck9mIFBJWEkuZmlsdGVycy5Ecm9wU2hhZG93RmlsdGVyI1xuICAgICAqIEBkZWZhdWx0IDJcbiAgICAgKi9cbiAgICBibHVyOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuYmx1clhGaWx0ZXIuYmx1cjtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuYmx1clhGaWx0ZXIuYmx1ciA9IHRoaXMuYmx1cllUaW50RmlsdGVyLmJsdXIgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBzdHJlbmd0aCBvZiB0aGUgYmx1clggcHJvcGVydHlcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyT2YgUElYSS5maWx0ZXJzLkRyb3BTaGFkb3dGaWx0ZXIjXG4gICAgICogQGRlZmF1bHQgMlxuICAgICAqL1xuICAgIGJsdXJYOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuYmx1clhGaWx0ZXIuYmx1cjtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuYmx1clhGaWx0ZXIuYmx1ciA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIHN0cmVuZ3RoIG9mIHRoZSBibHVyWSBwcm9wZXJ0eVxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJPZiBQSVhJLmZpbHRlcnMuRHJvcFNoYWRvd0ZpbHRlciNcbiAgICAgKiBAZGVmYXVsdCAyXG4gICAgICovXG4gICAgYmx1clk6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5ibHVyWVRpbnRGaWx0ZXIuYmx1cjtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuYmx1cllUaW50RmlsdGVyLmJsdXIgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBjb2xvciBvZiB0aGUgc2hhZG93XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlck9mIFBJWEkuZmlsdGVycy5Ecm9wU2hhZG93RmlsdGVyI1xuICAgICAqL1xuICAgIGNvbG9yOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuICBjb3JlLnV0aWxzLnJnYjJoZXgoIHRoaXMuYmx1cllUaW50RmlsdGVyLnVuaWZvcm1zLmNvbG9yLnZhbHVlICk7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmJsdXJZVGludEZpbHRlci51bmlmb3Jtcy5jb2xvci52YWx1ZSA9IGNvcmUudXRpbHMuaGV4MnJnYih2YWx1ZSk7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgYWxwaGEgb2YgdGhlIHNoYWRvd1xuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJPZiBQSVhJLmZpbHRlcnMuRHJvcFNoYWRvd0ZpbHRlciNcbiAgICAgKi9cbiAgICBhbHBoYToge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiAgdGhpcy5ibHVyWVRpbnRGaWx0ZXIudW5pZm9ybXMuYWxwaGEudmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmJsdXJZVGludEZpbHRlci51bmlmb3Jtcy5hbHBoYS52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIGRpc3RhbmNlIG9mIHRoZSBzaGFkb3dcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyT2YgUElYSS5maWx0ZXJzLkRyb3BTaGFkb3dGaWx0ZXIjXG4gICAgICovXG4gICAgZGlzdGFuY2U6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gIHRoaXMuX2Rpc3RhbmNlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5fZGlydHlQb3NpdGlvbiA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLl9kaXN0YW5jZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIGFuZ2xlIG9mIHRoZSBzaGFkb3dcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyT2YgUElYSS5maWx0ZXJzLkRyb3BTaGFkb3dGaWx0ZXIjXG4gICAgICovXG4gICAgYW5nbGU6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gIHRoaXMuX2FuZ2xlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5fZGlydHlQb3NpdGlvbiA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLl9hbmdsZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfVxufSk7XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uLy4uL2NvcmUnKTtcbi8vIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL3N1YnN0YWNrL2JyZnMvaXNzdWVzLzI1XG5cblxuLyoqXG4gKiBUaGlzIGdyZXlzY2FsZXMgdGhlIHBhbGV0dGUgb2YgeW91ciBEaXNwbGF5IE9iamVjdHMuXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLkFic3RyYWN0RmlsdGVyXG4gKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzXG4gKi9cbmZ1bmN0aW9uIEdyYXlGaWx0ZXIoKVxue1xuICAgIGNvcmUuQWJzdHJhY3RGaWx0ZXIuY2FsbCh0aGlzLFxuICAgICAgICAvLyB2ZXJ0ZXggc2hhZGVyXG4gICAgICAgIG51bGwsXG4gICAgICAgIC8vIGZyYWdtZW50IHNoYWRlclxuICAgICAgICBcInByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xcblxcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xcbnZhcnlpbmcgdmVjNCB2Q29sb3I7XFxuXFxudW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXI7XFxudW5pZm9ybSBmbG9hdCBncmF5O1xcblxcbnZvaWQgbWFpbih2b2lkKVxcbntcXG4gICBnbF9GcmFnQ29sb3IgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZUZXh0dXJlQ29vcmQpO1xcbiAgIGdsX0ZyYWdDb2xvci5yZ2IgPSBtaXgoZ2xfRnJhZ0NvbG9yLnJnYiwgdmVjMygwLjIxMjYqZ2xfRnJhZ0NvbG9yLnIgKyAwLjcxNTIqZ2xfRnJhZ0NvbG9yLmcgKyAwLjA3MjIqZ2xfRnJhZ0NvbG9yLmIpLCBncmF5KTtcXG59XFxuXCIsXG4gICAgICAgIC8vIHNldCB0aGUgdW5pZm9ybXNcbiAgICAgICAge1xuICAgICAgICAgICAgZ3JheTogeyB0eXBlOiAnMWYnLCB2YWx1ZTogMSB9XG4gICAgICAgIH1cbiAgICApO1xufVxuXG5HcmF5RmlsdGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoY29yZS5BYnN0cmFjdEZpbHRlci5wcm90b3R5cGUpO1xuR3JheUZpbHRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBHcmF5RmlsdGVyO1xubW9kdWxlLmV4cG9ydHMgPSBHcmF5RmlsdGVyO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhHcmF5RmlsdGVyLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFRoZSBzdHJlbmd0aCBvZiB0aGUgZ3JheS4gMSB3aWxsIG1ha2UgdGhlIG9iamVjdCBibGFjayBhbmQgd2hpdGUsIDAgd2lsbCBtYWtlIHRoZSBvYmplY3QgaXRzIG5vcm1hbCBjb2xvci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLkdyYXlGaWx0ZXIjXG4gICAgICovXG4gICAgZ3JheToge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVuaWZvcm1zLmdyYXkudmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLmdyYXkudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuIiwiLyoqXG4gKiBAZmlsZSAgICAgICAgTWFpbiBleHBvcnQgb2YgdGhlIFBJWEkgZmlsdGVycyBsaWJyYXJ5XG4gKiBAYXV0aG9yICAgICAgTWF0IEdyb3ZlcyA8bWF0QGdvb2Rib3lkaWdpdGFsLmNvbT5cbiAqIEBjb3B5cmlnaHQgICAyMDEzLTIwMTUgR29vZEJveURpZ2l0YWxcbiAqIEBsaWNlbnNlICAgICB7QGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL3BpeGlqcy9waXhpLmpzL2Jsb2IvbWFzdGVyL0xJQ0VOU0V8TUlUIExpY2Vuc2V9XG4gKi9cblxuLyoqXG4gKiBAbmFtZXNwYWNlIFBJWEkuZmlsdGVyc1xuICovXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgICBBc2NpaUZpbHRlcjogICAgICAgIHJlcXVpcmUoJy4vYXNjaWkvQXNjaWlGaWx0ZXInKSxcbiAgICBCbG9vbUZpbHRlcjogICAgICAgIHJlcXVpcmUoJy4vYmxvb20vQmxvb21GaWx0ZXInKSxcbiAgICBCbHVyRmlsdGVyOiAgICAgICAgIHJlcXVpcmUoJy4vYmx1ci9CbHVyRmlsdGVyJyksXG4gICAgQmx1clhGaWx0ZXI6ICAgICAgICByZXF1aXJlKCcuL2JsdXIvQmx1clhGaWx0ZXInKSxcbiAgICBCbHVyWUZpbHRlcjogICAgICAgIHJlcXVpcmUoJy4vYmx1ci9CbHVyWUZpbHRlcicpLFxuICAgIEJsdXJEaXJGaWx0ZXI6ICAgICAgcmVxdWlyZSgnLi9ibHVyL0JsdXJEaXJGaWx0ZXInKSxcbiAgICBDb2xvck1hdHJpeEZpbHRlcjogIHJlcXVpcmUoJy4vY29sb3IvQ29sb3JNYXRyaXhGaWx0ZXInKSxcbiAgICBDb2xvclN0ZXBGaWx0ZXI6ICAgIHJlcXVpcmUoJy4vY29sb3IvQ29sb3JTdGVwRmlsdGVyJyksXG4gICAgQ29udm9sdXRpb25GaWx0ZXI6ICByZXF1aXJlKCcuL2NvbnZvbHV0aW9uL0NvbnZvbHV0aW9uRmlsdGVyJyksXG4gICAgQ3Jvc3NIYXRjaEZpbHRlcjogICByZXF1aXJlKCcuL2Nyb3NzaGF0Y2gvQ3Jvc3NIYXRjaEZpbHRlcicpLFxuICAgIERpc3BsYWNlbWVudEZpbHRlcjogcmVxdWlyZSgnLi9kaXNwbGFjZW1lbnQvRGlzcGxhY2VtZW50RmlsdGVyJyksXG4gICAgRG90U2NyZWVuRmlsdGVyOiAgICByZXF1aXJlKCcuL2RvdC9Eb3RTY3JlZW5GaWx0ZXInKSxcbiAgICBHcmF5RmlsdGVyOiAgICAgICAgIHJlcXVpcmUoJy4vZ3JheS9HcmF5RmlsdGVyJyksXG4gICAgRHJvcFNoYWRvd0ZpbHRlcjogICByZXF1aXJlKCcuL2Ryb3BzaGFkb3cvRHJvcFNoYWRvd0ZpbHRlcicpLFxuICAgIEludmVydEZpbHRlcjogICAgICAgcmVxdWlyZSgnLi9pbnZlcnQvSW52ZXJ0RmlsdGVyJyksXG4gICAgTm9pc2VGaWx0ZXI6ICAgICAgICByZXF1aXJlKCcuL25vaXNlL05vaXNlRmlsdGVyJyksXG4gICAgUGl4ZWxhdGVGaWx0ZXI6ICAgICByZXF1aXJlKCcuL3BpeGVsYXRlL1BpeGVsYXRlRmlsdGVyJyksXG4gICAgUkdCU3BsaXRGaWx0ZXI6ICAgICByZXF1aXJlKCcuL3JnYi9SR0JTcGxpdEZpbHRlcicpLFxuICAgIFNob2Nrd2F2ZUZpbHRlcjogICAgcmVxdWlyZSgnLi9zaG9ja3dhdmUvU2hvY2t3YXZlRmlsdGVyJyksXG4gICAgU2VwaWFGaWx0ZXI6ICAgICAgICByZXF1aXJlKCcuL3NlcGlhL1NlcGlhRmlsdGVyJyksXG4gICAgU21hcnRCbHVyRmlsdGVyOiAgICByZXF1aXJlKCcuL2JsdXIvU21hcnRCbHVyRmlsdGVyJyksXG4gICAgVGlsdFNoaWZ0RmlsdGVyOiAgICByZXF1aXJlKCcuL3RpbHRzaGlmdC9UaWx0U2hpZnRGaWx0ZXInKSxcbiAgICBUaWx0U2hpZnRYRmlsdGVyOiAgIHJlcXVpcmUoJy4vdGlsdHNoaWZ0L1RpbHRTaGlmdFhGaWx0ZXInKSxcbiAgICBUaWx0U2hpZnRZRmlsdGVyOiAgIHJlcXVpcmUoJy4vdGlsdHNoaWZ0L1RpbHRTaGlmdFlGaWx0ZXInKSxcbiAgICBUd2lzdEZpbHRlcjogICAgICAgIHJlcXVpcmUoJy4vdHdpc3QvVHdpc3RGaWx0ZXInKVxufTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vLi4vY29yZScpO1xuLy8gQHNlZSBodHRwczovL2dpdGh1Yi5jb20vc3Vic3RhY2svYnJmcy9pc3N1ZXMvMjVcblxuXG4vKipcbiAqIFRoaXMgaW52ZXJ0cyB5b3VyIERpc3BsYXkgT2JqZWN0cyBjb2xvcnMuXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLkFic3RyYWN0RmlsdGVyXG4gKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzXG4gKi9cbmZ1bmN0aW9uIEludmVydEZpbHRlcigpXG57XG4gICAgY29yZS5BYnN0cmFjdEZpbHRlci5jYWxsKHRoaXMsXG4gICAgICAgIC8vIHZlcnRleCBzaGFkZXJcbiAgICAgICAgbnVsbCxcbiAgICAgICAgLy8gZnJhZ21lbnQgc2hhZGVyXG4gICAgICAgIFwicHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XFxuXFxudmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7XFxuXFxudW5pZm9ybSBmbG9hdCBpbnZlcnQ7XFxudW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXI7XFxuXFxudm9pZCBtYWluKHZvaWQpXFxue1xcbiAgICBnbF9GcmFnQ29sb3IgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZUZXh0dXJlQ29vcmQpO1xcblxcbiAgICBnbF9GcmFnQ29sb3IucmdiID0gbWl4KCAodmVjMygxKS1nbF9GcmFnQ29sb3IucmdiKSAqIGdsX0ZyYWdDb2xvci5hLCBnbF9GcmFnQ29sb3IucmdiLCAxLjAgLSBpbnZlcnQpO1xcbn1cXG5cIixcbiAgICAgICAgLy8gY3VzdG9tIHVuaWZvcm1zXG4gICAgICAgIHtcbiAgICAgICAgICAgIGludmVydDogeyB0eXBlOiAnMWYnLCB2YWx1ZTogMSB9XG4gICAgICAgIH1cbiAgICApO1xufVxuXG5JbnZlcnRGaWx0ZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShjb3JlLkFic3RyYWN0RmlsdGVyLnByb3RvdHlwZSk7XG5JbnZlcnRGaWx0ZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gSW52ZXJ0RmlsdGVyO1xubW9kdWxlLmV4cG9ydHMgPSBJbnZlcnRGaWx0ZXI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKEludmVydEZpbHRlci5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBUaGUgc3RyZW5ndGggb2YgdGhlIGludmVydC4gYDFgIHdpbGwgZnVsbHkgaW52ZXJ0IHRoZSBjb2xvcnMsIGFuZFxuICAgICAqIGAwYCB3aWxsIG1ha2UgdGhlIG9iamVjdCBpdHMgbm9ybWFsIGNvbG9yLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuSW52ZXJ0RmlsdGVyI1xuICAgICAqL1xuICAgIGludmVydDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVuaWZvcm1zLmludmVydC52YWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudW5pZm9ybXMuaW52ZXJ0LnZhbHVlID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG59KTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vLi4vY29yZScpO1xuLy8gQHNlZSBodHRwczovL2dpdGh1Yi5jb20vc3Vic3RhY2svYnJmcy9pc3N1ZXMvMjVcblxuXG4vKipcbiAqIEBhdXRob3IgVmljbyBAdmljb2NvdGVhXG4gKiBvcmlnaW5hbCBmaWx0ZXI6IGh0dHBzOi8vZ2l0aHViLmNvbS9ldmFudy9nbGZ4LmpzL2Jsb2IvbWFzdGVyL3NyYy9maWx0ZXJzL2FkanVzdC9ub2lzZS5qc1xuICovXG5cbi8qKlxuICogQSBOb2lzZSBlZmZlY3QgZmlsdGVyLlxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5BYnN0cmFjdEZpbHRlclxuICogQG1lbWJlcm9mIFBJWEkuZmlsdGVyc1xuICovXG5mdW5jdGlvbiBOb2lzZUZpbHRlcigpXG57XG4gICAgY29yZS5BYnN0cmFjdEZpbHRlci5jYWxsKHRoaXMsXG4gICAgICAgIC8vIHZlcnRleCBzaGFkZXJcbiAgICAgICAgbnVsbCxcbiAgICAgICAgLy8gZnJhZ21lbnQgc2hhZGVyXG4gICAgICAgIFwicHJlY2lzaW9uIGhpZ2hwIGZsb2F0O1xcblxcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xcbnZhcnlpbmcgdmVjNCB2Q29sb3I7XFxuXFxudW5pZm9ybSBmbG9hdCBub2lzZTtcXG51bmlmb3JtIHNhbXBsZXIyRCB1U2FtcGxlcjtcXG5cXG5mbG9hdCByYW5kKHZlYzIgY28pXFxue1xcbiAgICByZXR1cm4gZnJhY3Qoc2luKGRvdChjby54eSwgdmVjMigxMi45ODk4LCA3OC4yMzMpKSkgKiA0Mzc1OC41NDUzKTtcXG59XFxuXFxudm9pZCBtYWluKClcXG57XFxuICAgIHZlYzQgY29sb3IgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZUZXh0dXJlQ29vcmQpO1xcblxcbiAgICBmbG9hdCBkaWZmID0gKHJhbmQodlRleHR1cmVDb29yZCkgLSAwLjUpICogbm9pc2U7XFxuXFxuICAgIGNvbG9yLnIgKz0gZGlmZjtcXG4gICAgY29sb3IuZyArPSBkaWZmO1xcbiAgICBjb2xvci5iICs9IGRpZmY7XFxuXFxuICAgIGdsX0ZyYWdDb2xvciA9IGNvbG9yO1xcbn1cXG5cIixcbiAgICAgICAgLy8gY3VzdG9tIHVuaWZvcm1zXG4gICAgICAgIHtcbiAgICAgICAgICAgIG5vaXNlOiB7IHR5cGU6ICcxZicsIHZhbHVlOiAwLjUgfVxuICAgICAgICB9XG4gICAgKTtcbn1cblxuTm9pc2VGaWx0ZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShjb3JlLkFic3RyYWN0RmlsdGVyLnByb3RvdHlwZSk7XG5Ob2lzZUZpbHRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBOb2lzZUZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gTm9pc2VGaWx0ZXI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKE5vaXNlRmlsdGVyLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFRoZSBhbW91bnQgb2Ygbm9pc2UgdG8gYXBwbHkuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5Ob2lzZUZpbHRlciNcbiAgICAgKiBAZGVmYXVsdCAwLjVcbiAgICAgKi9cbiAgICBub2lzZToge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVuaWZvcm1zLm5vaXNlLnZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy5ub2lzZS52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfVxufSk7XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uLy4uL2NvcmUnKTtcbi8vIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL3N1YnN0YWNrL2JyZnMvaXNzdWVzLzI1XG5cblxuLyoqXG4gKiBUaGlzIGZpbHRlciBhcHBsaWVzIGEgcGl4ZWxhdGUgZWZmZWN0IG1ha2luZyBkaXNwbGF5IG9iamVjdHMgYXBwZWFyICdibG9ja3knLlxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5BYnN0cmFjdEZpbHRlclxuICogQG1lbWJlcm9mIFBJWEkuZmlsdGVyc1xuICovXG5mdW5jdGlvbiBQaXhlbGF0ZUZpbHRlcigpXG57XG4gICAgY29yZS5BYnN0cmFjdEZpbHRlci5jYWxsKHRoaXMsXG4gICAgICAgIC8vIHZlcnRleCBzaGFkZXJcbiAgICAgICAgbnVsbCxcbiAgICAgICAgLy8gZnJhZ21lbnQgc2hhZGVyXG4gICAgICAgIFwicHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XFxuXFxudmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7XFxuXFxudW5pZm9ybSB2ZWM0IGRpbWVuc2lvbnM7XFxudW5pZm9ybSB2ZWMyIHBpeGVsU2l6ZTtcXG51bmlmb3JtIHNhbXBsZXIyRCB1U2FtcGxlcjtcXG5cXG52b2lkIG1haW4odm9pZClcXG57XFxuICAgIHZlYzIgY29vcmQgPSB2VGV4dHVyZUNvb3JkO1xcblxcbiAgICB2ZWMyIHNpemUgPSBkaW1lbnNpb25zLnh5IC8gcGl4ZWxTaXplO1xcblxcbiAgICB2ZWMyIGNvbG9yID0gZmxvb3IoICggdlRleHR1cmVDb29yZCAqIHNpemUgKSApIC8gc2l6ZSArIHBpeGVsU2l6ZS9kaW1lbnNpb25zLnh5ICogMC41O1xcblxcbiAgICBnbF9GcmFnQ29sb3IgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIGNvbG9yKTtcXG59XFxuXCIsXG4gICAgICAgIC8vIGN1c3RvbSB1bmlmb3Jtc1xuICAgICAgICB7XG4gICAgICAgICAgICBkaW1lbnNpb25zOiB7IHR5cGU6ICc0ZnYnLCAgdmFsdWU6IG5ldyBGbG9hdDMyQXJyYXkoWzAsIDAsIDAsIDBdKSB9LFxuICAgICAgICAgICAgcGl4ZWxTaXplOiAgeyB0eXBlOiAndjInLCAgIHZhbHVlOiB7IHg6IDEwLCB5OiAxMCB9IH1cbiAgICAgICAgfVxuICAgICk7XG59XG5cblBpeGVsYXRlRmlsdGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoY29yZS5BYnN0cmFjdEZpbHRlci5wcm90b3R5cGUpO1xuUGl4ZWxhdGVGaWx0ZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gUGl4ZWxhdGVGaWx0ZXI7XG5tb2R1bGUuZXhwb3J0cyA9IFBpeGVsYXRlRmlsdGVyO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhQaXhlbGF0ZUZpbHRlci5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBUaGlzIGEgcG9pbnQgdGhhdCBkZXNjcmliZXMgdGhlIHNpemUgb2YgdGhlIGJsb2Nrcy5cbiAgICAgKiB4IGlzIHRoZSB3aWR0aCBvZiB0aGUgYmxvY2sgYW5kIHkgaXMgdGhlIGhlaWdodC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuUG9pbnR9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5QaXhlbGF0ZUZpbHRlciNcbiAgICAgKi9cbiAgICBzaXplOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudW5pZm9ybXMucGl4ZWxTaXplLnZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy5waXhlbFNpemUudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi8uLi9jb3JlJyk7XG4vLyBAc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9zdWJzdGFjay9icmZzL2lzc3Vlcy8yNVxuXG5cbi8qKlxuICogQW4gUkdCIFNwbGl0IEZpbHRlci5cbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkuQWJzdHJhY3RGaWx0ZXJcbiAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnNcbiAqL1xuZnVuY3Rpb24gUkdCU3BsaXRGaWx0ZXIoKVxue1xuICAgIGNvcmUuQWJzdHJhY3RGaWx0ZXIuY2FsbCh0aGlzLFxuICAgICAgICAvLyB2ZXJ0ZXggc2hhZGVyXG4gICAgICAgIG51bGwsXG4gICAgICAgIC8vIGZyYWdtZW50IHNoYWRlclxuICAgICAgICBcInByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xcblxcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xcblxcbnVuaWZvcm0gc2FtcGxlcjJEIHVTYW1wbGVyO1xcbnVuaWZvcm0gdmVjNCBkaW1lbnNpb25zO1xcbnVuaWZvcm0gdmVjMiByZWQ7XFxudW5pZm9ybSB2ZWMyIGdyZWVuO1xcbnVuaWZvcm0gdmVjMiBibHVlO1xcblxcbnZvaWQgbWFpbih2b2lkKVxcbntcXG4gICBnbF9GcmFnQ29sb3IuciA9IHRleHR1cmUyRCh1U2FtcGxlciwgdlRleHR1cmVDb29yZCArIHJlZC9kaW1lbnNpb25zLnh5KS5yO1xcbiAgIGdsX0ZyYWdDb2xvci5nID0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2VGV4dHVyZUNvb3JkICsgZ3JlZW4vZGltZW5zaW9ucy54eSkuZztcXG4gICBnbF9GcmFnQ29sb3IuYiA9IHRleHR1cmUyRCh1U2FtcGxlciwgdlRleHR1cmVDb29yZCArIGJsdWUvZGltZW5zaW9ucy54eSkuYjtcXG4gICBnbF9GcmFnQ29sb3IuYSA9IHRleHR1cmUyRCh1U2FtcGxlciwgdlRleHR1cmVDb29yZCkuYTtcXG59XFxuXCIsXG4gICAgICAgIC8vIGN1c3RvbSB1bmlmb3Jtc1xuICAgICAgICB7XG4gICAgICAgICAgICByZWQ6ICAgICAgICB7IHR5cGU6ICd2MicsIHZhbHVlOiB7IHg6IDIwLCB5OiAyMCB9IH0sXG4gICAgICAgICAgICBncmVlbjogICAgICB7IHR5cGU6ICd2MicsIHZhbHVlOiB7IHg6IC0yMCwgeTogMjAgfSB9LFxuICAgICAgICAgICAgYmx1ZTogICAgICAgeyB0eXBlOiAndjInLCB2YWx1ZTogeyB4OiAyMCwgeTogLTIwIH0gfSxcbiAgICAgICAgICAgIGRpbWVuc2lvbnM6IHsgdHlwZTogJzRmdicsIHZhbHVlOiBbMCwgMCwgMCwgMF0gfVxuICAgICAgICB9XG4gICAgKTtcbn1cblxuUkdCU3BsaXRGaWx0ZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShjb3JlLkFic3RyYWN0RmlsdGVyLnByb3RvdHlwZSk7XG5SR0JTcGxpdEZpbHRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBSR0JTcGxpdEZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gUkdCU3BsaXRGaWx0ZXI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKFJHQlNwbGl0RmlsdGVyLnByb3RvdHlwZSwge1xuICAgIC8qKlxuICAgICAqIFJlZCBjaGFubmVsIG9mZnNldC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuUG9pbnR9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5SR0JTcGxpdEZpbHRlciNcbiAgICAgKi9cbiAgICByZWQ6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy51bmlmb3Jtcy5yZWQudmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLnJlZC52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIEdyZWVuIGNoYW5uZWwgb2Zmc2V0LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5Qb2ludH1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLlJHQlNwbGl0RmlsdGVyI1xuICAgICAqL1xuICAgIGdyZWVuOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudW5pZm9ybXMuZ3JlZW4udmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLmdyZWVuLnZhbHVlID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQmx1ZSBvZmZzZXQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlBvaW50fVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuUkdCU3BsaXRGaWx0ZXIjXG4gICAgICovXG4gICAgYmx1ZToge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVuaWZvcm1zLmJsdWUudmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLmJsdWUudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi8uLi9jb3JlJyk7XG4vLyBAc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9zdWJzdGFjay9icmZzL2lzc3Vlcy8yNVxuXG5cbi8qKlxuICogVGhpcyBhcHBsaWVzIGEgc2VwaWEgZWZmZWN0IHRvIHlvdXIgRGlzcGxheSBPYmplY3RzLlxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5BYnN0cmFjdEZpbHRlclxuICogQG1lbWJlcm9mIFBJWEkuZmlsdGVyc1xuICovXG5mdW5jdGlvbiBTZXBpYUZpbHRlcigpXG57XG4gICAgY29yZS5BYnN0cmFjdEZpbHRlci5jYWxsKHRoaXMsXG4gICAgICAgIC8vIHZlcnRleCBzaGFkZXJcbiAgICAgICAgbnVsbCxcbiAgICAgICAgLy8gZnJhZ21lbnQgc2hhZGVyXG4gICAgICAgIFwicHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XFxuXFxudmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7XFxuXFxudW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXI7XFxudW5pZm9ybSBmbG9hdCBzZXBpYTtcXG5cXG5jb25zdCBtYXQzIHNlcGlhTWF0cml4ID0gbWF0MygwLjM1ODgsIDAuNzA0NCwgMC4xMzY4LCAwLjI5OTAsIDAuNTg3MCwgMC4xMTQwLCAwLjIzOTIsIDAuNDY5NiwgMC4wOTEyKTtcXG5cXG52b2lkIG1haW4odm9pZClcXG57XFxuICAgZ2xfRnJhZ0NvbG9yID0gdGV4dHVyZTJEKHVTYW1wbGVyLCB2VGV4dHVyZUNvb3JkKTtcXG4gICBnbF9GcmFnQ29sb3IucmdiID0gbWl4KCBnbF9GcmFnQ29sb3IucmdiLCBnbF9GcmFnQ29sb3IucmdiICogc2VwaWFNYXRyaXgsIHNlcGlhKTtcXG59XFxuXCIsXG4gICAgICAgIC8vIGN1c3RvbSB1bmlmb3Jtc1xuICAgICAgICB7XG4gICAgICAgICAgICBzZXBpYTogeyB0eXBlOiAnMWYnLCB2YWx1ZTogMSB9XG4gICAgICAgIH1cbiAgICApO1xufVxuXG5TZXBpYUZpbHRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuQWJzdHJhY3RGaWx0ZXIucHJvdG90eXBlKTtcblNlcGlhRmlsdGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFNlcGlhRmlsdGVyO1xubW9kdWxlLmV4cG9ydHMgPSBTZXBpYUZpbHRlcjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoU2VwaWFGaWx0ZXIucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogVGhlIHN0cmVuZ3RoIG9mIHRoZSBzZXBpYS4gYDFgIHdpbGwgYXBwbHkgdGhlIGZ1bGwgc2VwaWEgZWZmZWN0LCBhbmRcbiAgICAgKiBgMGAgd2lsbCBtYWtlIHRoZSBvYmplY3QgaXRzIG5vcm1hbCBjb2xvci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLlNlcGlhRmlsdGVyI1xuICAgICAqL1xuICAgIHNlcGlhOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudW5pZm9ybXMuc2VwaWEudmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLnNlcGlhLnZhbHVlID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG59KTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vLi4vY29yZScpO1xuLy8gQHNlZSBodHRwczovL2dpdGh1Yi5jb20vc3Vic3RhY2svYnJmcy9pc3N1ZXMvMjVcblxuXG4vKipcbiAqIFRoZSBDb2xvck1hdHJpeEZpbHRlciBjbGFzcyBsZXRzIHlvdSBhcHBseSBhIDR4NCBtYXRyaXggdHJhbnNmb3JtYXRpb24gb24gdGhlIFJHQkFcbiAqIGNvbG9yIGFuZCBhbHBoYSB2YWx1ZXMgb2YgZXZlcnkgcGl4ZWwgb24geW91ciBkaXNwbGF5T2JqZWN0IHRvIHByb2R1Y2UgYSByZXN1bHRcbiAqIHdpdGggYSBuZXcgc2V0IG9mIFJHQkEgY29sb3IgYW5kIGFscGhhIHZhbHVlcy4gSXQncyBwcmV0dHkgcG93ZXJmdWwhXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLkFic3RyYWN0RmlsdGVyXG4gKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzXG4gKi9cbmZ1bmN0aW9uIFNob2Nrd2F2ZUZpbHRlcigpXG57XG4gICAgY29yZS5BYnN0cmFjdEZpbHRlci5jYWxsKHRoaXMsXG4gICAgICAgIC8vIHZlcnRleCBzaGFkZXJcbiAgICAgICAgbnVsbCxcbiAgICAgICAgLy8gZnJhZ21lbnQgc2hhZGVyXG4gICAgICAgIFwicHJlY2lzaW9uIGxvd3AgZmxvYXQ7XFxuXFxudmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7XFxuXFxudW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXI7XFxuXFxudW5pZm9ybSB2ZWMyIGNlbnRlcjtcXG51bmlmb3JtIHZlYzMgcGFyYW1zOyAvLyAxMC4wLCAwLjgsIDAuMVxcbnVuaWZvcm0gZmxvYXQgdGltZTtcXG5cXG52b2lkIG1haW4oKVxcbntcXG4gICAgdmVjMiB1diA9IHZUZXh0dXJlQ29vcmQ7XFxuICAgIHZlYzIgdGV4Q29vcmQgPSB1djtcXG5cXG4gICAgZmxvYXQgZGlzdCA9IGRpc3RhbmNlKHV2LCBjZW50ZXIpO1xcblxcbiAgICBpZiAoIChkaXN0IDw9ICh0aW1lICsgcGFyYW1zLnopKSAmJiAoZGlzdCA+PSAodGltZSAtIHBhcmFtcy56KSkgKVxcbiAgICB7XFxuICAgICAgICBmbG9hdCBkaWZmID0gKGRpc3QgLSB0aW1lKTtcXG4gICAgICAgIGZsb2F0IHBvd0RpZmYgPSAxLjAgLSBwb3coYWJzKGRpZmYqcGFyYW1zLngpLCBwYXJhbXMueSk7XFxuXFxuICAgICAgICBmbG9hdCBkaWZmVGltZSA9IGRpZmYgICogcG93RGlmZjtcXG4gICAgICAgIHZlYzIgZGlmZlVWID0gbm9ybWFsaXplKHV2IC0gY2VudGVyKTtcXG4gICAgICAgIHRleENvb3JkID0gdXYgKyAoZGlmZlVWICogZGlmZlRpbWUpO1xcbiAgICB9XFxuXFxuICAgIGdsX0ZyYWdDb2xvciA9IHRleHR1cmUyRCh1U2FtcGxlciwgdGV4Q29vcmQpO1xcbn1cXG5cIixcbiAgICAgICAgLy8gY3VzdG9tIHVuaWZvcm1zXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNlbnRlcjogeyB0eXBlOiAndjInLCB2YWx1ZTogeyB4OiAwLjUsIHk6IDAuNSB9IH0sXG4gICAgICAgICAgICBwYXJhbXM6IHsgdHlwZTogJ3YzJywgdmFsdWU6IHsgeDogMTAsIHk6IDAuOCwgejogMC4xIH0gfSxcbiAgICAgICAgICAgIHRpbWU6IHsgdHlwZTogJzFmJywgdmFsdWU6IDAgfVxuICAgICAgICB9XG4gICAgKTtcbn1cblxuU2hvY2t3YXZlRmlsdGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoY29yZS5BYnN0cmFjdEZpbHRlci5wcm90b3R5cGUpO1xuU2hvY2t3YXZlRmlsdGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFNob2Nrd2F2ZUZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gU2hvY2t3YXZlRmlsdGVyO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhTaG9ja3dhdmVGaWx0ZXIucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgY2VudGVyIG9mIHRoZSBzaG9ja3dhdmUgaW4gbm9ybWFsaXplZCBzY3JlZW4gY29vcmRzLiBUaGF0IGlzXG4gICAgICogKDAsMCkgaXMgdGhlIHRvcC1sZWZ0IGFuZCAoMSwxKSBpcyB0aGUgYm90dG9tIHJpZ2h0LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7b2JqZWN0PHN0cmluZywgbnVtYmVyPn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLlNob2Nrd2F2ZUZpbHRlciNcbiAgICAgKi9cbiAgICBjZW50ZXI6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy51bmlmb3Jtcy5jZW50ZXIudmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLmNlbnRlci52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfSxcbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBwYXJhbXMgb2YgdGhlIHNob2Nrd2F2ZS4gVGhlc2UgbW9kaWZ5IHRoZSBsb29rIGFuZCBiZWhhdmlvciBvZlxuICAgICAqIHRoZSBzaG9ja3dhdmUgYXMgaXQgcmlwcGxlcyBvdXQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtvYmplY3Q8c3RyaW5nLCBudW1iZXI+fVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuU2hvY2t3YXZlRmlsdGVyI1xuICAgICAqL1xuICAgIHBhcmFtczoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVuaWZvcm1zLnBhcmFtcy52YWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudW5pZm9ybXMucGFyYW1zLnZhbHVlID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9LFxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIGVsYXBzZWQgdGltZSBvZiB0aGUgc2hvY2t3YXZlLiBUaGlzIGNvbnRyb2xzIHRoZSBzcGVlZCBhdCB3aGljaFxuICAgICAqIHRoZSBzaG9ja3dhdmUgcmlwcGxlcyBvdXQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5TaG9ja3dhdmVGaWx0ZXIjXG4gICAgICovXG4gICAgdGltZToge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVuaWZvcm1zLnRpbWUudmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLnRpbWUudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi8uLi9jb3JlJyk7XG4vLyBAc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9zdWJzdGFjay9icmZzL2lzc3Vlcy8yNVxuXG5cbi8qKlxuICogQGF1dGhvciBWaWNvIEB2aWNvY290ZWFcbiAqIG9yaWdpbmFsIGZpbHRlciBodHRwczovL2dpdGh1Yi5jb20vZXZhbncvZ2xmeC5qcy9ibG9iL21hc3Rlci9zcmMvZmlsdGVycy9ibHVyL3RpbHRzaGlmdC5qcyBieSBFdmFuIFdhbGxhY2UgOiBodHRwOi8vbWFkZWJ5ZXZhbi5jb20vXG4gKi9cblxuLyoqXG4gKiBBIFRpbHRTaGlmdEF4aXNGaWx0ZXIuXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLkFic3RyYWN0RmlsdGVyXG4gKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzXG4gKi9cbmZ1bmN0aW9uIFRpbHRTaGlmdEF4aXNGaWx0ZXIoKVxue1xuICAgIGNvcmUuQWJzdHJhY3RGaWx0ZXIuY2FsbCh0aGlzLFxuICAgICAgICAvLyB2ZXJ0ZXggc2hhZGVyXG4gICAgICAgIG51bGwsXG4gICAgICAgIC8vIGZyYWdtZW50IHNoYWRlclxuICAgICAgICBcInByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xcblxcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xcblxcbnVuaWZvcm0gc2FtcGxlcjJEIHVTYW1wbGVyO1xcbnVuaWZvcm0gZmxvYXQgYmx1cjtcXG51bmlmb3JtIGZsb2F0IGdyYWRpZW50Qmx1cjtcXG51bmlmb3JtIHZlYzIgc3RhcnQ7XFxudW5pZm9ybSB2ZWMyIGVuZDtcXG51bmlmb3JtIHZlYzIgZGVsdGE7XFxudW5pZm9ybSB2ZWMyIHRleFNpemU7XFxuXFxuZmxvYXQgcmFuZG9tKHZlYzMgc2NhbGUsIGZsb2F0IHNlZWQpXFxue1xcbiAgICByZXR1cm4gZnJhY3Qoc2luKGRvdChnbF9GcmFnQ29vcmQueHl6ICsgc2VlZCwgc2NhbGUpKSAqIDQzNzU4LjU0NTMgKyBzZWVkKTtcXG59XFxuXFxudm9pZCBtYWluKHZvaWQpXFxue1xcbiAgICB2ZWM0IGNvbG9yID0gdmVjNCgwLjApO1xcbiAgICBmbG9hdCB0b3RhbCA9IDAuMDtcXG5cXG4gICAgZmxvYXQgb2Zmc2V0ID0gcmFuZG9tKHZlYzMoMTIuOTg5OCwgNzguMjMzLCAxNTEuNzE4MiksIDAuMCk7XFxuICAgIHZlYzIgbm9ybWFsID0gbm9ybWFsaXplKHZlYzIoc3RhcnQueSAtIGVuZC55LCBlbmQueCAtIHN0YXJ0LngpKTtcXG4gICAgZmxvYXQgcmFkaXVzID0gc21vb3Roc3RlcCgwLjAsIDEuMCwgYWJzKGRvdCh2VGV4dHVyZUNvb3JkICogdGV4U2l6ZSAtIHN0YXJ0LCBub3JtYWwpKSAvIGdyYWRpZW50Qmx1cikgKiBibHVyO1xcblxcbiAgICBmb3IgKGZsb2F0IHQgPSAtMzAuMDsgdCA8PSAzMC4wOyB0KyspXFxuICAgIHtcXG4gICAgICAgIGZsb2F0IHBlcmNlbnQgPSAodCArIG9mZnNldCAtIDAuNSkgLyAzMC4wO1xcbiAgICAgICAgZmxvYXQgd2VpZ2h0ID0gMS4wIC0gYWJzKHBlcmNlbnQpO1xcbiAgICAgICAgdmVjNCBzYW1wbGUgPSB0ZXh0dXJlMkQodVNhbXBsZXIsIHZUZXh0dXJlQ29vcmQgKyBkZWx0YSAvIHRleFNpemUgKiBwZXJjZW50ICogcmFkaXVzKTtcXG4gICAgICAgIHNhbXBsZS5yZ2IgKj0gc2FtcGxlLmE7XFxuICAgICAgICBjb2xvciArPSBzYW1wbGUgKiB3ZWlnaHQ7XFxuICAgICAgICB0b3RhbCArPSB3ZWlnaHQ7XFxuICAgIH1cXG5cXG4gICAgZ2xfRnJhZ0NvbG9yID0gY29sb3IgLyB0b3RhbDtcXG4gICAgZ2xfRnJhZ0NvbG9yLnJnYiAvPSBnbF9GcmFnQ29sb3IuYSArIDAuMDAwMDE7XFxufVxcblwiLFxuICAgICAgICAvLyBjdXN0b20gdW5pZm9ybXNcbiAgICAgICAge1xuICAgICAgICAgICAgYmx1cjogICAgICAgICAgIHsgdHlwZTogJzFmJywgdmFsdWU6IDEwMCB9LFxuICAgICAgICAgICAgZ3JhZGllbnRCbHVyOiAgIHsgdHlwZTogJzFmJywgdmFsdWU6IDYwMCB9LFxuICAgICAgICAgICAgc3RhcnQ6ICAgICAgICAgIHsgdHlwZTogJ3YyJywgdmFsdWU6IHsgeDogMCwgICAgeTogd2luZG93LmlubmVySGVpZ2h0IC8gMiB9IH0sXG4gICAgICAgICAgICBlbmQ6ICAgICAgICAgICAgeyB0eXBlOiAndjInLCB2YWx1ZTogeyB4OiA2MDAsICB5OiB3aW5kb3cuaW5uZXJIZWlnaHQgLyAyIH0gfSxcbiAgICAgICAgICAgIGRlbHRhOiAgICAgICAgICB7IHR5cGU6ICd2MicsIHZhbHVlOiB7IHg6IDMwLCAgIHk6IDMwIH0gfSxcbiAgICAgICAgICAgIHRleFNpemU6ICAgICAgICB7IHR5cGU6ICd2MicsIHZhbHVlOiB7IHg6IHdpbmRvdy5pbm5lcldpZHRoLCB5OiB3aW5kb3cuaW5uZXJIZWlnaHQgfSB9XG4gICAgICAgIH1cbiAgICApO1xuXG4gICAgdGhpcy51cGRhdGVEZWx0YSgpO1xufVxuXG5UaWx0U2hpZnRBeGlzRmlsdGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoY29yZS5BYnN0cmFjdEZpbHRlci5wcm90b3R5cGUpO1xuVGlsdFNoaWZ0QXhpc0ZpbHRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBUaWx0U2hpZnRBeGlzRmlsdGVyO1xubW9kdWxlLmV4cG9ydHMgPSBUaWx0U2hpZnRBeGlzRmlsdGVyO1xuXG4vKipcbiAqIFVwZGF0ZXMgdGhlIGZpbHRlciBkZWx0YSB2YWx1ZXMuXG4gKiBUaGlzIGlzIG92ZXJyaWRkZW4gaW4gdGhlIFggYW5kIFkgZmlsdGVycywgZG9lcyBub3RoaW5nIGZvciB0aGlzIGNsYXNzLlxuICpcbiAqL1xuVGlsdFNoaWZ0QXhpc0ZpbHRlci5wcm90b3R5cGUudXBkYXRlRGVsdGEgPSBmdW5jdGlvbiAoKVxue1xuICAgIHRoaXMudW5pZm9ybXMuZGVsdGEudmFsdWUueCA9IDA7XG4gICAgdGhpcy51bmlmb3Jtcy5kZWx0YS52YWx1ZS55ID0gMDtcbn07XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKFRpbHRTaGlmdEF4aXNGaWx0ZXIucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogVGhlIHN0cmVuZ3RoIG9mIHRoZSBibHVyLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuVGlsdFNoaWZ0QXhpc0ZpbHRlciNcbiAgICAgKi9cbiAgICBibHVyOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudW5pZm9ybXMuYmx1ci52YWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudW5pZm9ybXMuYmx1ci52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFRoZSBzdHJlbmd0aCBvZiB0aGUgZ3JhZGllbnQgYmx1ci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLlRpbHRTaGlmdEF4aXNGaWx0ZXIjXG4gICAgICovXG4gICAgZ3JhZGllbnRCbHVyOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudW5pZm9ybXMuZ3JhZGllbnRCbHVyLnZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy5ncmFkaWVudEJsdXIudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBUaGUgWCB2YWx1ZSB0byBzdGFydCB0aGUgZWZmZWN0IGF0LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5Qb2ludH1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLlRpbHRTaGlmdEF4aXNGaWx0ZXIjXG4gICAgICovXG4gICAgc3RhcnQ6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy51bmlmb3Jtcy5zdGFydC52YWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudW5pZm9ybXMuc3RhcnQudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlRGVsdGEoKTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBUaGUgWCB2YWx1ZSB0byBlbmQgdGhlIGVmZmVjdCBhdC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuUG9pbnR9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5UaWx0U2hpZnRBeGlzRmlsdGVyI1xuICAgICAqL1xuICAgIGVuZDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVuaWZvcm1zLmVuZC52YWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudW5pZm9ybXMuZW5kLnZhbHVlID0gdmFsdWU7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZURlbHRhKCk7XG4gICAgICAgIH1cbiAgICB9XG59KTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vLi4vY29yZScpLFxuICAgIFRpbHRTaGlmdFhGaWx0ZXIgPSByZXF1aXJlKCcuL1RpbHRTaGlmdFhGaWx0ZXInKSxcbiAgICBUaWx0U2hpZnRZRmlsdGVyID0gcmVxdWlyZSgnLi9UaWx0U2hpZnRZRmlsdGVyJyk7XG5cbi8qKlxuICogQGF1dGhvciBWaWNvIEB2aWNvY290ZWFcbiAqIG9yaWdpbmFsIGZpbHRlciBodHRwczovL2dpdGh1Yi5jb20vZXZhbncvZ2xmeC5qcy9ibG9iL21hc3Rlci9zcmMvZmlsdGVycy9ibHVyL3RpbHRzaGlmdC5qcyBieSBFdmFuIFdhbGxhY2UgOiBodHRwOi8vbWFkZWJ5ZXZhbi5jb20vXG4gKi9cblxuLyoqXG4gKiBBIFRpbHRTaGlmdCBGaWx0ZXIuIE1hbmFnZXMgdGhlIHBhc3Mgb2YgYm90aCBhIFRpbHRTaGlmdFhGaWx0ZXIgYW5kIFRpbHRTaGlmdFlGaWx0ZXIuXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLkFic3RyYWN0RmlsdGVyXG4gKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzXG4gKi9cbmZ1bmN0aW9uIFRpbHRTaGlmdEZpbHRlcigpXG57XG4gICAgY29yZS5BYnN0cmFjdEZpbHRlci5jYWxsKHRoaXMpO1xuXG4gICAgdGhpcy50aWx0U2hpZnRYRmlsdGVyID0gbmV3IFRpbHRTaGlmdFhGaWx0ZXIoKTtcbiAgICB0aGlzLnRpbHRTaGlmdFlGaWx0ZXIgPSBuZXcgVGlsdFNoaWZ0WUZpbHRlcigpO1xufVxuXG5UaWx0U2hpZnRGaWx0ZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShjb3JlLkFic3RyYWN0RmlsdGVyLnByb3RvdHlwZSk7XG5UaWx0U2hpZnRGaWx0ZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gVGlsdFNoaWZ0RmlsdGVyO1xubW9kdWxlLmV4cG9ydHMgPSBUaWx0U2hpZnRGaWx0ZXI7XG5cblRpbHRTaGlmdEZpbHRlci5wcm90b3R5cGUuYXBwbHlGaWx0ZXIgPSBmdW5jdGlvbiAocmVuZGVyZXIsIGlucHV0LCBvdXRwdXQpXG57XG4gICAgdmFyIHJlbmRlclRhcmdldCA9IHJlbmRlcmVyLmZpbHRlck1hbmFnZXIuZ2V0UmVuZGVyVGFyZ2V0KHRydWUpO1xuXG4gICAgdGhpcy50aWx0U2hpZnRYRmlsdGVyLmFwcGx5RmlsdGVyKHJlbmRlcmVyLCBpbnB1dCwgcmVuZGVyVGFyZ2V0KTtcblxuICAgIHRoaXMudGlsdFNoaWZ0WUZpbHRlci5hcHBseUZpbHRlcihyZW5kZXJlciwgcmVuZGVyVGFyZ2V0LCBvdXRwdXQpO1xuXG4gICAgcmVuZGVyZXIuZmlsdGVyTWFuYWdlci5yZXR1cm5SZW5kZXJUYXJnZXQocmVuZGVyVGFyZ2V0KTtcbn07XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKFRpbHRTaGlmdEZpbHRlci5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBUaGUgc3RyZW5ndGggb2YgdGhlIGJsdXIuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5UaWx0U2hpZnRGaWx0ZXIjXG4gICAgICovXG4gICAgYmx1cjoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnRpbHRTaGlmdFhGaWx0ZXIuYmx1cjtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudGlsdFNoaWZ0WEZpbHRlci5ibHVyID0gdGhpcy50aWx0U2hpZnRZRmlsdGVyLmJsdXIgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBUaGUgc3RyZW5ndGggb2YgdGhlIGdyYWRpZW50IGJsdXIuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5UaWx0U2hpZnRGaWx0ZXIjXG4gICAgICovXG4gICAgZ3JhZGllbnRCbHVyOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudGlsdFNoaWZ0WEZpbHRlci5ncmFkaWVudEJsdXI7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnRpbHRTaGlmdFhGaWx0ZXIuZ3JhZGllbnRCbHVyID0gdGhpcy50aWx0U2hpZnRZRmlsdGVyLmdyYWRpZW50Qmx1ciA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFRoZSBZIHZhbHVlIHRvIHN0YXJ0IHRoZSBlZmZlY3QgYXQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5UaWx0U2hpZnRGaWx0ZXIjXG4gICAgICovXG4gICAgc3RhcnQ6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy50aWx0U2hpZnRYRmlsdGVyLnN0YXJ0O1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy50aWx0U2hpZnRYRmlsdGVyLnN0YXJ0ID0gdGhpcy50aWx0U2hpZnRZRmlsdGVyLnN0YXJ0ID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVGhlIFkgdmFsdWUgdG8gZW5kIHRoZSBlZmZlY3QgYXQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIFBJWEkuZmlsdGVycy5UaWx0U2hpZnRGaWx0ZXIjXG4gICAgICovXG4gICAgZW5kOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudGlsdFNoaWZ0WEZpbHRlci5lbmQ7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnRpbHRTaGlmdFhGaWx0ZXIuZW5kID0gdGhpcy50aWx0U2hpZnRZRmlsdGVyLmVuZCA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfVxufSk7XG4iLCJ2YXIgVGlsdFNoaWZ0QXhpc0ZpbHRlciA9IHJlcXVpcmUoJy4vVGlsdFNoaWZ0QXhpc0ZpbHRlcicpO1xuXG4vKipcbiAqIEBhdXRob3IgVmljbyBAdmljb2NvdGVhXG4gKiBvcmlnaW5hbCBmaWx0ZXIgaHR0cHM6Ly9naXRodWIuY29tL2V2YW53L2dsZnguanMvYmxvYi9tYXN0ZXIvc3JjL2ZpbHRlcnMvYmx1ci90aWx0c2hpZnQuanMgYnkgRXZhbiBXYWxsYWNlIDogaHR0cDovL21hZGVieWV2YW4uY29tL1xuICovXG5cbi8qKlxuICogQSBUaWx0U2hpZnRYRmlsdGVyLlxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5UaWx0U2hpZnRBeGlzRmlsdGVyXG4gKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzXG4gKi9cbmZ1bmN0aW9uIFRpbHRTaGlmdFhGaWx0ZXIoKVxue1xuICAgIFRpbHRTaGlmdEF4aXNGaWx0ZXIuY2FsbCh0aGlzKTtcbn1cblxuVGlsdFNoaWZ0WEZpbHRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFRpbHRTaGlmdEF4aXNGaWx0ZXIucHJvdG90eXBlKTtcblRpbHRTaGlmdFhGaWx0ZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gVGlsdFNoaWZ0WEZpbHRlcjtcbm1vZHVsZS5leHBvcnRzID0gVGlsdFNoaWZ0WEZpbHRlcjtcblxuLyoqXG4gKiBVcGRhdGVzIHRoZSBmaWx0ZXIgZGVsdGEgdmFsdWVzLlxuICpcbiAqL1xuVGlsdFNoaWZ0WEZpbHRlci5wcm90b3R5cGUudXBkYXRlRGVsdGEgPSBmdW5jdGlvbiAoKVxue1xuICAgIHZhciBkeCA9IHRoaXMudW5pZm9ybXMuZW5kLnZhbHVlLnggLSB0aGlzLnVuaWZvcm1zLnN0YXJ0LnZhbHVlLng7XG4gICAgdmFyIGR5ID0gdGhpcy51bmlmb3Jtcy5lbmQudmFsdWUueSAtIHRoaXMudW5pZm9ybXMuc3RhcnQudmFsdWUueTtcbiAgICB2YXIgZCA9IE1hdGguc3FydChkeCAqIGR4ICsgZHkgKiBkeSk7XG5cbiAgICB0aGlzLnVuaWZvcm1zLmRlbHRhLnZhbHVlLnggPSBkeCAvIGQ7XG4gICAgdGhpcy51bmlmb3Jtcy5kZWx0YS52YWx1ZS55ID0gZHkgLyBkO1xufTtcbiIsInZhciBUaWx0U2hpZnRBeGlzRmlsdGVyID0gcmVxdWlyZSgnLi9UaWx0U2hpZnRBeGlzRmlsdGVyJyk7XG5cbi8qKlxuICogQGF1dGhvciBWaWNvIEB2aWNvY290ZWFcbiAqIG9yaWdpbmFsIGZpbHRlciBodHRwczovL2dpdGh1Yi5jb20vZXZhbncvZ2xmeC5qcy9ibG9iL21hc3Rlci9zcmMvZmlsdGVycy9ibHVyL3RpbHRzaGlmdC5qcyBieSBFdmFuIFdhbGxhY2UgOiBodHRwOi8vbWFkZWJ5ZXZhbi5jb20vXG4gKi9cblxuLyoqXG4gKiBBIFRpbHRTaGlmdFlGaWx0ZXIuXG4gKlxuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLlRpbHRTaGlmdEF4aXNGaWx0ZXJcbiAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnNcbiAqL1xuZnVuY3Rpb24gVGlsdFNoaWZ0WUZpbHRlcigpXG57XG4gICAgVGlsdFNoaWZ0QXhpc0ZpbHRlci5jYWxsKHRoaXMpO1xufVxuXG5UaWx0U2hpZnRZRmlsdGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoVGlsdFNoaWZ0QXhpc0ZpbHRlci5wcm90b3R5cGUpO1xuVGlsdFNoaWZ0WUZpbHRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBUaWx0U2hpZnRZRmlsdGVyO1xubW9kdWxlLmV4cG9ydHMgPSBUaWx0U2hpZnRZRmlsdGVyO1xuXG4vKipcbiAqIFVwZGF0ZXMgdGhlIGZpbHRlciBkZWx0YSB2YWx1ZXMuXG4gKlxuICovXG5UaWx0U2hpZnRZRmlsdGVyLnByb3RvdHlwZS51cGRhdGVEZWx0YSA9IGZ1bmN0aW9uICgpXG57XG4gICAgdmFyIGR4ID0gdGhpcy51bmlmb3Jtcy5lbmQudmFsdWUueCAtIHRoaXMudW5pZm9ybXMuc3RhcnQudmFsdWUueDtcbiAgICB2YXIgZHkgPSB0aGlzLnVuaWZvcm1zLmVuZC52YWx1ZS55IC0gdGhpcy51bmlmb3Jtcy5zdGFydC52YWx1ZS55O1xuICAgIHZhciBkID0gTWF0aC5zcXJ0KGR4ICogZHggKyBkeSAqIGR5KTtcblxuICAgIHRoaXMudW5pZm9ybXMuZGVsdGEudmFsdWUueCA9IC1keSAvIGQ7XG4gICAgdGhpcy51bmlmb3Jtcy5kZWx0YS52YWx1ZS55ID0gZHggLyBkO1xufTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vLi4vY29yZScpO1xuLy8gQHNlZSBodHRwczovL2dpdGh1Yi5jb20vc3Vic3RhY2svYnJmcy9pc3N1ZXMvMjVcblxuXG4vKipcbiAqIFRoaXMgZmlsdGVyIGFwcGxpZXMgYSB0d2lzdCBlZmZlY3QgbWFraW5nIGRpc3BsYXkgb2JqZWN0cyBhcHBlYXIgdHdpc3RlZCBpbiB0aGUgZ2l2ZW4gZGlyZWN0aW9uLlxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5BYnN0cmFjdEZpbHRlclxuICogQG1lbWJlcm9mIFBJWEkuZmlsdGVyc1xuICovXG5mdW5jdGlvbiBUd2lzdEZpbHRlcigpXG57XG4gICAgY29yZS5BYnN0cmFjdEZpbHRlci5jYWxsKHRoaXMsXG4gICAgICAgIC8vIHZlcnRleCBzaGFkZXJcbiAgICAgICAgbnVsbCxcbiAgICAgICAgLy8gZnJhZ21lbnQgc2hhZGVyXG4gICAgICAgIFwicHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XFxuXFxudmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7XFxuXFxudW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXI7XFxudW5pZm9ybSBmbG9hdCByYWRpdXM7XFxudW5pZm9ybSBmbG9hdCBhbmdsZTtcXG51bmlmb3JtIHZlYzIgb2Zmc2V0O1xcblxcbnZvaWQgbWFpbih2b2lkKVxcbntcXG4gICB2ZWMyIGNvb3JkID0gdlRleHR1cmVDb29yZCAtIG9mZnNldDtcXG4gICBmbG9hdCBkaXN0ID0gbGVuZ3RoKGNvb3JkKTtcXG5cXG4gICBpZiAoZGlzdCA8IHJhZGl1cylcXG4gICB7XFxuICAgICAgIGZsb2F0IHJhdGlvID0gKHJhZGl1cyAtIGRpc3QpIC8gcmFkaXVzO1xcbiAgICAgICBmbG9hdCBhbmdsZU1vZCA9IHJhdGlvICogcmF0aW8gKiBhbmdsZTtcXG4gICAgICAgZmxvYXQgcyA9IHNpbihhbmdsZU1vZCk7XFxuICAgICAgIGZsb2F0IGMgPSBjb3MoYW5nbGVNb2QpO1xcbiAgICAgICBjb29yZCA9IHZlYzIoY29vcmQueCAqIGMgLSBjb29yZC55ICogcywgY29vcmQueCAqIHMgKyBjb29yZC55ICogYyk7XFxuICAgfVxcblxcbiAgIGdsX0ZyYWdDb2xvciA9IHRleHR1cmUyRCh1U2FtcGxlciwgY29vcmQrb2Zmc2V0KTtcXG59XFxuXCIsXG4gICAgICAgIC8vIGN1c3RvbSB1bmlmb3Jtc1xuICAgICAgICB7XG4gICAgICAgICAgICByYWRpdXM6ICAgICB7IHR5cGU6ICcxZicsIHZhbHVlOiAwLjUgfSxcbiAgICAgICAgICAgIGFuZ2xlOiAgICAgIHsgdHlwZTogJzFmJywgdmFsdWU6IDUgfSxcbiAgICAgICAgICAgIG9mZnNldDogICAgIHsgdHlwZTogJ3YyJywgdmFsdWU6IHsgeDogMC41LCB5OiAwLjUgfSB9XG4gICAgICAgIH1cbiAgICApO1xufVxuXG5Ud2lzdEZpbHRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuQWJzdHJhY3RGaWx0ZXIucHJvdG90eXBlKTtcblR3aXN0RmlsdGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFR3aXN0RmlsdGVyO1xubW9kdWxlLmV4cG9ydHMgPSBUd2lzdEZpbHRlcjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoVHdpc3RGaWx0ZXIucHJvdG90eXBlLCB7XG4gICAgLyoqXG4gICAgICogVGhpcyBwb2ludCBkZXNjcmliZXMgdGhlIHRoZSBvZmZzZXQgb2YgdGhlIHR3aXN0LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5Qb2ludH1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLlR3aXN0RmlsdGVyI1xuICAgICAqL1xuICAgIG9mZnNldDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVuaWZvcm1zLm9mZnNldC52YWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudW5pZm9ybXMub2Zmc2V0LnZhbHVlID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVGhpcyByYWRpdXMgb2YgdGhlIHR3aXN0LlxuICAgICAqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBQSVhJLmZpbHRlcnMuVHdpc3RGaWx0ZXIjXG4gICAgICovXG4gICAgcmFkaXVzOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudW5pZm9ybXMucmFkaXVzLnZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy5yYWRpdXMudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBUaGlzIGFuZ2xlIG9mIHRoZSB0d2lzdC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5maWx0ZXJzLlR3aXN0RmlsdGVyI1xuICAgICAqL1xuICAgIGFuZ2xlOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudW5pZm9ybXMuYW5nbGUudmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLmFuZ2xlLnZhbHVlID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG59KTtcbiIsIi8vIHJ1biB0aGUgcG9seWZpbGxzXG5yZXF1aXJlKCcuL3BvbHlmaWxsJyk7XG5cbnZhciBjb3JlID0gbW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL2NvcmUnKTtcblxuLy8gYWRkIGNvcmUgcGx1Z2lucy5cbmNvcmUuZXh0cmFzICAgICAgICAgPSByZXF1aXJlKCcuL2V4dHJhcycpO1xuY29yZS5maWx0ZXJzICAgICAgICA9IHJlcXVpcmUoJy4vZmlsdGVycycpO1xuY29yZS5pbnRlcmFjdGlvbiAgICA9IHJlcXVpcmUoJy4vaW50ZXJhY3Rpb24nKTtcbmNvcmUubG9hZGVycyAgICAgICAgPSByZXF1aXJlKCcuL2xvYWRlcnMnKTtcbmNvcmUubWVzaCAgICAgICAgICAgPSByZXF1aXJlKCcuL21lc2gnKTtcbmNvcmUuYWNjZXNzaWJpbGl0eSAgPSByZXF1aXJlKCcuL2FjY2Vzc2liaWxpdHknKTtcblxuLy8gZXhwb3J0IGEgcHJlbWFkZSBsb2FkZXIgaW5zdGFuY2Vcbi8qKlxuICogQSBwcmVtYWRlIGluc3RhbmNlIG9mIHRoZSBsb2FkZXIgdGhhdCBjYW4gYmUgdXNlZCB0byBsb2FkZXIgcmVzb3VyY2VzLlxuICpcbiAqIEBuYW1lIGxvYWRlclxuICogQG1lbWJlcm9mIFBJWElcbiAqIEBwcm9wZXJ0eSB7UElYSS5sb2FkZXJzLkxvYWRlcn1cbiAqL1xuY29yZS5sb2FkZXIgPSBuZXcgY29yZS5sb2FkZXJzLkxvYWRlcigpO1xuXG4vLyBtaXhpbiB0aGUgZGVwcmVjYXRpb24gZmVhdHVyZXMuXG5PYmplY3QuYXNzaWduKGNvcmUsIHJlcXVpcmUoJy4vZGVwcmVjYXRpb24nKSk7XG5cbi8vIEFsd2F5cyBleHBvcnQgcGl4aSBnbG9iYWxseS5cbmdsb2JhbC5QSVhJID0gY29yZTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vY29yZScpO1xuXG4vKipcbiAqIEhvbGRzIGFsbCBpbmZvcm1hdGlvbiByZWxhdGVkIHRvIGFuIEludGVyYWN0aW9uIGV2ZW50XG4gKlxuICogQGNsYXNzXG4gKiBAbWVtYmVyb2YgUElYSS5pbnRlcmFjdGlvblxuICovXG5mdW5jdGlvbiBJbnRlcmFjdGlvbkRhdGEoKVxue1xuICAgIC8qKlxuICAgICAqIFRoaXMgcG9pbnQgc3RvcmVzIHRoZSBnbG9iYWwgY29vcmRzIG9mIHdoZXJlIHRoZSB0b3VjaC9tb3VzZSBldmVudCBoYXBwZW5lZFxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5Qb2ludH1cbiAgICAgKi9cbiAgICB0aGlzLmdsb2JhbCA9IG5ldyBjb3JlLlBvaW50KCk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgdGFyZ2V0IFNwcml0ZSB0aGF0IHdhcyBpbnRlcmFjdGVkIHdpdGhcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuU3ByaXRlfVxuICAgICAqL1xuICAgIHRoaXMudGFyZ2V0ID0gbnVsbDtcblxuICAgIC8qKlxuICAgICAqIFdoZW4gcGFzc2VkIHRvIGFuIGV2ZW50IGhhbmRsZXIsIHRoaXMgd2lsbCBiZSB0aGUgb3JpZ2luYWwgRE9NIEV2ZW50IHRoYXQgd2FzIGNhcHR1cmVkXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtFdmVudH1cbiAgICAgKi9cbiAgICB0aGlzLm9yaWdpbmFsRXZlbnQgPSBudWxsO1xufVxuXG5JbnRlcmFjdGlvbkRhdGEucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gSW50ZXJhY3Rpb25EYXRhO1xubW9kdWxlLmV4cG9ydHMgPSBJbnRlcmFjdGlvbkRhdGE7XG5cbi8qKlxuICogVGhpcyB3aWxsIHJldHVybiB0aGUgbG9jYWwgY29vcmRpbmF0ZXMgb2YgdGhlIHNwZWNpZmllZCBkaXNwbGF5T2JqZWN0IGZvciB0aGlzIEludGVyYWN0aW9uRGF0YVxuICpcbiAqIEBwYXJhbSBkaXNwbGF5T2JqZWN0IHtQSVhJLkRpc3BsYXlPYmplY3R9IFRoZSBEaXNwbGF5T2JqZWN0IHRoYXQgeW91IHdvdWxkIGxpa2UgdGhlIGxvY2FsIGNvb3JkcyBvZmZcbiAqIEBwYXJhbSBbcG9pbnRdIHtQSVhJLlBvaW50fSBBIFBvaW50IG9iamVjdCBpbiB3aGljaCB0byBzdG9yZSB0aGUgdmFsdWUsIG9wdGlvbmFsIChvdGhlcndpc2Ugd2lsbCBjcmVhdGUgYSBuZXcgcG9pbnQpXG4gKiBAcGFyYW0gW2dsb2JhbFBvc10ge1BJWEkuUG9pbnR9IEEgUG9pbnQgb2JqZWN0IGNvbnRhaW5pbmcgeW91ciBjdXN0b20gZ2xvYmFsIGNvb3Jkcywgb3B0aW9uYWwgKG90aGVyd2lzZSB3aWxsIHVzZSB0aGUgY3VycmVudCBnbG9iYWwgY29vcmRzKVxuICogQHJldHVybiB7UElYSS5Qb2ludH0gQSBwb2ludCBjb250YWluaW5nIHRoZSBjb29yZGluYXRlcyBvZiB0aGUgSW50ZXJhY3Rpb25EYXRhIHBvc2l0aW9uIHJlbGF0aXZlIHRvIHRoZSBEaXNwbGF5T2JqZWN0XG4gKi9cbkludGVyYWN0aW9uRGF0YS5wcm90b3R5cGUuZ2V0TG9jYWxQb3NpdGlvbiA9IGZ1bmN0aW9uIChkaXNwbGF5T2JqZWN0LCBwb2ludCwgZ2xvYmFsUG9zKVxue1xuICAgIHJldHVybiBkaXNwbGF5T2JqZWN0LndvcmxkVHJhbnNmb3JtLmFwcGx5SW52ZXJzZShnbG9iYWxQb3MgfHwgdGhpcy5nbG9iYWwsIHBvaW50KTtcbn07XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uL2NvcmUnKSxcbiAgICBJbnRlcmFjdGlvbkRhdGEgPSByZXF1aXJlKCcuL0ludGVyYWN0aW9uRGF0YScpO1xuXG4vLyBNaXggaW50ZXJhY3RpdmVUYXJnZXQgaW50byBjb3JlLkRpc3BsYXlPYmplY3QucHJvdG90eXBlXG5PYmplY3QuYXNzaWduKFxuICAgIGNvcmUuRGlzcGxheU9iamVjdC5wcm90b3R5cGUsXG4gICAgcmVxdWlyZSgnLi9pbnRlcmFjdGl2ZVRhcmdldCcpXG4pO1xuXG4vKipcbiAqIFRoZSBpbnRlcmFjdGlvbiBtYW5hZ2VyIGRlYWxzIHdpdGggbW91c2UgYW5kIHRvdWNoIGV2ZW50cy4gQW55IERpc3BsYXlPYmplY3QgY2FuIGJlIGludGVyYWN0aXZlXG4gKiBpZiBpdHMgaW50ZXJhY3RpdmUgcGFyYW1ldGVyIGlzIHNldCB0byB0cnVlXG4gKiBUaGlzIG1hbmFnZXIgYWxzbyBzdXBwb3J0cyBtdWx0aXRvdWNoLlxuICpcbiAqIEBjbGFzc1xuICogQG1lbWJlcm9mIFBJWEkuaW50ZXJhY3Rpb25cbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5DYW52YXNSZW5kZXJlcnxQSVhJLldlYkdMUmVuZGVyZXJ9IEEgcmVmZXJlbmNlIHRvIHRoZSBjdXJyZW50IHJlbmRlcmVyXG4gKiBAcGFyYW0gW29wdGlvbnNdIHtvYmplY3R9XG4gKiBAcGFyYW0gW29wdGlvbnMuYXV0b1ByZXZlbnREZWZhdWx0PXRydWVdIHtib29sZWFufSBTaG91bGQgdGhlIG1hbmFnZXIgYXV0b21hdGljYWxseSBwcmV2ZW50IGRlZmF1bHQgYnJvd3NlciBhY3Rpb25zLlxuICogQHBhcmFtIFtvcHRpb25zLmludGVyYWN0aW9uRnJlcXVlbmN5PTEwXSB7bnVtYmVyfSBGcmVxdWVuY3kgaW5jcmVhc2VzIHRoZSBpbnRlcmFjdGlvbiBldmVudHMgd2lsbCBiZSBjaGVja2VkLlxuICovXG5mdW5jdGlvbiBJbnRlcmFjdGlvbk1hbmFnZXIocmVuZGVyZXIsIG9wdGlvbnMpXG57XG4gICAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG5cbiAgICAvKipcbiAgICAgKiBUaGUgcmVuZGVyZXIgdGhpcyBpbnRlcmFjdGlvbiBtYW5hZ2VyIHdvcmtzIGZvci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuU3lzdGVtUmVuZGVyZXJ9XG4gICAgICovXG4gICAgdGhpcy5yZW5kZXJlciA9IHJlbmRlcmVyO1xuXG4gICAgLyoqXG4gICAgICogU2hvdWxkIGRlZmF1bHQgYnJvd3NlciBhY3Rpb25zIGF1dG9tYXRpY2FsbHkgYmUgcHJldmVudGVkLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7Ym9vbGVhbn1cbiAgICAgKiBAZGVmYXVsdCB0cnVlXG4gICAgICovXG4gICAgdGhpcy5hdXRvUHJldmVudERlZmF1bHQgPSBvcHRpb25zLmF1dG9QcmV2ZW50RGVmYXVsdCAhPT0gdW5kZWZpbmVkID8gb3B0aW9ucy5hdXRvUHJldmVudERlZmF1bHQgOiB0cnVlO1xuXG4gICAgLyoqXG4gICAgICogQXMgdGhpcyBmcmVxdWVuY3kgaW5jcmVhc2VzIHRoZSBpbnRlcmFjdGlvbiBldmVudHMgd2lsbCBiZSBjaGVja2VkIG1vcmUgb2Z0ZW4uXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMTBcbiAgICAgKi9cbiAgICB0aGlzLmludGVyYWN0aW9uRnJlcXVlbmN5ID0gb3B0aW9ucy5pbnRlcmFjdGlvbkZyZXF1ZW5jeSB8fCAxMDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBtb3VzZSBkYXRhXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLmludGVyYWN0aW9uLkludGVyYWN0aW9uRGF0YX1cbiAgICAgKi9cbiAgICB0aGlzLm1vdXNlID0gbmV3IEludGVyYWN0aW9uRGF0YSgpO1xuXG4gICAgLyoqXG4gICAgICogQW4gZXZlbnQgZGF0YSBvYmplY3QgdG8gaGFuZGxlIGFsbCB0aGUgZXZlbnQgdHJhY2tpbmcvZGlzcGF0Y2hpbmdcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge29iamVjdH1cbiAgICAgKi9cbiAgICB0aGlzLmV2ZW50RGF0YSA9IHtcbiAgICAgICAgc3RvcHBlZDogZmFsc2UsXG4gICAgICAgIHRhcmdldDogbnVsbCxcbiAgICAgICAgdHlwZTogbnVsbCxcbiAgICAgICAgZGF0YTogdGhpcy5tb3VzZSxcbiAgICAgICAgc3RvcFByb3BhZ2F0aW9uOmZ1bmN0aW9uKCl7XG4gICAgICAgICAgICB0aGlzLnN0b3BwZWQgPSB0cnVlO1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIC8qKlxuICAgICAqIFRpbnkgbGl0dGxlIGludGVyYWN0aXZlRGF0YSBwb29sICFcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuaW50ZXJhY3Rpb24uSW50ZXJhY3Rpb25EYXRhW119XG4gICAgICovXG4gICAgdGhpcy5pbnRlcmFjdGl2ZURhdGFQb29sID0gW107XG5cbiAgICAvKipcbiAgICAgKiBUaGUgRE9NIGVsZW1lbnQgdG8gYmluZCB0by5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge0hUTUxFbGVtZW50fVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5pbnRlcmFjdGlvbkRPTUVsZW1lbnQgPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogSGF2ZSBldmVudHMgYmVlbiBhdHRhY2hlZCB0byB0aGUgZG9tIGVsZW1lbnQ/XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5ldmVudHNBZGRlZCA9IGZhbHNlO1xuXG4gICAgLy90aGlzIHdpbGwgbWFrZSBpdCBzbyB0aGF0IHlvdSBkb24ndCBoYXZlIHRvIGNhbGwgYmluZCBhbGwgdGhlIHRpbWVcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge0Z1bmN0aW9ufVxuICAgICAqL1xuICAgIHRoaXMub25Nb3VzZVVwID0gdGhpcy5vbk1vdXNlVXAuYmluZCh0aGlzKTtcbiAgICB0aGlzLnByb2Nlc3NNb3VzZVVwID0gdGhpcy5wcm9jZXNzTW91c2VVcC5iaW5kKCB0aGlzICk7XG5cblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge0Z1bmN0aW9ufVxuICAgICAqL1xuICAgIHRoaXMub25Nb3VzZURvd24gPSB0aGlzLm9uTW91c2VEb3duLmJpbmQodGhpcyk7XG4gICAgdGhpcy5wcm9jZXNzTW91c2VEb3duID0gdGhpcy5wcm9jZXNzTW91c2VEb3duLmJpbmQoIHRoaXMgKTtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXIge0Z1bmN0aW9ufVxuICAgICAqL1xuICAgIHRoaXMub25Nb3VzZU1vdmUgPSB0aGlzLm9uTW91c2VNb3ZlLmJpbmQoIHRoaXMgKTtcbiAgICB0aGlzLnByb2Nlc3NNb3VzZU1vdmUgPSB0aGlzLnByb2Nlc3NNb3VzZU1vdmUuYmluZCggdGhpcyApO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7RnVuY3Rpb259XG4gICAgICovXG4gICAgdGhpcy5vbk1vdXNlT3V0ID0gdGhpcy5vbk1vdXNlT3V0LmJpbmQodGhpcyk7XG4gICAgdGhpcy5wcm9jZXNzTW91c2VPdmVyT3V0ID0gdGhpcy5wcm9jZXNzTW91c2VPdmVyT3V0LmJpbmQoIHRoaXMgKTtcblxuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7RnVuY3Rpb259XG4gICAgICovXG4gICAgdGhpcy5vblRvdWNoU3RhcnQgPSB0aGlzLm9uVG91Y2hTdGFydC5iaW5kKHRoaXMpO1xuICAgIHRoaXMucHJvY2Vzc1RvdWNoU3RhcnQgPSB0aGlzLnByb2Nlc3NUb3VjaFN0YXJ0LmJpbmQodGhpcyk7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtGdW5jdGlvbn1cbiAgICAgKi9cbiAgICB0aGlzLm9uVG91Y2hFbmQgPSB0aGlzLm9uVG91Y2hFbmQuYmluZCh0aGlzKTtcbiAgICB0aGlzLnByb2Nlc3NUb3VjaEVuZCA9IHRoaXMucHJvY2Vzc1RvdWNoRW5kLmJpbmQodGhpcyk7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyIHtGdW5jdGlvbn1cbiAgICAgKi9cbiAgICB0aGlzLm9uVG91Y2hNb3ZlID0gdGhpcy5vblRvdWNoTW92ZS5iaW5kKHRoaXMpO1xuICAgIHRoaXMucHJvY2Vzc1RvdWNoTW92ZSA9IHRoaXMucHJvY2Vzc1RvdWNoTW92ZS5iaW5kKHRoaXMpO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlciB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMubGFzdCA9IDA7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgY3NzIHN0eWxlIG9mIHRoZSBjdXJzb3IgdGhhdCBpcyBiZWluZyB1c2VkXG4gICAgICogQG1lbWJlciB7c3RyaW5nfVxuICAgICAqL1xuICAgIHRoaXMuY3VycmVudEN1cnNvclN0eWxlID0gJ2luaGVyaXQnO1xuXG4gICAgLyoqXG4gICAgICogSW50ZXJuYWwgY2FjaGVkIHZhclxuICAgICAqIEBtZW1iZXIge1BJWEkuUG9pbnR9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl90ZW1wUG9pbnQgPSBuZXcgY29yZS5Qb2ludCgpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGN1cnJlbnQgcmVzb2x1dGlvblxuICAgICAqIEBtZW1iZXIge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLnJlc29sdXRpb24gPSAxO1xuXG4gICAgdGhpcy5zZXRUYXJnZXRFbGVtZW50KHRoaXMucmVuZGVyZXIudmlldywgdGhpcy5yZW5kZXJlci5yZXNvbHV0aW9uKTtcbn1cblxuSW50ZXJhY3Rpb25NYW5hZ2VyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IEludGVyYWN0aW9uTWFuYWdlcjtcbm1vZHVsZS5leHBvcnRzID0gSW50ZXJhY3Rpb25NYW5hZ2VyO1xuXG4vKipcbiAqIFNldHMgdGhlIERPTSBlbGVtZW50IHdoaWNoIHdpbGwgcmVjZWl2ZSBtb3VzZS90b3VjaCBldmVudHMuIFRoaXMgaXMgdXNlZnVsIGZvciB3aGVuIHlvdSBoYXZlXG4gKiBvdGhlciBET00gZWxlbWVudHMgb24gdG9wIG9mIHRoZSByZW5kZXJlcnMgQ2FudmFzIGVsZW1lbnQuIFdpdGggdGhpcyB5b3UnbGwgYmUgYmFsZSB0byBkZWxldGVnYXRlXG4gKiBhbm90aGVyIERPTSBlbGVtZW50IHRvIHJlY2VpdmUgdGhvc2UgZXZlbnRzLlxuICpcbiAqIEBwYXJhbSBlbGVtZW50IHtIVE1MRWxlbWVudH0gdGhlIERPTSBlbGVtZW50IHdoaWNoIHdpbGwgcmVjZWl2ZSBtb3VzZSBhbmQgdG91Y2ggZXZlbnRzLlxuICogQHBhcmFtIFtyZXNvbHV0aW9uPTFdIHtudW1iZXJ9IFRIZSByZXNvbHV0aW9uIG9mIHRoZSBuZXcgZWxlbWVudCAocmVsYXRpdmUgdG8gdGhlIGNhbnZhcykuXG4gKiBAcHJpdmF0ZVxuICovXG5JbnRlcmFjdGlvbk1hbmFnZXIucHJvdG90eXBlLnNldFRhcmdldEVsZW1lbnQgPSBmdW5jdGlvbiAoZWxlbWVudCwgcmVzb2x1dGlvbilcbntcbiAgICB0aGlzLnJlbW92ZUV2ZW50cygpO1xuXG4gICAgdGhpcy5pbnRlcmFjdGlvbkRPTUVsZW1lbnQgPSBlbGVtZW50O1xuXG4gICAgdGhpcy5yZXNvbHV0aW9uID0gcmVzb2x1dGlvbiB8fCAxO1xuXG4gICAgdGhpcy5hZGRFdmVudHMoKTtcbn07XG5cbi8qKlxuICogUmVnaXN0ZXJzIGFsbCB0aGUgRE9NIGV2ZW50c1xuICpcbiAqIEBwcml2YXRlXG4gKi9cbkludGVyYWN0aW9uTWFuYWdlci5wcm90b3R5cGUuYWRkRXZlbnRzID0gZnVuY3Rpb24gKClcbntcbiAgICBpZiAoIXRoaXMuaW50ZXJhY3Rpb25ET01FbGVtZW50KVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvcmUudGlja2VyLnNoYXJlZC5hZGQodGhpcy51cGRhdGUsIHRoaXMpO1xuXG4gICAgaWYgKHdpbmRvdy5uYXZpZ2F0b3IubXNQb2ludGVyRW5hYmxlZClcbiAgICB7XG4gICAgICAgIHRoaXMuaW50ZXJhY3Rpb25ET01FbGVtZW50LnN0eWxlWyctbXMtY29udGVudC16b29taW5nJ10gPSAnbm9uZSc7XG4gICAgICAgIHRoaXMuaW50ZXJhY3Rpb25ET01FbGVtZW50LnN0eWxlWyctbXMtdG91Y2gtYWN0aW9uJ10gPSAnbm9uZSc7XG4gICAgfVxuXG4gICAgd2luZG93LmRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlbW92ZScsICAgIHRoaXMub25Nb3VzZU1vdmUsIHRydWUpO1xuICAgIHRoaXMuaW50ZXJhY3Rpb25ET01FbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlZG93bicsICAgIHRoaXMub25Nb3VzZURvd24sIHRydWUpO1xuICAgIHRoaXMuaW50ZXJhY3Rpb25ET01FbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlb3V0JywgICAgIHRoaXMub25Nb3VzZU91dCwgdHJ1ZSk7XG5cbiAgICB0aGlzLmludGVyYWN0aW9uRE9NRWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCd0b3VjaHN0YXJ0JywgICB0aGlzLm9uVG91Y2hTdGFydCwgdHJ1ZSk7XG4gICAgdGhpcy5pbnRlcmFjdGlvbkRPTUVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigndG91Y2hlbmQnLCAgICAgdGhpcy5vblRvdWNoRW5kLCB0cnVlKTtcbiAgICB0aGlzLmludGVyYWN0aW9uRE9NRWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCd0b3VjaG1vdmUnLCAgICB0aGlzLm9uVG91Y2hNb3ZlLCB0cnVlKTtcblxuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdtb3VzZXVwJywgIHRoaXMub25Nb3VzZVVwLCB0cnVlKTtcblxuICAgIHRoaXMuZXZlbnRzQWRkZWQgPSB0cnVlO1xufTtcblxuLyoqXG4gKiBSZW1vdmVzIGFsbCB0aGUgRE9NIGV2ZW50cyB0aGF0IHdlcmUgcHJldmlvdXNseSByZWdpc3RlcmVkXG4gKlxuICogQHByaXZhdGVcbiAqL1xuSW50ZXJhY3Rpb25NYW5hZ2VyLnByb3RvdHlwZS5yZW1vdmVFdmVudHMgPSBmdW5jdGlvbiAoKVxue1xuICAgIGlmICghdGhpcy5pbnRlcmFjdGlvbkRPTUVsZW1lbnQpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29yZS50aWNrZXIuc2hhcmVkLnJlbW92ZSh0aGlzLnVwZGF0ZSk7XG5cbiAgICBpZiAod2luZG93Lm5hdmlnYXRvci5tc1BvaW50ZXJFbmFibGVkKVxuICAgIHtcbiAgICAgICAgdGhpcy5pbnRlcmFjdGlvbkRPTUVsZW1lbnQuc3R5bGVbJy1tcy1jb250ZW50LXpvb21pbmcnXSA9ICcnO1xuICAgICAgICB0aGlzLmludGVyYWN0aW9uRE9NRWxlbWVudC5zdHlsZVsnLW1zLXRvdWNoLWFjdGlvbiddID0gJyc7XG4gICAgfVxuXG4gICAgd2luZG93LmRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21vdXNlbW92ZScsIHRoaXMub25Nb3VzZU1vdmUsIHRydWUpO1xuICAgIHRoaXMuaW50ZXJhY3Rpb25ET01FbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21vdXNlZG93bicsIHRoaXMub25Nb3VzZURvd24sIHRydWUpO1xuICAgIHRoaXMuaW50ZXJhY3Rpb25ET01FbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21vdXNlb3V0JywgIHRoaXMub25Nb3VzZU91dCwgdHJ1ZSk7XG5cbiAgICB0aGlzLmludGVyYWN0aW9uRE9NRWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCd0b3VjaHN0YXJ0JywgdGhpcy5vblRvdWNoU3RhcnQsIHRydWUpO1xuICAgIHRoaXMuaW50ZXJhY3Rpb25ET01FbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3RvdWNoZW5kJywgIHRoaXMub25Ub3VjaEVuZCwgdHJ1ZSk7XG4gICAgdGhpcy5pbnRlcmFjdGlvbkRPTUVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigndG91Y2htb3ZlJywgdGhpcy5vblRvdWNoTW92ZSwgdHJ1ZSk7XG5cbiAgICB0aGlzLmludGVyYWN0aW9uRE9NRWxlbWVudCA9IG51bGw7XG5cbiAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcignbW91c2V1cCcsICB0aGlzLm9uTW91c2VVcCwgdHJ1ZSk7XG5cbiAgICB0aGlzLmV2ZW50c0FkZGVkID0gZmFsc2U7XG59O1xuXG4vKipcbiAqIFVwZGF0ZXMgdGhlIHN0YXRlIG9mIGludGVyYWN0aXZlIG9iamVjdHMuXG4gKiBJbnZva2VkIGJ5IGEgdGhyb3R0bGVkIHRpY2tlciB1cGRhdGUgZnJvbVxuICoge0BsaW5rIFBJWEkudGlja2VyLnNoYXJlZH0uXG4gKlxuICogQHBhcmFtIGRlbHRhVGltZSB7bnVtYmVyfVxuICovXG5JbnRlcmFjdGlvbk1hbmFnZXIucHJvdG90eXBlLnVwZGF0ZSA9IGZ1bmN0aW9uIChkZWx0YVRpbWUpXG57XG4gICAgdGhpcy5fZGVsdGFUaW1lICs9IGRlbHRhVGltZTtcblxuICAgIGlmICh0aGlzLl9kZWx0YVRpbWUgPCB0aGlzLmludGVyYWN0aW9uRnJlcXVlbmN5KVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuX2RlbHRhVGltZSA9IDA7XG5cbiAgICBpZiAoIXRoaXMuaW50ZXJhY3Rpb25ET01FbGVtZW50KVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIGlmIHRoZSB1c2VyIG1vdmUgdGhlIG1vdXNlIHRoaXMgY2hlY2sgaGFzIGFscmVhZHkgYmVlbiBkZm9uZSB1c2luZyB0aGUgbW91c2UgbW92ZSFcbiAgICBpZih0aGlzLmRpZE1vdmUpXG4gICAge1xuICAgICAgICB0aGlzLmRpZE1vdmUgPSBmYWxzZTtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuY3Vyc29yID0gJ2luaGVyaXQnO1xuXG4gICAgdGhpcy5wcm9jZXNzSW50ZXJhY3RpdmUodGhpcy5tb3VzZS5nbG9iYWwsIHRoaXMucmVuZGVyZXIuX2xhc3RPYmplY3RSZW5kZXJlZCwgdGhpcy5wcm9jZXNzTW91c2VPdmVyT3V0LCB0cnVlICk7XG5cbiAgICBpZiAodGhpcy5jdXJyZW50Q3Vyc29yU3R5bGUgIT09IHRoaXMuY3Vyc29yKVxuICAgIHtcbiAgICAgICAgdGhpcy5jdXJyZW50Q3Vyc29yU3R5bGUgPSB0aGlzLmN1cnNvcjtcbiAgICAgICAgdGhpcy5pbnRlcmFjdGlvbkRPTUVsZW1lbnQuc3R5bGUuY3Vyc29yID0gdGhpcy5jdXJzb3I7XG4gICAgfVxuXG4gICAgLy9UT0RPXG59O1xuXG4vKipcbiAqIERpc3BhdGNoZXMgYW4gZXZlbnQgb24gdGhlIGRpc3BsYXkgb2JqZWN0IHRoYXQgd2FzIGludGVyYWN0ZWQgd2l0aFxuICpcbiAqIEBwYXJhbSBkaXNwbGF5T2JqZWN0IHtQSVhJLkNvbnRhaW5lcnxQSVhJLlNwcml0ZXxQSVhJLmV4dHJhcy5UaWxpbmdTcHJpdGV9IHRoZSBkaXNwbGF5IG9iamVjdCBpbiBxdWVzdGlvblxuICogQHBhcmFtIGV2ZW50U3RyaW5nIHtzdHJpbmd9IHRoZSBuYW1lIG9mIHRoZSBldmVudCAoZS5nLCBtb3VzZWRvd24pXG4gKiBAcGFyYW0gZXZlbnREYXRhIHtvYmplY3R9IHRoZSBldmVudCBkYXRhIG9iamVjdFxuICogQHByaXZhdGVcbiAqL1xuSW50ZXJhY3Rpb25NYW5hZ2VyLnByb3RvdHlwZS5kaXNwYXRjaEV2ZW50ID0gZnVuY3Rpb24gKCBkaXNwbGF5T2JqZWN0LCBldmVudFN0cmluZywgZXZlbnREYXRhIClcbntcbiAgICBpZighZXZlbnREYXRhLnN0b3BwZWQpXG4gICAge1xuICAgICAgICBldmVudERhdGEudGFyZ2V0ID0gZGlzcGxheU9iamVjdDtcbiAgICAgICAgZXZlbnREYXRhLnR5cGUgPSBldmVudFN0cmluZztcblxuICAgICAgICBkaXNwbGF5T2JqZWN0LmVtaXQoIGV2ZW50U3RyaW5nLCBldmVudERhdGEgKTtcblxuICAgICAgICBpZiggZGlzcGxheU9iamVjdFtldmVudFN0cmluZ10gKVxuICAgICAgICB7XG4gICAgICAgICAgICBkaXNwbGF5T2JqZWN0W2V2ZW50U3RyaW5nXSggZXZlbnREYXRhICk7XG4gICAgICAgIH1cbiAgICB9XG59O1xuXG4vKipcbiAqIE1hcHMgeCBhbmQgeSBjb29yZHMgZnJvbSBhIERPTSBvYmplY3QgYW5kIG1hcHMgdGhlbSBjb3JyZWN0bHkgdG8gdGhlIHBpeGkgdmlldy4gVGhlIHJlc3VsdGluZyB2YWx1ZSBpcyBzdG9yZWQgaW4gdGhlIHBvaW50LlxuICogVGhpcyB0YWtlcyBpbnRvIGFjY291bnQgdGhlIGZhY3QgdGhhdCB0aGUgRE9NIGVsZW1lbnQgY291bGQgYmUgc2NhbGVkIGFuZCBwb3NpdGlvbmVkIGFueXdoZXJlIG9uIHRoZSBzY3JlZW4uXG4gKlxuICogQHBhcmFtICB7UElYSS5Qb2ludH0gcG9pbnQgdGhlIHBvaW50IHRoYXQgdGhlIHJlc3VsdCB3aWxsIGJlIHN0b3JlZCBpblxuICogQHBhcmFtICB7bnVtYmVyfSB4ICAgICB0aGUgeCBjb29yZCBvZiB0aGUgcG9zaXRpb24gdG8gbWFwXG4gKiBAcGFyYW0gIHtudW1iZXJ9IHkgICAgIHRoZSB5IGNvb3JkIG9mIHRoZSBwb3NpdGlvbiB0byBtYXBcbiAqL1xuSW50ZXJhY3Rpb25NYW5hZ2VyLnByb3RvdHlwZS5tYXBQb3NpdGlvblRvUG9pbnQgPSBmdW5jdGlvbiAoIHBvaW50LCB4LCB5IClcbntcbiAgICB2YXIgcmVjdCA9IHRoaXMuaW50ZXJhY3Rpb25ET01FbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgIHBvaW50LnggPSAoICggeCAtIHJlY3QubGVmdCApICogKHRoaXMuaW50ZXJhY3Rpb25ET01FbGVtZW50LndpZHRoICAvIHJlY3Qud2lkdGggICkgKSAvIHRoaXMucmVzb2x1dGlvbjtcbiAgICBwb2ludC55ID0gKCAoIHkgLSByZWN0LnRvcCAgKSAqICh0aGlzLmludGVyYWN0aW9uRE9NRWxlbWVudC5oZWlnaHQgLyByZWN0LmhlaWdodCApICkgLyB0aGlzLnJlc29sdXRpb247XG59O1xuXG4vKipcbiAqIFRoaXMgZnVuY3Rpb24gaXMgcHJvdmlkZXMgYSBuZWF0IHdheSBvZiBjcmF3bGluZyB0aHJvdWdoIHRoZSBzY2VuZSBncmFwaCBhbmQgcnVubmluZyBhIHNwZWNpZmllZCBmdW5jdGlvbiBvbiBhbGwgaW50ZXJhY3RpdmUgb2JqZWN0cyBpdCBmaW5kcy5cbiAqIEl0IHdpbGwgYWxzbyB0YWtlIGNhcmUgb2YgaGl0IHRlc3RpbmcgdGhlIGludGVyYWN0aXZlIG9iamVjdHMgYW5kIHBhc3NlcyB0aGUgaGl0IGFjcm9zcyBpbiB0aGUgZnVuY3Rpb24uXG4gKlxuICogQHBhcmFtICB7UElYSS5Qb2ludH0gcG9pbnQgdGhlIHBvaW50IHRoYXQgaXMgdGVzdGVkIGZvciBjb2xsaXNpb25cbiAqIEBwYXJhbSAge1BJWEkuQ29udGFpbmVyfFBJWEkuU3ByaXRlfFBJWEkuZXh0cmFzLlRpbGluZ1Nwcml0ZX0gZGlzcGxheU9iamVjdCB0aGUgZGlzcGxheU9iamVjdCB0aGF0IHdpbGwgYmUgaGl0IHRlc3QgKHJlY3VyY3Npdmx5IGNyYXdscyBpdHMgY2hpbGRyZW4pXG4gKiBAcGFyYW0gIHtGdW5jdGlvbn0gZnVuYyB0aGUgZnVuY3Rpb24gdGhhdCB3aWxsIGJlIGNhbGxlZCBvbiBlYWNoIGludGVyYWN0aXZlIG9iamVjdC4gVGhlIGRpc3BsYXlPYmplY3QgYW5kIGhpdCB3aWxsIGJlIHBhc3NlZCB0byB0aGUgZnVuY3Rpb25cbiAqIEBwYXJhbSAge2Jvb2xlYW59IGhpdFRlc3QgdGhpcyBpbmRpY2F0ZXMgaWYgdGhlIG9iamVjdHMgaW5zaWRlIHNob3VsZCBiZSBoaXQgdGVzdCBhZ2FpbnN0IHRoZSBwb2ludFxuICogQHJldHVybiB7Ym9vbGVhbn0gcmV0dXJucyB0cnVlIGlmIHRoZSBkaXNwbGF5T2JqZWN0IGhpdCB0aGUgcG9pbnRcbiAqL1xuSW50ZXJhY3Rpb25NYW5hZ2VyLnByb3RvdHlwZS5wcm9jZXNzSW50ZXJhY3RpdmUgPSBmdW5jdGlvbiAocG9pbnQsIGRpc3BsYXlPYmplY3QsIGZ1bmMsIGhpdFRlc3QsIGludGVyYWN0aXZlKVxue1xuICAgIGlmKCFkaXNwbGF5T2JqZWN0IHx8ICFkaXNwbGF5T2JqZWN0LnZpc2libGUpXG4gICAge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgLy8gVG9vayBhIGxpdHRsZSB3aGlsZSB0byByZXdvcmsgdGhpcyBmdW5jdGlvbiBjb3JyZWN0bHkhIEJ1dCBub3cgaXQgaXMgZG9uZSBhbmQgbmljZSBhbmQgb3B0aW1pc2VkLiBeX15cbiAgICAvLyBcbiAgICAvLyBUaGlzIGZ1bmN0aW9uIHdpbGwgbm93IGxvb3AgdGhyb3VnaCBhbGwgb2JqZWN0cyBhbmQgdGhlbiBvbmx5IGhpdCB0ZXN0IHRoZSBvYmplY3RzIGl0IEhBUyB0bywgbm90IGFsbCBvZiB0aGVtLiBNVUNIIGZhc3Rlci4uXG4gICAgLy8gQW4gb2JqZWN0IHdpbGwgYmUgaGl0IHRlc3QgaWYgdGhlIGZvbGxvd2luZyBpcyB0cnVlOlxuICAgIC8vIFxuICAgIC8vIDE6IEl0IGlzIGludGVyYWN0aXZlLlxuICAgIC8vIDI6IEl0IGJlbG9uZ3MgdG8gYSBwYXJlbnQgdGhhdCBpcyBpbnRlcmFjdGl2ZSBBTkQgb25lIG9mIHRoZSBwYXJlbnRzIGNoaWxkcmVuIGhhdmUgbm90IGFscmVhZHkgYmVlbiBoaXQuXG4gICAgLy8gXG4gICAgLy8gQXMgYW5vdGhlciBsaXR0bGUgb3B0aW1pc2F0aW9uIG9uY2UgYW4gaW50ZXJhY3RpdmUgb2JqZWN0IGhhcyBiZWVuIGhpdCB3ZSBjYW4gY2Fycnkgb24gdGhyb3VnaCB0aGUgc2NlbmVncmFwaCwgYnV0IHdlIGtub3cgdGhhdCB0aGVyZSB3aWxsIGJlIG5vIG1vcmUgaGl0cyEgU28gd2UgY2FuIGF2b2lkIGV4dHJhIGhpdCB0ZXN0c1xuICAgIC8vIEEgZmluYWwgb3B0aW1pc2F0aW9uIGlzIHRoYXQgYW4gb2JqZWN0IGlzIG5vdCBoaXQgdGVzdCBkaXJlY3RseSBpZiBhIGNoaWxkIGhhcyBhbHJlYWR5IGJlZW4gaGl0LlxuICAgIFxuICAgIHZhciBoaXQgPSBmYWxzZSxcbiAgICAgICAgaW50ZXJhY3RpdmVQYXJlbnQgPSBpbnRlcmFjdGl2ZSA9IGRpc3BsYXlPYmplY3QuaW50ZXJhY3RpdmUgfHwgaW50ZXJhY3RpdmU7XG5cbiAgICAvLyBpZiB0aGUgZGlzcGxheW9iamVjdCBoYXMgYSBoaXRBcmVhLCB0aGVuIGl0IGRvZXMgbm90IG5lZWQgdG8gaGl0VGVzdCBjaGlsZHJlbi5cbiAgICBpZihkaXNwbGF5T2JqZWN0LmhpdEFyZWEpXG4gICAge1xuICAgICAgICBpbnRlcmFjdGl2ZVBhcmVudCA9IGZhbHNlO1xuICAgIH1cblxuICAgIC8vICoqIEZSRUUgVElQICoqISBJZiBhbiBvYmplY3QgaXMgbm90IGludGVyYWN0dGl2ZSBvciBoYXMgbm8gYnV0dG9ucyBpbiBpdCAoc3VjaCBhcyBhIGdhbWUgc2NlbmUhKSBzZXQgaW50ZXJhY3RpdmVDaGlsZHJlbiB0byBmYWxzZSBmb3IgdGhhdCBkaXNwbGF5T2JqZWN0LlxuICAgIC8vIFRoaXMgd2lsbCBhbGxvdyBwaXhpIHRvIGNvbXBsZXRseSBpZ25vcmUgYW5kIGJ5cGFzcyBjaGVja2luZyB0aGUgZGlzcGxheU9iamVjdHMgY2hpbGRyZW4uXG4gICAgaWYoZGlzcGxheU9iamVjdC5pbnRlcmFjdGl2ZUNoaWxkcmVuKVxuICAgIHsgICAgICAgXG4gICAgICAgIHZhciBjaGlsZHJlbiA9IGRpc3BsYXlPYmplY3QuY2hpbGRyZW47XG4gICAgICAgIFxuICAgICAgICBmb3IgKHZhciBpID0gY2hpbGRyZW4ubGVuZ3RoLTE7IGkgPj0gMDsgaS0tKVxuICAgICAgICB7XG4gICAgICAgICAgICAvLyB0aW1lIHRvIGdldCByZWN1cnNpdmUuLiBpZiB0aGlzIGZ1bmN0aW9uIHdpbGwgcmV0dXJuIGlmIHNvbXRoaW5nIGlzIGhpdC4uXG4gICAgICAgICAgICBpZiggdGhpcy5wcm9jZXNzSW50ZXJhY3RpdmUocG9pbnQsIGNoaWxkcmVuW2ldLCBmdW5jLCBoaXRUZXN0LCBpbnRlcmFjdGl2ZVBhcmVudCkgKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGhpdCA9IHRydWU7XG5cbiAgICAgICAgICAgICAgICAvLyB3ZSBubyBsb25nZXIgbmVlZCB0byBoaXQgdGVzdCBhbnkgbW9yZSBvYmplY3RzIGluIHRoaXMgY29udGFpbmVyIGFzIHdlIHdlIG5vdyBrbm93IHRoZSBwYXJlbnQgaGFzIGJlZW4gaGl0XG4gICAgICAgICAgICAgICAgaW50ZXJhY3RpdmVQYXJlbnQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAvLyBJZiB0aGUgY2hpbGQgaXMgaW50ZXJhY3RpdmUgLCB0aGF0IG1lYW5zIHRoYXQgdGhlIG9iamVjdCBoaXQgd2FzIGFjdHVhbGx5IGludGVyYWN0aXZlIGFuZCBub3QganVzdCB0aGUgY2hpbGQgb2YgYW4gaW50ZXJhY3RpdmUgb2JqZWN0LiBcbiAgICAgICAgICAgICAgICAvLyBUaGlzIG1lYW5zIHdlIG5vIGxvbmdlciBuZWVkIHRvIGhpdCB0ZXN0IGFueXRoaW5nIGVsc2UuIFdlIHN0aWxsIG5lZWQgdG8gcnVuIHRocm91Z2ggYWxsIG9iamVjdHMsIGJ1dCB3ZSBkb24ndCBuZWVkIHRvIHBlcmZvcm0gYW55IGhpdCB0ZXN0cy5cbiAgICAgICAgICAgICAgICBpZihjaGlsZHJlbltpXS5pbnRlcmFjdGl2ZSlcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIGhpdFRlc3QgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBubyBwb2ludCBydW5uaW5nIHRoaXMgaWYgdGhlIGl0ZW0gaXMgbm90IGludGVyYWN0aXZlIG9yIGRvZXMgbm90IGhhdmUgYW4gaW50ZXJhY3RpdmUgcGFyZW50LlxuICAgIGlmKGludGVyYWN0aXZlKVxuICAgIHtcbiAgICAgICAgLy8gaWYgd2UgYXJlIGhpdCB0ZXN0aW5nIChhcyBpbiB3ZSBoYXZlIG5vIGhpdCBhbnkgb2JqZWN0cyB5ZXQpXG4gICAgICAgIC8vIFdlIGFsc28gZG9uJ3QgbmVlZCB0byB3b3JyeSBhYm91dCBoaXQgdGVzdGluZyBpZiBvbmNlIG9mIHRoZSBkaXNwbGF5T2JqZWN0cyBjaGlsZHJlbiBoYXMgYWxyZWFkeSBiZWVuIGhpdCFcbiAgICAgICAgaWYoaGl0VGVzdCAmJiAhaGl0KVxuICAgICAgICB7ICBcbiAgICAgICAgICAgIGlmKGRpc3BsYXlPYmplY3QuaGl0QXJlYSlcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBkaXNwbGF5T2JqZWN0LndvcmxkVHJhbnNmb3JtLmFwcGx5SW52ZXJzZShwb2ludCwgIHRoaXMuX3RlbXBQb2ludCk7XG4gICAgICAgICAgICAgICAgaGl0ID0gZGlzcGxheU9iamVjdC5oaXRBcmVhLmNvbnRhaW5zKCB0aGlzLl90ZW1wUG9pbnQueCwgdGhpcy5fdGVtcFBvaW50LnkgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYoZGlzcGxheU9iamVjdC5jb250YWluc1BvaW50KVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGhpdCA9IGRpc3BsYXlPYmplY3QuY29udGFpbnNQb2ludChwb2ludCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZihkaXNwbGF5T2JqZWN0LmludGVyYWN0aXZlKVxuICAgICAgICB7XG4gICAgICAgICAgICBmdW5jKGRpc3BsYXlPYmplY3QsIGhpdCk7IFxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGhpdDtcbiAgXG59O1xuXG5cbi8qKlxuICogSXMgY2FsbGVkIHdoZW4gdGhlIG1vdXNlIGJ1dHRvbiBpcyBwcmVzc2VkIGRvd24gb24gdGhlIHJlbmRlcmVyIGVsZW1lbnRcbiAqXG4gKiBAcGFyYW0gZXZlbnQge0V2ZW50fSBUaGUgRE9NIGV2ZW50IG9mIGEgbW91c2UgYnV0dG9uIGJlaW5nIHByZXNzZWQgZG93blxuICogQHByaXZhdGVcbiAqL1xuSW50ZXJhY3Rpb25NYW5hZ2VyLnByb3RvdHlwZS5vbk1vdXNlRG93biA9IGZ1bmN0aW9uIChldmVudClcbntcbiAgICB0aGlzLm1vdXNlLm9yaWdpbmFsRXZlbnQgPSBldmVudDtcbiAgICB0aGlzLmV2ZW50RGF0YS5kYXRhID0gdGhpcy5tb3VzZTtcbiAgICB0aGlzLmV2ZW50RGF0YS5zdG9wcGVkID0gZmFsc2U7XG5cbiAgICAvLyBVcGRhdGUgaW50ZXJuYWwgbW91c2UgcmVmZXJlbmNlXG4gICAgdGhpcy5tYXBQb3NpdGlvblRvUG9pbnQoIHRoaXMubW91c2UuZ2xvYmFsLCBldmVudC5jbGllbnRYLCBldmVudC5jbGllbnRZKTtcblxuICAgIGlmICh0aGlzLmF1dG9QcmV2ZW50RGVmYXVsdClcbiAgICB7XG4gICAgICAgIHRoaXMubW91c2Uub3JpZ2luYWxFdmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIH1cblxuICAgIHRoaXMucHJvY2Vzc0ludGVyYWN0aXZlKHRoaXMubW91c2UuZ2xvYmFsLCB0aGlzLnJlbmRlcmVyLl9sYXN0T2JqZWN0UmVuZGVyZWQsIHRoaXMucHJvY2Vzc01vdXNlRG93biwgdHJ1ZSApO1xufTtcblxuLyoqXG4gKiBQcm9jZXNzZXMgdGhlIHJlc3VsdCBvZiB0aGUgbW91c2UgZG93biBjaGVjayBhbmQgZGlzcGF0Y2hlcyB0aGUgZXZlbnQgaWYgbmVlZCBiZVxuICpcbiAqIEBwYXJhbSBkaXNwbGF5T2JqZWN0IHtQSVhJLkNvbnRhaW5lcnxQSVhJLlNwcml0ZXxQSVhJLmV4dHJhcy5UaWxpbmdTcHJpdGV9IFRoZSBkaXNwbGF5IG9iamVjdCB0aGF0IHdhcyB0ZXN0ZWRcbiAqIEBwYXJhbSBoaXQge2Jvb2xlYW59IHRoZSByZXN1bHQgb2YgdGhlIGhpdCB0ZXN0IG9uIHRoZSBkaXNwYXkgb2JqZWN0XG4gKiBAcHJpdmF0ZVxuICovXG5JbnRlcmFjdGlvbk1hbmFnZXIucHJvdG90eXBlLnByb2Nlc3NNb3VzZURvd24gPSBmdW5jdGlvbiAoIGRpc3BsYXlPYmplY3QsIGhpdCApXG57XG4gICAgdmFyIGUgPSB0aGlzLm1vdXNlLm9yaWdpbmFsRXZlbnQ7XG4gICAgXG4gICAgdmFyIGlzUmlnaHRCdXR0b24gPSBlLmJ1dHRvbiA9PT0gMiB8fCBlLndoaWNoID09PSAzO1xuXG4gICAgaWYoaGl0KVxuICAgIHtcbiAgICAgICAgZGlzcGxheU9iamVjdFsgaXNSaWdodEJ1dHRvbiA/ICdfaXNSaWdodERvd24nIDogJ19pc0xlZnREb3duJyBdID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50KCBkaXNwbGF5T2JqZWN0LCBpc1JpZ2h0QnV0dG9uID8gJ3JpZ2h0ZG93bicgOiAnbW91c2Vkb3duJywgdGhpcy5ldmVudERhdGEgKTtcbiAgICB9XG59O1xuXG5cblxuLyoqXG4gKiBJcyBjYWxsZWQgd2hlbiB0aGUgbW91c2UgYnV0dG9uIGlzIHJlbGVhc2VkIG9uIHRoZSByZW5kZXJlciBlbGVtZW50XG4gKlxuICogQHBhcmFtIGV2ZW50IHtFdmVudH0gVGhlIERPTSBldmVudCBvZiBhIG1vdXNlIGJ1dHRvbiBiZWluZyByZWxlYXNlZFxuICogQHByaXZhdGVcbiAqL1xuSW50ZXJhY3Rpb25NYW5hZ2VyLnByb3RvdHlwZS5vbk1vdXNlVXAgPSBmdW5jdGlvbiAoZXZlbnQpXG57XG4gICAgdGhpcy5tb3VzZS5vcmlnaW5hbEV2ZW50ID0gZXZlbnQ7XG4gICAgdGhpcy5ldmVudERhdGEuZGF0YSA9IHRoaXMubW91c2U7XG4gICAgdGhpcy5ldmVudERhdGEuc3RvcHBlZCA9IGZhbHNlO1xuXG4gICAgLy8gVXBkYXRlIGludGVybmFsIG1vdXNlIHJlZmVyZW5jZVxuICAgIHRoaXMubWFwUG9zaXRpb25Ub1BvaW50KCB0aGlzLm1vdXNlLmdsb2JhbCwgZXZlbnQuY2xpZW50WCwgZXZlbnQuY2xpZW50WSk7XG5cbiAgICB0aGlzLnByb2Nlc3NJbnRlcmFjdGl2ZSh0aGlzLm1vdXNlLmdsb2JhbCwgdGhpcy5yZW5kZXJlci5fbGFzdE9iamVjdFJlbmRlcmVkLCB0aGlzLnByb2Nlc3NNb3VzZVVwLCB0cnVlICk7XG59O1xuXG4vKipcbiAqIFByb2Nlc3NlcyB0aGUgcmVzdWx0IG9mIHRoZSBtb3VzZSB1cCBjaGVjayBhbmQgZGlzcGF0Y2hlcyB0aGUgZXZlbnQgaWYgbmVlZCBiZVxuICpcbiAqIEBwYXJhbSBkaXNwbGF5T2JqZWN0IHtQSVhJLkNvbnRhaW5lcnxQSVhJLlNwcml0ZXxQSVhJLmV4dHJhcy5UaWxpbmdTcHJpdGV9IFRoZSBkaXNwbGF5IG9iamVjdCB0aGF0IHdhcyB0ZXN0ZWRcbiAqIEBwYXJhbSBoaXQge2Jvb2xlYW59IHRoZSByZXN1bHQgb2YgdGhlIGhpdCB0ZXN0IG9uIHRoZSBkaXNwbGF5IG9iamVjdFxuICogQHByaXZhdGVcbiAqL1xuSW50ZXJhY3Rpb25NYW5hZ2VyLnByb3RvdHlwZS5wcm9jZXNzTW91c2VVcCA9IGZ1bmN0aW9uICggZGlzcGxheU9iamVjdCwgaGl0IClcbntcbiAgICB2YXIgZSA9IHRoaXMubW91c2Uub3JpZ2luYWxFdmVudDtcblxuICAgIHZhciBpc1JpZ2h0QnV0dG9uID0gZS5idXR0b24gPT09IDIgfHwgZS53aGljaCA9PT0gMztcbiAgICB2YXIgaXNEb3duID0gIGlzUmlnaHRCdXR0b24gPyAnX2lzUmlnaHREb3duJyA6ICdfaXNMZWZ0RG93bic7XG5cbiAgICBpZihoaXQpXG4gICAge1xuICAgICAgICB0aGlzLmRpc3BhdGNoRXZlbnQoIGRpc3BsYXlPYmplY3QsIGlzUmlnaHRCdXR0b24gPyAncmlnaHR1cCcgOiAnbW91c2V1cCcsIHRoaXMuZXZlbnREYXRhICk7XG5cbiAgICAgICAgaWYoIGRpc3BsYXlPYmplY3RbIGlzRG93biBdIClcbiAgICAgICAge1xuICAgICAgICAgICAgZGlzcGxheU9iamVjdFsgaXNEb3duIF0gPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudCggZGlzcGxheU9iamVjdCwgaXNSaWdodEJ1dHRvbiA/ICdyaWdodGNsaWNrJyA6ICdjbGljaycsIHRoaXMuZXZlbnREYXRhICk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgaWYoIGRpc3BsYXlPYmplY3RbIGlzRG93biBdIClcbiAgICAgICAge1xuICAgICAgICAgICAgZGlzcGxheU9iamVjdFsgaXNEb3duIF0gPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudCggZGlzcGxheU9iamVjdCwgaXNSaWdodEJ1dHRvbiA/ICdyaWdodHVwb3V0c2lkZScgOiAnbW91c2V1cG91dHNpZGUnLCB0aGlzLmV2ZW50RGF0YSApO1xuICAgICAgICB9XG4gICAgfVxufTtcblxuXG4vKipcbiAqIElzIGNhbGxlZCB3aGVuIHRoZSBtb3VzZSBtb3ZlcyBhY3Jvc3MgdGhlIHJlbmRlcmVyIGVsZW1lbnRcbiAqXG4gKiBAcGFyYW0gZXZlbnQge0V2ZW50fSBUaGUgRE9NIGV2ZW50IG9mIHRoZSBtb3VzZSBtb3ZpbmdcbiAqIEBwcml2YXRlXG4gKi9cbkludGVyYWN0aW9uTWFuYWdlci5wcm90b3R5cGUub25Nb3VzZU1vdmUgPSBmdW5jdGlvbiAoZXZlbnQpXG57XG4gICAgdGhpcy5tb3VzZS5vcmlnaW5hbEV2ZW50ID0gZXZlbnQ7XG4gICAgdGhpcy5ldmVudERhdGEuZGF0YSA9IHRoaXMubW91c2U7XG4gICAgdGhpcy5ldmVudERhdGEuc3RvcHBlZCA9IGZhbHNlO1xuXG4gICAgdGhpcy5tYXBQb3NpdGlvblRvUG9pbnQoIHRoaXMubW91c2UuZ2xvYmFsLCBldmVudC5jbGllbnRYLCBldmVudC5jbGllbnRZKTtcblxuICAgIHRoaXMuZGlkTW92ZSA9IHRydWU7XG5cbiAgICB0aGlzLmN1cnNvciA9ICdpbmhlcml0JztcblxuICAgIHRoaXMucHJvY2Vzc0ludGVyYWN0aXZlKHRoaXMubW91c2UuZ2xvYmFsLCB0aGlzLnJlbmRlcmVyLl9sYXN0T2JqZWN0UmVuZGVyZWQsIHRoaXMucHJvY2Vzc01vdXNlTW92ZSwgdHJ1ZSApO1xuXG4gICAgaWYgKHRoaXMuY3VycmVudEN1cnNvclN0eWxlICE9PSB0aGlzLmN1cnNvcilcbiAgICB7XG4gICAgICAgIHRoaXMuY3VycmVudEN1cnNvclN0eWxlID0gdGhpcy5jdXJzb3I7XG4gICAgICAgIHRoaXMuaW50ZXJhY3Rpb25ET01FbGVtZW50LnN0eWxlLmN1cnNvciA9IHRoaXMuY3Vyc29yO1xuICAgIH1cblxuICAgIC8vVE9ETyBCVUcgZm9yIHBhcmVudHMgaW5lcmFjdGl2ZSBvYmplY3QgKGJvcmRlciBvcmRlciBpc3N1ZSlcbn07XG5cbi8qKlxuICogUHJvY2Vzc2VzIHRoZSByZXN1bHQgb2YgdGhlIG1vdXNlIG1vdmUgY2hlY2sgYW5kIGRpc3BhdGNoZXMgdGhlIGV2ZW50IGlmIG5lZWQgYmVcbiAqXG4gKiBAcGFyYW0gZGlzcGxheU9iamVjdCB7UElYSS5Db250YWluZXJ8UElYSS5TcHJpdGV8UElYSS5leHRyYXMuVGlsaW5nU3ByaXRlfSBUaGUgZGlzcGxheSBvYmplY3QgdGhhdCB3YXMgdGVzdGVkXG4gKiBAcGFyYW0gaGl0IHtib29sZWFufSB0aGUgcmVzdWx0IG9mIHRoZSBoaXQgdGVzdCBvbiB0aGUgZGlzcGxheSBvYmplY3RcbiAqIEBwcml2YXRlXG4gKi9cbkludGVyYWN0aW9uTWFuYWdlci5wcm90b3R5cGUucHJvY2Vzc01vdXNlTW92ZSA9IGZ1bmN0aW9uICggZGlzcGxheU9iamVjdCwgaGl0IClcbntcbiAgICB0aGlzLmRpc3BhdGNoRXZlbnQoIGRpc3BsYXlPYmplY3QsICdtb3VzZW1vdmUnLCB0aGlzLmV2ZW50RGF0YSk7XG4gICAgdGhpcy5wcm9jZXNzTW91c2VPdmVyT3V0KGRpc3BsYXlPYmplY3QsIGhpdCk7XG59O1xuXG5cbi8qKlxuICogSXMgY2FsbGVkIHdoZW4gdGhlIG1vdXNlIGlzIG1vdmVkIG91dCBvZiB0aGUgcmVuZGVyZXIgZWxlbWVudFxuICpcbiAqIEBwYXJhbSBldmVudCB7RXZlbnR9IFRoZSBET00gZXZlbnQgb2YgYSBtb3VzZSBiZWluZyBtb3ZlZCBvdXRcbiAqIEBwcml2YXRlXG4gKi9cbkludGVyYWN0aW9uTWFuYWdlci5wcm90b3R5cGUub25Nb3VzZU91dCA9IGZ1bmN0aW9uIChldmVudClcbntcbiAgICB0aGlzLm1vdXNlLm9yaWdpbmFsRXZlbnQgPSBldmVudDtcbiAgICB0aGlzLmV2ZW50RGF0YS5zdG9wcGVkID0gZmFsc2U7XG5cbiAgICAvLyBVcGRhdGUgaW50ZXJuYWwgbW91c2UgcmVmZXJlbmNlXG4gICAgdGhpcy5tYXBQb3NpdGlvblRvUG9pbnQoIHRoaXMubW91c2UuZ2xvYmFsLCBldmVudC5jbGllbnRYLCBldmVudC5jbGllbnRZKTtcblxuICAgIHRoaXMuaW50ZXJhY3Rpb25ET01FbGVtZW50LnN0eWxlLmN1cnNvciA9ICdpbmhlcml0JztcblxuICAgIC8vIFRPRE8gb3B0aW1pemUgYnkgbm90IGNoZWNrIEVWRVJZIFRJTUUhIG1heWJlIGhhbGYgYXMgb2Z0ZW4/IC8vXG4gICAgdGhpcy5tYXBQb3NpdGlvblRvUG9pbnQoIHRoaXMubW91c2UuZ2xvYmFsLCBldmVudC5jbGllbnRYLCBldmVudC5jbGllbnRZICk7XG5cbiAgICB0aGlzLnByb2Nlc3NJbnRlcmFjdGl2ZSggdGhpcy5tb3VzZS5nbG9iYWwsIHRoaXMucmVuZGVyZXIuX2xhc3RPYmplY3RSZW5kZXJlZCwgdGhpcy5wcm9jZXNzTW91c2VPdmVyT3V0LCBmYWxzZSApO1xufTtcblxuLyoqXG4gKiBQcm9jZXNzZXMgdGhlIHJlc3VsdCBvZiB0aGUgbW91c2Ugb3Zlci9vdXQgY2hlY2sgYW5kIGRpc3BhdGNoZXMgdGhlIGV2ZW50IGlmIG5lZWQgYmVcbiAqXG4gKiBAcGFyYW0gZGlzcGxheU9iamVjdCB7UElYSS5Db250YWluZXJ8UElYSS5TcHJpdGV8UElYSS5leHRyYXMuVGlsaW5nU3ByaXRlfSBUaGUgZGlzcGxheSBvYmplY3QgdGhhdCB3YXMgdGVzdGVkXG4gKiBAcGFyYW0gaGl0IHtib29sZWFufSB0aGUgcmVzdWx0IG9mIHRoZSBoaXQgdGVzdCBvbiB0aGUgZGlzcGxheSBvYmplY3RcbiAqIEBwcml2YXRlXG4gKi9cbkludGVyYWN0aW9uTWFuYWdlci5wcm90b3R5cGUucHJvY2Vzc01vdXNlT3Zlck91dCA9IGZ1bmN0aW9uICggZGlzcGxheU9iamVjdCwgaGl0IClcbntcbiAgICBpZihoaXQpXG4gICAge1xuICAgICAgICBpZighZGlzcGxheU9iamVjdC5fb3ZlcilcbiAgICAgICAge1xuICAgICAgICAgICAgZGlzcGxheU9iamVjdC5fb3ZlciA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLmRpc3BhdGNoRXZlbnQoIGRpc3BsYXlPYmplY3QsICdtb3VzZW92ZXInLCB0aGlzLmV2ZW50RGF0YSApO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGRpc3BsYXlPYmplY3QuYnV0dG9uTW9kZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5jdXJzb3IgPSBkaXNwbGF5T2JqZWN0LmRlZmF1bHRDdXJzb3I7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgaWYoZGlzcGxheU9iamVjdC5fb3ZlcilcbiAgICAgICAge1xuICAgICAgICAgICAgZGlzcGxheU9iamVjdC5fb3ZlciA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50KCBkaXNwbGF5T2JqZWN0LCAnbW91c2VvdXQnLCB0aGlzLmV2ZW50RGF0YSk7XG4gICAgICAgIH1cbiAgICB9XG59O1xuXG5cbi8qKlxuICogSXMgY2FsbGVkIHdoZW4gYSB0b3VjaCBpcyBzdGFydGVkIG9uIHRoZSByZW5kZXJlciBlbGVtZW50XG4gKlxuICogQHBhcmFtIGV2ZW50IHtFdmVudH0gVGhlIERPTSBldmVudCBvZiBhIHRvdWNoIHN0YXJ0aW5nIG9uIHRoZSByZW5kZXJlciB2aWV3XG4gKiBAcHJpdmF0ZVxuICovXG5JbnRlcmFjdGlvbk1hbmFnZXIucHJvdG90eXBlLm9uVG91Y2hTdGFydCA9IGZ1bmN0aW9uIChldmVudClcbntcbiAgICBpZiAodGhpcy5hdXRvUHJldmVudERlZmF1bHQpXG4gICAge1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIH1cblxuICAgIHZhciBjaGFuZ2VkVG91Y2hlcyA9IGV2ZW50LmNoYW5nZWRUb3VjaGVzO1xuICAgIHZhciBjTGVuZ3RoID0gY2hhbmdlZFRvdWNoZXMubGVuZ3RoO1xuXG4gICAgZm9yICh2YXIgaT0wOyBpIDwgY0xlbmd0aDsgaSsrKVxuICAgIHtcbiAgICAgICAgdmFyIHRvdWNoRXZlbnQgPSBjaGFuZ2VkVG91Y2hlc1tpXTtcbiAgICAgICAgLy9UT0RPIFBPT0xcbiAgICAgICAgdmFyIHRvdWNoRGF0YSA9IHRoaXMuZ2V0VG91Y2hEYXRhKCB0b3VjaEV2ZW50ICk7XG5cbiAgICAgICAgdG91Y2hEYXRhLm9yaWdpbmFsRXZlbnQgPSBldmVudDtcblxuICAgICAgICB0aGlzLmV2ZW50RGF0YS5kYXRhID0gdG91Y2hEYXRhO1xuICAgICAgICB0aGlzLmV2ZW50RGF0YS5zdG9wcGVkID0gZmFsc2U7XG5cbiAgICAgICAgdGhpcy5wcm9jZXNzSW50ZXJhY3RpdmUoIHRvdWNoRGF0YS5nbG9iYWwsIHRoaXMucmVuZGVyZXIuX2xhc3RPYmplY3RSZW5kZXJlZCwgdGhpcy5wcm9jZXNzVG91Y2hTdGFydCwgdHJ1ZSApO1xuXG4gICAgICAgIHRoaXMucmV0dXJuVG91Y2hEYXRhKCB0b3VjaERhdGEgKTtcbiAgICB9XG59O1xuXG4vKipcbiAqIFByb2Nlc3NlcyB0aGUgcmVzdWx0IG9mIGEgdG91Y2ggY2hlY2sgYW5kIGRpc3BhdGNoZXMgdGhlIGV2ZW50IGlmIG5lZWQgYmVcbiAqXG4gKiBAcGFyYW0gZGlzcGxheU9iamVjdCB7UElYSS5Db250YWluZXJ8UElYSS5TcHJpdGV8UElYSS5leHRyYXMuVGlsaW5nU3ByaXRlfSBUaGUgZGlzcGxheSBvYmplY3QgdGhhdCB3YXMgdGVzdGVkXG4gKiBAcGFyYW0gaGl0IHtib29sZWFufSB0aGUgcmVzdWx0IG9mIHRoZSBoaXQgdGVzdCBvbiB0aGUgZGlzcGxheSBvYmplY3RcbiAqIEBwcml2YXRlXG4gKi9cbkludGVyYWN0aW9uTWFuYWdlci5wcm90b3R5cGUucHJvY2Vzc1RvdWNoU3RhcnQgPSBmdW5jdGlvbiAoIGRpc3BsYXlPYmplY3QsIGhpdCApXG57XG4gICAgaWYoaGl0KVxuICAgIHtcbiAgICAgICAgZGlzcGxheU9iamVjdC5fdG91Y2hEb3duID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50KCBkaXNwbGF5T2JqZWN0LCAndG91Y2hzdGFydCcsIHRoaXMuZXZlbnREYXRhICk7XG4gICAgfVxufTtcblxuXG4vKipcbiAqIElzIGNhbGxlZCB3aGVuIGEgdG91Y2ggZW5kcyBvbiB0aGUgcmVuZGVyZXIgZWxlbWVudFxuICpcbiAqIEBwYXJhbSBldmVudCB7RXZlbnR9IFRoZSBET00gZXZlbnQgb2YgYSB0b3VjaCBlbmRpbmcgb24gdGhlIHJlbmRlcmVyIHZpZXdcbiAqL1xuSW50ZXJhY3Rpb25NYW5hZ2VyLnByb3RvdHlwZS5vblRvdWNoRW5kID0gZnVuY3Rpb24gKGV2ZW50KVxue1xuICAgIGlmICh0aGlzLmF1dG9QcmV2ZW50RGVmYXVsdClcbiAgICB7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgfVxuXG4gICAgdmFyIGNoYW5nZWRUb3VjaGVzID0gZXZlbnQuY2hhbmdlZFRvdWNoZXM7XG4gICAgdmFyIGNMZW5ndGggPSBjaGFuZ2VkVG91Y2hlcy5sZW5ndGg7XG5cbiAgICBmb3IgKHZhciBpPTA7IGkgPCBjTGVuZ3RoOyBpKyspXG4gICAge1xuICAgICAgICB2YXIgdG91Y2hFdmVudCA9IGNoYW5nZWRUb3VjaGVzW2ldO1xuXG4gICAgICAgIHZhciB0b3VjaERhdGEgPSB0aGlzLmdldFRvdWNoRGF0YSggdG91Y2hFdmVudCApO1xuXG4gICAgICAgIHRvdWNoRGF0YS5vcmlnaW5hbEV2ZW50ID0gZXZlbnQ7XG5cbiAgICAgICAgLy9UT0RPIHRoaXMgc2hvdWxkIGJlIHBhc3NlZCBhbG9uZy4uIG5vIHNldFxuICAgICAgICB0aGlzLmV2ZW50RGF0YS5kYXRhID0gdG91Y2hEYXRhO1xuICAgICAgICB0aGlzLmV2ZW50RGF0YS5zdG9wcGVkID0gZmFsc2U7XG5cblxuICAgICAgICB0aGlzLnByb2Nlc3NJbnRlcmFjdGl2ZSggdG91Y2hEYXRhLmdsb2JhbCwgdGhpcy5yZW5kZXJlci5fbGFzdE9iamVjdFJlbmRlcmVkLCB0aGlzLnByb2Nlc3NUb3VjaEVuZCwgdHJ1ZSApO1xuXG4gICAgICAgIHRoaXMucmV0dXJuVG91Y2hEYXRhKCB0b3VjaERhdGEgKTtcbiAgICB9XG59O1xuXG4vKipcbiAqIFByb2Nlc3NlcyB0aGUgcmVzdWx0IG9mIHRoZSBlbmQgb2YgYSB0b3VjaCBhbmQgZGlzcGF0Y2hlcyB0aGUgZXZlbnQgaWYgbmVlZCBiZVxuICpcbiAqIEBwYXJhbSBkaXNwbGF5T2JqZWN0IHtQSVhJLkNvbnRhaW5lcnxQSVhJLlNwcml0ZXxQSVhJLmV4dHJhcy5UaWxpbmdTcHJpdGV9IFRoZSBkaXNwbGF5IG9iamVjdCB0aGF0IHdhcyB0ZXN0ZWRcbiAqIEBwYXJhbSBoaXQge2Jvb2xlYW59IHRoZSByZXN1bHQgb2YgdGhlIGhpdCB0ZXN0IG9uIHRoZSBkaXNwbGF5IG9iamVjdFxuICogQHByaXZhdGVcbiAqL1xuSW50ZXJhY3Rpb25NYW5hZ2VyLnByb3RvdHlwZS5wcm9jZXNzVG91Y2hFbmQgPSBmdW5jdGlvbiAoIGRpc3BsYXlPYmplY3QsIGhpdCApXG57XG4gICAgaWYoaGl0KVxuICAgIHtcbiAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50KCBkaXNwbGF5T2JqZWN0LCAndG91Y2hlbmQnLCB0aGlzLmV2ZW50RGF0YSApO1xuXG4gICAgICAgIGlmKCBkaXNwbGF5T2JqZWN0Ll90b3VjaERvd24gKVxuICAgICAgICB7XG4gICAgICAgICAgICBkaXNwbGF5T2JqZWN0Ll90b3VjaERvd24gPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudCggZGlzcGxheU9iamVjdCwgJ3RhcCcsIHRoaXMuZXZlbnREYXRhICk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgaWYoIGRpc3BsYXlPYmplY3QuX3RvdWNoRG93biApXG4gICAgICAgIHtcbiAgICAgICAgICAgIGRpc3BsYXlPYmplY3QuX3RvdWNoRG93biA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50KCBkaXNwbGF5T2JqZWN0LCAndG91Y2hlbmRvdXRzaWRlJywgdGhpcy5ldmVudERhdGEgKTtcbiAgICAgICAgfVxuICAgIH1cbn07XG5cbi8qKlxuICogSXMgY2FsbGVkIHdoZW4gYSB0b3VjaCBpcyBtb3ZlZCBhY3Jvc3MgdGhlIHJlbmRlcmVyIGVsZW1lbnRcbiAqXG4gKiBAcGFyYW0gZXZlbnQge0V2ZW50fSBUaGUgRE9NIGV2ZW50IG9mIGEgdG91Y2ggbW92aW5nIGFjcm9zcyB0aGUgcmVuZGVyZXIgdmlld1xuICogQHByaXZhdGVcbiAqL1xuSW50ZXJhY3Rpb25NYW5hZ2VyLnByb3RvdHlwZS5vblRvdWNoTW92ZSA9IGZ1bmN0aW9uIChldmVudClcbntcbiAgICBpZiAodGhpcy5hdXRvUHJldmVudERlZmF1bHQpXG4gICAge1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIH1cblxuICAgIHZhciBjaGFuZ2VkVG91Y2hlcyA9IGV2ZW50LmNoYW5nZWRUb3VjaGVzO1xuICAgIHZhciBjTGVuZ3RoID0gY2hhbmdlZFRvdWNoZXMubGVuZ3RoO1xuXG4gICAgZm9yICh2YXIgaT0wOyBpIDwgY0xlbmd0aDsgaSsrKVxuICAgIHtcbiAgICAgICAgdmFyIHRvdWNoRXZlbnQgPSBjaGFuZ2VkVG91Y2hlc1tpXTtcblxuICAgICAgICB2YXIgdG91Y2hEYXRhID0gdGhpcy5nZXRUb3VjaERhdGEoIHRvdWNoRXZlbnQgKTtcblxuICAgICAgICB0b3VjaERhdGEub3JpZ2luYWxFdmVudCA9IGV2ZW50O1xuXG4gICAgICAgIHRoaXMuZXZlbnREYXRhLmRhdGEgPSB0b3VjaERhdGE7XG4gICAgICAgIHRoaXMuZXZlbnREYXRhLnN0b3BwZWQgPSBmYWxzZTtcblxuICAgICAgICB0aGlzLnByb2Nlc3NJbnRlcmFjdGl2ZSggdG91Y2hEYXRhLmdsb2JhbCwgdGhpcy5yZW5kZXJlci5fbGFzdE9iamVjdFJlbmRlcmVkLCB0aGlzLnByb2Nlc3NUb3VjaE1vdmUsIHRydWUgKTtcblxuICAgICAgICB0aGlzLnJldHVyblRvdWNoRGF0YSggdG91Y2hEYXRhICk7XG4gICAgfVxufTtcblxuLyoqXG4gKiBQcm9jZXNzZXMgdGhlIHJlc3VsdCBvZiBhIHRvdWNoIG1vdmUgY2hlY2sgYW5kIGRpc3BhdGNoZXMgdGhlIGV2ZW50IGlmIG5lZWQgYmVcbiAqXG4gKiBAcGFyYW0gZGlzcGxheU9iamVjdCB7UElYSS5Db250YWluZXJ8UElYSS5TcHJpdGV8UElYSS5leHRyYXMuVGlsaW5nU3ByaXRlfSBUaGUgZGlzcGxheSBvYmplY3QgdGhhdCB3YXMgdGVzdGVkXG4gKiBAcGFyYW0gaGl0IHtib29sZWFufSB0aGUgcmVzdWx0IG9mIHRoZSBoaXQgdGVzdCBvbiB0aGUgZGlzcGxheSBvYmplY3RcbiAqIEBwcml2YXRlXG4gKi9cbkludGVyYWN0aW9uTWFuYWdlci5wcm90b3R5cGUucHJvY2Vzc1RvdWNoTW92ZSA9IGZ1bmN0aW9uICggZGlzcGxheU9iamVjdCwgaGl0IClcbntcbiAgICBoaXQgPSBoaXQ7XG4gICAgdGhpcy5kaXNwYXRjaEV2ZW50KCBkaXNwbGF5T2JqZWN0LCAndG91Y2htb3ZlJywgdGhpcy5ldmVudERhdGEpO1xufTtcblxuLyoqXG4gKiBHcmFicyBhbiBpbnRlcmFjdGlvbiBkYXRhIG9iamVjdCBmcm9tIHRoZSBpbnRlcm5hbCBwb29sXG4gKlxuICogQHBhcmFtIHRvdWNoRXZlbnQge0V2ZW50RGF0YX0gVGhlIHRvdWNoIGV2ZW50IHdlIG5lZWQgdG8gcGFpciB3aXRoIGFuIGludGVyYWN0aW9uRGF0YSBvYmplY3RcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5JbnRlcmFjdGlvbk1hbmFnZXIucHJvdG90eXBlLmdldFRvdWNoRGF0YSA9IGZ1bmN0aW9uICh0b3VjaEV2ZW50KVxue1xuICAgIHZhciB0b3VjaERhdGEgPSB0aGlzLmludGVyYWN0aXZlRGF0YVBvb2wucG9wKCk7XG5cbiAgICBpZighdG91Y2hEYXRhKVxuICAgIHtcbiAgICAgICAgdG91Y2hEYXRhID0gbmV3IEludGVyYWN0aW9uRGF0YSgpO1xuICAgIH1cblxuICAgIHRvdWNoRGF0YS5pZGVudGlmaWVyID0gdG91Y2hFdmVudC5pZGVudGlmaWVyO1xuICAgIHRoaXMubWFwUG9zaXRpb25Ub1BvaW50KCB0b3VjaERhdGEuZ2xvYmFsLCB0b3VjaEV2ZW50LmNsaWVudFgsIHRvdWNoRXZlbnQuY2xpZW50WSApO1xuXG4gICAgaWYobmF2aWdhdG9yLmlzQ29jb29uSlMpXG4gICAge1xuICAgICAgICB0b3VjaERhdGEuZ2xvYmFsLnggPSB0b3VjaERhdGEuZ2xvYmFsLnggLyB0aGlzLnJlc29sdXRpb247XG4gICAgICAgIHRvdWNoRGF0YS5nbG9iYWwueSA9IHRvdWNoRGF0YS5nbG9iYWwueSAvIHRoaXMucmVzb2x1dGlvbjtcbiAgICB9XG5cbiAgICB0b3VjaEV2ZW50Lmdsb2JhbFggPSB0b3VjaERhdGEuZ2xvYmFsLng7XG4gICAgdG91Y2hFdmVudC5nbG9iYWxZID0gdG91Y2hEYXRhLmdsb2JhbC55O1xuXG4gICAgcmV0dXJuIHRvdWNoRGF0YTtcbn07XG5cbi8qKlxuICogUmV0dXJucyBhbiBpbnRlcmFjdGlvbiBkYXRhIG9iamVjdCB0byB0aGUgaW50ZXJuYWwgcG9vbFxuICpcbiAqIEBwYXJhbSB0b3VjaERhdGEge1BJWEkuaW50ZXJhY3Rpb24uSW50ZXJhY3Rpb25EYXRhfSBUaGUgdG91Y2ggZGF0YSBvYmplY3Qgd2Ugd2FudCB0byByZXR1cm4gdG8gdGhlIHBvb2xcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5JbnRlcmFjdGlvbk1hbmFnZXIucHJvdG90eXBlLnJldHVyblRvdWNoRGF0YSA9IGZ1bmN0aW9uICggdG91Y2hEYXRhIClcbntcbiAgICB0aGlzLmludGVyYWN0aXZlRGF0YVBvb2wucHVzaCggdG91Y2hEYXRhICk7XG59O1xuXG4vKipcbiAqIERlc3Ryb3lzIHRoZSBpbnRlcmFjdGlvbiBtYW5hZ2VyXG4gKlxuICovXG5JbnRlcmFjdGlvbk1hbmFnZXIucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoKSB7XG4gICAgdGhpcy5yZW1vdmVFdmVudHMoKTtcblxuICAgIHRoaXMucmVuZGVyZXIgPSBudWxsO1xuXG4gICAgdGhpcy5tb3VzZSA9IG51bGw7XG5cbiAgICB0aGlzLmV2ZW50RGF0YSA9IG51bGw7XG5cbiAgICB0aGlzLmludGVyYWN0aXZlRGF0YVBvb2wgPSBudWxsO1xuXG4gICAgdGhpcy5pbnRlcmFjdGlvbkRPTUVsZW1lbnQgPSBudWxsO1xuXG4gICAgdGhpcy5vbk1vdXNlVXAgPSBudWxsO1xuICAgIHRoaXMucHJvY2Vzc01vdXNlVXAgPSBudWxsO1xuXG5cbiAgICB0aGlzLm9uTW91c2VEb3duID0gbnVsbDtcbiAgICB0aGlzLnByb2Nlc3NNb3VzZURvd24gPSBudWxsO1xuXG4gICAgdGhpcy5vbk1vdXNlTW92ZSA9IG51bGw7XG4gICAgdGhpcy5wcm9jZXNzTW91c2VNb3ZlID0gbnVsbDtcblxuICAgIHRoaXMub25Nb3VzZU91dCA9IG51bGw7XG4gICAgdGhpcy5wcm9jZXNzTW91c2VPdmVyT3V0ID0gbnVsbDtcblxuXG4gICAgdGhpcy5vblRvdWNoU3RhcnQgPSBudWxsO1xuICAgIHRoaXMucHJvY2Vzc1RvdWNoU3RhcnQgPSBudWxsO1xuXG4gICAgdGhpcy5vblRvdWNoRW5kID0gbnVsbDtcbiAgICB0aGlzLnByb2Nlc3NUb3VjaEVuZCA9IG51bGw7XG5cbiAgICB0aGlzLm9uVG91Y2hNb3ZlID0gbnVsbDtcbiAgICB0aGlzLnByb2Nlc3NUb3VjaE1vdmUgPSBudWxsO1xuXG4gICAgdGhpcy5fdGVtcFBvaW50ID0gbnVsbDtcbn07XG5cbmNvcmUuV2ViR0xSZW5kZXJlci5yZWdpc3RlclBsdWdpbignaW50ZXJhY3Rpb24nLCBJbnRlcmFjdGlvbk1hbmFnZXIpO1xuY29yZS5DYW52YXNSZW5kZXJlci5yZWdpc3RlclBsdWdpbignaW50ZXJhY3Rpb24nLCBJbnRlcmFjdGlvbk1hbmFnZXIpO1xuIiwiLyoqXG4gKiBAZmlsZSAgICAgICAgTWFpbiBleHBvcnQgb2YgdGhlIFBJWEkgaW50ZXJhY3Rpb25zIGxpYnJhcnlcbiAqIEBhdXRob3IgICAgICBNYXQgR3JvdmVzIDxtYXRAZ29vZGJveWRpZ2l0YWwuY29tPlxuICogQGNvcHlyaWdodCAgIDIwMTMtMjAxNSBHb29kQm95RGlnaXRhbFxuICogQGxpY2Vuc2UgICAgIHtAbGluayBodHRwczovL2dpdGh1Yi5jb20vcGl4aWpzL3BpeGkuanMvYmxvYi9tYXN0ZXIvTElDRU5TRXxNSVQgTGljZW5zZX1cbiAqL1xuXG4vKipcbiAqIEBuYW1lc3BhY2UgUElYSS5pbnRlcmFjdGlvblxuICovXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgICBJbnRlcmFjdGlvbkRhdGE6ICAgIHJlcXVpcmUoJy4vSW50ZXJhY3Rpb25EYXRhJyksXG4gICAgSW50ZXJhY3Rpb25NYW5hZ2VyOiByZXF1aXJlKCcuL0ludGVyYWN0aW9uTWFuYWdlcicpLFxuICAgIGludGVyYWN0aXZlVGFyZ2V0OiAgcmVxdWlyZSgnLi9pbnRlcmFjdGl2ZVRhcmdldCcpXG59O1xuIiwiLyoqXG4gKiBEZWZhdWx0IHByb3BlcnR5IHZhbHVlcyBvZiBpbnRlcmFjdGl2ZSBvYmplY3RzXG4gKiB1c2VkIGJ5IHtAbGluayBQSVhJLmludGVyYWN0aW9uLkludGVyYWN0aW9uTWFuYWdlcn0uXG4gKlxuICogQG1peGluXG4gKiBAbWVtYmVyb2YgUElYSS5pbnRlcmFjdGlvblxuICogQGV4YW1wbGVcbiAqICAgICAgZnVuY3Rpb24gTXlPYmplY3QoKSB7fVxuICpcbiAqICAgICAgT2JqZWN0LmFzc2lnbihcbiAqICAgICAgICAgIE15T2JqZWN0LnByb3RvdHlwZSxcbiAqICAgICAgICAgIFBJWEkuaW50ZXJhY3Rpb24uaW50ZXJhY3RpdmVUYXJnZXRcbiAqICAgICAgKTtcbiAqL1xudmFyIGludGVyYWN0aXZlVGFyZ2V0ID0ge1xuICAgIC8qKlxuICAgICAqIEB0b2RvIE5lZWRzIGRvY3MuXG4gICAgICovXG4gICAgaW50ZXJhY3RpdmU6IGZhbHNlLFxuICAgIC8qKlxuICAgICAqIEB0b2RvIE5lZWRzIGRvY3MuXG4gICAgICovXG4gICAgYnV0dG9uTW9kZTogZmFsc2UsXG4gICAgLyoqXG4gICAgICogQHRvZG8gTmVlZHMgZG9jcy5cbiAgICAgKi9cbiAgICBpbnRlcmFjdGl2ZUNoaWxkcmVuOiB0cnVlLFxuICAgIC8qKlxuICAgICAqIEB0b2RvIE5lZWRzIGRvY3MuXG4gICAgICovXG4gICAgZGVmYXVsdEN1cnNvcjogJ3BvaW50ZXInLFxuXG4gICAgLy8gc29tZSBpbnRlcm5hbCBjaGVja3MuLlxuXG4gICAgLyoqXG4gICAgICogQHRvZG8gTmVlZHMgZG9jcy5cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIF9vdmVyOiBmYWxzZSxcbiAgICAvKipcbiAgICAgKiBAdG9kbyBOZWVkcyBkb2NzLlxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgX3RvdWNoRG93bjogZmFsc2Vcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gaW50ZXJhY3RpdmVUYXJnZXQ7XG4iLCJ2YXIgUmVzb3VyY2UgPSByZXF1aXJlKCdyZXNvdXJjZS1sb2FkZXInKS5SZXNvdXJjZSxcbiAgICBjb3JlID0gcmVxdWlyZSgnLi4vY29yZScpLFxuICAgIGV4dHJhcyA9IHJlcXVpcmUoJy4uL2V4dHJhcycpLFxuICAgIHBhdGggPSByZXF1aXJlKCdwYXRoJyk7XG5cblxuZnVuY3Rpb24gcGFyc2UocmVzb3VyY2UsIHRleHR1cmUpIHtcbiAgICB2YXIgZGF0YSA9IHt9O1xuICAgIHZhciBpbmZvID0gcmVzb3VyY2UuZGF0YS5nZXRFbGVtZW50c0J5VGFnTmFtZSgnaW5mbycpWzBdO1xuICAgIHZhciBjb21tb24gPSByZXNvdXJjZS5kYXRhLmdldEVsZW1lbnRzQnlUYWdOYW1lKCdjb21tb24nKVswXTtcblxuICAgIGRhdGEuZm9udCA9IGluZm8uZ2V0QXR0cmlidXRlKCdmYWNlJyk7XG4gICAgZGF0YS5zaXplID0gcGFyc2VJbnQoaW5mby5nZXRBdHRyaWJ1dGUoJ3NpemUnKSwgMTApO1xuICAgIGRhdGEubGluZUhlaWdodCA9IHBhcnNlSW50KGNvbW1vbi5nZXRBdHRyaWJ1dGUoJ2xpbmVIZWlnaHQnKSwgMTApO1xuICAgIGRhdGEuY2hhcnMgPSB7fTtcblxuICAgIC8vcGFyc2UgbGV0dGVyc1xuICAgIHZhciBsZXR0ZXJzID0gcmVzb3VyY2UuZGF0YS5nZXRFbGVtZW50c0J5VGFnTmFtZSgnY2hhcicpO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZXR0ZXJzLmxlbmd0aDsgaSsrKVxuICAgIHtcbiAgICAgICAgdmFyIGNoYXJDb2RlID0gcGFyc2VJbnQobGV0dGVyc1tpXS5nZXRBdHRyaWJ1dGUoJ2lkJyksIDEwKTtcblxuICAgICAgICB2YXIgdGV4dHVyZVJlY3QgPSBuZXcgY29yZS5SZWN0YW5nbGUoXG4gICAgICAgICAgICBwYXJzZUludChsZXR0ZXJzW2ldLmdldEF0dHJpYnV0ZSgneCcpLCAxMCkgKyB0ZXh0dXJlLmZyYW1lLngsXG4gICAgICAgICAgICBwYXJzZUludChsZXR0ZXJzW2ldLmdldEF0dHJpYnV0ZSgneScpLCAxMCkgKyB0ZXh0dXJlLmZyYW1lLnksXG4gICAgICAgICAgICBwYXJzZUludChsZXR0ZXJzW2ldLmdldEF0dHJpYnV0ZSgnd2lkdGgnKSwgMTApLFxuICAgICAgICAgICAgcGFyc2VJbnQobGV0dGVyc1tpXS5nZXRBdHRyaWJ1dGUoJ2hlaWdodCcpLCAxMClcbiAgICAgICAgKTtcblxuICAgICAgICBkYXRhLmNoYXJzW2NoYXJDb2RlXSA9IHtcbiAgICAgICAgICAgIHhPZmZzZXQ6IHBhcnNlSW50KGxldHRlcnNbaV0uZ2V0QXR0cmlidXRlKCd4b2Zmc2V0JyksIDEwKSxcbiAgICAgICAgICAgIHlPZmZzZXQ6IHBhcnNlSW50KGxldHRlcnNbaV0uZ2V0QXR0cmlidXRlKCd5b2Zmc2V0JyksIDEwKSxcbiAgICAgICAgICAgIHhBZHZhbmNlOiBwYXJzZUludChsZXR0ZXJzW2ldLmdldEF0dHJpYnV0ZSgneGFkdmFuY2UnKSwgMTApLFxuICAgICAgICAgICAga2VybmluZzoge30sXG4gICAgICAgICAgICB0ZXh0dXJlOiBuZXcgY29yZS5UZXh0dXJlKHRleHR1cmUuYmFzZVRleHR1cmUsIHRleHR1cmVSZWN0KVxuXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgLy9wYXJzZSBrZXJuaW5nc1xuICAgIHZhciBrZXJuaW5ncyA9IHJlc291cmNlLmRhdGEuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2tlcm5pbmcnKTtcbiAgICBmb3IgKGkgPSAwOyBpIDwga2VybmluZ3MubGVuZ3RoOyBpKyspXG4gICAge1xuICAgICAgICB2YXIgZmlyc3QgPSBwYXJzZUludChrZXJuaW5nc1tpXS5nZXRBdHRyaWJ1dGUoJ2ZpcnN0JyksIDEwKTtcbiAgICAgICAgdmFyIHNlY29uZCA9IHBhcnNlSW50KGtlcm5pbmdzW2ldLmdldEF0dHJpYnV0ZSgnc2Vjb25kJyksIDEwKTtcbiAgICAgICAgdmFyIGFtb3VudCA9IHBhcnNlSW50KGtlcm5pbmdzW2ldLmdldEF0dHJpYnV0ZSgnYW1vdW50JyksIDEwKTtcblxuICAgICAgICBkYXRhLmNoYXJzW3NlY29uZF0ua2VybmluZ1tmaXJzdF0gPSBhbW91bnQ7XG4gICAgfVxuXG4gICAgcmVzb3VyY2UuYml0bWFwRm9udCA9IGRhdGE7XG5cbiAgICAvLyBJJ20gbGVhdmluZyB0aGlzIGFzIGEgdGVtcG9yYXJ5IGZpeCBzbyB3ZSBjYW4gdGVzdCB0aGUgYml0bWFwIGZvbnRzIGluIHYzXG4gICAgLy8gYnV0IGl0J3MgdmVyeSBsaWtlbHkgdG8gY2hhbmdlXG4gICAgZXh0cmFzLkJpdG1hcFRleHQuZm9udHNbZGF0YS5mb250XSA9IGRhdGE7XG59XG5cblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoKVxue1xuICAgIHJldHVybiBmdW5jdGlvbiAocmVzb3VyY2UsIG5leHQpXG4gICAge1xuICAgICAgICAvLyBza2lwIGlmIG5vIGRhdGEgb3Igbm90IHhtbCBkYXRhXG4gICAgICAgIGlmICghcmVzb3VyY2UuZGF0YSB8fCAhcmVzb3VyY2UuaXNYbWwpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiBuZXh0KCk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBza2lwIGlmIG5vdCBiaXRtYXAgZm9udCBkYXRhLCB1c2luZyBzb21lIHNpbGx5IGR1Y2stdHlwaW5nXG4gICAgICAgIGlmIChcbiAgICAgICAgICAgIHJlc291cmNlLmRhdGEuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ3BhZ2UnKS5sZW5ndGggPT09IDAgfHxcbiAgICAgICAgICAgIHJlc291cmNlLmRhdGEuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2luZm8nKS5sZW5ndGggPT09IDAgfHxcbiAgICAgICAgICAgIHJlc291cmNlLmRhdGEuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2luZm8nKVswXS5nZXRBdHRyaWJ1dGUoJ2ZhY2UnKSA9PT0gbnVsbFxuICAgICAgICAgICAgKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gbmV4dCgpO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIHhtbFVybCA9IHBhdGguZGlybmFtZShyZXNvdXJjZS51cmwpO1xuXG4gICAgICAgIGlmICh4bWxVcmwgPT09ICcuJykge1xuICAgICAgICAgICAgeG1sVXJsID0gJyc7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5iYXNlVXJsICYmIHhtbFVybCkge1xuICAgICAgICAgICAgLy8gaWYgYmFzZXVybCBoYXMgYSB0cmFpbGluZyBzbGFzaCB0aGVuIGFkZCBvbmUgdG8geG1sVXJsIHNvIHRoZSByZXBsYWNlIHdvcmtzIGJlbG93XG4gICAgICAgICAgICBpZiAodGhpcy5iYXNlVXJsLmNoYXJBdCh0aGlzLmJhc2VVcmwubGVuZ3RoIC0gMSkgPT09ICcvJykge1xuICAgICAgICAgICAgICAgIHhtbFVybCArPSAnLyc7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIHJlbW92ZSBiYXNlVXJsIGZyb20geG1sVXJsXG4gICAgICAgICAgICB4bWxVcmwgPSB4bWxVcmwucmVwbGFjZSh0aGlzLmJhc2VVcmwsICcnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGlmIHRoZXJlIGlzIGFuIHhtbFVybCBub3csIGl0IG5lZWRzIGEgdHJhaWxpbmcgc2xhc2guIEVuc3VyZSB0aGF0IGl0IGRvZXMgaWYgdGhlIHN0cmluZyBpc24ndCBlbXB0eS5cbiAgICAgICAgaWYgKHhtbFVybCAmJiB4bWxVcmwuY2hhckF0KHhtbFVybC5sZW5ndGggLSAxKSAhPT0gJy8nKSB7XG4gICAgICAgICAgICB4bWxVcmwgKz0gJy8nO1xuICAgICAgICB9XG4gICAgICAgIHZhciB0ZXh0dXJlVXJsID0geG1sVXJsICsgcmVzb3VyY2UuZGF0YS5nZXRFbGVtZW50c0J5VGFnTmFtZSgncGFnZScpWzBdLmdldEF0dHJpYnV0ZSgnZmlsZScpO1xuICAgICAgICBpZiAoY29yZS51dGlscy5UZXh0dXJlQ2FjaGVbdGV4dHVyZVVybF0pIHtcbiAgICAgICAgICAgIC8vcmV1c2UgZXhpc3RpbmcgdGV4dHVyZVxuICAgICAgICAgICAgcGFyc2UocmVzb3VyY2UsIGNvcmUudXRpbHMuVGV4dHVyZUNhY2hlW3RleHR1cmVVcmxdKTtcbiAgICAgICAgICAgIG5leHQoKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHZhciBsb2FkT3B0aW9ucyA9IHtcbiAgICAgICAgICAgICAgICBjcm9zc09yaWdpbjogcmVzb3VyY2UuY3Jvc3NPcmlnaW4sXG4gICAgICAgICAgICAgICAgbG9hZFR5cGU6IFJlc291cmNlLkxPQURfVFlQRS5JTUFHRSxcbiAgICAgICAgICAgICAgICBtZXRhZGF0YTogcmVzb3VyY2UubWV0YWRhdGEuaW1hZ2VNZXRhZGF0YVxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIC8vIGxvYWQgdGhlIHRleHR1cmUgZm9yIHRoZSBmb250XG4gICAgICAgICAgICB0aGlzLmFkZChyZXNvdXJjZS5uYW1lICsgJ19pbWFnZScsIHRleHR1cmVVcmwsIGxvYWRPcHRpb25zLCBmdW5jdGlvbiAocmVzKSB7XG4gICAgICAgICAgICAgICAgcGFyc2UocmVzb3VyY2UsIHJlcy50ZXh0dXJlKTtcbiAgICAgICAgICAgICAgICBuZXh0KCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH07XG59O1xuIiwiLyoqXG4gKiBAZmlsZSAgICAgICAgTWFpbiBleHBvcnQgb2YgdGhlIFBJWEkgbG9hZGVycyBsaWJyYXJ5XG4gKiBAYXV0aG9yICAgICAgTWF0IEdyb3ZlcyA8bWF0QGdvb2Rib3lkaWdpdGFsLmNvbT5cbiAqIEBjb3B5cmlnaHQgICAyMDEzLTIwMTUgR29vZEJveURpZ2l0YWxcbiAqIEBsaWNlbnNlICAgICB7QGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL3BpeGlqcy9waXhpLmpzL2Jsb2IvbWFzdGVyL0xJQ0VOU0V8TUlUIExpY2Vuc2V9XG4gKi9cblxuLyoqXG4gKiBAbmFtZXNwYWNlIFBJWEkubG9hZGVyc1xuICovXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgICBMb2FkZXI6ICAgICAgICAgICAgIHJlcXVpcmUoJy4vbG9hZGVyJyksXG5cbiAgICAvLyBwYXJzZXJzXG4gICAgYml0bWFwRm9udFBhcnNlcjogICByZXF1aXJlKCcuL2JpdG1hcEZvbnRQYXJzZXInKSxcbiAgICBzcHJpdGVzaGVldFBhcnNlcjogIHJlcXVpcmUoJy4vc3ByaXRlc2hlZXRQYXJzZXInKSxcbiAgICB0ZXh0dXJlUGFyc2VyOiAgICAgIHJlcXVpcmUoJy4vdGV4dHVyZVBhcnNlcicpLFxuICAgIFJlc291cmNlOiAgICAgICAgICAgcmVxdWlyZSgncmVzb3VyY2UtbG9hZGVyJykuUmVzb3VyY2Vcbn07XG4iLCJ2YXIgUmVzb3VyY2VMb2FkZXIgPSByZXF1aXJlKCdyZXNvdXJjZS1sb2FkZXInKSxcbiAgICB0ZXh0dXJlUGFyc2VyID0gcmVxdWlyZSgnLi90ZXh0dXJlUGFyc2VyJyksXG4gICAgc3ByaXRlc2hlZXRQYXJzZXIgPSByZXF1aXJlKCcuL3Nwcml0ZXNoZWV0UGFyc2VyJyksXG4gICAgYml0bWFwRm9udFBhcnNlciA9IHJlcXVpcmUoJy4vYml0bWFwRm9udFBhcnNlcicpO1xuXG4vKipcbiAqXG4gKiBUaGUgbmV3IGxvYWRlciwgZXh0ZW5kcyBSZXNvdXJjZSBMb2FkZXIgYnkgQ2hhZCBFbmdsZXIgOiBodHRwczovL2dpdGh1Yi5jb20vZW5nbGVyY2ovcmVzb3VyY2UtbG9hZGVyXG4gKlxuICogYGBganNcbiAqIHZhciBsb2FkZXIgPSBQSVhJLmxvYWRlcjsgLy8gcGl4aSBleHBvc2VzIGEgcHJlbWFkZSBpbnN0YW5jZSBmb3IgeW91IHRvIHVzZS5cbiAqIC8vb3JcbiAqIHZhciBsb2FkZXIgPSBuZXcgUElYSS5sb2FkZXJzLkxvYWRlcigpOyAvLyB5b3UgY2FuIGFsc28gY3JlYXRlIHlvdXIgb3duIGlmIHlvdSB3YW50XG4gKlxuICogbG9hZGVyLmFkZCgnYnVubnknLFwiZGF0YS9idW5ueS5wbmdcIik7XG4gKlxuICogbG9hZGVyLm9uY2UoJ2NvbXBsZXRlJyxvbkFzc2V0c0xvYWRlZCk7XG4gKlxuICogbG9hZGVyLmxvYWQoKTtcbiAqIGBgYFxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5SZXNvdXJjZUxvYWRlclxuICogQG1lbWJlcm9mIFBJWEkubG9hZGVyc1xuICogQHBhcmFtIFtiYXNlVXJsPScnXSB7c3RyaW5nfSBUaGUgYmFzZSB1cmwgZm9yIGFsbCByZXNvdXJjZXMgbG9hZGVkIGJ5IHRoaXMgbG9hZGVyLlxuICogQHBhcmFtIFtjb25jdXJyZW5jeT0xMF0ge251bWJlcn0gVGhlIG51bWJlciBvZiByZXNvdXJjZXMgdG8gbG9hZCBjb25jdXJyZW50bHkuXG4gKi9cbmZ1bmN0aW9uIExvYWRlcihiYXNlVXJsLCBjb25jdXJyZW5jeSlcbntcbiAgICBSZXNvdXJjZUxvYWRlci5jYWxsKHRoaXMsIGJhc2VVcmwsIGNvbmN1cnJlbmN5KTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgTG9hZGVyLl9waXhpTWlkZGxld2FyZS5sZW5ndGg7ICsraSkge1xuICAgICAgICB0aGlzLnVzZShMb2FkZXIuX3BpeGlNaWRkbGV3YXJlW2ldKCkpO1xuICAgIH1cbn1cblxuTG9hZGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoUmVzb3VyY2VMb2FkZXIucHJvdG90eXBlKTtcbkxvYWRlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBMb2FkZXI7XG5cbm1vZHVsZS5leHBvcnRzID0gTG9hZGVyO1xuXG5Mb2FkZXIuX3BpeGlNaWRkbGV3YXJlID0gW1xuICAgIC8vIHBhcnNlIGFueSBibG9iIGludG8gbW9yZSB1c2FibGUgb2JqZWN0cyAoZS5nLiBJbWFnZSlcbiAgICBSZXNvdXJjZUxvYWRlci5taWRkbGV3YXJlLnBhcnNpbmcuYmxvYixcbiAgICAvLyBwYXJzZSBhbnkgSW1hZ2Ugb2JqZWN0cyBpbnRvIHRleHR1cmVzXG4gICAgdGV4dHVyZVBhcnNlcixcbiAgICAvLyBwYXJzZSBhbnkgc3ByaXRlc2hlZXQgZGF0YSBpbnRvIG11bHRpcGxlIHRleHR1cmVzXG4gICAgc3ByaXRlc2hlZXRQYXJzZXIsXG4gICAgLy8gcGFyc2UgYW55IHNwcml0ZXNoZWV0IGRhdGEgaW50byBtdWx0aXBsZSB0ZXh0dXJlc1xuICAgIGJpdG1hcEZvbnRQYXJzZXJcbl07XG5cbkxvYWRlci5hZGRQaXhpTWlkZGxld2FyZSA9IGZ1bmN0aW9uIChmbikge1xuICAgIExvYWRlci5fcGl4aU1pZGRsZXdhcmUucHVzaChmbik7XG59O1xuXG4vLyBBZGQgY3VzdG9tIGV4dGVudGlvbnNcbnZhciBSZXNvdXJjZSA9IFJlc291cmNlTG9hZGVyLlJlc291cmNlO1xuXG5SZXNvdXJjZS5zZXRFeHRlbnNpb25YaHJUeXBlKCdmbnQnLCBSZXNvdXJjZS5YSFJfUkVTUE9OU0VfVFlQRS5ET0NVTUVOVCk7XG4iLCJ2YXIgUmVzb3VyY2UgPSByZXF1aXJlKCdyZXNvdXJjZS1sb2FkZXInKS5SZXNvdXJjZSxcbiAgICBwYXRoID0gcmVxdWlyZSgncGF0aCcpLFxuICAgIGNvcmUgPSByZXF1aXJlKCcuLi9jb3JlJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKClcbntcbiAgICByZXR1cm4gZnVuY3Rpb24gKHJlc291cmNlLCBuZXh0KVxuICAgIHtcbiAgICAgICAgLy8gc2tpcCBpZiBubyBkYXRhLCBpdHMgbm90IGpzb24sIG9yIGl0IGlzbid0IHNwcml0ZXNoZWV0IGRhdGFcbiAgICAgICAgaWYgKCFyZXNvdXJjZS5kYXRhIHx8ICFyZXNvdXJjZS5pc0pzb24gfHwgIXJlc291cmNlLmRhdGEuZnJhbWVzKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gbmV4dCgpO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGxvYWRPcHRpb25zID0ge1xuICAgICAgICAgICAgY3Jvc3NPcmlnaW46IHJlc291cmNlLmNyb3NzT3JpZ2luLFxuICAgICAgICAgICAgbG9hZFR5cGU6IFJlc291cmNlLkxPQURfVFlQRS5JTUFHRSxcbiAgICAgICAgICAgIG1ldGFkYXRhOiByZXNvdXJjZS5tZXRhZGF0YS5pbWFnZU1ldGFkYXRhXG4gICAgICAgIH07XG5cbiAgICAgICAgdmFyIHJvdXRlID0gcGF0aC5kaXJuYW1lKHJlc291cmNlLnVybC5yZXBsYWNlKHRoaXMuYmFzZVVybCwgJycpKTtcblxuICAgICAgICB2YXIgcmVzb2x1dGlvbiA9IGNvcmUudXRpbHMuZ2V0UmVzb2x1dGlvbk9mVXJsKCByZXNvdXJjZS51cmwgKTtcblxuICAgICAgICAvLyBsb2FkIHRoZSBpbWFnZSBmb3IgdGhpcyBzaGVldFxuICAgICAgICB0aGlzLmFkZChyZXNvdXJjZS5uYW1lICsgJ19pbWFnZScsIHJvdXRlICsgJy8nICsgcmVzb3VyY2UuZGF0YS5tZXRhLmltYWdlLCBsb2FkT3B0aW9ucywgZnVuY3Rpb24gKHJlcylcbiAgICAgICAge1xuICAgICAgICAgICAgcmVzb3VyY2UudGV4dHVyZXMgPSB7fTtcblxuICAgICAgICAgICAgdmFyIGZyYW1lcyA9IHJlc291cmNlLmRhdGEuZnJhbWVzO1xuXG4gICAgICAgICAgICBmb3IgKHZhciBpIGluIGZyYW1lcylcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB2YXIgcmVjdCA9IGZyYW1lc1tpXS5mcmFtZTtcblxuICAgICAgICAgICAgICAgIGlmIChyZWN0KVxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHNpemUgPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICB2YXIgdHJpbSA9IG51bGw7XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKGZyYW1lc1tpXS5yb3RhdGVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzaXplID0gbmV3IGNvcmUuUmVjdGFuZ2xlKHJlY3QueCwgcmVjdC55LCByZWN0LmgsIHJlY3Qudyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzaXplID0gbmV3IGNvcmUuUmVjdGFuZ2xlKHJlY3QueCwgcmVjdC55LCByZWN0LncsIHJlY3QuaCk7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAvLyAgQ2hlY2sgdG8gc2VlIGlmIHRoZSBzcHJpdGUgaXMgdHJpbW1lZFxuICAgICAgICAgICAgICAgICAgICBpZiAoZnJhbWVzW2ldLnRyaW1tZWQpXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRyaW0gPSBuZXcgY29yZS5SZWN0YW5nbGUoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJhbWVzW2ldLnNwcml0ZVNvdXJjZVNpemUueCAvIHJlc29sdXRpb24sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJhbWVzW2ldLnNwcml0ZVNvdXJjZVNpemUueSAvIHJlc29sdXRpb24sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJhbWVzW2ldLnNvdXJjZVNpemUudyAvIHJlc29sdXRpb24sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJhbWVzW2ldLnNvdXJjZVNpemUuaCAvIHJlc29sdXRpb25cbiAgICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgLy8gZmxpcCB0aGUgd2lkdGggYW5kIGhlaWdodCFcbiAgICAgICAgICAgICAgICAgICAgaWYgKGZyYW1lc1tpXS5yb3RhdGVkKVxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgdGVtcCA9IHNpemUud2lkdGg7XG4gICAgICAgICAgICAgICAgICAgICAgICBzaXplLndpZHRoID0gc2l6ZS5oZWlnaHQ7XG4gICAgICAgICAgICAgICAgICAgICAgICBzaXplLmhlaWdodCA9IHRlbXA7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBzaXplLnggLz0gcmVzb2x1dGlvbjtcbiAgICAgICAgICAgICAgICAgICAgc2l6ZS55IC89IHJlc29sdXRpb247XG4gICAgICAgICAgICAgICAgICAgIHNpemUud2lkdGggLz0gcmVzb2x1dGlvbjtcbiAgICAgICAgICAgICAgICAgICAgc2l6ZS5oZWlnaHQgLz0gcmVzb2x1dGlvbjtcblxuICAgICAgICAgICAgICAgICAgICByZXNvdXJjZS50ZXh0dXJlc1tpXSA9IG5ldyBjb3JlLlRleHR1cmUocmVzLnRleHR1cmUuYmFzZVRleHR1cmUsIHNpemUsIHNpemUuY2xvbmUoKSwgdHJpbSwgZnJhbWVzW2ldLnJvdGF0ZWQpO1xuXG4gICAgICAgICAgICAgICAgICAgIC8vIGxldHMgYWxzbyBhZGQgdGhlIGZyYW1lIHRvIHBpeGkncyBnbG9iYWwgY2FjaGUgZm9yIGZyb21GcmFtZSBhbmQgZnJvbUltYWdlIGZ1bmN0aW9uc1xuICAgICAgICAgICAgICAgICAgICBjb3JlLnV0aWxzLlRleHR1cmVDYWNoZVtpXSA9IHJlc291cmNlLnRleHR1cmVzW2ldO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgbmV4dCgpO1xuICAgICAgICB9KTtcbiAgICB9O1xufTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vY29yZScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICgpXG57XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChyZXNvdXJjZSwgbmV4dClcbiAgICB7XG4gICAgICAgIC8vIGNyZWF0ZSBhIG5ldyB0ZXh0dXJlIGlmIHRoZSBkYXRhIGlzIGFuIEltYWdlIG9iamVjdFxuICAgICAgICBpZiAocmVzb3VyY2UuZGF0YSAmJiByZXNvdXJjZS5pc0ltYWdlKVxuICAgICAgICB7XG4gICAgICAgICAgICB2YXIgYmFzZVRleHR1cmUgPSBuZXcgY29yZS5CYXNlVGV4dHVyZShyZXNvdXJjZS5kYXRhLCBudWxsLCBjb3JlLnV0aWxzLmdldFJlc29sdXRpb25PZlVybChyZXNvdXJjZS51cmwpKTtcbiAgICAgICAgICAgIGJhc2VUZXh0dXJlLmltYWdlVXJsID0gcmVzb3VyY2UudXJsO1xuICAgICAgICAgICAgcmVzb3VyY2UudGV4dHVyZSA9IG5ldyBjb3JlLlRleHR1cmUoYmFzZVRleHR1cmUpO1xuICAgICAgICAgICAgLy8gbGV0cyBhbHNvIGFkZCB0aGUgZnJhbWUgdG8gcGl4aSdzIGdsb2JhbCBjYWNoZSBmb3IgZnJvbUZyYW1lIGFuZCBmcm9tSW1hZ2UgZnVjbnRpb25zXG4gICAgICAgICAgICBjb3JlLnV0aWxzLkJhc2VUZXh0dXJlQ2FjaGVbcmVzb3VyY2UudXJsXSA9IGJhc2VUZXh0dXJlO1xuICAgICAgICAgICAgY29yZS51dGlscy5UZXh0dXJlQ2FjaGVbcmVzb3VyY2UudXJsXSA9IHJlc291cmNlLnRleHR1cmU7XG4gICAgICAgIH1cblxuICAgICAgICBuZXh0KCk7XG4gICAgfTtcbn07XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uL2NvcmUnKSxcbiAgICB0ZW1wUG9pbnQgPSBuZXcgY29yZS5Qb2ludCgpLFxuICAgIHRlbXBQb2x5Z29uID0gbmV3IGNvcmUuUG9seWdvbigpO1xuXG4vKipcbiAqIEJhc2UgbWVzaCBjbGFzc1xuICogQGNsYXNzXG4gKiBAZXh0ZW5kcyBQSVhJLkNvbnRhaW5lclxuICogQG1lbWJlcm9mIFBJWEkubWVzaFxuICogQHBhcmFtIHRleHR1cmUge1BJWEkuVGV4dHVyZX0gVGhlIHRleHR1cmUgdG8gdXNlXG4gKiBAcGFyYW0gW3ZlcnRpY2VzXSB7RmxvYXQzMkFycmF5fSBpZiB5b3Ugd2FudCB0byBzcGVjaWZ5IHRoZSB2ZXJ0aWNlc1xuICogQHBhcmFtIFt1dnNdIHtGbG9hdDMyQXJyYXl9IGlmIHlvdSB3YW50IHRvIHNwZWNpZnkgdGhlIHV2c1xuICogQHBhcmFtIFtpbmRpY2VzXSB7VWludDE2QXJyYXl9IGlmIHlvdSB3YW50IHRvIHNwZWNpZnkgdGhlIGluZGljZXNcbiAqIEBwYXJhbSBbZHJhd01vZGVdIHtudW1iZXJ9IHRoZSBkcmF3TW9kZSwgY2FuIGJlIGFueSBvZiB0aGUgTWVzaC5EUkFXX01PREVTIGNvbnN0c1xuICovXG5mdW5jdGlvbiBNZXNoKHRleHR1cmUsIHZlcnRpY2VzLCB1dnMsIGluZGljZXMsIGRyYXdNb2RlKVxue1xuICAgIGNvcmUuQ29udGFpbmVyLmNhbGwodGhpcyk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgdGV4dHVyZSBvZiB0aGUgTWVzaFxuICAgICAqXG4gICAgICogQG1lbWJlciB7UElYSS5UZXh0dXJlfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fdGV4dHVyZSA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgVXZzIG9mIHRoZSBNZXNoXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtGbG9hdDMyQXJyYXl9XG4gICAgICovXG4gICAgdGhpcy51dnMgPSB1dnMgfHwgbmV3IEZsb2F0MzJBcnJheShbMCwgMCxcbiAgICAgICAgMSwgMCxcbiAgICAgICAgMSwgMSxcbiAgICAgICAgMCwgMV0pO1xuXG4gICAgLyoqXG4gICAgICogQW4gYXJyYXkgb2YgdmVydGljZXNcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge0Zsb2F0MzJBcnJheX1cbiAgICAgKi9cbiAgICB0aGlzLnZlcnRpY2VzID0gdmVydGljZXMgfHwgbmV3IEZsb2F0MzJBcnJheShbMCwgMCxcbiAgICAgICAgMTAwLCAwLFxuICAgICAgICAxMDAsIDEwMCxcbiAgICAgICAgMCwgMTAwXSk7XG5cbiAgICAvKlxuICAgICAqIEBtZW1iZXIge1VpbnQxNkFycmF5fSBBbiBhcnJheSBjb250YWluaW5nIHRoZSBpbmRpY2VzIG9mIHRoZSB2ZXJ0aWNlc1xuICAgICAqL1xuICAgIC8vICBUT0RPIGF1dG8gZ2VuZXJhdGUgdGhpcyBiYXNlZCBvbiBkcmF3IG1vZGUhXG4gICAgdGhpcy5pbmRpY2VzID0gaW5kaWNlcyB8fCBuZXcgVWludDE2QXJyYXkoWzAsIDEsIDMsIDJdKTtcblxuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgdGhlIE1lc2ggaXMgZGlydHkgb3Igbm90XG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqL1xuICAgIHRoaXMuZGlydHkgPSB0cnVlO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGJsZW5kIG1vZGUgdG8gYmUgYXBwbGllZCB0byB0aGUgc3ByaXRlLiBTZXQgdG8gYFBJWEkuQkxFTkRfTU9ERVMuTk9STUFMYCB0byByZW1vdmUgYW55IGJsZW5kIG1vZGUuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgUElYSS5CTEVORF9NT0RFUy5OT1JNQUxcbiAgICAgKiBAc2VlIFBJWEkuQkxFTkRfTU9ERVNcbiAgICAgKi9cbiAgICB0aGlzLmJsZW5kTW9kZSA9IGNvcmUuQkxFTkRfTU9ERVMuTk9STUFMO1xuXG4gICAgLyoqXG4gICAgICogVHJpYW5nbGVzIGluIGNhbnZhcyBtb2RlIGFyZSBhdXRvbWF0aWNhbGx5IGFudGlhbGlhc2VkLCB1c2UgdGhpcyB2YWx1ZSB0byBmb3JjZSB0cmlhbmdsZXMgdG8gb3ZlcmxhcCBhIGJpdCB3aXRoIGVhY2ggb3RoZXIuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy5jYW52YXNQYWRkaW5nID0gMDtcblxuICAgIC8qKlxuICAgICAqIFRoZSB3YXkgdGhlIE1lc2ggc2hvdWxkIGJlIGRyYXduLCBjYW4gYmUgYW55IG9mIHRoZSB7QGxpbmsgUElYSS5tZXNoLk1lc2guRFJBV19NT0RFU30gY29uc3RzXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtudW1iZXJ9XG4gICAgICogQHNlZSBQSVhJLm1lc2guTWVzaC5EUkFXX01PREVTXG4gICAgICovXG4gICAgdGhpcy5kcmF3TW9kZSA9IGRyYXdNb2RlIHx8IE1lc2guRFJBV19NT0RFUy5UUklBTkdMRV9NRVNIO1xuXG4gICAgLy8gcnVuIHRleHR1cmUgc2V0dGVyO1xuICAgIHRoaXMudGV4dHVyZSA9IHRleHR1cmU7XG5cbiAgICAgLyoqXG4gICAgICogVGhlIGRlZmF1bHQgc2hhZGVyIHRoYXQgaXMgdXNlZCBpZiBhIG1lc2ggZG9lc24ndCBoYXZlIGEgbW9yZSBzcGVjaWZpYyBvbmUuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlNoYWRlcn1cbiAgICAgKi9cbiAgICB0aGlzLnNoYWRlciA9IG51bGw7XG59XG5cbi8vIGNvbnN0cnVjdG9yXG5NZXNoLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoY29yZS5Db250YWluZXIucHJvdG90eXBlKTtcbk1lc2gucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gTWVzaDtcbm1vZHVsZS5leHBvcnRzID0gTWVzaDtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoTWVzaC5wcm90b3R5cGUsIHtcbiAgICAvKipcbiAgICAgKiBUaGUgdGV4dHVyZSB0aGF0IHRoZSBzcHJpdGUgaXMgdXNpbmdcbiAgICAgKlxuICAgICAqIEBtZW1iZXIge1BJWEkuVGV4dHVyZX1cbiAgICAgKiBAbWVtYmVyb2YgUElYSS5tZXNoLk1lc2gjXG4gICAgICovXG4gICAgdGV4dHVyZToge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiAgdGhpcy5fdGV4dHVyZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGlmICh0aGlzLl90ZXh0dXJlID09PSB2YWx1ZSlcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuX3RleHR1cmUgPSB2YWx1ZTtcblxuICAgICAgICAgICAgaWYgKHZhbHVlKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIC8vIHdhaXQgZm9yIHRoZSB0ZXh0dXJlIHRvIGxvYWRcbiAgICAgICAgICAgICAgICBpZiAodmFsdWUuYmFzZVRleHR1cmUuaGFzTG9hZGVkKVxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fb25UZXh0dXJlVXBkYXRlKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlLm9uY2UoJ3VwZGF0ZScsIHRoaXMuX29uVGV4dHVyZVVwZGF0ZSwgdGhpcyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxufSk7XG5cbi8qKlxuICogUmVuZGVycyB0aGUgb2JqZWN0IHVzaW5nIHRoZSBXZWJHTCByZW5kZXJlclxuICpcbiAqIEBwYXJhbSByZW5kZXJlciB7UElYSS5XZWJHTFJlbmRlcmVyfSBhIHJlZmVyZW5jZSB0byB0aGUgV2ViR0wgcmVuZGVyZXJcbiAqIEBwcml2YXRlXG4gKi9cbk1lc2gucHJvdG90eXBlLl9yZW5kZXJXZWJHTCA9IGZ1bmN0aW9uIChyZW5kZXJlcilcbntcbiAgICByZW5kZXJlci5zZXRPYmplY3RSZW5kZXJlcihyZW5kZXJlci5wbHVnaW5zLm1lc2gpO1xuICAgIHJlbmRlcmVyLnBsdWdpbnMubWVzaC5yZW5kZXIodGhpcyk7XG59O1xuXG4vKipcbiAqIFJlbmRlcnMgdGhlIG9iamVjdCB1c2luZyB0aGUgQ2FudmFzIHJlbmRlcmVyXG4gKlxuICogQHBhcmFtIHJlbmRlcmVyIHtQSVhJLkNhbnZhc1JlbmRlcmVyfVxuICogQHByaXZhdGVcbiAqL1xuTWVzaC5wcm90b3R5cGUuX3JlbmRlckNhbnZhcyA9IGZ1bmN0aW9uIChyZW5kZXJlcilcbntcbiAgICB2YXIgY29udGV4dCA9IHJlbmRlcmVyLmNvbnRleHQ7XG5cbiAgICB2YXIgdHJhbnNmb3JtID0gdGhpcy53b3JsZFRyYW5zZm9ybTtcblxuICAgIGlmIChyZW5kZXJlci5yb3VuZFBpeGVscylcbiAgICB7XG4gICAgICAgIGNvbnRleHQuc2V0VHJhbnNmb3JtKHRyYW5zZm9ybS5hLCB0cmFuc2Zvcm0uYiwgdHJhbnNmb3JtLmMsIHRyYW5zZm9ybS5kLCB0cmFuc2Zvcm0udHggfCAwLCB0cmFuc2Zvcm0udHkgfCAwKTtcbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgY29udGV4dC5zZXRUcmFuc2Zvcm0odHJhbnNmb3JtLmEsIHRyYW5zZm9ybS5iLCB0cmFuc2Zvcm0uYywgdHJhbnNmb3JtLmQsIHRyYW5zZm9ybS50eCwgdHJhbnNmb3JtLnR5KTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5kcmF3TW9kZSA9PT0gTWVzaC5EUkFXX01PREVTLlRSSUFOR0xFX01FU0gpXG4gICAge1xuICAgICAgICB0aGlzLl9yZW5kZXJDYW52YXNUcmlhbmdsZU1lc2goY29udGV4dCk7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHRoaXMuX3JlbmRlckNhbnZhc1RyaWFuZ2xlcyhjb250ZXh0KTtcbiAgICB9XG59O1xuXG4vKipcbiAqIERyYXdzIHRoZSBvYmplY3QgaW4gVHJpYW5nbGUgTWVzaCBtb2RlIHVzaW5nIGNhbnZhc1xuICpcbiAqIEBwYXJhbSBjb250ZXh0IHtDYW52YXNSZW5kZXJpbmdDb250ZXh0MkR9IHRoZSBjdXJyZW50IGRyYXdpbmcgY29udGV4dFxuICogQHByaXZhdGVcbiAqL1xuTWVzaC5wcm90b3R5cGUuX3JlbmRlckNhbnZhc1RyaWFuZ2xlTWVzaCA9IGZ1bmN0aW9uIChjb250ZXh0KVxue1xuICAgIC8vIGRyYXcgdHJpYW5nbGVzISFcbiAgICB2YXIgdmVydGljZXMgPSB0aGlzLnZlcnRpY2VzO1xuICAgIHZhciB1dnMgPSB0aGlzLnV2cztcblxuICAgIHZhciBsZW5ndGggPSB2ZXJ0aWNlcy5sZW5ndGggLyAyO1xuICAgIC8vIHRoaXMuY291bnQrKztcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoIC0gMjsgaSsrKVxuICAgIHtcbiAgICAgICAgLy8gZHJhdyBzb21lIHRyaWFuZ2xlcyFcbiAgICAgICAgdmFyIGluZGV4ID0gaSAqIDI7XG4gICAgICAgIHRoaXMuX3JlbmRlckNhbnZhc0RyYXdUcmlhbmdsZShjb250ZXh0LCB2ZXJ0aWNlcywgdXZzLCBpbmRleCwgKGluZGV4ICsgMiksIChpbmRleCArIDQpKTtcbiAgICB9XG59O1xuXG4vKipcbiAqIERyYXdzIHRoZSBvYmplY3QgaW4gdHJpYW5nbGUgbW9kZSB1c2luZyBjYW52YXNcbiAqXG4gKiBAcGFyYW0gY29udGV4dCB7Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEfSB0aGUgY3VycmVudCBkcmF3aW5nIGNvbnRleHRcbiAqIEBwcml2YXRlXG4gKi9cbk1lc2gucHJvdG90eXBlLl9yZW5kZXJDYW52YXNUcmlhbmdsZXMgPSBmdW5jdGlvbiAoY29udGV4dClcbntcbiAgICAvLyBkcmF3IHRyaWFuZ2xlcyEhXG4gICAgdmFyIHZlcnRpY2VzID0gdGhpcy52ZXJ0aWNlcztcbiAgICB2YXIgdXZzID0gdGhpcy51dnM7XG4gICAgdmFyIGluZGljZXMgPSB0aGlzLmluZGljZXM7XG5cbiAgICB2YXIgbGVuZ3RoID0gaW5kaWNlcy5sZW5ndGg7XG4gICAgLy8gdGhpcy5jb3VudCsrO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7IGkgKz0gMylcbiAgICB7XG4gICAgICAgIC8vIGRyYXcgc29tZSB0cmlhbmdsZXMhXG4gICAgICAgIHZhciBpbmRleDAgPSBpbmRpY2VzW2ldICogMiwgaW5kZXgxID0gaW5kaWNlc1tpICsgMV0gKiAyLCBpbmRleDIgPSBpbmRpY2VzW2kgKyAyXSAqIDI7XG4gICAgICAgIHRoaXMuX3JlbmRlckNhbnZhc0RyYXdUcmlhbmdsZShjb250ZXh0LCB2ZXJ0aWNlcywgdXZzLCBpbmRleDAsIGluZGV4MSwgaW5kZXgyKTtcbiAgICB9XG59O1xuXG4vKipcbiAqIERyYXdzIG9uZSBvZiB0aGUgdHJpYW5nbGVzIHRoYXQgZm9ybSB0aGlzIE1lc2hcbiAqXG4gKiBAcGFyYW0gY29udGV4dCB7Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEfSB0aGUgY3VycmVudCBkcmF3aW5nIGNvbnRleHRcbiAqIEBwYXJhbSB2ZXJ0aWNlcyB7RmxvYXQzMkFycmF5fSBhIHJlZmVyZW5jZSB0byB0aGUgdmVydGljZXMgb2YgdGhlIE1lc2hcbiAqIEBwYXJhbSB1dnMge0Zsb2F0MzJBcnJheX0gYSByZWZlcmVuY2UgdG8gdGhlIHV2cyBvZiB0aGUgTWVzaFxuICogQHBhcmFtIGluZGV4MCB7bnVtYmVyfSB0aGUgaW5kZXggb2YgdGhlIGZpcnN0IHZlcnRleFxuICogQHBhcmFtIGluZGV4MSB7bnVtYmVyfSB0aGUgaW5kZXggb2YgdGhlIHNlY29uZCB2ZXJ0ZXhcbiAqIEBwYXJhbSBpbmRleDIge251bWJlcn0gdGhlIGluZGV4IG9mIHRoZSB0aGlyZCB2ZXJ0ZXhcbiAqIEBwcml2YXRlXG4gKi9cbk1lc2gucHJvdG90eXBlLl9yZW5kZXJDYW52YXNEcmF3VHJpYW5nbGUgPSBmdW5jdGlvbiAoY29udGV4dCwgdmVydGljZXMsIHV2cywgaW5kZXgwLCBpbmRleDEsIGluZGV4MilcbntcbiAgICB2YXIgdGV4dHVyZVNvdXJjZSA9IHRoaXMuX3RleHR1cmUuYmFzZVRleHR1cmUuc291cmNlO1xuICAgIHZhciB0ZXh0dXJlV2lkdGggPSB0aGlzLl90ZXh0dXJlLmJhc2VUZXh0dXJlLndpZHRoO1xuICAgIHZhciB0ZXh0dXJlSGVpZ2h0ID0gdGhpcy5fdGV4dHVyZS5iYXNlVGV4dHVyZS5oZWlnaHQ7XG5cbiAgICB2YXIgeDAgPSB2ZXJ0aWNlc1tpbmRleDBdLCB4MSA9IHZlcnRpY2VzW2luZGV4MV0sIHgyID0gdmVydGljZXNbaW5kZXgyXTtcbiAgICB2YXIgeTAgPSB2ZXJ0aWNlc1tpbmRleDAgKyAxXSwgeTEgPSB2ZXJ0aWNlc1tpbmRleDEgKyAxXSwgeTIgPSB2ZXJ0aWNlc1tpbmRleDIgKyAxXTtcblxuICAgIHZhciB1MCA9IHV2c1tpbmRleDBdICogdGV4dHVyZVdpZHRoLCB1MSA9IHV2c1tpbmRleDFdICogdGV4dHVyZVdpZHRoLCB1MiA9IHV2c1tpbmRleDJdICogdGV4dHVyZVdpZHRoO1xuICAgIHZhciB2MCA9IHV2c1tpbmRleDAgKyAxXSAqIHRleHR1cmVIZWlnaHQsIHYxID0gdXZzW2luZGV4MSArIDFdICogdGV4dHVyZUhlaWdodCwgdjIgPSB1dnNbaW5kZXgyICsgMV0gKiB0ZXh0dXJlSGVpZ2h0O1xuXG4gICAgaWYgKHRoaXMuY2FudmFzUGFkZGluZyA+IDApXG4gICAge1xuICAgICAgICB2YXIgcGFkZGluZ1ggPSB0aGlzLmNhbnZhc1BhZGRpbmcgLyB0aGlzLndvcmxkVHJhbnNmb3JtLmE7XG4gICAgICAgIHZhciBwYWRkaW5nWSA9IHRoaXMuY2FudmFzUGFkZGluZyAvIHRoaXMud29ybGRUcmFuc2Zvcm0uZDtcbiAgICAgICAgdmFyIGNlbnRlclggPSAoeDAgKyB4MSArIHgyKSAvIDM7XG4gICAgICAgIHZhciBjZW50ZXJZID0gKHkwICsgeTEgKyB5MikgLyAzO1xuXG4gICAgICAgIHZhciBub3JtWCA9IHgwIC0gY2VudGVyWDtcbiAgICAgICAgdmFyIG5vcm1ZID0geTAgLSBjZW50ZXJZO1xuXG4gICAgICAgIHZhciBkaXN0ID0gTWF0aC5zcXJ0KG5vcm1YICogbm9ybVggKyBub3JtWSAqIG5vcm1ZKTtcbiAgICAgICAgeDAgPSBjZW50ZXJYICsgKG5vcm1YIC8gZGlzdCkgKiAoZGlzdCArIHBhZGRpbmdYKTtcbiAgICAgICAgeTAgPSBjZW50ZXJZICsgKG5vcm1ZIC8gZGlzdCkgKiAoZGlzdCArIHBhZGRpbmdZKTtcblxuICAgICAgICAvL1xuXG4gICAgICAgIG5vcm1YID0geDEgLSBjZW50ZXJYO1xuICAgICAgICBub3JtWSA9IHkxIC0gY2VudGVyWTtcblxuICAgICAgICBkaXN0ID0gTWF0aC5zcXJ0KG5vcm1YICogbm9ybVggKyBub3JtWSAqIG5vcm1ZKTtcbiAgICAgICAgeDEgPSBjZW50ZXJYICsgKG5vcm1YIC8gZGlzdCkgKiAoZGlzdCArIHBhZGRpbmdYKTtcbiAgICAgICAgeTEgPSBjZW50ZXJZICsgKG5vcm1ZIC8gZGlzdCkgKiAoZGlzdCArIHBhZGRpbmdZKTtcblxuICAgICAgICBub3JtWCA9IHgyIC0gY2VudGVyWDtcbiAgICAgICAgbm9ybVkgPSB5MiAtIGNlbnRlclk7XG5cbiAgICAgICAgZGlzdCA9IE1hdGguc3FydChub3JtWCAqIG5vcm1YICsgbm9ybVkgKiBub3JtWSk7XG4gICAgICAgIHgyID0gY2VudGVyWCArIChub3JtWCAvIGRpc3QpICogKGRpc3QgKyBwYWRkaW5nWCk7XG4gICAgICAgIHkyID0gY2VudGVyWSArIChub3JtWSAvIGRpc3QpICogKGRpc3QgKyBwYWRkaW5nWSk7XG4gICAgfVxuXG4gICAgY29udGV4dC5zYXZlKCk7XG4gICAgY29udGV4dC5iZWdpblBhdGgoKTtcblxuXG4gICAgY29udGV4dC5tb3ZlVG8oeDAsIHkwKTtcbiAgICBjb250ZXh0LmxpbmVUbyh4MSwgeTEpO1xuICAgIGNvbnRleHQubGluZVRvKHgyLCB5Mik7XG5cbiAgICBjb250ZXh0LmNsb3NlUGF0aCgpO1xuXG4gICAgY29udGV4dC5jbGlwKCk7XG5cbiAgICAvLyBDb21wdXRlIG1hdHJpeCB0cmFuc2Zvcm1cbiAgICB2YXIgZGVsdGEgPSAgKHUwICogdjEpICAgICAgKyAodjAgKiB1MikgICAgICArICh1MSAqIHYyKSAgICAgIC0gKHYxICogdTIpICAgICAgLSAodjAgKiB1MSkgICAgICAtICh1MCAqIHYyKTtcbiAgICB2YXIgZGVsdGFBID0gKHgwICogdjEpICAgICAgKyAodjAgKiB4MikgICAgICArICh4MSAqIHYyKSAgICAgIC0gKHYxICogeDIpICAgICAgLSAodjAgKiB4MSkgICAgICAtICh4MCAqIHYyKTtcbiAgICB2YXIgZGVsdGFCID0gKHUwICogeDEpICAgICAgKyAoeDAgKiB1MikgICAgICArICh1MSAqIHgyKSAgICAgIC0gKHgxICogdTIpICAgICAgLSAoeDAgKiB1MSkgICAgICAtICh1MCAqIHgyKTtcbiAgICB2YXIgZGVsdGFDID0gKHUwICogdjEgKiB4MikgKyAodjAgKiB4MSAqIHUyKSArICh4MCAqIHUxICogdjIpIC0gKHgwICogdjEgKiB1MikgLSAodjAgKiB1MSAqIHgyKSAtICh1MCAqIHgxICogdjIpO1xuICAgIHZhciBkZWx0YUQgPSAoeTAgKiB2MSkgICAgICArICh2MCAqIHkyKSAgICAgICsgKHkxICogdjIpICAgICAgLSAodjEgKiB5MikgICAgICAtICh2MCAqIHkxKSAgICAgIC0gKHkwICogdjIpO1xuICAgIHZhciBkZWx0YUUgPSAodTAgKiB5MSkgICAgICArICh5MCAqIHUyKSAgICAgICsgKHUxICogeTIpICAgICAgLSAoeTEgKiB1MikgICAgICAtICh5MCAqIHUxKSAgICAgIC0gKHUwICogeTIpO1xuICAgIHZhciBkZWx0YUYgPSAodTAgKiB2MSAqIHkyKSArICh2MCAqIHkxICogdTIpICsgKHkwICogdTEgKiB2MikgLSAoeTAgKiB2MSAqIHUyKSAtICh2MCAqIHUxICogeTIpIC0gKHUwICogeTEgKiB2Mik7XG5cbiAgICBjb250ZXh0LnRyYW5zZm9ybShkZWx0YUEgLyBkZWx0YSwgZGVsdGFEIC8gZGVsdGEsXG4gICAgICAgIGRlbHRhQiAvIGRlbHRhLCBkZWx0YUUgLyBkZWx0YSxcbiAgICAgICAgZGVsdGFDIC8gZGVsdGEsIGRlbHRhRiAvIGRlbHRhKTtcblxuICAgIGNvbnRleHQuZHJhd0ltYWdlKHRleHR1cmVTb3VyY2UsIDAsIDApO1xuICAgIGNvbnRleHQucmVzdG9yZSgpO1xufTtcblxuXG5cbi8qKlxuICogUmVuZGVycyBhIGZsYXQgTWVzaFxuICpcbiAqIEBwYXJhbSBNZXNoIHtQSVhJLm1lc2guTWVzaH0gVGhlIE1lc2ggdG8gcmVuZGVyXG4gKiBAcHJpdmF0ZVxuICovXG5NZXNoLnByb3RvdHlwZS5yZW5kZXJNZXNoRmxhdCA9IGZ1bmN0aW9uIChNZXNoKVxue1xuICAgIHZhciBjb250ZXh0ID0gdGhpcy5jb250ZXh0O1xuICAgIHZhciB2ZXJ0aWNlcyA9IE1lc2gudmVydGljZXM7XG5cbiAgICB2YXIgbGVuZ3RoID0gdmVydGljZXMubGVuZ3RoLzI7XG4gICAgLy8gdGhpcy5jb3VudCsrO1xuXG4gICAgY29udGV4dC5iZWdpblBhdGgoKTtcbiAgICBmb3IgKHZhciBpPTE7IGkgPCBsZW5ndGgtMjsgaSsrKVxuICAgIHtcbiAgICAgICAgLy8gZHJhdyBzb21lIHRyaWFuZ2xlcyFcbiAgICAgICAgdmFyIGluZGV4ID0gaSoyO1xuXG4gICAgICAgIHZhciB4MCA9IHZlcnRpY2VzW2luZGV4XSwgICB4MSA9IHZlcnRpY2VzW2luZGV4KzJdLCB4MiA9IHZlcnRpY2VzW2luZGV4KzRdO1xuICAgICAgICB2YXIgeTAgPSB2ZXJ0aWNlc1tpbmRleCsxXSwgeTEgPSB2ZXJ0aWNlc1tpbmRleCszXSwgeTIgPSB2ZXJ0aWNlc1tpbmRleCs1XTtcblxuICAgICAgICBjb250ZXh0Lm1vdmVUbyh4MCwgeTApO1xuICAgICAgICBjb250ZXh0LmxpbmVUbyh4MSwgeTEpO1xuICAgICAgICBjb250ZXh0LmxpbmVUbyh4MiwgeTIpO1xuICAgIH1cblxuICAgIGNvbnRleHQuZmlsbFN0eWxlID0gJyNGRjAwMDAnO1xuICAgIGNvbnRleHQuZmlsbCgpO1xuICAgIGNvbnRleHQuY2xvc2VQYXRoKCk7XG59O1xuXG4vKipcbiAqIFdoZW4gdGhlIHRleHR1cmUgaXMgdXBkYXRlZCwgdGhpcyBldmVudCB3aWxsIGZpcmUgdG8gdXBkYXRlIHRoZSBzY2FsZSBhbmQgZnJhbWVcbiAqXG4gKiBAcGFyYW0gZXZlbnRcbiAqIEBwcml2YXRlXG4gKi9cbk1lc2gucHJvdG90eXBlLl9vblRleHR1cmVVcGRhdGUgPSBmdW5jdGlvbiAoKVxue1xuICAgIHRoaXMudXBkYXRlRnJhbWUgPSB0cnVlO1xufTtcblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBib3VuZHMgb2YgdGhlIG1lc2ggYXMgYSByZWN0YW5nbGUuIFRoZSBib3VuZHMgY2FsY3VsYXRpb24gdGFrZXMgdGhlIHdvcmxkVHJhbnNmb3JtIGludG8gYWNjb3VudC5cbiAqXG4gKiBAcGFyYW0gbWF0cml4IHtQSVhJLk1hdHJpeH0gdGhlIHRyYW5zZm9ybWF0aW9uIG1hdHJpeCBvZiB0aGUgc3ByaXRlXG4gKiBAcmV0dXJuIHtQSVhJLlJlY3RhbmdsZX0gdGhlIGZyYW1pbmcgcmVjdGFuZ2xlXG4gKi9cbk1lc2gucHJvdG90eXBlLmdldEJvdW5kcyA9IGZ1bmN0aW9uIChtYXRyaXgpXG57XG4gICAgaWYgKCF0aGlzLl9jdXJyZW50Qm91bmRzKSB7XG4gICAgICAgIHZhciB3b3JsZFRyYW5zZm9ybSA9IG1hdHJpeCB8fCB0aGlzLndvcmxkVHJhbnNmb3JtO1xuXG4gICAgICAgIHZhciBhID0gd29ybGRUcmFuc2Zvcm0uYTtcbiAgICAgICAgdmFyIGIgPSB3b3JsZFRyYW5zZm9ybS5iO1xuICAgICAgICB2YXIgYyA9IHdvcmxkVHJhbnNmb3JtLmM7XG4gICAgICAgIHZhciBkID0gd29ybGRUcmFuc2Zvcm0uZDtcbiAgICAgICAgdmFyIHR4ID0gd29ybGRUcmFuc2Zvcm0udHg7XG4gICAgICAgIHZhciB0eSA9IHdvcmxkVHJhbnNmb3JtLnR5O1xuXG4gICAgICAgIHZhciBtYXhYID0gLUluZmluaXR5O1xuICAgICAgICB2YXIgbWF4WSA9IC1JbmZpbml0eTtcblxuICAgICAgICB2YXIgbWluWCA9IEluZmluaXR5O1xuICAgICAgICB2YXIgbWluWSA9IEluZmluaXR5O1xuXG4gICAgICAgIHZhciB2ZXJ0aWNlcyA9IHRoaXMudmVydGljZXM7XG4gICAgICAgIGZvciAodmFyIGkgPSAwLCBuID0gdmVydGljZXMubGVuZ3RoOyBpIDwgbjsgaSArPSAyKSB7XG4gICAgICAgICAgICB2YXIgcmF3WCA9IHZlcnRpY2VzW2ldLCByYXdZID0gdmVydGljZXNbaSArIDFdO1xuICAgICAgICAgICAgdmFyIHggPSAoYSAqIHJhd1gpICsgKGMgKiByYXdZKSArIHR4O1xuICAgICAgICAgICAgdmFyIHkgPSAoZCAqIHJhd1kpICsgKGIgKiByYXdYKSArIHR5O1xuXG4gICAgICAgICAgICBtaW5YID0geCA8IG1pblggPyB4IDogbWluWDtcbiAgICAgICAgICAgIG1pblkgPSB5IDwgbWluWSA/IHkgOiBtaW5ZO1xuXG4gICAgICAgICAgICBtYXhYID0geCA+IG1heFggPyB4IDogbWF4WDtcbiAgICAgICAgICAgIG1heFkgPSB5ID4gbWF4WSA/IHkgOiBtYXhZO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG1pblggPT09IC1JbmZpbml0eSB8fCBtYXhZID09PSBJbmZpbml0eSkge1xuICAgICAgICAgICAgcmV0dXJuIGNvcmUuUmVjdGFuZ2xlLkVNUFRZO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGJvdW5kcyA9IHRoaXMuX2JvdW5kcztcblxuICAgICAgICBib3VuZHMueCA9IG1pblg7XG4gICAgICAgIGJvdW5kcy53aWR0aCA9IG1heFggLSBtaW5YO1xuXG4gICAgICAgIGJvdW5kcy55ID0gbWluWTtcbiAgICAgICAgYm91bmRzLmhlaWdodCA9IG1heFkgLSBtaW5ZO1xuXG4gICAgICAgIC8vIHN0b3JlIGEgcmVmZXJlbmNlIHNvIHRoYXQgaWYgdGhpcyBmdW5jdGlvbiBnZXRzIGNhbGxlZCBhZ2FpbiBpbiB0aGUgcmVuZGVyIGN5Y2xlIHdlIGRvIG5vdCBoYXZlIHRvIHJlY2FsY3VsYXRlXG4gICAgICAgIHRoaXMuX2N1cnJlbnRCb3VuZHMgPSBib3VuZHM7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuX2N1cnJlbnRCb3VuZHM7XG59O1xuXG4vKipcbiAqIFRlc3RzIGlmIGEgcG9pbnQgaXMgaW5zaWRlIHRoaXMgbWVzaC4gV29ya3Mgb25seSBmb3IgVFJJQU5HTEVfTUVTSFxuICpcbiAqIEBwYXJhbSBwb2ludCB7UElYSS5Qb2ludH0gdGhlIHBvaW50IHRvIHRlc3RcbiAqIEByZXR1cm4ge2Jvb2xlYW59IHRoZSByZXN1bHQgb2YgdGhlIHRlc3RcbiAqL1xuTWVzaC5wcm90b3R5cGUuY29udGFpbnNQb2ludCA9IGZ1bmN0aW9uKCBwb2ludCApIHtcbiAgICBpZiAoIXRoaXMuZ2V0Qm91bmRzKCkuY29udGFpbnMocG9pbnQueCwgcG9pbnQueSkpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICB0aGlzLndvcmxkVHJhbnNmb3JtLmFwcGx5SW52ZXJzZShwb2ludCwgIHRlbXBQb2ludCk7XG5cbiAgICB2YXIgdmVydGljZXMgPSB0aGlzLnZlcnRpY2VzO1xuICAgIHZhciBwb2ludHMgPSB0ZW1wUG9seWdvbi5wb2ludHM7XG4gICAgdmFyIGksIGxlbjtcblxuICAgIGlmICh0aGlzLmRyYXdNb2RlID09PSBNZXNoLkRSQVdfTU9ERVMuVFJJQU5HTEVTKSB7XG4gICAgICAgIHZhciBpbmRpY2VzID0gdGhpcy5pbmRpY2VzO1xuICAgICAgICBsZW4gPSB0aGlzLmluZGljZXMubGVuZ3RoO1xuICAgICAgICAvL1RPRE86IGlubGluZSB0aGlzLlxuICAgICAgICBmb3IgKGk9MDtpPGxlbjtpKz0zKSB7XG4gICAgICAgICAgICB2YXIgaW5kMCA9IGluZGljZXNbaV0qMiwgaW5kMSA9IGluZGljZXNbaSsxXSoyLCBpbmQyID0gaW5kaWNlc1tpKzJdKjI7XG4gICAgICAgICAgICBwb2ludHNbMF0gPSB2ZXJ0aWNlc1tpbmQwXTtcbiAgICAgICAgICAgIHBvaW50c1sxXSA9IHZlcnRpY2VzW2luZDArMV07XG4gICAgICAgICAgICBwb2ludHNbMl0gPSB2ZXJ0aWNlc1tpbmQxXTtcbiAgICAgICAgICAgIHBvaW50c1szXSA9IHZlcnRpY2VzW2luZDErMV07XG4gICAgICAgICAgICBwb2ludHNbNF0gPSB2ZXJ0aWNlc1tpbmQyXTtcbiAgICAgICAgICAgIHBvaW50c1s1XSA9IHZlcnRpY2VzW2luZDIrMV07XG4gICAgICAgICAgICBpZiAodGVtcFBvbHlnb24uY29udGFpbnModGVtcFBvaW50LngsIHRlbXBQb2ludC55KSkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgICAgbGVuID0gdmVydGljZXMubGVuZ3RoO1xuICAgICAgICBmb3IgKGk9MDtpPGxlbjtpKz02KSB7XG4gICAgICAgICAgICBwb2ludHNbMF0gPSB2ZXJ0aWNlc1tpXTtcbiAgICAgICAgICAgIHBvaW50c1sxXSA9IHZlcnRpY2VzW2krMV07XG4gICAgICAgICAgICBwb2ludHNbMl0gPSB2ZXJ0aWNlc1tpKzJdO1xuICAgICAgICAgICAgcG9pbnRzWzNdID0gdmVydGljZXNbaSszXTtcbiAgICAgICAgICAgIHBvaW50c1s0XSA9IHZlcnRpY2VzW2krNF07XG4gICAgICAgICAgICBwb2ludHNbNV0gPSB2ZXJ0aWNlc1tpKzVdO1xuICAgICAgICAgICAgaWYgKHRlbXBQb2x5Z29uLmNvbnRhaW5zKHRlbXBQb2ludC54LCB0ZW1wUG9pbnQueSkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG59O1xuXG4vKipcbiAqIERpZmZlcmVudCBkcmF3aW5nIGJ1ZmZlciBtb2RlcyBzdXBwb3J0ZWRcbiAqXG4gKiBAc3RhdGljXG4gKiBAY29uc3RhbnRcbiAqIEBwcm9wZXJ0eSB7b2JqZWN0fSBEUkFXX01PREVTXG4gKiBAcHJvcGVydHkge251bWJlcn0gRFJBV19NT0RFUy5UUklBTkdMRV9NRVNIXG4gKiBAcHJvcGVydHkge251bWJlcn0gRFJBV19NT0RFUy5UUklBTkdMRVNcbiAqL1xuTWVzaC5EUkFXX01PREVTID0ge1xuICAgIFRSSUFOR0xFX01FU0g6IDAsXG4gICAgVFJJQU5HTEVTOiAxXG59O1xuIiwidmFyIE1lc2ggPSByZXF1aXJlKCcuL01lc2gnKTtcblxuLyoqXG4gKiBUaGUgUGxhbmUgYWxsb3dzIHlvdSB0byBkcmF3IGEgdGV4dHVyZSBhY3Jvc3Mgc2V2ZXJhbCBwb2ludHMgYW5kIHRoZW0gbWFuaXB1bGF0ZSB0aGVzZSBwb2ludHNcbiAqXG4gKmBgYGpzXG4gKiBmb3IgKHZhciBpID0gMDsgaSA8IDIwOyBpKyspIHtcbiAqICAgICBwb2ludHMucHVzaChuZXcgUElYSS5Qb2ludChpICogNTAsIDApKTtcbiAqIH07XG4gKiB2YXIgUGxhbmUgPSBuZXcgUElYSS5QbGFuZShQSVhJLlRleHR1cmUuZnJvbUltYWdlKFwic25ha2UucG5nXCIpLCBwb2ludHMpO1xuICogIGBgYFxuICpcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5tZXNoLk1lc2hcbiAqIEBtZW1iZXJvZiBQSVhJLm1lc2hcbiAqIEBwYXJhbSB7UElYSS5UZXh0dXJlfSB0ZXh0dXJlIC0gVGhlIHRleHR1cmUgdG8gdXNlIG9uIHRoZSBQbGFuZS5cbiAqIEBwYXJhbSB7aW50fSBzZWdtZW50c1ggLSBUaGUgbnVtYmVyIG94IHggc2VnbWVudHNcbiAqIEBwYXJhbSB7aW50fSBzZWdtZW50c1kgLSBUaGUgbnVtYmVyIG9mIHkgc2VnbWVudHNcbiAqXG4gKi9cbmZ1bmN0aW9uIFBsYW5lKHRleHR1cmUsIHNlZ21lbnRzWCwgc2VnbWVudHNZKVxue1xuICAgIE1lc2guY2FsbCh0aGlzLCB0ZXh0dXJlKTtcblxuICAgIC8qKlxuICAgICAqIFRyYWNrZXIgZm9yIGlmIHRoZSBQbGFuZSBpcyByZWFkeSB0byBiZSBkcmF3bi4gTmVlZGVkIGJlY2F1c2UgTWVzaCBjdG9yIGNhblxuICAgICAqIGNhbGwgX29uVGV4dHVyZVVwZGF0ZWQgd2hpY2ggY291bGQgY2FsbCByZWZyZXNoIHRvbyBlYXJseS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9yZWFkeSA9IHRydWU7XG5cbiAgICB0aGlzLnNlZ21lbnRzWCA9ICBzZWdtZW50c1ggfHwgMTA7XG4gICAgdGhpcy5zZWdtZW50c1kgPSBzZWdtZW50c1kgfHwgMTA7XG5cbiAgICB0aGlzLmRyYXdNb2RlID0gTWVzaC5EUkFXX01PREVTLlRSSUFOR0xFUztcbiAgICB0aGlzLnJlZnJlc2goKTtcblxufVxuXG5cbi8vIGNvbnN0cnVjdG9yXG5QbGFuZS5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKCBNZXNoLnByb3RvdHlwZSApO1xuUGxhbmUucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gUGxhbmU7XG5tb2R1bGUuZXhwb3J0cyA9IFBsYW5lO1xuXG4vKipcbiAqIFJlZnJlc2hlc1xuICpcbiAqL1xuUGxhbmUucHJvdG90eXBlLnJlZnJlc2ggPSBmdW5jdGlvbigpXG57XG4gICAgdmFyIHRvdGFsID0gdGhpcy5zZWdtZW50c1ggKiB0aGlzLnNlZ21lbnRzWTtcbiAgICB2YXIgdmVydHMgPSBbXTtcbiAgICB2YXIgY29sb3JzID0gW107XG4gICAgdmFyIHV2cyA9IFtdO1xuICAgIHZhciBpbmRpY2VzID0gW107XG4gICAgdmFyIHRleHR1cmUgPSB0aGlzLnRleHR1cmU7XG5cbiAgLy8gIHRleHR1cmUud2lkdGggPSA4MDAgdGV4dHVyZS53aWR0aCB8fCA4MDA7XG4gLy8gICB0ZXh0dXJlLmhlaWdodCA9IDgwMC8vdGV4dHVyZS5oZWlnaHQgfHwgODAwO1xuXG4gICAgdmFyIHNlZ21lbnRzWFN1YiA9IHRoaXMuc2VnbWVudHNYIC0gMTtcbiAgICB2YXIgc2VnbWVudHNZU3ViID0gdGhpcy5zZWdtZW50c1kgLSAxO1xuICAgIHZhciBpID0gMDtcblxuICAgIHZhciBzaXplWCA9IHRleHR1cmUud2lkdGggLyBzZWdtZW50c1hTdWI7XG4gICAgdmFyIHNpemVZID0gdGV4dHVyZS5oZWlnaHQgLyBzZWdtZW50c1lTdWI7XG5cbiAgICBmb3IgKGkgPSAwOyBpIDwgdG90YWw7IGkrKykge1xuXG4gICAgICAgIHZhciB4ID0gKGkgJSB0aGlzLnNlZ21lbnRzWCk7XG4gICAgICAgIHZhciB5ID0gKCAoaSAvIHRoaXMuc2VnbWVudHNYICkgfCAwICk7XG5cblxuICAgICAgICB2ZXJ0cy5wdXNoKCh4ICogc2l6ZVgpLFxuICAgICAgICAgICAgICAgICAgICh5ICogc2l6ZVkpKTtcblxuICAgICAgICAvLyB0aGlzIHdvcmtzIGZvciByZWN0YW5ndWxhciB0ZXh0dXJlcy4gXG4gICAgICAgIHV2cy5wdXNoKHRleHR1cmUuX3V2cy54MCArICh0ZXh0dXJlLl91dnMueDEgLSB0ZXh0dXJlLl91dnMueDApICogKHggLyAodGhpcy5zZWdtZW50c1gtMSkpLCB0ZXh0dXJlLl91dnMueTAgKyAodGV4dHVyZS5fdXZzLnkzLXRleHR1cmUuX3V2cy55MCkgKiAoeS8gKHRoaXMuc2VnbWVudHNZLTEpKSk7XG4gICAgICB9XG5cbiAgICAvLyAgY29uc1xuXG4gICAgdmFyIHRvdGFsU3ViID0gc2VnbWVudHNYU3ViICogc2VnbWVudHNZU3ViO1xuXG4gICAgZm9yIChpID0gMDsgaSA8IHRvdGFsU3ViOyBpKyspIHtcblxuICAgICAgICB2YXIgeHBvcyA9IGkgJSBzZWdtZW50c1hTdWI7XG4gICAgICAgIHZhciB5cG9zID0gKGkgLyBzZWdtZW50c1hTdWIgKSB8IDA7XG5cblxuICAgICAgICB2YXIgIHZhbHVlID0gKHlwb3MgKiB0aGlzLnNlZ21lbnRzWCkgKyB4cG9zO1xuICAgICAgICB2YXIgIHZhbHVlMiA9ICh5cG9zICogdGhpcy5zZWdtZW50c1gpICsgeHBvcyArIDE7XG4gICAgICAgIHZhciAgdmFsdWUzID0gKCh5cG9zKzEpICogdGhpcy5zZWdtZW50c1gpICsgeHBvcztcbiAgICAgICAgdmFyICB2YWx1ZTQgPSAoKHlwb3MrMSkgKiB0aGlzLnNlZ21lbnRzWCkgKyB4cG9zICsgMTtcblxuICAgICAgICBpbmRpY2VzLnB1c2godmFsdWUsIHZhbHVlMiwgdmFsdWUzKTtcbiAgICAgICAgaW5kaWNlcy5wdXNoKHZhbHVlMiwgdmFsdWU0LCB2YWx1ZTMpO1xuICAgIH1cblxuXG4gICAgLy9jb25zb2xlLmxvZyhpbmRpY2VzKVxuICAgIHRoaXMudmVydGljZXMgPSBuZXcgRmxvYXQzMkFycmF5KHZlcnRzKTtcbiAgICB0aGlzLnV2cyA9IG5ldyBGbG9hdDMyQXJyYXkodXZzKTtcbiAgICB0aGlzLmNvbG9ycyA9IG5ldyBGbG9hdDMyQXJyYXkoY29sb3JzKTtcbiAgICB0aGlzLmluZGljZXMgPSBuZXcgVWludDE2QXJyYXkoaW5kaWNlcyk7XG59O1xuXG4vKipcbiAqIENsZWFyIHRleHR1cmUgVVZzIHdoZW4gbmV3IHRleHR1cmUgaXMgc2V0XG4gKlxuICogQHByaXZhdGVcbiAqL1xuUGxhbmUucHJvdG90eXBlLl9vblRleHR1cmVVcGRhdGUgPSBmdW5jdGlvbiAoKVxue1xuICAgIE1lc2gucHJvdG90eXBlLl9vblRleHR1cmVVcGRhdGUuY2FsbCh0aGlzKTtcblxuICAgIC8vIHdhaXQgZm9yIHRoZSBQbGFuZSBjdG9yIHRvIGZpbmlzaCBiZWZvcmUgY2FsbGluZyByZWZyZXNoXG4gICAgaWYgKHRoaXMuX3JlYWR5KSB7XG4gICAgICAgIHRoaXMucmVmcmVzaCgpO1xuICAgIH1cbn07XG4iLCJ2YXIgTWVzaCA9IHJlcXVpcmUoJy4vTWVzaCcpO1xudmFyIGNvcmUgPSByZXF1aXJlKCcuLi9jb3JlJyk7XG5cbi8qKlxuICogVGhlIHJvcGUgYWxsb3dzIHlvdSB0byBkcmF3IGEgdGV4dHVyZSBhY3Jvc3Mgc2V2ZXJhbCBwb2ludHMgYW5kIHRoZW0gbWFuaXB1bGF0ZSB0aGVzZSBwb2ludHNcbiAqXG4gKmBgYGpzXG4gKiBmb3IgKHZhciBpID0gMDsgaSA8IDIwOyBpKyspIHtcbiAqICAgICBwb2ludHMucHVzaChuZXcgUElYSS5Qb2ludChpICogNTAsIDApKTtcbiAqIH07XG4gKiB2YXIgcm9wZSA9IG5ldyBQSVhJLlJvcGUoUElYSS5UZXh0dXJlLmZyb21JbWFnZShcInNuYWtlLnBuZ1wiKSwgcG9pbnRzKTtcbiAqICBgYGBcbiAqXG4gKiBAY2xhc3NcbiAqIEBleHRlbmRzIFBJWEkubWVzaC5NZXNoXG4gKiBAbWVtYmVyb2YgUElYSS5tZXNoXG4gKiBAcGFyYW0ge1BJWEkuVGV4dHVyZX0gdGV4dHVyZSAtIFRoZSB0ZXh0dXJlIHRvIHVzZSBvbiB0aGUgcm9wZS5cbiAqIEBwYXJhbSB7UElYSS5Qb2ludFtdfSBwb2ludHMgLSBBbiBhcnJheSBvZiB7QGxpbmsgUElYSS5Qb2ludH0gb2JqZWN0cyB0byBjb25zdHJ1Y3QgdGhpcyByb3BlLlxuICpcbiAqL1xuZnVuY3Rpb24gUm9wZSh0ZXh0dXJlLCBwb2ludHMpXG57XG4gICAgTWVzaC5jYWxsKHRoaXMsIHRleHR1cmUpO1xuXG4gICAgLypcbiAgICAgKiBAbWVtYmVyIHtQSVhJLlBvaW50W119IEFuIGFycmF5IG9mIHBvaW50cyB0aGF0IGRldGVybWluZSB0aGUgcm9wZVxuICAgICAqL1xuICAgIHRoaXMucG9pbnRzID0gcG9pbnRzO1xuXG4gICAgLypcbiAgICAgKiBAbWVtYmVyIHtGbG9hdDMyQXJyYXl9IEFuIGFycmF5IG9mIHZlcnRpY2VzIHVzZWQgdG8gY29uc3RydWN0IHRoaXMgcm9wZS5cbiAgICAgKi9cbiAgICB0aGlzLnZlcnRpY2VzID0gbmV3IEZsb2F0MzJBcnJheShwb2ludHMubGVuZ3RoICogNCk7XG5cbiAgICAvKlxuICAgICAqIEBtZW1iZXIge0Zsb2F0MzJBcnJheX0gVGhlIFdlYkdMIFV2cyBvZiB0aGUgcm9wZS5cbiAgICAgKi9cbiAgICB0aGlzLnV2cyA9IG5ldyBGbG9hdDMyQXJyYXkocG9pbnRzLmxlbmd0aCAqIDQpO1xuXG4gICAgLypcbiAgICAgKiBAbWVtYmVyIHtGbG9hdDMyQXJyYXl9IEFuIGFycmF5IGNvbnRhaW5pbmcgdGhlIGNvbG9yIGNvbXBvbmVudHNcbiAgICAgKi9cbiAgICB0aGlzLmNvbG9ycyA9IG5ldyBGbG9hdDMyQXJyYXkocG9pbnRzLmxlbmd0aCAqIDIpO1xuXG4gICAgLypcbiAgICAgKiBAbWVtYmVyIHtVaW50MTZBcnJheX0gQW4gYXJyYXkgY29udGFpbmluZyB0aGUgaW5kaWNlcyBvZiB0aGUgdmVydGljZXNcbiAgICAgKi9cbiAgICB0aGlzLmluZGljZXMgPSBuZXcgVWludDE2QXJyYXkocG9pbnRzLmxlbmd0aCAqIDIpO1xuXG4gICAgLyoqXG4gICAgICogVHJhY2tlciBmb3IgaWYgdGhlIHJvcGUgaXMgcmVhZHkgdG8gYmUgZHJhd24uIE5lZWRlZCBiZWNhdXNlIE1lc2ggY3RvciBjYW5cbiAgICAgKiBjYWxsIF9vblRleHR1cmVVcGRhdGVkIHdoaWNoIGNvdWxkIGNhbGwgcmVmcmVzaCB0b28gZWFybHkuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtib29sZWFufVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgIHRoaXMuX3JlYWR5ID0gdHJ1ZTtcblxuICAgICB0aGlzLnJlZnJlc2goKTtcbn1cblxuXG4vLyBjb25zdHJ1Y3RvclxuUm9wZS5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKE1lc2gucHJvdG90eXBlKTtcblJvcGUucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gUm9wZTtcbm1vZHVsZS5leHBvcnRzID0gUm9wZTtcblxuLyoqXG4gKiBSZWZyZXNoZXNcbiAqXG4gKi9cblJvcGUucHJvdG90eXBlLnJlZnJlc2ggPSBmdW5jdGlvbiAoKVxue1xuICAgIHZhciBwb2ludHMgPSB0aGlzLnBvaW50cztcblxuICAgIC8vIGlmIHRvbyBsaXR0bGUgcG9pbnRzLCBvciB0ZXh0dXJlIGhhc24ndCBnb3QgVVZzIHNldCB5ZXQganVzdCBtb3ZlIG9uLlxuICAgIGlmIChwb2ludHMubGVuZ3RoIDwgMSB8fCAhdGhpcy5fdGV4dHVyZS5fdXZzKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHZhciB1dnMgPSB0aGlzLnV2cztcblxuICAgIHZhciBpbmRpY2VzID0gdGhpcy5pbmRpY2VzO1xuICAgIHZhciBjb2xvcnMgPSB0aGlzLmNvbG9ycztcblxuICAgIHZhciB0ZXh0dXJlVXZzID0gdGhpcy5fdGV4dHVyZS5fdXZzO1xuICAgIHZhciBvZmZzZXQgPSBuZXcgY29yZS5Qb2ludCh0ZXh0dXJlVXZzLngwLCB0ZXh0dXJlVXZzLnkwKTtcbiAgICB2YXIgZmFjdG9yID0gbmV3IGNvcmUuUG9pbnQodGV4dHVyZVV2cy54MiAtIHRleHR1cmVVdnMueDAsIHRleHR1cmVVdnMueTIgLSB0ZXh0dXJlVXZzLnkwKTtcblxuICAgIHV2c1swXSA9IDAgKyBvZmZzZXQueDtcbiAgICB1dnNbMV0gPSAwICsgb2Zmc2V0Lnk7XG4gICAgdXZzWzJdID0gMCArIG9mZnNldC54O1xuICAgIHV2c1szXSA9IDEgKiBmYWN0b3IueSArIG9mZnNldC55O1xuXG4gICAgY29sb3JzWzBdID0gMTtcbiAgICBjb2xvcnNbMV0gPSAxO1xuXG4gICAgaW5kaWNlc1swXSA9IDA7XG4gICAgaW5kaWNlc1sxXSA9IDE7XG5cbiAgICB2YXIgdG90YWwgPSBwb2ludHMubGVuZ3RoLFxuICAgICAgICBwb2ludCwgaW5kZXgsIGFtb3VudDtcblxuICAgIGZvciAodmFyIGkgPSAxOyBpIDwgdG90YWw7IGkrKylcbiAgICB7XG4gICAgICAgIHBvaW50ID0gcG9pbnRzW2ldO1xuICAgICAgICBpbmRleCA9IGkgKiA0O1xuICAgICAgICAvLyB0aW1lIHRvIGRvIHNvbWUgc21hcnQgZHJhd2luZyFcbiAgICAgICAgYW1vdW50ID0gaSAvICh0b3RhbC0xKTtcblxuICAgICAgICB1dnNbaW5kZXhdID0gYW1vdW50ICogZmFjdG9yLnggKyBvZmZzZXQueDtcbiAgICAgICAgdXZzW2luZGV4KzFdID0gMCArIG9mZnNldC55O1xuXG4gICAgICAgIHV2c1tpbmRleCsyXSA9IGFtb3VudCAqIGZhY3Rvci54ICsgb2Zmc2V0Lng7XG4gICAgICAgIHV2c1tpbmRleCszXSA9IDEgKiBmYWN0b3IueSArIG9mZnNldC55O1xuXG4gICAgICAgIGluZGV4ID0gaSAqIDI7XG4gICAgICAgIGNvbG9yc1tpbmRleF0gPSAxO1xuICAgICAgICBjb2xvcnNbaW5kZXgrMV0gPSAxO1xuXG4gICAgICAgIGluZGV4ID0gaSAqIDI7XG4gICAgICAgIGluZGljZXNbaW5kZXhdID0gaW5kZXg7XG4gICAgICAgIGluZGljZXNbaW5kZXggKyAxXSA9IGluZGV4ICsgMTtcbiAgICB9XG5cbiAgICB0aGlzLmRpcnR5ID0gdHJ1ZTtcbn07XG5cbi8qKlxuICogQ2xlYXIgdGV4dHVyZSBVVnMgd2hlbiBuZXcgdGV4dHVyZSBpcyBzZXRcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5Sb3BlLnByb3RvdHlwZS5fb25UZXh0dXJlVXBkYXRlID0gZnVuY3Rpb24gKClcbntcbiAgICBNZXNoLnByb3RvdHlwZS5fb25UZXh0dXJlVXBkYXRlLmNhbGwodGhpcyk7XG5cbiAgICAvLyB3YWl0IGZvciB0aGUgUm9wZSBjdG9yIHRvIGZpbmlzaCBiZWZvcmUgY2FsbGluZyByZWZyZXNoXG4gICAgaWYgKHRoaXMuX3JlYWR5KSB7XG4gICAgICAgIHRoaXMucmVmcmVzaCgpO1xuICAgIH1cbn07XG5cbi8qKlxuICogVXBkYXRlcyB0aGUgb2JqZWN0IHRyYW5zZm9ybSBmb3IgcmVuZGVyaW5nXG4gKlxuICogQHByaXZhdGVcbiAqL1xuUm9wZS5wcm90b3R5cGUudXBkYXRlVHJhbnNmb3JtID0gZnVuY3Rpb24gKClcbntcbiAgICB2YXIgcG9pbnRzID0gdGhpcy5wb2ludHM7XG5cbiAgICBpZiAocG9pbnRzLmxlbmd0aCA8IDEpXG4gICAge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFyIGxhc3RQb2ludCA9IHBvaW50c1swXTtcbiAgICB2YXIgbmV4dFBvaW50O1xuICAgIHZhciBwZXJwWCA9IDA7XG4gICAgdmFyIHBlcnBZID0gMDtcblxuICAgIC8vIHRoaXMuY291bnQgLT0gMC4yO1xuXG4gICAgdmFyIHZlcnRpY2VzID0gdGhpcy52ZXJ0aWNlcztcbiAgICB2YXIgdG90YWwgPSBwb2ludHMubGVuZ3RoLFxuICAgICAgICBwb2ludCwgaW5kZXgsIHJhdGlvLCBwZXJwTGVuZ3RoLCBudW07XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRvdGFsOyBpKyspXG4gICAge1xuICAgICAgICBwb2ludCA9IHBvaW50c1tpXTtcbiAgICAgICAgaW5kZXggPSBpICogNDtcblxuICAgICAgICBpZiAoaSA8IHBvaW50cy5sZW5ndGgtMSlcbiAgICAgICAge1xuICAgICAgICAgICAgbmV4dFBvaW50ID0gcG9pbnRzW2krMV07XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgICBuZXh0UG9pbnQgPSBwb2ludDtcbiAgICAgICAgfVxuXG4gICAgICAgIHBlcnBZID0gLShuZXh0UG9pbnQueCAtIGxhc3RQb2ludC54KTtcbiAgICAgICAgcGVycFggPSBuZXh0UG9pbnQueSAtIGxhc3RQb2ludC55O1xuXG4gICAgICAgIHJhdGlvID0gKDEgLSAoaSAvICh0b3RhbC0xKSkpICogMTA7XG5cbiAgICAgICAgaWYgKHJhdGlvID4gMSlcbiAgICAgICAge1xuICAgICAgICAgICAgcmF0aW8gPSAxO1xuICAgICAgICB9XG5cbiAgICAgICAgcGVycExlbmd0aCA9IE1hdGguc3FydChwZXJwWCAqIHBlcnBYICsgcGVycFkgKiBwZXJwWSk7XG4gICAgICAgIG51bSA9IHRoaXMuX3RleHR1cmUuaGVpZ2h0IC8gMjsgLy8oMjAgKyBNYXRoLmFicyhNYXRoLnNpbigoaSArIHRoaXMuY291bnQpICogMC4zKSAqIDUwKSApKiByYXRpbztcbiAgICAgICAgcGVycFggLz0gcGVycExlbmd0aDtcbiAgICAgICAgcGVycFkgLz0gcGVycExlbmd0aDtcblxuICAgICAgICBwZXJwWCAqPSBudW07XG4gICAgICAgIHBlcnBZICo9IG51bTtcblxuICAgICAgICB2ZXJ0aWNlc1tpbmRleF0gPSBwb2ludC54ICsgcGVycFg7XG4gICAgICAgIHZlcnRpY2VzW2luZGV4KzFdID0gcG9pbnQueSArIHBlcnBZO1xuICAgICAgICB2ZXJ0aWNlc1tpbmRleCsyXSA9IHBvaW50LnggLSBwZXJwWDtcbiAgICAgICAgdmVydGljZXNbaW5kZXgrM10gPSBwb2ludC55IC0gcGVycFk7XG5cbiAgICAgICAgbGFzdFBvaW50ID0gcG9pbnQ7XG4gICAgfVxuXG4gICAgdGhpcy5jb250YWluZXJVcGRhdGVUcmFuc2Zvcm0oKTtcbn07XG4iLCIvKipcbiAqIEBmaWxlICAgICAgICBNYWluIGV4cG9ydCBvZiB0aGUgUElYSSBleHRyYXMgbGlicmFyeVxuICogQGF1dGhvciAgICAgIE1hdCBHcm92ZXMgPG1hdEBnb29kYm95ZGlnaXRhbC5jb20+XG4gKiBAY29weXJpZ2h0ICAgMjAxMy0yMDE1IEdvb2RCb3lEaWdpdGFsXG4gKiBAbGljZW5zZSAgICAge0BsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9waXhpanMvcGl4aS5qcy9ibG9iL21hc3Rlci9MSUNFTlNFfE1JVCBMaWNlbnNlfVxuICovXG5cbi8qKlxuICogQG5hbWVzcGFjZSBQSVhJLm1lc2hcbiAqL1xubW9kdWxlLmV4cG9ydHMgPSB7XG4gICAgTWVzaDogICAgICAgICAgIHJlcXVpcmUoJy4vTWVzaCcpLFxuICAgIFBsYW5lOiAgICAgICAgICAgcmVxdWlyZSgnLi9QbGFuZScpLFxuICAgIFJvcGU6ICAgICAgICAgICByZXF1aXJlKCcuL1JvcGUnKSxcbiAgICBNZXNoUmVuZGVyZXI6ICAgcmVxdWlyZSgnLi93ZWJnbC9NZXNoUmVuZGVyZXInKSxcbiAgICBNZXNoU2hhZGVyOiAgICAgcmVxdWlyZSgnLi93ZWJnbC9NZXNoU2hhZGVyJylcbn07XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4uLy4uL2NvcmUnKSxcbiAgICBNZXNoID0gcmVxdWlyZSgnLi4vTWVzaCcpO1xuXG4vKipcbiAqIEBhdXRob3IgTWF0IEdyb3Zlc1xuICpcbiAqIEJpZyB0aGFua3MgdG8gdGhlIHZlcnkgY2xldmVyIE1hdHQgRGVzTGF1cmllcnMgPG1hdHRkZXNsPiBodHRwczovL2dpdGh1Yi5jb20vbWF0dGRlc2wvXG4gKiBmb3IgY3JlYXRpbmcgdGhlIG9yaWdpbmFsIHBpeGkgdmVyc2lvbiFcbiAqIEFsc28gYSB0aGFua3MgdG8gaHR0cHM6Ly9naXRodWIuY29tL2JjaGV2YWxpZXIgZm9yIHR3ZWFraW5nIHRoZSB0aW50IGFuZCBhbHBoYSBzbyB0aGF0IHRoZXkgbm93IHNoYXJlIDQgYnl0ZXMgb24gdGhlIHZlcnRleCBidWZmZXJcbiAqXG4gKiBIZWF2aWx5IGluc3BpcmVkIGJ5IExpYkdEWCdzIE1lc2hSZW5kZXJlcjpcbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS9saWJnZHgvbGliZ2R4L2Jsb2IvbWFzdGVyL2dkeC9zcmMvY29tL2JhZGxvZ2ljL2dkeC9ncmFwaGljcy9nMmQvTWVzaFJlbmRlcmVyLmphdmFcbiAqL1xuXG4vKipcbiAqXG4gKiBAY2xhc3NcbiAqIEBwcml2YXRlXG4gKiBAbWVtYmVyb2YgUElYSS5tZXNoXG4gKiBAZXh0ZW5kcyBQSVhJLk9iamVjdFJlbmRlcmVyXG4gKiBAcGFyYW0gcmVuZGVyZXIge1BJWEkuV2ViR0xSZW5kZXJlcn0gVGhlIHJlbmRlcmVyIHRoaXMgc3ByaXRlIGJhdGNoIHdvcmtzIGZvci5cbiAqL1xuZnVuY3Rpb24gTWVzaFJlbmRlcmVyKHJlbmRlcmVyKVxue1xuICAgIGNvcmUuT2JqZWN0UmVuZGVyZXIuY2FsbCh0aGlzLCByZW5kZXJlcik7XG5cblxuICAgIC8qKlxuICAgICAqIEhvbGRzIHRoZSBpbmRpY2VzXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtVaW50MTZBcnJheX1cbiAgICAgKi9cbiAgICBcbiAgICB0aGlzLmluZGljZXMgPSBuZXcgVWludDE2QXJyYXkoMTUwMDApO1xuXG4gICAgLy9UT0RPIHRoaXMgY291bGQgYmUgYSBzaW5nbGUgYnVmZmVyIHNoYXJlZCBhbW9uZ3N0IGFsbCByZW5kZXJlcnMgYXMgd2UgcmV1c2UgdGhpcyBzZXQgdXAgaW4gbW9zdCByZW5kZXJlcnNcbiAgICBmb3IgKHZhciBpPTAsIGo9MDsgaSA8IDE1MDAwOyBpICs9IDYsIGogKz0gNClcbiAgICB7XG4gICAgICAgIHRoaXMuaW5kaWNlc1tpICsgMF0gPSBqICsgMDtcbiAgICAgICAgdGhpcy5pbmRpY2VzW2kgKyAxXSA9IGogKyAxO1xuICAgICAgICB0aGlzLmluZGljZXNbaSArIDJdID0gaiArIDI7XG4gICAgICAgIHRoaXMuaW5kaWNlc1tpICsgM10gPSBqICsgMDtcbiAgICAgICAgdGhpcy5pbmRpY2VzW2kgKyA0XSA9IGogKyAyO1xuICAgICAgICB0aGlzLmluZGljZXNbaSArIDVdID0gaiArIDM7XG4gICAgfVxuXG4gICAgdGhpcy5jdXJyZW50U2hhZGVyID0gbnVsbDtcbn1cblxuTWVzaFJlbmRlcmVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoY29yZS5PYmplY3RSZW5kZXJlci5wcm90b3R5cGUpO1xuTWVzaFJlbmRlcmVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IE1lc2hSZW5kZXJlcjtcbm1vZHVsZS5leHBvcnRzID0gTWVzaFJlbmRlcmVyO1xuXG5jb3JlLldlYkdMUmVuZGVyZXIucmVnaXN0ZXJQbHVnaW4oJ21lc2gnLCBNZXNoUmVuZGVyZXIpO1xuXG4vKipcbiAqIFNldHMgdXAgdGhlIHJlbmRlcmVyIGNvbnRleHQgYW5kIG5lY2Vzc2FyeSBidWZmZXJzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0gZ2wge1dlYkdMUmVuZGVyaW5nQ29udGV4dH0gdGhlIGN1cnJlbnQgV2ViR0wgZHJhd2luZyBjb250ZXh0XG4gKi9cbk1lc2hSZW5kZXJlci5wcm90b3R5cGUub25Db250ZXh0Q2hhbmdlID0gZnVuY3Rpb24gKClcbntcblxufTtcblxuLyoqXG4gKiBSZW5kZXJzIHRoZSBzcHJpdGUgb2JqZWN0LlxuICpcbiAqIEBwYXJhbSBtZXNoIHtQSVhJLm1lc2guTWVzaH0gdGhlIG1lc2ggdG8gcmVuZGVyXG4gKi9cbk1lc2hSZW5kZXJlci5wcm90b3R5cGUucmVuZGVyID0gZnVuY3Rpb24gKG1lc2gpXG57XG4gICAgaWYoIW1lc2guX3ZlcnRleEJ1ZmZlcilcbiAgICB7XG4gICAgICAgIHRoaXMuX2luaXRXZWJHTChtZXNoKTtcbiAgICB9XG5cbiAgICB2YXIgcmVuZGVyZXIgPSB0aGlzLnJlbmRlcmVyLFxuICAgICAgICBnbCA9IHJlbmRlcmVyLmdsLFxuICAgICAgICB0ZXh0dXJlID0gbWVzaC5fdGV4dHVyZS5iYXNlVGV4dHVyZSxcbiAgICAgICAgc2hhZGVyID0gbWVzaC5zaGFkZXI7Ly8gfHwgcmVuZGVyZXIuc2hhZGVyTWFuYWdlci5wbHVnaW5zLm1lc2hTaGFkZXI7XG5cbiAgICB2YXIgZHJhd01vZGUgPSBtZXNoLmRyYXdNb2RlID09PSBNZXNoLkRSQVdfTU9ERVMuVFJJQU5HTEVfTUVTSCA/IGdsLlRSSUFOR0xFX1NUUklQIDogZ2wuVFJJQU5HTEVTO1xuXG4gICAgcmVuZGVyZXIuYmxlbmRNb2RlTWFuYWdlci5zZXRCbGVuZE1vZGUobWVzaC5ibGVuZE1vZGUpO1xuXG4gICAgLy9UT0RPIGNhY2hlIGN1c3RvbSBzdGF0ZS4uXG4gICAgaWYgKCFzaGFkZXIpXG4gICAge1xuICAgICAgICBzaGFkZXIgPSByZW5kZXJlci5zaGFkZXJNYW5hZ2VyLnBsdWdpbnMubWVzaFNoYWRlcjtcbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgc2hhZGVyID0gc2hhZGVyLnNoYWRlcnNbZ2wuaWRdIHx8IHNoYWRlci5nZXRTaGFkZXIocmVuZGVyZXIpOy8vIDogc2hhZGVyO1xuICAgIH1cblxuICAgIHRoaXMucmVuZGVyZXIuc2hhZGVyTWFuYWdlci5zZXRTaGFkZXIoc2hhZGVyKTtcblxuICAgIHNoYWRlci51bmlmb3Jtcy50cmFuc2xhdGlvbk1hdHJpeC52YWx1ZSA9IG1lc2gud29ybGRUcmFuc2Zvcm0udG9BcnJheSh0cnVlKTtcbiAgICBzaGFkZXIudW5pZm9ybXMucHJvamVjdGlvbk1hdHJpeC52YWx1ZSA9IHJlbmRlcmVyLmN1cnJlbnRSZW5kZXJUYXJnZXQucHJvamVjdGlvbk1hdHJpeC50b0FycmF5KHRydWUpO1xuICAgIHNoYWRlci51bmlmb3Jtcy5hbHBoYS52YWx1ZSA9IG1lc2gud29ybGRBbHBoYTtcblxuICAgIHNoYWRlci5zeW5jVW5pZm9ybXMoKTtcblxuICAgIGlmICghbWVzaC5kaXJ0eSlcbiAgICB7XG5cbiAgICAgICAgZ2wuYmluZEJ1ZmZlcihnbC5BUlJBWV9CVUZGRVIsIG1lc2guX3ZlcnRleEJ1ZmZlcik7XG4gICAgICAgIGdsLmJ1ZmZlclN1YkRhdGEoZ2wuQVJSQVlfQlVGRkVSLCAwLCBtZXNoLnZlcnRpY2VzKTtcbiAgICAgICAgZ2wudmVydGV4QXR0cmliUG9pbnRlcihzaGFkZXIuYXR0cmlidXRlcy5hVmVydGV4UG9zaXRpb24sIDIsIGdsLkZMT0FULCBmYWxzZSwgMCwgMCk7XG5cbiAgICAgICAgLy8gdXBkYXRlIHRoZSB1dnNcbiAgICAgICAgZ2wuYmluZEJ1ZmZlcihnbC5BUlJBWV9CVUZGRVIsIG1lc2guX3V2QnVmZmVyKTtcbiAgICAgICAgZ2wudmVydGV4QXR0cmliUG9pbnRlcihzaGFkZXIuYXR0cmlidXRlcy5hVGV4dHVyZUNvb3JkLCAyLCBnbC5GTE9BVCwgZmFsc2UsIDAsIDApO1xuXG5cbiAgICAgICAgZ2wuYWN0aXZlVGV4dHVyZShnbC5URVhUVVJFMCk7XG5cbiAgICAgICBpZiAoIXRleHR1cmUuX2dsVGV4dHVyZXNbZ2wuaWRdKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnJlbmRlcmVyLnVwZGF0ZVRleHR1cmUodGV4dHVyZSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgICAvLyBiaW5kIHRoZSBjdXJyZW50IHRleHR1cmVcbiAgICAgICAgICAgIGdsLmJpbmRUZXh0dXJlKGdsLlRFWFRVUkVfMkQsIHRleHR1cmUuX2dsVGV4dHVyZXNbZ2wuaWRdKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGdsLmJpbmRCdWZmZXIoZ2wuRUxFTUVOVF9BUlJBWV9CVUZGRVIsIG1lc2guX2luZGV4QnVmZmVyKTtcbiAgICAgICAgZ2wuYnVmZmVyU3ViRGF0YShnbC5FTEVNRU5UX0FSUkFZX0JVRkZFUiwgMCwgbWVzaC5pbmRpY2VzKTtcbiAgICB9XG4gICAgZWxzZVxuICAgIHtcblxuICAgICAgICBtZXNoLmRpcnR5ID0gZmFsc2U7XG4gICAgICAgIGdsLmJpbmRCdWZmZXIoZ2wuQVJSQVlfQlVGRkVSLCBtZXNoLl92ZXJ0ZXhCdWZmZXIpO1xuICAgICAgICBnbC5idWZmZXJEYXRhKGdsLkFSUkFZX0JVRkZFUiwgbWVzaC52ZXJ0aWNlcywgZ2wuU1RBVElDX0RSQVcpO1xuICAgICAgICBnbC52ZXJ0ZXhBdHRyaWJQb2ludGVyKHNoYWRlci5hdHRyaWJ1dGVzLmFWZXJ0ZXhQb3NpdGlvbiwgMiwgZ2wuRkxPQVQsIGZhbHNlLCAwLCAwKTtcblxuICAgICAgICAvLyB1cGRhdGUgdGhlIHV2c1xuICAgICAgICBnbC5iaW5kQnVmZmVyKGdsLkFSUkFZX0JVRkZFUiwgbWVzaC5fdXZCdWZmZXIpO1xuICAgICAgICBnbC5idWZmZXJEYXRhKGdsLkFSUkFZX0JVRkZFUiwgbWVzaC51dnMsIGdsLlNUQVRJQ19EUkFXKTtcbiAgICAgICAgZ2wudmVydGV4QXR0cmliUG9pbnRlcihzaGFkZXIuYXR0cmlidXRlcy5hVGV4dHVyZUNvb3JkLCAyLCBnbC5GTE9BVCwgZmFsc2UsIDAsIDApO1xuXG4gICAgICAgICBnbC5hY3RpdmVUZXh0dXJlKGdsLlRFWFRVUkUwKTtcblxuICAgICAgICBpZiAoIXRleHR1cmUuX2dsVGV4dHVyZXNbZ2wuaWRdKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnJlbmRlcmVyLnVwZGF0ZVRleHR1cmUodGV4dHVyZSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgICAvLyBiaW5kIHRoZSBjdXJyZW50IHRleHR1cmVcbiAgICAgICAgICAgIGdsLmJpbmRUZXh0dXJlKGdsLlRFWFRVUkVfMkQsIHRleHR1cmUuX2dsVGV4dHVyZXNbZ2wuaWRdKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGRvbnQgbmVlZCB0byB1cGxvYWQhXG4gICAgICAgIGdsLmJpbmRCdWZmZXIoZ2wuRUxFTUVOVF9BUlJBWV9CVUZGRVIsIG1lc2guX2luZGV4QnVmZmVyKTtcbiAgICAgICAgZ2wuYnVmZmVyRGF0YShnbC5FTEVNRU5UX0FSUkFZX0JVRkZFUiwgbWVzaC5pbmRpY2VzLCBnbC5TVEFUSUNfRFJBVyk7XG5cbiAgICB9XG5cbiAgICBnbC5kcmF3RWxlbWVudHMoZHJhd01vZGUsIG1lc2guaW5kaWNlcy5sZW5ndGgsIGdsLlVOU0lHTkVEX1NIT1JULCAwKTtcblxufTtcblxuLyoqXG4gKiBQcmVwYXJlcyBhbGwgdGhlIGJ1ZmZlcnMgdG8gcmVuZGVyIHRoaXMgbWVzaFxuICogQHBhcmFtIG1lc2gge1BJWEkubWVzaC5NZXNofSB0aGUgbWVzaCB0byByZW5kZXJcbiAqL1xuTWVzaFJlbmRlcmVyLnByb3RvdHlwZS5faW5pdFdlYkdMID0gZnVuY3Rpb24gKG1lc2gpXG57XG4gICAgLy8gYnVpbGQgdGhlIHN0cmlwIVxuICAgIHZhciBnbCA9IHRoaXMucmVuZGVyZXIuZ2w7XG5cbiAgICBtZXNoLl92ZXJ0ZXhCdWZmZXIgPSBnbC5jcmVhdGVCdWZmZXIoKTtcbiAgICBtZXNoLl9pbmRleEJ1ZmZlciA9IGdsLmNyZWF0ZUJ1ZmZlcigpO1xuICAgIG1lc2guX3V2QnVmZmVyID0gZ2wuY3JlYXRlQnVmZmVyKCk7XG5cblxuXG4gICAgZ2wuYmluZEJ1ZmZlcihnbC5BUlJBWV9CVUZGRVIsIG1lc2guX3ZlcnRleEJ1ZmZlcik7XG4gICAgZ2wuYnVmZmVyRGF0YShnbC5BUlJBWV9CVUZGRVIsIG1lc2gudmVydGljZXMsIGdsLkRZTkFNSUNfRFJBVyk7XG5cbiAgICBnbC5iaW5kQnVmZmVyKGdsLkFSUkFZX0JVRkZFUiwgbWVzaC5fdXZCdWZmZXIpO1xuICAgIGdsLmJ1ZmZlckRhdGEoZ2wuQVJSQVlfQlVGRkVSLCAgbWVzaC51dnMsIGdsLlNUQVRJQ19EUkFXKTtcblxuICAgIGlmKG1lc2guY29sb3JzKXtcbiAgICAgICAgbWVzaC5fY29sb3JCdWZmZXIgPSBnbC5jcmVhdGVCdWZmZXIoKTtcbiAgICAgICAgZ2wuYmluZEJ1ZmZlcihnbC5BUlJBWV9CVUZGRVIsIG1lc2guX2NvbG9yQnVmZmVyKTtcbiAgICAgICAgZ2wuYnVmZmVyRGF0YShnbC5BUlJBWV9CVUZGRVIsIG1lc2guY29sb3JzLCBnbC5TVEFUSUNfRFJBVyk7XG4gICAgfVxuXG4gICAgZ2wuYmluZEJ1ZmZlcihnbC5FTEVNRU5UX0FSUkFZX0JVRkZFUiwgbWVzaC5faW5kZXhCdWZmZXIpO1xuICAgIGdsLmJ1ZmZlckRhdGEoZ2wuRUxFTUVOVF9BUlJBWV9CVUZGRVIsIG1lc2guaW5kaWNlcywgZ2wuU1RBVElDX0RSQVcpO1xufTtcblxuXG4vKipcbiAqIEVtcHRpZXMgdGhlIGN1cnJlbnQgYmF0Y2guXG4gKlxuICovXG5NZXNoUmVuZGVyZXIucHJvdG90eXBlLmZsdXNoID0gZnVuY3Rpb24gKClcbntcblxufTtcblxuLyoqXG4gKiBTdGFydHMgYSBuZXcgbWVzaCByZW5kZXJlci5cbiAqXG4gKi9cbk1lc2hSZW5kZXJlci5wcm90b3R5cGUuc3RhcnQgPSBmdW5jdGlvbiAoKVxue1xuICAgIFxuXG4gICAgdGhpcy5jdXJyZW50U2hhZGVyID0gbnVsbDtcbn07XG5cbi8qKlxuICogRGVzdHJveXMgdGhlIE1lc2ggcmVuZGVyZXJcbiAqXG4gKi9cbk1lc2hSZW5kZXJlci5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uICgpXG57XG4gICAgY29yZS5PYmplY3RSZW5kZXJlci5wcm90b3R5cGUuZGVzdHJveS5jYWxsKHRoaXMpO1xufTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vLi4vY29yZScpO1xuXG4vKipcbiAqIEBjbGFzc1xuICogQGV4dGVuZHMgUElYSS5TaGFkZXJcbiAqIEBtZW1iZXJvZiBQSVhJLm1lc2hcbiAqIEBwYXJhbSBzaGFkZXJNYW5hZ2VyIHtQSVhJLlNoYWRlck1hbmFnZXJ9IFRoZSBXZWJHTCBzaGFkZXIgbWFuYWdlciB0aGlzIHNoYWRlciB3b3JrcyBmb3IuXG4gKi9cbmZ1bmN0aW9uIE1lc2hTaGFkZXIoc2hhZGVyTWFuYWdlcilcbntcbiAgICBjb3JlLlNoYWRlci5jYWxsKHRoaXMsXG4gICAgICAgIHNoYWRlck1hbmFnZXIsXG4gICAgICAgIC8vIHZlcnRleCBzaGFkZXJcbiAgICAgICAgW1xuICAgICAgICAgICAgJ3ByZWNpc2lvbiBsb3dwIGZsb2F0OycsXG4gICAgICAgICAgICAnYXR0cmlidXRlIHZlYzIgYVZlcnRleFBvc2l0aW9uOycsXG4gICAgICAgICAgICAnYXR0cmlidXRlIHZlYzIgYVRleHR1cmVDb29yZDsnLFxuXG4gICAgICAgICAgICAndW5pZm9ybSBtYXQzIHRyYW5zbGF0aW9uTWF0cml4OycsXG4gICAgICAgICAgICAndW5pZm9ybSBtYXQzIHByb2plY3Rpb25NYXRyaXg7JyxcblxuICAgICAgICAgICAgJ3ZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkOycsXG5cbiAgICAgICAgICAgICd2b2lkIG1haW4odm9pZCl7JyxcbiAgICAgICAgICAgICcgICBnbF9Qb3NpdGlvbiA9IHZlYzQoKHByb2plY3Rpb25NYXRyaXggKiB0cmFuc2xhdGlvbk1hdHJpeCAqIHZlYzMoYVZlcnRleFBvc2l0aW9uLCAxLjApKS54eSwgMC4wLCAxLjApOycsXG4gICAgICAgICAgICAnICAgdlRleHR1cmVDb29yZCA9IGFUZXh0dXJlQ29vcmQ7JyxcbiAgICAgICAgICAgICd9J1xuICAgICAgICBdLmpvaW4oJ1xcbicpLFxuICAgICAgICBbXG4gICAgICAgICAgICAncHJlY2lzaW9uIGxvd3AgZmxvYXQ7JyxcblxuICAgICAgICAgICAgJ3ZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkOycsXG4gICAgICAgICAgICAndW5pZm9ybSBmbG9hdCBhbHBoYTsnLFxuXG4gICAgICAgICAgICAndW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXI7JyxcblxuICAgICAgICAgICAgJ3ZvaWQgbWFpbih2b2lkKXsnLFxuICAgICAgICAgICAgJyAgIGdsX0ZyYWdDb2xvciA9IHRleHR1cmUyRCh1U2FtcGxlciwgdlRleHR1cmVDb29yZCkgKiBhbHBoYSA7JyxcbiAgICAgICAgICAgICd9J1xuICAgICAgICBdLmpvaW4oJ1xcbicpLFxuICAgICAgICAvLyBjdXN0b20gdW5pZm9ybXNcbiAgICAgICAge1xuICAgICAgICAgICAgYWxwaGE6ICB7IHR5cGU6ICcxZicsIHZhbHVlOiAwIH0sXG4gICAgICAgICAgICB0cmFuc2xhdGlvbk1hdHJpeDogeyB0eXBlOiAnbWF0MycsIHZhbHVlOiBuZXcgRmxvYXQzMkFycmF5KDkpIH0sXG4gICAgICAgICAgICBwcm9qZWN0aW9uTWF0cml4OiB7IHR5cGU6ICdtYXQzJywgdmFsdWU6IG5ldyBGbG9hdDMyQXJyYXkoOSkgfVxuICAgICAgICB9LFxuICAgICAgICAvLyBjdXN0b20gYXR0cmlidXRlc1xuICAgICAgICB7XG4gICAgICAgICAgICBhVmVydGV4UG9zaXRpb246MCxcbiAgICAgICAgICAgIGFUZXh0dXJlQ29vcmQ6MFxuICAgICAgICB9XG4gICAgKTtcbn1cblxuTWVzaFNoYWRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvcmUuU2hhZGVyLnByb3RvdHlwZSk7XG5NZXNoU2hhZGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IE1lc2hTaGFkZXI7XG5tb2R1bGUuZXhwb3J0cyA9IE1lc2hTaGFkZXI7XG5cbmNvcmUuU2hhZGVyTWFuYWdlci5yZWdpc3RlclBsdWdpbignbWVzaFNoYWRlcicsIE1lc2hTaGFkZXIpO1xuIiwiLy8gUmVmZXJlbmNlczpcbi8vIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0phdmFTY3JpcHQvUmVmZXJlbmNlL0dsb2JhbF9PYmplY3RzL01hdGgvc2lnblxuXG5pZiAoIU1hdGguc2lnbilcbntcbiAgICBNYXRoLnNpZ24gPSBmdW5jdGlvbiAoeCkge1xuICAgICAgICB4ID0gK3g7XG4gICAgICAgIGlmICh4ID09PSAwIHx8IGlzTmFOKHgpKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4geDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4geCA+IDAgPyAxIDogLTE7XG4gICAgfTtcbn1cbiIsIi8vIFJlZmVyZW5jZXM6XG4vLyBodHRwczovL2dpdGh1Yi5jb20vc2luZHJlc29yaHVzL29iamVjdC1hc3NpZ25cbi8vIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0phdmFTY3JpcHQvUmVmZXJlbmNlL0dsb2JhbF9PYmplY3RzL09iamVjdC9hc3NpZ25cblxuaWYgKCFPYmplY3QuYXNzaWduKVxue1xuICAgIE9iamVjdC5hc3NpZ24gPSByZXF1aXJlKCdvYmplY3QtYXNzaWduJyk7XG59XG4iLCJyZXF1aXJlKCcuL09iamVjdC5hc3NpZ24nKTtcbnJlcXVpcmUoJy4vcmVxdWVzdEFuaW1hdGlvbkZyYW1lJyk7XG5yZXF1aXJlKCcuL01hdGguc2lnbicpO1xuIiwiLy8gUmVmZXJlbmNlczpcbi8vIGh0dHA6Ly9wYXVsaXJpc2guY29tLzIwMTEvcmVxdWVzdGFuaW1hdGlvbmZyYW1lLWZvci1zbWFydC1hbmltYXRpbmcvXG4vLyBodHRwczovL2dpc3QuZ2l0aHViLmNvbS8xNTc5NjcxXG4vLyBodHRwOi8vdXBkYXRlcy5odG1sNXJvY2tzLmNvbS8yMDEyLzA1L3JlcXVlc3RBbmltYXRpb25GcmFtZS1BUEktbm93LXdpdGgtc3ViLW1pbGxpc2Vjb25kLXByZWNpc2lvblxuLy8gaHR0cHM6Ly9naXN0LmdpdGh1Yi5jb20vdGltaGFsbC80MDc4NjE0XG4vLyBodHRwczovL2dpdGh1Yi5jb20vRmluYW5jaWFsLVRpbWVzL3BvbHlmaWxsLXNlcnZpY2UvdHJlZS9tYXN0ZXIvcG9seWZpbGxzL3JlcXVlc3RBbmltYXRpb25GcmFtZVxuXG4vLyBFeHBlY3RlZCB0byBiZSB1c2VkIHdpdGggQnJvd3NlcmZpeVxuLy8gQnJvd3NlcmlmeSBhdXRvbWF0aWNhbGx5IGRldGVjdHMgdGhlIHVzZSBvZiBgZ2xvYmFsYCBhbmQgcGFzc2VzIHRoZVxuLy8gY29ycmVjdCByZWZlcmVuY2Ugb2YgYGdsb2JhbGAsIGBzZWxmYCwgYW5kIGZpbmFsbHkgYHdpbmRvd2BcblxuLy8gRGF0ZS5ub3dcbmlmICghKERhdGUubm93ICYmIERhdGUucHJvdG90eXBlLmdldFRpbWUpKSB7XG4gICAgRGF0ZS5ub3cgPSBmdW5jdGlvbiBub3coKSB7XG4gICAgICAgIHJldHVybiBuZXcgRGF0ZSgpLmdldFRpbWUoKTtcbiAgICB9O1xufVxuXG4vLyBwZXJmb3JtYW5jZS5ub3dcbmlmICghKGdsb2JhbC5wZXJmb3JtYW5jZSAmJiBnbG9iYWwucGVyZm9ybWFuY2Uubm93KSkge1xuICAgIHZhciBzdGFydFRpbWUgPSBEYXRlLm5vdygpO1xuICAgIGlmICghZ2xvYmFsLnBlcmZvcm1hbmNlKSB7XG4gICAgICAgIGdsb2JhbC5wZXJmb3JtYW5jZSA9IHt9O1xuICAgIH1cbiAgICBnbG9iYWwucGVyZm9ybWFuY2Uubm93ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gRGF0ZS5ub3coKSAtIHN0YXJ0VGltZTtcbiAgICB9O1xufVxuXG4vLyByZXF1ZXN0QW5pbWF0aW9uRnJhbWVcbnZhciBsYXN0VGltZSA9IERhdGUubm93KCk7XG52YXIgdmVuZG9ycyA9IFsnbXMnLCAnbW96JywgJ3dlYmtpdCcsICdvJ107XG5cbmZvcih2YXIgeCA9IDA7IHggPCB2ZW5kb3JzLmxlbmd0aCAmJiAhZ2xvYmFsLnJlcXVlc3RBbmltYXRpb25GcmFtZTsgKyt4KSB7XG4gICAgZ2xvYmFsLnJlcXVlc3RBbmltYXRpb25GcmFtZSA9IGdsb2JhbFt2ZW5kb3JzW3hdICsgJ1JlcXVlc3RBbmltYXRpb25GcmFtZSddO1xuICAgIGdsb2JhbC5jYW5jZWxBbmltYXRpb25GcmFtZSA9IGdsb2JhbFt2ZW5kb3JzW3hdICsgJ0NhbmNlbEFuaW1hdGlvbkZyYW1lJ10gfHxcbiAgICAgICAgZ2xvYmFsW3ZlbmRvcnNbeF0gKyAnQ2FuY2VsUmVxdWVzdEFuaW1hdGlvbkZyYW1lJ107XG59XG5cbmlmICghZ2xvYmFsLnJlcXVlc3RBbmltYXRpb25GcmFtZSkge1xuICAgIGdsb2JhbC5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUgPSBmdW5jdGlvbiAoY2FsbGJhY2spIHtcbiAgICAgICAgaWYgKHR5cGVvZiBjYWxsYmFjayAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihjYWxsYmFjayArICdpcyBub3QgYSBmdW5jdGlvbicpO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGN1cnJlbnRUaW1lID0gRGF0ZS5ub3coKSxcbiAgICAgICAgICAgIGRlbGF5ID0gMTYgKyBsYXN0VGltZSAtIGN1cnJlbnRUaW1lO1xuXG4gICAgICAgIGlmIChkZWxheSA8IDApIHtcbiAgICAgICAgICAgIGRlbGF5ID0gMDtcbiAgICAgICAgfVxuXG4gICAgICAgIGxhc3RUaW1lID0gY3VycmVudFRpbWU7XG5cbiAgICAgICAgcmV0dXJuIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgbGFzdFRpbWUgPSBEYXRlLm5vdygpO1xuICAgICAgICAgICAgY2FsbGJhY2socGVyZm9ybWFuY2Uubm93KCkpO1xuICAgICAgICB9LCBkZWxheSk7XG4gICAgfTtcbn1cblxuaWYgKCFnbG9iYWwuY2FuY2VsQW5pbWF0aW9uRnJhbWUpIHtcbiAgICBnbG9iYWwuY2FuY2VsQW5pbWF0aW9uRnJhbWUgPSBmdW5jdGlvbihpZCkge1xuICAgICAgICBjbGVhclRpbWVvdXQoaWQpO1xuICAgIH07XG59XG4iXX0= //# sourceMappingURL=pixi.js.map diff --git a/bin/pixi.min.js b/bin/pixi.min.js index f7a788e..d59cd98 100644 --- a/bin/pixi.min.js +++ b/bin/pixi.min.js @@ -1,11 +1,11 @@ -!function(t){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=t();else if("function"==typeof define&&define.amd)define([],t);else{var e;e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:this,e.PIXI=t()}}(function(){var t;return function e(t,r,i){function n(s,a){if(!r[s]){if(!t[s]){var h="function"==typeof require&&require;if(!a&&h)return h(s,!0);if(o)return o(s,!0);var u=new Error("Cannot find module '"+s+"'");throw u.code="MODULE_NOT_FOUND",u}var l=r[s]={exports:{}};t[s][0].call(l.exports,function(e){var r=t[s][1][e];return n(r?r:e)},l,l.exports,e,t,r,i)}return r[s].exports}for(var o="function"==typeof require&&require,s=0;s=t.byteLength?i.bufferSubData(this.type,e,t):i.bufferData(this.type,t,this.drawType),this.data=t},n.prototype.bind=function(){var t=this.gl;t.bindBuffer(this.type,this.buffer)},n.createVertexBuffer=function(t,e,r){return new n(t,t.ARRAY_BUFFER,e,r)},n.createIndexBuffer=function(t,e,r){return new n(t,t.ELEMENT_ARRAY_BUFFER,e,r)},n.create=function(t,e,r,i){return new n(t,e,i)},e.exports=n},{}],3:[function(t,e,r){var i=t("./GLTexture"),n=function(t,e,r){this.gl=t,this.framebuffer=t.createFramebuffer(),this.stencil=null,this.texture=null,this.width=e||100,this.height=r||100};n.prototype.enableTexture=function(t){var e=this.gl;this.texture=t||new i(e),this.texture.bind(),this.bind(),e.framebufferTexture2D(e.FRAMEBUFFER,e.COLOR_ATTACHMENT0,e.TEXTURE_2D,this.texture.texture,0)},n.prototype.enableStencil=function(){if(!this.stencil){var t=this.gl;this.stencil=t.createRenderbuffer(),t.bindRenderbuffer(t.RENDERBUFFER,this.stencil),t.framebufferRenderbuffer(t.FRAMEBUFFER,t.DEPTH_STENCIL_ATTACHMENT,t.RENDERBUFFER,this.stencil),t.renderbufferStorage(t.RENDERBUFFER,t.DEPTH_STENCIL,this.width,this.height)}},n.prototype.clear=function(t,e,r,i){this.bind();var n=this.gl;n.clearColor(t,e,r,i),n.clear(n.COLOR_BUFFER_BIT)},n.prototype.bind=function(){var t=this.gl;t.bindFramebuffer(t.FRAMEBUFFER,this.framebuffer)},n.prototype.unbind=function(){gl.bindFramebuffer(gl.FRAMEBUFFER,null)},n.prototype.resize=function(t,e){var r=this.gl;this.width=t,this.height=e,this.texture&&(this.texture.bind(),r.texImage2D(r.TEXTURE_2D,0,this.format,t,e,0,this.format,this.type,null)),this.stencil&&(r.bindRenderbuffer(r.RENDERBUFFER,this.stencil),r.renderbufferStorage(r.RENDERBUFFER,r.DEPTH_STENCIL,t,e))},n.prototype.destroy=function(){var t=this.gl;t.deleteFramebuffer(this.framebuffer)},n.createRGBA=function(t,e,r,o){var s=new i(t,e,r);s.enableNearestScaling(),s.enableWrapClamp(),t.texImage2D(t.TEXTURE_2D,0,t.RGBA,e,r,0,t.RGBA,t.UNSIGNED_BYTE,o);var a=new n(t,e,r);return a.enableTexture(s),a},n.createFloat32=function(t,e,r,o){var s=new i.fromData(t,o,e,r);s.enableNearestScaling(),s.enableWrapClamp();var a=new n(t,e,r);return a.enableTexture(s),a},e.exports=n},{"./GLTexture":5}],4:[function(t,e,r){var i=t("./shader/compileProgram"),n=t("./shader/extractAttributes"),o=t("./shader/extractUniforms"),s=t("./shader/generateUniformAccessObject"),a=function(t,e,r){this.gl=t,this.program=i(t,e,r),this.attributes=n(t,this.program);var a=o(t,this.program);this.uniforms=s(t,a)};a.prototype.bind=function(){this.gl.useProgram(this.program)},a.prototype.destroy=function(){this.gl},e.exports=a},{"./shader/compileProgram":9,"./shader/extractAttributes":11,"./shader/extractUniforms":12,"./shader/generateUniformAccessObject":13}],5:[function(t,e,r){var i=function(t,e,r,i,n){this.gl=t,this.texture=t.createTexture(),this.mipmap=!1,this.premultiplyAlpha=!1,this.width=e||0,this.height=r||0,this.format=i||t.RGBA,this.type=n||t.UNSIGNED_BYTE};i.prototype.upload=function(t){this.bind();var e=this.gl;this.width=t.width,this.height=t.height,e.pixelStorei(e.UNPACK_PREMULTIPLY_ALPHA_WEBGL,this.premultiplyAlpha),e.texImage2D(e.TEXTURE_2D,0,this.format,this.format,this.type,t)};var n=!1;i.prototype.uploadData=function(t,e,r){if(this.bind(),this.width=e||this.width,this.height=r||this.height,t instanceof Float32Array){if(!n){var i=gl.getExtension("OES_texture_float");if(!i)throw new Error("floating point textures not available");n=!0}this.type=gl.FLOAT}else this.type=gl.UNSIGNED_BYTE;gl.pixelStorei(gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL,this.premultiplyAlpha),gl.texImage2D(gl.TEXTURE_2D,0,this.format,this.width,this.height,0,this.format,this.type,t)},i.prototype.bind=function(t){var e=this.gl;void 0!==t&&e.activeTexture(e.TEXTURE0+t),e.bindTexture(e.TEXTURE_2D,this.texture)},i.prototype.unbind=function(){var t=this.gl;t.bindTexture(t.TEXTURE_2D,null)},i.prototype.minFilter=function(t){var e=this.gl;this.bind(),this.mipmap?e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MIN_FILTER,t?e.LINEAR_MIPMAP_LINEAR:e.NEAREST_MIPMAP_NEAREST):e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MIN_FILTER,t?e.LINEAR:e.NEAREST)},i.prototype.magFilter=function(t){var e=this.gl;this.bind(),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MAG_FILTER,t?e.LINEAR:e.NEAREST)},i.prototype.enableMipmap=function(){this.bind(),this.mipmap=!0,gl.generateMipmap(gl.TEXTURE_2D)},i.prototype.enableLinearScaling=function(){this.minFilter(!0),this.magFilter(!0)},i.prototype.enableNearestScaling=function(){this.minFilter(!1),this.magFilter(!1)},i.prototype.enableWrapClamp=function(){var t=this.gl;this.bind(),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_WRAP_S,t.CLAMP_TO_EDGE),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_WRAP_T,t.CLAMP_TO_EDGE)},i.prototype.enableWrapRepeat=function(){var t=this.gl;this.bind(),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_WRAP_S,t.REPEAT),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_WRAP_T,t.REPEAT)},i.prototype.destroy=function(){var t=this.gl;t.deleteTexture(this.texture)},i.fromSource=function(t,e,r){var n=new i(t);return n.premultiplyAlpha=r||!1,n.upload(e),n},i.fromData=function(t,e,r,n){var o=new i(t);return o.uploadData(e,r,n),o},e.exports=i},{}],6:[function(t,e,r){function i(t){this.nativeVaoExtension=t.getExtension("OES_vertex_array_object")||t.getExtension("MOZ_OES_vertex_array_object")||t.getExtension("WEBKIT_OES_vertex_array_object"),this.nativeVaoExtension&&(this.nativeVao=this.nativeVaoExtension.createVertexArrayOES()),this.gl=t,this.attributes=[],this.indexBuffer=null,this.dirty=!1}i.prototype.constructor=i,e.exports=i,i.prototype.bind=function(){this.nativeVao?(this.nativeVaoExtension.bindVertexArrayOES(this.nativeVao),this.dirty&&(this.dirty=!1,this.activate())):this.activate()},i.prototype.unbind=function(){this.nativeVao&&this.nativeVaoExtension.bindVertexArrayOES(null)},i.prototype.activate=function(){for(var t=this.gl,e=0;es;s++){var a=t.getActiveAttrib(e,s),h=i(t,a.type);r[a.name]={type:h,size:n(h),location:t.getAttribLocation(e,a.name),pointer:function(e,r,i,n){t.vertexAttribPointer(this.location,this.size,e||t.FLOAT,r||!1,i||0,n||0)}}}return r};e.exports=o},{"./mapSize":14,"./mapType":15}],12:[function(t,e,r){var i=t("./mapType"),n=t("./defaultValue"),o=function(t,e){for(var r={},o=t.getProgramParameter(e,t.ACTIVE_UNIFORMS),s=0;o>s;s++){var a=t.getActiveUniform(e,s),h=a.name.replace(/\[.*?\]/,""),u=i(t,a.type);r[h]={type:u,size:a.size,location:t.getUniformLocation(e,h),value:n(u,a.size)}}return r};e.exports=o},{"./defaultValue":10,"./mapType":15}],13:[function(t,e,r){var i=function(t,e){var r={data:{}};r.gl=t;for(var i=Object.keys(e),a=0;a=0&&t.length%1===0}function c(t,e){for(var r=-1,i=t.length;++ri?i:null}):(r=Y(t),e=r.length,function(){return i++,e>i?r[i]:null})}function y(t,e){return e=null==e?t.length-1:+e,function(){for(var r=Math.max(arguments.length-e,0),i=Array(r),n=0;r>n;n++)i[n]=arguments[n+e];switch(e){case 0:return t.call(this,i);case 1:return t.call(this,arguments[0],i)}}}function x(t){return function(e,r,i){return t(e,i)}}function b(t){return function(e,r,i){i=u(i||n),e=e||[];var o=m(e);if(0>=t)return i(null);var s=!1,a=0,l=!1;!function c(){if(s&&0>=a)return i(null);for(;t>a&&!l;){var n=o();if(null===n)return s=!0,void(0>=a&&i(null));a+=1,r(e[n],n,h(function(t){a-=1,t?(i(t),l=!0):c()}))}}()}}function _(t){return function(e,r,i){return t(N.eachOf,e,r,i)}}function T(t){return function(e,r,i,n){return t(b(r),e,i,n)}}function E(t){return function(e,r,i){return t(N.eachOfSeries,e,r,i)}}function S(t,e,r,i){i=u(i||n),e=e||[];var o=l(e)?[]:{};t(e,function(t,e,i){r(t,function(t,r){o[e]=r,i(t)})},function(t){i(t,o)})}function w(t,e,r,i){var n=[];t(e,function(t,e,i){r(t,function(r){r&&n.push({index:e,value:t}),i()})},function(){i(p(n.sort(function(t,e){return t.index-e.index}),function(t){return t.value}))})}function C(t,e,r,i){w(t,e,function(t,e){r(t,function(t){e(!t)})},i)}function A(t,e,r){return function(i,n,o,s){function a(){s&&s(r(!1,void 0))}function h(t,i,n){return s?void o(t,function(i){s&&e(i)&&(s(r(!0,t)),s=o=!1),n()}):n()}arguments.length>3?t(i,n,h,a):(s=o,o=n,t(i,h,a))}}function M(t,e){return e}function R(t,e,r){r=r||n;var i=l(e)?[]:{};t(e,function(t,e,r){t(y(function(t,n){n.length<=1&&(n=n[0]),i[e]=n,r(t)}))},function(t){r(t,i)})}function O(t,e,r,i){var n=[];t(e,function(t,e,i){r(t,function(t,e){n=n.concat(e||[]),i(t)})},function(t){i(t,n)})}function D(t,e,r){function i(t,e,r,i){if(null!=i&&"function"!=typeof i)throw new Error("task callback must be a function");return t.started=!0,j(e)||(e=[e]),0===e.length&&t.idle()?N.setImmediate(function(){t.drain()}):(c(e,function(e){var o={data:e,callback:i||n};r?t.tasks.unshift(o):t.tasks.push(o),t.tasks.length===t.concurrency&&t.saturated()}),void N.setImmediate(t.process))}function o(t,e){return function(){s-=1;var r=!1,i=arguments;c(e,function(t){c(a,function(e,i){e!==t||r||(a.splice(i,1),r=!0)}),t.callback.apply(t,i)}),t.tasks.length+s===0&&t.drain(),t.process()}}if(null==e)e=1;else if(0===e)throw new Error("Concurrency must not be zero");var s=0,a=[],u={tasks:[],concurrency:e,payload:r,saturated:n,empty:n,drain:n,started:!1,paused:!1,push:function(t,e){i(u,t,!1,e)},kill:function(){u.drain=n,u.tasks=[]},unshift:function(t,e){i(u,t,!0,e)},process:function(){if(!u.paused&&s=e;e++)N.setImmediate(u.process)}}};return u}function P(t){return y(function(e,r){e.apply(null,r.concat([y(function(e,r){"object"==typeof console&&(e?console.error&&console.error(e):console[t]&&c(r,function(e){console[t](e)}))})]))})}function F(t){return function(e,r,i){t(d(e),r,i)}}function L(t){return y(function(e,r){var i=y(function(r){var i=this,n=r.pop();return t(e,function(t,e,n){t.apply(i,r.concat([n]))},n)});return r.length?i.apply(this,r):i})}function B(t){return y(function(e){var r=e.pop();e.push(function(){var t=arguments;i?N.setImmediate(function(){r.apply(null,t)}):r.apply(null,t)});var i=!0;t.apply(this,e),i=!1})}var I,N={},U="object"==typeof self&&self.self===self&&self||"object"==typeof i&&i.global===i&&i||this;null!=U&&(I=U.async),N.noConflict=function(){return U.async=I,N};var k=Object.prototype.toString,j=Array.isArray||function(t){return"[object Array]"===k.call(t)},G=function(t){var e=typeof t;return"function"===e||"object"===e&&!!t},Y=Object.keys||function(t){var e=[];for(var r in t)t.hasOwnProperty(r)&&e.push(r);return e},X="function"==typeof setImmediate&&setImmediate,z=X?function(t){X(t)}:function(t){setTimeout(t,0)};"object"==typeof e&&"function"==typeof e.nextTick?N.nextTick=e.nextTick:N.nextTick=z,N.setImmediate=X?z:N.nextTick,N.forEach=N.each=function(t,e,r){return N.eachOf(t,x(e),r)},N.forEachSeries=N.eachSeries=function(t,e,r){return N.eachOfSeries(t,x(e),r)},N.forEachLimit=N.eachLimit=function(t,e,r,i){return b(e)(t,x(r),i)},N.forEachOf=N.eachOf=function(t,e,r){function i(t){a--,t?r(t):null===o&&0>=a&&r(null)}r=u(r||n),t=t||[];for(var o,s=m(t),a=0;null!=(o=s());)a+=1,e(t[o],o,h(i));0===a&&r(null)},N.forEachOfSeries=N.eachOfSeries=function(t,e,r){function i(){var n=!0;return null===s?r(null):(e(t[s],s,h(function(t){if(t)r(t);else{if(s=o(),null===s)return r(null);n?N.setImmediate(i):i()}})),void(n=!1))}r=u(r||n),t=t||[];var o=m(t),s=o();i()},N.forEachOfLimit=N.eachOfLimit=function(t,e,r,i){b(e)(t,r,i)},N.map=_(S),N.mapSeries=E(S),N.mapLimit=T(S),N.inject=N.foldl=N.reduce=function(t,e,r,i){N.eachOfSeries(t,function(t,i,n){r(e,t,function(t,r){e=r,n(t)})},function(t){i(t,e)})},N.foldr=N.reduceRight=function(t,e,r,i){var n=p(t,o).reverse();N.reduce(n,e,r,i)},N.transform=function(t,e,r,i){3===arguments.length&&(i=r,r=e,e=j(t)?[]:{}),N.eachOf(t,function(t,i,n){r(e,t,i,n)},function(t){i(t,e)})},N.select=N.filter=_(w),N.selectLimit=N.filterLimit=T(w),N.selectSeries=N.filterSeries=E(w),N.reject=_(C),N.rejectLimit=T(C),N.rejectSeries=E(C),N.any=N.some=A(N.eachOf,s,o),N.someLimit=A(N.eachOfLimit,s,o),N.all=N.every=A(N.eachOf,a,a),N.everyLimit=A(N.eachOfLimit,a,a),N.detect=A(N.eachOf,o,M),N.detectSeries=A(N.eachOfSeries,o,M),N.detectLimit=A(N.eachOfLimit,o,M),N.sortBy=function(t,e,r){function i(t,e){var r=t.criteria,i=e.criteria;return i>r?-1:r>i?1:0}N.map(t,function(t,r){e(t,function(e,i){e?r(e):r(null,{value:t,criteria:i})})},function(t,e){return t?r(t):void r(null,p(e.sort(i),function(t){return t.value}))})},N.auto=function(t,e,r){function i(t){d.unshift(t)}function o(t){var e=g(d,t);e>=0&&d.splice(e,1)}function s(){h--,c(d.slice(0),function(t){t()})}r||(r=e,e=null),r=u(r||n);var a=Y(t),h=a.length;if(!h)return r(null);e||(e=h);var l={},p=0,d=[];i(function(){h||r(null,l)}),c(a,function(n){function a(){return e>p&&f(m,function(t,e){return t&&l.hasOwnProperty(e)},!0)&&!l.hasOwnProperty(n)}function h(){a()&&(p++,o(h),c[c.length-1](d,l))}for(var u,c=j(t[n])?t[n]:[t[n]],d=y(function(t,e){if(p--,e.length<=1&&(e=e[0]),t){var i={};v(l,function(t,e){i[e]=t}),i[n]=e,r(t,i)}else l[n]=e,N.setImmediate(s)}),m=c.slice(0,c.length-1),x=m.length;x--;){if(!(u=t[m[x]]))throw new Error("Has inexistant dependency");if(j(u)&&g(u,n)>=0)throw new Error("Has cyclic dependencies")}a()?(p++,c[c.length-1](d,l)):i(h)})},N.retry=function(t,e,r){function i(t,e){if("number"==typeof e)t.times=parseInt(e,10)||o;else{if("object"!=typeof e)throw new Error("Unsupported argument type for 'times': "+typeof e);t.times=parseInt(e.times,10)||o,t.interval=parseInt(e.interval,10)||s}}function n(t,e){function r(t,r){return function(i){t(function(t,e){i(!t||r,{err:t,result:e})},e)}}function i(t){return function(e){setTimeout(function(){e(null)},t)}}for(;h.times;){var n=!(h.times-=1);a.push(r(h.task,n)),!n&&h.interval>0&&a.push(i(h.interval))}N.series(a,function(e,r){r=r[r.length-1],(t||h.callback)(r.err,r.result)})}var o=5,s=0,a=[],h={times:o,interval:s},u=arguments.length;if(1>u||u>3)throw new Error("Invalid arguments - must be either (task), (task, callback), (times, task) or (times, task, callback)");return 2>=u&&"function"==typeof t&&(r=e,e=t),"function"!=typeof t&&i(h,t),h.callback=r,h.task=e,h.callback?n():n},N.waterfall=function(t,e){function r(t){return y(function(i,n){if(i)e.apply(null,[i].concat(n));else{var o=t.next();o?n.push(r(o)):n.push(e),B(t).apply(null,n)}})}if(e=u(e||n),!j(t)){var i=new Error("First argument to waterfall must be an array of functions");return e(i)}return t.length?void r(N.iterator(t))():e()},N.parallel=function(t,e){R(N.eachOf,t,e)},N.parallelLimit=function(t,e,r){R(b(e),t,r)},N.series=function(t,e){R(N.eachOfSeries,t,e)},N.iterator=function(t){function e(r){function i(){return t.length&&t[r].apply(null,arguments),i.next()}return i.next=function(){return ri;){var o=i+(n-i+1>>>1);r(e,t[o])>=0?i=o:n=o-1}return i}function o(t,e,o,s){if(null!=s&&"function"!=typeof s)throw new Error("task callback must be a function");return t.started=!0,j(e)||(e=[e]),0===e.length?N.setImmediate(function(){t.drain()}):void c(e,function(e){var a={data:e,priority:o,callback:"function"==typeof s?s:n};t.tasks.splice(i(t.tasks,a,r)+1,0,a),t.tasks.length===t.concurrency&&t.saturated(),N.setImmediate(t.process)})}var s=N.queue(t,e);return s.push=function(t,e,r){o(s,t,e,r)},delete s.unshift,s},N.cargo=function(t,e){return D(t,1,e)},N.log=P("log"),N.dir=P("dir"),N.memoize=function(t,e){var r={},i={};e=e||o;var n=y(function(n){var o=n.pop(),s=e.apply(null,n);s in r?N.setImmediate(function(){o.apply(null,r[s])}):s in i?i[s].push(o):(i[s]=[o],t.apply(null,n.concat([y(function(t){r[s]=t;var e=i[s];delete i[s];for(var n=0,o=e.length;o>n;n++)e[n].apply(null,t)})])))});return n.memo=r,n.unmemoized=t,n},N.unmemoize=function(t){return function(){return(t.unmemoized||t).apply(null,arguments)}},N.times=F(N.map),N.timesSeries=F(N.mapSeries),N.timesLimit=function(t,e,r,i){return N.mapLimit(d(t),e,r,i)},N.seq=function(){var t=arguments;return y(function(e){var r=this,i=e[e.length-1];"function"==typeof i?e.pop():i=n,N.reduce(t,e,function(t,e,i){e.apply(r,t.concat([y(function(t,e){i(t,e)})]))},function(t,e){i.apply(r,[t].concat(e))})})},N.compose=function(){return N.seq.apply(null,Array.prototype.reverse.call(arguments))},N.applyEach=L(N.eachOf),N.applyEachSeries=L(N.eachOfSeries),N.forever=function(t,e){function r(t){return t?i(t):void o(r)}var i=h(e||n),o=B(t);r()},N.ensureAsync=B,N.constant=y(function(t){var e=[null].concat(t);return function(t){return t.apply(this,e)}}),N.wrapSync=N.asyncify=function(t){return y(function(e){var r,i=e.pop();try{r=t.apply(this,e)}catch(n){return i(n)}G(r)&&"function"==typeof r.then?r.then(function(t){i(null,t)})["catch"](function(t){i(t.message?t:new Error(t))}):i(null,r)})},"object"==typeof r&&r.exports?r.exports=N:"function"==typeof t&&t.amd?t([],function(){return N}):U.async=N}()}).call(this,e("_process"),"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{_process:18}],17:[function(t,e,r){(function(t){function e(t,e){for(var r=0,i=t.length-1;i>=0;i--){var n=t[i];"."===n?t.splice(i,1):".."===n?(t.splice(i,1),r++):r&&(t.splice(i,1),r--)}if(e)for(;r--;r)t.unshift("..");return t}function i(t,e){if(t.filter)return t.filter(e);for(var r=[],i=0;i=-1&&!n;o--){var s=o>=0?arguments[o]:t.cwd();if("string"!=typeof s)throw new TypeError("Arguments to path.resolve must be strings");s&&(r=s+"/"+r,n="/"===s.charAt(0))}return r=e(i(r.split("/"),function(t){return!!t}),!n).join("/"),(n?"/":"")+r||"."},r.normalize=function(t){var n=r.isAbsolute(t),o="/"===s(t,-1);return t=e(i(t.split("/"),function(t){return!!t}),!n).join("/"),t||n||(t="."),t&&o&&(t+="/"),(n?"/":"")+t},r.isAbsolute=function(t){return"/"===t.charAt(0)},r.join=function(){var t=Array.prototype.slice.call(arguments,0);return r.normalize(i(t,function(t,e){if("string"!=typeof t)throw new TypeError("Arguments to path.join must be strings");return t}).join("/"))},r.relative=function(t,e){function i(t){for(var e=0;e=0&&""===t[r];r--);return e>r?[]:t.slice(e,r-e+1)}t=r.resolve(t).substr(1),e=r.resolve(e).substr(1);for(var n=i(t.split("/")),o=i(e.split("/")),s=Math.min(n.length,o.length),a=s,h=0;s>h;h++)if(n[h]!==o[h]){a=h;break}for(var u=[],h=a;he&&(e=t.length+e),t.substr(e,r)}}).call(this,t("_process"))},{_process:18}],18:[function(t,e,r){function i(){l=!1,a.length?u=a.concat(u):c=-1,u.length&&n()}function n(){if(!l){var t=setTimeout(i);l=!0;for(var e=u.length;e;){for(a=u,u=[];++c1)for(var r=1;r1&&(i=r[0]+"@",t=r[1]),t=t.replace(F,".");var n=t.split("."),o=s(n,e).join(".");return i+o}function h(t){for(var e,r,i=[],n=0,o=t.length;o>n;)e=t.charCodeAt(n++),e>=55296&&56319>=e&&o>n?(r=t.charCodeAt(n++),56320==(64512&r)?i.push(((1023&e)<<10)+(1023&r)+65536):(i.push(e),n--)):i.push(e);return i}function u(t){return s(t,function(t){var e="";return t>65535&&(t-=65536,e+=N(t>>>10&1023|55296),t=56320|1023&t),e+=N(t)}).join("")}function l(t){return 10>t-48?t-22:26>t-65?t-65:26>t-97?t-97:E}function c(t,e){return t+22+75*(26>t)-((0!=e)<<5)}function p(t,e,r){var i=0;for(t=r?I(t/A):t>>1,t+=I(t/e);t>B*w>>1;i+=E)t=I(t/B);return I(i+(B+1)*t/(t+C))}function d(t){var e,r,i,n,s,a,h,c,d,f,v=[],g=t.length,m=0,y=R,x=M;for(r=t.lastIndexOf(O),0>r&&(r=0),i=0;r>i;++i)t.charCodeAt(i)>=128&&o("not-basic"),v.push(t.charCodeAt(i));for(n=r>0?r+1:0;g>n;){for(s=m,a=1,h=E;n>=g&&o("invalid-input"),c=l(t.charCodeAt(n++)),(c>=E||c>I((T-m)/a))&&o("overflow"),m+=c*a,d=x>=h?S:h>=x+w?w:h-x,!(d>c);h+=E)f=E-d,a>I(T/f)&&o("overflow"),a*=f;e=v.length+1,x=p(m-s,e,0==s),I(m/e)>T-y&&o("overflow"),y+=I(m/e),m%=e,v.splice(m++,0,y)}return u(v)}function f(t){var e,r,i,n,s,a,u,l,d,f,v,g,m,y,x,b=[];for(t=h(t),g=t.length,e=R,r=0,s=M,a=0;g>a;++a)v=t[a],128>v&&b.push(N(v));for(i=n=b.length,n&&b.push(O);g>i;){for(u=T,a=0;g>a;++a)v=t[a],v>=e&&u>v&&(u=v);for(m=i+1,u-e>I((T-r)/m)&&o("overflow"),r+=(u-e)*m,e=u,a=0;g>a;++a)if(v=t[a],e>v&&++r>T&&o("overflow"),v==e){for(l=r,d=E;f=s>=d?S:d>=s+w?w:d-s,!(f>l);d+=E)x=l-f,y=E-f,b.push(N(c(f+x%y,0))),l=I(x/y);b.push(N(c(l,0))),s=p(r,m,i==n),r=0,++i}++r,++e}return b.join("")}function v(t){return a(t,function(t){return D.test(t)?d(t.slice(4).toLowerCase()):t})}function g(t){return a(t,function(t){return P.test(t)?"xn--"+f(t):t})}var m="object"==typeof i&&i&&!i.nodeType&&i,y="object"==typeof r&&r&&!r.nodeType&&r,x="object"==typeof e&&e;(x.global===x||x.window===x||x.self===x)&&(n=x);var b,_,T=2147483647,E=36,S=1,w=26,C=38,A=700,M=72,R=128,O="-",D=/^xn--/,P=/[^\x20-\x7E]/,F=/[\x2E\u3002\uFF0E\uFF61]/g,L={overflow:"Overflow: input needs wider integers to process","not-basic":"Illegal input >= 0x80 (not a basic code point)","invalid-input":"Invalid input"},B=E-S,I=Math.floor,N=String.fromCharCode;if(b={version:"1.3.2",ucs2:{decode:h,encode:u},decode:d,encode:f,toASCII:g,toUnicode:v},"function"==typeof t&&"object"==typeof t.amd&&t.amd)t("punycode",function(){return b});else if(m&&y)if(r.exports==m)y.exports=b;else for(_ in b)b.hasOwnProperty(_)&&(m[_]=b[_]);else n.punycode=b}(this)}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{}],20:[function(t,e,r){"use strict";function i(t,e){return Object.prototype.hasOwnProperty.call(t,e)}e.exports=function(t,e,r,o){e=e||"&",r=r||"=";var s={};if("string"!=typeof t||0===t.length)return s;var a=/\+/g;t=t.split(e);var h=1e3;o&&"number"==typeof o.maxKeys&&(h=o.maxKeys);var u=t.length;h>0&&u>h&&(u=h);for(var l=0;u>l;++l){var c,p,d,f,v=t[l].replace(a,"%20"),g=v.indexOf(r);g>=0?(c=v.substr(0,g),p=v.substr(g+1)):(c=v, -p=""),d=decodeURIComponent(c),f=decodeURIComponent(p),i(s,d)?n(s[d])?s[d].push(f):s[d]=[s[d],f]:s[d]=f}return s};var n=Array.isArray||function(t){return"[object Array]"===Object.prototype.toString.call(t)}},{}],21:[function(t,e,r){"use strict";function i(t,e){if(t.map)return t.map(e);for(var r=[],i=0;i",'"',"`"," ","\r","\n"," "],g=["{","}","|","\\","^","`"].concat(v),m=["'"].concat(g),y=["%","/","?",";","#"].concat(m),x=["/","?","#"],b=255,_=/^[a-z0-9A-Z_-]{0,63}$/,T=/^([a-z0-9A-Z_-]{0,63})(.*)$/,E={javascript:!0,"javascript:":!0},S={javascript:!0,"javascript:":!0},w={http:!0,https:!0,ftp:!0,gopher:!0,file:!0,"http:":!0,"https:":!0,"ftp:":!0,"gopher:":!0,"file:":!0},C=t("querystring");i.prototype.parse=function(t,e,r){if(!h(t))throw new TypeError("Parameter 'url' must be a string, not "+typeof t);var i=t;i=i.trim();var n=d.exec(i);if(n){n=n[0];var o=n.toLowerCase();this.protocol=o,i=i.substr(n.length)}if(r||n||i.match(/^\/\/[^@\/]+@[^@\/]+/)){var s="//"===i.substr(0,2);!s||n&&S[n]||(i=i.substr(2),this.slashes=!0)}if(!S[n]&&(s||n&&!w[n])){for(var a=-1,u=0;ul)&&(a=l)}var c,f;f=-1===a?i.lastIndexOf("@"):i.lastIndexOf("@",a),-1!==f&&(c=i.slice(0,f),i=i.slice(f+1),this.auth=decodeURIComponent(c)),a=-1;for(var u=0;ul)&&(a=l)}-1===a&&(a=i.length),this.host=i.slice(0,a),i=i.slice(a),this.parseHost(),this.hostname=this.hostname||"";var v="["===this.hostname[0]&&"]"===this.hostname[this.hostname.length-1];if(!v)for(var g=this.hostname.split(/\./),u=0,A=g.length;A>u;u++){var M=g[u];if(M&&!M.match(_)){for(var R="",O=0,D=M.length;D>O;O++)R+=M.charCodeAt(O)>127?"x":M[O];if(!R.match(_)){var P=g.slice(0,u),F=g.slice(u+1),L=M.match(T);L&&(P.push(L[1]),F.unshift(L[2])),F.length&&(i="/"+F.join(".")+i),this.hostname=P.join(".");break}}}if(this.hostname.length>b?this.hostname="":this.hostname=this.hostname.toLowerCase(),!v){for(var B=this.hostname.split("."),I=[],u=0;uu;u++){var j=m[u],G=encodeURIComponent(j);G===j&&(G=escape(j)),i=i.split(j).join(G)}var Y=i.indexOf("#");-1!==Y&&(this.hash=i.substr(Y),i=i.slice(0,Y));var X=i.indexOf("?");if(-1!==X?(this.search=i.substr(X),this.query=i.substr(X+1),e&&(this.query=C.parse(this.query)),i=i.slice(0,X)):e&&(this.search="",this.query={}),i&&(this.pathname=i),w[o]&&this.hostname&&!this.pathname&&(this.pathname="/"),this.pathname||this.search){var U=this.pathname||"",N=this.search||"";this.path=U+N}return this.href=this.format(),this},i.prototype.format=function(){var t=this.auth||"";t&&(t=encodeURIComponent(t),t=t.replace(/%3A/i,":"),t+="@");var e=this.protocol||"",r=this.pathname||"",i=this.hash||"",n=!1,o="";this.host?n=t+this.host:this.hostname&&(n=t+(-1===this.hostname.indexOf(":")?this.hostname:"["+this.hostname+"]"),this.port&&(n+=":"+this.port)),this.query&&u(this.query)&&Object.keys(this.query).length&&(o=C.stringify(this.query));var s=this.search||o&&"?"+o||"";return e&&":"!==e.substr(-1)&&(e+=":"),this.slashes||(!e||w[e])&&n!==!1?(n="//"+(n||""),r&&"/"!==r.charAt(0)&&(r="/"+r)):n||(n=""),i&&"#"!==i.charAt(0)&&(i="#"+i),s&&"?"!==s.charAt(0)&&(s="?"+s),r=r.replace(/[?#]/g,function(t){return encodeURIComponent(t)}),s=s.replace("#","%23"),e+n+r+s+i},i.prototype.resolve=function(t){return this.resolveObject(n(t,!1,!0)).format()},i.prototype.resolveObject=function(t){if(h(t)){var e=new i;e.parse(t,!1,!0),t=e}var r=new i;if(Object.keys(this).forEach(function(t){r[t]=this[t]},this),r.hash=t.hash,""===t.href)return r.href=r.format(),r;if(t.slashes&&!t.protocol)return Object.keys(t).forEach(function(e){"protocol"!==e&&(r[e]=t[e])}),w[r.protocol]&&r.hostname&&!r.pathname&&(r.path=r.pathname="/"),r.href=r.format(),r;if(t.protocol&&t.protocol!==r.protocol){if(!w[t.protocol])return Object.keys(t).forEach(function(e){r[e]=t[e]}),r.href=r.format(),r;if(r.protocol=t.protocol,t.host||S[t.protocol])r.pathname=t.pathname;else{for(var n=(t.pathname||"").split("/");n.length&&!(t.host=n.shift()););t.host||(t.host=""),t.hostname||(t.hostname=""),""!==n[0]&&n.unshift(""),n.length<2&&n.unshift(""),r.pathname=n.join("/")}if(r.search=t.search,r.query=t.query,r.host=t.host||"",r.auth=t.auth,r.hostname=t.hostname||t.host,r.port=t.port,r.pathname||r.search){var o=r.pathname||"",s=r.search||"";r.path=o+s}return r.slashes=r.slashes||t.slashes,r.href=r.format(),r}var a=r.pathname&&"/"===r.pathname.charAt(0),u=t.host||t.pathname&&"/"===t.pathname.charAt(0),p=u||a||r.host&&t.pathname,d=p,f=r.pathname&&r.pathname.split("/")||[],n=t.pathname&&t.pathname.split("/")||[],v=r.protocol&&!w[r.protocol];if(v&&(r.hostname="",r.port=null,r.host&&(""===f[0]?f[0]=r.host:f.unshift(r.host)),r.host="",t.protocol&&(t.hostname=null,t.port=null,t.host&&(""===n[0]?n[0]=t.host:n.unshift(t.host)),t.host=null),p=p&&(""===n[0]||""===f[0])),u)r.host=t.host||""===t.host?t.host:r.host,r.hostname=t.hostname||""===t.hostname?t.hostname:r.hostname,r.search=t.search,r.query=t.query,f=n;else if(n.length)f||(f=[]),f.pop(),f=f.concat(n),r.search=t.search,r.query=t.query;else if(!c(t.search)){if(v){r.hostname=r.host=f.shift();var g=r.host&&r.host.indexOf("@")>0?r.host.split("@"):!1;g&&(r.auth=g.shift(),r.host=r.hostname=g.shift())}return r.search=t.search,r.query=t.query,l(r.pathname)&&l(r.search)||(r.path=(r.pathname?r.pathname:"")+(r.search?r.search:"")),r.href=r.format(),r}if(!f.length)return r.pathname=null,r.search?r.path="/"+r.search:r.path=null,r.href=r.format(),r;for(var m=f.slice(-1)[0],y=(r.host||t.host)&&("."===m||".."===m)||""===m,x=0,b=f.length;b>=0;b--)m=f[b],"."==m?f.splice(b,1):".."===m?(f.splice(b,1),x++):x&&(f.splice(b,1),x--);if(!p&&!d)for(;x--;x)f.unshift("..");!p||""===f[0]||f[0]&&"/"===f[0].charAt(0)||f.unshift(""),y&&"/"!==f.join("/").substr(-1)&&f.push("");var _=""===f[0]||f[0]&&"/"===f[0].charAt(0);if(v){r.hostname=r.host=_?"":f.length?f.shift():"";var g=r.host&&r.host.indexOf("@")>0?r.host.split("@"):!1;g&&(r.auth=g.shift(),r.host=r.hostname=g.shift())}return p=p||r.host&&f.length,p&&!_&&f.unshift(""),f.length?r.pathname=f.join("/"):(r.pathname=null,r.path=null),l(r.pathname)&&l(r.search)||(r.path=(r.pathname?r.pathname:"")+(r.search?r.search:"")),r.auth=t.auth||r.auth,r.slashes=r.slashes||t.slashes,r.href=r.format(),r},i.prototype.parseHost=function(){var t=this.host,e=f.exec(t);e&&(e=e[0],":"!==e&&(this.port=e.substr(1)),t=t.substr(0,t.length-e.length)),t&&(this.hostname=t)}},{punycode:19,querystring:22}],24:[function(t,e,r){"use strict";function i(t,e,r){r=r||2;var i=e&&e.length,o=i?e[0]*r:t.length,a=n(t,0,o,r,!0),h=[];if(!a)return h;var u,l,p,d,f,v,g;if(i&&(a=c(t,e,a,r)),t.length>80*r){u=p=t[0],l=d=t[1];for(var m=r;o>m;m+=r)f=t[m],v=t[m+1],u>f&&(u=f),l>v&&(l=v),f>p&&(p=f),v>d&&(d=v);g=Math.max(p-u,d-l)}return s(a,h,r,u,l,g),h}function n(t,e,r,i,n){var o,s,a,h=0;for(o=e,s=r-i;r>o;o+=i)h+=(t[s]-t[o])*(t[o+1]+t[s+1]),s=o;if(n===h>0)for(o=e;r>o;o+=i)a=M(o,t[o],t[o+1],a);else for(o=r-i;o>=e;o-=i)a=M(o,t[o],t[o+1],a);return a}function o(t,e){if(!t)return t;e||(e=t);var r,i=t;do if(r=!1,i.steiner||!T(i,i.next)&&0!==_(i.prev,i,i.next))i=i.next;else{if(R(i),i=e=i.prev,i===i.next)return null;r=!0}while(r||i!==e);return e}function s(t,e,r,i,n,c,p){if(t){!p&&c&&v(t,i,n,c);for(var d,f,g=t;t.prev!==t.next;)if(d=t.prev,f=t.next,c?h(t,i,n,c):a(t))e.push(d.i/r),e.push(t.i/r),e.push(f.i/r),R(t),t=f.next,g=f.next;else if(t=f,t===g){p?1===p?(t=u(t,e,r),s(t,e,r,i,n,c,2)):2===p&&l(t,e,r,i,n,c):s(o(t),e,r,i,n,c,1);break}}}function a(t){var e=t.prev,r=t,i=t.next;if(_(e,r,i)>=0)return!1;for(var n=t.next.next;n!==t.prev;){if(x(e.x,e.y,r.x,r.y,i.x,i.y,n.x,n.y)&&_(n.prev,n,n.next)>=0)return!1;n=n.next}return!0}function h(t,e,r,i){var n=t.prev,o=t,s=t.next;if(_(n,o,s)>=0)return!1;for(var a=n.xo.x?n.x>s.x?n.x:s.x:o.x>s.x?o.x:s.x,l=n.y>o.y?n.y>s.y?n.y:s.y:o.y>s.y?o.y:s.y,c=m(a,h,e,r,i),p=m(u,l,e,r,i),d=t.nextZ;d&&d.z<=p;){if(d!==t.prev&&d!==t.next&&x(n.x,n.y,o.x,o.y,s.x,s.y,d.x,d.y)&&_(d.prev,d,d.next)>=0)return!1;d=d.nextZ}for(d=t.prevZ;d&&d.z>=c;){if(d!==t.prev&&d!==t.next&&x(n.x,n.y,o.x,o.y,s.x,s.y,d.x,d.y)&&_(d.prev,d,d.next)>=0)return!1;d=d.prevZ}return!0}function u(t,e,r){var i=t;do{var n=i.prev,o=i.next.next;E(n,i,i.next,o)&&w(n,o)&&w(o,n)&&(e.push(n.i/r),e.push(i.i/r),e.push(o.i/r),R(i),R(i.next),i=t=o),i=i.next}while(i!==t);return i}function l(t,e,r,i,n,a){var h=t;do{for(var u=h.next.next;u!==h.prev;){if(h.i!==u.i&&b(h,u)){var l=A(h,u);return h=o(h,h.next),l=o(l,l.next),s(h,e,r,i,n,a),void s(l,e,r,i,n,a)}u=u.next}h=h.next}while(h!==t)}function c(t,e,r,i){var s,a,h,u,l,c=[];for(s=0,a=e.length;a>s;s++)h=e[s]*i,u=a-1>s?e[s+1]*i:t.length,l=n(t,h,u,i,!1),l===l.next&&(l.steiner=!0),c.push(y(l));for(c.sort(p),s=0;s=i.next.y){var a=i.x+(o-i.y)*(i.next.x-i.x)/(i.next.y-i.y);n>=a&&a>s&&(s=a,r=i.x=i.x&&i.x>=r.x&&x(oh||h===l&&i.x>r.x)&&w(i,t)&&(r=i,l=h)),i=i.next;return r}function v(t,e,r,i){var n=t;do null===n.z&&(n.z=m(n.x,n.y,e,r,i)),n.prevZ=n.prev,n.nextZ=n.next,n=n.next;while(n!==t);n.prevZ.nextZ=null,n.prevZ=null,g(n)}function g(t){var e,r,i,n,o,s,a,h,u=1;do{for(r=t,t=null,o=null,s=0;r;){for(s++,i=r,a=0,e=0;u>e&&(a++,i=i.nextZ,i);e++);for(h=u;a>0||h>0&&i;)0===a?(n=i,i=i.nextZ,h--):0!==h&&i?r.z<=i.z?(n=r,r=r.nextZ,a--):(n=i,i=i.nextZ,h--):(n=r,r=r.nextZ,a--),o?o.nextZ=n:t=n,n.prevZ=o,o=n;r=i}o.nextZ=null,u*=2}while(s>1);return t}function m(t,e,r,i,n){return t=32767*(t-r)/n,e=32767*(e-i)/n,t=16711935&(t|t<<8),t=252645135&(t|t<<4),t=858993459&(t|t<<2),t=1431655765&(t|t<<1),e=16711935&(e|e<<8),e=252645135&(e|e<<4),e=858993459&(e|e<<2),e=1431655765&(e|e<<1),t|e<<1}function y(t){var e=t,r=t;do e.x=0&&(t-s)*(i-a)-(r-s)*(e-a)>=0&&(r-s)*(o-a)-(n-s)*(i-a)>=0}function b(t,e){return T(t,e)||t.next.i!==e.i&&t.prev.i!==e.i&&!S(t,e)&&w(t,e)&&w(e,t)&&C(t,e)}function _(t,e,r){return(e.y-t.y)*(r.x-e.x)-(e.x-t.x)*(r.y-e.y)}function T(t,e){return t.x===e.x&&t.y===e.y}function E(t,e,r,i){return _(t,e,r)>0!=_(t,e,i)>0&&_(r,i,t)>0!=_(r,i,e)>0}function S(t,e){var r=t;do{if(r.i!==t.i&&r.next.i!==t.i&&r.i!==e.i&&r.next.i!==e.i&&E(r,r.next,t,e))return!0;r=r.next}while(r!==t);return!1}function w(t,e){return _(t.prev,t,t.next)<0?_(t,e,t.next)>=0&&_(t,t.prev,e)>=0:_(t,e,t.prev)<0||_(t,t.next,e)<0}function C(t,e){var r=t,i=!1,n=(t.x+e.x)/2,o=(t.y+e.y)/2;do r.y>o!=r.next.y>o&&n<(r.next.x-r.x)*(o-r.y)/(r.next.y-r.y)+r.x&&(i=!i),r=r.next;while(r!==t);return i}function A(t,e){var r=new O(t.i,t.x,t.y),i=new O(e.i,e.x,e.y),n=t.next,o=e.prev;return t.next=e,e.prev=t,r.next=n,n.prev=r,i.next=r,r.prev=i,o.next=i,i.prev=o,i}function M(t,e,r,i){var n=new O(t,e,r);return i?(n.next=i.next,n.prev=i,i.next.prev=n,i.next=n):(n.prev=n,n.next=n),n}function R(t){t.next.prev=t.prev,t.prev.next=t.next,t.prevZ&&(t.prevZ.nextZ=t.nextZ),t.nextZ&&(t.nextZ.prevZ=t.prevZ)}function O(t,e,r){this.i=t,this.x=e,this.y=r,this.prev=null,this.next=null,this.z=null,this.prevZ=null,this.nextZ=null,this.steiner=!1}e.exports=i},{}],25:[function(t,e,r){"use strict";function i(t,e,r){this.fn=t,this.context=e,this.once=r||!1}function n(){}var o="function"!=typeof Object.create?"~":!1;n.prototype._events=void 0,n.prototype.listeners=function(t,e){var r=o?o+t:t,i=this._events&&this._events[r];if(e)return!!i;if(!i)return[];if(i.fn)return[i.fn];for(var n=0,s=i.length,a=new Array(s);s>n;n++)a[n]=i[n].fn;return a},n.prototype.emit=function(t,e,r,i,n,s){var a=o?o+t:t;if(!this._events||!this._events[a])return!1;var h,u,l=this._events[a],c=arguments.length;if("function"==typeof l.fn){switch(l.once&&this.removeListener(t,l.fn,void 0,!0),c){case 1:return l.fn.call(l.context),!0;case 2:return l.fn.call(l.context,e),!0;case 3:return l.fn.call(l.context,e,r),!0;case 4:return l.fn.call(l.context,e,r,i),!0;case 5:return l.fn.call(l.context,e,r,i,n),!0;case 6:return l.fn.call(l.context,e,r,i,n,s),!0}for(u=1,h=new Array(c-1);c>u;u++)h[u-1]=arguments[u];l.fn.apply(l.context,h)}else{var p,d=l.length;for(u=0;d>u;u++)switch(l[u].once&&this.removeListener(t,l[u].fn,void 0,!0),c){case 1:l[u].fn.call(l[u].context);break;case 2:l[u].fn.call(l[u].context,e);break;case 3:l[u].fn.call(l[u].context,e,r);break;default:if(!h)for(p=1,h=new Array(c-1);c>p;p++)h[p-1]=arguments[p];l[u].fn.apply(l[u].context,h)}}return!0},n.prototype.on=function(t,e,r){var n=new i(e,r||this),s=o?o+t:t;return this._events||(this._events=o?{}:Object.create(null)),this._events[s]?this._events[s].fn?this._events[s]=[this._events[s],n]:this._events[s].push(n):this._events[s]=n,this},n.prototype.once=function(t,e,r){var n=new i(e,r||this,!0),s=o?o+t:t;return this._events||(this._events=o?{}:Object.create(null)),this._events[s]?this._events[s].fn?this._events[s]=[this._events[s],n]:this._events[s].push(n):this._events[s]=n,this},n.prototype.removeListener=function(t,e,r,i){var n=o?o+t:t;if(!this._events||!this._events[n])return this;var s=this._events[n],a=[];if(e)if(s.fn)(s.fn!==e||i&&!s.once||r&&s.context!==r)&&a.push(s);else for(var h=0,u=s.length;u>h;h++)(s[h].fn!==e||i&&!s[h].once||r&&s[h].context!==r)&&a.push(s[h]);return a.length?this._events[n]=1===a.length?a[0]:a:delete this._events[n],this},n.prototype.removeAllListeners=function(t){return this._events?(t?delete this._events[o?o+t:t]:this._events=o?{}:Object.create(null),this):this},n.prototype.off=n.prototype.removeListener,n.prototype.addListener=n.prototype.on,n.prototype.setMaxListeners=function(){return this},n.prefixed=o,"undefined"!=typeof e&&(e.exports=n)},{}],26:[function(t,e,r){"use strict";function i(t){if(null===t||void 0===t)throw new TypeError("Object.assign cannot be called with null or undefined");return Object(t)}var n=Object.prototype.hasOwnProperty,o=Object.prototype.propertyIsEnumerable;e.exports=Object.assign||function(t,e){for(var r,s,a=i(t),h=1;h=t.length&&r())}if(r=r||function(){},!t.length)return r();var o=0;u(t,function(t){e(t,i(n))})},s.forEach=s.each,s.eachSeries=function(t,e,r){if(r=r||function(){},!t.length)return r();var i=0,n=function(){e(t[i],function(e){e?(r(e),r=function(){}):(i+=1,i>=t.length?r():n())})};n()},s.forEachSeries=s.eachSeries,s.eachLimit=function(t,e,r,i){var n=d(e);n.apply(null,[t,r,i])},s.forEachLimit=s.eachLimit;var d=function(t){return function(e,r,i){if(i=i||function(){},!e.length||0>=t)return i();var n=0,o=0,s=0;!function a(){if(n>=e.length)return i();for(;t>s&&o=e.length?i():a())})}()}},f=function(t){return function(){var e=Array.prototype.slice.call(arguments);return t.apply(null,[s.each].concat(e))}},v=function(t,e){return function(){var r=Array.prototype.slice.call(arguments);return e.apply(null,[d(t)].concat(r))}},g=function(t){return function(){var e=Array.prototype.slice.call(arguments);return t.apply(null,[s.eachSeries].concat(e))}},m=function(t,e,r,i){if(e=l(e,function(t,e){return{index:e,value:t}}),i){var n=[];t(e,function(t,e){r(t.value,function(r,i){n[t.index]=i,e(r)})},function(t){i(t,n)})}else t(e,function(t,e){r(t.value,function(t){e(t)})})};s.map=f(m),s.mapSeries=g(m),s.mapLimit=function(t,e,r,i){return y(e)(t,r,i)};var y=function(t){return v(t,m)};s.reduce=function(t,e,r,i){s.eachSeries(t,function(t,i){r(e,t,function(t,r){e=r,i(t)})},function(t){i(t,e)})},s.inject=s.reduce,s.foldl=s.reduce,s.reduceRight=function(t,e,r,i){var n=l(t,function(t){return t}).reverse();s.reduce(n,e,r,i)},s.foldr=s.reduceRight;var x=function(t,e,r,i){var n=[];e=l(e,function(t,e){return{index:e,value:t}}),t(e,function(t,e){r(t.value,function(r){r&&n.push(t),e()})},function(t){i(l(n.sort(function(t,e){return t.index-e.index}),function(t){return t.value}))})};s.filter=f(x),s.filterSeries=g(x),s.select=s.filter,s.selectSeries=s.filterSeries;var b=function(t,e,r,i){var n=[];e=l(e,function(t,e){return{index:e,value:t}}),t(e,function(t,e){r(t.value,function(r){r||n.push(t),e()})},function(t){i(l(n.sort(function(t,e){return t.index-e.index}),function(t){return t.value}))})};s.reject=f(b),s.rejectSeries=g(b);var _=function(t,e,r,i){t(e,function(t,e){r(t,function(r){r?(i(t),i=function(){}):e()})},function(t){i()})};s.detect=f(_),s.detectSeries=g(_),s.some=function(t,e,r){s.each(t,function(t,i){e(t,function(t){t&&(r(!0),r=function(){}),i()})},function(t){r(!1)})},s.any=s.some,s.every=function(t,e,r){s.each(t,function(t,i){e(t,function(t){t||(r(!1),r=function(){}),i()})},function(t){r(!0)})},s.all=s.every,s.sortBy=function(t,e,r){s.map(t,function(t,r){e(t,function(e,i){e?r(e):r(null,{value:t,criteria:i})})},function(t,e){if(t)return r(t);var i=function(t,e){var r=t.criteria,i=e.criteria;return i>r?-1:r>i?1:0};r(null,l(e.sort(i),function(t){return t.value}))})},s.auto=function(t,e){e=e||function(){};var r=p(t),i=r.length;if(!i)return e();var n={},o=[],a=function(t){o.unshift(t)},l=function(t){for(var e=0;ei;){var o=i+(n-i+1>>>1);r(e,t[o])>=0?i=o:n=o-1}return i}function n(t,e,n,o){return t.started||(t.started=!0),h(e)||(e=[e]),0==e.length?s.setImmediate(function(){t.drain&&t.drain()}):void u(e,function(e){var a={data:e,priority:n,callback:"function"==typeof o?o:null};t.tasks.splice(i(t.tasks,a,r)+1,0,a),t.saturated&&t.tasks.length===t.concurrency&&t.saturated(),s.setImmediate(t.process)})}var o=s.queue(t,e);return o.push=function(t,e,r){n(o,t,e,r)},delete o.unshift,o},s.cargo=function(t,e){var r=!1,i=[],n={tasks:i,payload:e,saturated:null,empty:null,drain:null,drained:!0,push:function(t,r){h(t)||(t=[t]),u(t,function(t){i.push({data:t,callback:"function"==typeof r?r:null}),n.drained=!1,n.saturated&&i.length===e&&n.saturated()}),s.setImmediate(n.process)},process:function o(){if(!r){if(0===i.length)return n.drain&&!n.drained&&n.drain(),void(n.drained=!0);var s="number"==typeof e?i.splice(0,e):i.splice(0,i.length),a=l(s,function(t){return t.data});n.empty&&n.empty(),r=!0,t(a,function(){r=!1;var t=arguments;u(s,function(e){e.callback&&e.callback.apply(null,t)}),o()})}},length:function(){return i.length},running:function(){return r}};return n};var S=function(t){return function(e){var r=Array.prototype.slice.call(arguments,1);e.apply(null,r.concat([function(e){var r=Array.prototype.slice.call(arguments,1);"undefined"!=typeof console&&(e?console.error&&console.error(e):console[t]&&u(r,function(e){console[t](e)}))}]))}};s.log=S("log"),s.dir=S("dir"),s.memoize=function(t,e){var r={},i={};e=e||function(t){return t};var n=function(){var n=Array.prototype.slice.call(arguments),o=n.pop(),a=e.apply(null,n);a in r?s.nextTick(function(){o.apply(null,r[a])}):a in i?i[a].push(o):(i[a]=[o],t.apply(null,n.concat([function(){r[a]=arguments;var t=i[a];delete i[a];for(var e=0,n=t.length;n>e;e++)t[e].apply(null,arguments)}])))};return n.memo=r,n.unmemoized=t,n},s.unmemoize=function(t){return function(){return(t.unmemoized||t).apply(null,arguments)}},s.times=function(t,e,r){for(var i=[],n=0;t>n;n++)i.push(n);return s.map(i,e,r)},s.timesSeries=function(t,e,r){for(var i=[],n=0;t>n;n++)i.push(n);return s.mapSeries(i,e,r)},s.seq=function(){var t=arguments;return function(){var e=this,r=Array.prototype.slice.call(arguments),i=r.pop();s.reduce(t,r,function(t,r,i){r.apply(e,t.concat([function(){var t=arguments[0],e=Array.prototype.slice.call(arguments,1);i(t,e)}]))},function(t,r){i.apply(e,[t].concat(r))})}},s.compose=function(){return s.seq.apply(null,Array.prototype.reverse.call(arguments))};var w=function(t,e){var r=function(){var r=this,i=Array.prototype.slice.call(arguments),n=i.pop();return t(e,function(t,e){t.apply(r,i.concat([e]))},n)};if(arguments.length>2){var i=Array.prototype.slice.call(arguments,2);return r.apply(this,i)}return r};s.applyEach=f(w),s.applyEachSeries=g(w),s.forever=function(t,e){function r(i){if(i){if(e)return e(i);throw i}t(r)}r()},"undefined"!=typeof r&&r.exports?r.exports=s:"undefined"!=typeof t&&t.amd?t([],function(){return s}):n.async=s}()}).call(this,e("_process"))},{_process:18}],28:[function(t,e,r){function i(t,e){a.call(this),e=e||10,this.baseUrl=t||"",this.progress=0,this.loading=!1,this._progressChunk=0,this._beforeMiddleware=[],this._afterMiddleware=[],this._boundLoadResource=this._loadResource.bind(this),this._boundOnLoad=this._onLoad.bind(this),this._buffer=[],this._numToLoad=0,this._queue=n.queue(this._boundLoadResource,e),this.resources={}}var n=t("async"),o=t("url"),s=t("./Resource"),a=t("eventemitter3");i.prototype=Object.create(a.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.add=i.prototype.enqueue=function(t,e,r,i){if(Array.isArray(t)){for(var n=0;n0)if(this.xhrType===i.XHR_RESPONSE_TYPE.TEXT)this.data=t.responseText;else if(this.xhrType===i.XHR_RESPONSE_TYPE.JSON)try{this.data=JSON.parse(t.responseText),this.isJson=!0}catch(r){this.error=new Error("Error trying to parse loaded json:",r)}else if(this.xhrType===i.XHR_RESPONSE_TYPE.DOCUMENT)try{if(window.DOMParser){var n=new DOMParser;this.data=n.parseFromString(t.responseText,"text/xml")}else{var o=document.createElement("div");o.innerHTML=t.responseText,this.data=o}this.isXml=!0}catch(r){this.error=new Error("Error trying to parse loaded xml:",r)}else this.data=t.response||t.responseText;else this.error=new Error("["+t.status+"]"+t.statusText+":"+t.responseURL);this.complete()},i.prototype._determineCrossOrigin=function(t,e){if(0===t.indexOf("data:"))return"";e=e||window.location,u||(u=document.createElement("a")),u.href=t,t=a.parse(u.href);var r=!t.port&&""===e.port||t.port===e.port;return t.hostname===e.hostname&&r&&t.protocol===e.protocol?"":"anonymous"},i.prototype._determineXhrType=function(){return i._xhrTypeMap[this._getExtension()]||i.XHR_RESPONSE_TYPE.TEXT},i.prototype._determineLoadType=function(){return i._loadTypeMap[this._getExtension()]||i.LOAD_TYPE.XHR},i.prototype._getExtension=function(){var t,e=this.url;if(this.isDataUrl){var r=e.indexOf("/");t=e.substring(r+1,e.indexOf(";",r))}else{var i=e.indexOf("?");-1!==i&&(e=e.substring(0,i)),t=e.substring(e.lastIndexOf(".")+1)}return t},i.prototype._getMimeFromXhrType=function(t){switch(t){case i.XHR_RESPONSE_TYPE.BUFFER:return"application/octet-binary";case i.XHR_RESPONSE_TYPE.BLOB:return"application/blob";case i.XHR_RESPONSE_TYPE.DOCUMENT:return"application/xml";case i.XHR_RESPONSE_TYPE.JSON:return"application/json";case i.XHR_RESPONSE_TYPE.DEFAULT:case i.XHR_RESPONSE_TYPE.TEXT:default:return"text/plain"}},i.LOAD_TYPE={XHR:1,IMAGE:2,AUDIO:3,VIDEO:4},i.XHR_READY_STATE={UNSENT:0,OPENED:1,HEADERS_RECEIVED:2,LOADING:3,DONE:4},i.XHR_RESPONSE_TYPE={DEFAULT:"text",BUFFER:"arraybuffer",BLOB:"blob",DOCUMENT:"document",JSON:"json",TEXT:"text"},i._loadTypeMap={gif:i.LOAD_TYPE.IMAGE,png:i.LOAD_TYPE.IMAGE,bmp:i.LOAD_TYPE.IMAGE,jpg:i.LOAD_TYPE.IMAGE,jpeg:i.LOAD_TYPE.IMAGE,tif:i.LOAD_TYPE.IMAGE,tiff:i.LOAD_TYPE.IMAGE,webp:i.LOAD_TYPE.IMAGE,tga:i.LOAD_TYPE.IMAGE},i._xhrTypeMap={xhtml:i.XHR_RESPONSE_TYPE.DOCUMENT,html:i.XHR_RESPONSE_TYPE.DOCUMENT,htm:i.XHR_RESPONSE_TYPE.DOCUMENT,xml:i.XHR_RESPONSE_TYPE.DOCUMENT,tmx:i.XHR_RESPONSE_TYPE.DOCUMENT,tsx:i.XHR_RESPONSE_TYPE.DOCUMENT,svg:i.XHR_RESPONSE_TYPE.DOCUMENT,gif:i.XHR_RESPONSE_TYPE.BLOB,png:i.XHR_RESPONSE_TYPE.BLOB,bmp:i.XHR_RESPONSE_TYPE.BLOB,jpg:i.XHR_RESPONSE_TYPE.BLOB,jpeg:i.XHR_RESPONSE_TYPE.BLOB,tif:i.XHR_RESPONSE_TYPE.BLOB,tiff:i.XHR_RESPONSE_TYPE.BLOB,webp:i.XHR_RESPONSE_TYPE.BLOB,tga:i.XHR_RESPONSE_TYPE.BLOB,json:i.XHR_RESPONSE_TYPE.JSON,text:i.XHR_RESPONSE_TYPE.TEXT,txt:i.XHR_RESPONSE_TYPE.TEXT},i.setExtensionLoadType=function(t,e){o(i._loadTypeMap,t,e)},i.setExtensionXhrType=function(t,e){o(i._xhrTypeMap,t,e)}},{eventemitter3:25,url:23}],30:[function(t,e,r){e.exports={_keyStr:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",encodeBinary:function(t){for(var e,r="",i=new Array(4),n=0,o=0,s=0;n>2,i[1]=(3&e[0])<<4|e[1]>>4,i[2]=(15&e[1])<<2|e[2]>>6,i[3]=63&e[2],s=n-(t.length-1)){case 2:i[3]=64,i[2]=64;break;case 1:i[3]=64}for(o=0;o","Richard Davey "],main:"./src/index.js",homepage:"http://goodboydigital.com/",bugs:"https://github.com/pixijs/pixi.js/issues",license:"MIT",repository:{type:"git",url:"https://github.com/pixijs/pixi.js.git"},scripts:{start:"gulp && gulp watch",test:"gulp && testem ci",build:"gulp",docs:"jsdoc -c ./gulp/util/jsdoc.conf.json -R README.md"},files:["bin/","src/","CONTRIBUTING.md","LICENSE","package.json","README.md"],dependencies:{async:"^1.5.0",brfs:"^1.4.1",earcut:"^2.0.7",eventemitter3:"^1.1.1","object-assign":"^4.0.1","pixi-gl-core":"git+https://github.com/GoodBoyDigital/pixi-gl-core.git","resource-loader":"^1.6.4"},devDependencies:{browserify:"^11.1.0",chai:"^3.2.0",del:"^2.0.2",gulp:"^3.9.0","gulp-cached":"^1.1.0","gulp-concat":"^2.6.0","gulp-debug":"^2.1.0","gulp-header":"^1.7.1","gulp-jshint":"^1.11.2","gulp-mirror":"^0.4.0","gulp-plumber":"^1.0.1","gulp-rename":"^1.2.2","gulp-sourcemaps":"^1.5.2","gulp-uglify":"^1.4.1","gulp-util":"^3.0.6","jaguarjs-jsdoc":"git+https://github.com/davidshimjs/jaguarjs-jsdoc.git",jsdoc:"^3.3.2","jshint-summary":"^0.4.0",minimist:"^1.2.0",mocha:"^2.3.2","require-dir":"^0.3.0","run-sequence":"^1.1.2",testem:"^0.9.4","vinyl-buffer":"^1.0.0","vinyl-source-stream":"^1.1.0",watchify:"^3.4.0"},browserify:{transform:["brfs"]}}},{}],35:[function(t,e,r){function i(t){var e=document.createElement("div");e.style.width="100px",e.style.height="100px",e.style.position="absolute",e.style.top=0,e.style.left=0,e.style.zIndex=2,this.div=e,this.pool=[],this.renderId=0,this.debug=!1,this.renderer=t,this.children=[],this._onKeyDown=this._onKeyDown.bind(this),this._onMouseMove=this._onMouseMove.bind(this),this.isActive=!1,window.addEventListener("keydown",this._onKeyDown,!1)}var n=t("../core");Object.assign(n.DisplayObject.prototype,t("./accessibleTarget")),i.prototype.constructor=i,e.exports=i,i.prototype.activate=function(){this.isActive||(this.isActive=!0,window.document.addEventListener("mousemove",this._onMouseMove,!0),window.removeEventListener("keydown",this._onKeyDown,!1),this.renderer.on("postrender",this.update,this),this.renderer.view.parentNode.appendChild(this.div))},i.prototype.deactivate=function(){this.isActive&&(this.isActive=!1,window.document.removeEventListener("mousemove",this._onMouseMove),window.addEventListener("keydown",this._onKeyDown,!1),this.renderer.off("postrender",this.update),this.div.parentNode.removeChild(this.div))},i.prototype.updateAccessibleObjects=function(t){if(t.visible){t.accessible&&t.interactive&&(t._accessibleActive||this.addChild(t),t.renderId=this.renderId);for(var e=t.children,r=e.length-1;r>=0;r--)this.updateAccessibleObjects(e[r])}},i.prototype.update=function(){this.updateAccessibleObjects(this.renderer._lastObjectRendered);var t=this.renderer.view.getBoundingClientRect(),e=t.width/this.renderer.width,r=t.height/this.renderer.height,i=this.div;i.style.left=t.left+"px",i.style.top=t.top+"px",i.style.width=this.renderer.width+"px",i.style.height=this.renderer.height+"px";for(var o=0;othis.renderer.width&&(t.width=this.renderer.width-t.x),t.y+t.height>this.renderer.height&&(t.height=this.renderer.height-t.y)},i.prototype.addChild=function(t){var e=this.pool.pop();e||(e=document.createElement("button"),e.style.width="100px",e.style.height="100px",e.style.backgroundColor=this.debug?"rgba(255,0,0,0.5)":"transparent",e.style.position="absolute",e.style.zIndex=2,e.style.borderStyle="none",e.addEventListener("click",this._onClick.bind(this)),e.addEventListener("focus",this._onFocus.bind(this)),e.addEventListener("focusout",this._onFocusOut.bind(this))),e.title=t.accessibleTitle||"displayObject "+this.tabIndex,t._accessibleActive=!0,t._accessibleDiv=e,e.displayObject=t,this.children.push(t),this.div.appendChild(t._accessibleDiv),t._accessibleDiv.tabIndex=t.tabIndex},i.prototype._onClick=function(t){var e=this.renderer.plugins.interaction;e.dispatchEvent(t.target.displayObject,"click",e.eventData)},i.prototype._onFocus=function(t){var e=this.renderer.plugins.interaction;e.dispatchEvent(t.target.displayObject,"mouseover",e.eventData)},i.prototype._onFocusOut=function(t){var e=this.renderer.plugins.interaction;e.dispatchEvent(t.target.displayObject,"mouseout",e.eventData)},i.prototype._onKeyDown=function(t){9===t.keyCode&&this.activate()},i.prototype._onMouseMove=function(){this.deactivate()},i.prototype.destroy=function(){this.div=null;for(var t=0;t1)for(var r=0;e>r;r++)this.addChild(arguments[r]);else t.parent&&t.parent.removeChild(t),t.parent=this,this.children.push(t),this.onChildrenChange(this.children.length-1),t.emit("added",this);return t},i.prototype.addChildAt=function(t,e){if(e>=0&&e<=this.children.length)return t.parent&&t.parent.removeChild(t),t.parent=this,this.children.splice(e,0,t),this.onChildrenChange(e),t.emit("added",this),t;throw new Error(t+"addChildAt: The index "+e+" supplied is out of bounds "+this.children.length)},i.prototype.swapChildren=function(t,e){if(t!==e){var r=this.getChildIndex(t),i=this.getChildIndex(e);if(0>r||0>i)throw new Error("swapChildren: Both the supplied DisplayObjects must be children of the caller.");this.children[r]=e,this.children[i]=t,this.onChildrenChange(i>r?r:i)}},i.prototype.getChildIndex=function(t){var e=this.children.indexOf(t);if(-1===e)throw new Error("The supplied DisplayObject must be a child of the caller");return e},i.prototype.setChildIndex=function(t,e){if(0>e||e>=this.children.length)throw new Error("The supplied index is out of bounds");var r=this.getChildIndex(t);o.removeItems(this.children,r,1),this.children.splice(e,0,t),this.onChildrenChange(e)},i.prototype.getChildAt=function(t){if(0>t||t>=this.children.length)throw new Error("getChildAt: Supplied index "+t+" does not exist in the child list, or the supplied DisplayObject is not a child of the caller");return this.children[t]},i.prototype.removeChild=function(t){var e=arguments.length;if(e>1)for(var r=0;e>r;r++)this.removeChild(arguments[r]);else{var i=this.children.indexOf(t);if(-1===i)return;t.parent=null,o.removeItems(this.children,i,1),this.onChildrenChange(i),t.emit("removed",this)}return t},i.prototype.removeChildAt=function(t){var e=this.getChildAt(t);return e.parent=null,o.removeItems(this.children,t,1),this.onChildrenChange(t),e.emit("removed",this),e},i.prototype.removeChildren=function(t,e){var r,i,n=t||0,o="number"==typeof e?e:this.children.length,s=o-n;if(s>0&&o>=s){for(r=this.children.splice(n,s),i=0;it;++t)this.children[t].updateTransform();this.dirty=!1}},i.prototype.containerUpdateTransform=i.prototype.updateTransform,i.prototype.getBounds=function(){if(!this._currentBounds){if(0===this.children.length)return n.Rectangle.EMPTY;for(var t,e,r,i=1/0,o=1/0,s=-(1/0),a=-(1/0),h=!1,u=0,l=this.children.length;l>u;++u){var c=this.children[u];c.visible&&(h=!0,t=this.children[u].getBounds(),i=ie?s:e,a=a>r?a:r)}if(!h)return n.Rectangle.EMPTY;var p=this._bounds;p.x=i,p.y=o,p.width=s-i,p.height=a-o,this._currentBounds=p}return this._currentBounds},i.prototype.containerGetBounds=i.prototype.getBounds,i.prototype.getLocalBounds=function(){var t=this.worldTransform;this.worldTransform=n.Matrix.IDENTITY;for(var e=0,r=this.children.length;r>e;++e)this.children[e].updateTransform();return this.worldTransform=t,this._currentBounds=null,this.getBounds(n.Matrix.IDENTITY)},i.prototype.renderWebGL=function(t){if(this.visible&&!(this.worldAlpha<=0)&&this.renderable){var e,r;if(this._mask||this._filters){for(t.currentRenderer.flush(),this._filters&&this._filters.length&&t.filterManager.pushFilter(this,this._filters),this._mask&&t.maskManager.pushMask(this,this._mask),t.currentRenderer.start(),this._renderWebGL(t),e=0,r=this.children.length;r>e;e++)this.children[e].renderWebGL(t);t.currentRenderer.flush(),this._mask&&t.maskManager.popMask(this,this._mask),this._filters&&t.filterManager.popFilter(),t.currentRenderer.start()}else for(this._renderWebGL(t),e=0,r=this.children.length;r>e;++e)this.children[e].renderWebGL(t)}},i.prototype._renderWebGL=function(t){},i.prototype._renderCanvas=function(t){},i.prototype.renderCanvas=function(t){if(this.visible&&!(this.alpha<=0)&&this.renderable){this._mask&&t.maskManager.pushMask(this._mask,t),this._renderCanvas(t);for(var e=0,r=this.children.length;r>e;++e)this.children[e].renderCanvas(t);this._mask&&t.maskManager.popMask(t)}},i.prototype.destroy=function(t){if(s.prototype.destroy.call(this),t)for(var e=0,r=this.children.length;r>e;++e)this.children[e].destroy(t);this.removeChildren(),this.children=null}},{"../math":48,"../textures/RenderTexture":91,"../utils":98,"./DisplayObject":40}],40:[function(t,e,r){function i(){s.call(this),this.position=new n.Point,this.scale=new n.Point(1,1),this.pivot=new n.Point(0,0),this.skew=new n.Point(0,0),this._rotation=0,this.alpha=1,this.visible=!0,this.renderable=!0,this.parent=null,this.worldAlpha=1,this.worldTransform=new n.Matrix,this.localTransform=new n.Matrix,this.filterArea=null,this._sr=0,this._cr=1,this._bounds=new n.Rectangle(0,0,1,1),this._currentBounds=null,this._mask=null,this.dirty=!0}var n=t("../math"),o=t("../textures/RenderTexture"),s=t("eventemitter3"),a=(t("../const"),new n.Matrix),h={worldTransform:new n.Matrix,worldAlpha:1,children:[]};i.prototype=Object.create(s.prototype),i.prototype.constructor=i,e.exports=i,Object.defineProperties(i.prototype,{x:{get:function(){return this.position.x},set:function(t){this.position.x=t,this.dirty=!0}},y:{get:function(){return this.position.y},set:function(t){this.position.y=t,this.dirty=!0}},scaleX:{get:function(){return this.scale.x},set:function(t){this.scale.x=t,this.dirty=!0}},scaleY:{get:function(){return this.scale.y},set:function(t){this.scale.y=t,this.dirty=!0}},rotation:{get:function(){return this._rotation},set:function(t){this._rotation=t,this.dirty=!0,this._sr=Math.sin(t),this._cr=Math.cos(t)}},scaleY:{get:function(){return this.scale.y},set:function(t){this.scale.y=t,this.dirty=!0}},worldVisible:{get:function(){var t=this;do{if(!t.visible)return!1;t=t.parent}while(t);return!0}},mask:{get:function(){return this._mask},set:function(t){this._mask&&(this._mask.renderable=!0),this._mask=t,this._mask&&(this._mask.renderable=!1)}},filters:{get:function(){return this._filters&&this._filters.slice()},set:function(t){this._filters=t&&t.slice()}}}),i.prototype.updateTransform=function(){var t=this.parent.worldTransform,e=this.worldTransform,r=this.localTransform;this.dirty&&(r.a=this._cr*this.scale.x,r.b=this._sr*this.scale.x,r.c=-this._sr*this.scale.y,r.d=this._cr*this.scale.y,r.tx=this.position.x-(this.pivot.x*r.a+this.pivot.y*r.c),r.ty=this.position.y-(this.pivot.x*r.b+this.pivot.y*r.d)),(this.dirty||this.parent.dirty)&&(e.a=r.a*t.a+r.b*t.c,e.b=r.a*t.b+r.b*t.d,e.c=r.c*t.a+r.d*t.c,e.d=r.c*t.b+r.d*t.d,e.tx=r.tx*t.a+r.ty*t.c+t.tx,e.ty=r.tx*t.b+r.ty*t.d+t.ty,this._currentBounds=null),this.worldAlpha=this.alpha*this.parent.worldAlpha},i.prototype.displayObjectUpdateTransform=i.prototype.updateTransform,i.prototype.getBounds=function(t){return n.Rectangle.EMPTY},i.prototype.getLocalBounds=function(){return this.getBounds(n.Matrix.IDENTITY)},i.prototype.toGlobal=function(t){return this.parent?this.displayObjectUpdateTransform():(this.parent=h,this.displayObjectUpdateTransform(),this.parent=null),this.worldTransform.apply(t)},i.prototype.toLocal=function(t,e,r){return e&&(t=e.toGlobal(t)),this.parent?this.displayObjectUpdateTransform():(this.parent=h,this.displayObjectUpdateTransform(),this.parent=null),this.worldTransform.applyInverse(t,r)},i.prototype.renderWebGL=function(t){},i.prototype.renderCanvas=function(t){},i.prototype.generateTexture=function(t,e,r){var i=this.getLocalBounds(),n=new o(t,0|i.width,0|i.height,e,r);return a.tx=-i.x,a.ty=-i.y,n.render(this,a),n},i.prototype.setParent=function(t){if(!t||!t.addChild)throw new Error("setParent: Argument must be a Container");return t.addChild(this),t},i.prototype.setTransform=function(t,e,r,i,n,o,s,a,h){return this.position.x=t||0,this.position.y=e||0,this.scale.x=r?r:1,this.scale.y=i?i:1,this.rotation=n||0,this.skew.x=o||0,this.skew.y=s||0,this.pivot.x=a||0,this.pivot.y=h||0,this.dirty=!0,this},i.prototype.destroy=function(){this.position=null,this.scale=null,this.pivot=null,this.skew=null,this.parent=null,this._bounds=null,this._currentBounds=null,this._mask=null,this.worldTransform=null,this.filterArea=null}},{"../const":38,"../math":48,"../textures/RenderTexture":91,eventemitter3:25}],41:[function(t,e,r){function i(){n.call(this),this.fillAlpha=1,this.lineWidth=0,this.lineColor=0,this.graphicsData=[],this.tint=16777215,this._prevTint=16777215,this.blendMode=l.BLEND_MODES.NORMAL,this.currentPath=null,this._webGL={},this.isMask=!1,this.boundsPadding=0,this._localBounds=new u.Rectangle(0,0,1,1),this.dirty=!0,this.glDirty=!1,this.boundsDirty=!0,this.cachedSpriteDirty=!1}var n=t("../display/Container"),o=t("../textures/Texture"),s=t("../renderers/canvas/utils/CanvasBuffer"),a=t("../renderers/canvas/utils/CanvasGraphics"),h=t("./GraphicsData"),u=t("../math"),l=t("../const"),c=new u.Point;i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.clone=function(){var t=new i;t.renderable=this.renderable,t.fillAlpha=this.fillAlpha,t.lineWidth=this.lineWidth,t.lineColor=this.lineColor,t.tint=this.tint,t.blendMode=this.blendMode,t.isMask=this.isMask,t.boundsPadding=this.boundsPadding,t.dirty=!0,t.glDirty=!0,t.cachedSpriteDirty=this.cachedSpriteDirty;for(var e=0;e=c;++c)l=c/s,n=h+(t-h)*l,o=u+(e-u)*l,a.push(n+(t+(r-t)*l-n)*l,o+(e+(i-e)*l-o)*l);return this.dirty=this.boundsDirty=!0,this},i.prototype.bezierCurveTo=function(t,e,r,i,n,o){this.currentPath?0===this.currentPath.shape.points.length&&(this.currentPath.shape.points=[0,0]):this.moveTo(0,0);for(var s,a,h,u,l,c=20,p=this.currentPath.shape.points,d=p[p.length-2],f=p[p.length-1],v=0,g=1;c>=g;++g)v=g/c,s=1-v,a=s*s,h=a*s,u=v*v,l=u*v,p.push(h*d+3*a*v*t+3*s*u*r+l*n,h*f+3*a*v*e+3*s*u*i+l*o);return this.dirty=this.boundsDirty=!0,this},i.prototype.arcTo=function(t,e,r,i,n){this.currentPath?0===this.currentPath.shape.points.length&&this.currentPath.shape.points.push(t,e):this.moveTo(t,e);var o=this.currentPath.shape.points,s=o[o.length-2],a=o[o.length-1],h=a-e,u=s-t,l=i-e,c=r-t,p=Math.abs(h*c-u*l);if(1e-8>p||0===n)(o[o.length-2]!==t||o[o.length-1]!==e)&&o.push(t,e);else{var d=h*h+u*u,f=l*l+c*c,v=h*l+u*c,g=n*Math.sqrt(d)/p,m=n*Math.sqrt(f)/p,y=g*v/d,x=m*v/f,b=g*c+m*u,_=g*l+m*h,T=u*(m+y),E=h*(m+y),S=c*(g+x),w=l*(g+x),C=Math.atan2(E-_,T-b),A=Math.atan2(w-_,S-b);this.arc(b+t,_+e,n,C,A,u*l>c*h)}return this.dirty=this.boundsDirty=!0,this},i.prototype.arc=function(t,e,r,i,n,o){if(o=o||!1,i===n)return this;!o&&i>=n?n+=2*Math.PI:o&&n>=i&&(i+=2*Math.PI);var s=o?-1*(i-n):n-i,a=40*Math.ceil(Math.abs(s)/(2*Math.PI));if(0===s)return this;var h=t+Math.cos(i)*r,u=e+Math.sin(i)*r;this.currentPath?this.currentPath.shape.points.push(h,u):this.moveTo(h,u);for(var l=this.currentPath.shape.points,c=s/(2*a),p=2*c,d=Math.cos(c),f=Math.sin(c),v=a-1,g=v%1/v,m=0;v>=m;m++){var y=m+g*m,x=c+i+p*y,b=Math.cos(x),_=-Math.sin(x);l.push((d*b+f*_)*r+t,(d*-_+f*b)*r+e)}return this.dirty=this.boundsDirty=!0,this},i.prototype.beginFill=function(t,e){return this.filling=!0,this.fillColor=t||0,this.fillAlpha=void 0===e?1:e,this.currentPath&&this.currentPath.shape.points.length<=2&&(this.currentPath.fill=this.filling,this.currentPath.fillColor=this.fillColor,this.currentPath.fillAlpha=this.fillAlpha),this},i.prototype.endFill=function(){return this.filling=!1,this.fillColor=null,this.fillAlpha=1,this},i.prototype.drawRect=function(t,e,r,i){return this.drawShape(new u.Rectangle(t,e,r,i)),this},i.prototype.drawRoundedRect=function(t,e,r,i,n){return this.drawShape(new u.RoundedRectangle(t,e,r,i,n)),this},i.prototype.drawCircle=function(t,e,r){return this.drawShape(new u.Circle(t,e,r)),this},i.prototype.drawEllipse=function(t,e,r,i){return this.drawShape(new u.Ellipse(t,e,r,i)),this},i.prototype.drawPolygon=function(t){var e=t,r=!0;if(e instanceof u.Polygon&&(r=e.closed,e=e.points),!Array.isArray(e)){e=new Array(arguments.length);for(var i=0;ig?g:S,S=S>y?y:S,S=S>b?b:S,w=w>m?m:w,w=w>x?x:w,w=w>_?_:w,T=g>T?g:T,T=y>T?y:T,T=b>T?b:T,E=m>E?m:E,E=x>E?x:E,E=_>E?_:E,this._bounds.x=S,this._bounds.width=T-S,this._bounds.y=w,this._bounds.height=E-w,this._currentBounds=this._bounds}return this._currentBounds},i.prototype.containsPoint=function(t){this.worldTransform.applyInverse(t,c);for(var e=this.graphicsData,r=0;rs?s:t,e=s+h>e?s+h:e,r=r>a?a:r,i=a+u>i?a+u:i;else if(d===l.SHAPES.CIRC)s=n.x,a=n.y,h=n.radius+f/2,u=n.radius+f/2,t=t>s-h?s-h:t,e=s+h>e?s+h:e,r=r>a-u?a-u:r,i=a+u>i?a+u:i;else if(d===l.SHAPES.ELIP)s=n.x,a=n.y,h=n.width+f/2,u=n.height+f/2,t=t>s-h?s-h:t,e=s+h>e?s+h:e,r=r>a-u?a-u:r,i=a+u>i?a+u:i;else{o=n.points;for(var v=0;vs-f?s-f:t,e=s+f>e?s+f:e,r=r>a-f?a-f:r,i=a+f>i?a+f:i}}else t=0,e=0,r=0,i=0;var g=this.boundsPadding;this._localBounds.x=t-g,this._localBounds.width=e-t+2*g,this._localBounds.y=r-g,this._localBounds.height=i-r+2*g},i.prototype.drawShape=function(t){this.currentPath&&this.currentPath.shape.points.length<=2&&this.graphicsData.pop(),this.currentPath=null;var e=new h(this.lineWidth,this.lineColor,this.lineAlpha,this.fillColor,this.fillAlpha,this.filling,t);return this.graphicsData.push(e),e.type===l.SHAPES.POLY&&(e.shape.closed=e.shape.closed||this.filling,this.currentPath=e),this.dirty=this.boundsDirty=!0,e},i.prototype.destroy=function(){n.prototype.destroy.apply(this,arguments);for(var t=0;ta;a++)e=s.data[a],1===s.data[a].mode?(r.stencilManager.pushStencil(t,e),i.uniform1f(r.shaderManager.complexPrimitiveShader.uniforms.alpha._location,t.worldAlpha*e.alpha),i.drawElements(i.TRIANGLE_FAN,4,i.UNSIGNED_SHORT,2*(e.indices.length-4)),r.stencilManager.popStencil(t,e)):(o=r.shaderManager.primitiveShader,r.shaderManager.setShader(o),i.uniformMatrix3fv(o.uniforms.translationMatrix._location,!1,t.worldTransform.toArray(!0)),i.uniformMatrix3fv(o.uniforms.projectionMatrix._location,!1,r.currentRenderTarget.projectionMatrix.toArray(!0)),i.uniform3fv(o.uniforms.tint._location,n.hex2rgb(t.tint)),i.uniform1f(o.uniforms.alpha._location,t.worldAlpha),i.bindBuffer(i.ARRAY_BUFFER,e.buffer),i.vertexAttribPointer(o.attributes.aVertexPosition,2,i.FLOAT,!1,24,0),i.vertexAttribPointer(o.attributes.aColor,4,i.FLOAT,!1,24,8),i.bindBuffer(i.ELEMENT_ARRAY_BUFFER,e.indexBuffer),i.drawElements(i.TRIANGLE_STRIP,e.indices.length,i.UNSIGNED_SHORT,0)),r.drawCount++},i.prototype.updateGraphics=function(t){var e=this.renderer.gl,r=t._webGL[e.id];r||(r=t._webGL[e.id]={lastIndex:0,data:[],gl:e}),t.dirty=!1;var i;if(t.clearDirty){for(t.clearDirty=!1,i=0;i=6)if(a.points.length<2*this.maximumSimplePolySize){o=this.switchMode(r,0);var h=this.buildPoly(a,o);h||(o=this.switchMode(r,1),this.buildComplexPoly(a,o))}else o=this.switchMode(r,1),this.buildComplexPoly(a,o);a.lineWidth>0&&(o=this.switchMode(r,0),this.buildLine(a,o))}else o=this.switchMode(r,0),a.type===s.SHAPES.RECT?this.buildRectangle(a,o):a.type===s.SHAPES.CIRC||a.type===s.SHAPES.ELIP?this.buildCircle(a,o):a.type===s.SHAPES.RREC&&this.buildRoundedRectangle(a,o);r.lastIndex++}for(i=0;i32e4||r.mode!==e||1===e)&&(r=this.graphicsDataPool.pop()||new u(t.gl),r.mode=e,t.data.push(r))):(r=this.graphicsDataPool.pop()||new u(t.gl),r.mode=e,t.data.push(r)),r.dirty=!0,r},i.prototype.buildRectangle=function(t,e){var r=t.shape,i=r.x,o=r.y,s=r.width,a=r.height;if(t.fill){var h=n.hex2rgb(t.fillColor),u=t.fillAlpha,l=h[0]*u,c=h[1]*u,p=h[2]*u,d=e.points,f=e.indices,v=d.length/6;d.push(i,o),d.push(l,c,p,u),d.push(i+s,o),d.push(l,c,p,u),d.push(i,o+a),d.push(l,c,p,u),d.push(i+s,o+a),d.push(l,c,p,u),f.push(v,v,v+1,v+2,v+3,v+3)}if(t.lineWidth){var g=t.points;t.points=[i,o,i+s,o,i+s,o+a,i,o+a,i,o],this.buildLine(t,e),t.points=g}},i.prototype.buildRoundedRectangle=function(t,e){var r=t.shape,i=r.x,o=r.y,s=r.width,a=r.height,h=r.radius,u=[];if(u.push(i,o+h),this.quadraticBezierCurve(i,o+a-h,i,o+a,i+h,o+a,u),this.quadraticBezierCurve(i+s-h,o+a,i+s,o+a,i+s,o+a-h,u),this.quadraticBezierCurve(i+s,o+h,i+s,o,i+s-h,o,u),this.quadraticBezierCurve(i+h,o,i,o,i,o+h+1e-10,u),t.fill){var c=n.hex2rgb(t.fillColor),p=t.fillAlpha,d=c[0]*p,f=c[1]*p,v=c[2]*p,g=e.points,m=e.indices,y=g.length/6,x=l(u,null,2),b=0;for(b=0;b=m;m++)g=m/f,h=a(t,r,g),u=a(e,i,g),l=a(r,n,g),c=a(i,o,g),p=a(h,l,g),d=a(u,c,g),v.push(p,d);return v},i.prototype.buildCircle=function(t,e){var r,i,o=t.shape,a=o.x,h=o.y;t.type===s.SHAPES.CIRC?(r=o.radius,i=o.radius):(r=o.width,i=o.height);var u=Math.floor(30*Math.sqrt(o.radius))||Math.floor(15*Math.sqrt(o.width+o.height)),l=2*Math.PI/u,c=0;if(t.fill){var p=n.hex2rgb(t.fillColor),d=t.fillAlpha,f=p[0]*d,v=p[1]*d,g=p[2]*d,m=e.points,y=e.indices,x=m.length/6;for(y.push(x),c=0;u+1>c;c++)m.push(a,h,f,v,g,d),m.push(a+Math.sin(l*c)*r,h+Math.cos(l*c)*i,f,v,g,d),y.push(x++,x++);y.push(x-1)}if(t.lineWidth){var b=t.points;for(t.points=[],c=0;u+1>c;c++)t.points.push(a+Math.sin(l*c)*r,h+Math.cos(l*c)*i);this.buildLine(t,e),t.points=b}},i.prototype.buildLine=function(t,e){var r=0,i=t.points;if(0!==i.length){var s=new o.Point(i[0],i[1]),a=new o.Point(i[i.length-2],i[i.length-1]);if(s.x===a.x&&s.y===a.y){i=i.slice(),i.pop(),i.pop(),a=new o.Point(i[i.length-2],i[i.length-1]);var h=a.x+.5*(s.x-a.x),u=a.y+.5*(s.y-a.y);i.unshift(h,u),i.push(h,u)}var l,c,p,d,f,v,g,m,y,x,b,_,T,E,S,w,C,A,M,R,O,D,P,F=e.points,L=e.indices,B=i.length/2,I=i.length,N=F.length/6,U=t.lineWidth/2,k=n.hex2rgb(t.lineColor),j=t.lineAlpha,G=k[0]*j,Y=k[1]*j,X=k[2]*j;for(p=i[0],d=i[1],f=i[2],v=i[3],y=-(d-v),x=p-f,P=Math.sqrt(y*y+x*x),y/=P,x/=P,y*=U,x*=U,F.push(p-y,d-x,G,Y,X,j),F.push(p+y,d+x,G,Y,X,j),r=1;B-1>r;r++)p=i[2*(r-1)],d=i[2*(r-1)+1],f=i[2*r],v=i[2*r+1],g=i[2*(r+1)],m=i[2*(r+1)+1],y=-(d-v),x=p-f,P=Math.sqrt(y*y+x*x),y/=P,x/=P,y*=U,x*=U,b=-(v-m),_=f-g,P=Math.sqrt(b*b+_*_),b/=P,_/=P,b*=U,_*=U,S=-x+d-(-x+v),w=-y+f-(-y+p),C=(-y+p)*(-x+v)-(-y+f)*(-x+d),A=-_+m-(-_+v),M=-b+f-(-b+g),R=(-b+g)*(-_+v)-(-b+f)*(-_+m),O=S*M-A*w,Math.abs(O)<.1?(O+=10.1,F.push(f-y,v-x,G,Y,X,j),F.push(f+y,v+x,G,Y,X,j)):(l=(w*R-M*C)/O,c=(A*C-S*R)/O,D=(l-f)*(l-f)+(c-v)*(c-v),D>19600?(T=y-b,E=x-_,P=Math.sqrt(T*T+E*E),T/=P,E/=P,T*=U,E*=U,F.push(f-T,v-E),F.push(G,Y,X,j),F.push(f+T,v+E),F.push(G,Y,X,j),F.push(f-T,v-E),F.push(G,Y,X,j),I++):(F.push(l,c),F.push(G,Y,X,j),F.push(f-(l-f),v-(c-v)),F.push(G,Y,X,j)));for(p=i[2*(B-2)],d=i[2*(B-2)+1],f=i[2*(B-1)],v=i[2*(B-1)+1],y=-(d-v),x=p-f,P=Math.sqrt(y*y+x*x),y/=P,x/=P,y*=U,x*=U,F.push(f-y,v-x),F.push(G,Y,X,j),F.push(f+y,v+x),F.push(G,Y,X,j),L.push(N),r=0;I>r;r++)L.push(N++);L.push(N-1)}},i.prototype.buildComplexPoly=function(t,e){var r=t.points.slice();if(!(r.length<6)){var i=e.indices;e.points=r,e.alpha=t.fillAlpha,e.color=n.hex2rgb(t.fillColor);for(var o,s,a=1/0,h=-(1/0),u=1/0,l=-(1/0),c=0;co?o:a,h=o>h?o:h,u=u>s?s:u,l=s>l?s:l;r.push(a,u,h,u,h,l,a,l);var p=r.length/2;for(c=0;p>c;c++)i.push(c)}},i.prototype.buildPoly=function(t,e){var r=t.points;if(!(r.length<6)){var i=e.points,o=e.indices,s=r.length/2,a=n.hex2rgb(t.fillColor),h=t.fillAlpha,u=a[0]*h,c=a[1]*h,p=a[2]*h,d=l(r,null,2);if(!d)return!1;var f=i.length/6,v=0;for(v=0;vv;v++)i.push(r[2*v],r[2*v+1],u,c,p,h);return!0}}},{"../../const":38,"../../math":48,"../../renderers/webgl/WebGLRenderer":65,"../../renderers/webgl/utils/ObjectRenderer":80,"../../utils":98,"./WebGLGraphicsData":44,earcut:24}],44:[function(t,e,r){function i(t){this.gl=t,this.color=[0,0,0],this.points=[],this.indices=[],this.buffer=t.createBuffer(),this.indexBuffer=t.createBuffer(),this.mode=1,this.alpha=1,this.dirty=!0,this.glPoints=null,this.glIndices=null}i.prototype.constructor=i,e.exports=i,i.prototype.reset=function(){this.points.length=0,this.indices.length=0},i.prototype.upload=function(){var t=this.gl;this.glPoints=new Float32Array(this.points),t.bindBuffer(t.ARRAY_BUFFER,this.buffer),t.bufferData(t.ARRAY_BUFFER,this.glPoints,t.STATIC_DRAW),this.glIndices=new Uint16Array(this.indices),t.bindBuffer(t.ELEMENT_ARRAY_BUFFER,this.indexBuffer),t.bufferData(t.ELEMENT_ARRAY_BUFFER,this.glIndices,t.STATIC_DRAW),this.dirty=!1},i.prototype.destroy=function(){this.color=null,this.points=null,this.indices=null,this.gl.deleteBuffer(this.buffer),this.gl.deleteBuffer(this.indexBuffer),this.gl=null,this.buffer=null,this.indexBuffer=null,this.glPoints=null,this.glIndices=null}},{}],45:[function(t,e,r){var i=e.exports=Object.assign(t("./const"),t("./math"),{utils:t("./utils"),ticker:t("./ticker"),DisplayObject:t("./display/DisplayObject"),Container:t("./display/Container"),Sprite:t("./sprites/Sprite"),ParticleContainer:t("./particles/ParticleContainer"),SpriteRenderer:t("./sprites/webgl/SpriteRenderer"),ParticleRenderer:t("./particles/webgl/ParticleRenderer"),Text:t("./text/Text"),Graphics:t("./graphics/Graphics"),GraphicsData:t("./graphics/GraphicsData"),GraphicsRenderer:t("./graphics/webgl/GraphicsRenderer"),Texture:t("./textures/Texture"),BaseTexture:t("./textures/BaseTexture"),RenderTexture:t("./textures/RenderTexture"),VideoBaseTexture:t("./textures/VideoBaseTexture"),TextureUvs:t("./textures/TextureUvs"),CanvasRenderer:t("./renderers/canvas/CanvasRenderer"),CanvasGraphics:t("./renderers/canvas/utils/CanvasGraphics"),CanvasBuffer:t("./renderers/canvas/utils/CanvasBuffer"),WebGLRenderer:t("./renderers/webgl/WebGLRenderer"),WebGLManager:t("./renderers/webgl/managers/WebGLManager"),ShaderManager:t("./renderers/webgl/managers/ShaderManager"),Shader:t("./renderers/webgl/shaders/Shader"),ObjectRenderer:t("./renderers/webgl/utils/ObjectRenderer"),RenderTarget:t("./renderers/webgl/utils/RenderTarget"),AbstractFilter:t("./renderers/webgl/filters/AbstractFilter"),FXAAFilter:t("./renderers/webgl/filters/FXAAFilter"),SpriteMaskFilter:t("./renderers/webgl/filters/SpriteMaskFilter"),glCore:t("pixi-gl-core"),autoDetectRenderer:function(t,e,r,n){return t=t||800,e=e||600,!n&&i.utils.isWebGLSupported()?new i.WebGLRenderer(t,e,r):new i.CanvasRenderer(t,e,r)}})},{"./const":38,"./display/Container":39,"./display/DisplayObject":40,"./graphics/Graphics":41,"./graphics/GraphicsData":42,"./graphics/webgl/GraphicsRenderer":43,"./math":48,"./particles/ParticleContainer":54,"./particles/webgl/ParticleRenderer":56,"./renderers/canvas/CanvasRenderer":59,"./renderers/canvas/utils/CanvasBuffer":60,"./renderers/canvas/utils/CanvasGraphics":61,"./renderers/webgl/WebGLRenderer":65,"./renderers/webgl/filters/AbstractFilter":66,"./renderers/webgl/filters/FXAAFilter":67,"./renderers/webgl/filters/SpriteMaskFilter":68,"./renderers/webgl/managers/ShaderManager":72,"./renderers/webgl/managers/WebGLManager":74,"./renderers/webgl/shaders/Shader":77,"./renderers/webgl/utils/ObjectRenderer":80,"./renderers/webgl/utils/RenderTarget":82,"./sprites/Sprite":86,"./sprites/webgl/SpriteRenderer":87,"./text/Text":89,"./textures/BaseTexture":90,"./textures/RenderTexture":91,"./textures/Texture":92,"./textures/TextureUvs":93,"./textures/VideoBaseTexture":94,"./ticker":96,"./utils":98,"pixi-gl-core":1}],46:[function(t,e,r){function i(){this.a=1,this.b=0,this.c=0,this.d=1,this.tx=0,this.ty=0}var n=t("./Point");i.prototype.constructor=i,e.exports=i,i.prototype.fromArray=function(t){this.a=t[0],this.b=t[1],this.c=t[3],this.d=t[4],this.tx=t[2],this.ty=t[5]},i.prototype.set=function(t,e,r,i,n,o){return this.a=t,this.b=e,this.c=r,this.d=i,this.tx=n,this.ty=o,this},i.prototype.toArray=function(t,e){this.array||(this.array=new Float32Array(9));var r=e||this.array;return t?(r[0]=this.a,r[1]=this.b,r[2]=0,r[3]=this.c,r[4]=this.d,r[5]=0,r[6]=this.tx,r[7]=this.ty,r[8]=1):(r[0]=this.a,r[1]=this.c,r[2]=this.tx,r[3]=this.b,r[4]=this.d,r[5]=this.ty,r[6]=0,r[7]=0,r[8]=1),r},i.prototype.apply=function(t,e){e=e||new n;var r=t.x,i=t.y;return e.x=this.a*r+this.c*i+this.tx,e.y=this.b*r+this.d*i+this.ty,e},i.prototype.applyInverse=function(t,e){e=e||new n;var r=1/(this.a*this.d+this.c*-this.b),i=t.x,o=t.y;return e.x=this.d*r*i+-this.c*r*o+(this.ty*this.c-this.tx*this.d)*r,e.y=this.a*r*o+-this.b*r*i+(-this.ty*this.a+this.tx*this.b)*r,e},i.prototype.translate=function(t,e){return this.tx+=t,this.ty+=e,this},i.prototype.scale=function(t,e){return this.a*=t,this.d*=e,this.c*=t,this.b*=e,this.tx*=t,this.ty*=e,this},i.prototype.rotate=function(t){var e=Math.cos(t),r=Math.sin(t),i=this.a,n=this.c,o=this.tx;return this.a=i*e-this.b*r,this.b=i*r+this.b*e,this.c=n*e-this.d*r,this.d=n*r+this.d*e,this.tx=o*e-this.ty*r,this.ty=o*r+this.ty*e,this},i.prototype.append=function(t){var e=this.a,r=this.b,i=this.c,n=this.d;return this.a=t.a*e+t.b*i,this.b=t.a*r+t.b*n,this.c=t.c*e+t.d*i,this.d=t.c*r+t.d*n,this.tx=t.tx*e+t.ty*i+this.tx,this.ty=t.tx*r+t.ty*n+this.ty,this},i.prototype.setTransform=function(t,e,r,i,n,o,s,a,h){var u,l,c,p,d,f,v,g,m,y;return d=Math.sin(s),f=Math.cos(s),v=Math.cos(h),g=Math.sin(h),m=-Math.sin(a),y=Math.cos(a),u=f*n,l=d*n,c=-d*o,p=f*o,this.a=v*u+g*c,this.b=v*l+g*p,this.c=m*u+y*c,this.d=m*l+y*p,this.tx=t+(r*u+i*c),this.ty=e+(r*l+i*p),this},i.prototype.prepend=function(t){var e=this.tx;if(1!==t.a||0!==t.b||0!==t.c||1!==t.d){var r=this.a,i=this.c;this.a=r*t.a+this.b*t.c,this.b=r*t.b+this.b*t.d,this.c=i*t.a+this.d*t.c,this.d=i*t.b+this.d*t.d}return this.tx=e*t.a+this.ty*t.c+t.tx,this.ty=e*t.b+this.ty*t.d+t.ty,this},i.prototype.invert=function(){var t=this.a,e=this.b,r=this.c,i=this.d,n=this.tx,o=t*i-e*r;return this.a=i/o,this.b=-e/o,this.c=-r/o,this.d=t/o,this.tx=(r*this.ty-i*n)/o,this.ty=-(t*this.ty-e*n)/o,this},i.prototype.identity=function(){return this.a=1,this.b=0,this.c=0,this.d=1,this.tx=0,this.ty=0,this},i.prototype.clone=function(){var t=new i;return t.a=this.a,t.b=this.b,t.c=this.c,t.d=this.d,t.tx=this.tx,t.ty=this.ty,t},i.prototype.copy=function(t){return t.a=this.a,t.b=this.b,t.c=this.c,t.d=this.d,t.tx=this.tx,t.ty=this.ty,t},i.IDENTITY=new i,i.TEMP_MATRIX=new i},{"./Point":47}],47:[function(t,e,r){function i(t,e){this.x=t||0,this.y=e||0}i.prototype.constructor=i,e.exports=i,i.prototype.clone=function(){return new i(this.x,this.y)},i.prototype.copy=function(t){this.set(t.x,t.y)},i.prototype.equals=function(t){return t.x===this.x&&t.y===this.y},i.prototype.set=function(t,e){this.x=t||0,this.y=e||(0!==e?this.x:0)}},{}],48:[function(t,e,r){e.exports={Point:t("./Point"),Matrix:t("./Matrix"),Circle:t("./shapes/Circle"),Ellipse:t("./shapes/Ellipse"),Polygon:t("./shapes/Polygon"),Rectangle:t("./shapes/Rectangle"),RoundedRectangle:t("./shapes/RoundedRectangle")}},{"./Matrix":46,"./Point":47,"./shapes/Circle":49,"./shapes/Ellipse":50,"./shapes/Polygon":51,"./shapes/Rectangle":52,"./shapes/RoundedRectangle":53}],49:[function(t,e,r){function i(t,e,r){this.x=t||0,this.y=e||0,this.radius=r||0,this.type=o.SHAPES.CIRC}var n=t("./Rectangle"),o=t("../../const");i.prototype.constructor=i,e.exports=i,i.prototype.clone=function(){return new i(this.x,this.y,this.radius)},i.prototype.contains=function(t,e){if(this.radius<=0)return!1;var r=this.x-t,i=this.y-e,n=this.radius*this.radius;return r*=r,i*=i,n>=r+i},i.prototype.getBounds=function(){return new n(this.x-this.radius,this.y-this.radius,2*this.radius,2*this.radius)}},{"../../const":38,"./Rectangle":52}],50:[function(t,e,r){function i(t,e,r,i){this.x=t||0,this.y=e||0,this.width=r||0,this.height=i||0,this.type=o.SHAPES.ELIP}var n=t("./Rectangle"),o=t("../../const");i.prototype.constructor=i,e.exports=i,i.prototype.clone=function(){return new i(this.x,this.y,this.width,this.height)},i.prototype.contains=function(t,e){if(this.width<=0||this.height<=0)return!1;var r=(t-this.x)/this.width,i=(e-this.y)/this.height;return r*=r,i*=i,1>=r+i},i.prototype.getBounds=function(){return new n(this.x-this.width,this.y-this.height,this.width,this.height)}},{"../../const":38,"./Rectangle":52}],51:[function(t,e,r){function i(t){var e=t;if(!Array.isArray(e)){e=new Array(arguments.length);for(var r=0;rs;s++)i.push(e[s].x,e[s].y);e=i}this.closed=!0,this.points=e,this.type=o.SHAPES.POLY}var n=t("../Point"),o=t("../../const");i.prototype.constructor=i,e.exports=i,i.prototype.clone=function(){return new i(this.points.slice())},i.prototype.contains=function(t,e){for(var r=!1,i=this.points.length/2,n=0,o=i-1;i>n;o=n++){var s=this.points[2*n],a=this.points[2*n+1],h=this.points[2*o],u=this.points[2*o+1],l=a>e!=u>e&&(h-s)*(e-a)/(u-a)+s>t;l&&(r=!r)}return r}},{"../../const":38,"../Point":47}],52:[function(t,e,r){function i(t,e,r,i){this.x=t||0,this.y=e||0,this.width=r||0,this.height=i||0,this.type=n.SHAPES.RECT}var n=t("../../const");i.prototype.constructor=i,e.exports=i,i.EMPTY=new i(0,0,0,0),i.prototype.clone=function(){return new i(this.x,this.y,this.width,this.height)},i.prototype.contains=function(t,e){return this.width<=0||this.height<=0?!1:t>=this.x&&t=this.y&&e=this.x&&t<=this.x+this.width&&e>=this.y&&e<=this.y+this.height?!0:!1}},{"../../const":38}],54:[function(t,e,r){function i(t,e,r){n.call(this),r=r||15e3,t=t||15e3;var i=16384;r>i&&(r=i),r>t&&(r=t),this._properties=[!1,!0,!1,!1,!1],this._maxSize=t,this._batchSize=r,this._buffers=null,this._bufferToUpdate=0,this.interactiveChildren=!1,this.blendMode=o.BLEND_MODES.NORMAL,this.roundPixels=!0,this.setProperties(e)}var n=t("../display/Container"),o=t("../const");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.setProperties=function(t){t&&(this._properties[0]="scale"in t?!!t.scale:this._properties[0],this._properties[1]="position"in t?!!t.position:this._properties[1],this._properties[2]="rotation"in t?!!t.rotation:this._properties[2],this._properties[3]="uvs"in t?!!t.uvs:this._properties[3],this._properties[4]="alpha"in t?!!t.alpha:this._properties[4])},i.prototype.updateTransform=function(){this.displayObjectUpdateTransform()},i.prototype.renderWebGL=function(t){this.visible&&!(this.worldAlpha<=0)&&this.children.length&&this.renderable&&(t.setObjectRenderer(t.plugins.particle),t.plugins.particle.render(this))},i.prototype.onChildrenChange=function(t){var e=Math.floor(t/this._batchSize);er;r+=6,i+=4)this.indices[r+0]=i+0,this.indices[r+1]=i+1,this.indices[r+2]=i+2,this.indices[r+3]=i+0,this.indices[r+4]=i+2,this.indices[r+5]=i+3;this.shader=null,this.indexBuffer=null,this.properties=null,this.tempMatrix=new h.Matrix}var n=t("../../renderers/webgl/utils/ObjectRenderer"),o=t("../../renderers/webgl/WebGLRenderer"),s=t("./ParticleShader"),a=t("./ParticleBuffer"),h=t("../../math");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,o.registerPlugin("particle",i),i.prototype.onContextChange=function(){var t=this.renderer.gl;this.shader=new s(this.renderer.shaderManager),this.indexBuffer=t.createBuffer(),t.bindBuffer(t.ELEMENT_ARRAY_BUFFER,this.indexBuffer),t.bufferData(t.ELEMENT_ARRAY_BUFFER,this.indices,t.STATIC_DRAW),this.properties=[{attribute:this.shader.attributes.aVertexPosition,size:2,uploadFunction:this.uploadVertices,offset:0},{attribute:this.shader.attributes.aPositionCoord,size:2,uploadFunction:this.uploadPosition,offset:0},{attribute:this.shader.attributes.aRotation,size:1,uploadFunction:this.uploadRotation,offset:0},{attribute:this.shader.attributes.aTextureCoord,size:2,uploadFunction:this.uploadUvs,offset:0},{attribute:this.shader.attributes.aColor,size:1,uploadFunction:this.uploadAlpha,offset:0}]},i.prototype.start=function(){var t=this.renderer.gl;t.activeTexture(t.TEXTURE0),t.bindBuffer(t.ELEMENT_ARRAY_BUFFER,this.indexBuffer);var e=this.shader;this.renderer.shaderManager.setShader(e)},i.prototype.render=function(t){var e=t.children,r=e.length,i=t._maxSize,n=t._batchSize;if(0!==r){r>i&&(r=i),t._buffers||(t._buffers=this.generateBuffers(t)),this.renderer.blendModeManager.setBlendMode(t.blendMode);var o=this.renderer.gl,s=t.worldTransform.copy(this.tempMatrix);s.prepend(this.renderer.currentRenderTarget.projectionMatrix),o.uniformMatrix3fv(this.shader.uniforms.projectionMatrix._location,!1,s.toArray(!0)),o.uniform1f(this.shader.uniforms.uAlpha._location,t.worldAlpha);var a=e[0]._texture.baseTexture;if(a._glTextures[o.id])o.bindTexture(o.TEXTURE_2D,a._glTextures[o.id]);else{if(!this.renderer.updateTexture(a))return;t._properties[0]&&t._properties[3]||(t._bufferToUpdate=0)}for(var h=0,u=0;r>h;h+=n,u+=1){var l=r-h;l>n&&(l=n);var c=t._buffers[u];c.uploadDynamic(e,h,l),t._bufferToUpdate===u&&(c.uploadStatic(e,h,l),t._bufferToUpdate=u+1),c.bind(this.shader),o.drawElements(o.TRIANGLES,6*l,o.UNSIGNED_SHORT,0),this.renderer.drawCount++}}},i.prototype.generateBuffers=function(t){var e,r=this.renderer.gl,i=[],n=t._maxSize,o=t._batchSize,s=t._properties;for(e=0;n>e;e+=o)i.push(new a(r,this.properties,s,o));return i},i.prototype.uploadVertices=function(t,e,r,i,n,o){for(var s,a,h,u,l,c,p,d,f,v=0;r>v;v++)s=t[e+v],a=s._texture,u=s.scale.x,l=s.scale.y,a.trim?(h=a.trim,p=h.x-s.anchor.x*h.width,c=p+a.crop.width,f=h.y-s.anchor.y*h.height,d=f+a.crop.height):(c=a._frame.width*(1-s.anchor.x),p=a._frame.width*-s.anchor.x,d=a._frame.height*(1-s.anchor.y),f=a._frame.height*-s.anchor.y),i[o]=p*u,i[o+1]=f*l,i[o+n]=c*u,i[o+n+1]=f*l,i[o+2*n]=c*u,i[o+2*n+1]=d*l,i[o+3*n]=p*u,i[o+3*n+1]=d*l,o+=4*n},i.prototype.uploadPosition=function(t,e,r,i,n,o){for(var s=0;r>s;s++){var a=t[e+s].position;i[o]=a.x,i[o+1]=a.y,i[o+n]=a.x,i[o+n+1]=a.y,i[o+2*n]=a.x,i[o+2*n+1]=a.y,i[o+3*n]=a.x,i[o+3*n+1]=a.y,o+=4*n}},i.prototype.uploadRotation=function(t,e,r,i,n,o){for(var s=0;r>s;s++){var a=t[e+s].rotation;i[o]=a,i[o+n]=a,i[o+2*n]=a,i[o+3*n]=a,o+=4*n}},i.prototype.uploadUvs=function(t,e,r,i,n,o){for(var s=0;r>s;s++){var a=t[e+s]._texture._uvs;a?(i[o]=a.x0,i[o+1]=a.y0,i[o+n]=a.x1,i[o+n+1]=a.y1,i[o+2*n]=a.x2,i[o+2*n+1]=a.y2,i[o+3*n]=a.x3,i[o+3*n+1]=a.y3,o+=4*n):(i[o]=0,i[o+1]=0,i[o+n]=0,i[o+n+1]=0,i[o+2*n]=0,i[o+2*n+1]=0,i[o+3*n]=0,i[o+3*n+1]=0,o+=4*n)}},i.prototype.uploadAlpha=function(t,e,r,i,n,o){for(var s=0;r>s;s++){var a=t[e+s].alpha;i[o]=a,i[o+n]=a,i[o+2*n]=a,i[o+3*n]=a,o+=4*n}},i.prototype.destroy=function(){this.renderer.gl&&this.renderer.gl.deleteBuffer(this.indexBuffer),n.prototype.destroy.apply(this,arguments),this.shader.destroy(),this.indices=null,this.tempMatrix=null}},{"../../math":48,"../../renderers/webgl/WebGLRenderer":65,"../../renderers/webgl/utils/ObjectRenderer":80,"./ParticleBuffer":55,"./ParticleShader":57}],57:[function(t,e,r){function i(t){n.call(this,t,["attribute vec2 aVertexPosition;","attribute vec2 aTextureCoord;","attribute float aColor;","attribute vec2 aPositionCoord;","attribute vec2 aScale;","attribute float aRotation;","uniform mat3 projectionMatrix;","varying vec2 vTextureCoord;","varying float vColor;","void main(void){"," vec2 v = aVertexPosition;"," v.x = (aVertexPosition.x) * cos(aRotation) - (aVertexPosition.y) * sin(aRotation);"," v.y = (aVertexPosition.x) * sin(aRotation) + (aVertexPosition.y) * cos(aRotation);"," v = v + aPositionCoord;"," gl_Position = vec4((projectionMatrix * vec3(v, 1.0)).xy, 0.0, 1.0);"," vTextureCoord = aTextureCoord;"," vColor = aColor;","}"].join("\n"),["precision lowp float;","varying vec2 vTextureCoord;","varying float vColor;","uniform sampler2D uSampler;","uniform float uAlpha;","void main(void){"," vec4 color = texture2D(uSampler, vTextureCoord) * vColor * uAlpha;"," if (color.a == 0.0) discard;"," gl_FragColor = color;","}"].join("\n"),{uAlpha:{type:"1f",value:1}},{aPositionCoord:0,aRotation:0})}var n=t("../../renderers/webgl/shaders/TextureShader");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i},{"../../renderers/webgl/shaders/TextureShader":78}],58:[function(t,e,r){function i(t,e,r,i){if(a.call(this),n.sayHello(t),i)for(var h in s.DEFAULT_RENDER_OPTIONS)"undefined"==typeof i[h]&&(i[h]=s.DEFAULT_RENDER_OPTIONS[h]);else i=s.DEFAULT_RENDER_OPTIONS;this.type=s.RENDERER_TYPE.UNKNOWN,this.width=e||800,this.height=r||600,this.view=i.view||document.createElement("canvas"),this.resolution=i.resolution,this.transparent=i.transparent,this.autoResize=i.autoResize||!1,this.blendModes=null,this.preserveDrawingBuffer=i.preserveDrawingBuffer,this.clearBeforeRender=i.clearBeforeRender,this.roundPixels=i.roundPixels,this._backgroundColor=0,this._backgroundColorRgba=[0,0,0,0],this._backgroundColorString="#000000",this.backgroundColor=i.backgroundColor||this._backgroundColor,this._tempDisplayObjectParent={worldTransform:new o.Matrix,worldAlpha:1,children:[]},this._lastObjectRendered=this._tempDisplayObjectParent}var n=t("../utils"),o=t("../math"),s=t("../const"),a=t("eventemitter3");i.prototype=Object.create(a.prototype),i.prototype.constructor=i,e.exports=i,Object.defineProperties(i.prototype,{backgroundColor:{get:function(){return this._backgroundColor},set:function(t){this._backgroundColor=t,this._backgroundColorString=n.hex2string(t),n.hex2rgb(t,this._backgroundColorRgba)}}}),i.prototype.resize=function(t,e){this.width=t*this.resolution,this.height=e*this.resolution,this.view.width=this.width,this.view.height=this.height,this.autoResize&&(this.view.style.width=this.width/this.resolution+"px",this.view.style.height=this.height/this.resolution+"px")},i.prototype.destroy=function(t){t&&this.view.parentNode&&this.view.parentNode.removeChild(this.view),this.type=s.RENDERER_TYPE.UNKNOWN,this.width=0,this.height=0,this.view=null,this.resolution=0,this.transparent=!1,this.autoResize=!1,this.blendModes=null,this.preserveDrawingBuffer=!1,this.clearBeforeRender=!1,this.roundPixels=!1,this._backgroundColor=0, -this._backgroundColorRgba=null,this._backgroundColorString=null}},{"../const":38,"../math":48,"../utils":98,eventemitter3:25}],59:[function(t,e,r){function i(t,e,r){r=r||{},n.call(this,"Canvas",t,e,r),this.type=h.RENDERER_TYPE.CANVAS,this.context=this.view.getContext("2d",{alpha:this.transparent}),this.refresh=!0,this.maskManager=new o,this.smoothProperty="imageSmoothingEnabled",this.context.imageSmoothingEnabled||(this.context.webkitImageSmoothingEnabled?this.smoothProperty="webkitImageSmoothingEnabled":this.context.mozImageSmoothingEnabled?this.smoothProperty="mozImageSmoothingEnabled":this.context.oImageSmoothingEnabled?this.smoothProperty="oImageSmoothingEnabled":this.context.msImageSmoothingEnabled&&(this.smoothProperty="msImageSmoothingEnabled")),this.initPlugins(),this._mapBlendModes(),this._tempDisplayObjectParent={worldTransform:new a.Matrix,worldAlpha:1},this.resize(t,e)}var n=t("../SystemRenderer"),o=t("./utils/CanvasMaskManager"),s=t("../../utils"),a=t("../../math"),h=t("../../const");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,s.pluginTarget.mixin(i),i.prototype.render=function(t){this.emit("prerender");var e=t.parent;this._lastObjectRendered=t,t.parent=this._tempDisplayObjectParent,t.updateTransform(),t.parent=e,this.context.setTransform(1,0,0,1,0,0),this.context.globalAlpha=1,this.context.globalCompositeOperation=this.blendModes[h.BLEND_MODES.NORMAL],navigator.isCocoonJS&&this.view.screencanvas&&(this.context.fillStyle="black",this.context.clear()),this.clearBeforeRender&&(this.transparent?this.context.clearRect(0,0,this.width,this.height):(this.context.fillStyle=this._backgroundColorString,this.context.fillRect(0,0,this.width,this.height))),this.renderDisplayObject(t,this.context),this.emit("postrender")},i.prototype.destroy=function(t){this.destroyPlugins(),n.prototype.destroy.call(this,t),this.context=null,this.refresh=!0,this.maskManager.destroy(),this.maskManager=null,this.smoothProperty=null},i.prototype.renderDisplayObject=function(t,e){var r=this.context;this.context=e,t.renderCanvas(this),this.context=r},i.prototype.resize=function(t,e){n.prototype.resize.call(this,t,e),this.smoothProperty&&(this.context[this.smoothProperty]=h.SCALE_MODES.DEFAULT===h.SCALE_MODES.LINEAR)},i.prototype._mapBlendModes=function(){this.blendModes||(this.blendModes={},s.canUseNewCanvasBlendModes()?(this.blendModes[h.BLEND_MODES.NORMAL]="source-over",this.blendModes[h.BLEND_MODES.ADD]="lighter",this.blendModes[h.BLEND_MODES.MULTIPLY]="multiply",this.blendModes[h.BLEND_MODES.SCREEN]="screen",this.blendModes[h.BLEND_MODES.OVERLAY]="overlay",this.blendModes[h.BLEND_MODES.DARKEN]="darken",this.blendModes[h.BLEND_MODES.LIGHTEN]="lighten",this.blendModes[h.BLEND_MODES.COLOR_DODGE]="color-dodge",this.blendModes[h.BLEND_MODES.COLOR_BURN]="color-burn",this.blendModes[h.BLEND_MODES.HARD_LIGHT]="hard-light",this.blendModes[h.BLEND_MODES.SOFT_LIGHT]="soft-light",this.blendModes[h.BLEND_MODES.DIFFERENCE]="difference",this.blendModes[h.BLEND_MODES.EXCLUSION]="exclusion",this.blendModes[h.BLEND_MODES.HUE]="hue",this.blendModes[h.BLEND_MODES.SATURATION]="saturate",this.blendModes[h.BLEND_MODES.COLOR]="color",this.blendModes[h.BLEND_MODES.LUMINOSITY]="luminosity"):(this.blendModes[h.BLEND_MODES.NORMAL]="source-over",this.blendModes[h.BLEND_MODES.ADD]="lighter",this.blendModes[h.BLEND_MODES.MULTIPLY]="source-over",this.blendModes[h.BLEND_MODES.SCREEN]="source-over",this.blendModes[h.BLEND_MODES.OVERLAY]="source-over",this.blendModes[h.BLEND_MODES.DARKEN]="source-over",this.blendModes[h.BLEND_MODES.LIGHTEN]="source-over",this.blendModes[h.BLEND_MODES.COLOR_DODGE]="source-over",this.blendModes[h.BLEND_MODES.COLOR_BURN]="source-over",this.blendModes[h.BLEND_MODES.HARD_LIGHT]="source-over",this.blendModes[h.BLEND_MODES.SOFT_LIGHT]="source-over",this.blendModes[h.BLEND_MODES.DIFFERENCE]="source-over",this.blendModes[h.BLEND_MODES.EXCLUSION]="source-over",this.blendModes[h.BLEND_MODES.HUE]="source-over",this.blendModes[h.BLEND_MODES.SATURATION]="source-over",this.blendModes[h.BLEND_MODES.COLOR]="source-over",this.blendModes[h.BLEND_MODES.LUMINOSITY]="source-over"))}},{"../../const":38,"../../math":48,"../../utils":98,"../SystemRenderer":58,"./utils/CanvasMaskManager":62}],60:[function(t,e,r){function i(t,e){this.canvas=document.createElement("canvas"),this.context=this.canvas.getContext("2d"),this.canvas.width=t,this.canvas.height=e}i.prototype.constructor=i,e.exports=i,Object.defineProperties(i.prototype,{width:{get:function(){return this.canvas.width},set:function(t){this.canvas.width=t}},height:{get:function(){return this.canvas.height},set:function(t){this.canvas.height=t}}}),i.prototype.clear=function(){this.context.setTransform(1,0,0,1,0,0),this.context.clearRect(0,0,this.canvas.width,this.canvas.height)},i.prototype.resize=function(t,e){this.canvas.width=t,this.canvas.height=e},i.prototype.destroy=function(){this.context=null,this.canvas=null}},{}],61:[function(t,e,r){var i=t("../../../const"),n={};e.exports=n,n.renderGraphics=function(t,e){var r=t.worldAlpha;t.dirty&&(this.updateGraphicsTint(t),t.dirty=!1);for(var n=0;nA?A:C,e.beginPath(),e.moveTo(T,E+C),e.lineTo(T,E+w-C),e.quadraticCurveTo(T,E+w,T+C,E+w),e.lineTo(T+S-C,E+w),e.quadraticCurveTo(T+S,E+w,T+S,E+w-C),e.lineTo(T+S,E+C),e.quadraticCurveTo(T+S,E,T+S-C,E),e.lineTo(T+C,E),e.quadraticCurveTo(T,E,T,E+C),e.closePath(),(o.fillColor||0===o.fillColor)&&(e.globalAlpha=o.fillAlpha*r,e.fillStyle="#"+("00000"+(0|a).toString(16)).substr(-6),e.fill()),o.lineWidth&&(e.globalAlpha=o.lineAlpha*r,e.strokeStyle="#"+("00000"+(0|h).toString(16)).substr(-6),e.stroke())}}},n.renderGraphicsMask=function(t,e){var r=t.graphicsData.length;if(0!==r){e.beginPath();for(var n=0;r>n;n++){var o=t.graphicsData[n],s=o.shape;if(o.type===i.SHAPES.POLY){var a=s.points;e.moveTo(a[0],a[1]);for(var h=1;hw?w:S,e.moveTo(b,_+S),e.lineTo(b,_+E-S),e.quadraticCurveTo(b,_+E,b+S,_+E),e.lineTo(b+T-S,_+E),e.quadraticCurveTo(b+T,_+E,b+T,_+E-S),e.lineTo(b+T,_+S),e.quadraticCurveTo(b+T,_,b+T-S,_),e.lineTo(b+S,_),e.quadraticCurveTo(b,_,b,_+S),e.closePath()}}}},n.updateGraphicsTint=function(t){if(16777215!==t.tint||t._prevTint!==t.tint){t._prevTint=t.tint;for(var e=(t.tint>>16&255)/255,r=(t.tint>>8&255)/255,i=(255&t.tint)/255,n=0;n>16&255)/255*e*255<<16)+((s>>8&255)/255*r*255<<8)+(255&s)/255*i*255,o._lineTint=((a>>16&255)/255*e*255<<16)+((a>>8&255)/255*r*255<<8)+(255&a)/255*i*255}}}},{"../../../const":38}],62:[function(t,e,r){function i(){}var n=t("./CanvasGraphics");i.prototype.constructor=i,e.exports=i,i.prototype.pushMask=function(t,e){e.context.save();var r=t.alpha,i=t.worldTransform,o=e.resolution;e.context.setTransform(i.a*o,i.b*o,i.c*o,i.d*o,i.tx*o,i.ty*o),t.texture||(n.renderGraphicsMask(t,e.context),e.context.clip()),t.worldAlpha=r},i.prototype.popMask=function(t){t.context.restore()},i.prototype.destroy=function(){}},{"./CanvasGraphics":61}],63:[function(t,e,r){var i=t("../../../utils"),n={};e.exports=n,n.getTintedTexture=function(t,e){var r=t.texture;e=n.roundColor(e);var i="#"+("00000"+(0|e).toString(16)).substr(-6);if(r.tintCache=r.tintCache||{},r.tintCache[i])return r.tintCache[i];var o=n.canvas||document.createElement("canvas");if(n.tintMethod(r,e,o),n.convertTintToImage){var s=new Image;s.src=o.toDataURL(),r.tintCache[i]=s}else r.tintCache[i]=o,n.canvas=null;return o},n.tintWithMultiply=function(t,e,r){var i=r.getContext("2d"),n=t.baseTexture.resolution,o=t.crop.clone();o.x*=n,o.y*=n,o.width*=n,o.height*=n,r.width=o.width,r.height=o.height,i.fillStyle="#"+("00000"+(0|e).toString(16)).substr(-6),i.fillRect(0,0,o.width,o.height),i.globalCompositeOperation="multiply",i.drawImage(t.baseTexture.source,o.x,o.y,o.width,o.height,0,0,o.width,o.height),i.globalCompositeOperation="destination-atop",i.drawImage(t.baseTexture.source,o.x,o.y,o.width,o.height,0,0,o.width,o.height)},n.tintWithOverlay=function(t,e,r){var i=r.getContext("2d"),n=t.baseTexture.resolution,o=t.crop.clone();o.x*=n,o.y*=n,o.width*=n,o.height*=n,r.width=o.width,r.height=o.height,i.globalCompositeOperation="copy",i.fillStyle="#"+("00000"+(0|e).toString(16)).substr(-6),i.fillRect(0,0,o.width,o.height),i.globalCompositeOperation="destination-atop",i.drawImage(t.baseTexture.source,o.x,o.y,o.width,o.height,0,0,o.width,o.height)},n.tintWithPerPixel=function(t,e,r){var n=r.getContext("2d"),o=t.baseTexture.resolution,s=t.crop.clone();s.x*=o,s.y*=o,s.width*=o,s.height*=o,r.width=s.width,r.height=s.height,n.globalCompositeOperation="copy",n.drawImage(t.baseTexture.source,s.x,s.y,s.width,s.height,0,0,s.width,s.height);for(var a=i.hex2rgb(e),h=a[0],u=a[1],l=a[2],c=n.getImageData(0,0,s.width,s.height),p=c.data,d=0;de;++e)this.shaders[e].syncUniform(t)}},{"../shaders/TextureShader":78}],67:[function(t,e,r){function i(){n.call(this,"\nprecision mediump float;\n\nattribute vec2 aVertexPosition;\nattribute vec2 aTextureCoord;\nattribute vec4 aColor;\n\nuniform mat3 projectionMatrix;\nuniform vec2 resolution;\n\nvarying vec2 vTextureCoord;\nvarying vec4 vColor;\n\nvarying vec2 vResolution;\n\n//texcoords computed in vertex step\n//to avoid dependent texture reads\nvarying vec2 v_rgbNW;\nvarying vec2 v_rgbNE;\nvarying vec2 v_rgbSW;\nvarying vec2 v_rgbSE;\nvarying vec2 v_rgbM;\n\n\nvoid texcoords(vec2 fragCoord, vec2 resolution,\n out vec2 v_rgbNW, out vec2 v_rgbNE,\n out vec2 v_rgbSW, out vec2 v_rgbSE,\n out vec2 v_rgbM) {\n vec2 inverseVP = 1.0 / resolution.xy;\n v_rgbNW = (fragCoord + vec2(-1.0, -1.0)) * inverseVP;\n v_rgbNE = (fragCoord + vec2(1.0, -1.0)) * inverseVP;\n v_rgbSW = (fragCoord + vec2(-1.0, 1.0)) * inverseVP;\n v_rgbSE = (fragCoord + vec2(1.0, 1.0)) * inverseVP;\n v_rgbM = vec2(fragCoord * inverseVP);\n}\n\nvoid main(void){\n gl_Position = vec4((projectionMatrix * vec3(aVertexPosition, 1.0)).xy, 0.0, 1.0);\n vTextureCoord = aTextureCoord;\n vColor = vec4(aColor.rgb * aColor.a, aColor.a);\n vResolution = resolution;\n\n //compute the texture coords and send them to varyings\n texcoords(aTextureCoord * resolution, resolution, v_rgbNW, v_rgbNE, v_rgbSW, v_rgbSE, v_rgbM);\n}\n",'precision lowp float;\n\n\n/**\nBasic FXAA implementation based on the code on geeks3d.com with the\nmodification that the texture2DLod stuff was removed since it\'s\nunsupported by WebGL.\n\n--\n\nFrom:\nhttps://github.com/mitsuhiko/webgl-meincraft\n\nCopyright (c) 2011 by Armin Ronacher.\n\nSome rights reserved.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are\nmet:\n\n * Redistributions of source code must retain the above copyright\n notice, this list of conditions and the following disclaimer.\n\n * Redistributions in binary form must reproduce the above\n copyright notice, this list of conditions and the following\n disclaimer in the documentation and/or other materials provided\n with the distribution.\n\n * The names of the contributors may not be used to endorse or\n promote products derived from this software without specific\n prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\nLIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\nA PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\nOWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\nSPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\nLIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\nDATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\nTHEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\nOF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n*/\n\n#ifndef FXAA_REDUCE_MIN\n #define FXAA_REDUCE_MIN (1.0/ 128.0)\n#endif\n#ifndef FXAA_REDUCE_MUL\n #define FXAA_REDUCE_MUL (1.0 / 8.0)\n#endif\n#ifndef FXAA_SPAN_MAX\n #define FXAA_SPAN_MAX 8.0\n#endif\n\n//optimized version for mobile, where dependent\n//texture reads can be a bottleneck\nvec4 fxaa(sampler2D tex, vec2 fragCoord, vec2 resolution,\n vec2 v_rgbNW, vec2 v_rgbNE,\n vec2 v_rgbSW, vec2 v_rgbSE,\n vec2 v_rgbM) {\n vec4 color;\n mediump vec2 inverseVP = vec2(1.0 / resolution.x, 1.0 / resolution.y);\n vec3 rgbNW = texture2D(tex, v_rgbNW).xyz;\n vec3 rgbNE = texture2D(tex, v_rgbNE).xyz;\n vec3 rgbSW = texture2D(tex, v_rgbSW).xyz;\n vec3 rgbSE = texture2D(tex, v_rgbSE).xyz;\n vec4 texColor = texture2D(tex, v_rgbM);\n vec3 rgbM = texColor.xyz;\n vec3 luma = vec3(0.299, 0.587, 0.114);\n float lumaNW = dot(rgbNW, luma);\n float lumaNE = dot(rgbNE, luma);\n float lumaSW = dot(rgbSW, luma);\n float lumaSE = dot(rgbSE, luma);\n float lumaM = dot(rgbM, luma);\n float lumaMin = min(lumaM, min(min(lumaNW, lumaNE), min(lumaSW, lumaSE)));\n float lumaMax = max(lumaM, max(max(lumaNW, lumaNE), max(lumaSW, lumaSE)));\n\n mediump vec2 dir;\n dir.x = -((lumaNW + lumaNE) - (lumaSW + lumaSE));\n dir.y = ((lumaNW + lumaSW) - (lumaNE + lumaSE));\n\n float dirReduce = max((lumaNW + lumaNE + lumaSW + lumaSE) *\n (0.25 * FXAA_REDUCE_MUL), FXAA_REDUCE_MIN);\n\n float rcpDirMin = 1.0 / (min(abs(dir.x), abs(dir.y)) + dirReduce);\n dir = min(vec2(FXAA_SPAN_MAX, FXAA_SPAN_MAX),\n max(vec2(-FXAA_SPAN_MAX, -FXAA_SPAN_MAX),\n dir * rcpDirMin)) * inverseVP;\n\n vec3 rgbA = 0.5 * (\n texture2D(tex, fragCoord * inverseVP + dir * (1.0 / 3.0 - 0.5)).xyz +\n texture2D(tex, fragCoord * inverseVP + dir * (2.0 / 3.0 - 0.5)).xyz);\n vec3 rgbB = rgbA * 0.5 + 0.25 * (\n texture2D(tex, fragCoord * inverseVP + dir * -0.5).xyz +\n texture2D(tex, fragCoord * inverseVP + dir * 0.5).xyz);\n\n float lumaB = dot(rgbB, luma);\n if ((lumaB < lumaMin) || (lumaB > lumaMax))\n color = vec4(rgbA, texColor.a);\n else\n color = vec4(rgbB, texColor.a);\n return color;\n}\n\n\nvarying vec2 vTextureCoord;\nvarying vec4 vColor;\nvarying vec2 vResolution;\n\n//texcoords computed in vertex step\n//to avoid dependent texture reads\nvarying vec2 v_rgbNW;\nvarying vec2 v_rgbNE;\nvarying vec2 v_rgbSW;\nvarying vec2 v_rgbSE;\nvarying vec2 v_rgbM;\n\nuniform sampler2D uSampler;\n\n\nvoid main(void){\n\n gl_FragColor = fxaa(uSampler, vTextureCoord * vResolution, vResolution, v_rgbNW, v_rgbNE, v_rgbSW, v_rgbSE, v_rgbM);\n\n}\n',{resolution:{type:"v2",value:{x:1,y:1}}})}var n=t("./AbstractFilter");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.applyFilter=function(t,e,r){var i=t.filterManager,n=this.getShader(t);i.applyFilter(n,e,r)}},{"./AbstractFilter":66}],68:[function(t,e,r){function i(t){var e=new o.Matrix;n.call(this,"attribute vec2 aVertexPosition;\nattribute vec2 aTextureCoord;\nattribute vec4 aColor;\n\nuniform mat3 projectionMatrix;\nuniform mat3 otherMatrix;\n\nvarying vec2 vMaskCoord;\nvarying vec2 vTextureCoord;\nvarying vec4 vColor;\n\nvoid main(void)\n{\n gl_Position = vec4((projectionMatrix * vec3(aVertexPosition, 1.0)).xy, 0.0, 1.0);\n vTextureCoord = aTextureCoord;\n vMaskCoord = ( otherMatrix * vec3( aTextureCoord, 1.0) ).xy;\n vColor = vec4(aColor.rgb * aColor.a, aColor.a);\n}\n","precision lowp float;\n\nvarying vec2 vMaskCoord;\nvarying vec2 vTextureCoord;\nvarying vec4 vColor;\n\nuniform sampler2D uSampler;\nuniform float alpha;\nuniform sampler2D mask;\n\nvoid main(void)\n{\n // check clip! this will stop the mask bleeding out from the edges\n vec2 text = abs( vMaskCoord - 0.5 );\n text = step(0.5, text);\n float clip = 1.0 - max(text.y, text.x);\n vec4 original = texture2D(uSampler, vTextureCoord);\n vec4 masky = texture2D(mask, vMaskCoord);\n original *= (masky.r * masky.a * alpha * clip);\n gl_FragColor = original;\n}\n",{mask:{type:"sampler2D",value:t._texture},alpha:{type:"f",value:1},otherMatrix:{type:"mat3",value:e.toArray(!0)}}),this.maskSprite=t,this.maskMatrix=e}var n=t("./AbstractFilter"),o=t("../../../math");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.applyFilter=function(t,e,r){var i=t.filterManager;this.uniforms.mask.value=this.maskSprite._texture,i.calculateMappedMatrix(e.frame,this.maskSprite,this.maskMatrix),this.uniforms.otherMatrix.value=this.maskMatrix.toArray(!0),this.uniforms.alpha.value=this.maskSprite.worldAlpha;var n=this.getShader(t);i.applyFilter(n,e,r)},Object.defineProperties(i.prototype,{map:{get:function(){return this.uniforms.mask.value},set:function(t){this.uniforms.mask.value=t}},offset:{get:function(){return this.uniforms.offset.value},set:function(t){this.uniforms.offset.value=t}}})},{"../../../math":48,"./AbstractFilter":66}],69:[function(t,e,r){function i(t){n.call(this,t),this.currentBlendMode=99999}var n=t("./WebGLManager");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.setBlendMode=function(t){if(this.currentBlendMode===t)return!1;this.currentBlendMode=t;var e=this.renderer.blendModes[this.currentBlendMode];return this.renderer.gl.blendFunc(e[0],e[1]),!0}},{"./WebGLManager":74}],70:[function(t,e,r){function i(t){n.call(this,t),this.filterStack=[],this.filterStack.push({renderTarget:t.currentRenderTarget,filter:[],bounds:null}),this.texturePool=[],this.textureSize=new h.Rectangle(0,0,t.width,t.height),this.currentFrame=null}var n=t("./WebGLManager"),o=t("../utils/RenderTarget"),s=t("../../../const"),a=t("../utils/Quad"),h=t("../../../math");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.onContextChange=function(){this.texturePool.length=0;var t=this.renderer.gl;this.quad=new a(t)},i.prototype.setFilterStack=function(t){this.filterStack=t},i.prototype.pushFilter=function(t,e){var r=t.filterArea?t.filterArea.clone():t.getBounds();r.x=0|r.x,r.y=0|r.y,r.width=0|r.width,r.height=0|r.height;var i=0|e[0].padding;if(r.x-=i,r.y-=i,r.width+=2*i,r.height+=2*i,this.renderer.currentRenderTarget.transform){var n=this.renderer.currentRenderTarget.transform;r.x+=n.tx,r.y+=n.ty,this.capFilterArea(r),r.x-=n.tx,r.y-=n.ty}else this.capFilterArea(r);if(r.width>0&&r.height>0){this.currentFrame=r;var o=this.getRenderTarget();this.renderer.setRenderTarget(o),o.clear(),this.filterStack.push({renderTarget:o,filter:e})}else this.filterStack.push({renderTarget:null,filter:e})},i.prototype.popFilter=function(){var t=this.filterStack.pop(),e=this.filterStack[this.filterStack.length-1],r=t.renderTarget;if(t.renderTarget){var i=e.renderTarget,n=this.renderer.gl;this.currentFrame=r.frame,this.quad.map(this.textureSize,r.frame),n.bindBuffer(n.ARRAY_BUFFER,this.quad.vertexBuffer),n.bindBuffer(n.ELEMENT_ARRAY_BUFFER,this.quad.indexBuffer);var o=t.filter;if(n.vertexAttribPointer(this.renderer.shaderManager.defaultShader.attributes.aVertexPosition,2,n.FLOAT,!1,0,0),n.vertexAttribPointer(this.renderer.shaderManager.defaultShader.attributes.aTextureCoord,2,n.FLOAT,!1,0,32),n.vertexAttribPointer(this.renderer.shaderManager.defaultShader.attributes.aColor,4,n.FLOAT,!1,0,64),this.renderer.blendModeManager.setBlendMode(s.BLEND_MODES.NORMAL),1===o.length)o[0].uniforms.dimensions&&(o[0].uniforms.dimensions.value[0]=this.renderer.width,o[0].uniforms.dimensions.value[1]=this.renderer.height,o[0].uniforms.dimensions.value[2]=this.quad.vertices[0],o[0].uniforms.dimensions.value[3]=this.quad.vertices[5]),o[0].applyFilter(this.renderer,r,i),this.returnRenderTarget(r);else{for(var a=r,h=this.getRenderTarget(!0),u=0;uthis.textureSize.width&&(t.width=this.textureSize.width-t.x),t.y+t.height>this.textureSize.height&&(t.height=this.textureSize.height-t.y)},i.prototype.resize=function(t,e){this.textureSize.width=t,this.textureSize.height=e;for(var r=0;re;++e)t._array[2*e]=o[e].x,t._array[2*e+1]=o[e].y;s.uniform2fv(i,t._array);break;case"v3v":for(t._array||(t._array=new Float32Array(3*o.length)),e=0,r=o.length;r>e;++e)t._array[3*e]=o[e].x,t._array[3*e+1]=o[e].y,t._array[3*e+2]=o[e].z;s.uniform3fv(i,t._array);break;case"v4v":for(t._array||(t._array=new Float32Array(4*o.length)),e=0,r=o.length;r>e;++e)t._array[4*e]=o[e].x,t._array[4*e+1]=o[e].y,t._array[4*e+2]=o[e].z,t._array[4*e+3]=o[e].w;s.uniform4fv(i,t._array);break;case"t":case"sampler2D":if(!t.value||!t.value.baseTexture.hasLoaded)break;s.activeTexture(s["TEXTURE"+this.textureCount]);var a=t.value.baseTexture._glTextures[s.id];a||(this.initSampler2D(t),a=t.value.baseTexture._glTextures[s.id]),s.bindTexture(s.TEXTURE_2D,a),s.uniform1i(t._location,this.textureCount),this.textureCount++;break;default:console.warn("Pixi.js Shader Warning: Unknown uniform type: "+t.type)}},i.prototype.syncUniforms=function(){this.textureCount=1;for(var t in this.uniforms)this.syncUniform(this.uniforms[t])},i.prototype.initSampler2D=function(t){var e=this.gl,r=t.value.baseTexture;if(r.hasLoaded)if(t.textureData){var i=t.textureData;r._glTextures[e.id]=e.createTexture(),e.bindTexture(e.TEXTURE_2D,r._glTextures[e.id]),e.pixelStorei(e.UNPACK_PREMULTIPLY_ALPHA_WEBGL,r.premultipliedAlpha),e.texImage2D(e.TEXTURE_2D,0,i.luminance?e.LUMINANCE:e.RGBA,e.RGBA,e.UNSIGNED_BYTE,r.source),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MAG_FILTER,i.magFilter?i.magFilter:e.LINEAR),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MIN_FILTER,i.wrapS?i.wrapS:e.CLAMP_TO_EDGE),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,i.wrapS?i.wrapS:e.CLAMP_TO_EDGE),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,i.wrapT?i.wrapT:e.CLAMP_TO_EDGE)}else this.shaderManager.renderer.updateTexture(r)},i.prototype.destroy=function(){this.gl.deleteProgram(this.program),this.gl=null,this.uniforms=null,this.attributes=null,this.vertexSrc=null,this.fragmentSrc=null},i.prototype._glCompile=function(t,e){var r=this.gl.createShader(t);return this.gl.shaderSource(r,e),this.gl.compileShader(r),this.gl.getShaderParameter(r,this.gl.COMPILE_STATUS)?r:(console.log(this.gl.getShaderInfoLog(r)),null)}},{"../../../utils":98}],78:[function(t,e,r){function i(t,e,r,o,s){var a={uSampler:{type:"sampler2D",value:0},projectionMatrix:{type:"mat3",value:new Float32Array([1,0,0,0,1,0,0,0,1])}};if(o)for(var h in o)a[h]=o[h];var u={aVertexPosition:0,aTextureCoord:0,aColor:0};if(s)for(var l in s)u[l]=s[l];e=e||i.defaultVertexSrc,r=r||i.defaultFragmentSrc,n.call(this,t,e,r,a,u)}var n=t("./Shader");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.defaultVertexSrc=["precision lowp float;","attribute vec2 aVertexPosition;","attribute vec2 aTextureCoord;","attribute vec4 aColor;","uniform mat3 projectionMatrix;","varying vec2 vTextureCoord;","varying vec4 vColor;","void main(void){"," gl_Position = vec4((projectionMatrix * vec3(aVertexPosition, 1.0)).xy, 0.0, 1.0);"," vTextureCoord = aTextureCoord;"," vColor = vec4(aColor.rgb * aColor.a, aColor.a);","}"].join("\n"),i.defaultFragmentSrc=["precision lowp float;","varying vec2 vTextureCoord;","varying vec4 vColor;","uniform sampler2D uSampler;","void main(void){"," gl_FragColor = texture2D(uSampler, vTextureCoord) * vColor ;","}"].join("\n")},{"./Shader":77}],79:[function(t,e,r){function i(t){vertexSrc=i.defaultVertexSrc,fragmentSrc=i.defaultFragmentSrc,console.log(fragmentSrc),n.call(this,t,vertexSrc,fragmentSrc)}var n=t("pixi-gl-core").GLShader;i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.defaultVertexSrc=["precision lowp float;","attribute vec2 aVertexPosition;","attribute vec2 aTextureCoord;","attribute vec4 aColor;","uniform mat3 projectionMatrix;","varying vec2 vTextureCoord;","varying vec4 vColor;","void main(void){"," gl_Position = vec4((projectionMatrix * vec3(aVertexPosition, 1.0)).xy, 0.0, 1.0);"," vTextureCoord = aTextureCoord;"," vColor = vec4(aColor.rgb * aColor.a, aColor.a);","}"].join("\n"),i.defaultFragmentSrc=["precision lowp float;","varying vec2 vTextureCoord;","varying vec4 vColor;","uniform sampler2D uSampler;","void main(void){"," gl_FragColor = texture2D(uSampler, vTextureCoord) * vColor ;","}"].join("\n")},{"pixi-gl-core":1}],80:[function(t,e,r){function i(t){n.call(this,t)}var n=t("../managers/WebGLManager");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.start=function(){},i.prototype.stop=function(){this.flush()},i.prototype.flush=function(){},i.prototype.render=function(t){}},{"../managers/WebGLManager":74}],81:[function(t,e,r){function i(t){this.gl=t,this.vertices=new Float32Array([0,0,200,0,200,200,0,200]),this.uvs=new Float32Array([0,0,1,0,1,1,0,1]),this.colors=new Float32Array([1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]),this.indices=new Uint16Array([0,1,2,0,3,2]),this.vertexBuffer=t.createBuffer(),this.indexBuffer=t.createBuffer(),t.bindBuffer(t.ARRAY_BUFFER,this.vertexBuffer),t.bufferData(t.ARRAY_BUFFER,128,t.DYNAMIC_DRAW),t.bindBuffer(t.ELEMENT_ARRAY_BUFFER,this.indexBuffer),t.bufferData(t.ELEMENT_ARRAY_BUFFER,this.indices,t.STATIC_DRAW),this.upload()}i.prototype.constructor=i,i.prototype.map=function(t,e){var r=0,i=0;this.uvs[0]=r,this.uvs[1]=i,this.uvs[2]=r+e.width/t.width,this.uvs[3]=i,this.uvs[4]=r+e.width/t.width,this.uvs[5]=i+e.height/t.height,this.uvs[6]=r,this.uvs[7]=i+e.height/t.height,r=e.x,i=e.y,this.vertices[0]=r,this.vertices[1]=i,this.vertices[2]=r+e.width,this.vertices[3]=i,this.vertices[4]=r+e.width,this.vertices[5]=i+e.height,this.vertices[6]=r,this.vertices[7]=i+e.height,this.upload()},i.prototype.upload=function(){var t=this.gl;t.bindBuffer(t.ARRAY_BUFFER,this.vertexBuffer),t.bufferSubData(t.ARRAY_BUFFER,0,this.vertices),t.bufferSubData(t.ARRAY_BUFFER,32,this.uvs),t.bufferSubData(t.ARRAY_BUFFER,64,this.colors)},i.prototype.destroy=function(){var t=this.gl;t.deleteBuffer(this.vertexBuffer),t.deleteBuffer(this.indexBuffer)},e.exports=i},{}],82:[function(t,e,r){var i=t("../../../math"),n=(t("../../../utils"),t("../../../const")),o=t("pixi-gl-core").GLTexture,s=t("pixi-gl-core").GLFramebuffer,a=t("./StencilMaskStack"),h=function(t,e,r,h,u,l){if(this.gl=t,this.frameBuffer=null,this.texture=null,this.clearColor=[0,0,0,0],this.size=new i.Rectangle(0,0,1,1),this.resolution=u||n.RESOLUTION,this.projectionMatrix=new i.Matrix,this.transform=null,this.frame=null,this.stencilBuffer=null,this.stencilMaskStack=new a,this.filterStack=[{renderTarget:this,filter:[],bounds:this.size}],this.scaleMode=h||n.SCALE_MODES.DEFAULT,this.root=l,this.frameBuffer=new s.createRGBA(t,100,100),this.root)this.frameBuffer.framebuffer=null;else{var c=new o(t);c.enableLinearScaling(),c.enableWrapClamp(),this.frameBuffer.enableTexture(c),this.texture=c.texture}this.resize(e,r)};h.prototype.constructor=h,e.exports=h,h.prototype.clear=function(t){var e=t||this.clearColor;this.frameBuffer.clear(e[0],e[1],e[2],e[3])},h.prototype.attachStencilBuffer=function(){this.root||this.frameBuffer.enableStencil()},h.prototype.activate=function(){var t=this.gl;this.frameBuffer.bind();var e=this.frame||this.size;this.calculateProjection(e),this.transform&&this.projectionMatrix.append(this.transform),t.viewport(0,0,e.width*this.resolution,e.height*this.resolution)},h.prototype.calculateProjection=function(t){var e=this.projectionMatrix;e.identity(),this.root?(e.a=1/t.width*2,e.d=-1/t.height*2,e.tx=-1-t.x*e.a,e.ty=1-t.y*e.d):(e.a=1/t.width*2,e.d=1/t.height*2,e.tx=-1-t.x*e.a,e.ty=-1-t.y*e.d)},h.prototype.resize=function(t,e){if(t=0|t,e=0|e,this.size.width!==t||this.size.height!==e){this.size.width=t,this.size.height=e,this.frameBuffer.resize(t*this.resolution,e*this.resolution);var r=this.frame||this.size;this.calculateProjection(r)}},h.prototype.destroy=function(){this.gl;this.frameBuffer.destroy(),this.frameBuffer=null,this.texture=null}},{"../../../const":38,"../../../math":48,"../../../utils":98,"./StencilMaskStack":83,"pixi-gl-core":1}],83:[function(t,e,r){function i(){this.stencilStack=[],this.reverse=!0,this.count=0}i.prototype.constructor=i,e.exports=i},{}],84:[function(t,e,r){function i(t,e){return e=e||{},e[CONST.BLEND_MODES.NORMAL]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.ADD]=[t.SRC_ALPHA,t.DST_ALPHA],e[CONST.BLEND_MODES.MULTIPLY]=[t.DST_COLOR,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.SCREEN]=[t.SRC_ALPHA,t.ONE],e[CONST.BLEND_MODES.OVERLAY]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.DARKEN]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.LIGHTEN]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.COLOR_DODGE]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.COLOR_BURN]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.HARD_LIGHT]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.SOFT_LIGHT]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.DIFFERENCE]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.EXCLUSION]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.HUE]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.SATURATION]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.COLOR]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.LUMINOSITY]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e}CONST=t("../../../const"),e.exports=i},{"../../../const":38}],85:[function(t,e,r){function i(t,e){e=e||{},e[CONST.DRAW_MODES.POINTS]=t.POINTS,e[CONST.DRAW_MODES.LINES]=t.LINES,e[CONST.DRAW_MODES.LINE_LOOP]=t.LINE_LOOP,e[CONST.DRAW_MODES.LINE_STRIP]=t.LINE_STRIP,e[CONST.DRAW_MODES.TRIANGLES]=t.TRIANGLES,e[CONST.DRAW_MODES.TRIANGLE_STRIP]=t.TRIANGLE_STRIP,e[CONST.DRAW_MODES.TRIANGLE_FAN]=t.TRIANGLE_FAN}CONST=t("../../../const"),e.exports=i},{"../../../const":38}],86:[function(t,e,r){function i(t){s.call(this),this.anchor=new n.Point,this._texture=null,this._width=0,this._height=0,this.tint=16777215,this.blendMode=u.BLEND_MODES.NORMAL,this.shader=null,this.cachedTint=16777215,this.texture=t||o.EMPTY,this.textureDirty=!0,this.vertexDirty=!0,this.vertexData=new Float32Array(8)}var n=t("../math"),o=t("../textures/Texture"),s=t("../display/Container"),a=t("../renderers/canvas/utils/CanvasTinter"),h=t("../utils"),u=t("../const"),l=new n.Point;i.prototype=Object.create(s.prototype),i.prototype.constructor=i,e.exports=i,Object.defineProperties(i.prototype,{width:{get:function(){return Math.abs(this.scale.x)*this.texture._frame.width},set:function(t){var e=h.sign(this.scale.x)||1;this.scale.x=e*t/this.texture._frame.width,this._width=t}},height:{get:function(){return Math.abs(this.scale.y)*this.texture._frame.height},set:function(t){var e=h.sign(this.scale.y)||1;this.scale.y=e*t/this.texture._frame.height,this._height=t}},texture:{get:function(){return this._texture},set:function(t){this._texture!==t&&(this._texture=t,this.cachedTint=16777215,this.textureDirty=!0,t&&(t.baseTexture.hasLoaded?this._onTextureUpdate():t.once("update",this._onTextureUpdate,this)))}}}),i.prototype._onTextureUpdate=function(){this.textureDirty=!0,this._width&&(this.scale.x=h.sign(this.scale.x)*this._width/this.texture.frame.width),this._height&&(this.scale.y=h.sign(this.scale.y)*this._height/this.texture.frame.height)},i.prototype.caclulateVertices=function(){var t,e,r,i,n=this._texture,o=this.worldTransform,s=o.a,a=o.b,h=o.c,u=o.d,l=o.tx,c=o.ty,p=this.vertexData,d=n.trim;d?(e=d.x-this.anchor.x*d.width,t=e+n.crop.width,i=d.y-this.anchor.y*d.height,r=i+n.crop.height):(t=n._frame.width*(1-this.anchor.x),e=n._frame.width*-this.anchor.x,r=n._frame.height*(1-this.anchor.y),i=n._frame.height*-this.anchor.y),p[0]=s*e+h*i+l,p[1]=u*i+a*e+c,p[2]=s*t+h*i+l,p[3]=u*i+a*t+c,p[4]=s*t+h*r+l,p[5]=u*r+a*t+c,p[6]=s*e+h*r+l,p[7]=u*r+a*e+c},i.prototype._renderWebGL=function(t){this.textureDirty&&(this.textureDirty=!1,this._onTextureUpdate(),this.vertexDirty=!0),this.vertexDirty&&(this.vertexDirty=!1,this.caclulateVertices()),t.setObjectRenderer(t.plugins.sprite),t.plugins.sprite.render(this)},i.prototype.getBounds=function(t){if(!this._currentBounds){this.vertexDirty&&(this.vertexDirty=!1,this.caclulateVertices());var e,r,i,n,o=this.vertexData,s=o[0],a=o[1],h=o[2],u=o[3],l=o[4],c=o[5],p=o[6],d=o[7];if(e=s,e=e>h?h:e,e=e>l?l:e,e=e>p?p:e,i=a,i=i>u?u:i,i=i>c?c:i,i=i>d?d:i,r=s,r=h>r?h:r,r=l>r?l:r,r=p>r?p:r,n=a,n=u>n?u:n,n=c>n?c:n,n=d>n?d:n,this.children.length){var f=this.containerGetBounds();w0=f.x,w1=f.x+f.width,h0=f.y,h1=f.y+f.height,e=ew1?r:w1,n=n>h1?n:h1}var v=this._bounds;v.x=e,v.width=r-e,v.y=i,v.height=n-i,this._currentBounds=v}return this._currentBounds},i.prototype.getLocalBounds=function(){return this._bounds.x=-this._texture._frame.width*this.anchor.x,this._bounds.y=-this._texture._frame.height*this.anchor.y,this._bounds.width=this._texture._frame.width,this._bounds.height=this._texture._frame.height,this._bounds},i.prototype.containsPoint=function(t){this.worldTransform.applyInverse(t,l);var e,r=this._texture._frame.width,i=this._texture._frame.height,n=-r*this.anchor.x;return l.x>n&&l.xe&&l.yr;r++)this.groups[r]={textures:[],textureCount:0,ids:[],size:0,start:0,blend:0};this.currentGroup=this.groups[this.groupCount++],this.currentTexture=null}var n=t("../../renderers/webgl/utils/ObjectRenderer"),o=t("../../renderers/webgl/WebGLRenderer"),s=(t("../../renderers/webgl/shaders/_TextureShader"),t("../../utils/createIndicesForQuads")),a=t("./generateMultiTextureShader"),h=t("../../const"),u=t("pixi-gl-core"),l=2;i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,o.registerPlugin("sprite",i),i.prototype.onContextChange=function(){var t=this.renderer.gl;this._shader=a(t,l),this.shader=this.renderer.shaderManager.defaultShader,this.vertexBuffer=u.GLBuffer.createVertexBuffer(t,null,t.DYNAMIC_DRAW),this.indexBuffer=u.GLBuffer.createIndexBuffer(t,this.indices,t.STATIC_DRAW),this.vao=new u.VertexArrayObject(t),this.vao.addIndex(this.indexBuffer),this.vao.addAttribute(this.vertexBuffer,this._shader.attributes.aVertexPosition,t.FLOAT,!1,this.vertByteSize,0),this.vao.addAttribute(this.vertexBuffer,this._shader.attributes.aTextureCoord,t.UNSIGNED_SHORT,!0,this.vertByteSize,8),this.vao.addAttribute(this.vertexBuffer,this._shader.attributes.aColor,t.UNSIGNED_BYTE,!0,this.vertByteSize,12),this.vao.addAttribute(this.vertexBuffer,this._shader.attributes.aTextureId,t.FLOAT,!1,this.vertByteSize,16),this.currentBlendMode=99999},i.prototype.render=function(t){this.currentIndex>=this.size&&this.flush();var e=t.texture._uvs;if(e){var r=(this.groups,t.texture.baseTexture),i=this.currentGroup;if(this.currentTexture!==r&&(this.currentTexture=r,!r._enabled)){if(r._enabled=!0,r._id=this.textureCount,this.textureCount===l){for(var n=0;n>16)+(65280&t.tint)+((255&t.tint)<<16)+(255*t.worldAlpha<<24);a[o++]=h[0],a[o++]=h[1],this.uvs[o++]=e.uvs_uint32[0],s[o++]=u,a[o++]=r._id,a[o++]=h[2],a[o++]=h[3],this.uvs[o++]=e.uvs_uint32[1],s[o++]=u,a[o++]=r._id,a[o++]=h[4],a[o++]=h[5],this.uvs[o++]=e.uvs_uint32[2],s[o++]=u,a[o++]=r._id,a[o++]=h[6],a[o++]=h[7],this.uvs[o++]=e.uvs_uint32[3],s[o++]=u,a[o++]=r._id,this.sprites[this.currentBatchSize++]=t}},i.prototype.renderSprites=function(t){for(var e=0;e.5*this.size)this.vertexBuffer.upload(this.vertices,0,!0);else{var e=this.positions.subarray(0,this.currentIndex*this.vertByteSize);this.vertexBuffer.upload(e,0,!0)}for(this.renderer.bindShader(this._shader),this.renderer.blendModeManager.setBlendMode(0),t=0;tu;u++)h[u]=u;return a.bind(),a.uniforms.uSamplers=h,a}function n(t){var e="vec4 getSampleFromArray(sampler2D textures[%%], int ndx, vec2 uv) {\n\nvec4 color;";e+="\n", -e+="\n";for(var r=0;t>r;r++)r>0&&(e+="\nelse "),t-1>r&&(e+="if(ndx == "+r+")"),e+="\n{",e+="\n color = texture2D(textures["+r+"], uv);",e+="\n}";return e+="\n",e+="\n",e+="return color;",e+="\n}"}var o=t("pixi-gl-core").GLShader,s=["varying vec2 vTextureCoord;","varying vec4 vColor;","varying float vTextureId;","uniform sampler2D uSamplers[%%];","void main(void){","gl_FragColor = getSampleFromArray(uSamplers, int(vTextureId), vTextureCoord) * vColor;","}"].join("\n");e.exports=i},{"pixi-gl-core":1}],89:[function(t,e,r){function i(t,e,r){this.canvas=document.createElement("canvas"),this.context=this.canvas.getContext("2d"),this.resolution=r||h.RESOLUTION,this._text=null,this._style=null;var i=o.fromCanvas(this.canvas);i.trim=new s.Rectangle,n.call(this,i),this.text=t,this.style=e}var n=t("../sprites/Sprite"),o=t("../textures/Texture"),s=t("../math"),a=t("../utils"),h=t("../const");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.fontPropertiesCache={},i.fontPropertiesCanvas=document.createElement("canvas"),i.fontPropertiesContext=i.fontPropertiesCanvas.getContext("2d"),Object.defineProperties(i.prototype,{width:{get:function(){return this.dirty&&this.updateText(),this.scale.x*this._texture._frame.width},set:function(t){this.scale.x=t/this._texture._frame.width,this._width=t}},height:{get:function(){return this.dirty&&this.updateText(),this.scale.y*this._texture._frame.height},set:function(t){this.scale.y=t/this._texture._frame.height,this._height=t}},style:{get:function(){return this._style},set:function(t){t=t||{},"number"==typeof t.fill&&(t.fill=a.hex2string(t.fill)),"number"==typeof t.stroke&&(t.stroke=a.hex2string(t.stroke)),"number"==typeof t.dropShadowColor&&(t.dropShadowColor=a.hex2string(t.dropShadowColor)),t.font=t.font||"bold 20pt Arial",t.fill=t.fill||"black",t.align=t.align||"left",t.stroke=t.stroke||"black",t.strokeThickness=t.strokeThickness||0,t.wordWrap=t.wordWrap||!1,t.wordWrapWidth=t.wordWrapWidth||100,t.dropShadow=t.dropShadow||!1,t.dropShadowColor=t.dropShadowColor||"#000000",t.dropShadowAngle=void 0!==t.dropShadowAngle?t.dropShadowAngle:Math.PI/6,t.dropShadowDistance=void 0!==t.dropShadowDistance?t.dropShadowDistance:5,t.dropShadowBlur=void 0!==t.dropShadowBlur?t.dropShadowBlur:0,t.padding=t.padding||0,t.textBaseline=t.textBaseline||"alphabetic",t.lineJoin=t.lineJoin||"miter",t.miterLimit=t.miterLimit||10,this._style=t,this.dirty=!0}},text:{get:function(){return this._text},set:function(t){t=t.toString()||" ",this._text!==t&&(this._text=t,this.dirty=!0)}}}),i.prototype.updateText=function(){var t=this._style;this.context.font=t.font;for(var e=t.wordWrap?this.wordWrap(this._text):this._text,r=e.split(/(?:\r\n|\r|\n)/),i=new Array(r.length),n=0,o=this.determineFontProperties(t.font),s=0;s0?(this.context.shadowColor=t.dropShadowColor,this.context.shadowBlur=t.dropShadowBlur):this.context.fillStyle=t.dropShadowColor;var d=Math.cos(t.dropShadowAngle)*t.dropShadowDistance,f=Math.sin(t.dropShadowAngle)*t.dropShadowDistance;for(s=0;sh;h++){for(u=0;p>u;u+=4)if(255!==l[d+u]){f=!0;break}if(f)break;d+=p}for(e.ascent=s-h,d=c-p,f=!1,h=a;h>s;h--){for(u=0;p>u;u+=4)if(255!==l[d+u]){f=!0;break}if(f)break;d-=p}e.descent=h-s,e.fontSize=e.ascent+e.descent,i.fontPropertiesCache[t]=e}return e},i.prototype.wordWrap=function(t){for(var e="",r=t.split("\n"),i=this._style.wordWrapWidth,n=0;no?(a>0&&(e+="\n"),e+=s[a],o=i-h):(o-=u,e+=" "+s[a])}n0&&e>0,this.width=this._frame.width=this.crop.width=t,this.height=this._frame.height=this.crop.height=e,r&&(this.baseTexture.width=this.width,this.baseTexture.height=this.height),this.valid&&(this.textureBuffer.resize(this.width,this.height),this.filterManager&&this.filterManager.resize(this.width,this.height)))},i.prototype.clear=function(){this.valid&&(this.renderer.type===l.RENDERER_TYPE.WEBGL&&this.renderer.gl.bindFramebuffer(this.renderer.gl.FRAMEBUFFER,this.textureBuffer.frameBuffer),this.textureBuffer.clear())},i.prototype.renderWebGL=function(t,e,r,i){if(this.valid){if(i=void 0!==i?i:!0,this.textureBuffer.transform=e,this.textureBuffer.activate(),t.worldAlpha=1,i){t.worldTransform.identity(),t.currentBounds=null;var n,o,s=t.children;for(n=0,o=s.length;o>n;++n)s[n].updateTransform()}var a=this.renderer.filterManager;this.renderer.filterManager=this.filterManager,this.renderer.renderDisplayObject(t,this.textureBuffer,r),this.renderer.filterManager=a}},i.prototype.renderCanvas=function(t,e,r,i){if(this.valid){i=!!i;var n=c;n.identity(),e&&n.append(e);var o=t.worldTransform;t.worldTransform=n,t.worldAlpha=1;var s,a,h=t.children;for(s=0,a=h.length;a>s;++s)h[s].updateTransform();r&&this.textureBuffer.clear();var u=this.textureBuffer.context,l=this.renderer.resolution;this.renderer.resolution=this.resolution,this.renderer.renderDisplayObject(t,u),this.renderer.resolution=l,t.worldTransform===n&&(t.worldTransform=o)}},i.prototype.destroy=function(){o.prototype.destroy.call(this,!0),this.textureBuffer.destroy(),this.filterManager&&this.filterManager.destroy(),this.renderer=null},i.prototype.getImage=function(){var t=new Image;return t.src=this.getBase64(),t},i.prototype.getBase64=function(){return this.getCanvas().toDataURL()},i.prototype.getCanvas=function(){if(this.renderer.type===l.RENDERER_TYPE.WEBGL){var t=this.renderer.gl,e=this.textureBuffer.size.width,r=this.textureBuffer.size.height,i=new Uint8Array(4*e*r);t.bindFramebuffer(t.FRAMEBUFFER,this.textureBuffer.frameBuffer),t.readPixels(0,0,e,r,t.RGBA,t.UNSIGNED_BYTE,i),t.bindFramebuffer(t.FRAMEBUFFER,null);var n=new h(e,r),o=n.context.getImageData(0,0,e,r);return o.data.set(i),n.context.putImageData(o,0,0),n.canvas}return this.textureBuffer.canvas},i.prototype.getPixels=function(){var t,e;if(this.renderer.type===l.RENDERER_TYPE.WEBGL){var r=this.renderer.gl;t=this.textureBuffer.size.width,e=this.textureBuffer.size.height;var i=new Uint8Array(4*t*e);return r.bindFramebuffer(r.FRAMEBUFFER,this.textureBuffer.frameBuffer),r.readPixels(0,0,t,e,r.RGBA,r.UNSIGNED_BYTE,i),r.bindFramebuffer(r.FRAMEBUFFER,null),i}return t=this.textureBuffer.canvas.width,e=this.textureBuffer.canvas.height,this.textureBuffer.canvas.getContext("2d").getImageData(0,0,t,e).data},i.prototype.getPixel=function(t,e){if(this.renderer.type===l.RENDERER_TYPE.WEBGL){var r=this.renderer.gl,i=new Uint8Array(4);return r.bindFramebuffer(r.FRAMEBUFFER,this.textureBuffer.frameBuffer),r.readPixels(t,e,1,1,r.RGBA,r.UNSIGNED_BYTE,i),r.bindFramebuffer(r.FRAMEBUFFER,null),i}return this.textureBuffer.canvas.getContext("2d").getImageData(t,e,1,1).data}},{"../const":38,"../math":48,"../renderers/canvas/utils/CanvasBuffer":60,"../renderers/webgl/managers/FilterManager":70,"../renderers/webgl/utils/RenderTarget":82,"./BaseTexture":90,"./Texture":92}],92:[function(t,e,r){function i(t,e,r,n,o){a.call(this),this.noFrame=!1,e||(this.noFrame=!0,e=new h.Rectangle(0,0,1,1)),t instanceof i&&(t=t.baseTexture),this.baseTexture=t,this._frame=e,this.trim=n,this.valid=!1,this.requiresUpdate=!1,this._uvs=null,this.width=0,this.height=0,this.crop=r||e,this.rotate=!!o,t.hasLoaded?(this.noFrame&&(e=new h.Rectangle(0,0,t.width,t.height),t.on("update",this.onBaseTextureUpdated,this)),this.frame=e):t.once("loaded",this.onBaseTextureLoaded,this)}var n=t("./BaseTexture"),o=t("./VideoBaseTexture"),s=t("./TextureUvs"),a=t("eventemitter3"),h=t("../math"),u=t("../utils");i.prototype=Object.create(a.prototype),i.prototype.constructor=i,e.exports=i,Object.defineProperties(i.prototype,{frame:{get:function(){return this._frame},set:function(t){if(this._frame=t,this.noFrame=!1,this.width=t.width,this.height=t.height,!this.trim&&!this.rotate&&(t.x+t.width>this.baseTexture.width||t.y+t.height>this.baseTexture.height))throw new Error("Texture Error: frame does not fit inside the base Texture dimensions "+this);this.valid=t&&t.width&&t.height&&this.baseTexture.hasLoaded,this.trim?(this.width=this.trim.width,this.height=this.trim.height,this._frame.width=this.trim.width,this._frame.height=this.trim.height):this.crop=t,this.valid&&this._updateUvs()}}}),i.prototype.update=function(){this.baseTexture.update()},i.prototype.onBaseTextureLoaded=function(t){this.noFrame?this.frame=new h.Rectangle(0,0,t.width,t.height):this.frame=this._frame,this.emit("update",this)},i.prototype.onBaseTextureUpdated=function(t){this._frame.width=t.width,this._frame.height=t.height,this.emit("update",this)},i.prototype.destroy=function(t){this.baseTexture&&(t&&this.baseTexture.destroy(),this.baseTexture.off("update",this.onBaseTextureUpdated,this),this.baseTexture.off("loaded",this.onBaseTextureLoaded,this),this.baseTexture=null),this._frame=null,this._uvs=null,this.trim=null,this.crop=null,this.valid=!1,this.off("dispose",this.dispose,this),this.off("update",this.update,this)},i.prototype.clone=function(){return new i(this.baseTexture,this.frame,this.crop,this.trim,this.rotate)},i.prototype._updateUvs=function(){this._uvs||(this._uvs=new s),this._uvs.set(this.crop,this.baseTexture,this.rotate)},i.fromImage=function(t,e,r){var o=u.TextureCache[t];return o||(o=new i(n.fromImage(t,e,r)),u.TextureCache[t]=o),o},i.fromFrame=function(t){var e=u.TextureCache[t];if(!e)throw new Error('The frameId "'+t+'" does not exist in the texture cache');return e},i.fromCanvas=function(t,e){return new i(n.fromCanvas(t,e))},i.fromVideo=function(t,e){return"string"==typeof t?i.fromVideoUrl(t,e):new i(o.fromVideo(t,e))},i.fromVideoUrl=function(t,e){return new i(o.fromUrl(t,e))},i.addTextureToCache=function(t,e){u.TextureCache[e]=t},i.removeTextureFromCache=function(t){var e=u.TextureCache[t];return delete u.TextureCache[t],delete u.BaseTextureCache[t],e},i.EMPTY=new i(new n)},{"../math":48,"../utils":98,"./BaseTexture":90,"./TextureUvs":93,"./VideoBaseTexture":94,eventemitter3:25}],93:[function(t,e,r){function i(){this.x0=0,this.y0=0,this.x1=1,this.y1=0,this.x2=1,this.y2=1,this.x3=0,this.y3=1,this.xy0_uint32=0,this.xy1_uint32=0,this.xy2_uint32=0,this.xy3_uint32=0,this.uvs_uint32=new Uint32Array(4)}e.exports=i,i.prototype.set=function(t,e,r){var i=e.width,n=e.height;r?(this.x0=(t.x+t.height)/i,this.y0=t.y/n,this.x1=(t.x+t.height)/i,this.y1=(t.y+t.width)/n,this.x2=t.x/i,this.y2=(t.y+t.width)/n,this.x3=t.x/i,this.y3=t.y/n):(this.x0=t.x/i,this.y0=t.y/n,this.x1=(t.x+t.width)/i,this.y1=t.y/n,this.x2=(t.x+t.width)/i,this.y2=(t.y+t.height)/n,this.x3=t.x/i,this.y3=(t.y+t.height)/n),this.uvs_uint32[0]=(65535*this.y0&65535)<<16|65535*this.x0&65535,this.uvs_uint32[1]=(65535*this.y1&65535)<<16|65535*this.x1&65535,this.uvs_uint32[2]=(65535*this.y2&65535)<<16|65535*this.x2&65535,this.uvs_uint32[3]=(65535*this.y3&65535)<<16|65535*this.x3&65535}},{}],94:[function(t,e,r){function i(t,e){if(!t)throw new Error("No video source element specified.");(t.readyState===t.HAVE_ENOUGH_DATA||t.readyState===t.HAVE_FUTURE_DATA)&&t.width&&t.height&&(t.complete=!0),o.call(this,t,e),this.autoUpdate=!1,this._onUpdate=this._onUpdate.bind(this),this._onCanPlay=this._onCanPlay.bind(this),t.complete||(t.addEventListener("canplay",this._onCanPlay),t.addEventListener("canplaythrough",this._onCanPlay),t.addEventListener("play",this._onPlayStart.bind(this)),t.addEventListener("pause",this._onPlayStop.bind(this))),this.__loaded=!1}function n(t,e){e||(e="video/"+t.substr(t.lastIndexOf(".")+1));var r=document.createElement("source");return r.src=t,r.type=e,r}var o=t("./BaseTexture"),s=t("../utils");i.prototype=Object.create(o.prototype),i.prototype.constructor=i,e.exports=i,i.prototype._onUpdate=function(){this.autoUpdate&&(window.requestAnimationFrame(this._onUpdate),this.update())},i.prototype._onPlayStart=function(){this.autoUpdate||(window.requestAnimationFrame(this._onUpdate),this.autoUpdate=!0)},i.prototype._onPlayStop=function(){this.autoUpdate=!1},i.prototype._onCanPlay=function(){this.hasLoaded=!0,this.source&&(this.source.removeEventListener("canplay",this._onCanPlay),this.source.removeEventListener("canplaythrough",this._onCanPlay),this.width=this.source.videoWidth,this.height=this.source.videoHeight,this.source.play(),this.__loaded||(this.__loaded=!0,this.emit("loaded",this)))},i.prototype.destroy=function(){this.source&&this.source._pixiId&&(delete s.BaseTextureCache[this.source._pixiId],delete this.source._pixiId),o.prototype.destroy.call(this)},i.fromVideo=function(t,e){t._pixiId||(t._pixiId="video_"+s.uid());var r=s.BaseTextureCache[t._pixiId];return r||(r=new i(t,e),s.BaseTextureCache[t._pixiId]=r),r},i.fromUrl=function(t,e){var r=document.createElement("video");if(Array.isArray(t))for(var o=0;othis._maxElapsedMS&&(e=this._maxElapsedMS),this.deltaTime=e*n.TARGET_FPMS*this.speed,this._emitter.emit(s,this.deltaTime),this.lastTime=t},e.exports=i},{"../const":38,eventemitter3:25}],96:[function(t,e,r){var i=t("./Ticker"),n=new i;n.autoStart=!0,e.exports={shared:n,Ticker:i}},{"./Ticker":95}],97:[function(t,e,r){var i=function(t){for(var e=6*t,r=new Uint16Array(e),i=0,n=0;e>i;i+=6,n+=4)r[i+0]=n+0,r[i+1]=n+1,r[i+2]=n+2,r[i+3]=n+0,r[i+4]=n+2,r[i+5]=n+3;return r};e.exports=i},{}],98:[function(t,e,r){var i=t("../const"),n=e.exports={_uid:0,_saidHello:!1,EventEmitter:t("eventemitter3"),pluginTarget:t("./pluginTarget"),async:t("async"),uid:function(){return++n._uid},hex2rgb:function(t,e){return e=e||[],e[0]=(t>>16&255)/255,e[1]=(t>>8&255)/255,e[2]=(255&t)/255,e},hex2string:function(t){return t=t.toString(16),t="000000".substr(0,6-t.length)+t,"#"+t},rgb2hex:function(t){return(255*t[0]<<16)+(255*t[1]<<8)+255*t[2]},canUseNewCanvasBlendModes:function(){if("undefined"==typeof document)return!1;var t="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAQAAAABAQMAAADD8p2OAAAAA1BMVEX/",e="AAAACklEQVQI12NgAAAAAgAB4iG8MwAAAABJRU5ErkJggg==",r=new Image;r.src=t+"AP804Oa6"+e;var i=new Image;i.src=t+"/wCKxvRF"+e;var n=document.createElement("canvas");n.width=6,n.height=1;var o=n.getContext("2d");o.globalCompositeOperation="multiply",o.drawImage(r,0,0),o.drawImage(i,2,0);var s=o.getImageData(2,0,1,1).data;return 255===s[0]&&0===s[1]&&0===s[2]},getNextPowerOfTwo:function(t){if(t>0&&0===(t&t-1))return t;for(var e=1;t>e;)e<<=1;return e},isPowerOfTwo:function(t,e){return t>0&&0===(t&t-1)&&e>0&&0===(e&e-1)},getResolutionOfUrl:function(t){var e=i.RETINA_PREFIX.exec(t);return e?parseFloat(e[1]):1},sayHello:function(t){if(!n._saidHello){if(navigator.userAgent.toLowerCase().indexOf("chrome")>-1){var e=["\n %c %c %c Pixi.js "+i.VERSION+" - ✰ "+t+" ✰ %c %c http://www.pixijs.com/ %c %c ♥%c♥%c♥ \n\n","background: #ff66a5; padding:5px 0;","background: #ff66a5; padding:5px 0;","color: #ff66a5; background: #030307; padding:5px 0;","background: #ff66a5; padding:5px 0;","background: #ffc3dc; padding:5px 0;","background: #ff66a5; padding:5px 0;","color: #ff2424; background: #fff; padding:5px 0;","color: #ff2424; background: #fff; padding:5px 0;","color: #ff2424; background: #fff; padding:5px 0;"];window.console.log.apply(console,e)}else window.console&&window.console.log("Pixi.js "+i.VERSION+" - "+t+" - http://www.pixijs.com/");n._saidHello=!0}},isWebGLSupported:function(){var t={stencil:!0};try{if(!window.WebGLRenderingContext)return!1;var e=document.createElement("canvas"),r=e.getContext("webgl",t)||e.getContext("experimental-webgl",t);return!(!r||!r.getContextAttributes().stencil)}catch(i){return!1}},sign:function(t){return t?0>t?-1:1:0},removeItems:function(t,e,r){var i=t.length;if(!(e>=i||0===r)){r=e+r>i?i-e:r;for(var n=e,o=i-r;o>n;++n)t[n]=t[n+r];t.length=o}},TextureCache:{},BaseTextureCache:{}}},{"../const":38,"./pluginTarget":99,async:16,eventemitter3:25}],99:[function(t,e,r){function i(t){t.__plugins={},t.registerPlugin=function(e,r){t.__plugins[e]=r},t.prototype.initPlugins=function(){this.plugins=this.plugins||{};for(var e in t.__plugins)this.plugins[e]=new t.__plugins[e](this)},t.prototype.destroyPlugins=function(){for(var t in this.plugins)this.plugins[t].destroy(),this.plugins[t]=null;this.plugins=null}}e.exports={mixin:function(t){i(t)}}},{}],100:[function(t,e,r){var i=t("./core"),n=t("./mesh"),o=t("./extras"),s=t("./filters");i.SpriteBatch=function(){throw new ReferenceError("SpriteBatch does not exist any more, please use the new ParticleContainer instead.")},i.AssetLoader=function(){throw new ReferenceError("The loader system was overhauled in pixi v3, please see the new PIXI.loaders.Loader class.")},Object.defineProperties(i,{Stage:{get:function(){return console.warn("You do not need to use a PIXI Stage any more, you can simply render any container."),i.Container}},DisplayObjectContainer:{get:function(){return console.warn("DisplayObjectContainer has been shortened to Container, please use Container from now on."),i.Container}},Strip:{get:function(){return console.warn("The Strip class has been renamed to Mesh and moved to mesh.Mesh, please use mesh.Mesh from now on."),n.Mesh}},Rope:{get:function(){return console.warn("The Rope class has been moved to mesh.Rope, please use mesh.Rope from now on."),n.Rope}},MovieClip:{get:function(){return console.warn("The MovieClip class has been moved to extras.MovieClip, please use extras.MovieClip from now on."),o.MovieClip}},TilingSprite:{get:function(){return console.warn("The TilingSprite class has been moved to extras.TilingSprite, please use extras.TilingSprite from now on."),o.TilingSprite}},BitmapText:{get:function(){return console.warn("The BitmapText class has been moved to extras.BitmapText, please use extras.BitmapText from now on."),o.BitmapText}},blendModes:{get:function(){return console.warn("The blendModes has been moved to BLEND_MODES, please use BLEND_MODES from now on."),i.BLEND_MODES}},scaleModes:{get:function(){return console.warn("The scaleModes has been moved to SCALE_MODES, please use SCALE_MODES from now on."),i.SCALE_MODES}},BaseTextureCache:{get:function(){return console.warn("The BaseTextureCache class has been moved to utils.BaseTextureCache, please use utils.BaseTextureCache from now on."),i.utils.BaseTextureCache}},TextureCache:{get:function(){return console.warn("The TextureCache class has been moved to utils.TextureCache, please use utils.TextureCache from now on."),i.utils.TextureCache}},math:{get:function(){return console.warn("The math namespace is deprecated, please access members already accessible on PIXI."),i}}}),i.Sprite.prototype.setTexture=function(t){this.texture=t,console.warn("setTexture is now deprecated, please use the texture property, e.g : sprite.texture = texture;")},o.BitmapText.prototype.setText=function(t){this.text=t,console.warn("setText is now deprecated, please use the text property, e.g : myBitmapText.text = 'my text';")},i.Text.prototype.setText=function(t){this.text=t,console.warn("setText is now deprecated, please use the text property, e.g : myText.text = 'my text';")},i.Text.prototype.setStyle=function(t){this.style=t,console.warn("setStyle is now deprecated, please use the style property, e.g : myText.style = style;")},i.Texture.prototype.setFrame=function(t){this.frame=t,console.warn("setFrame is now deprecated, please use the frame property, e.g : myTexture.frame = frame;")},Object.defineProperties(s,{AbstractFilter:{get:function(){return console.warn("filters.AbstractFilter is an undocumented alias, please use AbstractFilter from now on."),i.AbstractFilter}},FXAAFilter:{get:function(){return console.warn("filters.FXAAFilter is an undocumented alias, please use FXAAFilter from now on."),i.FXAAFilter}},SpriteMaskFilter:{get:function(){return console.warn("filters.SpriteMaskFilter is an undocumented alias, please use SpriteMaskFilter from now on."),i.SpriteMaskFilter}}}),i.utils.uuid=function(){return console.warn("utils.uuid() is deprecated, please use utils.uid() from now on."),i.utils.uid()}},{"./core":45,"./extras":107,"./filters":124,"./mesh":149}],101:[function(t,e,r){function i(t,e){n.Container.call(this),e=e||{},this.textWidth=0,this.textHeight=0,this._glyphs=[],this._font={tint:void 0!==e.tint?e.tint:16777215,align:e.align||"left",name:null,size:0},this.font=e.font,this._text=t,this.maxWidth=0,this.maxLineHeight=0,this.dirty=!1,this.updateText()}var n=t("../core");i.prototype=Object.create(n.Container.prototype),i.prototype.constructor=i,e.exports=i,Object.defineProperties(i.prototype,{tint:{get:function(){return this._font.tint},set:function(t){this._font.tint="number"==typeof t&&t>=0?t:16777215,this.dirty=!0}},align:{get:function(){return this._font.align},set:function(t){this._font.align=t||"left",this.dirty=!0}},font:{get:function(){return this._font},set:function(t){t&&("string"==typeof t?(t=t.split(" "),this._font.name=1===t.length?t[0]:t.slice(1).join(" "),this._font.size=t.length>=2?parseInt(t[0],10):i.fonts[this._font.name].size):(this._font.name=t.name,this._font.size="number"==typeof t.size?t.size:parseInt(t.size,10)),this.dirty=!0)}},text:{get:function(){return this._text},set:function(t){t=t.toString()||" ",this._text!==t&&(this._text=t,this.dirty=!0)}}}),i.prototype.updateText=function(){for(var t=i.fonts[this._font.name],e=new n.Point,r=null,o=[],s=0,a=0,h=[],u=0,l=this._font.size/t.size,c=-1,p=0,d=0;d0&&e.x*l>this.maxWidth)n.utils.removeItems(o,c,d-c),d=c,c=-1,h.push(s),a=Math.max(a,s),u++,e.x=0,e.y+=t.lineHeight,r=null;else{var v=t.chars[f];v&&(r&&v.kerning[r]&&(e.x+=v.kerning[r]),o.push({texture:v.texture,line:u,charCode:f,position:new n.Point(e.x+v.xOffset,e.y+v.yOffset)}),s=e.x+(v.texture.width+v.xOffset),e.x+=v.xAdvance,p=Math.max(p,v.yOffset+v.texture.height),r=f)}}h.push(s),a=Math.max(a,s);var g=[];for(d=0;u>=d;d++){var m=0;"right"===this._font.align?m=a-h[d]:"center"===this._font.align&&(m=(a-h[d])/2),g.push(m)}var y=o.length,x=this.tint;for(d=0;y>d;d++){var b=this._glyphs[d];b?b.texture=o[d].texture:(b=new n.Sprite(o[d].texture),this._glyphs.push(b)),b.position.x=(o[d].position.x+g[o[d].line])*l,b.position.y=o[d].position.y*l,b.scale.x=b.scale.y=l,b.tint=x,b.parent||this.addChild(b)}for(d=y;dt&&(t+=this._textures.length),t}}}),i.prototype.stop=function(){this.playing&&(this.playing=!1,n.ticker.shared.remove(this.update,this))},i.prototype.play=function(){this.playing||(this.playing=!0,n.ticker.shared.add(this.update,this))},i.prototype.gotoAndStop=function(t){this.stop(),this._currentTime=t,this._texture=this._textures[this.currentFrame]},i.prototype.gotoAndPlay=function(t){this._currentTime=t,this.play()},i.prototype.update=function(t){var e=this.animationSpeed*t;if(null!==this._durations){var r=this._currentTime%1*this._durations[this.currentFrame];for(r+=e/60*1e3;0>r;)this._currentTime--,r+=this._durations[this.currentFrame];var i=Math.sign(this.animationSpeed*t);for(this._currentTime=Math.floor(this._currentTime);r>=this._durations[this.currentFrame];)r-=this._durations[this.currentFrame]*i,this._currentTime+=i;this._currentTime+=r/this._durations[this.currentFrame]}else this._currentTime+=e;this._currentTime<0&&!this.loop?(this.gotoAndStop(0),this.onComplete&&this.onComplete()):this._currentTime>=this._textures.length&&!this.loop?(this.gotoAndStop(this._textures.length-1),this.onComplete&&this.onComplete()):this._texture=this._textures[this.currentFrame]},i.prototype.destroy=function(){this.stop(),n.Sprite.prototype.destroy.call(this)},i.fromFrames=function(t){for(var e=[],r=0;rx?x:t,t=t>_?_:t,t=t>E?E:t,r=y,r=r>b?b:r,r=r>T?T:r,r=r>S?S:r,e=m,e=x>e?x:e,e=_>e?_:e,e=E>e?E:e,i=y,i=b>i?b:i,i=T>i?T:i,i=S>i?S:i;var w=this._bounds;return w.x=t,w.width=e-t,w.y=r,w.height=i-r,this._currentBounds=w,w},i.prototype.containsPoint=function(t){this.worldTransform.applyInverse(t,o);var e,r=this._width,i=this._height,n=-r*this.anchor.x;return o.x>n&&o.xe&&o.y 0.2) n = 65600.0; // :\n if (gray > 0.3) n = 332772.0; // *\n if (gray > 0.4) n = 15255086.0; // o\n if (gray > 0.5) n = 23385164.0; // &\n if (gray > 0.6) n = 15252014.0; // 8\n if (gray > 0.7) n = 13199452.0; // @\n if (gray > 0.8) n = 11512810.0; // #\n\n vec2 p = mod( uv / ( pixelSize * 0.5 ), 2.0) - vec2(1.0);\n col = col * character(n, p);\n\n gl_FragColor = vec4(col, 1.0);\n}\n",{dimensions:{type:"4fv",value:new Float32Array([0,0,0,0])},pixelSize:{type:"1f",value:8}})}var n=t("../../core");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i,Object.defineProperties(i.prototype,{size:{get:function(){return this.uniforms.pixelSize.value},set:function(t){this.uniforms.pixelSize.value=t}}})},{"../../core":45}],109:[function(t,e,r){function i(){n.AbstractFilter.call(this),this.blurXFilter=new o,this.blurYFilter=new s,this.defaultFilter=new n.AbstractFilter}var n=t("../../core"),o=t("../blur/BlurXFilter"),s=t("../blur/BlurYFilter");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.applyFilter=function(t,e,r){var i=t.filterManager.getRenderTarget(!0);this.defaultFilter.applyFilter(t,e,r),this.blurXFilter.applyFilter(t,e,i),t.blendModeManager.setBlendMode(n.BLEND_MODES.SCREEN),this.blurYFilter.applyFilter(t,i,r),t.blendModeManager.setBlendMode(n.BLEND_MODES.NORMAL),t.filterManager.returnRenderTarget(i)},Object.defineProperties(i.prototype,{blur:{get:function(){return this.blurXFilter.blur},set:function(t){this.blurXFilter.blur=this.blurYFilter.blur=t}},blurX:{get:function(){return this.blurXFilter.blur},set:function(t){this.blurXFilter.blur=t}},blurY:{get:function(){return this.blurYFilter.blur},set:function(t){this.blurYFilter.blur=t}}})},{"../../core":45,"../blur/BlurXFilter":112,"../blur/BlurYFilter":113}],110:[function(t,e,r){function i(t,e){n.AbstractFilter.call(this,"attribute vec2 aVertexPosition;\nattribute vec2 aTextureCoord;\nattribute vec4 aColor;\n\nuniform float strength;\nuniform float dirX;\nuniform float dirY;\nuniform mat3 projectionMatrix;\n\nvarying vec2 vTextureCoord;\nvarying vec4 vColor;\nvarying vec2 vBlurTexCoords[3];\n\nvoid main(void)\n{\n gl_Position = vec4((projectionMatrix * vec3((aVertexPosition), 1.0)).xy, 0.0, 1.0);\n vTextureCoord = aTextureCoord;\n\n vBlurTexCoords[0] = aTextureCoord + vec2( (0.004 * strength) * dirX, (0.004 * strength) * dirY );\n vBlurTexCoords[1] = aTextureCoord + vec2( (0.008 * strength) * dirX, (0.008 * strength) * dirY );\n vBlurTexCoords[2] = aTextureCoord + vec2( (0.012 * strength) * dirX, (0.012 * strength) * dirY );\n\n vColor = vec4(aColor.rgb * aColor.a, aColor.a);\n}\n","precision lowp float;\n\nvarying vec2 vTextureCoord;\nvarying vec2 vBlurTexCoords[3];\nvarying vec4 vColor;\n\nuniform sampler2D uSampler;\n\nvoid main(void)\n{\n gl_FragColor = vec4(0.0);\n\n gl_FragColor += texture2D(uSampler, vTextureCoord ) * 0.3989422804014327;\n gl_FragColor += texture2D(uSampler, vBlurTexCoords[ 0]) * 0.2419707245191454;\n gl_FragColor += texture2D(uSampler, vBlurTexCoords[ 1]) * 0.05399096651318985;\n gl_FragColor += texture2D(uSampler, vBlurTexCoords[ 2]) * 0.004431848411938341;\n}\n",{strength:{type:"1f",value:1},dirX:{type:"1f",value:t||0},dirY:{type:"1f",value:e||0}}),this.defaultFilter=new n.AbstractFilter,this.passes=1,this.dirX=t||0,this.dirY=e||0,this.strength=4}var n=t("../../core");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.applyFilter=function(t,e,r,i){var n=this.getShader(t);if(this.uniforms.strength.value=this.strength/4/this.passes*(e.frame.width/e.size.width),1===this.passes)t.filterManager.applyFilter(n,e,r,i);else{var o=t.filterManager.getRenderTarget(!0);t.filterManager.applyFilter(n,e,o,i);for(var s=0;s>16&255)/255,s=(r>>8&255)/255,a=(255&r)/255,h=(i>>16&255)/255,u=(i>>8&255)/255,l=(255&i)/255,c=[.3,.59,.11,0,0,o,s,a,t,0,h,u,l,e,0,o-h,s-u,a-l,0,0];this._loadMatrix(c,n)},i.prototype.night=function(t,e){t=t||.1;var r=[-2*t,-t,0,0,0,-t,0,t,0,0,0,t,2*t,0,0,0,0,0,1,0];this._loadMatrix(r,e)},i.prototype.predator=function(t,e){var r=[11.224130630493164*t,-4.794486999511719*t,-2.8746118545532227*t,0*t,.40342438220977783*t,-3.6330697536468506*t,9.193157196044922*t,-2.951810836791992*t,0*t,-1.316135048866272*t,-3.2184197902679443*t,-4.2375030517578125*t,7.476448059082031*t,0*t,.8044459223747253*t,0,0,0,1,0];this._loadMatrix(r,e)},i.prototype.lsd=function(t){var e=[2,-.4,.5,0,0,-.5,2,-.4,0,0,-.4,-.5,3,0,0,0,0,0,1,0];this._loadMatrix(e,t)},i.prototype.reset=function(){var t=[1,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,1,0];this._loadMatrix(t,!1)},Object.defineProperties(i.prototype,{matrix:{get:function(){return this.uniforms.m.value},set:function(t){this.uniforms.m.value=t}}})},{"../../core":45}],116:[function(t,e,r){function i(){n.AbstractFilter.call(this,null,"precision mediump float;\n\nvarying vec2 vTextureCoord;\n\nuniform sampler2D uSampler;\nuniform float step;\n\nvoid main(void)\n{\n vec4 color = texture2D(uSampler, vTextureCoord);\n\n color = floor(color * step) / step;\n\n gl_FragColor = color;\n}\n",{step:{type:"1f",value:5}})}var n=t("../../core");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i,Object.defineProperties(i.prototype,{step:{get:function(){return this.uniforms.step.value},set:function(t){this.uniforms.step.value=t}}})},{"../../core":45}],117:[function(t,e,r){function i(t,e,r){n.AbstractFilter.call(this,null,"precision mediump float;\n\nvarying mediump vec2 vTextureCoord;\n\nuniform sampler2D uSampler;\nuniform vec2 texelSize;\nuniform float matrix[9];\n\nvoid main(void)\n{\n vec4 c11 = texture2D(uSampler, vTextureCoord - texelSize); // top left\n vec4 c12 = texture2D(uSampler, vec2(vTextureCoord.x, vTextureCoord.y - texelSize.y)); // top center\n vec4 c13 = texture2D(uSampler, vec2(vTextureCoord.x + texelSize.x, vTextureCoord.y - texelSize.y)); // top right\n\n vec4 c21 = texture2D(uSampler, vec2(vTextureCoord.x - texelSize.x, vTextureCoord.y)); // mid left\n vec4 c22 = texture2D(uSampler, vTextureCoord); // mid center\n vec4 c23 = texture2D(uSampler, vec2(vTextureCoord.x + texelSize.x, vTextureCoord.y)); // mid right\n\n vec4 c31 = texture2D(uSampler, vec2(vTextureCoord.x - texelSize.x, vTextureCoord.y + texelSize.y)); // bottom left\n vec4 c32 = texture2D(uSampler, vec2(vTextureCoord.x, vTextureCoord.y + texelSize.y)); // bottom center\n vec4 c33 = texture2D(uSampler, vTextureCoord + texelSize); // bottom right\n\n gl_FragColor =\n c11 * matrix[0] + c12 * matrix[1] + c13 * matrix[2] +\n c21 * matrix[3] + c22 * matrix[4] + c23 * matrix[5] +\n c31 * matrix[6] + c32 * matrix[7] + c33 * matrix[8];\n\n gl_FragColor.a = c22.a;\n}\n",{matrix:{type:"1fv",value:new Float32Array(t)},texelSize:{type:"v2",value:{x:1/e,y:1/r}}})}var n=t("../../core");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i,Object.defineProperties(i.prototype,{matrix:{get:function(){return this.uniforms.matrix.value},set:function(t){this.uniforms.matrix.value=new Float32Array(t)}},width:{get:function(){return 1/this.uniforms.texelSize.value.x},set:function(t){this.uniforms.texelSize.value.x=1/t}},height:{get:function(){return 1/this.uniforms.texelSize.value.y},set:function(t){this.uniforms.texelSize.value.y=1/t}}})},{"../../core":45 -}],118:[function(t,e,r){function i(){n.AbstractFilter.call(this,null,"precision mediump float;\n\nvarying vec2 vTextureCoord;\n\nuniform sampler2D uSampler;\n\nvoid main(void)\n{\n float lum = length(texture2D(uSampler, vTextureCoord.xy).rgb);\n\n gl_FragColor = vec4(1.0, 1.0, 1.0, 1.0);\n\n if (lum < 1.00)\n {\n if (mod(gl_FragCoord.x + gl_FragCoord.y, 10.0) == 0.0)\n {\n gl_FragColor = vec4(0.0, 0.0, 0.0, 1.0);\n }\n }\n\n if (lum < 0.75)\n {\n if (mod(gl_FragCoord.x - gl_FragCoord.y, 10.0) == 0.0)\n {\n gl_FragColor = vec4(0.0, 0.0, 0.0, 1.0);\n }\n }\n\n if (lum < 0.50)\n {\n if (mod(gl_FragCoord.x + gl_FragCoord.y - 5.0, 10.0) == 0.0)\n {\n gl_FragColor = vec4(0.0, 0.0, 0.0, 1.0);\n }\n }\n\n if (lum < 0.3)\n {\n if (mod(gl_FragCoord.x - gl_FragCoord.y - 5.0, 10.0) == 0.0)\n {\n gl_FragColor = vec4(0.0, 0.0, 0.0, 1.0);\n }\n }\n}\n")}var n=t("../../core");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i},{"../../core":45}],119:[function(t,e,r){function i(t,e){var r=new n.Matrix;t.renderable=!1,n.AbstractFilter.call(this,"attribute vec2 aVertexPosition;\nattribute vec2 aTextureCoord;\nattribute vec4 aColor;\n\nuniform mat3 projectionMatrix;\nuniform mat3 otherMatrix;\n\nvarying vec2 vMapCoord;\nvarying vec2 vTextureCoord;\nvarying vec4 vColor;\n\nvoid main(void)\n{\n gl_Position = vec4((projectionMatrix * vec3(aVertexPosition, 1.0)).xy, 0.0, 1.0);\n vTextureCoord = aTextureCoord;\n vMapCoord = ( otherMatrix * vec3( aTextureCoord, 1.0) ).xy;\n vColor = vec4(aColor.rgb * aColor.a, aColor.a);\n}\n","precision mediump float;\n\nvarying vec2 vMapCoord;\nvarying vec2 vTextureCoord;\nvarying vec4 vColor;\n\nuniform vec2 scale;\n\nuniform sampler2D uSampler;\nuniform sampler2D mapSampler;\n\nvoid main(void)\n{\n vec4 map = texture2D(mapSampler, vMapCoord);\n\n map -= 0.5;\n map.xy *= scale;\n\n gl_FragColor = texture2D(uSampler, vec2(vTextureCoord.x + map.x, vTextureCoord.y + map.y));\n}\n",{mapSampler:{type:"sampler2D",value:t.texture},otherMatrix:{type:"mat3",value:r.toArray(!0)},scale:{type:"v2",value:{x:1,y:1}}}),this.maskSprite=t,this.maskMatrix=r,(null===e||void 0===e)&&(e=20),this.scale=new n.Point(e,e)}var n=t("../../core");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.applyFilter=function(t,e,r){var i=t.filterManager;i.calculateMappedMatrix(e.frame,this.maskSprite,this.maskMatrix),this.uniforms.otherMatrix.value=this.maskMatrix.toArray(!0),this.uniforms.scale.value.x=this.scale.x*(1/e.frame.width),this.uniforms.scale.value.y=this.scale.y*(1/e.frame.height);var n=this.getShader(t);i.applyFilter(n,e,r)},Object.defineProperties(i.prototype,{map:{get:function(){return this.uniforms.mapSampler.value},set:function(t){this.uniforms.mapSampler.value=t}}})},{"../../core":45}],120:[function(t,e,r){function i(){n.AbstractFilter.call(this,null,"precision mediump float;\n\nvarying vec2 vTextureCoord;\nvarying vec4 vColor;\n\nuniform vec4 dimensions;\nuniform sampler2D uSampler;\n\nuniform float angle;\nuniform float scale;\n\nfloat pattern()\n{\n float s = sin(angle), c = cos(angle);\n vec2 tex = vTextureCoord * dimensions.xy;\n vec2 point = vec2(\n c * tex.x - s * tex.y,\n s * tex.x + c * tex.y\n ) * scale;\n return (sin(point.x) * sin(point.y)) * 4.0;\n}\n\nvoid main()\n{\n vec4 color = texture2D(uSampler, vTextureCoord);\n float average = (color.r + color.g + color.b) / 3.0;\n gl_FragColor = vec4(vec3(average * 10.0 - 5.0 + pattern()), color.a);\n}\n",{scale:{type:"1f",value:1},angle:{type:"1f",value:5},dimensions:{type:"4fv",value:[0,0,0,0]}})}var n=t("../../core");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i,Object.defineProperties(i.prototype,{scale:{get:function(){return this.uniforms.scale.value},set:function(t){this.uniforms.scale.value=t}},angle:{get:function(){return this.uniforms.angle.value},set:function(t){this.uniforms.angle.value=t}}})},{"../../core":45}],121:[function(t,e,r){function i(){n.AbstractFilter.call(this,"attribute vec2 aVertexPosition;\nattribute vec2 aTextureCoord;\nattribute vec4 aColor;\n\nuniform float strength;\nuniform vec2 offset;\n\nuniform mat3 projectionMatrix;\n\nvarying vec2 vTextureCoord;\nvarying vec4 vColor;\nvarying vec2 vBlurTexCoords[6];\n\nvoid main(void)\n{\n gl_Position = vec4((projectionMatrix * vec3((aVertexPosition+offset), 1.0)).xy, 0.0, 1.0);\n vTextureCoord = aTextureCoord;\n\n vBlurTexCoords[ 0] = aTextureCoord + vec2(0.0, -0.012 * strength);\n vBlurTexCoords[ 1] = aTextureCoord + vec2(0.0, -0.008 * strength);\n vBlurTexCoords[ 2] = aTextureCoord + vec2(0.0, -0.004 * strength);\n vBlurTexCoords[ 3] = aTextureCoord + vec2(0.0, 0.004 * strength);\n vBlurTexCoords[ 4] = aTextureCoord + vec2(0.0, 0.008 * strength);\n vBlurTexCoords[ 5] = aTextureCoord + vec2(0.0, 0.012 * strength);\n\n vColor = vec4(aColor.rgb * aColor.a, aColor.a);\n}\n","precision lowp float;\n\nvarying vec2 vTextureCoord;\nvarying vec2 vBlurTexCoords[6];\nvarying vec4 vColor;\n\nuniform vec3 color;\nuniform float alpha;\n\nuniform sampler2D uSampler;\n\nvoid main(void)\n{\n vec4 sum = vec4(0.0);\n\n sum += texture2D(uSampler, vBlurTexCoords[ 0])*0.004431848411938341;\n sum += texture2D(uSampler, vBlurTexCoords[ 1])*0.05399096651318985;\n sum += texture2D(uSampler, vBlurTexCoords[ 2])*0.2419707245191454;\n sum += texture2D(uSampler, vTextureCoord )*0.3989422804014327;\n sum += texture2D(uSampler, vBlurTexCoords[ 3])*0.2419707245191454;\n sum += texture2D(uSampler, vBlurTexCoords[ 4])*0.05399096651318985;\n sum += texture2D(uSampler, vBlurTexCoords[ 5])*0.004431848411938341;\n\n gl_FragColor = vec4( color.rgb * sum.a * alpha, sum.a * alpha );\n}\n",{blur:{type:"1f",value:1/512},color:{type:"c",value:[0,0,0]},alpha:{type:"1f",value:.7},offset:{type:"2f",value:[5,5]},strength:{type:"1f",value:1}}),this.passes=1,this.strength=4}var n=t("../../core");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.applyFilter=function(t,e,r,i){var n=this.getShader(t);if(this.uniforms.strength.value=this.strength/4/this.passes*(e.frame.height/e.size.height),1===this.passes)t.filterManager.applyFilter(n,e,r,i);else{for(var o=t.filterManager.getRenderTarget(!0),s=e,a=o,h=0;h= (time - params.z)) )\n {\n float diff = (dist - time);\n float powDiff = 1.0 - pow(abs(diff*params.x), params.y);\n\n float diffTime = diff * powDiff;\n vec2 diffUV = normalize(uv - center);\n texCoord = uv + (diffUV * diffTime);\n }\n\n gl_FragColor = texture2D(uSampler, texCoord);\n}\n",{center:{type:"v2",value:{x:.5,y:.5}},params:{type:"v3",value:{x:10,y:.8,z:.1}},time:{type:"1f",value:0}})}var n=t("../../core");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i,Object.defineProperties(i.prototype,{center:{get:function(){return this.uniforms.center.value},set:function(t){this.uniforms.center.value=t}},params:{get:function(){return this.uniforms.params.value},set:function(t){this.uniforms.params.value=t}},time:{get:function(){return this.uniforms.time.value},set:function(t){this.uniforms.time.value=t}}})},{"../../core":45}],131:[function(t,e,r){function i(){n.AbstractFilter.call(this,null,"precision mediump float;\n\nvarying vec2 vTextureCoord;\n\nuniform sampler2D uSampler;\nuniform float blur;\nuniform float gradientBlur;\nuniform vec2 start;\nuniform vec2 end;\nuniform vec2 delta;\nuniform vec2 texSize;\n\nfloat random(vec3 scale, float seed)\n{\n return fract(sin(dot(gl_FragCoord.xyz + seed, scale)) * 43758.5453 + seed);\n}\n\nvoid main(void)\n{\n vec4 color = vec4(0.0);\n float total = 0.0;\n\n float offset = random(vec3(12.9898, 78.233, 151.7182), 0.0);\n vec2 normal = normalize(vec2(start.y - end.y, end.x - start.x));\n float radius = smoothstep(0.0, 1.0, abs(dot(vTextureCoord * texSize - start, normal)) / gradientBlur) * blur;\n\n for (float t = -30.0; t <= 30.0; t++)\n {\n float percent = (t + offset - 0.5) / 30.0;\n float weight = 1.0 - abs(percent);\n vec4 sample = texture2D(uSampler, vTextureCoord + delta / texSize * percent * radius);\n sample.rgb *= sample.a;\n color += sample * weight;\n total += weight;\n }\n\n gl_FragColor = color / total;\n gl_FragColor.rgb /= gl_FragColor.a + 0.00001;\n}\n",{blur:{type:"1f",value:100},gradientBlur:{type:"1f",value:600},start:{type:"v2",value:{x:0,y:window.innerHeight/2}},end:{type:"v2",value:{x:600,y:window.innerHeight/2}},delta:{type:"v2",value:{x:30,y:30}},texSize:{type:"v2",value:{x:window.innerWidth,y:window.innerHeight}}}),this.updateDelta()}var n=t("../../core");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.updateDelta=function(){this.uniforms.delta.value.x=0,this.uniforms.delta.value.y=0},Object.defineProperties(i.prototype,{blur:{get:function(){return this.uniforms.blur.value},set:function(t){this.uniforms.blur.value=t}},gradientBlur:{get:function(){return this.uniforms.gradientBlur.value},set:function(t){this.uniforms.gradientBlur.value=t}},start:{get:function(){return this.uniforms.start.value},set:function(t){this.uniforms.start.value=t,this.updateDelta()}},end:{get:function(){return this.uniforms.end.value},set:function(t){this.uniforms.end.value=t,this.updateDelta()}}})},{"../../core":45}],132:[function(t,e,r){function i(){n.AbstractFilter.call(this),this.tiltShiftXFilter=new o,this.tiltShiftYFilter=new s}var n=t("../../core"),o=t("./TiltShiftXFilter"),s=t("./TiltShiftYFilter");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.applyFilter=function(t,e,r){var i=t.filterManager.getRenderTarget(!0);this.tiltShiftXFilter.applyFilter(t,e,i),this.tiltShiftYFilter.applyFilter(t,i,r),t.filterManager.returnRenderTarget(i)},Object.defineProperties(i.prototype,{blur:{get:function(){return this.tiltShiftXFilter.blur},set:function(t){this.tiltShiftXFilter.blur=this.tiltShiftYFilter.blur=t}},gradientBlur:{get:function(){return this.tiltShiftXFilter.gradientBlur},set:function(t){this.tiltShiftXFilter.gradientBlur=this.tiltShiftYFilter.gradientBlur=t}},start:{get:function(){return this.tiltShiftXFilter.start},set:function(t){this.tiltShiftXFilter.start=this.tiltShiftYFilter.start=t}},end:{get:function(){return this.tiltShiftXFilter.end},set:function(t){this.tiltShiftXFilter.end=this.tiltShiftYFilter.end=t}}})},{"../../core":45,"./TiltShiftXFilter":133,"./TiltShiftYFilter":134}],133:[function(t,e,r){function i(){n.call(this)}var n=t("./TiltShiftAxisFilter");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.updateDelta=function(){var t=this.uniforms.end.value.x-this.uniforms.start.value.x,e=this.uniforms.end.value.y-this.uniforms.start.value.y,r=Math.sqrt(t*t+e*e);this.uniforms.delta.value.x=t/r,this.uniforms.delta.value.y=e/r}},{"./TiltShiftAxisFilter":131}],134:[function(t,e,r){function i(){n.call(this)}var n=t("./TiltShiftAxisFilter");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.updateDelta=function(){var t=this.uniforms.end.value.x-this.uniforms.start.value.x,e=this.uniforms.end.value.y-this.uniforms.start.value.y,r=Math.sqrt(t*t+e*e);this.uniforms.delta.value.x=-e/r,this.uniforms.delta.value.y=t/r}},{"./TiltShiftAxisFilter":131}],135:[function(t,e,r){function i(){n.AbstractFilter.call(this,null,"precision mediump float;\n\nvarying vec2 vTextureCoord;\n\nuniform sampler2D uSampler;\nuniform float radius;\nuniform float angle;\nuniform vec2 offset;\n\nvoid main(void)\n{\n vec2 coord = vTextureCoord - offset;\n float dist = length(coord);\n\n if (dist < radius)\n {\n float ratio = (radius - dist) / radius;\n float angleMod = ratio * ratio * angle;\n float s = sin(angleMod);\n float c = cos(angleMod);\n coord = vec2(coord.x * c - coord.y * s, coord.x * s + coord.y * c);\n }\n\n gl_FragColor = texture2D(uSampler, coord+offset);\n}\n",{radius:{type:"1f",value:.5},angle:{type:"1f",value:5},offset:{type:"v2",value:{x:.5,y:.5}}})}var n=t("../../core");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i,Object.defineProperties(i.prototype,{offset:{get:function(){return this.uniforms.offset.value},set:function(t){this.uniforms.offset.value=t}},radius:{get:function(){return this.uniforms.radius.value},set:function(t){this.uniforms.radius.value=t}},angle:{get:function(){return this.uniforms.angle.value},set:function(t){this.uniforms.angle.value=t}}})},{"../../core":45}],136:[function(t,e,r){(function(r){t("./polyfill");var i=e.exports=t("./core");i.extras=t("./extras"),i.filters=t("./filters"),i.interaction=t("./interaction"),i.loaders=t("./loaders"),i.mesh=t("./mesh"),i.accessibility=t("./accessibility"),i.loader=new i.loaders.Loader,Object.assign(i,t("./deprecation")),r.PIXI=i}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{"./accessibility":37,"./core":45,"./deprecation":100,"./extras":107,"./filters":124,"./interaction":139,"./loaders":142,"./mesh":149,"./polyfill":154}],137:[function(t,e,r){function i(){this.global=new n.Point,this.target=null,this.originalEvent=null}var n=t("../core");i.prototype.constructor=i,e.exports=i,i.prototype.getLocalPosition=function(t,e,r){return t.worldTransform.applyInverse(r||this.global,e)}},{"../core":45}],138:[function(t,e,r){function i(t,e){e=e||{},this.renderer=t,this.autoPreventDefault=void 0!==e.autoPreventDefault?e.autoPreventDefault:!0,this.interactionFrequency=e.interactionFrequency||10,this.mouse=new o,this.eventData={stopped:!1,target:null,type:null,data:this.mouse,stopPropagation:function(){this.stopped=!0}},this.interactiveDataPool=[],this.interactionDOMElement=null,this.eventsAdded=!1,this.onMouseUp=this.onMouseUp.bind(this),this.processMouseUp=this.processMouseUp.bind(this),this.onMouseDown=this.onMouseDown.bind(this),this.processMouseDown=this.processMouseDown.bind(this),this.onMouseMove=this.onMouseMove.bind(this),this.processMouseMove=this.processMouseMove.bind(this),this.onMouseOut=this.onMouseOut.bind(this),this.processMouseOverOut=this.processMouseOverOut.bind(this),this.onTouchStart=this.onTouchStart.bind(this),this.processTouchStart=this.processTouchStart.bind(this),this.onTouchEnd=this.onTouchEnd.bind(this),this.processTouchEnd=this.processTouchEnd.bind(this),this.onTouchMove=this.onTouchMove.bind(this),this.processTouchMove=this.processTouchMove.bind(this),this.last=0,this.currentCursorStyle="inherit",this._tempPoint=new n.Point,this.resolution=1,this.setTargetElement(this.renderer.view,this.renderer.resolution)}var n=t("../core"),o=t("./InteractionData");Object.assign(n.DisplayObject.prototype,t("./interactiveTarget")),i.prototype.constructor=i,e.exports=i,i.prototype.setTargetElement=function(t,e){this.removeEvents(),this.interactionDOMElement=t,this.resolution=e||1,this.addEvents()},i.prototype.addEvents=function(){this.interactionDOMElement&&(n.ticker.shared.add(this.update,this),window.navigator.msPointerEnabled&&(this.interactionDOMElement.style["-ms-content-zooming"]="none",this.interactionDOMElement.style["-ms-touch-action"]="none"),window.document.addEventListener("mousemove",this.onMouseMove,!0),this.interactionDOMElement.addEventListener("mousedown",this.onMouseDown,!0),this.interactionDOMElement.addEventListener("mouseout",this.onMouseOut,!0),this.interactionDOMElement.addEventListener("touchstart",this.onTouchStart,!0),this.interactionDOMElement.addEventListener("touchend",this.onTouchEnd,!0),this.interactionDOMElement.addEventListener("touchmove",this.onTouchMove,!0),window.addEventListener("mouseup",this.onMouseUp,!0),this.eventsAdded=!0)},i.prototype.removeEvents=function(){this.interactionDOMElement&&(n.ticker.shared.remove(this.update),window.navigator.msPointerEnabled&&(this.interactionDOMElement.style["-ms-content-zooming"]="",this.interactionDOMElement.style["-ms-touch-action"]=""),window.document.removeEventListener("mousemove",this.onMouseMove,!0),this.interactionDOMElement.removeEventListener("mousedown",this.onMouseDown,!0),this.interactionDOMElement.removeEventListener("mouseout",this.onMouseOut,!0),this.interactionDOMElement.removeEventListener("touchstart",this.onTouchStart,!0),this.interactionDOMElement.removeEventListener("touchend",this.onTouchEnd,!0),this.interactionDOMElement.removeEventListener("touchmove",this.onTouchMove,!0),this.interactionDOMElement=null,window.removeEventListener("mouseup",this.onMouseUp,!0),this.eventsAdded=!1)},i.prototype.update=function(t){if(this._deltaTime+=t,!(this._deltaTime=0;h--)this.processInteractive(t,a[h],r,i,s)&&(o=!0,s=!1,a[h].interactive&&(i=!1));return n&&(i&&!o&&(e.hitArea?(e.worldTransform.applyInverse(t,this._tempPoint),o=e.hitArea.contains(this._tempPoint.x,this._tempPoint.y)):e.containsPoint&&(o=e.containsPoint(t))),e.interactive&&r(e,o)),o},i.prototype.onMouseDown=function(t){this.mouse.originalEvent=t,this.eventData.data=this.mouse,this.eventData.stopped=!1,this.mapPositionToPoint(this.mouse.global,t.clientX,t.clientY),this.autoPreventDefault&&this.mouse.originalEvent.preventDefault(),this.processInteractive(this.mouse.global,this.renderer._lastObjectRendered,this.processMouseDown,!0)},i.prototype.processMouseDown=function(t,e){var r=this.mouse.originalEvent,i=2===r.button||3===r.which;e&&(t[i?"_isRightDown":"_isLeftDown"]=!0,this.dispatchEvent(t,i?"rightdown":"mousedown",this.eventData))},i.prototype.onMouseUp=function(t){this.mouse.originalEvent=t,this.eventData.data=this.mouse,this.eventData.stopped=!1,this.mapPositionToPoint(this.mouse.global,t.clientX,t.clientY),this.processInteractive(this.mouse.global,this.renderer._lastObjectRendered,this.processMouseUp,!0)},i.prototype.processMouseUp=function(t,e){var r=this.mouse.originalEvent,i=2===r.button||3===r.which,n=i?"_isRightDown":"_isLeftDown";e?(this.dispatchEvent(t,i?"rightup":"mouseup",this.eventData),t[n]&&(t[n]=!1,this.dispatchEvent(t,i?"rightclick":"click",this.eventData))):t[n]&&(t[n]=!1,this.dispatchEvent(t,i?"rightupoutside":"mouseupoutside",this.eventData))},i.prototype.onMouseMove=function(t){this.mouse.originalEvent=t,this.eventData.data=this.mouse,this.eventData.stopped=!1,this.mapPositionToPoint(this.mouse.global,t.clientX,t.clientY),this.didMove=!0,this.cursor="inherit",this.processInteractive(this.mouse.global,this.renderer._lastObjectRendered,this.processMouseMove,!0),this.currentCursorStyle!==this.cursor&&(this.currentCursorStyle=this.cursor,this.interactionDOMElement.style.cursor=this.cursor)},i.prototype.processMouseMove=function(t,e){this.dispatchEvent(t,"mousemove",this.eventData),this.processMouseOverOut(t,e)},i.prototype.onMouseOut=function(t){this.mouse.originalEvent=t,this.eventData.stopped=!1,this.mapPositionToPoint(this.mouse.global,t.clientX,t.clientY),this.interactionDOMElement.style.cursor="inherit",this.mapPositionToPoint(this.mouse.global,t.clientX,t.clientY),this.processInteractive(this.mouse.global,this.renderer._lastObjectRendered,this.processMouseOverOut,!1)},i.prototype.processMouseOverOut=function(t,e){e?(t._over||(t._over=!0,this.dispatchEvent(t,"mouseover",this.eventData)),t.buttonMode&&(this.cursor=t.defaultCursor)):t._over&&(t._over=!1,this.dispatchEvent(t,"mouseout",this.eventData))},i.prototype.onTouchStart=function(t){this.autoPreventDefault&&t.preventDefault();for(var e=t.changedTouches,r=e.length,i=0;r>i;i++){var n=e[i],o=this.getTouchData(n);o.originalEvent=t,this.eventData.data=o,this.eventData.stopped=!1,this.processInteractive(o.global,this.renderer._lastObjectRendered,this.processTouchStart,!0),this.returnTouchData(o)}},i.prototype.processTouchStart=function(t,e){e&&(t._touchDown=!0,this.dispatchEvent(t,"touchstart",this.eventData))},i.prototype.onTouchEnd=function(t){this.autoPreventDefault&&t.preventDefault();for(var e=t.changedTouches,r=e.length,i=0;r>i;i++){var n=e[i],o=this.getTouchData(n);o.originalEvent=t,this.eventData.data=o,this.eventData.stopped=!1,this.processInteractive(o.global,this.renderer._lastObjectRendered,this.processTouchEnd,!0),this.returnTouchData(o)}},i.prototype.processTouchEnd=function(t,e){e?(this.dispatchEvent(t,"touchend",this.eventData),t._touchDown&&(t._touchDown=!1,this.dispatchEvent(t,"tap",this.eventData))):t._touchDown&&(t._touchDown=!1,this.dispatchEvent(t,"touchendoutside",this.eventData))},i.prototype.onTouchMove=function(t){this.autoPreventDefault&&t.preventDefault();for(var e=t.changedTouches,r=e.length,i=0;r>i;i++){var n=e[i],o=this.getTouchData(n);o.originalEvent=t,this.eventData.data=o,this.eventData.stopped=!1,this.processInteractive(o.global,this.renderer._lastObjectRendered,this.processTouchMove,!0),this.returnTouchData(o)}},i.prototype.processTouchMove=function(t,e){e=e,this.dispatchEvent(t,"touchmove",this.eventData)},i.prototype.getTouchData=function(t){var e=this.interactiveDataPool.pop();return e||(e=new o),e.identifier=t.identifier,this.mapPositionToPoint(e.global,t.clientX,t.clientY),navigator.isCocoonJS&&(e.global.x=e.global.x/this.resolution,e.global.y=e.global.y/this.resolution),t.globalX=e.global.x,t.globalY=e.global.y,e},i.prototype.returnTouchData=function(t){ -this.interactiveDataPool.push(t)},i.prototype.destroy=function(){this.removeEvents(),this.renderer=null,this.mouse=null,this.eventData=null,this.interactiveDataPool=null,this.interactionDOMElement=null,this.onMouseUp=null,this.processMouseUp=null,this.onMouseDown=null,this.processMouseDown=null,this.onMouseMove=null,this.processMouseMove=null,this.onMouseOut=null,this.processMouseOverOut=null,this.onTouchStart=null,this.processTouchStart=null,this.onTouchEnd=null,this.processTouchEnd=null,this.onTouchMove=null,this.processTouchMove=null,this._tempPoint=null},n.WebGLRenderer.registerPlugin("interaction",i),n.CanvasRenderer.registerPlugin("interaction",i)},{"../core":45,"./InteractionData":137,"./interactiveTarget":140}],139:[function(t,e,r){e.exports={InteractionData:t("./InteractionData"),InteractionManager:t("./InteractionManager"),interactiveTarget:t("./interactiveTarget")}},{"./InteractionData":137,"./InteractionManager":138,"./interactiveTarget":140}],140:[function(t,e,r){var i={interactive:!1,buttonMode:!1,interactiveChildren:!0,defaultCursor:"pointer",_over:!1,_touchDown:!1};e.exports=i},{}],141:[function(t,e,r){function i(t,e){var r={},i=t.data.getElementsByTagName("info")[0],n=t.data.getElementsByTagName("common")[0];r.font=i.getAttribute("face"),r.size=parseInt(i.getAttribute("size"),10),r.lineHeight=parseInt(n.getAttribute("lineHeight"),10),r.chars={};for(var a=t.data.getElementsByTagName("char"),h=0;hn;n++){var o=2*n;this._renderCanvasDrawTriangle(t,e,r,o,o+2,o+4)}},i.prototype._renderCanvasTriangles=function(t){for(var e=this.vertices,r=this.uvs,i=this.indices,n=i.length,o=0;n>o;o+=3){var s=2*i[o],a=2*i[o+1],h=2*i[o+2];this._renderCanvasDrawTriangle(t,e,r,s,a,h)}},i.prototype._renderCanvasDrawTriangle=function(t,e,r,i,n,o){var s=this._texture.baseTexture.source,a=this._texture.baseTexture.width,h=this._texture.baseTexture.height,u=e[i],l=e[n],c=e[o],p=e[i+1],d=e[n+1],f=e[o+1],v=r[i]*a,g=r[n]*a,m=r[o]*a,y=r[i+1]*h,x=r[n+1]*h,b=r[o+1]*h;if(this.canvasPadding>0){var _=this.canvasPadding/this.worldTransform.a,T=this.canvasPadding/this.worldTransform.d,E=(u+l+c)/3,S=(p+d+f)/3,w=u-E,C=p-S,A=Math.sqrt(w*w+C*C);u=E+w/A*(A+_),p=S+C/A*(A+T),w=l-E,C=d-S,A=Math.sqrt(w*w+C*C),l=E+w/A*(A+_),d=S+C/A*(A+T),w=c-E,C=f-S,A=Math.sqrt(w*w+C*C),c=E+w/A*(A+_),f=S+C/A*(A+T)}t.save(),t.beginPath(),t.moveTo(u,p),t.lineTo(l,d),t.lineTo(c,f),t.closePath(),t.clip();var M=v*x+y*m+g*b-x*m-y*g-v*b,R=u*x+y*c+l*b-x*c-y*l-u*b,O=v*l+u*m+g*c-l*m-u*g-v*c,D=v*x*c+y*l*m+u*g*b-u*x*m-y*g*c-v*l*b,P=p*x+y*f+d*b-x*f-y*d-p*b,F=v*d+p*m+g*f-d*m-p*g-v*f,L=v*x*f+y*d*m+p*g*b-p*x*m-y*g*f-v*d*b;t.transform(R/M,P/M,O/M,F/M,D/M,L/M),t.drawImage(s,0,0),t.restore()},i.prototype.renderMeshFlat=function(t){var e=this.context,r=t.vertices,i=r.length/2;e.beginPath();for(var n=1;i-2>n;n++){var o=2*n,s=r[o],a=r[o+2],h=r[o+4],u=r[o+1],l=r[o+3],c=r[o+5];e.moveTo(s,u),e.lineTo(a,l),e.lineTo(h,c)}e.fillStyle="#FF0000",e.fill(),e.closePath()},i.prototype._onTextureUpdate=function(){this.updateFrame=!0},i.prototype.getBounds=function(t){if(!this._currentBounds){for(var e=t||this.worldTransform,r=e.a,i=e.b,o=e.c,s=e.d,a=e.tx,h=e.ty,u=-(1/0),l=-(1/0),c=1/0,p=1/0,d=this.vertices,f=0,v=d.length;v>f;f+=2){var g=d[f],m=d[f+1],y=r*g+o*m+a,x=s*m+i*g+h;c=c>y?y:c,p=p>x?x:p,u=y>u?y:u,l=x>l?x:l}if(c===-(1/0)||l===1/0)return n.Rectangle.EMPTY;var b=this._bounds;b.x=c,b.width=u-c,b.y=p,b.height=l-p,this._currentBounds=b}return this._currentBounds},i.prototype.containsPoint=function(t){if(!this.getBounds().contains(t.x,t.y))return!1;this.worldTransform.applyInverse(t,o);var e,r,n=this.vertices,a=s.points;if(this.drawMode===i.DRAW_MODES.TRIANGLES){var h=this.indices;for(r=this.indices.length,e=0;r>e;e+=3){var u=2*h[e],l=2*h[e+1],c=2*h[e+2];if(a[0]=n[u],a[1]=n[u+1],a[2]=n[l],a[3]=n[l+1],a[4]=n[c],a[5]=n[c+1],s.contains(o.x,o.y))return!0}}else for(r=n.length,e=0;r>e;e+=6)if(a[0]=n[e],a[1]=n[e+1],a[2]=n[e+2],a[3]=n[e+3],a[4]=n[e+4],a[5]=n[e+5],s.contains(o.x,o.y))return!0;return!1},i.DRAW_MODES={TRIANGLE_MESH:0,TRIANGLES:1}},{"../core":45}],147:[function(t,e,r){function i(t,e,r){n.call(this,t),this._ready=!0,this.segmentsX=e||10,this.segmentsY=r||10,this.drawMode=n.DRAW_MODES.TRIANGLES,this.refresh()}var n=t("./Mesh");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.refresh=function(){var t=this.segmentsX*this.segmentsY,e=[],r=[],i=[],n=[],o=this.texture,s=this.segmentsX-1,a=this.segmentsY-1,h=0,u=o.width/s,l=o.height/a;for(h=0;t>h;h++){var c=h%this.segmentsX,p=h/this.segmentsX|0;e.push(c*u,p*l),i.push(o._uvs.x0+(o._uvs.x1-o._uvs.x0)*(c/(this.segmentsX-1)),o._uvs.y0+(o._uvs.y3-o._uvs.y0)*(p/(this.segmentsY-1)))}var d=s*a;for(h=0;d>h;h++){var f=h%s,v=h/s|0,g=v*this.segmentsX+f,m=v*this.segmentsX+f+1,y=(v+1)*this.segmentsX+f,x=(v+1)*this.segmentsX+f+1;n.push(g,m,y),n.push(m,x,y)}this.vertices=new Float32Array(e),this.uvs=new Float32Array(i),this.colors=new Float32Array(r),this.indices=new Uint16Array(n)},i.prototype._onTextureUpdate=function(){n.prototype._onTextureUpdate.call(this),this._ready&&this.refresh()}},{"./Mesh":146}],148:[function(t,e,r){function i(t,e){n.call(this,t),this.points=e,this.vertices=new Float32Array(4*e.length),this.uvs=new Float32Array(4*e.length),this.colors=new Float32Array(2*e.length),this.indices=new Uint16Array(2*e.length),this._ready=!0,this.refresh()}var n=t("./Mesh"),o=t("../core");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.refresh=function(){var t=this.points;if(!(t.length<1)&&this._texture._uvs){var e=this.uvs,r=this.indices,i=this.colors,n=this._texture._uvs,s=new o.Point(n.x0,n.y0),a=new o.Point(n.x2-n.x0,n.y2-n.y0);e[0]=0+s.x,e[1]=0+s.y,e[2]=0+s.x,e[3]=1*a.y+s.y,i[0]=1,i[1]=1,r[0]=0,r[1]=1;for(var h,u,l,c=t.length,p=1;c>p;p++)h=t[p],u=4*p,l=p/(c-1),e[u]=l*a.x+s.x,e[u+1]=0+s.y,e[u+2]=l*a.x+s.x,e[u+3]=1*a.y+s.y,u=2*p,i[u]=1,i[u+1]=1,u=2*p,r[u]=u,r[u+1]=u+1;this.dirty=!0}},i.prototype._onTextureUpdate=function(){n.prototype._onTextureUpdate.call(this),this._ready&&this.refresh()},i.prototype.updateTransform=function(){var t=this.points;if(!(t.length<1)){for(var e,r,i,n,o,s,a=t[0],h=0,u=0,l=this.vertices,c=t.length,p=0;c>p;p++)r=t[p],i=4*p,e=p1&&(n=1),o=Math.sqrt(h*h+u*u),s=this._texture.height/2,h/=o,u/=o,h*=s,u*=s,l[i]=r.x+h,l[i+1]=r.y+u,l[i+2]=r.x-h,l[i+3]=r.y-u,a=r;this.containerUpdateTransform()}}},{"../core":45,"./Mesh":146}],149:[function(t,e,r){e.exports={Mesh:t("./Mesh"),Plane:t("./Plane"),Rope:t("./Rope"),MeshRenderer:t("./webgl/MeshRenderer"),MeshShader:t("./webgl/MeshShader")}},{"./Mesh":146,"./Plane":147,"./Rope":148,"./webgl/MeshRenderer":150,"./webgl/MeshShader":151}],150:[function(t,e,r){function i(t){n.ObjectRenderer.call(this,t),this.indices=new Uint16Array(15e3);for(var e=0,r=0;15e3>e;e+=6,r+=4)this.indices[e+0]=r+0,this.indices[e+1]=r+1,this.indices[e+2]=r+2,this.indices[e+3]=r+0,this.indices[e+4]=r+2,this.indices[e+5]=r+3;this.currentShader=null}var n=t("../../core"),o=t("../Mesh");i.prototype=Object.create(n.ObjectRenderer.prototype),i.prototype.constructor=i,e.exports=i,n.WebGLRenderer.registerPlugin("mesh",i),i.prototype.onContextChange=function(){},i.prototype.render=function(t){t._vertexBuffer||this._initWebGL(t);var e=this.renderer,r=e.gl,i=t._texture.baseTexture,n=t.shader,s=t.drawMode===o.DRAW_MODES.TRIANGLE_MESH?r.TRIANGLE_STRIP:r.TRIANGLES;e.blendModeManager.setBlendMode(t.blendMode),n=n?n.shaders[r.id]||n.getShader(e):e.shaderManager.plugins.meshShader,this.renderer.shaderManager.setShader(n),n.uniforms.translationMatrix.value=t.worldTransform.toArray(!0),n.uniforms.projectionMatrix.value=e.currentRenderTarget.projectionMatrix.toArray(!0),n.uniforms.alpha.value=t.worldAlpha,n.syncUniforms(),t.dirty?(t.dirty=!1,r.bindBuffer(r.ARRAY_BUFFER,t._vertexBuffer),r.bufferData(r.ARRAY_BUFFER,t.vertices,r.STATIC_DRAW),r.vertexAttribPointer(n.attributes.aVertexPosition,2,r.FLOAT,!1,0,0),r.bindBuffer(r.ARRAY_BUFFER,t._uvBuffer),r.bufferData(r.ARRAY_BUFFER,t.uvs,r.STATIC_DRAW),r.vertexAttribPointer(n.attributes.aTextureCoord,2,r.FLOAT,!1,0,0),r.activeTexture(r.TEXTURE0),i._glTextures[r.id]?r.bindTexture(r.TEXTURE_2D,i._glTextures[r.id]):this.renderer.updateTexture(i),r.bindBuffer(r.ELEMENT_ARRAY_BUFFER,t._indexBuffer),r.bufferData(r.ELEMENT_ARRAY_BUFFER,t.indices,r.STATIC_DRAW)):(r.bindBuffer(r.ARRAY_BUFFER,t._vertexBuffer),r.bufferSubData(r.ARRAY_BUFFER,0,t.vertices),r.vertexAttribPointer(n.attributes.aVertexPosition,2,r.FLOAT,!1,0,0),r.bindBuffer(r.ARRAY_BUFFER,t._uvBuffer),r.vertexAttribPointer(n.attributes.aTextureCoord,2,r.FLOAT,!1,0,0),r.activeTexture(r.TEXTURE0),i._glTextures[r.id]?r.bindTexture(r.TEXTURE_2D,i._glTextures[r.id]):this.renderer.updateTexture(i),r.bindBuffer(r.ELEMENT_ARRAY_BUFFER,t._indexBuffer),r.bufferSubData(r.ELEMENT_ARRAY_BUFFER,0,t.indices)),r.drawElements(s,t.indices.length,r.UNSIGNED_SHORT,0)},i.prototype._initWebGL=function(t){var e=this.renderer.gl;t._vertexBuffer=e.createBuffer(),t._indexBuffer=e.createBuffer(),t._uvBuffer=e.createBuffer(),e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferData(e.ARRAY_BUFFER,t.vertices,e.DYNAMIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferData(e.ARRAY_BUFFER,t.uvs,e.STATIC_DRAW),t.colors&&(t._colorBuffer=e.createBuffer(),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.bufferData(e.ARRAY_BUFFER,t.colors,e.STATIC_DRAW)),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer),e.bufferData(e.ELEMENT_ARRAY_BUFFER,t.indices,e.STATIC_DRAW)},i.prototype.flush=function(){},i.prototype.start=function(){this.currentShader=null},i.prototype.destroy=function(){n.ObjectRenderer.prototype.destroy.call(this)}},{"../../core":45,"../Mesh":146}],151:[function(t,e,r){function i(t){n.Shader.call(this,t,["precision lowp float;","attribute vec2 aVertexPosition;","attribute vec2 aTextureCoord;","uniform mat3 translationMatrix;","uniform mat3 projectionMatrix;","varying vec2 vTextureCoord;","void main(void){"," gl_Position = vec4((projectionMatrix * translationMatrix * vec3(aVertexPosition, 1.0)).xy, 0.0, 1.0);"," vTextureCoord = aTextureCoord;","}"].join("\n"),["precision lowp float;","varying vec2 vTextureCoord;","uniform float alpha;","uniform sampler2D uSampler;","void main(void){"," gl_FragColor = texture2D(uSampler, vTextureCoord) * alpha ;","}"].join("\n"),{alpha:{type:"1f",value:0},translationMatrix:{type:"mat3",value:new Float32Array(9)},projectionMatrix:{type:"mat3",value:new Float32Array(9)}},{aVertexPosition:0,aTextureCoord:0})}var n=t("../../core");i.prototype=Object.create(n.Shader.prototype),i.prototype.constructor=i,e.exports=i,n.ShaderManager.registerPlugin("meshShader",i)},{"../../core":45}],152:[function(t,e,r){Math.sign||(Math.sign=function(t){return t=+t,0===t||isNaN(t)?t:t>0?1:-1})},{}],153:[function(t,e,r){Object.assign||(Object.assign=t("object-assign"))},{"object-assign":26}],154:[function(t,e,r){t("./Object.assign"),t("./requestAnimationFrame"),t("./Math.sign")},{"./Math.sign":152,"./Object.assign":153,"./requestAnimationFrame":155}],155:[function(t,e,r){(function(t){if(Date.now&&Date.prototype.getTime||(Date.now=function(){return(new Date).getTime()}),!t.performance||!t.performance.now){var e=Date.now();t.performance||(t.performance={}),t.performance.now=function(){return Date.now()-e}}for(var r=Date.now(),i=["ms","moz","webkit","o"],n=0;ni&&(i=0),r=e,setTimeout(function(){r=Date.now(),t(performance.now())},i)}),t.cancelAnimationFrame||(t.cancelAnimationFrame=function(t){clearTimeout(t)})}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{}]},{},[136])(136)}); +!function(t){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=t();else if("function"==typeof define&&define.amd)define([],t);else{var e;e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:this,e.PIXI=t()}}(function(){var t;return function e(t,r,i){function n(s,a){if(!r[s]){if(!t[s]){var h="function"==typeof require&&require;if(!a&&h)return h(s,!0);if(o)return o(s,!0);var u=new Error("Cannot find module '"+s+"'");throw u.code="MODULE_NOT_FOUND",u}var l=r[s]={exports:{}};t[s][0].call(l.exports,function(e){var r=t[s][1][e];return n(r?r:e)},l,l.exports,e,t,r,i)}return r[s].exports}for(var o="function"==typeof require&&require,s=0;s=t.byteLength?i.bufferSubData(this.type,e,t):i.bufferData(this.type,t,this.drawType),this.data=t},n.prototype.bind=function(){var t=this.gl;t.bindBuffer(this.type,this.buffer)},n.createVertexBuffer=function(t,e,r){return new n(t,t.ARRAY_BUFFER,e,r)},n.createIndexBuffer=function(t,e,r){return new n(t,t.ELEMENT_ARRAY_BUFFER,e,r)},n.create=function(t,e,r,i){return new n(t,e,i)},e.exports=n},{}],3:[function(t,e,r){var i=t("./GLTexture"),n=function(t,e,r){this.gl=t,this.framebuffer=t.createFramebuffer(),this.stencil=null,this.texture=null,this.width=e||100,this.height=r||100};n.prototype.enableTexture=function(t){var e=this.gl;this.texture=t||new i(e),this.texture.bind(),this.bind(),e.framebufferTexture2D(e.FRAMEBUFFER,e.COLOR_ATTACHMENT0,e.TEXTURE_2D,this.texture.texture,0)},n.prototype.enableStencil=function(){if(!this.stencil){var t=this.gl;this.stencil=t.createRenderbuffer(),t.bindRenderbuffer(t.RENDERBUFFER,this.stencil),t.framebufferRenderbuffer(t.FRAMEBUFFER,t.DEPTH_STENCIL_ATTACHMENT,t.RENDERBUFFER,this.stencil),t.renderbufferStorage(t.RENDERBUFFER,t.DEPTH_STENCIL,this.width,this.height)}},n.prototype.clear=function(t,e,r,i){this.bind();var n=this.gl;n.clearColor(t,e,r,i),n.clear(n.COLOR_BUFFER_BIT)},n.prototype.bind=function(){var t=this.gl;t.bindFramebuffer(t.FRAMEBUFFER,this.framebuffer)},n.prototype.unbind=function(){gl.bindFramebuffer(gl.FRAMEBUFFER,null)},n.prototype.resize=function(t,e){var r=this.gl;this.width=t,this.height=e,this.texture&&this.texture.uploadData(null,t,e),this.stencil&&(r.bindRenderbuffer(r.RENDERBUFFER,this.stencil),r.renderbufferStorage(r.RENDERBUFFER,r.DEPTH_STENCIL,t,e))},n.prototype.destroy=function(){var t=this.gl;t.deleteFramebuffer(this.framebuffer)},n.createRGBA=function(t,e,r,o){var s=i.fromData(t,null,e,r);s.enableNearestScaling(),s.enableWrapClamp();var a=new n(t,e,r);return a.enableTexture(s),a},n.createFloat32=function(t,e,r,o){var s=new i.fromData(t,o,e,r);s.enableNearestScaling(),s.enableWrapClamp();var a=new n(t,e,r);return a.enableTexture(s),a},e.exports=n},{"./GLTexture":5}],4:[function(t,e,r){var i=t("./shader/compileProgram"),n=t("./shader/extractAttributes"),o=t("./shader/extractUniforms"),s=t("./shader/generateUniformAccessObject"),a=function(t,e,r){this.gl=t,this.program=i(t,e,r),this.attributes=n(t,this.program);var a=o(t,this.program);this.uniforms=s(t,a)};a.prototype.bind=function(){this.gl.useProgram(this.program)},a.prototype.destroy=function(){this.gl},e.exports=a},{"./shader/compileProgram":9,"./shader/extractAttributes":11,"./shader/extractUniforms":12,"./shader/generateUniformAccessObject":13}],5:[function(t,e,r){var i=function(t,e,r,i,n){this.gl=t,this.texture=t.createTexture(),this.mipmap=!1,this.premultiplyAlpha=!1,this.width=e||0,this.height=r||0,this.format=i||t.RGBA,this.type=n||t.UNSIGNED_BYTE};i.prototype.upload=function(t){this.bind();var e=this.gl;this.width=t.width,this.height=t.height,e.pixelStorei(e.UNPACK_PREMULTIPLY_ALPHA_WEBGL,this.premultiplyAlpha),e.texImage2D(e.TEXTURE_2D,0,this.format,this.format,this.type,t)};var n=!1;i.prototype.uploadData=function(t,e,r){if(this.bind(),this.width=e||this.width,this.height=r||this.height,t instanceof Float32Array){if(!n){var i=gl.getExtension("OES_texture_float");if(!i)throw new Error("floating point textures not available");n=!0}this.type=gl.FLOAT}else this.type=gl.UNSIGNED_BYTE;gl.pixelStorei(gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL,this.premultiplyAlpha),gl.texImage2D(gl.TEXTURE_2D,0,this.format,this.width,this.height,0,this.format,this.type,t||null)},i.prototype.bind=function(t){var e=this.gl;void 0!==t&&e.activeTexture(e.TEXTURE0+t),e.bindTexture(e.TEXTURE_2D,this.texture)},i.prototype.unbind=function(){var t=this.gl;t.bindTexture(t.TEXTURE_2D,null)},i.prototype.minFilter=function(t){var e=this.gl;this.bind(),this.mipmap?e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MIN_FILTER,t?e.LINEAR_MIPMAP_LINEAR:e.NEAREST_MIPMAP_NEAREST):e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MIN_FILTER,t?e.LINEAR:e.NEAREST)},i.prototype.magFilter=function(t){var e=this.gl;this.bind(),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MAG_FILTER,t?e.LINEAR:e.NEAREST)},i.prototype.enableMipmap=function(){this.bind(),this.mipmap=!0,gl.generateMipmap(gl.TEXTURE_2D)},i.prototype.enableLinearScaling=function(){this.minFilter(!0),this.magFilter(!0)},i.prototype.enableNearestScaling=function(){this.minFilter(!1),this.magFilter(!1)},i.prototype.enableWrapClamp=function(){var t=this.gl;this.bind(),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_WRAP_S,t.CLAMP_TO_EDGE),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_WRAP_T,t.CLAMP_TO_EDGE)},i.prototype.enableWrapRepeat=function(){var t=this.gl;this.bind(),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_WRAP_S,t.REPEAT),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_WRAP_T,t.REPEAT)},i.prototype.destroy=function(){var t=this.gl;t.deleteTexture(this.texture)},i.fromSource=function(t,e,r){var n=new i(t);return n.premultiplyAlpha=r||!1,n.upload(e),n},i.fromData=function(t,e,r,n){var o=new i(t);return o.uploadData(e,r,n),o},e.exports=i},{}],6:[function(t,e,r){function i(t){this.nativeVaoExtension=t.getExtension("OES_vertex_array_object")||t.getExtension("MOZ_OES_vertex_array_object")||t.getExtension("WEBKIT_OES_vertex_array_object"),this.nativeVaoExtension&&(this.nativeVao=this.nativeVaoExtension.createVertexArrayOES()),this.gl=t,this.attributes=[],this.indexBuffer=null,this.dirty=!1}i.prototype.constructor=i,e.exports=i,i.prototype.bind=function(){this.nativeVao?(this.nativeVaoExtension.bindVertexArrayOES(this.nativeVao),this.dirty&&(this.dirty=!1,this.activate())):this.activate()},i.prototype.unbind=function(){this.nativeVao&&this.nativeVaoExtension.bindVertexArrayOES(null)},i.prototype.activate=function(){for(var t=this.gl,e=0;es;s++){var a=t.getActiveAttrib(e,s),h=i(t,a.type);r[a.name]={type:h,size:n(h),location:t.getAttribLocation(e,a.name),pointer:function(e,r,i,n){t.vertexAttribPointer(this.location,this.size,e||t.FLOAT,r||!1,i||0,n||0)}}}return r};e.exports=o},{"./mapSize":14,"./mapType":15}],12:[function(t,e,r){var i=t("./mapType"),n=t("./defaultValue"),o=function(t,e){for(var r={},o=t.getProgramParameter(e,t.ACTIVE_UNIFORMS),s=0;o>s;s++){var a=t.getActiveUniform(e,s),h=a.name.replace(/\[.*?\]/,""),u=i(t,a.type);r[h]={type:u,size:a.size,location:t.getUniformLocation(e,h),value:n(u,a.size)}}return r};e.exports=o},{"./defaultValue":10,"./mapType":15}],13:[function(t,e,r){var i=function(t,e){var r={data:{}};r.gl=t;for(var i=Object.keys(e),a=0;a=0&&t.length%1===0}function c(t,e){for(var r=-1,i=t.length;++ri?i:null}):(r=X(t),e=r.length,function(){return i++,e>i?r[i]:null})}function y(t,e){return e=null==e?t.length-1:+e,function(){for(var r=Math.max(arguments.length-e,0),i=Array(r),n=0;r>n;n++)i[n]=arguments[n+e];switch(e){case 0:return t.call(this,i);case 1:return t.call(this,arguments[0],i)}}}function x(t){return function(e,r,i){return t(e,i)}}function b(t){return function(e,r,i){i=u(i||n),e=e||[];var o=m(e);if(0>=t)return i(null);var s=!1,a=0,l=!1;!function c(){if(s&&0>=a)return i(null);for(;t>a&&!l;){var n=o();if(null===n)return s=!0,void(0>=a&&i(null));a+=1,r(e[n],n,h(function(t){a-=1,t?(i(t),l=!0):c()}))}}()}}function _(t){return function(e,r,i){return t(N.eachOf,e,r,i)}}function T(t){return function(e,r,i,n){return t(b(r),e,i,n)}}function E(t){return function(e,r,i){return t(N.eachOfSeries,e,r,i)}}function S(t,e,r,i){i=u(i||n),e=e||[];var o=l(e)?[]:{};t(e,function(t,e,i){r(t,function(t,r){o[e]=r,i(t)})},function(t){i(t,o)})}function w(t,e,r,i){var n=[];t(e,function(t,e,i){r(t,function(r){r&&n.push({index:e,value:t}),i()})},function(){i(p(n.sort(function(t,e){return t.index-e.index}),function(t){return t.value}))})}function C(t,e,r,i){w(t,e,function(t,e){r(t,function(t){e(!t)})},i)}function A(t,e,r){return function(i,n,o,s){function a(){s&&s(r(!1,void 0))}function h(t,i,n){return s?void o(t,function(i){s&&e(i)&&(s(r(!0,t)),s=o=!1),n()}):n()}arguments.length>3?t(i,n,h,a):(s=o,o=n,t(i,h,a))}}function M(t,e){return e}function R(t,e,r){r=r||n;var i=l(e)?[]:{};t(e,function(t,e,r){t(y(function(t,n){n.length<=1&&(n=n[0]),i[e]=n,r(t)}))},function(t){r(t,i)})}function O(t,e,r,i){var n=[];t(e,function(t,e,i){r(t,function(t,e){n=n.concat(e||[]),i(t)})},function(t){i(t,n)})}function P(t,e,r){function i(t,e,r,i){if(null!=i&&"function"!=typeof i)throw new Error("task callback must be a function");return t.started=!0,j(e)||(e=[e]),0===e.length&&t.idle()?N.setImmediate(function(){t.drain()}):(c(e,function(e){var o={data:e,callback:i||n};r?t.tasks.unshift(o):t.tasks.push(o),t.tasks.length===t.concurrency&&t.saturated()}),void N.setImmediate(t.process))}function o(t,e){return function(){s-=1;var r=!1,i=arguments;c(e,function(t){c(a,function(e,i){e!==t||r||(a.splice(i,1),r=!0)}),t.callback.apply(t,i)}),t.tasks.length+s===0&&t.drain(),t.process()}}if(null==e)e=1;else if(0===e)throw new Error("Concurrency must not be zero");var s=0,a=[],u={tasks:[],concurrency:e,payload:r,saturated:n,empty:n,drain:n,started:!1,paused:!1,push:function(t,e){i(u,t,!1,e)},kill:function(){u.drain=n,u.tasks=[]},unshift:function(t,e){i(u,t,!0,e)},process:function(){if(!u.paused&&s=e;e++)N.setImmediate(u.process)}}};return u}function D(t){return y(function(e,r){e.apply(null,r.concat([y(function(e,r){"object"==typeof console&&(e?console.error&&console.error(e):console[t]&&c(r,function(e){console[t](e)}))})]))})}function F(t){return function(e,r,i){t(d(e),r,i)}}function L(t){return y(function(e,r){var i=y(function(r){var i=this,n=r.pop();return t(e,function(t,e,n){t.apply(i,r.concat([n]))},n)});return r.length?i.apply(this,r):i})}function B(t){return y(function(e){var r=e.pop();e.push(function(){var t=arguments;i?N.setImmediate(function(){r.apply(null,t)}):r.apply(null,t)});var i=!0;t.apply(this,e),i=!1})}var I,N={},U="object"==typeof self&&self.self===self&&self||"object"==typeof i&&i.global===i&&i||this;null!=U&&(I=U.async),N.noConflict=function(){return U.async=I,N};var k=Object.prototype.toString,j=Array.isArray||function(t){return"[object Array]"===k.call(t)},G=function(t){var e=typeof t;return"function"===e||"object"===e&&!!t},X=Object.keys||function(t){var e=[];for(var r in t)t.hasOwnProperty(r)&&e.push(r);return e},Y="function"==typeof setImmediate&&setImmediate,z=Y?function(t){Y(t)}:function(t){setTimeout(t,0)};"object"==typeof e&&"function"==typeof e.nextTick?N.nextTick=e.nextTick:N.nextTick=z,N.setImmediate=Y?z:N.nextTick,N.forEach=N.each=function(t,e,r){return N.eachOf(t,x(e),r)},N.forEachSeries=N.eachSeries=function(t,e,r){return N.eachOfSeries(t,x(e),r)},N.forEachLimit=N.eachLimit=function(t,e,r,i){return b(e)(t,x(r),i)},N.forEachOf=N.eachOf=function(t,e,r){function i(t){a--,t?r(t):null===o&&0>=a&&r(null)}r=u(r||n),t=t||[];for(var o,s=m(t),a=0;null!=(o=s());)a+=1,e(t[o],o,h(i));0===a&&r(null)},N.forEachOfSeries=N.eachOfSeries=function(t,e,r){function i(){var n=!0;return null===s?r(null):(e(t[s],s,h(function(t){if(t)r(t);else{if(s=o(),null===s)return r(null);n?N.setImmediate(i):i()}})),void(n=!1))}r=u(r||n),t=t||[];var o=m(t),s=o();i()},N.forEachOfLimit=N.eachOfLimit=function(t,e,r,i){b(e)(t,r,i)},N.map=_(S),N.mapSeries=E(S),N.mapLimit=T(S),N.inject=N.foldl=N.reduce=function(t,e,r,i){N.eachOfSeries(t,function(t,i,n){r(e,t,function(t,r){e=r,n(t)})},function(t){i(t,e)})},N.foldr=N.reduceRight=function(t,e,r,i){var n=p(t,o).reverse();N.reduce(n,e,r,i)},N.transform=function(t,e,r,i){3===arguments.length&&(i=r,r=e,e=j(t)?[]:{}),N.eachOf(t,function(t,i,n){r(e,t,i,n)},function(t){i(t,e)})},N.select=N.filter=_(w),N.selectLimit=N.filterLimit=T(w),N.selectSeries=N.filterSeries=E(w),N.reject=_(C),N.rejectLimit=T(C),N.rejectSeries=E(C),N.any=N.some=A(N.eachOf,s,o),N.someLimit=A(N.eachOfLimit,s,o),N.all=N.every=A(N.eachOf,a,a),N.everyLimit=A(N.eachOfLimit,a,a),N.detect=A(N.eachOf,o,M),N.detectSeries=A(N.eachOfSeries,o,M),N.detectLimit=A(N.eachOfLimit,o,M),N.sortBy=function(t,e,r){function i(t,e){var r=t.criteria,i=e.criteria;return i>r?-1:r>i?1:0}N.map(t,function(t,r){e(t,function(e,i){e?r(e):r(null,{value:t,criteria:i})})},function(t,e){return t?r(t):void r(null,p(e.sort(i),function(t){return t.value}))})},N.auto=function(t,e,r){function i(t){d.unshift(t)}function o(t){var e=g(d,t);e>=0&&d.splice(e,1)}function s(){h--,c(d.slice(0),function(t){t()})}r||(r=e,e=null),r=u(r||n);var a=X(t),h=a.length;if(!h)return r(null);e||(e=h);var l={},p=0,d=[];i(function(){h||r(null,l)}),c(a,function(n){function a(){return e>p&&f(m,function(t,e){return t&&l.hasOwnProperty(e)},!0)&&!l.hasOwnProperty(n)}function h(){a()&&(p++,o(h),c[c.length-1](d,l))}for(var u,c=j(t[n])?t[n]:[t[n]],d=y(function(t,e){if(p--,e.length<=1&&(e=e[0]),t){var i={};v(l,function(t,e){i[e]=t}),i[n]=e,r(t,i)}else l[n]=e,N.setImmediate(s)}),m=c.slice(0,c.length-1),x=m.length;x--;){if(!(u=t[m[x]]))throw new Error("Has inexistant dependency");if(j(u)&&g(u,n)>=0)throw new Error("Has cyclic dependencies")}a()?(p++,c[c.length-1](d,l)):i(h)})},N.retry=function(t,e,r){function i(t,e){if("number"==typeof e)t.times=parseInt(e,10)||o;else{if("object"!=typeof e)throw new Error("Unsupported argument type for 'times': "+typeof e);t.times=parseInt(e.times,10)||o,t.interval=parseInt(e.interval,10)||s}}function n(t,e){function r(t,r){return function(i){t(function(t,e){i(!t||r,{err:t,result:e})},e)}}function i(t){return function(e){setTimeout(function(){e(null)},t)}}for(;h.times;){var n=!(h.times-=1);a.push(r(h.task,n)),!n&&h.interval>0&&a.push(i(h.interval))}N.series(a,function(e,r){r=r[r.length-1],(t||h.callback)(r.err,r.result)})}var o=5,s=0,a=[],h={times:o,interval:s},u=arguments.length;if(1>u||u>3)throw new Error("Invalid arguments - must be either (task), (task, callback), (times, task) or (times, task, callback)");return 2>=u&&"function"==typeof t&&(r=e,e=t),"function"!=typeof t&&i(h,t),h.callback=r,h.task=e,h.callback?n():n},N.waterfall=function(t,e){function r(t){return y(function(i,n){if(i)e.apply(null,[i].concat(n));else{var o=t.next();o?n.push(r(o)):n.push(e),B(t).apply(null,n)}})}if(e=u(e||n),!j(t)){var i=new Error("First argument to waterfall must be an array of functions");return e(i)}return t.length?void r(N.iterator(t))():e()},N.parallel=function(t,e){R(N.eachOf,t,e)},N.parallelLimit=function(t,e,r){R(b(e),t,r)},N.series=function(t,e){R(N.eachOfSeries,t,e)},N.iterator=function(t){function e(r){function i(){return t.length&&t[r].apply(null,arguments),i.next()}return i.next=function(){return ri;){var o=i+(n-i+1>>>1);r(e,t[o])>=0?i=o:n=o-1}return i}function o(t,e,o,s){if(null!=s&&"function"!=typeof s)throw new Error("task callback must be a function");return t.started=!0,j(e)||(e=[e]),0===e.length?N.setImmediate(function(){t.drain()}):void c(e,function(e){var a={data:e,priority:o,callback:"function"==typeof s?s:n};t.tasks.splice(i(t.tasks,a,r)+1,0,a),t.tasks.length===t.concurrency&&t.saturated(),N.setImmediate(t.process)})}var s=N.queue(t,e);return s.push=function(t,e,r){o(s,t,e,r)},delete s.unshift,s},N.cargo=function(t,e){return P(t,1,e)},N.log=D("log"),N.dir=D("dir"),N.memoize=function(t,e){var r={},i={};e=e||o;var n=y(function(n){var o=n.pop(),s=e.apply(null,n);s in r?N.setImmediate(function(){o.apply(null,r[s])}):s in i?i[s].push(o):(i[s]=[o],t.apply(null,n.concat([y(function(t){r[s]=t;var e=i[s];delete i[s];for(var n=0,o=e.length;o>n;n++)e[n].apply(null,t)})])))});return n.memo=r,n.unmemoized=t,n},N.unmemoize=function(t){return function(){return(t.unmemoized||t).apply(null,arguments)}},N.times=F(N.map),N.timesSeries=F(N.mapSeries),N.timesLimit=function(t,e,r,i){return N.mapLimit(d(t),e,r,i)},N.seq=function(){var t=arguments;return y(function(e){var r=this,i=e[e.length-1];"function"==typeof i?e.pop():i=n,N.reduce(t,e,function(t,e,i){e.apply(r,t.concat([y(function(t,e){i(t,e)})]))},function(t,e){i.apply(r,[t].concat(e))})})},N.compose=function(){return N.seq.apply(null,Array.prototype.reverse.call(arguments))},N.applyEach=L(N.eachOf),N.applyEachSeries=L(N.eachOfSeries),N.forever=function(t,e){function r(t){return t?i(t):void o(r)}var i=h(e||n),o=B(t);r()},N.ensureAsync=B,N.constant=y(function(t){var e=[null].concat(t);return function(t){return t.apply(this,e)}}),N.wrapSync=N.asyncify=function(t){return y(function(e){var r,i=e.pop();try{r=t.apply(this,e)}catch(n){return i(n)}G(r)&&"function"==typeof r.then?r.then(function(t){i(null,t)})["catch"](function(t){i(t.message?t:new Error(t))}):i(null,r)})},"object"==typeof r&&r.exports?r.exports=N:"function"==typeof t&&t.amd?t([],function(){return N}):U.async=N}()}).call(this,e("_process"),"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{_process:18}],17:[function(t,e,r){(function(t){function e(t,e){for(var r=0,i=t.length-1;i>=0;i--){var n=t[i];"."===n?t.splice(i,1):".."===n?(t.splice(i,1),r++):r&&(t.splice(i,1),r--)}if(e)for(;r--;r)t.unshift("..");return t}function i(t,e){if(t.filter)return t.filter(e);for(var r=[],i=0;i=-1&&!n;o--){var s=o>=0?arguments[o]:t.cwd();if("string"!=typeof s)throw new TypeError("Arguments to path.resolve must be strings");s&&(r=s+"/"+r,n="/"===s.charAt(0))}return r=e(i(r.split("/"),function(t){return!!t}),!n).join("/"),(n?"/":"")+r||"."},r.normalize=function(t){var n=r.isAbsolute(t),o="/"===s(t,-1);return t=e(i(t.split("/"),function(t){return!!t}),!n).join("/"),t||n||(t="."),t&&o&&(t+="/"),(n?"/":"")+t},r.isAbsolute=function(t){return"/"===t.charAt(0)},r.join=function(){var t=Array.prototype.slice.call(arguments,0);return r.normalize(i(t,function(t,e){if("string"!=typeof t)throw new TypeError("Arguments to path.join must be strings");return t}).join("/"))},r.relative=function(t,e){function i(t){for(var e=0;e=0&&""===t[r];r--);return e>r?[]:t.slice(e,r-e+1)}t=r.resolve(t).substr(1),e=r.resolve(e).substr(1);for(var n=i(t.split("/")),o=i(e.split("/")),s=Math.min(n.length,o.length),a=s,h=0;s>h;h++)if(n[h]!==o[h]){a=h;break}for(var u=[],h=a;he&&(e=t.length+e),t.substr(e,r)}}).call(this,t("_process"))},{_process:18}],18:[function(t,e,r){function i(){l=!1,a.length?u=a.concat(u):c=-1,u.length&&n()}function n(){if(!l){var t=setTimeout(i);l=!0;for(var e=u.length;e;){for(a=u,u=[];++c1)for(var r=1;r1&&(i=r[0]+"@",t=r[1]),t=t.replace(F,".");var n=t.split("."),o=s(n,e).join(".");return i+o}function h(t){for(var e,r,i=[],n=0,o=t.length;o>n;)e=t.charCodeAt(n++),e>=55296&&56319>=e&&o>n?(r=t.charCodeAt(n++),56320==(64512&r)?i.push(((1023&e)<<10)+(1023&r)+65536):(i.push(e),n--)):i.push(e);return i}function u(t){return s(t,function(t){var e="";return t>65535&&(t-=65536,e+=N(t>>>10&1023|55296),t=56320|1023&t),e+=N(t)}).join("")}function l(t){return 10>t-48?t-22:26>t-65?t-65:26>t-97?t-97:E}function c(t,e){return t+22+75*(26>t)-((0!=e)<<5)}function p(t,e,r){var i=0;for(t=r?I(t/A):t>>1,t+=I(t/e);t>B*w>>1;i+=E)t=I(t/B);return I(i+(B+1)*t/(t+C))}function d(t){var e,r,i,n,s,a,h,c,d,f,v=[],g=t.length,m=0,y=R,x=M;for(r=t.lastIndexOf(O),0>r&&(r=0),i=0;r>i;++i)t.charCodeAt(i)>=128&&o("not-basic"),v.push(t.charCodeAt(i));for(n=r>0?r+1:0;g>n;){for(s=m,a=1,h=E;n>=g&&o("invalid-input"),c=l(t.charCodeAt(n++)),(c>=E||c>I((T-m)/a))&&o("overflow"),m+=c*a,d=x>=h?S:h>=x+w?w:h-x,!(d>c);h+=E)f=E-d,a>I(T/f)&&o("overflow"),a*=f;e=v.length+1,x=p(m-s,e,0==s),I(m/e)>T-y&&o("overflow"),y+=I(m/e),m%=e,v.splice(m++,0,y)}return u(v)}function f(t){var e,r,i,n,s,a,u,l,d,f,v,g,m,y,x,b=[];for(t=h(t),g=t.length,e=R,r=0,s=M,a=0;g>a;++a)v=t[a],128>v&&b.push(N(v));for(i=n=b.length,n&&b.push(O);g>i;){for(u=T,a=0;g>a;++a)v=t[a],v>=e&&u>v&&(u=v);for(m=i+1,u-e>I((T-r)/m)&&o("overflow"),r+=(u-e)*m,e=u,a=0;g>a;++a)if(v=t[a],e>v&&++r>T&&o("overflow"),v==e){for(l=r,d=E;f=s>=d?S:d>=s+w?w:d-s,!(f>l);d+=E)x=l-f,y=E-f,b.push(N(c(f+x%y,0))),l=I(x/y);b.push(N(c(l,0))),s=p(r,m,i==n),r=0,++i}++r,++e}return b.join("")}function v(t){return a(t,function(t){return P.test(t)?d(t.slice(4).toLowerCase()):t})}function g(t){return a(t,function(t){return D.test(t)?"xn--"+f(t):t})}var m="object"==typeof i&&i&&!i.nodeType&&i,y="object"==typeof r&&r&&!r.nodeType&&r,x="object"==typeof e&&e;(x.global===x||x.window===x||x.self===x)&&(n=x);var b,_,T=2147483647,E=36,S=1,w=26,C=38,A=700,M=72,R=128,O="-",P=/^xn--/,D=/[^\x20-\x7E]/,F=/[\x2E\u3002\uFF0E\uFF61]/g,L={overflow:"Overflow: input needs wider integers to process","not-basic":"Illegal input >= 0x80 (not a basic code point)","invalid-input":"Invalid input"},B=E-S,I=Math.floor,N=String.fromCharCode;if(b={version:"1.3.2",ucs2:{decode:h,encode:u},decode:d,encode:f,toASCII:g,toUnicode:v},"function"==typeof t&&"object"==typeof t.amd&&t.amd)t("punycode",function(){return b});else if(m&&y)if(r.exports==m)y.exports=b;else for(_ in b)b.hasOwnProperty(_)&&(m[_]=b[_]);else n.punycode=b}(this)}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{}],20:[function(t,e,r){"use strict";function i(t,e){return Object.prototype.hasOwnProperty.call(t,e)}e.exports=function(t,e,r,o){e=e||"&",r=r||"=";var s={};if("string"!=typeof t||0===t.length)return s;var a=/\+/g;t=t.split(e);var h=1e3;o&&"number"==typeof o.maxKeys&&(h=o.maxKeys);var u=t.length;h>0&&u>h&&(u=h);for(var l=0;u>l;++l){var c,p,d,f,v=t[l].replace(a,"%20"),g=v.indexOf(r);g>=0?(c=v.substr(0,g),p=v.substr(g+1)):(c=v,p=""),d=decodeURIComponent(c), +f=decodeURIComponent(p),i(s,d)?n(s[d])?s[d].push(f):s[d]=[s[d],f]:s[d]=f}return s};var n=Array.isArray||function(t){return"[object Array]"===Object.prototype.toString.call(t)}},{}],21:[function(t,e,r){"use strict";function i(t,e){if(t.map)return t.map(e);for(var r=[],i=0;i",'"',"`"," ","\r","\n"," "],g=["{","}","|","\\","^","`"].concat(v),m=["'"].concat(g),y=["%","/","?",";","#"].concat(m),x=["/","?","#"],b=255,_=/^[a-z0-9A-Z_-]{0,63}$/,T=/^([a-z0-9A-Z_-]{0,63})(.*)$/,E={javascript:!0,"javascript:":!0},S={javascript:!0,"javascript:":!0},w={http:!0,https:!0,ftp:!0,gopher:!0,file:!0,"http:":!0,"https:":!0,"ftp:":!0,"gopher:":!0,"file:":!0},C=t("querystring");i.prototype.parse=function(t,e,r){if(!h(t))throw new TypeError("Parameter 'url' must be a string, not "+typeof t);var i=t;i=i.trim();var n=d.exec(i);if(n){n=n[0];var o=n.toLowerCase();this.protocol=o,i=i.substr(n.length)}if(r||n||i.match(/^\/\/[^@\/]+@[^@\/]+/)){var s="//"===i.substr(0,2);!s||n&&S[n]||(i=i.substr(2),this.slashes=!0)}if(!S[n]&&(s||n&&!w[n])){for(var a=-1,u=0;ul)&&(a=l)}var c,f;f=-1===a?i.lastIndexOf("@"):i.lastIndexOf("@",a),-1!==f&&(c=i.slice(0,f),i=i.slice(f+1),this.auth=decodeURIComponent(c)),a=-1;for(var u=0;ul)&&(a=l)}-1===a&&(a=i.length),this.host=i.slice(0,a),i=i.slice(a),this.parseHost(),this.hostname=this.hostname||"";var v="["===this.hostname[0]&&"]"===this.hostname[this.hostname.length-1];if(!v)for(var g=this.hostname.split(/\./),u=0,A=g.length;A>u;u++){var M=g[u];if(M&&!M.match(_)){for(var R="",O=0,P=M.length;P>O;O++)R+=M.charCodeAt(O)>127?"x":M[O];if(!R.match(_)){var D=g.slice(0,u),F=g.slice(u+1),L=M.match(T);L&&(D.push(L[1]),F.unshift(L[2])),F.length&&(i="/"+F.join(".")+i),this.hostname=D.join(".");break}}}if(this.hostname.length>b?this.hostname="":this.hostname=this.hostname.toLowerCase(),!v){for(var B=this.hostname.split("."),I=[],u=0;uu;u++){var j=m[u],G=encodeURIComponent(j);G===j&&(G=escape(j)),i=i.split(j).join(G)}var X=i.indexOf("#");-1!==X&&(this.hash=i.substr(X),i=i.slice(0,X));var Y=i.indexOf("?");if(-1!==Y?(this.search=i.substr(Y),this.query=i.substr(Y+1),e&&(this.query=C.parse(this.query)),i=i.slice(0,Y)):e&&(this.search="",this.query={}),i&&(this.pathname=i),w[o]&&this.hostname&&!this.pathname&&(this.pathname="/"),this.pathname||this.search){var U=this.pathname||"",N=this.search||"";this.path=U+N}return this.href=this.format(),this},i.prototype.format=function(){var t=this.auth||"";t&&(t=encodeURIComponent(t),t=t.replace(/%3A/i,":"),t+="@");var e=this.protocol||"",r=this.pathname||"",i=this.hash||"",n=!1,o="";this.host?n=t+this.host:this.hostname&&(n=t+(-1===this.hostname.indexOf(":")?this.hostname:"["+this.hostname+"]"),this.port&&(n+=":"+this.port)),this.query&&u(this.query)&&Object.keys(this.query).length&&(o=C.stringify(this.query));var s=this.search||o&&"?"+o||"";return e&&":"!==e.substr(-1)&&(e+=":"),this.slashes||(!e||w[e])&&n!==!1?(n="//"+(n||""),r&&"/"!==r.charAt(0)&&(r="/"+r)):n||(n=""),i&&"#"!==i.charAt(0)&&(i="#"+i),s&&"?"!==s.charAt(0)&&(s="?"+s),r=r.replace(/[?#]/g,function(t){return encodeURIComponent(t)}),s=s.replace("#","%23"),e+n+r+s+i},i.prototype.resolve=function(t){return this.resolveObject(n(t,!1,!0)).format()},i.prototype.resolveObject=function(t){if(h(t)){var e=new i;e.parse(t,!1,!0),t=e}var r=new i;if(Object.keys(this).forEach(function(t){r[t]=this[t]},this),r.hash=t.hash,""===t.href)return r.href=r.format(),r;if(t.slashes&&!t.protocol)return Object.keys(t).forEach(function(e){"protocol"!==e&&(r[e]=t[e])}),w[r.protocol]&&r.hostname&&!r.pathname&&(r.path=r.pathname="/"),r.href=r.format(),r;if(t.protocol&&t.protocol!==r.protocol){if(!w[t.protocol])return Object.keys(t).forEach(function(e){r[e]=t[e]}),r.href=r.format(),r;if(r.protocol=t.protocol,t.host||S[t.protocol])r.pathname=t.pathname;else{for(var n=(t.pathname||"").split("/");n.length&&!(t.host=n.shift()););t.host||(t.host=""),t.hostname||(t.hostname=""),""!==n[0]&&n.unshift(""),n.length<2&&n.unshift(""),r.pathname=n.join("/")}if(r.search=t.search,r.query=t.query,r.host=t.host||"",r.auth=t.auth,r.hostname=t.hostname||t.host,r.port=t.port,r.pathname||r.search){var o=r.pathname||"",s=r.search||"";r.path=o+s}return r.slashes=r.slashes||t.slashes,r.href=r.format(),r}var a=r.pathname&&"/"===r.pathname.charAt(0),u=t.host||t.pathname&&"/"===t.pathname.charAt(0),p=u||a||r.host&&t.pathname,d=p,f=r.pathname&&r.pathname.split("/")||[],n=t.pathname&&t.pathname.split("/")||[],v=r.protocol&&!w[r.protocol];if(v&&(r.hostname="",r.port=null,r.host&&(""===f[0]?f[0]=r.host:f.unshift(r.host)),r.host="",t.protocol&&(t.hostname=null,t.port=null,t.host&&(""===n[0]?n[0]=t.host:n.unshift(t.host)),t.host=null),p=p&&(""===n[0]||""===f[0])),u)r.host=t.host||""===t.host?t.host:r.host,r.hostname=t.hostname||""===t.hostname?t.hostname:r.hostname,r.search=t.search,r.query=t.query,f=n;else if(n.length)f||(f=[]),f.pop(),f=f.concat(n),r.search=t.search,r.query=t.query;else if(!c(t.search)){if(v){r.hostname=r.host=f.shift();var g=r.host&&r.host.indexOf("@")>0?r.host.split("@"):!1;g&&(r.auth=g.shift(),r.host=r.hostname=g.shift())}return r.search=t.search,r.query=t.query,l(r.pathname)&&l(r.search)||(r.path=(r.pathname?r.pathname:"")+(r.search?r.search:"")),r.href=r.format(),r}if(!f.length)return r.pathname=null,r.search?r.path="/"+r.search:r.path=null,r.href=r.format(),r;for(var m=f.slice(-1)[0],y=(r.host||t.host)&&("."===m||".."===m)||""===m,x=0,b=f.length;b>=0;b--)m=f[b],"."==m?f.splice(b,1):".."===m?(f.splice(b,1),x++):x&&(f.splice(b,1),x--);if(!p&&!d)for(;x--;x)f.unshift("..");!p||""===f[0]||f[0]&&"/"===f[0].charAt(0)||f.unshift(""),y&&"/"!==f.join("/").substr(-1)&&f.push("");var _=""===f[0]||f[0]&&"/"===f[0].charAt(0);if(v){r.hostname=r.host=_?"":f.length?f.shift():"";var g=r.host&&r.host.indexOf("@")>0?r.host.split("@"):!1;g&&(r.auth=g.shift(),r.host=r.hostname=g.shift())}return p=p||r.host&&f.length,p&&!_&&f.unshift(""),f.length?r.pathname=f.join("/"):(r.pathname=null,r.path=null),l(r.pathname)&&l(r.search)||(r.path=(r.pathname?r.pathname:"")+(r.search?r.search:"")),r.auth=t.auth||r.auth,r.slashes=r.slashes||t.slashes,r.href=r.format(),r},i.prototype.parseHost=function(){var t=this.host,e=f.exec(t);e&&(e=e[0],":"!==e&&(this.port=e.substr(1)),t=t.substr(0,t.length-e.length)),t&&(this.hostname=t)}},{punycode:19,querystring:22}],24:[function(t,e,r){"use strict";function i(t,e,r){r=r||2;var i=e&&e.length,o=i?e[0]*r:t.length,a=n(t,0,o,r,!0),h=[];if(!a)return h;var u,l,p,d,f,v,g;if(i&&(a=c(t,e,a,r)),t.length>80*r){u=p=t[0],l=d=t[1];for(var m=r;o>m;m+=r)f=t[m],v=t[m+1],u>f&&(u=f),l>v&&(l=v),f>p&&(p=f),v>d&&(d=v);g=Math.max(p-u,d-l)}return s(a,h,r,u,l,g),h}function n(t,e,r,i,n){var o,s,a,h=0;for(o=e,s=r-i;r>o;o+=i)h+=(t[s]-t[o])*(t[o+1]+t[s+1]),s=o;if(n===h>0)for(o=e;r>o;o+=i)a=M(o,t[o],t[o+1],a);else for(o=r-i;o>=e;o-=i)a=M(o,t[o],t[o+1],a);return a}function o(t,e){if(!t)return t;e||(e=t);var r,i=t;do if(r=!1,i.steiner||!T(i,i.next)&&0!==_(i.prev,i,i.next))i=i.next;else{if(R(i),i=e=i.prev,i===i.next)return null;r=!0}while(r||i!==e);return e}function s(t,e,r,i,n,c,p){if(t){!p&&c&&v(t,i,n,c);for(var d,f,g=t;t.prev!==t.next;)if(d=t.prev,f=t.next,c?h(t,i,n,c):a(t))e.push(d.i/r),e.push(t.i/r),e.push(f.i/r),R(t),t=f.next,g=f.next;else if(t=f,t===g){p?1===p?(t=u(t,e,r),s(t,e,r,i,n,c,2)):2===p&&l(t,e,r,i,n,c):s(o(t),e,r,i,n,c,1);break}}}function a(t){var e=t.prev,r=t,i=t.next;if(_(e,r,i)>=0)return!1;for(var n=t.next.next;n!==t.prev;){if(x(e.x,e.y,r.x,r.y,i.x,i.y,n.x,n.y)&&_(n.prev,n,n.next)>=0)return!1;n=n.next}return!0}function h(t,e,r,i){var n=t.prev,o=t,s=t.next;if(_(n,o,s)>=0)return!1;for(var a=n.xo.x?n.x>s.x?n.x:s.x:o.x>s.x?o.x:s.x,l=n.y>o.y?n.y>s.y?n.y:s.y:o.y>s.y?o.y:s.y,c=m(a,h,e,r,i),p=m(u,l,e,r,i),d=t.nextZ;d&&d.z<=p;){if(d!==t.prev&&d!==t.next&&x(n.x,n.y,o.x,o.y,s.x,s.y,d.x,d.y)&&_(d.prev,d,d.next)>=0)return!1;d=d.nextZ}for(d=t.prevZ;d&&d.z>=c;){if(d!==t.prev&&d!==t.next&&x(n.x,n.y,o.x,o.y,s.x,s.y,d.x,d.y)&&_(d.prev,d,d.next)>=0)return!1;d=d.prevZ}return!0}function u(t,e,r){var i=t;do{var n=i.prev,o=i.next.next;E(n,i,i.next,o)&&w(n,o)&&w(o,n)&&(e.push(n.i/r),e.push(i.i/r),e.push(o.i/r),R(i),R(i.next),i=t=o),i=i.next}while(i!==t);return i}function l(t,e,r,i,n,a){var h=t;do{for(var u=h.next.next;u!==h.prev;){if(h.i!==u.i&&b(h,u)){var l=A(h,u);return h=o(h,h.next),l=o(l,l.next),s(h,e,r,i,n,a),void s(l,e,r,i,n,a)}u=u.next}h=h.next}while(h!==t)}function c(t,e,r,i){var s,a,h,u,l,c=[];for(s=0,a=e.length;a>s;s++)h=e[s]*i,u=a-1>s?e[s+1]*i:t.length,l=n(t,h,u,i,!1),l===l.next&&(l.steiner=!0),c.push(y(l));for(c.sort(p),s=0;s=i.next.y){var a=i.x+(o-i.y)*(i.next.x-i.x)/(i.next.y-i.y);n>=a&&a>s&&(s=a,r=i.x=i.x&&i.x>=r.x&&x(oh||h===l&&i.x>r.x)&&w(i,t)&&(r=i,l=h)),i=i.next;return r}function v(t,e,r,i){var n=t;do null===n.z&&(n.z=m(n.x,n.y,e,r,i)),n.prevZ=n.prev,n.nextZ=n.next,n=n.next;while(n!==t);n.prevZ.nextZ=null,n.prevZ=null,g(n)}function g(t){var e,r,i,n,o,s,a,h,u=1;do{for(r=t,t=null,o=null,s=0;r;){for(s++,i=r,a=0,e=0;u>e&&(a++,i=i.nextZ,i);e++);for(h=u;a>0||h>0&&i;)0===a?(n=i,i=i.nextZ,h--):0!==h&&i?r.z<=i.z?(n=r,r=r.nextZ,a--):(n=i,i=i.nextZ,h--):(n=r,r=r.nextZ,a--),o?o.nextZ=n:t=n,n.prevZ=o,o=n;r=i}o.nextZ=null,u*=2}while(s>1);return t}function m(t,e,r,i,n){return t=32767*(t-r)/n,e=32767*(e-i)/n,t=16711935&(t|t<<8),t=252645135&(t|t<<4),t=858993459&(t|t<<2),t=1431655765&(t|t<<1),e=16711935&(e|e<<8),e=252645135&(e|e<<4),e=858993459&(e|e<<2),e=1431655765&(e|e<<1),t|e<<1}function y(t){var e=t,r=t;do e.x=0&&(t-s)*(i-a)-(r-s)*(e-a)>=0&&(r-s)*(o-a)-(n-s)*(i-a)>=0}function b(t,e){return T(t,e)||t.next.i!==e.i&&t.prev.i!==e.i&&!S(t,e)&&w(t,e)&&w(e,t)&&C(t,e)}function _(t,e,r){return(e.y-t.y)*(r.x-e.x)-(e.x-t.x)*(r.y-e.y)}function T(t,e){return t.x===e.x&&t.y===e.y}function E(t,e,r,i){return _(t,e,r)>0!=_(t,e,i)>0&&_(r,i,t)>0!=_(r,i,e)>0}function S(t,e){var r=t;do{if(r.i!==t.i&&r.next.i!==t.i&&r.i!==e.i&&r.next.i!==e.i&&E(r,r.next,t,e))return!0;r=r.next}while(r!==t);return!1}function w(t,e){return _(t.prev,t,t.next)<0?_(t,e,t.next)>=0&&_(t,t.prev,e)>=0:_(t,e,t.prev)<0||_(t,t.next,e)<0}function C(t,e){var r=t,i=!1,n=(t.x+e.x)/2,o=(t.y+e.y)/2;do r.y>o!=r.next.y>o&&n<(r.next.x-r.x)*(o-r.y)/(r.next.y-r.y)+r.x&&(i=!i),r=r.next;while(r!==t);return i}function A(t,e){var r=new O(t.i,t.x,t.y),i=new O(e.i,e.x,e.y),n=t.next,o=e.prev;return t.next=e,e.prev=t,r.next=n,n.prev=r,i.next=r,r.prev=i,o.next=i,i.prev=o,i}function M(t,e,r,i){var n=new O(t,e,r);return i?(n.next=i.next,n.prev=i,i.next.prev=n,i.next=n):(n.prev=n,n.next=n),n}function R(t){t.next.prev=t.prev,t.prev.next=t.next,t.prevZ&&(t.prevZ.nextZ=t.nextZ),t.nextZ&&(t.nextZ.prevZ=t.prevZ)}function O(t,e,r){this.i=t,this.x=e,this.y=r,this.prev=null,this.next=null,this.z=null,this.prevZ=null,this.nextZ=null,this.steiner=!1}e.exports=i},{}],25:[function(t,e,r){"use strict";function i(t,e,r){this.fn=t,this.context=e,this.once=r||!1}function n(){}var o="function"!=typeof Object.create?"~":!1;n.prototype._events=void 0,n.prototype.listeners=function(t,e){var r=o?o+t:t,i=this._events&&this._events[r];if(e)return!!i;if(!i)return[];if(i.fn)return[i.fn];for(var n=0,s=i.length,a=new Array(s);s>n;n++)a[n]=i[n].fn;return a},n.prototype.emit=function(t,e,r,i,n,s){var a=o?o+t:t;if(!this._events||!this._events[a])return!1;var h,u,l=this._events[a],c=arguments.length;if("function"==typeof l.fn){switch(l.once&&this.removeListener(t,l.fn,void 0,!0),c){case 1:return l.fn.call(l.context),!0;case 2:return l.fn.call(l.context,e),!0;case 3:return l.fn.call(l.context,e,r),!0;case 4:return l.fn.call(l.context,e,r,i),!0;case 5:return l.fn.call(l.context,e,r,i,n),!0;case 6:return l.fn.call(l.context,e,r,i,n,s),!0}for(u=1,h=new Array(c-1);c>u;u++)h[u-1]=arguments[u];l.fn.apply(l.context,h)}else{var p,d=l.length;for(u=0;d>u;u++)switch(l[u].once&&this.removeListener(t,l[u].fn,void 0,!0),c){case 1:l[u].fn.call(l[u].context);break;case 2:l[u].fn.call(l[u].context,e);break;case 3:l[u].fn.call(l[u].context,e,r);break;default:if(!h)for(p=1,h=new Array(c-1);c>p;p++)h[p-1]=arguments[p];l[u].fn.apply(l[u].context,h)}}return!0},n.prototype.on=function(t,e,r){var n=new i(e,r||this),s=o?o+t:t;return this._events||(this._events=o?{}:Object.create(null)),this._events[s]?this._events[s].fn?this._events[s]=[this._events[s],n]:this._events[s].push(n):this._events[s]=n,this},n.prototype.once=function(t,e,r){var n=new i(e,r||this,!0),s=o?o+t:t;return this._events||(this._events=o?{}:Object.create(null)),this._events[s]?this._events[s].fn?this._events[s]=[this._events[s],n]:this._events[s].push(n):this._events[s]=n,this},n.prototype.removeListener=function(t,e,r,i){var n=o?o+t:t;if(!this._events||!this._events[n])return this;var s=this._events[n],a=[];if(e)if(s.fn)(s.fn!==e||i&&!s.once||r&&s.context!==r)&&a.push(s);else for(var h=0,u=s.length;u>h;h++)(s[h].fn!==e||i&&!s[h].once||r&&s[h].context!==r)&&a.push(s[h]);return a.length?this._events[n]=1===a.length?a[0]:a:delete this._events[n],this},n.prototype.removeAllListeners=function(t){return this._events?(t?delete this._events[o?o+t:t]:this._events=o?{}:Object.create(null),this):this},n.prototype.off=n.prototype.removeListener,n.prototype.addListener=n.prototype.on,n.prototype.setMaxListeners=function(){return this},n.prefixed=o,"undefined"!=typeof e&&(e.exports=n)},{}],26:[function(t,e,r){"use strict";function i(t){if(null===t||void 0===t)throw new TypeError("Object.assign cannot be called with null or undefined");return Object(t)}var n=Object.prototype.hasOwnProperty,o=Object.prototype.propertyIsEnumerable;e.exports=Object.assign||function(t,e){for(var r,s,a=i(t),h=1;h=t.length&&r())}if(r=r||function(){},!t.length)return r();var o=0;u(t,function(t){e(t,i(n))})},s.forEach=s.each,s.eachSeries=function(t,e,r){if(r=r||function(){},!t.length)return r();var i=0,n=function(){e(t[i],function(e){e?(r(e),r=function(){}):(i+=1,i>=t.length?r():n())})};n()},s.forEachSeries=s.eachSeries,s.eachLimit=function(t,e,r,i){var n=d(e);n.apply(null,[t,r,i])},s.forEachLimit=s.eachLimit;var d=function(t){return function(e,r,i){if(i=i||function(){},!e.length||0>=t)return i();var n=0,o=0,s=0;!function a(){if(n>=e.length)return i();for(;t>s&&o=e.length?i():a())})}()}},f=function(t){return function(){var e=Array.prototype.slice.call(arguments);return t.apply(null,[s.each].concat(e))}},v=function(t,e){return function(){var r=Array.prototype.slice.call(arguments);return e.apply(null,[d(t)].concat(r))}},g=function(t){return function(){var e=Array.prototype.slice.call(arguments);return t.apply(null,[s.eachSeries].concat(e))}},m=function(t,e,r,i){if(e=l(e,function(t,e){return{index:e,value:t}}),i){var n=[];t(e,function(t,e){r(t.value,function(r,i){n[t.index]=i,e(r)})},function(t){i(t,n)})}else t(e,function(t,e){r(t.value,function(t){e(t)})})};s.map=f(m),s.mapSeries=g(m),s.mapLimit=function(t,e,r,i){return y(e)(t,r,i)};var y=function(t){return v(t,m)};s.reduce=function(t,e,r,i){s.eachSeries(t,function(t,i){r(e,t,function(t,r){e=r,i(t)})},function(t){i(t,e)})},s.inject=s.reduce,s.foldl=s.reduce,s.reduceRight=function(t,e,r,i){var n=l(t,function(t){return t}).reverse();s.reduce(n,e,r,i)},s.foldr=s.reduceRight;var x=function(t,e,r,i){var n=[];e=l(e,function(t,e){return{index:e,value:t}}),t(e,function(t,e){r(t.value,function(r){r&&n.push(t),e()})},function(t){i(l(n.sort(function(t,e){return t.index-e.index}),function(t){return t.value}))})};s.filter=f(x),s.filterSeries=g(x),s.select=s.filter,s.selectSeries=s.filterSeries;var b=function(t,e,r,i){var n=[];e=l(e,function(t,e){return{index:e,value:t}}),t(e,function(t,e){r(t.value,function(r){r||n.push(t),e()})},function(t){i(l(n.sort(function(t,e){return t.index-e.index}),function(t){return t.value}))})};s.reject=f(b),s.rejectSeries=g(b);var _=function(t,e,r,i){t(e,function(t,e){r(t,function(r){r?(i(t),i=function(){}):e()})},function(t){i()})};s.detect=f(_),s.detectSeries=g(_),s.some=function(t,e,r){s.each(t,function(t,i){e(t,function(t){t&&(r(!0),r=function(){}),i()})},function(t){r(!1)})},s.any=s.some,s.every=function(t,e,r){s.each(t,function(t,i){e(t,function(t){t||(r(!1),r=function(){}),i()})},function(t){r(!0)})},s.all=s.every,s.sortBy=function(t,e,r){s.map(t,function(t,r){e(t,function(e,i){e?r(e):r(null,{value:t,criteria:i})})},function(t,e){if(t)return r(t);var i=function(t,e){var r=t.criteria,i=e.criteria;return i>r?-1:r>i?1:0};r(null,l(e.sort(i),function(t){return t.value}))})},s.auto=function(t,e){e=e||function(){};var r=p(t),i=r.length;if(!i)return e();var n={},o=[],a=function(t){o.unshift(t)},l=function(t){for(var e=0;ei;){var o=i+(n-i+1>>>1);r(e,t[o])>=0?i=o:n=o-1}return i}function n(t,e,n,o){return t.started||(t.started=!0),h(e)||(e=[e]),0==e.length?s.setImmediate(function(){t.drain&&t.drain()}):void u(e,function(e){var a={data:e,priority:n,callback:"function"==typeof o?o:null};t.tasks.splice(i(t.tasks,a,r)+1,0,a),t.saturated&&t.tasks.length===t.concurrency&&t.saturated(),s.setImmediate(t.process)})}var o=s.queue(t,e);return o.push=function(t,e,r){n(o,t,e,r)},delete o.unshift,o},s.cargo=function(t,e){var r=!1,i=[],n={tasks:i,payload:e,saturated:null,empty:null,drain:null,drained:!0,push:function(t,r){h(t)||(t=[t]),u(t,function(t){i.push({data:t,callback:"function"==typeof r?r:null}),n.drained=!1,n.saturated&&i.length===e&&n.saturated()}),s.setImmediate(n.process)},process:function o(){if(!r){if(0===i.length)return n.drain&&!n.drained&&n.drain(),void(n.drained=!0);var s="number"==typeof e?i.splice(0,e):i.splice(0,i.length),a=l(s,function(t){return t.data});n.empty&&n.empty(),r=!0,t(a,function(){r=!1;var t=arguments;u(s,function(e){e.callback&&e.callback.apply(null,t)}),o()})}},length:function(){return i.length},running:function(){return r}};return n};var S=function(t){return function(e){var r=Array.prototype.slice.call(arguments,1);e.apply(null,r.concat([function(e){var r=Array.prototype.slice.call(arguments,1);"undefined"!=typeof console&&(e?console.error&&console.error(e):console[t]&&u(r,function(e){console[t](e)}))}]))}};s.log=S("log"),s.dir=S("dir"),s.memoize=function(t,e){var r={},i={};e=e||function(t){return t};var n=function(){var n=Array.prototype.slice.call(arguments),o=n.pop(),a=e.apply(null,n);a in r?s.nextTick(function(){o.apply(null,r[a])}):a in i?i[a].push(o):(i[a]=[o],t.apply(null,n.concat([function(){r[a]=arguments;var t=i[a];delete i[a];for(var e=0,n=t.length;n>e;e++)t[e].apply(null,arguments)}])))};return n.memo=r,n.unmemoized=t,n},s.unmemoize=function(t){return function(){return(t.unmemoized||t).apply(null,arguments)}},s.times=function(t,e,r){for(var i=[],n=0;t>n;n++)i.push(n);return s.map(i,e,r)},s.timesSeries=function(t,e,r){for(var i=[],n=0;t>n;n++)i.push(n);return s.mapSeries(i,e,r)},s.seq=function(){var t=arguments;return function(){var e=this,r=Array.prototype.slice.call(arguments),i=r.pop();s.reduce(t,r,function(t,r,i){r.apply(e,t.concat([function(){var t=arguments[0],e=Array.prototype.slice.call(arguments,1);i(t,e)}]))},function(t,r){i.apply(e,[t].concat(r))})}},s.compose=function(){return s.seq.apply(null,Array.prototype.reverse.call(arguments))};var w=function(t,e){var r=function(){var r=this,i=Array.prototype.slice.call(arguments),n=i.pop();return t(e,function(t,e){t.apply(r,i.concat([e]))},n)};if(arguments.length>2){var i=Array.prototype.slice.call(arguments,2);return r.apply(this,i)}return r};s.applyEach=f(w),s.applyEachSeries=g(w),s.forever=function(t,e){function r(i){if(i){if(e)return e(i);throw i}t(r)}r()},"undefined"!=typeof r&&r.exports?r.exports=s:"undefined"!=typeof t&&t.amd?t([],function(){return s}):n.async=s}()}).call(this,e("_process"))},{_process:18}],28:[function(t,e,r){function i(t,e){a.call(this),e=e||10,this.baseUrl=t||"",this.progress=0,this.loading=!1,this._progressChunk=0,this._beforeMiddleware=[],this._afterMiddleware=[],this._boundLoadResource=this._loadResource.bind(this),this._boundOnLoad=this._onLoad.bind(this),this._buffer=[],this._numToLoad=0,this._queue=n.queue(this._boundLoadResource,e),this.resources={}}var n=t("async"),o=t("url"),s=t("./Resource"),a=t("eventemitter3");i.prototype=Object.create(a.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.add=i.prototype.enqueue=function(t,e,r,i){if(Array.isArray(t)){for(var n=0;n0)if(this.xhrType===i.XHR_RESPONSE_TYPE.TEXT)this.data=t.responseText;else if(this.xhrType===i.XHR_RESPONSE_TYPE.JSON)try{this.data=JSON.parse(t.responseText),this.isJson=!0}catch(r){this.error=new Error("Error trying to parse loaded json:",r)}else if(this.xhrType===i.XHR_RESPONSE_TYPE.DOCUMENT)try{if(window.DOMParser){var n=new DOMParser;this.data=n.parseFromString(t.responseText,"text/xml")}else{var o=document.createElement("div");o.innerHTML=t.responseText,this.data=o}this.isXml=!0}catch(r){this.error=new Error("Error trying to parse loaded xml:",r)}else this.data=t.response||t.responseText;else this.error=new Error("["+t.status+"]"+t.statusText+":"+t.responseURL);this.complete()},i.prototype._determineCrossOrigin=function(t,e){if(0===t.indexOf("data:"))return"";e=e||window.location,u||(u=document.createElement("a")),u.href=t,t=a.parse(u.href);var r=!t.port&&""===e.port||t.port===e.port;return t.hostname===e.hostname&&r&&t.protocol===e.protocol?"":"anonymous"},i.prototype._determineXhrType=function(){return i._xhrTypeMap[this._getExtension()]||i.XHR_RESPONSE_TYPE.TEXT},i.prototype._determineLoadType=function(){return i._loadTypeMap[this._getExtension()]||i.LOAD_TYPE.XHR},i.prototype._getExtension=function(){var t,e=this.url;if(this.isDataUrl){var r=e.indexOf("/");t=e.substring(r+1,e.indexOf(";",r))}else{var i=e.indexOf("?");-1!==i&&(e=e.substring(0,i)),t=e.substring(e.lastIndexOf(".")+1)}return t},i.prototype._getMimeFromXhrType=function(t){switch(t){case i.XHR_RESPONSE_TYPE.BUFFER:return"application/octet-binary";case i.XHR_RESPONSE_TYPE.BLOB:return"application/blob";case i.XHR_RESPONSE_TYPE.DOCUMENT:return"application/xml";case i.XHR_RESPONSE_TYPE.JSON:return"application/json";case i.XHR_RESPONSE_TYPE.DEFAULT:case i.XHR_RESPONSE_TYPE.TEXT:default:return"text/plain"}},i.LOAD_TYPE={XHR:1,IMAGE:2,AUDIO:3,VIDEO:4},i.XHR_READY_STATE={UNSENT:0,OPENED:1,HEADERS_RECEIVED:2,LOADING:3,DONE:4},i.XHR_RESPONSE_TYPE={DEFAULT:"text",BUFFER:"arraybuffer",BLOB:"blob",DOCUMENT:"document",JSON:"json",TEXT:"text"},i._loadTypeMap={gif:i.LOAD_TYPE.IMAGE,png:i.LOAD_TYPE.IMAGE,bmp:i.LOAD_TYPE.IMAGE,jpg:i.LOAD_TYPE.IMAGE,jpeg:i.LOAD_TYPE.IMAGE,tif:i.LOAD_TYPE.IMAGE,tiff:i.LOAD_TYPE.IMAGE,webp:i.LOAD_TYPE.IMAGE,tga:i.LOAD_TYPE.IMAGE},i._xhrTypeMap={xhtml:i.XHR_RESPONSE_TYPE.DOCUMENT,html:i.XHR_RESPONSE_TYPE.DOCUMENT,htm:i.XHR_RESPONSE_TYPE.DOCUMENT,xml:i.XHR_RESPONSE_TYPE.DOCUMENT,tmx:i.XHR_RESPONSE_TYPE.DOCUMENT,tsx:i.XHR_RESPONSE_TYPE.DOCUMENT,svg:i.XHR_RESPONSE_TYPE.DOCUMENT,gif:i.XHR_RESPONSE_TYPE.BLOB,png:i.XHR_RESPONSE_TYPE.BLOB,bmp:i.XHR_RESPONSE_TYPE.BLOB,jpg:i.XHR_RESPONSE_TYPE.BLOB,jpeg:i.XHR_RESPONSE_TYPE.BLOB,tif:i.XHR_RESPONSE_TYPE.BLOB,tiff:i.XHR_RESPONSE_TYPE.BLOB,webp:i.XHR_RESPONSE_TYPE.BLOB,tga:i.XHR_RESPONSE_TYPE.BLOB,json:i.XHR_RESPONSE_TYPE.JSON,text:i.XHR_RESPONSE_TYPE.TEXT,txt:i.XHR_RESPONSE_TYPE.TEXT},i.setExtensionLoadType=function(t,e){o(i._loadTypeMap,t,e)},i.setExtensionXhrType=function(t,e){o(i._xhrTypeMap,t,e)}},{eventemitter3:25,url:23}],30:[function(t,e,r){e.exports={_keyStr:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",encodeBinary:function(t){for(var e,r="",i=new Array(4),n=0,o=0,s=0;n>2,i[1]=(3&e[0])<<4|e[1]>>4,i[2]=(15&e[1])<<2|e[2]>>6,i[3]=63&e[2],s=n-(t.length-1)){case 2:i[3]=64,i[2]=64;break;case 1:i[3]=64}for(o=0;o","Richard Davey "],main:"./src/index.js",homepage:"http://goodboydigital.com/",bugs:"https://github.com/pixijs/pixi.js/issues",license:"MIT",repository:{type:"git",url:"https://github.com/pixijs/pixi.js.git"},scripts:{start:"gulp && gulp watch",test:"gulp && testem ci",build:"gulp",docs:"jsdoc -c ./gulp/util/jsdoc.conf.json -R README.md"},files:["bin/","src/","CONTRIBUTING.md","LICENSE","package.json","README.md"],dependencies:{async:"^1.5.0",brfs:"^1.4.1",earcut:"^2.0.7",eventemitter3:"^1.1.1","object-assign":"^4.0.1","pixi-gl-core":"git+https://github.com/GoodBoyDigital/pixi-gl-core.git","resource-loader":"^1.6.4"},devDependencies:{browserify:"^11.1.0",chai:"^3.2.0",del:"^2.0.2",gulp:"^3.9.0","gulp-cached":"^1.1.0","gulp-concat":"^2.6.0","gulp-debug":"^2.1.0","gulp-header":"^1.7.1","gulp-jshint":"^1.11.2","gulp-mirror":"^0.4.0","gulp-plumber":"^1.0.1","gulp-rename":"^1.2.2","gulp-sourcemaps":"^1.5.2","gulp-uglify":"^1.4.1","gulp-util":"^3.0.6","jaguarjs-jsdoc":"git+https://github.com/davidshimjs/jaguarjs-jsdoc.git",jsdoc:"^3.3.2","jshint-summary":"^0.4.0",minimist:"^1.2.0",mocha:"^2.3.2","require-dir":"^0.3.0","run-sequence":"^1.1.2",testem:"^0.9.4","vinyl-buffer":"^1.0.0","vinyl-source-stream":"^1.1.0",watchify:"^3.4.0"},browserify:{transform:["brfs"]}}},{}],35:[function(t,e,r){function i(t){var e=document.createElement("div");e.style.width="100px",e.style.height="100px",e.style.position="absolute",e.style.top=0,e.style.left=0,e.style.zIndex=2,this.div=e,this.pool=[],this.renderId=0,this.debug=!1,this.renderer=t,this.children=[],this._onKeyDown=this._onKeyDown.bind(this),this._onMouseMove=this._onMouseMove.bind(this),this.isActive=!1,window.addEventListener("keydown",this._onKeyDown,!1)}var n=t("../core");Object.assign(n.DisplayObject.prototype,t("./accessibleTarget")),i.prototype.constructor=i,e.exports=i,i.prototype.activate=function(){this.isActive||(this.isActive=!0,window.document.addEventListener("mousemove",this._onMouseMove,!0),window.removeEventListener("keydown",this._onKeyDown,!1),this.renderer.on("postrender",this.update,this),this.renderer.view.parentNode.appendChild(this.div))},i.prototype.deactivate=function(){this.isActive&&(this.isActive=!1,window.document.removeEventListener("mousemove",this._onMouseMove),window.addEventListener("keydown",this._onKeyDown,!1),this.renderer.off("postrender",this.update),this.div.parentNode.removeChild(this.div))},i.prototype.updateAccessibleObjects=function(t){if(t.visible){t.accessible&&t.interactive&&(t._accessibleActive||this.addChild(t),t.renderId=this.renderId);for(var e=t.children,r=e.length-1;r>=0;r--)this.updateAccessibleObjects(e[r])}},i.prototype.update=function(){this.updateAccessibleObjects(this.renderer._lastObjectRendered);var t=this.renderer.view.getBoundingClientRect(),e=t.width/this.renderer.width,r=t.height/this.renderer.height,i=this.div;i.style.left=t.left+"px",i.style.top=t.top+"px",i.style.width=this.renderer.width+"px",i.style.height=this.renderer.height+"px";for(var o=0;othis.renderer.width&&(t.width=this.renderer.width-t.x),t.y+t.height>this.renderer.height&&(t.height=this.renderer.height-t.y)},i.prototype.addChild=function(t){var e=this.pool.pop();e||(e=document.createElement("button"),e.style.width="100px",e.style.height="100px",e.style.backgroundColor=this.debug?"rgba(255,0,0,0.5)":"transparent",e.style.position="absolute",e.style.zIndex=2,e.style.borderStyle="none",e.addEventListener("click",this._onClick.bind(this)),e.addEventListener("focus",this._onFocus.bind(this)),e.addEventListener("focusout",this._onFocusOut.bind(this))),e.title=t.accessibleTitle||"displayObject "+this.tabIndex,t._accessibleActive=!0,t._accessibleDiv=e,e.displayObject=t,this.children.push(t),this.div.appendChild(t._accessibleDiv),t._accessibleDiv.tabIndex=t.tabIndex},i.prototype._onClick=function(t){var e=this.renderer.plugins.interaction;e.dispatchEvent(t.target.displayObject,"click",e.eventData)},i.prototype._onFocus=function(t){var e=this.renderer.plugins.interaction;e.dispatchEvent(t.target.displayObject,"mouseover",e.eventData)},i.prototype._onFocusOut=function(t){var e=this.renderer.plugins.interaction;e.dispatchEvent(t.target.displayObject,"mouseout",e.eventData)},i.prototype._onKeyDown=function(t){9===t.keyCode&&this.activate()},i.prototype._onMouseMove=function(){this.deactivate()},i.prototype.destroy=function(){this.div=null;for(var t=0;t1)for(var r=0;e>r;r++)this.addChild(arguments[r]);else t.parent&&t.parent.removeChild(t),t.parent=this,this.children.push(t),this.onChildrenChange(this.children.length-1),t.emit("added",this);return t},i.prototype.addChildAt=function(t,e){if(e>=0&&e<=this.children.length)return t.parent&&t.parent.removeChild(t),t.parent=this,this.children.splice(e,0,t),this.onChildrenChange(e),t.emit("added",this),t;throw new Error(t+"addChildAt: The index "+e+" supplied is out of bounds "+this.children.length)},i.prototype.swapChildren=function(t,e){if(t!==e){var r=this.getChildIndex(t),i=this.getChildIndex(e);if(0>r||0>i)throw new Error("swapChildren: Both the supplied DisplayObjects must be children of the caller.");this.children[r]=e,this.children[i]=t,this.onChildrenChange(i>r?r:i)}},i.prototype.getChildIndex=function(t){var e=this.children.indexOf(t);if(-1===e)throw new Error("The supplied DisplayObject must be a child of the caller");return e},i.prototype.setChildIndex=function(t,e){if(0>e||e>=this.children.length)throw new Error("The supplied index is out of bounds");var r=this.getChildIndex(t);o.removeItems(this.children,r,1),this.children.splice(e,0,t),this.onChildrenChange(e)},i.prototype.getChildAt=function(t){if(0>t||t>=this.children.length)throw new Error("getChildAt: Supplied index "+t+" does not exist in the child list, or the supplied DisplayObject is not a child of the caller");return this.children[t]},i.prototype.removeChild=function(t){var e=arguments.length;if(e>1)for(var r=0;e>r;r++)this.removeChild(arguments[r]);else{var i=this.children.indexOf(t);if(-1===i)return;t.parent=null,o.removeItems(this.children,i,1),this.onChildrenChange(i),t.emit("removed",this)}return t},i.prototype.removeChildAt=function(t){var e=this.getChildAt(t);return e.parent=null,o.removeItems(this.children,t,1),this.onChildrenChange(t),e.emit("removed",this),e},i.prototype.removeChildren=function(t,e){var r,i,n=t||0,o="number"==typeof e?e:this.children.length,s=o-n;if(s>0&&o>=s){for(r=this.children.splice(n,s),i=0;it;++t)this.children[t].updateTransform();this.dirtyTransform=!1}},i.prototype.containerUpdateTransform=i.prototype.updateTransform,i.prototype.getBounds=function(){if(!this._currentBounds){if(0===this.children.length)return n.Rectangle.EMPTY;for(var t,e,r,i=1/0,o=1/0,s=-(1/0),a=-(1/0),h=!1,u=0,l=this.children.length;l>u;++u){var c=this.children[u];c.visible&&(h=!0,t=this.children[u].getBounds(),i=ie?s:e,a=a>r?a:r)}if(!h)return n.Rectangle.EMPTY;var p=this._bounds;p.x=i,p.y=o,p.width=s-i,p.height=a-o,this._currentBounds=p}return this._currentBounds},i.prototype.containerGetBounds=i.prototype.getBounds,i.prototype.getLocalBounds=function(){var t=this.worldTransform;this.worldTransform=n.Matrix.IDENTITY;for(var e=0,r=this.children.length;r>e;++e)this.children[e].updateTransform();return this.worldTransform=t,this._currentBounds=null,this.getBounds(n.Matrix.IDENTITY)},i.prototype.renderWebGL=function(t){if(this.visible&&!(this.worldAlpha<=0)&&this.renderable){var e,r;if(this._mask||this._filters){for(t.currentRenderer.flush(),this._filters&&this._filters.length&&t.filterManager.pushFilter(this,this._filters),this._mask&&t.maskManager.pushMask(this,this._mask),t.currentRenderer.start(),this._renderWebGL(t),e=0,r=this.children.length;r>e;e++)this.children[e].renderWebGL(t);t.currentRenderer.flush(),this._mask&&t.maskManager.popMask(this,this._mask),this._filters&&t.filterManager.popFilter(),t.currentRenderer.start()}else for(this._renderWebGL(t),e=0,r=this.children.length;r>e;++e)this.children[e].renderWebGL(t)}},i.prototype._renderWebGL=function(t){},i.prototype._renderCanvas=function(t){},i.prototype.renderCanvas=function(t){if(this.visible&&!(this.alpha<=0)&&this.renderable){this._mask&&t.maskManager.pushMask(this._mask,t),this._renderCanvas(t);for(var e=0,r=this.children.length;r>e;++e)this.children[e].renderCanvas(t);this._mask&&t.maskManager.popMask(t)}},i.prototype.destroy=function(t){if(s.prototype.destroy.call(this),t)for(var e=0,r=this.children.length;r>e;++e)this.children[e].destroy(t);this.removeChildren(),this.children=null}},{"../math":55,"../textures/RenderTexture":98,"../utils":105,"./DisplayObject":40}],40:[function(t,e,r){function i(){s.call(this),this.position=new n.Point,this._position=new u(this),this.scale=new n.Point(1,1),this.pivot=new n.Point(0,0),this.skew=new n.Point(0,0),this._rotation=0,this.alpha=1,this.visible=!0,this.renderable=!0,this.parent=null,this.worldAlpha=1,this.worldTransform=new n.Matrix,this.localTransform=new n.Matrix,this.filterArea=null,this._sr=0,this._cr=1,this._bounds=new n.Rectangle(0,0,1,1),this._currentBounds=null,this._mask=null,this.dirtyTransform=!0}var n=t("../math"),o=t("../textures/RenderTexture"),s=t("eventemitter3"),a=(t("../const"),new n.Matrix),h={worldTransform:new n.Matrix,worldAlpha:1,children:[]};i.prototype=Object.create(s.prototype),i.prototype.constructor=i,e.exports=i;var u=function(t){this.doc=t,this.x=0,this.y=0};Object.defineProperties(u.prototype,{x:{get:function(){return this.doc.position.x},set:function(t){this.doc.position.x=t,this.doc.dirtyTransform=!0}},y:{get:function(){return this.doc.posiiton.y},set:function(t){this.doc.position.y=t,this.doc.dirtyTransform=!0}}}),Object.defineProperties(i.prototype,{x:{get:function(){return this.position.x},set:function(t){this.position.x=t,this.dirtyTransform=!0}},y:{get:function(){return this.position.y},set:function(t){this.position.y=t,this.dirtyTransform=!0}},scaleX:{get:function(){return this.scale.x},set:function(t){this.scale.x=t,this.dirtyTransform=!0}},scaleY:{get:function(){return this.scale.y},set:function(t){this.scale.y=t,this.dirtyTransform=!0}},rotation:{get:function(){return this._rotation},set:function(t){this._rotation=t,this.dirtyTransform=!0,this._sr=Math.sin(t),this._cr=Math.cos(t)}},scaleY:{get:function(){return this.scale.y},set:function(t){this.scale.y=t,this.dirtyTransform=!0}},worldVisible:{get:function(){var t=this;do{if(!t.visible)return!1;t=t.parent}while(t);return!0}},mask:{get:function(){return this._mask},set:function(t){this._mask&&(this._mask.renderable=!0),this._mask=t,this._mask&&(this._mask.renderable=!1)}},filters:{get:function(){return this._filters&&this._filters.slice()},set:function(t){this._filters=t&&t.slice()}}}),i.prototype.updateTransform=function(){var t=this.parent.worldTransform,e=this.worldTransform,r=this.localTransform;this.dirtyTransform&&(r.a=this._cr*this.scale.x,r.b=this._sr*this.scale.x,r.c=-this._sr*this.scale.y,r.d=this._cr*this.scale.y,r.tx=this.position.x-(this.pivot.x*r.a+this.pivot.y*r.c),r.ty=this.position.y-(this.pivot.x*r.b+this.pivot.y*r.d)),(this.dirtyTransform||this.parent.dirtyTransform)&&(e.a=r.a*t.a+r.b*t.c,e.b=r.a*t.b+r.b*t.d,e.c=r.c*t.a+r.d*t.c,e.d=r.c*t.b+r.d*t.d,e.tx=r.tx*t.a+r.ty*t.c+t.tx,e.ty=r.tx*t.b+r.ty*t.d+t.ty,this._currentBounds=null),this.worldAlpha=this.alpha*this.parent.worldAlpha},i.prototype.displayObjectUpdateTransform=i.prototype.updateTransform,i.prototype.getBounds=function(t){return n.Rectangle.EMPTY},i.prototype.getLocalBounds=function(){return this.getBounds(n.Matrix.IDENTITY)},i.prototype.toGlobal=function(t){return this.parent?this.displayObjectUpdateTransform():(this.parent=h,this.displayObjectUpdateTransform(),this.parent=null),this.worldTransform.apply(t)},i.prototype.toLocal=function(t,e,r){return e&&(t=e.toGlobal(t)),this.parent?this.displayObjectUpdateTransform():(this.parent=h,this.displayObjectUpdateTransform(),this.parent=null),this.worldTransform.applyInverse(t,r)},i.prototype.renderWebGL=function(t){},i.prototype.renderCanvas=function(t){},i.prototype.generateTexture=function(t,e,r){var i=this.getLocalBounds(),n=new o(t,0|i.width,0|i.height,e,r);return a.tx=-i.x,a.ty=-i.y,n.render(this,a),n},i.prototype.setParent=function(t){if(!t||!t.addChild)throw new Error("setParent: Argument must be a Container");return t.addChild(this),t},i.prototype.setTransform=function(t,e,r,i,n,o,s,a,h){return this.position.x=t||0,this.position.y=e||0,this.scale.x=r?r:1,this.scale.y=i?i:1,this.rotation=n||0,this.skew.x=o||0,this.skew.y=s||0,this.pivot.x=a||0,this.pivot.y=h||0,this.dirtyTransform=!0,this},i.prototype.destroy=function(){this.position=null,this.scale=null,this.pivot=null,this.skew=null,this.parent=null,this._bounds=null,this._currentBounds=null,this._mask=null,this.worldTransform=null,this.filterArea=null}},{"../const":38,"../math":55,"../textures/RenderTexture":98,eventemitter3:25}],41:[function(t,e,r){function i(){n.call(this),this.fillAlpha=1,this.lineWidth=0,this.lineColor=0,this.graphicsData=[],this.tint=16777215,this._prevTint=16777215,this.blendMode=l.BLEND_MODES.NORMAL,this.currentPath=null,this._webGL={},this.isMask=!1,this.boundsPadding=0,this._localBounds=new u.Rectangle(0,0,1,1),this.dirty=!0,this.glDirty=!1,this.boundsDirty=!0,this.cachedSpriteDirty=!1}var n=t("../display/Container"),o=t("../textures/Texture"),s=t("../renderers/canvas/utils/CanvasBuffer"),a=t("../renderers/canvas/utils/CanvasGraphics"),h=t("./GraphicsData"),u=t("../math"),l=t("../const"),c=new u.Point;i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.clone=function(){var t=new i;t.renderable=this.renderable,t.fillAlpha=this.fillAlpha,t.lineWidth=this.lineWidth,t.lineColor=this.lineColor,t.tint=this.tint,t.blendMode=this.blendMode,t.isMask=this.isMask,t.boundsPadding=this.boundsPadding,t.dirty=!0,t.glDirty=!0,t.cachedSpriteDirty=this.cachedSpriteDirty;for(var e=0;e=c;++c)l=c/s,n=h+(t-h)*l,o=u+(e-u)*l,a.push(n+(t+(r-t)*l-n)*l,o+(e+(i-e)*l-o)*l);return this.dirty=this.boundsDirty=!0,this},i.prototype.bezierCurveTo=function(t,e,r,i,n,o){this.currentPath?0===this.currentPath.shape.points.length&&(this.currentPath.shape.points=[0,0]):this.moveTo(0,0);for(var s,a,h,u,l,c=20,p=this.currentPath.shape.points,d=p[p.length-2],f=p[p.length-1],v=0,g=1;c>=g;++g)v=g/c,s=1-v,a=s*s,h=a*s,u=v*v,l=u*v,p.push(h*d+3*a*v*t+3*s*u*r+l*n,h*f+3*a*v*e+3*s*u*i+l*o);return this.dirty=this.boundsDirty=!0,this},i.prototype.arcTo=function(t,e,r,i,n){this.currentPath?0===this.currentPath.shape.points.length&&this.currentPath.shape.points.push(t,e):this.moveTo(t,e);var o=this.currentPath.shape.points,s=o[o.length-2],a=o[o.length-1],h=a-e,u=s-t,l=i-e,c=r-t,p=Math.abs(h*c-u*l);if(1e-8>p||0===n)(o[o.length-2]!==t||o[o.length-1]!==e)&&o.push(t,e);else{var d=h*h+u*u,f=l*l+c*c,v=h*l+u*c,g=n*Math.sqrt(d)/p,m=n*Math.sqrt(f)/p,y=g*v/d,x=m*v/f,b=g*c+m*u,_=g*l+m*h,T=u*(m+y),E=h*(m+y),S=c*(g+x),w=l*(g+x),C=Math.atan2(E-_,T-b),A=Math.atan2(w-_,S-b);this.arc(b+t,_+e,n,C,A,u*l>c*h)}return this.dirty=this.boundsDirty=!0,this},i.prototype.arc=function(t,e,r,i,n,o){if(o=o||!1,i===n)return this;!o&&i>=n?n+=2*Math.PI:o&&n>=i&&(i+=2*Math.PI);var s=o?-1*(i-n):n-i,a=40*Math.ceil(Math.abs(s)/(2*Math.PI));if(0===s)return this;var h=t+Math.cos(i)*r,u=e+Math.sin(i)*r;this.currentPath?this.currentPath.shape.points.push(h,u):this.moveTo(h,u);for(var l=this.currentPath.shape.points,c=s/(2*a),p=2*c,d=Math.cos(c),f=Math.sin(c),v=a-1,g=v%1/v,m=0;v>=m;m++){var y=m+g*m,x=c+i+p*y,b=Math.cos(x),_=-Math.sin(x);l.push((d*b+f*_)*r+t,(d*-_+f*b)*r+e)}return this.dirty=this.boundsDirty=!0,this},i.prototype.beginFill=function(t,e){return this.filling=!0,this.fillColor=t||0,this.fillAlpha=void 0===e?1:e,this.currentPath&&this.currentPath.shape.points.length<=2&&(this.currentPath.fill=this.filling,this.currentPath.fillColor=this.fillColor,this.currentPath.fillAlpha=this.fillAlpha),this},i.prototype.endFill=function(){return this.filling=!1,this.fillColor=null,this.fillAlpha=1,this},i.prototype.drawRect=function(t,e,r,i){return this.drawShape(new u.Rectangle(t,e,r,i)),this},i.prototype.drawRoundedRect=function(t,e,r,i,n){return this.drawShape(new u.RoundedRectangle(t,e,r,i,n)),this},i.prototype.drawCircle=function(t,e,r){return this.drawShape(new u.Circle(t,e,r)),this},i.prototype.drawEllipse=function(t,e,r,i){return this.drawShape(new u.Ellipse(t,e,r,i)),this},i.prototype.drawPolygon=function(t){var e=t,r=!0;if(e instanceof u.Polygon&&(r=e.closed,e=e.points),!Array.isArray(e)){e=new Array(arguments.length);for(var i=0;ig?g:S,S=S>y?y:S,S=S>b?b:S,w=w>m?m:w,w=w>x?x:w,w=w>_?_:w,T=g>T?g:T,T=y>T?y:T,T=b>T?b:T,E=m>E?m:E,E=x>E?x:E,E=_>E?_:E,this._bounds.x=S,this._bounds.width=T-S,this._bounds.y=w,this._bounds.height=E-w,this._currentBounds=this._bounds}return this._currentBounds},i.prototype.containsPoint=function(t){this.worldTransform.applyInverse(t,c); +for(var e=this.graphicsData,r=0;rs?s:t,e=s+h>e?s+h:e,r=r>a?a:r,i=a+u>i?a+u:i;else if(d===l.SHAPES.CIRC)s=n.x,a=n.y,h=n.radius+f/2,u=n.radius+f/2,t=t>s-h?s-h:t,e=s+h>e?s+h:e,r=r>a-u?a-u:r,i=a+u>i?a+u:i;else if(d===l.SHAPES.ELIP)s=n.x,a=n.y,h=n.width+f/2,u=n.height+f/2,t=t>s-h?s-h:t,e=s+h>e?s+h:e,r=r>a-u?a-u:r,i=a+u>i?a+u:i;else{o=n.points;for(var v=0;vs-f?s-f:t,e=s+f>e?s+f:e,r=r>a-f?a-f:r,i=a+f>i?a+f:i}}else t=0,e=0,r=0,i=0;var g=this.boundsPadding;this._localBounds.x=t-g,this._localBounds.width=e-t+2*g,this._localBounds.y=r-g,this._localBounds.height=i-r+2*g},i.prototype.drawShape=function(t){this.currentPath&&this.currentPath.shape.points.length<=2&&this.graphicsData.pop(),this.currentPath=null;var e=new h(this.lineWidth,this.lineColor,this.lineAlpha,this.fillColor,this.fillAlpha,this.filling,t);return this.graphicsData.push(e),e.type===l.SHAPES.POLY&&(e.shape.closed=e.shape.closed||this.filling,this.currentPath=e),this.dirty=this.boundsDirty=!0,e},i.prototype.destroy=function(){n.prototype.destroy.apply(this,arguments);for(var t=0;ts;s++)e=o.data[s],1===o.data[s].mode||(shader=this.primitiveShader,r.bindShader(shader),shader.uniforms.translationMatrix=t.worldTransform.toArray(!0),shader.uniforms.tint=n.hex2rgb(t.tint),shader.uniforms.alpha=t.worldAlpha,i.bindBuffer(i.ARRAY_BUFFER,e.buffer),shader=this.primitiveShader,shader.attributes.aVertexPosition.pointer(i.FLOAT,!1,24,0),shader.attributes.aColor.pointer(i.FLOAT,!1,24,8),i.enableVertexAttribArray(shader.attributes.aVertexPosition.location),i.enableVertexAttribArray(shader.attributes.aColor.location),i.bindBuffer(i.ELEMENT_ARRAY_BUFFER,e.indexBuffer),i.drawElements(i.TRIANGLE_STRIP,e.indices.length,i.UNSIGNED_SHORT,0)),r.drawCount++},i.prototype.updateGraphics=function(t){var e=this.renderer.gl,r=t._webGL[e.id];r||(r=t._webGL[e.id]={lastIndex:0,data:[],gl:e}),t.dirty=!1;var i;if(t.clearDirty){for(t.clearDirty=!1,i=0;i=6)if(a.points.length<2*this.maximumSimplePolySize){s=this.switchMode(r,0);var h=buildPoly(a,s);h||(s=this.switchMode(r,1),buildComplexPoly(a,s))}else s=this.switchMode(r,1),buildComplexPoly(a,s);a.lineWidth>0&&(s=this.switchMode(r,0),l(a,s))}else s=this.switchMode(r,0),a.type===o.SHAPES.RECT?buildRectangle(a,s):a.type===o.SHAPES.CIRC||a.type===o.SHAPES.ELIP?buildCircle(a,s):a.type===o.SHAPES.RREC&&buildRoundedRectangle(a,s);r.lastIndex++}for(i=0;i32e4||r.mode!==e||1===e)&&(r=this.graphicsDataPool.pop()||new h(t.gl),r.mode=e,t.data.push(r))):(r=this.graphicsDataPool.pop()||new h(t.gl),r.mode=e,t.data.push(r)),r.dirty=!0,r}},{"../../const":38,"../../math":55,"../../renderers/webgl/WebGLRenderer":72,"../../renderers/webgl/utils/ObjectRenderer":87,"../../utils":105,"./WebGLGraphicsData":44,"./shaders/PrimitiveShader":45,"./utils/buildCircle":46,"./utils/buildComplexPoly":47,"./utils/buildLine":48,"./utils/buildPoly":49,"./utils/buildRectangle":50,"./utils/buildRoundedRectangle":51,earcut:24}],44:[function(t,e,r){function i(t){this.gl=t,this.color=[0,0,0],this.points=[],this.indices=[],this.buffer=t.createBuffer(),this.indexBuffer=t.createBuffer(),this.mode=1,this.alpha=1,this.dirty=!0,this.glPoints=null,this.glIndices=null}i.prototype.constructor=i,e.exports=i,i.prototype.reset=function(){this.points.length=0,this.indices.length=0},i.prototype.upload=function(){var t=this.gl;this.glPoints=new Float32Array(this.points),t.bindBuffer(t.ARRAY_BUFFER,this.buffer),t.bufferData(t.ARRAY_BUFFER,this.glPoints,t.STATIC_DRAW),this.glIndices=new Uint16Array(this.indices),t.bindBuffer(t.ELEMENT_ARRAY_BUFFER,this.indexBuffer),t.bufferData(t.ELEMENT_ARRAY_BUFFER,this.glIndices,t.STATIC_DRAW),this.dirty=!1},i.prototype.destroy=function(){this.color=null,this.points=null,this.indices=null,this.gl.deleteBuffer(this.buffer),this.gl.deleteBuffer(this.indexBuffer),this.gl=null,this.buffer=null,this.indexBuffer=null,this.glPoints=null,this.glIndices=null}},{}],45:[function(t,e,r){function i(t){n.call(this,t,["attribute vec2 aVertexPosition;","attribute vec4 aColor;","uniform mat3 translationMatrix;","uniform mat3 projectionMatrix;","uniform float alpha;","uniform float flipY;","uniform vec3 tint;","varying vec4 vColor;","void main(void){"," gl_Position = vec4((projectionMatrix * translationMatrix * vec3(aVertexPosition, 1.0)).xy, 0.0, 1.0);"," vColor = aColor * vec4(tint * alpha, alpha);","}"].join("\n"),["precision mediump float;","varying vec4 vColor;","void main(void){"," gl_FragColor = vColor;","}"].join("\n"))}var n=t("pixi-gl-core").GLShader;i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i},{"pixi-gl-core":1}],46:[function(t,e,r){var i=t("./buildLine"),n=t("../../../utils"),o=function(t,e){var r,o,s=t.shape,a=s.x,h=s.y;t.type===CONST.SHAPES.CIRC?(r=s.radius,o=s.radius):(r=s.width,o=s.height);var u=Math.floor(30*Math.sqrt(s.radius))||Math.floor(15*Math.sqrt(s.width+s.height)),l=2*Math.PI/u,c=0;if(t.fill){var p=n.hex2rgb(t.fillColor),d=t.fillAlpha,f=p[0]*d,v=p[1]*d,g=p[2]*d,m=e.points,y=e.indices,x=m.length/6;for(y.push(x),c=0;u+1>c;c++)m.push(a,h,f,v,g,d),m.push(a+Math.sin(l*c)*r,h+Math.cos(l*c)*o,f,v,g,d),y.push(x++,x++);y.push(x-1)}if(t.lineWidth){var b=t.points;for(t.points=[],c=0;u+1>c;c++)t.points.push(a+Math.sin(l*c)*r,h+Math.cos(l*c)*o);i(t,e),t.points=b}};e.exports=o},{"../../../utils":105,"./buildLine":48}],47:[function(t,e,r){var i=(t("./buildLine"),t("../../../utils")),n=function(t,e){var r=t.points.slice();if(!(r.length<6)){var n=e.indices;e.points=r,e.alpha=t.fillAlpha,e.color=i.hex2rgb(t.fillColor);for(var o,s,a=1/0,h=-(1/0),u=1/0,l=-(1/0),c=0;co?o:a,h=o>h?o:h,u=u>s?s:u,l=s>l?s:l;r.push(a,u,h,u,h,l,a,l);var p=r.length/2;for(c=0;p>c;c++)n.push(c)}};e.exports=n},{"../../../utils":105,"./buildLine":48}],48:[function(t,e,r){var i=t("../../../math"),n=t("../../../utils"),o=function(t,e){var r=0,o=t.points;if(0!==o.length){var s=new i.Point(o[0],o[1]),a=new i.Point(o[o.length-2],o[o.length-1]);if(s.x===a.x&&s.y===a.y){o=o.slice(),o.pop(),o.pop(),a=new i.Point(o[o.length-2],o[o.length-1]);var h=a.x+.5*(s.x-a.x),u=a.y+.5*(s.y-a.y);o.unshift(h,u),o.push(h,u)}var l,c,p,d,f,v,g,m,y,x,b,_,T,E,S,w,C,A,M,R,O,P,D,F=e.points,L=e.indices,B=o.length/2,I=o.length,N=F.length/6,U=t.lineWidth/2,k=n.hex2rgb(t.lineColor),j=t.lineAlpha,G=k[0]*j,X=k[1]*j,Y=k[2]*j;for(p=o[0],d=o[1],f=o[2],v=o[3],y=-(d-v),x=p-f,D=Math.sqrt(y*y+x*x),y/=D,x/=D,y*=U,x*=U,F.push(p-y,d-x,G,X,Y,j),F.push(p+y,d+x,G,X,Y,j),r=1;B-1>r;r++)p=o[2*(r-1)],d=o[2*(r-1)+1],f=o[2*r],v=o[2*r+1],g=o[2*(r+1)],m=o[2*(r+1)+1],y=-(d-v),x=p-f,D=Math.sqrt(y*y+x*x),y/=D,x/=D,y*=U,x*=U,b=-(v-m),_=f-g,D=Math.sqrt(b*b+_*_),b/=D,_/=D,b*=U,_*=U,S=-x+d-(-x+v),w=-y+f-(-y+p),C=(-y+p)*(-x+v)-(-y+f)*(-x+d),A=-_+m-(-_+v),M=-b+f-(-b+g),R=(-b+g)*(-_+v)-(-b+f)*(-_+m),O=S*M-A*w,Math.abs(O)<.1?(O+=10.1,F.push(f-y,v-x,G,X,Y,j),F.push(f+y,v+x,G,X,Y,j)):(l=(w*R-M*C)/O,c=(A*C-S*R)/O,P=(l-f)*(l-f)+(c-v)*(c-v),P>19600?(T=y-b,E=x-_,D=Math.sqrt(T*T+E*E),T/=D,E/=D,T*=U,E*=U,F.push(f-T,v-E),F.push(G,X,Y,j),F.push(f+T,v+E),F.push(G,X,Y,j),F.push(f-T,v-E),F.push(G,X,Y,j),I++):(F.push(l,c),F.push(G,X,Y,j),F.push(f-(l-f),v-(c-v)),F.push(G,X,Y,j)));for(p=o[2*(B-2)],d=o[2*(B-2)+1],f=o[2*(B-1)],v=o[2*(B-1)+1],y=-(d-v),x=p-f,D=Math.sqrt(y*y+x*x),y/=D,x/=D,y*=U,x*=U,F.push(f-y,v-x),F.push(G,X,Y,j),F.push(f+y,v+x),F.push(G,X,Y,j),L.push(N),r=0;I>r;r++)L.push(N++);L.push(N-1)}};e.exports=o},{"../../../math":55,"../../../utils":105}],49:[function(t,e,r){var i=t("../../../utils"),n=function(t,e){var r=t.points;if(!(r.length<6)){var n=e.points,o=e.indices,s=r.length/2,a=i.hex2rgb(t.fillColor),h=t.fillAlpha,u=a[0]*h,l=a[1]*h,c=a[2]*h,p=earcut(r,null,2);if(!p)return!1;var d=n.length/6,f=0;for(f=0;ff;f++)n.push(r[2*f],r[2*f+1],u,l,c,h);return!0}};e.exports=n},{"../../../utils":105}],50:[function(t,e,r){var i=t("./buildLine"),n=t("../../../utils"),o=function(t,e){var r=t.shape,o=r.x,s=r.y,a=r.width,h=r.height;if(t.fill){var u=n.hex2rgb(t.fillColor),l=t.fillAlpha,c=u[0]*l,p=u[1]*l,d=u[2]*l,f=e.points,v=e.indices,g=f.length/6;f.push(o,s),f.push(c,p,d,l),f.push(o+a,s),f.push(c,p,d,l),f.push(o,s+h),f.push(c,p,d,l),f.push(o+a,s+h),f.push(c,p,d,l),v.push(g,g,g+1,g+2,g+3,g+3)}if(t.lineWidth){var m=t.points;t.points=[o,s,o+a,s,o+a,s+h,o,s+h,o,s],i(t,e),t.points=m}};e.exports=o},{"../../../utils":105,"./buildLine":48}],51:[function(t,e,r){var i=(t("./buildLine"),t("../../../utils"));buildRoundedRectangle=function(t,e){var r=t.shape,n=r.x,o=r.y,s=r.width,a=r.height,h=r.radius,u=[];if(u.push(n,o+h),this.quadraticBezierCurve(n,o+a-h,n,o+a,n+h,o+a,u),this.quadraticBezierCurve(n+s-h,o+a,n+s,o+a,n+s,o+a-h,u),this.quadraticBezierCurve(n+s,o+h,n+s,o,n+s-h,o,u),this.quadraticBezierCurve(n+h,o,n,o,n,o+h+1e-10,u),t.fill){var l=i.hex2rgb(t.fillColor),c=t.fillAlpha,p=l[0]*c,d=l[1]*c,f=l[2]*c,v=e.points,g=e.indices,m=v.length/6,y=earcut(u,null,2),x=0;for(x=0;x=m;m++)g=m/f,h=a(t,r,g),u=a(e,i,g),l=a(r,n,g),c=a(i,o,g),p=a(h,l,g),d=a(u,c,g),v.push(p,d);return v},e.exports=buildRoundedRectangle},{"../../../utils":105,"./buildLine":48}],52:[function(t,e,r){var i=e.exports=Object.assign(t("./const"),t("./math"),{utils:t("./utils"),ticker:t("./ticker"),DisplayObject:t("./display/DisplayObject"),Container:t("./display/Container"),Sprite:t("./sprites/Sprite"),ParticleContainer:t("./particles/ParticleContainer"),SpriteRenderer:t("./sprites/webgl/SpriteRenderer"),ParticleRenderer:t("./particles/webgl/ParticleRenderer"),Text:t("./text/Text"),Graphics:t("./graphics/Graphics"),GraphicsData:t("./graphics/GraphicsData"),GraphicsRenderer:t("./graphics/webgl/GraphicsRenderer"),Texture:t("./textures/Texture"),BaseTexture:t("./textures/BaseTexture"),RenderTexture:t("./textures/RenderTexture"),VideoBaseTexture:t("./textures/VideoBaseTexture"),TextureUvs:t("./textures/TextureUvs"),CanvasRenderer:t("./renderers/canvas/CanvasRenderer"),CanvasGraphics:t("./renderers/canvas/utils/CanvasGraphics"),CanvasBuffer:t("./renderers/canvas/utils/CanvasBuffer"),WebGLRenderer:t("./renderers/webgl/WebGLRenderer"),WebGLManager:t("./renderers/webgl/managers/WebGLManager"),ShaderManager:t("./renderers/webgl/managers/ShaderManager"),Shader:t("./renderers/webgl/shaders/Shader"),ObjectRenderer:t("./renderers/webgl/utils/ObjectRenderer"),RenderTarget:t("./renderers/webgl/utils/RenderTarget"),AbstractFilter:t("./renderers/webgl/filters/AbstractFilter"),FXAAFilter:t("./renderers/webgl/filters/FXAAFilter"),SpriteMaskFilter:t("./renderers/webgl/filters/SpriteMaskFilter"),glCore:t("pixi-gl-core"),autoDetectRenderer:function(t,e,r,n){return t=t||800,e=e||600,!n&&i.utils.isWebGLSupported()?new i.WebGLRenderer(t,e,r):new i.CanvasRenderer(t,e,r)}})},{"./const":38,"./display/Container":39,"./display/DisplayObject":40,"./graphics/Graphics":41,"./graphics/GraphicsData":42,"./graphics/webgl/GraphicsRenderer":43,"./math":55,"./particles/ParticleContainer":61,"./particles/webgl/ParticleRenderer":63,"./renderers/canvas/CanvasRenderer":66,"./renderers/canvas/utils/CanvasBuffer":67,"./renderers/canvas/utils/CanvasGraphics":68,"./renderers/webgl/WebGLRenderer":72,"./renderers/webgl/filters/AbstractFilter":73,"./renderers/webgl/filters/FXAAFilter":74,"./renderers/webgl/filters/SpriteMaskFilter":75,"./renderers/webgl/managers/ShaderManager":79,"./renderers/webgl/managers/WebGLManager":81,"./renderers/webgl/shaders/Shader":84,"./renderers/webgl/utils/ObjectRenderer":87,"./renderers/webgl/utils/RenderTarget":89,"./sprites/Sprite":93,"./sprites/webgl/SpriteRenderer":94,"./text/Text":96,"./textures/BaseTexture":97,"./textures/RenderTexture":98,"./textures/Texture":99,"./textures/TextureUvs":100,"./textures/VideoBaseTexture":101,"./ticker":103,"./utils":105,"pixi-gl-core":1}],53:[function(t,e,r){function i(){this.a=1,this.b=0,this.c=0,this.d=1,this.tx=0,this.ty=0}var n=t("./Point");i.prototype.constructor=i,e.exports=i,i.prototype.fromArray=function(t){this.a=t[0],this.b=t[1],this.c=t[3],this.d=t[4],this.tx=t[2],this.ty=t[5]},i.prototype.set=function(t,e,r,i,n,o){return this.a=t,this.b=e,this.c=r,this.d=i,this.tx=n,this.ty=o,this},i.prototype.toArray=function(t,e){this.array||(this.array=new Float32Array(9));var r=e||this.array;return t?(r[0]=this.a,r[1]=this.b,r[2]=0,r[3]=this.c,r[4]=this.d,r[5]=0,r[6]=this.tx,r[7]=this.ty,r[8]=1):(r[0]=this.a,r[1]=this.c,r[2]=this.tx,r[3]=this.b,r[4]=this.d,r[5]=this.ty,r[6]=0,r[7]=0,r[8]=1),r},i.prototype.apply=function(t,e){e=e||new n;var r=t.x,i=t.y;return e.x=this.a*r+this.c*i+this.tx,e.y=this.b*r+this.d*i+this.ty,e},i.prototype.applyInverse=function(t,e){e=e||new n;var r=1/(this.a*this.d+this.c*-this.b),i=t.x,o=t.y;return e.x=this.d*r*i+-this.c*r*o+(this.ty*this.c-this.tx*this.d)*r,e.y=this.a*r*o+-this.b*r*i+(-this.ty*this.a+this.tx*this.b)*r,e},i.prototype.translate=function(t,e){return this.tx+=t,this.ty+=e,this},i.prototype.scale=function(t,e){return this.a*=t,this.d*=e,this.c*=t,this.b*=e,this.tx*=t,this.ty*=e,this},i.prototype.rotate=function(t){var e=Math.cos(t),r=Math.sin(t),i=this.a,n=this.c,o=this.tx;return this.a=i*e-this.b*r,this.b=i*r+this.b*e,this.c=n*e-this.d*r,this.d=n*r+this.d*e,this.tx=o*e-this.ty*r,this.ty=o*r+this.ty*e,this},i.prototype.append=function(t){var e=this.a,r=this.b,i=this.c,n=this.d;return this.a=t.a*e+t.b*i,this.b=t.a*r+t.b*n,this.c=t.c*e+t.d*i,this.d=t.c*r+t.d*n,this.tx=t.tx*e+t.ty*i+this.tx,this.ty=t.tx*r+t.ty*n+this.ty,this},i.prototype.setTransform=function(t,e,r,i,n,o,s,a,h){var u,l,c,p,d,f,v,g,m,y;return d=Math.sin(s),f=Math.cos(s),v=Math.cos(h),g=Math.sin(h),m=-Math.sin(a),y=Math.cos(a),u=f*n,l=d*n,c=-d*o,p=f*o,this.a=v*u+g*c,this.b=v*l+g*p,this.c=m*u+y*c,this.d=m*l+y*p,this.tx=t+(r*u+i*c),this.ty=e+(r*l+i*p),this},i.prototype.prepend=function(t){var e=this.tx;if(1!==t.a||0!==t.b||0!==t.c||1!==t.d){var r=this.a,i=this.c;this.a=r*t.a+this.b*t.c,this.b=r*t.b+this.b*t.d,this.c=i*t.a+this.d*t.c,this.d=i*t.b+this.d*t.d}return this.tx=e*t.a+this.ty*t.c+t.tx,this.ty=e*t.b+this.ty*t.d+t.ty,this},i.prototype.invert=function(){var t=this.a,e=this.b,r=this.c,i=this.d,n=this.tx,o=t*i-e*r;return this.a=i/o,this.b=-e/o,this.c=-r/o,this.d=t/o,this.tx=(r*this.ty-i*n)/o,this.ty=-(t*this.ty-e*n)/o,this},i.prototype.identity=function(){return this.a=1,this.b=0,this.c=0,this.d=1,this.tx=0,this.ty=0,this},i.prototype.clone=function(){var t=new i;return t.a=this.a,t.b=this.b,t.c=this.c,t.d=this.d,t.tx=this.tx,t.ty=this.ty,t},i.prototype.copy=function(t){return t.a=this.a,t.b=this.b,t.c=this.c,t.d=this.d,t.tx=this.tx,t.ty=this.ty,t},i.IDENTITY=new i,i.TEMP_MATRIX=new i},{"./Point":54}],54:[function(t,e,r){function i(t,e){this.x=t||0,this.y=e||0}i.prototype.constructor=i,e.exports=i,i.prototype.clone=function(){return new i(this.x,this.y)},i.prototype.copy=function(t){this.set(t.x,t.y)},i.prototype.equals=function(t){return t.x===this.x&&t.y===this.y},i.prototype.set=function(t,e){this.x=t||0,this.y=e||(0!==e?this.x:0)}},{}],55:[function(t,e,r){e.exports={Point:t("./Point"),Matrix:t("./Matrix"),Circle:t("./shapes/Circle"),Ellipse:t("./shapes/Ellipse"),Polygon:t("./shapes/Polygon"),Rectangle:t("./shapes/Rectangle"),RoundedRectangle:t("./shapes/RoundedRectangle")}},{"./Matrix":53,"./Point":54,"./shapes/Circle":56,"./shapes/Ellipse":57,"./shapes/Polygon":58,"./shapes/Rectangle":59,"./shapes/RoundedRectangle":60}],56:[function(t,e,r){function i(t,e,r){this.x=t||0,this.y=e||0,this.radius=r||0,this.type=o.SHAPES.CIRC}var n=t("./Rectangle"),o=t("../../const");i.prototype.constructor=i,e.exports=i,i.prototype.clone=function(){return new i(this.x,this.y,this.radius)},i.prototype.contains=function(t,e){if(this.radius<=0)return!1;var r=this.x-t,i=this.y-e,n=this.radius*this.radius;return r*=r,i*=i,n>=r+i},i.prototype.getBounds=function(){return new n(this.x-this.radius,this.y-this.radius,2*this.radius,2*this.radius)}},{"../../const":38,"./Rectangle":59}],57:[function(t,e,r){function i(t,e,r,i){this.x=t||0,this.y=e||0,this.width=r||0,this.height=i||0,this.type=o.SHAPES.ELIP}var n=t("./Rectangle"),o=t("../../const");i.prototype.constructor=i,e.exports=i,i.prototype.clone=function(){return new i(this.x,this.y,this.width,this.height)},i.prototype.contains=function(t,e){if(this.width<=0||this.height<=0)return!1;var r=(t-this.x)/this.width,i=(e-this.y)/this.height;return r*=r,i*=i,1>=r+i},i.prototype.getBounds=function(){return new n(this.x-this.width,this.y-this.height,this.width,this.height)}},{"../../const":38,"./Rectangle":59}],58:[function(t,e,r){function i(t){var e=t;if(!Array.isArray(e)){e=new Array(arguments.length);for(var r=0;rs;s++)i.push(e[s].x,e[s].y);e=i}this.closed=!0,this.points=e,this.type=o.SHAPES.POLY}var n=t("../Point"),o=t("../../const");i.prototype.constructor=i,e.exports=i,i.prototype.clone=function(){return new i(this.points.slice())},i.prototype.contains=function(t,e){for(var r=!1,i=this.points.length/2,n=0,o=i-1;i>n;o=n++){var s=this.points[2*n],a=this.points[2*n+1],h=this.points[2*o],u=this.points[2*o+1],l=a>e!=u>e&&(h-s)*(e-a)/(u-a)+s>t;l&&(r=!r)}return r}},{"../../const":38,"../Point":54}],59:[function(t,e,r){function i(t,e,r,i){this.x=t||0,this.y=e||0,this.width=r||0,this.height=i||0,this.type=n.SHAPES.RECT}var n=t("../../const");i.prototype.constructor=i,e.exports=i,i.EMPTY=new i(0,0,0,0),i.prototype.clone=function(){return new i(this.x,this.y,this.width,this.height)},i.prototype.contains=function(t,e){return this.width<=0||this.height<=0?!1:t>=this.x&&t=this.y&&e=this.x&&t<=this.x+this.width&&e>=this.y&&e<=this.y+this.height?!0:!1}},{"../../const":38}],61:[function(t,e,r){function i(t,e,r){n.call(this),r=r||15e3,t=t||15e3;var i=16384;r>i&&(r=i),r>t&&(r=t),this._properties=[!1,!0,!1,!1,!1],this._maxSize=t,this._batchSize=r,this._buffers=null,this._bufferToUpdate=0,this.interactiveChildren=!1,this.blendMode=o.BLEND_MODES.NORMAL,this.roundPixels=!0,this.setProperties(e)}var n=t("../display/Container"),o=t("../const");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.setProperties=function(t){t&&(this._properties[0]="scale"in t?!!t.scale:this._properties[0],this._properties[1]="position"in t?!!t.position:this._properties[1],this._properties[2]="rotation"in t?!!t.rotation:this._properties[2],this._properties[3]="uvs"in t?!!t.uvs:this._properties[3],this._properties[4]="alpha"in t?!!t.alpha:this._properties[4])},i.prototype.updateTransform=function(){this.displayObjectUpdateTransform()},i.prototype.renderWebGL=function(t){this.visible&&!(this.worldAlpha<=0)&&this.children.length&&this.renderable&&(t.setObjectRenderer(t.plugins.particle),t.plugins.particle.render(this))},i.prototype.onChildrenChange=function(t){var e=Math.floor(t/this._batchSize);er;r+=6,i+=4)this.indices[r+0]=i+0,this.indices[r+1]=i+1,this.indices[r+2]=i+2,this.indices[r+3]=i+0,this.indices[r+4]=i+2,this.indices[r+5]=i+3;this.shader=null,this.indexBuffer=null,this.properties=null,this.tempMatrix=new h.Matrix}var n=t("../../renderers/webgl/utils/ObjectRenderer"),o=t("../../renderers/webgl/WebGLRenderer"),s=t("./ParticleShader"),a=t("./ParticleBuffer"),h=t("../../math");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,o.registerPlugin("particle",i),i.prototype.onContextChange=function(){var t=this.renderer.gl;this.shader=new s(this.renderer.shaderManager),this.indexBuffer=t.createBuffer(),t.bindBuffer(t.ELEMENT_ARRAY_BUFFER,this.indexBuffer),t.bufferData(t.ELEMENT_ARRAY_BUFFER,this.indices,t.STATIC_DRAW),this.properties=[{attribute:this.shader.attributes.aVertexPosition,size:2,uploadFunction:this.uploadVertices,offset:0},{attribute:this.shader.attributes.aPositionCoord,size:2,uploadFunction:this.uploadPosition,offset:0},{attribute:this.shader.attributes.aRotation,size:1,uploadFunction:this.uploadRotation,offset:0},{attribute:this.shader.attributes.aTextureCoord,size:2,uploadFunction:this.uploadUvs,offset:0},{attribute:this.shader.attributes.aColor,size:1,uploadFunction:this.uploadAlpha,offset:0}]},i.prototype.start=function(){var t=this.renderer.gl;t.activeTexture(t.TEXTURE0),t.bindBuffer(t.ELEMENT_ARRAY_BUFFER,this.indexBuffer);var e=this.shader;this.renderer.shaderManager.setShader(e)},i.prototype.render=function(t){var e=t.children,r=e.length,i=t._maxSize,n=t._batchSize;if(0!==r){r>i&&(r=i),t._buffers||(t._buffers=this.generateBuffers(t)),this.renderer.blendModeManager.setBlendMode(t.blendMode);var o=this.renderer.gl,s=t.worldTransform.copy(this.tempMatrix);s.prepend(this.renderer.currentRenderTarget.projectionMatrix),o.uniformMatrix3fv(this.shader.uniforms.projectionMatrix._location,!1,s.toArray(!0)),o.uniform1f(this.shader.uniforms.uAlpha._location,t.worldAlpha);var a=e[0]._texture.baseTexture;if(a._glTextures[o.id])o.bindTexture(o.TEXTURE_2D,a._glTextures[o.id]);else{if(!this.renderer.updateTexture(a))return;t._properties[0]&&t._properties[3]||(t._bufferToUpdate=0)}for(var h=0,u=0;r>h;h+=n,u+=1){var l=r-h;l>n&&(l=n);var c=t._buffers[u];c.uploadDynamic(e,h,l),t._bufferToUpdate===u&&(c.uploadStatic(e,h,l),t._bufferToUpdate=u+1),c.bind(this.shader),o.drawElements(o.TRIANGLES,6*l,o.UNSIGNED_SHORT,0),this.renderer.drawCount++}}},i.prototype.generateBuffers=function(t){var e,r=this.renderer.gl,i=[],n=t._maxSize,o=t._batchSize,s=t._properties;for(e=0;n>e;e+=o)i.push(new a(r,this.properties,s,o));return i},i.prototype.uploadVertices=function(t,e,r,i,n,o){for(var s,a,h,u,l,c,p,d,f,v=0;r>v;v++)s=t[e+v],a=s._texture,u=s.scale.x,l=s.scale.y,a.trim?(h=a.trim,p=h.x-s.anchor.x*h.width,c=p+a.crop.width,f=h.y-s.anchor.y*h.height,d=f+a.crop.height):(c=a._frame.width*(1-s.anchor.x),p=a._frame.width*-s.anchor.x,d=a._frame.height*(1-s.anchor.y),f=a._frame.height*-s.anchor.y),i[o]=p*u,i[o+1]=f*l,i[o+n]=c*u,i[o+n+1]=f*l,i[o+2*n]=c*u,i[o+2*n+1]=d*l,i[o+3*n]=p*u,i[o+3*n+1]=d*l,o+=4*n},i.prototype.uploadPosition=function(t,e,r,i,n,o){for(var s=0;r>s;s++){var a=t[e+s].position;i[o]=a.x,i[o+1]=a.y,i[o+n]=a.x,i[o+n+1]=a.y,i[o+2*n]=a.x,i[o+2*n+1]=a.y,i[o+3*n]=a.x,i[o+3*n+1]=a.y,o+=4*n}},i.prototype.uploadRotation=function(t,e,r,i,n,o){for(var s=0;r>s;s++){var a=t[e+s].rotation;i[o]=a,i[o+n]=a,i[o+2*n]=a,i[o+3*n]=a,o+=4*n}},i.prototype.uploadUvs=function(t,e,r,i,n,o){for(var s=0;r>s;s++){var a=t[e+s]._texture._uvs;a?(i[o]=a.x0,i[o+1]=a.y0,i[o+n]=a.x1,i[o+n+1]=a.y1,i[o+2*n]=a.x2,i[o+2*n+1]=a.y2,i[o+3*n]=a.x3,i[o+3*n+1]=a.y3,o+=4*n):(i[o]=0,i[o+1]=0,i[o+n]=0,i[o+n+1]=0,i[o+2*n]=0,i[o+2*n+1]=0,i[o+3*n]=0,i[o+3*n+1]=0,o+=4*n)}},i.prototype.uploadAlpha=function(t,e,r,i,n,o){for(var s=0;r>s;s++){var a=t[e+s].alpha;i[o]=a,i[o+n]=a,i[o+2*n]=a,i[o+3*n]=a,o+=4*n}},i.prototype.destroy=function(){this.renderer.gl&&this.renderer.gl.deleteBuffer(this.indexBuffer),n.prototype.destroy.apply(this,arguments),this.shader.destroy(),this.indices=null,this.tempMatrix=null}},{"../../math":55,"../../renderers/webgl/WebGLRenderer":72,"../../renderers/webgl/utils/ObjectRenderer":87,"./ParticleBuffer":62,"./ParticleShader":64}],64:[function(t,e,r){function i(t){n.call(this,t,["attribute vec2 aVertexPosition;","attribute vec2 aTextureCoord;","attribute float aColor;","attribute vec2 aPositionCoord;","attribute vec2 aScale;","attribute float aRotation;","uniform mat3 projectionMatrix;","varying vec2 vTextureCoord;","varying float vColor;","void main(void){"," vec2 v = aVertexPosition;"," v.x = (aVertexPosition.x) * cos(aRotation) - (aVertexPosition.y) * sin(aRotation);"," v.y = (aVertexPosition.x) * sin(aRotation) + (aVertexPosition.y) * cos(aRotation);"," v = v + aPositionCoord;"," gl_Position = vec4((projectionMatrix * vec3(v, 1.0)).xy, 0.0, 1.0);"," vTextureCoord = aTextureCoord;"," vColor = aColor;","}"].join("\n"),["precision lowp float;","varying vec2 vTextureCoord;","varying float vColor;","uniform sampler2D uSampler;","uniform float uAlpha;","void main(void){"," vec4 color = texture2D(uSampler, vTextureCoord) * vColor * uAlpha;"," if (color.a == 0.0) discard;"," gl_FragColor = color;","}"].join("\n"),{uAlpha:{type:"1f",value:1}},{aPositionCoord:0,aRotation:0})}var n=t("../../renderers/webgl/shaders/TextureShader");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i},{"../../renderers/webgl/shaders/TextureShader":85}],65:[function(t,e,r){ +function i(t,e,r,i){if(a.call(this),n.sayHello(t),i)for(var h in s.DEFAULT_RENDER_OPTIONS)"undefined"==typeof i[h]&&(i[h]=s.DEFAULT_RENDER_OPTIONS[h]);else i=s.DEFAULT_RENDER_OPTIONS;this.type=s.RENDERER_TYPE.UNKNOWN,this.width=e||800,this.height=r||600,this.view=i.view||document.createElement("canvas"),this.resolution=i.resolution,this.transparent=i.transparent,this.autoResize=i.autoResize||!1,this.blendModes=null,this.preserveDrawingBuffer=i.preserveDrawingBuffer,this.clearBeforeRender=i.clearBeforeRender,this.roundPixels=i.roundPixels,this._backgroundColor=0,this._backgroundColorRgba=[0,0,0,0],this._backgroundColorString="#000000",this.backgroundColor=i.backgroundColor||this._backgroundColor,this._tempDisplayObjectParent={worldTransform:new o.Matrix,worldAlpha:1,children:[]},this._lastObjectRendered=this._tempDisplayObjectParent}var n=t("../utils"),o=t("../math"),s=t("../const"),a=t("eventemitter3");i.prototype=Object.create(a.prototype),i.prototype.constructor=i,e.exports=i,Object.defineProperties(i.prototype,{backgroundColor:{get:function(){return this._backgroundColor},set:function(t){this._backgroundColor=t,this._backgroundColorString=n.hex2string(t),n.hex2rgb(t,this._backgroundColorRgba)}}}),i.prototype.resize=function(t,e){this.width=t*this.resolution,this.height=e*this.resolution,this.view.width=this.width,this.view.height=this.height,this.autoResize&&(this.view.style.width=this.width/this.resolution+"px",this.view.style.height=this.height/this.resolution+"px")},i.prototype.destroy=function(t){t&&this.view.parentNode&&this.view.parentNode.removeChild(this.view),this.type=s.RENDERER_TYPE.UNKNOWN,this.width=0,this.height=0,this.view=null,this.resolution=0,this.transparent=!1,this.autoResize=!1,this.blendModes=null,this.preserveDrawingBuffer=!1,this.clearBeforeRender=!1,this.roundPixels=!1,this._backgroundColor=0,this._backgroundColorRgba=null,this._backgroundColorString=null}},{"../const":38,"../math":55,"../utils":105,eventemitter3:25}],66:[function(t,e,r){function i(t,e,r){r=r||{},n.call(this,"Canvas",t,e,r),this.type=h.RENDERER_TYPE.CANVAS,this.context=this.view.getContext("2d",{alpha:this.transparent}),this.refresh=!0,this.maskManager=new o,this.smoothProperty="imageSmoothingEnabled",this.context.imageSmoothingEnabled||(this.context.webkitImageSmoothingEnabled?this.smoothProperty="webkitImageSmoothingEnabled":this.context.mozImageSmoothingEnabled?this.smoothProperty="mozImageSmoothingEnabled":this.context.oImageSmoothingEnabled?this.smoothProperty="oImageSmoothingEnabled":this.context.msImageSmoothingEnabled&&(this.smoothProperty="msImageSmoothingEnabled")),this.initPlugins(),this._mapBlendModes(),this._tempDisplayObjectParent={worldTransform:new a.Matrix,worldAlpha:1},this.resize(t,e)}var n=t("../SystemRenderer"),o=t("./utils/CanvasMaskManager"),s=t("../../utils"),a=t("../../math"),h=t("../../const");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,s.pluginTarget.mixin(i),i.prototype.render=function(t){this.emit("prerender");var e=t.parent;this._lastObjectRendered=t,t.parent=this._tempDisplayObjectParent,t.updateTransform(),t.parent=e,this.context.setTransform(1,0,0,1,0,0),this.context.globalAlpha=1,this.context.globalCompositeOperation=this.blendModes[h.BLEND_MODES.NORMAL],navigator.isCocoonJS&&this.view.screencanvas&&(this.context.fillStyle="black",this.context.clear()),this.clearBeforeRender&&(this.transparent?this.context.clearRect(0,0,this.width,this.height):(this.context.fillStyle=this._backgroundColorString,this.context.fillRect(0,0,this.width,this.height))),this.renderDisplayObject(t,this.context),this.emit("postrender")},i.prototype.destroy=function(t){this.destroyPlugins(),n.prototype.destroy.call(this,t),this.context=null,this.refresh=!0,this.maskManager.destroy(),this.maskManager=null,this.smoothProperty=null},i.prototype.renderDisplayObject=function(t,e){var r=this.context;this.context=e,t.renderCanvas(this),this.context=r},i.prototype.resize=function(t,e){n.prototype.resize.call(this,t,e),this.smoothProperty&&(this.context[this.smoothProperty]=h.SCALE_MODES.DEFAULT===h.SCALE_MODES.LINEAR)},i.prototype._mapBlendModes=function(){this.blendModes||(this.blendModes={},s.canUseNewCanvasBlendModes()?(this.blendModes[h.BLEND_MODES.NORMAL]="source-over",this.blendModes[h.BLEND_MODES.ADD]="lighter",this.blendModes[h.BLEND_MODES.MULTIPLY]="multiply",this.blendModes[h.BLEND_MODES.SCREEN]="screen",this.blendModes[h.BLEND_MODES.OVERLAY]="overlay",this.blendModes[h.BLEND_MODES.DARKEN]="darken",this.blendModes[h.BLEND_MODES.LIGHTEN]="lighten",this.blendModes[h.BLEND_MODES.COLOR_DODGE]="color-dodge",this.blendModes[h.BLEND_MODES.COLOR_BURN]="color-burn",this.blendModes[h.BLEND_MODES.HARD_LIGHT]="hard-light",this.blendModes[h.BLEND_MODES.SOFT_LIGHT]="soft-light",this.blendModes[h.BLEND_MODES.DIFFERENCE]="difference",this.blendModes[h.BLEND_MODES.EXCLUSION]="exclusion",this.blendModes[h.BLEND_MODES.HUE]="hue",this.blendModes[h.BLEND_MODES.SATURATION]="saturate",this.blendModes[h.BLEND_MODES.COLOR]="color",this.blendModes[h.BLEND_MODES.LUMINOSITY]="luminosity"):(this.blendModes[h.BLEND_MODES.NORMAL]="source-over",this.blendModes[h.BLEND_MODES.ADD]="lighter",this.blendModes[h.BLEND_MODES.MULTIPLY]="source-over",this.blendModes[h.BLEND_MODES.SCREEN]="source-over",this.blendModes[h.BLEND_MODES.OVERLAY]="source-over",this.blendModes[h.BLEND_MODES.DARKEN]="source-over",this.blendModes[h.BLEND_MODES.LIGHTEN]="source-over",this.blendModes[h.BLEND_MODES.COLOR_DODGE]="source-over",this.blendModes[h.BLEND_MODES.COLOR_BURN]="source-over",this.blendModes[h.BLEND_MODES.HARD_LIGHT]="source-over",this.blendModes[h.BLEND_MODES.SOFT_LIGHT]="source-over",this.blendModes[h.BLEND_MODES.DIFFERENCE]="source-over",this.blendModes[h.BLEND_MODES.EXCLUSION]="source-over",this.blendModes[h.BLEND_MODES.HUE]="source-over",this.blendModes[h.BLEND_MODES.SATURATION]="source-over",this.blendModes[h.BLEND_MODES.COLOR]="source-over",this.blendModes[h.BLEND_MODES.LUMINOSITY]="source-over"))}},{"../../const":38,"../../math":55,"../../utils":105,"../SystemRenderer":65,"./utils/CanvasMaskManager":69}],67:[function(t,e,r){function i(t,e){this.canvas=document.createElement("canvas"),this.context=this.canvas.getContext("2d"),this.canvas.width=t,this.canvas.height=e}i.prototype.constructor=i,e.exports=i,Object.defineProperties(i.prototype,{width:{get:function(){return this.canvas.width},set:function(t){this.canvas.width=t}},height:{get:function(){return this.canvas.height},set:function(t){this.canvas.height=t}}}),i.prototype.clear=function(){this.context.setTransform(1,0,0,1,0,0),this.context.clearRect(0,0,this.canvas.width,this.canvas.height)},i.prototype.resize=function(t,e){this.canvas.width=t,this.canvas.height=e},i.prototype.destroy=function(){this.context=null,this.canvas=null}},{}],68:[function(t,e,r){var i=t("../../../const"),n={};e.exports=n,n.renderGraphics=function(t,e){var r=t.worldAlpha;t.dirty&&(this.updateGraphicsTint(t),t.dirty=!1);for(var n=0;nA?A:C,e.beginPath(),e.moveTo(T,E+C),e.lineTo(T,E+w-C),e.quadraticCurveTo(T,E+w,T+C,E+w),e.lineTo(T+S-C,E+w),e.quadraticCurveTo(T+S,E+w,T+S,E+w-C),e.lineTo(T+S,E+C),e.quadraticCurveTo(T+S,E,T+S-C,E),e.lineTo(T+C,E),e.quadraticCurveTo(T,E,T,E+C),e.closePath(),(o.fillColor||0===o.fillColor)&&(e.globalAlpha=o.fillAlpha*r,e.fillStyle="#"+("00000"+(0|a).toString(16)).substr(-6),e.fill()),o.lineWidth&&(e.globalAlpha=o.lineAlpha*r,e.strokeStyle="#"+("00000"+(0|h).toString(16)).substr(-6),e.stroke())}}},n.renderGraphicsMask=function(t,e){var r=t.graphicsData.length;if(0!==r){e.beginPath();for(var n=0;r>n;n++){var o=t.graphicsData[n],s=o.shape;if(o.type===i.SHAPES.POLY){var a=s.points;e.moveTo(a[0],a[1]);for(var h=1;hw?w:S,e.moveTo(b,_+S),e.lineTo(b,_+E-S),e.quadraticCurveTo(b,_+E,b+S,_+E),e.lineTo(b+T-S,_+E),e.quadraticCurveTo(b+T,_+E,b+T,_+E-S),e.lineTo(b+T,_+S),e.quadraticCurveTo(b+T,_,b+T-S,_),e.lineTo(b+S,_),e.quadraticCurveTo(b,_,b,_+S),e.closePath()}}}},n.updateGraphicsTint=function(t){if(16777215!==t.tint||t._prevTint!==t.tint){t._prevTint=t.tint;for(var e=(t.tint>>16&255)/255,r=(t.tint>>8&255)/255,i=(255&t.tint)/255,n=0;n>16&255)/255*e*255<<16)+((s>>8&255)/255*r*255<<8)+(255&s)/255*i*255,o._lineTint=((a>>16&255)/255*e*255<<16)+((a>>8&255)/255*r*255<<8)+(255&a)/255*i*255}}}},{"../../../const":38}],69:[function(t,e,r){function i(){}var n=t("./CanvasGraphics");i.prototype.constructor=i,e.exports=i,i.prototype.pushMask=function(t,e){e.context.save();var r=t.alpha,i=t.worldTransform,o=e.resolution;e.context.setTransform(i.a*o,i.b*o,i.c*o,i.d*o,i.tx*o,i.ty*o),t.texture||(n.renderGraphicsMask(t,e.context),e.context.clip()),t.worldAlpha=r},i.prototype.popMask=function(t){t.context.restore()},i.prototype.destroy=function(){}},{"./CanvasGraphics":68}],70:[function(t,e,r){var i=t("../../../utils"),n={};e.exports=n,n.getTintedTexture=function(t,e){var r=t.texture;e=n.roundColor(e);var i="#"+("00000"+(0|e).toString(16)).substr(-6);if(r.tintCache=r.tintCache||{},r.tintCache[i])return r.tintCache[i];var o=n.canvas||document.createElement("canvas");if(n.tintMethod(r,e,o),n.convertTintToImage){var s=new Image;s.src=o.toDataURL(),r.tintCache[i]=s}else r.tintCache[i]=o,n.canvas=null;return o},n.tintWithMultiply=function(t,e,r){var i=r.getContext("2d"),n=t.baseTexture.resolution,o=t.crop.clone();o.x*=n,o.y*=n,o.width*=n,o.height*=n,r.width=o.width,r.height=o.height,i.fillStyle="#"+("00000"+(0|e).toString(16)).substr(-6),i.fillRect(0,0,o.width,o.height),i.globalCompositeOperation="multiply",i.drawImage(t.baseTexture.source,o.x,o.y,o.width,o.height,0,0,o.width,o.height),i.globalCompositeOperation="destination-atop",i.drawImage(t.baseTexture.source,o.x,o.y,o.width,o.height,0,0,o.width,o.height)},n.tintWithOverlay=function(t,e,r){var i=r.getContext("2d"),n=t.baseTexture.resolution,o=t.crop.clone();o.x*=n,o.y*=n,o.width*=n,o.height*=n,r.width=o.width,r.height=o.height,i.globalCompositeOperation="copy",i.fillStyle="#"+("00000"+(0|e).toString(16)).substr(-6),i.fillRect(0,0,o.width,o.height),i.globalCompositeOperation="destination-atop",i.drawImage(t.baseTexture.source,o.x,o.y,o.width,o.height,0,0,o.width,o.height)},n.tintWithPerPixel=function(t,e,r){var n=r.getContext("2d"),o=t.baseTexture.resolution,s=t.crop.clone();s.x*=o,s.y*=o,s.width*=o,s.height*=o,r.width=s.width,r.height=s.height,n.globalCompositeOperation="copy",n.drawImage(t.baseTexture.source,s.x,s.y,s.width,s.height,0,0,s.width,s.height);for(var a=i.hex2rgb(e),h=a[0],u=a[1],l=a[2],c=n.getImageData(0,0,s.width,s.height),p=c.data,d=0;de;++e)this.shaders[e].syncUniform(t)}},{"../shaders/TextureShader":85}],74:[function(t,e,r){function i(){n.call(this,"\nprecision mediump float;\n\nattribute vec2 aVertexPosition;\nattribute vec2 aTextureCoord;\nattribute vec4 aColor;\n\nuniform mat3 projectionMatrix;\nuniform vec2 resolution;\n\nvarying vec2 vTextureCoord;\nvarying vec4 vColor;\n\nvarying vec2 vResolution;\n\n//texcoords computed in vertex step\n//to avoid dependent texture reads\nvarying vec2 v_rgbNW;\nvarying vec2 v_rgbNE;\nvarying vec2 v_rgbSW;\nvarying vec2 v_rgbSE;\nvarying vec2 v_rgbM;\n\n\nvoid texcoords(vec2 fragCoord, vec2 resolution,\n out vec2 v_rgbNW, out vec2 v_rgbNE,\n out vec2 v_rgbSW, out vec2 v_rgbSE,\n out vec2 v_rgbM) {\n vec2 inverseVP = 1.0 / resolution.xy;\n v_rgbNW = (fragCoord + vec2(-1.0, -1.0)) * inverseVP;\n v_rgbNE = (fragCoord + vec2(1.0, -1.0)) * inverseVP;\n v_rgbSW = (fragCoord + vec2(-1.0, 1.0)) * inverseVP;\n v_rgbSE = (fragCoord + vec2(1.0, 1.0)) * inverseVP;\n v_rgbM = vec2(fragCoord * inverseVP);\n}\n\nvoid main(void){\n gl_Position = vec4((projectionMatrix * vec3(aVertexPosition, 1.0)).xy, 0.0, 1.0);\n vTextureCoord = aTextureCoord;\n vColor = vec4(aColor.rgb * aColor.a, aColor.a);\n vResolution = resolution;\n\n //compute the texture coords and send them to varyings\n texcoords(aTextureCoord * resolution, resolution, v_rgbNW, v_rgbNE, v_rgbSW, v_rgbSE, v_rgbM);\n}\n",'precision lowp float;\n\n\n/**\nBasic FXAA implementation based on the code on geeks3d.com with the\nmodification that the texture2DLod stuff was removed since it\'s\nunsupported by WebGL.\n\n--\n\nFrom:\nhttps://github.com/mitsuhiko/webgl-meincraft\n\nCopyright (c) 2011 by Armin Ronacher.\n\nSome rights reserved.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are\nmet:\n\n * Redistributions of source code must retain the above copyright\n notice, this list of conditions and the following disclaimer.\n\n * Redistributions in binary form must reproduce the above\n copyright notice, this list of conditions and the following\n disclaimer in the documentation and/or other materials provided\n with the distribution.\n\n * The names of the contributors may not be used to endorse or\n promote products derived from this software without specific\n prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\nLIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\nA PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\nOWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\nSPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\nLIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\nDATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\nTHEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\nOF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n*/\n\n#ifndef FXAA_REDUCE_MIN\n #define FXAA_REDUCE_MIN (1.0/ 128.0)\n#endif\n#ifndef FXAA_REDUCE_MUL\n #define FXAA_REDUCE_MUL (1.0 / 8.0)\n#endif\n#ifndef FXAA_SPAN_MAX\n #define FXAA_SPAN_MAX 8.0\n#endif\n\n//optimized version for mobile, where dependent\n//texture reads can be a bottleneck\nvec4 fxaa(sampler2D tex, vec2 fragCoord, vec2 resolution,\n vec2 v_rgbNW, vec2 v_rgbNE,\n vec2 v_rgbSW, vec2 v_rgbSE,\n vec2 v_rgbM) {\n vec4 color;\n mediump vec2 inverseVP = vec2(1.0 / resolution.x, 1.0 / resolution.y);\n vec3 rgbNW = texture2D(tex, v_rgbNW).xyz;\n vec3 rgbNE = texture2D(tex, v_rgbNE).xyz;\n vec3 rgbSW = texture2D(tex, v_rgbSW).xyz;\n vec3 rgbSE = texture2D(tex, v_rgbSE).xyz;\n vec4 texColor = texture2D(tex, v_rgbM);\n vec3 rgbM = texColor.xyz;\n vec3 luma = vec3(0.299, 0.587, 0.114);\n float lumaNW = dot(rgbNW, luma);\n float lumaNE = dot(rgbNE, luma);\n float lumaSW = dot(rgbSW, luma);\n float lumaSE = dot(rgbSE, luma);\n float lumaM = dot(rgbM, luma);\n float lumaMin = min(lumaM, min(min(lumaNW, lumaNE), min(lumaSW, lumaSE)));\n float lumaMax = max(lumaM, max(max(lumaNW, lumaNE), max(lumaSW, lumaSE)));\n\n mediump vec2 dir;\n dir.x = -((lumaNW + lumaNE) - (lumaSW + lumaSE));\n dir.y = ((lumaNW + lumaSW) - (lumaNE + lumaSE));\n\n float dirReduce = max((lumaNW + lumaNE + lumaSW + lumaSE) *\n (0.25 * FXAA_REDUCE_MUL), FXAA_REDUCE_MIN);\n\n float rcpDirMin = 1.0 / (min(abs(dir.x), abs(dir.y)) + dirReduce);\n dir = min(vec2(FXAA_SPAN_MAX, FXAA_SPAN_MAX),\n max(vec2(-FXAA_SPAN_MAX, -FXAA_SPAN_MAX),\n dir * rcpDirMin)) * inverseVP;\n\n vec3 rgbA = 0.5 * (\n texture2D(tex, fragCoord * inverseVP + dir * (1.0 / 3.0 - 0.5)).xyz +\n texture2D(tex, fragCoord * inverseVP + dir * (2.0 / 3.0 - 0.5)).xyz);\n vec3 rgbB = rgbA * 0.5 + 0.25 * (\n texture2D(tex, fragCoord * inverseVP + dir * -0.5).xyz +\n texture2D(tex, fragCoord * inverseVP + dir * 0.5).xyz);\n\n float lumaB = dot(rgbB, luma);\n if ((lumaB < lumaMin) || (lumaB > lumaMax))\n color = vec4(rgbA, texColor.a);\n else\n color = vec4(rgbB, texColor.a);\n return color;\n}\n\n\nvarying vec2 vTextureCoord;\nvarying vec4 vColor;\nvarying vec2 vResolution;\n\n//texcoords computed in vertex step\n//to avoid dependent texture reads\nvarying vec2 v_rgbNW;\nvarying vec2 v_rgbNE;\nvarying vec2 v_rgbSW;\nvarying vec2 v_rgbSE;\nvarying vec2 v_rgbM;\n\nuniform sampler2D uSampler;\n\n\nvoid main(void){\n\n gl_FragColor = fxaa(uSampler, vTextureCoord * vResolution, vResolution, v_rgbNW, v_rgbNE, v_rgbSW, v_rgbSE, v_rgbM);\n\n}\n',{resolution:{type:"v2",value:{x:1,y:1}}})}var n=t("./AbstractFilter");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.applyFilter=function(t,e,r){var i=t.filterManager,n=this.getShader(t);i.applyFilter(n,e,r)}},{"./AbstractFilter":73}],75:[function(t,e,r){function i(t){var e=new o.Matrix;n.call(this,"attribute vec2 aVertexPosition;\nattribute vec2 aTextureCoord;\nattribute vec4 aColor;\n\nuniform mat3 projectionMatrix;\nuniform mat3 otherMatrix;\n\nvarying vec2 vMaskCoord;\nvarying vec2 vTextureCoord;\nvarying vec4 vColor;\n\nvoid main(void)\n{\n gl_Position = vec4((projectionMatrix * vec3(aVertexPosition, 1.0)).xy, 0.0, 1.0);\n vTextureCoord = aTextureCoord;\n vMaskCoord = ( otherMatrix * vec3( aTextureCoord, 1.0) ).xy;\n vColor = vec4(aColor.rgb * aColor.a, aColor.a);\n}\n","precision lowp float;\n\nvarying vec2 vMaskCoord;\nvarying vec2 vTextureCoord;\nvarying vec4 vColor;\n\nuniform sampler2D uSampler;\nuniform float alpha;\nuniform sampler2D mask;\n\nvoid main(void)\n{\n // check clip! this will stop the mask bleeding out from the edges\n vec2 text = abs( vMaskCoord - 0.5 );\n text = step(0.5, text);\n float clip = 1.0 - max(text.y, text.x);\n vec4 original = texture2D(uSampler, vTextureCoord);\n vec4 masky = texture2D(mask, vMaskCoord);\n original *= (masky.r * masky.a * alpha * clip);\n gl_FragColor = original;\n}\n",{mask:{type:"sampler2D",value:t._texture},alpha:{type:"f",value:1},otherMatrix:{type:"mat3",value:e.toArray(!0)}}),this.maskSprite=t,this.maskMatrix=e}var n=t("./AbstractFilter"),o=t("../../../math");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.applyFilter=function(t,e,r){var i=t.filterManager;this.uniforms.mask.value=this.maskSprite._texture,i.calculateMappedMatrix(e.frame,this.maskSprite,this.maskMatrix),this.uniforms.otherMatrix.value=this.maskMatrix.toArray(!0),this.uniforms.alpha.value=this.maskSprite.worldAlpha;var n=this.getShader(t);i.applyFilter(n,e,r)},Object.defineProperties(i.prototype,{map:{get:function(){return this.uniforms.mask.value},set:function(t){this.uniforms.mask.value=t}},offset:{get:function(){return this.uniforms.offset.value},set:function(t){this.uniforms.offset.value=t}}})},{"../../../math":55,"./AbstractFilter":73}],76:[function(t,e,r){function i(t){n.call(this,t),this.currentBlendMode=99999}var n=t("./WebGLManager");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.setBlendMode=function(t){if(this.currentBlendMode===t)return!1;this.currentBlendMode=t;var e=this.renderer.blendModes[this.currentBlendMode];return this.renderer.gl.blendFunc(e[0],e[1]),!0}},{"./WebGLManager":81}],77:[function(t,e,r){function i(t){n.call(this,t),this.filterStack=[],this.filterStack.push({renderTarget:t.currentRenderTarget,filter:[],bounds:null}),this.texturePool=[],this.textureSize=new h.Rectangle(0,0,t.width,t.height),this.currentFrame=null}var n=t("./WebGLManager"),o=t("../utils/RenderTarget"),s=t("../../../const"),a=t("../utils/Quad"),h=t("../../../math");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.onContextChange=function(){this.texturePool.length=0;var t=this.renderer.gl;this.quad=new a(t)},i.prototype.setFilterStack=function(t){this.filterStack=t},i.prototype.pushFilter=function(t,e){var r=t.filterArea?t.filterArea.clone():t.getBounds();r.x=0|r.x,r.y=0|r.y,r.width=0|r.width,r.height=0|r.height;var i=0|e[0].padding;if(r.x-=i,r.y-=i,r.width+=2*i,r.height+=2*i,this.renderer.currentRenderTarget.transform){var n=this.renderer.currentRenderTarget.transform;r.x+=n.tx,r.y+=n.ty,this.capFilterArea(r),r.x-=n.tx,r.y-=n.ty}else this.capFilterArea(r);if(r.width>0&&r.height>0){this.currentFrame=r;var o=this.getRenderTarget();this.renderer.setRenderTarget(o),o.clear(),this.filterStack.push({renderTarget:o,filter:e})}else this.filterStack.push({renderTarget:null,filter:e})},i.prototype.popFilter=function(){var t=this.filterStack.pop(),e=this.filterStack[this.filterStack.length-1],r=t.renderTarget;if(t.renderTarget){var i=e.renderTarget,n=this.renderer.gl;this.currentFrame=r.frame,this.quad.map(this.textureSize,r.frame),n.bindBuffer(n.ARRAY_BUFFER,this.quad.vertexBuffer),n.bindBuffer(n.ELEMENT_ARRAY_BUFFER,this.quad.indexBuffer);var o=t.filter;if(n.vertexAttribPointer(this.renderer.shaderManager.defaultShader.attributes.aVertexPosition,2,n.FLOAT,!1,0,0),n.vertexAttribPointer(this.renderer.shaderManager.defaultShader.attributes.aTextureCoord,2,n.FLOAT,!1,0,32),n.vertexAttribPointer(this.renderer.shaderManager.defaultShader.attributes.aColor,4,n.FLOAT,!1,0,64),this.renderer.blendModeManager.setBlendMode(s.BLEND_MODES.NORMAL),1===o.length)o[0].uniforms.dimensions&&(o[0].uniforms.dimensions.value[0]=this.renderer.width,o[0].uniforms.dimensions.value[1]=this.renderer.height,o[0].uniforms.dimensions.value[2]=this.quad.vertices[0],o[0].uniforms.dimensions.value[3]=this.quad.vertices[5]),o[0].applyFilter(this.renderer,r,i),this.returnRenderTarget(r);else{for(var a=r,h=this.getRenderTarget(!0),u=0;uthis.textureSize.width&&(t.width=this.textureSize.width-t.x),t.y+t.height>this.textureSize.height&&(t.height=this.textureSize.height-t.y)},i.prototype.resize=function(t,e){this.textureSize.width=t,this.textureSize.height=e;for(var r=0;re;++e)t._array[2*e]=o[e].x,t._array[2*e+1]=o[e].y;s.uniform2fv(i,t._array);break;case"v3v":for(t._array||(t._array=new Float32Array(3*o.length)),e=0,r=o.length;r>e;++e)t._array[3*e]=o[e].x,t._array[3*e+1]=o[e].y,t._array[3*e+2]=o[e].z;s.uniform3fv(i,t._array);break;case"v4v":for(t._array||(t._array=new Float32Array(4*o.length)),e=0,r=o.length;r>e;++e)t._array[4*e]=o[e].x,t._array[4*e+1]=o[e].y,t._array[4*e+2]=o[e].z,t._array[4*e+3]=o[e].w;s.uniform4fv(i,t._array);break;case"t":case"sampler2D":if(!t.value||!t.value.baseTexture.hasLoaded)break;s.activeTexture(s["TEXTURE"+this.textureCount]);var a=t.value.baseTexture._glTextures[s.id];a||(this.initSampler2D(t),a=t.value.baseTexture._glTextures[s.id]),s.bindTexture(s.TEXTURE_2D,a),s.uniform1i(t._location,this.textureCount),this.textureCount++;break;default:console.warn("Pixi.js Shader Warning: Unknown uniform type: "+t.type)}},i.prototype.syncUniforms=function(){this.textureCount=1;for(var t in this.uniforms)this.syncUniform(this.uniforms[t])},i.prototype.initSampler2D=function(t){var e=this.gl,r=t.value.baseTexture;if(r.hasLoaded)if(t.textureData){var i=t.textureData;r._glTextures[e.id]=e.createTexture(),e.bindTexture(e.TEXTURE_2D,r._glTextures[e.id]),e.pixelStorei(e.UNPACK_PREMULTIPLY_ALPHA_WEBGL,r.premultipliedAlpha),e.texImage2D(e.TEXTURE_2D,0,i.luminance?e.LUMINANCE:e.RGBA,e.RGBA,e.UNSIGNED_BYTE,r.source),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MAG_FILTER,i.magFilter?i.magFilter:e.LINEAR),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MIN_FILTER,i.wrapS?i.wrapS:e.CLAMP_TO_EDGE),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,i.wrapS?i.wrapS:e.CLAMP_TO_EDGE),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,i.wrapT?i.wrapT:e.CLAMP_TO_EDGE)}else this.shaderManager.renderer.updateTexture(r)},i.prototype.destroy=function(){this.gl.deleteProgram(this.program),this.gl=null,this.uniforms=null,this.attributes=null,this.vertexSrc=null,this.fragmentSrc=null},i.prototype._glCompile=function(t,e){var r=this.gl.createShader(t);return this.gl.shaderSource(r,e),this.gl.compileShader(r),this.gl.getShaderParameter(r,this.gl.COMPILE_STATUS)?r:(console.log(this.gl.getShaderInfoLog(r)),null)}},{"../../../utils":105}],85:[function(t,e,r){function i(t,e,r,o,s){var a={uSampler:{type:"sampler2D",value:0},projectionMatrix:{type:"mat3",value:new Float32Array([1,0,0,0,1,0,0,0,1])}};if(o)for(var h in o)a[h]=o[h];var u={aVertexPosition:0,aTextureCoord:0,aColor:0};if(s)for(var l in s)u[l]=s[l];e=e||i.defaultVertexSrc,r=r||i.defaultFragmentSrc,n.call(this,t,e,r,a,u)}var n=t("./Shader");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.defaultVertexSrc=["precision lowp float;","attribute vec2 aVertexPosition;","attribute vec2 aTextureCoord;","attribute vec4 aColor;","uniform mat3 projectionMatrix;","varying vec2 vTextureCoord;","varying vec4 vColor;","void main(void){"," gl_Position = vec4((projectionMatrix * vec3(aVertexPosition, 1.0)).xy, 0.0, 1.0);"," vTextureCoord = aTextureCoord;"," vColor = vec4(aColor.rgb * aColor.a, aColor.a);","}"].join("\n"),i.defaultFragmentSrc=["precision lowp float;","varying vec2 vTextureCoord;","varying vec4 vColor;","uniform sampler2D uSampler;","void main(void){"," gl_FragColor = texture2D(uSampler, vTextureCoord) * vColor ;","}"].join("\n")},{"./Shader":84}],86:[function(t,e,r){function i(t){vertexSrc=i.defaultVertexSrc,fragmentSrc=i.defaultFragmentSrc,n.call(this,t,vertexSrc,fragmentSrc)}var n=t("pixi-gl-core").GLShader;i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.defaultVertexSrc=["precision lowp float;","attribute vec2 aVertexPosition;","attribute vec2 aTextureCoord;","attribute vec4 aColor;","uniform mat3 projectionMatrix;","varying vec2 vTextureCoord;","varying vec4 vColor;","void main(void){"," gl_Position = vec4((projectionMatrix * vec3(aVertexPosition, 1.0)).xy, 0.0, 1.0);"," vTextureCoord = aTextureCoord;"," vColor = vec4(aColor.rgb * aColor.a, aColor.a);","}"].join("\n"),i.defaultFragmentSrc=["precision lowp float;","varying vec2 vTextureCoord;","varying vec4 vColor;","uniform sampler2D uSampler;","void main(void){"," gl_FragColor = texture2D(uSampler, vTextureCoord) * vColor ;","}"].join("\n")},{"pixi-gl-core":1}],87:[function(t,e,r){function i(t){n.call(this,t)}var n=t("../managers/WebGLManager");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.start=function(){},i.prototype.stop=function(){this.flush()},i.prototype.flush=function(){},i.prototype.render=function(t){}},{"../managers/WebGLManager":81}],88:[function(t,e,r){function i(t){this.gl=t,this.vertices=new Float32Array([0,0,200,0,200,200,0,200]),this.uvs=new Float32Array([0,0,1,0,1,1,0,1]),this.colors=new Float32Array([1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]),this.indices=new Uint16Array([0,1,2,0,3,2]),this.vertexBuffer=t.createBuffer(),this.indexBuffer=t.createBuffer(),t.bindBuffer(t.ARRAY_BUFFER,this.vertexBuffer),t.bufferData(t.ARRAY_BUFFER,128,t.DYNAMIC_DRAW),t.bindBuffer(t.ELEMENT_ARRAY_BUFFER,this.indexBuffer),t.bufferData(t.ELEMENT_ARRAY_BUFFER,this.indices,t.STATIC_DRAW),this.upload()}i.prototype.constructor=i,i.prototype.map=function(t,e){var r=0,i=0;this.uvs[0]=r,this.uvs[1]=i,this.uvs[2]=r+e.width/t.width,this.uvs[3]=i,this.uvs[4]=r+e.width/t.width,this.uvs[5]=i+e.height/t.height,this.uvs[6]=r,this.uvs[7]=i+e.height/t.height,r=e.x,i=e.y,this.vertices[0]=r,this.vertices[1]=i,this.vertices[2]=r+e.width,this.vertices[3]=i,this.vertices[4]=r+e.width,this.vertices[5]=i+e.height,this.vertices[6]=r,this.vertices[7]=i+e.height,this.upload()},i.prototype.upload=function(){var t=this.gl;t.bindBuffer(t.ARRAY_BUFFER,this.vertexBuffer),t.bufferSubData(t.ARRAY_BUFFER,0,this.vertices),t.bufferSubData(t.ARRAY_BUFFER,32,this.uvs),t.bufferSubData(t.ARRAY_BUFFER,64,this.colors)},i.prototype.destroy=function(){var t=this.gl;t.deleteBuffer(this.vertexBuffer),t.deleteBuffer(this.indexBuffer)},e.exports=i},{}],89:[function(t,e,r){var i=t("../../../math"),n=(t("../../../utils"),t("../../../const")),o=t("pixi-gl-core").GLTexture,s=t("pixi-gl-core").GLFramebuffer,a=t("./StencilMaskStack"),h=function(t,e,r,h,u,l){if(this.gl=t,this.frameBuffer=null,this.texture=null,this.clearColor=[0,0,0,0],this.size=new i.Rectangle(0,0,1,1),this.resolution=u||n.RESOLUTION,this.projectionMatrix=new i.Matrix,this.transform=null,this.frame=null,this.stencilBuffer=null,this.stencilMaskStack=new a,this.filterStack=[{renderTarget:this,filter:[],bounds:this.size}],this.scaleMode=h||n.SCALE_MODES.DEFAULT,this.root=l,this.frameBuffer=s.createRGBA(t,100,100),this.frameBuffer&&this.frameBuffer.unbind(),this.root)this.frameBuffer.framebuffer=null;else{var c=new o(t);c.enableLinearScaling(),c.enableWrapClamp(),this.frameBuffer.enableTexture(c),this.texture=c.texture}this.resize(e,r)};h.prototype.constructor=h,e.exports=h,h.prototype.clear=function(t){var e=t||this.clearColor;this.frameBuffer.clear(e[0],e[1],e[2],e[3])},h.prototype.attachStencilBuffer=function(){this.root||this.frameBuffer.enableStencil()},h.prototype.activate=function(){var t=this.gl;this.frameBuffer.bind();var e=this.frame||this.size;this.calculateProjection(e),this.transform&&this.projectionMatrix.append(this.transform),t.viewport(0,0,e.width*this.resolution,e.height*this.resolution)},h.prototype.calculateProjection=function(t){var e=this.projectionMatrix;e.identity(),this.root?(e.a=1/t.width*2,e.d=-1/t.height*2,e.tx=-1-t.x*e.a,e.ty=1-t.y*e.d):(e.a=1/t.width*2,e.d=1/t.height*2,e.tx=-1-t.x*e.a,e.ty=-1-t.y*e.d)},h.prototype.resize=function(t,e){if(t=0|t,e=0|e,this.size.width!==t||this.size.height!==e){this.size.width=t,this.size.height=e,this.frameBuffer.resize(t*this.resolution,e*this.resolution);var r=this.frame||this.size;this.calculateProjection(r)}},h.prototype.destroy=function(){this.gl;this.frameBuffer.destroy(),this.frameBuffer=null,this.texture=null}},{"../../../const":38,"../../../math":55,"../../../utils":105,"./StencilMaskStack":90,"pixi-gl-core":1}],90:[function(t,e,r){function i(){this.stencilStack=[],this.reverse=!0,this.count=0}i.prototype.constructor=i,e.exports=i},{}],91:[function(t,e,r){function i(t,e){return e=e||{},e[CONST.BLEND_MODES.NORMAL]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.ADD]=[t.SRC_ALPHA,t.DST_ALPHA],e[CONST.BLEND_MODES.MULTIPLY]=[t.DST_COLOR,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.SCREEN]=[t.SRC_ALPHA,t.ONE],e[CONST.BLEND_MODES.OVERLAY]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.DARKEN]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.LIGHTEN]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.COLOR_DODGE]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.COLOR_BURN]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.HARD_LIGHT]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.SOFT_LIGHT]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.DIFFERENCE]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.EXCLUSION]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.HUE]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.SATURATION]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.COLOR]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e[CONST.BLEND_MODES.LUMINOSITY]=[t.ONE,t.ONE_MINUS_SRC_ALPHA],e}CONST=t("../../../const"),e.exports=i},{"../../../const":38}],92:[function(t,e,r){function i(t,e){e=e||{},e[CONST.DRAW_MODES.POINTS]=t.POINTS,e[CONST.DRAW_MODES.LINES]=t.LINES,e[CONST.DRAW_MODES.LINE_LOOP]=t.LINE_LOOP,e[CONST.DRAW_MODES.LINE_STRIP]=t.LINE_STRIP,e[CONST.DRAW_MODES.TRIANGLES]=t.TRIANGLES,e[CONST.DRAW_MODES.TRIANGLE_STRIP]=t.TRIANGLE_STRIP,e[CONST.DRAW_MODES.TRIANGLE_FAN]=t.TRIANGLE_FAN}CONST=t("../../../const"),e.exports=i},{"../../../const":38}],93:[function(t,e,r){function i(t){s.call(this),this.anchor=new n.Point,this._texture=null,this._width=0,this._height=0,this.tint=16777215,this.blendMode=u.BLEND_MODES.NORMAL,this.shader=null,this.cachedTint=16777215,this.texture=t||o.EMPTY,this.textureDirty=!0,this.vertexDirty=!0,this.vertexData=new Float32Array(8)}var n=t("../math"),o=t("../textures/Texture"),s=t("../display/Container"),a=t("../renderers/canvas/utils/CanvasTinter"),h=t("../utils"),u=t("../const"),l=new n.Point;i.prototype=Object.create(s.prototype),i.prototype.constructor=i,e.exports=i,Object.defineProperties(i.prototype,{width:{get:function(){return Math.abs(this.scale.x)*this.texture._frame.width},set:function(t){var e=h.sign(this.scale.x)||1;this.scale.x=e*t/this.texture._frame.width,this._width=t}},height:{get:function(){return Math.abs(this.scale.y)*this.texture._frame.height},set:function(t){var e=h.sign(this.scale.y)||1;this.scale.y=e*t/this.texture._frame.height,this._height=t}},texture:{get:function(){return this._texture},set:function(t){this._texture!==t&&(this._texture=t,this.cachedTint=16777215,this.textureDirty=!0,t&&(t.baseTexture.hasLoaded?this._onTextureUpdate():t.once("update",this._onTextureUpdate,this)))}}}),i.prototype._onTextureUpdate=function(){this.textureDirty=!0,this._width&&(this.scale.x=h.sign(this.scale.x)*this._width/this.texture.frame.width),this._height&&(this.scale.y=h.sign(this.scale.y)*this._height/this.texture.frame.height)},i.prototype.caclulateVertices=function(){var t,e,r,i,n=this._texture,o=this.worldTransform,s=o.a,a=o.b,h=o.c,u=o.d,l=o.tx,c=o.ty,p=this.vertexData,d=n.trim;d?(e=d.x-this.anchor.x*d.width,t=e+n.crop.width,i=d.y-this.anchor.y*d.height,r=i+n.crop.height):(t=n._frame.width*(1-this.anchor.x),e=n._frame.width*-this.anchor.x,r=n._frame.height*(1-this.anchor.y),i=n._frame.height*-this.anchor.y),p[0]=s*e+h*i+l,p[1]=u*i+a*e+c,p[2]=s*t+h*i+l,p[3]=u*i+a*t+c,p[4]=s*t+h*r+l,p[5]=u*r+a*t+c,p[6]=s*e+h*r+l,p[7]=u*r+a*e+c},i.prototype._renderWebGL=function(t){this.textureDirty&&(this.textureDirty=!1,this._onTextureUpdate(),this.vertexDirty=!0),this.vertexDirty&&(this.vertexDirty=!1,this.caclulateVertices()),t.setObjectRenderer(t.plugins.sprite),t.plugins.sprite.render(this)},i.prototype.getBounds=function(t){if(!this._currentBounds){this.vertexDirty&&(this.vertexDirty=!1,this.caclulateVertices());var e,r,i,n,o=this.vertexData,s=o[0],a=o[1],h=o[2],u=o[3],l=o[4],c=o[5],p=o[6],d=o[7];if(e=s,e=e>h?h:e,e=e>l?l:e,e=e>p?p:e,i=a,i=i>u?u:i,i=i>c?c:i,i=i>d?d:i,r=s,r=h>r?h:r,r=l>r?l:r,r=p>r?p:r,n=a,n=u>n?u:n,n=c>n?c:n,n=d>n?d:n,this.children.length){var f=this.containerGetBounds();w0=f.x,w1=f.x+f.width,h0=f.y,h1=f.y+f.height,e=ew1?r:w1,n=n>h1?n:h1}var v=this._bounds;v.x=e,v.width=r-e,v.y=i,v.height=n-i,this._currentBounds=v}return this._currentBounds},i.prototype.getLocalBounds=function(){return this._bounds.x=-this._texture._frame.width*this.anchor.x,this._bounds.y=-this._texture._frame.height*this.anchor.y,this._bounds.width=this._texture._frame.width,this._bounds.height=this._texture._frame.height,this._bounds},i.prototype.containsPoint=function(t){this.worldTransform.applyInverse(t,l);var e,r=this._texture._frame.width,i=this._texture._frame.height,n=-r*this.anchor.x;return l.x>n&&l.xe&&l.y=this.size&&this.flush(),t.texture._uvs){var e,r=t.texture.baseTexture,i=this.currentGroup;if(this.currentTexture!==r){if(this.currentTexture=r,!r._enabled){if(r._enabled=!0,r._id=this.textureCount,this.textureCount===this.MAX_TEXTUES){for(e=0;e>16)+(65280&t.tint)+((255&t.tint)<<16)+(255*t.worldAlpha<<24),u=t.texture._uvs.uvs_uint32;s[n++]=a[0],s[n++]=a[1],this.uvs[n++]=u[0],o[n++]=h,s[n++]=r._id,s[n++]=a[2],s[n++]=a[3],this.uvs[n++]=u[1],o[n++]=h,s[n++]=r._id,s[n++]=a[4],s[n++]=a[5],this.uvs[n++]=u[2],o[n++]=h,s[n++]=r._id,s[n++]=a[6],s[n++]=a[7],this.uvs[n++]=u[3],o[n++]=h,s[n++]=r._id}},i.prototype.flush=function(){if(0!==this.currentIndex){var t=this.renderer.gl;this.currentGroup.size=this.currentIndex-this.currentGroup.start;for(var e=0;e.5*this.size)this.vertexBuffer.upload(this.vertices,0,!0);else{var r=this.positions.subarray(0,this.currentIndex*this.vertByteSize);this.vertexBuffer.upload(r,0,!0)}for(this.renderer.bindShader(this._shader),this.renderer.blendModeManager.setBlendMode(0),e=0;eu;u++)h[u]=u;return a.bind(),a.uniforms.uSamplers=h,a}function n(t){var e="vec4 getSampleFromArray(sampler2D textures[%%], int ndx, vec2 uv) {\n\nvec4 color;";e+="\n",e+="\n";for(var r=0;t>r;r++)r>0&&(e+="\nelse "),t-1>r&&(e+="if(ndx == "+r+")"),e+="\n{",e+="\n color = texture2D(textures["+r+"], uv);",e+="\n}";return e+="\n",e+="\n",e+="return color;",e+="\n}"}var o=t("pixi-gl-core").GLShader,s=["varying vec2 vTextureCoord;","varying vec4 vColor;","varying float vTextureId;","uniform sampler2D uSamplers[%%];","void main(void){","gl_FragColor = getSampleFromArray(uSamplers, int(vTextureId), vTextureCoord) * vColor;","}"].join("\n");e.exports=i},{"pixi-gl-core":1}],96:[function(t,e,r){function i(t,e,r){this.canvas=document.createElement("canvas"),this.context=this.canvas.getContext("2d"),this.resolution=r||h.RESOLUTION,this._text=null,this._style=null;var i=o.fromCanvas(this.canvas);i.trim=new s.Rectangle,n.call(this,i),this.text=t,this.style=e}var n=t("../sprites/Sprite"),o=t("../textures/Texture"),s=t("../math"),a=t("../utils"),h=t("../const");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.fontPropertiesCache={},i.fontPropertiesCanvas=document.createElement("canvas"),i.fontPropertiesContext=i.fontPropertiesCanvas.getContext("2d"),Object.defineProperties(i.prototype,{width:{get:function(){return this.dirty&&this.updateText(),this.scale.x*this._texture._frame.width},set:function(t){this.scale.x=t/this._texture._frame.width,this._width=t}},height:{get:function(){return this.dirty&&this.updateText(),this.scale.y*this._texture._frame.height},set:function(t){this.scale.y=t/this._texture._frame.height,this._height=t}},style:{get:function(){return this._style},set:function(t){t=t||{},"number"==typeof t.fill&&(t.fill=a.hex2string(t.fill)),"number"==typeof t.stroke&&(t.stroke=a.hex2string(t.stroke)),"number"==typeof t.dropShadowColor&&(t.dropShadowColor=a.hex2string(t.dropShadowColor)),t.font=t.font||"bold 20pt Arial",t.fill=t.fill||"black",t.align=t.align||"left",t.stroke=t.stroke||"black",t.strokeThickness=t.strokeThickness||0,t.wordWrap=t.wordWrap||!1,t.wordWrapWidth=t.wordWrapWidth||100,t.dropShadow=t.dropShadow||!1,t.dropShadowColor=t.dropShadowColor||"#000000",t.dropShadowAngle=void 0!==t.dropShadowAngle?t.dropShadowAngle:Math.PI/6,t.dropShadowDistance=void 0!==t.dropShadowDistance?t.dropShadowDistance:5,t.dropShadowBlur=void 0!==t.dropShadowBlur?t.dropShadowBlur:0,t.padding=t.padding||0,t.textBaseline=t.textBaseline||"alphabetic",t.lineJoin=t.lineJoin||"miter",t.miterLimit=t.miterLimit||10,this._style=t,this.dirty=!0}},text:{get:function(){return this._text},set:function(t){t=t.toString()||" ",this._text!==t&&(this._text=t,this.dirty=!0)}}}),i.prototype.updateText=function(){var t=this._style;this.context.font=t.font;for(var e=t.wordWrap?this.wordWrap(this._text):this._text,r=e.split(/(?:\r\n|\r|\n)/),i=new Array(r.length),n=0,o=this.determineFontProperties(t.font),s=0;s0?(this.context.shadowColor=t.dropShadowColor,this.context.shadowBlur=t.dropShadowBlur):this.context.fillStyle=t.dropShadowColor;var d=Math.cos(t.dropShadowAngle)*t.dropShadowDistance,f=Math.sin(t.dropShadowAngle)*t.dropShadowDistance;for(s=0;sh;h++){for(u=0;p>u;u+=4)if(255!==l[d+u]){f=!0;break}if(f)break;d+=p}for(e.ascent=s-h,d=c-p,f=!1,h=a;h>s;h--){for(u=0;p>u;u+=4)if(255!==l[d+u]){f=!0;break}if(f)break;d-=p}e.descent=h-s,e.fontSize=e.ascent+e.descent,i.fontPropertiesCache[t]=e}return e},i.prototype.wordWrap=function(t){for(var e="",r=t.split("\n"),i=this._style.wordWrapWidth,n=0;no?(a>0&&(e+="\n"),e+=s[a],o=i-h):(o-=u,e+=" "+s[a])}n0&&e>0,this.width=this._frame.width=this.crop.width=t,this.height=this._frame.height=this.crop.height=e,r&&(this.baseTexture.width=this.width,this.baseTexture.height=this.height),this.valid&&(this.textureBuffer.resize(this.width,this.height),this.filterManager&&this.filterManager.resize(this.width,this.height)))},i.prototype.clear=function(){this.valid&&(this.renderer.type===l.RENDERER_TYPE.WEBGL&&this.renderer.gl.bindFramebuffer(this.renderer.gl.FRAMEBUFFER,this.textureBuffer.frameBuffer),this.textureBuffer.clear())},i.prototype.renderWebGL=function(t,e,r,i){if(this.valid){if(i=void 0!==i?i:!0,this.textureBuffer.transform=e,this.textureBuffer.activate(),t.worldAlpha=1,i){t.worldTransform.identity(),t.currentBounds=null;var n,o,s=t.children;for(n=0,o=s.length;o>n;++n)s[n].updateTransform()}var a=this.renderer.filterManager;this.renderer.filterManager=this.filterManager,this.renderer.renderDisplayObject(t,this.textureBuffer,r),this.renderer.filterManager=a}},i.prototype.renderCanvas=function(t,e,r,i){if(this.valid){i=!!i;var n=c;n.identity(),e&&n.append(e);var o=t.worldTransform;t.worldTransform=n,t.worldAlpha=1;var s,a,h=t.children;for(s=0,a=h.length;a>s;++s)h[s].updateTransform();r&&this.textureBuffer.clear();var u=this.textureBuffer.context,l=this.renderer.resolution;this.renderer.resolution=this.resolution,this.renderer.renderDisplayObject(t,u),this.renderer.resolution=l,t.worldTransform===n&&(t.worldTransform=o)}},i.prototype.destroy=function(){o.prototype.destroy.call(this,!0),this.textureBuffer.destroy(),this.filterManager&&this.filterManager.destroy(),this.renderer=null},i.prototype.getImage=function(){var t=new Image;return t.src=this.getBase64(),t},i.prototype.getBase64=function(){return this.getCanvas().toDataURL()},i.prototype.getCanvas=function(){if(this.renderer.type===l.RENDERER_TYPE.WEBGL){var t=this.renderer.gl,e=this.textureBuffer.size.width,r=this.textureBuffer.size.height,i=new Uint8Array(4*e*r);t.bindFramebuffer(t.FRAMEBUFFER,this.textureBuffer.frameBuffer),t.readPixels(0,0,e,r,t.RGBA,t.UNSIGNED_BYTE,i),t.bindFramebuffer(t.FRAMEBUFFER,null);var n=new h(e,r),o=n.context.getImageData(0,0,e,r);return o.data.set(i),n.context.putImageData(o,0,0),n.canvas}return this.textureBuffer.canvas},i.prototype.getPixels=function(){var t,e;if(this.renderer.type===l.RENDERER_TYPE.WEBGL){var r=this.renderer.gl;t=this.textureBuffer.size.width,e=this.textureBuffer.size.height;var i=new Uint8Array(4*t*e);return r.bindFramebuffer(r.FRAMEBUFFER,this.textureBuffer.frameBuffer),r.readPixels(0,0,t,e,r.RGBA,r.UNSIGNED_BYTE,i),r.bindFramebuffer(r.FRAMEBUFFER,null),i}return t=this.textureBuffer.canvas.width,e=this.textureBuffer.canvas.height,this.textureBuffer.canvas.getContext("2d").getImageData(0,0,t,e).data},i.prototype.getPixel=function(t,e){if(this.renderer.type===l.RENDERER_TYPE.WEBGL){var r=this.renderer.gl,i=new Uint8Array(4);return r.bindFramebuffer(r.FRAMEBUFFER,this.textureBuffer.frameBuffer),r.readPixels(t,e,1,1,r.RGBA,r.UNSIGNED_BYTE,i),r.bindFramebuffer(r.FRAMEBUFFER,null),i}return this.textureBuffer.canvas.getContext("2d").getImageData(t,e,1,1).data}},{"../const":38,"../math":55,"../renderers/canvas/utils/CanvasBuffer":67,"../renderers/webgl/managers/FilterManager":77,"../renderers/webgl/utils/RenderTarget":89,"./BaseTexture":97,"./Texture":99}],99:[function(t,e,r){function i(t,e,r,n,o){a.call(this),this.noFrame=!1,e||(this.noFrame=!0,e=new h.Rectangle(0,0,1,1)),t instanceof i&&(t=t.baseTexture),this.baseTexture=t,this._frame=e,this.trim=n,this.valid=!1,this.requiresUpdate=!1,this._uvs=null,this.width=0,this.height=0,this.crop=r||e,this.rotate=!!o,t.hasLoaded?(this.noFrame&&(e=new h.Rectangle(0,0,t.width,t.height),t.on("update",this.onBaseTextureUpdated,this)),this.frame=e):t.once("loaded",this.onBaseTextureLoaded,this)}var n=t("./BaseTexture"),o=t("./VideoBaseTexture"),s=t("./TextureUvs"),a=t("eventemitter3"),h=t("../math"),u=t("../utils");i.prototype=Object.create(a.prototype),i.prototype.constructor=i,e.exports=i,Object.defineProperties(i.prototype,{frame:{get:function(){return this._frame},set:function(t){if(this._frame=t,this.noFrame=!1,this.width=t.width,this.height=t.height,!this.trim&&!this.rotate&&(t.x+t.width>this.baseTexture.width||t.y+t.height>this.baseTexture.height))throw new Error("Texture Error: frame does not fit inside the base Texture dimensions "+this);this.valid=t&&t.width&&t.height&&this.baseTexture.hasLoaded,this.trim?(this.width=this.trim.width,this.height=this.trim.height,this._frame.width=this.trim.width,this._frame.height=this.trim.height):this.crop=t,this.valid&&this._updateUvs()}}}),i.prototype.update=function(){this.baseTexture.update()},i.prototype.onBaseTextureLoaded=function(t){this.noFrame?this.frame=new h.Rectangle(0,0,t.width,t.height):this.frame=this._frame,this.emit("update",this)},i.prototype.onBaseTextureUpdated=function(t){this._frame.width=t.width,this._frame.height=t.height,this.emit("update",this)},i.prototype.destroy=function(t){this.baseTexture&&(t&&this.baseTexture.destroy(),this.baseTexture.off("update",this.onBaseTextureUpdated,this),this.baseTexture.off("loaded",this.onBaseTextureLoaded,this),this.baseTexture=null),this._frame=null,this._uvs=null,this.trim=null,this.crop=null,this.valid=!1,this.off("dispose",this.dispose,this),this.off("update",this.update,this)},i.prototype.clone=function(){return new i(this.baseTexture,this.frame,this.crop,this.trim,this.rotate)},i.prototype._updateUvs=function(){this._uvs||(this._uvs=new s),this._uvs.set(this.crop,this.baseTexture,this.rotate)},i.fromImage=function(t,e,r){var o=u.TextureCache[t];return o||(o=new i(n.fromImage(t,e,r)),u.TextureCache[t]=o),o},i.fromFrame=function(t){var e=u.TextureCache[t];if(!e)throw new Error('The frameId "'+t+'" does not exist in the texture cache');return e},i.fromCanvas=function(t,e){return new i(n.fromCanvas(t,e))},i.fromVideo=function(t,e){return"string"==typeof t?i.fromVideoUrl(t,e):new i(o.fromVideo(t,e))},i.fromVideoUrl=function(t,e){return new i(o.fromUrl(t,e))},i.addTextureToCache=function(t,e){u.TextureCache[e]=t},i.removeTextureFromCache=function(t){var e=u.TextureCache[t];return delete u.TextureCache[t],delete u.BaseTextureCache[t],e},i.EMPTY=new i(new n)},{"../math":55,"../utils":105,"./BaseTexture":97,"./TextureUvs":100,"./VideoBaseTexture":101,eventemitter3:25}],100:[function(t,e,r){function i(){this.x0=0,this.y0=0,this.x1=1,this.y1=0,this.x2=1,this.y2=1,this.x3=0,this.y3=1,this.xy0_uint32=0,this.xy1_uint32=0,this.xy2_uint32=0,this.xy3_uint32=0,this.uvs_uint32=new Uint32Array(4)}e.exports=i,i.prototype.set=function(t,e,r){var i=e.width,n=e.height;r?(this.x0=(t.x+t.height)/i,this.y0=t.y/n,this.x1=(t.x+t.height)/i,this.y1=(t.y+t.width)/n,this.x2=t.x/i,this.y2=(t.y+t.width)/n,this.x3=t.x/i,this.y3=t.y/n):(this.x0=t.x/i,this.y0=t.y/n,this.x1=(t.x+t.width)/i,this.y1=t.y/n,this.x2=(t.x+t.width)/i,this.y2=(t.y+t.height)/n,this.x3=t.x/i,this.y3=(t.y+t.height)/n),this.uvs_uint32[0]=(65535*this.y0&65535)<<16|65535*this.x0&65535,this.uvs_uint32[1]=(65535*this.y1&65535)<<16|65535*this.x1&65535,this.uvs_uint32[2]=(65535*this.y2&65535)<<16|65535*this.x2&65535,this.uvs_uint32[3]=(65535*this.y3&65535)<<16|65535*this.x3&65535}},{}],101:[function(t,e,r){function i(t,e){if(!t)throw new Error("No video source element specified.");(t.readyState===t.HAVE_ENOUGH_DATA||t.readyState===t.HAVE_FUTURE_DATA)&&t.width&&t.height&&(t.complete=!0),o.call(this,t,e),this.autoUpdate=!1,this._onUpdate=this._onUpdate.bind(this),this._onCanPlay=this._onCanPlay.bind(this),t.complete||(t.addEventListener("canplay",this._onCanPlay),t.addEventListener("canplaythrough",this._onCanPlay),t.addEventListener("play",this._onPlayStart.bind(this)),t.addEventListener("pause",this._onPlayStop.bind(this))),this.__loaded=!1}function n(t,e){e||(e="video/"+t.substr(t.lastIndexOf(".")+1));var r=document.createElement("source");return r.src=t,r.type=e,r}var o=t("./BaseTexture"),s=t("../utils");i.prototype=Object.create(o.prototype),i.prototype.constructor=i,e.exports=i,i.prototype._onUpdate=function(){this.autoUpdate&&(window.requestAnimationFrame(this._onUpdate),this.update())},i.prototype._onPlayStart=function(){this.autoUpdate||(window.requestAnimationFrame(this._onUpdate),this.autoUpdate=!0)},i.prototype._onPlayStop=function(){this.autoUpdate=!1},i.prototype._onCanPlay=function(){this.hasLoaded=!0,this.source&&(this.source.removeEventListener("canplay",this._onCanPlay),this.source.removeEventListener("canplaythrough",this._onCanPlay),this.width=this.source.videoWidth,this.height=this.source.videoHeight,this.source.play(),this.__loaded||(this.__loaded=!0,this.emit("loaded",this)))},i.prototype.destroy=function(){this.source&&this.source._pixiId&&(delete s.BaseTextureCache[this.source._pixiId],delete this.source._pixiId),o.prototype.destroy.call(this)},i.fromVideo=function(t,e){t._pixiId||(t._pixiId="video_"+s.uid());var r=s.BaseTextureCache[t._pixiId];return r||(r=new i(t,e),s.BaseTextureCache[t._pixiId]=r),r},i.fromUrl=function(t,e){var r=document.createElement("video");if(Array.isArray(t))for(var o=0;othis._maxElapsedMS&&(e=this._maxElapsedMS),this.deltaTime=e*n.TARGET_FPMS*this.speed,this._emitter.emit(s,this.deltaTime),this.lastTime=t},e.exports=i},{"../const":38,eventemitter3:25}],103:[function(t,e,r){var i=t("./Ticker"),n=new i;n.autoStart=!0,e.exports={shared:n,Ticker:i}},{"./Ticker":102}],104:[function(t,e,r){var i=function(t){for(var e=6*t,r=new Uint16Array(e),i=0,n=0;e>i;i+=6,n+=4)r[i+0]=n+0,r[i+1]=n+1,r[i+2]=n+2,r[i+3]=n+0,r[i+4]=n+2,r[i+5]=n+3;return r};e.exports=i},{}],105:[function(t,e,r){var i=t("../const"),n=e.exports={_uid:0,_saidHello:!1,EventEmitter:t("eventemitter3"),pluginTarget:t("./pluginTarget"),async:t("async"),uid:function(){return++n._uid},hex2rgb:function(t,e){return e=e||[],e[0]=(t>>16&255)/255,e[1]=(t>>8&255)/255,e[2]=(255&t)/255,e},hex2string:function(t){return t=t.toString(16),t="000000".substr(0,6-t.length)+t,"#"+t},rgb2hex:function(t){return(255*t[0]<<16)+(255*t[1]<<8)+255*t[2]},canUseNewCanvasBlendModes:function(){if("undefined"==typeof document)return!1;var t="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAQAAAABAQMAAADD8p2OAAAAA1BMVEX/",e="AAAACklEQVQI12NgAAAAAgAB4iG8MwAAAABJRU5ErkJggg==",r=new Image;r.src=t+"AP804Oa6"+e;var i=new Image;i.src=t+"/wCKxvRF"+e;var n=document.createElement("canvas");n.width=6,n.height=1;var o=n.getContext("2d");o.globalCompositeOperation="multiply",o.drawImage(r,0,0),o.drawImage(i,2,0);var s=o.getImageData(2,0,1,1).data;return 255===s[0]&&0===s[1]&&0===s[2]},getNextPowerOfTwo:function(t){if(t>0&&0===(t&t-1))return t;for(var e=1;t>e;)e<<=1;return e},isPowerOfTwo:function(t,e){return t>0&&0===(t&t-1)&&e>0&&0===(e&e-1)},getResolutionOfUrl:function(t){var e=i.RETINA_PREFIX.exec(t);return e?parseFloat(e[1]):1},sayHello:function(t){if(!n._saidHello){if(navigator.userAgent.toLowerCase().indexOf("chrome")>-1){var e=["\n %c %c %c Pixi.js "+i.VERSION+" - ✰ "+t+" ✰ %c %c http://www.pixijs.com/ %c %c ♥%c♥%c♥ \n\n","background: #ff66a5; padding:5px 0;","background: #ff66a5; padding:5px 0;","color: #ff66a5; background: #030307; padding:5px 0;","background: #ff66a5; padding:5px 0;","background: #ffc3dc; padding:5px 0;","background: #ff66a5; padding:5px 0;","color: #ff2424; background: #fff; padding:5px 0;","color: #ff2424; background: #fff; padding:5px 0;","color: #ff2424; background: #fff; padding:5px 0;"];window.console.log.apply(console,e)}else window.console&&window.console.log("Pixi.js "+i.VERSION+" - "+t+" - http://www.pixijs.com/");n._saidHello=!0}},isWebGLSupported:function(){var t={stencil:!0};try{if(!window.WebGLRenderingContext)return!1;var e=document.createElement("canvas"),r=e.getContext("webgl",t)||e.getContext("experimental-webgl",t);return!(!r||!r.getContextAttributes().stencil)}catch(i){return!1}},sign:function(t){return t?0>t?-1:1:0},removeItems:function(t,e,r){var i=t.length;if(!(e>=i||0===r)){r=e+r>i?i-e:r;for(var n=e,o=i-r;o>n;++n)t[n]=t[n+r];t.length=o}},TextureCache:{},BaseTextureCache:{}}},{"../const":38,"./pluginTarget":106,async:16,eventemitter3:25}],106:[function(t,e,r){function i(t){t.__plugins={},t.registerPlugin=function(e,r){t.__plugins[e]=r},t.prototype.initPlugins=function(){this.plugins=this.plugins||{};for(var e in t.__plugins)this.plugins[e]=new t.__plugins[e](this)},t.prototype.destroyPlugins=function(){for(var t in this.plugins)this.plugins[t].destroy(),this.plugins[t]=null;this.plugins=null}}e.exports={mixin:function(t){i(t)}}},{}],107:[function(t,e,r){var i=t("./core"),n=t("./mesh"),o=t("./extras"),s=t("./filters");i.SpriteBatch=function(){throw new ReferenceError("SpriteBatch does not exist any more, please use the new ParticleContainer instead.")},i.AssetLoader=function(){throw new ReferenceError("The loader system was overhauled in pixi v3, please see the new PIXI.loaders.Loader class.")},Object.defineProperties(i,{Stage:{get:function(){return console.warn("You do not need to use a PIXI Stage any more, you can simply render any container."),i.Container}},DisplayObjectContainer:{get:function(){return console.warn("DisplayObjectContainer has been shortened to Container, please use Container from now on."),i.Container}},Strip:{get:function(){return console.warn("The Strip class has been renamed to Mesh and moved to mesh.Mesh, please use mesh.Mesh from now on."),n.Mesh}},Rope:{get:function(){return console.warn("The Rope class has been moved to mesh.Rope, please use mesh.Rope from now on."),n.Rope}},MovieClip:{get:function(){return console.warn("The MovieClip class has been moved to extras.MovieClip, please use extras.MovieClip from now on."),o.MovieClip}},TilingSprite:{get:function(){return console.warn("The TilingSprite class has been moved to extras.TilingSprite, please use extras.TilingSprite from now on."),o.TilingSprite}},BitmapText:{get:function(){return console.warn("The BitmapText class has been moved to extras.BitmapText, please use extras.BitmapText from now on."),o.BitmapText}},blendModes:{get:function(){return console.warn("The blendModes has been moved to BLEND_MODES, please use BLEND_MODES from now on."),i.BLEND_MODES}},scaleModes:{get:function(){return console.warn("The scaleModes has been moved to SCALE_MODES, please use SCALE_MODES from now on."),i.SCALE_MODES}},BaseTextureCache:{get:function(){return console.warn("The BaseTextureCache class has been moved to utils.BaseTextureCache, please use utils.BaseTextureCache from now on."),i.utils.BaseTextureCache}},TextureCache:{get:function(){return console.warn("The TextureCache class has been moved to utils.TextureCache, please use utils.TextureCache from now on."),i.utils.TextureCache}},math:{get:function(){return console.warn("The math namespace is deprecated, please access members already accessible on PIXI."),i}}}),i.Sprite.prototype.setTexture=function(t){this.texture=t,console.warn("setTexture is now deprecated, please use the texture property, e.g : sprite.texture = texture;")},o.BitmapText.prototype.setText=function(t){this.text=t,console.warn("setText is now deprecated, please use the text property, e.g : myBitmapText.text = 'my text';")},i.Text.prototype.setText=function(t){this.text=t,console.warn("setText is now deprecated, please use the text property, e.g : myText.text = 'my text';")},i.Text.prototype.setStyle=function(t){this.style=t,console.warn("setStyle is now deprecated, please use the style property, e.g : myText.style = style;")},i.Texture.prototype.setFrame=function(t){this.frame=t,console.warn("setFrame is now deprecated, please use the frame property, e.g : myTexture.frame = frame;")},Object.defineProperties(s,{AbstractFilter:{get:function(){return console.warn("filters.AbstractFilter is an undocumented alias, please use AbstractFilter from now on."),i.AbstractFilter}},FXAAFilter:{get:function(){return console.warn("filters.FXAAFilter is an undocumented alias, please use FXAAFilter from now on."),i.FXAAFilter}},SpriteMaskFilter:{get:function(){return console.warn("filters.SpriteMaskFilter is an undocumented alias, please use SpriteMaskFilter from now on."),i.SpriteMaskFilter}}}),i.utils.uuid=function(){return console.warn("utils.uuid() is deprecated, please use utils.uid() from now on."),i.utils.uid()}},{"./core":52,"./extras":114,"./filters":131,"./mesh":156}],108:[function(t,e,r){function i(t,e){n.Container.call(this),e=e||{},this.textWidth=0,this.textHeight=0,this._glyphs=[],this._font={tint:void 0!==e.tint?e.tint:16777215,align:e.align||"left",name:null,size:0},this.font=e.font,this._text=t,this.maxWidth=0,this.maxLineHeight=0,this.dirty=!1,this.updateText()}var n=t("../core");i.prototype=Object.create(n.Container.prototype),i.prototype.constructor=i,e.exports=i,Object.defineProperties(i.prototype,{tint:{get:function(){return this._font.tint},set:function(t){this._font.tint="number"==typeof t&&t>=0?t:16777215,this.dirty=!0}},align:{get:function(){return this._font.align},set:function(t){this._font.align=t||"left",this.dirty=!0}},font:{get:function(){return this._font},set:function(t){t&&("string"==typeof t?(t=t.split(" "),this._font.name=1===t.length?t[0]:t.slice(1).join(" "),this._font.size=t.length>=2?parseInt(t[0],10):i.fonts[this._font.name].size):(this._font.name=t.name,this._font.size="number"==typeof t.size?t.size:parseInt(t.size,10)),this.dirty=!0)}},text:{get:function(){return this._text},set:function(t){t=t.toString()||" ",this._text!==t&&(this._text=t,this.dirty=!0)}}}),i.prototype.updateText=function(){for(var t=i.fonts[this._font.name],e=new n.Point,r=null,o=[],s=0,a=0,h=[],u=0,l=this._font.size/t.size,c=-1,p=0,d=0;d0&&e.x*l>this.maxWidth)n.utils.removeItems(o,c,d-c),d=c,c=-1,h.push(s),a=Math.max(a,s),u++,e.x=0,e.y+=t.lineHeight,r=null;else{var v=t.chars[f];v&&(r&&v.kerning[r]&&(e.x+=v.kerning[r]),o.push({texture:v.texture,line:u,charCode:f,position:new n.Point(e.x+v.xOffset,e.y+v.yOffset)}),s=e.x+(v.texture.width+v.xOffset),e.x+=v.xAdvance,p=Math.max(p,v.yOffset+v.texture.height),r=f)}}h.push(s),a=Math.max(a,s);var g=[];for(d=0;u>=d;d++){var m=0;"right"===this._font.align?m=a-h[d]:"center"===this._font.align&&(m=(a-h[d])/2),g.push(m)}var y=o.length,x=this.tint;for(d=0;y>d;d++){var b=this._glyphs[d];b?b.texture=o[d].texture:(b=new n.Sprite(o[d].texture),this._glyphs.push(b)),b.position.x=(o[d].position.x+g[o[d].line])*l,b.position.y=o[d].position.y*l, +b.scale.x=b.scale.y=l,b.tint=x,b.parent||this.addChild(b)}for(d=y;dt&&(t+=this._textures.length),t}}}),i.prototype.stop=function(){this.playing&&(this.playing=!1,n.ticker.shared.remove(this.update,this))},i.prototype.play=function(){this.playing||(this.playing=!0,n.ticker.shared.add(this.update,this))},i.prototype.gotoAndStop=function(t){this.stop(),this._currentTime=t,this._texture=this._textures[this.currentFrame]},i.prototype.gotoAndPlay=function(t){this._currentTime=t,this.play()},i.prototype.update=function(t){var e=this.animationSpeed*t;if(null!==this._durations){var r=this._currentTime%1*this._durations[this.currentFrame];for(r+=e/60*1e3;0>r;)this._currentTime--,r+=this._durations[this.currentFrame];var i=Math.sign(this.animationSpeed*t);for(this._currentTime=Math.floor(this._currentTime);r>=this._durations[this.currentFrame];)r-=this._durations[this.currentFrame]*i,this._currentTime+=i;this._currentTime+=r/this._durations[this.currentFrame]}else this._currentTime+=e;this._currentTime<0&&!this.loop?(this.gotoAndStop(0),this.onComplete&&this.onComplete()):this._currentTime>=this._textures.length&&!this.loop?(this.gotoAndStop(this._textures.length-1),this.onComplete&&this.onComplete()):this._texture=this._textures[this.currentFrame]},i.prototype.destroy=function(){this.stop(),n.Sprite.prototype.destroy.call(this)},i.fromFrames=function(t){for(var e=[],r=0;rx?x:t,t=t>_?_:t,t=t>E?E:t,r=y,r=r>b?b:r,r=r>T?T:r,r=r>S?S:r,e=m,e=x>e?x:e,e=_>e?_:e,e=E>e?E:e,i=y,i=b>i?b:i,i=T>i?T:i,i=S>i?S:i;var w=this._bounds;return w.x=t,w.width=e-t,w.y=r,w.height=i-r,this._currentBounds=w,w},i.prototype.containsPoint=function(t){this.worldTransform.applyInverse(t,o);var e,r=this._width,i=this._height,n=-r*this.anchor.x;return o.x>n&&o.xe&&o.y 0.2) n = 65600.0; // :\n if (gray > 0.3) n = 332772.0; // *\n if (gray > 0.4) n = 15255086.0; // o\n if (gray > 0.5) n = 23385164.0; // &\n if (gray > 0.6) n = 15252014.0; // 8\n if (gray > 0.7) n = 13199452.0; // @\n if (gray > 0.8) n = 11512810.0; // #\n\n vec2 p = mod( uv / ( pixelSize * 0.5 ), 2.0) - vec2(1.0);\n col = col * character(n, p);\n\n gl_FragColor = vec4(col, 1.0);\n}\n",{dimensions:{type:"4fv",value:new Float32Array([0,0,0,0])},pixelSize:{type:"1f",value:8}})}var n=t("../../core");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i,Object.defineProperties(i.prototype,{size:{get:function(){return this.uniforms.pixelSize.value},set:function(t){this.uniforms.pixelSize.value=t}}})},{"../../core":52}],116:[function(t,e,r){function i(){n.AbstractFilter.call(this),this.blurXFilter=new o,this.blurYFilter=new s,this.defaultFilter=new n.AbstractFilter}var n=t("../../core"),o=t("../blur/BlurXFilter"),s=t("../blur/BlurYFilter");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.applyFilter=function(t,e,r){var i=t.filterManager.getRenderTarget(!0);this.defaultFilter.applyFilter(t,e,r),this.blurXFilter.applyFilter(t,e,i),t.blendModeManager.setBlendMode(n.BLEND_MODES.SCREEN),this.blurYFilter.applyFilter(t,i,r),t.blendModeManager.setBlendMode(n.BLEND_MODES.NORMAL),t.filterManager.returnRenderTarget(i)},Object.defineProperties(i.prototype,{blur:{get:function(){return this.blurXFilter.blur},set:function(t){this.blurXFilter.blur=this.blurYFilter.blur=t}},blurX:{get:function(){return this.blurXFilter.blur},set:function(t){this.blurXFilter.blur=t}},blurY:{get:function(){return this.blurYFilter.blur},set:function(t){this.blurYFilter.blur=t}}})},{"../../core":52,"../blur/BlurXFilter":119,"../blur/BlurYFilter":120}],117:[function(t,e,r){function i(t,e){n.AbstractFilter.call(this,"attribute vec2 aVertexPosition;\nattribute vec2 aTextureCoord;\nattribute vec4 aColor;\n\nuniform float strength;\nuniform float dirX;\nuniform float dirY;\nuniform mat3 projectionMatrix;\n\nvarying vec2 vTextureCoord;\nvarying vec4 vColor;\nvarying vec2 vBlurTexCoords[3];\n\nvoid main(void)\n{\n gl_Position = vec4((projectionMatrix * vec3((aVertexPosition), 1.0)).xy, 0.0, 1.0);\n vTextureCoord = aTextureCoord;\n\n vBlurTexCoords[0] = aTextureCoord + vec2( (0.004 * strength) * dirX, (0.004 * strength) * dirY );\n vBlurTexCoords[1] = aTextureCoord + vec2( (0.008 * strength) * dirX, (0.008 * strength) * dirY );\n vBlurTexCoords[2] = aTextureCoord + vec2( (0.012 * strength) * dirX, (0.012 * strength) * dirY );\n\n vColor = vec4(aColor.rgb * aColor.a, aColor.a);\n}\n","precision lowp float;\n\nvarying vec2 vTextureCoord;\nvarying vec2 vBlurTexCoords[3];\nvarying vec4 vColor;\n\nuniform sampler2D uSampler;\n\nvoid main(void)\n{\n gl_FragColor = vec4(0.0);\n\n gl_FragColor += texture2D(uSampler, vTextureCoord ) * 0.3989422804014327;\n gl_FragColor += texture2D(uSampler, vBlurTexCoords[ 0]) * 0.2419707245191454;\n gl_FragColor += texture2D(uSampler, vBlurTexCoords[ 1]) * 0.05399096651318985;\n gl_FragColor += texture2D(uSampler, vBlurTexCoords[ 2]) * 0.004431848411938341;\n}\n",{strength:{type:"1f",value:1},dirX:{type:"1f",value:t||0},dirY:{type:"1f",value:e||0}}),this.defaultFilter=new n.AbstractFilter,this.passes=1,this.dirX=t||0,this.dirY=e||0,this.strength=4}var n=t("../../core");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.applyFilter=function(t,e,r,i){var n=this.getShader(t);if(this.uniforms.strength.value=this.strength/4/this.passes*(e.frame.width/e.size.width),1===this.passes)t.filterManager.applyFilter(n,e,r,i);else{var o=t.filterManager.getRenderTarget(!0);t.filterManager.applyFilter(n,e,o,i);for(var s=0;s>16&255)/255,s=(r>>8&255)/255,a=(255&r)/255,h=(i>>16&255)/255,u=(i>>8&255)/255,l=(255&i)/255,c=[.3,.59,.11,0,0,o,s,a,t,0,h,u,l,e,0,o-h,s-u,a-l,0,0];this._loadMatrix(c,n)},i.prototype.night=function(t,e){t=t||.1;var r=[-2*t,-t,0,0,0,-t,0,t,0,0,0,t,2*t,0,0,0,0,0,1,0];this._loadMatrix(r,e)},i.prototype.predator=function(t,e){var r=[11.224130630493164*t,-4.794486999511719*t,-2.8746118545532227*t,0*t,.40342438220977783*t,-3.6330697536468506*t,9.193157196044922*t,-2.951810836791992*t,0*t,-1.316135048866272*t,-3.2184197902679443*t,-4.2375030517578125*t,7.476448059082031*t,0*t,.8044459223747253*t,0,0,0,1,0];this._loadMatrix(r,e)},i.prototype.lsd=function(t){var e=[2,-.4,.5,0,0,-.5,2,-.4,0,0,-.4,-.5,3,0,0,0,0,0,1,0];this._loadMatrix(e,t)},i.prototype.reset=function(){var t=[1,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,1,0];this._loadMatrix(t,!1)},Object.defineProperties(i.prototype,{matrix:{get:function(){return this.uniforms.m.value},set:function(t){this.uniforms.m.value=t}}})},{"../../core":52}],123:[function(t,e,r){function i(){n.AbstractFilter.call(this,null,"precision mediump float;\n\nvarying vec2 vTextureCoord;\n\nuniform sampler2D uSampler;\nuniform float step;\n\nvoid main(void)\n{\n vec4 color = texture2D(uSampler, vTextureCoord);\n\n color = floor(color * step) / step;\n\n gl_FragColor = color;\n}\n",{step:{type:"1f",value:5}})}var n=t("../../core");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i,Object.defineProperties(i.prototype,{step:{get:function(){return this.uniforms.step.value},set:function(t){this.uniforms.step.value=t}}})},{"../../core":52}],124:[function(t,e,r){function i(t,e,r){n.AbstractFilter.call(this,null,"precision mediump float;\n\nvarying mediump vec2 vTextureCoord;\n\nuniform sampler2D uSampler;\nuniform vec2 texelSize;\nuniform float matrix[9];\n\nvoid main(void)\n{\n vec4 c11 = texture2D(uSampler, vTextureCoord - texelSize); // top left\n vec4 c12 = texture2D(uSampler, vec2(vTextureCoord.x, vTextureCoord.y - texelSize.y)); // top center\n vec4 c13 = texture2D(uSampler, vec2(vTextureCoord.x + texelSize.x, vTextureCoord.y - texelSize.y)); // top right\n\n vec4 c21 = texture2D(uSampler, vec2(vTextureCoord.x - texelSize.x, vTextureCoord.y)); // mid left\n vec4 c22 = texture2D(uSampler, vTextureCoord); // mid center\n vec4 c23 = texture2D(uSampler, vec2(vTextureCoord.x + texelSize.x, vTextureCoord.y)); // mid right\n\n vec4 c31 = texture2D(uSampler, vec2(vTextureCoord.x - texelSize.x, vTextureCoord.y + texelSize.y)); // bottom left\n vec4 c32 = texture2D(uSampler, vec2(vTextureCoord.x, vTextureCoord.y + texelSize.y)); // bottom center\n vec4 c33 = texture2D(uSampler, vTextureCoord + texelSize); // bottom right\n\n gl_FragColor =\n c11 * matrix[0] + c12 * matrix[1] + c13 * matrix[2] +\n c21 * matrix[3] + c22 * matrix[4] + c23 * matrix[5] +\n c31 * matrix[6] + c32 * matrix[7] + c33 * matrix[8];\n\n gl_FragColor.a = c22.a;\n}\n",{ +matrix:{type:"1fv",value:new Float32Array(t)},texelSize:{type:"v2",value:{x:1/e,y:1/r}}})}var n=t("../../core");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i,Object.defineProperties(i.prototype,{matrix:{get:function(){return this.uniforms.matrix.value},set:function(t){this.uniforms.matrix.value=new Float32Array(t)}},width:{get:function(){return 1/this.uniforms.texelSize.value.x},set:function(t){this.uniforms.texelSize.value.x=1/t}},height:{get:function(){return 1/this.uniforms.texelSize.value.y},set:function(t){this.uniforms.texelSize.value.y=1/t}}})},{"../../core":52}],125:[function(t,e,r){function i(){n.AbstractFilter.call(this,null,"precision mediump float;\n\nvarying vec2 vTextureCoord;\n\nuniform sampler2D uSampler;\n\nvoid main(void)\n{\n float lum = length(texture2D(uSampler, vTextureCoord.xy).rgb);\n\n gl_FragColor = vec4(1.0, 1.0, 1.0, 1.0);\n\n if (lum < 1.00)\n {\n if (mod(gl_FragCoord.x + gl_FragCoord.y, 10.0) == 0.0)\n {\n gl_FragColor = vec4(0.0, 0.0, 0.0, 1.0);\n }\n }\n\n if (lum < 0.75)\n {\n if (mod(gl_FragCoord.x - gl_FragCoord.y, 10.0) == 0.0)\n {\n gl_FragColor = vec4(0.0, 0.0, 0.0, 1.0);\n }\n }\n\n if (lum < 0.50)\n {\n if (mod(gl_FragCoord.x + gl_FragCoord.y - 5.0, 10.0) == 0.0)\n {\n gl_FragColor = vec4(0.0, 0.0, 0.0, 1.0);\n }\n }\n\n if (lum < 0.3)\n {\n if (mod(gl_FragCoord.x - gl_FragCoord.y - 5.0, 10.0) == 0.0)\n {\n gl_FragColor = vec4(0.0, 0.0, 0.0, 1.0);\n }\n }\n}\n")}var n=t("../../core");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i},{"../../core":52}],126:[function(t,e,r){function i(t,e){var r=new n.Matrix;t.renderable=!1,n.AbstractFilter.call(this,"attribute vec2 aVertexPosition;\nattribute vec2 aTextureCoord;\nattribute vec4 aColor;\n\nuniform mat3 projectionMatrix;\nuniform mat3 otherMatrix;\n\nvarying vec2 vMapCoord;\nvarying vec2 vTextureCoord;\nvarying vec4 vColor;\n\nvoid main(void)\n{\n gl_Position = vec4((projectionMatrix * vec3(aVertexPosition, 1.0)).xy, 0.0, 1.0);\n vTextureCoord = aTextureCoord;\n vMapCoord = ( otherMatrix * vec3( aTextureCoord, 1.0) ).xy;\n vColor = vec4(aColor.rgb * aColor.a, aColor.a);\n}\n","precision mediump float;\n\nvarying vec2 vMapCoord;\nvarying vec2 vTextureCoord;\nvarying vec4 vColor;\n\nuniform vec2 scale;\n\nuniform sampler2D uSampler;\nuniform sampler2D mapSampler;\n\nvoid main(void)\n{\n vec4 map = texture2D(mapSampler, vMapCoord);\n\n map -= 0.5;\n map.xy *= scale;\n\n gl_FragColor = texture2D(uSampler, vec2(vTextureCoord.x + map.x, vTextureCoord.y + map.y));\n}\n",{mapSampler:{type:"sampler2D",value:t.texture},otherMatrix:{type:"mat3",value:r.toArray(!0)},scale:{type:"v2",value:{x:1,y:1}}}),this.maskSprite=t,this.maskMatrix=r,(null===e||void 0===e)&&(e=20),this.scale=new n.Point(e,e)}var n=t("../../core");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.applyFilter=function(t,e,r){var i=t.filterManager;i.calculateMappedMatrix(e.frame,this.maskSprite,this.maskMatrix),this.uniforms.otherMatrix.value=this.maskMatrix.toArray(!0),this.uniforms.scale.value.x=this.scale.x*(1/e.frame.width),this.uniforms.scale.value.y=this.scale.y*(1/e.frame.height);var n=this.getShader(t);i.applyFilter(n,e,r)},Object.defineProperties(i.prototype,{map:{get:function(){return this.uniforms.mapSampler.value},set:function(t){this.uniforms.mapSampler.value=t}}})},{"../../core":52}],127:[function(t,e,r){function i(){n.AbstractFilter.call(this,null,"precision mediump float;\n\nvarying vec2 vTextureCoord;\nvarying vec4 vColor;\n\nuniform vec4 dimensions;\nuniform sampler2D uSampler;\n\nuniform float angle;\nuniform float scale;\n\nfloat pattern()\n{\n float s = sin(angle), c = cos(angle);\n vec2 tex = vTextureCoord * dimensions.xy;\n vec2 point = vec2(\n c * tex.x - s * tex.y,\n s * tex.x + c * tex.y\n ) * scale;\n return (sin(point.x) * sin(point.y)) * 4.0;\n}\n\nvoid main()\n{\n vec4 color = texture2D(uSampler, vTextureCoord);\n float average = (color.r + color.g + color.b) / 3.0;\n gl_FragColor = vec4(vec3(average * 10.0 - 5.0 + pattern()), color.a);\n}\n",{scale:{type:"1f",value:1},angle:{type:"1f",value:5},dimensions:{type:"4fv",value:[0,0,0,0]}})}var n=t("../../core");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i,Object.defineProperties(i.prototype,{scale:{get:function(){return this.uniforms.scale.value},set:function(t){this.uniforms.scale.value=t}},angle:{get:function(){return this.uniforms.angle.value},set:function(t){this.uniforms.angle.value=t}}})},{"../../core":52}],128:[function(t,e,r){function i(){n.AbstractFilter.call(this,"attribute vec2 aVertexPosition;\nattribute vec2 aTextureCoord;\nattribute vec4 aColor;\n\nuniform float strength;\nuniform vec2 offset;\n\nuniform mat3 projectionMatrix;\n\nvarying vec2 vTextureCoord;\nvarying vec4 vColor;\nvarying vec2 vBlurTexCoords[6];\n\nvoid main(void)\n{\n gl_Position = vec4((projectionMatrix * vec3((aVertexPosition+offset), 1.0)).xy, 0.0, 1.0);\n vTextureCoord = aTextureCoord;\n\n vBlurTexCoords[ 0] = aTextureCoord + vec2(0.0, -0.012 * strength);\n vBlurTexCoords[ 1] = aTextureCoord + vec2(0.0, -0.008 * strength);\n vBlurTexCoords[ 2] = aTextureCoord + vec2(0.0, -0.004 * strength);\n vBlurTexCoords[ 3] = aTextureCoord + vec2(0.0, 0.004 * strength);\n vBlurTexCoords[ 4] = aTextureCoord + vec2(0.0, 0.008 * strength);\n vBlurTexCoords[ 5] = aTextureCoord + vec2(0.0, 0.012 * strength);\n\n vColor = vec4(aColor.rgb * aColor.a, aColor.a);\n}\n","precision lowp float;\n\nvarying vec2 vTextureCoord;\nvarying vec2 vBlurTexCoords[6];\nvarying vec4 vColor;\n\nuniform vec3 color;\nuniform float alpha;\n\nuniform sampler2D uSampler;\n\nvoid main(void)\n{\n vec4 sum = vec4(0.0);\n\n sum += texture2D(uSampler, vBlurTexCoords[ 0])*0.004431848411938341;\n sum += texture2D(uSampler, vBlurTexCoords[ 1])*0.05399096651318985;\n sum += texture2D(uSampler, vBlurTexCoords[ 2])*0.2419707245191454;\n sum += texture2D(uSampler, vTextureCoord )*0.3989422804014327;\n sum += texture2D(uSampler, vBlurTexCoords[ 3])*0.2419707245191454;\n sum += texture2D(uSampler, vBlurTexCoords[ 4])*0.05399096651318985;\n sum += texture2D(uSampler, vBlurTexCoords[ 5])*0.004431848411938341;\n\n gl_FragColor = vec4( color.rgb * sum.a * alpha, sum.a * alpha );\n}\n",{blur:{type:"1f",value:1/512},color:{type:"c",value:[0,0,0]},alpha:{type:"1f",value:.7},offset:{type:"2f",value:[5,5]},strength:{type:"1f",value:1}}),this.passes=1,this.strength=4}var n=t("../../core");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.applyFilter=function(t,e,r,i){var n=this.getShader(t);if(this.uniforms.strength.value=this.strength/4/this.passes*(e.frame.height/e.size.height),1===this.passes)t.filterManager.applyFilter(n,e,r,i);else{for(var o=t.filterManager.getRenderTarget(!0),s=e,a=o,h=0;h= (time - params.z)) )\n {\n float diff = (dist - time);\n float powDiff = 1.0 - pow(abs(diff*params.x), params.y);\n\n float diffTime = diff * powDiff;\n vec2 diffUV = normalize(uv - center);\n texCoord = uv + (diffUV * diffTime);\n }\n\n gl_FragColor = texture2D(uSampler, texCoord);\n}\n",{center:{type:"v2",value:{x:.5,y:.5}},params:{type:"v3",value:{x:10,y:.8,z:.1}},time:{type:"1f",value:0}})}var n=t("../../core");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i,Object.defineProperties(i.prototype,{center:{get:function(){return this.uniforms.center.value},set:function(t){this.uniforms.center.value=t}},params:{get:function(){return this.uniforms.params.value},set:function(t){this.uniforms.params.value=t}},time:{get:function(){return this.uniforms.time.value},set:function(t){this.uniforms.time.value=t}}})},{"../../core":52}],138:[function(t,e,r){function i(){n.AbstractFilter.call(this,null,"precision mediump float;\n\nvarying vec2 vTextureCoord;\n\nuniform sampler2D uSampler;\nuniform float blur;\nuniform float gradientBlur;\nuniform vec2 start;\nuniform vec2 end;\nuniform vec2 delta;\nuniform vec2 texSize;\n\nfloat random(vec3 scale, float seed)\n{\n return fract(sin(dot(gl_FragCoord.xyz + seed, scale)) * 43758.5453 + seed);\n}\n\nvoid main(void)\n{\n vec4 color = vec4(0.0);\n float total = 0.0;\n\n float offset = random(vec3(12.9898, 78.233, 151.7182), 0.0);\n vec2 normal = normalize(vec2(start.y - end.y, end.x - start.x));\n float radius = smoothstep(0.0, 1.0, abs(dot(vTextureCoord * texSize - start, normal)) / gradientBlur) * blur;\n\n for (float t = -30.0; t <= 30.0; t++)\n {\n float percent = (t + offset - 0.5) / 30.0;\n float weight = 1.0 - abs(percent);\n vec4 sample = texture2D(uSampler, vTextureCoord + delta / texSize * percent * radius);\n sample.rgb *= sample.a;\n color += sample * weight;\n total += weight;\n }\n\n gl_FragColor = color / total;\n gl_FragColor.rgb /= gl_FragColor.a + 0.00001;\n}\n",{blur:{type:"1f",value:100},gradientBlur:{type:"1f",value:600},start:{type:"v2",value:{x:0,y:window.innerHeight/2}},end:{type:"v2",value:{x:600,y:window.innerHeight/2}},delta:{type:"v2",value:{x:30,y:30}},texSize:{type:"v2",value:{x:window.innerWidth,y:window.innerHeight}}}),this.updateDelta()}var n=t("../../core");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.updateDelta=function(){this.uniforms.delta.value.x=0,this.uniforms.delta.value.y=0},Object.defineProperties(i.prototype,{blur:{get:function(){return this.uniforms.blur.value},set:function(t){this.uniforms.blur.value=t}},gradientBlur:{get:function(){return this.uniforms.gradientBlur.value},set:function(t){this.uniforms.gradientBlur.value=t}},start:{get:function(){return this.uniforms.start.value},set:function(t){this.uniforms.start.value=t,this.updateDelta()}},end:{get:function(){return this.uniforms.end.value},set:function(t){this.uniforms.end.value=t,this.updateDelta()}}})},{"../../core":52}],139:[function(t,e,r){function i(){n.AbstractFilter.call(this),this.tiltShiftXFilter=new o,this.tiltShiftYFilter=new s}var n=t("../../core"),o=t("./TiltShiftXFilter"),s=t("./TiltShiftYFilter");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.applyFilter=function(t,e,r){var i=t.filterManager.getRenderTarget(!0);this.tiltShiftXFilter.applyFilter(t,e,i),this.tiltShiftYFilter.applyFilter(t,i,r),t.filterManager.returnRenderTarget(i)},Object.defineProperties(i.prototype,{blur:{get:function(){return this.tiltShiftXFilter.blur},set:function(t){this.tiltShiftXFilter.blur=this.tiltShiftYFilter.blur=t}},gradientBlur:{get:function(){return this.tiltShiftXFilter.gradientBlur},set:function(t){this.tiltShiftXFilter.gradientBlur=this.tiltShiftYFilter.gradientBlur=t}},start:{get:function(){return this.tiltShiftXFilter.start},set:function(t){this.tiltShiftXFilter.start=this.tiltShiftYFilter.start=t}},end:{get:function(){return this.tiltShiftXFilter.end},set:function(t){this.tiltShiftXFilter.end=this.tiltShiftYFilter.end=t}}})},{"../../core":52,"./TiltShiftXFilter":140,"./TiltShiftYFilter":141}],140:[function(t,e,r){function i(){n.call(this)}var n=t("./TiltShiftAxisFilter");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.updateDelta=function(){var t=this.uniforms.end.value.x-this.uniforms.start.value.x,e=this.uniforms.end.value.y-this.uniforms.start.value.y,r=Math.sqrt(t*t+e*e);this.uniforms.delta.value.x=t/r,this.uniforms.delta.value.y=e/r}},{"./TiltShiftAxisFilter":138}],141:[function(t,e,r){function i(){n.call(this)}var n=t("./TiltShiftAxisFilter");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.updateDelta=function(){var t=this.uniforms.end.value.x-this.uniforms.start.value.x,e=this.uniforms.end.value.y-this.uniforms.start.value.y,r=Math.sqrt(t*t+e*e);this.uniforms.delta.value.x=-e/r,this.uniforms.delta.value.y=t/r}},{"./TiltShiftAxisFilter":138}],142:[function(t,e,r){function i(){n.AbstractFilter.call(this,null,"precision mediump float;\n\nvarying vec2 vTextureCoord;\n\nuniform sampler2D uSampler;\nuniform float radius;\nuniform float angle;\nuniform vec2 offset;\n\nvoid main(void)\n{\n vec2 coord = vTextureCoord - offset;\n float dist = length(coord);\n\n if (dist < radius)\n {\n float ratio = (radius - dist) / radius;\n float angleMod = ratio * ratio * angle;\n float s = sin(angleMod);\n float c = cos(angleMod);\n coord = vec2(coord.x * c - coord.y * s, coord.x * s + coord.y * c);\n }\n\n gl_FragColor = texture2D(uSampler, coord+offset);\n}\n",{radius:{type:"1f",value:.5},angle:{type:"1f",value:5},offset:{type:"v2",value:{x:.5,y:.5}}})}var n=t("../../core");i.prototype=Object.create(n.AbstractFilter.prototype),i.prototype.constructor=i,e.exports=i,Object.defineProperties(i.prototype,{offset:{get:function(){return this.uniforms.offset.value},set:function(t){this.uniforms.offset.value=t}},radius:{get:function(){return this.uniforms.radius.value},set:function(t){this.uniforms.radius.value=t}},angle:{get:function(){return this.uniforms.angle.value},set:function(t){this.uniforms.angle.value=t}}})},{"../../core":52}],143:[function(t,e,r){(function(r){t("./polyfill");var i=e.exports=t("./core");i.extras=t("./extras"),i.filters=t("./filters"),i.interaction=t("./interaction"),i.loaders=t("./loaders"),i.mesh=t("./mesh"),i.accessibility=t("./accessibility"),i.loader=new i.loaders.Loader,Object.assign(i,t("./deprecation")),r.PIXI=i}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{"./accessibility":37,"./core":52,"./deprecation":107,"./extras":114,"./filters":131,"./interaction":146,"./loaders":149,"./mesh":156,"./polyfill":161}],144:[function(t,e,r){function i(){this.global=new n.Point,this.target=null,this.originalEvent=null}var n=t("../core");i.prototype.constructor=i,e.exports=i,i.prototype.getLocalPosition=function(t,e,r){return t.worldTransform.applyInverse(r||this.global,e)}},{"../core":52}],145:[function(t,e,r){function i(t,e){e=e||{},this.renderer=t,this.autoPreventDefault=void 0!==e.autoPreventDefault?e.autoPreventDefault:!0,this.interactionFrequency=e.interactionFrequency||10,this.mouse=new o,this.eventData={stopped:!1,target:null,type:null,data:this.mouse,stopPropagation:function(){this.stopped=!0}},this.interactiveDataPool=[],this.interactionDOMElement=null,this.eventsAdded=!1,this.onMouseUp=this.onMouseUp.bind(this),this.processMouseUp=this.processMouseUp.bind(this),this.onMouseDown=this.onMouseDown.bind(this),this.processMouseDown=this.processMouseDown.bind(this),this.onMouseMove=this.onMouseMove.bind(this),this.processMouseMove=this.processMouseMove.bind(this),this.onMouseOut=this.onMouseOut.bind(this),this.processMouseOverOut=this.processMouseOverOut.bind(this),this.onTouchStart=this.onTouchStart.bind(this),this.processTouchStart=this.processTouchStart.bind(this),this.onTouchEnd=this.onTouchEnd.bind(this),this.processTouchEnd=this.processTouchEnd.bind(this),this.onTouchMove=this.onTouchMove.bind(this),this.processTouchMove=this.processTouchMove.bind(this),this.last=0,this.currentCursorStyle="inherit",this._tempPoint=new n.Point,this.resolution=1,this.setTargetElement(this.renderer.view,this.renderer.resolution)}var n=t("../core"),o=t("./InteractionData");Object.assign(n.DisplayObject.prototype,t("./interactiveTarget")),i.prototype.constructor=i,e.exports=i,i.prototype.setTargetElement=function(t,e){this.removeEvents(),this.interactionDOMElement=t,this.resolution=e||1,this.addEvents()},i.prototype.addEvents=function(){this.interactionDOMElement&&(n.ticker.shared.add(this.update,this),window.navigator.msPointerEnabled&&(this.interactionDOMElement.style["-ms-content-zooming"]="none",this.interactionDOMElement.style["-ms-touch-action"]="none"),window.document.addEventListener("mousemove",this.onMouseMove,!0),this.interactionDOMElement.addEventListener("mousedown",this.onMouseDown,!0),this.interactionDOMElement.addEventListener("mouseout",this.onMouseOut,!0),this.interactionDOMElement.addEventListener("touchstart",this.onTouchStart,!0),this.interactionDOMElement.addEventListener("touchend",this.onTouchEnd,!0),this.interactionDOMElement.addEventListener("touchmove",this.onTouchMove,!0),window.addEventListener("mouseup",this.onMouseUp,!0),this.eventsAdded=!0)},i.prototype.removeEvents=function(){this.interactionDOMElement&&(n.ticker.shared.remove(this.update),window.navigator.msPointerEnabled&&(this.interactionDOMElement.style["-ms-content-zooming"]="",this.interactionDOMElement.style["-ms-touch-action"]=""),window.document.removeEventListener("mousemove",this.onMouseMove,!0),this.interactionDOMElement.removeEventListener("mousedown",this.onMouseDown,!0),this.interactionDOMElement.removeEventListener("mouseout",this.onMouseOut,!0),this.interactionDOMElement.removeEventListener("touchstart",this.onTouchStart,!0),this.interactionDOMElement.removeEventListener("touchend",this.onTouchEnd,!0),this.interactionDOMElement.removeEventListener("touchmove",this.onTouchMove,!0),this.interactionDOMElement=null,window.removeEventListener("mouseup",this.onMouseUp,!0),this.eventsAdded=!1)},i.prototype.update=function(t){if(this._deltaTime+=t,!(this._deltaTime=0;h--)this.processInteractive(t,a[h],r,i,s)&&(o=!0,s=!1,a[h].interactive&&(i=!1));return n&&(i&&!o&&(e.hitArea?(e.worldTransform.applyInverse(t,this._tempPoint),o=e.hitArea.contains(this._tempPoint.x,this._tempPoint.y)):e.containsPoint&&(o=e.containsPoint(t))),e.interactive&&r(e,o)),o},i.prototype.onMouseDown=function(t){this.mouse.originalEvent=t,this.eventData.data=this.mouse,this.eventData.stopped=!1,this.mapPositionToPoint(this.mouse.global,t.clientX,t.clientY),this.autoPreventDefault&&this.mouse.originalEvent.preventDefault(),this.processInteractive(this.mouse.global,this.renderer._lastObjectRendered,this.processMouseDown,!0)},i.prototype.processMouseDown=function(t,e){var r=this.mouse.originalEvent,i=2===r.button||3===r.which;e&&(t[i?"_isRightDown":"_isLeftDown"]=!0,this.dispatchEvent(t,i?"rightdown":"mousedown",this.eventData))},i.prototype.onMouseUp=function(t){this.mouse.originalEvent=t,this.eventData.data=this.mouse,this.eventData.stopped=!1,this.mapPositionToPoint(this.mouse.global,t.clientX,t.clientY),this.processInteractive(this.mouse.global,this.renderer._lastObjectRendered,this.processMouseUp,!0)},i.prototype.processMouseUp=function(t,e){var r=this.mouse.originalEvent,i=2===r.button||3===r.which,n=i?"_isRightDown":"_isLeftDown";e?(this.dispatchEvent(t,i?"rightup":"mouseup",this.eventData),t[n]&&(t[n]=!1,this.dispatchEvent(t,i?"rightclick":"click",this.eventData))):t[n]&&(t[n]=!1,this.dispatchEvent(t,i?"rightupoutside":"mouseupoutside",this.eventData))},i.prototype.onMouseMove=function(t){this.mouse.originalEvent=t,this.eventData.data=this.mouse,this.eventData.stopped=!1,this.mapPositionToPoint(this.mouse.global,t.clientX,t.clientY),this.didMove=!0,this.cursor="inherit",this.processInteractive(this.mouse.global,this.renderer._lastObjectRendered,this.processMouseMove,!0),this.currentCursorStyle!==this.cursor&&(this.currentCursorStyle=this.cursor,this.interactionDOMElement.style.cursor=this.cursor)},i.prototype.processMouseMove=function(t,e){this.dispatchEvent(t,"mousemove",this.eventData),this.processMouseOverOut(t,e)},i.prototype.onMouseOut=function(t){this.mouse.originalEvent=t,this.eventData.stopped=!1,this.mapPositionToPoint(this.mouse.global,t.clientX,t.clientY),this.interactionDOMElement.style.cursor="inherit",this.mapPositionToPoint(this.mouse.global,t.clientX,t.clientY),this.processInteractive(this.mouse.global,this.renderer._lastObjectRendered,this.processMouseOverOut,!1)},i.prototype.processMouseOverOut=function(t,e){e?(t._over||(t._over=!0,this.dispatchEvent(t,"mouseover",this.eventData)),t.buttonMode&&(this.cursor=t.defaultCursor)):t._over&&(t._over=!1,this.dispatchEvent(t,"mouseout",this.eventData))},i.prototype.onTouchStart=function(t){this.autoPreventDefault&&t.preventDefault();for(var e=t.changedTouches,r=e.length,i=0;r>i;i++){var n=e[i],o=this.getTouchData(n);o.originalEvent=t,this.eventData.data=o,this.eventData.stopped=!1,this.processInteractive(o.global,this.renderer._lastObjectRendered,this.processTouchStart,!0),this.returnTouchData(o)}},i.prototype.processTouchStart=function(t,e){e&&(t._touchDown=!0,this.dispatchEvent(t,"touchstart",this.eventData))},i.prototype.onTouchEnd=function(t){this.autoPreventDefault&&t.preventDefault();for(var e=t.changedTouches,r=e.length,i=0;r>i;i++){var n=e[i],o=this.getTouchData(n);o.originalEvent=t,this.eventData.data=o,this.eventData.stopped=!1,this.processInteractive(o.global,this.renderer._lastObjectRendered,this.processTouchEnd,!0),this.returnTouchData(o)}},i.prototype.processTouchEnd=function(t,e){e?(this.dispatchEvent(t,"touchend",this.eventData),t._touchDown&&(t._touchDown=!1,this.dispatchEvent(t,"tap",this.eventData))):t._touchDown&&(t._touchDown=!1,this.dispatchEvent(t,"touchendoutside",this.eventData))},i.prototype.onTouchMove=function(t){this.autoPreventDefault&&t.preventDefault();for(var e=t.changedTouches,r=e.length,i=0;r>i;i++){var n=e[i],o=this.getTouchData(n);o.originalEvent=t, +this.eventData.data=o,this.eventData.stopped=!1,this.processInteractive(o.global,this.renderer._lastObjectRendered,this.processTouchMove,!0),this.returnTouchData(o)}},i.prototype.processTouchMove=function(t,e){e=e,this.dispatchEvent(t,"touchmove",this.eventData)},i.prototype.getTouchData=function(t){var e=this.interactiveDataPool.pop();return e||(e=new o),e.identifier=t.identifier,this.mapPositionToPoint(e.global,t.clientX,t.clientY),navigator.isCocoonJS&&(e.global.x=e.global.x/this.resolution,e.global.y=e.global.y/this.resolution),t.globalX=e.global.x,t.globalY=e.global.y,e},i.prototype.returnTouchData=function(t){this.interactiveDataPool.push(t)},i.prototype.destroy=function(){this.removeEvents(),this.renderer=null,this.mouse=null,this.eventData=null,this.interactiveDataPool=null,this.interactionDOMElement=null,this.onMouseUp=null,this.processMouseUp=null,this.onMouseDown=null,this.processMouseDown=null,this.onMouseMove=null,this.processMouseMove=null,this.onMouseOut=null,this.processMouseOverOut=null,this.onTouchStart=null,this.processTouchStart=null,this.onTouchEnd=null,this.processTouchEnd=null,this.onTouchMove=null,this.processTouchMove=null,this._tempPoint=null},n.WebGLRenderer.registerPlugin("interaction",i),n.CanvasRenderer.registerPlugin("interaction",i)},{"../core":52,"./InteractionData":144,"./interactiveTarget":147}],146:[function(t,e,r){e.exports={InteractionData:t("./InteractionData"),InteractionManager:t("./InteractionManager"),interactiveTarget:t("./interactiveTarget")}},{"./InteractionData":144,"./InteractionManager":145,"./interactiveTarget":147}],147:[function(t,e,r){var i={interactive:!1,buttonMode:!1,interactiveChildren:!0,defaultCursor:"pointer",_over:!1,_touchDown:!1};e.exports=i},{}],148:[function(t,e,r){function i(t,e){var r={},i=t.data.getElementsByTagName("info")[0],n=t.data.getElementsByTagName("common")[0];r.font=i.getAttribute("face"),r.size=parseInt(i.getAttribute("size"),10),r.lineHeight=parseInt(n.getAttribute("lineHeight"),10),r.chars={};for(var a=t.data.getElementsByTagName("char"),h=0;hn;n++){var o=2*n;this._renderCanvasDrawTriangle(t,e,r,o,o+2,o+4)}},i.prototype._renderCanvasTriangles=function(t){for(var e=this.vertices,r=this.uvs,i=this.indices,n=i.length,o=0;n>o;o+=3){var s=2*i[o],a=2*i[o+1],h=2*i[o+2];this._renderCanvasDrawTriangle(t,e,r,s,a,h)}},i.prototype._renderCanvasDrawTriangle=function(t,e,r,i,n,o){var s=this._texture.baseTexture.source,a=this._texture.baseTexture.width,h=this._texture.baseTexture.height,u=e[i],l=e[n],c=e[o],p=e[i+1],d=e[n+1],f=e[o+1],v=r[i]*a,g=r[n]*a,m=r[o]*a,y=r[i+1]*h,x=r[n+1]*h,b=r[o+1]*h;if(this.canvasPadding>0){var _=this.canvasPadding/this.worldTransform.a,T=this.canvasPadding/this.worldTransform.d,E=(u+l+c)/3,S=(p+d+f)/3,w=u-E,C=p-S,A=Math.sqrt(w*w+C*C);u=E+w/A*(A+_),p=S+C/A*(A+T),w=l-E,C=d-S,A=Math.sqrt(w*w+C*C),l=E+w/A*(A+_),d=S+C/A*(A+T),w=c-E,C=f-S,A=Math.sqrt(w*w+C*C),c=E+w/A*(A+_),f=S+C/A*(A+T)}t.save(),t.beginPath(),t.moveTo(u,p),t.lineTo(l,d),t.lineTo(c,f),t.closePath(),t.clip();var M=v*x+y*m+g*b-x*m-y*g-v*b,R=u*x+y*c+l*b-x*c-y*l-u*b,O=v*l+u*m+g*c-l*m-u*g-v*c,P=v*x*c+y*l*m+u*g*b-u*x*m-y*g*c-v*l*b,D=p*x+y*f+d*b-x*f-y*d-p*b,F=v*d+p*m+g*f-d*m-p*g-v*f,L=v*x*f+y*d*m+p*g*b-p*x*m-y*g*f-v*d*b;t.transform(R/M,D/M,O/M,F/M,P/M,L/M),t.drawImage(s,0,0),t.restore()},i.prototype.renderMeshFlat=function(t){var e=this.context,r=t.vertices,i=r.length/2;e.beginPath();for(var n=1;i-2>n;n++){var o=2*n,s=r[o],a=r[o+2],h=r[o+4],u=r[o+1],l=r[o+3],c=r[o+5];e.moveTo(s,u),e.lineTo(a,l),e.lineTo(h,c)}e.fillStyle="#FF0000",e.fill(),e.closePath()},i.prototype._onTextureUpdate=function(){this.updateFrame=!0},i.prototype.getBounds=function(t){if(!this._currentBounds){for(var e=t||this.worldTransform,r=e.a,i=e.b,o=e.c,s=e.d,a=e.tx,h=e.ty,u=-(1/0),l=-(1/0),c=1/0,p=1/0,d=this.vertices,f=0,v=d.length;v>f;f+=2){var g=d[f],m=d[f+1],y=r*g+o*m+a,x=s*m+i*g+h;c=c>y?y:c,p=p>x?x:p,u=y>u?y:u,l=x>l?x:l}if(c===-(1/0)||l===1/0)return n.Rectangle.EMPTY;var b=this._bounds;b.x=c,b.width=u-c,b.y=p,b.height=l-p,this._currentBounds=b}return this._currentBounds},i.prototype.containsPoint=function(t){if(!this.getBounds().contains(t.x,t.y))return!1;this.worldTransform.applyInverse(t,o);var e,r,n=this.vertices,a=s.points;if(this.drawMode===i.DRAW_MODES.TRIANGLES){var h=this.indices;for(r=this.indices.length,e=0;r>e;e+=3){var u=2*h[e],l=2*h[e+1],c=2*h[e+2];if(a[0]=n[u],a[1]=n[u+1],a[2]=n[l],a[3]=n[l+1],a[4]=n[c],a[5]=n[c+1],s.contains(o.x,o.y))return!0}}else for(r=n.length,e=0;r>e;e+=6)if(a[0]=n[e],a[1]=n[e+1],a[2]=n[e+2],a[3]=n[e+3],a[4]=n[e+4],a[5]=n[e+5],s.contains(o.x,o.y))return!0;return!1},i.DRAW_MODES={TRIANGLE_MESH:0,TRIANGLES:1}},{"../core":52}],154:[function(t,e,r){function i(t,e,r){n.call(this,t),this._ready=!0,this.segmentsX=e||10,this.segmentsY=r||10,this.drawMode=n.DRAW_MODES.TRIANGLES,this.refresh()}var n=t("./Mesh");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.refresh=function(){var t=this.segmentsX*this.segmentsY,e=[],r=[],i=[],n=[],o=this.texture,s=this.segmentsX-1,a=this.segmentsY-1,h=0,u=o.width/s,l=o.height/a;for(h=0;t>h;h++){var c=h%this.segmentsX,p=h/this.segmentsX|0;e.push(c*u,p*l),i.push(o._uvs.x0+(o._uvs.x1-o._uvs.x0)*(c/(this.segmentsX-1)),o._uvs.y0+(o._uvs.y3-o._uvs.y0)*(p/(this.segmentsY-1)))}var d=s*a;for(h=0;d>h;h++){var f=h%s,v=h/s|0,g=v*this.segmentsX+f,m=v*this.segmentsX+f+1,y=(v+1)*this.segmentsX+f,x=(v+1)*this.segmentsX+f+1;n.push(g,m,y),n.push(m,x,y)}this.vertices=new Float32Array(e),this.uvs=new Float32Array(i),this.colors=new Float32Array(r),this.indices=new Uint16Array(n)},i.prototype._onTextureUpdate=function(){n.prototype._onTextureUpdate.call(this),this._ready&&this.refresh()}},{"./Mesh":153}],155:[function(t,e,r){function i(t,e){n.call(this,t),this.points=e,this.vertices=new Float32Array(4*e.length),this.uvs=new Float32Array(4*e.length),this.colors=new Float32Array(2*e.length),this.indices=new Uint16Array(2*e.length),this._ready=!0,this.refresh()}var n=t("./Mesh"),o=t("../core");i.prototype=Object.create(n.prototype),i.prototype.constructor=i,e.exports=i,i.prototype.refresh=function(){var t=this.points;if(!(t.length<1)&&this._texture._uvs){var e=this.uvs,r=this.indices,i=this.colors,n=this._texture._uvs,s=new o.Point(n.x0,n.y0),a=new o.Point(n.x2-n.x0,n.y2-n.y0);e[0]=0+s.x,e[1]=0+s.y,e[2]=0+s.x,e[3]=1*a.y+s.y,i[0]=1,i[1]=1,r[0]=0,r[1]=1;for(var h,u,l,c=t.length,p=1;c>p;p++)h=t[p],u=4*p,l=p/(c-1),e[u]=l*a.x+s.x,e[u+1]=0+s.y,e[u+2]=l*a.x+s.x,e[u+3]=1*a.y+s.y,u=2*p,i[u]=1,i[u+1]=1,u=2*p,r[u]=u,r[u+1]=u+1;this.dirty=!0}},i.prototype._onTextureUpdate=function(){n.prototype._onTextureUpdate.call(this),this._ready&&this.refresh()},i.prototype.updateTransform=function(){var t=this.points;if(!(t.length<1)){for(var e,r,i,n,o,s,a=t[0],h=0,u=0,l=this.vertices,c=t.length,p=0;c>p;p++)r=t[p],i=4*p,e=p1&&(n=1),o=Math.sqrt(h*h+u*u),s=this._texture.height/2,h/=o,u/=o,h*=s,u*=s,l[i]=r.x+h,l[i+1]=r.y+u,l[i+2]=r.x-h,l[i+3]=r.y-u,a=r;this.containerUpdateTransform()}}},{"../core":52,"./Mesh":153}],156:[function(t,e,r){e.exports={Mesh:t("./Mesh"),Plane:t("./Plane"),Rope:t("./Rope"),MeshRenderer:t("./webgl/MeshRenderer"),MeshShader:t("./webgl/MeshShader")}},{"./Mesh":153,"./Plane":154,"./Rope":155,"./webgl/MeshRenderer":157,"./webgl/MeshShader":158}],157:[function(t,e,r){function i(t){n.ObjectRenderer.call(this,t),this.indices=new Uint16Array(15e3);for(var e=0,r=0;15e3>e;e+=6,r+=4)this.indices[e+0]=r+0,this.indices[e+1]=r+1,this.indices[e+2]=r+2,this.indices[e+3]=r+0,this.indices[e+4]=r+2,this.indices[e+5]=r+3;this.currentShader=null}var n=t("../../core"),o=t("../Mesh");i.prototype=Object.create(n.ObjectRenderer.prototype),i.prototype.constructor=i,e.exports=i,n.WebGLRenderer.registerPlugin("mesh",i),i.prototype.onContextChange=function(){},i.prototype.render=function(t){t._vertexBuffer||this._initWebGL(t);var e=this.renderer,r=e.gl,i=t._texture.baseTexture,n=t.shader,s=t.drawMode===o.DRAW_MODES.TRIANGLE_MESH?r.TRIANGLE_STRIP:r.TRIANGLES;e.blendModeManager.setBlendMode(t.blendMode),n=n?n.shaders[r.id]||n.getShader(e):e.shaderManager.plugins.meshShader,this.renderer.shaderManager.setShader(n),n.uniforms.translationMatrix.value=t.worldTransform.toArray(!0),n.uniforms.projectionMatrix.value=e.currentRenderTarget.projectionMatrix.toArray(!0),n.uniforms.alpha.value=t.worldAlpha,n.syncUniforms(),t.dirty?(t.dirty=!1,r.bindBuffer(r.ARRAY_BUFFER,t._vertexBuffer),r.bufferData(r.ARRAY_BUFFER,t.vertices,r.STATIC_DRAW),r.vertexAttribPointer(n.attributes.aVertexPosition,2,r.FLOAT,!1,0,0),r.bindBuffer(r.ARRAY_BUFFER,t._uvBuffer),r.bufferData(r.ARRAY_BUFFER,t.uvs,r.STATIC_DRAW),r.vertexAttribPointer(n.attributes.aTextureCoord,2,r.FLOAT,!1,0,0),r.activeTexture(r.TEXTURE0),i._glTextures[r.id]?r.bindTexture(r.TEXTURE_2D,i._glTextures[r.id]):this.renderer.updateTexture(i),r.bindBuffer(r.ELEMENT_ARRAY_BUFFER,t._indexBuffer),r.bufferData(r.ELEMENT_ARRAY_BUFFER,t.indices,r.STATIC_DRAW)):(r.bindBuffer(r.ARRAY_BUFFER,t._vertexBuffer),r.bufferSubData(r.ARRAY_BUFFER,0,t.vertices),r.vertexAttribPointer(n.attributes.aVertexPosition,2,r.FLOAT,!1,0,0),r.bindBuffer(r.ARRAY_BUFFER,t._uvBuffer),r.vertexAttribPointer(n.attributes.aTextureCoord,2,r.FLOAT,!1,0,0),r.activeTexture(r.TEXTURE0),i._glTextures[r.id]?r.bindTexture(r.TEXTURE_2D,i._glTextures[r.id]):this.renderer.updateTexture(i),r.bindBuffer(r.ELEMENT_ARRAY_BUFFER,t._indexBuffer),r.bufferSubData(r.ELEMENT_ARRAY_BUFFER,0,t.indices)),r.drawElements(s,t.indices.length,r.UNSIGNED_SHORT,0)},i.prototype._initWebGL=function(t){var e=this.renderer.gl;t._vertexBuffer=e.createBuffer(),t._indexBuffer=e.createBuffer(),t._uvBuffer=e.createBuffer(),e.bindBuffer(e.ARRAY_BUFFER,t._vertexBuffer),e.bufferData(e.ARRAY_BUFFER,t.vertices,e.DYNAMIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,t._uvBuffer),e.bufferData(e.ARRAY_BUFFER,t.uvs,e.STATIC_DRAW),t.colors&&(t._colorBuffer=e.createBuffer(),e.bindBuffer(e.ARRAY_BUFFER,t._colorBuffer),e.bufferData(e.ARRAY_BUFFER,t.colors,e.STATIC_DRAW)),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t._indexBuffer),e.bufferData(e.ELEMENT_ARRAY_BUFFER,t.indices,e.STATIC_DRAW)},i.prototype.flush=function(){},i.prototype.start=function(){this.currentShader=null},i.prototype.destroy=function(){n.ObjectRenderer.prototype.destroy.call(this)}},{"../../core":52,"../Mesh":153}],158:[function(t,e,r){function i(t){n.Shader.call(this,t,["precision lowp float;","attribute vec2 aVertexPosition;","attribute vec2 aTextureCoord;","uniform mat3 translationMatrix;","uniform mat3 projectionMatrix;","varying vec2 vTextureCoord;","void main(void){"," gl_Position = vec4((projectionMatrix * translationMatrix * vec3(aVertexPosition, 1.0)).xy, 0.0, 1.0);"," vTextureCoord = aTextureCoord;","}"].join("\n"),["precision lowp float;","varying vec2 vTextureCoord;","uniform float alpha;","uniform sampler2D uSampler;","void main(void){"," gl_FragColor = texture2D(uSampler, vTextureCoord) * alpha ;","}"].join("\n"),{alpha:{type:"1f",value:0},translationMatrix:{type:"mat3",value:new Float32Array(9)},projectionMatrix:{type:"mat3",value:new Float32Array(9)}},{aVertexPosition:0,aTextureCoord:0})}var n=t("../../core");i.prototype=Object.create(n.Shader.prototype),i.prototype.constructor=i,e.exports=i,n.ShaderManager.registerPlugin("meshShader",i)},{"../../core":52}],159:[function(t,e,r){Math.sign||(Math.sign=function(t){return t=+t,0===t||isNaN(t)?t:t>0?1:-1})},{}],160:[function(t,e,r){Object.assign||(Object.assign=t("object-assign"))},{"object-assign":26}],161:[function(t,e,r){t("./Object.assign"),t("./requestAnimationFrame"),t("./Math.sign")},{"./Math.sign":159,"./Object.assign":160,"./requestAnimationFrame":162}],162:[function(t,e,r){(function(t){if(Date.now&&Date.prototype.getTime||(Date.now=function(){return(new Date).getTime()}),!t.performance||!t.performance.now){var e=Date.now();t.performance||(t.performance={}),t.performance.now=function(){return Date.now()-e}}for(var r=Date.now(),i=["ms","moz","webkit","o"],n=0;ni&&(i=0),r=e,setTimeout(function(){r=Date.now(),t(performance.now())},i)}),t.cancelAnimationFrame||(t.cancelAnimationFrame=function(t){clearTimeout(t)})}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{}]},{},[143])(143)}); //# sourceMappingURL=pixi.min.js.map diff --git a/bin/pixi.min.js.map b/bin/pixi.min.js.map index 857d92a..419daff 100644 --- a/bin/pixi.min.js.map +++ b/bin/pixi.min.js.map @@ -1 +1 @@ -{"version":3,"sources":["pixi.js"],"names":["f","exports","module","define","amd","g","window","global","self","this","PIXI","e","t","n","r","s","o","u","a","require","i","Error","code","l","call","length",1,"createContext","setVertexAttribArrays","GLBuffer","GLFramebuffer","GLShader","GLTexture","VertexArrayObject","./lib/GLBuffer","./lib/GLFramebuffer","./lib/GLShader","./lib/GLTexture","./lib/VertexArrayObject","./lib/createContext","./lib/setVertexAttribArrays",2,"EMPTY_ARRAY_BUFFER","ArrayBuffer","Buffer","gl","type","data","drawType","buffer","createBuffer","ARRAY_BUFFER","STATIC_DRAW","upload","prototype","offset","dontBind","bind","byteLength","bufferSubData","bufferData","bindBuffer","createVertexBuffer","createIndexBuffer","ELEMENT_ARRAY_BUFFER","create",3,"Texture","Framebuffer","width","height","framebuffer","createFramebuffer","stencil","texture","enableTexture","framebufferTexture2D","FRAMEBUFFER","COLOR_ATTACHMENT0","TEXTURE_2D","enableStencil","createRenderbuffer","bindRenderbuffer","RENDERBUFFER","framebufferRenderbuffer","DEPTH_STENCIL_ATTACHMENT","renderbufferStorage","DEPTH_STENCIL","clear","b","clearColor","COLOR_BUFFER_BIT","bindFramebuffer","unbind","resize","texImage2D","format","destroy","deleteFramebuffer","createRGBA","enableNearestScaling","enableWrapClamp","RGBA","UNSIGNED_BYTE","fbo","createFloat32","fromData","./GLTexture",4,"compileProgram","extractAttributes","extractUniforms","generateUniformAccessObject","Shader","vertexSrc","fragmentSrc","program","attributes","uniformData","uniforms","useProgram","./shader/compileProgram","./shader/extractAttributes","./shader/extractUniforms","./shader/generateUniformAccessObject",5,"createTexture","mipmap","premultiplyAlpha","source","pixelStorei","UNPACK_PREMULTIPLY_ALPHA_WEBGL","FLOATING_POINT_AVAILABLE","uploadData","Float32Array","ext","getExtension","FLOAT","location","undefined","activeTexture","TEXTURE0","bindTexture","minFilter","linear","texParameteri","TEXTURE_MIN_FILTER","LINEAR_MIPMAP_LINEAR","NEAREST_MIPMAP_NEAREST","LINEAR","NEAREST","magFilter","TEXTURE_MAG_FILTER","enableMipmap","generateMipmap","enableLinearScaling","TEXTURE_WRAP_S","CLAMP_TO_EDGE","TEXTURE_WRAP_T","enableWrapRepeat","REPEAT","deleteTexture","fromSource",6,"nativeVaoExtension","nativeVao","createVertexArrayOES","indexBuffer","dirty","constructor","bindVertexArrayOES","activate","attrib","attribute","pointer","normalized","stride","start","enableVertexAttribArray","addAttribute","push","addIndex","options",7,"CONTEXT_UID","canvas","getContext","id",8,"GL_MAP","attribs","maxAttribs","getParameter","MAX_VERTEX_ATTRIBS","tempAttribState","Array","attribState","disableVertexAttribArray",9,"glVertShader","compileShader","VERTEX_SHADER","glFragShader","FRAGMENT_SHADER","createProgram","attachShader","linkProgram","getProgramParameter","LINK_STATUS","console","error","VALIDATE_STATUS","getError","getProgramInfoLog","warn","deleteProgram","deleteShader","src","shader","createShader","shaderSource","getShaderParameter","COMPILE_STATUS","log","getShaderInfoLog",10,"defaultValue","size","Int32Array","booleanArray","array",11,"mapType","mapSize","totalAttributes","ACTIVE_ATTRIBUTES","attribData","getActiveAttrib","name","getAttribLocation","vertexAttribPointer","./mapSize","./mapType",12,"totalUniforms","ACTIVE_UNIFORMS","getActiveUniform","replace","getUniformLocation","value","./defaultValue",13,"uniformKeys","Object","keys","fullName","nameTokens","split","uniformGroup","getUniformGroup","uniform","defineProperty","get","generateGetter","set","generateSetter","template","getterTemplate","Function","setTemplate","setterTemplate","GLSL_TO_SINGLE_SETTERS","GLSL_TO_ARRAY_SETTERS","cur","join","float","vec2","vec3","vec4","int","ivec2","ivec3","ivec4","bool","bvec2","bvec3","bvec4","mat2","mat3","mat4","sampler2D",14,"GLSL_TO_SIZE",15,"GL_TABLE","typeNames","GL_TO_GLSL_TYPES","tn","FLOAT_VEC2","FLOAT_VEC3","FLOAT_VEC4","INT","INT_VEC2","INT_VEC3","INT_VEC4","BOOL","BOOL_VEC2","BOOL_VEC3","BOOL_VEC4","FLOAT_MAT2","FLOAT_MAT3","FLOAT_MAT4","SAMPLER_2D",16,"process","noop","identity","v","toBool","notId","only_once","fn","apply","arguments","_once","_isArrayLike","arr","_isArray","_arrayEach","iterator","index","_map","result","_range","count","_reduce","memo","x","_forEachOf","object","_keys","key","_indexOf","item","_keyIterator","coll","len","_restParam","func","startIndex","Math","max","rest","_withoutIndex","callback","_eachOfLimit","limit","obj","nextKey","done","running","errored","replenish","err","doParallel","async","eachOf","doParallelLimit","doSeries","eachOfSeries","_asyncMap","eachfn","results","_filter","sort","_reject","cb","_createTester","check","getResult","iteratee","_","_findGetResult","_parallel","tasks","task","args","_concat","y","concat","_queue","worker","concurrency","payload","_insert","q","pos","started","idle","setImmediate","drain","unshift","saturated","_next","workers","removed","workersList","splice","empty","paused","kill","pause","resume","resumeCount","min","w","_console_fn","_times","mapper","_applyEach","fns","go","that","pop","ensureAsync","innerArgs","sync","previous_async","root","noConflict","_toString","toString","isArray","_isObject","k","hasOwnProperty","_setImmediate","_delay","setTimeout","nextTick","forEach","each","forEachSeries","eachSeries","forEachLimit","eachLimit","forEachOf","completed","iter","forEachOfSeries","iterate","forEachOfLimit","eachOfLimit","map","mapSeries","mapLimit","inject","foldl","reduce","foldr","reduceRight","reversed","reverse","transform","select","filter","selectLimit","filterLimit","selectSeries","filterSeries","reject","rejectLimit","rejectSeries","any","some","someLimit","all","every","everyLimit","detect","detectSeries","detectLimit","sortBy","comparator","left","right","criteria","auto","addListener","listeners","removeListener","idx","taskComplete","remainingTasks","slice","runningTasks","ready","requires","listener","taskCallback","dep","safeResults","val","rkey","retry","times","parseTimes","acc","parseInt","DEFAULT_TIMES","interval","DEFAULT_INTERVAL","wrappedTask","wrappedCallback","wrappedResults","retryAttempt","finalAttempt","seriesCallback","retryInterval","opts","attempts","series","waterfall","wrapIterator","next","parallel","parallelLimit","makeCallback","callArgs","concatSeries","whilst","test","doWhilst","calls","until","doUntil","during","truth","doDuring","queue","items","priorityQueue","_compareTasks","priority","_binarySearch","sequence","compare","beg","end","mid","cargo","dir","memoize","hasher","queues","memoized","unmemoized","unmemoize","timesSeries","timesLimit","seq","newargs","nextargs","compose","applyEach","applyEachSeries","forever","constant","values","wrapSync","asyncify","then","message","_process",17,"normalizeArray","parts","allowAboveRoot","up","last","xs","res","splitPathRe","splitPath","filename","exec","resolve","resolvedPath","resolvedAbsolute","path","cwd","TypeError","charAt","p","normalize","isAbsolute","trailingSlash","substr","paths","relative","from","to","trim","fromParts","toParts","samePartsLength","outputParts","sep","delimiter","dirname","basename","extname","str",18,"cleanUpNextTick","draining","currentQueue","queueIndex","drainQueue","timeout","run","clearTimeout","Item","fun","title","browser","env","argv","version","versions","on","once","off","removeAllListeners","emit","binding","chdir","umask",19,"RangeError","errors","mapDomain","string","regexSeparators","labels","encoded","ucs2decode","extra","output","counter","charCodeAt","ucs2encode","stringFromCharCode","basicToDigit","codePoint","base","digitToBasic","digit","flag","adapt","delta","numPoints","firstTime","floor","damp","baseMinusTMin","tMax","skew","decode","input","out","basic","j","oldi","baseMinusT","inputLength","initialN","bias","initialBias","lastIndexOf","maxInt","tMin","encode","handledCPCount","basicLength","m","currentValue","handledCPCountPlusOne","qMinusT","toUnicode","regexPunycode","toLowerCase","toASCII","regexNonASCII","freeExports","nodeType","freeModule","freeGlobal","punycode","overflow","not-basic","invalid-input","String","fromCharCode","ucs2",20,"prop","qs","eq","regexp","maxKeys","kstr","vstr","indexOf","decodeURIComponent",21,"stringifyPrimitive","isFinite","objectKeys","ks","encodeURIComponent",22,"parse","stringify","./decode","./encode",23,"Url","protocol","slashes","auth","host","port","hostname","hash","search","query","pathname","href","urlParse","url","parseQueryString","slashesDenoteHost","isObject","urlFormat","isString","urlResolve","urlResolveObject","resolveObject","arg","isNull","isNullOrUndefined","protocolPattern","portPattern","delims","unwise","autoEscape","nonHostChars","hostEndingChars","hostnameMaxLen","hostnamePartPattern","hostnamePartStart","unsafeProtocol","javascript","javascript:","hostlessProtocol","slashedProtocol","http","https","ftp","gopher","file","http:","https:","ftp:","gopher:","file:","querystring","proto","lowerProto","match","hostEnd","hec","atSign","parseHost","ipv6Hostname","hostparts","part","newpart","validParts","notHost","bit","domainArray","newOut","h","ae","esc","escape","qm","rel","relPath","shift","isSourceAbs","isRelAbs","mustEndAbs","removeAllDots","srcPath","psychotic","authInHost","hasTrailingSlash",24,"earcut","holeIndices","dim","hasHoles","outerLen","outerNode","linkedList","triangles","minX","minY","maxX","maxY","eliminateHoles","earcutLinked","clockwise","sum","insertNode","filterPoints","again","steiner","equals","area","prev","removeNode","ear","pass","indexCurve","stop","isEarHashed","isEar","cureLocalIntersections","splitEarcut","c","pointInTriangle","minTX","minTY","maxTX","maxTY","minZ","zOrder","maxZ","nextZ","z","prevZ","intersects","locallyInside","isValidDiagonal","splitPolygon","list","getLeftmost","compareX","eliminateHole","hole","findHoleBridge","hx","hy","qx","Infinity","tan","tanMin","abs","sortLinked","tail","numMerges","pSize","qSize","inSize","leftmost","ax","ay","bx","by","cx","cy","px","py","intersectsPolygon","middleInside","p1","p2","q1","q2","inside","a2","Node","b2","an","bp",25,"EE","context","EventEmitter","prefix","_events","event","exists","evt","available","ee","a1","a3","a4","a5","events","setMaxListeners","prefixed",26,"toObject","propIsEnumerable","propertyIsEnumerable","assign","target","symbols","getOwnPropertySymbols",27,"called","_each","_eachLimit","_mapLimit","_detect","main_callback","theCallback","working","drained","ts","ds",28,"Loader","baseUrl","progress","loading","_progressChunk","_beforeMiddleware","_afterMiddleware","_boundLoadResource","_loadResource","_boundOnLoad","_onLoad","_buffer","_numToLoad","resources","urlParser","Resource","add","enqueue","onComplete","_handleBaseUrl","parsedUrl","before","pre","after","use","reset","load","resource","dequeue","_dequeue","_runMiddleware","_onComplete","LOAD_TYPE","XHR_READY_STATE","XHR_RESPONSE_TYPE","./Resource","eventemitter3",29,"isDataUrl","crossOrigin","loadType","_determineLoadType","xhrType","metadata","xhr","isJson","isXml","isImage","isAudio","isVideo","_boundComplete","complete","_boundOnError","_onError","_boundOnProgress","_onProgress","_boundXhrOnError","_xhrOnError","_boundXhrOnAbort","_xhrOnAbort","_boundXhrOnLoad","_xhrOnLoad","_boundXdrOnTimeout","_xdrOnTimeout","reqType","setExtMap","substring","_url","useXdr","XDomainRequest","XMLHttpRequest","tempAnchor","removeEventListener","onerror","ontimeout","onprogress","onload","_determineCrossOrigin","IMAGE","_loadImage","AUDIO","_loadElement","VIDEO","XHR","_loadXdr","_loadXhr","Image","addEventListener","Audio","document","createElement","navigator","isCocoonJS","appendChild","_createSource","toUpperCase","_determineXhrType","open","JSON","DOCUMENT","responseType","TEXT","send","xdr","mime","nodeName","lengthComputable","loaded","total","status","statusText","responseText","DOMParser","domparser","parseFromString","div","innerHTML","response","responseURL","loc","samePort","_xhrTypeMap","_getExtension","_loadTypeMap","slashIndex","queryStart","_getMimeFromXhrType","BUFFER","BLOB","DEFAULT","UNSENT","OPENED","HEADERS_RECEIVED","LOADING","DONE","gif","png","bmp","jpg","jpeg","tif","tiff","webp","tga","xhtml","html","htm","xml","tmx","tsx","svg","json","text","txt","setExtensionLoadType","setExtensionXhrType",30,"_keyStr","encodeBinary","bytebuffer","encodedCharIndexes","inx","jnx","paddingBytes",31,"middleware","caching","memory","parsing","blob","./Loader","./middlewares/caching/memory","./middlewares/parsing/blob",32,"cache",33,"b64","URL","webkitURL","Blob","createObjectURL","revokeObjectURL","getResponseHeader","../../Resource","../../b64",34,"description","author","contributors","main","homepage","bugs","license","repository","scripts","build","docs","files","dependencies","brfs","object-assign","pixi-gl-core","resource-loader","devDependencies","browserify","chai","del","gulp","gulp-cached","gulp-concat","gulp-debug","gulp-header","gulp-jshint","gulp-mirror","gulp-plumber","gulp-rename","gulp-sourcemaps","gulp-uglify","gulp-util","jaguarjs-jsdoc","jsdoc","jshint-summary","minimist","mocha","require-dir","run-sequence","testem","vinyl-buffer","vinyl-source-stream","watchify",35,"AccessibilityManager","renderer","style","position","top","zIndex","pool","renderId","debug","children","_onKeyDown","_onMouseMove","isActive","core","DisplayObject","update","view","parentNode","deactivate","removeChild","updateAccessibleObjects","displayObject","visible","accessible","interactive","_accessibleActive","addChild","_lastObjectRendered","rect","getBoundingClientRect","sx","sy","child","utils","removeItems","_accessibleDiv","hitArea","wt","worldTransform","tx","ty","d","getBounds","capHitArea","backgroundColor","borderStyle","_onClick","_onFocus","_onFocusOut","accessibleTitle","tabIndex","interactionManager","plugins","interaction","dispatchEvent","eventData","keyCode","WebGLRenderer","registerPlugin","CanvasRenderer","../core","./accessibleTarget",36,"accessibleTarget",37,"./AccessibilityManager",38,"CONST","VERSION","PI_2","PI","RAD_TO_DEG","DEG_TO_RAD","TARGET_FPMS","RENDERER_TYPE","UNKNOWN","WEBGL","CANVAS","BLEND_MODES","NORMAL","ADD","MULTIPLY","SCREEN","OVERLAY","DARKEN","LIGHTEN","COLOR_DODGE","COLOR_BURN","HARD_LIGHT","SOFT_LIGHT","DIFFERENCE","EXCLUSION","HUE","SATURATION","COLOR","LUMINOSITY","DRAW_MODES","POINTS","LINES","LINE_LOOP","LINE_STRIP","TRIANGLES","TRIANGLE_STRIP","TRIANGLE_FAN","SCALE_MODES","RETINA_PREFIX","RESOLUTION","FILTER_RESOLUTION","DEFAULT_RENDER_OPTIONS","resolution","antialias","forceFXAA","autoResize","transparent","clearBeforeRender","preserveDrawingBuffer","roundPixels","SHAPES","POLY","RECT","CIRC","ELIP","RREC","SPRITE_BATCH_SIZE","../../package.json",39,"Container","math","RenderTexture","_tempMatrix","Matrix","defineProperties","scale","getLocalBounds","_width","_height","onChildrenChange","argumentsLength","parent","addChildAt","swapChildren","child2","index1","getChildIndex","index2","setChildIndex","currentIndex","getChildAt","removeChildAt","removeChildren","beginIndex","endIndex","begin","range","generateTexture","scaleMode","bounds","renderTexture","render","updateTransform","displayObjectUpdateTransform","containerUpdateTransform","_currentBounds","Rectangle","EMPTY","childBounds","childMaxX","childMaxY","childVisible","_bounds","containerGetBounds","matrixCache","IDENTITY","renderWebGL","worldAlpha","renderable","_mask","_filters","currentRenderer","flush","filterManager","pushFilter","maskManager","pushMask","_renderWebGL","popMask","popFilter","_renderCanvas","renderCanvas","alpha","destroyChildren","../math","../textures/RenderTexture","../utils","./DisplayObject",40,"Point","pivot","_rotation","localTransform","filterArea","_sr","_cr","_tempDisplayObjectParent","scaleX","scaleY","rotation","sin","cos","worldVisible","mask","filters","pt","lt","matrix","toGlobal","toLocal","point","applyInverse","setParent","container","setTransform","skewX","skewY","pivotX","pivotY","../const",41,"Graphics","fillAlpha","lineWidth","lineColor","graphicsData","tint","_prevTint","blendMode","currentPath","_webGL","isMask","boundsPadding","_localBounds","glDirty","boundsDirty","cachedSpriteDirty","CanvasBuffer","CanvasGraphics","GraphicsData","tempPoint","clone","updateLocalBounds","lineStyle","color","lineAlpha","shape","points","Polygon","closed","drawShape","moveTo","lineTo","quadraticCurveTo","cpX","cpY","toX","toY","xa","ya","fromX","fromY","bezierCurveTo","cpX2","cpY2","dt","dt2","dt3","t2","t3","arcTo","x1","y1","x2","y2","radius","b1","mm","dd","cc","tt","k1","sqrt","k2","j1","j2","qy","startAngle","atan2","endAngle","arc","anticlockwise","sweep","segs","ceil","startX","startY","theta","theta2","cTheta","sTheta","segMinus","remainder","real","angle","beginFill","filling","fillColor","fill","endFill","drawRect","drawRoundedRect","RoundedRectangle","drawCircle","Circle","drawEllipse","Ellipse","drawPolygon","clearDirty","canvasBuffer","fromCanvas","baseTexture","translate","renderGraphics","setObjectRenderer","graphics","compositeOperation","blendModes","globalCompositeOperation","w0","w1","h0","h1","x3","y3","x4","y4","containsPoint","contains","padding","_webgl","../display/Container","../renderers/canvas/utils/CanvasBuffer","../renderers/canvas/utils/CanvasGraphics","../textures/Texture","./GraphicsData",42,"_lineTint","_fillTint",43,"GraphicsRenderer","ObjectRenderer","graphicsDataPool","primitiveShader","complexPrimitiveShader","maximumSimplePolySize","WebGLGraphicsData","onContextChange","webGLData","shaderManager","updateGraphics","webGL","blendModeManager","setBlendMode","mode","stencilManager","pushStencil","uniform1f","_location","drawElements","UNSIGNED_SHORT","indices","popStencil","setShader","uniformMatrix3fv","translationMatrix","toArray","projectionMatrix","currentRenderTarget","uniform3fv","hex2rgb","aVertexPosition","aColor","drawCount","lastIndex","switchMode","canDrawUsingSimple","buildPoly","buildComplexPoly","buildLine","buildRectangle","buildCircle","buildRoundedRectangle","rectData","verts","vertPos","tempPoints","rrectData","recPoints","quadraticBezierCurve","vecPos","getPt","n1","n2","perc","diff","xb","yb","circleData","totalSegs","seg","firstPoint","lastPoint","midPointX","midPointY","p1x","p1y","p2x","p2y","p3x","p3y","perpx","perpy","perp2x","perp2y","perp3x","perp3y","c1","c2","denom","pdist","dist","indexCount","indexStart","../../const","../../math","../../renderers/webgl/WebGLRenderer","../../renderers/webgl/utils/ObjectRenderer","../../utils","./WebGLGraphicsData",44,"glPoints","glIndices","Uint16Array","deleteBuffer",45,"ticker","Sprite","ParticleContainer","SpriteRenderer","ParticleRenderer","Text","BaseTexture","VideoBaseTexture","TextureUvs","WebGLManager","ShaderManager","RenderTarget","AbstractFilter","FXAAFilter","SpriteMaskFilter","glCore","autoDetectRenderer","noWebGL","isWebGLSupported","./const","./display/Container","./display/DisplayObject","./graphics/Graphics","./graphics/GraphicsData","./graphics/webgl/GraphicsRenderer","./math","./particles/ParticleContainer","./particles/webgl/ParticleRenderer","./renderers/canvas/CanvasRenderer","./renderers/canvas/utils/CanvasBuffer","./renderers/canvas/utils/CanvasGraphics","./renderers/webgl/WebGLRenderer","./renderers/webgl/filters/AbstractFilter","./renderers/webgl/filters/FXAAFilter","./renderers/webgl/filters/SpriteMaskFilter","./renderers/webgl/managers/ShaderManager","./renderers/webgl/managers/WebGLManager","./renderers/webgl/shaders/Shader","./renderers/webgl/utils/ObjectRenderer","./renderers/webgl/utils/RenderTarget","./sprites/Sprite","./sprites/webgl/SpriteRenderer","./text/Text","./textures/BaseTexture","./textures/RenderTexture","./textures/Texture","./textures/TextureUvs","./textures/VideoBaseTexture","./ticker","./utils",46,"fromArray","transpose","newPos","rotate","tx1","append","d1","sr","cr","nsx","prepend","invert","copy","TEMP_MATRIX","./Point",47,48,"./Matrix","./shapes/Circle","./shapes/Ellipse","./shapes/Polygon","./shapes/Rectangle","./shapes/RoundedRectangle",49,"dx","dy","r2","./Rectangle",50,"normx","normy",51,"points_","il","xi","yi","xj","yj","intersect","../Point",52,53,54,"maxSize","properties","batchSize","maxBatchSize","_properties","_maxSize","_batchSize","_buffers","_bufferToUpdate","interactiveChildren","setProperties","uvs","particle","smallestChildIndex","bufferIndex","isRotated","positionX","positionY","finalWidth","finalHeight","globalAlpha","frame","anchor","childTransform","drawImage",55,"ParticleBuffer","dynamicPropertyFlags","vertSize","vertByteSize","dynamicProperties","staticProperties","property","staticStride","staticBuffer","staticData","dynamicStride","dynamicBuffer","dynamicData","initBuffers","dynamicOffset","DYNAMIC_DRAW","staticOffset","uploadDynamic","amount","uploadFunction","uploadStatic",56,"numIndices","tempMatrix","ParticleShader","uploadVertices","aPositionCoord","uploadPosition","aRotation","uploadRotation","aTextureCoord","uploadUvs","uploadAlpha","totalChildren","generateBuffers","uAlpha","_texture","_glTextures","updateTexture","buffers","sprite","crop","_frame","spritePosition","spriteRotation","textureUvs","_uvs","x0","y0","spriteAlpha","./ParticleBuffer","./ParticleShader",57,"TextureShader","../../renderers/webgl/shaders/TextureShader",58,"SystemRenderer","system","sayHello","_backgroundColor","_backgroundColorRgba","_backgroundColorString","hex2string","removeView",59,"refresh","CanvasMaskManager","smoothProperty","imageSmoothingEnabled","webkitImageSmoothingEnabled","mozImageSmoothingEnabled","oImageSmoothingEnabled","msImageSmoothingEnabled","initPlugins","_mapBlendModes","pluginTarget","mixin","cacheParent","screencanvas","fillStyle","clearRect","fillRect","renderDisplayObject","destroyPlugins","tempContext","canUseNewCanvasBlendModes","../SystemRenderer","./utils/CanvasMaskManager",60,61,"updateGraphicsTint","beginPath","closePath","strokeStyle","stroke","strokeRect","kappa","ox","oy","xe","ye","xm","ym","rx","ry","maxRadius","renderGraphicsMask","tintR","tintG","tintB","../../../const",62,"maskData","save","cacheAlpha","clip","restore","./CanvasGraphics",63,"CanvasTinter","getTintedTexture","roundColor","stringColor","tintCache","tintMethod","convertTintToImage","tintImage","toDataURL","tintWithMultiply","tintWithOverlay","tintWithPerPixel","rgbValues","pixelData","getImageData","pixels","putImageData","step","cacheStepsPerColorChannel","rgb2hex","canUseMultiply","../../../utils",64,"TextureManager","_managedTextures","glTextures","getTexture","hasLoaded","glTexture","uid","destroyTexture","_skipRemove","removeAll",65,"handleContextLost","handleContextRestored","_contextOptions","premultipliedAlpha","MaskManager","StencilManager","FilterManager","BlendModeManager","_initContext","mapWebGLBlendModesToPixi","drawModes","mapWebGLDrawModesToPixi","_activeShader","_activeRenderTarget","_activeTextureLocation","_activeTexture","textureManager","disable","DEPTH_TEST","CULL_FACE","enable","BLEND","rootRenderTarget","bindRenderTarget","isContextLost","renderTarget","setFilterStack","filterStack","objectRenderer","setMaskStack","stencilMaskStack","bindShader","preventDefault","destroyAll","./TextureManager","./filters/FXAAFilter","./managers/BlendModeManager","./managers/FilterManager","./managers/MaskManager","./managers/ShaderManager","./managers/StencilManager","./utils/ObjectRenderer","./utils/RenderTarget","./utils/mapWebGLBlendModesToPixi","./utils/mapWebGLDrawModesToPixi",66,"shaders","DefaultShader","defaultVertexSrc","defaultFragmentSrc","getShader","applyFilter","syncUniform","../shaders/TextureShader",67,"./AbstractFilter",68,"maskMatrix","otherMatrix","maskSprite","calculateMappedMatrix","../../../math",69,"currentBlendMode","blendFunc","./WebGLManager",70,"texturePool","textureSize","currentFrame","Quad","quad","capFilterArea","getRenderTarget","setRenderTarget","filterData","previousFilterData","vertexBuffer","defaultShader","dimensions","vertices","returnRenderTarget","flipTexture","flopTexture","temp","inputTarget","outputTarget","syncUniforms","outputMatrix","mappedMatrix","ratio","translateScaleX","translateScaleY","offsetY","../utils/Quad","../utils/RenderTarget",71,"stencilStack","alphaMaskPool","AlphaMaskFilter","pushSpriteMask","pushStencilMask","popSpriteMask","popStencilMask","alphaMaskFilter","../filters/SpriteMaskFilter",72,"maxAttibs","stack","_currentId","currentShader","ComplexPrimitiveShader","PrimitiveShader","setAttribs","../shaders/ComplexPrimitiveShader","../shaders/PrimitiveShader",73,"WebGLMaskManager","STENCIL_TEST","attachStencilBuffer","sms","bindGraphics","STENCIL_BUFFER_BIT","level","colorMask","stencilFunc","ALWAYS","stencilOp","KEEP","INVERT","EQUAL","DECR","INCR",74,75,"./Shader",76,77,"textureCount","init","compile","cacheUniformLocations","cacheAttributeLocations","_glCompile","uniform1i","uniform2f","uniform3f","uniform4f","uniform1iv","uniform2iv","uniform3iv","uniform4iv","uniform1fv","uniform2fv","uniform4fv","uniformMatrix2fv","uniformMatrix4fv","_array","initSampler2D","textureData","luminance","LUMINANCE","wrapS","wrapT",78,"customUniforms","customAttributes","uSampler",79,80,"../managers/WebGLManager",81,"colors","rect2",82,"StencilMaskStack","frameBuffer","stencilBuffer","projectionFrame","calculateProjection","viewport","pm","./StencilMaskStack",83,84,"ONE","ONE_MINUS_SRC_ALPHA","SRC_ALPHA","DST_ALPHA","DST_COLOR",85,86,"cachedTint","textureDirty","vertexDirty","vertexData","sign","_onTextureUpdate","caclulateVertices","valid","smoothingEnabled","tintedTexture","destroyBaseTexture","fromFrame","frameId","TextureCache","fromImage","imageId","crossorigin","../renderers/canvas/utils/CanvasTinter",87,"numVerts","positions","Uint32Array","createIndicesForQuads","currentBatchSize","sprites","groupCount","groups","textures","ids","blend","currentGroup","currentTexture","generateMultiTextureShader","MAX_TEXTUES","_shader","vao","aTextureId","nextTexture","_enabled","_id","uvs_uint32","renderSprites","subarray","group","../../renderers/webgl/shaders/_TextureShader","../../utils/createIndicesForQuads","./generateMultiTextureShader",88,"maxTextures","generateSampleSrc","fragTemplate","sampleValues","uSamplers",89,"_text","_style","fontPropertiesCache","fontPropertiesCanvas","fontPropertiesContext","updateText","dropShadowColor","font","align","strokeThickness","wordWrap","wordWrapWidth","dropShadow","dropShadowAngle","dropShadowDistance","dropShadowBlur","textBaseline","lineJoin","miterLimit","outputText","lines","lineWidths","maxLineWidth","fontProperties","determineFontProperties","measureText","lineHeight","fontSize","linePositionX","linePositionY","shadowColor","shadowBlur","xShadowOffset","yShadowOffset","ascent","fillText","strokeText","fontStyle","baseline","imagedata","line","descent","spaceLeft","words","wordWidth","wordWidthWithSpace","../sprites/Sprite",90,"realWidth","realHeight","isLoading","imageUrl","isPowerOfTwo","_active","loadSource","naturalWidth","naturalHeight","wasLoading","_sourceLoaded","scope","BaseTextureCache","_pixiId","dispose","updateSourceImage","newSrc","image","getResolutionOfUrl",91,"textureBuffer","_updateUvs","updateBase","currentBounds","cachedWt","realResolution","getImage","getBase64","getCanvas","webGLPixels","Uint8Array","readPixels","tempCanvas","canvasData","getPixels","getPixel","../renderers/webgl/managers/FilterManager","../renderers/webgl/utils/RenderTarget","./BaseTexture","./Texture",92,"noFrame","requiresUpdate","onBaseTextureUpdated","onBaseTextureLoaded","destroyBase","fromVideo","video","fromVideoUrl","videoUrl","fromUrl","addTextureToCache","removeTextureFromCache","./TextureUvs","./VideoBaseTexture",93,"xy0_uint32","xy1_uint32","xy2_uint32","xy3_uint32","baseFrame","tw","th",94,"readyState","HAVE_ENOUGH_DATA","HAVE_FUTURE_DATA","autoUpdate","_onUpdate","_onCanPlay","_onPlayStart","_onPlayStop","__loaded","createSource","requestAnimationFrame","videoWidth","videoHeight","play","videoSrc","fromUrls",95,"Ticker","_this","_tick","time","_requestId","_emitter","TICK","_maxElapsedMS","autoStart","deltaTime","elapsedMS","lastTime","speed","FPS","minFPS","fps","minFPMS","_requestIfNeeded","performance","now","_cancelIfNeeded","cancelAnimationFrame","_startIfPossible","addOnce","remove","currentTime",96,"shared","./Ticker",97,"totalIndices",98,"_uid","_saidHello","hex","rgb","pngHead","pngEnd","magenta","yellow","getNextPowerOfTwo","number","parseFloat","userAgent","contextOptions","WebGLRenderingContext","getContextAttributes","startIdx","removeCount","./pluginTarget",99,"__plugins","pluginName","ctor",100,"mesh","extras","SpriteBatch","ReferenceError","AssetLoader","Stage","DisplayObjectContainer","Strip","Mesh","Rope","MovieClip","TilingSprite","BitmapText","scaleModes","setTexture","setText","setStyle","setFrame","uuid","./core","./extras","./filters","./mesh",101,"textWidth","textHeight","_glyphs","_font","maxWidth","maxLineHeight","fonts","prevCharCode","chars","lastLineWidth","lastSpace","charCode","charData","kerning","xOffset","yOffset","xAdvance","lineAlignOffsets","alignOffset","lenChars","validate",102,"_textures","_durations","animationSpeed","loop","_currentTime","playing","totalFrames","gotoAndStop","frameNumber","gotoAndPlay","elapsed","lag","fromFrames","frames","fromImages","images",103,"tileScale","tilePosition","_canvasPattern","uFrame","uTransform","uPixelSize","tempUvs","tempWidth","tempHeight","modX","modY","createPattern","_tileScaleOffset","../core/renderers/canvas/utils/CanvasTinter",104,"_cacheAsBitmap","_originalRenderWebGL","_originalRenderCanvas","_originalUpdateTransform","_originalHitTest","_originalDestroy","_cachedSprite","cacheAsBitmap","_originalGetBounds","_originalContainsPoint","_renderCachedWebGL","_renderCachedCanvas","_cacheAsBitmapDestroy","_destroyCachedDisplayObject","_initCachedDisplayObject","cachedRenderTarget","_getCachedBounds","_initCachedDisplayObjectCanvas",105,"getChildByName",106,"getGlobalPosition",107,"./BitmapText","./MovieClip","./TilingSprite","./cacheAsBitmap","./getChildByName","./getGlobalPosition",108,"AsciiFilter","pixelSize","../../core",109,"BloomFilter","blurXFilter","BlurXFilter","blurYFilter","BlurYFilter","defaultFilter","blur","blurX","blurY","../blur/BlurXFilter","../blur/BlurYFilter",110,"BlurDirFilter","dirX","dirY","strength","passes",111,"BlurFilter","./BlurXFilter","./BlurYFilter",112,"flip","flop",113,114,"SmartBlurFilter",115,"ColorMatrixFilter","_loadMatrix","multiply","newMatrix","_multiply","_colorMatrix","brightness","greyscale","grayscale","blackAndWhite","hue","lumR","lumG","lumB","contrast","saturate","desaturate","negative","sepia","technicolor","polaroid","toBGR","kodachrome","browni","vintage","colorTone","desaturation","toned","lightColor","darkColor","lR","lG","lB","dR","dG","dB","night","intensity","predator","lsd",116,"ColorStepFilter",117,"ConvolutionFilter","texelSize",118,"CrossHatchFilter",119,"DisplacementFilter","mapSampler",120,"DotScreenFilter",121,"BlurYTintFilter",122,"DropShadowFilter","blurYTintFilter","_dirtyPosition","_angle","_distance","hideObject","distance","./BlurYTintFilter",123,"GrayFilter","gray",124,"InvertFilter","NoiseFilter","PixelateFilter","RGBSplitFilter","ShockwaveFilter","SepiaFilter","TiltShiftFilter","TiltShiftXFilter","TiltShiftYFilter","TwistFilter","./ascii/AsciiFilter","./bloom/BloomFilter","./blur/BlurDirFilter","./blur/BlurFilter","./blur/BlurXFilter","./blur/BlurYFilter","./blur/SmartBlurFilter","./color/ColorMatrixFilter","./color/ColorStepFilter","./convolution/ConvolutionFilter","./crosshatch/CrossHatchFilter","./displacement/DisplacementFilter","./dot/DotScreenFilter","./dropshadow/DropShadowFilter","./gray/GrayFilter","./invert/InvertFilter","./noise/NoiseFilter","./pixelate/PixelateFilter","./rgb/RGBSplitFilter","./sepia/SepiaFilter","./shockwave/ShockwaveFilter","./tiltshift/TiltShiftFilter","./tiltshift/TiltShiftXFilter","./tiltshift/TiltShiftYFilter","./twist/TwistFilter",125,126,"noise",127,128,"red","green","blue",129,130,"center","params",131,"TiltShiftAxisFilter","gradientBlur","innerHeight","texSize","innerWidth","updateDelta",132,"tiltShiftXFilter","tiltShiftYFilter","./TiltShiftXFilter","./TiltShiftYFilter",133,"./TiltShiftAxisFilter",134,135,136,"loaders","accessibility","loader","./accessibility","./deprecation","./interaction","./loaders","./polyfill",137,"InteractionData","originalEvent","getLocalPosition","globalPos",138,"InteractionManager","autoPreventDefault","interactionFrequency","mouse","stopped","stopPropagation","interactiveDataPool","interactionDOMElement","eventsAdded","onMouseUp","processMouseUp","onMouseDown","processMouseDown","onMouseMove","processMouseMove","onMouseOut","processMouseOverOut","onTouchStart","processTouchStart","onTouchEnd","processTouchEnd","onTouchMove","processTouchMove","currentCursorStyle","_tempPoint","setTargetElement","element","removeEvents","addEvents","msPointerEnabled","_deltaTime","didMove","cursor","processInteractive","eventString","mapPositionToPoint","hitTest","hit","interactiveParent","clientX","clientY","isRightButton","button","which","isDown","_over","buttonMode","defaultCursor","changedTouches","cLength","touchEvent","touchData","getTouchData","returnTouchData","_touchDown","identifier","globalX","globalY","./InteractionData","./interactiveTarget",139,"interactiveTarget","./InteractionManager",140,141,"info","getElementsByTagName","common","getAttribute","letters","textureRect","kernings","first","second","bitmapFont","xmlUrl","textureUrl","loadOptions","imageMetadata","../extras",142,"bitmapFontParser","spritesheetParser","textureParser","./bitmapFontParser","./loader","./spritesheetParser","./textureParser",143,"ResourceLoader","_pixiMiddleware","addPixiMiddleware",144,"route","meta","rotated","trimmed","spriteSourceSize","sourceSize",145,146,"drawMode","canvasPadding","TRIANGLE_MESH","tempPolygon","_renderCanvasTriangleMesh","_renderCanvasTriangles","_renderCanvasDrawTriangle","index0","textureSource","textureWidth","textureHeight","u0","u1","u2","v0","v1","v2","paddingX","paddingY","centerX","centerY","normX","normY","deltaA","deltaB","deltaC","deltaD","deltaE","deltaF","renderMeshFlat","updateFrame","rawX","rawY","ind0","ind1","ind2",147,"Plane","segmentsX","segmentsY","_ready","segmentsXSub","segmentsYSub","sizeX","sizeY","totalSub","xpos","ypos","value2","value3","value4","./Mesh",148,"factor","nextPoint","perpLength","num","perpX","perpY",149,"MeshRenderer","MeshShader","./Plane","./Rope","./webgl/MeshRenderer","./webgl/MeshShader",150,"_vertexBuffer","_initWebGL","meshShader","_uvBuffer","_indexBuffer","_colorBuffer","../Mesh",151,152,"isNaN",153,154,"./Math.sign","./Object.assign","./requestAnimationFrame",155,"Date","getTime","startTime","vendors","delay"],"mappings":"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EAAA,GAAAuE,EAAA,GAAAvE,EAAA,GAAAuE,EAAA,GAAAvE,EAAA,GAAAuE,EAAA,IAAAvE,EAAA,GAAAuE,EAAA,IACAqkB,EAAA,GAAA5oB,EAAA,GAAAuE,EAAA,GAAAvE,EAAA,GAAAuE,EAAA,GAAAvE,EAAA,GAAAuE,EAAA,IAAAvE,EAAA,GAAAuE,EAAA,IAGAqkB,EAAA,IAAA5oB,EAAA,IAAAuE,EAAA,GAAAvE,EAAA,IAAAuE,EAAA,GAAAvE,EAAA,IAAAuE,EAAA,IAAAvE,EAAA,IAAAuE,EAAA,IACAqkB,EAAA,IAAA5oB,EAAA,IAAAuE,EAAA,GAAAvE,EAAA,IAAAuE,EAAA,GAAAvE,EAAA,IAAAuE,EAAA,IAAAvE,EAAA,IAAAuE,EAAA,IACAqkB,EAAA,IAAA5oB,EAAA,IAAAuE,EAAA,GAAAvE,EAAA,IAAAuE,EAAA,GAAAvE,EAAA,IAAAuE,EAAA,IAAAvE,EAAA,IAAAuE,EAAA,IACAqkB,EAAA,IAAA5oB,EAAA,IAAAuE,EAAA,GAAAvE,EAAA,IAAAuE,EAAA,GAAAvE,EAAA,IAAAuE,EAAA,IAAAvE,EAAA,IAAAuE,EAAA,IACAqkB,EAAA,IAAA5oB,EAAA,IAAAuE,EAAA,GAAAvE,EAAA,IAAAuE,EAAA,GAAAvE,EAAA,IAAAuE,EAAA,IAAAvE,EAAA,IAAAuE,EAAA,IAGAqkB,EAAA,IAAA5oB,EAAA,IAAAuE,EAAA,GAAAvE,EAAA,IAAAuE,EAAA,GAAAvE,EAAA,IAAAuE,EAAA,IAAAvE,EAAA,IAAAuE,EAAA,IACAqkB,EAAA,IAAA5oB,EAAA,IAAAuE,EAAA,GAAAvE,EAAA,IAAAuE,EAAA,GAAAvE,EAAA,IAAAuE,EAAA,IAAAvE,EAAA,IAAAuE,EAAA,IACAqkB,EAAA,IAAA5oB,EAAA,IAAAuE,EAAA,GAAAvE,EAAA,IAAAuE,EAAA,GAAAvE,EAAA,IAAAuE,EAAA,IAAAvE,EAAA,IAAAuE,EAAA,IACAqkB,EAAA,IAAA5oB,EAAA,IAAAuE,EAAA,GAAAvE,EAAA,IAAAuE,EAAA,GAAAvE,EAAA,IAAAuE,EAAA,IAAAvE,EAAA,IAAAuE,EAAA,IACAqkB,EAA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","file":"pixi.min.js","sourcesContent":[null],"sourceRoot":"./"} \ No newline at end of file +{"version":3,"sources":["pixi.js"],"names":["f","exports","module","define","amd","g","window","global","self","this","PIXI","e","t","n","r","s","o","u","a","require","i","Error","code","l","call","length",1,"createContext","setVertexAttribArrays","GLBuffer","GLFramebuffer","GLShader","GLTexture","VertexArrayObject","./lib/GLBuffer","./lib/GLFramebuffer","./lib/GLShader","./lib/GLTexture","./lib/VertexArrayObject","./lib/createContext","./lib/setVertexAttribArrays",2,"EMPTY_ARRAY_BUFFER","ArrayBuffer","Buffer","gl","type","data","drawType","buffer","createBuffer","ARRAY_BUFFER","STATIC_DRAW","upload","prototype","offset","dontBind","bind","byteLength","bufferSubData","bufferData","bindBuffer","createVertexBuffer","createIndexBuffer","ELEMENT_ARRAY_BUFFER","create",3,"Texture","Framebuffer","width","height","framebuffer","createFramebuffer","stencil","texture","enableTexture","framebufferTexture2D","FRAMEBUFFER","COLOR_ATTACHMENT0","TEXTURE_2D","enableStencil","createRenderbuffer","bindRenderbuffer","RENDERBUFFER","framebufferRenderbuffer","DEPTH_STENCIL_ATTACHMENT","renderbufferStorage","DEPTH_STENCIL","clear","b","clearColor","COLOR_BUFFER_BIT","bindFramebuffer","unbind","resize","uploadData","destroy","deleteFramebuffer","createRGBA","fromData","enableNearestScaling","enableWrapClamp","fbo","createFloat32","./GLTexture",4,"compileProgram","extractAttributes","extractUniforms","generateUniformAccessObject","Shader","vertexSrc","fragmentSrc","program","attributes","uniformData","uniforms","useProgram","./shader/compileProgram","./shader/extractAttributes","./shader/extractUniforms","./shader/generateUniformAccessObject",5,"format","createTexture","mipmap","premultiplyAlpha","RGBA","UNSIGNED_BYTE","source","pixelStorei","UNPACK_PREMULTIPLY_ALPHA_WEBGL","texImage2D","FLOATING_POINT_AVAILABLE","Float32Array","ext","getExtension","FLOAT","location","undefined","activeTexture","TEXTURE0","bindTexture","minFilter","linear","texParameteri","TEXTURE_MIN_FILTER","LINEAR_MIPMAP_LINEAR","NEAREST_MIPMAP_NEAREST","LINEAR","NEAREST","magFilter","TEXTURE_MAG_FILTER","enableMipmap","generateMipmap","enableLinearScaling","TEXTURE_WRAP_S","CLAMP_TO_EDGE","TEXTURE_WRAP_T","enableWrapRepeat","REPEAT","deleteTexture","fromSource",6,"nativeVaoExtension","nativeVao","createVertexArrayOES","indexBuffer","dirty","constructor","bindVertexArrayOES","activate","attrib","attribute","pointer","normalized","stride","start","enableVertexAttribArray","addAttribute","push","addIndex","options","draw","size","drawElements","UNSIGNED_SHORT",7,"CONTEXT_UID","canvas","getContext","id",8,"GL_MAP","attribs","maxAttribs","getParameter","MAX_VERTEX_ATTRIBS","tempAttribState","Array","attribState","disableVertexAttribArray",9,"glVertShader","compileShader","VERTEX_SHADER","glFragShader","FRAGMENT_SHADER","createProgram","attachShader","linkProgram","getProgramParameter","LINK_STATUS","console","error","VALIDATE_STATUS","getError","getProgramInfoLog","warn","deleteProgram","deleteShader","src","shader","createShader","shaderSource","getShaderParameter","COMPILE_STATUS","log","getShaderInfoLog",10,"defaultValue","Int32Array","booleanArray","array",11,"mapType","mapSize","totalAttributes","ACTIVE_ATTRIBUTES","attribData","getActiveAttrib","name","getAttribLocation","vertexAttribPointer","./mapSize","./mapType",12,"totalUniforms","ACTIVE_UNIFORMS","getActiveUniform","replace","getUniformLocation","value","./defaultValue",13,"uniformKeys","Object","keys","fullName","nameTokens","split","uniformGroup","getUniformGroup","uniform","defineProperty","get","generateGetter","set","generateSetter","template","getterTemplate","Function","setTemplate","setterTemplate","GLSL_TO_SINGLE_SETTERS","GLSL_TO_ARRAY_SETTERS","cur","join","float","vec2","vec3","vec4","int","ivec2","ivec3","ivec4","bool","bvec2","bvec3","bvec4","mat2","mat3","mat4","sampler2D",14,"GLSL_TO_SIZE",15,"GL_TABLE","typeNames","GL_TO_GLSL_TYPES","tn","FLOAT_VEC2","FLOAT_VEC3","FLOAT_VEC4","INT","INT_VEC2","INT_VEC3","INT_VEC4","BOOL","BOOL_VEC2","BOOL_VEC3","BOOL_VEC4","FLOAT_MAT2","FLOAT_MAT3","FLOAT_MAT4","SAMPLER_2D",16,"process","noop","identity","v","toBool","notId","only_once","fn","apply","arguments","_once","_isArrayLike","arr","_isArray","_arrayEach","iterator","index","_map","result","_range","count","_reduce","memo","x","_forEachOf","object","_keys","key","_indexOf","item","_keyIterator","coll","len","_restParam","func","startIndex","Math","max","rest","_withoutIndex","callback","_eachOfLimit","limit","obj","nextKey","done","running","errored","replenish","err","doParallel","async","eachOf","doParallelLimit","doSeries","eachOfSeries","_asyncMap","eachfn","results","_filter","sort","_reject","cb","_createTester","check","getResult","iteratee","_","_findGetResult","_parallel","tasks","task","args","_concat","y","concat","_queue","worker","concurrency","payload","_insert","q","pos","started","idle","setImmediate","drain","unshift","saturated","_next","workers","removed","workersList","splice","empty","paused","kill","pause","resume","resumeCount","min","w","_console_fn","_times","mapper","_applyEach","fns","go","that","pop","ensureAsync","innerArgs","sync","previous_async","root","noConflict","_toString","toString","isArray","_isObject","k","hasOwnProperty","_setImmediate","_delay","setTimeout","nextTick","forEach","each","forEachSeries","eachSeries","forEachLimit","eachLimit","forEachOf","completed","iter","forEachOfSeries","iterate","forEachOfLimit","eachOfLimit","map","mapSeries","mapLimit","inject","foldl","reduce","foldr","reduceRight","reversed","reverse","transform","select","filter","selectLimit","filterLimit","selectSeries","filterSeries","reject","rejectLimit","rejectSeries","any","some","someLimit","all","every","everyLimit","detect","detectSeries","detectLimit","sortBy","comparator","left","right","criteria","auto","addListener","listeners","removeListener","idx","taskComplete","remainingTasks","slice","runningTasks","ready","requires","listener","taskCallback","dep","safeResults","val","rkey","retry","times","parseTimes","acc","parseInt","DEFAULT_TIMES","interval","DEFAULT_INTERVAL","wrappedTask","wrappedCallback","wrappedResults","retryAttempt","finalAttempt","seriesCallback","retryInterval","opts","attempts","series","waterfall","wrapIterator","next","parallel","parallelLimit","makeCallback","callArgs","concatSeries","whilst","test","doWhilst","calls","until","doUntil","during","truth","doDuring","queue","items","priorityQueue","_compareTasks","priority","_binarySearch","sequence","compare","beg","end","mid","cargo","dir","memoize","hasher","queues","memoized","unmemoized","unmemoize","timesSeries","timesLimit","seq","newargs","nextargs","compose","applyEach","applyEachSeries","forever","constant","values","wrapSync","asyncify","then","message","_process",17,"normalizeArray","parts","allowAboveRoot","up","last","xs","res","splitPathRe","splitPath","filename","exec","resolve","resolvedPath","resolvedAbsolute","path","cwd","TypeError","charAt","p","normalize","isAbsolute","trailingSlash","substr","paths","relative","from","to","trim","fromParts","toParts","samePartsLength","outputParts","sep","delimiter","dirname","basename","extname","str",18,"cleanUpNextTick","draining","currentQueue","queueIndex","drainQueue","timeout","run","clearTimeout","Item","fun","title","browser","env","argv","version","versions","on","once","off","removeAllListeners","emit","binding","chdir","umask",19,"RangeError","errors","mapDomain","string","regexSeparators","labels","encoded","ucs2decode","extra","output","counter","charCodeAt","ucs2encode","stringFromCharCode","basicToDigit","codePoint","base","digitToBasic","digit","flag","adapt","delta","numPoints","firstTime","floor","damp","baseMinusTMin","tMax","skew","decode","input","out","basic","j","oldi","baseMinusT","inputLength","initialN","bias","initialBias","lastIndexOf","maxInt","tMin","encode","handledCPCount","basicLength","m","currentValue","handledCPCountPlusOne","qMinusT","toUnicode","regexPunycode","toLowerCase","toASCII","regexNonASCII","freeExports","nodeType","freeModule","freeGlobal","punycode","overflow","not-basic","invalid-input","String","fromCharCode","ucs2",20,"prop","qs","eq","regexp","maxKeys","kstr","vstr","indexOf","decodeURIComponent",21,"stringifyPrimitive","isFinite","objectKeys","ks","encodeURIComponent",22,"parse","stringify","./decode","./encode",23,"Url","protocol","slashes","auth","host","port","hostname","hash","search","query","pathname","href","urlParse","url","parseQueryString","slashesDenoteHost","isObject","urlFormat","isString","urlResolve","urlResolveObject","resolveObject","arg","isNull","isNullOrUndefined","protocolPattern","portPattern","delims","unwise","autoEscape","nonHostChars","hostEndingChars","hostnameMaxLen","hostnamePartPattern","hostnamePartStart","unsafeProtocol","javascript","javascript:","hostlessProtocol","slashedProtocol","http","https","ftp","gopher","file","http:","https:","ftp:","gopher:","file:","querystring","proto","lowerProto","match","hostEnd","hec","atSign","parseHost","ipv6Hostname","hostparts","part","newpart","validParts","notHost","bit","domainArray","newOut","h","ae","esc","escape","qm","rel","relPath","shift","isSourceAbs","isRelAbs","mustEndAbs","removeAllDots","srcPath","psychotic","authInHost","hasTrailingSlash",24,"earcut","holeIndices","dim","hasHoles","outerLen","outerNode","linkedList","triangles","minX","minY","maxX","maxY","eliminateHoles","earcutLinked","clockwise","sum","insertNode","filterPoints","again","steiner","equals","area","prev","removeNode","ear","pass","indexCurve","stop","isEarHashed","isEar","cureLocalIntersections","splitEarcut","c","pointInTriangle","minTX","minTY","maxTX","maxTY","minZ","zOrder","maxZ","nextZ","z","prevZ","intersects","locallyInside","isValidDiagonal","splitPolygon","list","getLeftmost","compareX","eliminateHole","hole","findHoleBridge","hx","hy","qx","Infinity","tan","tanMin","abs","sortLinked","tail","numMerges","pSize","qSize","inSize","leftmost","ax","ay","bx","by","cx","cy","px","py","intersectsPolygon","middleInside","p1","p2","q1","q2","inside","a2","Node","b2","an","bp",25,"EE","context","EventEmitter","prefix","_events","event","exists","evt","available","ee","a1","a3","a4","a5","events","setMaxListeners","prefixed",26,"toObject","propIsEnumerable","propertyIsEnumerable","assign","target","symbols","getOwnPropertySymbols",27,"called","_each","_eachLimit","_mapLimit","_detect","main_callback","theCallback","working","drained","ts","ds",28,"Loader","baseUrl","progress","loading","_progressChunk","_beforeMiddleware","_afterMiddleware","_boundLoadResource","_loadResource","_boundOnLoad","_onLoad","_buffer","_numToLoad","resources","urlParser","Resource","add","enqueue","onComplete","_handleBaseUrl","parsedUrl","before","pre","after","use","reset","load","resource","dequeue","_dequeue","_runMiddleware","_onComplete","LOAD_TYPE","XHR_READY_STATE","XHR_RESPONSE_TYPE","./Resource","eventemitter3",29,"isDataUrl","crossOrigin","loadType","_determineLoadType","xhrType","metadata","xhr","isJson","isXml","isImage","isAudio","isVideo","_boundComplete","complete","_boundOnError","_onError","_boundOnProgress","_onProgress","_boundXhrOnError","_xhrOnError","_boundXhrOnAbort","_xhrOnAbort","_boundXhrOnLoad","_xhrOnLoad","_boundXdrOnTimeout","_xdrOnTimeout","reqType","setExtMap","substring","_url","useXdr","XDomainRequest","XMLHttpRequest","tempAnchor","removeEventListener","onerror","ontimeout","onprogress","onload","_determineCrossOrigin","IMAGE","_loadImage","AUDIO","_loadElement","VIDEO","XHR","_loadXdr","_loadXhr","Image","addEventListener","Audio","document","createElement","navigator","isCocoonJS","appendChild","_createSource","toUpperCase","_determineXhrType","open","JSON","DOCUMENT","responseType","TEXT","send","xdr","mime","nodeName","lengthComputable","loaded","total","status","statusText","responseText","DOMParser","domparser","parseFromString","div","innerHTML","response","responseURL","loc","samePort","_xhrTypeMap","_getExtension","_loadTypeMap","slashIndex","queryStart","_getMimeFromXhrType","BUFFER","BLOB","DEFAULT","UNSENT","OPENED","HEADERS_RECEIVED","LOADING","DONE","gif","png","bmp","jpg","jpeg","tif","tiff","webp","tga","xhtml","html","htm","xml","tmx","tsx","svg","json","text","txt","setExtensionLoadType","setExtensionXhrType",30,"_keyStr","encodeBinary","bytebuffer","encodedCharIndexes","inx","jnx","paddingBytes",31,"middleware","caching","memory","parsing","blob","./Loader","./middlewares/caching/memory","./middlewares/parsing/blob",32,"cache",33,"b64","URL","webkitURL","Blob","createObjectURL","revokeObjectURL","getResponseHeader","../../Resource","../../b64",34,"description","author","contributors","main","homepage","bugs","license","repository","scripts","build","docs","files","dependencies","brfs","object-assign","pixi-gl-core","resource-loader","devDependencies","browserify","chai","del","gulp","gulp-cached","gulp-concat","gulp-debug","gulp-header","gulp-jshint","gulp-mirror","gulp-plumber","gulp-rename","gulp-sourcemaps","gulp-uglify","gulp-util","jaguarjs-jsdoc","jsdoc","jshint-summary","minimist","mocha","require-dir","run-sequence","testem","vinyl-buffer","vinyl-source-stream","watchify",35,"AccessibilityManager","renderer","style","position","top","zIndex","pool","renderId","debug","children","_onKeyDown","_onMouseMove","isActive","core","DisplayObject","update","view","parentNode","deactivate","removeChild","updateAccessibleObjects","displayObject","visible","accessible","interactive","_accessibleActive","addChild","_lastObjectRendered","rect","getBoundingClientRect","sx","sy","child","utils","removeItems","_accessibleDiv","hitArea","wt","worldTransform","tx","ty","d","getBounds","capHitArea","backgroundColor","borderStyle","_onClick","_onFocus","_onFocusOut","accessibleTitle","tabIndex","interactionManager","plugins","interaction","dispatchEvent","eventData","keyCode","WebGLRenderer","registerPlugin","CanvasRenderer","../core","./accessibleTarget",36,"accessibleTarget",37,"./AccessibilityManager",38,"CONST","VERSION","PI_2","PI","RAD_TO_DEG","DEG_TO_RAD","TARGET_FPMS","RENDERER_TYPE","UNKNOWN","WEBGL","CANVAS","BLEND_MODES","NORMAL","ADD","MULTIPLY","SCREEN","OVERLAY","DARKEN","LIGHTEN","COLOR_DODGE","COLOR_BURN","HARD_LIGHT","SOFT_LIGHT","DIFFERENCE","EXCLUSION","HUE","SATURATION","COLOR","LUMINOSITY","DRAW_MODES","POINTS","LINES","LINE_LOOP","LINE_STRIP","TRIANGLES","TRIANGLE_STRIP","TRIANGLE_FAN","SCALE_MODES","RETINA_PREFIX","RESOLUTION","FILTER_RESOLUTION","DEFAULT_RENDER_OPTIONS","resolution","antialias","forceFXAA","autoResize","transparent","clearBeforeRender","preserveDrawingBuffer","roundPixels","SHAPES","POLY","RECT","CIRC","ELIP","RREC","SPRITE_BATCH_SIZE","../../package.json",39,"Container","math","RenderTexture","_tempMatrix","Matrix","defineProperties","scale","getLocalBounds","_width","_height","onChildrenChange","argumentsLength","parent","addChildAt","swapChildren","child2","index1","getChildIndex","index2","setChildIndex","currentIndex","getChildAt","removeChildAt","removeChildren","beginIndex","endIndex","begin","range","generateTexture","scaleMode","bounds","renderTexture","render","updateTransform","displayObjectUpdateTransform","dirtyTransform","containerUpdateTransform","_currentBounds","Rectangle","EMPTY","childBounds","childMaxX","childMaxY","childVisible","_bounds","containerGetBounds","matrixCache","IDENTITY","renderWebGL","worldAlpha","renderable","_mask","_filters","currentRenderer","flush","filterManager","pushFilter","maskManager","pushMask","_renderWebGL","popMask","popFilter","_renderCanvas","renderCanvas","alpha","destroyChildren","../math","../textures/RenderTexture","../utils","./DisplayObject",40,"Point","_position","CachePoint","pivot","_rotation","localTransform","filterArea","_sr","_cr","_tempDisplayObjectParent","doc","posiiton","scaleX","scaleY","rotation","sin","cos","worldVisible","mask","filters","pt","lt","matrix","toGlobal","toLocal","point","applyInverse","setParent","container","setTransform","skewX","skewY","pivotX","pivotY","../const",41,"Graphics","fillAlpha","lineWidth","lineColor","graphicsData","tint","_prevTint","blendMode","currentPath","_webGL","isMask","boundsPadding","_localBounds","glDirty","boundsDirty","cachedSpriteDirty","CanvasBuffer","CanvasGraphics","GraphicsData","tempPoint","clone","updateLocalBounds","lineStyle","color","lineAlpha","shape","points","Polygon","closed","drawShape","moveTo","lineTo","quadraticCurveTo","cpX","cpY","toX","toY","xa","ya","fromX","fromY","bezierCurveTo","cpX2","cpY2","dt","dt2","dt3","t2","t3","arcTo","x1","y1","x2","y2","radius","b1","mm","dd","cc","tt","k1","sqrt","k2","j1","j2","qy","startAngle","atan2","endAngle","arc","anticlockwise","sweep","segs","ceil","startX","startY","theta","theta2","cTheta","sTheta","segMinus","remainder","real","angle","beginFill","filling","fillColor","fill","endFill","drawRect","drawRoundedRect","RoundedRectangle","drawCircle","Circle","drawEllipse","Ellipse","drawPolygon","clearDirty","canvasBuffer","fromCanvas","baseTexture","translate","renderGraphics","setObjectRenderer","graphics","compositeOperation","blendModes","globalCompositeOperation","w0","w1","h0","h1","x3","y3","x4","y4","containsPoint","contains","padding","_webgl","../display/Container","../renderers/canvas/utils/CanvasBuffer","../renderers/canvas/utils/CanvasGraphics","../textures/Texture","./GraphicsData",42,"_lineTint","_fillTint",43,"GraphicsRenderer","ObjectRenderer","graphicsDataPool","primitiveShader","complexPrimitiveShader","maximumSimplePolySize","WebGLGraphicsData","PrimitiveShader","buildLine","buildPoly","buildComplexPoly","buildRectangle","buildRoundedRectangle","buildCircle","onContextChange","webGLData","updateGraphics","webGL","blendModeManager","setBlendMode","mode","bindShader","translationMatrix","toArray","hex2rgb","aVertexPosition","aColor","indices","drawCount","lastIndex","switchMode","canDrawUsingSimple","../../const","../../math","../../renderers/webgl/WebGLRenderer","../../renderers/webgl/utils/ObjectRenderer","../../utils","./WebGLGraphicsData","./shaders/PrimitiveShader","./utils/buildCircle","./utils/buildComplexPoly","./utils/buildLine","./utils/buildPoly","./utils/buildRectangle","./utils/buildRoundedRectangle",44,"glPoints","glIndices","Uint16Array","deleteBuffer",45,46,"circleData","totalSegs","seg","verts","vecPos","tempPoints","../../../utils","./buildLine",47,48,"firstPoint","lastPoint","midPointX","midPointY","p1x","p1y","p2x","p2y","p3x","p3y","perpx","perpy","perp2x","perp2y","perp3x","perp3y","c1","c2","denom","pdist","dist","indexCount","indexStart","../../../math",49,"vertPos",50,"rectData",51,"rrectData","recPoints","quadraticBezierCurve","getPt","n1","n2","perc","diff","xb","yb",52,"ticker","Sprite","ParticleContainer","SpriteRenderer","ParticleRenderer","Text","BaseTexture","VideoBaseTexture","TextureUvs","WebGLManager","ShaderManager","RenderTarget","AbstractFilter","FXAAFilter","SpriteMaskFilter","glCore","autoDetectRenderer","noWebGL","isWebGLSupported","./const","./display/Container","./display/DisplayObject","./graphics/Graphics","./graphics/GraphicsData","./graphics/webgl/GraphicsRenderer","./math","./particles/ParticleContainer","./particles/webgl/ParticleRenderer","./renderers/canvas/CanvasRenderer","./renderers/canvas/utils/CanvasBuffer","./renderers/canvas/utils/CanvasGraphics","./renderers/webgl/WebGLRenderer","./renderers/webgl/filters/AbstractFilter","./renderers/webgl/filters/FXAAFilter","./renderers/webgl/filters/SpriteMaskFilter","./renderers/webgl/managers/ShaderManager","./renderers/webgl/managers/WebGLManager","./renderers/webgl/shaders/Shader","./renderers/webgl/utils/ObjectRenderer","./renderers/webgl/utils/RenderTarget","./sprites/Sprite","./sprites/webgl/SpriteRenderer","./text/Text","./textures/BaseTexture","./textures/RenderTexture","./textures/Texture","./textures/TextureUvs","./textures/VideoBaseTexture","./ticker","./utils",53,"fromArray","transpose","newPos","rotate","tx1","append","d1","sr","cr","nsx","prepend","invert","copy","TEMP_MATRIX","./Point",54,55,"./Matrix","./shapes/Circle","./shapes/Ellipse","./shapes/Polygon","./shapes/Rectangle","./shapes/RoundedRectangle",56,"dx","dy","r2","./Rectangle",57,"normx","normy",58,"points_","il","xi","yi","xj","yj","intersect","../Point",59,60,61,"maxSize","properties","batchSize","maxBatchSize","_properties","_maxSize","_batchSize","_buffers","_bufferToUpdate","interactiveChildren","setProperties","uvs","particle","smallestChildIndex","bufferIndex","isRotated","positionX","positionY","finalWidth","finalHeight","globalAlpha","frame","anchor","childTransform","drawImage",62,"ParticleBuffer","dynamicPropertyFlags","vertSize","vertByteSize","dynamicProperties","staticProperties","property","staticStride","staticBuffer","staticData","dynamicStride","dynamicBuffer","dynamicData","initBuffers","dynamicOffset","DYNAMIC_DRAW","staticOffset","uploadDynamic","amount","uploadFunction","uploadStatic",63,"numIndices","tempMatrix","ParticleShader","shaderManager","uploadVertices","aPositionCoord","uploadPosition","aRotation","uploadRotation","aTextureCoord","uploadUvs","uploadAlpha","setShader","totalChildren","generateBuffers","currentRenderTarget","projectionMatrix","uniformMatrix3fv","_location","uniform1f","uAlpha","_texture","_glTextures","updateTexture","buffers","sprite","crop","_frame","spritePosition","spriteRotation","textureUvs","_uvs","x0","y0","spriteAlpha","./ParticleBuffer","./ParticleShader",64,"TextureShader","../../renderers/webgl/shaders/TextureShader",65,"SystemRenderer","system","sayHello","_backgroundColor","_backgroundColorRgba","_backgroundColorString","hex2string","removeView",66,"refresh","CanvasMaskManager","smoothProperty","imageSmoothingEnabled","webkitImageSmoothingEnabled","mozImageSmoothingEnabled","oImageSmoothingEnabled","msImageSmoothingEnabled","initPlugins","_mapBlendModes","pluginTarget","mixin","cacheParent","screencanvas","fillStyle","clearRect","fillRect","renderDisplayObject","destroyPlugins","tempContext","canUseNewCanvasBlendModes","../SystemRenderer","./utils/CanvasMaskManager",67,68,"updateGraphicsTint","beginPath","closePath","strokeStyle","stroke","strokeRect","kappa","ox","oy","xe","ye","xm","ym","rx","ry","maxRadius","renderGraphicsMask","tintR","tintG","tintB","../../../const",69,"maskData","save","cacheAlpha","clip","restore","./CanvasGraphics",70,"CanvasTinter","getTintedTexture","roundColor","stringColor","tintCache","tintMethod","convertTintToImage","tintImage","toDataURL","tintWithMultiply","tintWithOverlay","tintWithPerPixel","rgbValues","pixelData","getImageData","pixels","putImageData","step","cacheStepsPerColorChannel","rgb2hex","canUseMultiply",71,"TextureManager","_managedTextures","glTextures","getTexture","hasLoaded","glTexture","uid","destroyTexture","_skipRemove","removeAll",72,"handleContextLost","handleContextRestored","_contextOptions","premultipliedAlpha","MaskManager","stencilManager","StencilManager","FilterManager","BlendModeManager","_initContext","mapWebGLBlendModesToPixi","drawModes","mapWebGLDrawModesToPixi","_activeShader","_activeRenderTarget","_activeTextureLocation","_activeTexture","textureManager","disable","DEPTH_TEST","CULL_FACE","enable","BLEND","rootRenderTarget","bindRenderTarget","isContextLost","renderTarget","setFilterStack","filterStack","objectRenderer","setMaskStack","stencilMaskStack","preventDefault","destroyAll","./TextureManager","./filters/FXAAFilter","./managers/BlendModeManager","./managers/FilterManager","./managers/MaskManager","./managers/ShaderManager","./managers/StencilManager","./utils/ObjectRenderer","./utils/RenderTarget","./utils/mapWebGLBlendModesToPixi","./utils/mapWebGLDrawModesToPixi",73,"shaders","DefaultShader","defaultVertexSrc","defaultFragmentSrc","getShader","applyFilter","syncUniform","../shaders/TextureShader",74,"./AbstractFilter",75,"maskMatrix","otherMatrix","maskSprite","calculateMappedMatrix",76,"currentBlendMode","blendFunc","./WebGLManager",77,"texturePool","textureSize","currentFrame","Quad","quad","capFilterArea","getRenderTarget","setRenderTarget","filterData","previousFilterData","vertexBuffer","defaultShader","dimensions","vertices","returnRenderTarget","flipTexture","flopTexture","temp","inputTarget","outputTarget","syncUniforms","outputMatrix","mappedMatrix","ratio","translateScaleX","translateScaleY","offsetY","../utils/Quad","../utils/RenderTarget",78,"stencilStack","alphaMaskPool","AlphaMaskFilter","pushSpriteMask","pushStencilMask","popSpriteMask","popStencilMask","alphaMaskFilter","../filters/SpriteMaskFilter",79,"maxAttibs","stack","_currentId","currentShader","ComplexPrimitiveShader","setAttribs","../shaders/ComplexPrimitiveShader","../shaders/PrimitiveShader",80,"WebGLMaskManager","STENCIL_TEST","pushStencil","attachStencilBuffer","sms","bindGraphics","STENCIL_BUFFER_BIT","level","colorMask","stencilFunc","ALWAYS","stencilOp","KEEP","INVERT","EQUAL","DECR","INCR","popStencil",81,82,"./Shader",83,84,"textureCount","init","compile","cacheUniformLocations","cacheAttributeLocations","_glCompile","uniform1i","uniform2f","uniform3f","uniform4f","uniform1iv","uniform2iv","uniform3iv","uniform4iv","uniform1fv","uniform2fv","uniform3fv","uniform4fv","uniformMatrix2fv","uniformMatrix4fv","_array","initSampler2D","textureData","luminance","LUMINANCE","wrapS","wrapT",85,"customUniforms","customAttributes","uSampler",86,87,"../managers/WebGLManager",88,"colors","rect2",89,"StencilMaskStack","frameBuffer","stencilBuffer","projectionFrame","calculateProjection","viewport","pm","./StencilMaskStack",90,91,"ONE","ONE_MINUS_SRC_ALPHA","SRC_ALPHA","DST_ALPHA","DST_COLOR",92,93,"cachedTint","textureDirty","vertexDirty","vertexData","sign","_onTextureUpdate","caclulateVertices","valid","smoothingEnabled","tintedTexture","destroyBaseTexture","fromFrame","frameId","TextureCache","fromImage","imageId","crossorigin","../renderers/canvas/utils/CanvasTinter",94,"numVerts","positions","Uint32Array","createIndicesForQuads","groupCount","groups","textures","ids","blend","currentGroup","currentTexture","generateMultiTextureShader","MAX_TEXTUES","MAX_TEXTURE_IMAGE_UNITS","_shader","vao","aTextureId","nextTexture","_enabled","_id","uvs_uint32","currentBatchSize","subarray","group","sprites","../../renderers/webgl/shaders/_TextureShader","../../utils/createIndicesForQuads","./generateMultiTextureShader",95,"maxTextures","generateSampleSrc","fragTemplate","sampleValues","uSamplers",96,"_text","_style","fontPropertiesCache","fontPropertiesCanvas","fontPropertiesContext","updateText","dropShadowColor","font","align","strokeThickness","wordWrap","wordWrapWidth","dropShadow","dropShadowAngle","dropShadowDistance","dropShadowBlur","textBaseline","lineJoin","miterLimit","outputText","lines","lineWidths","maxLineWidth","fontProperties","determineFontProperties","measureText","lineHeight","fontSize","linePositionX","linePositionY","shadowColor","shadowBlur","xShadowOffset","yShadowOffset","ascent","fillText","strokeText","fontStyle","baseline","imagedata","line","descent","spaceLeft","words","wordWidth","wordWidthWithSpace","../sprites/Sprite",97,"realWidth","realHeight","isLoading","imageUrl","isPowerOfTwo","_active","loadSource","naturalWidth","naturalHeight","wasLoading","_sourceLoaded","scope","BaseTextureCache","_pixiId","dispose","updateSourceImage","newSrc","image","getResolutionOfUrl",98,"textureBuffer","_updateUvs","updateBase","currentBounds","cachedWt","realResolution","getImage","getBase64","getCanvas","webGLPixels","Uint8Array","readPixels","tempCanvas","canvasData","getPixels","getPixel","../renderers/webgl/managers/FilterManager","../renderers/webgl/utils/RenderTarget","./BaseTexture","./Texture",99,"noFrame","requiresUpdate","onBaseTextureUpdated","onBaseTextureLoaded","destroyBase","fromVideo","video","fromVideoUrl","videoUrl","fromUrl","addTextureToCache","removeTextureFromCache","./TextureUvs","./VideoBaseTexture",100,"xy0_uint32","xy1_uint32","xy2_uint32","xy3_uint32","baseFrame","tw","th",101,"readyState","HAVE_ENOUGH_DATA","HAVE_FUTURE_DATA","autoUpdate","_onUpdate","_onCanPlay","_onPlayStart","_onPlayStop","__loaded","createSource","requestAnimationFrame","videoWidth","videoHeight","play","videoSrc","fromUrls",102,"Ticker","_this","_tick","time","_requestId","_emitter","TICK","_maxElapsedMS","autoStart","deltaTime","elapsedMS","lastTime","speed","FPS","minFPS","fps","minFPMS","_requestIfNeeded","performance","now","_cancelIfNeeded","cancelAnimationFrame","_startIfPossible","addOnce","remove","currentTime",103,"shared","./Ticker",104,"totalIndices",105,"_uid","_saidHello","hex","rgb","pngHead","pngEnd","magenta","yellow","getNextPowerOfTwo","number","parseFloat","userAgent","contextOptions","WebGLRenderingContext","getContextAttributes","startIdx","removeCount","./pluginTarget",106,"__plugins","pluginName","ctor",107,"mesh","extras","SpriteBatch","ReferenceError","AssetLoader","Stage","DisplayObjectContainer","Strip","Mesh","Rope","MovieClip","TilingSprite","BitmapText","scaleModes","setTexture","setText","setStyle","setFrame","uuid","./core","./extras","./filters","./mesh",108,"textWidth","textHeight","_glyphs","_font","maxWidth","maxLineHeight","fonts","prevCharCode","chars","lastLineWidth","lastSpace","charCode","charData","kerning","xOffset","yOffset","xAdvance","lineAlignOffsets","alignOffset","lenChars","validate",109,"_textures","_durations","animationSpeed","loop","_currentTime","playing","totalFrames","gotoAndStop","frameNumber","gotoAndPlay","elapsed","lag","fromFrames","frames","fromImages","images",110,"tileScale","tilePosition","_canvasPattern","uFrame","uTransform","uPixelSize","tempUvs","tempWidth","tempHeight","modX","modY","createPattern","_tileScaleOffset","../core/renderers/canvas/utils/CanvasTinter",111,"_cacheAsBitmap","_originalRenderWebGL","_originalRenderCanvas","_originalUpdateTransform","_originalHitTest","_originalDestroy","_cachedSprite","cacheAsBitmap","_originalGetBounds","_originalContainsPoint","_renderCachedWebGL","_renderCachedCanvas","_cacheAsBitmapDestroy","_destroyCachedDisplayObject","_initCachedDisplayObject","cachedRenderTarget","_getCachedBounds","_initCachedDisplayObjectCanvas",112,"getChildByName",113,"getGlobalPosition",114,"./BitmapText","./MovieClip","./TilingSprite","./cacheAsBitmap","./getChildByName","./getGlobalPosition",115,"AsciiFilter","pixelSize","../../core",116,"BloomFilter","blurXFilter","BlurXFilter","blurYFilter","BlurYFilter","defaultFilter","blur","blurX","blurY","../blur/BlurXFilter","../blur/BlurYFilter",117,"BlurDirFilter","dirX","dirY","strength","passes",118,"BlurFilter","./BlurXFilter","./BlurYFilter",119,"flip","flop",120,121,"SmartBlurFilter",122,"ColorMatrixFilter","_loadMatrix","multiply","newMatrix","_multiply","_colorMatrix","brightness","greyscale","grayscale","blackAndWhite","hue","lumR","lumG","lumB","contrast","saturate","desaturate","negative","sepia","technicolor","polaroid","toBGR","kodachrome","browni","vintage","colorTone","desaturation","toned","lightColor","darkColor","lR","lG","lB","dR","dG","dB","night","intensity","predator","lsd",123,"ColorStepFilter",124,"ConvolutionFilter","texelSize",125,"CrossHatchFilter",126,"DisplacementFilter","mapSampler",127,"DotScreenFilter",128,"BlurYTintFilter",129,"DropShadowFilter","blurYTintFilter","_dirtyPosition","_angle","_distance","hideObject","distance","./BlurYTintFilter",130,"GrayFilter","gray",131,"InvertFilter","NoiseFilter","PixelateFilter","RGBSplitFilter","ShockwaveFilter","SepiaFilter","TiltShiftFilter","TiltShiftXFilter","TiltShiftYFilter","TwistFilter","./ascii/AsciiFilter","./bloom/BloomFilter","./blur/BlurDirFilter","./blur/BlurFilter","./blur/BlurXFilter","./blur/BlurYFilter","./blur/SmartBlurFilter","./color/ColorMatrixFilter","./color/ColorStepFilter","./convolution/ConvolutionFilter","./crosshatch/CrossHatchFilter","./displacement/DisplacementFilter","./dot/DotScreenFilter","./dropshadow/DropShadowFilter","./gray/GrayFilter","./invert/InvertFilter","./noise/NoiseFilter","./pixelate/PixelateFilter","./rgb/RGBSplitFilter","./sepia/SepiaFilter","./shockwave/ShockwaveFilter","./tiltshift/TiltShiftFilter","./tiltshift/TiltShiftXFilter","./tiltshift/TiltShiftYFilter","./twist/TwistFilter",132,133,"noise",134,135,"red","green","blue",136,137,"center","params",138,"TiltShiftAxisFilter","gradientBlur","innerHeight","texSize","innerWidth","updateDelta",139,"tiltShiftXFilter","tiltShiftYFilter","./TiltShiftXFilter","./TiltShiftYFilter",140,"./TiltShiftAxisFilter",141,142,143,"loaders","accessibility","loader","./accessibility","./deprecation","./interaction","./loaders","./polyfill",144,"InteractionData","originalEvent","getLocalPosition","globalPos",145,"InteractionManager","autoPreventDefault","interactionFrequency","mouse","stopped","stopPropagation","interactiveDataPool","interactionDOMElement","eventsAdded","onMouseUp","processMouseUp","onMouseDown","processMouseDown","onMouseMove","processMouseMove","onMouseOut","processMouseOverOut","onTouchStart","processTouchStart","onTouchEnd","processTouchEnd","onTouchMove","processTouchMove","currentCursorStyle","_tempPoint","setTargetElement","element","removeEvents","addEvents","msPointerEnabled","_deltaTime","didMove","cursor","processInteractive","eventString","mapPositionToPoint","hitTest","hit","interactiveParent","clientX","clientY","isRightButton","button","which","isDown","_over","buttonMode","defaultCursor","changedTouches","cLength","touchEvent","touchData","getTouchData","returnTouchData","_touchDown","identifier","globalX","globalY","./InteractionData","./interactiveTarget",146,"interactiveTarget","./InteractionManager",147,148,"info","getElementsByTagName","common","getAttribute","letters","textureRect","kernings","first","second","bitmapFont","xmlUrl","textureUrl","loadOptions","imageMetadata","../extras",149,"bitmapFontParser","spritesheetParser","textureParser","./bitmapFontParser","./loader","./spritesheetParser","./textureParser",150,"ResourceLoader","_pixiMiddleware","addPixiMiddleware",151,"route","meta","rotated","trimmed","spriteSourceSize","sourceSize",152,153,"drawMode","canvasPadding","TRIANGLE_MESH","tempPolygon","_renderCanvasTriangleMesh","_renderCanvasTriangles","_renderCanvasDrawTriangle","index0","textureSource","textureWidth","textureHeight","u0","u1","u2","v0","v1","v2","paddingX","paddingY","centerX","centerY","normX","normY","deltaA","deltaB","deltaC","deltaD","deltaE","deltaF","renderMeshFlat","updateFrame","rawX","rawY","ind0","ind1","ind2",154,"Plane","segmentsX","segmentsY","_ready","segmentsXSub","segmentsYSub","sizeX","sizeY","totalSub","xpos","ypos","value2","value3","value4","./Mesh",155,"factor","nextPoint","perpLength","num","perpX","perpY",156,"MeshRenderer","MeshShader","./Plane","./Rope","./webgl/MeshRenderer","./webgl/MeshShader",157,"_vertexBuffer","_initWebGL","meshShader","_uvBuffer","_indexBuffer","_colorBuffer","../Mesh",158,159,"isNaN",160,161,"./Math.sign","./Object.assign","./requestAnimationFrame",162,"Date","getTime","startTime","vendors","delay"],"mappings":"CAAA,SAAAA,GAAA,GAAA,gBAAAC,UAAA,mBAAAC,QAAAA,OAAAD,QAAAD,QAAA,IAAA,kBAAAG,SAAAA,OAAAC,IAAAD,UAAAH,OAAA,CAAA,GAAAK,EAAAA,GAAA,mBAAAC,QAAAA,OAAA,mBAAAC,QAAAA,OAAA,mBAAAC,MAAAA,KAAAC,KAAAJ,EAAAK,KAAAV,MAAA,WAAA,GAAAG,EAAA,OAAA,SAAAQ,GAAAC,EAAAC,EAAAC,GAAA,QAAAC,GAAAC,EAAAC,GAAA,IAAAJ,EAAAG,GAAA,CAAA,IAAAJ,EAAAI,GAAA,CAAA,GAAAE,GAAA,kBAAAC,UAAAA,OAAA,KAAAF,GAAAC,EAAA,MAAAA,GAAAF,GAAA,EAAA,IAAAI,EAAA,MAAAA,GAAAJ,GAAA,EAAA,IAAAhB,GAAA,GAAAqB,OAAA,uBAAAL,EAAA,IAAA,MAAAhB,GAAAsB,KAAA,mBAAAtB,EAAA,GAAAuB,GAAAV,EAAAG,IAAAf,WAAAW,GAAAI,GAAA,GAAAQ,KAAAD,EAAAtB,QAAA,SAAAU,GAAA,GAAAE,GAAAD,EAAAI,GAAA,GAAAL,EAAA,OAAAI,GAAAF,EAAAA,EAAAF,IAAAY,EAAAA,EAAAtB,QAAAU,EAAAC,EAAAC,EAAAC,GAAA,MAAAD,GAAAG,GAAAf,QAAA,IAAA,GAAAmB,GAAA,kBAAAD,UAAAA,QAAAH,EAAA,EAAAA,EAAAF,EAAAW,OAAAT,IAAAD,EAAAD,EAAAE,GAAA,OAAAD,KAAAW,GAAA,SAAAP,EAAAjB,EAAAD,GAGAC,EAAAD,SAEA0B,cAAAR,EAAA,uBACAS,sBAAAT,EAAA,+BAEAU,SAAAV,EAAA,kBACAW,cAAAX,EAAA,uBACAY,SAAAZ,EAAA,kBACAa,UAAAb,EAAA,mBAEAc,kBAAAd,EAAA,8BAGAe,iBAAA,EAAAC,sBAAA,EAAAC,iBAAA,EAAAC,kBAAA,EAAAC,0BAAA,EAAAC,sBAAA,EAAAC,8BAAA,IAAAC,GAAA,SAAAtB,EAAAjB,EAAAD,GAUA,GAAAyC,GAAA,GAAAC,aAAA,GAEAC,EAAA,SAAAC,EAAAC,EAAAC,EAAAC,GAEAvC,KAAAoC,GAAAA,EAEApC,KAAAwC,OAAAJ,EAAAK,eACAzC,KAAAqC,KAAAA,GAAAD,EAAAM,aACA1C,KAAAuC,SAAAA,GAAAH,EAAAO,YACA3C,KAAAsC,KAAAL,EAEAK,GAEAtC,KAAA4C,OAAAN,GAIAH,GAAAU,UAAAD,OAAA,SAAAN,EAAAQ,EAAAC,GAIA/C,KAAAgD,MAEA,IAAAZ,GAAApC,KAAAoC,EAEAE,GAAAA,GAAAtC,KAAAsC,KACAQ,EAAAA,GAAA,EAEA9C,KAAAsC,KAAAW,YAAAX,EAAAW,WAEAb,EAAAc,cAAAlD,KAAAqC,KAAAS,EAAAR,GAIAF,EAAAe,WAAAnD,KAAAqC,KAAAC,EAAAtC,KAAAuC,UAGAvC,KAAAsC,KAAAA,GAGAH,EAAAU,UAAAG,KAAA,WAEA,GAAAZ,GAAApC,KAAAoC,EACAA,GAAAgB,WAAApD,KAAAqC,KAAArC,KAAAwC,SAGAL,EAAAkB,mBAAA,SAAAjB,EAAAE,EAAAC,GAEA,MAAA,IAAAJ,GAAAC,EAAAA,EAAAM,aAAAJ,EAAAC,IAGAJ,EAAAmB,kBAAA,SAAAlB,EAAAE,EAAAC,GAEA,MAAA,IAAAJ,GAAAC,EAAAA,EAAAmB,qBAAAjB,EAAAC,IAGAJ,EAAAqB,OAAA,SAAApB,EAAAC,EAAAC,EAAAC,GAEA,MAAA,IAAAJ,GAAAC,EAAAC,EAAAE,IAKA9C,EAAAD,QAAA2C,OAGAsB,GAAA,SAAA/C,EAAAjB,EAAAD,GAEA,GAAAkE,GAAAhD,EAAA,eAUAiD,EAAA,SAAAvB,EAAAwB,EAAAC,GAEA7D,KAAAoC,GAAAA,EAEApC,KAAA8D,YAAA1B,EAAA2B,oBAEA/D,KAAAgE,QAAA,KACAhE,KAAAiE,QAAA,KAEAjE,KAAA4D,MAAAA,GAAA,IACA5D,KAAA6D,OAAAA,GAAA,IAGAF,GAAAd,UAAAqB,cAAA,SAAAD,GAEA,GAAA7B,GAAApC,KAAAoC,EAEApC,MAAAiE,QAAAA,GAAA,GAAAP,GAAAtB,GAEApC,KAAAiE,QAAAjB,OAIAhD,KAAAgD,OAEAZ,EAAA+B,qBAAA/B,EAAAgC,YAAAhC,EAAAiC,kBAAAjC,EAAAkC,WAAAtE,KAAAiE,QAAAA,QAAA,IAGAN,EAAAd,UAAA0B,cAAA,WAEA,IAAAvE,KAAAgE,QAAA,CAEA,GAAA5B,GAAApC,KAAAoC,EAEApC,MAAAgE,QAAA5B,EAAAoC,qBAEApC,EAAAqC,iBAAArC,EAAAsC,aAAA1E,KAAAgE,SAGA5B,EAAAuC,wBAAAvC,EAAAgC,YAAAhC,EAAAwC,yBAAAxC,EAAAsC,aAAA1E,KAAAgE,SACA5B,EAAAyC,oBAAAzC,EAAAsC,aAAAtC,EAAA0C,cAAA9E,KAAA4D,MAAA5D,KAAA6D,UAGAF,EAAAd,UAAAkC,MAAA,SAAA1E,EAAAT,EAAAoF,EAAAvE,GAEAT,KAAAgD,MAEA,IAAAZ,GAAApC,KAAAoC,EAEAA,GAAA6C,WAAA5E,EAAAT,EAAAoF,EAAAvE,GACA2B,EAAA2C,MAAA3C,EAAA8C,mBAGAvB,EAAAd,UAAAG,KAAA,WAEA,GAAAZ,GAAApC,KAAAoC,EACAA,GAAA+C,gBAAA/C,EAAAgC,YAAApE,KAAA8D,cAGAH,EAAAd,UAAAuC,OAAA,WAEAhD,GAAA+C,gBAAA/C,GAAAgC,YAAA,OAGAT,EAAAd,UAAAwC,OAAA,SAAAzB,EAAAC,GAEA,GAAAzB,GAAApC,KAAAoC,EAEApC,MAAA4D,MAAAA,EACA5D,KAAA6D,OAAAA,EAEA7D,KAAAiE,SAEAjE,KAAAiE,QAAAqB,WAAA,KAAA1B,EAAAC,GAGA7D,KAAAgE,UAGA5B,EAAAqC,iBAAArC,EAAAsC,aAAA1E,KAAAgE,SACA5B,EAAAyC,oBAAAzC,EAAAsC,aAAAtC,EAAA0C,cAAAlB,EAAAC,KAIAF,EAAAd,UAAA0C,QAAA,WAEA,GAAAnD,GAAApC,KAAAoC,EAEAA,GAAAoD,kBAAAxF,KAAA8D,cAGAH,EAAA8B,WAAA,SAAArD,EAAAwB,EAAAC,EAAAvB,GAEA,GAAA2B,GAAAP,EAAAgC,SAAAtD,EAAA,KAAAwB,EAAAC,EACAI,GAAA0B,uBACA1B,EAAA2B,iBAGA,IAAAC,GAAA,GAAAlC,GAAAvB,EAAAwB,EAAAC,EAGA,OAFAgC,GAAA3B,cAAAD,GAEA4B,GAGAlC,EAAAmC,cAAA,SAAA1D,EAAAwB,EAAAC,EAAAvB,GAGA,GAAA2B,GAAA,GAAAP,GAAAgC,SAAAtD,EAAAE,EAAAsB,EAAAC,EACAI,GAAA0B,uBACA1B,EAAA2B,iBAGA,IAAAC,GAAA,GAAAlC,GAAAvB,EAAAwB,EAAAC,EAGA,OAFAgC,GAAA3B,cAAAD,GAEA4B,GAGApG,EAAAD,QAAAmE,IAGAoC,cAAA,IAAAC,GAAA,SAAAtF,EAAAjB,EAAAD,GAEA,GAAAyG,GAAAvF,EAAA,2BACAwF,EAAAxF,EAAA,8BACAyF,EAAAzF,EAAA,4BACA0F,EAAA1F,EAAA,wCASA2F,EAAA,SAAAjE,EAAAkE,EAAAC,GAEAvG,KAAAoC,GAAAA,EAGApC,KAAAwG,QAAAP,EAAA7D,EAAAkE,EAAAC,GAGAvG,KAAAyG,WAAAP,EAAA9D,EAAApC,KAAAwG,QAEA,IAAAE,GAAAP,EAAA/D,EAAApC,KAAAwG,QAEAxG,MAAA2G,SAAAP,EAAAhE,EAAAsE,GAGAL,GAAAxD,UAAAG,KAAA,WAEAhD,KAAAoC,GAAAwE,WAAA5G,KAAAwG,UAGAH,EAAAxD,UAAA0C,QAAA,WAEAvF,KAAAoC,IAGA3C,EAAAD,QAAA6G,IAGAQ,0BAAA,EAAAC,6BAAA,GAAAC,2BAAA,GAAAC,uCAAA,KAAAC,GAAA,SAAAvG,EAAAjB,EAAAD,GAaA,GAAAkE,GAAA,SAAAtB,EAAAwB,EAAAC,EAAAqD,EAAA7E,GAEArC,KAAAoC,GAAAA,EAEApC,KAAAiE,QAAA7B,EAAA+E,gBAGAnH,KAAAoH,QAAA,EAEApH,KAAAqH,kBAAA,EAEArH,KAAA4D,MAAAA,GAAA,EACA5D,KAAA6D,OAAAA,GAAA,EAEA7D,KAAAkH,OAAAA,GAAA9E,EAAAkF,KACAtH,KAAAqC,KAAAA,GAAAD,EAAAmF,cAQA7D,GAAAb,UAAAD,OAAA,SAAA4E,GAEAxH,KAAAgD,MAEA,IAAAZ,GAAApC,KAAAoC,EAEApC,MAAA4D,MAAA4D,EAAA5D,MACA5D,KAAA6D,OAAA2D,EAAA3D,OAEAzB,EAAAqF,YAAArF,EAAAsF,+BAAA1H,KAAAqH,kBACAjF,EAAAuF,WAAAvF,EAAAkC,WAAA,EAAAtE,KAAAkH,OAAAlH,KAAAkH,OAAAlH,KAAAqC,KAAAmF,GAGA,IAAAI,IAAA,CAEAlE,GAAAb,UAAAyC,WAAA,SAAAhD,EAAAsB,EAAAC,GAOA,GALA7D,KAAAgD,OAEAhD,KAAA4D,MAAAA,GAAA5D,KAAA4D,MACA5D,KAAA6D,OAAAA,GAAA7D,KAAA6D,OAEAvB,YAAAuF,cACA,CACA,IAAAD,EACA,CACA,GAAAE,GAAA1F,GAAA2F,aAAA,oBAEA,KAAAD,EAMA,KAAA,IAAAlH,OAAA,wCAJAgH,IAAA,EAQA5H,KAAAqC,KAAAD,GAAA4F,UAKAhI,MAAAqC,KAAAD,GAAAmF,aAIAnF,IAAAqF,YAAArF,GAAAsF,+BAAA1H,KAAAqH,kBACAjF,GAAAuF,WAAAvF,GAAAkC,WAAA,EAAAtE,KAAAkH,OAAAlH,KAAA4D,MAAA5D,KAAA6D,OAAA,EAAA7D,KAAAkH,OAAAlH,KAAAqC,KAAAC,GAAA,OAIAoB,EAAAb,UAAAG,KAAA,SAAAiF,GAEA,GAAA7F,GAAApC,KAAAoC,EAEA8F,UAAAD,GAEA7F,EAAA+F,cAAA/F,EAAAgG,SAAAH,GAGA7F,EAAAiG,YAAAjG,EAAAkC,WAAAtE,KAAAiE,UAGAP,EAAAb,UAAAuC,OAAA,WAEA,GAAAhD,GAAApC,KAAAoC,EACAA,GAAAiG,YAAAjG,EAAAkC,WAAA,OAGAZ,EAAAb,UAAAyF,UAAA,SAAAC,GAEA,GAAAnG,GAAApC,KAAAoC,EAEApC,MAAAgD,OAEAhD,KAAAoH,OAEAhF,EAAAoG,cAAApG,EAAAkC,WAAAlC,EAAAqG,mBAAAF,EAAAnG,EAAAsG,qBAAAtG,EAAAuG,wBAIAvG,EAAAoG,cAAApG,EAAAkC,WAAAlC,EAAAqG,mBAAAF,EAAAnG,EAAAwG,OAAAxG,EAAAyG,UAIAnF,EAAAb,UAAAiG,UAAA,SAAAP,GAEA,GAAAnG,GAAApC,KAAAoC,EAEApC,MAAAgD,OAEAZ,EAAAoG,cAAApG,EAAAkC,WAAAlC,EAAA2G,mBAAAR,EAAAnG,EAAAwG,OAAAxG,EAAAyG,UAGAnF,EAAAb,UAAAmG,aAAA,WAEAhJ,KAAAgD,OAEAhD,KAAAoH,QAAA,EACAhF,GAAA6G,eAAA7G,GAAAkC,aAGAZ,EAAAb,UAAAqG,oBAAA,WAEAlJ,KAAAsI,WAAA,GACAtI,KAAA8I,WAAA,IAGApF,EAAAb,UAAA8C,qBAAA,WAEA3F,KAAAsI,WAAA,GACAtI,KAAA8I,WAAA,IAGApF,EAAAb,UAAA+C,gBAAA,WAEA,GAAAxD,GAAApC,KAAAoC,EAEApC,MAAAgD,OAEAZ,EAAAoG,cAAApG,EAAAkC,WAAAlC,EAAA+G,eAAA/G,EAAAgH,eACAhH,EAAAoG,cAAApG,EAAAkC,WAAAlC,EAAAiH,eAAAjH,EAAAgH,gBAGA1F,EAAAb,UAAAyG,iBAAA,WAEA,GAAAlH,GAAApC,KAAAoC,EAEApC,MAAAgD,OAEAZ,EAAAoG,cAAApG,EAAAkC,WAAAlC,EAAA+G,eAAA/G,EAAAmH,QACAnH,EAAAoG,cAAApG,EAAAkC,WAAAlC,EAAAiH,eAAAjH,EAAAmH,SAGA7F,EAAAb,UAAA0C,QAAA,WAEA,GAAAnD,GAAApC,KAAAoC,EAEAA,GAAAoH,cAAAxJ,KAAAiE,UAIAP,EAAA+F,WAAA,SAAArH,EAAAoF,EAAAH,GAEA,GAAApD,GAAA,GAAAP,GAAAtB,EAIA,OAHA6B,GAAAoD,iBAAAA,IAAA,EACApD,EAAArB,OAAA4E,GAEAvD,GAGAP,EAAAgC,SAAA,SAAAtD,EAAAE,EAAAsB,EAAAC,GAGA,GAAAI,GAAA,GAAAP,GAAAtB,EAGA,OAFA6B,GAAAqB,WAAAhD,EAAAsB,EAAAC,GAEAI,GAIAxE,EAAAD,QAAAkE,OAGAgG,GAAA,SAAAhJ,EAAAjB,EAAAD,GAWA,QAAAgC,GAAAY,GAGApC,KAAA2J,mBACAvH,EAAA2F,aAAA,4BACA3F,EAAA2F,aAAA,gCACA3F,EAAA2F,aAAA,kCAKA/H,KAAA2J,qBAEA3J,KAAA4J,UAAA5J,KAAA2J,mBAAAE,wBAGA7J,KAAAoC,GAAAA,EAEApC,KAAAyG,cAEAzG,KAAA8J,YAAA,KAEA9J,KAAA+J,OAAA,EAKAvI,EAAAqB,UAAAmH,YAAAxI,EACA/B,EAAAD,QAAAgC,EAEAA,EAAAqB,UAAAG,KAAA,WAEAhD,KAAA4J,WAEA5J,KAAA2J,mBAAAM,mBAAAjK,KAAA4J,WAEA5J,KAAA+J,QAEA/J,KAAA+J,OAAA,EACA/J,KAAAkK,aAKAlK,KAAAkK,YAIA1I,EAAAqB,UAAAuC,OAAA,WAEApF,KAAA4J,WAEA5J,KAAA2J,mBAAAM,mBAAA,OAIAzI,EAAAqB,UAAAqH,SAAA,WAIA,IAAA,GAFA9H,GAAApC,KAAAoC,GAEAzB,EAAA,EAAAA,EAAAX,KAAAyG,WAAAzF,OAAAL,IACA,CACA,GAAAwJ,GAAAnK,KAAAyG,WAAA9F,EACAwJ,GAAA3H,OAAAQ,OAEAmH,EAAAC,UAAAC,QAAAF,EAAA9H,KAAA8H,EAAAG,WAAAH,EAAAI,OAAAJ,EAAAK,OAEApI,EAAAqI,wBAAAN,EAAAC,UAAAnC,UAGAjI,KAAA8J,YAAA9G,QAGAxB,EAAAqB,UAAA6H,aAAA,SAAAlI,EAAA4H,EAAA/H,EAAAiI,EAAAC,EAAAC,GAEAxK,KAAAyG,WAAAkE,MACAnI,OAAAA,EACA4H,UAAAA,EAEAnC,SAAAmC,EAAAnC,SACA5F,KAAAA,GAAArC,KAAAoC,GAAA4F,MACAsC,WAAAA,IAAA,EACAC,OAAAA,GAAA,EACAC,MAAAA,GAAA,IAGAxK,KAAA+J,OAAA,GAIAvI,EAAAqB,UAAA+H,SAAA,SAAApI,EAAAqI,GAEA7K,KAAA8J,YAAAtH,EAEAxC,KAAA+J,OAAA,GAGAvI,EAAAqB,UAAAiI,KAAA,SAAAzI,EAAA0I,EAAAP,GAEA,GAAApI,GAAApC,KAAAoC,EACAA,GAAA4I,aAAA3I,EAAA0I,EAAA3I,EAAA6I,eAAAT,SAIAU,GAAA,SAAAxK,EAAAjB,EAAAD,GAUA,GAAA2L,GAAA,EAEAjK,EAAA,SAAAkK,EAAAP,GAKA,GAHAzI,GAAAgJ,EAAAC,WAAA,QAAAR,IACAO,EAAAC,WAAA,qBAAAR,IAEAzI,GAGA,KAAA,IAAAxB,OAAA,qEAMA,OAFAwB,IAAAkJ,GAAAH,IAEA/I,GAGA3C,GAAAD,QAAA0B,OAGAqK,GAAA,SAAA7K,EAAAjB,EAAAD,GAOA,GAAAgM,MAGArK,EAAA,SAAAiB,EAAAqJ,GAGA,GAAAnJ,GAAAkJ,EAAApJ,EAAAkJ,GAEA,KAAAhJ,EACA,CACA,GAAAoJ,GAAAtJ,EAAAuJ,aAAAvJ,EAAAwJ,mBACAtJ,GAAAkJ,EAAApJ,EAAAkJ,KAAAO,gBAAA,GAAAC,OAAAJ,GACAK,YAAA,GAAAD,OAAAJ,IAGA,GAAA/K,GACAkL,EAAAvJ,EAAAuJ,gBACAE,EAAAzJ,EAAAyJ,WAEA,KAAApL,EAAA,EAAAA,EAAAkL,EAAA7K,OAAAL,IAEAkL,EAAAlL,IAAA,CAIA,KAAAA,IAAA8K,GAEAI,EAAAJ,EAAA9K,GAAAsH,WAAA,CAGA,KAAAtH,EAAA,EAAAA,EAAAoL,EAAA/K,OAAAL,IAEAoL,EAAApL,KAAAkL,EAAAlL,KAEAoL,EAAApL,GAAAkL,EAAAlL,GAEA2B,EAAAyJ,YAAApL,GAEAyB,EAAAqI,wBAAA9J,GAIAyB,EAAA4J,yBAAArL,IAMAlB,GAAAD,QAAA2B,OACA8K,GAAA,SAAAvL,EAAAjB,EAAAD,GAKAyG,eAAA,SAAA7D,EAAAkE,EAAAC,GAEA,GAAA2F,GAAAC,EAAA/J,EAAAA,EAAAgK,cAAA9F,GACA+F,EAAAF,EAAA/J,EAAAA,EAAAkK,gBAAA/F,GAEAC,EAAApE,EAAAmK,eA2BA,OAzBAnK,GAAAoK,aAAAhG,EAAA0F,GACA9J,EAAAoK,aAAAhG,EAAA6F,GACAjK,EAAAqK,YAAAjG,GAGApE,EAAAsK,oBAAAlG,EAAApE,EAAAuK,eAEAC,QAAAC,MAAA,+CACAD,QAAAC,MAAA,qBAAAzK,EAAAsK,oBAAAlG,EAAApE,EAAA0K,kBACAF,QAAAC,MAAA,gBAAAzK,EAAA2K,YAGA,KAAA3K,EAAA4K,kBAAAxG,IAEAoG,QAAAK,KAAA,0CAAA7K,EAAA4K,kBAAAxG,IAGApE,EAAA8K,cAAA1G,GACAA,EAAA,MAIApE,EAAA+K,aAAAjB,GACA9J,EAAA+K,aAAAd,GAEA7F,EAGA,IAAA2F,GAAA,SAAA/J,EAAAC,EAAA+K,GAEA,GAAAC,GAAAjL,EAAAkL,aAAAjL,EAKA,OAHAD,GAAAmL,aAAAF,EAAAD,GACAhL,EAAA+J,cAAAkB,GAEAjL,EAAAoL,mBAAAH,EAAAjL,EAAAqL,gBAMAJ,GAJAT,QAAAc,IAAAtL,EAAAuL,iBAAAN,IACA,MAMA5N,GAAAD,QAAAyG,oBAGA2H,IAAA,SAAAlN,EAAAjB,EAAAD,GAGA,GAAAqO,GAAA,SAAAxL,EAAA0I,GAEA,OAAA1I,GAEA,IAAA,QACA,MAAA,EAEA,KAAA,OACA,MAAA,IAAAwF,cAAA,EAAAkD,EAEA,KAAA,OACA,MAAA,IAAAlD,cAAA,EAAAkD,EAEA,KAAA,OACA,MAAA,IAAAlD,cAAA,EAAAkD,EAEA,KAAA,MACA,IAAA,YACA,MAAA,EAEA,KAAA,QACA,MAAA,IAAA+C,YAAA,EAAA/C,EAEA,KAAA,QACA,MAAA,IAAA+C,YAAA,EAAA/C,EAEA,KAAA,QACA,MAAA,IAAA+C,YAAA,EAAA/C,EAEA,KAAA,OACA,OAAA,CAEA,KAAA,QAEA,MAAAgD,GAAA,EAAAhD,EAEA,KAAA,QACA,MAAAgD,GAAA,EAAAhD,EAEA,KAAA,QACA,MAAAgD,GAAA,EAAAhD,EAEA,KAAA,OACA,MAAA,IAAAlD,eAAA,EAAA,EACA,EAAA,GAEA,KAAA,OACA,MAAA,IAAAA,eAAA,EAAA,EAAA,EACA,EAAA,EAAA,EACA,EAAA,EAAA,GAEA,KAAA,OACA,MAAA,IAAAA,eAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,MAIAkG,EAAA,SAAAhD,GAIA,IAAA,GAFAiD,GAAA,GAAAlC,OAAAf,GAEApK,EAAA,EAAAA,EAAAqN,EAAAhN,OAAAL,IAEAqN,EAAArN,IAAA,CAGA,OAAAqN,GAGAvO,GAAAD,QAAAqO,OAEAI,IAAA,SAAAvN,EAAAjB,EAAAD,GAEA,GAAA0O,GAAAxN,EAAA,aACAyN,EAAAzN,EAAA,aAEAwF,EAAA,SAAA9D,EAAAoE,GAMA,IAAA,GAJAC,MAEA2H,EAAAhM,EAAAsK,oBAAAlG,EAAApE,EAAAiM,mBAEA1N,EAAA,EAAAyN,EAAAzN,EAAAA,IACA,CACA,GAAA2N,GAAAlM,EAAAmM,gBAAA/H,EAAA7F,GACA0B,EAAA6L,EAAA9L,EAAAkM,EAAAjM,KAEAoE,GAAA6H,EAAAE,OACAnM,KAAAA,EACA0I,KAAAoD,EAAA9L,GACA4F,SAAA7F,EAAAqM,kBAAAjI,EAAA8H,EAAAE,MAEAnE,QAAA,SAAAhI,EAAAiI,EAAAC,EAAAC,GAGApI,EAAAsM,oBAAA1O,KAAAiI,SAAAjI,KAAA+K,KAAA1I,GAAAD,EAAA4F,MAAAsC,IAAA,EAAAC,GAAA,EAAAC,GAAA,KAMA,MAAA/D,GAGAhH,GAAAD,QAAA0G,IAGAyI,YAAA,GAAAC,YAAA,KAAAC,IAAA,SAAAnO,EAAAjB,EAAAD,GACA,GAAA0O,GAAAxN,EAAA,aACAmN,EAAAnN,EAAA,kBAGAyF,EAAA,SAAA/D,EAAAoE,GAMA,IAAA,GAJAG,MAEAmI,EAAA1M,EAAAsK,oBAAAlG,EAAApE,EAAA2M,iBAEApO,EAAA,EAAAmO,EAAAnO,EAAAA,IACA,CACA,GAAA+F,GAAAtE,EAAA4M,iBAAAxI,EAAA7F,GACA6N,EAAA9H,EAAA8H,KAAAS,QAAA,UAAA,IACA5M,EAAA6L,EAAA9L,EAAAsE,EAAArE,KAEAsE,GAAA6H,IACAnM,KAAAA,EACA0I,KAAArE,EAAAqE,KACA9C,SAAA7F,EAAA8M,mBAAA1I,EAAAgI,GACAW,MAAAtB,EAAAxL,EAAAqE,EAAAqE,OAIA,MAAApE,GAGAlH,GAAAD,QAAA2G,IAGAiJ,iBAAA,GAAAR,YAAA,KAAAS,IAAA,SAAA3O,EAAAjB,EAAAD,GAEA,GAAA4G,GAAA,SAAAhE,EAAAsE,GAIA,GAAAC,IAAArE,QAEAqE,GAAAvE,GAAAA,CAIA,KAAA,GAFAkN,GAAAC,OAAAC,KAAA9I,GAEA/F,EAAA,EAAAA,EAAA2O,EAAAtO,OAAAL,IACA,CACA,GAAA8O,GAAAH,EAAA3O,GAEA+O,EAAAD,EAAAE,MAAA,KACAnB,EAAAkB,EAAAA,EAAA1O,OAAA,GAEA4O,EAAAC,EAAAH,EAAA/I,GAEAmJ,EAAApJ,EAAA+I,EACAG,GAAAtN,KAAAkM,GAAAsB,EAEAF,EAAAxN,GAAAA,EAEAmN,OAAAQ,eAAAH,EAAApB,GACAwB,IAAAC,EAAAzB,GACA0B,IAAAC,EAAA3B,EAAAsB,KAIA,MAAAnJ,IAGAsJ,EAAA,SAAAzB,GAEA,GAAA4B,GAAAC,EAAApB,QAAA,KAAAT,EACA,OAAA,IAAA8B,UAAAF,IAGAD,EAAA,SAAA3B,EAAAsB,GAEA,GACAS,GADAH,EAAAI,EAAAvB,QAAA,MAAAT,EAiBA,OAZA+B,GAFA,IAAAT,EAAA/E,KAEA0F,EAAAX,EAAAzN,MAIAqO,EAAAZ,EAAAzN,MAGAkO,IAEAH,GAAA,aAAAG,EAAA,KAGA,GAAAD,UAAA,QAAAF,IAGAP,EAAA,SAAAH,EAAAI,GAIA,IAAA,GAFAa,GAAAb,EAEAnP,EAAA,EAAAA,EAAA+O,EAAA1O,OAAA,EAAAL,IACA,CACA,GAAAJ,GAAAoQ,EAAAjB,EAAA/O,MAAA2B,QACAqO,GAAAjB,EAAA/O,IAAAJ,EACAoQ,EAAApQ,EAGA,MAAAoQ,IAGAN,GACA,8BACAO,KAAA,MAEAJ,GACA,8BACA,yCACAI,KAAA,MAGAH,GAEAI,QAAA,6BAEAC,KAAA,0CACAC,KAAA,oDACAC,KAAA,8DAEAC,MAAA,6BACAC,MAAA,0CACAC,MAAA,oDACAC,MAAA,8DAEAC,KAAA,6BACAC,MAAA,0CACAC,MAAA,oDACAC,MAAA,8DAEAC,KAAA,2CACAC,KAAA,2CACAC,KAAA,2CAEAC,UAAA,8BAGAlB,GAEAG,QAAA,8BAEAC,KAAA,8BACAC,KAAA,8BACAC,KAAA,8BAEAC,MAAA,8BACAC,MAAA,8BACAC,MAAA,8BACAC,MAAA,8BAEAC,KAAA,8BACAC,MAAA,8BACAC,MAAA,8BACAC,MAAA,8BAEAI,UAAA,8BAGAnS,GAAAD,QAAA4G,OAGAyL,IAAA,SAAAnR,EAAAjB,EAAAD,GAGA,GAAA2O,GAAA,SAAA9L,GAEA,MAAAyP,GAAAzP,IAIAyP,GACAjB,QAAA,EACAC,KAAA,EACAC,KAAA,EACAC,KAAA,EAEAC,MAAA,EACAC,MAAA,EACAC,MAAA,EACAC,MAAA,EAEAC,KAAA,EACAC,MAAA,EACAC,MAAA,EACAC,MAAA,EAEAC,KAAA,EACAC,KAAA,EACAC,KAAA,GAEAC,UAAA,EAGAnS,GAAAD,QAAA2O,OAEA4D,IAAA,SAAArR,EAAAjB,EAAAD,GAGA,GAAA2O,GAAA,SAAA/L,EAAAC,GAEA,IAAA2P,EACA,CACA,GAAAC,GAAA1C,OAAAC,KAAA0C,EAEAF,KAEA,KAAA,GAAArR,GAAA,EAAAA,EAAAsR,EAAAjR,SAAAL,EACA,CACA,GAAAwR,GAAAF,EAAAtR,EACAqR,GAAA5P,EAAA+P,IAAAD,EAAAC,IAIA,MAAAH,GAAA3P,IAGA2P,EAAA,KAEAE,GACAlK,MAAA,QACAoK,WAAA,OACAC,WAAA,OACAC,WAAA,OAEAC,IAAA,MACAC,SAAA,QACAC,SAAA,QACAC,SAAA,QAEAC,KAAA,OACAC,UAAA,QACAC,UAAA,QACAC,UAAA,QAEAC,WAAA,OACAC,WAAA,OACAC,WAAA,OAEAC,WAAA,YAGAzT,GAAAD,QAAA2O,OAEAgF,IAAA,SAAAzS,EAAAjB,EAAAD,IACA,SAAA4T,EAAAtT,IAQA,WAGA,QAAAuT,MACA,QAAAC,GAAAC,GACA,MAAAA,GAEA,QAAAC,GAAAD,GACA,QAAAA,EAEA,QAAAE,GAAAF,GACA,OAAAA,EAsBA,QAAAG,GAAAC,GACA,MAAA,YACA,GAAA,OAAAA,EAAA,KAAA,IAAA/S,OAAA,+BACA+S,GAAAC,MAAA5T,KAAA6T,WACAF,EAAA,MAIA,QAAAG,GAAAH,GACA,MAAA,YACA,OAAAA,IACAA,EAAAC,MAAA5T,KAAA6T,WACAF,EAAA,OAkBA,QAAAI,GAAAC,GACA,MAAAC,GAAAD,IAEA,gBAAAA,GAAAhT,QACAgT,EAAAhT,QAAA,GACAgT,EAAAhT,OAAA,IAAA,EAIA,QAAAkT,GAAAF,EAAAG,GAIA,IAHA,GAAAC,GAAA,GACApT,EAAAgT,EAAAhT,SAEAoT,EAAApT,GACAmT,EAAAH,EAAAI,GAAAA,EAAAJ,GAIA,QAAAK,GAAAL,EAAAG,GAKA,IAJA,GAAAC,GAAA,GACApT,EAAAgT,EAAAhT,OACAsT,EAAAxI,MAAA9K,KAEAoT,EAAApT,GACAsT,EAAAF,GAAAD,EAAAH,EAAAI,GAAAA,EAAAJ,EAEA,OAAAM,GAGA,QAAAC,GAAAC,GACA,MAAAH,GAAAvI,MAAA0I,GAAA,SAAAjB,EAAA5S,GAAA,MAAAA,KAGA,QAAA8T,GAAAT,EAAAG,EAAAO,GAIA,MAHAR,GAAAF,EAAA,SAAAW,EAAAhU,EAAAF,GACAiU,EAAAP,EAAAO,EAAAC,EAAAhU,EAAAF,KAEAiU,EAGA,QAAAE,GAAAC,EAAAV,GACAD,EAAAY,EAAAD,GAAA,SAAAE,GACAZ,EAAAU,EAAAE,GAAAA,KAIA,QAAAC,GAAAhB,EAAAiB,GACA,IAAA,GAAAtU,GAAA,EAAAA,EAAAqT,EAAAhT,OAAAL,IACA,GAAAqT,EAAArT,KAAAsU,EAAA,MAAAtU,EAEA,OAAA,GAaA,QAAAuU,GAAAC,GACA,GACAC,GACA5F,EAFA7O,EAAA,EAGA,OAAAoT,GAAAoB,IACAC,EAAAD,EAAAnU,OACA,WAEA,MADAL,KACAyU,EAAAzU,EAAAA,EAAA,QAGA6O,EAAAsF,EAAAK,GACAC,EAAA5F,EAAAxO,OACA,WAEA,MADAL,KACAyU,EAAAzU,EAAA6O,EAAA7O,GAAA,OAQA,QAAA0U,GAAAC,EAAAC,GAEA,MADAA,GAAA,MAAAA,EAAAD,EAAAtU,OAAA,GAAAuU,EACA,WAGA,IAAA,GAFAvU,GAAAwU,KAAAC,IAAA5B,UAAA7S,OAAAuU,EAAA,GACAG,EAAA5J,MAAA9K,GACAoT,EAAA,EAAApT,EAAAoT,EAAAA,IACAsB,EAAAtB,GAAAP,UAAAO,EAAAmB,EAEA,QAAAA,GACA,IAAA,GAAA,MAAAD,GAAAvU,KAAAf,KAAA0V,EACA,KAAA,GAAA,MAAAJ,GAAAvU,KAAAf,KAAA6T,UAAA,GAAA6B,KAYA,QAAAC,GAAAxB,GACA,MAAA,UAAAhF,EAAAiF,EAAAwB,GACA,MAAAzB,GAAAhF,EAAAyG,IA8GA,QAAAC,GAAAC,GAEA,MAAA,UAAAC,EAAA5B,EAAAyB,GACAA,EAAA9B,EAAA8B,GAAAvC,GACA0C,EAAAA,KACA,IAAAC,GAAAd,EAAAa,EACA,IAAA,GAAAD,EACA,MAAAF,GAAA,KAEA,IAAAK,IAAA,EACAC,EAAA,EACAC,GAAA,GAEA,QAAAC,KACA,GAAAH,GAAA,GAAAC,EACA,MAAAN,GAAA,KAGA,MAAAE,EAAAI,IAAAC,GAAA,CACA,GAAApB,GAAAiB,GACA,IAAA,OAAAjB,EAKA,MAJAkB,IAAA,OACA,GAAAC,GACAN,EAAA,MAIAM,IAAA,EACA/B,EAAA4B,EAAAhB,GAAAA,EAAArB,EAAA,SAAA2C,GACAH,GAAA,EACAG,GACAT,EAAAS,GACAF,GAAA,GAGAC,YASA,QAAAE,GAAA3C,GACA,MAAA,UAAAoC,EAAA5B,EAAAyB,GACA,MAAAjC,GAAA4C,EAAAC,OAAAT,EAAA5B,EAAAyB,IAGA,QAAAa,GAAA9C,GACA,MAAA,UAAAoC,EAAAD,EAAA3B,EAAAyB,GACA,MAAAjC,GAAAkC,EAAAC,GAAAC,EAAA5B,EAAAyB,IAGA,QAAAc,GAAA/C,GACA,MAAA,UAAAoC,EAAA5B,EAAAyB,GACA,MAAAjC,GAAA4C,EAAAI,aAAAZ,EAAA5B,EAAAyB,IAIA,QAAAgB,GAAAC,EAAA7C,EAAAG,EAAAyB,GACAA,EAAA9B,EAAA8B,GAAAvC,GACAW,EAAAA,KACA,IAAA8C,GAAA/C,EAAAC,QACA6C,GAAA7C,EAAA,SAAA7E,EAAAiF,EAAAwB,GACAzB,EAAAhF,EAAA,SAAAkH,EAAA9C,GACAuD,EAAA1C,GAAAb,EACAqC,EAAAS,MAEA,SAAAA,GACAT,EAAAS,EAAAS,KA2CA,QAAAC,GAAAF,EAAA7C,EAAAG,EAAAyB,GACA,GAAAkB,KACAD,GAAA7C,EAAA,SAAAW,EAAAP,EAAAwB,GACAzB,EAAAQ,EAAA,SAAApB,GACAA,GACAuD,EAAAnM,MAAAyJ,MAAAA,EAAAjF,MAAAwF,IAEAiB,OAEA,WACAA,EAAAvB,EAAAyC,EAAAE,KAAA,SAAAvW,EAAAuE,GACA,MAAAvE,GAAA2T,MAAApP,EAAAoP,QACA,SAAAO,GACA,MAAAA,GAAAxF,WAcA,QAAA8H,GAAAJ,EAAA7C,EAAAG,EAAAyB,GACAmB,EAAAF,EAAA7C,EAAA,SAAA7E,EAAA+H,GACA/C,EAAAhF,EAAA,SAAAoE,GACA2D,GAAA3D,MAEAqC,GAMA,QAAAuB,GAAAN,EAAAO,EAAAC,GACA,MAAA,UAAArD,EAAA8B,EAAA3B,EAAA+C,GACA,QAAAjB,KACAiB,GAAAA,EAAAG,GAAA,EAAA,SAEA,QAAAC,GAAA3C,EAAA4C,EAAA3B,GACA,MAAAsB,OACA/C,GAAAQ,EAAA,SAAApB,GACA2D,GAAAE,EAAA7D,KACA2D,EAAAG,GAAA,EAAA1C,IACAuC,EAAA/C,GAAA,GAEAyB,MANAA,IASA/B,UAAA7S,OAAA,EACA6V,EAAA7C,EAAA8B,EAAAwB,EAAArB,IAEAiB,EAAA/C,EACAA,EAAA2B,EACAe,EAAA7C,EAAAsD,EAAArB,KAeA,QAAAuB,GAAAjE,EAAAoB,GACA,MAAAA,GAsOA,QAAA8C,GAAAZ,EAAAa,EAAA9B,GACAA,EAAAA,GAAAvC,CACA,IAAAyD,GAAA/C,EAAA2D,QAEAb,GAAAa,EAAA,SAAAC,EAAA5C,EAAAa,GACA+B,EAAAtC,EAAA,SAAAgB,EAAAuB,GACAA,EAAA5W,QAAA,IACA4W,EAAAA,EAAA,IAEAd,EAAA/B,GAAA6C,EACAhC,EAAAS,OAEA,SAAAA,GACAT,EAAAS,EAAAS,KAwCA,QAAAe,GAAAhB,EAAA7C,EAAAL,EAAAiC,GACA,GAAAtB,KACAuC,GAAA7C,EAAA,SAAAW,EAAAP,EAAA8C,GACAvD,EAAAgB,EAAA,SAAA0B,EAAAyB,GACAxD,EAAAA,EAAAyD,OAAAD,OACAZ,EAAAb,MAEA,SAAAA,GACAT,EAAAS,EAAA/B,KA+EA,QAAA0D,GAAAC,EAAAC,EAAAC,GAOA,QAAAC,GAAAC,EAAA/V,EAAAgW,EAAA1C,GACA,GAAA,MAAAA,GAAA,kBAAAA,GACA,KAAA,IAAAhV,OAAA,mCAMA,OAJAyX,GAAAE,SAAA,EACAtE,EAAA3R,KACAA,GAAAA,IAEA,IAAAA,EAAAtB,QAAAqX,EAAAG,OAEAjC,EAAAkC,aAAA,WACAJ,EAAAK,WAGAxE,EAAA5R,EAAA,SAAAqV,GACA,GAAA1C,IACA3S,KAAAqV,EACA/B,SAAAA,GAAAvC,EAGAiF,GACAD,EAAAX,MAAAiB,QAAA1D,GAEAoD,EAAAX,MAAA/M,KAAAsK,GAGAoD,EAAAX,MAAA1W,SAAAqX,EAAAH,aACAG,EAAAO,kBAGArC,GAAAkC,aAAAJ,EAAAjF,UAEA,QAAAyF,GAAAR,EAAAX,GACA,MAAA,YACAoB,GAAA,CAEA,IAAAC,IAAA,EACAnB,EAAA/D,SACAK,GAAAwD,EAAA,SAAAC,GACAzD,EAAA8E,EAAA,SAAAf,EAAA7D,GACA6D,IAAAN,GAAAoB,IACAC,EAAAC,OAAA7E,EAAA,GACA2E,GAAA,KAIApB,EAAA/B,SAAAhC,MAAA+D,EAAAC,KAEAS,EAAAX,MAAA1W,OAAA8X,IAAA,GACAT,EAAAK,QAEAL,EAAAjF,WAzDA,GAAA,MAAA8E,EACAA,EAAA,MAEA,IAAA,IAAAA,EACA,KAAA,IAAAtX,OAAA,+BAyDA,IAAAkY,GAAA,EACAE,KACAX,GACAX,SACAQ,YAAAA,EACAC,QAAAA,EACAS,UAAAvF,EACA6F,MAAA7F,EACAqF,MAAArF,EACAkF,SAAA,EACAY,QAAA,EACAxO,KAAA,SAAArI,EAAAsT,GACAwC,EAAAC,EAAA/V,GAAA,EAAAsT,IAEAwD,KAAA,WACAf,EAAAK,MAAArF,EACAgF,EAAAX,UAEAiB,QAAA,SAAArW,EAAAsT,GACAwC,EAAAC,EAAA/V,GAAA,EAAAsT,IAEAxC,QAAA,WACA,IAAAiF,EAAAc,QAAAL,EAAAT,EAAAH,aAAAG,EAAAX,MAAA1W,OACA,KAAA8X,EAAAT,EAAAH,aAAAG,EAAAX,MAAA1W,QAAA,CACA,GAAA0W,GAAAW,EAAAF,QACAE,EAAAX,MAAAuB,OAAA,EAAAZ,EAAAF,SACAE,EAAAX,MAAAuB,OAAA,EAAAZ,EAAAX,MAAA1W,QAEAsB,EAAA+R,EAAAqD,EAAA,SAAAC,GACA,MAAAA,GAAArV,MAGA,KAAA+V,EAAAX,MAAA1W,QACAqX,EAAAa,QAEAJ,GAAA,EACAE,EAAArO,KAAA+M,EAAA,GACA,IAAAR,GAAAxD,EAAAmF,EAAAR,EAAAX,GACAO,GAAA3V,EAAA4U,KAIAlW,OAAA,WACA,MAAAqX,GAAAX,MAAA1W,QAEAkV,QAAA,WACA,MAAA4C,IAEAE,YAAA,WACA,MAAAA,IAEAR,KAAA,WACA,MAAAH,GAAAX,MAAA1W,OAAA8X,IAAA,GAEAO,MAAA,WACAhB,EAAAc,QAAA,GAEAG,OAAA,WACA,GAAAjB,EAAAc,UAAA,EAAA,CACAd,EAAAc,QAAA,CAIA,KAAA,GAHAI,GAAA/D,KAAAgE,IAAAnB,EAAAH,YAAAG,EAAAX,MAAA1W,QAGAyY,EAAA,EAAAF,GAAAE,EAAAA,IACAlD,EAAAkC,aAAAJ,EAAAjF,WAIA,OAAAiF,GA+EA,QAAAqB,GAAAlL,GACA,MAAA6G,GAAA,SAAA1B,EAAAiE,GACAjE,EAAAC,MAAA,KAAAgE,EAAAG,QAAA1C,EAAA,SAAAgB,EAAAuB,GACA,gBAAAhL,WACAyJ,EACAzJ,QAAAC,OACAD,QAAAC,MAAAwJ,GAGAzJ,QAAA4B,IACA0F,EAAA0D,EAAA,SAAAjD,GACA/H,QAAA4B,GAAAmG,aAmDA,QAAAgF,GAAAC,GACA,MAAA,UAAApF,EAAAL,EAAAyB,GACAgE,EAAArF,EAAAC,GAAAL,EAAAyB,IAsCA,QAAAiE,GAAAhD,GACA,MAAAxB,GAAA,SAAAyE,EAAAlC,GACA,GAAAmC,GAAA1E,EAAA,SAAAuC,GACA,GAAAoC,GAAAha,KACA4V,EAAAgC,EAAAqC,KACA,OAAApD,GAAAiD,EAAA,SAAAnG,EAAA4D,EAAAL,GACAvD,EAAAC,MAAAoG,EAAApC,EAAAG,QAAAb,MAEAtB,IAEA,OAAAgC,GAAA5W,OACA+Y,EAAAnG,MAAA5T,KAAA4X,GAGAmC,IAqBA,QAAAG,GAAAvG,GACA,MAAA0B,GAAA,SAAAuC,GACA,GAAAhC,GAAAgC,EAAAqC,KACArC,GAAAjN,KAAA,WACA,GAAAwP,GAAAtG,SACAuG,GACA7D,EAAAkC,aAAA,WACA7C,EAAAhC,MAAA,KAAAuG,KAGAvE,EAAAhC,MAAA,KAAAuG,IAGA,IAAAC,IAAA,CACAzG,GAAAC,MAAA5T,KAAA4X,GACAwC,GAAA,IA/qCA,GAaAC,GAbA9D,KAkBA+D,EAAA,gBAAAva,OAAAA,KAAAA,OAAAA,MAAAA,MACA,gBAAAD,IAAAA,EAAAA,SAAAA,GAAAA,GACAE,IAEA,OAAAsa,IACAD,EAAAC,EAAA/D,OAGAA,EAAAgE,WAAA,WAEA,MADAD,GAAA/D,MAAA8D,EACA9D,EAqBA,IAAAiE,GAAAjL,OAAA1M,UAAA4X,SAEAxG,EAAAnI,MAAA4O,SAAA,SAAA3E,GACA,MAAA,mBAAAyE,EAAAzZ,KAAAgV,IAIA4E,EAAA,SAAA5E,GACA,GAAA1T,SAAA0T,EACA,OAAA,aAAA1T,GAAA,WAAAA,KAAA0T,GAwDAjB,EAAAvF,OAAAC,MAAA,SAAAuG,GACA,GAAAvG,KACA,KAAA,GAAAoL,KAAA7E,GACAA,EAAA8E,eAAAD,IACApL,EAAA7E,KAAAiQ,EAGA,OAAApL,IA2DAsL,EAAA,kBAAArC,eAAAA,aAEAsC,EAAAD,EAAA,SAAAnH,GAEAmH,EAAAnH,IACA,SAAAA,GACAqH,WAAArH,EAAA,GAGA,iBAAAP,IAAA,kBAAAA,GAAA6H,SACA1E,EAAA0E,SAAA7H,EAAA6H,SAEA1E,EAAA0E,SAAAF,EAEAxE,EAAAkC,aAAAqC,EAAAC,EAAAxE,EAAA0E,SAGA1E,EAAA2E,QACA3E,EAAA4E,KAAA,SAAAnH,EAAAG,EAAAyB,GACA,MAAAW,GAAAC,OAAAxC,EAAA2B,EAAAxB,GAAAyB,IAGAW,EAAA6E,cACA7E,EAAA8E,WAAA,SAAArH,EAAAG,EAAAyB,GACA,MAAAW,GAAAI,aAAA3C,EAAA2B,EAAAxB,GAAAyB,IAIAW,EAAA+E,aACA/E,EAAAgF,UAAA,SAAAvH,EAAA8B,EAAA3B,EAAAyB,GACA,MAAAC,GAAAC,GAAA9B,EAAA2B,EAAAxB,GAAAyB,IAGAW,EAAAiF,UACAjF,EAAAC,OAAA,SAAA3B,EAAAV,EAAAyB,GAcA,QAAAK,GAAAI,GACAoF,IACApF,EACAT,EAAAS,GAIA,OAAAtB,GAAA,GAAA0G,GACA7F,EAAA,MArBAA,EAAA9B,EAAA8B,GAAAvC,GACAwB,EAAAA,KAKA,KAHA,GACAE,GADA2G,EAAAxG,EAAAL,GACA4G,EAAA,EAEA,OAAA1G,EAAA2G,MACAD,GAAA,EACAtH,EAAAU,EAAAE,GAAAA,EAAArB,EAAAuC,GAGA,KAAAwF,GAAA7F,EAAA,OAeAW,EAAAoF,gBACApF,EAAAI,aAAA,SAAAZ,EAAA5B,EAAAyB,GAKA,QAAAgG,KACA,GAAAxB,IAAA,CACA,OAAA,QAAArF,EACAa,EAAA,OAEAzB,EAAA4B,EAAAhB,GAAAA,EAAArB,EAAA,SAAA2C,GACA,GAAAA,EACAT,EAAAS,OAEA,CAEA,GADAtB,EAAAiB,IACA,OAAAjB,EACA,MAAAa,GAAA,KAEAwE,GACA7D,EAAAkC,aAAAmD,GAEAA,aAKAxB,GAAA,IA1BAxE,EAAA9B,EAAA8B,GAAAvC,GACA0C,EAAAA,KACA,IAAAC,GAAAd,EAAAa,GACAhB,EAAAiB,GAyBA4F,MAKArF,EAAAsF,eACAtF,EAAAuF,YAAA,SAAA/F,EAAAD,EAAA3B,EAAAyB,GACAC,EAAAC,GAAAC,EAAA5B,EAAAyB,IA6EAW,EAAAwF,IAAAzF,EAAAM,GACAL,EAAAyF,UAAAtF,EAAAE,GACAL,EAAA0F,SAAAxF,EAAAG,GAIAL,EAAA2F,OACA3F,EAAA4F,MACA5F,EAAA6F,OAAA,SAAApI,EAAAU,EAAAP,EAAAyB,GACAW,EAAAI,aAAA3C,EAAA,SAAAW,EAAAhU,EAAAiV,GACAzB,EAAAO,EAAAC,EAAA,SAAA0B,EAAA9C,GACAmB,EAAAnB,EACAqC,EAAAS,MAEA,SAAAA,GACAT,EAAAS,EAAA3B,MAIA6B,EAAA8F,MACA9F,EAAA+F,YAAA,SAAAtI,EAAAU,EAAAP,EAAAyB,GACA,GAAA2G,GAAAlI,EAAAL,EAAAV,GAAAkJ,SACAjG,GAAA6F,OAAAG,EAAA7H,EAAAP,EAAAyB,IAGAW,EAAAkG,UAAA,SAAAzI,EAAAU,EAAAP,EAAAyB,GACA,IAAA/B,UAAA7S,SACA4U,EAAAzB,EACAA,EAAAO,EACAA,EAAAT,EAAAD,UAGAuC,EAAAC,OAAAxC,EAAA,SAAAT,EAAAqH,EAAA1D,GACA/C,EAAAO,EAAAnB,EAAAqH,EAAA1D,IACA,SAAAb,GACAT,EAAAS,EAAA3B,MAsBA6B,EAAAmG,OACAnG,EAAAoG,OAAArG,EAAAS,GAEAR,EAAAqG,YACArG,EAAAsG,YAAApG,EAAAM,GAEAR,EAAAuG,aACAvG,EAAAwG,aAAArG,EAAAK,GASAR,EAAAyG,OAAA1G,EAAAW,GACAV,EAAA0G,YAAAxG,EAAAQ,GACAV,EAAA2G,aAAAxG,EAAAO,GA2BAV,EAAA4G,IACA5G,EAAA6G,KAAAjG,EAAAZ,EAAAC,OAAAhD,EAAAF,GAEAiD,EAAA8G,UAAAlG,EAAAZ,EAAAuF,YAAAtI,EAAAF,GAEAiD,EAAA+G,IACA/G,EAAAgH,MAAApG,EAAAZ,EAAAC,OAAA/C,EAAAA,GAEA8C,EAAAiH,WAAArG,EAAAZ,EAAAuF,YAAArI,EAAAA,GAKA8C,EAAAkH,OAAAtG,EAAAZ,EAAAC,OAAAlD,EAAAkE,GACAjB,EAAAmH,aAAAvG,EAAAZ,EAAAI,aAAArD,EAAAkE,GACAjB,EAAAoH,YAAAxG,EAAAZ,EAAAuF,YAAAxI,EAAAkE,GAEAjB,EAAAqH,OAAA,SAAA5J,EAAAG,EAAAyB,GAsBA,QAAAiI,GAAAC,EAAAC,GACA,GAAAtd,GAAAqd,EAAAE,SAAAhZ,EAAA+Y,EAAAC,QACA,OAAAhZ,GAAAvE,EAAA,GAAAA,EAAAuE,EAAA,EAAA,EAvBAuR,EAAAwF,IAAA/H,EAAA,SAAAW,EAAAiB,GACAzB,EAAAQ,EAAA,SAAA0B,EAAA2H,GACA3H,EACAT,EAAAS,GAGAT,EAAA,MAAAzG,MAAAwF,EAAAqJ,SAAAA,OAGA,SAAA3H,EAAAS,GACA,MAAAT,GACAT,EAAAS,OAGAT,GAAA,KAAAvB,EAAAyC,EAAAE,KAAA6G,GAAA,SAAAlJ,GACA,MAAAA,GAAAxF,YAYAoH,EAAA0H,KAAA,SAAAvG,EAAAQ,EAAAtC,GAoBA,QAAAsI,GAAAvK,GACAwK,EAAAxF,QAAAhF,GAEA,QAAAyK,GAAAzK,GACA,GAAA0K,GAAArJ,EAAAmJ,EAAAxK,EACA0K,IAAA,GAAAF,EAAAlF,OAAAoF,EAAA,GAEA,QAAAC,KACAC,IACArK,EAAAiK,EAAAK,MAAA,GAAA,SAAA7K,GACAA,MA7BAiC,IAEAA,EAAAsC,EACAA,EAAA,MAEAtC,EAAA9B,EAAA8B,GAAAvC,EACA,IAAA7D,GAAAsF,EAAA4C,GACA6G,EAAA/O,EAAAxO,MACA,KAAAud,EACA,MAAA3I,GAAA,KAEAsC,KACAA,EAAAqG,EAGA,IAAAzH,MACA2H,EAAA,EAEAN,IAeAD,GAAA,WACAK,GACA3I,EAAA,KAAAkB,KAIA5C,EAAA1E,EAAA,SAAAoL,GAgCA,QAAA8D,KACA,MAAAxG,GAAAuG,GAAAhK,EAAAkK,EAAA,SAAAle,EAAAkU,GACA,MAAAlU,IAAAqW,EAAA+D,eAAAlG,KACA,KAAAmC,EAAA+D,eAAAD,GASA,QAAAgE,KACAF,MACAD,IACAL,EAAAQ,GACAjH,EAAAA,EAAA3W,OAAA,GAAA6d,EAAA/H,IAxBA,IAvBA,GAsBAgI,GAtBAnH,EAAA1D,EAAAyD,EAAAkD,IAAAlD,EAAAkD,IAAAlD,EAAAkD,IACAiE,EAAAxJ,EAAA,SAAAgB,EAAAuB,GAKA,GAJA6G,IACA7G,EAAA5W,QAAA,IACA4W,EAAAA,EAAA,IAEAvB,EAAA,CACA,GAAA0I,KACAnK,GAAAkC,EAAA,SAAAkI,EAAAC,GACAF,EAAAE,GAAAD,IAEAD,EAAAnE,GAAAhD,EACAhC,EAAAS,EAAA0I,OAGAjI,GAAA8D,GAAAhD,EACArB,EAAAkC,aAAA6F,KAGAK,EAAAhH,EAAA6G,MAAA,EAAA7G,EAAA3W,OAAA,GAEAoU,EAAAuJ,EAAA3d,OAEAoU,KAAA,CACA,KAAA0J,EAAApH,EAAAiH,EAAAvJ,KACA,KAAA,IAAAxU,OAAA,4BAEA,IAAAqT,EAAA6K,IAAA9J,EAAA8J,EAAAlE,IAAA,EACA,KAAA,IAAAha,OAAA,2BAQA8d,KACAD,IACA9G,EAAAA,EAAA3W,OAAA,GAAA6d,EAAA/H,IAGAoH,EAAAU,MAcArI,EAAA2I,MAAA,SAAAC,EAAAxH,EAAA/B,GAWA,QAAAwJ,GAAAC,EAAAlf,GACA,GAAA,gBAAAA,GACAkf,EAAAF,MAAAG,SAAAnf,EAAA,KAAAof,MACA,CAAA,GAAA,gBAAApf,GAIA,KAAA,IAAAS,OAAA,gDAAAT,GAHAkf,GAAAF,MAAAG,SAAAnf,EAAAgf,MAAA,KAAAI,EACAF,EAAAG,SAAAF,SAAAnf,EAAAqf,SAAA,KAAAC,GAmBA,QAAAC,GAAAC,EAAAC,GACA,QAAAC,GAAAlI,EAAAmI,GACA,MAAA,UAAAC,GACApI,EAAA,SAAAtB,EAAA/B,GACAyL,GAAA1J,GAAAyJ,GAAAzJ,IAAAA,EAAA/B,OAAAA,KACAsL,IAIA,QAAAI,GAAAR,GACA,MAAA,UAAAO,GACA/E,WAAA,WACA+E,EAAA,OACAP,IAIA,KAAAS,EAAAd,OAAA,CAEA,GAAAW,KAAAG,EAAAd,OAAA,EACAe,GAAAvV,KAAAkV,EAAAI,EAAAtI,KAAAmI,KACAA,GAAAG,EAAAT,SAAA,GACAU,EAAAvV,KAAAqV,EAAAC,EAAAT,WAIAjJ,EAAA4J,OAAAD,EAAA,SAAAjK,EAAA3T,GACAA,EAAAA,EAAAA,EAAAtB,OAAA,IACA2e,GAAAM,EAAArK,UAAAtT,EAAA+T,IAAA/T,EAAAgS,UA9DA,GAAAiL,GAAA,EACAE,EAAA,EAEAS,KAEAD,GACAd,MAAAI,EACAC,SAAAC,GAcAze,EAAA6S,UAAA7S,MACA,IAAA,EAAAA,GAAAA,EAAA,EACA,KAAA,IAAAJ,OAAA,wGA4CA,OA3CA,IAAAI,GAAA,kBAAAme,KACAvJ,EAAA+B,EACAA,EAAAwH,GAEA,kBAAAA,IACAC,EAAAa,EAAAd,GAEAc,EAAArK,SAAAA,EACAqK,EAAAtI,KAAAA,EAmCAsI,EAAArK,SAAA8J,IAAAA,GAGAnJ,EAAA6J,UAAA,SAAA1I,EAAA9B,GASA,QAAAyK,GAAAlM,GACA,MAAAkB,GAAA,SAAAgB,EAAAuB,GACA,GAAAvB,EACAT,EAAAhC,MAAA,MAAAyC,GAAA0B,OAAAH,QAEA,CACA,GAAA0I,GAAAnM,EAAAmM,MACAA,GACA1I,EAAAjN,KAAA0V,EAAAC,IAGA1I,EAAAjN,KAAAiL,GAEAsE,EAAA/F,GAAAP,MAAA,KAAAgE,MApBA,GADAhC,EAAA9B,EAAA8B,GAAAvC,IACAY,EAAAyD,GAAA,CACA,GAAArB,GAAA,GAAAzV,OAAA,4DACA,OAAAgV,GAAAS,GAEA,MAAAqB,GAAA1W,WAoBAqf,GAAA9J,EAAApC,SAAAuD,MAnBA9B,KAuCAW,EAAAgK,SAAA,SAAA7I,EAAA9B,GACA6B,EAAAlB,EAAAC,OAAAkB,EAAA9B,IAGAW,EAAAiK,cAAA,SAAA9I,EAAA5B,EAAAF,GACA6B,EAAA5B,EAAAC,GAAA4B,EAAA9B,IAGAW,EAAA4J,OAAA,SAAAzI,EAAA9B,GACA6B,EAAAlB,EAAAI,aAAAe,EAAA9B,IAGAW,EAAApC,SAAA,SAAAuD,GACA,QAAA+I,GAAArM,GACA,QAAAT,KAIA,MAHA+D,GAAA1W,QACA0W,EAAAtD,GAAAR,MAAA,KAAAC,WAEAF,EAAA2M,OAKA,MAHA3M,GAAA2M,KAAA,WACA,MAAAlM,GAAAsD,EAAA1W,OAAA,EAAAyf,EAAArM,EAAA,GAAA,MAEAT,EAEA,MAAA8M,GAAA,IAGAlK,EAAA3C,MAAAyB,EAAA,SAAA1B,EAAAiE,GACA,MAAAvC,GAAA,SAAAqL,GACA,MAAA/M,GAAAC,MACA,KAAAgE,EAAAG,OAAA2I,QAgBAnK,EAAAwB,OAAAzB,EAAAuB,GACAtB,EAAAoK,aAAAjK,EAAAmB,GAEAtB,EAAAqK,OAAA,SAAAC,EAAA1M,EAAAyB,GAEA,GADAA,EAAAA,GAAAvC,EACAwN,IAAA,CACA,GAAAP,GAAAjL,EAAA,SAAAgB,EAAAuB,GACAvB,EACAT,EAAAS,GACAwK,EAAAjN,MAAA5T,KAAA4X,GACAzD,EAAAmM,GAEA1K,EAAA,OAGAzB,GAAAmM,OAEA1K,GAAA,OAIAW,EAAAuK,SAAA,SAAA3M,EAAA0M,EAAAjL,GACA,GAAAmL,GAAA,CACA,OAAAxK,GAAAqK,OAAA,WACA,QAAAG,GAAA,GAAAF,EAAAjN,MAAA5T,KAAA6T,YACAM,EAAAyB,IAGAW,EAAAyK,MAAA,SAAAH,EAAA1M,EAAAyB,GACA,MAAAW,GAAAqK,OAAA,WACA,OAAAC,EAAAjN,MAAA5T,KAAA6T,YACAM,EAAAyB,IAGAW,EAAA0K,QAAA,SAAA9M,EAAA0M,EAAAjL,GACA,MAAAW,GAAAuK,SAAA3M,EAAA,WACA,OAAA0M,EAAAjN,MAAA5T,KAAA6T,YACA+B,IAGAW,EAAA2K,OAAA,SAAAL,EAAA1M,EAAAyB,GACAA,EAAAA,GAAAvC,CAEA,IAAAiN,GAAAjL,EAAA,SAAAgB,EAAAuB,GACAvB,EACAT,EAAAS,IAEAuB,EAAAjN,KAAAyM,GACAyJ,EAAAjN,MAAA5T,KAAA4X,MAIAR,EAAA,SAAAf,EAAA8K,GACA9K,EACAT,EAAAS,GACA8K,EACAhN,EAAAmM,GAEA1K,EAAA,MAIAiL,GAAAzJ,IAGAb,EAAA6K,SAAA,SAAAjN,EAAA0M,EAAAjL,GACA,GAAAmL,GAAA,CACAxK,GAAA2K,OAAA,SAAAZ,GACAS,IAAA,EACAT,EAAA,MAAA,GAEAO,EAAAjN,MAAA5T,KAAA6T,YAEAM,EAAAyB,IAwIAW,EAAA8K,MAAA,SAAApJ,EAAAC,GACA,GAAAG,GAAAL,EAAA,SAAAsJ,EAAApK,GACAe,EAAAqJ,EAAA,GAAApK,IACAgB,EAAA,EAEA,OAAAG,IAGA9B,EAAAgL,cAAA,SAAAtJ,EAAAC,GAEA,QAAAsJ,GAAA/gB,EAAAuE,GACA,MAAAvE,GAAAghB,SAAAzc,EAAAyc,SAGA,QAAAC,GAAAC,EAAA1M,EAAA2M,GAGA,IAFA,GAAAC,GAAA,GACAC,EAAAH,EAAA3gB,OAAA,EACA8gB,EAAAD,GAAA,CACA,GAAAE,GAAAF,GAAAC,EAAAD,EAAA,IAAA,EACAD,GAAA3M,EAAA0M,EAAAI,KAAA,EACAF,EAAAE,EAEAD,EAAAC,EAAA,EAGA,MAAAF,GAGA,QAAAzJ,GAAAC,EAAA/V,EAAAmf,EAAA7L,GACA,GAAA,MAAAA,GAAA,kBAAAA,GACA,KAAA,IAAAhV,OAAA,mCAMA,OAJAyX,GAAAE,SAAA,EACAtE,EAAA3R,KACAA,GAAAA,IAEA,IAAAA,EAAAtB,OAEAuV,EAAAkC,aAAA,WACAJ,EAAAK,cAGAxE,GAAA5R,EAAA,SAAAqV,GACA,GAAA1C,IACA3S,KAAAqV,EACA8J,SAAAA,EACA7L,SAAA,kBAAAA,GAAAA,EAAAvC,EAGAgF,GAAAX,MAAAuB,OAAAyI,EAAArJ,EAAAX,MAAAzC,EAAAuM,GAAA,EAAA,EAAAvM,GAEAoD,EAAAX,MAAA1W,SAAAqX,EAAAH,aACAG,EAAAO,YAEArC,EAAAkC,aAAAJ,EAAAjF,WAKA,GAAAiF,GAAA9B,EAAA8K,MAAApJ,EAAAC,EAUA,OAPAG,GAAA1N,KAAA,SAAArI,EAAAmf,EAAA7L,GACAwC,EAAAC,EAAA/V,EAAAmf,EAAA7L,UAIAyC,GAAAM,QAEAN,GAGA9B,EAAAyL,MAAA,SAAA/J,EAAAE,GACA,MAAAH,GAAAC,EAAA,EAAAE,IAqBA5B,EAAA7I,IAAAgM,EAAA,OACAnD,EAAA0L,IAAAvI,EAAA,OAKAnD,EAAA2L,QAAA,SAAAvO,EAAAwO,GACA,GAAAzN,MACA0N,IACAD,GAAAA,GAAA7O,CACA,IAAA+O,GAAAhN,EAAA,SAAAuC,GACA,GAAAhC,GAAAgC,EAAAqC,MACAlF,EAAAoN,EAAAvO,MAAA,KAAAgE,EACA7C,KAAAL,GACA6B,EAAAkC,aAAA,WACA7C,EAAAhC,MAAA,KAAAc,EAAAK,MAGAA,IAAAqN,GACAA,EAAArN,GAAApK,KAAAiL,IAGAwM,EAAArN,IAAAa,GACAjC,EAAAC,MAAA,KAAAgE,EAAAG,QAAA1C,EAAA,SAAAuC,GACAlD,EAAAK,GAAA6C,CACA,IAAAS,GAAA+J,EAAArN,SACAqN,GAAArN,EACA,KAAA,GAAApU,GAAA,EAAAG,EAAAuX,EAAArX,OAAAF,EAAAH,EAAAA,IACA0X,EAAA1X,GAAAiT,MAAA,KAAAgE,UAOA,OAFAyK,GAAA3N,KAAAA,EACA2N,EAAAC,WAAA3O,EACA0O,GAGA9L,EAAAgM,UAAA,SAAA5O,GACA,MAAA,YACA,OAAAA,EAAA2O,YAAA3O,GAAAC,MAAA,KAAAC,aAUA0C,EAAA4I,MAAAxF,EAAApD,EAAAwF,KACAxF,EAAAiM,YAAA7I,EAAApD,EAAAyF,WACAzF,EAAAkM,WAAA,SAAAjO,EAAAsB,EAAA3B,EAAAyB,GACA,MAAAW,GAAA0F,SAAA1H,EAAAC,GAAAsB,EAAA3B,EAAAyB,IAGAW,EAAAmM,IAAA,WACA,GAAA5I,GAAAjG,SACA,OAAAwB,GAAA,SAAAuC,GACA,GAAAoC,GAAAha,KAEA4V,EAAAgC,EAAAA,EAAA5W,OAAA,EACA,mBAAA4U,GACAgC,EAAAqC,MAEArE,EAAAvC,EAGAkD,EAAA6F,OAAAtC,EAAAlC,EAAA,SAAA+K,EAAAhP,EAAAuD,GACAvD,EAAAC,MAAAoG,EAAA2I,EAAA5K,QAAA1C,EAAA,SAAAgB,EAAAuM,GACA1L,EAAAb,EAAAuM,SAGA,SAAAvM,EAAAS,GACAlB,EAAAhC,MAAAoG,GAAA3D,GAAA0B,OAAAjB,SAKAP,EAAAsM,QAAA,WACA,MAAAtM,GAAAmM,IAAA9O,MAAA,KAAA9H,MAAAjJ,UAAA2Z,QAAAzb,KAAA8S,aAuBA0C,EAAAuM,UAAAjJ,EAAAtD,EAAAC,QACAD,EAAAwM,gBAAAlJ,EAAAtD,EAAAI,cAGAJ,EAAAyM,QAAA,SAAArP,EAAAiC,GAGA,QAAA0K,GAAAjK,GACA,MAAAA,GACAJ,EAAAI,OAEAsB,GAAA2I,GANA,GAAArK,GAAAvC,EAAAkC,GAAAvC,GACAsE,EAAAuC,EAAAvG,EAOA2M,MAsBA/J,EAAA2D,YAAAA,EAEA3D,EAAA0M,SAAA5N,EAAA,SAAA6N,GACA,GAAAtL,IAAA,MAAAG,OAAAmL,EACA,OAAA,UAAAtN,GACA,MAAAA,GAAAhC,MAAA5T,KAAA4X,MAIArB,EAAA4M,SACA5M,EAAA6M,SAAA,SAAA9N,GACA,MAAAD,GAAA,SAAAuC,GACA,GACAtD,GADAsB,EAAAgC,EAAAqC,KAEA,KACA3F,EAAAgB,EAAA1B,MAAA5T,KAAA4X,GACA,MAAA1X,GACA,MAAA0V,GAAA1V,GAGAya,EAAArG,IAAA,kBAAAA,GAAA+O,KACA/O,EAAA+O,KAAA,SAAAlU,GACAyG,EAAA,KAAAzG,KACA,SAAA,SAAAkH,GACAT,EAAAS,EAAAiN,QAAAjN,EAAA,GAAAzV,OAAAyV,MAGAT,EAAA,KAAAtB,MAMA,gBAAA7U,IAAAA,EAAAD,QACAC,EAAAD,QAAA+W,EAGA,kBAAA7W,IAAAA,EAAAC,IACAD,KAAA,WACA,MAAA6W,KAKA+D,EAAA/D,MAAAA,OAKAxV,KAAAf,KAAAU,EAAA,YAAA,mBAAAZ,QAAAA,OAAA,mBAAAC,MAAAA,KAAA,mBAAAF,QAAAA,aAEA0jB,SAAA,KAAAC,IAAA,SAAA9iB,EAAAjB,EAAAD,IACA,SAAA4T,GA0BA,QAAAqQ,GAAAC,EAAAC,GAGA,IAAA,GADAC,GAAA,EACAjjB,EAAA+iB,EAAA1iB,OAAA,EAAAL,GAAA,EAAAA,IAAA,CACA,GAAAkjB,GAAAH,EAAA/iB,EACA,OAAAkjB,EACAH,EAAAzK,OAAAtY,EAAA,GACA,OAAAkjB,GACAH,EAAAzK,OAAAtY,EAAA,GACAijB,KACAA,IACAF,EAAAzK,OAAAtY,EAAA,GACAijB,KAKA,GAAAD,EACA,KAAAC,IAAAA,EACAF,EAAA/K,QAAA,KAIA,OAAA+K,GA+JA,QAAA/G,GAAAmH,EAAAvkB,GACA,GAAAukB,EAAAnH,OAAA,MAAAmH,GAAAnH,OAAApd,EAEA,KAAA,GADAwkB,MACApjB,EAAA,EAAAA,EAAAmjB,EAAA9iB,OAAAL,IACApB,EAAAukB,EAAAnjB,GAAAA,EAAAmjB,IAAAC,EAAApZ,KAAAmZ,EAAAnjB,GAEA,OAAAojB,GAhKA,GAAAC,GACA,gEACAC,EAAA,SAAAC,GACA,MAAAF,GAAAG,KAAAD,GAAA1F,MAAA,GAKAhf,GAAA4kB,QAAA,WAIA,IAAA,GAHAC,GAAA,GACAC,GAAA,EAEA3jB,EAAAkT,UAAA7S,OAAA,EAAAL,GAAA,KAAA2jB,EAAA3jB,IAAA,CACA,GAAA4jB,GAAA5jB,GAAA,EAAAkT,UAAAlT,GAAAyS,EAAAoR,KAGA,IAAA,gBAAAD,GACA,KAAA,IAAAE,WAAA,4CACAF,KAIAF,EAAAE,EAAA,IAAAF,EACAC,EAAA,MAAAC,EAAAG,OAAA,IAWA,MAJAL,GAAAZ,EAAA9G,EAAA0H,EAAA1U,MAAA,KAAA,SAAAgV,GACA,QAAAA,KACAL,GAAA1T,KAAA,MAEA0T,EAAA,IAAA,IAAAD,GAAA,KAKA7kB,EAAAolB,UAAA,SAAAL,GACA,GAAAM,GAAArlB,EAAAqlB,WAAAN,GACAO,EAAA,MAAAC,EAAAR,EAAA,GAcA,OAXAA,GAAAd,EAAA9G,EAAA4H,EAAA5U,MAAA,KAAA,SAAAgV,GACA,QAAAA,KACAE,GAAAjU,KAAA,KAEA2T,GAAAM,IACAN,EAAA,KAEAA,GAAAO,IACAP,GAAA,MAGAM,EAAA,IAAA,IAAAN,GAIA/kB,EAAAqlB,WAAA,SAAAN,GACA,MAAA,MAAAA,EAAAG,OAAA,IAIAllB,EAAAoR,KAAA,WACA,GAAAoU,GAAAlZ,MAAAjJ,UAAA2b,MAAAzd,KAAA8S,UAAA,EACA,OAAArU,GAAAolB,UAAAjI,EAAAqI,EAAA,SAAAL,EAAAvQ,GACA,GAAA,gBAAAuQ,GACA,KAAA,IAAAF,WAAA,yCAEA,OAAAE,KACA/T,KAAA,OAMApR,EAAAylB,SAAA,SAAAC,EAAAC,GAIA,QAAAC,GAAApR,GAEA,IADA,GAAAxJ,GAAA,EACAA,EAAAwJ,EAAAhT,QACA,KAAAgT,EAAAxJ,GADAA,KAKA,IADA,GAAAsX,GAAA9N,EAAAhT,OAAA,EACA8gB,GAAA,GACA,KAAA9N,EAAA8N,GADAA,KAIA,MAAAtX,GAAAsX,KACA9N,EAAAwK,MAAAhU,EAAAsX,EAAAtX,EAAA,GAfA0a,EAAA1lB,EAAA4kB,QAAAc,GAAAH,OAAA,GACAI,EAAA3lB,EAAA4kB,QAAAe,GAAAJ,OAAA,EAsBA,KAAA,GALAM,GAAAD,EAAAF,EAAAvV,MAAA,MACA2V,EAAAF,EAAAD,EAAAxV,MAAA,MAEA3O,EAAAwU,KAAAgE,IAAA6L,EAAArkB,OAAAskB,EAAAtkB,QACAukB,EAAAvkB,EACAL,EAAA,EAAAK,EAAAL,EAAAA,IACA,GAAA0kB,EAAA1kB,KAAA2kB,EAAA3kB,GAAA,CACA4kB,EAAA5kB,CACA,OAKA,IAAA,GADA6kB,MACA7kB,EAAA4kB,EAAA5kB,EAAA0kB,EAAArkB,OAAAL,IACA6kB,EAAA7a,KAAA,KAKA,OAFA6a,GAAAA,EAAAzN,OAAAuN,EAAA9G,MAAA+G,IAEAC,EAAA5U,KAAA,MAGApR,EAAAimB,IAAA,IACAjmB,EAAAkmB,UAAA,IAEAlmB,EAAAmmB,QAAA,SAAApB,GACA,GAAAjQ,GAAA2P,EAAAM,GACAjK,EAAAhG,EAAA,GACA2N,EAAA3N,EAAA,EAEA,OAAAgG,IAAA2H,GAKAA,IAEAA,EAAAA,EAAA8C,OAAA,EAAA9C,EAAAjhB,OAAA,IAGAsZ,EAAA2H,GARA,KAYAziB,EAAAomB,SAAA,SAAArB,EAAAzc,GACA,GAAAvI,GAAA0kB,EAAAM,GAAA,EAKA,OAHAzc,IAAAvI,EAAAwlB,OAAA,GAAAjd,EAAA9G,UAAA8G,IACAvI,EAAAA,EAAAwlB,OAAA,EAAAxlB,EAAAyB,OAAA8G,EAAA9G,SAEAzB,GAIAC,EAAAqmB,QAAA,SAAAtB,GACA,MAAAN,GAAAM,GAAA,GAaA,IAAAQ,GAAA,MAAA,KAAAA,OAAA,IACA,SAAAe,EAAAtb,EAAA4K,GAAA,MAAA0Q,GAAAf,OAAAva,EAAA4K,IACA,SAAA0Q,EAAAtb,EAAA4K,GAEA,MADA,GAAA5K,IAAAA,EAAAsb,EAAA9kB,OAAAwJ,GACAsb,EAAAf,OAAAva,EAAA4K,MAIArU,KAAAf,KAAAU,EAAA,eAEA6iB,SAAA,KAAAwC,IAAA,SAAArlB,EAAAjB,EAAAD,GASA,QAAAwmB,KACAC,GAAA,EACAC,EAAAllB,OACAqgB,EAAA6E,EAAAnO,OAAAsJ,GAEA8E,EAAA,GAEA9E,EAAArgB,QACAolB,IAIA,QAAAA,KACA,IAAAH,EAAA,CAGA,GAAAI,GAAArL,WAAAgL,EACAC,IAAA,CAGA,KADA,GAAA7Q,GAAAiM,EAAArgB,OACAoU,GAAA,CAGA,IAFA8Q,EAAA7E,EACAA,OACA8E,EAAA/Q,GACA8Q,GACAA,EAAAC,GAAAG,KAGAH,GAAA,GACA/Q,EAAAiM,EAAArgB,OAEAklB,EAAA,KACAD,GAAA,EACAM,aAAAF,IAiBA,QAAAG,GAAAC,EAAAzY,GACAhO,KAAAymB,IAAAA,EACAzmB,KAAAgO,MAAAA,EAYA,QAAAqF,MAtEA,GAGA6S,GAHA9S,EAAA3T,EAAAD,WACA6hB,KACA4E,GAAA,EAEAE,EAAA,EAsCA/S,GAAA6H,SAAA,SAAAwL,GACA,GAAA7O,GAAA,GAAA9L,OAAA+H,UAAA7S,OAAA,EACA,IAAA6S,UAAA7S,OAAA,EACA,IAAA,GAAAL,GAAA,EAAAA,EAAAkT,UAAA7S,OAAAL,IACAiX,EAAAjX,EAAA,GAAAkT,UAAAlT,EAGA0gB,GAAA1W,KAAA,GAAA6b,GAAAC,EAAA7O,IACA,IAAAyJ,EAAArgB,QAAAilB,GACAjL,WAAAoL,EAAA,IASAI,EAAA3jB,UAAAyjB,IAAA,WACAtmB,KAAAymB,IAAA7S,MAAA,KAAA5T,KAAAgO,QAEAoF,EAAAsT,MAAA,UACAtT,EAAAuT,SAAA,EACAvT,EAAAwT,OACAxT,EAAAyT,QACAzT,EAAA0T,QAAA,GACA1T,EAAA2T,YAIA3T,EAAA4T,GAAA3T,EACAD,EAAA8K,YAAA7K,EACAD,EAAA6T,KAAA5T,EACAD,EAAA8T,IAAA7T,EACAD,EAAAgL,eAAA/K,EACAD,EAAA+T,mBAAA9T,EACAD,EAAAgU,KAAA/T,EAEAD,EAAAiU,QAAA,SAAA7Y,GACA,KAAA,IAAA5N,OAAA,qCAGAwS,EAAAoR,IAAA,WAAA,MAAA,KACApR,EAAAkU,MAAA,SAAArF,GACA,KAAA,IAAArhB,OAAA,mCAEAwS,EAAAmU,MAAA,WAAA,MAAA,SAEAC,IAAA,SAAA9mB,EAAAjB,EAAAD,IACA,SAAAM,IAEA,SAAAwa,GAgEA,QAAAzN,GAAAxK,GACA,KAAA,IAAAolB,YAAAC,EAAArlB,IAWA,QAAA0Z,GAAA/N,EAAA2F,GAGA,IAFA,GAAA3S,GAAAgN,EAAAhN,OACAsT,KACAtT,KACAsT,EAAAtT,GAAA2S,EAAA3F,EAAAhN,GAEA,OAAAsT,GAaA,QAAAqT,GAAAC,EAAAjU,GACA,GAAA+P,GAAAkE,EAAAjY,MAAA,KACA2E,EAAA,EACAoP,GAAA1iB,OAAA,IAGAsT,EAAAoP,EAAA,GAAA,IACAkE,EAAAlE,EAAA,IAGAkE,EAAAA,EAAA3Y,QAAA4Y,EAAA,IACA,IAAAC,GAAAF,EAAAjY,MAAA,KACAoY,EAAAhM,EAAA+L,EAAAnU,GAAA/C,KAAA,IACA,OAAA0D,GAAAyT,EAgBA,QAAAC,GAAAJ,GAMA,IALA,GAGAzY,GACA8Y,EAJAC,KACAC,EAAA,EACAnnB,EAAA4mB,EAAA5mB,OAGAA,EAAAmnB,GACAhZ,EAAAyY,EAAAQ,WAAAD,KACAhZ,GAAA,OAAA,OAAAA,GAAAnO,EAAAmnB,GAEAF,EAAAL,EAAAQ,WAAAD,KACA,QAAA,MAAAF,GACAC,EAAAvd,OAAA,KAAAwE,IAAA,KAAA,KAAA8Y,GAAA,QAIAC,EAAAvd,KAAAwE,GACAgZ,MAGAD,EAAAvd,KAAAwE,EAGA,OAAA+Y,GAWA,QAAAG,GAAAra,GACA,MAAA+N,GAAA/N,EAAA,SAAAmB,GACA,GAAA+Y,GAAA,EAOA,OANA/Y,GAAA,QACAA,GAAA,MACA+Y,GAAAI,EAAAnZ,IAAA,GAAA,KAAA,OACAA,EAAA,MAAA,KAAAA,GAEA+Y,GAAAI,EAAAnZ,KAEAyB,KAAA,IAYA,QAAA2X,GAAAC,GACA,MAAA,IAAAA,EAAA,GACAA,EAAA,GAEA,GAAAA,EAAA,GACAA,EAAA,GAEA,GAAAA,EAAA,GACAA,EAAA,GAEAC,EAcA,QAAAC,GAAAC,EAAAC,GAGA,MAAAD,GAAA,GAAA,IAAA,GAAAA,KAAA,GAAAC,IAAA,GAQA,QAAAC,GAAAC,EAAAC,EAAAC,GACA,GAAApO,GAAA,CAGA,KAFAkO,EAAAE,EAAAC,EAAAH,EAAAI,GAAAJ,GAAA,EACAA,GAAAG,EAAAH,EAAAC,GACAD,EAAAK,EAAAC,GAAA,EAAAxO,GAAA6N,EACAK,EAAAG,EAAAH,EAAAK,EAEA,OAAAF,GAAArO,GAAAuO,EAAA,GAAAL,GAAAA,EAAAO,IAUA,QAAAC,GAAAC,GAEA,GAEAC,GAIAC,EACAC,EACAtV,EACAuV,EACAlQ,EACAmB,EACA+N,EACAxoB,EAEAypB,EAfA1B,KACA2B,EAAAN,EAAAvoB,OAEAL,EAAA,EACAP,EAAA0pB,EACAC,EAAAC,CAqBA,KALAP,EAAAF,EAAAU,YAAAvE,GACA,EAAA+D,IACAA,EAAA,GAGAC,EAAA,EAAAD,EAAAC,IAAAA,EAEAH,EAAAnB,WAAAsB,IAAA,KACA7c,EAAA,aAEAqb,EAAAvd,KAAA4e,EAAAnB,WAAAsB,GAMA,KAAAtV,EAAAqV,EAAA,EAAAA,EAAA,EAAA,EAAAI,EAAAzV,GAAA,CAOA,IAAAuV,EAAAhpB,EAAA8Y,EAAA,EAAAmB,EAAA6N,EAEArU,GAAAyV,GACAhd,EAAA,iBAGA8b,EAAAJ,EAAAgB,EAAAnB,WAAAhU,OAEAuU,GAAAF,GAAAE,EAAAM,GAAAiB,EAAAvpB,GAAA8Y,KACA5M,EAAA,YAGAlM,GAAAgoB,EAAAlP,EACAtZ,EAAA4pB,GAAAnP,EAAAuP,EAAAvP,GAAAmP,EAAAX,EAAAA,EAAAxO,EAAAmP,IAEA5pB,EAAAwoB,GAfA/N,GAAA6N,EAmBAmB,EAAAnB,EAAAtoB,EACAsZ,EAAAwP,EAAAiB,EAAAN,IACA/c,EAAA,YAGA4M,GAAAmQ,CAIAJ,GAAAtB,EAAAlnB,OAAA,EACA+oB,EAAAlB,EAAAloB,EAAAgpB,EAAAH,EAAA,GAAAG,GAIAV,EAAAtoB,EAAA6oB,GAAAU,EAAA9pB,GACAyM,EAAA,YAGAzM,GAAA6oB,EAAAtoB,EAAA6oB,GACA7oB,GAAA6oB,EAGAtB,EAAAjP,OAAAtY,IAAA,EAAAP,GAIA,MAAAioB,GAAAH,GAUA,QAAAkC,GAAAb,GACA,GAAAnpB,GACA0oB,EACAuB,EACAC,EACAP,EACAL,EACAa,EACAlS,EACAuC,EACAza,EACAqqB,EAGAX,EAEAY,EACAb,EACAc,EANAxC,IAoBA,KAXAqB,EAAAvB,EAAAuB,GAGAM,EAAAN,EAAAvoB,OAGAZ,EAAA0pB,EACAhB,EAAA,EACAiB,EAAAC,EAGAN,EAAA,EAAAG,EAAAH,IAAAA,EACAc,EAAAjB,EAAAG,GACA,IAAAc,GACAtC,EAAAvd,KAAA2d,EAAAkC,GAeA,KAXAH,EAAAC,EAAApC,EAAAlnB,OAMAspB,GACApC,EAAAvd,KAAA+a,GAIAmE,EAAAQ,GAAA,CAIA,IAAAE,EAAAL,EAAAR,EAAA,EAAAG,EAAAH,IAAAA,EACAc,EAAAjB,EAAAG,GACAc,GAAApqB,GAAAmqB,EAAAC,IACAD,EAAAC,EAcA,KARAC,EAAAJ,EAAA,EACAE,EAAAnqB,EAAA6oB,GAAAiB,EAAApB,GAAA2B,IACA5d,EAAA,YAGAic,IAAAyB,EAAAnqB,GAAAqqB,EACArqB,EAAAmqB,EAEAb,EAAA,EAAAG,EAAAH,IAAAA,EAOA,GANAc,EAAAjB,EAAAG,GAEAtpB,EAAAoqB,KAAA1B,EAAAoB,GACArd,EAAA,YAGA2d,GAAApqB,EAAA,CAEA,IAAAiY,EAAAyQ,EAAAlO,EAAA6N,EACAtoB,EAAA4pB,GAAAnP,EAAAuP,EAAAvP,GAAAmP,EAAAX,EAAAA,EAAAxO,EAAAmP,IACA5pB,EAAAkY,GAFAuC,GAAA6N,EAKAiC,EAAArS,EAAAlY,EACAypB,EAAAnB,EAAAtoB,EACA+nB,EAAAvd,KACA2d,EAAAI,EAAAvoB,EAAAuqB,EAAAd,EAAA,KAEAvR,EAAA4Q,EAAAyB,EAAAd,EAGA1B,GAAAvd,KAAA2d,EAAAI,EAAArQ,EAAA,KACA0R,EAAAlB,EAAAC,EAAA2B,EAAAJ,GAAAC,GACAxB,EAAA,IACAuB,IAIAvB,IACA1oB,EAGA,MAAA8nB,GAAAtX,KAAA,IAcA,QAAA+Z,GAAApB,GACA,MAAA5B,GAAA4B,EAAA,SAAA3B,GACA,MAAAgD,GAAA/J,KAAA+G,GACA0B,EAAA1B,EAAApJ,MAAA,GAAAqM,eACAjD,IAeA,QAAAkD,GAAAvB,GACA,MAAA5B,GAAA4B,EAAA,SAAA3B,GACA,MAAAmD,GAAAlK,KAAA+G,GACA,OAAAwC,EAAAxC,GACAA,IAvdA,GAAAoD,GAAA,gBAAAxrB,IAAAA,IACAA,EAAAyrB,UAAAzrB,EACA0rB,EAAA,gBAAAzrB,IAAAA,IACAA,EAAAwrB,UAAAxrB,EACA0rB,EAAA,gBAAArrB,IAAAA,GAEAqrB,EAAArrB,SAAAqrB,GACAA,EAAAtrB,SAAAsrB,GACAA,EAAAprB,OAAAorB,KAEA7Q,EAAA6Q,EAQA,IAAAC,GAiCArW,EA9BAmV,EAAA,WAGAzB,EAAA,GACA0B,EAAA,EACAf,EAAA,GACAC,EAAA,GACAH,EAAA,IACAc,EAAA,GACAF,EAAA,IACApE,EAAA,IAGAkF,EAAA,QACAG,EAAA,eACAlD,EAAA,4BAGAH,GACA2D,SAAA,kDACAC,YAAA,iDACAC,gBAAA,iBAIApC,EAAAV,EAAA0B,EACAlB,EAAAzT,KAAAyT,MACAX,EAAAkD,OAAAC,YAycA,IA3BAL,GAMAtE,QAAA,QAQA4E,MACApC,OAAAtB,EACAoC,OAAA/B,GAEAiB,OAAAA,EACAc,OAAAA,EACAU,QAAAA,EACAH,UAAAA,GAOA,kBAAAjrB,IACA,gBAAAA,GAAAC,KACAD,EAAAC,IAEAD,EAAA,WAAA,WACA,MAAA0rB,SAEA,IAAAJ,GAAAE,EACA,GAAAzrB,EAAAD,SAAAwrB,EAEAE,EAAA1rB,QAAA4rB,MAGA,KAAArW,IAAAqW,GACAA,EAAAvQ,eAAA9F,KAAAiW,EAAAjW,GAAAqW,EAAArW,QAKAuF,GAAA8Q,SAAAA,GAGAprB,QAEAe,KAAAf,KAAA,mBAAAF,QAAAA,OAAA,mBAAAC,MAAAA,KAAA,mBAAAF,QAAAA,gBAEA8rB,IAAA,SAAAjrB,EAAAjB,EAAAD,GAsBA,YAKA,SAAAqb,GAAA9E,EAAA6V,GACA,MAAArc,QAAA1M,UAAAgY,eAAA9Z,KAAAgV,EAAA6V,GAGAnsB,EAAAD,QAAA,SAAAqsB,EAAApG,EAAAqG,EAAAjhB,GACA4a,EAAAA,GAAA,IACAqG,EAAAA,GAAA,GACA,IAAA/V,KAEA,IAAA,gBAAA8V,IAAA,IAAAA,EAAA7qB,OACA,MAAA+U,EAGA,IAAAgW,GAAA,KACAF,GAAAA,EAAAlc,MAAA8V,EAEA,IAAAuG,GAAA,GACAnhB,IAAA,gBAAAA,GAAAmhB,UACAA,EAAAnhB,EAAAmhB,QAGA,IAAA5W,GAAAyW,EAAA7qB,MAEAgrB,GAAA,GAAA5W,EAAA4W,IACA5W,EAAA4W,EAGA,KAAA,GAAArrB,GAAA,EAAAyU,EAAAzU,IAAAA,EAAA,CACA,GAEAsrB,GAAAC,EAAAtR,EAAArH,EAFAoB,EAAAkX,EAAAlrB,GAAAsO,QAAA8c,EAAA,OACA1N,EAAA1J,EAAAwX,QAAAL,EAGAzN,IAAA,GACA4N,EAAAtX,EAAAoQ,OAAA,EAAA1G,GACA6N,EAAAvX,EAAAoQ,OAAA1G,EAAA,KAEA4N,EAAAtX,EACAuX,EAAA,IAGAtR,EAAAwR,mBAAAH;AACA1Y,EAAA6Y,mBAAAF,GAEArR,EAAA9E,EAAA6E,GAEAF,EAAA3E,EAAA6E,IACA7E,EAAA6E,GAAAjQ,KAAA4I,GAEAwC,EAAA6E,IAAA7E,EAAA6E,GAAArH,GAJAwC,EAAA6E,GAAArH,EAQA,MAAAwC,GAGA,IAAA2E,GAAA5O,MAAA4O,SAAA,SAAAoJ,GACA,MAAA,mBAAAvU,OAAA1M,UAAA4X,SAAA1Z,KAAA+iB,SAGAuI,IAAA,SAAA3rB,EAAAjB,EAAAD,GAsBA,YAgDA,SAAAuc,GAAA+H,EAAAvkB,GACA,GAAAukB,EAAA/H,IAAA,MAAA+H,GAAA/H,IAAAxc,EAEA,KAAA,GADAwkB,MACApjB,EAAA,EAAAA,EAAAmjB,EAAA9iB,OAAAL,IACAojB,EAAApZ,KAAApL,EAAAukB,EAAAnjB,GAAAA,GAEA,OAAAojB,GApDA,GAAAuI,GAAA,SAAA/Y,GACA,aAAAA,IACA,IAAA,SACA,MAAAA,EAEA,KAAA,UACA,MAAAA,GAAA,OAAA,OAEA,KAAA,SACA,MAAAgZ,UAAAhZ,GAAAA,EAAA,EAEA,SACA,MAAA,IAIA9T,GAAAD,QAAA,SAAAuW,EAAA0P,EAAAqG,EAAAtd,GAOA,MANAiX,GAAAA,GAAA,IACAqG,EAAAA,GAAA,IACA,OAAA/V,IACAA,EAAA7N,QAGA,gBAAA6N,GACAgG,EAAAyQ,EAAAzW,GAAA,SAAA6E,GACA,GAAA6R,GAAAC,mBAAAJ,EAAA1R,IAAAkR,CACA,OAAApR,GAAA3E,EAAA6E,IACAmB,EAAAhG,EAAA6E,GAAA,SAAArH,GACA,MAAAkZ,GAAAC,mBAAAJ,EAAA/Y,MACA3C,KAAA6U,GAEAgH,EAAAC,mBAAAJ,EAAAvW,EAAA6E,OAEAhK,KAAA6U,GAIAjX,EACAke,mBAAAJ,EAAA9d,IAAAsd,EACAY,mBAAAJ,EAAAvW,IAFA,GAKA,IAAA2E,GAAA5O,MAAA4O,SAAA,SAAAoJ,GACA,MAAA,mBAAAvU,OAAA1M,UAAA4X,SAAA1Z,KAAA+iB,IAYA0I,EAAAjd,OAAAC,MAAA,SAAAuG,GACA,GAAAgO,KACA,KAAA,GAAAhP,KAAAgB,GACAxG,OAAA1M,UAAAgY,eAAA9Z,KAAAgV,EAAAhB,IAAAgP,EAAApZ,KAAAoK,EAEA,OAAAgP,SAGA4I,IAAA,SAAAjsB,EAAAjB,EAAAD,GACA,YAEAA,GAAA8pB,OAAA9pB,EAAAotB,MAAAlsB,EAAA,YACAlB,EAAA4qB,OAAA5qB,EAAAqtB,UAAAnsB,EAAA,cAEAosB,WAAA,GAAAC,WAAA,KAAAC,IAAA,SAAAtsB,EAAAjB,EAAAD,GA+BA,QAAAytB,KACAjtB,KAAAktB,SAAA,KACAltB,KAAAmtB,QAAA,KACAntB,KAAAotB,KAAA,KACAptB,KAAAqtB,KAAA,KACArtB,KAAAstB,KAAA,KACAttB,KAAAutB,SAAA,KACAvtB,KAAAwtB,KAAA,KACAxtB,KAAAytB,OAAA,KACAztB,KAAA0tB,MAAA,KACA1tB,KAAA2tB,SAAA,KACA3tB,KAAAukB,KAAA,KACAvkB,KAAA4tB,KAAA,KAqDA,QAAAC,GAAAC,EAAAC,EAAAC,GACA,GAAAF,GAAAG,EAAAH,IAAAA,YAAAb,GAAA,MAAAa,EAEA,IAAAttB,GAAA,GAAAysB,EAEA,OADAzsB,GAAAosB,MAAAkB,EAAAC,EAAAC,GACAxtB,EA6OA,QAAA0tB,GAAAnY,GAMA,MADAoY,GAAApY,KAAAA,EAAA8X,EAAA9X,IACAA,YAAAkX,GACAlX,EAAA7O,SADA+lB,EAAApqB,UAAAqE,OAAAnG,KAAAgV,GA4DA,QAAAqY,GAAA5mB,EAAAyd,GACA,MAAA4I,GAAArmB,GAAA,GAAA,GAAA4c,QAAAa,GAOA,QAAAoJ,GAAA7mB,EAAAyd,GACA,MAAAzd,GACAqmB,EAAArmB,GAAA,GAAA,GAAA8mB,cAAArJ,GADAA,EAyRA,QAAAkJ,GAAAI,GACA,MAAA,gBAAAA,GAGA,QAAAN,GAAAM,GACA,MAAA,gBAAAA,IAAA,OAAAA,EAGA,QAAAC,GAAAD,GACA,MAAA,QAAAA,EAEA,QAAAE,GAAAF,GACA,MAAA,OAAAA,EA5qBA,GAAAnD,GAAA1qB,EAAA,WAEAlB,GAAAotB,MAAAiB,EACAruB,EAAA4kB,QAAAgK,EACA5uB,EAAA8uB,cAAAD,EACA7uB,EAAA0H,OAAAgnB,EAEA1uB,EAAAytB,IAAAA,CAqBA,IAAAyB,GAAA,oBACAC,EAAA,WAIAC,GAAA,IAAA,IAAA,IAAA,IAAA,IAAA,KAAA,KAAA,KAGAC,GAAA,IAAA,IAAA,IAAA,KAAA,IAAA,KAAA9W,OAAA6W,GAGAE,GAAA,KAAA/W,OAAA8W,GAKAE,GAAA,IAAA,IAAA,IAAA,IAAA,KAAAhX,OAAA+W,GACAE,GAAA,IAAA,IAAA,KACAC,EAAA,IACAC,EAAA,wBACAC,EAAA,8BAEAC,GACAC,YAAA,EACAC,eAAA,GAGAC,GACAF,YAAA,EACAC,eAAA,GAGAE,GACAC,MAAA,EACAC,OAAA,EACAC,KAAA,EACAC,QAAA,EACAC,MAAA,EACAC,SAAA,EACAC,UAAA,EACAC,QAAA,EACAC,WAAA,EACAC,SAAA,GAEAC,EAAAzvB,EAAA,cAUAusB,GAAApqB,UAAA+pB,MAAA,SAAAkB,EAAAC,EAAAC,GACA,IAAAG,EAAAL,GACA,KAAA,IAAArJ,WAAA,+CAAAqJ,GAGA,IAAApY,GAAAoY,CAIApY,GAAAA,EAAA0P,MAEA,IAAAgL,GAAA1B,EAAAvK,KAAAzO,EACA,IAAA0a,EAAA,CACAA,EAAAA,EAAA,EACA,IAAAC,GAAAD,EAAAvF,aACA7qB,MAAAktB,SAAAmD,EACA3a,EAAAA,EAAAqP,OAAAqL,EAAApvB,QAOA,GAAAgtB,GAAAoC,GAAA1a,EAAA4a,MAAA,wBAAA,CACA,GAAAnD,GAAA,OAAAzX,EAAAqP,OAAA,EAAA,IACAoI,GAAAiD,GAAAb,EAAAa,KACA1a,EAAAA,EAAAqP,OAAA,GACA/kB,KAAAmtB,SAAA,GAIA,IAAAoC,EAAAa,KACAjD,GAAAiD,IAAAZ,EAAAY,IAAA,CAmBA,IAAA,GADAG,GAAA,GACA5vB,EAAA,EAAAA,EAAAquB,EAAAhuB,OAAAL,IAAA,CACA,GAAA6vB,GAAA9a,EAAAyW,QAAA6C,EAAAruB,GACA,MAAA6vB,IAAA,KAAAD,GAAAA,EAAAC,KACAD,EAAAC,GAKA,GAAApD,GAAAqD,CAGAA,GAFA,KAAAF,EAEA7a,EAAAuU,YAAA,KAIAvU,EAAAuU,YAAA,IAAAsG,GAKA,KAAAE,IACArD,EAAA1X,EAAA8I,MAAA,EAAAiS,GACA/a,EAAAA,EAAA8I,MAAAiS,EAAA,GACAzwB,KAAAotB,KAAAhB,mBAAAgB,IAIAmD,EAAA,EACA,KAAA,GAAA5vB,GAAA,EAAAA,EAAAouB,EAAA/tB,OAAAL,IAAA,CACA,GAAA6vB,GAAA9a,EAAAyW,QAAA4C,EAAApuB,GACA,MAAA6vB,IAAA,KAAAD,GAAAA,EAAAC,KACAD,EAAAC,GAGA,KAAAD,IACAA,EAAA7a,EAAA1U,QAEAhB,KAAAqtB,KAAA3X,EAAA8I,MAAA,EAAA+R,GACA7a,EAAAA,EAAA8I,MAAA+R,GAGAvwB,KAAA0wB,YAIA1wB,KAAAutB,SAAAvtB,KAAAutB,UAAA,EAIA,IAAAoD,GAAA,MAAA3wB,KAAAutB,SAAA,IACA,MAAAvtB,KAAAutB,SAAAvtB,KAAAutB,SAAAvsB,OAAA,EAGA,KAAA2vB,EAEA,IAAA,GADAC,GAAA5wB,KAAAutB,SAAA5d,MAAA,MACAhP,EAAA,EAAAG,EAAA8vB,EAAA5vB,OAAAF,EAAAH,EAAAA,IAAA,CACA,GAAAkwB,GAAAD,EAAAjwB,EACA,IAAAkwB,IACAA,EAAAP,MAAApB,GAAA,CAEA,IAAA,GADA4B,GAAA,GACApH,EAAA,EAAA9O,EAAAiW,EAAA7vB,OAAA4Z,EAAA8O,EAAAA,IAKAoH,GAJAD,EAAAzI,WAAAsB,GAAA,IAIA,IAEAmH,EAAAnH,EAIA,KAAAoH,EAAAR,MAAApB,GAAA,CACA,GAAA6B,GAAAH,EAAApS,MAAA,EAAA7d,GACAqwB,EAAAJ,EAAApS,MAAA7d,EAAA,GACAswB,EAAAJ,EAAAP,MAAAnB,EACA8B,KACAF,EAAApmB,KAAAsmB,EAAA,IACAD,EAAArY,QAAAsY,EAAA,KAEAD,EAAAhwB,SACA0U,EAAA,IAAAsb,EAAApgB,KAAA,KAAA8E,GAEA1V,KAAAutB,SAAAwD,EAAAngB,KAAA,IACA,SAaA,GAPA5Q,KAAAutB,SAAAvsB,OAAAiuB,EACAjvB,KAAAutB,SAAA,GAGAvtB,KAAAutB,SAAAvtB,KAAAutB,SAAA1C,eAGA8F,EAAA,CAOA,IAAA,GAFAO,GAAAlxB,KAAAutB,SAAA5d,MAAA,KACAwhB,KACAxwB,EAAA,EAAAA,EAAAuwB,EAAAlwB,SAAAL,EAAA,CACA,GAAAL,GAAA4wB,EAAAvwB,EACAwwB,GAAAxmB,KAAArK,EAAAgwB,MAAA,kBACA,OAAAlF,EAAAhB,OAAA9pB,GAAAA,GAEAN,KAAAutB,SAAA4D,EAAAvgB,KAAA,KAGA,GAAA+T,GAAA3kB,KAAAstB,KAAA,IAAAttB,KAAAstB,KAAA,GACA8D,EAAApxB,KAAAutB,UAAA,EACAvtB,MAAAqtB,KAAA+D,EAAAzM,EACA3kB,KAAA4tB,MAAA5tB,KAAAqtB,KAIAsD,IACA3wB,KAAAutB,SAAAvtB,KAAAutB,SAAAxI,OAAA,EAAA/kB,KAAAutB,SAAAvsB,OAAA,GACA,MAAA0U,EAAA,KACAA,EAAA,IAAAA,IAOA,IAAA0Z,EAAAiB,GAKA,IAAA,GAAA1vB,GAAA,EAAAG,EAAAguB,EAAA9tB,OAAAF,EAAAH,EAAAA,IAAA,CACA,GAAA0wB,GAAAvC,EAAAnuB,GACA2wB,EAAA5E,mBAAA2E,EACAC,KAAAD,IACAC,EAAAC,OAAAF,IAEA3b,EAAAA,EAAA/F,MAAA0hB,GAAAzgB,KAAA0gB,GAMA,GAAA9D,GAAA9X,EAAAyW,QAAA,IACA,MAAAqB,IAEAxtB,KAAAwtB,KAAA9X,EAAAqP,OAAAyI,GACA9X,EAAAA,EAAA8I,MAAA,EAAAgP,GAEA,IAAAgE,GAAA9b,EAAAyW,QAAA,IAoBA,IAnBA,KAAAqF,GACAxxB,KAAAytB,OAAA/X,EAAAqP,OAAAyM,GACAxxB,KAAA0tB,MAAAhY,EAAAqP,OAAAyM,EAAA,GACAzD,IACA/tB,KAAA0tB,MAAAyC,EAAAvD,MAAA5sB,KAAA0tB,QAEAhY,EAAAA,EAAA8I,MAAA,EAAAgT,IACAzD,IAEA/tB,KAAAytB,OAAA,GACAztB,KAAA0tB,UAEAhY,IAAA1V,KAAA2tB,SAAAjY,GACA8Z,EAAAa,IACArwB,KAAAutB,WAAAvtB,KAAA2tB,WACA3tB,KAAA2tB,SAAA,KAIA3tB,KAAA2tB,UAAA3tB,KAAAytB,OAAA,CACA,GAAA9I,GAAA3kB,KAAA2tB,UAAA,GACArtB,EAAAN,KAAAytB,QAAA,EACAztB,MAAAukB,KAAAI,EAAArkB,EAKA,MADAN,MAAA4tB,KAAA5tB,KAAAkH,SACAlH,MAcAitB,EAAApqB,UAAAqE,OAAA,WACA,GAAAkmB,GAAAptB,KAAAotB,MAAA,EACAA,KACAA,EAAAV,mBAAAU,GACAA,EAAAA,EAAAne,QAAA,OAAA,KACAme,GAAA,IAGA,IAAAF,GAAAltB,KAAAktB,UAAA,GACAS,EAAA3tB,KAAA2tB,UAAA,GACAH,EAAAxtB,KAAAwtB,MAAA,GACAH,GAAA,EACAK,EAAA,EAEA1tB,MAAAqtB,KACAA,EAAAD,EAAAptB,KAAAqtB,KACArtB,KAAAutB,WACAF,EAAAD,GAAA,KAAAptB,KAAAutB,SAAApB,QAAA,KACAnsB,KAAAutB,SACA,IAAAvtB,KAAAutB,SAAA,KACAvtB,KAAAstB,OACAD,GAAA,IAAArtB,KAAAstB,OAIAttB,KAAA0tB,OACAO,EAAAjuB,KAAA0tB,QACAne,OAAAC,KAAAxP,KAAA0tB,OAAA1sB,SACA0sB,EAAAyC,EAAAtD,UAAA7sB,KAAA0tB,OAGA,IAAAD,GAAAztB,KAAAytB,QAAAC,GAAA,IAAAA,GAAA,EAsBA,OApBAR,IAAA,MAAAA,EAAAnI,OAAA,MAAAmI,GAAA,KAIAltB,KAAAmtB,WACAD,GAAAsC,EAAAtC,KAAAG,KAAA,GACAA,EAAA,MAAAA,GAAA,IACAM,GAAA,MAAAA,EAAAjJ,OAAA,KAAAiJ,EAAA,IAAAA,IACAN,IACAA,EAAA,IAGAG,GAAA,MAAAA,EAAA9I,OAAA,KAAA8I,EAAA,IAAAA,GACAC,GAAA,MAAAA,EAAA/I,OAAA,KAAA+I,EAAA,IAAAA,GAEAE,EAAAA,EAAA1e,QAAA,QAAA,SAAAqhB,GACA,MAAA5D,oBAAA4D,KAEA7C,EAAAA,EAAAxe,QAAA,IAAA,OAEAie,EAAAG,EAAAM,EAAAF,EAAAD,GAOAP,EAAApqB,UAAAuhB,QAAA,SAAAa,GACA,MAAAjlB,MAAAsuB,cAAAT,EAAA5I,GAAA,GAAA,IAAA/d,UAQA+lB,EAAApqB,UAAAyrB,cAAA,SAAArJ,GACA,GAAAkJ,EAAAlJ,GAAA,CACA,GAAAwM,GAAA,GAAAxE,EACAwE,GAAA7E,MAAA3H,GAAA,GAAA,GACAA,EAAAwM,EAGA,GAAAnd,GAAA,GAAA2Y,EAUA,IATA1d,OAAAC,KAAAxP,MAAAkb,QAAA,SAAAN,GACAtG,EAAAsG,GAAA5a,KAAA4a,IACA5a,MAIAsU,EAAAkZ,KAAAvI,EAAAuI,KAGA,KAAAvI,EAAA2I,KAEA,MADAtZ,GAAAsZ,KAAAtZ,EAAApN,SACAoN,CAIA,IAAA2Q,EAAAkI,UAAAlI,EAAAiI,SAcA,MAZA3d,QAAAC,KAAAyV,GAAA/J,QAAA,SAAAN,GACA,aAAAA,IACAtG,EAAAsG,GAAAqK,EAAArK,MAIA4U,EAAAlb,EAAA4Y,WACA5Y,EAAAiZ,WAAAjZ,EAAAqZ,WACArZ,EAAAiQ,KAAAjQ,EAAAqZ,SAAA,KAGArZ,EAAAsZ,KAAAtZ,EAAApN,SACAoN,CAGA,IAAA2Q,EAAAiI,UAAAjI,EAAAiI,WAAA5Y,EAAA4Y,SAAA,CASA,IAAAsC,EAAAvK,EAAAiI,UAKA,MAJA3d,QAAAC,KAAAyV,GAAA/J,QAAA,SAAAN,GACAtG,EAAAsG,GAAAqK,EAAArK,KAEAtG,EAAAsZ,KAAAtZ,EAAApN,SACAoN,CAIA,IADAA,EAAA4Y,SAAAjI,EAAAiI,SACAjI,EAAAoI,MAAAkC,EAAAtK,EAAAiI,UASA5Y,EAAAqZ,SAAA1I,EAAA0I,aATA,CAEA,IADA,GAAA+D,IAAAzM,EAAA0I,UAAA,IAAAhe,MAAA,KACA+hB,EAAA1wB,UAAAikB,EAAAoI,KAAAqE,EAAAC,WACA1M,EAAAoI,OAAApI,EAAAoI,KAAA,IACApI,EAAAsI,WAAAtI,EAAAsI,SAAA,IACA,KAAAmE,EAAA,IAAAA,EAAA/Y,QAAA,IACA+Y,EAAA1wB,OAAA,GAAA0wB,EAAA/Y,QAAA,IACArE,EAAAqZ,SAAA+D,EAAA9gB,KAAA,KAWA,GAPA0D,EAAAmZ,OAAAxI,EAAAwI,OACAnZ,EAAAoZ,MAAAzI,EAAAyI,MACApZ,EAAA+Y,KAAApI,EAAAoI,MAAA,GACA/Y,EAAA8Y,KAAAnI,EAAAmI,KACA9Y,EAAAiZ,SAAAtI,EAAAsI,UAAAtI,EAAAoI,KACA/Y,EAAAgZ,KAAArI,EAAAqI,KAEAhZ,EAAAqZ,UAAArZ,EAAAmZ,OAAA,CACA,GAAA9I,GAAArQ,EAAAqZ,UAAA,GACArtB,EAAAgU,EAAAmZ,QAAA,EACAnZ,GAAAiQ,KAAAI,EAAArkB,EAIA,MAFAgU,GAAA6Y,QAAA7Y,EAAA6Y,SAAAlI,EAAAkI,QACA7Y,EAAAsZ,KAAAtZ,EAAApN,SACAoN,EAGA,GAAAsd,GAAAtd,EAAAqZ,UAAA,MAAArZ,EAAAqZ,SAAAjJ,OAAA,GACAmN,EACA5M,EAAAoI,MACApI,EAAA0I,UAAA,MAAA1I,EAAA0I,SAAAjJ,OAAA,GAEAoN,EAAAD,GAAAD,GACAtd,EAAA+Y,MAAApI,EAAA0I,SACAoE,EAAAD,EACAE,EAAA1d,EAAAqZ,UAAArZ,EAAAqZ,SAAAhe,MAAA,SACA+hB,EAAAzM,EAAA0I,UAAA1I,EAAA0I,SAAAhe,MAAA,SACAsiB,EAAA3d,EAAA4Y,WAAAsC,EAAAlb,EAAA4Y,SA2BA,IApBA+E,IACA3d,EAAAiZ,SAAA,GACAjZ,EAAAgZ,KAAA,KACAhZ,EAAA+Y,OACA,KAAA2E,EAAA,GAAAA,EAAA,GAAA1d,EAAA+Y,KACA2E,EAAArZ,QAAArE,EAAA+Y,OAEA/Y,EAAA+Y,KAAA,GACApI,EAAAiI,WACAjI,EAAAsI,SAAA,KACAtI,EAAAqI,KAAA,KACArI,EAAAoI,OACA,KAAAqE,EAAA,GAAAA,EAAA,GAAAzM,EAAAoI,KACAqE,EAAA/Y,QAAAsM,EAAAoI,OAEApI,EAAAoI,KAAA,MAEAyE,EAAAA,IAAA,KAAAJ,EAAA,IAAA,KAAAM,EAAA,KAGAH,EAEAvd,EAAA+Y,KAAApI,EAAAoI,MAAA,KAAApI,EAAAoI,KACApI,EAAAoI,KAAA/Y,EAAA+Y,KACA/Y,EAAAiZ,SAAAtI,EAAAsI,UAAA,KAAAtI,EAAAsI,SACAtI,EAAAsI,SAAAjZ,EAAAiZ,SACAjZ,EAAAmZ,OAAAxI,EAAAwI,OACAnZ,EAAAoZ,MAAAzI,EAAAyI,MACAsE,EAAAN,MAEA,IAAAA,EAAA1wB,OAGAgxB,IAAAA,MACAA,EAAA/X,MACA+X,EAAAA,EAAAja,OAAA2Z,GACApd,EAAAmZ,OAAAxI,EAAAwI,OACAnZ,EAAAoZ,MAAAzI,EAAAyI,UACA,KAAAe,EAAAxJ,EAAAwI,QAAA,CAIA,GAAAwE,EAAA,CACA3d,EAAAiZ,SAAAjZ,EAAA+Y,KAAA2E,EAAAL,OAIA,IAAAO,GAAA5d,EAAA+Y,MAAA/Y,EAAA+Y,KAAAlB,QAAA,KAAA,EACA7X,EAAA+Y,KAAA1d,MAAA,MAAA,CACAuiB,KACA5d,EAAA8Y,KAAA8E,EAAAP,QACArd,EAAA+Y,KAAA/Y,EAAAiZ,SAAA2E,EAAAP,SAWA,MARArd,GAAAmZ,OAAAxI,EAAAwI,OACAnZ,EAAAoZ,MAAAzI,EAAAyI,MAEAc,EAAAla,EAAAqZ,WAAAa,EAAAla,EAAAmZ,UACAnZ,EAAAiQ,MAAAjQ,EAAAqZ,SAAArZ,EAAAqZ,SAAA,KACArZ,EAAAmZ,OAAAnZ,EAAAmZ,OAAA,KAEAnZ,EAAAsZ,KAAAtZ,EAAApN,SACAoN,EAGA,IAAA0d,EAAAhxB,OAWA,MARAsT,GAAAqZ,SAAA,KAEArZ,EAAAmZ,OACAnZ,EAAAiQ,KAAA,IAAAjQ,EAAAmZ,OAEAnZ,EAAAiQ,KAAA,KAEAjQ,EAAAsZ,KAAAtZ,EAAApN,SACAoN,CAcA,KAAA,GARAuP,GAAAmO,EAAAxT,MAAA,IAAA,GACA2T,GACA7d,EAAA+Y,MAAApI,EAAAoI,QAAA,MAAAxJ,GAAA,OAAAA,IACA,KAAAA,EAIAD,EAAA,EACAjjB,EAAAqxB,EAAAhxB,OAAAL,GAAA,EAAAA,IACAkjB,EAAAmO,EAAArxB,GACA,KAAAkjB,EACAmO,EAAA/Y,OAAAtY,EAAA,GACA,OAAAkjB,GACAmO,EAAA/Y,OAAAtY,EAAA,GACAijB,KACAA,IACAoO,EAAA/Y,OAAAtY,EAAA,GACAijB,IAKA,KAAAkO,IAAAC,EACA,KAAAnO,IAAAA,EACAoO,EAAArZ,QAAA,OAIAmZ,GAAA,KAAAE,EAAA,IACAA,EAAA,IAAA,MAAAA,EAAA,GAAAtN,OAAA,IACAsN,EAAArZ,QAAA,IAGAwZ,GAAA,MAAAH,EAAAphB,KAAA,KAAAmU,OAAA,KACAiN,EAAArnB,KAAA,GAGA,IAAAka,GAAA,KAAAmN,EAAA,IACAA,EAAA,IAAA,MAAAA,EAAA,GAAAtN,OAAA,EAGA,IAAAuN,EAAA,CACA3d,EAAAiZ,SAAAjZ,EAAA+Y,KAAAxI,EAAA,GACAmN,EAAAhxB,OAAAgxB,EAAAL,QAAA,EAIA,IAAAO,GAAA5d,EAAA+Y,MAAA/Y,EAAA+Y,KAAAlB,QAAA,KAAA,EACA7X,EAAA+Y,KAAA1d,MAAA,MAAA,CACAuiB,KACA5d,EAAA8Y,KAAA8E,EAAAP,QACArd,EAAA+Y,KAAA/Y,EAAAiZ,SAAA2E,EAAAP,SAyBA,MArBAG,GAAAA,GAAAxd,EAAA+Y,MAAA2E,EAAAhxB,OAEA8wB,IAAAjN,GACAmN,EAAArZ,QAAA,IAGAqZ,EAAAhxB,OAIAsT,EAAAqZ,SAAAqE,EAAAphB,KAAA,MAHA0D,EAAAqZ,SAAA,KACArZ,EAAAiQ,KAAA,MAMAiK,EAAAla,EAAAqZ,WAAAa,EAAAla,EAAAmZ,UACAnZ,EAAAiQ,MAAAjQ,EAAAqZ,SAAArZ,EAAAqZ,SAAA,KACArZ,EAAAmZ,OAAAnZ,EAAAmZ,OAAA,KAEAnZ,EAAA8Y,KAAAnI,EAAAmI,MAAA9Y,EAAA8Y,KACA9Y,EAAA6Y,QAAA7Y,EAAA6Y,SAAAlI,EAAAkI,QACA7Y,EAAAsZ,KAAAtZ,EAAApN,SACAoN,GAGA2Y,EAAApqB,UAAA6tB,UAAA,WACA,GAAArD,GAAArtB,KAAAqtB,KACAC,EAAAqB,EAAAxK,KAAAkJ,EACAC,KACAA,EAAAA,EAAA,GACA,MAAAA,IACAttB,KAAAstB,KAAAA,EAAAvI,OAAA,IAEAsI,EAAAA,EAAAtI,OAAA,EAAAsI,EAAArsB,OAAAssB,EAAAtsB,SAEAqsB,IAAArtB,KAAAutB,SAAAF,MAkBAjC,SAAA,GAAA+E,YAAA,KAAAiC,IAAA,SAAA1xB,EAAAjB,EAAAD,GACA,YAIA,SAAA6yB,GAAA/vB,EAAAgwB,EAAAC,GAEAA,EAAAA,GAAA,CAEA,IAAAC,GAAAF,GAAAA,EAAAtxB,OACAyxB,EAAAD,EAAAF,EAAA,GAAAC,EAAAjwB,EAAAtB,OACA0xB,EAAAC,EAAArwB,EAAA,EAAAmwB,EAAAF,GAAA,GACAK,IAEA,KAAAF,EAAA,MAAAE,EAEA,IAAAC,GAAAC,EAAAC,EAAAC,EAAAre,EAAAmD,EAAA/M,CAKA,IAHAynB,IAAAE,EAAAO,EAAA3wB,EAAAgwB,EAAAI,EAAAH,IAGAjwB,EAAAtB,OAAA,GAAAuxB,EAAA,CACAM,EAAAE,EAAAzwB,EAAA,GACAwwB,EAAAE,EAAA1wB,EAAA,EAEA,KAAA,GAAA3B,GAAA4xB,EAAAE,EAAA9xB,EAAAA,GAAA4xB,EACA5d,EAAArS,EAAA3B,GACAmX,EAAAxV,EAAA3B,EAAA,GACAkyB,EAAAle,IAAAke,EAAAle,GACAme,EAAAhb,IAAAgb,EAAAhb,GACAnD,EAAAoe,IAAAA,EAAApe,GACAmD,EAAAkb,IAAAA,EAAAlb,EAIA/M,GAAAyK,KAAAC,IAAAsd,EAAAF,EAAAG,EAAAF,GAKA,MAFAI,GAAAR,EAAAE,EAAAL,EAAAM,EAAAC,EAAA/nB,GAEA6nB,EAIA,QAAAD,GAAArwB,EAAAkI,EAAAsX,EAAAyQ,EAAAY,GACA,GACAxyB,GAAA+oB,EAAA7F,EADAuP,EAAA,CAIA,KAAAzyB,EAAA6J,EAAAkf,EAAA5H,EAAAyQ,EAAAzQ,EAAAnhB,EAAAA,GAAA4xB,EACAa,IAAA9wB,EAAAonB,GAAApnB,EAAA3B,KAAA2B,EAAA3B,EAAA,GAAA2B,EAAAonB,EAAA,IACAA,EAAA/oB,CAIA,IAAAwyB,IAAAC,EAAA,EACA,IAAAzyB,EAAA6J,EAAAsX,EAAAnhB,EAAAA,GAAA4xB,EAAA1O,EAAAwP,EAAA1yB,EAAA2B,EAAA3B,GAAA2B,EAAA3B,EAAA,GAAAkjB,OAEA,KAAAljB,EAAAmhB,EAAAyQ,EAAA5xB,GAAA6J,EAAA7J,GAAA4xB,EAAA1O,EAAAwP,EAAA1yB,EAAA2B,EAAA3B,GAAA2B,EAAA3B,EAAA,GAAAkjB,EAGA,OAAAA,GAIA,QAAAyP,GAAA9oB,EAAAsX,GACA,IAAAtX,EAAA,MAAAA,EACAsX,KAAAA,EAAAtX,EAEA,IACA+oB,GADA5O,EAAAna,CAEA,GAGA,IAFA+oB,GAAA,EAEA5O,EAAA6O,UAAAC,EAAA9O,EAAAA,EAAArE,OAAA,IAAAoT,EAAA/O,EAAAgP,KAAAhP,EAAAA,EAAArE,MAOAqE,EAAAA,EAAArE,SAPA,CAGA,GAFAsT,EAAAjP,GACAA,EAAA7C,EAAA6C,EAAAgP,KACAhP,IAAAA,EAAArE,KAAA,MAAA,KACAiT,IAAA,QAKAA,GAAA5O,IAAA7C,EAEA,OAAAA,GAIA,QAAAoR,GAAAW,EAAAjB,EAAAL,EAAAM,EAAAC,EAAA/nB,EAAA+oB,GACA,GAAAD,EAAA,EAGAC,GAAA/oB,GAAAgpB,EAAAF,EAAAhB,EAAAC,EAAA/nB,EAMA,KAJA,GACA4oB,GAAArT,EADA0T,EAAAH,EAIAA,EAAAF,OAAAE,EAAAvT,MAIA,GAHAqT,EAAAE,EAAAF,KACArT,EAAAuT,EAAAvT,KAEAvV,EAAAkpB,EAAAJ,EAAAhB,EAAAC,EAAA/nB,GAAAmpB,EAAAL,GAEAjB,EAAAjoB,KAAAgpB,EAAAhzB,EAAA4xB,GACAK,EAAAjoB,KAAAkpB,EAAAlzB,EAAA4xB,GACAK,EAAAjoB,KAAA2V,EAAA3f,EAAA4xB,GAEAqB,EAAAC,GAGAA,EAAAvT,EAAAA,KACA0T,EAAA1T,EAAAA,SAQA,IAHAuT,EAAAvT,EAGAuT,IAAAG,EAAA,CAEAF,EAIA,IAAAA,GACAD,EAAAM,EAAAN,EAAAjB,EAAAL,GACAW,EAAAW,EAAAjB,EAAAL,EAAAM,EAAAC,EAAA/nB,EAAA,IAGA,IAAA+oB,GACAM,EAAAP,EAAAjB,EAAAL,EAAAM,EAAAC,EAAA/nB,GATAmoB,EAAAI,EAAAO,GAAAjB,EAAAL,EAAAM,EAAAC,EAAA/nB,EAAA,EAYA,SAMA,QAAAmpB,GAAAL,GACA,GAAApzB,GAAAozB,EAAAF,KACA3uB,EAAA6uB,EACAQ,EAAAR,EAAAvT,IAEA,IAAAoT,EAAAjzB,EAAAuE,EAAAqvB,IAAA,EAAA,OAAA,CAKA,KAFA,GAAA1P,GAAAkP,EAAAvT,KAAAA,KAEAqE,IAAAkP,EAAAF,MAAA,CACA,GAAAW,EAAA7zB,EAAAkU,EAAAlU,EAAAqX,EAAA9S,EAAA2P,EAAA3P,EAAA8S,EAAAuc,EAAA1f,EAAA0f,EAAAvc,EAAA6M,EAAAhQ,EAAAgQ,EAAA7M,IACA4b,EAAA/O,EAAAgP,KAAAhP,EAAAA,EAAArE,OAAA,EAAA,OAAA,CACAqE,GAAAA,EAAArE,KAGA,OAAA,EAGA,QAAA2T,GAAAJ,EAAAhB,EAAAC,EAAA/nB,GACA,GAAAtK,GAAAozB,EAAAF,KACA3uB,EAAA6uB,EACAQ,EAAAR,EAAAvT,IAEA,IAAAoT,EAAAjzB,EAAAuE,EAAAqvB,IAAA,EAAA,OAAA,CAeA,KAZA,GAAAE,GAAA9zB,EAAAkU,EAAA3P,EAAA2P,EAAAlU,EAAAkU,EAAA0f,EAAA1f,EAAAlU,EAAAkU,EAAA0f,EAAA1f,EAAA3P,EAAA2P,EAAA0f,EAAA1f,EAAA3P,EAAA2P,EAAA0f,EAAA1f,EACA6f,EAAA/zB,EAAAqX,EAAA9S,EAAA8S,EAAArX,EAAAqX,EAAAuc,EAAAvc,EAAArX,EAAAqX,EAAAuc,EAAAvc,EAAA9S,EAAA8S,EAAAuc,EAAAvc,EAAA9S,EAAA8S,EAAAuc,EAAAvc,EACA2c,EAAAh0B,EAAAkU,EAAA3P,EAAA2P,EAAAlU,EAAAkU,EAAA0f,EAAA1f,EAAAlU,EAAAkU,EAAA0f,EAAA1f,EAAA3P,EAAA2P,EAAA0f,EAAA1f,EAAA3P,EAAA2P,EAAA0f,EAAA1f,EACA+f,EAAAj0B,EAAAqX,EAAA9S,EAAA8S,EAAArX,EAAAqX,EAAAuc,EAAAvc,EAAArX,EAAAqX,EAAAuc,EAAAvc,EAAA9S,EAAA8S,EAAAuc,EAAAvc,EAAA9S,EAAA8S,EAAAuc,EAAAvc,EAGA6c,EAAAC,EAAAL,EAAAC,EAAA3B,EAAAC,EAAA/nB,GACA8pB,EAAAD,EAAAH,EAAAC,EAAA7B,EAAAC,EAAA/nB,GAGA4Z,EAAAkP,EAAAiB,MAEAnQ,GAAAA,EAAAoQ,GAAAF,GAAA,CACA,GAAAlQ,IAAAkP,EAAAF,MAAAhP,IAAAkP,EAAAvT,MACAgU,EAAA7zB,EAAAkU,EAAAlU,EAAAqX,EAAA9S,EAAA2P,EAAA3P,EAAA8S,EAAAuc,EAAA1f,EAAA0f,EAAAvc,EAAA6M,EAAAhQ,EAAAgQ,EAAA7M,IACA4b,EAAA/O,EAAAgP,KAAAhP,EAAAA,EAAArE,OAAA,EAAA,OAAA,CACAqE,GAAAA,EAAAmQ,MAMA,IAFAnQ,EAAAkP,EAAAmB,MAEArQ,GAAAA,EAAAoQ,GAAAJ,GAAA,CACA,GAAAhQ,IAAAkP,EAAAF,MAAAhP,IAAAkP,EAAAvT,MACAgU,EAAA7zB,EAAAkU,EAAAlU,EAAAqX,EAAA9S,EAAA2P,EAAA3P,EAAA8S,EAAAuc,EAAA1f,EAAA0f,EAAAvc,EAAA6M,EAAAhQ,EAAAgQ,EAAA7M,IACA4b,EAAA/O,EAAAgP,KAAAhP,EAAAA,EAAArE,OAAA,EAAA,OAAA,CACAqE,GAAAA,EAAAqQ,MAGA,OAAA,EAIA,QAAAb,GAAA3pB,EAAAooB,EAAAL,GACA,GAAA5N,GAAAna,CACA,GAAA,CACA,GAAA/J,GAAAkkB,EAAAgP,KACA3uB,EAAA2f,EAAArE,KAAAA,IAGA2U,GAAAx0B,EAAAkkB,EAAAA,EAAArE,KAAAtb,IAAAkwB,EAAAz0B,EAAAuE,IAAAkwB,EAAAlwB,EAAAvE,KAEAmyB,EAAAjoB,KAAAlK,EAAAE,EAAA4xB,GACAK,EAAAjoB,KAAAga,EAAAhkB,EAAA4xB,GACAK,EAAAjoB,KAAA3F,EAAArE,EAAA4xB,GAGAqB,EAAAjP,GACAiP,EAAAjP,EAAArE,MAEAqE,EAAAna,EAAAxF,GAEA2f,EAAAA,EAAArE,WACAqE,IAAAna,EAEA,OAAAma,GAIA,QAAAyP,GAAA5pB,EAAAooB,EAAAL,EAAAM,EAAAC,EAAA/nB,GAEA,GAAAtK,GAAA+J,CACA,GAAA,CAEA,IADA,GAAAxF,GAAAvE,EAAA6f,KAAAA,KACAtb,IAAAvE,EAAAkzB,MAAA,CACA,GAAAlzB,EAAAE,IAAAqE,EAAArE,GAAAw0B,EAAA10B,EAAAuE,GAAA,CAEA,GAAAqvB,GAAAe,EAAA30B,EAAAuE,EASA,OANAvE,GAAA6yB,EAAA7yB,EAAAA,EAAA6f,MACA+T,EAAAf,EAAAe,EAAAA,EAAA/T,MAGA4S,EAAAzyB,EAAAmyB,EAAAL,EAAAM,EAAAC,EAAA/nB,OACAmoB,GAAAmB,EAAAzB,EAAAL,EAAAM,EAAAC,EAAA/nB,GAGA/F,EAAAA,EAAAsb,KAEA7f,EAAAA,EAAA6f,WACA7f,IAAA+J,GAIA,QAAAyoB,GAAA3wB,EAAAgwB,EAAAI,EAAAH,GACA,GACA5xB,GAAAyU,EAAA5K,EAAAsX,EAAAuT,EADAhU,IAGA,KAAA1gB,EAAA,EAAAyU,EAAAkd,EAAAtxB,OAAAoU,EAAAzU,EAAAA,IACA6J,EAAA8nB,EAAA3xB,GAAA4xB,EACAzQ,EAAA1M,EAAA,EAAAzU,EAAA2xB,EAAA3xB,EAAA,GAAA4xB,EAAAjwB,EAAAtB,OACAq0B,EAAA1C,EAAArwB,EAAAkI,EAAAsX,EAAAyQ,GAAA,GACA8C,IAAAA,EAAA/U,OAAA+U,EAAA7B,SAAA,GACAnS,EAAA1W,KAAA2qB,EAAAD,GAMA,KAHAhU,EAAArK,KAAAue,GAGA50B,EAAA,EAAAA,EAAA0gB,EAAArgB,OAAAL,IACA60B,EAAAnU,EAAA1gB,GAAA+xB,GACAA,EAAAY,EAAAZ,EAAAA,EAAApS,KAGA,OAAAoS,GAGA,QAAA6C,GAAA90B,EAAAuE,GACA,MAAAvE,GAAAkU,EAAA3P,EAAA2P,EAIA,QAAA6gB,GAAAC,EAAA/C,GAEA,GADAA,EAAAgD,EAAAD,EAAA/C,GACA,CACA,GAAA1tB,GAAAowB,EAAA1C,EAAA+C,EACAnC,GAAAtuB,EAAAA,EAAAsb,OAKA,QAAAoV,GAAAD,EAAA/C,GACA,GAIAnI,GAJA5F,EAAA+N,EACAiD,EAAAF,EAAA9gB,EACAihB,EAAAH,EAAA3d,EACA+d,IAAAC,EAAAA,EAKA,GAAA,CACA,GAAAF,GAAAjR,EAAA7M,GAAA8d,GAAAjR,EAAArE,KAAAxI,EAAA,CACA,GAAAnD,GAAAgQ,EAAAhQ,GAAAihB,EAAAjR,EAAA7M,IAAA6M,EAAArE,KAAA3L,EAAAgQ,EAAAhQ,IAAAgQ,EAAArE,KAAAxI,EAAA6M,EAAA7M,EACA6d,IAAAhhB,GAAAA,EAAAkhB,IACAA,EAAAlhB,EACA4V,EAAA5F,EAAAhQ,EAAAgQ,EAAArE,KAAA3L,EAAAgQ,EAAAA,EAAArE,MAGAqE,EAAAA,EAAArE,WACAqE,IAAA+N,EAEA,KAAAnI,EAAA,MAAA,KAMA,IAEAwL,GAFA/B,EAAAzJ,EACAyL,EAAAF,EAAAA,CAKA,KAFAnR,EAAA4F,EAAAjK,KAEAqE,IAAAqP,GACA2B,GAAAhR,EAAAhQ,GAAAgQ,EAAAhQ,GAAA4V,EAAA5V,GACA2f,EAAAsB,EAAArL,EAAAzS,EAAA6d,EAAAE,EAAAD,EAAArL,EAAA5V,EAAA4V,EAAAzS,EAAA8d,EAAArL,EAAAzS,EAAA+d,EAAAF,EAAAC,EAAAjR,EAAAhQ,EAAAgQ,EAAA7M,KAEAie,EAAAvgB,KAAAygB,IAAAL,EAAAjR,EAAA7M,IAAA6d,EAAAhR,EAAAhQ,IAEAqhB,EAAAD,GAAAA,IAAAC,GAAArR,EAAAhQ,EAAA4V,EAAA5V,IAAAugB,EAAAvQ,EAAA8Q,KACAlL,EAAA5F,EACAqR,EAAAD,IAIApR,EAAAA,EAAArE,IAGA,OAAAiK,GAIA,QAAAwJ,GAAAvpB,EAAAqoB,EAAAC,EAAA/nB,GACA,GAAA4Z,GAAAna,CACA,GACA,QAAAma,EAAAoQ,IAAApQ,EAAAoQ,EAAAH,EAAAjQ,EAAAhQ,EAAAgQ,EAAA7M,EAAA+a,EAAAC,EAAA/nB,IACA4Z,EAAAqQ,MAAArQ,EAAAgP,KACAhP,EAAAmQ,MAAAnQ,EAAArE,KACAqE,EAAAA,EAAArE,WACAqE,IAAAna,EAEAma,GAAAqQ,MAAAF,MAAA,KACAnQ,EAAAqQ,MAAA,KAEAkB,EAAAvR,GAKA,QAAAuR,GAAAb,GACA,GAAA10B,GAAAgkB,EAAAtM,EAAAnY,EAAAi2B,EAAAC,EAAAC,EAAAC,EACAC,EAAA,CAEA,GAAA,CAMA,IALA5R,EAAA0Q,EACAA,EAAA,KACAc,EAAA,KACAC,EAAA,EAEAzR,GAAA,CAIA,IAHAyR,IACA/d,EAAAsM,EACA0R,EAAA,EACA11B,EAAA,EAAA41B,EAAA51B,IACA01B,IACAhe,EAAAA,EAAAyc,MACAzc,GAHA1X,KAQA,IAFA21B,EAAAC,EAEAF,EAAA,GAAAC,EAAA,GAAAje,GAEA,IAAAge,GACAn2B,EAAAmY,EACAA,EAAAA,EAAAyc,MACAwB,KACA,IAAAA,GAAAje,EAIAsM,EAAAoQ,GAAA1c,EAAA0c,GACA70B,EAAAykB,EACAA,EAAAA,EAAAmQ,MACAuB,MAEAn2B,EAAAmY,EACAA,EAAAA,EAAAyc,MACAwB,MAVAp2B,EAAAykB,EACAA,EAAAA,EAAAmQ,MACAuB,KAWAF,EAAAA,EAAArB,MAAA50B,EACAm1B,EAAAn1B,EAEAA,EAAA80B,MAAAmB,EACAA,EAAAj2B,CAGAykB,GAAAtM,EAGA8d,EAAArB,MAAA,KACAyB,GAAA,QAEAH,EAAA,EAEA,OAAAf,GAIA,QAAAT,GAAAjgB,EAAAmD,EAAA+a,EAAAC,EAAA/nB,GAeA,MAbA4J,GAAA,OAAAA,EAAAke,GAAA9nB,EACA+M,EAAA,OAAAA,EAAAgb,GAAA/nB,EAEA4J,EAAA,UAAAA,EAAAA,GAAA,GACAA,EAAA,WAAAA,EAAAA,GAAA,GACAA,EAAA,WAAAA,EAAAA,GAAA,GACAA,EAAA,YAAAA,EAAAA,GAAA,GAEAmD,EAAA,UAAAA,EAAAA,GAAA,GACAA,EAAA,WAAAA,EAAAA,GAAA,GACAA,EAAA,WAAAA,EAAAA,GAAA,GACAA,EAAA,YAAAA,EAAAA,GAAA,GAEAnD,EAAAmD,GAAA,EAIA,QAAAwd,GAAA9qB,GACA,GAAAma,GAAAna,EACAgsB,EAAAhsB,CACA,GACAma,GAAAhQ,EAAA6hB,EAAA7hB,IAAA6hB,EAAA7R,GACAA,EAAAA,EAAArE,WACAqE,IAAAna,EAEA,OAAAgsB,GAIA,QAAAlC,GAAAmC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,GACA,OAAAH,EAAAE,IAAAL,EAAAM,IAAAP,EAAAM,IAAAD,EAAAE,IAAA,IACAP,EAAAM,IAAAH,EAAAI,IAAAL,EAAAI,IAAAL,EAAAM,IAAA,IACAL,EAAAI,IAAAD,EAAAE,IAAAH,EAAAE,IAAAH,EAAAI,IAAA,EAIA,QAAA7B,GAAA10B,EAAAuE,GACA,MAAAyuB,GAAAhzB,EAAAuE,IAAAvE,EAAA6f,KAAA3f,IAAAqE,EAAArE,GAAAF,EAAAkzB,KAAAhzB,IAAAqE,EAAArE,IAAAs2B,EAAAx2B,EAAAuE,IACAkwB,EAAAz0B,EAAAuE,IAAAkwB,EAAAlwB,EAAAvE,IAAAy2B,EAAAz2B,EAAAuE,GAIA,QAAA0uB,GAAA/O,EAAAtM,EAAAhY,GACA,OAAAgY,EAAAP,EAAA6M,EAAA7M,IAAAzX,EAAAsU,EAAA0D,EAAA1D,IAAA0D,EAAA1D,EAAAgQ,EAAAhQ,IAAAtU,EAAAyX,EAAAO,EAAAP,GAIA,QAAA2b,GAAA0D,EAAAC,GACA,MAAAD,GAAAxiB,IAAAyiB,EAAAziB,GAAAwiB,EAAArf,IAAAsf,EAAAtf,EAIA,QAAAmd,GAAAkC,EAAAE,EAAAD,EAAAE,GACA,MAAA5D,GAAAyD,EAAAE,EAAAD,GAAA,GAAA1D,EAAAyD,EAAAE,EAAAC,GAAA,GACA5D,EAAA0D,EAAAE,EAAAH,GAAA,GAAAzD,EAAA0D,EAAAE,EAAAD,GAAA,EAIA,QAAAJ,GAAAx2B,EAAAuE,GACA,GAAA2f,GAAAlkB,CACA,GAAA,CACA,GAAAkkB,EAAAhkB,IAAAF,EAAAE,GAAAgkB,EAAArE,KAAA3f,IAAAF,EAAAE,GAAAgkB,EAAAhkB,IAAAqE,EAAArE,GAAAgkB,EAAArE,KAAA3f,IAAAqE,EAAArE,GACAs0B,EAAAtQ,EAAAA,EAAArE,KAAA7f,EAAAuE,GAAA,OAAA,CACA2f,GAAAA,EAAArE,WACAqE,IAAAlkB,EAEA,QAAA,EAIA,QAAAy0B,GAAAz0B,EAAAuE,GACA,MAAA0uB,GAAAjzB,EAAAkzB,KAAAlzB,EAAAA,EAAA6f,MAAA,EACAoT,EAAAjzB,EAAAuE,EAAAvE,EAAA6f,OAAA,GAAAoT,EAAAjzB,EAAAA,EAAAkzB,KAAA3uB,IAAA,EACA0uB,EAAAjzB,EAAAuE,EAAAvE,EAAAkzB,MAAA,GAAAD,EAAAjzB,EAAAA,EAAA6f,KAAAtb,GAAA,EAIA,QAAAkyB,GAAAz2B,EAAAuE,GACA,GAAA2f,GAAAlkB,EACA82B,GAAA,EACAR,GAAAt2B,EAAAkU,EAAA3P,EAAA2P,GAAA,EACAqiB,GAAAv2B,EAAAqX,EAAA9S,EAAA8S,GAAA,CACA,GACA6M,GAAA7M,EAAAkf,GAAArS,EAAArE,KAAAxI,EAAAkf,GAAAD,GAAApS,EAAArE,KAAA3L,EAAAgQ,EAAAhQ,IAAAqiB,EAAArS,EAAA7M,IAAA6M,EAAArE,KAAAxI,EAAA6M,EAAA7M,GAAA6M,EAAAhQ,IACA4iB,GAAAA,GACA5S,EAAAA,EAAArE,WACAqE,IAAAlkB,EAEA,OAAA82B,GAKA,QAAAnC,GAAA30B,EAAAuE,GACA,GAAAwyB,GAAA,GAAAC,GAAAh3B,EAAAE,EAAAF,EAAAkU,EAAAlU,EAAAqX,GACA4f,EAAA,GAAAD,GAAAzyB,EAAArE,EAAAqE,EAAA2P,EAAA3P,EAAA8S,GACA6f,EAAAl3B,EAAA6f,KACAsX,EAAA5yB,EAAA2uB,IAcA,OAZAlzB,GAAA6f,KAAAtb,EACAA,EAAA2uB,KAAAlzB,EAEA+2B,EAAAlX,KAAAqX,EACAA,EAAAhE,KAAA6D,EAEAE,EAAApX,KAAAkX,EACAA,EAAA7D,KAAA+D,EAEAE,EAAAtX,KAAAoX,EACAA,EAAA/D,KAAAiE,EAEAF,EAIA,QAAArE,GAAA1yB,EAAAgU,EAAAmD,EAAA+L,GACA,GAAAc,GAAA,GAAA8S,GAAA92B,EAAAgU,EAAAmD,EAYA,OAVA+L,IAKAc,EAAArE,KAAAuD,EAAAvD,KACAqE,EAAAgP,KAAA9P,EACAA,EAAAvD,KAAAqT,KAAAhP,EACAd,EAAAvD,KAAAqE,IAPAA,EAAAgP,KAAAhP,EACAA,EAAArE,KAAAqE,GAQAA,EAGA,QAAAiP,GAAAjP,GACAA,EAAArE,KAAAqT,KAAAhP,EAAAgP,KACAhP,EAAAgP,KAAArT,KAAAqE,EAAArE,KAEAqE,EAAAqQ,QAAArQ,EAAAqQ,MAAAF,MAAAnQ,EAAAmQ,OACAnQ,EAAAmQ,QAAAnQ,EAAAmQ,MAAAE,MAAArQ,EAAAqQ,OAGA,QAAAyC,GAAA92B,EAAAgU,EAAAmD,GAEA9X,KAAAW,EAAAA,EAGAX,KAAA2U,EAAAA,EACA3U,KAAA8X,EAAAA,EAGA9X,KAAA2zB,KAAA,KACA3zB,KAAAsgB,KAAA,KAGAtgB,KAAA+0B,EAAA,KAGA/0B,KAAAg1B,MAAA,KACAh1B,KAAA80B,MAAA,KAGA90B,KAAAwzB,SAAA,EAlkBA/zB,EAAAD,QAAA6yB,OAqkBAwF,IAAA,SAAAn3B,EAAAjB,EAAAD,GACA,YAoBA,SAAAs4B,GAAAnkB,EAAAokB,EAAA9Q,GACAjnB,KAAA2T,GAAAA,EACA3T,KAAA+3B,QAAAA,EACA/3B,KAAAinB,KAAAA,IAAA,EAUA,QAAA+Q,MAvBA,GAAAC,GAAA,kBAAA1oB,QAAA/L,OAAA,KAAA,CA+BAw0B,GAAAn1B,UAAAq1B,QAAAhwB,OAUA8vB,EAAAn1B,UAAAsb,UAAA,SAAAga,EAAAC,GACA,GAAAC,GAAAJ,EAAAA,EAAAE,EAAAA,EACAG,EAAAt4B,KAAAk4B,SAAAl4B,KAAAk4B,QAAAG,EAEA,IAAAD,EAAA,QAAAE,CACA,KAAAA,EAAA,QACA,IAAAA,EAAA3kB,GAAA,OAAA2kB,EAAA3kB,GAEA,KAAA,GAAAhT,GAAA,EAAAG,EAAAw3B,EAAAt3B,OAAAu3B,EAAA,GAAAzsB,OAAAhL,GAAAA,EAAAH,EAAAA,IACA43B,EAAA53B,GAAA23B,EAAA33B,GAAAgT,EAGA,OAAA4kB,IAUAP,EAAAn1B,UAAAukB,KAAA,SAAA+Q,EAAAK,EAAAhB,EAAAiB,EAAAC,EAAAC,GACA,GAAAN,GAAAJ,EAAAA,EAAAE,EAAAA,CAEA,KAAAn4B,KAAAk4B,UAAAl4B,KAAAk4B,QAAAG,GAAA,OAAA,CAEA,IAEAzgB,GACAjX,EAHAwd,EAAAne,KAAAk4B,QAAAG,GACAjjB,EAAAvB,UAAA7S,MAIA,IAAA,kBAAAmd,GAAAxK,GAAA,CAGA,OAFAwK,EAAA8I,MAAAjnB,KAAAoe,eAAA+Z,EAAAha,EAAAxK,GAAAzL,QAAA,GAEAkN,GACA,IAAA,GAAA,MAAA+I,GAAAxK,GAAA5S,KAAAod,EAAA4Z,UAAA,CACA,KAAA,GAAA,MAAA5Z,GAAAxK,GAAA5S,KAAAod,EAAA4Z,QAAAS,IAAA,CACA,KAAA,GAAA,MAAAra,GAAAxK,GAAA5S,KAAAod,EAAA4Z,QAAAS,EAAAhB,IAAA,CACA,KAAA,GAAA,MAAArZ,GAAAxK,GAAA5S,KAAAod,EAAA4Z,QAAAS,EAAAhB,EAAAiB,IAAA,CACA,KAAA,GAAA,MAAAta,GAAAxK,GAAA5S,KAAAod,EAAA4Z,QAAAS,EAAAhB,EAAAiB,EAAAC,IAAA,CACA,KAAA,GAAA,MAAAva,GAAAxK,GAAA5S,KAAAod,EAAA4Z,QAAAS,EAAAhB,EAAAiB,EAAAC,EAAAC,IAAA,EAGA,IAAAh4B,EAAA,EAAAiX,EAAA,GAAA9L,OAAAsJ,EAAA,GAAAA,EAAAzU,EAAAA,IACAiX,EAAAjX,EAAA,GAAAkT,UAAAlT,EAGAwd,GAAAxK,GAAAC,MAAAuK,EAAA4Z,QAAAngB,OACA,CACA,GACA8R,GADA1oB,EAAAmd,EAAAnd,MAGA,KAAAL,EAAA,EAAAK,EAAAL,EAAAA,IAGA,OAFAwd,EAAAxd,GAAAsmB,MAAAjnB,KAAAoe,eAAA+Z,EAAAha,EAAAxd,GAAAgT,GAAAzL,QAAA,GAEAkN,GACA,IAAA,GAAA+I,EAAAxd,GAAAgT,GAAA5S,KAAAod,EAAAxd,GAAAo3B,QAAA,MACA,KAAA,GAAA5Z,EAAAxd,GAAAgT,GAAA5S,KAAAod,EAAAxd,GAAAo3B,QAAAS,EAAA,MACA,KAAA,GAAAra,EAAAxd,GAAAgT,GAAA5S,KAAAod,EAAAxd,GAAAo3B,QAAAS,EAAAhB,EAAA,MACA,SACA,IAAA5f,EAAA,IAAA8R,EAAA,EAAA9R,EAAA,GAAA9L,OAAAsJ,EAAA,GAAAA,EAAAsU,EAAAA,IACA9R,EAAA8R,EAAA,GAAA7V,UAAA6V,EAGAvL,GAAAxd,GAAAgT,GAAAC,MAAAuK,EAAAxd,GAAAo3B,QAAAngB,IAKA,OAAA,GAWAogB,EAAAn1B,UAAAmkB,GAAA,SAAAmR,EAAAxkB,EAAAokB,GACA,GAAAnZ,GAAA,GAAAkZ,GAAAnkB,EAAAokB,GAAA/3B,MACAq4B,EAAAJ,EAAAA,EAAAE,EAAAA,CAWA,OATAn4B,MAAAk4B,UAAAl4B,KAAAk4B,QAAAD,KAAA1oB,OAAA/L,OAAA,OACAxD,KAAAk4B,QAAAG,GAEAr4B,KAAAk4B,QAAAG,GAAA1kB,GACA3T,KAAAk4B,QAAAG,IACAr4B,KAAAk4B,QAAAG,GAAAzZ,GAFA5e,KAAAk4B,QAAAG,GAAA1tB,KAAAiU,GAFA5e,KAAAk4B,QAAAG,GAAAzZ,EAQA5e,MAWAg4B,EAAAn1B,UAAAokB,KAAA,SAAAkR,EAAAxkB,EAAAokB,GACA,GAAAnZ,GAAA,GAAAkZ,GAAAnkB,EAAAokB,GAAA/3B,MAAA,GACAq4B,EAAAJ,EAAAA,EAAAE,EAAAA,CAWA,OATAn4B,MAAAk4B,UAAAl4B,KAAAk4B,QAAAD,KAAA1oB,OAAA/L,OAAA,OACAxD,KAAAk4B,QAAAG,GAEAr4B,KAAAk4B,QAAAG,GAAA1kB,GACA3T,KAAAk4B,QAAAG,IACAr4B,KAAAk4B,QAAAG,GAAAzZ,GAFA5e,KAAAk4B,QAAAG,GAAA1tB,KAAAiU,GAFA5e,KAAAk4B,QAAAG,GAAAzZ,EAQA5e,MAYAg4B,EAAAn1B,UAAAub,eAAA,SAAA+Z,EAAAxkB,EAAAokB,EAAA9Q,GACA,GAAAoR,GAAAJ,EAAAA,EAAAE,EAAAA,CAEA,KAAAn4B,KAAAk4B,UAAAl4B,KAAAk4B,QAAAG,GAAA,MAAAr4B,KAEA,IAAAme,GAAAne,KAAAk4B,QAAAG,GACAO,IAEA,IAAAjlB,EACA,GAAAwK,EAAAxK,IAEAwK,EAAAxK,KAAAA,GACAsT,IAAA9I,EAAA8I,MACA8Q,GAAA5Z,EAAA4Z,UAAAA,IAEAa,EAAAjuB,KAAAwT,OAGA,KAAA,GAAAxd,GAAA,EAAAK,EAAAmd,EAAAnd,OAAAA,EAAAL,EAAAA,KAEAwd,EAAAxd,GAAAgT,KAAAA,GACAsT,IAAA9I,EAAAxd,GAAAsmB,MACA8Q,GAAA5Z,EAAAxd,GAAAo3B,UAAAA,IAEAa,EAAAjuB,KAAAwT,EAAAxd,GAeA,OANAi4B,GAAA53B,OACAhB,KAAAk4B,QAAAG,GAAA,IAAAO,EAAA53B,OAAA43B,EAAA,GAAAA,QAEA54B,MAAAk4B,QAAAG,GAGAr4B,MASAg4B,EAAAn1B,UAAAskB,mBAAA,SAAAgR,GACA,MAAAn4B,MAAAk4B,SAEAC,QAAAn4B,MAAAk4B,QAAAD,EAAAA,EAAAE,EAAAA,GACAn4B,KAAAk4B,QAAAD,KAAA1oB,OAAA/L,OAAA,MAEAxD,MALAA,MAWAg4B,EAAAn1B,UAAAqkB,IAAA8Q,EAAAn1B,UAAAub,eACA4Z,EAAAn1B,UAAAqb,YAAA8Z,EAAAn1B,UAAAmkB,GAKAgR,EAAAn1B,UAAAg2B,gBAAA,WACA,MAAA74B,OAMAg4B,EAAAc,SAAAb,EAKA,mBAAAx4B,KACAA,EAAAD,QAAAw4B,QAGAe,IAAA,SAAAr4B,EAAAjB,EAAAD,GAEA,YAIA,SAAAw5B,GAAAha,GACA,GAAA,OAAAA,GAAA9W,SAAA8W,EACA,KAAA,IAAAyF,WAAA,wDAGA,OAAAlV,QAAAyP,GARA,GAAAnE,GAAAtL,OAAA1M,UAAAgY,eACAoe,EAAA1pB,OAAA1M,UAAAq2B,oBAUAz5B,GAAAD,QAAA+P,OAAA4pB,QAAA,SAAAC,EAAA5xB,GAKA,IAAA,GAJA0d,GAEAmU,EADAlU,EAAA6T,EAAAI,GAGA94B,EAAA,EAAAA,EAAAuT,UAAA7S,OAAAV,IAAA,CACA4kB,EAAA3V,OAAAsE,UAAAvT,GAEA,KAAA,GAAAyU,KAAAmQ,GACArK,EAAA9Z,KAAAmkB,EAAAnQ,KACAoQ,EAAApQ,GAAAmQ,EAAAnQ,GAIA,IAAAxF,OAAA+pB,sBAAA,CACAD,EAAA9pB,OAAA+pB,sBAAApU,EACA,KAAA,GAAAvkB,GAAA,EAAAA,EAAA04B,EAAAr4B,OAAAL,IACAs4B,EAAAl4B,KAAAmkB,EAAAmU,EAAA14B,MACAwkB,EAAAkU,EAAA14B,IAAAukB,EAAAmU,EAAA14B,MAMA,MAAAwkB,SAGAoU,IAAA,SAAA74B,EAAAjB,EAAAD,IACA,SAAA4T,IAUA,WAiBA,QAAAM,GAAAC,GACA,GAAA6lB,IAAA,CACA,OAAA,YACA,GAAAA,EAAA,KAAA,IAAA54B,OAAA,+BACA44B,IAAA,EACA7lB,EAAAC,MAAA0G,EAAAzG,YApBA,GAGAyG,GAAAD,EAHA9D,IAKA+D,GAAAta,KACA,MAAAsa,IACAD,EAAAC,EAAA/D,OAGAA,EAAAgE,WAAA,WAEA,MADAD,GAAA/D,MAAA8D,EACA9D,EAcA,IAAAiE,GAAAjL,OAAA1M,UAAA4X,SAEAxG,EAAAnI,MAAA4O,SAAA,SAAA3E,GACA,MAAA,mBAAAyE,EAAAzZ,KAAAgV,IAGA0jB,EAAA,SAAAzlB,EAAAG,GACA,IAAA,GAAAxT,GAAA,EAAAA,EAAAqT,EAAAhT,OAAAL,GAAA,EACAwT,EAAAH,EAAArT,GAAAA,EAAAqT,IAIAK,EAAA,SAAAL,EAAAG,GACA,GAAAH,EAAA+H,IACA,MAAA/H,GAAA+H,IAAA5H,EAEA,IAAA2C,KAIA,OAHA2iB,GAAAzlB,EAAA,SAAAW,EAAAhU,EAAAF,GACAqW,EAAAnM,KAAAwJ,EAAAQ,EAAAhU,EAAAF,MAEAqW,GAGArC,EAAA,SAAAT,EAAAG,EAAAO,GACA,MAAAV,GAAAoI,OACApI,EAAAoI,OAAAjI,EAAAO,IAEA+kB,EAAAzlB,EAAA,SAAAW,EAAAhU,EAAAF,GACAiU,EAAAP,EAAAO,EAAAC,EAAAhU,EAAAF,KAEAiU,IAGAI,EAAA,SAAAiB,GACA,GAAAxG,OAAAC,KACA,MAAAD,QAAAC,KAAAuG,EAEA,IAAAvG,KACA,KAAA,GAAAoL,KAAA7E,GACAA,EAAA8E,eAAAD,IACApL,EAAA7E,KAAAiQ,EAGA,OAAApL,GAMA,oBAAA4D,IAAAA,EAAA,UAgBAmD,EAAA0E,SAAA7H,EAAA6H,SACA,mBAAAxC,cACAlC,EAAAkC,aAAA,SAAA9E,GAEA8E,aAAA9E,IAIA4C,EAAAkC,aAAAlC,EAAA0E,UAvBA,kBAAAxC,eACAlC,EAAA0E,SAAA,SAAAtH,GAEA8E,aAAA9E,IAEA4C,EAAAkC,aAAAlC,EAAA0E,WAGA1E,EAAA0E,SAAA,SAAAtH,GACAqH,WAAArH,EAAA,IAEA4C,EAAAkC,aAAAlC,EAAA0E,UAgBA1E,EAAA4E,KAAA,SAAAnH,EAAAG,EAAAyB,GASA,QAAAK,GAAAI,GACAA,GACAT,EAAAS,GACAT,EAAA,eAGA6F,GAAA,EACAA,GAAAzH,EAAAhT,QACA4U,KAfA,GADAA,EAAAA,GAAA,cACA5B,EAAAhT,OACA,MAAA4U,IAEA,IAAA6F,GAAA,CACAge,GAAAzlB,EAAA,SAAAW,GACAR,EAAAQ,EAAAjB,EAAAuC,OAeAM,EAAA2E,QAAA3E,EAAA4E,KAEA5E,EAAA8E,WAAA,SAAArH,EAAAG,EAAAyB,GAEA,GADAA,EAAAA,GAAA,cACA5B,EAAAhT,OACA,MAAA4U,IAEA,IAAA6F,GAAA,EACAG,EAAA,WACAzH,EAAAH,EAAAyH,GAAA,SAAApF,GACAA,GACAT,EAAAS,GACAT,EAAA,eAGA6F,GAAA,EACAA,GAAAzH,EAAAhT,OACA4U,IAGAgG,OAKAA,MAEArF,EAAA6E,cAAA7E,EAAA8E,WAEA9E,EAAAgF,UAAA,SAAAvH,EAAA8B,EAAA3B,EAAAyB,GACA,GAAAjC,GAAA+lB,EAAA5jB,EACAnC,GAAAC,MAAA,MAAAI,EAAAG,EAAAyB,KAEAW,EAAA+E,aAAA/E,EAAAgF,SAEA,IAAAme,GAAA,SAAA5jB,GAEA,MAAA,UAAA9B,EAAAG,EAAAyB,GAEA,GADAA,EAAAA,GAAA,cACA5B,EAAAhT,QAAA,GAAA8U,EACA,MAAAF,IAEA,IAAA6F,GAAA,EACAlD,EAAA,EACArC,EAAA,GAEA,QAAAE,KACA,GAAAqF,GAAAzH,EAAAhT,OACA,MAAA4U,IAGA,MAAAE,EAAAI,GAAAqC,EAAAvE,EAAAhT,QACAuX,GAAA,EACArC,GAAA,EACA/B,EAAAH,EAAAuE,EAAA,GAAA,SAAAlC,GACAA,GACAT,EAAAS,GACAT,EAAA,eAGA6F,GAAA,EACAvF,GAAA,EACAuF,GAAAzH,EAAAhT,OACA4U,IAGAQ,YAUAE,EAAA,SAAA3C,GACA,MAAA,YACA,GAAAiE,GAAA9L,MAAAjJ,UAAA2b,MAAAzd,KAAA8S,UACA,OAAAF,GAAAC,MAAA,MAAA2C,EAAA4E,MAAApD,OAAAH,MAGAnB,EAAA,SAAAX,EAAAnC,GACA,MAAA,YACA,GAAAiE,GAAA9L,MAAAjJ,UAAA2b,MAAAzd,KAAA8S,UACA,OAAAF,GAAAC,MAAA,MAAA8lB,EAAA5jB,IAAAiC,OAAAH,MAGAlB,EAAA,SAAA/C,GACA,MAAA,YACA,GAAAiE,GAAA9L,MAAAjJ,UAAA2b,MAAAzd,KAAA8S,UACA,OAAAF,GAAAC,MAAA,MAAA2C,EAAA8E,YAAAtD,OAAAH,MAKAhB,EAAA,SAAAC,EAAA7C,EAAAG,EAAAyB,GAIA,GAHA5B,EAAAK,EAAAL,EAAA,SAAAW,EAAAhU,GACA,OAAAyT,MAAAzT,EAAAwO,MAAAwF,KAEAiB,EAMA,CACA,GAAAkB,KACAD,GAAA7C,EAAA,SAAAW,EAAAiB,GACAzB,EAAAQ,EAAAxF,MAAA,SAAAkH,EAAA9C,GACAuD,EAAAnC,EAAAP,OAAAb,EACAqC,EAAAS,MAEA,SAAAA,GACAT,EAAAS,EAAAS,SAbAD,GAAA7C,EAAA,SAAAW,EAAAiB,GACAzB,EAAAQ,EAAAxF,MAAA,SAAAkH,GACAT,EAAAS,OAeAE,GAAAwF,IAAAzF,EAAAM,GACAL,EAAAyF,UAAAtF,EAAAE,GACAL,EAAA0F,SAAA,SAAAjI,EAAA8B,EAAA3B,EAAAyB,GACA,MAAA+jB,GAAA7jB,GAAA9B,EAAAG,EAAAyB,GAGA,IAAA+jB,GAAA,SAAA7jB,GACA,MAAAW,GAAAX,EAAAc,GAKAL,GAAA6F,OAAA,SAAApI,EAAAU,EAAAP,EAAAyB,GACAW,EAAA8E,WAAArH,EAAA,SAAAW,EAAAiB,GACAzB,EAAAO,EAAAC,EAAA,SAAA0B,EAAA9C,GACAmB,EAAAnB,EACAqC,EAAAS,MAEA,SAAAA,GACAT,EAAAS,EAAA3B,MAIA6B,EAAA2F,OAAA3F,EAAA6F,OAEA7F,EAAA4F,MAAA5F,EAAA6F,OAEA7F,EAAA+F,YAAA,SAAAtI,EAAAU,EAAAP,EAAAyB,GACA,GAAA2G,GAAAlI,EAAAL,EAAA,SAAAW,GACA,MAAAA,KACA6H,SACAjG,GAAA6F,OAAAG,EAAA7H,EAAAP,EAAAyB,IAGAW,EAAA8F,MAAA9F,EAAA+F,WAEA,IAAAvF,GAAA,SAAAF,EAAA7C,EAAAG,EAAAyB,GACA,GAAAkB,KACA9C,GAAAK,EAAAL,EAAA,SAAAW,EAAAhU,GACA,OAAAyT,MAAAzT,EAAAwO,MAAAwF,KAEAkC,EAAA7C,EAAA,SAAAW,EAAAiB,GACAzB,EAAAQ,EAAAxF,MAAA,SAAAoE,GACAA,GACAuD,EAAAnM,KAAAgK,GAEAiB,OAEA,SAAAS,GACAT,EAAAvB,EAAAyC,EAAAE,KAAA,SAAAvW,EAAAuE,GACA,MAAAvE,GAAA2T,MAAApP,EAAAoP,QACA,SAAAO,GACA,MAAAA,GAAAxF,WAIAoH,GAAAoG,OAAArG,EAAAS,GACAR,EAAAwG,aAAArG,EAAAK,GAEAR,EAAAmG,OAAAnG,EAAAoG,OACApG,EAAAuG,aAAAvG,EAAAwG,YAEA,IAAA9F,GAAA,SAAAJ,EAAA7C,EAAAG,EAAAyB,GACA,GAAAkB,KACA9C,GAAAK,EAAAL,EAAA,SAAAW,EAAAhU,GACA,OAAAyT,MAAAzT,EAAAwO,MAAAwF,KAEAkC,EAAA7C,EAAA,SAAAW,EAAAiB,GACAzB,EAAAQ,EAAAxF,MAAA,SAAAoE,GACAA,GACAuD,EAAAnM,KAAAgK,GAEAiB,OAEA,SAAAS,GACAT,EAAAvB,EAAAyC,EAAAE,KAAA,SAAAvW,EAAAuE,GACA,MAAAvE,GAAA2T,MAAApP,EAAAoP,QACA,SAAAO,GACA,MAAAA,GAAAxF,WAIAoH,GAAAyG,OAAA1G,EAAAW,GACAV,EAAA2G,aAAAxG,EAAAO,EAEA,IAAA2iB,GAAA,SAAA/iB,EAAA7C,EAAAG,EAAA0lB,GACAhjB,EAAA7C,EAAA,SAAAW,EAAAiB,GACAzB,EAAAQ,EAAA,SAAAL,GACAA,GACAulB,EAAAllB,GACAklB,EAAA,cAGAjkB,OAGA,SAAAS,GACAwjB,MAGAtjB,GAAAkH,OAAAnH,EAAAsjB,GACArjB,EAAAmH,aAAAhH,EAAAkjB,GAEArjB,EAAA6G,KAAA,SAAApJ,EAAAG,EAAA0lB,GACAtjB,EAAA4E,KAAAnH,EAAA,SAAAW,EAAAiB,GACAzB,EAAAQ,EAAA,SAAApB,GACAA,IACAsmB,GAAA,GACAA,EAAA,cAEAjkB,OAEA,SAAAS,GACAwjB,GAAA,MAIAtjB,EAAA4G,IAAA5G,EAAA6G,KAEA7G,EAAAgH,MAAA,SAAAvJ,EAAAG,EAAA0lB,GACAtjB,EAAA4E,KAAAnH,EAAA,SAAAW,EAAAiB,GACAzB,EAAAQ,EAAA,SAAApB,GACAA,IACAsmB,GAAA,GACAA,EAAA,cAEAjkB,OAEA,SAAAS,GACAwjB,GAAA,MAIAtjB,EAAA+G,IAAA/G,EAAAgH,MAEAhH,EAAAqH,OAAA,SAAA5J,EAAAG,EAAAyB,GACAW,EAAAwF,IAAA/H,EAAA,SAAAW,EAAAiB,GACAzB,EAAAQ,EAAA,SAAA0B,EAAA2H,GACA3H,EACAT,EAAAS,GAGAT,EAAA,MAAAzG,MAAAwF,EAAAqJ,SAAAA,OAGA,SAAA3H,EAAAS,GACA,GAAAT,EACA,MAAAT,GAAAS,EAGA,IAAA1C,GAAA,SAAAmK,EAAAC,GACA,GAAAtd,GAAAqd,EAAAE,SAAAhZ,EAAA+Y,EAAAC,QACA,OAAAhZ,GAAAvE,EAAA,GAAAA,EAAAuE,EAAA,EAAA,EAEA4Q,GAAA,KAAAvB,EAAAyC,EAAAE,KAAArD,GAAA,SAAAgB,GACA,MAAAA,GAAAxF,YAMAoH,EAAA0H,KAAA,SAAAvG,EAAA9B,GACAA,EAAAA,GAAA,YACA,IAAApG,GAAAsF,EAAA4C,GACA6G,EAAA/O,EAAAxO,MACA,KAAAud,EACA,MAAA3I,IAGA,IAAAkB,MAEAqH,KACAD,EAAA,SAAAvK,GACAwK,EAAAxF,QAAAhF,IAEAyK,EAAA,SAAAzK,GACA,IAAA,GAAAhT,GAAA,EAAAA,EAAAwd,EAAAnd,OAAAL,GAAA,EACA,GAAAwd,EAAAxd,KAAAgT,EAEA,WADAwK,GAAAlF,OAAAtY,EAAA,IAKA2d,EAAA,WACAC,IACAkb,EAAAtb,EAAAK,MAAA,GAAA,SAAA7K,GACAA,MAIAuK,GAAA,WACA,IAAAK,EAAA,CACA,GAAAub,GAAAlkB,CAEAA,GAAA,aAEAkkB,EAAA,KAAAhjB,MAIA2iB,EAAAjqB,EAAA,SAAAoL,GACA,GAAAjD,GAAA1D,EAAAyD,EAAAkD,IAAAlD,EAAAkD,IAAAlD,EAAAkD,IACAiE,EAAA,SAAAxI,GACA,GAAAuB,GAAA9L,MAAAjJ,UAAA2b,MAAAzd,KAAA8S,UAAA,EAIA,IAHA+D,EAAA5W,QAAA,IACA4W,EAAAA,EAAA,IAEAvB,EAAA,CACA,GAAA0I,KACA0a,GAAA3kB,EAAAgC,GAAA,SAAAmI,GACAF,EAAAE,GAAAnI,EAAAmI,KAEAF,EAAAnE,GAAAhD,EACAhC,EAAAS,EAAA0I,GAEAnJ,EAAA,iBAGAkB,GAAA8D,GAAAhD,EACArB,EAAAkC,aAAA6F,IAGAK,EAAAhH,EAAA6G,MAAA,EAAAhJ,KAAAygB,IAAAte,EAAA3W,OAAA,QACA0d,EAAA,WACA,MAAAjK,GAAAkK,EAAA,SAAAle,EAAAkU,GACA,MAAAlU,IAAAqW,EAAA+D,eAAAlG,KACA,KAAAmC,EAAA+D,eAAAD,GAEA,IAAA8D,IACA/G,EAAAA,EAAA3W,OAAA,GAAA6d,EAAA/H,OAEA,CACA,GAAA8H,GAAA,WACAF,MACAN,EAAAQ,GACAjH,EAAAA,EAAA3W,OAAA,GAAA6d,EAAA/H,IAGAoH,GAAAU,OAKArI,EAAA2I,MAAA,SAAAC,EAAAxH,EAAA/B,GACA,GAAA2J,GAAA,EACAW,IAEA,mBAAAf,KACAvJ,EAAA+B,EACAA,EAAAwH,EACAA,EAAAI,GAGAJ,EAAAG,SAAAH,EAAA,KAAAI,CACA,IAAAG,GAAA,SAAAC,EAAAC,GAQA,IAPA,GAAAC,GAAA,SAAAlI,EAAAmI,GACA,MAAA,UAAAC,GACApI,EAAA,SAAAtB,EAAA/B,GACAyL,GAAA1J,GAAAyJ,GAAAzJ,IAAAA,EAAA/B,OAAAA,KACAsL,KAGAT,GACAe,EAAAvV,KAAAkV,EAAAlI,IAAAwH,GAAA,IAEA5I,GAAA4J,OAAAD,EAAA,SAAAjK,EAAA3T,GACAA,EAAAA,EAAAA,EAAAtB,OAAA,IACA2e,GAAA/J,GAAAtT,EAAA+T,IAAA/T,EAAAgS,UAIA,OAAAsB,GAAA8J,IAAAA,GAGAnJ,EAAA6J,UAAA,SAAA1I,EAAA9B,GAEA,GADAA,EAAAA,GAAA,cACA3B,EAAAyD,GAAA,CACA,GAAArB,GAAA,GAAAzV,OAAA,4DACA,OAAAgV,GAAAS,GAEA,IAAAqB,EAAA1W,OACA,MAAA4U,IAEA,IAAAyK,GAAA,SAAAlM,GACA,MAAA,UAAAkC,GACA,GAAAA,EACAT,EAAAhC,MAAA,KAAAC,WACA+B,EAAA,iBAEA,CACA,GAAAgC,GAAA9L,MAAAjJ,UAAA2b,MAAAzd,KAAA8S,UAAA,GACAyM,EAAAnM,EAAAmM,MACAA,GACA1I,EAAAjN,KAAA0V,EAAAC,IAGA1I,EAAAjN,KAAAiL,GAEAW,EAAAkC,aAAA,WACAtE,EAAAP,MAAA,KAAAgE,OAKAyI,GAAA9J,EAAApC,SAAAuD,MAGA,IAAAD,GAAA,SAAAZ,EAAAa,EAAA9B,GAEA,GADAA,EAAAA,GAAA,aACA3B,EAAAyD,GACAb,EAAAkF,IAAArE,EAAA,SAAA/D,EAAAiC,GACAjC,GACAA,EAAA,SAAA0C,GACA,GAAAuB,GAAA9L,MAAAjJ,UAAA2b,MAAAzd,KAAA8S,UAAA,EACA+D,GAAA5W,QAAA,IACA4W,EAAAA,EAAA,IAEAhC,EAAA7U,KAAA,KAAAsV,EAAAuB,MAGAhC,OAEA,CACA,GAAAkB,KACAD,GAAAsE,KAAArG,EAAA4C,GAAA,SAAAkD,EAAAhF,GACA8B,EAAAkD,GAAA,SAAAvE,GACA,GAAAuB,GAAA9L,MAAAjJ,UAAA2b,MAAAzd,KAAA8S,UAAA,EACA+D,GAAA5W,QAAA,IACA4W,EAAAA,EAAA,IAEAd,EAAA8D,GAAAhD,EACAhC,EAAAS,MAEA,SAAAA,GACAT,EAAAS,EAAAS,MAKAP,GAAAgK,SAAA,SAAA7I,EAAA9B,GACA6B,GAAAsE,IAAAxF,EAAAwF,IAAAZ,KAAA5E,EAAA4E,MAAAzD,EAAA9B,IAGAW,EAAAiK,cAAA,SAAA9I,EAAA5B,EAAAF,GACA6B,GAAAsE,IAAA4d,EAAA7jB,GAAAqF,KAAAue,EAAA5jB,IAAA4B,EAAA9B,IAGAW,EAAA4J,OAAA,SAAAzI,EAAA9B,GAEA,GADAA,EAAAA,GAAA,aACA3B,EAAAyD,GACAnB,EAAAyF,UAAAtE,EAAA,SAAA/D,EAAAiC,GACAjC,GACAA,EAAA,SAAA0C,GACA,GAAAuB,GAAA9L,MAAAjJ,UAAA2b,MAAAzd,KAAA8S,UAAA,EACA+D,GAAA5W,QAAA,IACA4W,EAAAA,EAAA,IAEAhC,EAAA7U,KAAA,KAAAsV,EAAAuB,MAGAhC,OAEA,CACA,GAAAkB,KACAP,GAAA8E,WAAAvG,EAAA4C,GAAA,SAAAkD,EAAAhF,GACA8B,EAAAkD,GAAA,SAAAvE,GACA,GAAAuB,GAAA9L,MAAAjJ,UAAA2b,MAAAzd,KAAA8S,UAAA,EACA+D,GAAA5W,QAAA,IACA4W,EAAAA,EAAA,IAEAd,EAAA8D,GAAAhD,EACAhC,EAAAS,MAEA,SAAAA,GACAT,EAAAS,EAAAS,OAKAP,EAAApC,SAAA,SAAAuD,GACA,GAAA+I,GAAA,SAAArM,GACA,GAAAT,GAAA,WAIA,MAHA+D,GAAA1W,QACA0W,EAAAtD,GAAAR,MAAA,KAAAC,WAEAF,EAAA2M,OAKA,OAHA3M,GAAA2M,KAAA,WACA,MAAAlM,GAAAsD,EAAA1W,OAAA,EAAAyf,EAAArM,EAAA,GAAA,MAEAT,EAEA,OAAA8M,GAAA,IAGAlK,EAAA3C,MAAA,SAAAD,GACA,GAAAiE,GAAA9L,MAAAjJ,UAAA2b,MAAAzd,KAAA8S,UAAA,EACA,OAAA,YACA,MAAAF,GAAAC,MACA,KAAAgE,EAAAG,OAAAjM,MAAAjJ,UAAA2b,MAAAzd,KAAA8S,cAKA,IAAAgE,GAAA,SAAAhB,EAAA7C,EAAAL,EAAAiC,GACA,GAAAvV,KACAwW,GAAA7C,EAAA,SAAAW,EAAAuC,GACAvD,EAAAgB,EAAA,SAAA0B,EAAAyB,GACAzX,EAAAA,EAAA0X,OAAAD,OACAZ,EAAAb,MAEA,SAAAA,GACAT,EAAAS,EAAAhW,KAGAkW,GAAAwB,OAAAzB,EAAAuB,GACAtB,EAAAoK,aAAAjK,EAAAmB,GAEAtB,EAAAqK,OAAA,SAAAC,EAAA1M,EAAAyB,GACAiL,IACA1M,EAAA,SAAAkC,GACA,MAAAA,GACAT,EAAAS,OAEAE,GAAAqK,OAAAC,EAAA1M,EAAAyB,KAIAA,KAIAW,EAAAuK,SAAA,SAAA3M,EAAA0M,EAAAjL,GACAzB,EAAA,SAAAkC,GACA,GAAAA,EACA,MAAAT,GAAAS,EAEA,IAAAuB,GAAA9L,MAAAjJ,UAAA2b,MAAAzd,KAAA8S,UAAA,EACAgN,GAAAjN,MAAA,KAAAgE,GACArB,EAAAuK,SAAA3M,EAAA0M,EAAAjL,GAGAA,OAKAW,EAAAyK,MAAA,SAAAH,EAAA1M,EAAAyB,GACAiL,IASAjL,IARAzB,EAAA,SAAAkC,GACA,MAAAA,GACAT,EAAAS,OAEAE,GAAAyK,MAAAH,EAAA1M,EAAAyB,MAQAW,EAAA0K,QAAA,SAAA9M,EAAA0M,EAAAjL,GACAzB,EAAA,SAAAkC,GACA,GAAAA,EACA,MAAAT,GAAAS,EAEA,IAAAuB,GAAA9L,MAAAjJ,UAAA2b,MAAAzd,KAAA8S,UAAA,EACAgN,GAAAjN,MAAA,KAAAgE,GAIAhC,IAHAW,EAAA0K,QAAA9M,EAAA0M,EAAAjL,MAQAW,EAAA8K,MAAA,SAAApJ,EAAAC,GAIA,QAAAE,GAAAC,EAAA/V,EAAAgW,EAAA1C,GAOA,MANAyC,GAAAE,UACAF,EAAAE,SAAA,GAEAtE,EAAA3R,KACAA,GAAAA,IAEA,GAAAA,EAAAtB,OAEAuV,EAAAkC,aAAA,WACAJ,EAAAK,OACAL,EAAAK,cAIA+gB,GAAAn3B,EAAA,SAAAqV,GACA,GAAA1C,IACA3S,KAAAqV,EACA/B,SAAA,kBAAAA,GAAAA,EAAA,KAGA0C,GACAD,EAAAX,MAAAiB,QAAA1D,GAEAoD,EAAAX,MAAA/M,KAAAsK,GAGAoD,EAAAO,WAAAP,EAAAX,MAAA1W,SAAAqX,EAAAH,aACAG,EAAAO,YAEArC,EAAAkC,aAAAJ,EAAAjF,WAjCAlL,SAAAgQ,IACAA,EAAA,EAoCA,IAAAY,GAAA,EACAT,GACAX,SACAQ,YAAAA,EACAU,UAAA,KACAM,MAAA,KACAR,MAAA,KACAH,SAAA,EACAY,QAAA,EACAxO,KAAA,SAAArI,EAAAsT,GACAwC,EAAAC,EAAA/V,GAAA,EAAAsT,IAEAwD,KAAA,WACAf,EAAAK,MAAA,KACAL,EAAAX,UAEAiB,QAAA,SAAArW,EAAAsT,GACAwC,EAAAC,EAAA/V,GAAA,EAAAsT,IAEAxC,QAAA,WACA,IAAAiF,EAAAc,QAAAL,EAAAT,EAAAH,aAAAG,EAAAX,MAAA1W,OAAA,CACA,GAAA2W,GAAAU,EAAAX,MAAAia,OACAtZ,GAAAa,OAAA,IAAAb,EAAAX,MAAA1W,QACAqX,EAAAa,QAEAJ,GAAA,CACA,IAAAwH,GAAA,WACAxH,GAAA,EACAnB,EAAA/B,UACA+B,EAAA/B,SAAAhC,MAAA+D,EAAA9D,WAEAwE,EAAAK,OAAAL,EAAAX,MAAA1W,OAAA8X,IAAA,GACAT,EAAAK,QAEAL,EAAAjF,WAEA8D,EAAAxD,EAAA4M,EACArI,GAAAN,EAAArV,KAAA4U,KAGAlW,OAAA,WACA,MAAAqX,GAAAX,MAAA1W,QAEAkV,QAAA,WACA,MAAA4C,IAEAN,KAAA,WACA,MAAAH,GAAAX,MAAA1W,OAAA8X,IAAA,GAEAO,MAAA,WACAhB,EAAAc,UAAA,IACAd,EAAAc,QAAA,IAEAG,OAAA,WACA,GAAAjB,EAAAc,UAAA,EAAA,CACAd,EAAAc,QAAA,CAGA,KAAA,GAAAM,GAAA,EAAAA,GAAApB,EAAAH,YAAAuB,IACAlD,EAAAkC,aAAAJ,EAAAjF,WAIA,OAAAiF,IAGA9B,EAAAgL,cAAA,SAAAtJ,EAAAC,GAEA,QAAAsJ,GAAA/gB,EAAAuE,GACA,MAAAvE,GAAAghB,SAAAzc,EAAAyc,SAGA,QAAAC,GAAAC,EAAA1M,EAAA2M,GAGA,IAFA,GAAAC,GAAA,GACAC,EAAAH,EAAA3gB,OAAA,EACA8gB,EAAAD,GAAA,CACA,GAAAE,GAAAF,GAAAC,EAAAD,EAAA,IAAA,EACAD,GAAA3M,EAAA0M,EAAAI,KAAA,EACAF,EAAAE,EAEAD,EAAAC,EAAA,EAGA,MAAAF,GAGA,QAAAzJ,GAAAC,EAAA/V,EAAAmf,EAAA7L,GAOA,MANAyC,GAAAE,UACAF,EAAAE,SAAA,GAEAtE,EAAA3R,KACAA,GAAAA,IAEA,GAAAA,EAAAtB,OAEAuV,EAAAkC,aAAA,WACAJ,EAAAK,OACAL,EAAAK,cAIA+gB,GAAAn3B,EAAA,SAAAqV,GACA,GAAA1C,IACA3S,KAAAqV,EACA8J,SAAAA,EACA7L,SAAA,kBAAAA,GAAAA,EAAA,KAGAyC,GAAAX,MAAAuB,OAAAyI,EAAArJ,EAAAX,MAAAzC,EAAAuM,GAAA,EAAA,EAAAvM,GAEAoD,EAAAO,WAAAP,EAAAX,MAAA1W,SAAAqX,EAAAH,aACAG,EAAAO,YAEArC,EAAAkC,aAAAJ,EAAAjF,WAKA,GAAAiF,GAAA9B,EAAA8K,MAAApJ,EAAAC,EAUA,OAPAG,GAAA1N,KAAA,SAAArI,EAAAmf,EAAA7L,GACAwC,EAAAC,EAAA/V,EAAAmf,EAAA7L,UAIAyC,GAAAM,QAEAN,GAGA9B,EAAAyL,MAAA,SAAA/J,EAAAE,GACA,GAAA4hB,IAAA,EACAriB,KAEAsK,GACAtK,MAAAA,EACAS,QAAAA,EACAS,UAAA,KACAM,MAAA,KACAR,MAAA,KACAshB,SAAA,EACArvB,KAAA,SAAArI,EAAAsT,GACA3B,EAAA3R,KACAA,GAAAA,IAEAm3B,EAAAn3B,EAAA,SAAAqV,GACAD,EAAA/M,MACArI,KAAAqV,EACA/B,SAAA,kBAAAA,GAAAA,EAAA,OAEAoM,EAAAgY,SAAA,EACAhY,EAAApJ,WAAAlB,EAAA1W,SAAAmX,GACA6J,EAAApJ,cAGArC,EAAAkC,aAAAuJ,EAAA5O,UAEAA,QAAA,QAAAA,KACA,IAAA2mB,EAAA,CACA,GAAA,IAAAriB,EAAA1W,OAGA,MAFAghB,GAAAtJ,QAAAsJ,EAAAgY,SAAAhY,EAAAtJ,aACAsJ,EAAAgY,SAAA,EAIA,IAAAC,GAAA,gBAAA9hB,GACAT,EAAAuB,OAAA,EAAAd,GACAT,EAAAuB,OAAA,EAAAvB,EAAA1W,QAEAk5B,EAAA7lB,EAAA4lB,EAAA,SAAAtiB,GACA,MAAAA,GAAArV,MAGA0f,GAAA9I,OAAA8I,EAAA9I,QACA6gB,GAAA,EACA9hB,EAAAiiB,EAAA,WACAH,GAAA,CAEA,IAAAniB,GAAA/D,SACA4lB,GAAAQ,EAAA,SAAA33B,GACAA,EAAAsT,UACAtT,EAAAsT,SAAAhC,MAAA,KAAAgE,KAIAxE,QAGApS,OAAA,WACA,MAAA0W,GAAA1W,QAEAkV,QAAA,WACA,MAAA6jB,IAGA,OAAA/X,GAGA,IAAAtI,GAAA,SAAAlL,GACA,MAAA,UAAAmF,GACA,GAAAiE,GAAA9L,MAAAjJ,UAAA2b,MAAAzd,KAAA8S,UAAA,EACAF,GAAAC,MAAA,KAAAgE,EAAAG,QAAA,SAAA1B,GACA,GAAAuB,GAAA9L,MAAAjJ,UAAA2b,MAAAzd,KAAA8S,UAAA,EACA,oBAAAjH,WACAyJ,EACAzJ,QAAAC,OACAD,QAAAC,MAAAwJ,GAGAzJ,QAAA4B,IACAirB,EAAA7hB,EAAA,SAAAjD,GACA/H,QAAA4B,GAAAmG,WAOA4B,GAAA7I,IAAAgM,EAAA,OACAnD,EAAA0L,IAAAvI,EAAA,OAKAnD,EAAA2L,QAAA,SAAAvO,EAAAwO,GACA,GAAAzN,MACA0N,IACAD,GAAAA,GAAA,SAAAxN,GACA,MAAAA,GAEA,IAAA0N,GAAA,WACA,GAAAzK,GAAA9L,MAAAjJ,UAAA2b,MAAAzd,KAAA8S,WACA+B,EAAAgC,EAAAqC,MACAlF,EAAAoN,EAAAvO,MAAA,KAAAgE,EACA7C,KAAAL,GACA6B,EAAA0E,SAAA,WACArF,EAAAhC,MAAA,KAAAc,EAAAK,MAGAA,IAAAqN,GACAA,EAAArN,GAAApK,KAAAiL,IAGAwM,EAAArN,IAAAa,GACAjC,EAAAC,MAAA,KAAAgE,EAAAG,QAAA,WACArD,EAAAK,GAAAlB,SACA,IAAAwE,GAAA+J,EAAArN,SACAqN,GAAArN,EACA,KAAA,GAAApU,GAAA,EAAAG,EAAAuX,EAAArX,OAAAF,EAAAH,EAAAA,IACA0X,EAAA1X,GAAAiT,MAAA,KAAAC,gBAOA,OAFAwO,GAAA3N,KAAAA,EACA2N,EAAAC,WAAA3O,EACA0O,GAGA9L,EAAAgM,UAAA,SAAA5O,GACA,MAAA,YACA,OAAAA,EAAA2O,YAAA3O,GAAAC,MAAA,KAAAC,aAIA0C,EAAA4I,MAAA,SAAA3K,EAAAL,EAAAyB,GAEA,IAAA,GADAuS,MACAxnB,EAAA,EAAA6T,EAAA7T,EAAAA,IACAwnB,EAAAxd,KAAAhK,EAEA,OAAA4V,GAAAwF,IAAAoM,EAAAhU,EAAAyB,IAGAW,EAAAiM,YAAA,SAAAhO,EAAAL,EAAAyB,GAEA,IAAA,GADAuS,MACAxnB,EAAA,EAAA6T,EAAA7T,EAAAA,IACAwnB,EAAAxd,KAAAhK,EAEA,OAAA4V,GAAAyF,UAAAmM,EAAAhU,EAAAyB,IAGAW,EAAAmM,IAAA,WACA,GAAA5I,GAAAjG,SACA,OAAA,YACA,GAAAmG,GAAAha,KACA4X,EAAA9L,MAAAjJ,UAAA2b,MAAAzd,KAAA8S,WACA+B,EAAAgC,EAAAqC,KACA1D,GAAA6F,OAAAtC,EAAAlC,EAAA,SAAA+K,EAAAhP,EAAAuD,GACAvD,EAAAC,MAAAoG,EAAA2I,EAAA5K,QAAA,WACA,GAAA1B,GAAAxC,UAAA,GACA+O,EAAA9W,MAAAjJ,UAAA2b,MAAAzd,KAAA8S,UAAA,EACAqD,GAAAb,EAAAuM,QAGA,SAAAvM,EAAAS,GACAlB,EAAAhC,MAAAoG,GAAA3D,GAAA0B,OAAAjB,QAKAP,EAAAsM,QAAA,WACA,MAAAtM,GAAAmM,IAAA9O,MAAA,KAAA9H,MAAAjJ,UAAA2Z,QAAAzb,KAAA8S,YAGA,IAAAgG,GAAA,SAAAhD,EAAAiD,GACA,GAAAC,GAAA,WACA,GAAAC,GAAAha,KACA4X,EAAA9L,MAAAjJ,UAAA2b,MAAAzd,KAAA8S,WACA+B,EAAAgC,EAAAqC,KACA,OAAApD,GAAAiD,EAAA,SAAAnG,EAAAuD,GACAvD,EAAAC,MAAAoG,EAAApC,EAAAG,QAAAb,MAEAtB,GAEA,IAAA/B,UAAA7S,OAAA,EAAA,CACA,GAAA4W,GAAA9L,MAAAjJ,UAAA2b,MAAAzd,KAAA8S,UAAA,EACA,OAAAkG,GAAAnG,MAAA5T,KAAA4X,GAGA,MAAAmC,GAGAxD,GAAAuM,UAAAxM,EAAAuD,GACAtD,EAAAwM,gBAAArM,EAAAmD,GAEAtD,EAAAyM,QAAA,SAAArP,EAAAiC,GACA,QAAA0K,GAAAjK,GACA,GAAAA,EAAA,CACA,GAAAT,EACA,MAAAA,GAAAS,EAEA,MAAAA,GAEA1C,EAAA2M,GAEAA,KAIA,mBAAA7gB,IAAAA,EAAAD,QACAC,EAAAD,QAAA+W,EAGA,mBAAA7W,IAAAA,EAAAC,IACAD,KAAA,WACA,MAAA6W,KAKA+D,EAAA/D,MAAAA,OAKAxV,KAAAf,KAAAU,EAAA,eAEA6iB,SAAA,KAAA4W,IAAA,SAAAz5B,EAAAjB,EAAAD,GAaA,QAAA46B,GAAAC,EAAAniB,GACA8f,EAAAj3B,KAAAf,MAEAkY,EAAAA,GAAA,GAOAlY,KAAAq6B,QAAAA,GAAA,GAOAr6B,KAAAs6B,SAAA,EAOAt6B,KAAAu6B,SAAA,EAOAv6B,KAAAw6B,eAAA,EAOAx6B,KAAAy6B,qBAOAz6B,KAAA06B,oBAQA16B,KAAA26B,mBAAA36B,KAAA46B,cAAA53B,KAAAhD,MAQAA,KAAA66B,aAAA76B,KAAA86B,QAAA93B,KAAAhD,MAQAA,KAAA+6B,WAQA/6B,KAAAg7B,WAAA,EAQAh7B,KAAAgY,OAAAzB,EAAA8K,MAAArhB,KAAA26B,mBAAAziB,GAOAlY,KAAAi7B,aAxGA,GAAA1kB,GAAA7V,EAAA,SACAw6B,EAAAx6B,EAAA,OACAy6B,EAAAz6B,EAAA,cACAs3B,EAAAt3B,EAAA,gBA2IA05B,GAAAv3B,UAAA0M,OAAA/L,OAAAw0B,EAAAn1B,WACAu3B,EAAAv3B,UAAAmH,YAAAowB,EACA36B,EAAAD,QAAA46B,EAqDAA,EAAAv3B,UAAAu4B,IAAAhB,EAAAv3B,UAAAw4B,QAAA,SAAA7sB,EAAAsf,EAAAjjB,EAAAqM,GAEA,GAAApL,MAAA4O,QAAAlM,GAAA,CACA,IAAA,GAAA7N,GAAA,EAAAA,EAAA6N,EAAAxN,SAAAL,EACAX,KAAAo7B,IAAA5sB,EAAA7N,GAGA,OAAAX,MAmBA,GAfA,gBAAAwO,KACA0I,EAAA4W,GAAAtf,EAAAoH,UAAApH,EAAA8sB,WACAzwB,EAAA2D,EACAsf,EAAAtf,EAAAsf,IACAtf,EAAAA,EAAAA,MAAAA,EAAAuG,KAAAvG,EAAAsf,KAIA,gBAAAA,KACA5W,EAAArM,EACAA,EAAAijB,EACAA,EAAAtf,GAIA,gBAAAsf,GACA,KAAA,IAAAltB,OAAA,2CAUA,IANA,kBAAAiK,KACAqM,EAAArM,EACAA,EAAA,MAIA7K,KAAAi7B,UAAAzsB,GACA,KAAA,IAAA5N,OAAA,uBAAA4N,EAAA,oBA0BA,OAtBAsf,GAAA9tB,KAAAu7B,eAAAzN,GAGA9tB,KAAAi7B,UAAAzsB,GAAA,GAAA2sB,GAAA3sB,EAAAsf,EAAAjjB,GAEA,kBAAAqM,IACAlX,KAAAi7B,UAAAzsB,GAAAyY,KAAA,kBAAA/P,GAGAlX,KAAAg7B,aAGAh7B,KAAAgY,OAAAO,SACAvY,KAAAgY,OAAArN,KAAA3K,KAAAi7B,UAAAzsB,IACAxO,KAAAw6B,gBAAA,IAAAx6B,KAAAs6B,WAAAt6B,KAAAgY,OAAAhX,SAAAhB,KAAAgY,OAAA9B,aAIAlW,KAAA+6B,QAAApwB,KAAA3K,KAAAi7B,UAAAzsB,IACAxO,KAAAw6B,eAAA,IAAAx6B,KAAA+6B,QAAA/5B,QAGAhB,MAGAo6B,EAAAv3B,UAAA04B,eAAA,SAAAzN,GACA,GAAA0N,GAAAN,EAAAtO,MAAAkB,EAGA,OAAA0N,GAAAtO,UAAA,IAAAsO,EAAA7N,SAAAxB,QAAA,MACA2B,EAKA9tB,KAAAq6B,QAAAr5B,QACAhB,KAAAq6B,QAAApQ,YAAA,OAAAjqB,KAAAq6B,QAAAr5B,OAAA,GACA,MAAA8sB,EAAApJ,OAAA,GAEA1kB,KAAAq6B,QAAA,IAAAvM,EAGA9tB,KAAAq6B,QAAAvM,GAaAsM,EAAAv3B,UAAA44B,OAAArB,EAAAv3B,UAAA64B,IAAA,SAAA/nB,GAGA,MAFA3T,MAAAy6B,kBAAA9vB,KAAAgJ,GAEA3T,MAWAo6B,EAAAv3B,UAAA84B,MAAAvB,EAAAv3B,UAAA+4B,IAAA,SAAAjoB,GAGA,MAFA3T,MAAA06B,iBAAA/vB,KAAAgJ,GAEA3T,MAQAo6B,EAAAv3B,UAAAg5B,MAAA,WAGA77B,KAAAs6B,SAAA,EAEAt6B,KAAAu6B,SAAA,EAEAv6B,KAAAw6B,eAAA,EAKAx6B,KAAA+6B,QAAA/5B,OAAA,EAEAhB,KAAAg7B,WAAA,EAEAh7B,KAAAgY,OAAAoB,OACApZ,KAAAgY,OAAAO,SAAA,EAEAvY,KAAAi7B,cAUAb,EAAAv3B,UAAAi5B,KAAA,SAAA5kB,GAOA,GALA,kBAAAA,IACAlX,KAAAinB,KAAA,WAAA/P,GAIAlX,KAAAgY,OAAAO,QACA,MAAAvY,KAIAA,MAAAonB,KAAA,QAAApnB,KAGA,KAAA,GAAAW,GAAA,EAAAA,EAAAX,KAAA+6B,QAAA/5B,SAAAL,EACAX,KAAAgY,OAAArN,KAAA3K,KAAA+6B,QAAAp6B,GAMA,OAFAX,MAAA+6B,QAAA/5B,OAAA,EAEAhB,MASAo6B,EAAAv3B,UAAA+3B,cAAA,SAAAmB,EAAAC,GACA,GAAAj8B,GAAAC,IAEA+7B,GAAAE,SAAAD,EAEAh8B,KAAAk8B,eAAAH,EAAA/7B,KAAAy6B,kBAAA,WAGAsB,EAAAD,KAAA/7B,EAAA86B,iBAUAT,EAAAv3B,UAAAs5B,YAAA,WACAn8B,KAAAonB,KAAA,WAAApnB,KAAAA,KAAAi7B,YAWAb,EAAAv3B,UAAAi4B,QAAA,SAAAiB,GACA/7B,KAAAs6B,UAAAt6B,KAAAw6B,eAEAx6B,KAAAonB,KAAA,WAAApnB,KAAA+7B,GAGA/7B,KAAAk8B,eAAAH,EAAA/7B,KAAA06B,iBAAA,WACAqB,EAAA3U,KAAA,kBAAA2U,GAEA/7B,KAAAg7B,aAGA,IAAAh7B,KAAAg7B,aACAh7B,KAAAs6B,SAAA,IACAt6B,KAAAm8B,eAGAJ,EAAAlvB,MACA7M,KAAAonB,KAAA,QAAA2U,EAAAlvB,MAAA7M,KAAA+7B,GAGA/7B,KAAAonB,KAAA,OAAApnB,KAAA+7B,KAOAA,EAAAE,YAQA7B,EAAAv3B,UAAAq5B,eAAA,SAAAH,EAAAjiB,EAAA5C,GACA,GAAAnX,GAAAC,IAEAuW,GAAA8E,WAAAvB,EAAA,SAAAnG,EAAA2M,GACA3M,EAAA5S,KAAAhB,EAAAg8B,EAAAzb,IACApJ,EAAAlU,KAAAhD,KAAA+7B,KAGA3B,EAAAgC,UAAAjB,EAAAiB,UACAhC,EAAAiC,gBAAAlB,EAAAkB,gBACAjC,EAAAkC,kBAAAnB,EAAAmB,oBAEAC,aAAA,GAAAhmB,MAAA,GAAAimB,cAAA,GAAA1O,IAAA,KAAA2O,IAAA,SAAA/7B,EAAAjB,EAAAD,GAqBA,QAAA27B,GAAA3sB,EAAAsf,EAAAjjB,GAKA,GAJAmtB,EAAAj3B,KAAAf,MAEA6K,EAAAA,MAEA,gBAAA2D,IAAA,gBAAAsf,GACA,KAAA,IAAAltB,OAAA,8DASAZ,MAAAwO,KAAAA,EAQAxO,KAAA8tB,IAAAA,EAQA9tB,KAAA08B,UAAA,IAAA18B,KAAA8tB,IAAA3B,QAAA,SAOAnsB,KAAAsC,KAAA,KAOAtC,KAAA28B,YAAA9xB,EAAA8xB,eAAA,EAAA,YAAA9xB,EAAA8xB,YAOA38B,KAAA48B,SAAA/xB,EAAA+xB,UAAA58B,KAAA68B,qBAOA78B,KAAA88B,QAAAjyB,EAAAiyB,QAOA98B,KAAA+8B,SAAAlyB,EAAAkyB,aAQA/8B,KAAA6M,MAAA,KAQA7M,KAAAg9B,IAAA,KAQAh9B,KAAAi9B,QAAA,EAQAj9B,KAAAk9B,OAAA,EAQAl9B,KAAAm9B,SAAA,EAQAn9B,KAAAo9B,SAAA,EAQAp9B,KAAAq9B,SAAA,EASAr9B,KAAAi8B,SAAA,KAQAj8B,KAAAs9B,eAAAt9B,KAAAu9B,SAAAv6B,KAAAhD,MAQAA,KAAAw9B,cAAAx9B,KAAAy9B,SAAAz6B,KAAAhD,MAQAA,KAAA09B,iBAAA19B,KAAA29B,YAAA36B,KAAAhD,MAGAA,KAAA49B,iBAAA59B,KAAA69B,YAAA76B,KAAAhD,MACAA,KAAA89B,iBAAA99B,KAAA+9B,YAAA/6B,KAAAhD,MACAA,KAAAg+B,gBAAAh+B,KAAAi+B,WAAAj7B,KAAAhD,MACAA,KAAAk+B,mBAAAl+B,KAAAm+B,cAAAn7B,KAAAhD,MAyXA,QAAAo+B,GAAApB,GACA,MAAAA,GAAAviB,WAAAxL,QAAA,UAAA,IAsOA,QAAAovB,GAAAtiB,EAAA8J,EAAA7G,GACA6G,GAAA,IAAAA,EAAAsG,QAAA,OACAtG,EAAAA,EAAAyY,UAAA,IAGAzY,IAIA9J,EAAA8J,GAAA7G,GA9xBA,GAAAgZ,GAAAt3B,EAAA,iBACA69B,EAAA79B,EAAA,OAEA89B,KAAA3+B,OAAA4+B,gBAAA,mBAAA,IAAAC,iBACAC,EAAA,IA8MAxD,GAAAt4B,UAAA0M,OAAA/L,OAAAw0B,EAAAn1B;AACAs4B,EAAAt4B,UAAAmH,YAAAmxB,EACA17B,EAAAD,QAAA27B,EAOAA,EAAAt4B,UAAA06B,SAAA,WAEAv9B,KAAAsC,MAAAtC,KAAAsC,KAAAs8B,sBACA5+B,KAAAsC,KAAAs8B,oBAAA,QAAA5+B,KAAAw9B,eACAx9B,KAAAsC,KAAAs8B,oBAAA,OAAA5+B,KAAAs9B,gBACAt9B,KAAAsC,KAAAs8B,oBAAA,WAAA5+B,KAAA09B,kBACA19B,KAAAsC,KAAAs8B,oBAAA,iBAAA5+B,KAAAs9B,iBAGAt9B,KAAAg9B,MACAh9B,KAAAg9B,IAAA4B,qBACA5+B,KAAAg9B,IAAA4B,oBAAA,QAAA5+B,KAAA49B,kBACA59B,KAAAg9B,IAAA4B,oBAAA,QAAA5+B,KAAA89B,kBACA99B,KAAAg9B,IAAA4B,oBAAA,WAAA5+B,KAAA09B,kBACA19B,KAAAg9B,IAAA4B,oBAAA,OAAA5+B,KAAAg+B,mBAGAh+B,KAAAg9B,IAAA6B,QAAA,KACA7+B,KAAAg9B,IAAA8B,UAAA,KACA9+B,KAAAg9B,IAAA+B,WAAA,KACA/+B,KAAAg9B,IAAAgC,OAAA,OAIAh/B,KAAAonB,KAAA,WAAApnB,OASAm7B,EAAAt4B,UAAAi5B,KAAA,SAAA5kB,GAaA,OAZAlX,KAAAonB,KAAA,QAAApnB,MAGAkX,GACAlX,KAAAinB,KAAA,WAAA/P,IAIAlX,KAAA28B,eAAA,GAAA,gBAAA38B,MAAA28B,eACA38B,KAAA28B,YAAA38B,KAAAi/B,sBAAAj/B,KAAA8tB,MAGA9tB,KAAA48B,UACA,IAAAzB,GAAAiB,UAAA8C,MACAl/B,KAAAm/B,YACA,MAEA,KAAAhE,GAAAiB,UAAAgD,MACAp/B,KAAAq/B,aAAA,QACA,MAEA,KAAAlE,GAAAiB,UAAAkD,MACAt/B,KAAAq/B,aAAA,QACA,MAEA,KAAAlE,GAAAiB,UAAAmD,IAEA,QACAf,GAAAx+B,KAAA28B,YACA38B,KAAAw/B,WAGAx/B,KAAAy/B,aAWAtE,EAAAt4B,UAAAs8B,WAAA,WACAn/B,KAAAsC,KAAA,GAAAo9B,OAEA1/B,KAAA28B,cACA38B,KAAAsC,KAAAq6B,YAAA38B,KAAA28B,aAGA38B,KAAAsC,KAAA8K,IAAApN,KAAA8tB,IAEA9tB,KAAAm9B,SAAA,EAEAn9B,KAAAsC,KAAAq9B,iBAAA,QAAA3/B,KAAAw9B,eAAA,GACAx9B,KAAAsC,KAAAq9B,iBAAA,OAAA3/B,KAAAs9B,gBAAA,GACAt9B,KAAAsC,KAAAq9B,iBAAA,WAAA3/B,KAAA09B,kBAAA,IAQAvC,EAAAt4B,UAAAw8B,aAAA,SAAAh9B,GAQA,GAPA,UAAAA,GAAA,mBAAAu9B,OACA5/B,KAAAsC,KAAA,GAAAs9B,OAGA5/B,KAAAsC,KAAAu9B,SAAAC,cAAAz9B,GAGA,OAAArC,KAAAsC,KAGA,MAFAtC,MAAA6M,MAAA,GAAAjM,OAAA,uBAAAyB,OACArC,MAAAu9B,UAKA,IAAAwC,UAAAC,WACAhgC,KAAAsC,KAAA8K,IAAAtB,MAAA4O,QAAA1a,KAAA8tB,KAAA9tB,KAAA8tB,IAAA,GAAA9tB,KAAA8tB,QAGA,IAAAhiB,MAAA4O,QAAA1a,KAAA8tB,KACA,IAAA,GAAAntB,GAAA,EAAAA,EAAAX,KAAA8tB,IAAA9sB,SAAAL,EACAX,KAAAsC,KAAA29B,YAAAjgC,KAAAkgC,cAAA79B,EAAArC,KAAA8tB,IAAAntB,SAIAX,MAAAsC,KAAA29B,YAAAjgC,KAAAkgC,cAAA79B,EAAArC,KAAA8tB,KAIA9tB,MAAA,KAAAqC,EAAA,GAAA89B,cAAA99B,EAAAi8B,UAAA,KAAA,EAEAt+B,KAAAsC,KAAAq9B,iBAAA,QAAA3/B,KAAAw9B,eAAA,GACAx9B,KAAAsC,KAAAq9B,iBAAA,OAAA3/B,KAAAs9B,gBAAA,GACAt9B,KAAAsC,KAAAq9B,iBAAA,WAAA3/B,KAAA09B,kBAAA,GACA19B,KAAAsC,KAAAq9B,iBAAA,iBAAA3/B,KAAAs9B,gBAAA,GAEAt9B,KAAAsC,KAAAw5B,QAQAX,EAAAt4B,UAAA48B,SAAA,WAEA,gBAAAz/B,MAAA88B,UACA98B,KAAA88B,QAAA98B,KAAAogC,oBAGA,IAAApD,GAAAh9B,KAAAg9B,IAAA,GAAA0B,eAGA1B,GAAAqD,KAAA,MAAArgC,KAAA8tB,KAAA,GAIA9tB,KAAA88B,UAAA3B,EAAAmB,kBAAAgE,MAAAtgC,KAAA88B,UAAA3B,EAAAmB,kBAAAiE,SACAvD,EAAAwD,aAAArF,EAAAmB,kBAAAmE,KAGAzD,EAAAwD,aAAAxgC,KAAA88B,QAGAE,EAAA2C,iBAAA,QAAA3/B,KAAA49B,kBAAA,GACAZ,EAAA2C,iBAAA,QAAA3/B,KAAA89B,kBAAA,GACAd,EAAA2C,iBAAA,WAAA3/B,KAAA09B,kBAAA,GACAV,EAAA2C,iBAAA,OAAA3/B,KAAAg+B,iBAAA,GAEAhB,EAAA0D,QAQAvF,EAAAt4B,UAAA28B,SAAA,WAEA,gBAAAx/B,MAAA88B,UACA98B,KAAA88B,QAAA98B,KAAAogC,oBAGA,IAAAO,GAAA3gC,KAAAg9B,IAAA,GAAAyB,eAKAkC,GAAAta,QAAA,IAEAsa,EAAA9B,QAAA7+B,KAAA49B,iBACA+C,EAAA7B,UAAA9+B,KAAAk+B,mBACAyC,EAAA5B,WAAA/+B,KAAA09B,iBACAiD,EAAA3B,OAAAh/B,KAAAg+B,gBAEA2C,EAAAN,KAAA,MAAArgC,KAAA8tB,KAAA,GAKA9S,WAAA,WACA2lB,EAAAD,QACA,IAWAvF,EAAAt4B,UAAAq9B,cAAA,SAAA79B,EAAAyrB,EAAA8S,GACAA,IACAA,EAAAv+B,EAAA,IAAAyrB,EAAA/I,OAAA+I,EAAA7D,YAAA,KAAA,GAGA,IAAAziB,GAAAq4B,SAAAC,cAAA,SAKA,OAHAt4B,GAAA4F,IAAA0gB,EACAtmB,EAAAnF,KAAAu+B,EAEAp5B,GASA2zB,EAAAt4B,UAAA46B,SAAA,SAAAtF,GACAn4B,KAAA6M,MAAA,GAAAjM,OAAA,gCAAAu3B,EAAAiB,OAAAyH,UACA7gC,KAAAu9B,YAUApC,EAAAt4B,UAAA86B,YAAA,SAAAxF,GACAA,GAAAA,EAAA2I,kBACA9gC,KAAAonB,KAAA,WAAApnB,KAAAm4B,EAAA4I,OAAA5I,EAAA6I,QAUA7F,EAAAt4B,UAAAg7B,YAAA,WACA79B,KAAA6M,MAAA,GAAAjM,OACAw9B,EAAAp+B,KAAAg9B,KAAA,4BACAh9B,KAAAg9B,IAAAiE,OAAA,YAAAjhC,KAAAg9B,IAAAkE,WAAA,KAGAlhC,KAAAu9B,YASApC,EAAAt4B,UAAAk7B,YAAA,WACA/9B,KAAA6M,MAAA,GAAAjM,OAAAw9B,EAAAp+B,KAAAg9B,KAAA,qCACAh9B,KAAAu9B,YASApC,EAAAt4B,UAAAs7B,cAAA,WACAn+B,KAAA6M,MAAA,GAAAjM,OAAAw9B,EAAAp+B,KAAAg9B,KAAA,uBACAh9B,KAAAu9B,YASApC,EAAAt4B,UAAAo7B,WAAA,WACA,GAAAjB,GAAAh9B,KAAAg9B,IACAiE,EAAA/4B,SAAA80B,EAAAiE,OAAAjE,EAAAiE,OAAA,GAGA,IAAA,MAAAA,GAAA,MAAAA,GAAA,IAAAA,GAAAjE,EAAAmE,aAAAngC,OAAA,EAEA,GAAAhB,KAAA88B,UAAA3B,EAAAmB,kBAAAmE,KACAzgC,KAAAsC,KAAA06B,EAAAmE,iBAGA,IAAAnhC,KAAA88B,UAAA3B,EAAAmB,kBAAAgE,KACA,IACAtgC,KAAAsC,KAAAg+B,KAAA1T,MAAAoQ,EAAAmE,cACAnhC,KAAAi9B,QAAA,EACA,MAAA/8B,GACAF,KAAA6M,MAAA,GAAAjM,OAAA,qCAAAV,OAIA,IAAAF,KAAA88B,UAAA3B,EAAAmB,kBAAAiE,SACA,IACA,GAAA1gC,OAAAuhC,UAAA,CACA,GAAAC,GAAA,GAAAD,UACAphC,MAAAsC,KAAA++B,EAAAC,gBAAAtE,EAAAmE,aAAA,gBAEA,CACA,GAAAI,GAAA1B,SAAAC,cAAA,MACAyB,GAAAC,UAAAxE,EAAAmE,aACAnhC,KAAAsC,KAAAi/B,EAEAvhC,KAAAk9B,OAAA,EACA,MAAAh9B,GACAF,KAAA6M,MAAA,GAAAjM,OAAA,oCAAAV,OAKAF,MAAAsC,KAAA06B,EAAAyE,UAAAzE,EAAAmE,iBAIAnhC,MAAA6M,MAAA,GAAAjM,OAAA,IAAAo8B,EAAAiE,OAAA,IAAAjE,EAAAkE,WAAA,IAAAlE,EAAA0E,YAGA1hC,MAAAu9B,YAiBApC,EAAAt4B,UAAAo8B,sBAAA,SAAAnR,EAAA6T,GAEA,GAAA,IAAA7T,EAAA3B,QAAA,SACA,MAAA,EAIAwV,GAAAA,GAAA9hC,OAAAoI,SAEA02B,IACAA,EAAAkB,SAAAC,cAAA,MAMAnB,EAAA/Q,KAAAE,EACAA,EAAAyQ,EAAA3R,MAAA+R,EAAA/Q,KAEA,IAAAgU,IAAA9T,EAAAR,MAAA,KAAAqU,EAAArU,MAAAQ,EAAAR,OAAAqU,EAAArU,IAGA,OAAAQ,GAAAP,WAAAoU,EAAApU,UAAAqU,GAAA9T,EAAAZ,WAAAyU,EAAAzU,SAIA,GAHA,aAaAiO,EAAAt4B,UAAAu9B,kBAAA,WACA,MAAAjF,GAAA0G,YAAA7hC,KAAA8hC,kBAAA3G,EAAAmB,kBAAAmE,MAGAtF,EAAAt4B,UAAAg6B,mBAAA,WACA,MAAA1B,GAAA4G,aAAA/hC,KAAA8hC,kBAAA3G,EAAAiB,UAAAmD,KAGApE,EAAAt4B,UAAAi/B,cAAA,WACA,GACAh6B,GADAgmB,EAAA9tB,KAAA8tB,GAGA,IAAA9tB,KAAA08B,UAAA,CACA,GAAAsF,GAAAlU,EAAA3B,QAAA,IACArkB,GAAAgmB,EAAAwQ,UAAA0D,EAAA,EAAAlU,EAAA3B,QAAA,IAAA6V,QAEA,CACA,GAAAC,GAAAnU,EAAA3B,QAAA,IACA,MAAA8V,IACAnU,EAAAA,EAAAwQ,UAAA,EAAA2D,IAGAn6B,EAAAgmB,EAAAwQ,UAAAxQ,EAAA7D,YAAA,KAAA,GAGA,MAAAniB,IAUAqzB,EAAAt4B,UAAAq/B,oBAAA,SAAA7/B,GACA,OAAAA,GACA,IAAA84B,GAAAmB,kBAAA6F,OACA,MAAA,0BAEA,KAAAhH,GAAAmB,kBAAA8F,KACA,MAAA,kBAEA,KAAAjH,GAAAmB,kBAAAiE,SACA,MAAA,iBAEA,KAAApF,GAAAmB,kBAAAgE,KACA,MAAA,kBAEA,KAAAnF,GAAAmB,kBAAA+F,QACA,IAAAlH,GAAAmB,kBAAAmE,KAEA,QACA,MAAA,eAgBAtF,EAAAiB,WACAmD,IAAA,EACAL,MAAA,EACAE,MAAA,EACAE,MAAA,GAeAnE,EAAAkB,iBACAiG,OAAA,EACAC,OAAA,EACAC,iBAAA,EACAC,QAAA,EACAC,KAAA,GAgBAvH,EAAAmB,mBACA+F,QAAA,OACAF,OAAA,cACAC,KAAA,OACA7B,SAAA,WACAD,KAAA,OACAG,KAAA,QAGAtF,EAAA4G,cACAY,IAAAxH,EAAAiB,UAAA8C,MACA0D,IAAAzH,EAAAiB,UAAA8C,MACA2D,IAAA1H,EAAAiB,UAAA8C,MACA4D,IAAA3H,EAAAiB,UAAA8C,MACA6D,KAAA5H,EAAAiB,UAAA8C,MACA8D,IAAA7H,EAAAiB,UAAA8C,MACA+D,KAAA9H,EAAAiB,UAAA8C,MACAgE,KAAA/H,EAAAiB,UAAA8C,MACAiE,IAAAhI,EAAAiB,UAAA8C,OAGA/D,EAAA0G,aAEAuB,MAAAjI,EAAAmB,kBAAAiE,SACA8C,KAAAlI,EAAAmB,kBAAAiE,SACA+C,IAAAnI,EAAAmB,kBAAAiE,SACAgD,IAAApI,EAAAmB,kBAAAiE,SACAiD,IAAArI,EAAAmB,kBAAAiE,SACAkD,IAAAtI,EAAAmB,kBAAAiE,SACAmD,IAAAvI,EAAAmB,kBAAAiE,SAGAoC,IAAAxH,EAAAmB,kBAAA8F,KACAQ,IAAAzH,EAAAmB,kBAAA8F,KACAS,IAAA1H,EAAAmB,kBAAA8F,KACAU,IAAA3H,EAAAmB,kBAAA8F,KACAW,KAAA5H,EAAAmB,kBAAA8F,KACAY,IAAA7H,EAAAmB,kBAAA8F,KACAa,KAAA9H,EAAAmB,kBAAA8F,KACAc,KAAA/H,EAAAmB,kBAAA8F,KACAe,IAAAhI,EAAAmB,kBAAA8F,KAGAuB,KAAAxI,EAAAmB,kBAAAgE,KAGAsD,KAAAzI,EAAAmB,kBAAAmE,KACAoD,IAAA1I,EAAAmB,kBAAAmE,MAUAtF,EAAA2I,qBAAA,SAAAje,EAAA+W,GACAyB,EAAAlD,EAAA4G,aAAAlc,EAAA+W,IAUAzB,EAAA4I,oBAAA,SAAAle,EAAAiX,GACAuB,EAAAlD,EAAA0G,YAAAhc,EAAAiX,MAeAN,cAAA,GAAA1O,IAAA,KAAAkW,IAAA,SAAAtjC,EAAAjB,EAAAD,GACAC,EAAAD,SAGAykC,QAAA,oEAEAC,aAAA,SAAA3a,GAQA,IAPA,GACA4a,GADAjc,EAAA,GAEAkc,EAAA,GAAAt4B,OAAA,GACAu4B,EAAA,EACAC,EAAA,EACAC,EAAA,EAEAF,EAAA9a,EAAAvoB,QAAA,CAGA,IADAmjC,EAAA,GAAAr4B,OAAA,GACAw4B,EAAA,EAAAA,EAAAH,EAAAnjC,OAAAsjC,IACAD,EAAA9a,EAAAvoB,OAGAmjC,EAAAG,GAAA,IAAA/a,EAAAnB,WAAAic,KAGAF,EAAAG,GAAA,CAgBA,QAVAF,EAAA,GAAAD,EAAA,IAAA,EAEAC,EAAA,IAAA,EAAAD,EAAA,KAAA,EAAAA,EAAA,IAAA,EAEAC,EAAA,IAAA,GAAAD,EAAA,KAAA,EAAAA,EAAA,IAAA,EAEAC,EAAA,GAAA,GAAAD,EAAA,GAGAI,EAAAF,GAAA9a,EAAAvoB,OAAA,IAEA,IAAA,GAEAojC,EAAA,GAAA,GACAA,EAAA,GAAA,EACA,MAEA,KAAA,GAEAA,EAAA,GAAA,GASA,IAAAE,EAAA,EAAAA,EAAAF,EAAApjC,OAAAsjC,IACApc,GAAAloB,KAAAikC,QAAAvf,OAAA0f,EAAAE,IAGA,MAAApc,UAIAsc,IAAA,SAAA9jC,EAAAjB,EAAAD,GACAC,EAAAD,QAAAkB,EAAA,YAEAjB,EAAAD,QAAA27B,SAAAz6B,EAAA,cAEAjB,EAAAD,QAAAilC,YACAC,SACAC,OAAAjkC,EAAA,iCAEAkkC,SACAC,KAAAnkC,EAAA,kCAIAokC,WAAA,GAAAvI,aAAA,GAAAwI,+BAAA,GAAAC,6BAAA,KAAAC,IAAA,SAAAvkC,EAAAjB,EAAAD,GAEA,GAAA0lC,KAEAzlC,GAAAD,QAAA,WACA,MAAA,UAAAu8B,EAAAzb,GAEA4kB,EAAAnJ,EAAAjO,MACAiO,EAAAz5B,KAAA4iC,EAAAnJ,EAAAjO,KACAiO,EAAAwB,YAIAxB,EAAA9U,KAAA,WAAA,WACAie,EAAAllC,KAAA8tB,KAAA9tB,KAAAsC,OAIAge,WAIA6kB,IAAA,SAAAzkC,EAAAjB,EAAAD,GACA,GAAA27B,GAAAz6B,EAAA,kBACA0kC,EAAA1kC,EAAA,YAEAb,QAAAwlC,IAAAxlC,OAAAwlC,KAAAxlC,OAAAylC,UAIA7lC,EAAAD,QAAA,WACA,MAAA,UAAAu8B,EAAAzb,GACA,IAAAyb,EAAAz5B,KACA,MAAAge,IAIA,IAAAyb,EAAAiB,KAAAjB,EAAAe,UAAA3B,EAAAmB,kBAAA8F,KAEA,GAAAviC,OAAA0lC,MAAA,gBAAAxJ,GAAAz5B,MAmBA,GAAA,IAAAy5B,EAAAz5B,KAAAD,KAAA8pB,QAAA,SAAA,CACA,GAAA/e,GAAAi4B,IAAAG,gBAAAzJ,EAAAz5B,KAEAy5B,GAAA8I,KAAA9I,EAAAz5B,KACAy5B,EAAAz5B,KAAA,GAAAo9B,OACA3D,EAAAz5B,KAAA8K,IAAAA,EAEA2uB,EAAAoB,SAAA,EAGApB,EAAAz5B,KAAA08B,OAAA,WACAqG,IAAAI,gBAAAr4B,GACA2uB,EAAAz5B,KAAA08B,OAAA,KAEA1e,UAjCA,CACA,GAAAje,GAAA05B,EAAAiB,IAAA0I,kBAAA,eAGArjC,IAAA,IAAAA,EAAA8pB,QAAA,WACA4P,EAAAz5B,KAAA,GAAAo9B,OACA3D,EAAAz5B,KAAA8K,IAAA,QAAA/K,EAAA,WAAA+iC,EAAAlB,aAAAnI,EAAAiB,IAAAmE,cAEApF,EAAAoB,SAAA,EAGApB,EAAAz5B,KAAA08B,OAAA,WACAjD,EAAAz5B,KAAA08B,OAAA,KAEA1e,UAwBAA,SAKAqlB,iBAAA,GAAAC,YAAA,KAAAC,IAAA,SAAAnlC,EAAAjB,EAAAD,GACAC,EAAAD,SACAgP,KAAA,UACAsY,QAAA,aACAgf,YAAA,0EACAC,OAAA,aACAC,cACA,oCACA,oCAEAC,KAAA,iBACAC,SAAA,6BACAC,KAAA,2CACAC,QAAA,MACAC,YACAhkC,KAAA,MACAyrB,IAAA,yCAEAwY,SACA97B,MAAA,qBACAqW,KAAA,oBACA0lB,MAAA,OACAC,KAAA,qDAEAC,OACA,OACA,OACA,kBACA,UACA,eACA,aAEAC,cACAnwB,MAAA,SACAowB,KAAA,SACAtU,OAAA,SACAmK,cAAA,SACAoK,gBAAA,SACAC,eAAA,yDACAC,kBAAA,UAEAC,iBACAC,WAAA,UACAC,KAAA,SACAC,IAAA,SACAC,KAAA,SACAC,cAAA,SACAC,cAAA,SACAC,aAAA,SACAC,cAAA,SACAC,cAAA,UACAC,cAAA,SACAC,eAAA,SACAC,cAAA,SACAC,kBAAA,SACAC,cAAA,SACAC,YAAA,SACAC,iBAAA,wDACAC,MAAA,SACAC,iBAAA,SACAC,SAAA,SACAC,MAAA,SACAC,cAAA,SACAC,eAAA,SACAC,OAAA,SACAC,eAAA,SACAC,sBAAA,SACAC,SAAA,UAEAzB,YACAvqB,WACA,eAKAisB,IAAA,SAAAhoC,EAAAjB,EAAAD,GAkBA,QAAAmpC,GAAAC,GAGA,GAAArH,GAAA1B,SAAAC,cAAA,MAEAyB,GAAAsH,MAAAjlC,MAAA,QACA29B,EAAAsH,MAAAhlC,OAAA,QACA09B,EAAAsH,MAAAC,SAAA,WACAvH,EAAAsH,MAAAE,IAAA,EACAxH,EAAAsH,MAAA/qB,KAAA,EAEAyjB,EAAAsH,MAAAG,OAAA,EAQAhpC,KAAAuhC,IAAAA,EAQAvhC,KAAAipC,QAQAjpC,KAAAkpC,SAAA,EAOAlpC,KAAAmpC,OAAA,EAOAnpC,KAAA4oC,SAAAA,EAQA5oC,KAAAopC,YAKAppC,KAAAqpC,WAAArpC,KAAAqpC,WAAArmC,KAAAhD,MACAA,KAAAspC,aAAAtpC,KAAAspC,aAAAtmC,KAAAhD,MAQAA,KAAAupC,UAAA,EAIA1pC,OAAA8/B,iBAAA,UAAA3/B,KAAAqpC,YAAA,GA5FA,GAAAG,GAAA9oC,EAAA,UAGA6O,QAAA4pB,OACAqQ,EAAAC,cAAA5mC,UACAnC,EAAA,uBA2FAioC,EAAA9lC,UAAAmH,YAAA2+B,EACAlpC,EAAAD,QAAAmpC,EAMAA,EAAA9lC,UAAAqH,SAAA,WAEAlK,KAAAupC,WAKAvpC,KAAAupC,UAAA,EAEA1pC,OAAAggC,SAAAF,iBAAA,YAAA3/B,KAAAspC,cAAA,GACAzpC,OAAA++B,oBAAA,UAAA5+B,KAAAqpC,YAAA,GAEArpC,KAAA4oC,SAAA5hB,GAAA,aAAAhnB,KAAA0pC,OAAA1pC,MAEAA,KAAA4oC,SAAAe,KAAAC,WAAA3J,YAAAjgC,KAAAuhC,OAOAoH,EAAA9lC,UAAAgnC,WAAA,WAEA7pC,KAAAupC,WAKAvpC,KAAAupC,UAAA,EAEA1pC,OAAAggC,SAAAjB,oBAAA,YAAA5+B,KAAAspC,cACAzpC,OAAA8/B,iBAAA,UAAA3/B,KAAAqpC,YAAA,GAEArpC,KAAA4oC,SAAA1hB,IAAA,aAAAlnB,KAAA0pC,QAEA1pC,KAAAuhC,IAAAqI,WAAAE,YAAA9pC,KAAAuhC,OASAoH,EAAA9lC,UAAAknC,wBAAA,SAAAC,GAEA,GAAAA,EAAAC,QAAA,CAKAD,EAAAE,YAAAF,EAAAG,cAEAH,EAAAI,mBAEApqC,KAAAqqC,SAAAL,GAGAA,EAAAd,SAAAlpC,KAAAkpC,SAKA,KAAA,GAFAE,GAAAY,EAAAZ,SAEAzoC,EAAAyoC,EAAApoC,OAAA,EAAAL,GAAA,EAAAA,IAEAX,KAAA+pC,wBAAAX,EAAAzoC,MASAgoC,EAAA9lC,UAAA6mC,OAAA,WAIA1pC,KAAA+pC,wBAAA/pC,KAAA4oC,SAAA0B,oBAEA,IAAAC,GAAAvqC,KAAA4oC,SAAAe,KAAAa,wBACAC,EAAAF,EAAA3mC,MAAA5D,KAAA4oC,SAAAhlC,MACA8mC,EAAAH,EAAA1mC,OAAA7D,KAAA4oC,SAAA/kC,OAEA09B,EAAAvhC,KAAAuhC,GAEAA,GAAAsH,MAAA/qB,KAAAysB,EAAAzsB,KAAA,KACAyjB,EAAAsH,MAAAE,IAAAwB,EAAAxB,IAAA,KACAxH,EAAAsH,MAAAjlC,MAAA5D,KAAA4oC,SAAAhlC,MAAA,KACA29B,EAAAsH,MAAAhlC,OAAA7D,KAAA4oC,SAAA/kC,OAAA,IAEA,KAAA,GAAAlD,GAAA,EAAAA,EAAAX,KAAAopC,SAAApoC,OAAAL,IACA,CAEA,GAAAgqC,GAAA3qC,KAAAopC,SAAAzoC,EAEA,IAAAgqC,EAAAzB,WAAAlpC,KAAAkpC,SAEAyB,EAAAP,mBAAA,EAEAZ,EAAAoB,MAAAC,YAAA7qC,KAAAopC,SAAAzoC,EAAA,GACAX,KAAAuhC,IAAAuI,YAAAa,EAAAG,gBACA9qC,KAAAipC,KAAAt+B,KAAAggC,EAAAG,gBACAH,EAAAG,eAAA,KAEAnqC,IAEA,IAAAX,KAAAopC,SAAApoC,QAEAhB,KAAA6pC,iBAIA,CAEAtI,EAAAoJ,EAAAG,cACA,IAAAC,GAAAJ,EAAAI,QACAC,EAAAL,EAAAM,cAEAN,GAAAI,SAEAxJ,EAAAsH,MAAA/qB,MAAAktB,EAAAE,GAAAH,EAAAp2B,EAAAq2B,EAAAvqC,GAAAgqC,EAAA,KACAlJ,EAAAsH,MAAAE,KAAAiC,EAAAG,GAAAJ,EAAAjzB,EAAAkzB,EAAAI,GAAAV,EAAA,KAEAnJ,EAAAsH,MAAAjlC,MAAAmnC,EAAAnnC,MAAAonC,EAAAvqC,EAAAgqC,EAAA,KACAlJ,EAAAsH,MAAAhlC,OAAAknC,EAAAlnC,OAAAmnC,EAAAI,EAAAV,EAAA,OAKAK,EAAAJ,EAAAU,YAEArrC,KAAAsrC,WAAAP,GAEAxJ,EAAAsH,MAAA/qB,KAAAitB,EAAAp2B,EAAA81B,EAAA,KACAlJ,EAAAsH,MAAAE,IAAAgC,EAAAjzB,EAAA4yB,EAAA,KAEAnJ,EAAAsH,MAAAjlC,MAAAmnC,EAAAnnC,MAAA6mC,EAAA,KACAlJ,EAAAsH,MAAAhlC,OAAAknC,EAAAlnC,OAAA6mC,EAAA,OAMA1qC,KAAAkpC,YAGAP,EAAA9lC,UAAAyoC,WAAA,SAAAP,GAEAA,EAAAp2B,EAAA,IAEAo2B,EAAAnnC,OAAAmnC,EAAAp2B,EACAo2B,EAAAp2B,EAAA,GAGAo2B,EAAAjzB,EAAA,IAEAizB,EAAAlnC,QAAAknC,EAAAjzB,EACAizB,EAAAjzB,EAAA,GAGAizB,EAAAp2B,EAAAo2B,EAAAnnC,MAAA5D,KAAA4oC,SAAAhlC,QAEAmnC,EAAAnnC,MAAA5D,KAAA4oC,SAAAhlC,MAAAmnC,EAAAp2B,GAGAo2B,EAAAjzB,EAAAizB,EAAAlnC,OAAA7D,KAAA4oC,SAAA/kC,SAEAknC,EAAAlnC,OAAA7D,KAAA4oC,SAAA/kC,OAAAknC,EAAAjzB,IASA6wB,EAAA9lC,UAAAwnC,SAAA,SAAAL,GAIA,GAAAzI,GAAAvhC,KAAAipC,KAAAhvB,KAEAsnB,KAEAA,EAAA1B,SAAAC,cAAA,UAEAyB,EAAAsH,MAAAjlC,MAAA,QACA29B,EAAAsH,MAAAhlC,OAAA,QACA09B,EAAAsH,MAAA0C,gBAAAvrC,KAAAmpC,MAAA,oBAAA,cACA5H,EAAAsH,MAAAC,SAAA,WACAvH,EAAAsH,MAAAG,OAAA,EACAzH,EAAAsH,MAAA2C,YAAA,OAGAjK,EAAA5B,iBAAA,QAAA3/B,KAAAyrC,SAAAzoC,KAAAhD,OACAuhC,EAAA5B,iBAAA,QAAA3/B,KAAA0rC,SAAA1oC,KAAAhD,OACAuhC,EAAA5B,iBAAA,WAAA3/B,KAAA2rC,YAAA3oC,KAAAhD,QAMAuhC,EAAA7a,MAAAsjB,EAAA4B,iBAAA,iBAAA5rC,KAAA6rC,SAIA7B,EAAAI,mBAAA,EACAJ,EAAAc,eAAAvJ,EACAA,EAAAyI,cAAAA,EAGAhqC,KAAAopC,SAAAz+B,KAAAq/B,GACAhqC,KAAAuhC,IAAAtB,YAAA+J,EAAAc,gBACAd,EAAAc,eAAAe,SAAA7B,EAAA6B,UAQAlD,EAAA9lC,UAAA4oC,SAAA,SAAAvrC,GAEA,GAAA4rC,GAAA9rC,KAAA4oC,SAAAmD,QAAAC,WACAF,GAAAG,cAAA/rC,EAAAk5B,OAAA4Q,cAAA,QAAA8B,EAAAI,YAOAvD,EAAA9lC,UAAA6oC,SAAA,SAAAxrC,GAEA,GAAA4rC,GAAA9rC,KAAA4oC,SAAAmD,QAAAC,WACAF,GAAAG,cAAA/rC,EAAAk5B,OAAA4Q,cAAA,YAAA8B,EAAAI,YAOAvD,EAAA9lC,UAAA8oC,YAAA,SAAAzrC,GAEA,GAAA4rC,GAAA9rC,KAAA4oC,SAAAmD,QAAAC,WACAF,GAAAG,cAAA/rC,EAAAk5B,OAAA4Q,cAAA,WAAA8B,EAAAI,YAQAvD,EAAA9lC,UAAAwmC,WAAA,SAAAnpC,GAEA,IAAAA,EAAAisC,SAKAnsC,KAAAkK,YAQAy+B,EAAA9lC,UAAAymC,aAAA,WAEAtpC,KAAA6pC,cAQAlB,EAAA9lC,UAAA0C,QAAA,WAEAvF,KAAAuhC,IAAA,IAEA,KAAA,GAAA5gC,GAAA,EAAAA,EAAAX,KAAAopC,SAAApoC,OAAAL,IAEAX,KAAAopC,SAAAzoC,GAAA4gC,IAAA,IAIA1hC,QAAAggC,SAAAjB,oBAAA,YAAA5+B,KAAAspC,cACAzpC,OAAA++B,oBAAA,UAAA5+B,KAAAqpC,YAEArpC,KAAAipC,KAAA,KACAjpC,KAAAopC,SAAA,KACAppC,KAAA4oC,SAAA,MAIAY,EAAA4C,cAAAC,eAAA,gBAAA1D,GACAa,EAAA8C,eAAAD,eAAA,gBAAA1D,KAGA4D,UAAA,GAAAC,qBAAA,KAAAC,IAAA,SAAA/rC,EAAAjB,EAAAD,GAeA,GAAAktC,IAKAxC,YAAA,EAKA0B,gBAAA,KAKAC,SAAA,EAKAzB,mBAAA,EAKAU,gBAAA,EAIArrC,GAAAD,QAAAktC,OAEAC,IAAA,SAAAjsC,EAAAjB,EAAAD,GAWAC,EAAAD,SACAktC,iBAAAhsC,EAAA,sBACAioC,qBAAAjoC,EAAA,6BAGAksC,yBAAA,GAAAJ,qBAAA,KAAAK,IAAA,SAAAnsC,EAAAjB,EAAAD,GAMA,GAAAstC,IAQAC,QAAArsC,EAAA,sBAAAomB,QAOAkmB,KAAA,EAAAx3B,KAAAy3B,GAOAC,WAAA,IAAA13B,KAAAy3B,GAOAE,WAAA33B,KAAAy3B,GAAA,IASAG,YAAA,IAYAC,eACAC,QAAA,EACAC,MAAA,EACAC,OAAA,GA6BAC,aACAC,OAAA,EACAC,IAAA,EACAC,SAAA,EACAC,OAAA,EACAC,QAAA,EACAC,OAAA,EACAC,QAAA,EACAC,YAAA,EACAC,WAAA,EACAC,WAAA,EACAC,WAAA,GACAC,WAAA,GACAC,UAAA,GACAC,IAAA,GACAC,WAAA,GACAC,MAAA,GACAC,WAAA,IAkBAC,YACAC,OAAA,EACAC,MAAA,EACAC,UAAA,EACAC,WAAA,EACAC,UAAA,EACAC,eAAA,EACAC,aAAA,GAgBAC,aACA9M,QAAA,EACAz5B,OAAA,EACAC,QAAA,GAWAumC,cAAA,SAEAC,WAAA,EAEAC,kBAAA,EAmBAC,wBACA5F,KAAA,KACA6F,WAAA,EACAC,WAAA,EACAC,WAAA,EACAC,YAAA,EACAC,aAAA,EACArE,gBAAA,EACAsE,mBAAA,EACAC,uBAAA,EACAC,aAAA,GAeAC,QACAC,KAAA,EACAC,KAAA,EACAC,KAAA,EACAC,KAAA,EACAC,KAAA,GAKAC,kBAAA,IAGA7wC,GAAAD,QAAAstC,IAEAyD,qBAAA,KAAAC,IAAA,SAAA9vC,EAAAjB,EAAAD,GAmBA,QAAAixC,KAEAhH,EAAA1oC,KAAAf,MAQAA,KAAAopC,YA5BA,GAAAsH,GAAAhwC,EAAA,WACAkqC,EAAAlqC,EAAA,YACA+oC,EAAA/oC,EAAA,mBACAiwC,EAAAjwC,EAAA,6BACAkwC,EAAA,GAAAF,GAAAG,MA4BAJ,GAAA5tC,UAAA0M,OAAA/L,OAAAimC,EAAA5mC,WACA4tC,EAAA5tC,UAAAmH,YAAAymC,EACAhxC,EAAAD,QAAAixC,EAEAlhC,OAAAuhC,iBAAAL,EAAA5tC,WAOAe,OACAoM,IAAA,WAEA,MAAAhQ,MAAA+wC,MAAAp8B,EAAA3U,KAAAgxC,iBAAAptC,OAEAsM,IAAA,SAAAf,GAGA,GAAAvL,GAAA5D,KAAAgxC,iBAAAptC,KAEA,KAAAA,EAEA5D,KAAA+wC,MAAAp8B,EAAAxF,EAAAvL,EAIA5D,KAAA+wC,MAAAp8B,EAAA,EAIA3U,KAAAixC,OAAA9hC,IAUAtL,QACAmM,IAAA,WAEA,MAAAhQ,MAAA+wC,MAAAj5B,EAAA9X,KAAAgxC,iBAAAntC,QAEAqM,IAAA,SAAAf,GAGA,GAAAtL,GAAA7D,KAAAgxC,iBAAAntC,MAEA,KAAAA,EAEA7D,KAAA+wC,MAAAj5B,EAAA3I,EAAAtL,EAIA7D,KAAA+wC,MAAAj5B,EAAA,EAGA9X,KAAAkxC,QAAA/hC,MAUAshC,EAAA5tC,UAAAsuC,iBAAA,aASAV,EAAA5tC,UAAAwnC,SAAA,SAAAM,GAEA,GAAAyG,GAAAv9B,UAAA7S,MAGA,IAAAowC,EAAA,EAIA,IAAA,GAAAzwC,GAAA,EAAAywC,EAAAzwC,EAAAA,IAEAX,KAAAqqC,SAAAx2B,UAAAlT,QAMAgqC,GAAA0G,QAEA1G,EAAA0G,OAAAvH,YAAAa,GAGAA,EAAA0G,OAAArxC,KAEAA,KAAAopC,SAAAz+B,KAAAggC,GAGA3qC,KAAAmxC,iBAAAnxC,KAAAopC,SAAApoC,OAAA,GACA2pC,EAAAvjB,KAAA,QAAApnB,KAGA,OAAA2qC,IAUA8F,EAAA5tC,UAAAyuC,WAAA,SAAA3G,EAAAv2B,GAEA,GAAAA,GAAA,GAAAA,GAAApU,KAAAopC,SAAApoC,OAeA,MAbA2pC,GAAA0G,QAEA1G,EAAA0G,OAAAvH,YAAAa,GAGAA,EAAA0G,OAAArxC,KAEAA,KAAAopC,SAAAnwB,OAAA7E,EAAA,EAAAu2B,GAGA3qC,KAAAmxC,iBAAA/8B,GACAu2B,EAAAvjB,KAAA,QAAApnB,MAEA2qC,CAIA,MAAA,IAAA/pC,OAAA+pC,EAAA,yBAAAv2B,EAAA,8BAAApU,KAAAopC,SAAApoC,SAUAyvC,EAAA5tC,UAAA0uC,aAAA,SAAA5G,EAAA6G,GAEA,GAAA7G,IAAA6G,EAAA,CAKA,GAAAC,GAAAzxC,KAAA0xC,cAAA/G,GACAgH,EAAA3xC,KAAA0xC,cAAAF,EAEA,IAAA,EAAAC,GAAA,EAAAE,EAEA,KAAA,IAAA/wC,OAAA,iFAGAZ,MAAAopC,SAAAqI,GAAAD,EACAxxC,KAAAopC,SAAAuI,GAAAhH,EACA3qC,KAAAmxC,iBAAAQ,EAAAF,EAAAA,EAAAE,KASAlB,EAAA5tC,UAAA6uC,cAAA,SAAA/G,GAEA,GAAAv2B,GAAApU,KAAAopC,SAAAjd,QAAAwe,EAEA,IAAA,KAAAv2B,EAEA,KAAA,IAAAxT,OAAA,2DAGA,OAAAwT,IASAq8B,EAAA5tC,UAAA+uC,cAAA,SAAAjH,EAAAv2B,GAEA,GAAA,EAAAA,GAAAA,GAAApU,KAAAopC,SAAApoC,OAEA,KAAA,IAAAJ,OAAA,sCAGA,IAAAixC,GAAA7xC,KAAA0xC,cAAA/G,EAEAC,GAAAC,YAAA7qC,KAAAopC,SAAAyI,EAAA,GACA7xC,KAAAopC,SAAAnwB,OAAA7E,EAAA,EAAAu2B,GACA3qC,KAAAmxC,iBAAA/8B,IASAq8B,EAAA5tC,UAAAivC,WAAA,SAAA19B,GAEA,GAAA,EAAAA,GAAAA,GAAApU,KAAAopC,SAAApoC,OAEA,KAAA,IAAAJ,OAAA,8BAAAwT,EAAA,gGAGA,OAAApU,MAAAopC,SAAAh1B,IASAq8B,EAAA5tC,UAAAinC,YAAA,SAAAa,GAEA,GAAAyG,GAAAv9B,UAAA7S,MAGA,IAAAowC,EAAA,EAIA,IAAA,GAAAzwC,GAAA,EAAAywC,EAAAzwC,EAAAA,IAEAX,KAAA8pC,YAAAj2B,UAAAlT,QAIA,CACA,GAAAyT,GAAApU,KAAAopC,SAAAjd,QAAAwe,EAEA,IAAA,KAAAv2B,EAEA,MAGAu2B,GAAA0G,OAAA,KACAzG,EAAAC,YAAA7qC,KAAAopC,SAAAh1B,EAAA,GAGApU,KAAAmxC,iBAAA/8B,GACAu2B,EAAAvjB,KAAA,UAAApnB,MAGA,MAAA2qC,IASA8F,EAAA5tC,UAAAkvC,cAAA,SAAA39B,GAEA,GAAAu2B,GAAA3qC,KAAA8xC,WAAA19B,EASA,OAPAu2B,GAAA0G,OAAA,KACAzG,EAAAC,YAAA7qC,KAAAopC,SAAAh1B,EAAA,GAGApU,KAAAmxC,iBAAA/8B,GACAu2B,EAAAvjB,KAAA,UAAApnB,MAEA2qC,GASA8F,EAAA5tC,UAAAmvC,eAAA,SAAAC,EAAAC,GAEA,GAGAn5B,GAAApY,EAHAwxC,EAAAF,GAAA,EACAnwB,EAAA,gBAAAowB,GAAAA,EAAAlyC,KAAAopC,SAAApoC,OACAoxC,EAAAtwB,EAAAqwB,CAGA,IAAAC,EAAA,GAAAtwB,GAAAswB,EACA,CAGA,IAFAr5B,EAAA/Y,KAAAopC,SAAAnwB,OAAAk5B,EAAAC,GAEAzxC,EAAA,EAAAA,EAAAoY,EAAA/X,SAAAL,EAEAoY,EAAApY,GAAA0wC,OAAA,IAKA,KAFArxC,KAAAmxC,iBAAAc,GAEAtxC,EAAA,EAAAA,EAAAoY,EAAA/X,SAAAL,EAEAoY,EAAApY,GAAAymB,KAAA,UAAApnB,KAGA,OAAA+Y,GAEA,GAAA,IAAAq5B,GAAA,IAAApyC,KAAAopC,SAAApoC,OAEA,QAIA,MAAA,IAAAymB,YAAA,qEAaAgpB,EAAA5tC,UAAAwvC,gBAAA,SAAAzJ,EAAA4G,EAAA8C,GAEA,GAAAC,GAAAvyC,KAAAgxC,iBAEAwB,EAAA,GAAA7B,GAAA/H,EAAA,EAAA2J,EAAA3uC,MAAA,EAAA2uC,EAAA1uC,OAAAyuC,EAAA9C,EAOA,OALAoB,GAAA1F,IAAAqH,EAAA59B,EACAi8B,EAAAzF,IAAAoH,EAAAz6B,EAEA06B,EAAAC,OAAAzyC,KAAA4wC,GAEA4B,GAQA/B,EAAA5tC,UAAA6vC,gBAAA,WAEA,GAAA1yC,KAAAiqC,QAAA,CAKAjqC,KAAA2yC,8BAEA,KAAA,GAAAhyC,GAAA,EAAA+oB,EAAA1pB,KAAAopC,SAAApoC,OAAA0oB,EAAA/oB,IAAAA,EAEAX,KAAAopC,SAAAzoC,GAAA+xC,iBAGA1yC,MAAA4yC,gBAAA,IAIAnC,EAAA5tC,UAAAgwC,yBAAApC,EAAA5tC,UAAA6vC,gBAOAjC,EAAA5tC,UAAAwoC,UAAA,WAEA,IAAArrC,KAAA8yC,eACA,CAEA,GAAA,IAAA9yC,KAAAopC,SAAApoC,OAEA,MAAA0vC,GAAAqC,UAAAC,KAiBA,KAAA,GANAC,GACAC,EACAC,EARAtgB,EAAAiD,EAAAA,EACAhD,EAAAgD,EAAAA,EAEA/C,IAAA+C,EAAAA,GACA9C,IAAA8C,EAAAA,GAMAsd,GAAA,EAEAzyC,EAAA,EAAA+oB,EAAA1pB,KAAAopC,SAAApoC,OAAA0oB,EAAA/oB,IAAAA,EACA,CACA,GAAAgqC,GAAA3qC,KAAAopC,SAAAzoC,EAEAgqC,GAAAV,UAKAmJ,GAAA,EAEAH,EAAAjzC,KAAAopC,SAAAzoC,GAAA0qC,YAEAxY,EAAAA,EAAAogB,EAAAt+B,EAAAke,EAAAogB,EAAAt+B,EACAme,EAAAA,EAAAmgB,EAAAn7B,EAAAgb,EAAAmgB,EAAAn7B,EAEAo7B,EAAAD,EAAArvC,MAAAqvC,EAAAt+B,EACAw+B,EAAAF,EAAApvC,OAAAovC,EAAAn7B,EAEAib,EAAAA,EAAAmgB,EAAAngB,EAAAmgB,EACAlgB,EAAAA,EAAAmgB,EAAAngB,EAAAmgB,GAGA,IAAAC,EAEA,MAAA1C,GAAAqC,UAAAC,KAGA,IAAAT,GAAAvyC,KAAAqzC,OAEAd,GAAA59B,EAAAke,EACA0f,EAAAz6B,EAAAgb,EACAyf,EAAA3uC,MAAAmvB,EAAAF,EACA0f,EAAA1uC,OAAAmvB,EAAAF,EAEA9yB,KAAA8yC,eAAAP,EAGA,MAAAvyC,MAAA8yC,gBAGArC,EAAA5tC,UAAAywC,mBAAA7C,EAAA5tC,UAAAwoC,UAQAoF,EAAA5tC,UAAAmuC,eAAA,WAEA,GAAAuC,GAAAvzC,KAAAirC,cAEAjrC,MAAAirC,eAAAyF,EAAAG,OAAA2C,QAEA,KAAA,GAAA7yC,GAAA,EAAA+oB,EAAA1pB,KAAAopC,SAAApoC,OAAA0oB,EAAA/oB,IAAAA,EAEAX,KAAAopC,SAAAzoC,GAAA+xC,iBAOA,OAJA1yC,MAAAirC,eAAAsI,EAEAvzC,KAAA8yC,eAAA,KAEA9yC,KAAAqrC,UAAAqF,EAAAG,OAAA2C,WAQA/C,EAAA5tC,UAAA4wC,YAAA,SAAA7K,GAIA,GAAA5oC,KAAAiqC,WAAAjqC,KAAA0zC,YAAA,IAAA1zC,KAAA2zC,WAAA,CAMA,GAAAhzC,GAAA+oB,CAGA,IAAA1pB,KAAA4zC,OAAA5zC,KAAA6zC,SACA,CAoBA,IAnBAjL,EAAAkL,gBAAAC,QAGA/zC,KAAA6zC,UAAA7zC,KAAA6zC,SAAA7yC,QAEA4nC,EAAAoL,cAAAC,WAAAj0C,KAAAA,KAAA6zC,UAGA7zC,KAAA4zC,OAEAhL,EAAAsL,YAAAC,SAAAn0C,KAAAA,KAAA4zC,OAGAhL,EAAAkL,gBAAAtpC,QAGAxK,KAAAo0C,aAAAxL,GAGAjoC,EAAA,EAAA+oB,EAAA1pB,KAAAopC,SAAApoC,OAAA0oB,EAAA/oB,EAAAA,IAEAX,KAAAopC,SAAAzoC,GAAA8yC,YAAA7K,EAGAA,GAAAkL,gBAAAC,QAEA/zC,KAAA4zC,OAEAhL,EAAAsL,YAAAG,QAAAr0C,KAAAA,KAAA4zC,OAGA5zC,KAAA6zC,UAEAjL,EAAAoL,cAAAM,YAGA1L,EAAAkL,gBAAAtpC,YAOA,KAHAxK,KAAAo0C,aAAAxL,GAGAjoC,EAAA,EAAA+oB,EAAA1pB,KAAAopC,SAAApoC,OAAA0oB,EAAA/oB,IAAAA,EAEAX,KAAAopC,SAAAzoC,GAAA8yC,YAAA7K,KAWA6H,EAAA5tC,UAAAuxC,aAAA,SAAAxL,KAWA6H,EAAA5tC,UAAA0xC,cAAA,SAAA3L,KAWA6H,EAAA5tC,UAAA2xC,aAAA,SAAA5L,GAGA,GAAA5oC,KAAAiqC,WAAAjqC,KAAAy0C,OAAA,IAAAz0C,KAAA2zC,WAAA,CAKA3zC,KAAA4zC,OAEAhL,EAAAsL,YAAAC,SAAAn0C,KAAA4zC,MAAAhL,GAGA5oC,KAAAu0C,cAAA3L,EACA,KAAA,GAAAjoC,GAAA,EAAA+oB,EAAA1pB,KAAAopC,SAAApoC,OAAA0oB,EAAA/oB,IAAAA,EAEAX,KAAAopC,SAAAzoC,GAAA6zC,aAAA5L,EAGA5oC,MAAA4zC,OAEAhL,EAAAsL,YAAAG,QAAAzL,KAQA6H,EAAA5tC,UAAA0C,QAAA,SAAAmvC,GAIA,GAFAjL,EAAA5mC,UAAA0C,QAAAxE,KAAAf,MAEA00C,EAEA,IAAA,GAAA/zC,GAAA,EAAA+oB,EAAA1pB,KAAAopC,SAAApoC,OAAA0oB,EAAA/oB,IAAAA,EAEAX,KAAAopC,SAAAzoC,GAAA4E,QAAAmvC,EAIA10C,MAAAgyC,iBAEAhyC,KAAAopC,SAAA,QAGAuL,UAAA,GAAAC,4BAAA,GAAAC,WAAA,IAAAC,kBAAA,KAAAC,IAAA,SAAAr0C,EAAAjB,EAAAD,GAiBA,QAAAiqC,KAEAzR,EAAAj3B,KAAAf,MAOAA,KAAA8oC,SAAA,GAAA4H,GAAAsE,MACAh1C,KAAAi1C,UAAA,GAAAC,GAAAl1C,MAOAA,KAAA+wC,MAAA,GAAAL,GAAAsE,MAAA,EAAA,GAOAh1C,KAAAm1C,MAAA,GAAAzE,GAAAsE,MAAA,EAAA,GAQAh1C,KAAAqpB,KAAA,GAAAqnB,GAAAsE,MAAA,EAAA,GAOAh1C,KAAAo1C,UAAA,EAOAp1C,KAAAy0C,MAAA,EAQAz0C,KAAAiqC,SAAA,EAQAjqC,KAAA2zC,YAAA,EAQA3zC,KAAAqxC,OAAA,KAQArxC,KAAA0zC,WAAA,EAQA1zC,KAAAirC,eAAA,GAAAyF,GAAAG,OACA7wC,KAAAq1C,eAAA,GAAA3E,GAAAG,OASA7wC,KAAAs1C,WAAA,KAQAt1C,KAAAu1C,IAAA,EAQAv1C,KAAAw1C,IAAA,EAQAx1C,KAAAqzC,QAAA,GAAA3C,GAAAqC,UAAA,EAAA,EAAA,EAAA,GAQA/yC,KAAA8yC,eAAA,KAQA9yC,KAAA4zC,MAAA,KAEA5zC,KAAA4yC,gBAAA,EA1JA,GAAAlC,GAAAhwC,EAAA,WACAiwC,EAAAjwC,EAAA,6BACAs3B,EAAAt3B,EAAA,iBAEAkwC,GADAlwC,EAAA,YACA,GAAAgwC,GAAAG,QACA4E,GAAAxK,eAAA,GAAAyF,GAAAG,OAAA6C,WAAA,EAAAtK,YAyJAK,GAAA5mC,UAAA0M,OAAA/L,OAAAw0B,EAAAn1B,WACA4mC,EAAA5mC,UAAAmH,YAAAy/B,EACAhqC,EAAAD,QAAAiqC,CAEA,IAAAyL,GAAA,SAAAQ,GAEA11C,KAAA01C,IAAAA,EAEA11C,KAAA2U,EAAA,EACA3U,KAAA8X,EAAA,EAGAvI,QAAAuhC,iBAAAoE,EAAAryC,WAOA8R,GACA3E,IAAA,WAEA,MAAAhQ,MAAA01C,IAAA5M,SAAAn0B,GAEAzE,IAAA,SAAAf,GAEAnP,KAAA01C,IAAA5M,SAAAn0B,EAAAxF,EACAnP,KAAA01C,IAAA9C,gBAAA,IAIA96B,GACA9H,IAAA,WAEA,MAAAhQ,MAAA01C,IAAAC,SAAA79B,GAEA5H,IAAA,SAAAf,GAEAnP,KAAA01C,IAAA5M,SAAAhxB,EAAA3I,EACAnP,KAAA01C,IAAA9C,gBAAA,MAMArjC,OAAAuhC,iBAAArH,EAAA5mC,WAOA8R,GACA3E,IAAA,WAEA,MAAAhQ,MAAA8oC,SAAAn0B,GAEAzE,IAAA,SAAAf,GAEAnP,KAAA8oC,SAAAn0B,EAAAxF,EACAnP,KAAA4yC,gBAAA,IAUA96B,GACA9H,IAAA,WAEA,MAAAhQ,MAAA8oC,SAAAhxB,GAEA5H,IAAA,SAAAf,GAEAnP,KAAA8oC,SAAAhxB,EAAA3I,EACAnP,KAAA4yC,gBAAA,IAIAgD,QACA5lC,IAAA,WAEA,MAAAhQ,MAAA+wC,MAAAp8B,GAEAzE,IAAA,SAAAf,GAEAnP,KAAA+wC,MAAAp8B,EAAAxF,EACAnP,KAAA4yC,gBAAA,IAUAiD,QACA7lC,IAAA,WAEA,MAAAhQ,MAAA+wC,MAAAj5B,GAEA5H,IAAA,SAAAf,GAEAnP,KAAA+wC,MAAAj5B,EAAA3I,EACAnP,KAAA4yC,gBAAA,IAIAkD,UACA9lC,IAAA,WAEA,MAAAhQ,MAAAo1C,WAEAllC,IAAA,SAAAf,GAEAnP,KAAAo1C,UAAAjmC,EACAnP,KAAA4yC,gBAAA,EACA5yC,KAAAu1C,IAAA//B,KAAAugC,IAAA5mC,GACAnP,KAAAw1C,IAAAhgC,KAAAwgC,IAAA7mC,KAUA0mC,QACA7lC,IAAA,WAEA,MAAAhQ,MAAA+wC,MAAAj5B,GAEA5H,IAAA,SAAAf,GAEAnP,KAAA+wC,MAAAj5B,EAAA3I,EACAnP,KAAA4yC,gBAAA,IAWAqD,cACAjmC,IAAA,WAEA,GAAAiF,GAAAjV,IAEA,GAAA,CACA,IAAAiV,EAAAg1B,QAEA,OAAA,CAGAh1B,GAAAA,EAAAo8B,aACAp8B,EAEA,QAAA,IAYAihC,MACAlmC,IAAA,WAEA,MAAAhQ,MAAA4zC,OAEA1jC,IAAA,SAAAf,GAEAnP,KAAA4zC,QAEA5zC,KAAA4zC,MAAAD,YAAA,GAGA3zC,KAAA4zC,MAAAzkC,EAEAnP,KAAA4zC,QAEA5zC,KAAA4zC,MAAAD,YAAA,KAaAwC,SACAnmC,IAAA,WAEA,MAAAhQ,MAAA6zC,UAAA7zC,KAAA6zC,SAAAr1B,SAEAtO,IAAA,SAAAf,GAEAnP,KAAA6zC,SAAA1kC,GAAAA,EAAAqP,YAWAirB,EAAA5mC,UAAA6vC,gBAAA,WAEA,GAAA0D,GAAAp2C,KAAAqxC,OAAApG,eACAD,EAAAhrC,KAAAirC,eACAoL,EAAAr2C,KAAAq1C,cAEAr1C,MAAA4yC,iBAGAyD,EAAA51C,EAAAT,KAAAw1C,IAAAx1C,KAAA+wC,MAAAp8B,EACA0hC,EAAArxC,EAAAhF,KAAAu1C,IAAAv1C,KAAA+wC,MAAAp8B,EACA0hC,EAAAhiB,GAAAr0B,KAAAu1C,IAAAv1C,KAAA+wC,MAAAj5B,EACAu+B,EAAAjL,EAAAprC,KAAAw1C,IAAAx1C,KAAA+wC,MAAAj5B,EACAu+B,EAAAnL,GAAAlrC,KAAA8oC,SAAAn0B,GAAA3U,KAAAm1C,MAAAxgC,EAAA0hC,EAAA51C,EAAAT,KAAAm1C,MAAAr9B,EAAAu+B,EAAAhiB,GACAgiB,EAAAlL,GAAAnrC,KAAA8oC,SAAAhxB,GAAA9X,KAAAm1C,MAAAxgC,EAAA0hC,EAAArxC,EAAAhF,KAAAm1C,MAAAr9B,EAAAu+B,EAAAjL,KAGAprC,KAAA4yC,gBAAA5yC,KAAAqxC,OAAAuB,kBAGA5H,EAAAvqC,EAAA41C,EAAA51C,EAAA21C,EAAA31C,EAAA41C,EAAArxC,EAAAoxC,EAAA/hB,EACA2W,EAAAhmC,EAAAqxC,EAAA51C,EAAA21C,EAAApxC,EAAAqxC,EAAArxC,EAAAoxC,EAAAhL,EACAJ,EAAA3W,EAAAgiB,EAAAhiB,EAAA+hB,EAAA31C,EAAA41C,EAAAjL,EAAAgL,EAAA/hB,EACA2W,EAAAI,EAAAiL,EAAAhiB,EAAA+hB,EAAApxC,EAAAqxC,EAAAjL,EAAAgL,EAAAhL,EACAJ,EAAAE,GAAAmL,EAAAnL,GAAAkL,EAAA31C,EAAA41C,EAAAlL,GAAAiL,EAAA/hB,EAAA+hB,EAAAlL,GACAF,EAAAG,GAAAkL,EAAAnL,GAAAkL,EAAApxC,EAAAqxC,EAAAlL,GAAAiL,EAAAhL,EAAAgL,EAAAjL,GAEAnrC,KAAA8yC,eAAA,MAIA9yC,KAAA0zC,WAAA1zC,KAAAy0C,MAAAz0C,KAAAqxC,OAAAqC,YAOAjK,EAAA5mC,UAAA8vC,6BAAAlJ,EAAA5mC,UAAA6vC,gBAUAjJ,EAAA5mC,UAAAwoC,UAAA,SAAAiL,GAEA,MAAA5F,GAAAqC,UAAAC,OAQAvJ,EAAA5mC,UAAAmuC,eAAA,WAEA,MAAAhxC,MAAAqrC,UAAAqF,EAAAG,OAAA2C,WASA/J,EAAA5mC,UAAA0zC,SAAA,SAAAzN,GAiBA,MAZA9oC,MAAAqxC,OAQArxC,KAAA2yC,gCANA3yC,KAAAqxC,OAAAoE,EACAz1C,KAAA2yC,+BACA3yC,KAAAqxC,OAAA,MAQArxC,KAAAirC,eAAAr3B,MAAAk1B,IAWAW,EAAA5mC,UAAA2zC,QAAA,SAAA1N,EAAA5jB,EAAAuxB,GAsBA,MApBAvxB,KAEA4jB,EAAA5jB,EAAAqxB,SAAAzN,IAMA9oC,KAAAqxC,OAQArxC,KAAA2yC,gCANA3yC,KAAAqxC,OAAAoE,EACAz1C,KAAA2yC,+BACA3yC,KAAAqxC,OAAA,MAQArxC,KAAAirC,eAAAyL,aAAA5N,EAAA2N,IASAhN,EAAA5mC,UAAA4wC,YAAA,SAAA7K,KAWAa,EAAA5mC,UAAA2xC,aAAA,SAAA5L,KAaAa,EAAA5mC,UAAAwvC,gBAAA,SAAAzJ,EAAA0J,EAAA9C,GAEA,GAAA+C,GAAAvyC,KAAAgxC,iBAEAwB,EAAA,GAAA7B,GAAA/H,EAAA,EAAA2J,EAAA3uC,MAAA,EAAA2uC,EAAA1uC,OAAAyuC,EAAA9C,EAOA,OALAoB,GAAA1F,IAAAqH,EAAA59B,EACAi8B,EAAAzF,IAAAoH,EAAAz6B,EAEA06B,EAAAC,OAAAzyC,KAAA4wC,GAEA4B,GASA/I,EAAA5mC,UAAA8zC,UAAA,SAAAC,GAEA,IAAAA,IAAAA,EAAAvM,SAEA,KAAA,IAAAzpC,OAAA,0CAIA,OADAg2C,GAAAvM,SAAArqC,MACA42C,GAiBAnN,EAAA5mC,UAAAg0C,aAAA,SAAAliC,EAAAmD,EAAA89B,EAAAC,EAAAC,EAAAgB,EAAAC,EAAAC,EAAAC,GAYA,MAVAj3C,MAAA8oC,SAAAn0B,EAAAA,GAAA,EACA3U,KAAA8oC,SAAAhxB,EAAAA,GAAA,EACA9X,KAAA+wC,MAAAp8B,EAAAihC,EAAAA,EAAA,EACA51C,KAAA+wC,MAAAj5B,EAAA+9B,EAAAA,EAAA,EACA71C,KAAA81C,SAAAA,GAAA,EACA91C,KAAAqpB,KAAA1U,EAAAmiC,GAAA,EACA92C,KAAAqpB,KAAAvR,EAAAi/B,GAAA,EACA/2C,KAAAm1C,MAAAxgC,EAAAqiC,GAAA,EACAh3C,KAAAm1C,MAAAr9B,EAAAm/B,GAAA,EACAj3C,KAAA4yC,gBAAA,EACA5yC,MAOAypC,EAAA5mC,UAAA0C,QAAA,WAGAvF,KAAA8oC,SAAA,KACA9oC,KAAA+wC,MAAA,KACA/wC,KAAAm1C,MAAA,KACAn1C,KAAAqpB,KAAA,KAEArpB,KAAAqxC,OAAA,KAEArxC,KAAAqzC,QAAA,KACArzC,KAAA8yC,eAAA,KACA9yC,KAAA4zC,MAAA,KAEA5zC,KAAAirC,eAAA,KACAjrC,KAAAs1C,WAAA,QAGA4B,WAAA,GAAAvC,UAAA,GAAAC,4BAAA,GAAApY,cAAA,KAAA2a,IAAA,SAAAz2C,EAAAjB,EAAAD,GAkBA,QAAA43C,KAEA3G,EAAA1vC,KAAAf,MAQAA,KAAAq3C,UAAA,EAQAr3C,KAAAs3C,UAAA,EAQAt3C,KAAAu3C,UAAA,EAQAv3C,KAAAw3C,gBAQAx3C,KAAAy3C,KAAA,SASAz3C,KAAA03C,UAAA,SASA13C,KAAA23C,UAAA7K,EAAAW,YAAAC,OAQA1tC,KAAA43C,YAAA,KASA53C,KAAA63C,UAOA73C,KAAA83C,QAAA,EAOA93C,KAAA+3C,cAAA,EAQA/3C,KAAAg4C,aAAA,GAAAtH,GAAAqC,UAAA,EAAA,EAAA,EAAA,GASA/yC,KAAA+J,OAAA,EASA/J,KAAAi4C,SAAA,EAEAj4C,KAAAk4C,aAAA,EAQAl4C,KAAAm4C,mBAAA,EAhJA,GAAA1H,GAAA/vC,EAAA,wBACAgD,EAAAhD,EAAA,uBACA03C,EAAA13C,EAAA,0CACA23C,EAAA33C,EAAA,4CACA43C,EAAA53C,EAAA,kBACAgwC,EAAAhwC,EAAA,WACAosC,EAAApsC,EAAA,YACA63C,EAAA,GAAA7H,GAAAsE,KA0JAoC,GAAAv0C,UAAA0M,OAAA/L,OAAAitC,EAAA5tC,WACAu0C,EAAAv0C,UAAAmH,YAAAotC,EACA33C,EAAAD,QAAA43C,EAQAA,EAAAv0C,UAAA21C,MAAA,WAEA,GAAAA,GAAA,GAAApB,EAEAoB,GAAA7E,WAAA3zC,KAAA2zC,WACA6E,EAAAnB,UAAAr3C,KAAAq3C,UACAmB,EAAAlB,UAAAt3C,KAAAs3C,UACAkB,EAAAjB,UAAAv3C,KAAAu3C,UACAiB,EAAAf,KAAAz3C,KAAAy3C,KACAe,EAAAb,UAAA33C,KAAA23C,UACAa,EAAAV,OAAA93C,KAAA83C,OACAU,EAAAT,cAAA/3C,KAAA+3C,cACAS,EAAAzuC,OAAA,EACAyuC,EAAAP,SAAA,EACAO,EAAAL,kBAAAn4C,KAAAm4C,iBAGA,KAAA,GAAAx3C,GAAA,EAAAA,EAAAX,KAAAw3C,aAAAx2C,SAAAL,EAEA63C,EAAAhB,aAAA7sC,KAAA3K,KAAAw3C,aAAA72C,GAAA63C,QAOA,OAJAA,GAAAZ,YAAAY,EAAAhB,aAAAgB,EAAAhB,aAAAx2C,OAAA,GAEAw3C,EAAAC,oBAEAD,GAWApB,EAAAv0C,UAAA61C,UAAA,SAAApB,EAAAqB,EAAAlE,GAMA,GAJAz0C,KAAAs3C,UAAAA,GAAA,EACAt3C,KAAAu3C,UAAAoB,GAAA,EACA34C,KAAA44C,UAAA1wC,SAAAusC,EAAA,EAAAA,EAEAz0C,KAAA43C,YAEA,GAAA53C,KAAA43C,YAAAiB,MAAAC,OAAA93C,OACA,CAEA,GAAA63C,GAAA,GAAAnI,GAAAqI,QAAA/4C,KAAA43C,YAAAiB,MAAAC,OAAAt6B,MAAA,IACAq6B,GAAAG,QAAA,EACAh5C,KAAAi5C,UAAAJ,OAKA74C,MAAA43C,YAAAN,UAAAt3C,KAAAs3C,UACAt3C,KAAA43C,YAAAL,UAAAv3C,KAAAu3C,UACAv3C,KAAA43C,YAAAgB,UAAA54C,KAAA44C,SAIA,OAAA54C,OAUAo3C,EAAAv0C,UAAAq2C,OAAA,SAAAvkC,EAAAmD,GAEA,GAAA+gC,GAAA,GAAAnI,GAAAqI,SAAApkC,EAAAmD,GAIA,OAHA+gC,GAAAG,QAAA,EACAh5C,KAAAi5C,UAAAJ,GAEA74C,MAWAo3C,EAAAv0C,UAAAs2C,OAAA,SAAAxkC,EAAAmD,GAKA,MAHA9X,MAAA43C,YAAAiB,MAAAC,OAAAnuC,KAAAgK,EAAAmD,GACA9X,KAAA+J,OAAA,EAEA/J,MAaAo3C,EAAAv0C,UAAAu2C,iBAAA,SAAAC,EAAAC,EAAAC,EAAAC,GAEAx5C,KAAA43C,YAEA,IAAA53C,KAAA43C,YAAAiB,MAAAC,OAAA93C,SAEAhB,KAAA43C,YAAAiB,MAAAC,QAAA,EAAA,IAKA94C,KAAAk5C,OAAA,EAAA,EAGA,IAAAO,GACAC,EACAt5C,EAAA,GACA04C,EAAA94C,KAAA43C,YAAAiB,MAAAC,MAEA,KAAAA,EAAA93C,QAEAhB,KAAAk5C,OAAA,EAAA,EAOA,KAAA,GAJAS,GAAAb,EAAAA,EAAA93C,OAAA,GACA44C,EAAAd,EAAAA,EAAA93C,OAAA,GAEA0oB,EAAA,EACA/oB,EAAA,EAAAP,GAAAO,IAAAA,EAEA+oB,EAAA/oB,EAAAP,EAEAq5C,EAAAE,GAAAN,EAAAM,GAAAjwB,EACAgwB,EAAAE,GAAAN,EAAAM,GAAAlwB,EAEAovB,EAAAnuC,KAAA8uC,GAAAJ,GAAAE,EAAAF,GAAA3vB,EAAA+vB,GAAA/vB,EACAgwB,GAAAJ,GAAAE,EAAAF,GAAA5vB,EAAAgwB,GAAAhwB,EAKA,OAFA1pB,MAAA+J,MAAA/J,KAAAk4C,aAAA,EAEAl4C,MAcAo3C,EAAAv0C,UAAAg3C,cAAA,SAAAR,EAAAC,EAAAQ,EAAAC,EAAAR,EAAAC,GAEAx5C,KAAA43C,YAEA,IAAA53C,KAAA43C,YAAAiB,MAAAC,OAAA93C,SAEAhB,KAAA43C,YAAAiB,MAAAC,QAAA,EAAA,IAKA94C,KAAAk5C,OAAA,EAAA,EAgBA,KAAA,GAZAc,GACAC,EACAC,EACAC,EACAC,EALAh6C,EAAA,GAMA04C,EAAA94C,KAAA43C,YAAAiB,MAAAC,OAEAa,EAAAb,EAAAA,EAAA93C,OAAA,GACA44C,EAAAd,EAAAA,EAAA93C,OAAA,GAEA0oB,EAAA,EAEA/oB,EAAA,EAAAP,GAAAO,IAAAA,EAEA+oB,EAAA/oB,EAAAP,EAEA45C,EAAA,EAAAtwB,EACAuwB,EAAAD,EAAAA,EACAE,EAAAD,EAAAD,EAEAG,EAAAzwB,EAAAA,EACA0wB,EAAAD,EAAAzwB,EAEAovB,EAAAnuC,KAAAuvC,EAAAP,EAAA,EAAAM,EAAAvwB,EAAA2vB,EAAA,EAAAW,EAAAG,EAAAL,EAAAM,EAAAb,EACAW,EAAAN,EAAA,EAAAK,EAAAvwB,EAAA4vB,EAAA,EAAAU,EAAAG,EAAAJ,EAAAK,EAAAZ,EAKA,OAFAx5C,MAAA+J,MAAA/J,KAAAk4C,aAAA,EAEAl4C,MAeAo3C,EAAAv0C,UAAAw3C,MAAA,SAAAC,EAAAC,EAAAC,EAAAC,EAAAC,GAEA16C,KAAA43C,YAEA,IAAA53C,KAAA43C,YAAAiB,MAAAC,OAAA93C,QAEAhB,KAAA43C,YAAAiB,MAAAC,OAAAnuC,KAAA2vC,EAAAC,GAKAv6C,KAAAk5C,OAAAoB,EAAAC,EAGA,IAAAzB,GAAA94C,KAAA43C,YAAAiB,MAAAC,OACAa,EAAAb,EAAAA,EAAA93C,OAAA,GACA44C,EAAAd,EAAAA,EAAA93C,OAAA,GACAw3B,EAAAohB,EAAAW,EACAI,EAAAhB,EAAAW,EACA9iB,EAAAijB,EAAAF,EACA7iB,EAAA8iB,EAAAF,EACAM,EAAAplC,KAAAygB,IAAAuC,EAAAd,EAAAijB,EAAAnjB,EAEA,IAAA,KAAAojB,GAAA,IAAAF,GAEA5B,EAAAA,EAAA93C,OAAA,KAAAs5C,GAAAxB,EAAAA,EAAA93C,OAAA,KAAAu5C,IAEAzB,EAAAnuC,KAAA2vC,EAAAC,OAIA,CACA,GAAAM,GAAAriB,EAAAA,EAAAmiB,EAAAA,EACAG,EAAAtjB,EAAAA,EAAAE,EAAAA,EACAqjB,EAAAviB,EAAAhB,EAAAmjB,EAAAjjB,EACAsjB,EAAAN,EAAAllC,KAAAylC,KAAAJ,GAAAD,EACAM,EAAAR,EAAAllC,KAAAylC,KAAAH,GAAAF,EACAO,EAAAH,EAAAD,EAAAF,EACAO,EAAAF,EAAAH,EAAAD,EACAjkB,EAAAmkB,EAAAtjB,EAAAwjB,EAAAP,EACA7jB,EAAAkkB,EAAAxjB,EAAA0jB,EAAA1iB,EACAzB,EAAA4jB,GAAAO,EAAAC,GACAnkB,EAAAwB,GAAA0iB,EAAAC,GACAtlB,EAAA6B,GAAAsjB,EAAAI,GACAC,EAAA7jB,GAAAwjB,EAAAI,GACAE,EAAA9lC,KAAA+lC,MAAAvkB,EAAAF,EAAAC,EAAAF,GACA2kB,EAAAhmC,KAAA+lC,MAAAF,EAAAvkB,EAAAjB,EAAAgB,EAEA72B,MAAAy7C,IAAA5kB,EAAAyjB,EAAAxjB,EAAAyjB,EAAAG,EAAAY,EAAAE,EAAAb,EAAAnjB,EAAAE,EAAAc,GAKA,MAFAx4B,MAAA+J,MAAA/J,KAAAk4C,aAAA,EAEAl4C,MAcAo3C,EAAAv0C,UAAA44C,IAAA,SAAA5kB,EAAAC,EAAA4jB,EAAAY,EAAAE,EAAAE,GAIA,GAFAA,EAAAA,IAAA,EAEAJ,IAAAE,EAEA,MAAAx7C,OAGA07C,GAAAJ,GAAAE,EAEAA,GAAA,EAAAhmC,KAAAy3B,GAEAyO,GAAAF,GAAAF,IAEAA,GAAA,EAAA9lC,KAAAy3B,GAGA,IAAA0O,GAAAD,EAAA,IAAAJ,EAAAE,GAAAA,EAAAF,EACAM,EAAA,GAAApmC,KAAAqmC,KAAArmC,KAAAygB,IAAA0lB,IAAA,EAAAnmC,KAAAy3B,IAEA,IAAA,IAAA0O,EAEA,MAAA37C,KAGA,IAAA87C,GAAAjlB,EAAArhB,KAAAwgC,IAAAsF,GAAAZ,EACAqB,EAAAjlB,EAAAthB,KAAAugC,IAAAuF,GAAAZ,CAEA16C,MAAA43C,YAEA53C,KAAA43C,YAAAiB,MAAAC,OAAAnuC,KAAAmxC,EAAAC,GAIA/7C,KAAAk5C,OAAA4C,EAAAC,EAeA,KAAA,GAZAjD,GAAA94C,KAAA43C,YAAAiB,MAAAC,OAEAkD,EAAAL,GAAA,EAAAC,GACAK,EAAA,EAAAD,EAEAE,EAAA1mC,KAAAwgC,IAAAgG,GACAG,EAAA3mC,KAAAugC,IAAAiG,GAEAI,EAAAR,EAAA,EAEAS,EAAAD,EAAA,EAAAA,EAEAz7C,EAAA,EAAAy7C,GAAAz7C,EAAAA,IACA,CACA,GAAA27C,GAAA37C,EAAA07C,EAAA17C,EAGA47C,EAAA,EAAAjB,EAAAW,EAAAK,EAEAjoB,EAAA7e,KAAAwgC,IAAAuG,GACAj8C,GAAAkV,KAAAugC,IAAAwG,EAEAzD,GAAAnuC,MAAAuxC,EAAA7nB,EAAA8nB,EAAA77C,GAAAo6C,EAAA7jB,GACAqlB,GAAA57C,EAAA67C,EAAA9nB,GAAAqmB,EAAA5jB,GAKA,MAFA92B,MAAA+J,MAAA/J,KAAAk4C,aAAA,EAEAl4C,MAWAo3C,EAAAv0C,UAAA25C,UAAA,SAAA7D,EAAAlE,GAeA,MAbAz0C,MAAAy8C,SAAA,EACAz8C,KAAA08C,UAAA/D,GAAA,EACA34C,KAAAq3C,UAAAnvC,SAAAusC,EAAA,EAAAA,EAEAz0C,KAAA43C,aAEA53C,KAAA43C,YAAAiB,MAAAC,OAAA93C,QAAA,IAEAhB,KAAA43C,YAAA+E,KAAA38C,KAAAy8C,QACAz8C,KAAA43C,YAAA8E,UAAA18C,KAAA08C,UACA18C,KAAA43C,YAAAP,UAAAr3C,KAAAq3C,WAGAr3C,MAQAo3C,EAAAv0C,UAAA+5C,QAAA,WAMA,MAJA58C,MAAAy8C,SAAA,EACAz8C,KAAA08C,UAAA,KACA18C,KAAAq3C,UAAA,EAEAr3C,MAWAo3C,EAAAv0C,UAAAg6C,SAAA,SAAAloC,EAAAmD,EAAAlU,EAAAC,GAIA,MAFA7D,MAAAi5C,UAAA,GAAAvI,GAAAqC,UAAAp+B,EAAAmD,EAAAlU,EAAAC,IAEA7D,MAYAo3C,EAAAv0C,UAAAi6C,gBAAA,SAAAnoC,EAAAmD,EAAAlU,EAAAC,EAAA62C,GAIA,MAFA16C,MAAAi5C,UAAA,GAAAvI,GAAAqM,iBAAApoC,EAAAmD,EAAAlU,EAAAC,EAAA62C,IAEA16C,MAWAo3C,EAAAv0C,UAAAm6C,WAAA,SAAAroC,EAAAmD,EAAA4iC,GAIA,MAFA16C,MAAAi5C,UAAA,GAAAvI,GAAAuM,OAAAtoC,EAAAmD,EAAA4iC,IAEA16C,MAYAo3C,EAAAv0C,UAAAq6C,YAAA,SAAAvoC,EAAAmD,EAAAlU,EAAAC,GAIA,MAFA7D,MAAAi5C,UAAA,GAAAvI,GAAAyM,QAAAxoC,EAAAmD,EAAAlU,EAAAC,IAEA7D,MASAo3C,EAAAv0C,UAAAu6C,YAAA,SAAA74B,GAIA,GAAAu0B,GAAAv0B,EAEAy0B,GAAA,CAQA,IANAF,YAAApI,GAAAqI,UAEAC,EAAAF,EAAAE,OACAF,EAAAA,EAAAA,SAGAhtC,MAAA4O,QAAAo+B,GACA,CAGAA,EAAA,GAAAhtC,OAAA+H,UAAA7S,OAEA,KAAA,GAAAL,GAAA,EAAAA,EAAAm4C,EAAA93C,SAAAL,EAEAm4C,EAAAn4C,GAAAkT,UAAAlT,GAIA,GAAAk4C,GAAA,GAAAnI,GAAAqI,QAAAD,EAKA,OAJAD,GAAAG,OAAAA,EAEAh5C,KAAAi5C,UAAAJ,GAEA74C,MAQAo3C,EAAAv0C,UAAAkC,MAAA,WASA,MAPA/E,MAAAs3C,UAAA,EACAt3C,KAAAy8C,SAAA,EAEAz8C,KAAA+J,OAAA,EACA/J,KAAAq9C,YAAA,EACAr9C,KAAAw3C,gBAEAx3C,MAWAo3C,EAAAv0C,UAAAwvC,gBAAA,SAAAzJ,EAAA4G,EAAA8C,GAGA9C,EAAAA,GAAA,CAEA,IAAA+C,GAAAvyC,KAAAgxC,iBAEAsM,EAAA,GAAAlF,GAAA7F,EAAA3uC,MAAA4rC,EAAA+C,EAAA1uC,OAAA2rC,GAEAvrC,EAAAP,EAAA65C,WAAAD,EAAAlyC,OAAAknC,EASA,OARAruC,GAAAu5C,YAAAhO,WAAAA,EAEA8N,EAAAvlB,QAAAgZ,MAAAvB,EAAAA,GAEA8N,EAAAvlB,QAAA0lB,WAAAlL,EAAA59B,GAAA49B,EAAAz6B,GAEAugC,EAAAqF,eAAA19C,KAAAs9C,EAAAvlB,SAEA9zB,GASAmzC,EAAAv0C,UAAAuxC,aAAA,SAAAxL,GAIA5oC,KAAAi4C,UAEAj4C,KAAA+J,OAAA,EACA/J,KAAAi4C,SAAA,GAGArP,EAAA+U,kBAAA/U,EAAAmD,QAAA6R,UACAhV,EAAAmD,QAAA6R,SAAAnL,OAAAzyC,OAUAo3C,EAAAv0C,UAAA0xC,cAAA,SAAA3L,GAEA,GAAA5oC,KAAA83C,UAAA,EAAA,CAMA93C,KAAA03C,YAAA13C,KAAAy3C,OACAz3C,KAAA+J,OAAA,EA0BA,IAAAguB,GAAA6Q,EAAA7Q,QACAtb,EAAAzc,KAAAirC,eAEA4S,EAAAjV,EAAAkV,WAAA99C,KAAA23C,UACAkG,KAAA9lB,EAAAgmB,2BAEAhmB,EAAAgmB,yBAAAF,EAGA,IAAArO,GAAA5G,EAAA4G,UACAzX,GAAA8e,aACAp6B,EAAAhc,EAAA+uC,EACA/yB,EAAAzX,EAAAwqC,EACA/yB,EAAA4X,EAAAmb,EACA/yB,EAAA2uB,EAAAoE,EACA/yB,EAAAyuB,GAAAsE,EACA/yB,EAAA0uB,GAAAqE,GAGA6I,EAAAqF,eAAA19C,KAAA+3B,KAUAqf,EAAAv0C,UAAAwoC,UAAA,SAAAiL,GAEA,IAAAt2C,KAAA8yC,eACA,CAGA,IAAA9yC,KAAA2zC,WAEA,MAAAjD,GAAAqC,UAAAC,KAGAhzC,MAAAk4C,cAEAl4C,KAAAy4C,oBAEAz4C,KAAAi4C,SAAA,EACAj4C,KAAAm4C,mBAAA,EACAn4C,KAAAk4C,aAAA,EAGA,IAAA3F,GAAAvyC,KAAAg4C,aAEAgG,EAAAzL,EAAA59B,EACAspC,EAAA1L,EAAA3uC,MAAA2uC,EAAA59B,EAEAupC,EAAA3L,EAAAz6B,EACAqmC,EAAA5L,EAAA1uC,OAAA0uC,EAAAz6B,EAEAmzB,EAAAqL,GAAAt2C,KAAAirC,eAEAxqC,EAAAwqC,EAAAxqC,EACAuE,EAAAimC,EAAAjmC,EACAqvB,EAAA4W,EAAA5W,EACA+W,EAAAH,EAAAG,EACAF,EAAAD,EAAAC,GACAC,EAAAF,EAAAE,GAEAmP,EAAA75C,EAAAw9C,EAAA5pB,EAAA8pB,EAAAjT,EACAqP,EAAAnP,EAAA+S,EAAAn5C,EAAAi5C,EAAA9S,EAEAqP,EAAA/5C,EAAAu9C,EAAA3pB,EAAA8pB,EAAAjT,EACAuP,EAAArP,EAAA+S,EAAAn5C,EAAAg5C,EAAA7S,EAEAiT,EAAA39C,EAAAu9C,EAAA3pB,EAAA6pB,EAAAhT,EACAmT,EAAAjT,EAAA8S,EAAAl5C,EAAAg5C,EAAA7S,EAEAmT,EAAA79C,EAAAw9C,EAAA5pB,EAAA6pB,EAAAhT,EACAqT,EAAAnT,EAAA8S,EAAAl5C,EAAAi5C,EAAA9S,EAEApY,EAAAunB,EACAtnB,EAAAunB,EAEA1nB,EAAAynB,EACAxnB,EAAAynB,CAEA1nB,GAAAA,EAAA2nB,EAAAA,EAAA3nB,EACAA,EAAAA,EAAAurB,EAAAA,EAAAvrB,EACAA,EAAAA,EAAAyrB,EAAAA,EAAAzrB,EAEAC,EAAAA,EAAA2nB,EAAAA,EAAA3nB,EACAA,EAAAA,EAAAurB,EAAAA,EAAAvrB,EACAA,EAAAA,EAAAyrB,EAAAA,EAAAzrB,EAEAC,EAAAynB,EAAAznB,EAAAynB,EAAAznB,EACAA,EAAAqrB,EAAArrB,EAAAqrB,EAAArrB,EACAA,EAAAurB,EAAAvrB,EAAAurB,EAAAvrB,EAEAC,EAAAynB,EAAAznB,EAAAynB,EAAAznB,EACAA,EAAAqrB,EAAArrB,EAAAqrB,EAAArrB,EACAA,EAAAurB,EAAAvrB,EAAAurB,EAAAvrB,EAEAhzB,KAAAqzC,QAAA1+B,EAAAke,EACA7yB,KAAAqzC,QAAAzvC,MAAAmvB,EAAAF,EAEA7yB,KAAAqzC,QAAAv7B,EAAAgb,EACA9yB,KAAAqzC,QAAAxvC,OAAAmvB,EAAAF,EAEA9yB,KAAA8yC,eAAA9yC,KAAAqzC,QAGA,MAAArzC,MAAA8yC,gBASAsE,EAAAv0C,UAAA27C,cAAA,SAAA/H,GAEAz2C,KAAAirC,eAAAyL,aAAAD,EAAA8B;AAIA,IAAA,GAFAf,GAAAx3C,KAAAw3C,aAEA72C,EAAA,EAAAA,EAAA62C,EAAAx2C,OAAAL,IACA,CACA,GAAA2B,GAAAk1C,EAAA72C,EAEA,IAAA2B,EAAAq6C,MAMAr6C,EAAAu2C,OAEAv2C,EAAAu2C,MAAA4F,SAAAlG,EAAA5jC,EAAA4jC,EAAAzgC,GAEA,OAAA,EAKA,OAAA,GAOAs/B,EAAAv0C,UAAA41C,kBAAA,WAEA,GAAA5lB,GAAAiD,EAAAA,EACA/C,IAAA+C,EAAAA,GAEAhD,EAAAgD,EAAAA,EACA9C,IAAA8C,EAAAA,EAEA,IAAA91B,KAAAw3C,aAAAx2C,OAIA,IAAA,GAFA63C,GAAAC,EAAAnkC,EAAAmD,EAAA2B,EAAA2X,EAEAzwB,EAAA,EAAAA,EAAAX,KAAAw3C,aAAAx2C,OAAAL,IACA,CACA,GAAA2B,GAAAtC,KAAAw3C,aAAA72C,GACA0B,EAAAC,EAAAD,KACAi1C,EAAAh1C,EAAAg1C,SAGA,IAFAuB,EAAAv2C,EAAAu2C,MAEAx2C,IAAAyqC,EAAAkD,OAAAE,MAAA7tC,IAAAyqC,EAAAkD,OAAAK,KAEA17B,EAAAkkC,EAAAlkC,EAAA2iC,EAAA,EACAx/B,EAAA+gC,EAAA/gC,EAAAw/B,EAAA,EACA79B,EAAAo/B,EAAAj1C,MAAA0zC,EACAlmB,EAAAynB,EAAAh1C,OAAAyzC,EAEAzkB,EAAAA,EAAAle,EAAAA,EAAAke,EACAE,EAAApe,EAAA8E,EAAAsZ,EAAApe,EAAA8E,EAAAsZ,EAEAD,EAAAA,EAAAhb,EAAAA,EAAAgb,EACAE,EAAAlb,EAAAsZ,EAAA4B,EAAAlb,EAAAsZ,EAAA4B,MAEA,IAAA3wB,IAAAyqC,EAAAkD,OAAAG,KAEAx7B,EAAAkkC,EAAAlkC,EACAmD,EAAA+gC,EAAA/gC,EACA2B,EAAAo/B,EAAA6B,OAAApD,EAAA,EACAlmB,EAAAynB,EAAA6B,OAAApD,EAAA,EAEAzkB,EAAAA,EAAAle,EAAA8E,EAAA9E,EAAA8E,EAAAoZ,EACAE,EAAApe,EAAA8E,EAAAsZ,EAAApe,EAAA8E,EAAAsZ,EAEAD,EAAAA,EAAAhb,EAAAsZ,EAAAtZ,EAAAsZ,EAAA0B,EACAE,EAAAlb,EAAAsZ,EAAA4B,EAAAlb,EAAAsZ,EAAA4B,MAEA,IAAA3wB,IAAAyqC,EAAAkD,OAAAI,KAEAz7B,EAAAkkC,EAAAlkC,EACAmD,EAAA+gC,EAAA/gC,EACA2B,EAAAo/B,EAAAj1C,MAAA0zC,EAAA,EACAlmB,EAAAynB,EAAAh1C,OAAAyzC,EAAA,EAEAzkB,EAAAA,EAAAle,EAAA8E,EAAA9E,EAAA8E,EAAAoZ,EACAE,EAAApe,EAAA8E,EAAAsZ,EAAApe,EAAA8E,EAAAsZ,EAEAD,EAAAA,EAAAhb,EAAAsZ,EAAAtZ,EAAAsZ,EAAA0B,EACAE,EAAAlb,EAAAsZ,EAAA4B,EAAAlb,EAAAsZ,EAAA4B,MAGA,CAEA8lB,EAAAD,EAAAC,MAEA,KAAA,GAAApvB,GAAA,EAAAA,EAAAovB,EAAA93C,OAAA0oB,GAAA,EAEA/U,EAAAmkC,EAAApvB,GACA5R,EAAAghC,EAAApvB,EAAA,GAEAmJ,EAAAA,EAAAle,EAAA2iC,EAAA3iC,EAAA2iC,EAAAzkB,EACAE,EAAApe,EAAA2iC,EAAAvkB,EAAApe,EAAA2iC,EAAAvkB,EAEAD,EAAAA,EAAAhb,EAAAw/B,EAAAx/B,EAAAw/B,EAAAxkB,EACAE,EAAAlb,EAAAw/B,EAAAtkB,EAAAlb,EAAAw/B,EAAAtkB,OAOAH,GAAA,EACAE,EAAA,EACAD,EAAA,EACAE,EAAA,CAGA,IAAA0rB,GAAA1+C,KAAA+3C,aAEA/3C,MAAAg4C,aAAArjC,EAAAke,EAAA6rB,EACA1+C,KAAAg4C,aAAAp0C,MAAAmvB,EAAAF,EAAA,EAAA6rB,EAEA1+C,KAAAg4C,aAAAlgC,EAAAgb,EAAA4rB,EACA1+C,KAAAg4C,aAAAn0C,OAAAmvB,EAAAF,EAAA,EAAA4rB,GAwFAtH,EAAAv0C,UAAAo2C,UAAA,SAAAJ,GAEA74C,KAAA43C,aAGA53C,KAAA43C,YAAAiB,MAAAC,OAAA93C,QAAA,GAEAhB,KAAAw3C,aAAAv9B,MAIAja,KAAA43C,YAAA,IAEA,IAAAt1C,GAAA,GAAAg2C,GAAAt4C,KAAAs3C,UAAAt3C,KAAAu3C,UAAAv3C,KAAA44C,UAAA54C,KAAA08C,UAAA18C,KAAAq3C,UAAAr3C,KAAAy8C,QAAA5D,EAYA,OAVA74C,MAAAw3C,aAAA7sC,KAAArI,GAEAA,EAAAD,OAAAyqC,EAAAkD,OAAAC,OAEA3tC,EAAAu2C,MAAAG,OAAA12C,EAAAu2C,MAAAG,QAAAh5C,KAAAy8C,QACAz8C,KAAA43C,YAAAt1C,GAGAtC,KAAA+J,MAAA/J,KAAAk4C,aAAA,EAEA51C,GAMA80C,EAAAv0C,UAAA0C,QAAA,WACAkrC,EAAA5tC,UAAA0C,QAAAqO,MAAA5T,KAAA6T,UAGA,KAAA,GAAAlT,GAAA,EAAAA,EAAAX,KAAAw3C,aAAAx2C,SAAAL,EACAX,KAAAw3C,aAAA72C,GAAA4E,SAIA,KAAA,GAAA+F,KAAAtL,MAAA2+C,OACA,IAAA,GAAAj1B,GAAA,EAAAA,EAAA1pB,KAAA2+C,OAAArzC,GAAAhJ,KAAAtB,SAAA0oB,EACA1pB,KAAA2+C,OAAArzC,GAAAhJ,KAAAonB,GAAAnkB,SAIAvF,MAAAw3C,aAAA,KAEAx3C,KAAA43C,YAAA,KACA53C,KAAA2+C,OAAA,KACA3+C,KAAAg4C,aAAA,QAGAd,WAAA,GAAA0H,uBAAA,GAAAjK,UAAA,GAAAkK,yCAAA,GAAAC,2CAAA,GAAAC,sBAAA,GAAAC,iBAAA,KAAAC,IAAA,SAAAv+C,EAAAjB,EAAAD,GAcA,QAAA84C,GAAAhB,EAAAC,EAAAqB,EAAA8D,EAAArF,EAAAsF,EAAA9D,GAKA74C,KAAAs3C,UAAAA,EAKAt3C,KAAAu3C,UAAAA,EAIAv3C,KAAA44C,UAAAA,EAIA54C,KAAAk/C,UAAA3H,EAKAv3C,KAAA08C,UAAAA,EAKA18C,KAAAq3C,UAAAA,EAKAr3C,KAAAm/C,UAAAzC,EAKA18C,KAAA28C,KAAAA,EAKA38C,KAAA64C,MAAAA,EAKA74C,KAAAqC,KAAAw2C,EAAAx2C,KAGAi2C,EAAAz1C,UAAAmH,YAAAsuC,EACA74C,EAAAD,QAAA84C,EAOAA,EAAAz1C,UAAA21C,MAAA,WAEA,MAAA,IAAAF,GACAt4C,KAAAs3C,UACAt3C,KAAAu3C,UACAv3C,KAAA44C,UACA54C,KAAA08C,UACA18C,KAAAq3C,UACAr3C,KAAA28C,KACA38C,KAAA64C,QAOAP,EAAAz1C,UAAA0C,QAAA,WACAvF,KAAA64C,MAAA,WAGAuG,IAAA,SAAA1+C,EAAAjB,EAAAD,GA4BA,QAAA6/C,GAAAzW,GAEA0W,EAAAv+C,KAAAf,KAAA4oC,GAEA5oC,KAAAu/C,oBAEAv/C,KAAAw/C,gBAAA,KACAx/C,KAAAy/C,uBAAA,KAEAz/C,KAAAoC,GAAAwmC,EAAAxmC,GAMApC,KAAA0/C,sBAAA,IA1CA,GAAA9U,GAAAlqC,EAAA,eAEAosC,GADApsC,EAAA,cACAA,EAAA,gBACA4+C,EAAA5+C,EAAA,8CACA0rC,EAAA1rC,EAAA,uCACAi/C,EAAAj/C,EAAA,uBACAk/C,EAAAl/C,EAAA,6BAGAm/C,EAAAn/C,EAAA,oBACAo/C,WAAAp/C,EAAA,qBACAq/C,iBAAAr/C,EAAA,4BACAs/C,eAAAt/C,EAAA,0BACAu/C,sBAAAv/C,EAAA,iCACAw/C,YAAAx/C,EAAA,uBAEA2xB,OAAA3xB,EAAA,UA6BA2+C,EAAAx8C,UAAA0M,OAAA/L,OAAA87C,EAAAz8C,WACAw8C,EAAAx8C,UAAAmH,YAAAq1C,EACA5/C,EAAAD,QAAA6/C,EAEAjT,EAAAC,eAAA,WAAAgT,GAQAA,EAAAx8C,UAAAs9C,gBAAA,WAEAngD,KAAAoC,GAAApC,KAAA4oC,SAAAxmC,GACApC,KAAAw/C,gBAAA,GAAAI,GAAA5/C,KAAAoC,KAOAi9C,EAAAx8C,UAAA0C,QAAA,WACA+5C,EAAAz8C,UAAA0C,QAAAxE,KAAAf,KAEA,KAAA,GAAAW,GAAA,EAAAA,EAAAX,KAAAu/C,iBAAAv+C,SAAAL,EACAX,KAAAu/C,iBAAA5+C,GAAA4E,SAGAvF,MAAAu/C,iBAAA,MAQAF,EAAAx8C,UAAA4vC,OAAA,SAAAmL,GAEA,GAGAwC,GAHAxX,EAAA5oC,KAAA4oC,SACAxmC,EAAAwmC,EAAAxmC,IAIAw7C,EAAA7zC,QAAA6zC,EAAA/F,OAAAz1C,EAAAkJ,MAEAtL,KAAAqgD,eAAAzC,EAGA,IAAA0C,GAAA1C,EAAA/F,OAAAz1C,EAAAkJ,GAIAs9B,GAAA2X,iBAAAC,aAAA5C,EAAAjG,UAMA,KAAA,GAAAh3C,GAAA,EAAAP,EAAAkgD,EAAAh+C,KAAAtB,OAAAZ,EAAAO,EAAAA,IAEAy/C,EAAAE,EAAAh+C,KAAA3B,GAEA,IAAA2/C,EAAAh+C,KAAA3B,GAAA8/C,OAkBApzC,OAAArN,KAAAw/C,gBAEA5W,EAAA8X,WAAArzC,QAEAA,OAAA1G,SAAAg6C,kBAAA/C,EAAA3S,eAAA2V,SAAA,GACAvzC,OAAA1G,SAAA8wC,KAAA7M,EAAAiW,QAAAjD,EAAAnG,MACApqC,OAAA1G,SAAA8tC,MAAAmJ,EAAAlK,WAGAtxC,EAAAgB,WAAAhB,EAAAM,aAAA09C,EAAA59C,QAEA6K,OAAArN,KAAAw/C,gBAEAnyC,OAAA5G,WAAAq6C,gBAAAz2C,QAAAjI,EAAA4F,OAAA,EAAA,GAAA,GACAqF,OAAA5G,WAAAs6C,OAAA12C,QAAAjI,EAAA4F,OAAA,EAAA,GAAA,GAEA5F,EAAAqI,wBAAA4C,OAAA5G,WAAAq6C,gBAAA74C,UACA7F,EAAAqI,wBAAA4C,OAAA5G,WAAAs6C,OAAA94C,UAGA7F,EAAAgB,WAAAhB,EAAAmB,qBAAA68C,EAAAt2C,aACA1H,EAAA4I,aAAA5I,EAAA6sC,eAAAmR,EAAAY,QAAAhgD,OAAAoB,EAAA6I,eAAA,IAGA29B,EAAAqY,aAUA5B,EAAAx8C,UAAAw9C,eAAA,SAAAzC,GAEA,GAAAx7C,GAAApC,KAAA4oC,SAAAxmC,GAGAk+C,EAAA1C,EAAA/F,OAAAz1C,EAAAkJ,GAGAg1C,KAEAA,EAAA1C,EAAA/F,OAAAz1C,EAAAkJ,KAAA41C,UAAA,EAAA5+C,QAAAF,GAAAA,IAKAw7C,EAAA7zC,OAAA,CAEA,IAAApJ,EAGA,IAAAi9C,EAAAP,WACA,CAIA,IAHAO,EAAAP,YAAA,EAGA18C,EAAA,EAAAA,EAAA2/C,EAAAh+C,KAAAtB,OAAAL,IACA,CACA,GAAA62C,GAAA8I,EAAAh+C,KAAA3B,EACA62C,GAAA3b,QACA77B,KAAAu/C,iBAAA50C,KAAA6sC,GAIA8I,EAAAh+C,QACAg+C,EAAAY,UAAA,EAGA,GAAAd,EAKA,KAAAz/C,EAAA2/C,EAAAY,UAAAvgD,EAAAi9C,EAAApG,aAAAx2C,OAAAL,IACA,CACA,GAAA2B,GAAAs7C,EAAApG,aAAA72C,EAEA,IAAA2B,EAAAD,OAAAyqC,EAAAkD,OAAAC,KACA,CAaA,GAXA3tC,EAAAw2C,OAAAx2C,EAAAu2C,MAAAC,OAAAt6B,QACAlc,EAAAu2C,MAAAG,SAGA12C,EAAAw2C,OAAA,KAAAx2C,EAAAw2C,OAAAx2C,EAAAw2C,OAAA93C,OAAA,IAAAsB,EAAAw2C,OAAA,KAAAx2C,EAAAw2C,OAAAx2C,EAAAw2C,OAAA93C,OAAA,KAEAsB,EAAAw2C,OAAAnuC,KAAArI,EAAAw2C,OAAA,GAAAx2C,EAAAw2C,OAAA,IAKAx2C,EAAAq6C,MAEAr6C,EAAAw2C,OAAA93C,QAAA,EAEA,GAAAsB,EAAAw2C,OAAA93C,OAAA,EAAAhB,KAAA0/C,sBACA,CACAU,EAAApgD,KAAAmhD,WAAAb,EAAA,EAEA,IAAAc,GAAAtB,UAAAx9C,EAAA89C,EAEAgB,KAEAhB,EAAApgD,KAAAmhD,WAAAb,EAAA,GACAP,iBAAAz9C,EAAA89C,QAMAA,GAAApgD,KAAAmhD,WAAAb,EAAA,GACAP,iBAAAz9C,EAAA89C,EAKA99C,GAAAg1C,UAAA,IAEA8I,EAAApgD,KAAAmhD,WAAAb,EAAA,GACAT,EAAAv9C,EAAA89C,QAKAA,GAAApgD,KAAAmhD,WAAAb,EAAA,GAEAh+C,EAAAD,OAAAyqC,EAAAkD,OAAAE,KAEA8P,eAAA19C,EAAA89C,GAEA99C,EAAAD,OAAAyqC,EAAAkD,OAAAG,MAAA7tC,EAAAD,OAAAyqC,EAAAkD,OAAAI,KAEA8P,YAAA59C,EAAA89C,GAEA99C,EAAAD,OAAAyqC,EAAAkD,OAAAK,MAEA4P,sBAAA39C,EAAA89C,EAIAE,GAAAY,YAIA,IAAAvgD,EAAA,EAAAA,EAAA2/C,EAAAh+C,KAAAtB,OAAAL,IAEAy/C,EAAAE,EAAAh+C,KAAA3B,GAEAy/C,EAAAr2C,OAEAq2C,EAAAx9C,UAYAy8C,EAAAx8C,UAAAs+C,WAAA,SAAAb,EAAAj+C,GAEA,GAAA+9C,EAsBA,OApBAE,GAAAh+C,KAAAtB,QAQAo/C,EAAAE,EAAAh+C,KAAAg+C,EAAAh+C,KAAAtB,OAAA,IAEAo/C,EAAAtH,OAAA93C,OAAA,MAAAo/C,EAAAK,OAAAp+C,GAAA,IAAAA,KAEA+9C,EAAApgD,KAAAu/C,iBAAAtlC,OAAA,GAAA0lC,GAAAW,EAAAl+C,IACAg+C,EAAAK,KAAAp+C,EACAi+C,EAAAh+C,KAAAqI,KAAAy1C,MAZAA,EAAApgD,KAAAu/C,iBAAAtlC,OAAA,GAAA0lC,GAAAW,EAAAl+C,IACAg+C,EAAAK,KAAAp+C,EACAi+C,EAAAh+C,KAAAqI,KAAAy1C,IAcAA,EAAAr2C,OAAA,EAEAq2C,KAIAiB,cAAA,GAAAC,aAAA,GAAAC,sCAAA,GAAAC,6CAAA,GAAAC,cAAA,IAAAC,sBAAA,GAAAC,4BAAA,GAAAC,sBAAA,GAAAC,2BAAA,GAAAC,oBAAA,GAAAC,oBAAA,GAAAC,yBAAA,GAAAC,gCAAA,GAAA5vB,OAAA,KAAA6vB,IAAA,SAAAxhD,EAAAjB,EAAAD,GASA,QAAAmgD,GAAAv9C,GAOApC,KAAAoC,GAAAA,EAOApC,KAAA24C,OAAA,EAAA,EAAA,GAMA34C,KAAA84C,UAMA94C,KAAAghD,WAKAhhD,KAAAwC,OAAAJ,EAAAK,eAMAzC,KAAA8J,YAAA1H,EAAAK,eAMAzC,KAAAygD,KAAA,EAMAzgD,KAAAy0C,MAAA,EAMAz0C,KAAA+J,OAAA,EAEA/J,KAAAmiD,SAAA,KACAniD,KAAAoiD,UAAA,KAGAzC,EAAA98C,UAAAmH,YAAA21C,EACAlgD,EAAAD,QAAAmgD,EAKAA,EAAA98C,UAAAg5B,MAAA,WACA77B,KAAA84C,OAAA93C,OAAA,EACAhB,KAAAghD,QAAAhgD,OAAA,GAMA2+C,EAAA98C,UAAAD,OAAA,WACA,GAAAR,GAAApC,KAAAoC,EAGApC,MAAAmiD,SAAA,GAAAt6C,cAAA7H,KAAA84C,QAEA12C,EAAAgB,WAAAhB,EAAAM,aAAA1C,KAAAwC,QACAJ,EAAAe,WAAAf,EAAAM,aAAA1C,KAAAmiD,SAAA//C,EAAAO,aAEA3C,KAAAoiD,UAAA,GAAAC,aAAAriD,KAAAghD,SAEA5+C,EAAAgB,WAAAhB,EAAAmB,qBAAAvD,KAAA8J,aACA1H,EAAAe,WAAAf,EAAAmB,qBAAAvD,KAAAoiD,UAAAhgD,EAAAO,aAEA3C,KAAA+J,OAAA,GAGA41C,EAAA98C,UAAA0C,QAAA,WACAvF,KAAA24C,MAAA,KACA34C,KAAA84C,OAAA,KACA94C,KAAAghD,QAAA,KAEAhhD,KAAAoC,GAAAkgD,aAAAtiD,KAAAwC,QACAxC,KAAAoC,GAAAkgD,aAAAtiD,KAAA8J,aAEA9J,KAAAoC,GAAA,KAEApC,KAAAwC,OAAA,KACAxC,KAAA8J,YAAA,KAEA9J,KAAAmiD,SAAA,KACAniD,KAAAoiD,UAAA,WAGAG,IAAA,SAAA7hD,EAAAjB,EAAAD,GAWA,QAAAogD,GAAAx9C,GAEAiE,EAAAtF,KAAAf,KACAoC,GAGA,kCACA,yBAEA,kCACA,iCAEA,uBACA,uBACA,qBAEA,uBAEA,mBACA,2GACA,kDACA,KACAwO,KAAA,OAGA,2BAEA,uBAEA,mBACA,4BACA,KACAA,KAAA,OA1CA,GAAAvK,GAAA3F,EAAA,gBAAAY,QA8CAs+C,GAAA/8C,UAAA0M,OAAA/L,OAAA6C,EAAAxD,WACA+8C,EAAA/8C,UAAAmH,YAAA41C,EAEAngD,EAAAD,QAAAogD,IAEA/Y,eAAA,IAAA2b,IAAA,SAAA9hD,EAAAjB,EAAAD,GACA,GAAAqgD,GAAAn/C,EAAA,eACAkqC,EAAAlqC,EAAA,kBASAw/C,EAAA,SAAA1I,EAAA4I,GAGA,GAGAx8C,GACAC,EAJA4+C,EAAAjL,EAAAqB,MACAlkC,EAAA8tC,EAAA9tC,EACAmD,EAAA2qC,EAAA3qC,CAKA0/B,GAAAn1C,OAAAyqC,MAAAkD,OAAAG,MAEAvsC,EAAA6+C,EAAA/H,OACA72C,EAAA4+C,EAAA/H,SAIA92C,EAAA6+C,EAAA7+C,MACAC,EAAA4+C,EAAA5+C,OAGA,IAAA6+C,GAAAltC,KAAAyT,MAAA,GAAAzT,KAAAylC,KAAAwH,EAAA/H,UAAAllC,KAAAyT,MAAA,GAAAzT,KAAAylC,KAAAwH,EAAA7+C,MAAA6+C,EAAA5+C,SACA8+C,EAAA,EAAAntC,KAAAy3B,GAAAyV,EAEA/hD,EAAA,CAEA,IAAA62C,EAAAmF,KACA,CACA,GAAAhE,GAAA/N,EAAAiW,QAAArJ,EAAAkF,WACAjI,EAAA+C,EAAAH,UAEAh3C,EAAAs4C,EAAA,GAAAlE,EACA70C,EAAA+4C,EAAA,GAAAlE,EACAzvC,EAAA2zC,EAAA,GAAAlE,EAEAmO,EAAAxC,EAAAtH,OACAkI,EAAAZ,EAAAY,QAEA6B,EAAAD,EAAA5hD,OAAA,CAIA,KAFAggD,EAAAr2C,KAAAk4C,GAEAliD,EAAA,EAAA+hD,EAAA,EAAA/hD,EAAAA,IAEAiiD,EAAAj4C,KAAAgK,EAAAmD,EAAAzX,EAAAT,EAAAoF,EAAAyvC,GAEAmO,EAAAj4C,KAAAgK,EAAAa,KAAAugC,IAAA4M,EAAAhiD,GAAAiD,EACAkU,EAAAtC,KAAAwgC,IAAA2M,EAAAhiD,GAAAkD,EACAxD,EAAAT,EAAAoF,EAAAyvC,GAEAuM,EAAAr2C,KAAAk4C,IAAAA,IAGA7B,GAAAr2C,KAAAk4C,EAAA,GAGA,GAAArL,EAAAF,UACA,CACA,GAAAwL,GAAAtL,EAAAsB,MAIA,KAFAtB,EAAAsB,UAEAn4C,EAAA,EAAA+hD,EAAA,EAAA/hD,EAAAA,IAEA62C,EAAAsB,OAAAnuC,KAAAgK,EAAAa,KAAAugC,IAAA4M,EAAAhiD,GAAAiD,EACAkU,EAAAtC,KAAAwgC,IAAA2M,EAAAhiD,GAAAkD,EAGAg8C,GAAArI,EAAA4I,GAEA5I,EAAAsB,OAAAgK,GAKArjD,GAAAD,QAAA0gD,IACA6C,iBAAA,IAAAC,cAAA,KAAAC,IAAA,SAAAviD,EAAAjB,EAAAD,GACA,GACAorC,IADAlqC,EAAA,eACAA,EAAA,mBAWAq/C,EAAA,SAAAvI,EAAA4I,GAGA,GAAAtH,GAAAtB,EAAAsB,OAAAt6B,OAEA,MAAAs6B,EAAA93C,OAAA,GAAA,CAMA,GAAAggD,GAAAZ,EAAAY,OACAZ,GAAAtH,OAAAA,EACAsH,EAAA3L,MAAA+C,EAAAH,UACA+I,EAAAzH,MAAA/N,EAAAiW,QAAArJ,EAAAkF,UAYA,KAAA,GAHA/nC,GAAAmD,EANA+a,EAAAiD,EAAAA,EACA/C,IAAA+C,EAAAA,GAEAhD,EAAAgD,EAAAA,EACA9C,IAAA8C,EAAAA,GAKAn1B,EAAA,EAAAA,EAAAm4C,EAAA93C,OAAAL,GAAA,EAEAgU,EAAAmkC,EAAAn4C,GACAmX,EAAAghC,EAAAn4C,EAAA,GAEAkyB,EAAAA,EAAAle,EAAAA,EAAAke,EACAE,EAAApe,EAAAoe,EAAApe,EAAAoe,EAEAD,EAAAA,EAAAhb,EAAAA,EAAAgb,EACAE,EAAAlb,EAAAkb,EAAAlb,EAAAkb,CAIA8lB,GAAAnuC,KAAAkoB,EAAAC,EACAC,EAAAD,EACAC,EAAAC,EACAH,EAAAG,EAKA,IAAAhyB,GAAA83C,EAAA93C,OAAA,CACA,KAAAL,EAAA,EAAAK,EAAAL,EAAAA,IAEAqgD,EAAAr2C,KAAAhK,IAOAlB,GAAAD,QAAAugD,IACAgD,iBAAA,IAAAC,cAAA,KAAAE,IAAA,SAAAxiD,EAAAjB,EAAAD,GACA,GAAAkxC,GAAAhwC,EAAA,iBACAkqC,EAAAlqC,EAAA,kBASAm/C,EAAA,SAAArI,EAAA4I,GAGA,GAAAz/C,GAAA,EACAm4C,EAAAtB,EAAAsB,MAEA,IAAA,IAAAA,EAAA93C,OAAA,CAeA,GAAAmiD,GAAA,GAAAzS,GAAAsE,MAAA8D,EAAA,GAAAA,EAAA,IACAsK,EAAA,GAAA1S,GAAAsE,MAAA8D,EAAAA,EAAA93C,OAAA,GAAA83C,EAAAA,EAAA93C,OAAA,GAGA,IAAAmiD,EAAAxuC,IAAAyuC,EAAAzuC,GAAAwuC,EAAArrC,IAAAsrC,EAAAtrC,EACA,CAEAghC,EAAAA,EAAAt6B,QAEAs6B,EAAA7+B,MACA6+B,EAAA7+B,MAEAmpC,EAAA,GAAA1S,GAAAsE,MAAA8D,EAAAA,EAAA93C,OAAA,GAAA83C,EAAAA,EAAA93C,OAAA,GAEA,IAAAqiD,GAAAD,EAAAzuC,EAAA,IAAAwuC,EAAAxuC,EAAAyuC,EAAAzuC,GACA2uC,EAAAF,EAAAtrC,EAAA,IAAAqrC,EAAArrC,EAAAsrC,EAAAtrC,EAEAghC,GAAAngC,QAAA0qC,EAAAC,GACAxK,EAAAnuC,KAAA04C,EAAAC,GAGA,GAgBAvsB,GAAAC,EAAAusB,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EACAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EACA1rB,EAAAmiB,EAAAwJ,EAAA3sB,EAAAE,EAAA0sB,EACAC,EAAAC,EAAAC,EAnBA3B,EAAAxC,EAAAtH,OACAkI,EAAAZ,EAAAY,QACAhgD,EAAA83C,EAAA93C,OAAA,EACAwjD,EAAA1L,EAAA93C,OACAyjD,EAAA7B,EAAA5hD,OAAA,EAGA4C,EAAA4zC,EAAAF,UAAA,EAGAqB,EAAA/N,EAAAiW,QAAArJ,EAAAD,WACA9C,EAAA+C,EAAAoB,UACAv4C,EAAAs4C,EAAA,GAAAlE,EACA70C,EAAA+4C,EAAA,GAAAlE,EACAzvC,EAAA2zC,EAAA,GAAAlE,CA8BA,KAvBA8O,EAAAzK,EAAA,GACA0K,EAAA1K,EAAA,GAEA2K,EAAA3K,EAAA,GACA4K,EAAA5K,EAAA,GAEA+K,IAAAL,EAAAE,GACAI,EAAAP,EAAAE,EAEAc,EAAA/uC,KAAAylC,KAAA4I,EAAAA,EAAAC,EAAAA,GAEAD,GAAAU,EACAT,GAAAS,EACAV,GAAAjgD,EACAkgD,GAAAlgD,EAGAg/C,EAAAj4C,KAAA44C,EAAAM,EAAAL,EAAAM,EACAzjD,EAAAT,EAAAoF,EAAAyvC,GAEAmO,EAAAj4C,KAAA44C,EAAAM,EAAAL,EAAAM,EACAzjD,EAAAT,EAAAoF,EAAAyvC,GAEA9zC,EAAA,EAAAK,EAAA,EAAAL,EAAAA,IAEA4iD,EAAAzK,EAAA,GAAAn4C,EAAA,IACA6iD,EAAA1K,EAAA,GAAAn4C,EAAA,GAAA,GAEA8iD,EAAA3K,EAAA,EAAA,GACA4K,EAAA5K,EAAA,EAAA,EAAA,GAEA6K,EAAA7K,EAAA,GAAAn4C,EAAA,IACAijD,EAAA9K,EAAA,GAAAn4C,EAAA,GAAA,GAEAkjD,IAAAL,EAAAE,GACAI,EAAAP,EAAAE,EAEAc,EAAA/uC,KAAAylC,KAAA4I,EAAAA,EAAAC,EAAAA,GACAD,GAAAU,EACAT,GAAAS,EACAV,GAAAjgD,EACAkgD,GAAAlgD,EAEAmgD,IAAAL,EAAAE,GACAI,EAAAP,EAAAE,EAEAY,EAAA/uC,KAAAylC,KAAA8I,EAAAA,EAAAC,EAAAA,GACAD,GAAAQ,EACAP,GAAAO,EACAR,GAAAngD,EACAogD,GAAApgD,EAEA40B,GAAAsrB,EAAAN,IAAAM,EAAAJ,GACA/I,GAAAkJ,EAAAJ,IAAAI,EAAAN,GACAY,IAAAN,EAAAN,KAAAO,EAAAJ,KAAAG,EAAAJ,KAAAK,EAAAN,GACAhsB,GAAAwsB,EAAAJ,IAAAI,EAAAN,GACAhsB,GAAAqsB,EAAAN,IAAAM,EAAAJ,GACAS,IAAAL,EAAAJ,KAAAK,EAAAN,KAAAK,EAAAN,KAAAO,EAAAJ,GAEAS,EAAA7rB,EAAAd,EAAAF,EAAAmjB,EAEAnlC,KAAAygB,IAAAouB,GAAA,IAGAA,GAAA,KACAzB,EAAAj4C,KAAA84C,EAAAI,EAAAH,EAAAI,EACAzjD,EAAAT,EAAAoF,EAAAyvC,GAEAmO,EAAAj4C,KAAA84C,EAAAI,EAAAH,EAAAI,EACAzjD,EAAAT,EAAAoF,EAAAyvC,KAKA1d,GAAA4jB,EAAAyJ,EAAA1sB,EAAAysB,GAAAE,EACArtB,GAAAQ,EAAA2sB,EAAA3rB,EAAA4rB,GAAAC,EAGAC,GAAAvtB,EAAA0sB,IAAA1sB,EAAA0sB,IAAAzsB,EAAA0sB,IAAA1sB,EAAA0sB,GAGAY,EAAA,OAEAL,EAAAJ,EAAAE,EACAG,EAAAJ,EAAAE,EAEAO,EAAA/uC,KAAAylC,KAAAgJ,EAAAA,EAAAC,EAAAA,GACAD,GAAAM,EACAL,GAAAK,EACAN,GAAArgD,EACAsgD,GAAAtgD,EAEAg/C,EAAAj4C,KAAA84C,EAAAQ,EAAAP,EAAAQ,GACAtB,EAAAj4C,KAAAtK,EAAAT,EAAAoF,EAAAyvC,GAEAmO,EAAAj4C,KAAA84C,EAAAQ,EAAAP,EAAAQ,GACAtB,EAAAj4C,KAAAtK,EAAAT,EAAAoF,EAAAyvC,GAEAmO,EAAAj4C,KAAA84C,EAAAQ,EAAAP,EAAAQ,GACAtB,EAAAj4C,KAAAtK,EAAAT,EAAAoF,EAAAyvC,GAEA+P,MAKA5B,EAAAj4C,KAAAosB,EAAAC,GACA4rB,EAAAj4C,KAAAtK,EAAAT,EAAAoF,EAAAyvC,GAEAmO,EAAAj4C,KAAA84C,GAAA1sB,EAAA0sB,GAAAC,GAAA1sB,EAAA0sB,IACAd,EAAAj4C,KAAAtK,EAAAT,EAAAoF,EAAAyvC,IA2BA,KAvBA8O,EAAAzK,EAAA,GAAA93C,EAAA,IACAwiD,EAAA1K,EAAA,GAAA93C,EAAA,GAAA,GAEAyiD,EAAA3K,EAAA,GAAA93C,EAAA,IACA0iD,EAAA5K,EAAA,GAAA93C,EAAA,GAAA,GAEA6iD,IAAAL,EAAAE,GACAI,EAAAP,EAAAE,EAEAc,EAAA/uC,KAAAylC,KAAA4I,EAAAA,EAAAC,EAAAA,GACAD,GAAAU,EACAT,GAAAS,EACAV,GAAAjgD,EACAkgD,GAAAlgD,EAEAg/C,EAAAj4C,KAAA84C,EAAAI,EAAAH,EAAAI,GACAlB,EAAAj4C,KAAAtK,EAAAT,EAAAoF,EAAAyvC,GAEAmO,EAAAj4C,KAAA84C,EAAAI,EAAAH,EAAAI,GACAlB,EAAAj4C,KAAAtK,EAAAT,EAAAoF,EAAAyvC,GAEAuM,EAAAr2C,KAAA85C,GAEA9jD,EAAA,EAAA6jD,EAAA7jD,EAAAA,IAEAqgD,EAAAr2C,KAAA85C,IAGAzD,GAAAr2C,KAAA85C,EAAA,IAGAhlD,GAAAD,QAAAqgD,IACA6E,gBAAA,GAAA3B,iBAAA,MAAA4B,IAAA,SAAAjkD,EAAAjB,EAAAD,GACA,GAAAorC,GAAAlqC,EAAA,kBASAo/C,EAAA,SAAAtI,EAAA4I,GAEA,GAAAtH,GAAAtB,EAAAsB,MAEA,MAAAA,EAAA93C,OAAA,GAAA,CAMA,GAAA4hD,GAAAxC,EAAAtH,OACAkI,EAAAZ,EAAAY,QAEAhgD,EAAA83C,EAAA93C,OAAA,EAGA23C,EAAA/N,EAAAiW,QAAArJ,EAAAkF,WACAjI,EAAA+C,EAAAH,UACAh3C,EAAAs4C,EAAA,GAAAlE,EACA70C,EAAA+4C,EAAA,GAAAlE,EACAzvC,EAAA2zC,EAAA,GAAAlE,EAEA7hB,EAAAP,OAAAymB,EAAA,KAAA,EAEA,KAAAlmB,EACA,OAAA,CAGA,IAAAgyB,GAAAhC,EAAA5hD,OAAA,EAEAL,EAAA,CAEA,KAAAA,EAAA,EAAAA,EAAAiyB,EAAA5xB,OAAAL,GAAA,EAEAqgD,EAAAr2C,KAAAioB,EAAAjyB,GAAAikD,GACA5D,EAAAr2C,KAAAioB,EAAAjyB,GAAAikD,GACA5D,EAAAr2C,KAAAioB,EAAAjyB,EAAA,GAAAikD,GACA5D,EAAAr2C,KAAAioB,EAAAjyB,EAAA,GAAAikD,GACA5D,EAAAr2C,KAAAioB,EAAAjyB,EAAA,GAAAikD,EAGA,KAAAjkD,EAAA,EAAAK,EAAAL,EAAAA,IAEAiiD,EAAAj4C,KAAAmuC,EAAA,EAAAn4C,GAAAm4C,EAAA,EAAAn4C,EAAA,GACAN,EAAAT,EAAAoF,EAAAyvC,EAGA,QAAA,GAIAh1C,GAAAD,QAAAsgD,IAEAiD,iBAAA,MAAA8B,IAAA,SAAAnkD,EAAAjB,EAAAD,GACA,GAAAqgD,GAAAn/C,EAAA,eACAkqC,EAAAlqC,EAAA,kBASAs/C,EAAA,SAAAxI,EAAA4I,GAKA,GAAA0E,GAAAtN,EAAAqB,MACAlkC,EAAAmwC,EAAAnwC,EACAmD,EAAAgtC,EAAAhtC,EACAlU,EAAAkhD,EAAAlhD,MACAC,EAAAihD,EAAAjhD,MAEA,IAAA2zC,EAAAmF,KACA,CACA,GAAAhE,GAAA/N,EAAAiW,QAAArJ,EAAAkF,WACAjI,EAAA+C,EAAAH,UAEAh3C,EAAAs4C,EAAA,GAAAlE,EACA70C,EAAA+4C,EAAA,GAAAlE,EACAzvC,EAAA2zC,EAAA,GAAAlE,EAEAmO,EAAAxC,EAAAtH,OACAkI,EAAAZ,EAAAY,QAEA4D,EAAAhC,EAAA5hD,OAAA,CAGA4hD,GAAAj4C,KAAAgK,EAAAmD,GACA8qC,EAAAj4C,KAAAtK,EAAAT,EAAAoF,EAAAyvC,GAEAmO,EAAAj4C,KAAAgK,EAAA/Q,EAAAkU,GACA8qC,EAAAj4C,KAAAtK,EAAAT,EAAAoF,EAAAyvC,GAEAmO,EAAAj4C,KAAAgK,EAAAmD,EAAAjU,GACA++C,EAAAj4C,KAAAtK,EAAAT,EAAAoF,EAAAyvC,GAEAmO,EAAAj4C,KAAAgK,EAAA/Q,EAAAkU,EAAAjU,GACA++C,EAAAj4C,KAAAtK,EAAAT,EAAAoF,EAAAyvC,GAGAuM,EAAAr2C,KAAAi6C,EAAAA,EAAAA,EAAA,EAAAA,EAAA,EAAAA,EAAA,EAAAA,EAAA,GAGA,GAAApN,EAAAF,UACA,CACA,GAAAwL,GAAAtL,EAAAsB,MAEAtB,GAAAsB,QAAAnkC,EAAAmD,EACAnD,EAAA/Q,EAAAkU,EACAnD,EAAA/Q,EAAAkU,EAAAjU,EACA8Q,EAAAmD,EAAAjU,EACA8Q,EAAAmD,GAGA+nC,EAAArI,EAAA4I,GAEA5I,EAAAsB,OAAAgK,GAIArjD,GAAAD,QAAAwgD,IACA+C,iBAAA,IAAAC,cAAA,KAAA+B,IAAA,SAAArkD,EAAAjB,EAAAD,GACA,GACAorC,IADAlqC,EAAA,eACAA,EAAA,kBASAu/C,uBAAA,SAAAzI,EAAA4I,GAEA,GAAA4E,GAAAxN,EAAAqB,MACAlkC,EAAAqwC,EAAArwC,EACAmD,EAAAktC,EAAAltC,EACAlU,EAAAohD,EAAAphD,MACAC,EAAAmhD,EAAAnhD,OAEA62C,EAAAsK,EAAAtK,OAEAuK,IAUA,IATAA,EAAAt6C,KAAAgK,EAAAmD,EAAA4iC,GACA16C,KAAAklD,qBAAAvwC,EAAAmD,EAAAjU,EAAA62C,EAAA/lC,EAAAmD,EAAAjU,EAAA8Q,EAAA+lC,EAAA5iC,EAAAjU,EAAAohD,GACAjlD,KAAAklD,qBAAAvwC,EAAA/Q,EAAA82C,EAAA5iC,EAAAjU,EAAA8Q,EAAA/Q,EAAAkU,EAAAjU,EAAA8Q,EAAA/Q,EAAAkU,EAAAjU,EAAA62C,EAAAuK,GACAjlD,KAAAklD,qBAAAvwC,EAAA/Q,EAAAkU,EAAA4iC,EAAA/lC,EAAA/Q,EAAAkU,EAAAnD,EAAA/Q,EAAA82C,EAAA5iC,EAAAmtC,GACAjlD,KAAAklD,qBAAAvwC,EAAA+lC,EAAA5iC,EAAAnD,EAAAmD,EAAAnD,EAAAmD,EAAA4iC,EAAA,MAAAuK,GAKAzN,EAAAmF,KACA,CACA,GAAAhE,GAAA/N,EAAAiW,QAAArJ,EAAAkF,WACAjI,EAAA+C,EAAAH,UAEAh3C,EAAAs4C,EAAA,GAAAlE,EACA70C,EAAA+4C,EAAA,GAAAlE,EACAzvC,EAAA2zC,EAAA,GAAAlE,EAEAmO,EAAAxC,EAAAtH,OACAkI,EAAAZ,EAAAY,QAEA6B,EAAAD,EAAA5hD,OAAA,EAEA4xB,EAAAP,OAAA4yB,EAAA,KAAA,GAEAtkD,EAAA,CACA,KAAAA,EAAA,EAAAA,EAAAiyB,EAAA5xB,OAAAL,GAAA,EAEAqgD,EAAAr2C,KAAAioB,EAAAjyB,GAAAkiD,GACA7B,EAAAr2C,KAAAioB,EAAAjyB,GAAAkiD,GACA7B,EAAAr2C,KAAAioB,EAAAjyB,EAAA,GAAAkiD,GACA7B,EAAAr2C,KAAAioB,EAAAjyB,EAAA,GAAAkiD,GACA7B,EAAAr2C,KAAAioB,EAAAjyB,EAAA,GAAAkiD,EAGA,KAAAliD,EAAA,EAAAA,EAAAskD,EAAAjkD,OAAAL,IAEAiiD,EAAAj4C,KAAAs6C,EAAAtkD,GAAAskD,IAAAtkD,GAAAN,EAAAT,EAAAoF,EAAAyvC,GAIA,GAAA+C,EAAAF,UACA,CACA,GAAAwL,GAAAtL,EAAAsB,MAEAtB,GAAAsB,OAAAmM,EAEAjlD,KAAA6/C,UAAArI,EAAA4I,GAEA5I,EAAAsB,OAAAgK,IAkBAoC,qBAAA,SAAAvL,EAAAC,EAAAP,EAAAC,EAAAC,EAAAC,EAAAhwB,GAWA,QAAA27B,GAAAC,EAAAC,EAAAC,GACA,GAAAC,GAAAF,EAAAD,CAEA,OAAAA,GAAAG,EAAAD,EAIA,IAAA,GAhBA7L,GACAC,EACA8L,EACAC,EACA9wC,EACAmD,EACA1X,EAAA,GACA04C,EAAAtvB,MAQAE,EAAA,EACA/oB,EAAA,EAAAP,GAAAO,EAAAA,IACA+oB,EAAA/oB,EAAAP,EAGAq5C,EAAA0L,EAAAxL,EAAAN,EAAA3vB,GACAgwB,EAAAyL,EAAAvL,EAAAN,EAAA5vB,GACA87B,EAAAL,EAAA9L,EAAAE,EAAA7vB,GACA+7B,EAAAN,EAAA7L,EAAAE,EAAA9vB,GAGA/U,EAAAwwC,EAAA1L,EAAA+L,EAAA97B,GACA5R,EAAAqtC,EAAAzL,EAAA+L,EAAA/7B,GAEAovB,EAAAnuC,KAAAgK,EAAAmD,EAGA,OAAAghC,IAIAr5C,EAAAD,QAAAygD,wBACA8C,iBAAA,IAAAC,cAAA,KAAA0C,IAAA,SAAAhlD,EAAAjB,EAAAD,GAYA,GAAAgqC,GAAA/pC,EAAAD,QAAA+P,OAAA4pB,OAAAz4B,EAAA,WAAAA,EAAA,WAEAkqC,MAAAlqC,EAAA,WACAilD,OAAAjlD,EAAA,YAGA+oC,cAAA/oC,EAAA,2BACA+vC,UAAA/vC,EAAA,uBAGAklD,OAAAllD,EAAA,oBACAmlD,kBAAAnlD,EAAA,iCACAolD,eAAAplD,EAAA,kCACAqlD,iBAAArlD,EAAA,sCAGAslD,KAAAtlD,EAAA,eAGA02C,SAAA12C,EAAA,uBACA43C,aAAA53C,EAAA,2BACA2+C,iBAAA3+C,EAAA,qCAGAgD,QAAAhD,EAAA,sBACAulD,YAAAvlD,EAAA,0BACAiwC,cAAAjwC,EAAA,4BACAwlD,iBAAAxlD,EAAA,+BACAylD,WAAAzlD,EAAA,yBAGA4rC,eAAA5rC,EAAA,qCACA23C,eAAA33C,EAAA,2CACA03C,aAAA13C,EAAA,yCAGA0rC,cAAA1rC,EAAA,mCACA0lD,aAAA1lD,EAAA,2CACA2lD,cAAA3lD,EAAA,4CACA2F,OAAA3F,EAAA,oCACA4+C,eAAA5+C,EAAA,0CACA4lD,aAAA5lD,EAAA,wCAGA6lD,eAAA7lD,EAAA,4CACA8lD,WAAA9lD,EAAA,wCACA+lD,iBAAA/lD,EAAA,8CAEAgmD,OAAAhmD,EAAA,gBAqBAimD,mBAAA,SAAA/iD,EAAAC,EAAAgH,EAAA+7C,GAKA,MAHAhjD,GAAAA,GAAA,IACAC,EAAAA,GAAA,KAEA+iD,GAAApd,EAAAoB,MAAAic,mBAEA,GAAArd,GAAA4C,cAAAxoC,EAAAC,EAAAgH,GAGA,GAAA2+B,GAAA8C,eAAA1oC,EAAAC,EAAAgH,QAIAi8C,UAAA,GAAAC,sBAAA,GAAAC,0BAAA,GAAAC,sBAAA,GAAAC,0BAAA,GAAAC,oCAAA,GAAAC,SAAA,GAAAC,gCAAA,GAAAC,qCAAA,GAAAC,oCAAA,GAAAC,wCAAA,GAAAC,0CAAA,GAAAC,kCAAA,GAAAC,2CAAA,GAAAC,uCAAA,GAAAC,6CAAA,GAAAC,2CAAA,GAAAC,0CAAA,GAAAC,mCAAA,GAAAC,yCAAA,GAAAC,uCAAA,GAAAC,mBAAA,GAAAC,iCAAA,GAAAC,cAAA,GAAAC,yBAAA,GAAAC,2BAAA,GAAAC,qBAAA,GAAAC,wBAAA,IAAAC,8BAAA,IAAAC,WAAA,IAAAC,UAAA,IAAA/hB,eAAA,IAAAgiB,IAAA,SAAAnoD,EAAAjB,EAAAD,GAiBA,QAAAqxC,KAMA7wC,KAAAS,EAAA,EAMAT,KAAAgF,EAAA,EAMAhF,KAAAq0B,EAAA,EAMAr0B,KAAAorC,EAAA,EAMAprC,KAAAkrC,GAAA,EAMAlrC,KAAAmrC,GAAA,EAhDA,GAAA6J,GAAAt0C,EAAA,UAmDAmwC,GAAAhuC,UAAAmH,YAAA6mC,EACApxC,EAAAD,QAAAqxC,EAcAA,EAAAhuC,UAAAimD,UAAA,SAAA96C,GAEAhO,KAAAS,EAAAuN,EAAA,GACAhO,KAAAgF,EAAAgJ,EAAA,GACAhO,KAAAq0B,EAAArmB,EAAA,GACAhO,KAAAorC,EAAAp9B,EAAA,GACAhO,KAAAkrC,GAAAl9B,EAAA,GACAhO,KAAAmrC,GAAAn9B,EAAA,IAgBA6iC,EAAAhuC,UAAAqN,IAAA,SAAAzP,EAAAuE,EAAAqvB,EAAA+W,EAAAF,EAAAC,GASA,MAPAnrC,MAAAS,EAAAA,EACAT,KAAAgF,EAAAA,EACAhF,KAAAq0B,EAAAA,EACAr0B,KAAAorC,EAAAA,EACAprC,KAAAkrC,GAAAA,EACAlrC,KAAAmrC,GAAAA,EAEAnrC,MAWA6wC,EAAAhuC,UAAA+9C,QAAA,SAAAmI,EAAAv/B,GAEAxpB,KAAAgO,QAEAhO,KAAAgO,MAAA,GAAAnG,cAAA,GAGA,IAAAmG,GAAAwb,GAAAxpB,KAAAgO,KA2BA,OAzBA+6C,IAEA/6C,EAAA,GAAAhO,KAAAS,EACAuN,EAAA,GAAAhO,KAAAgF,EACAgJ,EAAA,GAAA,EACAA,EAAA,GAAAhO,KAAAq0B,EACArmB,EAAA,GAAAhO,KAAAorC,EACAp9B,EAAA,GAAA,EACAA,EAAA,GAAAhO,KAAAkrC,GACAl9B,EAAA,GAAAhO,KAAAmrC,GACAn9B,EAAA,GAAA,IAIAA,EAAA,GAAAhO,KAAAS,EACAuN,EAAA,GAAAhO,KAAAq0B,EACArmB,EAAA,GAAAhO,KAAAkrC,GACAl9B,EAAA,GAAAhO,KAAAgF,EACAgJ,EAAA,GAAAhO,KAAAorC,EACAp9B,EAAA,GAAAhO,KAAAmrC,GACAn9B,EAAA,GAAA,EACAA,EAAA,GAAA,EACAA,EAAA,GAAA,GAGAA,GAWA6iC,EAAAhuC,UAAA+Q,MAAA,SAAA0E,EAAA0wC,GAEAA,EAAAA,GAAA,GAAAhU,EAEA,IAAArgC,GAAA2D,EAAA3D,EACAmD,EAAAQ,EAAAR,CAKA,OAHAkxC,GAAAr0C,EAAA3U,KAAAS,EAAAkU,EAAA3U,KAAAq0B,EAAAvc,EAAA9X,KAAAkrC,GACA8d,EAAAlxC,EAAA9X,KAAAgF,EAAA2P,EAAA3U,KAAAorC,EAAAtzB,EAAA9X,KAAAmrC,GAEA6d,GAWAnY,EAAAhuC,UAAA6zC,aAAA,SAAAp+B,EAAA0wC,GAEAA,EAAAA,GAAA,GAAAhU,EAEA,IAAA1pC,GAAA,GAAAtL,KAAAS,EAAAT,KAAAorC,EAAAprC,KAAAq0B,GAAAr0B,KAAAgF,GAEA2P,EAAA2D,EAAA3D,EACAmD,EAAAQ,EAAAR,CAKA,OAHAkxC,GAAAr0C,EAAA3U,KAAAorC,EAAA9/B,EAAAqJ,GAAA3U,KAAAq0B,EAAA/oB,EAAAwM,GAAA9X,KAAAmrC,GAAAnrC,KAAAq0B,EAAAr0B,KAAAkrC,GAAAlrC,KAAAorC,GAAA9/B,EACA09C,EAAAlxC,EAAA9X,KAAAS,EAAA6K,EAAAwM,GAAA9X,KAAAgF,EAAAsG,EAAAqJ,IAAA3U,KAAAmrC,GAAAnrC,KAAAS,EAAAT,KAAAkrC,GAAAlrC,KAAAgF,GAAAsG,EAEA09C,GAUAnY,EAAAhuC,UAAA46C,UAAA,SAAA9oC,EAAAmD,GAKA,MAHA9X,MAAAkrC,IAAAv2B,EACA3U,KAAAmrC,IAAArzB,EAEA9X,MAUA6wC,EAAAhuC,UAAAkuC,MAAA,SAAAp8B,EAAAmD,GASA,MAPA9X,MAAAS,GAAAkU,EACA3U,KAAAorC,GAAAtzB,EACA9X,KAAAq0B,GAAA1f,EACA3U,KAAAgF,GAAA8S,EACA9X,KAAAkrC,IAAAv2B,EACA3U,KAAAmrC,IAAArzB,EAEA9X,MAUA6wC,EAAAhuC,UAAAomD,OAAA,SAAA1M,GAEA,GAAAvG,GAAAxgC,KAAAwgC,IAAAuG,GACAxG,EAAAvgC,KAAAugC,IAAAwG,GAEA/jB,EAAAx4B,KAAAS,EACA0jD,EAAAnkD,KAAAq0B,EACA60B,EAAAlpD,KAAAkrC,EASA,OAPAlrC,MAAAS,EAAA+3B,EAAAwd,EAAAh2C,KAAAgF,EAAA+wC,EACA/1C,KAAAgF,EAAAwzB,EAAAud,EAAA/1C,KAAAgF,EAAAgxC,EACAh2C,KAAAq0B,EAAA8vB,EAAAnO,EAAAh2C,KAAAorC,EAAA2K,EACA/1C,KAAAorC,EAAA+Y,EAAApO,EAAA/1C,KAAAorC,EAAA4K,EACAh2C,KAAAkrC,GAAAge,EAAAlT,EAAAh2C,KAAAmrC,GAAA4K,EACA/1C,KAAAmrC,GAAA+d,EAAAnT,EAAA/1C,KAAAmrC,GAAA6K,EAEAh2C,MASA6wC,EAAAhuC,UAAAsmD,OAAA,SAAA7S,GAEA,GAAA9d,GAAAx4B,KAAAS,EACAk6C,EAAA36C,KAAAgF,EACAm/C,EAAAnkD,KAAAq0B,EACA+0B,EAAAppD,KAAAorC,CAUA,OARAprC,MAAAS,EAAA61C,EAAA71C,EAAA+3B,EAAA8d,EAAAtxC,EAAAm/C,EACAnkD,KAAAgF,EAAAsxC,EAAA71C,EAAAk6C,EAAArE,EAAAtxC,EAAAokD,EACAppD,KAAAq0B,EAAAiiB,EAAAjiB,EAAAmE,EAAA8d,EAAAlL,EAAA+Y,EACAnkD,KAAAorC,EAAAkL,EAAAjiB,EAAAsmB,EAAArE,EAAAlL,EAAAge,EAEAppD,KAAAkrC,GAAAoL,EAAApL,GAAA1S,EAAA8d,EAAAnL,GAAAgZ,EAAAnkD,KAAAkrC,GACAlrC,KAAAmrC,GAAAmL,EAAApL,GAAAyP,EAAArE,EAAAnL,GAAAie,EAAAppD,KAAAmrC,GAEAnrC,MAkBA6wC,EAAAhuC,UAAAg0C,aAAA,SAAAliC,EAAAmD,EAAAk/B,EAAAC,EAAArB,EAAAC,EAAAC,EAAAgB,EAAAC,GAEA,GAAAt2C,GAAAuE,EAAAqvB,EAAA+W,EAAAie,EAAAC,EAAAxyB,EAAA4T,EAAA6e,EAAA1yB,CAsBA,OApBAwyB,GAAA7zC,KAAAugC,IAAAD,GACAwT,EAAA9zC,KAAAwgC,IAAAF,GACAhf,EAAAthB,KAAAwgC,IAAAe,GACArM,EAAAl1B,KAAAugC,IAAAgB,GACAwS,GAAA/zC,KAAAugC,IAAAe,GACAjgB,EAAArhB,KAAAwgC,IAAAc,GAEAr2C,EAAA6oD,EAAA1T,EACA5wC,EAAAqkD,EAAAzT,EACAvhB,GAAAg1B,EAAAxT,EACAzK,EAAAke,EAAAzT,EAEA71C,KAAAS,EAAAq2B,EAAAr2B,EAAAiqC,EAAArW,EACAr0B,KAAAgF,EAAA8xB,EAAA9xB,EAAA0lC,EAAAU,EACAprC,KAAAq0B,EAAAk1B,EAAA9oD,EAAAo2B,EAAAxC,EACAr0B,KAAAorC,EAAAme,EAAAvkD,EAAA6xB,EAAAuU,EAEAprC,KAAAkrC,GAAAv2B,GAAAqiC,EAAAv2C,EAAAw2C,EAAA5iB,GACAr0B,KAAAmrC,GAAArzB,GAAAk/B,EAAAhyC,EAAAiyC,EAAA7L,GAEAprC,MASA6wC,EAAAhuC,UAAA2mD,QAAA,SAAAlT,GAEA,GAAA4S,GAAAlpD,KAAAkrC,EAEA,IAAA,IAAAoL,EAAA71C,GAAA,IAAA61C,EAAAtxC,GAAA,IAAAsxC,EAAAjiB,GAAA,IAAAiiB,EAAAlL,EACA,CACA,GAAA5S,GAAAx4B,KAAAS,EACA0jD,EAAAnkD,KAAAq0B,CACAr0B,MAAAS,EAAA+3B,EAAA8d,EAAA71C,EAAAT,KAAAgF,EAAAsxC,EAAAjiB,EACAr0B,KAAAgF,EAAAwzB,EAAA8d,EAAAtxC,EAAAhF,KAAAgF,EAAAsxC,EAAAlL,EACAprC,KAAAq0B,EAAA8vB,EAAA7N,EAAA71C,EAAAT,KAAAorC,EAAAkL,EAAAjiB,EACAr0B,KAAAorC,EAAA+Y,EAAA7N,EAAAtxC,EAAAhF,KAAAorC,EAAAkL,EAAAlL,EAMA,MAHAprC,MAAAkrC,GAAAge,EAAA5S,EAAA71C,EAAAT,KAAAmrC,GAAAmL,EAAAjiB,EAAAiiB,EAAApL,GACAlrC,KAAAmrC,GAAA+d,EAAA5S,EAAAtxC,EAAAhF,KAAAmrC,GAAAmL,EAAAlL,EAAAkL,EAAAnL,GAEAnrC,MAQA6wC,EAAAhuC,UAAA4mD,OAAA,WAEA,GAAAjxB,GAAAx4B,KAAAS,EACAk6C,EAAA36C,KAAAgF,EACAm/C,EAAAnkD,KAAAq0B,EACA+0B,EAAAppD,KAAAorC,EACA8d,EAAAlpD,KAAAkrC,GACA9qC,EAAAo4B,EAAA4wB,EAAAzO,EAAAwJ,CASA,OAPAnkD,MAAAS,EAAA2oD,EAAAhpD,EACAJ,KAAAgF,GAAA21C,EAAAv6C,EACAJ,KAAAq0B,GAAA8vB,EAAA/jD,EACAJ,KAAAorC,EAAA5S,EAAAp4B,EACAJ,KAAAkrC,IAAAiZ,EAAAnkD,KAAAmrC,GAAAie,EAAAF,GAAA9oD,EACAJ,KAAAmrC,KAAA3S,EAAAx4B,KAAAmrC,GAAAwP,EAAAuO,GAAA9oD,EAEAJ,MASA6wC,EAAAhuC,UAAAyQ,SAAA,WASA,MAPAtT,MAAAS,EAAA,EACAT,KAAAgF,EAAA,EACAhF,KAAAq0B,EAAA,EACAr0B,KAAAorC,EAAA,EACAprC,KAAAkrC,GAAA,EACAlrC,KAAAmrC,GAAA,EAEAnrC,MAQA6wC,EAAAhuC,UAAA21C,MAAA,WAEA,GAAAlC,GAAA,GAAAzF,EAQA,OAPAyF,GAAA71C,EAAAT,KAAAS,EACA61C,EAAAtxC,EAAAhF,KAAAgF,EACAsxC,EAAAjiB,EAAAr0B,KAAAq0B,EACAiiB,EAAAlL,EAAAprC,KAAAorC,EACAkL,EAAApL,GAAAlrC,KAAAkrC,GACAoL,EAAAnL,GAAAnrC,KAAAmrC,GAEAmL,GAQAzF,EAAAhuC,UAAA6mD,KAAA,SAAApT,GASA,MAPAA,GAAA71C,EAAAT,KAAAS,EACA61C,EAAAtxC,EAAAhF,KAAAgF,EACAsxC,EAAAjiB,EAAAr0B,KAAAq0B,EACAiiB,EAAAlL,EAAAprC,KAAAorC,EACAkL,EAAApL,GAAAlrC,KAAAkrC,GACAoL,EAAAnL,GAAAnrC,KAAAmrC,GAEAmL,GASAzF,EAAA2C,SAAA,GAAA3C,GAQAA,EAAA8Y,YAAA,GAAA9Y,KAEA+Y,UAAA,KAAAC,IAAA,SAAAnpD,EAAAjB,EAAAD,GAUA,QAAAw1C,GAAArgC,EAAAmD,GAMA9X,KAAA2U,EAAAA,GAAA,EAMA3U,KAAA8X,EAAAA,GAAA,EAGAk9B,EAAAnyC,UAAAmH,YAAAgrC,EACAv1C,EAAAD,QAAAw1C,EAOAA,EAAAnyC,UAAA21C,MAAA,WAEA,MAAA,IAAAxD,GAAAh1C,KAAA2U,EAAA3U,KAAA8X,IAQAk9B,EAAAnyC,UAAA6mD,KAAA,SAAA/kC,GACA3kB,KAAAkQ,IAAAyU,EAAAhQ,EAAAgQ,EAAA7M,IASAk9B,EAAAnyC,UAAA4wB,OAAA,SAAA9O,GACA,MAAAA,GAAAhQ,IAAA3U,KAAA2U,GAAAgQ,EAAA7M,IAAA9X,KAAA8X,GAUAk9B,EAAAnyC,UAAAqN,IAAA,SAAAyE,EAAAmD,GAEA9X,KAAA2U,EAAAA,GAAA,EACA3U,KAAA8X,EAAAA,IAAA,IAAAA,EAAA9X,KAAA2U,EAAA,SAGAm1C,IAAA,SAAAppD,EAAAjB,EAAAD,GAMAC,EAAAD,SAMAw1C,MAAAt0C,EAAA,WACAmwC,OAAAnwC,EAAA,YAEAu8C,OAAAv8C,EAAA,mBACAy8C,QAAAz8C,EAAA,oBACAq4C,QAAAr4C,EAAA,oBACAqyC,UAAAryC,EAAA,sBACAq8C,iBAAAr8C,EAAA,gCAGAqpD,WAAA,GAAAH,UAAA,GAAAI,kBAAA,GAAAC,mBAAA,GAAAC,mBAAA,GAAAC,qBAAA,GAAAC,4BAAA,KAAAC,IAAA,SAAA3pD,EAAAjB,EAAAD,GAaA,QAAAy9C,GAAAtoC,EAAAmD,EAAA4iC,GAMA16C,KAAA2U,EAAAA,GAAA,EAMA3U,KAAA8X,EAAAA,GAAA,EAMA9X,KAAA06C,OAAAA,GAAA,EAOA16C,KAAAqC,KAAAyqC,EAAAkD,OAAAG,KArCA,GAAA4C,GAAAryC,EAAA,eACAosC,EAAApsC,EAAA,cAuCAu8C,GAAAp6C,UAAAmH,YAAAizC,EACAx9C,EAAAD,QAAAy9C,EAOAA,EAAAp6C,UAAA21C,MAAA,WAEA,MAAA,IAAAyE,GAAAj9C,KAAA2U,EAAA3U,KAAA8X,EAAA9X,KAAA06C,SAUAuC,EAAAp6C,UAAA47C,SAAA,SAAA9pC,EAAAmD,GAEA,GAAA9X,KAAA06C,QAAA,EAEA,OAAA,CAGA,IAAA4P,GAAAtqD,KAAA2U,EAAAA,EACA41C,EAAAvqD,KAAA8X,EAAAA,EACA0yC,EAAAxqD,KAAA06C,OAAA16C,KAAA06C,MAKA,OAHA4P,IAAAA,EACAC,GAAAA,EAEAC,GAAAF,EAAAC,GAQAtN,EAAAp6C,UAAAwoC,UAAA,WAEA,MAAA,IAAA0H,GAAA/yC,KAAA2U,EAAA3U,KAAA06C,OAAA16C,KAAA8X,EAAA9X,KAAA06C,OAAA,EAAA16C,KAAA06C,OAAA,EAAA16C,KAAA06C,WAGA2G,cAAA,GAAAoJ,cAAA,KAAAC,IAAA,SAAAhqD,EAAAjB,EAAAD,GAcA,QAAA29C,GAAAxoC,EAAAmD,EAAAlU,EAAAC,GAMA7D,KAAA2U,EAAAA,GAAA,EAMA3U,KAAA8X,EAAAA,GAAA,EAMA9X,KAAA4D,MAAAA,GAAA,EAMA5D,KAAA6D,OAAAA,GAAA,EAOA7D,KAAAqC,KAAAyqC,EAAAkD,OAAAI,KA5CA,GAAA2C,GAAAryC,EAAA,eACAosC,EAAApsC,EAAA,cA8CAy8C,GAAAt6C,UAAAmH,YAAAmzC,EACA19C,EAAAD,QAAA29C,EAOAA,EAAAt6C,UAAA21C,MAAA,WAEA,MAAA,IAAA2E,GAAAn9C,KAAA2U,EAAA3U,KAAA8X,EAAA9X,KAAA4D,MAAA5D,KAAA6D,SAUAs5C,EAAAt6C,UAAA47C,SAAA,SAAA9pC,EAAAmD,GAEA,GAAA9X,KAAA4D,OAAA,GAAA5D,KAAA6D,QAAA,EAEA,OAAA,CAIA,IAAA8mD,IAAAh2C,EAAA3U,KAAA2U,GAAA3U,KAAA4D,MACAgnD,GAAA9yC,EAAA9X,KAAA8X,GAAA9X,KAAA6D,MAKA,OAHA8mD,IAAAA,EACAC,GAAAA,EAEA,GAAAD,EAAAC,GAQAzN,EAAAt6C,UAAAwoC,UAAA,WAEA,MAAA,IAAA0H,GAAA/yC,KAAA2U,EAAA3U,KAAA4D,MAAA5D,KAAA8X,EAAA9X,KAAA6D,OAAA7D,KAAA4D,MAAA5D,KAAA6D,WAGAw9C,cAAA,GAAAoJ,cAAA,KAAAI,IAAA,SAAAnqD,EAAAjB,EAAAD,GAaA,QAAAu5C,GAAA+R,GAIA,GAAAhS,GAAAgS,CAGA,KAAAh/C,MAAA4O,QAAAo+B,GACA,CAGAA,EAAA,GAAAhtC,OAAA+H,UAAA7S,OAEA,KAAA,GAAAP,GAAA,EAAAA,EAAAq4C,EAAA93C,SAAAP,EACAq4C,EAAAr4C,GAAAoT,UAAApT,GAKA,GAAAq4C,EAAA,YAAA9D,GACA,CAEA,IAAA,GADArwB,MACAhkB,EAAA,EAAAoqD,EAAAjS,EAAA93C,OAAA+pD,EAAApqD,EAAAA,IAEAgkB,EAAAha,KAAAmuC,EAAAn4C,GAAAgU,EAAAmkC,EAAAn4C,GAAAmX,EAGAghC,GAAAn0B,EAGA3kB,KAAAg5C,QAAA,EAOAh5C,KAAA84C,OAAAA,EAOA94C,KAAAqC,KAAAyqC,EAAAkD,OAAAC,KAxDA,GAAA+E,GAAAt0C,EAAA,YACAosC,EAAApsC,EAAA,cA0DAq4C,GAAAl2C,UAAAmH,YAAA+uC,EACAt5C,EAAAD,QAAAu5C,EAOAA,EAAAl2C,UAAA21C,MAAA,WAEA,MAAA,IAAAO,GAAA/4C,KAAA84C,OAAAt6B,UAUAu6B,EAAAl2C,UAAA47C,SAAA,SAAA9pC,EAAAmD,GAQA,IAAA,GANAyf,IAAA,EAIAv2B,EAAAhB,KAAA84C,OAAA93C,OAAA,EAEAL,EAAA,EAAA+oB,EAAA1oB,EAAA,EAAAA,EAAAL,EAAA+oB,EAAA/oB,IACA,CACA,GAAAqqD,GAAAhrD,KAAA84C,OAAA,EAAAn4C,GAAAsqD,EAAAjrD,KAAA84C,OAAA,EAAAn4C,EAAA,GACAuqD,EAAAlrD,KAAA84C,OAAA,EAAApvB,GAAAyhC,EAAAnrD,KAAA84C,OAAA,EAAApvB,EAAA,GACA0hC,EAAAH,EAAAnzC,GAAAqzC,EAAArzC,IAAAozC,EAAAF,IAAAlzC,EAAAmzC,IAAAE,EAAAF,GAAAD,EAAAr2C,CAEAy2C,KAEA7zB,GAAAA,GAIA,MAAAA,MAGA8pB,cAAA,GAAAgK,WAAA,KAAAC,IAAA,SAAA5qD,EAAAjB,EAAAD,GAaA,QAAAuzC,GAAAp+B,EAAAmD,EAAAlU,EAAAC,GAMA7D,KAAA2U,EAAAA,GAAA,EAMA3U,KAAA8X,EAAAA,GAAA,EAMA9X,KAAA4D,MAAAA,GAAA,EAMA5D,KAAA6D,OAAAA,GAAA,EAOA7D,KAAAqC,KAAAyqC,EAAAkD,OAAAE,KA3CA,GAAApD,GAAApsC,EAAA,cA8CAqyC,GAAAlwC,UAAAmH,YAAA+oC,EACAtzC,EAAAD,QAAAuzC,EAQAA,EAAAC,MAAA,GAAAD,GAAA,EAAA,EAAA,EAAA,GAQAA,EAAAlwC,UAAA21C,MAAA,WAEA,MAAA,IAAAzF,GAAA/yC,KAAA2U,EAAA3U,KAAA8X,EAAA9X,KAAA4D,MAAA5D,KAAA6D,SAUAkvC,EAAAlwC,UAAA47C,SAAA,SAAA9pC,EAAAmD,GAEA,MAAA9X,MAAA4D,OAAA,GAAA5D,KAAA6D,QAAA,GAEA,EAGA8Q,GAAA3U,KAAA2U,GAAAA,EAAA3U,KAAA2U,EAAA3U,KAAA4D,OAEAkU,GAAA9X,KAAA8X,GAAAA,EAAA9X,KAAA8X,EAAA9X,KAAA6D,QAEA,GAIA,KAGAw9C,cAAA,KAAAkK,IAAA,SAAA7qD,EAAAjB,EAAAD,GAcA,QAAAu9C,GAAApoC,EAAAmD,EAAAlU,EAAAC,EAAA62C,GAMA16C,KAAA2U,EAAAA,GAAA,EAMA3U,KAAA8X,EAAAA,GAAA,EAMA9X,KAAA4D,MAAAA,GAAA,EAMA5D,KAAA6D,OAAAA,GAAA,EAMA7D,KAAA06C,OAAAA,GAAA,GAOA16C,KAAAqC,KAAAyqC,EAAAkD,OAAAK,KAlDA,GAAAvD,GAAApsC,EAAA,cAqDAq8C,GAAAl6C,UAAAmH,YAAA+yC,EACAt9C,EAAAD,QAAAu9C,EAOAA,EAAAl6C,UAAA21C,MAAA,WAEA,MAAA,IAAAuE,GAAA/8C,KAAA2U,EAAA3U,KAAA8X,EAAA9X,KAAA4D,MAAA5D,KAAA6D,OAAA7D,KAAA06C,SAUAqC,EAAAl6C,UAAA47C,SAAA,SAAA9pC,EAAAmD,GAEA,MAAA9X,MAAA4D,OAAA,GAAA5D,KAAA6D,QAAA,GAEA,EAGA8Q,GAAA3U,KAAA2U,GAAAA,GAAA3U,KAAA2U,EAAA3U,KAAA4D,OAEAkU,GAAA9X,KAAA8X,GAAAA,GAAA9X,KAAA8X,EAAA9X,KAAA6D,QAEA,GAIA,KAGAw9C,cAAA,KAAAmK,IAAA,SAAA9qD,EAAAjB,EAAAD,GAoCA,QAAAqmD,GAAA4F,EAAAC,EAAAC,GAEAlb,EAAA1vC,KAAAf,MAEA2rD,EAAAA,GAAA,KACAF,EAAAA,GAAA,IAKA,IAAAG,GAAA,KACAD,GAAAC,IACAD,EAAAC,GAGAD,EAAAF,IACAE,EAAAF,GASAzrD,KAAA6rD,cAAA,GAAA,GAAA,GAAA,GAAA,GAMA7rD,KAAA8rD,SAAAL,EAMAzrD,KAAA+rD,WAAAJ,EAMA3rD,KAAAgsD,SAAA,KAMAhsD,KAAAisD,gBAAA,EAMAjsD,KAAAksD,qBAAA,EASAlsD,KAAA23C,UAAA7K,EAAAW,YAAAC,OAQA1tC,KAAA+vC,aAAA,EAEA/vC,KAAAmsD,cAAAT,GA7GA,GAAAjb,GAAA/vC,EAAA,wBACAosC,EAAApsC,EAAA,WA+GAmlD,GAAAhjD,UAAA0M,OAAA/L,OAAAitC,EAAA5tC,WACAgjD,EAAAhjD,UAAAmH,YAAA67C,EACApmD,EAAAD,QAAAqmD,EAOAA,EAAAhjD,UAAAspD,cAAA,SAAAT,GAEAA,IACA1rD,KAAA6rD,YAAA,GAAA,SAAAH,KAAAA,EAAA3a,MAAA/wC,KAAA6rD,YAAA,GACA7rD,KAAA6rD,YAAA,GAAA,YAAAH,KAAAA,EAAA5iB,SAAA9oC,KAAA6rD,YAAA,GACA7rD,KAAA6rD,YAAA,GAAA,YAAAH,KAAAA,EAAA5V,SAAA91C,KAAA6rD,YAAA,GACA7rD,KAAA6rD,YAAA,GAAA,OAAAH,KAAAA,EAAAU,IAAApsD,KAAA6rD,YAAA,GACA7rD,KAAA6rD,YAAA,GAAA,SAAAH,KAAAA,EAAAjX,MAAAz0C,KAAA6rD,YAAA,KASAhG,EAAAhjD,UAAA6vC,gBAAA,WAIA1yC,KAAA2yC,gCAUAkT,EAAAhjD,UAAA4wC,YAAA,SAAA7K,GAEA5oC,KAAAiqC,WAAAjqC,KAAA0zC,YAAA,IAAA1zC,KAAAopC,SAAApoC,QAAAhB,KAAA2zC,aAKA/K,EAAA+U,kBAAA/U,EAAAmD,QAAAsgB,UACAzjB,EAAAmD,QAAAsgB,SAAA5Z,OAAAzyC,QAQA6lD,EAAAhjD,UAAAsuC,iBAAA,SAAAmb,GAEA,GAAAC,GAAA/2C,KAAAyT,MAAAqjC,EAAAtsD,KAAA+rD,WACAQ,GAAAvsD,KAAAisD,kBACAjsD,KAAAisD,gBAAAM,IAUA1G,EAAAhjD,UAAA2xC,aAAA,SAAA5L,GAEA,GAAA5oC,KAAAiqC,WAAAjqC,KAAA0zC,YAAA,IAAA1zC,KAAAopC,SAAApoC,QAAAhB,KAAA2zC,WAAA,CAKA,GAAA5b,GAAA6Q,EAAA7Q,QACAtb,EAAAzc,KAAAirC,eACAuhB,GAAA,EAEAC,EAAA,EACAC,EAAA,EAEAC,EAAA,EACAC,EAAA,EAEA/O,EAAAjV,EAAAkV,WAAA99C,KAAA23C,UACAkG,KAAA9lB,EAAAgmB,2BAEAhmB,EAAAgmB,yBAAAF,GAGA9lB,EAAA80B,YAAA7sD,KAAA0zC,WAEA1zC,KAAA2yC,8BAEA,KAAA,GAAAhyC,GAAA,EAAAA,EAAAX,KAAAopC,SAAApoC,SAAAL,EACA,CACA,GAAAgqC,GAAA3qC,KAAAopC,SAAAzoC,EAEA,IAAAgqC,EAAAV,QAAA,CAKA,GAAA6iB,GAAAniB,EAAA1mC,QAAA6oD,KAIA,IAFA/0B,EAAA80B,YAAA7sD,KAAA0zC,WAAA/I,EAAA8J,MAEA9J,EAAAmL,UAAA,EAAAtgC,KAAAy3B,MAAA,EAGAuf,IAEAz0B,EAAA8e,aACAp6B,EAAAhc,EACAgc,EAAAzX,EACAyX,EAAA4X,EACA5X,EAAA2uB,EACA3uB,EAAAyuB,GACAzuB,EAAA0uB,IAGAqhB,GAAA,GAGAC,EAAA9hB,EAAAoiB,OAAA,IAAAD,EAAAlpD,MAAA+mC,EAAAoG,MAAAp8B,GAAAg2B,EAAA7B,SAAAn0B,EAAA,GACA+3C,EAAA/hB,EAAAoiB,OAAA,IAAAD,EAAAjpD,OAAA8mC,EAAAoG,MAAAj5B,GAAA6yB,EAAA7B,SAAAhxB,EAAA,GAEA60C,EAAAG,EAAAlpD,MAAA+mC,EAAAoG,MAAAp8B,EACAi4C,EAAAE,EAAAjpD,OAAA8mC,EAAAoG,MAAAj5B,MAIA,CACA00C,IAEAA,GAAA,GAGA7hB,EAAAgI,8BAEA,IAAAqa,GAAAriB,EAAAM,cAEArC,GAAAmH,YAEAhY,EAAA8e,aACAmW,EAAAvsD,EACAusD,EAAAhoD,EACAgoD,EAAA34B,EACA24B,EAAA5hB,EACA,EAAA4hB,EAAA9hB,GACA,EAAA8hB,EAAA7hB,IAKApT,EAAA8e,aACAmW,EAAAvsD,EACAusD,EAAAhoD,EACAgoD,EAAA34B,EACA24B,EAAA5hB,EACA4hB,EAAA9hB,GACA8hB,EAAA7hB,IAIAshB,EAAA9hB,EAAAoiB,OAAA,GAAAD,EAAAlpD,MAAA,GACA8oD,EAAA/hB,EAAAoiB,OAAA,GAAAD,EAAAjpD,OAAA,GAEA8oD,EAAAG,EAAAlpD,MACAgpD,EAAAE,EAAAjpD,OAGAk0B,EAAAk1B,UACAtiB,EAAA1mC,QAAAu5C,YAAAh2C,OACAslD,EAAAn4C,EACAm4C,EAAAh1C,EACAg1C,EAAAlpD,MACAkpD,EAAAjpD,OACA4oD,EACAC,EACAC,EACAC,OAUA/G,EAAAhjD,UAAA0C,QAAA,WAGA,GAFAkrC,EAAA5tC,UAAA0C,QAAAqO,MAAA5T,KAAA6T,WAEA7T,KAAAgsD,SACA,IAAA,GAAArrD,GAAA,EAAAA,EAAAX,KAAAgsD,SAAAhrD,SAAAL,EACAX,KAAAgsD,SAAArrD,GAAA4E,SAIAvF,MAAA6rD,YAAA,KACA7rD,KAAAgsD,SAAA,QAGA9U,WAAA,GAAA0H,uBAAA,KAAAsO,IAAA,SAAAxsD,EAAAjB,EAAAD,GAoBA,QAAA2tD,GAAA/qD,EAAAspD,EAAA0B,EAAAriD,GAOA/K,KAAAoC,GAAAA,EAOApC,KAAAqtD,SAAA,EAOArtD,KAAAstD,aAAA,EAAAttD,KAAAqtD,SAOArtD,KAAA+K,KAAAA,EAOA/K,KAAAutD,qBAOAvtD,KAAAwtD,mBAEA,KAAA,GAAA7sD,GAAA,EAAAA,EAAA+qD,EAAA1qD,OAAAL,IACA,CACA,GAAA8sD,GAAA/B,EAAA/qD,EAEAysD,GAAAzsD,GAEAX,KAAAutD,kBAAA5iD,KAAA8iD,GAIAztD,KAAAwtD,iBAAA7iD,KAAA8iD,GAIAztD,KAAA0tD,aAAA,EACA1tD,KAAA2tD,aAAA,KACA3tD,KAAA4tD,WAAA,KAEA5tD,KAAA6tD,cAAA,EACA7tD,KAAA8tD,cAAA,KACA9tD,KAAA+tD,YAAA,KAEA/tD,KAAAguD,cAIAb,EAAAtqD,UAAAmH,YAAAmjD,EACA1tD,EAAAD,QAAA2tD,EAOAA,EAAAtqD,UAAAmrD,YAAA,WAEA,GACArtD,GACA8sD,EAFArrD,EAAApC,KAAAoC,GAIA6rD,EAAA,CAGA,KAFAjuD,KAAA6tD,cAAA,EAEAltD,EAAA,EAAAA,EAAAX,KAAAutD,kBAAAvsD,OAAAL,IAEA8sD,EAAAztD,KAAAutD,kBAAA5sD,GAEA8sD,EAAA3qD,OAAAmrD,EACAA,GAAAR,EAAA1iD,KACA/K,KAAA6tD,eAAAJ,EAAA1iD,IAGA/K,MAAA+tD,YAAA,GAAAlmD,cAAA7H,KAAA+K,KAAA/K,KAAA6tD,cAAA,GACA7tD,KAAA8tD,cAAA1rD,EAAAK,eAEAL,EAAAgB,WAAAhB,EAAAM,aAAA1C,KAAA8tD,eACA1rD,EAAAe,WAAAf,EAAAM,aAAA1C,KAAA+tD,YAAA3rD,EAAA8rD,aAIA,IAAAC,GAAA,CAGA,KAFAnuD,KAAA0tD,aAAA,EAEA/sD,EAAA,EAAAA,EAAAX,KAAAwtD,iBAAAxsD,OAAAL,IAEA8sD,EAAAztD,KAAAwtD,iBAAA7sD,GAEA8sD,EAAA3qD,OAAAqrD,EACAA,GAAAV,EAAA1iD,KACA/K,KAAA0tD,cAAAD,EAAA1iD,IAGA/K,MAAA4tD,WAAA,GAAA/lD,cAAA7H,KAAA+K,KAAA/K,KAAA0tD,aAAA,GACA1tD,KAAA2tD,aAAAvrD,EAAAK,eAEAL,EAAAgB,WAAAhB,EAAAM,aAAA1C,KAAA2tD,cACAvrD,EAAAe,WAAAf,EAAAM,aAAA1C,KAAA4tD,WAAAxrD,EAAA8rD,eAOAf,EAAAtqD,UAAAurD,cAAA,SAAAhlB,EAAA7zB,EAAA84C,GAIA,IAAA,GAFAjsD,GAAApC,KAAAoC,GAEAzB,EAAA,EAAAA,EAAAX,KAAAutD,kBAAAvsD,OAAAL,IACA,CACA,GAAA8sD,GAAAztD,KAAAutD,kBAAA5sD,EACA8sD,GAAAa,eAAAllB,EAAA7zB,EAAA84C,EAAAruD,KAAA+tD,YAAA/tD,KAAA6tD,cAAAJ,EAAA3qD,QAGAV,EAAAgB,WAAAhB,EAAAM,aAAA1C,KAAA8tD,eACA1rD,EAAAc,cAAAd,EAAAM,aAAA,EAAA1C,KAAA+tD,cAOAZ,EAAAtqD,UAAA0rD,aAAA,SAAAnlB,EAAA7zB,EAAA84C,GAIA,IAAA,GAFAjsD,GAAApC,KAAAoC,GAEAzB,EAAA,EAAAA,EAAAX,KAAAwtD,iBAAAxsD,OAAAL,IACA,CACA,GAAA8sD,GAAAztD,KAAAwtD,iBAAA7sD,EACA8sD,GAAAa,eAAAllB,EAAA7zB,EAAA84C,EAAAruD,KAAA4tD,WAAA5tD,KAAA0tD,aAAAD,EAAA3qD,QAGAV,EAAAgB,WAAAhB,EAAAM,aAAA1C,KAAA2tD,cACAvrD,EAAAc,cAAAd,EAAAM,aAAA,EAAA1C,KAAA4tD,aAOAT,EAAAtqD,UAAAG,KAAA,WAEA,GACArC,GAAA8sD,EADArrD,EAAApC,KAAAoC,EAKA,KAFAA,EAAAgB,WAAAhB,EAAAM,aAAA1C,KAAA8tD,eAEAntD,EAAA,EAAAA,EAAAX,KAAAutD,kBAAAvsD,OAAAL,IAEA8sD,EAAAztD,KAAAutD,kBAAA5sD,GACAyB,EAAAsM,oBAAA++C,EAAArjD,UAAAqjD,EAAA1iD,KAAA3I,EAAA4F,OAAA,EAAA,EAAAhI,KAAA6tD,cAAA,EAAAJ,EAAA3qD,OAKA,KAFAV,EAAAgB,WAAAhB,EAAAM,aAAA1C,KAAA2tD,cAEAhtD,EAAA,EAAAA,EAAAX,KAAAwtD,iBAAAxsD,OAAAL,IAEA8sD,EAAAztD,KAAAwtD,iBAAA7sD,GACAyB,EAAAsM,oBAAA++C,EAAArjD,UAAAqjD,EAAA1iD,KAAA3I,EAAA4F,OAAA,EAAA,EAAAhI,KAAA0tD,aAAA,EAAAD,EAAA3qD,SAQAqqD,EAAAtqD,UAAA0C,QAAA,WAEAvF,KAAAutD,kBAAA,KACAvtD,KAAA+tD,YAAA,KACA/tD,KAAAoC,GAAAkgD,aAAAtiD,KAAA8tD,eAEA9tD,KAAAwtD,iBAAA,KACAxtD,KAAA4tD,WAAA,KACA5tD,KAAAoC,GAAAkgD,aAAAtiD,KAAA2tD,oBAGAa,IAAA,SAAA9tD,EAAAjB,EAAAD,GAyBA,QAAAumD,GAAAnd,GAEA0W,EAAAv+C,KAAAf,KAAA4oC,EAMA,IAAA6lB,GAAA,KAOAzuD,MAAAghD,QAAA,GAAAqB,aAAAoM,EAEA,KAAA,GAAA9tD,GAAA,EAAA+oB,EAAA,EAAA+kC,EAAA9tD,EAAAA,GAAA,EAAA+oB,GAAA,EAEA1pB,KAAAghD,QAAArgD,EAAA,GAAA+oB,EAAA,EACA1pB,KAAAghD,QAAArgD,EAAA,GAAA+oB,EAAA,EACA1pB,KAAAghD,QAAArgD,EAAA,GAAA+oB,EAAA,EACA1pB,KAAAghD,QAAArgD,EAAA,GAAA+oB,EAAA,EACA1pB,KAAAghD,QAAArgD,EAAA,GAAA+oB,EAAA,EACA1pB,KAAAghD,QAAArgD,EAAA,GAAA+oB,EAAA,CAQA1pB,MAAAqN,OAAA,KAEArN,KAAA8J,YAAA,KAEA9J,KAAA0rD,WAAA,KAEA1rD,KAAA0uD,WAAA,GAAAhe,GAAAG,OA9DA,GAAAyO,GAAA5+C,EAAA,8CACA0rC,EAAA1rC,EAAA,uCACAiuD,EAAAjuD,EAAA,oBACAysD,EAAAzsD,EAAA,oBACAgwC,EAAAhwC,EAAA,aA6DAqlD,GAAAljD,UAAA0M,OAAA/L,OAAA87C,EAAAz8C,WACAkjD,EAAAljD,UAAAmH,YAAA+7C,EACAtmD,EAAAD,QAAAumD,EAEA3Z,EAAAC,eAAA,WAAA0Z,GAOAA,EAAAljD,UAAAs9C,gBAAA,WAEA,GAAA/9C,GAAApC,KAAA4oC,SAAAxmC,EAGApC,MAAAqN,OAAA,GAAAshD,GAAA3uD,KAAA4oC,SAAAgmB,eAEA5uD,KAAA8J,YAAA1H,EAAAK,eAKAL,EAAAgB,WAAAhB,EAAAmB,qBAAAvD,KAAA8J,aACA1H,EAAAe,WAAAf,EAAAmB,qBAAAvD,KAAAghD,QAAA5+C,EAAAO,aAEA3C,KAAA0rD,aAGAthD,UAAApK,KAAAqN,OAAA5G,WAAAq6C,gBACA/1C,KAAA,EACAujD,eAAAtuD,KAAA6uD,eACA/rD,OAAA,IAIAsH,UAAApK,KAAAqN,OAAA5G,WAAAqoD,eACA/jD,KAAA,EACAujD,eAAAtuD,KAAA+uD,eACAjsD,OAAA,IAIAsH,UAAApK,KAAAqN,OAAA5G,WAAAuoD,UACAjkD,KAAA,EACAujD,eAAAtuD,KAAAivD,eACAnsD,OAAA,IAIAsH,UAAApK,KAAAqN,OAAA5G,WAAAyoD,cACAnkD,KAAA,EACAujD,eAAAtuD,KAAAmvD,UACArsD,OAAA,IAIAsH,UAAApK,KAAAqN,OAAA5G,WAAAs6C,OACAh2C,KAAA,EACAujD,eAAAtuD,KAAAovD,YACAtsD,OAAA,KASAijD,EAAAljD,UAAA2H,MAAA,WAEA,GAAApI,GAAApC,KAAA4oC,SAAAxmC,EAGAA,GAAA+F,cAAA/F,EAAAgG,UAIAhG,EAAAgB,WAAAhB,EAAAmB,qBAAAvD,KAAA8J,YAEA,IAAAuD,GAAArN,KAAAqN,MAEArN,MAAA4oC,SAAAgmB,cAAAS,UAAAhiD,IASA04C,EAAAljD,UAAA4vC,OAAA,SAAAmE,GAEA,GAAAxN,GAAAwN,EAAAxN,SACAkmB,EAAAlmB,EAAApoC,OACAyqD,EAAA7U,EAAAkV,SACAH,EAAA/U,EAAAmV,UAEA,IAAA,IAAAuD,EAAA,CAIAA,EAAA7D,IAEA6D,EAAA7D,GAGA7U,EAAAoV,WAEApV,EAAAoV,SAAAhsD,KAAAuvD,gBAAA3Y,IAIA52C,KAAA4oC,SAAA2X,iBAAAC,aAAA5J,EAAAe,UAEA,IAAAv1C,GAAApC,KAAA4oC,SAAAxmC,GAEAmoB,EAAAqsB,EAAA3L,eAAAye,KAAA1pD,KAAA0uD,WACAnkC,GAAAi/B,QAAAxpD,KAAA4oC,SAAA4mB,oBAAAC,kBACArtD,EAAAstD,iBAAA1vD,KAAAqN,OAAA1G,SAAA8oD,iBAAAE,WAAA,EAAAplC,EAAAq2B,SAAA,IACAx+C,EAAAwtD,UAAA5vD,KAAAqN,OAAA1G,SAAAkpD,OAAAF,UAAA/Y,EAAAlD,WAIA,IAAA8J,GAAApU,EAAA,GAAA0mB,SAAAtS,WAEA,IAAAA,EAAAuS,YAAA3tD,EAAAkJ,IAeAlJ,EAAAiG,YAAAjG,EAAAkC,WAAAk5C,EAAAuS,YAAA3tD,EAAAkJ,SAdA,CAEA,IAAAtL,KAAA4oC,SAAAonB,cAAAxS,GAEA,MAGA5G,GAAAiV,YAAA,IAAAjV,EAAAiV,YAAA,KAEAjV,EAAAqV,gBAAA,GASA,IAAA,GAAAtrD,GAAA,EAAA+oB,EAAA,EAAA4lC,EAAA3uD,EAAAA,GAAAgrD,EAAAjiC,GAAA,EACA,CACA,GAAA2kC,GAAAiB,EAAA3uD,CACA0tD,GAAA1C,IAEA0C,EAAA1C,EAGA,IAAAnpD,GAAAo0C,EAAAoV,SAAAtiC,EAGAlnB,GAAA4rD,cAAAhlB,EAAAzoC,EAAA0tD,GAGAzX,EAAAqV,kBAAAviC,IAEAlnB,EAAA+rD,aAAAnlB,EAAAzoC,EAAA0tD,GACAzX,EAAAqV,gBAAAviC,EAAA,GAIAlnB,EAAAQ,KAAAhD,KAAAqN,QAGAjL,EAAA4I,aAAA5I,EAAA4sC,UAAA,EAAAqf,EAAAjsD,EAAA6I,eAAA,GACAjL,KAAA4oC,SAAAqY,eASA8E,EAAAljD,UAAA0sD,gBAAA,SAAA3Y,GAEA,GAKAj2C,GALAyB,EAAApC,KAAA4oC,SAAAxmC,GACA6tD,KACAllD,EAAA6rC,EAAAkV,SACAH,EAAA/U,EAAAmV,WACAqB,EAAAxW,EAAAiV,WAGA,KAAAlrD,EAAA,EAAAoK,EAAApK,EAAAA,GAAAgrD,EAEAsE,EAAAtlD,KAAA,GAAAwiD,GAAA/qD,EAAApC,KAAA0rD,WAAA0B,EAAAzB,GAGA,OAAAsE,IAaAlK,EAAAljD,UAAAgsD,eAAA,SAAAzlB,EAAA7zB,EAAA84C,EAAArgD,EAAAzD,EAAAzH,GASA,IAAA,GAPAotD,GACAjsD,EACAmhB,EACAqlB,EACAC,EACAsT,EAAAC,EAAAC,EAAAC,EAEAx9C,EAAA,EAAA0tD,EAAA1tD,EAAAA,IAEAuvD,EAAA9mB,EAAA7zB,EAAA5U,GACAsD,EAAAisD,EAAAJ,SACArlB,EAAAylB,EAAAnf,MAAAp8B,EACA+1B,EAAAwlB,EAAAnf,MAAAj5B,EAEA7T,EAAAmhB,MAGAA,EAAAnhB,EAAAmhB,KAEA64B,EAAA74B,EAAAzQ,EAAAu7C,EAAAnD,OAAAp4C,EAAAyQ,EAAAxhB,MACAo6C,EAAAC,EAAAh6C,EAAAksD,KAAAvsD,MAEAu6C,EAAA/4B,EAAAtN,EAAAo4C,EAAAnD,OAAAj1C,EAAAsN,EAAAvhB,OACAq6C,EAAAC,EAAAl6C,EAAAksD,KAAAtsD,SAIAm6C,EAAA/5C,EAAAmsD,OAAA,OAAA,EAAAF,EAAAnD,OAAAp4C,GACAspC,EAAAh6C,EAAAmsD,OAAA,OAAAF,EAAAnD,OAAAp4C,EAEAupC,EAAAj6C,EAAAmsD,OAAAvsD,QAAA,EAAAqsD,EAAAnD,OAAAj1C,GACAqmC,EAAAl6C,EAAAmsD,OAAAvsD,QAAAqsD,EAAAnD,OAAAj1C,GAGA9J,EAAAlL,GAAAm7C,EAAAxT,EACAz8B,EAAAlL,EAAA,GAAAq7C,EAAAzT,EAEA18B,EAAAlL,EAAAyH,GAAAyzC,EAAAvT,EACAz8B,EAAAlL,EAAAyH,EAAA,GAAA4zC,EAAAzT,EAEA18B,EAAAlL,EAAA,EAAAyH,GAAAyzC,EAAAvT,EACAz8B,EAAAlL,EAAA,EAAAyH,EAAA,GAAA2zC,EAAAxT,EAEA18B,EAAAlL,EAAA,EAAAyH,GAAA0zC,EAAAxT,EACAz8B,EAAAlL,EAAA,EAAAyH,EAAA,GAAA2zC,EAAAxT,EAEA5nC,GAAA,EAAAyH,GAcAw7C,EAAAljD,UAAAksD,eAAA,SAAA3lB,EAAA7zB,EAAA84C,EAAArgD,EAAAzD,EAAAzH,GAEA,IAAA,GAAAnC,GAAA,EAAA0tD,EAAA1tD,EAAAA,IACA,CACA,GAAA0vD,GAAAjnB,EAAA7zB,EAAA5U,GAAAmoC,QAEA96B,GAAAlL,GAAAutD,EAAA17C,EACA3G,EAAAlL,EAAA,GAAAutD,EAAAv4C,EAEA9J,EAAAlL,EAAAyH,GAAA8lD,EAAA17C,EACA3G,EAAAlL,EAAAyH,EAAA,GAAA8lD,EAAAv4C,EAEA9J,EAAAlL,EAAA,EAAAyH,GAAA8lD,EAAA17C,EACA3G,EAAAlL,EAAA,EAAAyH,EAAA,GAAA8lD,EAAAv4C,EAEA9J,EAAAlL,EAAA,EAAAyH,GAAA8lD,EAAA17C,EACA3G,EAAAlL,EAAA,EAAAyH,EAAA,GAAA8lD,EAAAv4C,EAEAhV,GAAA,EAAAyH,IAcAw7C,EAAAljD,UAAAosD,eAAA,SAAA7lB,EAAA7zB,EAAA84C,EAAArgD,EAAAzD,EAAAzH,GAEA,IAAA,GAAAnC,GAAA,EAAA0tD,EAAA1tD,EAAAA,IACA,CACA,GAAA2vD,GAAAlnB,EAAA7zB,EAAA5U,GAAAm1C,QAGA9nC,GAAAlL,GAAAwtD,EACAtiD,EAAAlL,EAAAyH,GAAA+lD,EACAtiD,EAAAlL,EAAA,EAAAyH,GAAA+lD,EACAtiD,EAAAlL,EAAA,EAAAyH,GAAA+lD,EAEAxtD,GAAA,EAAAyH,IAaAw7C,EAAAljD,UAAAssD,UAAA,SAAA/lB,EAAA7zB,EAAA84C,EAAArgD,EAAAzD,EAAAzH,GAEA,IAAA,GAAAnC,GAAA,EAAA0tD,EAAA1tD,EAAAA,IACA,CACA,GAAA4vD,GAAAnnB,EAAA7zB,EAAA5U,GAAAmvD,SAAAU,IAEAD,IAEAviD,EAAAlL,GAAAytD,EAAAE,GACAziD,EAAAlL,EAAA,GAAAytD,EAAAG,GAEA1iD,EAAAlL,EAAAyH,GAAAgmD,EAAAjW,GACAtsC,EAAAlL,EAAAyH,EAAA,GAAAgmD,EAAAhW,GAEAvsC,EAAAlL,EAAA,EAAAyH,GAAAgmD,EAAA/V,GACAxsC,EAAAlL,EAAA,EAAAyH,EAAA,GAAAgmD,EAAA9V,GAEAzsC,EAAAlL,EAAA,EAAAyH,GAAAgmD,EAAAnS,GACApwC,EAAAlL,EAAA,EAAAyH,EAAA,GAAAgmD,EAAAlS,GAEAv7C,GAAA,EAAAyH,IAKAyD,EAAAlL,GAAA,EACAkL,EAAAlL,EAAA,GAAA,EAEAkL,EAAAlL,EAAAyH,GAAA,EACAyD,EAAAlL,EAAAyH,EAAA,GAAA,EAEAyD,EAAAlL,EAAA,EAAAyH,GAAA,EACAyD,EAAAlL,EAAA,EAAAyH,EAAA,GAAA,EAEAyD,EAAAlL,EAAA,EAAAyH,GAAA,EACAyD,EAAAlL,EAAA,EAAAyH,EAAA,GAAA,EAEAzH,GAAA,EAAAyH,KAcAw7C,EAAAljD,UAAAusD,YAAA,SAAAhmB,EAAA7zB,EAAA84C,EAAArgD,EAAAzD,EAAAzH,GAEA,IAAA,GAAAnC,GAAA,EAAA0tD,EAAA1tD,EAAAA,IACA,CACA,GAAAgwD,GAAAvnB,EAAA7zB,EAAA5U,GAAA8zC,KAEAzmC,GAAAlL,GAAA6tD,EACA3iD,EAAAlL,EAAAyH,GAAAomD,EACA3iD,EAAAlL,EAAA,EAAAyH,GAAAomD,EACA3iD,EAAAlL,EAAA,EAAAyH,GAAAomD,EAEA7tD,GAAA,EAAAyH,IASAw7C,EAAAljD,UAAA0C,QAAA,WAEAvF,KAAA4oC,SAAAxmC,IACApC,KAAA4oC,SAAAxmC,GAAAkgD,aAAAtiD,KAAA8J,aAGAw1C,EAAAz8C,UAAA0C,QAAAqO,MAAA5T,KAAA6T,WAEA7T,KAAAqN,OAAA9H,UAEAvF,KAAAghD,QAAA,KACAhhD,KAAA0uD,WAAA,QAGApN,aAAA,GAAAC,sCAAA,GAAAC,6CAAA,GAAAoP,mBAAA,GAAAC,mBAAA,KAAAC,IAAA,SAAApwD,EAAAjB,EAAAD,GASA,QAAAmvD,GAAAC,GAEAmC,EAAAhwD,KAAAf,KACA4uD,GAGA,kCACA,gCACA,0BAEA,iCACA,yBACA,6BAEA,iCAEA,8BACA,wBAEA,mBACA,+BAEA,wFACA,wFACA,6BAEA,yEAEA,oCACA,sBACA,KACAh+C,KAAA,OAGA,wBAEA,8BACA,wBAEA,8BACA,wBAEA,mBACA,uEACA,iCACA,0BACA,KACAA,KAAA,OAGAi/C,QAAAxtD,KAAA,KAAA8M,MAAA,KAIA2/C,eAAA,EAEAE,UAAA,IAhEA,GAAA+B,GAAArwD,EAAA,8CAwEAiuD,GAAA9rD,UAAA0M,OAAA/L,OAAAutD,EAAAluD,WACA8rD,EAAA9rD,UAAAmH,YAAA2kD,EAEAlvD,EAAAD,QAAAmvD,IAEAqC,8CAAA,KAAAC,IAAA,SAAAvwD,EAAAjB,EAAAD;AA0BA,QAAA0xD,GAAAC,EAAAvtD,EAAAC,EAAAgH,GAOA,GALAmtB,EAAAj3B,KAAAf,MAEA4qC,EAAAwmB,SAAAD,GAGAtmD,EAEA,IAAA,GAAAlK,KAAAmsC,GAAAyC,uBAEA,mBAAA1kC,GAAAlK,KAEAkK,EAAAlK,GAAAmsC,EAAAyC,uBAAA5uC,QAMAkK,GAAAiiC,EAAAyC,sBAUAvvC,MAAAqC,KAAAyqC,EAAAO,cAAAC,QAQAttC,KAAA4D,MAAAA,GAAA,IAQA5D,KAAA6D,OAAAA,GAAA,IAOA7D,KAAA2pC,KAAA9+B,EAAA8+B,MAAA9J,SAAAC,cAAA,UAQA9/B,KAAAwvC,WAAA3kC,EAAA2kC,WAOAxvC,KAAA4vC,YAAA/kC,EAAA+kC,YAOA5vC,KAAA2vC,WAAA9kC,EAAA8kC,aAAA,EAOA3vC,KAAA89C,WAAA,KAOA99C,KAAA8vC,sBAAAjlC,EAAAilC,sBAWA9vC,KAAA6vC,kBAAAhlC,EAAAglC,kBAQA7vC,KAAA+vC,YAAAllC,EAAAklC,YAQA/vC,KAAAqxD,iBAAA,EAQArxD,KAAAsxD,sBAAA,EAAA,EAAA,EAAA,GAQAtxD,KAAAuxD,uBAAA,UAEAvxD,KAAAurC,gBAAA1gC,EAAA0gC,iBAAAvrC,KAAAqxD,iBAQArxD,KAAAy1C,0BAAAxK,eAAA,GAAAyF,GAAAG,OAAA6C,WAAA,EAAAtK,aAQAppC,KAAAsqC,oBAAAtqC,KAAAy1C,yBA9KA,GAAA7K,GAAAlqC,EAAA,YACAgwC,EAAAhwC,EAAA,WACAosC,EAAApsC,EAAA,YACAs3B,EAAAt3B,EAAA,gBA+KAwwD,GAAAruD,UAAA0M,OAAA/L,OAAAw0B,EAAAn1B,WACAquD,EAAAruD,UAAAmH,YAAAknD,EACAzxD,EAAAD,QAAA0xD,EAEA3hD,OAAAuhC,iBAAAogB,EAAAruD,WAOA0oC,iBAEAv7B,IAAA,WAEA,MAAAhQ,MAAAqxD,kBAEAnhD,IAAA,SAAA8O,GAEAhf,KAAAqxD,iBAAAryC,EACAhf,KAAAuxD,uBAAA3mB,EAAA4mB,WAAAxyC,GACA4rB,EAAAiW,QAAA7hC,EAAAhf,KAAAsxD,0BAWAJ,EAAAruD,UAAAwC,OAAA,SAAAzB,EAAAC,GACA7D,KAAA4D,MAAAA,EAAA5D,KAAAwvC,WACAxvC,KAAA6D,OAAAA,EAAA7D,KAAAwvC,WAEAxvC,KAAA2pC,KAAA/lC,MAAA5D,KAAA4D,MACA5D,KAAA2pC,KAAA9lC,OAAA7D,KAAA6D,OAEA7D,KAAA2vC,aAEA3vC,KAAA2pC,KAAAd,MAAAjlC,MAAA5D,KAAA4D,MAAA5D,KAAAwvC,WAAA,KACAxvC,KAAA2pC,KAAAd,MAAAhlC,OAAA7D,KAAA6D,OAAA7D,KAAAwvC,WAAA,OASA0hB,EAAAruD,UAAA0C,QAAA,SAAAksD,GACAA,GAAAzxD,KAAA2pC,KAAAC,YAEA5pC,KAAA2pC,KAAAC,WAAAE,YAAA9pC,KAAA2pC,MAGA3pC,KAAAqC,KAAAyqC,EAAAO,cAAAC,QAEAttC,KAAA4D,MAAA,EACA5D,KAAA6D,OAAA,EAEA7D,KAAA2pC,KAAA,KAEA3pC,KAAAwvC,WAAA,EAEAxvC,KAAA4vC,aAAA,EAEA5vC,KAAA2vC,YAAA,EAEA3vC,KAAA89C,WAAA,KAEA99C,KAAA8vC,uBAAA,EACA9vC,KAAA6vC,mBAAA,EAEA7vC,KAAA+vC,aAAA,EAEA/vC,KAAAqxD,iBAAA,EACArxD,KAAAsxD,qBAAA,KACAtxD,KAAAuxD,uBAAA,QAGAra,WAAA,GAAAvC,UAAA,GAAAE,WAAA,IAAArY,cAAA,KAAAk1B,IAAA,SAAAhxD,EAAAjB,EAAAD,GA0BA,QAAA8sC,GAAA1oC,EAAAC,EAAAgH,GAEAA,EAAAA,MAEAqmD,EAAAnwD,KAAAf,KAAA,SAAA4D,EAAAC,EAAAgH,GAEA7K,KAAAqC,KAAAyqC,EAAAO,cAAAG,OAOAxtC,KAAA+3B,QAAA/3B,KAAA2pC,KAAAt+B,WAAA,MAAAopC,MAAAz0C,KAAA4vC,cAOA5vC,KAAA2xD,SAAA,EAOA3xD,KAAAk0C,YAAA,GAAA0d,GAOA5xD,KAAA6xD,eAAA,wBAEA7xD,KAAA+3B,QAAA+5B,wBAEA9xD,KAAA+3B,QAAAg6B,4BAEA/xD,KAAA6xD,eAAA,8BAEA7xD,KAAA+3B,QAAAi6B,yBAEAhyD,KAAA6xD,eAAA,2BAEA7xD,KAAA+3B,QAAAk6B,uBAEAjyD,KAAA6xD,eAAA,yBAEA7xD,KAAA+3B,QAAAm6B,0BAEAlyD,KAAA6xD,eAAA,4BAIA7xD,KAAAmyD,cAEAnyD,KAAAoyD,iBAQApyD,KAAAy1C,0BACAxK,eAAA,GAAAyF,GAAAG,OACA6C,WAAA,GAIA1zC,KAAAqF,OAAAzB,EAAAC,GAjGA,GAAAqtD,GAAAxwD,EAAA,qBACAkxD,EAAAlxD,EAAA,6BACAkqC,EAAAlqC,EAAA,eACAgwC,EAAAhwC,EAAA,cACAosC,EAAApsC,EAAA,cAiGA4rC,GAAAzpC,UAAA0M,OAAA/L,OAAA0tD,EAAAruD,WACAypC,EAAAzpC,UAAAmH,YAAAsiC,EACA7sC,EAAAD,QAAA8sC,EACA1B,EAAAynB,aAAAC,MAAAhmB,GAOAA,EAAAzpC,UAAA4vC,OAAA,SAAA59B,GAEA7U,KAAAonB,KAAA,YAEA,IAAAmrC,GAAA19C,EAAAw8B,MAEArxC,MAAAsqC,oBAAAz1B,EAEAA,EAAAw8B,OAAArxC,KAAAy1C,yBAGA5gC,EAAA69B,kBAEA79B,EAAAw8B,OAAAkhB,EAEAvyD,KAAA+3B,QAAA8e,aAAA,EAAA,EAAA,EAAA,EAAA,EAAA,GAEA72C,KAAA+3B,QAAA80B,YAAA,EAEA7sD,KAAA+3B,QAAAgmB,yBAAA/9C,KAAA89C,WAAAhR,EAAAW,YAAAC,QAEA3N,UAAAC,YAAAhgC,KAAA2pC,KAAA6oB,eAEAxyD,KAAA+3B,QAAA06B,UAAA,QACAzyD,KAAA+3B,QAAAhzB,SAGA/E,KAAA6vC,oBAEA7vC,KAAA4vC,YAEA5vC,KAAA+3B,QAAA26B,UAAA,EAAA,EAAA1yD,KAAA4D,MAAA5D,KAAA6D,SAIA7D,KAAA+3B,QAAA06B,UAAAzyD,KAAAuxD,uBACAvxD,KAAA+3B,QAAA46B,SAAA,EAAA,EAAA3yD,KAAA4D,MAAA5D,KAAA6D,UAIA7D,KAAA4yD,oBAAA/9C,EAAA7U,KAAA+3B,SAEA/3B,KAAAonB,KAAA,eAQAklB,EAAAzpC,UAAA0C,QAAA,SAAAksD,GAEAzxD,KAAA6yD,iBAGA3B,EAAAruD,UAAA0C,QAAAxE,KAAAf,KAAAyxD,GAEAzxD,KAAA+3B,QAAA,KAEA/3B,KAAA2xD,SAAA,EAEA3xD,KAAAk0C,YAAA3uC,UACAvF,KAAAk0C,YAAA,KAEAl0C,KAAA6xD,eAAA,MASAvlB,EAAAzpC,UAAA+vD,oBAAA,SAAA5oB,EAAAjS,GAEA,GAAA+6B,GAAA9yD,KAAA+3B,OAEA/3B,MAAA+3B,QAAAA,EACAiS,EAAAwK,aAAAx0C,MACAA,KAAA+3B,QAAA+6B,GASAxmB,EAAAzpC,UAAAwC,OAAA,SAAAoU,EAAA2X,GAEA8/B,EAAAruD,UAAAwC,OAAAtE,KAAAf,KAAAyZ,EAAA2X,GAIApxB,KAAA6xD,iBAEA7xD,KAAA+3B,QAAA/3B,KAAA6xD,gBAAA/kB,EAAAqC,YAAA9M,UAAAyK,EAAAqC,YAAAvmC,SAUA0jC,EAAAzpC,UAAAuvD,eAAA,WAEApyD,KAAA89C,aAEA99C,KAAA89C,cAEAlT,EAAAmoB,6BAEA/yD,KAAA89C,WAAAhR,EAAAW,YAAAC,QAAA,cACA1tC,KAAA89C,WAAAhR,EAAAW,YAAAE,KAAA,UACA3tC,KAAA89C,WAAAhR,EAAAW,YAAAG,UAAA,WACA5tC,KAAA89C,WAAAhR,EAAAW,YAAAI,QAAA,SACA7tC,KAAA89C,WAAAhR,EAAAW,YAAAK,SAAA,UACA9tC,KAAA89C,WAAAhR,EAAAW,YAAAM,QAAA,SACA/tC,KAAA89C,WAAAhR,EAAAW,YAAAO,SAAA,UACAhuC,KAAA89C,WAAAhR,EAAAW,YAAAQ,aAAA,cACAjuC,KAAA89C,WAAAhR,EAAAW,YAAAS,YAAA,aACAluC,KAAA89C,WAAAhR,EAAAW,YAAAU,YAAA,aACAnuC,KAAA89C,WAAAhR,EAAAW,YAAAW,YAAA,aACApuC,KAAA89C,WAAAhR,EAAAW,YAAAY,YAAA,aACAruC,KAAA89C,WAAAhR,EAAAW,YAAAa,WAAA,YACAtuC,KAAA89C,WAAAhR,EAAAW,YAAAc,KAAA,MACAvuC,KAAA89C,WAAAhR,EAAAW,YAAAe,YAAA,WACAxuC,KAAA89C,WAAAhR,EAAAW,YAAAgB,OAAA,QACAzuC,KAAA89C,WAAAhR,EAAAW,YAAAiB,YAAA,eAKA1uC,KAAA89C,WAAAhR,EAAAW,YAAAC,QAAA,cACA1tC,KAAA89C,WAAAhR,EAAAW,YAAAE,KAAA,UACA3tC,KAAA89C,WAAAhR,EAAAW,YAAAG,UAAA,cACA5tC,KAAA89C,WAAAhR,EAAAW,YAAAI,QAAA,cACA7tC,KAAA89C,WAAAhR,EAAAW,YAAAK,SAAA,cACA9tC,KAAA89C,WAAAhR,EAAAW,YAAAM,QAAA,cACA/tC,KAAA89C,WAAAhR,EAAAW,YAAAO,SAAA,cACAhuC,KAAA89C,WAAAhR,EAAAW,YAAAQ,aAAA,cACAjuC,KAAA89C,WAAAhR,EAAAW,YAAAS,YAAA,cACAluC,KAAA89C,WAAAhR,EAAAW,YAAAU,YAAA,cACAnuC,KAAA89C,WAAAhR,EAAAW,YAAAW,YAAA,cACApuC,KAAA89C,WAAAhR,EAAAW,YAAAY,YAAA,cACAruC,KAAA89C,WAAAhR,EAAAW,YAAAa,WAAA,cACAtuC,KAAA89C,WAAAhR,EAAAW,YAAAc,KAAA,cACAvuC,KAAA89C,WAAAhR,EAAAW,YAAAe,YAAA,cACAxuC,KAAA89C,WAAAhR,EAAAW,YAAAgB,OAAA,cACAzuC,KAAA89C,WAAAhR,EAAAW,YAAAiB,YAAA,mBAKA2S,cAAA,GAAAC,aAAA,GAAAG,cAAA,IAAAuR,oBAAA,GAAAC,4BAAA,KAAAC,IAAA,SAAAxyD,EAAAjB,EAAAD,GASA,QAAA44C,GAAAx0C,EAAAC,GAOA7D,KAAAoL,OAAAy0B,SAAAC,cAAA,UAOA9/B,KAAA+3B,QAAA/3B,KAAAoL,OAAAC,WAAA,MAEArL,KAAAoL,OAAAxH,MAAAA,EACA5D,KAAAoL,OAAAvH,OAAAA,EAGAu0C,EAAAv1C,UAAAmH,YAAAouC,EACA34C,EAAAD,QAAA44C,EAEA7oC,OAAAuhC,iBAAAsH,EAAAv1C,WAOAe,OACAoM,IAAA,WAEA,MAAAhQ,MAAAoL,OAAAxH,OAEAsM,IAAA,SAAA8O,GAEAhf,KAAAoL,OAAAxH,MAAAob,IASAnb,QACAmM,IAAA,WAEA,MAAAhQ,MAAAoL,OAAAvH,QAEAqM,IAAA,SAAA8O,GAEAhf,KAAAoL,OAAAvH,OAAAmb,MAUAo5B,EAAAv1C,UAAAkC,MAAA,WAEA/E,KAAA+3B,QAAA8e,aAAA,EAAA,EAAA,EAAA,EAAA,EAAA,GACA72C,KAAA+3B,QAAA26B,UAAA,EAAA,EAAA1yD,KAAAoL,OAAAxH,MAAA5D,KAAAoL,OAAAvH,SASAu0C,EAAAv1C,UAAAwC,OAAA,SAAAzB,EAAAC,GAEA7D,KAAAoL,OAAAxH,MAAAA,EACA5D,KAAAoL,OAAAvH,OAAAA,GAOAu0C,EAAAv1C,UAAA0C,QAAA,WAEAvF,KAAA+3B,QAAA,KACA/3B,KAAAoL,OAAA,WAGA+nD,IAAA,SAAAzyD,EAAAjB,EAAAD,GACA,GAAAstC,GAAApsC,EAAA,kBAQA23C,IACA54C,GAAAD,QAAA64C,EAQAA,EAAAqF,eAAA,SAAAE,EAAA7lB,GAEA,GAAA2b,GAAAkK,EAAAlK,UAEAkK,GAAA7zC,QAEA/J,KAAAozD,mBAAAxV,GACAA,EAAA7zC,OAAA,EAGA,KAAA,GAAApJ,GAAA,EAAAA,EAAAi9C,EAAApG,aAAAx2C,OAAAL,IACA,CACA,GAAA2B,GAAAs7C,EAAApG,aAAA72C,GACAk4C,EAAAv2C,EAAAu2C,MAEA6D,EAAAp6C,EAAA68C,UACA5H,EAAAj1C,EAAA48C,SAIA,IAFAnnB,EAAAuf,UAAAh1C,EAAAg1C,UAEAh1C,EAAAD,OAAAyqC,EAAAkD,OAAAC,KACA,CACAlY,EAAAs7B,WAEA,IAAAva,GAAAD,EAAAC,MAEA/gB,GAAAmhB,OAAAJ,EAAA,GAAAA,EAAA,GAEA,KAAA,GAAApvB,GAAA,EAAAA,EAAAovB,EAAA93C,OAAA,EAAA0oB,IAEAqO,EAAAohB,OAAAL,EAAA,EAAApvB,GAAAovB,EAAA,EAAApvB,EAAA,GAGAmvB,GAAAG,QAEAjhB,EAAAohB,OAAAL,EAAA,GAAAA,EAAA,IAIAA,EAAA,KAAAA,EAAAA,EAAA93C,OAAA,IAAA83C,EAAA,KAAAA,EAAAA,EAAA93C,OAAA,IAEA+2B,EAAAu7B,YAGAhxD,EAAAq6C,OAEA5kB,EAAA80B,YAAAvqD,EAAA+0C,UAAA3D,EACA3b,EAAA06B,UAAA,KAAA,SAAA,EAAA/V,GAAAjiC,SAAA,KAAAsK,OAAA,IACAgT,EAAA4kB,QAEAr6C,EAAAg1C,YAEAvf,EAAA80B,YAAAvqD,EAAAs2C,UAAAlF,EACA3b,EAAAw7B,YAAA,KAAA,SAAA,EAAAhc,GAAA98B,SAAA,KAAAsK,OAAA,IACAgT,EAAAy7B,cAGA,IAAAlxD,EAAAD,OAAAyqC,EAAAkD,OAAAE,MAGA5tC,EAAAo6C,WAAA,IAAAp6C,EAAAo6C,aAEA3kB,EAAA80B,YAAAvqD,EAAA+0C,UAAA3D,EACA3b,EAAA06B,UAAA,KAAA,SAAA,EAAA/V,GAAAjiC,SAAA,KAAAsK,OAAA,IACAgT,EAAA46B,SAAA9Z,EAAAlkC,EAAAkkC,EAAA/gC,EAAA+gC,EAAAj1C,MAAAi1C,EAAAh1C,SAGAvB,EAAAg1C,YAEAvf,EAAA80B,YAAAvqD,EAAAs2C,UAAAlF,EACA3b,EAAAw7B,YAAA,KAAA,SAAA,EAAAhc,GAAA98B,SAAA,KAAAsK,OAAA,IACAgT,EAAA07B,WAAA5a,EAAAlkC,EAAAkkC,EAAA/gC,EAAA+gC,EAAAj1C,MAAAi1C,EAAAh1C,aAGA,IAAAvB,EAAAD,OAAAyqC,EAAAkD,OAAAG,KAGApY,EAAAs7B,YACAt7B,EAAA0jB,IAAA5C,EAAAlkC,EAAAkkC,EAAA/gC,EAAA+gC,EAAA6B,OAAA,EAAA,EAAAllC,KAAAy3B,IACAlV,EAAAu7B,YAEAhxD,EAAAq6C,OAEA5kB,EAAA80B,YAAAvqD,EAAA+0C,UAAA3D,EACA3b,EAAA06B,UAAA,KAAA,SAAA,EAAA/V,GAAAjiC,SAAA,KAAAsK,OAAA,IACAgT,EAAA4kB,QAEAr6C,EAAAg1C,YAEAvf,EAAA80B,YAAAvqD,EAAAs2C,UAAAlF,EACA3b,EAAAw7B,YAAA,KAAA,SAAA,EAAAhc,GAAA98B,SAAA,KAAAsK,OAAA,IACAgT,EAAAy7B,cAGA,IAAAlxD,EAAAD,OAAAyqC,EAAAkD,OAAAI,KACA,CAGA,GAAA32B,GAAA,EAAAo/B,EAAAj1C,MACAwtB,EAAA,EAAAynB,EAAAh1C,OAEA8Q,EAAAkkC,EAAAlkC,EAAA8E,EAAA,EACA3B,EAAA+gC,EAAA/gC,EAAAsZ,EAAA,CAEA2G,GAAAs7B,WAEA,IAAAK,GAAA,SACAC,EAAAl6C,EAAA,EAAAi6C,EACAE,EAAAxiC,EAAA,EAAAsiC,EACAG,EAAAl/C,EAAA8E,EACAq6C,EAAAh8C,EAAAsZ,EACA2iC,EAAAp/C,EAAA8E,EAAA,EACAu6C,EAAAl8C,EAAAsZ,EAAA,CAEA2G,GAAAmhB,OAAAvkC,EAAAq/C,GACAj8B,EAAA8hB,cAAAllC,EAAAq/C,EAAAJ,EAAAG,EAAAJ,EAAA77C,EAAAi8C,EAAAj8C,GACAigB,EAAA8hB,cAAAka,EAAAJ,EAAA77C,EAAA+7C,EAAAG,EAAAJ,EAAAC,EAAAG,GACAj8B,EAAA8hB,cAAAga,EAAAG,EAAAJ,EAAAG,EAAAJ,EAAAG,EAAAC,EAAAD,GACA/7B,EAAA8hB,cAAAka,EAAAJ,EAAAG,EAAAn/C,EAAAq/C,EAAAJ,EAAAj/C,EAAAq/C,GAEAj8B,EAAAu7B,YAEAhxD,EAAAq6C,OAEA5kB,EAAA80B,YAAAvqD,EAAA+0C,UAAA3D,EACA3b,EAAA06B,UAAA,KAAA,SAAA,EAAA/V,GAAAjiC,SAAA,KAAAsK,OAAA,IACAgT,EAAA4kB,QAEAr6C,EAAAg1C,YAEAvf,EAAA80B,YAAAvqD,EAAAs2C,UAAAlF,EACA3b,EAAAw7B,YAAA,KAAA,SAAA,EAAAhc,GAAA98B,SAAA,KAAAsK,OAAA,IACAgT,EAAAy7B,cAGA,IAAAlxD,EAAAD,OAAAyqC,EAAAkD,OAAAK,KACA,CACA,GAAA4jB,GAAApb,EAAAlkC,EACAu/C,EAAArb,EAAA/gC,EACAlU,EAAAi1C,EAAAj1C,MACAC,EAAAg1C,EAAAh1C,OACA62C,EAAA7B,EAAA6B,OAEAyZ,EAAA3+C,KAAAgE,IAAA5V,EAAAC,GAAA,EAAA,CACA62C,GAAAA,EAAAyZ,EAAAA,EAAAzZ,EAEA3iB,EAAAs7B,YACAt7B,EAAAmhB,OAAA+a,EAAAC,EAAAxZ,GACA3iB,EAAAohB,OAAA8a,EAAAC,EAAArwD,EAAA62C,GACA3iB,EAAAqhB,iBAAA6a,EAAAC,EAAArwD,EAAAowD,EAAAvZ,EAAAwZ,EAAArwD,GACAk0B,EAAAohB,OAAA8a,EAAArwD,EAAA82C,EAAAwZ,EAAArwD,GACAk0B,EAAAqhB,iBAAA6a,EAAArwD,EAAAswD,EAAArwD,EAAAowD,EAAArwD,EAAAswD,EAAArwD,EAAA62C,GACA3iB,EAAAohB,OAAA8a,EAAArwD,EAAAswD,EAAAxZ,GACA3iB,EAAAqhB,iBAAA6a,EAAArwD,EAAAswD,EAAAD,EAAArwD,EAAA82C,EAAAwZ,GACAn8B,EAAAohB,OAAA8a,EAAAvZ,EAAAwZ,GACAn8B,EAAAqhB,iBAAA6a,EAAAC,EAAAD,EAAAC,EAAAxZ,GACA3iB,EAAAu7B,aAEAhxD,EAAAo6C,WAAA,IAAAp6C,EAAAo6C,aAEA3kB,EAAA80B,YAAAvqD,EAAA+0C,UAAA3D,EACA3b,EAAA06B,UAAA,KAAA,SAAA,EAAA/V,GAAAjiC,SAAA,KAAAsK,OAAA,IACAgT,EAAA4kB,QAGAr6C,EAAAg1C,YAEAvf,EAAA80B,YAAAvqD,EAAAs2C,UAAAlF,EACA3b,EAAAw7B,YAAA,KAAA,SAAA,EAAAhc,GAAA98B,SAAA,KAAAsK,OAAA,IACAgT,EAAAy7B,aAaAnb,EAAA+b,mBAAA,SAAAxW,EAAA7lB,GAEA,GAAA3iB,GAAAwoC,EAAApG,aAAAx2C,MAEA,IAAA,IAAAoU,EAAA,CAKA2iB,EAAAs7B,WAEA,KAAA,GAAA1yD,GAAA,EAAAyU,EAAAzU,EAAAA,IACA,CACA,GAAA2B,GAAAs7C,EAAApG,aAAA72C,GACAk4C,EAAAv2C,EAAAu2C,KAEA,IAAAv2C,EAAAD,OAAAyqC,EAAAkD,OAAAC,KACA,CAEA,GAAA6I,GAAAD,EAAAC,MAEA/gB,GAAAmhB,OAAAJ,EAAA,GAAAA,EAAA,GAEA,KAAA,GAAApvB,GAAA,EAAAA,EAAAovB,EAAA93C,OAAA,EAAA0oB,IAEAqO,EAAAohB,OAAAL,EAAA,EAAApvB,GAAAovB,EAAA,EAAApvB,EAAA,GAIAovB,GAAA,KAAAA,EAAAA,EAAA93C,OAAA,IAAA83C,EAAA,KAAAA,EAAAA,EAAA93C,OAAA,IAEA+2B,EAAAu7B,gBAIA,IAAAhxD,EAAAD,OAAAyqC,EAAAkD,OAAAE,KAEAnY,EAAAwS,KAAAsO,EAAAlkC,EAAAkkC,EAAA/gC,EAAA+gC,EAAAj1C,MAAAi1C,EAAAh1C,QACAk0B,EAAAu7B,gBAEA,IAAAhxD,EAAAD,OAAAyqC,EAAAkD,OAAAG,KAGApY,EAAA0jB,IAAA5C,EAAAlkC,EAAAkkC,EAAA/gC,EAAA+gC,EAAA6B,OAAA,EAAA,EAAAllC,KAAAy3B,IACAlV,EAAAu7B,gBAEA,IAAAhxD,EAAAD,OAAAyqC,EAAAkD,OAAAI,KACA,CAIA,GAAA32B,GAAA,EAAAo/B,EAAAj1C,MACAwtB,EAAA,EAAAynB,EAAAh1C,OAEA8Q,EAAAkkC,EAAAlkC,EAAA8E,EAAA,EACA3B,EAAA+gC,EAAA/gC,EAAAsZ,EAAA,EAEAsiC,EAAA,SACAC,EAAAl6C,EAAA,EAAAi6C,EACAE,EAAAxiC,EAAA,EAAAsiC,EACAG,EAAAl/C,EAAA8E,EACAq6C,EAAAh8C,EAAAsZ,EACA2iC,EAAAp/C,EAAA8E,EAAA,EACAu6C,EAAAl8C,EAAAsZ,EAAA,CAEA2G,GAAAmhB,OAAAvkC,EAAAq/C,GACAj8B,EAAA8hB,cAAAllC,EAAAq/C,EAAAJ,EAAAG,EAAAJ,EAAA77C,EAAAi8C,EAAAj8C,GACAigB,EAAA8hB,cAAAka,EAAAJ,EAAA77C,EAAA+7C,EAAAG,EAAAJ,EAAAC,EAAAG,GACAj8B,EAAA8hB,cAAAga,EAAAG,EAAAJ,EAAAG,EAAAJ,EAAAG,EAAAC,EAAAD,GACA/7B,EAAA8hB,cAAAka,EAAAJ,EAAAG,EAAAn/C,EAAAq/C,EAAAJ,EAAAj/C,EAAAq/C,GACAj8B,EAAAu7B,gBAEA,IAAAhxD,EAAAD,OAAAyqC,EAAAkD,OAAAK,KACA,CAEA,GAAA4jB,GAAApb,EAAAlkC,EACAu/C,EAAArb,EAAA/gC,EACAlU,EAAAi1C,EAAAj1C,MACAC,EAAAg1C,EAAAh1C,OACA62C,EAAA7B,EAAA6B,OAEAyZ,EAAA3+C,KAAAgE,IAAA5V,EAAAC,GAAA,EAAA,CACA62C,GAAAA,EAAAyZ,EAAAA,EAAAzZ,EAEA3iB,EAAAmhB,OAAA+a,EAAAC,EAAAxZ,GACA3iB,EAAAohB,OAAA8a,EAAAC,EAAArwD,EAAA62C,GACA3iB,EAAAqhB,iBAAA6a,EAAAC,EAAArwD,EAAAowD,EAAAvZ,EAAAwZ,EAAArwD,GACAk0B,EAAAohB,OAAA8a,EAAArwD,EAAA82C,EAAAwZ,EAAArwD,GACAk0B,EAAAqhB,iBAAA6a,EAAArwD,EAAAswD,EAAArwD,EAAAowD,EAAArwD,EAAAswD,EAAArwD,EAAA62C,GACA3iB,EAAAohB,OAAA8a,EAAArwD,EAAAswD,EAAAxZ,GACA3iB,EAAAqhB,iBAAA6a,EAAArwD,EAAAswD,EAAAD,EAAArwD,EAAA82C,EAAAwZ,GACAn8B,EAAAohB,OAAA8a,EAAAvZ,EAAAwZ,GACAn8B,EAAAqhB,iBAAA6a,EAAAC,EAAAD,EAAAC,EAAAxZ,GACA3iB,EAAAu7B,gBAYAjb,EAAA+a,mBAAA,SAAAxV,GAEA,GAAA,WAAAA,EAAAnG,MAAAmG,EAAAlG,YAAAkG,EAAAnG,KAAA,CAIAmG,EAAAlG,UAAAkG,EAAAnG,IAMA,KAAA,GAJA4c,IAAAzW,EAAAnG,MAAA,GAAA,KAAA,IACA6c,GAAA1W,EAAAnG,MAAA,EAAA,KAAA,IACA8c,GAAA,IAAA3W,EAAAnG,MAAA,IAEA92C,EAAA,EAAAA,EAAAi9C,EAAApG,aAAAx2C,OAAAL,IACA,CACA,GAAA2B,GAAAs7C,EAAApG,aAAA72C,GAEA+7C,EAAA,EAAAp6C,EAAAo6C,UACAnF,EAAA,EAAAj1C,EAAAi1C,SAyBAj1C,GAAA68C,YAAAzC,GAAA,GAAA,KAAA,IAAA2X,EAAA,KAAA,MAAA3X,GAAA,EAAA,KAAA,IAAA4X,EAAA,KAAA,IAAA,IAAA5X,GAAA,IAAA6X,EAAA,IACAjyD,EAAA48C,YAAA3H,GAAA,GAAA,KAAA,IAAA8c,EAAA,KAAA,MAAA9c,GAAA,EAAA,KAAA,IAAA+c,EAAA,KAAA,IAAA,IAAA/c,GAAA,IAAAgd,EAAA,SAMAC,iBAAA,KAAAC,IAAA,SAAA/zD,EAAAjB,EAAAD,GASA,QAAAoyD,MARA,GAAAvZ,GAAA33C,EAAA,mBAWAkxD,GAAA/uD,UAAAmH,YAAA4nD,EACAnyD,EAAAD,QAAAoyD,EAQAA,EAAA/uD,UAAAsxC,SAAA,SAAAugB,EAAA9rB,GAGAA,EAAA7Q,QAAA48B,MAEA,IAAAC,GAAAF,EAAAjgB,MACAh4B,EAAAi4C,EAAAzpB,eACAuE,EAAA5G,EAAA4G,UAEA5G,GAAA7Q,QAAA8e,aACAp6B,EAAAhc,EAAA+uC,EACA/yB,EAAAzX,EAAAwqC,EACA/yB,EAAA4X,EAAAmb,EACA/yB,EAAA2uB,EAAAoE,EACA/yB,EAAAyuB,GAAAsE,EACA/yB,EAAA0uB,GAAAqE,GAKAklB,EAAAzwD,UAEAo0C,EAAA+b,mBAAAM,EAAA9rB,EAAA7Q,SACA6Q,EAAA7Q,QAAA88B,QAGAH,EAAAhhB,WAAAkhB,GAQAhD,EAAA/uD,UAAAwxC,QAAA,SAAAzL,GAEAA,EAAA7Q,QAAA+8B,WAGAlD,EAAA/uD,UAAA0C,QAAA,eAEAwvD,mBAAA,KAAAC,IAAA,SAAAt0D,EAAAjB,EAAAD,GACA,GAAAorC,GAAAlqC,EAAA,kBAQAu0D,IACAx1D,GAAAD,QAAAy1D,EASAA,EAAAC,iBAAA,SAAAhF,EAAAvX,GAEA,GAAA10C,GAAAisD,EAAAjsD,OAEA00C,GAAAsc,EAAAE,WAAAxc,EAEA,IAAAyc,GAAA,KAAA,SAAA,EAAAzc,GAAAl+B,SAAA,KAAAsK,OAAA,GAIA,IAFA9gB,EAAAoxD,UAAApxD,EAAAoxD,cAEApxD,EAAAoxD,UAAAD,GAEA,MAAAnxD,GAAAoxD,UAAAD,EAIA,IAAAhqD,GAAA6pD,EAAA7pD,QAAAy0B,SAAAC,cAAA,SAKA,IAFAm1B,EAAAK,WAAArxD,EAAA00C,EAAAvtC,GAEA6pD,EAAAM,mBACA,CAEA,GAAAC,GAAA,GAAA91B,MACA81B,GAAApoD,IAAAhC,EAAAqqD,YAEAxxD,EAAAoxD,UAAAD,GAAAI,MAIAvxD,GAAAoxD,UAAAD,GAAAhqD,EAEA6pD,EAAA7pD,OAAA,IAGA,OAAAA,IAUA6pD,EAAAS,iBAAA,SAAAzxD,EAAA00C,EAAAvtC,GAEA,GAAA2sB,GAAA3sB,EAAAC,WAAA,MAEAmkC,EAAAvrC,EAAAu5C,YAAAhO,WAEA2gB,EAAAlsD,EAAAksD,KAAA3X,OACA2X,GAAAx7C,GAAA66B,EACA2gB,EAAAr4C,GAAA03B,EACA2gB,EAAAvsD,OAAA4rC,EACA2gB,EAAAtsD,QAAA2rC,EAEApkC,EAAAxH,MAAAusD,EAAAvsD,MACAwH,EAAAvH,OAAAssD,EAAAtsD,OAEAk0B,EAAA06B,UAAA,KAAA,SAAA,EAAA9Z,GAAAl+B,SAAA,KAAAsK,OAAA,IAEAgT,EAAA46B,SAAA,EAAA,EAAAxC,EAAAvsD,MAAAusD,EAAAtsD,QAEAk0B,EAAAgmB,yBAAA,WAEAhmB,EAAAk1B,UACAhpD,EAAAu5C,YAAAh2C,OACA2oD,EAAAx7C,EACAw7C,EAAAr4C,EACAq4C,EAAAvsD,MACAusD,EAAAtsD,OACA,EACA,EACAssD,EAAAvsD,MACAusD,EAAAtsD,QAGAk0B,EAAAgmB,yBAAA,mBAEAhmB,EAAAk1B,UACAhpD,EAAAu5C,YAAAh2C,OACA2oD,EAAAx7C,EACAw7C,EAAAr4C,EACAq4C,EAAAvsD,MACAusD,EAAAtsD,OACA,EACA,EACAssD,EAAAvsD,MACAusD,EAAAtsD,SAWAoxD,EAAAU,gBAAA,SAAA1xD,EAAA00C,EAAAvtC,GAEA,GAAA2sB,GAAA3sB,EAAAC,WAAA,MAEAmkC,EAAAvrC,EAAAu5C,YAAAhO,WAEA2gB,EAAAlsD,EAAAksD,KAAA3X,OACA2X,GAAAx7C,GAAA66B,EACA2gB,EAAAr4C,GAAA03B,EACA2gB,EAAAvsD,OAAA4rC,EACA2gB,EAAAtsD,QAAA2rC,EAEApkC,EAAAxH,MAAAusD,EAAAvsD,MACAwH,EAAAvH,OAAAssD,EAAAtsD,OAEAk0B,EAAAgmB,yBAAA,OACAhmB,EAAA06B,UAAA,KAAA,SAAA,EAAA9Z,GAAAl+B,SAAA,KAAAsK,OAAA,IACAgT,EAAA46B,SAAA,EAAA,EAAAxC,EAAAvsD,MAAAusD,EAAAtsD,QAEAk0B,EAAAgmB,yBAAA,mBACAhmB,EAAAk1B,UACAhpD,EAAAu5C,YAAAh2C,OACA2oD,EAAAx7C,EACAw7C,EAAAr4C,EACAq4C,EAAAvsD,MACAusD,EAAAtsD,OACA,EACA,EACAssD,EAAAvsD,MACAusD,EAAAtsD,SAaAoxD,EAAAW,iBAAA,SAAA3xD,EAAA00C,EAAAvtC,GAEA,GAAA2sB,GAAA3sB,EAAAC,WAAA,MAEAmkC,EAAAvrC,EAAAu5C,YAAAhO,WAEA2gB,EAAAlsD,EAAAksD,KAAA3X,OACA2X,GAAAx7C,GAAA66B,EACA2gB,EAAAr4C,GAAA03B,EACA2gB,EAAAvsD,OAAA4rC,EACA2gB,EAAAtsD,QAAA2rC,EAEApkC,EAAAxH,MAAAusD,EAAAvsD,MACAwH,EAAAvH,OAAAssD,EAAAtsD,OAEAk0B,EAAAgmB,yBAAA,OACAhmB,EAAAk1B,UACAhpD,EAAAu5C,YAAAh2C,OACA2oD,EAAAx7C,EACAw7C,EAAAr4C,EACAq4C,EAAAvsD,MACAusD,EAAAtsD,OACA,EACA,EACAssD,EAAAvsD,MACAusD,EAAAtsD,OAUA,KAAA,GAPAgyD,GAAAjrB,EAAAiW,QAAAlI,GACAt4C,EAAAw1D,EAAA,GAAAj2D,EAAAi2D,EAAA,GAAA7wD,EAAA6wD,EAAA,GAEAC,EAAA/9B,EAAAg+B,aAAA,EAAA,EAAA5F,EAAAvsD,MAAAusD,EAAAtsD,QAEAmyD,EAAAF,EAAAxzD,KAEA3B,EAAA,EAAAA,EAAAq1D,EAAAh1D,OAAAL,GAAA,EAEAq1D,EAAAr1D,EAAA,IAAAN,EACA21D,EAAAr1D,EAAA,IAAAf,EACAo2D,EAAAr1D,EAAA,IAAAqE,CAGA+yB,GAAAk+B,aAAAH,EAAA,EAAA,IAQAb,EAAAE,WAAA,SAAAxc,GAEA,GAAAud,GAAAjB,EAAAkB,0BAEAN,EAAAjrB,EAAAiW,QAAAlI,EAMA,OAJAkd,GAAA,GAAArgD,KAAAgE,IAAA,IAAAq8C,EAAA,GAAAK,EAAAA,GACAL,EAAA,GAAArgD,KAAAgE,IAAA,IAAAq8C,EAAA,GAAAK,EAAAA,GACAL,EAAA,GAAArgD,KAAAgE,IAAA,IAAAq8C,EAAA,GAAAK,EAAAA,GAEAtrB,EAAAwrB,QAAAP,IAQAZ,EAAAkB,0BAAA,EAOAlB,EAAAM,oBAAA,EAOAN,EAAAoB,eAAAzrB,EAAAmoB,4BAMAkC,EAAAK,WAAAL,EAAAoB,eAAApB,EAAAS,iBAAAT,EAAAW,mBAEA7S,iBAAA,MAAAuT,IAAA,SAAA51D,EAAAjB,EAAAD,GACA,GAAA+B,GAAAb,EAAA,gBAAAa,UACAqpC,EAAAlqC,EAAA,eAUA61D,EAAA,SAAAn0D,GAEApC,KAAAoC,GAAAA,EAGApC,KAAAw2D,oBACAx2D,KAAAy2D,cAIAF,GAAA1zD,UAAAwF,YAAA,SAAApE,KAMAsyD,EAAA1zD,UAAA6zD,WAAA,SAAAzyD,KAUAsyD,EAAA1zD,UAAAmtD,cAAA,SAAA/rD,GAIA,GAFAA,EAAAA,EAAAu5C,aAAAv5C,EAEAA,EAAA0yD,UAAA,CAMA,GAAAv0D,GAAApC,KAAAoC,GACAw0D,EAAA52D,KAAAy2D,WAAAxyD,EAAA4yD,IAyBA,OAvBAD,KAEAA,EAAA,GAAAr1D,GAAAa,GACAw0D,EAAAvvD,kBAAA,EACApD,EAAA8rD,YAAA3tD,EAAAkJ,IAAAsrD,EAIA3yD,EAAA+iB,GAAA,SAAAhnB,KAAAgwD,cAAAhwD,MACAiE,EAAA+iB,GAAA,UAAAhnB,KAAA82D,eAAA92D,MAEAA,KAAAw2D,iBAAA7rD,KAAA1G,IAGA2yD,EAAAh0D,OAAAqB,EAAAuD,QAGAovD,EAAAhxD,kBAIAgxD,EAAA1tD,sBAEAjF,EAAA8rD,YAAA3tD,EAAAkJ,MAQAirD,EAAA1zD,UAAAi0D,eAAA,SAAA7yD,EAAA8yD,GAIA,GAFA9yD,EAAAA,EAAAu5C,aAAAv5C,EAEAA,EAAA0yD,WAKA1yD,EAAA8rD,YAAA/vD,KAAAoC,GAAAkJ,MAEArH,EAAA8rD,YAAA/vD,KAAAoC,GAAAkJ,IAAA/F,UACAtB,EAAAijB,IAAA,SAAAlnB,KAAAgwD,cAAAhwD,MACAiE,EAAAijB,IAAA,UAAAlnB,KAAA82D,eAAA92D,YAGAiE,GAAA8rD,YAAA/vD,KAAAoC,GAAAkJ,KAEAyrD,GACA,CACA,GAAAp2D,GAAAX,KAAAw2D,iBAAArqC,QAAAloB,EACA,MAAAtD,GACAiqC,EAAAC,YAAA7qC,KAAAw2D,iBAAA71D,EAAA,KAMA41D,EAAA1zD,UAAAm0D,UAAA,WAGA,IAAA,GAAAr2D,GAAA,EAAAA,EAAAX,KAAAw2D,iBAAAx1D,SAAAL,EACA,CACA,GAAAsD,GAAAjE,KAAAw2D,iBAAA71D,EACAsD,GAAA8rD,YAAA/vD,KAAAoC,GAAAkJ,WAEArH,GAAA8rD,YAAA/vD,KAAAoC,GAAAkJ,MAKAirD,EAAA1zD,UAAA0C,QAAA,WAGA,IAAA,GAAA5E,GAAA,EAAAA,EAAAX,KAAAw2D,iBAAAx1D,SAAAL,EACA,CACA,GAAAsD,GAAAjE,KAAAw2D,iBAAA71D,EACAX,MAAA82D,eAAA7yD,GAAA,GACAA,EAAAijB,IAAA,SAAAlnB,KAAAgwD,cAAAhwD,MACAiE,EAAAijB,IAAA,UAAAlnB,KAAA82D,eAAA92D,MAGAA,KAAAw2D,iBAAA,MAGA/2D,EAAAD,QAAA+2D,IAGA9U,cAAA,IAAA5a,eAAA,IAAAowB,IAAA,SAAAv2D,EAAAjB,EAAAD,GAyCA,QAAA4sC,GAAAxoC,EAAAC,EAAAgH,GAEAA,EAAAA,MAEAqmD,EAAAnwD,KAAAf,KAAA,QAAA4D,EAAAC,EAAAgH,GAQA7K,KAAAqC,KAAAyqC,EAAAO,cAAAE,MAEAvtC,KAAAk3D,kBAAAl3D,KAAAk3D,kBAAAl0D,KAAAhD,MACAA,KAAAm3D,sBAAAn3D,KAAAm3D,sBAAAn0D,KAAAhD,MAEAA,KAAA2pC,KAAAhK,iBAAA,mBAAA3/B,KAAAk3D,mBAAA,GACAl3D,KAAA2pC,KAAAhK,iBAAA,uBAAA3/B,KAAAm3D,uBAAA,GAQAn3D,KAAAo3D,iBACA3iB,MAAAz0C,KAAA4vC,YACAH,UAAA5kC,EAAA4kC,UACA4nB,mBAAAr3D,KAAA4vC,aAAA,kBAAA5vC,KAAA4vC,YACA5rC,SAAA,EACA8rC,sBAAAjlC,EAAAilC,uBAGA9vC,KAAAsxD,qBAAA,GAAAtxD,KAAA4vC,YAAA,EAAA,EAOA5vC,KAAA4uD,cAAA,GAAAvI,GAAArmD,MAOAA,KAAAk0C,YAAA,GAAAojB,GAAAt3D,MAOAA,KAAAu3D,eAAA,GAAAC,GAAAx3D,MAOAA,KAAAg0C,cAAA,GAAAyjB,GAAAz3D,MAOAA,KAAAugD,iBAAA,GAAAmX,GAAA13D,MAQAA,KAAA8zC,gBAAA,GAAAwL,GAAAt/C,MAEAA,KAAAmyD,cAGAnyD,KAAAoC,GAAAlB,EAAAlB,KAAA2pC,KAAA3pC,KAAAo3D,iBAEAp3D,KAAA23D,eAGA33D,KAAA89C,WAAA8Z,EAAAx1D,IACApC,KAAA63D,UAAAC,EAAA11D,IAEApC,KAAA+3D,cAAA,KAOA/3D,KAAAg4D,oBAAA,KACAh4D,KAAAi4D,uBAAA,KACAj4D,KAAAk4D,eAAA,KA3IA,GAAAhH,GAAAxwD,EAAA,qBACA2lD,EAAA3lD,EAAA,4BACA42D,EAAA52D,EAAA,0BACA82D,EAAA92D,EAAA,6BACA+2D,EAAA/2D,EAAA,4BACAg3D,EAAAh3D,EAAA,+BACA4lD,EAAA5lD,EAAA,wBACA4+C,EAAA5+C,EAAA,0BAEA61D,GADA71D,EAAA,wBACAA,EAAA,qBACAQ,EAAAR,EAAA,gBAAAQ,cACA02D,EAAAl3D,EAAA,oCACAo3D,EAAAp3D,EAAA,mCACAkqC,EAAAlqC,EAAA,eACAosC,EAAApsC,EAAA,cAiIA0rC,GAAAvpC,UAAA0M,OAAA/L,OAAA0tD,EAAAruD,WACAupC,EAAAvpC,UAAAmH,YAAAoiC,EACA3sC,EAAAD,QAAA4sC,EACAxB,EAAAynB,aAAAC,MAAAlmB,GAOAA,EAAAvpC,UAAA80D,aAAA,WAEA,GAAAv1D,GAAApC,KAAAoC,EAGApC,MAAAm4D,eAAA,GAAA5B,GAAAn0D,GAGAA,EAAAg2D,QAAAh2D,EAAAi2D,YACAj2D,EAAAg2D,QAAAh2D,EAAAk2D,WACAl2D,EAAAm2D,OAAAn2D,EAAAo2D,OAGAx4D,KAAAy4D,iBAAA,GAAAnS,GAAAlkD,EAAApC,KAAA4D,MAAA5D,KAAA6D,OAAA,KAAA7D,KAAAwvC,YAAA,GACAxvC,KAAAy4D,iBAAAxzD,WAAAjF,KAAAsxD,qBAEAtxD,KAAA04D,iBAAA14D,KAAAy4D,kBAEAz4D,KAAAonB,KAAA,UAAAhlB,GAGApC,KAAAqF,OAAArF,KAAA4D,MAAA5D,KAAA6D,SAQAuoC,EAAAvpC,UAAA4vC,OAAA,SAAAzI,GAKA,GAHAhqC,KAAAonB,KAAA,cAGApnB,KAAAoC,GAAAu2D,gBAAA,CAKA34D,KAAAsqC,oBAAAN,CAEA,IAAAuoB,GAAAvoB,EAAAqH,MACArH,GAAAqH,OAAArxC,KAAAy1C,yBAEAzL,EAAA0I,kBACA1I,EAAAqH,OAAAkhB,EAEAvyD,KAAA4yD,oBAAA5oB,EAAAhqC,KAAAy4D,iBAAAz4D,KAAA6vC,mBAEA7vC,KAAAonB,KAAA,gBAUAglB,EAAAvpC,UAAA+vD,oBAAA,SAAA5oB,EAAA4uB,EAAA7zD,GAEA/E,KAAA04D,iBAAAE,GAEA7zD,GAEA6zD,EAAA7zD,QAIA/E,KAAAg0C,cAAA6kB,eAAAD,EAAAE,aAGA9uB,EAAAyJ,YAAAzzC,MAGAA,KAAA8zC,gBAAAC,SAQA3H,EAAAvpC,UAAA86C,kBAAA,SAAAob,GAEA/4D,KAAA8zC,kBAAAilB,IAKA/4D,KAAA8zC,gBAAA9f,OACAh0B,KAAA8zC,gBAAAilB,EACA/4D,KAAA8zC,gBAAAtpC,UASA4hC,EAAAvpC,UAAAwC,OAAA,SAAAzB,EAAAC,GAEAqtD,EAAAruD,UAAAwC,OAAAtE,KAAAf,KAAA4D,EAAAC,GAEA7D,KAAAg0C,cAAA3uC,OAAAzB,EAAAC,GACA7D,KAAAy4D,iBAAApzD,OAAAzB,EAAAC,GAEA7D,KAAAwvD,sBAAAxvD,KAAA44D,cAEA54D,KAAAy4D,iBAAAvuD,YASAkiC,EAAAvpC,UAAA61D,iBAAA,SAAAE,GAEAA,IAAA54D,KAAAg4D,sBAEAh4D,KAAAg4D,oBAAAY,EAEA54D,KAAA+3D,gBAEA/3D,KAAA+3D,cAAApxD,SAAA8oD,iBAAAmJ,EAAAnJ,iBAAA7O,SAAA,IAGAgY,EAAA1uD,WAEAlK,KAAAu3D,eAAAyB,aAAAJ,EAAAK,oBAIA7sB,EAAAvpC,UAAA69C,WAAA,SAAArzC,GAGArN,KAAA+3D,gBAAA1qD,IAEArN,KAAA+3D,cAAA1qD,EACAA,EAAArK,OAGAqK,EAAA1G,SAAA8oD,iBAAAzvD,KAAAg4D,oBAAAvI,iBAAA7O,SAAA,KAKAxU,EAAAvpC,UAAAwF,YAAA,SAAApE,EAAAgE,GAEA,GAAA7F,GAAApC,KAAAoC,EAGA6F,GAAAA,GAAA,EAEAjI,KAAAi4D,yBAAAhwD,IAEAjI,KAAAi4D,uBAAAhwD,EACA7F,EAAA+F,cAAA/F,EAAAgG,SAAAH,IAIAjI,KAAAk4D,eAAAj0D,EAEAA,EAAA8rD,YAAA3tD,EAAAkJ,IAQArH,EAAA8rD,YAAA3tD,EAAAkJ,IAAAtI,OALAhD,KAAAm4D,eAAAnI,cAAA/rD,IAeAmoC,EAAAvpC,UAAAq0D,kBAAA,SAAA/+B,GAEAA,EAAA+gC,kBAQA9sB,EAAAvpC,UAAAs0D,sBAAA,WAEAn3D,KAAA23D,eACA33D,KAAAm4D,eAAAnB,aAQA5qB,EAAAvpC,UAAA0C,QAAA,SAAAksD,GAEAzxD,KAAA6yD,iBAGA7yD,KAAA2pC,KAAA/K,oBAAA,mBAAA5+B,KAAAk3D,mBACAl3D,KAAA2pC,KAAA/K,oBAAA,uBAAA5+B,KAAAm3D,uBAEAn3D,KAAAm4D,eAAAgB,aAGAjI,EAAAruD,UAAA0C,QAAAxE,KAAAf,KAAAyxD,GAEAzxD,KAAA62D,IAAA,EAGA72D,KAAA4uD,cAAArpD,UACAvF,KAAAk0C,YAAA3uC,UACAvF,KAAAu3D,eAAAhyD,UACAvF,KAAAg0C,cAAAzuC,UACAvF,KAAAugD,iBAAAh7C,UAEAvF,KAAA4uD,cAAA,KACA5uD,KAAAk0C,YAAA,KACAl0C,KAAAg0C,cAAA,KACAh0C,KAAAugD,iBAAA,KACAvgD,KAAA8zC,gBAAA,KAEA9zC,KAAAk3D,kBAAA,KACAl3D,KAAAm3D,sBAAA,KAEAn3D,KAAAo3D,gBAAA,KAEAp3D,KAAAoC,GAAAwE,WAAA,MACA5G,KAAAoC,GAAA,QAIAi/C,cAAA,GAAAI,cAAA,IAAAuR,oBAAA,GAAAoG,mBAAA,GAAAC,uBAAA,GAAAC,8BAAA,GAAAC,2BAAA,GAAAC,yBAAA,GAAAC,2BAAA,GAAAC,4BAAA,GAAAC,yBAAA,GAAAC,uBAAA,GAAAC,mCAAA,GAAAC,kCAAA,GAAAjzB,eAAA,IAAAkzB,IAAA,SAAAr5D,EAAAjB,EAAAD,GAaA,QAAA+mD,GAAAjgD,EAAAC,EAAAI,GAQA3G,KAAAg6D,WAMAh6D,KAAA0+C,QAAA,EAMA1+C,KAAA2G,SAAAA,MAQA3G,KAAAsG,UAAAA,GAAA2zD,EAAAC,iBAOAl6D,KAAAuG,YAAAA,GAAA0zD,EAAAE,mBA/CA,GAAAF,GAAAv5D,EAAA,2BAuDA6lD,GAAA1jD,UAAAmH,YAAAu8C,EACA9mD,EAAAD,QAAA+mD,EAOAA,EAAA1jD,UAAAu3D,UAAA,SAAAxxB,GAEA,GAAAxmC,GAAAwmC,EAAAxmC,GAEAiL,EAAArN,KAAAg6D,QAAA53D,EAAAkJ,GAcA,OAZA+B,KAEAA,EAAA,GAAA4sD,GAAArxB,EAAAgmB,cACA5uD,KAAAsG,UACAtG,KAAAuG,YACAvG,KAAA2G,SACA3G,KAAAyG,YAGAzG,KAAAg6D,QAAA53D,EAAAkJ,IAAA+B,GAGAA,GAWAk5C,EAAA1jD,UAAAw3D,YAAA,SAAAzxB,EAAArf,EAAArB,EAAAnjB,GAEA,GAAAsI,GAAArN,KAAAo6D,UAAAxxB,EAEAA,GAAAoL,cAAAqmB,YAAAhtD,EAAAkc,EAAArB,EAAAnjB,IAOAwhD,EAAA1jD,UAAAy3D,YAAA,SAAAxqD,GAEA,IAAA,GAAAnP,GAAA,EAAA+oB,EAAA1pB,KAAAg6D,QAAAh5D,OAAA0oB,EAAA/oB,IAAAA,EAEAX,KAAAg6D,QAAAr5D,GAAA25D,YAAAxqD,MAIAyqD,2BAAA,KAAAC,IAAA,SAAA95D,EAAAjB,EAAAD,GAoBA,QAAAgnD,KAEAD,EAAAxlD,KAAAf,KAEA,8zCAEA,66IAGAwvC,YAAAntC,KAAA,KAAA8M,OAAAwF,EAAA,EAAAmD,EAAA,MA5BA,GAAAyuC,GAAA7lD,EAAA,mBAkCA8lD,GAAA3jD,UAAA0M,OAAA/L,OAAA+iD,EAAA1jD,WACA2jD,EAAA3jD,UAAAmH,YAAAw8C,EACA/mD,EAAAD,QAAAgnD,EASAA,EAAA3jD,UAAAw3D,YAAA,SAAAzxB,EAAArf,EAAArB,GAEA,GAAA8rB,GAAApL,EAAAoL,cAEA3mC,EAAArN,KAAAo6D,UAAAxxB,EAEAoL,GAAAqmB,YAAAhtD,EAAAkc,EAAArB,MAGAuyC,mBAAA,KAAAC,IAAA,SAAAh6D,EAAAjB,EAAAD,GAeA,QAAAinD,GAAAyJ,GAEA,GAAAyK,GAAA,GAAAjqB,GAAAG,MAEA0V,GAAAxlD,KAAAf,KACA,mfACA,wkBAEAk2C,MAAA7zC,KAAA,YAAA8M,MAAA+gD,EAAAJ,UACArb,OAAApyC,KAAA,IAAA8M,MAAA,GACAyrD,aAAAv4D,KAAA,OAAA8M,MAAAwrD,EAAA/Z,SAAA,MAIA5gD,KAAA66D,WAAA3K,EACAlwD,KAAA26D,WAAAA,EA7BA,GAAApU,GAAA7lD,EAAA,oBACAgwC,EAAAhwC,EAAA,gBA+BA+lD,GAAA5jD,UAAA0M,OAAA/L,OAAA+iD,EAAA1jD,WACA4jD,EAAA5jD,UAAAmH,YAAAy8C,EACAhnD,EAAAD,QAAAinD,EASAA,EAAA5jD,UAAAw3D,YAAA,SAAAzxB,EAAArf,EAAArB,GAEA,GAAA8rB,GAAApL,EAAAoL,aAEAh0C,MAAA2G,SAAAuvC,KAAA/mC,MAAAnP,KAAA66D,WAAA/K,SAEA9b,EAAA8mB,sBAAAvxC,EAAAujC,MAAA9sD,KAAA66D,WAAA76D,KAAA26D,YAEA36D,KAAA2G,SAAAi0D,YAAAzrD,MAAAnP,KAAA26D,WAAA/Z,SAAA,GACA5gD,KAAA2G,SAAA8tC,MAAAtlC,MAAAnP,KAAA66D,WAAAnnB,UAEA,IAAArmC,GAAArN,KAAAo6D,UAAAxxB,EAEAoL,GAAAqmB,YAAAhtD,EAAAkc,EAAArB,IAIA3Y,OAAAuhC,iBAAA2V,EAAA5jD,WAOAkZ,KACA/L,IAAA,WAEA,MAAAhQ,MAAA2G,SAAAuvC,KAAA/mC,OAEAe,IAAA,SAAAf,GAEAnP,KAAA2G,SAAAuvC,KAAA/mC,MAAAA,IAUArM,QACAkN,IAAA,WAEA,MAAAhQ,MAAA2G,SAAA7D,OAAAqM,OAEAe,IAAA,SAAAf,GAEAnP,KAAA2G,SAAA7D,OAAAqM,MAAAA,QAKAu1C,gBAAA,GAAA+V,mBAAA,KAAAM,IAAA,SAAAr6D,EAAAjB,EAAAD,GASA,QAAAk4D,GAAA9uB,GAEAwd,EAAArlD,KAAAf,KAAA4oC,GAKA5oC,KAAAg7D,iBAAA,MAfA,GAAA5U,GAAA1lD,EAAA,iBAkBAg3D,GAAA70D,UAAA0M,OAAA/L,OAAA4iD,EAAAvjD,WACA60D,EAAA70D,UAAAmH,YAAA0tD,EACAj4D,EAAAD,QAAAk4D,EAQAA,EAAA70D,UAAA29C,aAAA,SAAA7I,GAEA,GAAA33C,KAAAg7D,mBAAArjB,EAEA,OAAA,CAGA33C,MAAAg7D,iBAAArjB,CAEA,IAAA8I,GAAAzgD,KAAA4oC,SAAAkV,WAAA99C,KAAAg7D,iBAGA,OAFAh7D,MAAA4oC,SAAAxmC,GAAA64D,UAAAxa,EAAA,GAAAA,EAAA,KAEA,KAGAya,iBAAA,KAAAC,IAAA,SAAAz6D,EAAAjB,EAAAD,GAaA,QAAAi4D,GAAA7uB,GAEAwd,EAAArlD,KAAAf,KAAA4oC,GAKA5oC,KAAA84D,eAEA94D,KAAA84D,YAAAnuD,MACAiuD,aAAAhwB,EAAA4mB,oBACA7yC,UACA41B,OAAA,OAMAvyC,KAAAo7D,eAUAp7D,KAAAq7D,YAAA,GAAA3qB,GAAAqC,UAAA,EAAA,EAAAnK,EAAAhlC,MAAAglC,EAAA/kC,QAOA7D,KAAAs7D,aAAA,KA/CA,GAAAlV,GAAA1lD,EAAA,kBACA4lD,EAAA5lD,EAAA,yBACAosC,EAAApsC,EAAA,kBACA66D,EAAA76D,EAAA,iBACAgwC,EAAAhwC,EAAA,gBA8CA+2D,GAAA50D,UAAA0M,OAAA/L,OAAA4iD,EAAAvjD,WACA40D,EAAA50D,UAAAmH,YAAAytD,EACAh4D,EAAAD,QAAAi4D,EAOAA,EAAA50D,UAAAs9C,gBAAA,WAEAngD,KAAAo7D,YAAAp6D,OAAA,CAEA,IAAAoB,GAAApC,KAAA4oC,SAAAxmC,EACApC,MAAAw7D,KAAA,GAAAD,GAAAn5D,IAOAq1D,EAAA50D,UAAAg2D,eAAA,SAAAC,GAEA94D,KAAA84D,YAAAA,GASArB,EAAA50D,UAAAoxC,WAAA,SAAA7a,EAAA+c,GAIA,GAAA5D,GAAAnZ,EAAAkc,WAAAlc,EAAAkc,WAAAkD,QAAApf,EAAAiS,WAKAkH,GAAA59B,EAAA,EAAA49B,EAAA59B,EACA49B,EAAAz6B,EAAA,EAAAy6B,EAAAz6B,EACAy6B,EAAA3uC,MAAA,EAAA2uC,EAAA3uC,MACA2uC,EAAA1uC,OAAA,EAAA0uC,EAAA1uC,MAIA,IAAA66C,GAAA,EAAAvI,EAAA,GAAAuI,OAOA,IANAnM,EAAA59B,GAAA+pC,EACAnM,EAAAz6B,GAAA4mC,EACAnM,EAAA3uC,OAAA,EAAA86C,EACAnM,EAAA1uC,QAAA,EAAA66C,EAGA1+C,KAAA4oC,SAAA4mB,oBAAA/yC,UACA,CAGA,GAAAA,GAAAzc,KAAA4oC,SAAA4mB,oBAAA/yC,SAEA81B,GAAA59B,GAAA8H,EAAAyuB,GACAqH,EAAAz6B,GAAA2E,EAAA0uB,GAEAnrC,KAAAy7D,cAAAlpB,GAEAA,EAAA59B,GAAA8H,EAAAyuB,GACAqH,EAAAz6B,GAAA2E,EAAA0uB,OAIAnrC,MAAAy7D,cAAAlpB,EAGA,IAAAA,EAAA3uC,MAAA,GAAA2uC,EAAA1uC,OAAA,EACA,CACA7D,KAAAs7D,aAAA/oB,CAEA,IAAAtuC,GAAAjE,KAAA07D,iBAEA17D,MAAA4oC,SAAA+yB,gBAAA13D,GAGAA,EAAAc,QAGA/E,KAAA84D,YAAAnuD,MACAiuD,aAAA30D,EACA0Y,OAAAw5B,QAOAn2C,MAAA84D,YAAAnuD,MACAiuD,aAAA,KACAj8C,OAAAw5B,KAUAshB,EAAA50D,UAAAyxC,UAAA,WAEA,GAAAsnB,GAAA57D,KAAA84D,YAAA7+C,MACA4hD,EAAA77D,KAAA84D,YAAA94D,KAAA84D,YAAA93D,OAAA,GAEAuoB,EAAAqyC,EAAAhD,YAGA,IAAAgD,EAAAhD,aAAA,CAKA,GAAA1wC,GAAA2zC,EAAAjD,aAGAx2D,EAAApC,KAAA4oC,SAAAxmC,EAGApC,MAAAs7D,aAAA/xC,EAAAujC,MAEA9sD,KAAAw7D,KAAAz/C,IAAA/b,KAAAq7D,YAAA9xC,EAAAujC,OAIA1qD,EAAAgB,WAAAhB,EAAAM,aAAA1C,KAAAw7D,KAAAM,cACA15D,EAAAgB,WAAAhB,EAAAmB,qBAAAvD,KAAAw7D,KAAA1xD,YAEA,IAAAqsC,GAAAylB,EAAAj/C,MAUA,IAPAva,EAAAsM,oBAAA1O,KAAA4oC,SAAAgmB,cAAAmN,cAAAt1D,WAAAq6C,gBAAA,EAAA1+C,EAAA4F,OAAA,EAAA,EAAA,GACA5F,EAAAsM,oBAAA1O,KAAA4oC,SAAAgmB,cAAAmN,cAAAt1D,WAAAyoD,cAAA,EAAA9sD,EAAA4F,OAAA,EAAA,EAAA,IACA5F,EAAAsM,oBAAA1O,KAAA4oC,SAAAgmB,cAAAmN,cAAAt1D,WAAAs6C,OAAA,EAAA3+C,EAAA4F,OAAA,EAAA,EAAA,IAGAhI,KAAA4oC,SAAA2X,iBAAAC,aAAA1T,EAAAW,YAAAC,QAEA,IAAAyI,EAAAn1C,OAGAm1C,EAAA,GAAAxvC,SAAAq1D,aAEA7lB,EAAA,GAAAxvC,SAAAq1D,WAAA7sD,MAAA,GAAAnP,KAAA4oC,SAAAhlC,MACAuyC,EAAA,GAAAxvC,SAAAq1D,WAAA7sD,MAAA,GAAAnP,KAAA4oC,SAAA/kC,OACAsyC,EAAA,GAAAxvC,SAAAq1D,WAAA7sD,MAAA,GAAAnP,KAAAw7D,KAAAS,SAAA,GACA9lB,EAAA,GAAAxvC,SAAAq1D,WAAA7sD,MAAA,GAAAnP,KAAAw7D,KAAAS,SAAA,IAGA9lB,EAAA,GAAAkkB,YAAAr6D,KAAA4oC,SAAArf,EAAArB,GACAloB,KAAAk8D,mBAAA3yC,OAIA,CAIA,IAAA,GAHA4yC,GAAA5yC,EACA6yC,EAAAp8D,KAAA07D,iBAAA,GAEA/6D,EAAA,EAAAA,EAAAw1C,EAAAn1C,OAAA,EAAAL,IACA,CACA,GAAAgc,GAAAw5B,EAAAx1C,EAGAgc,GAAAhW,SAAAq1D,aAEAr/C,EAAAhW,SAAAq1D,WAAA7sD,MAAA,GAAAnP,KAAA4oC,SAAAhlC,MACA+Y,EAAAhW,SAAAq1D,WAAA7sD,MAAA,GAAAnP,KAAA4oC,SAAA/kC,OACA8Y,EAAAhW,SAAAq1D,WAAA7sD,MAAA,GAAAnP,KAAAw7D,KAAAS,SAAA,GACAt/C,EAAAhW,SAAAq1D,WAAA7sD,MAAA,GAAAnP,KAAAw7D,KAAAS,SAAA,IAGAt/C,EAAA09C,YAAAr6D,KAAA4oC,SAAAuzB,EAAAC,EAEA,IAAAC,GAAAF,CACAA,GAAAC,EACAA,EAAAC,EAGAlmB,EAAAA,EAAAn1C,OAAA,GAAAq5D,YAAAr6D,KAAA4oC,SAAAuzB,EAAAj0C,GAEAloB,KAAAk8D,mBAAAC,GACAn8D,KAAAk8D,mBAAAE,GAGA,MAAAR,GAAAj/C,SASA86C,EAAA50D,UAAA64D,gBAAA,SAAA32D,GAEA,GAAA6zD,GAAA54D,KAAAo7D,YAAAnhD,OAAA,GAAAqsC,GAAAtmD,KAAA4oC,SAAAxmC,GAAApC,KAAAq7D,YAAAz3D,MAAA5D,KAAAq7D,YAAAx3D,OAAAipC,EAAAqC,YAAAvmC,OAAA5I,KAAA4oC,SAAA4G,WAAA1C,EAAAwC;AAQA,MAPAspB,GAAA9L,MAAA9sD,KAAAs7D,aAEAv2D,GAEA6zD,EAAA7zD,OAAA,GAGA6zD,GAOAnB,EAAA50D,UAAAq5D,mBAAA,SAAAtD,GAEA54D,KAAAo7D,YAAAzwD,KAAAiuD,IAUAnB,EAAA50D,UAAAw3D,YAAA,SAAAhtD,EAAAivD,EAAAC,EAAAx3D,GAEA,GAAA3C,GAAApC,KAAA4oC,SAAAxmC,EAEApC,MAAA4oC,SAAA+yB,gBAAAY,GAEAx3D,GAEAw3D,EAAAx3D,QAIA/E,KAAA4oC,SAAAgmB,cAAAS,UAAAhiD,GAGAA,EAAA1G,SAAA8oD,iBAAAtgD,MAAAnP,KAAA4oC,SAAA4mB,oBAAAC,iBAAA7O,SAAA,GAGAvzC,EAAAmvD,eAOAp6D,EAAA+F,cAAA/F,EAAAgG,UACAhG,EAAAiG,YAAAjG,EAAAkC,WAAAg4D,EAAAr4D,SAEA7B,EAAA4I,aAAA5I,EAAA4sC,UAAA,EAAA5sC,EAAA6I,eAAA,GACAjL,KAAA4oC,SAAAqY,aAUAwW,EAAA50D,UAAAi4D,sBAAA,SAAAxlB,EAAA4a,EAAAuM,GAEA,GAAAxxB,GAAAilB,EAAAjlB,eAAAye,KAAAhZ,EAAAG,OAAA8Y,aACA1lD,EAAAisD,EAAAJ,SAAAtS,YAEAkf,EAAAD,EAAAnpD,WAGAqpD,EAAA38D,KAAAq7D,YAAAx3D,OAAA7D,KAAAq7D,YAAAz3D,KAEA84D,GAAAjf,UAAAnI,EAAA3gC,EAAA3U,KAAAq7D,YAAAz3D,MAAA0xC,EAAAx9B,EAAA9X,KAAAq7D,YAAAx3D,QAEA64D,EAAA3rB,MAAA,EAAA4rB,EAEA,IAAAC,GAAA58D,KAAAq7D,YAAAz3D,MAAAK,EAAAL,MACAi5D,EAAA78D,KAAAq7D,YAAAx3D,OAAAI,EAAAJ,MAgBA,OAdAonC,GAAAC,IAAAjnC,EAAAL,MAAAg5D,EACA3xB,EAAAE,IAAAlnC,EAAAL,MAAAg5D,EAEA3xB,EAAAwe,SAEAiT,EAAAlT,QAAAve,GAGAyxB,EAAA3rB,MAAA,EAAA,EAAA4rB,GAEAD,EAAA3rB,MAAA6rB,EAAAC,GAEAH,EAAAjf,UAAAyS,EAAAnD,OAAAp4C,EAAAu7C,EAAAnD,OAAAj1C,GAEA4kD,GAuCAjF,EAAA50D,UAAA44D,cAAA,SAAAnmB,GAEAA,EAAA3gC,EAAA,IAEA2gC,EAAA1xC,OAAA0xC,EAAA3gC,EACA2gC,EAAA3gC,EAAA,GAGA2gC,EAAAx9B,EAAA,IAEAw9B,EAAAzxC,QAAAyxC,EAAAx9B,EACAw9B,EAAAx9B,EAAA,GAGAw9B,EAAA3gC,EAAA2gC,EAAA1xC,MAAA5D,KAAAq7D,YAAAz3D,QAEA0xC,EAAA1xC,MAAA5D,KAAAq7D,YAAAz3D,MAAA0xC,EAAA3gC,GAGA2gC,EAAAx9B,EAAAw9B,EAAAzxC,OAAA7D,KAAAq7D,YAAAx3D,SAEAyxC,EAAAzxC,OAAA7D,KAAAq7D,YAAAx3D,OAAAyxC,EAAAx9B,IASA2/C,EAAA50D,UAAAwC,OAAA,SAAAzB,EAAAC,GAEA7D,KAAAq7D,YAAAz3D,MAAAA,EACA5D,KAAAq7D,YAAAx3D,OAAAA,CAEA,KAAA,GAAAlD,GAAA,EAAAA,EAAAX,KAAAo7D,YAAAp6D,OAAAL,IAEAX,KAAAo7D,YAAAz6D,GAAA0E,OAAAzB,EAAAC,IAQA4zD,EAAA50D,UAAA0C,QAAA,WAEAvF,KAAAw7D,KAAAj2D,UAEA6gD,EAAAvjD,UAAA0C,QAAAxE,KAAAf,MAEAA,KAAA84D,YAAA,KACA94D,KAAA88D,QAAA,CAGA,KAAA,GAAAn8D,GAAA,EAAAA,EAAAX,KAAAo7D,YAAAp6D,OAAAL,IAEAX,KAAAo7D,YAAAz6D,GAAA4E,SAGAvF,MAAAo7D,YAAA,QAGA5G,iBAAA,GAAA9P,gBAAA,GAAAqY,gBAAA,GAAAC,wBAAA,GAAA9B,iBAAA,KAAA+B,IAAA,SAAAv8D,EAAAjB,EAAAD,GASA,QAAA83D,GAAA1uB,GAEAwd,EAAArlD,KAAAf,KAAA4oC,GAEA5oC,KAAAk9D,gBACAl9D,KAAAwc,SAAA,EACAxc,KAAAwU,MAAA,EAEAxU,KAAAm9D,iBAhBA,GAAA/W,GAAA1lD,EAAA,kBACA08D,EAAA18D,EAAA,8BAkBA42D,GAAAz0D,UAAA0M,OAAA/L,OAAA4iD,EAAAvjD,WACAy0D,EAAAz0D,UAAAmH,YAAAstD,EACA73D,EAAAD,QAAA83D,EAQAA,EAAAz0D,UAAAsxC,SAAA,SAAA/a,EAAAs7B,GAEAA,EAAAzwD,QAEAjE,KAAAq9D,eAAAjkC,EAAAs7B,GAIA10D,KAAAs9D,gBAAAlkC,EAAAs7B,IAWA4C,EAAAz0D,UAAAwxC,QAAA,SAAAjb,EAAAs7B,GAEAA,EAAAzwD,QAEAjE,KAAAu9D,cAAAnkC,EAAAs7B,GAIA10D,KAAAw9D,eAAApkC,EAAAs7B,IAUA4C,EAAAz0D,UAAAw6D,eAAA,SAAAjkC,EAAAs7B,GAEA,GAAA+I,GAAAz9D,KAAAm9D,cAAAljD,KAEAwjD,KAEAA,GAAA,GAAAL,GAAA1I,KAGA+I,EAAA,GAAA5C,WAAAnG,EACA10D,KAAA4oC,SAAAoL,cAAAC,WAAA7a,EAAAqkC,IAOAnG,EAAAz0D,UAAA06D,cAAA,WAEA,GAAApnB,GAAAn2C,KAAA4oC,SAAAoL,cAAAM,WAEAt0C,MAAAm9D,cAAAxyD,KAAAwrC,IAUAmhB,EAAAz0D,UAAAy6D,gBAAA,SAAAlkC,EAAAs7B,GAEA10D,KAAA4oC,SAAA2uB,eAAApjB,SAAAugB,IASA4C,EAAAz0D,UAAA26D,eAAA,SAAApkC,EAAAs7B,GAEA10D,KAAA4oC,SAAA2uB,eAAAljB,QAAAqgB,MAIAgJ,8BAAA,GAAAxC,iBAAA,KAAAyC,IAAA,SAAAj9D,EAAAjB,EAAAD,GAaA,QAAA6mD,GAAAzd,GAEAwd,EAAArlD,KAAAf,KAAA4oC,GAKA5oC,KAAA49D,UAAA,GAKA59D,KAAA+L,eAKA/L,KAAA6L,kBAEA,KAAA,GAAAlL,GAAA,EAAAA,EAAAX,KAAA49D,UAAAj9D,IAEAX,KAAA+L,YAAApL,IAAA,CAMAX,MAAA69D,SAMA79D,KAAA89D,WAAA,GAMA99D,KAAA+9D,cAAA,KAnDA,GAAA3X,GAAA1lD,EAAA,kBACAqwD,EAAArwD,EAAA,4BACAs9D,EAAAt9D,EAAA,qCACAk/C,EAAAl/C,EAAA,8BACAkqC,EAAAlqC,EAAA,iBAoDA2lD,GAAAxjD,UAAA0M,OAAA/L,OAAA4iD,EAAAvjD,WACAwjD,EAAAxjD,UAAAmH,YAAAq8C,EACAzb,EAAAynB,aAAAC,MAAAjM,GAEA5mD,EAAAD,QAAA6mD,EAMAA,EAAAxjD,UAAAs9C,gBAAA,WAEAngD,KAAAmyD,aAEA,IAAA/vD,GAAApC,KAAA4oC,SAAAxmC,EAGApC,MAAA49D,UAAAx7D,EAAAuJ,aAAAvJ,EAAAwJ,oBAEA5L,KAAA+L,cAEA,KAAA,GAAApL,GAAA,EAAAA,EAAAX,KAAA49D,UAAAj9D,IAEAX,KAAA+L,YAAApL,IAAA,CAIAX,MAAA+7D,cAAA,GAAAhL,GAAA/wD,MACAA,KAAAw/C,gBAAA,GAAAI,GAAA5/C,MACAA,KAAAy/C,uBAAA,GAAAue,GAAAh+D,OAQAqmD,EAAAxjD,UAAAo7D,WAAA,SAAAxyD,GAGA,GAAA9K,EAEA,KAAAA,EAAA,EAAAA,EAAAX,KAAA6L,gBAAA7K,OAAAL,IAEAX,KAAA6L,gBAAAlL,IAAA,CAIA,KAAA,GAAAF,KAAAgL,GAEAzL,KAAA6L,gBAAAJ,EAAAhL,KAAA,CAGA,IAAA2B,GAAApC,KAAA4oC,SAAAxmC,EAEA,KAAAzB,EAAA,EAAAA,EAAAX,KAAA+L,YAAA/K,OAAAL,IAEAX,KAAA+L,YAAApL,KAAAX,KAAA6L,gBAAAlL,KAEAX,KAAA+L,YAAApL,GAAAX,KAAA6L,gBAAAlL,GAEAX,KAAA+L,YAAApL,GAEAyB,EAAAqI,wBAAA9J,GAIAyB,EAAA4J,yBAAArL,KAWA0lD,EAAAxjD,UAAAwsD,UAAA,SAAAhiD,KAsBAg5C,EAAAxjD,UAAA0C,QAAA,WAEAvF,KAAAw/C,gBAAAj6C,UACAvF,KAAAy/C,uBAAAl6C,UACA6gD,EAAAvjD,UAAA0C,QAAAxE,KAAAf,MAEAA,KAAA6yD,iBAEA7yD,KAAA+L,YAAA,KAEA/L,KAAA6L,gBAAA,QAGAk3C,iBAAA,IAAAmb,oCAAA,GAAAC,6BAAA,GAAA5D,2BAAA,GAAAW,iBAAA,KAAAkD,IAAA,SAAA19D,EAAAjB,EAAAD,GASA,QAAA6+D,GAAAz1B,GAEAwd,EAAArlD,KAAAf,KAAA4oC,GACA5oC,KAAAi5D,iBAAA,KAXA,GAAA7S,GAAA1lD,EAAA,kBACAkqC,EAAAlqC,EAAA,iBAaA29D,GAAAx7D,UAAA0M,OAAA/L,OAAA4iD,EAAAvjD,WACAw7D,EAAAx7D,UAAAmH,YAAAq0D,EACA5+D,EAAAD,QAAA6+D,EAOAA,EAAAx7D,UAAAm2D,aAAA,SAAAC,GAEAj5D,KAAAi5D,iBAAAA,CAEA,IAAA72D,GAAApC,KAAA4oC,SAAAxmC,EAEA,KAAA62D,EAAAiE,aAAAl8D,OAEAoB,EAAAg2D,QAAAh2D,EAAAk8D,cAIAl8D,EAAAm2D,OAAAn2D,EAAAk8D,eAUAD,EAAAx7D,UAAA07D,YAAA,SAAA3gB,EAAAwC,GAEApgD,KAAA4oC,SAAAovB,oBAAAwG,qBAEA,IAAAp8D,GAAApC,KAAA4oC,SAAAxmC,GACAq8D,EAAAz+D,KAAAi5D,gBAEAj5D,MAAA0+D,aAAA9gB,EAAAwC,GAEA,IAAAqe,EAAAvB,aAAAl8D,SAEAoB,EAAAm2D,OAAAn2D,EAAAk8D,cACAl8D,EAAA2C,MAAA3C,EAAAu8D,oBACAF,EAAAjiD,SAAA,EACAiiD,EAAAjqD,MAAA,GAGAiqD,EAAAvB,aAAAvyD,KAAAy1C,EAEA,IAAAwe,GAAAH,EAAAjqD,KAEApS,GAAAy8D,WAAA,GAAA,GAAA,GAAA,GAEAz8D,EAAA08D,YAAA18D,EAAA28D,OAAA,EAAA,KACA38D,EAAA48D,UAAA58D,EAAA68D,KAAA78D,EAAA68D,KAAA78D,EAAA88D,QAIA,IAAA9e,EAAAK,MAEAr+C,EAAA4I,aAAA5I,EAAA8sC,aAAAkR,EAAAY,QAAAhgD,OAAA,EAAAoB,EAAA6I,eAAA,GAEAwzD,EAAAjiD,SAEApa,EAAA08D,YAAA18D,EAAA+8D,MAAA,IAAAP,EAAA,KACAx8D,EAAA48D,UAAA58D,EAAA68D,KAAA78D,EAAA68D,KAAA78D,EAAAg9D,QAIAh9D,EAAA08D,YAAA18D,EAAA+8D,MAAAP,EAAA,KACAx8D,EAAA48D,UAAA58D,EAAA68D,KAAA78D,EAAA68D,KAAA78D,EAAAi9D,OAIAj9D,EAAA4I,aAAA5I,EAAA8sC,aAAA,EAAA9sC,EAAA6I,eAAA,GAAAm1C,EAAAY,QAAAhgD,OAAA,IAEAy9D,EAAAjiD,QAEApa,EAAA08D,YAAA18D,EAAA+8D,MAAA,KAAAP,EAAA,GAAA,KAIAx8D,EAAA08D,YAAA18D,EAAA+8D,MAAAP,EAAA,EAAA,KAGAH,EAAAjiD,SAAAiiD,EAAAjiD,UAIAiiD,EAAAjiD,SAOApa,EAAA08D,YAAA18D,EAAA+8D,MAAAP,EAAA,KACAx8D,EAAA48D,UAAA58D,EAAA68D,KAAA78D,EAAA68D,KAAA78D,EAAAi9D,QANAj9D,EAAA08D,YAAA18D,EAAA+8D,MAAA,IAAAP,EAAA,KACAx8D,EAAA48D,UAAA58D,EAAA68D,KAAA78D,EAAA68D,KAAA78D,EAAAg9D,OAQAh9D,EAAA4I,aAAA5I,EAAA6sC,eAAAmR,EAAAY,QAAAhgD,OAAAoB,EAAA6I,eAAA,GAEAwzD,EAAAjiD,QAMApa,EAAA08D,YAAA18D,EAAA+8D,MAAAP,EAAA,EAAA,KAJAx8D,EAAA08D,YAAA18D,EAAA+8D,MAAA,KAAAP,EAAA,GAAA,MAQAx8D,EAAAy8D,WAAA,GAAA,GAAA,GAAA,GACAz8D,EAAA48D,UAAA58D,EAAA68D,KAAA78D,EAAA68D,KAAA78D,EAAA68D,MAEAR,EAAAjqD,SASA6pD,EAAAx7D,UAAA67D,aAAA,SAAA9gB,EAAAwC,GAGA,GAAAh+C,GAAApC,KAAA4oC,SAAAxmC,GAGAiL,EAAArN,KAAA4oC,SAAAmD,QAAA6R,SAAA4B,eAEA,KAAAY,EAAAK,OA+BAzgD,KAAA4oC,SAAA8X,WAAArzC,GAEAA,EAAA1G,SAAAg6C,kBAAA/C,EAAA3S,eAAA2V,SAAA,GACAvzC,EAAA1G,SAAA8wC,KAAA7M,EAAAiW,QAAAjD,EAAAnG,MACApqC,EAAA1G,SAAA8tC,MAAAmJ,EAAAlK,WAGAtxC,EAAAgB,WAAAhB,EAAAM,aAAA09C,EAAA59C,QAGA6K,EAAA5G,WAAAq6C,gBAAAz2C,QAAAjI,EAAA4F,OAAA,EAAA,GAAA,GACAqF,EAAA5G,WAAAs6C,OAAA12C,QAAAjI,EAAA4F,OAAA,EAAA,GAAA,GAEA5F,EAAAqI,wBAAA4C,EAAA5G,WAAAq6C,gBAAA74C,UACA7F,EAAAqI,wBAAA4C,EAAA5G,WAAAs6C,OAAA94C,UAGA7F,EAAAgB,WAAAhB,EAAAmB,qBAAA68C,EAAAt2C,eA6BAu0D,EAAAx7D,UAAAy8D,WAAA,SAAA1hB,EAAAwC,GAEA,GAAAh+C,GAAApC,KAAA4oC,SAAAxmC,GACAq8D,EAAAz+D,KAAAi5D,gBAMA,IAJAwF,EAAAvB,aAAAjjD,MAEAwkD,EAAAjqD,QAEA,IAAAiqD,EAAAvB,aAAAl8D,OAGAoB,EAAAg2D,QAAAh2D,EAAAk8D,kBAIA,CAEA,GAAAM,GAAAH,EAAAjqD,KAEAxU,MAAA0+D,aAAA9gB,EAAAwC,GAEAh+C,EAAAy8D,WAAA,GAAA,GAAA,GAAA,GAEA,IAAAze,EAAAK,MAEAge,EAAAjiD,SAAAiiD,EAAAjiD,QAEAiiD,EAAAjiD,SAEApa,EAAA08D,YAAA18D,EAAA+8D,MAAA,KAAAP,EAAA,GAAA,KACAx8D,EAAA48D,UAAA58D,EAAA68D,KAAA78D,EAAA68D,KAAA78D,EAAAi9D,QAIAj9D,EAAA08D,YAAA18D,EAAA+8D,MAAAP,EAAA,EAAA,KACAx8D,EAAA48D,UAAA58D,EAAA68D,KAAA78D,EAAA68D,KAAA78D,EAAAg9D,OAIAh9D,EAAA4I,aAAA5I,EAAA8sC,aAAA,EAAA9sC,EAAA6I,eAAA,GAAAm1C,EAAAY,QAAAhgD,OAAA,IAEAoB,EAAA08D,YAAA18D,EAAA28D,OAAA,EAAA,KACA38D,EAAA48D,UAAA58D,EAAA68D,KAAA78D,EAAA68D,KAAA78D,EAAA88D,QAGA98D,EAAA4I,aAAA5I,EAAA8sC,aAAAkR,EAAAY,QAAAhgD,OAAA,EAAAoB,EAAA6I,eAAA,GAEAjL,KAAA4oC,SAAAqY,WAAA,EAEAwd,EAAAjiD,QAMApa,EAAA08D,YAAA18D,EAAA+8D,MAAAP,EAAA,KAJAx8D,EAAA08D,YAAA18D,EAAA+8D,MAAA,IAAA,EAAA,OAWAV,EAAAjiD,SAOApa,EAAA08D,YAAA18D,EAAA+8D,MAAAP,EAAA,EAAA,KACAx8D,EAAA48D,UAAA58D,EAAA68D,KAAA78D,EAAA68D,KAAA78D,EAAAg9D,QANAh9D,EAAA08D,YAAA18D,EAAA+8D,MAAA,KAAAP,EAAA,GAAA,KACAx8D,EAAA48D,UAAA58D,EAAA68D,KAAA78D,EAAA68D,KAAA78D,EAAAi9D,OAQAj9D,EAAA4I,aAAA5I,EAAA6sC,eAAAmR,EAAAY,QAAAhgD,OAAAoB,EAAA6I,eAAA,GAEAjL,KAAA4oC,SAAAqY,YAEAwd,EAAAjiD,QAMApa,EAAA08D,YAAA18D,EAAA+8D,MAAAP,EAAA,KAJAx8D,EAAA08D,YAAA18D,EAAA+8D,MAAA,IAAA,EAAA,MAQA/8D,EAAAy8D,WAAA,GAAA,GAAA,GAAA,GACAz8D,EAAA48D,UAAA58D,EAAA68D,KAAA78D,EAAA68D,KAAA78D,EAAA68D,QAUAZ,EAAAx7D,UAAA0C,QAAA,WAEA6gD,EAAAvjD,UAAA0C,QAAAxE,KAAAf,MAEAA,KAAAi5D,iBAAAiE,aAAA,MAQAmB,EAAAx7D,UAAAsxC,SAAA,SAAAugB,GAEA10D,KAAA4oC,SAAA+U,kBAAA39C,KAAA4oC,SAAAmD,QAAA6R,UAGA8W,EAAA3qD,OAEA/J,KAAA4oC,SAAAmD,QAAA6R,SAAAyC,eAAAqU,EAAA10D,KAAA4oC,SAAAxmC,IAGAsyD,EAAA7c,OAAA73C,KAAA4oC,SAAAxmC,GAAAkJ,IAAAhJ,KAAAtB,QAKAhB,KAAAu+D,YAAA7J,EAAAA,EAAA7c,OAAA73C,KAAA4oC,SAAAxmC,GAAAkJ,IAAAhJ,KAAA,KAQA+7D,EAAAx7D,UAAAwxC,QAAA,SAAAqgB,GAEA10D,KAAA4oC,SAAA+U,kBAAA39C,KAAA4oC,SAAAmD,QAAA6R,UAEA59C,KAAAs/D,WAAA5K,EAAAA,EAAA7c,OAAA73C,KAAA4oC,SAAAxmC,GAAAkJ,IAAAhJ,KAAA,OAIAygD,iBAAA,IAAAmY,iBAAA,KAAAqE,IAAA,SAAA7+D,EAAAjB,EAAAD,GAMA,QAAA4mD,GAAAxd,GAOA5oC,KAAA4oC,SAAAA,EAEA5oC,KAAA4oC,SAAA5hB,GAAA,UAAAhnB,KAAAmgD,gBAAAngD,MAGAomD,EAAAvjD,UAAAmH,YAAAo8C,EACA3mD,EAAAD,QAAA4mD,EAMAA,EAAAvjD,UAAAs9C,gBAAA,aASAiG,EAAAvjD,UAAA0C,QAAA,WAEAvF,KAAA4oC,SAAA1hB,IAAA,UAAAlnB,KAAAmgD,gBAAAngD,MAEAA,KAAA4oC,SAAA,WAGA42B,IAAA,SAAA9+D,EAAAjB,EAAAD,GAWA,QAAAw+D,GAAApP,GAEAvoD,EAAAtF,KAAAf,KACA4uD,GAGA,kCAEA,kCACA,iCAEA,qBACA,uBACA,sBAEA,uBAEA,mBACA,2GACA,iDACA,KACAh+C,KAAA,OAGA,2BAEA,uBAEA,mBACA,4BACA,KACAA,KAAA,OAGA6mC,MAAAp1C,KAAA,KAAA8M,OAAA,EAAA,EAAA,IACAslC,OAAApyC,KAAA,KAAA8M,MAAA,GACAwpC,OAAAt2C,KAAA,KAAA8M,OAAA,EAAA,EAAA,IACAwxC,mBAAAt+C,KAAA,OAAA8M,MAAA,GAAAtH,cAAA,IACA4nD,kBAAAptD,KAAA,OAAA8M,MAAA,GAAAtH,cAAA,MAIAi5C,gBAAA,IApDA,GAAAz6C,GAAA3F,EAAA,WAyDAs9D,GAAAn7D,UAAA0M,OAAA/L,OAAA6C,EAAAxD,WACAm7D,EAAAn7D,UAAAmH,YAAAg0D,EACAv+D,EAAAD,QAAAw+D,IAEAyB,WAAA,KAAAC,IAAA,SAAAh/D,EAAAjB,EAAAD,GAWA,QAAAogD,GAAAgP,GAEAvoD,EAAAtF,KAAAf,KACA4uD,GAGA,kCACA,yBAEA,kCACA,iCAEA,uBACA,uBACA,qBAEA,uBAEA,mBACA,2GACA,kDACA,KACAh+C,KAAA,OAGA,2BAEA,uBAEA,mBACA,4BACA,KACAA,KAAA,OAGA6mC,MAAAp1C,KAAA,KAAA8M,OAAA,EAAA,EAAA,IACAslC,OAAApyC,KAAA,KAAA8M,MAAA,GACAwxC,mBAAAt+C,KAAA,OAAA8M,MAAA,GAAAtH,cAAA,IACA4nD,kBAAAptD,KAAA,OAAA8M,MAAA,GAAAtH,cAAA,MAIAi5C,gBAAA,EACAC,OAAA,IArDA,GAAA16C,GAAA3F,EAAA,WA0DAk/C,GAAA/8C,UAAA0M,OAAA/L,OAAA6C,EAAAxD,WACA+8C,EAAA/8C,UAAAmH,YAAA41C,EACAngD,EAAAD,QAAAogD,IAEA6f,WAAA,KAAAE,IAAA,SAAAj/D,EAAAjB,EAAAD,GAeA,QAAA6G,GAAAuoD,EAAAtoD,EAAAC,EAAAI,EAAAF,GAEA,IAAAH,IAAAC,EAEA,KAAA,IAAA3F,OAAA,2DAQAZ,MAAA62D,IAAAjsB,EAAAisB,MAOA72D,KAAAoC,GAAAwsD,EAAAhmB,SAAAxmC,GAGApC,KAAA4uD,cAAAA,EAQA5uD,KAAAwG,QAAA,KAOAxG,KAAA2G,SAAAA,MAOA3G,KAAAyG,WAAAA,MAOAzG,KAAA4/D,aAAA,EAOA5/D,KAAAsG,UAAAA,EAOAtG,KAAAuG,YAAAA,EAEAvG,KAAA6/D,OAhFA,GAAAj1B,GAAAlqC,EAAA,iBAmFA2F,GAAAxD,UAAAmH,YAAA3D,EACA5G,EAAAD,QAAA6G,EAMAA,EAAAxD,UAAAg9D,KAAA,WAEA7/D,KAAA8/D,UAEA9/D,KAAAoC,GAAAwE,WAAA5G,KAAAwG,SAEAxG,KAAA+/D,sBAAAxwD,OAAAC,KAAAxP,KAAA2G,WACA3G,KAAAggE,wBAAAzwD,OAAAC,KAAAxP,KAAAyG,cAQAJ,EAAAxD,UAAAk9D,sBAAA,SAAAvwD,GAEA,IAAA,GAAA7O,GAAA,EAAAA,EAAA6O,EAAAxO,SAAAL,EAEAX,KAAA2G,SAAA6I,EAAA7O,IAAAgvD,UAAA3vD,KAAAoC,GAAA8M,mBAAAlP,KAAAwG,QAAAgJ,EAAA7O,KASA0F,EAAAxD,UAAAm9D,wBAAA,SAAAxwD,GAEA,IAAA,GAAA7O,GAAA,EAAAA,EAAA6O,EAAAxO,SAAAL,EAEAX,KAAAyG,WAAA+I,EAAA7O,IAAAX,KAAAoC,GAAAqM,kBAAAzO,KAAAwG,QAAAgJ,EAAA7O,KAuBA0F,EAAAxD,UAAAi9D,QAAA,WAEA,GAAA19D,GAAApC,KAAAoC,GAEA8J,EAAAlM,KAAAigE,WAAA79D,EAAAgK,cAAApM,KAAAsG,WACA+F,EAAArM,KAAAigE,WAAA79D,EAAAkK,gBAAAtM,KAAAuG,aAEAC,EAAApE,EAAAmK,eA2BA,OAzBAnK,GAAAoK,aAAAhG,EAAA0F,GACA9J,EAAAoK,aAAAhG,EAAA6F,GACAjK,EAAAqK,YAAAjG,GAGApE,EAAAsK,oBAAAlG,EAAApE,EAAAuK,eAEAC,QAAAC,MAAA,+CACAD,QAAAC,MAAA,qBAAAzK,EAAAsK,oBAAAlG,EAAApE,EAAA0K,kBACAF,QAAAC,MAAA,gBAAAzK,EAAA2K,YAGA,KAAA3K,EAAA4K,kBAAAxG,IAEAoG,QAAAK,KAAA,0CAAA7K,EAAA4K,kBAAAxG,IAGApE,EAAA8K,cAAA1G,GACAA,EAAA,MAIApE,EAAA+K,aAAAjB,GACA9J,EAAA+K,aAAAd,GAEArM,KAAAwG,QAAAA,GAQAH,EAAAxD,UAAAy3D,YAAA,SAAAxqD,GAEA,GAGAnP,GAAAoqD,EAHA9iD,EAAA6H,EAAA6/C,UACAxgD,EAAAW,EAAAX,MACA/M,EAAApC,KAAAoC,EAGA,QAAA0N,EAAAzN,MAEA,IAAA,IACA,IAAA,OACA,IAAA,UACAD,EAAA89D,UAAAj4D,EAAAkH,EAAA,EAAA,EACA,MAGA,KAAA,IACA,IAAA,KACA/M,EAAA89D,UAAAj4D,EAAAkH,EACA,MAGA,KAAA,IACA,IAAA,KACA/M,EAAAwtD,UAAA3nD,EAAAkH,EACA,MAGA,KAAA,KACA/M,EAAA+9D,UAAAl4D,EAAAkH,EAAA,GAAAA,EAAA,GACA,MAGA,KAAA,KACA/M,EAAAg+D,UAAAn4D,EAAAkH,EAAA,GAAAA,EAAA,GAAAA,EAAA,GACA,MAGA,KAAA,KACA/M,EAAAi+D,UAAAp4D,EAAAkH,EAAA,GAAAA,EAAA,GAAAA,EAAA,GAAAA,EAAA,GACA,MAGA,KAAA,KACA/M,EAAA+9D,UAAAl4D,EAAAkH,EAAAwF,EAAAxF,EAAA2I,EACA,MAGA,KAAA,KACA1V,EAAAg+D,UAAAn4D,EAAAkH,EAAAwF,EAAAxF,EAAA2I,EAAA3I,EAAA4lB,EACA,MAGA,KAAA,KACA3yB,EAAAi+D,UAAAp4D,EAAAkH,EAAAwF,EAAAxF,EAAA2I,EAAA3I,EAAA4lB,EAAA5lB,EAAAsK,EACA,MAGA,KAAA,MACArX,EAAAk+D,WAAAr4D,EAAAkH,EACA,MAGA,KAAA,MACA/M,EAAAm+D,WAAAt4D,EAAAkH,EACA,MAGA,KAAA,MACA/M,EAAAo+D,WAAAv4D,EAAAkH,EACA,MAGA,KAAA,MACA/M,EAAAq+D,WAAAx4D,EAAAkH,EACA,MAGA,KAAA,MACA/M,EAAAs+D,WAAAz4D,EAAAkH,EACA,MAGA,KAAA,MACA/M,EAAAu+D,WAAA14D,EAAAkH,EACA,MAGA,KAAA,MACA/M,EAAAw+D,WAAA34D,EAAAkH,EACA,MAGA,KAAA,MACA/M,EAAAy+D,WAAA54D,EAAAkH,EACA,MAGA,KAAA,KACA,IAAA,OACA,IAAA,YACA/M,EAAA0+D,iBAAA74D,EAAA6H,EAAAi5C,UAAA55C,EACA,MAGA,KAAA,KACA,IAAA,OACA,IAAA,YAEA/M,EAAAstD,iBAAAznD,EAAA6H,EAAAi5C,UAAA55C,EACA,MAGA,KAAA,KACA,IAAA,OACA,IAAA,YACA/M,EAAA2+D,iBAAA94D,EAAA6H,EAAAi5C,UAAA55C,EACA,MAGA,KAAA,IACA,gBAAAA,KAEAA,EAAAy7B,EAAAiW,QAAA1xC,IAGA/M,EAAAg+D,UAAAn4D,EAAAkH,EAAA,GAAAA,EAAA,GAAAA,EAAA,GACA,MAGA,KAAA,MACA/M,EAAAk+D,WAAAr4D,EAAAkH,EACA,MAGA,KAAA,KACA/M,EAAAo+D,WAAAv4D,EAAAkH,EACA,MAGA,KAAA,MACA/M,EAAAs+D,WAAAz4D,EAAAkH,EACA,MAGA,KAAA,KACA/M,EAAAw+D,WAAA34D,EAAAkH,EACA,MAGA,KAAA,MAMA,IALAW,EAAAkxD,SAEAlxD,EAAAkxD,OAAA,GAAAn5D,cAAA,EAAAsH,EAAAnO,SAGAL,EAAA,EAAAoqD,EAAA57C,EAAAnO,OAAA+pD,EAAApqD,IAAAA,EAEAmP,EAAAkxD,OAAA,EAAArgE,GAAAwO,EAAAxO,GAAAgU,EACA7E,EAAAkxD,OAAA,EAAArgE,EAAA,GAAAwO,EAAAxO,GAAAmX,CAGA1V,GAAAu+D,WAAA14D,EAAA6H,EAAAkxD,OACA,MAGA,KAAA,MAMA,IALAlxD,EAAAkxD,SAEAlxD,EAAAkxD,OAAA,GAAAn5D,cAAA,EAAAsH,EAAAnO,SAGAL,EAAA,EAAAoqD,EAAA57C,EAAAnO,OAAA+pD,EAAApqD,IAAAA,EAEAmP,EAAAkxD,OAAA,EAAArgE,GAAAwO,EAAAxO,GAAAgU,EACA7E,EAAAkxD,OAAA,EAAArgE,EAAA,GAAAwO,EAAAxO,GAAAmX,EACAhI,EAAAkxD,OAAA,EAAArgE,EAAA,GAAAwO,EAAAxO,GAAAo0B,CAIA3yB,GAAAw+D,WAAA34D,EAAA6H,EAAAkxD,OACA,MAGA,KAAA,MAMA,IALAlxD,EAAAkxD,SAEAlxD,EAAAkxD,OAAA,GAAAn5D,cAAA,EAAAsH,EAAAnO,SAGAL,EAAA,EAAAoqD,EAAA57C,EAAAnO,OAAA+pD,EAAApqD,IAAAA,EAEAmP,EAAAkxD,OAAA,EAAArgE,GAAAwO,EAAAxO,GAAAgU,EACA7E,EAAAkxD,OAAA,EAAArgE,EAAA,GAAAwO,EAAAxO,GAAAmX,EACAhI,EAAAkxD,OAAA,EAAArgE,EAAA,GAAAwO,EAAAxO,GAAAo0B,EACAjlB,EAAAkxD,OAAA,EAAArgE,EAAA,GAAAwO,EAAAxO,GAAA8Y,CAIArX,GAAAy+D,WAAA54D,EAAA6H,EAAAkxD,OACA,MAGA,KAAA,IACA,IAAA,YAEA,IAAAlxD,EAAAX,QAAAW,EAAAX,MAAAquC,YAAAmZ,UAEA,KAIAv0D,GAAA+F,cAAA/F,EAAA,UAAApC,KAAA4/D,cAEA,IAAA37D,GAAA6L,EAAAX,MAAAquC,YAAAuS,YAAA3tD,EAAAkJ,GAEArH,KAEAjE,KAAAihE,cAAAnxD,GAGA7L,EAAA6L,EAAAX,MAAAquC,YAAAuS,YAAA3tD,EAAAkJ,KAIAlJ,EAAAiG,YAAAjG,EAAAkC,WAAAL,GAGA7B,EAAA89D,UAAApwD,EAAA6/C,UAAA3vD,KAAA4/D,cAGA5/D,KAAA4/D,cAEA,MAEA,SACAhzD,QAAAK,KAAA,iDAAA6C,EAAAzN,QAQAgE,EAAAxD,UAAA25D,aAAA,WAEAx8D,KAAA4/D,aAAA,CAEA,KAAA,GAAA7qD,KAAA/U,MAAA2G,SAEA3G,KAAAs6D,YAAAt6D,KAAA2G,SAAAoO,KASA1O,EAAAxD,UAAAo+D,cAAA,SAAAnxD,GAEA,GAAA1N,GAAApC,KAAAoC,GAEA6B,EAAA6L,EAAAX,MAAAquC,WAEA,IAAAv5C,EAAA0yD,UAOA,GAAA7mD,EAAAoxD,YACA,CAGA,GAAA5+D,GAAAwN,EAAAoxD,WAEAj9D,GAAA8rD,YAAA3tD,EAAAkJ,IAAAlJ,EAAA+E,gBAEA/E,EAAAiG,YAAAjG,EAAAkC,WAAAL,EAAA8rD,YAAA3tD,EAAAkJ,KAEAlJ,EAAAqF,YAAArF,EAAAsF,+BAAAzD,EAAAozD,oBAWAj1D,EAAAuF,WAAAvF,EAAAkC,WAAA,EAAAhC,EAAA6+D,UAAA/+D,EAAAg/D,UAAAh/D,EAAAkF,KAAAlF,EAAAkF,KAAAlF,EAAAmF,cAAAtD,EAAAuD,QAEApF,EAAAoG,cAAApG,EAAAkC,WAAAlC,EAAA2G,mBAAAzG,EAAAwG,UAAAxG,EAAAwG,UAAA1G,EAAAwG,QACAxG,EAAAoG,cAAApG,EAAAkC,WAAAlC,EAAAqG,mBAAAnG,EAAA++D,MAAA/+D,EAAA++D,MAAAj/D,EAAAgH,eAEAhH,EAAAoG,cAAApG,EAAAkC,WAAAlC,EAAAiH,eAAA/G,EAAA++D,MAAA/+D,EAAA++D,MAAAj/D,EAAAgH,eACAhH,EAAAoG,cAAApG,EAAAkC,WAAAlC,EAAA+G,eAAA7G,EAAAg/D,MAAAh/D,EAAAg/D,MAAAl/D,EAAAgH,mBAIApJ,MAAA4uD,cAAAhmB,SAAAonB,cAAA/rD,IAQAoC,EAAAxD,UAAA0C,QAAA,WAEAvF,KAAAoC,GAAA8K,cAAAlN,KAAAwG,SAEAxG,KAAAoC,GAAA,KACApC,KAAA2G,SAAA,KACA3G,KAAAyG,WAAA,KAEAzG,KAAAsG,UAAA,KACAtG,KAAAuG,YAAA,MAGAF,EAAAxD,UAAAo9D,WAAA,SAAA59D,EAAA+K,GAEA,GAAAC,GAAArN,KAAAoC,GAAAkL,aAAAjL,EAKA,OAHArC,MAAAoC,GAAAmL,aAAAF,EAAAD,GACApN,KAAAoC,GAAA+J,cAAAkB,GAEArN,KAAAoC,GAAAoL,mBAAAH,EAAArN,KAAAoC,GAAAqL,gBAMAJ,GAJAT,QAAAc,IAAA1N,KAAAoC,GAAAuL,iBAAAN,IACA,SAMA01C,iBAAA,MAAAwe,IAAA,SAAA7gE,EAAAjB,EAAAD,GAaA,QAAAuxD,GAAAnC,EAAAtoD,EAAAC,EAAAi7D,EAAAC,GAEA,GAAA96D,IAEA+6D,UAAAr/D,KAAA,YAAA8M,MAAA,GACAsgD,kBAAAptD,KAAA,OAAA8M,MAAA,GAAAtH,eAAA,EAAA,EAAA,EACA,EAAA,EAAA,EACA,EAAA,EAAA,KAGA,IAAA25D,EAEA,IAAA,GAAAhhE,KAAAghE,GAEA76D,EAAAnG,GAAAghE,EAAAhhE,EAKA,IAAAiG,IACAq6C,gBAAA,EACAoO,cAAA,EACAnO,OAAA,EAGA,IAAA0gB,EAEA,IAAA,GAAAhhE,KAAAghE,GAEAh7D,EAAAhG,GAAAghE,EAAAhhE,EASA6F,GAAAA,GAAAyqD,EAAAmJ,iBAOA3zD,EAAAA,GAAAwqD,EAAAoJ,mBAEA9zD,EAAAtF,KAAAf,KAAA4uD,EAAAtoD,EAAAC,EAAAI,EAAAF,GA3DA,GAAAJ,GAAA3F,EAAA,WA+DAqwD,GAAAluD,UAAA0M,OAAA/L,OAAA6C,EAAAxD,WACAkuD,EAAAluD,UAAAmH,YAAA+mD,EACAtxD,EAAAD,QAAAuxD,EAQAA,EAAAmJ,kBACA,wBACA,kCACA,gCACA,yBAEA,iCAEA,8BACA,uBAEA,mBACA,uFACA,oCACA,qDACA,KACAtpD,KAAA,MAQAmgD,EAAAoJ,oBACA,wBAEA,8BACA,uBAEA,8BAEA,mBACA,kEACA,KACAvpD,KAAA,QAEA6uD,WAAA,KAAAkC,IAAA,SAAAjhE,EAAAjB,EAAAD,GAaA,QAAAuxD,GAAA3uD,GAOAkE,UAAAyqD,EAAAmJ,iBAOA3zD,YAAAwqD,EAAAoJ,mBAEA9zD,EAAAtF,KAAAf,KAAAoC,EAAAkE,UAAAC,aA5BA,GAAAF,GAAA3F,EAAA,gBAAAY,QAiCAyvD,GAAAluD,UAAA0M,OAAA/L,OAAA6C,EAAAxD,WACAkuD,EAAAluD,UAAAmH,YAAA+mD,EACAtxD,EAAAD,QAAAuxD,EAQAA,EAAAmJ,kBACA,wBACA,kCACA,gCACA,yBAEA,iCAEA,8BACA,uBAEA,mBACA,uFACA,oCACA,qDACA,KACAtpD,KAAA,MAQAmgD,EAAAoJ,oBACA,wBAEA,8BACA,uBAEA,8BAEA,mBACA,kEACA,KACAvpD,KAAA,QAEAi2B,eAAA,IAAA+6B,IAAA,SAAAlhE,EAAAjB,EAAAD,GAWA,QAAA8/C,GAAA1W,GAEAwd,EAAArlD,KAAAf,KAAA4oC,GAZA,GAAAwd,GAAA1lD,EAAA,2BAgBA4+C,GAAAz8C,UAAA0M,OAAA/L,OAAA4iD,EAAAvjD,WACAy8C,EAAAz8C,UAAAmH,YAAAs1C,EACA7/C,EAAAD,QAAA8/C,EAMAA,EAAAz8C,UAAA2H,MAAA,aASA80C,EAAAz8C,UAAAmxB,KAAA,WAEAh0B,KAAA+zC,SAOAuL,EAAAz8C,UAAAkxC,MAAA,aAUAuL,EAAAz8C,UAAA4vC,OAAA,SAAA59B,OAKAgtD,2BAAA,KAAAC,IAAA,SAAAphE,EAAAjB,EAAAD,GAQA,QAAA+7D,GAAAn5D,GAOApC,KAAAoC,GAAAA,EASApC,KAAAi8D,SAAA,GAAAp0D,eACA,EAAA,EACA,IAAA,EACA,IAAA,IACA,EAAA,MAQA7H,KAAAosD,IAAA,GAAAvkD,eACA,EAAA,EACA,EAAA,EACA,EAAA,EACA,EAAA,IAUA7H,KAAA+hE,OAAA,GAAAl6D,eACA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,IAMA7H,KAAAghD,QAAA,GAAAqB,cACA,EAAA,EAAA,EAAA,EAAA,EAAA,IAMAriD,KAAA87D,aAAA15D,EAAAK,eAKAzC,KAAA8J,YAAA1H,EAAAK,eAEAL,EAAAgB,WAAAhB,EAAAM,aAAA1C,KAAA87D,cACA15D,EAAAe,WAAAf,EAAAM,aAAA,IAAAN,EAAA8rD,cAEA9rD,EAAAgB,WAAAhB,EAAAmB,qBAAAvD,KAAA8J,aACA1H,EAAAe,WAAAf,EAAAmB,qBAAAvD,KAAAghD,QAAA5+C,EAAAO,aAEA3C,KAAA4C,SAGA24D,EAAA14D,UAAAmH,YAAAuxD,EAOAA,EAAA14D,UAAAkZ,IAAA,SAAAwuB,EAAAy3B,GAEA,GAAArtD,GAAA,EACAmD,EAAA,CAEA9X,MAAAosD,IAAA,GAAAz3C,EACA3U,KAAAosD,IAAA,GAAAt0C,EAEA9X,KAAAosD,IAAA,GAAAz3C,EAAAqtD,EAAAp+D,MAAA2mC,EAAA3mC,MACA5D,KAAAosD,IAAA,GAAAt0C,EAEA9X,KAAAosD,IAAA,GAAAz3C,EAAAqtD,EAAAp+D,MAAA2mC,EAAA3mC,MACA5D,KAAAosD,IAAA,GAAAt0C,EAAAkqD,EAAAn+D,OAAA0mC,EAAA1mC,OAEA7D,KAAAosD,IAAA,GAAAz3C,EACA3U,KAAAosD,IAAA,GAAAt0C,EAAAkqD,EAAAn+D,OAAA0mC,EAAA1mC,OAGA8Q,EAAAqtD,EAAArtD,EACAmD,EAAAkqD,EAAAlqD,EAEA9X,KAAAi8D,SAAA,GAAAtnD,EACA3U,KAAAi8D,SAAA,GAAAnkD,EAEA9X,KAAAi8D,SAAA,GAAAtnD,EAAAqtD,EAAAp+D,MACA5D,KAAAi8D,SAAA,GAAAnkD,EAEA9X,KAAAi8D,SAAA,GAAAtnD,EAAAqtD,EAAAp+D,MACA5D,KAAAi8D,SAAA,GAAAnkD,EAAAkqD,EAAAn+D,OAEA7D,KAAAi8D,SAAA,GAAAtnD,EACA3U,KAAAi8D,SAAA,GAAAnkD,EAAAkqD,EAAAn+D,OAEA7D,KAAA4C,UAMA24D,EAAA14D,UAAAD,OAAA,WAEA,GAAAR,GAAApC,KAAAoC,EAGAA,GAAAgB,WAAAhB,EAAAM,aAAA1C,KAAA87D,cAEA15D,EAAAc,cAAAd,EAAAM,aAAA,EAAA1C,KAAAi8D,UAEA75D,EAAAc,cAAAd,EAAAM,aAAA,GAAA1C,KAAAosD,KAEAhqD,EAAAc,cAAAd,EAAAM,aAAA,GAAA1C,KAAA+hE,SAGAxG,EAAA14D,UAAA0C,QAAA,WAEA,GAAAnD,GAAApC,KAAAoC,EAEAA,GAAAkgD,aAAAtiD,KAAA87D,cACA15D,EAAAkgD,aAAAtiD,KAAA8J,cAGArK,EAAAD,QAAA+7D,OAIA0G,IAAA,SAAAvhE,EAAAjB,EAAAD,GACA,GAAAkxC,GAAAhwC,EAAA,iBAEAosC,GADApsC,EAAA,kBACAA,EAAA,mBAEAa,EAAAb,EAAA,gBAAAa,UACAF,EAAAX,EAAA,gBAAAW,cAEA6gE,EAAAxhE,EAAA,sBAgBA4lD,EAAA,SAAAlkD,EAAAwB,EAAAC,EAAAyuC,EAAA9C,EAAAl1B,GAmHA,GA1GAta,KAAAoC,GAAAA,EASApC,KAAAmiE,YAAA,KAOAniE,KAAAiE,QAAA,KAEAjE,KAAAiF,YAAA,EAAA,EAAA,EAAA,GAOAjF,KAAA+K,KAAA,GAAA2lC,GAAAqC,UAAA,EAAA,EAAA,EAAA,GAOA/yC,KAAAwvC,WAAAA,GAAA1C,EAAAuC,WAOArvC,KAAAyvD,iBAAA,GAAA/e,GAAAG,OAOA7wC,KAAAyc,UAAA,KAOAzc,KAAA8sD,MAAA,KAOA9sD,KAAAoiE,cAAA,KAOApiE,KAAAi5D,iBAAA,GAAAiJ,GAOAliE,KAAA84D,cAEAF,aAAA54D,KACA2c,UACA41B,OAAAvyC,KAAA+K,OAYA/K,KAAAsyC,UAAAA,GAAAxF,EAAAqC,YAAA9M,QAOAriC,KAAAsa,KAAAA,EAEAta,KAAAmiE,YAAA9gE,EAAAoE,WAAArD,EAAA,IAAA,KACApC,KAAAmiE,aAAAniE,KAAAmiE,YAAA/8D,SAMApF,KAAAsa,KAsBAta,KAAAmiE,YAAAr+D,YAAA,SArBA,CAOA,GAAAG,GAAA,GAAA1C,GAAAa,EAEA6B,GAAAiF,sBACAjF,EAAA2B,kBAEA5F,KAAAmiE,YAAAj+D,cAAAD,GAIAjE,KAAAiE,QAAAA,EAAAA,QAQAjE,KAAAqF,OAAAzB,EAAAC,GAGAyiD,GAAAzjD,UAAAmH,YAAAs8C,EACA7mD,EAAAD,QAAA8mD,EAOAA,EAAAzjD,UAAAkC,MAAA,SAAAE,GAEA,GAAA61C,GAAA71C,GAAAjF,KAAAiF,UACAjF,MAAAmiE,YAAAp9D,MAAA+1C,EAAA,GAAAA,EAAA,GAAAA,EAAA,GAAAA,EAAA,KAOAwL,EAAAzjD,UAAA27D,oBAAA,WAOAx+D,KAAAsa,MAEAta,KAAAmiE,YAAA59D,iBAQA+hD,EAAAzjD,UAAAqH,SAAA,WAGA,GAAA9H,GAAApC,KAAAoC,EAEApC,MAAAmiE,YAAAn/D,MAGA,IAAAq/D,GAAAriE,KAAA8sD,OAAA9sD,KAAA+K,IAGA/K,MAAAsiE,oBAAAD,GAEAriE,KAAAyc,WAEAzc,KAAAyvD,iBAAAtG,OAAAnpD,KAAAyc,WAGAra,EAAAmgE,SAAA,EAAA,EAAAF,EAAAz+D,MAAA5D,KAAAwvC,WAAA6yB,EAAAx+D,OAAA7D,KAAAwvC,aAOA8W,EAAAzjD,UAAAy/D,oBAAA,SAAAD,GAEA,GAAAG,GAAAxiE,KAAAyvD,gBAEA+S,GAAAlvD,WAEAtT,KAAAsa,MAUAkoD,EAAA/hE,EAAA,EAAA4hE,EAAAz+D,MAAA,EACA4+D,EAAAp3B,EAAA,GAAAi3B,EAAAx+D,OAAA,EAEA2+D,EAAAt3B,GAAA,GAAAm3B,EAAA1tD,EAAA6tD,EAAA/hE,EACA+hE,EAAAr3B,GAAA,EAAAk3B,EAAAvqD,EAAA0qD,EAAAp3B,IAZAo3B,EAAA/hE,EAAA,EAAA4hE,EAAAz+D,MAAA,EACA4+D,EAAAp3B,EAAA,EAAAi3B,EAAAx+D,OAAA,EAEA2+D,EAAAt3B,GAAA,GAAAm3B,EAAA1tD,EAAA6tD,EAAA/hE,EACA+hE,EAAAr3B,GAAA,GAAAk3B,EAAAvqD,EAAA0qD,EAAAp3B,IAkBAkb,EAAAzjD,UAAAwC,OAAA,SAAAzB,EAAAC,GAKA,GAHAD,EAAA,EAAAA,EACAC,EAAA,EAAAA,EAEA7D,KAAA+K,KAAAnH,QAAAA,GAAA5D,KAAA+K,KAAAlH,SAAAA,EAAA,CAKA7D,KAAA+K,KAAAnH,MAAAA,EACA5D,KAAA+K,KAAAlH,OAAAA,EAEA7D,KAAAmiE,YAAA98D,OAAAzB,EAAA5D,KAAAwvC,WAAA3rC,EAAA7D,KAAAwvC,WAEA,IAAA6yB,GAAAriE,KAAA8sD,OAAA9sD,KAAA+K,IAEA/K,MAAAsiE,oBAAAD,KAOA/b,EAAAzjD,UAAA0C,QAAA,WAEAvF,KAAAoC,EAEApC,MAAAmiE,YAAA58D,UAEAvF,KAAAmiE,YAAA,KACAniE,KAAAiE,QAAA,QAGAuwD,iBAAA,GAAA9P,gBAAA,GAAA3B,iBAAA,IAAA0f,qBAAA,GAAA57B,eAAA,IAAA67B,IAAA,SAAAhiE,EAAAjB,EAAAD,GAMA,QAAA0iE,KAOAliE,KAAAk9D,gBAOAl9D,KAAAwc,SAAA,EAOAxc,KAAAwU,MAAA,EAGA0tD,EAAAr/D,UAAAmH,YAAAk4D,EACAziE,EAAAD,QAAA0iE,OAEAS,IAAA,SAAAjiE,EAAAjB,EAAAD,GAQA,QAAAo4D,GAAAx1D,EAAAyS,GAwBA,MAtBAA,GAAAA,MAIAA,EAAAi4B,MAAAW,YAAAC,SAAAtrC,EAAAwgE,IAAAxgE,EAAAygE,qBACAhuD,EAAAi4B,MAAAW,YAAAE,MAAAvrC,EAAA0gE,UAAA1gE,EAAA2gE,WACAluD,EAAAi4B,MAAAW,YAAAG,WAAAxrC,EAAA4gE,UAAA5gE,EAAAygE,qBACAhuD,EAAAi4B,MAAAW,YAAAI,SAAAzrC,EAAA0gE,UAAA1gE,EAAAwgE,KACA/tD,EAAAi4B,MAAAW,YAAAK,UAAA1rC,EAAAwgE,IAAAxgE,EAAAygE,qBACAhuD,EAAAi4B,MAAAW,YAAAM,SAAA3rC,EAAAwgE,IAAAxgE,EAAAygE,qBACAhuD,EAAAi4B,MAAAW,YAAAO,UAAA5rC,EAAAwgE,IAAAxgE,EAAAygE,qBACAhuD,EAAAi4B,MAAAW,YAAAQ,cAAA7rC,EAAAwgE,IAAAxgE,EAAAygE,qBACAhuD,EAAAi4B,MAAAW,YAAAS,aAAA9rC,EAAAwgE,IAAAxgE,EAAAygE,qBACAhuD,EAAAi4B,MAAAW,YAAAU,aAAA/rC,EAAAwgE,IAAAxgE,EAAAygE,qBACAhuD,EAAAi4B,MAAAW,YAAAW,aAAAhsC,EAAAwgE,IAAAxgE,EAAAygE,qBACAhuD,EAAAi4B,MAAAW,YAAAY,aAAAjsC,EAAAwgE,IAAAxgE,EAAAygE,qBACAhuD,EAAAi4B,MAAAW,YAAAa,YAAAlsC,EAAAwgE,IAAAxgE,EAAAygE,qBACAhuD,EAAAi4B,MAAAW,YAAAc,MAAAnsC,EAAAwgE,IAAAxgE,EAAAygE,qBACAhuD,EAAAi4B,MAAAW,YAAAe,aAAApsC,EAAAwgE,IAAAxgE,EAAAygE,qBACAhuD,EAAAi4B,MAAAW,YAAAgB,QAAArsC,EAAAwgE,IAAAxgE,EAAAygE,qBACAhuD,EAAAi4B,MAAAW,YAAAiB,aAAAtsC,EAAAwgE,IAAAxgE,EAAAygE,qBAEAhuD,EA/BAi4B,MAAApsC,EAAA,kBAkCAjB,EAAAD,QAAAo4D,IAEApD,iBAAA,KAAAyO,IAAA,SAAAviE,EAAAjB,EAAAD,GAQA,QAAAs4D,GAAA11D,EAAAyS,GAEAA,EAAAA,MAEAA,EAAAi4B,MAAA6B,WAAAC,QAAAxsC,EAAAwsC,OACA/5B,EAAAi4B,MAAA6B,WAAAE,OAAAzsC,EAAAysC,MACAh6B,EAAAi4B,MAAA6B,WAAAG,WAAA1sC,EAAA0sC,UACAj6B,EAAAi4B,MAAA6B,WAAAI,YAAA3sC,EAAA2sC,WACAl6B,EAAAi4B,MAAA6B,WAAAK,WAAA5sC,EAAA4sC,UACAn6B,EAAAi4B,MAAA6B,WAAAM,gBAAA7sC,EAAA6sC,eACAp6B,EAAAi4B,MAAA6B,WAAAO,cAAA9sC,EAAA8sC,aAjBApC,MAAApsC,EAAA,kBAqBAjB,EAAAD,QAAAs4D,IAEAtD,iBAAA,KAAA0O,IAAA,SAAAxiE,EAAAjB,EAAAD,GAuBA,QAAAomD,GAAA3hD,GAEAwsC,EAAA1vC,KAAAf,MAUAA,KAAA+sD,OAAA,GAAArc,GAAAsE,MAQAh1C,KAAA8vD,SAAA,KAQA9vD,KAAAixC,OAAA,EAQAjxC,KAAAkxC,QAAA,EAQAlxC,KAAAy3C,KAAA,SASAz3C,KAAA23C,UAAA7K,EAAAW,YAAAC,OAOA1tC,KAAAqN,OAAA,KAQArN,KAAAmjE,WAAA,SAGAnjE,KAAAiE,QAAAA,GAAAP,EAAAsvC,MACAhzC,KAAAojE,cAAA,EACApjE,KAAAqjE,aAAA,EACArjE,KAAAsjE,WAAA,GAAAz7D,cAAA,GAhGA,GAAA6oC,GAAAhwC,EAAA,WACAgD,EAAAhD,EAAA,uBACA+vC,EAAA/vC,EAAA,wBACAu0D,EAAAv0D,EAAA,0CACAkqC,EAAAlqC,EAAA,YACAosC,EAAApsC,EAAA,YACA63C,EAAA,GAAA7H,GAAAsE,KA8FA4Q,GAAA/iD,UAAA0M,OAAA/L,OAAAitC,EAAA5tC,WACA+iD,EAAA/iD,UAAAmH,YAAA47C,EACAnmD,EAAAD,QAAAomD,EAEAr2C,OAAAuhC,iBAAA8U,EAAA/iD,WAOAe,OACAoM,IAAA,WAEA,MAAAwF,MAAAygB,IAAAj2B,KAAA+wC,MAAAp8B,GAAA3U,KAAAiE,QAAAmsD,OAAAxsD,OAEAsM,IAAA,SAAAf,GAEA,GAAAo0D,GAAA34B,EAAA24B,KAAAvjE,KAAA+wC,MAAAp8B,IAAA,CACA3U,MAAA+wC,MAAAp8B,EAAA4uD,EAAAp0D,EAAAnP,KAAAiE,QAAAmsD,OAAAxsD,MACA5D,KAAAixC,OAAA9hC,IAUAtL,QACAmM,IAAA,WAEA,MAAAwF,MAAAygB,IAAAj2B,KAAA+wC,MAAAj5B,GAAA9X,KAAAiE,QAAAmsD,OAAAvsD,QAEAqM,IAAA,SAAAf,GAEA,GAAAo0D,GAAA34B,EAAA24B,KAAAvjE,KAAA+wC,MAAAj5B,IAAA,CACA9X,MAAA+wC,MAAAj5B,EAAAyrD,EAAAp0D,EAAAnP,KAAAiE,QAAAmsD,OAAAvsD,OACA7D,KAAAkxC,QAAA/hC,IAUAlL,SACA+L,IAAA,WAEA,MAAAhQ,MAAA8vD,UAEA5/C,IAAA,SAAAf,GAEAnP,KAAA8vD,WAAA3gD,IAKAnP,KAAA8vD,SAAA3gD,EACAnP,KAAAmjE,WAAA,SAEAnjE,KAAAojE,cAAA,EAEAj0D,IAGAA,EAAAquC,YAAAmZ,UAEA32D,KAAAwjE,mBAIAr0D,EAAA8X,KAAA,SAAAjnB,KAAAwjE,iBAAAxjE,YAYA4lD,EAAA/iD,UAAA2gE,iBAAA,WAEAxjE,KAAAojE,cAAA,EAGApjE,KAAAixC,SAEAjxC,KAAA+wC,MAAAp8B,EAAAi2B,EAAA24B,KAAAvjE,KAAA+wC,MAAAp8B,GAAA3U,KAAAixC,OAAAjxC,KAAAiE,QAAA6oD,MAAAlpD,OAGA5D,KAAAkxC,UAEAlxC,KAAA+wC,MAAAj5B,EAAA8yB,EAAA24B,KAAAvjE,KAAA+wC,MAAAj5B,GAAA9X,KAAAkxC,QAAAlxC,KAAAiE,QAAA6oD,MAAAjpD,SAIA+hD,EAAA/iD,UAAA4gE,kBAAA,WAGA,GAIAzlB,GAAAC,EAAAC,EAAAC,EAJAl6C,EAAAjE,KAAA8vD,SACA9kB,EAAAhrC,KAAAirC,eACAxqC,EAAAuqC,EAAAvqC,EAAAuE,EAAAgmC,EAAAhmC,EAAAqvB,EAAA2W,EAAA3W,EAAA+W,EAAAJ,EAAAI,EAAAF,EAAAF,EAAAE,GAAAC,EAAAH,EAAAG,GACAm4B,EAAAtjE,KAAAsjE,WAEAl+C,EAAAnhB,EAAAmhB,IAEAA,IAGA64B,EAAA74B,EAAAzQ,EAAA3U,KAAA+sD,OAAAp4C,EAAAyQ,EAAAxhB,MACAo6C,EAAAC,EAAAh6C,EAAAksD,KAAAvsD,MAEAu6C,EAAA/4B,EAAAtN,EAAA9X,KAAA+sD,OAAAj1C,EAAAsN,EAAAvhB,OACAq6C,EAAAC,EAAAl6C,EAAAksD,KAAAtsD,SAKAm6C,EAAA/5C,EAAAmsD,OAAA,OAAA,EAAApwD,KAAA+sD,OAAAp4C,GACAspC,EAAAh6C,EAAAmsD,OAAA,OAAApwD,KAAA+sD,OAAAp4C,EAEAupC,EAAAj6C,EAAAmsD,OAAAvsD,QAAA,EAAA7D,KAAA+sD,OAAAj1C,GACAqmC,EAAAl6C,EAAAmsD,OAAAvsD,QAAA7D,KAAA+sD,OAAAj1C,GAIAwrD,EAAA,GAAA7iE,EAAAw9C,EAAA5pB,EAAA8pB,EAAAjT,EACAo4B,EAAA,GAAAl4B,EAAA+S,EAAAn5C,EAAAi5C,EAAA9S,EAGAm4B,EAAA,GAAA7iE,EAAAu9C,EAAA3pB,EAAA8pB,EAAAjT,EACAo4B,EAAA,GAAAl4B,EAAA+S,EAAAn5C,EAAAg5C,EAAA7S,EAGAm4B,EAAA,GAAA7iE,EAAAu9C,EAAA3pB,EAAA6pB,EAAAhT,EACAo4B,EAAA,GAAAl4B,EAAA8S,EAAAl5C,EAAAg5C,EAAA7S,EAGAm4B,EAAA,GAAA7iE,EAAAw9C,EAAA5pB,EAAA6pB,EAAAhT,EACAo4B,EAAA,GAAAl4B,EAAA8S,EAAAl5C,EAAAi5C,EAAA9S,GAYAya,EAAA/iD,UAAAuxC,aAAA,SAAAxL,GAEA5oC,KAAAojE,eAEApjE,KAAAojE,cAAA,EAEApjE,KAAAwjE,mBAEAxjE,KAAAqjE,aAAA,GAGArjE,KAAAqjE,cAEArjE,KAAAqjE,aAAA,EAGArjE,KAAAyjE,qBAIA76B,EAAA+U,kBAAA/U,EAAAmD,QAAAmkB,QACAtnB,EAAAmD,QAAAmkB,OAAAzd,OAAAzyC,OASA4lD,EAAA/iD,UAAAwoC,UAAA,SAAAiL,GAEA,IAAAt2C,KAAA8yC,eACA,CACA9yC,KAAAqjE,cAEArjE,KAAAqjE,aAAA,EAGArjE,KAAAyjE,oBAIA,IAAA5wC,GACAE,EACAD,EACAE,EACAswC,EAAAtjE,KAAAsjE,WAEAhpB,EAAAgpB,EAAA,GACA/oB,EAAA+oB,EAAA,GAEA9oB,EAAA8oB,EAAA,GACA7oB,EAAA6oB,EAAA,GAEAllB,EAAAklB,EAAA,GACAjlB,EAAAilB,EAAA,GAEAhlB,EAAAglB,EAAA,GACA/kB,EAAA+kB,EAAA,EAuBA,IArBAzwC,EAAAynB,EACAznB,EAAAA,EAAA2nB,EAAAA,EAAA3nB,EACAA,EAAAA,EAAAurB,EAAAA,EAAAvrB,EACAA,EAAAA,EAAAyrB,EAAAA,EAAAzrB,EAEAC,EAAAynB,EACAznB,EAAAA,EAAA2nB,EAAAA,EAAA3nB,EACAA,EAAAA,EAAAurB,EAAAA,EAAAvrB,EACAA,EAAAA,EAAAyrB,EAAAA,EAAAzrB,EAEAC,EAAAunB,EACAvnB,EAAAynB,EAAAznB,EAAAynB,EAAAznB,EACAA,EAAAqrB,EAAArrB,EAAAqrB,EAAArrB,EACAA,EAAAurB,EAAAvrB,EAAAurB,EAAAvrB,EAEAC,EAAAunB,EACAvnB,EAAAynB,EAAAznB,EAAAynB,EAAAznB,EACAA,EAAAqrB,EAAArrB,EAAAqrB,EAAArrB,EACAA,EAAAurB,EAAAvrB,EAAAurB,EAAAvrB,EAGAhzB,KAAAopC,SAAApoC,OACA,CACA,GAAAiyC,GAAAjzC,KAAAszC,oBAEA0K,IAAA/K,EAAAt+B,EACAspC,GAAAhL,EAAAt+B,EAAAs+B,EAAArvC,MACAs6C,GAAAjL,EAAAn7B,EACAqmC,GAAAlL,EAAAn7B,EAAAm7B,EAAApvC,OAEAgvB,EAAAA,EAAAmrB,GAAAnrB,EAAAmrB,GACAlrB,EAAAA,EAAAorB,GAAAprB,EAAAorB,GAEAnrB,EAAAA,EAAAkrB,GAAAlrB,EAAAkrB,GACAjrB,EAAAA,EAAAmrB,GAAAnrB,EAAAmrB,GAGA,GAAA5L,GAAAvyC,KAAAqzC,OAEAd,GAAA59B,EAAAke,EACA0f,EAAA3uC,MAAAmvB,EAAAF,EAEA0f,EAAAz6B,EAAAgb,EACAyf,EAAA1uC,OAAAmvB,EAAAF,EAGA9yB,KAAA8yC,eAAAP,EAGA,MAAAvyC,MAAA8yC,gBAOA8S,EAAA/iD,UAAAmuC,eAAA,WAMA,MAJAhxC,MAAAqzC,QAAA1+B,GAAA3U,KAAA8vD,SAAAM,OAAAxsD,MAAA5D,KAAA+sD,OAAAp4C,EACA3U,KAAAqzC,QAAAv7B,GAAA9X,KAAA8vD,SAAAM,OAAAvsD,OAAA7D,KAAA+sD,OAAAj1C,EACA9X,KAAAqzC,QAAAzvC,MAAA5D,KAAA8vD,SAAAM,OAAAxsD,MACA5D,KAAAqzC,QAAAxvC,OAAA7D,KAAA8vD,SAAAM,OAAAvsD,OACA7D,KAAAqzC,SASAuS,EAAA/iD,UAAA27C,cAAA,SAAA/H,GAEAz2C,KAAAirC,eAAAyL,aAAAD,EAAA8B,EAEA,IAGAgC,GAHA32C,EAAA5D,KAAA8vD,SAAAM,OAAAxsD,MACAC,EAAA7D,KAAA8vD,SAAAM,OAAAvsD,OACAy2C,GAAA12C,EAAA5D,KAAA+sD,OAAAp4C,CAGA,OAAA4jC,GAAA5jC,EAAA2lC,GAAA/B,EAAA5jC,EAAA2lC,EAAA12C,IAEA22C,GAAA12C,EAAA7D,KAAA+sD,OAAAj1C,EAEAygC,EAAAzgC,EAAAyiC,GAAAhC,EAAAzgC,EAAAyiC,EAAA12C,IAEA,GAIA,GASA+hD,EAAA/iD,UAAA0xC,cAAA,SAAA3L,GAEA,KAAA5oC,KAAAiE,QAAAksD,KAAAvsD,OAAA,GAAA5D,KAAAiE,QAAAksD,KAAAtsD,QAAA,GAAA,CAKA,GAAAg6C,GAAAjV,EAAAkV,WAAA99C,KAAA23C,UAOA,IANAkG,IAAAjV,EAAA7Q,QAAAgmB,2BAEAnV,EAAA7Q,QAAAgmB,yBAAAF,GAIA79C,KAAAiE,QAAAy/D,MACA,CACA,GAEApZ,GACAC,EACA3mD,EACAC,EALAI,EAAAjE,KAAA8vD,SACA9kB,EAAAhrC,KAAAirC,cAMArC,GAAA7Q,QAAA80B,YAAA7sD,KAAA0zC,UAGA,IAAAiwB,GAAA1/D,EAAAu5C,YAAAlL,YAAAxF,EAAAqC,YAAAvmC,MAQA,IAPAggC,EAAAipB,gBAAAjpB,EAAA7Q,QAAA6Q,EAAAipB,kBAAA8R,IAEA/6B,EAAA7Q,QAAA6Q,EAAAipB,gBAAA8R,GAKA1/D,EAAAglD,OACA,CACArlD,EAAAK,EAAAksD,KAAAtsD,OACAA,EAAAI,EAAAksD,KAAAvsD,MAEA0mD,EAAArmD,EAAA,KAAAA,EAAAmhB,KAAAtN,EAAA9X,KAAA+sD,OAAAj1C,EAAA7T,EAAAmhB,KAAAvhB,OAAA7D,KAAA+sD,OAAAj1C,GAAA7T,EAAAmsD,OAAAvsD,OACA0mD,EAAAtmD,EAAA,KAAAA,EAAAmhB,KAAAzQ,EAAA3U,KAAA+sD,OAAAp4C,EAAA1Q,EAAAmhB,KAAAxhB,MAAA5D,KAAA+sD,OAAAp4C,GAAA1Q,EAAAmsD,OAAAxsD,MAEA0mD,GAAA1mD,EAEAonC,EAAAE,GAAAqf,EAAAvf,EAAAvqC,EAAA6pD,EAAAtf,EAAA3W,EAAA2W,EAAAE,GACAF,EAAAG,GAAAof,EAAAvf,EAAAhmC,EAAAslD,EAAAtf,EAAAI,EAAAJ,EAAAG,EAEA,IAAAkxB,GAAArxB,EAAAvqC,CACAuqC,GAAAvqC,GAAAuqC,EAAA3W,EACA2W,EAAA3W,EAAAgoC,EAEAA,EAAArxB,EAAAhmC,EACAgmC,EAAAhmC,GAAAgmC,EAAAI,EACAJ,EAAAI,EAAAixB,EAGA/R,EAAA,EACAC,EAAA,MAKA3mD,GAAAK,EAAAksD,KAAAvsD,MACAC,EAAAI,EAAAksD,KAAAtsD,OAEAymD,EAAArmD,EAAA,KAAAA,EAAAmhB,KAAAzQ,EAAA3U,KAAA+sD,OAAAp4C,EAAA1Q,EAAAmhB,KAAAxhB,MAAA5D,KAAA+sD,OAAAp4C,GAAA1Q,EAAAmsD,OAAAxsD,MACA2mD,EAAAtmD,EAAA,KAAAA,EAAAmhB,KAAAtN,EAAA9X,KAAA+sD,OAAAj1C,EAAA7T,EAAAmhB,KAAAvhB,OAAA7D,KAAA+sD,OAAAj1C,GAAA7T,EAAAmsD,OAAAvsD,MAMA+kC,GAAAmH,aAEAnH,EAAA7Q,QAAA8e,aACA7L,EAAAvqC,EACAuqC,EAAAhmC,EACAgmC,EAAA3W,EACA2W,EAAAI,EACAJ,EAAAE,GAAAtC,EAAA4G,WAAA,EACAxE,EAAAG,GAAAvC,EAAA4G,WAAA,GAGA8a,EAAA,EAAAA,EACAC,EAAA,EAAAA,GAKA3hB,EAAA7Q,QAAA8e,aACA7L,EAAAvqC,EACAuqC,EAAAhmC,EACAgmC,EAAA3W,EACA2W,EAAAI,EACAJ,EAAAE,GAAAtC,EAAA4G,WACAxE,EAAAG,GAAAvC,EAAA4G,WAMA,IAAAA,GAAAvrC,EAAAu5C,YAAAhO,UAEA,YAAAxvC,KAAAy3C,MAEAz3C,KAAAmjE,aAAAnjE,KAAAy3C,OAEAz3C,KAAAmjE,WAAAnjE,KAAAy3C,KAGAz3C,KAAA4jE,cAAA3O,EAAAC,iBAAAl1D,KAAAA,KAAAy3C,OAGA7O,EAAA7Q,QAAAk1B,UACAjtD,KAAA4jE,cACA,EACA,EACAhgE,EAAA4rC,EACA3rC,EAAA2rC,EACA8a,EAAA1hB,EAAA4G,WACA+a,EAAA3hB,EAAA4G,WACA5rC,EAAAglC,EAAA4G,WACA3rC,EAAA+kC,EAAA4G,aAKA5G,EAAA7Q,QAAAk1B,UACAhpD,EAAAu5C,YAAAh2C,OACAvD,EAAAksD,KAAAx7C,EAAA66B,EACAvrC,EAAAksD,KAAAr4C,EAAA03B,EACA5rC,EAAA4rC,EACA3rC,EAAA2rC,EACA8a,EAAA1hB,EAAA4G,WACA+a,EAAA3hB,EAAA4G,WACA5rC,EAAAglC,EAAA4G,WACA3rC,EAAA+kC,EAAA4G,eAYAoW,EAAA/iD,UAAA0C,QAAA,SAAAuxD,EAAA+M,GAEApzB,EAAA5tC,UAAA0C,QAAAxE,KAAAf,MAEAA,KAAA+sD,OAAA,KAEA+J,GAEA92D,KAAA8vD,SAAAvqD,QAAAs+D,GAGA7jE,KAAA8vD,SAAA,KACA9vD,KAAAqN,OAAA,MAeAu4C,EAAAke,UAAA,SAAAC,GAEA,GAAA9/D,GAAA2mC,EAAAo5B,aAAAD,EAEA,KAAA9/D,EAEA,KAAA,IAAArD,OAAA,gBAAAmjE,EAAA,wCAGA,OAAA,IAAAne,GAAA3hD,IAWA2hD,EAAAqe,UAAA,SAAAC,EAAAC,EAAA7xB,GAEA,MAAA,IAAAsT,GAAAliD,EAAAugE,UAAAC,EAAAC,EAAA7xB,OAGA4E,WAAA,GAAA0H,uBAAA,GAAAjK,UAAA,GAAAyvB,yCAAA,GAAArlB,sBAAA,GAAAlK,WAAA,MAAAwvB,IAAA,SAAA3jE,EAAAjB,EAAAD,GA6BA,QAAAsmD,GAAAld,GAEA0W,EAAAv+C,KAAAf,KAAA4oC,GAQA5oC,KAAAqtD,SAAA,EAOArtD,KAAAstD,aAAA,EAAAttD,KAAAqtD,SAOArtD,KAAA+K,KAAA+hC,EAAAwD,iBAGA,IAAAg0B,GAAA,EAAAtkE,KAAA+K,KAAA/K,KAAAstD,YAGA,GAAAttD,KAAA+K,IAOA/K,MAAAi8D,SAAA,GAAA/5D,aAAAoiE,GAOAtkE,KAAAukE,UAAA,GAAA18D,cAAA7H,KAAAi8D,UAOAj8D,KAAAosD,IAAA,GAAAoY,aAAAxkE,KAAAi8D,UAOAj8D,KAAA+hE,OAAA,GAAAyC,aAAAxkE,KAAAi8D,UAOAj8D,KAAAghD,QAAAyjB,EAAAzkE,KAAA+K,MAOA/K,KAAAqN,OAAA,KAEArN,KAAA4/D,aAAA,EACA5/D,KAAA6xC,aAAA,EAEA7xC,KAAA0kE,WAAA,EACA1kE,KAAA2kE,SAGA,KAAA,GAAAhkE,GAAA,EAAAA,EAAAX,KAAA+K,KAAApK,IAEAX,KAAA2kE,OAAAhkE,IAAAikE,YAAAhF,aAAA,EAAAiF,OAAA95D,KAAA,EAAAP,MAAA,EAAAs6D,MAAA,EAGA9kE,MAAA+kE,aAAA/kE,KAAA2kE,OAAA3kE,KAAA0kE,cAEA1kE,KAAAglE,eAAA,KApHA,GAAA1lB,GAAA5+C,EAAA,8CACA0rC,EAAA1rC,EAAA,uCAEA+jE,GADA/jE,EAAA,gDACAA,EAAA,sCACAukE,EAAAvkE,EAAA,gCACAosC,EAAApsC,EAAA,eACAgmD,EAAAhmD,EAAA,eAkHAolD,GAAAjjD,UAAA0M,OAAA/L,OAAA87C,EAAAz8C,WACAijD,EAAAjjD,UAAAmH,YAAA87C,EACArmD,EAAAD,QAAAsmD,EAEA1Z,EAAAC,eAAA,SAAAyZ,GAQAA,EAAAjjD,UAAAs9C,gBAAA,WAEA,GAAA/9C,GAAApC,KAAA4oC,SAAAxmC,EAEApC,MAAAklE,YAAA9iE,EAAAuJ,aAAAvJ,EAAA+iE,yBAEAnlE,KAAAolE,QAAAH,EAAA7iE,EAAApC,KAAAklE,aAGAllE,KAAAqN,OAAArN,KAAA4oC,SAAAgmB,cAAAmN,cAGA/7D,KAAA87D,aAAApV,EAAAtlD,SAAAiC,mBAAAjB,EAAA,KAAAA,EAAA8rD,cACAluD,KAAA8J,YAAA48C,EAAAtlD,SAAAkC,kBAAAlB,EAAApC,KAAAghD,QAAA5+C,EAAAO,aAGA3C,KAAAqlE,IAAA,GAAA3e,GAAAllD,kBAAAY,GAEApC,KAAAqlE,IAAAz6D,SAAA5K,KAAA8J,aACA9J,KAAAqlE,IAAA36D,aAAA1K,KAAA87D,aAAA97D,KAAAolE,QAAA3+D,WAAAq6C,gBAAA1+C,EAAA4F,OAAA,EAAAhI,KAAAstD,aAAA,GACAttD,KAAAqlE,IAAA36D,aAAA1K,KAAA87D,aAAA97D,KAAAolE,QAAA3+D,WAAAyoD,cAAA9sD,EAAA6I,gBAAA,EAAAjL,KAAAstD,aAAA,GACAttD,KAAAqlE,IAAA36D,aAAA1K,KAAA87D,aAAA97D,KAAAolE,QAAA3+D,WAAAs6C,OAAA3+C,EAAAmF,eAAA,EAAAvH,KAAAstD,aAAA,IACAttD,KAAAqlE,IAAA36D,aAAA1K,KAAA87D,aAAA97D,KAAAolE,QAAA3+D,WAAA6+D,WAAAljE,EAAA4F,OAAA,EAAAhI,KAAAstD,aAAA,IAEAttD,KAAAg7D,iBAAA,OAQAlV,EAAAjjD,UAAA4vC,OAAA,SAAAyd,GAcA,GAVAlwD,KAAA6xC,cAAA7xC,KAAA+K,MAEA/K,KAAA+zC,QAQAmc,EAAAjsD,QAAAusD,KAAA,CAOA,GAEA7vD,GAFA4kE,EAAArV,EAAAjsD,QAAAu5C,YACAunB,EAAA/kE,KAAA+kE,YAGA,IAAA/kE,KAAAglE,iBAAAO,EACA,CAGA,GAFAvlE,KAAAglE,eAAAO,GAEAA,EAAAC,SACA,CAIA,GAHAD,EAAAC,UAAA,EACAD,EAAAE,IAAAzlE,KAAA4/D,aAEA5/D,KAAA4/D,eAAA5/D,KAAAklE,YACA,CACA,IAAAvkE,EAAA,EAAAA,EAAAokE,EAAAnF,aAAAj/D,IAEAokE,EAAAH,SAAAjkE,GAAA6kE,UAAA,CAGAxlE,MAAA4/D,aAAA,EAEAmF,EAAAh6D,KAAA/K,KAAA6xC,aAAAkzB,EAAAv6D,MAEAu6D,EAAA/kE,KAAA+kE,aAAA/kE,KAAA2kE,OAAA3kE,KAAA0kE,cACAK,EAAAnF,aAAA,EACAmF,EAAAv6D,MAAAxK,KAAA6xC,aAIAkzB,EAAAH,SAAAG,EAAAnF,gBAAA2F,EAGAvlE,KAAA4/D,eAIA,GAAAxrD,GAAApU,KAAA6xC,aAAA7xC,KAAAstD,YAEAttD,MAAA6xC,cAIA,IAAAkwB,GAAA/hE,KAAA+hE,OACAwC,EAAAvkE,KAAAukE,UACAjB,EAAApT,EAAAoT,WACA7rB,GAAAyY,EAAAzY,MAAA,KAAA,MAAAyY,EAAAzY,QAAA,IAAAyY,EAAAzY,OAAA,KAAA,IAAAyY,EAAAxc,YAAA,IACA0Y,EAAA8D,EAAAjsD,QAAAusD,KAAAkV,UAEAnB,GAAAnwD,KAAAkvD,EAAA,GACAiB,EAAAnwD,KAAAkvD,EAAA,GACAtjE,KAAAosD,IAAAh4C,KAAAg4C,EAAA,GACA2V,EAAA3tD,KAAAqjC,EACA8sB,EAAAnwD,KAAAmxD,EAAAE,IAGAlB,EAAAnwD,KAAAkvD,EAAA,GACAiB,EAAAnwD,KAAAkvD,EAAA,GACAtjE,KAAAosD,IAAAh4C,KAAAg4C,EAAA,GACA2V,EAAA3tD,KAAAqjC,EACA8sB,EAAAnwD,KAAAmxD,EAAAE,IAGAlB,EAAAnwD,KAAAkvD,EAAA,GACAiB,EAAAnwD,KAAAkvD,EAAA,GACAtjE,KAAAosD,IAAAh4C,KAAAg4C,EAAA,GACA2V,EAAA3tD,KAAAqjC,EACA8sB,EAAAnwD,KAAAmxD,EAAAE,IAGAlB,EAAAnwD,KAAAkvD,EAAA,GACAiB,EAAAnwD,KAAAkvD,EAAA,GACAtjE,KAAAosD,IAAAh4C,KAAAg4C,EAAA,GACA2V,EAAA3tD,KAAAqjC,EACA8sB,EAAAnwD,KAAAmxD,EAAAE,MAOA3f,EAAAjjD,UAAAkxC,MAAA,WAEA,GAAA,IAAA/zC,KAAA6xC,aAAA,CAEA,GAAAzvC,GAAApC,KAAA4oC,SAAAxmC,EAGApC,MAAA+kE,aAAAh6D,KAAA/K,KAAA6xC,aAAA7xC,KAAA+kE,aAAAv6D,KACA,KAAA,GAAA7J,GAAA,EAAAA,EAAAX,KAAA+kE,aAAAnF,aAAAj/D,IAEAX,KAAA+kE,aAAAH,SAAAjkE,GAAA6kE,UAAA,CAMA,IAAAxlE,KAAA2lE,iBAAA,GAAA3lE,KAAA+K,KAEA/K,KAAA87D,aAAAl5D,OAAA5C,KAAAi8D,SAAA,GAAA,OAGA,CAEA,GAAAtyB,GAAA3pC,KAAAukE,UAAAqB,SAAA,EAAA5lE,KAAA6xC,aAAA7xC,KAAAstD,aACAttD,MAAA87D,aAAAl5D,OAAA+mC,EAAA,GAAA,GAQA,IAJA3pC,KAAA4oC,SAAA8X,WAAA1gD,KAAAolE,SACAplE,KAAA4oC,SAAA2X,iBAAAC,aAAA,GAGA7/C,EAAA,EAAAA,EAAAX,KAAA0kE,WAAA/jE,IAAA,CAIA,IAAA,GAFAklE,GAAA7lE,KAAA2kE,OAAAhkE,GAEA+oB,EAAA,EAAAA,EAAAm8C,EAAAjG,aAAAl2C,IACA1pB,KAAA4oC,SAAAvgC,YAAAw9D,EAAAjB,SAAAl7C,GAAAA,EAGAtnB,GAAA4I,aAAA5I,EAAA4sC,UAAA,EAAA62B,EAAA96D,KAAA3I,EAAA6I,eAAA,EAAA46D,EAAAr7D,MAAA,GAIAxK,KAAAglE,eAAA,KACAhlE,KAAA6xC,aAAA,EACA7xC,KAAA4/D,aAAA,EACA5/D,KAAA0kE,WAAA,EAEA1kE,KAAA+kE,aAAA/kE,KAAA2kE,OAAA3kE,KAAA0kE,cACA1kE,KAAA+kE,aAAAnF,aAAA,IAOA9Z,EAAAjjD,UAAA2H,MAAA,WAEAxK,KAAAqlE,IAAAriE,QAGA8iD,EAAAjjD,UAAAmxB,KAAA,WAEAh0B,KAAA+zC,QACA/zC,KAAAqlE,IAAAjgE,UAMA0gD,EAAAjjD,UAAA0C,QAAA,WAEAvF,KAAA87D,aAAAv2D,UACAvF,KAAA8J,YAAAvE,UAEA+5C,EAAAz8C,UAAA0C,QAAAxE,KAAAf,MAEAA,KAAAqN,OAAA9H,UAEAvF,KAAA4oC,SAAA,KAEA5oC,KAAAi8D,SAAA,KACAj8D,KAAAukE,UAAA,KACAvkE,KAAA+hE,OAAA,KACA/hE,KAAAghD,QAAA,KAEAhhD,KAAA87D,aAAA;AACA97D,KAAA8J,YAAA,KAEA9J,KAAA8lE,QAAA,KACA9lE,KAAAqN,OAAA,QAGAg0C,cAAA,GAAAE,sCAAA,GAAAwkB,+CAAA,GAAAvkB,6CAAA,GAAAwkB,oCAAA,IAAAC,+BAAA,GAAAp/B,eAAA,IAAAq/B,IAAA,SAAAxlE,EAAAjB,EAAAD,GAIA,QAAAylE,GAAA7iE,EAAA+jE,GAEA,GAAA7/D,GAAA,geACAC,EAAA,4BAAA6/D,EAAAD,GAAA,OAAAE,CAEA9/D,GAAAA,EAAA0I,QAAA,SAAA,KAMA,KAAA,GAJA5B,GAAA,GAAAhH,GAAAjE,EAAAkE,EAAAC,GAGA+/D,KACA3lE,EAAA,EAAAwlE,EAAAxlE,EAAAA,IACA2lE,EAAA3lE,GAAAA,CAMA,OAHA0M,GAAArK,OACAqK,EAAA1G,SAAA4/D,UAAAD,EAEAj5D,EAGA,QAAA+4D,GAAAD,GAEA,GAAA/4D,GAAA,oFAEAA,IAAA,KACAA,GAAA,IAEA,KAAA,GAAAzM,GAAA,EAAAwlE,EAAAxlE,EAAAA,IAEAA,EAAA,IAAAyM,GAAA,WACA+4D,EAAA,EAAAxlE,IAAAyM,GAAA,aAAAzM,EAAA,KACAyM,GAAA,MACAA,GAAA,iCAAAzM,EAAA,UACAyM,GAAA,KAQA,OALAA,IAAA,KACAA,GAAA,KACAA,GAAA,gBACAA,GAAA,MA3CA,GAAA/G,GAAA3F,EAAA,gBAAAY,SAgDA+kE,GAEA,8BACA,uBACA,4BACA,mCAEA,mBACA,yFACA,KACAz1D,KAAA,KAEAnR,GAAAD,QAAAylE,IAEAp+B,eAAA,IAAA2/B,IAAA,SAAA9lE,EAAAjB,EAAAD,GA2CA,QAAAwmD,GAAApiB,EAAAiF,EAAA2G,GAOAxvC,KAAAoL,OAAAy0B,SAAAC,cAAA,UAMA9/B,KAAA+3B,QAAA/3B,KAAAoL,OAAAC,WAAA,MAMArL,KAAAwvC,WAAAA,GAAA1C,EAAAuC,WAQArvC,KAAAymE,MAAA,KAQAzmE,KAAA0mE,OAAA,IAEA,IAAAziE,GAAAP,EAAA65C,WAAAv9C,KAAAoL,OACAnH,GAAAmhB,KAAA,GAAAsrB,GAAAqC,UACA6S,EAAA7kD,KAAAf,KAAAiE,GAEAjE,KAAA4jC,KAAAA,EACA5jC,KAAA6oC,MAAAA,EApFA,GAAA+c,GAAAllD,EAAA,qBACAgD,EAAAhD,EAAA,uBACAgwC,EAAAhwC,EAAA,WACAkqC,EAAAlqC,EAAA,YACAosC,EAAApsC,EAAA,WAoFAslD,GAAAnjD,UAAA0M,OAAA/L,OAAAoiD,EAAA/iD,WACAmjD,EAAAnjD,UAAAmH,YAAAg8C,EACAvmD,EAAAD,QAAAwmD,EAEAA,EAAA2gB,uBACA3gB,EAAA4gB,qBAAA/mC,SAAAC,cAAA,UACAkmB,EAAA6gB,sBAAA7gB,EAAA4gB,qBAAAv7D,WAAA,MAEAkE,OAAAuhC,iBAAAkV,EAAAnjD,WAOAe,OACAoM,IAAA,WAOA,MALAhQ,MAAA+J,OAEA/J,KAAA8mE,aAGA9mE,KAAA+wC,MAAAp8B,EAAA3U,KAAA8vD,SAAAM,OAAAxsD,OAEAsM,IAAA,SAAAf,GAEAnP,KAAA+wC,MAAAp8B,EAAAxF,EAAAnP,KAAA8vD,SAAAM,OAAAxsD,MACA5D,KAAAixC,OAAA9hC,IAUAtL,QACAmM,IAAA,WAOA,MALAhQ,MAAA+J,OAEA/J,KAAA8mE,aAGA9mE,KAAA+wC,MAAAj5B,EAAA9X,KAAA8vD,SAAAM,OAAAvsD,QAEAqM,IAAA,SAAAf,GAEAnP,KAAA+wC,MAAAj5B,EAAA3I,EAAAnP,KAAA8vD,SAAAM,OAAAvsD,OACA7D,KAAAkxC,QAAA/hC,IA8BA05B,OACA74B,IAAA,WAEA,MAAAhQ,MAAA0mE,QAEAx2D,IAAA,SAAA24B,GAEAA,EAAAA,MAEA,gBAAAA,GAAA8T,OACA9T,EAAA8T,KAAA/R,EAAA4mB,WAAA3oB,EAAA8T,OAGA,gBAAA9T,GAAA2qB,SACA3qB,EAAA2qB,OAAA5oB,EAAA4mB,WAAA3oB,EAAA2qB,SAGA,gBAAA3qB,GAAAk+B,kBACAl+B,EAAAk+B,gBAAAn8B,EAAA4mB,WAAA3oB,EAAAk+B,kBAGAl+B,EAAAm+B,KAAAn+B,EAAAm+B,MAAA,kBACAn+B,EAAA8T,KAAA9T,EAAA8T,MAAA,QACA9T,EAAAo+B,MAAAp+B,EAAAo+B,OAAA,OACAp+B,EAAA2qB,OAAA3qB,EAAA2qB,QAAA,QACA3qB,EAAAq+B,gBAAAr+B,EAAAq+B,iBAAA,EACAr+B,EAAAs+B,SAAAt+B,EAAAs+B,WAAA,EACAt+B,EAAAu+B,cAAAv+B,EAAAu+B,eAAA,IAEAv+B,EAAAw+B,WAAAx+B,EAAAw+B,aAAA,EACAx+B,EAAAk+B,gBAAAl+B,EAAAk+B,iBAAA,UACAl+B,EAAAy+B,gBAAAp/D,SAAA2gC,EAAAy+B,gBAAAz+B,EAAAy+B,gBAAA9xD,KAAAy3B,GAAA,EACApE,EAAA0+B,mBAAAr/D,SAAA2gC,EAAA0+B,mBAAA1+B,EAAA0+B,mBAAA,EACA1+B,EAAA2+B,eAAAt/D,SAAA2gC,EAAA2+B,eAAA3+B,EAAA2+B,eAAA,EAEA3+B,EAAA6V,QAAA7V,EAAA6V,SAAA,EAEA7V,EAAA4+B,aAAA5+B,EAAA4+B,cAAA,aAEA5+B,EAAA6+B,SAAA7+B,EAAA6+B,UAAA,QACA7+B,EAAA8+B,WAAA9+B,EAAA8+B,YAAA,GAEA3nE,KAAA0mE,OAAA79B,EACA7oC,KAAA+J,OAAA,IAUA65B,MACA5zB,IAAA,WAEA,MAAAhQ,MAAAymE,OAEAv2D,IAAA,SAAA0zB,GACAA,EAAAA,EAAAnpB,YAAA,IACAza,KAAAymE,QAAA7iC,IAIA5jC,KAAAymE,MAAA7iC,EACA5jC,KAAA+J,OAAA,OAUAi8C,EAAAnjD,UAAAikE,WAAA,WAEA,GAAAj+B,GAAA7oC,KAAA0mE,MACA1mE,MAAA+3B,QAAAivC,KAAAn+B,EAAAm+B,IAaA,KAAA,GATAY,GAAA/+B,EAAAs+B,SAAAnnE,KAAAmnE,SAAAnnE,KAAAymE,OAAAzmE,KAAAymE,MAGAoB,EAAAD,EAAAj4D,MAAA,kBAGAm4D,EAAA,GAAAh8D,OAAA+7D,EAAA7mE,QACA+mE,EAAA,EACAC,EAAAhoE,KAAAioE,wBAAAp/B,EAAAm+B,MACArmE,EAAA,EAAAA,EAAAknE,EAAA7mE,OAAAL,IACA,CACA,GAAA22C,GAAAt3C,KAAA+3B,QAAAmwC,YAAAL,EAAAlnE,IAAAiD,KACAkkE,GAAAnnE,GAAA22C,EACAywB,EAAAvyD,KAAAC,IAAAsyD,EAAAzwB,GAGA,GAAA1zC,GAAAmkE,EAAAl/B,EAAAq+B,eACAr+B,GAAAw+B,aAEAzjE,GAAAilC,EAAA0+B,oBAGAvnE,KAAAoL,OAAAxH,OAAAA,EAAA5D,KAAA+3B,QAAAuf,WAAAt3C,KAAAwvC,UAGA,IAAA24B,GAAAnoE,KAAA6oC,MAAAs/B,YAAAH,EAAAI,SAAAv/B,EAAAq+B,gBAEArjE,EAAAskE,EAAAN,EAAA7mE,MACA6nC,GAAAw+B,aAEAxjE,GAAAglC,EAAA0+B,oBAGAvnE,KAAAoL,OAAAvH,QAAAA,EAAA,EAAA7D,KAAA0mE,OAAAhoB,SAAA1+C,KAAAwvC,WAEAxvC,KAAA+3B,QAAAgZ,MAAA/wC,KAAAwvC,WAAAxvC,KAAAwvC,YAEAzP,UAAAC,YAEAhgC,KAAA+3B,QAAA26B,UAAA,EAAA,EAAA1yD,KAAAoL,OAAAxH,MAAA5D,KAAAoL,OAAAvH,QAOA7D,KAAA+3B,QAAAivC,KAAAn+B,EAAAm+B,KACAhnE,KAAA+3B,QAAAw7B,YAAA1qB,EAAA2qB,OACAxzD,KAAA+3B,QAAAuf,UAAAzO,EAAAq+B,gBACAlnE,KAAA+3B,QAAA0vC,aAAA5+B,EAAA4+B,aACAznE,KAAA+3B,QAAA2vC,SAAA7+B,EAAA6+B,SACA1nE,KAAA+3B,QAAA4vC,WAAA9+B,EAAA8+B,UAEA,IAAAU,GACAC,CAEA,IAAAz/B,EAAAw+B,WACA,CACAx+B,EAAA2+B,eAAA,GACAxnE,KAAA+3B,QAAAwwC,YAAA1/B,EAAAk+B,gBACA/mE,KAAA+3B,QAAAywC,WAAA3/B,EAAA2+B,gBAEAxnE,KAAA+3B,QAAA06B,UAAA5pB,EAAAk+B,eAGA,IAAA0B,GAAAjzD,KAAAwgC,IAAAnN,EAAAy+B,iBAAAz+B,EAAA0+B,mBACAmB,EAAAlzD,KAAAugC,IAAAlN,EAAAy+B,iBAAAz+B,EAAA0+B,kBAEA,KAAA5mE,EAAA,EAAAA,EAAAknE,EAAA7mE,OAAAL,IAEA0nE,EAAAx/B,EAAAq+B,gBAAA,EACAoB,EAAAz/B,EAAAq+B,gBAAA,EAAAvmE,EAAAwnE,EAAAH,EAAAW,OAEA,UAAA9/B,EAAAo+B,MAEAoB,GAAAN,EAAAD,EAAAnnE,GAEA,WAAAkoC,EAAAo+B,QAEAoB,IAAAN,EAAAD,EAAAnnE,IAAA,GAGAkoC,EAAA8T,MAEA38C,KAAA+3B,QAAA6wC,SAAAf,EAAAlnE,GAAA0nE,EAAAI,EAAAH,EAAAI,EAAA1oE,KAAA0mE,OAAAhoB,SASA,IAHA1+C,KAAA+3B,QAAA06B,UAAA5pB,EAAA8T,KAGAh8C,EAAA,EAAAA,EAAAknE,EAAA7mE,OAAAL,IAEA0nE,EAAAx/B,EAAAq+B,gBAAA,EACAoB,EAAAz/B,EAAAq+B,gBAAA,EAAAvmE,EAAAwnE,EAAAH,EAAAW,OAEA,UAAA9/B,EAAAo+B,MAEAoB,GAAAN,EAAAD,EAAAnnE,GAEA,WAAAkoC,EAAAo+B,QAEAoB,IAAAN,EAAAD,EAAAnnE,IAAA,GAGAkoC,EAAA2qB,QAAA3qB,EAAAq+B,iBAEAlnE,KAAA+3B,QAAA8wC,WAAAhB,EAAAlnE,GAAA0nE,EAAAC,EAAAtoE,KAAA0mE,OAAAhoB,SAGA7V,EAAA8T,MAEA38C,KAAA+3B,QAAA6wC,SAAAf,EAAAlnE,GAAA0nE,EAAAC,EAAAtoE,KAAA0mE,OAAAhoB,QAIA1+C,MAAAgwD,iBAQAhK,EAAAnjD,UAAAmtD,cAAA,WAEA,GAAA/rD,GAAAjE,KAAA8vD,QAEA7rD,GAAAu5C,YAAAmZ,WAAA,EACA1yD,EAAAu5C,YAAAhO,WAAAxvC,KAAAwvC,WAEAvrC,EAAAu5C,YAAA55C,MAAA5D,KAAAoL,OAAAxH,MAAA5D,KAAAwvC,WACAvrC,EAAAu5C,YAAA35C,OAAA7D,KAAAoL,OAAAvH,OAAA7D,KAAAwvC,WACAvrC,EAAAksD,KAAAvsD,MAAAK,EAAAmsD,OAAAxsD,MAAA5D,KAAAoL,OAAAxH,MAAA5D,KAAAwvC,WACAvrC,EAAAksD,KAAAtsD,OAAAI,EAAAmsD,OAAAvsD,OAAA7D,KAAAoL,OAAAvH,OAAA7D,KAAAwvC,WAEAvrC,EAAAmhB,KAAAzQ,EAAA,EACA1Q,EAAAmhB,KAAAtN,GAAA9X,KAAA0mE,OAAAhoB,QAEAz6C,EAAAmhB,KAAAxhB,MAAAK,EAAAmsD,OAAAxsD,MACAK,EAAAmhB,KAAAvhB,OAAAI,EAAAmsD,OAAAvsD,OAAA,EAAA7D,KAAA0mE,OAAAhoB,QAEA1+C,KAAAixC,OAAAjxC,KAAAoL,OAAAxH,MAAA5D,KAAAwvC,WACAxvC,KAAAkxC,QAAAlxC,KAAAoL,OAAAvH,OAAA7D,KAAAwvC,WAEAvrC,EAAAu5C,YAAAp2B,KAAA,SAAAnjB,EAAAu5C,aAEAx9C,KAAA+J,OAAA,GAQAi8C,EAAAnjD,UAAA4wC,YAAA,SAAA7K,GAEA5oC,KAAA+J,OAIA/J,KAAA8mE,aAGAlhB,EAAA/iD,UAAA4wC,YAAA1yC,KAAAf,KAAA4oC,IASAod,EAAAnjD,UAAA0xC,cAAA,SAAA3L,GAEA5oC,KAAA+J,OAIA/J,KAAA8mE,aAGAlhB,EAAA/iD,UAAA0xC,cAAAxzC,KAAAf,KAAA4oC,IASAod,EAAAnjD,UAAAolE,wBAAA,SAAAa,GAEA,GAAApd,GAAA1F,EAAA2gB,oBAAAmC,EAEA,KAAApd,EACA,CACAA,IAEA,IAAAtgD,GAAA46C,EAAA4gB,qBACA7uC,EAAAiuB,EAAA6gB,qBAEA9uC,GAAAivC,KAAA8B,CAEA,IAAAllE,GAAA4R,KAAAqmC,KAAA9jB,EAAAmwC,YAAA,QAAAtkE,OACAmlE,EAAAvzD,KAAAqmC,KAAA9jB,EAAAmwC,YAAA,KAAAtkE,OACAC,EAAA,EAAAklE,CAEAA,GAAA,IAAAA,EAAA,EAEA39D,EAAAxH,MAAAA,EACAwH,EAAAvH,OAAAA,EAEAk0B,EAAA06B,UAAA,OACA16B,EAAA46B,SAAA,EAAA,EAAA/uD,EAAAC,GAEAk0B,EAAAivC,KAAA8B,EAEA/wC,EAAA0vC,aAAA,aACA1vC,EAAA06B,UAAA,OACA16B,EAAA6wC,SAAA,OAAA,EAAAG,EAEA,IAIApoE,GAAA+oB,EAJAs/C,EAAAjxC,EAAAg+B,aAAA,EAAA,EAAAnyD,EAAAC,GAAAvB,KACA0zD,EAAAgT,EAAAhoE,OACAioE,EAAA,EAAArlE,EAIAya,EAAA,EACA2V,GAAA,CAGA,KAAArzB,EAAA,EAAAooE,EAAApoE,EAAAA,IACA,CACA,IAAA+oB,EAAA,EAAAu/C,EAAAv/C,EAAAA,GAAA,EAEA,GAAA,MAAAs/C,EAAA3qD,EAAAqL,GACA,CACAsK,GAAA,CACA,OAGA,GAAAA,EAMA,KAJA3V,IAAA4qD,EAcA,IANAvd,EAAAid,OAAAI,EAAApoE,EAEA0d,EAAA23C,EAAAiT,EACAj1C,GAAA,EAGArzB,EAAAkD,EAAAlD,EAAAooE,EAAApoE,IACA,CACA,IAAA+oB,EAAA,EAAAu/C,EAAAv/C,EAAAA,GAAA,EAEA,GAAA,MAAAs/C,EAAA3qD,EAAAqL,GACA,CACAsK,GAAA,CACA,OAGA,GAAAA,EAMA,KAJA3V,IAAA4qD,EAQAvd,EAAAwd,QAAAvoE,EAAAooE,EACArd,EAAA0c,SAAA1c,EAAAid,OAAAjd,EAAAwd,QAEAljB,EAAA2gB,oBAAAmC,GAAApd,EAGA,MAAAA,IAUA1F,EAAAnjD,UAAAskE,SAAA,SAAAvjC,GAOA,IAAA,GAHAtvB,GAAA,GACAuzD,EAAAjkC,EAAAj0B,MAAA,MACAy3D,EAAApnE,KAAA0mE,OAAAU,cACAzmE,EAAA,EAAAA,EAAAknE,EAAA7mE,OAAAL,IACA,CAGA,IAAA,GAFAwoE,GAAA/B,EACAgC,EAAAvB,EAAAlnE,GAAAgP,MAAA,KACA+Z,EAAA,EAAAA,EAAA0/C,EAAApoE,OAAA0oB,IACA,CACA,GAAA2/C,GAAArpE,KAAA+3B,QAAAmwC,YAAAkB,EAAA1/C,IAAA9lB,MACA0lE,EAAAD,EAAArpE,KAAA+3B,QAAAmwC,YAAA,KAAAtkE,KACA,KAAA8lB,GAAA4/C,EAAAH,GAIAz/C,EAAA,IAEApV,GAAA,MAEAA,GAAA80D,EAAA1/C,GACAy/C,EAAA/B,EAAAiC,IAIAF,GAAAG,EACAh1D,GAAA,IAAA80D,EAAA1/C,IAIA/oB,EAAAknE,EAAA7mE,OAAA,IAEAsT,GAAA,MAGA,MAAAA,IASA0xC,EAAAnjD,UAAAwoC,UAAA,SAAAiL,GAOA,MALAt2C,MAAA+J,OAEA/J,KAAA8mE,aAGAlhB,EAAA/iD,UAAAwoC,UAAAtqC,KAAAf,KAAAs2C,IAQA0P,EAAAnjD,UAAA0C,QAAA,SAAAs+D,GAGA7jE,KAAA+3B,QAAA,KACA/3B,KAAAoL,OAAA,KAEApL,KAAA0mE,OAAA,KAEA1mE,KAAA8vD,SAAAvqD,QAAA2C,SAAA27D,GAAA,EAAAA,MAGA3sB,WAAA,GAAAvC,UAAA,GAAA40B,oBAAA,GAAAxqB,sBAAA,GAAAlK,WAAA,MAAA20B,IAAA,SAAA9oE,EAAAjB,EAAAD,GAcA,QAAAymD,GAAAz+C,EAAA8qC,EAAA9C,GAEAxX,EAAAj3B,KAAAf,MAEAA,KAAA62D,IAAAjsB,EAAAisB,MAOA72D,KAAAwvC,WAAAA,GAAA,EAQAxvC,KAAA4D,MAAA,IAQA5D,KAAA6D,OAAA,IAUA7D,KAAAypE,UAAA,IAOAzpE,KAAA0pE,WAAA,IASA1pE,KAAAsyC,UAAAA,GAAAxF,EAAAqC,YAAA9M,QAUAriC,KAAA22D,WAAA,EAYA32D,KAAA2pE,WAAA,EAUA3pE,KAAAwH,OAAA,KAQAxH,KAAAq3D,oBAAA,EAKAr3D,KAAA4pE,SAAA,KAOA5pE,KAAA6pE,cAAA,EAWA7pE,KAAAoH,QAAA,EAQApH,KAAA+vD,eACA/vD,KAAA8pE,SAAA,EACA9pE,KAAAylE,IAAA,EAGAj+D,GAEAxH,KAAA+pE,WAAAviE,GAhJA,GAAAojC,GAAAlqC,EAAA,YACAosC,EAAApsC,EAAA,YACAs3B,EAAAt3B,EAAA,gBAkKAulD,GAAApjD,UAAA0M,OAAA/L,OAAAw0B,EAAAn1B,WACAojD,EAAApjD,UAAAmH,YAAAi8C,EACAxmD,EAAAD,QAAAymD,EAOAA,EAAApjD,UAAA6mC,OAAA,WAEA1pC,KAAAypE,UAAAzpE,KAAAwH,OAAAwiE,cAAAhqE,KAAAwH,OAAA5D,MACA5D,KAAA0pE,WAAA1pE,KAAAwH,OAAAyiE,eAAAjqE,KAAAwH,OAAA3D,OAEA7D,KAAA4D,MAAA5D,KAAAypE,UAAAzpE,KAAAwvC,WACAxvC,KAAA6D,OAAA7D,KAAA0pE,WAAA1pE,KAAAwvC,WAEAxvC,KAAA6pE,aAAAj/B,EAAAi/B,aAAA7pE,KAAAypE,UAAAzpE,KAAA0pE,YAEA1pE,KAAAonB,KAAA,SAAApnB,OA0BAimD,EAAApjD,UAAAknE,WAAA,SAAAviE,GAEA,GAAA0iE,GAAAlqE,KAAA2pE,SAaA,IAZA3pE,KAAA22D,WAAA,EACA32D,KAAA2pE,WAAA,EAEAO,GAAAlqE,KAAAwH,SAEAxH,KAAAwH,OAAAw3B,OAAA,KACAh/B,KAAAwH,OAAAq3B,QAAA,MAGA7+B,KAAAwH,OAAAA,GAGAxH,KAAAwH,OAAA+1B,UAAAv9B,KAAAwH,OAAA6D,aAAArL,KAAAwH,OAAA5D,OAAA5D,KAAAwH,OAAA3D,OAEA7D,KAAAmqE,oBAEA,KAAA3iE,EAAA6D,WACA,CAGArL,KAAA2pE,WAAA,CAEA,IAAAS,GAAApqE,IAEAwH,GAAAw3B,OAAA,WAEAx3B,EAAAw3B,OAAA,KACAx3B,EAAAq3B,QAAA,KAEAurC,EAAAT,YAKAS,EAAAT,WAAA,EACAS,EAAAD,gBAEAC,EAAAhjD,KAAA,SAAAgjD,KAGA5iE,EAAAq3B,QAAA,WAEAr3B,EAAAw3B,OAAA,KACAx3B,EAAAq3B,QAAA,KAEAurC,EAAAT,YAKAS,EAAAT,WAAA,EACAS,EAAAhjD,KAAA,QAAAgjD,KAOA5iE,EAAA+1B,UAAA/1B,EAAA4F,MAEApN,KAAA2pE,WAAA,EAGAniE,EAAAw3B,OAAA,KACAx3B,EAAAq3B,QAAA,KAEAr3B,EAAA5D,OAAA4D,EAAA3D,QAEA7D,KAAAmqE,gBAGAD,GAEAlqE,KAAAonB,KAAA,SAAApnB,OAMAkqE,GAEAlqE,KAAAonB,KAAA,QAAApnB,SAaAimD,EAAApjD,UAAAsnE,cAAA,WAEAnqE,KAAA22D,WAAA,EACA32D,KAAA0pC,UAOAuc,EAAApjD,UAAA0C,QAAA,WAEAvF,KAAA4pE,gBAEAh/B,GAAAy/B,iBAAArqE,KAAA4pE,gBACAh/B,GAAAo5B,aAAAhkE,KAAA4pE,UAEA5pE,KAAA4pE,SAAA,KAEA7pC,UAAAC,aAEAhgC,KAAAwH,OAAA4F,IAAA,KAGApN,KAAAwH,QAAAxH,KAAAwH,OAAA8iE,eAEA1/B,GAAAy/B,iBAAArqE,KAAAwH,OAAA8iE,SAGAtqE,KAAAwH,OAAA,KAEAxH,KAAAuqE,WASAtkB,EAAApjD,UAAA0nE,QAAA,WAEAvqE,KAAAonB,KAAA,UAAApnB,OAYAimD,EAAApjD,UAAA2nE,kBAAA,SAAAC,GAEAzqE,KAAAwH,OAAA4F,IAAAq9D,EAEAzqE,KAAA+pE,WAAA/pE,KAAAwH,SAaAy+C,EAAAge,UAAA,SAAA2F,EAAAzF,EAAA7xB,GAEA,GAAAkL,GAAA5S,EAAAy/B,iBAAAT,EAOA,IALA1hE,SAAAi8D,GAAA,IAAAyF,EAAAz9C,QAAA,WAEAg4C,GAAA,IAGA3mB,EACA,CAGA,GAAAktB,GAAA,GAAAhrC,MACAykC,KAEAuG,EAAA/tC,YAAA,IAGA6gB,EAAA,GAAAyI,GAAAykB,EAAAp4B,GACAkL,EAAAosB,SAAAA,EAEAc,EAAAt9D,IAAAw8D,EAEAh/B,EAAAy/B,iBAAAT,GAAApsB,EAGAA,EAAAhO,WAAA5E,EAAA+/B,mBAAAf,GAGA,MAAApsB,IAWAyI,EAAA1I,WAAA,SAAAnyC,EAAAknC,GAEAlnC,EAAAk/D,UAEAl/D,EAAAk/D,QAAA,UAAA1/B,EAAAisB,MAGA,IAAArZ,GAAA5S,EAAAy/B,iBAAAj/D,EAAAk/D,QAQA,OANA9sB,KAEAA,EAAA,GAAAyI,GAAA76C,EAAAknC,GACA1H,EAAAy/B,iBAAAj/D,EAAAk/D,SAAA9sB,GAGAA,KAGAtG,WAAA,GAAArC,WAAA,IAAArY,cAAA,KAAAouC,IAAA,SAAAlqE,EAAAjB,EAAAD,GAoDA,QAAAmxC,GAAA/H,EAAAhlC,EAAAC,EAAAyuC,EAAA9C,GAEA,IAAA5G,EAEA,KAAA,IAAAhoC,OAAA,iFAGAgD,GAAAA,GAAA,IACAC,EAAAA,GAAA,IACA2rC,EAAAA,GAAA1C,EAAAuC,UAOA,IAAAmO,GAAA,GAAAyI,EA6DA,IA5DAzI,EAAA55C,MAAAA,EACA45C,EAAA35C,OAAAA,EACA25C,EAAAhO,WAAAA,EACAgO,EAAAlL,UAAAA,GAAAxF,EAAAqC,YAAA9M,QACAmb,EAAAmZ,WAAA,EAGAjzD,EAAA3C,KAAAf,KACAw9C,EACA,GAAA9M,GAAAqC,UAAA,EAAA,EAAAnvC,EAAAC,IASA7D,KAAA4D,MAAAA,EAOA5D,KAAA6D,OAAAA,EAOA7D,KAAAwvC,WAAAA,EAmBAxvC,KAAAyyC,OAAA,KAOAzyC,KAAA4oC,SAAAA,EAEA5oC,KAAA4oC,SAAAvmC,OAAAyqC,EAAAO,cAAAE,MACA,CACA,GAAAnrC,GAAApC,KAAA4oC,SAAAxmC,EAEApC,MAAA6qE,cAAA,GAAAvkB,GAAAlkD,EAAApC,KAAA4D,MAAA5D,KAAA6D,OAAA25C,EAAAlL,UAAAtyC,KAAAwvC,YACAxvC,KAAAw9C,YAAAuS,YAAA3tD,EAAAkJ,IAAAtL,KAAA6qE,cAAA5mE,QAGAjE,KAAAg0C,cAAA,GAAAyjB,GAAAz3D,KAAA4oC,UACA5oC,KAAAg0C,cAAAmM,kBACAngD,KAAAg0C,cAAA3uC,OAAAzB,EAAAC,GACA7D,KAAAyyC,OAAAzyC,KAAAyzC,YAGAzzC,KAAA4oC,SAAAkL,gBAAAtpC,QACAxK,KAAA4oC,SAAA4mB,oBAAAtlD,eAKAlK,MAAAyyC,OAAAzyC,KAAAw0C,aACAx0C,KAAA6qE,cAAA,GAAAzyB,GAAAp4C,KAAA4D,MAAA5D,KAAAwvC,WAAAxvC,KAAA6D,OAAA7D,KAAAwvC,YACAxvC,KAAAw9C,YAAAh2C,OAAAxH,KAAA6qE,cAAAz/D,MAMApL,MAAA0jE,OAAA,EAEA1jE,KAAA8qE,aA9JA,GAAA7kB,GAAAvlD,EAAA,iBACAgD,EAAAhD,EAAA,aACA4lD,EAAA5lD,EAAA,yCACA+2D,EAAA/2D,EAAA,6CACA03C,EAAA13C,EAAA,0CACAgwC,EAAAhwC,EAAA,WACAosC,EAAApsC,EAAA,YACAguD,EAAA,GAAAhe,GAAAG,MA0JAF,GAAA9tC,UAAA0M,OAAA/L,OAAAE,EAAAb,WACA8tC,EAAA9tC,UAAAmH,YAAA2mC,EACAlxC,EAAAD,QAAAmxC,EASAA,EAAA9tC,UAAAwC,OAAA,SAAAzB,EAAAC,EAAAknE,IAEAnnE,IAAA5D,KAAA4D,OAAAC,IAAA7D,KAAA6D,UAKA7D,KAAA0jE,MAAA9/D,EAAA,GAAAC,EAAA,EAEA7D,KAAA4D,MAAA5D,KAAAowD,OAAAxsD,MAAA5D,KAAAmwD,KAAAvsD,MAAAA,EACA5D,KAAA6D,OAAA7D,KAAAowD,OAAAvsD,OAAA7D,KAAAmwD,KAAAtsD,OAAAA,EAEAknE,IAEA/qE,KAAAw9C,YAAA55C,MAAA5D,KAAA4D,MACA5D,KAAAw9C,YAAA35C,OAAA7D,KAAA6D,QAGA7D,KAAA0jE,QAKA1jE,KAAA6qE,cAAAxlE,OAAArF,KAAA4D,MAAA5D,KAAA6D,QAEA7D,KAAAg0C,eAEAh0C,KAAAg0C,cAAA3uC,OAAArF,KAAA4D,MAAA5D,KAAA6D,WAQA8sC,EAAA9tC,UAAAkC,MAAA,WAEA/E,KAAA0jE,QAKA1jE,KAAA4oC,SAAAvmC,OAAAyqC,EAAAO,cAAAE,OAEAvtC,KAAA4oC,SAAAxmC,GAAA+C,gBAAAnF,KAAA4oC,SAAAxmC,GAAAgC,YAAApE,KAAA6qE,cAAA1I,aAGAniE,KAAA6qE,cAAA9lE,UAaA4rC,EAAA9tC,UAAA4wC,YAAA,SAAAzJ,EAAAsM,EAAAvxC,EAAA2tC,GAEA,GAAA1yC,KAAA0jE,MAAA,CAgBA,GAVAhxB,EAAAxqC,SAAAwqC,EAAAA,GAAA,EAEA1yC,KAAA6qE,cAAApuD,UAAA65B,EAGAt2C,KAAA6qE,cAAA3gE,WAGA8/B,EAAA0J,WAAA,EAEAhB,EACA,CAGA1I,EAAAiB,eAAA33B,WAEA02B,EAAAghC,cAAA,IAGA,IACArqE,GAAA+oB,EADA0f,EAAAY,EAAAZ,QAGA,KAAAzoC,EAAA,EAAA+oB,EAAA0f,EAAApoC,OAAA0oB,EAAA/oB,IAAAA,EAEAyoC,EAAAzoC,GAAA+xC,kBAKA,GAAA2pB,GAAAr8D,KAAA4oC,SAAAoL,aAEAh0C,MAAA4oC,SAAAoL,cAAAh0C,KAAAg0C,cACAh0C,KAAA4oC,SAAAgqB,oBAAA5oB,EAAAhqC,KAAA6qE,cAAA9lE,GAEA/E,KAAA4oC,SAAAoL,cAAAqoB,IAYA1rB,EAAA9tC,UAAA2xC,aAAA,SAAAxK,EAAAsM,EAAAvxC,EAAA2tC,GAEA,GAAA1yC,KAAA0jE,MAAA,CAKAhxB,IAAAA,CAEA,IAAA1H,GAAA0jB,CAEA1jB,GAAA13B,WAEAgjC,GAEAtL,EAAAme,OAAA7S,EAGA,IAAA20B,GAAAjhC,EAAAiB,cACAjB,GAAAiB,eAAAD,EAGAhB,EAAA0J,WAAA,CAGA,IACA/yC,GAAA+oB,EADA0f,EAAAY,EAAAZ,QAGA,KAAAzoC,EAAA,EAAA+oB,EAAA0f,EAAApoC,OAAA0oB,EAAA/oB,IAAAA,EAEAyoC,EAAAzoC,GAAA+xC,iBAGA3tC,IAEA/E,KAAA6qE,cAAA9lE,OAKA,IAAAgzB,GAAA/3B,KAAA6qE,cAAA9yC,QAEAmzC,EAAAlrE,KAAA4oC,SAAA4G,UAEAxvC,MAAA4oC,SAAA4G,WAAAxvC,KAAAwvC,WAEAxvC,KAAA4oC,SAAAgqB,oBAAA5oB,EAAAjS,GAEA/3B,KAAA4oC,SAAA4G,WAAA07B,EAEAlhC,EAAAiB,iBAAAD,IAGAhB,EAAAiB,eAAAggC,KAUAt6B,EAAA9tC,UAAA0C,QAAA,WAEA7B,EAAAb,UAAA0C,QAAAxE,KAAAf,MAAA,GAEAA,KAAA6qE,cAAAtlE,UAGAvF,KAAAg0C,eAEAh0C,KAAAg0C,cAAAzuC,UAGAvF,KAAA4oC,SAAA,MAQA+H,EAAA9tC,UAAAsoE,SAAA,WAEA,GAAAT,GAAA,GAAAhrC,MAEA,OADAgrC,GAAAt9D,IAAApN,KAAAorE,YACAV,GAQA/5B,EAAA9tC,UAAAuoE,UAAA,WAEA,MAAAprE,MAAAqrE,YAAA5V,aAQA9kB,EAAA9tC,UAAAwoE,UAAA,WAEA,GAAArrE,KAAA4oC,SAAAvmC,OAAAyqC,EAAAO,cAAAE,MACA,CACA,GAAAnrC,GAAApC,KAAA4oC,SAAAxmC,GACAwB,EAAA5D,KAAA6qE,cAAA9/D,KAAAnH,MACAC,EAAA7D,KAAA6qE,cAAA9/D,KAAAlH,OAEAynE,EAAA,GAAAC,YAAA,EAAA3nE,EAAAC,EAEAzB,GAAA+C,gBAAA/C,EAAAgC,YAAApE,KAAA6qE,cAAA1I,aACA//D,EAAAopE,WAAA,EAAA,EAAA5nE,EAAAC,EAAAzB,EAAAkF,KAAAlF,EAAAmF,cAAA+jE,GACAlpE,EAAA+C,gBAAA/C,EAAAgC,YAAA,KAEA,IAAAqnE,GAAA,GAAArzB,GAAAx0C,EAAAC,GACA6nE,EAAAD,EAAA1zC,QAAAg+B,aAAA,EAAA,EAAAnyD,EAAAC,EAKA,OAJA6nE,GAAAppE,KAAA4N,IAAAo7D,GAEAG,EAAA1zC,QAAAk+B,aAAAyV,EAAA,EAAA,GAEAD,EAAArgE,OAIA,MAAApL,MAAA6qE,cAAAz/D,QASAulC,EAAA9tC,UAAA8oE,UAAA,WAEA,GAAA/nE,GAAAC,CAEA,IAAA7D,KAAA4oC,SAAAvmC,OAAAyqC,EAAAO,cAAAE,MACA,CACA,GAAAnrC,GAAApC,KAAA4oC,SAAAxmC,EACAwB,GAAA5D,KAAA6qE,cAAA9/D,KAAAnH,MACAC,EAAA7D,KAAA6qE,cAAA9/D,KAAAlH,MAEA,IAAAynE,GAAA,GAAAC,YAAA,EAAA3nE,EAAAC,EAMA,OAJAzB,GAAA+C,gBAAA/C,EAAAgC,YAAApE,KAAA6qE,cAAA1I,aACA//D,EAAAopE,WAAA,EAAA,EAAA5nE,EAAAC,EAAAzB,EAAAkF,KAAAlF,EAAAmF,cAAA+jE,GACAlpE,EAAA+C,gBAAA/C,EAAAgC,YAAA,MAEAknE,EAOA,MAHA1nE,GAAA5D,KAAA6qE,cAAAz/D,OAAAxH,MACAC,EAAA7D,KAAA6qE,cAAAz/D,OAAAvH,OAEA7D,KAAA6qE,cAAAz/D,OAAAC,WAAA,MAAA0qD,aAAA,EAAA,EAAAnyD,EAAAC,GAAAvB,MAWAquC,EAAA9tC,UAAA+oE,SAAA,SAAAj3D,EAAAmD,GAEA,GAAA9X,KAAA4oC,SAAAvmC,OAAAyqC,EAAAO,cAAAE,MACA,CACA,GAAAnrC,GAAApC,KAAA4oC,SAAAxmC,GAEAkpE,EAAA,GAAAC,YAAA,EAMA,OAJAnpE,GAAA+C,gBAAA/C,EAAAgC,YAAApE,KAAA6qE,cAAA1I,aACA//D,EAAAopE,WAAA72D,EAAAmD,EAAA,EAAA,EAAA1V,EAAAkF,KAAAlF,EAAAmF,cAAA+jE,GACAlpE,EAAA+C,gBAAA/C,EAAAgC,YAAA,MAEAknE,EAIA,MAAAtrE,MAAA6qE,cAAAz/D,OAAAC,WAAA,MAAA0qD,aAAAphD,EAAAmD,EAAA,EAAA,GAAAxV,QAIA40C,WAAA,GAAAvC,UAAA,GAAAkK,yCAAA,GAAAgtB,4CAAA,GAAAC,wCAAA,GAAAC,gBAAA,GAAAC,YAAA,KAAAC,IAAA,SAAAvrE,EAAAjB,EAAAD,GA4BA,QAAAkE,GAAA85C,EAAAsP,EAAAqD,EAAA/qC,EAAA6jC,GAEAjxB,EAAAj3B,KAAAf,MAOAA,KAAAksE,SAAA,EAEApf,IAEA9sD,KAAAksE,SAAA,EACApf,EAAA,GAAApc,GAAAqC,UAAA,EAAA,EAAA,EAAA,IAGAyK,YAAA95C,KAEA85C,EAAAA,EAAAA,aAQAx9C,KAAAw9C,YAAAA,EAQAx9C,KAAAowD,OAAAtD,EAOA9sD,KAAAolB,KAAAA,EAOAplB,KAAA0jE,OAAA,EAOA1jE,KAAAmsE,gBAAA,EAQAnsE,KAAAwwD,KAAA,KAOAxwD,KAAA4D,MAAA,EAOA5D,KAAA6D,OAAA,EAQA7D,KAAAmwD,KAAAA,GAAArD,EAQA9sD,KAAAipD,SAAAA,EAEAzL,EAAAmZ,WAEA32D,KAAAksE,UAEApf,EAAA,GAAApc,GAAAqC,UAAA,EAAA,EAAAyK,EAAA55C,MAAA45C,EAAA35C,QAGA25C,EAAAx2B,GAAA,SAAAhnB,KAAAosE,qBAAApsE,OAEAA,KAAA8sD,MAAAA,GAIAtP,EAAAv2B,KAAA,SAAAjnB,KAAAqsE,oBAAArsE,MAxIA,GAAAimD,GAAAvlD,EAAA,iBACAwlD,EAAAxlD,EAAA,sBACAylD,EAAAzlD,EAAA,gBACAs3B,EAAAt3B,EAAA,iBACAgwC,EAAAhwC,EAAA,WACAkqC,EAAAlqC,EAAA,WA+IAgD,GAAAb,UAAA0M,OAAA/L,OAAAw0B,EAAAn1B,WACAa,EAAAb,UAAAmH,YAAAtG,EACAjE,EAAAD,QAAAkE,EAEA6L,OAAAuhC,iBAAAptC,EAAAb,WAOAiqD,OACA98C,IAAA,WAEA,MAAAhQ,MAAAowD,QAEAlgD,IAAA,SAAA48C,GASA,GAPA9sD,KAAAowD,OAAAtD,EAEA9sD,KAAAksE,SAAA,EAEAlsE,KAAA4D,MAAAkpD,EAAAlpD,MACA5D,KAAA6D,OAAAipD,EAAAjpD,QAEA7D,KAAAolB,OAAAplB,KAAAipD,SAAA6D,EAAAn4C,EAAAm4C,EAAAlpD,MAAA5D,KAAAw9C,YAAA55C,OAAAkpD,EAAAh1C,EAAAg1C,EAAAjpD,OAAA7D,KAAAw9C,YAAA35C,QAEA,KAAA,IAAAjD,OAAA,wEAAAZ,KAIAA,MAAA0jE,MAAA5W,GAAAA,EAAAlpD,OAAAkpD,EAAAjpD,QAAA7D,KAAAw9C,YAAAmZ,UAEA32D,KAAAolB,MAEAplB,KAAA4D,MAAA5D,KAAAolB,KAAAxhB,MACA5D,KAAA6D,OAAA7D,KAAAolB,KAAAvhB,OACA7D,KAAAowD,OAAAxsD,MAAA5D,KAAAolB,KAAAxhB,MACA5D,KAAAowD,OAAAvsD,OAAA7D,KAAAolB,KAAAvhB,QAIA7D,KAAAmwD,KAAArD,EAGA9sD,KAAA0jE,OAEA1jE,KAAA8qE,iBAUApnE,EAAAb,UAAA6mC,OAAA,WAEA1pC,KAAAw9C,YAAA9T,UAQAhmC,EAAAb,UAAAwpE,oBAAA,SAAA7uB,GAGAx9C,KAAAksE,QAEAlsE,KAAA8sD,MAAA,GAAApc,GAAAqC,UAAA,EAAA,EAAAyK,EAAA55C,MAAA45C,EAAA35C,QAIA7D,KAAA8sD,MAAA9sD,KAAAowD,OAGApwD,KAAAonB,KAAA,SAAApnB,OAQA0D,EAAAb,UAAAupE,qBAAA,SAAA5uB,GAEAx9C,KAAAowD,OAAAxsD,MAAA45C,EAAA55C,MACA5D,KAAAowD,OAAAvsD,OAAA25C,EAAA35C,OAEA7D,KAAAonB,KAAA,SAAApnB,OAQA0D,EAAAb,UAAA0C,QAAA,SAAA+mE,GAEAtsE,KAAAw9C,cAEA8uB,GAEAtsE,KAAAw9C,YAAAj4C,UAGAvF,KAAAw9C,YAAAt2B,IAAA,SAAAlnB,KAAAosE,qBAAApsE,MACAA,KAAAw9C,YAAAt2B,IAAA,SAAAlnB,KAAAqsE,oBAAArsE,MAEAA,KAAAw9C,YAAA,MAGAx9C,KAAAowD,OAAA,KACApwD,KAAAwwD,KAAA,KACAxwD,KAAAolB,KAAA,KACAplB,KAAAmwD,KAAA,KAEAnwD,KAAA0jE,OAAA,EAEA1jE,KAAAknB,IAAA,UAAAlnB,KAAAuqE,QAAAvqE,MACAA,KAAAknB,IAAA,SAAAlnB,KAAA0pC,OAAA1pC,OAQA0D,EAAAb,UAAA21C,MAAA,WAEA,MAAA,IAAA90C,GAAA1D,KAAAw9C,YAAAx9C,KAAA8sD,MAAA9sD,KAAAmwD,KAAAnwD,KAAAolB,KAAAplB,KAAAipD,SAQAvlD,EAAAb,UAAAioE,WAAA,WAEA9qE,KAAAwwD,OAEAxwD,KAAAwwD,KAAA,GAAArK,IAGAnmD,KAAAwwD,KAAAtgD,IAAAlQ,KAAAmwD,KAAAnwD,KAAAw9C,YAAAx9C,KAAAipD,SAaAvlD,EAAAugE,UAAA,SAAA2F,EAAAzF,EAAA7xB,GAEA,GAAAruC,GAAA2mC,EAAAo5B,aAAA4F,EAQA,OANA3lE,KAEAA,EAAA,GAAAP,GAAAuiD,EAAAge,UAAA2F,EAAAzF,EAAA7xB,IACA1H,EAAAo5B,aAAA4F,GAAA3lE,GAGAA,GAWAP,EAAAogE,UAAA,SAAAC,GAEA,GAAA9/D,GAAA2mC,EAAAo5B,aAAAD,EAEA,KAAA9/D,EAEA,KAAA,IAAArD,OAAA,gBAAAmjE,EAAA,wCAGA,OAAA9/D,IAWAP,EAAA65C,WAAA,SAAAnyC,EAAAknC,GAEA,MAAA,IAAA5uC,GAAAuiD,EAAA1I,WAAAnyC,EAAAknC,KAWA5uC,EAAA6oE,UAAA,SAAAC,EAAAl6B,GAEA,MAAA,gBAAAk6B,GAEA9oE,EAAA+oE,aAAAD,EAAAl6B,GAIA,GAAA5uC,GAAAwiD,EAAAqmB,UAAAC,EAAAl6B,KAYA5uC,EAAA+oE,aAAA,SAAAC,EAAAp6B,GAEA,MAAA,IAAA5uC,GAAAwiD,EAAAymB,QAAAD,EAAAp6B,KAUA5uC,EAAAkpE,kBAAA,SAAA3oE,EAAAqH,GAEAs/B,EAAAo5B,aAAA14D,GAAArH,GAUAP,EAAAmpE,uBAAA,SAAAvhE,GAEA,GAAArH,GAAA2mC,EAAAo5B,aAAA14D,EAKA,cAHAs/B,GAAAo5B,aAAA14D,SACAs/B,GAAAy/B,iBAAA/+D,GAEArH,GASAP,EAAAsvC,MAAA,GAAAtvC,GAAA,GAAAuiD,MAEAtR,UAAA,GAAAE,WAAA,IAAAk3B,gBAAA,GAAAe,eAAA,IAAAC,qBAAA,IAAAvwC,cAAA,KAAAwwC,KAAA,SAAAtsE,EAAAjB,EAAAD,GASA,QAAA2mD,KAEAnmD,KAAAywD,GAAA,EACAzwD,KAAA0wD,GAAA,EAEA1wD,KAAAs6C,GAAA,EACAt6C,KAAAu6C,GAAA,EAEAv6C,KAAAw6C,GAAA,EACAx6C,KAAAy6C,GAAA,EAEAz6C,KAAAo+C,GAAA,EACAp+C,KAAAq+C,GAAA,EAEAr+C,KAAAitE,WAAA,EACAjtE,KAAAktE,WAAA,EACAltE,KAAAmtE,WAAA,EACAntE,KAAAotE,WAAA,EAEAptE,KAAA0lE,WAAA,GAAAlB,aAAA,GAGA/kE,EAAAD,QAAA2mD,EASAA,EAAAtjD,UAAAqN,IAAA,SAAA48C,EAAAugB,EAAApkB,GAEA,GAAAqkB,GAAAD,EAAAzpE,MACA2pE,EAAAF,EAAAxpE,MAEAolD,IAEAjpD,KAAAywD,IAAA3D,EAAAn4C,EAAAm4C,EAAAjpD,QAAAypE,EACAttE,KAAA0wD,GAAA5D,EAAAh1C,EAAAy1D,EAEAvtE,KAAAs6C,IAAAwS,EAAAn4C,EAAAm4C,EAAAjpD,QAAAypE,EACAttE,KAAAu6C,IAAAuS,EAAAh1C,EAAAg1C,EAAAlpD,OAAA2pE,EAEAvtE,KAAAw6C,GAAAsS,EAAAn4C,EAAA24D,EACAttE,KAAAy6C,IAAAqS,EAAAh1C,EAAAg1C,EAAAlpD,OAAA2pE,EAEAvtE,KAAAo+C,GAAA0O,EAAAn4C,EAAA24D,EACAttE,KAAAq+C,GAAAyO,EAAAh1C,EAAAy1D,IAKAvtE,KAAAywD,GAAA3D,EAAAn4C,EAAA24D,EACAttE,KAAA0wD,GAAA5D,EAAAh1C,EAAAy1D,EAEAvtE,KAAAs6C,IAAAwS,EAAAn4C,EAAAm4C,EAAAlpD,OAAA0pE,EACAttE,KAAAu6C,GAAAuS,EAAAh1C,EAAAy1D,EAEAvtE,KAAAw6C,IAAAsS,EAAAn4C,EAAAm4C,EAAAlpD,OAAA0pE,EACAttE,KAAAy6C,IAAAqS,EAAAh1C,EAAAg1C,EAAAjpD,QAAA0pE,EAEAvtE,KAAAo+C,GAAA0O,EAAAn4C,EAAA24D,EACAttE,KAAAq+C,IAAAyO,EAAAh1C,EAAAg1C,EAAAjpD,QAAA0pE,GAGAvtE,KAAA0lE,WAAA,IAAA,MAAA1lE,KAAA0wD,GAAA,QAAA,GAAA,MAAA1wD,KAAAywD,GAAA,MACAzwD,KAAA0lE,WAAA,IAAA,MAAA1lE,KAAAu6C,GAAA,QAAA,GAAA,MAAAv6C,KAAAs6C,GAAA,MACAt6C,KAAA0lE,WAAA,IAAA,MAAA1lE,KAAAy6C,GAAA,QAAA,GAAA,MAAAz6C,KAAAw6C,GAAA,MACAx6C,KAAA0lE,WAAA,IAAA,MAAA1lE,KAAAq+C,GAAA,QAAA,GAAA,MAAAr+C,KAAAo+C,GAAA,YAGAovB,KAAA,SAAA9sE,EAAAjB,EAAAD,GAgCA,QAAA0mD,GAAA1+C,EAAA8qC,GAEA,IAAA9qC,EAEA,KAAA,IAAA5G,OAAA,uCAMA4G,EAAAimE,aAAAjmE,EAAAkmE,kBAAAlmE,EAAAimE,aAAAjmE,EAAAmmE,mBAAAnmE,EAAA5D,OAAA4D,EAAA3D,SAEA2D,EAAA+1B,UAAA,GAGA0oB,EAAAllD,KAAAf,KAAAwH,EAAA8qC,GAQAtyC,KAAA4tE,YAAA,EAEA5tE,KAAA6tE,UAAA7tE,KAAA6tE,UAAA7qE,KAAAhD,MACAA,KAAA8tE,WAAA9tE,KAAA8tE,WAAA9qE,KAAAhD,MAEAwH,EAAA+1B,WAEA/1B,EAAAm4B,iBAAA,UAAA3/B,KAAA8tE,YACAtmE,EAAAm4B,iBAAA,iBAAA3/B,KAAA8tE,YAGAtmE,EAAAm4B,iBAAA,OAAA3/B,KAAA+tE,aAAA/qE,KAAAhD,OACAwH,EAAAm4B,iBAAA,QAAA3/B,KAAAguE,YAAAhrE,KAAAhD,QAGAA,KAAAiuE,UAAA,EAwJA,QAAAC,GAAA3pD,EAAAliB,GAEAA,IAEAA,EAAA,SAAAkiB,EAAAQ,OAAAR,EAAA0F,YAAA,KAAA,GAGA,IAAAziB,GAAAq4B,SAAAC,cAAA,SAKA,OAHAt4B,GAAA4F,IAAAmX,EACA/c,EAAAnF,KAAAA,EAEAmF,EAzOA,GAAAy+C,GAAAvlD,EAAA,iBACAkqC,EAAAlqC,EAAA,WAuEAwlD,GAAArjD,UAAA0M,OAAA/L,OAAAyiD,EAAApjD,WACAqjD,EAAArjD,UAAAmH,YAAAk8C,EACAzmD,EAAAD,QAAA0mD,EAOAA,EAAArjD,UAAAgrE,UAAA,WAEA7tE,KAAA4tE,aAEA/tE,OAAAsuE,sBAAAnuE,KAAA6tE,WACA7tE,KAAA0pC,WASAwc,EAAArjD,UAAAkrE,aAAA,WAEA/tE,KAAA4tE,aAEA/tE,OAAAsuE,sBAAAnuE,KAAA6tE,WACA7tE,KAAA4tE,YAAA,IASA1nB,EAAArjD,UAAAmrE,YAAA,WAEAhuE,KAAA4tE,YAAA,GAQA1nB,EAAArjD,UAAAirE,WAAA,WAEA9tE,KAAA22D,WAAA,EAEA32D,KAAAwH,SAEAxH,KAAAwH,OAAAo3B,oBAAA,UAAA5+B,KAAA8tE,YACA9tE,KAAAwH,OAAAo3B,oBAAA,iBAAA5+B,KAAA8tE,YAEA9tE,KAAA4D,MAAA5D,KAAAwH,OAAA4mE,WACApuE,KAAA6D,OAAA7D,KAAAwH,OAAA6mE,YAEAruE,KAAAwH,OAAA8mE,OAGAtuE,KAAAiuE,WAEAjuE,KAAAiuE,UAAA,EACAjuE,KAAAonB,KAAA,SAAApnB,SASAkmD,EAAArjD,UAAA0C,QAAA,WAEAvF,KAAAwH,QAAAxH,KAAAwH,OAAA8iE,gBAEA1/B,GAAAy/B,iBAAArqE,KAAAwH,OAAA8iE,eACAtqE,MAAAwH,OAAA8iE,SAGArkB,EAAApjD,UAAA0C,QAAAxE,KAAAf,OAWAkmD,EAAAqmB,UAAA,SAAAC,EAAAl6B,GAEAk6B,EAAAlC,UAEAkC,EAAAlC,QAAA,SAAA1/B,EAAAisB,MAGA,IAAArZ,GAAA5S,EAAAy/B,iBAAAmC,EAAAlC,QAQA,OANA9sB,KAEAA,EAAA,GAAA0I,GAAAsmB,EAAAl6B,GACA1H,EAAAy/B,iBAAAmC,EAAAlC,SAAA9sB,GAGAA,GAeA0I,EAAAymB,QAAA,SAAA4B,EAAAj8B,GAEA,GAAAk6B,GAAA3sC,SAAAC,cAAA,QAGA,IAAAh0B,MAAA4O,QAAA6zD,GAEA,IAAA,GAAA5tE,GAAA,EAAAA,EAAA4tE,EAAAvtE,SAAAL,EAEA6rE,EAAAvsC,YAAAiuC,EAAAK,EAAA5tE,GAAAyM,KAAAmhE,EAAA5tE,GAAA4tE,EAAA5tE,GAAAigC,WAMA4rC,GAAAvsC,YAAAiuC,EAAAK,EAAAnhE,KAAAmhE,EAAAA,EAAA3tC,MAMA,OAHA4rC,GAAA1wC,OACA0wC,EAAA8B,OAEApoB,EAAAqmB,UAAAC,EAAAl6B,IAGA4T,EAAAsoB,SAAAtoB,EAAAymB,UAiBA93B,WAAA,IAAAk3B,gBAAA,KAAA0C,KAAA,SAAA/tE,EAAAjB,EAAAD,GAgBA,QAAAkvE,KAEA,GAAAC,GAAA3uE,IAYAA,MAAA4uE,MAAA,SAAAC,GAEAF,EAAAG,WAAA,KAEAH,EAAAp2D,UAGAo2D,EAAAjlC,OAAAmlC,GAEAF,EAAAp2D,SAAA,OAAAo2D,EAAAG,YAAAH,EAAAI,SAAA5wD,UAAA6wD,GAAA,KAEAL,EAAAG,WAAAX,sBAAAQ,EAAAC,UASA5uE,KAAA+uE,SAAA,GAAA/2C,GAMAh4B,KAAA8uE,WAAA,KAOA9uE,KAAAivE,cAAA,IAUAjvE,KAAAkvE,WAAA,EAWAlvE,KAAAmvE,UAAA,EAYAnvE,KAAAovE,UAAA,EAAAtiC,EAAAM,YAYAptC,KAAAqvE,SAAA,EAYArvE,KAAAsvE,MAAA,EAaAtvE,KAAAuY,SAAA,EApIA,GAAAu0B,GAAApsC,EAAA,YACAs3B,EAAAt3B,EAAA,iBAEAsuE,EAAA,MAoIAz/D,QAAAuhC,iBAAA49B,EAAA7rE,WAYA0sE,KACAv/D,IAAA,WAEA,MAAA,KAAAhQ,KAAAovE,YAgBAI,QACAx/D,IAAA,WAEA,MAAA,KAAAhQ,KAAAivE,eAEA/+D,IAAA,SAAAu/D,GAGA,GAAAC,GAAAl6D,KAAAgE,IAAAhE,KAAAC,IAAA,EAAAg6D,GAAA,IAAA3iC,EAAAM,YACAptC,MAAAivE,cAAA,EAAAS,MAYAhB,EAAA7rE,UAAA8sE,iBAAA,WAEA,OAAA3vE,KAAA8uE,YAAA9uE,KAAA+uE,SAAA5wD,UAAA6wD,GAAA,KAGAhvE,KAAAqvE,SAAAO,YAAAC,MACA7vE,KAAA8uE,WAAAX,sBAAAnuE,KAAA4uE,SASAF,EAAA7rE,UAAAitE,gBAAA,WAEA,OAAA9vE,KAAA8uE,aAEAiB,qBAAA/vE,KAAA8uE,YACA9uE,KAAA8uE,WAAA,OAcAJ,EAAA7rE,UAAAmtE,iBAAA,WAEAhwE,KAAAuY,QAEAvY,KAAA2vE,mBAEA3vE,KAAAkvE,WAEAlvE,KAAAwK,SAaAkkE,EAAA7rE,UAAAu4B,IAAA,SAAAznB,EAAAokB,GAMA,MAJA/3B,MAAA+uE,SAAA/nD,GAAAgoD,EAAAr7D,EAAAokB,GAEA/3B,KAAAgwE,mBAEAhwE,MAYA0uE,EAAA7rE,UAAAotE,QAAA,SAAAt8D,EAAAokB,GAMA,MAJA/3B,MAAA+uE,SAAA9nD,KAAA+nD,EAAAr7D,EAAAokB,GAEA/3B,KAAAgwE,mBAEAhwE,MAYA0uE,EAAA7rE,UAAAqtE,OAAA,SAAAv8D,EAAAokB,GASA,MAPA/3B,MAAA+uE,SAAA7nD,IAAA8nD,EAAAr7D,EAAAokB,GAEA/3B,KAAA+uE,SAAA5wD,UAAA6wD,GAAA,IAEAhvE,KAAA8vE,kBAGA9vE,MAOA0uE,EAAA7rE,UAAA2H,MAAA,WAEAxK,KAAAuY,UAEAvY,KAAAuY,SAAA,EACAvY,KAAA2vE,qBAQAjB,EAAA7rE,UAAAmxB,KAAA,WAEAh0B,KAAAuY,UAEAvY,KAAAuY,SAAA,EACAvY,KAAA8vE,oBAiBApB,EAAA7rE,UAAA6mC,OAAA,SAAAymC,GAEA,GAAAf,EAGAe,GAAAA,GAAAP,YAAAC,MAEAT,EAAApvE,KAAAovE,UAAAe,EAAAnwE,KAAAqvE,SAGAD,EAAApvE,KAAAivE,gBAEAG,EAAApvE,KAAAivE,eAGAjvE,KAAAmvE,UAAAC,EAAAtiC,EAAAM,YAAAptC,KAAAsvE,MAGAtvE,KAAA+uE,SAAA3nD,KAAA4nD,EAAAhvE,KAAAmvE,WAEAnvE,KAAAqvE,SAAAc,GAGA1wE,EAAAD,QAAAkvE,IAEAx3B,WAAA,GAAA1a,cAAA,KAAA4zC,KAAA,SAAA1vE,EAAAjB,EAAAD,GACA,GAAAkvE,GAAAhuE,EAAA,YA4CA2vE,EAAA,GAAA3B,EACA2B,GAAAnB,WAAA,EAKAzvE,EAAAD,SACA6wE,OAAAA,EACA3B,OAAAA,KAGA4B,WAAA,MAAAC,KAAA,SAAA7vE,EAAAjB,EAAAD,GAOA,GAGAilE,GAAA,SAAA15D,GASA,IAAA,GALAylE,GAAA,EAAAzlE,EAEAi2C,EAAA,GAAAqB,aAAAmuB,GAGA7vE,EAAA,EAAA+oB,EAAA,EAAA8mD,EAAA7vE,EAAAA,GAAA,EAAA+oB,GAAA,EAEAs3B,EAAArgD,EAAA,GAAA+oB,EAAA,EACAs3B,EAAArgD,EAAA,GAAA+oB,EAAA,EACAs3B,EAAArgD,EAAA,GAAA+oB,EAAA,EACAs3B,EAAArgD,EAAA,GAAA+oB,EAAA,EACAs3B,EAAArgD,EAAA,GAAA+oB,EAAA,EACAs3B,EAAArgD,EAAA,GAAA+oB,EAAA,CAGA,OAAAs3B,GAGAvhD,GAAAD,QAAAilE,OACAgM,KAAA,SAAA/vE,EAAAjB,EAAAD,GACA,GAAAstC,GAAApsC,EAAA,YAKAkqC,EAAAnrC,EAAAD,SACAkxE,KAAA,EACAC,YAAA,EAEA34C,aAAAt3B,EAAA,iBACA2xD,aAAA3xD,EAAA,kBACA6V,MAAA7V,EAAA,SAOAm2D,IAAA,WAEA,QAAAjsB,EAAA8lC,MAUA7vB,QAAA,SAAA+vB,EAAApnD,GAQA,MANAA,GAAAA,MAEAA,EAAA,IAAAonD,GAAA,GAAA,KAAA,IACApnD,EAAA,IAAAonD,GAAA,EAAA,KAAA,IACApnD,EAAA,IAAA,IAAAonD,GAAA,IAEApnD,GASAgoC,WAAA,SAAAof,GAKA,MAHAA,GAAAA,EAAAn2D,SAAA,IACAm2D,EAAA,SAAA7rD,OAAA,EAAA,EAAA6rD,EAAA5vE,QAAA4vE,EAEA,IAAAA,GASAxa,QAAA,SAAAya,GAEA,OAAA,IAAAA,EAAA,IAAA,KAAA,IAAAA,EAAA,IAAA,GAAA,IAAAA,EAAA,IAQA9d,0BAAA,WAEA,GAAA,mBAAAlzB,UAEA,OAAA,CAGA,IAAAixC,GAAA,iFACAC,EAAA,mDAEAC,EAAA,GAAAtxC,MACAsxC,GAAA5jE,IAAA0jE,EAAA,WAAAC,CAEA,IAAAE,GAAA,GAAAvxC,MACAuxC,GAAA7jE,IAAA0jE,EAAA,WAAAC,CAEA,IAAA3lE,GAAAy0B,SAAAC,cAAA,SACA10B,GAAAxH,MAAA,EACAwH,EAAAvH,OAAA,CAEA,IAAAk0B,GAAA3sB,EAAAC,WAAA,KACA0sB,GAAAgmB,yBAAA,WACAhmB,EAAAk1B,UAAA+jB,EAAA,EAAA,GACAj5C,EAAAk1B,UAAAgkB,EAAA,EAAA,EAEA,IAAA3uE,GAAAy1B,EAAAg+B,aAAA,EAAA,EAAA,EAAA,GAAAzzD,IAEA,OAAA,OAAAA,EAAA,IAAA,IAAAA,EAAA,IAAA,IAAAA,EAAA,IAUA4uE,kBAAA,SAAAC,GAGA,GAAAA,EAAA,GAAA,KAAAA,EAAAA,EAAA,GAEA,MAAAA,EAMA,KAFA,GAAA78D,GAAA,EAEA68D,EAAA78D,GAEAA,IAAA,CAGA,OAAAA,IAWAu1D,aAAA,SAAAjmE,EAAAC,GAEA,MAAAD,GAAA,GAAA,KAAAA,EAAAA,EAAA,IAAAC,EAAA,GAAA,KAAAA,EAAAA,EAAA,IAUA8mE,mBAAA,SAAA78C,GAEA,GAAA0hB,GAAA1C,EAAAsC,cAAAjrB,KAAA2J,EAEA,OAAA0hB,GAEA4hC,WAAA5hC,EAAA,IAGA,GAaA4hB,SAAA,SAAA/uD,GAEA,IAAAuoC,EAAA+lC,WAAA,CAKA,GAAA5wC,UAAAsxC,UAAAxmD,cAAAsB,QAAA,UAAA,GACA,CACA,GAAAvU,IACA,uBAAAk1B,EAAAC,QAAA,QAAA1qC,EAAA,yDACA,sCACA,sCACA,sDACA,sCACA,sCACA,sCACA,mDACA,mDACA,mDAGAxC,QAAA+M,QAAAc,IAAAkG,MAAAhH,QAAAgL,OAEA/X,QAAA+M,SAEA/M,OAAA+M,QAAAc,IAAA,WAAAo/B,EAAAC,QAAA,MAAA1qC,EAAA,4BAGAuoC,GAAA+lC,YAAA,IAQA9pB,iBAAA,WAEA,GAAAyqB,IAAAttE,SAAA,EACA,KAEA,IAAAnE,OAAA0xE,sBAEA,OAAA,CAGA,IAAAnmE,GAAAy0B,SAAAC,cAAA,UACA19B,EAAAgJ,EAAAC,WAAA,QAAAimE,IAAAlmE,EAAAC,WAAA,qBAAAimE,EAEA,UAAAlvE,IAAAA,EAAAovE,uBAAAxtE,SAEA,MAAA9D,GAEA,OAAA,IAUAqjE,KAAA,SAAAnjE,GAEA,MAAAA,GAAA,EAAAA,EAAA,GAAA,EAAA,GAUAyqC,YAAA,SAAA72B,EAAAy9D,EAAAC,GAEA,GAAA1wE,GAAAgT,EAAAhT,MAEA,MAAAywE,GAAAzwE,GAAA,IAAA0wE,GAAA,CAKAA,EAAAD,EAAAC,EAAA1wE,EAAAA,EAAAywE,EAAAC,CACA,KAAA,GAAA/wE,GAAA8wE,EAAAr8D,EAAApU,EAAA0wE,EAAAt8D,EAAAzU,IAAAA,EAEAqT,EAAArT,GAAAqT,EAAArT,EAAA+wE,EAGA19D,GAAAhT,OAAAoU,IAOA4uD,gBAMAqG,uBAGAnzB,WAAA,GAAAy6B,iBAAA,IAAAp7D,MAAA,GAAAimB,cAAA,KAAAo1C,KAAA,SAAAlxE,EAAAjB,EAAAD,GAYA,QAAA6yD,GAAAt8C,GAEAA,EAAA87D,aAQA97D,EAAAs2B,eAAA,SAAAylC,EAAAC,GAEAh8D,EAAA87D,UAAAC,GAAAC,GAOAh8D,EAAAlT,UAAAsvD,YAAA,WAEAnyD,KAAA+rC,QAAA/rC,KAAA+rC,WAEA,KAAA,GAAAxrC,KAAAwV,GAAA87D,UAEA7xE,KAAA+rC,QAAAxrC,GAAA,GAAAwV,GAAA87D,UAAAtxE,GAAAP,OAQA+V,EAAAlT,UAAAgwD,eAAA,WAEA,IAAA,GAAAtyD,KAAAP,MAAA+rC,QAEA/rC,KAAA+rC,QAAAxrC,GAAAgF,UACAvF,KAAA+rC,QAAAxrC,GAAA,IAGAP,MAAA+rC,QAAA,MAKAtsC,EAAAD,SAMA8yD,MAAA,SAAAv8C,GAEAs8C,EAAAt8C,UAIAi8D,KAAA,SAAAtxE,EAAAjB,EAAAD,GAEA,GAAAgqC,GAAA9oC,EAAA,UACAuxE,EAAAvxE,EAAA,UACAwxE,EAAAxxE,EAAA,YACAy1C,EAAAz1C,EAAA,YAWA8oC,GAAA2oC,YAAA,WAEA,KAAA,IAAAC,gBAAA,uFAYA5oC,EAAA6oC,YAAA,WAEA,KAAA,IAAAD,gBAAA,+FAGA7iE,OAAAuhC,iBAAAtH,GAUA8oC,OACAtiE,IAAA,WAGA,MADApD,SAAAK,KAAA,sFACAu8B,EAAAiH,YAYA8hC,wBACAviE,IAAA,WAGA,MADApD,SAAAK,KAAA,6FACAu8B,EAAAiH,YAYA+hC,OACAxiE,IAAA,WAGA,MADApD,SAAAK,KAAA,sGACAglE,EAAAQ,OAYAC,MACA1iE,IAAA,WAGA,MADApD,SAAAK,KAAA,iFACAglE,EAAAS,OAYAC,WACA3iE,IAAA,WAGA,MADApD,SAAAK,KAAA,oGACAilE,EAAAS,YAYAC,cACA5iE,IAAA,WAGA,MADApD,SAAAK,KAAA,6GACAilE,EAAAU,eAYAC,YACA7iE,IAAA,WAGA,MADApD,SAAAK,KAAA,uGACAilE,EAAAW,aAYA/0B,YACA9tC,IAAA,WAGA,MADApD,SAAAK,KAAA,qFACAu8B,EAAAiE,cAYAqlC,YACA9iE,IAAA,WAGA,MADApD,SAAAK,KAAA,qFACAu8B,EAAA2F,cAYAk7B,kBACAr6D,IAAA,WAGA,MADApD,SAAAK,KAAA,uHACAu8B,EAAAoB,MAAAy/B,mBAYArG,cACAh0D,IAAA,WAGA,MADApD,SAAAK,KAAA,2GACAu8B,EAAAoB,MAAAo5B,eAYAtzB,MACA1gC,IAAA,WAGA,MADApD,SAAAK,KAAA,uFACAu8B,MAYAA,EAAAoc,OAAA/iD,UAAAkwE,WAAA,SAAA9uE,GAEAjE,KAAAiE,QAAAA,EACA2I,QAAAK,KAAA,mGASAilE,EAAAW,WAAAhwE,UAAAmwE,QAAA,SAAApvC,GAEA5jC,KAAA4jC,KAAAA,EACAh3B,QAAAK,KAAA,kGASAu8B,EAAAwc,KAAAnjD,UAAAmwE,QAAA,SAAApvC,GAEA5jC,KAAA4jC,KAAAA,EACAh3B,QAAAK,KAAA,4FASAu8B,EAAAwc,KAAAnjD,UAAAowE,SAAA,SAAApqC,GAEA7oC,KAAA6oC,MAAAA,EACAj8B,QAAAK,KAAA,2FASAu8B,EAAA9lC,QAAAb,UAAAqwE,SAAA,SAAApmB,GAEA9sD,KAAA8sD,MAAAA,EACAlgD,QAAAK,KAAA,8FAGAsC,OAAAuhC,iBAAAqF,GASAoQ,gBACAv2C,IAAA,WAGA,MADApD,SAAAK,KAAA,2FACAu8B,EAAA+c,iBAWAC,YACAx2C,IAAA,WAGA,MADApD,SAAAK,KAAA,mFACAu8B,EAAAgd,aAWAC,kBACAz2C,IAAA,WAGA,MADApD,SAAAK,KAAA,+FACAu8B,EAAAid,qBAWAjd,EAAAoB,MAAAuoC,KAAA,WAGA,MADAvmE,SAAAK,KAAA,mEACAu8B,EAAAoB,MAAAisB,SAGAuc,SAAA,GAAAC,WAAA,IAAAC,YAAA,IAAAC,SAAA,MAAAC,KAAA,SAAA9yE,EAAAjB,EAAAD,GA+BA,QAAAqzE,GAAAjvC,EAAAiF,GAEAW,EAAAiH,UAAA1vC,KAAAf,MAEA6oC,EAAAA,MASA7oC,KAAAyzE,UAAA,EASAzzE,KAAA0zE,WAAA,EAQA1zE,KAAA2zE,WAQA3zE,KAAA4zE,OACAn8B,KAAAvvC,SAAA2gC,EAAA4O,KAAA5O,EAAA4O,KAAA,SACAwvB,MAAAp+B,EAAAo+B,OAAA,OACAz4D,KAAA,KACAzD,KAAA,GASA/K,KAAAgnE,KAAAn+B,EAAAm+B,KAQAhnE,KAAAymE,MAAA7iC,EAQA5jC,KAAA6zE,SAAA,EAOA7zE,KAAA8zE,cAAA,EAOA9zE,KAAA+J,OAAA,EAEA/J,KAAA8mE,aAjHA,GAAAt9B,GAAA9oC,EAAA,UAqHAmyE,GAAAhwE,UAAA0M,OAAA/L,OAAAgmC,EAAAiH,UAAA5tC,WACAgwE,EAAAhwE,UAAAmH,YAAA6oE,EACApzE,EAAAD,QAAAqzE,EAEAtjE,OAAAuhC,iBAAA+hC,EAAAhwE,WAOA40C,MACAznC,IAAA,WAEA,MAAAhQ,MAAA4zE,MAAAn8B,MAEAvnC,IAAA,SAAAf,GAEAnP,KAAA4zE,MAAAn8B,KAAA,gBAAAtoC,IAAAA,GAAA,EAAAA,EAAA,SAEAnP,KAAA+J,OAAA,IAWAk9D,OACAj3D,IAAA,WAEA,MAAAhQ,MAAA4zE,MAAA3M,OAEA/2D,IAAA,SAAAf,GAEAnP,KAAA4zE,MAAA3M,MAAA93D,GAAA,OAEAnP,KAAA+J,OAAA,IAUAi9D,MACAh3D,IAAA,WAEA,MAAAhQ,MAAA4zE,OAEA1jE,IAAA,SAAAf,GAEAA,IAIA,gBAAAA,IACAA,EAAAA,EAAAQ,MAAA,KAEA3P,KAAA4zE,MAAAplE,KAAA,IAAAW,EAAAnO,OAAAmO,EAAA,GAAAA,EAAAqP,MAAA,GAAA5N,KAAA,KACA5Q,KAAA4zE,MAAA7oE,KAAAoE,EAAAnO,QAAA,EAAAse,SAAAnQ,EAAA,GAAA,IAAA0jE,EAAAkB,MAAA/zE,KAAA4zE,MAAAplE,MAAAzD,OAGA/K,KAAA4zE,MAAAplE,KAAAW,EAAAX,KACAxO,KAAA4zE,MAAA7oE,KAAA,gBAAAoE,GAAApE,KAAAoE,EAAApE,KAAAuU,SAAAnQ,EAAApE,KAAA,KAGA/K,KAAA+J,OAAA,KAUA65B,MACA5zB,IAAA,WAEA,MAAAhQ,MAAAymE,OAEAv2D,IAAA,SAAAf,GAEAA,EAAAA,EAAAsL,YAAA,IACAza,KAAAymE,QAAAt3D,IAIAnP,KAAAymE,MAAAt3D,EACAnP,KAAA+J,OAAA,OAUA8oE,EAAAhwE,UAAAikE,WAAA,WAcA,IAAA,GAZAxkE,GAAAuwE,EAAAkB,MAAA/zE,KAAA4zE,MAAAplE,MACA8J,EAAA,GAAAkxB,GAAAwL,MACAg/B,EAAA,KACAC,KACAC,EAAA,EACAnM,EAAA,EACAD,KACAmB,EAAA,EACAl4B,EAAA/wC,KAAA4zE,MAAA7oE,KAAAzI,EAAAyI,KACAopE,EAAA,GACAL,EAAA,EAEAnzE,EAAA,EAAAA,EAAAX,KAAA4jC,KAAA5iC,OAAAL,IACA,CACA,GAAAyzE,GAAAp0E,KAAA4jC,KAAAxb,WAAAznB,EAGA,IAFAwzE,EAAA,OAAAtzD,KAAA7gB,KAAA4jC,KAAAlf,OAAA/jB,IAAAA,EAAAwzE,EAEA,iBAAAtzD,KAAA7gB,KAAA4jC,KAAAlf,OAAA/jB,IAEAmnE,EAAAn9D,KAAAupE,GACAnM,EAAAvyD,KAAAC,IAAAsyD,EAAAmM,GACAjL,IAEA3wD,EAAA3D,EAAA,EACA2D,EAAAR,GAAAxV,EAAA6lE,WACA6L,EAAA,SAIA,IAAA,KAAAG,GAAAn0E,KAAA6zE,SAAA,GAAAv7D,EAAA3D,EAAAo8B,EAAA/wC,KAAA6zE,SAEArqC,EAAAoB,MAAAC,YAAAopC,EAAAE,EAAAxzE,EAAAwzE,GACAxzE,EAAAwzE,EACAA,EAAA,GAEArM,EAAAn9D,KAAAupE,GACAnM,EAAAvyD,KAAAC,IAAAsyD,EAAAmM,GACAjL,IAEA3wD,EAAA3D,EAAA,EACA2D,EAAAR,GAAAxV,EAAA6lE,WACA6L,EAAA,SAZA,CAgBA,GAAAK,GAAA/xE,EAAA2xE,MAAAG,EAEAC,KAKAL,GAAAK,EAAAC,QAAAN,KAEA17D,EAAA3D,GAAA0/D,EAAAC,QAAAN,IAGAC,EAAAtpE,MAAA1G,QAAAowE,EAAApwE,QAAAglE,KAAAA,EAAAmL,SAAAA,EAAAtrC,SAAA,GAAAU,GAAAwL,MAAA18B,EAAA3D,EAAA0/D,EAAAE,QAAAj8D,EAAAR,EAAAu8D,EAAAG,WACAN,EAAA57D,EAAA3D,GAAA0/D,EAAApwE,QAAAL,MAAAywE,EAAAE,SACAj8D,EAAA3D,GAAA0/D,EAAAI,SACAX,EAAAt+D,KAAAC,IAAAq+D,EAAAO,EAAAG,QAAAH,EAAApwE,QAAAJ,QACAmwE,EAAAI,IAGAtM,EAAAn9D,KAAAupE,GACAnM,EAAAvyD,KAAAC,IAAAsyD,EAAAmM,EAEA,IAAAQ,KAEA,KAAA/zE,EAAA,EAAAsoE,GAAAtoE,EAAAA,IACA,CACA,GAAAg0E,GAAA,CAEA,WAAA30E,KAAA4zE,MAAA3M,MAEA0N,EAAA5M,EAAAD,EAAAnnE,GAEA,WAAAX,KAAA4zE,MAAA3M,QAEA0N,GAAA5M,EAAAD,EAAAnnE,IAAA,GAGA+zE,EAAA/pE,KAAAgqE,GAGA,GAAAC,GAAAX,EAAAjzE,OACAy2C,EAAAz3C,KAAAy3C,IAEA,KAAA92C,EAAA,EAAAi0E,EAAAj0E,EAAAA,IACA,CACA,GAAA0zB,GAAAr0B,KAAA2zE,QAAAhzE,EAEA0zB,GAEAA,EAAApwB,QAAAgwE,EAAAtzE,GAAAsD,SAIAowB,EAAA,GAAAmV,GAAAoc,OAAAquB,EAAAtzE,GAAAsD,SACAjE,KAAA2zE,QAAAhpE,KAAA0pB,IAGAA,EAAAyU,SAAAn0B,GAAAs/D,EAAAtzE,GAAAmoC,SAAAn0B,EAAA+/D,EAAAT,EAAAtzE,GAAAsoE,OAAAl4B,EACA1c,EAAAyU,SAAAhxB,EAAAm8D,EAAAtzE,GAAAmoC,SAAAhxB,EAAAi5B;AACA1c,EAAA0c,MAAAp8B,EAAA0f,EAAA0c,MAAAj5B,EAAAi5B,EACA1c,EAAAojB,KAAAA,EAEApjB,EAAAgd,QAEArxC,KAAAqqC,SAAAhW,GAKA,IAAA1zB,EAAAi0E,EAAAj0E,EAAAX,KAAA2zE,QAAA3yE,SAAAL,EAEAX,KAAA8pC,YAAA9pC,KAAA2zE,QAAAhzE,GAGAX,MAAAyzE,UAAA1L,EAAAh3B,EACA/wC,KAAA0zE,YAAAp7D,EAAAR,EAAAxV,EAAA6lE,YAAAp3B,EACA/wC,KAAA8zE,cAAAA,EAAA/iC,GAQA8hC,EAAAhwE,UAAA6vC,gBAAA,WAEA1yC,KAAA60E,WACA70E,KAAA6yC,4BASAggC,EAAAhwE,UAAAmuC,eAAA,WAGA,MADAhxC,MAAA60E,WACArrC,EAAAiH,UAAA5tC,UAAAmuC,eAAAjwC,KAAAf,OAQA6yE,EAAAhwE,UAAAgyE,SAAA,WAEA70E,KAAA+J,QAEA/J,KAAA8mE,aACA9mE,KAAA+J,OAAA,IAIA8oE,EAAAkB,WAEAxnC,UAAA,KAAAuoC,KAAA,SAAAp0E,EAAAjB,EAAAD,GA0BA,QAAAmzE,GAAA/N,GAEAp7B,EAAAoc,OAAA7kD,KAAAf,KAAA4kE,EAAA,YAAAp7B,GAAA9lC,QAAAkhE,EAAA,GAAAA,EAAA,GAAA3gE,SAKAjE,KAAA+0E,UAAA,KAKA/0E,KAAAg1E,WAAA,KAEAh1E,KAAA4kE,SAAAA,EAQA5kE,KAAAi1E,eAAA,EAQAj1E,KAAAk1E,MAAA,EAQAl1E,KAAAs7B,WAAA,KAQAt7B,KAAAm1E,aAAA,EAQAn1E,KAAAo1E,SAAA,EA/EA,GAAA5rC,GAAA9oC,EAAA,UAmFAiyE,GAAA9vE,UAAA0M,OAAA/L,OAAAgmC,EAAAoc,OAAA/iD,WACA8vE,EAAA9vE,UAAAmH,YAAA2oE,EACAlzE,EAAAD,QAAAmzE,EAEApjE,OAAAuhC,iBAAA6hC,EAAA9vE,WAUAwyE,aACArlE,IAAA,WAEA,MAAAhQ,MAAA+0E,UAAA/zE,SAWA4jE,UACA50D,IAAA,WAEA,MAAAhQ,MAAA+0E,WAEA7kE,IAAA,SAAAf,GAEA,GAAAA,EAAA,YAAAq6B,GAAA9lC,QAEA1D,KAAA+0E,UAAA5lE,EACAnP,KAAAg1E,WAAA,SAGA,CACAh1E,KAAA+0E,aACA/0E,KAAAg1E,aACA,KAAA,GAAAr0E,GAAA,EAAAA,EAAAwO,EAAAnO,OAAAL,IAEAX,KAAA+0E,UAAApqE,KAAAwE,EAAAxO,GAAAsD,SACAjE,KAAAg1E,WAAArqE,KAAAwE,EAAAxO,GAAAkuE,SAaAvT,cACAtrD,IAAA,WAEA,GAAAsrD,GAAA9lD,KAAAyT,MAAAjpB,KAAAm1E,cAAAn1E,KAAA+0E,UAAA/zE,MAKA,OAJA,GAAAs6D,IAEAA,GAAAt7D,KAAA+0E,UAAA/zE,QAEAs6D,MAUAqX,EAAA9vE,UAAAmxB,KAAA,WAEAh0B,KAAAo1E,UAKAp1E,KAAAo1E,SAAA,EACA5rC,EAAAmc,OAAA0qB,OAAAH,OAAAlwE,KAAA0pC,OAAA1pC,QAOA2yE,EAAA9vE,UAAAyrE,KAAA,WAEAtuE,KAAAo1E,UAKAp1E,KAAAo1E,SAAA,EACA5rC,EAAAmc,OAAA0qB,OAAAj1C,IAAAp7B,KAAA0pC,OAAA1pC,QAQA2yE,EAAA9vE,UAAAyyE,YAAA,SAAAC,GAEAv1E,KAAAg0B,OAEAh0B,KAAAm1E,aAAAI,EAEAv1E,KAAA8vD,SAAA9vD,KAAA+0E,UAAA/0E,KAAAs7D,eAQAqX,EAAA9vE,UAAA2yE,YAAA,SAAAD,GAEAv1E,KAAAm1E,aAAAI,EAEAv1E,KAAAsuE,QAOAqE,EAAA9vE,UAAA6mC,OAAA,SAAAylC,GAEA,GAAAsG,GAAAz1E,KAAAi1E,eAAA9F,CAEA,IAAA,OAAAnvE,KAAAg1E,WACA,CACA,GAAAU,GAAA11E,KAAAm1E,aAAA,EAAAn1E,KAAAg1E,WAAAh1E,KAAAs7D,aAIA,KAFAoa,GAAAD,EAAA,GAAA,IAEA,EAAAC,GAEA11E,KAAAm1E,eACAO,GAAA11E,KAAAg1E,WAAAh1E,KAAAs7D,aAGA,IAAAiI,GAAA/tD,KAAA+tD,KAAAvjE,KAAAi1E,eAAA9F,EAGA,KAFAnvE,KAAAm1E,aAAA3/D,KAAAyT,MAAAjpB,KAAAm1E,cAEAO,GAAA11E,KAAAg1E,WAAAh1E,KAAAs7D,eAEAoa,GAAA11E,KAAAg1E,WAAAh1E,KAAAs7D,cAAAiI,EACAvjE,KAAAm1E,cAAA5R,CAGAvjE,MAAAm1E,cAAAO,EAAA11E,KAAAg1E,WAAAh1E,KAAAs7D,kBAIAt7D,MAAAm1E,cAAAM,CAGAz1E,MAAAm1E,aAAA,IAAAn1E,KAAAk1E,MAEAl1E,KAAAs1E,YAAA,GAEAt1E,KAAAs7B,YAEAt7B,KAAAs7B,cAGAt7B,KAAAm1E,cAAAn1E,KAAA+0E,UAAA/zE,SAAAhB,KAAAk1E,MAEAl1E,KAAAs1E,YAAAt1E,KAAA+0E,UAAA/zE,OAAA,GAEAhB,KAAAs7B,YAEAt7B,KAAAs7B,cAKAt7B,KAAA8vD,SAAA9vD,KAAA+0E,UAAA/0E,KAAAs7D,eASAqX,EAAA9vE,UAAA0C,QAAA,WAEAvF,KAAAg0B,OACAwV,EAAAoc,OAAA/iD,UAAA0C,QAAAxE,KAAAf,OASA2yE,EAAAgD,WAAA,SAAAC,GAIA,IAAA,GAFAhR,MAEAjkE,EAAA,EAAAA,EAAAi1E,EAAA50E,SAAAL,EAEAikE,EAAAj6D,KAAA,GAAA6+B,GAAA9lC,QAAAogE,UAAA8R,EAAAj1E,IAGA,OAAA,IAAAgyE,GAAA/N,IASA+N,EAAAkD,WAAA,SAAAC,GAIA,IAAA,GAFAlR,MAEAjkE,EAAA,EAAAA,EAAAm1E,EAAA90E,SAAAL,EAEAikE,EAAAj6D,KAAA,GAAA6+B,GAAA9lC,QAAAugE,UAAA6R,EAAAn1E,IAGA,OAAA,IAAAgyE,GAAA/N,MAEAr4B,UAAA,KAAAwpC,KAAA,SAAAr1E,EAAAjB,EAAAD,GAgBA,QAAAozE,GAAA3uE,EAAAL,EAAAC,GAEA2lC,EAAAoc,OAAA7kD,KAAAf,KAAAiE,GAOAjE,KAAAg2E,UAAA,GAAAxsC,GAAAwL,MAAA,EAAA,GAQAh1C,KAAAi2E,aAAA,GAAAzsC,GAAAwL,MAAA,EAAA,GAUAh1C,KAAAixC,OAAArtC,GAAA,IAQA5D,KAAAkxC,QAAArtC,GAAA,IAQA7D,KAAAwwD,KAAA,GAAAhnB,GAAA2c,WAEAnmD,KAAAk2E,eAAA,KAGAl2E,KAAAqN,OAAA,GAAAm8B,GAAA+c,gBAGA,wBACA,kCACA,gCACA,yBAEA,iCAEA,uBACA,2BAEA,8BACA,uBAEA,mBACA,uFAEA,iCACA,6BACA,6BACA,4BAEA,qDACA,KACA31C,KAAA,OAEA,wBAEA,8BACA,uBAEA,8BACA,uBACA,2BAEA,mBAEA,iDACA,+DACA,yBAEA,2DACA,KACAA,KAAA,OAIAulE,QAAA9zE,KAAA,MAAA8M,OAAA,EAAA,EAAA,EAAA,IACAinE,YAAA/zE,KAAA,MAAA8M,OAAA,EAAA,EAAA,EAAA,IACAknE,YAAAh0E,KAAA,MAAA8M,OAAA,EAAA,MAlHA,GAAAq6B,GAAA9oC,EAAA,WAEA63C,EAAA,GAAA/O,GAAAwL,MACAigB,EAAAv0D,EAAA,8CAoHAkyE,GAAA/vE,UAAA0M,OAAA/L,OAAAgmC,EAAAoc,OAAA/iD,WACA+vE,EAAA/vE,UAAAmH,YAAA4oE,EACAnzE,EAAAD,QAAAozE,EAGArjE,OAAAuhC,iBAAA8hC,EAAA/vE,WAOAe,OACAoM,IAAA,WAEA,MAAAhQ,MAAAixC,QAEA/gC,IAAA,SAAAf,GAEAnP,KAAAixC,OAAA9hC,IAUAtL,QACAmM,IAAA,WAEA,MAAAhQ,MAAAkxC,SAEAhhC,IAAA,SAAAf,GAEAnP,KAAAkxC,QAAA/hC,MAKAyjE,EAAA/vE,UAAA2gE,iBAAA,aAYAoP,EAAA/vE,UAAAuxC,aAAA,SAAAxL,GAGA,GAAA3kC,GAAAjE,KAAA8vD,QAEA,IAAA7rD,GAAAA,EAAAusD,KAAA,CAKA,GAAA8lB,GAAAryE,EAAAusD,KACA+lB,EAAAtyE,EAAAmsD,OAAAxsD,MACA4yE,EAAAvyE,EAAAmsD,OAAAvsD,OACAypE,EAAArpE,EAAAu5C,YAAA55C,MACA2pE,EAAAtpE,EAAAu5C,YAAA35C,MAEAI,GAAAusD,KAAAxwD,KAAAwwD,KACAvsD,EAAAmsD,OAAAxsD,MAAA5D,KAAA4D,MACAK,EAAAmsD,OAAAvsD,OAAA7D,KAAA6D,OAEA7D,KAAAqN,OAAA1G,SAAA0vE,WAAAlnE,MAAA,GAAA,EAAAm+D,EACAttE,KAAAqN,OAAA1G,SAAA0vE,WAAAlnE,MAAA,GAAA,EAAAo+D,EAEAvtE,KAAAqN,OAAA1G,SAAAwvE,OAAAhnE,MAAA,GAAAmnE,EAAA7lB,GACAzwD,KAAAqN,OAAA1G,SAAAwvE,OAAAhnE,MAAA,GAAAmnE,EAAA5lB,GACA1wD,KAAAqN,OAAA1G,SAAAwvE,OAAAhnE,MAAA,GAAAmnE,EAAAh8B,GAAAg8B,EAAA7lB,GACAzwD,KAAAqN,OAAA1G,SAAAwvE,OAAAhnE,MAAA,GAAAmnE,EAAA77B,GAAA67B,EAAA5lB,GAEA1wD,KAAAqN,OAAA1G,SAAAyvE,WAAAjnE,MAAA,GAAAnP,KAAAi2E,aAAAthE,GAAA4hE,EAAAv2E,KAAAg2E,UAAArhE,GAAA3U,KAAAixC,OACAjxC,KAAAqN,OAAA1G,SAAAyvE,WAAAjnE,MAAA,GAAAnP,KAAAi2E,aAAAn+D,GAAA0+D,EAAAx2E,KAAAg2E,UAAAl+D,GAAA9X,KAAAkxC,QACAlxC,KAAAqN,OAAA1G,SAAAyvE,WAAAjnE,MAAA,GAAAm+D,EAAAttE,KAAAixC,OAAAjxC,KAAAg2E,UAAArhE,EACA3U,KAAAqN,OAAA1G,SAAAyvE,WAAAjnE,MAAA,GAAAo+D,EAAAvtE,KAAAkxC,QAAAlxC,KAAAg2E,UAAAl+D,EAEA8wB,EAAA+U,kBAAA/U,EAAAmD,QAAAmkB,QACAtnB,EAAAmD,QAAAmkB,OAAAzd,OAAAzyC,MAEAiE,EAAAusD,KAAA8lB,EACAryE,EAAAmsD,OAAAxsD,MAAA2yE,EACAtyE,EAAAmsD,OAAAvsD,OAAA2yE,IASA5D,EAAA/vE,UAAA0xC,cAAA,SAAA3L,GAEA,GAAA3kC,GAAAjE,KAAA8vD,QAEA,IAAA7rD,EAAAu5C,YAAAmZ,UAAA,CAKA,GAAA5+B,GAAA6Q,EAAA7Q,QACAtb,EAAAzc,KAAAirC,eACAuE,EAAA5G,EAAA4G,WACAgO,EAAAv5C,EAAAu5C,YACAi5B,EAAAz2E,KAAAi2E,aAAAthE,EAAA3U,KAAAg2E,UAAArhE,EAAA1Q,EAAAmsD,OAAAxsD,MACA8yE,EAAA12E,KAAAi2E,aAAAn+D,EAAA9X,KAAAg2E,UAAAl+D,EAAA7T,EAAAmsD,OAAAvsD,MAIA,KAAA7D,KAAAk2E,eACA,CAEA,GAAAzK,GAAA,GAAAjiC,GAAA4O,aAAAn0C,EAAAmsD,OAAAxsD,MAAAK,EAAAmsD,OAAAvsD,OAGA,YAAA7D,KAAAy3C,MAEAz3C,KAAAmjE,aAAAnjE,KAAAy3C,OAEAz3C,KAAAmjE,WAAAnjE,KAAAy3C,KAEAz3C,KAAA4jE,cAAA3O,EAAAC,iBAAAl1D,KAAAA,KAAAy3C,OAEAg0B,EAAA1zC,QAAAk1B,UAAAjtD,KAAA4jE,cAAA,EAAA,IAIA6H,EAAA1zC,QAAAk1B,UAAAzP,EAAAh2C,QAAAvD,EAAAmsD,OAAAz7C,GAAA1Q,EAAAmsD,OAAAt4C,GAEA9X,KAAAk2E,eAAAzK,EAAA1zC,QAAA4+C,cAAAlL,EAAArgE,OAAA,UAIA2sB,EAAA80B,YAAA7sD,KAAA0zC,WACA3b,EAAA8e,aAAAp6B,EAAAhc,EAAA+uC,EACA/yB,EAAAzX,EAAAwqC,EACA/yB,EAAA4X,EAAAmb,EACA/yB,EAAA2uB,EAAAoE,EACA/yB,EAAAyuB,GAAAsE,EACA/yB,EAAA0uB,GAAAqE,GAGAzX,EAAAgZ,MAAA/wC,KAAAg2E,UAAArhE,EAAA3U,KAAAg2E,UAAAl+D,GAEAigB,EAAA0lB,UAAAg5B,EAAAz2E,KAAA+sD,OAAAp4C,GAAA3U,KAAAixC,OACAylC,EAAA12E,KAAA+sD,OAAAj1C,GAAA9X,KAAAkxC,QAGA,IAAA2M,GAAAjV,EAAAkV,WAAA99C,KAAA23C,UACAkG,KAAAjV,EAAA7Q,QAAAgmB,2BAEAhmB,EAAAgmB,yBAAAF,GAIA9lB,EAAA06B,UAAAzyD,KAAAk2E,eACAn+C,EAAA46B,UAAA8jB,GACAC,EACA12E,KAAAixC,OAAAjxC,KAAAg2E,UAAArhE,EACA3U,KAAAkxC,QAAAlxC,KAAAg2E,UAAAl+D,KAcA86D,EAAA/vE,UAAAwoC,UAAA,WAEA,GA8BAxY,GACAE,EACAD,EACAE,EAjCApvB,EAAA5D,KAAAixC,OACAptC,EAAA7D,KAAAkxC,QAEA8M,EAAAp6C,GAAA,EAAA5D,KAAA+sD,OAAAp4C,GACAspC,EAAAr6C,GAAA5D,KAAA+sD,OAAAp4C,EAEAupC,EAAAr6C,GAAA,EAAA7D,KAAA+sD,OAAAj1C,GACAqmC,EAAAt6C,GAAA7D,KAAA+sD,OAAAj1C,EAEAmzB,EAAAjrC,KAAAirC,eAEAxqC,EAAAwqC,EAAAxqC,EACAuE,EAAAimC,EAAAjmC,EACAqvB,EAAA4W,EAAA5W,EACA+W,EAAAH,EAAAG,EACAF,EAAAD,EAAAC,GACAC,EAAAF,EAAAE,GAEAmP,EAAA75C,EAAAw9C,EAAA5pB,EAAA8pB,EAAAjT,EACAqP,EAAAnP,EAAA+S,EAAAn5C,EAAAi5C,EAAA9S,EAEAqP,EAAA/5C,EAAAu9C,EAAA3pB,EAAA8pB,EAAAjT,EACAuP,EAAArP,EAAA+S,EAAAn5C,EAAAg5C,EAAA7S,EAEAiT,EAAA39C,EAAAu9C,EAAA3pB,EAAA6pB,EAAAhT,EACAmT,EAAAjT,EAAA8S,EAAAl5C,EAAAg5C,EAAA7S,EAEAmT,EAAA79C,EAAAw9C,EAAA5pB,EAAA6pB,EAAAhT,EACAqT,EAAAnT,EAAA8S,EAAAl5C,EAAAi5C,EAAA9S,CAOAtY,GAAAynB,EACAznB,EAAAA,EAAA2nB,EAAAA,EAAA3nB,EACAA,EAAAA,EAAAurB,EAAAA,EAAAvrB,EACAA,EAAAA,EAAAyrB,EAAAA,EAAAzrB,EAEAC,EAAAynB,EACAznB,EAAAA,EAAA2nB,EAAAA,EAAA3nB,EACAA,EAAAA,EAAAurB,EAAAA,EAAAvrB,EACAA,EAAAA,EAAAyrB,EAAAA,EAAAzrB,EAEAC,EAAAunB,EACAvnB,EAAAynB,EAAAznB,EAAAynB,EAAAznB,EACAA,EAAAqrB,EAAArrB,EAAAqrB,EAAArrB,EACAA,EAAAurB,EAAAvrB,EAAAurB,EAAAvrB,EAEAC,EAAAunB,EACAvnB,EAAAynB,EAAAznB,EAAAynB,EAAAznB,EACAA,EAAAqrB,EAAArrB,EAAAqrB,EAAArrB,EACAA,EAAAurB,EAAAvrB,EAAAurB,EAAAvrB,CAEA,IAAAuf,GAAAvyC,KAAAqzC,OAWA,OATAd,GAAA59B,EAAAke,EACA0f,EAAA3uC,MAAAmvB,EAAAF,EAEA0f,EAAAz6B,EAAAgb,EACAyf,EAAA1uC,OAAAmvB,EAAAF,EAGA9yB,KAAA8yC,eAAAP,EAEAA,GAOAqgC,EAAA/vE,UAAA27C,cAAA,SAAA/H,GAEAz2C,KAAAirC,eAAAyL,aAAAD,EAAA8B,EAEA,IAGAgC,GAHA32C,EAAA5D,KAAAixC,OACAptC,EAAA7D,KAAAkxC,QACAoJ,GAAA12C,EAAA5D,KAAA+sD,OAAAp4C,CAGA,OAAA4jC,GAAA5jC,EAAA2lC,GAAA/B,EAAA5jC,EAAA2lC,EAAA12C,IAEA22C,GAAA12C,EAAA7D,KAAA+sD,OAAAj1C,EAEAygC,EAAAzgC,EAAAyiC,GAAAhC,EAAAzgC,EAAAyiC,EAAA12C,IAEA,GAIA,GAOA+uE,EAAA/vE,UAAA0C,QAAA,WACAikC,EAAAoc,OAAA/iD,UAAA0C,QAAAxE,KAAAf,MAEAA,KAAAg2E,UAAA,KACAh2E,KAAA42E,iBAAA,KACA52E,KAAAi2E,aAAA,KAEAj2E,KAAAwwD,KAAA,MAaAoiB,EAAA9O,UAAA,SAAAC,EAAAngE,EAAAC,GAEA,GAAAI,GAAAulC,EAAAoB,MAAAo5B,aAAAD,EAEA,KAAA9/D,EAEA,KAAA,IAAArD,OAAA,gBAAAmjE,EAAA,yCAAA/jE,KAGA,OAAA,IAAA4yE,GAAA3uE,EAAAL,EAAAC,IAeA+uE,EAAA3O,UAAA,SAAAC,EAAAtgE,EAAAC,EAAAsgE,EAAA7xB,GAEA,MAAA,IAAAsgC,GAAAppC,EAAA9lC,QAAAugE,UAAAC,EAAAC,EAAA7xB,GAAA1uC,EAAAC,MAGA0oC,UAAA,GAAAsqC,8CAAA,KAAAC,KAAA,SAAAp2E,EAAAjB,EAAAD,GACA,GAAAgqC,GAAA9oC,EAAA,WACA+oC,EAAAD,EAAAC,cACAmH,EAAA,GAAApH,GAAAqH,MAEApH,GAAA5mC,UAAAk0E,gBAAA,EACAttC,EAAA5mC,UAAAm0E,qBAAA,KACAvtC,EAAA5mC,UAAAo0E,sBAAA,KAEAxtC,EAAA5mC,UAAAq0E,yBAAA,KACAztC,EAAA5mC,UAAAs0E,iBAAA,KACA1tC,EAAA5mC,UAAAu0E,iBAAA,KACA3tC,EAAA5mC,UAAAw0E,cAAA,KAEA9nE,OAAAuhC,iBAAArH,EAAA5mC,WAUAy0E,eACAtnE,IAAA,WAEA,MAAAhQ,MAAA+2E,gBAEA7mE,IAAA,SAAAf,GAEAnP,KAAA+2E,iBAAA5nE,IAKAnP,KAAA+2E,eAAA5nE,EAEAA,GAEAnP,KAAAg3E,qBAAAh3E,KAAAyzC,YACAzzC,KAAAi3E,sBAAAj3E,KAAAw0C,aAEAx0C,KAAAk3E,yBAAAl3E,KAAA0yC,gBACA1yC,KAAAu3E,mBAAAv3E,KAAAqrC,UAEArrC,KAAAo3E,iBAAAp3E,KAAAuF,QAEAvF,KAAAw3E,uBAAAx3E,KAAAw+C,cAEAx+C,KAAAyzC,YAAAzzC,KAAAy3E,mBACAz3E,KAAAw0C,aAAAx0C,KAAA03E,oBAEA13E,KAAAuF,QAAAvF,KAAA23E,wBAKA33E,KAAAq3E,eAEAr3E,KAAA43E,8BAGA53E,KAAAyzC,YAAAzzC,KAAAg3E,qBACAh3E,KAAAw0C,aAAAx0C,KAAAi3E,sBACAj3E,KAAAqrC,UAAArrC,KAAAu3E,mBAEAv3E,KAAAuF,QAAAvF,KAAAo3E,iBAEAp3E,KAAA0yC,gBAAA1yC,KAAAk3E,yBACAl3E,KAAAw+C,cAAAx+C,KAAAw3E,6BAWA/tC,EAAA5mC,UAAA40E,mBAAA,SAAA7uC,IAEA5oC,KAAAiqC,SAAAjqC,KAAA0zC,YAAA,IAAA1zC,KAAA2zC,aAKA3zC,KAAA63E,yBAAAjvC,GAEA5oC,KAAAq3E,cAAA3jC,WAAA1zC,KAAA0zC,WAEA9K,EAAA+U,kBAAA/U,EAAAmD,QAAAmkB,QACAtnB,EAAAmD,QAAAmkB,OAAAzd,OAAAzyC,KAAAq3E,iBASA5tC,EAAA5mC,UAAAg1E,yBAAA,SAAAjvC,GAEA,IAAA5oC,KAAAq3E,cAAA,CAMAzuC,EAAAkL,gBAAAC,OAKA,IAAAxB,GAAAvyC,KAAAgxC,iBAAAwH,OAGA,IAAAx4C,KAAA6zC,SACA,CACA,GAAA6K,GAAA1+C,KAAA6zC,SAAA,GAAA6K,OACAnM,GAAA59B,GAAA+pC,EACAnM,EAAAz6B,GAAA4mC,EAEAnM,EAAA3uC,OAAA,EAAA86C,EACAnM,EAAA1uC,QAAA,EAAA66C,EAKA,GAAAo5B,GAAAlvC,EAAA4mB,oBAEAqO,EAAAj1B,EAAAoL,cAAA8kB,YAGAtmB,EAAA,GAAAhJ,GAAAmH,cAAA/H,EAAA,EAAA2J,EAAA3uC,MAAA,EAAA2uC,EAAA1uC,QAGA0mB,EAAAqmB,CAEArmB,GAAA2gB,IAAAqH,EAAA59B,EACA4V,EAAA4gB,IAAAoH,EAAAz6B,EAKA9X,KAAAyzC,YAAAzzC,KAAAg3E,qBAEAxkC,EAAAC,OAAAzyC,KAAAuqB,GAAA,GAAA,GAGAqe,EAAA+yB,gBAAAmc,GACAlvC,EAAAoL,cAAA8kB,YAAA+E,EAEA79D,KAAAyzC,YAAAzzC,KAAAy3E,mBACAz3E,KAAA0yC,gBAAA1yC,KAAA2yC,6BACA3yC,KAAAqrC,UAAArrC,KAAA+3E,iBAIA/3E,KAAAq3E,cAAA,GAAA7tC,GAAAoc,OAAApT,GACAxyC,KAAAq3E,cAAApsC,eAAAjrC,KAAAirC,eACAjrC,KAAAq3E,cAAAtqB,OAAAp4C,IAAA49B,EAAA59B,EAAA49B,EAAA3uC,OACA5D,KAAAq3E,cAAAtqB,OAAAj1C,IAAAy6B,EAAAz6B,EAAAy6B,EAAA1uC,QAGA7D,KAAA0yC,kBAGA1yC,KAAAw+C,cAAAx+C,KAAAq3E,cAAA74B,cAAAx7C,KAAAhD,KAAAq3E,iBASA5tC,EAAA5mC,UAAA60E,oBAAA,SAAA9uC,IAEA5oC,KAAAiqC,SAAAjqC,KAAA0zC,YAAA,IAAA1zC,KAAA2zC,aAKA3zC,KAAAg4E,+BAAApvC,GAEA5oC,KAAAq3E,cAAA3jC,WAAA1zC,KAAA0zC,WAEA1zC,KAAAq3E,cAAA7iC,aAAA5L,KAUAa,EAAA5mC,UAAAm1E,+BAAA,SAAApvC,GAEA,IAAA5oC,KAAAq3E,cAAA,CAMA,GAAA9kC,GAAAvyC,KAAAgxC,iBAEA8mC,EAAAlvC,EAAA7Q,QAEAya,EAAA,GAAAhJ,GAAAmH,cAAA/H,EAAA,EAAA2J,EAAA3uC,MAAA,EAAA2uC,EAAA1uC,QAGA0mB,EAAAqmB,CAEArmB,GAAA2gB,IAAAqH,EAAA59B,EACA4V,EAAA4gB,IAAAoH,EAAAz6B,EAGA9X,KAAAw0C,aAAAx0C,KAAAi3E,sBAEAzkC,EAAAC,OAAAzyC,KAAAuqB,GAAA,GAGAqe,EAAA7Q,QAAA+/C,EAEA93E,KAAAw0C,aAAAx0C,KAAA03E,oBACA13E,KAAA0yC,gBAAA1yC,KAAA2yC,6BACA3yC,KAAAqrC,UAAArrC,KAAA+3E,iBAIA/3E,KAAAq3E,cAAA,GAAA7tC,GAAAoc,OAAApT,GACAxyC,KAAAq3E,cAAApsC,eAAAjrC,KAAAirC,eACAjrC,KAAAq3E,cAAAtqB,OAAAp4C,IAAA49B,EAAA59B,EAAA49B,EAAA3uC,OACA5D,KAAAq3E,cAAAtqB,OAAAj1C,IAAAy6B,EAAAz6B,EAAAy6B,EAAA1uC,QAEA7D,KAAA0yC,kBAEA1yC,KAAAw+C,cAAAx+C,KAAAq3E,cAAA74B,cAAAx7C,KAAAhD,KAAAq3E,iBAQA5tC,EAAA5mC,UAAAk1E,iBAAA,WAIA,MAFA/3E,MAAAq3E,cAAAvkC,eAAA,KAEA9yC,KAAAq3E,cAAAhsC,aAQA5B,EAAA5mC,UAAA+0E,4BAAA,WAEA53E,KAAAq3E,cAAAvnB,SAAAvqD,UACAvF,KAAAq3E,cAAA,MAGA5tC,EAAA5mC,UAAA80E,sBAAA,WAEA33E,KAAAs3E,eAAA,EACAt3E,KAAAo3E,sBAGA7qC,UAAA,KAAA0rC,KAAA,SAAAv3E,EAAAjB,EAAAD,GACA,GAAAgqC,GAAA9oC,EAAA,UAQA8oC,GAAAC,cAAA5mC,UAAA2L,KAAA,KASAg7B,EAAAiH,UAAA5tC,UAAAq1E,eAAA,SAAA1pE,GAEA,IAAA,GAAA7N,GAAA,EAAAA,EAAAX,KAAAopC,SAAApoC,OAAAL,IAEA,GAAAX,KAAAopC,SAAAzoC,GAAA6N,OAAAA,EAEA,MAAAxO,MAAAopC,SAAAzoC,EAGA,OAAA,SAGA4rC,UAAA,KAAA4rC,KAAA,SAAAz3E,EAAAjB,EAAAD,GACA,GAAAgqC,GAAA9oC,EAAA,UASA8oC,GAAAC,cAAA5mC,UAAAu1E,kBAAA,SAAA3hC,GAiBA,MAfAA,GAAAA,GAAA,GAAAjN,GAAAwL,MAEAh1C,KAAAqxC,QAEArxC,KAAA2yC,+BAEA8D,EAAA9hC,EAAA3U,KAAAirC,eAAAC,GACAuL,EAAA3+B,EAAA9X,KAAAirC,eAAAE,KAIAsL,EAAA9hC,EAAA3U,KAAA8oC,SAAAn0B,EACA8hC,EAAA3+B,EAAA9X,KAAA8oC,SAAAhxB,GAGA2+B,KAGAlK,UAAA,KAAA8rC,KAAA,SAAA33E,EAAAjB,EAAAD,GAQAkB,EAAA,mBACAA,EAAA,oBACAA,EAAA,uBAKAjB,EAAAD,SACAmzE,UAAAjyE,EAAA,eACAkyE,aAAAlyE,EAAA,kBACAmyE,WAAAnyE,EAAA,mBAGA43E,eAAA,IAAAC,cAAA,IAAAC,iBAAA,IAAAC,kBAAA,IAAAC,mBAAA,IAAAC,sBAAA,MAAAC,KAAA,SAAAl4E,EAAAjB,EAAAD,GAmBA,QAAAq5E,KAEArvC,EAAA+c,eAAAxlD,KAAAf,KAEA,KAEA,+gCAGAg8D,YAAA35D,KAAA,MAAA8M,MAAA,GAAAtH,eAAA,EAAA,EAAA,EAAA,KACAixE,WAAAz2E,KAAA,KAAA8M,MAAA,KA5BA,GAAAq6B,GAAA9oC,EAAA,aAiCAm4E,GAAAh2E,UAAA0M,OAAA/L,OAAAgmC,EAAA+c,eAAA1jD,WACAg2E,EAAAh2E,UAAAmH,YAAA6uE,EACAp5E,EAAAD,QAAAq5E,EAEAtpE,OAAAuhC,iBAAA+nC,EAAAh2E,WAOAkI,MACAiF,IAAA,WAEA,MAAAhQ,MAAA2G,SAAAmyE,UAAA3pE,OAEAe,IAAA,SAAAf,GAEAnP,KAAA2G,SAAAmyE,UAAA3pE,MAAAA,QAKA4pE,aAAA,KAAAC,KAAA,SAAAt4E,EAAAjB,EAAAD,GAaA,QAAAy5E,KAEAzvC,EAAA+c,eAAAxlD,KAAAf,MAEAA,KAAAk5E,YAAA,GAAAC,GACAn5E,KAAAo5E,YAAA,GAAAC,GAEAr5E,KAAAs5E,cAAA,GAAA9vC,GAAA+c,eAnBA,GAAA/c,GAAA9oC,EAAA,cACAy4E,EAAAz4E,EAAA,uBACA24E,EAAA34E,EAAA,sBAoBAu4E,GAAAp2E,UAAA0M,OAAA/L,OAAAgmC,EAAA+c,eAAA1jD,WACAo2E,EAAAp2E,UAAAmH,YAAAivE,EACAx5E,EAAAD,QAAAy5E,EAEAA,EAAAp2E,UAAAw3D,YAAA,SAAAzxB,EAAArf,EAAArB,GAEA,GAAA0wC,GAAAhwB,EAAAoL,cAAA0nB,iBAAA,EAGA17D,MAAAs5E,cAAAjf,YAAAzxB,EAAArf,EAAArB,GAEAloB,KAAAk5E,YAAA7e,YAAAzxB,EAAArf,EAAAqvC,GAEAhwB,EAAA2X,iBAAAC,aAAAhX,EAAAiE,YAAAI,QAEA7tC,KAAAo5E,YAAA/e,YAAAzxB,EAAAgwB,EAAA1wC,GAEA0gB,EAAA2X,iBAAAC,aAAAhX,EAAAiE,YAAAC,QAEA9E,EAAAoL,cAAAkoB,mBAAAtD,IAGArpD,OAAAuhC,iBAAAmoC,EAAAp2E,WAQA02E,MACAvpE,IAAA,WAEA,MAAAhQ,MAAAk5E,YAAAK,MAEArpE,IAAA,SAAAf,GAEAnP,KAAAk5E,YAAAK,KAAAv5E,KAAAo5E,YAAAG,KAAApqE,IAWAqqE,OACAxpE,IAAA,WAEA,MAAAhQ,MAAAk5E,YAAAK,MAEArpE,IAAA,SAAAf,GAEAnP,KAAAk5E,YAAAK,KAAApqE,IAWAsqE,OACAzpE,IAAA,WAEA,MAAAhQ,MAAAo5E,YAAAG,MAEArpE,IAAA,SAAAf,GAEAnP,KAAAo5E,YAAAG,KAAApqE,QAKA4pE,aAAA,GAAAW,sBAAA,IAAAC,sBAAA,MAAAC,KAAA,SAAAl5E,EAAAjB,EAAAD,GAaA,QAAAq6E,GAAAC,EAAAC,GAEAvwC,EAAA+c,eAAAxlD,KAAAf,KAEA,0xBAEA,yhBAGAg6E,UAAA33E,KAAA,KAAA8M,MAAA,GACA2qE,MAAAz3E,KAAA,KAAA8M,MAAA2qE,GAAA,GACAC,MAAA13E,KAAA,KAAA8M,MAAA4qE,GAAA,KAIA/5E,KAAAs5E,cAAA,GAAA9vC,GAAA+c,eAQAvmD,KAAAi6E,OAAA,EAQAj6E,KAAA85E,KAAAA,GAAA,EAQA95E,KAAA+5E,KAAAA,GAAA,EAEA/5E,KAAAg6E,SAAA,EArDA,GAAAxwC,GAAA9oC,EAAA,aAwDAm5E,GAAAh3E,UAAA0M,OAAA/L,OAAAgmC,EAAA+c,eAAA1jD,WACAg3E,EAAAh3E,UAAAmH,YAAA6vE,EACAp6E,EAAAD,QAAAq6E,EAEAA,EAAAh3E,UAAAw3D,YAAA,SAAAzxB,EAAArf,EAAArB,EAAAnjB,GAEA,GAAAsI,GAAArN,KAAAo6D,UAAAxxB,EAIA,IAFA5oC,KAAA2G,SAAAqzE,SAAA7qE,MAAAnP,KAAAg6E,SAAA,EAAAh6E,KAAAi6E,QAAA1wD,EAAAujC,MAAAlpD,MAAA2lB,EAAAxe,KAAAnH,OAEA,IAAA5D,KAAAi6E,OACArxC,EAAAoL,cAAAqmB,YAAAhtD,EAAAkc,EAAArB,EAAAnjB,OACA,CACA,GAAA6zD,GAAAhwB,EAAAoL,cAAA0nB,iBAAA,EAEA9yB,GAAAoL,cAAAqmB,YAAAhtD,EAAAkc,EAAAqvC,EAAA7zD,EAEA,KAAA,GAAApE,GAAA,EAAAA,EAAAX,KAAAi6E,OAAA,EAAAt5E,IAGAioC,EAAAoL,cAAAqmB,YAAAhtD,EAAAurD,EAAAA,EAAA7zD,EAGA6jC,GAAAoL,cAAAqmB,YAAAhtD,EAAAurD,EAAA1wC,EAAAnjB,GAEA6jC,EAAAoL,cAAAkoB,mBAAAtD,KAKArpD,OAAAuhC,iBAAA+oC,EAAAh3E,WAQA02E,MACAvpE,IAAA,WAEA,MAAAhQ,MAAAg6E,UAEA9pE,IAAA,SAAAf,GAEAnP,KAAA0+C,QAAA,GAAAvvC,EACAnP,KAAAg6E,SAAA7qE,IAUA2qE,MACA9pE,IAAA,WAEA,MAAAhQ,MAAA85E,MAEA5pE,IAAA,SAAAf,GAEAnP,KAAA2G,SAAAmzE,KAAA3qE,MAAAA,IAUA4qE,MACA/pE,IAAA,WAEA,MAAAhQ,MAAA+5E,MAEA7pE,IAAA,SAAAf,GAEAnP,KAAA2G,SAAAozE,KAAA5qE,MAAAA,QAKA4pE,aAAA,KAAAmB,KAAA,SAAAx5E,EAAAjB,EAAAD,GAaA,QAAA26E,KAEA3wC,EAAA+c,eAAAxlD,KAAAf,MAEAA,KAAAk5E,YAAA,GAAAC,GACAn5E,KAAAo5E,YAAA,GAAAC,GAjBA,GAAA7vC,GAAA9oC,EAAA,cACAy4E,EAAAz4E,EAAA,iBACA24E,EAAA34E,EAAA,gBAkBAy5E,GAAAt3E,UAAA0M,OAAA/L,OAAAgmC,EAAA+c,eAAA1jD,WACAs3E,EAAAt3E,UAAAmH,YAAAmwE,EACA16E,EAAAD,QAAA26E,EAEAA,EAAAt3E,UAAAw3D,YAAA,SAAAzxB,EAAArf,EAAArB,GAEA,GAAA0wC,GAAAhwB,EAAAoL,cAAA0nB,iBAAA,EAEA17D,MAAAk5E,YAAA7e,YAAAzxB,EAAArf,EAAAqvC,GACA54D,KAAAo5E,YAAA/e,YAAAzxB,EAAAgwB,EAAA1wC,GAEA0gB,EAAAoL,cAAAkoB,mBAAAtD,IAGArpD,OAAAuhC,iBAAAqpC,EAAAt3E,WAQA02E,MACAvpE,IAAA,WAEA,MAAAhQ,MAAAk5E,YAAAK,MAEArpE,IAAA,SAAAf,GAEAnP,KAAA0+C,QAAA,GAAAlpC,KAAAygB,IAAA9mB,GACAnP,KAAAk5E,YAAAK,KAAAv5E,KAAAo5E,YAAAG,KAAApqE,IAWA8qE,QACAjqE,IAAA,WAEA,MAAAhQ,MAAAk5E,YAAAe,QAEA/pE,IAAA,SAAAf,GAEAnP,KAAAk5E,YAAAe,OAAAj6E,KAAAo5E,YAAAa,OAAA9qE,IAWAqqE,OACAxpE,IAAA,WAEA,MAAAhQ,MAAAk5E,YAAAK,MAEArpE,IAAA,SAAAf,GAEAnP,KAAAk5E,YAAAK,KAAApqE,IAWAsqE,OACAzpE,IAAA,WAEA,MAAAhQ,MAAAo5E,YAAAG,MAEArpE,IAAA,SAAAf,GAEAnP,KAAAo5E,YAAAG,KAAApqE,QAKA4pE,aAAA,GAAAqB,gBAAA,IAAAC,gBAAA,MAAAC,KAAA,SAAA55E,EAAAjB,EAAAD,GAYA,QAAA25E,KAEA3vC,EAAA+c,eAAAxlD,KAAAf,KAEA,22BAEA,uwBAGAg6E,UAAA33E,KAAA,KAAA8M,MAAA,KAUAnP,KAAAi6E,OAAA,EAEAj6E,KAAAg6E,SAAA,EAhCA,GAAAxwC,GAAA9oC,EAAA,aAmCAy4E,GAAAt2E,UAAA0M,OAAA/L,OAAAgmC,EAAA+c,eAAA1jD,WACAs2E,EAAAt2E,UAAAmH,YAAAmvE,EACA15E,EAAAD,QAAA25E,EAEAA,EAAAt2E,UAAAw3D,YAAA,SAAAzxB,EAAArf,EAAArB,EAAAnjB,GAEA,GAAAsI,GAAArN,KAAAo6D,UAAAxxB,EAIA,IAFA5oC,KAAA2G,SAAAqzE,SAAA7qE,MAAAnP,KAAAg6E,SAAA,EAAAh6E,KAAAi6E,QAAA1wD,EAAAujC,MAAAlpD,MAAA2lB,EAAAxe,KAAAnH,OAEA,IAAA5D,KAAAi6E,OAEArxC,EAAAoL,cAAAqmB,YAAAhtD,EAAAkc,EAAArB,EAAAnjB,OAGA,CAKA,IAAA,GAJA6zD,GAAAhwB,EAAAoL,cAAA0nB,iBAAA,GACA6e,EAAAhxD,EACAixD,EAAA5hB,EAEAj4D,EAAA,EAAAA,EAAAX,KAAAi6E,OAAA,EAAAt5E,IACA,CACAioC,EAAAoL,cAAAqmB,YAAAhtD,EAAAktE,EAAAC,GAAA,EAEA,IAAAne,GAAAme,CACAA,GAAAD,EACAA,EAAAle,EAGAzzB,EAAAoL,cAAAqmB,YAAAhtD,EAAAktE,EAAAryD,EAAAnjB,GAEA6jC,EAAAoL,cAAAkoB,mBAAAtD,KAKArpD,OAAAuhC,iBAAAqoC,EAAAt2E,WAQA02E,MACAvpE,IAAA,WAEA,MAAAhQ,MAAAg6E,UAEA9pE,IAAA,SAAAf,GAEAnP,KAAA0+C,QAAA,GAAAlpC,KAAAygB,IAAA9mB,GACAnP,KAAAg6E,SAAA7qE,QAKA4pE,aAAA,KAAA0B,KAAA,SAAA/5E,EAAAjB,EAAAD,GAYA,QAAA65E,KAEA7vC,EAAA+c,eAAAxlD,KAAAf,KAEA,02BAEA,uwBAGAg6E,UAAA33E,KAAA,KAAA8M,MAAA,KAIAnP,KAAAi6E,OAAA,EACAj6E,KAAAg6E,SAAA,EAzBA,GAAAxwC,GAAA9oC,EAAA,aA4BA24E,GAAAx2E,UAAA0M,OAAA/L,OAAAgmC,EAAA+c,eAAA1jD,WACAw2E,EAAAx2E,UAAAmH,YAAAqvE,EACA55E,EAAAD,QAAA65E,EAEAA,EAAAx2E,UAAAw3D,YAAA,SAAAzxB,EAAArf,EAAArB,EAAAnjB,GAEA,GAAAsI,GAAArN,KAAAo6D,UAAAxxB,EAIA,IAFA5oC,KAAA2G,SAAAqzE,SAAA7qE,MAAAqG,KAAAygB,IAAAj2B,KAAAg6E,UAAA,EAAAh6E,KAAAi6E,QAAA1wD,EAAAujC,MAAAjpD,OAAA0lB,EAAAxe,KAAAlH,QAEA,IAAA7D,KAAAi6E,OAEArxC,EAAAoL,cAAAqmB,YAAAhtD,EAAAkc,EAAArB,EAAAnjB,OAGA,CAKA,IAAA,GAJA6zD,GAAAhwB,EAAAoL,cAAA0nB,iBAAA,GACA6e,EAAAhxD,EACAixD,EAAA5hB,EAEAj4D,EAAA,EAAAA,EAAAX,KAAAi6E,OAAA,EAAAt5E,IACA,CACAioC,EAAAoL,cAAAqmB,YAAAhtD,EAAAktE,EAAAC,GAAA,EAEA,IAAAne,GAAAme,CACAA,GAAAD,EACAA,EAAAle,EAGAzzB,EAAAoL,cAAAqmB,YAAAhtD,EAAAktE,EAAAryD,EAAAnjB,GAEA6jC,EAAAoL,cAAAkoB,mBAAAtD,KAKArpD,OAAAuhC,iBAAAuoC,EAAAx2E,WAQA02E,MACAvpE,IAAA,WAEA,MAAAhQ,MAAAg6E,UAEA9pE,IAAA,SAAAf,GAEAnP,KAAA0+C,QAAA,GAAAlpC,KAAAygB,IAAA9mB,GACAnP,KAAAg6E,SAAA7qE,QAKA4pE,aAAA,KAAA2B,KAAA,SAAAh6E,EAAAjB,EAAAD,GAYA,QAAAm7E,KAEAnxC,EAAA+c,eAAAxlD,KAAAf,KAEA,KAEA,gyBAGA8oB,OAAAzmB,KAAA,KAAA8M,OAAAwF,EAAA,GAAAmD,EAAA,MApBA,GAAA0xB,GAAA9oC,EAAA,aAyBAi6E,GAAA93E,UAAA0M,OAAA/L,OAAAgmC,EAAA+c,eAAA1jD,WACA83E,EAAA93E,UAAAmH,YAAA2wE,EACAl7E,EAAAD,QAAAm7E,IAEA5B,aAAA,KAAA6B,KAAA,SAAAl6E,EAAAjB,EAAAD,GAoBA,QAAAq7E,KAEArxC,EAAA+c,eAAAxlD,KAAAf,KAEA,KAEA,m9BAGAuqB,GACAloB,KAAA,MAAA8M,OACA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,EACA,EAAA,EAAA,EAAA,EAAA,MAjCA,GAAAq6B,GAAA9oC,EAAA,aAwCAm6E,GAAAh4E,UAAA0M,OAAA/L,OAAAgmC,EAAA+c,eAAA1jD,WACAg4E,EAAAh4E,UAAAmH,YAAA6wE,EACAp7E,EAAAD,QAAAq7E,EASAA,EAAAh4E,UAAAi4E,YAAA,SAAAxkC,EAAAykC,GAEAA,IAAAA,CAEA,IAAAC,GAAA1kC,CAEAykC,KACA/6E,KAAAi7E,UAAAD,EAAAh7E,KAAA2G,SAAA4jB,EAAApb,MAAAmnC,GACA0kC,EAAAh7E,KAAAk7E,aAAAF,IAIAh7E,KAAA2G,SAAA4jB,EAAApb,MAAA6rE,GAWAH,EAAAh4E,UAAAo4E,UAAA,SAAAzxD,EAAA/oB,EAAAuE,GA+BA,MA3BAwkB,GAAA,GAAA/oB,EAAA,GAAAuE,EAAA,GAAAvE,EAAA,GAAAuE,EAAA,GAAAvE,EAAA,GAAAuE,EAAA,IAAAvE,EAAA,GAAAuE,EAAA,IACAwkB,EAAA,GAAA/oB,EAAA,GAAAuE,EAAA,GAAAvE,EAAA,GAAAuE,EAAA,GAAAvE,EAAA,GAAAuE,EAAA,IAAAvE,EAAA,GAAAuE,EAAA,IACAwkB,EAAA,GAAA/oB,EAAA,GAAAuE,EAAA,GAAAvE,EAAA,GAAAuE,EAAA,GAAAvE,EAAA,GAAAuE,EAAA,IAAAvE,EAAA,GAAAuE,EAAA,IACAwkB,EAAA,GAAA/oB,EAAA,GAAAuE,EAAA,GAAAvE,EAAA,GAAAuE,EAAA,GAAAvE,EAAA,GAAAuE,EAAA,IAAAvE,EAAA,GAAAuE,EAAA,IACAwkB,EAAA,GAAA/oB,EAAA,GAAAuE,EAAA,GAAAvE,EAAA,GAAAuE,EAAA,GAAAvE,EAAA,GAAAuE,EAAA,IAAAvE,EAAA,GAAAuE,EAAA,IAGAwkB,EAAA,GAAA/oB,EAAA,GAAAuE,EAAA,GAAAvE,EAAA,GAAAuE,EAAA,GAAAvE,EAAA,GAAAuE,EAAA,IAAAvE,EAAA,GAAAuE,EAAA,IACAwkB,EAAA,GAAA/oB,EAAA,GAAAuE,EAAA,GAAAvE,EAAA,GAAAuE,EAAA,GAAAvE,EAAA,GAAAuE,EAAA,IAAAvE,EAAA,GAAAuE,EAAA,IACAwkB,EAAA,GAAA/oB,EAAA,GAAAuE,EAAA,GAAAvE,EAAA,GAAAuE,EAAA,GAAAvE,EAAA,GAAAuE,EAAA,IAAAvE,EAAA,GAAAuE,EAAA,IACAwkB,EAAA,GAAA/oB,EAAA,GAAAuE,EAAA,GAAAvE,EAAA,GAAAuE,EAAA,GAAAvE,EAAA,GAAAuE,EAAA,IAAAvE,EAAA,GAAAuE,EAAA,IACAwkB,EAAA,GAAA/oB,EAAA,GAAAuE,EAAA,GAAAvE,EAAA,GAAAuE,EAAA,GAAAvE,EAAA,GAAAuE,EAAA,IAAAvE,EAAA,GAAAuE,EAAA,IAGAwkB,EAAA,IAAA/oB,EAAA,IAAAuE,EAAA,GAAAvE,EAAA,IAAAuE,EAAA,GAAAvE,EAAA,IAAAuE,EAAA,IAAAvE,EAAA,IAAAuE,EAAA,IACAwkB,EAAA,IAAA/oB,EAAA,IAAAuE,EAAA,GAAAvE,EAAA,IAAAuE,EAAA,GAAAvE,EAAA,IAAAuE,EAAA,IAAAvE,EAAA,IAAAuE,EAAA,IACAwkB,EAAA,IAAA/oB,EAAA,IAAAuE,EAAA,GAAAvE,EAAA,IAAAuE,EAAA,GAAAvE,EAAA,IAAAuE,EAAA,IAAAvE,EAAA,IAAAuE,EAAA,IACAwkB,EAAA,IAAA/oB,EAAA,IAAAuE,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","file":"pixi.min.js","sourcesContent":[null],"sourceRoot":"./"} \ No newline at end of file diff --git a/src/core/graphics/webgl/GraphicsRenderer.js b/src/core/graphics/webgl/GraphicsRenderer.js index 279525e..12d80c0 100644 --- a/src/core/graphics/webgl/GraphicsRenderer.js +++ b/src/core/graphics/webgl/GraphicsRenderer.js @@ -4,15 +4,15 @@ ObjectRenderer = require('../../renderers/webgl/utils/ObjectRenderer'), WebGLRenderer = require('../../renderers/webgl/WebGLRenderer'), WebGLGraphicsData = require('./WebGLGraphicsData'), - PrimitiveShader = require('./PrimitiveShader'), + PrimitiveShader = require('./shaders/PrimitiveShader'), // some drawing functions.. - buildLine = require('../buildLine'); - buildPoly = require('../buildPoly'); - buildComplexPoly = require('../buildComplexPoly'); - buildRectangle = require('../buildRectangle'); - buildRoundedRectangle = require('../buildRoundedRectangle'); - buildCircle = require('../buildCircle'); + buildLine = require('./utils/buildLine'); + buildPoly = require('./utils/buildPoly'); + buildComplexPoly = require('./utils/buildComplexPoly'); + buildRectangle = require('./utils/buildRectangle'); + buildRoundedRectangle = require('./utils/buildRoundedRectangle'); + buildCircle = require('./utils/buildCircle'); earcut = require('earcut'); diff --git a/src/core/graphics/webgl/PrimitiveShader.js b/src/core/graphics/webgl/PrimitiveShader.js deleted file mode 100644 index 44166b3..0000000 --- a/src/core/graphics/webgl/PrimitiveShader.js +++ /dev/null @@ -1,50 +0,0 @@ -var Shader = require('pixi-gl-core').GLShader; - -/** - * This shader is used to draw simple primitive shapes for {@link PIXI.Graphics}. - * - * @class - * @memberof PIXI - * @extends PIXI.Shader - * @param shaderManager {ShaderManager} The webgl shader manager this shader works for. - */ -function PrimitiveShader(gl) -{ - Shader.call(this, - gl, - // vertex shader - [ - 'attribute vec2 aVertexPosition;', - 'attribute vec4 aColor;', - - 'uniform mat3 translationMatrix;', - 'uniform mat3 projectionMatrix;', - - 'uniform float alpha;', - 'uniform float flipY;', - 'uniform vec3 tint;', - - 'varying vec4 vColor;', - - 'void main(void){', - ' gl_Position = vec4((projectionMatrix * translationMatrix * vec3(aVertexPosition, 1.0)).xy, 0.0, 1.0);', - ' vColor = aColor * vec4(tint * alpha, alpha);', - '}' - ].join('\n'), - // fragment shader - [ - 'precision mediump float;', - - 'varying vec4 vColor;', - - 'void main(void){', - ' gl_FragColor = vColor;', - '}' - ].join('\n') - ); -} - -PrimitiveShader.prototype = Object.create(Shader.prototype); -PrimitiveShader.prototype.constructor = PrimitiveShader; - -module.exports = PrimitiveShader; diff --git a/src/core/graphics/webgl/buildRoundedRectangle.js b/src/core/graphics/webgl/buildRoundedRectangle.js deleted file mode 100644 index 55bb1b4..0000000 --- a/src/core/graphics/webgl/buildRoundedRectangle.js +++ /dev/null @@ -1,127 +0,0 @@ -var buildLine = require('./buildLine'), - utils = require('../../utils'); - -/** - * Builds a rounded rectangle to draw - * - * @private - * @param graphicsData {PIXI.Graphics} The graphics object containing all the necessary properties - * @param webGLData {object} an object containing all the webGL-specific information to create this shape - */ -buildRoundedRectangle = function (graphicsData, webGLData) -{ - var rrectData = graphicsData.shape; - var x = rrectData.x; - var y = rrectData.y; - var width = rrectData.width; - var height = rrectData.height; - - var radius = rrectData.radius; - - var recPoints = []; - recPoints.push(x, y + radius); - this.quadraticBezierCurve(x, y + height - radius, x, y + height, x + radius, y + height, recPoints); - this.quadraticBezierCurve(x + width - radius, y + height, x + width, y + height, x + width, y + height - radius, recPoints); - this.quadraticBezierCurve(x + width, y + radius, x + width, y, x + width - radius, y, recPoints); - this.quadraticBezierCurve(x + radius, y, x, y, x, y + radius + 0.0000000001, recPoints); - - // this tiny number deals with the issue that occurs when points overlap and earcut fails to triangulate the item. - // TODO - fix this properly, this is not very elegant.. but it works for now. - - if (graphicsData.fill) - { - var color = utils.hex2rgb(graphicsData.fillColor); - var alpha = graphicsData.fillAlpha; - - var r = color[0] * alpha; - var g = color[1] * alpha; - var b = color[2] * alpha; - - var verts = webGLData.points; - var indices = webGLData.indices; - - var vecPos = verts.length/6; - - var triangles = earcut(recPoints, null, 2); - - var i = 0; - for (i = 0; i < triangles.length; i+=3) - { - indices.push(triangles[i] + vecPos); - indices.push(triangles[i] + vecPos); - indices.push(triangles[i+1] + vecPos); - indices.push(triangles[i+2] + vecPos); - indices.push(triangles[i+2] + vecPos); - } - - for (i = 0; i < recPoints.length; i++) - { - verts.push(recPoints[i], recPoints[++i], r, g, b, alpha); - } - } - - if (graphicsData.lineWidth) - { - var tempPoints = graphicsData.points; - - graphicsData.points = recPoints; - - this.buildLine(graphicsData, webGLData); - - graphicsData.points = tempPoints; - } -}; - -/** - * Calculate the points for a quadratic bezier curve. (helper function..) - * Based on: https://stackoverflow.com/questions/785097/how-do-i-implement-a-bezier-curve-in-c - * - * @private - * @param fromX {number} Origin point x - * @param fromY {number} Origin point x - * @param cpX {number} Control point x - * @param cpY {number} Control point y - * @param toX {number} Destination point x - * @param toY {number} Destination point y - * @param [out] {number[]} The output array to add points into. If not passed, a new array is created. - * @return {number[]} an array of points - */ -quadraticBezierCurve = function (fromX, fromY, cpX, cpY, toX, toY, out) -{ - var xa, - ya, - xb, - yb, - x, - y, - n = 20, - points = out || []; - - function getPt(n1 , n2, perc) { - var diff = n2 - n1; - - return n1 + ( diff * perc ); - } - - var j = 0; - for (var i = 0; i <= n; i++ ) { - j = i / n; - - // The Green Line - xa = getPt( fromX , cpX , j ); - ya = getPt( fromY , cpY , j ); - xb = getPt( cpX , toX , j ); - yb = getPt( cpY , toY , j ); - - // The Black Dot - x = getPt( xa , xb , j ); - y = getPt( ya , yb , j ); - - points.push(x, y); - } - - return points; -}; - - -module.exports = buildRoundedRectangle; \ No newline at end of file diff --git a/src/core/graphics/webgl/shaders/PrimitiveShader.js b/src/core/graphics/webgl/shaders/PrimitiveShader.js new file mode 100644 index 0000000..44166b3 --- /dev/null +++ b/src/core/graphics/webgl/shaders/PrimitiveShader.js @@ -0,0 +1,50 @@ +var Shader = require('pixi-gl-core').GLShader; + +/** + * This shader is used to draw simple primitive shapes for {@link PIXI.Graphics}. + * + * @class + * @memberof PIXI + * @extends PIXI.Shader + * @param shaderManager {ShaderManager} The webgl shader manager this shader works for. + */ +function PrimitiveShader(gl) +{ + Shader.call(this, + gl, + // vertex shader + [ + 'attribute vec2 aVertexPosition;', + 'attribute vec4 aColor;', + + 'uniform mat3 translationMatrix;', + 'uniform mat3 projectionMatrix;', + + 'uniform float alpha;', + 'uniform float flipY;', + 'uniform vec3 tint;', + + 'varying vec4 vColor;', + + 'void main(void){', + ' gl_Position = vec4((projectionMatrix * translationMatrix * vec3(aVertexPosition, 1.0)).xy, 0.0, 1.0);', + ' vColor = aColor * vec4(tint * alpha, alpha);', + '}' + ].join('\n'), + // fragment shader + [ + 'precision mediump float;', + + 'varying vec4 vColor;', + + 'void main(void){', + ' gl_FragColor = vColor;', + '}' + ].join('\n') + ); +} + +PrimitiveShader.prototype = Object.create(Shader.prototype); +PrimitiveShader.prototype.constructor = PrimitiveShader; + +module.exports = PrimitiveShader; diff --git a/src/core/graphics/webgl/utils/buildCircle.js b/src/core/graphics/webgl/utils/buildCircle.js index cc39fe0..f7d9eeb 100644 --- a/src/core/graphics/webgl/utils/buildCircle.js +++ b/src/core/graphics/webgl/utils/buildCircle.js @@ -76,7 +76,7 @@ y + Math.cos(seg * i) * height); } - this.buildLine(graphicsData, webGLData); + buildLine(graphicsData, webGLData); graphicsData.points = tempPoints; } diff --git a/src/core/graphics/webgl/utils/buildLine.js b/src/core/graphics/webgl/utils/buildLine.js index 6b73ac5..8d76567 100644 --- a/src/core/graphics/webgl/utils/buildLine.js +++ b/src/core/graphics/webgl/utils/buildLine.js @@ -1,4 +1,4 @@ -var math = require('../../math'), +var math = require('../../../math'), utils = require('../../../utils'); /** diff --git a/src/core/graphics/webgl/utils/buildRoundedRectangle.js b/src/core/graphics/webgl/utils/buildRoundedRectangle.js new file mode 100644 index 0000000..86f901e --- /dev/null +++ b/src/core/graphics/webgl/utils/buildRoundedRectangle.js @@ -0,0 +1,127 @@ +var buildLine = require('./buildLine'), + utils = require('../../../utils'); + +/** + * Builds a rounded rectangle to draw + * + * @private + * @param graphicsData {PIXI.Graphics} The graphics object containing all the necessary properties + * @param webGLData {object} an object containing all the webGL-specific information to create this shape + */ +buildRoundedRectangle = function (graphicsData, webGLData) +{ + var rrectData = graphicsData.shape; + var x = rrectData.x; + var y = rrectData.y; + var width = rrectData.width; + var height = rrectData.height; + + var radius = rrectData.radius; + + var recPoints = []; + recPoints.push(x, y + radius); + this.quadraticBezierCurve(x, y + height - radius, x, y + height, x + radius, y + height, recPoints); + this.quadraticBezierCurve(x + width - radius, y + height, x + width, y + height, x + width, y + height - radius, recPoints); + this.quadraticBezierCurve(x + width, y + radius, x + width, y, x + width - radius, y, recPoints); + this.quadraticBezierCurve(x + radius, y, x, y, x, y + radius + 0.0000000001, recPoints); + + // this tiny number deals with the issue that occurs when points overlap and earcut fails to triangulate the item. + // TODO - fix this properly, this is not very elegant.. but it works for now. + + if (graphicsData.fill) + { + var color = utils.hex2rgb(graphicsData.fillColor); + var alpha = graphicsData.fillAlpha; + + var r = color[0] * alpha; + var g = color[1] * alpha; + var b = color[2] * alpha; + + var verts = webGLData.points; + var indices = webGLData.indices; + + var vecPos = verts.length/6; + + var triangles = earcut(recPoints, null, 2); + + var i = 0; + for (i = 0; i < triangles.length; i+=3) + { + indices.push(triangles[i] + vecPos); + indices.push(triangles[i] + vecPos); + indices.push(triangles[i+1] + vecPos); + indices.push(triangles[i+2] + vecPos); + indices.push(triangles[i+2] + vecPos); + } + + for (i = 0; i < recPoints.length; i++) + { + verts.push(recPoints[i], recPoints[++i], r, g, b, alpha); + } + } + + if (graphicsData.lineWidth) + { + var tempPoints = graphicsData.points; + + graphicsData.points = recPoints; + + this.buildLine(graphicsData, webGLData); + + graphicsData.points = tempPoints; + } +}; + +/** + * Calculate the points for a quadratic bezier curve. (helper function..) + * Based on: https://stackoverflow.com/questions/785097/how-do-i-implement-a-bezier-curve-in-c + * + * @private + * @param fromX {number} Origin point x + * @param fromY {number} Origin point x + * @param cpX {number} Control point x + * @param cpY {number} Control point y + * @param toX {number} Destination point x + * @param toY {number} Destination point y + * @param [out] {number[]} The output array to add points into. If not passed, a new array is created. + * @return {number[]} an array of points + */ +quadraticBezierCurve = function (fromX, fromY, cpX, cpY, toX, toY, out) +{ + var xa, + ya, + xb, + yb, + x, + y, + n = 20, + points = out || []; + + function getPt(n1 , n2, perc) { + var diff = n2 - n1; + + return n1 + ( diff * perc ); + } + + var j = 0; + for (var i = 0; i <= n; i++ ) { + j = i / n; + + // The Green Line + xa = getPt( fromX , cpX , j ); + ya = getPt( fromY , cpY , j ); + xb = getPt( cpX , toX , j ); + yb = getPt( cpY , toY , j ); + + // The Black Dot + x = getPt( xa , xb , j ); + y = getPt( ya , yb , j ); + + points.push(x, y); + } + + return points; +}; + + +module.exports = buildRoundedRectangle; \ No newline at end of file